<?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>129232</bug_id>
          
          <creation_ts>2014-02-23 06:04:27 -0800</creation_ts>
          <short_desc>Update ANGLE to 836bd2176e5607b14846cf1fbc5932dbc91318f4</short_desc>
          <delta_ts>2014-02-23 16:39:35 -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>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dean Jackson">dino</reporter>
          <assigned_to name="Dean Jackson">dino</assigned_to>
          <cc>berto</cc>
    
    <cc>buildbot</cc>
    
    <cc>bunhere</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>philipj</cc>
    
    <cc>rakuco</cc>
    
    <cc>rniwa</cc>
    
    <cc>roger_fong</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>983686</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2014-02-23 06:04:27 -0800</bug_when>
    <thetext>Update ANGLE, in particular to get a fix for ANGLE bug 554.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983687</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-02-23 06:04:36 -0800</bug_when>
    <thetext>&lt;rdar://problem/16143495&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983688</commentid>
    <comment_count>2</comment_count>
      <attachid>224999</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2014-02-23 06:09:49 -0800</bug_when>
    <thetext>Created attachment 224999
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983689</commentid>
    <comment_count>3</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2014-02-23 06:10:36 -0800</bug_when>
    <thetext>Uploading a patch for EWS. The style checker is going to shit a chicken on this. 

I bet some of the ports will fail to build, so expect a few iterations here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983690</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-23 06:15:05 -0800</bug_when>
    <thetext>Note that there are important steps to take when updating ANGLE. See http://trac.webkit.org/wiki/UpdatingANGLE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983691</commentid>
    <comment_count>5</comment_count>
      <attachid>225000</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2014-02-23 07:03:05 -0800</bug_when>
    <thetext>Created attachment 225000
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983693</commentid>
    <comment_count>6</comment_count>
      <attachid>225001</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2014-02-23 07:25:56 -0800</bug_when>
    <thetext>Created attachment 225001
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983695</commentid>
    <comment_count>7</comment_count>
      <attachid>225002</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2014-02-23 07:58:59 -0800</bug_when>
    <thetext>Created attachment 225002
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983696</commentid>
    <comment_count>8</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2014-02-23 08:17:07 -0800</bug_when>
    <thetext>I need to reapply the max varyings work, and then it should be ready.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983706</commentid>
    <comment_count>9</comment_count>
      <attachid>225002</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2014-02-23 09:09:53 -0800</bug_when>
    <thetext>Comment on attachment 225002
Patch

Attachment 225002 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/5680391071465472

New failing tests:
webgl/1.0.2/conformance/glsl/misc/shader-varying-packing-restrictions.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983707</commentid>
    <comment_count>10</comment_count>
      <attachid>225004</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2014-02-23 09:09:57 -0800</bug_when>
    <thetext>Created attachment 225004
Archive of layout-test-results from webkit-ews-10 for mac-mountainlion-wk2

The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews.
Bot: webkit-ews-10  Port: mac-mountainlion-wk2  Platform: Mac OS X 10.8.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983710</commentid>
    <comment_count>11</comment_count>
      <attachid>225002</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2014-02-23 09:26:41 -0800</bug_when>
    <thetext>Comment on attachment 225002
Patch

Attachment 225002 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/6406196923727872

New failing tests:
webgl/1.0.2/conformance/glsl/misc/shader-varying-packing-restrictions.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983711</commentid>
    <comment_count>12</comment_count>
      <attachid>225006</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2014-02-23 09:26:45 -0800</bug_when>
    <thetext>Created attachment 225006
Archive of layout-test-results from webkit-ews-06 for mac-mountainlion

The attached test failures were seen while running run-webkit-tests on the mac-ews.
Bot: webkit-ews-06  Port: mac-mountainlion  Platform: Mac OS X 10.8.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983718</commentid>
    <comment_count>13</comment_count>
      <attachid>225002</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2014-02-23 10:04:41 -0800</bug_when>
    <thetext>Comment on attachment 225002
Patch

Attachment 225002 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/6444848542384128

New failing tests:
webgl/1.0.2/conformance/glsl/misc/shader-varying-packing-restrictions.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983719</commentid>
    <comment_count>14</comment_count>
      <attachid>225007</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2014-02-23 10:04:49 -0800</bug_when>
    <thetext>Created attachment 225007
Archive of layout-test-results from webkit-ews-09 for mac-mountainlion-wk2

The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews.
Bot: webkit-ews-09  Port: mac-mountainlion-wk2  Platform: Mac OS X 10.8.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983723</commentid>
    <comment_count>15</comment_count>
      <attachid>225002</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2014-02-23 10:29:14 -0800</bug_when>
    <thetext>Comment on attachment 225002
Patch

Attachment 225002 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/5934675147096064

New failing tests:
webgl/1.0.2/conformance/glsl/misc/shader-varying-packing-restrictions.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983724</commentid>
    <comment_count>16</comment_count>
      <attachid>225009</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2014-02-23 10:29:18 -0800</bug_when>
    <thetext>Created attachment 225009
Archive of layout-test-results from webkit-ews-08 for mac-mountainlion

The attached test failures were seen while running run-webkit-tests on the mac-ews.
Bot: webkit-ews-08  Port: mac-mountainlion  Platform: Mac OS X 10.8.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983751</commentid>
    <comment_count>17</comment_count>
      <attachid>225015</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2014-02-23 14:39:38 -0800</bug_when>
    <thetext>Created attachment 225015
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983752</commentid>
    <comment_count>18</comment_count>
      <attachid>225015</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-02-23 15:38:51 -0800</bug_when>
    <thetext>Comment on attachment 225015
Patch

r=me. It seems to work locally, but we need to keep an eye on the Windows bot after landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983762</commentid>
    <comment_count>19</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2014-02-23 16:39:35 -0800</bug_when>
    <thetext>Committed r164565: &lt;http://trac.webkit.org/changeset/164565&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>224999</attachid>
            <date>2014-02-23 06:09:49 -0800</date>
            <delta_ts>2014-02-23 06:53:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-129232-20140224010928.patch</filename>
            <type>text/plain</type>
            <size>3880081</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY0NTUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggZTJhMTVkZjMzNmQ4ODRkNWQ3MDdiZjI4NDBiMWNlY2YxODUzOWVkYS4uMjUyNzZhYjQyNTgx
MzUyOTVkMGIxZDY1ZGUxZmQ3MGY0M2FkNTYzMyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE2IEBACisyMDE0LTAyLTIzICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxl
LmNvbT4KKworICAgICAgICBVcGRhdGUgQU5HTEUgdG8gODM2YmQyMTc2ZTU2MDdiMTQ4NDZjZjFm
YmM1OTMyZGJjOTEzMThmNAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTI5MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgSSBhbHNvIHJlYXBwbGllZCBzb21lIG9mIG91ciBjaGFuZ2VzIGJlbG93LCBpbmNs
dWRpbmcgZGlzYWJsaW5nIHRoZSBjbGFuZworICAgICAgICBkZXByZWNhdGlvbiB3YXJuaW5ncyBp
biBzb21lIGZpbGVzLCBhZGRpbmcgdGhlIEFwcGxlIG5vdGUgYWJvdXQgbGljZW5zZQorICAgICAg
ICBhbmQgZGVmaW5pbmcgWVlfTk9fSU5QVVQuCisKKyAgICAgICAgSHVnZSBsaXN0IG9mIHNvdXJj
ZSBjaGFuZ2VzIG9taXR0ZWQuCisKIDIwMTMtMTItMTggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8
Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEZpeCBtYWtlIGRpc3Rj
aGVjay4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnBsaXN0IGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUucGxpc3QKaW5kZXggNzFmNWFiNzVjNzA1NWVh
NWE4ZTNkNGQxMDc4MTYwZjMzNzgyZjJjMi4uZWYyOTRiOWNkYTc0NzY3Yjg1M2U2MzRlZTJlZTVi
MjY3YWVjMTM1NiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUucGxp
c3QKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUucGxpc3QKQEAgLTYsMTMgKzYs
MTMgQEAKIAkJPGtleT5PcGVuU291cmNlUHJvamVjdDwva2V5PgogCQk8c3RyaW5nPkFOR0xFPC9z
dHJpbmc+CiAJCTxrZXk+T3BlblNvdXJjZVZlcnNpb248L2tleT4KLQkJPHN0cmluZz5yMTY0MTwv
c3RyaW5nPgorCQk8c3RyaW5nPjgzNmJkMjE3NmU1NjA3YjE0ODQ2Y2YxZmJjNTkzMmRiYzkxMzE4
ZjQ8L3N0cmluZz4KIAkJPGtleT5PcGVuU291cmNlV2Vic2l0ZVVSTDwva2V5PgogCQk8c3RyaW5n
Pmh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmdsZXByb2plY3QvPC9zdHJpbmc+CiAJCTxrZXk+
T3BlblNvdXJjZVNDTTwva2V5PgotCQk8c3RyaW5nPmdpdCBjbG9uZSBodHRwczovL2NvZGUuZ29v
Z2xlLmNvbS9wL2FuZ2xlcHJvamVjdC8gJiYgY2QgYW5nbGVwcm9qZWN0ICYmIGdpdCBjaGVja291
dCBhNjBlMDgwNTcyMWY2MmMyOGE1NWZhZjJkZjc0NDcyY2M1ZmM5MWZjPC9zdHJpbmc+CisJCTxz
dHJpbmc+Z2l0IGNsb25lIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0LyAm
JiBjZCBhbmdsZXByb2plY3QgJiYgZ2l0IGNoZWNrb3V0IDgzNmJkMjE3NmU1NjA3YjE0ODQ2Y2Yx
ZmJjNTkzMmRiYzkxMzE4ZjQ8L3N0cmluZz4KIAkJPGtleT5PcGVuU291cmNlSW1wb3J0RGF0ZTwv
a2V5PgotCQk8c3RyaW5nPjIwMTMtMTEtMDc8L3N0cmluZz4KKwkJPHN0cmluZz4yMDE0LTAyLTE4
PC9zdHJpbmc+CiAJCTxrZXk+T3BlblNvdXJjZUxpY2Vuc2U8L2tleT4KIAkJPHN0cmluZz5CU0Q8
L3N0cmluZz4KIAkJPGtleT5PcGVuU291cmNlTGljZW5zZUZpbGU8L2tleT4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnZjeHByb2ovbGliR0xFU3YyLnZjeHByb2og
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS52Y3hwcm9qL2xpYkdMRVN2Mi52Y3hwcm9q
CmluZGV4IDljODk4MzAxOWYzZjUxMjM4MDkyYjRmMDc5YWNjNjVkM2U2OTk1NmUuLjhkMTJkMjky
OTVkZmQwZmNlMjdkNGJhZjVlZmQ2OTM4OTI2NzY0M2YgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL0FOR0xFLnZjeHByb2ovbGliR0xFU3YyLnZjeHByb2oKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvQU5HTEUudmN4cHJvai9saWJHTEVTdjIudmN4cHJvagpAQCAtMjA3
LDQwICsyMDcsNDAgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21tb25cUmVm
Q291bnRPYmplY3QuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdM
RVN2MlxSZW5kZXJidWZmZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Jj
XGxpYkdMRVN2MlxyZW5kZXJlclxCbGl0LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcRmVuY2UxMS5jcHAiIC8+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEZlbmNlOS5jcHAiIC8+CisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXEZlbmNl
MTEuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5k
ZXJlclxkM2Q5XEZlbmNlOS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNc
bGliR0xFU3YyXHJlbmRlcmVyXEJ1ZmZlclN0b3JhZ2UuY3BwIiAvPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxCdWZmZXJTdG9yYWdlMTEuY3BwIiAv
PgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxCdWZm
ZXJTdG9yYWdlOS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xF
U3YyXHJlbmRlcmVyXGQzZDExXEJ1ZmZlclN0b3JhZ2UxMS5jcHAiIC8+CisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcQnVmZmVyU3RvcmFnZTku
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJl
clxJbWFnZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXEltYWdlOS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNc
bGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcSW1hZ2U5LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcSW5kZXhCdWZmZXIuY3BwIiAvPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxJbmRleEJ1ZmZl
cjExLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVu
ZGVyZXJcSW5kZXhCdWZmZXI5LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNy
Y1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcSW5kZXhCdWZmZXIxMS5jcHAiIC8+CisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcSW5kZXhCdWZm
ZXI5LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVu
ZGVyZXJcSW5kZXhEYXRhTWFuYWdlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEltYWdlU1NFMi5jcHAiIC8+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEltYWdlMTEuY3BwIiAvPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxJbWFn
ZTExLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVu
ZGVyZXJcSW5wdXRMYXlvdXRDYWNoZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFF1ZXJ5MTEuY3BwIiAvPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxRdWVyeTkuY3BwIiAvPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxRdWVyeTEx
LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVy
ZXJcZDNkOVxRdWVyeTkuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxp
YkdMRVN2MlxyZW5kZXJlclxSZW5kZXJlci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFJlbmRlcmVyMTEuY3BwIiAvPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxyZW5kZXJlcjExX3V0aWxz
LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVy
ZXJcUmVuZGVyZXI5LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJH
TEVTdjJccmVuZGVyZXJccmVuZGVyZXI5X3V0aWxzLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUmVuZGVyVGFyZ2V0MTEuY3BwIiAvPgor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxS
ZW5kZXJlcjExLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVT
djJccmVuZGVyZXJcZDNkMTFccmVuZGVyZXIxMV91dGlscy5jcHAiIC8+CisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcUmVuZGVyZXI5LmNwcCIg
Lz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNk
OVxyZW5kZXJlcjlfdXRpbHMuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Jj
XGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxSZW5kZXJUYXJnZXQxMS5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFJlbmRlclRhcmdldDku
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJl
clxSZW5kZXJTdGF0ZUNhY2hlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNy
Y1xsaWJHTEVTdjJccmVuZGVyZXJcU2hhZGVyRXhlY3V0YWJsZTExLmNwcCIgLz4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcU2hhZGVyRXhlY3V0YWJs
ZTkuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5k
ZXJlclxTd2FwQ2hhaW4xMS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNc
bGliR0xFU3YyXHJlbmRlcmVyXFN3YXBDaGFpbjkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxTaGFkZXJFeGVjdXRhYmxlMTEu
Y3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJl
clxkM2Q5XFNoYWRlckV4ZWN1dGFibGU5LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcU3dhcENoYWluMTEuY3BwIiAvPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XFN3YXBD
aGFpbjkuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2Mlxy
ZW5kZXJlclxUZXh0dXJlU3RvcmFnZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFRleHR1cmVTdG9yYWdlMTEuY3BwIiAvPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxUZXh0dXJlU3RvcmFn
ZTkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5k
ZXJlclxkM2QxMVxUZXh0dXJlU3RvcmFnZTExLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxUZXh0dXJlU3RvcmFnZTkuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxWZXJ0
ZXhCdWZmZXIuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2
MlxyZW5kZXJlclxWZXJ0ZXhCdWZmZXIxMS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFZlcnRleEJ1ZmZlcjkuY3BwIiAvPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxWZXJ0ZXhC
dWZmZXIxMS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXGQzZDlcVmVydGV4QnVmZmVyOS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFZlcnRleERhdGFNYW5hZ2VyLmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcVmVydGV4
RGVjbGFyYXRpb25DYWNoZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNc
bGliR0xFU3YyXFJlc291cmNlTWFuYWdlci5jcHAiIC8+CkBAIC0yNzUsMzcgKzI3NSwzNyBAQAog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbW1vblxSZWZDb3VudE9iamVjdC5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxSZW5kZXJidWZmZXIu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJc
QmxpdC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5k
ZXJlclxGZW5jZTExLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xF
U3YyXHJlbmRlcmVyXEZlbmNlOS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxGZW5jZTExLmgiIC8+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcRmVuY2U5LmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEZlbmNlSW1wbC5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxC
dWZmZXJTdG9yYWdlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xF
U3YyXHJlbmRlcmVyXEJ1ZmZlclN0b3JhZ2UxMS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxCdWZmZXJTdG9yYWdlOS5oIiAvPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxCdWZmZXJT
dG9yYWdlMTEuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJc
cmVuZGVyZXJcZDNkOVxCdWZmZXJTdG9yYWdlOS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxnZW5lcmF0ZW1pcC5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxJbWFnZS5oIiAvPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxJbWFnZTExLmgi
IC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXElt
YWdlOS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5k
ZXJlclxkM2QxMVxJbWFnZTExLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNc
bGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcSW1hZ2U5LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEluZGV4QnVmZmVyLmgiIC8+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEluZGV4QnVmZmVyMTEu
aCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJc
SW5kZXhCdWZmZXI5LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xF
U3YyXHJlbmRlcmVyXGQzZDExXEluZGV4QnVmZmVyMTEuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxJbmRleEJ1ZmZlcjkuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcSW5kZXhE
YXRhTWFuYWdlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2
MlxyZW5kZXJlclxJbnB1dExheW91dENhY2hlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFF1ZXJ5MTEuaCIgLz4KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcUXVlcnkxMS5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxRdWVyeUlt
cGwuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVy
ZXJcUXVlcnk5LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXGQzZDlcUXVlcnk5LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxz
cmNcbGliR0xFU3YyXHJlbmRlcmVyXFJlbmRlcmVyLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFJlbmRlcmVyMTEuaCIgLz4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJccmVuZGVyZXIxMV91dGls
cy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJl
clxSZW5kZXJlcjkuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVT
djJccmVuZGVyZXJccmVuZGVyZXI5X3V0aWxzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFJlbmRlcmVyMTEuaCIgLz4KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFccmVuZGVy
ZXIxMV91dGlscy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2
MlxyZW5kZXJlclxkM2Q5XFJlbmRlcmVyOS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XHJlbmRlcmVyOV91dGlscy5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxSZW5kZXJUYXJn
ZXQuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVy
ZXJcUmVuZGVyVGFyZ2V0MTEuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xs
aWJHTEVTdjJccmVuZGVyZXJcUmVuZGVyVGFyZ2V0OS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxSZW5kZXJUYXJnZXQxMS5oIiAv
PgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5
XFJlbmRlclRhcmdldDkuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJH
TEVTdjJccmVuZGVyZXJcUmVuZGVyU3RhdGVDYWNoZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxTaGFkZXJDYWNoZS5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxTaGFkZXJFeGVjdXRh
YmxlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRl
cmVyXFNoYWRlckV4ZWN1dGFibGUxMS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
c3JjXGxpYkdMRVN2MlxyZW5kZXJlclxTaGFkZXJFeGVjdXRhYmxlOS5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxTaGFkZXJFeGVj
dXRhYmxlMTEuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJc
cmVuZGVyZXJcZDNkOVxTaGFkZXJFeGVjdXRhYmxlOS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVkXGNsZWFyMTF2
cy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJl
clxzaGFkZXJzXGNvbXBpbGVkXGNsZWFybXVsdGlwbGUxMXBzLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRcY2xl
YXJzaW5nbGUxMXBzLmgiIC8+CkBAIC0zMjAsMTUgKzMyMCwxNSBAQAogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVkXHBhc3N0
aHJvdWdocmdiYTExcHMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJH
TEVTdjJccmVuZGVyZXJcc2hhZGVyc1xjb21waWxlZFxzdGFuZGFyZHZzLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFN3YXBDaGFpbi5oIiAv
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxTd2Fw
Q2hhaW4xMS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2Mlxy
ZW5kZXJlclxTd2FwQ2hhaW45LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNc
bGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFN3YXBDaGFpbjExLmgiIC8+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcU3dhcENoYWluOS5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxUZXh0
dXJlU3RvcmFnZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2
MlxyZW5kZXJlclxUZXh0dXJlU3RvcmFnZTExLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFRleHR1cmVTdG9yYWdlOS5oIiAvPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxUZXh0dXJl
U3RvcmFnZTExLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXGQzZDlcVGV4dHVyZVN0b3JhZ2U5LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFZlcnRleEJ1ZmZlci5oIiAvPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxWZXJ0ZXhCdWZmZXIx
MS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJl
clxWZXJ0ZXhCdWZmZXI5LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGli
R0xFU3YyXHJlbmRlcmVyXHZlcnRleGNvbnZlcnNpb24uaCIgLz4KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcVmVydGV4QnVmZmVyMTEuaCIg
Lz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNk
OVxWZXJ0ZXhCdWZmZXI5LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGli
R0xFU3YyXHJlbmRlcmVyXGQzZDlcdmVydGV4Y29udmVyc2lvbi5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxWZXJ0ZXhEYXRhTWFuYWdlci5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxW
ZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxz
cmNcbGliR0xFU3YyXHJlc291cmNlLmgiIC8+CkBAIC0zNDEsMTEgKzM0MSwxMSBAQAogICA8L0l0
ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KICAgICA8Tm9uZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xF
U3YyXGxpYkdMRVN2Mi5kZWYiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2
MlxyZW5kZXJlclxzaGFkZXJzXEJsaXQucHMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5cc3Jj
XGxpYkdMRVN2MlxyZW5kZXJlclxzaGFkZXJzXEJsaXQudnMiIC8+Ci0gICAgPE5vbmUgSW5jbHVk
ZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxzaGFkZXJzXENsZWFyMTEuaGxzbCIgLz4KLSAg
ICA8Tm9uZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXHNoYWRlcnNcZ2VuZXJh
dGVfc2hhZGVycy5iYXQiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2Mlxy
ZW5kZXJlclxzaGFkZXJzXFBhc3N0aHJvdWdoMTEuaGxzbCIgLz4KKyAgICA8Tm9uZSBJbmNsdWRl
PSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcc2hhZGVyc1xCbGl0LnBzIiAvPgorICAg
IDxOb25lIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxzaGFkZXJzXEJs
aXQudnMiIC8+CisgICAgPE5vbmUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxk
M2QxMVxzaGFkZXJzXENsZWFyMTEuaGxzbCIgLz4KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxzcmNc
bGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcc2hhZGVyc1xnZW5lcmF0ZV9zaGFkZXJzLmJhdCIgLz4K
KyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXHNoYWRl
cnNcUGFzc3Rocm91Z2gxMS5obHNsIiAvPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4K
ICAgICA8UmVzb3VyY2VDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJcbGliR0xFU3Yy
LnJjIiAvPgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUudmN4cHJv
ai9saWJHTEVTdjIudmN4cHJvai5maWx0ZXJzIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5H
TEUudmN4cHJvai9saWJHTEVTdjIudmN4cHJvai5maWx0ZXJzCmluZGV4IGRmYzA2ZjFjYmQ4YWYy
ZDhmYjU0NzJlYWY4Y2ZjZTQwNGQwNTBkZjkuLmE5NjQ5NjYxMDY5OGE5YzEyZTE3MmQ2YjU4MDMz
ZTFlYmVkOGJiZmEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnZj
eHByb2ovbGliR0xFU3YyLnZjeHByb2ouZmlsdGVycworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9BTkdMRS52Y3hwcm9qL2xpYkdMRVN2Mi52Y3hwcm9qLmZpbHRlcnMKQEAgLTEyOCw4OCAr
MTI4LDg4IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRl
cmVyXEJ1ZmZlclN0b3JhZ2UuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRl
cmVyPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEJ1ZmZlclN0b3JhZ2UxMS5jcHAiPgorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxCdWZmZXJTdG9y
YWdlMTEuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRl
cj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJH
TEVTdjJccmVuZGVyZXJcRmVuY2UxMS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
c3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxGZW5jZTExLmNwcCI+CiAgICAgICA8RmlsdGVy
PlNvdXJjZSBGaWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEltYWdlMTEuY3Bw
Ij4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNk
MTFcSW1hZ2UxMS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwv
RmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Jj
XGxpYkdMRVN2MlxyZW5kZXJlclxJbmRleEJ1ZmZlcjExLmNwcCI+CisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXEluZGV4QnVmZmVyMTEuY3Bw
Ij4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4KICAgICA8
L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVu
ZGVyZXJcUXVlcnkxMS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdM
RVN2MlxyZW5kZXJlclxkM2QxMVxRdWVyeTExLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBG
aWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFJlbmRlcmVyMTEuY3BwIj4KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcUmVu
ZGVyZXIxMS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwvRmls
dGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxp
YkdMRVN2MlxyZW5kZXJlclxyZW5kZXJlcjExX3V0aWxzLmNwcCI+CisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXHJlbmRlcmVyMTFfdXRpbHMu
Y3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4KICAg
ICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJc
cmVuZGVyZXJcUmVuZGVyVGFyZ2V0MTEuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcUmVuZGVyVGFyZ2V0MTEuY3BwIj4KICAgICAg
IDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGls
ZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcU2hh
ZGVyRXhlY3V0YWJsZTExLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGli
R0xFU3YyXHJlbmRlcmVyXGQzZDExXFNoYWRlckV4ZWN1dGFibGUxMS5jcHAiPgogICAgICAgPEZp
bHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxTd2FwQ2hh
aW4xMS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5k
ZXJlclxkM2QxMVxTd2FwQ2hhaW4xMS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNc
UmVuZGVyZXIxMTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxUZXh0dXJlU3RvcmFnZTExLmNwcCI+Cisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFRl
eHR1cmVTdG9yYWdlMTEuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVy
MTE8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcVmVydGV4QnVmZmVyMTEuY3BwIj4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcVmVydGV4QnVmZmVy
MTEuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4K
ICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVT
djJccmVuZGVyZXJcQnVmZmVyU3RvcmFnZTkuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxCdWZmZXJTdG9yYWdlOS5jcHAiPgogICAg
ICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBp
bGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEZl
bmNlOS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5k
ZXJlclxkM2Q5XEZlbmNlOS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVy
ZXI5PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEltYWdlOS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XEltYWdlOS5jcHAiPgogICAgICAg
PEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEluZGV4
QnVmZmVyOS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2Mlxy
ZW5kZXJlclxkM2Q5XEluZGV4QnVmZmVyOS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmls
ZXNcUmVuZGVyZXI5PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFF1ZXJ5OS5jcHAiPgorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XFF1ZXJ5OS5jcHAi
PgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+CiAgICAgPC9D
bENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRl
cmVyXFJlbmRlcmVyOS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdM
RVN2MlxyZW5kZXJlclxkM2Q5XFJlbmRlcmVyOS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2Ug
RmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXHJlbmRlcmVyOV91dGlscy5jcHAi
PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5
XHJlbmRlcmVyOV91dGlscy5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVy
ZXI5PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFJlbmRlclRhcmdldDkuY3BwIj4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxSZW5kZXJUYXJnZXQ5
LmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAg
ICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJc
cmVuZGVyZXJcU2hhZGVyRXhlY3V0YWJsZTkuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxTaGFkZXJFeGVjdXRhYmxlOS5jcHAiPgog
ICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+CiAgICAgPC9DbENv
bXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVy
XFN3YXBDaGFpbjkuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVT
djJccmVuZGVyZXJcZDNkOVxTd2FwQ2hhaW45LmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBG
aWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcVGV4dHVyZVN0b3JhZ2U5LmNwcCI+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlc
VGV4dHVyZVN0b3JhZ2U5LmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJl
cjk8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcVmVydGV4QnVmZmVyOS5jcHAiPgorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XFZlcnRleEJ1ZmZlcjku
Y3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPgogICAg
IDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2Mlxy
ZW5kZXJlclxCbGl0LmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xF
U3YyXHJlbmRlcmVyXGQzZDlcQmxpdC5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNc
UmVuZGVyZXI5PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXElucHV0TGF5b3V0Q2FjaGUuY3BwIj4KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcSW5w
dXRMYXlvdXRDYWNoZS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIx
MTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
c3JjXGxpYkdMRVN2MlxyZW5kZXJlclxSZW5kZXJTdGF0ZUNhY2hlLmNwcCI+CisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFJlbmRlclN0YXRl
Q2FjaGUuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRl
cj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJH
TEVTdjJccmVuZGVyZXJcVmVydGV4RGVjbGFyYXRpb25DYWNoZS5jcHAiPgorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XFZlcnRleERlY2xhcmF0
aW9uQ2FjaGUuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyOTwvRmls
dGVyPgogICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxp
YkdMRVN2MlxwcmVjb21waWxlZC5jcHAiPgpAQCAtMzkxLDk0ICszOTEsOTQgQEAKICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcVmVydGV4RGF0YU1hbmFn
ZXIuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjwvRmlsdGVyPgogICAg
IDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2Mlxy
ZW5kZXJlclxCdWZmZXJTdG9yYWdlMTEuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxz
cmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXEJ1ZmZlclN0b3JhZ2UxMS5oIj4KICAgICAgIDxG
aWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcSW5kZXhC
dWZmZXIxMS5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVu
ZGVyZXJcZDNkMTFcSW5kZXhCdWZmZXIxMS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVz
XFJlbmRlcmVyMTE8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUXVlcnkxMS5oIj4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcUXVlcnkxMS5oIj4K
ICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4KICAgICA8L0Ns
SW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVy
ZXJcUmVuZGVyZXIxMS5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVT
djJccmVuZGVyZXJcZDNkMTFcUmVuZGVyZXIxMS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZp
bGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUmVuZGVyVGFyZ2V0MTEuaCI+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFJl
bmRlclRhcmdldDExLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwv
RmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGxpYkdMRVN2MlxyZW5kZXJlclxTaGFkZXJFeGVjdXRhYmxlMTEuaCI+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFNoYWRlckV4ZWN1dGFi
bGUxMS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4K
ICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVT
djJccmVuZGVyZXJcU3dhcENoYWluMTEuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxz
cmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFN3YXBDaGFpbjExLmgiPgogICAgICAgPEZpbHRl
cj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxUZXh0dXJlU3Rv
cmFnZTExLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5k
ZXJlclxkM2QxMVxUZXh0dXJlU3RvcmFnZTExLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmls
ZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxWZXJ0ZXhCdWZmZXIxMS5oIj4KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcVmVy
dGV4QnVmZmVyMTEuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjExPC9G
aWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNc
bGliR0xFU3YyXHJlbmRlcmVyXEJ1ZmZlclN0b3JhZ2U5LmgiPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XEJ1ZmZlclN0b3JhZ2U5LmgiPgog
ICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+CiAgICAgPC9DbElu
Y2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVy
XEZlbmNlOS5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVu
ZGVyZXJcZDNkOVxGZW5jZTkuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJl
cjk8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcSW1hZ2U5LmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XEltYWdlOS5oIj4KICAgICAgIDxGaWx0
ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxJbmRleEJ1ZmZl
cjkuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVy
XGQzZDlcSW5kZXhCdWZmZXI5LmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVy
ZXI5PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFF1ZXJ5OS5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxRdWVyeTkuaCI+CiAgICAgICA8Rmls
dGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUmVuZGVyZXI5
LmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxk
M2Q5XFJlbmRlcmVyOS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyOTwv
RmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGxpYkdMRVN2MlxyZW5kZXJlclxyZW5kZXJlcjlfdXRpbHMuaCI+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlccmVuZGVyZXI5X3V0aWxzLmgi
PgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+CiAgICAgPC9D
bEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRl
cmVyXFJlbmRlclRhcmdldDkuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGli
R0xFU3YyXHJlbmRlcmVyXGQzZDlcUmVuZGVyVGFyZ2V0OS5oIj4KICAgICAgIDxGaWx0ZXI+SGVh
ZGVyIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxTaGFkZXJFeGVjdXRhYmxl
OS5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJc
ZDNkOVxTaGFkZXJFeGVjdXRhYmxlOS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJl
bmRlcmVyOTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxTd2FwQ2hhaW45LmgiPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XFN3YXBDaGFpbjkuaCI+
CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8L0Ns
SW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVy
ZXJcVGV4dHVyZVN0b3JhZ2U5LmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxp
YkdMRVN2MlxyZW5kZXJlclxkM2Q5XFRleHR1cmVTdG9yYWdlOS5oIj4KICAgICAgIDxGaWx0ZXI+
SGVhZGVyIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxWZXJ0ZXhCdWZmZXI5
LmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxk
M2Q5XFZlcnRleEJ1ZmZlcjkuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJl
cjk8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcRmVuY2UxMS5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcRmVuY2UxMS5oIj4KICAgICAgIDxG
aWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcSW1hZ2Ux
MS5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJc
ZDNkMTFcSW1hZ2UxMS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyMTE8
L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNy
Y1xsaWJHTEVTdjJccmVuZGVyZXJccmVuZGVyZXIxMV91dGlscy5oIj4KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFccmVuZGVyZXIxMV91dGls
cy5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4KICAg
ICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJc
cmVuZGVyZXJcRmVuY2U5LmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdM
RVN2MlxyZW5kZXJlclxkM2Q5XEZlbmNlOS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVz
XFJlbmRlcmVyXFJlbmRlcmVyOTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxRdWVyeTExLmgiPgorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxRdWVy
eTExLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXJcUmVuZGVyZXIxMTwv
RmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGxpYkdMRVN2MlxyZW5kZXJlclxCbGl0LmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
c3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XEJsaXQuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRl
ciBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcU2hhZGVyQ2FjaGUuaCI+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcU2hh
ZGVyQ2FjaGUuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRl
cj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJH
TEVTdjJccmVuZGVyZXJcSW5wdXRMYXlvdXRDYWNoZS5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcSW5wdXRMYXlvdXRDYWNoZS5oIj4K
ICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4KICAgICA8L0Ns
SW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVy
ZXJcUmVuZGVyU3RhdGVDYWNoZS5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xs
aWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcUmVuZGVyU3RhdGVDYWNoZS5oIj4KICAgICAgIDxGaWx0
ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcVmVydGV4RGVj
bGFyYXRpb25DYWNoZS5oIj4KQEAgLTUwNywxMCArNTA3LDEwIEBACiAgICAgPE5vbmUgSW5jbHVk
ZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxzaGFkZXJzXGdlbmVyYXRlX3NoYWRlcnMuYmF0
Ij4KICAgICAgIDxGaWx0ZXI+U2hhZGVyczwvRmlsdGVyPgogICAgIDwvTm9uZT4KLSAgICA8Tm9u
ZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXHNoYWRlcnNcUGFzc3Rocm91Z2gx
MS5obHNsIj4KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQz
ZDExXHNoYWRlcnNcUGFzc3Rocm91Z2gxMS5obHNsIj4KICAgICAgIDxGaWx0ZXI+U2hhZGVyczwv
RmlsdGVyPgogICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXHNoYWRlcnNcQ2xlYXIxMS5obHNsIj4KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxz
cmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXHNoYWRlcnNcQ2xlYXIxMS5obHNsIj4KICAgICAg
IDxGaWx0ZXI+U2hhZGVyczwvRmlsdGVyPgogICAgIDwvTm9uZT4KICAgICA8Tm9uZSBJbmNsdWRl
PSIuLlxzcmNcbGliR0xFU3YyXGxpYkdMRVN2Mi5kZWYiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS52Y3hwcm9qL3RyYW5zbGF0b3JfY29tbW9uLnZjeHByb2og
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS52Y3hwcm9qL3RyYW5zbGF0b3JfY29tbW9u
LnZjeHByb2oKaW5kZXggNzNmM2QyOTc4MDMzODFhOTBiODA0YWJhYjI0ODY4NjQ1NWMxMWM3My4u
NWRlYTVjZjJkMDYzNThlNGMwMmUxZTUzYTJkYzFiYWMyZGM5MzJiOCAxMDA3NTUKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUudmN4cHJvai90cmFuc2xhdG9yX2NvbW1vbi52Y3hw
cm9qCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnZjeHByb2ovdHJhbnNsYXRv
cl9jb21tb24udmN4cHJvagpAQCAtMTM5LDk2ICsxMzksMTAwIEBACiAgIDwvSW1wb3J0R3JvdXA+
CiAgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgogICA8SXRlbUdyb3VwPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXEJ1aWx0SW5GdW5jdGlvbkVt
dWxhdG9yLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxD
b2RlR2VuLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxD
b21waWxlci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJc
ZGVidWcuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXERl
dGVjdENhbGxEZXB0aC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29t
cGlsZXJcRGlhZ25vc3RpY3MuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXERpcmVjdGl2ZUhhbmRsZXIuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cc3JjXGNvbXBpbGVyXEZvckxvb3BVbnJvbGwuY3BwIiAvPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXEluZm9TaW5rLmNwcCIgLz4KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxJbml0aWFsaXplLmNwcCIgLz4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxJbml0aWFsaXplRGxsLmNwcCIgLz4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxJbml0aWFsaXplR0xQb3NpdGlvbi5j
cHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcSW5pdGlhbGl6
ZVBhcnNlQ29udGV4dC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29t
cGlsZXJcSW50ZXJtZWRpYXRlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNy
Y1xjb21waWxlclxpbnRlcm1PdXQuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
c3JjXGNvbXBpbGVyXEludGVybVRyYXZlcnNlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHNyY1xjb21waWxlclxNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAiIC8+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcb3Nzb3VyY2Vfd2luLmNwcCIgLz4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxwYXJzZUNvbnN0LmNwcCIgLz4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxQYXJzZUNvbnRleHQuY3Bw
IiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFBvb2xBbGxvYy5j
cHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcUXVhbGlmaWVy
QWxpdmUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFJl
bW92ZVRyZWUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVy
XFNoYWRlckxhbmcuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBp
bGVyXFN5bWJvbFRhYmxlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclxVbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cc3JjXGNvbXBpbGVyXHV0aWwuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cc3JjXGNvbXBpbGVyXFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwIiAvPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFZhcmlhYmxlSW5mby5jcHAiIC8+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcVmFyaWFibGVQYWNrZXIuY3BwIiAv
PgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXGdsc2xhbmdfbGV4LmNw
cCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxnbHNsYW5nX3Rh
Yi5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZGVwZ3Jh
cGhcRGVwZW5kZW5jeUdyYXBoLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNy
Y1xjb21waWxlclxkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCIgLz4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxkZXBncmFwaFxEZXBlbmRlbmN5R3Jh
cGhPdXRwdXQuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVy
XGRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0aW1pbmdcUmVzdHJpY3RGcmFnbWVudFNoYWRlclRp
bWluZy5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdGlt
aW5nXFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHNyY1xjb21waWxlclxWZXJzaW9uR0xTTC5jcHAiIC8+CisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxCdWlsdEluRnVuY3Rpb25FbXVs
YXRvci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJh
bnNsYXRvclxDb2RlR2VuLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclx0cmFuc2xhdG9yXENvbXBpbGVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGRlYnVnLmNwcCIgLz4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXERldGVjdENhbGxEZXB0aC5j
cHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRv
clxEaWFnbm9zdGljcy5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29t
cGlsZXJcdHJhbnNsYXRvclxEaXJlY3RpdmVIYW5kbGVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXEZvckxvb3BVbnJvbGwuY3BwIiAv
PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSW5m
b1NpbmsuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRy
YW5zbGF0b3JcSW5pdGlhbGl6ZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxz
cmNcY29tcGlsZXJcdHJhbnNsYXRvclxJbml0aWFsaXplVmFyaWFibGVzLmNwcCIgLz4KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXEluaXRpYWxpemVE
bGwuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5z
bGF0b3JcSW5pdGlhbGl6ZUdMUG9zaXRpb24uY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAi
IC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxJ
bnRlcm1lZGlhdGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBp
bGVyXHRyYW5zbGF0b3JcaW50ZXJtT3V0LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXEludGVybVRyYXZlcnNlLmNwcCIgLz4KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXE1hcExvbmdWYXJp
YWJsZU5hbWVzLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxl
clx0cmFuc2xhdG9yXG9zc291cmNlX3dpbi5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxwYXJzZUNvbnN0LmNwcCIgLz4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFBhcnNlQ29udGV4dC5j
cHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRv
clxQb29sQWxsb2MuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBp
bGVyXHRyYW5zbGF0b3JcUXVhbGlmaWVyQWxpdmUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcUmVtb3ZlVHJlZS5jcHAiIC8+CisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxSZXdyaXRlRWxz
ZUJsb2Nrcy5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJc
dHJhbnNsYXRvclxTaGFkZXJMYW5nLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFN5bWJvbFRhYmxlLmNwcCIgLz4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFVuZm9sZFNob3J0Q2lyY3Vp
dEFTVC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJh
bnNsYXRvclx1dGlsLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclx0cmFuc2xhdG9yXFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwIiAvPgorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcVmFyaWFibGVJbmZvLmNwcCIg
Lz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFZh
cmlhYmxlUGFja2VyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclx0cmFuc2xhdG9yXGdsc2xhbmdfbGV4LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGdsc2xhbmdfdGFiLmNwcCIgLz4KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGRlcGdyYXBoXERl
cGVuZGVuY3lHcmFwaC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29t
cGlsZXJcdHJhbnNsYXRvclxkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCIgLz4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGRlcGdy
YXBoXERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGhUcmF2
ZXJzZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJh
bnNsYXRvclx0aW1pbmdcUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAiIC8+CisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclx0aW1pbmdcUmVz
dHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcVmVyc2lvbkdMU0wuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cc3JjXHRoaXJkX3BhcnR5XGNvbXBpbGVyXEFycmF5Qm91bmRzQ2xh
bXBlci5jcHAiIC8+CiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgotICAgIDxDdXN0b21C
dWlsZCBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZ2xzbGFuZy5sIj4KKyAgICA8Q3VzdG9tQnVp
bGQgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcZ2xzbGFuZy5sIj4KICAgICA8
L0N1c3RvbUJ1aWxkPgotICAgIDxDdXN0b21CdWlsZCBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJc
Z2xzbGFuZy55Ij4KKyAgICA8Q3VzdG9tQnVpbGQgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRy
YW5zbGF0b3JcZ2xzbGFuZy55Ij4KICAgICA8L0N1c3RvbUJ1aWxkPgogICA8L0l0ZW1Hcm91cD4K
ICAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxC
YXNlVHlwZXMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxC
dWlsdEluRnVuY3Rpb25FbXVsYXRvci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
c3JjXGNvbXBpbGVyXENvbW1vbi5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXENvbnN0YW50VW5pb24uaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHNyY1xjb21waWxlclxkZWJ1Zy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXERldGVjdENhbGxEZXB0aC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cc3JjXGNvbXBpbGVyXERpYWdub3N0aWNzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxzcmNcY29tcGlsZXJcRGlyZWN0aXZlSGFuZGxlci5oIiAvPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXEZvckxvb3BVbnJvbGwuaCIgLz4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxIYXNoTmFtZXMuaCIgLz4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxJbmZvU2luay5oIiAvPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXEluaXRpYWxpemUuaCIgLz4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxJbml0aWFsaXplRGxsLmgiIC8+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcSW5pdGlhbGl6ZUdsb2JhbHMuaCIgLz4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxJbml0aWFsaXplR0xQb3Np
dGlvbi5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXEluaXRp
YWxpemVQYXJzZUNvbnRleHQuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclxpbnRlcm1lZGlhdGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNy
Y1xjb21waWxlclxsb2NhbGludGVybWVkaWF0ZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cc3JjXGNvbXBpbGVyXE1hcExvbmdWYXJpYWJsZU5hbWVzLmgiIC8+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcTU1hcC5oIiAvPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXG9zaW5jbHVkZS5oIiAvPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFBhcnNlQ29udGV4dC5oIiAvPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFBvb2xBbGxvYy5oIiAvPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFF1YWxpZmllckFsaXZlLmgiIC8+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcUmVtb3ZlVHJlZS5oIiAvPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFJlbmFtZUZ1bmN0aW9uLmgiIC8+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxCYXNlVHlw
ZXMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xh
dG9yXEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxDb21tb24uaCIgLz4KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXENvbnN0YW50VW5pb24uaCIgLz4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGRlYnVn
LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRv
clxEZXRlY3RDYWxsRGVwdGguaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclx0cmFuc2xhdG9yXERpYWdub3N0aWNzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxEaXJlY3RpdmVIYW5kbGVyLmgiIC8+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxGb3JMb29w
VW5yb2xsLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJh
bnNsYXRvclxIYXNoTmFtZXMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclx0cmFuc2xhdG9yXEluZm9TaW5rLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxJbml0aWFsaXplLmgiIC8+CisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxJbml0aWFsaXplVmFyaWFi
bGVzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNs
YXRvclxJbml0aWFsaXplRGxsLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNc
Y29tcGlsZXJcdHJhbnNsYXRvclxJbml0aWFsaXplR2xvYmFscy5oIiAvPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSW5pdGlhbGl6ZUdMUG9zaXRp
b24uaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xh
dG9yXEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGludGVybWVkaWF0ZS5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcbG9jYWxpbnRlcm1lZGlh
dGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xh
dG9yXE1hcExvbmdWYXJpYWJsZU5hbWVzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxNTWFwLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxvc2luY2x1ZGUuaCIgLz4KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFBhcnNlQ29udGV4dC5o
IiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3Jc
UG9vbEFsbG9jLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJc
dHJhbnNsYXRvclxRdWFsaWZpZXJBbGl2ZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcUmVtb3ZlVHJlZS5oIiAvPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcUmVuYW1lRnVuY3Rpb24uaCIg
Lz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFJl
d3JpdGVFbHNlQmxvY2tzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbmNsdWRl
XEdMU0xBTkdcU2hhZGVyTGFuZy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXFNoSGFuZGxlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNc
Y29tcGlsZXJcU3ltYm9sVGFibGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNy
Y1xjb21waWxlclxUeXBlcy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNv
bXBpbGVyXFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cc3JjXGNvbXBpbGVyXHV0aWwuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHNyY1xjb21waWxlclxWYWxpZGF0ZUxpbWl0YXRpb25zLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcVmFyaWFibGVJbmZvLmgiIC8+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcVmFyaWFibGVQYWNrZXIuaCIgLz4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxnbHNsYW5nX3RhYi5oIiAvPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRpbWluZ1xSZXN0cmljdEZyYWdtZW50
U2hhZGVyVGltaW5nLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGls
ZXJcdGltaW5nXFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgiIC8+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoLmgiIC8+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZGVwZ3JhcGhcRGVwZW5k
ZW5jeUdyYXBoQnVpbGRlci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNv
bXBpbGVyXGRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaE91dHB1dC5oIiAvPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFZlcnNpb25HTFNMLmgiIC8+CisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxTaEhhbmRsZS5oIiAvPgor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcU3ltYm9s
VGFibGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFu
c2xhdG9yXFR5cGVzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGls
ZXJcdHJhbnNsYXRvclxVbmZvbGRTaG9ydENpcmN1aXRBU1QuaCIgLz4KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXHV0aWwuaCIgLz4KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFZhbGlkYXRlTGltaXRh
dGlvbnMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFu
c2xhdG9yXFZhcmlhYmxlSW5mby5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXHRyYW5zbGF0b3JcVmFyaWFibGVQYWNrZXIuaCIgLz4KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGdsc2xhbmdfdGFiLmgiIC8+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclx0aW1pbmdc
UmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcdGltaW5nXFJlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJh
bnNsYXRvclxkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGguaCIgLz4KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGRlcGdyYXBoXERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXIuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0
cmFuc2xhdG9yXGRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaE91dHB1dC5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcVmVyc2lvbkdMU0wuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1x0aGlyZF9wYXJ0eVxjb21waWxlclxB
cnJheUJvdW5kc0NsYW1wZXIuaCIgLz4KICAgPC9JdGVtR3JvdXA+CiAgIDxJbXBvcnQgUHJvamVj
dD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS52Y3hwcm9qL3RyYW5zbGF0b3JfY29tbW9u
LnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnZjeHByb2ov
dHJhbnNsYXRvcl9jb21tb24udmN4cHJvai5maWx0ZXJzCmluZGV4IDk4ZDc3N2UzYmNkODZhZGQ2
YWFiMDBjYWVlZTFjYjk4MDg3MDkyN2YuLjBhMmU0MjBjYmFjYzM5NmY0MTgyN2M0YjEyMWFkNjlh
NWI1ZDZjZWYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnZjeHBy
b2ovdHJhbnNsYXRvcl9jb21tb24udmN4cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL0FOR0xFLnZjeHByb2ovdHJhbnNsYXRvcl9jb21tb24udmN4cHJvai5maWx0ZXJz
CkBAIC0yOSwyNjMgKzI5LDI2OSBAQAogICAgIDwvRmlsdGVyPgogICA8L0l0ZW1Hcm91cD4KICAg
PEl0ZW1Hcm91cD4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxnbHNs
YW5nX2xleC5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRy
YW5zbGF0b3JcZ2xzbGFuZ19sZXguY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGdl
bmVyYXRlZDwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cc3JjXGNvbXBpbGVyXGdsc2xhbmdfdGFiLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxnbHNsYW5nX3RhYi5jcHAiPgogICAgICAg
PEZpbHRlcj5Tb3VyY2UgRmlsZXNcZ2VuZXJhdGVkPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZGVwZ3JhcGhcRGVwZW5k
ZW5jeUdyYXBoLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJc
dHJhbnNsYXRvclxkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGguY3BwIj4KICAgICAgIDxGaWx0ZXI+
U291cmNlIEZpbGVzXGRlcGdyYXBoPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBo
QnVpbGRlci5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRy
YW5zbGF0b3JcZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAiPgogICAgICAgPEZp
bHRlcj5Tb3VyY2UgRmlsZXNcZGVwZ3JhcGg8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxkZXBncmFwaFxEZXBlbmRlbmN5
R3JhcGhPdXRwdXQuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxl
clx0cmFuc2xhdG9yXGRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAiPgogICAgICAg
PEZpbHRlcj5Tb3VyY2UgRmlsZXNcZGVwZ3JhcGg8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxkZXBncmFwaFxEZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNv
bXBpbGVyXHRyYW5zbGF0b3JcZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwIj4K
ICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGRlcGdyYXBoPC9GaWx0ZXI+CiAgICAgPC9DbENv
bXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdGltaW5nXFJl
c3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXHRpbWluZ1xSZXN0cmljdEZyYWdtZW50U2hhZGVy
VGltaW5nLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aW1pbmc8L0ZpbHRlcj4K
ICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxl
clx0aW1pbmdcUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIj4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXHRpbWluZ1xSZXN0cmljdFZlcnRl
eFNoYWRlclRpbWluZy5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGltaW5nPC9G
aWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNc
dGhpcmRfcGFydHlcY29tcGlsZXJcQXJyYXlCb3VuZHNDbGFtcGVyLmNwcCI+CiAgICAgICA8Rmls
dGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFZhcmlhYmxlUGFja2VyLmNwcCI+CisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxWYXJpYWJsZVBhY2tl
ci5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxCdWlsdEluRnVu
Y3Rpb25FbXVsYXRvci5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBp
bGVyXHRyYW5zbGF0b3JcQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIj4KICAgICAgIDxGaWx0
ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcQ29tcGlsZXIuY3BwIj4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXENvbXBpbGVyLmNwcCI+CiAgICAg
ICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXGRlYnVnLmNwcCI+CisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxkZWJ1Zy5jcHAiPgogICAg
ICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxEZXRlY3RDYWxsRGVwdGguY3BwIj4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXERldGVj
dENhbGxEZXB0aC5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAg
ICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxE
aWFnbm9zdGljcy5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVy
XHRyYW5zbGF0b3JcRGlhZ25vc3RpY3MuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVz
PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxz
cmNcY29tcGlsZXJcRGlyZWN0aXZlSGFuZGxlci5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcRGlyZWN0aXZlSGFuZGxlci5jcHAiPgogICAg
ICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxGb3JMb29wVW5yb2xsLmNwcCI+Cisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxGb3JMb29w
VW5yb2xsLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwv
Q2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXEluZm9T
aW5rLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNs
YXRvclxJbmZvU2luay5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4K
ICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxl
clxJbml0aWFsaXplLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGls
ZXJcdHJhbnNsYXRvclxJbml0aWFsaXplLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxl
czwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
c3JjXGNvbXBpbGVyXEluaXRpYWxpemVEbGwuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXEluaXRpYWxpemVWYXJpYWJsZXMuY3BwIj4KICAg
ICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcSW5pdGlhbGl6ZVBhcnNlQ29udGV4
dC5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0
b3JcSW5pdGlhbGl6ZURsbC5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRl
cj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclxJbnRlcm1lZGlhdGUuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclx0cmFuc2xhdG9yXEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIj4KICAgICAgIDxG
aWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcaW50ZXJtT3V0LmNwcCI+CisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxJbnRlcm1lZGlhdGUuY3Bw
Ij4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcSW50ZXJtVHJhdmVyc2Uu
Y3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9y
XGludGVybU91dC5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAg
ICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxN
YXBMb25nVmFyaWFibGVOYW1lcy5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXHRyYW5zbGF0b3JcSW50ZXJtVHJhdmVyc2UuY3BwIj4KICAgICAgIDxGaWx0ZXI+
U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcb3Nzb3VyY2Vfd2luLmNwcCI+CisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxNYXBMb25nVmFyaWFibGVOYW1l
cy5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxwYXJzZUNvbnN0
LmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRv
clxvc3NvdXJjZV93aW4uY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+
CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGls
ZXJcUG9vbEFsbG9jLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGls
ZXJcdHJhbnNsYXRvclxwYXJzZUNvbnN0LmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxl
czwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
c3JjXGNvbXBpbGVyXFF1YWxpZmllckFsaXZlLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxQb29sQWxsb2MuY3BwIj4KICAgICAgIDxGaWx0
ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcUmVtb3ZlVHJlZS5jcHAiPgorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcUXVhbGlmaWVyQWxpdmUuY3Bw
Ij4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcU2hhZGVyTGFuZy5jcHAi
PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcUmVt
b3ZlVHJlZS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8
L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxTeW1i
b2xUYWJsZS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRy
YW5zbGF0b3JcU2hhZGVyTGFuZy5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0Zp
bHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclx1dGlsLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGls
ZXJcdHJhbnNsYXRvclxTeW1ib2xUYWJsZS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmls
ZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHNyY1xjb21waWxlclxWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCI+CisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclx1dGlsLmNwcCI+CiAgICAgICA8Rmls
dGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFZhcmlhYmxlSW5mby5jcHAiPgorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcVmFsaWRhdGVMaW1pdGF0
aW9ucy5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0Ns
Q29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxJbml0aWFs
aXplR0xQb3NpdGlvbi5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBp
bGVyXHRyYW5zbGF0b3JcVmFyaWFibGVJbmZvLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBG
aWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cc3JjXGNvbXBpbGVyXFBhcnNlQ29udGV4dC5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSW5pdGlhbGl6ZUdMUG9zaXRpb24uY3BwIj4K
ICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcVmVyc2lvbkdMU0wuY3BwIj4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFBhcnNl
Q29udGV4dC5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8
L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxDb2Rl
R2VuLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNs
YXRvclxWZXJzaW9uR0xTTC5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRl
cj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclxVbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXENvZGVHZW4uY3BwIj4KKyAgICAgIDxGaWx0ZXI+
U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxVbmZvbGRTaG9ydENpcmN1aXRBU1Qu
Y3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBp
bGU+CiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cc3JjXGNvbXBpbGVyXGdsc2xhbmdfdGFiLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcZ2xzbGFuZ190YWIuaCI+CiAgICAgICA8Rmls
dGVyPkhlYWRlciBGaWxlc1xnZW5lcmF0ZWQ8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0aW1pbmdcUmVzdHJpY3RGcmFn
bWVudFNoYWRlclRpbWluZy5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclx0cmFuc2xhdG9yXHRpbWluZ1xSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgiPgog
ICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGltaW5nPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1
ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdGltaW5nXFJlc3Ry
aWN0VmVydGV4U2hhZGVyVGltaW5nLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXHRyYW5zbGF0b3JcdGltaW5nXFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgi
PgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGltaW5nPC9GaWx0ZXI+CiAgICAgPC9DbElu
Y2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZGVwZ3JhcGhc
RGVwZW5kZW5jeUdyYXBoLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBp
bGVyXHRyYW5zbGF0b3JcZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoLmgiPgogICAgICAgPEZpbHRl
cj5IZWFkZXIgRmlsZXNcZGVwZ3JhcGg8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxkZXBncmFwaFxEZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRy
YW5zbGF0b3JcZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIj4KICAgICAgIDxGaWx0
ZXI+SGVhZGVyIEZpbGVzXGRlcGdyYXBoPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZGVwZ3JhcGhcRGVwZW5kZW5jeUdy
YXBoT3V0cHV0LmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRy
YW5zbGF0b3JcZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiPgogICAgICAgPEZpbHRl
cj5IZWFkZXIgRmlsZXNcZGVwZ3JhcGg8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1x0aGlyZF9wYXJ0eVxjb21waWxlclxBcnJheUJvdW5k
c0NsYW1wZXIuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAgIDwv
Q2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFZhcmlh
YmxlUGFja2VyLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRy
YW5zbGF0b3JcVmFyaWFibGVQYWNrZXIuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwv
RmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXFZhcmlhYmxlSW5mby5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNy
Y1xjb21waWxlclx0cmFuc2xhdG9yXFZhcmlhYmxlSW5mby5oIj4KICAgICAgIDxGaWx0ZXI+SGVh
ZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxzcmNcY29tcGlsZXJcVmFsaWRhdGVMaW1pdGF0aW9ucy5oIj4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFZhbGlkYXRlTGltaXRhdGlv
bnMuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNs
dWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHV0aWwuaCI+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclx1dGlsLmgi
PgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxUeXBlcy5oIj4KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFR5cGVzLmgiPgog
ICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxTeW1ib2xUYWJsZS5oIj4KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFN5bWJvbFRh
YmxlLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxTaEhhbmRsZS5o
Ij4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFNo
SGFuZGxlLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0Ns
SW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluY2x1ZGVcR0xTTEFOR1xTaGFk
ZXJMYW5nLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0Ns
SW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxSZW5hbWVG
dW5jdGlvbi5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFu
c2xhdG9yXFJlbmFtZUZ1bmN0aW9uLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0Zp
bHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclx0cmFuc2xhdG9yXFJlbW92ZVRyZWUuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBG
aWxlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cc3JjXGNvbXBpbGVyXFJlbW92ZVRyZWUuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxRdWFsaWZpZXJBbGl2ZS5oIj4KICAgICAgIDxGaWx0
ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcUXVhbGlmaWVyQWxpdmUuaCI+CisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxQb29sQWxsb2MuaCI+CiAg
ICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFBvb2xBbGxvYy5oIj4KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXG9zaW5jbHVkZS5o
Ij4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcb3NpbmNsdWRlLmgiPgor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcTU1hcC5o
Ij4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcTU1hcC5oIj4KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXE1hcExvbmdWYXJp
YWJsZU5hbWVzLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8
L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxNYXBM
b25nVmFyaWFibGVOYW1lcy5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclx0cmFuc2xhdG9yXGxvY2FsaW50ZXJtZWRpYXRlLmgiPgogICAgICAgPEZpbHRlcj5IZWFk
ZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHNyY1xjb21waWxlclxsb2NhbGludGVybWVkaWF0ZS5oIj4KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGludGVybWVkaWF0ZS5oIj4KICAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcaW50ZXJtZWRpYXRlLmgiPgorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSW5pdGlhbGl6
ZVBhcnNlQ29udGV4dC5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAg
ICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJc
SW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNy
Y1xjb21waWxlclx0cmFuc2xhdG9yXEluaXRpYWxpemVHbG9iYWxzLmgiPgogICAgICAgPEZpbHRl
cj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxJbml0aWFsaXplR2xvYmFscy5oIj4KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXEluaXRpYWxpemVEbGwu
aCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRl
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXEluaXRpYWxpemVEbGwu
aCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxJ
bml0aWFsaXplLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8
L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxJbml0
aWFsaXplLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5z
bGF0b3JcSW5pdGlhbGl6ZVZhcmlhYmxlcy5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVz
PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxz
cmNcY29tcGlsZXJcSW5mb1NpbmsuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNc
Y29tcGlsZXJcdHJhbnNsYXRvclxJbmZvU2luay5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZp
bGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzcmNcY29tcGlsZXJcSGFzaE5hbWVzLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
c3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSGFzaE5hbWVzLmgiPgogICAgICAgPEZpbHRlcj5IZWFk
ZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHNyY1xjb21waWxlclxGb3JMb29wVW5yb2xsLmgiPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcRm9yTG9vcFVucm9sbC5oIj4KICAgICAg
IDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcRGlyZWN0aXZlSGFuZGxlci5oIj4KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXERpcmVjdGl2
ZUhhbmRsZXIuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAgIDwv
Q2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXERpYWdu
b3N0aWNzLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5z
bGF0b3JcRGlhZ25vc3RpY3MuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVy
PgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBp
bGVyXERldGVjdENhbGxEZXB0aC5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclx0cmFuc2xhdG9yXERldGVjdENhbGxEZXB0aC5oIj4KICAgICAgIDxGaWx0ZXI+SGVh
ZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxzcmNcY29tcGlsZXJcZGVidWcuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxkZWJ1Zy5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVy
IEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxzcmNcY29tcGlsZXJcQ29uc3RhbnRVbmlvbi5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXENvbnN0YW50VW5pb24uaCI+CiAgICAgICA8
RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXENvbW1vbi5oIj4KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXENvbW1vbi5oIj4KICAgICAgIDxG
aWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCI+
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxCdWls
dEluRnVuY3Rpb25FbXVsYXRvci5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0
ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29t
cGlsZXJcQmFzZVR5cGVzLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBp
bGVyXHRyYW5zbGF0b3JcQmFzZVR5cGVzLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8
L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNy
Y1xjb21waWxlclxJbml0aWFsaXplR0xQb3NpdGlvbi5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXEluaXRpYWxpemVHTFBvc2l0aW9uLmgiPgog
ICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxQYXJzZUNvbnRleHQuaCI+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxQYXJzZUNv
bnRleHQuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xJ
bmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFZlcnNpb25H
TFNMLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0
b3JcVmVyc2lvbkdMU0wuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgog
ICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVy
XFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNy
Y1xjb21waWxlclx0cmFuc2xhdG9yXFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5oIj4KICAgICAgIDxG
aWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CiAgIDwvSXRlbUdy
b3VwPgogICA8SXRlbUdyb3VwPgotICAgIDxDdXN0b21CdWlsZCBJbmNsdWRlPSIuLlxzcmNcY29t
cGlsZXJcZ2xzbGFuZy5sIj4KKyAgICA8Q3VzdG9tQnVpbGQgSW5jbHVkZT0iLi5cc3JjXGNvbXBp
bGVyXHRyYW5zbGF0b3JcZ2xzbGFuZy5sIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9G
aWx0ZXI+CiAgICAgPC9DdXN0b21CdWlsZD4KLSAgICA8Q3VzdG9tQnVpbGQgSW5jbHVkZT0iLi5c
c3JjXGNvbXBpbGVyXGdsc2xhbmcueSI+CisgICAgPEN1c3RvbUJ1aWxkIEluY2x1ZGU9Ii4uXHNy
Y1xjb21waWxlclx0cmFuc2xhdG9yXGdsc2xhbmcueSI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBG
aWxlczwvRmlsdGVyPgogICAgIDwvQ3VzdG9tQnVpbGQ+CiAgIDwvSXRlbUdyb3VwPgpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggYzEyZDY3OWQ1ZmQ3OWY5MTFlNzE0ZmNjMjMzOGZhZjc1NWY2MDBjNi4uOGUx
MDU3NjYxZjA2YjVhYTNjNDAwMGExYjlhMzlmNjVhZTEyODUxNyAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0yMSw2MSArMjEsMTIxIEBACiAvKiBFbmQgUEJYQWdncmVnYXRlVGFyZ2V0IHNlY3Rpb24gKi8K
IAogLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KKwkJMzEwMTJFMTIxOEI5N0I5QjAw
MzkwNjJGIC8qIEJhc2VUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzEwMTJEQTAxOEI5N0I5QjAwMzkwNjJGIC8qIEJhc2VUeXBlcy5oICovOyB9
OworCQkzMTAxMkUxMzE4Qjk3QjlCMDAzOTA2MkYgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJE
QTExOEI5N0I5QjAwMzkwNjJGIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCAqLzsgfTsK
KwkJMzEwMTJFMTQxOEI5N0I5QjAwMzkwNjJGIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRBMjE4
Qjk3QjlCMDAzOTA2MkYgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCAqLzsgfTsKKwkJMzEw
MTJFMTUxOEI5N0I5QjAwMzkwNjJGIC8qIENvZGVHZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQTMxOEI5N0I5QjAwMzkwNjJGIC8qIENv
ZGVHZW4uY3BwICovOyB9OworCQkzMTAxMkUxNjE4Qjk3QjlCMDAzOTA2MkYgLyogQ29tbW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRBNDE4
Qjk3QjlCMDAzOTA2MkYgLyogQ29tbW9uLmggKi87IH07CisJCTMxMDEyRTE3MThCOTdCOUIwMDM5
MDYyRiAvKiBDb21waWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzMTAxMkRBNTE4Qjk3QjlCMDAzOTA2MkYgLyogQ29tcGlsZXIuY3BwICovOyB9
OworCQkzMTAxMkUxQTE4Qjk3QjlCMDAzOTA2MkYgLyogQ29uc3RhbnRVbmlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQTgxOEI5N0I5QjAw
MzkwNjJGIC8qIENvbnN0YW50VW5pb24uaCAqLzsgfTsKKwkJMzEwMTJFMUIxOEI5N0I5QjAwMzkw
NjJGIC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRBQTE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdy
YXBoLmNwcCAqLzsgfTsKKwkJMzEwMTJFMUMxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lH
cmFwaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEw
MTJEQUIxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaC5oICovOyB9OworCQkzMTAx
MkUxRDE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRBQzE4Qjk3QjlC
MDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgKi87IH07CisJCTMxMDEyRTFF
MThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRBRDE4Qjk3QjlCMDAzOTA2
MkYgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oICovOyB9OworCQkzMTAxMkUxRjE4Qjk3QjlC
MDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREFFMThCOTdCOUIwMDM5MDYyRiAvKiBE
ZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwICovOyB9OworCQkzMTAxMkUyMDE4Qjk3QjlCMDAzOTA2
MkYgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRBRjE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5j
eUdyYXBoT3V0cHV0LmggKi87IH07CisJCTMxMDEyRTIxMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBl
bmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMTAxMkRCMDE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBo
VHJhdmVyc2UuY3BwICovOyB9OworCQkzMTAxMkUyMjE4Qjk3QjlCMDAzOTA2MkYgLyogRGV0ZWN0
Q2FsbERlcHRoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMxMDEyREIxMThCOTdCOUIwMDM5MDYyRiAvKiBEZXRlY3RDYWxsRGVwdGguY3BwICovOyB9
OworCQkzMTAxMkUyMzE4Qjk3QjlCMDAzOTA2MkYgLyogRGV0ZWN0Q2FsbERlcHRoLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRCMjE4Qjk3QjlC
MDAzOTA2MkYgLyogRGV0ZWN0Q2FsbERlcHRoLmggKi87IH07CisJCTMxMDEyRTI0MThCOTdCOUIw
MDM5MDYyRiAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREIzMThCOTdCOUIwMDM5MDYyRiAvKiBEZXRl
Y3REaXNjb250aW51aXR5LmNwcCAqLzsgfTsKKwkJMzEwMTJFMjUxOEI5N0I5QjAwMzkwNjJGIC8q
IERldGVjdERpc2NvbnRpbnVpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDMxMDEyREI0MThCOTdCOUIwMDM5MDYyRiAvKiBEZXRlY3REaXNjb250aW51
aXR5LmggKi87IH07CisJCTMxMDEyRTI2MThCOTdCOUIwMDM5MDYyRiAvKiBEaWFnbm9zdGljcy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRC
NTE4Qjk3QjlCMDAzOTA2MkYgLyogRGlhZ25vc3RpY3MuY3BwICovOyB9OworCQkzMTAxMkUyNzE4
Qjk3QjlCMDAzOTA2MkYgLyogRGlhZ25vc3RpY3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREI2MThCOTdCOUIwMDM5MDYyRiAvKiBEaWFnbm9z
dGljcy5oICovOyB9OworCQkzMTAxMkUyODE4Qjk3QjlCMDAzOTA2MkYgLyogRGlyZWN0aXZlSGFu
ZGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
MTAxMkRCNzE4Qjk3QjlCMDAzOTA2MkYgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07CisJ
CTMxMDEyRTI5MThCOTdCOUIwMDM5MDYyRiAvKiBEaXJlY3RpdmVIYW5kbGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRCODE4Qjk3QjlCMDAz
OTA2MkYgLyogRGlyZWN0aXZlSGFuZGxlci5oICovOyB9OworCQkzMTAxMkUyQTE4Qjk3QjlCMDAz
OTA2MkYgLyogRXh0ZW5zaW9uQmVoYXZpb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREI5MThCOTdCOUIwMDM5MDYyRiAvKiBFeHRlbnNpb25C
ZWhhdmlvci5oICovOyB9OworCQkzMTAxMkUyQjE4Qjk3QjlCMDAzOTA2MkYgLyogRm9yTG9vcFVu
cm9sbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
MTAxMkRCQTE4Qjk3QjlCMDAzOTA2MkYgLyogRm9yTG9vcFVucm9sbC5jcHAgKi87IH07CisJCTMx
MDEyRTJDMThCOTdCOUIwMDM5MDYyRiAvKiBGb3JMb29wVW5yb2xsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRCQjE4Qjk3QjlCMDAzOTA2MkYg
LyogRm9yTG9vcFVucm9sbC5oICovOyB9OworCQkzMTAxMkUyRDE4Qjk3QjlCMDAzOTA2MkYgLyog
Z2xzbGFuZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzEwMTJEQkQxOEI5N0I5QjAwMzkwNjJGIC8qIGdsc2xhbmcuaCAqLzsgfTsKKwkJMzEwMTJFMzAx
OEI5N0I5QjAwMzkwNjJGIC8qIGdsc2xhbmdfbGV4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREMwMThCOTdCOUIwMDM5MDYyRiAvKiBnbHNs
YW5nX2xleC5jcHAgKi87IH07CisJCTMxMDEyRTMxMThCOTdCOUIwMDM5MDYyRiAvKiBnbHNsYW5n
X3RhYi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
MTAxMkRDMTE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZ190YWIuY3BwICovOyB9OworCQkzMTAx
MkUzMjE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZ190YWIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREMyMThCOTdCOUIwMDM5MDYyRiAvKiBn
bHNsYW5nX3RhYi5oICovOyB9OworCQkzMTAxMkUzMzE4Qjk3QjlCMDAzOTA2MkYgLyogSGFzaE5h
bWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAx
MkRDMzE4Qjk3QjlCMDAzOTA2MkYgLyogSGFzaE5hbWVzLmggKi87IH07CisJCTMxMDEyRTM0MThC
OTdCOUIwMDM5MDYyRiAvKiBJbmZvU2luay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRDNDE4Qjk3QjlCMDAzOTA2MkYgLyogSW5mb1Npbmsu
Y3BwICovOyB9OworCQkzMTAxMkUzNTE4Qjk3QjlCMDAzOTA2MkYgLyogSW5mb1NpbmsuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREM1MThCOTdC
OUIwMDM5MDYyRiAvKiBJbmZvU2luay5oICovOyB9OworCQkzMTAxMkUzNjE4Qjk3QjlCMDAzOTA2
MkYgLyogSW5pdGlhbGl6ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzMTAxMkRDNjE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZS5jcHAgKi87
IH07CisJCTMxMDEyRTM3MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRDNzE4Qjk3QjlCMDAz
OTA2MkYgLyogSW5pdGlhbGl6ZS5oICovOyB9OworCQkzMTAxMkUzODE4Qjk3QjlCMDAzOTA2MkYg
LyogSW5pdGlhbGl6ZURsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzMTAxMkRDODE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZURsbC5jcHAg
Ki87IH07CisJCTMxMDEyRTM5MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplRGxsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRDOTE4Qjk3
QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZURsbC5oICovOyB9OworCQkzMTAxMkUzQTE4Qjk3QjlC
MDAzOTA2MkYgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRENBMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFs
aXplR2xvYmFscy5oICovOyB9OworCQkzMTAxMkUzQjE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlh
bGl6ZVBhcnNlQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzMTAxMkRDQjE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZVBhcnNlQ29u
dGV4dC5jcHAgKi87IH07CisJCTMxMDEyRTNDMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXpl
UGFyc2VDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMTAxMkRDQzE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5o
ICovOyB9OworCQkzMTAxMkUzRDE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZVZhcmlhYmxl
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAx
MkRDRDE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZVZhcmlhYmxlcy5jcHAgKi87IH07CisJ
CTMxMDEyRTNFMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplVmFyaWFibGVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRDRTE4Qjk3QjlC
MDAzOTA2MkYgLyogSW5pdGlhbGl6ZVZhcmlhYmxlcy5oICovOyB9OworCQkzMTAxMkUzRjE4Qjk3
QjlCMDAzOTA2MkYgLyogSW50ZXJtZWRpYXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRENGMThCOTdCOUIwMDM5MDYyRiAvKiBJbnRlcm1l
ZGlhdGUuY3BwICovOyB9OworCQkzMTAxMkU0MDE4Qjk3QjlCMDAzOTA2MkYgLyogaW50ZXJtZWRp
YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAx
MkREMDE4Qjk3QjlCMDAzOTA2MkYgLyogaW50ZXJtZWRpYXRlLmggKi87IH07CisJCTMxMDEyRTQx
MThCOTdCOUIwMDM5MDYyRiAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERDExOEI5N0I5QjAwMzkwNjJGIC8qIGludGVy
bU91dC5jcHAgKi87IH07CisJCTMxMDEyRTQyMThCOTdCOUIwMDM5MDYyRiAvKiBJbnRlcm1UcmF2
ZXJzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
MTAxMkREMjE4Qjk3QjlCMDAzOTA2MkYgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovOyB9OworCQkz
MTAxMkU0MzE4Qjk3QjlCMDAzOTA2MkYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREQzMThCOTdCOUIwMDM5
MDYyRiAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovOyB9OworCQkzMTAxMkU0NDE4Qjk3QjlCMDAz
OTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERDQxOEI5N0I5QjAwMzkwNjJGIC8qIE1hcExv
bmdWYXJpYWJsZU5hbWVzLmNwcCAqLzsgfTsKKwkJMzEwMTJFNDUxOEI5N0I5QjAwMzkwNjJGIC8q
IE1hcExvbmdWYXJpYWJsZU5hbWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMTAxMkRENTE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxl
TmFtZXMuaCAqLzsgfTsKKwkJMzEwMTJFNDYxOEI5N0I5QjAwMzkwNjJGIC8qIE1NYXAuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREQ2MThCOTdC
OUIwMDM5MDYyRiAvKiBNTWFwLmggKi87IH07CisJCTMxMDEyRTQ3MThCOTdCOUIwMDM5MDYyRiAv
KiBOb2RlU2VhcmNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMTAxMkRENzE4Qjk3QjlCMDAzOTA2MkYgLyogTm9kZVNlYXJjaC5oICovOyB9OworCQkz
MTAxMkU0ODE4Qjk3QjlCMDAzOTA2MkYgLyogb3NpbmNsdWRlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkREODE4Qjk3QjlCMDAzOTA2MkYgLyog
b3NpbmNsdWRlLmggKi87IH07CisJCTMxMDEyRTQ5MThCOTdCOUIwMDM5MDYyRiAvKiBvc3NvdXJj
ZV9wb3NpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzMTAxMkREOTE4Qjk3QjlCMDAzOTA2MkYgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovOyB9Owor
CQkzMTAxMkU0QjE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0RVNTTC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkREQjE4Qjk3QjlCMDAzOTA2
MkYgLyogT3V0cHV0RVNTTC5jcHAgKi87IH07CisJCTMxMDEyRTRDMThCOTdCOUIwMDM5MDYyRiAv
KiBPdXRwdXRFU1NMLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMTAxMkREQzE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0RVNTTC5oICovOyB9OworCQkz
MTAxMkU0RDE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0R0xTTC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRERDE4Qjk3QjlCMDAzOTA2MkYg
LyogT3V0cHV0R0xTTC5jcHAgKi87IH07CisJCTMxMDEyRTRFMThCOTdCOUIwMDM5MDYyRiAvKiBP
dXRwdXRHTFNMLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzMTAxMkRERTE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0R0xTTC5oICovOyB9OworCQkzMTAx
MkU0RjE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0R0xTTEJhc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEREYxOEI5N0I5QjAwMzkwNjJG
IC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLzsgfTsKKwkJMzEwMTJFNTAxOEI5N0I5QjAwMzkwNjJG
IC8qIE91dHB1dEdMU0xCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzMTAxMkRFMDE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0R0xTTEJhc2UuaCAq
LzsgfTsKKwkJMzEwMTJFNTExOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEhMU0wuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERTExOEI5N0I5
QjAwMzkwNjJGIC8qIE91dHB1dEhMU0wuY3BwICovOyB9OworCQkzMTAxMkU1MjE4Qjk3QjlCMDAz
OTA2MkYgLyogT3V0cHV0SExTTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzEwMTJERTIxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEhMU0wuaCAqLzsg
fTsKKwkJMzEwMTJFNTMxOEI5N0I5QjAwMzkwNjJGIC8qIHBhcnNlQ29uc3QuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERTMxOEI5N0I5QjAw
MzkwNjJGIC8qIHBhcnNlQ29uc3QuY3BwICovOyB9OworCQkzMTAxMkU1NDE4Qjk3QjlCMDAzOTA2
MkYgLyogUGFyc2VDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDMxMDEyREU0MThCOTdCOUIwMDM5MDYyRiAvKiBQYXJzZUNvbnRleHQuY3Bw
ICovOyB9OworCQkzMTAxMkU1NTE4Qjk3QjlCMDAzOTA2MkYgLyogUGFyc2VDb250ZXh0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRFNTE4Qjk3
QjlCMDAzOTA2MkYgLyogUGFyc2VDb250ZXh0LmggKi87IH07CisJCTMxMDEyRTU2MThCOTdCOUIw
MDM5MDYyRiAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzEwMTJERTYxOEI5N0I5QjAwMzkwNjJGIC8qIFBvb2xBbGxvYy5jcHAg
Ki87IH07CisJCTMxMDEyRTU3MThCOTdCOUIwMDM5MDYyRiAvKiBQb29sQWxsb2MuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREU3MThCOTdCOUIw
MDM5MDYyRiAvKiBQb29sQWxsb2MuaCAqLzsgfTsKKwkJMzEwMTJFNTgxOEI5N0I5QjAwMzkwNjJG
IC8qIFByYWdtYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzEwMTJERTgxOEI5N0I5QjAwMzkwNjJGIC8qIFByYWdtYS5oICovOyB9OworCQkzMTAxMkU1
OTE4Qjk3QjlCMDAzOTA2MkYgLyogUXVhbGlmaWVyQWxpdmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERTkxOEI5N0I5QjAwMzkwNjJGIC8q
IFF1YWxpZmllckFsaXZlLmNwcCAqLzsgfTsKKwkJMzEwMTJFNUExOEI5N0I5QjAwMzkwNjJGIC8q
IFF1YWxpZmllckFsaXZlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzMTAxMkRFQTE4Qjk3QjlCMDAzOTA2MkYgLyogUXVhbGlmaWVyQWxpdmUuaCAqLzsg
fTsKKwkJMzEwMTJFNUIxOEI5N0I5QjAwMzkwNjJGIC8qIFJlbW92ZVRyZWUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERUIxOEI5N0I5QjAw
MzkwNjJGIC8qIFJlbW92ZVRyZWUuY3BwICovOyB9OworCQkzMTAxMkU1QzE4Qjk3QjlCMDAzOTA2
MkYgLyogUmVtb3ZlVHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzEwMTJERUMxOEI5N0I5QjAwMzkwNjJGIC8qIFJlbW92ZVRyZWUuaCAqLzsgfTsK
KwkJMzEwMTJFNUQxOEI5N0I5QjAwMzkwNjJGIC8qIFJlbmFtZUZ1bmN0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRFRDE4Qjk3QjlCMDAz
OTA2MkYgLyogUmVuYW1lRnVuY3Rpb24uaCAqLzsgfTsKKwkJMzEwMTJFNUUxOEI5N0I5QjAwMzkw
NjJGIC8qIFJld3JpdGVFbHNlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREVFMThCOTdCOUIwMDM5MDYyRiAvKiBSZXdyaXRlRWxz
ZUJsb2Nrcy5jcHAgKi87IH07CisJCTMxMDEyRTVGMThCOTdCOUIwMDM5MDYyRiAvKiBSZXdyaXRl
RWxzZUJsb2Nrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzEwMTJERUYxOEI5N0I5QjAwMzkwNjJGIC8qIFJld3JpdGVFbHNlQmxvY2tzLmggKi87IH07
CisJCTMxMDEyRTYwMThCOTdCOUIwMDM5MDYyRiAvKiBTZWFyY2hTeW1ib2wuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERjAxOEI5N0I5QjAw
MzkwNjJGIC8qIFNlYXJjaFN5bWJvbC5jcHAgKi87IH07CisJCTMxMDEyRTYxMThCOTdCOUIwMDM5
MDYyRiAvKiBTZWFyY2hTeW1ib2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDMxMDEyREYxMThCOTdCOUIwMDM5MDYyRiAvKiBTZWFyY2hTeW1ib2wuaCAq
LzsgfTsKKwkJMzEwMTJFNjIxOEI5N0I5QjAwMzkwNjJGIC8qIFNoYWRlckxhbmcuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERjIxOEI5N0I5
QjAwMzkwNjJGIC8qIFNoYWRlckxhbmcuY3BwICovOyB9OworCQkzMTAxMkU2MzE4Qjk3QjlCMDAz
OTA2MkYgLyogU2hIYW5kbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDMxMDEyREYzMThCOTdCOUIwMDM5MDYyRiAvKiBTaEhhbmRsZS5oICovOyB9Owor
CQkzMTAxMkU2NDE4Qjk3QjlCMDAzOTA2MkYgLyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERjQxOEI5N0I5QjAwMzkw
NjJGIC8qIFN5bWJvbFRhYmxlLmNwcCAqLzsgfTsKKwkJMzEwMTJFNjUxOEI5N0I5QjAwMzkwNjJG
IC8qIFN5bWJvbFRhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzMTAxMkRGNTE4Qjk3QjlCMDAzOTA2MkYgLyogU3ltYm9sVGFibGUuaCAqLzsgfTsK
KwkJMzEwMTJFNjYxOEI5N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1p
bmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEw
MTJERjcxOEI5N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3Bw
ICovOyB9OworCQkzMTAxMkU2NzE4Qjk3QjlCMDAzOTA2MkYgLyogUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzEwMTJERjgxOEI5N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1p
bmcuaCAqLzsgfTsKKwkJMzEwMTJFNjgxOEI5N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0VmVydGV4
U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMxMDEyREY5MThCOTdCOUIwMDM5MDYyRiAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRp
bWluZy5jcHAgKi87IH07CisJCTMxMDEyRTY5MThCOTdCOUIwMDM5MDYyRiAvKiBSZXN0cmljdFZl
cnRleFNoYWRlclRpbWluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzEwMTJERkExOEI5N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nLmggKi87IH07CisJCTMxMDEyRTZBMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9y
RVNTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
MTAxMkRGQjE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckVTU0wuY3BwICovOyB9OworCQkz
MTAxMkU2QjE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckVTU0wuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREZDMThCOTdCOUIwMDM5MDYy
RiAvKiBUcmFuc2xhdG9yRVNTTC5oICovOyB9OworCQkzMTAxMkU2QzE4Qjk3QjlCMDAzOTA2MkYg
LyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzEwMTJERkQxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JHTFNMLmNw
cCAqLzsgfTsKKwkJMzEwMTJFNkQxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JHTFNMLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRGRTE4
Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckdMU0wuaCAqLzsgfTsKKwkJMzEwMTJFNkUxOEI5
N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JITFNMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREZGMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFu
c2xhdG9ySExTTC5jcHAgKi87IH07CisJCTMxMDEyRTZGMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFu
c2xhdG9ySExTTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzEwMTJFMDAxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JITFNMLmggKi87IH07CisJ
CTMxMDEyRTcwMThCOTdCOUIwMDM5MDYyRiAvKiBUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJFMDExOEI5N0I5QjAwMzkwNjJGIC8qIFR5
cGVzLmggKi87IH07CisJCTMxMDEyRTcxMThCOTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENp
cmN1aXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzEwMTJFMDIxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi87IH07
CisJCTMxMDEyRTcyMThCOTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTAzMThCOTdC
OUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCAqLzsgfTsKKwkJMzEwMTJFNzMxOEI5
N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwNDE4Qjk3QjlCMDAzOTA2MkYg
LyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcCAqLzsgfTsKKwkJMzEwMTJFNzQxOEI5N0I5QjAw
MzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJFMDUxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9s
ZFNob3J0Q2lyY3VpdEFTVC5oICovOyB9OworCQkzMTAxMkU3NTE4Qjk3QjlCMDAzOTA2MkYgLyog
VW5pZm9ybS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzMTAxMkUwNjE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5jcHAgKi87IH07CisJCTMxMDEy
RTc2MThCOTdCOUIwMDM5MDYyRiAvKiBVbmlmb3JtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwNzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9y
bS5oICovOyB9OworCQkzMTAxMkU3NzE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwODE4Qjk3QjlC
MDAzOTA2MkYgLyogdXRpbC5jcHAgKi87IH07CisJCTMxMDEyRTc4MThCOTdCOUIwMDM5MDYyRiAv
KiB1dGlsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
MTAxMkUwOTE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5oICovOyB9OworCQkzMTAxMkU3OTE4Qjk3
QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwQTE4Qjk3QjlCMDAzOTA2MkYgLyog
VmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgKi87IH07CisJCTMxMDEyRTdBMThCOTdCOUIwMDM5MDYy
RiAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwQjE4Qjk3QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1p
dGF0aW9ucy5oICovOyB9OworCQkzMTAxMkU3QjE4Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFibGVJ
bmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMx
MDEyRTBDMThCOTdCOUIwMDM5MDYyRiAvKiBWYXJpYWJsZUluZm8uY3BwICovOyB9OworCQkzMTAx
MkU3QzE4Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFibGVJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwRDE4Qjk3QjlCMDAzOTA2MkYgLyog
VmFyaWFibGVJbmZvLmggKi87IH07CisJCTMxMDEyRTdEMThCOTdCOUIwMDM5MDYyRiAvKiBWYXJp
YWJsZVBhY2tlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMTAxMkUwRTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFibGVQYWNrZXIuY3BwICovOyB9
OworCQkzMTAxMkU3RTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFibGVQYWNrZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTBGMThCOTdCOUIw
MDM5MDYyRiAvKiBWYXJpYWJsZVBhY2tlci5oICovOyB9OworCQkzMTAxMkU3RjE4Qjk3QjlCMDAz
OTA2MkYgLyogVmVyc2lvbkdMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzEwMTJFMTAxOEI5N0I5QjAwMzkwNjJGIC8qIFZlcnNpb25HTFNMLmNw
cCAqLzsgfTsKKwkJMzEwMTJFODAxOEI5N0I5QjAwMzkwNjJGIC8qIFZlcnNpb25HTFNMLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUxMTE4Qjk3
QjlCMDAzOTA2MkYgLyogVmVyc2lvbkdMU0wuaCAqLzsgfTsKKwkJMzEwMTJFODMxOEI5N0M4NjAw
MzkwNjJGIC8qIGNvbXBpbGVyZGVidWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzEwMTJFODExOEI5N0M4NjAwMzkwNjJGIC8qIGNvbXBpbGVyZGVi
dWcuY3BwICovOyB9OworCQkzMTAxMkU4NDE4Qjk3Qzg2MDAzOTA2MkYgLyogY29tcGlsZXJkZWJ1
Zy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJF
ODIxOEI5N0M4NjAwMzkwNjJGIC8qIGNvbXBpbGVyZGVidWcuaCAqLzsgfTsKIAkJMzEyQkRCMEMx
NUZFQ0FDOTAwOTdFQkM3IC8qIEFOR0xFLnBsaXN0IGluIENvcHlGaWxlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTJCREIwOTE1RkVDOTFFMDA5N0VCQzcgLyogQU5HTEUu
cGxpc3QgKi87IH07CiAJCTMxMkJEQjBFMTVGRUNBRTUwMDk3RUJDNyAvKiBBTkdMRS50eHQgaW4g
Q29weUZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMkJEQjBBMTVG
RUNBM0EwMDk3RUJDNyAvKiBBTkdMRS50eHQgKi87IH07CiAJCTQ5OTUxQzAzMTRCN0FBQjMwMDYw
RTk2RSAvKiBsZW5ndGhfbGltaXRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0OTk1MUMwMjE0QjdBQUIzMDA2MEU5NkUgLyogbGVuZ3RoX2xpbWl0cy5o
ICovOyB9OwotCQk0OTk1MUMwOTE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDk5NTFDMDUxNEI3QUFENzAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCAq
LzsgfTsKLQkJNDk5NTFDMEExNEI3QUFEODAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTk1
MUMwNjE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCAqLzsgfTsK
LQkJNUNCMTNGRDQxNzlEQjNGRDAwMUY4NTFEIC8qIERldGVjdENhbGxEZXB0aC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0IxM0ZEMjE3OURCM0ZE
MDAxRjg1MUQgLyogRGV0ZWN0Q2FsbERlcHRoLmNwcCAqLzsgfTsKLQkJNUNCMTNGRDUxNzlEQjNG
RDAwMUY4NTFEIC8qIERldGVjdENhbGxEZXB0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNUNCMTNGRDMxNzlEQjNGRDAwMUY4NTFEIC8qIERldGVjdENh
bGxEZXB0aC5oICovOyB9OwotCQk3MjMwOUE0RDE4M0MyNTkzMDAzNzBCOTMgLyogQ29kZUdlbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjY1MDkz
MDE4M0FBMjEzMDBEMjhCNDggLyogQ29kZUdlbi5jcHAgKi87IH07Ci0JCTcyMzA5QTRFMTgzQzI1
OUMwMDM3MEI5MyAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI2NTA5MzYxODNBQTNDNjAwRDI4QjQ4IC8q
IFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAgKi87IH07Ci0JCTcyMzA5QTRGMTgzQzI1OUUwMDM3
MEI5MyAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNjUwOTM3MTgzQUEzQzYwMEQyOEI0OCAvKiBVbmZvbGRT
aG9ydENpcmN1aXRBU1QuaCAqLzsgfTsKLQkJNzIzMDlBNTAxODNDMjVBMTAwMzcwQjkzIC8qIFBh
cnNlQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MjY1MDkzNDE4M0FBM0IyMDBEMjhCNDggLyogUGFyc2VDb250ZXh0LmNwcCAqLzsgfTsK
LQkJNzIzMDlBNTExODNDMjVBNTAwMzcwQjkzIC8qIFBhcnNlQ29udGV4dC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI2NTA5MzUxODNBQTNCMjAwRDI4
QjQ4IC8qIFBhcnNlQ29udGV4dC5oICovOyB9OwotCQk3MjMwOUE1MjE4M0MyNUE3MDAzNzBCOTMg
LyogTm9kZVNlYXJjaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzI2NTA5MzMxODNBQTI4OTAwRDI4QjQ4IC8qIE5vZGVTZWFyY2guaCAqLzsgfTsKLQkJ
NzIzMDlBNTMxODNDMjVBQTAwMzcwQjkzIC8qIEluaXRpYWxpemVHTFBvc2l0aW9uLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNjUwOTMxMTgzQUEy
NDYwMEQyOEI0OCAvKiBJbml0aWFsaXplR0xQb3NpdGlvbi5jcHAgKi87IH07Ci0JCTcyMzA5QTU0
MTgzQzI1QUQwMDM3MEI5MyAvKiBJbml0aWFsaXplR0xQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI2NTA5MzIxODNBQTI0NjAwRDI4QjQ4
IC8qIEluaXRpYWxpemVHTFBvc2l0aW9uLmggKi87IH07CiAJCTcyMzA5QTU2MTgzQzI3REUwMDM3
MEI5MyAvKiBUb2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzIzMDlBNTUxODNDMjdEQjAwMzcwQjkzIC8qIFRva2VuaXplci5jcHAgKi87
IH07CiAJCTcyMzA5QTU4MTgzQzI3RjMwMDM3MEI5MyAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzA5QTU3MTgz
QzI3RjEwMDM3MEI5MyAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCAqLzsgfTsKLQkJNzIzMDlBNUMx
ODNDMjg1MzAwMzcwQjkzIC8qIGdsc2xhbmdfbGV4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzA5QTU5MTgzQzI4NEUwMDM3MEI5MyAvKiBnbHNs
YW5nX2xleC5jcHAgKi87IH07Ci0JCTcyMzA5QTVEMTgzQzI4NTMwMDM3MEI5MyAvKiBnbHNsYW5n
X3RhYi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
MjMwOUE1QTE4M0MyODRFMDAzNzBCOTMgLyogZ2xzbGFuZ190YWIuY3BwICovOyB9OwotCQk3MjMw
OUE1RTE4M0MyODUzMDAzNzBCOTMgLyogZ2xzbGFuZ190YWIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzA5QTVCMTgzQzI4NEUwMDM3MEI5MyAvKiBn
bHNsYW5nX3RhYi5oICovOyB9OwotCQk3MjMwOUE2MTE4M0MyQTc0MDAzNzBCOTMgLyogVHJhbnNs
YXRvckhMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzIzMDlBNUYxODNDMkE2NDAwMzcwQjkzIC8qIFRyYW5zbGF0b3JITFNMLmNwcCAqLzsgfTsK
LQkJNzIzMDlBNjIxODNDMkE3NDAwMzcwQjkzIC8qIFRyYW5zbGF0b3JITFNMLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjMwOUE2MDE4M0MyQTY0MDAz
NzBCOTMgLyogVHJhbnNsYXRvckhMU0wuaCAqLzsgfTsKLQkJNzIzMDlBNjUxODNDMkFFNTAwMzcw
QjkzIC8qIE91dHB1dEhMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzIzMDlBNjMxODNDMkFFNTAwMzcwQjkzIC8qIE91dHB1dEhMU0wuY3BwICov
OyB9OwotCQk3MjMwOUE2NjE4M0MyQUU1MDAzNzBCOTMgLyogT3V0cHV0SExTTC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzMDlBNjQxODNDMkFFNTAw
MzcwQjkzIC8qIE91dHB1dEhMU0wuaCAqLzsgfTsKLQkJNzIzMDlBNkQxODNDMkJFODAwMzcwQjkz
IC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzIzMDlBNjcxODNDMkJFODAwMzcwQjkzIC8qIERldGVjdERpc2Nv
bnRpbnVpdHkuY3BwICovOyB9OwotCQk3MjMwOUE2RTE4M0MyQkU4MDAzNzBCOTMgLyogRGV0ZWN0
RGlzY29udGludWl0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzIzMDlBNjgxODNDMkJFODAwMzcwQjkzIC8qIERldGVjdERpc2NvbnRpbnVpdHkuaCAq
LzsgfTsKLQkJNzIzMDlBNkYxODNDMkJFODAwMzcwQjkzIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjMwOUE2
OTE4M0MyQkU4MDAzNzBCOTMgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCAqLzsgfTsKLQkJNzIz
MDlBNzAxODNDMkJFODAwMzcwQjkzIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzMDlBNkExODNDMkJFODAwMzcw
QjkzIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovOyB9OwotCQk3MjMwOUE3MTE4M0MyQkU4MDAz
NzBCOTMgLyogVW5pZm9ybS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MjMwOUE2QjE4M0MyQkU4MDAzNzBCOTMgLyogVW5pZm9ybS5jcHAgKi87IH07
Ci0JCTcyMzA5QTcyMTgzQzJCRTgwMDM3MEI5MyAvKiBVbmlmb3JtLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjMwOUE2QzE4M0MyQkU4MDAzNzBCOTMg
LyogVW5pZm9ybS5oICovOyB9OwotCQk5MEQ5QjEwMjEyRTExRENCMDAyRDQyNTUgLyogQ29tcGls
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTBE
OUIwRjkxMkUxMURDQjAwMkQ0MjU1IC8qIENvbXBpbGVyLmNwcCAqLzsgfTsKLQkJOTBEOUIxMDMx
MkUxMURDQjAwMkQ0MjU1IC8qIEV4dGVuc2lvbkJlaGF2aW9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MEQ5QjBGQTEyRTExRENCMDAyRDQyNTUgLyog
RXh0ZW5zaW9uQmVoYXZpb3IuaCAqLzsgfTsKLQkJOTBEOUIxMDcxMkUxMURDQjAwMkQ0MjU1IC8q
IGdsc2xhbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkwRDlCMEZFMTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nLmggKi87IH07Ci0JCTkwRDlCMTA5
MTJFMTFEQ0IwMDJENDI1NSAvKiBTZWFyY2hTeW1ib2wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTBEOUIxMDAxMkUxMURDQjAwMkQ0MjU1IC8qIFNl
YXJjaFN5bWJvbC5jcHAgKi87IH07Ci0JCTkwRDlCMTBBMTJFMTFEQ0IwMDJENDI1NSAvKiBTZWFy
Y2hTeW1ib2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkwRDlCMTAxMTJFMTFEQ0IwMDJENDI1NSAvKiBTZWFyY2hTeW1ib2wuaCAqLzsgfTsKLQkJOTBE
OUIxMTMxMkUxMURENjAwMkQ0MjU1IC8qIHV0aWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTBEOUIxMEIxMkUxMURENjAwMkQ0MjU1IC8qIHV0aWwu
Y3BwICovOyB9OwotCQk5MEQ5QjExNDEyRTExREQ2MDAyRDQyNTUgLyogdXRpbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTBEOUIxMEMxMkUxMURENjAw
MkQ0MjU1IC8qIHV0aWwuaCAqLzsgfTsKLQkJOTBEOUIxMTUxMkUxMURENjAwMkQ0MjU1IC8qIFZh
bGlkYXRlTGltaXRhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTBEOUIxMEQxMkUxMURENjAwMkQ0MjU1IC8qIFZhbGlkYXRlTGltaXRhdGlv
bnMuY3BwICovOyB9OwotCQk5MEQ5QjExNjEyRTExREQ2MDAyRDQyNTUgLyogVmFsaWRhdGVMaW1p
dGF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTBEOUIxMEUxMkUxMURENjAwMkQ0MjU1IC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuaCAqLzsgfTsK
LQkJOTBEOUIxMTcxMkUxMURENjAwMkQ0MjU1IC8qIFZhcmlhYmxlSW5mby5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MEQ5QjEwRjEyRTExREQ2MDAy
RDQyNTUgLyogVmFyaWFibGVJbmZvLmNwcCAqLzsgfTsKLQkJOTBEOUIxMTgxMkUxMURENjAwMkQ0
MjU1IC8qIFZhcmlhYmxlSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTBEOUIxMTAxMkUxMURENjAwMkQ0MjU1IC8qIFZhcmlhYmxlSW5mby5oICov
OyB9OwotCQk5MEQ5QjExOTEyRTExREQ2MDAyRDQyNTUgLyogVmVyc2lvbkdMU0wuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTBEOUIxMTExMkUxMURE
NjAwMkQ0MjU1IC8qIFZlcnNpb25HTFNMLmNwcCAqLzsgfTsKLQkJOTBEOUIxMUExMkUxMURENjAw
MkQ0MjU1IC8qIFZlcnNpb25HTFNMLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5MEQ5QjExMjEyRTExREQ2MDAyRDQyNTUgLyogVmVyc2lvbkdMU0wuaCAq
LzsgfTsKIAkJQTA4QzNDREMxNkQ2Q0I2MTAwM0YwQjgzIC8qIEFycmF5Qm91bmRzQ2xhbXBlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMDhDM0NE
QTE2RDZDQjYxMDAzRjBCODMgLyogQXJyYXlCb3VuZHNDbGFtcGVyLmNwcCAqLzsgfTsKIAkJQTA4
QzNDREQxNkQ2Q0I2MTAwM0YwQjgzIC8qIEFycmF5Qm91bmRzQ2xhbXBlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTA4QzNDREIxNkQ2Q0I2MTAwM0Yw
QjgzIC8qIEFycmF5Qm91bmRzQ2xhbXBlci5oICovOyB9OwotCQlBMEFBQkUyQzEzQUZFODEwMDBG
MkVCRDEgLyogRm9yTG9vcFVucm9sbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkUyQTEzQUZFODEwMDBGMkVCRDEgLyogRm9yTG9vcFVucm9s
bC5jcHAgKi87IH07Ci0JCUEwQUFCRTJEMTNBRkU4MTAwMEYyRUJEMSAvKiBGb3JMb29wVW5yb2xs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkUy
QjEzQUZFODEwMDBGMkVCRDEgLyogRm9yTG9vcFVucm9sbC5oICovOyB9OwotCQlBMEFBQkUzMDEz
QUZFODMwMDBGMkVCRDEgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTBBQUJFMkUxM0FGRTgzMDAwRjJFQkQx
IC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCAqLzsgfTsKLQkJQTBBQUJFMzExM0FGRTgzMDAw
RjJFQkQxIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkUyRjEzQUZFODMwMDBGMkVCRDEgLyogTWFwTG9u
Z1ZhcmlhYmxlTmFtZXMuaCAqLzsgfTsKLQkJQTBBQUJFMzQxM0FGRTg0NzAwRjJFQkQxIC8qIE91
dHB1dEdMU0xCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEEwQUFCRTMyMTNBRkU4NDcwMEYyRUJEMSAvKiBPdXRwdXRHTFNMQmFzZS5jcHAgKi87
IH07Ci0JCUEwQUFCRTM1MTNBRkU4NDcwMEYyRUJEMSAvKiBPdXRwdXRHTFNMQmFzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTBBQUJFMzMxM0FGRTg0
NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xCYXNlLmggKi87IH07Ci0JCUEwQUFCRTQ0MTNBRkU5NDUw
MEYyRUJEMSAvKiBPdXRwdXRFU1NMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEwQUFCRTQyMTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmNw
cCAqLzsgfTsKLQkJQTBBQUJFNDUxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFCRTQzMTNBRkU5
NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmggKi87IH07Ci0JCUEwQUFCRTQ4MTNBRkU5NjEwMEYy
RUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVT
U0wuY3BwICovOyB9OwotCQlBMEFBQkU0OTEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVT
U0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFC
RTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovOyB9OwogCQlBMjY0RjhB
QzE2OTc0REVEMDA2RkFBNUEgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGODkzMTY5NzRERUQwMDZGQUE1QSAv
KiBEaWFnbm9zdGljc0Jhc2UuY3BwICovOyB9OwogCQlBMjY0RjhBRDE2OTc0REVEMDA2RkFBNUEg
LyogRGlhZ25vc3RpY3NCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMjY0Rjg5NDE2OTc0REVEMDA2RkFBNUEgLyogRGlhZ25vc3RpY3NCYXNlLmgg
Ki87IH07CiAJCUEyNjRGOEFFMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFz
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0
Rjg5NTE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwICovOyB9OwpA
QCAtOTksNDQgKzE1OSw3IEBACiAJCUEyNjRGOEMxMTY5NzRERUQwMDZGQUE1QSAvKiBUb2tlbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhB
ODE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uY3BwICovOyB9OwogCQlBMjY0RjhDMjE2OTc0REVE
MDA2RkFBNUEgLyogVG9rZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEEyNjRGOEE5MTY5NzRERUQwMDZGQUE1QSAvKiBUb2tlbi5oICovOyB9OwogCQlB
MjY0RjhDNDE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW5pemVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhBQjE2OTc0REVEMDA2RkFBNUEgLyog
VG9rZW5pemVyLmggKi87IH07Ci0JCUEyNjRGOEM4MTY5NzRFMkEwMDZGQUE1QSAvKiBIYXNoTmFt
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRG
OEM1MTY5NzRFMkEwMDZGQUE1QSAvKiBIYXNoTmFtZXMuaCAqLzsgfTsKLQkJQTI2NEY4QzkxNjk3
NEUyQTAwNkZBQTVBIC8qIFZhcmlhYmxlUGFja2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGOEM2MTY5NzRFMkEwMDZGQUE1QSAvKiBWYXJp
YWJsZVBhY2tlci5jcHAgKi87IH07Ci0JCUEyNjRGOENBMTY5NzRFMkEwMDZGQUE1QSAvKiBWYXJp
YWJsZVBhY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTI2NEY4QzcxNjk3NEUyQTAwNkZBQTVBIC8qIFZhcmlhYmxlUGFja2VyLmggKi87IH07CiAJ
CUEyNjRGOENEMTY5NzYyQUEwMDZGQUE1QSAvKiBraHJwbGF0Zm9ybS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4Q0MxNjk3NjJBQTAwNkZBQTVB
IC8qIGtocnBsYXRmb3JtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCAp
OyB9OyB9OwotCQlBMjY1NjdCQjE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjAxNTlD
MjFCMTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmNwcCAqLzsgfTsKLQkJQTI2NTY3QkMxNTlDMjFC
MTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCMTE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3Mu
aCAqLzsgfTsKLQkJQTI2NTY3QkQxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3
QjIxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovOyB9OwotCQlBMjY1
NjdCRTE1OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjMxNTlDMjFCMTAwMzk4NTM5
IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLzsgfTsKLQkJQTI2NTY3QkYxNTlDMjFCMTAwMzk4NTM5
IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjQxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxp
emVQYXJzZUNvbnRleHQuY3BwICovOyB9OwotCQlBMjY1NjdDMDE1OUMyMUIxMDAzOTg1MzkgLyog
UHJhZ21hLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MjY1NjdCNTE1OUMyMUIxMDAzOTg1MzkgLyogUHJhZ21hLmggKi87IH07Ci0JCUEyNjU2N0MxMTU5
QzIxQjEwMDM5ODUzOSAvKiBSZW5hbWVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjYxNTlDMjFCMTAwMzk4NTM5IC8qIFJlbmFt
ZUZ1bmN0aW9uLmggKi87IH07Ci0JCUEyNjU2ODM5MTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRl
bmN5R3JhcGguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTI2NTY4MkQxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi87IH07
Ci0JCUEyNjU2ODNBMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODJFMTU5QzIzRTEw
MDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguaCAqLzsgfTsKLQkJQTI2NTY4M0IxNTlDMjNFMTAw
Mzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MkYxNTlDMjNFMTAwMzk4NTM5IC8qIERl
cGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovOyB9OwotCQlBMjY1NjgzQzE1OUMyM0UxMDAzOTg1
MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzAxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXIuaCAqLzsgfTsKLQkJQTI2NTY4M0QxNTlDMjNFMTAwMzk4NTM5IC8qIERl
cGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMjY1NjgzMTE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBo
T3V0cHV0LmNwcCAqLzsgfTsKLQkJQTI2NTY4M0UxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVu
Y3lHcmFwaE91dHB1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTI2NTY4MzIxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5o
ICovOyB9OwotCQlBMjY1NjgzRjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoVHJh
dmVyc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTI2NTY4MzMxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAq
LzsgfTsKLQkJQTI2NTY4NDAxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTI2NTY4MzUxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1p
bmcuY3BwICovOyB9OwotCQlBMjY1Njg0MTE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFn
bWVudFNoYWRlclRpbWluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTI2NTY4MzYxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmcuaCAqLzsgfTsKLQkJQTI2NTY4NDIxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0
VmVydGV4U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEyNjU2ODM3MTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNo
YWRlclRpbWluZy5jcHAgKi87IH07Ci0JCUEyNjU2ODQzMTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0
cmljdFZlcnRleFNoYWRlclRpbWluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTI2NTY4MzgxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4
U2hhZGVyVGltaW5nLmggKi87IH07Ci0JCUZCMzlEMjc1MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1
Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5
RDIyNjEyMDBGMzVBMDAwODhFNjkgLyogZGVidWcuY3BwICovOyB9OwotCQlGQjM5RDI3OTEyMDBG
MzVBMDAwODhFNjkgLyogSW5mb1NpbmsuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMkExMjAwRjM1QTAwMDg4RTY5IC8qIEluZm9TaW5rLmNw
cCAqLzsgfTsKLQkJRkIzOUQyN0IxMjAwRjM1QTAwMDg4RTY5IC8qIEluaXRpYWxpemUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMkMxMjAw
RjM1QTAwMDg4RTY5IC8qIEluaXRpYWxpemUuY3BwICovOyB9OwotCQlGQjM5RDI3RDEyMDBGMzVB
MDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyRTEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6
ZURsbC5jcHAgKi87IH07Ci0JCUZCMzlEMjgxMTIwMEYzNUEwMDA4OEU2OSAvKiBJbnRlcm1lZGlh
dGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIz
OUQyMzIxMjAwRjM1QTAwMDg4RTY5IC8qIEludGVybWVkaWF0ZS5jcHAgKi87IH07Ci0JCUZCMzlE
MjgzMTIwMEYzNUEwMDA4OEU2OSAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMzQxMjAwRjM1QTAwMDg4RTY5IC8qIGlu
dGVybU91dC5jcHAgKi87IH07Ci0JCUZCMzlEMjg0MTIwMEYzNUEwMDA4OEU2OSAvKiBJbnRlcm1U
cmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGQjM5RDIzNTEyMDBGMzVBMDAwODhFNjkgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovOyB9Owot
CQlGQjM5RDI4ODEyMDBGMzVBMDAwODhFNjkgLyogb3Nzb3VyY2VfcG9zaXguY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMzkxMjAwRjM1QTAw
MDg4RTY5IC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLzsgfTsKLQkJRkIzOUQyOEExMjAwRjM1QTAw
MDg4RTY5IC8qIE91dHB1dEdMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkIzOUQyM0IxMjAwRjM1QTAwMDg4RTY5IC8qIE91dHB1dEdMU0wuY3Bw
ICovOyB9OwotCQlGQjM5RDI4RTEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2VDb25zdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIzRjEyMDBG
MzVBMDAwODhFNjkgLyogcGFyc2VDb25zdC5jcHAgKi87IH07Ci0JCUZCMzlEMjkxMTIwMEYzNUEw
MDA4OEU2OSAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkIzOUQyNDIxMjAwRjM1QTAwMDg4RTY5IC8qIFBvb2xBbGxvYy5jcHAg
Ki87IH07Ci0JCUZCMzlEMkE0MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI1NjEy
MDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovOyB9OwotCQlGQjM5RDJBNjEy
MDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI1ODEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3Zl
VHJlZS5jcHAgKi87IH07Ci0JCUZCMzlEMkE4MTIwMEYzNUEwMDA4OEU2OSAvKiBTaGFkZXJMYW5n
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlE
MjVBMTIwMEYzNUEwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNwcCAqLzsgfTsKLQkJRkIzOUQyQUEx
MjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjVDMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1i
b2xUYWJsZS5jcHAgKi87IH07Ci0JCUZCMzlEMkFDMTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xh
dG9yR0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGQjM5RDI2ODEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwICovOyB9Owog
CQlGQjM5RDc2RTEyMDExMEZDMDAwODhFNjkgLyogU2hhZGVyTGFuZy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyQkYxMjAwRjNFNjAwMDg4RTY5
IC8qIFNoYWRlckxhbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7
IH07IH07CiAvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIApAQCAtMTc0LDY1ICsxOTcs
MTI1IEBACiAvKiBFbmQgUEJYQ29weUZpbGVzQnVpbGRQaGFzZSBzZWN0aW9uICovCiAKIC8qIEJl
Z2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLworCQkzMTAxMkRBMDE4Qjk3QjlCMDAzOTA2
MkYgLyogQmFzZVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VU
eXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRBMTE4Qjk3QjlCMDAz
OTA2MkYgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRBMjE4Qjk3QjlCMDAzOTA2MkYgLyogQnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJE
QTMxOEI5N0I5QjAwMzkwNjJGIC8qIENvZGVHZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ29kZUdlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTMxMDEyREE0MThCOTdCOUIwMDM5MDYyRiAvKiBDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMx
MDEyREE1MThCOTdCOUIwMDM5MDYyRiAvKiBDb21waWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDb21waWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTMxMDEyREE4MThCOTdCOUIwMDM5MDYyRiAvKiBDb25zdGFudFVuaW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0YW50VW5pb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQUExOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lH
cmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5
R3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRBQjE4Qjk3QjlC
MDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERlcGVuZGVuY3lHcmFwaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkz
MTAxMkRBQzE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhCdWlsZGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQUQxOEI5N0I5QjAwMzkw
NjJGIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkzMTAxMkRBRTE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFw
aE91dHB1dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREFGMThCOTdC
OUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoT3V0cHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTMxMDEyREIwMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEy
REIxMThCOTdCOUIwMDM5MDYyRiAvKiBEZXRlY3RDYWxsRGVwdGguY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGV0ZWN0Q2FsbERlcHRoLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQjIxOEI5N0I5QjAwMzkwNjJGIC8qIERldGVjdENhbGxE
ZXB0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXRlY3RDYWxsRGVwdGgu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQjMxOEI5N0I5QjAwMzkwNjJG
IC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRGV0ZWN0RGlzY29udGludWl0eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTMxMDEyREI0MThCOTdCOUIwMDM5MDYyRiAvKiBEZXRlY3REaXNjb250aW51aXR5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdERpc2NvbnRpbnVpdHkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQjUxOEI5N0I5QjAwMzkwNjJGIC8q
IERpYWdub3N0aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERp
YWdub3N0aWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQjYxOEI5
N0I5QjAwMzkwNjJGIC8qIERpYWdub3N0aWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERpYWdub3N0aWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEy
REI3MThCOTdCOUIwMDM5MDYyRiAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRCODE4Qjk3QjlCMDAzOTA2MkYgLyogRGlyZWN0aXZl
SGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXJlY3RpdmVIYW5k
bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREI5MThCOTdCOUIwMDM5
MDYyRiAvKiBFeHRlbnNpb25CZWhhdmlvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBFeHRlbnNpb25CZWhhdmlvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkz
MTAxMkRCQTE4Qjk3QjlCMDAzOTA2MkYgLyogRm9yTG9vcFVucm9sbC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb3JMb29wVW5yb2xsLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQkIxOEI5N0I5QjAwMzkwNjJGIC8qIEZvckxvb3BVbnJv
bGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9yTG9vcFVucm9sbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRCRDE4Qjk3QjlCMDAzOTA2MkYgLyog
Z2xzbGFuZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBnbHNsYW5nLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREMwMThCOTdCOUIwMDM5MDYyRiAvKiBn
bHNsYW5nX2xleC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBnbHNs
YW5nX2xleC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREMxMThCOTdC
OUIwMDM5MDYyRiAvKiBnbHNsYW5nX3RhYi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBnbHNsYW5nX3RhYi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTMxMDEyREMyMThCOTdCOUIwMDM5MDYyRiAvKiBnbHNsYW5nX3RhYi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBnbHNsYW5nX3RhYi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkzMTAxMkRDMzE4Qjk3QjlCMDAzOTA2MkYgLyogSGFzaE5hbWVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hOYW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkzMTAxMkRDNDE4Qjk3QjlCMDAzOTA2MkYgLyogSW5mb1NpbmsuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5mb1NpbmsuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRDNTE4Qjk3QjlCMDAzOTA2MkYgLyogSW5mb1Npbmsu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mb1NpbmsuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQzYxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxp
emUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREM3MThCOTdCOUIwMDM5MDYy
RiAvKiBJbml0aWFsaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRp
YWxpemUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQzgxOEI5N0I5QjAw
MzkwNjJGIC8qIEluaXRpYWxpemVEbGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW5pdGlhbGl6ZURsbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTMxMDEyREM5MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplRGxsLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRpYWxpemVEbGwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMzEwMTJEQ0ExOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVHbG9iYWxz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRpYWxpemVHbG9iYWxzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyRENCMThCOTdCOUIwMDM5MDYyRiAv
KiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkzMTAxMkRDQzE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZVBhcnNlQ29u
dGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplUGFyc2VD
b250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyRENEMThCOTdCOUIw
MDM5MDYyRiAvKiBJbml0aWFsaXplVmFyaWFibGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemVWYXJpYWJsZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkzMTAxMkRDRTE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZVZhcmlh
Ymxlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplVmFyaWFi
bGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyRENGMThCOTdCOUIwMDM5
MDYyRiAvKiBJbnRlcm1lZGlhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSW50ZXJtZWRpYXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEw
MTJERDAxOEI5N0I5QjAwMzkwNjJGIC8qIGludGVybWVkaWF0ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBpbnRlcm1lZGlhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMzEwMTJERDExOEI5N0I5QjAwMzkwNjJGIC8qIGludGVybU91dC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBpbnRlcm1PdXQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkzMTAxMkREMjE4Qjk3QjlCMDAzOTA2MkYgLyogSW50ZXJtVHJhdmVy
c2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZXJtVHJhdmVy
c2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkREMzE4Qjk3QjlCMDAz
OTA2MkYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gbG9jYWxpbnRlcm1lZGlhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MzEwMTJERDQxOEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcExvbmdWYXJpYWJsZU5hbWVzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERDUxOEI5N0I5QjAwMzkwNjJG
IC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE1hcExvbmdWYXJpYWJsZU5hbWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTMxMDEyREQ2MThCOTdCOUIwMDM5MDYyRiAvKiBNTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE1NYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJE
RDcxOEI5N0I5QjAwMzkwNjJGIC8qIE5vZGVTZWFyY2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTm9kZVNlYXJjaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkz
MTAxMkREODE4Qjk3QjlCMDAzOTA2MkYgLyogb3NpbmNsdWRlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IG9zaW5jbHVkZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkzMTAxMkREOTE4Qjk3QjlCMDAzOTA2MkYgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gb3Nzb3VyY2VfcG9zaXguY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkREQjE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0
RVNTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPdXRwdXRFU1NM
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEREMxOEI5N0I5QjAwMzkw
NjJGIC8qIE91dHB1dEVTU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3V0
cHV0RVNTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRERDE4Qjk3QjlC
MDAzOTA2MkYgLyogT3V0cHV0R0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBPdXRwdXRHTFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEw
MTJEREUxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEdMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gT3V0cHV0R0xTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkzMTAxMkRERjE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0R0xTTEJhc2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3V0cHV0R0xTTEJhc2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRFMDE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0
R0xTTEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3V0cHV0R0xTTEJh
c2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERTExOEI5N0I5QjAwMzkw
NjJGIC8qIE91dHB1dEhMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gT3V0cHV0SExTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREUy
MThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRITFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE91dHB1dEhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEw
MTJERTMxOEI5N0I5QjAwMzkwNjJGIC8qIHBhcnNlQ29uc3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gcGFyc2VDb25zdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTMxMDEyREU0MThCOTdCOUIwMDM5MDYyRiAvKiBQYXJzZUNvbnRleHQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFyc2VDb250ZXh0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERTUxOEI5N0I5QjAwMzkwNjJGIC8qIFBh
cnNlQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJzZUNvbnRl
eHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERTYxOEI5N0I5QjAwMzkw
NjJGIC8qIFBvb2xBbGxvYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQb29sQWxsb2MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRFNzE4
Qjk3QjlCMDAzOTA2MkYgLyogUG9vbEFsbG9jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFBvb2xBbGxvYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRF
ODE4Qjk3QjlCMDAzOTA2MkYgLyogUHJhZ21hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFByYWdtYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRFOTE4
Qjk3QjlCMDAzOTA2MkYgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUXVhbGlmaWVyQWxpdmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkzMTAxMkRFQTE4Qjk3QjlCMDAzOTA2MkYgLyogUXVhbGlmaWVyQWxpdmUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVhbGlmaWVyQWxpdmUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERUIxOEI5N0I5QjAwMzkwNjJGIC8qIFJlbW92
ZVRyZWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3ZlVHJl
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREVDMThCOTdCOUIwMDM5
MDYyRiAvKiBSZW1vdmVUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bW92ZVRyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERUQxOEI5N0I5
QjAwMzkwNjJGIC8qIFJlbmFtZUZ1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlbmFtZUZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMx
MDEyREVFMThCOTdCOUIwMDM5MDYyRiAvKiBSZXdyaXRlRWxzZUJsb2Nrcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXdyaXRlRWxzZUJsb2Nrcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREVGMThCOTdCOUIwMDM5MDYyRiAvKiBSZXdy
aXRlRWxzZUJsb2Nrcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXdyaXRl
RWxzZUJsb2Nrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRGMDE4Qjk3
QjlCMDAzOTA2MkYgLyogU2VhcmNoU3ltYm9sLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNlYXJjaFN5bWJvbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTMxMDEyREYxMThCOTdCOUIwMDM5MDYyRiAvKiBTZWFyY2hTeW1ib2wuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VhcmNoU3ltYm9sLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTMxMDEyREYyMThCOTdCOUIwMDM5MDYyRiAvKiBTaGFkZXJMYW5nLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYWRlckxhbmcuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRGMzE4Qjk3QjlCMDAzOTA2MkYgLyogU2hI
YW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hIYW5kbGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERjQxOEI5N0I5QjAwMzkwNjJGIC8qIFN5
bWJvbFRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bWJv
bFRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERjUxOEI5N0I5
QjAwMzkwNjJGIC8qIFN5bWJvbFRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFN5bWJvbFRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREY3
MThCOTdCOUIwMDM5MDYyRiAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRGODE4Qjk3QjlC
MDAzOTA2MkYgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREY5MThCOTdCOUIwMDM5MDYyRiAvKiBSZXN0
cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTMxMDEyREZBMThCOTdCOUIwMDM5MDYyRiAvKiBSZXN0cmljdFZlcnRleFNo
YWRlclRpbWluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXN0cmljdFZl
cnRleFNoYWRlclRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRG
QjE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckVTU0wuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckVTU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkzMTAxMkRGQzE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckVTU0wu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckVTU0wuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERkQxOEI5N0I5QjAwMzkwNjJGIC8qIFRy
YW5zbGF0b3JHTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRy
YW5zbGF0b3JHTFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERkUx
OEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JHTFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JHTFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTMxMDEyREZGMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9ySExTTC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdG9ySExTTC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyRTAwMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFu
c2xhdG9ySExTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xhdG9y
SExTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkUwMTE4Qjk3QjlCMDAz
OTA2MkYgLyogVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJFMDIxOEI5N0I5QjAwMzkwNjJG
IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBVbmZvbGRTaG9ydENpcmN1aXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkzMTAxMkUwMzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkUwNDE4Qjk3QjlCMDAzOTA2MkYgLyogVW5m
b2xkU2hvcnRDaXJjdWl0QVNULmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTMxMDEyRTA1MThCOTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0QVNULmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyRTA2MThCOTdCOUIwMDM5MDYyRiAv
KiBVbmlmb3JtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuaWZv
cm0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkUwNzE4Qjk3QjlCMDAz
OTA2MkYgLyogVW5pZm9ybS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmlm
b3JtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyRTA4MThCOTdCOUIwMDM5
MDYyRiAvKiB1dGlsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHV0
aWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkUwOTE4Qjk3QjlCMDAz
OTA2MkYgLyogdXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1dGlsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyRTBBMThCOTdCOUIwMDM5MDYyRiAv
KiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkzMTAxMkUwQjE4Qjk3QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYWxpZGF0ZUxpbWl0YXRpb25zLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyRTBDMThCOTdCOUIwMDM5MDYyRiAvKiBW
YXJpYWJsZUluZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFy
aWFibGVJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJFMEQxOEI5
N0I5QjAwMzkwNjJGIC8qIFZhcmlhYmxlSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBWYXJpYWJsZUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEw
MTJFMEUxOEI5N0I5QjAwMzkwNjJGIC8qIFZhcmlhYmxlUGFja2VyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZhcmlhYmxlUGFja2VyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJFMEYxOEI5N0I5QjAwMzkwNjJGIC8qIFZhcmlhYmxlUGFj
a2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhcmlhYmxlUGFja2VyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyRTEwMThCOTdCOUIwMDM5MDYyRiAv
KiBWZXJzaW9uR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBW
ZXJzaW9uR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyRTExMThC
OTdCOUIwMDM5MDYyRiAvKiBWZXJzaW9uR0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBWZXJzaW9uR0xTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAx
MkU4MTE4Qjk3Qzg2MDAzOTA2MkYgLyogY29tcGlsZXJkZWJ1Zy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBjb21waWxlcmRlYnVnLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMzEwMTJFODIxOEI5N0M4NjAwMzkwNjJGIC8qIGNvbXBpbGVyZGVidWcu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY29tcGlsZXJkZWJ1Zy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTJCREIwOTE1RkVDOTFFMDA5N0VCQzcgLyogQU5H
TEUucGxpc3QgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnBsaXN0LnhtbDsgcGF0aCA9IEFOR0xFLnBsaXN0OyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTJCREIwQTE1RkVDQTNBMDA5N0VCQzcgLyog
QU5HTEUudHh0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEFOR0xFLnR4dDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDQzQTNFMTUxMkVDRjZDQzAwMDRGOUQ3IC8qIGlPUy54Y2NvbmZp
ZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBpT1MueGNjb25maWc7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5OTUxQzAyMTRCN0FBQjMwMDYwRTk2RSAvKiBsZW5ndGhf
bGltaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGxlbmd0aF9saW1pdHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDk5NTFDMDUxNEI3QUFENzAwNjBFOTZF
IC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNDk5NTFDMDYxNEI3QUFEODAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlv
bkVtdWxhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1aWx0SW5GdW5j
dGlvbkVtdWxhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVDQjEzRkQyMTc5
REIzRkQwMDFGODUxRCAvKiBEZXRlY3RDYWxsRGVwdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRGV0ZWN0Q2FsbERlcHRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNUNCMTNGRDMxNzlEQjNGRDAwMUY4NTFEIC8qIERldGVjdENhbGxEZXB0aC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXRlY3RDYWxsRGVwdGguaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUQ3QzU5QzUxMjA4QzY4QjAwMUM4NzNFIC8qIEFO
R0xFLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IEFOR0xFLnhjY29u
ZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RDdDNTlDNjEyMDhDNjhCMDAxQzg3
M0UgLyogQmFzZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBCYXNl
LnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RDdDNTlDNzEyMDhDNjhC
MDAxQzg3M0UgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZp
ZzsgcGF0aCA9IERlYnVnUmVsZWFzZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzIzMDlBNTUxODNDMjdEQjAwMzcwQjkzIC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUb2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
MjMwOUE1NzE4M0MyN0YxMDAzNzBCOTMgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBFeHByZXNzaW9uUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNzIzMDlBNTkxODNDMjg0RTAwMzcwQjkzIC8qIGdsc2xhbmdfbGV4LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IGdsc2xhbmdfbGV4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNzIzMDlBNUExODNDMjg0RTAwMzcwQjkzIC8qIGdsc2xhbmdfdGFiLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IGdsc2xhbmdfdGFiLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NzIzMDlBNUIxODNDMjg0RTAwMzcwQjkzIC8qIGdsc2xhbmdfdGFiLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IGdsc2xhbmdfdGFiLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcyMzA5QTVGMTgz
QzJBNjQwMDM3MEI5MyAvKiBUcmFuc2xhdG9ySExTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBU
cmFuc2xhdG9ySExTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcyMzA5QTYw
MTgzQzJBNjQwMDM3MEI5MyAvKiBUcmFuc2xhdG9ySExTTC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFu
c2xhdG9ySExTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3MjMwOUE2MzE4M0My
QUU1MDAzNzBCOTMgLyogT3V0cHV0SExTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBPdXRwdXRITFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NzIzMDlBNjQxODNDMkFFNTAwMzcwQjkzIC8qIE91dHB1dEhMU0wuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gT3V0cHV0SExTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk3MjMwOUE2NzE4M0MyQkU4MDAzNzBCOTMgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXRlY3REaXNjb250aW51aXR5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzIzMDlBNjgxODNDMkJFODAwMzcw
QjkzIC8qIERldGVjdERpc2NvbnRpbnVpdHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGV0ZWN0RGlzY29udGludWl0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk3MjMwOUE2OTE4M0MyQkU4MDAzNzBCOTMgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcyMzA5QTZBMTgzQzJCRTgwMDM3MEI5MyAv
KiBVbmZvbGRTaG9ydENpcmN1aXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VW5mb2xkU2hvcnRDaXJjdWl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcyMzA5
QTZCMTgzQzJCRTgwMDM3MEI5MyAvKiBVbmlmb3JtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFVuaWZvcm0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk3MjMwOUE2QzE4M0MyQkU4MDAzNzBCOTMgLyogVW5pZm9ybS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBVbmlmb3JtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTcyNjUwOTMwMTgzQUEyMTMwMEQyOEI0OCAvKiBDb2RlR2VuLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENvZGVHZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3MjY1MDkzMTE4
M0FBMjQ2MDBEMjhCNDggLyogSW5pdGlhbGl6ZUdMUG9zaXRpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSW5pdGlhbGl6ZUdMUG9zaXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk3MjY1MDkzMjE4M0FBMjQ2MDBEMjhCNDggLyogSW5pdGlhbGl6ZUdMUG9zaXRpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZUdMUG9zaXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNzI2NTA5MzMxODNBQTI4OTAwRDI4QjQ4IC8qIE5vZGVTZWFyY2guaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTm9kZVNlYXJjaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3
MjY1MDkzNDE4M0FBM0IyMDBEMjhCNDggLyogUGFyc2VDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFBhcnNlQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcy
NjUwOTM1MTgzQUEzQjIwMEQyOEI0OCAvKiBQYXJzZUNvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGFyc2VDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcyNjUwOTM2MTgz
QUEzQzYwMEQyOEI0OCAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNzI2NTA5MzcxODNBQTNDNjAwRDI4QjQ4IC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBVbmZvbGRTaG9ydENpcmN1aXRBU1QuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJOTBEOUIwRjkxMkUxMURDQjAwMkQ0MjU1IC8qIENvbXBpbGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBpbGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgdXNlc1RhYnMgPSAwOyB9OwotCQk5MEQ5QjBGQTEyRTExRENCMDAy
RDQyNTUgLyogRXh0ZW5zaW9uQmVoYXZpb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRXh0ZW5zaW9uQmVoYXZpb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
OTBEOUIwRkUxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gZ2xzbGFuZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5
MEQ5QjEwMDEyRTExRENCMDAyRDQyNTUgLyogU2VhcmNoU3ltYm9sLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlYXJjaFN5bWJvbC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTkwRDlCMTAxMTJFMTFEQ0IwMDJENDI1NSAvKiBTZWFyY2hTeW1ib2wu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VhcmNoU3ltYm9sLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkwRDlCMTBCMTJFMTFERDYwMDJENDI1NSAvKiB1dGls
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHV0aWwuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5MEQ5QjEwQzEyRTExREQ2MDAyRDQyNTUgLyogdXRp
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1dGlsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTkwRDlCMTBEMTJFMTFERDYwMDJENDI1NSAvKiBWYWxpZGF0ZUxp
bWl0YXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZhbGlk
YXRlTGltaXRhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5MEQ5QjEw
RTEyRTExREQ2MDAyRDQyNTUgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBWYWxpZGF0ZUxpbWl0YXRpb25zLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTkwRDlCMTBGMTJFMTFERDYwMDJENDI1NSAvKiBWYXJpYWJsZUluZm8u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFyaWFibGVJbmZvLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTBEOUIxMTAxMkUxMURENjAwMkQ0MjU1
IC8qIFZhcmlhYmxlSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYXJp
YWJsZUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTBEOUIxMTExMkUxMURE
NjAwMkQ0MjU1IC8qIFZlcnNpb25HTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFZlcnNpb25HTFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
OTBEOUIxMTIxMkUxMURENjAwMkQ0MjU1IC8qIFZlcnNpb25HTFNMLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFZlcnNpb25HTFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUEwOEMzQ0RBMTZENkNCNjEwMDNGMEI4MyAvKiBBcnJheUJvdW5kc0NsYW1wZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQXJyYXlCb3VuZHNDbGFtcGVy
LmNwcDsgcGF0aCA9IHNyYy90aGlyZF9wYXJ0eS9jb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMDhDM0NEQjE2RDZDQjYxMDAzRjBC
ODMgLyogQXJyYXlCb3VuZHNDbGFtcGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEFycmF5Qm91bmRzQ2xhbXBlci5oOyBwYXRoID0gc3JjL3RoaXJkX3BhcnR5L2NvbXBpbGVy
L0FycmF5Qm91bmRzQ2xhbXBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMEFB
QkUyQTEzQUZFODEwMDBGMkVCRDEgLyogRm9yTG9vcFVucm9sbC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb3JMb29wVW5yb2xsLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQTBBQUJFMkIxM0FGRTgxMDAwRjJFQkQxIC8qIEZvckxvb3BVbnJvbGwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9yTG9vcFVucm9sbC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMEFBQkUyRTEzQUZFODMwMDBGMkVCRDEgLyogTWFw
TG9uZ1ZhcmlhYmxlTmFtZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlBMEFBQkUyRjEzQUZFODMwMDBGMkVCRDEgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTBBQUJFMzIxM0FGRTg0NzAwRjJFQkQxIC8qIE91
dHB1dEdMU0xCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE91
dHB1dEdMU0xCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTBBQUJFMzMx
M0FGRTg0NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE91dHB1dEdMU0xCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUEwQUFCRTQyMTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE91dHB1dEVTU0wuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlBMEFBQkU0MzEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPdXRwdXRFU1NMLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEwQUFCRTQ2MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xh
dG9yRVNTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xh
dG9yRVNTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEwQUFCRTQ3MTNBRkU5
NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUcmFuc2xhdG9yRVNTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
MjY0Rjg5MzE2OTc0REVEMDA2RkFBNUEgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpYWdub3N0aWNzQmFzZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEyNjRGODk0MTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9z
dGljc0Jhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlhZ25vc3RpY3NC
YXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEyNjRGODk1MTY5NzRERUQwMDZG
QUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yNTYsNjcgKzMzOSw4IEBACiAJCUEyNjRGOEE4MTY5NzRERUQwMDZGQUE1
QSAvKiBUb2tlbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUb2tl
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEyNjRGOEE5MTY5NzRERUQwMDZG
QUE1QSAvKiBUb2tlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUb2tlbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMjY0RjhBQjE2OTc0REVEMDA2RkFBNUEg
LyogVG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRva2VuaXpl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY0RjhDNTE2OTc0RTJBMDA2RkFB
NUEgLyogSGFzaE5hbWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hO
YW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY0RjhDNjE2OTc0RTJBMDA2
RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVmFyaWFibGVQYWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlBMjY0RjhDNzE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFibGVQYWNrZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTI2NEY4Q0MxNjk3NjJBQTAwNkZBQTVBIC8qIGtocnBsYXRmb3JtLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGtocnBsYXRmb3JtLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0IwMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9z
dGljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaWFnbm9zdGlj
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0IxMTU5QzIxQjEwMDM5
ODUzOSAvKiBEaWFnbm9zdGljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
aWFnbm9zdGljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdCMjE1OUMy
MUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVIYW5kbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQTI2NTY3QjMxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdCNDE1OUMyMUIxMDAzOTg1MzkgLyog
SW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQTI2NTY3QjUxNTlDMjFCMTAwMzk4NTM5IC8qIFByYWdtYS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQcmFnbWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQTI2NTY3QjYxNTlDMjFCMTAwMzk4NTM5IC8qIFJlbmFtZUZ1bmN0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmFtZUZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2ODJEMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5
R3JhcGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5j
eUdyYXBoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY4MkUxNTlDMjNF
MTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEZXBlbmRlbmN5R3JhcGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QTI2NTY4MkYxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2ODMwMTU5QzIzRTEwMDM5
ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQTI2NTY4MzExNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3Jh
cGhPdXRwdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjgzMjE1OUMy
M0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaE91dHB1dC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlBMjY1NjgzMzE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBo
VHJhdmVyc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5k
ZW5jeUdyYXBoVHJhdmVyc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1
NjgzNTE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXN0cmljdEZyYWdtZW50U2hh
ZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY4MzYxNTlD
MjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjgzNzE1OUMyM0UxMDAzOTg1MzkgLyog
UmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlBMjY1NjgzODE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0
ZXhTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIz
OUQwRDExMjAwRjBFMzAwMDg4RTY5IC8qIGxpYkFOR0xFLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0g
MDsgcGF0aCA9IGxpYkFOR0xFLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07
Ci0JCUZCMzlEMjIxMTIwMEYzNUEwMDA4OEU2OSAvKiBCYXNlVHlwZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmls
ZUVuY29kaW5nID0gNDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDIyNDEyMDBGMzVBMDAwODhFNjkgLyogQ29tbW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZp
bGVFbmNvZGluZyA9IDQ7IHBhdGggPSBDb21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQyMjUxMjAwRjM1QTAwMDg4RTY5IC8qIENvbnN0YW50VW5pb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
aDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IENvbnN0YW50VW5pb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyMjYxMjAwRjM1QTAwMDg4RTY5IC8qIGRlYnVnLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGRlYnVnLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyMjcxMjAwRjM1QTAwMDg4RTY5IC8qIGRlYnVnLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGRlYnVnLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUZCMzlEMjJBMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZvU2luay5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjJCMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZv
U2luay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gSW5mb1NpbmsuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyMkMxMjAwRjM1QTAwMDg4RTY5IC8qIElu
aXRpYWxpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlh
bGl6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjJEMTIwMEYzNUEw
MDA4OEU2OSAvKiBJbml0aWFsaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGgg
PSBJbml0aWFsaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjJFMTIw
MEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemVEbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDIyRjEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gSW5pdGlhbGl6ZURsbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDIzMDEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6
ZUdsb2JhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IEluaXRpYWxpemVH
bG9iYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjMxMTIwMEYzNUEw
MDA4OEU2OSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGlu
ZyA9IDQ7IHBhdGggPSBJbml0aWFsaXplUGFyc2VDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUZCMzlEMjMyMTIwMEYzNUEwMDA4OEU2OSAvKiBJbnRlcm1lZGlhdGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZXJtZWRpYXRlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyMzMxMjAwRjM1QTAwMDg4RTY5IC8q
IGludGVybWVkaWF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0Rmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gaW50ZXJt
ZWRpYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjM0MTIwMEYzNUEw
MDA4OEU2OSAvKiBpbnRlcm1PdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gaW50ZXJtT3V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQy
MzUxMjAwRjM1QTAwMDg4RTY5IC8qIEludGVybVRyYXZlcnNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVybVRyYXZlcnNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJRkIzOUQyMzYxMjAwRjM1QTAwMDg4RTY5IC8qIGxvY2FsaW50ZXJtZWRp
YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBsb2NhbGludGVybWVkaWF0
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDIzNzEyMDBGMzVBMDAwODhF
NjkgLyogTU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gTU1hcC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDIzODEyMDBGMzVBMDAwODhFNjkgLyog
b3NpbmNsdWRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG9zaW5jbHVkZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDIzOTEyMDBGMzVBMDAwODhFNjkg
Lyogb3Nzb3VyY2VfcG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gb3Nzb3VyY2VfcG9zaXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5
RDIzQTEyMDBGMzVBMDAwODhFNjkgLyogb3Nzb3VyY2Vfd2luLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IG9zc291cmNlX3dpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUZCMzlEMjNCMTIwMEYzNUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE91dHB1dEdMU0wuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDIzQzEyMDBGMzVBMDAwODhFNjkgLyogT3V0
cHV0R0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gT3V0cHV0R0xTTC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDIzRjEyMDBGMzVBMDAwODhFNjkg
LyogcGFyc2VDb25zdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBw
YXJzZUNvbnN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyNDIxMjAw
RjM1QTAwMDg4RTY5IC8qIFBvb2xBbGxvYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBQb29sQWxsb2MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
QjM5RDI0MzEyMDBGMzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNv
ZGluZyA9IDQ7IHBhdGggPSBQb29sQWxsb2MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJRkIzOUQyNTYxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllckFsaXZlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyNTcxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxp
ZmllckFsaXZlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBRdWFsaWZpZXJB
bGl2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI1ODEyMDBGMzVBMDAw
ODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZW1vdmVUcmVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQy
NTkxMjAwRjM1QTAwMDg4RTY5IC8qIFJlbW92ZVRyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5n
ID0gNDsgcGF0aCA9IFJlbW92ZVRyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
RkIzOUQyNUExMjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhZGVyTGFuZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUZCMzlEMjVCMTIwMEYzNUEwMDA4OEU2OSAvKiBTaEhhbmRsZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gU2hIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJRkIzOUQyNUMxMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bWJvbFRhYmxlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyNUQxMjAwRjM1QTAwMDg4RTY5IC8q
IFN5bWJvbFRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBTeW1ib2xU
YWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI2ODEyMDBGMzVBMDAw
ODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVHJhbnNsYXRvckdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlGQjM5RDI2OTEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsg
ZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFRyYW5zbGF0b3JHTFNMLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUZCMzlEMjZDMTIwMEYzNUEwMDA4OEU2OSAvKiBUeXBlcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkIzOUQyQkYxMjAwRjNFNjAwMDg4RTY5IC8qIFNoYWRlckxhbmcuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFNoYWRlckxhbmcuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIC8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIApAQCAt
MzMxLDYgKzM1NSwxMzcgQEAKIC8qIEVuZCBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9u
ICovCiAKIC8qIEJlZ2luIFBCWEdyb3VwIHNlY3Rpb24gKi8KKwkJMzEwMTJEOUYxOEI5N0I5QjAw
MzkwNjJGIC8qIHRyYW5zbGF0b3IgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxk
cmVuID0gKAorCQkJCTMxMDEyREE5MThCOTdCOUIwMDM5MDYyRiAvKiBkZXBncmFwaCAqLywKKwkJ
CQkzMTAxMkRGNjE4Qjk3QjlCMDAzOTA2MkYgLyogdGltaW5nICovLAorCQkJCTMxMDEyREEwMThC
OTdCOUIwMDM5MDYyRiAvKiBCYXNlVHlwZXMuaCAqLywKKwkJCQkzMTAxMkRBMTE4Qjk3QjlCMDAz
OTA2MkYgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICovLAorCQkJCTMxMDEyREEyMThC
OTdCOUIwMDM5MDYyRiAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oICovLAorCQkJCTMxMDEy
REEzMThCOTdCOUIwMDM5MDYyRiAvKiBDb2RlR2VuLmNwcCAqLywKKwkJCQkzMTAxMkRBNDE4Qjk3
QjlCMDAzOTA2MkYgLyogQ29tbW9uLmggKi8sCisJCQkJMzEwMTJFODExOEI5N0M4NjAwMzkwNjJG
IC8qIGNvbXBpbGVyZGVidWcuY3BwICovLAorCQkJCTMxMDEyRTgyMThCOTdDODYwMDM5MDYyRiAv
KiBjb21waWxlcmRlYnVnLmggKi8sCisJCQkJMzEwMTJEQTUxOEI5N0I5QjAwMzkwNjJGIC8qIENv
bXBpbGVyLmNwcCAqLywKKwkJCQkzMTAxMkRBODE4Qjk3QjlCMDAzOTA2MkYgLyogQ29uc3RhbnRV
bmlvbi5oICovLAorCQkJCTMxMDEyREIxMThCOTdCOUIwMDM5MDYyRiAvKiBEZXRlY3RDYWxsRGVw
dGguY3BwICovLAorCQkJCTMxMDEyREIyMThCOTdCOUIwMDM5MDYyRiAvKiBEZXRlY3RDYWxsRGVw
dGguaCAqLywKKwkJCQkzMTAxMkRCMzE4Qjk3QjlCMDAzOTA2MkYgLyogRGV0ZWN0RGlzY29udGlu
dWl0eS5jcHAgKi8sCisJCQkJMzEwMTJEQjQxOEI5N0I5QjAwMzkwNjJGIC8qIERldGVjdERpc2Nv
bnRpbnVpdHkuaCAqLywKKwkJCQkzMTAxMkRCNTE4Qjk3QjlCMDAzOTA2MkYgLyogRGlhZ25vc3Rp
Y3MuY3BwICovLAorCQkJCTMxMDEyREI2MThCOTdCOUIwMDM5MDYyRiAvKiBEaWFnbm9zdGljcy5o
ICovLAorCQkJCTMxMDEyREI3MThCOTdCOUIwMDM5MDYyRiAvKiBEaXJlY3RpdmVIYW5kbGVyLmNw
cCAqLywKKwkJCQkzMTAxMkRCODE4Qjk3QjlCMDAzOTA2MkYgLyogRGlyZWN0aXZlSGFuZGxlci5o
ICovLAorCQkJCTMxMDEyREI5MThCOTdCOUIwMDM5MDYyRiAvKiBFeHRlbnNpb25CZWhhdmlvci5o
ICovLAorCQkJCTMxMDEyREJBMThCOTdCOUIwMDM5MDYyRiAvKiBGb3JMb29wVW5yb2xsLmNwcCAq
LywKKwkJCQkzMTAxMkRCQjE4Qjk3QjlCMDAzOTA2MkYgLyogRm9yTG9vcFVucm9sbC5oICovLAor
CQkJCTMxMDEyREJEMThCOTdCOUIwMDM5MDYyRiAvKiBnbHNsYW5nLmggKi8sCisJCQkJMzEwMTJE
QzAxOEI5N0I5QjAwMzkwNjJGIC8qIGdsc2xhbmdfbGV4LmNwcCAqLywKKwkJCQkzMTAxMkRDMTE4
Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZ190YWIuY3BwICovLAorCQkJCTMxMDEyREMyMThCOTdC
OUIwMDM5MDYyRiAvKiBnbHNsYW5nX3RhYi5oICovLAorCQkJCTMxMDEyREMzMThCOTdCOUIwMDM5
MDYyRiAvKiBIYXNoTmFtZXMuaCAqLywKKwkJCQkzMTAxMkRDNDE4Qjk3QjlCMDAzOTA2MkYgLyog
SW5mb1NpbmsuY3BwICovLAorCQkJCTMxMDEyREM1MThCOTdCOUIwMDM5MDYyRiAvKiBJbmZvU2lu
ay5oICovLAorCQkJCTMxMDEyREM2MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplLmNwcCAq
LywKKwkJCQkzMTAxMkRDNzE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZS5oICovLAorCQkJ
CTMxMDEyREM4MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplRGxsLmNwcCAqLywKKwkJCQkz
MTAxMkRDOTE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZURsbC5oICovLAorCQkJCTMxMDEy
RENBMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplR2xvYmFscy5oICovLAorCQkJCTMxMDEy
RENCMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLywKKwkJ
CQkzMTAxMkRDQzE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICov
LAorCQkJCTMxMDEyRENEMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplVmFyaWFibGVzLmNw
cCAqLywKKwkJCQkzMTAxMkRDRTE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZVZhcmlhYmxl
cy5oICovLAorCQkJCTMxMDEyRENGMThCOTdCOUIwMDM5MDYyRiAvKiBJbnRlcm1lZGlhdGUuY3Bw
ICovLAorCQkJCTMxMDEyREQwMThCOTdCOUIwMDM5MDYyRiAvKiBpbnRlcm1lZGlhdGUuaCAqLywK
KwkJCQkzMTAxMkREMTE4Qjk3QjlCMDAzOTA2MkYgLyogaW50ZXJtT3V0LmNwcCAqLywKKwkJCQkz
MTAxMkREMjE4Qjk3QjlCMDAzOTA2MkYgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovLAorCQkJCTMx
MDEyREQzMThCOTdCOUIwMDM5MDYyRiAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovLAorCQkJCTMx
MDEyREQ0MThCOTdCOUIwMDM5MDYyRiAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi8sCisJ
CQkJMzEwMTJERDUxOEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmggKi8s
CisJCQkJMzEwMTJERDYxOEI5N0I5QjAwMzkwNjJGIC8qIE1NYXAuaCAqLywKKwkJCQkzMTAxMkRE
NzE4Qjk3QjlCMDAzOTA2MkYgLyogTm9kZVNlYXJjaC5oICovLAorCQkJCTMxMDEyREQ4MThCOTdC
OUIwMDM5MDYyRiAvKiBvc2luY2x1ZGUuaCAqLywKKwkJCQkzMTAxMkREOTE4Qjk3QjlCMDAzOTA2
MkYgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovLAorCQkJCTMxMDEyRERCMThCOTdCOUIwMDM5MDYy
RiAvKiBPdXRwdXRFU1NMLmNwcCAqLywKKwkJCQkzMTAxMkREQzE4Qjk3QjlCMDAzOTA2MkYgLyog
T3V0cHV0RVNTTC5oICovLAorCQkJCTMxMDEyREREMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRH
TFNMLmNwcCAqLywKKwkJCQkzMTAxMkRERTE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0R0xTTC5o
ICovLAorCQkJCTMxMDEyRERGMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRHTFNMQmFzZS5jcHAg
Ki8sCisJCQkJMzEwMTJERTAxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEdMU0xCYXNlLmggKi8s
CisJCQkJMzEwMTJERTExOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEhMU0wuY3BwICovLAorCQkJ
CTMxMDEyREUyMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRITFNMLmggKi8sCisJCQkJMzEwMTJE
RTMxOEI5N0I5QjAwMzkwNjJGIC8qIHBhcnNlQ29uc3QuY3BwICovLAorCQkJCTMxMDEyREU0MThC
OTdCOUIwMDM5MDYyRiAvKiBQYXJzZUNvbnRleHQuY3BwICovLAorCQkJCTMxMDEyREU1MThCOTdC
OUIwMDM5MDYyRiAvKiBQYXJzZUNvbnRleHQuaCAqLywKKwkJCQkzMTAxMkRFNjE4Qjk3QjlCMDAz
OTA2MkYgLyogUG9vbEFsbG9jLmNwcCAqLywKKwkJCQkzMTAxMkRFNzE4Qjk3QjlCMDAzOTA2MkYg
LyogUG9vbEFsbG9jLmggKi8sCisJCQkJMzEwMTJERTgxOEI5N0I5QjAwMzkwNjJGIC8qIFByYWdt
YS5oICovLAorCQkJCTMxMDEyREU5MThCOTdCOUIwMDM5MDYyRiAvKiBRdWFsaWZpZXJBbGl2ZS5j
cHAgKi8sCisJCQkJMzEwMTJERUExOEI5N0I5QjAwMzkwNjJGIC8qIFF1YWxpZmllckFsaXZlLmgg
Ki8sCisJCQkJMzEwMTJERUIxOEI5N0I5QjAwMzkwNjJGIC8qIFJlbW92ZVRyZWUuY3BwICovLAor
CQkJCTMxMDEyREVDMThCOTdCOUIwMDM5MDYyRiAvKiBSZW1vdmVUcmVlLmggKi8sCisJCQkJMzEw
MTJERUQxOEI5N0I5QjAwMzkwNjJGIC8qIFJlbmFtZUZ1bmN0aW9uLmggKi8sCisJCQkJMzEwMTJE
RUUxOEI5N0I5QjAwMzkwNjJGIC8qIFJld3JpdGVFbHNlQmxvY2tzLmNwcCAqLywKKwkJCQkzMTAx
MkRFRjE4Qjk3QjlCMDAzOTA2MkYgLyogUmV3cml0ZUVsc2VCbG9ja3MuaCAqLywKKwkJCQkzMTAx
MkRGMDE4Qjk3QjlCMDAzOTA2MkYgLyogU2VhcmNoU3ltYm9sLmNwcCAqLywKKwkJCQkzMTAxMkRG
MTE4Qjk3QjlCMDAzOTA2MkYgLyogU2VhcmNoU3ltYm9sLmggKi8sCisJCQkJMzEwMTJERjIxOEI5
N0I5QjAwMzkwNjJGIC8qIFNoYWRlckxhbmcuY3BwICovLAorCQkJCTMxMDEyREYzMThCOTdCOUIw
MDM5MDYyRiAvKiBTaEhhbmRsZS5oICovLAorCQkJCTMxMDEyREY0MThCOTdCOUIwMDM5MDYyRiAv
KiBTeW1ib2xUYWJsZS5jcHAgKi8sCisJCQkJMzEwMTJERjUxOEI5N0I5QjAwMzkwNjJGIC8qIFN5
bWJvbFRhYmxlLmggKi8sCisJCQkJMzEwMTJERkIxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0
b3JFU1NMLmNwcCAqLywKKwkJCQkzMTAxMkRGQzE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRv
ckVTU0wuaCAqLywKKwkJCQkzMTAxMkRGRDE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckdM
U0wuY3BwICovLAorCQkJCTMxMDEyREZFMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9yR0xT
TC5oICovLAorCQkJCTMxMDEyREZGMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9ySExTTC5j
cHAgKi8sCisJCQkJMzEwMTJFMDAxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JITFNMLmgg
Ki8sCisJCQkJMzEwMTJFMDExOEI5N0I5QjAwMzkwNjJGIC8qIFR5cGVzLmggKi8sCisJCQkJMzEw
MTJFMDIxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8sCisJCQkJ
MzEwMTJFMDMxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovLAorCQkJ
CTMxMDEyRTA0MThCOTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwICov
LAorCQkJCTMxMDEyRTA1MThCOTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1Qu
aCAqLywKKwkJCQkzMTAxMkUwNjE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5jcHAgKi8sCisJ
CQkJMzEwMTJFMDcxOEI5N0I5QjAwMzkwNjJGIC8qIFVuaWZvcm0uaCAqLywKKwkJCQkzMTAxMkUw
ODE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5jcHAgKi8sCisJCQkJMzEwMTJFMDkxOEI5N0I5QjAw
MzkwNjJGIC8qIHV0aWwuaCAqLywKKwkJCQkzMTAxMkUwQTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFs
aWRhdGVMaW1pdGF0aW9ucy5jcHAgKi8sCisJCQkJMzEwMTJFMEIxOEI5N0I5QjAwMzkwNjJGIC8q
IFZhbGlkYXRlTGltaXRhdGlvbnMuaCAqLywKKwkJCQkzMTAxMkUwQzE4Qjk3QjlCMDAzOTA2MkYg
LyogVmFyaWFibGVJbmZvLmNwcCAqLywKKwkJCQkzMTAxMkUwRDE4Qjk3QjlCMDAzOTA2MkYgLyog
VmFyaWFibGVJbmZvLmggKi8sCisJCQkJMzEwMTJFMEUxOEI5N0I5QjAwMzkwNjJGIC8qIFZhcmlh
YmxlUGFja2VyLmNwcCAqLywKKwkJCQkzMTAxMkUwRjE4Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFi
bGVQYWNrZXIuaCAqLywKKwkJCQkzMTAxMkUxMDE4Qjk3QjlCMDAzOTA2MkYgLyogVmVyc2lvbkdM
U0wuY3BwICovLAorCQkJCTMxMDEyRTExMThCOTdCOUIwMDM5MDYyRiAvKiBWZXJzaW9uR0xTTC5o
ICovLAorCQkJKTsKKwkJCXBhdGggPSB0cmFuc2xhdG9yOworCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKKwkJfTsKKwkJMzEwMTJEQTkxOEI5N0I5QjAwMzkwNjJGIC8qIGRlcGdyYXBoICovID0g
eworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkzMTAxMkRBQTE4Qjk3
QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLywKKwkJCQkzMTAxMkRBQjE4Qjk3
QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8sCisJCQkJMzEwMTJEQUMxOEI5N0I5
QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovLAorCQkJCTMxMDEyREFE
MThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8sCisJCQkJMzEw
MTJEQUUxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8sCisJ
CQkJMzEwMTJEQUYxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICov
LAorCQkJCTMxMDEyREIwMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJz
ZS5jcHAgKi8sCisJCQkpOworCQkJcGF0aCA9IGRlcGdyYXBoOworCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKKwkJfTsKKwkJMzEwMTJERjYxOEI5N0I5QjAwMzkwNjJGIC8qIHRpbWluZyAqLyA9
IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMzEwMTJERjcxOEI5
N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJ
CTMxMDEyREY4MThCOTdCOUIwMDM5MDYyRiAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
LmggKi8sCisJCQkJMzEwMTJERjkxOEI5N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0VmVydGV4U2hh
ZGVyVGltaW5nLmNwcCAqLywKKwkJCQkzMTAxMkRGQTE4Qjk3QjlCMDAzOTA2MkYgLyogUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gdGltaW5nOworCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJMzEyQkRCMDcxNUZFQzhFNjAwOTdFQkM3
IC8qIG1pc2MgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAt
Mzc3LDMxICs1MzIsNiBAQAogCQkJcGF0aCA9IGluY2x1ZGUvS0hSOwogCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKIAkJfTsKLQkJQTI2NTY4MkMxNTlDMjNFMTAwMzk4NTM5IC8qIGRlcGdyYXBo
ICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQlBMjY1Njgy
RDE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLywKLQkJCQlBMjY1Njgy
RTE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8sCi0JCQkJQTI2NTY4MkYx
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovLAotCQkJCUEy
NjU2ODMwMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8sCi0J
CQkJQTI2NTY4MzExNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAg
Ki8sCi0JCQkJQTI2NTY4MzIxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1
dC5oICovLAotCQkJCUEyNjU2ODMzMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZS5jcHAgKi8sCi0JCQkpOwotCQkJcGF0aCA9IGRlcGdyYXBoOwotCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJQTI2NTY4MzQxNTlDMjNFMTAwMzk4NTM5IC8qIHRpbWlu
ZyAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJQTI2NTY4
MzUxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICov
LAotCQkJCUEyNjU2ODM2MTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVy
VGltaW5nLmggKi8sCi0JCQkJQTI2NTY4MzcxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nLmNwcCAqLywKLQkJCQlBMjY1NjgzODE1OUMyM0UxMDAzOTg1MzkgLyog
UmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLywKLQkJCSk7Ci0JCQlwYXRoID0gdGltaW5n
OwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKIAkJQTI5QjE1RTkxNjk3OEI3RDAw
MTExRDk3IC8qIGluY2x1ZGUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKApAQCAtNDQyLDEwNSArNTcyLDggQEAKIAkJRkIzOUQyMjAxMjAwRjM1QTAwMDg4RTY5IC8q
IGNvbXBpbGVyICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJ
CQlBMjY1NjgyQzE1OUMyM0UxMDAzOTg1MzkgLyogZGVwZ3JhcGggKi8sCisJCQkJMzEwMTJEOUYx
OEI5N0I5QjAwMzkwNjJGIC8qIHRyYW5zbGF0b3IgKi8sCiAJCQkJRkIzOUQyNDQxMjAwRjM1QTAw
MDg4RTY5IC8qIHByZXByb2Nlc3NvciAqLywKLQkJCQlBMjY1NjgzNDE1OUMyM0UxMDAzOTg1Mzkg
LyogdGltaW5nICovLAotCQkJCUZCMzlEMjIxMTIwMEYzNUEwMDA4OEU2OSAvKiBCYXNlVHlwZXMu
aCAqLywKLQkJCQk0OTk1MUMwNTE0QjdBQUQ3MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3IuY3BwICovLAotCQkJCTcyNjUwOTM2MTgzQUEzQzYwMEQyOEI0OCAvKiBVbmZvbGRTaG9y
dENpcmN1aXRBU1QuY3BwICovLAotCQkJCTcyNjUwOTM3MTgzQUEzQzYwMEQyOEI0OCAvKiBVbmZv
bGRTaG9ydENpcmN1aXRBU1QuaCAqLywKLQkJCQk3MjY1MDkzNDE4M0FBM0IyMDBEMjhCNDggLyog
UGFyc2VDb250ZXh0LmNwcCAqLywKLQkJCQk3MjMwOUE2NzE4M0MyQkU4MDAzNzBCOTMgLyogRGV0
ZWN0RGlzY29udGludWl0eS5jcHAgKi8sCi0JCQkJNzIzMDlBNjgxODNDMkJFODAwMzcwQjkzIC8q
IERldGVjdERpc2NvbnRpbnVpdHkuaCAqLywKLQkJCQk3MjMwOUE2OTE4M0MyQkU4MDAzNzBCOTMg
LyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCAqLywKLQkJCQk3MjMwOUE2QTE4M0MyQkU4MDAzNzBC
OTMgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmggKi8sCi0JCQkJNzIzMDlBNkIxODNDMkJFODAwMzcw
QjkzIC8qIFVuaWZvcm0uY3BwICovLAotCQkJCTcyMzA5QTZDMTgzQzJCRTgwMDM3MEI5MyAvKiBV
bmlmb3JtLmggKi8sCi0JCQkJNzI2NTA5MzUxODNBQTNCMjAwRDI4QjQ4IC8qIFBhcnNlQ29udGV4
dC5oICovLAotCQkJCTcyNjUwOTMzMTgzQUEyODkwMEQyOEI0OCAvKiBOb2RlU2VhcmNoLmggKi8s
Ci0JCQkJNzI2NTA5MzExODNBQTI0NjAwRDI4QjQ4IC8qIEluaXRpYWxpemVHTFBvc2l0aW9uLmNw
cCAqLywKLQkJCQk3MjY1MDkzMjE4M0FBMjQ2MDBEMjhCNDggLyogSW5pdGlhbGl6ZUdMUG9zaXRp
b24uaCAqLywKLQkJCQk0OTk1MUMwNjE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3IuaCAqLywKLQkJCQk3MjY1MDkzMDE4M0FBMjEzMDBEMjhCNDggLyogQ29kZUdlbi5j
cHAgKi8sCi0JCQkJRkIzOUQyMjQxMjAwRjM1QTAwMDg4RTY5IC8qIENvbW1vbi5oICovLAotCQkJ
CTkwRDlCMEY5MTJFMTFEQ0IwMDJENDI1NSAvKiBDb21waWxlci5jcHAgKi8sCi0JCQkJRkIzOUQy
MjUxMjAwRjM1QTAwMDg4RTY5IC8qIENvbnN0YW50VW5pb24uaCAqLywKLQkJCQlGQjM5RDIyNjEy
MDBGMzVBMDAwODhFNjkgLyogZGVidWcuY3BwICovLAotCQkJCUZCMzlEMjI3MTIwMEYzNUEwMDA4
OEU2OSAvKiBkZWJ1Zy5oICovLAotCQkJCTVDQjEzRkQzMTc5REIzRkQwMDFGODUxRCAvKiBEZXRl
Y3RDYWxsRGVwdGguaCAqLywKLQkJCQk1Q0IxM0ZEMjE3OURCM0ZEMDAxRjg1MUQgLyogRGV0ZWN0
Q2FsbERlcHRoLmNwcCAqLywKLQkJCQlBMjY1NjdCMDE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25v
c3RpY3MuY3BwICovLAotCQkJCUEyNjU2N0IxMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGlj
cy5oICovLAotCQkJCUEyNjU2N0IyMTU5QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVy
LmNwcCAqLywKLQkJCQlBMjY1NjdCMzE1OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxl
ci5oICovLAotCQkJCTkwRDlCMEZBMTJFMTFEQ0IwMDJENDI1NSAvKiBFeHRlbnNpb25CZWhhdmlv
ci5oICovLAotCQkJCUEwQUFCRTJBMTNBRkU4MTAwMEYyRUJEMSAvKiBGb3JMb29wVW5yb2xsLmNw
cCAqLywKLQkJCQlBMEFBQkUyQjEzQUZFODEwMDBGMkVCRDEgLyogRm9yTG9vcFVucm9sbC5oICov
LAotCQkJCTkwRDlCMEZFMTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nLmggKi8sCi0JCQkJNzIz
MDlBNTkxODNDMjg0RTAwMzcwQjkzIC8qIGdsc2xhbmdfbGV4LmNwcCAqLywKLQkJCQk3MjMwOUE1
QTE4M0MyODRFMDAzNzBCOTMgLyogZ2xzbGFuZ190YWIuY3BwICovLAotCQkJCTcyMzA5QTVCMTgz
QzI4NEUwMDM3MEI5MyAvKiBnbHNsYW5nX3RhYi5oICovLAotCQkJCUEyNjRGOEM1MTY5NzRFMkEw
MDZGQUE1QSAvKiBIYXNoTmFtZXMuaCAqLywKLQkJCQlGQjM5RDIyQTEyMDBGMzVBMDAwODhFNjkg
LyogSW5mb1NpbmsuY3BwICovLAotCQkJCUZCMzlEMjJCMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZv
U2luay5oICovLAotCQkJCUZCMzlEMjJDMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplLmNw
cCAqLywKLQkJCQlGQjM5RDIyRDEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZS5oICovLAot
CQkJCUZCMzlEMjJFMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLywKLQkJ
CQlGQjM5RDIyRjEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5oICovLAotCQkJCUZC
MzlEMjMwMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplR2xvYmFscy5oICovLAotCQkJCUEy
NjU2N0I0MTU5QzIxQjEwMDM5ODUzOSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLywK
LQkJCQlGQjM5RDIzMTEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5o
ICovLAotCQkJCUZCMzlEMjMyMTIwMEYzNUEwMDA4OEU2OSAvKiBJbnRlcm1lZGlhdGUuY3BwICov
LAotCQkJCUZCMzlEMjMzMTIwMEYzNUEwMDA4OEU2OSAvKiBpbnRlcm1lZGlhdGUuaCAqLywKLQkJ
CQlGQjM5RDIzNDEyMDBGMzVBMDAwODhFNjkgLyogaW50ZXJtT3V0LmNwcCAqLywKLQkJCQlGQjM5
RDIzNTEyMDBGMzVBMDAwODhFNjkgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovLAotCQkJCUZCMzlE
MjM2MTIwMEYzNUEwMDA4OEU2OSAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovLAotCQkJCUEwQUFC
RTJFMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi8sCi0JCQkJ
QTBBQUJFMkYxM0FGRTgzMDAwRjJFQkQxIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmggKi8sCi0J
CQkJRkIzOUQyMzcxMjAwRjM1QTAwMDg4RTY5IC8qIE1NYXAuaCAqLywKLQkJCQlGQjM5RDIzODEy
MDBGMzVBMDAwODhFNjkgLyogb3NpbmNsdWRlLmggKi8sCi0JCQkJRkIzOUQyMzkxMjAwRjM1QTAw
MDg4RTY5IC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLywKLQkJCQlGQjM5RDIzQTEyMDBGMzVBMDAw
ODhFNjkgLyogb3Nzb3VyY2Vfd2luLmNwcCAqLywKLQkJCQlBMEFBQkU0MjEzQUZFOTQ1MDBGMkVC
RDEgLyogT3V0cHV0RVNTTC5jcHAgKi8sCi0JCQkJQTBBQUJFNDMxM0FGRTk0NTAwRjJFQkQxIC8q
IE91dHB1dEVTU0wuaCAqLywKLQkJCQlGQjM5RDIzQjEyMDBGMzVBMDAwODhFNjkgLyogT3V0cHV0
R0xTTC5jcHAgKi8sCi0JCQkJRkIzOUQyM0MxMjAwRjM1QTAwMDg4RTY5IC8qIE91dHB1dEdMU0wu
aCAqLywKLQkJCQlBMEFBQkUzMjEzQUZFODQ3MDBGMkVCRDEgLyogT3V0cHV0R0xTTEJhc2UuY3Bw
ICovLAotCQkJCUEwQUFCRTMzMTNBRkU4NDcwMEYyRUJEMSAvKiBPdXRwdXRHTFNMQmFzZS5oICov
LAotCQkJCTcyMzA5QTYzMTgzQzJBRTUwMDM3MEI5MyAvKiBPdXRwdXRITFNMLmNwcCAqLywKLQkJ
CQk3MjMwOUE2NDE4M0MyQUU1MDAzNzBCOTMgLyogT3V0cHV0SExTTC5oICovLAotCQkJCUZCMzlE
MjNGMTIwMEYzNUEwMDA4OEU2OSAvKiBwYXJzZUNvbnN0LmNwcCAqLywKLQkJCQlGQjM5RDI0MjEy
MDBGMzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmNwcCAqLywKLQkJCQlGQjM5RDI0MzEyMDBGMzVB
MDAwODhFNjkgLyogUG9vbEFsbG9jLmggKi8sCi0JCQkJQTI2NTY3QjUxNTlDMjFCMTAwMzk4NTM5
IC8qIFByYWdtYS5oICovLAotCQkJCUZCMzlEMjU2MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZp
ZXJBbGl2ZS5jcHAgKi8sCi0JCQkJRkIzOUQyNTcxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmll
ckFsaXZlLmggKi8sCi0JCQkJRkIzOUQyNTgxMjAwRjM1QTAwMDg4RTY5IC8qIFJlbW92ZVRyZWUu
Y3BwICovLAotCQkJCUZCMzlEMjU5MTIwMEYzNUEwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmggKi8s
Ci0JCQkJQTI2NTY3QjYxNTlDMjFCMTAwMzk4NTM5IC8qIFJlbmFtZUZ1bmN0aW9uLmggKi8sCi0J
CQkJOTBEOUIxMDAxMkUxMURDQjAwMkQ0MjU1IC8qIFNlYXJjaFN5bWJvbC5jcHAgKi8sCi0JCQkJ
OTBEOUIxMDExMkUxMURDQjAwMkQ0MjU1IC8qIFNlYXJjaFN5bWJvbC5oICovLAotCQkJCUZCMzlE
MjVBMTIwMEYzNUEwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNwcCAqLywKLQkJCQlGQjM5RDI1QjEy
MDBGMzVBMDAwODhFNjkgLyogU2hIYW5kbGUuaCAqLywKLQkJCQlGQjM5RDI1QzEyMDBGMzVBMDAw
ODhFNjkgLyogU3ltYm9sVGFibGUuY3BwICovLAotCQkJCUZCMzlEMjVEMTIwMEYzNUEwMDA4OEU2
OSAvKiBTeW1ib2xUYWJsZS5oICovLAotCQkJCUEwQUFCRTQ2MTNBRkU5NjEwMEYyRUJEMSAvKiBU
cmFuc2xhdG9yRVNTTC5jcHAgKi8sCi0JCQkJQTBBQUJFNDcxM0FGRTk2MTAwRjJFQkQxIC8qIFRy
YW5zbGF0b3JFU1NMLmggKi8sCi0JCQkJRkIzOUQyNjgxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5z
bGF0b3JHTFNMLmNwcCAqLywKLQkJCQlGQjM5RDI2OTEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNs
YXRvckdMU0wuaCAqLywKLQkJCQk3MjMwOUE1RjE4M0MyQTY0MDAzNzBCOTMgLyogVHJhbnNsYXRv
ckhMU0wuY3BwICovLAotCQkJCTcyMzA5QTYwMTgzQzJBNjQwMDM3MEI5MyAvKiBUcmFuc2xhdG9y
SExTTC5oICovLAotCQkJCUZCMzlEMjZDMTIwMEYzNUEwMDA4OEU2OSAvKiBUeXBlcy5oICovLAot
CQkJCTkwRDlCMTBCMTJFMTFERDYwMDJENDI1NSAvKiB1dGlsLmNwcCAqLywKLQkJCQk5MEQ5QjEw
QzEyRTExREQ2MDAyRDQyNTUgLyogdXRpbC5oICovLAotCQkJCTkwRDlCMTBEMTJFMTFERDYwMDJE
NDI1NSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLywKLQkJCQk5MEQ5QjEwRTEyRTExREQ2
MDAyRDQyNTUgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5oICovLAotCQkJCTkwRDlCMTBGMTJFMTFE
RDYwMDJENDI1NSAvKiBWYXJpYWJsZUluZm8uY3BwICovLAotCQkJCTkwRDlCMTEwMTJFMTFERDYw
MDJENDI1NSAvKiBWYXJpYWJsZUluZm8uaCAqLywKLQkJCQlBMjY0RjhDNjE2OTc0RTJBMDA2RkFB
NUEgLyogVmFyaWFibGVQYWNrZXIuY3BwICovLAotCQkJCUEyNjRGOEM3MTY5NzRFMkEwMDZGQUE1
QSAvKiBWYXJpYWJsZVBhY2tlci5oICovLAotCQkJCTkwRDlCMTExMTJFMTFERDYwMDJENDI1NSAv
KiBWZXJzaW9uR0xTTC5jcHAgKi8sCi0JCQkJOTBEOUIxMTIxMkUxMURENjAwMkQ0MjU1IC8qIFZl
cnNpb25HTFNMLmggKi8sCiAJCQkpOwogCQkJbmFtZSA9IGNvbXBpbGVyOwogCQkJcGF0aCA9IHNy
Yy9jb21waWxlcjsKQEAgLTU0OSwxNCArNTgyLDEzIEBACiAJCUZCMzlEMjQ0MTIwMEYzNUEwMDA4
OEU2OSAvKiBwcmVwcm9jZXNzb3IgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAotCQkJCTcyMzA5QTU3MTgzQzI3RjEwMDM3MEI5MyAvKiBFeHByZXNzaW9uUGFyc2Vy
LmNwcCAqLywKLQkJCQk3MjMwOUE1NTE4M0MyN0RCMDAzNzBCOTMgLyogVG9rZW5pemVyLmNwcCAq
LywKIAkJCQlBMjY0Rjg5MzE2OTc0REVEMDA2RkFBNUEgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCAq
LywKIAkJCQlBMjY0Rjg5NDE2OTc0REVEMDA2RkFBNUEgLyogRGlhZ25vc3RpY3NCYXNlLmggKi8s
CiAJCQkJQTI2NEY4OTUxNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNlLmNw
cCAqLywKIAkJCQlBMjY0Rjg5NjE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0aXZlSGFuZGxlckJh
c2UuaCAqLywKIAkJCQlBMjY0Rjg5NzE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0aXZlUGFyc2Vy
LmNwcCAqLywKIAkJCQlBMjY0Rjg5ODE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0aXZlUGFyc2Vy
LmggKi8sCisJCQkJNzIzMDlBNTcxODNDMjdGMTAwMzcwQjkzIC8qIEV4cHJlc3Npb25QYXJzZXIu
Y3BwICovLAogCQkJCUEyNjRGODlBMTY5NzRERUQwMDZGQUE1QSAvKiBFeHByZXNzaW9uUGFyc2Vy
LmggKi8sCiAJCQkJQTI2NEY4OUIxNjk3NERFRDAwNkZBQTVBIC8qIElucHV0LmNwcCAqLywKIAkJ
CQlBMjY0Rjg5QzE2OTc0REVEMDA2RkFBNUEgLyogSW5wdXQuaCAqLywKQEAgLTU3NCw2ICs2MDYs
NyBAQAogCQkJCUEyNjRGOEE3MTY5NzRERUQwMDZGQUE1QSAvKiBTb3VyY2VMb2NhdGlvbi5oICov
LAogCQkJCUEyNjRGOEE4MTY5NzRERUQwMDZGQUE1QSAvKiBUb2tlbi5jcHAgKi8sCiAJCQkJQTI2
NEY4QTkxNjk3NERFRDAwNkZBQTVBIC8qIFRva2VuLmggKi8sCisJCQkJNzIzMDlBNTUxODNDMjdE
QjAwMzcwQjkzIC8qIFRva2VuaXplci5jcHAgKi8sCiAJCQkJQTI2NEY4QUIxNjk3NERFRDAwNkZB
QTVBIC8qIFRva2VuaXplci5oICovLAogCQkJKTsKIAkJCXBhdGggPSBwcmVwcm9jZXNzb3I7CkBA
IC01OTUsNTkgKzYyOCw4MSBAQAogCQkJaXNhID0gUEJYSGVhZGVyc0J1aWxkUGhhc2U7CiAJCQli
dWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJMzEwMTJFM0Mx
OEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUEwOEMzQ0REMTZENkNCNjEwMDNGMEI4MyAvKiBBcnJheUJvdW5kc0NsYW1wZXIuaCBp
biBIZWFkZXJzICovLAotCQkJCTQ5OTUxQzBBMTRCN0FBRDgwMDYwRTk2RSAvKiBCdWlsdEluRnVu
Y3Rpb25FbXVsYXRvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2NTY4M0ExNTlDMjNFMTAwMzk4
NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2NTY4M0MxNTlD
MjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAot
CQkJCUEyNjU2ODNFMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBp
biBIZWFkZXJzICovLAotCQkJCUEyNjU2N0JDMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGlj
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFM0UxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRp
YWxpemVWYXJpYWJsZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTE0MThCOTdCOUIwMDM5
MDYyRiAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEw
MTJFNTUxOEI5N0I5QjAwMzkwNjJGIC8qIFBhcnNlQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMzEwMTJFMkMxOEI5N0I5QjAwMzkwNjJGIC8qIEZvckxvb3BVbnJvbGwuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTMxMDEyRTZEMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9yR0xTTC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNDYxOEI5N0I5QjAwMzkwNjJGIC8qIE1NYXAuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTMxMDEyRTZCMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9yRVNT
TC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFMTYxOEI5N0I5QjAwMzkwNjJGIC8qIENvbW1v
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFMjAxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVu
ZGVuY3lHcmFwaE91dHB1dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFN0MxOEI5N0I5QjAw
MzkwNjJGIC8qIFZhcmlhYmxlSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNjExOEI5
N0I5QjAwMzkwNjJGIC8qIFNlYXJjaFN5bWJvbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJF
NDcxOEI5N0I5QjAwMzkwNjJGIC8qIE5vZGVTZWFyY2guaCBpbiBIZWFkZXJzICovLAogCQkJCUEy
NjRGOEFEMTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9zdGljc0Jhc2UuaCBpbiBIZWFkZXJzICov
LAotCQkJCUEyNjU2N0JFMTU5QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggaW4g
SGVhZGVycyAqLywKKwkJCQkzMTAxMkU0QzE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0RVNTTC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNUYxOEI5N0I5QjAwMzkwNjJGIC8qIFJld3JpdGVF
bHNlQmxvY2tzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhBRjE2OTc0REVEMDA2RkFBNUEg
LyogRGlyZWN0aXZlSGFuZGxlckJhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTdFMThC
OTdCOUIwMDM5MDYyRiAvKiBWYXJpYWJsZVBhY2tlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEw
MTJFNTAxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEdMU0xCYXNlLmggaW4gSGVhZGVycyAqLywK
KwkJCQkzMTAxMkU0MDE4Qjk3QjlCMDAzOTA2MkYgLyogaW50ZXJtZWRpYXRlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkzMTAxMkUyNTE4Qjk3QjlCMDAzOTA2MkYgLyogRGV0ZWN0RGlzY29udGludWl0
eS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNUQxOEI5N0I5QjAwMzkwNjJGIC8qIFJlbmFt
ZUZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkUzQTE4Qjk3QjlCMDAzOTA2MkYg
LyogSW5pdGlhbGl6ZUdsb2JhbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTQ1MThCOTdC
OUIwMDM5MDYyRiAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MzEwMTJFODAxOEI5N0I5QjAwMzkwNjJGIC8qIFZlcnNpb25HTFNMLmggaW4gSGVhZGVycyAqLywK
KwkJCQkzMTAxMkUyNzE4Qjk3QjlCMDAzOTA2MkYgLyogRGlhZ25vc3RpY3MuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTMxMDEyRTMyMThCOTdCOUIwMDM5MDYyRiAvKiBnbHNsYW5nX3RhYi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTI2NEY4QjExNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZVBhcnNl
ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNTgxOEI5N0I5QjAwMzkwNjJGIC8qIFByYWdt
YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNjUxOEI5N0I5QjAwMzkwNjJGIC8qIFN5bWJv
bFRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkU3NDE4Qjk3QjlCMDAzOTA2MkYgLyog
VW5mb2xkU2hvcnRDaXJjdWl0QVNULmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkU3MjE4Qjk3
QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmggaW4gSGVhZGVycyAqLywKIAkJCQlB
MjY0RjhCMzE2OTc0REVEMDA2RkFBNUEgLyogRXhwcmVzc2lvblBhcnNlci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNzIzMDlBNEYxODNDMjU5RTAwMzcwQjkzIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFT
VC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTBEOUIxMDMxMkUxMURDQjAwMkQ0MjU1IC8qIEV4dGVu
c2lvbkJlaGF2aW9yLmggaW4gSGVhZGVycyAqLywKLQkJCQk3MjMwOUE1RTE4M0MyODUzMDAzNzBC
OTMgLyogZ2xzbGFuZ190YWIuaCBpbiBIZWFkZXJzICovLAotCQkJCTcyMzA5QTcyMTgzQzJCRTgw
MDM3MEI5MyAvKiBVbmlmb3JtLmggaW4gSGVhZGVycyAqLywKLQkJCQk3MjMwOUE2NjE4M0MyQUU1
MDAzNzBCOTMgLyogT3V0cHV0SExTTC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTBBQUJFMkQxM0FG
RTgxMDAwRjJFQkQxIC8qIEZvckxvb3BVbnJvbGwuaCBpbiBIZWFkZXJzICovLAotCQkJCTkwRDlC
MTA3MTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nLmggaW4gSGVhZGVycyAqLywKLQkJCQlBMjY0
RjhDODE2OTc0RTJBMDA2RkFBNUEgLyogSGFzaE5hbWVzLmggaW4gSGVhZGVycyAqLywKLQkJCQk3
MjMwOUE2MjE4M0MyQTc0MDAzNzBCOTMgLyogVHJhbnNsYXRvckhMU0wuaCBpbiBIZWFkZXJzICov
LAorCQkJCTMxMDEyRTVDMThCOTdCOUIwMDM5MDYyRiAvKiBSZW1vdmVUcmVlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkzMTAxMkU0ODE4Qjk3QjlCMDAzOTA2MkYgLyogb3NpbmNsdWRlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkzMTAxMkUzNTE4Qjk3QjlCMDAzOTA2MkYgLyogSW5mb1NpbmsuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTMxMDEyRTFDMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3Jh
cGguaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTYzMThCOTdCOUIwMDM5MDYyRiAvKiBTaEhh
bmRsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNzAxOEI5N0I5QjAwMzkwNjJGIC8qIFR5
cGVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkU2NzE4Qjk3QjlCMDAzOTA2MkYgLyogUmVz
dHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNDMx
OEI5N0I5QjAwMzkwNjJGIC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkzMTAxMkU3ODE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTI2NEY4QjUxNjk3NERFRDAwNkZBQTVBIC8qIElucHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlB
MjY0RjhDRDE2OTc2MkFBMDA2RkFBNUEgLyoga2hycGxhdGZvcm0uaCBpbiBIZWFkZXJzICovLAog
CQkJCTQ5OTUxQzAzMTRCN0FBQjMwMDYwRTk2RSAvKiBsZW5ndGhfbGltaXRzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkzMTAxMkU3NjE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMzEwMTJFMjMxOEI5N0I5QjAwMzkwNjJGIC8qIERldGVjdENhbGxEZXB0aC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFMzkxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxp
emVEbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEI3MTY5NzRERUQwMDZGQUE1QSAvKiBM
ZXhlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFODQxOEI5N0M4NjAwMzkwNjJGIC8qIGNv
bXBpbGVyZGVidWcuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEI5MTY5NzRERUQwMDZGQUE1
QSAvKiBNYWNyby5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNUExOEI5N0I5QjAwMzkwNjJG
IC8qIFF1YWxpZmllckFsaXZlLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkU1NzE4Qjk3QjlC
MDAzOTA2MkYgLyogUG9vbEFsbG9jLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkUzNzE4Qjk3
QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNTIx
OEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEhMU0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEy
RTFBMThCOTdCOUIwMDM5MDYyRiAvKiBDb25zdGFudFVuaW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBMjY0RjhCQjE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm9FeHBhbmRlci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNzIzMDlBNTQxODNDMjVBRDAwMzcwQjkzIC8qIEluaXRpYWxpemVHTFBvc2l0aW9u
LmggaW4gSGVhZGVycyAqLywKLQkJCQlBMEFBQkUzMTEzQUZFODMwMDBGMkVCRDEgLyogTWFwTG9u
Z1ZhcmlhYmxlTmFtZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTJEMThCOTdCOUIwMDM5
MDYyRiAvKiBnbHNsYW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhCQzE2OTc0REVEMDA2
RkFBNUEgLyogbnVtZXJpY19sZXguaCBpbiBIZWFkZXJzICovLAotCQkJCUEwQUFCRTQ1MTNBRkU5
NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmggaW4gSGVhZGVycyAqLywKLQkJCQk3MjMwOUE3MDE4
M0MyQkU4MDAzNzBCOTMgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmggaW4gSGVhZGVycyAqLywKLQkJ
CQlBMEFBQkUzNTEzQUZFODQ3MDBGMkVCRDEgLyogT3V0cHV0R0xTTEJhc2UuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTMxMDEyRTY5MThCOTdCOUIwMDM5MDYyRiAvKiBSZXN0cmljdFZlcnRleFNoYWRl
clRpbWluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4QkQxNjk3NERFRDAwNkZBQTVBIC8q
IHBwX3V0aWxzLmggaW4gSGVhZGVycyAqLywKLQkJCQlBMjY1NjdDMDE1OUMyMUIxMDAzOTg1Mzkg
LyogUHJhZ21hLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkUyQTE4Qjk3QjlCMDAzOTA2MkYg
LyogRXh0ZW5zaW9uQmVoYXZpb3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTZGMThCOTdC
OUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9ySExTTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4
QkYxNjk3NERFRDAwNkZBQTVBIC8qIFByZXByb2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
QTI2NTY3QzExNTlDMjFCMTAwMzk4NTM5IC8qIFJlbmFtZUZ1bmN0aW9uLmggaW4gSGVhZGVycyAq
LywKLQkJCQk3MjMwOUE1MjE4M0MyNUE3MDAzNzBCOTMgLyogTm9kZVNlYXJjaC5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJQTI2NTY4NDExNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRT
aGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovLAotCQkJCTcyMzA5QTZFMTgzQzJCRTgwMDM3MEI5
MyAvKiBEZXRlY3REaXNjb250aW51aXR5LmggaW4gSGVhZGVycyAqLywKLQkJCQlBMjY1Njg0MzE1
OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTkwRDlCMTBBMTJFMTFEQ0IwMDJENDI1NSAvKiBTZWFyY2hTeW1ib2wuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUZCMzlENzZFMTIwMTEwRkMwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhDMDE2OTc0REVEMDA2RkFBNUEgLyogU291cmNlTG9j
YXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTRFMThCOTdCOUIwMDM5MDYyRiAvKiBP
dXRwdXRHTFNMLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkUxRTE4Qjk3QjlCMDAzOTA2MkYg
LyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFN0Ex
OEI5N0I5QjAwMzkwNjJGIC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTMxMDEyRTMzMThCOTdCOUIwMDM5MDYyRiAvKiBIYXNoTmFtZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUEyNjRGOEMyMTY5NzRERUQwMDZGQUE1QSAvKiBUb2tlbi5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMzEwMTJFMjkxOEI5N0I5QjAwMzkwNjJGIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTMxMDEyRTEyMThCOTdCOUIwMDM5MDYyRiAvKiBCYXNlVHlwZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCUEyNjRGOEM0MTY5NzRERUQwMDZGQUE1QSAvKiBUb2tlbml6ZXIu
aCBpbiBIZWFkZXJzICovLAotCQkJCUEwQUFCRTQ5MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xh
dG9yRVNTTC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTBEOUIxMTQxMkUxMURENjAwMkQ0MjU1IC8q
IHV0aWwuaCBpbiBIZWFkZXJzICovLAotCQkJCTkwRDlCMTE2MTJFMTFERDYwMDJENDI1NSAvKiBW
YWxpZGF0ZUxpbWl0YXRpb25zLmggaW4gSGVhZGVycyAqLywKLQkJCQk3MjMwOUE1MTE4M0MyNUE1
MDAzNzBCOTMgLyogUGFyc2VDb250ZXh0LmggaW4gSGVhZGVycyAqLywKLQkJCQk5MEQ5QjExODEy
RTExREQ2MDAyRDQyNTUgLyogVmFyaWFibGVJbmZvLmggaW4gSGVhZGVycyAqLywKLQkJCQlBMjY0
RjhDQTE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuaCBpbiBIZWFkZXJzICovLAot
CQkJCTkwRDlCMTFBMTJFMTFERDYwMDJENDI1NSAvKiBWZXJzaW9uR0xTTC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNUNCMTNGRDUxNzlEQjNGRDAwMUY4NTFEIC8qIERldGVjdENhbGxEZXB0aC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkBAIC03MjMsNjggKzc3OCw2OSBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1
aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAo
CisJCQkJMzEwMTJFMjYxOEI5N0I5QjAwMzkwNjJGIC8qIERpYWdub3N0aWNzLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTMxMDEyRTNEMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplVmFyaWFi
bGVzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTdGMThCOTdCOUIwMDM5MDYyRiAvKiBW
ZXJzaW9uR0xTTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMDhDM0NEQzE2RDZDQjYxMDAzRjBC
ODMgLyogQXJyYXlCb3VuZHNDbGFtcGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5OTUxQzA5
MTRCN0FBRDgwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQk3MjMwOUE1RDE4M0MyODUzMDAzNzBCOTMgLyogZ2xzbGFuZ190YWIuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJOTBEOUIxMDIxMkUxMURDQjAwMkQ0MjU1IC8qIENvbXBpbGVyLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlEMjc1MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjY1NjgzOTE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5k
ZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyNjU2ODNCMTU5QzIzRTEwMDM5ODUz
OSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyNjU2
ODNEMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJQTI2NTY4M0YxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaFRy
YXZlcnNlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyNjU2N0JCMTU5QzIxQjEwMDM5ODUzOSAv
KiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MjMwOUE1NjE4M0MyN0RFMDAz
NzBCOTMgLyogVG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTcyMzA5QTUwMTgzQzI1
QTEwMDM3MEI5MyAvKiBQYXJzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNzIzMDlB
NzExODNDMkJFODAwMzcwQjkzIC8qIFVuaWZvcm0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEw
MTJFNkMxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JHTFNMLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUEyNjRGOEFDMTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9zdGljc0Jhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJQTI2NTY3QkQxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhh
bmRsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFMTUxOEI5N0I5QjAwMzkwNjJGIC8q
IENvZGVHZW4uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFM0YxOEI5N0I5QjAwMzkwNjJG
IC8qIEludGVybWVkaWF0ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkUzQjE4Qjk3QjlC
MDAzOTA2MkYgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkzMTAxMkUzMTE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZ190YWIuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMzEwMTJFMjExOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaFRyYXZl
cnNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTVFMThCOTdCOUIwMDM5MDYyRiAvKiBS
ZXdyaXRlRWxzZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkU1NDE4Qjk3QjlC
MDAzOTA2MkYgLyogUGFyc2VDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEyNjRGOEFF
MTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkzMTAxMkU3NTE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkzMTAxMkU0RDE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0R0xTTC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkzMTAxMkUzMDE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZ19sZXgu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFNDExOEI5N0I5QjAwMzkwNjJGIC8qIGludGVy
bU91dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkU2RTE4Qjk3QjlCMDAzOTA2MkYgLyog
VHJhbnNsYXRvckhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NEY4QjAxNjk3NERFRDAw
NkZBQTVBIC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMEFBQkUy
QzEzQUZFODEwMDBGMkVCRDEgLyogRm9yTG9vcFVucm9sbC5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQlGQjM5RDI3OTEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1NpbmsuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJNzIzMDlBNjExODNDMkE3NDAwMzcwQjkzIC8qIFRyYW5zbGF0b3JITFNMLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCUZCMzlEMjdCMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlEMjdEMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFs
aXplRGxsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTQ5MThCOTdCOUIwMDM5MDYyRiAv
KiBvc3NvdXJjZV9wb3NpeC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkU0MjE4Qjk3QjlC
MDAzOTA2MkYgLyogSW50ZXJtVHJhdmVyc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJF
NjAxOEI5N0I5QjAwMzkwNjJGIC8qIFNlYXJjaFN5bWJvbC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk3MjMwOUE1ODE4M0MyN0YzMDAzNzBCOTMgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQlBMjY1NjdCRjE1OUMyMUIxMDAzOTg1MzkgLyogSW5pdGlhbGl6ZVBhcnNl
Q29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkUyODE4Qjk3QjlCMDAzOTA2MkYg
LyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkU1OTE4Qjk3
QjlCMDAzOTA2MkYgLyogUXVhbGlmaWVyQWxpdmUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEw
MTJFNzExOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkzMTAxMkU2NDE4Qjk3QjlCMDAzOTA2MkYgLyogU3ltYm9sVGFibGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTI2NEY4QjQxNjk3NERFRDAwNkZBQTVBIC8qIElucHV0LmNwcCBp
biBTb3VyY2VzICovLAotCQkJCUZCMzlEMjgxMTIwMEYzNUEwMDA4OEU2OSAvKiBJbnRlcm1lZGlh
dGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIzOUQyODMxMjAwRjM1QTAwMDg4RTY5IC8qIGlu
dGVybU91dC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI4NDEyMDBGMzVBMDAwODhFNjkg
LyogSW50ZXJtVHJhdmVyc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NEY4QjYxNjk3NERF
RDAwNkZBQTVBIC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTYyMThCOTdC
OUIwMDM5MDYyRiAvKiBTaGFkZXJMYW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTM4
MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplRGxsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUEyNjRGOEI4MTY5NzRERUQwMDZGQUE1QSAvKiBNYWNyby5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkzMTAxMkU1QjE4Qjk3QjlCMDAzOTA2MkYgLyogUmVtb3ZlVHJlZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBMjY0RjhCQTE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm9FeHBhbmRlci5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQlBMEFBQkUzMDEzQUZFODMwMDBGMkVCRDEgLyogTWFwTG9uZ1Zhcmlh
YmxlTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIzOUQyODgxMjAwRjM1QTAwMDg4RTY5
IC8qIG9zc291cmNlX3Bvc2l4LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEwQUFCRTQ0MTNBRkU5
NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlEMjhB
MTIwMEYzNUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEw
QUFCRTM0MTNBRkU4NDcwMEYyRUJEMSAvKiBPdXRwdXRHTFNMQmFzZS5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQlGQjM5RDI4RTEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2VDb25zdC5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQk3MjMwOUE2NTE4M0MyQUU1MDAzNzBCOTMgLyogT3V0cHV0SExTTC5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI5MTEyMDBGMzVBMDAwODhFNjkgLyogUG9vbEFsbG9j
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTcyMzA5QTUzMTgzQzI1QUEwMDM3MEI5MyAvKiBJbml0
aWFsaXplR0xQb3NpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk3MjMwOUE2RDE4M0MyQkU4
MDAzNzBCOTMgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk3
MjMwOUE2RjE4M0MyQkU4MDAzNzBCOTMgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCTcyMzA5QTVDMTgzQzI4NTMwMDM3MEI5MyAvKiBnbHNsYW5nX2xleC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkU3MzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hv
cnRDaXJjdWl0QVNULmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTI0MThCOTdCOUIwMDM5
MDYyRiAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEy
RTY4MThCOTdCOUIwMDM5MDYyRiAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkzMTAxMkUxMzE4Qjk3QjlCMDAzOTA2MkYgLyogQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFMzQxOEI5N0I5QjAwMzkw
NjJGIC8qIEluZm9TaW5rLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTUzMThCOTdCOUIw
MDM5MDYyRiAvKiBwYXJzZUNvbnN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTQ0MThC
OTdCOUIwMDM5MDYyRiAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkzMTAxMkU1NjE4Qjk3QjlCMDAzOTA2MkYgLyogUG9vbEFsbG9jLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTMxMDEyRTY2MThCOTdCOUIwMDM5MDYyRiAvKiBSZXN0cmljdEZyYWdtZW50U2hh
ZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTc5MThCOTdCOUIwMDM5MDYy
RiAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTgz
MThCOTdDODYwMDM5MDYyRiAvKiBjb21waWxlcmRlYnVnLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTMxMDEyRTc3MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTMxMDEyRTUxMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRITFNMLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTMxMDEyRTM2MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTMxMDEyRTdCMThCOTdCOUIwMDM5MDYyRiAvKiBWYXJpYWJsZUluZm8uY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFMUQxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFN0QxOEI5N0I5QjAw
MzkwNjJGIC8qIFZhcmlhYmxlUGFja2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTFG
MThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMzEwMTJFNEIxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEVTU0wuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTI2NEY4QkUxNjk3NERFRDAwNkZBQTVBIC8qIFByZXByb2Nlc3Nvci5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQk3MjMwOUE0RDE4M0MyNTkzMDAzNzBCOTMgLyogQ29kZUdl
bi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDJBNDEyMDBGMzVBMDAwODhFNjkgLyogUXVh
bGlmaWVyQWxpdmUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIzOUQyQTYxMjAwRjM1QTAwMDg4
RTY5IC8qIFJlbW92ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTI2NTY4NDAxNTlDMjNF
MTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJQTI2NTY4NDIxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTkwRDlCMTA5MTJFMTFEQ0IwMDJENDI1NSAv
KiBTZWFyY2hTeW1ib2wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIzOUQyQTgxMjAwRjM1QTAw
MDg4RTY5IC8qIFNoYWRlckxhbmcuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIzOUQyQUExMjAw
RjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEy
RTJCMThCOTdCOUIwMDM5MDYyRiAvKiBGb3JMb29wVW5yb2xsLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTMxMDEyRTIyMThCOTdCOUIwMDM5MDYyRiAvKiBEZXRlY3RDYWxsRGVwdGguY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMzEwMTJFMTcxOEI5N0I5QjAwMzkwNjJGIC8qIENvbXBpbGVyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTMxMDEyRTZBMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9y
RVNTTC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkU0RjE4Qjk3QjlCMDAzOTA2MkYgLyog
T3V0cHV0R0xTTEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFMUIxOEI5N0I5QjAw
MzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMjY0RjhD
MTE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTBBQUJF
NDgxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCUZCMzlEMkFDMTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQk5MEQ5QjExMzEyRTExREQ2MDAyRDQyNTUgLyogdXRpbC5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQk5MEQ5QjExNTEyRTExREQ2MDAyRDQyNTUgLyogVmFsaWRhdGVMaW1pdGF0
aW9ucy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5MEQ5QjExNzEyRTExREQ2MDAyRDQyNTUgLyog
VmFyaWFibGVJbmZvLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyNjRGOEM5MTY5NzRFMkEwMDZG
QUE1QSAvKiBWYXJpYWJsZVBhY2tlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5MEQ5QjExOTEy
RTExREQ2MDAyRDQyNTUgLyogVmVyc2lvbkdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNUNC
MTNGRDQxNzlEQjNGRDAwMUY4NTFEIC8qIERldGVjdENhbGxEZXB0aC5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQk3MjMwOUE0RTE4M0MyNTlDMDAzNzBCOTMgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNU
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
R05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9HTlVtYWtlZmlsZS5hbQpp
bmRleCA0YzE0YWMxNzUxZTcyZDg5OWM5NTNiMmVlZTlmZTU5N2MzYTQxYjE2Li45MjQwOTM4ZTAz
ZmQ0ZWY4ODllMjA5ZmJhYzdjNTU3NThkMTE4ZjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9H
TlVtYWtlZmlsZS5hbQpAQCAtMzAsNzEgKzMwLDExMyBAQCBsaWJBTkdMRV9sYV9TT1VSQ0VTID0g
XAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgg
XAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvS0hSL2tocnBsYXRmb3JtLmggXAog
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oIFwKLQlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQmFzZVR5cGVzLmggXAotCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAg
XAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25F
bXVsYXRvci5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29kZUdl
bi5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21tb24uaCBc
Ci0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcCBcCi0J
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbnN0YW50VW5pb24uaCBcCi0J
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVnLmNwcCBcCi0JU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVnLmggXAotCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNw
cCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVu
ZGVuY3lHcmFwaEJ1aWxkZXIuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCBcCi0JU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1
dC5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9E
ZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBcCi0JU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdENhbGxEZXB0aC5jcHAgXAotCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3RDYWxsRGVwdGguaCBcCi0JU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmNwcCBcCi0JU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmggXAotCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmNwcCBcCi0J
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuaCBc
Ci0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVp
dHkuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlz
Y29udGludWl0eS5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRXh0
ZW5zaW9uQmVoYXZpb3IuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0Zvckxvb3BVbnJvbGwuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvRm9yTG9vcFVucm9sbC5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvZ2xzbGFuZy5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSGFz
aE5hbWVzLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbmZvU2lu
ay5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbmZvU2luay5o
IFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5jcHAg
XAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmNw
cCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVEbGwu
aCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVHbG9i
YWxzLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXpl
R0xQb3NpdGlvbi5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9J
bml0aWFsaXplR0xQb3NpdGlvbi5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvSW5pdGlhbGl6ZS5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmggXAotCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwIFwKLQlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmggXAotCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1PdXQuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvSW50ZXJtVHJhdmVyc2UuY3BwIFwKLQlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvbG9jYWxpbnRlcm1lZGlhdGUuaCBcCi0JU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCBcCi0J
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVz
LmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9NTWFwLmggXAotCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Ob2RlU2VhcmNoLmggXAotCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9vc2luY2x1ZGUuaCBcCi0JU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL29zc291cmNlX3Bvc2l4LmNwcCBcCi0JU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEVTU0wuY3BwIFwKLQlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0RVNTTC5oIFwKLQlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTEJhc2UuY3BwIFwKLQlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTEJhc2UuaCBcCi0JU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuY3BwIFwKLQlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTC5oIFwKLQlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAgXAotCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmggXAotCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wYXJzZUNvbnN0LmNwcCBcCi0JU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlQ29udGV4dC5jcHAgXAotCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUNvbnRleHQuaCBcCi0JU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1ByYWdtYS5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9CYXNlVHlwZXMuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIFwK
KwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9CdWlsdElu
RnVuY3Rpb25FbXVsYXRvci5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tbW9uLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmNwcCBcCisJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5oIFwKKwlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9jb21waWxlcmRlYnVn
LmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Y29tcGlsZXJkZWJ1Zy5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBcCisJU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5k
ZW5jeUdyYXBoQnVpbGRlci5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwIFwKKwlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5
R3JhcGguaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBcCisJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBo
T3V0cHV0LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBcCisJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0Q2FsbERlcHRoLmNwcCBc
CisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0
Q2FsbERlcHRoLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0RpYWdub3N0aWNzLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvRGlhZ25vc3RpY3MuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFuZGxlci5jcHAgXAorCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RpcmVjdGl2ZUhhbmRs
ZXIuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
RGV0ZWN0RGlzY29udGludWl0eS5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL0RldGVjdERpc2NvbnRpbnVpdHkuaCBcCisJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRXh0ZW5zaW9uQmVoYXZpb3IuaCBc
CisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRm9yTG9v
cFVucm9sbC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0Zvckxvb3BVbnJvbGwuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZy5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9IYXNoTmFtZXMuaCBcCisJU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuY3BwIFwKKwlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIFwKKwlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplLmNw
cCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5p
dGlhbGl6ZS5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9Jbml0aWFsaXplRGxsLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZURsbC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplR2xvYmFscy5oIFwKKwlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplR0xQ
b3NpdGlvbi5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0luaXRpYWxpemVHTFBvc2l0aW9uLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIFwKKwlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXpl
UGFyc2VDb250ZXh0LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL0luaXRpYWxpemVWYXJpYWJsZXMuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplVmFyaWFibGVzLmggXAorCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybWVkaWF0
ZS5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L2ludGVybWVkaWF0ZS5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9pbnRlcm1PdXQuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1UcmF2ZXJzZS5jcHAgXAorCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2xvY2FsaW50ZXJtZWRpYXRlLmggXAor
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL01hcExvbmdW
YXJpYWJsZU5hbWVzLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCBcCisJU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTU1hcC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Ob2RlU2VhcmNoLmggXAorCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL29zaW5jbHVkZS5oIFwKKwlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9vc3NvdXJjZV9w
b3NpeC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL091dHB1dEVTU0wuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9PdXRwdXRFU1NMLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0xCYXNlLmNwcCBcCisJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuaCBcCisJ
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xT
TC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L091dHB1dEdMU0wuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvT3V0cHV0SExTTC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvcGFyc2VDb25zdC5jcHAgXAorCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5jcHAgXAor
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29u
dGV4dC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9Qb29sQWxsb2MuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9Qb29sQWxsb2MuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvUHJhZ21hLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1F1YWxpZmllckFsaXZlLmNwcCBcCisJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUXVhbGlmaWVyQWxpdmUuaCBcCisJ
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUmVtb3ZlVHJl
ZS5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1JlbW92ZVRyZWUuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvUmVuYW1lRnVuY3Rpb24uaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvUmV3cml0ZUVsc2VCbG9ja3MuY3BwIFwKKwlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZXdyaXRlRWxzZUJsb2Nrcy5o
IFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TZWFy
Y2hTeW1ib2wuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9TZWFyY2hTeW1ib2wuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvU2hhZGVyTGFuZy5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1NoSGFuZGxlLmggXAorCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmNwcCBcCisJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUu
aCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdGlt
aW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZy5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RW
ZXJ0ZXhTaGFkZXJUaW1pbmcuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckVTU0wuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yRVNTTC5oIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yR0xTTC5j
cHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JHTFNMLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JITFNMLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckhMU0wuaCBcCisJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHlwZXMuaCBcCisJU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0
QVNULmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVW5mb2xkU2hvcnRDaXJjdWl0QVNULmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1VuZm9sZFNob3J0Q2lyY3VpdC5jcHAgXAorCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1VuZm9sZFNob3J0Q2lyY3Vp
dC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9V
bmlmb3JtLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVW5pZm9ybS5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci91dGlsLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvdXRpbC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCBcCisJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1pdGF0aW9ucy5o
IFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJp
YWJsZUluZm8uY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9WYXJpYWJsZUluZm8uaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVQYWNrZXIuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZVBhY2tlci5oIFwKKwlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WZXJzaW9uR0xTTC5j
cHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Zl
cnNpb25HTFNMLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvRGlhZ25vc3RpY3NCYXNlLmNwcCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaWFnbm9zdGljc0Jhc2UuaCBcCiAJU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVIYW5kbGVy
QmFzZS5jcHAgXApAQCAtMTIxLDQzICsxNjMsNSBAQCBsaWJBTkdMRV9sYV9TT1VSQ0VTID0gXAog
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW4u
aCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9U
b2tlbml6ZXIuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL1Rva2VuaXplci5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvUXVhbGlmaWVyQWxpdmUuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvUXVhbGlmaWVyQWxpdmUuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1JlbW92ZVRyZWUuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvUmVtb3ZlVHJlZS5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvUmVuYW1lRnVuY3Rpb24uaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1NlYXJjaFN5bWJvbC5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9TZWFyY2hTeW1ib2wuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1NoYWRlckxhbmcuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvU2hIYW5kbGUuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1N5bWJvbFRhYmxlLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1N5bWJvbFRhYmxlLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgXAotCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWlu
Zy5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3Ry
aWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIFwKLQlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuY3BwIFwKLQlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuaCBcCi0JU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcCBcCi0J
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmggXAot
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAg
XAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5o
IFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHlwZXMuaCBcCi0JU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdEFTVC5j
cHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENp
cmN1aXRBU1QuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9s
ZFNob3J0Q2lyY3VpdC5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9VbmZvbGRTaG9ydENpcmN1aXQuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1VuaWZvcm0uY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvVW5pZm9ybS5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdXRp
bC5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci91dGlsLmggXAot
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25z
LmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGlt
aXRhdGlvbnMuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Zhcmlh
YmxlSW5mby5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJp
YWJsZUluZm8uaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Zhcmlh
YmxlUGFja2VyLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Zh
cmlhYmxlUGFja2VyLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9W
ZXJzaW9uR0xTTC5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9W
ZXJzaW9uR0xTTC5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkv
Y29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmNwcCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL3RoaXJkX3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaApp
bmRleCA0MGQyZDI2NDA0ODEzNzBlZDliNjAzMGIwMmY4NTYwM2E1OTg2M2YyLi45OTEyOTM5Yjk1
MzBkMWYwM2U1NzZmODUyMDIwOGEzZmJjODZlN2U5IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKQEAgLTIzLDcgKzIzLDcg
QEAKICNkZWZpbmUgQ09NUElMRVJfRVhQT1JUCiAjZW5kaWYKIAotI2luY2x1ZGUgImtocnBsYXRm
b3JtLmgiCisjaW5jbHVkZSAiS0hSL2tocnBsYXRmb3JtLmgiCiAjaW5jbHVkZSA8c3RkZGVmLmg+
CiAKIC8vCkBAIC0xODQsOCArMTg0LDggQEAgdHlwZWRlZiBlbnVtIHsKICAgLy8gVGhpcyBmbGFn
IGxpbWl0cyB0aGUgZGVwdGggb2YgdGhlIGNhbGwgc3RhY2suCiAgIFNIX0xJTUlUX0NBTExfU1RB
Q0tfREVQVEggPSAweDQwMDAsCiAKLSAgLy8gVGhpcyBmbGFnIGluaXRpYWxpemVzIGdsX1Bvc2l0
aW9uIHRvIHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKSBhdAotICAvLyB0aGUgYmVnaW5uaW5nIG9m
IHRoZSB2ZXJ0ZXggc2hhZGVyLCBhbmQgaGFzIG5vIGVmZmVjdCBpbiB0aGUKKyAgLy8gVGhpcyBm
bGFnIGluaXRpYWxpemVzIGdsX1Bvc2l0aW9uIHRvIHZlYzQoMCwwLDAsMCkgYXQgdGhlCisgIC8v
IGJlZ2lubmluZyBvZiB0aGUgdmVydGV4IHNoYWRlcidzIG1haW4oKSwgYW5kIGhhcyBubyBlZmZl
Y3QgaW4gdGhlCiAgIC8vIGZyYWdtZW50IHNoYWRlci4gSXQgaXMgaW50ZW5kZWQgYXMgYSB3b3Jr
YXJvdW5kIGZvciBkcml2ZXJzIHdoaWNoCiAgIC8vIGluY29ycmVjdGx5IGZhaWwgdG8gbGluayBw
cm9ncmFtcyBpZiBnbF9Qb3NpdGlvbiBpcyBub3Qgd3JpdHRlbi4KICAgU0hfSU5JVF9HTF9QT1NJ
VElPTiA9IDB4ODAwMCwKQEAgLTE5Niw2ICsxOTYsMTIgQEAgdHlwZWRlZiBlbnVtIHsKICAgLy8g
VGhpcyBpcyB0byB3b3JrIGFyb3VuZCBhIE1hY09TWCBkcml2ZXIgYnVnIHRoYXQgfGJ8IGlzIGV4
ZWN1dGVkCiAgIC8vIGluZGVwZW5kZW50IG9mIHxhfCdzIHZhbHVlLgogICBTSF9VTkZPTERfU0hP
UlRfQ0lSQ1VJVCA9IDB4MTAwMDAsCisKKyAgLy8gVGhpcyBmbGFnIGluaXRpYWxpemVzIHZhcnlp
bmdzIHdpdGhvdXQgc3RhdGljIHVzZSBpbiB2ZXJ0ZXggc2hhZGVyCisgIC8vIGF0IHRoZSBiZWdp
bm5pbmcgb2YgbWFpbigpLCBhbmQgaGFzIG5vIGVmZmVjdHMgaW4gdGhlIGZyYWdtZW50IHNoYWRl
ci4KKyAgLy8gSXQgaXMgaW50ZW5kZWQgYXMgYSB3b3JrYXJvdW5kIGZvciBkcml2ZXJzIHdoaWNo
IGluY29ycmVjdGx5IG9wdGltaXplCisgIC8vIG91dCBzdWNoIHZhcnlpbmdzIGFuZCBjYXVzZSBh
IGxpbmsgZmFpbHVyZS4KKyAgU0hfSU5JVF9WQVJZSU5HU19XSVRIT1VUX1NUQVRJQ19VU0UgPSAw
eDIwMDAwLAogfSBTaENvbXBpbGVPcHRpb25zOwogCiAvLyBEZWZpbmVzIGFsdGVybmF0ZSBzdHJh
dGVnaWVzIGZvciBpbXBsZW1lbnRpbmcgYXJyYXkgaW5kZXggY2xhbXBpbmcuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0tIUi9raHJwbGF0Zm9ybS5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9LSFIva2hycGxhdGZvcm0uaApvbGQgbW9kZSAx
MDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tbW9uL1JlZkNvdW50T2JqZWN0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21tb24vUmVmQ291bnRPYmplY3QuY3BwCmluZGV4IDAzNjRhZGYyY2Q1NTE1ODcwNDI1
YjAwZGFjZGQ5ODc4ZmQ5YWY4NDUuLmMxZWY5MGNkY2NjMjYwOTVmZmU1MTgzMDMxNmExODJkZjEy
NmZlNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vUmVm
Q291bnRPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24v
UmVmQ291bnRPYmplY3QuY3BwCkBAIC0xLDQgKzEsMyBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVk
LmgiCiAvLwogLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9hbmdsZXV0aWxzLmgKaW5kZXggOTc2MTU2N2Zi
Mjc0OTc1ZjQ0YzU0MTkwYjExNzQ5ZWMzNzExNmRjNi4uNzcyM2YwZmI3MjcyMzYyMTk4YzQyMDIx
NDU0ZTI2YjMwYmE1MjdmNCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbW1vbi9hbmdsZXV0aWxzLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bW1vbi9hbmdsZXV0aWxzLmgKQEAgLTQyLDYgKzQyLDIwIEBAIHZvaWQgU2FmZVJlbGVhc2UoVCYg
cmVzb3VyY2UpCiAgICAgfQogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3ZvaWQgU2FmZURl
bGV0ZShUKiYgcmVzb3VyY2UpCit7CisgICAgZGVsZXRlIHJlc291cmNlOworICAgIHJlc291cmNl
ID0gTlVMTDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit2b2lkIFNhZmVEZWxldGVBcnJh
eShUKiYgcmVzb3VyY2UpCit7CisgICAgZGVsZXRlW10gcmVzb3VyY2U7CisgICAgcmVzb3VyY2Ug
PSBOVUxMOworfQorCiAjaWYgZGVmaW5lZChfTVNDX1ZFUikKICNkZWZpbmUgc25wcmludGYgX3Nu
cHJpbnRmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21tb24vZGVidWcuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1
Zy5jcHAKaW5kZXggMjMzMzc0MDVlZDE2Y2E5ZmQwNWRkNzgyMjk0MmRmNWYzMDY1NTA4NS4uMDVk
M2RjNjJhZDQ5NjEwMDAxMjU5YjliOGJhNmUzMWRjOTlhMDczMyAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5jcHAKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5jcHAKQEAgLTcsMTcgKzcsMjMgQEAKIC8vIGRl
YnVnLmNwcDogRGVidWdnaW5nIHV0aWxpdGllcy4KIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5o
IgotI2luY2x1ZGUgImNvbW1vbi9zeXN0ZW0uaCIKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworI2lm
IGRlZmluZWQoQU5HTEVfRU5BQkxFX1BFUkYpCiAjaW5jbHVkZSA8ZDNkOS5oPgorI2VuZGlmCiAK
IG5hbWVzcGFjZSBnbAogewotCisjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfUEVSRikKIHR5cGVk
ZWYgdm9pZCAoV0lOQVBJICpQZXJmT3V0cHV0RnVuY3Rpb24pKEQzRENPTE9SLCBMUENXU1RSKTsK
KyNlbHNlCit0eXBlZGVmIHZvaWQgKCpQZXJmT3V0cHV0RnVuY3Rpb24pKHVuc2lnbmVkIGludCwg
Y29uc3Qgd2NoYXJfdCopOworI2VuZGlmCiAKIHN0YXRpYyB2b2lkIG91dHB1dChib29sIHRyYWNl
RmlsZURlYnVnT25seSwgUGVyZk91dHB1dEZ1bmN0aW9uIHBlcmZGdW5jLCBjb25zdCBjaGFyICpm
b3JtYXQsIHZhX2xpc3QgdmFyYXJnKQogewotI2lmICFkZWZpbmVkKEFOR0xFX0RJU0FCTEVfUEVS
RikKKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9QRVJGKQogICAgIGlmIChwZXJmQWN0aXZlKCkp
CiAgICAgewogICAgICAgICBjaGFyIG1lc3NhZ2VbMzI3NjhdOwpAQCAtMzcsMTUgKzQzLDE1IEBA
IHN0YXRpYyB2b2lkIG91dHB1dChib29sIHRyYWNlRmlsZURlYnVnT25seSwgUGVyZk91dHB1dEZ1
bmN0aW9uIHBlcmZGdW5jLCBjb25zdCBjCiAKICAgICAgICAgcGVyZkZ1bmMoMCwgd2lkZU1lc3Nh
Z2UpOwogICAgIH0KLSNlbmRpZgorI2VuZGlmIC8vIEFOR0xFX0VOQUJMRV9QRVJGCiAKLSNpZiAh
ZGVmaW5lZChBTkdMRV9ESVNBQkxFX1RSQUNFKQorI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX1RS
QUNFKQogI2lmIGRlZmluZWQoTkRFQlVHKQogICAgIGlmICh0cmFjZUZpbGVEZWJ1Z09ubHkpCiAg
ICAgewogICAgICAgICByZXR1cm47CiAgICAgfQotI2VuZGlmCisjZW5kaWYgLy8gTkRFQlVHCiAK
ICAgICBGSUxFKiBmaWxlID0gZm9wZW4oVFJBQ0VfT1VUUFVUX0ZJTEUsICJhIik7CiAgICAgaWYg
KGZpbGUpCkBAIC01Myw1MCArNTksNTAgQEAgc3RhdGljIHZvaWQgb3V0cHV0KGJvb2wgdHJhY2VG
aWxlRGVidWdPbmx5LCBQZXJmT3V0cHV0RnVuY3Rpb24gcGVyZkZ1bmMsIGNvbnN0IGMKICAgICAg
ICAgdmZwcmludGYoZmlsZSwgZm9ybWF0LCB2YXJhcmcpOwogICAgICAgICBmY2xvc2UoZmlsZSk7
CiAgICAgfQotI2VuZGlmCisjZW5kaWYgLy8gQU5HTEVfRU5BQkxFX1RSQUNFCiB9CiAKIHZvaWQg
dHJhY2UoYm9vbCB0cmFjZUZpbGVEZWJ1Z09ubHksIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQog
ewogICAgIHZhX2xpc3QgdmFyYXJnOwogICAgIHZhX3N0YXJ0KHZhcmFyZywgZm9ybWF0KTsKLSNp
ZiBkZWZpbmVkKEFOR0xFX0RJU0FCTEVfUEVSRikKLSAgICBvdXRwdXQodHJhY2VGaWxlRGVidWdP
bmx5LCBOVUxMLCBmb3JtYXQsIHZhcmFyZyk7Ci0jZWxzZQorI2lmIGRlZmluZWQoQU5HTEVfRU5B
QkxFX1BFUkYpCiAgICAgb3V0cHV0KHRyYWNlRmlsZURlYnVnT25seSwgRDNEUEVSRl9TZXRNYXJr
ZXIsIGZvcm1hdCwgdmFyYXJnKTsKKyNlbHNlCisgICAgb3V0cHV0KHRyYWNlRmlsZURlYnVnT25s
eSwgTlVMTCwgZm9ybWF0LCB2YXJhcmcpOwogI2VuZGlmCiAgICAgdmFfZW5kKHZhcmFyZyk7CiB9
CiAKIGJvb2wgcGVyZkFjdGl2ZSgpCiB7Ci0jaWYgZGVmaW5lZChBTkdMRV9ESVNBQkxFX1BFUkYp
Ci0gICAgcmV0dXJuIGZhbHNlOwotI2Vsc2UKKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9QRVJG
KQogICAgIHN0YXRpYyBib29sIGFjdGl2ZSA9IEQzRFBFUkZfR2V0U3RhdHVzKCkgIT0gMDsKICAg
ICByZXR1cm4gYWN0aXZlOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIH0KIAog
U2NvcGVkUGVyZkV2ZW50SGVscGVyOjpTY29wZWRQZXJmRXZlbnRIZWxwZXIoY29uc3QgY2hhciog
Zm9ybWF0LCAuLi4pCiB7Ci0jaWYgIWRlZmluZWQoQU5HTEVfRElTQUJMRV9QRVJGKQotI2lmIGRl
ZmluZWQoQU5HTEVfRElTQUJMRV9UUkFDRSkKKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9QRVJG
KQorI2lmICFkZWZpbmVkKEFOR0xFX0VOQUJMRV9UUkFDRSkKICAgICBpZiAoIXBlcmZBY3RpdmUo
KSkKICAgICB7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0jZW5kaWYKKyNlbmRpZiAvLyAhQU5H
TEVfRU5BQkxFX1RSQUNFCiAgICAgdmFfbGlzdCB2YXJhcmc7CiAgICAgdmFfc3RhcnQodmFyYXJn
LCBmb3JtYXQpOwogICAgIG91dHB1dCh0cnVlLCByZWludGVycHJldF9jYXN0PFBlcmZPdXRwdXRG
dW5jdGlvbj4oRDNEUEVSRl9CZWdpbkV2ZW50KSwgZm9ybWF0LCB2YXJhcmcpOwogICAgIHZhX2Vu
ZCh2YXJhcmcpOwotI2VuZGlmCisjZW5kaWYgLy8gQU5HTEVfRU5BQkxFX1BFUkYKIH0KIAogU2Nv
cGVkUGVyZkV2ZW50SGVscGVyOjp+U2NvcGVkUGVyZkV2ZW50SGVscGVyKCkKIHsKLSNpZiAhZGVm
aW5lZChBTkdMRV9ESVNBQkxFX1BFUkYpCisjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfUEVSRikK
ICAgICBpZiAocGVyZkFjdGl2ZSgpKQogICAgIHsKICAgICAgICAgRDNEUEVSRl9FbmRFdmVudCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5oCmluZGV4IDA2MGI3
MjcyZWIzYzAxMjE3NTA3ZWMwNDc2NjBiMWYxZGUzNmU3ODUuLjc5Mzg0Mzg5NWMwYjA5Nzg2YmY1
ODQxZTQzMjFhNWNiMGRiM2UyODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21tb24vZGVidWcuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL2RlYnVnLmgKQEAgLTM5LDMzICszOSwzNSBAQCBuYW1lc3BhY2UgZ2wKIH0KIAogLy8gQSBt
YWNybyB0byBvdXRwdXQgYSB0cmFjZSBvZiBhIGZ1bmN0aW9uIGNhbGwgYW5kIGl0cyBhcmd1bWVu
dHMgdG8gdGhlIGRlYnVnZ2luZyBsb2cKLSNpZiBkZWZpbmVkKEFOR0xFX0RJU0FCTEVfVFJBQ0Up
ICYmIGRlZmluZWQoQU5HTEVfRElTQUJMRV9QRVJGKQotI2RlZmluZSBUUkFDRShtZXNzYWdlLCAu
Li4pICh2b2lkKDApKQotI2Vsc2UKKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9UUkFDRSkgfHwg
ZGVmaW5lZChBTkdMRV9FTkFCTEVfUEVSRikKICNkZWZpbmUgVFJBQ0UobWVzc2FnZSwgLi4uKSBn
bDo6dHJhY2UodHJ1ZSwgInRyYWNlOiAlcyglZCk6ICIgbWVzc2FnZSAiXG4iLCBfX0ZVTkNUSU9O
X18sIF9fTElORV9fLCAjI19fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgVFJBQ0UobWVzc2Fn
ZSwgLi4uKSAodm9pZCgwKSkKICNlbmRpZgogCiAvLyBBIG1hY3JvIHRvIG91dHB1dCBhIGZ1bmN0
aW9uIGNhbGwgYW5kIGl0cyBhcmd1bWVudHMgdG8gdGhlIGRlYnVnZ2luZyBsb2csIHRvIGRlbm90
ZSBhbiBpdGVtIGluIG5lZWQgb2YgZml4aW5nLgotI2lmIGRlZmluZWQoQU5HTEVfRElTQUJMRV9U
UkFDRSkgJiYgZGVmaW5lZChBTkdMRV9ESVNBQkxFX1BFUkYpCi0jZGVmaW5lIEZJWE1FKG1lc3Nh
Z2UsIC4uLikgKHZvaWQoMCkpCi0jZWxzZQorI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX1RSQUNF
KSB8fCBkZWZpbmVkKEFOR0xFX0VOQUJMRV9QRVJGKQogI2RlZmluZSBGSVhNRShtZXNzYWdlLCAu
Li4pIGdsOjp0cmFjZShmYWxzZSwgImZpeG1lOiAlcyglZCk6ICIgbWVzc2FnZSAiXG4iLCBfX0ZV
TkNUSU9OX18sIF9fTElORV9fLCAjI19fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgRklYTUUo
bWVzc2FnZSwgLi4uKSAodm9pZCgwKSkKICNlbmRpZgogCiAvLyBBIG1hY3JvIHRvIG91dHB1dCBh
IGZ1bmN0aW9uIGNhbGwgYW5kIGl0cyBhcmd1bWVudHMgdG8gdGhlIGRlYnVnZ2luZyBsb2csIGlu
IGNhc2Ugb2YgZXJyb3IuCi0jaWYgZGVmaW5lZChBTkdMRV9ESVNBQkxFX1RSQUNFKSAmJiBkZWZp
bmVkKEFOR0xFX0RJU0FCTEVfUEVSRikKLSNkZWZpbmUgRVJSKG1lc3NhZ2UsIC4uLikgKHZvaWQo
MCkpCi0jZWxzZQorI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX1RSQUNFKSB8fCBkZWZpbmVkKEFO
R0xFX0VOQUJMRV9QRVJGKQogI2RlZmluZSBFUlIobWVzc2FnZSwgLi4uKSBnbDo6dHJhY2UoZmFs
c2UsICJlcnI6ICVzKCVkKTogIiBtZXNzYWdlICJcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18s
ICMjX19WQV9BUkdTX18pCisjZWxzZQorI2RlZmluZSBFUlIobWVzc2FnZSwgLi4uKSAodm9pZCgw
KSkKICNlbmRpZgogCiAvLyBBIG1hY3JvIHRvIGxvZyBhIHBlcmZvcm1hbmNlIGV2ZW50IGFyb3Vu
ZCBhIHNjb3BlLgotI2lmIGRlZmluZWQoQU5HTEVfRElTQUJMRV9UUkFDRSkgJiYgZGVmaW5lZChB
TkdMRV9ESVNBQkxFX1BFUkYpCi0jZGVmaW5lIEVWRU5UKG1lc3NhZ2UsIC4uLikgKHZvaWQoMCkp
Ci0jZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX1RSQUNF
KSB8fCBkZWZpbmVkKEFOR0xFX0VOQUJMRV9QRVJGKQorI2lmIGRlZmluZWQoX01TQ19WRVIpCiAj
ZGVmaW5lIEVWRU5UKG1lc3NhZ2UsIC4uLikgZ2w6OlNjb3BlZFBlcmZFdmVudEhlbHBlciBzY29w
ZWRQZXJmRXZlbnRIZWxwZXIgIyMgX19MSU5FX18oX19GVU5DVElPTl9fIG1lc3NhZ2UgIlxuIiwg
X19WQV9BUkdTX18pOwogI2Vsc2UKICNkZWZpbmUgRVZFTlQobWVzc2FnZSwgLi4uKSBnbDo6U2Nv
cGVkUGVyZkV2ZW50SGVscGVyIHNjb3BlZFBlcmZFdmVudEhlbHBlcihtZXNzYWdlICJcbiIsICMj
X19WQV9BUkdTX18pOworI2VuZGlmIC8vIF9NU0NfVkVSCisjZWxzZQorI2RlZmluZSBFVkVOVCht
ZXNzYWdlLCAuLi4pICh2b2lkKDApKQogI2VuZGlmCiAKIC8vIEEgbWFjcm8gYXNzZXJ0aW5nIGEg
Y29uZGl0aW9uIGFuZCBvdXRwdXR0aW5nIGZhaWx1cmVzIHRvIHRoZSBkZWJ1ZyBsb2cKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZXZlbnRfdHJhY2VyLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZXZlbnRfdHJhY2VyLmNwcApp
bmRleCA5NmNiYjAxMDYxNGNlOTZjN2Y1MGFiNmYwM2FjY2JiZmYyNWE1MzljLi4xNDIzNzNkMTNm
MjQ4YjcwNGFjNDhmNzBlMWJmNTZkNmMzZTgwMDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tbW9uL2V2ZW50X3RyYWNlci5jcHAKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbW1vbi9ldmVudF90cmFjZXIuY3BwCkBAIC0xNCw3ICsxNCw3IEBA
IEFkZFRyYWNlRXZlbnRGdW5jIGdfYWRkVHJhY2VFdmVudDsKIAogZXh0ZXJuICJDIiB7CiAKLXZv
aWQgX19zdGRjYWxsIFNldFRyYWNlRnVuY3Rpb25Qb2ludGVycyhHZXRDYXRlZ29yeUVuYWJsZWRG
bGFnRnVuYyBnZXRDYXRlZ29yeUVuYWJsZWRGbGFnLAordm9pZCBUUkFDRV9FTlRSWSBTZXRUcmFj
ZUZ1bmN0aW9uUG9pbnRlcnMoR2V0Q2F0ZWdvcnlFbmFibGVkRmxhZ0Z1bmMgZ2V0Q2F0ZWdvcnlF
bmFibGVkRmxhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRU
cmFjZUV2ZW50RnVuYyBhZGRUcmFjZUV2ZW50KQogewogICAgIGdsOjpnX2dldENhdGVnb3J5RW5h
YmxlZEZsYWcgPSBnZXRDYXRlZ29yeUVuYWJsZWRGbGFnOwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9ldmVudF90cmFjZXIuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21tb24vZXZlbnRfdHJhY2VyLmgKaW5kZXggYWUzOTdlN2RiOTlhYWJl
NDNhOGFlNWRlNzA5YzVjZjllY2QyYWYxOC4uMTRiN2IyOThmZDg0N2NkYmE1MjE2YzI0M2RhNzVh
YmIzOTMxMDU1YiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1v
bi9ldmVudF90cmFjZXIuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9u
L2V2ZW50X3RyYWNlci5oCkBAIC01LDYgKzUsMTQgQEAKICNpZm5kZWYgQ09NTU9OX0VWRU5UX1RS
QUNFUl9IXwogI2RlZmluZSBDT01NT05fRVZFTlRfVFJBQ0VSX0hfCiAKKyNpZiAhZGVmaW5lZChU
UkFDRV9FTlRSWSkKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyNkZWZpbmUgVFJBQ0VfRU5UUlkgX19z
dGRjYWxsCisjZWxzZQorI2RlZmluZSBUUkFDRV9FTlRSWQorI2VuZGlmIC8vIC8vIF9XSU4zMgor
I2VuZGlmIC8vVFJBQ0VfRU5UUlkKKwogZXh0ZXJuICJDIiB7CiAKIHR5cGVkZWYgY29uc3QgdW5z
aWduZWQgY2hhciogKCpHZXRDYXRlZ29yeUVuYWJsZWRGbGFnRnVuYykoY29uc3QgY2hhciogbmFt
ZSk7CkBAIC0xNCw4ICsyMiw4IEBAIHR5cGVkZWYgdm9pZCAoKkFkZFRyYWNlRXZlbnRGdW5jKShj
aGFyIHBoYXNlLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBjYXRlZ29yeUdyb3VwCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBmbGFncyk7CiAKIC8vIGV4dGVy
biAiQyIgc28gdGhhdCBpdCBoYXMgYSByZWFzb25hYmxlIG5hbWUgZm9yIEdldFByb2NBZGRyZXNz
Lgotdm9pZCBfX3N0ZGNhbGwgU2V0VHJhY2VGdW5jdGlvblBvaW50ZXJzKEdldENhdGVnb3J5RW5h
YmxlZEZsYWdGdW5jIGdldF9jYXRlZ29yeV9lbmFibGVkX2ZsYWcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQWRkVHJhY2VFdmVudEZ1bmMgYWRkX3RyYWNlX2V2ZW50
X2Z1bmMpOwordm9pZCBUUkFDRV9FTlRSWSBTZXRUcmFjZUZ1bmN0aW9uUG9pbnRlcnMoR2V0Q2F0
ZWdvcnlFbmFibGVkRmxhZ0Z1bmMgZ2V0X2NhdGVnb3J5X2VuYWJsZWRfZmxhZywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZFRyYWNlRXZlbnRGdW5jIGFkZF90
cmFjZV9ldmVudF9mdW5jKTsKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tbW9uL3ZlcnNpb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21tb24vdmVyc2lvbi5oCmluZGV4IDlmMjIxZjNhY2MxZjJhZTM5MGU3NmM4MzJkOTI1MDFkM2Fh
ODc0N2IuLmY2YWUxOWY1NDFjMjYxMTFiYmRlNmYzMTM3ODhiOWJiZGY4ZjRhOTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdmVyc2lvbi5oCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdmVyc2lvbi5oCkBAIC0xLDEyICsxLDEy
IEBACi0jZGVmaW5lIE1BSk9SX1ZFUlNJT04gMQotI2RlZmluZSBNSU5PUl9WRVJTSU9OIDIKLSNk
ZWZpbmUgQlVJTERfVkVSU0lPTiAwCi0jZGVmaW5lIEJVSUxEX1JFVklTSU9OIDI0NTAKKyNpbmNs
dWRlICJjb21taXQuaCIKIAotI2RlZmluZSBTVFJJTkdJRlkoeCkgI3gKLSNkZWZpbmUgTUFDUk9f
U1RSSU5HSUZZKHgpIFNUUklOR0lGWSh4KQorI2RlZmluZSBBTkdMRV9NQUpPUl9WRVJTSU9OIDEK
KyNkZWZpbmUgQU5HTEVfTUlOT1JfVkVSU0lPTiAzCiAKLSNkZWZpbmUgUkVWSVNJT05fU1RSSU5H
IE1BQ1JPX1NUUklOR0lGWShCVUlMRF9SRVZJU0lPTikKLSNkZWZpbmUgVkVSU0lPTl9TVFJJTkcg
TUFDUk9fU1RSSU5HSUZZKE1BSk9SX1ZFUlNJT04pICIuIiBNQUNST19TVFJJTkdJRlkoTUlOT1Jf
VkVSU0lPTikgIi4iIE1BQ1JPX1NUUklOR0lGWShCVUlMRF9WRVJTSU9OKSAiLiIgTUFDUk9fU1RS
SU5HSUZZKEJVSUxEX1JFVklTSU9OKQorI2RlZmluZSBBTkdMRV9TVFJJTkdJRlkoeCkgICAgICAg
I3gKKyNkZWZpbmUgQU5HTEVfTUFDUk9fU1RSSU5HSUZZKHgpIEFOR0xFX1NUUklOR0lGWSh4KQog
Ci0jZGVmaW5lIFZFUlNJT05fRFdPUkQgKChNQUpPUl9WRVJTSU9OIDw8IDI0KSB8IChNSU5PUl9W
RVJTSU9OIDw8IDE2KSB8IEJVSUxEX1JFVklTSU9OKQorI2RlZmluZSBBTkdMRV9WRVJTSU9OX1NU
UklORyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFOR0xFX01BQ1JPX1NUUklOR0lGWShB
TkdMRV9NQUpPUl9WRVJTSU9OKSAiLiIgXAorICAgIEFOR0xFX01BQ1JPX1NUUklOR0lGWShBTkdM
RV9NSU5PUl9WRVJTSU9OKSAiLiIgXAorICAgIEFOR0xFX0NPTU1JVF9IQVNICmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvNjRiaXQtbGV4ZXItc2FmZXR5
LnBhdGNoIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyLzY0Yml0LWxleGVy
LXNhZmV0eS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FmOTFmNTc2NTM0
MzM3YWZmNmZmN2Q2ZGY0N2FiY2RmYzZjNmQxZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
NjRiaXQtbGV4ZXItc2FmZXR5LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTc3ICswLDAgQEAK
LS0tLSBhL3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAKLSsrKyBiL3NyYy9jb21waWxlci9n
bHNsYW5nX2xleC5jcHAKLUBAIC02OCw2ICs2OCw3IEBAIHR5cGVkZWYgaW50MTZfdCBmbGV4X2lu
dDE2X3Q7Ci0gdHlwZWRlZiB1aW50MTZfdCBmbGV4X3VpbnQxNl90OwotIHR5cGVkZWYgaW50MzJf
dCBmbGV4X2ludDMyX3Q7Ci0gdHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90OwotK3R5cGVk
ZWYgdWludDY0X3QgZmxleF91aW50NjRfdDsKLSAjZWxzZQotIHR5cGVkZWYgc2lnbmVkIGNoYXIg
ZmxleF9pbnQ4X3Q7Ci0gdHlwZWRlZiBzaG9ydCBpbnQgZmxleF9pbnQxNl90OwotQEAgLTE5MSw2
ICsxOTIsMTEgQEAgdHlwZWRlZiB2b2lkKiB5eXNjYW5fdDsKLSB0eXBlZGVmIHN0cnVjdCB5eV9i
dWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFURTsKLSAjZW5kaWYKLSAKLSsjaWZuZGVmIFlZX1RZ
UEVERUZfWVlfU0laRV9UCi0rI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAotK3R5cGVkZWYg
c2l6ZV90IHl5X3NpemVfdDsKLSsjZW5kaWYKLSsKLSAjZGVmaW5lIEVPQl9BQ1RfQ09OVElOVUVf
U0NBTiAwCi0gI2RlZmluZSBFT0JfQUNUX0VORF9PRl9GSUxFIDEKLSAjZGVmaW5lIEVPQl9BQ1Rf
TEFTVF9NQVRDSCAyCi1AQCAtMjA0LDcgKzIxMCw3IEBAIHR5cGVkZWYgc3RydWN0IHl5X2J1ZmZl
cl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOwotICAgICAgKi8KLSAgICAgI2RlZmluZSAgWVlfTEVT
U19MSU5FTk8obikgXAotICAgICAgICAgICAgIGRvIHsgXAotLSAgICAgICAgICAgICAgICBpbnQg
eXlsO1wKLSsgICAgICAgICAgICAgICAgeXlfc2l6ZV90IHl5bDtcCi0gICAgICAgICAgICAgICAg
IGZvciAoIHl5bCA9IG47IHl5bCA8IHl5bGVuZzsgKyt5eWwgKVwKLSAgICAgICAgICAgICAgICAg
ICAgIGlmICggeXl0ZXh0W3l5bF0gPT0gJ1xuJyApXAotICAgICAgICAgICAgICAgICAgICAgICAg
IC0teXlsaW5lbm87XAotQEAgLTIyNiwxMSArMjMyLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgeXlfYnVm
ZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7Ci0gCi0gI2RlZmluZSB1bnB1dChjKSB5eXVucHV0
KCBjLCB5eWctPnl5dGV4dF9wdHIgLCB5eXNjYW5uZXIgKQotIAotLSNpZm5kZWYgWVlfVFlQRURF
Rl9ZWV9TSVpFX1QKLS0jZGVmaW5lIFlZX1RZUEVERUZfWVlfU0laRV9UCi0tdHlwZWRlZiBzaXpl
X3QgeXlfc2l6ZV90OwotLSNlbmRpZgotLQotICNpZm5kZWYgWVlfU1RSVUNUX1lZX0JVRkZFUl9T
VEFURQotICNkZWZpbmUgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQotIHN0cnVjdCB5eV9idWZm
ZXJfc3RhdGUKLUBAIC0yNDgsNyArMjQ5LDcgQEAgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQotIAkv
KiBOdW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBub3QgaW5jbHVkaW5n
IEVPQgotIAkgKiBjaGFyYWN0ZXJzLgotIAkgKi8KLS0JaW50IHl5X25fY2hhcnM7Ci0rCXl5X3Np
emVfdCB5eV9uX2NoYXJzOwotIAotIAkvKiBXaGV0aGVyIHdlICJvd24iIHRoZSBidWZmZXIgLSBp
LmUuLCB3ZSBrbm93IHdlIGNyZWF0ZWQgaXQsCi0gCSAqIGFuZCBjYW4gcmVhbGxvYygpIGl0IHRv
IGdyb3cgaXQsIGFuZCBzaG91bGQgZnJlZSgpIGl0IHRvCi1AQCAtMzI3LDcgKzMyOCw3IEBAIHN0
YXRpYyB2b2lkIHl5X2luaXRfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYixGSUxFICpmaWxlICx5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAKLSBZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9idWZmZXIg
KGNoYXIgKmJhc2UseXlfc2l6ZV90IHNpemUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotIFlZX0JV
RkZFUl9TVEFURSB5eV9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICp5eV9zdHIgLHl5c2Nhbl90
IHl5c2Nhbm5lciApOwotLVlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J5dGVzICh5eWNvbnN0IGNo
YXIgKmJ5dGVzLGludCBsZW4gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotK1lZX0JVRkZFUl9TVEFU
RSB5eV9zY2FuX2J5dGVzICh5eWNvbnN0IGNoYXIgKmJ5dGVzLHl5X3NpemVfdCBsZW4gLHl5c2Nh
bl90IHl5c2Nhbm5lciApOwotIAotIHZvaWQgKnl5YWxsb2MgKHl5X3NpemVfdCAseXlzY2FuX3Qg
eXlzY2FubmVyICk7Ci0gdm9pZCAqeXlyZWFsbG9jICh2b2lkICoseXlfc2l6ZV90ICx5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKLUBAIC0zNzgsNyArMzc5LDcgQEAgc3RhdGljIHZvaWQgeXlfZmF0YWxf
ZXJyb3IgKHl5Y29uc3QgY2hhciBtc2dbXSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gICovCi0g
I2RlZmluZSBZWV9ET19CRUZPUkVfQUNUSU9OIFwKLSAJeXlnLT55eXRleHRfcHRyID0geXlfYnA7
IFwKLS0JeXlsZW5nID0gKHNpemVfdCkgKHl5X2NwIC0geXlfYnApOyBcCi0rCXl5bGVuZyA9ICh5
eV9zaXplX3QpICh5eV9jcCAtIHl5X2JwKTsgXAotIAl5eWctPnl5X2hvbGRfY2hhciA9ICp5eV9j
cDsgXAotIAkqeXlfY3AgPSAnXDAnOyBcCi0gCXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwOwotQEAg
LTEwMzUsOCArMTAzNiw4IEBAIHN0cnVjdCB5eWd1dHNfdAotICAgICBzaXplX3QgeXlfYnVmZmVy
X3N0YWNrX21heDsgLyoqPCBjYXBhY2l0eSBvZiBzdGFjay4gKi8KLSAgICAgWVlfQlVGRkVSX1NU
QVRFICogeXlfYnVmZmVyX3N0YWNrOyAvKio8IFN0YWNrIGFzIGFuIGFycmF5LiAqLwotICAgICBj
aGFyIHl5X2hvbGRfY2hhcjsKLS0gICAgaW50IHl5X25fY2hhcnM7Ci0tICAgIGludCB5eWxlbmdf
cjsKLSsgICAgeXlfc2l6ZV90IHl5X25fY2hhcnM7Ci0rICAgIHl5X3NpemVfdCB5eWxlbmdfcjsK
LSAgICAgY2hhciAqeXlfY19idWZfcDsKLSAgICAgaW50IHl5X2luaXQ7Ci0gICAgIGludCB5eV9z
dGFydDsKLUBAIC0xMDg5LDcgKzEwOTAsNyBAQCBGSUxFICp5eWdldF9vdXQgKHl5c2Nhbl90IHl5
c2Nhbm5lciApOwotIAotIHZvaWQgeXlzZXRfb3V0ICAoRklMRSAqIG91dF9zdHIgLHl5c2Nhbl90
IHl5c2Nhbm5lciApOwotIAotLWludCB5eWdldF9sZW5nICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
LSt5eV9zaXplX3QgeXlnZXRfbGVuZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gCi0gY2hhciAq
eXlnZXRfdGV4dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gCi1AQCAtMTE1OCw3ICsxMTU5LDcg
QEAgc3RhdGljIGludCBpbnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gCWlmICggWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRlcmFjdGl2ZSApIFwKLSAJCXsgXAotIAkJaW50
IGMgPSAnKic7IFwKLS0JCWludCBuOyBcCi0rCQl5eV9zaXplX3QgbjsgXAotIAkJZm9yICggbiA9
IDA7IG4gPCBtYXhfc2l6ZSAmJiBcCi0gCQkJICAgICAoYyA9IGdldGMoIHl5aW4gKSkgIT0gRU9G
ICYmIGMgIT0gJ1xuJzsgKytuICkgXAotIAkJCWJ1ZltuXSA9IChjaGFyKSBjOyBcCi1AQCAtMTMx
Nyw3ICsxMzE4LDcgQEAgeXlfZmluZF9hY3Rpb246Ci0gCi0gCQlpZiAoIHl5X2FjdCAhPSBZWV9F
TkRfT0ZfQlVGRkVSICYmIHl5X3J1bGVfY2FuX21hdGNoX2VvbFt5eV9hY3RdICkKLSAJCQl7Ci0t
CQkJaW50IHl5bDsKLSsJCQl5eV9zaXplX3QgeXlsOwotIAkJCWZvciAoIHl5bCA9IDA7IHl5bCA8
IHl5bGVuZzsgKyt5eWwgKQotIAkJCQlpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKQotIAkJCQkJ
ICAgCi1AQCAtMjIwMyw3ICsyMjA0LDcgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIg
KHl5c2Nhbl90IHl5c2Nhbm5lcikKLSAKLSAJZWxzZQotIAkJewotLQkJCWludCBudW1fdG9fcmVh
ZCA9Ci0rCQkJeXlfc2l6ZV90IG51bV90b19yZWFkID0KLSAJCQlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2J1Zl9zaXplIC0gbnVtYmVyX3RvX21vdmUgLSAxOwotIAotIAkJd2hpbGUgKCBu
dW1fdG9fcmVhZCA8PSAwICkKLUBAIC0yMjE3LDcgKzIyMTgsNyBAQCBzdGF0aWMgaW50IHl5X2dl
dF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQotIAotIAkJCWlmICggYi0+eXlfaXNf
b3VyX2J1ZmZlciApCi0gCQkJCXsKLS0JCQkJaW50IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUg
KiAyOwotKwkJCQl5eV9zaXplX3QgbmV3X3NpemUgPSBiLT55eV9idWZfc2l6ZSAqIDI7Ci0gCi0g
CQkJCWlmICggbmV3X3NpemUgPD0gMCApCi0gCQkJCQliLT55eV9idWZfc2l6ZSArPSBiLT55eV9i
dWZfc2l6ZSAvIDg7Ci1AQCAtMjI0OCw3ICsyMjQ5LDcgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4
dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLSAKLSAJCS8qIFJlYWQgaW4gbW9yZSBkYXRh
LiAqLwotIAkJWVlfSU5QVVQoICgmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZb
bnVtYmVyX3RvX21vdmVdKSwKLS0JCQl5eWctPnl5X25fY2hhcnMsIChzaXplX3QpIG51bV90b19y
ZWFkICk7Ci0rCQkJeXlnLT55eV9uX2NoYXJzLCBudW1fdG9fcmVhZCApOwotIAotIAkJWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOwotIAkJfQot
QEAgLTIzNzMsNyArMjM3NCw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNj
YW5fdCB5eXNjYW5uZXIpCi0gCi0gCQllbHNlCi0gCQkJeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8K
LS0JCQlpbnQgb2Zmc2V0ID0geXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyOwotKwkJ
CXl5X3NpemVfdCBvZmZzZXQgPSB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHI7Ci0g
CQkJKyt5eWctPnl5X2NfYnVmX3A7Ci0gCi0gCQkJc3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVy
KCB5eXNjYW5uZXIgKSApCi1AQCAtMjY2MCw3ICsyNjYxLDcgQEAgdm9pZCB5eXBvcF9idWZmZXJf
c3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLSAgKi8KLSBzdGF0aWMgdm9pZCB5eWVuc3VyZV9i
dWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLSB7Ci0tCWludCBudW1fdG9fYWxsb2M7
Ci0rCXl5X3NpemVfdCBudW1fdG9fYWxsb2M7Ci0gICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAKLSAJaWYgKCF5eWctPnl5X2J1ZmZlcl9z
dGFjaykgewotQEAgLTI3NTgsMTIgKzI3NTksMTEgQEAgWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5f
c3RyaW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLSAgKiBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAgKiBAcmV0dXJuIHRoZSBuZXds
eSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KLSAgKi8KLS1ZWV9CVUZGRVJfU1RBVEUg
eXlfc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIGludCAgX3l5Ynl0ZXNfbGVu
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQotK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J5dGVzICAo
eXljb25zdCBjaGFyICogeXlieXRlcywgeXlfc2l6ZV90ICBfeXlieXRlc19sZW4gLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCi0gewotIAlZWV9CVUZGRVJfU1RBVEUgYjsKLSAJY2hhciAqYnVmOwotLQl5
eV9zaXplX3QgbjsKLS0JaW50IGk7Ci0rCXl5X3NpemVfdCBuLCBpOwotICAgICAKLSAJLyogR2V0
IG1lbW9yeSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3IgdHJhaWxpbmcgRU9C
J3MuICovCi0gCW4gPSBfeXlieXRlc19sZW4gKyAyOwotQEAgLTI5MTMsNyArMjkxMyw3IEBAIEZJ
TEUgKnl5Z2V0X291dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLSAvKiogR2V0IHRoZSBsZW5ndGgg
b2YgdGhlIGN1cnJlbnQgdG9rZW4uCi0gICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBv
YmplY3QuCi0gICovCi0taW50IHl5Z2V0X2xlbmcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi0reXlf
c2l6ZV90IHl5Z2V0X2xlbmcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi0gewotICAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgIHJldHVy
biB5eWxlbmc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvQmFzZVR5cGVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQmFz
ZVR5cGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2MzFmNGY3NzlmYTdlZmE3
OTNiZDYzYWFhMjFjYzVmYzkxOGRmZjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Jhc2VU
eXBlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLSNpZm5kZWYgX0JBU0lDVFlQRVNfSU5DTFVERURfCi0jZGVmaW5lIF9CQVNJQ1RZUEVTX0lO
Q0xVREVEXwotCi0vLwotLy8gUHJlY2lzaW9uIHF1YWxpZmllcnMKLS8vCi1lbnVtIFRQcmVjaXNp
b24KLXsKLSAgICAvLyBUaGVzZSBuZWVkIHRvIGJlIGtlcHQgc29ydGVkCi0gICAgRWJwVW5kZWZp
bmVkLAotICAgIEVicExvdywKLSAgICBFYnBNZWRpdW0sCi0gICAgRWJwSGlnaAotfTsKLQotaW5s
aW5lIGNvbnN0IGNoYXIqIGdldFByZWNpc2lvblN0cmluZyhUUHJlY2lzaW9uIHApCi17Ci0gICAg
c3dpdGNoKHApCi0gICAgewotICAgIGNhc2UgRWJwSGlnaDoJCXJldHVybiAiaGlnaHAiOwkJYnJl
YWs7Ci0gICAgY2FzZSBFYnBNZWRpdW06CQlyZXR1cm4gIm1lZGl1bXAiOwlicmVhazsKLSAgICBj
YXNlIEVicExvdzoJCXJldHVybiAibG93cCI7CQlicmVhazsKLSAgICBkZWZhdWx0OgkJCXJldHVy
biAibWVkaXVtcCI7ICAgYnJlYWs7ICAgLy8gU2FmZXN0IGZhbGxiYWNrCi0gICAgfQotfQotCi0v
LwotLy8gQmFzaWMgdHlwZS4gIEFycmF5cywgdmVjdG9ycywgZXRjLiwgYXJlIG9ydGhvZ29uYWwg
dG8gdGhpcy4KLS8vCi1lbnVtIFRCYXNpY1R5cGUKLXsKLSAgICBFYnRWb2lkLAotICAgIEVidEZs
b2F0LAotICAgIEVidEludCwKLSAgICBFYnRCb29sLAotICAgIEVidEd1YXJkU2FtcGxlckJlZ2lu
LCAgLy8gbm9uIHR5cGU6ICBzZWUgaW1wbGVtZW50YXRpb24gb2YgSXNTYW1wbGVyKCkKLSAgICBF
YnRTYW1wbGVyMkQsCi0gICAgRWJ0U2FtcGxlckN1YmUsCi0gICAgRWJ0U2FtcGxlckV4dGVybmFs
T0VTLCAgLy8gT25seSB2YWxpZCBpZiBPRVNfRUdMX2ltYWdlX2V4dGVybmFsIGV4aXN0cy4KLSAg
ICBFYnRTYW1wbGVyMkRSZWN0LCAgICAgICAvLyBPbmx5IHZhbGlkIGlmIEdMX0FSQl90ZXh0dXJl
X3JlY3RhbmdsZSBleGlzdHMuCi0gICAgRWJ0R3VhcmRTYW1wbGVyRW5kLCAgICAvLyBub24gdHlw
ZTogIHNlZSBpbXBsZW1lbnRhdGlvbiBvZiBJc1NhbXBsZXIoKQotICAgIEVidFN0cnVjdCwKLSAg
ICBFYnRBZGRyZXNzLCAgICAgICAgICAgIC8vIHNob3VsZCBiZSBkZXByZWNhdGVkPz8KLSAgICBF
YnRJbnZhcmlhbnQgICAgICAgICAgLy8gdXNlZCBhcyBhIHR5cGUgd2hlbiBxdWFsaWZ5aW5nIGEg
cHJldmlvdXNseSBkZWNsYXJlZCB2YXJpYWJsZSBhcyBiZWluZyBpbnZhcmlhbnQKLX07Ci0KLWlu
bGluZSBjb25zdCBjaGFyKiBnZXRCYXNpY1N0cmluZyhUQmFzaWNUeXBlIHQpCi17Ci0gICAgc3dp
dGNoICh0KQotICAgIHsKLSAgICBjYXNlIEVidFZvaWQ6ICAgICAgICAgICAgICByZXR1cm4gInZv
aWQiOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRGbG9hdDogICAgICAgICAgICAg
cmV0dXJuICJmbG9hdCI7ICAgICAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0SW50OiAgICAg
ICAgICAgICAgIHJldHVybiAiaW50IjsgICAgICAgICAgICAgICBicmVhazsKLSAgICBjYXNlIEVi
dEJvb2w6ICAgICAgICAgICAgICByZXR1cm4gImJvb2wiOyAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkQiOyAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6ICAgICAgIHJldHVybiAic2FtcGxlckN1
YmUiOyAgICAgICBicmVhazsKLSAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzogcmV0dXJu
ICJzYW1wbGVyRXh0ZXJuYWxPRVMiOyBicmVhazsKLSAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6
ICAgICByZXR1cm4gInNhbXBsZXIyRFJlY3QiOyAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRTdHJ1
Y3Q6ICAgICAgICAgICAgcmV0dXJuICJzdHJ1Y3R1cmUiOyAgICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6ICAgICAgICAgICAgICAgICAgIHJldHVybiAidW5rbm93biB0eXBlIjsKLSAgICB9Ci19
Ci0KLWlubGluZSBib29sIElzU2FtcGxlcihUQmFzaWNUeXBlIHR5cGUpCi17Ci0gICAgcmV0dXJu
IHR5cGUgPiBFYnRHdWFyZFNhbXBsZXJCZWdpbiAmJiB0eXBlIDwgRWJ0R3VhcmRTYW1wbGVyRW5k
OwotfQotCi0vLwotLy8gUXVhbGlmaWVycyBhbmQgYnVpbHQtaW5zLiAgVGhlc2UgYXJlIG1haW5s
eSB1c2VkIHRvIHNlZSB3aGF0IGNhbiBiZSByZWFkCi0vLyBvciB3cml0dGVuLCBhbmQgYnkgdGhl
IG1hY2hpbmUgZGVwZW5kZW50IHRyYW5zbGF0b3IgdG8ga25vdyB3aGljaCByZWdpc3RlcnMKLS8v
IHRvIGFsbG9jYXRlIHZhcmlhYmxlcyBpbi4gIFNpbmNlIGJ1aWx0LWlucyB0ZW5kIHRvIGdvIHRv
IGRpZmZlcmVudCByZWdpc3RlcnMKLS8vIHRoYW4gdmFyeWluZyBvciB1bmlmb3JtLCBpdCBtYWtl
cyBzZW5zZSB0aGV5IGFyZSBwZWVycywgbm90IHN1Yi1jbGFzc2VzLgotLy8KLWVudW0gVFF1YWxp
ZmllcgotewotICAgIEV2cVRlbXBvcmFyeSwgICAgIC8vIEZvciB0ZW1wb3JhcmllcyAod2l0aGlu
IGEgZnVuY3Rpb24pLCByZWFkL3dyaXRlCi0gICAgRXZxR2xvYmFsLCAgICAgICAgLy8gRm9yIGds
b2JhbHMgcmVhZC93cml0ZQotICAgIEV2cUNvbnN0LCAgICAgICAgIC8vIFVzZXIgZGVmaW5lZCBj
b25zdGFudHMgYW5kIG5vbi1vdXRwdXQgcGFyYW1ldGVycyBpbiBmdW5jdGlvbnMKLSAgICBFdnFB
dHRyaWJ1dGUsICAgICAvLyBSZWFkb25seQotICAgIEV2cVZhcnlpbmdJbiwgICAgIC8vIHJlYWRv
bmx5LCBmcmFnbWVudCBzaGFkZXJzIG9ubHkKLSAgICBFdnFWYXJ5aW5nT3V0LCAgICAvLyB2ZXJ0
ZXggc2hhZGVycyBvbmx5ICByZWFkL3dyaXRlCi0gICAgRXZxSW52YXJpYW50VmFyeWluZ0luLCAg
ICAgLy8gcmVhZG9ubHksIGZyYWdtZW50IHNoYWRlcnMgb25seQotICAgIEV2cUludmFyaWFudFZh
cnlpbmdPdXQsICAgIC8vIHZlcnRleCBzaGFkZXJzIG9ubHkgIHJlYWQvd3JpdGUKLSAgICBFdnFV
bmlmb3JtLCAgICAgICAvLyBSZWFkb25seSwgdmVydGV4IGFuZCBmcmFnbWVudAotCi0gICAgLy8g
cGFyYW1ldGVycwotICAgIEV2cUluLAotICAgIEV2cU91dCwKLSAgICBFdnFJbk91dCwKLSAgICBF
dnFDb25zdFJlYWRPbmx5LAotCi0gICAgLy8gYnVpbHQtaW5zIHdyaXR0ZW4gYnkgdmVydGV4IHNo
YWRlcgotICAgIEV2cVBvc2l0aW9uLAotICAgIEV2cVBvaW50U2l6ZSwKLQotICAgIC8vIGJ1aWx0
LWlucyByZWFkIGJ5IGZyYWdtZW50IHNoYWRlcgotICAgIEV2cUZyYWdDb29yZCwKLSAgICBFdnFG
cm9udEZhY2luZywKLSAgICBFdnFQb2ludENvb3JkLAotCi0gICAgLy8gYnVpbHQtaW5zIHdyaXR0
ZW4gYnkgZnJhZ21lbnQgc2hhZGVyCi0gICAgRXZxRnJhZ0NvbG9yLAotICAgIEV2cUZyYWdEYXRh
LAotICAgIEV2cUZyYWdEZXB0aCwKLQotICAgIC8vIGVuZCBvZiBsaXN0Ci0gICAgRXZxTGFzdAot
fTsKLQotLy8KLS8vIFRoaXMgaXMganVzdCBmb3IgZGVidWcgcHJpbnQgb3V0LCBjYXJyaWVkIGFs
b25nIHdpdGggdGhlIGRlZmluaXRpb25zIGFib3ZlLgotLy8KLWlubGluZSBjb25zdCBjaGFyKiBn
ZXRRdWFsaWZpZXJTdHJpbmcoVFF1YWxpZmllciBxKQotewotICAgIHN3aXRjaChxKQotICAgIHsK
LSAgICBjYXNlIEV2cVRlbXBvcmFyeTogICAgICByZXR1cm4gIlRlbXBvcmFyeSI7ICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBFdnFHbG9iYWw6ICAgICAgICAgcmV0dXJuICJHbG9iYWwiOyAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRXZxQ29uc3Q6ICAgICAgICAgIHJldHVybiAiY29uc3QiOyAgICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEV2cUNvbnN0UmVhZE9ubHk6ICByZXR1cm4gImNvbnN0Ijsg
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFBdHRyaWJ1dGU6ICAgICAgcmV0dXJuICJhdHRy
aWJ1dGUiOyAgICAgIGJyZWFrOwotICAgIGNhc2UgRXZxVmFyeWluZ0luOiAgICAgIHJldHVybiAi
dmFyeWluZyI7ICAgICAgICBicmVhazsKLSAgICBjYXNlIEV2cVZhcnlpbmdPdXQ6ICAgICByZXR1
cm4gInZhcnlpbmciOyAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5n
SW46IHJldHVybiAiaW52YXJpYW50IHZhcnlpbmciOwlicmVhazsKLSAgICBjYXNlIEV2cUludmFy
aWFudFZhcnlpbmdPdXQ6cmV0dXJuICJpbnZhcmlhbnQgdmFyeWluZyI7CWJyZWFrOwotICAgIGNh
c2UgRXZxVW5pZm9ybTogICAgICAgIHJldHVybiAidW5pZm9ybSI7ICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEV2cUluOiAgICAgICAgICAgICByZXR1cm4gImluIjsgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBFdnFPdXQ6ICAgICAgICAgICAgcmV0dXJuICJvdXQiOyAgICAgICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgRXZxSW5PdXQ6ICAgICAgICAgIHJldHVybiAiaW5vdXQiOyAgICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEV2cVBvc2l0aW9uOiAgICAgICByZXR1cm4gIlBvc2l0aW9uIjsg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFQb2ludFNpemU6ICAgICAgcmV0dXJuICJQb2ludFNp
emUiOyAgICAgIGJyZWFrOwotICAgIGNhc2UgRXZxRnJhZ0Nvb3JkOiAgICAgIHJldHVybiAiRnJh
Z0Nvb3JkIjsgICAgICBicmVhazsKLSAgICBjYXNlIEV2cUZyb250RmFjaW5nOiAgICByZXR1cm4g
IkZyb250RmFjaW5nIjsgICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFGcmFnQ29sb3I6ICAgICAgcmV0
dXJuICJGcmFnQ29sb3IiOyAgICAgIGJyZWFrOwotICAgIGNhc2UgRXZxRnJhZ0RhdGE6ICAgICAg
IHJldHVybiAiRnJhZ0RhdGEiOyAgICAgIGJyZWFrOwotICAgIGNhc2UgRXZxRnJhZ0RlcHRoOiAg
ICAgIHJldHVybiAiRnJhZ0RlcHRoIjsgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6ICAgICAgICAg
ICAgICAgIHJldHVybiAidW5rbm93biBxdWFsaWZpZXIiOwotICAgIH0KLX0KLQotI2VuZGlmIC8v
IF9CQVNJQ1RZUEVTX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjNGIyNWYxM2YwYzYyZjBkMTQxYzhjNmU1ZWZl
OWM4NjQxYmEzZWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVt
dWxhdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQwNiArMCwwIEBACi0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
Ci0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCIKLQot
I2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCi0KLW5hbWVzcGFjZSB7Ci0KLS8vIHdl
IHVzZSBtYWNyb3MgaGVyZSBpbnN0ZWFkIG9mIGZ1bmN0aW9uIGRlZmluaXRpb25zIHRvIHdvcmsg
YXJvdW5kIG1vcmUgR0xTTAotLy8gY29tcGlsZXIgYnVncywgaW4gcGFydGljdWxhciBvbiBOVklE
SUEgaGFyZHdhcmUgb24gTWFjIE9TWC4gTWFjcm9zIGFyZQotLy8gcHJvYmxlbWF0aWMgYmVjYXVz
ZSBpZiB0aGUgYXJndW1lbnQgaGFzIHNpZGUtZWZmZWN0cyB0aGV5IHdpbGwgYmUgcmVwZWF0ZWRs
eQotLy8gZXZhbHVhdGVkLiBUaGlzIGlzIHVubGlrZWx5IHRvIHNob3cgdXAgaW4gcmVhbCBzaGFk
ZXJzLCBidXQgaXMgc29tZXRoaW5nIHRvCi0vLyBjb25zaWRlci4KLWNvbnN0IGNoYXIqIGtGdW5j
dGlvbkVtdWxhdGlvblZlcnRleFNvdXJjZVtdID0gewotICAgICIjZXJyb3Igbm8gZW11bGF0aW9u
IGZvciBjb3MoZmxvYXQpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgY29zKHZlYzIp
IiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgY29zKHZlYzMpIiwKLSAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgY29zKHZlYzQpIiwKLQotICAgICIjZGVmaW5lIHdlYmdsX2Rpc3Rh
bmNlX2VtdSh4LCB5KSAoKHgpID49ICh5KSA/ICh4KSAtICh5KSA6ICh5KSAtICh4KSkiLAotICAg
ICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkaXN0YW5jZSh2ZWMyLCB2ZWMyKSIsCi0gICAgIiNl
cnJvciBubyBlbXVsYXRpb24gZm9yIGRpc3RhbmNlKHZlYzMsIHZlYzMpIiwKLSAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UodmVjNCwgdmVjNCkiLAotCi0gICAgIiNkZWZpbmUg
d2ViZ2xfZG90X2VtdSh4LCB5KSAoKHgpICogKHkpKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRp
b24gZm9yIGRvdCh2ZWMyLCB2ZWMyKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRv
dCh2ZWMzLCB2ZWMzKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRvdCh2ZWM0LCB2
ZWM0KSIsCi0KLSAgICAiI2RlZmluZSB3ZWJnbF9sZW5ndGhfZW11KHgpICgoeCkgPj0gMC4wID8g
KHgpIDogLSh4KSkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBsZW5ndGgodmVjMiki
LAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBsZW5ndGgodmVjMykiLAotICAgICIjZXJy
b3Igbm8gZW11bGF0aW9uIGZvciBsZW5ndGgodmVjNCkiLAotCi0gICAgIiNkZWZpbmUgd2ViZ2xf
bm9ybWFsaXplX2VtdSh4KSAoKHgpID09IDAuMCA/IDAuMCA6ICgoeCkgPiAwLjAgPyAxLjAgOiAt
MS4wKSkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBub3JtYWxpemUodmVjMikiLAot
ICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBub3JtYWxpemUodmVjMykiLAotICAgICIjZXJy
b3Igbm8gZW11bGF0aW9uIGZvciBub3JtYWxpemUodmVjNCkiLAotCi0gICAgIiNkZWZpbmUgd2Vi
Z2xfcmVmbGVjdF9lbXUoSSwgTikgKChJKSAtIDIuMCAqIChOKSAqIChJKSAqIChOKSkiLAotICAg
ICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciByZWZsZWN0KHZlYzIsIHZlYzIpIiwKLSAgICAiI2Vy
cm9yIG5vIGVtdWxhdGlvbiBmb3IgcmVmbGVjdCh2ZWMzLCB2ZWMzKSIsCi0gICAgIiNlcnJvciBu
byBlbXVsYXRpb24gZm9yIHJlZmxlY3QodmVjNCwgdmVjNCkiCi19OwotCi1jb25zdCBjaGFyKiBr
RnVuY3Rpb25FbXVsYXRpb25GcmFnbWVudFNvdXJjZVtdID0gewotICAgICJ3ZWJnbF9lbXVfcHJl
Y2lzaW9uIGZsb2F0IHdlYmdsX2Nvc19lbXUod2ViZ2xfZW11X3ByZWNpc2lvbiBmbG9hdCBhKSB7
IHJldHVybiBjb3MoYSk7IH0iLAotICAgICJ3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzIgd2ViZ2xf
Y29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzIgYSkgeyByZXR1cm4gY29zKGEpOyB9IiwK
LSAgICAid2ViZ2xfZW11X3ByZWNpc2lvbiB2ZWMzIHdlYmdsX2Nvc19lbXUod2ViZ2xfZW11X3By
ZWNpc2lvbiB2ZWMzIGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCi0gICAgIndlYmdsX2VtdV9wcmVj
aXNpb24gdmVjNCB3ZWJnbF9jb3NfZW11KHdlYmdsX2VtdV9wcmVjaXNpb24gdmVjNCBhKSB7IHJl
dHVybiBjb3MoYSk7IH0iLAotCi0gICAgIiNkZWZpbmUgd2ViZ2xfZGlzdGFuY2VfZW11KHgsIHkp
ICgoeCkgPj0gKHkpID8gKHgpIC0gKHkpIDogKHkpIC0gKHgpKSIsCi0gICAgIiNlcnJvciBubyBl
bXVsYXRpb24gZm9yIGRpc3RhbmNlKHZlYzIsIHZlYzIpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxh
dGlvbiBmb3IgZGlzdGFuY2UodmVjMywgdmVjMykiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9u
IGZvciBkaXN0YW5jZSh2ZWM0LCB2ZWM0KSIsCi0KLSAgICAiI2RlZmluZSB3ZWJnbF9kb3RfZW11
KHgsIHkpICgoeCkgKiAoeSkpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZG90KHZl
YzIsIHZlYzIpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZG90KHZlYzMsIHZlYzMp
IiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZG90KHZlYzQsIHZlYzQpIiwKLQotICAg
ICIjZGVmaW5lIHdlYmdsX2xlbmd0aF9lbXUoeCkgKCh4KSA+PSAwLjAgPyAoeCkgOiAtKHgpKSIs
Ci0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2ZWMyKSIsCi0gICAgIiNlcnJv
ciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2ZWMzKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRp
b24gZm9yIGxlbmd0aCh2ZWM0KSIsCi0KLSAgICAiI2RlZmluZSB3ZWJnbF9ub3JtYWxpemVfZW11
KHgpICgoeCkgPT0gMC4wID8gMC4wIDogKCh4KSA+IDAuMCA/IDEuMCA6IC0xLjApKSIsCi0gICAg
IiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2ZWMyKSIsCi0gICAgIiNlcnJvciBu
byBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2ZWMzKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRp
b24gZm9yIG5vcm1hbGl6ZSh2ZWM0KSIsCi0KLSAgICAiI2RlZmluZSB3ZWJnbF9yZWZsZWN0X2Vt
dShJLCBOKSAoKEkpIC0gMi4wICogKE4pICogKEkpICogKE4pKSIsCi0gICAgIiNlcnJvciBubyBl
bXVsYXRpb24gZm9yIHJlZmxlY3QodmVjMiwgdmVjMikiLAotICAgICIjZXJyb3Igbm8gZW11bGF0
aW9uIGZvciByZWZsZWN0KHZlYzMsIHZlYzMpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBm
b3IgcmVmbGVjdCh2ZWM0LCB2ZWM0KSIKLX07Ci0KLWNvbnN0IGJvb2wga0Z1bmN0aW9uRW11bGF0
aW9uVmVydGV4TWFza1tdID0gewotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotICAgIC8vIFdvcmsg
YXJvdW5kIEFUSSBkcml2ZXIgYnVncyBpbiBNYWMuCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNv
czEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25D
b3MzCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczQKLSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9u
RGlzdGFuY2UxXzEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2UyXzIKLSAgICBmYWxz
ZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2UzXzMKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFu
Y2U0XzQKLSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uRG90MV8xCi0gICAgZmFsc2UsIC8vIFRGdW5j
dGlvbkRvdDJfMgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3QzXzMKLSAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uRG90NF80Ci0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkxlbmd0aDEKLSAgICBmYWxz
ZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgzCi0g
ICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDQKLSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uTm9y
bWFsaXplMQotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUyCi0gICAgZmFsc2UsIC8v
IFRGdW5jdGlvbk5vcm1hbGl6ZTMKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplNAot
ICAgIHRydWUsICAvLyBURnVuY3Rpb25SZWZsZWN0MV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlv
blJlZmxlY3QyXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDNfMwotICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25SZWZsZWN0NF80Ci0jZWxzZQotICAgIC8vIFdvcmsgYXJvdW5kIEQzRCBk
cml2ZXIgYnVnIGluIFdpbi4KLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMQotICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25Db3MyCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczMKLSAgICBmYWxz
ZSwgLy8gVEZ1bmN0aW9uQ29zNAotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTFfMQot
ICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTJfMgotICAgIGZhbHNlLCAvLyBURnVuY3Rp
b25EaXN0YW5jZTNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTRfNAotICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25Eb3QxXzEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90Ml8yCi0g
ICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3Q0
XzQKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMQotICAgIGZhbHNlLCAvLyBURnVuY3Rp
b25MZW5ndGgyCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDMKLSAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uTGVuZ3RoNAotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUxCi0gICAg
ZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9y
bWFsaXplMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemU0Ci0gICAgZmFsc2UsIC8v
IFRGdW5jdGlvblJlZmxlY3QxXzEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDJfMgot
ICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0M18zCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlv
blJlZmxlY3Q0XzQKLSNlbmRpZgotICAgIGZhbHNlICAvLyBURnVuY3Rpb25Vbmtub3duCi19Owot
Ci1jb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50TWFza1tdID0gewotI2lmIGRl
ZmluZWQoX19BUFBMRV9fKQotICAgIC8vIFdvcmsgYXJvdW5kIEFUSSBkcml2ZXIgYnVncyBpbiBN
YWMuCi0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczEKLSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9u
Q29zMgotICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3MzCi0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlv
bkNvczQKLSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uRGlzdGFuY2UxXzEKLSAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uRGlzdGFuY2UyXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2UzXzMK
LSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2U0XzQKLSAgICB0cnVlLCAgLy8gVEZ1bmN0
aW9uRG90MV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDJfMgotICAgIGZhbHNlLCAvLyBU
RnVuY3Rpb25Eb3QzXzMKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90NF80Ci0gICAgdHJ1ZSwg
IC8vIFRGdW5jdGlvbkxlbmd0aDEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMgotICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgzCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0
aDQKLSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMQotICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25Ob3JtYWxpemUyCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTMKLSAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplNAotICAgIHRydWUsICAvLyBURnVuY3Rpb25SZWZs
ZWN0MV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QyXzIKLSAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uUmVmbGVjdDNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0NF80Ci0j
ZWxzZQotICAgIC8vIFdvcmsgYXJvdW5kIEQzRCBkcml2ZXIgYnVnIGluIFdpbi4KLSAgICBmYWxz
ZSwgLy8gVEZ1bmN0aW9uQ29zMQotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MyCi0gICAgZmFs
c2UsIC8vIFRGdW5jdGlvbkNvczMKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zNAotICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTFfMQotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0
YW5jZTJfMgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTNfMwotICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25EaXN0YW5jZTRfNAotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3QxXzEKLSAg
ICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90Ml8yCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDNf
MwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3Q0XzQKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
TGVuZ3RoMQotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgyCi0gICAgZmFsc2UsIC8vIFRG
dW5jdGlvbkxlbmd0aDMKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoNAotICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25Ob3JtYWxpemUxCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6
ZTIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMwotICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25Ob3JtYWxpemU0Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QxXzEKLSAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDJfMgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZs
ZWN0M18zCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3Q0XzQKLSNlbmRpZgotICAgIGZh
bHNlICAvLyBURnVuY3Rpb25Vbmtub3duCi19OwotCi1jbGFzcyBCdWlsdEluRnVuY3Rpb25FbXVs
YXRpb25NYXJrZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7Ci1wdWJsaWM6Ci0gICAgQnVp
bHRJbkZ1bmN0aW9uRW11bGF0aW9uTWFya2VyKEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yJiBlbXVs
YXRvcikKLSAgICAgICAgOiBtRW11bGF0b3IoZW11bGF0b3IpCi0gICAgewotICAgIH0KLQotICAg
IHZpcnR1YWwgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUp
Ci0gICAgewotICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpIHsKLSAgICAgICAgICAgIGJv
b2wgbmVlZFRvRW11bGF0ZSA9IG1FbXVsYXRvci5TZXRGdW5jdGlvbkNhbGxlZCgKLSAgICAgICAg
ICAgICAgICBub2RlLT5nZXRPcCgpLCBub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKSk7Ci0g
ICAgICAgICAgICBpZiAobmVlZFRvRW11bGF0ZSkKLSAgICAgICAgICAgICAgICBub2RlLT5zZXRV
c2VFbXVsYXRlZEZ1bmN0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCi0gICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50
ZXJtQWdncmVnYXRlKiBub2RlKQotICAgIHsKLSAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0
KSB7Ci0gICAgICAgICAgICAvLyBIZXJlIHdlIGhhbmRsZSBhbGwgdGhlIGJ1aWx0LWluIGZ1bmN0
aW9ucyBpbnN0ZWFkIG9mIHRoZSBvbmVzIHdlCi0gICAgICAgICAgICAvLyBjdXJyZW50bHkgaWRl
bnRpZmllZCBhcyBwcm9ibGVtYXRpYy4KLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3Ao
KSkgewotICAgICAgICAgICAgICAgIGNhc2UgRU9wTGVzc1RoYW46Ci0gICAgICAgICAgICAgICAg
Y2FzZSBFT3BHcmVhdGVyVGhhbjoKLSAgICAgICAgICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1
YWw6Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgotICAgICAgICAg
ICAgICAgIGNhc2UgRU9wVmVjdG9yRXF1YWw6Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BWZWN0
b3JOb3RFcXVhbDoKLSAgICAgICAgICAgICAgICBjYXNlIEVPcE1vZDoKLSAgICAgICAgICAgICAg
ICBjYXNlIEVPcFBvdzoKLSAgICAgICAgICAgICAgICBjYXNlIEVPcEF0YW46Ci0gICAgICAgICAg
ICAgICAgY2FzZSBFT3BNaW46Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BNYXg6Ci0gICAgICAg
ICAgICAgICAgY2FzZSBFT3BDbGFtcDoKLSAgICAgICAgICAgICAgICBjYXNlIEVPcE1peDoKLSAg
ICAgICAgICAgICAgICBjYXNlIEVPcFN0ZXA6Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BTbW9v
dGhTdGVwOgotICAgICAgICAgICAgICAgIGNhc2UgRU9wRGlzdGFuY2U6Ci0gICAgICAgICAgICAg
ICAgY2FzZSBFT3BEb3Q6Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BDcm9zczoKLSAgICAgICAg
ICAgICAgICBjYXNlIEVPcEZhY2VGb3J3YXJkOgotICAgICAgICAgICAgICAgIGNhc2UgRU9wUmVm
bGVjdDoKLSAgICAgICAgICAgICAgICBjYXNlIEVPcFJlZnJhY3Q6Ci0gICAgICAgICAgICAgICAg
Y2FzZSBFT3BNdWw6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAg
fTsKLSAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBub2RlLT5n
ZXRTZXF1ZW5jZSgpOwotICAgICAgICAgICAgLy8gUmlnaHQgbm93IHdlIG9ubHkgaGFuZGxlIGJ1
aWx0LWluIGZ1bmN0aW9ucyB3aXRoIHR3byBwYXJhbWV0ZXJzLgotICAgICAgICAgICAgaWYgKHNl
cXVlbmNlLnNpemUoKSAhPSAyKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICAgICAgVEludGVybVR5cGVkKiBwYXJhbTEgPSBzZXF1ZW5jZVswXS0+Z2V0QXNUeXBlZCgpOwot
ICAgICAgICAgICAgVEludGVybVR5cGVkKiBwYXJhbTIgPSBzZXF1ZW5jZVsxXS0+Z2V0QXNUeXBl
ZCgpOwotICAgICAgICAgICAgaWYgKCFwYXJhbTEgfHwgIXBhcmFtMikKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGJvb2wgbmVlZFRvRW11bGF0ZSA9IG1FbXVsYXRv
ci5TZXRGdW5jdGlvbkNhbGxlZCgKLSAgICAgICAgICAgICAgICBub2RlLT5nZXRPcCgpLCBwYXJh
bTEtPmdldFR5cGUoKSwgcGFyYW0yLT5nZXRUeXBlKCkpOwotICAgICAgICAgICAgaWYgKG5lZWRU
b0VtdWxhdGUpCi0gICAgICAgICAgICAgICAgbm9kZS0+c2V0VXNlRW11bGF0ZWRGdW5jdGlvbigp
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBCdWlsdEluRnVuY3Rpb25FbXVsYXRvciYgbUVtdWxhdG9yOwotfTsKLQotfSAgLy8gYW5vbnlt
b3VzIG5hbWVwc2FjZQotCi1CdWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6QnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3IoU2hTaGFkZXJUeXBlIHNoYWRlclR5cGUpCi17Ci0gICAgaWYgKHNoYWRlclR5cGUg
PT0gU0hfRlJBR01FTlRfU0hBREVSKSB7Ci0gICAgICAgIG1GdW5jdGlvbk1hc2sgPSBrRnVuY3Rp
b25FbXVsYXRpb25GcmFnbWVudE1hc2s7Ci0gICAgICAgIG1GdW5jdGlvblNvdXJjZSA9IGtGdW5j
dGlvbkVtdWxhdGlvbkZyYWdtZW50U291cmNlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1GdW5j
dGlvbk1hc2sgPSBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrOwotICAgICAgICBtRnVuY3Rp
b25Tb3VyY2UgPSBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhTb3VyY2U7Ci0gICAgfQotfQotCi1i
b29sIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpTZXRGdW5jdGlvbkNhbGxlZCgKLSAgICBUT3Bl
cmF0b3Igb3AsIGNvbnN0IFRUeXBlJiBwYXJhbSkKLXsKLSAgICBUQnVpbHRJbkZ1bmN0aW9uIGZ1
bmN0aW9uID0gSWRlbnRpZnlGdW5jdGlvbihvcCwgcGFyYW0pOwotICAgIHJldHVybiBTZXRGdW5j
dGlvbkNhbGxlZChmdW5jdGlvbik7Ci19Ci0KLWJvb2wgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6
OlNldEZ1bmN0aW9uQ2FsbGVkKAotICAgIFRPcGVyYXRvciBvcCwgY29uc3QgVFR5cGUmIHBhcmFt
MSwgY29uc3QgVFR5cGUmIHBhcmFtMikKLXsKLSAgICBUQnVpbHRJbkZ1bmN0aW9uIGZ1bmN0aW9u
ID0gSWRlbnRpZnlGdW5jdGlvbihvcCwgcGFyYW0xLCBwYXJhbTIpOwotICAgIHJldHVybiBTZXRG
dW5jdGlvbkNhbGxlZChmdW5jdGlvbik7Ci19Ci0KLWJvb2wgQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3I6OlNldEZ1bmN0aW9uQ2FsbGVkKAotICAgIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpUQnVp
bHRJbkZ1bmN0aW9uIGZ1bmN0aW9uKSB7Ci0gICAgaWYgKGZ1bmN0aW9uID09IFRGdW5jdGlvblVu
a25vd24gfHwgbUZ1bmN0aW9uTWFza1tmdW5jdGlvbl0gPT0gZmFsc2UpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1GdW5jdGlvbnMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgaWYgKG1GdW5jdGlvbnNbaV0gPT0gZnVuY3Rpb24pCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgbUZ1bmN0aW9ucy5wdXNoX2JhY2soZnVuY3Rpb24p
OwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpP
dXRwdXRFbXVsYXRlZEZ1bmN0aW9uRGVmaW5pdGlvbigKLSAgICBUSW5mb1NpbmtCYXNlJiBvdXQs
IGJvb2wgd2l0aFByZWNpc2lvbikgY29uc3QKLXsKLSAgICBpZiAobUZ1bmN0aW9ucy5zaXplKCkg
PT0gMCkKLSAgICAgICAgcmV0dXJuOwotICAgIG91dCA8PCAiLy8gQkVHSU46IEdlbmVyYXRlZCBj
b2RlIGZvciBidWlsdC1pbiBmdW5jdGlvbiBlbXVsYXRpb25cblxuIjsKLSAgICBpZiAod2l0aFBy
ZWNpc2lvbikgewotICAgICAgICBvdXQgPDwgIiNpZiBkZWZpbmVkKEdMX0ZSQUdNRU5UX1BSRUNJ
U0lPTl9ISUdIKVxuIgotICAgICAgICAgICAgPDwgIiNkZWZpbmUgd2ViZ2xfZW11X3ByZWNpc2lv
biBoaWdocFxuIgotICAgICAgICAgICAgPDwgIiNlbHNlXG4iCi0gICAgICAgICAgICA8PCAiI2Rl
ZmluZSB3ZWJnbF9lbXVfcHJlY2lzaW9uIG1lZGl1bXBcbiIKLSAgICAgICAgICAgIDw8ICIjZW5k
aWZcblxuIjsKLSAgICB9IGVsc2UgewotICAgICAgICBvdXQgPDwgIiNkZWZpbmUgd2ViZ2xfZW11
X3ByZWNpc2lvblxuXG4iOwotICAgIH0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1GdW5j
dGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgb3V0IDw8IG1GdW5jdGlvblNvdXJjZVttRnVu
Y3Rpb25zW2ldXSA8PCAiXG5cbiI7Ci0gICAgfQotICAgIG91dCA8PCAiLy8gRU5EOiBHZW5lcmF0
ZWQgY29kZSBmb3IgYnVpbHQtaW4gZnVuY3Rpb24gZW11bGF0aW9uXG5cbiI7Ci19Ci0KLUJ1aWx0
SW5GdW5jdGlvbkVtdWxhdG9yOjpUQnVpbHRJbkZ1bmN0aW9uCi1CdWlsdEluRnVuY3Rpb25FbXVs
YXRvcjo6SWRlbnRpZnlGdW5jdGlvbigKLSAgICBUT3BlcmF0b3Igb3AsIGNvbnN0IFRUeXBlJiBw
YXJhbSkKLXsKLSAgICBpZiAocGFyYW0uZ2V0Tm9taW5hbFNpemUoKSA+IDQpCi0gICAgICAgIHJl
dHVybiBURnVuY3Rpb25Vbmtub3duOwotICAgIHVuc2lnbmVkIGludCBmdW5jdGlvbiA9IFRGdW5j
dGlvblVua25vd247Ci0gICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIEVPcENvczoKLSAg
ICAgICAgICAgIGZ1bmN0aW9uID0gVEZ1bmN0aW9uQ29zMTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEVPcExlbmd0aDoKLSAgICAgICAgICAgIGZ1bmN0aW9uID0gVEZ1bmN0aW9u
TGVuZ3RoMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcE5vcm1hbGl6ZToK
LSAgICAgICAgICAgIGZ1bmN0aW9uID0gVEZ1bmN0aW9uTm9ybWFsaXplMTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGlmIChmdW5jdGlvbiA9PSBURnVuY3Rpb25Vbmtub3duKQotICAgICAgICByZXR1cm4gVEZ1bmN0
aW9uVW5rbm93bjsKLSAgICBpZiAocGFyYW0uaXNWZWN0b3IoKSkKLSAgICAgICAgZnVuY3Rpb24g
Kz0gcGFyYW0uZ2V0Tm9taW5hbFNpemUoKSAtIDE7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFRC
dWlsdEluRnVuY3Rpb24+KGZ1bmN0aW9uKTsKLX0KLQotQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6
OlRCdWlsdEluRnVuY3Rpb24KLUJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpJZGVudGlmeUZ1bmN0
aW9uKAotICAgIFRPcGVyYXRvciBvcCwgY29uc3QgVFR5cGUmIHBhcmFtMSwgY29uc3QgVFR5cGUm
IHBhcmFtMikKLXsKLSAgICAvLyBSaWdodCBub3cgZm9yIGFsbCB0aGUgZW11bGF0ZWQgZnVuY3Rp
b25zIHdpdGggdHdvIHBhcmFtZXRlcnMsIHRoZSB0d28KLSAgICAvLyBwYXJhbWV0ZXJzIGhhdmUg
dGhlIHNhbWUgdHlwZS4KLSAgICBpZiAocGFyYW0xLmlzVmVjdG9yKCkgIT0gcGFyYW0yLmlzVmVj
dG9yKCkgfHwKLSAgICAgICAgcGFyYW0xLmdldE5vbWluYWxTaXplKCkgIT0gcGFyYW0yLmdldE5v
bWluYWxTaXplKCkgfHwKLSAgICAgICAgcGFyYW0xLmdldE5vbWluYWxTaXplKCkgPiA0KQotICAg
ICAgICByZXR1cm4gVEZ1bmN0aW9uVW5rbm93bjsKLQotICAgIHVuc2lnbmVkIGludCBmdW5jdGlv
biA9IFRGdW5jdGlvblVua25vd247Ci0gICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIEVP
cERpc3RhbmNlOgotICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25EaXN0YW5jZTFfMTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcERvdDoKLSAgICAgICAgICAgIGZ1
bmN0aW9uID0gVEZ1bmN0aW9uRG90MV8xOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRU9wUmVmbGVjdDoKLSAgICAgICAgICAgIGZ1bmN0aW9uID0gVEZ1bmN0aW9uUmVmbGVjdDFf
MTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGlmIChmdW5jdGlvbiA9PSBURnVuY3Rpb25Vbmtub3duKQotICAgICAg
ICByZXR1cm4gVEZ1bmN0aW9uVW5rbm93bjsKLSAgICBpZiAocGFyYW0xLmlzVmVjdG9yKCkpCi0g
ICAgICAgIGZ1bmN0aW9uICs9IHBhcmFtMS5nZXROb21pbmFsU2l6ZSgpIC0gMTsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8VEJ1aWx0SW5GdW5jdGlvbj4oZnVuY3Rpb24pOwotfQotCi12b2lkIEJ1
aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpNYXJrQnVpbHRJbkZ1bmN0aW9uc0ZvckVtdWxhdGlvbigK
LSAgICBUSW50ZXJtTm9kZSogcm9vdCkKLXsKLSAgICBBU1NFUlQocm9vdCk7Ci0KLSAgICBCdWls
dEluRnVuY3Rpb25FbXVsYXRpb25NYXJrZXIgbWFya2VyKCp0aGlzKTsKLSAgICByb290LT50cmF2
ZXJzZSgmbWFya2VyKTsKLX0KLQotdm9pZCBCdWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6Q2xlYW51
cCgpCi17Ci0gICAgbUZ1bmN0aW9ucy5jbGVhcigpOwotfQotCi0vL3N0YXRpYwotVFN0cmluZyBC
dWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6R2V0RW11bGF0ZWRGdW5jdGlvbk5hbWUoCi0gICAgY29u
c3QgVFN0cmluZyYgbmFtZSkKLXsKLSAgICBBU1NFUlQobmFtZVtuYW1lLmxlbmd0aCgpIC0gMV0g
PT0gJygnKTsKLSAgICByZXR1cm4gIndlYmdsXyIgKyBuYW1lLnN1YnN0cigwLCBuYW1lLmxlbmd0
aCgpIC0gMSkgKyAiX2VtdSgiOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDkwNGY0MWQwOTE2Y2ZmOWU4ZDBjMDU4OWY5ZWQ4
OWQwZWMwMzgyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVs
YXRvci5oCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNp
Zm5kZWYgQ09NUElMSUVSX0JVSUxUX0lOX0ZVTkNUSU9OX0VNVUxBVE9SX0hfCi0jZGVmaW5lIENP
TVBJTElFUl9CVUlMVF9JTl9GVU5DVElPTl9FTVVMQVRPUl9IXwotCi0jaW5jbHVkZSAiR0xTTEFO
Ry9TaGFkZXJMYW5nLmgiCi0KLSNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgotI2luY2x1
ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotCi0vLwotLy8gVGhpcyBjbGFzcyBkZWNpZGVz
IHdoaWNoIGJ1aWx0LWluIGZ1bmN0aW9ucyBuZWVkIHRvIGJlIHJlcGxhY2VkIHdpdGggdGhlCi0v
LyBlbXVsYXRlZCBvbmVzLgotLy8gSXQncyBvbmx5IGEgd29ya2Fyb3VuZCBmb3IgT3BlbkdMIGRy
aXZlciBidWdzLCBhbmQgaXNuJ3QgbmVlZGVkIGluIGdlbmVyYWwuCi0vLwotY2xhc3MgQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0b3IgewotcHVibGljOgotICAgIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9y
KFNoU2hhZGVyVHlwZSBzaGFkZXJUeXBlKTsKLSAgICAvLyBSZWNvcmRzIHRoYXQgYSBmdW5jdGlv
biBpcyBjYWxsZWQgYnkgdGhlIHNoYWRlciBhbmQgbWlnaHQgbmVlZHMgdG8gYmUKLSAgICAvLyBl
bXVsYXRlZC4gIElmIHRoZSBmdW5jdGlvbidzIGdyb3VwIGlzIG5vdCBpbiBtRnVuY3Rpb25Hcm91
cEZpbHRlciwgdGhpcwotICAgIC8vIGJlY29tZXMgYW4gbm8tb3AuCi0gICAgLy8gUmV0dXJucyB0
cnVlIGlmIHRoZSBmdW5jdGlvbiBjYWxsIG5lZWRzIHRvIGJlIHJlcGxhY2VkIHdpdGggYW4gZW11
bGF0ZWQKLSAgICAvLyBvbmUuCi0gICAgYm9vbCBTZXRGdW5jdGlvbkNhbGxlZChUT3BlcmF0b3Ig
b3AsIGNvbnN0IFRUeXBlJiBwYXJhbSk7Ci0gICAgYm9vbCBTZXRGdW5jdGlvbkNhbGxlZCgKLSAg
ICAgICAgVE9wZXJhdG9yIG9wLCBjb25zdCBUVHlwZSYgcGFyYW0xLCBjb25zdCBUVHlwZSYgcGFy
YW0yKTsKLQotICAgIC8vIE91dHB1dCBmdW5jdGlvbiBlbXVsYXRpb24gZGVmaW5pdGlvbi4gIFRo
aXMgc2hvdWxkIGJlIGJlZm9yZSBhbnkgb3RoZXIKLSAgICAvLyBzaGFkZXIgc291cmNlLgotICAg
IHZvaWQgT3V0cHV0RW11bGF0ZWRGdW5jdGlvbkRlZmluaXRpb24oVEluZm9TaW5rQmFzZSYgb3V0
LCBib29sIHdpdGhQcmVjaXNpb24pIGNvbnN0OwotCi0gICAgdm9pZCBNYXJrQnVpbHRJbkZ1bmN0
aW9uc0ZvckVtdWxhdGlvbihUSW50ZXJtTm9kZSogcm9vdCk7Ci0KLSAgICB2b2lkIENsZWFudXAo
KTsKLQotICAgIC8vICJuYW1lKCIgYmVjb21lcyAid2ViZ2xfbmFtZV9lbXUoIi4KLSAgICBzdGF0
aWMgVFN0cmluZyBHZXRFbXVsYXRlZEZ1bmN0aW9uTmFtZShjb25zdCBUU3RyaW5nJiBuYW1lKTsK
LQotcHJpdmF0ZToKLSAgICAvLwotICAgIC8vIEJ1aWx0LWluIGZ1bmN0aW9ucy4KLSAgICAvLwot
ICAgIGVudW0gVEJ1aWx0SW5GdW5jdGlvbiB7Ci0gICAgICAgIFRGdW5jdGlvbkNvczEgPSAwLCAg
Ly8gZmxvYXQgY29zKGZsb2F0KTsKLSAgICAgICAgVEZ1bmN0aW9uQ29zMiwgIC8vIHZlYzIgY29z
KHZlYzIpOwotICAgICAgICBURnVuY3Rpb25Db3MzLCAgLy8gdmVjMyBjb3ModmVjMyk7Ci0gICAg
ICAgIFRGdW5jdGlvbkNvczQsICAvLyB2ZWM0IGNvcyh2ZWM0KTsKLQotICAgICAgICBURnVuY3Rp
b25EaXN0YW5jZTFfMSwgIC8vIGZsb2F0IGRpc3RhbmNlKGZsb2F0LCBmbG9hdCk7Ci0gICAgICAg
IFRGdW5jdGlvbkRpc3RhbmNlMl8yLCAgLy8gdmVjMiBkaXN0YW5jZSh2ZWMyLCB2ZWMyKTsKLSAg
ICAgICAgVEZ1bmN0aW9uRGlzdGFuY2UzXzMsICAvLyB2ZWMzIGRpc3RhbmNlKHZlYzMsIHZlYzMp
OwotICAgICAgICBURnVuY3Rpb25EaXN0YW5jZTRfNCwgIC8vIHZlYzQgZGlzdGFuY2UodmVjNCwg
dmVjNCk7Ci0KLSAgICAgICAgVEZ1bmN0aW9uRG90MV8xLCAgLy8gZmxvYXQgZG90KGZsb2F0LCBm
bG9hdCk7Ci0gICAgICAgIFRGdW5jdGlvbkRvdDJfMiwgIC8vIHZlYzIgZG90KHZlYzIsIHZlYzIp
OwotICAgICAgICBURnVuY3Rpb25Eb3QzXzMsICAvLyB2ZWMzIGRvdCh2ZWMzLCB2ZWMzKTsKLSAg
ICAgICAgVEZ1bmN0aW9uRG90NF80LCAgLy8gdmVjNCBkb3QodmVjNCwgdmVjNCk7Ci0KLSAgICAg
ICAgVEZ1bmN0aW9uTGVuZ3RoMSwgIC8vIGZsb2F0IGxlbmd0aChmbG9hdCk7Ci0gICAgICAgIFRG
dW5jdGlvbkxlbmd0aDIsICAvLyBmbG9hdCBsZW5ndGgodmVjMik7Ci0gICAgICAgIFRGdW5jdGlv
bkxlbmd0aDMsICAvLyBmbG9hdCBsZW5ndGgodmVjMyk7Ci0gICAgICAgIFRGdW5jdGlvbkxlbmd0
aDQsICAvLyBmbG9hdCBsZW5ndGgodmVjNCk7Ci0KLSAgICAgICAgVEZ1bmN0aW9uTm9ybWFsaXpl
MSwgIC8vIGZsb2F0IG5vcm1hbGl6ZShmbG9hdCk7Ci0gICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6
ZTIsICAvLyB2ZWMyIG5vcm1hbGl6ZSh2ZWMyKTsKLSAgICAgICAgVEZ1bmN0aW9uTm9ybWFsaXpl
MywgIC8vIHZlYzMgbm9ybWFsaXplKHZlYzMpOwotICAgICAgICBURnVuY3Rpb25Ob3JtYWxpemU0
LCAgLy8gdmVjNCBub3JtYWxpemUodmVjNCk7Ci0KLSAgICAgICAgVEZ1bmN0aW9uUmVmbGVjdDFf
MSwgIC8vIGZsb2F0IHJlZmxlY3QoZmxvYXQsIGZsb2F0KTsKLSAgICAgICAgVEZ1bmN0aW9uUmVm
bGVjdDJfMiwgIC8vIHZlYzIgcmVmbGVjdCh2ZWMyLCB2ZWMyKTsKLSAgICAgICAgVEZ1bmN0aW9u
UmVmbGVjdDNfMywgIC8vIHZlYzMgcmVmbGVjdCh2ZWMzLCB2ZWMzKTsKLSAgICAgICAgVEZ1bmN0
aW9uUmVmbGVjdDRfNCwgIC8vIHZlYzQgcmVmbGVjdCh2ZWM0LCB2ZWM0KTsKLQotICAgICAgICBU
RnVuY3Rpb25Vbmtub3duCi0gICAgfTsKLQotICAgIFRCdWlsdEluRnVuY3Rpb24gSWRlbnRpZnlG
dW5jdGlvbihUT3BlcmF0b3Igb3AsIGNvbnN0IFRUeXBlJiBwYXJhbSk7Ci0gICAgVEJ1aWx0SW5G
dW5jdGlvbiBJZGVudGlmeUZ1bmN0aW9uKAotICAgICAgICBUT3BlcmF0b3Igb3AsIGNvbnN0IFRU
eXBlJiBwYXJhbTEsIGNvbnN0IFRUeXBlJiBwYXJhbTIpOwotCi0gICAgYm9vbCBTZXRGdW5jdGlv
bkNhbGxlZChUQnVpbHRJbkZ1bmN0aW9uIGZ1bmN0aW9uKTsKLQotICAgIHN0ZDo6dmVjdG9yPFRC
dWlsdEluRnVuY3Rpb24+IG1GdW5jdGlvbnM7Ci0KLSAgICBjb25zdCBib29sKiBtRnVuY3Rpb25N
YXNrOyAgLy8gYSBib29sZWFuIGZsYWcgZm9yIGVhY2ggZnVuY3Rpb24uCi0gICAgY29uc3QgY2hh
cioqIG1GdW5jdGlvblNvdXJjZTsKLX07Ci0KLSNlbmRpZiAgLy8gQ09NUElMSUVSX0JVSUxUX0lO
X0ZVTkNUSU9OX0VNVUxBVE9SX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvQ29kZUdlbi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvQ29kZUdlbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0ZjIx
Yjg3NjE3M2EzMTRjMDgzOGYyNzNlMjJiZjc1NTY3NGFkZDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL0NvZGVHZW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL1RyYW5zbGF0b3JFU1NMLmgiCi0jaW5j
bHVkZSAiY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuaCIKLSNpbmNsdWRlICJjb21waWxlci9UcmFu
c2xhdG9ySExTTC5oIgotCi0vLwotLy8gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIHByb3ZpZGVkIHRv
IGNyZWF0ZSB0aGUgYWN0dWFsCi0vLyBjb21waWxlIG9iamVjdCB1c2VkIGJ5IGhpZ2hlciBsZXZl
bCBjb2RlLiAgSXQgcmV0dXJucwotLy8gYSBzdWJjbGFzcyBvZiBUQ29tcGlsZXIuCi0vLwotVENv
bXBpbGVyKiBDb25zdHJ1Y3RDb21waWxlcigKLSAgICBTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFk
ZXJTcGVjIHNwZWMsIFNoU2hhZGVyT3V0cHV0IG91dHB1dCkKLXsKLSAgICBzd2l0Y2ggKG91dHB1
dCkgewotICAgICAgY2FzZSBTSF9FU1NMX09VVFBVVDoKLSAgICAgICAgcmV0dXJuIG5ldyBUcmFu
c2xhdG9yRVNTTCh0eXBlLCBzcGVjKTsKLSAgICAgIGNhc2UgU0hfR0xTTF9PVVRQVVQ6Ci0gICAg
ICAgIHJldHVybiBuZXcgVHJhbnNsYXRvckdMU0wodHlwZSwgc3BlYyk7Ci0gICAgICBjYXNlIFNI
X0hMU0w5X09VVFBVVDoKLSAgICAgIGNhc2UgU0hfSExTTDExX09VVFBVVDoKLSAgICAgICAgcmV0
dXJuIG5ldyBUcmFuc2xhdG9ySExTTCh0eXBlLCBzcGVjLCBvdXRwdXQpOwotICAgICAgZGVmYXVs
dDoKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotfQotCi0vLwotLy8gRGVsZXRlIHRoZSBj
b21waWxlciBtYWRlIGJ5IENvbnN0cnVjdENvbXBpbGVyCi0vLwotdm9pZCBEZWxldGVDb21waWxl
cihUQ29tcGlsZXIqIGNvbXBpbGVyKQotewotICAgIGRlbGV0ZSBjb21waWxlcjsKLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21tb24uaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21tb24uaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNDZmOTQ0MGZmZjFiNTBiZjk3MjlkYTYxNzI1NjMzNzRjOWZmY2Jk
My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tbW9uLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw3NyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIF9DT01NT05fSU5DTFVE
RURfCi0jZGVmaW5lIF9DT01NT05fSU5DTFVERURfCi0KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVk
ZSA8c3N0cmVhbT4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5j
bHVkZSAiY29tcGlsZXIvUG9vbEFsbG9jLmgiCi0KLXN0cnVjdCBUU291cmNlTG9jIHsKLSAgICBp
bnQgZmlyc3RfZmlsZTsKLSAgICBpbnQgZmlyc3RfbGluZTsKLSAgICBpbnQgbGFzdF9maWxlOwot
ICAgIGludCBsYXN0X2xpbmU7Ci19OwotCi0vLwotLy8gUHV0IFBPT0xfQUxMT0NBVE9SX05FV19E
RUxFVEUgaW4gYmFzZSBjbGFzc2VzIHRvIG1ha2UgdGhlbSB1c2UgdGhpcyBzY2hlbWUuCi0vLwot
I2RlZmluZSBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKCkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6
ZV90IHMpIHsgcmV0dXJuIEdldEdsb2JhbFBvb2xBbGxvY2F0b3IoKS0+YWxsb2NhdGUocyk7IH0g
ICBcCi0gICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCwgdm9pZCAqX1doZXJlKSB7IHJldHVy
biAoX1doZXJlKTsgfSAgICAgICAgICAgICAgICAgICAgXAotICAgIHZvaWQgb3BlcmF0b3IgZGVs
ZXRlKHZvaWQqKSB7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkICosIHZvaWQgKikgeyB9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgdm9pZCogb3BlcmF0
b3IgbmV3W10oc2l6ZV90IHMpIHsgcmV0dXJuIEdldEdsb2JhbFBvb2xBbGxvY2F0b3IoKS0+YWxs
b2NhdGUocyk7IH0gXAotICAgIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHNpemVfdCwgdm9pZCAqX1do
ZXJlKSB7IHJldHVybiAoX1doZXJlKTsgfSAgICAgICAgICAgICAgICAgIFwKLSAgICB2b2lkIG9w
ZXJhdG9yIGRlbGV0ZVtdKHZvaWQqKSB7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkICosIHZv
aWQgKikgeyB9Ci0KLS8vCi0vLyBQb29sIHZlcnNpb24gb2Ygc3RyaW5nLgotLy8KLXR5cGVkZWYg
cG9vbF9hbGxvY2F0b3I8Y2hhcj4gVFN0cmluZ0FsbG9jYXRvcjsKLXR5cGVkZWYgc3RkOjpiYXNp
Y19zdHJpbmcgPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIFRTdHJpbmdBbGxvY2F0b3I+
IFRTdHJpbmc7Ci10eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmluZ3N0cmVhbTxjaGFyLCBzdGQ6OmNo
YXJfdHJhaXRzPGNoYXI+LCBUU3RyaW5nQWxsb2NhdG9yPiBUU3RyaW5nU3RyZWFtOwotaW5saW5l
IFRTdHJpbmcqIE5ld1Bvb2xUU3RyaW5nKGNvbnN0IGNoYXIqIHMpCi17Ci0Jdm9pZCogbWVtb3J5
ID0gR2V0R2xvYmFsUG9vbEFsbG9jYXRvcigpLT5hbGxvY2F0ZShzaXplb2YoVFN0cmluZykpOwot
CXJldHVybiBuZXcobWVtb3J5KSBUU3RyaW5nKHMpOwotfQotCi0vLwotLy8gUGVyc2lzdGVudCBz
dHJpbmcgbWVtb3J5LiAgU2hvdWxkIG9ubHkgYmUgdXNlZCBmb3Igc3RyaW5ncyB0aGF0IHN1cnZp
dmUKLS8vIGFjcm9zcyBjb21waWxlcy4KLS8vCi0jZGVmaW5lIFRQZXJzaXN0U3RyaW5nIHN0ZDo6
c3RyaW5nCi0jZGVmaW5lIFRQZXJzaXN0U3RyaW5nU3RyZWFtIHN0ZDo6b3N0cmluZ3N0cmVhbQot
Ci0vLwotLy8gUG9vbCBhbGxvY2F0b3IgdmVyc2lvbnMgb2YgdmVjdG9ycywgbGlzdHMsIGFuZCBt
YXBzCi0vLwotdGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIFRWZWN0b3IgOiBwdWJsaWMgc3RkOjp2
ZWN0b3I8VCwgcG9vbF9hbGxvY2F0b3I8VD4gPiB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiB0eXBl
bmFtZSBzdGQ6OnZlY3RvcjxULCBwb29sX2FsbG9jYXRvcjxUPiA+OjpzaXplX3R5cGUgc2l6ZV90
eXBlOwotICAgIFRWZWN0b3IoKSA6IHN0ZDo6dmVjdG9yPFQsIHBvb2xfYWxsb2NhdG9yPFQ+ID4o
KSB7fQotICAgIFRWZWN0b3IoY29uc3QgcG9vbF9hbGxvY2F0b3I8VD4mIGEpIDogc3RkOjp2ZWN0
b3I8VCwgcG9vbF9hbGxvY2F0b3I8VD4gPihhKSB7fQotICAgIFRWZWN0b3Ioc2l6ZV90eXBlIGkp
OiBzdGQ6OnZlY3RvcjxULCBwb29sX2FsbG9jYXRvcjxUPiA+KGkpIHt9Ci19OwotCi10ZW1wbGF0
ZSA8Y2xhc3MgSywgY2xhc3MgRCwgY2xhc3MgQ01QID0gc3RkOjpsZXNzPEs+ID4gCi1jbGFzcyBU
TWFwIDogcHVibGljIHN0ZDo6bWFwPEssIEQsIENNUCwgcG9vbF9hbGxvY2F0b3I8c3RkOjpwYWly
PGNvbnN0IEssIEQ+ID4gPiB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBwb29sX2FsbG9jYXRvcjxz
dGQ6OnBhaXI8Y29uc3QgSywgRD4gPiB0QWxsb2NhdG9yOwotCi0gICAgVE1hcCgpIDogc3RkOjpt
YXA8SywgRCwgQ01QLCB0QWxsb2NhdG9yPigpIHt9Ci0gICAgLy8gdXNlIGNvcnJlY3QgdHdvLXN0
YWdlIG5hbWUgbG9va3VwIHN1cHBvcnRlZCBpbiBnY2MgMy40IGFuZCBhYm92ZQotICAgIFRNYXAo
Y29uc3QgdEFsbG9jYXRvciYgYSkgOiBzdGQ6Om1hcDxLLCBELCBDTVAsIHRBbGxvY2F0b3I+KHN0
ZDo6bWFwPEssIEQsIENNUCwgdEFsbG9jYXRvcj46OmtleV9jb21wYXJlKCksIGEpIHt9Ci19Owot
Ci0jZW5kaWYgLy8gX0NPTU1PTl9JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBjMmI0ZWY2MDI1OWQxOTlkYWUxMTAxZjgzMTM4NjA3MjE5MDUwZDkzLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NTIgKzAs
MCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL0J1aWx0SW5GdW5j
dGlvbkVtdWxhdG9yLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvRGV0ZWN0Q2FsbERlcHRoLmgiCi0j
aW5jbHVkZSAiY29tcGlsZXIvRm9yTG9vcFVucm9sbC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL0lu
aXRpYWxpemUuaCIKLSNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplR0xQb3NpdGlvbi5oIgot
I2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaCIKLSNpbmNsdWRlICJj
b21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNl
Q29udGV4dC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgiCi0jaW5jbHVk
ZSAiY29tcGlsZXIvU2hIYW5kbGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9VbmZvbGRTaG9ydENp
cmN1aXRBU1QuaCIKLSNpbmNsdWRlICJjb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgiCi0j
aW5jbHVkZSAiY29tcGlsZXIvVmFyaWFibGVQYWNrZXIuaCIKLSNpbmNsdWRlICJjb21waWxlci9k
ZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCIKLSNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9E
ZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCIKLSNpbmNsdWRlICJjb21waWxlci90aW1pbmcvUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3RpbWluZy9SZXN0
cmljdFZlcnRleFNoYWRlclRpbWluZy5oIgotI2luY2x1ZGUgInRoaXJkX3BhcnR5L2NvbXBpbGVy
L0FycmF5Qm91bmRzQ2xhbXBlci5oIgotCi1ib29sIGlzV2ViR0xCYXNlZFNwZWMoU2hTaGFkZXJT
cGVjIHNwZWMpCi17Ci0gICAgIHJldHVybiBzcGVjID09IFNIX1dFQkdMX1NQRUMgfHwgc3BlYyA9
PSBTSF9DU1NfU0hBREVSU19TUEVDOwotfQotCi1uYW1lc3BhY2UgewotY2xhc3MgVFNjb3BlZFBv
b2xBbGxvY2F0b3IgewotcHVibGljOgotICAgIFRTY29wZWRQb29sQWxsb2NhdG9yKFRQb29sQWxs
b2NhdG9yKiBhbGxvY2F0b3IpIDogbUFsbG9jYXRvcihhbGxvY2F0b3IpIHsKLSAgICAgICAgbUFs
bG9jYXRvci0+cHVzaCgpOwotICAgICAgICBTZXRHbG9iYWxQb29sQWxsb2NhdG9yKG1BbGxvY2F0
b3IpOwotICAgIH0KLSAgICB+VFNjb3BlZFBvb2xBbGxvY2F0b3IoKSB7Ci0gICAgICAgIFNldEds
b2JhbFBvb2xBbGxvY2F0b3IoTlVMTCk7Ci0gICAgICAgIG1BbGxvY2F0b3ItPnBvcCgpOwotICAg
IH0KLQotcHJpdmF0ZToKLSAgICBUUG9vbEFsbG9jYXRvciogbUFsbG9jYXRvcjsKLX07Ci0KLWNs
YXNzIFRTY29wZWRTeW1ib2xUYWJsZUxldmVsIHsKLXB1YmxpYzoKLSAgICBUU2NvcGVkU3ltYm9s
VGFibGVMZXZlbChUU3ltYm9sVGFibGUqIHRhYmxlKSA6IG1UYWJsZSh0YWJsZSkgewotICAgICAg
ICBBU1NFUlQobVRhYmxlLT5hdEJ1aWx0SW5MZXZlbCgpKTsKLSAgICAgICAgbVRhYmxlLT5wdXNo
KCk7Ci0gICAgfQotICAgIH5UU2NvcGVkU3ltYm9sVGFibGVMZXZlbCgpIHsKLSAgICAgICAgd2hp
bGUgKCFtVGFibGUtPmF0QnVpbHRJbkxldmVsKCkpCi0gICAgICAgICAgICBtVGFibGUtPnBvcCgp
OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBUU3ltYm9sVGFibGUqIG1UYWJsZTsKLX07Ci19ICAv
LyBuYW1lc3BhY2UKLQotVFNoSGFuZGxlQmFzZTo6VFNoSGFuZGxlQmFzZSgpIHsKLSAgICBhbGxv
Y2F0b3IucHVzaCgpOwotICAgIFNldEdsb2JhbFBvb2xBbGxvY2F0b3IoJmFsbG9jYXRvcik7Ci19
Ci0KLVRTaEhhbmRsZUJhc2U6On5UU2hIYW5kbGVCYXNlKCkgewotICAgIFNldEdsb2JhbFBvb2xB
bGxvY2F0b3IoTlVMTCk7Ci0gICAgYWxsb2NhdG9yLnBvcEFsbCgpOwotfQotCi1UQ29tcGlsZXI6
OlRDb21waWxlcihTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMpCi0gICAgOiBz
aGFkZXJUeXBlKHR5cGUpLAotICAgICAgc2hhZGVyU3BlYyhzcGVjKSwKLSAgICAgIG1heFVuaWZv
cm1WZWN0b3JzKDApLAotICAgICAgbWF4VmFyeWluZ1ZlY3RvcnMoMCksCi0gICAgICBtYXhFeHBy
ZXNzaW9uQ29tcGxleGl0eSgwKSwKLSAgICAgIG1heENhbGxTdGFja0RlcHRoKDApLAotICAgICAg
ZnJhZ21lbnRQcmVjaXNpb25IaWdoKGZhbHNlKSwKLSAgICAgIGNsYW1waW5nU3RyYXRlZ3koU0hf
Q0xBTVBfV0lUSF9DTEFNUF9JTlRSSU5TSUMpLAotICAgICAgYnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IodHlwZSkKLXsKLSAgICBsb25nTmFtZU1hcCA9IExvbmdOYW1lTWFwOjpHZXRJbnN0YW5jZSgp
OwotfQotCi1UQ29tcGlsZXI6On5UQ29tcGlsZXIoKQotewotICAgIEFTU0VSVChsb25nTmFtZU1h
cCk7Ci0gICAgbG9uZ05hbWVNYXAtPlJlbGVhc2UoKTsKLX0KLQotYm9vbCBUQ29tcGlsZXI6Oklu
aXQoY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMpCi17Ci0gICAgbWF4VW5pZm9y
bVZlY3RvcnMgPSAoc2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKSA/Ci0gICAgICAgIHJl
c291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA6Ci0gICAgICAgIHJlc291cmNlcy5NYXhG
cmFnbWVudFVuaWZvcm1WZWN0b3JzOwotICAgIG1heFZhcnlpbmdWZWN0b3JzID0gcmVzb3VyY2Vz
Lk1heFZhcnlpbmdWZWN0b3JzOwotICAgIG1heEV4cHJlc3Npb25Db21wbGV4aXR5ID0gcmVzb3Vy
Y2VzLk1heEV4cHJlc3Npb25Db21wbGV4aXR5OwotICAgIG1heENhbGxTdGFja0RlcHRoID0gcmVz
b3VyY2VzLk1heENhbGxTdGFja0RlcHRoOwotCi0gICAgU2V0R2xvYmFsUG9vbEFsbG9jYXRvcigm
YWxsb2NhdG9yKTsKLQotICAgIC8vIEdlbmVyYXRlIGJ1aWx0LWluIHN5bWJvbCB0YWJsZS4KLSAg
ICBpZiAoIUluaXRCdWlsdEluU3ltYm9sVGFibGUocmVzb3VyY2VzKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIEluaXRFeHRlbnNpb25CZWhhdmlvcihyZXNvdXJjZXMsIGV4dGVuc2lvbkJl
aGF2aW9yKTsKLSAgICBmcmFnbWVudFByZWNpc2lvbkhpZ2ggPSByZXNvdXJjZXMuRnJhZ21lbnRQ
cmVjaXNpb25IaWdoID09IDE7Ci0KLSAgICBhcnJheUJvdW5kc0NsYW1wZXIuU2V0Q2xhbXBpbmdT
dHJhdGVneShyZXNvdXJjZXMuQXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kpOwotICAgIGNsYW1w
aW5nU3RyYXRlZ3kgPSByZXNvdXJjZXMuQXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3k7Ci0KLSAg
ICBoYXNoRnVuY3Rpb24gPSByZXNvdXJjZXMuSGFzaEZ1bmN0aW9uOwotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgVENvbXBpbGVyOjpjb21waWxlKGNvbnN0IGNoYXIqIGNvbnN0IHNoYWRl
clN0cmluZ3NbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBudW1TdHJpbmdzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbXBpbGVPcHRpb25zKQotewotICAgIFRTY29w
ZWRQb29sQWxsb2NhdG9yIHNjb3BlZEFsbG9jKCZhbGxvY2F0b3IpOwotICAgIGNsZWFyUmVzdWx0
cygpOwotCi0gICAgaWYgKG51bVN0cmluZ3MgPT0gMCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICAvLyBJZiBjb21waWxpbmcgZm9yIFdlYkdMLCB2YWxpZGF0ZSBsb29wIGFuZCBpbmRleGlu
ZyBhcyB3ZWxsLgotICAgIGlmIChpc1dlYkdMQmFzZWRTcGVjKHNoYWRlclNwZWMpKQotICAgICAg
ICBjb21waWxlT3B0aW9ucyB8PSBTSF9WQUxJREFURV9MT09QX0lOREVYSU5HOwotCi0gICAgLy8g
Rmlyc3Qgc3RyaW5nIGlzIHBhdGggb2Ygc291cmNlIGZpbGUgaWYgZmxhZyBpcyBzZXQuIFRoZSBh
Y3R1YWwgc291cmNlIGZvbGxvd3MuCi0gICAgY29uc3QgY2hhciogc291cmNlUGF0aCA9IE5VTEw7
Ci0gICAgc2l6ZV90IGZpcnN0U291cmNlID0gMDsKLSAgICBpZiAoY29tcGlsZU9wdGlvbnMgJiBT
SF9TT1VSQ0VfUEFUSCkKLSAgICB7Ci0gICAgICAgIHNvdXJjZVBhdGggPSBzaGFkZXJTdHJpbmdz
WzBdOwotICAgICAgICArK2ZpcnN0U291cmNlOwotICAgIH0KLQotICAgIFRJbnRlcm1lZGlhdGUg
aW50ZXJtZWRpYXRlKGluZm9TaW5rKTsKLSAgICBUUGFyc2VDb250ZXh0IHBhcnNlQ29udGV4dChz
eW1ib2xUYWJsZSwgZXh0ZW5zaW9uQmVoYXZpb3IsIGludGVybWVkaWF0ZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaGFkZXJUeXBlLCBzaGFkZXJTcGVjLCBjb21waWxlT3B0aW9u
cywgdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VQYXRoLCBpbmZv
U2luayk7Ci0gICAgcGFyc2VDb250ZXh0LmZyYWdtZW50UHJlY2lzaW9uSGlnaCA9IGZyYWdtZW50
UHJlY2lzaW9uSGlnaDsKLSAgICBTZXRHbG9iYWxQYXJzZUNvbnRleHQoJnBhcnNlQ29udGV4dCk7
Ci0KLSAgICAvLyBXZSBwcmVzZXJ2ZSBzeW1ib2xzIGF0IHRoZSBidWlsdC1pbiBsZXZlbCBmcm9t
IGNvbXBpbGUtdG8tY29tcGlsZS4KLSAgICAvLyBTdGFydCBwdXNoaW5nIHRoZSB1c2VyLWRlZmlu
ZWQgc3ltYm9scyBhdCBnbG9iYWwgbGV2ZWwuCi0gICAgVFNjb3BlZFN5bWJvbFRhYmxlTGV2ZWwg
c2NvcGVkU3ltYm9sTGV2ZWwoJnN5bWJvbFRhYmxlKTsKLQotICAgIC8vIFBhcnNlIHNoYWRlci4K
LSAgICBib29sIHN1Y2Nlc3MgPQotICAgICAgICAoUGFQYXJzZVN0cmluZ3MobnVtU3RyaW5ncyAt
IGZpcnN0U291cmNlLCAmc2hhZGVyU3RyaW5nc1tmaXJzdFNvdXJjZV0sIE5VTEwsICZwYXJzZUNv
bnRleHQpID09IDApICYmCi0gICAgICAgIChwYXJzZUNvbnRleHQudHJlZVJvb3QgIT0gTlVMTCk7
Ci0gICAgaWYgKHN1Y2Nlc3MpIHsKLSAgICAgICAgVEludGVybU5vZGUqIHJvb3QgPSBwYXJzZUNv
bnRleHQudHJlZVJvb3Q7Ci0gICAgICAgIHN1Y2Nlc3MgPSBpbnRlcm1lZGlhdGUucG9zdFByb2Nl
c3Mocm9vdCk7Ci0KLSAgICAgICAgaWYgKHN1Y2Nlc3MpCi0gICAgICAgICAgICBzdWNjZXNzID0g
ZGV0ZWN0Q2FsbERlcHRoKHJvb3QsIGluZm9TaW5rLCAoY29tcGlsZU9wdGlvbnMgJiBTSF9MSU1J
VF9DQUxMX1NUQUNLX0RFUFRIKSAhPSAwKTsKLQotICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29t
cGlsZU9wdGlvbnMgJiBTSF9WQUxJREFURV9MT09QX0lOREVYSU5HKSkKLSAgICAgICAgICAgIHN1
Y2Nlc3MgPSB2YWxpZGF0ZUxpbWl0YXRpb25zKHJvb3QpOwotCi0gICAgICAgIGlmIChzdWNjZXNz
ICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1RJTUlOR19SRVNUUklDVElPTlMpKQotICAgICAgICAg
ICAgc3VjY2VzcyA9IGVuZm9yY2VUaW1pbmdSZXN0cmljdGlvbnMocm9vdCwgKGNvbXBpbGVPcHRp
b25zICYgU0hfREVQRU5ERU5DWV9HUkFQSCkgIT0gMCk7Ci0KLSAgICAgICAgaWYgKHN1Y2Nlc3Mg
JiYgc2hhZGVyU3BlYyA9PSBTSF9DU1NfU0hBREVSU19TUEVDKQotICAgICAgICAgICAgcmV3cml0
ZUNTU1NoYWRlcihyb290KTsKLQotICAgICAgICAvLyBVbnJvbGwgZm9yLWxvb3AgbWFya3VwIG5l
ZWRzIHRvIGhhcHBlbiBhZnRlciB2YWxpZGF0ZUxpbWl0YXRpb25zIHBhc3MuCi0gICAgICAgIGlm
IChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1VOUk9MTF9GT1JfTE9PUF9XSVRIX0lO
VEVHRVJfSU5ERVgpKQotICAgICAgICAgICAgRm9yTG9vcFVucm9sbDo6TWFya0Zvckxvb3BzV2l0
aEludGVnZXJJbmRpY2VzRm9yVW5yb2xsaW5nKHJvb3QpOwotCi0gICAgICAgIC8vIEJ1aWx0LWlu
IGZ1bmN0aW9uIGVtdWxhdGlvbiBuZWVkcyB0byBoYXBwZW4gYWZ0ZXIgdmFsaWRhdGVMaW1pdGF0
aW9ucyBwYXNzLgotICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9F
TVVMQVRFX0JVSUxUX0lOX0ZVTkNUSU9OUykpCi0gICAgICAgICAgICBidWlsdEluRnVuY3Rpb25F
bXVsYXRvci5NYXJrQnVpbHRJbkZ1bmN0aW9uc0ZvckVtdWxhdGlvbihyb290KTsKLQotICAgICAg
ICAvLyBDbGFtcGluZyB1bmlmb3JtIGFycmF5IGJvdW5kcyBuZWVkcyB0byBoYXBwZW4gYWZ0ZXIg
dmFsaWRhdGVMaW1pdGF0aW9ucyBwYXNzLgotICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGls
ZU9wdGlvbnMgJiBTSF9DTEFNUF9JTkRJUkVDVF9BUlJBWV9CT1VORFMpKQotICAgICAgICAgICAg
YXJyYXlCb3VuZHNDbGFtcGVyLk1hcmtJbmRpcmVjdEFycmF5Qm91bmRzRm9yQ2xhbXBpbmcocm9v
dCk7Ci0KLSAgICAgICAgLy8gRGlzYWxsb3cgZXhwcmVzc2lvbnMgZGVlbWVkIHRvbyBjb21wbGV4
LgotICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9MSU1JVF9FWFBS
RVNTSU9OX0NPTVBMRVhJVFkpKQotICAgICAgICAgICAgc3VjY2VzcyA9IGxpbWl0RXhwcmVzc2lv
bkNvbXBsZXhpdHkocm9vdCk7Ci0KLSAgICAgICAgLy8gQ2FsbCBtYXBMb25nVmFyaWFibGVOYW1l
cygpIGJlZm9yZSBjb2xsZWN0QXR0cmlic1VuaWZvcm1zKCkgc28gaW4KLSAgICAgICAgLy8gY29s
bGVjdEF0dHJpYnNVbmlmb3JtcygpIHdlIGFscmVhZHkgaGF2ZSB0aGUgbWFwcGVkIHN5bWJvbCBu
YW1lcyBhbmQKLSAgICAgICAgLy8gd2UgY291bGQgY29tcG9zaXRlIG1hcHBlZCBhbmQgb3JpZ2lu
YWwgdmFyaWFibGUgbmFtZXMuCi0gICAgICAgIC8vIEFsc28sIGlmIHdlIGhhc2ggYWxsIHRoZSBu
YW1lcywgdGhlbiBubyBuZWVkIHRvIGRvIHRoaXMgZm9yIGxvbmcgbmFtZXMuCi0gICAgICAgIGlm
IChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX01BUF9MT05HX1ZBUklBQkxFX05BTUVT
KSAmJiBoYXNoRnVuY3Rpb24gPT0gTlVMTCkKLSAgICAgICAgICAgIG1hcExvbmdWYXJpYWJsZU5h
bWVzKHJvb3QpOwotCi0gICAgICAgIGlmIChzdWNjZXNzICYmIHNoYWRlclR5cGUgPT0gU0hfVkVS
VEVYX1NIQURFUiAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9JTklUX0dMX1BPU0lUSU9OKSkgewot
ICAgICAgICAgICAgSW5pdGlhbGl6ZUdMUG9zaXRpb24gaW5pdEdMUG9zaXRpb247Ci0gICAgICAg
ICAgICByb290LT50cmF2ZXJzZSgmaW5pdEdMUG9zaXRpb24pOwotICAgICAgICB9Ci0KLSAgICBp
ZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9VTkZPTERfU0hPUlRfQ0lSQ1VJVCkp
IHsKLSAgICAgICAgICAgIFVuZm9sZFNob3J0Q2lyY3VpdEFTVCB1bmZvbGRTaG9ydENpcmN1aXQ7
Ci0gICAgICAgICAgICByb290LT50cmF2ZXJzZSgmdW5mb2xkU2hvcnRDaXJjdWl0KTsKLSAgICAg
ICAgICAgIHVuZm9sZFNob3J0Q2lyY3VpdC51cGRhdGVUcmVlKCk7Ci0gICAgfQotCi0gICAgICAg
IGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1ZBUklBQkxFUykpIHsKLSAgICAg
ICAgICAgIGNvbGxlY3RWYXJpYWJsZXMocm9vdCk7Ci0gICAgICAgICAgICBpZiAoY29tcGlsZU9w
dGlvbnMgJiBTSF9FTkZPUkNFX1BBQ0tJTkdfUkVTVFJJQ1RJT05TKQotICAgICAgICAgICAgICAg
IHN1Y2Nlc3MgPSBlbmZvcmNlUGFja2luZ1Jlc3RyaWN0aW9ucygpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfSU5URVJNRURJQVRFX1RS
RUUpKQotICAgICAgICAgICAgaW50ZXJtZWRpYXRlLm91dHB1dFRyZWUocm9vdCk7Ci0KLSAgICAg
ICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfT0JKRUNUX0NPREUpKQotICAg
ICAgICAgICAgdHJhbnNsYXRlKHJvb3QpOwotICAgIH0KLQotICAgIC8vIENsZWFudXAgbWVtb3J5
LgotICAgIGludGVybWVkaWF0ZS5yZW1vdmUocGFyc2VDb250ZXh0LnRyZWVSb290KTsKLQotICAg
IHJldHVybiBzdWNjZXNzOwotfQotCi1ib29sIFRDb21waWxlcjo6SW5pdEJ1aWx0SW5TeW1ib2xU
YWJsZShjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMgJnJlc291cmNlcykKLXsKLSAgICBjb21waWxl
UmVzb3VyY2VzID0gcmVzb3VyY2VzOwotCi0gICAgYXNzZXJ0KHN5bWJvbFRhYmxlLmlzRW1wdHko
KSk7Ci0gICAgc3ltYm9sVGFibGUucHVzaCgpOwotCi0gICAgVFB1YmxpY1R5cGUgaW50ZWdlcjsK
LSAgICBpbnRlZ2VyLnR5cGUgPSBFYnRJbnQ7Ci0gICAgaW50ZWdlci5zaXplID0gMTsKLSAgICBp
bnRlZ2VyLm1hdHJpeCA9IGZhbHNlOwotICAgIGludGVnZXIuYXJyYXkgPSBmYWxzZTsKLQotICAg
IFRQdWJsaWNUeXBlIGZsb2F0aW5nUG9pbnQ7Ci0gICAgZmxvYXRpbmdQb2ludC50eXBlID0gRWJ0
RmxvYXQ7Ci0gICAgZmxvYXRpbmdQb2ludC5zaXplID0gMTsKLSAgICBmbG9hdGluZ1BvaW50Lm1h
dHJpeCA9IGZhbHNlOwotICAgIGZsb2F0aW5nUG9pbnQuYXJyYXkgPSBmYWxzZTsKLQotICAgIFRQ
dWJsaWNUeXBlIHNhbXBsZXI7Ci0gICAgc2FtcGxlci5zaXplID0gMTsKLSAgICBzYW1wbGVyLm1h
dHJpeCA9IGZhbHNlOwotICAgIHNhbXBsZXIuYXJyYXkgPSBmYWxzZTsKLQotICAgIHN3aXRjaChz
aGFkZXJUeXBlKQotICAgIHsKLSAgICAgIGNhc2UgU0hfRlJBR01FTlRfU0hBREVSOgotICAgICAg
ICBzeW1ib2xUYWJsZS5zZXREZWZhdWx0UHJlY2lzaW9uKGludGVnZXIsIEVicE1lZGl1bSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBTSF9WRVJURVhfU0hBREVSOgotICAgICAgICBzeW1i
b2xUYWJsZS5zZXREZWZhdWx0UHJlY2lzaW9uKGludGVnZXIsIEVicEhpZ2gpOwotICAgICAgICBz
eW1ib2xUYWJsZS5zZXREZWZhdWx0UHJlY2lzaW9uKGZsb2F0aW5nUG9pbnQsIEVicEhpZ2gpOwot
ICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiTGFuZ3VhZ2Ug
bm90IHN1cHBvcnRlZCIpOwotICAgIH0KLSAgICAvLyBXZSBzZXQgZGVmYXVsdHMgZm9yIGFsbCB0
aGUgc2FtcGxlciB0eXBlcywgZXZlbiB0aG9zZSB0aGF0IGFyZQotICAgIC8vIG9ubHkgYXZhaWxh
YmxlIGlmIGFuIGV4dGVuc2lvbiBleGlzdHMuCi0gICAgZm9yIChpbnQgc2FtcGxlclR5cGUgPSBF
YnRHdWFyZFNhbXBsZXJCZWdpbiArIDE7Ci0gICAgICAgICBzYW1wbGVyVHlwZSA8IEVidEd1YXJk
U2FtcGxlckVuZDsgKytzYW1wbGVyVHlwZSkgewotICAgICAgICBzYW1wbGVyLnR5cGUgPSBzdGF0
aWNfY2FzdDxUQmFzaWNUeXBlPihzYW1wbGVyVHlwZSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLnNl
dERlZmF1bHRQcmVjaXNpb24oc2FtcGxlciwgRWJwTG93KTsKLSAgICB9Ci0KLSAgICBJbnNlcnRC
dWlsdEluRnVuY3Rpb25zKHNoYWRlclR5cGUsIHNoYWRlclNwZWMsIHJlc291cmNlcywgc3ltYm9s
VGFibGUpOwotCi0gICAgSWRlbnRpZnlCdWlsdElucyhzaGFkZXJUeXBlLCBzaGFkZXJTcGVjLCBy
ZXNvdXJjZXMsIHN5bWJvbFRhYmxlKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFRD
b21waWxlcjo6Y2xlYXJSZXN1bHRzKCkKLXsKLSAgICBhcnJheUJvdW5kc0NsYW1wZXIuQ2xlYW51
cCgpOwotICAgIGluZm9TaW5rLmluZm8uZXJhc2UoKTsKLSAgICBpbmZvU2luay5vYmouZXJhc2Uo
KTsKLSAgICBpbmZvU2luay5kZWJ1Zy5lcmFzZSgpOwotCi0gICAgYXR0cmlicy5jbGVhcigpOwot
ICAgIHVuaWZvcm1zLmNsZWFyKCk7Ci0gICAgdmFyeWluZ3MuY2xlYXIoKTsKLQotICAgIGJ1aWx0
SW5GdW5jdGlvbkVtdWxhdG9yLkNsZWFudXAoKTsKLQotICAgIG5hbWVNYXAuY2xlYXIoKTsKLX0K
LQotYm9vbCBUQ29tcGlsZXI6OmRldGVjdENhbGxEZXB0aChUSW50ZXJtTm9kZSogcm9vdCwgVElu
Zm9TaW5rJiBpbmZvU2luaywgYm9vbCBsaW1pdENhbGxTdGFja0RlcHRoKQotewotICAgIERldGVj
dENhbGxEZXB0aCBkZXRlY3QoaW5mb1NpbmssIGxpbWl0Q2FsbFN0YWNrRGVwdGgsIG1heENhbGxT
dGFja0RlcHRoKTsKLSAgICByb290LT50cmF2ZXJzZSgmZGV0ZWN0KTsKLSAgICBzd2l0Y2ggKGRl
dGVjdC5kZXRlY3RDYWxsRGVwdGgoKSkgewotICAgICAgICBjYXNlIERldGVjdENhbGxEZXB0aDo6
a0Vycm9yTm9uZToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBjYXNlIERldGVj
dENhbGxEZXB0aDo6a0Vycm9yTWlzc2luZ01haW46Ci0gICAgICAgICAgICBpbmZvU2luay5pbmZv
LnByZWZpeChFUHJlZml4RXJyb3IpOwotICAgICAgICAgICAgaW5mb1NpbmsuaW5mbyA8PCAiTWlz
c2luZyBtYWluKCkiOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjYXNlIERl
dGVjdENhbGxEZXB0aDo6a0Vycm9yUmVjdXJzaW9uOgotICAgICAgICAgICAgaW5mb1NpbmsuaW5m
by5wcmVmaXgoRVByZWZpeEVycm9yKTsKLSAgICAgICAgICAgIGluZm9TaW5rLmluZm8gPDwgIkZ1
bmN0aW9uIHJlY3Vyc2lvbiBkZXRlY3RlZCI7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGNhc2UgRGV0ZWN0Q2FsbERlcHRoOjprRXJyb3JNYXhEZXB0aEV4Y2VlZGVkOgotICAg
ICAgICAgICAgaW5mb1NpbmsuaW5mby5wcmVmaXgoRVByZWZpeEVycm9yKTsKLSAgICAgICAgICAg
IGluZm9TaW5rLmluZm8gPDwgIkZ1bmN0aW9uIGNhbGwgc3RhY2sgdG9vIGRlZXAiOwotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLXZvaWQgVENv
bXBpbGVyOjpyZXdyaXRlQ1NTU2hhZGVyKFRJbnRlcm1Ob2RlKiByb290KQotewotICAgIFJlbmFt
ZUZ1bmN0aW9uIHJlbmFtZXIoIm1haW4oIiwgImNzc19tYWluKCIpOwotICAgIHJvb3QtPnRyYXZl
cnNlKCZyZW5hbWVyKTsKLX0KLQotYm9vbCBUQ29tcGlsZXI6OnZhbGlkYXRlTGltaXRhdGlvbnMo
VEludGVybU5vZGUqIHJvb3QpIHsKLSAgICBWYWxpZGF0ZUxpbWl0YXRpb25zIHZhbGlkYXRlKHNo
YWRlclR5cGUsIGluZm9TaW5rLmluZm8pOwotICAgIHJvb3QtPnRyYXZlcnNlKCZ2YWxpZGF0ZSk7
Ci0gICAgcmV0dXJuIHZhbGlkYXRlLm51bUVycm9ycygpID09IDA7Ci19Ci0KLWJvb2wgVENvbXBp
bGVyOjplbmZvcmNlVGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290LCBib29sIG91
dHB1dEdyYXBoKQotewotICAgIGlmIChzaGFkZXJTcGVjICE9IFNIX1dFQkdMX1NQRUMpIHsKLSAg
ICAgICAgaW5mb1NpbmsuaW5mbyA8PCAiVGltaW5nIHJlc3RyaWN0aW9ucyBtdXN0IGJlIGVuZm9y
Y2VkIHVuZGVyIHRoZSBXZWJHTCBzcGVjLiI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBpZiAoc2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpIHsKLSAgICAgICAg
VERlcGVuZGVuY3lHcmFwaCBncmFwaChyb290KTsKLQotICAgICAgICAvLyBPdXRwdXQgYW55IGVy
cm9ycyBmaXJzdC4KLSAgICAgICAgYm9vbCBzdWNjZXNzID0gZW5mb3JjZUZyYWdtZW50U2hhZGVy
VGltaW5nUmVzdHJpY3Rpb25zKGdyYXBoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoZW4sIG91
dHB1dCB0aGUgZGVwZW5kZW5jeSBncmFwaC4KLSAgICAgICAgaWYgKG91dHB1dEdyYXBoKSB7Ci0g
ICAgICAgICAgICBURGVwZW5kZW5jeUdyYXBoT3V0cHV0IG91dHB1dChpbmZvU2luay5pbmZvKTsK
LSAgICAgICAgICAgIG91dHB1dC5vdXRwdXRBbGxTcGFubmluZ1RyZWVzKGdyYXBoKTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7Ci0gICAgfQotICAgIGVsc2Ug
ewotICAgICAgICByZXR1cm4gZW5mb3JjZVZlcnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhy
b290KTsKLSAgICB9Ci19Ci0KLWJvb2wgVENvbXBpbGVyOjpsaW1pdEV4cHJlc3Npb25Db21wbGV4
aXR5KFRJbnRlcm1Ob2RlKiByb290KQotewotICAgIFRJbnRlcm1UcmF2ZXJzZXIgdHJhdmVyc2Vy
OwotICAgIHJvb3QtPnRyYXZlcnNlKCZ0cmF2ZXJzZXIpOwotICAgIFREZXBlbmRlbmN5R3JhcGgg
Z3JhcGgocm9vdCk7Ci0KLSAgICBmb3IgKFRGdW5jdGlvbkNhbGxWZWN0b3I6OmNvbnN0X2l0ZXJh
dG9yIGl0ZXIgPSBncmFwaC5iZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpOwotICAgICAg
ICAgaXRlciAhPSBncmFwaC5lbmRVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMoKTsKLSAgICAgICAg
ICsraXRlcikKLSAgICB7Ci0gICAgICAgIFRHcmFwaEZ1bmN0aW9uQ2FsbCogc2FtcGxlclN5bWJv
bCA9ICppdGVyOwotICAgICAgICBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyIGdyYXBoVHJhdmVy
c2VyOwotICAgICAgICBzYW1wbGVyU3ltYm9sLT50cmF2ZXJzZSgmZ3JhcGhUcmF2ZXJzZXIpOwot
ICAgIH0KLQotICAgIGlmICh0cmF2ZXJzZXIuZ2V0TWF4RGVwdGgoKSA+IG1heEV4cHJlc3Npb25D
b21wbGV4aXR5KSB7Ci0gICAgICAgIGluZm9TaW5rLmluZm8gPDwgIkV4cHJlc3Npb24gdG9vIGNv
bXBsZXguIjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBUQ29tcGlsZXI6OmVuZm9yY2VGcmFnbWVudFNoYWRlclRpbWluZ1Jlc3RyaWN0
aW9ucyhjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCkKLXsKLSAgICBSZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nIHJlc3RyaWN0b3IoaW5mb1NpbmsuaW5mbyk7Ci0gICAgcmVzdHJpY3Rv
ci5lbmZvcmNlUmVzdHJpY3Rpb25zKGdyYXBoKTsKLSAgICByZXR1cm4gcmVzdHJpY3Rvci5udW1F
cnJvcnMoKSA9PSAwOwotfQotCi1ib29sIFRDb21waWxlcjo6ZW5mb3JjZVZlcnRleFNoYWRlclRp
bWluZ1Jlc3RyaWN0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCkKLXsKLSAgICBSZXN0cmljdFZlcnRl
eFNoYWRlclRpbWluZyByZXN0cmljdG9yKGluZm9TaW5rLmluZm8pOwotICAgIHJlc3RyaWN0b3Iu
ZW5mb3JjZVJlc3RyaWN0aW9ucyhyb290KTsKLSAgICByZXR1cm4gcmVzdHJpY3Rvci5udW1FcnJv
cnMoKSA9PSAwOwotfQotCi12b2lkIFRDb21waWxlcjo6Y29sbGVjdFZhcmlhYmxlcyhUSW50ZXJt
Tm9kZSogcm9vdCkKLXsKLSAgICBDb2xsZWN0VmFyaWFibGVzIGNvbGxlY3QoYXR0cmlicywgdW5p
Zm9ybXMsIHZhcnlpbmdzLCBoYXNoRnVuY3Rpb24pOwotICAgIHJvb3QtPnRyYXZlcnNlKCZjb2xs
ZWN0KTsKLX0KLQotYm9vbCBUQ29tcGlsZXI6OmVuZm9yY2VQYWNraW5nUmVzdHJpY3Rpb25zKCkK
LXsKLSAgICBWYXJpYWJsZVBhY2tlciBwYWNrZXI7Ci0gICAgYm9vbCBzdWNjZXNzID0gcGFja2Vy
LkNoZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cyhtYXhVbmlmb3JtVmVjdG9ycywgdW5p
Zm9ybXMpOwotICAgIGlmICghc3VjY2VzcykgewotICAgICAgICBpbmZvU2luay5pbmZvLnByZWZp
eChFUHJlZml4RXJyb3IpOwotICAgICAgICBpbmZvU2luay5pbmZvIDw8ICJ0b28gbWFueSB1bmlm
b3JtcyI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzdWNjZXNzID0gcGFj
a2VyLkNoZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cyhtYXhWYXJ5aW5nVmVjdG9ycywg
dmFyeWluZ3MpOwotCi0gICAgaWYgKCFzdWNjZXNzKSB7Ci0gICAgICAgIGluZm9TaW5rLmluZm8u
cHJlZml4KEVQcmVmaXhFcnJvcik7Ci0gICAgICAgIGluZm9TaW5rLmluZm8gPDwgInRvbyBtYW55
IHZhcnlpbmdzIjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIFRDb21waWxlcjo6bWFwTG9uZ1ZhcmlhYmxlTmFtZXMoVEludGVybU5v
ZGUqIHJvb3QpCi17Ci0gICAgQVNTRVJUKGxvbmdOYW1lTWFwKTsKLSAgICBNYXBMb25nVmFyaWFi
bGVOYW1lcyBtYXAobG9uZ05hbWVNYXApOwotICAgIHJvb3QtPnRyYXZlcnNlKCZtYXApOwotfQot
Ci1pbnQgVENvbXBpbGVyOjpnZXRNYXBwZWROYW1lTWF4TGVuZ3RoKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJWkUgKyAxOwotfQotCi1jb25zdCBURXh0
ZW5zaW9uQmVoYXZpb3ImIFRDb21waWxlcjo6Z2V0RXh0ZW5zaW9uQmVoYXZpb3IoKSBjb25zdAot
ewotICAgIHJldHVybiBleHRlbnNpb25CZWhhdmlvcjsKLX0KLQotY29uc3QgU2hCdWlsdEluUmVz
b3VyY2VzJiBUQ29tcGlsZXI6OmdldFJlc291cmNlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNv
bXBpbGVSZXNvdXJjZXM7Ci19Ci0KLWNvbnN0IEFycmF5Qm91bmRzQ2xhbXBlciYgVENvbXBpbGVy
OjpnZXRBcnJheUJvdW5kc0NsYW1wZXIoKSBjb25zdAotewotICAgIHJldHVybiBhcnJheUJvdW5k
c0NsYW1wZXI7Ci19Ci0KLVNoQXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kgVENvbXBpbGVyOjpn
ZXRBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNsYW1w
aW5nU3RyYXRlZ3k7Ci19Ci0KLWNvbnN0IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yJiBUQ29tcGls
ZXI6OmdldEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gYnVp
bHRJbkZ1bmN0aW9uRW11bGF0b3I7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvQ29uc3RhbnRVbmlvbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0NvbnN0YW50VW5pb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYjFlMzc4ODVmOTAxYjAyNGQ2MzQ2NTg0NzcxMmJmYjY4ODYwNzM0Yy4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvQ29uc3RhbnRVbmlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjU3
ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgX0NPTlNUQU5UX1VOSU9OX0lO
Q0xVREVEXwotI2RlZmluZSBfQ09OU1RBTlRfVU5JT05fSU5DTFVERURfCi0KLSNpbmNsdWRlIDxh
c3NlcnQuaD4KLQotY2xhc3MgQ29uc3RhbnRVbmlvbiB7Ci1wdWJsaWM6Ci0gICAgUE9PTF9BTExP
Q0FUT1JfTkVXX0RFTEVURSgpOwotICAgIENvbnN0YW50VW5pb24oKQotICAgIHsKLSAgICAgICAg
aUNvbnN0ID0gMDsKLSAgICAgICAgdHlwZSA9IEVidFZvaWQ7Ci0gICAgfQotCi0gICAgdm9pZCBz
ZXRJQ29uc3QoaW50IGkpIHtpQ29uc3QgPSBpOyB0eXBlID0gRWJ0SW50OyB9Ci0gICAgdm9pZCBz
ZXRGQ29uc3QoZmxvYXQgZikge2ZDb25zdCA9IGY7IHR5cGUgPSBFYnRGbG9hdDsgfQotICAgIHZv
aWQgc2V0QkNvbnN0KGJvb2wgYikge2JDb25zdCA9IGI7IHR5cGUgPSBFYnRCb29sOyB9Ci0KLSAg
ICBpbnQgZ2V0SUNvbnN0KCkgeyByZXR1cm4gaUNvbnN0OyB9Ci0gICAgZmxvYXQgZ2V0RkNvbnN0
KCkgeyByZXR1cm4gZkNvbnN0OyB9Ci0gICAgYm9vbCBnZXRCQ29uc3QoKSB7IHJldHVybiBiQ29u
c3Q7IH0KLSAgICBpbnQgZ2V0SUNvbnN0KCkgY29uc3QgeyByZXR1cm4gaUNvbnN0OyB9Ci0gICAg
ZmxvYXQgZ2V0RkNvbnN0KCkgY29uc3QgeyByZXR1cm4gZkNvbnN0OyB9Ci0gICAgYm9vbCBnZXRC
Q29uc3QoKSBjb25zdCB7IHJldHVybiBiQ29uc3Q7IH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBpbnQgaSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBpID09IGlDb25zdDsKLSAg
ICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgZmxvYXQgZikgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBmID09IGZDb25zdDsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgYm9vbCBiKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGIgPT0gYkNvbnN0Owot
ICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFu
dCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChjb25zdGFudC50eXBlICE9IHR5cGUpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAg
IGNhc2UgRWJ0SW50OgotICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50LmlDb25zdCA9PSBpQ29u
c3Q7Ci0gICAgICAgIGNhc2UgRWJ0RmxvYXQ6Ci0gICAgICAgICAgICByZXR1cm4gY29uc3RhbnQu
ZkNvbnN0ID09IGZDb25zdDsKLSAgICAgICAgY2FzZSBFYnRCb29sOgotICAgICAgICAgICAgcmV0
dXJuIGNvbnN0YW50LmJDb25zdCA9PSBiQ29uc3Q7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgaW50IGkpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gIW9wZXJhdG9yPT0o
aSk7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGZsb2F0IGYpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gIW9wZXJhdG9yPT0oZik7Ci0gICAgfQotCi0gICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IGJvb2wgYikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAhb3Bl
cmF0b3I9PShiKTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29uc3RhbnRV
bmlvbiYgY29uc3RhbnQpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gIW9wZXJhdG9yPT0o
Y29uc3RhbnQpOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I+KGNvbnN0IENvbnN0YW50VW5p
b24mIGNvbnN0YW50KSBjb25zdAotICAgIHsgCi0gICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0
YW50LnR5cGUpOwotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBFYnRJbnQ6
Ci0gICAgICAgICAgICByZXR1cm4gaUNvbnN0ID4gY29uc3RhbnQuaUNvbnN0OwotICAgICAgICBj
YXNlIEVidEZsb2F0OgotICAgICAgICAgICAgcmV0dXJuIGZDb25zdCA+IGNvbnN0YW50LmZDb25z
dDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBJbnZh
bGlkIG9wZXJhdGlvbiwgaGFuZGxlZCBhdCBzZW1hbnRpYyBhbmFseXNpcwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQp
IGNvbnN0Ci0gICAgeyAKLSAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7Ci0g
ICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEVidEludDoKLSAgICAgICAgICAg
IHJldHVybiBpQ29uc3QgPCBjb25zdGFudC5pQ29uc3Q7Ci0gICAgICAgIGNhc2UgRWJ0RmxvYXQ6
Ci0gICAgICAgICAgICByZXR1cm4gZkNvbnN0IDwgY29uc3RhbnQuZkNvbnN0OwotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIEludmFsaWQgb3BlcmF0aW9u
LCBoYW5kbGVkIGF0IHNlbWFudGljIGFuYWx5c2lzCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBD
b25zdGFudFVuaW9uIG9wZXJhdG9yKyhjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29u
c3QKLSAgICB7IAotICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOwotICAgICAgICBh
c3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0g
ICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0ICsgY29uc3Rh
bnQuaUNvbnN0KTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRWJ0RmxvYXQ6IHJldHVyblZhbHVlLnNl
dEZDb25zdChmQ29uc3QgKyBjb25zdGFudC5mQ29uc3QpOyBicmVhazsKLSAgICAgICAgZGVmYXVs
dDogYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLSAgICB9Ci0KLSAgICBDb25zdGFudFVuaW9uIG9wZXJh
dG9yLShjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKLSAgICB7IAotICAgICAg
ICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOwotICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25z
dGFudC50eXBlKTsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgRWJ0SW50
OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0IC0gY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7
Ci0gICAgICAgIGNhc2UgRWJ0RmxvYXQ6IHJldHVyblZhbHVlLnNldEZDb25zdChmQ29uc3QgLSBj
b25zdGFudC5mQ29uc3QpOyBicmVhazsKLSAgICAgICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYm
ICJEZWZhdWx0IG1pc3NpbmciKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZXR1cm5W
YWx1ZTsKLSAgICB9Ci0KLSAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yKihjb25zdCBDb25zdGFu
dFVuaW9uJiBjb25zdGFudCkgY29uc3QKLSAgICB7IAotICAgICAgICBDb25zdGFudFVuaW9uIHJl
dHVyblZhbHVlOwotICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKLSAgICAg
ICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJ
Q29uc3QoaUNvbnN0ICogY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRWJ0
RmxvYXQ6IHJldHVyblZhbHVlLnNldEZDb25zdChmQ29uc3QgKiBjb25zdGFudC5mQ29uc3QpOyBi
cmVhazsgCi0gICAgICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5n
Iik7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci0gICAgfQotCi0g
ICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvciUoY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQp
IGNvbnN0Ci0gICAgeyAKLSAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKLSAgICAg
ICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkg
ewotICAgICAgICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAlIGNv
bnN0YW50LmlDb25zdCk7IGJyZWFrOwotICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNl
ICYmICJEZWZhdWx0IG1pc3NpbmciKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZXR1
cm5WYWx1ZTsKLSAgICB9Ci0KLSAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yPj4oY29uc3QgQ29u
c3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0Ci0gICAgeyAKLSAgICAgICAgQ29uc3RhbnRVbmlv
biByZXR1cm5WYWx1ZTsKLSAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7Ci0g
ICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUu
c2V0SUNvbnN0KGlDb25zdCA+PiBjb25zdGFudC5pQ29uc3QpOyBicmVhazsKLSAgICAgICAgZGVm
YXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7Ci0gICAgICAgIH0K
LQotICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci0gICAgfQotCi0gICAgQ29uc3RhbnRVbmlv
biBvcGVyYXRvcjw8KGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAotICAgIHsg
Ci0gICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7Ci0gICAgICAgIGFzc2VydCh0eXBl
ID09IGNvbnN0YW50LnR5cGUpOwotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2Fz
ZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgPDwgY29uc3RhbnQuaUNvbnN0
KTsgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQg
bWlzc2luZyIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwotICAg
IH0KLQotICAgIENvbnN0YW50VW5pb24gb3BlcmF0b3ImKGNvbnN0IENvbnN0YW50VW5pb24mIGNv
bnN0YW50KSBjb25zdAotICAgIHsgCi0gICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7
Ci0gICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwotICAgICAgICBzd2l0Y2gg
KHR5cGUpIHsKLSAgICAgICAgY2FzZSBFYnRJbnQ6ICByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNv
bnN0ICYgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6ICAgICBhc3Nl
cnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0
dXJuIHJldHVyblZhbHVlOwotICAgIH0KLQotICAgIENvbnN0YW50VW5pb24gb3BlcmF0b3J8KGNv
bnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAotICAgIHsgCi0gICAgICAgIENvbnN0
YW50VW5pb24gcmV0dXJuVmFsdWU7Ci0gICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5
cGUpOwotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBFYnRJbnQ6ICByZXR1
cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0IHwgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7Ci0gICAg
ICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwotICAgIH0KLQotICAgIENvbnN0
YW50VW5pb24gb3BlcmF0b3JeKGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAot
ICAgIHsgCi0gICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7Ci0gICAgICAgIGFzc2Vy
dCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAg
ICAgY2FzZSBFYnRJbnQ6ICByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0IF4gY29uc3RhbnQu
aUNvbnN0KTsgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRl
ZmF1bHQgbWlzc2luZyIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJldHVyblZhbHVl
OwotICAgIH0KLQotICAgIENvbnN0YW50VW5pb24gb3BlcmF0b3ImJihjb25zdCBDb25zdGFudFVu
aW9uJiBjb25zdGFudCkgY29uc3QKLSAgICB7IAotICAgICAgICBDb25zdGFudFVuaW9uIHJldHVy
blZhbHVlOwotICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKLSAgICAgICAg
c3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgRWJ0Qm9vbDogcmV0dXJuVmFsdWUuc2V0QkNv
bnN0KGJDb25zdCAmJiBjb25zdGFudC5iQ29uc3QpOyBicmVhazsKLSAgICAgICAgZGVmYXVsdDog
ICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci0gICAgfQotCi0gICAgQ29uc3RhbnRVbmlvbiBvcGVy
YXRvcnx8KGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAotICAgIHsgCi0gICAg
ICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7Ci0gICAgICAgIGFzc2VydCh0eXBlID09IGNv
bnN0YW50LnR5cGUpOwotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBFYnRC
b29sOiByZXR1cm5WYWx1ZS5zZXRCQ29uc3QoYkNvbnN0IHx8IGNvbnN0YW50LmJDb25zdCk7IGJy
ZWFrOwotICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3Np
bmciKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLSAgICB9Ci0K
LSAgICBUQmFzaWNUeXBlIGdldFR5cGUoKSBjb25zdCB7IHJldHVybiB0eXBlOyB9Ci1wcml2YXRl
OgotCi0gICAgdW5pb24gIHsKLSAgICAgICAgaW50IGlDb25zdDsgIC8vIHVzZWQgZm9yIGl2ZWMs
IHNjYWxhciBpbnRzCi0gICAgICAgIGJvb2wgYkNvbnN0OyAvLyB1c2VkIGZvciBidmVjLCBzY2Fs
YXIgYm9vbHMKLSAgICAgICAgZmxvYXQgZkNvbnN0OyAgIC8vIHVzZWQgZm9yIHZlYywgbWF0LCBz
Y2FsYXIgZmxvYXRzCi0gICAgfSA7Ci0KLSAgICBUQmFzaWNUeXBlIHR5cGU7Ci19OwotCi0jZW5k
aWYgLy8gX0NPTlNUQU5UX1VOSU9OX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdENhbGxEZXB0aC5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0Q2FsbERlcHRoLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNjBkZjUyYzcxNTFhODk2YTE4YmY2Y2JkMjBiM2Y2MzQ1OTU4
OTY2Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0Q2FsbERlcHRoLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDE4NSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVk
ZSAiY29tcGlsZXIvRGV0ZWN0Q2FsbERlcHRoLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5mb1Np
bmsuaCIKLQotRGV0ZWN0Q2FsbERlcHRoOjpGdW5jdGlvbk5vZGU6OkZ1bmN0aW9uTm9kZShjb25z
dCBUU3RyaW5nJiBmbmFtZSkKLSAgICA6IG5hbWUoZm5hbWUpLAotICAgICAgdmlzaXQoUHJlVmlz
aXQpCi17Ci19Ci0KLWNvbnN0IFRTdHJpbmcmIERldGVjdENhbGxEZXB0aDo6RnVuY3Rpb25Ob2Rl
OjpnZXROYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbmFtZTsKLX0KLQotdm9pZCBEZXRlY3RD
YWxsRGVwdGg6OkZ1bmN0aW9uTm9kZTo6YWRkQ2FsbGVlKAotICAgIERldGVjdENhbGxEZXB0aDo6
RnVuY3Rpb25Ob2RlKiBjYWxsZWUpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjYWxs
ZWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChjYWxsZWVzW2ldID09IGNhbGxlZSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FsbGVlcy5wdXNoX2JhY2soY2FsbGVlKTsK
LX0KLQotaW50IERldGVjdENhbGxEZXB0aDo6RnVuY3Rpb25Ob2RlOjpkZXRlY3RDYWxsRGVwdGgo
RGV0ZWN0Q2FsbERlcHRoKiBkZXRlY3RDYWxsRGVwdGgsIGludCBkZXB0aCkKLXsKLSAgICBBU1NF
UlQodmlzaXQgPT0gUHJlVmlzaXQpOwotICAgIEFTU0VSVChkZXRlY3RDYWxsRGVwdGgpOwotCi0g
ICAgaW50IG1heERlcHRoID0gZGVwdGg7Ci0gICAgdmlzaXQgPSBJblZpc2l0OwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY2FsbGVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBzd2l0Y2gg
KGNhbGxlZXNbaV0tPnZpc2l0KSB7Ci0gICAgICAgICAgICBjYXNlIEluVmlzaXQ6Ci0gICAgICAg
ICAgICAgICAgLy8gY3ljbGUgZGV0ZWN0ZWQsIGkuZS4sIHJlY3Vyc2lvbiBkZXRlY3RlZC4KLSAg
ICAgICAgICAgICAgICByZXR1cm4ga0luZmluaXRlQ2FsbERlcHRoOwotICAgICAgICAgICAgY2Fz
ZSBQb3N0VmlzaXQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFBy
ZVZpc2l0OiB7Ci0gICAgICAgICAgICAgICAgLy8gQ2hlY2sgYmVmb3JlIHdlIHJlY3Vyc2Ugc28g
d2UgZG9uJ3QgZ28gdG9vIGRlcHRoCi0gICAgICAgICAgICAgICAgaWYgKGRldGVjdENhbGxEZXB0
aC0+Y2hlY2tFeGNlZWRzTWF4RGVwdGgoZGVwdGgpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZGVwdGg7Ci0gICAgICAgICAgICAgICAgaW50IGNhbGxEZXB0aCA9IGNhbGxlZXNbaV0tPmRl
dGVjdENhbGxEZXB0aChkZXRlY3RDYWxsRGVwdGgsIGRlcHRoICsgMSk7Ci0gICAgICAgICAgICAg
ICAgLy8gQ2hlY2sgYWZ0ZXIgd2UgcmVjdXJzZSBzbyB3ZSBjYW4gZXhpdCBpbW1lZGlhdGVseSBh
bmQgcHJvdmlkZSBpbmZvLgotICAgICAgICAgICAgICAgIGlmIChkZXRlY3RDYWxsRGVwdGgtPmNo
ZWNrRXhjZWVkc01heERlcHRoKGNhbGxEZXB0aCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZGV0
ZWN0Q2FsbERlcHRoLT5nZXRJbmZvU2luaygpLmluZm8gPDwgIjwtIiA8PCBjYWxsZWVzW2ldLT5n
ZXROYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsRGVwdGg7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1heERlcHRoID0gc3RkOjptYXgoY2FsbERlcHRo
LCBtYXhEZXB0aCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgdmlzaXQgPSBQb3N0VmlzaXQ7
Ci0gICAgcmV0dXJuIG1heERlcHRoOwotfQotCi12b2lkIERldGVjdENhbGxEZXB0aDo6RnVuY3Rp
b25Ob2RlOjpyZXNldCgpCi17Ci0gICAgdmlzaXQgPSBQcmVWaXNpdDsKLX0KLQotRGV0ZWN0Q2Fs
bERlcHRoOjpEZXRlY3RDYWxsRGVwdGgoVEluZm9TaW5rJiBpbmZvU2luaywgYm9vbCBsaW1pdENh
bGxTdGFja0RlcHRoLCBpbnQgbWF4Q2FsbFN0YWNrRGVwdGgpCi0gICAgOiBUSW50ZXJtVHJhdmVy
c2VyKHRydWUsIGZhbHNlLCB0cnVlLCBmYWxzZSksCi0gICAgICBjdXJyZW50RnVuY3Rpb24oTlVM
TCksCi0gICAgICBpbmZvU2luayhpbmZvU2luayksCi0gICAgICBtYXhEZXB0aChsaW1pdENhbGxT
dGFja0RlcHRoID8gbWF4Q2FsbFN0YWNrRGVwdGggOiBGdW5jdGlvbk5vZGU6OmtJbmZpbml0ZUNh
bGxEZXB0aCkKLXsKLX0KLQotRGV0ZWN0Q2FsbERlcHRoOjp+RGV0ZWN0Q2FsbERlcHRoKCkKLXsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9ucy5zaXplKCk7ICsraSkKLSAgICAg
ICAgZGVsZXRlIGZ1bmN0aW9uc1tpXTsKLX0KLQotYm9vbCBEZXRlY3RDYWxsRGVwdGg6OnZpc2l0
QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQotewotICAgIHN3
aXRjaCAobm9kZS0+Z2V0T3AoKSkKLSAgICB7Ci0gICAgICAgIGNhc2UgRU9wUHJvdG90eXBlOgot
ICAgICAgICAgICAgLy8gRnVuY3Rpb24gZGVjbGFyYXRpb24uCi0gICAgICAgICAgICAvLyBEb24n
dCBhZGQgRnVuY3Rpb25Ob2RlIGhlcmUgYmVjYXVzZSBub2RlLT5nZXROYW1lKCkgaXMgdGhlCi0g
ICAgICAgICAgICAvLyB1bm1hbmdsZWQgZnVuY3Rpb24gbmFtZS4KLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEVPcEZ1bmN0aW9uOiB7Ci0gICAgICAgICAgICAvLyBGdW5jdGlvbiBk
ZWZpbml0aW9uLgotICAgICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KSB7Ci0gICAgICAg
ICAgICAgICAgY3VycmVudEZ1bmN0aW9uID0gZmluZEZ1bmN0aW9uQnlOYW1lKG5vZGUtPmdldE5h
bWUoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGdW5jdGlvbiA9PSBOVUxMKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGdW5jdGlvbiA9IG5ldyBGdW5jdGlvbk5vZGUobm9k
ZS0+Z2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25zLnB1c2hfYmFjayhj
dXJyZW50RnVuY3Rpb24pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAodmlzaXQgPT0gUG9zdFZpc2l0KSB7Ci0gICAgICAgICAgICAgICAgY3VycmVudEZ1bmN0aW9u
ID0gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgRU9wRnVuY3Rpb25DYWxsOiB7Ci0gICAgICAgICAgICAvLyBGdW5jdGlvbiBj
YWxsLgotICAgICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KSB7Ci0gICAgICAgICAgICAg
ICAgRnVuY3Rpb25Ob2RlKiBmdW5jID0gZmluZEZ1bmN0aW9uQnlOYW1lKG5vZGUtPmdldE5hbWUo
KSk7Ci0gICAgICAgICAgICAgICAgaWYgKGZ1bmMgPT0gTlVMTCkgewotICAgICAgICAgICAgICAg
ICAgICBmdW5jID0gbmV3IEZ1bmN0aW9uTm9kZShub2RlLT5nZXROYW1lKCkpOwotICAgICAgICAg
ICAgICAgICAgICBmdW5jdGlvbnMucHVzaF9iYWNrKGZ1bmMpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZ1bmN0aW9uKQotICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50RnVuY3Rpb24tPmFkZENhbGxlZShmdW5jKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRGV0ZWN0Q2FsbERlcHRo
OjpjaGVja0V4Y2VlZHNNYXhEZXB0aChpbnQgZGVwdGgpCi17Ci0gICAgcmV0dXJuIGRlcHRoID49
IG1heERlcHRoOwotfQotCi12b2lkIERldGVjdENhbGxEZXB0aDo6cmVzZXRGdW5jdGlvbk5vZGVz
KCkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9ucy5zaXplKCk7ICsraSkg
ewotICAgICAgICBmdW5jdGlvbnNbaV0tPnJlc2V0KCk7Ci0gICAgfQotfQotCi1EZXRlY3RDYWxs
RGVwdGg6OkVycm9yQ29kZSBEZXRlY3RDYWxsRGVwdGg6OmRldGVjdENhbGxEZXB0aEZvckZ1bmN0
aW9uKEZ1bmN0aW9uTm9kZSogZnVuYykKLXsKLSAgICBjdXJyZW50RnVuY3Rpb24gPSBOVUxMOwot
ICAgIHJlc2V0RnVuY3Rpb25Ob2RlcygpOwotCi0gICAgaW50IG1heENhbGxEZXB0aCA9IGZ1bmMt
PmRldGVjdENhbGxEZXB0aCh0aGlzLCAxKTsKLQotICAgIGlmIChtYXhDYWxsRGVwdGggPT0gRnVu
Y3Rpb25Ob2RlOjprSW5maW5pdGVDYWxsRGVwdGgpCi0gICAgICAgIHJldHVybiBrRXJyb3JSZWN1
cnNpb247Ci0KLSAgICBpZiAobWF4Q2FsbERlcHRoID49IG1heERlcHRoKQotICAgICAgICByZXR1
cm4ga0Vycm9yTWF4RGVwdGhFeGNlZWRlZDsKLQotICAgIHJldHVybiBrRXJyb3JOb25lOwotfQot
Ci1EZXRlY3RDYWxsRGVwdGg6OkVycm9yQ29kZSBEZXRlY3RDYWxsRGVwdGg6OmRldGVjdENhbGxE
ZXB0aCgpCi17Ci0gICAgaWYgKG1heERlcHRoICE9IEZ1bmN0aW9uTm9kZTo6a0luZmluaXRlQ2Fs
bERlcHRoKSB7Ci0gICAgICAgIC8vIENoZWNrIGFsbCBmdW5jdGlvbnMgYmVjYXVzZSB0aGUgZHJp
dmVyIG1heSBmYWlsIG9uIHRoZW0KLSAgICAgICAgLy8gVE9ETzogQmVmb3JlIGRldGVjdGluZ1Jl
Y3Vyc2lvbiwgc3RyaXAgdW51c2VkIGZ1bmN0aW9ucy4KLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBmdW5jdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIEVycm9yQ29kZSBl
cnJvciA9IGRldGVjdENhbGxEZXB0aEZvckZ1bmN0aW9uKGZ1bmN0aW9uc1tpXSk7Ci0gICAgICAg
ICAgICBpZiAoZXJyb3IgIT0ga0Vycm9yTm9uZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3I7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBGdW5jdGlvbk5vZGUqIG1haW4g
PSBmaW5kRnVuY3Rpb25CeU5hbWUoIm1haW4oIik7Ci0gICAgICAgIGlmIChtYWluID09IE5VTEwp
Ci0gICAgICAgICAgICByZXR1cm4ga0Vycm9yTWlzc2luZ01haW47Ci0KLSAgICAgICAgcmV0dXJu
IGRldGVjdENhbGxEZXB0aEZvckZ1bmN0aW9uKG1haW4pOwotICAgIH0KLQotICAgIHJldHVybiBr
RXJyb3JOb25lOwotfQotCi1EZXRlY3RDYWxsRGVwdGg6OkZ1bmN0aW9uTm9kZSogRGV0ZWN0Q2Fs
bERlcHRoOjpmaW5kRnVuY3Rpb25CeU5hbWUoCi0gICAgY29uc3QgVFN0cmluZyYgbmFtZSkKLXsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9ucy5zaXplKCk7ICsraSkgewotICAg
ICAgICBpZiAoZnVuY3Rpb25zW2ldLT5nZXROYW1lKCkgPT0gbmFtZSkKLSAgICAgICAgICAgIHJl
dHVybiBmdW5jdGlvbnNbaV07Ci0gICAgfQotICAgIHJldHVybiBOVUxMOwotfQotCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0Q2FsbERlcHRo
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0Q2FsbERlcHRo
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5ZTg1Zjg4ZjZlYTI2OGRkNGU1MDU0
ZjY1YmNmYTliMTE3NWZhN2MuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdENhbGxE
ZXB0aC5oCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LQotI2lmbmRlZiBDT01QSUxFUl9ERVRFQ1RfUkVDVVJTSU9OX0hfCi0jZGVmaW5lIENPTVBJTEVS
X0RFVEVDVF9SRUNVUlNJT05fSF8KLQotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgot
Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgi
Ci0jaW5jbHVkZSAiY29tcGlsZXIvVmFyaWFibGVJbmZvLmgiCi0KLWNsYXNzIFRJbmZvU2luazsK
LQotLy8gVHJhdmVyc2VzIGludGVybWVkaWF0ZSB0cmVlIHRvIGRldGVjdCBmdW5jdGlvbiByZWN1
cnNpb24uCi1jbGFzcyBEZXRlY3RDYWxsRGVwdGggOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7
Ci1wdWJsaWM6Ci0gICAgZW51bSBFcnJvckNvZGUgewotICAgICAgICBrRXJyb3JNaXNzaW5nTWFp
biwKLSAgICAgICAga0Vycm9yUmVjdXJzaW9uLAotICAgICAgICBrRXJyb3JNYXhEZXB0aEV4Y2Vl
ZGVkLAotICAgICAgICBrRXJyb3JOb25lCi0gICAgfTsKLQotICAgIERldGVjdENhbGxEZXB0aChU
SW5mb1NpbmsmIGluZm9TeW5jLCBib29sIGxpbWl0Q2FsbFN0YWNrRGVwdGgsIGludCBtYXhDYWxs
U3RhY2tEZXB0aCk7Ci0gICAgfkRldGVjdENhbGxEZXB0aCgpOwotCi0gICAgdmlydHVhbCBib29s
IHZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7Ci0KLSAgICBib29sIGNo
ZWNrRXhjZWVkc01heERlcHRoKGludCBkZXB0aCk7Ci0KLSAgICBFcnJvckNvZGUgZGV0ZWN0Q2Fs
bERlcHRoKCk7Ci0KLXByaXZhdGU6Ci0gICAgY2xhc3MgRnVuY3Rpb25Ob2RlIHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQga0luZmluaXRlQ2FsbERlcHRoID0gSU5UX01B
WDsKLQotICAgICAgICBGdW5jdGlvbk5vZGUoY29uc3QgVFN0cmluZyYgZm5hbWUpOwotCi0gICAg
ICAgIGNvbnN0IFRTdHJpbmcmIGdldE5hbWUoKSBjb25zdDsKLQotICAgICAgICAvLyBJZiBhIGZ1
bmN0aW9uIGlzIGFscmVhZHkgaW4gdGhlIGNhbGxlZSBsaXN0LCB0aGlzIGJlY29tZXMgYSBuby1v
cC4KLSAgICAgICAgdm9pZCBhZGRDYWxsZWUoRnVuY3Rpb25Ob2RlKiBjYWxsZWUpOwotCi0gICAg
ICAgIC8vIFJldHVybnMga0luaWZpbml0eUNhbGxEZXB0aCBpZiByZWN1cnNpdmUgZnVuY3Rpb24g
Y2FsbHMgYXJlIGRldGVjdGVkLgotICAgICAgICBpbnQgZGV0ZWN0Q2FsbERlcHRoKERldGVjdENh
bGxEZXB0aCogZGV0ZWN0Q2FsbERlcHRoLCBpbnQgZGVwdGgpOwotCi0gICAgICAgIC8vIFJlc2V0
IHN0YXRlLgotICAgICAgICB2b2lkIHJlc2V0KCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICAv
LyBtYW5nbGVkIGZ1bmN0aW9uIG5hbWUgaXMgdW5pcXVlLgotICAgICAgICBUU3RyaW5nIG5hbWU7
Ci0KLSAgICAgICAgLy8gZnVuY3Rpb25zIHRoYXQgYXJlIGRpcmVjdGx5IGNhbGxlZCBieSB0aGlz
IGZ1bmN0aW9uLgotICAgICAgICBUVmVjdG9yPEZ1bmN0aW9uTm9kZSo+IGNhbGxlZXM7Ci0KLSAg
ICAgICAgVmlzaXQgdmlzaXQ7Ci0gICAgfTsKLQotICAgIEVycm9yQ29kZSBkZXRlY3RDYWxsRGVw
dGhGb3JGdW5jdGlvbihGdW5jdGlvbk5vZGUqIGZ1bmMpOwotICAgIEZ1bmN0aW9uTm9kZSogZmlu
ZEZ1bmN0aW9uQnlOYW1lKGNvbnN0IFRTdHJpbmcmIG5hbWUpOwotICAgIHZvaWQgcmVzZXRGdW5j
dGlvbk5vZGVzKCk7Ci0KLSAgICBUSW5mb1NpbmsmIGdldEluZm9TaW5rKCkgeyByZXR1cm4gaW5m
b1Npbms7IH0KLQotICAgIFRWZWN0b3I8RnVuY3Rpb25Ob2RlKj4gZnVuY3Rpb25zOwotICAgIEZ1
bmN0aW9uTm9kZSogY3VycmVudEZ1bmN0aW9uOwotICAgIFRJbmZvU2luayYgaW5mb1Npbms7Ci0g
ICAgaW50IG1heERlcHRoOwotCi0gICAgRGV0ZWN0Q2FsbERlcHRoKGNvbnN0IERldGVjdENhbGxE
ZXB0aCYpOwotICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IERldGVjdENhbGxEZXB0aCYpOwotfTsK
LQotI2VuZGlmICAvLyBDT01QSUxFUl9ERVRFQ1RfUkVDVVJTSU9OX0hfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGlu
dWl0eS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjZmU0OWJhMjI0MmE4ZGNm
MmNlNjk4ZDljM2VhNjA2Yzk5NzkyNGUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVj
dERpc2NvbnRpbnVpdHkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0vLwotLy8gQ29udGFpbnMgYW5hbHlzaXMgdXRpbGl0aWVzIGZvciBkZWFsaW5nIHdpdGgg
SExTTCdzIGxhY2sgb2Ygc3VwcG9ydCBmb3IKLS8vIHRoZSB1c2Ugb2YgaW50cmluc2ljIGZ1bmN0
aW9ucyB3aGljaCAoaW1wbGljaXRseSBvciBleHBsaWNpdGx5KSBjb21wdXRlCi0vLyBncmFkaWVu
dHMgb2YgZnVuY3Rpb25zIHdpdGggZGlzY29udGludWl0aWVzLiAKLS8vCi0KLSNpbmNsdWRlICJj
b21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmgiCi0KLSNpbmNsdWRlICJjb21waWxlci9QYXJz
ZUNvbnRleHQuaCIKLQotbmFtZXNwYWNlIHNoCi17Ci1ib29sIERldGVjdExvb3BEaXNjb250aW51
aXR5Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKLXsKLSAgICBtTG9vcERlcHRoID0gMDsK
LSAgICBtTG9vcERpc2NvbnRpbnVpdHkgPSBmYWxzZTsKLSAgICBub2RlLT50cmF2ZXJzZSh0aGlz
KTsKLSAgICByZXR1cm4gbUxvb3BEaXNjb250aW51aXR5OwotfQotCi1ib29sIERldGVjdExvb3BE
aXNjb250aW51aXR5Ojp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpsb29wKQot
ewotICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKLSAgICB7Ci0gICAgICAgICsrbUxvb3BEZXB0
aDsKLSAgICB9Ci0gICAgZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZpc2l0KQotICAgIHsKLSAgICAg
ICAgLS1tTG9vcERlcHRoOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIERl
dGVjdExvb3BEaXNjb250aW51aXR5Ojp2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJy
YW5jaCAqbm9kZSkKLXsKLSAgICBpZiAobUxvb3BEaXNjb250aW51aXR5KQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghbUxvb3BEZXB0aCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09w
KCkpCi0gICAgewotICAgICAgY2FzZSBFT3BLaWxsOgotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgRU9wQnJlYWs6Ci0gICAgICBjYXNlIEVPcENvbnRpbnVlOgotICAgICAgY2FzZSBFT3BSZXR1
cm46Ci0gICAgICAgIG1Mb29wRGlzY29udGludWl0eSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gIW1Mb29w
RGlzY29udGludWl0eTsKLX0KLQotYm9vbCBEZXRlY3RMb29wRGlzY29udGludWl0eTo6dmlzaXRB
Z2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUpCi17Ci0gICAgcmV0
dXJuICFtTG9vcERpc2NvbnRpbnVpdHk7Ci19Ci0KLWJvb2wgY29udGFpbnNMb29wRGlzY29udGlu
dWl0eShUSW50ZXJtTm9kZSAqbm9kZSkKLXsKLSAgICBEZXRlY3RMb29wRGlzY29udGludWl0eSBk
ZXRlY3RMb29wRGlzY29udGludWl0eTsKLSAgICByZXR1cm4gZGV0ZWN0TG9vcERpc2NvbnRpbnVp
dHkudHJhdmVyc2Uobm9kZSk7Ci19Ci0KLWJvb2wgRGV0ZWN0R3JhZGllbnRPcGVyYXRpb246OnRy
YXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKQotewotICAgIG1HcmFkaWVudE9wZXJhdGlvbiA9IGZh
bHNlOwotICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOwotICAgIHJldHVybiBtR3JhZGllbnRPcGVy
YXRpb247Ci19Ci0KLWJvb2wgRGV0ZWN0R3JhZGllbnRPcGVyYXRpb246OnZpc2l0VW5hcnkoVmlz
aXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9kZSkKLXsKLSAgICBpZiAobUdyYWRpZW50T3BlcmF0
aW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHN3aXRjaCAo
bm9kZS0+Z2V0T3AoKSkKLSAgICB7Ci0gICAgICBjYXNlIEVPcERGZHg6Ci0gICAgICBjYXNlIEVP
cERGZHk6Ci0gICAgICAgIG1HcmFkaWVudE9wZXJhdGlvbiA9IHRydWU7Ci0gICAgICBkZWZhdWx0
OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gIW1HcmFkaWVudE9wZXJhdGlv
bjsKLX0KLQotYm9vbCBEZXRlY3RHcmFkaWVudE9wZXJhdGlvbjo6dmlzaXRBZ2dyZWdhdGUoVmlz
aXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUpCi17Ci0gICAgaWYgKG1HcmFkaWVudE9w
ZXJhdGlvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAo
bm9kZS0+Z2V0T3AoKSA9PSBFT3BGdW5jdGlvbkNhbGwpCi0gICAgewotICAgICAgICBpZiAoIW5v
ZGUtPmlzVXNlckRlZmluZWQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgVFN0cmluZyBuYW1l
ID0gVEZ1bmN0aW9uOjp1bm1hbmdsZU5hbWUobm9kZS0+Z2V0TmFtZSgpKTsKLQotICAgICAgICAg
ICAgaWYgKG5hbWUgPT0gInRleHR1cmUyRCIgfHwKLSAgICAgICAgICAgICAgICBuYW1lID09ICJ0
ZXh0dXJlMkRQcm9qIiB8fAotICAgICAgICAgICAgICAgIG5hbWUgPT0gInRleHR1cmVDdWJlIikK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtR3JhZGllbnRPcGVyYXRpb24gPSB0cnVl
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAg
ICAgICAgICAgLy8gV2hlbiBhIHVzZXIgZGVmaW5lZCBmdW5jdGlvbiBpcyBjYWxsZWQsIHdlIGhh
dmUgdG8KLSAgICAgICAgICAgIC8vIGNvbnNlcnZhdGl2ZWx5IGFzc3VtZSBpdCB0byBjb250YWlu
IGdyYWRpZW50IG9wZXJhdGlvbnMKLSAgICAgICAgICAgIG1HcmFkaWVudE9wZXJhdGlvbiA9IHRy
dWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gIW1HcmFkaWVudE9wZXJhdGlvbjsK
LX0KLQotYm9vbCBjb250YWluc0dyYWRpZW50T3BlcmF0aW9uKFRJbnRlcm1Ob2RlICpub2RlKQot
ewotICAgIERldGVjdEdyYWRpZW50T3BlcmF0aW9uIGRldGVjdEdyYWRpZW50T3BlcmF0aW9uOwot
ICAgIHJldHVybiBkZXRlY3RHcmFkaWVudE9wZXJhdGlvbi50cmF2ZXJzZShub2RlKTsKLX0KLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3RE
aXNjb250aW51aXR5LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0
ZWN0RGlzY29udGludWl0eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTUyMGJk
NWIwMmY1YTJmMzVlODljODk3ZjBmMTQwYjNlYzEyM2Q3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9EZXRlY3REaXNjb250aW51aXR5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBA
Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgotLy8KLS8vIENvbnRhaW5zIGFuYWx5c2lzIHV0aWxpdGllcyBmb3IgZGVhbGlu
ZyB3aXRoIEhMU0wncyBsYWNrIG9mIHN1cHBvcnQgZm9yCi0vLyB0aGUgdXNlIG9mIGludHJpbnNp
YyBmdW5jdGlvbnMgd2hpY2ggKGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSkgY29tcHV0ZQotLy8g
Z3JhZGllbnRzIG9mIGZ1bmN0aW9ucyB3aXRoIGRpc2NvbnRpbnVpdGllcy4gCi0vLwotCi0jaWZu
ZGVmIENPTVBJTEVSX0RFVEVDVERJU0NPTlRJTlVJVFlfSF8KLSNkZWZpbmUgQ09NUElMRVJfREVU
RUNURElTQ09OVElOVUlUWV9IXwotCi0jaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgi
Ci0KLW5hbWVzcGFjZSBzaAotewotLy8gQ2hlY2tzIHdoZXRoZXIgYSBsb29wIGNhbiBydW4gZm9y
IGEgdmFyaWFibGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMKLWNsYXNzIERldGVjdExvb3BEaXNjb250
aW51aXR5IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKLXsKLSAgcHVibGljOgotICAgIGJvb2wg
dHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpOwotCi0gIHByb3RlY3RlZDoKLSAgICBib29sIHZp
c2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2RlKTsKLSAgICBib29sIHZp
c2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AgKmxvb3ApOwotICAgIGJvb2wgdmlzaXRB
Z2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUpOwotCi0gICAgaW50
IG1Mb29wRGVwdGg7Ci0gICAgYm9vbCBtTG9vcERpc2NvbnRpbnVpdHk7Ci19OwotCi1ib29sIGNv
bnRhaW5zTG9vcERpc2NvbnRpbnVpdHkoVEludGVybU5vZGUgKm5vZGUpOwotCi0vLyBDaGVja3Mg
Zm9yIGludHJpbnNpYyBmdW5jdGlvbnMgd2hpY2ggY29tcHV0ZSBncmFkaWVudHMKLWNsYXNzIERl
dGVjdEdyYWRpZW50T3BlcmF0aW9uIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKLXsKLSAgcHVi
bGljOgotICAgIGJvb2wgdHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpOwotCi0gIHByb3RlY3Rl
ZDoKLSAgICBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9kZSk7
Ci0gICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAq
bm9kZSk7Ci0KLSAgICBib29sIG1HcmFkaWVudE9wZXJhdGlvbjsKLX07Ci0KLWJvb2wgY29udGFp
bnNHcmFkaWVudE9wZXJhdGlvbihUSW50ZXJtTm9kZSAqbm9kZSk7Ci0KLX0KLQotI2VuZGlmICAg
Ly8gQ09NUElMRVJfREVURUNURElTQ09OVElOVUlUWV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaWFnbm9zdGljcy5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDhhMzhjNDFhNjU0MjMyMWU4NTY0MjZiYjkzZDI3MTQyOTM2MDkyMjQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDYzICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvRGlh
Z25vc3RpY3MuaCIKLQotI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCi0jaW5jbHVkZSAiY29t
cGlsZXIvSW5mb1NpbmsuaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvU291cmNl
TG9jYXRpb24uaCIKLQotVERpYWdub3N0aWNzOjpURGlhZ25vc3RpY3MoVEluZm9TaW5rJiBpbmZv
U2luaykgOgotICAgIG1JbmZvU2luayhpbmZvU2luayksCi0gICAgbU51bUVycm9ycygwKSwKLSAg
ICBtTnVtV2FybmluZ3MoMCkKLXsKLX0KLQotVERpYWdub3N0aWNzOjp+VERpYWdub3N0aWNzKCkK
LXsKLX0KLQotdm9pZCBURGlhZ25vc3RpY3M6OndyaXRlSW5mbyhTZXZlcml0eSBzZXZlcml0eSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBs
b2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiByZWFz
b24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0b2tl
biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGV4dHJh
KQotewotICAgIFRQcmVmaXhUeXBlIHByZWZpeCA9IEVQcmVmaXhOb25lOwotICAgIHN3aXRjaCAo
c2V2ZXJpdHkpCi0gICAgewotICAgICAgY2FzZSBFUlJPUjoKLSAgICAgICAgKyttTnVtRXJyb3Jz
OwotICAgICAgICBwcmVmaXggPSBFUHJlZml4RXJyb3I7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBXQVJOSU5HOgotICAgICAgICArK21OdW1XYXJuaW5nczsKLSAgICAgICAgcHJlZml4ID0g
RVByZWZpeFdhcm5pbmc7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAg
VU5SRUFDSEFCTEUoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgVEluZm9TaW5rQmFz
ZSYgc2luayA9IG1JbmZvU2luay5pbmZvOwotICAgIC8qIFZDKysgZm9ybWF0OiBmaWxlKGxpbmVu
dW0pIDogZXJyb3IgIzogJ3Rva2VuJyA6IGV4dHJhaW5mbyAqLwotICAgIHNpbmsucHJlZml4KHBy
ZWZpeCk7Ci0gICAgc2luay5sb2NhdGlvbihsb2MuZmlsZSwgbG9jLmxpbmUpOwotICAgIHNpbmsg
PDwgIiciIDw8IHRva2VuIDw8ICAiJyA6ICIgPDwgcmVhc29uIDw8ICIgIiA8PCBleHRyYSA8PCAi
XG4iOwotfQotCi12b2lkIFREaWFnbm9zdGljczo6d3JpdGVEZWJ1Zyhjb25zdCBzdGQ6OnN0cmlu
ZyYgc3RyKQotewotICAgIG1JbmZvU2luay5kZWJ1ZyA8PCBzdHI7Ci19Ci0KLXZvaWQgVERpYWdu
b3N0aWNzOjpwcmludChJRCBpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcDo6
U291cmNlTG9jYXRpb24mIGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6
OnN0cmluZyYgdGV4dCkKLXsKLSAgICB3cml0ZUluZm8oc2V2ZXJpdHkoaWQpLCBsb2MsIG1lc3Nh
Z2UoaWQpLCB0ZXh0LCAiIik7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9EaWFnbm9zdGljcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBj
YjcxYmIxMjA0MjI4YTc0NzM3NGEyNmVmZDg5YzdjNjcyYmI1NmI4Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9EaWFnbm9zdGljcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfRElBR05PU1RJQ1NfSF8KLSNkZWZpbmUg
Q09NUElMRVJfRElBR05PU1RJQ1NfSF8KLQotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9EaWFnbm9zdGljc0Jhc2UuaCIKLQotY2xhc3MgVEluZm9TaW5rOwotCi1jbGFzcyBURGlhZ25v
c3RpY3MgOiBwdWJsaWMgcHA6OkRpYWdub3N0aWNzCi17Ci0gIHB1YmxpYzoKLSAgICBURGlhZ25v
c3RpY3MoVEluZm9TaW5rJiBpbmZvU2luayk7Ci0gICAgdmlydHVhbCB+VERpYWdub3N0aWNzKCk7
Ci0KLSAgICBUSW5mb1NpbmsmIGluZm9TaW5rKCkgeyByZXR1cm4gbUluZm9TaW5rOyB9Ci0KLSAg
ICBpbnQgbnVtRXJyb3JzKCkgY29uc3QgeyByZXR1cm4gbU51bUVycm9yczsgfQotICAgIGludCBu
dW1XYXJuaW5ncygpIGNvbnN0IHsgcmV0dXJuIG1OdW1XYXJuaW5nczsgfQotCi0gICAgdm9pZCB3
cml0ZUluZm8oU2V2ZXJpdHkgc2V2ZXJpdHksCi0gICAgICAgICAgICAgICAgICAgY29uc3QgcHA6
OlNvdXJjZUxvY2F0aW9uJiBsb2MsCi0gICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJp
bmcmIHJlYXNvbiwKLSAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdG9rZW4s
Ci0gICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGV4dHJhKTsKLQotICAgIHZv
aWQgd3JpdGVEZWJ1Zyhjb25zdCBzdGQ6OnN0cmluZyYgc3RyKTsKLQotICBwcm90ZWN0ZWQ6Ci0g
ICAgdmlydHVhbCB2b2lkIHByaW50KElEIGlkLAotICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3RkOjpzdHJpbmcmIHRleHQpOwotCi0gIHByaXZhdGU6Ci0gICAgVEluZm9TaW5rJiBtSW5mb1Np
bms7Ci0gICAgaW50IG1OdW1FcnJvcnM7Ci0gICAgaW50IG1OdW1XYXJuaW5nczsKLX07Ci0KLSNl
bmRpZiAgLy8gQ09NUElMRVJfRElBR05PU1RJQ1NfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFmNmFiM2FmNWIwMTVhNjcyYWIxNmNiZjY4NzgzNDcw
YjRiYzdmYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxNjEgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAx
MiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRl
ICJjb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmgiCi0KLSNpbmNsdWRlIDxzc3RyZWFtPgotCi0j
aW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKLSNpbmNsdWRlICJjb21waWxlci9EaWFnbm9zdGlj
cy5oIgotCi1zdGF0aWMgVEJlaGF2aW9yIGdldEJlaGF2aW9yKGNvbnN0IHN0ZDo6c3RyaW5nJiBz
dHIpCi17Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtSZXF1aXJlKCJyZXF1aXJlIik7
Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtFbmFibGUoImVuYWJsZSIpOwotICAgIHN0
YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlzYWJsZSgiZGlzYWJsZSIpOwotICAgIHN0YXRpYyBj
b25zdCBzdGQ6OnN0cmluZyBrV2Fybigid2FybiIpOwotCi0gICAgaWYgKHN0ciA9PSBrUmVxdWly
ZSkgcmV0dXJuIEVCaFJlcXVpcmU7Ci0gICAgZWxzZSBpZiAoc3RyID09IGtFbmFibGUpIHJldHVy
biBFQmhFbmFibGU7Ci0gICAgZWxzZSBpZiAoc3RyID09IGtEaXNhYmxlKSByZXR1cm4gRUJoRGlz
YWJsZTsKLSAgICBlbHNlIGlmIChzdHIgPT0ga1dhcm4pIHJldHVybiBFQmhXYXJuOwotICAgIHJl
dHVybiBFQmhVbmRlZmluZWQ7Ci19Ci0KLVREaXJlY3RpdmVIYW5kbGVyOjpURGlyZWN0aXZlSGFu
ZGxlcihURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFREaWFnbm9zdGljcyYgZGlhZ25vc3RpY3MpCi0gICAgOiBtRXh0
ZW5zaW9uQmVoYXZpb3IoZXh0QmVoYXZpb3IpLAotICAgICAgbURpYWdub3N0aWNzKGRpYWdub3N0
aWNzKQotewotfQotCi1URGlyZWN0aXZlSGFuZGxlcjo6flREaXJlY3RpdmVIYW5kbGVyKCkKLXsK
LX0KLQotdm9pZCBURGlyZWN0aXZlSGFuZGxlcjo6aGFuZGxlRXJyb3IoY29uc3QgcHA6OlNvdXJj
ZUxvY2F0aW9uJiBsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBzdGQ6OnN0cmluZyYgbXNnKQotewotICAgIG1EaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRp
YWdub3N0aWNzOjpFUlJPUiwgbG9jLCBtc2csICIiLCAiIik7Ci19Ci0KLXZvaWQgVERpcmVjdGl2
ZUhhbmRsZXI6OmhhbmRsZVByYWdtYShjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFt
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmlu
ZyYgdmFsdWUpCi17Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtTVERHTCgiU1RER0wi
KTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga09wdGltaXplKCJvcHRpbWl6ZSIpOwot
ICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGVidWcoImRlYnVnIik7Ci0gICAgc3RhdGlj
IGNvbnN0IHN0ZDo6c3RyaW5nIGtPbigib24iKTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJp
bmcga09mZigib2ZmIik7Ci0KLSAgICBib29sIGludmFsaWRWYWx1ZSA9IGZhbHNlOwotICAgIGlm
IChuYW1lID09IGtTVERHTCkKLSAgICB7Ci0gICAgICAgIC8vIFRoZSBTVERHTCBwcmFnbWEgaXMg
dXNlZCB0byByZXNlcnZlIHByYWdtYXMgZm9yIHVzZSBieSBmdXR1cmUKLSAgICAgICAgLy8gcmV2
aXNpb25zIG9mIEdMU0wuIElnbm9yZSBpdC4KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBl
bHNlIGlmIChuYW1lID09IGtPcHRpbWl6ZSkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZSA9PSBr
T24pIG1QcmFnbWEub3B0aW1pemUgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBr
T2ZmKSBtUHJhZ21hLm9wdGltaXplID0gZmFsc2U7Ci0gICAgICAgIGVsc2UgaW52YWxpZFZhbHVl
ID0gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobmFtZSA9PSBrRGVidWcpCi0gICAgewotICAg
ICAgICBpZiAodmFsdWUgPT0ga09uKSBtUHJhZ21hLmRlYnVnID0gdHJ1ZTsKLSAgICAgICAgZWxz
ZSBpZiAodmFsdWUgPT0ga09mZikgbVByYWdtYS5kZWJ1ZyA9IGZhbHNlOwotICAgICAgICBlbHNl
IGludmFsaWRWYWx1ZSA9IHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG1E
aWFnbm9zdGljcy5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpVTlJFQ09HTklaRURfUFJBR01BLCBs
b2MsIG5hbWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGludmFsaWRWYWx1
ZSkKLSAgICAgIG1EaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpFUlJPUiwg
bG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBwcmFnbWEgdmFsdWUi
LCB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIidvbicgb3IgJ29mZicgZXhw
ZWN0ZWQiKTsKLX0KLQotdm9pZCBURGlyZWN0aXZlSGFuZGxlcjo6aGFuZGxlRXh0ZW5zaW9uKGNv
bnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBiZWhhdmlvcikKLXsKLSAg
ICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0V4dEFsbCgiYWxsIik7Ci0KLSAgICBUQmVoYXZp
b3IgYmVoYXZpb3JWYWwgPSBnZXRCZWhhdmlvcihiZWhhdmlvcik7Ci0gICAgaWYgKGJlaGF2aW9y
VmFsID09IEVCaFVuZGVmaW5lZCkKLSAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy53cml0ZUlu
Zm8ocHA6OkRpYWdub3N0aWNzOjpFUlJPUiwgbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJiZWhhdmlvciIsIG5hbWUsICJpbnZhbGlkIik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAobmFtZSA9PSBrRXh0QWxsKQotICAgIHsKLSAgICAgICAgaWYgKGJlaGF2
aW9yVmFsID09IEVCaFJlcXVpcmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EaWFnbm9zdGlj
cy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpFUlJPUiwgbG9jLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiZXh0ZW5zaW9uIiwgbmFtZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImNhbm5vdCBoYXZlICdyZXF1aXJlJyBiZWhhdmlvciIpOwotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGJlaGF2aW9yVmFsID09IEVCaEVuYWJsZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgbURpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6
OkVSUk9SLCBsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHRlbnNp
b24iLCBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IGhh
dmUgJ2VuYWJsZScgYmVoYXZpb3IiKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGZvciAoVEV4dGVuc2lvbkJlaGF2aW9yOjppdGVyYXRvciBpdGVyID0g
bUV4dGVuc2lvbkJlaGF2aW9yLmJlZ2luKCk7Ci0gICAgICAgICAgICAgICAgIGl0ZXIgIT0gbUV4
dGVuc2lvbkJlaGF2aW9yLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgICAgICAgICAgaXRlci0+c2Vj
b25kID0gYmVoYXZpb3JWYWw7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIFRFeHRlbnNpb25CZWhhdmlvcjo6aXRlcmF0b3IgaXRlciA9IG1FeHRlbnNpb25CZWhhdmlv
ci5maW5kKG5hbWUpOwotICAgIGlmIChpdGVyICE9IG1FeHRlbnNpb25CZWhhdmlvci5lbmQoKSkK
LSAgICB7Ci0gICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgcHA6OkRpYWdub3N0aWNzOjpTZXZlcml0eSBzZXZlcml0eSA9IHBw
OjpEaWFnbm9zdGljczo6RVJST1I7Ci0gICAgc3dpdGNoIChiZWhhdmlvclZhbCkgewotICAgICAg
Y2FzZSBFQmhSZXF1aXJlOgotICAgICAgICBzZXZlcml0eSA9IHBwOjpEaWFnbm9zdGljczo6RVJS
T1I7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFQmhFbmFibGU6Ci0gICAgICBjYXNlIEVC
aFdhcm46Ci0gICAgICBjYXNlIEVCaERpc2FibGU6Ci0gICAgICAgIHNldmVyaXR5ID0gcHA6OkRp
YWdub3N0aWNzOjpXQVJOSU5HOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBtRGlhZ25vc3Rp
Y3Mud3JpdGVJbmZvKHNldmVyaXR5LCBsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAi
ZXh0ZW5zaW9uIiwgbmFtZSwgImlzIG5vdCBzdXBwb3J0ZWQiKTsKLX0KLQotdm9pZCBURGlyZWN0
aXZlSGFuZGxlcjo6aGFuZGxlVmVyc2lvbihjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZlcnNpb24pCi17Ci0g
ICAgc3RhdGljIGNvbnN0IGludCBrVmVyc2lvbiA9IDEwMDsKLQotICAgIGlmICh2ZXJzaW9uICE9
IGtWZXJzaW9uKQotICAgIHsKLSAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOwotICAg
ICAgICBzdHJlYW0gPDwgdmVyc2lvbjsKLSAgICAgICAgc3RkOjpzdHJpbmcgc3RyID0gc3RyZWFt
LnN0cigpOwotICAgICAgICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6
RVJST1IsIGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmVyc2lvbiBudW1i
ZXIiLCBzdHIsICJub3Qgc3VwcG9ydGVkIik7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1Y2E1OWQ2ZmU1ZGVlYTZkN2ZiNDU4N2VlNTE2Yzgz
YWI1ZDA5ZmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuaAor
KysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENP
TVBJTEVSX0RJUkVDVElWRV9IQU5ETEVSX0hfCi0jZGVmaW5lIENPTVBJTEVSX0RJUkVDVElWRV9I
QU5ETEVSX0hfCi0KLSNpbmNsdWRlICJjb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oIgotI2lu
Y2x1ZGUgImNvbXBpbGVyL1ByYWdtYS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9EaXJlY3RpdmVIYW5kbGVyQmFzZS5oIgotCi1jbGFzcyBURGlhZ25vc3RpY3M7Ci0KLWNsYXNz
IFREaXJlY3RpdmVIYW5kbGVyIDogcHVibGljIHBwOjpEaXJlY3RpdmVIYW5kbGVyCi17Ci0gIHB1
YmxpYzoKLSAgICBURGlyZWN0aXZlSGFuZGxlcihURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2
aW9yLAotICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9zdGljcyYgZGlhZ25vc3RpY3MpOwot
ICAgIHZpcnR1YWwgflREaXJlY3RpdmVIYW5kbGVyKCk7Ci0KLSAgICBjb25zdCBUUHJhZ21hJiBw
cmFnbWEoKSBjb25zdCB7IHJldHVybiBtUHJhZ21hOyB9Ci0gICAgY29uc3QgVEV4dGVuc2lvbkJl
aGF2aW9yJiBleHRlbnNpb25CZWhhdmlvcigpIGNvbnN0IHsgcmV0dXJuIG1FeHRlbnNpb25CZWhh
dmlvcjsgfQotCi0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUVycm9yKGNvbnN0IHBwOjpTb3VyY2VM
b2NhdGlvbiYgbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0
cmluZyYgbXNnKTsKLQotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVQcmFnbWEoY29uc3QgcHA6OlNv
dXJjZUxvY2F0aW9uJiBsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz
dGQ6OnN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0
ZDo6c3RyaW5nJiB2YWx1ZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXh0ZW5zaW9uKGNv
bnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgYmVoYXZpb3IpOwotCi0gICAgdmlydHVhbCB2b2lk
IGhhbmRsZVZlcnNpb24oY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IHZlcnNpb24pOwotCi0gIHByaXZhdGU6Ci0gICAgVFBy
YWdtYSBtUHJhZ21hOwotICAgIFRFeHRlbnNpb25CZWhhdmlvciYgbUV4dGVuc2lvbkJlaGF2aW9y
OwotICAgIFREaWFnbm9zdGljcyYgbURpYWdub3N0aWNzOwotfTsKLQotI2VuZGlmICAvLyBDT01Q
SUxFUl9ESVJFQ1RJVkVfSEFORExFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNWMxNTk1ZmIyMTIxYThlYTc2YmJhMjI1N2M2ZjM2MzU2ZWYwMGU5ZC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDM3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgX0VYVEVO
U0lPTl9CRUhBVklPUl9JTkNMVURFRF8KLSNkZWZpbmUgX0VYVEVOU0lPTl9CRUhBVklPUl9JTkNM
VURFRF8KLQotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLXR5cGVkZWYgZW51
bQotewotICAgIEVCaFJlcXVpcmUsCi0gICAgRUJoRW5hYmxlLAotICAgIEVCaFdhcm4sCi0gICAg
RUJoRGlzYWJsZSwKLSAgICBFQmhVbmRlZmluZWQKLX0gVEJlaGF2aW9yOwotCi1pbmxpbmUgY29u
c3QgY2hhciogZ2V0QmVoYXZpb3JTdHJpbmcoVEJlaGF2aW9yIGIpCi17Ci0gICAgc3dpdGNoKGIp
Ci0gICAgewotICAgICAgY2FzZSBFQmhSZXF1aXJlOiByZXR1cm4gInJlcXVpcmUiOwotICAgICAg
Y2FzZSBFQmhFbmFibGU6IHJldHVybiAiZW5hYmxlIjsKLSAgICAgIGNhc2UgRUJoV2FybjogcmV0
dXJuICJ3YXJuIjsKLSAgICAgIGNhc2UgRUJoRGlzYWJsZTogcmV0dXJuICJkaXNhYmxlIjsKLSAg
ICAgIGRlZmF1bHQ6IHJldHVybiBOVUxMOwotICAgIH0KLX0KLQotLy8gTWFwcGluZyBiZXR3ZWVu
IGV4dGVuc2lvbiBuYW1lIGFuZCBiZWhhdmlvci4KLXR5cGVkZWYgc3RkOjptYXA8c3RkOjpzdHJp
bmcsIFRCZWhhdmlvcj4gVEV4dGVuc2lvbkJlaGF2aW9yOwotCi0jZW5kaWYgLy8gX0VYVEVOU0lP
Tl9UQUJMRV9JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9Gb3JMb29wVW5yb2xsLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9Gb3JMb29wVW5yb2xsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMjdhMTNlYWJhYmIxMjIyMDQwMDBmYzUxOWQ2NjlkZmY4NGMyYzNkNy4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvRm9yTG9vcFVucm9sbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMTUg
KzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL0Zvckxvb3BV
bnJvbGwuaCIKLQotbmFtZXNwYWNlIHsKLQotY2xhc3MgSW50ZWdlckZvckxvb3BVbnJvbGxNYXJr
ZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7Ci1wdWJsaWM6Ci0KLSAgICB2aXJ0dWFsIGJv
b2wgdmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCogbm9kZSkKLSAgICB7Ci0gICAgICAgIC8v
IFRoaXMgaXMgY2FsbGVkIGFmdGVyIFZhbGlkYXRlTGltaXRhdGlvbnMgcGFzcywgc28gYWxsIHRo
ZSBBU1NFUlQKLSAgICAgICAgLy8gc2hvdWxkIG5ldmVyIGZhaWwuCi0gICAgICAgIC8vIFNlZSBW
YWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvb3BJbml0KCkuCi0gICAgICAgIEFTU0VS
VChub2RlKTsKLSAgICAgICAgQVNTRVJUKG5vZGUtPmdldFR5cGUoKSA9PSBFTG9vcEZvcik7Ci0g
ICAgICAgIEFTU0VSVChub2RlLT5nZXRJbml0KCkpOwotICAgICAgICBUSW50ZXJtQWdncmVnYXRl
KiBkZWNsID0gbm9kZS0+Z2V0SW5pdCgpLT5nZXRBc0FnZ3JlZ2F0ZSgpOwotICAgICAgICBBU1NF
UlQoZGVjbCAmJiBkZWNsLT5nZXRPcCgpID09IEVPcERlY2xhcmF0aW9uKTsKLSAgICAgICAgVElu
dGVybVNlcXVlbmNlJiBkZWNsU2VxID0gZGVjbC0+Z2V0U2VxdWVuY2UoKTsKLSAgICAgICAgQVNT
RVJUKGRlY2xTZXEuc2l6ZSgpID09IDEpOwotICAgICAgICBUSW50ZXJtQmluYXJ5KiBkZWNsSW5p
dCA9IGRlY2xTZXFbMF0tPmdldEFzQmluYXJ5Tm9kZSgpOwotICAgICAgICBBU1NFUlQoZGVjbElu
aXQgJiYgZGVjbEluaXQtPmdldE9wKCkgPT0gRU9wSW5pdGlhbGl6ZSk7Ci0gICAgICAgIEFTU0VS
VChkZWNsSW5pdC0+Z2V0TGVmdCgpKTsKLSAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0g
ZGVjbEluaXQtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0gICAgICAgIEFTU0VSVChz
eW1ib2wpOwotICAgICAgICBUQmFzaWNUeXBlIHR5cGUgPSBzeW1ib2wtPmdldEJhc2ljVHlwZSgp
OwotICAgICAgICBBU1NFUlQodHlwZSA9PSBFYnRJbnQgfHwgdHlwZSA9PSBFYnRGbG9hdCk7Ci0g
ICAgICAgIGlmICh0eXBlID09IEVidEludCkKLSAgICAgICAgICAgIG5vZGUtPnNldFVucm9sbEZs
YWcodHJ1ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotfTsKLQotfSAgLy8gYW5v
bnltb3VzIG5hbWVwc2FjZQotCi12b2lkIEZvckxvb3BVbnJvbGw6OkZpbGxMb29wSW5kZXhJbmZv
KFRJbnRlcm1Mb29wKiBub2RlLCBUTG9vcEluZGV4SW5mbyYgaW5mbykKLXsKLSAgICBBU1NFUlQo
bm9kZS0+Z2V0VHlwZSgpID09IEVMb29wRm9yKTsKLSAgICBBU1NFUlQobm9kZS0+Z2V0VW5yb2xs
RmxhZygpKTsKLQotICAgIFRJbnRlcm1Ob2RlKiBpbml0ID0gbm9kZS0+Z2V0SW5pdCgpOwotICAg
IEFTU0VSVChpbml0ICE9IE5VTEwpOwotICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGRlY2wgPSBpbml0
LT5nZXRBc0FnZ3JlZ2F0ZSgpOwotICAgIEFTU0VSVCgoZGVjbCAhPSBOVUxMKSAmJiAoZGVjbC0+
Z2V0T3AoKSA9PSBFT3BEZWNsYXJhdGlvbikpOwotICAgIFRJbnRlcm1TZXF1ZW5jZSYgZGVjbFNl
cSA9IGRlY2wtPmdldFNlcXVlbmNlKCk7Ci0gICAgQVNTRVJUKGRlY2xTZXEuc2l6ZSgpID09IDEp
OwotICAgIFRJbnRlcm1CaW5hcnkqIGRlY2xJbml0ID0gZGVjbFNlcVswXS0+Z2V0QXNCaW5hcnlO
b2RlKCk7Ci0gICAgQVNTRVJUKChkZWNsSW5pdCAhPSBOVUxMKSAmJiAoZGVjbEluaXQtPmdldE9w
KCkgPT0gRU9wSW5pdGlhbGl6ZSkpOwotICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGRlY2xJ
bml0LT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOwotICAgIEFTU0VSVChzeW1ib2wgIT0g
TlVMTCk7Ci0gICAgQVNTRVJUKHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50KTsKLQot
ICAgIGluZm8uaWQgPSBzeW1ib2wtPmdldElkKCk7Ci0KLSAgICBBU1NFUlQoZGVjbEluaXQtPmdl
dFJpZ2h0KCkgIT0gTlVMTCk7Ci0gICAgVEludGVybUNvbnN0YW50VW5pb24qIGluaXROb2RlID0g
ZGVjbEluaXQtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpOwotICAgIEFTU0VSVChp
bml0Tm9kZSAhPSBOVUxMKTsKLQotICAgIGluZm8uaW5pdFZhbHVlID0gZXZhbHVhdGVJbnRDb25z
dGFudChpbml0Tm9kZSk7Ci0gICAgaW5mby5jdXJyZW50VmFsdWUgPSBpbmZvLmluaXRWYWx1ZTsK
LQotICAgIFRJbnRlcm1Ob2RlKiBjb25kID0gbm9kZS0+Z2V0Q29uZGl0aW9uKCk7Ci0gICAgQVNT
RVJUKGNvbmQgIT0gTlVMTCk7Ci0gICAgVEludGVybUJpbmFyeSogYmluT3AgPSBjb25kLT5nZXRB
c0JpbmFyeU5vZGUoKTsKLSAgICBBU1NFUlQoYmluT3AgIT0gTlVMTCk7Ci0gICAgQVNTRVJUKGJp
bk9wLT5nZXRSaWdodCgpICE9IE5VTEwpOwotICAgIEFTU0VSVChiaW5PcC0+Z2V0UmlnaHQoKS0+
Z2V0QXNDb25zdGFudFVuaW9uKCkgIT0gTlVMTCk7Ci0KLSAgICBpbmZvLmluY3JlbWVudFZhbHVl
ID0gZ2V0TG9vcEluY3JlbWVudChub2RlKTsKLSAgICBpbmZvLnN0b3BWYWx1ZSA9IGV2YWx1YXRl
SW50Q29uc3RhbnQoCi0gICAgICAgIGJpbk9wLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5p
b24oKSk7Ci0gICAgaW5mby5vcCA9IGJpbk9wLT5nZXRPcCgpOwotfQotCi12b2lkIEZvckxvb3BV
bnJvbGw6OlN0ZXAoKQotewotICAgIEFTU0VSVChtTG9vcEluZGV4U3RhY2suc2l6ZSgpID4gMCk7
Ci0gICAgVExvb3BJbmRleEluZm8mIGluZm8gPSBtTG9vcEluZGV4U3RhY2tbbUxvb3BJbmRleFN0
YWNrLnNpemUoKSAtIDFdOwotICAgIGluZm8uY3VycmVudFZhbHVlICs9IGluZm8uaW5jcmVtZW50
VmFsdWU7Ci19Ci0KLWJvb2wgRm9yTG9vcFVucm9sbDo6U2F0aXNmaWVzTG9vcENvbmRpdGlvbigp
Ci17Ci0gICAgQVNTRVJUKG1Mb29wSW5kZXhTdGFjay5zaXplKCkgPiAwKTsKLSAgICBUTG9vcElu
ZGV4SW5mbyYgaW5mbyA9IG1Mb29wSW5kZXhTdGFja1ttTG9vcEluZGV4U3RhY2suc2l6ZSgpIC0g
MV07Ci0gICAgLy8gUmVsYXRpb25hbCBvcGVyYXRvciBpcyBvbmUgb2Y6ID4gPj0gPCA8PSA9PSBv
ciAhPS4KLSAgICBzd2l0Y2ggKGluZm8ub3ApIHsKLSAgICAgIGNhc2UgRU9wRXF1YWw6Ci0gICAg
ICAgIHJldHVybiAoaW5mby5jdXJyZW50VmFsdWUgPT0gaW5mby5zdG9wVmFsdWUpOwotICAgICAg
Y2FzZSBFT3BOb3RFcXVhbDoKLSAgICAgICAgcmV0dXJuIChpbmZvLmN1cnJlbnRWYWx1ZSAhPSBp
bmZvLnN0b3BWYWx1ZSk7Ci0gICAgICBjYXNlIEVPcExlc3NUaGFuOgotICAgICAgICByZXR1cm4g
KGluZm8uY3VycmVudFZhbHVlIDwgaW5mby5zdG9wVmFsdWUpOwotICAgICAgY2FzZSBFT3BHcmVh
dGVyVGhhbjoKLSAgICAgICAgcmV0dXJuIChpbmZvLmN1cnJlbnRWYWx1ZSA+IGluZm8uc3RvcFZh
bHVlKTsKLSAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoKLSAgICAgICAgcmV0dXJuIChpbmZv
LmN1cnJlbnRWYWx1ZSA8PSBpbmZvLnN0b3BWYWx1ZSk7Ci0gICAgICBjYXNlIEVPcEdyZWF0ZXJU
aGFuRXF1YWw6Ci0gICAgICAgIHJldHVybiAoaW5mby5jdXJyZW50VmFsdWUgPj0gaW5mby5zdG9w
VmFsdWUpOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEZvckxvb3BVbnJvbGw6Ok5lZWRzVG9SZXBsYWNl
U3ltYm9sV2l0aFZhbHVlKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCkKLXsKLSAgICBmb3IgKFRWZWN0
b3I8VExvb3BJbmRleEluZm8+OjppdGVyYXRvciBpID0gbUxvb3BJbmRleFN0YWNrLmJlZ2luKCk7
Ci0gICAgICAgICBpICE9IG1Mb29wSW5kZXhTdGFjay5lbmQoKTsKLSAgICAgICAgICsraSkgewot
ICAgICAgICBpZiAoaS0+aWQgPT0gc3ltYm9sLT5nZXRJZCgpKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotaW50IEZvckxvb3BVbnJvbGw6
OkdldExvb3BJbmRleFZhbHVlKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCkKLXsKLSAgICBmb3IgKFRW
ZWN0b3I8VExvb3BJbmRleEluZm8+OjppdGVyYXRvciBpID0gbUxvb3BJbmRleFN0YWNrLmJlZ2lu
KCk7Ci0gICAgICAgICBpICE9IG1Mb29wSW5kZXhTdGFjay5lbmQoKTsKLSAgICAgICAgICsraSkg
ewotICAgICAgICBpZiAoaS0+aWQgPT0gc3ltYm9sLT5nZXRJZCgpKQotICAgICAgICAgICAgcmV0
dXJuIGktPmN1cnJlbnRWYWx1ZTsKLSAgICB9Ci0gICAgVU5SRUFDSEFCTEUoKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRm9yTG9vcFVucm9sbDo6UHVzaChUTG9vcEluZGV4SW5mbyYg
aW5mbykKLXsKLSAgICBtTG9vcEluZGV4U3RhY2sucHVzaF9iYWNrKGluZm8pOwotfQotCi12b2lk
IEZvckxvb3BVbnJvbGw6OlBvcCgpCi17Ci0gICAgbUxvb3BJbmRleFN0YWNrLnBvcF9iYWNrKCk7
Ci19Ci0KLS8vIHN0YXRpYwotdm9pZCBGb3JMb29wVW5yb2xsOjpNYXJrRm9yTG9vcHNXaXRoSW50
ZWdlckluZGljZXNGb3JVbnJvbGxpbmcoCi0gICAgVEludGVybU5vZGUqIHJvb3QpCi17Ci0gICAg
QVNTRVJUKHJvb3QpOwotCi0gICAgSW50ZWdlckZvckxvb3BVbnJvbGxNYXJrZXIgbWFya2VyOwot
ICAgIHJvb3QtPnRyYXZlcnNlKCZtYXJrZXIpOwotfQotCi1pbnQgRm9yTG9vcFVucm9sbDo6Z2V0
TG9vcEluY3JlbWVudChUSW50ZXJtTG9vcCogbm9kZSkKLXsKLSAgICBUSW50ZXJtTm9kZSogZXhw
ciA9IG5vZGUtPmdldEV4cHJlc3Npb24oKTsKLSAgICBBU1NFUlQoZXhwciAhPSBOVUxMKTsKLSAg
ICAvLyBmb3IgZXhwcmVzc2lvbiBoYXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9ybXM6Ci0gICAg
Ly8gICAgIGxvb3BfaW5kZXgrKwotICAgIC8vICAgICBsb29wX2luZGV4LS0KLSAgICAvLyAgICAg
bG9vcF9pbmRleCArPSBjb25zdGFudF9leHByZXNzaW9uCi0gICAgLy8gICAgIGxvb3BfaW5kZXgg
LT0gY29uc3RhbnRfZXhwcmVzc2lvbgotICAgIC8vICAgICArK2xvb3BfaW5kZXgKLSAgICAvLyAg
ICAgLS1sb29wX2luZGV4Ci0gICAgLy8gVGhlIGxhc3QgdHdvIGZvcm1zIGFyZSBub3Qgc3BlY2lm
aWVkIGluIHRoZSBzcGVjLCBidXQgSSBhbSBhc3N1bWluZwotICAgIC8vIGl0cyBhbiBvdmVyc2ln
aHQuCi0gICAgVEludGVybVVuYXJ5KiB1bk9wID0gZXhwci0+Z2V0QXNVbmFyeU5vZGUoKTsKLSAg
ICBUSW50ZXJtQmluYXJ5KiBiaW5PcCA9IHVuT3AgPyBOVUxMIDogZXhwci0+Z2V0QXNCaW5hcnlO
b2RlKCk7Ci0KLSAgICBUT3BlcmF0b3Igb3AgPSBFT3BOdWxsOwotICAgIFRJbnRlcm1Db25zdGFu
dFVuaW9uKiBpbmNyZW1lbnROb2RlID0gTlVMTDsKLSAgICBpZiAodW5PcCAhPSBOVUxMKSB7Ci0g
ICAgICAgIG9wID0gdW5PcC0+Z2V0T3AoKTsKLSAgICB9IGVsc2UgaWYgKGJpbk9wICE9IE5VTEwp
IHsKLSAgICAgICAgb3AgPSBiaW5PcC0+Z2V0T3AoKTsKLSAgICAgICAgQVNTRVJUKGJpbk9wLT5n
ZXRSaWdodCgpICE9IE5VTEwpOwotICAgICAgICBpbmNyZW1lbnROb2RlID0gYmluT3AtPmdldFJp
Z2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpOwotICAgICAgICBBU1NFUlQoaW5jcmVtZW50Tm9k
ZSAhPSBOVUxMKTsKLSAgICB9Ci0KLSAgICBpbnQgaW5jcmVtZW50ID0gMDsKLSAgICAvLyBUaGUg
b3BlcmF0b3IgaXMgb25lIG9mOiArKyAtLSArPSAtPS4KLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAg
ICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDoKLSAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6
Ci0gICAgICAgICAgICBBU1NFUlQoKHVuT3AgIT0gTlVMTCkgJiYgKGJpbk9wID09IE5VTEwpKTsK
LSAgICAgICAgICAgIGluY3JlbWVudCA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBFT3BQb3N0RGVjcmVtZW50OgotICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDoKLSAg
ICAgICAgICAgIEFTU0VSVCgodW5PcCAhPSBOVUxMKSAmJiAoYmluT3AgPT0gTlVMTCkpOwotICAg
ICAgICAgICAgaW5jcmVtZW50ID0gLTE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBFT3BBZGRBc3NpZ246Ci0gICAgICAgICAgICBBU1NFUlQoKHVuT3AgPT0gTlVMTCkgJiYgKGJp
bk9wICE9IE5VTEwpKTsKLSAgICAgICAgICAgIGluY3JlbWVudCA9IGV2YWx1YXRlSW50Q29uc3Rh
bnQoaW5jcmVtZW50Tm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BT
dWJBc3NpZ246Ci0gICAgICAgICAgICBBU1NFUlQoKHVuT3AgPT0gTlVMTCkgJiYgKGJpbk9wICE9
IE5VTEwpKTsKLSAgICAgICAgICAgIGluY3JlbWVudCA9IC0gZXZhbHVhdGVJbnRDb25zdGFudChp
bmNyZW1lbnROb2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gaW5jcmVtZW50Owot
fQotCi1pbnQgRm9yTG9vcFVucm9sbDo6ZXZhbHVhdGVJbnRDb25zdGFudChUSW50ZXJtQ29uc3Rh
bnRVbmlvbiogbm9kZSkKLXsKLSAgICBBU1NFUlQoKG5vZGUgIT0gTlVMTCkgJiYgKG5vZGUtPmdl
dFVuaW9uQXJyYXlQb2ludGVyKCkgIT0gTlVMTCkpOwotICAgIHJldHVybiBub2RlLT5nZXRJQ29u
c3QoMCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9Gb3JMb29wVW5yb2xsLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvRm9yTG9vcFVucm9sbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODAwZTI1
YjFmMGMxYTQ4N2EzNzMxYWVlNzMxNjIyY2IyMjhmZTFmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9Gb3JMb29wVW5yb2xsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotCi1zdHJ1Y3Qg
VExvb3BJbmRleEluZm8gewotICAgIGludCBpZDsKLSAgICBpbnQgaW5pdFZhbHVlOwotICAgIGlu
dCBzdG9wVmFsdWU7Ci0gICAgaW50IGluY3JlbWVudFZhbHVlOwotICAgIFRPcGVyYXRvciBvcDsK
LSAgICBpbnQgY3VycmVudFZhbHVlOwotfTsKLQotY2xhc3MgRm9yTG9vcFVucm9sbCB7Ci1wdWJs
aWM6Ci0gICAgRm9yTG9vcFVucm9sbCgpIHsgfQotCi0gICAgdm9pZCBGaWxsTG9vcEluZGV4SW5m
byhUSW50ZXJtTG9vcCogbm9kZSwgVExvb3BJbmRleEluZm8mIGluZm8pOwotCi0gICAgLy8gVXBk
YXRlIHRoZSBpbmZvLmN1cnJlbnRWYWx1ZSBmb3IgdGhlIG5leHQgbG9vcCBpdGVyYXRpb24uCi0g
ICAgdm9pZCBTdGVwKCk7Ci0KLSAgICAvLyBSZXR1cm4gZmFsc2UgaWYgbG9vcCBjb25kaXRpb24g
aXMgbm8gbG9uZ2VyIHNhdGlzZmllZC4KLSAgICBib29sIFNhdGlzZmllc0xvb3BDb25kaXRpb24o
KTsKLQotICAgIC8vIENoZWNrIGlmIHRoZSBzeW1ib2wgaXMgdGhlIGluZGV4IG9mIGEgbG9vcCB0
aGF0J3MgdW5yb2xsZWQuCi0gICAgYm9vbCBOZWVkc1RvUmVwbGFjZVN5bWJvbFdpdGhWYWx1ZShU
SW50ZXJtU3ltYm9sKiBzeW1ib2wpOwotCi0gICAgLy8gUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVl
IG9mIGEgZ2l2ZW4gbG9vcCBpbmRleCBzeW1ib2wuCi0gICAgaW50IEdldExvb3BJbmRleFZhbHVl
KFRJbnRlcm1TeW1ib2wqIHN5bWJvbCk7Ci0KLSAgICB2b2lkIFB1c2goVExvb3BJbmRleEluZm8m
IGluZm8pOwotICAgIHZvaWQgUG9wKCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBNYXJrRm9yTG9vcHNX
aXRoSW50ZWdlckluZGljZXNGb3JVbnJvbGxpbmcoVEludGVybU5vZGUqIHJvb3QpOwotCi1wcml2
YXRlOgotICAgIGludCBnZXRMb29wSW5jcmVtZW50KFRJbnRlcm1Mb29wKiBub2RlKTsKLQotICAg
IGludCBldmFsdWF0ZUludENvbnN0YW50KFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKTsKLQot
ICAgIFRWZWN0b3I8VExvb3BJbmRleEluZm8+IG1Mb29wSW5kZXhTdGFjazsKLX07Ci0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9IYXNoTmFtZXMuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9IYXNoTmFtZXMuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDIxNDFlMmQ4NTM3ZjAxMWVjYWFjMjIwNjY1OWFkNTI0
OWYyNzgyNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSGFzaE5hbWVzLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxOSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJ
TEVSX0hBU0hfTkFNRVNfSF8KLSNkZWZpbmUgQ09NUElMRVJfSEFTSF9OQU1FU19IXwotCi0jaW5j
bHVkZSA8bWFwPgotCi0jaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCi0jaW5jbHVk
ZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCi0KLSNkZWZpbmUgSEFTSEVEX05BTUVfUFJFRklYICJ3
ZWJnbF8iCi0KLXR5cGVkZWYgc3RkOjptYXA8VFBlcnNpc3RTdHJpbmcsIFRQZXJzaXN0U3RyaW5n
PiBOYW1lTWFwOwotCi0jZW5kaWYgIC8vIENPTVBJTEVSX0hBU0hfTkFNRVNfSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbmZvU2luay5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5mb1NpbmsuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjBhNmMwMTc1YWNjNGJmZjQ4ZDcyYTRkMTJiNzIxYTY2
YmEzMjAzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbmZvU2luay5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw1NCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29t
cGlsZXIvSW5mb1NpbmsuaCIKLQotdm9pZCBUSW5mb1NpbmtCYXNlOjpwcmVmaXgoVFByZWZpeFR5
cGUgcCkgewotICAgIHN3aXRjaChwKSB7Ci0gICAgICAgIGNhc2UgRVByZWZpeE5vbmU6Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFUHJlZml4V2FybmluZzoKLSAgICAgICAgICAg
IHNpbmsuYXBwZW5kKCJXQVJOSU5HOiAiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEVQcmVmaXhFcnJvcjoKLSAgICAgICAgICAgIHNpbmsuYXBwZW5kKCJFUlJPUjogIik7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFUHJlZml4SW50ZXJuYWxFcnJvcjoKLSAg
ICAgICAgICAgIHNpbmsuYXBwZW5kKCJJTlRFUk5BTCBFUlJPUjogIik7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBFUHJlZml4VW5pbXBsZW1lbnRlZDoKLSAgICAgICAgICAgIHNp
bmsuYXBwZW5kKCJVTklNUExFTUVOVEVEOiAiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEVQcmVmaXhOb3RlOgotICAgICAgICAgICAgc2luay5hcHBlbmQoIk5PVEU6ICIpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBzaW5rLmFw
cGVuZCgiVU5LT1dOIEVSUk9SOiAiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQot
dm9pZCBUSW5mb1NpbmtCYXNlOjpsb2NhdGlvbihpbnQgZmlsZSwgaW50IGxpbmUpIHsKLSAgICBU
UGVyc2lzdFN0cmluZ1N0cmVhbSBzdHJlYW07Ci0gICAgaWYgKGxpbmUpCi0gICAgICAgIHN0cmVh
bSA8PCBmaWxlIDw8ICI6IiA8PCBsaW5lOwotICAgIGVsc2UKLSAgICAgICAgc3RyZWFtIDw8IGZp
bGUgPDwgIjo/ICI7Ci0gICAgc3RyZWFtIDw8ICI6ICI7Ci0KLSAgICBzaW5rLmFwcGVuZChzdHJl
YW0uc3RyKCkpOwotfQotCi12b2lkIFRJbmZvU2lua0Jhc2U6OmxvY2F0aW9uKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxvYykgewotICAgIGxvY2F0aW9uKGxvYy5maXJzdF9maWxlLCBsb2MuZmlyc3RfbGlu
ZSk7Ci19Ci0KLXZvaWQgVEluZm9TaW5rQmFzZTo6bWVzc2FnZShUUHJlZml4VHlwZSBwLCBjb25z
dCBUU291cmNlTG9jJiBsb2MsIGNvbnN0IGNoYXIqIG0pIHsKLSAgICBwcmVmaXgocCk7Ci0gICAg
bG9jYXRpb24obG9jKTsKLSAgICBzaW5rLmFwcGVuZChtKTsKLSAgICBzaW5rLmFwcGVuZCgiXG4i
KTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9J
bmZvU2luay5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luZm9TaW5r
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlMGRkZmZlMzFmNWEyZmU5N2Q3ODZm
ZDA2OGM3NDFlNmE1ZmVhNjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luZm9TaW5rLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lm
bmRlZiBfSU5GT1NJTktfSU5DTFVERURfCi0jZGVmaW5lIF9JTkZPU0lOS19JTkNMVURFRF8KLQot
I2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlICJjb21waWxl
ci9Db21tb24uaCIKLQotLy8gUmV0dXJucyB0aGUgZnJhY3Rpb25hbCBwYXJ0IG9mIHRoZSBnaXZl
biBmbG9hdGluZy1wb2ludCBudW1iZXIuCi1pbmxpbmUgZmxvYXQgZnJhY3Rpb25hbFBhcnQoZmxv
YXQgZikgewotICBmbG9hdCBpbnRQYXJ0ID0gMC4wZjsKLSAgcmV0dXJuIG1vZGZmKGYsICZpbnRQ
YXJ0KTsKLX0KLQotLy8KLS8vIFRQcmVmaXhUeXBlIGlzIHVzZWQgdG8gY2VudHJhbGl6ZSBob3cg
aW5mbyBsb2cgbWVzc2FnZXMgc3RhcnQuCi0vLyBTZWUgYmVsb3cuCi0vLwotZW51bSBUUHJlZml4
VHlwZSB7Ci0gICAgRVByZWZpeE5vbmUsCi0gICAgRVByZWZpeFdhcm5pbmcsCi0gICAgRVByZWZp
eEVycm9yLAotICAgIEVQcmVmaXhJbnRlcm5hbEVycm9yLAotICAgIEVQcmVmaXhVbmltcGxlbWVu
dGVkLAotICAgIEVQcmVmaXhOb3RlCi19OwotCi0vLwotLy8gRW5jYXBzdWxhdGUgaW5mbyBsb2dz
IGZvciBhbGwgb2JqZWN0cyB0aGF0IGhhdmUgdGhlbS4KLS8vCi0vLyBUaGUgbWV0aG9kcyBhcmUg
YSBnZW5lcmFsIHNldCBvZiB0b29scyBmb3IgZ2V0dGluZyBhIHZhcmlldHkgb2YKLS8vIG1lc3Nh
Z2VzIGFuZCB0eXBlcyBpbnNlcnRlZCBpbnRvIHRoZSBsb2cuCi0vLwotY2xhc3MgVEluZm9TaW5r
QmFzZSB7Ci1wdWJsaWM6Ci0gICAgVEluZm9TaW5rQmFzZSgpIHt9Ci0KLSAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KLSAgICBUSW5mb1NpbmtCYXNlJiBvcGVyYXRvcjw8KGNvbnN0IFQmIHQpIHsK
LSAgICAgICAgVFBlcnNpc3RTdHJpbmdTdHJlYW0gc3RyZWFtOwotICAgICAgICBzdHJlYW0gPDwg
dDsKLSAgICAgICAgc2luay5hcHBlbmQoc3RyZWFtLnN0cigpKTsKLSAgICAgICAgcmV0dXJuICp0
aGlzOwotICAgIH0KLSAgICAvLyBPdmVycmlkZSA8PCBvcGVyYXRvciBmb3Igc3BlY2lmaWMgdHlw
ZXMuIEl0IGlzIGZhc3RlciB0byBhcHBlbmQgc3RyaW5ncwotICAgIC8vIGFuZCBjaGFyYWN0ZXJz
IGRpcmVjdGx5IHRvIHRoZSBzaW5rLgotICAgIFRJbmZvU2lua0Jhc2UmIG9wZXJhdG9yPDwoY2hh
ciBjKSB7Ci0gICAgICAgIHNpbmsuYXBwZW5kKDEsIGMpOwotICAgICAgICByZXR1cm4gKnRoaXM7
Ci0gICAgfQotICAgIFRJbmZvU2lua0Jhc2UmIG9wZXJhdG9yPDwoY29uc3QgY2hhciogc3RyKSB7
Ci0gICAgICAgIHNpbmsuYXBwZW5kKHN0cik7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9
Ci0gICAgVEluZm9TaW5rQmFzZSYgb3BlcmF0b3I8PChjb25zdCBUUGVyc2lzdFN0cmluZyYgc3Ry
KSB7Ci0gICAgICAgIHNpbmsuYXBwZW5kKHN0cik7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAg
ICB9Ci0gICAgVEluZm9TaW5rQmFzZSYgb3BlcmF0b3I8PChjb25zdCBUU3RyaW5nJiBzdHIpIHsK
LSAgICAgICAgc2luay5hcHBlbmQoc3RyLmNfc3RyKCkpOwotICAgICAgICByZXR1cm4gKnRoaXM7
Ci0gICAgfQotICAgIC8vIE1ha2Ugc3VyZSBmbG9hdHMgYXJlIHdyaXR0ZW4gd2l0aCBjb3JyZWN0
IHByZWNpc2lvbi4KLSAgICBUSW5mb1NpbmtCYXNlJiBvcGVyYXRvcjw8KGZsb2F0IGYpIHsKLSAg
ICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYXQgbGVhc3Qgb25lIGRlY2ltYWwgcG9pbnQgaXMgd3Jp
dHRlbi4gSWYgYSBudW1iZXIKLSAgICAgICAgLy8gZG9lcyBub3QgaGF2ZSBhIGZyYWN0aW9uYWwg
cGFydCwgdGhlIGRlZmF1bHQgcHJlY2lzaW9uIGZvcm1hdCBkb2VzCi0gICAgICAgIC8vIG5vdCB3
cml0ZSB0aGUgZGVjaW1hbCBwb3J0aW9uIHdoaWNoIGdldHMgaW50ZXJwcmV0ZWQgYXMgaW50ZWdl
ciBieQotICAgICAgICAvLyB0aGUgY29tcGlsZXIuCi0gICAgICAgIFRQZXJzaXN0U3RyaW5nU3Ry
ZWFtIHN0cmVhbTsKLSAgICAgICAgaWYgKGZyYWN0aW9uYWxQYXJ0KGYpID09IDAuMGYpIHsKLSAg
ICAgICAgICAgIHN0cmVhbS5wcmVjaXNpb24oMSk7Ci0gICAgICAgICAgICBzdHJlYW0gPDwgc3Rk
OjpzaG93cG9pbnQgPDwgc3RkOjpmaXhlZCA8PCBmOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgc3RyZWFtLnVuc2V0ZihzdGQ6Omlvczo6Zml4ZWQpOwotICAgICAgICAgICAgc3RyZWFt
LnVuc2V0ZihzdGQ6Omlvczo6c2NpZW50aWZpYyk7Ci0gICAgICAgICAgICBzdHJlYW0ucHJlY2lz
aW9uKDgpOwotICAgICAgICAgICAgc3RyZWFtIDw8IGY7Ci0gICAgICAgIH0KLSAgICAgICAgc2lu
ay5hcHBlbmQoc3RyZWFtLnN0cigpKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLSAg
ICAvLyBXcml0ZSBib29sZWFuIHZhbHVlcyBhcyB0aGVpciBuYW1lcyBpbnN0ZWFkIG9mIGludGVn
cmFsIHZhbHVlLgotICAgIFRJbmZvU2lua0Jhc2UmIG9wZXJhdG9yPDwoYm9vbCBiKSB7Ci0gICAg
ICAgIGNvbnN0IGNoYXIqIHN0ciA9IGIgPyAidHJ1ZSIgOiAiZmFsc2UiOwotICAgICAgICBzaW5r
LmFwcGVuZChzdHIpOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgdm9pZCBl
cmFzZSgpIHsgc2luay5jbGVhcigpOyB9Ci0gICAgaW50IHNpemUoKSB7IHJldHVybiBzdGF0aWNf
Y2FzdDxpbnQ+KHNpbmsuc2l6ZSgpKTsgfQotCi0gICAgY29uc3QgVFBlcnNpc3RTdHJpbmcmIHN0
cigpIGNvbnN0IHsgcmV0dXJuIHNpbms7IH0KLSAgICBjb25zdCBjaGFyKiBjX3N0cigpIGNvbnN0
IHsgcmV0dXJuIHNpbmsuY19zdHIoKTsgfQotCi0gICAgdm9pZCBwcmVmaXgoVFByZWZpeFR5cGUg
cCk7Ci0gICAgdm9pZCBsb2NhdGlvbihpbnQgZmlsZSwgaW50IGxpbmUpOwotICAgIHZvaWQgbG9j
YXRpb24oY29uc3QgVFNvdXJjZUxvYyYgbG9jKTsKLSAgICB2b2lkIG1lc3NhZ2UoVFByZWZpeFR5
cGUgcCwgY29uc3QgVFNvdXJjZUxvYyYgbG9jLCBjb25zdCBjaGFyKiBtKTsKLQotcHJpdmF0ZToK
LSAgICBUUGVyc2lzdFN0cmluZyBzaW5rOwotfTsKLQotY2xhc3MgVEluZm9TaW5rIHsKLXB1Ymxp
YzoKLSAgICBUSW5mb1NpbmtCYXNlIGluZm87Ci0gICAgVEluZm9TaW5rQmFzZSBkZWJ1ZzsKLSAg
ICBUSW5mb1NpbmtCYXNlIG9iajsKLX07Ci0KLSNlbmRpZiAvLyBfSU5GT1NJTktfSU5DTFVERURf
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlh
bGl6ZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6
ZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjZGJlMTdhYTZkNWRiMDM2MGRl
YjZjOTEwZDFkZjA2NzYwODNkNTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxp
emUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTY0ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLS8vCi0vLyBDcmVhdGUgc3RyaW5ncyB0aGF0IGRlY2xhcmUgYnVpbHQtaW4gZGVmaW5pdGlv
bnMsIGFkZCBidWlsdC1pbnMgdGhhdAotLy8gY2Fubm90IGJlIGV4cHJlc3NlZCBpbiB0aGUgZmls
ZXMsIGFuZCBlc3RhYmxpc2ggbWFwcGluZ3MgYmV0d2VlbiAKLS8vIGJ1aWx0LWluIGZ1bmN0aW9u
cyBhbmQgb3BlcmF0b3JzLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemUuaCIK
LQotI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotCi12b2lkIEluc2VydEJ1aWx0
SW5GdW5jdGlvbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBjb25zdCBT
aEJ1aWx0SW5SZXNvdXJjZXMgJnJlc291cmNlcywgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSkK
LXsKLSAgICBUVHlwZSAqZmxvYXQxID0gbmV3IFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQs
IEV2cUdsb2JhbCwgMSk7Ci0gICAgVFR5cGUgKmZsb2F0MiA9IG5ldyBUVHlwZShFYnRGbG9hdCwg
RWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDIpOwotICAgIFRUeXBlICpmbG9hdDMgPSBuZXcgVFR5
cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAzKTsKLSAgICBUVHlwZSAqZmxv
YXQ0ID0gbmV3IFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgNCk7Ci0K
LSAgICBUVHlwZSAqaW50MiA9IG5ldyBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxR2xv
YmFsLCAyKTsKLSAgICBUVHlwZSAqaW50MyA9IG5ldyBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5l
ZCwgRXZxR2xvYmFsLCAzKTsKLSAgICBUVHlwZSAqaW50NCA9IG5ldyBUVHlwZShFYnRJbnQsIEVi
cFVuZGVmaW5lZCwgRXZxR2xvYmFsLCA0KTsKLQotICAgIC8vCi0gICAgLy8gQW5nbGUgYW5kIFRy
aWdvbm9tZXRyaWMgRnVuY3Rpb25zLgotICAgIC8vCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDEsICJyYWRpYW5zIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MiwgInJhZGlhbnMiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQzLCAicmFkaWFucyIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDQsICJyYWRpYW5zIiwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZGVncmVlcyIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJkZWdyZWVzIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImRlZ3JlZXMiLCBmbG9hdDMpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZGVncmVlcyIsIGZsb2F0NCk7Ci0KLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInNpbiIsIGZsb2F0MSk7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJzaW4iLCBmbG9hdDIpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAic2luIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInNpbiIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImNvcyIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJjb3MiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiY29zIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0NCwgImNvcyIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MSwgInRhbiIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDIsICJ0YW4iLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQzLCAidGFuIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0NCwgInRhbiIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MSwgImFzaW4iLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQyLCAiYXNpbiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDMsICJhc2luIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0NCwgImFzaW4iLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDEsICJhY29zIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MiwgImFjb3MiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQzLCAiYWNvcyIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDQsICJhY29zIiwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQxLCAiYXRhbiIsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MiwgImF0YW4iLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJhdGFuIiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiYXRhbiIsIGZsb2F0NCwgZmxvYXQ0KTsK
LQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiYXRhbiIsIGZsb2F0MSk7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJhdGFuIiwgZmxvYXQyKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImF0YW4iLCBmbG9hdDMpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiYXRhbiIsIGZsb2F0NCk7Ci0K
LSAgICAvLwotICAgIC8vIEV4cG9uZW50aWFsIEZ1bmN0aW9ucy4KLSAgICAvLwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAicG93IiwgZmxvYXQxLCBmbG9hdDEpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAicG93IiwgZmxvYXQyLCBmbG9hdDIp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAicG93IiwgZmxvYXQzLCBm
bG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAicG93IiwgZmxv
YXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJl
eHAiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZXhw
IiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImV4cCIs
IGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJleHAiLCBm
bG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJsb2ciLCBm
bG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibG9nIiwgZmxv
YXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImxvZyIsIGZsb2F0
Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJsb2ciLCBmbG9hdDQp
OwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJleHAyIiwgZmxvYXQx
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImV4cDIiLCBmbG9hdDIp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZXhwMiIsIGZsb2F0Myk7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJleHAyIiwgZmxvYXQ0KTsK
LQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibG9nMiIsIGZsb2F0MSk7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJsb2cyIiwgZmxvYXQyKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImxvZzIiLCBmbG9hdDMpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibG9nMiIsIGZsb2F0NCk7Ci0K
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInNxcnQiLCBmbG9hdDEpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic3FydCIsIGZsb2F0Mik7Ci0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzcXJ0IiwgZmxvYXQzKTsKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInNxcnQiLCBmbG9hdDQpOwotCi0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJpbnZlcnNlc3FydCIsIGZsb2F0
MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJpbnZlcnNlc3FydCIs
IGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJpbnZlcnNl
c3FydCIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJp
bnZlcnNlc3FydCIsIGZsb2F0NCk7Ci0KLSAgICAvLwotICAgIC8vIENvbW1vbiBGdW5jdGlvbnMu
Ci0gICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImFicyIsIGZs
b2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJhYnMiLCBmbG9h
dDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiYWJzIiwgZmxvYXQz
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImFicyIsIGZsb2F0NCk7
Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInNpZ24iLCBmbG9hdDEp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic2lnbiIsIGZsb2F0Mik7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzaWduIiwgZmxvYXQzKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInNpZ24iLCBmbG9hdDQpOwot
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJmbG9vciIsIGZsb2F0MSk7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJmbG9vciIsIGZsb2F0Mik7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJmbG9vciIsIGZsb2F0Myk7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJmbG9vciIsIGZsb2F0NCk7
Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImNlaWwiLCBmbG9hdDEp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiY2VpbCIsIGZsb2F0Mik7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJjZWlsIiwgZmxvYXQzKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImNlaWwiLCBmbG9hdDQpOwot
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJmcmFjdCIsIGZsb2F0MSk7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJmcmFjdCIsIGZsb2F0Mik7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJmcmFjdCIsIGZsb2F0Myk7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJmcmFjdCIsIGZsb2F0NCk7
Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgIm1vZCIsIGZsb2F0MSwg
ZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgIm1vZCIsIGZs
b2F0MiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgIm1v
ZCIsIGZsb2F0MywgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
NCwgIm1vZCIsIGZsb2F0NCwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MiwgIm1vZCIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MywgIm1vZCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0NCwgIm1vZCIsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibWluIiwgZmxvYXQxLCBmbG9hdDEpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibWluIiwgZmxvYXQyLCBmbG9hdDEp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAibWluIiwgZmxvYXQzLCBm
bG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibWluIiwgZmxv
YXQ0LCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibWlu
IiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQz
LCAibWluIiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQ0LCAibWluIiwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDEsICJtYXgiLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDIsICJtYXgiLCBmbG9hdDIsIGZsb2F0MSk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtYXgiLCBmbG9hdDMsIGZsb2F0MSk7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJtYXgiLCBmbG9hdDQsIGZsb2F0MSk7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJtYXgiLCBmbG9hdDIsIGZs
b2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtYXgiLCBmbG9h
dDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJtYXgi
LCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MSwgImNsYW1wIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDIsICJjbGFtcCIsIGZsb2F0MiwgZmxvYXQxLCBmbG9hdDEpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiY2xhbXAiLCBmbG9hdDMsIGZsb2F0
MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImNsYW1w
IiwgZmxvYXQ0LCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDIsICJjbGFtcCIsIGZsb2F0MiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiY2xhbXAiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQz
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImNsYW1wIiwgZmxvYXQ0
LCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MSwgIm1peCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQyLCAibWl4IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0MSk7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtaXgiLCBmbG9hdDMsIGZsb2F0MywgZmxv
YXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1peCIsIGZsb2F0
NCwgZmxvYXQ0LCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQy
LCAibWl4IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDMsICJtaXgiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1peCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9h
dDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJzdGVwIiwgZmxv
YXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic3Rl
cCIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MywgInN0ZXAiLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDQsICJzdGVwIiwgZmxvYXQ0LCBmbG9hdDQpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQyLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInN0ZXAiLCBmbG9hdDEsIGZsb2F0Myk7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJzdGVwIiwgZmxvYXQxLCBmbG9hdDQpOwot
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJzbW9vdGhzdGVwIiwgZmxv
YXQxLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDIsICJzbW9vdGhzdGVwIiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzbW9vdGhzdGVwIiwgZmxvYXQzLCBmbG9hdDMsIGZs
b2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJzbW9vdGhzdGVw
IiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDIsICJzbW9vdGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0Mik7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzbW9vdGhzdGVwIiwgZmxvYXQxLCBmbG9h
dDEsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJzbW9v
dGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0NCk7Ci0KLSAgICAvLwotICAgIC8vIEdlb21l
dHJpYyBGdW5jdGlvbnMuCi0gICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MSwgImxlbmd0aCIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDEsICJsZW5ndGgiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQxLCAibGVuZ3RoIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MSwgImRpc3RhbmNlIiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZGlzdGFuY2UiLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkaXN0YW5jZSIsIGZsb2F0MywgZmxv
YXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRpc3RhbmNlIiwg
ZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEs
ICJkb3QiLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDEsICJkb3QiLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDEsICJkb3QiLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDEsICJkb3QiLCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImNyb3NzIiwgZmxvYXQzLCBmbG9hdDMpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibm9ybWFsaXplIiwgZmxvYXQxKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgIm5vcm1hbGl6ZSIsIGZsb2F0
Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJub3JtYWxpemUiLCBm
bG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibm9ybWFsaXpl
IiwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZmFj
ZWZvcndhcmQiLCBmbG9hdDEsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MiwgImZhY2Vmb3J3YXJkIiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJmYWNlZm9yd2FyZCIsIGZs
b2F0MywgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQ0LCAiZmFjZWZvcndhcmQiLCBmbG9hdDQsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAicmVmbGVjdCIsIGZsb2F0MSwgZmxvYXQxKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInJlZmxlY3QiLCBmbG9hdDIs
IGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJyZWZsZWN0
IiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0
LCAicmVmbGVjdCIsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQxLCAicmVmcmFjdCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAicmVmcmFjdCIsIGZsb2F0MiwgZmxvYXQy
LCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAicmVmcmFj
dCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQ0LCAicmVmcmFjdCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDEpOwotCi0gICAgVFR5
cGUgKm1hdDIgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAy
LCB0cnVlKTsKLSAgICBUVHlwZSAqbWF0MyA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZp
bmVkLCBFdnFHbG9iYWwsIDMsIHRydWUpOwotICAgIFRUeXBlICptYXQ0ID0gbmV3IFRUeXBlKEVi
dEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgNCwgdHJ1ZSk7Ci0KLSAgICAvLwotICAg
IC8vIE1hdHJpeCBGdW5jdGlvbnMuCi0gICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKG1hdDIsICJtYXRyaXhDb21wTXVsdCIsIG1hdDIsIG1hdDIpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4obWF0MywgIm1hdHJpeENvbXBNdWx0IiwgbWF0MywgbWF0Myk7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihtYXQ0LCAibWF0cml4Q29tcE11bHQiLCBtYXQ0LCBt
YXQ0KTsKLQotICAgIFRUeXBlICpib29sMSA9IG5ldyBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmlu
ZWQsIEV2cUdsb2JhbCwgMSk7Ci0gICAgVFR5cGUgKmJvb2wyID0gbmV3IFRUeXBlKEVidEJvb2ws
IEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAyKTsKLSAgICBUVHlwZSAqYm9vbDMgPSBuZXcgVFR5
cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDMpOwotICAgIFRUeXBlICpib29s
NCA9IG5ldyBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgNCk7Ci0KLSAg
ICAvLwotICAgIC8vIFZlY3RvciByZWxhdGlvbmFsIGZ1bmN0aW9ucy4KLSAgICAvLwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJsZXNzVGhhbiIsIGZsb2F0MiwgZmxvYXQy
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAibGVzc1RoYW4iLCBmbG9h
dDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImxlc3NU
aGFuIiwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihi
b29sMiwgImxlc3NUaGFuIiwgaW50MiwgaW50Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihib29sMywgImxlc3NUaGFuIiwgaW50MywgaW50Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihib29sNCwgImxlc3NUaGFuIiwgaW50NCwgaW50NCk7Ci0KLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAibGVzc1RoYW5FcXVhbCIsIGZsb2F0MiwgZmxvYXQy
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAibGVzc1RoYW5FcXVhbCIs
IGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAi
bGVzc1RoYW5FcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oYm9vbDIsICJsZXNzVGhhbkVxdWFsIiwgaW50MiwgaW50Mik7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImxlc3NUaGFuRXF1YWwiLCBpbnQzLCBpbnQzKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAibGVzc1RoYW5FcXVhbCIsIGlu
dDQsIGludDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImdyZWF0
ZXJUaGFuIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Ym9vbDMsICJncmVhdGVyVGhhbiIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGJvb2w0LCAiZ3JlYXRlclRoYW4iLCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZ3JlYXRlclRoYW4iLCBpbnQyLCBp
bnQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZ3JlYXRlclRoYW4i
LCBpbnQzLCBpbnQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAiZ3Jl
YXRlclRoYW4iLCBpbnQ0LCBpbnQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Ym9vbDIsICJncmVhdGVyVGhhbkVxdWFsIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJncmVhdGVyVGhhbkVxdWFsIiwgZmxvYXQzLCBmbG9h
dDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJncmVhdGVyVGhhbkVx
dWFsIiwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihi
b29sMiwgImdyZWF0ZXJUaGFuRXF1YWwiLCBpbnQyLCBpbnQyKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGJvb2wzLCAiZ3JlYXRlclRoYW5FcXVhbCIsIGludDMsIGludDMpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJncmVhdGVyVGhhbkVxdWFsIiwgaW50
NCwgaW50NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZXF1YWwi
LCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywg
ImVxdWFsIiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Ym9vbDQsICJlcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oYm9vbDIsICJlcXVhbCIsIGludDIsIGludDIpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oYm9vbDMsICJlcXVhbCIsIGludDMsIGludDMpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oYm9vbDQsICJlcXVhbCIsIGludDQsIGludDQpOwotCi0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImVxdWFsIiwgYm9vbDIsIGJvb2wyKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZXF1YWwiLCBib29sMywgYm9vbDMpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJlcXVhbCIsIGJvb2w0LCBib29s
NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAibm90RXF1YWwiLCBm
bG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgIm5v
dEVxdWFsIiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Ym9vbDQsICJub3RFcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oYm9vbDIsICJub3RFcXVhbCIsIGludDIsIGludDIpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJub3RFcXVhbCIsIGludDMsIGludDMpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJub3RFcXVhbCIsIGludDQsIGludDQpOwot
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgIm5vdEVxdWFsIiwgYm9vbDIs
IGJvb2wyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAibm90RXF1YWwi
LCBib29sMywgYm9vbDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJu
b3RFcXVhbCIsIGJvb2w0LCBib29sNCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGJvb2wxLCAiYW55IiwgYm9vbDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9v
bDEsICJhbnkiLCBib29sMyk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMSwg
ImFueSIsIGJvb2w0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDEsICJh
bGwiLCBib29sMik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMSwgImFsbCIs
IGJvb2wzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wxLCAiYWxsIiwgYm9v
bDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgIm5vdCIsIGJvb2wy
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAibm90IiwgYm9vbDMpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJub3QiLCBib29sNCk7Ci0KLSAg
ICBUVHlwZSAqc2FtcGxlcjJEID0gbmV3IFRUeXBlKEVidFNhbXBsZXIyRCwgRWJwVW5kZWZpbmVk
LCBFdnFHbG9iYWwsIDEpOwotICAgIFRUeXBlICpzYW1wbGVyQ3ViZSA9IG5ldyBUVHlwZShFYnRT
YW1wbGVyQ3ViZSwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDEpOwotCi0gICAgLy8KLSAgICAv
LyBUZXh0dXJlIEZ1bmN0aW9ucyBmb3IgR0xTTCBFUyAxLjAKLSAgICAvLwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEIiwgc2FtcGxlcjJELCBmbG9hdDIp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIs
IHNhbXBsZXIyRCwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVyMkQsIGZsb2F0NCk7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlQ3ViZSIsIHNhbXBsZXJDdWJlLCBmbG9hdDMp
OwotCi0gICAgaWYgKHJlc291cmNlcy5PRVNfRUdMX2ltYWdlX2V4dGVybmFsKQotICAgIHsKLSAg
ICAgICAgVFR5cGUgKnNhbXBsZXJFeHRlcm5hbE9FUyA9IG5ldyBUVHlwZShFYnRTYW1wbGVyRXh0
ZXJuYWxPRVMsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAxKTsKLQotICAgICAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRCIsIHNhbXBsZXJFeHRlcm5hbE9F
UywgZmxvYXQyKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0
ZXh0dXJlMkRQcm9qIiwgc2FtcGxlckV4dGVybmFsT0VTLCBmbG9hdDMpOwotICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVyRXh0
ZXJuYWxPRVMsIGZsb2F0NCk7Ci0gICAgfQotCi0gICAgaWYgKHJlc291cmNlcy5BUkJfdGV4dHVy
ZV9yZWN0YW5nbGUpCi0gICAgewotICAgICAgICBUVHlwZSAqc2FtcGxlcjJEUmVjdCA9IG5ldyBU
VHlwZShFYnRTYW1wbGVyMkRSZWN0LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMSk7Ci0KLSAg
ICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRSZWN0Iiwg
c2FtcGxlcjJEUmVjdCwgZmxvYXQyKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDQsICJ0ZXh0dXJlMkRSZWN0UHJvaiIsIHNhbXBsZXIyRFJlY3QsIGZsb2F0Myk7Ci0g
ICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUmVjdFBy
b2oiLCBzYW1wbGVyMkRSZWN0LCBmbG9hdDQpOwotICAgIH0KLQotICAgIGlmICh0eXBlID09IFNI
X0ZSQUdNRU5UX1NIQURFUikKLSAgICB7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQ0LCAidGV4dHVyZTJEIiwgc2FtcGxlcjJELCBmbG9hdDIsIGZsb2F0MSk7Ci0gICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNh
bXBsZXIyRCwgZmxvYXQzLCBmbG9hdDEpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVyMkQsIGZsb2F0NCwgZmxvYXQxKTsK
LSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlQ3ViZSIs
IHNhbXBsZXJDdWJlLCBmbG9hdDMsIGZsb2F0MSk7Ci0KLSAgICAgICAgaWYgKHJlc291cmNlcy5P
RVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZEZkeCIsIGZsb2F0MSk7Ci0gICAgICAgICAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImRGZHgiLCBmbG9hdDIpOwotICAgICAg
ICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJkRmR4IiwgZmxvYXQzKTsK
LSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZEZkeCIsIGZs
b2F0NCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQxLCAiZEZkeSIsIGZsb2F0MSk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MiwgImRGZHkiLCBmbG9hdDIpOwotICAgICAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJkRmR5IiwgZmxvYXQzKTsKLSAgICAgICAgICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZEZkeSIsIGZsb2F0NCk7Ci0KLSAgICAg
ICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZndpZHRoIiwgZmxvYXQx
KTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZndpZHRo
IiwgZmxvYXQyKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQz
LCAiZndpZHRoIiwgZmxvYXQzKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQ0LCAiZndpZHRoIiwgZmxvYXQ0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
KHR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUikKLSAgICB7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJETG9kIiwgc2FtcGxlcjJELCBmbG9hdDIsIGZs
b2F0MSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVy
ZTJEUHJvakxvZCIsIHNhbXBsZXIyRCwgZmxvYXQzLCBmbG9hdDEpOwotICAgICAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFByb2pMb2QiLCBzYW1wbGVyMkQs
IGZsb2F0NCwgZmxvYXQxKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDQsICJ0ZXh0dXJlQ3ViZUxvZCIsIHNhbXBsZXJDdWJlLCBmbG9hdDMsIGZsb2F0MSk7Ci0gICAg
fQotCi0gICAgLy8KLSAgICAvLyBEZXB0aCByYW5nZSBpbiB3aW5kb3cgY29vcmRpbmF0ZXMKLSAg
ICAvLwotICAgIFRGaWVsZExpc3QgKmZpZWxkcyA9IE5ld1Bvb2xURmllbGRMaXN0KCk7Ci0gICAg
VEZpZWxkICpuZWFyID0gbmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2
cUdsb2JhbCwgMSksIE5ld1Bvb2xUU3RyaW5nKCJuZWFyIikpOwotICAgIFRGaWVsZCAqZmFyID0g
bmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSksIE5l
d1Bvb2xUU3RyaW5nKCJmYXIiKSk7Ci0gICAgVEZpZWxkICpkaWZmID0gbmV3IFRGaWVsZChuZXcg
VFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSksIE5ld1Bvb2xUU3RyaW5nKCJk
aWZmIikpOwotICAgIGZpZWxkcy0+cHVzaF9iYWNrKG5lYXIpOwotICAgIGZpZWxkcy0+cHVzaF9i
YWNrKGZhcik7Ci0gICAgZmllbGRzLT5wdXNoX2JhY2soZGlmZik7Ci0gICAgVFN0cnVjdHVyZSAq
ZGVwdGhSYW5nZVN0cnVjdCA9IG5ldyBUU3RydWN0dXJlKE5ld1Bvb2xUU3RyaW5nKCJnbF9EZXB0
aFJhbmdlUGFyYW1ldGVycyIpLCBmaWVsZHMpOwotICAgIFRWYXJpYWJsZSAqZGVwdGhSYW5nZVBh
cmFtZXRlcnMgPSBuZXcgVFZhcmlhYmxlKCZkZXB0aFJhbmdlU3RydWN0LT5uYW1lKCksIGRlcHRo
UmFuZ2VTdHJ1Y3QsIHRydWUpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydCgqZGVwdGhSYW5nZVBh
cmFtZXRlcnMpOwotICAgIFRWYXJpYWJsZSAqZGVwdGhSYW5nZSA9IG5ldyBUVmFyaWFibGUoTmV3
UG9vbFRTdHJpbmcoImdsX0RlcHRoUmFuZ2UiKSwgVFR5cGUoZGVwdGhSYW5nZVN0cnVjdCkpOwot
ICAgIGRlcHRoUmFuZ2UtPnNldFF1YWxpZmllcihFdnFVbmlmb3JtKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnQoKmRlcHRoUmFuZ2UpOwotCi0gICAgLy8KLSAgICAvLyBJbXBsZW1lbnRhdGlvbiBk
ZXBlbmRlbnQgYnVpbHQtaW4gY29uc3RhbnRzLgotICAgIC8vCi0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0Q29uc3RJbnQoImdsX01heFZlcnRleEF0dHJpYnMiLCByZXNvdXJjZXMuTWF4VmVydGV4QXR0
cmlicyk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heFZlcnRleFVuaWZv
cm1WZWN0b3JzIiwgcmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xfTWF4VmFyeWluZ1ZlY3RvcnMiLCByZXNvdXJjZXMu
TWF4VmFyeWluZ1ZlY3RvcnMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KCJnbF9N
YXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1h
Z2VVbml0cyk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heENvbWJpbmVk
VGV4dHVyZUltYWdlVW5pdHMiLCByZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0
cyk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heFRleHR1cmVJbWFnZVVu
aXRzIiwgcmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRDb25zdEludCgiZ2xfTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyIsIHJlc291cmNlcy5N
YXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKTsKLQotICAgIGlmIChzcGVjICE9IFNIX0NTU19TSEFE
RVJTX1NQRUMpCi0gICAgewotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xf
TWF4RHJhd0J1ZmZlcnMiLCByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMpOwotICAgIH0KLX0KLQot
dm9pZCBJZGVudGlmeUJ1aWx0SW5zKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3Bl
YywKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMgJnJlc291
cmNlcywKLSAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlKQot
ewotICAgIC8vCi0gICAgLy8gRmlyc3QsIGluc2VydCBzb21lIHNwZWNpYWwgYnVpbHQtaW4gdmFy
aWFibGVzIHRoYXQgYXJlIG5vdCBpbiAKLSAgICAvLyB0aGUgYnVpbHQtaW4gaGVhZGVyIGZpbGVz
LgotICAgIC8vCi0gICAgc3dpdGNoKHR5cGUpIHsKLSAgICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURF
UjoKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3Ry
aW5nKCJnbF9GcmFnQ29vcmQiKSwgICAgICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0
LCBFYnBNZWRpdW0sIEV2cUZyYWdDb29yZCwgICA0KSkpOwotICAgICAgICBzeW1ib2xUYWJsZS5p
bnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zyb250RmFjaW5nIiksICAg
ICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0Qm9vbCwgIEVicFVuZGVmaW5lZCwgRXZxRnJvbnRG
YWNpbmcsIDEpKSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfUG9pbnRDb29yZCIpLCAgICAgICAgICAgICAgICAgICAgICBUVHlw
ZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsKLQotICAgICAgICAv
LwotICAgICAgICAvLyBJbiBDU1MgU2hhZGVycywgZ2xfRnJhZ0NvbG9yLCBnbF9GcmFnRGF0YSwg
YW5kIGdsX01heERyYXdCdWZmZXJzIGFyZSBub3QgYXZhaWxhYmxlLgotICAgICAgICAvLyBJbnN0
ZWFkLCBjc3NfTWl4Q29sb3IgYW5kIGNzc19Db2xvck1hdHJpeCBhcmUgYXZhaWxhYmxlLgotICAg
ICAgICAvLwotICAgICAgICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKSB7Ci0gICAg
ICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmco
ImdsX0ZyYWdDb2xvciIpLCAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVk
aXVtLCBFdnFGcmFnQ29sb3IsICAgNCkpKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFbZ2xfTWF4RHJhd0J1
ZmZlcnNdIiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCAgICA0KSkp
OwotICAgICAgICAgICAgaWYgKHJlc291cmNlcy5FWFRfZnJhZ19kZXB0aCkgewotICAgICAgICAg
ICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygi
Z2xfRnJhZ0RlcHRoRVhUIiksICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIHJlc291cmNlcy5G
cmFnbWVudFByZWNpc2lvbkhpZ2ggPyBFYnBIaWdoIDogRWJwTWVkaXVtLCBFdnFGcmFnRGVwdGgs
IDEpKSk7Ci0gICAgICAgICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9FeHRlbnNpb24oImds
X0ZyYWdEZXB0aEVYVCIsICJHTF9FWFRfZnJhZ19kZXB0aCIpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlh
YmxlKE5ld1Bvb2xUU3RyaW5nKCJjc3NfTWl4Q29sb3IiKSwgICAgICAgICAgICAgICAgICAgVFR5
cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAgIDQpKSk7Ci0gICAgICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImNzc19D
b2xvck1hdHJpeCIpLCAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBF
dnFHbG9iYWwsICAgICAgNCwgdHJ1ZSkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJyZWFrOwot
Ci0gICAgY2FzZSBTSF9WRVJURVhfU0hBREVSOgotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQo
Km5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1Bvc2l0aW9uIiksICAgIFRUeXBlKEVi
dEZsb2F0LCBFYnBIaWdoLCBFdnFQb3NpdGlvbiwgICAgNCkpKTsKLSAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9Qb2ludFNpemUiKSwg
ICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludFNpemUsICAgMSkpKTsKLSAgICAg
ICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OiBhc3NlcnQoZmFsc2UgJiYgIkxhbmd1YWdlIG5vdCBz
dXBwb3J0ZWQiKTsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIE5leHQsIGlkZW50aWZ5IHdoaWNo
IGJ1aWx0LWlucyBmcm9tIHRoZSBhbHJlYWR5IGxvYWRlZCBoZWFkZXJzIGhhdmUKLSAgICAvLyBh
IG1hcHBpbmcgdG8gYW4gb3BlcmF0b3IuICBUaG9zZSB0aGF0IGFyZSBub3QgaWRlbnRpZmllZCBh
cyBzdWNoIGFyZQotICAgIC8vIGV4cGVjdGVkIHRvIGJlIHJlc29sdmVkIHRocm91Z2ggYSBsaWJy
YXJ5IG9mIGZ1bmN0aW9ucywgdmVyc3VzIGFzCi0gICAgLy8gb3BlcmF0aW9ucy4KLSAgICAvLwot
ICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm1hdHJpeENvbXBNdWx0IiwgICBFT3BN
dWwpOwotCi0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZXF1YWwiLCAgICAgICAg
ICAgIEVPcFZlY3RvckVxdWFsKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJu
b3RFcXVhbCIsICAgICAgICAgRU9wVmVjdG9yTm90RXF1YWwpOwotICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoImxlc3NUaGFuIiwgICAgICAgICBFT3BMZXNzVGhhbik7Ci0gICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZ3JlYXRlclRoYW4iLCAgICAgIEVPcEdyZWF0ZXJU
aGFuKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJsZXNzVGhhbkVxdWFsIiwg
ICAgRU9wTGVzc1RoYW5FcXVhbCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigi
Z3JlYXRlclRoYW5FcXVhbCIsIEVPcEdyZWF0ZXJUaGFuRXF1YWwpOwotICAgIAotICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInJhZGlhbnMiLCAgICAgIEVPcFJhZGlhbnMpOwotICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImRlZ3JlZXMiLCAgICAgIEVPcERlZ3JlZXMp
OwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInNpbiIsICAgICAgICAgIEVPcFNp
bik7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiY29zIiwgICAgICAgICAgRU9w
Q29zKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJ0YW4iLCAgICAgICAgICBF
T3BUYW4pOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImFzaW4iLCAgICAgICAg
IEVPcEFzaW4pOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImFjb3MiLCAgICAg
ICAgIEVPcEFjb3MpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImF0YW4iLCAg
ICAgICAgIEVPcEF0YW4pOwotCi0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigicG93
IiwgICAgICAgICAgRU9wUG93KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJl
eHAyIiwgICAgICAgICBFT3BFeHAyKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KCJsb2ciLCAgICAgICAgICBFT3BMb2cpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0
b3IoImV4cCIsICAgICAgICAgIEVPcEV4cCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVy
YXRvcigibG9nMiIsICAgICAgICAgRU9wTG9nMik7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9P
cGVyYXRvcigic3FydCIsICAgICAgICAgRU9wU3FydCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcigiaW52ZXJzZXNxcnQiLCAgRU9wSW52ZXJzZVNxcnQpOwotCi0gICAgc3ltYm9s
VGFibGUucmVsYXRlVG9PcGVyYXRvcigiYWJzIiwgICAgICAgICAgRU9wQWJzKTsKLSAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzaWduIiwgICAgICAgICBFT3BTaWduKTsKLSAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJmbG9vciIsICAgICAgICBFT3BGbG9vcik7Ci0g
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiY2VpbCIsICAgICAgICAgRU9wQ2VpbCk7
Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZnJhY3QiLCAgICAgICAgRU9wRnJh
Y3QpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm1vZCIsICAgICAgICAgIEVP
cE1vZCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibWluIiwgICAgICAgICAg
RU9wTWluKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJtYXgiLCAgICAgICAg
ICBFT3BNYXgpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImNsYW1wIiwgICAg
ICAgIEVPcENsYW1wKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJtaXgiLCAg
ICAgICAgICBFT3BNaXgpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInN0ZXAi
LCAgICAgICAgIEVPcFN0ZXApOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInNt
b290aHN0ZXAiLCAgIEVPcFNtb290aFN0ZXApOwotCi0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9P
cGVyYXRvcigibGVuZ3RoIiwgICAgICAgRU9wTGVuZ3RoKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKCJkaXN0YW5jZSIsICAgICBFT3BEaXN0YW5jZSk7Ci0gICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9PcGVyYXRvcigiZG90IiwgICAgICAgICAgRU9wRG90KTsKLSAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKCJjcm9zcyIsICAgICAgICBFT3BDcm9zcyk7Ci0gICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibm9ybWFsaXplIiwgICAgRU9wTm9ybWFsaXplKTsK
LSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJmYWNlZm9yd2FyZCIsICBFT3BGYWNl
Rm9yd2FyZCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigicmVmbGVjdCIsICAg
ICAgRU9wUmVmbGVjdCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigicmVmcmFj
dCIsICAgICAgRU9wUmVmcmFjdCk7Ci0gICAgCi0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVy
YXRvcigiYW55IiwgICAgICAgICAgRU9wQW55KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKCJhbGwiLCAgICAgICAgICBFT3BBbGwpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoIm5vdCIsICAgICAgICAgIEVPcFZlY3RvckxvZ2ljYWxOb3QpOwotCi0gICAgLy8g
TWFwIGxhbmd1YWdlLXNwZWNpZmljIG9wZXJhdG9ycy4KLSAgICBzd2l0Y2godHlwZSkgewotICAg
IGNhc2UgU0hfVkVSVEVYX1NIQURFUjoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTSF9GUkFH
TUVOVF9TSEFERVI6Ci0gICAgICAgIGlmIChyZXNvdXJjZXMuT0VTX3N0YW5kYXJkX2Rlcml2YXRp
dmVzKSB7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkRmR4Iiwg
ICBFT3BERmR4KTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImRG
ZHkiLCAgIEVPcERGZHkpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cigiZndpZHRoIiwgRU9wRndpZHRoKTsKLQotICAgICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9FeHRlbnNpb24oImRGZHgiLCAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIik7Ci0gICAg
ICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbigiZEZkeSIsICJHTF9PRVNfc3Rh
bmRhcmRfZGVyaXZhdGl2ZXMiKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvRXh0
ZW5zaW9uKCJmd2lkdGgiLCAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIik7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDogYnJlYWs7Ci0gICAgfQotCi0gICAgLy8g
RmluYWxseSBhZGQgcmVzb3VyY2Utc3BlY2lmaWMgdmFyaWFibGVzLgotICAgIHN3aXRjaCh0eXBl
KSB7Ci0gICAgY2FzZSBTSF9GUkFHTUVOVF9TSEFERVI6Ci0gICAgICAgIGlmIChzcGVjICE9IFNI
X0NTU19TSEFERVJTX1NQRUMpIHsKLSAgICAgICAgICAgIC8vIFNldCB1cCBnbF9GcmFnRGF0YS4g
IFRoZSBhcnJheSBzaXplLgotICAgICAgICAgICAgVFR5cGUgZnJhZ0RhdGEoRWJ0RmxvYXQsIEVi
cE1lZGl1bSwgRXZxRnJhZ0RhdGEsIDQsIGZhbHNlLCB0cnVlKTsKLSAgICAgICAgICAgIGZyYWdE
YXRhLnNldEFycmF5U2l6ZShyZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMpOwotICAgICAgICAgICAg
c3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFn
RGF0YSIpLCAgICBmcmFnRGF0YSkpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6IGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBJbml0RXh0ZW5zaW9uQmVoYXZpb3IoY29u
c3QgU2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yKQotewotICAgIGlmIChyZXNvdXJj
ZXMuT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzKQotICAgICAgICBleHRCZWhhdmlvclsiR0xfT0VT
X3N0YW5kYXJkX2Rlcml2YXRpdmVzIl0gPSBFQmhVbmRlZmluZWQ7Ci0gICAgaWYgKHJlc291cmNl
cy5PRVNfRUdMX2ltYWdlX2V4dGVybmFsKQotICAgICAgICBleHRCZWhhdmlvclsiR0xfT0VTX0VH
TF9pbWFnZV9leHRlcm5hbCJdID0gRUJoVW5kZWZpbmVkOwotICAgIGlmIChyZXNvdXJjZXMuQVJC
X3RleHR1cmVfcmVjdGFuZ2xlKQotICAgICAgICBleHRCZWhhdmlvclsiR0xfQVJCX3RleHR1cmVf
cmVjdGFuZ2xlIl0gPSBFQmhVbmRlZmluZWQ7Ci0gICAgaWYgKHJlc291cmNlcy5FWFRfZHJhd19i
dWZmZXJzKQotICAgICAgICBleHRCZWhhdmlvclsiR0xfRVhUX2RyYXdfYnVmZmVycyJdID0gRUJo
VW5kZWZpbmVkOwotICAgIGlmIChyZXNvdXJjZXMuRVhUX2ZyYWdfZGVwdGgpCi0gICAgICAgIGV4
dEJlaGF2aW9yWyJHTF9FWFRfZnJhZ19kZXB0aCJdID0gRUJoVW5kZWZpbmVkOwotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhYTEzNDY2YWNhZDI5ZTY2NmMwNWZhZDY3NTlhOGRh
ZmY5ZGI4MGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuaAorKysgL2Rl
di9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgX0lO
SVRJQUxJWkVfSU5DTFVERURfCi0jZGVmaW5lIF9JTklUSUFMSVpFX0lOQ0xVREVEXwotCi0jaW5j
bHVkZSAiY29tcGlsZXIvQ29tbW9uLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5kbGUuaCIK
LSNpbmNsdWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5oIgotCi12b2lkIEluc2VydEJ1aWx0SW5G
dW5jdGlvbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBjb25zdCBTaEJ1
aWx0SW5SZXNvdXJjZXMgJnJlc291cmNlcywgVFN5bWJvbFRhYmxlICZ0YWJsZSk7Ci0KLXZvaWQg
SWRlbnRpZnlCdWlsdElucyhTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsCi0g
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMs
Ci0gICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSk7Ci0KLXZv
aWQgSW5pdEV4dGVuc2lvbkJlaGF2aW9yKGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyYgcmVzb3Vy
Y2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRl
bnNpb25CZWhhdmlvcik7Ci0KLSNlbmRpZiAvLyBfSU5JVElBTElaRV9JTkNMVURFRF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxs
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxs
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM3ZjI3ZmNlZDE3NGIwYjE0YTY3
YmU3YzY1MjBmMTc5NGUyYTc2Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6
ZURsbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwotCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5oIgotCi0jaW5jbHVkZSAiY29t
cGlsZXIvSW5pdGlhbGl6ZUdsb2JhbHMuaCIKLSNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXpl
UGFyc2VDb250ZXh0LmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvb3NpbmNsdWRlLmgiCi0KLWJvb2wg
SW5pdFByb2Nlc3MoKQotewotICAgIGlmICghSW5pdGlhbGl6ZVBvb2xJbmRleCgpKSB7Ci0gICAg
ICAgIGFzc2VydCgwICYmICJJbml0UHJvY2VzcygpOiBGYWlsZWQgdG8gaW5pdGFsaXplIGdsb2Jh
bCBwb29sIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIUluaXRp
YWxpemVQYXJzZUNvbnRleHRJbmRleCgpKSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJJbml0UHJv
Y2VzcygpOiBGYWlsZWQgdG8gaW5pdGFsaXplIHBhcnNlIGNvbnRleHQiKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIERldGFjaFBy
b2Nlc3MoKQotewotICAgIEZyZWVQYXJzZUNvbnRleHRJbmRleCgpOwotICAgIEZyZWVQb29sSW5k
ZXgoKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9Jbml0aWFsaXplRGxsLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
SW5pdGlhbGl6ZURsbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzA3MGNjM2Zm
NzhmNzUzYTI0NmM0NjA2OTg5MDg2YTYzYmYwOGJhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9Jbml0aWFsaXplRGxsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0vLwotLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCi0vLwotI2lmbmRlZiBfX0lOSVRJQUxJWkVETExfSAotI2RlZmluZSBfX0lOSVRJQUxJ
WkVETExfSAotCi1ib29sIEluaXRQcm9jZXNzKCk7Ci12b2lkIERldGFjaFByb2Nlc3MoKTsKLQot
I2VuZGlmIC8vIF9fSU5JVElBTElaRURMTF9ICi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplR0xQb3NpdGlvbi5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZUdMUG9zaXRpb24uY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDE5M2UzOWQyZThiYTFhNmQxMDE1YzkxYWMw
ZGQwYjBkYTg0NzY4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplR0xQb3Np
dGlvbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwotCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZUdMUG9zaXRpb24uaCIKLSNpbmNsdWRl
ICJjb21waWxlci9kZWJ1Zy5oIgotCi1ib29sIEluaXRpYWxpemVHTFBvc2l0aW9uOjp2aXNpdEFn
Z3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKLXsKLSAgICBib29s
IHZpc2l0Q2hpbGRyZW4gPSAhbUNvZGVJbnNlcnRlZDsKLSAgICBzd2l0Y2ggKG5vZGUtPmdldE9w
KCkpCi0gICAgewotICAgICAgY2FzZSBFT3BTZXF1ZW5jZTogYnJlYWs7Ci0gICAgICBjYXNlIEVP
cEZ1bmN0aW9uOgotICAgICAgewotICAgICAgICAvLyBGdW5jdGlvbiBkZWZpbml0aW9uLgotICAg
ICAgICBBU1NFUlQodmlzaXQgPT0gUHJlVmlzaXQpOwotICAgICAgICBpZiAobm9kZS0+Z2V0TmFt
ZSgpID09ICJtYWluKCIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAm
c2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOwotICAgICAgICAgICAgQVNTRVJUKChzZXF1
ZW5jZS5zaXplKCkgPT0gMSkgfHwgKHNlcXVlbmNlLnNpemUoKSA9PSAyKSk7Ci0gICAgICAgICAg
ICBUSW50ZXJtQWdncmVnYXRlICpib2R5ID0gTlVMTDsKLSAgICAgICAgICAgIGlmIChzZXF1ZW5j
ZS5zaXplKCkgPT0gMSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib2R5ID0gbmV3
IFRJbnRlcm1BZ2dyZWdhdGUoRU9wU2VxdWVuY2UpOwotICAgICAgICAgICAgICAgIHNlcXVlbmNl
LnB1c2hfYmFjayhib2R5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBib2R5ID0gc2VxdWVuY2VbMV0tPmdldEFzQWdncmVn
YXRlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBBU1NFUlQoYm9keSk7Ci0gICAgICAg
ICAgICBpbnNlcnRDb2RlKGJvZHktPmdldFNlcXVlbmNlKCkpOwotICAgICAgICAgICAgbUNvZGVJ
bnNlcnRlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAg
ICBkZWZhdWx0OiB2aXNpdENoaWxkcmVuID0gZmFsc2U7IGJyZWFrOwotICAgIH0KLSAgICByZXR1
cm4gdmlzaXRDaGlsZHJlbjsKLX0KLQotdm9pZCBJbml0aWFsaXplR0xQb3NpdGlvbjo6aW5zZXJ0
Q29kZShUSW50ZXJtU2VxdWVuY2UmIHNlcXVlbmNlKQotewotICAgIFRJbnRlcm1CaW5hcnkgKmJp
bmFyeSA9IG5ldyBUSW50ZXJtQmluYXJ5KEVPcEFzc2lnbik7Ci0gICAgc2VxdWVuY2UuaW5zZXJ0
KHNlcXVlbmNlLmJlZ2luKCksIGJpbmFyeSk7Ci0KLSAgICBUSW50ZXJtU3ltYm9sICpsZWZ0ID0g
bmV3IFRJbnRlcm1TeW1ib2woCi0gICAgICAgIDAsICJnbF9Qb3NpdGlvbiIsIFRUeXBlKEVidEZs
b2F0LCBFYnBVbmRlZmluZWQsIEV2cVBvc2l0aW9uLCA0KSk7Ci0gICAgYmluYXJ5LT5zZXRMZWZ0
KGxlZnQpOwotCi0gICAgQ29uc3RhbnRVbmlvbiAqdSA9IG5ldyBDb25zdGFudFVuaW9uWzRdOwot
ICAgIGZvciAoaW50IGlpID0gMDsgaWkgPCAzOyArK2lpKQotICAgICAgICB1W2lpXS5zZXRGQ29u
c3QoMC4wZik7Ci0gICAgdVszXS5zZXRGQ29uc3QoMS4wZik7Ci0gICAgVEludGVybUNvbnN0YW50
VW5pb24gKnJpZ2h0ID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKAotICAgICAgICB1LCBUVHlw
ZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCwgNCkpOwotICAgIGJpbmFyeS0+c2V0
UmlnaHQocmlnaHQpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0luaXRpYWxpemVHTFBvc2l0aW9uLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZUdMUG9zaXRpb24uaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMWIxMTA3NWExMzc5OGNmM2U2ZjFkNzRjYmRiZmIwNDMyMGU3NzU3Yi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZUdMUG9zaXRpb24uaAorKysgL2Rldi9u
dWxsCkBAIC0xLDMzICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElM
RVJfSU5JVElBTElaRV9HTF9QT1NJVElPTl9IXwotI2RlZmluZSBDT01QSUxFUl9JTklUSUFMSVpF
X0dMX1BPU0lUSU9OX0hfCi0KLSNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKLQot
Y2xhc3MgSW5pdGlhbGl6ZUdMUG9zaXRpb24gOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgotewot
cHVibGljOgotICAgIEluaXRpYWxpemVHTFBvc2l0aW9uKCkgOiBtQ29kZUluc2VydGVkKGZhbHNl
KSB7IH0KLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2
aXNpdCwgVEludGVybUJpbmFyeSogbm9kZSkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKSB7IHJldHVy
biBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwg
VEludGVybVNlbGVjdGlvbiogbm9kZSkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCogbm9kZSkgeyByZXR1cm4gZmFs
c2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1C
cmFuY2gqIG5vZGUpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRB
Z2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpOwotCi1wcml2YXRl
OgotICAgIC8vIEluc2VydCBBU1Qgbm9kZSBpbiB0aGUgYmVnaW5uaW5nIG9mIG1haW4oKSBmb3Ig
ImdsX1Bvc2l0aW9uID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApOyIuCi0gICAgdm9pZCBpbnNl
cnRDb2RlKFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UpOwotCi0gICAgYm9vbCBtQ29kZUluc2Vy
dGVkOwotfTsKLQotI2VuZGlmICAvLyBDT01QSUxFUl9JTklUSUFMSVpFX0dMX1BPU0lUSU9OX0hf
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlh
bGl6ZUdsb2JhbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0
aWFsaXplR2xvYmFscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzE1OTQxNDI0
NzEwNTMwODAzODYyODEzODZhOTUwNmZhYmQwNTYzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9Jbml0aWFsaXplR2xvYmFscy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBfX0lOSVRJQUxJWkVfR0xPQkFMU19JTkNMVURFRF8K
LSNkZWZpbmUgX19JTklUSUFMSVpFX0dMT0JBTFNfSU5DTFVERURfCi0KLWJvb2wgSW5pdGlhbGl6
ZVBvb2xJbmRleCgpOwotdm9pZCBGcmVlUG9vbEluZGV4KCk7Ci0KLSNlbmRpZiAvLyBfX0lOSVRJ
QUxJWkVfR0xPQkFMU19JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZhYjAyNzMzMGRlOTU5MTYyYWJhNmVhZTgyNTgz
MGQ5MjUwYjQ5My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29u
dGV4dC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
I2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaCIKLQotI2luY2x1ZGUg
ImNvbXBpbGVyL29zaW5jbHVkZS5oIgotCi1PU19UTFNJbmRleCBHbG9iYWxQYXJzZUNvbnRleHRJ
bmRleCA9IE9TX0lOVkFMSURfVExTX0lOREVYOwotCi1ib29sIEluaXRpYWxpemVQYXJzZUNvbnRl
eHRJbmRleCgpCi17Ci0gICAgYXNzZXJ0KEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID09IE9TX0lO
VkFMSURfVExTX0lOREVYKTsKLQotICAgIEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfQWxs
b2NUTFNJbmRleCgpOwotICAgIHJldHVybiBHbG9iYWxQYXJzZUNvbnRleHRJbmRleCAhPSBPU19J
TlZBTElEX1RMU19JTkRFWDsKLX0KLQotdm9pZCBGcmVlUGFyc2VDb250ZXh0SW5kZXgoKQotewot
ICAgIGFzc2VydChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCAhPSBPU19JTlZBTElEX1RMU19JTkRF
WCk7Ci0KLSAgICBPU19GcmVlVExTSW5kZXgoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgpOwotICAg
IEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7Ci19Ci0KLXZv
aWQgU2V0R2xvYmFsUGFyc2VDb250ZXh0KFRQYXJzZUNvbnRleHQqIGNvbnRleHQpCi17Ci0gICAg
YXNzZXJ0KEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ICE9IE9TX0lOVkFMSURfVExTX0lOREVYKTsK
LSAgICBPU19TZXRUTFNWYWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCwgY29udGV4dCk7Ci19
Ci0KLVRQYXJzZUNvbnRleHQqIEdldEdsb2JhbFBhcnNlQ29udGV4dCgpCi17Ci0gICAgYXNzZXJ0
KEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ICE9IE9TX0lOVkFMSURfVExTX0lOREVYKTsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VFBhcnNlQ29udGV4dCo+KE9TX0dldFRMU1ZhbHVlKEdsb2JhbFBh
cnNlQ29udGV4dEluZGV4KSk7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmZiYWI4N2QwNzIzYTYzMjg0Njg0M2MzMGQ5Y2FjMzMw
MjcwNzc2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0j
aWZuZGVmIF9fSU5JVElBTElaRV9QQVJTRV9DT05URVhUX0lOQ0xVREVEXwotI2RlZmluZSBfX0lO
SVRJQUxJWkVfUEFSU0VfQ09OVEVYVF9JTkNMVURFRF8KLQotYm9vbCBJbml0aWFsaXplUGFyc2VD
b250ZXh0SW5kZXgoKTsKLXZvaWQgRnJlZVBhcnNlQ29udGV4dEluZGV4KCk7Ci0KLXN0cnVjdCBU
UGFyc2VDb250ZXh0OwotZXh0ZXJuIHZvaWQgU2V0R2xvYmFsUGFyc2VDb250ZXh0KFRQYXJzZUNv
bnRleHQqIGNvbnRleHQpOwotZXh0ZXJuIFRQYXJzZUNvbnRleHQqIEdldEdsb2JhbFBhcnNlQ29u
dGV4dCgpOwotCi0jZW5kaWYgLy8gX19JTklUSUFMSVpFX1BBUlNFX0NPTlRFWFRfSU5DTFVERURf
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW50ZXJt
VHJhdmVyc2UuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVy
bVRyYXZlcnNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE2OTFkYTcxZmQw
MWY0MTA3M2I3NGI2YzlhYzUxMGEwYWRmMGQwNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
SW50ZXJtVHJhdmVyc2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjU5ICswLDAgQEAKLS8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKLQotLy8K
LS8vIFRyYXZlcnNlIHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24gdHJlZSwgYW5kCi0v
LyBjYWxsIGEgbm9kZSB0eXBlIHNwZWNpZmljIGZ1bmN0aW9uIGZvciBlYWNoIG5vZGUuCi0vLyBE
b25lIHJlY3Vyc2l2ZWx5IHRocm91Z2ggdGhlIG1lbWJlciBmdW5jdGlvbiBUcmF2ZXJzZSgpLgot
Ly8gTm9kZSB0eXBlcyBjYW4gYmUgc2tpcHBlZCBpZiB0aGVpciBmdW5jdGlvbiB0byBjYWxsIGlz
IDAsCi0vLyBidXQgdGhlaXIgc3VidHJlZSB3aWxsIHN0aWxsIGJlIHRyYXZlcnNlZC4KLS8vIE5v
ZGVzIHdpdGggY2hpbGRyZW4gY2FuIGhhdmUgdGhlaXIgd2hvbGUgc3VidHJlZSBza2lwcGVkCi0v
LyBpZiBwcmVWaXNpdCBpcyB0dXJuZWQgb24gYW5kIHRoZSB0eXBlIHNwZWNpZmljIGZ1bmN0aW9u
Ci0vLyByZXR1cm5zIGZhbHNlLgotLy8KLS8vIHByZVZpc2l0LCBwb3N0VmlzaXQsIGFuZCByaWdo
dFRvTGVmdCBjb250cm9sIHdoYXQgb3JkZXIKLS8vIG5vZGVzIGFyZSB2aXNpdGVkIGluLgotLy8K
LQotLy8KLS8vIFRyYXZlcnNhbCBmdW5jdGlvbnMgZm9yIHRlcm1pbmFscyBhcmUgc3RyYWlnaGZv
cndhcmQuLi4uCi0vLwotdm9pZCBUSW50ZXJtU3ltYm9sOjp0cmF2ZXJzZShUSW50ZXJtVHJhdmVy
c2VyICppdCkKLXsKLSAgICBpdC0+dmlzaXRTeW1ib2wodGhpcyk7Ci19Ci0KLXZvaWQgVEludGVy
bUNvbnN0YW50VW5pb246OnRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIgKml0KQotewotICAgIGl0
LT52aXNpdENvbnN0YW50VW5pb24odGhpcyk7Ci19Ci0KLS8vCi0vLyBUcmF2ZXJzZSBhIGJpbmFy
eSBub2RlLgotLy8KLXZvaWQgVEludGVybUJpbmFyeTo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNl
ciAqaXQpCi17Ci0gICAgYm9vbCB2aXNpdCA9IHRydWU7Ci0KLSAgICAvLwotICAgIC8vIHZpc2l0
IHRoZSBub2RlIGJlZm9yZSBjaGlsZHJlbiBpZiBwcmUtdmlzaXRpbmcuCi0gICAgLy8KLSAgICBp
ZiAoaXQtPnByZVZpc2l0KQotICAgICAgICB2aXNpdCA9IGl0LT52aXNpdEJpbmFyeShQcmVWaXNp
dCwgdGhpcyk7Ci0gICAgCi0gICAgLy8KLSAgICAvLyBWaXNpdCB0aGUgY2hpbGRyZW4sIGluIHRo
ZSByaWdodCBvcmRlci4KLSAgICAvLwotICAgIGlmICh2aXNpdCkKLSAgICB7Ci0gICAgICAgIGl0
LT5pbmNyZW1lbnREZXB0aCh0aGlzKTsKLQotICAgICAgICBpZiAoaXQtPnJpZ2h0VG9MZWZ0KSAK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKHJpZ2h0KQotICAgICAgICAgICAgICAgIHJpZ2h0
LT50cmF2ZXJzZShpdCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpdC0+aW5WaXNp
dCkKLSAgICAgICAgICAgICAgICB2aXNpdCA9IGl0LT52aXNpdEJpbmFyeShJblZpc2l0LCB0aGlz
KTsKLQotICAgICAgICAgICAgaWYgKHZpc2l0ICYmIGxlZnQpCi0gICAgICAgICAgICAgICAgbGVm
dC0+dHJhdmVyc2UoaXQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKGxlZnQpCi0gICAgICAgICAgICAgICAgbGVmdC0+dHJhdmVyc2UoaXQpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaXQtPmluVmlzaXQpCi0gICAgICAgICAgICAg
ICAgdmlzaXQgPSBpdC0+dmlzaXRCaW5hcnkoSW5WaXNpdCwgdGhpcyk7Ci0KLSAgICAgICAgICAg
IGlmICh2aXNpdCAmJiByaWdodCkKLSAgICAgICAgICAgICAgICByaWdodC0+dHJhdmVyc2UoaXQp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaXQtPmRlY3JlbWVudERlcHRoKCk7Ci0gICAgfQotCi0g
ICAgLy8KLSAgICAvLyBWaXNpdCB0aGUgbm9kZSBhZnRlciB0aGUgY2hpbGRyZW4sIGlmIHJlcXVl
c3RlZCBhbmQgdGhlIHRyYXZlcnNhbAotICAgIC8vIGhhc24ndCBiZWVuIGNhbmNlbGxlZCB5ZXQu
Ci0gICAgLy8KLSAgICBpZiAodmlzaXQgJiYgaXQtPnBvc3RWaXNpdCkKLSAgICAgICAgaXQtPnZp
c2l0QmluYXJ5KFBvc3RWaXNpdCwgdGhpcyk7Ci19Ci0KLS8vCi0vLyBUcmF2ZXJzZSBhIHVuYXJ5
IG5vZGUuICBTYW1lIGNvbW1lbnRzIGluIGJpbmFyeSBub2RlIGFwcGx5IGhlcmUuCi0vLwotdm9p
ZCBUSW50ZXJtVW5hcnk6OnRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIgKml0KQotewotICAgIGJv
b2wgdmlzaXQgPSB0cnVlOwotCi0gICAgaWYgKGl0LT5wcmVWaXNpdCkKLSAgICAgICAgdmlzaXQg
PSBpdC0+dmlzaXRVbmFyeShQcmVWaXNpdCwgdGhpcyk7Ci0KLSAgICBpZiAodmlzaXQpIHsKLSAg
ICAgICAgaXQtPmluY3JlbWVudERlcHRoKHRoaXMpOwotICAgICAgICBvcGVyYW5kLT50cmF2ZXJz
ZShpdCk7Ci0gICAgICAgIGl0LT5kZWNyZW1lbnREZXB0aCgpOwotICAgIH0KLSAgICAKLSAgICBp
ZiAodmlzaXQgJiYgaXQtPnBvc3RWaXNpdCkKLSAgICAgICAgaXQtPnZpc2l0VW5hcnkoUG9zdFZp
c2l0LCB0aGlzKTsKLX0KLQotLy8KLS8vIFRyYXZlcnNlIGFuIGFnZ3JlZ2F0ZSBub2RlLiAgU2Ft
ZSBjb21tZW50cyBpbiBiaW5hcnkgbm9kZSBhcHBseSBoZXJlLgotLy8KLXZvaWQgVEludGVybUFn
Z3JlZ2F0ZTo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciAqaXQpCi17Ci0gICAgYm9vbCB2aXNp
dCA9IHRydWU7Ci0gICAgCi0gICAgaWYgKGl0LT5wcmVWaXNpdCkKLSAgICAgICAgdmlzaXQgPSBp
dC0+dmlzaXRBZ2dyZWdhdGUoUHJlVmlzaXQsIHRoaXMpOwotICAgIAotICAgIGlmICh2aXNpdCkK
LSAgICB7Ci0gICAgICAgIGl0LT5pbmNyZW1lbnREZXB0aCh0aGlzKTsKLQotICAgICAgICBpZiAo
aXQtPnJpZ2h0VG9MZWZ0KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1
ZW5jZTo6cmV2ZXJzZV9pdGVyYXRvciBzaXQgPSBzZXF1ZW5jZS5yYmVnaW4oKTsgc2l0ICE9IHNl
cXVlbmNlLnJlbmQoKTsgc2l0KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKCpz
aXQpLT50cmF2ZXJzZShpdCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodmlzaXQgJiYgaXQtPmlu
VmlzaXQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoKnNpdCAh
PSBzZXF1ZW5jZS5mcm9udCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXQgPSBpdC0+
dmlzaXRBZ2dyZWdhdGUoSW5WaXNpdCwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAg
Zm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNpdCA9IHNlcXVlbmNlLmJlZ2luKCk7IHNp
dCAhPSBzZXF1ZW5jZS5lbmQoKTsgc2l0KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgKCpzaXQpLT50cmF2ZXJzZShpdCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodmlzaXQgJiYg
aXQtPmluVmlzaXQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAo
KnNpdCAhPSBzZXF1ZW5jZS5iYWNrKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB2aXNpdCA9
IGl0LT52aXNpdEFnZ3JlZ2F0ZShJblZpc2l0LCB0aGlzKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGl0LT5kZWNyZW1lbnRE
ZXB0aCgpOwotICAgIH0KLQotICAgIGlmICh2aXNpdCAmJiBpdC0+cG9zdFZpc2l0KQotICAgICAg
ICBpdC0+dmlzaXRBZ2dyZWdhdGUoUG9zdFZpc2l0LCB0aGlzKTsKLX0KLQotLy8KLS8vIFRyYXZl
cnNlIGEgc2VsZWN0aW9uIG5vZGUuICBTYW1lIGNvbW1lbnRzIGluIGJpbmFyeSBub2RlIGFwcGx5
IGhlcmUuCi0vLwotdm9pZCBUSW50ZXJtU2VsZWN0aW9uOjp0cmF2ZXJzZShUSW50ZXJtVHJhdmVy
c2VyICppdCkKLXsKLSAgICBib29sIHZpc2l0ID0gdHJ1ZTsKLQotICAgIGlmIChpdC0+cHJlVmlz
aXQpCi0gICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0U2VsZWN0aW9uKFByZVZpc2l0LCB0aGlzKTsK
LSAgICAKLSAgICBpZiAodmlzaXQpIHsKLSAgICAgICAgaXQtPmluY3JlbWVudERlcHRoKHRoaXMp
OwotICAgICAgICBpZiAoaXQtPnJpZ2h0VG9MZWZ0KSB7Ci0gICAgICAgICAgICBpZiAoZmFsc2VC
bG9jaykKLSAgICAgICAgICAgICAgICBmYWxzZUJsb2NrLT50cmF2ZXJzZShpdCk7Ci0gICAgICAg
ICAgICBpZiAodHJ1ZUJsb2NrKQotICAgICAgICAgICAgICAgIHRydWVCbG9jay0+dHJhdmVyc2Uo
aXQpOwotICAgICAgICAgICAgY29uZGl0aW9uLT50cmF2ZXJzZShpdCk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBjb25kaXRpb24tPnRyYXZlcnNlKGl0KTsKLSAgICAgICAgICAgIGlm
ICh0cnVlQmxvY2spCi0gICAgICAgICAgICAgICAgdHJ1ZUJsb2NrLT50cmF2ZXJzZShpdCk7Ci0g
ICAgICAgICAgICBpZiAoZmFsc2VCbG9jaykKLSAgICAgICAgICAgICAgICBmYWxzZUJsb2NrLT50
cmF2ZXJzZShpdCk7Ci0gICAgICAgIH0KLSAgICAgICAgaXQtPmRlY3JlbWVudERlcHRoKCk7Ci0g
ICAgfQotCi0gICAgaWYgKHZpc2l0ICYmIGl0LT5wb3N0VmlzaXQpCi0gICAgICAgIGl0LT52aXNp
dFNlbGVjdGlvbihQb3N0VmlzaXQsIHRoaXMpOwotfQotCi0vLwotLy8gVHJhdmVyc2UgYSBsb29w
IG5vZGUuICBTYW1lIGNvbW1lbnRzIGluIGJpbmFyeSBub2RlIGFwcGx5IGhlcmUuCi0vLwotdm9p
ZCBUSW50ZXJtTG9vcDo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciAqaXQpCi17Ci0gICAgYm9v
bCB2aXNpdCA9IHRydWU7Ci0KLSAgICBpZiAoaXQtPnByZVZpc2l0KQotICAgICAgICB2aXNpdCA9
IGl0LT52aXNpdExvb3AoUHJlVmlzaXQsIHRoaXMpOwotICAgIAotICAgIGlmICh2aXNpdCkKLSAg
ICB7Ci0gICAgICAgIGl0LT5pbmNyZW1lbnREZXB0aCh0aGlzKTsKLQotICAgICAgICBpZiAoaXQt
PnJpZ2h0VG9MZWZ0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZXhwcikKLSAgICAgICAg
ICAgICAgICBleHByLT50cmF2ZXJzZShpdCk7Ci0KLSAgICAgICAgICAgIGlmIChib2R5KQotICAg
ICAgICAgICAgICAgIGJvZHktPnRyYXZlcnNlKGl0KTsKLQotICAgICAgICAgICAgaWYgKGNvbmQp
Ci0gICAgICAgICAgICAgICAgY29uZC0+dHJhdmVyc2UoaXQpOwotCi0gICAgICAgICAgICBpZiAo
aW5pdCkKLSAgICAgICAgICAgICAgICBpbml0LT50cmF2ZXJzZShpdCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaW5pdCkKLSAgICAgICAgICAg
ICAgICBpbml0LT50cmF2ZXJzZShpdCk7Ci0KLSAgICAgICAgICAgIGlmIChjb25kKQotICAgICAg
ICAgICAgICAgIGNvbmQtPnRyYXZlcnNlKGl0KTsKLQotICAgICAgICAgICAgaWYgKGJvZHkpCi0g
ICAgICAgICAgICAgICAgYm9keS0+dHJhdmVyc2UoaXQpOwotCi0gICAgICAgICAgICBpZiAoZXhw
cikKLSAgICAgICAgICAgICAgICBleHByLT50cmF2ZXJzZShpdCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpdC0+ZGVjcmVtZW50RGVwdGgoKTsKLSAgICB9Ci0KLSAgICBpZiAodmlzaXQgJiYgaXQt
PnBvc3RWaXNpdCkKLSAgICAgICAgaXQtPnZpc2l0TG9vcChQb3N0VmlzaXQsIHRoaXMpOwotfQot
Ci0vLwotLy8gVHJhdmVyc2UgYSBicmFuY2ggbm9kZS4gIFNhbWUgY29tbWVudHMgaW4gYmluYXJ5
IG5vZGUgYXBwbHkgaGVyZS4KLS8vCi12b2lkIFRJbnRlcm1CcmFuY2g6OnRyYXZlcnNlKFRJbnRl
cm1UcmF2ZXJzZXIgKml0KQotewotICAgIGJvb2wgdmlzaXQgPSB0cnVlOwotCi0gICAgaWYgKGl0
LT5wcmVWaXNpdCkKLSAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRCcmFuY2goUHJlVmlzaXQsIHRo
aXMpOwotICAgIAotICAgIGlmICh2aXNpdCAmJiBleHByZXNzaW9uKSB7Ci0gICAgICAgIGl0LT5p
bmNyZW1lbnREZXB0aCh0aGlzKTsKLSAgICAgICAgZXhwcmVzc2lvbi0+dHJhdmVyc2UoaXQpOwot
ICAgICAgICBpdC0+ZGVjcmVtZW50RGVwdGgoKTsKLSAgICB9Ci0KLSAgICBpZiAodmlzaXQgJiYg
aXQtPnBvc3RWaXNpdCkKLSAgICAgICAgaXQtPnZpc2l0QnJhbmNoKFBvc3RWaXNpdCwgdGhpcyk7
Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9J
bnRlcm1lZGlhdGUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0lu
dGVybWVkaWF0ZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3ZTRlMzk1MTBl
MmI1NzI2OTAyYWM3MjFkM2IyYWQ1YWM4MjFjOTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0ludGVybWVkaWF0ZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNTAwICswLDAgQEAKLS8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KLS8vCi0KLS8vCi0vLyBCdWlsZCB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0
aW9uLgotLy8KLQotI2luY2x1ZGUgPGZsb2F0Lmg+Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5j
bHVkZSA8YWxnb3JpdGhtPgotCi0jaW5jbHVkZSAiY29tcGlsZXIvSGFzaE5hbWVzLmgiCi0jaW5j
bHVkZSAiY29tcGlsZXIvbG9jYWxpbnRlcm1lZGlhdGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9R
dWFsaWZpZXJBbGl2ZS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1JlbW92ZVRyZWUuaCIKLQotYm9v
bCBDb21wYXJlU3RydWN0dXJlKGNvbnN0IFRUeXBlJiBsZWZ0Tm9kZVR5cGUsIENvbnN0YW50VW5p
b24qIHJpZ2h0VW5pb25BcnJheSwgQ29uc3RhbnRVbmlvbiogbGVmdFVuaW9uQXJyYXkpOwotCi1z
dGF0aWMgVFByZWNpc2lvbiBHZXRIaWdoZXJQcmVjaXNpb24oVFByZWNpc2lvbiBsZWZ0LCBUUHJl
Y2lzaW9uIHJpZ2h0KQotewotICAgIHJldHVybiBsZWZ0ID4gcmlnaHQgPyBsZWZ0IDogcmlnaHQ7
Ci19Ci0KLWNvbnN0IGNoYXIqIGdldE9wZXJhdG9yU3RyaW5nKFRPcGVyYXRvciBvcCkKLXsKLSAg
ICBzd2l0Y2ggKG9wKSB7Ci0gICAgICBjYXNlIEVPcEluaXRpYWxpemU6IHJldHVybiAiPSI7Ci0g
ICAgICBjYXNlIEVPcEFzc2lnbjogcmV0dXJuICI9IjsKLSAgICAgIGNhc2UgRU9wQWRkQXNzaWdu
OiByZXR1cm4gIis9IjsKLSAgICAgIGNhc2UgRU9wU3ViQXNzaWduOiByZXR1cm4gIi09IjsKLSAg
ICAgIGNhc2UgRU9wRGl2QXNzaWduOiByZXR1cm4gIi89IjsKLQotICAgICAgLy8gRmFsbC10aHJv
dWdoLgotICAgICAgY2FzZSBFT3BNdWxBc3NpZ246IAotICAgICAgY2FzZSBFT3BWZWN0b3JUaW1l
c01hdHJpeEFzc2lnbjoKLSAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXJBc3NpZ246Ci0g
ICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOgotICAgICAgY2FzZSBFT3BNYXRy
aXhUaW1lc01hdHJpeEFzc2lnbjogcmV0dXJuICIqPSI7Ci0KLSAgICAgIC8vIEZhbGwtdGhyb3Vn
aC4KLSAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6Ci0gICAgICBjYXNlIEVPcEluZGV4SW5kaXJl
Y3Q6IHJldHVybiAiW10iOwotCi0gICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3RydWN0OiByZXR1
cm4gIi4iOwotICAgICAgY2FzZSBFT3BWZWN0b3JTd2l6emxlOiByZXR1cm4gIi4iOwotICAgICAg
Y2FzZSBFT3BBZGQ6IHJldHVybiAiKyI7Ci0gICAgICBjYXNlIEVPcFN1YjogcmV0dXJuICItIjsK
LSAgICAgIGNhc2UgRU9wTXVsOiByZXR1cm4gIioiOwotICAgICAgY2FzZSBFT3BEaXY6IHJldHVy
biAiLyI7Ci0gICAgICBjYXNlIEVPcE1vZDogVU5JTVBMRU1FTlRFRCgpOyBicmVhazsKLSAgICAg
IGNhc2UgRU9wRXF1YWw6IHJldHVybiAiPT0iOwotICAgICAgY2FzZSBFT3BOb3RFcXVhbDogcmV0
dXJuICIhPSI7Ci0gICAgICBjYXNlIEVPcExlc3NUaGFuOiByZXR1cm4gIjwiOwotICAgICAgY2Fz
ZSBFT3BHcmVhdGVyVGhhbjogcmV0dXJuICI+IjsKLSAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVh
bDogcmV0dXJuICI8PSI7Ci0gICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6IHJldHVybiAi
Pj0iOwotCi0gICAgICAvLyBGYWxsLXRocm91Z2guCi0gICAgICBjYXNlIEVPcFZlY3RvclRpbWVz
U2NhbGFyOgotICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeDoKLSAgICAgIGNhc2UgRU9w
TWF0cml4VGltZXNWZWN0b3I6Ci0gICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyOgotICAg
ICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeDogcmV0dXJuICIqIjsKLQotICAgICAgY2FzZSBF
T3BMb2dpY2FsT3I6IHJldHVybiAifHwiOwotICAgICAgY2FzZSBFT3BMb2dpY2FsWG9yOiByZXR1
cm4gIl5eIjsKLSAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDogcmV0dXJuICImJiI7Ci0gICAgICBj
YXNlIEVPcE5lZ2F0aXZlOiByZXR1cm4gIi0iOwotICAgICAgY2FzZSBFT3BWZWN0b3JMb2dpY2Fs
Tm90OiByZXR1cm4gIm5vdCI7Ci0gICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6IHJldHVybiAiISI7
Ci0gICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6IHJldHVybiAiKysiOwotICAgICAgY2FzZSBF
T3BQb3N0RGVjcmVtZW50OiByZXR1cm4gIi0tIjsKLSAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50
OiByZXR1cm4gIisrIjsKLSAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OiByZXR1cm4gIi0tIjsK
LQotICAgICAgLy8gRmFsbC10aHJvdWdoLgotICAgICAgY2FzZSBFT3BDb252SW50VG9Cb29sOgot
ICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0Jvb2w6IHJldHVybiAiYm9vbCI7Ci0gCi0gICAgICAv
LyBGYWxsLXRocm91Z2guCi0gICAgICBjYXNlIEVPcENvbnZCb29sVG9GbG9hdDoKLSAgICAgIGNh
c2UgRU9wQ29udkludFRvRmxvYXQ6IHJldHVybiAiZmxvYXQiOwotIAotICAgICAgLy8gRmFsbC10
aHJvdWdoLgotICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0ludDoKLSAgICAgIGNhc2UgRU9wQ29u
dkJvb2xUb0ludDogcmV0dXJuICJpbnQiOwotCi0gICAgICBjYXNlIEVPcFJhZGlhbnM6IHJldHVy
biAicmFkaWFucyI7Ci0gICAgICBjYXNlIEVPcERlZ3JlZXM6IHJldHVybiAiZGVncmVlcyI7Ci0g
ICAgICBjYXNlIEVPcFNpbjogcmV0dXJuICJzaW4iOwotICAgICAgY2FzZSBFT3BDb3M6IHJldHVy
biAiY29zIjsKLSAgICAgIGNhc2UgRU9wVGFuOiByZXR1cm4gInRhbiI7Ci0gICAgICBjYXNlIEVP
cEFzaW46IHJldHVybiAiYXNpbiI7Ci0gICAgICBjYXNlIEVPcEFjb3M6IHJldHVybiAiYWNvcyI7
Ci0gICAgICBjYXNlIEVPcEF0YW46IHJldHVybiAiYXRhbiI7Ci0gICAgICBjYXNlIEVPcEV4cDog
cmV0dXJuICJleHAiOwotICAgICAgY2FzZSBFT3BMb2c6IHJldHVybiAibG9nIjsKLSAgICAgIGNh
c2UgRU9wRXhwMjogcmV0dXJuICJleHAyIjsKLSAgICAgIGNhc2UgRU9wTG9nMjogcmV0dXJuICJs
b2cyIjsKLSAgICAgIGNhc2UgRU9wU3FydDogcmV0dXJuICJzcXJ0IjsKLSAgICAgIGNhc2UgRU9w
SW52ZXJzZVNxcnQ6IHJldHVybiAiaW52ZXJzZXNxcnQiOwotICAgICAgY2FzZSBFT3BBYnM6IHJl
dHVybiAiYWJzIjsKLSAgICAgIGNhc2UgRU9wU2lnbjogcmV0dXJuICJzaWduIjsKLSAgICAgIGNh
c2UgRU9wRmxvb3I6IHJldHVybiAiZmxvb3IiOwotICAgICAgY2FzZSBFT3BDZWlsOiByZXR1cm4g
ImNlaWwiOwotICAgICAgY2FzZSBFT3BGcmFjdDogcmV0dXJuICJmcmFjdCI7Ci0gICAgICBjYXNl
IEVPcExlbmd0aDogcmV0dXJuICJsZW5ndGgiOwotICAgICAgY2FzZSBFT3BOb3JtYWxpemU6IHJl
dHVybiAibm9ybWFsaXplIjsKLSAgICAgIGNhc2UgRU9wREZkeDogcmV0dXJuICJkRmR4IjsKLSAg
ICAgIGNhc2UgRU9wREZkeTogcmV0dXJuICJkRmR5IjsKLSAgICAgIGNhc2UgRU9wRndpZHRoOiBy
ZXR1cm4gImZ3aWR0aCI7Ci0gICAgICBjYXNlIEVPcEFueTogcmV0dXJuICJhbnkiOwotICAgICAg
Y2FzZSBFT3BBbGw6IHJldHVybiAiYWxsIjsKLQotICAgICAgZGVmYXVsdDogYnJlYWs7Ci0gICAg
fQotICAgIHJldHVybiAiIjsKLX0KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8KLS8vIEZpcnN0
IHNldCBvZiBmdW5jdGlvbnMgYXJlIHRvIGhlbHAgYnVpbGQgdGhlIGludGVybWVkaWF0ZSByZXBy
ZXNlbnRhdGlvbi4KLS8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IG1lbWJlciBmdW5jdGlvbnMg
b2YgdGhlIG5vZGVzLgotLy8gVGhleSBhcmUgY2FsbGVkIGZyb20gcGFyc2VyIHByb2R1Y3Rpb25z
LgotLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLS8vCi0vLyBBZGQgYSB0ZXJtaW5hbCBub2Rl
IGZvciBhbiBpZGVudGlmaWVyIGluIGFuIGV4cHJlc3Npb24uCi0vLwotLy8gUmV0dXJucyB0aGUg
YWRkZWQgbm9kZS4KLS8vCi1USW50ZXJtU3ltYm9sKiBUSW50ZXJtZWRpYXRlOjphZGRTeW1ib2wo
aW50IGlkLCBjb25zdCBUU3RyaW5nJiBuYW1lLCBjb25zdCBUVHlwZSYgdHlwZSwgY29uc3QgVFNv
dXJjZUxvYyYgbGluZSkKLXsKLSAgICBUSW50ZXJtU3ltYm9sKiBub2RlID0gbmV3IFRJbnRlcm1T
eW1ib2woaWQsIG5hbWUsIHR5cGUpOwotICAgIG5vZGUtPnNldExpbmUobGluZSk7Ci0KLSAgICBy
ZXR1cm4gbm9kZTsKLX0KLQotLy8KLS8vIENvbm5lY3QgdHdvIG5vZGVzIHdpdGggYSBuZXcgcGFy
ZW50IHRoYXQgZG9lcyBhIGJpbmFyeSBvcGVyYXRpb24gb24gdGhlIG5vZGVzLgotLy8KLS8vIFJl
dHVybnMgdGhlIGFkZGVkIG5vZGUuCi0vLwotVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjph
ZGRCaW5hcnlNYXRoKFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBsZWZ0LCBUSW50ZXJtVHlw
ZWQqIHJpZ2h0LCBjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3ltYm9sVGFibGUmIHN5bWJvbFRh
YmxlKQotewotICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBFT3BFcXVhbDoKLSAgICAg
ICAgY2FzZSBFT3BOb3RFcXVhbDoKLSAgICAgICAgICAgIGlmIChsZWZ0LT5pc0FycmF5KCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBFT3BMZXNzVGhhbjoKLSAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjoKLSAgICAgICAgY2Fz
ZSBFT3BMZXNzVGhhbkVxdWFsOgotICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6Ci0g
ICAgICAgICAgICBpZiAobGVmdC0+aXNNYXRyaXgoKSB8fCBsZWZ0LT5pc0FycmF5KCkgfHwgbGVm
dC0+aXNWZWN0b3IoKSB8fCBsZWZ0LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjoKLSAgICAgICAgY2FzZSBFT3BMb2dpY2FsWG9y
OgotICAgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6Ci0gICAgICAgICAgICBpZiAobGVmdC0+Z2V0
QmFzaWNUeXBlKCkgIT0gRWJ0Qm9vbCB8fCBsZWZ0LT5pc01hdHJpeCgpIHx8IGxlZnQtPmlzQXJy
YXkoKSB8fCBsZWZ0LT5pc1ZlY3RvcigpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BBZGQ6Ci0g
ICAgICAgIGNhc2UgRU9wU3ViOgotICAgICAgICBjYXNlIEVPcERpdjoKLSAgICAgICAgY2FzZSBF
T3BNdWw6Ci0gICAgICAgICAgICBpZiAobGVmdC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0
IHx8IGxlZnQtPmdldEJhc2ljVHlwZSgpID09IEVidEJvb2wpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIGRlZmF1bHQ6IGJyZWFrOwotICAgIH0KLQotICAgIC8vCi0gICAgLy8g
Rmlyc3QgdHJ5IGNvbnZlcnRpbmcgdGhlIGNoaWxkcmVuIHRvIGNvbXBhdGlibGUgdHlwZXMuCi0g
ICAgLy8KLSAgICBpZiAobGVmdC0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpICYmIHJpZ2h0LT5nZXRU
eXBlKCkuZ2V0U3RydWN0KCkpIHsKLSAgICAgICAgaWYgKGxlZnQtPmdldFR5cGUoKSAhPSByaWdo
dC0+Z2V0VHlwZSgpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgVEludGVybVR5cGVkKiBjaGlsZCA9IGFkZENvbnZlcnNpb24ob3AsIGxlZnQtPmdldFR5cGUo
KSwgcmlnaHQpOwotICAgICAgICBpZiAoY2hpbGQpCi0gICAgICAgICAgICByaWdodCA9IGNoaWxk
OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNoaWxkID0gYWRkQ29udmVyc2lvbihvcCwg
cmlnaHQtPmdldFR5cGUoKSwgbGVmdCk7Ci0gICAgICAgICAgICBpZiAoY2hpbGQpCi0gICAgICAg
ICAgICAgICAgbGVmdCA9IGNoaWxkOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBOZWVkIGEgbmV3
IG5vZGUgaG9sZGluZyB0aGluZ3MgdG9nZXRoZXIgdGhlbi4gIE1ha2UKLSAgICAvLyBvbmUgYW5k
IHByb21vdGUgaXQgdG8gdGhlIHJpZ2h0IHR5cGUuCi0gICAgLy8KLSAgICBUSW50ZXJtQmluYXJ5
KiBub2RlID0gbmV3IFRJbnRlcm1CaW5hcnkob3ApOwotICAgIG5vZGUtPnNldExpbmUobGluZSk7
Ci0KLSAgICBub2RlLT5zZXRMZWZ0KGxlZnQpOwotICAgIG5vZGUtPnNldFJpZ2h0KHJpZ2h0KTsK
LSAgICBpZiAoIW5vZGUtPnByb21vdGUoaW5mb1NpbmspKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIC8vCi0gICAgLy8gU2VlIGlmIHdlIGNhbiBmb2xkIGNvbnN0YW50cy4KLSAgICAvLwotICAg
IFRJbnRlcm1UeXBlZCogdHlwZWRSZXR1cm5Ob2RlID0gMDsKLSAgICBUSW50ZXJtQ29uc3RhbnRV
bmlvbiAqbGVmdFRlbXBDb25zdGFudCA9IGxlZnQtPmdldEFzQ29uc3RhbnRVbmlvbigpOwotICAg
IFRJbnRlcm1Db25zdGFudFVuaW9uICpyaWdodFRlbXBDb25zdGFudCA9IHJpZ2h0LT5nZXRBc0Nv
bnN0YW50VW5pb24oKTsKLSAgICBpZiAobGVmdFRlbXBDb25zdGFudCAmJiByaWdodFRlbXBDb25z
dGFudCkgewotICAgICAgICB0eXBlZFJldHVybk5vZGUgPSBsZWZ0VGVtcENvbnN0YW50LT5mb2xk
KG5vZGUtPmdldE9wKCksIHJpZ2h0VGVtcENvbnN0YW50LCBpbmZvU2luayk7Ci0KLSAgICAgICAg
aWYgKHR5cGVkUmV0dXJuTm9kZSkKLSAgICAgICAgICAgIHJldHVybiB0eXBlZFJldHVybk5vZGU7
Ci0gICAgfQotCi0gICAgcmV0dXJuIG5vZGU7Ci19Ci0KLS8vCi0vLyBDb25uZWN0IHR3byBub2Rl
cyB0aHJvdWdoIGFuIGFzc2lnbm1lbnQuCi0vLwotLy8gUmV0dXJucyB0aGUgYWRkZWQgbm9kZS4K
LS8vCi1USW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZEFzc2lnbihUT3BlcmF0b3Igb3As
IFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdodCwgY29uc3QgVFNvdXJjZUxv
YyYgbGluZSkKLXsKLSAgICAvLwotICAgIC8vIExpa2UgYWRkaW5nIGJpbmFyeSBtYXRoLCBleGNl
cHQgdGhlIGNvbnZlcnNpb24gY2FuIG9ubHkgZ28KLSAgICAvLyBmcm9tIHJpZ2h0IHRvIGxlZnQu
Ci0gICAgLy8KLSAgICBUSW50ZXJtQmluYXJ5KiBub2RlID0gbmV3IFRJbnRlcm1CaW5hcnkob3Ap
OwotICAgIG5vZGUtPnNldExpbmUobGluZSk7Ci0KLSAgICBUSW50ZXJtVHlwZWQqIGNoaWxkID0g
YWRkQ29udmVyc2lvbihvcCwgbGVmdC0+Z2V0VHlwZSgpLCByaWdodCk7Ci0gICAgaWYgKGNoaWxk
ID09IDApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgbm9kZS0+c2V0TGVmdChsZWZ0KTsKLSAg
ICBub2RlLT5zZXRSaWdodChjaGlsZCk7Ci0gICAgaWYgKCEgbm9kZS0+cHJvbW90ZShpbmZvU2lu
aykpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG5vZGU7Ci19Ci0KLS8vCi0vLyBD
b25uZWN0IHR3byBub2RlcyB0aHJvdWdoIGFuIGluZGV4IG9wZXJhdG9yLCB3aGVyZSB0aGUgbGVm
dCBub2RlIGlzIHRoZSBiYXNlCi0vLyBvZiBhbiBhcnJheSBvciBzdHJ1Y3QsIGFuZCB0aGUgcmln
aHQgbm9kZSBpcyBhIGRpcmVjdCBvciBpbmRpcmVjdCBvZmZzZXQuCi0vLwotLy8gUmV0dXJucyB0
aGUgYWRkZWQgbm9kZS4KLS8vIFRoZSBjYWxsZXIgc2hvdWxkIHNldCB0aGUgdHlwZSBvZiB0aGUg
cmV0dXJuZWQgbm9kZS4KLS8vCi1USW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZEluZGV4
KFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBiYXNlLCBUSW50ZXJtVHlwZWQqIGluZGV4LCBj
b25zdCBUU291cmNlTG9jJiBsaW5lKQotewotICAgIFRJbnRlcm1CaW5hcnkqIG5vZGUgPSBuZXcg
VEludGVybUJpbmFyeShvcCk7Ci0gICAgbm9kZS0+c2V0TGluZShsaW5lKTsKLSAgICBub2RlLT5z
ZXRMZWZ0KGJhc2UpOwotICAgIG5vZGUtPnNldFJpZ2h0KGluZGV4KTsKLQotICAgIC8vIGNhbGxl
ciBzaG91bGQgc2V0IHRoZSB0eXBlCi0KLSAgICByZXR1cm4gbm9kZTsKLX0KLQotLy8KLS8vIEFk
ZCBvbmUgbm9kZSBhcyB0aGUgcGFyZW50IG9mIGFub3RoZXIgdGhhdCBpdCBvcGVyYXRlcyBvbi4K
LS8vCi0vLyBSZXR1cm5zIHRoZSBhZGRlZCBub2RlLgotLy8KLVRJbnRlcm1UeXBlZCogVEludGVy
bWVkaWF0ZTo6YWRkVW5hcnlNYXRoKFRPcGVyYXRvciBvcCwgVEludGVybU5vZGUqIGNoaWxkTm9k
ZSwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKLXsK
LSAgICBUSW50ZXJtVW5hcnkqIG5vZGU7Ci0gICAgVEludGVybVR5cGVkKiBjaGlsZCA9IGNoaWxk
Tm9kZS0+Z2V0QXNUeXBlZCgpOwotCi0gICAgaWYgKGNoaWxkID09IDApIHsKLSAgICAgICAgaW5m
b1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBsaW5lLCAiQmFkIHR5cGUg
aW4gQWRkVW5hcnlNYXRoIik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHN3aXRj
aCAob3ApIHsKLSAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OgotICAgICAgICAgICAgaWYgKGNo
aWxkLT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0Qm9vbCB8fCBjaGlsZC0+Z2V0VHlw
ZSgpLmlzTWF0cml4KCkgfHwgY2hpbGQtPmdldFR5cGUoKS5pc0FycmF5KCkgfHwgY2hpbGQtPmdl
dFR5cGUoKS5pc1ZlY3RvcigpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1l
bnQ6Ci0gICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OgotICAgICAgICBjYXNlIEVPcFBvc3RE
ZWNyZW1lbnQ6Ci0gICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OgotICAgICAgICBjYXNlIEVP
cE5lZ2F0aXZlOgotICAgICAgICAgICAgaWYgKGNoaWxkLT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBl
KCkgPT0gRWJ0U3RydWN0IHx8IGNoaWxkLT5nZXRUeXBlKCkuaXNBcnJheSgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICBkZWZhdWx0OiBicmVhazsKLSAgICB9Ci0KLSAgICAv
LwotICAgIC8vIERvIHdlIG5lZWQgdG8gcHJvbW90ZSB0aGUgb3BlcmFuZD8KLSAgICAvLwotICAg
IC8vIE5vdGU6IEltcGxpY2l0IHByb21vdGlvbnMgd2VyZSByZW1vdmVkIGZyb20gdGhlIGxhbmd1
YWdlLgotICAgIC8vCi0gICAgVEJhc2ljVHlwZSBuZXdUeXBlID0gRWJ0Vm9pZDsKLSAgICBzd2l0
Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OiAgIG5ld1R5cGUgPSBFYnRJ
bnQ7ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDogIG5ld1R5cGUgPSBF
YnRCb29sOyAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6IG5ld1R5cGUg
PSBFYnRGbG9hdDsgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6IGJyZWFrOwotICAgIH0KLQotICAg
IGlmIChuZXdUeXBlICE9IEVidFZvaWQpIHsKLSAgICAgICAgY2hpbGQgPSBhZGRDb252ZXJzaW9u
KG9wLCBUVHlwZShuZXdUeXBlLCBjaGlsZC0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwK
LSAgICAgICAgICAgIGNoaWxkLT5nZXROb21pbmFsU2l6ZSgpLAotICAgICAgICAgICAgY2hpbGQt
PmlzTWF0cml4KCksCi0gICAgICAgICAgICBjaGlsZC0+aXNBcnJheSgpKSwKLSAgICAgICAgICAg
IGNoaWxkKTsKLSAgICAgICAgaWYgKGNoaWxkID09IDApCi0gICAgICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0KLSAgICAvLwotICAgIC8vIEZvciBjb25zdHJ1Y3RvcnMsIHdlIGFyZSBub3cgZG9u
ZSwgaXQncyBhbGwgaW4gdGhlIGNvbnZlcnNpb24uCi0gICAgLy8KLSAgICBzd2l0Y2ggKG9wKSB7
Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OgotICAgICAgICBjYXNlIEVPcENvbnN0cnVj
dEJvb2w6Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6Ci0gICAgICAgICAgICByZXR1
cm4gY2hpbGQ7Ci0gICAgICAgIGRlZmF1bHQ6IGJyZWFrOwotICAgIH0KLQotICAgIFRJbnRlcm1D
b25zdGFudFVuaW9uICpjaGlsZFRlbXBDb25zdGFudCA9IDA7Ci0gICAgaWYgKGNoaWxkLT5nZXRB
c0NvbnN0YW50VW5pb24oKSkKLSAgICAgICAgY2hpbGRUZW1wQ29uc3RhbnQgPSBjaGlsZC0+Z2V0
QXNDb25zdGFudFVuaW9uKCk7Ci0KLSAgICAvLwotICAgIC8vIE1ha2UgYSBuZXcgbm9kZSBmb3Ig
dGhlIG9wZXJhdG9yLgotICAgIC8vCi0gICAgbm9kZSA9IG5ldyBUSW50ZXJtVW5hcnkob3ApOwot
ICAgIG5vZGUtPnNldExpbmUobGluZSk7Ci0gICAgbm9kZS0+c2V0T3BlcmFuZChjaGlsZCk7Ci0K
LSAgICBpZiAoISBub2RlLT5wcm9tb3RlKGluZm9TaW5rKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBpZiAoY2hpbGRUZW1wQ29uc3RhbnQpICB7Ci0gICAgICAgIFRJbnRlcm1UeXBlZCogbmV3
Q2hpbGQgPSBjaGlsZFRlbXBDb25zdGFudC0+Zm9sZChvcCwgMCwgaW5mb1NpbmspOwotCi0gICAg
ICAgIGlmIChuZXdDaGlsZCkKLSAgICAgICAgICAgIHJldHVybiBuZXdDaGlsZDsKLSAgICB9Ci0K
LSAgICByZXR1cm4gbm9kZTsKLX0KLQotLy8KLS8vIFRoaXMgaXMgdGhlIHNhZmUgd2F5IHRvIGNo
YW5nZSB0aGUgb3BlcmF0b3Igb24gYW4gYWdncmVnYXRlLCBhcyBpdAotLy8gZG9lcyBsb3RzIG9m
IGVycm9yIGNoZWNraW5nIGFuZCBmaXhpbmcuICBFc3BlY2lhbGx5IGZvciBlc3RhYmxpc2hpbmcK
LS8vIGEgZnVuY3Rpb24gY2FsbCdzIG9wZXJhdGlvbiBvbiBpdCdzIHNldCBvZiBwYXJhbWV0ZXJz
LiAgU2VxdWVuY2VzCi0vLyBvZiBpbnN0cnVjdGlvbnMgYXJlIGFsc28gYWdncmVnYXRlcywgYnV0
IHRoZXkganVzdCBkaXJlbmN0bHkgc2V0Ci0vLyB0aGVpciBvcGVyYXRvciB0byBFT3BTZXF1ZW5j
ZS4KLS8vCi0vLyBSZXR1cm5zIGFuIGFnZ3JlZ2F0ZSBub2RlLCB3aGljaCBjb3VsZCBiZSB0aGUg
b25lIHBhc3NlZCBpbiBpZgotLy8gaXQgd2FzIGFscmVhZHkgYW4gYWdncmVnYXRlIGJ1dCBubyBv
cGVyYXRvciB3YXMgc2V0LgotLy8KLVRJbnRlcm1BZ2dyZWdhdGUqIFRJbnRlcm1lZGlhdGU6OnNl
dEFnZ3JlZ2F0ZU9wZXJhdG9yKFRJbnRlcm1Ob2RlKiBub2RlLCBUT3BlcmF0b3Igb3AsIGNvbnN0
IFRTb3VyY2VMb2MmIGxpbmUpCi17Ci0gICAgVEludGVybUFnZ3JlZ2F0ZSogYWdnTm9kZTsKLQot
ICAgIC8vCi0gICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYW4gYWdncmVnYXRlLiAgSWYgbm90IHR1
cm4gaXQgaW50byBvbmUuCi0gICAgLy8KLSAgICBpZiAobm9kZSkgewotICAgICAgICBhZ2dOb2Rl
ID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsKLSAgICAgICAgaWYgKGFnZ05vZGUgPT0gMCB8fCBh
Z2dOb2RlLT5nZXRPcCgpICE9IEVPcE51bGwpIHsKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAg
ICAvLyBNYWtlIGFuIGFnZ3JlZ2F0ZSBjb250YWluaW5nIHRoaXMgbm9kZS4KLSAgICAgICAgICAg
IC8vCi0gICAgICAgICAgICBhZ2dOb2RlID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGUoKTsKLSAgICAg
ICAgICAgIGFnZ05vZGUtPmdldFNlcXVlbmNlKCkucHVzaF9iYWNrKG5vZGUpOwotICAgICAgICB9
Ci0gICAgfSBlbHNlCi0gICAgICAgIGFnZ05vZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZSgpOwot
Ci0gICAgLy8KLSAgICAvLyBTZXQgdGhlIG9wZXJhdG9yLgotICAgIC8vCi0gICAgYWdnTm9kZS0+
c2V0T3Aob3ApOwotICAgIGFnZ05vZGUtPnNldExpbmUobGluZSk7Ci0KLSAgICByZXR1cm4gYWdn
Tm9kZTsKLX0KLQotLy8KLS8vIENvbnZlcnQgb25lIHR5cGUgdG8gYW5vdGhlci4KLS8vCi0vLyBS
ZXR1cm5zIHRoZSBub2RlIHJlcHJlc2VudGluZyB0aGUgY29udmVyc2lvbiwgd2hpY2ggY291bGQg
YmUgdGhlIHNhbWUKLS8vIG5vZGUgcGFzc2VkIGluIGlmIG5vIGNvbnZlcnNpb24gd2FzIG5lZWRl
ZC4KLS8vCi0vLyBSZXR1cm4gMCBpZiBhIGNvbnZlcnNpb24gY2FuJ3QgYmUgZG9uZS4KLS8vCi1U
SW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZENvbnZlcnNpb24oVE9wZXJhdG9yIG9wLCBj
b25zdCBUVHlwZSYgdHlwZSwgVEludGVybVR5cGVkKiBub2RlKQotewotICAgIC8vCi0gICAgLy8g
RG9lcyB0aGUgYmFzZSB0eXBlIGFsbG93IG9wZXJhdGlvbj8KLSAgICAvLwotICAgIHN3aXRjaCAo
bm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgY2FzZSBFYnRWb2lkOgotICAgICAgICBj
YXNlIEVidFNhbXBsZXIyRDoKLSAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKLSAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICBkZWZhdWx0OiBicmVhazsKLSAgICB9Ci0KLSAgICAvLwot
ICAgIC8vIE90aGVyd2lzZSwgaWYgdHlwZXMgYXJlIGlkZW50aWNhbCwgbm8gcHJvYmxlbQotICAg
IC8vCi0gICAgaWYgKHR5cGUgPT0gbm9kZS0+Z2V0VHlwZSgpKQotICAgICAgICByZXR1cm4gbm9k
ZTsKLQotICAgIC8vCi0gICAgLy8gSWYgb25lJ3MgYSBzdHJ1Y3R1cmUsIHRoZW4gbm8gY29udmVy
c2lvbnMuCi0gICAgLy8KLSAgICBpZiAodHlwZS5nZXRTdHJ1Y3QoKSB8fCBub2RlLT5nZXRUeXBl
KCkuZ2V0U3RydWN0KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8KLSAgICAvLyBJZiBv
bmUncyBhbiBhcnJheSwgdGhlbiBubyBjb252ZXJzaW9ucy4KLSAgICAvLwotICAgIGlmICh0eXBl
LmlzQXJyYXkoKSB8fCBub2RlLT5nZXRUeXBlKCkuaXNBcnJheSgpKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIFRCYXNpY1R5cGUgcHJvbW90ZVRvOwotCi0gICAgc3dpdGNoIChvcCkgewotICAg
ICAgICAvLwotICAgICAgICAvLyBFeHBsaWNpdCBjb252ZXJzaW9ucwotICAgICAgICAvLwotICAg
ICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6Ci0gICAgICAgICAgICBwcm9tb3RlVG8gPSBFYnRC
b29sOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6
Ci0gICAgICAgICAgICBwcm9tb3RlVG8gPSBFYnRGbG9hdDsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDoKLSAgICAgICAgICAgIHByb21vdGVUbyA9IEVi
dEludDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
Ly8KLSAgICAgICAgICAgIC8vIGltcGxpY2l0IGNvbnZlcnNpb25zIHdlcmUgcmVtb3ZlZCBmcm9t
IHRoZSBsYW5ndWFnZS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBpZiAodHlwZS5nZXRC
YXNpY1R5cGUoKSAhPSBub2RlLT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gU2l6ZSBhbmQg
c3RydWN0dXJlIGNvdWxkIHN0aWxsIGRpZmZlciwgYnV0IHRoYXQncwotICAgICAgICAgICAgLy8g
aGFuZGxlZCBieSBvcGVyYXRvciBwcm9tb3Rpb24uCi0gICAgICAgICAgICAvLwotICAgICAgICAg
ICAgcmV0dXJuIG5vZGU7Ci0gICAgfQotCi0gICAgaWYgKG5vZGUtPmdldEFzQ29uc3RhbnRVbmlv
bigpKSB7Ci0KLSAgICAgICAgcmV0dXJuIChwcm9tb3RlQ29uc3RhbnRVbmlvbihwcm9tb3RlVG8s
IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpKSk7Ci0gICAgfSBlbHNlIHsKLQotICAgICAgICAv
LwotICAgICAgICAvLyBBZGQgYSBuZXcgbmV3Tm9kZSBmb3IgdGhlIGNvbnZlcnNpb24uCi0gICAg
ICAgIC8vCi0gICAgICAgIFRJbnRlcm1VbmFyeSogbmV3Tm9kZSA9IDA7Ci0KLSAgICAgICAgVE9w
ZXJhdG9yIG5ld09wID0gRU9wTnVsbDsKLSAgICAgICAgc3dpdGNoIChwcm9tb3RlVG8pIHsKLSAg
ICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5n
ZXRCYXNpY1R5cGUoKSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDogICBuZXdP
cCA9IEVPcENvbnZJbnRUb0Zsb2F0OyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
RWJ0Qm9vbDogIG5ld09wID0gRU9wQ29udkJvb2xUb0Zsb2F0OyBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8u
bWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQmFkIHByb21v
dGlvbiBub2RlIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVidEJv
b2w6Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRCYXNpY1R5cGUoKSkgewotICAg
ICAgICAgICAgICAgICAgICBjYXNlIEVidEludDogICBuZXdPcCA9IEVPcENvbnZJbnRUb0Jvb2w7
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IG5ld09wID0gRU9w
Q29udkZsb2F0VG9Cb29sOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJu
YWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQmFkIHByb21vdGlvbiBub2RlIik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVidEludDoKLSAgICAgICAgICAgICAgICBz
d2l0Y2ggKG5vZGUtPmdldEJhc2ljVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
RWJ0Qm9vbDogICBuZXdPcCA9IEVPcENvbnZCb29sVG9JbnQ7ICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBFYnRGbG9hdDogIG5ld09wID0gRU9wQ29udkZsb2F0VG9JbnQ7IGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAg
aW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRMaW5l
KCksICJCYWQgcHJvbW90aW9uIG5vZGUiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVm
aXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRMaW5lKCksICJCYWQgcHJvbW90aW9uIHR5cGUiKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIFRUeXBlIHR5
cGUocHJvbW90ZVRvLCBub2RlLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCBub2RlLT5n
ZXROb21pbmFsU2l6ZSgpLCBub2RlLT5pc01hdHJpeCgpLCBub2RlLT5pc0FycmF5KCkpOwotICAg
ICAgICBuZXdOb2RlID0gbmV3IFRJbnRlcm1VbmFyeShuZXdPcCwgdHlwZSk7Ci0gICAgICAgIG5l
d05vZGUtPnNldExpbmUobm9kZS0+Z2V0TGluZSgpKTsKLSAgICAgICAgbmV3Tm9kZS0+c2V0T3Bl
cmFuZChub2RlKTsKLQotICAgICAgICByZXR1cm4gbmV3Tm9kZTsKLSAgICB9Ci19Ci0KLS8vCi0v
LyBTYWZlIHdheSB0byBjb21iaW5lIHR3byBub2RlcyBpbnRvIGFuIGFnZ3JlZ2F0ZS4gIFdvcmtz
IHdpdGggbnVsbCBwb2ludGVycywKLS8vIGEgbm9kZSB0aGF0J3Mgbm90IGEgYWdncmVnYXRlIHll
dCwgZXRjLgotLy8KLS8vIFJldHVybnMgdGhlIHJlc3VsdGluZyBhZ2dyZWdhdGUsIHVubGVzcyAw
IHdhcyBwYXNzZWQgaW4gZm9yCi0vLyBib3RoIGV4aXN0aW5nIG5vZGVzLgotLy8KLVRJbnRlcm1B
Z2dyZWdhdGUqIFRJbnRlcm1lZGlhdGU6Omdyb3dBZ2dyZWdhdGUoVEludGVybU5vZGUqIGxlZnQs
IFRJbnRlcm1Ob2RlKiByaWdodCwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKLXsKLSAgICBpZiAo
bGVmdCA9PSAwICYmIHJpZ2h0ID09IDApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgVEludGVy
bUFnZ3JlZ2F0ZSogYWdnTm9kZSA9IDA7Ci0gICAgaWYgKGxlZnQpCi0gICAgICAgIGFnZ05vZGUg
PSBsZWZ0LT5nZXRBc0FnZ3JlZ2F0ZSgpOwotICAgIGlmICghYWdnTm9kZSB8fCBhZ2dOb2RlLT5n
ZXRPcCgpICE9IEVPcE51bGwpIHsKLSAgICAgICAgYWdnTm9kZSA9IG5ldyBUSW50ZXJtQWdncmVn
YXRlOwotICAgICAgICBpZiAobGVmdCkKLSAgICAgICAgICAgIGFnZ05vZGUtPmdldFNlcXVlbmNl
KCkucHVzaF9iYWNrKGxlZnQpOwotICAgIH0KLQotICAgIGlmIChyaWdodCkKLSAgICAgICAgYWdn
Tm9kZS0+Z2V0U2VxdWVuY2UoKS5wdXNoX2JhY2socmlnaHQpOwotCi0gICAgYWdnTm9kZS0+c2V0
TGluZShsaW5lKTsKLQotICAgIHJldHVybiBhZ2dOb2RlOwotfQotCi0vLwotLy8gVHVybiBhbiBl
eGlzdGluZyBub2RlIGludG8gYW4gYWdncmVnYXRlLgotLy8KLS8vIFJldHVybnMgYW4gYWdncmVn
YXRlLCB1bmxlc3MgMCB3YXMgcGFzc2VkIGluIGZvciB0aGUgZXhpc3Rpbmcgbm9kZS4KLS8vCi1U
SW50ZXJtQWdncmVnYXRlKiBUSW50ZXJtZWRpYXRlOjptYWtlQWdncmVnYXRlKFRJbnRlcm1Ob2Rl
KiBub2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQotewotICAgIGlmIChub2RlID09IDApCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgVEludGVybUFnZ3JlZ2F0ZSogYWdnTm9kZSA9IG5ldyBU
SW50ZXJtQWdncmVnYXRlOwotICAgIGFnZ05vZGUtPmdldFNlcXVlbmNlKCkucHVzaF9iYWNrKG5v
ZGUpOwotICAgIGFnZ05vZGUtPnNldExpbmUobGluZSk7Ci0KLSAgICByZXR1cm4gYWdnTm9kZTsK
LX0KLQotLy8KLS8vIEZvciAiaWYiIHRlc3Qgbm9kZXMuICBUaGVyZSBhcmUgdGhyZWUgY2hpbGRy
ZW47IGEgY29uZGl0aW9uLAotLy8gYSB0cnVlIHBhdGgsIGFuZCBhIGZhbHNlIHBhdGguICBUaGUg
dHdvIHBhdGhzIGFyZSBpbiB0aGUKLS8vIG5vZGVQYWlyLgotLy8KLS8vIFJldHVybnMgdGhlIHNl
bGVjdGlvbiBub2RlIGNyZWF0ZWQuCi0vLwotVEludGVybU5vZGUqIFRJbnRlcm1lZGlhdGU6OmFk
ZFNlbGVjdGlvbihUSW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1Ob2RlUGFpciBub2RlUGFpciwg
Y29uc3QgVFNvdXJjZUxvYyYgbGluZSkKLXsKLSAgICAvLwotICAgIC8vIEZvciBjb21waWxlIHRp
bWUgY29uc3RhbnQgc2VsZWN0aW9ucywgcHJ1bmUgdGhlIGNvZGUgYW5kCi0gICAgLy8gdGVzdCBu
b3cuCi0gICAgLy8KLQotICAgIGlmIChjb25kLT5nZXRBc1R5cGVkKCkgJiYgY29uZC0+Z2V0QXNU
eXBlZCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKSkgewotICAgICAgICBpZiAoY29uZC0+Z2V0QXND
b25zdGFudFVuaW9uKCktPmdldEJDb25zdCgwKSA9PSB0cnVlKQotICAgICAgICAgICAgcmV0dXJu
IG5vZGVQYWlyLm5vZGUxID8gc2V0QWdncmVnYXRlT3BlcmF0b3Iobm9kZVBhaXIubm9kZTEsIEVP
cFNlcXVlbmNlLCBub2RlUGFpci5ub2RlMS0+Z2V0TGluZSgpKSA6IE5VTEw7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHJldHVybiBub2RlUGFpci5ub2RlMiA/IHNldEFnZ3JlZ2F0ZU9wZXJh
dG9yKG5vZGVQYWlyLm5vZGUyLCBFT3BTZXF1ZW5jZSwgbm9kZVBhaXIubm9kZTItPmdldExpbmUo
KSkgOiBOVUxMOwotICAgIH0KLQotICAgIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUgPSBuZXcgVElu
dGVybVNlbGVjdGlvbihjb25kLCBub2RlUGFpci5ub2RlMSwgbm9kZVBhaXIubm9kZTIpOwotICAg
IG5vZGUtPnNldExpbmUobGluZSk7Ci0KLSAgICByZXR1cm4gbm9kZTsKLX0KLQotCi1USW50ZXJt
VHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZENvbW1hKFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVy
bVR5cGVkKiByaWdodCwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKLXsKLSAgICBpZiAobGVmdC0+
Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0ICYmIHJpZ2h0LT5nZXRUeXBlKCku
Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsKLSAgICAgICAgcmV0dXJuIHJpZ2h0OwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIFRJbnRlcm1UeXBlZCAqY29tbWFBZ2dyZWdhdGUgPSBncm93QWdn
cmVnYXRlKGxlZnQsIHJpZ2h0LCBsaW5lKTsKLSAgICAgICAgY29tbWFBZ2dyZWdhdGUtPmdldEFz
QWdncmVnYXRlKCktPnNldE9wKEVPcENvbW1hKTsKLSAgICAgICAgY29tbWFBZ2dyZWdhdGUtPnNl
dFR5cGUocmlnaHQtPmdldFR5cGUoKSk7Ci0gICAgICAgIGNvbW1hQWdncmVnYXRlLT5nZXRUeXBl
UG9pbnRlcigpLT5zZXRRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKLSAgICAgICAgcmV0dXJuIGNv
bW1hQWdncmVnYXRlOwotICAgIH0KLX0KLQotLy8KLS8vIEZvciAiPzoiIHRlc3Qgbm9kZXMuICBU
aGVyZSBhcmUgdGhyZWUgY2hpbGRyZW47IGEgY29uZGl0aW9uLAotLy8gYSB0cnVlIHBhdGgsIGFu
ZCBhIGZhbHNlIHBhdGguICBUaGUgdHdvIHBhdGhzIGFyZSBzcGVjaWZpZWQKLS8vIGFzIHNlcGFy
YXRlIHBhcmFtZXRlcnMuCi0vLwotLy8gUmV0dXJucyB0aGUgc2VsZWN0aW9uIG5vZGUgY3JlYXRl
ZCwgb3IgMCBpZiBvbmUgY291bGQgbm90IGJlLgotLy8KLVRJbnRlcm1UeXBlZCogVEludGVybWVk
aWF0ZTo6YWRkU2VsZWN0aW9uKFRJbnRlcm1UeXBlZCogY29uZCwgVEludGVybVR5cGVkKiB0cnVl
QmxvY2ssIFRJbnRlcm1UeXBlZCogZmFsc2VCbG9jaywgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkK
LXsKLSAgICAvLwotICAgIC8vIEdldCBjb21wYXRpYmxlIHR5cGVzLgotICAgIC8vCi0gICAgVElu
dGVybVR5cGVkKiBjaGlsZCA9IGFkZENvbnZlcnNpb24oRU9wU2VxdWVuY2UsIHRydWVCbG9jay0+
Z2V0VHlwZSgpLCBmYWxzZUJsb2NrKTsKLSAgICBpZiAoY2hpbGQpCi0gICAgICAgIGZhbHNlQmxv
Y2sgPSBjaGlsZDsKLSAgICBlbHNlIHsKLSAgICAgICAgY2hpbGQgPSBhZGRDb252ZXJzaW9uKEVP
cFNlcXVlbmNlLCBmYWxzZUJsb2NrLT5nZXRUeXBlKCksIHRydWVCbG9jayk7Ci0gICAgICAgIGlm
IChjaGlsZCkKLSAgICAgICAgICAgIHRydWVCbG9jayA9IGNoaWxkOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIFNlZSBpZiBhbGwg
dGhlIG9wZXJhbmRzIGFyZSBjb25zdGFudCwgdGhlbiBmb2xkIGl0IG90aGVyd2lzZSBub3QuCi0g
ICAgLy8KLQotICAgIGlmIChjb25kLT5nZXRBc0NvbnN0YW50VW5pb24oKSAmJiB0cnVlQmxvY2st
PmdldEFzQ29uc3RhbnRVbmlvbigpICYmIGZhbHNlQmxvY2stPmdldEFzQ29uc3RhbnRVbmlvbigp
KSB7Ci0gICAgICAgIGlmIChjb25kLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0QkNvbnN0KDAp
KQotICAgICAgICAgICAgcmV0dXJuIHRydWVCbG9jazsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlQmxvY2s7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBNYWtlIGEgc2Vs
ZWN0aW9uIG5vZGUuCi0gICAgLy8KLSAgICBUSW50ZXJtU2VsZWN0aW9uKiBub2RlID0gbmV3IFRJ
bnRlcm1TZWxlY3Rpb24oY29uZCwgdHJ1ZUJsb2NrLCBmYWxzZUJsb2NrLCB0cnVlQmxvY2stPmdl
dFR5cGUoKSk7Ci0gICAgbm9kZS0+Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cVRl
bXBvcmFyeSk7Ci0gICAgbm9kZS0+c2V0TGluZShsaW5lKTsKLQotICAgIHJldHVybiBub2RlOwot
fQotCi0vLwotLy8gQ29uc3RhbnQgdGVybWluYWwgbm9kZXMuICBIYXMgYSB1bmlvbiB0aGF0IGNv
bnRhaW5zIGJvb2wsIGZsb2F0IG9yIGludCBjb25zdGFudHMKLS8vCi0vLyBSZXR1cm5zIHRoZSBj
b25zdGFudCB1bmlvbiBub2RlIGNyZWF0ZWQuCi0vLwotCi1USW50ZXJtQ29uc3RhbnRVbmlvbiog
VEludGVybWVkaWF0ZTo6YWRkQ29uc3RhbnRVbmlvbihDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5
UG9pbnRlciwgY29uc3QgVFR5cGUmIHQsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCi17Ci0gICAg
VEludGVybUNvbnN0YW50VW5pb24qIG5vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24odW5p
b25BcnJheVBvaW50ZXIsIHQpOwotICAgIG5vZGUtPnNldExpbmUobGluZSk7Ci0KLSAgICByZXR1
cm4gbm9kZTsKLX0KLQotVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRTd2l6emxlKFRW
ZWN0b3JGaWVsZHMmIGZpZWxkcywgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKLXsKLQotICAgIFRJ
bnRlcm1BZ2dyZWdhdGUqIG5vZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZShFT3BTZXF1ZW5jZSk7
Ci0KLSAgICBub2RlLT5zZXRMaW5lKGxpbmUpOwotICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiBj
b25zdEludE5vZGU7Ci0gICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZVZlY3RvciA9IG5vZGUt
PmdldFNlcXVlbmNlKCk7Ci0gICAgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheTsKLQotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgaSsrKSB7Ci0gICAgICAgIHVuaW9uQXJyYXkg
PSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGZp
ZWxkcy5vZmZzZXRzW2ldKTsKLSAgICAgICAgY29uc3RJbnROb2RlID0gYWRkQ29uc3RhbnRVbmlv
bih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBsaW5l
KTsKLSAgICAgICAgc2VxdWVuY2VWZWN0b3IucHVzaF9iYWNrKGNvbnN0SW50Tm9kZSk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIG5vZGU7Ci19Ci0KLS8vCi0vLyBDcmVhdGUgbG9vcCBub2Rlcy4KLS8v
Ci1USW50ZXJtTm9kZSogVEludGVybWVkaWF0ZTo6YWRkTG9vcChUTG9vcFR5cGUgdHlwZSwgVElu
dGVybU5vZGUqIGluaXQsIFRJbnRlcm1UeXBlZCogY29uZCwgVEludGVybVR5cGVkKiBleHByLCBU
SW50ZXJtTm9kZSogYm9keSwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKLXsKLSAgICBUSW50ZXJt
Tm9kZSogbm9kZSA9IG5ldyBUSW50ZXJtTG9vcCh0eXBlLCBpbml0LCBjb25kLCBleHByLCBib2R5
KTsKLSAgICBub2RlLT5zZXRMaW5lKGxpbmUpOwotCi0gICAgcmV0dXJuIG5vZGU7Ci19Ci0KLS8v
Ci0vLyBBZGQgYnJhbmNoZXMuCi0vLwotVEludGVybUJyYW5jaCogVEludGVybWVkaWF0ZTo6YWRk
QnJhbmNoKFRPcGVyYXRvciBicmFuY2hPcCwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKLXsKLSAg
ICByZXR1cm4gYWRkQnJhbmNoKGJyYW5jaE9wLCAwLCBsaW5lKTsKLX0KLQotVEludGVybUJyYW5j
aCogVEludGVybWVkaWF0ZTo6YWRkQnJhbmNoKFRPcGVyYXRvciBicmFuY2hPcCwgVEludGVybVR5
cGVkKiBleHByZXNzaW9uLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQotewotICAgIFRJbnRlcm1C
cmFuY2gqIG5vZGUgPSBuZXcgVEludGVybUJyYW5jaChicmFuY2hPcCwgZXhwcmVzc2lvbik7Ci0g
ICAgbm9kZS0+c2V0TGluZShsaW5lKTsKLQotICAgIHJldHVybiBub2RlOwotfQotCi0vLwotLy8g
VGhpcyBpcyB0byBiZSBleGVjdXRlZCBvbmNlIHRoZSBmaW5hbCByb290IGlzIHB1dCBvbiB0b3Ag
YnkgdGhlIHBhcnNpbmcKLS8vIHByb2Nlc3MuCi0vLwotYm9vbCBUSW50ZXJtZWRpYXRlOjpwb3N0
UHJvY2VzcyhUSW50ZXJtTm9kZSogcm9vdCkKLXsKLSAgICBpZiAocm9vdCA9PSAwKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vCi0gICAgLy8gRmlyc3QsIGZpbmlzaCBvZmYgdGhlIHRv
cCBsZXZlbCBzZXF1ZW5jZSwgaWYgYW55Ci0gICAgLy8KLSAgICBUSW50ZXJtQWdncmVnYXRlKiBh
Z2dSb290ID0gcm9vdC0+Z2V0QXNBZ2dyZWdhdGUoKTsKLSAgICBpZiAoYWdnUm9vdCAmJiBhZ2dS
b290LT5nZXRPcCgpID09IEVPcE51bGwpCi0gICAgICAgIGFnZ1Jvb3QtPnNldE9wKEVPcFNlcXVl
bmNlKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLwotLy8gVGhpcyBkZWxldGVzIHRoZSB0
cmVlLgotLy8KLXZvaWQgVEludGVybWVkaWF0ZTo6cmVtb3ZlKFRJbnRlcm1Ob2RlKiByb290KQot
ewotICAgIGlmIChyb290KQotICAgICAgICBSZW1vdmVBbGxUcmVlTm9kZXMocm9vdCk7Ci19Ci0K
LS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KLS8vCi0vLyBNZW1iZXIgZnVuY3Rpb25zIG9mIHRoZSBub2RlcyB1c2VkIGZvciBi
dWlsZGluZyB0aGUgdHJlZS4KLS8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLSNkZWZpbmUgUkVQTEFDRV9JRl9JUyhu
b2RlLCB0eXBlLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpIFwKLSAgICBpZiAobm9kZSA9PSBvcmln
aW5hbCkgeyBcCi0gICAgICAgIG5vZGUgPSBzdGF0aWNfY2FzdDx0eXBlICo+KHJlcGxhY2VtZW50
KTsgXAotICAgICAgICByZXR1cm4gdHJ1ZTsgXAotICAgIH0KLQotYm9vbCBUSW50ZXJtTG9vcDo6
cmVwbGFjZUNoaWxkTm9kZSgKLSAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2Rl
ICpyZXBsYWNlbWVudCkKLXsKLSAgICBSRVBMQUNFX0lGX0lTKGluaXQsIFRJbnRlcm1Ob2RlLCBv
cmlnaW5hbCwgcmVwbGFjZW1lbnQpOwotICAgIFJFUExBQ0VfSUZfSVMoY29uZCwgVEludGVybVR5
cGVkLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpOwotICAgIFJFUExBQ0VfSUZfSVMoZXhwciwgVElu
dGVybVR5cGVkLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpOwotICAgIFJFUExBQ0VfSUZfSVMoYm9k
eSwgVEludGVybU5vZGUsIG9yaWdpbmFsLCByZXBsYWNlbWVudCk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIFRJbnRlcm1CcmFuY2g6OnJlcGxhY2VDaGlsZE5vZGUoCi0gICAgVEludGVy
bU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFjZW1lbnQpCi17Ci0gICAgUkVQTEFD
RV9JRl9JUyhleHByZXNzaW9uLCBUSW50ZXJtVHlwZWQsIG9yaWdpbmFsLCByZXBsYWNlbWVudCk7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFRJbnRlcm1CaW5hcnk6OnJlcGxhY2VDaGls
ZE5vZGUoCi0gICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFjZW1l
bnQpCi17Ci0gICAgUkVQTEFDRV9JRl9JUyhsZWZ0LCBUSW50ZXJtVHlwZWQsIG9yaWdpbmFsLCBy
ZXBsYWNlbWVudCk7Ci0gICAgUkVQTEFDRV9JRl9JUyhyaWdodCwgVEludGVybVR5cGVkLCBvcmln
aW5hbCwgcmVwbGFjZW1lbnQpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBUSW50ZXJt
VW5hcnk6OnJlcGxhY2VDaGlsZE5vZGUoCi0gICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50
ZXJtTm9kZSAqcmVwbGFjZW1lbnQpCi17Ci0gICAgUkVQTEFDRV9JRl9JUyhvcGVyYW5kLCBUSW50
ZXJtVHlwZWQsIG9yaWdpbmFsLCByZXBsYWNlbWVudCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1ib29sIFRJbnRlcm1BZ2dyZWdhdGU6OnJlcGxhY2VDaGlsZE5vZGUoCi0gICAgVEludGVybU5v
ZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFjZW1lbnQpCi17Ci0gICAgZm9yIChzaXpl
X3QgaWkgPSAwOyBpaSA8IHNlcXVlbmNlLnNpemUoKTsgKytpaSkKLSAgICB7Ci0gICAgICAgIFJF
UExBQ0VfSUZfSVMoc2VxdWVuY2VbaWldLCBUSW50ZXJtTm9kZSwgb3JpZ2luYWwsIHJlcGxhY2Vt
ZW50KTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFRJbnRlcm1TZWxlY3Rp
b246OnJlcGxhY2VDaGlsZE5vZGUoCi0gICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJt
Tm9kZSAqcmVwbGFjZW1lbnQpCi17Ci0gICAgUkVQTEFDRV9JRl9JUyhjb25kaXRpb24sIFRJbnRl
cm1UeXBlZCwgb3JpZ2luYWwsIHJlcGxhY2VtZW50KTsKLSAgICBSRVBMQUNFX0lGX0lTKHRydWVC
bG9jaywgVEludGVybU5vZGUsIG9yaWdpbmFsLCByZXBsYWNlbWVudCk7Ci0gICAgUkVQTEFDRV9J
Rl9JUyhmYWxzZUJsb2NrLCBUSW50ZXJtTm9kZSwgb3JpZ2luYWwsIHJlcGxhY2VtZW50KTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vCi0vLyBTYXkgd2hldGhlciBvciBub3QgYW4gb3BlcmF0
aW9uIG5vZGUgY2hhbmdlcyB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZS4KLS8vCi1ib29sIFRJbnRl
cm1PcGVyYXRvcjo6aXNBc3NpZ25tZW50KCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0g
ICAgICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDoKLSAgICAgICAgY2FzZSBFT3BQb3N0RGVjcmVt
ZW50OgotICAgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDoKLSAgICAgICAgY2FzZSBFT3BQcmVE
ZWNyZW1lbnQ6Ci0gICAgICAgIGNhc2UgRU9wQXNzaWduOgotICAgICAgICBjYXNlIEVPcEFkZEFz
c2lnbjoKLSAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246Ci0gICAgICAgIGNhc2UgRU9wTXVsQXNz
aWduOgotICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOgotICAgICAgICBj
YXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOgotICAgICAgICBjYXNlIEVPcE1hdHJpeFRp
bWVzU2NhbGFyQXNzaWduOgotICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4QXNzaWdu
OgotICAgICAgICBjYXNlIEVPcERpdkFzc2lnbjoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQot
Ly8KLS8vIHJldHVybnMgdHJ1ZSBpZiB0aGUgb3BlcmF0b3IgaXMgZm9yIG9uZSBvZiB0aGUgY29u
c3RydWN0b3JzCi0vLwotYm9vbCBUSW50ZXJtT3BlcmF0b3I6OmlzQ29uc3RydWN0b3IoKSBjb25z
dAotewotICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMyOgot
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzM6Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0
VmVjNDoKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQyOgotICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdE1hdDM6Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0NDoKLSAgICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RGbG9hdDoKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMjoKLSAg
ICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMzoKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJ
VmVjNDoKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6Ci0gICAgICAgIGNhc2UgRU9wQ29u
c3RydWN0QlZlYzI6Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzM6Ci0gICAgICAgIGNh
c2UgRU9wQ29uc3RydWN0QlZlYzQ6Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDoKLSAg
ICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RTdHJ1Y3Q6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0K
LS8vCi0vLyBNYWtlIHN1cmUgdGhlIHR5cGUgb2YgYSB1bmFyeSBvcGVyYXRvciBpcyBhcHByb3By
aWF0ZSBmb3IgaXRzCi0vLyBjb21iaW5hdGlvbiBvZiBvcGVyYXRpb24gYW5kIG9wZXJhbmQgdHlw
ZS4KLS8vCi0vLyBSZXR1cm5zIGZhbHNlIGluIG5vdGhpbmcgbWFrZXMgc2Vuc2UuCi0vLwotYm9v
bCBUSW50ZXJtVW5hcnk6OnByb21vdGUoVEluZm9TaW5rJikKLXsKLSAgICBzd2l0Y2ggKG9wKSB7
Ci0gICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDoKLSAgICAgICAgICAgIGlmIChvcGVyYW5kLT5n
ZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcE5lZ2F0aXZlOgotICAgICAgICBj
YXNlIEVPcFBvc3RJbmNyZW1lbnQ6Ci0gICAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDoKLSAg
ICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6Ci0gICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50
OgotICAgICAgICAgICAgaWYgKG9wZXJhbmQtPmdldEJhc2ljVHlwZSgpID09IEVidEJvb2wpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgICAgIC8vIG9wZXJhdG9ycyBmb3IgYnVpbHQtaW5zIGFyZSBhbHJlYWR5IHR5cGUgY2hlY2tl
ZCBhZ2FpbnN0IHRoZWlyIHByb3RvdHlwZQotICAgICAgICBjYXNlIEVPcEFueToKLSAgICAgICAg
Y2FzZSBFT3BBbGw6Ci0gICAgICAgIGNhc2UgRU9wVmVjdG9yTG9naWNhbE5vdDoKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAob3Bl
cmFuZC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIHNldFR5cGUob3BlcmFuZC0+Z2V0VHlwZSgpKTsKLSAgICB0
eXBlLnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LS8vCi0vLyBFc3RhYmxpc2hlcyB0aGUgdHlwZSBvZiB0aGUgcmVzdWx0YW50IG9wZXJhdGlvbiwg
YXMgd2VsbCBhcwotLy8gbWFrZXMgdGhlIG9wZXJhdG9yIHRoZSBjb3JyZWN0IG9uZSBmb3IgdGhl
IG9wZXJhbmRzLgotLy8KLS8vIFJldHVybnMgZmFsc2UgaWYgb3BlcmF0b3IgY2FuJ3Qgd29yayBv
biBvcGVyYW5kcy4KLS8vCi1ib29sIFRJbnRlcm1CaW5hcnk6OnByb21vdGUoVEluZm9TaW5rJiBp
bmZvU2luaykKLXsKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIG9ubHkgaGFuZGxlcyBzY2FsYXJzLCB2
ZWN0b3JzLCBhbmQgbWF0cmljZXMuCi0gICAgaWYgKGxlZnQtPmlzQXJyYXkoKSB8fCByaWdodC0+
aXNBcnJheSgpKSB7Ci0gICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJu
YWxFcnJvciwgZ2V0TGluZSgpLCAiSW52YWxpZCBvcGVyYXRpb24gZm9yIGFycmF5cyIpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gR0xTTCBFUyAyLjAgZG9lcyBub3Qg
c3VwcG9ydCBpbXBsaWNpdCB0eXBlIGNhc3RpbmcuCi0gICAgLy8gU28gdGhlIGJhc2ljIHR5cGUg
c2hvdWxkIGFsd2F5cyBtYXRjaC4KLSAgICBpZiAobGVmdC0+Z2V0QmFzaWNUeXBlKCkgIT0gcmln
aHQtPmdldEJhc2ljVHlwZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLwotICAg
IC8vIEJhc2UgYXNzdW1wdGlvbjogIGp1c3QgbWFrZSB0aGUgdHlwZSB0aGUgc2FtZSBhcyB0aGUg
bGVmdAotICAgIC8vIG9wZXJhbmQuICBUaGVuIG9ubHkgZGV2aWF0aW9ucyBmcm9tIHRoaXMgbmVl
ZCBiZSBjb2RlZC4KLSAgICAvLwotICAgIHNldFR5cGUobGVmdC0+Z2V0VHlwZSgpKTsKLQotICAg
IC8vIFRoZSByZXN1bHQgZ2V0cyBwcm9tb3RlZCB0byB0aGUgaGlnaGVzdCBwcmVjaXNpb24uCi0g
ICAgVFByZWNpc2lvbiBoaWdoZXJQcmVjaXNpb24gPSBHZXRIaWdoZXJQcmVjaXNpb24obGVmdC0+
Z2V0UHJlY2lzaW9uKCksIHJpZ2h0LT5nZXRQcmVjaXNpb24oKSk7Ci0gICAgZ2V0VHlwZVBvaW50
ZXIoKS0+c2V0UHJlY2lzaW9uKGhpZ2hlclByZWNpc2lvbik7Ci0KLSAgICAvLyBCaW5hcnkgb3Bl
cmF0aW9ucyByZXN1bHRzIGluIHRlbXBvcmFyeSB2YXJpYWJsZXMgdW5sZXNzIGJvdGgKLSAgICAv
LyBvcGVyYW5kcyBhcmUgY29uc3QuCi0gICAgaWYgKGxlZnQtPmdldFF1YWxpZmllcigpICE9IEV2
cUNvbnN0IHx8IHJpZ2h0LT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFDb25zdCkgewotICAgICAgICBn
ZXRUeXBlUG9pbnRlcigpLT5zZXRRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKLSAgICB9Ci0KLSAg
ICBpbnQgc2l6ZSA9IHN0ZDo6bWF4KGxlZnQtPmdldE5vbWluYWxTaXplKCksIHJpZ2h0LT5nZXRO
b21pbmFsU2l6ZSgpKTsKLQotICAgIC8vCi0gICAgLy8gQWxsIHNjYWxhcnMuIENvZGUgYWZ0ZXIg
dGhpcyB0ZXN0IGFzc3VtZXMgdGhpcyBjYXNlIGlzIHJlbW92ZWQhCi0gICAgLy8KLSAgICBpZiAo
c2l6ZSA9PSAxKSB7Ci0gICAgICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgICAgIC8vCi0gICAg
ICAgICAgICAvLyBQcm9tb3RlIHRvIGNvbmRpdGlvbmFsCi0gICAgICAgICAgICAvLwotICAgICAg
ICAgICAgY2FzZSBFT3BFcXVhbDoKLSAgICAgICAgICAgIGNhc2UgRU9wTm90RXF1YWw6Ci0gICAg
ICAgICAgICBjYXNlIEVPcExlc3NUaGFuOgotICAgICAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhh
bjoKLSAgICAgICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoKLSAgICAgICAgICAgIGNhc2Ug
RU9wR3JlYXRlclRoYW5FcXVhbDoKLSAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKEVidEJv
b2wsIEVicFVuZGVmaW5lZCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAg
ICAvLwotICAgICAgICAgICAgLy8gQW5kIGFuZCBPciBvcGVyYXRlIG9uIGNvbmRpdGlvbmFscwot
ICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDoKLSAgICAgICAg
ICAgIGNhc2UgRU9wTG9naWNhbE9yOgotICAgICAgICAgICAgICAgIC8vIEJvdGggb3BlcmFuZHMg
bXVzdCBiZSBvZiB0eXBlIGJvb2wuCi0gICAgICAgICAgICAgICAgaWYgKGxlZnQtPmdldEJhc2lj
VHlwZSgpICE9IEVidEJvb2wgfHwgcmlnaHQtPmdldEJhc2ljVHlwZSgpICE9IEVidEJvb2wpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBzZXRUeXBl
KFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIElmIHdlIHJlYWNoIGhlcmUs
IGF0IGxlYXN0IG9uZSBvZiB0aGUgb3BlcmFuZHMgaXMgdmVjdG9yIG9yIG1hdHJpeC4KLSAgICAv
LyBUaGUgb3RoZXIgb3BlcmFuZCBjb3VsZCBiZSBhIHNjYWxhciwgdmVjdG9yLCBvciBtYXRyaXgu
Ci0gICAgLy8gQXJlIHRoZSBzaXplcyBjb21wYXRpYmxlPwotICAgIC8vCi0gICAgaWYgKGxlZnQt
PmdldE5vbWluYWxTaXplKCkgIT0gcmlnaHQtPmdldE5vbWluYWxTaXplKCkpIHsKLSAgICAgICAg
Ly8gSWYgdGhlIG5vbWluYWwgc2l6ZSBvZiBvcGVyYW5kcyBkbyBub3QgbWF0Y2g6Ci0gICAgICAg
IC8vIE9uZSBvZiB0aGVtIG11c3QgYmUgc2NhbGFyLgotICAgICAgICBpZiAobGVmdC0+Z2V0Tm9t
aW5hbFNpemUoKSAhPSAxICYmIHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpICE9IDEpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIC8vIE9wZXJhdG9yIGNhbm5vdCBiZSBvZiB0eXBl
IHB1cmUgYXNzaWdubWVudC4KLSAgICAgICAgaWYgKG9wID09IEVPcEFzc2lnbiB8fCBvcCA9PSBF
T3BJbml0aWFsaXplKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8v
Ci0gICAgLy8gQ2FuIHRoZXNlIHR3byBvcGVyYW5kcyBiZSBjb21iaW5lZD8KLSAgICAvLwotICAg
IFRCYXNpY1R5cGUgYmFzaWNUeXBlID0gbGVmdC0+Z2V0QmFzaWNUeXBlKCk7Ci0gICAgc3dpdGNo
IChvcCkgewotICAgICAgICBjYXNlIEVPcE11bDoKLSAgICAgICAgICAgIGlmICghbGVmdC0+aXNN
YXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkgewotICAgICAgICAgICAgICAgIGlmIChsZWZ0
LT5pc1ZlY3RvcigpKQotICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcFZlY3RvclRpbWVzTWF0
cml4OwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBvcCA9IEVP
cE1hdHJpeFRpbWVzU2NhbGFyOwotICAgICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJh
c2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUsIHRydWUpKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkg
JiYgIXJpZ2h0LT5pc01hdHJpeCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJpZ2h0LT5pc1Zl
Y3RvcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9wID0gRU9wTWF0cml4VGltZXNWZWN0b3I7
Ci0gICAgICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVj
aXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwgZmFsc2UpKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzU2NhbGFyOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAm
JiByaWdodC0+aXNNYXRyaXgoKSkgewotICAgICAgICAgICAgICAgIG9wID0gRU9wTWF0cml4VGlt
ZXNNYXRyaXg7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCFsZWZ0LT5pc01hdHJpeCgpICYmICFy
aWdodC0+aXNNYXRyaXgoKSkgewotICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5pc1ZlY3Rvcigp
ICYmIHJpZ2h0LT5pc1ZlY3RvcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGxlYXZlIGFz
IGNvbXBvbmVudCBwcm9kdWN0Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5pc1Zl
Y3RvcigpIHx8IHJpZ2h0LT5pc1ZlY3RvcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9wID0g
RU9wVmVjdG9yVGltZXNTY2FsYXI7Ci0gICAgICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUo
YmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwgZmFsc2UpKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAi
TWlzc2luZyBlbHNlcyIpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcE11bEFzc2lnbjoKLSAg
ICAgICAgICAgIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkgewot
ICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5pc1ZlY3RvcigpKQotICAgICAgICAgICAgICAgICAg
ICBvcCA9IEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOwotICAgICAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5pc01hdHJpeCgpICYmICFyaWdodC0+aXNNYXRy
aXgoKSkgewotICAgICAgICAgICAgICAgIGlmIChyaWdodC0+aXNWZWN0b3IoKSkgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbjsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYg
cmlnaHQtPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVz
TWF0cml4QXNzaWduOwotICAgICAgICAgICAgfSBlbHNlIGlmICghbGVmdC0+aXNNYXRyaXgoKSAm
JiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobGVmdC0+aXNWZWN0
b3IoKSAmJiByaWdodC0+aXNWZWN0b3IoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBsZWF2
ZSBhcyBjb21wb25lbnQgcHJvZHVjdAotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+
aXNWZWN0b3IoKSB8fCByaWdodC0+aXNWZWN0b3IoKSkgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoISBsZWZ0LT5pc1ZlY3RvcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWdu
OwotICAgICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJl
Y2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUsIGZhbHNlKSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3Nh
Z2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIk1pc3NpbmcgZWxzZXMiKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICBjYXNlIEVPcEFzc2lnbjoKLSAgICAgICAgY2FzZSBFT3BJbml0aWFs
aXplOgotICAgICAgICBjYXNlIEVPcEFkZDoKLSAgICAgICAgY2FzZSBFT3BTdWI6Ci0gICAgICAg
IGNhc2UgRU9wRGl2OgotICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjoKLSAgICAgICAgY2FzZSBF
T3BTdWJBc3NpZ246Ci0gICAgICAgIGNhc2UgRU9wRGl2QXNzaWduOgotICAgICAgICAgICAgaWYg
KChsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc1ZlY3RvcigpKSB8fAotICAgICAgICAgICAg
ICAgIChsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwg
aGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUsIGxlZnQtPmlzTWF0cml4KCkgfHwg
cmlnaHQtPmlzTWF0cml4KCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2Ug
RU9wRXF1YWw6Ci0gICAgICAgIGNhc2UgRU9wTm90RXF1YWw6Ci0gICAgICAgIGNhc2UgRU9wTGVz
c1RoYW46Ci0gICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46Ci0gICAgICAgIGNhc2UgRU9wTGVz
c1RoYW5FcXVhbDoKLSAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgotICAgICAgICAg
ICAgaWYgKChsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc1ZlY3RvcigpKSB8fAotICAgICAg
ICAgICAgICAgIChsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBzZXRUeXBlKFRUeXBlKEVidEJv
b2wsIEVicFVuZGVmaW5lZCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgQ29tcGFyZVN0cnVjdChjb25zdCBUVHlwZSYgbGVmdE5vZGVUeXBlLCBD
b25zdGFudFVuaW9uKiByaWdodFVuaW9uQXJyYXksIENvbnN0YW50VW5pb24qIGxlZnRVbmlvbkFy
cmF5KQotewotICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9IGxlZnROb2RlVHlwZS5nZXRT
dHJ1Y3QoKS0+ZmllbGRzKCk7Ci0KLSAgICBzaXplX3Qgc3RydWN0U2l6ZSA9IGZpZWxkcy5zaXpl
KCk7Ci0gICAgc2l6ZV90IGluZGV4ID0gMDsKLQotICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwg
c3RydWN0U2l6ZTsgaisrKSB7Ci0gICAgICAgIHNpemVfdCBzaXplID0gZmllbGRzW2pdLT50eXBl
KCktPmdldE9iamVjdFNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXpl
OyBpKyspIHsKLSAgICAgICAgICAgIGlmIChmaWVsZHNbal0tPnR5cGUoKS0+Z2V0QmFzaWNUeXBl
KCkgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFDb21wYXJlU3RydWN0dXJl
KCooZmllbGRzW2pdLT50eXBlKCkpLCAmcmlnaHRVbmlvbkFycmF5W2luZGV4XSwgJmxlZnRVbmlv
bkFycmF5W2luZGV4XSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxlZnRVbmlvbkFycmF5W2luZGV4
XSAhPSByaWdodFVuaW9uQXJyYXlbaW5kZXhdKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDb21wYXJlU3RydWN0dXJlKGNv
bnN0IFRUeXBlJiBsZWZ0Tm9kZVR5cGUsIENvbnN0YW50VW5pb24qIHJpZ2h0VW5pb25BcnJheSwg
Q29uc3RhbnRVbmlvbiogbGVmdFVuaW9uQXJyYXkpCi17Ci0gICAgaWYgKGxlZnROb2RlVHlwZS5p
c0FycmF5KCkpIHsKLSAgICAgICAgVFR5cGUgdHlwZVdpdGhvdXRBcnJheW5lc3MgPSBsZWZ0Tm9k
ZVR5cGU7Ci0gICAgICAgIHR5cGVXaXRob3V0QXJyYXluZXNzLmNsZWFyQXJyYXluZXNzKCk7Ci0K
LSAgICAgICAgc2l6ZV90IGFycmF5U2l6ZSA9IGxlZnROb2RlVHlwZS5nZXRBcnJheVNpemUoKTsK
LQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5U2l6ZTsgKytpKSB7Ci0gICAg
ICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gdHlwZVdpdGhvdXRBcnJheW5lc3MuZ2V0T2JqZWN0U2l6
ZSgpICogaTsKLSAgICAgICAgICAgIGlmICghQ29tcGFyZVN0cnVjdCh0eXBlV2l0aG91dEFycmF5
bmVzcywgJnJpZ2h0VW5pb25BcnJheVtvZmZzZXRdLCAmbGVmdFVuaW9uQXJyYXlbb2Zmc2V0XSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0g
ICAgICAgIHJldHVybiBDb21wYXJlU3RydWN0KGxlZnROb2RlVHlwZSwgcmlnaHRVbmlvbkFycmF5
LCBsZWZ0VW5pb25BcnJheSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8KLS8vIFRoZSBm
b2xkIGZ1bmN0aW9ucyBzZWUgaWYgYW4gb3BlcmF0aW9uIG9uIGEgY29uc3RhbnQgY2FuIGJlIGRv
bmUgaW4gcGxhY2UsCi0vLyB3aXRob3V0IGdlbmVyYXRpbmcgcnVuLXRpbWUgY29kZS4KLS8vCi0v
LyBSZXR1cm5zIHRoZSBub2RlIHRvIGtlZXAgdXNpbmcsIHdoaWNoIG1heSBvciBtYXkgbm90IGJl
IHRoZSBub2RlIHBhc3NlZCBpbi4KLS8vCi0KLVRJbnRlcm1UeXBlZCogVEludGVybUNvbnN0YW50
VW5pb246OmZvbGQoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGNvbnN0YW50Tm9kZSwgVElu
Zm9TaW5rJiBpbmZvU2luaykKLXsKLSAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gZ2V0
VW5pb25BcnJheVBvaW50ZXIoKTsKLSAgICBzaXplX3Qgb2JqZWN0U2l6ZSA9IGdldFR5cGUoKS5n
ZXRPYmplY3RTaXplKCk7Ci0KLSAgICBpZiAoY29uc3RhbnROb2RlKSB7ICAvLyBiaW5hcnkgb3Bl
cmF0aW9ucwotICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbm9kZSA9IGNvbnN0YW50Tm9k
ZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0gICAgICAgIENvbnN0YW50VW5pb24gKnJpZ2h0VW5p
b25BcnJheSA9IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7Ci0gICAgICAgIFRUeXBlIHJl
dHVyblR5cGUgPSBnZXRUeXBlKCk7Ci0KLSAgICAgICAgLy8gZm9yIGEgY2FzZSBsaWtlIGZsb2F0
IGYgPSAxLjIgKyB2ZWM0KDIsMyw0LDUpOwotICAgICAgICBpZiAoY29uc3RhbnROb2RlLT5nZXRU
eXBlKCkuZ2V0T2JqZWN0U2l6ZSgpID09IDEgJiYgb2JqZWN0U2l6ZSA+IDEpIHsKLSAgICAgICAg
ICAgIHJpZ2h0VW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwotICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyArK2kpCi0gICAgICAg
ICAgICAgICAgcmlnaHRVbmlvbkFycmF5W2ldID0gKm5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVy
KCk7Ci0gICAgICAgICAgICByZXR1cm5UeXBlID0gZ2V0VHlwZSgpOwotICAgICAgICB9IGVsc2Ug
aWYgKGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKSA+IDEgJiYgb2JqZWN0
U2l6ZSA9PSAxKSB7Ci0gICAgICAgICAgICAvLyBmb3IgYSBjYXNlIGxpa2UgZmxvYXQgZiA9IHZl
YzQoMiwzLDQsNSkgKyAxLjI7Ci0gICAgICAgICAgICB1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50
VW5pb25bY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpXTsKLSAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0T2Jq
ZWN0U2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgdW5pb25BcnJheVtpXSA9ICpnZXRVbmlv
bkFycmF5UG9pbnRlcigpOwotICAgICAgICAgICAgcmV0dXJuVHlwZSA9IG5vZGUtPmdldFR5cGUo
KTsKLSAgICAgICAgICAgIG9iamVjdFNpemUgPSBjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRP
YmplY3RTaXplKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBDb25zdGFudFVuaW9uKiB0ZW1wQ29u
c3RBcnJheSA9IDA7Ci0gICAgICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICp0ZW1wTm9kZTsKLQot
ICAgICAgICBib29sIGJvb2xOb2RlRmxhZyA9IGZhbHNlOwotICAgICAgICBzd2l0Y2gob3ApIHsK
LSAgICAgICAgICAgIGNhc2UgRU9wQWRkOgotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5
ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07Ci0gICAgICAgICAgICAgICAgey8vIHN1
cHBvcnQgTVNWQysrNi4wCi0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgb2JqZWN0U2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXlbaV0gPSB1bmlvbkFycmF5W2ldICsgcmlnaHRVbmlvbkFycmF5W2ldOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRU9wU3ViOgot
ICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0
U2l6ZV07Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCi0gICAgICAgICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQotICAgICAg
ICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldIC0gcmln
aHRVbmlvbkFycmF5W2ldOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVh
azsKLQotICAgICAgICAgICAgY2FzZSBFT3BNdWw6Ci0gICAgICAgICAgICBjYXNlIEVPcFZlY3Rv
clRpbWVzU2NhbGFyOgotICAgICAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhcjoKLSAg
ICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNp
emVdOwotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSAqIHJpZ2h0
VW5pb25BcnJheVtpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4OgotICAgICAgICAgICAgICAg
IGlmIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQgfHwgbm9kZS0+Z2V0QmFz
aWNUeXBlKCkgIT0gRWJ0RmxvYXQpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5m
by5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJDb25zdGFudCBGb2xk
aW5nIGNhbm5vdCBiZSBkb25lIGZvciBtYXRyaXggbXVsdGlwbHkiKTsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHsvLyBz
dXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSA9IGdldE5vbWlu
YWxTaXplKCk7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bc2l6ZSpzaXplXTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgcm93ID0g
MDsgcm93IDwgc2l6ZTsgcm93KyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50
IGNvbHVtbiA9IDA7IGNvbHVtbiA8IHNpemU7IGNvbHVtbisrKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbc2l6ZSAqIGNvbHVtbiArIHJvd10uc2V0RkNvbnN0
KDAuMGYpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
c2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFy
cmF5W3NpemUgKiBjb2x1bW4gKyByb3ddLnNldEZDb25zdCh0ZW1wQ29uc3RBcnJheVtzaXplICog
Y29sdW1uICsgcm93XS5nZXRGQ29uc3QoKSArIHVuaW9uQXJyYXlbaSAqIHNpemUgKyByb3ddLmdl
dEZDb25zdCgpICogKHJpZ2h0VW5pb25BcnJheVtjb2x1bW4gKiBzaXplICsgaV0uZ2V0RkNvbnN0
KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVPcERpdjoKLSAgICAgICAgICAgICAg
ICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwotICAgICAg
ICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykgewotICAgICAgICAgICAgICAgICAg
ICAgICAgc3dpdGNoIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAgIGNh
c2UgRWJ0RmxvYXQ6Ci0gICAgICAgICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtpXSA9PSAw
LjBmKSB7Ci0gICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4
V2FybmluZywgZ2V0TGluZSgpLCAiRGl2aWRlIGJ5IHplcm8gZXJyb3IgZHVyaW5nIGNvbnN0YW50
IGZvbGRpbmciKTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNv
bnN0KHVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0KCkgPCAwID8gLUZMVF9NQVggOiBGTFRfTUFYKTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXlbaV0uc2V0RkNvbnN0KHVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0KCkgLyByaWdodFVuaW9uQXJy
YXlbaV0uZ2V0RkNvbnN0KCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAg
ICBjYXNlIEVidEludDoKLSAgICAgICAgICAgICAgICBpZiAocmlnaHRVbmlvbkFycmF5W2ldID09
IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhX
YXJuaW5nLCBnZXRMaW5lKCksICJEaXZpZGUgYnkgemVybyBlcnJvciBkdXJpbmcgY29uc3RhbnQg
Zm9sZGluZyIpOwotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRJQ29u
c3QoSU5UX01BWCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IHRlbXBDb25zdEFycmF5W2ldLnNldElDb25zdCh1bmlvbkFycmF5W2ldLmdldElDb25zdCgpIC8g
cmlnaHRVbmlvbkFycmF5W2ldLmdldElDb25zdCgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNz
YWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJDb25zdGFudCBmb2xkaW5nIGNh
bm5vdCBiZSBkb25lIGZvciBcIi9cIiIpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIEVPcE1h
dHJpeFRpbWVzVmVjdG9yOgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRCYXNpY1R5cGUo
KSAhPSBFYnRGbG9hdCkgewotICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3Nh
Z2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIkNvbnN0YW50IEZvbGRpbmcgY2Fu
bm90IGJlIGRvbmUgZm9yIG1hdHJpeCB0aW1lcyB2ZWN0b3IiKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRlbXBDb25z
dEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bZ2V0Tm9taW5hbFNpemUoKV07Ci0KLSAgICAgICAg
ICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgc2l6ZSA9IGdldE5vbWluYWxTaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QoMC4wZik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHNpemU7IGorKykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCh0
ZW1wQ29uc3RBcnJheVtpXS5nZXRGQ29uc3QoKSArICgodW5pb25BcnJheVtqKnNpemUgKyBpXS5n
ZXRGQ29uc3QoKSkgKiByaWdodFVuaW9uQXJyYXlbal0uZ2V0RkNvbnN0KCkpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9u
KHRlbXBDb25zdEFycmF5LCBub2RlLT5nZXRUeXBlKCkpOwotICAgICAgICAgICAgICAgIHRlbXBO
b2RlLT5zZXRMaW5lKGdldExpbmUoKSk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGVtcE5v
ZGU7Ci0KLSAgICAgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXg6Ci0gICAgICAgICAg
ICAgICAgaWYgKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRGbG9hdCkgewotICAgICAg
ICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3Is
IGdldExpbmUoKSwgIkNvbnN0YW50IEZvbGRpbmcgY2Fubm90IGJlIGRvbmUgZm9yIHZlY3RvciB0
aW1lcyBtYXRyaXgiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvbltnZXROb21pbmFsU2l6ZSgpXTsKLSAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZD
Kys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgc2l6ZSA9IGdldE5vbWluYWxTaXpl
KCksIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1w
Q29uc3RBcnJheVtpXS5zZXRGQ29uc3QoMC4wZik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKGludCBqID0gMDsgaiA8IHNpemU7IGorKykgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCh0ZW1wQ29uc3RBcnJheVtpXS5nZXRGQ29u
c3QoKSArICgodW5pb25BcnJheVtqXS5nZXRGQ29uc3QoKSkgKiByaWdodFVuaW9uQXJyYXlbaSpz
aXplICsgal0uZ2V0RkNvbnN0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVh
azsKLQotICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiAvLyB0aGlzIGNvZGUgaXMgd3Jp
dHRlbiBmb3IgcG9zc2libGUgZnV0dXJlIHVzZSwgd2lsbCBub3QgZ2V0IGV4ZWN1dGVkIGN1cnJl
bnRseQotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25b
b2JqZWN0U2l6ZV07Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCi0gICAg
ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQot
ICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ld
ICYmIHJpZ2h0VW5pb25BcnJheVtpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgRU9wTG9naWNhbE9yOiAvLyB0aGlzIGNvZGUg
aXMgd3JpdHRlbiBmb3IgcG9zc2libGUgZnV0dXJlIHVzZSwgd2lsbCBub3QgZ2V0IGV4ZWN1dGVk
IGN1cnJlbnRseQotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50
VW5pb25bb2JqZWN0U2l6ZV07Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4w
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsg
aSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1bmlvbkFy
cmF5W2ldIHx8IHJpZ2h0VW5pb25BcnJheVtpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjoKLSAgICAg
ICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVd
OwotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7Ci0gICAgICAg
ICAgICBjYXNlIEVidEJvb2w6IHRlbXBDb25zdEFycmF5W2ldLnNldEJDb25zdCgodW5pb25BcnJh
eVtpXSA9PSByaWdodFVuaW9uQXJyYXlbaV0pID8gZmFsc2UgOiB0cnVlKTsgYnJlYWs7Ci0gICAg
ICAgICAgICBkZWZhdWx0OiBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgICAgICBjYXNlIEVPcExlc3NUaGFuOgotICAgICAgICAgICAgICAgIGFz
c2VydChvYmplY3RTaXplID09IDEpOwotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0g
bmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNl
dEJDb25zdCgqdW5pb25BcnJheSA8ICpyaWdodFVuaW9uQXJyYXkpOwotICAgICAgICAgICAgICAg
IHJldHVyblR5cGUgPSBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46Ci0g
ICAgICAgICAgICAgICAgYXNzZXJ0KG9iamVjdFNpemUgPT0gMSk7Ci0gICAgICAgICAgICAgICAg
dGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgICAgICB0
ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KCp1bmlvbkFycmF5ID4gKnJpZ2h0VW5pb25BcnJheSk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5l
ZCwgRXZxQ29uc3QpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBF
T3BMZXNzVGhhbkVxdWFsOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
YXNzZXJ0KG9iamVjdFNpemUgPT0gMSk7Ci0gICAgICAgICAgICAgICAgICAgIENvbnN0YW50VW5p
b24gY29uc3RhbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0YW50LnNldEJDb25zdCgqdW5p
b25BcnJheSA+ICpyaWdodFVuaW9uQXJyYXkpOwotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgICAgICB0ZW1w
Q29uc3RBcnJheS0+c2V0QkNvbnN0KCFjb25zdGFudC5nZXRCQ29uc3QoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVyblR5cGUgPSBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNv
bnN0KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgYXNzZXJ0KG9iamVjdFNpemUgPT0gMSk7Ci0gICAgICAgICAgICAg
ICAgICAgIENvbnN0YW50VW5pb24gY29uc3RhbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0
YW50LnNldEJDb25zdCgqdW5pb25BcnJheSA8ICpyaWdodFVuaW9uQXJyYXkpOwotICAgICAgICAg
ICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAg
ICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KCFjb25zdGFudC5nZXRCQ29u
c3QoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBUVHlwZShFYnRCb29sLCBF
YnBVbmRlZmluZWQsIEV2cUNvbnN0KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIEVPcEVxdWFsOgotICAgICAgICAgICAg
ICAgIGlmIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICghQ29tcGFyZVN0cnVjdHVyZShub2RlLT5nZXRUeXBlKCksIG5vZGUt
PmdldFVuaW9uQXJyYXlQb2ludGVyKCksIHVuaW9uQXJyYXkpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbE5vZGVGbGFnID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaW9uQXJyYXlbaV0gIT0gcmlnaHRVbmlv
bkFycmF5W2ldKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbE5vZGVGbGFnID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgIC8vIGJyZWFrIG91dCBv
ZiBmb3IgbG9vcAotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkg
PSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgICAgICBpZiAoIWJvb2xOb2RlRmxh
ZykgewotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KHRydWUp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgdGVtcE5vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5p
b24odGVtcENvbnN0QXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3Qp
KTsKLSAgICAgICAgICAgICAgICB0ZW1wTm9kZS0+c2V0TGluZShnZXRMaW5lKCkpOwotCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOwotCi0gICAgICAgICAgICBjYXNlIEVPcE5vdEVx
dWFsOgotICAgICAgICAgICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0
U3RydWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChDb21wYXJlU3RydWN0dXJlKG5vZGUt
PmdldFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSwgdW5pb25BcnJheSkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBib29sTm9kZUZsYWcgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
b2JqZWN0U2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5pb25BcnJh
eVtpXSA9PSByaWdodFVuaW9uQXJyYXlbaV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sTm9kZUZsYWcgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OyAgLy8gYnJlYWsgb3V0IG9mIGZvciBsb29wCi0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAg
IGlmICghYm9vbE5vZGVGbGFnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5
LT5zZXRCQ29uc3QodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KGZhbHNl
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0ZW1wTm9kZSA9IG5ldyBU
SW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5k
ZWZpbmVkLCBFdnFDb25zdCkpOwotICAgICAgICAgICAgICAgIHRlbXBOb2RlLT5zZXRMaW5lKGdl
dExpbmUoKSk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGVtcE5vZGU7Ci0KLSAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVm
aXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJJbnZhbGlkIG9wZXJhdG9yIGZvciBjb25zdGFu
dCBmb2xkaW5nIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAg
ICAgdGVtcE5vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24odGVtcENvbnN0QXJyYXksIHJl
dHVyblR5cGUpOwotICAgICAgICB0ZW1wTm9kZS0+c2V0TGluZShnZXRMaW5lKCkpOwotCi0gICAg
ICAgIHJldHVybiB0ZW1wTm9kZTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLwotICAgICAgICAv
LyBEbyB1bmFyeSBvcGVyYXRpb25zCi0gICAgICAgIC8vCi0gICAgICAgIFRJbnRlcm1Db25zdGFu
dFVuaW9uICpuZXdOb2RlID0gMDsKLSAgICAgICAgQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0QXJy
YXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKLSAgICAgICAgICAgIHN3aXRjaChvcCkgewot
ICAgICAgICAgICAgICAgIGNhc2UgRU9wTmVnYXRpdmU6Ci0gICAgICAgICAgICAgICAgICAgIHN3
aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIEVidEZsb2F0OiB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QoLXVuaW9uQXJyYXlb
aV0uZ2V0RkNvbnN0KCkpOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0
SW50OiAgIHRlbXBDb25zdEFycmF5W2ldLnNldElDb25zdCgtdW5pb25BcnJheVtpXS5nZXRJQ29u
c3QoKSk7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFs
RXJyb3IsIGdldExpbmUoKSwgIlVuYXJ5IG9wZXJhdGlvbiBub3QgZm9sZGVkIGludG8gY29uc3Rh
bnQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBj
YXNlIEVPcExvZ2ljYWxOb3Q6IC8vIHRoaXMgY29kZSBpcyB3cml0dGVuIGZvciBwb3NzaWJsZSBm
dXR1cmUgdXNlLCB3aWxsIG5vdCBnZXQgZXhlY3V0ZWQgY3VycmVudGx5Ci0gICAgICAgICAgICAg
ICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIEVidEJvb2w6ICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRCQ29uc3QoIXVu
aW9uQXJyYXlbaV0uZ2V0QkNvbnN0KCkpOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNz
YWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJVbmFyeSBvcGVyYXRpb24gbm90
IGZvbGRlZCBpbnRvIGNvbnN0YW50Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbmV3Tm9kZSA9IG5ldyBUSW50ZXJt
Q29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgZ2V0VHlwZSgpKTsKLSAgICAgICAgbmV3Tm9k
ZS0+c2V0TGluZShnZXRMaW5lKCkpOwotICAgICAgICByZXR1cm4gbmV3Tm9kZTsKLSAgICB9Ci19
Ci0KLVRJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6cHJvbW90ZUNvbnN0YW50VW5pb24oVEJh
c2ljVHlwZSBwcm9tb3RlVG8sIFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKQotewotICAgIHNp
emVfdCBzaXplID0gbm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsKLQotICAgIENvbnN0
YW50VW5pb24gKmxlZnRVbmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bc2l6ZV07Ci0KLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICBpbnQgaW5kZXgg
PSBzdGF0aWNfY2FzdDxpbnQ+KGkpOwotICAgICAgICBzd2l0Y2ggKHByb21vdGVUbykgewotICAg
ICAgICAgICAgY2FzZSBFYnRGbG9hdDoKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdl
dFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIEVidElu
dDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldEZDb25zdChz
dGF0aWNfY2FzdDxmbG9hdD4obm9kZS0+Z2V0SUNvbnN0KGluZGV4KSkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldEZDb25zdChzdGF0aWNf
Y2FzdDxmbG9hdD4obm9kZS0+Z2V0QkNvbnN0KGluZGV4KSkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRGQ29uc3Qoc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG5vZGUtPmdldEZDb25zdChpbmRleCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAg
ICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5n
ZXRMaW5lKCksICJDYW5ub3QgcHJvbW90ZSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRUeXBl
KCkuZ2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRJQ29uc3Qoc3RhdGlj
X2Nhc3Q8aW50Pihub2RlLT5nZXRJQ29uc3QoaW5kZXgpKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOgotICAgICAgICAg
ICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0SUNvbnN0KHN0YXRpY19jYXN0PGlu
dD4obm9kZS0+Z2V0QkNvbnN0KGluZGV4KSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRJQ29uc3Qoc3RhdGljX2Nhc3Q8aW50Pihub2Rl
LT5nZXRGQ29uc3QoaW5kZXgpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZm9T
aW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAi
Q2Fubm90IHByb21vdGUiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
RWJ0Qm9vbDoKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldFR5cGUoKS5nZXRCYXNp
Y1R5cGUoKSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDoKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldEJDb25zdChub2RlLT5nZXRJQ29uc3Qo
aW5kZXgpICE9IDApOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlv
bkFycmF5W2ldLnNldEJDb25zdChub2RlLT5nZXRCQ29uc3QoaW5kZXgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0Ogot
ICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0QkNvbnN0KG5vZGUt
PmdldEZDb25zdChpbmRleCkgIT0gMC4wZik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAg
IGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGlu
ZSgpLCAiQ2Fubm90IHByb21vdGUiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZp
eEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIkluY29ycmVjdCBkYXRhIHR5cGUgZm91
bmQiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgfQotCi0g
ICAgY29uc3QgVFR5cGUmIHQgPSBub2RlLT5nZXRUeXBlKCk7Ci0KLSAgICByZXR1cm4gYWRkQ29u
c3RhbnRVbmlvbihsZWZ0VW5pb25BcnJheSwgVFR5cGUocHJvbW90ZVRvLCB0LmdldFByZWNpc2lv
bigpLCB0LmdldFF1YWxpZmllcigpLCB0LmdldE5vbWluYWxTaXplKCksIHQuaXNNYXRyaXgoKSwg
dC5pc0FycmF5KCkpLCBub2RlLT5nZXRMaW5lKCkpOwotfQotCi0vLyBzdGF0aWMKLVRTdHJpbmcg
VEludGVybVRyYXZlcnNlcjo6aGFzaChjb25zdCBUU3RyaW5nJiBuYW1lLCBTaEhhc2hGdW5jdGlv
bjY0IGhhc2hGdW5jdGlvbikKLXsKLSAgICBpZiAoaGFzaEZ1bmN0aW9uID09IE5VTEwgfHwgbmFt
ZS5lbXB0eSgpKQotICAgICAgICByZXR1cm4gbmFtZTsKLSAgICBraHJvbm9zX3VpbnQ2NF90IG51
bWJlciA9ICgqaGFzaEZ1bmN0aW9uKShuYW1lLmNfc3RyKCksIG5hbWUubGVuZ3RoKCkpOwotICAg
IFRTdHJpbmdTdHJlYW0gc3RyZWFtOwotICAgIHN0cmVhbSA8PCBIQVNIRURfTkFNRV9QUkVGSVgg
PDwgc3RkOjpoZXggPDwgbnVtYmVyOwotICAgIFRTdHJpbmcgaGFzaGVkTmFtZSA9IHN0cmVhbS5z
dHIoKTsKLSAgICByZXR1cm4gaGFzaGVkTmFtZTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9NTWFwLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvTU1hcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzA4
NjcxNTE0Y2M2M2U4ZTcwYTAzZTM4NjhiNTc5NTFiODVlOTg3Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9NTWFwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0vLwotCi0jaWZuZGVmIF9NTUFQX0lOQ0xVREVEXwotI2RlZmluZSBfTU1BUF9JTkNMVURF
RF8KLQotLy8KLS8vIEVuY2Fwc3VsYXRlIG1lbW9yeSBtYXBwZWQgZmlsZXMKLS8vCi0KLWNsYXNz
IFRNTWFwIHsKLXB1YmxpYzoKLSAgICBUTU1hcChjb25zdCBjaGFyKiBmaWxlTmFtZSkgOiAKLSAg
ICAgICAgZlNpemUoLTEpLCAvLyAtMSBpcyB0aGUgZXJyb3IgdmFsdWUgcmV0dXJuZWQgYnkgR2V0
RmlsZVNpemUoKQotICAgICAgICBmcChOVUxMKSwKLSAgICAgICAgZkJ1ZmYoMCkgICAvLyAwIGlz
IHRoZSBlcnJvciB2YWx1ZSByZXR1cm5lZCBieSBNYXBWaWV3T2ZGaWxlKCkKLSAgICB7Ci0gICAg
ICAgIGlmICgoZnAgPSBmb3BlbihmaWxlTmFtZSwgInIiKSkgPT0gTlVMTCkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgY2hhciBjID0gZ2V0YyhmcCk7Ci0gICAgICAgIGZTaXplID0gMDsK
LSAgICAgICAgd2hpbGUgKGMgIT0gRU9GKSB7Ci0gICAgICAgICAgICBmU2l6ZSsrOwotICAgICAg
ICAgICAgYyA9IGdldGMoZnApOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjID09IEVPRikKLSAg
ICAgICAgICAgIGZTaXplKys7Ci0gICAgICAgIHJld2luZChmcCk7Ci0gICAgICAgIGZCdWZmID0g
KGNoYXIqKW1hbGxvYyhzaXplb2YoY2hhcikgKiBmU2l6ZSk7Ci0gICAgICAgIGludCBjb3VudCA9
IDA7Ci0gICAgICAgIGMgPSBnZXRjKGZwKTsKLSAgICAgICAgd2hpbGUgKGMgIT0gRU9GKSB7Ci0g
ICAgICAgICAgICBmQnVmZltjb3VudCsrXSA9IGM7Ci0gICAgICAgICAgICBjID0gZ2V0YyhmcCk7
Ci0gICAgICAgIH0KLSAgICAgICAgZkJ1ZmZbY291bnQrK10gPSBjOwotICAgIH0KLQotICAgIGNo
YXIqIGdldERhdGEoKSB7IHJldHVybiBmQnVmZjsgfQotICAgIGludCAgIGdldFNpemUoKSB7IHJl
dHVybiBmU2l6ZTsgfQotCi0gICAgflRNTWFwKCkgewotICAgICAgICBpZiAoZnAgIT0gTlVMTCkK
LSAgICAgICAgICAgIGZjbG9zZShmcCk7Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBpbnQg
ICAgICAgICAgICAgZlNpemU7ICAgICAgLy8gc2l6ZSBvZiBmaWxlIHRvIG1hcCBpbgotICAgIEZJ
TEUgKmZwOwotICAgIGNoYXIqICAgICAgICAgICBmQnVmZjsgICAgICAvLyB0aGUgYWN0dWFsIGRh
dGE7Ci19OwotCi0jZW5kaWYgLy8gX01NQVBfSU5DTFVERURfCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVz
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc3ZWY1ZDcyZWI5ZTdmZjJkNGE5
NmI0ZDVjNjliZTE4NjgxMGI3OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5oIgot
Ci1uYW1lc3BhY2UgewotCi1UU3RyaW5nIG1hcExvbmdOYW1lKHNpemVfdCBpZCwgY29uc3QgVFN0
cmluZyYgbmFtZSwgYm9vbCBpc0dsb2JhbCkKLXsKLSAgICBBU1NFUlQobmFtZS5zaXplKCkgPiBN
QVhfU0hPUlRFTkVEX0lERU5USUZJRVJfU0laRSk7Ci0gICAgVFN0cmluZ1N0cmVhbSBzdHJlYW07
Ci0gICAgc3RyZWFtIDw8ICJ3ZWJnbF8iOwotICAgIGlmIChpc0dsb2JhbCkKLSAgICAgICAgc3Ry
ZWFtIDw8ICJnIjsKLSAgICBzdHJlYW0gPDwgaWQ7Ci0gICAgaWYgKG5hbWVbMF0gIT0gJ18nKQot
ICAgICAgICBzdHJlYW0gPDwgIl8iOwotICAgIHN0cmVhbSA8PCBuYW1lLnN1YnN0cigwLCBNQVhf
U0hPUlRFTkVEX0lERU5USUZJRVJfU0laRSAtIHN0cmVhbS5zdHIoKS5zaXplKCkpOwotICAgIHJl
dHVybiBzdHJlYW0uc3RyKCk7Ci19Ci0KLUxvbmdOYW1lTWFwKiBnTG9uZ05hbWVNYXBJbnN0YW5j
ZSA9IE5VTEw7Ci0KLX0gIC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotTG9uZ05hbWVNYXA6Okxv
bmdOYW1lTWFwKCkKLSAgICA6IHJlZkNvdW50KDApCi17Ci19Ci0KLUxvbmdOYW1lTWFwOjp+TG9u
Z05hbWVNYXAoKQotewotfQotCi0vLyBzdGF0aWMKLUxvbmdOYW1lTWFwKiBMb25nTmFtZU1hcDo6
R2V0SW5zdGFuY2UoKQotewotICAgIGlmIChnTG9uZ05hbWVNYXBJbnN0YW5jZSA9PSBOVUxMKQot
ICAgICAgICBnTG9uZ05hbWVNYXBJbnN0YW5jZSA9IG5ldyBMb25nTmFtZU1hcDsKLSAgICBnTG9u
Z05hbWVNYXBJbnN0YW5jZS0+cmVmQ291bnQrKzsKLSAgICByZXR1cm4gZ0xvbmdOYW1lTWFwSW5z
dGFuY2U7Ci19Ci0KLXZvaWQgTG9uZ05hbWVNYXA6OlJlbGVhc2UoKQotewotICAgIEFTU0VSVChn
TG9uZ05hbWVNYXBJbnN0YW5jZSA9PSB0aGlzKTsKLSAgICBBU1NFUlQocmVmQ291bnQgPiAwKTsK
LSAgICByZWZDb3VudC0tOwotICAgIGlmIChyZWZDb3VudCA9PSAwKSB7Ci0gICAgICAgIGRlbGV0
ZSBnTG9uZ05hbWVNYXBJbnN0YW5jZTsKLSAgICAgICAgZ0xvbmdOYW1lTWFwSW5zdGFuY2UgPSBO
VUxMOwotICAgIH0KLX0KLQotY29uc3QgY2hhciogTG9uZ05hbWVNYXA6OkZpbmQoY29uc3QgY2hh
ciogb3JpZ2luYWxOYW1lKSBjb25zdAotewotICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6
OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbUxvbmdOYW1lTWFwLmZpbmQoCi0gICAgICAg
IG9yaWdpbmFsTmFtZSk7Ci0gICAgaWYgKGl0ICE9IG1Mb25nTmFtZU1hcC5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuICgqaXQpLnNlY29uZC5jX3N0cigpOwotICAgIHJldHVybiBOVUxMOwotfQotCi12
b2lkIExvbmdOYW1lTWFwOjpJbnNlcnQoY29uc3QgY2hhciogb3JpZ2luYWxOYW1lLCBjb25zdCBj
aGFyKiBtYXBwZWROYW1lKQotewotICAgIG1Mb25nTmFtZU1hcC5pbnNlcnQoc3RkOjptYXA8c3Rk
OjpzdHJpbmcsIHN0ZDo6c3RyaW5nPjo6dmFsdWVfdHlwZSgKLSAgICAgICAgb3JpZ2luYWxOYW1l
LCBtYXBwZWROYW1lKSk7Ci19Ci0KLXNpemVfdCBMb25nTmFtZU1hcDo6U2l6ZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1Mb25nTmFtZU1hcC5zaXplKCk7Ci19Ci0KLU1hcExvbmdWYXJpYWJsZU5h
bWVzOjpNYXBMb25nVmFyaWFibGVOYW1lcyhMb25nTmFtZU1hcCogZ2xvYmFsTWFwKQotewotICAg
IEFTU0VSVChnbG9iYWxNYXApOwotICAgIG1HbG9iYWxNYXAgPSBnbG9iYWxNYXA7Ci19Ci0KLXZv
aWQgTWFwTG9uZ1ZhcmlhYmxlTmFtZXM6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIHN5bWJv
bCkKLXsKLSAgICBBU1NFUlQoc3ltYm9sICE9IE5VTEwpOwotICAgIGlmIChzeW1ib2wtPmdldFN5
bWJvbCgpLnNpemUoKSA+IE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFKSB7Ci0gICAgICAg
IHN3aXRjaCAoc3ltYm9sLT5nZXRRdWFsaWZpZXIoKSkgewotICAgICAgICAgIGNhc2UgRXZxVmFy
eWluZ0luOgotICAgICAgICAgIGNhc2UgRXZxVmFyeWluZ091dDoKLSAgICAgICAgICBjYXNlIEV2
cUludmFyaWFudFZhcnlpbmdJbjoKLSAgICAgICAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdP
dXQ6Ci0gICAgICAgICAgY2FzZSBFdnFVbmlmb3JtOgotICAgICAgICAgICAgc3ltYm9sLT5zZXRT
eW1ib2woCi0gICAgICAgICAgICAgICAgbWFwR2xvYmFsTG9uZ05hbWUoc3ltYm9sLT5nZXRTeW1i
b2woKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIHN5bWJvbC0+c2V0U3ltYm9sKAotICAgICAgICAgICAgICAgIG1hcExvbmdOYW1lKHN5bWJv
bC0+Z2V0SWQoKSwgc3ltYm9sLT5nZXRTeW1ib2woKSwgZmFsc2UpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9OwotICAgIH0KLX0KLQotVFN0cmluZyBNYXBMb25nVmFyaWFibGVOYW1l
czo6bWFwR2xvYmFsTG9uZ05hbWUoY29uc3QgVFN0cmluZyYgbmFtZSkKLXsKLSAgICBBU1NFUlQo
bUdsb2JhbE1hcCk7Ci0gICAgY29uc3QgY2hhciogbWFwcGVkTmFtZSA9IG1HbG9iYWxNYXAtPkZp
bmQobmFtZS5jX3N0cigpKTsKLSAgICBpZiAobWFwcGVkTmFtZSAhPSBOVUxMKQotICAgICAgICBy
ZXR1cm4gbWFwcGVkTmFtZTsKLSAgICBzaXplX3QgaWQgPSBtR2xvYmFsTWFwLT5TaXplKCk7Ci0g
ICAgVFN0cmluZyBydCA9IG1hcExvbmdOYW1lKGlkLCBuYW1lLCB0cnVlKTsKLSAgICBtR2xvYmFs
TWFwLT5JbnNlcnQobmFtZS5jX3N0cigpLCBydC5jX3N0cigpKTsKLSAgICByZXR1cm4gcnQ7Ci19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9u
Z1ZhcmlhYmxlTmFtZXMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9N
YXBMb25nVmFyaWFibGVOYW1lcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDJm
ZjgyNjEzYzE4ZTA0NzdmMjRhNGY2NmIwZDM3YmE2MTIxMTllLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAs
MCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9NQVBfTE9OR19WQVJJ
QUJMRV9OQU1FU19IXwotI2RlZmluZSBDT01QSUxFUl9NQVBfTE9OR19WQVJJQUJMRV9OQU1FU19I
XwotCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCi0KLSNpbmNsdWRlICJjb21waWxl
ci9pbnRlcm1lZGlhdGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9WYXJpYWJsZUluZm8uaCIKLQot
Ly8gVGhpcyBzaXplIGRvZXMgbm90IGluY2x1ZGUgJ1wwJyBpbiB0aGUgZW5kLgotI2RlZmluZSBN
QVhfU0hPUlRFTkVEX0lERU5USUZJRVJfU0laRSAzMgotCi0vLyBUaGlzIGlzIGEgcmVmLWNvdW50
ZWQgc2luZ2xldG9uLiBHZXRJbnN0YW5jZSgpIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZQotLy8g
c2luZ2xldG9uLCBhbmQgYWZ0ZXIgdXNlLCBjYWxsIFJlbGVhc2UoKS4gR2V0SW5zdGFuY2UoKSBh
bmQgUmVsZWFzZSgpIHNob3VsZAotLy8gYmUgcGFpcmVkLgotY2xhc3MgTG9uZ05hbWVNYXAgewot
cHVibGljOgotICAgIHN0YXRpYyBMb25nTmFtZU1hcCogR2V0SW5zdGFuY2UoKTsKLSAgICB2b2lk
IFJlbGVhc2UoKTsKLQotICAgIC8vIFJldHVybiB0aGUgbWFwcGVkIG5hbWUgaWYgPG9yaWdpbmFs
TmFtZSwgbWFwcGVkTmFtZT4gaXMgaW4gdGhlIG1hcDsKLSAgICAvLyBvdGhlcndpc2UsIHJldHVy
biBOVUxMLgotICAgIGNvbnN0IGNoYXIqIEZpbmQoY29uc3QgY2hhciogb3JpZ2luYWxOYW1lKSBj
b25zdDsKLQotICAgIC8vIEluc2VydCBhIHBhaXIgaW50byB0aGUgbWFwLgotICAgIHZvaWQgSW5z
ZXJ0KGNvbnN0IGNoYXIqIG9yaWdpbmFsTmFtZSwgY29uc3QgY2hhciogbWFwcGVkTmFtZSk7Ci0K
LSAgICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBtYXAuCi0gICAgc2l6
ZV90IFNpemUoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBMb25nTmFtZU1hcCgpOwotICAgIH5M
b25nTmFtZU1hcCgpOwotCi0gICAgc2l6ZV90IHJlZkNvdW50OwotICAgIHN0ZDo6bWFwPHN0ZDo6
c3RyaW5nLCBzdGQ6OnN0cmluZz4gbUxvbmdOYW1lTWFwOwotfTsKLQotLy8gVHJhdmVyc2VzIGlu
dGVybWVkaWF0ZSB0cmVlIHRvIG1hcCBhdHRyaWJ1dGVzIGFuZCB1bmlmb3JtcyBuYW1lcyB0aGF0
IGFyZQotLy8gbG9uZ2VyIHRoYW4gTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJWkUgdG8gTUFY
X1NIT1JURU5FRF9JREVOVElGSUVSX1NJWkUuCi1jbGFzcyBNYXBMb25nVmFyaWFibGVOYW1lcyA6
IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKLXB1YmxpYzoKLSAgICBNYXBMb25nVmFyaWFibGVO
YW1lcyhMb25nTmFtZU1hcCogZ2xvYmFsTWFwKTsKLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5
bWJvbChUSW50ZXJtU3ltYm9sKik7Ci0KLXByaXZhdGU6Ci0gICAgVFN0cmluZyBtYXBHbG9iYWxM
b25nTmFtZShjb25zdCBUU3RyaW5nJiBuYW1lKTsKLQotICAgIExvbmdOYW1lTWFwKiBtR2xvYmFs
TWFwOwotfTsKLQotI2VuZGlmICAvLyBDT01QSUxFUl9NQVBfTE9OR19WQVJJQUJMRV9OQU1FU19I
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL05vZGVT
ZWFyY2guaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Ob2RlU2VhcmNo
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3ZTQ3MWRiYmM0OWUxZGQ5MjM1MjBk
ZjI0MDNkNjk3Y2JhNzI3MWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL05vZGVTZWFyY2gu
aAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0vLyBO
b2RlU2VhcmNoLmg6IFV0aWxpdGllcyBmb3Igc2VhcmNoaW5nIHRyYW5zbGF0b3Igbm9kZSBncmFw
aHMKLS8vCi0KLSNpZm5kZWYgVFJBTlNMQVRPUl9OT0RFU0VBUkNIX0hfCi0jZGVmaW5lIFRSQU5T
TEFUT1JfTk9ERVNFQVJDSF9IXwotCi1uYW1lc3BhY2Ugc2gKLXsKLQotdGVtcGxhdGUgPGNsYXNz
IFBhcmVudD4KLWNsYXNzIE5vZGVTZWFyY2hUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZl
cnNlcgotewotICBwdWJsaWM6Ci0gICAgTm9kZVNlYXJjaFRyYXZlcnNlcigpCi0gICAgICAgIDog
bUZvdW5kKGZhbHNlKQotICAgIHt9Ci0KLSAgICBib29sIGZvdW5kKCkgY29uc3QgeyByZXR1cm4g
bUZvdW5kOyB9Ci0KLSAgICBzdGF0aWMgYm9vbCBzZWFyY2goVEludGVybU5vZGUgKm5vZGUpCi0g
ICAgewotICAgICAgICBQYXJlbnQgc2VhcmNoVHJhdmVyc2VyOwotICAgICAgICBub2RlLT50cmF2
ZXJzZSgmc2VhcmNoVHJhdmVyc2VyKTsKLSAgICAgICAgcmV0dXJuIHNlYXJjaFRyYXZlcnNlci5m
b3VuZCgpOwotICAgIH0KLQotICBwcm90ZWN0ZWQ6Ci0gICAgYm9vbCBtRm91bmQ7Ci19OwotCi1j
bGFzcyBGaW5kRGlzY2FyZCA6IHB1YmxpYyBOb2RlU2VhcmNoVHJhdmVyc2VyPEZpbmREaXNjYXJk
PgotewotICBwdWJsaWM6Ci0gICAgdmlydHVhbCBib29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0
LCBUSW50ZXJtQnJhbmNoICpub2RlKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChub2RlLT5nZXRG
bG93T3AoKSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgRU9wS2lsbDoKLSAgICAgICAgICAg
IG1Gb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGRlZmF1bHQ6
IGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuICFtRm91bmQ7Ci0gICAgfQotfTsK
LQotY2xhc3MgRmluZFNpZGVFZmZlY3RSZXdyaXRpbmcgOiBwdWJsaWMgTm9kZVNlYXJjaFRyYXZl
cnNlcjxGaW5kU2lkZUVmZmVjdFJld3JpdGluZz4KLXsKLSAgcHVibGljOgotICAgIHZpcnR1YWwg
Ym9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm9kZSkKLSAgICB7
Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKLSAgICAgICAgewotICAgICAgICAgIGNh
c2UgRU9wTG9naWNhbE9yOgotICAgICAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDoKLSAgICAgICAg
ICAgIGlmIChub2RlLT5nZXRSaWdodCgpLT5oYXNTaWRlRWZmZWN0cygpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG1Gb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcmV0dXJuICFtRm91bmQ7Ci0gICAgfQotfTsKLQotfQotCi0jZW5kaWYgLy8gVFJBTlNM
QVRPUl9OT0RFU0VBUkNIX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvT3V0cHV0RVNTTC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvT3V0cHV0RVNTTC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMy
MDQ4ZjFjZWM0YWVjZTZhMzAxYTViMGYxNDBiYzgxOTI0Mzk3OTAuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL091dHB1dEVTU0wuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEVTU0wuaCIKLQot
VE91dHB1dEVTU0w6OlRPdXRwdXRFU1NMKFRJbmZvU2lua0Jhc2UmIG9ialNpbmssCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgU2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0
cmF0ZWd5LAotICAgICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1
bmN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKLSAgICA6IFRP
dXRwdXRHTFNMQmFzZShvYmpTaW5rLCBjbGFtcGluZ1N0cmF0ZWd5LCBoYXNoRnVuY3Rpb24sIG5h
bWVNYXAsIHN5bWJvbFRhYmxlKQotewotfQotCi1ib29sIFRPdXRwdXRFU1NMOjp3cml0ZVZhcmlh
YmxlUHJlY2lzaW9uKFRQcmVjaXNpb24gcHJlY2lzaW9uKQotewotICAgIGlmIChwcmVjaXNpb24g
PT0gRWJwVW5kZWZpbmVkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBUSW5mb1NpbmtC
YXNlJiBvdXQgPSBvYmpTaW5rKCk7Ci0gICAgb3V0IDw8IGdldFByZWNpc2lvblN0cmluZyhwcmVj
aXNpb24pOwotICAgIHJldHVybiB0cnVlOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEVTU0wuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9PdXRwdXRFU1NMLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDA1ZGI5NmU0OTc5MTZkYmM5ZjY2ZDkyMGIwMmNjZGIyYjk4ZDJiMWMuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL091dHB1dEVTU0wuaAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAg
QEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ1JPU1NDT01QSUxFUkdMU0xfT1VUUFVU
RVNTTF9IXwotI2RlZmluZSBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRFU1NMX0hfCi0KLSNpbmNs
dWRlICJjb21waWxlci9PdXRwdXRHTFNMQmFzZS5oIgotCi1jbGFzcyBUT3V0cHV0RVNTTCA6IHB1
YmxpYyBUT3V0cHV0R0xTTEJhc2UKLXsKLXB1YmxpYzoKLSAgICBUT3V0cHV0RVNTTChUSW5mb1Np
bmtCYXNlJiBvYmpTaW5rLAotICAgICAgICAgICAgICAgIFNoQXJyYXlJbmRleENsYW1waW5nU3Ry
YXRlZ3kgY2xhbXBpbmdTdHJhdGVneSwKLSAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0
IGhhc2hGdW5jdGlvbiwKLSAgICAgICAgICAgICAgICBOYW1lTWFwJiBuYW1lTWFwLAotICAgICAg
ICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpOwotCi1wcm90ZWN0ZWQ6Ci0gICAg
dmlydHVhbCBib29sIHdyaXRlVmFyaWFibGVQcmVjaXNpb24oVFByZWNpc2lvbiBwcmVjaXNpb24p
OwotfTsKLQotI2VuZGlmICAvLyBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRFU1NMX0hfCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTC5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTC5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwYTQ1MWMwZDc2ZWMwZDUwMzAwZTUyYmIz
YzUwNTI2NWEzZjY3MTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lu
Y2x1ZGUgImNvbXBpbGVyL091dHB1dEdMU0wuaCIKLQotVE91dHB1dEdMU0w6OlRPdXRwdXRHTFNM
KFRJbmZvU2lua0Jhc2UmIG9ialNpbmssCi0gICAgICAgICAgICAgICAgICAgICAgICAgU2hBcnJh
eUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAotICAgICAgICAgICAgICAg
ICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAotICAgICAgICAgICAgICAg
ICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgVFN5
bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKLSAgICA6IFRPdXRwdXRHTFNMQmFzZShvYmpTaW5rLCBj
bGFtcGluZ1N0cmF0ZWd5LCBoYXNoRnVuY3Rpb24sIG5hbWVNYXAsIHN5bWJvbFRhYmxlKQotewot
fQotCi1ib29sIFRPdXRwdXRHTFNMOjp3cml0ZVZhcmlhYmxlUHJlY2lzaW9uKFRQcmVjaXNpb24p
Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFRPdXRwdXRHTFNMOjp2aXNpdFN5bWJv
bChUSW50ZXJtU3ltYm9sKiBub2RlKQotewotICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNp
bmsoKTsKLQotICAgIGlmIChub2RlLT5nZXRTeW1ib2woKSA9PSAiZ2xfRnJhZ0RlcHRoRVhUIikK
LSAgICB7Ci0gICAgICAgIG91dCA8PCAiZ2xfRnJhZ0RlcHRoIjsKLSAgICB9Ci0gICAgZWxzZQot
ICAgIHsKLSAgICAgICAgVE91dHB1dEdMU0xCYXNlOjp2aXNpdFN5bWJvbChub2RlKTsKLSAgICB9
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0
cHV0R0xTTC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdM
U0wuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE2OGFjODEwMzBlOTMzYjQ4MzI4
OTM1MGVmYzM1MzI3OTRkZTg2OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xT
TC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
I2lmbmRlZiBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRHTFNMX0hfCi0jZGVmaW5lIENST1NTQ09N
UElMRVJHTFNMX09VVFBVVEdMU0xfSF8KLQotI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEdMU0xC
YXNlLmgiCi0KLWNsYXNzIFRPdXRwdXRHTFNMIDogcHVibGljIFRPdXRwdXRHTFNMQmFzZQotewot
cHVibGljOgotICAgIFRPdXRwdXRHTFNMKFRJbmZvU2lua0Jhc2UmIG9ialNpbmssCi0gICAgICAg
ICAgICAgICAgU2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAot
ICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAotICAgICAgICAg
ICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCi0gICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBz
eW1ib2xUYWJsZSk7Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIGJvb2wgd3JpdGVWYXJpYWJs
ZVByZWNpc2lvbihUUHJlY2lzaW9uKTsKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVElu
dGVybVN5bWJvbCogbm9kZSk7Ci19OwotCi0jZW5kaWYgIC8vIENST1NTQ09NUElMRVJHTFNMX09V
VFBVVEdMU0xfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9PdXRwdXRHTFNMQmFzZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvT3V0cHV0R0xTTEJhc2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBi
OTBiZDY3ZWNkNzQyMGU5ZTQ4YTFlYWQxZTQzZmRiYWY1ODA4ZTBhLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4MTcgKzAs
MCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEdMU0xC
YXNlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKLQotI2luY2x1ZGUgPGNmbG9hdD4K
LQotbmFtZXNwYWNlCi17Ci1UU3RyaW5nIGFycmF5QnJhY2tldHMoY29uc3QgVFR5cGUmIHR5cGUp
Ci17Ci0gICAgQVNTRVJUKHR5cGUuaXNBcnJheSgpKTsKLSAgICBUSW5mb1NpbmtCYXNlIG91dDsK
LSAgICBvdXQgPDwgIlsiIDw8IHR5cGUuZ2V0QXJyYXlTaXplKCkgPDwgIl0iOwotICAgIHJldHVy
biBUU3RyaW5nKG91dC5jX3N0cigpKTsKLX0KLQotYm9vbCBpc1NpbmdsZVN0YXRlbWVudChUSW50
ZXJtTm9kZSogbm9kZSkgewotICAgIGlmIChjb25zdCBUSW50ZXJtQWdncmVnYXRlKiBhZ2dyZWdh
dGUgPSBub2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChhZ2dy
ZWdhdGUtPmdldE9wKCkgIT0gRU9wRnVuY3Rpb24pICYmCi0gICAgICAgICAgICAgICAoYWdncmVn
YXRlLT5nZXRPcCgpICE9IEVPcFNlcXVlbmNlKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoY29uc3Qg
VEludGVybVNlbGVjdGlvbiogc2VsZWN0aW9uID0gbm9kZS0+Z2V0QXNTZWxlY3Rpb25Ob2RlKCkp
Ci0gICAgewotICAgICAgICAvLyBUZXJuYXJ5IG9wZXJhdG9ycyBhcmUgdXN1YWxseSBwYXJ0IG9m
IGFuIGFzc2lnbm1lbnQgb3BlcmF0b3IuCi0gICAgICAgIC8vIFRoaXMgaGFuZGxlcyB0aG9zZSBy
YXJlIGNhc2VzIGluIHdoaWNoIHRoZXkgYXJlIGFsbCBieSB0aGVtc2VsdmVzLgotICAgICAgICBy
ZXR1cm4gc2VsZWN0aW9uLT51c2VzVGVybmFyeU9wZXJhdG9yKCk7Ci0gICAgfQotICAgIGVsc2Ug
aWYgKG5vZGUtPmdldEFzTG9vcE5vZGUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci19ICAvLyBuYW1lc3BhY2UKLQotVE91dHB1dEdM
U0xCYXNlOjpUT3V0cHV0R0xTTEJhc2UoVEluZm9TaW5rQmFzZSYgb2JqU2luaywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNoQXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kgY2xh
bXBpbmdTdHJhdGVneSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1
bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TmFtZU1hcCYgbmFtZU1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1i
b2xUYWJsZSYgc3ltYm9sVGFibGUpCi0gICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIHRydWUs
IHRydWUpLAotICAgICAgbU9ialNpbmsob2JqU2luayksCi0gICAgICBtRGVjbGFyaW5nVmFyaWFi
bGVzKGZhbHNlKSwKLSAgICAgIG1DbGFtcGluZ1N0cmF0ZWd5KGNsYW1waW5nU3RyYXRlZ3kpLAot
ICAgICAgbUhhc2hGdW5jdGlvbihoYXNoRnVuY3Rpb24pLAotICAgICAgbU5hbWVNYXAobmFtZU1h
cCksCi0gICAgICBtU3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCi17Ci19Ci0KLXZvaWQgVE91dHB1
dEdMU0xCYXNlOjp3cml0ZVRyaXBsZXQoVmlzaXQgdmlzaXQsIGNvbnN0IGNoYXIqIHByZVN0ciwg
Y29uc3QgY2hhciogaW5TdHIsIGNvbnN0IGNoYXIqIHBvc3RTdHIpCi17Ci0gICAgVEluZm9TaW5r
QmFzZSYgb3V0ID0gb2JqU2luaygpOwotICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCAmJiBwcmVT
dHIpCi0gICAgewotICAgICAgICBvdXQgPDwgcHJlU3RyOwotICAgIH0KLSAgICBlbHNlIGlmICh2
aXNpdCA9PSBJblZpc2l0ICYmIGluU3RyKQotICAgIHsKLSAgICAgICAgb3V0IDw8IGluU3RyOwot
ICAgIH0KLSAgICBlbHNlIGlmICh2aXNpdCA9PSBQb3N0VmlzaXQgJiYgcG9zdFN0cikKLSAgICB7
Ci0gICAgICAgIG91dCA8PCBwb3N0U3RyOwotICAgIH0KLX0KLQotdm9pZCBUT3V0cHV0R0xTTEJh
c2U6OndyaXRlVmFyaWFibGVUeXBlKGNvbnN0IFRUeXBlJiB0eXBlKQotewotICAgIFRJbmZvU2lu
a0Jhc2UmIG91dCA9IG9ialNpbmsoKTsKLSAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHR5cGUu
Z2V0UXVhbGlmaWVyKCk7Ci0gICAgLy8gVE9ETyhhbG9rcCk6IFZhbGlkYXRlIHF1YWxpZmllciBm
b3IgdmFyaWFibGUgZGVjbGFyYXRpb25zLgotICAgIGlmICgocXVhbGlmaWVyICE9IEV2cVRlbXBv
cmFyeSkgJiYgKHF1YWxpZmllciAhPSBFdnFHbG9iYWwpKQotICAgICAgICBvdXQgPDwgdHlwZS5n
ZXRRdWFsaWZpZXJTdHJpbmcoKSA8PCAiICI7Ci0gICAgLy8gRGVjbGFyZSB0aGUgc3RydWN0IGlm
IHdlIGhhdmUgbm90IGRvbmUgc28gYWxyZWFkeS4KLSAgICBpZiAoKHR5cGUuZ2V0QmFzaWNUeXBl
KCkgPT0gRWJ0U3RydWN0KSAmJiAhc3RydWN0RGVjbGFyZWQodHlwZS5nZXRTdHJ1Y3QoKSkpCi0g
ICAgewotICAgICAgICBkZWNsYXJlU3RydWN0KHR5cGUuZ2V0U3RydWN0KCkpOwotICAgIH0KLSAg
ICBlbHNlCi0gICAgewotICAgICAgICBpZiAod3JpdGVWYXJpYWJsZVByZWNpc2lvbih0eXBlLmdl
dFByZWNpc2lvbigpKSkKLSAgICAgICAgICAgIG91dCA8PCAiICI7Ci0gICAgICAgIG91dCA8PCBn
ZXRUeXBlTmFtZSh0eXBlKTsKLSAgICB9Ci19Ci0KLXZvaWQgVE91dHB1dEdMU0xCYXNlOjp3cml0
ZUZ1bmN0aW9uUGFyYW1ldGVycyhjb25zdCBUSW50ZXJtU2VxdWVuY2UmIGFyZ3MpCi17Ci0gICAg
VEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOwotICAgIGZvciAoVEludGVybVNlcXVlbmNl
Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gYXJncy5iZWdpbigpOwotICAgICAgICAgaXRlciAhPSBh
cmdzLmVuZCgpOyArK2l0ZXIpCi0gICAgewotICAgICAgICBjb25zdCBUSW50ZXJtU3ltYm9sKiBh
cmcgPSAoKml0ZXIpLT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAgICAgICAgQVNTRVJUKGFyZyAhPSBO
VUxMKTsKLQotICAgICAgICBjb25zdCBUVHlwZSYgdHlwZSA9IGFyZy0+Z2V0VHlwZSgpOwotICAg
ICAgICB3cml0ZVZhcmlhYmxlVHlwZSh0eXBlKTsKLQotICAgICAgICBjb25zdCBUU3RyaW5nJiBu
YW1lID0gYXJnLT5nZXRTeW1ib2woKTsKLSAgICAgICAgaWYgKCFuYW1lLmVtcHR5KCkpCi0gICAg
ICAgICAgICBvdXQgPDwgIiAiIDw8IGhhc2hOYW1lKG5hbWUpOwotICAgICAgICBpZiAodHlwZS5p
c0FycmF5KCkpCi0gICAgICAgICAgICBvdXQgPDwgYXJyYXlCcmFja2V0cyh0eXBlKTsKLQotICAg
ICAgICAvLyBQdXQgYSBjb21tYSBpZiB0aGlzIGlzIG5vdCB0aGUgbGFzdCBhcmd1bWVudC4KLSAg
ICAgICAgaWYgKGl0ZXIgIT0gYXJncy5lbmQoKSAtIDEpCi0gICAgICAgICAgICBvdXQgPDwgIiwg
IjsKLSAgICB9Ci19Ci0KLWNvbnN0IENvbnN0YW50VW5pb24qIFRPdXRwdXRHTFNMQmFzZTo6d3Jp
dGVDb25zdGFudFVuaW9uKGNvbnN0IFRUeXBlJiB0eXBlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29uc3RhbnRVbmlvbiog
cENvbnN0VW5pb24pCi17Ci0gICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOwotCi0g
ICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQotICAgIHsKLSAgICAgICAg
Y29uc3QgVFN0cnVjdHVyZSogc3RydWN0dXJlID0gdHlwZS5nZXRTdHJ1Y3QoKTsKLSAgICAgICAg
b3V0IDw8IGhhc2hOYW1lKHN0cnVjdHVyZS0+bmFtZSgpKSA8PCAiKCI7Ci0KLSAgICAgICAgY29u
c3QgVEZpZWxkTGlzdCYgZmllbGRzID0gc3RydWN0dXJlLT5maWVsZHMoKTsKLSAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGNvbnN0IFRUeXBlKiBmaWVsZFR5cGUgPSBmaWVsZHNbaV0tPnR5cGUoKTsKLSAgICAg
ICAgICAgIEFTU0VSVChmaWVsZFR5cGUgIT0gTlVMTCk7Ci0gICAgICAgICAgICBwQ29uc3RVbmlv
biA9IHdyaXRlQ29uc3RhbnRVbmlvbigqZmllbGRUeXBlLCBwQ29uc3RVbmlvbik7Ci0gICAgICAg
ICAgICBpZiAoaSAhPSBmaWVsZHMuc2l6ZSgpIC0gMSkgb3V0IDw8ICIsICI7Ci0gICAgICAgIH0K
LSAgICAgICAgb3V0IDw8ICIpIjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgc2l6
ZV90IHNpemUgPSB0eXBlLmdldE9iamVjdFNpemUoKTsKLSAgICAgICAgYm9vbCB3cml0ZVR5cGUg
PSBzaXplID4gMTsKLSAgICAgICAgaWYgKHdyaXRlVHlwZSkgb3V0IDw8IGdldFR5cGVOYW1lKHR5
cGUpIDw8ICIoIjsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2ksICsr
cENvbnN0VW5pb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAocENvbnN0VW5pb24t
PmdldFR5cGUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0
OiBvdXQgPDwgc3RkOjptaW4oRkxUX01BWCwgc3RkOjptYXgoLUZMVF9NQVgsIHBDb25zdFVuaW9u
LT5nZXRGQ29uc3QoKSkpOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEVidEludDogb3V0
IDw8IHBDb25zdFVuaW9uLT5nZXRJQ29uc3QoKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBFYnRCb29sOiBvdXQgPDwgcENvbnN0VW5pb24tPmdldEJDb25zdCgpOyBicmVhazsKLSAgICAg
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKGkgIT0gc2l6ZSAtIDEpIG91dCA8PCAiLCAiOwotICAgICAgICB9Ci0gICAgICAg
IGlmICh3cml0ZVR5cGUpIG91dCA8PCAiKSI7Ci0gICAgfQotICAgIHJldHVybiBwQ29uc3RVbmlv
bjsKLX0KLQotdm9pZCBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wq
IG5vZGUpCi17Ci0gICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOwotICAgIGlmICht
TG9vcFVucm9sbC5OZWVkc1RvUmVwbGFjZVN5bWJvbFdpdGhWYWx1ZShub2RlKSkKLSAgICAgICAg
b3V0IDw8IG1Mb29wVW5yb2xsLkdldExvb3BJbmRleFZhbHVlKG5vZGUpOwotICAgIGVsc2UKLSAg
ICAgICAgb3V0IDw8IGhhc2hWYXJpYWJsZU5hbWUobm9kZS0+Z2V0U3ltYm9sKCkpOwotCi0gICAg
aWYgKG1EZWNsYXJpbmdWYXJpYWJsZXMgJiYgbm9kZS0+Z2V0VHlwZSgpLmlzQXJyYXkoKSkKLSAg
ICAgICAgb3V0IDw8IGFycmF5QnJhY2tldHMobm9kZS0+Z2V0VHlwZSgpKTsKLX0KLQotdm9pZCBU
T3V0cHV0R0xTTEJhc2U6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiog
bm9kZSkKLXsKLSAgICB3cml0ZUNvbnN0YW50VW5pb24obm9kZS0+Z2V0VHlwZSgpLCBub2RlLT5n
ZXRVbmlvbkFycmF5UG9pbnRlcigpKTsKLX0KLQotYm9vbCBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0
QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBub2RlKQotewotICAgIGJvb2wgdmlz
aXRDaGlsZHJlbiA9IHRydWU7Ci0gICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOwot
ICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKLSAgICB7Ci0gICAgICAgIGNhc2UgRU9wSW5pdGlh
bGl6ZToKLSAgICAgICAgICAgIGlmICh2aXNpdCA9PSBJblZpc2l0KQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIG91dCA8PCAiID0gIjsKLSAgICAgICAgICAgICAgICAvLyBSSFMgb2Yg
aW5pdGlhbGl6ZSBpcyBub3QgYmVpbmcgZGVjbGFyZWQuCi0gICAgICAgICAgICAgICAgbURlY2xh
cmluZ1ZhcmlhYmxlcyA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgRU9wQXNzaWduOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiA9ICIs
ICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjogd3JpdGVUcmlwbGV0KHZp
c2l0LCAiKCIsICIgKz0gIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wU3ViQXNzaWdu
OiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAtPSAiLCAiKSIpOyBicmVhazsKLSAgICAgICAg
Y2FzZSBFT3BEaXZBc3NpZ246IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiIC89ICIsICIpIik7
IGJyZWFrOwotICAgICAgICAvLyBOb3RpY2UgdGhlIGZhbGwtdGhyb3VnaC4KLSAgICAgICAgY2Fz
ZSBFT3BNdWxBc3NpZ246IAotICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWdu
OgotICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOgotICAgICAgICBjYXNl
IEVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOgotICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVz
TWF0cml4QXNzaWduOgotICAgICAgICAgICAgd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgKj0g
IiwgIikiKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wSW5kZXhEaXJl
Y3Q6Ci0gICAgICAgICAgICB3cml0ZVRyaXBsZXQodmlzaXQsIE5VTEwsICJbIiwgIl0iKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6Ci0gICAgICAg
ICAgICBpZiAobm9kZS0+Z2V0QWRkSW5kZXhDbGFtcCgpKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGlmICh2aXNpdCA9PSBJblZpc2l0KQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKG1DbGFtcGluZ1N0cmF0ZWd5ID09IFNIX0NMQU1QX1dJVEhfQ0xB
TVBfSU5UUklOU0lDKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIltpbnQoY2xh
bXAoZmxvYXQoIjsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG91dCA8PCAiW3dlYmdsX2ludF9jbGFtcCgiOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09
IFBvc3RWaXNpdCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBt
YXhTaXplOwotICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgKmxlZnQgPSBub2RlLT5n
ZXRMZWZ0KCk7Ci0gICAgICAgICAgICAgICAgICAgIFRUeXBlIGxlZnRUeXBlID0gbGVmdC0+Z2V0
VHlwZSgpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5pc0FycmF5KCkpCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBzaGFkZXIg
d2lsbCBmYWlsIHZhbGlkYXRpb24gaWYgdGhlIGFycmF5IGxlbmd0aCBpcyBub3QgPiAwLgotICAg
ICAgICAgICAgICAgICAgICAgICAgbWF4U2l6ZSA9IGxlZnRUeXBlLmdldEFycmF5U2l6ZSgpIC0g
MTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1heFNpemUgPSBsZWZ0
VHlwZS5nZXROb21pbmFsU2l6ZSgpIC0gMTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChtQ2xhbXBpbmdTdHJhdGVneSA9PSBTSF9DTEFNUF9XSVRIX0NM
QU1QX0lOVFJJTlNJQykgewotICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIpLCAwLjAs
IGZsb2F0KCIgPDwgbWF4U2l6ZSA8PCAiKSkpXSI7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgMCwgIiA8PCBtYXhTaXplIDw8
ICIpXSI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
d3JpdGVUcmlwbGV0KHZpc2l0LCBOVUxMLCAiWyIsICJdIik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdFN0cnVjdDoKLSAgICAg
ICAgICAgIGlmICh2aXNpdCA9PSBJblZpc2l0KQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIC8vIEhlcmUgd2UgYXJlIHdyaXRpbmcgb3V0ICJmb28uYmFyIiwgd2hlcmUgImZvbyIgaXMg
c3RydWN0Ci0gICAgICAgICAgICAgICAgLy8gYW5kICJiYXIiIGlzIGZpZWxkLiBJbiBBU1QsIGl0
IGlzIHJlcHJlc2VudGVkIGFzIGEgYmluYXJ5Ci0gICAgICAgICAgICAgICAgLy8gbm9kZSwgd2hl
cmUgbGVmdCBjaGlsZCByZXByZXNlbnRzICJmb28iIGFuZCByaWdodCBjaGlsZCAiYmFyIi4KLSAg
ICAgICAgICAgICAgICAvLyBUaGUgbm9kZSBpdHNlbGYgcmVwcmVzZW50cyAiLiIuIFRoZSBzdHJ1
Y3QgZmllbGQgImJhciIgaXMKLSAgICAgICAgICAgICAgICAvLyBhY3R1YWxseSBzdG9yZWQgYXMg
YW4gaW5kZXggaW50byBUU3RydWN0dXJlOjpmaWVsZHMuCi0gICAgICAgICAgICAgICAgb3V0IDw8
ICIuIjsKLSAgICAgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBub2Rl
LT5nZXRMZWZ0KCktPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKLSAgICAgICAgICAgICAgICBjb25z
dCBUSW50ZXJtQ29uc3RhbnRVbmlvbiogaW5kZXggPSBub2RlLT5nZXRSaWdodCgpLT5nZXRBc0Nv
bnN0YW50VW5pb24oKTsKLSAgICAgICAgICAgICAgICBjb25zdCBURmllbGQqIGZpZWxkID0gc3Ry
dWN0dXJlLT5maWVsZHMoKVtpbmRleC0+Z2V0SUNvbnN0KDApXTsKLQotICAgICAgICAgICAgICAg
IFRTdHJpbmcgZmllbGROYW1lID0gZmllbGQtPm5hbWUoKTsKLSAgICAgICAgICAgICAgICBpZiAo
IW1TeW1ib2xUYWJsZS5maW5kQnVpbHRJbihzdHJ1Y3R1cmUtPm5hbWUoKSkpCi0gICAgICAgICAg
ICAgICAgICAgIGZpZWxkTmFtZSA9IGhhc2hOYW1lKGZpZWxkTmFtZSk7Ci0KLSAgICAgICAgICAg
ICAgICBvdXQgPDwgZmllbGROYW1lOwotICAgICAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBm
YWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVP
cFZlY3RvclN3aXp6bGU6Ci0gICAgICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIi4iOwotICAgICAgICAgICAgICAgIFRJ
bnRlcm1BZ2dyZWdhdGUqIHJpZ2h0Q2hpbGQgPSBub2RlLT5nZXRSaWdodCgpLT5nZXRBc0FnZ3Jl
Z2F0ZSgpOwotICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSByaWdo
dENoaWxkLT5nZXRTZXF1ZW5jZSgpOwotICAgICAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVl
bmNlOjppdGVyYXRvciBzaXQgPSBzZXF1ZW5jZS5iZWdpbigpOyBzaXQgIT0gc2VxdWVuY2UuZW5k
KCk7ICsrc2l0KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgVEludGVy
bUNvbnN0YW50VW5pb24qIGVsZW1lbnQgPSAoKnNpdCktPmdldEFzQ29uc3RhbnRVbmlvbigpOwot
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0
SW50KTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnQtPmdldE5vbWluYWxTaXpl
KCkgPT0gMSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbnN0YW50VW5pb24mIGRhdGEg
PSBlbGVtZW50LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpWzBdOwotICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoZGF0YS5nZXRUeXBlKCkgPT0gRWJ0SW50KTsKLSAgICAgICAgICAgICAgICAgICAg
c3dpdGNoIChkYXRhLmdldElDb25zdCgpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIDA6IG91dCA8PCAieCI7IGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAxOiBvdXQgPDwgInkiOyBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgMjogb3V0IDw8ICJ6IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIDM6IG91dCA8PCAidyI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BBZGQ6IHdy
aXRlVHJpcGxldCh2aXNpdCwgIigiLCAiICsgIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RU9wU3ViOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAtICIsICIpIik7IGJyZWFrOwotICAg
ICAgICBjYXNlIEVPcE11bDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgKiAiLCAiKSIpOyBi
cmVhazsKLSAgICAgICAgY2FzZSBFT3BEaXY6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiIC8g
IiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTW9kOiBVTklNUExFTUVOVEVEKCk7IGJy
ZWFrOwotICAgICAgICBjYXNlIEVPcEVxdWFsOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiA9
PSAiLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDogd3JpdGVUcmlwbGV0
KHZpc2l0LCAiKCIsICIgIT0gIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTGVzc1Ro
YW46IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiIDwgIiwgIikiKTsgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRU9wR3JlYXRlclRoYW46IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiID4gIiwgIiki
KTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDogd3JpdGVUcmlwbGV0KHZp
c2l0LCAiKCIsICIgPD0gIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wR3JlYXRlclRo
YW5FcXVhbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgPj0gIiwgIikiKTsgYnJlYWs7Ci0K
LSAgICAgICAgLy8gTm90aWNlIHRoZSBmYWxsLXRocm91Z2guCi0gICAgICAgIGNhc2UgRU9wVmVj
dG9yVGltZXNTY2FsYXI6Ci0gICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXg6Ci0gICAg
ICAgIGNhc2UgRU9wTWF0cml4VGltZXNWZWN0b3I6Ci0gICAgICAgIGNhc2UgRU9wTWF0cml4VGlt
ZXNTY2FsYXI6Ci0gICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXg6Ci0gICAgICAgICAg
ICB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAqICIsICIpIik7Ci0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIs
ICIgfHwgIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjogd3JpdGVU
cmlwbGV0KHZpc2l0LCAiKCIsICIgXl4gIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9w
TG9naWNhbEFuZDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgJiYgIiwgIikiKTsgYnJlYWs7
Ci0gICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IGJyZWFrOwotICAgIH0KLQotICAgIHJl
dHVybiB2aXNpdENoaWxkcmVuOwotfQotCi1ib29sIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRVbmFy
eShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQotewotICAgIFRTdHJpbmcgcHJlU3Ry
aW5nOwotICAgIFRTdHJpbmcgcG9zdFN0cmluZyA9ICIpIjsKLQotICAgIHN3aXRjaCAobm9kZS0+
Z2V0T3AoKSkKLSAgICB7Ci0gICAgICAgIGNhc2UgRU9wTmVnYXRpdmU6IHByZVN0cmluZyA9ICIo
LSI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcFZlY3RvckxvZ2ljYWxOb3Q6IHByZVN0cmluZyA9
ICJub3QoIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDogcHJlU3RyaW5nID0g
IighIjsgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50OiBwcmVTdHJpbmcg
PSAiKCI7IHBvc3RTdHJpbmcgPSAiKyspIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wUG9zdERl
Y3JlbWVudDogcHJlU3RyaW5nID0gIigiOyBwb3N0U3RyaW5nID0gIi0tKSI7IGJyZWFrOwotICAg
ICAgICBjYXNlIEVPcFByZUluY3JlbWVudDogcHJlU3RyaW5nID0gIigrKyI7IGJyZWFrOwotICAg
ICAgICBjYXNlIEVPcFByZURlY3JlbWVudDogcHJlU3RyaW5nID0gIigtLSI7IGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgRU9wQ29udkludFRvQm9vbDoKLSAgICAgICAgY2FzZSBFT3BDb252RmxvYXRU
b0Jvb2w6Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wZXJhbmQoKS0+Z2V0VHlwZSgp
LmdldE5vbWluYWxTaXplKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSAx
OiBwcmVTdHJpbmcgPSAgImJvb2woIjsgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMjog
cHJlU3RyaW5nID0gImJ2ZWMyKCI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMzogcHJl
U3RyaW5nID0gImJ2ZWMzKCI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgNDogcHJlU3Ry
aW5nID0gImJ2ZWM0KCI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBF
T3BDb252Qm9vbFRvRmxvYXQ6Ci0gICAgICAgIGNhc2UgRU9wQ29udkludFRvRmxvYXQ6Ci0gICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wZXJhbmQoKS0+Z2V0VHlwZSgpLmdldE5vbWluYWxT
aXplKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSAxOiBwcmVTdHJpbmcg
PSAiZmxvYXQoIjsgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMjogcHJlU3RyaW5nID0g
InZlYzIoIjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAzOiBwcmVTdHJpbmcgPSAidmVj
MygiOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDQ6IHByZVN0cmluZyA9ICJ2ZWM0KCI7
IGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0lu
dDoKLSAgICAgICAgY2FzZSBFT3BDb252Qm9vbFRvSW50OgotICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGNhc2UgMTogcHJlU3RyaW5nID0gImludCgiOyAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgY2FzZSAyOiBwcmVTdHJpbmcgPSAiaXZlYzIoIjsgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgY2FzZSAzOiBwcmVTdHJpbmcgPSAiaXZlYzMoIjsgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgY2FzZSA0OiBwcmVTdHJpbmcgPSAiaXZlYzQoIjsgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wUmFkaWFuczogcHJlU3RyaW5nID0gInJhZGlh
bnMoIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wRGVncmVlczogcHJlU3RyaW5nID0gImRlZ3Jl
ZXMoIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wU2luOiBwcmVTdHJpbmcgPSAic2luKCI7IGJy
ZWFrOwotICAgICAgICBjYXNlIEVPcENvczogcHJlU3RyaW5nID0gImNvcygiOyBicmVhazsKLSAg
ICAgICAgY2FzZSBFT3BUYW46IHByZVN0cmluZyA9ICJ0YW4oIjsgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRU9wQXNpbjogcHJlU3RyaW5nID0gImFzaW4oIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9w
QWNvczogcHJlU3RyaW5nID0gImFjb3MoIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQXRhbjog
cHJlU3RyaW5nID0gImF0YW4oIjsgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BFeHA6IHByZVN0
cmluZyA9ICJleHAoIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTG9nOiBwcmVTdHJpbmcgPSAi
bG9nKCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEV4cDI6IHByZVN0cmluZyA9ICJleHAyKCI7
IGJyZWFrOwotICAgICAgICBjYXNlIEVPcExvZzI6IHByZVN0cmluZyA9ICJsb2cyKCI7IGJyZWFr
OwotICAgICAgICBjYXNlIEVPcFNxcnQ6IHByZVN0cmluZyA9ICJzcXJ0KCI7IGJyZWFrOwotICAg
ICAgICBjYXNlIEVPcEludmVyc2VTcXJ0OiBwcmVTdHJpbmcgPSAiaW52ZXJzZXNxcnQoIjsgYnJl
YWs7Ci0KLSAgICAgICAgY2FzZSBFT3BBYnM6IHByZVN0cmluZyA9ICJhYnMoIjsgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRU9wU2lnbjogcHJlU3RyaW5nID0gInNpZ24oIjsgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRU9wRmxvb3I6IHByZVN0cmluZyA9ICJmbG9vcigiOyBicmVhazsKLSAgICAgICAgY2Fz
ZSBFT3BDZWlsOiBwcmVTdHJpbmcgPSAiY2VpbCgiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BG
cmFjdDogcHJlU3RyaW5nID0gImZyYWN0KCI7IGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wTGVu
Z3RoOiBwcmVTdHJpbmcgPSAibGVuZ3RoKCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcE5vcm1h
bGl6ZTogcHJlU3RyaW5nID0gIm5vcm1hbGl6ZSgiOyBicmVhazsKLQotICAgICAgICBjYXNlIEVP
cERGZHg6IHByZVN0cmluZyA9ICJkRmR4KCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcERGZHk6
IHByZVN0cmluZyA9ICJkRmR5KCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEZ3aWR0aDogcHJl
U3RyaW5nID0gImZ3aWR0aCgiOyBicmVhazsKLQotICAgICAgICBjYXNlIEVPcEFueTogcHJlU3Ry
aW5nID0gImFueSgiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BBbGw6IHByZVN0cmluZyA9ICJh
bGwoIjsgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7Ci0g
ICAgfQotCi0gICAgaWYgKHZpc2l0ID09IFByZVZpc2l0ICYmIG5vZGUtPmdldFVzZUVtdWxhdGVk
RnVuY3Rpb24oKSkKLSAgICAgICAgcHJlU3RyaW5nID0gQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6
OkdldEVtdWxhdGVkRnVuY3Rpb25OYW1lKHByZVN0cmluZyk7Ci0gICAgd3JpdGVUcmlwbGV0KHZp
c2l0LCBwcmVTdHJpbmcuY19zdHIoKSwgTlVMTCwgcG9zdFN0cmluZy5jX3N0cigpKTsKLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRTZWxlY3Rpb24o
VmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUpCi17Ci0gICAgVEluZm9TaW5rQmFz
ZSYgb3V0ID0gb2JqU2luaygpOwotCi0gICAgaWYgKG5vZGUtPnVzZXNUZXJuYXJ5T3BlcmF0b3Io
KSkKLSAgICB7Ci0gICAgICAgIC8vIE5vdGljZSB0d28gYnJhY2tldHMgYXQgdGhlIGJlZ2lubmlu
ZyBhbmQgZW5kLiBUaGUgb3V0ZXIgb25lcwotICAgICAgICAvLyBlbmNhcHN1bGF0ZSB0aGUgd2hv
bGUgdGVybmFyeSBleHByZXNzaW9uLiBUaGlzIHByZXNlcnZlcyB0aGUKLSAgICAgICAgLy8gb3Jk
ZXIgb2YgcHJlY2VkZW5jZSB3aGVuIHRlcm5hcnkgZXhwcmVzc2lvbnMgYXJlIHVzZWQgaW4gYQot
ICAgICAgICAvLyBjb21wb3VuZCBleHByZXNzaW9uLCBpLmUuLCBjID0gMiAqIChhIDwgYiA/IDEg
OiAyKS4KLSAgICAgICAgb3V0IDw8ICIoKCI7Ci0gICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigp
LT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8ICIpID8gKCI7Ci0gICAgICAgIG5vZGUt
PmdldFRydWVCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8ICIpIDogKCI7
Ci0gICAgICAgIG5vZGUtPmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAg
IG91dCA8PCAiKSkiOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBvdXQgPDwgImlm
ICgiOwotICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAg
ICAgIG91dCA8PCAiKVxuIjsKLQotICAgICAgICBpbmNyZW1lbnREZXB0aChub2RlKTsKLSAgICAg
ICAgdmlzaXRDb2RlQmxvY2sobm9kZS0+Z2V0VHJ1ZUJsb2NrKCkpOwotCi0gICAgICAgIGlmIChu
b2RlLT5nZXRGYWxzZUJsb2NrKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAiZWxz
ZVxuIjsKLSAgICAgICAgICAgIHZpc2l0Q29kZUJsb2NrKG5vZGUtPmdldEZhbHNlQmxvY2soKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgZGVjcmVtZW50RGVwdGgoKTsKLSAgICB9Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQg
dmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCi17Ci0gICAgYm9vbCB2aXNpdENoaWxkcmVu
ID0gdHJ1ZTsKLSAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7Ci0gICAgVFN0cmlu
ZyBwcmVTdHJpbmc7Ci0gICAgYm9vbCBkZWxheWVkV3JpdGUgPSBmYWxzZTsKLSAgICBzd2l0Y2gg
KG5vZGUtPmdldE9wKCkpCi0gICAgewotICAgICAgICBjYXNlIEVPcFNlcXVlbmNlOiB7Ci0gICAg
ICAgICAgICAvLyBTY29wZSB0aGUgc2VxdWVuY2VzIGV4Y2VwdCB3aGVuIGF0IHRoZSBnbG9iYWwg
c2NvcGUuCi0gICAgICAgICAgICBpZiAoZGVwdGggPiAwKSBvdXQgPDwgIntcbiI7Ci0KLSAgICAg
ICAgICAgIGluY3JlbWVudERlcHRoKG5vZGUpOwotICAgICAgICAgICAgY29uc3QgVEludGVybVNl
cXVlbmNlJiBzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAgICAgICBmb3Ig
KFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHNlcXVlbmNlLmJlZ2luKCk7
Ci0gICAgICAgICAgICAgICAgIGl0ZXIgIT0gc2VxdWVuY2UuZW5kKCk7ICsraXRlcikKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSogbm9kZSA9ICppdGVyOwotICAg
ICAgICAgICAgICAgIEFTU0VSVChub2RlICE9IE5VTEwpOwotICAgICAgICAgICAgICAgIG5vZGUt
PnRyYXZlcnNlKHRoaXMpOwotCi0gICAgICAgICAgICAgICAgaWYgKGlzU2luZ2xlU3RhdGVtZW50
KG5vZGUpKQotICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIjtcbiI7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBkZWNyZW1lbnREZXB0aCgpOwotCi0gICAgICAgICAgICAvLyBTY29wZSB0
aGUgc2VxdWVuY2VzIGV4Y2VwdCB3aGVuIGF0IHRoZSBnbG9iYWwgc2NvcGUuCi0gICAgICAgICAg
ICBpZiAoZGVwdGggPiAwKSBvdXQgPDwgIn1cbiI7Ci0gICAgICAgICAgICB2aXNpdENoaWxkcmVu
ID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEVP
cFByb3RvdHlwZTogewotICAgICAgICAgICAgLy8gRnVuY3Rpb24gZGVjbGFyYXRpb24uCi0gICAg
ICAgICAgICBBU1NFUlQodmlzaXQgPT0gUHJlVmlzaXQpOwotICAgICAgICAgICAgd3JpdGVWYXJp
YWJsZVR5cGUobm9kZS0+Z2V0VHlwZSgpKTsKLSAgICAgICAgICAgIG91dCA8PCAiICIgPDwgaGFz
aE5hbWUobm9kZS0+Z2V0TmFtZSgpKTsKLQotICAgICAgICAgICAgb3V0IDw8ICIoIjsKLSAgICAg
ICAgICAgIHdyaXRlRnVuY3Rpb25QYXJhbWV0ZXJzKG5vZGUtPmdldFNlcXVlbmNlKCkpOwotICAg
ICAgICAgICAgb3V0IDw8ICIpIjsKLQotICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNl
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBFT3BGdW5jdGlv
bjogewotICAgICAgICAgICAgLy8gRnVuY3Rpb24gZGVmaW5pdGlvbi4KLSAgICAgICAgICAgIEFT
U0VSVCh2aXNpdCA9PSBQcmVWaXNpdCk7Ci0gICAgICAgICAgICB3cml0ZVZhcmlhYmxlVHlwZShu
b2RlLT5nZXRUeXBlKCkpOwotICAgICAgICAgICAgb3V0IDw8ICIgIiA8PCBoYXNoRnVuY3Rpb25O
YW1lKG5vZGUtPmdldE5hbWUoKSk7Ci0KLSAgICAgICAgICAgIGluY3JlbWVudERlcHRoKG5vZGUp
OwotICAgICAgICAgICAgLy8gRnVuY3Rpb24gZGVmaW5pdGlvbiBub2RlIGNvbnRhaW5zIG9uZSBv
ciB0d28gY2hpbGRyZW4gbm9kZXMKLSAgICAgICAgICAgIC8vIHJlcHJlc2VudGluZyBmdW5jdGlv
biBwYXJhbWV0ZXJzIGFuZCBmdW5jdGlvbiBib2R5LiBUaGUgbGF0dGVyCi0gICAgICAgICAgICAv
LyBpcyBub3QgcHJlc2VudCBpbiBjYXNlIG9mIGVtcHR5IGZ1bmN0aW9uIGJvZGllcy4KLSAgICAg
ICAgICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5j
ZSgpOwotICAgICAgICAgICAgQVNTRVJUKChzZXF1ZW5jZS5zaXplKCkgPT0gMSkgfHwgKHNlcXVl
bmNlLnNpemUoKSA9PSAyKSk7Ci0gICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0
ZXJhdG9yIHNlcUl0ZXIgPSBzZXF1ZW5jZS5iZWdpbigpOwotCi0gICAgICAgICAgICAvLyBUcmF2
ZXJzZSBmdW5jdGlvbiBwYXJhbWV0ZXJzLgotICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSog
cGFyYW1zID0gKCpzZXFJdGVyKS0+Z2V0QXNBZ2dyZWdhdGUoKTsKLSAgICAgICAgICAgIEFTU0VS
VChwYXJhbXMgIT0gTlVMTCk7Ci0gICAgICAgICAgICBBU1NFUlQocGFyYW1zLT5nZXRPcCgpID09
IEVPcFBhcmFtZXRlcnMpOwotICAgICAgICAgICAgcGFyYW1zLT50cmF2ZXJzZSh0aGlzKTsKLQot
ICAgICAgICAgICAgLy8gVHJhdmVyc2UgZnVuY3Rpb24gYm9keS4KLSAgICAgICAgICAgIFRJbnRl
cm1BZ2dyZWdhdGUqIGJvZHkgPSArK3NlcUl0ZXIgIT0gc2VxdWVuY2UuZW5kKCkgPwotICAgICAg
ICAgICAgICAgICgqc2VxSXRlciktPmdldEFzQWdncmVnYXRlKCkgOiBOVUxMOwotICAgICAgICAg
ICAgdmlzaXRDb2RlQmxvY2soYm9keSk7Ci0gICAgICAgICAgICBkZWNyZW1lbnREZXB0aCgpOwot
IAotICAgICAgICAgICAgLy8gRnVsbHkgcHJvY2Vzc2VkOyBubyBuZWVkIHRvIHZpc2l0IGNoaWxk
cmVuLgotICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBFT3BGdW5jdGlvbkNhbGw6Ci0gICAgICAgICAg
ICAvLyBGdW5jdGlvbiBjYWxsLgotICAgICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCBoYXNoRnVuY3Rpb25OYW1lKG5v
ZGUtPmdldE5hbWUoKSkgPDwgIigiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBp
ZiAodmlzaXQgPT0gSW5WaXNpdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQg
PDwgIiwgIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBvdXQgPDwgIikiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wUGFyYW1ldGVyczogewotICAgICAgICAgICAgLy8gRnVu
Y3Rpb24gcGFyYW1ldGVycy4KLSAgICAgICAgICAgIEFTU0VSVCh2aXNpdCA9PSBQcmVWaXNpdCk7
Ci0gICAgICAgICAgICBvdXQgPDwgIigiOwotICAgICAgICAgICAgd3JpdGVGdW5jdGlvblBhcmFt
ZXRlcnMobm9kZS0+Z2V0U2VxdWVuY2UoKSk7Ci0gICAgICAgICAgICBvdXQgPDwgIikiOwotICAg
ICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBFT3BEZWNsYXJhdGlvbjogewotICAgICAgICAgICAgLy8gVmFy
aWFibGUgZGVjbGFyYXRpb24uCi0gICAgICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVEludGVybVNlcXVlbmNlJiBzZXF1
ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAgICAgICAgICAgY29uc3QgVEludGVy
bVR5cGVkKiB2YXJpYWJsZSA9IHNlcXVlbmNlLmZyb250KCktPmdldEFzVHlwZWQoKTsKLSAgICAg
ICAgICAgICAgICB3cml0ZVZhcmlhYmxlVHlwZSh2YXJpYWJsZS0+Z2V0VHlwZSgpKTsKLSAgICAg
ICAgICAgICAgICBvdXQgPDwgIiAiOwotICAgICAgICAgICAgICAgIG1EZWNsYXJpbmdWYXJpYWJs
ZXMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0g
SW5WaXNpdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKLSAg
ICAgICAgICAgICAgICBtRGVjbGFyaW5nVmFyaWFibGVzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGVjbGFy
aW5nVmFyaWFibGVzID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OiB3cml0ZVRyaXBsZXQo
dmlzaXQsICJmbG9hdCgiLCBOVUxMLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25z
dHJ1Y3RWZWMyOiB3cml0ZVRyaXBsZXQodmlzaXQsICJ2ZWMyKCIsICIsICIsICIpIik7IGJyZWFr
OwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzM6IHdyaXRlVHJpcGxldCh2aXNpdCwgInZl
YzMoIiwgIiwgIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjNDog
d3JpdGVUcmlwbGV0KHZpc2l0LCAidmVjNCgiLCAiLCAiLCAiKSIpOyBicmVhazsKLSAgICAgICAg
Y2FzZSBFT3BDb25zdHJ1Y3RCb29sOiB3cml0ZVRyaXBsZXQodmlzaXQsICJib29sKCIsIE5VTEws
ICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMyOiB3cml0ZVRyaXBs
ZXQodmlzaXQsICJidmVjMigiLCAiLCAiLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BD
b25zdHJ1Y3RCVmVjMzogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYnZlYzMoIiwgIiwgIiwgIikiKTsg
YnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6IHdyaXRlVHJpcGxldCh2aXNp
dCwgImJ2ZWM0KCIsICIsICIsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVj
dEludDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiaW50KCIsIE5VTEwsICIpIik7IGJyZWFrOwotICAg
ICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMyOiB3cml0ZVRyaXBsZXQodmlzaXQsICJpdmVjMigi
LCAiLCAiLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMzogd3Jp
dGVUcmlwbGV0KHZpc2l0LCAiaXZlYzMoIiwgIiwgIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRU9wQ29uc3RydWN0SVZlYzQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgIml2ZWM0KCIsICIsICIs
ICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6IHdyaXRlVHJpcGxl
dCh2aXNpdCwgIm1hdDIoIiwgIiwgIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29u
c3RydWN0TWF0Mzogd3JpdGVUcmlwbGV0KHZpc2l0LCAibWF0MygiLCAiLCAiLCAiKSIpOyBicmVh
azsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQ0OiB3cml0ZVRyaXBsZXQodmlzaXQsICJt
YXQ0KCIsICIsICIsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFN0cnVj
dDoKLSAgICAgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBjb25zdCBUVHlwZSYgdHlwZSA9IG5vZGUtPmdldFR5cGUoKTsKLSAgICAg
ICAgICAgICAgICBBU1NFUlQodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpOwotICAg
ICAgICAgICAgICAgIG91dCA8PCBoYXNoTmFtZSh0eXBlLmdldFN0cnVjdCgpLT5uYW1lKCkpIDw8
ICIoIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlz
aXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
b3V0IDw8ICIpIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
IGNhc2UgRU9wTGVzc1RoYW46IHByZVN0cmluZyA9ICJsZXNzVGhhbigiOyBkZWxheWVkV3JpdGUg
PSB0cnVlOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjogcHJlU3RyaW5nID0g
ImdyZWF0ZXJUaGFuKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOwotICAgICAgICBjYXNl
IEVPcExlc3NUaGFuRXF1YWw6IHByZVN0cmluZyA9ICJsZXNzVGhhbkVxdWFsKCI7IGRlbGF5ZWRX
cml0ZSA9IHRydWU7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6IHBy
ZVN0cmluZyA9ICJncmVhdGVyVGhhbkVxdWFsKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFr
OwotICAgICAgICBjYXNlIEVPcFZlY3RvckVxdWFsOiBwcmVTdHJpbmcgPSAiZXF1YWwoIjsgZGVs
YXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wVmVjdG9yTm90RXF1YWw6
IHByZVN0cmluZyA9ICJub3RFcXVhbCgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKLSAg
ICAgICAgY2FzZSBFT3BDb21tYTogd3JpdGVUcmlwbGV0KHZpc2l0LCBOVUxMLCAiLCAiLCBOVUxM
KTsgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BNb2Q6IHByZVN0cmluZyA9ICJtb2QoIjsgZGVs
YXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wUG93OiBwcmVTdHJpbmcg
PSAicG93KCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEF0
YW46IHByZVN0cmluZyA9ICJhdGFuKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOwotICAg
ICAgICBjYXNlIEVPcE1pbjogcHJlU3RyaW5nID0gIm1pbigiOyBkZWxheWVkV3JpdGUgPSB0cnVl
OyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BNYXg6IHByZVN0cmluZyA9ICJtYXgoIjsgZGVsYXll
ZFdyaXRlID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ2xhbXA6IHByZVN0cmluZyA9
ICJjbGFtcCgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BN
aXg6IHByZVN0cmluZyA9ICJtaXgoIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRU9wU3RlcDogcHJlU3RyaW5nID0gInN0ZXAoIjsgZGVsYXllZFdyaXRlID0gdHJ1
ZTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wU21vb3RoU3RlcDogcHJlU3RyaW5nID0gInNtb290
aHN0ZXAoIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BE
aXN0YW5jZTogcHJlU3RyaW5nID0gImRpc3RhbmNlKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJy
ZWFrOwotICAgICAgICBjYXNlIEVPcERvdDogcHJlU3RyaW5nID0gImRvdCgiOyBkZWxheWVkV3Jp
dGUgPSB0cnVlOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDcm9zczogcHJlU3RyaW5nID0gImNy
b3NzKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEZhY2VG
b3J3YXJkOiBwcmVTdHJpbmcgPSAiZmFjZWZvcndhcmQoIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsg
YnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wUmVmbGVjdDogcHJlU3RyaW5nID0gInJlZmxlY3QoIjsg
ZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wUmVmcmFjdDogcHJl
U3RyaW5nID0gInJlZnJhY3QoIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRU9wTXVsOiBwcmVTdHJpbmcgPSAibWF0cml4Q29tcE11bHQoIjsgZGVsYXllZFdyaXRl
ID0gdHJ1ZTsgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7
Ci0gICAgfQotICAgIGlmIChkZWxheWVkV3JpdGUgJiYgdmlzaXQgPT0gUHJlVmlzaXQgJiYgbm9k
ZS0+Z2V0VXNlRW11bGF0ZWRGdW5jdGlvbigpKQotICAgICAgICBwcmVTdHJpbmcgPSBCdWlsdElu
RnVuY3Rpb25FbXVsYXRvcjo6R2V0RW11bGF0ZWRGdW5jdGlvbk5hbWUocHJlU3RyaW5nKTsKLSAg
ICBpZiAoZGVsYXllZFdyaXRlKQotICAgICAgICB3cml0ZVRyaXBsZXQodmlzaXQsIHByZVN0cmlu
Zy5jX3N0cigpLCAiLCAiLCAiKSIpOwotICAgIHJldHVybiB2aXNpdENoaWxkcmVuOwotfQotCi1i
b29sIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCog
bm9kZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7Ci0KLSAgICBpbmNy
ZW1lbnREZXB0aChub2RlKTsKLSAgICAvLyBMb29wIGhlYWRlci4KLSAgICBUTG9vcFR5cGUgbG9v
cFR5cGUgPSBub2RlLT5nZXRUeXBlKCk7Ci0gICAgaWYgKGxvb3BUeXBlID09IEVMb29wRm9yKSAg
Ly8gZm9yIGxvb3AKLSAgICB7Ci0gICAgICAgIGlmICghbm9kZS0+Z2V0VW5yb2xsRmxhZygpKSB7
Ci0gICAgICAgICAgICBvdXQgPDwgImZvciAoIjsKLSAgICAgICAgICAgIGlmIChub2RlLT5nZXRJ
bml0KCkpCi0gICAgICAgICAgICAgICAgbm9kZS0+Z2V0SW5pdCgpLT50cmF2ZXJzZSh0aGlzKTsK
LSAgICAgICAgICAgIG91dCA8PCAiOyAiOwotCi0gICAgICAgICAgICBpZiAobm9kZS0+Z2V0Q29u
ZGl0aW9uKCkpCi0gICAgICAgICAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNl
KHRoaXMpOwotICAgICAgICAgICAgb3V0IDw8ICI7ICI7Ci0KLSAgICAgICAgICAgIGlmIChub2Rl
LT5nZXRFeHByZXNzaW9uKCkpCi0gICAgICAgICAgICAgICAgbm9kZS0+Z2V0RXhwcmVzc2lvbigp
LT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgIG91dCA8PCAiKVxuIjsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBlbHNlIGlmIChsb29wVHlwZSA9PSBFTG9vcFdoaWxlKSAgLy8gd2hpbGUgbG9v
cAotICAgIHsKLSAgICAgICAgb3V0IDw8ICJ3aGlsZSAoIjsKLSAgICAgICAgQVNTRVJUKG5vZGUt
PmdldENvbmRpdGlvbigpICE9IE5VTEwpOwotICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+
dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIG91dCA8PCAiKVxuIjsKLSAgICB9Ci0gICAgZWxzZSAg
Ly8gZG8td2hpbGUgbG9vcAotICAgIHsKLSAgICAgICAgQVNTRVJUKGxvb3BUeXBlID09IEVMb29w
RG9XaGlsZSk7Ci0gICAgICAgIG91dCA8PCAiZG9cbiI7Ci0gICAgfQotCi0gICAgLy8gTG9vcCBi
b2R5LgotICAgIGlmIChub2RlLT5nZXRVbnJvbGxGbGFnKCkpCi0gICAgewotICAgICAgICBUTG9v
cEluZGV4SW5mbyBpbmRleEluZm87Ci0gICAgICAgIG1Mb29wVW5yb2xsLkZpbGxMb29wSW5kZXhJ
bmZvKG5vZGUsIGluZGV4SW5mbyk7Ci0gICAgICAgIG1Mb29wVW5yb2xsLlB1c2goaW5kZXhJbmZv
KTsKLSAgICAgICAgd2hpbGUgKG1Mb29wVW5yb2xsLlNhdGlzZmllc0xvb3BDb25kaXRpb24oKSkK
LSAgICAgICAgewotICAgICAgICAgICAgdmlzaXRDb2RlQmxvY2sobm9kZS0+Z2V0Qm9keSgpKTsK
LSAgICAgICAgICAgIG1Mb29wVW5yb2xsLlN0ZXAoKTsKLSAgICAgICAgfQotICAgICAgICBtTG9v
cFVucm9sbC5Qb3AoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgdmlzaXRDb2Rl
QmxvY2sobm9kZS0+Z2V0Qm9keSgpKTsKLSAgICB9Ci0KLSAgICAvLyBMb29wIGZvb3Rlci4KLSAg
ICBpZiAobG9vcFR5cGUgPT0gRUxvb3BEb1doaWxlKSAgLy8gZG8td2hpbGUgbG9vcAotICAgIHsK
LSAgICAgICAgb3V0IDw8ICJ3aGlsZSAoIjsKLSAgICAgICAgQVNTRVJUKG5vZGUtPmdldENvbmRp
dGlvbigpICE9IE5VTEwpOwotICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2Uo
dGhpcyk7Ci0gICAgICAgIG91dCA8PCAiKTtcbiI7Ci0gICAgfQotICAgIGRlY3JlbWVudERlcHRo
KCk7Ci0KLSAgICAvLyBObyBuZWVkIHRvIHZpc2l0IGNoaWxkcmVuLiBUaGV5IGhhdmUgYmVlbiBh
bHJlYWR5IHByb2Nlc3NlZCBpbgotICAgIC8vIHRoaXMgZnVuY3Rpb24uCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1ib29sIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRCcmFuY2goVmlzaXQgdmlzaXQs
IFRJbnRlcm1CcmFuY2gqIG5vZGUpCi17Ci0gICAgc3dpdGNoIChub2RlLT5nZXRGbG93T3AoKSkK
LSAgICB7Ci0gICAgICAgIGNhc2UgRU9wS2lsbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZGlzY2Fy
ZCIsIE5VTEwsIE5VTEwpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BCcmVhazogd3JpdGVUcmlw
bGV0KHZpc2l0LCAiYnJlYWsiLCBOVUxMLCBOVUxMKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9w
Q29udGludWU6IHdyaXRlVHJpcGxldCh2aXNpdCwgImNvbnRpbnVlIiwgTlVMTCwgTlVMTCk7IGJy
ZWFrOwotICAgICAgICBjYXNlIEVPcFJldHVybjogd3JpdGVUcmlwbGV0KHZpc2l0LCAicmV0dXJu
ICIsIE5VTEwsIE5VTEwpOyBicmVhazsKLSAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsg
YnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgVE91dHB1dEdMU0xC
YXNlOjp2aXNpdENvZGVCbG9jayhUSW50ZXJtTm9kZSogbm9kZSkgewotICAgIFRJbmZvU2lua0Jh
c2UgJm91dCA9IG9ialNpbmsoKTsKLSAgICBpZiAobm9kZSAhPSBOVUxMKQotICAgIHsKLSAgICAg
ICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIC8vIFNpbmdsZSBzdGF0ZW1lbnRzIG5v
dCBwYXJ0IG9mIGEgc2VxdWVuY2UgbmVlZCB0byBiZSB0ZXJtaW5hdGVkCi0gICAgICAgIC8vIHdp
dGggc2VtaS1jb2xvbi4KLSAgICAgICAgaWYgKGlzU2luZ2xlU3RhdGVtZW50KG5vZGUpKQotICAg
ICAgICAgICAgb3V0IDw8ICI7XG4iOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBv
dXQgPDwgIntcbn1cbiI7ICAvLyBFbXB0eSBjb2RlIGJsb2NrLgotICAgIH0KLX0KLQotVFN0cmlu
ZyBUT3V0cHV0R0xTTEJhc2U6OmdldFR5cGVOYW1lKGNvbnN0IFRUeXBlJiB0eXBlKQotewotICAg
IFRJbmZvU2lua0Jhc2Ugb3V0OwotICAgIGlmICh0eXBlLmlzTWF0cml4KCkpCi0gICAgewotICAg
ICAgICBvdXQgPDwgIm1hdCI7Ci0gICAgICAgIG91dCA8PCB0eXBlLmdldE5vbWluYWxTaXplKCk7
Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUuaXNWZWN0b3IoKSkKLSAgICB7Ci0gICAgICAgIHN3
aXRjaCAodHlwZS5nZXRCYXNpY1R5cGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY2FzZSBF
YnRGbG9hdDogb3V0IDw8ICJ2ZWMiOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRWJ0SW50OiBv
dXQgPDwgIml2ZWMiOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogb3V0IDw8ICJi
dmVjIjsgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBvdXQgPDwgdHlwZS5nZXROb21pbmFsU2l6ZSgpOwotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRT
dHJ1Y3QpCi0gICAgICAgICAgICBvdXQgPDwgaGFzaE5hbWUodHlwZS5nZXRTdHJ1Y3QoKS0+bmFt
ZSgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgb3V0IDw8IHR5cGUuZ2V0QmFzaWNTdHJp
bmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIFRTdHJpbmcob3V0LmNfc3RyKCkpOwotfQotCi1UU3Ry
aW5nIFRPdXRwdXRHTFNMQmFzZTo6aGFzaE5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSkKLXsKLSAg
ICBpZiAobUhhc2hGdW5jdGlvbiA9PSBOVUxMIHx8IG5hbWUuZW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIG5hbWU7Ci0gICAgTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtTmFtZU1hcC5maW5k
KG5hbWUuY19zdHIoKSk7Ci0gICAgaWYgKGl0ICE9IG1OYW1lTWFwLmVuZCgpKQotICAgICAgICBy
ZXR1cm4gaXQtPnNlY29uZC5jX3N0cigpOwotICAgIFRTdHJpbmcgaGFzaGVkTmFtZSA9IFRJbnRl
cm1UcmF2ZXJzZXI6Omhhc2gobmFtZSwgbUhhc2hGdW5jdGlvbik7Ci0gICAgbU5hbWVNYXBbbmFt
ZS5jX3N0cigpXSA9IGhhc2hlZE5hbWUuY19zdHIoKTsKLSAgICByZXR1cm4gaGFzaGVkTmFtZTsK
LX0KLQotVFN0cmluZyBUT3V0cHV0R0xTTEJhc2U6Omhhc2hWYXJpYWJsZU5hbWUoY29uc3QgVFN0
cmluZyYgbmFtZSkKLXsKLSAgICBpZiAobVN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKG5hbWUpICE9
IE5VTEwpCi0gICAgICAgIHJldHVybiBuYW1lOwotICAgIHJldHVybiBoYXNoTmFtZShuYW1lKTsK
LX0KLQotVFN0cmluZyBUT3V0cHV0R0xTTEJhc2U6Omhhc2hGdW5jdGlvbk5hbWUoY29uc3QgVFN0
cmluZyYgbWFuZ2xlZF9uYW1lKQotewotICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5t
YW5nbGVOYW1lKG1hbmdsZWRfbmFtZSk7Ci0gICAgaWYgKG1TeW1ib2xUYWJsZS5maW5kQnVpbHRJ
bihtYW5nbGVkX25hbWUpICE9IE5VTEwgfHwgbmFtZSA9PSAibWFpbiIpCi0gICAgICAgIHJldHVy
biBuYW1lOwotICAgIHJldHVybiBoYXNoTmFtZShuYW1lKTsKLX0KLQotYm9vbCBUT3V0cHV0R0xT
TEJhc2U6OnN0cnVjdERlY2xhcmVkKGNvbnN0IFRTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QK
LXsKLSAgICByZXR1cm4gbURlY2xhcmVkU3RydWN0cy5maW5kKHN0cnVjdHVyZS0+bmFtZSgpKSAh
PSBtRGVjbGFyZWRTdHJ1Y3RzLmVuZCgpOwotfQotCi12b2lkIFRPdXRwdXRHTFNMQmFzZTo6ZGVj
bGFyZVN0cnVjdChjb25zdCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi17Ci0gICAgVEluZm9TaW5r
QmFzZSYgb3V0ID0gb2JqU2luaygpOwotCi0gICAgb3V0IDw8ICJzdHJ1Y3QgIiA8PCBoYXNoTmFt
ZShzdHJ1Y3R1cmUtPm5hbWUoKSkgPDwgIntcbiI7Ci0gICAgY29uc3QgVEZpZWxkTGlzdCYgZmll
bGRzID0gc3RydWN0dXJlLT5maWVsZHMoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZp
ZWxkcy5zaXplKCk7ICsraSkKLSAgICB7Ci0gICAgICAgIGNvbnN0IFRGaWVsZCogZmllbGQgPSBm
aWVsZHNbaV07Ci0gICAgICAgIGlmICh3cml0ZVZhcmlhYmxlUHJlY2lzaW9uKGZpZWxkLT50eXBl
KCktPmdldFByZWNpc2lvbigpKSkKLSAgICAgICAgICAgIG91dCA8PCAiICI7Ci0gICAgICAgIG91
dCA8PCBnZXRUeXBlTmFtZSgqZmllbGQtPnR5cGUoKSkgPDwgIiAiIDw8IGhhc2hOYW1lKGZpZWxk
LT5uYW1lKCkpOwotICAgICAgICBpZiAoZmllbGQtPnR5cGUoKS0+aXNBcnJheSgpKQotICAgICAg
ICAgICAgb3V0IDw8IGFycmF5QnJhY2tldHMoKmZpZWxkLT50eXBlKCkpOwotICAgICAgICBvdXQg
PDwgIjtcbiI7Ci0gICAgfQotICAgIG91dCA8PCAifSI7Ci0KLSAgICBtRGVjbGFyZWRTdHJ1Y3Rz
Lmluc2VydChzdHJ1Y3R1cmUtPm5hbWUoKSk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTEJhc2UuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA2OTg2OGMwOWNjZjc1NDkwMGM5ODQxNzUwNmM5MDdiYmFiMjE3Y2JkLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5oCisrKyAvZGV2L251bGwK
QEAgLTEsNzkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDUk9TU0NPTVBJ
TEVSR0xTTF9PVVRQVVRHTFNMQkFTRV9IXwotI2RlZmluZSBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQ
VVRHTFNMQkFTRV9IXwotCi0jaW5jbHVkZSA8c2V0PgotCi0jaW5jbHVkZSAiY29tcGlsZXIvRm9y
TG9vcFVucm9sbC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotI2luY2x1
ZGUgImNvbXBpbGVyL1BhcnNlQ29udGV4dC5oIgotCi1jbGFzcyBUT3V0cHV0R0xTTEJhc2UgOiBw
dWJsaWMgVEludGVybVRyYXZlcnNlcgotewotcHVibGljOgotICAgIFRPdXRwdXRHTFNMQmFzZShU
SW5mb1NpbmtCYXNlJiBvYmpTaW5rLAotICAgICAgICAgICAgICAgICAgICBTaEFycmF5SW5kZXhD
bGFtcGluZ1N0cmF0ZWd5IGNsYW1waW5nU3RyYXRlZ3ksCi0gICAgICAgICAgICAgICAgICAgIFNo
SGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAotICAgICAgICAgICAgICAgICAgICBOYW1lTWFw
JiBuYW1lTWFwLAotICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxl
KTsKLQotcHJvdGVjdGVkOgotICAgIFRJbmZvU2lua0Jhc2UmIG9ialNpbmsoKSB7IHJldHVybiBt
T2JqU2luazsgfQotICAgIHZvaWQgd3JpdGVUcmlwbGV0KFZpc2l0IHZpc2l0LCBjb25zdCBjaGFy
KiBwcmVTdHIsIGNvbnN0IGNoYXIqIGluU3RyLCBjb25zdCBjaGFyKiBwb3N0U3RyKTsKLSAgICB2
b2lkIHdyaXRlVmFyaWFibGVUeXBlKGNvbnN0IFRUeXBlJiB0eXBlKTsKLSAgICB2aXJ0dWFsIGJv
b2wgd3JpdGVWYXJpYWJsZVByZWNpc2lvbihUUHJlY2lzaW9uIHByZWNpc2lvbikgPSAwOwotICAg
IHZvaWQgd3JpdGVGdW5jdGlvblBhcmFtZXRlcnMoY29uc3QgVEludGVybVNlcXVlbmNlJiBhcmdz
KTsKLSAgICBjb25zdCBDb25zdGFudFVuaW9uKiB3cml0ZUNvbnN0YW50VW5pb24oY29uc3QgVFR5
cGUmIHR5cGUsIGNvbnN0IENvbnN0YW50VW5pb24qIHBDb25zdFVuaW9uKTsKLSAgICBUU3RyaW5n
IGdldFR5cGVOYW1lKGNvbnN0IFRUeXBlJiB0eXBlKTsKLQotICAgIHZpcnR1YWwgdm9pZCB2aXNp
dFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDb25z
dGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKTsKLSAgICB2aXJ0dWFsIGJvb2wg
dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5vZGUpOwotICAgIHZpcnR1
YWwgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUpOwotICAg
IHZpcnR1YWwgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlv
biogbm9kZSk7Ci0gICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBU
SW50ZXJtQWdncmVnYXRlKiBub2RlKTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRMb29wKFZpc2l0
IHZpc2l0LCBUSW50ZXJtTG9vcCogbm9kZSk7Ci0gICAgdmlydHVhbCBib29sIHZpc2l0QnJhbmNo
KFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKiBub2RlKTsKLQotICAgIHZvaWQgdmlzaXRDb2Rl
QmxvY2soVEludGVybU5vZGUqIG5vZGUpOwotCi0KLSAgICAvLyBSZXR1cm4gdGhlIG9yaWdpbmFs
IG5hbWUgaWYgaGFzaCBmdW5jdGlvbiBwb2ludGVyIGlzIE5VTEw7Ci0gICAgLy8gb3RoZXJ3aXNl
IHJldHVybiB0aGUgaGFzaGVkIG5hbWUuCi0gICAgVFN0cmluZyBoYXNoTmFtZShjb25zdCBUU3Ry
aW5nJiBuYW1lKTsKLSAgICAvLyBTYW1lIGFzIGhhc2hOYW1lKCksIGJ1dCB3aXRob3V0IGhhc2hp
bmcgYnVpbHQtaW4gdmFyaWFibGVzLgotICAgIFRTdHJpbmcgaGFzaFZhcmlhYmxlTmFtZShjb25z
dCBUU3RyaW5nJiBuYW1lKTsKLSAgICAvLyBTYW1lIGFzIGhhc2hOYW1lKCksIGJ1dCB3aXRob3V0
IGhhc2hpbmcgYnVpbHQtaW4gZnVuY3Rpb25zLgotICAgIFRTdHJpbmcgaGFzaEZ1bmN0aW9uTmFt
ZShjb25zdCBUU3RyaW5nJiBtYW5nbGVkX25hbWUpOwotCi1wcml2YXRlOgotICAgIGJvb2wgc3Ry
dWN0RGVjbGFyZWQoY29uc3QgVFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdDsKLSAgICB2b2lk
IGRlY2xhcmVTdHJ1Y3QoY29uc3QgVFN0cnVjdHVyZSogc3RydWN0dXJlKTsKLQotICAgIFRJbmZv
U2lua0Jhc2UmIG1PYmpTaW5rOwotICAgIGJvb2wgbURlY2xhcmluZ1ZhcmlhYmxlczsKLQotICAg
IC8vIFN0cnVjdHMgYXJlIGRlY2xhcmVkIGFzIHRoZSB0cmVlIGlzIHRyYXZlcnNlZC4gVGhpcyBz
ZXQgY29udGFpbnMgYWxsCi0gICAgLy8gdGhlIHN0cnVjdHMgYWxyZWFkeSBkZWNsYXJlZC4gSXQg
aXMgbWFpbnRhaW5lZCBzbyB0aGF0IGEgc3RydWN0IGlzCi0gICAgLy8gZGVjbGFyZWQgb25seSBv
bmNlLgotICAgIHR5cGVkZWYgc3RkOjpzZXQ8VFN0cmluZz4gRGVjbGFyZWRTdHJ1Y3RzOwotICAg
IERlY2xhcmVkU3RydWN0cyBtRGVjbGFyZWRTdHJ1Y3RzOwotCi0gICAgRm9yTG9vcFVucm9sbCBt
TG9vcFVucm9sbDsKLQotICAgIFNoQXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kgbUNsYW1waW5n
U3RyYXRlZ3k7Ci0KLSAgICAvLyBuYW1lIGhhc2hpbmcuCi0gICAgU2hIYXNoRnVuY3Rpb242NCBt
SGFzaEZ1bmN0aW9uOwotCi0gICAgTmFtZU1hcCYgbU5hbWVNYXA7Ci0KLSAgICBUU3ltYm9sVGFi
bGUmIG1TeW1ib2xUYWJsZTsKLX07Ci0KLSNlbmRpZiAgLy8gQ1JPU1NDT01QSUxFUkdMU0xfT1VU
UFVUR0xTTEJBU0VfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9PdXRwdXRITFNMLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9PdXRwdXRITFNMLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTcxNWYy
MjljOTgwNGIyMGFiZjgwZjc2ZmQyNzUyZDMxNjA5NWRhMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvT3V0cHV0SExTTC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMTMzICswLDAgQEAKLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9PdXRwdXRITFNMLmgiCi0KLSNp
bmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgi
Ci0jaW5jbHVkZSAiY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oIgotI2luY2x1ZGUgImNv
bXBpbGVyL0luZm9TaW5rLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvU2VhcmNoU3ltYm9sLmgiCi0j
aW5jbHVkZSAiY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmgiCi0jaW5jbHVkZSAiY29tcGls
ZXIvTm9kZVNlYXJjaC5oIgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGNmbG9h
dD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi1uYW1lc3BhY2Ugc2gKLXsKLS8vIEludGVnZXIgdG8g
VFN0cmluZyBjb252ZXJzaW9uCi1UU3RyaW5nIHN0cihpbnQgaSkKLXsKLSAgICBjaGFyIGJ1ZmZl
clsyMF07Ci0gICAgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiVkIiwgaSk7Ci0g
ICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotT3V0cHV0SExTTDo6T3V0cHV0SExTTChUUGFyc2VDb250
ZXh0ICZjb250ZXh0LCBjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291cmNlcywgU2hTaGFk
ZXJPdXRwdXQgb3V0cHV0VHlwZSkKLSAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgdHJ1ZSwg
dHJ1ZSksIG1Db250ZXh0KGNvbnRleHQpLCBtT3V0cHV0VHlwZShvdXRwdXRUeXBlKQotewotICAg
IG1VbmZvbGRTaG9ydENpcmN1aXQgPSBuZXcgVW5mb2xkU2hvcnRDaXJjdWl0KGNvbnRleHQsIHRo
aXMpOwotICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNlOwotCi0gICAgbVVzZXNUZXh0dXJlMkQg
PSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmUyRF9iaWFzID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0
dXJlMkRQcm9qID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXMgPSBmYWxzZTsK
LSAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmUyRExv
ZCA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZUN1YmUgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1
cmVDdWJlX2JpYXMgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmVDdWJlTG9kID0gZmFsc2U7Ci0g
ICAgbVVzZXNUZXh0dXJlMkRMb2QwID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRMb2QwX2Jp
YXMgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QwID0gZmFsc2U7Ci0gICAgbVVz
ZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlQ3ViZUxv
ZDAgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzID0gZmFsc2U7Ci0gICAg
bVVzZXNGcmFnQ29sb3IgPSBmYWxzZTsKLSAgICBtVXNlc0ZyYWdEYXRhID0gZmFsc2U7Ci0gICAg
bVVzZXNEZXB0aFJhbmdlID0gZmFsc2U7Ci0gICAgbVVzZXNGcmFnQ29vcmQgPSBmYWxzZTsKLSAg
ICBtVXNlc1BvaW50Q29vcmQgPSBmYWxzZTsKLSAgICBtVXNlc0Zyb250RmFjaW5nID0gZmFsc2U7
Ci0gICAgbVVzZXNQb2ludFNpemUgPSBmYWxzZTsKLSAgICBtVXNlc0ZyYWdEZXB0aCA9IGZhbHNl
OwotICAgIG1Vc2VzWG9yID0gZmFsc2U7Ci0gICAgbVVzZXNNb2QxID0gZmFsc2U7Ci0gICAgbVVz
ZXNNb2QydiA9IGZhbHNlOwotICAgIG1Vc2VzTW9kMmYgPSBmYWxzZTsKLSAgICBtVXNlc01vZDN2
ID0gZmFsc2U7Ci0gICAgbVVzZXNNb2QzZiA9IGZhbHNlOwotICAgIG1Vc2VzTW9kNHYgPSBmYWxz
ZTsKLSAgICBtVXNlc01vZDRmID0gZmFsc2U7Ci0gICAgbVVzZXNGYWNlZm9yd2FyZDEgPSBmYWxz
ZTsKLSAgICBtVXNlc0ZhY2Vmb3J3YXJkMiA9IGZhbHNlOwotICAgIG1Vc2VzRmFjZWZvcndhcmQz
ID0gZmFsc2U7Ci0gICAgbVVzZXNGYWNlZm9yd2FyZDQgPSBmYWxzZTsKLSAgICBtVXNlc0F0YW4y
XzEgPSBmYWxzZTsKLSAgICBtVXNlc0F0YW4yXzIgPSBmYWxzZTsKLSAgICBtVXNlc0F0YW4yXzMg
PSBmYWxzZTsKLSAgICBtVXNlc0F0YW4yXzQgPSBmYWxzZTsKLSAgICBtVXNlc0Rpc2NhcmRSZXdy
aXRpbmcgPSBmYWxzZTsKLQotICAgIG1OdW1SZW5kZXJUYXJnZXRzID0gcmVzb3VyY2VzLkVYVF9k
cmF3X2J1ZmZlcnMgPyByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgOiAxOwotCi0gICAgbVNjb3Bl
RGVwdGggPSAwOwotCi0gICAgbVVuaXF1ZUluZGV4ID0gMDsKLQotICAgIG1Db250YWluc0xvb3BE
aXNjb250aW51aXR5ID0gZmFsc2U7Ci0gICAgbU91dHB1dExvZDBGdW5jdGlvbiA9IGZhbHNlOwot
ICAgIG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCA9IGZhbHNlOwotCi0gICAgbUV4Y2Vzc2l2ZUxv
b3BJbmRleCA9IE5VTEw7Ci0KLSAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVU
KQotICAgIHsKLSAgICAgICAgaWYgKG1Db250ZXh0LnNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRf
U0hBREVSKQotICAgICAgICB7Ci0gICAgICAgICAgICBtVW5pZm9ybVJlZ2lzdGVyID0gMzsgICAv
LyBSZXNlcnZlIHJlZ2lzdGVycyBmb3IgZHhfRGVwdGhSYW5nZSwgZHhfVmlld0Nvb3JkcyBhbmQg
ZHhfRGVwdGhGcm9udAotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAg
ICAgICAgbVVuaWZvcm1SZWdpc3RlciA9IDI7ICAgLy8gUmVzZXJ2ZSByZWdpc3RlcnMgZm9yIGR4
X0RlcHRoUmFuZ2UgYW5kIGR4X1ZpZXdBZGp1c3QKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNl
Ci0gICAgewotICAgICAgICBtVW5pZm9ybVJlZ2lzdGVyID0gMDsKLSAgICB9Ci0KLSAgICBtU2Ft
cGxlclJlZ2lzdGVyID0gMDsKLX0KLQotT3V0cHV0SExTTDo6fk91dHB1dEhMU0woKQotewotICAg
IGRlbGV0ZSBtVW5mb2xkU2hvcnRDaXJjdWl0OwotfQotCi12b2lkIE91dHB1dEhMU0w6Om91dHB1
dCgpCi17Ci0gICAgbUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkgPSBtQ29udGV4dC5zaGFkZXJU
eXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUiAmJiBjb250YWluc0xvb3BEaXNjb250aW51aXR5KG1D
b250ZXh0LnRyZWVSb290KTsKLQotICAgIG1Db250ZXh0LnRyZWVSb290LT50cmF2ZXJzZSh0aGlz
KTsgICAvLyBPdXRwdXQgdGhlIGJvZHkgZmlyc3QgdG8gZGV0ZXJtaW5lIHdoYXQgaGFzIHRvIGdv
IGluIHRoZSBoZWFkZXIKLSAgICBoZWFkZXIoKTsKLQotICAgIG1Db250ZXh0LmluZm9TaW5rKCku
b2JqIDw8IG1IZWFkZXIuY19zdHIoKTsKLSAgICBtQ29udGV4dC5pbmZvU2luaygpLm9iaiA8PCBt
Qm9keS5jX3N0cigpOwotfQotCi1USW5mb1NpbmtCYXNlICZPdXRwdXRITFNMOjpnZXRCb2R5U3Ry
ZWFtKCkKLXsKLSAgICByZXR1cm4gbUJvZHk7Ci19Ci0KLWNvbnN0IEFjdGl2ZVVuaWZvcm1zICZP
dXRwdXRITFNMOjpnZXRVbmlmb3JtcygpCi17Ci0gICAgcmV0dXJuIG1BY3RpdmVVbmlmb3JtczsK
LX0KLQotaW50IE91dHB1dEhMU0w6OnZlY3RvclNpemUoY29uc3QgVFR5cGUgJnR5cGUpIGNvbnN0
Ci17Ci0gICAgaW50IGVsZW1lbnRTaXplID0gdHlwZS5pc01hdHJpeCgpID8gdHlwZS5nZXROb21p
bmFsU2l6ZSgpIDogMTsKLSAgICBpbnQgYXJyYXlTaXplID0gdHlwZS5pc0FycmF5KCkgPyB0eXBl
LmdldEFycmF5U2l6ZSgpIDogMTsKLQotICAgIHJldHVybiBlbGVtZW50U2l6ZSAqIGFycmF5U2l6
ZTsKLX0KLQotdm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQotewotICAgIFNoU2hhZGVyVHlwZSBz
aGFkZXJUeXBlID0gbUNvbnRleHQuc2hhZGVyVHlwZTsKLSAgICBUSW5mb1NpbmtCYXNlICZvdXQg
PSBtSGVhZGVyOwotCi0gICAgZm9yIChTdHJ1Y3REZWNsYXJhdGlvbnM6Oml0ZXJhdG9yIHN0cnVj
dERlY2xhcmF0aW9uID0gbVN0cnVjdERlY2xhcmF0aW9ucy5iZWdpbigpOyBzdHJ1Y3REZWNsYXJh
dGlvbiAhPSBtU3RydWN0RGVjbGFyYXRpb25zLmVuZCgpOyBzdHJ1Y3REZWNsYXJhdGlvbisrKQot
ICAgIHsKLSAgICAgICAgb3V0IDw8ICpzdHJ1Y3REZWNsYXJhdGlvbjsKLSAgICB9Ci0KLSAgICBm
b3IgKENvbnN0cnVjdG9yczo6aXRlcmF0b3IgY29uc3RydWN0b3IgPSBtQ29uc3RydWN0b3JzLmJl
Z2luKCk7IGNvbnN0cnVjdG9yICE9IG1Db25zdHJ1Y3RvcnMuZW5kKCk7IGNvbnN0cnVjdG9yKysp
Ci0gICAgewotICAgICAgICBvdXQgPDwgKmNvbnN0cnVjdG9yOwotICAgIH0KLQotICAgIFRTdHJp
bmcgdW5pZm9ybXM7Ci0gICAgVFN0cmluZyB2YXJ5aW5nczsKLSAgICBUU3RyaW5nIGF0dHJpYnV0
ZXM7Ci0KLSAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpjb25zdF9pdGVyYXRvciB1bmlmb3Jt
ID0gbVJlZmVyZW5jZWRVbmlmb3Jtcy5iZWdpbigpOyB1bmlmb3JtICE9IG1SZWZlcmVuY2VkVW5p
Zm9ybXMuZW5kKCk7IHVuaWZvcm0rKykKLSAgICB7Ci0gICAgICAgIGNvbnN0IFRUeXBlICZ0eXBl
ID0gdW5pZm9ybS0+c2Vjb25kLT5nZXRUeXBlKCk7Ci0gICAgICAgIGNvbnN0IFRTdHJpbmcgJm5h
bWUgPSB1bmlmb3JtLT5zZWNvbmQtPmdldFN5bWJvbCgpOwotCi0gICAgICAgIGlmIChtT3V0cHV0
VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUICYmIElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgp
KSkgICAvLyBBbHNvIGRlY2xhcmUgdGhlIHRleHR1cmUKLSAgICAgICAgewotICAgICAgICAgICAg
aW50IGluZGV4ID0gc2FtcGxlclJlZ2lzdGVyKG1SZWZlcmVuY2VkVW5pZm9ybXNbbmFtZV0pOwot
Ci0gICAgICAgICAgICB1bmlmb3JtcyArPSAidW5pZm9ybSBTYW1wbGVyU3RhdGUgc2FtcGxlcl8i
ICsgZGVjb3JhdGVVbmlmb3JtKG5hbWUsIHR5cGUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICIgOiByZWdpc3RlcihzIiArIHN0cihpbmRleCkgKyAiKTtc
biI7Ci0KLSAgICAgICAgICAgIHVuaWZvcm1zICs9ICJ1bmlmb3JtICIgKyB0ZXh0dXJlU3RyaW5n
KHR5cGUpICsgIiB0ZXh0dXJlXyIgKyBkZWNvcmF0ZVVuaWZvcm0obmFtZSwgdHlwZSkgKyBhcnJh
eVN0cmluZyh0eXBlKSArIAotICAgICAgICAgICAgICAgICAgICAgICAgIiA6IHJlZ2lzdGVyKHQi
ICsgc3RyKGluZGV4KSArICIpO1xuIjsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHVuaWZvcm1zICs9ICJ1bmlmb3JtICIgKyB0eXBlU3RyaW5nKHR5cGUp
ICsgIiAiICsgZGVjb3JhdGVVbmlmb3JtKG5hbWUsIHR5cGUpICsgYXJyYXlTdHJpbmcodHlwZSkg
KyAKLSAgICAgICAgICAgICAgICAgICAgICAgICIgOiByZWdpc3RlcigiICsgcmVnaXN0ZXJTdHJp
bmcobVJlZmVyZW5jZWRVbmlmb3Jtc1tuYW1lXSkgKyAiKTtcbiI7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpjb25zdF9pdGVyYXRvciB2YXJ5aW5nID0g
bVJlZmVyZW5jZWRWYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IG1SZWZlcmVuY2VkVmFyeWlu
Z3MuZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7Ci0gICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0g
dmFyeWluZy0+c2Vjb25kLT5nZXRUeXBlKCk7Ci0gICAgICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUg
PSB2YXJ5aW5nLT5zZWNvbmQtPmdldFN5bWJvbCgpOwotCi0gICAgICAgIC8vIFByb2dyYW0gbGlu
a2luZyBkZXBlbmRzIG9uIHRoaXMgZXhhY3QgZm9ybWF0Ci0gICAgICAgIHZhcnlpbmdzICs9ICJz
dGF0aWMgIiArIHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKyBkZWNvcmF0ZShuYW1lKSArIGFycmF5
U3RyaW5nKHR5cGUpICsgIiA9ICIgKyBpbml0aWFsaXplcih0eXBlKSArICI7XG4iOwotICAgIH0K
LQotICAgIGZvciAoUmVmZXJlbmNlZFN5bWJvbHM6OmNvbnN0X2l0ZXJhdG9yIGF0dHJpYnV0ZSA9
IG1SZWZlcmVuY2VkQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVJlZmVyZW5jZWRB
dHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIGNvbnN0IFRUeXBl
ICZ0eXBlID0gYXR0cmlidXRlLT5zZWNvbmQtPmdldFR5cGUoKTsKLSAgICAgICAgY29uc3QgVFN0
cmluZyAmbmFtZSA9IGF0dHJpYnV0ZS0+c2Vjb25kLT5nZXRTeW1ib2woKTsKLQotICAgICAgICBh
dHRyaWJ1dGVzICs9ICJzdGF0aWMgIiArIHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKyBkZWNvcmF0
ZShuYW1lKSArIGFycmF5U3RyaW5nKHR5cGUpICsgIiA9ICIgKyBpbml0aWFsaXplcih0eXBlKSAr
ICI7XG4iOwotICAgIH0KLQotICAgIGlmIChtVXNlc0Rpc2NhcmRSZXdyaXRpbmcpCi0gICAgewot
ICAgICAgICBvdXQgPDwgIiNkZWZpbmUgQU5HTEVfVVNFU19ESVNDQVJEX1JFV1JJVElORyIgPDwg
IlxuIjsKLSAgICB9Ci0KLSAgICBpZiAoc2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIp
Ci0gICAgewotICAgICAgICBURXh0ZW5zaW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBtQ29udGV4dC5leHRlbnNpb25CZWhhdmlvcigpLmZpbmQoIkdMX0VYVF9kcmF3X2J1ZmZlcnMi
KTsKLSAgICAgICAgY29uc3QgYm9vbCB1c2luZ01SVEV4dGVuc2lvbiA9IChpdGVyICE9IG1Db250
ZXh0LmV4dGVuc2lvbkJlaGF2aW9yKCkuZW5kKCkgJiYgKGl0ZXItPnNlY29uZCA9PSBFQmhFbmFi
bGUgfHwgaXRlci0+c2Vjb25kID09IEVCaFJlcXVpcmUpKTsKLQotICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgbnVtQ29sb3JWYWx1ZXMgPSB1c2luZ01SVEV4dGVuc2lvbiA/IG1OdW1SZW5kZXJU
YXJnZXRzIDogMTsKLQotICAgICAgICBvdXQgPDwgIi8vIFZhcnlpbmdzXG4iOwotICAgICAgICBv
dXQgPDwgIHZhcnlpbmdzOwotICAgICAgICBvdXQgPDwgIlxuIgotICAgICAgICAgICAgICAgInN0
YXRpYyBmbG9hdDQgZ2xfQ29sb3JbIiA8PCBudW1Db2xvclZhbHVlcyA8PCAiXSA9XG4iCi0gICAg
ICAgICAgICAgICAie1xuIjsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBu
dW1Db2xvclZhbHVlczsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgIiAgICBm
bG9hdDQoMCwgMCwgMCwgMCkiOwotICAgICAgICAgICAgaWYgKGkgKyAxICE9IG51bUNvbG9yVmFs
dWVzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiLCI7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBvdXQgPDwgIlxuIjsKLSAgICAgICAgfQotICAgICAgICBvdXQg
PDwgIn07XG4iOwotCi0gICAgICAgIGlmIChtVXNlc0ZyYWdEZXB0aCkKLSAgICAgICAgewotICAg
ICAgICAgICAgb3V0IDw8ICJzdGF0aWMgZmxvYXQgZ2xfRGVwdGggPSAwLjA7XG4iOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKG1Vc2VzRnJhZ0Nvb3JkKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBvdXQgPDwgInN0YXRpYyBmbG9hdDQgZ2xfRnJhZ0Nvb3JkID0gZmxvYXQ0KDAsIDAsIDAsIDAp
O1xuIjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtVXNlc1BvaW50Q29vcmQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGZsb2F0MiBnbF9Qb2ludENvb3JkID0gZmxv
YXQyKDAuNSwgMC41KTtcbiI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVVzZXNGcm9udEZh
Y2luZykKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgYm9vbCBnbF9Gcm9u
dEZhY2luZyA9IGZhbHNlO1xuIjsKLSAgICAgICAgfQotCi0gICAgICAgIG91dCA8PCAiXG4iOwot
Ci0gICAgICAgIGlmIChtVXNlc0RlcHRoUmFuZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91
dCA8PCAic3RydWN0IGdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJzXG4iCi0gICAgICAgICAgICAgICAg
ICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IG5lYXI7XG4iCi0gICAgICAg
ICAgICAgICAgICAgIiAgICBmbG9hdCBmYXI7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBm
bG9hdCBkaWZmO1xuIgotICAgICAgICAgICAgICAgICAgICJ9O1xuIgotICAgICAgICAgICAgICAg
ICAgICJcbiI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExT
TDExX09VVFBVVCkKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICJjYnVmZmVyIERyaXZl
ckNvbnN0YW50cyA6IHJlZ2lzdGVyKGIxKVxuIgotICAgICAgICAgICAgICAgICAgICJ7XG4iOwot
Ci0gICAgICAgICAgICBpZiAobVVzZXNEZXB0aFJhbmdlKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0MyBkeF9EZXB0aFJhbmdlIDogcGFja29mZnNldChj
MCk7XG4iOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobVVzZXNGcmFnQ29vcmQp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQ0IGR4X1Zp
ZXdDb29yZHMgOiBwYWNrb2Zmc2V0KGMxKTtcbiI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmIChtVXNlc0ZyYWdDb29yZCB8fCBtVXNlc0Zyb250RmFjaW5nKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0MyBkeF9EZXB0aEZyb250IDogcGFj
a29mZnNldChjMik7XG4iOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBvdXQgPDwgIn07
XG4iOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KG1Vc2VzRGVwdGhSYW5nZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwg
InVuaWZvcm0gZmxvYXQzIGR4X0RlcHRoUmFuZ2UgOiByZWdpc3RlcihjMCk7IjsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKG1Vc2VzRnJhZ0Nvb3JkKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIG91dCA8PCAidW5pZm9ybSBmbG9hdDQgZHhfVmlld0Nvb3JkcyA6IHJl
Z2lzdGVyKGMxKTtcbiI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtVXNlc0Zy
YWdDb29yZCB8fCBtVXNlc0Zyb250RmFjaW5nKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG91dCA8PCAidW5pZm9ybSBmbG9hdDMgZHhfRGVwdGhGcm9udCA6IHJlZ2lzdGVyKGMyKTtc
biI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBvdXQgPDwgIlxuIjsKLQot
ICAgICAgICBpZiAobVVzZXNEZXB0aFJhbmdlKQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQg
PDwgInN0YXRpYyBnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyBnbF9EZXB0aFJhbmdlID0ge2R4X0Rl
cHRoUmFuZ2UueCwgZHhfRGVwdGhSYW5nZS55LCBkeF9EZXB0aFJhbmdlLnp9O1xuIgotICAgICAg
ICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG91dCA8PCAg
dW5pZm9ybXM7Ci0gICAgICAgIG91dCA8PCAiXG4iOwotCi0gICAgICAgIGlmIChtVXNlc1RleHR1
cmUyRCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5
X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBn
bF90ZXh0dXJlMkQoc2FtcGxlcjJEIHMsIGZsb2F0MiB0KVxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRChzLCB0
KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBl
ID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0
IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxv
YXQyIHV2KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZShzLCB1dik7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAobVVzZXNUZXh0dXJlMkRfYmlhcykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRw
dXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoc2FtcGxlcjJEIHMsIGZsb2F0MiB0LCBmbG9h
dCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCwgdC55LCAwLCBiaWFz
KSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlw
ZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91
dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZs
b2F0MiB1diwgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVCaWFzKHMsIHV2LCBiaWFz
KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2opCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihz
YW1wbGVyMkQgcywgZmxvYXQzIHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEcHJvaihzLCBmbG9hdDQodC54
LCB0LnksIDAsIHQueikpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAg
ICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xf
dGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQ0IHQpXG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEcHJv
aihzLCB0KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRw
dXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihUZXh0dXJlMkQgdCwgU2FtcGxlclN0
YXRlIHMsIGZsb2F0MyB1dncpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlKHMsIGZsb2F0Mih1dncueCAv
IHV2dy56LCB1dncueSAvIHV2dy56KSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgImZs
b2F0NCBnbF90ZXh0dXJlMkRQcm9qKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQ0
IHV2dylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGUocywgZmxvYXQyKHV2dy54IC8gdXZ3LncsIHV2dy55
IC8gdXZ3LncpKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pfYmlh
cykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09V
VFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90
ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdGV4MkRiaWFzKHMsIGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQueiwgMCwgYmlhcykpO1xu
IgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1w
bGVyMkQgcywgZmxvYXQ0IHQsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEYmlhcyhzLCBm
bG9hdDQodC54IC8gdC53LCB0LnkgLyB0LncsIDAsIGJpYXMpKTtcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVy
ZTJEUHJvaihUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncsIGZsb2F0IGJp
YXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICIgICAgcmV0dXJuIHQuU2FtcGxlQmlhcyhzLCBmbG9hdDIodXZ3LnggLyB1dncueiwgdXZ3
LnkgLyB1dncueiksIGJpYXMpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQg
Z2xfdGV4dHVyZTJEUHJvaihUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0NCB1dncs
IGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlQmlhcyhzLCBmbG9hdDIodXZ3LnggLyB1
dncudywgdXZ3LnkgLyB1dncudyksIGJpYXMpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAi
fVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1Vc2Vz
VGV4dHVyZUN1YmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBT
SF9ITFNMOV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJm
bG9hdDQgZ2xfdGV4dHVyZUN1YmUoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQpXG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHRleENVQkUocywgdCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlm
IChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlKFRleHR1cmVDdWJlIHQsIFNh
bXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xu
IgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZShzLCB1dncpO1xu
IgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
XG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVfYmlhcykKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShzYW1w
bGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRWJpYXMo
cywgZmxvYXQ0KHQueCwgdC55LCB0LnosIGJpYXMpKTtcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUo
VGV4dHVyZUN1YmUgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncsIGZsb2F0IGJpYXMpXG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIg
ICAgcmV0dXJuIHQuU2FtcGxlQmlhcyhzLCB1dncsIGJpYXMpO1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gVGhlc2UgKkxvZDAgaW50cmluc2ljcyBhcmUgbm90IGF2YWlsYWJsZSBpbiBHTCBmcmFnbWVu
dCBzaGFkZXJzLgotICAgICAgICAvLyBUaGV5IGFyZSB1c2VkIHRvIHNhbXBsZSB1c2luZyBkaXNj
b250aW51b3VzIHRleHR1cmUgY29vcmRpbmF0ZXMuCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmUy
RExvZDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNM
OV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQg
Z2xfdGV4dHVyZTJETG9kMChzYW1wbGVyMkQgcywgZmxvYXQyIHQpXG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJE
bG9kKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAg
ICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRMb2Qw
KFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2KVxuIgotICAgICAgICAgICAg
ICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNh
bXBsZUxldmVsKHMsIHV2LCAwKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmUy
RExvZDBfYmlhcykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNI
X0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZs
b2F0NCBnbF90ZXh0dXJlMkRMb2QwKHNhbXBsZXIyRCBzLCBmbG9hdDIgdCwgZmxvYXQgYmlhcylc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55LCAwLCAwKSk7XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNM
MTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0
IGdsX3RleHR1cmUyRExvZDAoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDIgdXYs
IGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXYsIDApO1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJvakxvZDApCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZDAoc2Ft
cGxlcjJEIHMsIGZsb2F0MyB0KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8g
dC56LCB0LnkgLyB0LnosIDAsIDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICAgICAiZmxv
YXQ0IGdsX3RleHR1cmUyRFByb2pMb2Qoc2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxuIgotICAgICAg
ICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVy
biB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC53LCB0LnkgLyB0LncsIDAsIDApKTtcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hM
U0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9h
dDQgZ2xfdGV4dHVyZTJEUHJvakxvZDAoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9h
dDMgdXZ3KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy56
LCB1dncueSAvIHV2dy56KSwgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0
NCBnbF90ZXh0dXJlMkRQcm9qTG9kMChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0
NCB1dncpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3Lncs
IHV2dy55IC8gdXZ3LncpLCAwKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmUy
RFByb2pMb2QwX2JpYXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9
PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8
ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZDBfYmlhcyhzYW1wbGVyMkQgcywgZmxvYXQzIHQs
IGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LnosIHQu
eSAvIHQueiwgMCwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAg
ICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xf
dGV4dHVyZTJEUHJvakxvZF9iaWFzKHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQgYmlhcylc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53LCAwLCAw
KSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlw
ZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91
dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2RfYmlhcyhUZXh0dXJlMkQgdCwgU2FtcGxl
clN0YXRlIHMsIGZsb2F0MyB1dncsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2
ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3LnosIHV2dy55IC8gdXZ3LnopLCAwKTtcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2RfYmlhcyhUZXh0
dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0NCB1dncsIGZsb2F0IGJpYXMpXG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHQuU2FtcGxlTGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3LncsIHV2dy55IC8gdXZ3Lncp
LCAwKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUo
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmVDdWJlTG9kMCkKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3Vi
ZUxvZDAoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkVsb2Qocywg
ZmxvYXQ0KHQueCwgdC55LCB0LnosIDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1c
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmVMb2QwKFRl
eHR1cmVDdWJlIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3KVxuIgotICAgICAgICAgICAg
ICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNh
bXBsZUxldmVsKHMsIHV2dywgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVVzZXNUZXh0dXJl
Q3ViZUxvZDBfYmlhcykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09
IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwg
ImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxvZDAoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQsIGZsb2F0
IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIDAp
KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBl
ID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0
IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmVMb2QwKFRleHR1cmVDdWJlIHQsIFNhbXBsZXJTdGF0
ZSBzLCBmbG9hdDMgdXZ3LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
e1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMs
IHV2dywgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodXNpbmdNUlRFeHRlbnNpb24gJiYgbU51
bVJlbmRlclRhcmdldHMgPiAxKQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgIiNkZWZp
bmUgR0xfVVNFU19NUlRcbiI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVVzZXNGcmFnQ29s
b3IpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX0ZSQUdf
Q09MT1JcbiI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVVzZXNGcmFnRGF0YSkKLSAgICAg
ICAgewotICAgICAgICAgICAgb3V0IDw8ICIjZGVmaW5lIEdMX1VTRVNfRlJBR19EQVRBXG4iOwot
ICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgICAvLyBWZXJ0ZXggc2hhZGVyCi0gICAgewotICAg
ICAgICBvdXQgPDwgIi8vIEF0dHJpYnV0ZXNcbiI7Ci0gICAgICAgIG91dCA8PCAgYXR0cmlidXRl
czsKLSAgICAgICAgb3V0IDw8ICJcbiIKLSAgICAgICAgICAgICAgICJzdGF0aWMgZmxvYXQ0IGds
X1Bvc2l0aW9uID0gZmxvYXQ0KDAsIDAsIDAsIDApO1xuIjsKLSAgICAgICAgCi0gICAgICAgIGlm
IChtVXNlc1BvaW50U2l6ZSkKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMg
ZmxvYXQgZ2xfUG9pbnRTaXplID0gZmxvYXQoMSk7XG4iOwotICAgICAgICB9Ci0KLSAgICAgICAg
b3V0IDw8ICJcbiIKLSAgICAgICAgICAgICAgICIvLyBWYXJ5aW5nc1xuIjsKLSAgICAgICAgb3V0
IDw8ICB2YXJ5aW5nczsKLSAgICAgICAgb3V0IDw8ICJcbiI7Ci0KLSAgICAgICAgaWYgKG1Vc2Vz
RGVwdGhSYW5nZSkKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICJzdHJ1Y3QgZ2xfRGVw
dGhSYW5nZVBhcmFtZXRlcnNcbiIKLSAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAg
ICAgICAgICAgICIgICAgZmxvYXQgbmVhcjtcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIGZs
b2F0IGZhcjtcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGRpZmY7XG4iCi0gICAg
ICAgICAgICAgICAgICAgIn07XG4iCi0gICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAobVVzZXNEZXB0aFJhbmdlKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIG91dCA8PCAiY2J1ZmZlciBEcml2ZXJDb25zdGFudHMgOiByZWdpc3Rlcihi
MSlcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIiAgICBmbG9hdDMgZHhfRGVwdGhSYW5nZSA6IHBhY2tvZmZzZXQoYzApO1xuIgotICAgICAg
ICAgICAgICAgICAgICAgICAifTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmIChtVXNlc0RlcHRoUmFuZ2UpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
b3V0IDw8ICJ1bmlmb3JtIGZsb2F0MyBkeF9EZXB0aFJhbmdlIDogcmVnaXN0ZXIoYzApO1xuIjsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgb3V0IDw8ICJ1bmlmb3JtIGZsb2F0NCBkeF9W
aWV3QWRqdXN0IDogcmVnaXN0ZXIoYzEpO1xuIgotICAgICAgICAgICAgICAgICAgICJcbiI7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAobVVzZXNEZXB0aFJhbmdlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBvdXQgPDwgInN0YXRpYyBnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyBnbF9EZXB0aFJh
bmdlID0ge2R4X0RlcHRoUmFuZ2UueCwgZHhfRGVwdGhSYW5nZS55LCBkeF9EZXB0aFJhbmdlLnp9
O1xuIgotICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgIH0KLQotICAgICAgICBvdXQg
PDwgdW5pZm9ybXM7Ci0gICAgICAgIG91dCA8PCAiXG4iOwotICAgICAgICAKLSAgICAgICAgaWYg
KG1Vc2VzVGV4dHVyZTJEKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUg
PT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8
PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChzYW1wbGVyMkQgcywgZmxvYXQyIHQpXG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHRleDJEbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgMCkpO1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJl
MkQoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDIgdXYpXG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQu
U2FtcGxlTGV2ZWwocywgdXYsIDApO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVy
ZTJETG9kKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExT
TDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0
IGdsX3RleHR1cmUyRExvZChzYW1wbGVyMkQgcywgZmxvYXQyIHQsIGZsb2F0IGxvZClcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55LCAwLCBsb2QpKTtcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9P
VVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xf
dGV4dHVyZTJETG9kKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2LCBmbG9h
dCBsb2QpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXYsIGxvZCk7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRQcm9qKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZs
b2F0MyB0KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC56LCB0LnkgLyB0
LnosIDAsIDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1
cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxuIgotICAgICAgICAgICAgICAgICAgICAg
ICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBm
bG9hdDQodC54IC8gdC53LCB0LnkgLyB0LncsIDAsIDApKTtcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJE
UHJvaihUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncpXG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHQuU2FtcGxlTGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3LnosIHV2dy55IC8gdXZ3LnopLCAw
KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIlxuIgotICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2oo
VGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3KVxuIgotICAgICAgICAgICAg
ICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNh
bXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy53LCB1dncueSAvIHV2dy53KSwgMCk7XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJc
biI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRQcm9qTG9kKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2Qo
c2FtcGxlcjJEIHMsIGZsb2F0MyB0LCBmbG9hdCBsb2QpXG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMs
IGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQueiwgMCwgbG9kKSk7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBzLCBmbG9h
dDQgdCwgZmxvYXQgbG9kKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC53
LCB0LnkgLyB0LncsIDAsIGxvZCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKFRleHR1cmUy
RCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQgbG9kKVxuIgotICAgICAgICAg
ICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0
LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy56LCB1dncueSAvIHV2dy56KSwgbG9k
KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIlxuIgotICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2oo
VGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3KVxuIgotICAgICAgICAgICAg
ICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNh
bXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy53LCB1dncueSAvIHV2dy53KSwgbG9kKTtc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmVDdWJlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlKHNhbXBsZXJD
VUJFIHMsIGZsb2F0MyB0KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFbG9kKHMsIGZsb2F0NCh0LngsIHQu
eSwgdC56LCAwKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICht
T3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlKFRleHR1cmVDdWJlIHQsIFNhbXBs
ZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIHV2dywg
MCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZUxvZCkKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxv
ZChzYW1wbGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxvYXQgbG9kKVxuIgotICAgICAgICAgICAgICAg
ICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJF
bG9kKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCBsb2QpKTtcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1
YmVMb2QoVGV4dHVyZUN1YmUgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncsIGZsb2F0IGxv
ZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1dncsIGxvZCk7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAobVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBvdXQgPDwgIiNkZWZp
bmUgR0xfVVNFU19GUkFHX0NPT1JEXG4iOwotICAgIH0KLQotICAgIGlmIChtVXNlc1BvaW50Q29v
cmQpCi0gICAgewotICAgICAgICBvdXQgPDwgIiNkZWZpbmUgR0xfVVNFU19QT0lOVF9DT09SRFxu
IjsKLSAgICB9Ci0KLSAgICBpZiAobVVzZXNGcm9udEZhY2luZykKLSAgICB7Ci0gICAgICAgIG91
dCA8PCAiI2RlZmluZSBHTF9VU0VTX0ZST05UX0ZBQ0lOR1xuIjsKLSAgICB9Ci0KLSAgICBpZiAo
bVVzZXNQb2ludFNpemUpCi0gICAgewotICAgICAgICBvdXQgPDwgIiNkZWZpbmUgR0xfVVNFU19Q
T0lOVF9TSVpFXG4iOwotICAgIH0KLQotICAgIGlmIChtVXNlc0ZyYWdEZXB0aCkKLSAgICB7Ci0g
ICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX0ZSQUdfREVQVEhcbiI7Ci0gICAgfQotCi0g
ICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkKLSAgICB7Ci0gICAgICAgIG91dCA8PCAiI2RlZmluZSBH
TF9VU0VTX0RFUFRIX1JBTkdFXG4iOwotICAgIH0KLQotICAgIGlmIChtVXNlc1hvcikKLSAgICB7
Ci0gICAgICAgIG91dCA8PCAiYm9vbCB4b3IoYm9vbCBwLCBib29sIHEpXG4iCi0gICAgICAgICAg
ICAgICAie1xuIgotICAgICAgICAgICAgICAgIiAgICByZXR1cm4gKHAgfHwgcSkgJiYgIShwICYm
IHEpO1xuIgotICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICJcbiI7Ci0gICAg
fQotCi0gICAgaWYgKG1Vc2VzTW9kMSkKLSAgICB7Ci0gICAgICAgIG91dCA8PCAiZmxvYXQgbW9k
KGZsb2F0IHgsIGZsb2F0IHkpXG4iCi0gICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4geCAtIHkgKiBmbG9vcih4IC8geSk7XG4iCi0gICAgICAgICAgICAgICAi
fVxuIgotICAgICAgICAgICAgICAgIlxuIjsKLSAgICB9Ci0KLSAgICBpZiAobVVzZXNNb2QydikK
LSAgICB7Ci0gICAgICAgIG91dCA8PCAiZmxvYXQyIG1vZChmbG9hdDIgeCwgZmxvYXQyIHkpXG4i
Ci0gICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgIiAgICByZXR1cm4geCAtIHkg
KiBmbG9vcih4IC8geSk7XG4iCi0gICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAg
IlxuIjsKLSAgICB9Ci0KLSAgICBpZiAobVVzZXNNb2QyZikKLSAgICB7Ci0gICAgICAgIG91dCA8
PCAiZmxvYXQyIG1vZChmbG9hdDIgeCwgZmxvYXQgeSlcbiIKLSAgICAgICAgICAgICAgICJ7XG4i
Ci0gICAgICAgICAgICAgICAiICAgIHJldHVybiB4IC0geSAqIGZsb29yKHggLyB5KTtcbiIKLSAg
ICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAiXG4iOwotICAgIH0KLSAgICAKLSAg
ICBpZiAobVVzZXNNb2QzdikKLSAgICB7Ci0gICAgICAgIG91dCA8PCAiZmxvYXQzIG1vZChmbG9h
dDMgeCwgZmxvYXQzIHkpXG4iCi0gICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAg
IiAgICByZXR1cm4geCAtIHkgKiBmbG9vcih4IC8geSk7XG4iCi0gICAgICAgICAgICAgICAifVxu
IgotICAgICAgICAgICAgICAgIlxuIjsKLSAgICB9Ci0KLSAgICBpZiAobVVzZXNNb2QzZikKLSAg
ICB7Ci0gICAgICAgIG91dCA8PCAiZmxvYXQzIG1vZChmbG9hdDMgeCwgZmxvYXQgeSlcbiIKLSAg
ICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAiICAgIHJldHVybiB4IC0geSAqIGZs
b29yKHggLyB5KTtcbiIKLSAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAiXG4i
OwotICAgIH0KLQotICAgIGlmIChtVXNlc01vZDR2KQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJm
bG9hdDQgbW9kKGZsb2F0NCB4LCBmbG9hdDQgeSlcbiIKLSAgICAgICAgICAgICAgICJ7XG4iCi0g
ICAgICAgICAgICAgICAiICAgIHJldHVybiB4IC0geSAqIGZsb29yKHggLyB5KTtcbiIKLSAgICAg
ICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAiXG4iOwotICAgIH0KLQotICAgIGlmICht
VXNlc01vZDRmKQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJmbG9hdDQgbW9kKGZsb2F0NCB4LCBm
bG9hdCB5KVxuIgotICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHggLSB5ICogZmxvb3IoeCAvIHkpO1xuIgotICAgICAgICAgICAgICAgIn1cbiIKLSAgICAg
ICAgICAgICAgICJcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1Vc2VzRmFjZWZvcndhcmQxKQotICAg
IHsKLSAgICAgICAgb3V0IDw8ICJmbG9hdCBmYWNlZm9yd2FyZChmbG9hdCBOLCBmbG9hdCBJLCBm
bG9hdCBOcmVmKVxuIgotICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICIgICAg
aWYoZG90KE5yZWYsIEkpID49IDApXG4iCi0gICAgICAgICAgICAgICAiICAgIHtcbiIKLSAgICAg
ICAgICAgICAgICIgICAgICAgIHJldHVybiAtTjtcbiIKLSAgICAgICAgICAgICAgICIgICAgfVxu
IgotICAgICAgICAgICAgICAgIiAgICBlbHNlXG4iCi0gICAgICAgICAgICAgICAiICAgIHtcbiIK
LSAgICAgICAgICAgICAgICIgICAgICAgIHJldHVybiBOO1xuIgotICAgICAgICAgICAgICAgIiAg
ICB9XG4iCi0gICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgIlxuIjsKLSAgICB9
Ci0KLSAgICBpZiAobVVzZXNGYWNlZm9yd2FyZDIpCi0gICAgewotICAgICAgICBvdXQgPDwgImZs
b2F0MiBmYWNlZm9yd2FyZChmbG9hdDIgTiwgZmxvYXQyIEksIGZsb2F0MiBOcmVmKVxuIgotICAg
ICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICIgICAgaWYoZG90KE5yZWYsIEkpID49
IDApXG4iCi0gICAgICAgICAgICAgICAiICAgIHtcbiIKLSAgICAgICAgICAgICAgICIgICAgICAg
IHJldHVybiAtTjtcbiIKLSAgICAgICAgICAgICAgICIgICAgfVxuIgotICAgICAgICAgICAgICAg
IiAgICBlbHNlXG4iCi0gICAgICAgICAgICAgICAiICAgIHtcbiIKLSAgICAgICAgICAgICAgICIg
ICAgICAgIHJldHVybiBOO1xuIgotICAgICAgICAgICAgICAgIiAgICB9XG4iCi0gICAgICAgICAg
ICAgICAifVxuIgotICAgICAgICAgICAgICAgIlxuIjsKLSAgICB9Ci0KLSAgICBpZiAobVVzZXNG
YWNlZm9yd2FyZDMpCi0gICAgewotICAgICAgICBvdXQgPDwgImZsb2F0MyBmYWNlZm9yd2FyZChm
bG9hdDMgTiwgZmxvYXQzIEksIGZsb2F0MyBOcmVmKVxuIgotICAgICAgICAgICAgICAgIntcbiIK
LSAgICAgICAgICAgICAgICIgICAgaWYoZG90KE5yZWYsIEkpID49IDApXG4iCi0gICAgICAgICAg
ICAgICAiICAgIHtcbiIKLSAgICAgICAgICAgICAgICIgICAgICAgIHJldHVybiAtTjtcbiIKLSAg
ICAgICAgICAgICAgICIgICAgfVxuIgotICAgICAgICAgICAgICAgIiAgICBlbHNlXG4iCi0gICAg
ICAgICAgICAgICAiICAgIHtcbiIKLSAgICAgICAgICAgICAgICIgICAgICAgIHJldHVybiBOO1xu
IgotICAgICAgICAgICAgICAgIiAgICB9XG4iCi0gICAgICAgICAgICAgICAifVxuIgotICAgICAg
ICAgICAgICAgIlxuIjsKLSAgICB9Ci0KLSAgICBpZiAobVVzZXNGYWNlZm9yd2FyZDQpCi0gICAg
ewotICAgICAgICBvdXQgPDwgImZsb2F0NCBmYWNlZm9yd2FyZChmbG9hdDQgTiwgZmxvYXQ0IEks
IGZsb2F0NCBOcmVmKVxuIgotICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICIg
ICAgaWYoZG90KE5yZWYsIEkpID49IDApXG4iCi0gICAgICAgICAgICAgICAiICAgIHtcbiIKLSAg
ICAgICAgICAgICAgICIgICAgICAgIHJldHVybiAtTjtcbiIKLSAgICAgICAgICAgICAgICIgICAg
fVxuIgotICAgICAgICAgICAgICAgIiAgICBlbHNlXG4iCi0gICAgICAgICAgICAgICAiICAgIHtc
biIKLSAgICAgICAgICAgICAgICIgICAgICAgIHJldHVybiBOO1xuIgotICAgICAgICAgICAgICAg
IiAgICB9XG4iCi0gICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgIlxuIjsKLSAg
ICB9Ci0KLSAgICBpZiAobVVzZXNBdGFuMl8xKQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJmbG9h
dCBhdGFueXgoZmxvYXQgeSwgZmxvYXQgeClcbiIKLSAgICAgICAgICAgICAgICJ7XG4iCi0gICAg
ICAgICAgICAgICAiICAgIGlmKHggPT0gMCAmJiB5ID09IDApIHggPSAxO1xuIiAgIC8vIEF2b2lk
IHByb2R1Y2luZyBhIE5hTgotICAgICAgICAgICAgICAgIiAgICByZXR1cm4gYXRhbjIoeSwgeCk7
XG4iCi0gICAgICAgICAgICAgICAifVxuIjsKLSAgICB9Ci0KLSAgICBpZiAobVVzZXNBdGFuMl8y
KQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJmbG9hdDIgYXRhbnl4KGZsb2F0MiB5LCBmbG9hdDIg
eClcbiIKLSAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAiICAgIGlmKHhbMF0g
PT0gMCAmJiB5WzBdID09IDApIHhbMF0gPSAxO1xuIgotICAgICAgICAgICAgICAgIiAgICBpZih4
WzFdID09IDAgJiYgeVsxXSA9PSAwKSB4WzFdID0gMTtcbiIKLSAgICAgICAgICAgICAgICIgICAg
cmV0dXJuIGZsb2F0MihhdGFuMih5WzBdLCB4WzBdKSwgYXRhbjIoeVsxXSwgeFsxXSkpO1xuIgot
ICAgICAgICAgICAgICAgIn1cbiI7Ci0gICAgfQotCi0gICAgaWYgKG1Vc2VzQXRhbjJfMykKLSAg
ICB7Ci0gICAgICAgIG91dCA8PCAiZmxvYXQzIGF0YW55eChmbG9hdDMgeSwgZmxvYXQzIHgpXG4i
Ci0gICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgIiAgICBpZih4WzBdID09IDAg
JiYgeVswXSA9PSAwKSB4WzBdID0gMTtcbiIKLSAgICAgICAgICAgICAgICIgICAgaWYoeFsxXSA9
PSAwICYmIHlbMV0gPT0gMCkgeFsxXSA9IDE7XG4iCi0gICAgICAgICAgICAgICAiICAgIGlmKHhb
Ml0gPT0gMCAmJiB5WzJdID09IDApIHhbMl0gPSAxO1xuIgotICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gZmxvYXQzKGF0YW4yKHlbMF0sIHhbMF0pLCBhdGFuMih5WzFdLCB4WzFdKSwgYXRhbjIo
eVsyXSwgeFsyXSkpO1xuIgotICAgICAgICAgICAgICAgIn1cbiI7Ci0gICAgfQotCi0gICAgaWYg
KG1Vc2VzQXRhbjJfNCkKLSAgICB7Ci0gICAgICAgIG91dCA8PCAiZmxvYXQ0IGF0YW55eChmbG9h
dDQgeSwgZmxvYXQ0IHgpXG4iCi0gICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAg
IiAgICBpZih4WzBdID09IDAgJiYgeVswXSA9PSAwKSB4WzBdID0gMTtcbiIKLSAgICAgICAgICAg
ICAgICIgICAgaWYoeFsxXSA9PSAwICYmIHlbMV0gPT0gMCkgeFsxXSA9IDE7XG4iCi0gICAgICAg
ICAgICAgICAiICAgIGlmKHhbMl0gPT0gMCAmJiB5WzJdID09IDApIHhbMl0gPSAxO1xuIgotICAg
ICAgICAgICAgICAgIiAgICBpZih4WzNdID09IDAgJiYgeVszXSA9PSAwKSB4WzNdID0gMTtcbiIK
LSAgICAgICAgICAgICAgICIgICAgcmV0dXJuIGZsb2F0NChhdGFuMih5WzBdLCB4WzBdKSwgYXRh
bjIoeVsxXSwgeFsxXSksIGF0YW4yKHlbMl0sIHhbMl0pLCBhdGFuMih5WzNdLCB4WzNdKSk7XG4i
Ci0gICAgICAgICAgICAgICAifVxuIjsKLSAgICB9Ci19Ci0KLXZvaWQgT3V0cHV0SExTTDo6dmlz
aXRTeW1ib2woVEludGVybVN5bWJvbCAqbm9kZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlICZvdXQg
PSBtQm9keTsKLQotICAgIFRTdHJpbmcgbmFtZSA9IG5vZGUtPmdldFN5bWJvbCgpOwotCi0gICAg
aWYgKG5hbWUgPT0gImdsX0ZyYWdDb2xvciIpCi0gICAgewotICAgICAgICBvdXQgPDwgImdsX0Nv
bG9yWzBdIjsKLSAgICAgICAgbVVzZXNGcmFnQ29sb3IgPSB0cnVlOwotICAgIH0KLSAgICBlbHNl
IGlmIChuYW1lID09ICJnbF9GcmFnRGF0YSIpCi0gICAgewotICAgICAgICBvdXQgPDwgImdsX0Nv
bG9yIjsKLSAgICAgICAgbVVzZXNGcmFnRGF0YSA9IHRydWU7Ci0gICAgfQotICAgIGVsc2UgaWYg
KG5hbWUgPT0gImdsX0RlcHRoUmFuZ2UiKQotICAgIHsKLSAgICAgICAgbVVzZXNEZXB0aFJhbmdl
ID0gdHJ1ZTsKLSAgICAgICAgb3V0IDw8IG5hbWU7Ci0gICAgfQotICAgIGVsc2UgaWYgKG5hbWUg
PT0gImdsX0ZyYWdDb29yZCIpCi0gICAgewotICAgICAgICBtVXNlc0ZyYWdDb29yZCA9IHRydWU7
Ci0gICAgICAgIG91dCA8PCBuYW1lOwotICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9Q
b2ludENvb3JkIikKLSAgICB7Ci0gICAgICAgIG1Vc2VzUG9pbnRDb29yZCA9IHRydWU7Ci0gICAg
ICAgIG91dCA8PCBuYW1lOwotICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9Gcm9udEZh
Y2luZyIpCi0gICAgewotICAgICAgICBtVXNlc0Zyb250RmFjaW5nID0gdHJ1ZTsKLSAgICAgICAg
b3V0IDw8IG5hbWU7Ci0gICAgfQotICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX1BvaW50U2l6ZSIp
Ci0gICAgewotICAgICAgICBtVXNlc1BvaW50U2l6ZSA9IHRydWU7Ci0gICAgICAgIG91dCA8PCBu
YW1lOwotICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9GcmFnRGVwdGhFWFQiKQotICAg
IHsKLSAgICAgICAgbVVzZXNGcmFnRGVwdGggPSB0cnVlOwotICAgICAgICBvdXQgPDwgImdsX0Rl
cHRoIjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsaWZp
ZXIgPSBub2RlLT5nZXRRdWFsaWZpZXIoKTsKLQotICAgICAgICBpZiAocXVhbGlmaWVyID09IEV2
cVVuaWZvcm0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1SZWZlcmVuY2VkVW5pZm9ybXNbbmFt
ZV0gPSBub2RlOwotICAgICAgICAgICAgb3V0IDw8IGRlY29yYXRlVW5pZm9ybShuYW1lLCBub2Rl
LT5nZXRUeXBlKCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBF
dnFBdHRyaWJ1dGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1SZWZlcmVuY2VkQXR0cmlidXRl
c1tuYW1lXSA9IG5vZGU7Ci0gICAgICAgICAgICBvdXQgPDwgZGVjb3JhdGUobmFtZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZSBpZiAocXVhbGlmaWVyID09IEV2cVZhcnlpbmdPdXQgfHwgcXVh
bGlmaWVyID09IEV2cUludmFyaWFudFZhcnlpbmdPdXQgfHwgcXVhbGlmaWVyID09IEV2cVZhcnlp
bmdJbiB8fCBxdWFsaWZpZXIgPT0gRXZxSW52YXJpYW50VmFyeWluZ0luKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtUmVmZXJlbmNlZFZhcnlpbmdzW25hbWVdID0gbm9kZTsKLSAgICAgICAgICAg
IG91dCA8PCBkZWNvcmF0ZShuYW1lKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKTsKLSAgICAgICAgfQotICAgIH0K
LX0KLQotYm9vbCBPdXRwdXRITFNMOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJp
bmFyeSAqbm9kZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKLQotICAgIHN3
aXRjaCAobm9kZS0+Z2V0T3AoKSkKLSAgICB7Ci0gICAgICBjYXNlIEVPcEFzc2lnbjogICAgICAg
ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPSAiLCAiKSIpOyAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcEluaXRpYWxpemU6Ci0gICAgICAgIGlmICh2aXNpdCA9
PSBQcmVWaXNpdCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gR0xTTCBhbGxvd3MgdG8gd3Jp
dGUgdGhpbmdzIGxpa2UgImZsb2F0IHggPSB4OyIgd2hlcmUgYSBuZXcgdmFyaWFibGUgeCBpcyBk
ZWZpbmVkCi0gICAgICAgICAgICAvLyBhbmQgdGhlIHZhbHVlIG9mIGFuIGV4aXN0aW5nIHZhcmlh
YmxlIHggaXMgYXNzaWduZWQuIEhMU0wgdXNlcyBDIHNlbWFudGljcyAodGhlCi0gICAgICAgICAg
ICAvLyBuZXcgdmFyaWFibGUgaXMgY3JlYXRlZCBiZWZvcmUgdGhlIGFzc2lnbm1lbnQgaXMgZXZh
bHVhdGVkKSwgc28gd2UgbmVlZCB0byBjb252ZXJ0Ci0gICAgICAgICAgICAvLyB0aGlzIHRvICJm
bG9hdCB0ID0geCwgeCA9IHQ7Ii4KLQotICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9s
Tm9kZSA9IG5vZGUtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0gICAgICAgICAgICBU
SW50ZXJtVHlwZWQgKmV4cHJlc3Npb24gPSBub2RlLT5nZXRSaWdodCgpOwotCi0gICAgICAgICAg
ICBzaDo6U2VhcmNoU3ltYm9sIHNlYXJjaFN5bWJvbChzeW1ib2xOb2RlLT5nZXRTeW1ib2woKSk7
Ci0gICAgICAgICAgICBleHByZXNzaW9uLT50cmF2ZXJzZSgmc2VhcmNoU3ltYm9sKTsKLSAgICAg
ICAgICAgIGJvb2wgc2FtZVN5bWJvbCA9IHNlYXJjaFN5bWJvbC5mb3VuZE1hdGNoKCk7Ci0KLSAg
ICAgICAgICAgIGlmIChzYW1lU3ltYm9sKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IC8vIFR5cGUgYWxyZWFkeSBwcmludGVkCi0gICAgICAgICAgICAgICAgb3V0IDw8ICJ0IiArIHN0
cihtVW5pcXVlSW5kZXgpICsgIiA9ICI7Ci0gICAgICAgICAgICAgICAgZXhwcmVzc2lvbi0+dHJh
dmVyc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7Ci0gICAgICAgICAgICAg
ICAgc3ltYm9sTm9kZS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIg
PSB0IiArIHN0cihtVW5pcXVlSW5kZXgpOwotCi0gICAgICAgICAgICAgICAgbVVuaXF1ZUluZGV4
Kys7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG91dCA8PCAiID0gIjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgRU9wQWRkQXNzaWduOiAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwg
IiArPSAiLCAiKSIpOyAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wU3ViQXNzaWduOiAg
ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAtPSAiLCAiKSIpOyAgICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wTXVsQXNzaWduOiAgICAgICAgICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICIoIiwgIiAqPSAiLCAiKSIpOyAgICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXJBc3NpZ246IG91dHB1dFRyaXBsZXQodmlzaXQsICIo
IiwgIiAqPSAiLCAiKSIpOyAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wTWF0cml4VGlt
ZXNTY2FsYXJBc3NpZ246IG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAqPSAiLCAiKSIpOyAg
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXhBc3NpZ246Ci0g
ICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKLSAgICAgICAgewotICAgICAgICAgICAgb3V0
IDw8ICIoIjsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgIiA9IG11bCgiOwotICAgICAgICAgICAgbm9k
ZS0+Z2V0TGVmdCgpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgIG91dCA8PCAiLCB0cmFu
c3Bvc2UoIjsgICAKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG91dCA8PCAiKSkpIjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
RU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246Ci0gICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNp
dCkKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICIoIjsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQg
PDwgIiA9IG11bCgiOwotICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJzZSh0aGlz
KTsKLSAgICAgICAgICAgIG91dCA8PCAiLCAiOyAgIAotICAgICAgICB9Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICIpKSI7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEVPcERpdkFzc2lnbjogICAgICAgICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiKCIsICIgLz0gIiwgIikiKTsgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEVPcEluZGV4RGlyZWN0OiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiIiwgIlsi
LCAiXSIpOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6
ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiIiwgIlsiLCAiXSIpOyAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3RydWN0OgotICAgICAgICBpZiAo
dmlzaXQgPT0gSW5WaXNpdCkKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgVFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCk7Ci0g
ICAgICAgICAgICBjb25zdCBUSW50ZXJtQ29uc3RhbnRVbmlvbiogaW5kZXggPSBub2RlLT5nZXRS
aWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLSAgICAgICAgICAgIGNvbnN0IFRGaWVsZCog
ZmllbGQgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpW2luZGV4LT5nZXRJQ29uc3QoMCldOwotICAgICAg
ICAgICAgb3V0IDw8ICIuIiArIGRlY29yYXRlRmllbGQoZmllbGQtPm5hbWUoKSwgbm9kZS0+Z2V0
TGVmdCgpLT5nZXRUeXBlKCkpOwotCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFZlY3RvclN3aXp6bGU6Ci0gICAgICAg
IGlmICh2aXNpdCA9PSBJblZpc2l0KQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgIi4i
OwotCi0gICAgICAgICAgICBUSW50ZXJtQWdncmVnYXRlICpzd2l6emxlID0gbm9kZS0+Z2V0Umln
aHQoKS0+Z2V0QXNBZ2dyZWdhdGUoKTsKLQotICAgICAgICAgICAgaWYgKHN3aXp6bGUpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IHN3
aXp6bGUtPmdldFNlcXVlbmNlKCk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1
ZW5jZTo6aXRlcmF0b3Igc2l0ID0gc2VxdWVuY2UuYmVnaW4oKTsgc2l0ICE9IHNlcXVlbmNlLmVu
ZCgpOyBzaXQrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFRJbnRl
cm1Db25zdGFudFVuaW9uICplbGVtZW50ID0gKCpzaXQpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsK
LQotICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCkKLSAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGkgPSBlbGVtZW50LT5nZXRJQ29uc3QoMCk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoaSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDogb3V0IDw8ICJ4IjsgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IG91dCA8PCAieSI7IGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBvdXQgPDwgInoiOyBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgMzogb3V0IDw8ICJ3IjsgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2Ug
VU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAv
LyBGdWxseSBwcm9jZXNzZWQKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
RU9wQWRkOiAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiArICIsICIp
Iik7IGJyZWFrOwotICAgICAgY2FzZSBFT3BTdWI6ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgIigiLCAiIC0gIiwgIikiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcE11bDogICAg
ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgKiAiLCAiKSIpOyBicmVhazsK
LSAgICAgIGNhc2UgRU9wRGl2OiAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIo
IiwgIiAvICIsICIpIik7IGJyZWFrOwotICAgICAgY2FzZSBFT3BFcXVhbDoKLSAgICAgIGNhc2Ug
RU9wTm90RXF1YWw6Ci0gICAgICAgIGlmIChub2RlLT5nZXRMZWZ0KCktPmlzU2NhbGFyKCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChub2RlLT5nZXRPcCgpID09IEVPcEVxdWFsKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA9
PSAiLCAiKSIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAhPSAiLCAiKSIp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldExl
ZnQoKS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAobm9kZS0+Z2V0T3AoKSA9PSBFT3BFcXVhbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBvdXQgPDwgIigiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiISgiOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBjb25zdCBURmllbGRMaXN0ICZmaWVsZHMgPSBub2RlLT5nZXRMZWZ0KCkt
PmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Ci0KLSAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgaSsrKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGNvbnN0IFRGaWVsZCAqZmllbGQgPSBmaWVsZHNbaV07Ci0KLSAgICAgICAgICAg
ICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAgICAgICAgIG91
dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLT5uYW1lKCksIG5vZGUtPmdldExlZnQoKS0+
Z2V0VHlwZSgpKSArICIgPT0gIjsKLSAgICAgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50
cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3JhdGVGaWVs
ZChmaWVsZC0+bmFtZSgpLCBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKSk7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoaSA8IGZpZWxkcy5zaXplKCkgLSAxKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgJiYgIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIG91dCA8PCAiKSI7Ci0KLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEFTU0VSVChub2RlLT5nZXRMZWZ0KCktPmlzTWF0cml4KCkgfHwgbm9kZS0+Z2V0TGVmdCgpLT5p
c1ZlY3RvcigpKTsKLQotICAgICAgICAgICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9wRXF1YWwp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFs
bCgiLCAiID09ICIsICIpIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIiFhbGwoIiwg
IiA9PSAiLCAiKSIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBFT3BMZXNzVGhhbjogICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigi
LCAiIDwgIiwgIikiKTsgICBicmVhazsKLSAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46ICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA+ICIsICIpIik7ICAgYnJlYWs7Ci0gICAgICBj
YXNlIEVPcExlc3NUaGFuRXF1YWw6ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPD0g
IiwgIikiKTsgIGJyZWFrOwotICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgIigiLCAiID49ICIsICIpIik7ICBicmVhazsKLSAgICAgIGNhc2UgRU9w
VmVjdG9yVGltZXNTY2FsYXI6IG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAqICIsICIpIik7
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyOiBvdXRwdXRUcmlwbGV0
KHZpc2l0LCAiKCIsICIgKiAiLCAiKSIpOyAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BWZWN0b3JU
aW1lc01hdHJpeDogb3V0cHV0VHJpcGxldCh2aXNpdCwgIm11bCgiLCAiLCB0cmFuc3Bvc2UoIiwg
IikpIik7IGJyZWFrOwotICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1ZlY3Rvcjogb3V0cHV0VHJp
cGxldCh2aXNpdCwgIm11bCh0cmFuc3Bvc2UoIiwgIiksICIsICIpIik7IGJyZWFrOwotICAgICAg
Y2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeDogb3V0cHV0VHJpcGxldCh2aXNpdCwgInRyYW5zcG9z
ZShtdWwodHJhbnNwb3NlKCIsICIpLCB0cmFuc3Bvc2UoIiwgIikpKSIpOyBicmVhazsKLSAgICAg
IGNhc2UgRU9wTG9naWNhbE9yOgotICAgICAgICBpZiAobm9kZS0+Z2V0UmlnaHQoKS0+aGFzU2lk
ZUVmZmVjdHMoKSkKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xk
U2hvcnRDaXJjdWl0LT5nZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIHx8ICIsICIpIik7Ci0gICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6Ci0gICAgICAgIG1V
c2VzWG9yID0gdHJ1ZTsKLSAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInhvcigiLCAiLCAi
LCAiKSIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDoKLSAgICAg
ICAgaWYgKG5vZGUtPmdldFJpZ2h0KCktPmhhc1NpZGVFZmZlY3RzKCkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG91dCA8PCAicyIgPDwgbVVuZm9sZFNob3J0Q2lyY3VpdC0+Z2V0TmV4dFRlbXBv
cmFyeUluZGV4KCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwg
IiAmJiAiLCAiKSIpOwotICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBPdXRwdXRITFNMOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5v
ZGUpCi17Ci0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQotICAgIHsKLSAgICAgIGNhc2UgRU9w
TmVnYXRpdmU6ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigtIiwgIiIsICIpIik7ICBi
cmVhazsKLSAgICAgIGNhc2UgRU9wVmVjdG9yTG9naWNhbE5vdDogb3V0cHV0VHJpcGxldCh2aXNp
dCwgIighIiwgIiIsICIpIik7ICBicmVhazsKLSAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDogICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIighIiwgIiIsICIpIik7ICBicmVhazsKLSAgICAgIGNh
c2UgRU9wUG9zdEluY3JlbWVudDogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIiwgIisr
KSIpOyBicmVhazsKLSAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDogICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgIigiLCAiIiwgIi0tKSIpOyBicmVhazsKLSAgICAgIGNhc2UgRU9wUHJlSW5jcmVt
ZW50OiAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigrKyIsICIiLCAiKSIpOyBicmVhazsKLSAg
ICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OiAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigtLSIs
ICIiLCAiKSIpOyBicmVhazsKLSAgICAgIGNhc2UgRU9wQ29udkludFRvQm9vbDoKLSAgICAgIGNh
c2UgRU9wQ29udkZsb2F0VG9Cb29sOgotICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wZXJhbmQo
KS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNl
IDE6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJib29sKCIsICIiLCAiKSIpOyAgYnJlYWs7Ci0g
ICAgICAgICAgY2FzZSAyOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYm9vbDIoIiwgIiIsICIp
Iik7IGJyZWFrOwotICAgICAgICAgIGNhc2UgMzogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImJv
b2wzKCIsICIiLCAiKSIpOyBicmVhazsKLSAgICAgICAgICBjYXNlIDQ6ICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICJib29sNCgiLCAiIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9w
Q29udkJvb2xUb0Zsb2F0OgotICAgICAgY2FzZSBFT3BDb252SW50VG9GbG9hdDoKLSAgICAgICAg
c3dpdGNoIChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSAxOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZmxv
YXQoIiwgIiIsICIpIik7ICBicmVhazsKLSAgICAgICAgICBjYXNlIDI6ICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICJmbG9hdDIoIiwgIiIsICIpIik7IGJyZWFrOwotICAgICAgICAgIGNhc2UgMzog
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZsb2F0MygiLCAiIiwgIikiKTsgYnJlYWs7Ci0gICAg
ICAgICAgY2FzZSA0OiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZmxvYXQ0KCIsICIiLCAiKSIp
OyBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0ludDoKLSAgICAgIGNhc2Ug
RU9wQ29udkJvb2xUb0ludDoKLSAgICAgICAgc3dpdGNoIChub2RlLT5nZXRPcGVyYW5kKCktPmdl
dFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSAxOiAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaW50KCIsICIiLCAiKSIpOyAgYnJlYWs7Ci0gICAgICAg
ICAgY2FzZSAyOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaW50MigiLCAiIiwgIikiKTsgYnJl
YWs7Ci0gICAgICAgICAgY2FzZSAzOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaW50MygiLCAi
IiwgIikiKTsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSA0OiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAiaW50NCgiLCAiIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wUmFkaWFuczog
ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInJhZGlhbnMoIiwgIiIsICIpIik7ICAgYnJl
YWs7Ci0gICAgICBjYXNlIEVPcERlZ3JlZXM6ICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICJkZWdyZWVzKCIsICIiLCAiKSIpOyAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BTaW46ICAgICAg
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAic2luKCIsICIiLCAiKSIpOyAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgRU9wQ29zOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
ImNvcygiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFRhbjogICAgICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ0YW4oIiwgIiIsICIpIik7ICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBFT3BBc2luOiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
YXNpbigiLCAiIiwgIikiKTsgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wQWNvczogICAgICAg
ICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFjb3MoIiwgIiIsICIpIik7ICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEVPcEF0YW46ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJh
dGFuKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BFeHA6ICAgICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZXhwKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgRU9wTG9nOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImxv
ZygiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcEV4cDI6ICAgICAgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJleHAyKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBFT3BMb2cyOiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibG9n
MigiLCAiIiwgIikiKTsgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wU3FydDogICAgICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInNxcnQoIiwgIiIsICIpIik7ICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEVPcEludmVyc2VTcXJ0OiAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJyc3Fy
dCgiLCAiIiwgIikiKTsgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BBYnM6ICAgICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYWJzKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgRU9wU2lnbjogICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInNpZ24o
IiwgIiIsICIpIik7ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcEZsb29yOiAgICAgICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICJmbG9vcigiLCAiIiwgIikiKTsgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBFT3BDZWlsOiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiY2VpbCgi
LCAiIiwgIikiKTsgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wRnJhY3Q6ICAgICAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgImZyYWMoIiwgIiIsICIpIik7ICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEVPcExlbmd0aDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJsZW5ndGgo
IiwgIiIsICIpIik7ICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BOb3JtYWxpemU6ICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAibm9ybWFsaXplKCIsICIiLCAiKSIpOyBicmVhazsKLSAgICAg
IGNhc2UgRU9wREZkeDoKLSAgICAgICAgaWYobUluc2lkZURpc2NvbnRpbnVvdXNMb29wIHx8IG1P
dXRwdXRMb2QwRnVuY3Rpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICIoIiwgIiIsICIsIDAuMCkiKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkZHgoIiwgIiIsICIpIik7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcERGZHk6Ci0gICAgICAg
IGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1bmN0aW9uKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIiLCAiLCAwLjAp
Iik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICJkZHkoIiwgIiIsICIpIik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEVPcEZ3aWR0aDoKLSAgICAgICAgaWYobUluc2lkZURpc2NvbnRpbnVv
dXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIsIDAuMCkiKTsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJmd2lk
dGgoIiwgIiIsICIpIik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVP
cEFueTogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJhbnkoIiwgIiIsICIpIik7
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BBbGw6ICAgICAgICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiYWxsKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgT3V0
cHV0SExTTDo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5v
ZGUpCi17Ci0gICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7Ci0KLSAgICBzd2l0Y2ggKG5v
ZGUtPmdldE9wKCkpCi0gICAgewotICAgICAgY2FzZSBFT3BTZXF1ZW5jZToKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKG1JbnNpZGVGdW5jdGlvbikKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKS5maXJzdF9saW5lKTsK
LSAgICAgICAgICAgICAgICBvdXQgPDwgIntcbiI7Ci0KLSAgICAgICAgICAgICAgICBtU2NvcGVE
ZXB0aCsrOwotCi0gICAgICAgICAgICAgICAgaWYgKG1TY29wZUJyYWNrZXQuc2l6ZSgpIDwgbVNj
b3BlRGVwdGgpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtU2NvcGVC
cmFja2V0LnB1c2hfYmFjaygwKTsgICAvLyBOZXcgc2NvcGUgbGV2ZWwKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgbVNjb3BlQnJhY2tldFttU2NvcGVEZXB0aCAtIDFdKys7ICAgLy8gTmV3IHNjb3Bl
IGF0IGV4aXN0aW5nIGxldmVsCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gbm9kZS0+Z2V0
U2VxdWVuY2UoKS5iZWdpbigpOyBzaXQgIT0gbm9kZS0+Z2V0U2VxdWVuY2UoKS5lbmQoKTsgc2l0
KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZSgo
KnNpdCktPmdldExpbmUoKS5maXJzdF9saW5lKTsKLQotICAgICAgICAgICAgICAgIHRyYXZlcnNl
U3RhdGVtZW50cygqc2l0KTsKLQotICAgICAgICAgICAgICAgIG91dCA8PCAiO1xuIjsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1JbnNpZGVGdW5jdGlvbikKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKS5s
YXN0X2xpbmUpOwotICAgICAgICAgICAgICAgIG91dCA8PCAifVxuIjsKLQotICAgICAgICAgICAg
ICAgIG1TY29wZURlcHRoLS07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgY2FzZSBFT3BEZWNsYXJhdGlvbjoKLSAgICAgICAgaWYg
KHZpc2l0ID09IFByZVZpc2l0KQotICAgICAgICB7Ci0gICAgICAgICAgICBUSW50ZXJtU2VxdWVu
Y2UgJnNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKLSAgICAgICAgICAgIFRJbnRlcm1U
eXBlZCAqdmFyaWFibGUgPSBzZXF1ZW5jZVswXS0+Z2V0QXNUeXBlZCgpOwotCi0gICAgICAgICAg
ICBpZiAodmFyaWFibGUgJiYgKHZhcmlhYmxlLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFUZW1wb3Jh
cnkgfHwgdmFyaWFibGUtPmdldFF1YWxpZmllcigpID09IEV2cUdsb2JhbCkpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhZGRDb25zdHJ1Y3Rvcih2
YXJpYWJsZS0+Z2V0VHlwZSgpLCBzY29wZWRTdHJ1Y3QodmFyaWFibGUtPmdldFR5cGUoKS5nZXRT
dHJ1Y3QoKS0+bmFtZSgpKSwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgaWYgKCF2YXJpYWJsZS0+Z2V0QXNTeW1ib2xOb2RlKCkgfHwgdmFyaWFibGUtPmdldEFz
U3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKSAhPSAiIikgICAvLyBWYXJpYWJsZSBkZWNsYXJhdGlv
bgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtSW5zaWRlRnVu
Y3Rpb24pCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG91
dCA8PCAic3RhdGljICI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICBvdXQgPDwgdHlwZVN0cmluZyh2YXJpYWJsZS0+Z2V0VHlwZSgpKSArICIgIjsKLQotICAg
ICAgICAgICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gc2Vx
dWVuY2UuYmVnaW4oKTsgc2l0ICE9IHNlcXVlbmNlLmVuZCgpOyBzaXQrKykKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9s
ID0gKCpzaXQpLT5nZXRBc1N5bWJvbE5vZGUoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHN5bWJvbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzeW1ib2wtPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG91dCA8PCBhcnJheVN0cmluZyhzeW1ib2wtPmdldFR5cGUoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgPSAiICsgaW5pdGlhbGl6ZXIodmFyaWFibGUtPmdl
dFR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKCpzaXQpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpzaXQgIT0gc2VxdWVuY2UuYmFjaygp
KQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dCA8PCAiLCAiOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhcmlh
YmxlLT5nZXRBc1N5bWJvbE5vZGUoKSAmJiB2YXJpYWJsZS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdl
dFN5bWJvbCgpID09ICIiKSAgIC8vIFR5cGUgKHN0cnVjdCkgZGVjbGFyYXRpb24KLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFscmVhZHkgYWRkZWQgdG8gY29uc3Ry
dWN0b3IgbWFwCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHZhcmlhYmxlICYm
ICh2YXJpYWJsZS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxVmFyeWluZ091dCB8fCB2YXJpYWJsZS0+
Z2V0UXVhbGlmaWVyKCkgPT0gRXZxSW52YXJpYW50VmFyeWluZ091dCkpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNpdCA9IHNl
cXVlbmNlLmJlZ2luKCk7IHNpdCAhPSBzZXF1ZW5jZS5lbmQoKTsgc2l0KyspCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSAoKnNp
dCktPmdldEFzU3ltYm9sTm9kZSgpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wp
Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFZlcnRl
eCAob3V0cHV0KSB2YXJ5aW5ncyB3aGljaCBhcmUgZGVjbGFyZWQgYnV0IG5vdCB3cml0dGVuIHRv
IHNob3VsZCBzdGlsbCBiZSBkZWNsYXJlZCB0byBhbGxvdyBzdWNjZXNzZnVsIGxpbmtpbmcKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1SZWZlcmVuY2VkVmFyeWluZ3Nbc3ltYm9sLT5nZXRTeW1i
b2woKV0gPSBzeW1ib2w7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAo
KnNpdCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCkKLSAgICAgICAgewotICAg
ICAgICAgICAgb3V0IDw8ICIsICI7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEVPcFByb3RvdHlwZToKLSAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBvdXQgPDwgdHlwZVN0cmluZyhub2RlLT5nZXRUeXBlKCkpIDw8ICIg
IiA8PCBkZWNvcmF0ZShub2RlLT5nZXROYW1lKCkpIDw8IChtT3V0cHV0TG9kMEZ1bmN0aW9uID8g
IkxvZDAoIiA6ICIoIik7Ci0KLSAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJndW1lbnRz
ID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gYXJndW1lbnRzW2ldLT5nZXRBc1N5bWJv
bE5vZGUoKTsKLQotICAgICAgICAgICAgICAgIGlmIChzeW1ib2wpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBvdXQgPDwgYXJndW1lbnRTdHJpbmcoc3ltYm9sKTsKLQot
ICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGFyZ3VtZW50cy5zaXplKCkgLSAxKQotICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG91dCA8PCAi
KTtcbiI7Ci0KLSAgICAgICAgICAgIC8vIEFsc28gcHJvdG90eXBlIHRoZSBMb2QwIHZhcmlhbnQg
aWYgbmVlZGVkCi0gICAgICAgICAgICBpZiAobUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkgJiYg
IW1PdXRwdXRMb2QwRnVuY3Rpb24pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbU91
dHB1dExvZDBGdW5jdGlvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbm9kZS0+dHJhdmVyc2Uo
dGhpcyk7Ci0gICAgICAgICAgICAgICAgbU91dHB1dExvZDBGdW5jdGlvbiA9IGZhbHNlOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENvbW1hOiAgICAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICIoIiwgIiwgIiwgIikiKTsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEVPcEZ1bmN0aW9uOgotICAgICAgICB7Ci0gICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVu
Y3Rpb246OnVubWFuZ2xlTmFtZShub2RlLT5nZXROYW1lKCkpOwotCi0gICAgICAgICAgICBvdXQg
PDwgdHlwZVN0cmluZyhub2RlLT5nZXRUeXBlKCkpIDw8ICIgIjsKLQotICAgICAgICAgICAgaWYg
KG5hbWUgPT0gIm1haW4iKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAi
Z2xfbWFpbigiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAobU91dHB1dExvZDBG
dW5jdGlvbiA/ICJMb2QwKCIgOiAiKCIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBU
SW50ZXJtU2VxdWVuY2UgJnNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKLSAgICAgICAg
ICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJndW1lbnRzID0gc2VxdWVuY2VbMF0tPmdldEFzQWdncmVn
YXRlKCktPmdldFNlcXVlbmNlKCk7Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IGFyZ3VtZW50c1tpXS0+Z2V0QXNTeW1ib2xO
b2RlKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc3ltYm9sKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbC0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpKQot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRDb25zdHJ1
Y3RvcihzeW1ib2wtPmdldFR5cGUoKSwgc2NvcGVkU3RydWN0KHN5bWJvbC0+Z2V0VHlwZSgpLmdl
dFN0cnVjdCgpLT5uYW1lKCkpLCBOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIG91dCA8PCBhcmd1bWVudFN0cmluZyhzeW1ib2wpOwotCi0gICAgICAg
ICAgICAgICAgICAgIGlmIChpIDwgYXJndW1lbnRzLnNpemUoKSAtIDEpCi0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgb3V0IDw8ICIpXG4iCi0g
ICAgICAgICAgICAgICAgIntcbiI7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzZXF1
ZW5jZS5zaXplKCkgPiAxKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1JbnNpZGVG
dW5jdGlvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgc2VxdWVuY2VbMV0tPnRyYXZlcnNlKHRo
aXMpOwotICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNlOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBvdXQgPDwgIn1cbiI7Ci0KLSAgICAgICAg
ICAgIGlmIChtQ29udGFpbnNMb29wRGlzY29udGludWl0eSAmJiAhbU91dHB1dExvZDBGdW5jdGlv
bikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobmFtZSAhPSAibWFpbiIpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtT3V0cHV0TG9kMEZ1bmN0aW9u
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7Ci0gICAg
ICAgICAgICAgICAgICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wRnVuY3Rpb25DYWxsOgotICAgICAg
ICB7Ci0gICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShu
b2RlLT5nZXROYW1lKCkpOwotICAgICAgICAgICAgYm9vbCBsb2QwID0gbUluc2lkZURpc2NvbnRp
bnVvdXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb247Ci0KLSAgICAgICAgICAgIGlmIChub2Rl
LT5pc1VzZXJEZWZpbmVkKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8
IGRlY29yYXRlKG5hbWUpIDw8IChsb2QwID8gIkxvZDAoIiA6ICIoIik7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG5h
bWUgPT0gInRleHR1cmUyRCIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoIWxvZDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQotICAgICAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCi0gICAgICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRf
YmlhcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG91
dCA8PCAiZ2xfdGV4dHVyZTJEKCI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRExv
ZDAgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1
cmUyRExvZDBfYmlhcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJETG9kMCgiOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRl
eHR1cmUyRFByb2oiKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFsb2QwKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2ogPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFBy
b2pfYmlhcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvaigiOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCi0gICAgICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0
dXJlMkRQcm9qTG9kMCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAz
KQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1Vc2VzVGV4dHVyZTJEUHJvakxvZDBfYmlhcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvakxvZDAoIjsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBl
bHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlQ3ViZSIpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoIWxvZDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQotICAg
ICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2Vz
VGV4dHVyZUN1YmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykK
LSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
VXNlc1RleHR1cmVDdWJlX2JpYXMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmVDdWJlKCI7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0g
MikKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtVXNlc1RleHR1cmVDdWJlTG9kMCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNp
emUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXMgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgp
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmVDdWJlTG9kMCgi
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmUyRExvZCIpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0
dXJlMkRMb2QgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImds
X3RleHR1cmUyRExvZCgiOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNl
IGlmIChuYW1lID09ICJ0ZXh0dXJlMkRQcm9qTG9kIikKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUy
RFByb2pMb2QgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImds
X3RleHR1cmUyRFByb2pMb2QoIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZUN1YmVMb2QiKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCi0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVy
ZUN1YmVMb2QgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImds
X3RleHR1cmVDdWJlTG9kKCI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgVEludGVybVNl
cXVlbmNlICZhcmd1bWVudHMgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOwotCi0gICAgICAgICAgICBm
b3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3IgYXJnID0gYXJndW1lbnRzLmJlZ2luKCk7IGFy
ZyAhPSBhcmd1bWVudHMuZW5kKCk7IGFyZysrKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUICYmIElzU2FtcGxlcigoKmFy
ZyktPmdldEFzVHlwZWQoKS0+Z2V0QmFzaWNUeXBlKCkpKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICJ0ZXh0dXJlXyI7Ci0gICAgICAgICAgICAgICAgICAg
ICgqYXJnKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCBz
YW1wbGVyXyI7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgKCphcmcpLT50
cmF2ZXJzZSh0aGlzKTsKLQotICAgICAgICAgICAgICAgIGlmIChhcmcgPCBhcmd1bWVudHMuZW5k
KCkgLSAxKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIs
ICI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBvdXQg
PDwgIikiOwotCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEVPcFBhcmFtZXRlcnM6ICAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICIoIiwgIiwgIiwgIilcbntcbiIpOyAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0RmxvYXQ6Ci0gICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUo
KSwgInZlYzEiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7Ci0gICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJ2ZWMxKCIsICIiLCAiKSIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9w
Q29uc3RydWN0VmVjMjoKLSAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAi
dmVjMiIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKLSAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgInZlYzIoIiwgIiwgIiwgIikiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENv
bnN0cnVjdFZlYzM6Ci0gICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgInZl
YzMiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7Ci0gICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICJ2ZWMzKCIsICIsICIsICIpIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BDb25z
dHJ1Y3RWZWM0OgotICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJ2ZWM0
IiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOwotICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
dmVjNCgiLCAiLCAiLCAiKSIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0Qm9vbDoKLSAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiYnZlYzEi
LCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7Ci0gICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJi
dmVjMSgiLCAiIiwgIikiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENvbnN0cnVj
dEJWZWMyOgotICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJidmVjMiIs
ICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKLSAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImJ2
ZWMyKCIsICIsICIsICIpIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RCVmVjMzoKLSAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiYnZlYzMi
LCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7Ci0gICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJi
dmVjMygiLCAiLCAiLCAiKSIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0QlZlYzQ6Ci0gICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgImJ2ZWM0
IiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOwotICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
YnZlYzQoIiwgIiwgIiwgIikiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENvbnN0
cnVjdEludDoKLSAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiaXZlYzEi
LCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7Ci0gICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJp
dmVjMSgiLCAiIiwgIikiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENvbnN0cnVj
dElWZWMyOgotICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJpdmVjMiIs
ICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKLSAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIml2
ZWMyKCIsICIsICIsICIpIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RJVmVjMzoKLSAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiaXZlYzMi
LCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7Ci0gICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJp
dmVjMygiLCAiLCAiLCAiKSIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0SVZlYzQ6Ci0gICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgIml2ZWM0
IiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOwotICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
aXZlYzQoIiwgIiwgIiwgIikiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENvbnN0
cnVjdE1hdDI6Ci0gICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgIm1hdDIi
LCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7Ci0gICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJt
YXQyKCIsICIsICIsICIpIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RNYXQzOgotICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJtYXQzIiwg
Jm5vZGUtPmdldFNlcXVlbmNlKCkpOwotICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibWF0
MygiLCAiLCAiLCAiKSIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wQ29uc3RydWN0
TWF0NDogCi0gICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgIm1hdDQiLCAm
bm9kZS0+Z2V0U2VxdWVuY2UoKSk7Ci0gICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJtYXQ0
KCIsICIsICIsICIpIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RT
dHJ1Y3Q6Ci0gICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgc2NvcGVkU3Ry
dWN0KG5vZGUtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+bmFtZSgpKSwgJm5vZGUtPmdldFNlcXVl
bmNlKCkpOwotICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCBzdHJ1Y3RMb29rdXAobm9kZS0+
Z2V0VHlwZSgpLmdldFN0cnVjdCgpLT5uYW1lKCkpICsgIl9jdG9yKCIsICIsICIsICIpIik7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BMZXNzVGhhbjogICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiKCIsICIgPCAiLCAiKSIpOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEVPcEdyZWF0ZXJUaGFuOiAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA+
ICIsICIpIik7ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wTGVzc1RoYW5F
cXVhbDogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIDw9ICIsICIpIik7ICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiKCIsICIgPj0gIiwgIikiKTsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEVPcFZlY3RvckVxdWFsOiAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA9
PSAiLCAiKSIpOyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wVmVjdG9yTm90
RXF1YWw6ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICE9ICIsICIpIik7ICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BNb2Q6Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IC8vIFdlIG5lZWQgdG8gbG9vayBhdCB0aGUgbnVtYmVyIG9mIGNvbXBvbmVudHMgaW4gYm90aCBh
cmd1bWVudHMKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0U2VxdWVuY2UoKVswXS0+Z2V0
QXNUeXBlZCgpLT5nZXROb21pbmFsU2l6ZSgpICogMTAKLSAgICAgICAgICAgICAgICAgICAgICsg
bm9kZS0+Z2V0U2VxdWVuY2UoKVsxXS0+Z2V0QXNUeXBlZCgpLT5nZXROb21pbmFsU2l6ZSgpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDExOiBtVXNlc01vZDEgPSB0cnVlOyBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSAyMjogbVVzZXNNb2QydiA9IHRydWU7IGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIDIxOiBtVXNlc01vZDJmID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGNhc2UgMzM6IG1Vc2VzTW9kM3YgPSB0cnVlOyBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSAzMTogbVVzZXNNb2QzZiA9IHRydWU7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIDQ0
OiBtVXNlc01vZDR2ID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgNDE6IG1Vc2Vz
TW9kNGYgPSB0cnVlOyBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm1v
ZCgiLCAiLCAiLCAiKSIpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBF
T3BQb3c6ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAicG93KCIsICIsICIsICIp
Iik7ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcEF0YW46Ci0gICAgICAgIEFT
U0VSVChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKTsgICAvLyBhdGFuKHgpIGlzIGEg
dW5hcnkgb3BlcmF0b3IKLSAgICAgICAgc3dpdGNoIChub2RlLT5nZXRTZXF1ZW5jZSgpWzBdLT5n
ZXRBc1R5cGVkKCktPmdldE5vbWluYWxTaXplKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNl
IDE6IG1Vc2VzQXRhbjJfMSA9IHRydWU7IGJyZWFrOwotICAgICAgICAgIGNhc2UgMjogbVVzZXNB
dGFuMl8yID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAzOiBtVXNlc0F0YW4yXzMgPSB0
cnVlOyBicmVhazsKLSAgICAgICAgICBjYXNlIDQ6IG1Vc2VzQXRhbjJfNCA9IHRydWU7IGJyZWFr
OwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgImF0YW55eCgiLCAiLCAiLCAiKSIpOwotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgRU9wTWluOiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm1p
bigiLCAiLCAiLCAiKSIpOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcE1heDogICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJtYXgoIiwgIiwgIiwgIikiKTsgICAgICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBFT3BDbGFtcDogICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAiY2xhbXAoIiwgIiwgIiwgIikiKTsgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wTWl4
OiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImxlcnAoIiwgIiwgIiwgIikiKTsgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFN0ZXA6ICAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJzdGVwKCIsICIsICIsICIpIik7ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBF
T3BTbW9vdGhTdGVwOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAic21vb3Roc3RlcCgiLCAiLCAi
LCAiKSIpOyAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wRGlzdGFuY2U6ICAgICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgImRpc3RhbmNlKCIsICIsICIsICIpIik7ICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEVPcERvdDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkb3QoIiwgIiwgIiwg
IikiKTsgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BDcm9zczogICAgICAgICBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAiY3Jvc3MoIiwgIiwgIiwgIikiKTsgICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgRU9wRmFjZUZvcndhcmQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS0+Z2V0U2VxdWVuY2UoKVswXS0+Z2V0QXNUeXBlZCgpLT5nZXROb21pbmFsU2l6ZSgpKSAg
IC8vIE51bWJlciBvZiBjb21wb25lbnRzIGluIHRoZSBmaXJzdCBhcmd1bWVudAotICAgICAgICAg
ICAgewotICAgICAgICAgICAgY2FzZSAxOiBtVXNlc0ZhY2Vmb3J3YXJkMSA9IHRydWU7IGJyZWFr
OwotICAgICAgICAgICAgY2FzZSAyOiBtVXNlc0ZhY2Vmb3J3YXJkMiA9IHRydWU7IGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSAzOiBtVXNlc0ZhY2Vmb3J3YXJkMyA9IHRydWU7IGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSA0OiBtVXNlc0ZhY2Vmb3J3YXJkNCA9IHRydWU7IGJyZWFrOwotICAgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZhY2Vmb3J3YXJkKCIsICIsICIs
ICIpIik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFJlZmxlY3Q6
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJyZWZsZWN0KCIsICIsICIsICIpIik7ICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBFT3BSZWZyYWN0OiAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAicmVmcmFjdCgiLCAiLCAiLCAiKSIpOyAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wTXVs
OiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICogIiwgIikiKTsgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIE91dHB1dEhMU0w6OnZpc2l0U2VsZWN0aW9uKFZpc2l0
IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uICpub2RlKQotewotICAgIFRJbmZvU2lua0Jhc2UgJm91
dCA9IG1Cb2R5OwotCi0gICAgaWYgKG5vZGUtPnVzZXNUZXJuYXJ5T3BlcmF0b3IoKSkKLSAgICB7
Ci0gICAgICAgIG91dCA8PCAicyIgPDwgbVVuZm9sZFNob3J0Q2lyY3VpdC0+Z2V0TmV4dFRlbXBv
cmFyeUluZGV4KCk7Ci0gICAgfQotICAgIGVsc2UgIC8vIGlmL2Vsc2Ugc3RhdGVtZW50Ci0gICAg
ewotICAgICAgICBtVW5mb2xkU2hvcnRDaXJjdWl0LT50cmF2ZXJzZShub2RlLT5nZXRDb25kaXRp
b24oKSk7Ci0KLSAgICAgICAgb3V0IDw8ICJpZiAoIjsKLQotICAgICAgICBub2RlLT5nZXRDb25k
aXRpb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0KLSAgICAgICAgb3V0IDw8ICIpXG4iOwotICAgICAg
ICAKLSAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRMaW5lKCkuZmlyc3RfbGlu
ZSk7Ci0gICAgICAgIG91dCA8PCAie1xuIjsKLQotICAgICAgICBib29sIGRpc2NhcmQgPSBmYWxz
ZTsKLQotICAgICAgICBpZiAobm9kZS0+Z2V0VHJ1ZUJsb2NrKCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHRyYXZlcnNlU3RhdGVtZW50cyhub2RlLT5nZXRUcnVlQmxvY2soKSk7Ci0KLSAgICAg
ICAgICAgIC8vIERldGVjdCB0cnVlIGRpc2NhcmQKLSAgICAgICAgICAgIGRpc2NhcmQgPSAoZGlz
Y2FyZCB8fCBGaW5kRGlzY2FyZDo6c2VhcmNoKG5vZGUtPmdldFRydWVCbG9jaygpKSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKS5maXJz
dF9saW5lKTsKLSAgICAgICAgb3V0IDw8ICI7XG59XG4iOwotCi0gICAgICAgIGlmIChub2RlLT5n
ZXRGYWxzZUJsb2NrKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAiZWxzZVxuIjsK
LQotICAgICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRGYWxzZUJsb2NrKCkt
PmdldExpbmUoKS5maXJzdF9saW5lKTsKLSAgICAgICAgICAgIG91dCA8PCAie1xuIjsKLQotICAg
ICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRGYWxzZUJsb2NrKCktPmdldExp
bmUoKS5maXJzdF9saW5lKTsKLSAgICAgICAgICAgIHRyYXZlcnNlU3RhdGVtZW50cyhub2RlLT5n
ZXRGYWxzZUJsb2NrKCkpOwotCi0gICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUt
PmdldEZhbHNlQmxvY2soKS0+Z2V0TGluZSgpLmZpcnN0X2xpbmUpOwotICAgICAgICAgICAgb3V0
IDw8ICI7XG59XG4iOwotCi0gICAgICAgICAgICAvLyBEZXRlY3QgZmFsc2UgZGlzY2FyZAotICAg
ICAgICAgICAgZGlzY2FyZCA9IChkaXNjYXJkIHx8IEZpbmREaXNjYXJkOjpzZWFyY2gobm9kZS0+
Z2V0RmFsc2VCbG9jaygpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBBTkdMRSBpc3N1ZSA0
ODY6IERldGVjdCBwcm9ibGVtYXRpYyBjb25kaXRpb25hbCBkaXNjYXJkCi0gICAgICAgIGlmIChk
aXNjYXJkICYmIEZpbmRTaWRlRWZmZWN0UmV3cml0aW5nOjpzZWFyY2gobm9kZSkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1Vc2VzRGlzY2FyZFJld3JpdGluZyA9IHRydWU7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgT3V0cHV0SExTTDo6dmlzaXRD
b25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uICpub2RlKQotewotICAgIHdyaXRlQ29u
c3RhbnRVbmlvbihub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCkp
OwotfQotCi1ib29sIE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxv
b3AgKm5vZGUpCi17Ci0gICAgYm9vbCB3YXNEaXNjb250aW51b3VzID0gbUluc2lkZURpc2NvbnRp
bnVvdXNMb29wOwotCi0gICAgaWYgKG1Db250YWluc0xvb3BEaXNjb250aW51aXR5ICYmICFtSW5z
aWRlRGlzY29udGludW91c0xvb3ApCi0gICAgewotICAgICAgICBtSW5zaWRlRGlzY29udGludW91
c0xvb3AgPSBjb250YWluc0xvb3BEaXNjb250aW51aXR5KG5vZGUpOwotICAgIH0KLQotICAgIGlm
IChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgewotICAgICAgICBpZiAoaGFu
ZGxlRXhjZXNzaXZlTG9vcChub2RlKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7
Ci0KLSAgICBpZiAobm9kZS0+Z2V0VHlwZSgpID09IEVMb29wRG9XaGlsZSkKLSAgICB7Ci0gICAg
ICAgIG91dCA8PCAie2RvXG4iOwotCi0gICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+
Z2V0TGluZSgpLmZpcnN0X2xpbmUpOwotICAgICAgICBvdXQgPDwgIntcbiI7Ci0gICAgfQotICAg
IGVsc2UKLSAgICB7Ci0gICAgICAgIG91dCA8PCAie2ZvcigiOwotICAgICAgICAKLSAgICAgICAg
aWYgKG5vZGUtPmdldEluaXQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgbm9kZS0+Z2V0SW5p
dCgpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIG91dCA8PCAiOyAiOwot
Ci0gICAgICAgIGlmIChub2RlLT5nZXRDb25kaXRpb24oKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgb3V0IDw8ICI7ICI7Ci0KLSAgICAgICAgaWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkK
LSAgICAgICAgewotICAgICAgICAgICAgbm9kZS0+Z2V0RXhwcmVzc2lvbigpLT50cmF2ZXJzZSh0
aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIG91dCA8PCAiKVxuIjsKLSAgICAgICAgCi0gICAg
ICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0TGluZSgpLmZpcnN0X2xpbmUpOwotICAg
ICAgICBvdXQgPDwgIntcbiI7Ci0gICAgfQotCi0gICAgaWYgKG5vZGUtPmdldEJvZHkoKSkKLSAg
ICB7Ci0gICAgICAgIHRyYXZlcnNlU3RhdGVtZW50cyhub2RlLT5nZXRCb2R5KCkpOwotICAgIH0K
LQotICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0TGluZSgpLmZpcnN0X2xpbmUpOwot
ICAgIG91dCA8PCAiO31cbiI7Ci0KLSAgICBpZiAobm9kZS0+Z2V0VHlwZSgpID09IEVMb29wRG9X
aGlsZSkKLSAgICB7Ci0gICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0Q29uZGl0
aW9uKCktPmdldExpbmUoKS5maXJzdF9saW5lKTsKLSAgICAgICAgb3V0IDw8ICJ3aGlsZShcbiI7
Ci0KLSAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOwotCi0gICAg
ICAgIG91dCA8PCAiKTsiOwotICAgIH0KLQotICAgIG91dCA8PCAifVxuIjsKLQotICAgIG1JbnNp
ZGVEaXNjb250aW51b3VzTG9vcCA9IHdhc0Rpc2NvbnRpbnVvdXM7Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgT3V0cHV0SExTTDo6dmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRl
cm1CcmFuY2ggKm5vZGUpCi17Ci0gICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7Ci0KLSAg
ICBzd2l0Y2ggKG5vZGUtPmdldEZsb3dPcCgpKQotICAgIHsKLSAgICAgIGNhc2UgRU9wS2lsbDoK
LSAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImRpc2NhcmQ7XG4iLCAiIiwgIiIpOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wQnJlYWs6Ci0gICAgICAgIGlmICh2aXNpdCA9PSBQ
cmVWaXNpdCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1FeGNlc3NpdmVMb29wSW5kZXgp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJ7QnJlYWsiOwotICAgICAg
ICAgICAgICAgIG1FeGNlc3NpdmVMb29wSW5kZXgtPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAg
ICAgICAgIG91dCA8PCAiID0gdHJ1ZTsgYnJlYWs7fVxuIjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImJyZWFr
O1xuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgRU9wQ29udGludWU6IG91dHB1dFRyaXBsZXQodmlzaXQsICJjb250aW51ZTtcbiIsICIiLCAi
Iik7IGJyZWFrOwotICAgICAgY2FzZSBFT3BSZXR1cm46Ci0gICAgICAgIGlmICh2aXNpdCA9PSBQ
cmVWaXNpdCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG5vZGUtPmdldEV4cHJlc3Npb24o
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgInJldHVybiAiOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG91dCA8PCAicmV0dXJuO1xuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBlbHNlIGlmICh2aXNpdCA9PSBQb3N0VmlzaXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChub2RlLT5nZXRFeHByZXNzaW9uKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
b3V0IDw8ICI7XG4iOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdm9pZCBPdXRwdXRITFNMOjp0cmF2ZXJzZVN0YXRlbWVudHMoVEludGVybU5vZGUgKm5v
ZGUpCi17Ci0gICAgaWYgKGlzU2luZ2xlU3RhdGVtZW50KG5vZGUpKQotICAgIHsKLSAgICAgICAg
bVVuZm9sZFNob3J0Q2lyY3VpdC0+dHJhdmVyc2Uobm9kZSk7Ci0gICAgfQotCi0gICAgbm9kZS0+
dHJhdmVyc2UodGhpcyk7Ci19Ci0KLWJvb2wgT3V0cHV0SExTTDo6aXNTaW5nbGVTdGF0ZW1lbnQo
VEludGVybU5vZGUgKm5vZGUpCi17Ci0gICAgVEludGVybUFnZ3JlZ2F0ZSAqYWdncmVnYXRlID0g
bm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsKLQotICAgIGlmIChhZ2dyZWdhdGUpCi0gICAgewotICAg
ICAgICBpZiAoYWdncmVnYXRlLT5nZXRPcCgpID09IEVPcFNlcXVlbmNlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAg
ICB7Ci0gICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gYWdn
cmVnYXRlLT5nZXRTZXF1ZW5jZSgpLmJlZ2luKCk7IHNpdCAhPSBhZ2dyZWdhdGUtPmdldFNlcXVl
bmNlKCkuZW5kKCk7IHNpdCsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICgh
aXNTaW5nbGVTdGF0ZW1lbnQoKnNpdCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOwotfQotCi0vLyBIYW5kbGUgbG9vcHMgd2l0aCBtb3JlIHRoYW4gMjU0IGl0ZXJhdGlv
bnMgKHVuc3VwcG9ydGVkIGJ5IEQzRDkpIGJ5IHNwbGl0dGluZyB0aGVtCi0vLyAoVGhlIEQzRCBk
b2N1bWVudGF0aW9uIHNheXMgMjU1IGl0ZXJhdGlvbnMsIGJ1dCB0aGUgY29tcGlsZXIgY29tcGxh
aW5zIGF0IGFueXRoaW5nIG1vcmUgdGhhbiAyNTQpLgotYm9vbCBPdXRwdXRITFNMOjpoYW5kbGVF
eGNlc3NpdmVMb29wKFRJbnRlcm1Mb29wICpub2RlKQotewotICAgIGNvbnN0IGludCBNQVhfTE9P
UF9JVEVSQVRJT05TID0gMjU0OwotICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OwotCi0g
ICAgLy8gUGFyc2UgbG9vcHMgb2YgdGhlIGZvcm06Ci0gICAgLy8gZm9yKGludCBpbmRleCA9IGlu
aXRpYWw7IGluZGV4IFtjb21wYXJhdG9yXSBsaW1pdDsgaW5kZXggKz0gaW5jcmVtZW50KQotICAg
IFRJbnRlcm1TeW1ib2wgKmluZGV4ID0gTlVMTDsKLSAgICBUT3BlcmF0b3IgY29tcGFyYXRvciA9
IEVPcE51bGw7Ci0gICAgaW50IGluaXRpYWwgPSAwOwotICAgIGludCBsaW1pdCA9IDA7Ci0gICAg
aW50IGluY3JlbWVudCA9IDA7Ci0KLSAgICAvLyBQYXJzZSBpbmRleCBuYW1lIGFuZCBpbnRpYWwg
dmFsdWUKLSAgICBpZiAobm9kZS0+Z2V0SW5pdCgpKQotICAgIHsKLSAgICAgICAgVEludGVybUFn
Z3JlZ2F0ZSAqaW5pdCA9IG5vZGUtPmdldEluaXQoKS0+Z2V0QXNBZ2dyZWdhdGUoKTsKLQotICAg
ICAgICBpZiAoaW5pdCkKLSAgICAgICAgewotICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZz
ZXF1ZW5jZSA9IGluaXQtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAgICAgICBUSW50ZXJtVHlwZWQg
KnZhcmlhYmxlID0gc2VxdWVuY2VbMF0tPmdldEFzVHlwZWQoKTsKLQotICAgICAgICAgICAgaWYg
KHZhcmlhYmxlICYmIHZhcmlhYmxlLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFUZW1wb3JhcnkpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVEludGVybUJpbmFyeSAqYXNzaWduID0gdmFy
aWFibGUtPmdldEFzQmluYXJ5Tm9kZSgpOwotCi0gICAgICAgICAgICAgICAgaWYgKGFzc2lnbi0+
Z2V0T3AoKSA9PSBFT3BJbml0aWFsaXplKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gYXNzaWduLT5nZXRMZWZ0KCktPmdldEFz
U3ltYm9sTm9kZSgpOwotICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAq
Y29uc3RhbnQgPSBhc3NpZ24tPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpOwotCi0g
ICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wgJiYgY29uc3RhbnQpCi0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdGFudC0+Z2V0QmFzaWNU
eXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5nZXROb21pbmFsU2l6ZSgpID09IDEpCi0gICAg
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgg
PSBzeW1ib2w7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbCA9IGNvbnN0YW50
LT5nZXRJQ29uc3QoMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICAvLyBQYXJzZSBjb21wYXJhdG9yIGFuZCBsaW1pdCB2YWx1ZQotICAgIGlmIChp
bmRleCAhPSBOVUxMICYmIG5vZGUtPmdldENvbmRpdGlvbigpKQotICAgIHsKLSAgICAgICAgVElu
dGVybUJpbmFyeSAqdGVzdCA9IG5vZGUtPmdldENvbmRpdGlvbigpLT5nZXRBc0JpbmFyeU5vZGUo
KTsKLSAgICAgICAgCi0gICAgICAgIGlmICh0ZXN0ICYmIHRlc3QtPmdldExlZnQoKS0+Z2V0QXNT
eW1ib2xOb2RlKCktPmdldElkKCkgPT0gaW5kZXgtPmdldElkKCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpjb25zdGFudCA9IHRlc3QtPmdldFJpZ2h0KCkt
PmdldEFzQ29uc3RhbnRVbmlvbigpOwotCi0gICAgICAgICAgICBpZiAoY29uc3RhbnQpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSA9
PSBFYnRJbnQgJiYgY29uc3RhbnQtPmdldE5vbWluYWxTaXplKCkgPT0gMSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbXBhcmF0b3IgPSB0ZXN0LT5nZXRPcCgpOwot
ICAgICAgICAgICAgICAgICAgICBsaW1pdCA9IGNvbnN0YW50LT5nZXRJQ29uc3QoMCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8g
UGFyc2UgaW5jcmVtZW50Ci0gICAgaWYgKGluZGV4ICE9IE5VTEwgJiYgY29tcGFyYXRvciAhPSBF
T3BOdWxsICYmIG5vZGUtPmdldEV4cHJlc3Npb24oKSkKLSAgICB7Ci0gICAgICAgIFRJbnRlcm1C
aW5hcnkgKmJpbmFyeVRlcm1pbmFsID0gbm9kZS0+Z2V0RXhwcmVzc2lvbigpLT5nZXRBc0JpbmFy
eU5vZGUoKTsKLSAgICAgICAgVEludGVybVVuYXJ5ICp1bmFyeVRlcm1pbmFsID0gbm9kZS0+Z2V0
RXhwcmVzc2lvbigpLT5nZXRBc1VuYXJ5Tm9kZSgpOwotICAgICAgICAKLSAgICAgICAgaWYgKGJp
bmFyeVRlcm1pbmFsKQotICAgICAgICB7Ci0gICAgICAgICAgICBUT3BlcmF0b3Igb3AgPSBiaW5h
cnlUZXJtaW5hbC0+Z2V0T3AoKTsKLSAgICAgICAgICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpj
b25zdGFudCA9IGJpbmFyeVRlcm1pbmFsLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24o
KTsKLQotICAgICAgICAgICAgaWYgKGNvbnN0YW50KQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGlmIChjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50
LT5nZXROb21pbmFsU2l6ZSgpID09IDEpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBpbnQgdmFsdWUgPSBjb25zdGFudC0+Z2V0SUNvbnN0KDApOwotCi0gICAgICAgICAg
ICAgICAgICAgIHN3aXRjaCAob3ApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjogaW5jcmVtZW50ID0gdmFsdWU7ICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjogaW5jcmVtZW50ID0gLXZh
bHVlOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTklNUExFTUVOVEVE
KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodW5hcnlUZXJtaW5hbCkKLSAgICAgICAg
ewotICAgICAgICAgICAgVE9wZXJhdG9yIG9wID0gdW5hcnlUZXJtaW5hbC0+Z2V0T3AoKTsKLQot
ICAgICAgICAgICAgc3dpdGNoIChvcCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2Fz
ZSBFT3BQb3N0SW5jcmVtZW50OiBpbmNyZW1lbnQgPSAxOyAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgRU9wUG9zdERlY3JlbWVudDogaW5jcmVtZW50ID0gLTE7IGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEVPcFByZUluY3JlbWVudDogIGluY3JlbWVudCA9IDE7ICBicmVhazsKLSAgICAg
ICAgICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6ICBpbmNyZW1lbnQgPSAtMTsgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOSU1QTEVNRU5URUQoKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmIChpbmRleCAhPSBOVUxMICYmIGNvbXBhcmF0b3IgIT0g
RU9wTnVsbCAmJiBpbmNyZW1lbnQgIT0gMCkKLSAgICB7Ci0gICAgICAgIGlmIChjb21wYXJhdG9y
ID09IEVPcExlc3NUaGFuRXF1YWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbXBhcmF0b3Ig
PSBFT3BMZXNzVGhhbjsKLSAgICAgICAgICAgIGxpbWl0ICs9IDE7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoY29tcGFyYXRvciA9PSBFT3BMZXNzVGhhbikKLSAgICAgICAgewotICAgICAgICAg
ICAgaW50IGl0ZXJhdGlvbnMgPSAobGltaXQgLSBpbml0aWFsKSAvIGluY3JlbWVudDsKLQotICAg
ICAgICAgICAgaWYgKGl0ZXJhdGlvbnMgPD0gTUFYX0xPT1BfSVRFUkFUSU9OUykKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gTm90IGFuIGV4Y2Vzc2l2
ZSBsb29wCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnJlc3Rv
cmVJbmRleCA9IG1FeGNlc3NpdmVMb29wSW5kZXg7Ci0gICAgICAgICAgICBtRXhjZXNzaXZlTG9v
cEluZGV4ID0gaW5kZXg7Ci0KLSAgICAgICAgICAgIG91dCA8PCAie2ludCAiOwotICAgICAgICAg
ICAgaW5kZXgtPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAgICAgb3V0IDw8ICI7XG4iCi0gICAg
ICAgICAgICAgICAgICAgImJvb2wgQnJlYWsiOwotICAgICAgICAgICAgaW5kZXgtPnRyYXZlcnNl
KHRoaXMpOwotICAgICAgICAgICAgb3V0IDw8ICIgPSBmYWxzZTtcbiI7Ci0KLSAgICAgICAgICAg
IGJvb2wgZmlyc3RMb29wRnJhZ21lbnQgPSB0cnVlOwotCi0gICAgICAgICAgICB3aGlsZSAoaXRl
cmF0aW9ucyA+IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IGNsYW1wZWRM
aW1pdCA9IGluaXRpYWwgKyBpbmNyZW1lbnQgKiBzdGQ6Om1pbihNQVhfTE9PUF9JVEVSQVRJT05T
LCBpdGVyYXRpb25zKTsKLQotICAgICAgICAgICAgICAgIGlmICghZmlyc3RMb29wRnJhZ21lbnQp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImlmICghQnJl
YWsiOwotICAgICAgICAgICAgICAgICAgICBpbmRleC0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAg
ICAgICAgICAgICAgIG91dCA8PCAiKSB7XG4iOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIGlmIChpdGVyYXRpb25zIDw9IE1BWF9MT09QX0lURVJBVElPTlMpICAgLy8gTGFz
dCBsb29wIGZyYWdtZW50Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBt
RXhjZXNzaXZlTG9vcEluZGV4ID0gTlVMTDsgICAvLyBTdG9wcyBzZXR0aW5nIHRoZSBCcmVhayBm
bGFnCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IC8vIGZvcihpbnQgaW5kZXggPSBpbml0aWFsOyBpbmRleCA8IGNsYW1wZWRMaW1pdDsgaW5kZXgg
Kz0gaW5jcmVtZW50KQotCi0gICAgICAgICAgICAgICAgb3V0IDw8ICJmb3IoIjsKLSAgICAgICAg
ICAgICAgICBpbmRleC0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIg
PSAiOwotICAgICAgICAgICAgICAgIG91dCA8PCBpbml0aWFsOwotCi0gICAgICAgICAgICAgICAg
b3V0IDw8ICI7ICI7Ci0gICAgICAgICAgICAgICAgaW5kZXgtPnRyYXZlcnNlKHRoaXMpOwotICAg
ICAgICAgICAgICAgIG91dCA8PCAiIDwgIjsKLSAgICAgICAgICAgICAgICBvdXQgPDwgY2xhbXBl
ZExpbWl0OwotCi0gICAgICAgICAgICAgICAgb3V0IDw8ICI7ICI7Ci0gICAgICAgICAgICAgICAg
aW5kZXgtPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAgICAgICAgIG91dCA8PCAiICs9ICI7Ci0g
ICAgICAgICAgICAgICAgb3V0IDw8IGluY3JlbWVudDsKLSAgICAgICAgICAgICAgICBvdXQgPDwg
IilcbiI7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgb3V0cHV0TGluZURpcmVj
dGl2ZShub2RlLT5nZXRMaW5lKCkuZmlyc3RfbGluZSk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8
ICJ7XG4iOwotCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldEJvZHkoKSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPmdldEJvZHkoKS0+dHJhdmVyc2Uo
dGhpcyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgb3V0cHV0TGluZURp
cmVjdGl2ZShub2RlLT5nZXRMaW5lKCkuZmlyc3RfbGluZSk7Ci0gICAgICAgICAgICAgICAgb3V0
IDw8ICI7fVxuIjsKLQotICAgICAgICAgICAgICAgIGlmICghZmlyc3RMb29wRnJhZ21lbnQpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIn1cbiI7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZmlyc3RMb29wRnJhZ21lbnQgPSBmYWxz
ZTsKLQotICAgICAgICAgICAgICAgIGluaXRpYWwgKz0gTUFYX0xPT1BfSVRFUkFUSU9OUyAqIGlu
Y3JlbWVudDsKLSAgICAgICAgICAgICAgICBpdGVyYXRpb25zIC09IE1BWF9MT09QX0lURVJBVElP
TlM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG91dCA8PCAifSI7
Ci0KLSAgICAgICAgICAgIG1FeGNlc3NpdmVMb29wSW5kZXggPSByZXN0b3JlSW5kZXg7Ci0KLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5JTVBMRU1F
TlRFRCgpOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsgICAvLyBOb3QgaGFuZGxlZCBhcyBh
biBleGNlc3NpdmUgbG9vcAotfQotCi12b2lkIE91dHB1dEhMU0w6Om91dHB1dFRyaXBsZXQoVmlz
aXQgdmlzaXQsIGNvbnN0IFRTdHJpbmcgJnByZVN0cmluZywgY29uc3QgVFN0cmluZyAmaW5TdHJp
bmcsIGNvbnN0IFRTdHJpbmcgJnBvc3RTdHJpbmcpCi17Ci0gICAgVEluZm9TaW5rQmFzZSAmb3V0
ID0gbUJvZHk7Ci0KLSAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCi0gICAgewotICAgICAgICBv
dXQgPDwgcHJlU3RyaW5nOwotICAgIH0KLSAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQot
ICAgIHsKLSAgICAgICAgb3V0IDw8IGluU3RyaW5nOwotICAgIH0KLSAgICBlbHNlIGlmICh2aXNp
dCA9PSBQb3N0VmlzaXQpCi0gICAgewotICAgICAgICBvdXQgPDwgcG9zdFN0cmluZzsKLSAgICB9
Ci19Ci0KLXZvaWQgT3V0cHV0SExTTDo6b3V0cHV0TGluZURpcmVjdGl2ZShpbnQgbGluZSkKLXsK
LSAgICBpZiAoKG1Db250ZXh0LmNvbXBpbGVPcHRpb25zICYgU0hfTElORV9ESVJFQ1RJVkVTKSAm
JiAobGluZSA+IDApKQotICAgIHsKLSAgICAgICAgbUJvZHkgPDwgIlxuIjsKLSAgICAgICAgbUJv
ZHkgPDwgIiNsaW5lICIgPDwgbGluZTsKLQotICAgICAgICBpZiAobUNvbnRleHQuc291cmNlUGF0
aCkKLSAgICAgICAgewotICAgICAgICAgICAgbUJvZHkgPDwgIiBcIiIgPDwgbUNvbnRleHQuc291
cmNlUGF0aCA8PCAiXCIiOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtQm9keSA8PCAi
XG4iOwotICAgIH0KLX0KLQotVFN0cmluZyBPdXRwdXRITFNMOjphcmd1bWVudFN0cmluZyhjb25z
dCBUSW50ZXJtU3ltYm9sICpzeW1ib2wpCi17Ci0gICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBz
eW1ib2wtPmdldFF1YWxpZmllcigpOwotICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gc3ltYm9sLT5n
ZXRUeXBlKCk7Ci0gICAgVFN0cmluZyBuYW1lID0gc3ltYm9sLT5nZXRTeW1ib2woKTsKLQotICAg
IGlmIChuYW1lLmVtcHR5KCkpICAgLy8gSExTTCBkZW1hbmRzIG5hbWVkIGFyZ3VtZW50cywgYWxz
byBmb3IgcHJvdG90eXBlcwotICAgIHsKLSAgICAgICAgbmFtZSA9ICJ4IiArIHN0cihtVW5pcXVl
SW5kZXgrKyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG5hbWUgPSBkZWNvcmF0
ZShuYW1lKTsKLSAgICB9Ci0KLSAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBV
VCAmJiBJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpCi0gICAgewotICAgICAgIHJldHVy
biBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIgIiArIHRleHR1cmVTdHJpbmcodHlwZSkg
KyAiIHRleHR1cmVfIiArIG5hbWUgKyBhcnJheVN0cmluZyh0eXBlKSArICIsICIgKwotICAgICAg
ICAgICAgICBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIgU2FtcGxlclN0YXRlIHNhbXBs
ZXJfIiArIG5hbWUgKyBhcnJheVN0cmluZyh0eXBlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcXVh
bGlmaWVyU3RyaW5nKHF1YWxpZmllcikgKyAiICIgKyB0eXBlU3RyaW5nKHR5cGUpICsgIiAiICsg
bmFtZSArIGFycmF5U3RyaW5nKHR5cGUpOwotfQotCi1UU3RyaW5nIE91dHB1dEhMU0w6OnF1YWxp
ZmllclN0cmluZyhUUXVhbGlmaWVyIHF1YWxpZmllcikKLXsKLSAgICBzd2l0Y2gocXVhbGlmaWVy
KQotICAgIHsKLSAgICAgIGNhc2UgRXZxSW46ICAgICAgICAgICAgcmV0dXJuICJpbiI7Ci0gICAg
ICBjYXNlIEV2cU91dDogICAgICAgICAgIHJldHVybiAib3V0IjsKLSAgICAgIGNhc2UgRXZxSW5P
dXQ6ICAgICAgICAgcmV0dXJuICJpbm91dCI7Ci0gICAgICBjYXNlIEV2cUNvbnN0UmVhZE9ubHk6
IHJldHVybiAiY29uc3QiOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gIiI7Ci19Ci0KLVRTdHJpbmcgT3V0cHV0SExTTDo6dHlwZVN0cmluZyhjb25z
dCBUVHlwZSAmdHlwZSkKLXsKLSAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1
Y3QpCi0gICAgewotICAgICAgICBjb25zdCBUU3RyaW5nJiB0eXBlTmFtZSA9IHR5cGUuZ2V0U3Ry
dWN0KCktPm5hbWUoKTsKLSAgICAgICAgaWYgKHR5cGVOYW1lICE9ICIiKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gc3RydWN0TG9va3VwKHR5cGVOYW1lKTsKLSAgICAgICAgfQotICAg
ICAgICBlbHNlICAgLy8gTmFtZWxlc3Mgc3RydWN0dXJlLCBkZWZpbmUgaW4gcGxhY2UKLSAgICAg
ICAgewotICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gdHlwZS5nZXRTdHJ1
Y3QoKS0+ZmllbGRzKCk7Ci0KLSAgICAgICAgICAgIFRTdHJpbmcgc3RyaW5nID0gInN0cnVjdFxu
IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAie1xuIjsKLQotICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICpmaWVsZCA9IGZpZWxkc1tpXTsKLQot
ICAgICAgICAgICAgICAgIHN0cmluZyArPSAiICAgICIgKyB0eXBlU3RyaW5nKCpmaWVsZC0+dHlw
ZSgpKSArICIgIiArIGRlY29yYXRlKGZpZWxkLT5uYW1lKCkpICsgYXJyYXlTdHJpbmcoKmZpZWxk
LT50eXBlKCkpICsgIjtcbiI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN0cmluZyAr
PSAifSAiOwotCi0gICAgICAgICAgICByZXR1cm4gc3RyaW5nOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGVsc2UgaWYgKHR5cGUuaXNNYXRyaXgoKSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAodHlw
ZS5nZXROb21pbmFsU2l6ZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSAyOiByZXR1cm4g
ImZsb2F0MngyIjsKLSAgICAgICAgICBjYXNlIDM6IHJldHVybiAiZmxvYXQzeDMiOwotICAgICAg
ICAgIGNhc2UgNDogcmV0dXJuICJmbG9hdDR4NCI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxz
ZQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlLmdldEJhc2ljVHlwZSgpKQotICAgICAgICB7
Ci0gICAgICAgICAgY2FzZSBFYnRGbG9hdDoKLSAgICAgICAgICAgIHN3aXRjaCAodHlwZS5nZXRO
b21pbmFsU2l6ZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDE6IHJldHVy
biAiZmxvYXQiOwotICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiAiZmxvYXQyIjsKLSAgICAg
ICAgICAgICAgY2FzZSAzOiByZXR1cm4gImZsb2F0MyI7Ci0gICAgICAgICAgICAgIGNhc2UgNDog
cmV0dXJuICJmbG9hdDQiOwotICAgICAgICAgICAgfQotICAgICAgICAgIGNhc2UgRWJ0SW50Ogot
ICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldE5vbWluYWxTaXplKCkpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuICJpbnQiOwotICAgICAgICAgICAgICBjYXNl
IDI6IHJldHVybiAiaW50MiI7Ci0gICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuICJpbnQzIjsK
LSAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gImludDQiOwotICAgICAgICAgICAgfQotICAg
ICAgICAgIGNhc2UgRWJ0Qm9vbDoKLSAgICAgICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFs
U2l6ZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiAiYm9v
bCI7Ci0gICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuICJib29sMiI7Ci0gICAgICAgICAgICAg
IGNhc2UgMzogcmV0dXJuICJib29sMyI7Ci0gICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuICJi
b29sNCI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSBFYnRWb2lkOgotICAgICAgICAg
ICAgcmV0dXJuICJ2b2lkIjsKLSAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKLSAgICAgICAg
ICAgIHJldHVybiAic2FtcGxlcjJEIjsKLSAgICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgot
ICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyQ1VCRSI7Ci0gICAgICAgICAgY2FzZSBFYnRTYW1w
bGVyRXh0ZXJuYWxPRVM6Ci0gICAgICAgICAgICByZXR1cm4gInNhbXBsZXIyRCI7Ci0gICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
VU5SRUFDSEFCTEUoKTsKLSAgICByZXR1cm4gIjx1bmtub3duIHR5cGU+IjsKLX0KLQotVFN0cmlu
ZyBPdXRwdXRITFNMOjp0ZXh0dXJlU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQotewotICAgIHN3
aXRjaCAodHlwZS5nZXRCYXNpY1R5cGUoKSkKLSAgICB7Ci0gICAgICBjYXNlIEVidFNhbXBsZXIy
RDoKLSAgICAgICAgcmV0dXJuICJUZXh0dXJlMkQiOwotICAgICAgY2FzZSBFYnRTYW1wbGVyQ3Vi
ZToKLSAgICAgICAgcmV0dXJuICJUZXh0dXJlQ3ViZSI7Ci0gICAgICBjYXNlIEVidFNhbXBsZXJF
eHRlcm5hbE9FUzoKLSAgICAgICAgcmV0dXJuICJUZXh0dXJlMkQiOwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgVU5SRUFDSEFCTEUoKTsKLSAgICByZXR1cm4g
Ijx1bmtub3duIHRleHR1cmUgdHlwZT4iOwotfQotCi1UU3RyaW5nIE91dHB1dEhMU0w6OmFycmF5
U3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQotewotICAgIGlmICghdHlwZS5pc0FycmF5KCkpCi0g
ICAgewotICAgICAgICByZXR1cm4gIiI7Ci0gICAgfQotCi0gICAgcmV0dXJuICJbIiArIHN0cih0
eXBlLmdldEFycmF5U2l6ZSgpKSArICJdIjsKLX0KLQotVFN0cmluZyBPdXRwdXRITFNMOjppbml0
aWFsaXplcihjb25zdCBUVHlwZSAmdHlwZSkKLXsKLSAgICBUU3RyaW5nIHN0cmluZzsKLQotICAg
IHNpemVfdCBzaXplID0gdHlwZS5nZXRPYmplY3RTaXplKCk7Ci0gICAgZm9yIChzaXplX3QgY29t
cG9uZW50ID0gMDsgY29tcG9uZW50IDwgc2l6ZTsgY29tcG9uZW50KyspCi0gICAgewotICAgICAg
ICBzdHJpbmcgKz0gIjAiOwotCi0gICAgICAgIGlmIChjb21wb25lbnQgKyAxIDwgc2l6ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgc3RyaW5nICs9ICIsICI7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gInsiICsgc3RyaW5nICsgIn0iOwotfQotCi12b2lkIE91dHB1dEhMU0w6OmFk
ZENvbnN0cnVjdG9yKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5nICZuYW1lLCBjb25z
dCBUSW50ZXJtU2VxdWVuY2UgKnBhcmFtZXRlcnMpCi17Ci0gICAgaWYgKG5hbWUgPT0gIiIpCi0g
ICAgewotICAgICAgICByZXR1cm47ICAgLy8gTmFtZWxlc3Mgc3RydWN0dXJlcyBkb24ndCBoYXZl
IGNvbnN0cnVjdG9ycwotICAgIH0KLQotICAgIGlmICh0eXBlLmdldFN0cnVjdCgpICYmIG1TdHJ1
Y3ROYW1lcy5maW5kKGRlY29yYXRlKG5hbWUpKSAhPSBtU3RydWN0TmFtZXMuZW5kKCkpCi0gICAg
ewotICAgICAgICByZXR1cm47ICAgLy8gQWxyZWFkeSBhZGRlZAotICAgIH0KLQotICAgIFRUeXBl
IGN0b3JUeXBlID0gdHlwZTsKLSAgICBjdG9yVHlwZS5jbGVhckFycmF5bmVzcygpOwotICAgIGN0
b3JUeXBlLnNldFByZWNpc2lvbihFYnBIaWdoKTsKLSAgICBjdG9yVHlwZS5zZXRRdWFsaWZpZXIo
RXZxVGVtcG9yYXJ5KTsKLQotICAgIFRTdHJpbmcgY3Rvck5hbWUgPSB0eXBlLmdldFN0cnVjdCgp
ID8gZGVjb3JhdGUobmFtZSkgOiBuYW1lOwotCi0gICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxUVHlw
ZT4gUGFyYW1ldGVyQXJyYXk7Ci0gICAgUGFyYW1ldGVyQXJyYXkgY3RvclBhcmFtZXRlcnM7Ci0K
LSAgICBpZiAodHlwZS5nZXRTdHJ1Y3QoKSkKLSAgICB7Ci0gICAgICAgIG1TdHJ1Y3ROYW1lcy5p
bnNlcnQoZGVjb3JhdGUobmFtZSkpOwotCi0gICAgICAgIFRTdHJpbmcgc3RydWN0dXJlOwotICAg
ICAgICBzdHJ1Y3R1cmUgKz0gInN0cnVjdCAiICsgZGVjb3JhdGUobmFtZSkgKyAiXG4iCi0gICAg
ICAgICAgICAgICAgICAgICAie1xuIjsKLQotICAgICAgICBjb25zdCBURmllbGRMaXN0ICZmaWVs
ZHMgPSB0eXBlLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKLSAgICAgICAgewotICAgICAgICAg
ICAgY29uc3QgVEZpZWxkICpmaWVsZCA9IGZpZWxkc1tpXTsKLQotICAgICAgICAgICAgc3RydWN0
dXJlICs9ICIgICAgIiArIHR5cGVTdHJpbmcoKmZpZWxkLT50eXBlKCkpICsgIiAiICsgZGVjb3Jh
dGVGaWVsZChmaWVsZC0+bmFtZSgpLCB0eXBlKSArIGFycmF5U3RyaW5nKCpmaWVsZC0+dHlwZSgp
KSArICI7XG4iOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RydWN0dXJlICs9ICJ9O1xuIjsKLQot
ICAgICAgICBpZiAoc3RkOjpmaW5kKG1TdHJ1Y3REZWNsYXJhdGlvbnMuYmVnaW4oKSwgbVN0cnVj
dERlY2xhcmF0aW9ucy5lbmQoKSwgc3RydWN0dXJlKSA9PSBtU3RydWN0RGVjbGFyYXRpb25zLmVu
ZCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU3RydWN0RGVjbGFyYXRpb25zLnB1c2hfYmFj
ayhzdHJ1Y3R1cmUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGN0b3JQ
YXJhbWV0ZXJzLnB1c2hfYmFjaygqZmllbGRzW2ldLT50eXBlKCkpOwotICAgICAgICB9Ci0gICAg
fQotICAgIGVsc2UgaWYgKHBhcmFtZXRlcnMpCi0gICAgewotICAgICAgICBmb3IgKFRJbnRlcm1T
ZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgcGFyYW1ldGVyID0gcGFyYW1ldGVycy0+YmVnaW4oKTsg
cGFyYW1ldGVyICE9IHBhcmFtZXRlcnMtPmVuZCgpOyBwYXJhbWV0ZXIrKykKLSAgICAgICAgewot
ICAgICAgICAgICAgY3RvclBhcmFtZXRlcnMucHVzaF9iYWNrKCgqcGFyYW1ldGVyKS0+Z2V0QXNU
eXBlZCgpLT5nZXRUeXBlKCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFC
TEUoKTsKLQotICAgIFRTdHJpbmcgY29uc3RydWN0b3I7Ci0KLSAgICBpZiAoY3RvclR5cGUuZ2V0
U3RydWN0KCkpCi0gICAgewotICAgICAgICBjb25zdHJ1Y3RvciArPSBjdG9yTmFtZSArICIgIiAr
IGN0b3JOYW1lICsgIl9jdG9yKCI7Ci0gICAgfQotICAgIGVsc2UgICAvLyBCdWlsdC1pbiB0eXBl
Ci0gICAgewotICAgICAgICBjb25zdHJ1Y3RvciArPSB0eXBlU3RyaW5nKGN0b3JUeXBlKSArICIg
IiArIGN0b3JOYW1lICsgIigiOwotICAgIH0KLQotICAgIGZvciAodW5zaWduZWQgaW50IHBhcmFt
ZXRlciA9IDA7IHBhcmFtZXRlciA8IGN0b3JQYXJhbWV0ZXJzLnNpemUoKTsgcGFyYW1ldGVyKysp
Ci0gICAgewotICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IGN0b3JQYXJhbWV0ZXJzW3BhcmFt
ZXRlcl07Ci0KLSAgICAgICAgY29uc3RydWN0b3IgKz0gdHlwZVN0cmluZyh0eXBlKSArICIgeCIg
KyBzdHIocGFyYW1ldGVyKSArIGFycmF5U3RyaW5nKHR5cGUpOwotCi0gICAgICAgIGlmIChwYXJh
bWV0ZXIgPCBjdG9yUGFyYW1ldGVycy5zaXplKCkgLSAxKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBjb25zdHJ1Y3RvciArPSAiLCAiOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29uc3RydWN0
b3IgKz0gIilcbiIKLSAgICAgICAgICAgICAgICAgICAie1xuIjsKLQotICAgIGlmIChjdG9yVHlw
ZS5nZXRTdHJ1Y3QoKSkKLSAgICB7Ci0gICAgICAgIGNvbnN0cnVjdG9yICs9ICIgICAgIiArIGN0
b3JOYW1lICsgIiBzdHJ1Y3R1cmUgPSB7IjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAg
ICAgY29uc3RydWN0b3IgKz0gIiAgICByZXR1cm4gIiArIHR5cGVTdHJpbmcoY3RvclR5cGUpICsg
IigiOwotICAgIH0KLQotICAgIGlmIChjdG9yVHlwZS5pc01hdHJpeCgpICYmIGN0b3JQYXJhbWV0
ZXJzLnNpemUoKSA9PSAxKQotICAgIHsKLSAgICAgICAgaW50IGRpbSA9IGN0b3JUeXBlLmdldE5v
bWluYWxTaXplKCk7Ci0gICAgICAgIGNvbnN0IFRUeXBlICZwYXJhbWV0ZXIgPSBjdG9yUGFyYW1l
dGVyc1swXTsKLQotICAgICAgICBpZiAocGFyYW1ldGVyLmlzU2NhbGFyKCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGRpbTsgcm93KyspCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgZGltOyBjb2wr
KykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9
IFRTdHJpbmcoKHJvdyA9PSBjb2wpID8gIngwIiA6ICIwLjAiKTsKLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChyb3cgPCBkaW0gLSAxIHx8IGNvbCA8IGRpbSAt
IDEpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
cnVjdG9yICs9ICIsICI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAocGFyYW1ldGVyLmlz
TWF0cml4KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8
IGRpbTsgcm93KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgY29s
ID0gMDsgY29sIDwgZGltOyBjb2wrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChyb3cgPCBwYXJhbWV0ZXIuZ2V0Tm9taW5hbFNpemUoKSAmJiBjb2wgPCBwYXJh
bWV0ZXIuZ2V0Tm9taW5hbFNpemUoKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gVFN0cmluZygieDAiKSArICJbIiArIHN0cihy
b3cpICsgIl0iICsgIlsiICsgc3RyKGNvbCkgKyAiXSI7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSBUU3RyaW5nKChyb3cgPT0gY29sKSA/ICIx
LjAiIDogIjAuMCIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHJvdyA8IGRpbSAtIDEgfHwgY29sIDwgZGltIC0gMSkKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gIiwgIjsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgIHNpemVfdCByZW1haW5pbmdDb21wb25lbnRzID0gY3RvclR5cGUuZ2V0T2JqZWN0
U2l6ZSgpOwotICAgICAgICBzaXplX3QgcGFyYW1ldGVySW5kZXggPSAwOwotCi0gICAgICAgIHdo
aWxlIChyZW1haW5pbmdDb21wb25lbnRzID4gMCkKLSAgICAgICAgewotICAgICAgICAgICAgY29u
c3QgVFR5cGUgJnBhcmFtZXRlciA9IGN0b3JQYXJhbWV0ZXJzW3BhcmFtZXRlckluZGV4XTsKLSAg
ICAgICAgICAgIGNvbnN0IHNpemVfdCBwYXJhbWV0ZXJTaXplID0gcGFyYW1ldGVyLmdldE9iamVj
dFNpemUoKTsKLSAgICAgICAgICAgIGJvb2wgbW9yZVBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJJbmRl
eCArIDEgPCBjdG9yUGFyYW1ldGVycy5zaXplKCk7Ci0KLSAgICAgICAgICAgIGNvbnN0cnVjdG9y
ICs9ICJ4IiArIHN0cihzdGF0aWNfY2FzdDxpbnQ+KHBhcmFtZXRlckluZGV4KSk7Ci0KLSAgICAg
ICAgICAgIGlmIChwYXJhbWV0ZXIuaXNTY2FsYXIoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBBU1NFUlQocGFyYW1ldGVyU2l6ZSA8PSByZW1haW5pbmdDb21wb25lbnRzKTsKLSAg
ICAgICAgICAgICAgICByZW1haW5pbmdDb21wb25lbnRzIC09IHBhcmFtZXRlclNpemU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChwYXJhbWV0ZXIuaXNWZWN0b3IoKSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAocmVtYWluaW5nQ29tcG9uZW50cyA9PSBw
YXJhbWV0ZXJTaXplIHx8IG1vcmVQYXJhbWV0ZXJzKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKHBhcmFtZXRlclNpemUgPD0gcmVtYWluaW5nQ29tcG9uZW50
cyk7Ci0gICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ0NvbXBvbmVudHMgLT0gcGFyYW1ldGVy
U2l6ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVtYWlu
aW5nQ29tcG9uZW50cyA8IHN0YXRpY19jYXN0PHNpemVfdD4ocGFyYW1ldGVyLmdldE5vbWluYWxT
aXplKCkpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChy
ZW1haW5pbmdDb21wb25lbnRzKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAxOiBjb25zdHJ1Y3RvciArPSAiLngiOyAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIDI6IGNvbnN0cnVjdG9yICs9ICIueHkiOyAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgMzogY29uc3RydWN0b3IgKz0gIi54eXoiOyAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBjb25zdHJ1Y3RvciArPSAiLnh5enciOyBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nQ29tcG9u
ZW50cyA9IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHBhcmFtZXRlci5p
c01hdHJpeCgpIHx8IHBhcmFtZXRlci5nZXRTdHJ1Y3QoKSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBBU1NFUlQocmVtYWluaW5nQ29tcG9uZW50cyA9PSBwYXJhbWV0ZXJTaXplIHx8
IG1vcmVQYXJhbWV0ZXJzKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQocGFyYW1ldGVyU2l6ZSA8
PSByZW1haW5pbmdDb21wb25lbnRzKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICByZW1haW5pbmdDb21wb25lbnRzIC09IHBhcmFtZXRlclNpemU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICAgICAgICAgIGlmIChtb3JlUGFy
YW1ldGVycykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJJbmRleCsr
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocmVtYWluaW5nQ29tcG9uZW50cykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSAiLCAiOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGN0b3JUeXBlLmdldFN0cnVj
dCgpKQotICAgIHsKLSAgICAgICAgY29uc3RydWN0b3IgKz0gIn07XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHN0cnVjdHVyZTtcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIn1cbiI7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGNvbnN0cnVjdG9yICs9
ICIpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIjsKLSAgICB9Ci0KLSAgICBtQ29u
c3RydWN0b3JzLmluc2VydChjb25zdHJ1Y3Rvcik7Ci19Ci0KLWNvbnN0IENvbnN0YW50VW5pb24g
Kk91dHB1dEhMU0w6OndyaXRlQ29uc3RhbnRVbmlvbihjb25zdCBUVHlwZSAmdHlwZSwgY29uc3Qg
Q29uc3RhbnRVbmlvbiAqY29uc3RVbmlvbikKLXsKLSAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBt
Qm9keTsKLQotICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKLSAgICB7
Ci0gICAgICAgIG91dCA8PCBzdHJ1Y3RMb29rdXAodHlwZS5nZXRTdHJ1Y3QoKS0+bmFtZSgpKSAr
ICJfY3RvcigiOwotICAgICAgICAKLSAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0g
dHlwZS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Ci0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IFRU
eXBlICpmaWVsZFR5cGUgPSBmaWVsZHNbaV0tPnR5cGUoKTsKLQotICAgICAgICAgICAgY29uc3RV
bmlvbiA9IHdyaXRlQ29uc3RhbnRVbmlvbigqZmllbGRUeXBlLCBjb25zdFVuaW9uKTsKLQotICAg
ICAgICAgICAgaWYgKGkgIT0gZmllbGRzLnNpemUoKSAtIDEpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgb3V0IDw8ICIsICI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBvdXQgPDwgIikiOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBzaXplX3Qg
c2l6ZSA9IHR5cGUuZ2V0T2JqZWN0U2l6ZSgpOwotICAgICAgICBib29sIHdyaXRlVHlwZSA9IHNp
emUgPiAxOwotICAgICAgICAKLSAgICAgICAgaWYgKHdyaXRlVHlwZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgb3V0IDw8IHR5cGVTdHJpbmcodHlwZSkgPDwgIigiOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyssIGNvbnN0VW5pb24rKykKLSAg
ICAgICAgewotICAgICAgICAgICAgc3dpdGNoIChjb25zdFVuaW9uLT5nZXRUeXBlKCkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IG91dCA8PCBzdGQ6Om1pbihG
TFRfTUFYLCBzdGQ6Om1heCgtRkxUX01BWCwgY29uc3RVbmlvbi0+Z2V0RkNvbnN0KCkpKTsgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgRWJ0SW50OiAgIG91dCA8PCBjb25zdFVuaW9uLT5nZXRJ
Q29uc3QoKTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogIG91dCA8PCBjb25z
dFVuaW9uLT5nZXRCQ29uc3QoKTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpICE9IHNpemUgLSAx
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHdyaXRlVHlwZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgb3V0IDw8ICIpIjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBjb25z
dFVuaW9uOwotfQotCi1UU3RyaW5nIE91dHB1dEhMU0w6OnNjb3BlU3RyaW5nKHVuc2lnbmVkIGlu
dCBkZXB0aExpbWl0KQotewotICAgIFRTdHJpbmcgc3RyaW5nOwotCi0gICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBtU2NvcGVCcmFja2V0LnNpemUoKSAmJiBpIDwgZGVwdGhMaW1pdDsg
aSsrKQotICAgIHsKLSAgICAgICAgc3RyaW5nICs9ICJfIiArIHN0cihpKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gc3RyaW5nOwotfQotCi1UU3RyaW5nIE91dHB1dEhMU0w6OnNjb3BlZFN0cnVjdChj
b25zdCBUU3RyaW5nICZ0eXBlTmFtZSkKLXsKLSAgICBpZiAodHlwZU5hbWUgPT0gIiIpCi0gICAg
ewotICAgICAgICByZXR1cm4gdHlwZU5hbWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHR5cGVOYW1l
ICsgc2NvcGVTdHJpbmcobVNjb3BlRGVwdGgpOwotfQotCi1UU3RyaW5nIE91dHB1dEhMU0w6OnN0
cnVjdExvb2t1cChjb25zdCBUU3RyaW5nICZ0eXBlTmFtZSkKLXsKLSAgICBmb3IgKGludCBkZXB0
aCA9IG1TY29wZURlcHRoOyBkZXB0aCA+PSAwOyBkZXB0aC0tKQotICAgIHsKLSAgICAgICAgVFN0
cmluZyBzY29wZWROYW1lID0gZGVjb3JhdGUodHlwZU5hbWUgKyBzY29wZVN0cmluZyhkZXB0aCkp
OwotCi0gICAgICAgIGZvciAoU3RydWN0TmFtZXM6Oml0ZXJhdG9yIHN0cnVjdE5hbWUgPSBtU3Ry
dWN0TmFtZXMuYmVnaW4oKTsgc3RydWN0TmFtZSAhPSBtU3RydWN0TmFtZXMuZW5kKCk7IHN0cnVj
dE5hbWUrKykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCpzdHJ1Y3ROYW1lID09IHNjb3Bl
ZE5hbWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNjb3BlZE5hbWU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBVTlJFQUNIQUJMRSgpOyAg
IC8vIFNob3VsZCBoYXZlIGZvdW5kIGEgbWF0Y2hpbmcgY29uc3RydWN0b3IKLQotICAgIHJldHVy
biB0eXBlTmFtZTsKLX0KLQotVFN0cmluZyBPdXRwdXRITFNMOjpkZWNvcmF0ZShjb25zdCBUU3Ry
aW5nICZzdHJpbmcpCi17Ci0gICAgaWYgKHN0cmluZy5jb21wYXJlKDAsIDMsICJnbF8iKSAhPSAw
ICYmIHN0cmluZy5jb21wYXJlKDAsIDMsICJkeF8iKSAhPSAwKQotICAgIHsKLSAgICAgICAgcmV0
dXJuICJfIiArIHN0cmluZzsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN0cmluZzsKLX0KLQot
VFN0cmluZyBPdXRwdXRITFNMOjpkZWNvcmF0ZVVuaWZvcm0oY29uc3QgVFN0cmluZyAmc3RyaW5n
LCBjb25zdCBUVHlwZSAmdHlwZSkKLXsKLSAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBF
YnRTYW1wbGVyRXh0ZXJuYWxPRVMpCi0gICAgewotICAgICAgICByZXR1cm4gImV4XyIgKyBzdHJp
bmc7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBkZWNvcmF0ZShzdHJpbmcpOwotfQotCi1UU3Ry
aW5nIE91dHB1dEhMU0w6OmRlY29yYXRlRmllbGQoY29uc3QgVFN0cmluZyAmc3RyaW5nLCBjb25z
dCBUVHlwZSAmc3RydWN0dXJlKQotewotICAgIGlmIChzdHJ1Y3R1cmUuZ2V0U3RydWN0KCktPm5h
bWUoKS5jb21wYXJlKDAsIDMsICJnbF8iKSAhPSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGRl
Y29yYXRlKHN0cmluZyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0cmluZzsKLX0KLQotVFN0cmlu
ZyBPdXRwdXRITFNMOjpyZWdpc3RlclN0cmluZyhUSW50ZXJtU3ltYm9sICpvcGVyYW5kKQotewot
ICAgIEFTU0VSVChvcGVyYW5kLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFVbmlmb3JtKTsKLQotICAg
IGlmIChJc1NhbXBsZXIob3BlcmFuZC0+Z2V0QmFzaWNUeXBlKCkpKQotICAgIHsKLSAgICAgICAg
cmV0dXJuICJzIiArIHN0cihzYW1wbGVyUmVnaXN0ZXIob3BlcmFuZCkpOwotICAgIH0KLQotICAg
IHJldHVybiAiYyIgKyBzdHIodW5pZm9ybVJlZ2lzdGVyKG9wZXJhbmQpKTsKLX0KLQotaW50IE91
dHB1dEhMU0w6OnNhbXBsZXJSZWdpc3RlcihUSW50ZXJtU3ltYm9sICpzYW1wbGVyKQotewotICAg
IGNvbnN0IFRUeXBlICZ0eXBlID0gc2FtcGxlci0+Z2V0VHlwZSgpOwotICAgIEFTU0VSVChJc1Nh
bXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpOwotCi0gICAgaW50IGluZGV4ID0gbVNhbXBsZXJS
ZWdpc3RlcjsKLSAgICBtU2FtcGxlclJlZ2lzdGVyICs9IHNhbXBsZXItPnRvdGFsUmVnaXN0ZXJD
b3VudCgpOwotCi0gICAgZGVjbGFyZVVuaWZvcm0odHlwZSwgc2FtcGxlci0+Z2V0U3ltYm9sKCks
IGluZGV4KTsKLQotICAgIHJldHVybiBpbmRleDsKLX0KLQotaW50IE91dHB1dEhMU0w6OnVuaWZv
cm1SZWdpc3RlcihUSW50ZXJtU3ltYm9sICp1bmlmb3JtKQotewotICAgIGNvbnN0IFRUeXBlICZ0
eXBlID0gdW5pZm9ybS0+Z2V0VHlwZSgpOwotICAgIEFTU0VSVCghSXNTYW1wbGVyKHR5cGUuZ2V0
QmFzaWNUeXBlKCkpKTsKLQotICAgIGludCBpbmRleCA9IG1Vbmlmb3JtUmVnaXN0ZXI7Ci0gICAg
bVVuaWZvcm1SZWdpc3RlciArPSB1bmlmb3JtLT50b3RhbFJlZ2lzdGVyQ291bnQoKTsKLQotICAg
IGRlY2xhcmVVbmlmb3JtKHR5cGUsIHVuaWZvcm0tPmdldFN5bWJvbCgpLCBpbmRleCk7Ci0KLSAg
ICByZXR1cm4gaW5kZXg7Ci19Ci0KLXZvaWQgT3V0cHV0SExTTDo6ZGVjbGFyZVVuaWZvcm0oY29u
c3QgVFR5cGUgJnR5cGUsIGNvbnN0IFRTdHJpbmcgJm5hbWUsIGludCBpbmRleCkKLXsKLSAgICBU
U3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgpOwotCi0gICAgaWYgKCFzdHJ1
Y3R1cmUpCi0gICAgewotICAgICAgICBtQWN0aXZlVW5pZm9ybXMucHVzaF9iYWNrKFVuaWZvcm0o
Z2xWYXJpYWJsZVR5cGUodHlwZSksIGdsVmFyaWFibGVQcmVjaXNpb24odHlwZSksIG5hbWUuY19z
dHIoKSwgdHlwZS5nZXRBcnJheVNpemUoKSwgaW5kZXgpKTsKLSAgICB9Ci0gICAgZWxzZQotICAg
IHsKLSAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gc3RydWN0dXJlLT5maWVsZHMo
KTsKLQotICAgICAgICBpZiAodHlwZS5pc0FycmF5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGludCBlbGVtZW50SW5kZXggPSBpbmRleDsKLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCB0eXBlLmdldEFycmF5U2l6ZSgpOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBmaWVsZHMuc2l6ZSgpOyBqKyspCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAmZmllbGRUeXBlID0g
KmZpZWxkc1tqXS0+dHlwZSgpOwotICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nIHVu
aWZvcm1OYW1lID0gbmFtZSArICJbIiArIHN0cihpKSArICJdLiIgKyBmaWVsZHNbal0tPm5hbWUo
KTsKLSAgICAgICAgICAgICAgICAgICAgZGVjbGFyZVVuaWZvcm0oZmllbGRUeXBlLCB1bmlmb3Jt
TmFtZSwgZWxlbWVudEluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgZWxlbWVudEluZGV4ICs9
IGZpZWxkVHlwZS50b3RhbFJlZ2lzdGVyQ291bnQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpbnQgZmllbGRJbmRleCA9IGluZGV4OwotCi0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBjb25zdCBUVHlwZSAmZmllbGRUeXBlID0gKmZpZWxkc1tpXS0+dHlwZSgpOwotICAgICAgICAg
ICAgICAgIGNvbnN0IFRTdHJpbmcgdW5pZm9ybU5hbWUgPSBuYW1lICsgIi4iICsgZmllbGRzW2ld
LT5uYW1lKCk7Ci0gICAgICAgICAgICAgICAgZGVjbGFyZVVuaWZvcm0oZmllbGRUeXBlLCB1bmlm
b3JtTmFtZSwgZmllbGRJbmRleCk7Ci0gICAgICAgICAgICAgICAgZmllbGRJbmRleCArPSBmaWVs
ZFR5cGUudG90YWxSZWdpc3RlckNvdW50KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci19Ci0KLUdMZW51bSBPdXRwdXRITFNMOjpnbFZhcmlhYmxlVHlwZShjb25zdCBUVHlwZSAm
dHlwZSkKLXsKLSAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRGbG9hdCkKLSAgICB7
Ci0gICAgICAgIGlmICh0eXBlLmlzU2NhbGFyKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBHTF9GTE9BVDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh0eXBlLmlzVmVjdG9y
KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCh0eXBlLmdldE5vbWluYWxTaXplKCkp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIEdMX0ZMT0FUX1ZF
QzI7Ci0gICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIEdMX0ZMT0FUX1ZFQzM7Ci0gICAgICAg
ICAgICAgIGNhc2UgNDogcmV0dXJuIEdMX0ZMT0FUX1ZFQzQ7Ci0gICAgICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZSBpZiAodHlwZS5pc01hdHJpeCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2godHlw
ZS5nZXROb21pbmFsU2l6ZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDI6
IHJldHVybiBHTF9GTE9BVF9NQVQyOwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBHTF9G
TE9BVF9NQVQzOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBHTF9GTE9BVF9NQVQ0Owot
ICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAo
dHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQpCi0gICAgewotICAgICAgICBpZiAodHlwZS5p
c1NjYWxhcigpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfSU5UOwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UgaWYgKHR5cGUuaXNWZWN0b3IoKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgc3dpdGNoKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgY2FzZSAyOiByZXR1cm4gR0xfSU5UX1ZFQzI7Ci0gICAgICAgICAgICAgIGNhc2Ug
MzogcmV0dXJuIEdMX0lOVF9WRUMzOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBHTF9J
TlRfVkVDNDsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotICAg
IGVsc2UgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0Qm9vbCkKLSAgICB7Ci0gICAgICAg
IGlmICh0eXBlLmlzU2NhbGFyKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9C
T09MOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHR5cGUuaXNWZWN0b3IoKSkKLSAgICAg
ICAgewotICAgICAgICAgICAgc3dpdGNoKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gR0xfQk9PTF9WRUMyOwotICAgICAg
ICAgICAgICBjYXNlIDM6IHJldHVybiBHTF9CT09MX1ZFQzM7Ci0gICAgICAgICAgICAgIGNhc2Ug
NDogcmV0dXJuIEdMX0JPT0xfVkVDNDsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxF
KCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U2FtcGxl
cjJEKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX1NBTVBMRVJfMkQ7Ci0gICAgfQotICAgIGVs
c2UgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U2FtcGxlckN1YmUpCi0gICAgewotICAg
ICAgICByZXR1cm4gR0xfU0FNUExFUl9DVUJFOwotICAgIH0KLSAgICBlbHNlIFVOUkVBQ0hBQkxF
KCk7Ci0KLSAgICByZXR1cm4gR0xfTk9ORTsKLX0KLQotR0xlbnVtIE91dHB1dEhMU0w6OmdsVmFy
aWFibGVQcmVjaXNpb24oY29uc3QgVFR5cGUgJnR5cGUpCi17Ci0gICAgaWYgKHR5cGUuZ2V0QmFz
aWNUeXBlKCkgPT0gRWJ0RmxvYXQpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0UHJl
Y2lzaW9uKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEVicEhpZ2g6ICAgcmV0dXJuIEdM
X0hJR0hfRkxPQVQ7Ci0gICAgICAgICAgY2FzZSBFYnBNZWRpdW06IHJldHVybiBHTF9NRURJVU1f
RkxPQVQ7Ci0gICAgICAgICAgY2FzZSBFYnBMb3c6ICAgIHJldHVybiBHTF9MT1dfRkxPQVQ7Ci0g
ICAgICAgICAgY2FzZSBFYnBVbmRlZmluZWQ6Ci0gICAgICAgICAgICAvLyBTaG91bGQgYmUgZGVm
aW5lZCBhcyB0aGUgZGVmYXVsdCBwcmVjaXNpb24gYnkgdGhlIHBhcnNlcgotICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAodHlw
ZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUu
Z2V0UHJlY2lzaW9uKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEVicEhpZ2g6ICAgcmV0
dXJuIEdMX0hJR0hfSU5UOwotICAgICAgICAgIGNhc2UgRWJwTWVkaXVtOiByZXR1cm4gR0xfTUVE
SVVNX0lOVDsKLSAgICAgICAgICBjYXNlIEVicExvdzogICAgcmV0dXJuIEdMX0xPV19JTlQ7Ci0g
ICAgICAgICAgY2FzZSBFYnBVbmRlZmluZWQ6Ci0gICAgICAgICAgICAvLyBTaG91bGQgYmUgZGVm
aW5lZCBhcyB0aGUgZGVmYXVsdCBwcmVjaXNpb24gYnkgdGhlIHBhcnNlcgotICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBPdGhlciB0
eXBlcyAoYm9vbGVhbiwgc2FtcGxlcikgZG9uJ3QgaGF2ZSBhIHByZWNpc2lvbgotICAgIHJldHVy
biBHTF9OT05FOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvT3V0cHV0SExTTC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL091dHB1dEhMU0wuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg2YTc2
ZmI5YzcxNGRiY2U4MTNiNjM4NGU4YmM0OTVjZTk4YWNlZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvT3V0cHV0SExTTC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLS8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfT1VUUFVUSExTTF9IXwotI2RlZmluZSBD
T01QSUxFUl9PVVRQVVRITFNMX0hfCi0KLSNpbmNsdWRlIDxsaXN0PgotI2luY2x1ZGUgPHNldD4K
LSNpbmNsdWRlIDxtYXA+Ci0KLSNkZWZpbmUgR0xfQVBJQ0FMTAotI2luY2x1ZGUgPEdMRVMyL2ds
Mi5oPgotCi0jaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCi0jaW5jbHVkZSAiY29t
cGlsZXIvUGFyc2VDb250ZXh0LmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvVW5pZm9ybS5oIgotCi1u
YW1lc3BhY2Ugc2gKLXsKLWNsYXNzIFVuZm9sZFNob3J0Q2lyY3VpdDsKLQotY2xhc3MgT3V0cHV0
SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCi17Ci0gIHB1YmxpYzoKLSAgICBPdXRwdXRI
TFNMKFRQYXJzZUNvbnRleHQgJmNvbnRleHQsIGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyYgcmVz
b3VyY2VzLCBTaFNoYWRlck91dHB1dCBvdXRwdXRUeXBlKTsKLSAgICB+T3V0cHV0SExTTCgpOwot
Ci0gICAgdm9pZCBvdXRwdXQoKTsKLQotICAgIFRJbmZvU2lua0Jhc2UgJmdldEJvZHlTdHJlYW0o
KTsKLSAgICBjb25zdCBBY3RpdmVVbmlmb3JtcyAmZ2V0VW5pZm9ybXMoKTsKLQotICAgIFRTdHJp
bmcgdHlwZVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7Ci0gICAgVFN0cmluZyB0ZXh0dXJlU3Ry
aW5nKGNvbnN0IFRUeXBlICZ0eXBlKTsKLSAgICBzdGF0aWMgVFN0cmluZyBxdWFsaWZpZXJTdHJp
bmcoVFF1YWxpZmllciBxdWFsaWZpZXIpOwotICAgIHN0YXRpYyBUU3RyaW5nIGFycmF5U3RyaW5n
KGNvbnN0IFRUeXBlICZ0eXBlKTsKLSAgICBzdGF0aWMgVFN0cmluZyBpbml0aWFsaXplcihjb25z
dCBUVHlwZSAmdHlwZSk7Ci0gICAgc3RhdGljIFRTdHJpbmcgZGVjb3JhdGUoY29uc3QgVFN0cmlu
ZyAmc3RyaW5nKTsgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlcGVuZHMgYW4gdW5kZXJzY29y
ZSB0byBhdm9pZCBuYW1pbmcgY2xhc2hlcwotICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlVW5p
Zm9ybShjb25zdCBUU3RyaW5nICZzdHJpbmcsIGNvbnN0IFRUeXBlICZ0eXBlKTsKLSAgICBzdGF0
aWMgVFN0cmluZyBkZWNvcmF0ZUZpZWxkKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFR5
cGUgJnN0cnVjdHVyZSk7Ci0KLSAgcHJvdGVjdGVkOgotICAgIHZvaWQgaGVhZGVyKCk7Ci0KLSAg
ICAvLyBWaXNpdCBBU1Qgbm9kZXMgYW5kIG91dHB1dCB0aGVpciBjb2RlIHRvIHRoZSBib2R5IHN0
cmVhbQotICAgIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOwotICAgIHZvaWQgdmlz
aXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKik7Ci0gICAgYm9vbCB2aXNpdEJp
bmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSopOwotICAgIGJvb2wgdmlzaXRVbmFyeShW
aXNpdCB2aXNpdCwgVEludGVybVVuYXJ5Kik7Ci0gICAgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNp
dCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiopOwotICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlz
aXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKLSAgICBib29sIHZpc2l0TG9vcChWaXNpdCB2
aXNpdCwgVEludGVybUxvb3AqKTsKLSAgICBib29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBU
SW50ZXJtQnJhbmNoKik7Ci0KLSAgICB2b2lkIHRyYXZlcnNlU3RhdGVtZW50cyhUSW50ZXJtTm9k
ZSAqbm9kZSk7Ci0gICAgYm9vbCBpc1NpbmdsZVN0YXRlbWVudChUSW50ZXJtTm9kZSAqbm9kZSk7
Ci0gICAgYm9vbCBoYW5kbGVFeGNlc3NpdmVMb29wKFRJbnRlcm1Mb29wICpub2RlKTsKLSAgICB2
b2lkIG91dHB1dFRyaXBsZXQoVmlzaXQgdmlzaXQsIGNvbnN0IFRTdHJpbmcgJnByZVN0cmluZywg
Y29uc3QgVFN0cmluZyAmaW5TdHJpbmcsIGNvbnN0IFRTdHJpbmcgJnBvc3RTdHJpbmcpOwotICAg
IHZvaWQgb3V0cHV0TGluZURpcmVjdGl2ZShpbnQgbGluZSk7Ci0gICAgVFN0cmluZyBhcmd1bWVu
dFN0cmluZyhjb25zdCBUSW50ZXJtU3ltYm9sICpzeW1ib2wpOwotICAgIGludCB2ZWN0b3JTaXpl
KGNvbnN0IFRUeXBlICZ0eXBlKSBjb25zdDsKLQotICAgIHZvaWQgYWRkQ29uc3RydWN0b3IoY29u
c3QgVFR5cGUgJnR5cGUsIGNvbnN0IFRTdHJpbmcgJm5hbWUsIGNvbnN0IFRJbnRlcm1TZXF1ZW5j
ZSAqcGFyYW1ldGVycyk7Ci0gICAgY29uc3QgQ29uc3RhbnRVbmlvbiAqd3JpdGVDb25zdGFudFVu
aW9uKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBDb25zdGFudFVuaW9uICpjb25zdFVuaW9uKTsK
LQotICAgIFRTdHJpbmcgc2NvcGVTdHJpbmcodW5zaWduZWQgaW50IGRlcHRoTGltaXQpOwotICAg
IFRTdHJpbmcgc2NvcGVkU3RydWN0KGNvbnN0IFRTdHJpbmcgJnR5cGVOYW1lKTsKLSAgICBUU3Ry
aW5nIHN0cnVjdExvb2t1cChjb25zdCBUU3RyaW5nICZ0eXBlTmFtZSk7Ci0KLSAgICBUUGFyc2VD
b250ZXh0ICZtQ29udGV4dDsKLSAgICBjb25zdCBTaFNoYWRlck91dHB1dCBtT3V0cHV0VHlwZTsK
LSAgICBVbmZvbGRTaG9ydENpcmN1aXQgKm1VbmZvbGRTaG9ydENpcmN1aXQ7Ci0gICAgYm9vbCBt
SW5zaWRlRnVuY3Rpb247Ci0KLSAgICAvLyBPdXRwdXQgc3RyZWFtcwotICAgIFRJbmZvU2lua0Jh
c2UgbUhlYWRlcjsKLSAgICBUSW5mb1NpbmtCYXNlIG1Cb2R5OwotICAgIFRJbmZvU2lua0Jhc2Ug
bUZvb3RlcjsKLQotICAgIHR5cGVkZWYgc3RkOjptYXA8VFN0cmluZywgVEludGVybVN5bWJvbCo+
IFJlZmVyZW5jZWRTeW1ib2xzOwotICAgIFJlZmVyZW5jZWRTeW1ib2xzIG1SZWZlcmVuY2VkVW5p
Zm9ybXM7Ci0gICAgUmVmZXJlbmNlZFN5bWJvbHMgbVJlZmVyZW5jZWRBdHRyaWJ1dGVzOwotICAg
IFJlZmVyZW5jZWRTeW1ib2xzIG1SZWZlcmVuY2VkVmFyeWluZ3M7Ci0KLSAgICAvLyBQYXJhbWV0
ZXJzIGRldGVybWluaW5nIHdoYXQgZ29lcyBpbiB0aGUgaGVhZGVyIG91dHB1dAotICAgIGJvb2wg
bVVzZXNUZXh0dXJlMkQ7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUyRF9iaWFzOwotICAgIGJvb2wg
bVVzZXNUZXh0dXJlMkRMb2Q7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUyRFByb2o7Ci0gICAgYm9v
bCBtVXNlc1RleHR1cmUyRFByb2pfYmlhczsKLSAgICBib29sIG1Vc2VzVGV4dHVyZTJEUHJvakxv
ZDsKLSAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmU7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmVDdWJl
X2JpYXM7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlTG9kOwotICAgIGJvb2wgbVVzZXNUZXh0
dXJlMkRMb2QwOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXM7Ci0gICAgYm9vbCBt
VXNlc1RleHR1cmUyRFByb2pMb2QwOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9i
aWFzOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZUxvZDA7Ci0gICAgYm9vbCBtVXNlc1RleHR1
cmVDdWJlTG9kMF9iaWFzOwotICAgIGJvb2wgbVVzZXNGcmFnQ29sb3I7Ci0gICAgYm9vbCBtVXNl
c0ZyYWdEYXRhOwotICAgIGJvb2wgbVVzZXNEZXB0aFJhbmdlOwotICAgIGJvb2wgbVVzZXNGcmFn
Q29vcmQ7Ci0gICAgYm9vbCBtVXNlc1BvaW50Q29vcmQ7Ci0gICAgYm9vbCBtVXNlc0Zyb250RmFj
aW5nOwotICAgIGJvb2wgbVVzZXNQb2ludFNpemU7Ci0gICAgYm9vbCBtVXNlc0ZyYWdEZXB0aDsK
LSAgICBib29sIG1Vc2VzWG9yOwotICAgIGJvb2wgbVVzZXNNb2QxOwotICAgIGJvb2wgbVVzZXNN
b2QydjsKLSAgICBib29sIG1Vc2VzTW9kMmY7Ci0gICAgYm9vbCBtVXNlc01vZDN2OwotICAgIGJv
b2wgbVVzZXNNb2QzZjsKLSAgICBib29sIG1Vc2VzTW9kNHY7Ci0gICAgYm9vbCBtVXNlc01vZDRm
OwotICAgIGJvb2wgbVVzZXNGYWNlZm9yd2FyZDE7Ci0gICAgYm9vbCBtVXNlc0ZhY2Vmb3J3YXJk
MjsKLSAgICBib29sIG1Vc2VzRmFjZWZvcndhcmQzOwotICAgIGJvb2wgbVVzZXNGYWNlZm9yd2Fy
ZDQ7Ci0gICAgYm9vbCBtVXNlc0F0YW4yXzE7Ci0gICAgYm9vbCBtVXNlc0F0YW4yXzI7Ci0gICAg
Ym9vbCBtVXNlc0F0YW4yXzM7Ci0gICAgYm9vbCBtVXNlc0F0YW4yXzQ7Ci0gICAgYm9vbCBtVXNl
c0Rpc2NhcmRSZXdyaXRpbmc7Ci0KLSAgICBpbnQgbU51bVJlbmRlclRhcmdldHM7Ci0KLSAgICB0
eXBlZGVmIHN0ZDo6c2V0PFRTdHJpbmc+IENvbnN0cnVjdG9yczsKLSAgICBDb25zdHJ1Y3RvcnMg
bUNvbnN0cnVjdG9yczsKLQotICAgIHR5cGVkZWYgc3RkOjpzZXQ8VFN0cmluZz4gU3RydWN0TmFt
ZXM7Ci0gICAgU3RydWN0TmFtZXMgbVN0cnVjdE5hbWVzOwotCi0gICAgdHlwZWRlZiBzdGQ6Omxp
c3Q8VFN0cmluZz4gU3RydWN0RGVjbGFyYXRpb25zOwotICAgIFN0cnVjdERlY2xhcmF0aW9ucyBt
U3RydWN0RGVjbGFyYXRpb25zOwotCi0gICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxpbnQ+IFNjb3Bl
QnJhY2tldDsKLSAgICBTY29wZUJyYWNrZXQgbVNjb3BlQnJhY2tldDsKLSAgICB1bnNpZ25lZCBp
bnQgbVNjb3BlRGVwdGg7Ci0KLSAgICBpbnQgbVVuaXF1ZUluZGV4OyAgIC8vIEZvciBjcmVhdGlu
ZyB1bmlxdWUgbmFtZXMKLQotICAgIGJvb2wgbUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHk7Ci0g
ICAgYm9vbCBtT3V0cHV0TG9kMEZ1bmN0aW9uOwotICAgIGJvb2wgbUluc2lkZURpc2NvbnRpbnVv
dXNMb29wOwotCi0gICAgVEludGVybVN5bWJvbCAqbUV4Y2Vzc2l2ZUxvb3BJbmRleDsKLQotICAg
IGludCBtVW5pZm9ybVJlZ2lzdGVyOwotICAgIGludCBtU2FtcGxlclJlZ2lzdGVyOwotCi0gICAg
VFN0cmluZyByZWdpc3RlclN0cmluZyhUSW50ZXJtU3ltYm9sICpvcGVyYW5kKTsKLSAgICBpbnQg
c2FtcGxlclJlZ2lzdGVyKFRJbnRlcm1TeW1ib2wgKnNhbXBsZXIpOwotICAgIGludCB1bmlmb3Jt
UmVnaXN0ZXIoVEludGVybVN5bWJvbCAqdW5pZm9ybSk7Ci0gICAgdm9pZCBkZWNsYXJlVW5pZm9y
bShjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSwgaW50IGluZGV4KTsKLSAg
ICBzdGF0aWMgR0xlbnVtIGdsVmFyaWFibGVUeXBlKGNvbnN0IFRUeXBlICZ0eXBlKTsKLSAgICBz
dGF0aWMgR0xlbnVtIGdsVmFyaWFibGVQcmVjaXNpb24oY29uc3QgVFR5cGUgJnR5cGUpOwotCi0g
ICAgQWN0aXZlVW5pZm9ybXMgbUFjdGl2ZVVuaWZvcm1zOwotfTsKLX0KLQotI2VuZGlmICAgLy8g
Q09NUElMRVJfT1VUUFVUSExTTF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1BhcnNlQ29udGV4dC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvUGFyc2VDb250ZXh0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggOWEyNzk1MjNiYTc0MTZhODcyNDUzMTYwZTVhYzNlMzYzZDgwYWY2Ni4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvUGFyc2VDb250ZXh0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2
MDIgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNl
Q29udGV4dC5oIgotCi0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQot
I2luY2x1ZGUgImNvbXBpbGVyL2dsc2xhbmcuaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9j
ZXNzb3IvU291cmNlTG9jYXRpb24uaCIKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyBTdWItIHZl
Y3RvciBhbmQgbWF0cml4IGZpZWxkcwotLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0vLwotLy8gTG9v
ayBhdCBhICcuJyBmaWVsZCBzZWxlY3RvciBzdHJpbmcgYW5kIGNoYW5nZSBpdCBpbnRvIG9mZnNl
dHMKLS8vIGZvciBhIHZlY3Rvci4KLS8vCi1ib29sIFRQYXJzZUNvbnRleHQ6OnBhcnNlVmVjdG9y
RmllbGRzKGNvbnN0IFRTdHJpbmcmIGNvbXBTdHJpbmcsIGludCB2ZWNTaXplLCBUVmVjdG9yRmll
bGRzJiBmaWVsZHMsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCi17Ci0gICAgZmllbGRzLm51bSA9
IChpbnQpIGNvbXBTdHJpbmcuc2l6ZSgpOwotICAgIGlmIChmaWVsZHMubnVtID4gNCkgewotICAg
ICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCB2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0
cmluZy5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGVudW0g
ewotICAgICAgICBleHl6dywKLSAgICAgICAgZXJnYmEsCi0gICAgICAgIGVzdHBxCi0gICAgfSBm
aWVsZFNldFs0XTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgKytpKSB7
Ci0gICAgICAgIHN3aXRjaCAoY29tcFN0cmluZ1tpXSkgIHsKLSAgICAgICAgY2FzZSAneCc6IAot
ICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAwOwotICAgICAgICAgICAgZmllbGRTZXRb
aV0gPSBleHl6dzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdyJzogCi0gICAg
ICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDA7Ci0gICAgICAgICAgICBmaWVsZFNldFtpXSA9
IGVyZ2JhOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ3MnOgotICAgICAgICAg
ICAgZmllbGRzLm9mZnNldHNbaV0gPSAwOwotICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBlc3Rw
cTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICd5JzogCi0gICAgICAgICAgICBm
aWVsZHMub2Zmc2V0c1tpXSA9IDE7Ci0gICAgICAgICAgICBmaWVsZFNldFtpXSA9IGV4eXp3Owot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ2cnOiAKLSAgICAgICAgICAgIGZpZWxk
cy5vZmZzZXRzW2ldID0gMTsKLSAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXJnYmE7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAndCc6Ci0gICAgICAgICAgICBmaWVsZHMub2Zm
c2V0c1tpXSA9IDE7Ci0gICAgICAgICAgICBmaWVsZFNldFtpXSA9IGVzdHBxOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ3onOiAKLSAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRz
W2ldID0gMjsKLSAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXh5enc7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSAnYic6IAotICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0g
PSAyOwotICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBlcmdiYTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlICdwJzoKLSAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMjsK
LSAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXN0cHE7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgCi0gICAgICAgIGNhc2UgJ3cnOiAKLSAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ld
ID0gMzsKLSAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXh5enc7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSAnYSc6IAotICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAz
OwotICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBlcmdiYTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlICdxJzoKLSAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMzsKLSAg
ICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXN0cHE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHZlY3RvciBmaWVs
ZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCkpOwotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZHMu
bnVtOyArK2kpIHsKLSAgICAgICAgaWYgKGZpZWxkcy5vZmZzZXRzW2ldID49IHZlY1NpemUpIHsK
LSAgICAgICAgICAgIGVycm9yKGxpbmUsICJ2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIG91dCBvZiBy
YW5nZSIsICBjb21wU3RyaW5nLmNfc3RyKCkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGkgPiAwKSB7Ci0gICAgICAgICAgICBpZiAoZmllbGRT
ZXRbaV0gIT0gZmllbGRTZXRbaS0xXSkgewotICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsICJp
bGxlZ2FsIC0gdmVjdG9yIGNvbXBvbmVudCBmaWVsZHMgbm90IGZyb20gdGhlIHNhbWUgc2V0Iiwg
Y29tcFN0cmluZy5jX3N0cigpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotCi0v
LwotLy8gTG9vayBhdCBhICcuJyBmaWVsZCBzZWxlY3RvciBzdHJpbmcgYW5kIGNoYW5nZSBpdCBp
bnRvIG9mZnNldHMKLS8vIGZvciBhIG1hdHJpeC4KLS8vCi1ib29sIFRQYXJzZUNvbnRleHQ6OnBh
cnNlTWF0cml4RmllbGRzKGNvbnN0IFRTdHJpbmcmIGNvbXBTdHJpbmcsIGludCBtYXRTaXplLCBU
TWF0cml4RmllbGRzJiBmaWVsZHMsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCi17Ci0gICAgZmll
bGRzLndob2xlUm93ID0gZmFsc2U7Ci0gICAgZmllbGRzLndob2xlQ29sID0gZmFsc2U7Ci0gICAg
ZmllbGRzLnJvdyA9IC0xOwotICAgIGZpZWxkcy5jb2wgPSAtMTsKLQotICAgIGlmIChjb21wU3Ry
aW5nLnNpemUoKSAhPSAyKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIGxlbmd0aCBv
ZiBtYXRyaXggZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChjb21wU3RyaW5nWzBdID09ICdfJykgewot
ICAgICAgICBpZiAoY29tcFN0cmluZ1sxXSA8ICcwJyB8fCBjb21wU3RyaW5nWzFdID4gJzMnKSB7
Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCBtYXRyaXggZmllbGQgc2VsZWN0aW9u
IiwgY29tcFN0cmluZy5jX3N0cigpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgICAgICBmaWVsZHMud2hvbGVDb2wgPSB0cnVlOwotICAgICAgICBmaWVsZHMuY29s
ID0gY29tcFN0cmluZ1sxXSAtICcwJzsKLSAgICB9IGVsc2UgaWYgKGNvbXBTdHJpbmdbMV0gPT0g
J18nKSB7Ci0gICAgICAgIGlmIChjb21wU3RyaW5nWzBdIDwgJzAnIHx8IGNvbXBTdHJpbmdbMF0g
PiAnMycpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBz
ZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgICAgIGZpZWxkcy53aG9sZVJvdyA9IHRydWU7Ci0gICAgICAgIGZp
ZWxkcy5yb3cgPSBjb21wU3RyaW5nWzBdIC0gJzAnOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlm
IChjb21wU3RyaW5nWzBdIDwgJzAnIHx8IGNvbXBTdHJpbmdbMF0gPiAnMycgfHwKLSAgICAgICAg
ICAgIGNvbXBTdHJpbmdbMV0gPCAnMCcgfHwgY29tcFN0cmluZ1sxXSA+ICczJykgewotICAgICAg
ICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBT
dHJpbmcuY19zdHIoKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAgICAgZmllbGRzLnJvdyA9IGNvbXBTdHJpbmdbMF0gLSAnMCc7Ci0gICAgICAgIGZpZWxkcy5j
b2wgPSBjb21wU3RyaW5nWzFdIC0gJzAnOwotICAgIH0KLQotICAgIGlmIChmaWVsZHMucm93ID49
IG1hdFNpemUgfHwgZmllbGRzLmNvbCA+PSBtYXRTaXplKSB7Ci0gICAgICAgIGVycm9yKGxpbmUs
ICJtYXRyaXggZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSIsIGNvbXBTdHJpbmcuY19zdHIo
KSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyBFcnJvcnMKLS8vCi0vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQot
Ly8KLS8vIFRyYWNrIHdoZXRoZXIgZXJyb3JzIGhhdmUgb2NjdXJyZWQuCi0vLwotdm9pZCBUUGFy
c2VDb250ZXh0OjpyZWNvdmVyKCkKLXsKLX0KLQotLy8KLS8vIFVzZWQgYnkgZmxleC9iaXNvbiB0
byBvdXRwdXQgYWxsIHN5bnRheCBhbmQgcGFyc2luZyBlcnJvcnMuCi0vLwotdm9pZCBUUGFyc2VD
b250ZXh0OjplcnJvcihjb25zdCBUU291cmNlTG9jJiBsb2MsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIHJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4sIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm8pCi17Ci0gICAgcHA6OlNvdXJj
ZUxvY2F0aW9uIHNyY0xvYzsKLSAgICBzcmNMb2MuZmlsZSA9IGxvYy5maXJzdF9maWxlOwotICAg
IHNyY0xvYy5saW5lID0gbG9jLmZpcnN0X2xpbmU7Ci0gICAgZGlhZ25vc3RpY3Mud3JpdGVJbmZv
KHBwOjpEaWFnbm9zdGljczo6RVJST1IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNyY0xv
YywgcmVhc29uLCB0b2tlbiwgZXh0cmFJbmZvKTsKLQotfQotCi12b2lkIFRQYXJzZUNvbnRleHQ6
Ondhcm5pbmcoY29uc3QgVFNvdXJjZUxvYyYgbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIHJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXh0cmFJbmZvKSB7Ci0gICAgcHA6OlNvdXJjZUxv
Y2F0aW9uIHNyY0xvYzsKLSAgICBzcmNMb2MuZmlsZSA9IGxvYy5maXJzdF9maWxlOwotICAgIHNy
Y0xvYy5saW5lID0gbG9jLmZpcnN0X2xpbmU7Ci0gICAgZGlhZ25vc3RpY3Mud3JpdGVJbmZvKHBw
OjpEaWFnbm9zdGljczo6V0FSTklORywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjTG9j
LCByZWFzb24sIHRva2VuLCBleHRyYUluZm8pOwotfQotCi12b2lkIFRQYXJzZUNvbnRleHQ6OnRy
YWNlKGNvbnN0IGNoYXIqIHN0cikKLXsKLSAgICBkaWFnbm9zdGljcy53cml0ZURlYnVnKHN0cik7
Ci19Ci0KLS8vCi0vLyBTYW1lIGVycm9yIG1lc3NhZ2UgZm9yIGFsbCBwbGFjZXMgYXNzaWdubWVu
dHMgZG9uJ3Qgd29yay4KLS8vCi12b2lkIFRQYXJzZUNvbnRleHQ6OmFzc2lnbkVycm9yKGNvbnN0
IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5nIGxlZnQsIFRTdHJpbmcg
cmlnaHQpCi17Ci0gICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOwotICAgIGV4
dHJhSW5mb1N0cmVhbSA8PCAiY2Fubm90IGNvbnZlcnQgZnJvbSAnIiA8PCByaWdodCA8PCAiJyB0
byAnIiA8PCBsZWZ0IDw8ICInIjsKLSAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUlu
Zm9TdHJlYW0uc3RyKCk7Ci0gICAgZXJyb3IobGluZSwgIiIsIG9wLCBleHRyYUluZm8uY19zdHIo
KSk7Ci19Ci0KLS8vCi0vLyBTYW1lIGVycm9yIG1lc3NhZ2UgZm9yIGFsbCBwbGFjZXMgdW5hcnkg
b3BlcmF0aW9ucyBkb24ndCB3b3JrLgotLy8KLXZvaWQgVFBhcnNlQ29udGV4dDo6dW5hcnlPcEVy
cm9yKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5nIG9wZXJh
bmQpCi17Ci0gICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOwotICAgIGV4dHJh
SW5mb1N0cmVhbSA8PCAibm8gb3BlcmF0aW9uICciIDw8IG9wIDw8ICInIGV4aXN0cyB0aGF0IHRh
a2VzIGFuIG9wZXJhbmQgb2YgdHlwZSAiIDw8IG9wZXJhbmQgCi0gICAgICAgICAgICAgICAgICAg
IDw8ICIgKG9yIHRoZXJlIGlzIG5vIGFjY2VwdGFibGUgY29udmVyc2lvbikiOwotICAgIHN0ZDo6
c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKLSAgICBlcnJvcihsaW5l
LCAiIHdyb25nIG9wZXJhbmQgdHlwZSIsIG9wLCBleHRyYUluZm8uY19zdHIoKSk7Ci19Ci0KLS8v
Ci0vLyBTYW1lIGVycm9yIG1lc3NhZ2UgZm9yIGFsbCBiaW5hcnkgb3BlcmF0aW9ucyBkb24ndCB3
b3JrLgotLy8KLXZvaWQgVFBhcnNlQ29udGV4dDo6YmluYXJ5T3BFcnJvcihjb25zdCBUU291cmNl
TG9jJiBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVFN0cmluZyBsZWZ0LCBUU3RyaW5nIHJpZ2h0KQot
ewotICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKLSAgICBleHRyYUluZm9T
dHJlYW0gPDwgIm5vIG9wZXJhdGlvbiAnIiA8PCBvcCA8PCAiJyBleGlzdHMgdGhhdCB0YWtlcyBh
IGxlZnQtaGFuZCBvcGVyYW5kIG9mIHR5cGUgJyIgPDwgbGVmdCAKLSAgICAgICAgICAgICAgICAg
ICAgPDwgIicgYW5kIGEgcmlnaHQgb3BlcmFuZCBvZiB0eXBlICciIDw8IHJpZ2h0IDw8ICInIChv
ciB0aGVyZSBpcyBubyBhY2NlcHRhYmxlIGNvbnZlcnNpb24pIjsKLSAgICBzdGQ6OnN0cmluZyBl
eHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7Ci0gICAgZXJyb3IobGluZSwgIiB3cm9u
ZyBvcGVyYW5kIHR5cGVzICIsIG9wLCBleHRyYUluZm8uY19zdHIoKSk7IAotfQotCi1ib29sIFRQ
YXJzZUNvbnRleHQ6OnByZWNpc2lvbkVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwg
VFByZWNpc2lvbiBwcmVjaXNpb24sIFRCYXNpY1R5cGUgdHlwZSl7Ci0gICAgaWYgKCFjaGVja3NQ
cmVjaXNpb25FcnJvcnMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBzd2l0Y2goIHR5cGUg
KXsKLSAgICBjYXNlIEVidEZsb2F0OgotICAgICAgICBpZiggcHJlY2lzaW9uID09IEVicFVuZGVm
aW5lZCApewotICAgICAgICAgICAgZXJyb3IoIGxpbmUsICJObyBwcmVjaXNpb24gc3BlY2lmaWVk
IGZvciAoZmxvYXQpIiwgIiIgKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0SW50OgotICAgICAgICBpZiggcHJlY2lzaW9u
ID09IEVicFVuZGVmaW5lZCApewotICAgICAgICAgICAgZXJyb3IoIGxpbmUsICJObyBwcmVjaXNp
b24gc3BlY2lmaWVkIChpbnQpIiwgIiIgKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLwotLy8gQm90aCB0ZXN0IGFuZCBp
ZiBuZWNlc3NhcnksIHNwaXQgb3V0IGFuIGVycm9yLCB0byBzZWUgaWYgdGhlIG5vZGUgaXMgcmVh
bGx5Ci0vLyBhbiBsLXZhbHVlIHRoYXQgY2FuIGJlIG9wZXJhdGVkIG9uIHRoaXMgd2F5LgotLy8K
LS8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgd2FzIGFuIGVycm9yLgotLy8KLWJvb2wgVFBhcnNlQ29u
dGV4dDo6bFZhbHVlRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBjaGFy
KiBvcCwgVEludGVybVR5cGVkKiBub2RlKQotewotICAgIFRJbnRlcm1TeW1ib2wqIHN5bU5vZGUg
PSBub2RlLT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAgICBUSW50ZXJtQmluYXJ5KiBiaW5hcnlOb2Rl
ID0gbm9kZS0+Z2V0QXNCaW5hcnlOb2RlKCk7Ci0KLSAgICBpZiAoYmluYXJ5Tm9kZSkgewotICAg
ICAgICBib29sIGVycm9yUmV0dXJuOwotCi0gICAgICAgIHN3aXRjaChiaW5hcnlOb2RlLT5nZXRP
cCgpKSB7Ci0gICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6Ci0gICAgICAgIGNhc2UgRU9wSW5k
ZXhJbmRpcmVjdDoKLSAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdFN0cnVjdDoKLSAgICAgICAg
ICAgIHJldHVybiBsVmFsdWVFcnJvckNoZWNrKGxpbmUsIG9wLCBiaW5hcnlOb2RlLT5nZXRMZWZ0
KCkpOwotICAgICAgICBjYXNlIEVPcFZlY3RvclN3aXp6bGU6Ci0gICAgICAgICAgICBlcnJvclJl
dHVybiA9IGxWYWx1ZUVycm9yQ2hlY2sobGluZSwgb3AsIGJpbmFyeU5vZGUtPmdldExlZnQoKSk7
Ci0gICAgICAgICAgICBpZiAoIWVycm9yUmV0dXJuKSB7Ci0gICAgICAgICAgICAgICAgaW50IG9m
ZnNldFs0XSA9IHswLDAsMCwwfTsKLQotICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogcmln
aHROb2RlID0gYmluYXJ5Tm9kZS0+Z2V0UmlnaHQoKTsKLSAgICAgICAgICAgICAgICBUSW50ZXJt
QWdncmVnYXRlICphZ2dyTm9kZSA9IHJpZ2h0Tm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0
b3IgcCA9IGFnZ3JOb2RlLT5nZXRTZXF1ZW5jZSgpLmJlZ2luKCk7IAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwICE9IGFnZ3JOb2RlLT5nZXRTZXF1ZW5j
ZSgpLmVuZCgpOyBwKyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVlID0gKCpwKS0+
Z2V0QXNUeXBlZCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0SUNvbnN0KDApOwotICAgICAg
ICAgICAgICAgICAgICBvZmZzZXRbdmFsdWVdKys7ICAgICAKLSAgICAgICAgICAgICAgICAgICAg
aWYgKG9mZnNldFt2YWx1ZV0gPiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcihs
aW5lLCAiIGwtdmFsdWUgb2Ygc3dpenpsZSBjYW5ub3QgaGF2ZSBkdXBsaWNhdGUgY29tcG9uZW50
cyIsIG9wKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IAotCi0gICAg
ICAgICAgICByZXR1cm4gZXJyb3JSZXR1cm47Ci0gICAgICAgIGRlZmF1bHQ6IAotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIHJlcXVp
cmVkIiwgb3ApOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotCi0gICAgY29uc3Qg
Y2hhciogc3ltYm9sID0gMDsKLSAgICBpZiAoc3ltTm9kZSAhPSAwKQotICAgICAgICBzeW1ib2wg
PSBzeW1Ob2RlLT5nZXRTeW1ib2woKS5jX3N0cigpOwotCi0gICAgY29uc3QgY2hhciogbWVzc2Fn
ZSA9IDA7Ci0gICAgc3dpdGNoIChub2RlLT5nZXRRdWFsaWZpZXIoKSkgewotICAgIGNhc2UgRXZx
Q29uc3Q6ICAgICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgY29uc3QiOyAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBFdnFDb25zdFJlYWRPbmx5OiAgbWVzc2FnZSA9ICJjYW4ndCBtb2Rp
ZnkgYSBjb25zdCI7ICAgICAgICBicmVhazsKLSAgICBjYXNlIEV2cUF0dHJpYnV0ZTogICAgICBt
ZXNzYWdlID0gImNhbid0IG1vZGlmeSBhbiBhdHRyaWJ1dGUiOyAgIGJyZWFrOwotICAgIGNhc2Ug
RXZxVW5pZm9ybTogICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgdW5pZm9ybSI7ICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFWYXJ5aW5nSW46ICAgICAgbWVzc2FnZSA9ICJjYW4ndCBt
b2RpZnkgYSB2YXJ5aW5nIjsgICAgICBicmVhazsKLSAgICBjYXNlIEV2cUZyYWdDb29yZDogICAg
ICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBnbF9GcmFnQ29vcmQiOyAgIGJyZWFrOwotICAgIGNh
c2UgRXZxRnJvbnRGYWNpbmc6ICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGdsX0Zyb250RmFj
aW5nIjsgYnJlYWs7Ci0gICAgY2FzZSBFdnFQb2ludENvb3JkOiAgICAgbWVzc2FnZSA9ICJjYW4n
dCBtb2RpZnkgZ2xfUG9pbnRDb29yZCI7ICBicmVhazsKLSAgICBkZWZhdWx0OgotCi0gICAgICAg
IC8vCi0gICAgICAgIC8vIFR5cGUgdGhhdCBjYW4ndCBiZSB3cml0dGVuIHRvPwotICAgICAgICAv
LwotICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldEJhc2ljVHlwZSgpKSB7Ci0gICAgICAgIGNhc2Ug
RWJ0U2FtcGxlcjJEOgotICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgotICAgICAgICAgICAg
bWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYSBzYW1wbGVyIjsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEVidFZvaWQ6Ci0gICAgICAgICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlm
eSB2b2lkIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OiAKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1lc3NhZ2UgPT0gMCAmJiBi
aW5hcnlOb2RlID09IDAgJiYgc3ltTm9kZSA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIg
bC12YWx1ZSByZXF1aXJlZCIsIG9wKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LQotICAgIC8vCi0gICAgLy8gRXZlcnl0aGluZyBlbHNlIGlzIG9rYXksIG5vIGVycm9yLgotICAg
IC8vCi0gICAgaWYgKG1lc3NhZ2UgPT0gMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
Ly8KLSAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgd2UgaGF2ZSBhbiBlcnJvciBhbmQgYSBtZXNzYWdl
LgotICAgIC8vCi0gICAgaWYgKHN5bU5vZGUpIHsKLSAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0g
ZXh0cmFJbmZvU3RyZWFtOwotICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgIlwiIiA8PCBzeW1i
b2wgPDwgIlwiICgiIDw8IG1lc3NhZ2UgPDwgIikiOwotICAgICAgICBzdGQ6OnN0cmluZyBleHRy
YUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7Ci0gICAgICAgIGVycm9yKGxpbmUsICIgbC12
YWx1ZSByZXF1aXJlZCIsIG9wLCBleHRyYUluZm8uY19zdHIoKSk7Ci0gICAgfQotICAgIGVsc2Ug
ewotICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07Ci0gICAgICAgIGV4
dHJhSW5mb1N0cmVhbSA8PCAiKCIgPDwgbWVzc2FnZSA8PCAiKSI7Ci0gICAgICAgIHN0ZDo6c3Ry
aW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKLSAgICAgICAgZXJyb3IobGlu
ZSwgIiBsLXZhbHVlIHJlcXVpcmVkIiwgb3AsIGV4dHJhSW5mby5jX3N0cigpKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8KLS8vIEJvdGggdGVzdCwgYW5kIGlmIG5lY2Vzc2Fy
eSBzcGl0IG91dCBhbiBlcnJvciwgdG8gc2VlIGlmIHRoZSBub2RlIGlzIHJlYWxseQotLy8gYSBj
b25zdGFudC4KLS8vCi0vLyBSZXR1cm5zIHRydWUgaWYgdGhlIHdhcyBhbiBlcnJvci4KLS8vCi1i
b29sIFRQYXJzZUNvbnRleHQ6OmNvbnN0RXJyb3JDaGVjayhUSW50ZXJtVHlwZWQqIG5vZGUpCi17
Ci0gICAgaWYgKG5vZGUtPmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBlcnJvcihub2RlLT5nZXRMaW5lKCksICJjb25zdGFudCBleHByZXNz
aW9uIHJlcXVpcmVkIiwgIiIpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vCi0vLyBCb3Ro
IHRlc3QsIGFuZCBpZiBuZWNlc3Nhcnkgc3BpdCBvdXQgYW4gZXJyb3IsIHRvIHNlZSBpZiB0aGUg
bm9kZSBpcyByZWFsbHkKLS8vIGFuIGludGVnZXIuCi0vLwotLy8gUmV0dXJucyB0cnVlIGlmIHRo
ZSB3YXMgYW4gZXJyb3IuCi0vLwotYm9vbCBUUGFyc2VDb250ZXh0OjppbnRlZ2VyRXJyb3JDaGVj
ayhUSW50ZXJtVHlwZWQqIG5vZGUsIGNvbnN0IGNoYXIqIHRva2VuKQotewotICAgIGlmIChub2Rl
LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgbm9kZS0+Z2V0Tm9taW5hbFNpemUoKSA9PSAx
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBlcnJvcihub2RlLT5nZXRMaW5lKCksICJp
bnRlZ2VyIGV4cHJlc3Npb24gcmVxdWlyZWQiLCB0b2tlbik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotLy8KLS8vIEJvdGggdGVzdCwgYW5kIGlmIG5lY2Vzc2FyeSBzcGl0IG91dCBhbiBlcnJv
ciwgdG8gc2VlIGlmIHdlIGFyZSBjdXJyZW50bHkKLS8vIGdsb2JhbGx5IHNjb3BlZC4KLS8vCi0v
LyBSZXR1cm5zIHRydWUgaWYgdGhlIHdhcyBhbiBlcnJvci4KLS8vCi1ib29sIFRQYXJzZUNvbnRl
eHQ6Omdsb2JhbEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgYm9vbCBnbG9iYWws
IGNvbnN0IGNoYXIqIHRva2VuKQotewotICAgIGlmIChnbG9iYWwpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGVycm9yKGxpbmUsICJvbmx5IGFsbG93ZWQgYXQgZ2xvYmFsIHNjb3BlIiwg
dG9rZW4pOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vCi0vLyBGb3Igbm93LCBrZWVwIGl0
IHNpbXBsZTogIGlmIGl0IHN0YXJ0cyAiZ2xfIiwgaXQncyByZXNlcnZlZCwgaW5kZXBlbmRlbnQK
LS8vIG9mIHNjb3BlLiAgRXhjZXB0LCBpZiB0aGUgc3ltYm9sIHRhYmxlIGlzIGF0IHRoZSBidWls
dC1pbiBwdXNoLWxldmVsLAotLy8gd2hpY2ggaXMgd2hlbiB3ZSBhcmUgcGFyc2luZyBidWlsdC1p
bnMuCi0vLyBBbHNvIGNoZWNrcyBmb3IgIndlYmdsXyIgYW5kICJfd2ViZ2xfIiByZXNlcnZlZCBp
ZGVudGlmaWVycyBpZiBwYXJzaW5nIGEKLS8vIHdlYmdsIHNoYWRlci4KLS8vCi0vLyBSZXR1cm5z
IHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgotLy8KLWJvb2wgVFBhcnNlQ29udGV4dDo6cmVz
ZXJ2ZWRFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlk
ZW50aWZpZXIpCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHJlc2VydmVkRXJyTXNnID0gInJl
c2VydmVkIGJ1aWx0LWluIG5hbWUiOwotICAgIGlmICghc3ltYm9sVGFibGUuYXRCdWlsdEluTGV2
ZWwoKSkgewotICAgICAgICBpZiAoaWRlbnRpZmllci5jb21wYXJlKDAsIDMsICJnbF8iKSA9PSAw
KSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgImdsXyIpOwotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlzV2ViR0xCYXNl
ZFNwZWMoc2hhZGVyU3BlYykpIHsKLSAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmNvbXBhcmUo
MCwgNiwgIndlYmdsXyIpID09IDApIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNl
cnZlZEVyck1zZywgIndlYmdsXyIpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuY29tcGFyZSgwLCA3LCAiX3dl
YmdsXyIpID09IDApIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1z
ZywgIl93ZWJnbF8iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlmIChzaGFkZXJTcGVjID09IFNIX0NTU19TSEFERVJTX1NQRUMgJiYg
aWRlbnRpZmllci5jb21wYXJlKDAsIDQsICJjc3NfIikgPT0gMCkgewotICAgICAgICAgICAgICAg
IGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAiY3NzXyIpOwotICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChpZGVudGlm
aWVyLmZpbmQoIl9fIikgIT0gVFN0cmluZzo6bnBvcykgewotICAgICAgICAgICAgZXJyb3IobGlu
ZSwgImlkZW50aWZpZXJzIGNvbnRhaW5pbmcgdHdvIGNvbnNlY3V0aXZlIHVuZGVyc2NvcmVzIChf
XykgYXJlIHJlc2VydmVkIGFzIHBvc3NpYmxlIGZ1dHVyZSBrZXl3b3JkcyIsIGlkZW50aWZpZXIu
Y19zdHIoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8KLS8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBlbm91Z2gg
ZGF0YSBwcm92aWRlZCB0byB0aGUgY29uc3RydWN0b3IgdG8gYnVpbGQKLS8vIHNvbWV0aGluZyBv
ZiB0aGUgdHlwZSBvZiB0aGUgY29uc3RydWN0b3IuICBBbHNvIHJldHVybnMgdGhlIHR5cGUgb2YK
LS8vIHRoZSBjb25zdHJ1Y3Rvci4KLS8vCi0vLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFu
IGVycm9yIGluIGNvbnN0cnVjdGlvbi4KLS8vCi1ib29sIFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVj
dG9yRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUSW50ZXJtTm9kZSogbm9kZSwg
VEZ1bmN0aW9uJiBmdW5jdGlvbiwgVE9wZXJhdG9yIG9wLCBUVHlwZSogdHlwZSkKLXsKLSAgICAq
dHlwZSA9IGZ1bmN0aW9uLmdldFJldHVyblR5cGUoKTsKLQotICAgIGJvb2wgY29uc3RydWN0aW5n
TWF0cml4ID0gZmFsc2U7Ci0gICAgc3dpdGNoKG9wKSB7Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RN
YXQyOgotICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MzoKLSAgICBjYXNlIEVPcENvbnN0cnVjdE1h
dDQ6Ci0gICAgICAgIGNvbnN0cnVjdGluZ01hdHJpeCA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGRlZmF1bHQ6IAotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIE5v
dGU6IEl0J3Mgb2theSB0byBoYXZlIHRvbyBtYW55IGNvbXBvbmVudHMgYXZhaWxhYmxlLCBidXQg
bm90IG9rYXkgdG8gaGF2ZSB1bnVzZWQKLSAgICAvLyBhcmd1bWVudHMuICAnZnVsbCcgd2lsbCBn
byB0byB0cnVlIHdoZW4gZW5vdWdoIGFyZ3MgaGF2ZSBiZWVuIHNlZW4uICBJZiB3ZSBsb29wCi0g
ICAgLy8gYWdhaW4sIHRoZXJlIGlzIGFuIGV4dHJhIGFyZ3VtZW50LCBzbyAnb3ZlcmZ1bGwnIHdp
bGwgYmVjb21lIHRydWUuCi0gICAgLy8KLQotICAgIHNpemVfdCBzaXplID0gMDsKLSAgICBib29s
IGNvbnN0VHlwZSA9IHRydWU7Ci0gICAgYm9vbCBmdWxsID0gZmFsc2U7Ci0gICAgYm9vbCBvdmVy
RnVsbCA9IGZhbHNlOwotICAgIGJvb2wgbWF0cml4SW5NYXRyaXggPSBmYWxzZTsKLSAgICBib29s
IGFycmF5QXJnID0gZmFsc2U7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbi5n
ZXRQYXJhbUNvdW50KCk7ICsraSkgewotICAgICAgICBjb25zdCBUUGFyYW1ldGVyJiBwYXJhbSA9
IGZ1bmN0aW9uLmdldFBhcmFtKGkpOwotICAgICAgICBzaXplICs9IHBhcmFtLnR5cGUtPmdldE9i
amVjdFNpemUoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjb25zdHJ1Y3RpbmdNYXRyaXggJiYg
cGFyYW0udHlwZS0+aXNNYXRyaXgoKSkKLSAgICAgICAgICAgIG1hdHJpeEluTWF0cml4ID0gdHJ1
ZTsKLSAgICAgICAgaWYgKGZ1bGwpCi0gICAgICAgICAgICBvdmVyRnVsbCA9IHRydWU7Ci0gICAg
ICAgIGlmIChvcCAhPSBFT3BDb25zdHJ1Y3RTdHJ1Y3QgJiYgIXR5cGUtPmlzQXJyYXkoKSAmJiBz
aXplID49IHR5cGUtPmdldE9iamVjdFNpemUoKSkKLSAgICAgICAgICAgIGZ1bGwgPSB0cnVlOwot
ICAgICAgICBpZiAocGFyYW0udHlwZS0+Z2V0UXVhbGlmaWVyKCkgIT0gRXZxQ29uc3QpCi0gICAg
ICAgICAgICBjb25zdFR5cGUgPSBmYWxzZTsKLSAgICAgICAgaWYgKHBhcmFtLnR5cGUtPmlzQXJy
YXkoKSkKLSAgICAgICAgICAgIGFycmF5QXJnID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgaWYg
KGNvbnN0VHlwZSkKLSAgICAgICAgdHlwZS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0KTsKLQotICAg
IGlmICh0eXBlLT5pc0FycmF5KCkgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90Pih0eXBlLT5nZXRBcnJh
eVNpemUoKSkgIT0gZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpKSB7Ci0gICAgICAgIGVycm9yKGxp
bmUsICJhcnJheSBjb25zdHJ1Y3RvciBuZWVkcyBvbmUgYXJndW1lbnQgcGVyIGFycmF5IGVsZW1l
bnQiLCAiY29uc3RydWN0b3IiKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAg
aWYgKGFycmF5QXJnICYmIG9wICE9IEVPcENvbnN0cnVjdFN0cnVjdCkgewotICAgICAgICBlcnJv
cihsaW5lLCAiY29uc3RydWN0aW5nIGZyb20gYSBub24tZGVyZWZlcmVuY2VkIGFycmF5IiwgImNv
bnN0cnVjdG9yIik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChtYXRy
aXhJbk1hdHJpeCAmJiAhdHlwZS0+aXNBcnJheSgpKSB7Ci0gICAgICAgIGlmIChmdW5jdGlvbi5n
ZXRQYXJhbUNvdW50KCkgIT0gMSkgewotICAgICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3Rp
bmcgbWF0cml4IGZyb20gbWF0cml4IGNhbiBvbmx5IHRha2Ugb25lIGFyZ3VtZW50IiwgImNvbnN0
cnVjdG9yIik7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAob3ZlckZ1bGwpIHsKLSAgICAgICAgZXJyb3IobGluZSwgInRvbyBtYW55IGFyZ3VtZW50
cyIsICJjb25zdHJ1Y3RvciIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0g
ICAgaWYgKG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCAmJiAhdHlwZS0+aXNBcnJheSgpICYmIGlu
dCh0eXBlLT5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCkuc2l6ZSgpKSAhPSBmdW5jdGlvbi5nZXRQYXJh
bUNvdW50KCkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgIk51bWJlciBvZiBjb25zdHJ1Y3RvciBw
YXJhbWV0ZXJzIGRvZXMgbm90IG1hdGNoIHRoZSBudW1iZXIgb2Ygc3RydWN0dXJlIGZpZWxkcyIs
ICJjb25zdHJ1Y3RvciIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAo
IXR5cGUtPmlzTWF0cml4KCkgfHwgIW1hdHJpeEluTWF0cml4KSB7Ci0gICAgICAgIGlmICgob3Ag
IT0gRU9wQ29uc3RydWN0U3RydWN0ICYmIHNpemUgIT0gMSAmJiBzaXplIDwgdHlwZS0+Z2V0T2Jq
ZWN0U2l6ZSgpKSB8fAotICAgICAgICAgICAgKG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCAmJiBz
aXplIDwgdHlwZS0+Z2V0T2JqZWN0U2l6ZSgpKSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwg
Im5vdCBlbm91Z2ggZGF0YSBwcm92aWRlZCBmb3IgY29uc3RydWN0aW9uIiwgImNvbnN0cnVjdG9y
Iik7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFRJ
bnRlcm1UeXBlZCAqdHlwZWQgPSBub2RlID8gbm9kZS0+Z2V0QXNUeXBlZCgpIDogMDsKLSAgICBp
ZiAodHlwZWQgPT0gMCkgewotICAgICAgICBlcnJvcihsaW5lLCAiY29uc3RydWN0b3IgYXJndW1l
bnQgZG9lcyBub3QgaGF2ZSBhIHR5cGUiLCAiY29uc3RydWN0b3IiKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIGlmIChvcCAhPSBFT3BDb25zdHJ1Y3RTdHJ1Y3QgJiYgSXNTYW1w
bGVyKHR5cGVkLT5nZXRCYXNpY1R5cGUoKSkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImNhbm5v
dCBjb252ZXJ0IGEgc2FtcGxlciIsICJjb25zdHJ1Y3RvciIpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgaWYgKHR5cGVkLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkKSB7Ci0g
ICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgY29udmVydCBhIHZvaWQiLCAiY29uc3RydWN0b3Ii
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci0vLyBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0byBzZWUgaWYgYSB2b2lkIHZhcmlhYmxlIGhhcyBi
ZWVuIGRlY2xhcmVkIGFuZCByYWlzZSBhbiBlcnJvciBtZXNzYWdlIGZvciBzdWNoIGEgY2FzZQot
Ly8KLS8vIHJldHVybnMgdHJ1ZSBpbiBjYXNlIG9mIGFuIGVycm9yCi0vLwotYm9vbCBUUGFyc2VD
b250ZXh0Ojp2b2lkRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUU3Ry
aW5nJiBpZGVudGlmaWVyLCBjb25zdCBUUHVibGljVHlwZSYgcHViVHlwZSkKLXsKLSAgICBpZiAo
cHViVHlwZS50eXBlID09IEVidFZvaWQpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwg
dXNlIG9mIHR5cGUgJ3ZvaWQnIiwgaWRlbnRpZmllci5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfSAKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8gVGhpcyBmdW5jdGlv
biBjaGVja3MgdG8gc2VlIGlmIHRoZSBub2RlIChmb3IgdGhlIGV4cHJlc3Npb24pIGNvbnRhaW5z
IGEgc2NhbGFyIGJvb2xlYW4gZXhwcmVzc2lvbiBvciBub3QKLS8vCi0vLyByZXR1cm5zIHRydWUg
aW4gY2FzZSBvZiBhbiBlcnJvcgotLy8KLWJvb2wgVFBhcnNlQ29udGV4dDo6Ym9vbEVycm9yQ2hl
Y2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVEludGVybVR5cGVkKiB0eXBlKQotewot
ICAgIGlmICh0eXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sIHx8IHR5cGUtPmlzQXJyYXko
KSB8fCB0eXBlLT5pc01hdHJpeCgpIHx8IHR5cGUtPmlzVmVjdG9yKCkpIHsKLSAgICAgICAgZXJy
b3IobGluZSwgImJvb2xlYW4gZXhwcmVzc2lvbiBleHBlY3RlZCIsICIiKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfSAKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8gVGhpcyBmdW5j
dGlvbiBjaGVja3MgdG8gc2VlIGlmIHRoZSBub2RlIChmb3IgdGhlIGV4cHJlc3Npb24pIGNvbnRh
aW5zIGEgc2NhbGFyIGJvb2xlYW4gZXhwcmVzc2lvbiBvciBub3QKLS8vCi0vLyByZXR1cm5zIHRy
dWUgaW4gY2FzZSBvZiBhbiBlcnJvcgotLy8KLWJvb2wgVFBhcnNlQ29udGV4dDo6Ym9vbEVycm9y
Q2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlKQot
ewotICAgIGlmIChwVHlwZS50eXBlICE9IEVidEJvb2wgfHwgcFR5cGUuYXJyYXkgfHwgcFR5cGUu
bWF0cml4IHx8IChwVHlwZS5zaXplID4gMSkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImJvb2xl
YW4gZXhwcmVzc2lvbiBleHBlY3RlZCIsICIiKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fSAKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBUUGFyc2VDb250ZXh0OjpzYW1wbGVy
RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5
cGUsIGNvbnN0IGNoYXIqIHJlYXNvbikKLXsKLSAgICBpZiAocFR5cGUudHlwZSA9PSBFYnRTdHJ1
Y3QpIHsKLSAgICAgICAgaWYgKGNvbnRhaW5zU2FtcGxlcigqcFR5cGUudXNlckRlZikpIHsKLSAg
ICAgICAgICAgIGVycm9yKGxpbmUsIHJlYXNvbiwgZ2V0QmFzaWNTdHJpbmcocFR5cGUudHlwZSks
ICIoc3RydWN0dXJlIGNvbnRhaW5zIGEgc2FtcGxlcikiKTsKLSAgICAgICAgCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0gZWxzZSBpZiAoSXNTYW1wbGVyKHBUeXBlLnR5cGUpKSB7Ci0gICAgICAgIGVycm9y
KGxpbmUsIHJlYXNvbiwgZ2V0QmFzaWNTdHJpbmcocFR5cGUudHlwZSkpOwotCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBUUGFyc2VD
b250ZXh0OjpzdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUs
IGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZSkKLXsKLSAgICBpZiAoKHBUeXBlLnF1YWxpZmllciA9
PSBFdnFWYXJ5aW5nSW4gfHwgcFR5cGUucXVhbGlmaWVyID09IEV2cVZhcnlpbmdPdXQgfHwgcFR5
cGUucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSkgJiYKLSAgICAgICAgcFR5cGUudHlwZSA9PSBF
YnRTdHJ1Y3QpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBiZSB1c2VkIHdpdGggYSBz
dHJ1Y3R1cmUiLCBnZXRRdWFsaWZpZXJTdHJpbmcocFR5cGUucXVhbGlmaWVyKSk7Ci0gICAgICAg
IAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAocFR5cGUucXVhbGlmaWVy
ICE9IEV2cVVuaWZvcm0gJiYgc2FtcGxlckVycm9yQ2hlY2sobGluZSwgcFR5cGUsICJzYW1wbGVy
cyBtdXN0IGJlIHVuaWZvcm0iKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLWJvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1ldGVyU2FtcGxlckVycm9yQ2hl
Y2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIGNvbnN0IFRU
eXBlJiB0eXBlKQotewotICAgIGlmICgocXVhbGlmaWVyID09IEV2cU91dCB8fCBxdWFsaWZpZXIg
PT0gRXZxSW5PdXQpICYmIAotICAgICAgICAgICAgIHR5cGUuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0
U3RydWN0ICYmIElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSkgewotICAgICAgICBlcnJv
cihsaW5lLCAic2FtcGxlcnMgY2Fubm90IGJlIG91dHB1dCBwYXJhbWV0ZXJzIiwgdHlwZS5nZXRC
YXNpY1N0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIFRQYXJzZUNvbnRleHQ6OmNvbnRhaW5zU2FtcGxlcihUVHlwZSYg
dHlwZSkKLXsKLSAgICBpZiAoSXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVj
dCkgewotICAgICAgICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSB0eXBlLmdldFN0cnVjdCgp
LT5maWVsZHMoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChjb250YWluc1NhbXBsZXIoKmZpZWxkc1tp
XS0+dHlwZSgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8KLS8vIERvIHNpemUgY2hlY2tpbmcgZm9y
IGFuIGFycmF5IHR5cGUncyBzaXplLgotLy8KLS8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMg
YW4gZXJyb3IuCi0vLwotYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVNpemVFcnJvckNoZWNrKGNv
bnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRJbnRlcm1UeXBlZCogZXhwciwgaW50JiBzaXplKQotewot
ICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiBjb25zdGFudCA9IGV4cHItPmdldEFzQ29uc3RhbnRV
bmlvbigpOwotICAgIGlmIChjb25zdGFudCA9PSAwIHx8IGNvbnN0YW50LT5nZXRCYXNpY1R5cGUo
KSAhPSBFYnRJbnQpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImFycmF5IHNpemUgbXVzdCBiZSBh
IGNvbnN0YW50IGludGVnZXIgZXhwcmVzc2lvbiIsICIiKTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgc2l6ZSA9IGNvbnN0YW50LT5nZXRJQ29uc3QoMCk7Ci0KLSAgICBpZiAo
c2l6ZSA8PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBw
b3NpdGl2ZSBpbnRlZ2VyIiwgIiIpOwotICAgICAgICBzaXplID0gMTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLwotLy8gU2VlIGlmIHRo
aXMgcXVhbGlmaWVyIGNhbiBiZSBhbiBhcnJheS4KLS8vCi0vLyBSZXR1cm5zIHRydWUgaWYgdGhl
cmUgaXMgYW4gZXJyb3IuCi0vLwotYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVF1YWxpZmllckVy
cm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFB1YmxpY1R5cGUgdHlwZSkKLXsKLSAg
ICBpZiAoKHR5cGUucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSkgfHwgKHR5cGUucXVhbGlmaWVy
ID09IEV2cUNvbnN0KSkgewotICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGRlY2xhcmUgYXJy
YXlzIG9mIHRoaXMgcXVhbGlmaWVyIiwgVFR5cGUodHlwZSkuZ2V0Q29tcGxldGVTdHJpbmcoKS5j
X3N0cigpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi0vLwotLy8gU2VlIGlmIHRoaXMgdHlwZSBjYW4gYmUgYW4gYXJyYXkuCi0vLwotLy8g
UmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGFuIGVycm9yLgotLy8KLWJvb2wgVFBhcnNlQ29udGV4
dDo6YXJyYXlUeXBlRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUHVibGljVHlw
ZSB0eXBlKQotewotICAgIC8vCi0gICAgLy8gQ2FuIHRoZSB0eXBlIGJlIGFuIGFycmF5PwotICAg
IC8vCi0gICAgaWYgKHR5cGUuYXJyYXkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBk
ZWNsYXJlIGFycmF5cyBvZiBhcnJheXMiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0cmluZygp
LmNfc3RyKCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLS8vCi0vLyBEbyBhbGwgdGhlIHNlbWFudGljIGNoZWNraW5nIGZvciBkZWNsYXJp
bmcgYW4gYXJyYXksIHdpdGggYW5kIAotLy8gd2l0aG91dCBhIHNpemUsIGFuZCBtYWtlIHRoZSBy
aWdodCBjaGFuZ2VzIHRvIHRoZSBzeW1ib2wgdGFibGUuCi0vLwotLy8gc2l6ZSA9PSAwIG1lYW5z
IG5vIHNwZWNpZmllZCBzaXplLgotLy8KLS8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4g
ZXJyb3IuCi0vLwotYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheUVycm9yQ2hlY2soY29uc3QgVFNv
dXJjZUxvYyYgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUgdHlwZSwgVFZh
cmlhYmxlKiYgdmFyaWFibGUpCi17Ci0gICAgLy8KLSAgICAvLyBEb24ndCBjaGVjayBmb3IgcmVz
ZXJ2ZWQgd29yZCB1c2UgdW50aWwgYWZ0ZXIgd2Uga25vdyBpdCdzIG5vdCBpbiB0aGUgc3ltYm9s
IHRhYmxlLAotICAgIC8vIGJlY2F1c2UgcmVzZXJ2ZWQgYXJyYXlzIGNhbiBiZSByZWRlY2xhcmVk
LgotICAgIC8vCi0KLSAgICBib29sIGJ1aWx0SW4gPSBmYWxzZTsgCi0gICAgYm9vbCBzYW1lU2Nv
cGUgPSBmYWxzZTsKLSAgICBUU3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKGlkZW50
aWZpZXIsICZidWlsdEluLCAmc2FtZVNjb3BlKTsKLSAgICBpZiAoc3ltYm9sID09IDAgfHwgIXNh
bWVTY29wZSkgewotICAgICAgICBpZiAocmVzZXJ2ZWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZp
ZXIpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIAotICAgICAgICB2YXJpYWJs
ZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50aWZpZXIsIFRUeXBlKHR5cGUpKTsKLQotICAgICAgICBp
ZiAodHlwZS5hcnJheVNpemUpCi0gICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldEFy
cmF5U2l6ZSh0eXBlLmFycmF5U2l6ZSk7Ci0KLSAgICAgICAgaWYgKCEgc3ltYm9sVGFibGUuaW5z
ZXJ0KCp2YXJpYWJsZSkpIHsKLSAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKLSAgICAgICAg
ICAgIGVycm9yKGxpbmUsICJJTlRFUk5BTCBFUlJPUiBpbnNlcnRpbmcgbmV3IHN5bWJvbCIsIGlk
ZW50aWZpZXIuY19zdHIoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghIHN5bWJvbC0+aXNWYXJpYWJsZSgpKSB7Ci0gICAg
ICAgICAgICBlcnJvcihsaW5lLCAidmFyaWFibGUgZXhwZWN0ZWQiLCBpZGVudGlmaWVyLmNfc3Ry
KCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXJp
YWJsZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+KHN5bWJvbCk7Ci0gICAgICAgIGlmICghIHZh
cmlhYmxlLT5nZXRUeXBlKCkuaXNBcnJheSgpKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAi
cmVkZWNsYXJpbmcgbm9uLWFycmF5IGFzIGFycmF5IiwgaWRlbnRpZmllci5jX3N0cigpKTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmICh2YXJpYWJsZS0+
Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpID4gMCkgewotICAgICAgICAgICAgZXJyb3IobGluZSwg
InJlZGVjbGFyYXRpb24gb2YgYXJyYXkgd2l0aCBzaXplIiwgaWRlbnRpZmllci5jX3N0cigpKTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBp
ZiAoISB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNhbWVFbGVtZW50VHlwZShUVHlwZSh0eXBlKSkpIHsK
LSAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlY2xhcmF0aW9uIG9mIGFycmF5IHdpdGggYSBk
aWZmZXJlbnQgdHlwZSIsIGlkZW50aWZpZXIuY19zdHIoKSk7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0eXBlLmFycmF5U2l6ZSkKLSAgICAgICAg
ICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2V0QXJyYXlTaXplKHR5cGUuYXJyYXlTaXplKTsKLSAg
ICB9IAotCi0gICAgaWYgKHZvaWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIsIHR5cGUpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8KLS8vIEVu
Zm9yY2Ugbm9uLWluaXRpYWxpemVyIHR5cGUvcXVhbGlmaWVyIHJ1bGVzLgotLy8KLS8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCi0vLwotYm9vbCBUUGFyc2VDb250ZXh0Ojpu
b25Jbml0Q29uc3RFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlk
ZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBib29sIGFycmF5KQotewotICAgIGlmICh0eXBl
LnF1YWxpZmllciA9PSBFdnFDb25zdCkKLSAgICB7Ci0gICAgICAgIC8vIE1ha2UgdGhlIHF1YWxp
ZmllciBtYWtlIHNlbnNlLgotICAgICAgICB0eXBlLnF1YWxpZmllciA9IEV2cVRlbXBvcmFyeTsK
LSAgICAgICAgCi0gICAgICAgIGlmIChhcnJheSkKLSAgICAgICAgewotICAgICAgICAgICAgZXJy
b3IobGluZSwgImFycmF5cyBtYXkgbm90IGJlIGRlY2xhcmVkIGNvbnN0YW50IHNpbmNlIHRoZXkg
Y2Fubm90IGJlIGluaXRpYWxpemVkIiwgaWRlbnRpZmllci5jX3N0cigpKTsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlIGlmICh0eXBlLmlzU3RydWN0dXJlQ29udGFpbmluZ0FycmF5cygpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAic3RydWN0dXJlcyBjb250YWluaW5nIGFy
cmF5cyBtYXkgbm90IGJlIGRlY2xhcmVkIGNvbnN0YW50IHNpbmNlIHRoZXkgY2Fubm90IGJlIGlu
aXRpYWxpemVkIiwgaWRlbnRpZmllci5jX3N0cigpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNl
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJ2YXJpYWJsZXMgd2l0aCBxdWFs
aWZpZXIgJ2NvbnN0JyBtdXN0IGJlIGluaXRpYWxpemVkIiwgaWRlbnRpZmllci5jX3N0cigpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotLy8KLS8vIERvIHNlbWFudGljIGNoZWNraW5nIGZvciBhIHZhcmlhYmxlIGRl
Y2xhcmF0aW9uIHRoYXQgaGFzIG5vIGluaXRpYWxpemVyLAotLy8gYW5kIHVwZGF0ZSB0aGUgc3lt
Ym9sIHRhYmxlLgotLy8KLS8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCi0v
LwotYm9vbCBUUGFyc2VDb250ZXh0Ojpub25Jbml0RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9j
JiBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSwgVFZhcmlhYmxl
KiYgdmFyaWFibGUpCi17Ci0gICAgaWYgKHJlc2VydmVkRXJyb3JDaGVjayhsaW5lLCBpZGVudGlm
aWVyKSkKLSAgICAgICAgcmVjb3ZlcigpOwotCi0gICAgdmFyaWFibGUgPSBuZXcgVFZhcmlhYmxl
KCZpZGVudGlmaWVyLCBUVHlwZSh0eXBlKSk7Ci0KLSAgICBpZiAoISBzeW1ib2xUYWJsZS5pbnNl
cnQoKnZhcmlhYmxlKSkgewotICAgICAgICBlcnJvcihsaW5lLCAicmVkZWZpbml0aW9uIiwgdmFy
aWFibGUtPmdldE5hbWUoKS5jX3N0cigpKTsKLSAgICAgICAgZGVsZXRlIHZhcmlhYmxlOwotICAg
ICAgICB2YXJpYWJsZSA9IDA7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlm
ICh2b2lkRXJyb3JDaGVjayhsaW5lLCBpZGVudGlmaWVyLCB0eXBlKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVFBhcnNlQ29udGV4dDo6cGFy
YW1FcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVy
LCBUUXVhbGlmaWVyIHBhcmFtUXVhbGlmaWVyLCBUVHlwZSogdHlwZSkKLXsgICAgCi0gICAgaWYg
KHF1YWxpZmllciAhPSBFdnFDb25zdCAmJiBxdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7Ci0g
ICAgICAgIGVycm9yKGxpbmUsICJxdWFsaWZpZXIgbm90IGFsbG93ZWQgb24gZnVuY3Rpb24gcGFy
YW1ldGVyIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHF1YWxpZmllcikpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgaWYgKHF1YWxpZmllciA9PSBFdnFDb25zdCAmJiBwYXJhbVF1YWxp
ZmllciAhPSBFdnFJbikgewotICAgICAgICBlcnJvcihsaW5lLCAicXVhbGlmaWVyIG5vdCBhbGxv
d2VkIHdpdGggIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHF1YWxpZmllciksIGdldFF1YWxpZmllclN0
cmluZyhwYXJhbVF1YWxpZmllcikpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICBpZiAocXVhbGlmaWVyID09IEV2cUNvbnN0KQotICAgICAgICB0eXBlLT5zZXRRdWFsaWZpZXIo
RXZxQ29uc3RSZWFkT25seSk7Ci0gICAgZWxzZQotICAgICAgICB0eXBlLT5zZXRRdWFsaWZpZXIo
cGFyYW1RdWFsaWZpZXIpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFRQYXJzZUNv
bnRleHQ6OmV4dGVuc2lvbkVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3Qg
VFN0cmluZyYgZXh0ZW5zaW9uKQotewotICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0
QmVoYXZpb3IgPSBleHRlbnNpb25CZWhhdmlvcigpOwotICAgIFRFeHRlbnNpb25CZWhhdmlvcjo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dEJlaGF2aW9yLmZpbmQoZXh0ZW5zaW9uLmNfc3RyKCkp
OwotICAgIGlmIChpdGVyID09IGV4dEJlaGF2aW9yLmVuZCgpKSB7Ci0gICAgICAgIGVycm9yKGxp
bmUsICJleHRlbnNpb24iLCBleHRlbnNpb24uY19zdHIoKSwgImlzIG5vdCBzdXBwb3J0ZWQiKTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIC8vIEluIEdMU0wgRVMsIGFuIGV4dGVu
c2lvbidzIGRlZmF1bHQgYmVoYXZpb3IgaXMgImRpc2FibGUiLgotICAgIGlmIChpdGVyLT5zZWNv
bmQgPT0gRUJoRGlzYWJsZSB8fCBpdGVyLT5zZWNvbmQgPT0gRUJoVW5kZWZpbmVkKSB7Ci0gICAg
ICAgIGVycm9yKGxpbmUsICJleHRlbnNpb24iLCBleHRlbnNpb24uY19zdHIoKSwgImlzIGRpc2Fi
bGVkIik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAoaXRlci0+c2Vjb25k
ID09IEVCaFdhcm4pIHsKLSAgICAgICAgd2FybmluZyhsaW5lLCAiZXh0ZW5zaW9uIiwgZXh0ZW5z
aW9uLmNfc3RyKCksICJpcyBiZWluZyB1c2VkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVFBhcnNlQ29udGV4dDo6c3VwcG9y
dHNFeHRlbnNpb24oY29uc3QgY2hhciogZXh0ZW5zaW9uKQotewotICAgIGNvbnN0IFRFeHRlbnNp
b25CZWhhdmlvciYgZXh0YmVoYXZpb3IgPSBleHRlbnNpb25CZWhhdmlvcigpOwotICAgIFRFeHRl
bnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dGJlaGF2aW9yLmZpbmQoZXh0
ZW5zaW9uKTsKLSAgICByZXR1cm4gKGl0ZXIgIT0gZXh0YmVoYXZpb3IuZW5kKCkpOwotfQotCi1i
b29sIFRQYXJzZUNvbnRleHQ6OmlzRXh0ZW5zaW9uRW5hYmxlZChjb25zdCBjaGFyKiBleHRlbnNp
b24pIGNvbnN0Ci17Ci0gICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRiZWhhdmlvciA9
IGV4dGVuc2lvbkJlaGF2aW9yKCk7Ci0gICAgVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVy
YXRvciBpdGVyID0gZXh0YmVoYXZpb3IuZmluZChleHRlbnNpb24pOwotCi0gICAgaWYgKGl0ZXIg
PT0gZXh0YmVoYXZpb3IuZW5kKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgcmV0dXJuIChpdGVyLT5zZWNvbmQgPT0gRUJoRW5hYmxlIHx8IGl0ZXItPnNlY29u
ZCA9PSBFQmhSZXF1aXJlKTsKLX0KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwotLy8g
Tm9uLUVycm9ycy4KLS8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotLy8KLS8vIExvb2sg
dXAgYSBmdW5jdGlvbiBuYW1lIGluIHRoZSBzeW1ib2wgdGFibGUsIGFuZCBtYWtlIHN1cmUgaXQg
aXMgYSBmdW5jdGlvbi4KLS8vCi0vLyBSZXR1cm4gdGhlIGZ1bmN0aW9uIHN5bWJvbCBpZiBmb3Vu
ZCwgb3RoZXJ3aXNlIDAuCi0vLwotY29uc3QgVEZ1bmN0aW9uKiBUUGFyc2VDb250ZXh0OjpmaW5k
RnVuY3Rpb24oY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVEZ1bmN0aW9uKiBjYWxsLCBib29sICpi
dWlsdEluKQotewotICAgIC8vIEZpcnN0IGZpbmQgYnkgdW5tYW5nbGVkIG5hbWUgdG8gY2hlY2sg
d2hldGhlciB0aGUgZnVuY3Rpb24gbmFtZSBoYXMgYmVlbgotICAgIC8vIGhpZGRlbiBieSBhIHZh
cmlhYmxlIG5hbWUgb3Igc3RydWN0IHR5cGVuYW1lLgotICAgIC8vIElmIGEgZnVuY3Rpb24gaXMg
Zm91bmQsIGNoZWNrIGZvciBvbmUgd2l0aCBhIG1hdGNoaW5nIGFyZ3VtZW50IGxpc3QuCi0gICAg
Y29uc3QgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChjYWxsLT5nZXROYW1lKCks
IGJ1aWx0SW4pOwotICAgIGlmIChzeW1ib2wgPT0gMCB8fCBzeW1ib2wtPmlzRnVuY3Rpb24oKSkg
ewotICAgICAgICBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKGNhbGwtPmdldE1hbmdsZWROYW1l
KCksIGJ1aWx0SW4pOwotICAgIH0KLQotICAgIGlmIChzeW1ib2wgPT0gMCkgewotICAgICAgICBl
cnJvcihsaW5lLCAibm8gbWF0Y2hpbmcgb3ZlcmxvYWRlZCBmdW5jdGlvbiBmb3VuZCIsIGNhbGwt
PmdldE5hbWUoKS5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYg
KCFzeW1ib2wtPmlzRnVuY3Rpb24oKSkgewotICAgICAgICBlcnJvcihsaW5lLCAiZnVuY3Rpb24g
bmFtZSBleHBlY3RlZCIsIGNhbGwtPmdldE5hbWUoKS5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFRGdW5jdGlvbio+KHN5
bWJvbCk7Ci19Ci0KLS8vCi0vLyBJbml0aWFsaXplcnMgc2hvdyB1cCBpbiBzZXZlcmFsIHBsYWNl
cyBpbiB0aGUgZ3JhbW1hci4gIEhhdmUgb25lIHNldCBvZgotLy8gY29kZSB0byBoYW5kbGUgdGhl
bSBoZXJlLgotLy8KLWJvb2wgVFBhcnNlQ29udGV4dDo6ZXhlY3V0ZUluaXRpYWxpemVyKGNvbnN0
IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiBwVHlw
ZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQq
IGluaXRpYWxpemVyLCBUSW50ZXJtTm9kZSomIGludGVybU5vZGUsIFRWYXJpYWJsZSogdmFyaWFi
bGUpCi17Ci0gICAgVFR5cGUgdHlwZSA9IFRUeXBlKHBUeXBlKTsKLQotICAgIGlmICh2YXJpYWJs
ZSA9PSAwKSB7Ci0gICAgICAgIGlmIChyZXNlcnZlZEVycm9yQ2hlY2sobGluZSwgaWRlbnRpZmll
cikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBpZiAodm9pZEVycm9yQ2hl
Y2sobGluZSwgaWRlbnRpZmllciwgcFR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICAgICAgLy8KLSAgICAgICAgLy8gYWRkIHZhcmlhYmxlIHRvIHN5bWJvbCB0YWJsZQotICAg
ICAgICAvLwotICAgICAgICB2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50aWZpZXIsIHR5
cGUpOwotICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgewotICAg
ICAgICAgICAgZXJyb3IobGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCku
Y19zdHIoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIC8vIGRvbid0
IGRlbGV0ZSB2YXJpYWJsZSwgaXQncyB1c2VkIGJ5IGVycm9yIHJlY292ZXJ5LCBhbmQgdGhlIHBv
b2wgCi0gICAgICAgICAgICAvLyBwb3Agd2lsbCB0YWtlIGNhcmUgb2YgdGhlIG1lbW9yeQotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBpZGVudGlmaWVyIG11c3QgYmUgb2YgdHlw
ZSBjb25zdGFudCwgYSBnbG9iYWwsIG9yIGEgdGVtcG9yYXJ5Ci0gICAgLy8KLSAgICBUUXVhbGlm
aWVyIHF1YWxpZmllciA9IHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCk7Ci0gICAg
aWYgKChxdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSAmJiAocXVhbGlmaWVyICE9IEV2cUdsb2Jh
bCkgJiYgKHF1YWxpZmllciAhPSBFdnFDb25zdCkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgIiBj
YW5ub3QgaW5pdGlhbGl6ZSB0aGlzIHR5cGUgb2YgcXVhbGlmaWVyICIsIHZhcmlhYmxlLT5nZXRU
eXBlKCkuZ2V0UXVhbGlmaWVyU3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgLy8KLSAgICAvLyB0ZXN0IGZvciBhbmQgcHJvcGFnYXRlIGNvbnN0YW50Ci0gICAgLy8K
LQotICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxQ29uc3QpIHsKLSAgICAgICAgaWYgKHF1YWxpZmll
ciAhPSBpbml0aWFsaXplci0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpKSB7Ci0gICAgICAgICAg
ICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07Ci0gICAgICAgICAgICBleHRyYUlu
Zm9TdHJlYW0gPDwgIiciIDw8IHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVTdHJpbmco
KSA8PCAiJyI7Ci0gICAgICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9T
dHJlYW0uc3RyKCk7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiIGFzc2lnbmluZyBub24tY29u
c3RhbnQgdG8iLCAiPSIsIGV4dHJhSW5mby5jX3N0cigpKTsKLSAgICAgICAgICAgIHZhcmlhYmxl
LT5nZXRUeXBlKCkuc2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAodHlwZSAhPSBpbml0aWFsaXplci0+Z2V0
VHlwZSgpKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiIG5vbi1tYXRjaGluZyB0eXBlcyBm
b3IgY29uc3QgaW5pdGlhbGl6ZXIgIiwgCi0gICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5
cGUoKS5nZXRRdWFsaWZpZXJTdHJpbmcoKSk7Ci0gICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlw
ZSgpLnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGluaXRpYWxpemVyLT5nZXRBc0NvbnN0YW50VW5pb24o
KSkgeyAKLSAgICAgICAgICAgIHZhcmlhYmxlLT5zaGFyZUNvbnN0UG9pbnRlcihpbml0aWFsaXpl
ci0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCkpOwotICAgICAg
ICB9IGVsc2UgaWYgKGluaXRpYWxpemVyLT5nZXRBc1N5bWJvbE5vZGUoKSkgewotICAgICAgICAg
ICAgY29uc3QgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChpbml0aWFsaXplci0+
Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpKTsKLSAgICAgICAgICAgIGNvbnN0IFRWYXJp
YWJsZSogdFZhciA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSo+KHN5bWJvbCk7Ci0KLSAg
ICAgICAgICAgIENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSB0VmFyLT5nZXRDb25zdFBvaW50
ZXIoKTsKLSAgICAgICAgICAgIHZhcmlhYmxlLT5zaGFyZUNvbnN0UG9pbnRlcihjb25zdEFycmF5
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJh
SW5mb1N0cmVhbTsKLSAgICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiJyIgPDwgdmFyaWFi
bGUtPmdldFR5cGUoKS5nZXRDb21wbGV0ZVN0cmluZygpIDw8ICInIjsKLSAgICAgICAgICAgIHN0
ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKLSAgICAgICAgICAg
IGVycm9yKGxpbmUsICIgY2Fubm90IGFzc2lnbiB0byIsICI9IiwgZXh0cmFJbmZvLmNfc3RyKCkp
OwotICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5zZXRRdWFsaWZpZXIoRXZxVGVtcG9y
YXJ5KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotIAotICAg
IGlmIChxdWFsaWZpZXIgIT0gRXZxQ29uc3QpIHsKLSAgICAgICAgVEludGVybVN5bWJvbCogaW50
ZXJtU3ltYm9sID0gaW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQo
KSwgdmFyaWFibGUtPmdldE5hbWUoKSwgdmFyaWFibGUtPmdldFR5cGUoKSwgbGluZSk7Ci0gICAg
ICAgIGludGVybU5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQXNzaWduKEVPcEluaXRpYWxpemUsIGlu
dGVybVN5bWJvbCwgaW5pdGlhbGl6ZXIsIGxpbmUpOwotICAgICAgICBpZiAoaW50ZXJtTm9kZSA9
PSAwKSB7Ci0gICAgICAgICAgICBhc3NpZ25FcnJvcihsaW5lLCAiPSIsIGludGVybVN5bWJvbC0+
Z2V0Q29tcGxldGVTdHJpbmcoKSwgaW5pdGlhbGl6ZXItPmdldENvbXBsZXRlU3RyaW5nKCkpOwot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgCi0gICAgICAg
IGludGVybU5vZGUgPSAwOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFRQYXJzZUNv
bnRleHQ6OmFyZUFsbENoaWxkQ29uc3QoVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUpCi17Ci0g
ICAgQVNTRVJUKGFnZ3JOb2RlICE9IE5VTEwpOwotICAgIGlmICghYWdnck5vZGUtPmlzQ29uc3Ry
dWN0b3IoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBhbGxDb25zdGFudCA9
IHRydWU7Ci0KLSAgICAvLyBjaGVjayBpZiBhbGwgdGhlIGNoaWxkIG5vZGVzIGFyZSBjb25zdGFu
dHMgc28gdGhhdCB0aGV5IGNhbiBiZSBpbnNlcnRlZCBpbnRvIAotICAgIC8vIHRoZSBwYXJlbnQg
bm9kZQotICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2UgPSBhZ2dyTm9kZS0+Z2V0U2VxdWVu
Y2UoKSA7Ci0gICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHAgPSBzZXF1ZW5jZS5i
ZWdpbigpOyBwICE9IHNlcXVlbmNlLmVuZCgpOyArK3ApIHsKLSAgICAgICAgaWYgKCEoKnApLT5n
ZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRVbmlvbigpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIHJldHVybiBhbGxDb25zdGFudDsKLX0KLQotLy8gVGhpcyBmdW5j
dGlvbiBpcyB1c2VkIHRvIHRlc3QgZm9yIHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgcGFyYW1ldGVy
cyBwYXNzZWQgdG8gdmFyaW91cyBjb25zdHJ1Y3RvciBmdW5jdGlvbnMKLS8vIGFuZCBhbHNvIGNv
bnZlcnQgdGhlbSB0byB0aGUgcmlnaHQgZGF0YXR5cGUgaWYgaXQgaXMgYWxsb3dlZCBhbmQgcmVx
dWlyZWQuIAotLy8KLS8vIFJldHVybnMgMCBmb3IgYW4gZXJyb3Igb3IgdGhlIGNvbnN0cnVjdGVk
IG5vZGUgKGFnZ3JlZ2F0ZSBvciB0eXBlZCkgZm9yIG5vIGVycm9yLgotLy8KLVRJbnRlcm1UeXBl
ZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RydWN0b3IoVEludGVybU5vZGUqIG5vZGUsIGNvbnN0
IFRUeXBlKiB0eXBlLCBUT3BlcmF0b3Igb3AsIFRGdW5jdGlvbiogZm5DYWxsLCBjb25zdCBUU291
cmNlTG9jJiBsaW5lKQotewotICAgIGlmIChub2RlID09IDApCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUgPSBub2RlLT5nZXRBc0FnZ3JlZ2F0ZSgp
OwotICAgIAotICAgIFRGaWVsZExpc3Q6OmNvbnN0X2l0ZXJhdG9yIG1lbWJlckZpZWxkczsKLSAg
ICBpZiAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0KQotICAgICAgICBtZW1iZXJGaWVsZHMgPSB0
eXBlLT5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCkuYmVnaW4oKTsKLSAgICAKLSAgICBUVHlwZSBlbGVt
ZW50VHlwZSA9ICp0eXBlOwotICAgIGlmICh0eXBlLT5pc0FycmF5KCkpCi0gICAgICAgIGVsZW1l
bnRUeXBlLmNsZWFyQXJyYXluZXNzKCk7Ci0KLSAgICBib29sIHNpbmdsZUFyZzsKLSAgICBpZiAo
YWdnck5vZGUpIHsKLSAgICAgICAgaWYgKGFnZ3JOb2RlLT5nZXRPcCgpICE9IEVPcE51bGwgfHwg
YWdnck5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDEpCi0gICAgICAgICAgICBzaW5nbGVB
cmcgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzaW5nbGVBcmcgPSBmYWxzZTsK
LSAgICB9IGVsc2UKLSAgICAgICAgc2luZ2xlQXJnID0gdHJ1ZTsKLQotICAgIFRJbnRlcm1UeXBl
ZCAqbmV3Tm9kZTsKLSAgICBpZiAoc2luZ2xlQXJnKSB7Ci0gICAgICAgIC8vIElmIHN0cnVjdHVy
ZSBjb25zdHJ1Y3RvciBvciBhcnJheSBjb25zdHJ1Y3RvciBpcyBiZWluZyBjYWxsZWQgCi0gICAg
ICAgIC8vIGZvciBvbmx5IG9uZSBwYXJhbWV0ZXIgaW5zaWRlIHRoZSBzdHJ1Y3R1cmUsIHdlIG5l
ZWQgdG8gY2FsbCBjb25zdHJ1Y3RTdHJ1Y3QgZnVuY3Rpb24gb25jZS4KLSAgICAgICAgaWYgKHR5
cGUtPmlzQXJyYXkoKSkKLSAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RTdHJ1Y3Qobm9k
ZSwgJmVsZW1lbnRUeXBlLCAxLCBub2RlLT5nZXRMaW5lKCksIGZhbHNlKTsKLSAgICAgICAgZWxz
ZSBpZiAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0KQotICAgICAgICAgICAgbmV3Tm9kZSA9IGNv
bnN0cnVjdFN0cnVjdChub2RlLCAoKm1lbWJlckZpZWxkcyktPnR5cGUoKSwgMSwgbm9kZS0+Z2V0
TGluZSgpLCBmYWxzZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5ld05vZGUgPSBjb25z
dHJ1Y3RCdWlsdEluKHR5cGUsIG9wLCBub2RlLCBub2RlLT5nZXRMaW5lKCksIGZhbHNlKTsKLQot
ICAgICAgICBpZiAobmV3Tm9kZSAmJiBuZXdOb2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpKSB7Ci0gICAg
ICAgICAgICBUSW50ZXJtVHlwZWQqIGNvbnN0Q29uc3RydWN0b3IgPSBmb2xkQ29uc3RDb25zdHJ1
Y3RvcihuZXdOb2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpLCAqdHlwZSk7Ci0gICAgICAgICAgICBpZiAo
Y29uc3RDb25zdHJ1Y3RvcikKLSAgICAgICAgICAgICAgICByZXR1cm4gY29uc3RDb25zdHJ1Y3Rv
cjsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBuZXdOb2RlOwotICAgIH0KLSAgICAKLSAg
ICAvLwotICAgIC8vIEhhbmRsZSBsaXN0IG9mIGFyZ3VtZW50cy4KLSAgICAvLwotICAgIFRJbnRl
cm1TZXF1ZW5jZSAmc2VxdWVuY2VWZWN0b3IgPSBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKSA7ICAg
IC8vIFN0b3JlcyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhcmFtZXRlciB0byB0aGUgY29u
c3RydWN0b3IKLSAgICAvLyBpZiB0aGUgc3RydWN0dXJlIGNvbnN0cnVjdG9yIGNvbnRhaW5zIG1v
cmUgdGhhbiBvbmUgcGFyYW1ldGVyLCB0aGVuIGNvbnN0cnVjdAotICAgIC8vIGVhY2ggcGFyYW1l
dGVyCi0gICAgCi0gICAgaW50IHBhcmFtQ291bnQgPSAwOyAgLy8ga2VlcHMgYSB0cmFjayBvZiB0
aGUgY29uc3RydWN0b3IgcGFyYW1ldGVyIG51bWJlciBiZWluZyBjaGVja2VkICAgIAotICAgIAot
ICAgIC8vIGZvciBlYWNoIHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0b3IgY2FsbCwgY2hlY2sg
dG8gc2VlIGlmIHRoZSByaWdodCB0eXBlIGlzIHBhc3NlZCBvciBjb252ZXJ0IHRoZW0gCi0gICAg
Ly8gdG8gdGhlIHJpZ2h0IHR5cGUgaWYgcG9zc2libGUgKGFuZCBhbGxvd2VkKS4KLSAgICAvLyBm
b3Igc3RydWN0dXJlIGNvbnN0cnVjdG9ycywganVzdCBjaGVjayBpZiB0aGUgcmlnaHQgdHlwZSBp
cyBwYXNzZWQsIG5vIGNvbnZlcnNpb24gaXMgYWxsb3dlZC4KLSAgICAKLSAgICBmb3IgKFRJbnRl
cm1TZXF1ZW5jZTo6aXRlcmF0b3IgcCA9IHNlcXVlbmNlVmVjdG9yLmJlZ2luKCk7IAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwICE9IHNlcXVlbmNlVmVjdG9yLmVuZCgpOyBw
KyssIHBhcmFtQ291bnQrKykgewotICAgICAgICBpZiAodHlwZS0+aXNBcnJheSgpKQotICAgICAg
ICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdFN0cnVjdCgqcCwgJmVsZW1lbnRUeXBlLCBwYXJhbUNv
dW50KzEsIG5vZGUtPmdldExpbmUoKSwgdHJ1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKG9wID09IEVP
cENvbnN0cnVjdFN0cnVjdCkKLSAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RTdHJ1Y3Qo
KnAsIG1lbWJlckZpZWxkc1twYXJhbUNvdW50XS0+dHlwZSgpLCBwYXJhbUNvdW50KzEsIG5vZGUt
PmdldExpbmUoKSwgdHJ1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5ld05vZGUgPSBj
b25zdHJ1Y3RCdWlsdEluKHR5cGUsIG9wLCAqcCwgbm9kZS0+Z2V0TGluZSgpLCB0cnVlKTsKLSAg
ICAgICAgCi0gICAgICAgIGlmIChuZXdOb2RlKSB7Ci0gICAgICAgICAgICAqcCA9IG5ld05vZGU7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBUSW50ZXJtVHlwZWQqIGNvbnN0cnVjdG9yID0gaW50
ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKGFnZ3JOb2RlLCBvcCwgbGluZSk7Ci0gICAg
VEludGVybVR5cGVkKiBjb25zdENvbnN0cnVjdG9yID0gZm9sZENvbnN0Q29uc3RydWN0b3IoY29u
c3RydWN0b3ItPmdldEFzQWdncmVnYXRlKCksICp0eXBlKTsKLSAgICBpZiAoY29uc3RDb25zdHJ1
Y3RvcikKLSAgICAgICAgcmV0dXJuIGNvbnN0Q29uc3RydWN0b3I7Ci0KLSAgICByZXR1cm4gY29u
c3RydWN0b3I7Ci19Ci0KLVRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6Zm9sZENvbnN0Q29u
c3RydWN0b3IoVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUsIGNvbnN0IFRUeXBlJiB0eXBlKQot
ewotICAgIGJvb2wgY2FuQmVGb2xkZWQgPSBhcmVBbGxDaGlsZENvbnN0KGFnZ3JOb2RlKTsKLSAg
ICBhZ2dyTm9kZS0+c2V0VHlwZSh0eXBlKTsKLSAgICBpZiAoY2FuQmVGb2xkZWQpIHsKLSAgICAg
ICAgYm9vbCByZXR1cm5WYWwgPSBmYWxzZTsKLSAgICAgICAgQ29uc3RhbnRVbmlvbiogdW5pb25B
cnJheSA9IG5ldyBDb25zdGFudFVuaW9uW3R5cGUuZ2V0T2JqZWN0U2l6ZSgpXTsKLSAgICAgICAg
aWYgKGFnZ3JOb2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAxKSAgewotICAgICAgICAgICAg
cmV0dXJuVmFsID0gaW50ZXJtZWRpYXRlLnBhcnNlQ29uc3RUcmVlKGFnZ3JOb2RlLT5nZXRMaW5l
KCksIGFnZ3JOb2RlLCB1bmlvbkFycmF5LCBhZ2dyTm9kZS0+Z2V0T3AoKSwgc3ltYm9sVGFibGUs
ICB0eXBlLCB0cnVlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJl
dHVyblZhbCA9IGludGVybWVkaWF0ZS5wYXJzZUNvbnN0VHJlZShhZ2dyTm9kZS0+Z2V0TGluZSgp
LCBhZ2dyTm9kZSwgdW5pb25BcnJheSwgYWdnck5vZGUtPmdldE9wKCksIHN5bWJvbFRhYmxlLCAg
dHlwZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJldHVyblZhbCkKLSAgICAgICAgICAgIHJl
dHVybiAwOwotCi0gICAgICAgIHJldHVybiBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1
bmlvbkFycmF5LCB0eXBlLCBhZ2dyTm9kZS0+Z2V0TGluZSgpKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gMDsKLX0KLQotLy8gRnVuY3Rpb24gZm9yIGNvbnN0cnVjdG9yIGltcGxlbWVudGF0aW9uLiBD
YWxscyBhZGRVbmFyeU1hdGggd2l0aCBhcHByb3ByaWF0ZSBFT3AgdmFsdWUKLS8vIGZvciB0aGUg
cGFyYW1ldGVyIHRvIHRoZSBjb25zdHJ1Y3RvciAocGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24pLiBF
c3NlbnRpYWxseSwgaXQgY29udmVydHMKLS8vIHRoZSBwYXJhbWV0ZXIgdHlwZXMgY29ycmVjdGx5
LiBJZiBhIGNvbnN0cnVjdG9yIGV4cGVjdHMgYW4gaW50IChsaWtlIGl2ZWMyKSBhbmQgaXMgcGFz
c2VkIGEgCi0vLyBmbG9hdCwgdGhlbiBmbG9hdCBpcyBjb252ZXJ0ZWQgdG8gaW50LgotLy8KLS8v
IFJldHVybnMgMCBmb3IgYW4gZXJyb3Igb3IgdGhlIGNvbnN0cnVjdGVkIG5vZGUuCi0vLwotVElu
dGVybVR5cGVkKiBUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RCdWlsdEluKGNvbnN0IFRUeXBlKiB0
eXBlLCBUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBub2RlLCBjb25zdCBUU291cmNlTG9jJiBs
aW5lLCBib29sIHN1YnNldCkKLXsKLSAgICBUSW50ZXJtVHlwZWQqIG5ld05vZGU7Ci0gICAgVE9w
ZXJhdG9yIGJhc2ljT3A7Ci0KLSAgICAvLwotICAgIC8vIEZpcnN0LCBjb252ZXJ0IHR5cGVzIGFz
IG5lZWRlZC4KLSAgICAvLwotICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNlIEVPcENvbnN0cnVj
dFZlYzI6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMzOgotICAgIGNhc2UgRU9wQ29uc3RydWN0
VmVjNDoKLSAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RN
YXQzOgotICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0NDoKLSAgICBjYXNlIEVPcENvbnN0cnVjdEZs
b2F0OgotICAgICAgICBiYXNpY09wID0gRU9wQ29uc3RydWN0RmxvYXQ7Ci0gICAgICAgIGJyZWFr
OwotCi0gICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMjoKLSAgICBjYXNlIEVPcENvbnN0cnVjdElW
ZWMzOgotICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzQ6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RJ
bnQ6Ci0gICAgICAgIGJhc2ljT3AgPSBFT3BDb25zdHJ1Y3RJbnQ7Ci0gICAgICAgIGJyZWFrOwot
Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMjoKLSAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMz
OgotICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29s
OgotICAgICAgICBiYXNpY09wID0gRU9wQ29uc3RydWN0Qm9vbDsKLSAgICAgICAgYnJlYWs7Ci0K
LSAgICBkZWZhdWx0OgotICAgICAgICBlcnJvcihsaW5lLCAidW5zdXBwb3J0ZWQgY29uc3RydWN0
aW9uIiwgIiIpOwotICAgICAgICByZWNvdmVyKCk7Ci0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotICAgIG5ld05vZGUgPSBpbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKGJhc2ljT3AsIG5vZGUs
IG5vZGUtPmdldExpbmUoKSwgc3ltYm9sVGFibGUpOwotICAgIGlmIChuZXdOb2RlID09IDApIHsK
LSAgICAgICAgZXJyb3IobGluZSwgImNhbid0IGNvbnZlcnQiLCAiY29uc3RydWN0b3IiKTsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBOb3csIGlmIHRoZXJlIHN0
aWxsIGlzbid0IGFuIG9wZXJhdGlvbiB0byBkbyB0aGUgY29uc3RydWN0aW9uLCBhbmQgd2UgbmVl
ZCBvbmUsIGFkZCBvbmUuCi0gICAgLy8KLSAgICAKLSAgICAvLyBPdGhlcndpc2UsIHNraXAgb3V0
IGVhcmx5LgotICAgIGlmIChzdWJzZXQgfHwgKG5ld05vZGUgIT0gbm9kZSAmJiBuZXdOb2RlLT5n
ZXRUeXBlKCkgPT0gKnR5cGUpKQotICAgICAgICByZXR1cm4gbmV3Tm9kZTsKLQotICAgIC8vIHNl
dEFnZ3JlZ2F0ZU9wZXJhdG9yIHdpbGwgaW5zZXJ0IGEgbmV3IG5vZGUgZm9yIHRoZSBjb25zdHJ1
Y3RvciwgYXMgbmVlZGVkLgotICAgIHJldHVybiBpbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3Bl
cmF0b3IobmV3Tm9kZSwgb3AsIGxpbmUpOwotfQotCi0vLyBUaGlzIGZ1bmN0aW9uIHRlc3RzIGZv
ciB0aGUgdHlwZSBvZiB0aGUgcGFyYW1ldGVycyB0byB0aGUgc3RydWN0dXJlcyBjb25zdHJ1Y3Rv
cnMuIFJhaXNlcwotLy8gYW4gZXJyb3IgbWVzc2FnZSBpZiB0aGUgZXhwZWN0ZWQgdHlwZSBkb2Vz
IG5vdCBtYXRjaCB0aGUgcGFyYW1ldGVyIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IuCi0vLwot
Ly8gUmV0dXJucyAwIGZvciBhbiBlcnJvciBvciB0aGUgaW5wdXQgbm9kZSBpdHNlbGYgaWYgdGhl
IGV4cGVjdGVkIGFuZCB0aGUgZ2l2ZW4gcGFyYW1ldGVyIHR5cGVzIG1hdGNoLgotLy8KLVRJbnRl
cm1UeXBlZCogVFBhcnNlQ29udGV4dDo6Y29uc3RydWN0U3RydWN0KFRJbnRlcm1Ob2RlKiBub2Rl
LCBUVHlwZSogdHlwZSwgaW50IHBhcmFtQ291bnQsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGJv
b2wgc3Vic2V0KQotewotICAgIGlmICgqdHlwZSA9PSBub2RlLT5nZXRBc1R5cGVkKCktPmdldFR5
cGUoKSkgewotICAgICAgICBpZiAoc3Vic2V0KQotICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmdl
dEFzVHlwZWQoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGludGVybWVkaWF0
ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcihub2RlLT5nZXRBc1R5cGVkKCksIEVPcENvbnN0cnVjdFN0
cnVjdCwgbGluZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0
cmFJbmZvU3RyZWFtOwotICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImNhbm5vdCBjb252ZXJ0
IHBhcmFtZXRlciAiIDw8IHBhcmFtQ291bnQgCi0gICAgICAgICAgICAgICAgICAgICAgICA8PCAi
IGZyb20gJyIgPDwgbm9kZS0+Z2V0QXNUeXBlZCgpLT5nZXRUeXBlKCkuZ2V0QmFzaWNTdHJpbmco
KQotICAgICAgICAgICAgICAgICAgICAgICAgPDwgIicgdG8gJyIgPDwgdHlwZS0+Z2V0QmFzaWNT
dHJpbmcoKSA8PCAiJyI7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5m
b1N0cmVhbS5zdHIoKTsKLSAgICAgICAgZXJyb3IobGluZSwgIiIsICJjb25zdHJ1Y3RvciIsIGV4
dHJhSW5mby5jX3N0cigpKTsKLSAgICAgICAgcmVjb3ZlcigpOwotICAgIH0KLQotICAgIHJldHVy
biAwOwotfQotCi0vLwotLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0cmVlIHJlcHJlc2Vu
dGF0aW9uIGZvciB0aGUgdmVjdG9yIGZpZWxkKHMpIGJlaW5nIGFjY2Vzc2VkIGZyb20gY29udGFu
dCB2ZWN0b3IuCi0vLyBJZiBvbmx5IG9uZSBjb21wb25lbnQgb2YgdmVjdG9yIGlzIGFjY2Vzc2Vk
ICh2Lnggb3IgdlswXSB3aGVyZSB2IGlzIGEgY29udGFudCB2ZWN0b3IpLCB0aGVuIGEgY29udGFu
dCBub2RlIGlzCi0vLyByZXR1cm5lZCwgZWxzZSBhbiBhZ2dyZWdhdGUgbm9kZSBpcyByZXR1cm5l
ZCAoZm9yIHYueHkpLiBUaGUgaW5wdXQgdG8gdGhpcyBmdW5jdGlvbiBjb3VsZCBlaXRoZXIgYmUg
dGhlIHN5bWJvbAotLy8gbm9kZSBvciBpdCBjb3VsZCBiZSB0aGUgaW50ZXJtZWRpYXRlIHRyZWUg
cmVwcmVzZW50YXRpb24gb2YgYWNjZXNzaW5nIGZpZWxkcyBpbiBhIGNvbnN0YW50IHN0cnVjdHVy
ZSBvciBjb2x1bW4gb2YgCi0vLyBhIGNvbnN0YW50IG1hdHJpeC4KLS8vCi1USW50ZXJtVHlwZWQq
IFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0VmVjdG9yTm9kZShUVmVjdG9yRmllbGRzJiBmaWVsZHMs
IFRJbnRlcm1UeXBlZCogbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKLXsKLSAgICBUSW50
ZXJtVHlwZWQqIHR5cGVkTm9kZTsKLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0
YW50Tm9kZSA9IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOwotCi0gICAgQ29uc3RhbnRVbmlv
biAqdW5pb25BcnJheTsKLSAgICBpZiAodGVtcENvbnN0YW50Tm9kZSkgewotICAgICAgICB1bmlv
bkFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKLQotICAg
ICAgICBpZiAoIXVuaW9uQXJyYXkpIHsKLSAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAg
ICB9Ci0gICAgfSBlbHNlIHsgLy8gVGhlIG5vZGUgaGFzIHRvIGJlIGVpdGhlciBhIHN5bWJvbCBu
b2RlIG9yIGFuIGFnZ3JlZ2F0ZSBub2RlIG9yIGEgdGVtcENvbnN0YW50IG5vZGUsIGVsc2UsIGl0
cyBhbiBlcnJvcgotICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSB2
ZWN0b3IiLCAiRXJyb3IiKTsKLSAgICAgICAgcmVjb3ZlcigpOwotCi0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLQotICAgIENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvbltmaWVsZHMubnVtXTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLm51bTsg
aSsrKSB7Ci0gICAgICAgIGlmIChmaWVsZHMub2Zmc2V0c1tpXSA+PSBub2RlLT5nZXRUeXBlKCku
Z2V0Tm9taW5hbFNpemUoKSkgewotICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJ
bmZvU3RyZWFtOwotICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJ2ZWN0b3IgZmllbGQg
c2VsZWN0aW9uIG91dCBvZiByYW5nZSAnIiA8PCBmaWVsZHMub2Zmc2V0c1tpXSA8PCAiJyI7Ci0g
ICAgICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7
Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7Ci0g
ICAgICAgICAgICByZWNvdmVyKCk7Ci0gICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDA7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5
W2ZpZWxkcy5vZmZzZXRzW2ldXTsKLQotICAgIH0gCi0gICAgdHlwZWROb2RlID0gaW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24oY29uc3RBcnJheSwgbm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsK
LSAgICByZXR1cm4gdHlwZWROb2RlOwotfQotCi0vLwotLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5z
IHRoZSBjb2x1bW4gYmVpbmcgYWNjZXNzZWQgZnJvbSBhIGNvbnN0YW50IG1hdHJpeC4gVGhlIHZh
bHVlcyBhcmUgcmV0cmlldmVkIGZyb20KLS8vIHRoZSBzeW1ib2wgdGFibGUgYW5kIHBhcnNlLXRy
ZWUgaXMgYnVpbHQgZm9yIGEgdmVjdG9yIChlYWNoIGNvbHVtbiBvZiBhIG1hdHJpeCBpcyBhIHZl
Y3RvcikuIFRoZSBpbnB1dCAKLS8vIHRvIHRoZSBmdW5jdGlvbiBjb3VsZCBlaXRoZXIgYmUgYSBz
eW1ib2wgbm9kZSAobVswXSB3aGVyZSBtIGlzIGEgY29uc3RhbnQgbWF0cml4KXRoYXQgcmVwcmVz
ZW50cyBhIAotLy8gY29uc3RhbnQgbWF0cml4IG9yIGl0IGNvdWxkIGJlIHRoZSB0cmVlIHJlcHJl
c2VudGF0aW9uIG9mIHRoZSBjb25zdGFudCBtYXRyaXggKHMubTFbMF0gd2hlcmUgcyBpcyBhIGNv
bnN0YW50IHN0cnVjdHVyZSkKLS8vCi1USW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENv
bnN0TWF0cml4Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBlZCogbm9kZSwgY29uc3QgVFNvdXJj
ZUxvYyYgbGluZSkKLXsKLSAgICBUSW50ZXJtVHlwZWQqIHR5cGVkTm9kZTsKLSAgICBUSW50ZXJt
Q29uc3RhbnRVbmlvbiogdGVtcENvbnN0YW50Tm9kZSA9IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlv
bigpOwotCi0gICAgaWYgKGluZGV4ID49IG5vZGUtPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgp
KSB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKLSAgICAgICAg
ZXh0cmFJbmZvU3RyZWFtIDw8ICJtYXRyaXggZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAn
IiA8PCBpbmRleCA8PCAiJyI7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJh
SW5mb1N0cmVhbS5zdHIoKTsKLSAgICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwgZXh0cmFJbmZv
LmNfc3RyKCkpOwotICAgICAgICByZWNvdmVyKCk7Ci0gICAgICAgIGluZGV4ID0gMDsKLSAgICB9
Ci0KLSAgICBpZiAodGVtcENvbnN0YW50Tm9kZSkgewotICAgICAgICAgQ29uc3RhbnRVbmlvbiog
dW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7Ci0g
ICAgICAgICBpbnQgc2l6ZSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXROb21pbmFs
U2l6ZSgpOwotICAgICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5p
b24oJnVuaW9uQXJyYXlbc2l6ZSppbmRleF0sIHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKSwg
bGluZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQg
aW50byB0aGUgbWF0cml4IiwgIkVycm9yIik7Ci0gICAgICAgIHJlY292ZXIoKTsKLQotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHlwZWROb2RlOwotfQotCi0KLS8vCi0v
LyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gZWxlbWVudCBvZiBhbiBhcnJheSBhY2Nlc3NlZCBm
cm9tIGEgY29uc3RhbnQgYXJyYXkuIFRoZSB2YWx1ZXMgYXJlIHJldHJpZXZlZCBmcm9tCi0vLyB0
aGUgc3ltYm9sIHRhYmxlIGFuZCBwYXJzZS10cmVlIGlzIGJ1aWx0IGZvciB0aGUgdHlwZSBvZiB0
aGUgZWxlbWVudC4gVGhlIGlucHV0IAotLy8gdG8gdGhlIGZ1bmN0aW9uIGNvdWxkIGVpdGhlciBi
ZSBhIHN5bWJvbCBub2RlIChhWzBdIHdoZXJlIGEgaXMgYSBjb25zdGFudCBhcnJheSl0aGF0IHJl
cHJlc2VudHMgYSAKLS8vIGNvbnN0YW50IGFycmF5IG9yIGl0IGNvdWxkIGJlIHRoZSB0cmVlIHJl
cHJlc2VudGF0aW9uIG9mIHRoZSBjb25zdGFudCBhcnJheSAocy5hMVswXSB3aGVyZSBzIGlzIGEg
Y29uc3RhbnQgc3RydWN0dXJlKQotLy8KLVRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRk
Q29uc3RBcnJheU5vZGUoaW50IGluZGV4LCBUSW50ZXJtVHlwZWQqIG5vZGUsIGNvbnN0IFRTb3Vy
Y2VMb2MmIGxpbmUpCi17Ci0gICAgVEludGVybVR5cGVkKiB0eXBlZE5vZGU7Ci0gICAgVEludGVy
bUNvbnN0YW50VW5pb24qIHRlbXBDb25zdGFudE5vZGUgPSBub2RlLT5nZXRBc0NvbnN0YW50VW5p
b24oKTsKLSAgICBUVHlwZSBhcnJheUVsZW1lbnRUeXBlID0gbm9kZS0+Z2V0VHlwZSgpOwotICAg
IGFycmF5RWxlbWVudFR5cGUuY2xlYXJBcnJheW5lc3MoKTsKLQotICAgIGlmIChpbmRleCA+PSBu
b2RlLT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkpIHsKLSAgICAgICAgc3RkOjpzdHJpbmdzdHJl
YW0gZXh0cmFJbmZvU3RyZWFtOwotICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImFycmF5IGZp
ZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIgPDwgaW5kZXggPDwgIiciOwotICAgICAgICBz
dGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7Ci0gICAgICAgIGVy
cm9yKGxpbmUsICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsKLSAgICAgICAgcmVjb3Zlcigp
OwotICAgICAgICBpbmRleCA9IDA7Ci0gICAgfQotCi0gICAgaWYgKHRlbXBDb25zdGFudE5vZGUp
IHsKLSAgICAgICAgIHNpemVfdCBhcnJheUVsZW1lbnRTaXplID0gYXJyYXlFbGVtZW50VHlwZS5n
ZXRPYmplY3RTaXplKCk7Ci0gICAgICAgICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gdGVt
cENvbnN0YW50Tm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKLSAgICAgICAgIHR5cGVkTm9k
ZSA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKCZ1bmlvbkFycmF5W2FycmF5RWxlbWVu
dFNpemUgKiBpbmRleF0sIHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKSwgbGluZSk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgYXJy
YXkiLCAiRXJyb3IiKTsKLSAgICAgICAgcmVjb3ZlcigpOwotCi0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KLQotICAgIHJldHVybiB0eXBlZE5vZGU7Ci19Ci0KLQotLy8KLS8vIFRoaXMgZnVuY3Rp
b24gcmV0dXJucyB0aGUgdmFsdWUgb2YgYSBwYXJ0aWN1bGFyIGZpZWxkIGluc2lkZSBhIGNvbnN0
YW50IHN0cnVjdHVyZSBmcm9tIHRoZSBzeW1ib2wgdGFibGUuIAotLy8gSWYgdGhlcmUgaXMgYW4g
ZW1iZWRkZWQvbmVzdGVkIHN0cnVjdCwgaXQgYXBwcm9wcmlhdGVseSBjYWxscyBhZGRDb25zdFN0
cnVjdE5lc3RlZCBvciBhZGRDb25zdFN0cnVjdEZyb21BZ2dyCi0vLyBmdW5jdGlvbiBhbmQgcmV0
dXJucyB0aGUgcGFyc2UtdHJlZSB3aXRoIHRoZSB2YWx1ZXMgb2YgdGhlIGVtYmVkZGVkL25lc3Rl
ZCBzdHJ1Y3QuCi0vLwotVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdFN0cnVj
dChUU3RyaW5nJiBpZGVudGlmaWVyLCBUSW50ZXJtVHlwZWQqIG5vZGUsIGNvbnN0IFRTb3VyY2VM
b2MmIGxpbmUpCi17Ci0gICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRzID0gbm9kZS0+Z2V0VHlw
ZSgpLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKLQotICAgIHNpemVfdCBpbnN0YW5jZVNpemUgPSAw
OwotICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBmaWVsZHMuc2l6ZSgpOyArK2lu
ZGV4KSB7Ci0gICAgICAgIGlmIChmaWVsZHNbaW5kZXhdLT5uYW1lKCkgPT0gaWRlbnRpZmllcikg
ewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbnN0
YW5jZVNpemUgKz0gZmllbGRzW2luZGV4XS0+dHlwZSgpLT5nZXRPYmplY3RTaXplKCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBUSW50ZXJtVHlwZWQqIHR5cGVkTm9kZSA9IDA7Ci0gICAgVElu
dGVybUNvbnN0YW50VW5pb24qIHRlbXBDb25zdGFudE5vZGUgPSBub2RlLT5nZXRBc0NvbnN0YW50
VW5pb24oKTsKLSAgICBpZiAodGVtcENvbnN0YW50Tm9kZSkgewotICAgICAgICAgQ29uc3RhbnRV
bmlvbiogY29uc3RBcnJheSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVy
KCk7Ci0KLSAgICAgICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9u
KGNvbnN0QXJyYXkraW5zdGFuY2VTaXplLCB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCksIGxp
bmUpOyAvLyB0eXBlIHdpbGwgYmUgY2hhbmdlZCBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbgotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIHN0
cnVjdHVyZSIsICJFcnJvciIpOwotICAgICAgICByZWNvdmVyKCk7Ci0KLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIHR5cGVkTm9kZTsKLX0KLQotYm9vbCBUUGFyc2VDb250
ZXh0OjplbnRlclN0cnVjdERlY2xhcmF0aW9uKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0
IFRTdHJpbmcmIGlkZW50aWZpZXIpCi17Ci0gICAgKytzdHJ1Y3ROZXN0aW5nTGV2ZWw7Ci0KLSAg
ICAvLyBFbWJlZGRlZCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgcGVy
IEdMU0wgRVMgc3BlYy4KLSAgICAvLyBUaGV5IGFyZW4ndCBhbGxvd2VkIGluIEdMU0wgZWl0aGVy
LCBidXQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcyBoZXJlCi0gICAgLy8gc28gd2UgZG9uJ3QgcmVs
eSBvbiB0aGUgR0xTTCBjb21waWxlciB0byBjYXRjaCBpdC4KLSAgICBpZiAoc3RydWN0TmVzdGlu
Z0xldmVsID4gMSkgewotICAgICAgICBlcnJvcihsaW5lLCAiIiwgIkVtYmVkZGVkIHN0cnVjdCBk
ZWZpbml0aW9ucyBhcmUgbm90IGFsbG93ZWQiKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFRQYXJzZUNvbnRleHQ6OmV4aXRTdHJ1
Y3REZWNsYXJhdGlvbigpCi17Ci0gICAgLS1zdHJ1Y3ROZXN0aW5nTGV2ZWw7Ci19Ci0KLW5hbWVz
cGFjZSB7Ci0KLWNvbnN0IGludCBrV2ViR0xNYXhTdHJ1Y3ROZXN0aW5nID0gNDsKLQotfSAgLy8g
bmFtZXNwYWNlCi0KLWJvb2wgVFBhcnNlQ29udGV4dDo6c3RydWN0TmVzdGluZ0Vycm9yQ2hlY2so
Y29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVEZpZWxkJiBmaWVsZCkKLXsKLSAgICBpZiAo
IWlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIGlmIChmaWVsZC50eXBlKCktPmdldEJhc2ljVHlwZSgpICE9IEVidFN0cnVj
dCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gV2UncmUgYWxyZWFk
eSBpbnNpZGUgYSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBhdCB0aGlzIHBvaW50LCBzbyBhZGQKLSAg
ICAvLyBvbmUgdG8gdGhlIGZpZWxkJ3Mgc3RydWN0IG5lc3RpbmcuCi0gICAgaWYgKDEgKyBmaWVs
ZC50eXBlKCktPmdldERlZXBlc3RTdHJ1Y3ROZXN0aW5nKCkgPiBrV2ViR0xNYXhTdHJ1Y3ROZXN0
aW5nKSB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHJlYXNvblN0cmVhbTsKLSAgICAgICAg
cmVhc29uU3RyZWFtIDw8ICJSZWZlcmVuY2Ugb2Ygc3RydWN0IHR5cGUgIgotICAgICAgICAgICAg
ICAgICAgICAgPDwgZmllbGQudHlwZSgpLT5nZXRTdHJ1Y3QoKS0+bmFtZSgpLmNfc3RyKCkKLSAg
ICAgICAgICAgICAgICAgICAgIDw8ICIgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgbmVzdGluZyBs
ZXZlbCBvZiAiCi0gICAgICAgICAgICAgICAgICAgICA8PCBrV2ViR0xNYXhTdHJ1Y3ROZXN0aW5n
OwotICAgICAgICBzdGQ6OnN0cmluZyByZWFzb24gPSByZWFzb25TdHJlYW0uc3RyKCk7Ci0gICAg
ICAgIGVycm9yKGxpbmUsIHJlYXNvbi5jX3N0cigpLCBmaWVsZC5uYW1lKCkuY19zdHIoKSwgIiIp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LS8vCi0vLyBQYXJzZSBhbiBhcnJheSBpbmRleCBleHByZXNzaW9uCi0vLwotVEludGVybVR5cGVk
KiBUUGFyc2VDb250ZXh0OjphZGRJbmRleEV4cHJlc3Npb24oVEludGVybVR5cGVkICpiYXNlRXhw
cmVzc2lvbiwgY29uc3QgVFNvdXJjZUxvYyYgbG9jYXRpb24sIFRJbnRlcm1UeXBlZCAqaW5kZXhF
eHByZXNzaW9uKQotewotICAgIFRJbnRlcm1UeXBlZCAqaW5kZXhlZEV4cHJlc3Npb24gPSBOVUxM
OwotCi0gICAgaWYgKCFiYXNlRXhwcmVzc2lvbi0+aXNBcnJheSgpICYmICFiYXNlRXhwcmVzc2lv
bi0+aXNNYXRyaXgoKSAmJiAhYmFzZUV4cHJlc3Npb24tPmlzVmVjdG9yKCkpCi0gICAgewotICAg
ICAgICBpZiAoYmFzZUV4cHJlc3Npb24tPmdldEFzU3ltYm9sTm9kZSgpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBlcnJvcihsb2NhdGlvbiwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBh
cnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwgYmFzZUV4cHJlc3Npb24tPmdldEFzU3ltYm9sTm9k
ZSgpLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGVycm9yKGxvY2F0aW9uLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBv
ZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAiZXhwcmVzc2lvbiIpOwotICAgICAg
ICB9Ci0gICAgICAgIHJlY292ZXIoKTsKLSAgICB9Ci0KLSAgICBpZiAoaW5kZXhFeHByZXNzaW9u
LT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkKLSAgICB7Ci0gICAgICAgIGludCBpbmRleCA9
IGluZGV4RXhwcmVzc2lvbi0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldElDb25zdCgwKTsKLSAg
ICAgICAgaWYgKGluZGV4IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgc3RkOjpzdHJpbmdz
dHJlYW0gaW5mb1N0cmVhbTsKLSAgICAgICAgICAgIGluZm9TdHJlYW0gPDwgaW5kZXg7Ci0gICAg
ICAgICAgICBzdGQ6OnN0cmluZyBpbmZvID0gaW5mb1N0cmVhbS5zdHIoKTsKLSAgICAgICAgICAg
IGVycm9yKGxvY2F0aW9uLCAibmVnYXRpdmUgaW5kZXgiLCBpbmZvLmNfc3RyKCkpOwotICAgICAg
ICAgICAgcmVjb3ZlcigpOwotICAgICAgICAgICAgaW5kZXggPSAwOwotICAgICAgICB9Ci0gICAg
ICAgIGlmIChiYXNlRXhwcmVzc2lvbi0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNv
bnN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoYmFzZUV4cHJlc3Npb24tPmlzQXJyYXko
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBjb25zdGFudCBmb2xkaW5nIGZv
ciBhcnJheXMKLSAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGFkZENvbnN0QXJy
YXlOb2RlKGluZGV4LCBiYXNlRXhwcmVzc2lvbiwgbG9jYXRpb24pOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZSBpZiAoYmFzZUV4cHJlc3Npb24tPmlzVmVjdG9yKCkpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gY29uc3RhbnQgZm9sZGluZyBmb3IgdmVjdG9ycwot
ICAgICAgICAgICAgICAgIFRWZWN0b3JGaWVsZHMgZmllbGRzOwotICAgICAgICAgICAgICAgIGZp
ZWxkcy5udW0gPSAxOwotICAgICAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzWzBdID0gaW5kZXg7
IC8vIG5lZWQgdG8gZG8gaXQgdGhpcyB3YXkgYmVjYXVzZSB2Lnh5IHNlbmRzIGZpZWxkcyBpbnRl
Z2VyIGFycmF5Ci0gICAgICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBhZGRDb25zdFZl
Y3Rvck5vZGUoZmllbGRzLCBiYXNlRXhwcmVzc2lvbiwgbG9jYXRpb24pOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZSBpZiAoYmFzZUV4cHJlc3Npb24tPmlzTWF0cml4KCkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gY29uc3RhbnQgZm9sZGluZyBmb3IgbWF0cmlj
ZXMKLSAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGFkZENvbnN0TWF0cml4Tm9k
ZShpbmRleCwgYmFzZUV4cHJlc3Npb24sIGxvY2F0aW9uKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChiYXNlRXhwcmVz
c2lvbi0+aXNBcnJheSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChpbmRl
eCA+PSBiYXNlRXhwcmVzc2lvbi0+Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZv
U3RyZWFtOwotICAgICAgICAgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImFycmF5IGlu
ZGV4IG91dCBvZiByYW5nZSAnIiA8PCBpbmRleCA8PCAiJyI7Ci0gICAgICAgICAgICAgICAgICAg
IHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKLSAgICAgICAg
ICAgICAgICAgICAgZXJyb3IobG9jYXRpb24sICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsK
LSAgICAgICAgICAgICAgICAgICAgcmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICAgICBpbmRl
eCA9IGJhc2VFeHByZXNzaW9uLT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkgLSAxOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChiYXNlRXhwcmVzc2lvbi0+Z2V0
UXVhbGlmaWVyKCkgPT0gRXZxRnJhZ0RhdGEgJiYgaW5kZXggPiAwICYmICFpc0V4dGVuc2lvbkVu
YWJsZWQoIkdMX0VYVF9kcmF3X2J1ZmZlcnMiKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIGVycm9yKGxvY2F0aW9uLCAiIiwgIlsiLCAiYXJyYXkgaW5kZXhlcyBmb3Ig
Z2xfRnJhZ0RhdGEgbXVzdCBiZSB6ZXJvIHdoZW4gR0xfRVhUX2RyYXdfYnVmZmVycyBpcyBkaXNh
YmxlZCIpOwotICAgICAgICAgICAgICAgICAgICByZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGluZGV4ID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlIGlmICgoYmFzZUV4cHJlc3Npb24tPmlzVmVjdG9yKCkgfHwgYmFzZUV4cHJlc3Np
b24tPmlzTWF0cml4KCkpICYmIGJhc2VFeHByZXNzaW9uLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNp
emUoKSA8PSBpbmRleCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzdGQ6OnN0cmlu
Z3N0cmVhbSBleHRyYUluZm9TdHJlYW07Ci0gICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFt
IDw8ICJmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICciIDw8IGluZGV4IDw8ICInIjsKLSAg
ICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3Ry
KCk7Ci0gICAgICAgICAgICAgICAgZXJyb3IobG9jYXRpb24sICIiLCAiWyIsIGV4dHJhSW5mby5j
X3N0cigpKTsKLSAgICAgICAgICAgICAgICByZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgaW5k
ZXggPSBiYXNlRXhwcmVzc2lvbi0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkgLSAxOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpbmRleEV4cHJlc3Npb24tPmdldEFzQ29uc3RhbnRV
bmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5zZXRJQ29uc3QoaW5kZXgpOwotICAgICAg
ICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBpbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhE
aXJlY3QsIGJhc2VFeHByZXNzaW9uLCBpbmRleEV4cHJlc3Npb24sIGxvY2F0aW9uKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9
IGludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleEluZGlyZWN0LCBiYXNlRXhwcmVzc2lvbiwg
aW5kZXhFeHByZXNzaW9uLCBsb2NhdGlvbik7Ci0gICAgfQotCi0gICAgaWYgKGluZGV4ZWRFeHBy
ZXNzaW9uID09IDApCi0gICAgewotICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0g
bmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgwLjBm
KTsKLSAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRV
bmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRGbG9hdCwgRWJwSGlnaCwgRXZxQ29uc3QpLCBsb2Nh
dGlvbik7Ci0gICAgfQotICAgIGVsc2UgaWYgKGJhc2VFeHByZXNzaW9uLT5pc0FycmF5KCkpCi0g
ICAgewotICAgICAgICBjb25zdCBUVHlwZSAmYmFzZVR5cGUgPSBiYXNlRXhwcmVzc2lvbi0+Z2V0
VHlwZSgpOwotICAgICAgICBpZiAoYmFzZVR5cGUuZ2V0U3RydWN0KCkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIFRUeXBlIGNvcHlPZlR5cGUoYmFzZVR5cGUuZ2V0U3RydWN0KCkpOwotICAgICAg
ICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoY29weU9mVHlwZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+
c2V0VHlwZShUVHlwZShiYXNlRXhwcmVzc2lvbi0+Z2V0QmFzaWNUeXBlKCksIGJhc2VFeHByZXNz
aW9uLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCBiYXNlRXhwcmVzc2lvbi0+Z2V0Tm9t
aW5hbFNpemUoKSwgYmFzZUV4cHJlc3Npb24tPmlzTWF0cml4KCkpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChiYXNlRXhwcmVzc2lvbi0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2
cUNvbnN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+Z2V0VHlw
ZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0KTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICBlbHNlIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNNYXRyaXgoKSkKLSAgICB7Ci0gICAgICAgIFRR
dWFsaWZpZXIgcXVhbGlmaWVyID0gYmFzZUV4cHJlc3Npb24tPmdldFR5cGUoKS5nZXRRdWFsaWZp
ZXIoKSA9PSBFdnFDb25zdCA/IEV2cUNvbnN0IDogRXZxVGVtcG9yYXJ5OwotICAgICAgICBpbmRl
eGVkRXhwcmVzc2lvbi0+c2V0VHlwZShUVHlwZShiYXNlRXhwcmVzc2lvbi0+Z2V0QmFzaWNUeXBl
KCksIGJhc2VFeHByZXNzaW9uLT5nZXRQcmVjaXNpb24oKSwgcXVhbGlmaWVyLCBiYXNlRXhwcmVz
c2lvbi0+Z2V0Tm9taW5hbFNpemUoKSkpOwotICAgIH0KLSAgICBlbHNlIGlmIChiYXNlRXhwcmVz
c2lvbi0+aXNWZWN0b3IoKSkKLSAgICB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0g
YmFzZUV4cHJlc3Npb24tPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCA/IEV2
cUNvbnN0IDogRXZxVGVtcG9yYXJ5OwotICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0VHlw
ZShUVHlwZShiYXNlRXhwcmVzc2lvbi0+Z2V0QmFzaWNUeXBlKCksIGJhc2VFeHByZXNzaW9uLT5n
ZXRQcmVjaXNpb24oKSwgcXVhbGlmaWVyKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAg
ICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKGJhc2VFeHByZXNzaW9uLT5nZXRUeXBlKCkp
OwotICAgIH0KLQotICAgIHJldHVybiBpbmRleGVkRXhwcmVzc2lvbjsKLX0KLQotLy8KLS8vIFBh
cnNlIGFuIGFycmF5IG9mIHN0cmluZ3MgdXNpbmcgeXlwYXJzZS4KLS8vCi0vLyBSZXR1cm5zIDAg
Zm9yIHN1Y2Nlc3MuCi0vLwotaW50IFBhUGFyc2VTdHJpbmdzKHNpemVfdCBjb3VudCwgY29uc3Qg
Y2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKLSAgICAgICAgICAgICAg
ICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7Ci0gICAgaWYgKChjb3VudCA9PSAwKSB8fCAo
c3RyaW5nID09IE5VTEwpKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIGlmIChnbHNsYW5nX2lu
aXRpYWxpemUoY29udGV4dCkpCi0gICAgICAgIHJldHVybiAxOwotCi0gICAgaW50IGVycm9yID0g
Z2xzbGFuZ19zY2FuKGNvdW50LCBzdHJpbmcsIGxlbmd0aCwgY29udGV4dCk7Ci0gICAgaWYgKCFl
cnJvcikKLSAgICAgICAgZXJyb3IgPSBnbHNsYW5nX3BhcnNlKGNvbnRleHQpOwotCi0gICAgZ2xz
bGFuZ19maW5hbGl6ZShjb250ZXh0KTsKLQotICAgIHJldHVybiAoZXJyb3IgPT0gMCkgJiYgKGNv
bnRleHQtPm51bUVycm9ycygpID09IDApID8gMCA6IDE7Ci19Ci0KLQotCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VDb250ZXh0LmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VDb250ZXh0LmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyYjNjM2Y3ZWM4OWIwZGZjN2ZhMTE0Y2FlMzU3YjE2ZGZm
NTkzYmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlQ29udGV4dC5oCisrKyAvZGV2
L251bGwKQEAgLTEsMTM0ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0jaWZuZGVmIF9QQVJT
RVJfSEVMUEVSX0lOQ0xVREVEXwotI2RlZmluZSBfUEFSU0VSX0hFTFBFUl9JTkNMVURFRF8KLQot
I2luY2x1ZGUgImNvbXBpbGVyL0RpYWdub3N0aWNzLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvRGly
ZWN0aXZlSGFuZGxlci5oIgotI2luY2x1ZGUgImNvbXBpbGVyL2xvY2FsaW50ZXJtZWRpYXRlLmgi
Ci0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL1ByZXByb2Nlc3Nvci5oIgotI2luY2x1
ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvU3ltYm9sVGFibGUu
aCIKLQotc3RydWN0IFRNYXRyaXhGaWVsZHMgewotICAgIGJvb2wgd2hvbGVSb3c7Ci0gICAgYm9v
bCB3aG9sZUNvbDsKLSAgICBpbnQgcm93OwotICAgIGludCBjb2w7Ci19OwotCi0vLwotLy8gVGhl
IGZvbGxvd2luZyBhcmUgZXh0cmEgdmFyaWFibGVzIG5lZWRlZCBkdXJpbmcgcGFyc2luZywgZ3Jv
dXBlZCB0b2dldGhlciBzbwotLy8gdGhleSBjYW4gYmUgcGFzc2VkIHRvIHRoZSBwYXJzZXIgd2l0
aG91dCBuZWVkaW5nIGEgZ2xvYmFsLgotLy8KLXN0cnVjdCBUUGFyc2VDb250ZXh0IHsKLSAgICBU
UGFyc2VDb250ZXh0KFRTeW1ib2xUYWJsZSYgc3ltdCwgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHQs
IFRJbnRlcm1lZGlhdGUmIGludGVybSwgU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBz
cGVjLCBpbnQgb3B0aW9ucywgYm9vbCBjaGVja3NQcmVjRXJyb3JzLCBjb25zdCBjaGFyKiBzb3Vy
Y2VQYXRoLCBUSW5mb1NpbmsmIGlzKSA6Ci0gICAgICAgICAgICBpbnRlcm1lZGlhdGUoaW50ZXJt
KSwKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlKHN5bXQpLAotICAgICAgICAgICAgc2hhZGVyVHlw
ZSh0eXBlKSwKLSAgICAgICAgICAgIHNoYWRlclNwZWMoc3BlYyksCi0gICAgICAgICAgICBjb21w
aWxlT3B0aW9ucyhvcHRpb25zKSwKLSAgICAgICAgICAgIHNvdXJjZVBhdGgoc291cmNlUGF0aCks
Ci0gICAgICAgICAgICB0cmVlUm9vdCgwKSwKLSAgICAgICAgICAgIGxvb3BOZXN0aW5nTGV2ZWwo
MCksCi0gICAgICAgICAgICBzdHJ1Y3ROZXN0aW5nTGV2ZWwoMCksCi0gICAgICAgICAgICBjdXJy
ZW50RnVuY3Rpb25UeXBlKE5VTEwpLAotICAgICAgICAgICAgZnVuY3Rpb25SZXR1cm5zVmFsdWUo
ZmFsc2UpLAotICAgICAgICAgICAgY2hlY2tzUHJlY2lzaW9uRXJyb3JzKGNoZWNrc1ByZWNFcnJv
cnMpLAotICAgICAgICAgICAgZGlhZ25vc3RpY3MoaXMpLAotICAgICAgICAgICAgZGlyZWN0aXZl
SGFuZGxlcihleHQsIGRpYWdub3N0aWNzKSwKLSAgICAgICAgICAgIHByZXByb2Nlc3NvcigmZGlh
Z25vc3RpY3MsICZkaXJlY3RpdmVIYW5kbGVyKSwKLSAgICAgICAgICAgIHNjYW5uZXIoTlVMTCkg
eyAgfQotICAgIFRJbnRlcm1lZGlhdGUmIGludGVybWVkaWF0ZTsgLy8gdG8gaG9sZCBhbmQgYnVp
bGQgYSBwYXJzZSB0cmVlCi0gICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZTsgICAvLyBzeW1i
b2wgdGFibGUgdGhhdCBnb2VzIHdpdGggdGhlIGxhbmd1YWdlIGN1cnJlbnRseSBiZWluZyBwYXJz
ZWQKLSAgICBTaFNoYWRlclR5cGUgc2hhZGVyVHlwZTsgICAgICAgICAgICAgIC8vIHZlcnRleCBv
ciBmcmFnbWVudCBsYW5ndWFnZSAoZnV0dXJlOiBwYWNrIG9yIHVucGFjaykKLSAgICBTaFNoYWRl
clNwZWMgc2hhZGVyU3BlYzsgICAgICAgICAgICAgIC8vIFRoZSBsYW5ndWFnZSBzcGVjaWZpY2F0
aW9uIGNvbXBpbGVyIGNvbmZvcm1zIHRvIC0gR0xFUzIgb3IgV2ViR0wuCi0gICAgaW50IGNvbXBp
bGVPcHRpb25zOwotICAgIGNvbnN0IGNoYXIqIHNvdXJjZVBhdGg7ICAgICAgLy8gUGF0aCBvZiBz
b3VyY2UgZmlsZSBvciBOVUxMLgotICAgIFRJbnRlcm1Ob2RlKiB0cmVlUm9vdDsgICAgICAgLy8g
cm9vdCBvZiBwYXJzZSB0cmVlIGJlaW5nIGNyZWF0ZWQKLSAgICBpbnQgbG9vcE5lc3RpbmdMZXZl
bDsgICAgICAgIC8vIDAgaWYgb3V0c2lkZSBhbGwgbG9vcHMKLSAgICBpbnQgc3RydWN0TmVzdGlu
Z0xldmVsOyAgICAgIC8vIGluY3JlbWVudGVkIHdoaWxlIHBhcnNpbmcgYSBzdHJ1Y3QgZGVjbGFy
YXRpb24KLSAgICBjb25zdCBUVHlwZSogY3VycmVudEZ1bmN0aW9uVHlwZTsgIC8vIHRoZSByZXR1
cm4gdHlwZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCdzIGN1cnJlbnRseSBiZWluZyBwYXJzZWQKLSAg
ICBib29sIGZ1bmN0aW9uUmV0dXJuc1ZhbHVlOyAgIC8vIHRydWUgaWYgYSBub24tdm9pZCBmdW5j
dGlvbiBoYXMgYSByZXR1cm4KLSAgICBib29sIGNoZWNrc1ByZWNpc2lvbkVycm9yczsgIC8vIHRy
dWUgaWYgYW4gZXJyb3Igd2lsbCBiZSBnZW5lcmF0ZWQgd2hlbiBhIHZhcmlhYmxlIGlzIGRlY2xh
cmVkIHdpdGhvdXQgcHJlY2lzaW9uLCBleHBsaWNpdCBvciBpbXBsaWNpdC4KLSAgICBib29sIGZy
YWdtZW50UHJlY2lzaW9uSGlnaDsgIC8vIHRydWUgaWYgaGlnaHAgcHJlY2lzaW9uIGlzIHN1cHBv
cnRlZCBpbiB0aGUgZnJhZ21lbnQgbGFuZ3VhZ2UuCi0gICAgVFN0cmluZyBIYXNoRXJyTXNnOwot
ICAgIFREaWFnbm9zdGljcyBkaWFnbm9zdGljczsKLSAgICBURGlyZWN0aXZlSGFuZGxlciBkaXJl
Y3RpdmVIYW5kbGVyOwotICAgIHBwOjpQcmVwcm9jZXNzb3IgcHJlcHJvY2Vzc29yOwotICAgIHZv
aWQqIHNjYW5uZXI7Ci0KLSAgICBpbnQgbnVtRXJyb3JzKCkgY29uc3QgeyByZXR1cm4gZGlhZ25v
c3RpY3MubnVtRXJyb3JzKCk7IH0KLSAgICBUSW5mb1NpbmsmIGluZm9TaW5rKCkgeyByZXR1cm4g
ZGlhZ25vc3RpY3MuaW5mb1NpbmsoKTsgfQotICAgIHZvaWQgZXJyb3IoY29uc3QgVFNvdXJjZUxv
YyYgbG9jLCBjb25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuLAotICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogZXh0cmFJbmZvPSIiKTsKLSAgICB2b2lkIHdhcm5pbmcoY29uc3Qg
VFNvdXJjZUxvYyYgbG9jLCBjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuLAot
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm89IiIpOwotICAgIHZvaWQgdHJh
Y2UoY29uc3QgY2hhciogc3RyKTsKLSAgICB2b2lkIHJlY292ZXIoKTsKLQotICAgIGJvb2wgcGFy
c2VWZWN0b3JGaWVsZHMoY29uc3QgVFN0cmluZyYsIGludCB2ZWNTaXplLCBUVmVjdG9yRmllbGRz
JiwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSk7Ci0gICAgYm9vbCBwYXJzZU1hdHJpeEZpZWxkcyhj
b25zdCBUU3RyaW5nJiwgaW50IG1hdFNpemUsIFRNYXRyaXhGaWVsZHMmLCBjb25zdCBUU291cmNl
TG9jJiBsaW5lKTsKLQotICAgIGJvb2wgcmVzZXJ2ZWRFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VM
b2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIpOwotICAgIHZvaWQgYXNzaWduRXJy
b3IoY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgbGVmdCwg
VFN0cmluZyByaWdodCk7Ci0gICAgdm9pZCB1bmFyeU9wRXJyb3IoY29uc3QgVFNvdXJjZUxvYyYg
bGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgb3BlcmFuZCk7Ci0gICAgdm9pZCBiaW5hcnlP
cEVycm9yKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5nIGxl
ZnQsIFRTdHJpbmcgcmlnaHQpOwotICAgIGJvb2wgcHJlY2lzaW9uRXJyb3JDaGVjayhjb25zdCBU
U291cmNlTG9jJiBsaW5lLCBUUHJlY2lzaW9uIHByZWNpc2lvbiwgVEJhc2ljVHlwZSB0eXBlKTsK
LSAgICBib29sIGxWYWx1ZUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3Qg
Y2hhciogb3AsIFRJbnRlcm1UeXBlZCopOwotICAgIGJvb2wgY29uc3RFcnJvckNoZWNrKFRJbnRl
cm1UeXBlZCogbm9kZSk7Ci0gICAgYm9vbCBpbnRlZ2VyRXJyb3JDaGVjayhUSW50ZXJtVHlwZWQq
IG5vZGUsIGNvbnN0IGNoYXIqIHRva2VuKTsKLSAgICBib29sIGdsb2JhbEVycm9yQ2hlY2soY29u
c3QgVFNvdXJjZUxvYyYgbGluZSwgYm9vbCBnbG9iYWwsIGNvbnN0IGNoYXIqIHRva2VuKTsKLSAg
ICBib29sIGNvbnN0cnVjdG9yRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUSW50
ZXJtTm9kZSosIFRGdW5jdGlvbiYsIFRPcGVyYXRvciwgVFR5cGUqKTsKLSAgICBib29sIGFycmF5
U2l6ZUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVEludGVybVR5cGVkKiBleHBy
LCBpbnQmIHNpemUpOwotICAgIGJvb2wgYXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKGNvbnN0IFRT
b3VyY2VMb2MmIGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpOwotICAgIGJvb2wgYXJyYXlUeXBlRXJy
b3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUHVibGljVHlwZSB0eXBlKTsKLSAgICBi
b29sIGFycmF5RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5nJiBpZGVu
dGlmaWVyLCBUUHVibGljVHlwZSB0eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSk7Ci0gICAgYm9v
bCB2b2lkRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiwgY29uc3QgVFN0cmluZyYsIGNvbnN0
IFRQdWJsaWNUeXBlJik7Ci0gICAgYm9vbCBib29sRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9j
JiwgY29uc3QgVEludGVybVR5cGVkKik7Ci0gICAgYm9vbCBib29sRXJyb3JDaGVjayhjb25zdCBU
U291cmNlTG9jJiwgY29uc3QgVFB1YmxpY1R5cGUmKTsKLSAgICBib29sIHNhbXBsZXJFcnJvckNo
ZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZSwgY29u
c3QgY2hhciogcmVhc29uKTsKLSAgICBib29sIHN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soY29u
c3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlKTsKLSAgICBib29s
IHBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRRdWFs
aWZpZXIgcXVhbGlmaWVyLCBjb25zdCBUVHlwZSYgdHlwZSk7Ci0gICAgYm9vbCBub25Jbml0Q29u
c3RFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIs
IFRQdWJsaWNUeXBlJiB0eXBlLCBib29sIGFycmF5KTsKLSAgICBib29sIG5vbkluaXRFcnJvckNo
ZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNU
eXBlJiB0eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSk7Ci0gICAgYm9vbCBwYXJhbUVycm9yQ2hl
Y2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIFRRdWFsaWZp
ZXIgcGFyYW1RdWFsaWZpZXIsIFRUeXBlKiB0eXBlKTsKLSAgICBib29sIGV4dGVuc2lvbkVycm9y
Q2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYpOwotCi0gICAgY29u
c3QgVFByYWdtYSYgcHJhZ21hKCkgY29uc3QgeyByZXR1cm4gZGlyZWN0aXZlSGFuZGxlci5wcmFn
bWEoKTsgfQotICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0ZW5zaW9uQmVoYXZpb3Io
KSBjb25zdCB7IHJldHVybiBkaXJlY3RpdmVIYW5kbGVyLmV4dGVuc2lvbkJlaGF2aW9yKCk7IH0K
LSAgICBib29sIHN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IGNoYXIqIGV4dGVuc2lvbik7Ci0gICAg
Ym9vbCBpc0V4dGVuc2lvbkVuYWJsZWQoY29uc3QgY2hhciogZXh0ZW5zaW9uKSBjb25zdDsKLQot
ICAgIGJvb2wgY29udGFpbnNTYW1wbGVyKFRUeXBlJiB0eXBlKTsKLSAgICBib29sIGFyZUFsbENo
aWxkQ29uc3QoVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUpOwotICAgIGNvbnN0IFRGdW5jdGlv
biogZmluZEZ1bmN0aW9uKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRGdW5jdGlvbiogcGZuQ2Fs
bCwgYm9vbCAqYnVpbHRJbiA9IDApOwotICAgIGJvb2wgZXhlY3V0ZUluaXRpYWxpemVyKGNvbnN0
IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiBwVHlw
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluaXRpYWxpemVy
LCBUSW50ZXJtTm9kZSomIGludGVybU5vZGUsIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwKTsKLQot
ICAgIFRJbnRlcm1UeXBlZCogYWRkQ29uc3RydWN0b3IoVEludGVybU5vZGUqLCBjb25zdCBUVHlw
ZSosIFRPcGVyYXRvciwgVEZ1bmN0aW9uKiwgY29uc3QgVFNvdXJjZUxvYyYpOwotICAgIFRJbnRl
cm1UeXBlZCogZm9sZENvbnN0Q29uc3RydWN0b3IoVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUs
IGNvbnN0IFRUeXBlJiB0eXBlKTsKLSAgICBUSW50ZXJtVHlwZWQqIGNvbnN0cnVjdFN0cnVjdChU
SW50ZXJtTm9kZSosIFRUeXBlKiwgaW50LCBjb25zdCBUU291cmNlTG9jJiwgYm9vbCBzdWJzZXQp
OwotICAgIFRJbnRlcm1UeXBlZCogY29uc3RydWN0QnVpbHRJbihjb25zdCBUVHlwZSosIFRPcGVy
YXRvciwgVEludGVybU5vZGUqLCBjb25zdCBUU291cmNlTG9jJiwgYm9vbCBzdWJzZXQpOwotICAg
IFRJbnRlcm1UeXBlZCogYWRkQ29uc3RWZWN0b3JOb2RlKFRWZWN0b3JGaWVsZHMmLCBUSW50ZXJt
VHlwZWQqLCBjb25zdCBUU291cmNlTG9jJik7Ci0gICAgVEludGVybVR5cGVkKiBhZGRDb25zdE1h
dHJpeE5vZGUoaW50ICwgVEludGVybVR5cGVkKiwgY29uc3QgVFNvdXJjZUxvYyYpOwotICAgIFRJ
bnRlcm1UeXBlZCogYWRkQ29uc3RBcnJheU5vZGUoaW50IGluZGV4LCBUSW50ZXJtVHlwZWQqIG5v
ZGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpOwotICAgIFRJbnRlcm1UeXBlZCogYWRkQ29uc3RT
dHJ1Y3QoVFN0cmluZyYgLCBUSW50ZXJtVHlwZWQqLCBjb25zdCBUU291cmNlTG9jJik7Ci0gICAg
VEludGVybVR5cGVkKiBhZGRJbmRleEV4cHJlc3Npb24oVEludGVybVR5cGVkICpiYXNlRXhwcmVz
c2lvbiwgY29uc3QgVFNvdXJjZUxvYyYgbG9jYXRpb24sIFRJbnRlcm1UeXBlZCAqaW5kZXhFeHBy
ZXNzaW9uKTsKLQotICAgIC8vIFBlcmZvcm1zIGFuIGVycm9yIGNoZWNrIGZvciBlbWJlZGRlZCBz
dHJ1Y3QgZGVjbGFyYXRpb25zLgotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhbiBlcnJvciB3YXMg
cmFpc2VkIGR1ZSB0byB0aGUgZGVjbGFyYXRpb24gb2YKLSAgICAvLyB0aGlzIHN0cnVjdC4KLSAg
ICBib29sIGVudGVyU3RydWN0RGVjbGFyYXRpb24oY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29u
c3QgVFN0cmluZyYgaWRlbnRpZmllcik7Ci0gICAgdm9pZCBleGl0U3RydWN0RGVjbGFyYXRpb24o
KTsKLQotICAgIGJvb2wgc3RydWN0TmVzdGluZ0Vycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYg
bGluZSwgY29uc3QgVEZpZWxkJiBmaWVsZCk7Ci19OwotCi1pbnQgUGFQYXJzZVN0cmluZ3Moc2l6
ZV90IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtd
LAotICAgICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOwotCi0jZW5kaWYg
Ly8gX1BBUlNFUl9IRUxQRVJfSU5DTFVERURfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBlYjk5MzU2N2IzNTM1ZTEyMTI0Njg5NWU5OGZhOGY0YzQxMDBkZmM4Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjk0ICsw
LDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9Qb29sQWxsb2Mu
aCIKLQotI2lmbmRlZiBfTVNDX1ZFUgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2VuZGlmCi0jaW5j
bHVkZSA8c3RkaW8uaD4KLQotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVk
ZSAiY29tcGlsZXIvSW5pdGlhbGl6ZUdsb2JhbHMuaCIKLSNpbmNsdWRlICJjb21waWxlci9vc2lu
Y2x1ZGUuaCIKLQotT1NfVExTSW5kZXggUG9vbEluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7
Ci0KLWJvb2wgSW5pdGlhbGl6ZVBvb2xJbmRleCgpCi17Ci0gICAgYXNzZXJ0KFBvb2xJbmRleCA9
PSBPU19JTlZBTElEX1RMU19JTkRFWCk7Ci0KLSAgICBQb29sSW5kZXggPSBPU19BbGxvY1RMU0lu
ZGV4KCk7Ci0gICAgcmV0dXJuIFBvb2xJbmRleCAhPSBPU19JTlZBTElEX1RMU19JTkRFWDsKLX0K
LQotdm9pZCBGcmVlUG9vbEluZGV4KCkKLXsKLSAgICBhc3NlcnQoUG9vbEluZGV4ICE9IE9TX0lO
VkFMSURfVExTX0lOREVYKTsKLQotICAgIE9TX0ZyZWVUTFNJbmRleChQb29sSW5kZXgpOwotICAg
IFBvb2xJbmRleCA9IE9TX0lOVkFMSURfVExTX0lOREVYOwotfQotCi1UUG9vbEFsbG9jYXRvciog
R2V0R2xvYmFsUG9vbEFsbG9jYXRvcigpCi17Ci0gICAgYXNzZXJ0KFBvb2xJbmRleCAhPSBPU19J
TlZBTElEX1RMU19JTkRFWCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFRQb29sQWxsb2NhdG9y
Kj4oT1NfR2V0VExTVmFsdWUoUG9vbEluZGV4KSk7Ci19Ci0KLXZvaWQgU2V0R2xvYmFsUG9vbEFs
bG9jYXRvcihUUG9vbEFsbG9jYXRvciogcG9vbEFsbG9jYXRvcikKLXsKLSAgICBhc3NlcnQoUG9v
bEluZGV4ICE9IE9TX0lOVkFMSURfVExTX0lOREVYKTsKLSAgICBPU19TZXRUTFNWYWx1ZShQb29s
SW5kZXgsIHBvb2xBbGxvY2F0b3IpOwotfQotCi0vLwotLy8gSW1wbGVtZW50IHRoZSBmdW5jdGlv
bmFsaXR5IG9mIHRoZSBUUG9vbEFsbG9jYXRvciBjbGFzcywgd2hpY2gKLS8vIGlzIGRvY3VtZW50
ZWQgaW4gUG9vbEFsbG9jLmguCi0vLwotVFBvb2xBbGxvY2F0b3I6OlRQb29sQWxsb2NhdG9yKGlu
dCBncm93dGhJbmNyZW1lbnQsIGludCBhbGxvY2F0aW9uQWxpZ25tZW50KSA6IAotICAgIHBhZ2VT
aXplKGdyb3d0aEluY3JlbWVudCksCi0gICAgYWxpZ25tZW50KGFsbG9jYXRpb25BbGlnbm1lbnQp
LAotICAgIGZyZWVMaXN0KDApLAotICAgIGluVXNlTGlzdCgwKSwKLSAgICBudW1DYWxscygwKSwK
LSAgICB0b3RhbEJ5dGVzKDApCi17Ci0gICAgLy8KLSAgICAvLyBEb24ndCBhbGxvdyBwYWdlIHNp
emVzIHdlIGtub3cgYXJlIHNtYWxsZXIgdGhhbiBhbGwgY29tbW9uCi0gICAgLy8gT1MgcGFnZSBz
aXplcy4KLSAgICAvLwotICAgIGlmIChwYWdlU2l6ZSA8IDQqMTAyNCkKLSAgICAgICAgcGFnZVNp
emUgPSA0KjEwMjQ7Ci0KLSAgICAvLwotICAgIC8vIEEgbGFyZ2UgY3VycmVudFBhZ2VPZmZzZXQg
aW5kaWNhdGVzIGEgbmV3IHBhZ2UgbmVlZHMgdG8KLSAgICAvLyBiZSBvYnRhaW5lZCB0byBhbGxv
Y2F0ZSBtZW1vcnkuCi0gICAgLy8KLSAgICBjdXJyZW50UGFnZU9mZnNldCA9IHBhZ2VTaXplOwot
Ci0gICAgLy8KLSAgICAvLyBBZGp1c3QgYWxpZ25tZW50IHRvIGJlIGF0IGxlYXN0IHBvaW50ZXIg
YWxpZ25lZCBhbmQKLSAgICAvLyBwb3dlciBvZiAyLgotICAgIC8vCi0gICAgc2l6ZV90IG1pbkFs
aWduID0gc2l6ZW9mKHZvaWQqKTsKLSAgICBhbGlnbm1lbnQgJj0gfihtaW5BbGlnbiAtIDEpOwot
ICAgIGlmIChhbGlnbm1lbnQgPCBtaW5BbGlnbikKLSAgICAgICAgYWxpZ25tZW50ID0gbWluQWxp
Z247Ci0gICAgc2l6ZV90IGEgPSAxOwotICAgIHdoaWxlIChhIDwgYWxpZ25tZW50KQotICAgICAg
ICBhIDw8PSAxOwotICAgIGFsaWdubWVudCA9IGE7Ci0gICAgYWxpZ25tZW50TWFzayA9IGEgLSAx
OwotCi0gICAgLy8KLSAgICAvLyBBbGlnbiBoZWFkZXIgc2tpcAotICAgIC8vCi0gICAgaGVhZGVy
U2tpcCA9IG1pbkFsaWduOwotICAgIGlmIChoZWFkZXJTa2lwIDwgc2l6ZW9mKHRIZWFkZXIpKSB7
Ci0gICAgICAgIGhlYWRlclNraXAgPSAoc2l6ZW9mKHRIZWFkZXIpICsgYWxpZ25tZW50TWFzaykg
JiB+YWxpZ25tZW50TWFzazsKLSAgICB9Ci19Ci0KLVRQb29sQWxsb2NhdG9yOjp+VFBvb2xBbGxv
Y2F0b3IoKQotewotICAgIHdoaWxlIChpblVzZUxpc3QpIHsKLSAgICAgICAgdEhlYWRlciogbmV4
dCA9IGluVXNlTGlzdC0+bmV4dFBhZ2U7Ci0gICAgICAgIGluVXNlTGlzdC0+fnRIZWFkZXIoKTsK
LSAgICAgICAgZGVsZXRlIFtdIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGluVXNlTGlzdCk7Ci0g
ICAgICAgIGluVXNlTGlzdCA9IG5leHQ7Ci0gICAgfQotCi0gICAgLy8gV2Ugc2hvdWxkIG5vdCBj
aGVjayB0aGUgZ3VhcmQgYmxvY2tzCi0gICAgLy8gaGVyZSwgYmVjYXVzZSB3ZSBkaWQgaXQgYWxy
ZWFkeSB3aGVuIHRoZSBibG9jayB3YXMKLSAgICAvLyBwbGFjZWQgaW50byB0aGUgZnJlZSBsaXN0
LgotICAgIC8vCi0gICAgd2hpbGUgKGZyZWVMaXN0KSB7Ci0gICAgICAgIHRIZWFkZXIqIG5leHQg
PSBmcmVlTGlzdC0+bmV4dFBhZ2U7Ci0gICAgICAgIGRlbGV0ZSBbXSByZWludGVycHJldF9jYXN0
PGNoYXIqPihmcmVlTGlzdCk7Ci0gICAgICAgIGZyZWVMaXN0ID0gbmV4dDsKLSAgICB9Ci19Ci0K
LS8vIFN1cHBvcnQgTVNWQysrIDYuMAotY29uc3QgdW5zaWduZWQgY2hhciBUQWxsb2NhdGlvbjo6
Z3VhcmRCbG9ja0JlZ2luVmFsID0gMHhmYjsKLWNvbnN0IHVuc2lnbmVkIGNoYXIgVEFsbG9jYXRp
b246Omd1YXJkQmxvY2tFbmRWYWwgICA9IDB4ZmU7Ci1jb25zdCB1bnNpZ25lZCBjaGFyIFRBbGxv
Y2F0aW9uOjp1c2VyRGF0YUZpbGwgICAgICAgPSAweGNkOwotCi0jaWZkZWYgR1VBUkRfQkxPQ0tT
Ci0gICAgY29uc3Qgc2l6ZV90IFRBbGxvY2F0aW9uOjpndWFyZEJsb2NrU2l6ZSA9IDE2OwotI2Vs
c2UKLSAgICBjb25zdCBzaXplX3QgVEFsbG9jYXRpb246Omd1YXJkQmxvY2tTaXplID0gMDsKLSNl
bmRpZgotCi0vLwotLy8gQ2hlY2sgYSBzaW5nbGUgZ3VhcmQgYmxvY2sgZm9yIGRhbWFnZQotLy8K
LXZvaWQgVEFsbG9jYXRpb246OmNoZWNrR3VhcmRCbG9jayh1bnNpZ25lZCBjaGFyKiBibG9ja01l
bSwgdW5zaWduZWQgY2hhciB2YWwsIGNvbnN0IGNoYXIqIGxvY1RleHQpIGNvbnN0Ci17Ci0jaWZk
ZWYgR1VBUkRfQkxPQ0tTCi0gICAgZm9yIChzaXplX3QgeCA9IDA7IHggPCBndWFyZEJsb2NrU2l6
ZTsgeCsrKSB7Ci0gICAgICAgIGlmIChibG9ja01lbVt4XSAhPSB2YWwpIHsKLSAgICAgICAgICAg
IGNoYXIgYXNzZXJ0TXNnWzgwXTsKLQotICAgICAgICAgICAgLy8gV2UgZG9uJ3QgcHJpbnQgdGhl
IGFzc2VydCBtZXNzYWdlLiAgSXQncyBoZXJlIGp1c3QgdG8gYmUgaGVscGZ1bC4KLSNpZiBkZWZp
bmVkKF9NU0NfVkVSKQotICAgICAgICAgICAgc25wcmludGYoYXNzZXJ0TXNnLCBzaXplb2YoYXNz
ZXJ0TXNnKSwgIlBvb2xBbGxvYzogRGFtYWdlICVzICVJdSBieXRlIGFsbG9jYXRpb24gYXQgMHgl
cFxuIiwKLSAgICAgICAgICAgICAgICAgICAgbG9jVGV4dCwgc2l6ZSwgZGF0YSgpKTsKLSNlbHNl
Ci0gICAgICAgICAgICBzbnByaW50Zihhc3NlcnRNc2csIHNpemVvZihhc3NlcnRNc2cpLCAiUG9v
bEFsbG9jOiBEYW1hZ2UgJXMgJXp1IGJ5dGUgYWxsb2NhdGlvbiBhdCAweCVwXG4iLAotICAgICAg
ICAgICAgICAgICAgICBsb2NUZXh0LCBzaXplLCBkYXRhKCkpOwotI2VuZGlmCi0gICAgICAgICAg
ICBhc3NlcnQoMCAmJiAiUG9vbEFsbG9jOiBEYW1hZ2UgaW4gZ3VhcmQgYmxvY2siKTsKLSAgICAg
ICAgfQotICAgIH0KLSNlbmRpZgotfQotCi0KLXZvaWQgVFBvb2xBbGxvY2F0b3I6OnB1c2goKQot
ewotICAgIHRBbGxvY1N0YXRlIHN0YXRlID0geyBjdXJyZW50UGFnZU9mZnNldCwgaW5Vc2VMaXN0
IH07Ci0KLSAgICBzdGFjay5wdXNoX2JhY2soc3RhdGUpOwotICAgICAgICAKLSAgICAvLwotICAg
IC8vIEluZGljYXRlIHRoZXJlIGlzIG5vIGN1cnJlbnQgcGFnZSB0byBhbGxvY2F0ZSBmcm9tLgot
ICAgIC8vCi0gICAgY3VycmVudFBhZ2VPZmZzZXQgPSBwYWdlU2l6ZTsKLX0KLQotLy8KLS8vIERv
IGEgbWFzcy1kZWFsbG9jYXRpb24gb2YgYWxsIHRoZSBpbmRpdmlkdWFsIGFsbG9jYXRpb25zCi0v
LyB0aGF0IGhhdmUgb2NjdXJyZWQgc2luY2UgdGhlIGxhc3QgcHVzaCgpLCBvciBzaW5jZSB0aGUK
LS8vIGxhc3QgcG9wKCksIG9yIHNpbmNlIHRoZSBvYmplY3QncyBjcmVhdGlvbi4KLS8vCi0vLyBU
aGUgZGVhbGxvY2F0ZWQgcGFnZXMgYXJlIHNhdmVkIGZvciBmdXR1cmUgYWxsb2NhdGlvbnMuCi0v
Lwotdm9pZCBUUG9vbEFsbG9jYXRvcjo6cG9wKCkKLXsKLSAgICBpZiAoc3RhY2suc2l6ZSgpIDwg
MSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdEhlYWRlciogcGFnZSA9IHN0YWNrLmJhY2soKS5w
YWdlOwotICAgIGN1cnJlbnRQYWdlT2Zmc2V0ID0gc3RhY2suYmFjaygpLm9mZnNldDsKLQotICAg
IHdoaWxlIChpblVzZUxpc3QgIT0gcGFnZSkgewotICAgICAgICAvLyBpbnZva2UgZGVzdHJ1Y3Rv
ciB0byBmcmVlIGFsbG9jYXRpb24gbGlzdAotICAgICAgICBpblVzZUxpc3QtPn50SGVhZGVyKCk7
Ci0gICAgICAgIAotICAgICAgICB0SGVhZGVyKiBuZXh0SW5Vc2UgPSBpblVzZUxpc3QtPm5leHRQ
YWdlOwotICAgICAgICBpZiAoaW5Vc2VMaXN0LT5wYWdlQ291bnQgPiAxKQotICAgICAgICAgICAg
ZGVsZXRlIFtdIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGluVXNlTGlzdCk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgaW5Vc2VMaXN0LT5uZXh0UGFnZSA9IGZyZWVMaXN0OwotICAgICAg
ICAgICAgZnJlZUxpc3QgPSBpblVzZUxpc3Q7Ci0gICAgICAgIH0KLSAgICAgICAgaW5Vc2VMaXN0
ID0gbmV4dEluVXNlOwotICAgIH0KLQotICAgIHN0YWNrLnBvcF9iYWNrKCk7Ci19Ci0KLS8vCi0v
LyBEbyBhIG1hc3MtZGVhbGxvY2F0aW9uIG9mIGFsbCB0aGUgaW5kaXZpZHVhbCBhbGxvY2F0aW9u
cwotLy8gdGhhdCBoYXZlIG9jY3VycmVkLgotLy8KLXZvaWQgVFBvb2xBbGxvY2F0b3I6OnBvcEFs
bCgpCi17Ci0gICAgd2hpbGUgKHN0YWNrLnNpemUoKSA+IDApCi0gICAgICAgIHBvcCgpOwotfQot
Ci12b2lkKiBUUG9vbEFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IG51bUJ5dGVzKQotewotICAg
IC8vCi0gICAgLy8gSnVzdCBrZWVwIHNvbWUgaW50ZXJlc3Rpbmcgc3RhdGlzdGljcy4KLSAgICAv
LwotICAgICsrbnVtQ2FsbHM7Ci0gICAgdG90YWxCeXRlcyArPSBudW1CeXRlczsKLQotICAgIC8v
IElmIHdlIGFyZSB1c2luZyBndWFyZCBibG9ja3MsIGFsbCBhbGxvY2F0aW9ucyBhcmUgYnJhY2tl
dGVkIGJ5Ci0gICAgLy8gdGhlbTogW2d1YXJkYmxvY2tdW2FsbG9jYXRpb25dW2d1YXJkYmxvY2td
LiAgbnVtQnl0ZXMgaXMgaG93Ci0gICAgLy8gbXVjaCBtZW1vcnkgdGhlIGNhbGxlciBhc2tlZCBm
b3IuICBhbGxvY2F0aW9uU2l6ZSBpcyB0aGUgdG90YWwKLSAgICAvLyBzaXplIGluY2x1ZGluZyBn
dWFyZCBibG9ja3MuICBJbiByZWxlYXNlIGJ1aWxkLAotICAgIC8vIGd1YXJkQmxvY2tTaXplPTAg
YW5kIHRoaXMgYWxsIGdldHMgb3B0aW1pemVkIGF3YXkuCi0gICAgc2l6ZV90IGFsbG9jYXRpb25T
aXplID0gVEFsbG9jYXRpb246OmFsbG9jYXRpb25TaXplKG51bUJ5dGVzKTsKLSAgICAvLyBEZXRl
Y3QgaW50ZWdlciBvdmVyZmxvdy4KLSAgICBpZiAoYWxsb2NhdGlvblNpemUgPCBudW1CeXRlcykK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLwotICAgIC8vIERvIHRoZSBhbGxvY2F0aW9uLCBt
b3N0IGxpa2VseSBjYXNlIGZpcnN0LCBmb3IgZWZmaWNpZW5jeS4KLSAgICAvLyBUaGlzIHN0ZXAg
Y291bGQgYmUgbW92ZWQgdG8gYmUgaW5saW5lIHNvbWV0aW1lLgotICAgIC8vCi0gICAgaWYgKGFs
bG9jYXRpb25TaXplIDw9IHBhZ2VTaXplIC0gY3VycmVudFBhZ2VPZmZzZXQpIHsKLSAgICAgICAg
Ly8KLSAgICAgICAgLy8gU2FmZSB0byBhbGxvY2F0ZSBmcm9tIGN1cnJlbnRQYWdlT2Zmc2V0Lgot
ICAgICAgICAvLwotICAgICAgICB1bnNpZ25lZCBjaGFyKiBtZW1vcnkgPSByZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIGNoYXIgKj4oaW5Vc2VMaXN0KSArIGN1cnJlbnRQYWdlT2Zmc2V0OwotICAg
ICAgICBjdXJyZW50UGFnZU9mZnNldCArPSBhbGxvY2F0aW9uU2l6ZTsKLSAgICAgICAgY3VycmVu
dFBhZ2VPZmZzZXQgPSAoY3VycmVudFBhZ2VPZmZzZXQgKyBhbGlnbm1lbnRNYXNrKSAmIH5hbGln
bm1lbnRNYXNrOwotCi0gICAgICAgIHJldHVybiBpbml0aWFsaXplQWxsb2NhdGlvbihpblVzZUxp
c3QsIG1lbW9yeSwgbnVtQnl0ZXMpOwotICAgIH0KLQotICAgIGlmIChhbGxvY2F0aW9uU2l6ZSA+
IHBhZ2VTaXplIC0gaGVhZGVyU2tpcCkgewotICAgICAgICAvLwotICAgICAgICAvLyBEbyBhIG11
bHRpLXBhZ2UgYWxsb2NhdGlvbi4gIERvbid0IG1peCB0aGVzZSB3aXRoIHRoZSBvdGhlcnMuCi0g
ICAgICAgIC8vIFRoZSBPUyBpcyBlZmZpY2llbnQgYW5kIGFsbG9jYXRpbmcgYW5kIGZyZWUtaW5n
IG11bHRpcGxlIHBhZ2VzLgotICAgICAgICAvLwotICAgICAgICBzaXplX3QgbnVtQnl0ZXNUb0Fs
bG9jID0gYWxsb2NhdGlvblNpemUgKyBoZWFkZXJTa2lwOwotICAgICAgICAvLyBEZXRlY3QgaW50
ZWdlciBvdmVyZmxvdy4KLSAgICAgICAgaWYgKG51bUJ5dGVzVG9BbGxvYyA8IGFsbG9jYXRpb25T
aXplKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgdEhlYWRlciogbWVtb3J5ID0g
cmVpbnRlcnByZXRfY2FzdDx0SGVhZGVyKj4oOjpuZXcgY2hhcltudW1CeXRlc1RvQWxsb2NdKTsK
LSAgICAgICAgaWYgKG1lbW9yeSA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAg
ICAgLy8gVXNlIHBsYWNlbWVudC1uZXcgdG8gaW5pdGlhbGl6ZSBoZWFkZXIKLSAgICAgICAgbmV3
KG1lbW9yeSkgdEhlYWRlcihpblVzZUxpc3QsIChudW1CeXRlc1RvQWxsb2MgKyBwYWdlU2l6ZSAt
IDEpIC8gcGFnZVNpemUpOwotICAgICAgICBpblVzZUxpc3QgPSBtZW1vcnk7Ci0KLSAgICAgICAg
Y3VycmVudFBhZ2VPZmZzZXQgPSBwYWdlU2l6ZTsgIC8vIG1ha2UgbmV4dCBhbGxvY2F0aW9uIGNv
bWUgZnJvbSBhIG5ldyBwYWdlCi0KLSAgICAgICAgLy8gTm8gZ3VhcmQgYmxvY2tzIGZvciBtdWx0
aS1wYWdlIGFsbG9jYXRpb25zICh5ZXQpCi0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obWVtb3J5KSArIGhlYWRlclNraXAp
OwotICAgIH0KLQotICAgIC8vCi0gICAgLy8gTmVlZCBhIHNpbXBsZSBwYWdlIHRvIGFsbG9jYXRl
IGZyb20uCi0gICAgLy8KLSAgICB0SGVhZGVyKiBtZW1vcnk7Ci0gICAgaWYgKGZyZWVMaXN0KSB7
Ci0gICAgICAgIG1lbW9yeSA9IGZyZWVMaXN0OwotICAgICAgICBmcmVlTGlzdCA9IGZyZWVMaXN0
LT5uZXh0UGFnZTsKLSAgICB9IGVsc2UgewotICAgICAgICBtZW1vcnkgPSByZWludGVycHJldF9j
YXN0PHRIZWFkZXIqPig6Om5ldyBjaGFyW3BhZ2VTaXplXSk7Ci0gICAgICAgIGlmIChtZW1vcnkg
PT0gMCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIFVzZSBwbGFjZW1l
bnQtbmV3IHRvIGluaXRpYWxpemUgaGVhZGVyCi0gICAgbmV3KG1lbW9yeSkgdEhlYWRlcihpblVz
ZUxpc3QsIDEpOwotICAgIGluVXNlTGlzdCA9IG1lbW9yeTsKLSAgICAKLSAgICB1bnNpZ25lZCBj
aGFyKiByZXQgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIgKj4oaW5Vc2VMaXN0KSAr
IGhlYWRlclNraXA7Ci0gICAgY3VycmVudFBhZ2VPZmZzZXQgPSAoaGVhZGVyU2tpcCArIGFsbG9j
YXRpb25TaXplICsgYWxpZ25tZW50TWFzaykgJiB+YWxpZ25tZW50TWFzazsKLQotICAgIHJldHVy
biBpbml0aWFsaXplQWxsb2NhdGlvbihpblVzZUxpc3QsIHJldCwgbnVtQnl0ZXMpOwotfQotCi0K
LS8vCi0vLyBDaGVjayBhbGwgYWxsb2NhdGlvbnMgaW4gYSBsaXN0IGZvciBkYW1hZ2UgYnkgY2Fs
bGluZyBjaGVjayBvbiBlYWNoLgotLy8KLXZvaWQgVEFsbG9jYXRpb246OmNoZWNrQWxsb2NMaXN0
KCkgY29uc3QKLXsKLSAgICBmb3IgKGNvbnN0IFRBbGxvY2F0aW9uKiBhbGxvYyA9IHRoaXM7IGFs
bG9jICE9IDA7IGFsbG9jID0gYWxsb2MtPnByZXZBbGxvYykKLSAgICAgICAgYWxsb2MtPmNoZWNr
KCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
UG9vbEFsbG9jLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFs
bG9jLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkZDI0OWM0ZDNhMzliYjIwMWMz
ODU1NDIzOTkwODA4ZjU1ZjA3ZTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxv
Yy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzAwICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0K
LSNpZm5kZWYgX1BPT0xBTExPQ19JTkNMVURFRF8KLSNkZWZpbmUgX1BPT0xBTExPQ19JTkNMVURF
RF8KLQotI2lmZGVmIF9ERUJVRwotI2RlZmluZSBHVUFSRF9CTE9DS1MgIC8vIGRlZmluZSB0byBl
bmFibGUgZ3VhcmQgYmxvY2sgc2FuaXR5IGNoZWNraW5nCi0jZW5kaWYKLQotLy8KLS8vIFRoaXMg
aGVhZGVyIGRlZmluZXMgYW4gYWxsb2NhdG9yIHRoYXQgY2FuIGJlIHVzZWQgdG8gZWZmaWNpZW50
bHkKLS8vIGFsbG9jYXRlIGEgbGFyZ2UgbnVtYmVyIG9mIHNtYWxsIHJlcXVlc3RzIGZvciBoZWFw
IG1lbW9yeSwgd2l0aCB0aGUgCi0vLyBpbnRlbnRpb24gdGhhdCB0aGV5IGFyZSBub3QgaW5kaXZp
ZHVhbGx5IGRlYWxsb2NhdGVkLCBidXQgcmF0aGVyIAotLy8gY29sbGVjdGl2ZWx5IGRlYWxsb2Nh
dGVkIGF0IG9uZSB0aW1lLgotLy8KLS8vIFRoaXMgc2ltdWx0YW5lb3VzbHkKLS8vCi0vLyAqIE1h
a2VzIGVhY2ggaW5kaXZpZHVhbCBhbGxvY2F0aW9uIG11Y2ggbW9yZSBlZmZpY2llbnQ7IHRoZQot
Ly8gICAgIHR5cGljYWwgYWxsb2NhdGlvbiBpcyB0cml2aWFsLgotLy8gKiBDb21wbGV0ZWx5IGF2
b2lkcyB0aGUgY29zdCBvZiBkb2luZyBpbmRpdmlkdWFsIGRlYWxsb2NhdGlvbi4KLS8vICogU2F2
ZXMgdGhlIHRyb3VibGUgb2YgdHJhY2tpbmcgZG93biBhbmQgcGx1Z2dpbmcgYSBsYXJnZSBjbGFz
cyBvZiBsZWFrcy4KLS8vCi0vLyBJbmRpdmlkdWFsIGNsYXNzZXMgY2FuIHVzZSB0aGlzIGFsbG9j
YXRvciBieSBzdXBwbHlpbmcgdGhlaXIgb3duCi0vLyBuZXcgYW5kIGRlbGV0ZSBtZXRob2RzLgot
Ly8KLS8vIFNUTCBjb250YWluZXJzIGNhbiB1c2UgdGhpcyBhbGxvY2F0b3IgYnkgdXNpbmcgdGhl
IHBvb2xfYWxsb2NhdG9yCi0vLyBjbGFzcyBhcyB0aGUgYWxsb2NhdG9yIChzZWNvbmQpIHRlbXBs
YXRlIGFyZ3VtZW50LgotLy8KLQotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPHN0cmlu
Zy5oPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotLy8gSWYgd2UgYXJlIHVzaW5nIGd1YXJkIGJsb2Nr
cywgd2UgbXVzdCB0cmFjayBlYWNoIGluZGl2dWFsCi0vLyBhbGxvY2F0aW9uLiAgSWYgd2UgYXJl
bid0IHVzaW5nIGd1YXJkIGJsb2NrcywgdGhlc2UKLS8vIG5ldmVyIGdldCBpbnN0YW50aWF0ZWQs
IHNvIHdvbid0IGhhdmUgYW55IGltcGFjdC4KLS8vIAotCi1jbGFzcyBUQWxsb2NhdGlvbiB7Ci1w
dWJsaWM6Ci0gICAgVEFsbG9jYXRpb24oc2l6ZV90IHNpemUsIHVuc2lnbmVkIGNoYXIqIG1lbSwg
VEFsbG9jYXRpb24qIHByZXYgPSAwKSA6Ci0gICAgICAgIHNpemUoc2l6ZSksIG1lbShtZW0pLCBw
cmV2QWxsb2MocHJldikgewotICAgICAgICAvLyBBbGxvY2F0aW9ucyBhcmUgYnJhY2tldGVkOgot
ICAgICAgICAvLyAgICBbYWxsb2NhdGlvbkhlYWRlcl1baW5pdGlhbEd1YXJkQmxvY2tdW3VzZXJE
YXRhXVtmaW5hbEd1YXJkQmxvY2tdCi0gICAgICAgIC8vIFRoaXMgd291bGQgYmUgY2xlYW5lciB3
aXRoIGlmIChndWFyZEJsb2NrU2l6ZSkuLi4sIGJ1dCB0aGF0Ci0gICAgICAgIC8vIG1ha2VzIHRo
ZSBjb21waWxlciBwcmludCB3YXJuaW5ncyBhYm91dCAwIGxlbmd0aCBtZW1zZXRzLAotICAgICAg
ICAvLyBldmVuIHdpdGggdGhlIGlmKCkgcHJvdGVjdGluZyB0aGVtLgotI2lmZGVmIEdVQVJEX0JM
T0NLUwotICAgICAgICBtZW1zZXQocHJlR3VhcmQoKSwgZ3VhcmRCbG9ja0JlZ2luVmFsLCBndWFy
ZEJsb2NrU2l6ZSk7Ci0gICAgICAgIG1lbXNldChkYXRhKCksICAgICAgdXNlckRhdGFGaWxsLCAg
ICAgICBzaXplKTsKLSAgICAgICAgbWVtc2V0KHBvc3RHdWFyZCgpLCBndWFyZEJsb2NrRW5kVmFs
LCAgIGd1YXJkQmxvY2tTaXplKTsKLSNlbmRpZgotICAgIH0KLQotICAgIHZvaWQgY2hlY2soKSBj
b25zdCB7Ci0gICAgICAgIGNoZWNrR3VhcmRCbG9jayhwcmVHdWFyZCgpLCAgZ3VhcmRCbG9ja0Jl
Z2luVmFsLCAiYmVmb3JlIik7Ci0gICAgICAgIGNoZWNrR3VhcmRCbG9jayhwb3N0R3VhcmQoKSwg
Z3VhcmRCbG9ja0VuZFZhbCwgICAiYWZ0ZXIiKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNoZWNrQWxs
b2NMaXN0KCkgY29uc3Q7Ci0KLSAgICAvLyBSZXR1cm4gdG90YWwgc2l6ZSBuZWVkZWQgdG8gYWNj
b21vZGF0ZSB1c2VyIGJ1ZmZlciBvZiAnc2l6ZScsCi0gICAgLy8gcGx1cyBvdXIgdHJhY2tpbmcg
ZGF0YS4KLSAgICBpbmxpbmUgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShzaXplX3Qgc2l6
ZSkgewotICAgICAgICByZXR1cm4gc2l6ZSArIDIgKiBndWFyZEJsb2NrU2l6ZSArIGhlYWRlclNp
emUoKTsKLSAgICB9Ci0KLSAgICAvLyBPZmZzZXQgZnJvbSBzdXJyb3VuZGluZyBidWZmZXIgdG8g
Z2V0IHRvIHVzZXIgZGF0YSBidWZmZXIuCi0gICAgaW5saW5lIHN0YXRpYyB1bnNpZ25lZCBjaGFy
KiBvZmZzZXRBbGxvY2F0aW9uKHVuc2lnbmVkIGNoYXIqIG0pIHsKLSAgICAgICAgcmV0dXJuIG0g
KyBndWFyZEJsb2NrU2l6ZSArIGhlYWRlclNpemUoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAg
dm9pZCBjaGVja0d1YXJkQmxvY2sodW5zaWduZWQgY2hhciogYmxvY2tNZW0sIHVuc2lnbmVkIGNo
YXIgdmFsLCBjb25zdCBjaGFyKiBsb2NUZXh0KSBjb25zdDsKLQotICAgIC8vIEZpbmQgb2Zmc2V0
cyB0byBwcmUgYW5kIHBvc3QgZ3VhcmQgYmxvY2tzLCBhbmQgdXNlciBkYXRhIGJ1ZmZlcgotICAg
IHVuc2lnbmVkIGNoYXIqIHByZUd1YXJkKCkgIGNvbnN0IHsgcmV0dXJuIG1lbSArIGhlYWRlclNp
emUoKTsgfQotICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEoKSAgICAgIGNvbnN0IHsgcmV0dXJuIHBy
ZUd1YXJkKCkgKyBndWFyZEJsb2NrU2l6ZTsgfQotICAgIHVuc2lnbmVkIGNoYXIqIHBvc3RHdWFy
ZCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEoKSArIHNpemU7IH0KLQotICAgIHNpemVfdCBzaXplOyAg
ICAgICAgICAgICAgICAgIC8vIHNpemUgb2YgdGhlIHVzZXIgZGF0YSBhcmVhCi0gICAgdW5zaWdu
ZWQgY2hhciogbWVtOyAgICAgICAgICAgLy8gYmVnaW5uaW5nIG9mIG91ciBhbGxvY2F0aW9uIChw
dHMgdG8gaGVhZGVyKQotICAgIFRBbGxvY2F0aW9uKiBwcmV2QWxsb2M7ICAgICAgIC8vIHByaW9y
IGFsbG9jYXRpb24gaW4gdGhlIGNoYWluCi0KLSAgICAvLyBTdXBwb3J0IE1TVkMrKyA2LjAKLSAg
ICBjb25zdCBzdGF0aWMgdW5zaWduZWQgY2hhciBndWFyZEJsb2NrQmVnaW5WYWw7Ci0gICAgY29u
c3Qgc3RhdGljIHVuc2lnbmVkIGNoYXIgZ3VhcmRCbG9ja0VuZFZhbDsKLSAgICBjb25zdCBzdGF0
aWMgdW5zaWduZWQgY2hhciB1c2VyRGF0YUZpbGw7Ci0KLSAgICBjb25zdCBzdGF0aWMgc2l6ZV90
IGd1YXJkQmxvY2tTaXplOwotI2lmZGVmIEdVQVJEX0JMT0NLUwotICAgIGlubGluZSBzdGF0aWMg
c2l6ZV90IGhlYWRlclNpemUoKSB7IHJldHVybiBzaXplb2YoVEFsbG9jYXRpb24pOyB9Ci0jZWxz
ZQotICAgIGlubGluZSBzdGF0aWMgc2l6ZV90IGhlYWRlclNpemUoKSB7IHJldHVybiAwOyB9Ci0j
ZW5kaWYKLX07Ci0KLS8vCi0vLyBUaGVyZSBhcmUgc2V2ZXJhbCBzdGFja3MuICBPbmUgaXMgdG8g
dHJhY2sgdGhlIHB1c2hpbmcgYW5kIHBvcHBpbmcKLS8vIG9mIHRoZSB1c2VyLCBhbmQgbm90IHll
dCBpbXBsZW1lbnRlZC4gIFRoZSBvdGhlcnMgYXJlIHNpbXBseSBhIAotLy8gcmVwb3NpdG9yaWVz
IG9mIGZyZWUgcGFnZXMgb3IgdXNlZCBwYWdlcy4KLS8vCi0vLyBQYWdlIHN0YWNrcyBhcmUgbGlu
a2VkIHRvZ2V0aGVyIHdpdGggYSBzaW1wbGUgaGVhZGVyIGF0IHRoZSBiZWdpbm5pbmcKLS8vIG9m
IGVhY2ggYWxsb2NhdGlvbiBvYnRhaW5lZCBmcm9tIHRoZSB1bmRlcmx5aW5nIE9TLiAgTXVsdGkt
cGFnZSBhbGxvY2F0aW9ucwotLy8gYXJlIHJldHVybmVkIHRvIHRoZSBPUy4gIEluZGl2aWR1YWwg
cGFnZSBhbGxvY2F0aW9ucyBhcmUga2VwdCBmb3IgZnV0dXJlCi0vLyByZS11c2UuCi0vLwotLy8g
VGhlICJwYWdlIHNpemUiIHVzZWQgaXMgbm90LCBub3IgbXVzdCBpdCBtYXRjaCwgdGhlIHVuZGVy
bHlpbmcgT1MKLS8vIHBhZ2Ugc2l6ZS4gIEJ1dCwgaGF2aW5nIGl0IGJlIGFib3V0IHRoYXQgc2l6
ZSBvciBlcXVhbCB0byBhIHNldCBvZiAKLS8vIHBhZ2VzIGlzIGxpa2VseSBtb3N0IG9wdGltYWwu
Ci0vLwotY2xhc3MgVFBvb2xBbGxvY2F0b3IgewotcHVibGljOgotICAgIFRQb29sQWxsb2NhdG9y
KGludCBncm93dGhJbmNyZW1lbnQgPSA4KjEwMjQsIGludCBhbGxvY2F0aW9uQWxpZ25tZW50ID0g
MTYpOwotCi0gICAgLy8KLSAgICAvLyBEb24ndCBjYWxsIHRoZSBkZXN0cnVjdG9yIGp1c3QgdG8g
ZnJlZSB1cCB0aGUgbWVtb3J5LCBjYWxsIHBvcCgpCi0gICAgLy8KLSAgICB+VFBvb2xBbGxvY2F0
b3IoKTsKLQotICAgIC8vCi0gICAgLy8gQ2FsbCBwdXNoKCkgdG8gZXN0YWJsaXNoIGEgbmV3IHBs
YWNlIHRvIHBvcCBtZW1vcnkgdG9vLiAgRG9lcyBub3QKLSAgICAvLyBoYXZlIHRvIGJlIGNhbGxl
ZCB0byBnZXQgdGhpbmdzIHN0YXJ0ZWQuCi0gICAgLy8KLSAgICB2b2lkIHB1c2goKTsKLQotICAg
IC8vCi0gICAgLy8gQ2FsbCBwb3AoKSB0byBmcmVlIGFsbCBtZW1vcnkgYWxsb2NhdGVkIHNpbmNl
IHRoZSBsYXN0IGNhbGwgdG8gcHVzaCgpLAotICAgIC8vIG9yIGlmIG5vIGxhc3QgY2FsbCB0byBw
dXNoLCBmcmVlcyBhbGwgbWVtb3J5IHNpbmNlIGZpcnN0IGFsbG9jYXRpb24uCi0gICAgLy8KLSAg
ICB2b2lkIHBvcCgpOwotCi0gICAgLy8KLSAgICAvLyBDYWxsIHBvcEFsbCgpIHRvIGZyZWUgYWxs
IG1lbW9yeSBhbGxvY2F0ZWQuCi0gICAgLy8KLSAgICB2b2lkIHBvcEFsbCgpOwotCi0gICAgLy8K
LSAgICAvLyBDYWxsIGFsbG9jYXRlKCkgdG8gYWN0dWFsbHkgYWNxdWlyZSBtZW1vcnkuICBSZXR1
cm5zIDAgaWYgbm8gbWVtb3J5Ci0gICAgLy8gYXZhaWxhYmxlLCBvdGhlcndpc2UgYSBwcm9wZXJs
eSBhbGlnbmVkIHBvaW50ZXIgdG8gJ251bUJ5dGVzJyBvZiBtZW1vcnkuCi0gICAgLy8KLSAgICB2
b2lkKiBhbGxvY2F0ZShzaXplX3QgbnVtQnl0ZXMpOwotCi0gICAgLy8KLSAgICAvLyBUaGVyZSBp
cyBubyBkZWFsbG9jYXRlLiAgVGhlIHBvaW50IG9mIHRoaXMgY2xhc3MgaXMgdGhhdAotICAgIC8v
IGRlYWxsb2NhdGlvbiBjYW4gYmUgc2tpcHBlZCBieSB0aGUgdXNlciBvZiBpdCwgYXMgdGhlIG1v
ZGVsCi0gICAgLy8gb2YgdXNlIGlzIHRvIHNpbXVsdGFuZW91c2x5IGRlYWxsb2NhdGUgZXZlcnl0
aGluZyBhdCBvbmNlCi0gICAgLy8gYnkgY2FsbGluZyBwb3AoKSwgYW5kIHRvIG5vdCBoYXZlIHRv
IHNvbHZlIG1lbW9yeSBsZWFrIHByb2JsZW1zLgotICAgIC8vCi0KLXByb3RlY3RlZDoKLSAgICBm
cmllbmQgc3RydWN0IHRIZWFkZXI7Ci0gICAgCi0gICAgc3RydWN0IHRIZWFkZXIgewotICAgICAg
ICB0SGVhZGVyKHRIZWFkZXIqIG5leHRQYWdlLCBzaXplX3QgcGFnZUNvdW50KSA6Ci0gICAgICAg
ICAgICBuZXh0UGFnZShuZXh0UGFnZSksCi0gICAgICAgICAgICBwYWdlQ291bnQocGFnZUNvdW50
KQotI2lmZGVmIEdVQVJEX0JMT0NLUwotICAgICAgICAgICwgbGFzdEFsbG9jYXRpb24oMCkKLSNl
bmRpZgotICAgICAgICAgICAgeyB9Ci0KLSAgICAgICAgfnRIZWFkZXIoKSB7Ci0jaWZkZWYgR1VB
UkRfQkxPQ0tTCi0gICAgICAgICAgICBpZiAobGFzdEFsbG9jYXRpb24pCi0gICAgICAgICAgICAg
ICAgbGFzdEFsbG9jYXRpb24tPmNoZWNrQWxsb2NMaXN0KCk7Ci0jZW5kaWYKLSAgICAgICAgfQot
Ci0gICAgICAgIHRIZWFkZXIqIG5leHRQYWdlOwotICAgICAgICBzaXplX3QgcGFnZUNvdW50Owot
I2lmZGVmIEdVQVJEX0JMT0NLUwotICAgICAgICBUQWxsb2NhdGlvbiogbGFzdEFsbG9jYXRpb247
Ci0jZW5kaWYKLSAgICB9OwotCi0gICAgc3RydWN0IHRBbGxvY1N0YXRlIHsKLSAgICAgICAgc2l6
ZV90IG9mZnNldDsKLSAgICAgICAgdEhlYWRlciogcGFnZTsKLSAgICB9OwotICAgIHR5cGVkZWYg
c3RkOjp2ZWN0b3I8dEFsbG9jU3RhdGU+IHRBbGxvY1N0YWNrOwotCi0gICAgLy8gVHJhY2sgYWxs
b2NhdGlvbnMgaWYgYW5kIG9ubHkgaWYgd2UncmUgdXNpbmcgZ3VhcmQgYmxvY2tzCi0gICAgdm9p
ZCogaW5pdGlhbGl6ZUFsbG9jYXRpb24odEhlYWRlciogYmxvY2ssIHVuc2lnbmVkIGNoYXIqIG1l
bW9yeSwgc2l6ZV90IG51bUJ5dGVzKSB7Ci0jaWZkZWYgR1VBUkRfQkxPQ0tTCi0gICAgICAgIG5l
dyhtZW1vcnkpIFRBbGxvY2F0aW9uKG51bUJ5dGVzLCBtZW1vcnksIGJsb2NrLT5sYXN0QWxsb2Nh
dGlvbik7Ci0gICAgICAgIGJsb2NrLT5sYXN0QWxsb2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8
VEFsbG9jYXRpb24qPihtZW1vcnkpOwotI2VuZGlmCi0gICAgICAgIC8vIFRoaXMgaXMgb3B0aW1p
emVkIGVudGlyZWx5IGF3YXkgaWYgR1VBUkRfQkxPQ0tTIGlzIG5vdCBkZWZpbmVkLgotICAgICAg
ICByZXR1cm4gVEFsbG9jYXRpb246Om9mZnNldEFsbG9jYXRpb24obWVtb3J5KTsKLSAgICB9Ci0K
LSAgICBzaXplX3QgcGFnZVNpemU7ICAgICAgICAvLyBncmFudWxhcml0eSBvZiBhbGxvY2F0aW9u
IGZyb20gdGhlIE9TCi0gICAgc2l6ZV90IGFsaWdubWVudDsgICAgICAgLy8gYWxsIHJldHVybmVk
IGFsbG9jYXRpb25zIHdpbGwgYmUgYWxpZ25lZCBhdCAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB0aGlzIGdyYW51bGFyaXR5LCB3aGljaCB3aWxsIGJlIGEgcG93ZXIgb2YgMgotICAg
IHNpemVfdCBhbGlnbm1lbnRNYXNrOwotICAgIHNpemVfdCBoZWFkZXJTa2lwOyAgICAgIC8vIGFt
b3VudCBvZiBtZW1vcnkgdG8gc2tpcCB0byBtYWtlIHJvb20gZm9yIHRoZQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgaGVhZGVyIChiYXNpY2FsbHksIHNpemUgb2YgaGVhZGVy
LCByb3VuZGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICB1cCB0byBtYWtl
IGl0IGFsaWduZWQKLSAgICBzaXplX3QgY3VycmVudFBhZ2VPZmZzZXQ7ICAvLyBuZXh0IG9mZnNl
dCBpbiB0b3Agb2YgaW5Vc2VMaXN0IHRvIGFsbG9jYXRlIGZyb20KLSAgICB0SGVhZGVyKiBmcmVl
TGlzdDsgICAgICAvLyBsaXN0IG9mIHBvcHBlZCBtZW1vcnkKLSAgICB0SGVhZGVyKiBpblVzZUxp
c3Q7ICAgICAvLyBsaXN0IG9mIGFsbCBtZW1vcnkgY3VycmVudGx5IGJlaW5nIHVzZWQKLSAgICB0
QWxsb2NTdGFjayBzdGFjazsgICAgICAvLyBzdGFjayBvZiB3aGVyZSB0byBhbGxvY2F0ZSBmcm9t
LCB0byBwYXJ0aXRpb24gcG9vbAotCi0gICAgaW50IG51bUNhbGxzOyAgICAgICAgICAgLy8ganVz
dCBhbiBpbnRlcmVzdGluZyBzdGF0aXN0aWMKLSAgICBzaXplX3QgdG90YWxCeXRlczsgICAgICAv
LyBqdXN0IGFuIGludGVyZXN0aW5nIHN0YXRpc3RpYwotcHJpdmF0ZToKLSAgICBUUG9vbEFsbG9j
YXRvciYgb3BlcmF0b3I9KGNvbnN0IFRQb29sQWxsb2NhdG9yJik7ICAvLyBkb250IGFsbG93IGFz
c2lnbm1lbnQgb3BlcmF0b3IKLSAgICBUUG9vbEFsbG9jYXRvcihjb25zdCBUUG9vbEFsbG9jYXRv
ciYpOyAgLy8gZG9udCBhbGxvdyBkZWZhdWx0IGNvcHkgY29uc3RydWN0b3IKLX07Ci0KLQotLy8K
LS8vIFRoZXJlIGNvdWxkIHBvdGVudGlhbGx5IGJlIG1hbnkgcG9vbHMgd2l0aCBwb3BzIGhhcHBl
bmluZyBhdAotLy8gZGlmZmVyZW50IHRpbWVzLiAgQnV0IGEgc2ltcGxlIHVzZSBpcyB0byBoYXZl
IGEgZ2xvYmFsIHBvcAotLy8gd2l0aCBldmVyeW9uZSB1c2luZyB0aGUgc2FtZSBnbG9iYWwgYWxs
b2NhdG9yLgotLy8KLWV4dGVybiBUUG9vbEFsbG9jYXRvciogR2V0R2xvYmFsUG9vbEFsbG9jYXRv
cigpOwotZXh0ZXJuIHZvaWQgU2V0R2xvYmFsUG9vbEFsbG9jYXRvcihUUG9vbEFsbG9jYXRvciog
cG9vbEFsbG9jYXRvcik7Ci0KLS8vCi0vLyBUaGlzIFNUTCBjb21wYXRpYmxlIGFsbG9jYXRvciBp
cyBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIHRoZSBhbGxvY2F0b3IKLS8vIHBhcmFtZXRlciB0byB0
ZW1wbGF0aXplZCBTVEwgY29udGFpbmVycywgbGlrZSB2ZWN0b3IgYW5kIG1hcC4KLS8vCi0vLyBJ
dCB3aWxsIHVzZSB0aGUgcG9vbHMgZm9yIGFsbG9jYXRpb24sIGFuZCBub3QKLS8vIGRvIGFueSBk
ZWFsbG9jYXRpb24sIGJ1dCB3aWxsIHN0aWxsIGRvIGRlc3RydWN0aW9uLgotLy8KLXRlbXBsYXRl
PGNsYXNzIFQ+Ci1jbGFzcyBwb29sX2FsbG9jYXRvciB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBz
aXplX3Qgc2l6ZV90eXBlOwotICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsK
LSAgICB0eXBlZGVmIFQqIHBvaW50ZXI7Ci0gICAgdHlwZWRlZiBjb25zdCBUKiBjb25zdF9wb2lu
dGVyOwotICAgIHR5cGVkZWYgVCYgcmVmZXJlbmNlOwotICAgIHR5cGVkZWYgY29uc3QgVCYgY29u
c3RfcmVmZXJlbmNlOwotICAgIHR5cGVkZWYgVCB2YWx1ZV90eXBlOwotCi0gICAgdGVtcGxhdGU8
Y2xhc3MgT3RoZXI+IAotICAgIHN0cnVjdCByZWJpbmQgewotICAgICAgICB0eXBlZGVmIHBvb2xf
YWxsb2NhdG9yPE90aGVyPiBvdGhlcjsKLSAgICB9OwotICAgIHBvaW50ZXIgYWRkcmVzcyhyZWZl
cmVuY2UgeCkgY29uc3QgeyByZXR1cm4gJng7IH0KLSAgICBjb25zdF9wb2ludGVyIGFkZHJlc3Mo
Y29uc3RfcmVmZXJlbmNlIHgpIGNvbnN0IHsgcmV0dXJuICZ4OyB9Ci0KLSAgICBwb29sX2FsbG9j
YXRvcigpIDogYWxsb2NhdG9yKEdldEdsb2JhbFBvb2xBbGxvY2F0b3IoKSkgeyB9Ci0gICAgcG9v
bF9hbGxvY2F0b3IoVFBvb2xBbGxvY2F0b3ImIGEpIDogYWxsb2NhdG9yKCZhKSB7IH0KLSAgICBw
b29sX2FsbG9jYXRvcihjb25zdCBwb29sX2FsbG9jYXRvcjxUPiYgcCkgOiBhbGxvY2F0b3IocC5h
bGxvY2F0b3IpIHsgfQotCi0gICAgdGVtcGxhdGUgPGNsYXNzIE90aGVyPgotICAgIHBvb2xfYWxs
b2NhdG9yPFQ+JiBvcGVyYXRvcj0oY29uc3QgcG9vbF9hbGxvY2F0b3I8T3RoZXI+JiBwKSB7Ci0g
ICAgICBhbGxvY2F0b3IgPSBwLmFsbG9jYXRvcjsKLSAgICAgIHJldHVybiAqdGhpczsKLSAgICB9
Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBPdGhlcj4KLSAgICBwb29sX2FsbG9jYXRvcihjb25zdCBw
b29sX2FsbG9jYXRvcjxPdGhlcj4mIHApIDogYWxsb2NhdG9yKCZwLmdldEFsbG9jYXRvcigpKSB7
IH0KLQotI2lmIGRlZmluZWQoX19TVU5QUk9fQ0MpICYmICFkZWZpbmVkKF9SV1NURF9BTExPQ0FU
T1IpCi0gICAgLy8gbGliQ1N0ZCBvbiBzb21lIHBsYXRmb3JtcyBoYXZlIGEgZGlmZmVyZW50IGFs
bG9jYXRlL2RlYWxsb2NhdGUgaW50ZXJmYWNlLgotICAgIC8vIENhbGxlciBwcmUtYmFrZXMgc2l6
ZW9mKFQpIGludG8gJ24nIHdoaWNoIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYmUKLSAgICAv
LyBhbGxvY2F0ZWQsIG5vdCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzLgotICAgIHZvaWQqIGFsbG9j
YXRlKHNpemVfdHlwZSBuKSB7IAotICAgICAgICByZXR1cm4gZ2V0QWxsb2NhdG9yKCkuYWxsb2Nh
dGUobik7Ci0gICAgfQotICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdHlwZSBuLCBjb25zdCB2b2lk
KikgewotICAgICAgICByZXR1cm4gZ2V0QWxsb2NhdG9yKCkuYWxsb2NhdGUobik7Ci0gICAgfQot
ICAgIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiwgc2l6ZV90eXBlKSB7fQotI2Vsc2UKLSAgICBwb2lu
dGVyIGFsbG9jYXRlKHNpemVfdHlwZSBuKSB7IAotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxwb2ludGVyPihnZXRBbGxvY2F0b3IoKS5hbGxvY2F0ZShuICogc2l6ZW9mKFQpKSk7Ci0g
ICAgfQotICAgIHBvaW50ZXIgYWxsb2NhdGUoc2l6ZV90eXBlIG4sIGNvbnN0IHZvaWQqKSB7IAot
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxwb2ludGVyPihnZXRBbGxvY2F0b3IoKS5h
bGxvY2F0ZShuICogc2l6ZW9mKFQpKSk7Ci0gICAgfQotICAgIHZvaWQgZGVhbGxvY2F0ZShwb2lu
dGVyLCBzaXplX3R5cGUpIHt9Ci0jZW5kaWYgIC8vIF9SV1NURF9BTExPQ0FUT1IKLQotICAgIHZv
aWQgY29uc3RydWN0KHBvaW50ZXIgcCwgY29uc3QgVCYgdmFsKSB7IG5ldyAoKHZvaWQgKilwKSBU
KHZhbCk7IH0KLSAgICB2b2lkIGRlc3Ryb3kocG9pbnRlciBwKSB7IHAtPlQ6On5UKCk7IH0KLQot
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBwb29sX2FsbG9jYXRvciYgcmhzKSBjb25zdCB7IHJl
dHVybiAmZ2V0QWxsb2NhdG9yKCkgPT0gJnJocy5nZXRBbGxvY2F0b3IoKTsgfQotICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBwb29sX2FsbG9jYXRvciYgcmhzKSBjb25zdCB7IHJldHVybiAmZ2V0
QWxsb2NhdG9yKCkgIT0gJnJocy5nZXRBbGxvY2F0b3IoKTsgfQotCi0gICAgc2l6ZV90eXBlIG1h
eF9zaXplKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPigtMSkgLyBzaXpl
b2YoVCk7IH0KLSAgICBzaXplX3R5cGUgbWF4X3NpemUoaW50IHNpemUpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oLTEpIC8gc2l6ZTsgfQotCi0gICAgdm9pZCBzZXRBbGxv
Y2F0b3IoVFBvb2xBbGxvY2F0b3IqIGEpIHsgYWxsb2NhdG9yID0gYTsgfQotICAgIFRQb29sQWxs
b2NhdG9yJiBnZXRBbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiAqYWxsb2NhdG9yOyB9Ci0KLXBy
b3RlY3RlZDoKLSAgICBUUG9vbEFsbG9jYXRvciogYWxsb2NhdG9yOwotfTsKLQotI2VuZGlmIC8v
IF9QT09MQUxMT0NfSU5DTFVERURfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvUHJhZ21hLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvUHJhZ21hLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmNzQ0MTIzYjgy
ODk0OThjMzE3OTE0ZWFkM2RmMTM2M2FlODYxNmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1ByYWdtYS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0K
LSNpZm5kZWYgQ09NUElMRVJfUFJBR01BX0hfCi0jZGVmaW5lIENPTVBJTEVSX1BSQUdNQV9IXwot
Ci1zdHJ1Y3QgVFByYWdtYSB7Ci0gICAgLy8gQnkgZGVmYXVsdCBvcHRpbWl6YXRpb24gaXMgdHVy
bmVkIG9uIGFuZCBkZWJ1ZyBpcyB0dXJuZWQgb2ZmLgotICAgIFRQcmFnbWEoKSA6IG9wdGltaXpl
KHRydWUpLCBkZWJ1ZyhmYWxzZSkgeyB9Ci0gICAgVFByYWdtYShib29sIG8sIGJvb2wgZCkgOiBv
cHRpbWl6ZShvKSwgZGVidWcoZCkgeyB9Ci0KLSAgICBib29sIG9wdGltaXplOwotICAgIGJvb2wg
ZGVidWc7Ci19OwotCi0jZW5kaWYgLy8gQ09NUElMRVJfUFJBR01BX0hfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUXVhbGlmaWVyQWxpdmUuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJhNjg3NGViN2JlN2NiMGU3ZmZjY2Q1OWVh
ZGJjMGI1NDc4NDhjMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUXVhbGlmaWVyQWxpdmUu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
I2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotCi1jbGFzcyBUQWxpdmVUcmF2ZXJz
ZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7Ci1wdWJsaWM6Ci0gICAgVEFsaXZlVHJhdmVy
c2VyKFRRdWFsaWZpZXIgcSkgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSwg
dHJ1ZSksIGZvdW5kKGZhbHNlKSwgcXVhbGlmaWVyKHEpCi0gICAgewotICAgIH0KLQotCWJvb2wg
d2FzRm91bmQoKSB7IHJldHVybiBmb3VuZDsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgYm9vbCBmb3Vu
ZDsKLSAgICBUUXVhbGlmaWVyIHF1YWxpZmllcjsKLQotICAgIHZvaWQgdmlzaXRTeW1ib2woVElu
dGVybVN5bWJvbCopOwotICAgIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQsIFRJbnRlcm1TZWxl
Y3Rpb24qKTsKLX07Ci0KLS8vCi0vLyBSZXBvcnQgd2hldGhlciBvciBub3QgYSB2YXJpYWJsZSBv
ZiB0aGUgZ2l2ZW4gcXVhbGlmaWVyIHR5cGUKLS8vIGlzIGd1YXJhbnRlZWQgd3JpdHRlbi4gIE5v
dCBhbHdheXMgcG9zc2libGUgdG8gZGV0ZXJtaW5lIGlmCi0vLyBpdCBpcyB3cml0dGVuIGNvbmRp
dGlvbmFsbHkuCi0vLwotLy8gPz8gSXQgZG9lcyBub3QgZG8gdGhpcyB3ZWxsIHlldCwgdGhpcyBp
cyBqdXN0IGEgcGxhY2UgaG9sZGVyCi0vLyB0aGF0IHNpbXBseSBkZXRlcm1pbmVzIGlmIGl0IHdh
cyByZWZlcmVuY2UgYXQgYWxsLCBhbnl3aGVyZS4KLS8vCi1ib29sIFF1YWxpZmllcldyaXR0ZW4o
VEludGVybU5vZGUqIG5vZGUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyKQotewotICAgIFRBbGl2ZVRy
YXZlcnNlciBpdChxdWFsaWZpZXIpOwotCi0gICAgaWYgKG5vZGUpCi0gICAgICAgIG5vZGUtPnRy
YXZlcnNlKCZpdCk7Ci0KLSAgICByZXR1cm4gaXQud2FzRm91bmQoKTsKLX0KLQotdm9pZCBUQWxp
dmVUcmF2ZXJzZXI6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCi17Ci0gICAgLy8K
LSAgICAvLyBJZiBpdCdzIHdoYXQgd2UncmUgbG9va2luZyBmb3IsIHJlY29yZCBpdC4KLSAgICAv
LwotICAgIGlmIChub2RlLT5nZXRRdWFsaWZpZXIoKSA9PSBxdWFsaWZpZXIpCi0gICAgICAgIGZv
dW5kID0gdHJ1ZTsKLX0KLQotYm9vbCBUQWxpdmVUcmF2ZXJzZXI6OnZpc2l0U2VsZWN0aW9uKFZp
c2l0IHByZVZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBub2RlKQotewotICAgIGlmICh3YXNGb3Vu
ZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9RdWFsaWZpZXJBbGl2
ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZl
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3MmEwNmY3MjE5MmFmMWQzNzhmNzJk
MWVhMjEwZGFlODk5YmJmNGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFs
aXZlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0K
LWJvb2wgUXVhbGlmaWVyV3JpdHRlbihUSW50ZXJtTm9kZSogcm9vdCwgVFF1YWxpZmllcik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVtb3ZlVHJl
ZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0YjhjMWU2M2UxZGFlMDU5YTQxOWU5
MmMxYjc1MjQ4MGEwMWQ2ZDguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
I2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1Jl
bW92ZVRyZWUuaCIKLQotLy8KLS8vIENvZGUgdG8gcmVjdXJzaXZlbHkgZGVsZXRlIHRoZSBpbnRl
cm1lZGlhdGUgdHJlZS4KLS8vCi0KLWNsYXNzIFJlbW92ZVRyZWUgOiBwdWJsaWMgVEludGVybVRy
YXZlcnNlcgotewotcHVibGljOgotCVJlbW92ZVRyZWUoKSA6IFRJbnRlcm1UcmF2ZXJzZXIoZmFs
c2UsIGZhbHNlLCB0cnVlKQotCXsKLQl9Ci0KLXByb3RlY3RlZDoKLQl2b2lkIHZpc2l0U3ltYm9s
KFRJbnRlcm1TeW1ib2wqKTsKLQl2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3Rh
bnRVbmlvbiopOwotCWJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkq
KTsKLQlib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSopOwotCWJvb2wg
dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKLQlib29sIHZp
c2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7Ci19OwotCi12b2lk
IFJlbW92ZVRyZWU6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCi17Ci0JZGVsZXRl
IG5vZGU7Ci19Ci0KLWJvb2wgUmVtb3ZlVHJlZTo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1CaW5hcnkqIG5vZGUpCi17Ci0JZGVsZXRlIG5vZGU7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBSZW1vdmVUcmVlOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkq
IG5vZGUpCi17Ci0gICAgZGVsZXRlIG5vZGU7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBS
ZW1vdmVUcmVlOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSog
bm9kZSkKLXsKLQlkZWxldGUgbm9kZTsKLQotCXJldHVybiB0cnVlOwotfQotCi1ib29sIFJlbW92
ZVRyZWU6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBub2Rl
KQotewotCWRlbGV0ZSBub2RlOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVtb3ZlVHJl
ZTo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKQotewotCWRl
bGV0ZSBub2RlOwotfQotCi0vLwotLy8gRW50cnkgcG9pbnQuCi0vLwotdm9pZCBSZW1vdmVBbGxU
cmVlTm9kZXMoVEludGVybU5vZGUqIHJvb3QpCi17Ci0gICAgUmVtb3ZlVHJlZSBpdDsKLQotICAg
IHJvb3QtPnRyYXZlcnNlKCZpdCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA5N2E4MjE2NzljMjNmYjkyODBiM2VkZjRhN2U4ZmNiZTQxNTYxNDY3Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAK
LS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLXZvaWQgUmVtb3ZlQWxsVHJlZU5vZGVzKFRJbnRlcm1Ob2Rl
Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVu
YW1lRnVuY3Rpb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9SZW5h
bWVGdW5jdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTA4YmZkZGI4MjAx
NzM1M2Y4N2I0NWQ1NTAyYWI3NGVmODFhMjdiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9S
ZW5hbWVGdW5jdGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
LS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfUkVOQU1FX0ZVTkNUSU9OCi0jZGVmaW5lIENPTVBJTEVS
X1JFTkFNRV9GVU5DVElPTgotCi0jaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCi0K
LS8vCi0vLyBSZW5hbWVzIGEgZnVuY3Rpb24sIGluY2x1ZGluZyBpdHMgZGVjbGFyYXRpb24gYW5k
IGFueSBjYWxscyB0byBpdC4KLS8vCi1jbGFzcyBSZW5hbWVGdW5jdGlvbiA6IHB1YmxpYyBUSW50
ZXJtVHJhdmVyc2VyCi17Ci1wdWJsaWM6Ci0gICAgUmVuYW1lRnVuY3Rpb24oY29uc3QgVFN0cmlu
ZyYgb2xkRnVuY3Rpb25OYW1lLCBjb25zdCBUU3RyaW5nJiBuZXdGdW5jdGlvbk5hbWUpCi0gICAg
OiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSkKLSAgICAsIG1PbGRGdW5jdGlv
bk5hbWUob2xkRnVuY3Rpb25OYW1lKQotICAgICwgbU5ld0Z1bmN0aW9uTmFtZShuZXdGdW5jdGlv
bk5hbWUpIHt9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQs
IFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCi0gICAgewotICAgICAgICBUT3BlcmF0b3Igb3AgPSBu
b2RlLT5nZXRPcCgpOwotICAgICAgICBpZiAoKG9wID09IEVPcEZ1bmN0aW9uIHx8IG9wID09IEVP
cEZ1bmN0aW9uQ2FsbCkgJiYgbm9kZS0+Z2V0TmFtZSgpID09IG1PbGRGdW5jdGlvbk5hbWUpCi0g
ICAgICAgICAgICBub2RlLT5zZXROYW1lKG1OZXdGdW5jdGlvbk5hbWUpOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgY29uc3QgVFN0cmluZyBtT2xkRnVuY3Rp
b25OYW1lOwotICAgIGNvbnN0IFRTdHJpbmcgbU5ld0Z1bmN0aW9uTmFtZTsKLX07Ci0KLSNlbmRp
ZiAgLy8gQ09NUElMRVJfUkVOQU1FX0ZVTkNUSU9OCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2VhcmNoU3ltYm9sLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9TZWFyY2hTeW1ib2wuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA5MzY4ZjFhNGZhZjc2NDdjNGI1OWQzNDJhNzg4ZmNmMDAzMmMzZWI3Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TZWFyY2hTeW1ib2wuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMzggKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLS8vIFNlYXJjaFN5bWJvbCBpcyBh
biBBU1QgdHJhdmVyc2VyIHRvIGRldGVjdCB0aGUgdXNlIG9mIGEgZ2l2ZW4gc3ltYm9sIG5hbWUK
LS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9TZWFyY2hTeW1ib2wuaCIKLQotI2luY2x1ZGUgImNv
bXBpbGVyL0luZm9TaW5rLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0SExTTC5oIgotCi1u
YW1lc3BhY2Ugc2gKLXsKLVNlYXJjaFN5bWJvbDo6U2VhcmNoU3ltYm9sKGNvbnN0IFRTdHJpbmcg
JnN5bWJvbCkgOiBtU3ltYm9sKHN5bWJvbCkKLXsKLSAgICBtYXRjaCA9IGZhbHNlOwotfQotCi12
b2lkIFNlYXJjaFN5bWJvbDo6dHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpCi17Ci0gICAgbm9k
ZS0+dHJhdmVyc2UodGhpcyk7Ci19Ci0KLXZvaWQgU2VhcmNoU3ltYm9sOjp2aXNpdFN5bWJvbChU
SW50ZXJtU3ltYm9sICpzeW1ib2xOb2RlKQotewotICAgIGlmIChzeW1ib2xOb2RlLT5nZXRTeW1i
b2woKSA9PSBtU3ltYm9sKQotICAgIHsKLSAgICAgICAgbWF0Y2ggPSB0cnVlOwotICAgIH0KLX0K
LQotYm9vbCBTZWFyY2hTeW1ib2w6OmZvdW5kTWF0Y2goKSBjb25zdAotewotICAgIHJldHVybiBt
YXRjaDsKLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9TZWFyY2hTeW1ib2wuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9TZWFyY2hTeW1ib2wuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjI0YmM3N2M2
ZjJkZmUzMWM3M2VkNjkzODViMzNjNmUwNWJmMDQyZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvU2VhcmNoU3ltYm9sLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vLwotLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCi0vLwotLy8gU2VhcmNoU3ltYm9sIGlzIGFuIEFTVCB0cmF2ZXJzZXIgdG8gZGV0ZWN0
IHRoZSB1c2Ugb2YgYSBnaXZlbiBzeW1ib2wgbmFtZQotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9T
RUFSQ0hTWU1CT0xfSF8KLSNkZWZpbmUgQ09NUElMRVJfU0VBUkNIU1lNQk9MX0hfCi0KLSNpbmNs
dWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9QYXJzZUNv
bnRleHQuaCIKLQotbmFtZXNwYWNlIHNoCi17Ci1jbGFzcyBTZWFyY2hTeW1ib2wgOiBwdWJsaWMg
VEludGVybVRyYXZlcnNlcgotewotICBwdWJsaWM6Ci0gICAgU2VhcmNoU3ltYm9sKGNvbnN0IFRT
dHJpbmcgJnN5bWJvbCk7Ci0KLSAgICB2b2lkIHRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKTsK
LSAgICB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUpOwotCi0gICAg
Ym9vbCBmb3VuZE1hdGNoKCkgY29uc3Q7Ci0KLSAgcHJvdGVjdGVkOgotICAgIGNvbnN0IFRTdHJp
bmcgJm1TeW1ib2w7Ci0gICAgYm9vbCBtYXRjaDsKLX07Ci19Ci0KLSNlbmRpZiAgIC8vIENPTVBJ
TEVSX1NFQVJDSFNZTUJPTF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1NoSGFuZGxlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvU2hIYW5kbGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIxZDMzMWVh
OWRmMTNmMDA4OGMxOGU3NmM5MWRiYWZmYTRlZDc0MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvU2hIYW5kbGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3MCArMCwwIEBACi0vLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0vLwotCi0jaWZuZGVmIF9TSEhBTkRMRV9JTkNMVURFRF8KLSNkZWZpbmUgX1NISEFORExF
X0lOQ0xVREVEXwotCi0vLwotLy8gTWFjaGluZSBpbmRlcGVuZGVudCBwYXJ0IG9mIHRoZSBjb21w
aWxlciBwcml2YXRlIG9iamVjdHMKLS8vIHNlbnQgYXMgU2hIYW5kbGUgdG8gdGhlIGRyaXZlci4K
LS8vCi0vLyBUaGlzIHNob3VsZCBub3QgYmUgaW5jbHVkZWQgYnkgZHJpdmVyIGNvZGUuCi0vLwot
Ci0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCi0KLSNpbmNsdWRlICJjb21waWxlci9C
dWlsdEluRnVuY3Rpb25FbXVsYXRvci5oIgotI2luY2x1ZGUgImNvbXBpbGVyL0V4dGVuc2lvbkJl
aGF2aW9yLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvSGFzaE5hbWVzLmgiCi0jaW5jbHVkZSAiY29t
cGlsZXIvSW5mb1NpbmsuaCIKLSNpbmNsdWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5oIgotI2lu
Y2x1ZGUgImNvbXBpbGVyL1ZhcmlhYmxlSW5mby5oIgotI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nv
bXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oIgotCi1jbGFzcyBMb25nTmFtZU1hcDsKLWNsYXNz
IFRDb21waWxlcjsKLWNsYXNzIFREZXBlbmRlbmN5R3JhcGg7Ci1jbGFzcyBUcmFuc2xhdG9ySExT
TDsKLQotLy8KLS8vIEhlbHBlciBmdW5jdGlvbiB0byBpZGVudGlmeSBzcGVjcyB0aGF0IGFyZSBi
YXNlZCBvbiB0aGUgV2ViR0wgc3BlYywKLS8vIGxpa2UgdGhlIENTUyBTaGFkZXJzIHNwZWMuCi0v
LwotYm9vbCBpc1dlYkdMQmFzZWRTcGVjKFNoU2hhZGVyU3BlYyBzcGVjKTsKLQotLy8KLS8vIFRo
ZSBiYXNlIGNsYXNzIHVzZWQgdG8gYmFjayBoYW5kbGVzIHJldHVybmVkIHRvIHRoZSBkcml2ZXIu
Ci0vLwotY2xhc3MgVFNoSGFuZGxlQmFzZSB7Ci1wdWJsaWM6Ci0gICAgVFNoSGFuZGxlQmFzZSgp
OwotICAgIHZpcnR1YWwgflRTaEhhbmRsZUJhc2UoKTsKLSAgICB2aXJ0dWFsIFRDb21waWxlciog
Z2V0QXNDb21waWxlcigpIHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIFRyYW5zbGF0b3JITFNM
KiBnZXRBc1RyYW5zbGF0b3JITFNMKCkgeyByZXR1cm4gMDsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAg
Ly8gTWVtb3J5IGFsbG9jYXRvci4gQWxsb2NhdGVzIGFuZCB0cmFja3MgbWVtb3J5IHJlcXVpcmVk
IGJ5IHRoZSBjb21waWxlci4KLSAgICAvLyBEZWFsbG9jYXRlcyBhbGwgbWVtb3J5IHdoZW4gY29t
cGlsZXIgaXMgZGVzdHJ1Y3RlZC4KLSAgICBUUG9vbEFsbG9jYXRvciBhbGxvY2F0b3I7Ci19Owot
Ci0vLwotLy8gVGhlIGJhc2UgY2xhc3MgZm9yIHRoZSBtYWNoaW5lIGRlcGVuZGVudCBjb21waWxl
ciB0byBkZXJpdmUgZnJvbQotLy8gZm9yIG1hbmFnaW5nIG9iamVjdCBjb2RlIGZyb20gdGhlIGNv
bXBpbGUuCi0vLwotY2xhc3MgVENvbXBpbGVyIDogcHVibGljIFRTaEhhbmRsZUJhc2UgewotcHVi
bGljOgotICAgIFRDb21waWxlcihTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMp
OwotICAgIHZpcnR1YWwgflRDb21waWxlcigpOwotICAgIHZpcnR1YWwgVENvbXBpbGVyKiBnZXRB
c0NvbXBpbGVyKCkgeyByZXR1cm4gdGhpczsgfQotCi0gICAgYm9vbCBJbml0KGNvbnN0IFNoQnVp
bHRJblJlc291cmNlcyYgcmVzb3VyY2VzKTsKLSAgICBib29sIGNvbXBpbGUoY29uc3QgY2hhciog
Y29uc3Qgc2hhZGVyU3RyaW5nc1tdLAotICAgICAgICAgICAgICAgICBzaXplX3QgbnVtU3RyaW5n
cywKLSAgICAgICAgICAgICAgICAgaW50IGNvbXBpbGVPcHRpb25zKTsKLQotICAgIC8vIEdldCBy
ZXN1bHRzIG9mIHRoZSBsYXN0IGNvbXBpbGF0aW9uLgotICAgIFRJbmZvU2luayYgZ2V0SW5mb1Np
bmsoKSB7IHJldHVybiBpbmZvU2luazsgfQotICAgIGNvbnN0IFRWYXJpYWJsZUluZm9MaXN0JiBn
ZXRBdHRyaWJzKCkgY29uc3QgeyByZXR1cm4gYXR0cmliczsgfQotICAgIGNvbnN0IFRWYXJpYWJs
ZUluZm9MaXN0JiBnZXRVbmlmb3JtcygpIGNvbnN0IHsgcmV0dXJuIHVuaWZvcm1zOyB9Ci0gICAg
Y29uc3QgVFZhcmlhYmxlSW5mb0xpc3QmIGdldFZhcnlpbmdzKCkgY29uc3QgeyByZXR1cm4gdmFy
eWluZ3M7IH0KLSAgICBpbnQgZ2V0TWFwcGVkTmFtZU1heExlbmd0aCgpIGNvbnN0OwotCi0gICAg
U2hIYXNoRnVuY3Rpb242NCBnZXRIYXNoRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBoYXNoRnVu
Y3Rpb247IH0KLSAgICBOYW1lTWFwJiBnZXROYW1lTWFwKCkgeyByZXR1cm4gbmFtZU1hcDsgfQot
ICAgIFRTeW1ib2xUYWJsZSYgZ2V0U3ltYm9sVGFibGUoKSB7IHJldHVybiBzeW1ib2xUYWJsZTsg
fQotCi1wcm90ZWN0ZWQ6Ci0gICAgU2hTaGFkZXJUeXBlIGdldFNoYWRlclR5cGUoKSBjb25zdCB7
IHJldHVybiBzaGFkZXJUeXBlOyB9Ci0gICAgU2hTaGFkZXJTcGVjIGdldFNoYWRlclNwZWMoKSBj
b25zdCB7IHJldHVybiBzaGFkZXJTcGVjOyB9Ci0gICAgLy8gSW5pdGlhbGl6ZSBzeW1ib2wtdGFi
bGUgd2l0aCBidWlsdC1pbiBzeW1ib2xzLgotICAgIGJvb2wgSW5pdEJ1aWx0SW5TeW1ib2xUYWJs
ZShjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291cmNlcyk7Ci0gICAgLy8gQ2xlYXJzIHRo
ZSByZXN1bHRzIGZyb20gdGhlIHByZXZpb3VzIGNvbXBpbGF0aW9uLgotICAgIHZvaWQgY2xlYXJS
ZXN1bHRzKCk7Ci0gICAgLy8gUmV0dXJuIHRydWUgaWYgZnVuY3Rpb24gcmVjdXJzaW9uIGlzIGRl
dGVjdGVkIG9yIGNhbGwgZGVwdGggZXhjZWVkZWQuCi0gICAgYm9vbCBkZXRlY3RDYWxsRGVwdGgo
VEludGVybU5vZGUqIHJvb3QsIFRJbmZvU2luayYgaW5mb1NpbmssIGJvb2wgbGltaXRDYWxsU3Rh
Y2tEZXB0aCk7Ci0gICAgLy8gUmV3cml0ZXMgYSBzaGFkZXIncyBpbnRlcm1lZGlhdGUgdHJlZSBh
Y2NvcmRpbmcgdG8gdGhlIENTUyBTaGFkZXJzIHNwZWMuCi0gICAgdm9pZCByZXdyaXRlQ1NTU2hh
ZGVyKFRJbnRlcm1Ob2RlKiByb290KTsKLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVu
IHNoYWRlciBkb2VzIG5vdCBleGNlZWQgdGhlIG1pbmltdW0KLSAgICAvLyBmdW5jdGlvbmFsaXR5
IG1hbmRhdGVkIGluIEdMU0wgMS4wIHNwZWMgQXBwZW5kaXggQS4KLSAgICBib29sIHZhbGlkYXRl
TGltaXRhdGlvbnMoVEludGVybU5vZGUqIHJvb3QpOwotICAgIC8vIENvbGxlY3QgaW5mbyBmb3Ig
YWxsIGF0dHJpYnMsIHVuaWZvcm1zLCB2YXJ5aW5ncy4KLSAgICB2b2lkIGNvbGxlY3RWYXJpYWJs
ZXMoVEludGVybU5vZGUqIHJvb3QpOwotICAgIC8vIE1hcCBsb25nIHZhcmlhYmxlIG5hbWVzIGlu
dG8gc2hvcnRlciBvbmVzLgotICAgIHZvaWQgbWFwTG9uZ1ZhcmlhYmxlTmFtZXMoVEludGVybU5v
ZGUqIHJvb3QpOwotICAgIC8vIFRyYW5zbGF0ZSB0byBvYmplY3QgY29kZS4KLSAgICB2aXJ0dWFs
IHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KSA9IDA7Ci0gICAgLy8gUmV0dXJucyB0
cnVlIGlmLCBhZnRlciBhcHBseWluZyB0aGUgcGFja2luZyBydWxlcyBpbiB0aGUgR0xTTCAxLjAx
NyBzcGVjCi0gICAgLy8gQXBwZW5kaXggQSwgc2VjdGlvbiA3LCB0aGUgc2hhZGVyIGRvZXMgbm90
IHVzZSB0b28gbWFueSB1bmlmb3JtcyBvciB2YXJ5aW5ncy4KLSAgICBib29sIGVuZm9yY2VQYWNr
aW5nUmVzdHJpY3Rpb25zKCk7Ci0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzaGFkZXIgcGFz
c2VzIHRoZSByZXN0cmljdGlvbnMgdGhhdCBhaW0gdG8gcHJldmVudCB0aW1pbmcgYXR0YWNrcy4K
LSAgICBib29sIGVuZm9yY2VUaW1pbmdSZXN0cmljdGlvbnMoVEludGVybU5vZGUqIHJvb3QsIGJv
b2wgb3V0cHV0R3JhcGgpOwotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2hhZGVyIGRvZXMg
bm90IHVzZSBzYW1wbGVycy4KLSAgICBib29sIGVuZm9yY2VWZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0
cmljdGlvbnMoVEludGVybU5vZGUqIHJvb3QpOwotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUg
c2hhZGVyIGRvZXMgbm90IHVzZSBzYW1wbGVyIGRlcGVuZGVudCB2YWx1ZXMgdG8gYWZmZWN0IGNv
bnRyb2wgCi0gICAgLy8gZmxvdyBvciBpbiBvcGVyYXRpb25zIHdob3NlIHRpbWUgY2FuIGRlcGVu
ZCBvbiB0aGUgaW5wdXQgdmFsdWVzLgotICAgIGJvb2wgZW5mb3JjZUZyYWdtZW50U2hhZGVyVGlt
aW5nUmVzdHJpY3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKTsKLSAgICAvLyBS
ZXR1cm4gdHJ1ZSBpZiB0aGUgbWF4aW11bSBleHByZXNzaW9uIGNvbXBsZXhpdHkgYmVsb3cgdGhl
IGxpbWl0LgotICAgIGJvb2wgbGltaXRFeHByZXNzaW9uQ29tcGxleGl0eShUSW50ZXJtTm9kZSog
cm9vdCk7Ci0gICAgLy8gR2V0IGJ1aWx0LWluIGV4dGVuc2lvbnMgd2l0aCBkZWZhdWx0IGJlaGF2
aW9yLgotICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZ2V0RXh0ZW5zaW9uQmVoYXZpb3Io
KSBjb25zdDsKLSAgICAvLyBHZXQgdGhlIHJlc291cmNlcyBzZXQgYnkgSW5pdEJ1aWx0SW5TeW1i
b2xUYWJsZQotICAgIGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyYgZ2V0UmVzb3VyY2VzKCkgY29u
c3Q7Ci0KLSAgICBjb25zdCBBcnJheUJvdW5kc0NsYW1wZXImIGdldEFycmF5Qm91bmRzQ2xhbXBl
cigpIGNvbnN0OwotICAgIFNoQXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kgZ2V0QXJyYXlJbmRl
eENsYW1waW5nU3RyYXRlZ3koKSBjb25zdDsKLSAgICBjb25zdCBCdWlsdEluRnVuY3Rpb25FbXVs
YXRvciYgZ2V0QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAg
ICBTaFNoYWRlclR5cGUgc2hhZGVyVHlwZTsKLSAgICBTaFNoYWRlclNwZWMgc2hhZGVyU3BlYzsK
LQotICAgIGludCBtYXhVbmlmb3JtVmVjdG9yczsKLSAgICBpbnQgbWF4VmFyeWluZ1ZlY3RvcnM7
Ci0gICAgaW50IG1heEV4cHJlc3Npb25Db21wbGV4aXR5OwotICAgIGludCBtYXhDYWxsU3RhY2tE
ZXB0aDsKLQotICAgIFNoQnVpbHRJblJlc291cmNlcyBjb21waWxlUmVzb3VyY2VzOwotCi0gICAg
Ly8gQnVpbHQtaW4gc3ltYm9sIHRhYmxlIGZvciB0aGUgZ2l2ZW4gbGFuZ3VhZ2UsIHNwZWMsIGFu
ZCByZXNvdXJjZXMuCi0gICAgLy8gSXQgaXMgcHJlc2VydmVkIGZyb20gY29tcGlsZS10by1jb21w
aWxlLgotICAgIFRTeW1ib2xUYWJsZSBzeW1ib2xUYWJsZTsKLSAgICAvLyBCdWlsdC1pbiBleHRl
bnNpb25zIHdpdGggZGVmYXVsdCBiZWhhdmlvci4KLSAgICBURXh0ZW5zaW9uQmVoYXZpb3IgZXh0
ZW5zaW9uQmVoYXZpb3I7Ci0gICAgYm9vbCBmcmFnbWVudFByZWNpc2lvbkhpZ2g7Ci0KLSAgICBB
cnJheUJvdW5kc0NsYW1wZXIgYXJyYXlCb3VuZHNDbGFtcGVyOwotICAgIFNoQXJyYXlJbmRleENs
YW1waW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJhdGVneTsKLSAgICBCdWlsdEluRnVuY3Rpb25FbXVs
YXRvciBidWlsdEluRnVuY3Rpb25FbXVsYXRvcjsKLQotICAgIC8vIFJlc3VsdHMgb2YgY29tcGls
YXRpb24uCi0gICAgVEluZm9TaW5rIGluZm9TaW5rOyAgLy8gT3V0cHV0IHNpbmsuCi0gICAgVFZh
cmlhYmxlSW5mb0xpc3QgYXR0cmliczsgIC8vIEFjdGl2ZSBhdHRyaWJ1dGVzIGluIHRoZSBjb21w
aWxlZCBzaGFkZXIuCi0gICAgVFZhcmlhYmxlSW5mb0xpc3QgdW5pZm9ybXM7ICAvLyBBY3RpdmUg
dW5pZm9ybXMgaW4gdGhlIGNvbXBpbGVkIHNoYWRlci4KLSAgICBUVmFyaWFibGVJbmZvTGlzdCB2
YXJ5aW5nczsgIC8vIFZhcnlpbmdzIGluIHRoZSBjb21waWxlZCBzaGFkZXIuCi0KLSAgICAvLyBD
YWNoZWQgY29weSBvZiB0aGUgcmVmLWNvdW50ZWQgc2luZ2xldG9uLgotICAgIExvbmdOYW1lTWFw
KiBsb25nTmFtZU1hcDsKLQotICAgIC8vIG5hbWUgaGFzaGluZy4KLSAgICBTaEhhc2hGdW5jdGlv
bjY0IGhhc2hGdW5jdGlvbjsKLSAgICBOYW1lTWFwIG5hbWVNYXA7Ci19OwotCi0vLwotLy8gVGhp
cyBpcyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIG1hY2hpbmUgaW5kZXBlbmRlbnQgY29kZQot
Ly8gYW5kIHRoZSBtYWNoaW5lIGRlcGVuZGVudCBjb2RlLgotLy8KLS8vIFRoZSBtYWNoaW5lIGRl
cGVuZGVudCBjb2RlIHNob3VsZCBkZXJpdmUgZnJvbSB0aGUgY2xhc3NlcwotLy8gYWJvdmUuIFRo
ZW4gQ29uc3RydWN0KigpIGFuZCBEZWxldGUqKCkgd2lsbCBjcmVhdGUgYW5kIAotLy8gZGVzdHJv
eSB0aGUgbWFjaGluZSBkZXBlbmRlbnQgb2JqZWN0cywgd2hpY2ggY29udGFpbiB0aGUKLS8vIGFi
b3ZlIG1hY2hpbmUgaW5kZXBlbmRlbnQgaW5mb3JtYXRpb24uCi0vLwotVENvbXBpbGVyKiBDb25z
dHJ1Y3RDb21waWxlcigKLSAgICBTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMs
IFNoU2hhZGVyT3V0cHV0IG91dHB1dCk7Ci12b2lkIERlbGV0ZUNvbXBpbGVyKFRDb21waWxlciop
OwotCi0jZW5kaWYgLy8gX1NISEFORExFX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA0MmNkNWNjNWMxNWZiZTcwMDIwNmMzNDQyYjhjOGNjODAzZTQ0OWJjLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDM4NyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLwotLy8gSW1wbGVtZW50IHRo
ZSB0b3AtbGV2ZWwgb2YgaW50ZXJmYWNlIHRvIHRoZSBjb21waWxlciwKLS8vIGFzIGRlZmluZWQg
aW4gU2hhZGVyTGFuZy5oCi0vLwotCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCi0K
LSNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplRGxsLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIv
cHJlcHJvY2Vzc29yL2xlbmd0aF9saW1pdHMuaCIKLSNpbmNsdWRlICJjb21waWxlci9TaEhhbmRs
ZS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmgiCi0jaW5jbHVkZSAiY29t
cGlsZXIvVmFyaWFibGVQYWNrZXIuaCIKLQotLy8KLS8vIFRoaXMgaXMgdGhlIHBsYXRmb3JtIGlu
ZGVwZW5kZW50IGludGVyZmFjZSBiZXR3ZWVuIGFuIE9HTCBkcml2ZXIKLS8vIGFuZCB0aGUgc2hh
ZGluZyBsYW5ndWFnZSBjb21waWxlci4KLS8vCi0KLXN0YXRpYyBib29sIGNoZWNrVmFyaWFibGVN
YXhMZW5ndGhzKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBleHBlY3RlZFZhbHVlKQotewotICAgIHNpemVfdCBhY3RpdmVV
bmlmb3JtTGltaXQgPSAwOwotICAgIFNoR2V0SW5mbyhoYW5kbGUsIFNIX0FDVElWRV9VTklGT1JN
X01BWF9MRU5HVEgsICZhY3RpdmVVbmlmb3JtTGltaXQpOwotICAgIHNpemVfdCBhY3RpdmVBdHRy
aWJMaW1pdCA9IDA7Ci0gICAgU2hHZXRJbmZvKGhhbmRsZSwgU0hfQUNUSVZFX0FUVFJJQlVURV9N
QVhfTEVOR1RILCAmYWN0aXZlQXR0cmliTGltaXQpOwotICAgIHNpemVfdCB2YXJ5aW5nTGltaXQg
PSAwOwotICAgIFNoR2V0SW5mbyhoYW5kbGUsIFNIX1ZBUllJTkdfTUFYX0xFTkdUSCwgJnZhcnlp
bmdMaW1pdCk7Ci0gICAgcmV0dXJuIChleHBlY3RlZFZhbHVlID09IGFjdGl2ZVVuaWZvcm1MaW1p
dCAmJgotICAgICAgICAgICAgZXhwZWN0ZWRWYWx1ZSA9PSBhY3RpdmVBdHRyaWJMaW1pdCAmJgot
ICAgICAgICAgICAgZXhwZWN0ZWRWYWx1ZSA9PSB2YXJ5aW5nTGltaXQpOwotfQotCi1zdGF0aWMg
Ym9vbCBjaGVja01hcHBlZE5hbWVNYXhMZW5ndGgoY29uc3QgU2hIYW5kbGUgaGFuZGxlLCBzaXpl
X3QgZXhwZWN0ZWRWYWx1ZSkKLXsKLSAgICBzaXplX3QgbWFwcGVkTmFtZU1heExlbmd0aCA9IDA7
Ci0gICAgU2hHZXRJbmZvKGhhbmRsZSwgU0hfTUFQUEVEX05BTUVfTUFYX0xFTkdUSCwgJm1hcHBl
ZE5hbWVNYXhMZW5ndGgpOwotICAgIHJldHVybiAoZXhwZWN0ZWRWYWx1ZSA9PSBtYXBwZWROYW1l
TWF4TGVuZ3RoKTsKLX0KLQotLy8KLS8vIERyaXZlciBtdXN0IGNhbGwgdGhpcyBmaXJzdCwgb25j
ZSwgYmVmb3JlIGRvaW5nIGFueSBvdGhlciBjb21waWxlciBvcGVyYXRpb25zLgotLy8gU3Vic2Vx
dWVudCBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIGFyZSBuby1vcC4KLS8vCi1pbnQgU2hJbml0aWFs
aXplKCkKLXsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBrSW5pdGlhbGl6ZWQgPSBJbml0UHJvY2Vz
cygpOwotICAgIHJldHVybiBrSW5pdGlhbGl6ZWQgPyAxIDogMDsKLX0KLQotLy8KLS8vIENsZWFu
dXAgc3ltYm9sIHRhYmxlcwotLy8KLWludCBTaEZpbmFsaXplKCkKLXsKLSAgICBEZXRhY2hQcm9j
ZXNzKCk7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLS8vCi0vLyBJbml0aWFsaXplIGJ1aWx0LWluIHJl
c291cmNlcyB3aXRoIG1pbmltdW0gZXhwZWN0ZWQgdmFsdWVzLgotLy8KLXZvaWQgU2hJbml0QnVp
bHRJblJlc291cmNlcyhTaEJ1aWx0SW5SZXNvdXJjZXMqIHJlc291cmNlcykKLXsKLSAgICAvLyBD
b25zdGFudHMuCi0gICAgcmVzb3VyY2VzLT5NYXhWZXJ0ZXhBdHRyaWJzID0gODsKLSAgICByZXNv
dXJjZXMtPk1heFZlcnRleFVuaWZvcm1WZWN0b3JzID0gMTI4OwotICAgIHJlc291cmNlcy0+TWF4
VmFyeWluZ1ZlY3RvcnMgPSA4OwotICAgIHJlc291cmNlcy0+TWF4VmVydGV4VGV4dHVyZUltYWdl
VW5pdHMgPSAwOwotICAgIHJlc291cmNlcy0+TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9
IDg7Ci0gICAgcmVzb3VyY2VzLT5NYXhUZXh0dXJlSW1hZ2VVbml0cyA9IDg7Ci0gICAgcmVzb3Vy
Y2VzLT5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzID0gMTY7Ci0gICAgcmVzb3VyY2VzLT5NYXhE
cmF3QnVmZmVycyA9IDE7Ci0KLSAgICAvLyBFeHRlbnNpb25zLgotICAgIHJlc291cmNlcy0+T0VT
X3N0YW5kYXJkX2Rlcml2YXRpdmVzID0gMDsKLSAgICByZXNvdXJjZXMtPk9FU19FR0xfaW1hZ2Vf
ZXh0ZXJuYWwgPSAwOwotICAgIHJlc291cmNlcy0+QVJCX3RleHR1cmVfcmVjdGFuZ2xlID0gMDsK
LSAgICByZXNvdXJjZXMtPkVYVF9kcmF3X2J1ZmZlcnMgPSAwOwotICAgIHJlc291cmNlcy0+RVhU
X2ZyYWdfZGVwdGggPSAwOwotCi0gICAgLy8gRGlzYWJsZSBoaWdocCBwcmVjaXNpb24gaW4gZnJh
Z21lbnQgc2hhZGVyIGJ5IGRlZmF1bHQuCi0gICAgcmVzb3VyY2VzLT5GcmFnbWVudFByZWNpc2lv
bkhpZ2ggPSAwOwotCi0gICAgLy8gRGlzYWJsZSBuYW1lIGhhc2hpbmcgYnkgZGVmYXVsdC4KLSAg
ICByZXNvdXJjZXMtPkhhc2hGdW5jdGlvbiA9IE5VTEw7Ci0KLSAgICByZXNvdXJjZXMtPkFycmF5
SW5kZXhDbGFtcGluZ1N0cmF0ZWd5ID0gU0hfQ0xBTVBfV0lUSF9DTEFNUF9JTlRSSU5TSUM7Ci19
Ci0KLS8vCi0vLyBEcml2ZXIgY2FsbHMgdGhlc2UgdG8gY3JlYXRlIGFuZCBkZXN0cm95IGNvbXBp
bGVyIG9iamVjdHMuCi0vLwotU2hIYW5kbGUgU2hDb25zdHJ1Y3RDb21waWxlcihTaFNoYWRlclR5
cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNoU2hhZGVyT3V0cHV0IG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgU2hCdWlsdEluUmVzb3VyY2VzKiByZXNvdXJjZXMpCi17Ci0gICAgVFNoSGFuZGxlQmFzZSog
YmFzZSA9IHN0YXRpY19jYXN0PFRTaEhhbmRsZUJhc2UqPihDb25zdHJ1Y3RDb21waWxlcih0eXBl
LCBzcGVjLCBvdXRwdXQpKTsKLSAgICBUQ29tcGlsZXIqIGNvbXBpbGVyID0gYmFzZS0+Z2V0QXND
b21waWxlcigpOwotICAgIGlmIChjb21waWxlciA9PSAwKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIC8vIEdlbmVyYXRlIGJ1aWx0LWluIHN5bWJvbCB0YWJsZS4KLSAgICBpZiAoIWNvbXBpbGVy
LT5Jbml0KCpyZXNvdXJjZXMpKSB7Ci0gICAgICAgIFNoRGVzdHJ1Y3QoYmFzZSk7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihi
YXNlKTsKLX0KLQotdm9pZCBTaERlc3RydWN0KFNoSGFuZGxlIGhhbmRsZSkKLXsKLSAgICBpZiAo
aGFuZGxlID09IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIFRTaEhhbmRsZUJhc2UqIGJhc2Ug
PSBzdGF0aWNfY2FzdDxUU2hIYW5kbGVCYXNlKj4oaGFuZGxlKTsKLQotICAgIGlmIChiYXNlLT5n
ZXRBc0NvbXBpbGVyKCkpCi0gICAgICAgIERlbGV0ZUNvbXBpbGVyKGJhc2UtPmdldEFzQ29tcGls
ZXIoKSk7Ci19Ci0KLS8vCi0vLyBEbyBhbiBhY3R1YWwgY29tcGlsZSBvbiB0aGUgZ2l2ZW4gc3Ry
aW5ncy4gIFRoZSByZXN1bHQgaXMgbGVmdCAKLS8vIGluIHRoZSBnaXZlbiBjb21waWxlIG9iamVj
dC4KLS8vCi0vLyBSZXR1cm46ICBUaGUgcmV0dXJuIHZhbHVlIG9mIFNoQ29tcGlsZSBpcyByZWFs
bHkgYm9vbGVhbiwgaW5kaWNhdGluZwotLy8gc3VjY2VzcyBvciBmYWlsdXJlLgotLy8KLWludCBT
aENvbXBpbGUoCi0gICAgY29uc3QgU2hIYW5kbGUgaGFuZGxlLAotICAgIGNvbnN0IGNoYXIqIGNv
bnN0IHNoYWRlclN0cmluZ3NbXSwKLSAgICBzaXplX3QgbnVtU3RyaW5ncywKLSAgICBpbnQgY29t
cGlsZU9wdGlvbnMpCi17Ci0gICAgaWYgKGhhbmRsZSA9PSAwKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSByZWludGVycHJldF9jYXN0PFRTaEhhbmRsZUJh
c2UqPihoYW5kbGUpOwotICAgIFRDb21waWxlciogY29tcGlsZXIgPSBiYXNlLT5nZXRBc0NvbXBp
bGVyKCk7Ci0gICAgaWYgKGNvbXBpbGVyID09IDApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
Ym9vbCBzdWNjZXNzID0gY29tcGlsZXItPmNvbXBpbGUoc2hhZGVyU3RyaW5ncywgbnVtU3RyaW5n
cywgY29tcGlsZU9wdGlvbnMpOwotICAgIHJldHVybiBzdWNjZXNzID8gMSA6IDA7Ci19Ci0KLXZv
aWQgU2hHZXRJbmZvKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwgU2hTaGFkZXJJbmZvIHBuYW1lLCBz
aXplX3QqIHBhcmFtcykKLXsKLSAgICBpZiAoIWhhbmRsZSB8fCAhcGFyYW1zKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBUU2hIYW5kbGVCYXNlKiBiYXNlID0gc3RhdGljX2Nhc3Q8VFNoSGFuZGxl
QmFzZSo+KGhhbmRsZSk7Ci0gICAgVENvbXBpbGVyKiBjb21waWxlciA9IGJhc2UtPmdldEFzQ29t
cGlsZXIoKTsKLSAgICBpZiAoIWNvbXBpbGVyKSByZXR1cm47Ci0KLSAgICBzd2l0Y2gocG5hbWUp
Ci0gICAgewotICAgIGNhc2UgU0hfSU5GT19MT0dfTEVOR1RIOgotICAgICAgICAqcGFyYW1zID0g
Y29tcGlsZXItPmdldEluZm9TaW5rKCkuaW5mby5zaXplKCkgKyAxOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFNIX09CSkVDVF9DT0RFX0xFTkdUSDoKLSAgICAgICAgKnBhcmFtcyA9IGNvbXBp
bGVyLT5nZXRJbmZvU2luaygpLm9iai5zaXplKCkgKyAxOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFNIX0FDVElWRV9VTklGT1JNUzoKLSAgICAgICAgKnBhcmFtcyA9IGNvbXBpbGVyLT5nZXRV
bmlmb3JtcygpLnNpemUoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTSF9BQ1RJVkVfVU5J
Rk9STV9NQVhfTEVOR1RIOgotICAgICAgICAqcGFyYW1zID0gMSArICBNQVhfU1lNQk9MX05BTUVf
TEVOOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNIX0FDVElWRV9BVFRSSUJVVEVTOgotICAg
ICAgICAqcGFyYW1zID0gY29tcGlsZXItPmdldEF0dHJpYnMoKS5zaXplKCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgU0hfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIOgotICAgICAgICAq
cGFyYW1zID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgU0hfVkFSWUlOR1M6Ci0gICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0VmFyeWluZ3Mo
KS5zaXplKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU0hfVkFSWUlOR19NQVhfTEVOR1RI
OgotICAgICAgICAqcGFyYW1zID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgU0hfTUFQUEVEX05BTUVfTUFYX0xFTkdUSDoKLSAgICAgICAgLy8gVXNl
IGxvbmdlciBsZW5ndGggdGhhbiBNQVhfU0hPUlRFTkVEX0lERU5USUZJRVJfU0laRSB0bwotICAg
ICAgICAvLyBoYW5kbGUgYXJyYXkgYW5kIHN0cnVjdCBkZXJlZmVyZW5jZXMuCi0gICAgICAgICpw
YXJhbXMgPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBTSF9OQU1FX01BWF9MRU5HVEg6Ci0gICAgICAgICpwYXJhbXMgPSAxICsgTUFYX1NZTUJPTF9O
QU1FX0xFTjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTSF9IQVNIRURfTkFNRV9NQVhfTEVO
R1RIOgotICAgICAgICBpZiAoY29tcGlsZXItPmdldEhhc2hGdW5jdGlvbigpID09IE5VTEwpIHsK
LSAgICAgICAgICAgICpwYXJhbXMgPSAwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Ly8gNjQgYml0cyBoYXNoaW5nIG91dHB1dCByZXF1aXJlcyAxNiBieXRlcyBmb3IgaGV4IAotICAg
ICAgICAgICAgLy8gcmVwcmVzZW50YXRpb24uCi0gICAgICAgICAgICBjb25zdCBjaGFyIEhhc2hl
ZE5hbWVQcmVmaXhbXSA9IEhBU0hFRF9OQU1FX1BSRUZJWDsKLSAgICAgICAgICAgICpwYXJhbXMg
PSAxNiArIHNpemVvZihIYXNoZWROYW1lUHJlZml4KTsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLSAgICBjYXNlIFNIX0hBU0hFRF9OQU1FU19DT1VOVDoKLSAgICAgICAgKnBhcmFtcyA9IGNv
bXBpbGVyLT5nZXROYW1lTWFwKCkuc2l6ZSgpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLX0KLQotLy8KLS8vIFJldHVybiBhbnkgY29tcGlsZXIg
bG9nIG9mIG1lc3NhZ2VzIGZvciB0aGUgYXBwbGljYXRpb24uCi0vLwotdm9pZCBTaEdldEluZm9M
b2coY29uc3QgU2hIYW5kbGUgaGFuZGxlLCBjaGFyKiBpbmZvTG9nKQotewotICAgIGlmICghaGFu
ZGxlIHx8ICFpbmZvTG9nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBUU2hIYW5kbGVCYXNlKiBi
YXNlID0gc3RhdGljX2Nhc3Q8VFNoSGFuZGxlQmFzZSo+KGhhbmRsZSk7Ci0gICAgVENvbXBpbGVy
KiBjb21waWxlciA9IGJhc2UtPmdldEFzQ29tcGlsZXIoKTsKLSAgICBpZiAoIWNvbXBpbGVyKSBy
ZXR1cm47Ci0KLSAgICBUSW5mb1NpbmsmIGluZm9TaW5rID0gY29tcGlsZXItPmdldEluZm9TaW5r
KCk7Ci0gICAgc3RyY3B5KGluZm9Mb2csIGluZm9TaW5rLmluZm8uY19zdHIoKSk7Ci19Ci0KLS8v
Ci0vLyBSZXR1cm4gYW55IG9iamVjdCBjb2RlLgotLy8KLXZvaWQgU2hHZXRPYmplY3RDb2RlKGNv
bnN0IFNoSGFuZGxlIGhhbmRsZSwgY2hhciogb2JqQ29kZSkKLXsKLSAgICBpZiAoIWhhbmRsZSB8
fCAhb2JqQ29kZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9
IHN0YXRpY19jYXN0PFRTaEhhbmRsZUJhc2UqPihoYW5kbGUpOwotICAgIFRDb21waWxlciogY29t
cGlsZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7Ci0gICAgaWYgKCFjb21waWxlcikgcmV0dXJu
OwotCi0gICAgVEluZm9TaW5rJiBpbmZvU2luayA9IGNvbXBpbGVyLT5nZXRJbmZvU2luaygpOwot
ICAgIHN0cmNweShvYmpDb2RlLCBpbmZvU2luay5vYmouY19zdHIoKSk7Ci19Ci0KLXZvaWQgU2hH
ZXRWYXJpYWJsZUluZm8oY29uc3QgU2hIYW5kbGUgaGFuZGxlLAotICAgICAgICAgICAgICAgICAg
ICAgICBTaFNoYWRlckluZm8gdmFyVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
ZGV4LAotICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QqIGxlbmd0aCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgaW50KiBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICBTaERhdGFUeXBl
KiB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICBTaFByZWNpc2lvblR5cGUqIHByZWNpc2lv
biwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50KiBzdGF0aWNVc2UsCi0gICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIqIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIG1hcHBl
ZE5hbWUpCi17Ci0gICAgaWYgKCFoYW5kbGUgfHwgIXNpemUgfHwgIXR5cGUgfHwgIXByZWNpc2lv
biB8fCAhc3RhdGljVXNlIHx8ICFuYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKCh2
YXJUeXBlID09IFNIX0FDVElWRV9BVFRSSUJVVEVTKSB8fAotICAgICAgICAgICAodmFyVHlwZSA9
PSBTSF9BQ1RJVkVfVU5JRk9STVMpIHx8Ci0gICAgICAgICAgICh2YXJUeXBlID09IFNIX1ZBUllJ
TkdTKSk7Ci0KLSAgICBUU2hIYW5kbGVCYXNlKiBiYXNlID0gcmVpbnRlcnByZXRfY2FzdDxUU2hI
YW5kbGVCYXNlKj4oaGFuZGxlKTsKLSAgICBUQ29tcGlsZXIqIGNvbXBpbGVyID0gYmFzZS0+Z2V0
QXNDb21waWxlcigpOwotICAgIGlmIChjb21waWxlciA9PSAwKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBjb25zdCBUVmFyaWFibGVJbmZvTGlzdCYgdmFyTGlzdCA9Ci0gICAgICAgIHZhclR5cGUg
PT0gU0hfQUNUSVZFX0FUVFJJQlVURVMgPyBjb21waWxlci0+Z2V0QXR0cmlicygpIDoKLSAgICAg
ICAgICAgICh2YXJUeXBlID09IFNIX0FDVElWRV9VTklGT1JNUyA/IGNvbXBpbGVyLT5nZXRVbmlm
b3JtcygpIDoKLSAgICAgICAgICAgICAgICBjb21waWxlci0+Z2V0VmFyeWluZ3MoKSk7Ci0gICAg
aWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBzdGF0aWNfY2FzdDxpbnQ+KHZhckxpc3Quc2l6ZSgp
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgVFZhcmlhYmxlSW5mbyYgdmFySW5mbyA9
IHZhckxpc3RbaW5kZXhdOwotICAgIGlmIChsZW5ndGgpICpsZW5ndGggPSB2YXJJbmZvLm5hbWUu
c2l6ZSgpOwotICAgICpzaXplID0gdmFySW5mby5zaXplOwotICAgICp0eXBlID0gdmFySW5mby50
eXBlOwotICAgIHN3aXRjaCAodmFySW5mby5wcmVjaXNpb24pIHsKLSAgICBjYXNlIEVicExvdzoK
LSAgICAgICAgKnByZWNpc2lvbiA9IFNIX1BSRUNJU0lPTl9MT1dQOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEVicE1lZGl1bToKLSAgICAgICAgKnByZWNpc2lvbiA9IFNIX1BSRUNJU0lPTl9N
RURJVU1QOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEVicEhpZ2g6Ci0gICAgICAgICpwcmVj
aXNpb24gPSBTSF9QUkVDSVNJT05fSElHSFA7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIC8vIFNvbWUgdHlwZXMgZG9lcyBub3Qgc3VwcG9ydCBwcmVjaXNpb24sIGZvciBl
eGFtcGxlLCBib29sZWFuLgotICAgICAgICAqcHJlY2lzaW9uID0gU0hfUFJFQ0lTSU9OX1VOREVG
SU5FRDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICpzdGF0aWNVc2UgPSB2YXJJbmZvLnN0
YXRpY1VzZSA/IDEgOiAwOwotCi0gICAgLy8gVGhpcyBzaXplIG11c3QgbWF0Y2ggdGhhdCBxdWVy
aWVkIGJ5Ci0gICAgLy8gU0hfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwgU0hfQUNUSVZFX0FU
VFJJQlVURV9NQVhfTEVOR1RILCBTSF9WQVJZSU5HX01BWF9MRU5HVEgKLSAgICAvLyBpbiBTaEdl
dEluZm8sIGJlbG93LgotICAgIHNpemVfdCB2YXJpYWJsZUxlbmd0aCA9IDEgKyBNQVhfU1lNQk9M
X05BTUVfTEVOOwotICAgIEFTU0VSVChjaGVja1ZhcmlhYmxlTWF4TGVuZ3RocyhoYW5kbGUsIHZh
cmlhYmxlTGVuZ3RoKSk7Ci0gICAgc3RybmNweShuYW1lLCB2YXJJbmZvLm5hbWUuY19zdHIoKSwg
dmFyaWFibGVMZW5ndGgpOwotICAgIG5hbWVbdmFyaWFibGVMZW5ndGggLSAxXSA9IDA7Ci0gICAg
aWYgKG1hcHBlZE5hbWUpIHsKLSAgICAgICAgLy8gVGhpcyBzaXplIG11c3QgbWF0Y2ggdGhhdCBx
dWVyaWVkIGJ5Ci0gICAgICAgIC8vIFNIX01BUFBFRF9OQU1FX01BWF9MRU5HVEggaW4gU2hHZXRJ
bmZvLCBiZWxvdy4KLSAgICAgICAgc2l6ZV90IG1heE1hcHBlZE5hbWVMZW5ndGggPSAxICsgTUFY
X1NZTUJPTF9OQU1FX0xFTjsKLSAgICAgICAgQVNTRVJUKGNoZWNrTWFwcGVkTmFtZU1heExlbmd0
aChoYW5kbGUsIG1heE1hcHBlZE5hbWVMZW5ndGgpKTsKLSAgICAgICAgc3RybmNweShtYXBwZWRO
YW1lLCB2YXJJbmZvLm1hcHBlZE5hbWUuY19zdHIoKSwgbWF4TWFwcGVkTmFtZUxlbmd0aCk7Ci0g
ICAgICAgIG1hcHBlZE5hbWVbbWF4TWFwcGVkTmFtZUxlbmd0aCAtIDFdID0gMDsKLSAgICB9Ci19
Ci0KLXZvaWQgU2hHZXROYW1lSGFzaGluZ0VudHJ5KGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIqIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBoYXNo
ZWROYW1lKQotewotICAgIGlmICghaGFuZGxlIHx8ICFuYW1lIHx8ICFoYXNoZWROYW1lIHx8IGlu
ZGV4IDwgMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHN0
YXRpY19jYXN0PFRTaEhhbmRsZUJhc2UqPihoYW5kbGUpOwotICAgIFRDb21waWxlciogY29tcGls
ZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7Ci0gICAgaWYgKCFjb21waWxlcikgcmV0dXJuOwot
Ci0gICAgY29uc3QgTmFtZU1hcCYgbmFtZU1hcCA9IGNvbXBpbGVyLT5nZXROYW1lTWFwKCk7Ci0g
ICAgaWYgKGluZGV4ID49IHN0YXRpY19jYXN0PGludD4obmFtZU1hcC5zaXplKCkpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG5hbWVNYXAuYmVn
aW4oKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluZGV4OyArK2kpCi0gICAgICAgICsraXQ7
Ci0KLSAgICBzaXplX3QgbGVuID0gaXQtPmZpcnN0Lmxlbmd0aCgpICsgMTsKLSAgICBzaXplX3Qg
bWF4X2xlbiA9IDA7Ci0gICAgU2hHZXRJbmZvKGhhbmRsZSwgU0hfTkFNRV9NQVhfTEVOR1RILCAm
bWF4X2xlbik7Ci0gICAgaWYgKGxlbiA+IG1heF9sZW4pIHsKLSAgICAgICAgQVNTRVJUKGZhbHNl
KTsKLSAgICAgICAgbGVuID0gbWF4X2xlbjsKLSAgICB9Ci0gICAgc3RybmNweShuYW1lLCBpdC0+
Zmlyc3QuY19zdHIoKSwgbGVuKTsKLSAgICAvLyBUbyBiZSBvbiB0aGUgc2FmZSBzaWRlIGluIGNh
c2UgdGhlIHNvdXJjZSBpcyBsb25nZXIgdGhhbiBleHBlY3RlZC4KLSAgICBuYW1lW2xlbiAtIDFd
ID0gJ1wwJzsKLQotICAgIGxlbiA9IGl0LT5zZWNvbmQubGVuZ3RoKCkgKyAxOwotICAgIG1heF9s
ZW4gPSAwOwotICAgIFNoR2V0SW5mbyhoYW5kbGUsIFNIX0hBU0hFRF9OQU1FX01BWF9MRU5HVEgs
ICZtYXhfbGVuKTsKLSAgICBpZiAobGVuID4gbWF4X2xlbikgewotICAgICAgICBBU1NFUlQoZmFs
c2UpOwotICAgICAgICBsZW4gPSBtYXhfbGVuOwotICAgIH0KLSAgICBzdHJuY3B5KGhhc2hlZE5h
bWUsIGl0LT5zZWNvbmQuY19zdHIoKSwgbGVuKTsKLSAgICAvLyBUbyBiZSBvbiB0aGUgc2FmZSBz
aWRlIGluIGNhc2UgdGhlIHNvdXJjZSBpcyBsb25nZXIgdGhhbiBleHBlY3RlZC4KLSAgICBoYXNo
ZWROYW1lW2xlbiAtIDFdID0gJ1wwJzsKLX0KLQotdm9pZCBTaEdldEluZm9Qb2ludGVyKGNvbnN0
IFNoSGFuZGxlIGhhbmRsZSwgU2hTaGFkZXJJbmZvIHBuYW1lLCB2b2lkKiogcGFyYW1zKQotewot
ICAgIGlmICghaGFuZGxlIHx8ICFwYXJhbXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIFRTaEhh
bmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2FzdDxUU2hIYW5kbGVCYXNlKj4oaGFuZGxlKTsKLSAg
ICBUcmFuc2xhdG9ySExTTCogdHJhbnNsYXRvciA9IGJhc2UtPmdldEFzVHJhbnNsYXRvckhMU0wo
KTsKLSAgICBpZiAoIXRyYW5zbGF0b3IpIHJldHVybjsKLQotICAgIHN3aXRjaChwbmFtZSkKLSAg
ICB7Ci0gICAgY2FzZSBTSF9BQ1RJVkVfVU5JRk9STVNfQVJSQVk6Ci0gICAgICAgICpwYXJhbXMg
PSAodm9pZCopJnRyYW5zbGF0b3ItPmdldFVuaWZvcm1zKCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotfQotCi1pbnQgU2hDaGVja1ZhcmlhYmxl
c1dpdGhpblBhY2tpbmdMaW1pdHMoCi0gICAgaW50IG1heFZlY3RvcnMsIFNoVmFyaWFibGVJbmZv
KiB2YXJJbmZvQXJyYXksIHNpemVfdCB2YXJJbmZvQXJyYXlTaXplKQotewotICAgIGlmICh2YXJJ
bmZvQXJyYXlTaXplID09IDApCi0gICAgICAgIHJldHVybiAxOwotICAgIEFTU0VSVCh2YXJJbmZv
QXJyYXkpOwotICAgIFRWYXJpYWJsZUluZm9MaXN0IHZhcmlhYmxlczsKLSAgICBmb3IgKHNpemVf
dCBpaSA9IDA7IGlpIDwgdmFySW5mb0FycmF5U2l6ZTsgKytpaSkKLSAgICB7Ci0gICAgICAgIFRW
YXJpYWJsZUluZm8gdmFyKHZhckluZm9BcnJheVtpaV0udHlwZSwgdmFySW5mb0FycmF5W2lpXS5z
aXplKTsKLSAgICAgICAgdmFyaWFibGVzLnB1c2hfYmFjayh2YXIpOwotICAgIH0KLSAgICBWYXJp
YWJsZVBhY2tlciBwYWNrZXI7Ci0gICAgcmV0dXJuIHBhY2tlci5DaGVja1ZhcmlhYmxlc1dpdGhp
blBhY2tpbmdMaW1pdHMobWF4VmVjdG9ycywgdmFyaWFibGVzKSA/IDEgOiAwOwotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3Y2UyMTY4MGY1ZWVjZGI1OTBjMWQ1YzZj
NWI0YTA1ZmI5NmQ2YzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDIxNiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0v
LwotLy8gU3ltYm9sIHRhYmxlIGZvciBwYXJzaW5nLiAgTW9zdCBmdW5jdGlvbmFsaXkgYW5kIG1h
aW4gaWRlYXMKLS8vIGFyZSBkb2N1bWVudGVkIGluIHRoZSBoZWFkZXIgZmlsZS4KLS8vCi0KLSNp
ZiBkZWZpbmVkKF9NU0NfVkVSKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MTgpCi0jZW5k
aWYKLQotI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCi0KLSNpbmNsdWRlIDxzdGRp
by5oPgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxjbGltaXRzPgotCi1UVHlwZTo6
VFR5cGUoY29uc3QgVFB1YmxpY1R5cGUgJnApIDoKLSAgICAgICAgICAgIHR5cGUocC50eXBlKSwg
cHJlY2lzaW9uKHAucHJlY2lzaW9uKSwgcXVhbGlmaWVyKHAucXVhbGlmaWVyKSwgc2l6ZShwLnNp
emUpLCBtYXRyaXgocC5tYXRyaXgpLCBhcnJheShwLmFycmF5KSwgYXJyYXlTaXplKHAuYXJyYXlT
aXplKSwgc3RydWN0dXJlKDApCi17Ci0gICAgaWYgKHAudXNlckRlZikKLSAgICAgICAgc3RydWN0
dXJlID0gcC51c2VyRGVmLT5nZXRTdHJ1Y3QoKTsKLX0KLQotLy8KLS8vIFJlY3Vyc2l2ZWx5IGdl
bmVyYXRlIG1hbmdsZWQgbmFtZXMuCi0vLwotVFN0cmluZyBUVHlwZTo6YnVpbGRNYW5nbGVkTmFt
ZSgpIGNvbnN0Ci17Ci0gICAgVFN0cmluZyBtYW5nbGVkTmFtZTsKLSAgICBpZiAoaXNNYXRyaXgo
KSkKLSAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ20nOwotICAgIGVsc2UgaWYgKGlzVmVjdG9yKCkp
Ci0gICAgICAgIG1hbmdsZWROYW1lICs9ICd2JzsKLQotICAgIHN3aXRjaCAodHlwZSkgewotICAg
IGNhc2UgRWJ0RmxvYXQ6ICAgICAgIG1hbmdsZWROYW1lICs9ICdmJzsgICAgICBicmVhazsKLSAg
ICBjYXNlIEVidEludDogICAgICAgICBtYW5nbGVkTmFtZSArPSAnaSc7ICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBFYnRCb29sOiAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ2InOyAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgIG1hbmdsZWROYW1lICs9ICJzMiI7ICAgICBicmVhazsK
LSAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiBtYW5nbGVkTmFtZSArPSAic0MiOyAgICAgYnJlYWs7
Ci0gICAgY2FzZSBFYnRTdHJ1Y3Q6ICAgICAgbWFuZ2xlZE5hbWUgKz0gc3RydWN0dXJlLT5tYW5n
bGVkTmFtZSgpOyBicmVhazsKLSAgICBkZWZhdWx0OiAgICAgICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBtYW5nbGVkTmFtZSArPSBzdGF0aWNfY2FzdDxjaGFyPignMCcgKyBnZXROb21pbmFs
U2l6ZSgpKTsKLSAgICBpZiAoaXNBcnJheSgpKSB7Ci0gICAgICAgIGNoYXIgYnVmWzIwXTsKLSAg
ICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwgYXJyYXlTaXplKTsKLSAgICAg
ICAgbWFuZ2xlZE5hbWUgKz0gJ1snOwotICAgICAgICBtYW5nbGVkTmFtZSArPSBidWY7Ci0gICAg
ICAgIG1hbmdsZWROYW1lICs9ICddJzsKLSAgICB9Ci0gICAgcmV0dXJuIG1hbmdsZWROYW1lOwot
fQotCi1zaXplX3QgVFR5cGU6OmdldE9iamVjdFNpemUoKSBjb25zdAotewotICAgIHNpemVfdCB0
b3RhbFNpemUgPSAwOwotCi0gICAgaWYgKGdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKLSAg
ICAgICAgdG90YWxTaXplID0gc3RydWN0dXJlLT5vYmplY3RTaXplKCk7Ci0gICAgZWxzZSBpZiAo
bWF0cml4KQotICAgICAgICB0b3RhbFNpemUgPSBzaXplICogc2l6ZTsKLSAgICBlbHNlCi0gICAg
ICAgIHRvdGFsU2l6ZSA9IHNpemU7Ci0KLSAgICBpZiAoaXNBcnJheSgpKSB7Ci0gICAgICAgIHNp
emVfdCBhcnJheVNpemUgPSBnZXRBcnJheVNpemUoKTsKLSAgICAgICAgaWYgKGFycmF5U2l6ZSA+
IElOVF9NQVggLyB0b3RhbFNpemUpCi0gICAgICAgICAgICB0b3RhbFNpemUgPSBJTlRfTUFYOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICB0b3RhbFNpemUgKj0gYXJyYXlTaXplOwotICAgIH0K
LQotICAgIHJldHVybiB0b3RhbFNpemU7Ci19Ci0KLWJvb2wgVFN0cnVjdHVyZTo6Y29udGFpbnNB
cnJheXMoKSBjb25zdAotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUZpZWxkcy0+c2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgVFR5cGUqIGZpZWxkVHlwZSA9ICgqbUZpZWxkcylb
aV0tPnR5cGUoKTsKLSAgICAgICAgaWYgKGZpZWxkVHlwZS0+aXNBcnJheSgpIHx8IGZpZWxkVHlw
ZS0+aXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlzKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1UU3RyaW5nIFRTdHJ1Y3R1cmU6OmJ1
aWxkTWFuZ2xlZE5hbWUoKSBjb25zdAotewotICAgIFRTdHJpbmcgbWFuZ2xlZE5hbWUoInN0cnVj
dC0iKTsKLSAgICBtYW5nbGVkTmFtZSArPSAqbU5hbWU7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtRmllbGRzLT5zaXplKCk7ICsraSkgewotICAgICAgICBtYW5nbGVkTmFtZSArPSAnLSc7
Ci0gICAgICAgIG1hbmdsZWROYW1lICs9ICgqbUZpZWxkcylbaV0tPnR5cGUoKS0+Z2V0TWFuZ2xl
ZE5hbWUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1hbmdsZWROYW1lOwotfQotCi1zaXplX3QgVFN0
cnVjdHVyZTo6Y2FsY3VsYXRlT2JqZWN0U2l6ZSgpIGNvbnN0Ci17Ci0gICAgc2l6ZV90IHNpemUg
PSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUZpZWxkcy0+c2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgc2l6ZV90IGZpZWxkU2l6ZSA9ICgqbUZpZWxkcylbaV0tPnR5cGUoKS0+Z2V0T2Jq
ZWN0U2l6ZSgpOwotICAgICAgICBpZiAoZmllbGRTaXplID4gSU5UX01BWCAtIHNpemUpCi0gICAg
ICAgICAgICBzaXplID0gSU5UX01BWDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2l6ZSAr
PSBmaWVsZFNpemU7Ci0gICAgfQotICAgIHJldHVybiBzaXplOwotfQotCi1pbnQgVFN0cnVjdHVy
ZTo6Y2FsY3VsYXRlRGVlcGVzdE5lc3RpbmcoKSBjb25zdAotewotICAgIGludCBtYXhOZXN0aW5n
ID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1GaWVsZHMtPnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIG1heE5lc3RpbmcgPSBzdGQ6Om1heChtYXhOZXN0aW5nLCAoKm1GaWVsZHMpW2ld
LT50eXBlKCktPmdldERlZXBlc3RTdHJ1Y3ROZXN0aW5nKCkpOwotICAgIH0KLSAgICByZXR1cm4g
MSArIG1heE5lc3Rpbmc7Ci19Ci0KLS8vCi0vLyBEdW1wIGZ1bmN0aW9ucy4KLS8vCi0KLXZvaWQg
VFZhcmlhYmxlOjpkdW1wKFRJbmZvU2luayYgaW5mb1NpbmspIGNvbnN0Ci17Ci0gICAgaW5mb1Np
bmsuZGVidWcgPDwgZ2V0TmFtZSgpLmNfc3RyKCkgPDwgIjogIiA8PCB0eXBlLmdldFF1YWxpZmll
clN0cmluZygpIDw8ICIgIiA8PCB0eXBlLmdldFByZWNpc2lvblN0cmluZygpIDw8ICIgIiA8PCB0
eXBlLmdldEJhc2ljU3RyaW5nKCk7Ci0gICAgaWYgKHR5cGUuaXNBcnJheSgpKSB7Ci0gICAgICAg
IGluZm9TaW5rLmRlYnVnIDw8ICJbMF0iOwotICAgIH0KLSAgICBpbmZvU2luay5kZWJ1ZyA8PCAi
XG4iOwotfQotCi12b2lkIFRGdW5jdGlvbjo6ZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25z
dAotewotICAgIGluZm9TaW5rLmRlYnVnIDw8IGdldE5hbWUoKS5jX3N0cigpIDw8ICI6ICIgPDwg
IHJldHVyblR5cGUuZ2V0QmFzaWNTdHJpbmcoKSA8PCAiICIgPDwgZ2V0TWFuZ2xlZE5hbWUoKS5j
X3N0cigpIDw8ICJcbiI7Ci19Ci0KLXZvaWQgVFN5bWJvbFRhYmxlTGV2ZWw6OmR1bXAoVEluZm9T
aW5rICZpbmZvU2luaykgY29uc3QKLXsKLSAgICB0TGV2ZWw6OmNvbnN0X2l0ZXJhdG9yIGl0Owot
ICAgIGZvciAoaXQgPSBsZXZlbC5iZWdpbigpOyBpdCAhPSBsZXZlbC5lbmQoKTsgKytpdCkKLSAg
ICAgICAgKCppdCkuc2Vjb25kLT5kdW1wKGluZm9TaW5rKTsKLX0KLQotdm9pZCBUU3ltYm9sVGFi
bGU6OmR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3QKLXsKLSAgICBmb3IgKGludCBsZXZl
bCA9IGN1cnJlbnRMZXZlbCgpOyBsZXZlbCA+PSAwOyAtLWxldmVsKSB7Ci0gICAgICAgIGluZm9T
aW5rLmRlYnVnIDw8ICJMRVZFTCAiIDw8IGxldmVsIDw8ICJcbiI7Ci0gICAgICAgIHRhYmxlW2xl
dmVsXS0+ZHVtcChpbmZvU2luayk7Ci0gICAgfQotfQotCi0vLwotLy8gRnVuY3Rpb25zIGhhdmUg
YnVyaWVkIHBvaW50ZXJzIHRvIGRlbGV0ZS4KLS8vCi1URnVuY3Rpb246On5URnVuY3Rpb24oKQot
ewotICAgIGZvciAoVFBhcmFtTGlzdDo6aXRlcmF0b3IgaSA9IHBhcmFtZXRlcnMuYmVnaW4oKTsg
aSAhPSBwYXJhbWV0ZXJzLmVuZCgpOyArK2kpCi0gICAgICAgIGRlbGV0ZSAoKmkpLnR5cGU7Ci19
Ci0KLS8vCi0vLyBTeW1ib2wgdGFibGUgbGV2ZWxzIGFyZSBhIG1hcCBvZiBwb2ludGVycyB0byBz
eW1ib2xzIHRoYXQgaGF2ZSB0byBiZSBkZWxldGVkLgotLy8KLVRTeW1ib2xUYWJsZUxldmVsOjp+
VFN5bWJvbFRhYmxlTGV2ZWwoKQotewotICAgIGZvciAodExldmVsOjppdGVyYXRvciBpdCA9IGxl
dmVsLmJlZ2luKCk7IGl0ICE9IGxldmVsLmVuZCgpOyArK2l0KQotICAgICAgICBkZWxldGUgKCpp
dCkuc2Vjb25kOwotfQotCi0vLwotLy8gQ2hhbmdlIGFsbCBmdW5jdGlvbiBlbnRyaWVzIGluIHRo
ZSB0YWJsZSB3aXRoIHRoZSBub24tbWFuZ2xlZCBuYW1lCi0vLyB0byBiZSByZWxhdGVkIHRvIHRo
ZSBwcm92aWRlZCBidWlsdC1pbiBvcGVyYXRpb24uICBUaGlzIGlzIGEgbG93Ci0vLyBwZXJmb3Jt
YW5jZSBvcGVyYXRpb24sIGFuZCBvbmx5IGludGVuZGVkIGZvciBzeW1ib2wgdGFibGVzIHRoYXQK
LS8vIGxpdmUgYWNyb3NzIGEgbGFyZ2UgbnVtYmVyIG9mIGNvbXBpbGVzLgotLy8KLXZvaWQgVFN5
bWJvbFRhYmxlTGV2ZWw6OnJlbGF0ZVRvT3BlcmF0b3IoY29uc3QgY2hhciogbmFtZSwgVE9wZXJh
dG9yIG9wKQotewotICAgIHRMZXZlbDo6aXRlcmF0b3IgaXQ7Ci0gICAgZm9yIChpdCA9IGxldmVs
LmJlZ2luKCk7IGl0ICE9IGxldmVsLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmICgoKml0KS5z
ZWNvbmQtPmlzRnVuY3Rpb24oKSkgewotICAgICAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlvbiA9
IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KCgqaXQpLnNlY29uZCk7Ci0gICAgICAgICAgICBpZiAo
ZnVuY3Rpb24tPmdldE5hbWUoKSA9PSBuYW1lKQotICAgICAgICAgICAgICAgIGZ1bmN0aW9uLT5y
ZWxhdGVUb09wZXJhdG9yKG9wKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8KLS8vIENoYW5n
ZSBhbGwgZnVuY3Rpb24gZW50cmllcyBpbiB0aGUgdGFibGUgd2l0aCB0aGUgbm9uLW1hbmdsZWQg
bmFtZQotLy8gdG8gYmUgcmVsYXRlZCB0byB0aGUgcHJvdmlkZWQgYnVpbHQtaW4gZXh0ZW5zaW9u
LiBUaGlzIGlzIGEgbG93Ci0vLyBwZXJmb3JtYW5jZSBvcGVyYXRpb24sIGFuZCBvbmx5IGludGVu
ZGVkIGZvciBzeW1ib2wgdGFibGVzIHRoYXQKLS8vIGxpdmUgYWNyb3NzIGEgbGFyZ2UgbnVtYmVy
IG9mIGNvbXBpbGVzLgotLy8KLXZvaWQgVFN5bWJvbFRhYmxlTGV2ZWw6OnJlbGF0ZVRvRXh0ZW5z
aW9uKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFRTdHJpbmcmIGV4dCkKLXsKLSAgICBmb3IgKHRM
ZXZlbDo6aXRlcmF0b3IgaXQgPSBsZXZlbC5iZWdpbigpOyBpdCAhPSBsZXZlbC5lbmQoKTsgKytp
dCkgewotICAgICAgICBUU3ltYm9sKiBzeW1ib2wgPSBpdC0+c2Vjb25kOwotICAgICAgICBpZiAo
c3ltYm9sLT5nZXROYW1lKCkgPT0gbmFtZSkKLSAgICAgICAgICAgIHN5bWJvbC0+cmVsYXRlVG9F
eHRlbnNpb24oZXh0KTsKLSAgICB9Ci19Ci0KLVRTeW1ib2xUYWJsZTo6flRTeW1ib2xUYWJsZSgp
Ci17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YWJsZS5zaXplKCk7ICsraSkKLSAgICAg
ICAgZGVsZXRlIHRhYmxlW2ldOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJlY2lzaW9u
U3RhY2suc2l6ZSgpOyArK2kpCi0gICAgICAgIGRlbGV0ZSBwcmVjaXNpb25TdGFja1tpXTsKLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xU
YWJsZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxl
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlYmFkNGI5MmU3OTBiYzYyNTNkMDJl
YzBmMDc2NjFmOThjNDM4MGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxl
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzODIgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
I2lmbmRlZiBfU1lNQk9MX1RBQkxFX0lOQ0xVREVEXwotI2RlZmluZSBfU1lNQk9MX1RBQkxFX0lO
Q0xVREVEXwotCi0vLwotLy8gU3ltYm9sIHRhYmxlIGZvciBwYXJzaW5nLiAgSGFzIHRoZXNlIGRl
c2lnbiBjaGFyYWN0ZXJpc3RpY3M6Ci0vLwotLy8gKiBTYW1lIHN5bWJvbCB0YWJsZSBjYW4gYmUg
dXNlZCB0byBjb21waWxlIG1hbnkgc2hhZGVycywgdG8gcHJlc2VydmUKLS8vICAgZWZmb3J0IG9m
IGNyZWF0aW5nIGFuZCBsb2FkaW5nIHdpdGggdGhlIGxhcmdlIG51bWJlcnMgb2YgYnVpbHQtaW4K
LS8vICAgc3ltYm9scy4KLS8vCi0vLyAqIE5hbWUgbWFuZ2xpbmcgd2lsbCBiZSB1c2VkIHRvIGdp
dmUgZWFjaCBmdW5jdGlvbiBhIHVuaXF1ZSBuYW1lCi0vLyAgIHNvIHRoYXQgc3ltYm9sIHRhYmxl
IGxvb2t1cHMgYXJlIG5ldmVyIGFtYmlndW91cy4gIFRoaXMgYWxsb3dzCi0vLyAgIGEgc2ltcGxl
ciBzeW1ib2wgdGFibGUgc3RydWN0dXJlLgotLy8KLS8vICogUHVzaGluZyBhbmQgcG9wcGluZyBv
ZiBzY29wZSwgc28gc3ltYm9sIHRhYmxlIHdpbGwgcmVhbGx5IGJlIGEgc3RhY2sgCi0vLyAgIG9m
IHN5bWJvbCB0YWJsZXMuICBTZWFyY2hlZCBmcm9tIHRoZSB0b3AsIHdpdGggbmV3IGluc2VydHMg
Z29pbmcgaW50bwotLy8gICB0aGUgdG9wLgotLy8KLS8vICogQ29uc3RhbnRzOiAgQ29tcGlsZSB0
aW1lIGNvbnN0YW50IHN5bWJvbHMgd2lsbCBrZWVwIHRoZWlyIHZhbHVlcwotLy8gICBpbiB0aGUg
c3ltYm9sIHRhYmxlLiAgVGhlIHBhcnNlciBjYW4gc3Vic3RpdHV0ZSBjb25zdGFudHMgYXQgcGFy
c2UKLS8vICAgdGltZSwgaW5jbHVkaW5nIGRvaW5nIGNvbnN0YW50IGZvbGRpbmcgYW5kIGNvbnN0
YW50IHByb3BhZ2F0aW9uLgotLy8KLS8vICogTm8gdGVtcG9yYXJpZXM6ICBUZW1wb3JhcmllcyBt
YWRlIGZyb20gb3BlcmF0aW9ucyAoKywgLS0sIC54eSwgZXRjLikKLS8vICAgYXJlIHRyYWNrZWQg
aW4gdGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbiwgbm90IHRoZSBzeW1ib2wgdGFibGUu
Ci0vLwotCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0KLSNpbmNsdWRlICJjb21tb24vYW5nbGV1dGls
cy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIv
aW50ZXJtZWRpYXRlLmgiCi0KLS8vCi0vLyBTeW1ib2wgYmFzZSBjbGFzcy4gIChDYW4gYnVpbGQg
ZnVuY3Rpb25zIG9yIHZhcmlhYmxlcyBvdXQgb2YgdGhlc2UuLi4pCi0vLwotY2xhc3MgVFN5bWJv
bCB7ICAgIAotcHVibGljOgotICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKLSAgICBU
U3ltYm9sKGNvbnN0IFRTdHJpbmcqIG4pIDogIHVuaXF1ZUlkKDApLCBuYW1lKG4pIHsgfQotICAg
IHZpcnR1YWwgflRTeW1ib2woKSB7IC8qIGRvbid0IGRlbGV0ZSBuYW1lLCBpdCdzIGZyb20gdGhl
IHBvb2wgKi8gfQotCi0gICAgY29uc3QgVFN0cmluZyYgZ2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJu
ICpuYW1lOyB9Ci0gICAgdmlydHVhbCBjb25zdCBUU3RyaW5nJiBnZXRNYW5nbGVkTmFtZSgpIGNv
bnN0IHsgcmV0dXJuIGdldE5hbWUoKTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0Z1bmN0aW9uKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNWYXJpYWJsZSgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCBzZXRVbmlxdWVJZChpbnQgaWQpIHsgdW5p
cXVlSWQgPSBpZDsgfQotICAgIGludCBnZXRVbmlxdWVJZCgpIGNvbnN0IHsgcmV0dXJuIHVuaXF1
ZUlkOyB9Ci0gICAgdmlydHVhbCB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3Qg
PSAwOwotICAgIHZvaWQgcmVsYXRlVG9FeHRlbnNpb24oY29uc3QgVFN0cmluZyYgZXh0KSB7IGV4
dGVuc2lvbiA9IGV4dDsgfQotICAgIGNvbnN0IFRTdHJpbmcmIGdldEV4dGVuc2lvbigpIGNvbnN0
IHsgcmV0dXJuIGV4dGVuc2lvbjsgfQotCi1wcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihUU3ltYm9sKTsKLQotICAgIGludCB1bmlxdWVJZDsgICAgICAvLyBGb3IgcmVhbCBj
b21wYXJpbmcgZHVyaW5nIGNvZGUgZ2VuZXJhdGlvbgotICAgIGNvbnN0IFRTdHJpbmcgKm5hbWU7
Ci0gICAgVFN0cmluZyBleHRlbnNpb247Ci19OwotCi0vLwotLy8gVmFyaWFibGUgY2xhc3MsIG1l
YW5pbmcgYSBzeW1ib2wgdGhhdCdzIG5vdCBhIGZ1bmN0aW9uLgotLy8gCi0vLyBUaGVyZSBjb3Vs
ZCBiZSBhIHNlcGFyYXRlIGNsYXNzIGhlaXJhcmNoeSBmb3IgQ29uc3RhbnQgdmFyaWFibGVzOwot
Ly8gT25seSBvbmUgb2YgaW50LCBib29sLCBvciBmbG9hdCwgKG9yIG5vbmUpIGlzIGNvcnJlY3Qg
Zm9yCi0vLyBhbnkgcGFydGljdWxhciB1c2UsIGJ1dCBpdCdzIGVhc3kgdG8gZG8gdGhpcyB3YXks
IGFuZCBkb2Vzbid0Ci0vLyBzZWVtIHdvcnRoIGhhdmluZyBzZXBhcmF0ZSBjbGFzc2VzLCBhbmQg
ImdldENvbnN0IiBjYW4ndCBzaW1wbHkgcmV0dXJuCi0vLyBkaWZmZXJlbnQgdmFsdWVzIGZvciBk
aWZmZXJlbnQgdHlwZXMgcG9seW1vcnBoaWNhbGx5LCBzbyB0aGlzIGlzIAotLy8ganVzdCBzaW1w
bGUgYW5kIHByYWdtYXRpYy4KLS8vCi1jbGFzcyBUVmFyaWFibGUgOiBwdWJsaWMgVFN5bWJvbCB7
Ci1wdWJsaWM6Ci0gICAgVFZhcmlhYmxlKGNvbnN0IFRTdHJpbmcgKm5hbWUsIGNvbnN0IFRUeXBl
JiB0LCBib29sIHVUID0gZmFsc2UgKSA6IFRTeW1ib2wobmFtZSksIHR5cGUodCksIHVzZXJUeXBl
KHVUKSwgdW5pb25BcnJheSgwKSB7IH0KLSAgICB2aXJ0dWFsIH5UVmFyaWFibGUoKSB7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgaXNWYXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0gICAgCi0g
ICAgVFR5cGUmIGdldFR5cGUoKSB7IHJldHVybiB0eXBlOyB9ICAgIAotICAgIGNvbnN0IFRUeXBl
JiBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZTsgfQotICAgIGJvb2wgaXNVc2VyVHlwZSgp
IGNvbnN0IHsgcmV0dXJuIHVzZXJUeXBlOyB9Ci0gICAgdm9pZCBzZXRRdWFsaWZpZXIoVFF1YWxp
ZmllciBxdWFsaWZpZXIpIHsgdHlwZS5zZXRRdWFsaWZpZXIocXVhbGlmaWVyKTsgfQotCi0gICAg
dmlydHVhbCB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7Ci0KLSAgICBDb25z
dGFudFVuaW9uKiBnZXRDb25zdFBvaW50ZXIoKQotICAgIHsgCi0gICAgICAgIGlmICghdW5pb25B
cnJheSkKLSAgICAgICAgICAgIHVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblt0eXBlLmdl
dE9iamVjdFNpemUoKV07Ci0KLSAgICAgICAgcmV0dXJuIHVuaW9uQXJyYXk7Ci0gICAgfQotCi0g
ICAgQ29uc3RhbnRVbmlvbiogZ2V0Q29uc3RQb2ludGVyKCkgY29uc3QgeyByZXR1cm4gdW5pb25B
cnJheTsgfQotCi0gICAgdm9pZCBzaGFyZUNvbnN0UG9pbnRlciggQ29uc3RhbnRVbmlvbiAqY29u
c3RBcnJheSkKLSAgICB7Ci0gICAgICAgIGlmICh1bmlvbkFycmF5ID09IGNvbnN0QXJyYXkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZGVsZXRlW10gdW5pb25BcnJheTsKLSAgICAg
ICAgdW5pb25BcnJheSA9IGNvbnN0QXJyYXk7ICAKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgRElT
QUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRWYXJpYWJsZSk7Ci0KLSAgICBUVHlwZSB0eXBlOwotICAg
IGJvb2wgdXNlclR5cGU7Ci0gICAgLy8gd2UgYXJlIGFzc3VtaW5nIHRoYXQgUG9vbCBBbGxvY2F0
b3Igd2lsbCBmcmVlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIHRvIHVuaW9uQXJyYXkKLSAgICAvLyB3
aGVuIHRoaXMgb2JqZWN0IGlzIGRlc3Ryb3llZAotICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJy
YXk7Ci19OwotCi0vLwotLy8gVGhlIGZ1bmN0aW9uIHN1Yi1jbGFzcyBvZiBzeW1ib2xzIGFuZCB0
aGUgcGFyc2VyIHdpbGwgbmVlZCB0bwotLy8gc2hhcmUgdGhpcyBkZWZpbml0aW9uIG9mIGEgZnVu
Y3Rpb24gcGFyYW1ldGVyLgotLy8KLXN0cnVjdCBUUGFyYW1ldGVyIHsKLSAgICBUU3RyaW5nICpu
YW1lOwotICAgIFRUeXBlKiB0eXBlOwotfTsKLQotLy8KLS8vIFRoZSBmdW5jdGlvbiBzdWItY2xh
c3Mgb2YgYSBzeW1ib2wuICAKLS8vCi1jbGFzcyBURnVuY3Rpb24gOiBwdWJsaWMgVFN5bWJvbCB7
Ci1wdWJsaWM6Ci0gICAgVEZ1bmN0aW9uKFRPcGVyYXRvciBvKSA6Ci0gICAgICAgIFRTeW1ib2wo
MCksCi0gICAgICAgIHJldHVyblR5cGUoVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKSksCi0g
ICAgICAgIG9wKG8pLAotICAgICAgICBkZWZpbmVkKGZhbHNlKSB7IH0KLSAgICBURnVuY3Rpb24o
Y29uc3QgVFN0cmluZyAqbmFtZSwgVFR5cGUmIHJldFR5cGUsIFRPcGVyYXRvciB0T3AgPSBFT3BO
dWxsKSA6IAotICAgICAgICBUU3ltYm9sKG5hbWUpLCAKLSAgICAgICAgcmV0dXJuVHlwZShyZXRU
eXBlKSwKLSAgICAgICAgbWFuZ2xlZE5hbWUoVEZ1bmN0aW9uOjptYW5nbGVOYW1lKCpuYW1lKSks
Ci0gICAgICAgIG9wKHRPcCksCi0gICAgICAgIGRlZmluZWQoZmFsc2UpIHsgfQotICAgIHZpcnR1
YWwgflRGdW5jdGlvbigpOwotICAgIHZpcnR1YWwgYm9vbCBpc0Z1bmN0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfSAgICAKLQotICAgIHN0YXRpYyBUU3RyaW5nIG1hbmdsZU5hbWUoY29uc3Qg
VFN0cmluZyYgbmFtZSkgeyByZXR1cm4gbmFtZSArICcoJzsgfQotICAgIHN0YXRpYyBUU3RyaW5n
IHVubWFuZ2xlTmFtZShjb25zdCBUU3RyaW5nJiBtYW5nbGVkTmFtZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBUU3RyaW5nKG1hbmdsZWROYW1lLmNfc3RyKCksIG1hbmdsZWROYW1lLmZpbmRfZmly
c3Rfb2YoJygnKSk7Ci0gICAgfQotCi0gICAgdm9pZCBhZGRQYXJhbWV0ZXIoVFBhcmFtZXRlciYg
cCkgCi0gICAgeyAKLSAgICAgICAgcGFyYW1ldGVycy5wdXNoX2JhY2socCk7Ci0gICAgICAgIG1h
bmdsZWROYW1lID0gbWFuZ2xlZE5hbWUgKyBwLnR5cGUtPmdldE1hbmdsZWROYW1lKCk7Ci0gICAg
fQotCi0gICAgY29uc3QgVFN0cmluZyYgZ2V0TWFuZ2xlZE5hbWUoKSBjb25zdCB7IHJldHVybiBt
YW5nbGVkTmFtZTsgfQotICAgIGNvbnN0IFRUeXBlJiBnZXRSZXR1cm5UeXBlKCkgY29uc3QgeyBy
ZXR1cm4gcmV0dXJuVHlwZTsgfQotCi0gICAgdm9pZCByZWxhdGVUb09wZXJhdG9yKFRPcGVyYXRv
ciBvKSB7IG9wID0gbzsgfQotICAgIFRPcGVyYXRvciBnZXRCdWlsdEluT3AoKSBjb25zdCB7IHJl
dHVybiBvcDsgfQotCi0gICAgdm9pZCBzZXREZWZpbmVkKCkgeyBkZWZpbmVkID0gdHJ1ZTsgfQot
ICAgIGJvb2wgaXNEZWZpbmVkKCkgeyByZXR1cm4gZGVmaW5lZDsgfQotCi0gICAgc2l6ZV90IGdl
dFBhcmFtQ291bnQoKSBjb25zdCB7IHJldHVybiBwYXJhbWV0ZXJzLnNpemUoKTsgfSAgCi0gICAg
Y29uc3QgVFBhcmFtZXRlciYgZ2V0UGFyYW0oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIHBhcmFt
ZXRlcnNbaV07IH0KLQotICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1Npbmsp
IGNvbnN0OwotCi1wcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihURnVuY3Rp
b24pOwotCi0gICAgdHlwZWRlZiBUVmVjdG9yPFRQYXJhbWV0ZXI+IFRQYXJhbUxpc3Q7Ci0gICAg
VFBhcmFtTGlzdCBwYXJhbWV0ZXJzOwotICAgIFRUeXBlIHJldHVyblR5cGU7Ci0gICAgVFN0cmlu
ZyBtYW5nbGVkTmFtZTsKLSAgICBUT3BlcmF0b3Igb3A7Ci0gICAgYm9vbCBkZWZpbmVkOwotfTsK
LQotCi1jbGFzcyBUU3ltYm9sVGFibGVMZXZlbCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBUTWFw
PFRTdHJpbmcsIFRTeW1ib2wqPiB0TGV2ZWw7Ci0gICAgdHlwZWRlZiB0TGV2ZWw6OmNvbnN0X2l0
ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwotICAgIHR5cGVkZWYgY29uc3QgdExldmVsOjp2YWx1ZV90
eXBlIHRMZXZlbFBhaXI7Ci0gICAgdHlwZWRlZiBzdGQ6OnBhaXI8dExldmVsOjppdGVyYXRvciwg
Ym9vbD4gdEluc2VydFJlc3VsdDsKLQotICAgIFRTeW1ib2xUYWJsZUxldmVsKCkgeyB9Ci0gICAg
flRTeW1ib2xUYWJsZUxldmVsKCk7Ci0KLSAgICBib29sIGluc2VydChjb25zdCBUU3RyaW5nICZu
YW1lLCBUU3ltYm9sICZzeW1ib2wpCi0gICAgewotICAgICAgICAvLwotICAgICAgICAvLyByZXR1
cm5pbmcgdHJ1ZSBtZWFucyBzeW1ib2wgd2FzIGFkZGVkIHRvIHRoZSB0YWJsZQotICAgICAgICAv
LwotICAgICAgICB0SW5zZXJ0UmVzdWx0IHJlc3VsdCA9IGxldmVsLmluc2VydCh0TGV2ZWxQYWly
KG5hbWUsICZzeW1ib2wpKTsKLQotICAgICAgICByZXR1cm4gcmVzdWx0LnNlY29uZDsKLSAgICB9
Ci0KLSAgICBib29sIGluc2VydChUU3ltYm9sICZzeW1ib2wpCi0gICAgewotICAgICAgICByZXR1
cm4gaW5zZXJ0KHN5bWJvbC5nZXRNYW5nbGVkTmFtZSgpLCBzeW1ib2wpOwotICAgIH0KLQotICAg
IFRTeW1ib2wqIGZpbmQoY29uc3QgVFN0cmluZyYgbmFtZSkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHRMZXZlbDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsZXZlbC5maW5kKG5hbWUpOwotICAgICAgICBp
ZiAoaXQgPT0gbGV2ZWwuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgcmV0dXJuICgqaXQpLnNlY29uZDsKLSAgICB9Ci0KLSAgICBjb25zdF9p
dGVyYXRvciBiZWdpbigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbGV2ZWwuYmVnaW4o
KTsKLSAgICB9Ci0KLSAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGxldmVsLmVuZCgpOwotICAgIH0KLQotICAgIHZvaWQgcmVsYXRlVG9PcGVyYXRv
cihjb25zdCBjaGFyKiBuYW1lLCBUT3BlcmF0b3Igb3ApOwotICAgIHZvaWQgcmVsYXRlVG9FeHRl
bnNpb24oY29uc3QgY2hhciogbmFtZSwgY29uc3QgVFN0cmluZyYgZXh0KTsKLSAgICB2b2lkIGR1
bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICB0TGV2ZWwg
bGV2ZWw7Ci19OwotCi1jbGFzcyBUU3ltYm9sVGFibGUgewotcHVibGljOgotICAgIFRTeW1ib2xU
YWJsZSgpIDogdW5pcXVlSWQoMCkKLSAgICB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIFRoZSBz
eW1ib2wgdGFibGUgY2Fubm90IGJlIHVzZWQgdW50aWwgcHVzaCgpIGlzIGNhbGxlZCwgYnV0Ci0g
ICAgICAgIC8vIHRoZSBsYWNrIG9mIGFuIGluaXRpYWwgY2FsbCB0byBwdXNoKCkgY2FuIGJlIHVz
ZWQgdG8gZGV0ZWN0Ci0gICAgICAgIC8vIHRoYXQgdGhlIHN5bWJvbCB0YWJsZSBoYXMgbm90IGJl
ZW4gcHJlbG9hZGVkIHdpdGggYnVpbHQtaW5zLgotICAgICAgICAvLwotICAgIH0KLSAgICB+VFN5
bWJvbFRhYmxlKCk7Ci0KLSAgICAvLwotICAgIC8vIFdoZW4gdGhlIHN5bWJvbCB0YWJsZSBpcyBp
bml0aWFsaXplZCB3aXRoIHRoZSBidWlsdC1pbnMsIHRoZXJlIHNob3VsZAotICAgIC8vICdwdXNo
JyBjYWxscywgc28gdGhhdCBidWlsdC1pbnMgYXJlIGF0IGxldmVsIDAgYW5kIHRoZSBzaGFkZXIK
LSAgICAvLyBnbG9iYWxzIGFyZSBhdCBsZXZlbCAxLgotICAgIC8vCi0gICAgYm9vbCBpc0VtcHR5
KCkgeyByZXR1cm4gdGFibGUuc2l6ZSgpID09IDA7IH0KLSAgICBib29sIGF0QnVpbHRJbkxldmVs
KCkgeyByZXR1cm4gdGFibGUuc2l6ZSgpID09IDE7IH0KLSAgICBib29sIGF0R2xvYmFsTGV2ZWwo
KSB7IHJldHVybiB0YWJsZS5zaXplKCkgPD0gMjsgfQotICAgIHZvaWQgcHVzaCgpCi0gICAgewot
ICAgICAgICB0YWJsZS5wdXNoX2JhY2sobmV3IFRTeW1ib2xUYWJsZUxldmVsKTsKLSAgICAgICAg
cHJlY2lzaW9uU3RhY2sucHVzaF9iYWNrKG5ldyBQcmVjaXNpb25TdGFja0xldmVsKTsKLSAgICB9
Ci0KLSAgICB2b2lkIHBvcCgpCi0gICAgewotICAgICAgICBkZWxldGUgdGFibGUuYmFjaygpOwot
ICAgICAgICB0YWJsZS5wb3BfYmFjaygpOwotCi0gICAgICAgIGRlbGV0ZSBwcmVjaXNpb25TdGFj
ay5iYWNrKCk7Ci0gICAgICAgIHByZWNpc2lvblN0YWNrLnBvcF9iYWNrKCk7Ci0gICAgfQotCi0g
ICAgYm9vbCBpbnNlcnQoVFN5bWJvbCYgc3ltYm9sKQotICAgIHsKLSAgICAgICAgc3ltYm9sLnNl
dFVuaXF1ZUlkKCsrdW5pcXVlSWQpOwotICAgICAgICByZXR1cm4gdGFibGVbY3VycmVudExldmVs
KCldLT5pbnNlcnQoc3ltYm9sKTsKLSAgICB9Ci0KLSAgICBib29sIGluc2VydENvbnN0SW50KGNv
bnN0IGNoYXIgKm5hbWUsIGludCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIFRWYXJpYWJsZSAqY29u
c3RhbnQgPSBuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKG5hbWUpLCBUVHlwZShFYnRJbnQs
IEVicFVuZGVmaW5lZCwgRXZxQ29uc3QsIDEpKTsKLSAgICAgICAgY29uc3RhbnQtPmdldENvbnN0
UG9pbnRlcigpLT5zZXRJQ29uc3QodmFsdWUpOwotICAgICAgICByZXR1cm4gaW5zZXJ0KCpjb25z
dGFudCk7Ci0gICAgfQotCi0gICAgYm9vbCBpbnNlcnRCdWlsdEluKFRUeXBlICpydmFsdWUsIGNv
bnN0IGNoYXIgKm5hbWUsIFRUeXBlICpwdHlwZTEsIFRUeXBlICpwdHlwZTIgPSAwLCBUVHlwZSAq
cHR5cGUzID0gMCkKLSAgICB7Ci0gICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1
bmN0aW9uKE5ld1Bvb2xUU3RyaW5nKG5hbWUpLCAqcnZhbHVlKTsKLQotICAgICAgICBUUGFyYW1l
dGVyIHBhcmFtMSA9IHtOVUxMLCBwdHlwZTF9OwotICAgICAgICBmdW5jdGlvbi0+YWRkUGFyYW1l
dGVyKHBhcmFtMSk7Ci0KLSAgICAgICAgaWYocHR5cGUyKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBUUGFyYW1ldGVyIHBhcmFtMiA9IHtOVUxMLCBwdHlwZTJ9OwotICAgICAgICAgICAgZnVuY3Rp
b24tPmFkZFBhcmFtZXRlcihwYXJhbTIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYocHR5cGUz
KQotICAgICAgICB7Ci0gICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtMyA9IHtOVUxMLCBwdHlw
ZTN9OwotICAgICAgICAgICAgZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJhbTMpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcmV0dXJuIGluc2VydCgqZnVuY3Rpb24pOwotICAgIH0KLQotICAgIFRT
eW1ib2wqIGZpbmQoY29uc3QgVFN0cmluZyYgbmFtZSwgYm9vbCogYnVpbHRJbiA9IDAsIGJvb2wg
KnNhbWVTY29wZSA9IDApIAotICAgIHsKLSAgICAgICAgaW50IGxldmVsID0gY3VycmVudExldmVs
KCk7Ci0gICAgICAgIFRTeW1ib2wqIHN5bWJvbDsKLSAgICAgICAgZG8gewotICAgICAgICAgICAg
c3ltYm9sID0gdGFibGVbbGV2ZWxdLT5maW5kKG5hbWUpOwotICAgICAgICAgICAgLS1sZXZlbDsK
LSAgICAgICAgfSB3aGlsZSAoc3ltYm9sID09IDAgJiYgbGV2ZWwgPj0gMCk7Ci0gICAgICAgIGxl
dmVsKys7Ci0gICAgICAgIGlmIChidWlsdEluKQotICAgICAgICAgICAgKmJ1aWx0SW4gPSBsZXZl
bCA9PSAwOwotICAgICAgICBpZiAoc2FtZVNjb3BlKQotICAgICAgICAgICAgKnNhbWVTY29wZSA9
IGxldmVsID09IGN1cnJlbnRMZXZlbCgpOwotICAgICAgICByZXR1cm4gc3ltYm9sOwotICAgIH0K
LQotICAgIFRTeW1ib2wqIGZpbmRCdWlsdEluKGNvbnN0IFRTdHJpbmcgJm5hbWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gdGFibGVbMF0tPmZpbmQobmFtZSk7Ci0gICAgfQotCi0gICAgVFN5bWJv
bFRhYmxlTGV2ZWwqIGdldE91dGVyTGV2ZWwoKSB7Ci0gICAgICAgIGFzc2VydCh0YWJsZS5zaXpl
KCkgPj0gMik7Ci0gICAgICAgIHJldHVybiB0YWJsZVtjdXJyZW50TGV2ZWwoKSAtIDFdOwotICAg
IH0KLQotICAgIHZvaWQgcmVsYXRlVG9PcGVyYXRvcihjb25zdCBjaGFyKiBuYW1lLCBUT3BlcmF0
b3Igb3ApIHsKLSAgICAgICAgdGFibGVbMF0tPnJlbGF0ZVRvT3BlcmF0b3IobmFtZSwgb3ApOwot
ICAgIH0KLSAgICB2b2lkIHJlbGF0ZVRvRXh0ZW5zaW9uKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0
IFRTdHJpbmcmIGV4dCkgewotICAgICAgICB0YWJsZVswXS0+cmVsYXRlVG9FeHRlbnNpb24obmFt
ZSwgZXh0KTsKLSAgICB9Ci0gICAgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0
OwotCi0gICAgYm9vbCBzZXREZWZhdWx0UHJlY2lzaW9uKGNvbnN0IFRQdWJsaWNUeXBlJiB0eXBl
LCBUUHJlY2lzaW9uIHByZWMpIHsKLSAgICAgICAgaWYgKCFzdXBwb3J0c1ByZWNpc2lvbih0eXBl
LnR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAodHlwZS5zaXpl
ICE9IDEgfHwgdHlwZS5tYXRyaXggfHwgdHlwZS5hcnJheSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsgLy8gTm90IGFsbG93ZWQgdG8gc2V0IGZvciBhZ2dyZWdhdGUgdHlwZXMKLSAgICAgICAg
aW50IGluZGV4T2ZMYXN0RWxlbWVudCA9IHN0YXRpY19jYXN0PGludD4ocHJlY2lzaW9uU3RhY2su
c2l6ZSgpKSAtIDE7Ci0gICAgICAgICgqcHJlY2lzaW9uU3RhY2tbaW5kZXhPZkxhc3RFbGVtZW50
XSlbdHlwZS50eXBlXSA9IHByZWM7IC8vIFVzZXMgbWFwIG9wZXJhdG9yIFtdLCBvdmVyd3JpdGVz
IHRoZSBjdXJyZW50IHZhbHVlCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8v
IFNlYXJjaGVzIGRvd24gdGhlIHByZWNpc2lvblN0YWNrIGZvciBhIHByZWNpc2lvbiBxdWFsaWZp
ZXIgZm9yIHRoZSBzcGVjaWZpZWQgVEJhc2ljVHlwZQotICAgIFRQcmVjaXNpb24gZ2V0RGVmYXVs
dFByZWNpc2lvbihUQmFzaWNUeXBlIHR5cGUpIHsKLSAgICAgICAgaWYgKCFzdXBwb3J0c1ByZWNp
c2lvbih0eXBlKSkKLSAgICAgICAgICAgIHJldHVybiBFYnBVbmRlZmluZWQ7Ci0gICAgICAgIGlu
dCBsZXZlbCA9IHN0YXRpY19jYXN0PGludD4ocHJlY2lzaW9uU3RhY2suc2l6ZSgpKSAtIDE7Ci0g
ICAgICAgIGFzc2VydChsZXZlbCA+PSAwKTsgLy8gSnVzdCB0byBiZSBzYWZlLiBTaG91bGQgbm90
IGhhcHBlbi4KLSAgICAgICAgUHJlY2lzaW9uU3RhY2tMZXZlbDo6aXRlcmF0b3IgaXQ7Ci0gICAg
ICAgIFRQcmVjaXNpb24gcHJlYyA9IEVicFVuZGVmaW5lZDsgLy8gSWYgd2UgZG9udCBmaW5kIGFu
eXRoaW5nIHdlIHJldHVybiB0aGlzLiBTaG91bGQgd2UgZXJyb3IgY2hlY2sgdGhpcz8KLSAgICAg
ICAgd2hpbGUgKGxldmVsID49IDApIHsKLSAgICAgICAgICAgIGl0ID0gcHJlY2lzaW9uU3RhY2tb
bGV2ZWxdLT5maW5kKHR5cGUpOwotICAgICAgICAgICAgaWYgKGl0ICE9IHByZWNpc2lvblN0YWNr
W2xldmVsXS0+ZW5kKCkpIHsKLSAgICAgICAgICAgICAgICBwcmVjID0gKCppdCkuc2Vjb25kOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGV2ZWwt
LTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcHJlYzsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgaW50IGN1cnJlbnRMZXZlbCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4odGFi
bGUuc2l6ZSgpKSAtIDE7IH0KLQotICAgIGJvb2wgc3VwcG9ydHNQcmVjaXNpb24oVEJhc2ljVHlw
ZSB0eXBlKSB7Ci0gICAgICAvLyBPbmx5IHN1cHBvcnRzIHByZWNpc2lvbiBmb3IgaW50LCBmbG9h
dCwgYW5kIHNhbXBsZXIgdHlwZXMuCi0gICAgICByZXR1cm4gdHlwZSA9PSBFYnRGbG9hdCB8fCB0
eXBlID09IEVidEludCB8fCBJc1NhbXBsZXIodHlwZSk7Ci0gICAgfQotCi0gICAgaW50IHVuaXF1
ZUlkOyAgICAgLy8gZm9yIHVuaXF1ZSBpZGVudGlmaWNhdGlvbiBpbiBjb2RlIGdlbmVyYXRpb24K
LSAgICBzdGQ6OnZlY3RvcjxUU3ltYm9sVGFibGVMZXZlbCo+IHRhYmxlOwotICAgIHR5cGVkZWYg
VE1hcDxUQmFzaWNUeXBlLCBUUHJlY2lzaW9uPiBQcmVjaXNpb25TdGFja0xldmVsOwotICAgIHN0
ZDo6dmVjdG9yPFByZWNpc2lvblN0YWNrTGV2ZWwqPiBwcmVjaXNpb25TdGFjazsKLX07Ci0KLSNl
bmRpZiAvLyBfU1lNQk9MX1RBQkxFX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JFU1NMLmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDI5MDBmOGE4ZWRlOWQ2YTA3NzRhNDFmZjZiNmEwMWM0ZTcxZDM2
OTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JFU1NMLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJj
b21waWxlci9UcmFuc2xhdG9yRVNTTC5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0RVNT
TC5oIgotCi1UcmFuc2xhdG9yRVNTTDo6VHJhbnNsYXRvckVTU0woU2hTaGFkZXJUeXBlIHR5cGUs
IFNoU2hhZGVyU3BlYyBzcGVjKQotICAgIDogVENvbXBpbGVyKHR5cGUsIHNwZWMpIHsKLX0KLQot
dm9pZCBUcmFuc2xhdG9yRVNTTDo6dHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KSB7Ci0gICAg
VEluZm9TaW5rQmFzZSYgc2luayA9IGdldEluZm9TaW5rKCkub2JqOwotCi0gICAgLy8gV3JpdGUg
YnVpbHQtaW4gZXh0ZW5zaW9uIGJlaGF2aW9ycy4KLSAgICB3cml0ZUV4dGVuc2lvbkJlaGF2aW9y
KCk7Ci0KLSAgICAvLyBXcml0ZSBlbXVsYXRlZCBidWlsdC1pbiBmdW5jdGlvbnMgaWYgbmVlZGVk
LgotICAgIGdldEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yKCkuT3V0cHV0RW11bGF0ZWRGdW5jdGlv
bkRlZmluaXRpb24oCi0gICAgICAgIHNpbmssIGdldFNoYWRlclR5cGUoKSA9PSBTSF9GUkFHTUVO
VF9TSEFERVIpOwotCi0gICAgLy8gV3JpdGUgYXJyYXkgYm91bmRzIGNsYW1waW5nIGVtdWxhdGlv
biBpZiBuZWVkZWQuCi0gICAgZ2V0QXJyYXlCb3VuZHNDbGFtcGVyKCkuT3V0cHV0Q2xhbXBpbmdG
dW5jdGlvbkRlZmluaXRpb24oc2luayk7Ci0KLSAgICAvLyBXcml0ZSB0cmFuc2xhdGVkIHNoYWRl
ci4KLSAgICBUT3V0cHV0RVNTTCBvdXRwdXRFU1NMKHNpbmssIGdldEFycmF5SW5kZXhDbGFtcGlu
Z1N0cmF0ZWd5KCksIGdldEhhc2hGdW5jdGlvbigpLCBnZXROYW1lTWFwKCksIGdldFN5bWJvbFRh
YmxlKCkpOwotICAgIHJvb3QtPnRyYXZlcnNlKCZvdXRwdXRFU1NMKTsKLX0KLQotdm9pZCBUcmFu
c2xhdG9yRVNTTDo6d3JpdGVFeHRlbnNpb25CZWhhdmlvcigpIHsKLSAgICBUSW5mb1NpbmtCYXNl
JiBzaW5rID0gZ2V0SW5mb1NpbmsoKS5vYmo7Ci0gICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9y
JiBleHRlbnNpb25CZWhhdmlvciA9IGdldEV4dGVuc2lvbkJlaGF2aW9yKCk7Ci0gICAgZm9yIChU
RXh0ZW5zaW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRlbnNpb25CZWhhdmlv
ci5iZWdpbigpOwotICAgICAgICAgaXRlciAhPSBleHRlbnNpb25CZWhhdmlvci5lbmQoKTsgKytp
dGVyKSB7Ci0gICAgICAgIGlmIChpdGVyLT5zZWNvbmQgIT0gRUJoVW5kZWZpbmVkKSB7Ci0gICAg
ICAgICAgICBzaW5rIDw8ICIjZXh0ZW5zaW9uICIgPDwgaXRlci0+Zmlyc3QgPDwgIiA6ICIKLSAg
ICAgICAgICAgICAgICAgPDwgZ2V0QmVoYXZpb3JTdHJpbmcoaXRlci0+c2Vjb25kKSA8PCAiXG4i
OwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JFU1NMLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYTExOTZiZDAwMTNhY2FjNDRkNzhkNTg1OGZlNTgxN2E2ZTI3YjViYS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuaAorKysgL2Rldi9udWxsCkBAIC0xLDIz
ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRP
UkVTU0xfSF8KLSNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUkVTU0xfSF8KLQotI2luY2x1ZGUg
ImNvbXBpbGVyL1NoSGFuZGxlLmgiCi0KLWNsYXNzIFRyYW5zbGF0b3JFU1NMIDogcHVibGljIFRD
b21waWxlciB7Ci1wdWJsaWM6Ci0gICAgVHJhbnNsYXRvckVTU0woU2hTaGFkZXJUeXBlIHR5cGUs
IFNoU2hhZGVyU3BlYyBzcGVjKTsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCB0cmFu
c2xhdGUoVEludGVybU5vZGUqIHJvb3QpOwotCi1wcml2YXRlOgotICAgIHZvaWQgd3JpdGVFeHRl
bnNpb25CZWhhdmlvcigpOwotfTsKLQotI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SRVNT
TF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Ry
YW5zbGF0b3JHTFNMLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9U
cmFuc2xhdG9yR0xTTC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjYTQzNDFk
Y2RlYTc3ODM0NmZhMzYyN2UyM2FjYTQxOThmMTU2ODkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1RyYW5zbGF0b3JHTFNMLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9UcmFuc2xhdG9yR0xTTC5oIgot
Ci0jaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0R0xTTC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1Zl
cnNpb25HTFNMLmgiCi0KLXN0YXRpYyB2b2lkIHdyaXRlVmVyc2lvbihTaFNoYWRlclR5cGUgdHlw
ZSwgVEludGVybU5vZGUqIHJvb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgVEluZm9TaW5r
QmFzZSYgc2luaykgewotICAgIFRWZXJzaW9uR0xTTCB2ZXJzaW9uR0xTTCh0eXBlKTsKLSAgICBy
b290LT50cmF2ZXJzZSgmdmVyc2lvbkdMU0wpOwotICAgIGludCB2ZXJzaW9uID0gdmVyc2lvbkdM
U0wuZ2V0VmVyc2lvbigpOwotICAgIC8vIFdlIG5lZWQgdG8gd3JpdGUgdmVyc2lvbiBkaXJlY3Rp
dmUgb25seSBpZiBpdCBpcyBncmVhdGVyIHRoYW4gMTEwLgotICAgIC8vIElmIHRoZXJlIGlzIG5v
IHZlcnNpb24gZGlyZWN0aXZlIGluIHRoZSBzaGFkZXIsIDExMCBpcyBpbXBsaWVkLgotICAgIGlm
ICh2ZXJzaW9uID4gMTEwKSB7Ci0gICAgICAgIHNpbmsgPDwgIiN2ZXJzaW9uICIgPDwgdmVyc2lv
biA8PCAiXG4iOwotICAgIH0KLX0KLQotVHJhbnNsYXRvckdMU0w6OlRyYW5zbGF0b3JHTFNMKFNo
U2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYykKLSAgICA6IFRDb21waWxlcih0eXBl
LCBzcGVjKSB7Ci19Ci0KLXZvaWQgVHJhbnNsYXRvckdMU0w6OnRyYW5zbGF0ZShUSW50ZXJtTm9k
ZSogcm9vdCkgewotICAgIFRJbmZvU2lua0Jhc2UmIHNpbmsgPSBnZXRJbmZvU2luaygpLm9iajsK
LQotICAgIC8vIFdyaXRlIEdMU0wgdmVyc2lvbi4KLSAgICB3cml0ZVZlcnNpb24oZ2V0U2hhZGVy
VHlwZSgpLCByb290LCBzaW5rKTsKLQotICAgIC8vIFdyaXRlIGVtdWxhdGVkIGJ1aWx0LWluIGZ1
bmN0aW9ucyBpZiBuZWVkZWQuCi0gICAgZ2V0QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IoKS5PdXRw
dXRFbXVsYXRlZEZ1bmN0aW9uRGVmaW5pdGlvbigKLSAgICAgICAgc2luaywgZmFsc2UpOwotCi0g
ICAgLy8gV3JpdGUgYXJyYXkgYm91bmRzIGNsYW1waW5nIGVtdWxhdGlvbiBpZiBuZWVkZWQuCi0g
ICAgZ2V0QXJyYXlCb3VuZHNDbGFtcGVyKCkuT3V0cHV0Q2xhbXBpbmdGdW5jdGlvbkRlZmluaXRp
b24oc2luayk7Ci0KLSAgICAvLyBXcml0ZSB0cmFuc2xhdGVkIHNoYWRlci4KLSAgICBUT3V0cHV0
R0xTTCBvdXRwdXRHTFNMKHNpbmssIGdldEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5KCksIGdl
dEhhc2hGdW5jdGlvbigpLCBnZXROYW1lTWFwKCksIGdldFN5bWJvbFRhYmxlKCkpOwotICAgIHJv
b3QtPnRyYXZlcnNlKCZvdXRwdXRHTFNMKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGMyY2UwNmQxOTJmMGZjNjFkYWJkNTM2ZDIwNDlmZmI5ZWRlZjNhNjMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmgKKysrIC9kZXYvbnVsbApA
QCAtMSwyMCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1RS
QU5TTEFUT1JHTFNMX0hfCi0jZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JHTFNMX0hfCi0KLSNp
bmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgotCi1jbGFzcyBUcmFuc2xhdG9yR0xTTCA6IHB1
YmxpYyBUQ29tcGlsZXIgewotcHVibGljOgotICAgIFRyYW5zbGF0b3JHTFNMKFNoU2hhZGVyVHlw
ZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYyk7Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZv
aWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KTsKLX07Ci0KLSNlbmRpZiAgLy8gQ09NUElM
RVJfVFJBTlNMQVRPUkdMU0xfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAzNzQwOGEwN2M0OTZmNzYxNGUxNzZiZTliNWI2NzE1YWFjNThlNTQ5Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwyNCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvVHJh
bnNsYXRvckhMU0wuaCIKLQotI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRl
eHQuaCIKLSNpbmNsdWRlICJjb21waWxlci9PdXRwdXRITFNMLmgiCi0KLVRyYW5zbGF0b3JITFNM
OjpUcmFuc2xhdG9ySExTTChTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsIFNo
U2hhZGVyT3V0cHV0IG91dHB1dCkKLSAgICA6IFRDb21waWxlcih0eXBlLCBzcGVjKSwgbU91dHB1
dFR5cGUob3V0cHV0KQotewotfQotCi12b2lkIFRyYW5zbGF0b3JITFNMOjp0cmFuc2xhdGUoVElu
dGVybU5vZGUgKnJvb3QpCi17Ci0gICAgVFBhcnNlQ29udGV4dCYgcGFyc2VDb250ZXh0ID0gKkdl
dEdsb2JhbFBhcnNlQ29udGV4dCgpOwotICAgIHNoOjpPdXRwdXRITFNMIG91dHB1dEhMU0wocGFy
c2VDb250ZXh0LCBnZXRSZXNvdXJjZXMoKSwgbU91dHB1dFR5cGUpOwotCi0gICAgb3V0cHV0SExT
TC5vdXRwdXQoKTsKLSAgICBtQWN0aXZlVW5pZm9ybXMgPSBvdXRwdXRITFNMLmdldFVuaWZvcm1z
KCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
VHJhbnNsYXRvckhMU0wuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9U
cmFuc2xhdG9ySExTTC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTUwZTE1ZThl
Zjc1MjM5MmMxYjAxYmQ2YjFmZGJjNDQ2MDlkM2I4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9UcmFuc2xhdG9ySExTTC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SSExTTF9IXwotI2RlZmlu
ZSBDT01QSUxFUl9UUkFOU0xBVE9SSExTTF9IXwotCi0jaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5k
bGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9Vbmlmb3JtLmgiCi0KLWNsYXNzIFRyYW5zbGF0b3JI
TFNMIDogcHVibGljIFRDb21waWxlciB7Ci1wdWJsaWM6Ci0gICAgVHJhbnNsYXRvckhMU0woU2hT
aGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBTaFNoYWRlck91dHB1dCBvdXRwdXQp
OwotCi0gICAgdmlydHVhbCBUcmFuc2xhdG9ySExTTCAqZ2V0QXNUcmFuc2xhdG9ySExTTCgpIHsg
cmV0dXJuIHRoaXM7IH0KLSAgICBjb25zdCBzaDo6QWN0aXZlVW5pZm9ybXMgJmdldFVuaWZvcm1z
KCkgeyByZXR1cm4gbUFjdGl2ZVVuaWZvcm1zOyB9Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFs
IHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KTsKLQotICAgIHNoOjpBY3RpdmVVbmlm
b3JtcyBtQWN0aXZlVW5pZm9ybXM7Ci0gICAgU2hTaGFkZXJPdXRwdXQgbU91dHB1dFR5cGU7Ci19
OwotCi0jZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JITFNMX0hfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHlwZXMuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UeXBlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA3NTU2MGRkYzZlZmE3NDBiZTYxYWEyMzQxZjYwMTgzY2RjYWYwNzY5Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9UeXBlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzA3ICswLDAg
QEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgX1RZUEVTX0lOQ0xVREVECi0jZGVmaW5l
IF9UWVBFU19JTkNMVURFRAotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLQotI2lu
Y2x1ZGUgImNvbXBpbGVyL0Jhc2VUeXBlcy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL0NvbW1vbi5o
IgotI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCi0KLXN0cnVjdCBUUHVibGljVHlwZTsKLWNs
YXNzIFRUeXBlOwotCi1jbGFzcyBURmllbGQKLXsKLXB1YmxpYzoKLSAgICBQT09MX0FMTE9DQVRP
Ul9ORVdfREVMRVRFKCk7Ci0gICAgVEZpZWxkKFRUeXBlKiB0eXBlLCBUU3RyaW5nKiBuYW1lKSA6
IG1UeXBlKHR5cGUpLCBtTmFtZShuYW1lKSB7fQotCi0gICAgLy8gVE9ETyhhbG9rcCk6IFdlIHNo
b3VsZCBvbmx5IHJldHVybiBjb25zdCB0eXBlLgotICAgIC8vIEZpeCBpdCBieSB0d2Vha2luZyBn
cmFtbWFyLgotICAgIFRUeXBlKiB0eXBlKCkgeyByZXR1cm4gbVR5cGU7IH0KLSAgICBjb25zdCBU
VHlwZSogdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1UeXBlOyB9Ci0KLSAgICBjb25zdCBUU3RyaW5n
JiBuYW1lKCkgY29uc3QgeyByZXR1cm4gKm1OYW1lOyB9Ci0KLXByaXZhdGU6Ci0gICAgRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKFRGaWVsZCk7Ci0gICAgVFR5cGUqIG1UeXBlOwotICAgIFRTdHJp
bmcqIG1OYW1lOwotfTsKLQotdHlwZWRlZiBUVmVjdG9yPFRGaWVsZCo+IFRGaWVsZExpc3Q7Ci1p
bmxpbmUgVEZpZWxkTGlzdCogTmV3UG9vbFRGaWVsZExpc3QoKQotewotICAgIHZvaWQqIG1lbW9y
eSA9IEdldEdsb2JhbFBvb2xBbGxvY2F0b3IoKS0+YWxsb2NhdGUoc2l6ZW9mKFRGaWVsZExpc3Qp
KTsKLSAgICByZXR1cm4gbmV3KG1lbW9yeSkgVEZpZWxkTGlzdDsKLX0KLQotY2xhc3MgVFN0cnVj
dHVyZQotewotcHVibGljOgotICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKLSAgICBU
U3RydWN0dXJlKFRTdHJpbmcqIG5hbWUsIFRGaWVsZExpc3QqIGZpZWxkcykKLSAgICAgICAgOiBt
TmFtZShuYW1lKSwKLSAgICAgICAgICBtRmllbGRzKGZpZWxkcyksCi0gICAgICAgICAgbU9iamVj
dFNpemUoMCksCi0gICAgICAgICAgbURlZXBlc3ROZXN0aW5nKDApIHsKLSAgICB9Ci0KLSAgICBj
b25zdCBUU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gKm1OYW1lOyB9Ci0gICAgY29uc3Qg
VEZpZWxkTGlzdCYgZmllbGRzKCkgY29uc3QgeyByZXR1cm4gKm1GaWVsZHM7IH0KLQotICAgIGNv
bnN0IFRTdHJpbmcmIG1hbmdsZWROYW1lKCkgY29uc3QgewotICAgICAgICBpZiAobU1hbmdsZWRO
YW1lLmVtcHR5KCkpCi0gICAgICAgICAgICBtTWFuZ2xlZE5hbWUgPSBidWlsZE1hbmdsZWROYW1l
KCk7Ci0gICAgICAgIHJldHVybiBtTWFuZ2xlZE5hbWU7Ci0gICAgfQotICAgIHNpemVfdCBvYmpl
Y3RTaXplKCkgY29uc3QgewotICAgICAgICBpZiAobU9iamVjdFNpemUgPT0gMCkKLSAgICAgICAg
ICAgIG1PYmplY3RTaXplID0gY2FsY3VsYXRlT2JqZWN0U2l6ZSgpOwotICAgICAgICByZXR1cm4g
bU9iamVjdFNpemU7Ci0gICAgfTsKLSAgICBpbnQgZGVlcGVzdE5lc3RpbmcoKSBjb25zdCB7Ci0g
ICAgICAgIGlmIChtRGVlcGVzdE5lc3RpbmcgPT0gMCkKLSAgICAgICAgICAgIG1EZWVwZXN0TmVz
dGluZyA9IGNhbGN1bGF0ZURlZXBlc3ROZXN0aW5nKCk7Ci0gICAgICAgIHJldHVybiBtRGVlcGVz
dE5lc3Rpbmc7Ci0gICAgfQotICAgIGJvb2wgY29udGFpbnNBcnJheXMoKSBjb25zdDsKLQotcHJp
dmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVFN0cnVjdHVyZSk7Ci0gICAgVFN0
cmluZyBidWlsZE1hbmdsZWROYW1lKCkgY29uc3Q7Ci0gICAgc2l6ZV90IGNhbGN1bGF0ZU9iamVj
dFNpemUoKSBjb25zdDsKLSAgICBpbnQgY2FsY3VsYXRlRGVlcGVzdE5lc3RpbmcoKSBjb25zdDsK
LQotICAgIFRTdHJpbmcqIG1OYW1lOwotICAgIFRGaWVsZExpc3QqIG1GaWVsZHM7Ci0KLSAgICBt
dXRhYmxlIFRTdHJpbmcgbU1hbmdsZWROYW1lOwotICAgIG11dGFibGUgc2l6ZV90IG1PYmplY3RT
aXplOwotICAgIG11dGFibGUgaW50IG1EZWVwZXN0TmVzdGluZzsKLX07Ci0KLS8vCi0vLyBCYXNl
IGNsYXNzIGZvciB0aGluZ3MgdGhhdCBoYXZlIGEgdHlwZS4KLS8vCi1jbGFzcyBUVHlwZQotewot
cHVibGljOgotICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKLSAgICBUVHlwZSgpIHt9
Ci0gICAgVFR5cGUoVEJhc2ljVHlwZSB0LCBUUHJlY2lzaW9uIHAsIFRRdWFsaWZpZXIgcSA9IEV2
cVRlbXBvcmFyeSwgdW5zaWduZWQgY2hhciBzID0gMSwgYm9vbCBtID0gZmFsc2UsIGJvb2wgYSA9
IGZhbHNlKSA6Ci0gICAgICAgICAgICB0eXBlKHQpLCBwcmVjaXNpb24ocCksIHF1YWxpZmllcihx
KSwgc2l6ZShzKSwgbWF0cml4KG0pLCBhcnJheShhKSwgYXJyYXlTaXplKDApLCBzdHJ1Y3R1cmUo
MCkKLSAgICB7Ci0gICAgfQotICAgIGV4cGxpY2l0IFRUeXBlKGNvbnN0IFRQdWJsaWNUeXBlICZw
KTsKLSAgICBUVHlwZShUU3RydWN0dXJlKiB1c2VyRGVmLCBUUHJlY2lzaW9uIHAgPSBFYnBVbmRl
ZmluZWQpIDoKLSAgICAgICAgICAgIHR5cGUoRWJ0U3RydWN0KSwgcHJlY2lzaW9uKHApLCBxdWFs
aWZpZXIoRXZxVGVtcG9yYXJ5KSwgc2l6ZSgxKSwgbWF0cml4KGZhbHNlKSwgYXJyYXkoZmFsc2Up
LCBhcnJheVNpemUoMCksIHN0cnVjdHVyZSh1c2VyRGVmKQotICAgIHsKLSAgICB9Ci0KLSAgICBU
QmFzaWNUeXBlIGdldEJhc2ljVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGU7IH0KLSAgICB2b2lk
IHNldEJhc2ljVHlwZShUQmFzaWNUeXBlIHQpIHsgdHlwZSA9IHQ7IH0KLQotICAgIFRQcmVjaXNp
b24gZ2V0UHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gcHJlY2lzaW9uOyB9Ci0gICAgdm9pZCBz
ZXRQcmVjaXNpb24oVFByZWNpc2lvbiBwKSB7IHByZWNpc2lvbiA9IHA7IH0KLQotICAgIFRRdWFs
aWZpZXIgZ2V0UXVhbGlmaWVyKCkgY29uc3QgeyByZXR1cm4gcXVhbGlmaWVyOyB9Ci0gICAgdm9p
ZCBzZXRRdWFsaWZpZXIoVFF1YWxpZmllciBxKSB7IHF1YWxpZmllciA9IHE7IH0KLQotICAgIC8v
IE9uZS1kaW1lbnNpb25hbCBzaXplIG9mIHNpbmdsZSBpbnN0YW5jZSB0eXBlCi0gICAgaW50IGdl
dE5vbWluYWxTaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZTsgfQotICAgIHZvaWQgc2V0Tm9taW5h
bFNpemUodW5zaWduZWQgY2hhciBzKSB7IHNpemUgPSBzOyB9Ci0gICAgLy8gRnVsbCBzaXplIG9m
IHNpbmdsZSBpbnN0YW5jZSBvZiB0eXBlCi0gICAgc2l6ZV90IGdldE9iamVjdFNpemUoKSBjb25z
dDsKLQotICAgIGludCBlbGVtZW50UmVnaXN0ZXJDb3VudCgpIGNvbnN0Ci0gICAgewotICAgICAg
ICBpZiAoc3RydWN0dXJlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBURmllbGRMaXN0
ICZmaWVsZHMgPSBnZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Ci0gICAgICAgICAgICBpbnQgcmVnaXN0
ZXJDb3VudCA9IDA7Ci0KLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRz
LnNpemUoKTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ291
bnQgKz0gZmllbGRzW2ldLT50eXBlKCktPnRvdGFsUmVnaXN0ZXJDb3VudCgpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICByZXR1cm4gcmVnaXN0ZXJDb3VudDsKLSAgICAgICAgfQotICAg
ICAgICBlbHNlIGlmIChpc01hdHJpeCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
Z2V0Tm9taW5hbFNpemUoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaW50IHRvdGFsUmVn
aXN0ZXJDb3VudCgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoYXJyYXkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBhcnJheVNpemUgKiBlbGVtZW50UmVnaXN0ZXJDb3VudCgpOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVs
ZW1lbnRSZWdpc3RlckNvdW50KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sIGlzTWF0
cml4KCkgY29uc3QgeyByZXR1cm4gbWF0cml4ID8gdHJ1ZSA6IGZhbHNlOyB9Ci0gICAgdm9pZCBz
ZXRNYXRyaXgoYm9vbCBtKSB7IG1hdHJpeCA9IG07IH0KLQotICAgIGJvb2wgaXNBcnJheSgpIGNv
bnN0ICB7IHJldHVybiBhcnJheSA/IHRydWUgOiBmYWxzZTsgfQotICAgIGludCBnZXRBcnJheVNp
emUoKSBjb25zdCB7IHJldHVybiBhcnJheVNpemU7IH0KLSAgICB2b2lkIHNldEFycmF5U2l6ZShp
bnQgcykgeyBhcnJheSA9IHRydWU7IGFycmF5U2l6ZSA9IHM7IH0KLSAgICB2b2lkIGNsZWFyQXJy
YXluZXNzKCkgeyBhcnJheSA9IGZhbHNlOyBhcnJheVNpemUgPSAwOyB9Ci0KLSAgICBib29sIGlz
VmVjdG9yKCkgY29uc3QgeyByZXR1cm4gc2l6ZSA+IDEgJiYgIW1hdHJpeDsgfQotICAgIGJvb2wg
aXNTY2FsYXIoKSBjb25zdCB7IHJldHVybiBzaXplID09IDEgJiYgIW1hdHJpeCAmJiAhc3RydWN0
dXJlOyB9Ci0KLSAgICBUU3RydWN0dXJlKiBnZXRTdHJ1Y3QoKSBjb25zdCB7IHJldHVybiBzdHJ1
Y3R1cmU7IH0KLSAgICB2b2lkIHNldFN0cnVjdChUU3RydWN0dXJlKiBzKSB7IHN0cnVjdHVyZSA9
IHM7IH0KLQotICAgIGNvbnN0IFRTdHJpbmcmIGdldE1hbmdsZWROYW1lKCkgY29uc3QgewotICAg
ICAgICBpZiAobWFuZ2xlZC5lbXB0eSgpKSB7Ci0gICAgICAgICAgICBtYW5nbGVkID0gYnVpbGRN
YW5nbGVkTmFtZSgpOwotICAgICAgICAgICAgbWFuZ2xlZCArPSAnOyc7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIG1hbmdsZWQ7Ci0gICAgfQotCi0gICAgYm9vbCBzYW1lRWxlbWVudFR5cGUo
Y29uc3QgVFR5cGUmIHJpZ2h0KSBjb25zdCB7Ci0gICAgICAgIHJldHVybiAgICAgIHR5cGUgPT0g
cmlnaHQudHlwZSAgICYmCi0gICAgICAgICAgICAgICAgICAgIHNpemUgPT0gcmlnaHQuc2l6ZSAg
ICYmCi0gICAgICAgICAgICAgICAgICBtYXRyaXggPT0gcmlnaHQubWF0cml4ICYmCi0gICAgICAg
ICAgICAgICBzdHJ1Y3R1cmUgPT0gcmlnaHQuc3RydWN0dXJlOwotICAgIH0KLSAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgVFR5cGUmIHJpZ2h0KSBjb25zdCB7Ci0gICAgICAgIHJldHVybiAgICAg
IHR5cGUgPT0gcmlnaHQudHlwZSAgICYmCi0gICAgICAgICAgICAgICAgICAgIHNpemUgPT0gcmln
aHQuc2l6ZSAgICYmCi0gICAgICAgICAgICAgICAgICBtYXRyaXggPT0gcmlnaHQubWF0cml4ICYm
Ci0gICAgICAgICAgICAgICAgICAgYXJyYXkgPT0gcmlnaHQuYXJyYXkgICYmICghYXJyYXkgfHwg
YXJyYXlTaXplID09IHJpZ2h0LmFycmF5U2l6ZSkgJiYKLSAgICAgICAgICAgICAgIHN0cnVjdHVy
ZSA9PSByaWdodC5zdHJ1Y3R1cmU7Ci0gICAgICAgIC8vIGRvbid0IGNoZWNrIHRoZSBxdWFsaWZp
ZXIsIGl0J3Mgbm90IGV2ZXIgd2hhdCdzIGJlaW5nIHNvdWdodCBhZnRlcgotICAgIH0KLSAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgVFR5cGUmIHJpZ2h0KSBjb25zdCB7Ci0gICAgICAgIHJldHVy
biAhb3BlcmF0b3I9PShyaWdodCk7Ci0gICAgfQotICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFRU
eXBlJiByaWdodCkgY29uc3QgewotICAgICAgICBpZiAodHlwZSAhPSByaWdodC50eXBlKSByZXR1
cm4gdHlwZSA8IHJpZ2h0LnR5cGU7Ci0gICAgICAgIGlmIChzaXplICE9IHJpZ2h0LnNpemUpIHJl
dHVybiBzaXplIDwgcmlnaHQuc2l6ZTsKLSAgICAgICAgaWYgKG1hdHJpeCAhPSByaWdodC5tYXRy
aXgpIHJldHVybiBtYXRyaXggPCByaWdodC5tYXRyaXg7Ci0gICAgICAgIGlmIChhcnJheSAhPSBy
aWdodC5hcnJheSkgcmV0dXJuIGFycmF5IDwgcmlnaHQuYXJyYXk7Ci0gICAgICAgIGlmIChhcnJh
eVNpemUgIT0gcmlnaHQuYXJyYXlTaXplKSByZXR1cm4gYXJyYXlTaXplIDwgcmlnaHQuYXJyYXlT
aXplOwotICAgICAgICBpZiAoc3RydWN0dXJlICE9IHJpZ2h0LnN0cnVjdHVyZSkgcmV0dXJuIHN0
cnVjdHVyZSA8IHJpZ2h0LnN0cnVjdHVyZTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgY29uc3QgY2hhciogZ2V0QmFzaWNTdHJpbmcoKSBjb25zdCB7IHJldHVybiA6Omdl
dEJhc2ljU3RyaW5nKHR5cGUpOyB9Ci0gICAgY29uc3QgY2hhciogZ2V0UHJlY2lzaW9uU3RyaW5n
KCkgY29uc3QgeyByZXR1cm4gOjpnZXRQcmVjaXNpb25TdHJpbmcocHJlY2lzaW9uKTsgfQotICAg
IGNvbnN0IGNoYXIqIGdldFF1YWxpZmllclN0cmluZygpIGNvbnN0IHsgcmV0dXJuIDo6Z2V0UXVh
bGlmaWVyU3RyaW5nKHF1YWxpZmllcik7IH0KLSAgICBUU3RyaW5nIGdldENvbXBsZXRlU3RyaW5n
KCkgY29uc3Q7Ci0KLSAgICAvLyBJZiB0aGlzIHR5cGUgaXMgYSBzdHJ1Y3QsIHJldHVybnMgdGhl
IGRlZXBlc3Qgc3RydWN0IG5lc3Rpbmcgb2YKLSAgICAvLyBhbnkgZmllbGQgaW4gdGhlIHN0cnVj
dC4gRm9yIGV4YW1wbGU6Ci0gICAgLy8gICBzdHJ1Y3QgbmVzdGluZzEgewotICAgIC8vICAgICB2
ZWM0IHBvc2l0aW9uOwotICAgIC8vICAgfTsKLSAgICAvLyAgIHN0cnVjdCBuZXN0aW5nMiB7Ci0g
ICAgLy8gICAgIG5lc3RpbmcxIGZpZWxkMTsKLSAgICAvLyAgICAgdmVjNCBmaWVsZDI7Ci0gICAg
Ly8gICB9OwotICAgIC8vIEZvciB0eXBlICJuZXN0aW5nMiIsIHRoaXMgbWV0aG9kIHdvdWxkIHJl
dHVybiAyIC0tIHRoZSBudW1iZXIKLSAgICAvLyBvZiBzdHJ1Y3R1cmVzIHRocm91Z2ggd2hpY2gg
aW5kaXJlY3Rpb24gbXVzdCBvY2N1ciB0byByZWFjaCB0aGUKLSAgICAvLyBkZWVwZXN0IGZpZWxk
IChuZXN0aW5nMi5maWVsZDEucG9zaXRpb24pLgotICAgIGludCBnZXREZWVwZXN0U3RydWN0TmVz
dGluZygpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIHN0cnVjdHVyZSA/IHN0cnVjdHVyZS0+ZGVl
cGVzdE5lc3RpbmcoKSA6IDA7Ci0gICAgfQotCi0gICAgYm9vbCBpc1N0cnVjdHVyZUNvbnRhaW5p
bmdBcnJheXMoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBzdHJ1Y3R1cmUgPyBzdHJ1Y3R1cmUt
PmNvbnRhaW5zQXJyYXlzKCkgOiBmYWxzZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgVFN0cmlu
ZyBidWlsZE1hbmdsZWROYW1lKCkgY29uc3Q7Ci0KLSAgICBUQmFzaWNUeXBlIHR5cGU7Ci0gICAg
VFByZWNpc2lvbiBwcmVjaXNpb247Ci0gICAgVFF1YWxpZmllciBxdWFsaWZpZXI7Ci0gICAgdW5z
aWduZWQgY2hhciBzaXplOwotICAgIGJvb2wgbWF0cml4OwotICAgIGJvb2wgYXJyYXk7Ci0gICAg
aW50IGFycmF5U2l6ZTsKLQotICAgIFRTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsgICAgICAvLyAwIHVu
bGVzcyB0aGlzIGlzIGEgc3RydWN0Ci0KLSAgICBtdXRhYmxlIFRTdHJpbmcgbWFuZ2xlZDsKLX07
Ci0KLS8vCi0vLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBwcm9ibGVtIHdpdGggdGhlIHlh
Y2Mgc3RhY2ssICBJdCBjYW4ndCBoYXZlCi0vLyB0eXBlcyB0aGF0IGl0IHRoaW5rcyBoYXZlIG5v
bi10cml2aWFsIGNvbnN0cnVjdG9ycy4gIEl0IHNob3VsZAotLy8ganVzdCBiZSB1c2VkIHdoaWxl
IHJlY29nbml6aW5nIHRoZSBncmFtbWFyLCBub3QgYW55dGhpbmcgZWxzZS4gIFBvaW50ZXJzCi0v
LyBjb3VsZCBiZSB1c2VkLCBidXQgYWxzbyB0cnlpbmcgdG8gYXZvaWQgbG90cyBvZiBtZW1vcnkg
bWFuYWdlbWVudCBvdmVyaGVhZC4KLS8vCi0vLyBOb3QgYXMgYmFkIGFzIGl0IGxvb2tzLCB0aGVy
ZSBpcyBubyBhY3R1YWwgYXNzdW1wdGlvbiB0aGF0IHRoZSBmaWVsZHMKLS8vIG1hdGNoIHVwIG9y
IGFyZSBuYW1lIHRoZSBzYW1lIG9yIGFueXRoaW5nIGxpa2UgdGhhdC4KLS8vCi1zdHJ1Y3QgVFB1
YmxpY1R5cGUKLXsKLSAgICBUQmFzaWNUeXBlIHR5cGU7Ci0gICAgVFF1YWxpZmllciBxdWFsaWZp
ZXI7Ci0gICAgVFByZWNpc2lvbiBwcmVjaXNpb247Ci0gICAgdW5zaWduZWQgY2hhciBzaXplOyAg
ICAgICAgICAvLyBzaXplIG9mIHZlY3RvciBvciBtYXRyaXgsIG5vdCBzaXplIG9mIGFycmF5Ci0g
ICAgYm9vbCBtYXRyaXg7Ci0gICAgYm9vbCBhcnJheTsKLSAgICBpbnQgYXJyYXlTaXplOwotICAg
IFRUeXBlKiB1c2VyRGVmOwotICAgIFRTb3VyY2VMb2MgbGluZTsKLQotICAgIHZvaWQgc2V0QmFz
aWMoVEJhc2ljVHlwZSBidCwgVFF1YWxpZmllciBxLCBjb25zdCBUU291cmNlTG9jJiBsbikKLSAg
ICB7Ci0gICAgICAgIHR5cGUgPSBidDsKLSAgICAgICAgcXVhbGlmaWVyID0gcTsKLSAgICAgICAg
cHJlY2lzaW9uID0gRWJwVW5kZWZpbmVkOwotICAgICAgICBzaXplID0gMTsKLSAgICAgICAgbWF0
cml4ID0gZmFsc2U7Ci0gICAgICAgIGFycmF5ID0gZmFsc2U7Ci0gICAgICAgIGFycmF5U2l6ZSA9
IDA7Ci0gICAgICAgIHVzZXJEZWYgPSAwOwotICAgICAgICBsaW5lID0gbG47Ci0gICAgfQotCi0g
ICAgdm9pZCBzZXRBZ2dyZWdhdGUodW5zaWduZWQgY2hhciBzLCBib29sIG0gPSBmYWxzZSkKLSAg
ICB7Ci0gICAgICAgIHNpemUgPSBzOwotICAgICAgICBtYXRyaXggPSBtOwotICAgIH0KLQotICAg
IHZvaWQgc2V0QXJyYXkoYm9vbCBhLCBpbnQgcyA9IDApCi0gICAgewotICAgICAgICBhcnJheSA9
IGE7Ci0gICAgICAgIGFycmF5U2l6ZSA9IHM7Ci0gICAgfQotCi0gICAgYm9vbCBpc1N0cnVjdHVy
ZUNvbnRhaW5pbmdBcnJheXMoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCF1c2VyRGVmKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4gdXNlckRlZi0+aXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlzKCk7Ci0gICAgfQot
fTsKLQotI2VuZGlmIC8vIF9UWVBFU19JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjZmRkMzIzMGU0ODc1NjVkM2JlZDY1NmViNzE5
MTg2OWQ3MGVjYWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3Vp
dC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxODQgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LS8vIFVuZm9sZFNob3J0Q2lyY3VpdCBpcyBhbiBBU1QgdHJhdmVyc2VyIHRvIG91dHB1dCBzaG9y
dC1jaXJjdWl0aW5nIG9wZXJhdG9ycyBhcyBpZi1lbHNlIHN0YXRlbWVudHMuCi0vLyBUaGUgcmVz
dWx0cyBhcmUgYXNzaWduZWQgdG8gcyMgdGVtcG9yYXJpZXMsIHdoaWNoIGFyZSB1c2VkIGJ5IHRo
ZSBtYWluIHRyYW5zbGF0b3IgaW5zdGVhZCBvZgotLy8gdGhlIG9yaWdpbmFsIGV4cHJlc3Npb24u
Ci0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmgiCi0KLSNpbmNs
dWRlICJjb21waWxlci9JbmZvU2luay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEhMU0wu
aCIKLQotbmFtZXNwYWNlIHNoCi17Ci1VbmZvbGRTaG9ydENpcmN1aXQ6OlVuZm9sZFNob3J0Q2ly
Y3VpdChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBPdXRwdXRITFNMICpvdXRwdXRITFNMKSA6IG1D
b250ZXh0KGNvbnRleHQpLCBtT3V0cHV0SExTTChvdXRwdXRITFNMKQotewotICAgIG1UZW1wb3Jh
cnlJbmRleCA9IDA7Ci19Ci0KLXZvaWQgVW5mb2xkU2hvcnRDaXJjdWl0Ojp0cmF2ZXJzZShUSW50
ZXJtTm9kZSAqbm9kZSkKLXsKLSAgICBpbnQgcmV3aW5kSW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7
Ci0gICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgbVRlbXBvcmFyeUluZGV4ID0gcmV3aW5k
SW5kZXg7Ci19Ci0KLWJvb2wgVW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdEJpbmFyeShWaXNpdCB2
aXNpdCwgVEludGVybUJpbmFyeSAqbm9kZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBt
T3V0cHV0SExTTC0+Z2V0Qm9keVN0cmVhbSgpOwotCi0gICAgLy8gSWYgb3VyIHJpZ2h0IG5vZGUg
ZG9lc24ndCBoYXZlIHNpZGUgZWZmZWN0cywgd2Uga25vdyB3ZSBkb24ndCBuZWVkIHRvIHVuZm9s
ZCB0aGlzCi0gICAgLy8gZXhwcmVzc2lvbjogdGhlcmUgd2lsbCBiZSBubyBzaG9ydC1jaXJjdWl0
aW5nIHNpZGUgZWZmZWN0cyB0byBhdm9pZAotICAgIC8vIChub3RlOiB1bmZvbGRpbmcgZG9lc24n
dCBkZXBlbmQgb24gdGhlIGxlZnQgbm9kZSAtLSBpdCB3aWxsIGFsd2F5cyBiZSBldmFsdWF0ZWQp
Ci0gICAgaWYgKCFub2RlLT5nZXRSaWdodCgpLT5oYXNTaWRlRWZmZWN0cygpKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQot
ICAgIHsKLSAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgotICAgICAgICAvLyAieCB8fCB5IiBpcyBl
cXVpdmFsZW50IHRvICJ4ID8gdHJ1ZSA6IHkiLCB3aGljaCB1bmZvbGRzIHRvICJib29sIHM7IGlm
KHgpIHMgPSB0cnVlOyBlbHNlIHMgPSB5OyIsCi0gICAgICAgIC8vIGFuZCB0aGVuIGZ1cnRoZXIg
c2ltcGxpZmllcyBkb3duIHRvICJib29sIHMgPSB4OyBpZighcykgcyA9IHk7Ii4KLSAgICAgICAg
ewotICAgICAgICAgICAgaW50IGkgPSBtVGVtcG9yYXJ5SW5kZXg7Ci0KLSAgICAgICAgICAgIG91
dCA8PCAiYm9vbCBzIiA8PCBpIDw8ICI7XG4iOwotCi0gICAgICAgICAgICBvdXQgPDwgIntcbiI7
Ci0KLSAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAgICAgICAgbm9k
ZS0+Z2V0TGVmdCgpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgIG91dCA8PCAicyIgPDwg
aSA8PCAiID0gIjsKLSAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAg
ICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Ci0gICAgICAgICAg
ICBvdXQgPDwgIjtcbiI7Ci0gICAgICAgICAgICBvdXQgPDwgImlmICghcyIgPDwgaSA8PCAiKVxu
IgotICAgICAgICAgICAgICAgICAgICJ7XG4iOwotICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4
ID0gaSArIDE7Ci0gICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSh0aGlzKTsK
LSAgICAgICAgICAgIG91dCA8PCAiICAgIHMiIDw8IGkgPDwgIiA9ICI7Ci0gICAgICAgICAgICBt
VGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAgICAgICAgIG5vZGUtPmdldFJpZ2h0KCktPnRy
YXZlcnNlKG1PdXRwdXRITFNMKTsKLSAgICAgICAgICAgIG91dCA8PCAiO1xuIgotICAgICAgICAg
ICAgICAgICAgICJ9XG4iOwotCi0gICAgICAgICAgICBvdXQgPDwgIn1cbiI7Ci0KLSAgICAgICAg
ICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDoKLSAgICAgICAgLy8gInggJiYgeSIgaXMg
ZXF1aXZhbGVudCB0byAieCA/IHkgOiBmYWxzZSIsIHdoaWNoIHVuZm9sZHMgdG8gImJvb2wgczsg
aWYoeCkgcyA9IHk7IGVsc2UgcyA9IGZhbHNlOyIsCi0gICAgICAgIC8vIGFuZCB0aGVuIGZ1cnRo
ZXIgc2ltcGxpZmllcyBkb3duIHRvICJib29sIHMgPSB4OyBpZihzKSBzID0geTsiLgotICAgICAg
ICB7Ci0gICAgICAgICAgICBpbnQgaSA9IG1UZW1wb3JhcnlJbmRleDsKLQotICAgICAgICAgICAg
b3V0IDw8ICJib29sIHMiIDw8IGkgPDwgIjtcbiI7Ci0KLSAgICAgICAgICAgIG91dCA8PCAie1xu
IjsKLQotICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgICAgICBu
b2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAgICAgb3V0IDw8ICJzIiA8
PCBpIDw8ICIgPSAiOwotICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAg
ICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKLSAgICAgICAg
ICAgIG91dCA8PCAiO1xuIjsKLSAgICAgICAgICAgIG91dCA8PCAiaWYgKHMiIDw8IGkgPDwgIilc
biIKLSAgICAgICAgICAgICAgICAgICAie1xuIjsKLSAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRl
eCA9IGkgKyAxOwotICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7
Ci0gICAgICAgICAgICBvdXQgPDwgIiAgICBzIiA8PCBpIDw8ICIgPSAiOwotICAgICAgICAgICAg
bVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50
cmF2ZXJzZShtT3V0cHV0SExTTCk7Ci0gICAgICAgICAgICBvdXQgPDwgIjtcbiIKLSAgICAgICAg
ICAgICAgICAgICAifVxuIjsKLQotICAgICAgICAgICAgb3V0IDw8ICJ9XG4iOwotCi0gICAgICAg
ICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19Ci0K
LWJvb2wgVW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVElu
dGVybVNlbGVjdGlvbiAqbm9kZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtT3V0cHV0
SExTTC0+Z2V0Qm9keVN0cmVhbSgpOwotCi0gICAgLy8gVW5mb2xkICJiID8geCA6IHkiIGludG8g
InR5cGUgczsgaWYoYikgcyA9IHg7IGVsc2UgcyA9IHk7IgotICAgIGlmIChub2RlLT51c2VzVGVy
bmFyeU9wZXJhdG9yKCkpCi0gICAgewotICAgICAgICBpbnQgaSA9IG1UZW1wb3JhcnlJbmRleDsK
LQotICAgICAgICBvdXQgPDwgbU91dHB1dEhMU0wtPnR5cGVTdHJpbmcobm9kZS0+Z2V0VHlwZSgp
KSA8PCAiIHMiIDw8IGkgPDwgIjtcbiI7Ci0KLSAgICAgICAgb3V0IDw8ICJ7XG4iOwotCi0gICAg
ICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAgICBub2RlLT5nZXRDb25kaXRpb24o
KS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIG91dCA8PCAiaWYgKCI7Ci0gICAgICAgIG1UZW1w
b3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVy
c2UobU91dHB1dEhMU0wpOwotICAgICAgICBvdXQgPDwgIilcbiIKLSAgICAgICAgICAgICAgICJ7
XG4iOwotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAgICAgbm9kZS0+Z2V0
VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBvdXQgPDwgIiAgICBzIiA8PCBp
IDw8ICIgPSAiOwotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAgICAgbm9k
ZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKLSAgICAgICAgb3V0IDw8
ICI7XG4iCi0gICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgImVsc2VcbiIKLSAg
ICAgICAgICAgICAgICJ7XG4iOwotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAg
ICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgb3V0
IDw8ICIgICAgcyIgPDwgaSA8PCAiID0gIjsKLSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSAr
IDE7Ci0gICAgICAgIG5vZGUtPmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UobU91dHB1dEhMU0wp
OwotICAgICAgICBvdXQgPDwgIjtcbiIKLSAgICAgICAgICAgICAgICJ9XG4iOwotCi0gICAgICAg
IG91dCA8PCAifVxuIjsKLQotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNp
dExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKQotewotICAgIGludCByZXdpbmRJ
bmRleCA9IG1UZW1wb3JhcnlJbmRleDsKLQotICAgIGlmIChub2RlLT5nZXRJbml0KCkpCi0gICAg
ewotICAgICAgICBub2RlLT5nZXRJbml0KCktPnRyYXZlcnNlKHRoaXMpOwotICAgIH0KLSAgICAK
LSAgICBpZiAobm9kZS0+Z2V0Q29uZGl0aW9uKCkpCi0gICAgewotICAgICAgICBub2RlLT5nZXRD
b25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotCi0gICAgaWYgKG5vZGUtPmdldEV4
cHJlc3Npb24oKSkKLSAgICB7Ci0gICAgICAgIG5vZGUtPmdldEV4cHJlc3Npb24oKS0+dHJhdmVy
c2UodGhpcyk7Ci0gICAgfQotCi0gICAgbVRlbXBvcmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7Ci0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWludCBVbmZvbGRTaG9ydENpcmN1aXQ6OmdldE5leHRU
ZW1wb3JhcnlJbmRleCgpCi17Ci0gICAgcmV0dXJuIG1UZW1wb3JhcnlJbmRleCsrOwotfQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNo
b3J0Q2lyY3VpdC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9s
ZFNob3J0Q2lyY3VpdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTI5ODlmYTRh
YjQ5NTAyNWJhNGM5MTc3NWExYjBlN2ZjMjVlOWQ3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9VbmZvbGRTaG9ydENpcmN1aXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLS8vCi0vLyBVbmZvbGRTaG9ydENpcmN1aXQgaXMgYW4gQVNUIHRyYXZlcnNl
ciB0byBvdXRwdXQgc2hvcnQtY2lyY3VpdGluZyBvcGVyYXRvcnMgYXMgaWYtZWxzZSBzdGF0ZW1l
bnRzCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1VORk9MRFNIT1JUQ0lSQ1VJVF9IXwotI2RlZmlu
ZSBDT01QSUxFUl9VTkZPTERTSE9SVENJUkNVSVRfSF8KLQotI2luY2x1ZGUgImNvbXBpbGVyL2lu
dGVybWVkaWF0ZS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlQ29udGV4dC5oIgotCi1uYW1l
c3BhY2Ugc2gKLXsKLWNsYXNzIE91dHB1dEhMU0w7Ci0KLWNsYXNzIFVuZm9sZFNob3J0Q2lyY3Vp
dCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCi17Ci0gIHB1YmxpYzoKLSAgICBVbmZvbGRTaG9y
dENpcmN1aXQoVFBhcnNlQ29udGV4dCAmY29udGV4dCwgT3V0cHV0SExTTCAqb3V0cHV0SExTTCk7
Ci0KLSAgICB2b2lkIHRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKTsKLSAgICBib29sIHZpc2l0
QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7Ci0gICAgYm9vbCB2aXNpdFNlbGVj
dGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSk7Ci0gICAgYm9vbCB2aXNp
dExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKTsKLQotICAgIGludCBnZXROZXh0
VGVtcG9yYXJ5SW5kZXgoKTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgVFBhcnNlQ29udGV4dCAmbUNv
bnRleHQ7Ci0gICAgT3V0cHV0SExTTCAqY29uc3QgbU91dHB1dEhMU0w7Ci0KLSAgICBpbnQgbVRl
bXBvcmFyeUluZGV4OwotfTsKLX0KLQotI2VuZGlmICAgLy8gQ09NUElMRVJfVU5GT0xEU0hPUlRD
SVJDVUlUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBiNmQwZjJmMzBiZTE2MjFiODNiMDFkYjRmYWI5MDRiNGFlMjhiZjRlLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsODEgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNv
bXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdEFTVC5oIgotCi1uYW1lc3BhY2UKLXsKLQotLy8gIngg
fHwgeSIgaXMgZXF1aXZhbGVudCB0byAieCA/IHRydWUgOiB5Ii4KLVRJbnRlcm1TZWxlY3Rpb24g
KlVuZm9sZE9SKFRJbnRlcm1UeXBlZCAqeCwgVEludGVybVR5cGVkICp5KQotewotICAgIGNvbnN0
IFRUeXBlIGJvb2xUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCk7Ci0gICAgQ29uc3RhbnRVbmlv
biAqdSA9IG5ldyBDb25zdGFudFVuaW9uOwotICAgIHUtPnNldEJDb25zdCh0cnVlKTsKLSAgICBU
SW50ZXJtQ29uc3RhbnRVbmlvbiAqdHJ1ZU5vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24o
Ci0gICAgICAgIHUsIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QsIDEpKTsK
LSAgICByZXR1cm4gbmV3IFRJbnRlcm1TZWxlY3Rpb24oeCwgdHJ1ZU5vZGUsIHksIGJvb2xUeXBl
KTsKLX0KLQotLy8gInggJiYgeSIgaXMgZXF1aXZhbGVudCB0byAieCA/IHkgOiBmYWxzZSIuCi1U
SW50ZXJtU2VsZWN0aW9uICpVbmZvbGRBTkQoVEludGVybVR5cGVkICp4LCBUSW50ZXJtVHlwZWQg
KnkpCi17Ci0gICAgY29uc3QgVFR5cGUgYm9vbFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkKTsK
LSAgICBDb25zdGFudFVuaW9uICp1ID0gbmV3IENvbnN0YW50VW5pb247Ci0gICAgdS0+c2V0QkNv
bnN0KGZhbHNlKTsKLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqZmFsc2VOb2RlID0gbmV3IFRJ
bnRlcm1Db25zdGFudFVuaW9uKAotICAgICAgICB1LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmlu
ZWQsIEV2cUNvbnN0LCAxKSk7Ci0gICAgcmV0dXJuIG5ldyBUSW50ZXJtU2VsZWN0aW9uKHgsIHks
IGZhbHNlTm9kZSwgYm9vbFR5cGUpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCi0K
LWJvb2wgVW5mb2xkU2hvcnRDaXJjdWl0QVNUOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVElu
dGVybUJpbmFyeSAqbm9kZSkKLXsKLSAgICBUSW50ZXJtU2VsZWN0aW9uICpyZXBsYWNlbWVudCA9
IE5VTEw7Ci0KLSAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCi0gICAgewotICAgICAgY2FzZSBF
T3BMb2dpY2FsT3I6Ci0gICAgICAgIHJlcGxhY2VtZW50ID0gVW5mb2xkT1Iobm9kZS0+Z2V0TGVm
dCgpLCBub2RlLT5nZXRSaWdodCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcExv
Z2ljYWxBbmQ6Ci0gICAgICAgIHJlcGxhY2VtZW50ID0gVW5mb2xkQU5EKG5vZGUtPmdldExlZnQo
KSwgbm9kZS0+Z2V0UmlnaHQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmIChyZXBsYWNlbWVudCkKLSAgICB7Ci0gICAgICAg
IHJlcGxhY2VtZW50cy5wdXNoX2JhY2soCi0gICAgICAgICAgICBOb2RlVXBkYXRlRW50cnkoZ2V0
UGFyZW50Tm9kZSgpLCBub2RlLCByZXBsYWNlbWVudCkpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBVbmZvbGRTaG9ydENpcmN1aXRBU1Q6OnVwZGF0ZVRyZWUoKQotewotICAg
IGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCByZXBsYWNlbWVudHMuc2l6ZSgpOyArK2lpKQotICAg
IHsKLSAgICAgICAgY29uc3QgTm9kZVVwZGF0ZUVudHJ5JiBlbnRyeSA9IHJlcGxhY2VtZW50c1tp
aV07Ci0gICAgICAgIEFTU0VSVChlbnRyeS5wYXJlbnQpOwotICAgICAgICBib29sIHJlcGxhY2Vk
ID0gZW50cnkucGFyZW50LT5yZXBsYWNlQ2hpbGROb2RlKAotICAgICAgICAgICAgZW50cnkub3Jp
Z2luYWwsIGVudHJ5LnJlcGxhY2VtZW50KTsKLSAgICAgICAgQVNTRVJUKHJlcGxhY2VkKTsKLQot
ICAgICAgICAvLyBJbiBBU1QgdHJhdmVyc2luZywgYSBwYXJlbnQgaXMgdmlzaXRlZCBiZWZvcmUg
aXRzIGNoaWxkcmVuLgotICAgICAgICAvLyBBZnRlciB3ZSByZXBsYWNlIGEgbm9kZSwgaWYgYW4g
aW1tZWRpYXRlIGNoaWxkIGlzIHRvCi0gICAgICAgIC8vIGJlIHJlcGxhY2VkLCB3ZSBuZWVkIHRv
IG1ha2Ugc3VyZSB3ZSBkb24ndCB1cGRhdGUgdGhlIHJlcGxhY2VkCi0gICAgLy8gbm9kZTsgaW5z
dGVhZCwgd2UgdXBkYXRlIHRoZSByZXBsYWNlbWVudCBub2RlLgotICAgICAgICBmb3IgKHNpemVf
dCBqaiA9IGlpICsgMTsgamogPCByZXBsYWNlbWVudHMuc2l6ZSgpOyArK2pqKQotICAgICAgICB7
Ci0gICAgICAgICAgICBOb2RlVXBkYXRlRW50cnkmIGVudHJ5MiA9IHJlcGxhY2VtZW50c1tqal07
Ci0gICAgICAgICAgICBpZiAoZW50cnkyLnBhcmVudCA9PSBlbnRyeS5vcmlnaW5hbCkKLSAgICAg
ICAgICAgICAgICBlbnRyeTIucGFyZW50ID0gZW50cnkucmVwbGFjZW1lbnQ7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggY2ZjNTAwNjY0ODU0NjhhZDE2M2YzOTFiNWM2MmYxNjE4MjdhMWI1ZC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0QVNULmgKKysrIC9kZXYvbnVs
bApAQCAtMSw1MSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotLy8gVW5mb2xkU2hvcnRDaXJj
dWl0QVNUIGlzIGFuIEFTVCB0cmF2ZXJzZXIgdG8gcmVwbGFjZSBzaG9ydC1jaXJjdWl0aW5nCi0v
LyBvcGVyYXRpb25zIHdpdGggdGVybmFyeSBvcGVyYXRpb25zLgotLy8KLQotI2lmbmRlZiBDT01Q
SUxFUl9VTkZPTERfU0hPUlRfQ0lSQ1VJVF9BU1RfSF8KLSNkZWZpbmUgQ09NUElMRVJfVU5GT0xE
X1NIT1JUX0NJUkNVSVRfQVNUX0hfCi0KLSNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgot
I2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotCi0vLyBUaGlzIHRyYXZlcnNlciBp
ZGVudGlmaWVzIGFsbCB0aGUgc2hvcnQgY2lyY3VpdCBiaW5hcnkgIG5vZGVzIHRoYXQgbmVlZCB0
bwotLy8gYmUgcmVwbGFjZWQsIGFuZCBjcmVhdGVzIHRoZSBjb3JyZXNwb25kaW5nIHJlcGxhY2Vt
ZW50IG5vZGVzLiBIb3dldmVyLAotLy8gdGhlIGFjdHVhbCByZXBsYWNlbWVudHMgaGFwcGVuIGFm
dGVyIHRoZSB0cmF2ZXJzZSB0aHJvdWdoIHVwZGF0ZVRyZWUoKS4KLQotY2xhc3MgVW5mb2xkU2hv
cnRDaXJjdWl0QVNUIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKLXsKLSAgcHVibGljOgotICAg
IFVuZm9sZFNob3J0Q2lyY3VpdEFTVCgpIHsgfQotCi0gICAgdmlydHVhbCBib29sIHZpc2l0Qmlu
YXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICopOwotCi0gICAgdm9pZCB1cGRhdGVUcmVl
KCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBzdHJ1Y3QgTm9kZVVwZGF0ZUVudHJ5Ci0gICAgewotICAg
ICAgICBOb2RlVXBkYXRlRW50cnkoVEludGVybU5vZGUgKl9wYXJlbnQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBUSW50ZXJtTm9kZSAqX29yaWdpbmFsLAotICAgICAgICAgICAgICAgICAgICAg
ICAgVEludGVybU5vZGUgKl9yZXBsYWNlbWVudCkKLSAgICAgICAgICAgIDogcGFyZW50KF9wYXJl
bnQpLAotICAgICAgICAgICAgICBvcmlnaW5hbChfb3JpZ2luYWwpLAotICAgICAgICAgICAgICBy
ZXBsYWNlbWVudChfcmVwbGFjZW1lbnQpIHt9Ci0KLSAgICAgICAgVEludGVybU5vZGUgKnBhcmVu
dDsKLSAgICAgICAgVEludGVybU5vZGUgKm9yaWdpbmFsOwotICAgICAgICBUSW50ZXJtTm9kZSAq
cmVwbGFjZW1lbnQ7Ci0gICAgfTsKLQotICAgIC8vIER1cmluZyB0cmF2ZXJzaW5nLCBzYXZlIGFs
bCB0aGUgcmVwbGFjZW1lbnRzIHRoYXQgbmVlZCB0byBoYXBwZW47Ci0gICAgLy8gdGhlbiByZXBs
YWNlIHRoZW0gYnkgY2FsbGluZyB1cGRhdGVOb2RlcygpLgotICAgIHN0ZDo6dmVjdG9yPE5vZGVV
cGRhdGVFbnRyeT4gcmVwbGFjZW1lbnRzOwotCi0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KFVuZm9sZFNob3J0Q2lyY3VpdEFTVCk7Ci19OwotCi0jZW5kaWYgIC8vIENPTVBJTEVSX1VORk9M
RF9TSE9SVF9DSVJDVUlUX0FTVF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1VuaWZvcm0uY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1VuaWZvcm0uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzY3
ZGIyYmU4ZTRmZjVkMTM5YzBlNzFjOGJhYjg0Yzc0ZDQ3ZmRjLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9Vbmlmb3JtLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvVW5pZm9ybS5oIgotCi1uYW1lc3BhY2Ugc2gK
LXsKLQotVW5pZm9ybTo6VW5pZm9ybShHTGVudW0gdHlwZSwgR0xlbnVtIHByZWNpc2lvbiwgY29u
c3QgY2hhciAqbmFtZSwgaW50IGFycmF5U2l6ZSwgaW50IHJlZ2lzdGVySW5kZXgpCi17Ci0gICAg
dGhpcy0+dHlwZSA9IHR5cGU7Ci0gICAgdGhpcy0+cHJlY2lzaW9uID0gcHJlY2lzaW9uOwotICAg
IHRoaXMtPm5hbWUgPSBuYW1lOwotICAgIHRoaXMtPmFycmF5U2l6ZSA9IGFycmF5U2l6ZTsKLSAg
ICB0aGlzLT5yZWdpc3RlckluZGV4ID0gcmVnaXN0ZXJJbmRleDsKLX0KLQotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuaWZvcm0uaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Vbmlmb3JtLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDRjNTNmZmE3ZDJmYzU4NGU0MDBjMmNmMDRkMDEyZTZhZjFlMjUyZDcu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuaWZvcm0uaAorKysgL2Rldi9udWxsCkBAIC0x
LDM1ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1VOSUZPUk1fSF8K
LSNkZWZpbmUgQ09NUElMRVJfVU5JRk9STV9IXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1
ZGUgPHZlY3Rvcj4KLQotI2RlZmluZSBHTF9BUElDQUxMCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+
Ci0KLW5hbWVzcGFjZSBzaAotewotCi1zdHJ1Y3QgVW5pZm9ybQotewotICAgIFVuaWZvcm0oR0xl
bnVtIHR5cGUsIEdMZW51bSBwcmVjaXNpb24sIGNvbnN0IGNoYXIgKm5hbWUsIGludCBhcnJheVNp
emUsIGludCByZWdpc3RlckluZGV4KTsKLQotICAgIEdMZW51bSB0eXBlOwotICAgIEdMZW51bSBw
cmVjaXNpb247Ci0gICAgc3RkOjpzdHJpbmcgbmFtZTsKLSAgICB1bnNpZ25lZCBpbnQgYXJyYXlT
aXplOwotICAgIAotICAgIGludCByZWdpc3RlckluZGV4OwotfTsKLQotdHlwZWRlZiBzdGQ6OnZl
Y3RvcjxVbmlmb3JtPiBBY3RpdmVVbmlmb3JtczsKLQotfQotCi0jZW5kaWYgICAvLyBDT01QSUxF
Ul9VTklGT1JNX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDY0OTY5YzQ4OWZhMWQwZDhlODljOTc4M2FjYjFhNzE5YjcxZGUwM2QuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsNTEyICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21w
aWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5mb1Npbmsu
aCIKLSNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCi0jaW5jbHVk
ZSAiY29tcGlsZXIvUGFyc2VDb250ZXh0LmgiCi0KLW5hbWVzcGFjZSB7Ci1ib29sIElzTG9vcElu
ZGV4KGNvbnN0IFRJbnRlcm1TeW1ib2wqIHN5bWJvbCwgY29uc3QgVExvb3BTdGFjayYgc3RhY2sp
IHsKLSAgICBmb3IgKFRMb29wU3RhY2s6OmNvbnN0X2l0ZXJhdG9yIGkgPSBzdGFjay5iZWdpbigp
OyBpICE9IHN0YWNrLmVuZCgpOyArK2kpIHsKLSAgICAgICAgaWYgKGktPmluZGV4LmlkID09IHN5
bWJvbC0+Z2V0SWQoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLXZvaWQgTWFya0xvb3BGb3JVbnJvbGwoY29uc3QgVEludGVybVN5bWJv
bCogc3ltYm9sLCBUTG9vcFN0YWNrJiBzdGFjaykgewotICAgIGZvciAoVExvb3BTdGFjazo6aXRl
cmF0b3IgaSA9IHN0YWNrLmJlZ2luKCk7IGkgIT0gc3RhY2suZW5kKCk7ICsraSkgewotICAgICAg
ICBpZiAoaS0+aW5kZXguaWQgPT0gc3ltYm9sLT5nZXRJZCgpKSB7Ci0gICAgICAgICAgICBBU1NF
UlQoaS0+bG9vcCAhPSBOVUxMKTsKLSAgICAgICAgICAgIGktPmxvb3AtPnNldFVucm9sbEZsYWco
dHJ1ZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgVU5SRUFD
SEFCTEUoKTsKLX0KLQotLy8gVHJhdmVyc2VzIGEgbm9kZSB0byBjaGVjayBpZiBpdCByZXByZXNl
bnRzIGEgY29uc3RhbnQgaW5kZXggZXhwcmVzc2lvbi4KLS8vIERlZmluaXRpb246Ci0vLyBjb25z
dGFudC1pbmRleC1leHByZXNzaW9ucyBhcmUgYSBzdXBlcnNldCBvZiBjb25zdGFudC1leHByZXNz
aW9ucy4KLS8vIENvbnN0YW50LWluZGV4LWV4cHJlc3Npb25zIGNhbiBpbmNsdWRlIGxvb3AgaW5k
aWNlcyBhcyBkZWZpbmVkIGluCi0vLyBHTFNMIEVTIDEuMCBzcGVjLCBBcHBlbmRpeCBBLCBzZWN0
aW9uIDQuCi0vLyBUaGUgZm9sbG93aW5nIGFyZSBjb25zdGFudC1pbmRleC1leHByZXNzaW9uczoK
LS8vIC0gQ29uc3RhbnQgZXhwcmVzc2lvbnMKLS8vIC0gTG9vcCBpbmRpY2VzIGFzIGRlZmluZWQg
aW4gc2VjdGlvbiA0Ci0vLyAtIEV4cHJlc3Npb25zIGNvbXBvc2VkIG9mIGJvdGggb2YgdGhlIGFi
b3ZlCi1jbGFzcyBWYWxpZGF0ZUNvbnN0SW5kZXhFeHByIDogcHVibGljIFRJbnRlcm1UcmF2ZXJz
ZXIgewotcHVibGljOgotICAgIFZhbGlkYXRlQ29uc3RJbmRleEV4cHIoY29uc3QgVExvb3BTdGFj
ayYgc3RhY2spCi0gICAgICAgIDogbVZhbGlkKHRydWUpLCBtTG9vcFN0YWNrKHN0YWNrKSB7fQot
Ci0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBwYXJzZWQgbm9kZSByZXByZXNlbnRzIGEgY29u
c3RhbnQgaW5kZXggZXhwcmVzc2lvbi4KLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVy
biBtVmFsaWQ7IH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9s
KiBzeW1ib2wpIHsKLSAgICAgICAgLy8gT25seSBjb25zdGFudHMgYW5kIGxvb3AgaW5kaWNlcyBh
cmUgYWxsb3dlZCBpbiBhCi0gICAgICAgIC8vIGNvbnN0YW50IGluZGV4IGV4cHJlc3Npb24uCi0g
ICAgICAgIGlmIChtVmFsaWQpIHsKLSAgICAgICAgICAgIG1WYWxpZCA9IChzeW1ib2wtPmdldFF1
YWxpZmllcigpID09IEV2cUNvbnN0KSB8fAotICAgICAgICAgICAgICAgICAgICAgSXNMb29wSW5k
ZXgoc3ltYm9sLCBtTG9vcFN0YWNrKTsKLSAgICAgICAgfQotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBib29sIG1WYWxpZDsKLSAgICBjb25zdCBUTG9vcFN0YWNrJiBtTG9vcFN0YWNrOwotfTsKLQot
Ly8gVHJhdmVyc2VzIGEgbm9kZSB0byBjaGVjayBpZiBpdCB1c2VzIGEgbG9vcCBpbmRleC4KLS8v
IElmIGFuIGludCBsb29wIGluZGV4IGlzIHVzZWQgaW4gaXRzIGJvZHkgYXMgYSBzYW1wbGVyIGFy
cmF5IGluZGV4LAotLy8gbWFyayB0aGUgbG9vcCBmb3IgdW5yb2xsLgotY2xhc3MgVmFsaWRhdGVM
b29wSW5kZXhFeHByIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIFZh
bGlkYXRlTG9vcEluZGV4RXhwcihUTG9vcFN0YWNrJiBzdGFjaykKLSAgICAgICAgOiBtVXNlc0Zs
b2F0TG9vcEluZGV4KGZhbHNlKSwKLSAgICAgICAgICBtVXNlc0ludExvb3BJbmRleChmYWxzZSks
Ci0gICAgICAgICAgbUxvb3BTdGFjayhzdGFjaykge30KLQotICAgIGJvb2wgdXNlc0Zsb2F0TG9v
cEluZGV4KCkgY29uc3QgeyByZXR1cm4gbVVzZXNGbG9hdExvb3BJbmRleDsgfQotICAgIGJvb2wg
dXNlc0ludExvb3BJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1Vc2VzSW50TG9vcEluZGV4OyB9Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogc3ltYm9sKSB7Ci0g
ICAgICAgIGlmIChJc0xvb3BJbmRleChzeW1ib2wsIG1Mb29wU3RhY2spKSB7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAgICAgY2FzZSBF
YnRGbG9hdDoKLSAgICAgICAgICAgICAgICBtVXNlc0Zsb2F0TG9vcEluZGV4ID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAg
ICAgICAgICAgbVVzZXNJbnRMb29wSW5kZXggPSB0cnVlOwotICAgICAgICAgICAgICAgIE1hcmtM
b29wRm9yVW5yb2xsKHN5bWJvbCwgbUxvb3BTdGFjayk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotcHJpdmF0ZToKLSAgICBib29sIG1V
c2VzRmxvYXRMb29wSW5kZXg7Ci0gICAgYm9vbCBtVXNlc0ludExvb3BJbmRleDsKLSAgICBUTG9v
cFN0YWNrJiBtTG9vcFN0YWNrOwotfTsKLX0gIC8vIG5hbWVzcGFjZQotCi1WYWxpZGF0ZUxpbWl0
YXRpb25zOjpWYWxpZGF0ZUxpbWl0YXRpb25zKFNoU2hhZGVyVHlwZSBzaGFkZXJUeXBlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW5mb1NpbmtCYXNlJiBzaW5r
KQotICAgIDogbVNoYWRlclR5cGUoc2hhZGVyVHlwZSksCi0gICAgICBtU2luayhzaW5rKSwKLSAg
ICAgIG1OdW1FcnJvcnMoMCkKLXsKLX0KLQotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNp
dEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSogbm9kZSkKLXsKLSAgICAvLyBDaGVjayBpZiBs
b29wIGluZGV4IGlzIG1vZGlmaWVkIGluIHRoZSBsb29wIGJvZHkuCi0gICAgdmFsaWRhdGVPcGVy
YXRpb24obm9kZSwgbm9kZS0+Z2V0TGVmdCgpKTsKLQotICAgIC8vIENoZWNrIGluZGV4aW5nLgot
ICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkgewotICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDoK
LSAgICAgICAgdmFsaWRhdGVJbmRleGluZyhub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEVPcEluZGV4SW5kaXJlY3Q6Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0gICAgICAgIC8v
IExvb3AgdW5yb2xsaW5nIGlzIGEgd29yay1hcm91bmQgZm9yIGEgTWFjIENnIGNvbXBpbGVyIGJ1
ZyB3aGVyZSBpdAotICAgICAgICAvLyBjcmFzaGVzIHdoZW4gYSBzYW1wbGVyIGFycmF5J3MgaW5k
ZXggaXMgYWxzbyB0aGUgbG9vcCBpbmRleC4KLSAgICAgICAgLy8gT25jZSBBcHBsZSBmaXhlcyB0
aGlzIGJ1Zywgd2Ugc2hvdWxkIHJlbW92ZSB0aGUgY29kZSBpbiB0aGlzIENMLgotICAgICAgICAv
LyBTZWUgaHR0cDovL2NvZGVyZXZpZXcuYXBwc3BvdC5jb20vNDMzMTA0OC8uCi0gICAgICAgIGlm
ICgobm9kZS0+Z2V0TGVmdCgpICE9IE5VTEwpICYmIChub2RlLT5nZXRSaWdodCgpICE9IE5VTEwp
ICYmCi0gICAgICAgICAgICAobm9kZS0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKSkpIHsK
LSAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IG5vZGUtPmdldExlZnQoKS0+Z2V0
QXNTeW1ib2xOb2RlKCk7Ci0gICAgICAgICAgICBpZiAoSXNTYW1wbGVyKHN5bWJvbC0+Z2V0QmFz
aWNUeXBlKCkpICYmIHN5bWJvbC0+aXNBcnJheSgpKSB7Ci0gICAgICAgICAgICAgICAgVmFsaWRh
dGVMb29wSW5kZXhFeHByIHZhbGlkYXRlKG1Mb29wU3RhY2spOwotICAgICAgICAgICAgICAgIG5v
ZGUtPmdldFJpZ2h0KCktPnRyYXZlcnNlKCZ2YWxpZGF0ZSk7Ci0gICAgICAgICAgICAgICAgaWYg
KHZhbGlkYXRlLnVzZXNGbG9hdExvb3BJbmRleCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVy
cm9yKG5vZGUtPmdldExpbmUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgInNhbXBsZXIg
YXJyYXkgaW5kZXggaXMgZmxvYXQgbG9vcCBpbmRleCIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICJmb3IiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSNlbmRpZgotICAgICAgICB2YWxpZGF0ZUluZGV4aW5nKG5vZGUpOwotICAgICAgICBicmVhazsK
LSAgICAgIGRlZmF1bHQ6IGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkqIG5v
ZGUpCi17Ci0gICAgLy8gQ2hlY2sgaWYgbG9vcCBpbmRleCBpcyBtb2RpZmllZCBpbiB0aGUgbG9v
cCBib2R5LgotICAgIHZhbGlkYXRlT3BlcmF0aW9uKG5vZGUsIG5vZGUtPmdldE9wZXJhbmQoKSk7
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNp
dEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKLXsKLSAgICBzd2l0Y2gg
KG5vZGUtPmdldE9wKCkpIHsKLSAgICAgIGNhc2UgRU9wRnVuY3Rpb25DYWxsOgotICAgICAgICB2
YWxpZGF0ZUZ1bmN0aW9uQ2FsbChub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0
OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmFs
aWRhdGVMaW1pdGF0aW9uczo6dmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCogbm9kZSkKLXsK
LSAgICBpZiAoIXZhbGlkYXRlTG9vcFR5cGUobm9kZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIFRMb29wSW5mbyBpbmZvOwotICAgIG1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKFRMb29w
SW5mbykpOwotICAgIGluZm8ubG9vcCA9IG5vZGU7Ci0gICAgaWYgKCF2YWxpZGF0ZUZvckxvb3BI
ZWFkZXIobm9kZSwgJmluZm8pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBUSW50ZXJt
Tm9kZSogYm9keSA9IG5vZGUtPmdldEJvZHkoKTsKLSAgICBpZiAoYm9keSAhPSBOVUxMKSB7Ci0g
ICAgICAgIG1Mb29wU3RhY2sucHVzaF9iYWNrKGluZm8pOwotICAgICAgICBib2R5LT50cmF2ZXJz
ZSh0aGlzKTsKLSAgICAgICAgbUxvb3BTdGFjay5wb3BfYmFjaygpOwotICAgIH0KLQotICAgIC8v
IFRoZSBsb29wIGlzIGZ1bGx5IHByb2Nlc3NlZCAtIG5vIG5lZWQgdG8gdmlzaXQgY2hpbGRyZW4u
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFZhbGlkYXRlTGltaXRhdGlvbnM6OmVycm9y
KFRTb3VyY2VMb2MgbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICpyZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuKQotewotICAgIG1TaW5rLnByZWZpeChFUHJl
Zml4RXJyb3IpOwotICAgIG1TaW5rLmxvY2F0aW9uKGxvYyk7Ci0gICAgbVNpbmsgPDwgIiciIDw8
IHRva2VuIDw8ICInIDogIiA8PCByZWFzb24gPDwgIlxuIjsKLSAgICArK21OdW1FcnJvcnM7Ci19
Ci0KLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6d2l0aGluTG9vcEJvZHkoKSBjb25zdAotewot
ICAgIHJldHVybiAhbUxvb3BTdGFjay5lbXB0eSgpOwotfQotCi1ib29sIFZhbGlkYXRlTGltaXRh
dGlvbnM6OmlzTG9vcEluZGV4KGNvbnN0IFRJbnRlcm1TeW1ib2wqIHN5bWJvbCkgY29uc3QKLXsK
LSAgICByZXR1cm4gSXNMb29wSW5kZXgoc3ltYm9sLCBtTG9vcFN0YWNrKTsKLX0KLQotYm9vbCBW
YWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUxvb3BUeXBlKFRJbnRlcm1Mb29wKiBub2RlKSB7
Ci0gICAgVExvb3BUeXBlIHR5cGUgPSBub2RlLT5nZXRUeXBlKCk7Ci0gICAgaWYgKHR5cGUgPT0g
RUxvb3BGb3IpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gUmVqZWN0IHdoaWxlIGFu
ZCBkby13aGlsZSBsb29wcy4KLSAgICBlcnJvcihub2RlLT5nZXRMaW5lKCksCi0gICAgICAgICAg
IlRoaXMgdHlwZSBvZiBsb29wIGlzIG5vdCBhbGxvd2VkIiwKLSAgICAgICAgICB0eXBlID09IEVM
b29wV2hpbGUgPyAid2hpbGUiIDogImRvIik7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29s
IFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcEhlYWRlcihUSW50ZXJtTG9vcCog
bm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRM
b29wSW5mbyogaW5mbykKLXsKLSAgICBBU1NFUlQobm9kZS0+Z2V0VHlwZSgpID09IEVMb29wRm9y
KTsKLQotICAgIC8vCi0gICAgLy8gVGhlIGZvciBzdGF0ZW1lbnQgaGFzIHRoZSBmb3JtOgotICAg
IC8vICAgIGZvciAoIGluaXQtZGVjbGFyYXRpb24gOyBjb25kaXRpb24gOyBleHByZXNzaW9uICkg
c3RhdGVtZW50Ci0gICAgLy8KLSAgICBpZiAoIXZhbGlkYXRlRm9yTG9vcEluaXQobm9kZSwgaW5m
bykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXZhbGlkYXRlRm9yTG9vcENvbmQo
bm9kZSwgaW5mbykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXZhbGlkYXRlRm9y
TG9vcEV4cHIobm9kZSwgaW5mbykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcElu
aXQoVEludGVybUxvb3AqIG5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVExvb3BJbmZvKiBpbmZvKQotewotICAgIFRJbnRlcm1Ob2RlKiBpbml0ID0g
bm9kZS0+Z2V0SW5pdCgpOwotICAgIGlmIChpbml0ID09IE5VTEwpIHsKLSAgICAgICAgZXJyb3Io
bm9kZS0+Z2V0TGluZSgpLCAiTWlzc2luZyBpbml0IGRlY2xhcmF0aW9uIiwgImZvciIpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBpbml0LWRlY2xhcmF0
aW9uIGhhcyB0aGUgZm9ybToKLSAgICAvLyAgICAgdHlwZS1zcGVjaWZpZXIgaWRlbnRpZmllciA9
IGNvbnN0YW50LWV4cHJlc3Npb24KLSAgICAvLwotICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGRlY2wg
PSBpbml0LT5nZXRBc0FnZ3JlZ2F0ZSgpOwotICAgIGlmICgoZGVjbCA9PSBOVUxMKSB8fCAoZGVj
bC0+Z2V0T3AoKSAhPSBFT3BEZWNsYXJhdGlvbikpIHsKLSAgICAgICAgZXJyb3IoaW5pdC0+Z2V0
TGluZSgpLCAiSW52YWxpZCBpbml0IGRlY2xhcmF0aW9uIiwgImZvciIpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIFRvIGtlZXAgdGhpbmdzIHNpbXBsZSBkbyBub3QgYWxs
b3cgZGVjbGFyYXRpb24gbGlzdC4KLSAgICBUSW50ZXJtU2VxdWVuY2UmIGRlY2xTZXEgPSBkZWNs
LT5nZXRTZXF1ZW5jZSgpOwotICAgIGlmIChkZWNsU2VxLnNpemUoKSAhPSAxKSB7Ci0gICAgICAg
IGVycm9yKGRlY2wtPmdldExpbmUoKSwgIkludmFsaWQgaW5pdCBkZWNsYXJhdGlvbiIsICJmb3Ii
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBUSW50ZXJtQmluYXJ5KiBkZWNs
SW5pdCA9IGRlY2xTZXFbMF0tPmdldEFzQmluYXJ5Tm9kZSgpOwotICAgIGlmICgoZGVjbEluaXQg
PT0gTlVMTCkgfHwgKGRlY2xJbml0LT5nZXRPcCgpICE9IEVPcEluaXRpYWxpemUpKSB7Ci0gICAg
ICAgIGVycm9yKGRlY2wtPmdldExpbmUoKSwgIkludmFsaWQgaW5pdCBkZWNsYXJhdGlvbiIsICJm
b3IiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBUSW50ZXJtU3ltYm9sKiBz
eW1ib2wgPSBkZWNsSW5pdC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAgICBpZiAo
c3ltYm9sID09IE5VTEwpIHsKLSAgICAgICAgZXJyb3IoZGVjbEluaXQtPmdldExpbmUoKSwgIklu
dmFsaWQgaW5pdCBkZWNsYXJhdGlvbiIsICJmb3IiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICAvLyBUaGUgbG9vcCBpbmRleCBoYXMgdHlwZSBpbnQgb3IgZmxvYXQuCi0gICAg
VEJhc2ljVHlwZSB0eXBlID0gc3ltYm9sLT5nZXRCYXNpY1R5cGUoKTsKLSAgICBpZiAoKHR5cGUg
IT0gRWJ0SW50KSAmJiAodHlwZSAhPSBFYnRGbG9hdCkpIHsKLSAgICAgICAgZXJyb3Ioc3ltYm9s
LT5nZXRMaW5lKCksCi0gICAgICAgICAgICAgICJJbnZhbGlkIHR5cGUgZm9yIGxvb3AgaW5kZXgi
LCBnZXRCYXNpY1N0cmluZyh0eXBlKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgLy8gVGhlIGxvb3AgaW5kZXggaXMgaW5pdGlhbGl6ZWQgd2l0aCBjb25zdGFudCBleHByZXNz
aW9uLgotICAgIGlmICghaXNDb25zdEV4cHIoZGVjbEluaXQtPmdldFJpZ2h0KCkpKSB7Ci0gICAg
ICAgIGVycm9yKGRlY2xJbml0LT5nZXRMaW5lKCksCi0gICAgICAgICAgICAgICJMb29wIGluZGV4
IGNhbm5vdCBiZSBpbml0aWFsaXplZCB3aXRoIG5vbi1jb25zdGFudCBleHByZXNzaW9uIiwKLSAg
ICAgICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIGluZm8tPmluZGV4LmlkID0gc3ltYm9sLT5nZXRJZCgpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRl
Rm9yTG9vcENvbmQoVEludGVybUxvb3AqIG5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVExvb3BJbmZvKiBpbmZvKQotewotICAgIFRJbnRlcm1Ob2Rl
KiBjb25kID0gbm9kZS0+Z2V0Q29uZGl0aW9uKCk7Ci0gICAgaWYgKGNvbmQgPT0gTlVMTCkgewot
ICAgICAgICBlcnJvcihub2RlLT5nZXRMaW5lKCksICJNaXNzaW5nIGNvbmRpdGlvbiIsICJmb3Ii
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAvLwotICAgIC8vIGNvbmRpdGlv
biBoYXMgdGhlIGZvcm06Ci0gICAgLy8gICAgIGxvb3BfaW5kZXggcmVsYXRpb25hbF9vcGVyYXRv
ciBjb25zdGFudF9leHByZXNzaW9uCi0gICAgLy8KLSAgICBUSW50ZXJtQmluYXJ5KiBiaW5PcCA9
IGNvbmQtPmdldEFzQmluYXJ5Tm9kZSgpOwotICAgIGlmIChiaW5PcCA9PSBOVUxMKSB7Ci0gICAg
ICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgIkludmFsaWQgY29uZGl0aW9uIiwgImZvciIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIExvb3AgaW5kZXggc2hvdWxkIGJl
IHRvIHRoZSBsZWZ0IG9mIHJlbGF0aW9uYWwgb3BlcmF0b3IuCi0gICAgVEludGVybVN5bWJvbCog
c3ltYm9sID0gYmluT3AtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0gICAgaWYgKHN5
bWJvbCA9PSBOVUxMKSB7Ci0gICAgICAgIGVycm9yKGJpbk9wLT5nZXRMaW5lKCksICJJbnZhbGlk
IGNvbmRpdGlvbiIsICJmb3IiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBp
ZiAoc3ltYm9sLT5nZXRJZCgpICE9IGluZm8tPmluZGV4LmlkKSB7Ci0gICAgICAgIGVycm9yKHN5
bWJvbC0+Z2V0TGluZSgpLAotICAgICAgICAgICAgICAiRXhwZWN0ZWQgbG9vcCBpbmRleCIsIHN5
bWJvbC0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gICAgLy8gUmVsYXRpb25hbCBvcGVyYXRvciBpcyBvbmUgb2Y6ID4gPj0gPCA8PSA9PSBvciAh
PS4KLSAgICBzd2l0Y2ggKGJpbk9wLT5nZXRPcCgpKSB7Ci0gICAgICBjYXNlIEVPcEVxdWFsOgot
ICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKLSAgICAgIGNhc2UgRU9wTGVzc1RoYW46Ci0gICAgICBj
YXNlIEVPcEdyZWF0ZXJUaGFuOgotICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgotICAgICAg
Y2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGVycm9yKGJpbk9wLT5nZXRMaW5lKCksCi0gICAgICAgICAgICAgICJJbnZhbGlk
IHJlbGF0aW9uYWwgb3BlcmF0b3IiLAotICAgICAgICAgICAgICBnZXRPcGVyYXRvclN0cmluZyhi
aW5PcC0+Z2V0T3AoKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgLy8gTG9vcCBpbmRl
eCBtdXN0IGJlIGNvbXBhcmVkIHdpdGggYSBjb25zdGFudC4KLSAgICBpZiAoIWlzQ29uc3RFeHBy
KGJpbk9wLT5nZXRSaWdodCgpKSkgewotICAgICAgICBlcnJvcihiaW5PcC0+Z2V0TGluZSgpLAot
ICAgICAgICAgICAgICAiTG9vcCBpbmRleCBjYW5ub3QgYmUgY29tcGFyZWQgd2l0aCBub24tY29u
c3RhbnQgZXhwcmVzc2lvbiIsCi0gICAgICAgICAgICAgIHN5bWJvbC0+Z2V0U3ltYm9sKCkuY19z
dHIoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvb3BFeHByKFRJbnRl
cm1Mb29wKiBub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRMb29wSW5mbyogaW5mbykKLXsKLSAgICBUSW50ZXJtTm9kZSogZXhwciA9IG5vZGUtPmdl
dEV4cHJlc3Npb24oKTsKLSAgICBpZiAoZXhwciA9PSBOVUxMKSB7Ci0gICAgICAgIGVycm9yKG5v
ZGUtPmdldExpbmUoKSwgIk1pc3NpbmcgZXhwcmVzc2lvbiIsICJmb3IiKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIGZvciBleHByZXNzaW9uIGhhcyBvbmUgb2YgdGhl
IGZvbGxvd2luZyBmb3JtczoKLSAgICAvLyAgICAgbG9vcF9pbmRleCsrCi0gICAgLy8gICAgIGxv
b3BfaW5kZXgtLQotICAgIC8vICAgICBsb29wX2luZGV4ICs9IGNvbnN0YW50X2V4cHJlc3Npb24K
LSAgICAvLyAgICAgbG9vcF9pbmRleCAtPSBjb25zdGFudF9leHByZXNzaW9uCi0gICAgLy8gICAg
ICsrbG9vcF9pbmRleAotICAgIC8vICAgICAtLWxvb3BfaW5kZXgKLSAgICAvLyBUaGUgbGFzdCB0
d28gZm9ybXMgYXJlIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHNwZWMsIGJ1dCBJIGFtIGFzc3VtaW5n
Ci0gICAgLy8gaXRzIGFuIG92ZXJzaWdodC4KLSAgICBUSW50ZXJtVW5hcnkqIHVuT3AgPSBleHBy
LT5nZXRBc1VuYXJ5Tm9kZSgpOwotICAgIFRJbnRlcm1CaW5hcnkqIGJpbk9wID0gdW5PcCA/IE5V
TEwgOiBleHByLT5nZXRBc0JpbmFyeU5vZGUoKTsKLQotICAgIFRPcGVyYXRvciBvcCA9IEVPcE51
bGw7Ci0gICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gTlVMTDsKLSAgICBpZiAodW5PcCAhPSBO
VUxMKSB7Ci0gICAgICAgIG9wID0gdW5PcC0+Z2V0T3AoKTsKLSAgICAgICAgc3ltYm9sID0gdW5P
cC0+Z2V0T3BlcmFuZCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAgICB9IGVsc2UgaWYgKGJpbk9w
ICE9IE5VTEwpIHsKLSAgICAgICAgb3AgPSBiaW5PcC0+Z2V0T3AoKTsKLSAgICAgICAgc3ltYm9s
ID0gYmluT3AtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0gICAgfQotCi0gICAgLy8g
VGhlIG9wZXJhbmQgbXVzdCBiZSBsb29wIGluZGV4LgotICAgIGlmIChzeW1ib2wgPT0gTlVMTCkg
ewotICAgICAgICBlcnJvcihleHByLT5nZXRMaW5lKCksICJJbnZhbGlkIGV4cHJlc3Npb24iLCAi
Zm9yIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHN5bWJvbC0+Z2V0
SWQoKSAhPSBpbmZvLT5pbmRleC5pZCkgewotICAgICAgICBlcnJvcihzeW1ib2wtPmdldExpbmUo
KSwKLSAgICAgICAgICAgICAgIkV4cGVjdGVkIGxvb3AgaW5kZXgiLCBzeW1ib2wtPmdldFN5bWJv
bCgpLmNfc3RyKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gVGhl
IG9wZXJhdG9yIGlzIG9uZSBvZjogKysgLS0gKz0gLT0uCi0gICAgc3dpdGNoIChvcCkgewotICAg
ICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6Ci0gICAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVu
dDoKLSAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6Ci0gICAgICAgIGNhc2UgRU9wUHJlRGVj
cmVtZW50OgotICAgICAgICAgICAgQVNTRVJUKCh1bk9wICE9IE5VTEwpICYmIChiaW5PcCA9PSBO
VUxMKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BBZGRBc3NpZ246Ci0g
ICAgICAgIGNhc2UgRU9wU3ViQXNzaWduOgotICAgICAgICAgICAgQVNTRVJUKCh1bk9wID09IE5V
TEwpICYmIChiaW5PcCAhPSBOVUxMKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIGVycm9yKGV4cHItPmdldExpbmUoKSwgIkludmFsaWQgb3BlcmF0
b3IiLCBnZXRPcGVyYXRvclN0cmluZyhvcCkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIC8vIExvb3AgaW5kZXggbXVzdCBiZSBpbmNyZW1lbnRlZC9kZWNyZW1lbnRl
ZCB3aXRoIGEgY29uc3RhbnQuCi0gICAgaWYgKGJpbk9wICE9IE5VTEwpIHsKLSAgICAgICAgaWYg
KCFpc0NvbnN0RXhwcihiaW5PcC0+Z2V0UmlnaHQoKSkpIHsKLSAgICAgICAgICAgIGVycm9yKGJp
bk9wLT5nZXRMaW5lKCksCi0gICAgICAgICAgICAgICAgICAiTG9vcCBpbmRleCBjYW5ub3QgYmUg
bW9kaWZpZWQgYnkgbm9uLWNvbnN0YW50IGV4cHJlc3Npb24iLAotICAgICAgICAgICAgICAgICAg
c3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFZhbGlkYXRl
TGltaXRhdGlvbnM6OnZhbGlkYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUp
Ci17Ci0gICAgQVNTRVJUKG5vZGUtPmdldE9wKCkgPT0gRU9wRnVuY3Rpb25DYWxsKTsKLQotICAg
IC8vIElmIG5vdCB3aXRoaW4gbG9vcCBib2R5LCB0aGVyZSBpcyBub3RoaW5nIHRvIGNoZWNrLgot
ICAgIGlmICghd2l0aGluTG9vcEJvZHkoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAv
LyBMaXN0IG9mIHBhcmFtIGluZGljZXMgZm9yIHdoaWNoIGxvb3AgaW5kaWNlcyBhcmUgdXNlZCBh
cyBhcmd1bWVudC4KLSAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPHNpemVfdD4gUGFyYW1JbmRleDsK
LSAgICBQYXJhbUluZGV4IHBJbmRleDsKLSAgICBUSW50ZXJtU2VxdWVuY2UmIHBhcmFtcyA9IG5v
ZGUtPmdldFNlcXVlbmNlKCk7Ci0gICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6OnNpemVfdHlwZSBp
ID0gMDsgaSA8IHBhcmFtcy5zaXplKCk7ICsraSkgewotICAgICAgICBUSW50ZXJtU3ltYm9sKiBz
eW1ib2wgPSBwYXJhbXNbaV0tPmdldEFzU3ltYm9sTm9kZSgpOwotICAgICAgICBpZiAoc3ltYm9s
ICYmIGlzTG9vcEluZGV4KHN5bWJvbCkpCi0gICAgICAgICAgICBwSW5kZXgucHVzaF9iYWNrKGkp
OwotICAgIH0KLSAgICAvLyBJZiBub25lIG9mIHRoZSBsb29wIGluZGljZXMgYXJlIHVzZWQgYXMg
YXJndW1lbnRzLAotICAgIC8vIHRoZXJlIGlzIG5vdGhpbmcgdG8gY2hlY2suCi0gICAgaWYgKHBJ
bmRleC5lbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGJvb2wgdmFsaWQgPSB0
cnVlOwotICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUgPSBHZXRHbG9iYWxQYXJzZUNvbnRl
eHQoKS0+c3ltYm9sVGFibGU7Ci0gICAgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmlu
ZChub2RlLT5nZXROYW1lKCkpOwotICAgIEFTU0VSVChzeW1ib2wgJiYgc3ltYm9sLT5pc0Z1bmN0
aW9uKCkpOwotICAgIFRGdW5jdGlvbiogZnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24q
PihzeW1ib2wpOwotICAgIGZvciAoUGFyYW1JbmRleDo6Y29uc3RfaXRlcmF0b3IgaSA9IHBJbmRl
eC5iZWdpbigpOwotICAgICAgICAgaSAhPSBwSW5kZXguZW5kKCk7ICsraSkgewotICAgICAgICBj
b25zdCBUUGFyYW1ldGVyJiBwYXJhbSA9IGZ1bmN0aW9uLT5nZXRQYXJhbSgqaSk7Ci0gICAgICAg
IFRRdWFsaWZpZXIgcXVhbCA9IHBhcmFtLnR5cGUtPmdldFF1YWxpZmllcigpOwotICAgICAgICBp
ZiAoKHF1YWwgPT0gRXZxT3V0KSB8fCAocXVhbCA9PSBFdnFJbk91dCkpIHsKLSAgICAgICAgICAg
IGVycm9yKHBhcmFtc1sqaV0tPmdldExpbmUoKSwKLSAgICAgICAgICAgICAgICAgICJMb29wIGlu
ZGV4IGNhbm5vdCBiZSB1c2VkIGFzIGFyZ3VtZW50IHRvIGEgZnVuY3Rpb24gb3V0IG9yIGlub3V0
IHBhcmFtZXRlciIsCi0gICAgICAgICAgICAgICAgICBwYXJhbXNbKmldLT5nZXRBc1N5bWJvbE5v
ZGUoKS0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7Ci0gICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbGlkOwotfQotCi1ib29sIFZhbGlkYXRl
TGltaXRhdGlvbnM6OnZhbGlkYXRlT3BlcmF0aW9uKFRJbnRlcm1PcGVyYXRvciogbm9kZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5vZGUqIG9w
ZXJhbmQpIHsKLSAgICAvLyBDaGVjayBpZiBsb29wIGluZGV4IGlzIG1vZGlmaWVkIGluIHRoZSBs
b29wIGJvZHkuCi0gICAgaWYgKCF3aXRoaW5Mb29wQm9keSgpIHx8ICFub2RlLT5pc0Fzc2lnbm1l
bnQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjb25zdCBUSW50ZXJtU3ltYm9sKiBz
eW1ib2wgPSBvcGVyYW5kLT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAgICBpZiAoc3ltYm9sICYmIGlz
TG9vcEluZGV4KHN5bWJvbCkpIHsKLSAgICAgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLAotICAg
ICAgICAgICAgICAiTG9vcCBpbmRleCBjYW5ub3QgYmUgc3RhdGljYWxseSBhc3NpZ25lZCB0byB3
aXRoaW4gdGhlIGJvZHkgb2YgdGhlIGxvb3AiLAotICAgICAgICAgICAgICBzeW1ib2wtPmdldFN5
bWJvbCgpLmNfc3RyKCkpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBWYWxp
ZGF0ZUxpbWl0YXRpb25zOjppc0NvbnN0RXhwcihUSW50ZXJtTm9kZSogbm9kZSkKLXsKLSAgICBB
U1NFUlQobm9kZSAhPSBOVUxMKTsKLSAgICByZXR1cm4gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9u
KCkgIT0gTlVMTDsKLX0KLQotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjppc0NvbnN0SW5kZXhF
eHByKFRJbnRlcm1Ob2RlKiBub2RlKQotewotICAgIEFTU0VSVChub2RlICE9IE5VTEwpOwotCi0g
ICAgVmFsaWRhdGVDb25zdEluZGV4RXhwciB2YWxpZGF0ZShtTG9vcFN0YWNrKTsKLSAgICBub2Rl
LT50cmF2ZXJzZSgmdmFsaWRhdGUpOwotICAgIHJldHVybiB2YWxpZGF0ZS5pc1ZhbGlkKCk7Ci19
Ci0KLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVJbmRleGluZyhUSW50ZXJtQmlu
YXJ5KiBub2RlKQotewotICAgIEFTU0VSVCgobm9kZS0+Z2V0T3AoKSA9PSBFT3BJbmRleERpcmVj
dCkgfHwKLSAgICAgICAgICAgKG5vZGUtPmdldE9wKCkgPT0gRU9wSW5kZXhJbmRpcmVjdCkpOwot
Ci0gICAgYm9vbCB2YWxpZCA9IHRydWU7Ci0gICAgVEludGVybVR5cGVkKiBpbmRleCA9IG5vZGUt
PmdldFJpZ2h0KCk7Ci0gICAgLy8gVGhlIGluZGV4IGV4cHJlc3Npb24gbXVzdCBoYXZlIGludGVn
cmFsIHR5cGUuCi0gICAgaWYgKCFpbmRleC0+aXNTY2FsYXIoKSB8fCAoaW5kZXgtPmdldEJhc2lj
VHlwZSgpICE9IEVidEludCkpIHsKLSAgICAgICAgZXJyb3IoaW5kZXgtPmdldExpbmUoKSwKLSAg
ICAgICAgICAgICAgIkluZGV4IGV4cHJlc3Npb24gbXVzdCBoYXZlIGludGVncmFsIHR5cGUiLAot
ICAgICAgICAgICAgICBpbmRleC0+Z2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsKLSAgICAg
ICAgdmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgLy8gVGhlIGluZGV4IGV4cGVzc2lvbiBtdXN0
IGJlIGEgY29uc3RhbnQtaW5kZXgtZXhwcmVzc2lvbiB1bmxlc3MKLSAgICAvLyB0aGUgb3BlcmFu
ZCBpcyBhIHVuaWZvcm0gaW4gYSB2ZXJ0ZXggc2hhZGVyLgotICAgIFRJbnRlcm1UeXBlZCogb3Bl
cmFuZCA9IG5vZGUtPmdldExlZnQoKTsKLSAgICBib29sIHNraXAgPSAobVNoYWRlclR5cGUgPT0g
U0hfVkVSVEVYX1NIQURFUikgJiYKLSAgICAgICAgICAgICAgICAob3BlcmFuZC0+Z2V0UXVhbGlm
aWVyKCkgPT0gRXZxVW5pZm9ybSk7Ci0gICAgaWYgKCFza2lwICYmICFpc0NvbnN0SW5kZXhFeHBy
KGluZGV4KSkgewotICAgICAgICBlcnJvcihpbmRleC0+Z2V0TGluZSgpLCAiSW5kZXggZXhwcmVz
c2lvbiBtdXN0IGJlIGNvbnN0YW50IiwgIltdIik7Ci0gICAgICAgIHZhbGlkID0gZmFsc2U7Ci0g
ICAgfQotICAgIHJldHVybiB2YWxpZDsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4MzVjYjNjMjI2ZTYwZjNmNmVmOGVjMmY2NjQ5MGNhMTJh
YWI0YjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuaAor
KysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAi
R0xTTEFORy9TaGFkZXJMYW5nLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgi
Ci0KLWNsYXNzIFRJbmZvU2lua0Jhc2U7Ci0KLXN0cnVjdCBUTG9vcEluZm8gewotICAgIHN0cnVj
dCBUSW5kZXggewotICAgICAgICBpbnQgaWQ7ICAvLyBzeW1ib2wgaWQuCi0gICAgfSBpbmRleDsK
LSAgICBUSW50ZXJtTG9vcCogbG9vcDsKLX07Ci10eXBlZGVmIFRWZWN0b3I8VExvb3BJbmZvPiBU
TG9vcFN0YWNrOwotCi0vLyBUcmF2ZXJzZXMgaW50ZXJtZWRpYXRlIHRyZWUgdG8gZW5zdXJlIHRo
YXQgdGhlIHNoYWRlciBkb2VzIG5vdCBleGNlZWQgdGhlCi0vLyBtaW5pbXVtIGZ1bmN0aW9uYWxp
dHkgbWFuZGF0ZWQgaW4gR0xTTCAxLjAgc3BlYywgQXBwZW5kaXggQS4KLWNsYXNzIFZhbGlkYXRl
TGltaXRhdGlvbnMgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7Ci1wdWJsaWM6Ci0gICAgVmFs
aWRhdGVMaW1pdGF0aW9ucyhTaFNoYWRlclR5cGUgc2hhZGVyVHlwZSwgVEluZm9TaW5rQmFzZSYg
c2luayk7Ci0KLSAgICBpbnQgbnVtRXJyb3JzKCkgY29uc3QgeyByZXR1cm4gbU51bUVycm9yczsg
fQotCi0gICAgdmlydHVhbCBib29sIHZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7
Ci0gICAgdmlydHVhbCBib29sIHZpc2l0VW5hcnkoVmlzaXQsIFRJbnRlcm1VbmFyeSopOwotICAg
IHZpcnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOwot
ICAgIHZpcnR1YWwgYm9vbCB2aXNpdExvb3AoVmlzaXQsIFRJbnRlcm1Mb29wKik7Ci0KLXByaXZh
dGU6Ci0gICAgdm9pZCBlcnJvcihUU291cmNlTG9jIGxvYywgY29uc3QgY2hhciAqcmVhc29uLCBj
b25zdCBjaGFyKiB0b2tlbik7Ci0KLSAgICBib29sIHdpdGhpbkxvb3BCb2R5KCkgY29uc3Q7Ci0g
ICAgYm9vbCBpc0xvb3BJbmRleChjb25zdCBUSW50ZXJtU3ltYm9sKiBzeW1ib2wpIGNvbnN0Owot
ICAgIGJvb2wgdmFsaWRhdGVMb29wVHlwZShUSW50ZXJtTG9vcCogbm9kZSk7Ci0gICAgYm9vbCB2
YWxpZGF0ZUZvckxvb3BIZWFkZXIoVEludGVybUxvb3AqIG5vZGUsIFRMb29wSW5mbyogaW5mbyk7
Ci0gICAgYm9vbCB2YWxpZGF0ZUZvckxvb3BJbml0KFRJbnRlcm1Mb29wKiBub2RlLCBUTG9vcElu
Zm8qIGluZm8pOwotICAgIGJvb2wgdmFsaWRhdGVGb3JMb29wQ29uZChUSW50ZXJtTG9vcCogbm9k
ZSwgVExvb3BJbmZvKiBpbmZvKTsKLSAgICBib29sIHZhbGlkYXRlRm9yTG9vcEV4cHIoVEludGVy
bUxvb3AqIG5vZGUsIFRMb29wSW5mbyogaW5mbyk7Ci0gICAgLy8gUmV0dXJucyB0cnVlIGlmIG5v
bmUgb2YgdGhlIGxvb3AgaW5kaWNlcyBpcyB1c2VkIGFzIHRoZSBhcmd1bWVudCB0bwotICAgIC8v
IHRoZSBnaXZlbiBmdW5jdGlvbiBvdXQgb3IgaW5vdXQgcGFyYW1ldGVyLgotICAgIGJvb2wgdmFs
aWRhdGVGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSogbm9kZSk7Ci0gICAgYm9vbCB2YWxp
ZGF0ZU9wZXJhdGlvbihUSW50ZXJtT3BlcmF0b3IqIG5vZGUsIFRJbnRlcm1Ob2RlKiBvcGVyYW5k
KTsKLQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBpbmRleGluZyBkb2VzIG5vdCBleGNlZWQgdGhl
IG1pbmltdW0gZnVuY3Rpb25hbGl0eQotICAgIC8vIG1hbmRhdGVkIGluIEdMU0wgMS4wIHNwZWMs
IEFwcGVuZGl4IEEsIFNlY3Rpb24gNS4KLSAgICBib29sIGlzQ29uc3RFeHByKFRJbnRlcm1Ob2Rl
KiBub2RlKTsKLSAgICBib29sIGlzQ29uc3RJbmRleEV4cHIoVEludGVybU5vZGUqIG5vZGUpOwot
ICAgIGJvb2wgdmFsaWRhdGVJbmRleGluZyhUSW50ZXJtQmluYXJ5KiBub2RlKTsKLQotICAgIFNo
U2hhZGVyVHlwZSBtU2hhZGVyVHlwZTsKLSAgICBUSW5mb1NpbmtCYXNlJiBtU2luazsKLSAgICBp
bnQgbU51bUVycm9yczsKLSAgICBUTG9vcFN0YWNrIG1Mb29wU3RhY2s7Ci19OwotCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVJbmZvLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGVhNGI2NTkyNjRkNjIyNDI4OTA2ZmNh
ODZiN2M5ZjBmYjQ3MzAwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8u
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzA4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0K
LSNpbmNsdWRlICJjb21waWxlci9WYXJpYWJsZUluZm8uaCIKLQotbmFtZXNwYWNlIHsKLQotVFN0
cmluZyBhcnJheUJyYWNrZXRzKGludCBpbmRleCkKLXsKLSAgICBUU3RyaW5nU3RyZWFtIHN0cmVh
bTsKLSAgICBzdHJlYW0gPDwgIlsiIDw8IGluZGV4IDw8ICJdIjsKLSAgICByZXR1cm4gc3RyZWFt
LnN0cigpOwotfQotCi0vLyBSZXR1cm5zIHRoZSBkYXRhIHR5cGUgZm9yIGFuIGF0dHJpYnV0ZSwg
dW5pZm9ybSwgb3IgdmFyeWluZy4KLVNoRGF0YVR5cGUgZ2V0VmFyaWFibGVEYXRhVHlwZShjb25z
dCBUVHlwZSYgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUuZ2V0QmFzaWNUeXBlKCkpIHsKLSAg
ICAgIGNhc2UgRWJ0RmxvYXQ6Ci0gICAgICAgICAgaWYgKHR5cGUuaXNNYXRyaXgoKSkgewotICAg
ICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkgewotICAgICAgICAgICAg
ICAgIGNhc2UgMjogcmV0dXJuIFNIX0ZMT0FUX01BVDI7Ci0gICAgICAgICAgICAgICAgY2FzZSAz
OiByZXR1cm4gU0hfRkxPQVRfTUFUMzsKLSAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBT
SF9GTE9BVF9NQVQ0OwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgICAgICAgICAgIH0KLSAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUuaXNWZWN0b3IoKSkgewot
ICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkgewotICAgICAgICAg
ICAgICAgIGNhc2UgMjogcmV0dXJuIFNIX0ZMT0FUX1ZFQzI7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSAzOiByZXR1cm4gU0hfRkxPQVRfVkVDMzsKLSAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVy
biBTSF9GTE9BVF9WRUM0OwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICByZXR1
cm4gU0hfRkxPQVQ7Ci0gICAgICAgICAgfQotICAgICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAgICAg
aWYgKHR5cGUuaXNNYXRyaXgoKSkgewotICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICAgIH0gZWxzZSBpZiAodHlwZS5pc1ZlY3RvcigpKSB7Ci0gICAgICAgICAgICAgIHN3aXRj
aCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1
cm4gU0hfSU5UX1ZFQzI7Ci0gICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gU0hfSU5UX1ZF
QzM7Ci0gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gU0hfSU5UX1ZFQzQ7Ci0gICAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgfQotICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIHJldHVybiBTSF9JTlQ7Ci0gICAgICAgICAgfQot
ICAgICAgY2FzZSBFYnRCb29sOgotICAgICAgICAgIGlmICh0eXBlLmlzTWF0cml4KCkpIHsKLSAg
ICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUuaXNW
ZWN0b3IoKSkgewotICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkg
ewotICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIFNIX0JPT0xfVkVDMjsKLSAgICAgICAg
ICAgICAgICBjYXNlIDM6IHJldHVybiBTSF9CT09MX1ZFQzM7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSA0OiByZXR1cm4gU0hfQk9PTF9WRUM0OwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICByZXR1cm4gU0hfQk9PTDsKLSAgICAgICAgICB9Ci0gICAgICBjYXNlIEVidFNhbXBsZXIy
RDogcmV0dXJuIFNIX1NBTVBMRVJfMkQ7Ci0gICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiByZXR1
cm4gU0hfU0FNUExFUl9DVUJFOwotICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6IHJl
dHVybiBTSF9TQU1QTEVSX0VYVEVSTkFMX09FUzsKLSAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEUmVj
dDogcmV0dXJuIFNIX1NBTVBMRVJfMkRfUkVDVF9BUkI7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOwotICAgIH0KLSAgICByZXR1cm4gU0hfTk9ORTsKLX0KLQotdm9pZCBnZXRCdWlsdElu
VmFyaWFibGVJbmZvKGNvbnN0IFRUeXBlJiB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVFN0cmluZyYgbWFwcGVkTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFy
aWFibGVJbmZvTGlzdCYgaW5mb0xpc3QpOwotdm9pZCBnZXRVc2VyRGVmaW5lZFZhcmlhYmxlSW5m
byhjb25zdCBUVHlwZSYgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVFN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VFN0cmluZyYgbWFwcGVkTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZh
cmlhYmxlSW5mb0xpc3QmIGluZm9MaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbik7Ci0KLS8vIFJldHVybnMgaW5mbyBmb3Ig
YW4gYXR0cmlidXRlLCB1bmlmb3JtLCBvciB2YXJ5aW5nLgotdm9pZCBnZXRWYXJpYWJsZUluZm8o
Y29uc3QgVFR5cGUmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nJiBu
YW1lLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyYgbWFwcGVkTmFtZSwKLSAg
ICAgICAgICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9MaXN0JiBpbmZvTGlzdCwKLSAgICAgICAg
ICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uKQotewotICAgIGlmICh0
eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgewotICAgICAgICBpZiAodHlwZS5pc0Fy
cmF5KCkpIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZS5nZXRBcnJheVNp
emUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgVFN0cmluZyBsbmFtZSA9IG5hbWUgKyBhcnJh
eUJyYWNrZXRzKGkpOwotICAgICAgICAgICAgICAgIFRTdHJpbmcgbG1hcHBlZE5hbWUgPSBtYXBw
ZWROYW1lICsgYXJyYXlCcmFja2V0cyhpKTsKLSAgICAgICAgICAgICAgICBnZXRVc2VyRGVmaW5l
ZFZhcmlhYmxlSW5mbyh0eXBlLCBsbmFtZSwgbG1hcHBlZE5hbWUsIGluZm9MaXN0LCBoYXNoRnVu
Y3Rpb24pOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZ2V0
VXNlckRlZmluZWRWYXJpYWJsZUluZm8odHlwZSwgbmFtZSwgbWFwcGVkTmFtZSwgaW5mb0xpc3Qs
IGhhc2hGdW5jdGlvbik7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBnZXRCdWls
dEluVmFyaWFibGVJbmZvKHR5cGUsIG5hbWUsIG1hcHBlZE5hbWUsIGluZm9MaXN0KTsKLSAgICB9
Ci19Ci0KLXZvaWQgZ2V0QnVpbHRJblZhcmlhYmxlSW5mbyhjb25zdCBUVHlwZSYgdHlwZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nJiBuYW1lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcmIG1hcHBlZE5hbWUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIGluZm9MaXN0KQotewotICAgIEFT
U0VSVCh0eXBlLmdldEJhc2ljVHlwZSgpICE9IEVidFN0cnVjdCk7Ci0KLSAgICBUVmFyaWFibGVJ
bmZvIHZhckluZm87Ci0gICAgaWYgKHR5cGUuaXNBcnJheSgpKSB7Ci0gICAgICAgIHZhckluZm8u
bmFtZSA9IChuYW1lICsgIlswXSIpLmNfc3RyKCk7Ci0gICAgICAgIHZhckluZm8ubWFwcGVkTmFt
ZSA9IChtYXBwZWROYW1lICsgIlswXSIpLmNfc3RyKCk7Ci0gICAgICAgIHZhckluZm8uc2l6ZSA9
IHR5cGUuZ2V0QXJyYXlTaXplKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdmFySW5mby5uYW1l
ID0gbmFtZS5jX3N0cigpOwotICAgICAgICB2YXJJbmZvLm1hcHBlZE5hbWUgPSBtYXBwZWROYW1l
LmNfc3RyKCk7Ci0gICAgICAgIHZhckluZm8uc2l6ZSA9IDE7Ci0gICAgfQotICAgIHZhckluZm8u
cHJlY2lzaW9uID0gdHlwZS5nZXRQcmVjaXNpb24oKTsKLSAgICB2YXJJbmZvLnR5cGUgPSBnZXRW
YXJpYWJsZURhdGFUeXBlKHR5cGUpOwotICAgIGluZm9MaXN0LnB1c2hfYmFjayh2YXJJbmZvKTsK
LX0KLQotdm9pZCBnZXRVc2VyRGVmaW5lZFZhcmlhYmxlSW5mbyhjb25zdCBUVHlwZSYgdHlwZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyYgbmFtZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyYgbWFwcGVkTmFtZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIGluZm9M
aXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhh
c2hGdW5jdGlvbikKLXsKLSAgICBBU1NFUlQodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1
Y3QpOwotCi0gICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRzID0gdHlwZS5nZXRTdHJ1Y3QoKS0+
ZmllbGRzKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgY29uc3QgVFR5cGUmIGZpZWxkVHlwZSA9ICooZmllbGRzW2ldLT50eXBlKCkp
OwotICAgICAgICBjb25zdCBUU3RyaW5nJiBmaWVsZE5hbWUgPSBmaWVsZHNbaV0tPm5hbWUoKTsK
LSAgICAgICAgZ2V0VmFyaWFibGVJbmZvKGZpZWxkVHlwZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG5hbWUgKyAiLiIgKyBmaWVsZE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXBw
ZWROYW1lICsgIi4iICsgVEludGVybVRyYXZlcnNlcjo6aGFzaChmaWVsZE5hbWUsIGhhc2hGdW5j
dGlvbiksCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvTGlzdCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGhhc2hGdW5jdGlvbik7Ci0gICAgfQotfQotCi1UVmFyaWFibGVJbmZvKiBmaW5k
VmFyaWFibGUoY29uc3QgVFR5cGUmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVFN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFyaWFi
bGVJbmZvTGlzdCYgaW5mb0xpc3QpCi17Ci0gICAgLy8gVE9ETyh6bW8pOiBvcHRpbWl6ZSB0aGlz
IGZ1bmN0aW9uLgotICAgIFRTdHJpbmcgbXlOYW1lID0gbmFtZTsKLSAgICBpZiAodHlwZS5pc0Fy
cmF5KCkpCi0gICAgICAgIG15TmFtZSArPSAiWzBdIjsKLSAgICBmb3IgKHNpemVfdCBpaSA9IDA7
IGlpIDwgaW5mb0xpc3Quc2l6ZSgpOyArK2lpKQotICAgIHsKLSAgICAgICAgaWYgKGluZm9MaXN0
W2lpXS5uYW1lLmNfc3RyKCkgPT0gbXlOYW1lKQotICAgICAgICAgICAgcmV0dXJuICYoaW5mb0xp
c3RbaWldKTsKLSAgICB9Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBh
bm9ueW1vdXMKLQotVFZhcmlhYmxlSW5mbzo6VFZhcmlhYmxlSW5mbygpCi0gICAgOiB0eXBlKFNI
X05PTkUpLAotICAgICAgc2l6ZSgwKSwKLSAgICAgIHByZWNpc2lvbihFYnBVbmRlZmluZWQpLAot
ICAgICAgc3RhdGljVXNlKGZhbHNlKQotewotfQotCi1UVmFyaWFibGVJbmZvOjpUVmFyaWFibGVJ
bmZvKFNoRGF0YVR5cGUgdHlwZSwgaW50IHNpemUpCi0gICAgOiB0eXBlKHR5cGUpLAotICAgICAg
c2l6ZShzaXplKSwKLSAgICAgIHByZWNpc2lvbihFYnBVbmRlZmluZWQpLAotICAgICAgc3RhdGlj
VXNlKGZhbHNlKQotewotfQotCi1Db2xsZWN0VmFyaWFibGVzOjpDb2xsZWN0VmFyaWFibGVzKFRW
YXJpYWJsZUluZm9MaXN0JiBhdHRyaWJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUVmFyaWFibGVJbmZvTGlzdCYgdW5pZm9ybXMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9MaXN0JiB2YXJ5aW5ncywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24pCi0gICAg
OiBtQXR0cmlicyhhdHRyaWJzKSwKLSAgICAgIG1Vbmlmb3Jtcyh1bmlmb3JtcyksCi0gICAgICBt
VmFyeWluZ3ModmFyeWluZ3MpLAotICAgICAgbVBvaW50Q29vcmRBZGRlZChmYWxzZSksCi0gICAg
ICBtRnJvbnRGYWNpbmdBZGRlZChmYWxzZSksCi0gICAgICBtRnJhZ0Nvb3JkQWRkZWQoZmFsc2Up
LAotICAgICAgbUhhc2hGdW5jdGlvbihoYXNoRnVuY3Rpb24pCi17Ci19Ci0KLS8vIFdlIHdhbnQg
dG8gY2hlY2sgd2hldGhlciBhIHVuaWZvcm0vdmFyeWluZyBpcyBzdGF0aWNhbGx5IHVzZWQKLS8v
IGJlY2F1c2Ugd2Ugb25seSBjb3VudCB0aGUgdXNlZCBvbmVzIGluIHBhY2tpbmcgY29tcHV0aW5n
LgotLy8gQWxzbywgZ2xfRnJhZ0Nvb3JkLCBnbF9Qb2ludENvb3JkLCBhbmQgZ2xfRnJvbnRGYWNp
bmcgY291bnQKLS8vIHRvd2FyZCB2YXJ5aW5nIGNvdW50aW5nIGlmIHRoZXkgYXJlIHN0YXRpY2Fs
bHkgdXNlZCBpbiBhIGZyYWdtZW50Ci0vLyBzaGFkZXIuCi12b2lkIENvbGxlY3RWYXJpYWJsZXM6
OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCkKLXsKLSAgICBBU1NFUlQoc3ltYm9s
ICE9IE5VTEwpOwotICAgIFRWYXJpYWJsZUluZm8qIHZhciA9IE5VTEw7Ci0gICAgc3dpdGNoIChz
eW1ib2wtPmdldFF1YWxpZmllcigpKQotICAgIHsKLSAgICBjYXNlIEV2cVZhcnlpbmdPdXQ6Ci0g
ICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0OgotICAgIGNhc2UgRXZxVmFyeWluZ0luOgot
ICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWluZ0luOgotICAgICAgICB2YXIgPSBmaW5kVmFyaWFi
bGUoc3ltYm9sLT5nZXRUeXBlKCksIHN5bWJvbC0+Z2V0U3ltYm9sKCksIG1WYXJ5aW5ncyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXZxVW5pZm9ybToKLSAgICAgICAgdmFyID0gZmluZFZh
cmlhYmxlKHN5bWJvbC0+Z2V0VHlwZSgpLCBzeW1ib2wtPmdldFN5bWJvbCgpLCBtVW5pZm9ybXMp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEV2cUZyYWdDb29yZDoKLSAgICAgICAgaWYgKCFt
RnJhZ0Nvb3JkQWRkZWQpIHsKLSAgICAgICAgICAgIFRWYXJpYWJsZUluZm8gaW5mbzsKLSAgICAg
ICAgICAgIGluZm8ubmFtZSA9ICJnbF9GcmFnQ29vcmQiOwotICAgICAgICAgICAgaW5mby5tYXBw
ZWROYW1lID0gImdsX0ZyYWdDb29yZCI7Ci0gICAgICAgICAgICBpbmZvLnR5cGUgPSBTSF9GTE9B
VF9WRUM0OwotICAgICAgICAgICAgaW5mby5zaXplID0gMTsKLSAgICAgICAgICAgIGluZm8ucHJl
Y2lzaW9uID0gRWJwTWVkaXVtOyAgLy8gVXNlIG1lZGl1bXAgYXMgaXQgZG9lc24ndCByZWFsbHkg
bWF0dGVyLgotICAgICAgICAgICAgaW5mby5zdGF0aWNVc2UgPSB0cnVlOwotICAgICAgICBtVmFy
eWluZ3MucHVzaF9iYWNrKGluZm8pOwotICAgICAgICAgICAgbUZyYWdDb29yZEFkZGVkID0gdHJ1
ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBFdnFGcm9udEZhY2luZzoK
LSAgICAgICAgaWYgKCFtRnJvbnRGYWNpbmdBZGRlZCkgewotICAgICAgICAgICAgVFZhcmlhYmxl
SW5mbyBpbmZvOwotICAgICAgICAgICAgaW5mby5uYW1lID0gImdsX0Zyb250RmFjaW5nIjsKLSAg
ICAgICAgICAgIGluZm8ubWFwcGVkTmFtZSA9ICJnbF9Gcm9udEZhY2luZyI7Ci0gICAgICAgICAg
ICBpbmZvLnR5cGUgPSBTSF9CT09MOwotICAgICAgICAgICAgaW5mby5zaXplID0gMTsKLSAgICAg
ICAgICAgIGluZm8ucHJlY2lzaW9uID0gRWJwVW5kZWZpbmVkOwotICAgICAgICAgICAgaW5mby5z
dGF0aWNVc2UgPSB0cnVlOwotICAgICAgICBtVmFyeWluZ3MucHVzaF9iYWNrKGluZm8pOwotICAg
ICAgICAgICAgbUZyb250RmFjaW5nQWRkZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybjsKLSAgICBjYXNlIEV2cVBvaW50Q29vcmQ6Ci0gICAgICAgIGlmICghbVBvaW50Q29vcmRB
ZGRlZCkgewotICAgICAgICAgICAgVFZhcmlhYmxlSW5mbyBpbmZvOwotICAgICAgICAgICAgaW5m
by5uYW1lID0gImdsX1BvaW50Q29vcmQiOwotICAgICAgICAgICAgaW5mby5tYXBwZWROYW1lID0g
ImdsX1BvaW50Q29vcmQiOwotICAgICAgICAgICAgaW5mby50eXBlID0gU0hfRkxPQVRfVkVDMjsK
LSAgICAgICAgICAgIGluZm8uc2l6ZSA9IDE7Ci0gICAgICAgICAgICBpbmZvLnByZWNpc2lvbiA9
IEVicE1lZGl1bTsgIC8vIFVzZSBtZWRpdW1wIGFzIGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlci4K
LSAgICAgICAgICAgIGluZm8uc3RhdGljVXNlID0gdHJ1ZTsKLSAgICAgICAgbVZhcnlpbmdzLnB1
c2hfYmFjayhpbmZvKTsKLSAgICAgICAgICAgIG1Qb2ludENvb3JkQWRkZWQgPSB0cnVlOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgaWYgKHZhcikKLSAgICAgICAgdmFyLT5zdGF0aWNVc2UgPSB0cnVlOwotfQotCi1i
b29sIENvbGxlY3RWYXJpYWJsZXM6OnZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVn
YXRlKiBub2RlKQotewotICAgIGJvb2wgdmlzaXRDaGlsZHJlbiA9IHRydWU7Ci0KLSAgICBzd2l0
Y2ggKG5vZGUtPmdldE9wKCkpCi0gICAgewotICAgIGNhc2UgRU9wRGVjbGFyYXRpb246IHsKLSAg
ICAgICAgY29uc3QgVEludGVybVNlcXVlbmNlJiBzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNl
KCk7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gc2VxdWVuY2UuZnJvbnQoKS0+Z2V0
QXNUeXBlZCgpLT5nZXRRdWFsaWZpZXIoKTsKLSAgICAgICAgaWYgKHF1YWxpZmllciA9PSBFdnFB
dHRyaWJ1dGUgfHwgcXVhbGlmaWVyID09IEV2cVVuaWZvcm0gfHwKLSAgICAgICAgICAgIHF1YWxp
ZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgcXVhbGlmaWVyID09IEV2cVZhcnlpbmdPdXQgfHwKLSAg
ICAgICAgICAgIHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5aW5nSW4gfHwgcXVhbGlmaWVy
ID09IEV2cUludmFyaWFudFZhcnlpbmdPdXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFRWYXJp
YWJsZUluZm9MaXN0JiBpbmZvTGlzdCA9IHF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUgPyBtQXR0
cmlicyA6Ci0gICAgICAgICAgICAgICAgKHF1YWxpZmllciA9PSBFdnFVbmlmb3JtID8gbVVuaWZv
cm1zIDogbVZhcnlpbmdzKTsKLSAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjpjb25z
dF9pdGVyYXRvciBpID0gc2VxdWVuY2UuYmVnaW4oKTsKLSAgICAgICAgICAgICAgICAgaSAhPSBz
ZXF1ZW5jZS5lbmQoKTsgKytpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0
IFRJbnRlcm1TeW1ib2wqIHZhcmlhYmxlID0gKCppKS0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0gICAg
ICAgICAgICAgICAgLy8gVGhlIG9ubHkgY2FzZSBpbiB3aGljaCB0aGUgc2VxdWVuY2Ugd2lsbCBu
b3QgY29udGFpbiBhCi0gICAgICAgICAgICAgICAgLy8gVEludGVybVN5bWJvbCBub2RlIGlzIGlu
aXRpYWxpemF0aW9uLiBJdCB3aWxsIGNvbnRhaW4gYQotICAgICAgICAgICAgICAgIC8vIFRJbnRl
ckJpbmFyeSBub2RlIGluIHRoYXQgY2FzZS4gU2luY2UgYXR0cmlidXRlcywgdW5pZm9ybXMsCi0g
ICAgICAgICAgICAgICAgLy8gYW5kIHZhcnlpbmdzIGNhbm5vdCBiZSBpbml0aWFsaXplZCBpbiBh
IHNoYWRlciwgd2UgbXVzdCBoYXZlCi0gICAgICAgICAgICAgICAgLy8gb25seSBUSW50ZXJtU3lt
Ym9sIG5vZGVzIGluIHRoZSBzZXF1ZW5jZS4KLSAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFi
bGUgIT0gTlVMTCk7Ci0gICAgICAgICAgICAgICAgVFN0cmluZyBwcm9jZXNzZWRTeW1ib2w7Ci0g
ICAgICAgICAgICAgICAgaWYgKG1IYXNoRnVuY3Rpb24gPT0gTlVMTCkKLSAgICAgICAgICAgICAg
ICAgICAgcHJvY2Vzc2VkU3ltYm9sID0gdmFyaWFibGUtPmdldFN5bWJvbCgpOwotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkU3ltYm9sID0gVEludGVy
bVRyYXZlcnNlcjo6aGFzaCh2YXJpYWJsZS0+Z2V0T3JpZ2luYWxTeW1ib2woKSwgbUhhc2hGdW5j
dGlvbik7Ci0gICAgICAgICAgICAgICAgZ2V0VmFyaWFibGVJbmZvKHZhcmlhYmxlLT5nZXRUeXBl
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRPcmlnaW5h
bFN5bWJvbCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRTeW1i
b2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9MaXN0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtSGFzaEZ1bmN0aW9uKTsKLSAgICAgICAgICAgICAgICB2
aXNpdENoaWxkcmVuID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6IGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiB2
aXNpdENoaWxkcmVuOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvVmFyaWFibGVJbmZvLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvVmFyaWFibGVJbmZvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNj
N2YyYTVmODRmMjYzOGU1MzdhZGUzYWY5MjJmZGFmYWNmYWYwNmYuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5oCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9WQVJJQUJMRV9JTkZPX0hfCi0j
ZGVmaW5lIENPTVBJTEVSX1ZBUklBQkxFX0lORk9fSF8KLQotI2luY2x1ZGUgIkdMU0xBTkcvU2hh
ZGVyTGFuZy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotCi0vLyBQcm92
aWRlcyBpbmZvcm1hdGlvbiBhYm91dCBhIHZhcmlhYmxlLgotLy8gSXQgaXMgY3VycmVudGx5IGJl
aW5nIHVzZWQgdG8gc3RvcmUgaW5mbyBhYm91dCBhY3RpdmUgYXR0cmlicyBhbmQgdW5pZm9ybXMu
Ci1zdHJ1Y3QgVFZhcmlhYmxlSW5mbyB7Ci0gICAgVFZhcmlhYmxlSW5mbyhTaERhdGFUeXBlIHR5
cGUsIGludCBzaXplKTsKLSAgICBUVmFyaWFibGVJbmZvKCk7Ci0KLSAgICBUUGVyc2lzdFN0cmlu
ZyBuYW1lOwotICAgIFRQZXJzaXN0U3RyaW5nIG1hcHBlZE5hbWU7Ci0gICAgU2hEYXRhVHlwZSB0
eXBlOwotICAgIGludCBzaXplOwotICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOwotICAgIGJvb2wg
c3RhdGljVXNlOwotfTsKLXR5cGVkZWYgc3RkOjp2ZWN0b3I8VFZhcmlhYmxlSW5mbz4gVFZhcmlh
YmxlSW5mb0xpc3Q7Ci0KLS8vIFRyYXZlcnNlcyBpbnRlcm1lZGlhdGUgdHJlZSB0byBjb2xsZWN0
IGFsbCBhdHRyaWJ1dGVzLCB1bmlmb3JtcywgdmFyeWluZ3MuCi1jbGFzcyBDb2xsZWN0VmFyaWFi
bGVzIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIENvbGxlY3RWYXJp
YWJsZXMoVFZhcmlhYmxlSW5mb0xpc3QmIGF0dHJpYnMsCi0gICAgICAgICAgICAgICAgICAgICBU
VmFyaWFibGVJbmZvTGlzdCYgdW5pZm9ybXMsCi0gICAgICAgICAgICAgICAgICAgICBUVmFyaWFi
bGVJbmZvTGlzdCYgdmFyeWluZ3MsCi0gICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlv
bjY0IGhhc2hGdW5jdGlvbik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVy
bVN5bWJvbCopOwotICAgIHZpcnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVy
bUFnZ3JlZ2F0ZSopOwotCi1wcml2YXRlOgotICAgIFRWYXJpYWJsZUluZm9MaXN0JiBtQXR0cmli
czsKLSAgICBUVmFyaWFibGVJbmZvTGlzdCYgbVVuaWZvcm1zOwotICAgIFRWYXJpYWJsZUluZm9M
aXN0JiBtVmFyeWluZ3M7Ci0KLSAgICBib29sIG1Qb2ludENvb3JkQWRkZWQ7Ci0gICAgYm9vbCBt
RnJvbnRGYWNpbmdBZGRlZDsKLSAgICBib29sIG1GcmFnQ29vcmRBZGRlZDsKLQotICAgIFNoSGFz
aEZ1bmN0aW9uNjQgbUhhc2hGdW5jdGlvbjsKLX07Ci0KLSNlbmRpZiAgLy8gQ09NUElMRVJfVkFS
SUFCTEVfSU5GT19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1ZhcmlhYmxlUGFja2VyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9WYXJpYWJsZVBhY2tlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDg5NTcyODc3NjM1ZWIzOGE0NzBkNDczYjI5NmI1ZjE3NDRhOWVhNmEuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1ZhcmlhYmxlUGFja2VyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI5NyAr
MCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotI2luY2x1ZGUgImNvbXBpbGVyL1ZhcmlhYmxlUGFj
a2VyLmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5k
bGUuaCIKLQotbmFtZXNwYWNlIHsKLWludCBHZXRTb3J0T3JkZXIoU2hEYXRhVHlwZSB0eXBlKQot
ewotICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDQ6Ci0gICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQyOgotICAgICAgICAg
ICAgcmV0dXJuIDE7Ci0gICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDNDoKLSAgICAgICAgY2FzZSBT
SF9JTlRfVkVDNDoKLSAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzQ6Ci0gICAgICAgICAgICByZXR1
cm4gMjsKLSAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzOgotICAgICAgICAgICAgcmV0dXJuIDM7
Ci0gICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMzoKLSAgICAgICAgY2FzZSBTSF9JTlRfVkVDMzoK
LSAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzM6Ci0gICAgICAgICAgICByZXR1cm4gNDsKLSAgICAg
ICAgY2FzZSBTSF9GTE9BVF9WRUMyOgotICAgICAgICBjYXNlIFNIX0lOVF9WRUMyOgotICAgICAg
ICBjYXNlIFNIX0JPT0xfVkVDMjoKLSAgICAgICAgICAgIHJldHVybiA1OwotICAgICAgICBjYXNl
IFNIX0ZMT0FUOgotICAgICAgICBjYXNlIFNIX0lOVDoKLSAgICAgICAgY2FzZSBTSF9CT09MOgot
ICAgICAgICBjYXNlIFNIX1NBTVBMRVJfMkQ6Ci0gICAgICAgIGNhc2UgU0hfU0FNUExFUl9DVUJF
OgotICAgICAgICBjYXNlIFNIX1NBTVBMRVJfRVhURVJOQUxfT0VTOgotICAgICAgICBjYXNlIFNI
X1NBTVBMRVJfMkRfUkVDVF9BUkI6Ci0gICAgICAgICAgICByZXR1cm4gNjsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgICAgICAgICByZXR1cm4gNzsK
LSAgICB9Ci19Ci19ICAgIC8vIG5hbWVzcGFjZQotCi1pbnQgVmFyaWFibGVQYWNrZXI6OkdldE51
bUNvbXBvbmVudHNQZXJSb3coU2hEYXRhVHlwZSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkg
ewotICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDQ6Ci0gICAgICAgIGNhc2UgU0hfRkxPQVRfTUFU
MjoKLSAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUM0OgotICAgICAgICBjYXNlIFNIX0lOVF9WRUM0
OgotICAgICAgICBjYXNlIFNIX0JPT0xfVkVDNDoKLSAgICAgICAgICAgIHJldHVybiA0OwotICAg
ICAgICBjYXNlIFNIX0ZMT0FUX01BVDM6Ci0gICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMzoKLSAg
ICAgICAgY2FzZSBTSF9JTlRfVkVDMzoKLSAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzM6Ci0gICAg
ICAgICAgICByZXR1cm4gMzsKLSAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUMyOgotICAgICAgICBj
YXNlIFNIX0lOVF9WRUMyOgotICAgICAgICBjYXNlIFNIX0JPT0xfVkVDMjoKLSAgICAgICAgICAg
IHJldHVybiAyOwotICAgICAgICBjYXNlIFNIX0ZMT0FUOgotICAgICAgICBjYXNlIFNIX0lOVDoK
LSAgICAgICAgY2FzZSBTSF9CT09MOgotICAgICAgICBjYXNlIFNIX1NBTVBMRVJfMkQ6Ci0gICAg
ICAgIGNhc2UgU0hfU0FNUExFUl9DVUJFOgotICAgICAgICBjYXNlIFNIX1NBTVBMRVJfRVhURVJO
QUxfT0VTOgotICAgICAgICBjYXNlIFNIX1NBTVBMRVJfMkRfUkVDVF9BUkI6Ci0gICAgICAgICAg
ICByZXR1cm4gMTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7
Ci0gICAgICAgICAgICByZXR1cm4gNTsKLSAgICB9Ci19Ci0KLWludCBWYXJpYWJsZVBhY2tlcjo6
R2V0TnVtUm93cyhTaERhdGFUeXBlIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAg
ICAgIGNhc2UgU0hfRkxPQVRfTUFUNDoKLSAgICAgICAgICAgIHJldHVybiA0OwotICAgICAgICBj
YXNlIFNIX0ZMT0FUX01BVDM6Ci0gICAgICAgICAgICByZXR1cm4gMzsKLSAgICAgICAgY2FzZSBT
SF9GTE9BVF9NQVQyOgotICAgICAgICAgICAgcmV0dXJuIDI7Ci0gICAgICAgIGNhc2UgU0hfRkxP
QVRfVkVDNDoKLSAgICAgICAgY2FzZSBTSF9JTlRfVkVDNDoKLSAgICAgICAgY2FzZSBTSF9CT09M
X1ZFQzQ6Ci0gICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMzoKLSAgICAgICAgY2FzZSBTSF9JTlRf
VkVDMzoKLSAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzM6Ci0gICAgICAgIGNhc2UgU0hfRkxPQVRf
VkVDMjoKLSAgICAgICAgY2FzZSBTSF9JTlRfVkVDMjoKLSAgICAgICAgY2FzZSBTSF9CT09MX1ZF
QzI6Ci0gICAgICAgIGNhc2UgU0hfRkxPQVQ6Ci0gICAgICAgIGNhc2UgU0hfSU5UOgotICAgICAg
ICBjYXNlIFNIX0JPT0w6Ci0gICAgICAgIGNhc2UgU0hfU0FNUExFUl8yRDoKLSAgICAgICAgY2Fz
ZSBTSF9TQU1QTEVSX0NVQkU6Ci0gICAgICAgIGNhc2UgU0hfU0FNUExFUl9FWFRFUk5BTF9PRVM6
Ci0gICAgICAgIGNhc2UgU0hfU0FNUExFUl8yRF9SRUNUX0FSQjoKLSAgICAgICAgICAgIHJldHVy
biAxOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICAg
ICAgICAgIHJldHVybiAxMDAwMDA7Ci0gICAgfQotfQotCi1zdHJ1Y3QgVFZhcmlhYmxlSW5mb0Nv
bXBhcmVyIHsKLSAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgVFZhcmlhYmxlSW5mbyYgbGhzLCBj
b25zdCBUVmFyaWFibGVJbmZvJiByaHMpIGNvbnN0Ci0gICAgewotICAgICAgICBpbnQgbGhzU29y
dE9yZGVyID0gR2V0U29ydE9yZGVyKGxocy50eXBlKTsKLSAgICAgICAgaW50IHJoc1NvcnRPcmRl
ciA9IEdldFNvcnRPcmRlcihyaHMudHlwZSk7Ci0gICAgICAgIGlmIChsaHNTb3J0T3JkZXIgIT0g
cmhzU29ydE9yZGVyKSB7Ci0gICAgICAgICAgICByZXR1cm4gbGhzU29ydE9yZGVyIDwgcmhzU29y
dE9yZGVyOwotICAgICAgICB9Ci0gICAgICAgIC8vIFNvcnQgYnkgbGFyZ2VzdCBmaXJzdC4KLSAg
ICAgICAgcmV0dXJuIGxocy5zaXplID4gcmhzLnNpemU7Ci0gICAgfQotfTsKLQotdW5zaWduZWQg
VmFyaWFibGVQYWNrZXI6Om1ha2VDb2x1bW5GbGFncyhpbnQgY29sdW1uLCBpbnQgbnVtQ29tcG9u
ZW50c1BlclJvdykKLXsKLSAgICByZXR1cm4gKChrQ29sdW1uTWFzayA8PCAoa051bUNvbHVtbnMg
LSBudW1Db21wb25lbnRzUGVyUm93KSkgJgotICAgICAgICAgICAgICAgICAgICBrQ29sdW1uTWFz
aykgPj4gY29sdW1uOwotfQotCi12b2lkIFZhcmlhYmxlUGFja2VyOjpmaWxsQ29sdW1ucyhpbnQg
dG9wUm93LCBpbnQgbnVtUm93cywgaW50IGNvbHVtbiwgaW50IG51bUNvbXBvbmVudHNQZXJSb3cp
Ci17Ci0gICAgdW5zaWduZWQgY29sdW1uRmxhZ3MgPSBtYWtlQ29sdW1uRmxhZ3MoY29sdW1uLCBu
dW1Db21wb25lbnRzUGVyUm93KTsKLSAgICBmb3IgKGludCByID0gMDsgciA8IG51bVJvd3M7ICsr
cikgewotICAgICAgICBpbnQgcm93ID0gdG9wUm93ICsgcjsKLSAgICAgICAgQVNTRVJUKChyb3dz
X1tyb3ddICYgY29sdW1uRmxhZ3MpID09IDApOwotICAgICAgICByb3dzX1tyb3ddIHw9IGNvbHVt
bkZsYWdzOwotICAgIH0KLX0KLQotYm9vbCBWYXJpYWJsZVBhY2tlcjo6c2VhcmNoQ29sdW1uKGlu
dCBjb2x1bW4sIGludCBudW1Sb3dzLCBpbnQqIGRlc3RSb3csIGludCogZGVzdFNpemUpCi17Ci0g
ICAgQVNTRVJUKGRlc3RSb3cpOwotCi0gICAgZm9yICg7IHRvcE5vbkZ1bGxSb3dfIDwgbWF4Um93
c18gJiYgcm93c19bdG9wTm9uRnVsbFJvd19dID09IGtDb2x1bW5NYXNrOwotICAgICAgICAgKyt0
b3BOb25GdWxsUm93XykgewotICAgIH0KLQotICAgIGZvciAoOyBib3R0b21Ob25GdWxsUm93XyA+
PSAwICYmIHJvd3NfW2JvdHRvbU5vbkZ1bGxSb3dfXSA9PSBrQ29sdW1uTWFzazsKLSAgICAgICAg
IC0tYm90dG9tTm9uRnVsbFJvd18pIHsKLSAgICB9Ci0KLSAgICBpZiAoYm90dG9tTm9uRnVsbFJv
d18gLSB0b3BOb25GdWxsUm93XyArIDEgPCBudW1Sb3dzKSB7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBjb2x1bW5GbGFncyA9IG1ha2VDb2x1bW5GbGFncyhj
b2x1bW4sIDEpOwotICAgIGludCB0b3BHb29kUm93ID0gMDsKLSAgICBpbnQgc21hbGxlc3RHb29k
VG9wID0gLTE7Ci0gICAgaW50IHNtYWxsZXN0R29vZFNpemUgPSBtYXhSb3dzXyArIDE7Ci0gICAg
aW50IGJvdHRvbVJvdyA9IGJvdHRvbU5vbkZ1bGxSb3dfICsgMTsKLSAgICBib29sIGZvdW5kID0g
ZmFsc2U7Ci0gICAgZm9yIChpbnQgcm93ID0gdG9wTm9uRnVsbFJvd187IHJvdyA8PSBib3R0b21S
b3c7ICsrcm93KSB7Ci0gICAgICAgIGJvb2wgcm93RW1wdHkgPSByb3cgPCBib3R0b21Sb3cgPyAo
KHJvd3NfW3Jvd10gJiBjb2x1bW5GbGFncykgPT0gMCkgOiBmYWxzZTsKLSAgICAgICAgaWYgKHJv
d0VtcHR5KSB7Ci0gICAgICAgICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgdG9w
R29vZFJvdyA9IHJvdzsKLSAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoZm91bmQpIHsKLSAgICAgICAg
ICAgICAgICBpbnQgc2l6ZSA9IHJvdyAtIHRvcEdvb2RSb3c7Ci0gICAgICAgICAgICAgICAgaWYg
KHNpemUgPj0gbnVtUm93cyAmJiBzaXplIDwgc21hbGxlc3RHb29kU2l6ZSkgewotICAgICAgICAg
ICAgICAgICAgICBzbWFsbGVzdEdvb2RTaXplID0gc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAg
c21hbGxlc3RHb29kVG9wID0gdG9wR29vZFJvdzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBmb3VuZCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAg
IGlmIChzbWFsbGVzdEdvb2RUb3AgPCAwKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICAqZGVzdFJvdyA9IHNtYWxsZXN0R29vZFRvcDsKLSAgICBpZiAoZGVzdFNpemUpIHsK
LSAgICAgICAgKmRlc3RTaXplID0gc21hbGxlc3RHb29kU2l6ZTsKLSAgICB9Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgVmFyaWFibGVQYWNrZXI6OkNoZWNrVmFyaWFibGVzV2l0aGluUGFj
a2luZ0xpbWl0cyhpbnQgbWF4VmVjdG9ycywgY29uc3QgVFZhcmlhYmxlSW5mb0xpc3QmIGluX3Zh
cmlhYmxlcykKLXsKLSAgICBBU1NFUlQobWF4VmVjdG9ycyA+IDApOwotICAgIG1heFJvd3NfID0g
bWF4VmVjdG9yczsKLSAgICB0b3BOb25GdWxsUm93XyA9IDA7Ci0gICAgYm90dG9tTm9uRnVsbFJv
d18gPSBtYXhSb3dzXyAtIDE7Ci0gICAgVFZhcmlhYmxlSW5mb0xpc3QgdmFyaWFibGVzKGluX3Zh
cmlhYmxlcyk7Ci0KLSAgICAvLyBBcyBwZXIgR0xTTCAxLjAxNyBBcHBlbmRpeCBBLCBTZWN0aW9u
IDcgdmFyaWFibGVzIGFyZSBwYWNrZWQgaW4gc3BlY2lmaWMKLSAgICAvLyBvcmRlciBieSB0eXBl
LCB0aGVuIGJ5IHNpemUgb2YgYXJyYXksIGxhcmdlc3QgZmlyc3QuCi0gICAgc3RkOjpzb3J0KHZh
cmlhYmxlcy5iZWdpbigpLCB2YXJpYWJsZXMuZW5kKCksIFRWYXJpYWJsZUluZm9Db21wYXJlcigp
KTsKLSAgICByb3dzXy5jbGVhcigpOwotICAgIHJvd3NfLnJlc2l6ZShtYXhWZWN0b3JzLCAwKTsK
LQotICAgIC8vIFBhY2tzIHRoZSA0IGNvbHVtbiB2YXJpYWJsZXMuCi0gICAgc2l6ZV90IGlpID0g
MDsKLSAgICBmb3IgKDsgaWkgPCB2YXJpYWJsZXMuc2l6ZSgpOyArK2lpKSB7Ci0gICAgICAgIGNv
bnN0IFRWYXJpYWJsZUluZm8mIHZhcmlhYmxlID0gdmFyaWFibGVzW2lpXTsKLSAgICAgICAgaWYg
KEdldE51bUNvbXBvbmVudHNQZXJSb3codmFyaWFibGUudHlwZSkgIT0gNCkgewotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgdG9wTm9uRnVsbFJvd18gKz0gR2V0TnVtUm93
cyh2YXJpYWJsZS50eXBlKSAqIHZhcmlhYmxlLnNpemU7Ci0gICAgfQotCi0gICAgaWYgKHRvcE5v
bkZ1bGxSb3dfID4gbWF4Um93c18pIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIC8vIFBhY2tzIHRoZSAzIGNvbHVtbiB2YXJpYWJsZXMuCi0gICAgaW50IG51bTNDb2x1bW5S
b3dzID0gMDsKLSAgICBmb3IgKDsgaWkgPCB2YXJpYWJsZXMuc2l6ZSgpOyArK2lpKSB7Ci0gICAg
ICAgIGNvbnN0IFRWYXJpYWJsZUluZm8mIHZhcmlhYmxlID0gdmFyaWFibGVzW2lpXTsKLSAgICAg
ICAgaWYgKEdldE51bUNvbXBvbmVudHNQZXJSb3codmFyaWFibGUudHlwZSkgIT0gMykgewotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgbnVtM0NvbHVtblJvd3MgKz0gR2V0
TnVtUm93cyh2YXJpYWJsZS50eXBlKSAqIHZhcmlhYmxlLnNpemU7Ci0gICAgfQotCi0gICAgaWYg
KHRvcE5vbkZ1bGxSb3dfICsgbnVtM0NvbHVtblJvd3MgPiBtYXhSb3dzXykgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZmlsbENvbHVtbnModG9wTm9uRnVsbFJvd18sIG51
bTNDb2x1bW5Sb3dzLCAwLCAzKTsKLQotICAgIC8vIFBhY2tzIHRoZSAyIGNvbHVtbiB2YXJpYWJs
ZXMuCi0gICAgaW50IHRvcDJDb2x1bW5Sb3cgPSB0b3BOb25GdWxsUm93XyArIG51bTNDb2x1bW5S
b3dzOwotICAgIGludCB0d29Db2x1bW5Sb3dzQXZhaWxhYmxlID0gbWF4Um93c18gLSB0b3AyQ29s
dW1uUm93OwotICAgIGludCByb3dzQXZhaWxhYmxlSW5Db2x1bW5zMDEgPSB0d29Db2x1bW5Sb3dz
QXZhaWxhYmxlOwotICAgIGludCByb3dzQXZhaWxhYmxlSW5Db2x1bW5zMjMgPSB0d29Db2x1bW5S
b3dzQXZhaWxhYmxlOwotICAgIGZvciAoOyBpaSA8IHZhcmlhYmxlcy5zaXplKCk7ICsraWkpIHsK
LSAgICAgICAgY29uc3QgVFZhcmlhYmxlSW5mbyYgdmFyaWFibGUgPSB2YXJpYWJsZXNbaWldOwot
ICAgICAgICBpZiAoR2V0TnVtQ29tcG9uZW50c1BlclJvdyh2YXJpYWJsZS50eXBlKSAhPSAyKSB7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpbnQgbnVtUm93cyA9IEdl
dE51bVJvd3ModmFyaWFibGUudHlwZSkgKiB2YXJpYWJsZS5zaXplOwotICAgICAgICBpZiAobnVt
Um93cyA8PSByb3dzQXZhaWxhYmxlSW5Db2x1bW5zMDEpIHsKLSAgICAgICAgICAgIHJvd3NBdmFp
bGFibGVJbkNvbHVtbnMwMSAtPSBudW1Sb3dzOwotICAgICAgICB9IGVsc2UgaWYgKG51bVJvd3Mg
PD0gcm93c0F2YWlsYWJsZUluQ29sdW1uczIzKSB7Ci0gICAgICAgICAgICByb3dzQXZhaWxhYmxl
SW5Db2x1bW5zMjMgLT0gbnVtUm93czsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGludCBudW1Sb3dzVXNlZEluQ29s
dW1uczAxID0KLSAgICAgICAgdHdvQ29sdW1uUm93c0F2YWlsYWJsZSAtIHJvd3NBdmFpbGFibGVJ
bkNvbHVtbnMwMTsKLSAgICBpbnQgbnVtUm93c1VzZWRJbkNvbHVtbnMyMyA9Ci0gICAgICAgIHR3
b0NvbHVtblJvd3NBdmFpbGFibGUgLSByb3dzQXZhaWxhYmxlSW5Db2x1bW5zMjM7Ci0gICAgZmls
bENvbHVtbnModG9wMkNvbHVtblJvdywgbnVtUm93c1VzZWRJbkNvbHVtbnMwMSwgMCwgMik7Ci0g
ICAgZmlsbENvbHVtbnMobWF4Um93c18gLSBudW1Sb3dzVXNlZEluQ29sdW1uczIzLCBudW1Sb3dz
VXNlZEluQ29sdW1uczIzLAotICAgICAgICAgICAgICAgIDIsIDIpOwotCi0gICAgLy8gUGFja3Mg
dGhlIDEgY29sdW1uIHZhcmlhYmxlcy4KLSAgICBmb3IgKDsgaWkgPCB2YXJpYWJsZXMuc2l6ZSgp
OyArK2lpKSB7Ci0gICAgICAgIGNvbnN0IFRWYXJpYWJsZUluZm8mIHZhcmlhYmxlID0gdmFyaWFi
bGVzW2lpXTsKLSAgICAgICAgQVNTRVJUKDEgPT0gR2V0TnVtQ29tcG9uZW50c1BlclJvdyh2YXJp
YWJsZS50eXBlKSk7Ci0gICAgICAgIGludCBudW1Sb3dzID0gR2V0TnVtUm93cyh2YXJpYWJsZS50
eXBlKSAqIHZhcmlhYmxlLnNpemU7Ci0gICAgICAgIGludCBzbWFsbGVzdENvbHVtbiA9IC0xOwot
ICAgICAgICBpbnQgc21hbGxlc3RTaXplID0gbWF4Um93c18gKyAxOwotICAgICAgICBpbnQgdG9w
Um93ID0gLTE7Ci0gICAgICAgIGZvciAoaW50IGNvbHVtbiA9IDA7IGNvbHVtbiA8IGtOdW1Db2x1
bW5zOyArK2NvbHVtbikgewotICAgICAgICAgICAgaW50IHJvdyA9IDA7Ci0gICAgICAgICAgICBp
bnQgc2l6ZSA9IDA7Ci0gICAgICAgICAgICBpZiAoc2VhcmNoQ29sdW1uKGNvbHVtbiwgbnVtUm93
cywgJnJvdywgJnNpemUpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNpemUgPCBzbWFsbGVzdFNp
emUpIHsKLSAgICAgICAgICAgICAgICAgICAgc21hbGxlc3RTaXplID0gc2l6ZTsKLSAgICAgICAg
ICAgICAgICAgICAgc21hbGxlc3RDb2x1bW4gPSBjb2x1bW47Ci0gICAgICAgICAgICAgICAgICAg
IHRvcFJvdyA9IHJvdzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoc21hbGxlc3RDb2x1bW4gPCAwKSB7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBmaWxsQ29sdW1ucyh0b3BSb3csIG51bVJv
d3MsIHNtYWxsZXN0Q29sdW1uLCAxKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQodmFyaWFibGVzLnNp
emUoKSA9PSBpaSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotCi0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZVBhY2tlci5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlUGFja2VyLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5ODcwNjZjYzM3Y2ZkNzQyMzBmYTI1YmMyYWUwZTZj
OTljNmQ4ZjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlUGFja2VyLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVm
IF9WQVJJQUJMRVBBQ0tFUl9JTkNMVURFRF8KLSNkZWZpbmUgX1ZBUklBQkxFUEFDS0VSX0lOQ0xV
REVEXwotCi0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgi
Ci0KLWNsYXNzIFZhcmlhYmxlUGFja2VyIHsKLSBwdWJsaWM6Ci0gICAgLy8gUmV0dXJucyB0cnVl
IGlmIHRoZSBwYXNzZWQgaW4gdmFyaWFibGVzIHBhY2sgaW4gbWF4VmVjdG9ycyBmb2xsb3dpbmcK
LSAgICAvLyB0aGUgcGFja2luZyBydWxlcyBmcm9tIHRoZSBHTFNMIDEuMDE3IHNwZWMsIEFwcGVu
ZGl4IEEsIHNlY3Rpb24gNy4KLSAgICBib29sIENoZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xp
bWl0cygKLSAgICAgICAgaW50IG1heFZlY3RvcnMsCi0gICAgICAgIGNvbnN0IFRWYXJpYWJsZUlu
Zm9MaXN0JiBpbl92YXJpYWJsZXMpOwotCi0gICAgLy8gR2V0cyBob3cgbWFueSBjb21wb25lbnRz
IGluIGEgcm93IGEgZGF0YSB0eXBlIHRha2VzLgotICAgIHN0YXRpYyBpbnQgR2V0TnVtQ29tcG9u
ZW50c1BlclJvdyhTaERhdGFUeXBlIHR5cGUpOwotCi0gICAgLy8gR2V0cyBob3cgbWFueSByb3dz
IGEgZGF0YSB0eXBlIHRha2VzLgotICAgIHN0YXRpYyBpbnQgR2V0TnVtUm93cyhTaERhdGFUeXBl
IHR5cGUpOwotCi0gcHJpdmF0ZToKLSAgICBzdGF0aWMgY29uc3QgaW50IGtOdW1Db2x1bW5zID0g
NDsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQga0NvbHVtbk1hc2sgPSAoMSA8PCBrTnVtQ29s
dW1ucykgLSAxOwotCi0gICAgdW5zaWduZWQgbWFrZUNvbHVtbkZsYWdzKGludCBjb2x1bW4sIGlu
dCBudW1Db21wb25lbnRzUGVyUm93KTsKLSAgICB2b2lkIGZpbGxDb2x1bW5zKGludCB0b3BSb3cs
IGludCBudW1Sb3dzLCBpbnQgY29sdW1uLCBpbnQgbnVtQ29tcG9uZW50c1BlclJvdyk7Ci0gICAg
Ym9vbCBzZWFyY2hDb2x1bW4oaW50IGNvbHVtbiwgaW50IG51bVJvd3MsIGludCogZGVzdFJvdywg
aW50KiBkZXN0U2l6ZSk7Ci0KLSAgICBpbnQgdG9wTm9uRnVsbFJvd187Ci0gICAgaW50IGJvdHRv
bU5vbkZ1bGxSb3dfOwotICAgIGludCBtYXhSb3dzXzsKLSAgICBzdGQ6OnZlY3Rvcjx1bnNpZ25l
ZD4gcm93c187Ci19OwotCi0jZW5kaWYgLy8gX1ZBUklBQkxFUEFDS0VSX0lOQ0xVREVEXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNM
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WZXJzaW9uR0xTTC5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhODJiYjRkYzE3ZDYwNTMzNTRlMWFm
ZTM5NDllYzhlNTdmZmE5ZDEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNM
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwot
Ci0jaW5jbHVkZSAiY29tcGlsZXIvVmVyc2lvbkdMU0wuaCIKLQotc3RhdGljIGNvbnN0IGludCBH
TFNMX1ZFUlNJT05fMTEwID0gMTEwOwotc3RhdGljIGNvbnN0IGludCBHTFNMX1ZFUlNJT05fMTIw
ID0gMTIwOwotCi0vLyBXZSBuZWVkIHRvIHNjYW4gZm9yIHRoZSBmb2xsb3dpbmc6Ci0vLyAxLiAi
aW52YXJpYW50IiBrZXl3b3JkOiBUaGlzIGNhbiBvY2N1ciBpbiBib3RoIC0gdmVydGV4IGFuZCBm
cmFnbWVudCBzaGFkZXJzCi0vLyAgICBidXQgb25seSBhdCB0aGUgZ2xvYmFsIHNjb3BlLgotLy8g
Mi4gImdsX1BvaW50Q29vcmQiIGJ1aWx0LWluIHZhcmlhYmxlOiBUaGlzIGNhbiBvbmx5IG9jY3Vy
IGluIGZyYWdtZW50IHNoYWRlcgotLy8gICAgYnV0IGluc2lkZSBhbnkgc2NvcGUuCi0vLyAzLiBD
YWxsIHRvIGEgbWF0cml4IGNvbnN0cnVjdG9yIHdpdGggYW5vdGhlciBtYXRyaXggYXMgYXJndW1l
bnQuCi0vLyAgICAoVGhlc2UgY29uc3RydWN0b3JzIHdlcmUgcmVzZXJ2ZWQgaW4gR0xTTCB2ZXJz
aW9uIDEuMTAuKQotLy8gNC4gQXJyYXlzIGFzICJvdXQiIGZ1bmN0aW9uIHBhcmFtZXRlcnMuCi0v
LyAgICBHTFNMIHNwZWMgc2VjdGlvbiA2LjEuMTogIldoZW4gY2FsbGluZyBhIGZ1bmN0aW9uLCBl
eHByZXNzaW9ucyB0aGF0IGRvCi0vLyAgICBub3QgZXZhbHVhdGUgdG8gbC12YWx1ZXMgY2Fubm90
IGJlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIGRlY2xhcmVkIGFzCi0vLyAgICBvdXQgb3IgaW5vdXQu
IgotLy8gICAgR0xTTCAxLjEgc2VjdGlvbiA1Ljg6ICJPdGhlciBiaW5hcnkgb3IgdW5hcnkgZXhw
cmVzc2lvbnMsCi0vLyAgICBub24tZGVyZWZlcmVuY2VkIGFycmF5cywgZnVuY3Rpb24gbmFtZXMs
IHN3aXp6bGVzIHdpdGggcmVwZWF0ZWQgZmllbGRzLAotLy8gICAgYW5kIGNvbnN0YW50cyBjYW5u
b3QgYmUgbC12YWx1ZXMuIgotLy8gICAgR0xTTCAxLjIgcmVsYXhlZCB0aGUgcmVzdHJpY3Rpb24g
b24gYXJyYXlzLCBzZWN0aW9uIDUuODogIlZhcmlhYmxlcyB0aGF0Ci0vLyAgICBhcmUgYnVpbHQt
aW4gdHlwZXMsIGVudGlyZSBzdHJ1Y3R1cmVzIG9yIGFycmF5cy4uLiBhcmUgYWxsIGwtdmFsdWVz
LiIKLS8vCi0vLyBUT0RPKGFsb2twKTogVGhlIGZvbGxvd2luZyB0d28gY2FzZXMgb2YgaW52YXJp
YW50IGRlY2FsYXJhdGlvbiBnZXQgbG9zdAotLy8gZHVyaW5nIHBhcnNpbmcgLSB0aGV5IGRvIG5v
dCBnZXQgY2FycmllZCBvdmVyIHRvIHRoZSBpbnRlcm1lZGlhdGUgdHJlZS4KLS8vIEhhbmRsZSB0
aGVzZSBjYXNlczoKLS8vIDEuIFdoZW4gYSBwcmFnbWEgaXMgdXNlZCB0byBmb3JjZSBhbGwgb3V0
cHV0IHZhcmlhYmxlcyB0byBiZSBpbnZhcmlhbnQ6Ci0vLyAgICAtICNwcmFnbWEgU1RER0wgaW52
YXJpYW50KGFsbCkKLS8vIDIuIFdoZW4gYSBwcmV2aW91c2x5IGRlY2FsYXJlZCBvciBidWlsdC1p
biB2YXJpYWJsZSBpcyBtYXJrZWQgaW52YXJpYW50OgotLy8gICAgLSBpbnZhcmlhbnQgZ2xfUG9z
aXRpb247Ci0vLyAgICAtIHZhcnlpbmcgdmVjMyBjb2xvcjsgaW52YXJpYW50IGNvbG9yOwotLy8K
LVRWZXJzaW9uR0xTTDo6VFZlcnNpb25HTFNMKFNoU2hhZGVyVHlwZSB0eXBlKQotICAgIDogbVNo
YWRlclR5cGUodHlwZSksCi0gICAgICBtVmVyc2lvbihHTFNMX1ZFUlNJT05fMTEwKQotewotfQot
Ci12b2lkIFRWZXJzaW9uR0xTTDo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKLXsK
LSAgICBpZiAobm9kZS0+Z2V0U3ltYm9sKCkgPT0gImdsX1BvaW50Q29vcmQiKQotICAgICAgICB1
cGRhdGVWZXJzaW9uKEdMU0xfVkVSU0lPTl8xMjApOwotfQotCi12b2lkIFRWZXJzaW9uR0xTTDo6
dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKikKLXsKLX0KLQotYm9vbCBU
VmVyc2lvbkdMU0w6OnZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5KikKLXsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBUVmVyc2lvbkdMU0w6OnZpc2l0VW5hcnkoVmlzaXQsIFRJ
bnRlcm1VbmFyeSopCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVFZlcnNpb25HTFNM
Ojp2aXNpdFNlbGVjdGlvbihWaXNpdCwgVEludGVybVNlbGVjdGlvbiopCi17Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgVFZlcnNpb25HTFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVElu
dGVybUFnZ3JlZ2F0ZSogbm9kZSkKLXsKLSAgICBib29sIHZpc2l0Q2hpbGRyZW4gPSB0cnVlOwot
Ci0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKSB7Ci0gICAgICBjYXNlIEVPcFNlcXVlbmNlOgot
ICAgICAgICAvLyBXZSBuZWVkIHRvIHZpc2l0IHNlcXVlbmNlIGNoaWxkcmVuIHRvIGdldCB0byBn
bG9iYWwgb3IgaW5uZXIgc2NvcGUuCi0gICAgICAgIHZpc2l0Q2hpbGRyZW4gPSB0cnVlOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wRGVjbGFyYXRpb246IHsKLSAgICAgICAgY29uc3Qg
VEludGVybVNlcXVlbmNlJiBzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAg
IFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gc2VxdWVuY2UuZnJvbnQoKS0+Z2V0QXNUeXBlZCgpLT5n
ZXRRdWFsaWZpZXIoKTsKLSAgICAgICAgaWYgKChxdWFsaWZpZXIgPT0gRXZxSW52YXJpYW50VmFy
eWluZ0luKSB8fAotICAgICAgICAgICAgKHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5aW5n
T3V0KSkgewotICAgICAgICAgICAgdXBkYXRlVmVyc2lvbihHTFNMX1ZFUlNJT05fMTIwKTsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgRU9wUGFyYW1ldGVy
czogewotICAgICAgICBjb25zdCBUSW50ZXJtU2VxdWVuY2UmIHBhcmFtcyA9IG5vZGUtPmdldFNl
cXVlbmNlKCk7Ci0gICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBp
dGVyID0gcGFyYW1zLmJlZ2luKCk7Ci0gICAgICAgICAgICAgaXRlciAhPSBwYXJhbXMuZW5kKCk7
ICsraXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgVEludGVybVR5cGVkKiBwYXJh
bSA9ICgqaXRlciktPmdldEFzVHlwZWQoKTsKLSAgICAgICAgICAgIGlmIChwYXJhbS0+aXNBcnJh
eSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVy
ID0gcGFyYW0tPmdldFF1YWxpZmllcigpOwotICAgICAgICAgICAgICAgIGlmICgocXVhbGlmaWVy
ID09IEV2cU91dCkgfHwgKHF1YWxpZmllciA9PSAgRXZxSW5PdXQpKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlVmVyc2lvbihHTFNMX1ZFUlNJT05fMTIwKTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIEZ1bGx5IHByb2Nlc3NlZC4gTm8gbmVlZCB0byB2
aXNpdCBjaGlsZHJlbi4KLSAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOwotICAgICAgICBi
cmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MjoKLSAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0TWF0MzoKLSAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0NDogewotICAgICAg
ICBjb25zdCBUSW50ZXJtU2VxdWVuY2UmIHNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsK
LSAgICAgICAgaWYgKHNlcXVlbmNlLnNpemUoKSA9PSAxKSB7Ci0gICAgICAgICAgVEludGVybVR5
cGVkKiB0eXBlZCA9IHNlcXVlbmNlLmZyb250KCktPmdldEFzVHlwZWQoKTsKLSAgICAgICAgICBp
ZiAodHlwZWQgJiYgdHlwZWQtPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgIHVwZGF0ZVZlcnNp
b24oR0xTTF9WRVJTSU9OXzEyMCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgfQotCi0gICAgICBkZWZhdWx0OiBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdmlzaXRDaGlsZHJlbjsKLX0KLQotYm9vbCBUVmVyc2lvbkdMU0w6OnZpc2l0TG9vcChWaXNp
dCwgVEludGVybUxvb3AqKQotewotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFRWZXJzaW9u
R0xTTDo6dmlzaXRCcmFuY2goVmlzaXQsIFRJbnRlcm1CcmFuY2gqKQotewotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIFRWZXJzaW9uR0xTTDo6dXBkYXRlVmVyc2lvbihpbnQgdmVyc2lvbikK
LXsKLSAgICBtVmVyc2lvbiA9IHN0ZDo6bWF4KHZlcnNpb24sIG1WZXJzaW9uKTsKLX0KLQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNM
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWMxY2IxYWI5N2I5ZGU1ZWQ0N2E5MTA0OGIy
ZTZkMzNiZWM3ZWJhNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuaAor
KysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5k
ZWYgQ09NUElMRVJfVkVSU0lPTkdMU0xfSF8KLSNkZWZpbmUgQ09NUElMRVJfVkVSU0lPTkdMU0xf
SF8KLQotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgotI2luY2x1ZGUgImNvbXBpbGVy
L2ludGVybWVkaWF0ZS5oIgotCi0vLyBUcmF2ZXJzZXMgdGhlIGludGVybWVkaWF0ZSB0cmVlIHRv
IHJldHVybiB0aGUgbWluaW11bSBHTFNMIHZlcnNpb24KLS8vIHJlcXVpcmVkIHRvIGxlZ2FsbHkg
YWNjZXNzIGFsbCBidWlsdC1pbiBmZWF0dXJlcyB1c2VkIGluIHRoZSBzaGFkZXIuCi0vLyBHTFNM
IDEuMSB3aGljaCBpcyBtYW5kYXRlZCBieSBPcGVuR0wgMi4wIHByb3ZpZGVzOgotLy8gICAtICN2
ZXJzaW9uIGFuZCAjZXh0ZW5zaW9uIHRvIGRlY2xhcmUgdmVyc2lvbiBhbmQgZXh0ZW5zaW9ucy4K
LS8vICAgLSBidWlsdC1pbiBmdW5jdGlvbnMgcmVmcmFjdCwgZXhwLCBhbmQgbG9nLgotLy8gICAt
IHVwZGF0ZWQgc3RlcCgpIHRvIGNvbXBhcmUgeCA8IGVkZ2UgaW5zdGVhZCBvZiB4IDw9IGVkZ2Uu
Ci0vLyBHTFNMIDEuMiB3aGljaCBpcyBtYW5kYXRlZCBieSBPcGVuR0wgMi4xIHByb3ZpZGVzOgot
Ly8gICAtIG1hbnkgY2hhbmdlcyB0byByZWR1Y2UgZGlmZmVyZW5jZXMgd2hlbiBjb21wYXJlZCB0
byB0aGUgRVMgc3BlY2lmaWNhdGlvbi4KLS8vICAgLSBpbnZhcmlhbnQga2V5d29yZCBhbmQgaXRz
IHN1cHBvcnQuCi0vLyAgIC0gYysrIHN0eWxlIG5hbWUgaGlkaW5nIHJ1bGVzLgotLy8gICAtIGJ1
aWx0LWluIHZhcmlhYmxlIGdsX1BvaW50Q29vcmQgZm9yIGZyYWdtZW50IHNoYWRlcnMuCi0vLyAg
IC0gbWF0cml4IGNvbnN0cnVjdG9ycyB0YWtpbmcgbWF0cml4IGFzIGFyZ3VtZW50LgotLy8gICAt
IGFycmF5IGFzICJvdXQiIGZ1bmN0aW9uIHBhcmFtZXRlcnMKLS8vCi1jbGFzcyBUVmVyc2lvbkdM
U0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7Ci1wdWJsaWM6Ci0gICAgVFZlcnNpb25HTFNM
KFNoU2hhZGVyVHlwZSB0eXBlKTsKLQotICAgIC8vIFJldHVybnMgMTIwIGlmIHRoZSBmb2xsb3dp
bmcgaXMgdXNlZCB0aGUgc2hhZGVyOgotICAgIC8vIC0gImludmFyaWFudCIsCi0gICAgLy8gLSAi
Z2xfUG9pbnRDb29yZCIsCi0gICAgLy8gLSBtYXRyaXgvbWF0cml4IGNvbnN0cnVjdG9ycwotICAg
IC8vIC0gYXJyYXkgIm91dCIgcGFyYW1ldGVycwotICAgIC8vIEVsc2UgMTEwIGlzIHJldHVybmVk
LgotICAgIGludCBnZXRWZXJzaW9uKCkgeyByZXR1cm4gbVZlcnNpb247IH0KLQotICAgIHZpcnR1
YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7Ci0gICAgdmlydHVhbCB2b2lkIHZp
c2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiopOwotICAgIHZpcnR1YWwgYm9v
bCB2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSopOwotICAgIHZpcnR1YWwgYm9vbCB2
aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkqKTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRT
ZWxlY3Rpb24oVmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlz
aXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKLSAgICB2aXJ0dWFsIGJvb2wg
dmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCopOwotICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJy
YW5jaChWaXNpdCwgVEludGVybUJyYW5jaCopOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCB1cGRh
dGVWZXJzaW9uKGludCB2ZXJzaW9uKTsKLQotcHJpdmF0ZToKLSAgICBTaFNoYWRlclR5cGUgbVNo
YWRlclR5cGU7Ci0gICAgaW50IG1WZXJzaW9uOwotfTsKLQotI2VuZGlmICAvLyBDT01QSUxFUl9W
RVJTSU9OR0xTTF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL2RlYnVnLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9k
ZWJ1Zy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4ZDU1YWNhZjY3YWZhMmUx
MDI4OTVjNDY5NGM1OTc5NWQ3N2I1MzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVn
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0K
LS8vIGRlYnVnLmNwcDogRGVidWdnaW5nIHV0aWxpdGllcy4KLQotI2luY2x1ZGUgImNvbXBpbGVy
L2RlYnVnLmgiCi0KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0j
aW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgotI2luY2x1ZGUgImNv
bXBpbGVyL1BhcnNlQ29udGV4dC5oIgotCi0jaWZkZWYgVFJBQ0VfRU5BQkxFRAotc3RhdGljIGNv
bnN0IGludCBrVHJhY2VCdWZmZXJMZW4gPSAxMDI0OwotCi1leHRlcm4gIkMiIHsKLXZvaWQgVHJh
Y2UoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pIHsKLSAgICBpZiAoIWZvcm1hdCkgcmV0dXJuOwot
Ci0gICAgVFBhcnNlQ29udGV4dCogcGFyc2VDb250ZXh0ID0gR2V0R2xvYmFsUGFyc2VDb250ZXh0
KCk7Ci0gICAgaWYgKHBhcnNlQ29udGV4dCkgewotICAgICAgICBjaGFyIGJ1ZltrVHJhY2VCdWZm
ZXJMZW5dOwotICAgICAgICB2YV9saXN0IGFyZ3M7Ci0gICAgICAgIHZhX3N0YXJ0KGFyZ3MsIGZv
cm1hdCk7Ci0gICAgICAgIHZzbnByaW50ZihidWYsIGtUcmFjZUJ1ZmZlckxlbiwgZm9ybWF0LCBh
cmdzKTsKLSAgICAgICAgdmFfZW5kKGFyZ3MpOwotCi0gICAgICAgIHBhcnNlQ29udGV4dC0+dHJh
Y2UoYnVmKTsKLSAgICB9Ci19Ci19ICAvLyBleHRlcm4gIkMiCi0jZW5kaWYgIC8vIFRSQUNFX0VO
QUJMRUQKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L2RlYnVnLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2EzNzE1MTZhZjBmZWVjNjFmNDZlZTExODIx
YmEyOGQzNTFkZDQ5ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuaAorKysgL2Rl
di9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIGRlYnVnLmg6
IERlYnVnZ2luZyB1dGlsaXRpZXMuCi0KLSNpZm5kZWYgQ09NUElMRVJfREVCVUdfSF8KLSNkZWZp
bmUgQ09NUElMRVJfREVCVUdfSF8KLQotI2luY2x1ZGUgPGFzc2VydC5oPgotCi0jaWZkZWYgX0RF
QlVHCi0jZGVmaW5lIFRSQUNFX0VOQUJMRUQgIC8vIGRlZmluZSB0byBlbmFibGUgZGVidWcgbWVz
c2FnZSB0cmFjaW5nCi0jZW5kaWYgIC8vIF9ERUJVRwotCi0vLyBPdXRwdXRzIHRleHQgdG8gdGhl
IGRlYnVnIGxvZwotI2lmZGVmIFRSQUNFX0VOQUJMRUQKLQotI2lmZGVmICBfX2NwbHVzcGx1cwot
ZXh0ZXJuICJDIiB7Ci0jZW5kaWYgIC8vIF9fY3BsdXNwbHVzCi12b2lkIFRyYWNlKGNvbnN0IGNo
YXIqIGZvcm1hdCwgLi4uKTsKLSNpZmRlZiAgX19jcGx1c3BsdXMKLX0KLSNlbmRpZiAgLy8gX19j
cGx1c3BsdXMKLQotI2Vsc2UgICAvLyBUUkFDRV9FTkFCTEVECi0KLSNkZWZpbmUgVHJhY2UoLi4u
KSAoKHZvaWQpMCkKLQotI2VuZGlmICAvLyBUUkFDRV9FTkFCTEVECi0KLS8vIEEgbWFjcm8gYXNz
ZXJ0aW5nIGEgY29uZGl0aW9uIGFuZCBvdXRwdXR0aW5nIGZhaWx1cmVzIHRvIHRoZSBkZWJ1ZyBs
b2cKLSNkZWZpbmUgQVNTRVJUKGV4cHJlc3Npb24pIGRvIHsgXAotICAgIGlmKCEoZXhwcmVzc2lv
bikpIFwKLSAgICAgICAgVHJhY2UoIkFzc2VydCBmYWlsZWQ6ICVzKCVkKTogIiNleHByZXNzaW9u
IlxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7IFwKLSAgICBhc3NlcnQoZXhwcmVzc2lvbik7
IFwKLX0gd2hpbGUoMCkKLQotI2RlZmluZSBVTklNUExFTUVOVEVEKCkgZG8geyBcCi0gICAgVHJh
Y2UoIlVuaW1wbGVtZW50ZWQgaW52b2tlZDogJXMoJWQpXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElO
RV9fKTsgXAotICAgIGFzc2VydChmYWxzZSk7IFwKLX0gd2hpbGUoMCkKLQotI2RlZmluZSBVTlJF
QUNIQUJMRSgpIGRvIHsgXAotICAgIFRyYWNlKCJVbnJlYWNoYWJsZSByZWFjaGVkOiAlcyglZClc
biIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOyBcCi0gICAgYXNzZXJ0KGZhbHNlKTsgXAotfSB3
aGlsZSgwKQotCi0jZW5kaWYgICAvLyBDT01QSUxFUl9ERUJVR19IXwotCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdy
YXBoLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9E
ZXBlbmRlbmN5R3JhcGguY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTY2MWQ2
NzY3ODlhNjkzY2IyNjc4NDQwMWRkZDE3MDU1NmUwODM5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTcg
KzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzE4KQot
Ci0jaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCi0jaW5jbHVk
ZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIgotCi1URGVwZW5k
ZW5jeUdyYXBoOjpURGVwZW5kZW5jeUdyYXBoKFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlKQotewot
ICAgIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpidWlsZChpbnRlcm1Ob2RlLCB0aGlzKTsKLX0K
LQotVERlcGVuZGVuY3lHcmFwaDo6flREZXBlbmRlbmN5R3JhcGgoKQotewotICAgIGZvciAoVEdy
YXBoTm9kZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1BbGxOb2Rlcy5iZWdpbigpOyBp
dGVyICE9IG1BbGxOb2Rlcy5lbmQoKTsgKytpdGVyKQotICAgIHsKLSAgICAgICAgVEdyYXBoTm9k
ZSogbm9kZSA9ICppdGVyOwotICAgICAgICBkZWxldGUgbm9kZTsKLSAgICB9Ci19Ci0KLVRHcmFw
aEFyZ3VtZW50KiBURGVwZW5kZW5jeUdyYXBoOjpjcmVhdGVBcmd1bWVudChUSW50ZXJtQWdncmVn
YXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50TnVtYmVyKQotewotICAgIFRHcmFwaEFyZ3Vt
ZW50KiBhcmd1bWVudCA9IG5ldyBUR3JhcGhBcmd1bWVudChpbnRlcm1GdW5jdGlvbkNhbGwsIGFy
Z3VtZW50TnVtYmVyKTsKLSAgICBtQWxsTm9kZXMucHVzaF9iYWNrKGFyZ3VtZW50KTsKLSAgICBy
ZXR1cm4gYXJndW1lbnQ7Ci19Ci0KLVRHcmFwaEZ1bmN0aW9uQ2FsbCogVERlcGVuZGVuY3lHcmFw
aDo6Y3JlYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2Fs
bCkKLXsKLSAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCA9IG5ldyBUR3JhcGhG
dW5jdGlvbkNhbGwoaW50ZXJtRnVuY3Rpb25DYWxsKTsKLSAgICBtQWxsTm9kZXMucHVzaF9iYWNr
KGZ1bmN0aW9uQ2FsbCk7Ci0gICAgaWYgKGZ1bmN0aW9uQ2FsbC0+Z2V0SW50ZXJtRnVuY3Rpb25D
YWxsKCktPmlzVXNlckRlZmluZWQoKSkKLSAgICAgICAgbVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxs
cy5wdXNoX2JhY2soZnVuY3Rpb25DYWxsKTsKLSAgICByZXR1cm4gZnVuY3Rpb25DYWxsOwotfQot
Ci1UR3JhcGhTeW1ib2wqIFREZXBlbmRlbmN5R3JhcGg6OmdldE9yQ3JlYXRlU3ltYm9sKFRJbnRl
cm1TeW1ib2wqIGludGVybVN5bWJvbCkKLXsKLSAgICBUU3ltYm9sSWRNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ZXIgPSBtU3ltYm9sSWRNYXAuZmluZChpbnRlcm1TeW1ib2wtPmdldElkKCkpOwotCi0g
ICAgVEdyYXBoU3ltYm9sKiBzeW1ib2wgPSBOVUxMOwotCi0gICAgaWYgKGl0ZXIgIT0gbVN5bWJv
bElkTWFwLmVuZCgpKSB7Ci0gICAgICAgIFRTeW1ib2xJZFBhaXIgcGFpciA9ICppdGVyOwotICAg
ICAgICBzeW1ib2wgPSBwYWlyLnNlY29uZDsKLSAgICB9IGVsc2UgewotICAgICAgICBzeW1ib2wg
PSBuZXcgVEdyYXBoU3ltYm9sKGludGVybVN5bWJvbCk7Ci0gICAgICAgIG1BbGxOb2Rlcy5wdXNo
X2JhY2soc3ltYm9sKTsKLQotICAgICAgICBUU3ltYm9sSWRQYWlyIHBhaXIoaW50ZXJtU3ltYm9s
LT5nZXRJZCgpLCBzeW1ib2wpOwotICAgICAgICBtU3ltYm9sSWRNYXAuaW5zZXJ0KHBhaXIpOwot
Ci0gICAgICAgIC8vIFdlIHNhdmUgYWxsIHNhbXBsZXIgc3ltYm9scyBpbiBhIGNvbGxlY3Rpb24s
IHNvIHdlIGNhbiBzdGFydCBncmFwaCB0cmF2ZXJzYWxzIGZyb20gdGhlbSBxdWlja2x5LgotICAg
ICAgICBpZiAoSXNTYW1wbGVyKGludGVybVN5bWJvbC0+Z2V0QmFzaWNUeXBlKCkpKQotICAgICAg
ICAgICAgbVNhbXBsZXJTeW1ib2xzLnB1c2hfYmFjayhzeW1ib2wpOwotICAgIH0KLQotICAgIHJl
dHVybiBzeW1ib2w7Ci19Ci0KLVRHcmFwaFNlbGVjdGlvbiogVERlcGVuZGVuY3lHcmFwaDo6Y3Jl
YXRlU2VsZWN0aW9uKFRJbnRlcm1TZWxlY3Rpb24qIGludGVybVNlbGVjdGlvbikKLXsKLSAgICBU
R3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbiA9IG5ldyBUR3JhcGhTZWxlY3Rpb24oaW50ZXJtU2Vs
ZWN0aW9uKTsKLSAgICBtQWxsTm9kZXMucHVzaF9iYWNrKHNlbGVjdGlvbik7Ci0gICAgcmV0dXJu
IHNlbGVjdGlvbjsKLX0KLQotVEdyYXBoTG9vcCogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlTG9v
cChUSW50ZXJtTG9vcCogaW50ZXJtTG9vcCkKLXsKLSAgICBUR3JhcGhMb29wKiBsb29wID0gbmV3
IFRHcmFwaExvb3AoaW50ZXJtTG9vcCk7Ci0gICAgbUFsbE5vZGVzLnB1c2hfYmFjayhsb29wKTsK
LSAgICByZXR1cm4gbG9vcDsKLX0KLQotVEdyYXBoTG9naWNhbE9wKiBURGVwZW5kZW5jeUdyYXBo
OjpjcmVhdGVMb2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJtTG9naWNhbE9wKQotewotICAg
IFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wID0gbmV3IFRHcmFwaExvZ2ljYWxPcChpbnRlcm1M
b2dpY2FsT3ApOwotICAgIG1BbGxOb2Rlcy5wdXNoX2JhY2sobG9naWNhbE9wKTsKLSAgICByZXR1
cm4gbG9naWNhbE9wOwotfQotCi1jb25zdCBjaGFyKiBUR3JhcGhMb2dpY2FsT3A6OmdldE9wU3Ry
aW5nKCkgY29uc3QKLXsKLSAgICBjb25zdCBjaGFyKiBvcFN0cmluZyA9IE5VTEw7Ci0gICAgc3dp
dGNoIChnZXRJbnRlcm1Mb2dpY2FsT3AoKS0+Z2V0T3AoKSkgewotICAgICAgICBjYXNlIEVPcExv
Z2ljYWxBbmQ6IG9wU3RyaW5nID0gImFuZCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcExvZ2lj
YWxPcjogb3BTdHJpbmcgPSAib3IiOyBicmVhazsKLSAgICAgICAgZGVmYXVsdDogb3BTdHJpbmcg
PSAidW5rbm93biI7IGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gb3BTdHJpbmc7Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVw
ZW5kZW5jeUdyYXBoLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVw
Z3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVh
OWMzNWQwMGI3YTMxZDkyNTcxMWVmMDVlODUyOGQ0NGYxZTc2OTIuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oCisrKyAvZGV2L251bGwKQEAgLTEs
MjEyICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX0RFUEdSQVBIX0RF
UEVOREVOQ1lfR1JBUEhfSAotI2RlZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dS
QVBIX0gKLQotI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotCi0jaW5jbHVkZSA8
c2V0PgotI2luY2x1ZGUgPHN0YWNrPgotCi1jbGFzcyBUR3JhcGhOb2RlOwotY2xhc3MgVEdyYXBo
UGFyZW50Tm9kZTsKLWNsYXNzIFRHcmFwaEFyZ3VtZW50OwotY2xhc3MgVEdyYXBoRnVuY3Rpb25D
YWxsOwotY2xhc3MgVEdyYXBoU3ltYm9sOwotY2xhc3MgVEdyYXBoU2VsZWN0aW9uOwotY2xhc3Mg
VEdyYXBoTG9vcDsKLWNsYXNzIFRHcmFwaExvZ2ljYWxPcDsKLWNsYXNzIFREZXBlbmRlbmN5R3Jh
cGhUcmF2ZXJzZXI7Ci1jbGFzcyBURGVwZW5kZW5jeUdyYXBoT3V0cHV0OwotCi10eXBlZGVmIHN0
ZDo6c2V0PFRHcmFwaE5vZGUqPiBUR3JhcGhOb2RlU2V0OwotdHlwZWRlZiBzdGQ6OnZlY3RvcjxU
R3JhcGhOb2RlKj4gVEdyYXBoTm9kZVZlY3RvcjsKLXR5cGVkZWYgc3RkOjp2ZWN0b3I8VEdyYXBo
U3ltYm9sKj4gVEdyYXBoU3ltYm9sVmVjdG9yOwotdHlwZWRlZiBzdGQ6OnZlY3RvcjxUR3JhcGhG
dW5jdGlvbkNhbGwqPiBURnVuY3Rpb25DYWxsVmVjdG9yOwotCi0vLwotLy8gQmFzZSBjbGFzcyBm
b3IgYWxsIGRlcGVuZGVuY3kgZ3JhcGggbm9kZXMuCi0vLwotY2xhc3MgVEdyYXBoTm9kZSB7Ci1w
dWJsaWM6Ci0gICAgVEdyYXBoTm9kZShUSW50ZXJtTm9kZSogbm9kZSkgOiBpbnRlcm1Ob2RlKG5v
ZGUpIHt9Ci0gICAgdmlydHVhbCB+VEdyYXBoTm9kZSgpIHt9Ci0gICAgdmlydHVhbCB2b2lkIHRy
YXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKLXByb3Rl
Y3RlZDoKLSAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKLX07Ci0KLS8vCi0vLyBCYXNlIGNs
YXNzIGZvciBkZXBlbmRlbmN5IGdyYXBoIG5vZGVzIHRoYXQgbWF5IGhhdmUgY2hpbGRyZW4uCi0v
LwotY2xhc3MgVEdyYXBoUGFyZW50Tm9kZSA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKLXB1YmxpYzoK
LSAgICBUR3JhcGhQYXJlbnROb2RlKFRJbnRlcm1Ob2RlKiBub2RlKSA6IFRHcmFwaE5vZGUobm9k
ZSkge30KLSAgICB2aXJ0dWFsIH5UR3JhcGhQYXJlbnROb2RlKCkge30KLSAgICB2b2lkIGFkZERl
cGVuZGVudE5vZGUoVEdyYXBoTm9kZSogbm9kZSkgeyBpZiAobm9kZSAhPSB0aGlzKSBtRGVwZW5k
ZW50Tm9kZXMuaW5zZXJ0KG5vZGUpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBl
bmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKLXByaXZhdGU6Ci0gICAgVEdy
YXBoTm9kZVNldCBtRGVwZW5kZW50Tm9kZXM7Ci19OwotCi0vLwotLy8gSGFuZGxlIGZ1bmN0aW9u
IGNhbGwgYXJndW1lbnRzLgotLy8KLWNsYXNzIFRHcmFwaEFyZ3VtZW50IDogcHVibGljIFRHcmFw
aFBhcmVudE5vZGUgewotcHVibGljOgotICAgIFRHcmFwaEFyZ3VtZW50KFRJbnRlcm1BZ2dyZWdh
dGUqIGludGVybUZ1bmN0aW9uQ2FsbCwgaW50IGFyZ3VtZW50TnVtYmVyKQotICAgICAgICA6IFRH
cmFwaFBhcmVudE5vZGUoaW50ZXJtRnVuY3Rpb25DYWxsKQotICAgICAgICAsIG1Bcmd1bWVudE51
bWJlcihhcmd1bWVudE51bWJlcikge30KLSAgICB2aXJ0dWFsIH5UR3JhcGhBcmd1bWVudCgpIHt9
Ci0gICAgY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogZ2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkgY29u
c3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsgfQotICAgIGludCBnZXRB
cmd1bWVudE51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1Bcmd1bWVudE51bWJlcjsgfQotICAgIHZp
cnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZl
cnNlcik7Ci1wcml2YXRlOgotICAgIGludCBtQXJndW1lbnROdW1iZXI7Ci19OwotCi0vLwotLy8g
SGFuZGxlIGZ1bmN0aW9uIGNhbGxzLgotLy8KLWNsYXNzIFRHcmFwaEZ1bmN0aW9uQ2FsbCA6IHB1
YmxpYyBUR3JhcGhQYXJlbnROb2RlIHsKLXB1YmxpYzoKLSAgICBUR3JhcGhGdW5jdGlvbkNhbGwo
VEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKQotICAgICAgICA6IFRHcmFwaFBh
cmVudE5vZGUoaW50ZXJtRnVuY3Rpb25DYWxsKSB7fQotICAgIHZpcnR1YWwgflRHcmFwaEZ1bmN0
aW9uQ2FsbCgpIHt9Ci0gICAgY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogZ2V0SW50ZXJtRnVuY3Rp
b25DYWxsKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsgfQot
ICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFw
aFRyYXZlcnNlcik7Ci19OwotCi0vLwotLy8gSGFuZGxlIHN5bWJvbHMuCi0vLwotY2xhc3MgVEdy
YXBoU3ltYm9sIDogcHVibGljIFRHcmFwaFBhcmVudE5vZGUgewotcHVibGljOgotICAgIFRHcmFw
aFN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wpIDogVEdyYXBoUGFyZW50Tm9kZShp
bnRlcm1TeW1ib2wpIHt9Ci0gICAgdmlydHVhbCB+VEdyYXBoU3ltYm9sKCkge30KLSAgICBjb25z
dCBUSW50ZXJtU3ltYm9sKiBnZXRJbnRlcm1TeW1ib2woKSBjb25zdCB7IHJldHVybiBpbnRlcm1O
b2RlLT5nZXRBc1N5bWJvbE5vZGUoKTsgfQotICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVw
ZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Ci19OwotCi0vLwotLy8gSGFu
ZGxlIGlmIHN0YXRlbWVudHMgYW5kIHRlcm5hcnkgb3BlcmF0b3JzLgotLy8KLWNsYXNzIFRHcmFw
aFNlbGVjdGlvbiA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKLXB1YmxpYzoKLSAgICBUR3JhcGhTZWxl
Y3Rpb24oVEludGVybVNlbGVjdGlvbiogaW50ZXJtU2VsZWN0aW9uKSA6IFRHcmFwaE5vZGUoaW50
ZXJtU2VsZWN0aW9uKSB7fQotICAgIHZpcnR1YWwgflRHcmFwaFNlbGVjdGlvbigpIHt9Ci0gICAg
Y29uc3QgVEludGVybVNlbGVjdGlvbiogZ2V0SW50ZXJtU2VsZWN0aW9uKCkgY29uc3QgeyByZXR1
cm4gaW50ZXJtTm9kZS0+Z2V0QXNTZWxlY3Rpb25Ob2RlKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOwotfTsK
LQotLy8KLS8vIEhhbmRsZSBmb3IsIGRvLXdoaWxlLCBhbmQgd2hpbGUgbG9vcHMuCi0vLwotY2xh
c3MgVEdyYXBoTG9vcCA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKLXB1YmxpYzoKLSAgICBUR3JhcGhM
b29wKFRJbnRlcm1Mb29wKiBpbnRlcm1Mb29wKSA6IFRHcmFwaE5vZGUoaW50ZXJtTG9vcCkge30K
LSAgICB2aXJ0dWFsIH5UR3JhcGhMb29wKCkge30KLSAgICBjb25zdCBUSW50ZXJtTG9vcCogZ2V0
SW50ZXJtTG9vcCgpIGNvbnN0IHsgcmV0dXJuIGludGVybU5vZGUtPmdldEFzTG9vcE5vZGUoKTsg
fQotICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBn
cmFwaFRyYXZlcnNlcik7Ci19OwotCi0vLwotLy8gSGFuZGxlIGxvZ2ljYWwgYW5kLCBvci4KLS8v
Ci1jbGFzcyBUR3JhcGhMb2dpY2FsT3AgOiBwdWJsaWMgVEdyYXBoTm9kZSB7Ci1wdWJsaWM6Ci0g
ICAgVEdyYXBoTG9naWNhbE9wKFRJbnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxPcCkgOiBUR3Jh
cGhOb2RlKGludGVybUxvZ2ljYWxPcCkge30KLSAgICB2aXJ0dWFsIH5UR3JhcGhMb2dpY2FsT3Ao
KSB7fQotICAgIGNvbnN0IFRJbnRlcm1CaW5hcnkqIGdldEludGVybUxvZ2ljYWxPcCgpIGNvbnN0
IHsgcmV0dXJuIGludGVybU5vZGUtPmdldEFzQmluYXJ5Tm9kZSgpOyB9Ci0gICAgY29uc3QgY2hh
ciogZ2V0T3BTdHJpbmcoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVu
ZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOwotfTsKLQotLy8KLS8vIEEgZGVw
ZW5kZW5jeSBncmFwaCBvZiBzeW1ib2xzLCBmdW5jdGlvbiBjYWxscywgY29uZGl0aW9ucyBldGMu
Ci0vLwotLy8gVGhpcyBjbGFzcyBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdG8gdGhlIGVudHJ5IHBv
aW50cyBvZiB0aGUgZGVwZW5kZW5jeSBncmFwaC4KLS8vCi0vLyBEZXBlbmRlbmN5IGdyYXBoIG5v
ZGVzIHNob3VsZCBiZSBjcmVhdGVkIGJ5IHVzaW5nIG9uZSBvZiB0aGUgcHJvdmlkZWQgImNyZWF0
ZS4uLiIgbWV0aG9kcy4KLS8vIFRoaXMgY2xhc3MgKGFuZCBub2JvZHkgZWxzZSkgbWFuYWdlcyB0
aGUgbWVtb3J5IG9mIHRoZSBjcmVhdGVkIG5vZGVzLgotLy8gTm9kZXMgbWF5IG5vdCBiZSByZW1v
dmVkIGFmdGVyIGJlaW5nIGFkZGVkLCBzbyBhbGwgY3JlYXRlZCBub2RlcyB3aWxsIGV4aXN0IHdo
aWxlIHRoZQotLy8gVERlcGVuZGVuY3lHcmFwaCBpbnN0YW5jZSBleGlzdHMuCi0vLwotY2xhc3Mg
VERlcGVuZGVuY3lHcmFwaCB7Ci1wdWJsaWM6Ci0gICAgVERlcGVuZGVuY3lHcmFwaChUSW50ZXJt
Tm9kZSogaW50ZXJtTm9kZSk7Ci0gICAgflREZXBlbmRlbmN5R3JhcGgoKTsKLSAgICBUR3JhcGhO
b2RlVmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1BbGxOb2Rl
cy5iZWdpbigpOyB9Ci0gICAgVEdyYXBoTm9kZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kKCkg
Y29uc3QgeyByZXR1cm4gbUFsbE5vZGVzLmVuZCgpOyB9Ci0KLSAgICBUR3JhcGhTeW1ib2xWZWN0
b3I6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luU2FtcGxlclN5bWJvbHMoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1TYW1wbGVyU3ltYm9scy5iZWdpbigpOwotICAgIH0KLQotICAgIFRHcmFw
aFN5bWJvbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kU2FtcGxlclN5bWJvbHMoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1TYW1wbGVyU3ltYm9scy5lbmQoKTsKLSAgICB9Ci0KLSAg
ICBURnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpblVzZXJEZWZpbmVkRnVu
Y3Rpb25DYWxscygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbVVzZXJEZWZpbmVkRnVu
Y3Rpb25DYWxscy5iZWdpbigpOwotICAgIH0KLQotICAgIFRGdW5jdGlvbkNhbGxWZWN0b3I6OmNv
bnN0X2l0ZXJhdG9yIGVuZFVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gbVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscy5lbmQoKTsKLSAgICB9Ci0K
LSAgICBUR3JhcGhBcmd1bWVudCogY3JlYXRlQXJndW1lbnQoVEludGVybUFnZ3JlZ2F0ZSogaW50
ZXJtRnVuY3Rpb25DYWxsLCBpbnQgYXJndW1lbnROdW1iZXIpOwotICAgIFRHcmFwaEZ1bmN0aW9u
Q2FsbCogY3JlYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9u
Q2FsbCk7Ci0gICAgVEdyYXBoU3ltYm9sKiBnZXRPckNyZWF0ZVN5bWJvbChUSW50ZXJtU3ltYm9s
KiBpbnRlcm1TeW1ib2wpOwotICAgIFRHcmFwaFNlbGVjdGlvbiogY3JlYXRlU2VsZWN0aW9uKFRJ
bnRlcm1TZWxlY3Rpb24qIGludGVybVNlbGVjdGlvbik7Ci0gICAgVEdyYXBoTG9vcCogY3JlYXRl
TG9vcChUSW50ZXJtTG9vcCogaW50ZXJtTG9vcCk7Ci0gICAgVEdyYXBoTG9naWNhbE9wKiBjcmVh
dGVMb2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJtTG9naWNhbE9wKTsKLXByaXZhdGU6Ci0g
ICAgdHlwZWRlZiBUTWFwPGludCwgVEdyYXBoU3ltYm9sKj4gVFN5bWJvbElkTWFwOwotICAgIHR5
cGVkZWYgc3RkOjpwYWlyPGludCwgVEdyYXBoU3ltYm9sKj4gVFN5bWJvbElkUGFpcjsKLQotICAg
IFRHcmFwaE5vZGVWZWN0b3IgbUFsbE5vZGVzOwotICAgIFRHcmFwaFN5bWJvbFZlY3RvciBtU2Ft
cGxlclN5bWJvbHM7Ci0gICAgVEZ1bmN0aW9uQ2FsbFZlY3RvciBtVXNlckRlZmluZWRGdW5jdGlv
bkNhbGxzOwotICAgIFRTeW1ib2xJZE1hcCBtU3ltYm9sSWRNYXA7Ci19OwotCi0vLwotLy8gRm9y
IHRyYXZlcnNpbmcgdGhlIGRlcGVuZGVuY3kgZ3JhcGguIFVzZXJzIHNob3VsZCBkZXJpdmUgZnJv
bSB0aGlzLAotLy8gcHV0IHRoZWlyIHRyYXZlcnNhbCBzcGVjaWZpYyBkYXRhIGluIGl0LCBhbmQg
dGhlbiBwYXNzIGl0IHRvIGEKLS8vIHRyYXZlcnNlIG1ldGhvZC4KLS8vCi0vLyBXaGVuIHVzaW5n
IHRoaXMsIGp1c3QgZmlsbCBpbiB0aGUgbWV0aG9kcyBmb3Igbm9kZXMgeW91IHdhbnQgdmlzaXRl
ZC4KLS8vCi1jbGFzcyBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyIHsKLXB1YmxpYzoKLSAgICBU
RGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKCkgOiBtRGVwdGgoMCkge30KLQotICAgIHZpcnR1YWwg
dm9pZCB2aXNpdFN5bWJvbChUR3JhcGhTeW1ib2wqIHN5bWJvbCkge307Ci0gICAgdmlydHVhbCB2
b2lkIHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHNlbGVjdGlvbikge307Ci0gICAgdmly
dHVhbCB2b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25D
YWxsKSB7fTsKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9u
KiBzZWxlY3Rpb24pIHt9OwotICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvb3AoVEdyYXBoTG9vcCog
bG9vcCkge307Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxP
cCogbG9naWNhbE9wKSB7fTsKLQotICAgIGludCBnZXREZXB0aCgpIGNvbnN0IHsgcmV0dXJuIG1E
ZXB0aDsgfQotICAgIHZvaWQgaW5jcmVtZW50RGVwdGgoKSB7ICsrbURlcHRoOyB9Ci0gICAgdm9p
ZCBkZWNyZW1lbnREZXB0aCgpIHsgLS1tRGVwdGg7IH0KLQotICAgIHZvaWQgY2xlYXJWaXNpdGVk
KCkgeyBtVmlzaXRlZC5jbGVhcigpOyB9Ci0gICAgdm9pZCBtYXJrVmlzaXRlZChUR3JhcGhOb2Rl
KiBub2RlKSB7IG1WaXNpdGVkLmluc2VydChub2RlKTsgfQotICAgIGJvb2wgaXNWaXNpdGVkKFRH
cmFwaE5vZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIG1WaXNpdGVkLmZpbmQobm9kZSkgIT0gbVZp
c2l0ZWQuZW5kKCk7IH0KLXByaXZhdGU6Ci0gICAgaW50IG1EZXB0aDsKLSAgICBUR3JhcGhOb2Rl
U2V0IG1WaXNpdGVkOwotfTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5j
eUdyYXBoQnVpbGRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyNmU2ZDU3
YTRmZjgyOTM3ODRkY2VhNWZkZWUyMDcxY2IxMzA2YjguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMjI3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3Jh
cGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIgotCi12b2lkIFREZXBlbmRlbmN5R3JhcGhCdWls
ZGVyOjpidWlsZChUSW50ZXJtTm9kZSogbm9kZSwgVERlcGVuZGVuY3lHcmFwaCogZ3JhcGgpCi17
Ci0gICAgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIgYnVpbGRlcihncmFwaCk7Ci0gICAgYnVpbGRl
ci5idWlsZChub2RlKTsKLX0KLQotYm9vbCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRB
Z2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUFnZ3JlZ2F0ZSkK
LXsKLSAgICBzd2l0Y2ggKGludGVybUFnZ3JlZ2F0ZS0+Z2V0T3AoKSkgewotICAgICAgICBjYXNl
IEVPcEZ1bmN0aW9uOiB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbihpbnRlcm1BZ2dyZWdhdGUpOyBi
cmVhazsKLSAgICAgICAgY2FzZSBFT3BGdW5jdGlvbkNhbGw6IHZpc2l0RnVuY3Rpb25DYWxsKGlu
dGVybUFnZ3JlZ2F0ZSk7IGJyZWFrOwotICAgICAgICBkZWZhdWx0OiB2aXNpdEFnZ3JlZ2F0ZUNo
aWxkcmVuKGludGVybUFnZ3JlZ2F0ZSk7IGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotdm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRGdW5jdGlvbkRlZmlu
aXRpb24oVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtQWdncmVnYXRlKQotewotICAgIC8vIEN1cnJl
bnRseSwgd2UgZG8gbm90IHN1cHBvcnQgdXNlciBkZWZpbmVkIGZ1bmN0aW9ucy4KLSAgICBpZiAo
aW50ZXJtQWdncmVnYXRlLT5nZXROYW1lKCkgIT0gIm1haW4oIikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgdmlzaXRBZ2dyZWdhdGVDaGlsZHJlbihpbnRlcm1BZ2dyZWdhdGUpOwotfQotCi0vLyBU
YWtlcyBhbiBleHByZXNzaW9uIGxpa2UgImYoeCkiIGFuZCBjcmVhdGVzIGEgZGVwZW5kZW5jeSBn
cmFwaCBsaWtlCi0vLyAieCAtPiBhcmd1bWVudCAwIC0+IGZ1bmN0aW9uIGNhbGwiLgotdm9pZCBU
RGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0
ZSogaW50ZXJtRnVuY3Rpb25DYWxsKQotewotICAgIFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rp
b25DYWxsID0gbUdyYXBoLT5jcmVhdGVGdW5jdGlvbkNhbGwoaW50ZXJtRnVuY3Rpb25DYWxsKTsK
LQotICAgIC8vIFJ1biB0aHJvdWdoIHRoZSBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50cy4KLSAgICBp
bnQgYXJndW1lbnROdW1iZXIgPSAwOwotICAgIFRJbnRlcm1TZXF1ZW5jZSYgaW50ZXJtQXJndW1l
bnRzID0gaW50ZXJtRnVuY3Rpb25DYWxsLT5nZXRTZXF1ZW5jZSgpOwotICAgIGZvciAoVEludGVy
bVNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBpdGVyID0gaW50ZXJtQXJndW1lbnRzLmJlZ2luKCk7
Ci0gICAgICAgICBpdGVyICE9IGludGVybUFyZ3VtZW50cy5lbmQoKTsKLSAgICAgICAgICsraXRl
ciwgKythcmd1bWVudE51bWJlcikKLSAgICB7Ci0gICAgICAgIFROb2RlU2V0TWFpbnRhaW5lciBu
b2RlU2V0TWFpbnRhaW5lcih0aGlzKTsKLQotICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtQXJn
dW1lbnQgPSAqaXRlcjsKLSAgICAgICAgaW50ZXJtQXJndW1lbnQtPnRyYXZlcnNlKHRoaXMpOwot
Ci0gICAgICAgIGlmIChUUGFyZW50Tm9kZVNldCogYXJndW1lbnROb2RlcyA9IG1Ob2RlU2V0cy5n
ZXRUb3BTZXQoKSkgewotICAgICAgICAgICAgVEdyYXBoQXJndW1lbnQqIGFyZ3VtZW50ID0gbUdy
YXBoLT5jcmVhdGVBcmd1bWVudChpbnRlcm1GdW5jdGlvbkNhbGwsIGFyZ3VtZW50TnVtYmVyKTsK
LSAgICAgICAgICAgIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGFyZ3VtZW50Tm9k
ZXMsIGFyZ3VtZW50KTsKLSAgICAgICAgICAgIGFyZ3VtZW50LT5hZGREZXBlbmRlbnROb2RlKGZ1
bmN0aW9uQ2FsbCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBQdXNoIHRoZSBsZWZ0bW9z
dCBzeW1ib2wgb2YgdGhpcyBmdW5jdGlvbiBjYWxsIGludG8gdGhlIGN1cnJlbnQgc2V0IG9mIGRl
cGVuZGVudCBzeW1ib2xzIHRvCi0gICAgLy8gcmVwcmVzZW50IHRoZSByZXN1bHQgb2YgdGhpcyBm
dW5jdGlvbiBjYWxsLgotICAgIC8vIFRodXMsIGFuIGV4cHJlc3Npb24gbGlrZSAieSA9IGYoeCki
IHdpbGwgeWllbGQgYSBkZXBlbmRlbmN5IGdyYXBoIGxpa2UKLSAgICAvLyAieCAtPiBhcmd1bWVu
dCAwIC0+IGZ1bmN0aW9uIGNhbGwgLT4geSIuCi0gICAgLy8gVGhpcyBsaW5lIGVzc2VudGlhbGx5
IHBhc3NlcyB0aGUgZnVuY3Rpb24gY2FsbCBub2RlIGJhY2sgdXAgdG8gYW4gZWFybGllciB2aXNp
dEFzc2lnbm1lbnQKLSAgICAvLyBjYWxsLCB3aGljaCB3aWxsIGNyZWF0ZSB0aGUgY29ubmVjdGlv
biAiZnVuY3Rpb24gY2FsbCAtPiB5Ii4KLSAgICBtTm9kZVNldHMuaW5zZXJ0SW50b1RvcFNldChm
dW5jdGlvbkNhbGwpOwotfQotCi12b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEFn
Z3JlZ2F0ZUNoaWxkcmVuKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUFnZ3JlZ2F0ZSkKLXsKLSAg
ICBUSW50ZXJtU2VxdWVuY2UmIHNlcXVlbmNlID0gaW50ZXJtQWdncmVnYXRlLT5nZXRTZXF1ZW5j
ZSgpOwotICAgIGZvcihUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBzZXF1
ZW5jZS5iZWdpbigpOyBpdGVyICE9IHNlcXVlbmNlLmVuZCgpOyArK2l0ZXIpCi0gICAgewotICAg
ICAgICBUSW50ZXJtTm9kZSogaW50ZXJtQ2hpbGQgPSAqaXRlcjsKLSAgICAgICAgaW50ZXJtQ2hp
bGQtPnRyYXZlcnNlKHRoaXMpOwotICAgIH0KLX0KLQotdm9pZCBURGVwZW5kZW5jeUdyYXBoQnVp
bGRlcjo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogaW50ZXJtU3ltYm9sKQotewotICAgIC8v
IFB1c2ggdGhpcyBzeW1ib2wgaW50byB0aGUgc2V0IG9mIGRlcGVuZGVudCBzeW1ib2xzIGZvciB0
aGUgY3VycmVudCBhc3NpZ25tZW50IG9yIGNvbmRpdGlvbgotICAgIC8vIHRoYXQgd2UgYXJlIHRy
YXZlcnNpbmcuCi0gICAgVEdyYXBoU3ltYm9sKiBzeW1ib2wgPSBtR3JhcGgtPmdldE9yQ3JlYXRl
U3ltYm9sKGludGVybVN5bWJvbCk7Ci0gICAgbU5vZGVTZXRzLmluc2VydEludG9Ub3BTZXQoc3lt
Ym9sKTsKLQotICAgIC8vIElmIHRoaXMgc3ltYm9sIGlzIHRoZSBjdXJyZW50IGxlZnRtb3N0IHN5
bWJvbCB1bmRlciBhbiBhc3NpZ25tZW50LCByZXBsYWNlIHRoZSBwcmV2aW91cwotICAgIC8vIGxl
ZnRtb3N0IHN5bWJvbCB3aXRoIHRoaXMgc3ltYm9sLgotICAgIGlmICghbUxlZnRtb3N0U3ltYm9s
cy5lbXB0eSgpICYmIG1MZWZ0bW9zdFN5bWJvbHMudG9wKCkgIT0gJm1SaWdodFN1YnRyZWUpIHsK
LSAgICAgICAgbUxlZnRtb3N0U3ltYm9scy5wb3AoKTsKLSAgICAgICAgbUxlZnRtb3N0U3ltYm9s
cy5wdXNoKHN5bWJvbCk7Ci0gICAgfQotfQotCi1ib29sIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVy
Ojp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSogaW50ZXJtQmluYXJ5KQot
ewotICAgIFRPcGVyYXRvciBvcCA9IGludGVybUJpbmFyeS0+Z2V0T3AoKTsKLSAgICBpZiAob3Ag
PT0gRU9wSW5pdGlhbGl6ZSB8fCBpbnRlcm1CaW5hcnktPmlzQXNzaWdubWVudCgpKQotICAgICAg
ICB2aXNpdEFzc2lnbm1lbnQoaW50ZXJtQmluYXJ5KTsKLSAgICBlbHNlIGlmIChvcCA9PSBFT3BM
b2dpY2FsQW5kIHx8IG9wID09IEVPcExvZ2ljYWxPcikKLSAgICAgICAgdmlzaXRMb2dpY2FsT3Ao
aW50ZXJtQmluYXJ5KTsKLSAgICBlbHNlCi0gICAgICAgIHZpc2l0QmluYXJ5Q2hpbGRyZW4oaW50
ZXJtQmluYXJ5KTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBURGVwZW5kZW5jeUdy
YXBoQnVpbGRlcjo6dmlzaXRBc3NpZ25tZW50KFRJbnRlcm1CaW5hcnkqIGludGVybUFzc2lnbm1l
bnQpCi17Ci0gICAgVEludGVybVR5cGVkKiBpbnRlcm1MZWZ0ID0gaW50ZXJtQXNzaWdubWVudC0+
Z2V0TGVmdCgpOwotICAgIGlmICghaW50ZXJtTGVmdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
VEdyYXBoU3ltYm9sKiBsZWZ0bW9zdFN5bWJvbCA9IE5VTEw7Ci0KLSAgICB7Ci0gICAgICAgIFRO
b2RlU2V0TWFpbnRhaW5lciBub2RlU2V0TWFpbnRhaW5lcih0aGlzKTsKLQotICAgICAgICB7Ci0g
ICAgICAgICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIGxlZnRtb3N0U3ltYm9sTWFpbnRh
aW5lcih0aGlzLCBtTGVmdFN1YnRyZWUpOwotICAgICAgICAgICAgaW50ZXJtTGVmdC0+dHJhdmVy
c2UodGhpcyk7Ci0gICAgICAgICAgICBsZWZ0bW9zdFN5bWJvbCA9IG1MZWZ0bW9zdFN5bWJvbHMu
dG9wKCk7Ci0KLSAgICAgICAgICAgIC8vIEFmdGVyIHRyYXZlcnNpbmcgdGhlIGxlZnQgc3VidHJl
ZSBvZiB0aGlzIGFzc2lnbm1lbnQsIHdlIHNob3VsZCBoYXZlIGZvdW5kIGEgcmVhbAotICAgICAg
ICAgICAgLy8gbGVmdG1vc3Qgc3ltYm9sLCBhbmQgdGhlIGxlZnRtb3N0IHN5bWJvbCBzaG91bGQg
bm90IGJlIGEgcGxhY2Vob2xkZXIuCi0gICAgICAgICAgICBBU1NFUlQobGVmdG1vc3RTeW1ib2wg
IT0gJm1MZWZ0U3VidHJlZSk7Ci0gICAgICAgICAgICBBU1NFUlQobGVmdG1vc3RTeW1ib2wgIT0g
Jm1SaWdodFN1YnRyZWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFRJbnRlcm1UeXBlZCog
aW50ZXJtUmlnaHQgPSBpbnRlcm1Bc3NpZ25tZW50LT5nZXRSaWdodCgpKSB7Ci0gICAgICAgICAg
ICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIGxlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcih0aGlz
LCBtUmlnaHRTdWJ0cmVlKTsKLSAgICAgICAgICAgIGludGVybVJpZ2h0LT50cmF2ZXJzZSh0aGlz
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChUUGFyZW50Tm9kZVNldCogYXNzaWdubWVudE5v
ZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKQotICAgICAgICAgICAgY29ubmVjdE11bHRpcGxl
Tm9kZXNUb1NpbmdsZU5vZGUoYXNzaWdubWVudE5vZGVzLCBsZWZ0bW9zdFN5bWJvbCk7Ci0gICAg
fQotCi0gICAgLy8gUHVzaCB0aGUgbGVmdG1vc3Qgc3ltYm9sIG9mIHRoaXMgYXNzaWdubWVudCBp
bnRvIHRoZSBjdXJyZW50IHNldCBvZiBkZXBlbmRlbnQgc3ltYm9scyB0bwotICAgIC8vIHJlcHJl
c2VudCB0aGUgcmVzdWx0IG9mIHRoaXMgYXNzaWdubWVudC4KLSAgICAvLyBBbiBleHByZXNzaW9u
IGxpa2UgImEgPSAoYiA9IGMpIiB3aWxsIHlpZWxkIGEgZGVwZW5kZW5jeSBncmFwaCBsaWtlICJj
IC0+IGIgLT4gYSIuCi0gICAgLy8gVGhpcyBsaW5lIGVzc2VudGlhbGx5IHBhc3NlcyB0aGUgbGVm
dG1vc3Qgc3ltYm9sIG9mIHRoZSBuZXN0ZWQgYXNzaWdubWVudCAoImIiIGluIHRoaXMKLSAgICAv
LyBleGFtcGxlKSBiYWNrIHVwIHRvIHRoZSBlYXJsaWVyIHZpc2l0QXNzaWdubWVudCBjYWxsIGZv
ciB0aGUgb3V0ZXIgYXNzaWdubWVudCwgd2hpY2ggd2lsbAotICAgIC8vIGNyZWF0ZSB0aGUgY29u
bmVjdGlvbiAiYiAtPiBhIi4KLSAgICBtTm9kZVNldHMuaW5zZXJ0SW50b1RvcFNldChsZWZ0bW9z
dFN5bWJvbCk7Ci19Ci0KLXZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0TG9naWNh
bE9wKFRJbnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxPcCkKLXsKLSAgICBpZiAoVEludGVybVR5
cGVkKiBpbnRlcm1MZWZ0ID0gaW50ZXJtTG9naWNhbE9wLT5nZXRMZWZ0KCkpIHsKLSAgICAgICAg
VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIgbm9kZVNldE1haW50YWluZXIodGhpcyk7Ci0K
LSAgICAgICAgaW50ZXJtTGVmdC0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIGlmIChUUGFyZW50
Tm9kZVNldCogbGVmdE5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKSB7Ci0gICAgICAgICAg
ICBUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCA9IG1HcmFwaC0+Y3JlYXRlTG9naWNhbE9wKGlu
dGVybUxvZ2ljYWxPcCk7Ci0gICAgICAgICAgICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xl
Tm9kZShsZWZ0Tm9kZXMsIGxvZ2ljYWxPcCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
VEludGVybVR5cGVkKiBpbnRlcm1SaWdodCA9IGludGVybUxvZ2ljYWxPcC0+Z2V0UmlnaHQoKSkg
ewotICAgICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIGxlZnRtb3N0U3ltYm9sTWFpbnRh
aW5lcih0aGlzLCBtUmlnaHRTdWJ0cmVlKTsKLSAgICAgICAgaW50ZXJtUmlnaHQtPnRyYXZlcnNl
KHRoaXMpOwotICAgIH0KLX0KLQotdm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRC
aW5hcnlDaGlsZHJlbihUSW50ZXJtQmluYXJ5KiBpbnRlcm1CaW5hcnkpCi17Ci0gICAgaWYgKFRJ
bnRlcm1UeXBlZCogaW50ZXJtTGVmdCA9IGludGVybUJpbmFyeS0+Z2V0TGVmdCgpKQotICAgICAg
ICBpbnRlcm1MZWZ0LT50cmF2ZXJzZSh0aGlzKTsKLQotICAgIGlmIChUSW50ZXJtVHlwZWQqIGlu
dGVybVJpZ2h0ID0gaW50ZXJtQmluYXJ5LT5nZXRSaWdodCgpKSB7Ci0gICAgICAgIFRMZWZ0bW9z
dFN5bWJvbE1haW50YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIG1SaWdodFN1
YnRyZWUpOwotICAgICAgICBpbnRlcm1SaWdodC0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotfQot
Ci1ib29sIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNp
dCwgVEludGVybVNlbGVjdGlvbiogaW50ZXJtU2VsZWN0aW9uKQotewotICAgIGlmIChUSW50ZXJt
Tm9kZSogaW50ZXJtQ29uZGl0aW9uID0gaW50ZXJtU2VsZWN0aW9uLT5nZXRDb25kaXRpb24oKSkg
ewotICAgICAgICBUTm9kZVNldE1haW50YWluZXIgbm9kZVNldE1haW50YWluZXIodGhpcyk7Ci0K
LSAgICAgICAgaW50ZXJtQ29uZGl0aW9uLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgaWYgKFRQ
YXJlbnROb2RlU2V0KiBjb25kaXRpb25Ob2RlcyA9IG1Ob2RlU2V0cy5nZXRUb3BTZXQoKSkgewot
ICAgICAgICAgICAgVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBtR3JhcGgtPmNyZWF0ZVNl
bGVjdGlvbihpbnRlcm1TZWxlY3Rpb24pOwotICAgICAgICAgICAgY29ubmVjdE11bHRpcGxlTm9k
ZXNUb1NpbmdsZU5vZGUoY29uZGl0aW9uTm9kZXMsIHNlbGVjdGlvbik7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAoVEludGVybU5vZGUqIGludGVybVRydWVCbG9jayA9IGludGVybVNlbGVj
dGlvbi0+Z2V0VHJ1ZUJsb2NrKCkpCi0gICAgICAgIGludGVybVRydWVCbG9jay0+dHJhdmVyc2Uo
dGhpcyk7Ci0KLSAgICBpZiAoVEludGVybU5vZGUqIGludGVybUZhbHNlQmxvY2sgPSBpbnRlcm1T
ZWxlY3Rpb24tPmdldEZhbHNlQmxvY2soKSkKLSAgICAgICAgaW50ZXJtRmFsc2VCbG9jay0+dHJh
dmVyc2UodGhpcyk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVERlcGVuZGVuY3lH
cmFwaEJ1aWxkZXI6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqIGludGVybUxv
b3ApCi17Ci0gICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtQ29uZGl0aW9uID0gaW50ZXJtTG9v
cC0+Z2V0Q29uZGl0aW9uKCkpIHsKLSAgICAgICAgVE5vZGVTZXRNYWludGFpbmVyIG5vZGVTZXRN
YWludGFpbmVyKHRoaXMpOwotCi0gICAgICAgIGludGVybUNvbmRpdGlvbi0+dHJhdmVyc2UodGhp
cyk7Ci0gICAgICAgIGlmIChUUGFyZW50Tm9kZVNldCogY29uZGl0aW9uTm9kZXMgPSBtTm9kZVNl
dHMuZ2V0VG9wU2V0KCkpIHsKLSAgICAgICAgICAgIFRHcmFwaExvb3AqIGxvb3AgPSBtR3JhcGgt
PmNyZWF0ZUxvb3AoaW50ZXJtTG9vcCk7Ci0gICAgICAgICAgICBjb25uZWN0TXVsdGlwbGVOb2Rl
c1RvU2luZ2xlTm9kZShjb25kaXRpb25Ob2RlcywgbG9vcCk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAoVEludGVybU5vZGUqIGludGVybUJvZHkgPSBpbnRlcm1Mb29wLT5nZXRCb2R5KCkp
Ci0gICAgICAgIGludGVybUJvZHktPnRyYXZlcnNlKHRoaXMpOwotCi0gICAgaWYgKFRJbnRlcm1U
eXBlZCogaW50ZXJtRXhwcmVzc2lvbiA9IGludGVybUxvb3AtPmdldEV4cHJlc3Npb24oKSkKLSAg
ICAgICAgaW50ZXJtRXhwcmVzc2lvbi0+dHJhdmVyc2UodGhpcyk7Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLQotdm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6Y29ubmVjdE11bHRpcGxl
Tm9kZXNUb1NpbmdsZU5vZGUoVFBhcmVudE5vZGVTZXQqIG5vZGVzLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEdyYXBoTm9k
ZSogbm9kZSkgY29uc3QKLXsKLSAgICBmb3IgKFRQYXJlbnROb2RlU2V0Ojpjb25zdF9pdGVyYXRv
ciBpdGVyID0gbm9kZXMtPmJlZ2luKCk7IGl0ZXIgIT0gbm9kZXMtPmVuZCgpOyArK2l0ZXIpCi0g
ICAgewotICAgICAgICBUR3JhcGhQYXJlbnROb2RlKiBjdXJyZW50Tm9kZSA9ICppdGVyOwotICAg
ICAgICBjdXJyZW50Tm9kZS0+YWRkRGVwZW5kZW50Tm9kZShub2RlKTsKLSAgICB9Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYzVmMjMyY2IyMWU5MzZkOTI3YTk2NzI1ZDJmMGQxNmM5ZGM0ZTM5Yy4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTgxICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVm
IENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfQlVJTERFUl9ICi0jZGVmaW5lIENP
TVBJTEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfQlVJTERFUl9ICi0KLSNpbmNsdWRlICJj
b21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCIKLQotLy8KLS8vIENyZWF0ZXMgYSBk
ZXBlbmRlbmN5IGdyYXBoIG9mIHN5bWJvbHMsIGZ1bmN0aW9uIGNhbGxzLCBjb25kaXRpb25zIGV0
Yy4gYnkgdHJhdmVyc2luZyBhCi0vLyBpbnRlcm1lZGlhdGUgdHJlZS4KLS8vCi1jbGFzcyBURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgdm9pZCBidWlsZChUSW50ZXJtTm9kZSogbm9kZSwgVERlcGVuZGVuY3lHcmFw
aCogZ3JhcGgpOwotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wq
KTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5h
cnkqKTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRl
cm1TZWxlY3Rpb24qKTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlz
aXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRMb29wKFZpc2l0
IHZpc2l0LCBUSW50ZXJtTG9vcCopOwotCi1wcml2YXRlOgotICAgIHR5cGVkZWYgc3RkOjpzdGFj
azxUR3JhcGhTeW1ib2wqPiBUU3ltYm9sU3RhY2s7Ci0gICAgdHlwZWRlZiBzdGQ6OnNldDxUR3Jh
cGhQYXJlbnROb2RlKj4gVFBhcmVudE5vZGVTZXQ7Ci0KLSAgICAvLwotICAgIC8vIEZvciBjb2xs
ZWN0aW5nIHRoZSBkZXBlbmRlbnQgbm9kZXMgb2YgYXNzaWdubWVudHMsIGNvbmRpdGlvbnMsIGV0
Yy4KLSAgICAvLyB3aGlsZSB0cmF2ZXJzaW5nIHRoZSBpbnRlcm1lZGlhdGUgdHJlZS4KLSAgICAv
LwotICAgIC8vIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgaXMgc3RhY2sgb2Ygc2V0cy4gRWFjaCBzZXQg
Y29udGFpbnMgZGVwZW5kZW5jeSBncmFwaCBwYXJlbnQgbm9kZXMuCi0gICAgLy8KLSAgICBjbGFz
cyBUTm9kZVNldFN0YWNrIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFROb2RlU2V0U3RhY2soKSB7
fTsKLSAgICAgICAgflROb2RlU2V0U3RhY2soKSB7IGNsZWFyKCk7IH0KLQotICAgICAgICAvLyBU
aGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBhZnRlciBhIHB1c2hTZXQuCi0gICAgICAgIC8vIFJl
dHVybnMgTlVMTCBpZiB0aGUgdG9wIHNldCBpcyBlbXB0eS4KLSAgICAgICAgVFBhcmVudE5vZGVT
ZXQqIGdldFRvcFNldCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghbm9k
ZVNldHMuZW1wdHkoKSk7Ci0gICAgICAgICAgICBUUGFyZW50Tm9kZVNldCogdG9wU2V0ID0gbm9k
ZVNldHMudG9wKCk7Ci0gICAgICAgICAgICByZXR1cm4gIXRvcFNldC0+ZW1wdHkoKSA/IHRvcFNl
dCA6IE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHB1c2hTZXQoKSB7IG5vZGVTZXRz
LnB1c2gobmV3IFRQYXJlbnROb2RlU2V0KCkpOyB9Ci0gICAgICAgIHZvaWQgcG9wU2V0KCkKLSAg
ICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFub2RlU2V0cy5lbXB0eSgpKTsKLSAgICAgICAg
ICAgIGRlbGV0ZSBub2RlU2V0cy50b3AoKTsKLSAgICAgICAgICAgIG5vZGVTZXRzLnBvcCgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gUG9wcyB0aGUgdG9wIHNldCBhbmQgYWRkcyBpdHMgY29u
dGVudHMgdG8gdGhlIG5ldyB0b3Agc2V0LgotICAgICAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJl
IGNhbGxlZCBhZnRlciBhIHB1c2hTZXQuCi0gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIHNldCBi
ZWxvdyB0aGUgdG9wIHNldCwgdGhlIHRvcCBzZXQgaXMganVzdCBkZWxldGVkLgotICAgICAgICB2
b2lkIHBvcFNldEludG9OZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFub2Rl
U2V0cy5lbXB0eSgpKTsKLSAgICAgICAgICAgIFRQYXJlbnROb2RlU2V0KiBvbGRUb3BTZXQgPSBu
b2RlU2V0cy50b3AoKTsKLSAgICAgICAgICAgIG5vZGVTZXRzLnBvcCgpOwotCi0gICAgICAgICAg
ICBpZiAoIW5vZGVTZXRzLmVtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBUUGFyZW50Tm9kZVNl
dCogbmV3VG9wU2V0ID0gbm9kZVNldHMudG9wKCk7Ci0gICAgICAgICAgICAgICAgbmV3VG9wU2V0
LT5pbnNlcnQob2xkVG9wU2V0LT5iZWdpbigpLCBvbGRUb3BTZXQtPmVuZCgpKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgZGVsZXRlIG9sZFRvcFNldDsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIERvZXMgbm90aGluZyBpZiB0aGVyZSBpcyBubyB0b3Agc2V0LgotICAgICAgICAvLyBU
aGlzIGNhbiBiZSBjYWxsZWQgd2hlbiB0aGVyZSBpcyBubyB0b3Agc2V0IGlmIHdlIGFyZSB2aXNp
dGluZwotICAgICAgICAvLyBzeW1ib2xzIHRoYXQgYXJlIG5vdCB1bmRlciBhbiBhc3NpZ25tZW50
IG9yIGNvbmRpdGlvbi4KLSAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byB0cmFjayB0aG9zZSBz
eW1ib2xzLgotICAgICAgICB2b2lkIGluc2VydEludG9Ub3BTZXQoVEdyYXBoUGFyZW50Tm9kZSog
bm9kZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG5vZGVTZXRzLmVtcHR5KCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBub2RlU2V0cy50b3AoKS0+aW5zZXJ0
KG5vZGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBjbGVhcigpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHdoaWxlICghbm9kZVNldHMuZW1wdHkoKSkKLSAgICAgICAgICAgICAgICBwb3BT
ZXQoKTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBzdGQ6OnN0
YWNrPFRQYXJlbnROb2RlU2V0Kj4gVFBhcmVudE5vZGVTZXRTdGFjazsKLQotICAgICAgICBUUGFy
ZW50Tm9kZVNldFN0YWNrIG5vZGVTZXRzOwotICAgIH07Ci0KLSAgICAvLwotICAgIC8vIEFuIGlu
c3RhbmNlIG9mIHRoaXMgY2xhc3MgcHVzaGVzIGEgbmV3IG5vZGUgc2V0IHdoZW4gaW5zdGFudGlh
dGVkLgotICAgIC8vIFdoZW4gdGhlIGluc3RhbmNlIGdvZXMgb3V0IG9mIHNjb3BlLCBpdCBhbmQg
cG9wcyB0aGUgbm9kZSBzZXQuCi0gICAgLy8KLSAgICBjbGFzcyBUTm9kZVNldE1haW50YWluZXIg
ewotICAgIHB1YmxpYzoKLSAgICAgICAgVE5vZGVTZXRNYWludGFpbmVyKFREZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyKiBmYWN0b3J5KQotICAgICAgICAgICAgOiBzZXRzKGZhY3RvcnktPm1Ob2RlU2V0
cykgeyBzZXRzLnB1c2hTZXQoKTsgfQotICAgICAgICB+VE5vZGVTZXRNYWludGFpbmVyKCkgeyBz
ZXRzLnBvcFNldCgpOyB9Ci0gICAgcHJvdGVjdGVkOgotICAgICAgICBUTm9kZVNldFN0YWNrJiBz
ZXRzOwotICAgIH07Ci0KLSAgICAvLwotICAgIC8vIEFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3Mg
cHVzaGVzIGEgbmV3IG5vZGUgc2V0IHdoZW4gaW5zdGFudGlhdGVkLgotICAgIC8vIFdoZW4gdGhl
IGluc3RhbmNlIGdvZXMgb3V0IG9mIHNjb3BlLCBpdCBhbmQgcG9wcyB0aGUgdG9wIG5vZGUgc2V0
IGFuZCBhZGRzIGl0cyBjb250ZW50cyB0bwotICAgIC8vIHRoZSBuZXcgdG9wIG5vZGUgc2V0Lgot
ICAgIC8vCi0gICAgY2xhc3MgVE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIgewotICAgIHB1
YmxpYzoKLSAgICAgICAgVE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIoVERlcGVuZGVuY3lH
cmFwaEJ1aWxkZXIqIGZhY3RvcnkpCi0gICAgICAgICAgICA6IHNldHMoZmFjdG9yeS0+bU5vZGVT
ZXRzKSB7IHNldHMucHVzaFNldCgpOyB9Ci0gICAgICAgIH5UTm9kZVNldFByb3BhZ2F0aW5nTWFp
bnRhaW5lcigpIHsgc2V0cy5wb3BTZXRJbnRvTmV4dCgpOyB9Ci0gICAgcHJvdGVjdGVkOgotICAg
ICAgICBUTm9kZVNldFN0YWNrJiBzZXRzOwotICAgIH07Ci0KLSAgICAvLwotICAgIC8vIEFuIGlu
c3RhbmNlIG9mIHRoaXMgY2xhc3Mga2VlcHMgdHJhY2sgb2YgdGhlIGxlZnRtb3N0IHN5bWJvbCB3
aGlsZSB3ZSdyZSBleHBsb3JpbmcgYW4KLSAgICAvLyBhc3NpZ25tZW50LgotICAgIC8vIEl0IHdp
bGwgcHVzaCB0aGUgcGxhY2Vob2xkZXIgc3ltYm9sIGtMZWZ0U3VidHJlZSB3aGVuIGluc3RhbnRp
YXRlZCB1bmRlciBhIGxlZnQgc3VidHJlZSwKLSAgICAvLyBhbmQga1JpZ2h0U3VidHJlZSB1bmRl
ciBhIHJpZ2h0IHN1YnRyZWUuCi0gICAgLy8gV2hlbiBpdCBnb2VzIG91dCBvZiBzY29wZSwgaXQg
d2lsbCBwb3AgdGhlIGxlZnRtb3N0IHN5bWJvbCBhdCB0aGUgdG9wIG9mIHRoZSBzY29wZS4KLSAg
ICAvLyBEdXJpbmcgdHJhdmVyc2FsLCB0aGUgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIgd2lsbCBy
ZXBsYWNlIGtMZWZ0U3VidHJlZSB3aXRoIGEgcmVhbCBzeW1ib2wuCi0gICAgLy8ga1JpZ2h0U3Vi
dHJlZSB3aWxsIG5ldmVyIGJlIHJlcGxhY2VkIGJ5IGEgcmVhbCBzeW1ib2wgYmVjYXVzZSB3ZSBh
cmUgdHJhY2tpbmcgdGhlIGxlZnRtb3N0Ci0gICAgLy8gc3ltYm9sLgotICAgIC8vCi0gICAgY2xh
c3MgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lciB7Ci0gICAgcHVibGljOgotICAgICAgICBUTGVm
dG1vc3RTeW1ib2xNYWludGFpbmVyKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyKiBmYWN0b3J5LCBU
R3JhcGhTeW1ib2wmIHN1YnRyZWUpCi0gICAgICAgICAgICA6IGxlZnRtb3N0U3ltYm9scyhmYWN0
b3J5LT5tTGVmdG1vc3RTeW1ib2xzKQotICAgICAgICB7Ci0gICAgICAgICAgICBuZWVkc1BsYWNl
aG9sZGVyU3ltYm9sID0gbGVmdG1vc3RTeW1ib2xzLmVtcHR5KCkgfHwgbGVmdG1vc3RTeW1ib2xz
LnRvcCgpICE9ICZzdWJ0cmVlOwotICAgICAgICAgICAgaWYgKG5lZWRzUGxhY2Vob2xkZXJTeW1i
b2wpCi0gICAgICAgICAgICAgICAgbGVmdG1vc3RTeW1ib2xzLnB1c2goJnN1YnRyZWUpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgflRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIoKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAobmVlZHNQbGFjZWhvbGRlclN5bWJvbCkKLSAgICAgICAgICAgICAg
ICBsZWZ0bW9zdFN5bWJvbHMucG9wKCk7Ci0gICAgICAgIH0KLQotICAgIHByb3RlY3RlZDoKLSAg
ICAgICAgVFN5bWJvbFN0YWNrJiBsZWZ0bW9zdFN5bWJvbHM7Ci0gICAgICAgIGJvb2wgbmVlZHNQ
bGFjZWhvbGRlclN5bWJvbDsKLSAgICB9OwotCi0gICAgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIo
VERlcGVuZGVuY3lHcmFwaCogZ3JhcGgpCi0gICAgICAgIDogVEludGVybVRyYXZlcnNlcih0cnVl
LCBmYWxzZSwgZmFsc2UpCi0gICAgICAgICwgbUxlZnRTdWJ0cmVlKE5VTEwpCi0gICAgICAgICwg
bVJpZ2h0U3VidHJlZShOVUxMKQotICAgICAgICAsIG1HcmFwaChncmFwaCkge30KLSAgICB2b2lk
IGJ1aWxkKFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlKSB7IGludGVybU5vZGUtPnRyYXZlcnNlKHRo
aXMpOyB9Ci0KLSAgICB2b2lkIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKFRQYXJl
bnROb2RlU2V0KiBub2RlcywgVEdyYXBoTm9kZSogbm9kZSkgY29uc3Q7Ci0KLSAgICB2b2lkIHZp
c2l0QXNzaWdubWVudChUSW50ZXJtQmluYXJ5Kik7Ci0gICAgdm9pZCB2aXNpdExvZ2ljYWxPcChU
SW50ZXJtQmluYXJ5Kik7Ci0gICAgdm9pZCB2aXNpdEJpbmFyeUNoaWxkcmVuKFRJbnRlcm1CaW5h
cnkqKTsKLSAgICB2b2lkIHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFRJbnRlcm1BZ2dyZWdhdGUq
KTsKLSAgICB2b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1
bmN0aW9uQ2FsbCk7Ci0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZUNoaWxkcmVuKFRJbnRlcm1BZ2dy
ZWdhdGUqKTsKLQotICAgIFRHcmFwaFN5bWJvbCBtTGVmdFN1YnRyZWU7Ci0gICAgVEdyYXBoU3lt
Ym9sIG1SaWdodFN1YnRyZWU7Ci0KLSAgICBURGVwZW5kZW5jeUdyYXBoKiBtR3JhcGg7Ci0gICAg
VE5vZGVTZXRTdGFjayBtTm9kZVNldHM7Ci0gICAgVFN5bWJvbFN0YWNrIG1MZWZ0bW9zdFN5bWJv
bHM7Ci19OwotCi0jZW5kaWYgIC8vIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhf
QlVJTERFUl9ICmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmM0ODllN2I2ZjMxNDZjYzZhZGI5MzM4YzMx
OWFmYTQxM2E2NDJmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRl
bmN5R3JhcGhPdXRwdXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLy8KLS8v
IENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRw
dXQuaCIKLQotdm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpvdXRwdXRJbmRlbnRhdGlvbigp
Ci17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBnZXREZXB0aCgpOyArK2kpCi0gICAgICAgIG1T
aW5rIDw8ICIgICI7Ci19Ci0KLXZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRBcmd1
bWVudChUR3JhcGhBcmd1bWVudCogcGFyYW1ldGVyKQotewotICAgIG91dHB1dEluZGVudGF0aW9u
KCk7Ci0gICAgbVNpbmsgPDwgImFyZ3VtZW50ICIgPDwgcGFyYW1ldGVyLT5nZXRBcmd1bWVudE51
bWJlcigpIDw8ICIgb2YgY2FsbCB0byAiCi0gICAgICAgICAgPDwgcGFyYW1ldGVyLT5nZXRJbnRl
cm1GdW5jdGlvbkNhbGwoKS0+Z2V0TmFtZSgpIDw8ICJcbiI7Ci19Ci0KLXZvaWQgVERlcGVuZGVu
Y3lHcmFwaE91dHB1dDo6dmlzaXRGdW5jdGlvbkNhbGwoVEdyYXBoRnVuY3Rpb25DYWxsKiBmdW5j
dGlvbkNhbGwpCi17Ci0gICAgb3V0cHV0SW5kZW50YXRpb24oKTsKLSAgICBtU2luayA8PCAiZnVu
Y3Rpb24gY2FsbCAiIDw8ICBmdW5jdGlvbkNhbGwtPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpLT5n
ZXROYW1lKCkgPDwgIlxuIjsKLX0KLQotdm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNp
dFN5bWJvbChUR3JhcGhTeW1ib2wqIHN5bWJvbCkKLXsKLSAgICBvdXRwdXRJbmRlbnRhdGlvbigp
OwotICAgIG1TaW5rIDw8IHN5bWJvbC0+Z2V0SW50ZXJtU3ltYm9sKCktPmdldFN5bWJvbCgpIDw8
ICIgKHN5bWJvbCBpZDogIgotICAgICAgICAgIDw8IHN5bWJvbC0+Z2V0SW50ZXJtU3ltYm9sKCkt
PmdldElkKCkgPDwgIilcbiI7Ci19Ci0KLXZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlz
aXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24pCi17Ci0gICAgb3V0cHV0SW5k
ZW50YXRpb24oKTsKLSAgICBtU2luayA8PCAic2VsZWN0aW9uXG4iOwotfQotCi12b2lkIFREZXBl
bmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0TG9vcChUR3JhcGhMb29wKiBsb29wKQotewotICAgIG91
dHB1dEluZGVudGF0aW9uKCk7Ci0gICAgbVNpbmsgPDwgImxvb3AgY29uZGl0aW9uXG4iOwotfQot
Ci12b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0TG9naWNhbE9wKFRHcmFwaExvZ2lj
YWxPcCogbG9naWNhbE9wKQotewotICAgIG91dHB1dEluZGVudGF0aW9uKCk7Ci0gICAgbVNpbmsg
PDwgImxvZ2ljYWwgIiA8PCBsb2dpY2FsT3AtPmdldE9wU3RyaW5nKCkgPDwgIlxuIjsKLX0KLQot
dm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpvdXRwdXRBbGxTcGFubmluZ1RyZWVzKFREZXBl
bmRlbmN5R3JhcGgmIGdyYXBoKQotewotICAgIG1TaW5rIDw8ICJcbiI7Ci0KLSAgICBmb3IgKFRH
cmFwaE5vZGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBncmFwaC5iZWdpbigpOyBpdGVy
ICE9IGdyYXBoLmVuZCgpOyArK2l0ZXIpCi0gICAgewotICAgICAgICBUR3JhcGhOb2RlKiBzeW1i
b2wgPSAqaXRlcjsKLSAgICAgICAgbVNpbmsgPDwgIi0tLSBEZXBlbmRlbmN5IGdyYXBoIHNwYW5u
aW5nIHRyZWUgLS0tXG4iOwotICAgICAgICBjbGVhclZpc2l0ZWQoKTsKLSAgICAgICAgc3ltYm9s
LT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgbVNpbmsgPDwgIlxuIjsKLSAgICB9Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVw
ZW5kZW5jeUdyYXBoT3V0cHV0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAxNDQ3ZGE5ODdkMmUyZWRhZWQ4MzliNjEyZDczYmZiOWY4NjUyZmEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oCisr
KyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09N
UElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9PVVRQVVRfSAotI2RlZmluZSBDT01QSUxF
Ul9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX09VVFBVVF9ICi0KLSNpbmNsdWRlICJjb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCIKLSNpbmNsdWRlICJjb21waWxlci9JbmZvU2lu
ay5oIgotCi1jbGFzcyBURGVwZW5kZW5jeUdyYXBoT3V0cHV0IDogcHVibGljIFREZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZXIgewotcHVibGljOgotICAgIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQoVElu
Zm9TaW5rQmFzZSYgc2luaykgOiBtU2luayhzaW5rKSB7fQotICAgIHZpcnR1YWwgdm9pZCB2aXNp
dFN5bWJvbChUR3JhcGhTeW1ib2wqIHN5bWJvbCk7Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0QXJn
dW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFtZXRlcik7Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0
RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxsKTsKLSAgICB2aXJ0
dWFsIHZvaWQgdmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24pOwotICAg
IHZpcnR1YWwgdm9pZCB2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCk7Ci0gICAgdmlydHVhbCB2
b2lkIHZpc2l0TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wKTsKLQotICAgIHZv
aWQgb3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhURGVwZW5kZW5jeUdyYXBoJiBncmFwaCk7Ci1wcml2
YXRlOgotICAgIHZvaWQgb3V0cHV0SW5kZW50YXRpb24oKTsKLQotICAgIFRJbmZvU2lua0Jhc2Um
IG1TaW5rOwotfTsKLQotI2VuZGlmICAvLyBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dS
QVBIX09VVFBVVF9ICmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNl
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE1ODU3NWNlYzM1MWNiYzY4OTg1
OTgyOTJjNDg4OTJhODAwZmY4NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgv
RGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBA
QAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5
R3JhcGguaCIKLQotLy8gVGhlc2UgbWV0aG9kcyBkbyBhIGJyZWFkdGgtZmlyc3QgdHJhdmVyc2Fs
IHRocm91Z2ggdGhlIGdyYXBoIGFuZCBtYXJrIHZpc2l0ZWQgbm9kZXMuCi0KLXZvaWQgVEdyYXBo
Tm9kZTo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIp
Ci17Ci0gICAgZ3JhcGhUcmF2ZXJzZXItPm1hcmtWaXNpdGVkKHRoaXMpOwotfQotCi12b2lkIFRH
cmFwaFBhcmVudE5vZGU6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBo
VHJhdmVyc2VyKQotewotICAgIFRHcmFwaE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsK
LQotICAgIGdyYXBoVHJhdmVyc2VyLT5pbmNyZW1lbnREZXB0aCgpOwotCi0gICAgLy8gVmlzaXQg
dGhlIHBhcmVudCBub2RlJ3MgY2hpbGRyZW4uCi0gICAgZm9yIChUR3JhcGhOb2RlU2V0Ojpjb25z
dF9pdGVyYXRvciBpdGVyID0gbURlcGVuZGVudE5vZGVzLmJlZ2luKCk7Ci0gICAgICAgICBpdGVy
ICE9IG1EZXBlbmRlbnROb2Rlcy5lbmQoKTsKLSAgICAgICAgICsraXRlcikKLSAgICB7Ci0gICAg
ICAgIFRHcmFwaE5vZGUqIG5vZGUgPSAqaXRlcjsKLSAgICAgICAgaWYgKCFncmFwaFRyYXZlcnNl
ci0+aXNWaXNpdGVkKG5vZGUpKQotICAgICAgICAgICAgbm9kZS0+dHJhdmVyc2UoZ3JhcGhUcmF2
ZXJzZXIpOwotICAgIH0KLQotICAgIGdyYXBoVHJhdmVyc2VyLT5kZWNyZW1lbnREZXB0aCgpOwot
fQotCi12b2lkIFRHcmFwaEFyZ3VtZW50Ojp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVy
c2VyKiBncmFwaFRyYXZlcnNlcikKLXsKLSAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRBcmd1bWVu
dCh0aGlzKTsKLSAgICBUR3JhcGhQYXJlbnROb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7
Ci19Ci0KLXZvaWQgVEdyYXBoRnVuY3Rpb25DYWxsOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBo
VHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKLXsKLSAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRG
dW5jdGlvbkNhbGwodGhpcyk7Ci0gICAgVEdyYXBoUGFyZW50Tm9kZTo6dHJhdmVyc2UoZ3JhcGhU
cmF2ZXJzZXIpOwotfQotCi12b2lkIFRHcmFwaFN5bWJvbDo6dHJhdmVyc2UoVERlcGVuZGVuY3lH
cmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCi17Ci0gICAgZ3JhcGhUcmF2ZXJzZXItPnZp
c2l0U3ltYm9sKHRoaXMpOwotICAgIFRHcmFwaFBhcmVudE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJh
dmVyc2VyKTsKLX0KLQotdm9pZCBUR3JhcGhTZWxlY3Rpb246OnRyYXZlcnNlKFREZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQotewotICAgIGdyYXBoVHJhdmVyc2VyLT52
aXNpdFNlbGVjdGlvbih0aGlzKTsKLSAgICBUR3JhcGhOb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZl
cnNlcik7Ci19Ci0KLXZvaWQgVEdyYXBoTG9vcDo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRy
YXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCi17Ci0gICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0TG9v
cCh0aGlzKTsKLSAgICBUR3JhcGhOb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Ci19Ci0K
LXZvaWQgVEdyYXBoTG9naWNhbE9wOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2Vy
KiBncmFwaFRyYXZlcnNlcikKLXsKLSAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRMb2dpY2FsT3Ao
dGhpcyk7Ci0gICAgVEdyYXBoTm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOwotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dlbmVyYXRlX3Bh
cnNlci5zaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nZW5lcmF0ZV9w
YXJzZXIuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGU0ZDg4YjJlODRjZDRhNmVi
Y2JhN2RkNjcyYzE3ZGNhZjdkZGE2NDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dlbmVy
YXRlX3BhcnNlci5zaAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSMhL2Jpbi9iYXNo
Ci0jIENvcHlyaWdodCAoYykgMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0KLSMgR2VuZXJhdGVzIEdMU0wgRVMgcGFyc2VyIC0gZ2xzbGFuZ19sZXguY3BwLCBnbHNs
YW5nX3RhYi5oLCBhbmQgZ2xzbGFuZ190YWIuY3BwCi0KLXJ1bl9mbGV4KCkKLXsKLWlucHV0X2Zp
bGU9JHNjcmlwdF9kaXIvJDEubAotb3V0cHV0X3NvdXJjZT0kc2NyaXB0X2Rpci8kMV9sZXguY3Bw
Ci1mbGV4IC0tbm9saW5lIC0tbm91bmlzdGQgLS1vdXRmaWxlPSRvdXRwdXRfc291cmNlICRpbnB1
dF9maWxlCi19Ci0KLXJ1bl9iaXNvbigpCi17Ci1pbnB1dF9maWxlPSRzY3JpcHRfZGlyLyQxLnkK
LW91dHB1dF9oZWFkZXI9JHNjcmlwdF9kaXIvJDFfdGFiLmgKLW91dHB1dF9zb3VyY2U9JHNjcmlw
dF9kaXIvJDFfdGFiLmNwcAotYmlzb24gLS1uby1saW5lcyAtLXNrZWxldG9uPXlhY2MuYyAtLWRl
ZmluZXM9JG91dHB1dF9oZWFkZXIgLS1vdXRwdXQ9JG91dHB1dF9zb3VyY2UgJGlucHV0X2ZpbGUK
LX0KLQotc2NyaXB0X2Rpcj0kKGRpcm5hbWUgJDApCi0KLSMgR2VuZXJhdGUgUGFyc2VyCi1ydW5f
ZmxleCBnbHNsYW5nCi1ydW5fYmlzb24gZ2xzbGFuZwotcGF0Y2ggLS1zaWxlbnQgLS1mb3J3YXJk
IDwgNjRiaXQtbGV4ZXItc2FmZXR5LnBhdGNoCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL2dsc2xhbmcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjIy
MTE5OTA5M2MyMWFiOTdmODIxYTZmYjZiMTg0ODIxNmUyMjg1MS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvZ2xzbGFuZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotLy8KLS8v
IENvcHlyaWdodCAoYykgMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCi0KLXN0cnVjdCBUUGFyc2VDb250ZXh0OwotZXh0ZXJuIGludCBnbHNsYW5nX2luaXRp
YWxpemUoVFBhcnNlQ29udGV4dCogY29udGV4dCk7Ci1leHRlcm4gaW50IGdsc2xhbmdfZmluYWxp
emUoVFBhcnNlQ29udGV4dCogY29udGV4dCk7Ci0KLWV4dGVybiBpbnQgZ2xzbGFuZ19zY2FuKHNp
emVfdCBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHN0
cmluZ1tdLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGxlbmd0aFtdLAotICAg
ICAgICAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4dCogY29udGV4dCk7Ci1leHRlcm4gaW50
IGdsc2xhbmdfcGFyc2UoVFBhcnNlQ29udGV4dCogY29udGV4dCk7Ci0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmwgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5sCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBhNDM1MGQ0YzI3MzUyMThkOWEwYjA0OTZiNWJmZDA3OTk5MjUzNmZiLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmwKKysrIC9kZXYvbnVsbApAQCAtMSwzNjUg
KzAsMCBAQAotLyoKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLVRoaXMgZmlsZSBjb250YWlucyB0aGUg
TGV4IHNwZWNpZmljYXRpb24gZm9yIEdMU0wgRVMuCi1CYXNlZCBvbiBBTlNJIEMgZ3JhbW1hciwg
TGV4IHNwZWNpZmljYXRpb246Ci1odHRwOi8vd3d3Lmx5c2F0b3IubGl1LnNlL2MvQU5TSS1DLWdy
YW1tYXItbC5odG1sCi0KLUlGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8g
UlVOIGdlbmVyYXRlX3BhcnNlci5zaCwKLVdISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBMRVhF
UiAoZ2xzbGFuZ19sZXguY3BwKS4KLSovCi0KLSV0b3B7Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAy
MDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVGhp
cyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVE
SVQhCi0KLS8vIElnbm9yZSBlcnJvcnMgaW4gYXV0by1nZW5lcmF0ZWQgY29kZS4KLSNpZiBkZWZp
bmVkKF9fR05VQ19fKQotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1m
dW5jdGlvbiIKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtdmFyaWFi
bGUiCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc3dpdGNoLWVudW0iCi0jZWxp
ZiBkZWZpbmVkKF9NU0NfVkVSKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQwNjUpCi0jcHJh
Z21hIHdhcm5pbmcoZGlzYWJsZTogNDE4OSkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NTA1
KQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEpCi0jZW5kaWYKLQotI2lmIGRlZmluZWQo
X19jbGFuZ19fKQotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKLSNwcmFnbWEgY2xhbmcg
ZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vua25vd24tcHJhZ21hcyIKLSNwcmFnbWEgY2xhbmcgZGlh
Z25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtcmVnaXN0ZXIiCi0jZW5kaWYKLX0KLQotJXsK
LSNpbmNsdWRlICJjb21waWxlci9nbHNsYW5nLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VD
b250ZXh0LmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmgiCi0jaW5j
bHVkZSAiY29tcGlsZXIvdXRpbC5oIgotI2luY2x1ZGUgImdsc2xhbmdfdGFiLmgiCi0KLS8qIHdp
bmRvd3Mgb25seSBwcmFnbWEgKi8KLSNpZmRlZiBfTVNDX1ZFUgotI3ByYWdtYSB3YXJuaW5nKGRp
c2FibGUgOiA0MTAyKQotI2VuZGlmCi0KLSNkZWZpbmUgWVlfVVNFUl9BQ1RJT04gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeXlsbG9jLT5maXJzdF9maWxlID0geXlsbG9j
LT5sYXN0X2ZpbGUgPSB5eWNvbHVtbjsgXAotICAgIHl5bGxvYy0+Zmlyc3RfbGluZSA9IHl5bGxv
Yy0+bGFzdF9saW5lID0geXlsaW5lbm87Ci0KLSNkZWZpbmUgWVlfSU5QVVQoYnVmLCByZXN1bHQs
IG1heF9zaXplKSBcCi0gICAgcmVzdWx0ID0gc3RyaW5nX2lucHV0KGJ1ZiwgbWF4X3NpemUsIHl5
c2Nhbm5lcik7Ci0KLXN0YXRpYyB5eV9zaXplX3Qgc3RyaW5nX2lucHV0KGNoYXIqIGJ1ZiwgeXlf
c2l6ZV90IG1heF9zaXplLCB5eXNjYW5fdCB5eXNjYW5uZXIpOwotc3RhdGljIGludCBjaGVja190
eXBlKHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci1zdGF0aWMgaW50IHJlc2VydmVkX3dvcmQoeXlzY2Fu
X3QgeXlzY2FubmVyKTsKLXN0YXRpYyBpbnQgaW50X2NvbnN0YW50KHl5c2Nhbl90IHl5c2Nhbm5l
cik7Ci1zdGF0aWMgaW50IGZsb2F0X2NvbnN0YW50KHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0lfQot
Ci0lb3B0aW9uIG5veXl3cmFwIG5vdW5wdXQgbmV2ZXItaW50ZXJhY3RpdmUKLSVvcHRpb24geXls
aW5lbm8gcmVlbnRyYW50IGJpc29uLWJyaWRnZSBiaXNvbi1sb2NhdGlvbnMKLSVvcHRpb24gZXh0
cmEtdHlwZT0iVFBhcnNlQ29udGV4dCoiCi0KLUQgICAgICAgICAgIFswLTldCi1MICAgICAgICAg
ICBbYS16QS1aX10KLUggICAgICAgICAgIFthLWZBLUYwLTldCi1FICAgICAgICAgICBbRWVdWyst
XT97RH0rCi1PICAgICAgICAgICBbMC03XQotCi0lJQotCi0iaW52YXJpYW50IiAgICB7IHJldHVy
biBJTlZBUklBTlQ7IH0KLSJoaWdocCIgICAgICAgIHsgcmV0dXJuIEhJR0hfUFJFQ0lTSU9OOyB9
Ci0ibWVkaXVtcCIgICAgICB7IHJldHVybiBNRURJVU1fUFJFQ0lTSU9OOyB9Ci0ibG93cCIgICAg
ICAgICB7IHJldHVybiBMT1dfUFJFQ0lTSU9OOyB9Ci0icHJlY2lzaW9uIiAgICB7IHJldHVybiBQ
UkVDSVNJT047IH0KLQotImF0dHJpYnV0ZSIgICAgeyByZXR1cm4gQVRUUklCVVRFOyB9Ci0iY29u
c3QiICAgICAgICB7IHJldHVybiBDT05TVF9RVUFMOyB9Ci0idW5pZm9ybSIgICAgICB7IHJldHVy
biBVTklGT1JNOyB9Ci0idmFyeWluZyIgICAgICB7IHJldHVybiBWQVJZSU5HOyB9Ci0KLSJicmVh
ayIgICAgICAgIHsgcmV0dXJuIEJSRUFLOyB9Ci0iY29udGludWUiICAgICB7IHJldHVybiBDT05U
SU5VRTsgfQotImRvIiAgICAgICAgICAgeyByZXR1cm4gRE87IH0KLSJmb3IiICAgICAgICAgIHsg
cmV0dXJuIEZPUjsgfQotIndoaWxlIiAgICAgICAgeyByZXR1cm4gV0hJTEU7IH0KLQotImlmIiAg
ICAgICAgICAgeyByZXR1cm4gSUY7IH0KLSJlbHNlIiAgICAgICAgIHsgcmV0dXJuIEVMU0U7IH0K
LQotImluIiAgICAgICAgICAgeyByZXR1cm4gSU5fUVVBTDsgfQotIm91dCIgICAgICAgICAgeyBy
ZXR1cm4gT1VUX1FVQUw7IH0KLSJpbm91dCIgICAgICAgIHsgcmV0dXJuIElOT1VUX1FVQUw7IH0K
LQotImZsb2F0IiAgICAgICAgeyByZXR1cm4gRkxPQVRfVFlQRTsgfQotImludCIgICAgICAgICAg
eyByZXR1cm4gSU5UX1RZUEU7IH0KLSJ2b2lkIiAgICAgICAgIHsgcmV0dXJuIFZPSURfVFlQRTsg
fQotImJvb2wiICAgICAgICAgeyByZXR1cm4gQk9PTF9UWVBFOyB9Ci0idHJ1ZSIgICAgICAgICB7
IHl5bHZhbC0+bGV4LmIgPSB0cnVlOyAgcmV0dXJuIEJPT0xDT05TVEFOVDsgfQotImZhbHNlIiAg
ICAgICAgeyB5eWx2YWwtPmxleC5iID0gZmFsc2U7IHJldHVybiBCT09MQ09OU1RBTlQ7IH0KLQot
ImRpc2NhcmQiICAgICAgeyByZXR1cm4gRElTQ0FSRDsgfQotInJldHVybiIgICAgICAgeyByZXR1
cm4gUkVUVVJOOyB9Ci0KLSJtYXQyIiAgICAgICAgIHsgcmV0dXJuIE1BVFJJWDI7IH0KLSJtYXQz
IiAgICAgICAgIHsgcmV0dXJuIE1BVFJJWDM7IH0KLSJtYXQ0IiAgICAgICAgIHsgcmV0dXJuIE1B
VFJJWDQ7IH0KLQotInZlYzIiICAgICAgICAgeyByZXR1cm4gVkVDMjsgfQotInZlYzMiICAgICAg
ICAgeyByZXR1cm4gVkVDMzsgfQotInZlYzQiICAgICAgICAgeyByZXR1cm4gVkVDNDsgfQotIml2
ZWMyIiAgICAgICAgeyByZXR1cm4gSVZFQzI7IH0KLSJpdmVjMyIgICAgICAgIHsgcmV0dXJuIElW
RUMzOyB9Ci0iaXZlYzQiICAgICAgICB7IHJldHVybiBJVkVDNDsgfQotImJ2ZWMyIiAgICAgICAg
eyByZXR1cm4gQlZFQzI7IH0KLSJidmVjMyIgICAgICAgIHsgcmV0dXJuIEJWRUMzOyB9Ci0iYnZl
YzQiICAgICAgICB7IHJldHVybiBCVkVDNDsgfQotCi0ic2FtcGxlcjJEIiAgICAgICAgICB7IHJl
dHVybiBTQU1QTEVSMkQ7IH0KLSJzYW1wbGVyQ3ViZSIgICAgICAgIHsgcmV0dXJuIFNBTVBMRVJD
VUJFOyB9Ci0ic2FtcGxlckV4dGVybmFsT0VTIiB7IHJldHVybiBTQU1QTEVSX0VYVEVSTkFMX09F
UzsgfQotInNhbXBsZXIyRFJlY3QiICAgICAgeyByZXR1cm4gU0FNUExFUjJEUkVDVDsgfQotCi0i
c3RydWN0IiAgICAgICB7IHJldHVybiBTVFJVQ1Q7IH0KLQotImFzbSIgICAgICAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0KLSJjbGFzcyIgICAgICAgIHsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInVuaW9uIiAgICAgICAgeyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZW51bSIgICAgICAgICB7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJ0eXBlZGVmIiAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQotInRlbXBsYXRlIiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9Ci0idGhpcyIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KLSJwYWNrZWQiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQotCi0iZ290byIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KLSJzd2l0Y2giICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQot
ImRlZmF1bHQiICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0KLSJp
bmxpbmUiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotIm5vaW5s
aW5lIiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0idm9sYXRpbGUi
ICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJwdWJsaWMiICAgICAg
IHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInN0YXRpYyIgICAgICAgeyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZXh0ZXJuIiAgICAgICB7IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJleHRlcm5hbCIgICAgIHsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImludGVyZmFjZSIgICAgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZmxhdCIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLQotImxvbmciICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9Ci0ic2hvcnQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KLSJkb3VibGUiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQotImhhbGYiICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0iZml4ZWQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
LSJ1bnNpZ25lZCIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInN1
cGVycCIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0KLSJpbnB1
dCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotIm91dHB1dCIg
ICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0KLSJodmVjMiIgICAg
ICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImh2ZWMzIiAgICAgICAg
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iaHZlYzQiICAgICAgICB7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJkdmVjMiIgICAgICAgIHsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImR2ZWMzIiAgICAgICAgeyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZHZlYzQiICAgICAgICB7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJmdmVjMiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQotImZ2ZWMzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9Ci0iZnZlYzQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KLQotInNhbXBsZXIxRCIgICAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotInNhbXBsZXIzRCIgICAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQotInNhbXBsZXIxRFNoYWRvdyIgICAgIHsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQotInNhbXBsZXIyRFNoYWRvdyIgICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInNhbXBsZXIzRFJlY3QiICAgICAgIHsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInNhbXBsZXIyRFJlY3RTaGFkb3ciIHsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCi0ic2l6ZW9mIiAgICAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJjYXN0IiAgICAgICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCi0ibmFtZXNwYWNlIiAgICB7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJ1c2luZyIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQotCi17TH0oe0x9fHtEfSkqICAgICAgIHsKLSAgIHl5bHZhbC0+bGV4
LnN0cmluZyA9IE5ld1Bvb2xUU3RyaW5nKHl5dGV4dCk7IAotICAgcmV0dXJuIGNoZWNrX3R5cGUo
eXlzY2FubmVyKTsKLX0KLQotMFt4WF17SH0rICAgICAgICAgeyByZXR1cm4gaW50X2NvbnN0YW50
KHl5c2Nhbm5lcik7IH0KLTB7T30rICAgICAgICAgICAgIHsgcmV0dXJuIGludF9jb25zdGFudCh5
eXNjYW5uZXIpOyB9Ci17RH0rICAgICAgICAgICAgICB7IHJldHVybiBpbnRfY29uc3RhbnQoeXlz
Y2FubmVyKTsgfQotCi17RH0re0V9ICAgICAgICAgICB7IHJldHVybiBmbG9hdF9jb25zdGFudCh5
eXNjYW5uZXIpOyB9Ci17RH0rIi4ie0R9Kih7RX0pPyB7IHJldHVybiBmbG9hdF9jb25zdGFudCh5
eXNjYW5uZXIpOyB9Ci0iLiJ7RH0rKHtFfSk/ICAgICB7IHJldHVybiBmbG9hdF9jb25zdGFudCh5
eXNjYW5uZXIpOyB9Ci0KLSIrPSIgICAgICAgICAgICB7IHJldHVybiBBRERfQVNTSUdOOyB9Ci0i
LT0iICAgICAgICAgICAgeyByZXR1cm4gU1VCX0FTU0lHTjsgfQotIio9IiAgICAgICAgICAgIHsg
cmV0dXJuIE1VTF9BU1NJR047IH0KLSIvPSIgICAgICAgICAgICB7IHJldHVybiBESVZfQVNTSUdO
OyB9Ci0iJT0iICAgICAgICAgICAgeyByZXR1cm4gTU9EX0FTU0lHTjsgfQotIjw8PSIgICAgICAg
ICAgIHsgcmV0dXJuIExFRlRfQVNTSUdOOyB9Ci0iPj49IiAgICAgICAgICAgeyByZXR1cm4gUklH
SFRfQVNTSUdOOyB9Ci0iJj0iICAgICAgICAgICAgeyByZXR1cm4gQU5EX0FTU0lHTjsgfQotIl49
IiAgICAgICAgICAgIHsgcmV0dXJuIFhPUl9BU1NJR047IH0KLSJ8PSIgICAgICAgICAgICB7IHJl
dHVybiBPUl9BU1NJR047IH0KLQotIisrIiAgICAgICAgICAgIHsgcmV0dXJuIElOQ19PUDsgfQot
Ii0tIiAgICAgICAgICAgIHsgcmV0dXJuIERFQ19PUDsgfQotIiYmIiAgICAgICAgICAgIHsgcmV0
dXJuIEFORF9PUDsgfQotInx8IiAgICAgICAgICAgIHsgcmV0dXJuIE9SX09QOyB9Ci0iXl4iICAg
ICAgICAgICAgeyByZXR1cm4gWE9SX09QOyB9Ci0iPD0iICAgICAgICAgICAgeyByZXR1cm4gTEVf
T1A7IH0KLSI+PSIgICAgICAgICAgICB7IHJldHVybiBHRV9PUDsgfQotIj09IiAgICAgICAgICAg
IHsgcmV0dXJuIEVRX09QOyB9Ci0iIT0iICAgICAgICAgICAgeyByZXR1cm4gTkVfT1A7IH0KLSI8
PCIgICAgICAgICAgICB7IHJldHVybiBMRUZUX09QOyB9Ci0iPj4iICAgICAgICAgICAgeyByZXR1
cm4gUklHSFRfT1A7IH0KLSI7IiAgICAgICAgICAgICB7IHJldHVybiBTRU1JQ09MT047IH0KLSgi
eyJ8IjwlIikgICAgICB7IHJldHVybiBMRUZUX0JSQUNFOyB9Ci0oIn0ifCIlPiIpICAgICAgeyBy
ZXR1cm4gUklHSFRfQlJBQ0U7IH0KLSIsIiAgICAgICAgIHsgcmV0dXJuIENPTU1BOyB9Ci0iOiIg
ICAgICAgICB7IHJldHVybiBDT0xPTjsgfQotIj0iICAgICAgICAgeyByZXR1cm4gRVFVQUw7IH0K
LSIoIiAgICAgICAgIHsgcmV0dXJuIExFRlRfUEFSRU47IH0KLSIpIiAgICAgICAgIHsgcmV0dXJu
IFJJR0hUX1BBUkVOOyB9Ci0oIlsifCI8OiIpICB7IHJldHVybiBMRUZUX0JSQUNLRVQ7IH0KLSgi
XSJ8Ijo+IikgIHsgcmV0dXJuIFJJR0hUX0JSQUNLRVQ7IH0KLSIuIiAgICAgICAgIHsgcmV0dXJu
IERPVDsgfQotIiEiICAgICAgICAgeyByZXR1cm4gQkFORzsgfQotIi0iICAgICAgICAgeyByZXR1
cm4gREFTSDsgfQotIn4iICAgICAgICAgeyByZXR1cm4gVElMREU7IH0KLSIrIiAgICAgICAgIHsg
cmV0dXJuIFBMVVM7IH0KLSIqIiAgICAgICAgIHsgcmV0dXJuIFNUQVI7IH0KLSIvIiAgICAgICAg
IHsgcmV0dXJuIFNMQVNIOyB9Ci0iJSIgICAgICAgICB7IHJldHVybiBQRVJDRU5UOyB9Ci0iPCIg
ICAgICAgICB7IHJldHVybiBMRUZUX0FOR0xFOyB9Ci0iPiIgICAgICAgICB7IHJldHVybiBSSUdI
VF9BTkdMRTsgfQotInwiICAgICAgICAgeyByZXR1cm4gVkVSVElDQUxfQkFSOyB9Ci0iXiIgICAg
ICAgICB7IHJldHVybiBDQVJFVDsgfQotIiYiICAgICAgICAgeyByZXR1cm4gQU1QRVJTQU5EOyB9
Ci0iPyIgICAgICAgICB7IHJldHVybiBRVUVTVElPTjsgfQotCi1bIFx0XHZcblxmXHJdIHsgfQot
PDxFT0Y+PiAgICB7IHl5dGVybWluYXRlKCk7IH0KLS4gICAgICAgICAgeyBhc3NlcnQoZmFsc2Up
OyByZXR1cm4gMDsgfQotCi0lJQotCi0jaWYgZGVmaW5lZChfX2NsYW5nX18pCi0jcHJhZ21hIGNs
YW5nIGRpYWdub3N0aWMgcG9wCi0jZW5kaWYKLQoteXlfc2l6ZV90IHN0cmluZ19pbnB1dChjaGFy
KiBidWYsIHl5X3NpemVfdCBtYXhfc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKSB7Ci0gICAgcHA6
OlRva2VuIHRva2VuOwotICAgIHl5Z2V0X2V4dHJhKHl5c2Nhbm5lciktPnByZXByb2Nlc3Nvci5s
ZXgoJnRva2VuKTsKLSAgICB5eV9zaXplX3QgbGVuID0gdG9rZW4udHlwZSA9PSBwcDo6VG9rZW46
OkxBU1QgPyAwIDogdG9rZW4udGV4dC5zaXplKCk7Ci0gICAgaWYgKGxlbiA8IG1heF9zaXplKQot
ICAgICAgICBtZW1jcHkoYnVmLCB0b2tlbi50ZXh0LmNfc3RyKCksIGxlbik7Ci0gICAgeXlzZXRf
Y29sdW1uKHRva2VuLmxvY2F0aW9uLmZpbGUsIHl5c2Nhbm5lcik7Ci0gICAgeXlzZXRfbGluZW5v
KHRva2VuLmxvY2F0aW9uLmxpbmUsIHl5c2Nhbm5lcik7Ci0KLSAgICBpZiAobGVuID49IG1heF9z
aXplKQotICAgICAgICBZWV9GQVRBTF9FUlJPUigiSW5wdXQgYnVmZmVyIG92ZXJmbG93Iik7Ci0g
ICAgZWxzZSBpZiAobGVuID4gMCkKLSAgICAgICAgYnVmW2xlbisrXSA9ICcgJzsKLSAgICByZXR1
cm4gbGVuOwotfQotCi1pbnQgY2hlY2tfdHlwZSh5eXNjYW5fdCB5eXNjYW5uZXIpIHsKLSAgICBz
dHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSB5eXNjYW5uZXI7Ci0gICAg
Ci0gICAgaW50IHRva2VuID0gSURFTlRJRklFUjsKLSAgICBUU3ltYm9sKiBzeW1ib2wgPSB5eWV4
dHJhLT5zeW1ib2xUYWJsZS5maW5kKHl5dGV4dCk7Ci0gICAgaWYgKHN5bWJvbCAmJiBzeW1ib2wt
PmlzVmFyaWFibGUoKSkgewotICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gc3RhdGljX2Nh
c3Q8VFZhcmlhYmxlKj4oc3ltYm9sKTsKLSAgICAgICAgaWYgKHZhcmlhYmxlLT5pc1VzZXJUeXBl
KCkpCi0gICAgICAgICAgICB0b2tlbiA9IFRZUEVfTkFNRTsKLSAgICB9Ci0gICAgeXlsdmFsLT5s
ZXguc3ltYm9sID0gc3ltYm9sOwotICAgIHJldHVybiB0b2tlbjsKLX0KLQotaW50IHJlc2VydmVk
X3dvcmQoeXlzY2FuX3QgeXlzY2FubmVyKSB7Ci0gICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190KikgeXlzY2FubmVyOwotCi0gICAgeXlleHRyYS0+ZXJyb3IoKnl5bGxv
YywgIklsbGVnYWwgdXNlIG9mIHJlc2VydmVkIHdvcmQiLCB5eXRleHQsICIiKTsKLSAgICB5eWV4
dHJhLT5yZWNvdmVyKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgeXllcnJvcihZWUxUWVBF
KiBsbG9jLCBUUGFyc2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pIHsKLSAg
ICBjb250ZXh0LT5lcnJvcigqbGxvYywgcmVhc29uLCB5eWdldF90ZXh0KGNvbnRleHQtPnNjYW5u
ZXIpKTsKLSAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci19Ci0KLWludCBpbnRfY29uc3RhbnQoeXlz
Y2FuX3QgeXlzY2FubmVyKSB7Ci0gICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190KikgeXlzY2FubmVyOwotCi0gICAgaWYgKCFhdG9pX2NsYW1wKHl5dGV4dCwgJih5eWx2
YWwtPmxleC5pKSkpCi0gICAgICAgIHl5ZXh0cmEtPndhcm5pbmcoKnl5bGxvYywgIkludGVnZXIg
b3ZlcmZsb3ciLCB5eXRleHQsICIiKTsKLSAgICByZXR1cm4gSU5UQ09OU1RBTlQ7Ci19Ci0KLWlu
dCBmbG9hdF9jb25zdGFudCh5eXNjYW5fdCB5eXNjYW5uZXIpIHsKLSAgICBzdHJ1Y3QgeXlndXRz
X3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSB5eXNjYW5uZXI7Ci0KLSAgICBpZiAoIWF0b2Zf
Y2xhbXAoeXl0ZXh0LCAmKHl5bHZhbC0+bGV4LmYpKSkKLSAgICAgICAgeXlleHRyYS0+d2Fybmlu
ZygqeXlsbG9jLCAiRmxvYXQgb3ZlcmZsb3ciLCB5eXRleHQsICIiKTsKLSAgICByZXR1cm4gRkxP
QVRDT05TVEFOVDsKLX0KLQotaW50IGdsc2xhbmdfaW5pdGlhbGl6ZShUUGFyc2VDb250ZXh0KiBj
b250ZXh0KSB7Ci0gICAgeXlzY2FuX3Qgc2Nhbm5lciA9IE5VTEw7Ci0gICAgaWYgKHl5bGV4X2lu
aXRfZXh0cmEoY29udGV4dCwgJnNjYW5uZXIpKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIGNv
bnRleHQtPnNjYW5uZXIgPSBzY2FubmVyOwotICAgIHJldHVybiAwOwotfQotCi1pbnQgZ2xzbGFu
Z19maW5hbGl6ZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7Ci0gICAgeXlzY2FuX3Qgc2Nhbm5l
ciA9IGNvbnRleHQtPnNjYW5uZXI7Ci0gICAgaWYgKHNjYW5uZXIgPT0gTlVMTCkgcmV0dXJuIDA7
Ci0gICAgCi0gICAgY29udGV4dC0+c2Nhbm5lciA9IE5VTEw7Ci0gICAgeXlsZXhfZGVzdHJveShz
Y2FubmVyKTsKLQotICAgIHJldHVybiAwOwotfQotCi1pbnQgZ2xzbGFuZ19zY2FuKHNpemVfdCBj
b3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKLSAg
ICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4dCogY29udGV4dCkgewotICAgIHl5cmVzdGFydChO
VUxMLCBjb250ZXh0LT5zY2FubmVyKTsKLSAgICB5eXNldF9jb2x1bW4oMCwgY29udGV4dC0+c2Nh
bm5lcik7Ci0gICAgeXlzZXRfbGluZW5vKDEsIGNvbnRleHQtPnNjYW5uZXIpOwotCi0gICAgLy8g
SW5pdGlhbGl6ZSBwcmVwcm9jZXNzb3IuCi0gICAgaWYgKCFjb250ZXh0LT5wcmVwcm9jZXNzb3Iu
aW5pdChjb3VudCwgc3RyaW5nLCBsZW5ndGgpKQotICAgICAgICByZXR1cm4gMTsKLSAgICBjb250
ZXh0LT5wcmVwcm9jZXNzb3Iuc2V0TWF4VG9rZW5MZW5ndGgoU0hfTUFYX1RPS0VOX0xFTkdUSCk7
Ci0KLSAgICAvLyBEZWZpbmUgZXh0ZW5zaW9uIG1hY3Jvcy4KLSAgICBjb25zdCBURXh0ZW5zaW9u
QmVoYXZpb3ImIGV4dEJlaGF2aW9yID0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IoKTsKLSAg
ICBmb3IgKFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dEJlaGF2
aW9yLmJlZ2luKCk7Ci0gICAgICAgICBpdGVyICE9IGV4dEJlaGF2aW9yLmVuZCgpOyArK2l0ZXIp
IHsKLSAgICAgICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnByZWRlZmluZU1hY3JvKGl0ZXItPmZp
cnN0LmNfc3RyKCksIDEpOwotICAgIH0KLSAgICBpZiAoY29udGV4dC0+ZnJhZ21lbnRQcmVjaXNp
b25IaWdoKQotICAgICAgICBjb250ZXh0LT5wcmVwcm9jZXNzb3IucHJlZGVmaW5lTWFjcm8oIkdM
X0ZSQUdNRU5UX1BSRUNJU0lPTl9ISUdIIiwgMSk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcueSBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLnkKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlZDVkNzg3MWFhM2I2ZmE3NTRlZTlmZWEwNjk1NTZjZDU5
OGU3MDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcueQorKysgL2Rldi9udWxs
CkBAIC0xLDIwMDMgKzAsMCBAQAotLyoKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLVRoaXMgZmlsZSBj
b250YWlucyB0aGUgWWFjYyBncmFtbWFyIGZvciBHTFNMIEVTLgotQmFzZWQgb24gQU5TSSBDIFlh
Y2MgZ3JhbW1hcjoKLWh0dHA6Ly93d3cubHlzYXRvci5saXUuc2UvYy9BTlNJLUMtZ3JhbW1hci15
Lmh0bWwKLQotSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2Vu
ZXJhdGVfcGFyc2VyLnNoLAotV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIFBBUlNFUiAoZ2xz
bGFuZ190YWIuY3BwIEFORCBnbHNsYW5nX3RhYi5oKS4KLSovCi0KLSV7Ci0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
Ci0vLwotCi0vLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2Vy
LnNoLiBETyBOT1QgRURJVCEKLQotLy8gSWdub3JlIGVycm9ycyBpbiBhdXRvLWdlbmVyYXRlZCBj
b2RlLgotI2lmIGRlZmluZWQoX19HTlVDX18pCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9y
ZWQgIi1XdW51c2VkLWZ1bmN0aW9uIgotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICIt
V3VudXNlZC12YXJpYWJsZSIKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdzd2l0
Y2gtZW51bSIKLSNlbGlmIGRlZmluZWQoX01TQ19WRVIpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJs
ZTogNDA2NSkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MTg5KQotI3ByYWdtYSB3YXJuaW5n
KGRpc2FibGU6IDQ1MDUpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcwMSkKLSNlbmRpZgot
Ci0jaW5jbHVkZSAiY29tcGlsZXIvU3ltYm9sVGFibGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9Q
YXJzZUNvbnRleHQuaCIKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLQotI2RlZmlu
ZSBZWUVOQUJMRV9OTFMgMAotCi0jZGVmaW5lIFlZTEVYX1BBUkFNIGNvbnRleHQtPnNjYW5uZXIK
LSV9Ci0KLSVleHBlY3QgMSAvKiBPbmUgc2hpZnQgcmVkdWNlIGNvbmZsaWN0IGJlY2F1c2Ugb2Yg
aWYgfCBlbHNlICovCi0lcHVyZS1wYXJzZXIKLSVwYXJzZS1wYXJhbSB7VFBhcnNlQ29udGV4dCog
Y29udGV4dH0KLSVsb2NhdGlvbnMKLSVsZXgtcGFyYW0ge1lZTEVYX1BBUkFNfQotCi0lY29kZSBy
ZXF1aXJlcyB7Ci0jZGVmaW5lIFlZTFRZUEUgVFNvdXJjZUxvYwotI2RlZmluZSBZWUxUWVBFX0lT
X0RFQ0xBUkVEIDEKLSNkZWZpbmUgU0hfTUFYX1RPS0VOX0xFTkdUSCAyNTYgIC8vIFdlYkdMIHNw
ZWMuCi19Ci0KLSV1bmlvbiB7Ci0gICAgc3RydWN0IHsKLSAgICAgICAgdW5pb24gewotICAgICAg
ICAgICAgVFN0cmluZyAqc3RyaW5nOwotICAgICAgICAgICAgZmxvYXQgZjsKLSAgICAgICAgICAg
IGludCBpOwotICAgICAgICAgICAgYm9vbCBiOwotICAgICAgICB9OwotICAgICAgICBUU3ltYm9s
KiBzeW1ib2w7Ci0gICAgfSBsZXg7Ci0gICAgc3RydWN0IHsKLSAgICAgICAgVE9wZXJhdG9yIG9w
OwotICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsK
LSAgICAgICAgICAgIFRJbnRlcm1Ob2RlUGFpciBub2RlUGFpcjsKLSAgICAgICAgICAgIFRJbnRl
cm1UeXBlZCogaW50ZXJtVHlwZWROb2RlOwotICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSog
aW50ZXJtQWdncmVnYXRlOwotICAgICAgICB9OwotICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAg
ICBUUHVibGljVHlwZSB0eXBlOwotICAgICAgICAgICAgVFByZWNpc2lvbiBwcmVjaXNpb247Ci0g
ICAgICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllcjsKLSAgICAgICAgICAgIFRGdW5jdGlvbiog
ZnVuY3Rpb247Ci0gICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtOwotICAgICAgICAgICAgVEZp
ZWxkKiBmaWVsZDsKLSAgICAgICAgICAgIFRGaWVsZExpc3QqIGZpZWxkTGlzdDsKLSAgICAgICAg
fTsKLSAgICB9IGludGVybTsKLX0KLQotJXsKLWV4dGVybiBpbnQgeXlsZXgoWVlTVFlQRSogeXls
dmFsLCBZWUxUWVBFKiB5eWxsb2MsIHZvaWQqIHl5c2Nhbm5lcik7Ci1leHRlcm4gdm9pZCB5eWVy
cm9yKFlZTFRZUEUqIHl5bGxvYywgVFBhcnNlQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciog
cmVhc29uKTsKLQotI2RlZmluZSBZWUxMT0NfREVGQVVMVChDdXJyZW50LCBSaHMsIE4pICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZiAoTikgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAoQ3VycmVudCkuZmlyc3Rf
ZmlsZSA9IFlZUkhTTE9DKFJocywgMSkuZmlyc3RfZmlsZTsgIFwKLSAgICAgICAgKEN1cnJlbnQp
LmZpcnN0X2xpbmUgPSBZWVJIU0xPQyhSaHMsIDEpLmZpcnN0X2xpbmU7ICBcCi0gICAgICAgIChD
dXJyZW50KS5sYXN0X2ZpbGUgPSBZWVJIU0xPQyhSaHMsIE4pLmxhc3RfZmlsZTsgICAgXAotICAg
ICAgICAoQ3VycmVudCkubGFzdF9saW5lID0gWVlSSFNMT0MoUmhzLCBOKS5sYXN0X2xpbmU7ICAg
IFwKLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICAoQ3VycmVudCkuZmlyc3RfZmlsZSA9IFlZUkhTTE9D
KFJocywgMCkubGFzdF9maWxlOyAgIFwKLSAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgPSBZ
WVJIU0xPQyhSaHMsIDApLmxhc3RfbGluZTsgICBcCi0gICAgICAgIChDdXJyZW50KS5sYXN0X2Zp
bGUgPSBZWVJIU0xPQyhSaHMsIDApLmxhc3RfZmlsZTsgICAgXAotICAgICAgICAoQ3VycmVudCku
bGFzdF9saW5lID0gWVlSSFNMT0MoUmhzLCAwKS5sYXN0X2xpbmU7ICAgIFwKLSAgICAgIH0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0g
d2hpbGUgKDApCi0KLSNkZWZpbmUgVkVSVEVYX09OTFkoUywgTCkgeyAgXAotICAgIGlmIChjb250
ZXh0LT5zaGFkZXJUeXBlICE9IFNIX1ZFUlRFWF9TSEFERVIpIHsgIFwKLSAgICAgICAgY29udGV4
dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4IHNoYWRlcnMgb25seSAiLCBTKTsgIFwK
LSAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAotICAgIH0gIFwKLX0KLQotI2RlZmluZSBG
UkFHX09OTFkoUywgTCkgeyAgXAotICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNIX0ZS
QUdNRU5UX1NIQURFUikgeyAgXAotICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRl
ZCBpbiBmcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCi0gICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsgIFwKLSAgICB9ICBcCi19Ci0lfQotCi0ldG9rZW4gPGxleD4gSU5WQVJJQU5UIEhJ
R0hfUFJFQ0lTSU9OIE1FRElVTV9QUkVDSVNJT04gTE9XX1BSRUNJU0lPTiBQUkVDSVNJT04KLSV0
b2tlbiA8bGV4PiBBVFRSSUJVVEUgQ09OU1RfUVVBTCBCT09MX1RZUEUgRkxPQVRfVFlQRSBJTlRf
VFlQRQotJXRva2VuIDxsZXg+IEJSRUFLIENPTlRJTlVFIERPIEVMU0UgRk9SIElGIERJU0NBUkQg
UkVUVVJOCi0ldG9rZW4gPGxleD4gQlZFQzIgQlZFQzMgQlZFQzQgSVZFQzIgSVZFQzMgSVZFQzQg
VkVDMiBWRUMzIFZFQzQKLSV0b2tlbiA8bGV4PiBNQVRSSVgyIE1BVFJJWDMgTUFUUklYNCBJTl9R
VUFMIE9VVF9RVUFMIElOT1VUX1FVQUwgVU5JRk9STSBWQVJZSU5HCi0ldG9rZW4gPGxleD4gU1RS
VUNUIFZPSURfVFlQRSBXSElMRQotJXRva2VuIDxsZXg+IFNBTVBMRVIyRCBTQU1QTEVSQ1VCRSBT
QU1QTEVSX0VYVEVSTkFMX09FUyBTQU1QTEVSMkRSRUNUCi0KLSV0b2tlbiA8bGV4PiBJREVOVElG
SUVSIFRZUEVfTkFNRSBGTE9BVENPTlNUQU5UIElOVENPTlNUQU5UIEJPT0xDT05TVEFOVAotJXRv
a2VuIDxsZXg+IExFRlRfT1AgUklHSFRfT1AKLSV0b2tlbiA8bGV4PiBJTkNfT1AgREVDX09QIExF
X09QIEdFX09QIEVRX09QIE5FX09QCi0ldG9rZW4gPGxleD4gQU5EX09QIE9SX09QIFhPUl9PUCBN
VUxfQVNTSUdOIERJVl9BU1NJR04gQUREX0FTU0lHTgotJXRva2VuIDxsZXg+IE1PRF9BU1NJR04g
TEVGVF9BU1NJR04gUklHSFRfQVNTSUdOIEFORF9BU1NJR04gWE9SX0FTU0lHTiBPUl9BU1NJR04K
LSV0b2tlbiA8bGV4PiBTVUJfQVNTSUdOCi0KLSV0b2tlbiA8bGV4PiBMRUZUX1BBUkVOIFJJR0hU
X1BBUkVOIExFRlRfQlJBQ0tFVCBSSUdIVF9CUkFDS0VUIExFRlRfQlJBQ0UgUklHSFRfQlJBQ0Ug
RE9UCi0ldG9rZW4gPGxleD4gQ09NTUEgQ09MT04gRVFVQUwgU0VNSUNPTE9OIEJBTkcgREFTSCBU
SUxERSBQTFVTIFNUQVIgU0xBU0ggUEVSQ0VOVAotJXRva2VuIDxsZXg+IExFRlRfQU5HTEUgUklH
SFRfQU5HTEUgVkVSVElDQUxfQkFSIENBUkVUIEFNUEVSU0FORCBRVUVTVElPTgotCi0ldHlwZSA8
bGV4PiBpZGVudGlmaWVyCi0ldHlwZSA8aW50ZXJtPiBhc3NpZ25tZW50X29wZXJhdG9yIHVuYXJ5
X29wZXJhdG9yCi0ldHlwZSA8aW50ZXJtLmludGVybVR5cGVkTm9kZT4gdmFyaWFibGVfaWRlbnRp
ZmllciBwcmltYXJ5X2V4cHJlc3Npb24gcG9zdGZpeF9leHByZXNzaW9uCi0ldHlwZSA8aW50ZXJt
LmludGVybVR5cGVkTm9kZT4gZXhwcmVzc2lvbiBpbnRlZ2VyX2V4cHJlc3Npb24gYXNzaWdubWVu
dF9leHByZXNzaW9uCi0ldHlwZSA8aW50ZXJtLmludGVybVR5cGVkTm9kZT4gdW5hcnlfZXhwcmVz
c2lvbiBtdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uIGFkZGl0aXZlX2V4cHJlc3Npb24KLSV0eXBl
IDxpbnRlcm0uaW50ZXJtVHlwZWROb2RlPiByZWxhdGlvbmFsX2V4cHJlc3Npb24gZXF1YWxpdHlf
ZXhwcmVzc2lvbgotJXR5cGUgPGludGVybS5pbnRlcm1UeXBlZE5vZGU+IGNvbmRpdGlvbmFsX2V4
cHJlc3Npb24gY29uc3RhbnRfZXhwcmVzc2lvbgotJXR5cGUgPGludGVybS5pbnRlcm1UeXBlZE5v
ZGU+IGxvZ2ljYWxfb3JfZXhwcmVzc2lvbiBsb2dpY2FsX3hvcl9leHByZXNzaW9uIGxvZ2ljYWxf
YW5kX2V4cHJlc3Npb24KLSV0eXBlIDxpbnRlcm0uaW50ZXJtVHlwZWROb2RlPiBzaGlmdF9leHBy
ZXNzaW9uIGFuZF9leHByZXNzaW9uIGV4Y2x1c2l2ZV9vcl9leHByZXNzaW9uIGluY2x1c2l2ZV9v
cl9leHByZXNzaW9uCi0ldHlwZSA8aW50ZXJtLmludGVybVR5cGVkTm9kZT4gZnVuY3Rpb25fY2Fs
bCBpbml0aWFsaXplciBjb25kaXRpb24gY29uZGl0aW9ub3B0Ci0KLSV0eXBlIDxpbnRlcm0uaW50
ZXJtTm9kZT4gdHJhbnNsYXRpb25fdW5pdCBmdW5jdGlvbl9kZWZpbml0aW9uCi0ldHlwZSA8aW50
ZXJtLmludGVybU5vZGU+IHN0YXRlbWVudCBzaW1wbGVfc3RhdGVtZW50Ci0ldHlwZSA8aW50ZXJt
LmludGVybUFnZ3JlZ2F0ZT4gIHN0YXRlbWVudF9saXN0IGNvbXBvdW5kX3N0YXRlbWVudAotJXR5
cGUgPGludGVybS5pbnRlcm1Ob2RlPiBkZWNsYXJhdGlvbl9zdGF0ZW1lbnQgc2VsZWN0aW9uX3N0
YXRlbWVudCBleHByZXNzaW9uX3N0YXRlbWVudAotJXR5cGUgPGludGVybS5pbnRlcm1Ob2RlPiBk
ZWNsYXJhdGlvbiBleHRlcm5hbF9kZWNsYXJhdGlvbgotJXR5cGUgPGludGVybS5pbnRlcm1Ob2Rl
PiBmb3JfaW5pdF9zdGF0ZW1lbnQgY29tcG91bmRfc3RhdGVtZW50X25vX25ld19zY29wZQotJXR5
cGUgPGludGVybS5ub2RlUGFpcj4gc2VsZWN0aW9uX3Jlc3Rfc3RhdGVtZW50IGZvcl9yZXN0X3N0
YXRlbWVudAotJXR5cGUgPGludGVybS5pbnRlcm1Ob2RlPiBpdGVyYXRpb25fc3RhdGVtZW50IGp1
bXBfc3RhdGVtZW50IHN0YXRlbWVudF9ub19uZXdfc2NvcGUgc3RhdGVtZW50X3dpdGhfc2NvcGUK
LSV0eXBlIDxpbnRlcm0+IHNpbmdsZV9kZWNsYXJhdGlvbiBpbml0X2RlY2xhcmF0b3JfbGlzdAot
Ci0ldHlwZSA8aW50ZXJtPiBwYXJhbWV0ZXJfZGVjbGFyYXRpb24gcGFyYW1ldGVyX2RlY2xhcmF0
b3IgcGFyYW1ldGVyX3R5cGVfc3BlY2lmaWVyCi0ldHlwZSA8aW50ZXJtLnF1YWxpZmllcj4gcGFy
YW1ldGVyX3F1YWxpZmllcgotCi0ldHlwZSA8aW50ZXJtLnByZWNpc2lvbj4gcHJlY2lzaW9uX3F1
YWxpZmllcgotJXR5cGUgPGludGVybS50eXBlPiB0eXBlX3F1YWxpZmllciBmdWxseV9zcGVjaWZp
ZWRfdHlwZSB0eXBlX3NwZWNpZmllcgotJXR5cGUgPGludGVybS50eXBlPiB0eXBlX3NwZWNpZmll
cl9ub19wcmVjIHR5cGVfc3BlY2lmaWVyX25vbmFycmF5Ci0ldHlwZSA8aW50ZXJtLnR5cGU+IHN0
cnVjdF9zcGVjaWZpZXIKLSV0eXBlIDxpbnRlcm0uZmllbGQ+IHN0cnVjdF9kZWNsYXJhdG9yCi0l
dHlwZSA8aW50ZXJtLmZpZWxkTGlzdD4gc3RydWN0X2RlY2xhcmF0b3JfbGlzdCBzdHJ1Y3RfZGVj
bGFyYXRpb24gc3RydWN0X2RlY2xhcmF0aW9uX2xpc3QKLSV0eXBlIDxpbnRlcm0uZnVuY3Rpb24+
IGZ1bmN0aW9uX2hlYWRlciBmdW5jdGlvbl9kZWNsYXJhdG9yIGZ1bmN0aW9uX2lkZW50aWZpZXIK
LSV0eXBlIDxpbnRlcm0uZnVuY3Rpb24+IGZ1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMg
ZnVuY3Rpb25fY2FsbF9oZWFkZXIKLSV0eXBlIDxpbnRlcm0+IGZ1bmN0aW9uX2NhbGxfaGVhZGVy
X3dpdGhfcGFyYW1ldGVycyBmdW5jdGlvbl9jYWxsX2hlYWRlcl9ub19wYXJhbWV0ZXJzIGZ1bmN0
aW9uX2NhbGxfZ2VuZXJpYyBmdW5jdGlvbl9wcm90b3R5cGUKLSV0eXBlIDxpbnRlcm0+IGZ1bmN0
aW9uX2NhbGxfb3JfbWV0aG9kCi0KLSVzdGFydCB0cmFuc2xhdGlvbl91bml0Ci0lJQotCi1pZGVu
dGlmaWVyCi0gICAgOiBJREVOVElGSUVSCi0gICAgfCBUWVBFX05BTUUKLQotdmFyaWFibGVfaWRl
bnRpZmllcgotICAgIDogSURFTlRJRklFUiB7Ci0gICAgICAgIC8vIFRoZSBzeW1ib2wgdGFibGUg
c2VhcmNoIHdhcyBkb25lIGluIHRoZSBsZXhpY2FsIHBoYXNlCi0gICAgICAgIGNvbnN0IFRTeW1i
b2wqIHN5bWJvbCA9ICQxLnN5bWJvbDsKLSAgICAgICAgY29uc3QgVFZhcmlhYmxlKiB2YXJpYWJs
ZTsKLSAgICAgICAgaWYgKHN5bWJvbCA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJv
cihAMSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciIsICQxLnN0cmluZy0+Y19zdHIoKSk7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBUVHlwZSB0eXBlKEVidEZs
b2F0LCBFYnBVbmRlZmluZWQpOwotICAgICAgICAgICAgVFZhcmlhYmxlKiBmYWtlVmFyaWFibGUg
PSBuZXcgVFZhcmlhYmxlKCQxLnN0cmluZywgdHlwZSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5z
eW1ib2xUYWJsZS5pbnNlcnQoKmZha2VWYXJpYWJsZSk7Ci0gICAgICAgICAgICB2YXJpYWJsZSA9
IGZha2VWYXJpYWJsZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaWRl
bnRpZmllciBjYW4gb25seSBiZSBhIHZhcmlhYmxlIHR5cGUgc3ltYm9sCi0gICAgICAgICAgICBp
ZiAoISBzeW1ib2wtPmlzVmFyaWFibGUoKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKEAxLCAidmFyaWFibGUgZXhwZWN0ZWQiLCAkMS5zdHJpbmctPmNfc3RyKCkpOwotICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxjb25zdCBUVmFyaWFibGUqPihz
eW1ib2wpOwotCi0gICAgICAgICAgICBpZiAoY29udGV4dC0+c3ltYm9sVGFibGUuZmluZEJ1aWx0
SW4odmFyaWFibGUtPmdldE5hbWUoKSkgJiYKLSAgICAgICAgICAgICAgICAhdmFyaWFibGUtPmdl
dEV4dGVuc2lvbigpLmVtcHR5KCkgJiYKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5leHRlbnNp
b25FcnJvckNoZWNrKEAxLCB2YXJpYWJsZS0+Z2V0RXh0ZW5zaW9uKCkpKSB7Ci0gICAgICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gZG9uJ3QgZGVsZXRlICQxLnN0cmluZywgaXQncyB1c2VkIGJ5IGVycm9yIHJlY292
ZXJ5LCBhbmQgdGhlIHBvb2wKLSAgICAgICAgLy8gcG9wIHdpbGwgcmVjbGFpbSB0aGUgbWVtb3J5
Ci0KLSAgICAgICAgaWYgKHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZx
Q29uc3QgKSB7Ci0gICAgICAgICAgICBDb25zdGFudFVuaW9uKiBjb25zdEFycmF5ID0gdmFyaWFi
bGUtPmdldENvbnN0UG9pbnRlcigpOwotICAgICAgICAgICAgVFR5cGUgdCh2YXJpYWJsZS0+Z2V0
VHlwZSgpKTsKLSAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0
YW50VW5pb24oY29uc3RBcnJheSwgdCwgQDEpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZS0+Z2V0VW5pcXVl
SWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXJpYWJsZS0+Z2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQDEpOwotICAgIH0KLSAgICA7Ci0KLXByaW1hcnlf
ZXhwcmVzc2lvbgotICAgIDogdmFyaWFibGVfaWRlbnRpZmllciB7Ci0gICAgICAgICQkID0gJDE7
Ci0gICAgfQotICAgIHwgSU5UQ09OU1RBTlQgewotICAgICAgICBDb25zdGFudFVuaW9uICp1bmlv
bkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgIHVuaW9uQXJyYXktPnNldElD
b25zdCgkMS5pKTsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3Rh
bnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3Qp
LCBAMSk7Ci0gICAgfQotICAgIHwgRkxPQVRDT05TVEFOVCB7Ci0gICAgICAgIENvbnN0YW50VW5p
b24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgdW5pb25BcnJh
eS0+c2V0RkNvbnN0KCQxLmYpOwotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQs
IEV2cUNvbnN0KSwgQDEpOwotICAgIH0KLSAgICB8IEJPT0xDT05TVEFOVCB7Ci0gICAgICAgIENv
bnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAg
dW5pb25BcnJheS0+c2V0QkNvbnN0KCQxLmIpOwotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QpLCBAMSk7Ci0gICAgfQotICAgIHwgTEVGVF9QQVJFTiBleHByZXNz
aW9uIFJJR0hUX1BBUkVOIHsKLSAgICAgICAgJCQgPSAkMjsKLSAgICB9Ci0gICAgOwotCi1wb3N0
Zml4X2V4cHJlc3Npb24KLSAgICA6IHByaW1hcnlfZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0g
JDE7Ci0gICAgfQotICAgIHwgcG9zdGZpeF9leHByZXNzaW9uIExFRlRfQlJBQ0tFVCBpbnRlZ2Vy
X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7Ci0gICAgICAgICQkID0gY29udGV4dC0+YWRkSW5k
ZXhFeHByZXNzaW9uKCQxLCBAMiwgJDMpOwotICAgIH0KLSAgICB8IGZ1bmN0aW9uX2NhbGwgewot
ICAgICAgICAkJCA9ICQxOwotICAgIH0KLSAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBET1QgaWRl
bnRpZmllciB7Ci0gICAgICAgIGlmICgkMS0+aXNBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb250
ZXh0LT5lcnJvcihAMywgImNhbm5vdCBhcHBseSBkb3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAi
LiIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKCQxLT5pc1ZlY3RvcigpKSB7Ci0gICAgICAgICAgICBUVmVjdG9yRmllbGRzIGZpZWxk
czsKLSAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnBhcnNlVmVjdG9yRmllbGRzKCokMy5zdHJp
bmcsICQxLT5nZXROb21pbmFsU2l6ZSgpLCBmaWVsZHMsIEAzKSkgewotICAgICAgICAgICAgICAg
IGZpZWxkcy5udW0gPSAxOwotICAgICAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzWzBdID0gMDsK
LSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmICgkMS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7
IC8vIGNvbnN0YW50IGZvbGRpbmcgZm9yIHZlY3RvciBmaWVsZHMKLSAgICAgICAgICAgICAgICAk
JCA9IGNvbnRleHQtPmFkZENvbnN0VmVjdG9yTm9kZShmaWVsZHMsICQxLCBAMyk7Ci0gICAgICAg
ICAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRU
eXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigpLCBFdnFDb25zdCwgKGlu
dCkgKCokMy5zdHJpbmcpLnNpemUoKSkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBUU3RyaW5nIHZlY3RvclN0cmluZyA9ICokMy5zdHJpbmc7Ci0gICAgICAgICAgICAg
ICAgVEludGVybVR5cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTd2l6emxl
KGZpZWxkcywgQDMpOwotICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEluZGV4KEVPcFZlY3RvclN3aXp6bGUsICQxLCBpbmRleCwgQDIpOwotICAgICAgICAgICAg
ICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNpc2lv
bigpLCBFdnFUZW1wb3JhcnksIChpbnQpIHZlY3RvclN0cmluZy5zaXplKCkpKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICgkMS0+aXNNYXRyaXgoKSkgewotICAgICAgICAgICAg
VE1hdHJpeEZpZWxkcyBmaWVsZHM7Ci0gICAgICAgICAgICBpZiAoISBjb250ZXh0LT5wYXJzZU1h
dHJpeEZpZWxkcygqJDMuc3RyaW5nLCAkMS0+Z2V0Tm9taW5hbFNpemUoKSwgZmllbGRzLCBAMykp
IHsKLSAgICAgICAgICAgICAgICBmaWVsZHMud2hvbGVSb3cgPSBmYWxzZTsKLSAgICAgICAgICAg
ICAgICBmaWVsZHMud2hvbGVDb2wgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBmaWVsZHMucm93
ID0gMDsKLSAgICAgICAgICAgICAgICBmaWVsZHMuY29sID0gMDsKLSAgICAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChmaWVs
ZHMud2hvbGVSb3cgfHwgZmllbGRzLndob2xlQ29sKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoQDIsICIgbm9uLXNjYWxhciBmaWVsZHMgbm90IGltcGxlbWVudGVkIHlldCIsICIu
Iik7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAg
IENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAg
ICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoMCk7Ci0gICAgICAgICAgICAgICAgVElu
dGVybVR5cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9u
KHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAzKTsK
LSAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJ
bmRleERpcmVjdCwgJDEsIGluZGV4LCBAMik7Ci0gICAgICAgICAgICAgICAgJCQtPnNldFR5cGUo
VFR5cGUoJDEtPmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCksRXZxVGVtcG9yYXJ5
LCAkMS0+Z2V0Tm9taW5hbFNpemUoKSkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07
Ci0gICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGZpZWxkcy5jb2wgKiAkMS0+
Z2V0Tm9taW5hbFNpemUoKSArIGZpZWxkcy5yb3cpOwotICAgICAgICAgICAgICAgIFRJbnRlcm1U
eXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlv
bkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMyk7Ci0gICAg
ICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhE
aXJlY3QsICQxLCBpbmRleCwgQDIpOwotICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBl
KCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigpKSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0gZWxzZSBpZiAoJDEtPmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgewot
ICAgICAgICAgICAgYm9vbCBmaWVsZEZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICBjb25zdCBU
RmllbGRMaXN0JiBmaWVsZHMgPSAkMS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpLT5maWVsZHMoKTsK
LSAgICAgICAgICAgIHVuc2lnbmVkIGludCBpOwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8
IGZpZWxkcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChmaWVsZHNbaV0tPm5h
bWUoKSA9PSAqJDMuc3RyaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpZWxkRm91bmQgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZmllbGRGb3VuZCkgewotICAgICAgICAgICAgICAg
IGlmICgkMS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7Ci0gICAgICAg
ICAgICAgICAgICAgICQkID0gY29udGV4dC0+YWRkQ29uc3RTdHJ1Y3QoKiQzLnN0cmluZywgJDEs
IEAyKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICQk
ID0gJDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZSgqZmllbGRzW2ldLT50eXBlKCkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlIHRoZSBxdWFsaWZpZXIgb2YgdGhl
IHJldHVybiB0eXBlLCBub3Qgb2YgdGhlIHN0cnVjdHVyZSBmaWVsZAotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gYXMgdGhlIHN0cnVjdHVyZSBkZWZpbml0aW9uIGlzIHNoYXJlZCBiZXR3ZWVu
IHZhcmlvdXMgc3RydWN0dXJlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICQkLT5nZXRUeXBl
UG9pbnRlcigpLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3QpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRV
bmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAg
ICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoaSk7Ci0gICAgICAgICAgICAgICAgICAgIFRJbnRl
cm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1
bmlvbkFycmF5LCAqZmllbGRzW2ldLT50eXBlKCksIEAzKTsKLSAgICAgICAgICAgICAgICAgICAg
JCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3RTdHJ1Y3Qs
ICQxLCBpbmRleCwgQDIpOwotICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZSgqZmllbGRz
W2ldLT50eXBlKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICIgbm8gc3VjaCBmaWVsZCBpbiBzdHJ1
Y3R1cmUiLCAkMy5zdHJpbmctPmNfc3RyKCkpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICIgZmllbGQgc2VsZWN0
aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24gbGVmdCBoYW5kIHNp
ZGUiLCAkMy5zdHJpbmctPmNfc3RyKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgfQotICAgICAgICAvLyBkb24ndCBkZWxl
dGUgJDMuc3RyaW5nLCBpdCdzIGZyb20gdGhlIHBvb2wKLSAgICB9Ci0gICAgfCBwb3N0Zml4X2V4
cHJlc3Npb24gSU5DX09QIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2so
QDIsICIrKyIsICQxKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
JCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFBvc3RJbmNyZW1lbnQs
ICQxLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoJCQgPT0gMCkgewot
ICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKEAyLCAiKysiLCAkMS0+Z2V0Q29tcGxl
dGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAg
ICAkJCA9ICQxOwotICAgICAgICB9Ci0gICAgfQotICAgIHwgcG9zdGZpeF9leHByZXNzaW9uIERF
Q19PUCB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKEAyLCAiLS0iLCAk
MSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICQkID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQb3N0RGVjcmVtZW50LCAkMSwgQDIsIGNv
bnRleHQtPnN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAg
IGNvbnRleHQtPnVuYXJ5T3BFcnJvcihAMiwgIi0tIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCkp
OwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgJCQgPSAkMTsK
LSAgICAgICAgfQotICAgIH0KLSAgICA7Ci0KLWludGVnZXJfZXhwcmVzc2lvbgotICAgIDogZXhw
cmVzc2lvbiB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5pbnRlZ2VyRXJyb3JDaGVjaygkMSwgIltd
IikpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICQkID0gJDE7Ci0g
ICAgfQotICAgIDsKLQotZnVuY3Rpb25fY2FsbAotICAgIDogZnVuY3Rpb25fY2FsbF9vcl9tZXRo
b2QgewotICAgICAgICBURnVuY3Rpb24qIGZuQ2FsbCA9ICQxLmZ1bmN0aW9uOwotICAgICAgICBU
T3BlcmF0b3Igb3AgPSBmbkNhbGwtPmdldEJ1aWx0SW5PcCgpOwotCi0gICAgICAgIGlmIChvcCAh
PSBFT3BOdWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gVGhl
biB0aGlzIHNob3VsZCBiZSBhIGNvbnN0cnVjdG9yLgotICAgICAgICAgICAgLy8gRG9uJ3QgZ28g
dGhyb3VnaCB0aGUgc3ltYm9sIHRhYmxlIGZvciBjb25zdHJ1Y3RvcnMuCi0gICAgICAgICAgICAv
LyBUaGVpciBwYXJhbWV0ZXJzIHdpbGwgYmUgdmVyaWZpZWQgYWxnb3JpdGhtaWNhbGx5LgotICAg
ICAgICAgICAgLy8KLSAgICAgICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVk
KTsgIC8vIHVzZSB0aGlzIHRvIGdldCB0aGUgdHlwZSBiYWNrCi0gICAgICAgICAgICBpZiAoY29u
dGV4dC0+Y29uc3RydWN0b3JFcnJvckNoZWNrKEAxLCAkMS5pbnRlcm1Ob2RlLCAqZm5DYWxsLCBv
cCwgJnR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgJCQgPSAwOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIC8vIEl0J3MgYSBjb25zdHJ1
Y3Rvciwgb2YgdHlwZSAndHlwZScuCi0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAg
ICAkJCA9IGNvbnRleHQtPmFkZENvbnN0cnVjdG9yKCQxLmludGVybU5vZGUsICZ0eXBlLCBvcCwg
Zm5DYWxsLCBAMSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgkJCA9PSAwKSB7
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICQk
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKDAsIG9wLCBAMSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAkJC0+c2V0VHlwZSh0eXBlKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBOb3QgYSBjb25zdHJ1Y3Rv
ci4gIEZpbmQgaXQgaW4gdGhlIHN5bWJvbCB0YWJsZS4KLSAgICAgICAgICAgIC8vCi0gICAgICAg
ICAgICBjb25zdCBURnVuY3Rpb24qIGZuQ2FuZGlkYXRlOwotICAgICAgICAgICAgYm9vbCBidWls
dEluOwotICAgICAgICAgICAgZm5DYW5kaWRhdGUgPSBjb250ZXh0LT5maW5kRnVuY3Rpb24oQDEs
IGZuQ2FsbCwgJmJ1aWx0SW4pOwotICAgICAgICAgICAgaWYgKGZuQ2FuZGlkYXRlKSB7Ci0gICAg
ICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAvLyBBIGRlY2xhcmVkIGZ1bmN0aW9uLgot
ICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgaWYgKGJ1aWx0SW4gJiYgIWZuQ2Fu
ZGlkYXRlLT5nZXRFeHRlbnNpb24oKS5lbXB0eSgpICYmCi0gICAgICAgICAgICAgICAgICAgIGNv
bnRleHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soQDEsIGZuQ2FuZGlkYXRlLT5nZXRFeHRlbnNpb24o
KSkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBvcCA9IGZuQ2FuZGlkYXRlLT5nZXRCdWlsdEluT3Ao
KTsKLSAgICAgICAgICAgICAgICBpZiAoYnVpbHRJbiAmJiBvcCAhPSBFT3BOdWxsKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgIC8vIEEgZnVuY3Rpb24gY2Fs
bCBtYXBwZWQgdG8gYSBidWlsdC1pbiBvcGVyYXRpb24uCi0gICAgICAgICAgICAgICAgICAgIC8v
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmbkNhbmRpZGF0ZS0+Z2V0UGFyYW1Db3VudCgpID09
IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBUcmVhdCBpdCBsaWtlIGEgYnVpbHQtaW4gdW5hcnkgb3BlcmF0b3IuCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKG9wLCAkMS5pbnRlcm1Ob2RlLCBAMSwgY29udGV4dC0+
c3ltYm9sVGFibGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQkID09IDApICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3Ry
ZWFtOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiYnVp
bHQgaW4gdW5hcnkgb3BlcmF0b3IgZnVuY3Rpb24uICBUeXBlOiAiIDw8IHN0YXRpY19jYXN0PFRJ
bnRlcm1UeXBlZCo+KCQxLmludGVybU5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0
cmVhbS5zdHIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigk
MS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCksICIgd3Jvbmcgb3BlcmFuZCB0eXBlIiwgIkludGVybmFs
IEVycm9yIiwgZXh0cmFJbmZvLmNfc3RyKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFlZRVJST1I7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcigkMS5pbnRlcm1BZ2dyZWdhdGUsIG9wLCBAMSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAvLyBUaGlzIGlzIGEgcmVhbCBmdW5jdGlvbiBjYWxsCi0KLSAgICAgICAgICAg
ICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3Io
JDEuaW50ZXJtQWdncmVnYXRlLCBFT3BGdW5jdGlvbkNhbGwsIEAxKTsKLSAgICAgICAgICAgICAg
ICAgICAgJCQtPnNldFR5cGUoZm5DYW5kaWRhdGUtPmdldFJldHVyblR5cGUoKSk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBob3cgd2Uga25vdyB3aGV0aGVyIHRoZSBnaXZlbiBm
dW5jdGlvbiBpcyBhIGJ1aWx0SW4gZnVuY3Rpb24gb3IgYSB1c2VyIGRlZmluZWQgZnVuY3Rpb24K
LSAgICAgICAgICAgICAgICAgICAgLy8gaWYgYnVpbHRJbiA9PSBmYWxzZSwgaXQncyBhIHVzZXJE
ZWZpbmVkIC0+IGNvdWxkIGJlIGFuIG92ZXJsb2FkZWQgYnVpbHRJbiBmdW5jdGlvbiBhbHNvCi0g
ICAgICAgICAgICAgICAgICAgIC8vIGlmIGJ1aWx0SW4gPT0gdHJ1ZSwgaXQncyBkZWZpbml0ZWx5
IGEgYnVpbHRJbiBmdW5jdGlvbiB3aXRoIEVPcE51bGwKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFidWlsdEluKQotICAgICAgICAgICAgICAgICAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCkt
PnNldFVzZXJEZWZpbmVkKCk7Ci0gICAgICAgICAgICAgICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0
ZSgpLT5zZXROYW1lKGZuQ2FuZGlkYXRlLT5nZXRNYW5nbGVkTmFtZSgpKTsKLQotICAgICAgICAg
ICAgICAgICAgICBUUXVhbGlmaWVyIHF1YWw7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgZm5DYW5kaWRhdGUtPmdldFBhcmFtQ291bnQoKTsgKytpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBxdWFsID0gZm5DYW5kaWRhdGUtPmdldFBhcmFtKGkpLnR5cGUt
PmdldFF1YWxpZmllcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1YWwgPT0gRXZx
T3V0IHx8IHF1YWwgPT0gRXZxSW5PdXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygkJC0+Z2V0TGluZSgpLCAiYXNzaWduIiwgJCQt
PmdldEFzQWdncmVnYXRlKCktPmdldFNlcXVlbmNlKClbaV0tPmdldEFzVHlwZWQoKSkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEuaW50ZXJtTm9k
ZS0+Z2V0TGluZSgpLCAiQ29uc3RhbnQgdmFsdWUgY2Fubm90IGJlIHBhc3NlZCBmb3IgJ291dCcg
b3IgJ2lub3V0JyBwYXJhbWV0ZXJzLiIsICJFcnJvciIpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKGZuQ2FuZGlkYXRl
LT5nZXRSZXR1cm5UeXBlKCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAvLyBlcnJvciBtZXNzYWdlIHdhcyBwdXQgb3V0IGJ5IFBhRmluZEZ1bmN0aW9uKCkKLSAgICAg
ICAgICAgICAgICAvLyBQdXQgb24gYSBkdW1teSBub2RlIGZvciBlcnJvciByZWNvdmVyeQotICAg
ICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlv
blsxXTsKLSAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3QoMC4wZik7Ci0gICAg
ICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1
bmlvbkFycmF5LCBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAxKTsK
LSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgZGVsZXRlIGZuQ2FsbDsKLSAgICB9Ci0gICAgOwotCi1mdW5jdGlvbl9j
YWxsX29yX21ldGhvZAotICAgIDogZnVuY3Rpb25fY2FsbF9nZW5lcmljIHsKLSAgICAgICAgJCQg
PSAkMTsKLSAgICB9Ci0gICAgfCBwb3N0Zml4X2V4cHJlc3Npb24gRE9UIGZ1bmN0aW9uX2NhbGxf
Z2VuZXJpYyB7Ci0gICAgICAgIGNvbnRleHQtPmVycm9yKEAzLCAibWV0aG9kcyBhcmUgbm90IHN1
cHBvcnRlZCIsICIiKTsKLSAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJCA9
ICQzOwotICAgIH0KLSAgICA7Ci0KLWZ1bmN0aW9uX2NhbGxfZ2VuZXJpYwotICAgIDogZnVuY3Rp
b25fY2FsbF9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIFJJR0hUX1BBUkVOIHsKLSAgICAgICAgJCQg
PSAkMTsKLSAgICB9Ci0gICAgfCBmdW5jdGlvbl9jYWxsX2hlYWRlcl9ub19wYXJhbWV0ZXJzIFJJ
R0hUX1BBUkVOIHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICB9Ci0gICAgOwotCi1mdW5jdGlvbl9j
YWxsX2hlYWRlcl9ub19wYXJhbWV0ZXJzCi0gICAgOiBmdW5jdGlvbl9jYWxsX2hlYWRlciBWT0lE
X1RZUEUgewotICAgICAgICAkJC5mdW5jdGlvbiA9ICQxOwotICAgICAgICAkJC5pbnRlcm1Ob2Rl
ID0gMDsKLSAgICB9Ci0gICAgfCBmdW5jdGlvbl9jYWxsX2hlYWRlciB7Ci0gICAgICAgICQkLmZ1
bmN0aW9uID0gJDE7Ci0gICAgICAgICQkLmludGVybU5vZGUgPSAwOwotICAgIH0KLSAgICA7Ci0K
LWZ1bmN0aW9uX2NhbGxfaGVhZGVyX3dpdGhfcGFyYW1ldGVycwotICAgIDogZnVuY3Rpb25fY2Fs
bF9oZWFkZXIgYXNzaWdubWVudF9leHByZXNzaW9uIHsKLSAgICAgICAgVFBhcmFtZXRlciBwYXJh
bSA9IHsgMCwgbmV3IFRUeXBlKCQyLT5nZXRUeXBlKCkpIH07Ci0gICAgICAgICQxLT5hZGRQYXJh
bWV0ZXIocGFyYW0pOwotICAgICAgICAkJC5mdW5jdGlvbiA9ICQxOwotICAgICAgICAkJC5pbnRl
cm1Ob2RlID0gJDI7Ci0gICAgfQotICAgIHwgZnVuY3Rpb25fY2FsbF9oZWFkZXJfd2l0aF9wYXJh
bWV0ZXJzIENPTU1BIGFzc2lnbm1lbnRfZXhwcmVzc2lvbiB7Ci0gICAgICAgIFRQYXJhbWV0ZXIg
cGFyYW0gPSB7IDAsIG5ldyBUVHlwZSgkMy0+Z2V0VHlwZSgpKSB9OwotICAgICAgICAkMS5mdW5j
dGlvbi0+YWRkUGFyYW1ldGVyKHBhcmFtKTsKLSAgICAgICAgJCQuZnVuY3Rpb24gPSAkMS5mdW5j
dGlvbjsKLSAgICAgICAgJCQuaW50ZXJtTm9kZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93
QWdncmVnYXRlKCQxLmludGVybU5vZGUsICQzLCBAMik7Ci0gICAgfQotICAgIDsKLQotZnVuY3Rp
b25fY2FsbF9oZWFkZXIKLSAgICA6IGZ1bmN0aW9uX2lkZW50aWZpZXIgTEVGVF9QQVJFTiB7Ci0g
ICAgICAgICQkID0gJDE7Ci0gICAgfQotICAgIDsKLQotLy8gR3JhbW1hciBOb3RlOiAgQ29uc3Ry
dWN0b3JzIGxvb2sgbGlrZSBmdW5jdGlvbnMsIGJ1dCBhcmUgcmVjb2duaXplZCBhcyB0eXBlcy4K
LQotZnVuY3Rpb25faWRlbnRpZmllcgotICAgIDogdHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkgewot
ICAgICAgICAvLwotICAgICAgICAvLyBDb25zdHJ1Y3RvcgotICAgICAgICAvLwotICAgICAgICBU
T3BlcmF0b3Igb3AgPSBFT3BOdWxsOwotICAgICAgICBpZiAoJDEudXNlckRlZikgewotICAgICAg
ICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RTdHJ1Y3Q7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBzd2l0Y2ggKCQxLnR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6Ci0gICAg
ICAgICAgICAgICAgaWYgKCQxLm1hdHJpeCkgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2go
JDEuc2l6ZSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0
TWF0MjsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3Ry
dWN0TWF0MzsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29u
c3RydWN0TWF0NDsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoKCQxLnNpemUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSAxOiBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OyBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdFZlYzI7ICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVjdFZlYzM7ICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVjdFZlYzQ7ICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRWJ0SW50OgotICAgICAgICAgICAgICAg
IHN3aXRjaCgkMS5zaXplKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAxOiBvcCA9IEVPcENvbnN0
cnVjdEludDsgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3Ry
dWN0SVZlYzI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1
Y3RJVmVjMzsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVj
dElWZWM0OyBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIEVidEJvb2w6Ci0gICAgICAgICAgICAgICAgc3dpdGNoKCQxLnNp
emUpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0Qm9vbDsgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBFT3BDb25zdHJ1Y3RCVmVjMjsgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVjdEJWZWMzOyBicmVh
azsKLSAgICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0QlZlYzQ7IGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGRlZmF1bHQ6IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG9wID09IEVP
cE51bGwpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgImNhbm5vdCBjb25z
dHJ1Y3QgdGhpcyB0eXBlIiwgZ2V0QmFzaWNTdHJpbmcoJDEudHlwZSkpOwotICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICAkMS50eXBlID0gRWJ0Rmxv
YXQ7Ci0gICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RGbG9hdDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBUU3RyaW5nIHRlbXBTdHJpbmc7Ci0gICAgICAgIFRUeXBl
IHR5cGUoJDEpOwotICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigm
dGVtcFN0cmluZywgdHlwZSwgb3ApOwotICAgICAgICAkJCA9IGZ1bmN0aW9uOwotICAgIH0KLSAg
ICB8IElERU5USUZJRVIgewotICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNr
KEAxLCAqJDEuc3RyaW5nKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgVFR5cGUgdHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpOwotICAgICAgICBURnVuY3Rpb24g
KmZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigkMS5zdHJpbmcsIHR5cGUpOwotICAgICAgICAkJCA9
IGZ1bmN0aW9uOwotICAgIH0KLSAgICA7Ci0KLXVuYXJ5X2V4cHJlc3Npb24KLSAgICA6IHBvc3Rm
aXhfZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgfQotICAgIHwgSU5DX09QIHVu
YXJ5X2V4cHJlc3Npb24gewotICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjayhA
MSwgIisrIiwgJDIpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAk
JCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUHJlSW5jcmVtZW50LCAk
MiwgQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCQkID09IDApIHsKLSAg
ICAgICAgICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcihAMSwgIisrIiwgJDItPmdldENvbXBsZXRl
U3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAg
JCQgPSAkMjsKLSAgICAgICAgfQotICAgIH0KLSAgICB8IERFQ19PUCB1bmFyeV9leHByZXNzaW9u
IHsKLSAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soQDEsICItLSIsICQyKSkK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFByZURlY3JlbWVudCwgJDIsIEAxLCBjb250ZXh0
LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBjb250
ZXh0LT51bmFyeU9wRXJyb3IoQDEsICItLSIsICQyLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQkID0gJDI7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgfCB1bmFyeV9vcGVyYXRvciB1bmFyeV9leHByZXNzaW9uIHsKLSAg
ICAgICAgaWYgKCQxLm9wICE9IEVPcE51bGwpIHsKLSAgICAgICAgICAgICQkID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aCgkMS5vcCwgJDIsIEAxLCBjb250ZXh0LT5zeW1ib2xU
YWJsZSk7Ci0gICAgICAgICAgICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIqIGVycm9yT3AgPSAiIjsKLSAgICAgICAgICAgICAgICBzd2l0Y2goJDEub3ApIHsKLSAg
ICAgICAgICAgICAgICBjYXNlIEVPcE5lZ2F0aXZlOiAgIGVycm9yT3AgPSAiLSI7IGJyZWFrOwot
ICAgICAgICAgICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDogZXJyb3JPcCA9ICIhIjsgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcihAMSwgZXJyb3JPcCwgJDItPmdldENv
bXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgICAgICAgICAkJCA9ICQyOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgICQkID0gJDI7Ci0gICAgfQotICAgIDsKLS8vIEdyYW1tYXIgTm90ZTogIE5vIHRy
YWRpdGlvbmFsIHN0eWxlIHR5cGUgY2FzdHMuCi0KLXVuYXJ5X29wZXJhdG9yCi0gICAgOiBQTFVT
ICB7ICQkLm9wID0gRU9wTnVsbDsgfQotICAgIHwgREFTSCAgeyAkJC5vcCA9IEVPcE5lZ2F0aXZl
OyB9Ci0gICAgfCBCQU5HICB7ICQkLm9wID0gRU9wTG9naWNhbE5vdDsgfQotICAgIDsKLS8vIEdy
YW1tYXIgTm90ZTogIE5vICcqJyBvciAnJicgdW5hcnkgb3BzLiAgUG9pbnRlcnMgYXJlIG5vdCBz
dXBwb3J0ZWQuCi0KLW11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24KLSAgICA6IHVuYXJ5X2V4cHJl
c3Npb24geyAkJCA9ICQxOyB9Ci0gICAgfCBtdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uIFNUQVIg
dW5hcnlfZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZEJpbmFyeU1hdGgoRU9wTXVsLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0g
ICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9y
KEAyLCAiKiIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmco
KSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkJCA9ICQx
OwotICAgICAgICB9Ci0gICAgfQotICAgIHwgbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbiBTTEFT
SCB1bmFyeV9leHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkQmluYXJ5TWF0aChFT3BEaXYsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsK
LSAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJy
b3IoQDIsICIvIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmlu
ZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQkID0g
JDE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgOwotCi1hZGRpdGl2ZV9leHByZXNzaW9uCi0gICAg
OiBtdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQotICAgIHwgYWRkaXRpdmVf
ZXhwcmVzc2lvbiBQTFVTIG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24gewotICAgICAgICAkJCA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEFkZCwgJDEsICQzLCBAMiwg
Y29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoJCQgPT0gMCkgewotICAgICAgICAg
ICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIisiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmco
KSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotICAgICAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgfQotICAgIH0KLSAgICB8IGFkZGl0
aXZlX2V4cHJlc3Npb24gREFTSCBtdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uIHsKLSAgICAgICAg
JCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BTdWIsICQxLCAkMywg
QDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAg
ICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICItIiwgJDEtPmdldENvbXBsZXRlU3Ry
aW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgICAgICQkID0gJDE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgOwot
Ci1zaGlmdF9leHByZXNzaW9uCi0gICAgOiBhZGRpdGl2ZV9leHByZXNzaW9uIHsgJCQgPSAkMTsg
fQotICAgIDsKLQotcmVsYXRpb25hbF9leHByZXNzaW9uCi0gICAgOiBzaGlmdF9leHByZXNzaW9u
IHsgJCQgPSAkMTsgfQotICAgIHwgcmVsYXRpb25hbF9leHByZXNzaW9uIExFRlRfQU5HTEUgc2hp
ZnRfZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJp
bmFyeU1hdGgoRU9wTGVzc1RoYW4sICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsK
LSAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJy
b3IoQDIsICI8IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmlu
ZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIENvbnN0
YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAg
IHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAkJCA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2ws
IEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgfCBy
ZWxhdGlvbmFsX2V4cHJlc3Npb24gUklHSFRfQU5HTEUgc2hpZnRfZXhwcmVzc2lvbiAgewotICAg
ICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJU
aGFuLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmICgkJCA9
PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiPiIsICQxLT5n
ZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFy
cmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRC
Q29uc3QoZmFsc2UpOwotICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
Q29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2
cUNvbnN0KSwgQDIpOwotICAgICAgICB9Ci0gICAgfQotICAgIHwgcmVsYXRpb25hbF9leHByZXNz
aW9uIExFX09QIHNoaWZ0X2V4cHJlc3Npb24gIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhhbkVxdWFsLCAkMSwgJDMsIEAyLCBjb250
ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBj
b250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiPD0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwg
JDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uWzFdOwotICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAg
ICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25B
cnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAyKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICB8IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiBHRV9PUCBzaGlmdF9leHBy
ZXNzaW9uICB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1h
dGgoRU9wR3JlYXRlclRoYW5FcXVhbCwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUp
OwotICAgICAgICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BF
cnJvcihAMiwgIj49IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0
cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIENv
bnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAg
ICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAkJCA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJv
b2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
OwotCi1lcXVhbGl0eV9leHByZXNzaW9uCi0gICAgOiByZWxhdGlvbmFsX2V4cHJlc3Npb24geyAk
JCA9ICQxOyB9Ci0gICAgfCBlcXVhbGl0eV9leHByZXNzaW9uIEVRX09QIHJlbGF0aW9uYWxfZXhw
cmVzc2lvbiAgewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlN
YXRoKEVPcEVxdWFsLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAg
IGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAi
PT0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgQ29uc3RhbnRVbmlv
biAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgdW5pb25B
cnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5k
ZWZpbmVkLCBFdnFDb25zdCksIEAyKTsKLSAgICAgICAgfQotICAgIH0KLSAgICB8IGVxdWFsaXR5
X2V4cHJlc3Npb24gTkVfT1AgcmVsYXRpb25hbF9leHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BOb3RFcXVhbCwgJDEsICQzLCBA
MiwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoJCQgPT0gMCkgewotICAgICAg
ICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIiE9IiwgJDEtPmdldENvbXBsZXRlU3Ry
aW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29u
c3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7
Ci0gICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9u
KHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMik7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgOwotCi1hbmRfZXhwcmVzc2lvbgotICAgIDogZXF1YWxp
dHlfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KLSAgICA7Ci0KLWV4Y2x1c2l2ZV9vcl9leHByZXNz
aW9uCi0gICAgOiBhbmRfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KLSAgICA7Ci0KLWluY2x1c2l2
ZV9vcl9leHByZXNzaW9uCi0gICAgOiBleGNsdXNpdmVfb3JfZXhwcmVzc2lvbiB7ICQkID0gJDE7
IH0KLSAgICA7Ci0KLWxvZ2ljYWxfYW5kX2V4cHJlc3Npb24KLSAgICA6IGluY2x1c2l2ZV9vcl9l
eHByZXNzaW9uIHsgJCQgPSAkMTsgfQotICAgIHwgbG9naWNhbF9hbmRfZXhwcmVzc2lvbiBBTkRf
T1AgaW5jbHVzaXZlX29yX2V4cHJlc3Npb24gewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxBbmQsICQxLCAkMywgQDIsIGNvbnRleHQt
PnN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgIGNvbnRl
eHQtPmJpbmFyeU9wRXJyb3IoQDIsICImJiIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+
Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25b
MV07Ci0gICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwotICAgICAgICAg
ICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5
LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDIpOwotICAgICAgICB9
Ci0gICAgfQotICAgIDsKLQotbG9naWNhbF94b3JfZXhwcmVzc2lvbgotICAgIDogbG9naWNhbF9h
bmRfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KLSAgICB8IGxvZ2ljYWxfeG9yX2V4cHJlc3Npb24g
WE9SX09QIGxvZ2ljYWxfYW5kX2V4cHJlc3Npb24gIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2FsWG9yLCAkMSwgJDMsIEAyLCBjb250
ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBj
b250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiXl4iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwg
JDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uWzFdOwotICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAg
ICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25B
cnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAyKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICA7Ci0KLWxvZ2ljYWxfb3JfZXhwcmVzc2lvbgotICAgIDogbG9naWNh
bF94b3JfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KLSAgICB8IGxvZ2ljYWxfb3JfZXhwcmVzc2lv
biBPUl9PUCBsb2dpY2FsX3hvcl9leHByZXNzaW9uICB7Ci0gICAgICAgICQkID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbE9yLCAkMSwgJDMsIEAyLCBjb250
ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBj
b250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAifHwiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwg
JDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uWzFdOwotICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAg
ICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25B
cnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAyKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICA7Ci0KLWNvbmRpdGlvbmFsX2V4cHJlc3Npb24KLSAgICA6IGxvZ2lj
YWxfb3JfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KLSAgICB8IGxvZ2ljYWxfb3JfZXhwcmVzc2lv
biBRVUVTVElPTiBleHByZXNzaW9uIENPTE9OIGFzc2lnbm1lbnRfZXhwcmVzc2lvbiB7Ci0gICAg
ICAgaWYgKGNvbnRleHQtPmJvb2xFcnJvckNoZWNrKEAyLCAkMSkpCi0gICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
U2VsZWN0aW9uKCQxLCAkMywgJDUsIEAyKTsKLSAgICAgICAgaWYgKCQzLT5nZXRUeXBlKCkgIT0g
JDUtPmdldFR5cGUoKSkKLSAgICAgICAgICAgICQkID0gMDsKLQotICAgICAgICBpZiAoJCQgPT0g
MCkgewotICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIjoiLCAkMy0+Z2V0
Q29tcGxldGVTdHJpbmcoKSwgJDUtPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgJCQgPSAkNTsKLSAgICAgICAgfQotICAg
IH0KLSAgICA7Ci0KLWFzc2lnbm1lbnRfZXhwcmVzc2lvbgotICAgIDogY29uZGl0aW9uYWxfZXhw
cmVzc2lvbiB7ICQkID0gJDE7IH0KLSAgICB8IHVuYXJ5X2V4cHJlc3Npb24gYXNzaWdubWVudF9v
cGVyYXRvciBhc3NpZ25tZW50X2V4cHJlc3Npb24gewotICAgICAgICBpZiAoY29udGV4dC0+bFZh
bHVlRXJyb3JDaGVjayhAMiwgImFzc2lnbiIsICQxKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQXNzaWduKCQy
Lm9wLCAkMSwgJDMsIEAyKTsKLSAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgIGNv
bnRleHQtPmFzc2lnbkVycm9yKEAyLCAiYXNzaWduIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCks
ICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgICAgICQkID0gJDE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgOwotCi1hc3Np
Z25tZW50X29wZXJhdG9yCi0gICAgOiBFUVVBTCAgICAgICAgeyAkJC5vcCA9IEVPcEFzc2lnbjsg
fQotICAgIHwgTVVMX0FTU0lHTiAgIHsgJCQub3AgPSBFT3BNdWxBc3NpZ247IH0KLSAgICB8IERJ
Vl9BU1NJR04gICB7ICQkLm9wID0gRU9wRGl2QXNzaWduOyB9Ci0gICAgfCBBRERfQVNTSUdOICAg
eyAkJC5vcCA9IEVPcEFkZEFzc2lnbjsgfQotICAgIHwgU1VCX0FTU0lHTiAgIHsgJCQub3AgPSBF
T3BTdWJBc3NpZ247IH0KLSAgICA7Ci0KLWV4cHJlc3Npb24KLSAgICA6IGFzc2lnbm1lbnRfZXhw
cmVzc2lvbiB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgfQotICAgIHwgZXhwcmVzc2lvbiBDT01N
QSBhc3NpZ25tZW50X2V4cHJlc3Npb24gewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRDb21tYSgkMSwgJDMsIEAyKTsKLSAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAg
ICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICIsIiwgJDEtPmdldENvbXBsZXRlU3Ry
aW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgICAgICQkID0gJDM7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgOwot
Ci1jb25zdGFudF9leHByZXNzaW9uCi0gICAgOiBjb25kaXRpb25hbF9leHByZXNzaW9uIHsKLSAg
ICAgICAgaWYgKGNvbnRleHQtPmNvbnN0RXJyb3JDaGVjaygkMSkpCi0gICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgfQotICAgIDsKLQotZGVjbGFy
YXRpb24KLSAgICA6IGZ1bmN0aW9uX3Byb3RvdHlwZSBTRU1JQ09MT04gICB7Ci0gICAgICAgIFRG
dW5jdGlvbiAmZnVuY3Rpb24gPSAqKCQxLmZ1bmN0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIFRJ
bnRlcm1BZ2dyZWdhdGUgKnByb3RvdHlwZSA9IG5ldyBUSW50ZXJtQWdncmVnYXRlOwotICAgICAg
ICBwcm90b3R5cGUtPnNldFR5cGUoZnVuY3Rpb24uZ2V0UmV0dXJuVHlwZSgpKTsKLSAgICAgICAg
cHJvdG90eXBlLT5zZXROYW1lKGZ1bmN0aW9uLmdldE5hbWUoKSk7Ci0gICAgICAgIAotICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKTsgaSsrKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBUUGFyYW1ldGVyICZwYXJhbSA9IGZ1bmN0aW9u
LmdldFBhcmFtKGkpOwotICAgICAgICAgICAgaWYgKHBhcmFtLm5hbWUgIT0gMCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBUVmFyaWFibGUgdmFyaWFibGUocGFyYW0ubmFtZSwgKnBh
cmFtLnR5cGUpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHByb3RvdHlwZSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKHByb3RvdHlwZSwgY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZS5nZXRVbmlxdWVJZCgpLCB2YXJpYWJsZS5n
ZXROYW1lKCksIHZhcmlhYmxlLmdldFR5cGUoKSwgQDEpLCBAMSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJvdG90eXBl
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUocHJvdG90eXBlLCBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICIiLCAqcGFyYW0udHlwZSwgQDEpLCBAMSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHByb3RvdHlwZS0+c2V0
T3AoRU9wUHJvdG90eXBlKTsKLSAgICAgICAgJCQgPSBwcm90b3R5cGU7Ci0KLSAgICAgICAgY29u
dGV4dC0+c3ltYm9sVGFibGUucG9wKCk7Ci0gICAgfQotICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xp
c3QgU0VNSUNPTE9OIHsKLSAgICAgICAgaWYgKCQxLmludGVybUFnZ3JlZ2F0ZSkKLSAgICAgICAg
ICAgICQxLmludGVybUFnZ3JlZ2F0ZS0+c2V0T3AoRU9wRGVjbGFyYXRpb24pOwotICAgICAgICAk
JCA9ICQxLmludGVybUFnZ3JlZ2F0ZTsKLSAgICB9Ci0gICAgfCBQUkVDSVNJT04gcHJlY2lzaW9u
X3F1YWxpZmllciB0eXBlX3NwZWNpZmllcl9ub19wcmVjIFNFTUlDT0xPTiB7Ci0gICAgICAgIGlm
ICgoJDIgPT0gRWJwSGlnaCkgJiYgKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRf
U0hBREVSKSAmJiAhY29udGV4dC0+ZnJhZ21lbnRQcmVjaXNpb25IaWdoKSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcihAMSwgInByZWNpc2lvbiBpcyBub3Qgc3VwcG9ydGVkIGluIGZyYWdt
ZW50IHNoYWRlciIsICJoaWdocCIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICB9Ci0gICAgICAgIGlmICghY29udGV4dC0+c3ltYm9sVGFibGUuc2V0RGVmYXVsdFBy
ZWNpc2lvbiggJDMsICQyICkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAiaWxs
ZWdhbCB0eXBlIGFyZ3VtZW50IGZvciBkZWZhdWx0IHByZWNpc2lvbiBxdWFsaWZpZXIiLCBnZXRC
YXNpY1N0cmluZygkMy50eXBlKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgJCQgPSAwOwotICAgIH0KLSAgICA7Ci0KLWZ1bmN0aW9uX3Byb3Rv
dHlwZQotICAgIDogZnVuY3Rpb25fZGVjbGFyYXRvciBSSUdIVF9QQVJFTiAgewotICAgICAgICAv
LwotICAgICAgICAvLyBNdWx0aXBsZSBkZWNsYXJhdGlvbnMgb2YgdGhlIHNhbWUgZnVuY3Rpb24g
YXJlIGFsbG93ZWQuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIElmIHRoaXMgaXMgYSBkZWZpbml0
aW9uLCB0aGUgZGVmaW5pdGlvbiBwcm9kdWN0aW9uIGNvZGUgd2lsbCBjaGVjayBmb3IgcmVkZWZp
bml0aW9ucwotICAgICAgICAvLyAod2UgZG9uJ3Qga25vdyBhdCB0aGlzIHBvaW50IGlmIGl0J3Mg
YSBkZWZpbml0aW9uIG9yIG5vdCkuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFJlZGVjbGFyYXRp
b25zIGFyZSBhbGxvd2VkLiAgQnV0LCByZXR1cm4gdHlwZXMgYW5kIHBhcmFtZXRlciBxdWFsaWZp
ZXJzIG11c3QgbWF0Y2guCi0gICAgICAgIC8vCi0gICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9
IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoJDEtPmdl
dE1hbmdsZWROYW1lKCkpKTsKLSAgICAgICAgaWYgKHByZXZEZWMpIHsKLSAgICAgICAgICAgIGlm
IChwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkgIT0gJDEtPmdldFJldHVyblR5cGUoKSkgewotICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAib3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVz
dCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgJDEtPmdldFJldHVyblR5cGUoKS5nZXRCYXNp
Y1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZXZEZWMtPmdldFBh
cmFtQ291bnQoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdldFBhcmFt
KGkpLnR5cGUtPmdldFF1YWxpZmllcigpICE9ICQxLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFs
aWZpZXIoKSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgIm92ZXJs
b2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSBwYXJhbWV0ZXIgcXVhbGlmaWVycyIs
ICQxLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXJTdHJpbmcoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLwotICAgICAgICAvLyBDaGVjayBmb3IgcHJl
dmlvdXNseSBkZWNsYXJlZCB2YXJpYWJsZXMgdXNpbmcgdGhlIHNhbWUgbmFtZS4KLSAgICAgICAg
Ly8KLSAgICAgICAgVFN5bWJvbCAqcHJldlN5bSA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQo
JDEtPmdldE5hbWUoKSk7Ci0gICAgICAgIGlmIChwcmV2U3ltKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAoIXByZXZTeW0tPmlzRnVuY3Rpb24oKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgInJlZGVmaW5pdGlvbiIsICQxLT5nZXROYW1lKCku
Y19zdHIoKSwgImZ1bmN0aW9uIik7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAg
ICAgICAgICAgLy8gSW5zZXJ0IHRoZSB1bm1hbmdsZWQgbmFtZSB0byBkZXRlY3QgcG90ZW50aWFs
IGZ1dHVyZSByZWRlZmluaXRpb24gYXMgYSB2YXJpYWJsZS4KLSAgICAgICAgICAgIGNvbnRleHQt
PnN5bWJvbFRhYmxlLmdldE91dGVyTGV2ZWwoKS0+aW5zZXJ0KCQxLT5nZXROYW1lKCksICokMSk7
Ci0gICAgICAgIH0KLQotICAgICAgICAvLwotICAgICAgICAvLyBJZiB0aGlzIGlzIGEgcmVkZWNs
YXJhdGlvbiwgaXQgY291bGQgYWxzbyBiZSBhIGRlZmluaXRpb24sCi0gICAgICAgIC8vIGluIHdo
aWNoIGNhc2UsIHdlIHdhbnQgdG8gdXNlIHRoZSB2YXJpYWJsZSBuYW1lcyBmcm9tIHRoaXMgb25l
LCBhbmQgbm90IHRoZSBvbmUgdGhhdCdzCi0gICAgICAgIC8vIGJlaW5nIHJlZGVjbGFyZWQuICBT
bywgcGFzcyBiYWNrIHVwIHRoaXMgZGVjbGFyYXRpb24sIG5vdCB0aGUgb25lIGluIHRoZSBzeW1i
b2wgdGFibGUuCi0gICAgICAgIC8vCi0gICAgICAgICQkLmZ1bmN0aW9uID0gJDE7Ci0KLSAgICAg
ICAgLy8gV2UncmUgYXQgdGhlIGlubmVyIHNjb3BlIGxldmVsIG9mIHRoZSBmdW5jdGlvbidzIGFy
Z3VtZW50cyBhbmQgYm9keSBzdGF0ZW1lbnQuCi0gICAgICAgIC8vIEFkZCB0aGUgZnVuY3Rpb24g
cHJvdG90eXBlIHRvIHRoZSBzdXJyb3VuZGluZyBzY29wZSBpbnN0ZWFkLgotICAgICAgICBjb250
ZXh0LT5zeW1ib2xUYWJsZS5nZXRPdXRlckxldmVsKCktPmluc2VydCgqJCQuZnVuY3Rpb24pOwot
ICAgIH0KLSAgICA7Ci0KLWZ1bmN0aW9uX2RlY2xhcmF0b3IKLSAgICA6IGZ1bmN0aW9uX2hlYWRl
ciB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgfQotICAgIHwgZnVuY3Rpb25faGVhZGVyX3dpdGhf
cGFyYW1ldGVycyB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgfQotICAgIDsKLQotCi1mdW5jdGlv
bl9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzCi0gICAgOiBmdW5jdGlvbl9oZWFkZXIgcGFyYW1ldGVy
X2RlY2xhcmF0aW9uIHsKLSAgICAgICAgLy8gQWRkIHRoZSBwYXJhbWV0ZXIKLSAgICAgICAgJCQg
PSAkMTsKLSAgICAgICAgaWYgKCQyLnBhcmFtLnR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVidFZv
aWQpCi0gICAgICAgICAgICAkMS0+YWRkUGFyYW1ldGVyKCQyLnBhcmFtKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgZGVsZXRlICQyLnBhcmFtLnR5cGU7Ci0gICAgfQotICAgIHwgZnVuY3Rp
b25faGVhZGVyX3dpdGhfcGFyYW1ldGVycyBDT01NQSBwYXJhbWV0ZXJfZGVjbGFyYXRpb24gewot
ICAgICAgICAvLwotICAgICAgICAvLyBPbmx5IGZpcnN0IHBhcmFtZXRlciBvZiBvbmUtcGFyYW1l
dGVyIGZ1bmN0aW9ucyBjYW4gYmUgdm9pZAotICAgICAgICAvLyBUaGUgY2hlY2sgZm9yIG5hbWVk
IHBhcmFtZXRlcnMgbm90IGJlaW5nIHZvaWQgaXMgZG9uZSBpbiBwYXJhbWV0ZXJfZGVjbGFyYXRv
cgotICAgICAgICAvLwotICAgICAgICBpZiAoJDMucGFyYW0udHlwZS0+Z2V0QmFzaWNUeXBlKCkg
PT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFRoaXMgcGFyYW1l
dGVyID4gZmlyc3QgaXMgdm9pZAotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKEAyLCAiY2Fubm90IGJlIGFuIGFyZ3VtZW50IHR5cGUgZXhjZXB0IGZvciAnKHZvaWQp
JyIsICJ2b2lkIik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAg
ICBkZWxldGUgJDMucGFyYW0udHlwZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8v
IEFkZCB0aGUgcGFyYW1ldGVyCi0gICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICAgICAgJDEt
PmFkZFBhcmFtZXRlcigkMy5wYXJhbSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgOwotCi1mdW5j
dGlvbl9oZWFkZXIKLSAgICA6IGZ1bGx5X3NwZWNpZmllZF90eXBlIElERU5USUZJRVIgTEVGVF9Q
QVJFTiB7Ci0gICAgICAgIGlmICgkMS5xdWFsaWZpZXIgIT0gRXZxR2xvYmFsICYmICQxLnF1YWxp
ZmllciAhPSBFdnFUZW1wb3JhcnkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAi
bm8gcXVhbGlmaWVycyBhbGxvd2VkIGZvciBmdW5jdGlvbiByZXR1cm4iLCBnZXRRdWFsaWZpZXJT
dHJpbmcoJDEucXVhbGlmaWVyKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgLy8gbWFrZSBzdXJlIGEgc2FtcGxlciBpcyBub3QgaW52b2x2ZWQg
YXMgd2VsbC4uLgotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVj
ayhAMiwgJDEpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIC8v
IEFkZCB0aGUgZnVuY3Rpb24gYXMgYSBwcm90b3R5cGUgYWZ0ZXIgcGFyc2luZyBpdCAod2UgZG8g
bm90IHN1cHBvcnQgcmVjdXJzaW9uKQotICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uOwotICAg
ICAgICBUVHlwZSB0eXBlKCQxKTsKLSAgICAgICAgZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCQy
LnN0cmluZywgdHlwZSk7Ci0gICAgICAgICQkID0gZnVuY3Rpb247Ci0gICAgICAgIAotICAgICAg
ICBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7Ci0gICAgfQotICAgIDsKLQotcGFyYW1ldGVy
X2RlY2xhcmF0b3IKLSAgICAvLyBUeXBlICsgbmFtZQotICAgIDogdHlwZV9zcGVjaWZpZXIgaWRl
bnRpZmllciB7Ci0gICAgICAgIGlmICgkMS50eXBlID09IEVidFZvaWQpIHsKLSAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKEAyLCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9pZCciLCAkMi5zdHJp
bmctPmNfc3RyKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soQDIsICokMi5zdHJpbmcp
KQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBUUGFyYW1ldGVyIHBh
cmFtID0geyQyLnN0cmluZywgbmV3IFRUeXBlKCQxKX07Ci0gICAgICAgICQkLnBhcmFtID0gcGFy
YW07Ci0gICAgfQotICAgIHwgdHlwZV9zcGVjaWZpZXIgaWRlbnRpZmllciBMRUZUX0JSQUNLRVQg
Y29uc3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKLSAgICAgICAgLy8gQ2hlY2sgdGhh
dCB3ZSBjYW4gbWFrZSBhbiBhcnJheSBvdXQgb2YgdGhpcyB0eXBlCi0gICAgICAgIGlmIChjb250
ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKEAzLCAkMSkpCi0gICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjayhAMiwg
KiQyLnN0cmluZykpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAg
aW50IHNpemU7Ci0gICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKEAzLCAk
NCwgc2l6ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICQxLnNl
dEFycmF5KHRydWUsIHNpemUpOwotCi0gICAgICAgIFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKCQx
KTsKLSAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgJDIuc3RyaW5nLCB0eXBlIH07Ci0gICAg
ICAgICQkLnBhcmFtID0gcGFyYW07Ci0gICAgfQotICAgIDsKLQotcGFyYW1ldGVyX2RlY2xhcmF0
aW9uCi0gICAgLy8KLSAgICAvLyBUaGUgb25seSBwYXJhbWV0ZXIgcXVhbGlmaWVyIGEgcGFyYW1l
dGVyIGNhbiBoYXZlIGFyZQotICAgIC8vIElOX1FVQUwsIE9VVF9RVUFMLCBJTk9VVF9RVUFMLCBv
ciBDT05TVC4KLSAgICAvLwotCi0gICAgLy8KLSAgICAvLyBUeXBlICsgbmFtZQotICAgIC8vCi0g
ICAgOiB0eXBlX3F1YWxpZmllciBwYXJhbWV0ZXJfcXVhbGlmaWVyIHBhcmFtZXRlcl9kZWNsYXJh
dG9yIHsKLSAgICAgICAgJCQgPSAkMzsKLSAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JD
aGVjayhAMywgJDEucXVhbGlmaWVyLCAkMiwgJCQucGFyYW0udHlwZSkpCi0gICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgfQotICAgIHwgcGFyYW1ldGVyX3F1YWxpZmllciBwYXJh
bWV0ZXJfZGVjbGFyYXRvciB7Ci0gICAgICAgICQkID0gJDI7Ci0gICAgICAgIGlmIChjb250ZXh0
LT5wYXJhbWV0ZXJTYW1wbGVyRXJyb3JDaGVjayhAMiwgJDEsICokMi5wYXJhbS50eXBlKSkKLSAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFt
RXJyb3JDaGVjayhAMiwgRXZxVGVtcG9yYXJ5LCAkMSwgJCQucGFyYW0udHlwZSkpCi0gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgfQotICAgIC8vCi0gICAgLy8gT25seSB0eXBl
Ci0gICAgLy8KLSAgICB8IHR5cGVfcXVhbGlmaWVyIHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1l
dGVyX3R5cGVfc3BlY2lmaWVyIHsKLSAgICAgICAgJCQgPSAkMzsKLSAgICAgICAgaWYgKGNvbnRl
eHQtPnBhcmFtRXJyb3JDaGVjayhAMywgJDEucXVhbGlmaWVyLCAkMiwgJCQucGFyYW0udHlwZSkp
Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgfQotICAgIHwgcGFyYW1ldGVy
X3F1YWxpZmllciBwYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIgewotICAgICAgICAkJCA9ICQyOwot
ICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1ldGVyU2FtcGxlckVycm9yQ2hlY2soQDIsICQxLCAq
JDIucGFyYW0udHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
IGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soQDIsIEV2cVRlbXBvcmFyeSwgJDEsICQkLnBh
cmFtLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgIH0KLSAgICA7
Ci0KLXBhcmFtZXRlcl9xdWFsaWZpZXIKLSAgICA6IC8qIGVtcHR5ICovIHsKLSAgICAgICAgJCQg
PSBFdnFJbjsKLSAgICB9Ci0gICAgfCBJTl9RVUFMIHsKLSAgICAgICAgJCQgPSBFdnFJbjsKLSAg
ICB9Ci0gICAgfCBPVVRfUVVBTCB7Ci0gICAgICAgICQkID0gRXZxT3V0OwotICAgIH0KLSAgICB8
IElOT1VUX1FVQUwgewotICAgICAgICAkJCA9IEV2cUluT3V0OwotICAgIH0KLSAgICA7Ci0KLXBh
cmFtZXRlcl90eXBlX3NwZWNpZmllcgotICAgIDogdHlwZV9zcGVjaWZpZXIgewotICAgICAgICBU
UGFyYW1ldGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUoJDEpIH07Ci0gICAgICAgICQkLnBhcmFt
ID0gcGFyYW07Ci0gICAgfQotICAgIDsKLQotaW5pdF9kZWNsYXJhdG9yX2xpc3QKLSAgICA6IHNp
bmdsZV9kZWNsYXJhdGlvbiB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgfQotICAgIHwgaW5pdF9k
ZWNsYXJhdG9yX2xpc3QgQ09NTUEgaWRlbnRpZmllciB7Ci0gICAgICAgIGlmICgkMS50eXBlLnR5
cGUgPT0gRWJ0SW52YXJpYW50ICYmICEkMy5zeW1ib2wpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKEAzLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGlu
dmFyaWFudCIsICQzLnN0cmluZy0+Y19zdHIoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICokMy5zdHJpbmcsIFRUeXBlKCQxLnR5cGUp
LCBAMyk7Ci0gICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5ncm93QWdncmVnYXRlKCQxLmludGVybU5vZGUsIHN5bWJvbCwgQDMpOwotICAgICAgICAKLSAg
ICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soQDMsICQkLnR5cGUp
KQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlmIChjb250ZXh0
LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKEAzLCAqJDMuc3RyaW5nLCAkJC50eXBlLCBmYWxzZSkp
Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgVFZhcmlhYmxlKiB2
YXJpYWJsZSA9IDA7Ci0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0RXJyb3JDaGVjayhAMywg
KiQzLnN0cmluZywgJCQudHlwZSwgdmFyaWFibGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotICAgICAgICBpZiAoc3ltYm9sICYmIHZhcmlhYmxlKQotICAgICAgICAgICAgc3lt
Ym9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7Ci0gICAgfQotICAgIHwgaW5pdF9k
ZWNsYXJhdG9yX2xpc3QgQ09NTUEgaWRlbnRpZmllciBMRUZUX0JSQUNLRVQgUklHSFRfQlJBQ0tF
VCB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAzLCAk
MS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAo
Y29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjayhAMywgKiQzLnN0cmluZywgJDEudHlwZSwg
dHJ1ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgJCQgPSAk
MTsKLQotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjayhANCwgJDEudHlw
ZSkgfHwgY29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKEA0LCAkMS50eXBlKSkKLSAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAkMS50eXBlLnNldEFycmF5KHRydWUpOwotICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJs
ZTsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheUVycm9yQ2hlY2soQDQsICokMy5zdHJp
bmcsICQxLnR5cGUsIHZhcmlhYmxlKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgfCBpbml0X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBp
ZGVudGlmaWVyIExFRlRfQlJBQ0tFVCBjb25zdGFudF9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQg
ewotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhAMywgJDEu
dHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNv
bnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soQDMsICokMy5zdHJpbmcsICQxLnR5cGUsIHRy
dWUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgICQkID0gJDE7
Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soQDQsICQxLnR5cGUp
IHx8IGNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayhANCwgJDEudHlwZSkpCi0gICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAg
aW50IHNpemU7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjayhA
NCwgJDUsIHNpemUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgICAgICQxLnR5cGUuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7Ci0gICAgICAgICAgICBUVmFyaWFi
bGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheUVycm9yQ2hl
Y2soQDQsICokMy5zdHJpbmcsICQxLnR5cGUsIHZhcmlhYmxlKSkKLSAgICAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBUVHlwZSB0eXBlID0gVFR5cGUoJDEudHlw
ZSk7Ci0gICAgICAgICAgICB0eXBlLnNldEFycmF5U2l6ZShzaXplKTsKLSAgICAgICAgICAgICQk
LmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQx
LmludGVybU5vZGUsIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUgPyB2
YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSA6IDAsICokMy5zdHJpbmcsIHR5cGUsIEAzKSwgQDMpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgaWRlbnRp
ZmllciBFUVVBTCBpbml0aWFsaXplciB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFs
aWZpZXJFcnJvckNoZWNrKEAzLCAkMS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLQotICAgICAgICAkJCA9ICQxOwotCi0gICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1O
b2RlOwotICAgICAgICBpZiAoIWNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcihAMywgKiQzLnN0
cmluZywgJDEudHlwZSwgJDUsIGludGVybU5vZGUpKSB7Ci0gICAgICAgICAgICAvLwotICAgICAg
ICAgICAgLy8gYnVpbGQgdGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgotICAgICAgICAg
ICAgLy8KLSAgICAgICAgICAgIGlmIChpbnRlcm1Ob2RlKQotICAgICAgICAkJC5pbnRlcm1BZ2dy
ZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1Ob2Rl
LCBpbnRlcm1Ob2RlLCBANCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgJCQu
aW50ZXJtQWdncmVnYXRlID0gJDEuaW50ZXJtQWdncmVnYXRlOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgJCQuaW50ZXJtQWdn
cmVnYXRlID0gMDsKLSAgICAgICAgfQotICAgIH0KLSAgICA7Ci0KLXNpbmdsZV9kZWNsYXJhdGlv
bgotICAgIDogZnVsbHlfc3BlY2lmaWVkX3R5cGUgewotICAgICAgICAkJC50eXBlID0gJDE7Ci0g
ICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdn
cmVnYXRlKGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsIFRUeXBlKCQxKSwg
QDEpLCBAMSk7Ci0gICAgfQotICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUgaWRlbnRpZmllciB7
Ci0gICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRTeW1ib2woMCwgKiQyLnN0cmluZywgVFR5cGUoJDEpLCBAMik7Ci0gICAgICAgICQkLmludGVy
bUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwg
QDIpOwotICAgICAgICAKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9y
Q2hlY2soQDIsICQkLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0g
ICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKEAyLCAqJDIuc3RyaW5n
LCAkJC50eXBlLCBmYWxzZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgICQkLnR5cGUgPSAkMTsKLQotICAgICAgICBUVmFyaWFibGUq
IHZhcmlhYmxlID0gMDsKLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRFcnJvckNoZWNrKEAy
LCAqJDIuc3RyaW5nLCAkJC50eXBlLCB2YXJpYWJsZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCi0gICAgICAgICAgICBz
eW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKLSAgICB9Ci0gICAgfCBmdWxs
eV9zcGVjaWZpZWRfdHlwZSBpZGVudGlmaWVyIExFRlRfQlJBQ0tFVCBSSUdIVF9CUkFDS0VUIHsK
LSAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJ1bnNpemVkIGFycmF5IGRlY2xhcmF0aW9ucyBu
b3Qgc3VwcG9ydGVkIiwgJDIuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotCi0gICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQyLnN0cmluZywgVFR5cGUoJDEpLCBAMik7Ci0gICAgICAg
ICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRl
KHN5bWJvbCwgQDIpOwotICAgICAgICAkJC50eXBlID0gJDE7Ci0gICAgfQotICAgIHwgZnVsbHlf
c3BlY2lmaWVkX3R5cGUgaWRlbnRpZmllciBMRUZUX0JSQUNLRVQgY29uc3RhbnRfZXhwcmVzc2lv
biBSSUdIVF9CUkFDS0VUIHsKLSAgICAgICAgVFR5cGUgdHlwZSA9IFRUeXBlKCQxKTsKLSAgICAg
ICAgaW50IHNpemU7Ci0gICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKEAy
LCAkNCwgc2l6ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIHR5
cGUuc2V0QXJyYXlTaXplKHNpemUpOwotICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICokMi5zdHJpbmcsIHR5cGUsIEAyKTsK
LSAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VB
Z2dyZWdhdGUoc3ltYm9sLCBAMik7Ci0gICAgICAgIAotICAgICAgICBpZiAoY29udGV4dC0+c3Ry
dWN0UXVhbGlmaWVyRXJyb3JDaGVjayhAMiwgJDEpKQotICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKEAy
LCAqJDIuc3RyaW5nLCAkMSwgdHJ1ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0KLSAgICAgICAgJCQudHlwZSA9ICQxOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5
cGVFcnJvckNoZWNrKEAzLCAkMSkgfHwgY29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNr
KEAzLCAkMSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgaW50IHNpemU7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlT
aXplRXJyb3JDaGVjayhAMywgJDQsIHNpemUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLQotICAgICAgICAgICAgJDEuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7Ci0gICAgICAg
ICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5h
cnJheUVycm9yQ2hlY2soQDMsICokMi5zdHJpbmcsICQxLCB2YXJpYWJsZSkpCi0gICAgICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgaWYgKHZhcmlhYmxlICYmIHN5
bWJvbCkKLSAgICAgICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJ
ZCgpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICB8IGZ1bGx5X3NwZWNpZmllZF90eXBlIGlkZW50
aWZpZXIgRVFVQUwgaW5pdGlhbGl6ZXIgewotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVh
bGlmaWVyRXJyb3JDaGVjayhAMiwgJDEpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotCi0gICAgICAgICQkLnR5cGUgPSAkMTsKLQotICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJt
Tm9kZTsKLSAgICAgICAgaWYgKCFjb250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoQDIsICokMi5z
dHJpbmcsICQxLCAkNCwgaW50ZXJtTm9kZSkpIHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gQnVp
bGQgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCi0gICAgICAgIC8vCi0gICAgICAgICAgICBp
ZihpbnRlcm1Ob2RlKQotICAgICAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKGludGVybU5vZGUsIEAzKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAwOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAg
JCQuaW50ZXJtQWdncmVnYXRlID0gMDsKLSAgICAgICAgfQotICAgIH0KLSAgICB8IElOVkFSSUFO
VCBJREVOVElGSUVSIHsKLSAgICAgICAgVkVSVEVYX09OTFkoImludmFyaWFudCBkZWNsYXJhdGlv
biIsIEAxKTsKLSAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soQDEsIGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImludmFyaWFudCB2YXJ5aW5nIikpCi0g
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICQkLnR5cGUuc2V0QmFzaWMo
RWJ0SW52YXJpYW50LCBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCBAMik7Ci0gICAgICAgIGlmICgh
JDIuc3ltYm9sKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgInVu
ZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCAkMi5zdHJpbmctPmNf
c3RyKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAwOwotICAgICAgICB9Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgewotICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDIuc3RyaW5nLCBUVHlwZSgkJC50eXBlKSwg
QDIpOwotICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCBAMik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgOwot
Ci1mdWxseV9zcGVjaWZpZWRfdHlwZQotICAgIDogdHlwZV9zcGVjaWZpZXIgewotICAgICAgICAk
JCA9ICQxOwotCi0gICAgICAgIGlmICgkMS5hcnJheSkgewotICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoQDEsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5Iik7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkMS5zZXRBcnJheShmYWxzZSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgfCB0eXBlX3F1YWxpZmllciB0eXBlX3NwZWNpZmllciAg
ewotICAgICAgICBpZiAoJDIuYXJyYXkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAy
LCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJheSIpOwotICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgJDIuc2V0QXJyYXkoZmFsc2UpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKCQxLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUgJiYKLSAgICAg
ICAgICAgICgkMi50eXBlID09IEVidEJvb2wgfHwgJDIudHlwZSA9PSBFYnRJbnQpKSB7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1
YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKCQxLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5n
SW4gfHwgJDEucXVhbGlmaWVyID09IEV2cVZhcnlpbmdPdXQpICYmCi0gICAgICAgICAgICAoJDIu
dHlwZSA9PSBFYnRCb29sIHx8ICQyLnR5cGUgPT0gRWJ0SW50KSkgewotICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoQDIsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJp
bmcoJDEucXVhbGlmaWVyKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgJCQgPSAkMjsKLSAgICAgICAgJCQucXVhbGlmaWVyID0gJDEucXVhbGlm
aWVyOwotICAgIH0KLSAgICA7Ci0KLXR5cGVfcXVhbGlmaWVyCi0gICAgOiBDT05TVF9RVUFMIHsK
LSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxQ29uc3QsIEAxKTsKLSAgICB9Ci0gICAg
fCBBVFRSSUJVVEUgewotICAgICAgICBWRVJURVhfT05MWSgiYXR0cmlidXRlIiwgQDEpOwotICAg
ICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjayhAMSwgY29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpLCAiYXR0cmlidXRlIikpCi0gICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cUF0dHJpYnV0ZSwgQDEp
OwotICAgIH0KLSAgICB8IFZBUllJTkcgewotICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJy
b3JDaGVjayhAMSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAidmFyeWlu
ZyIpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBpZiAoY29udGV4
dC0+c2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKQotICAgICAgICAgICAgJCQuc2V0QmFz
aWMoRWJ0Vm9pZCwgRXZxVmFyeWluZ091dCwgQDEpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFWYXJ5aW5nSW4sIEAxKTsKLSAgICB9Ci0gICAgfCBJ
TlZBUklBTlQgVkFSWUlORyB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNr
KEAxLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJpbnZhcmlhbnQgdmFy
eWluZyIpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBpZiAoY29u
dGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKQotICAgICAgICAgICAgJCQuc2V0
QmFzaWMoRWJ0Vm9pZCwgRXZxSW52YXJpYW50VmFyeWluZ091dCwgQDEpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFJbnZhcmlhbnRWYXJ5aW5nSW4s
IEAxKTsKLSAgICB9Ci0gICAgfCBVTklGT1JNIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPmdsb2Jh
bEVycm9yQ2hlY2soQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgInVu
aWZvcm0iKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgJCQuc2V0
QmFzaWMoRWJ0Vm9pZCwgRXZxVW5pZm9ybSwgQDEpOwotICAgIH0KLSAgICA7Ci0KLXR5cGVfc3Bl
Y2lmaWVyCi0gICAgOiB0eXBlX3NwZWNpZmllcl9ub19wcmVjIHsKLSAgICAgICAgJCQgPSAkMTsK
LQotICAgICAgICBpZiAoJCQucHJlY2lzaW9uID09IEVicFVuZGVmaW5lZCkgewotICAgICAgICAg
ICAgJCQucHJlY2lzaW9uID0gY29udGV4dC0+c3ltYm9sVGFibGUuZ2V0RGVmYXVsdFByZWNpc2lv
bigkMS50eXBlKTsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5wcmVjaXNpb25FcnJvckNoZWNr
KEAxLCAkJC5wcmVjaXNpb24sICQxLnR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHwgcHJlY2lz
aW9uX3F1YWxpZmllciB0eXBlX3NwZWNpZmllcl9ub19wcmVjIHsKLSAgICAgICAgJCQgPSAkMjsK
LSAgICAgICAgJCQucHJlY2lzaW9uID0gJDE7Ci0gICAgfQotICAgIDsKLQotcHJlY2lzaW9uX3F1
YWxpZmllcgotICAgIDogSElHSF9QUkVDSVNJT04gewotICAgICAgICAkJCA9IEVicEhpZ2g7Ci0g
ICAgfQotICAgIHwgTUVESVVNX1BSRUNJU0lPTiB7Ci0gICAgICAgICQkID0gRWJwTWVkaXVtOwot
ICAgIH0KLSAgICB8IExPV19QUkVDSVNJT04gIHsKLSAgICAgICAgJCQgPSBFYnBMb3c7Ci0gICAg
fQotICAgIDsKLQotdHlwZV9zcGVjaWZpZXJfbm9fcHJlYwotICAgIDogdHlwZV9zcGVjaWZpZXJf
bm9uYXJyYXkgewotICAgICAgICAkJCA9ICQxOwotICAgIH0KLSAgICB8IHR5cGVfc3BlY2lmaWVy
X25vbmFycmF5IExFRlRfQlJBQ0tFVCBjb25zdGFudF9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQg
ewotICAgICAgICAkJCA9ICQxOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJv
ckNoZWNrKEAyLCAkMSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgaW50IHNpemU7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+
YXJyYXlTaXplRXJyb3JDaGVjayhAMiwgJDMsIHNpemUpKQotICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQkLnNldEFycmF5KHRydWUsIHNpemUpOwotICAg
ICAgICB9Ci0gICAgfQotICAgIDsKLQotdHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkKLSAgICA6IFZP
SURfVFlQRSB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgJCQu
c2V0QmFzaWMoRWJ0Vm9pZCwgcXVhbCwgQDEpOwotICAgIH0KLSAgICB8IEZMT0FUX1RZUEUgewot
ICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVi
dEZsb2F0LCBxdWFsLCBAMSk7Ci0gICAgfQotICAgIHwgSU5UX1RZUEUgewotICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidEludCwgcXVhbCwg
QDEpOwotICAgIH0KLSAgICB8IEJPT0xfVFlQRSB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKLSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgQDEpOwotICAgIH0K
LSAgICB8IFZFQzIgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAg
ICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7Ci0gICAgICAgICQkLnNldEFnZ3JlZ2F0
ZSgyKTsKLSAgICB9Ci0gICAgfCBWRUMzIHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgQDEpOwotICAgICAgICAk
JC5zZXRBZ2dyZWdhdGUoMyk7Ci0gICAgfQotICAgIHwgVkVDNCB7Ci0gICAgICAgIFRRdWFsaWZp
ZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2Jh
bCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAx
KTsKLSAgICAgICAgJCQuc2V0QWdncmVnYXRlKDQpOwotICAgIH0KLSAgICB8IEJWRUMyIHsKLSAg
ICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRC
b29sLCBxdWFsLCBAMSk7Ci0gICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgyKTsKLSAgICB9Ci0gICAg
fCBCVkVDMyB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgJCQu
c2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgQDEpOwotICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMyk7
Ci0gICAgfQotICAgIHwgQlZFQzQgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7
Ci0gICAgICAgICQkLnNldEJhc2ljKEVidEJvb2wsIHF1YWwsIEAxKTsKLSAgICAgICAgJCQuc2V0
QWdncmVnYXRlKDQpOwotICAgIH0KLSAgICB8IElWRUMyIHsKLSAgICAgICAgVFF1YWxpZmllciBx
dWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDog
RXZxVGVtcG9yYXJ5OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsIEAxKTsKLSAg
ICAgICAgJCQuc2V0QWdncmVnYXRlKDIpOwotICAgIH0KLSAgICB8IElWRUMzIHsKLSAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRJbnQsIHF1
YWwsIEAxKTsKLSAgICAgICAgJCQuc2V0QWdncmVnYXRlKDMpOwotICAgIH0KLSAgICB8IElWRUM0
IHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9i
YWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAkJC5zZXRCYXNp
YyhFYnRJbnQsIHF1YWwsIEAxKTsKLSAgICAgICAgJCQuc2V0QWdncmVnYXRlKDQpOwotICAgIH0K
LSAgICB8IE1BVFJJWDIgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1i
b2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAg
ICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7Ci0gICAgICAgICQkLnNldEFnZ3Jl
Z2F0ZSgyLCB0cnVlKTsKLSAgICB9Ci0gICAgfCBNQVRSSVgzIHsKLSAgICAgICAgVFF1YWxpZmll
ciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFs
IDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgQDEp
OwotICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMywgdHJ1ZSk7Ci0gICAgfQotICAgIHwgTUFUUklY
NCB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgJCQuc2V0QmFz
aWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsKLSAgICAgICAgJCQuc2V0QWdncmVnYXRlKDQsIHRydWUp
OwotICAgIH0KLSAgICB8IFNBTVBMRVIyRCB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKLSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxlcjJELCBxdWFsLCBAMSk7Ci0gICAg
fQotICAgIHwgU0FNUExFUkNVQkUgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7
Ci0gICAgICAgICQkLnNldEJhc2ljKEVidFNhbXBsZXJDdWJlLCBxdWFsLCBAMSk7Ci0gICAgfQot
ICAgIHwgU0FNUExFUl9FWFRFUk5BTF9PRVMgewotICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBv
cnRzRXh0ZW5zaW9uKCJHTF9PRVNfRUdMX2ltYWdlX2V4dGVybmFsIikpIHsKLSAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKEAxLCAidW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyRXh0ZXJuYWxP
RVMiKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAg
ICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkg
PyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidFNhbXBs
ZXJFeHRlcm5hbE9FUywgcXVhbCwgQDEpOwotICAgIH0KLSAgICB8IFNBTVBMRVIyRFJFQ1Qgewot
ICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRXh0ZW5zaW9uKCJHTF9BUkJfdGV4dHVyZV9y
ZWN0YW5nbGUiKSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJ1bnN1cHBvcnRl
ZCB0eXBlIiwgInNhbXBsZXIyRFJlY3QiKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgfQotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAg
ICQkLnNldEJhc2ljKEVidFNhbXBsZXIyRFJlY3QsIHF1YWwsIEAxKTsKLSAgICB9Ci0gICAgfCBz
dHJ1Y3Rfc3BlY2lmaWVyIHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgJCQucXVhbGlmaWVy
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OwotICAgIH0KLSAgICB8IFRZUEVfTkFNRSB7Ci0gICAgICAgIC8vCi0gICAgICAg
IC8vIFRoaXMgaXMgZm9yIHVzZXIgZGVmaW5lZCB0eXBlIG5hbWVzLiAgVGhlIGxleGljYWwgcGhh
c2UgbG9va2VkIHVwIHRoZQotICAgICAgICAvLyB0eXBlLgotICAgICAgICAvLwotICAgICAgICBU
VHlwZSYgc3RydWN0dXJlID0gc3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4oJDEuc3ltYm9sKS0+Z2V0
VHlwZSgpOwotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICQkLnNl
dEJhc2ljKEVidFN0cnVjdCwgcXVhbCwgQDEpOwotICAgICAgICAkJC51c2VyRGVmID0gJnN0cnVj
dHVyZTsKLSAgICB9Ci0gICAgOwotCi1zdHJ1Y3Rfc3BlY2lmaWVyCi0gICAgOiBTVFJVQ1QgaWRl
bnRpZmllciBMRUZUX0JSQUNFIHsgaWYgKGNvbnRleHQtPmVudGVyU3RydWN0RGVjbGFyYXRpb24o
QDIsICokMi5zdHJpbmcpKSBjb250ZXh0LT5yZWNvdmVyKCk7IH0gc3RydWN0X2RlY2xhcmF0aW9u
X2xpc3QgUklHSFRfQlJBQ0UgewotICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNo
ZWNrKEAyLCAqJDIuc3RyaW5nKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQot
ICAgICAgICBUVHlwZSogc3RydWN0dXJlID0gbmV3IFRUeXBlKG5ldyBUU3RydWN0dXJlKCQyLnN0
cmluZywgJDUpKTsKLSAgICAgICAgVFZhcmlhYmxlKiB1c2VyVHlwZURlZiA9IG5ldyBUVmFyaWFi
bGUoJDIuc3RyaW5nLCAqc3RydWN0dXJlLCB0cnVlKTsKLSAgICAgICAgaWYgKCEgY29udGV4dC0+
c3ltYm9sVGFibGUuaW5zZXJ0KCp1c2VyVHlwZURlZikpIHsKLSAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKEAyLCAicmVkZWZpbml0aW9uIiwgJDIuc3RyaW5nLT5jX3N0cigpLCAic3RydWN0Iik7
Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgJCQu
c2V0QmFzaWMoRWJ0U3RydWN0LCBFdnFUZW1wb3JhcnksIEAxKTsKLSAgICAgICAgJCQudXNlckRl
ZiA9IHN0cnVjdHVyZTsKLSAgICAgICAgY29udGV4dC0+ZXhpdFN0cnVjdERlY2xhcmF0aW9uKCk7
Ci0gICAgfQotICAgIHwgU1RSVUNUIExFRlRfQlJBQ0UgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1
Y3REZWNsYXJhdGlvbihAMiwgKiQyLnN0cmluZykpIGNvbnRleHQtPnJlY292ZXIoKTsgfSBzdHJ1
Y3RfZGVjbGFyYXRpb25fbGlzdCBSSUdIVF9CUkFDRSB7Ci0gICAgICAgIFRUeXBlKiBzdHJ1Y3R1
cmUgPSBuZXcgVFR5cGUobmV3IFRTdHJ1Y3R1cmUoTmV3UG9vbFRTdHJpbmcoIiIpLCAkNCkpOwot
ICAgICAgICAkJC5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgQDEpOwotICAgICAg
ICAkJC51c2VyRGVmID0gc3RydWN0dXJlOwotICAgICAgICBjb250ZXh0LT5leGl0U3RydWN0RGVj
bGFyYXRpb24oKTsKLSAgICB9Ci0gICAgOwotCi1zdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdAotICAg
IDogc3RydWN0X2RlY2xhcmF0aW9uIHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICB9Ci0gICAgfCBz
dHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCBzdHJ1Y3RfZGVjbGFyYXRpb24gewotICAgICAgICAkJCA9
ICQxOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8ICQyLT5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgVEZpZWxkKiBmaWVsZCA9ICgqJDIpW2ldOwotICAgICAgICAgICAgZm9yIChz
aXplX3QgaiA9IDA7IGogPCAkJC0+c2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgICAgICBpZiAo
KCokJClbal0tPm5hbWUoKSA9PSBmaWVsZC0+bmFtZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKEAyLCAiZHVwbGljYXRlIGZpZWxkIG5hbWUgaW4gc3RydWN0dXJlOiIs
ICJzdHJ1Y3QiLCBmaWVsZC0+bmFtZSgpLmNfc3RyKCkpOwotICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgJCQtPnB1c2hfYmFjayhmaWVsZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgOwot
Ci1zdHJ1Y3RfZGVjbGFyYXRpb24KLSAgICA6IHR5cGVfc3BlY2lmaWVyIHN0cnVjdF9kZWNsYXJh
dG9yX2xpc3QgU0VNSUNPTE9OIHsKLSAgICAgICAgJCQgPSAkMjsKLQotICAgICAgICBpZiAoY29u
dGV4dC0+dm9pZEVycm9yQ2hlY2soQDEsICgqJDIpWzBdLT5uYW1lKCksICQxKSkgewotICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgJCQtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAvLwotICAg
ICAgICAgICAgLy8gQ2FyZWZ1bCBub3QgdG8gcmVwbGFjZSBhbHJlYWR5IGtub3duIGFzcGVjdHMg
b2YgdHlwZSwgbGlrZSBhcnJheS1uZXNzCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgVFR5
cGUqIHR5cGUgPSAoKiQkKVtpXS0+dHlwZSgpOwotICAgICAgICAgICAgdHlwZS0+c2V0QmFzaWNU
eXBlKCQxLnR5cGUpOwotICAgICAgICAgICAgdHlwZS0+c2V0Tm9taW5hbFNpemUoJDEuc2l6ZSk7
Ci0gICAgICAgICAgICB0eXBlLT5zZXRNYXRyaXgoJDEubWF0cml4KTsKLSAgICAgICAgICAgIHR5
cGUtPnNldFByZWNpc2lvbigkMS5wcmVjaXNpb24pOwotCi0gICAgICAgICAgICAvLyBkb24ndCBh
bGxvdyBhcnJheXMgb2YgYXJyYXlzCi0gICAgICAgICAgICBpZiAodHlwZS0+aXNBcnJheSgpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soQDEsICQx
KSkKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKCQxLmFycmF5KQotICAgICAgICAgICAgICAgIHR5cGUtPnNldEFy
cmF5U2l6ZSgkMS5hcnJheVNpemUpOwotICAgICAgICAgICAgaWYgKCQxLnVzZXJEZWYpCi0gICAg
ICAgICAgICAgICAgdHlwZS0+c2V0U3RydWN0KCQxLnVzZXJEZWYtPmdldFN0cnVjdCgpKTsKLQot
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdE5lc3RpbmdFcnJvckNoZWNrKEAxLCAqKCok
JClbaV0pKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICA7Ci0KLXN0cnVjdF9kZWNsYXJhdG9yX2xpc3QKLSAgICA6IHN0cnVjdF9kZWNs
YXJhdG9yIHsKLSAgICAgICAgJCQgPSBOZXdQb29sVEZpZWxkTGlzdCgpOwotICAgICAgICAkJC0+
cHVzaF9iYWNrKCQxKTsKLSAgICB9Ci0gICAgfCBzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0IENPTU1B
IHN0cnVjdF9kZWNsYXJhdG9yIHsKLSAgICAgICAgJCQtPnB1c2hfYmFjaygkMyk7Ci0gICAgfQot
ICAgIDsKLQotc3RydWN0X2RlY2xhcmF0b3IKLSAgICA6IGlkZW50aWZpZXIgewotICAgICAgICBp
ZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKEAxLCAqJDEuc3RyaW5nKSkKLSAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBUVHlwZSogdHlwZSA9IG5ldyBUVHlw
ZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpOwotICAgICAgICAkJCA9IG5ldyBURmllbGQodHlwZSwg
JDEuc3RyaW5nKTsKLSAgICB9Ci0gICAgfCBpZGVudGlmaWVyIExFRlRfQlJBQ0tFVCBjb25zdGFu
dF9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQgewotICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2
ZWRFcnJvckNoZWNrKEAxLCAqJDEuc3RyaW5nKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLQotICAgICAgICBUVHlwZSogdHlwZSA9IG5ldyBUVHlwZShFYnRWb2lkLCBFYnBVbmRl
ZmluZWQpOwotICAgICAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgICAgIGlmIChjb250ZXh0LT5hcnJh
eVNpemVFcnJvckNoZWNrKEAzLCAkMywgc2l6ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgIHR5cGUtPnNldEFycmF5U2l6ZShzaXplKTsKLQotICAgICAgICAkJCA9
IG5ldyBURmllbGQodHlwZSwgJDEuc3RyaW5nKTsKLSAgICB9Ci0gICAgOwotCi1pbml0aWFsaXpl
cgotICAgIDogYXNzaWdubWVudF9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQotICAgIDsKLQotZGVj
bGFyYXRpb25fc3RhdGVtZW50Ci0gICAgOiBkZWNsYXJhdGlvbiB7ICQkID0gJDE7IH0KLSAgICA7
Ci0KLXN0YXRlbWVudAotICAgIDogY29tcG91bmRfc3RhdGVtZW50ICB7ICQkID0gJDE7IH0KLSAg
ICB8IHNpbXBsZV9zdGF0ZW1lbnQgICAgeyAkJCA9ICQxOyB9Ci0gICAgOwotCi0vLyBHcmFtbWFy
IE5vdGU6ICBObyBsYWJlbGVkIHN0YXRlbWVudHM7ICdnb3RvJyBpcyBub3Qgc3VwcG9ydGVkLgot
Ci1zaW1wbGVfc3RhdGVtZW50Ci0gICAgOiBkZWNsYXJhdGlvbl9zdGF0ZW1lbnQgeyAkJCA9ICQx
OyB9Ci0gICAgfCBleHByZXNzaW9uX3N0YXRlbWVudCAgeyAkJCA9ICQxOyB9Ci0gICAgfCBzZWxl
Y3Rpb25fc3RhdGVtZW50ICAgeyAkJCA9ICQxOyB9Ci0gICAgfCBpdGVyYXRpb25fc3RhdGVtZW50
ICAgeyAkJCA9ICQxOyB9Ci0gICAgfCBqdW1wX3N0YXRlbWVudCAgICAgICAgeyAkJCA9ICQxOyB9
Ci0gICAgOwotCi1jb21wb3VuZF9zdGF0ZW1lbnQKLSAgICA6IExFRlRfQlJBQ0UgUklHSFRfQlJB
Q0UgeyAkJCA9IDA7IH0KLSAgICB8IExFRlRfQlJBQ0UgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5w
dXNoKCk7IH0gc3RhdGVtZW50X2xpc3QgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgfSBS
SUdIVF9CUkFDRSB7Ci0gICAgICAgIGlmICgkMyAhPSAwKSB7Ci0gICAgICAgICAgICAkMy0+c2V0
T3AoRU9wU2VxdWVuY2UpOwotICAgICAgICAgICAgJDMtPnNldExpbmUoQCQpOwotICAgICAgICB9
Ci0gICAgICAgICQkID0gJDM7Ci0gICAgfQotICAgIDsKLQotc3RhdGVtZW50X25vX25ld19zY29w
ZQotICAgIDogY29tcG91bmRfc3RhdGVtZW50X25vX25ld19zY29wZSB7ICQkID0gJDE7IH0KLSAg
ICB8IHNpbXBsZV9zdGF0ZW1lbnQgICAgICAgICAgICAgICAgeyAkJCA9ICQxOyB9Ci0gICAgOwot
Ci1zdGF0ZW1lbnRfd2l0aF9zY29wZQotICAgIDogeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNo
KCk7IH0gY29tcG91bmRfc3RhdGVtZW50X25vX25ld19zY29wZSB7IGNvbnRleHQtPnN5bWJvbFRh
YmxlLnBvcCgpOyAkJCA9ICQyOyB9Ci0gICAgfCB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2go
KTsgfSBzaW1wbGVfc3RhdGVtZW50ICAgICAgICAgICAgICAgIHsgY29udGV4dC0+c3ltYm9sVGFi
bGUucG9wKCk7ICQkID0gJDI7IH0KLSAgICA7Ci0KLWNvbXBvdW5kX3N0YXRlbWVudF9ub19uZXdf
c2NvcGUKLSAgICAvLyBTdGF0ZW1lbnQgdGhhdCBkb2Vzbid0IGNyZWF0ZSBhIG5ldyBzY29wZSwg
Zm9yIHNlbGVjdGlvbl9zdGF0ZW1lbnQsIGl0ZXJhdGlvbl9zdGF0ZW1lbnQKLSAgICA6IExFRlRf
QlJBQ0UgUklHSFRfQlJBQ0UgewotICAgICAgICAkJCA9IDA7Ci0gICAgfQotICAgIHwgTEVGVF9C
UkFDRSBzdGF0ZW1lbnRfbGlzdCBSSUdIVF9CUkFDRSB7Ci0gICAgICAgIGlmICgkMikgewotICAg
ICAgICAgICAgJDItPnNldE9wKEVPcFNlcXVlbmNlKTsKLSAgICAgICAgICAgICQyLT5zZXRMaW5l
KEAkKTsKLSAgICAgICAgfQotICAgICAgICAkJCA9ICQyOwotICAgIH0KLSAgICA7Ci0KLXN0YXRl
bWVudF9saXN0Ci0gICAgOiBzdGF0ZW1lbnQgewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5tYWtlQWdncmVnYXRlKCQxLCBAJCk7Ci0gICAgfQotICAgIHwgc3RhdGVtZW50X2xp
c3Qgc3RhdGVtZW50IHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0Fn
Z3JlZ2F0ZSgkMSwgJDIsIEAkKTsKLSAgICB9Ci0gICAgOwotCi1leHByZXNzaW9uX3N0YXRlbWVu
dAotICAgIDogU0VNSUNPTE9OICB7ICQkID0gMDsgfQotICAgIHwgZXhwcmVzc2lvbiBTRU1JQ09M
T04gIHsgJCQgPSBzdGF0aWNfY2FzdDxUSW50ZXJtTm9kZSo+KCQxKTsgfQotICAgIDsKLQotc2Vs
ZWN0aW9uX3N0YXRlbWVudAotICAgIDogSUYgTEVGVF9QQVJFTiBleHByZXNzaW9uIFJJR0hUX1BB
UkVOIHNlbGVjdGlvbl9yZXN0X3N0YXRlbWVudCB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5ib29s
RXJyb3JDaGVjayhAMSwgJDMpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTZWxlY3Rpb24oJDMsICQ1LCBAMSk7
Ci0gICAgfQotICAgIDsKLQotc2VsZWN0aW9uX3Jlc3Rfc3RhdGVtZW50Ci0gICAgOiBzdGF0ZW1l
bnRfd2l0aF9zY29wZSBFTFNFIHN0YXRlbWVudF93aXRoX3Njb3BlIHsKLSAgICAgICAgJCQubm9k
ZTEgPSAkMTsKLSAgICAgICAgJCQubm9kZTIgPSAkMzsKLSAgICB9Ci0gICAgfCBzdGF0ZW1lbnRf
d2l0aF9zY29wZSB7Ci0gICAgICAgICQkLm5vZGUxID0gJDE7Ci0gICAgICAgICQkLm5vZGUyID0g
MDsKLSAgICB9Ci0gICAgOwotCi0vLyBHcmFtbWFyIE5vdGU6ICBObyAnc3dpdGNoJy4gIFN3aXRj
aCBzdGF0ZW1lbnRzIG5vdCBzdXBwb3J0ZWQuCi0KLWNvbmRpdGlvbgotICAgIC8vIEluIDE5OTYg
YysrIGRyYWZ0LCBjb25kaXRpb25zIGNhbiBpbmNsdWRlIHNpbmdsZSBkZWNsYXJhdGlvbnMKLSAg
ICA6IGV4cHJlc3Npb24gewotICAgICAgICAkJCA9ICQxOwotICAgICAgICBpZiAoY29udGV4dC0+
Ym9vbEVycm9yQ2hlY2soJDEtPmdldExpbmUoKSwgJDEpKQotICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgIH0KLSAgICB8IGZ1bGx5X3NwZWNpZmllZF90eXBlIGlkZW50aWZpZXIg
RVFVQUwgaW5pdGlhbGl6ZXIgewotICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKLSAg
ICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soQDIsICQxKSkKLSAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgaWYgKGNvbnRleHQtPmJvb2xF
cnJvckNoZWNrKEAyLCAkMSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAg
ICAgICAgaWYgKCFjb250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoQDIsICokMi5zdHJpbmcsICQx
LCAkNCwgaW50ZXJtTm9kZSkpCi0gICAgICAgICAgICAkJCA9ICQ0OwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQkID0gMDsKLSAg
ICAgICAgfQotICAgIH0KLSAgICA7Ci0KLWl0ZXJhdGlvbl9zdGF0ZW1lbnQKLSAgICA6IFdISUxF
IExFRlRfUEFSRU4geyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7ICsrY29udGV4dC0+bG9v
cE5lc3RpbmdMZXZlbDsgfSBjb25kaXRpb24gUklHSFRfUEFSRU4gc3RhdGVtZW50X25vX25ld19z
Y29wZSB7Ci0gICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwotICAgICAgICAkJCA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRMb29wKEVMb29wV2hpbGUsIDAsICQ0LCAwLCAkNiwg
QDEpOwotICAgICAgICAtLWNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7Ci0gICAgfQotICAgIHwg
RE8geyArK2NvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0gc3RhdGVtZW50X3dpdGhfc2NvcGUg
V0hJTEUgTEVGVF9QQVJFTiBleHByZXNzaW9uIFJJR0hUX1BBUkVOIFNFTUlDT0xPTiB7Ci0gICAg
ICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVjayhAOCwgJDYpKQotICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZExvb3AoRUxvb3BEb1doaWxlLCAwLCAkNiwgMCwgJDMsIEA0KTsKLSAgICAgICAgLS1jb250ZXh0
LT5sb29wTmVzdGluZ0xldmVsOwotICAgIH0KLSAgICB8IEZPUiBMRUZUX1BBUkVOIHsgY29udGV4
dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK2NvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0gZm9y
X2luaXRfc3RhdGVtZW50IGZvcl9yZXN0X3N0YXRlbWVudCBSSUdIVF9QQVJFTiBzdGF0ZW1lbnRf
bm9fbmV3X3Njb3BlIHsKLSAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7Ci0gICAg
ICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3AoRUxvb3BGb3IsICQ0LCByZWlu
dGVycHJldF9jYXN0PFRJbnRlcm1UeXBlZCo+KCQ1Lm5vZGUxKSwgcmVpbnRlcnByZXRfY2FzdDxU
SW50ZXJtVHlwZWQqPigkNS5ub2RlMiksICQ3LCBAMSk7Ci0gICAgICAgIC0tY29udGV4dC0+bG9v
cE5lc3RpbmdMZXZlbDsKLSAgICB9Ci0gICAgOwotCi1mb3JfaW5pdF9zdGF0ZW1lbnQKLSAgICA6
IGV4cHJlc3Npb25fc3RhdGVtZW50IHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICB9Ci0gICAgfCBk
ZWNsYXJhdGlvbl9zdGF0ZW1lbnQgewotICAgICAgICAkJCA9ICQxOwotICAgIH0KLSAgICA7Ci0K
LWNvbmRpdGlvbm9wdAotICAgIDogY29uZGl0aW9uIHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICB9
Ci0gICAgfCAvKiBNYXkgYmUgbnVsbCAqLyB7Ci0gICAgICAgICQkID0gMDsKLSAgICB9Ci0gICAg
OwotCi1mb3JfcmVzdF9zdGF0ZW1lbnQKLSAgICA6IGNvbmRpdGlvbm9wdCBTRU1JQ09MT04gewot
ICAgICAgICAkJC5ub2RlMSA9ICQxOwotICAgICAgICAkJC5ub2RlMiA9IDA7Ci0gICAgfQotICAg
IHwgY29uZGl0aW9ub3B0IFNFTUlDT0xPTiBleHByZXNzaW9uICB7Ci0gICAgICAgICQkLm5vZGUx
ID0gJDE7Ci0gICAgICAgICQkLm5vZGUyID0gJDM7Ci0gICAgfQotICAgIDsKLQotanVtcF9zdGF0
ZW1lbnQKLSAgICA6IENPTlRJTlVFIFNFTUlDT0xPTiB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5s
b29wTmVzdGluZ0xldmVsIDw9IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAi
Y29udGludWUgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIiKTsKLSAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICAkJCA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wQ29udGludWUsIEAxKTsKLSAgICB9Ci0gICAgfCBC
UkVBSyBTRU1JQ09MT04gewotICAgICAgICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8
PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgImJyZWFrIHN0YXRlbWVudCBv
bmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJh
bmNoKEVPcEJyZWFrLCBAMSk7Ci0gICAgfQotICAgIHwgUkVUVVJOIFNFTUlDT0xPTiB7Ci0gICAg
ICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1cm4sIEAxKTsK
LSAgICAgICAgaWYgKGNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgp
ICE9IEVidFZvaWQpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAibm9uLXZvaWQg
ZnVuY3Rpb24gbXVzdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iKTsKLSAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICB8IFJFVFVSTiBleHByZXNz
aW9uIFNFTUlDT0xPTiB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJy
YW5jaChFT3BSZXR1cm4sICQyLCBAMSk7Ci0gICAgICAgIGNvbnRleHQtPmZ1bmN0aW9uUmV0dXJu
c1ZhbHVlID0gdHJ1ZTsKLSAgICAgICAgaWYgKGNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUt
PmdldEJhc2ljVHlwZSgpID09IEVidFZvaWQpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KEAxLCAidm9pZCBmdW5jdGlvbiBjYW5ub3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIik7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoKihjb250
ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlKSAhPSAkMi0+Z2V0VHlwZSgpKSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcihAMSwgImZ1bmN0aW9uIHJldHVybiBpcyBub3QgbWF0Y2hpbmcgdHlw
ZToiLCAicmV0dXJuIik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgfCBESVNDQVJEIFNFTUlDT0xPTiB7Ci0gICAgICAgIEZSQUdfT05MWSgi
ZGlzY2FyZCIsIEAxKTsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJh
bmNoKEVPcEtpbGwsIEAxKTsKLSAgICB9Ci0gICAgOwotCi0vLyBHcmFtbWFyIE5vdGU6ICBObyAn
Z290bycuICBHb3RvcyBhcmUgbm90IHN1cHBvcnRlZC4KLQotdHJhbnNsYXRpb25fdW5pdAotICAg
IDogZXh0ZXJuYWxfZGVjbGFyYXRpb24gewotICAgICAgICAkJCA9ICQxOwotICAgICAgICBjb250
ZXh0LT50cmVlUm9vdCA9ICQkOwotICAgIH0KLSAgICB8IHRyYW5zbGF0aW9uX3VuaXQgZXh0ZXJu
YWxfZGVjbGFyYXRpb24gewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93
QWdncmVnYXRlKCQxLCAkMiwgQCQpOwotICAgICAgICBjb250ZXh0LT50cmVlUm9vdCA9ICQkOwot
ICAgIH0KLSAgICA7Ci0KLWV4dGVybmFsX2RlY2xhcmF0aW9uCi0gICAgOiBmdW5jdGlvbl9kZWZp
bml0aW9uIHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICB9Ci0gICAgfCBkZWNsYXJhdGlvbiB7Ci0g
ICAgICAgICQkID0gJDE7Ci0gICAgfQotICAgIDsKLQotZnVuY3Rpb25fZGVmaW5pdGlvbgotICAg
IDogZnVuY3Rpb25fcHJvdG90eXBlIHsKLSAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlvbiA9ICQx
LmZ1bmN0aW9uOwotICAgICAgICAKLSAgICAgICAgY29uc3QgVFN5bWJvbCAqYnVpbHRJbiA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKGZ1bmN0aW9uLT5nZXRNYW5nbGVkTmFtZSgp
KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChidWlsdEluKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcihAMSwgImJ1aWx0LWluIGZ1bmN0aW9ucyBjYW5ub3QgYmUgcmVkZWZp
bmVkIiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpKTsKLSAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgVEZ1bmN0aW9uKiBwcmV2
RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9sVGFibGUuZmluZChm
dW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSkpOwotICAgICAgICAvLwotICAgICAgICAvLyBOb3Rl
OiAgJ3ByZXZEZWMnIGNvdWxkIGJlICdmdW5jdGlvbicgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdGlt
ZSB3ZSd2ZSBzZWVuIGZ1bmN0aW9uCi0gICAgICAgIC8vIGFzIGl0IHdvdWxkIGhhdmUganVzdCBi
ZWVuIHB1dCBpbiB0aGUgc3ltYm9sIHRhYmxlLiAgT3RoZXJ3aXNlLCB3ZSdyZSBsb29raW5nIHVw
Ci0gICAgICAgIC8vIGFuIGVhcmxpZXIgb2NjdXJhbmNlLgotICAgICAgICAvLwotICAgICAgICBp
ZiAocHJldkRlYy0+aXNEZWZpbmVkKCkpIHsKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAv
LyBUaGVuIHRoaXMgZnVuY3Rpb24gYWxyZWFkeSBoYXMgYSBib2R5LgotICAgICAgICAgICAgLy8K
LSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAiZnVuY3Rpb24gYWxyZWFkeSBoYXMgYSBi
b2R5IiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpKTsKLSAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBwcmV2RGVjLT5zZXREZWZpbmVkKCk7Ci0K
LSAgICAgICAgLy8KLSAgICAgICAgLy8gUmFpc2UgZXJyb3IgbWVzc2FnZSBpZiBtYWluIGZ1bmN0
aW9uIHRha2VzIGFueSBwYXJhbWV0ZXJzIG9yIHJldHVybiBhbnl0aGluZyBvdGhlciB0aGFuIHZv
aWQKLSAgICAgICAgLy8KLSAgICAgICAgaWYgKGZ1bmN0aW9uLT5nZXROYW1lKCkgPT0gIm1haW4i
KSB7Ci0gICAgICAgICAgICBpZiAoZnVuY3Rpb24tPmdldFBhcmFtQ291bnQoKSA+IDApIHsKLSAg
ICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgImZ1bmN0aW9uIGNhbm5vdCB0YWtlIGFu
eSBwYXJhbWV0ZXIocykiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwotICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChmdW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQpIHsK
LSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgIiIsIGZ1bmN0aW9uLT5nZXRSZXR1
cm5UeXBlKCkuZ2V0QmFzaWNTdHJpbmcoKSwgIm1haW4gZnVuY3Rpb24gY2Fubm90IHJldHVybiBh
IHZhbHVlIik7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8KLSAgICAgICAgLy8gUmVtZW1iZXIgdGhlIHJl
dHVybiB0eXBlIGZvciBsYXRlciBjaGVja2luZyBmb3IgUkVUVVJOIHN0YXRlbWVudHMuCi0gICAg
ICAgIC8vCi0gICAgICAgIGNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUgPSAmKHByZXZEZWMt
PmdldFJldHVyblR5cGUoKSk7Ci0gICAgICAgIGNvbnRleHQtPmZ1bmN0aW9uUmV0dXJuc1ZhbHVl
ID0gZmFsc2U7Ci0KLSAgICAgICAgLy8KLSAgICAgICAgLy8gSW5zZXJ0IHBhcmFtZXRlcnMgaW50
byB0aGUgc3ltYm9sIHRhYmxlLgotICAgICAgICAvLyBJZiB0aGUgcGFyYW1ldGVyIGhhcyBubyBu
YW1lLCBpdCdzIG5vdCBhbiBlcnJvciwganVzdCBkb24ndCBpbnNlcnQgaXQKLSAgICAgICAgLy8g
KGNvdWxkIGJlIHVzZWQgZm9yIHVudXNlZCBhcmdzKS4KLSAgICAgICAgLy8KLSAgICAgICAgLy8g
QWxzbywgYWNjdW11bGF0ZSB0aGUgbGlzdCBvZiBwYXJhbWV0ZXJzIGludG8gdGhlIEhJTCwgc28g
bG93ZXIgbGV2ZWwgY29kZQotICAgICAgICAvLyBrbm93cyB3aGVyZSB0byBmaW5kIHBhcmFtZXRl
cnMuCi0gICAgICAgIC8vCi0gICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHBhcmFtTm9kZXMgPSBu
ZXcgVEludGVybUFnZ3JlZ2F0ZTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5j
dGlvbi0+Z2V0UGFyYW1Db3VudCgpOyBpKyspIHsKLSAgICAgICAgICAgIGNvbnN0IFRQYXJhbWV0
ZXImIHBhcmFtID0gZnVuY3Rpb24tPmdldFBhcmFtKGkpOwotICAgICAgICAgICAgaWYgKHBhcmFt
Lm5hbWUgIT0gMCkgewotICAgICAgICAgICAgICAgIFRWYXJpYWJsZSAqdmFyaWFibGUgPSBuZXcg
VFZhcmlhYmxlKHBhcmFtLm5hbWUsICpwYXJhbS50eXBlKTsKLSAgICAgICAgICAgICAgICAvLwot
ICAgICAgICAgICAgICAgIC8vIEluc2VydCB0aGUgcGFyYW1ldGVycyB3aXRoIG5hbWUgaW4gdGhl
IHN5bWJvbCB0YWJsZS4KLSAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIGlmICgh
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAicmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5h
bWUoKS5jX3N0cigpKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICAgICAgICAgICAgICBkZWxldGUgdmFyaWFibGU7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIHBhcmFtZXRl
ciB0byB0aGUgSElMCi0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICBwYXJhbU5v
ZGVzID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtTm9kZXMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRTeW1ib2wodmFyaWFibGUtPmdldFVuaXF1ZUlkKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyaWFibGUtPmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+
Z2V0VHlwZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDEpOwotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICBwYXJhbU5vZGVzID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dB
Z2dyZWdhdGUocGFyYW1Ob2RlcywgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAi
IiwgKnBhcmFtLnR5cGUsIEAxKSwgQDEpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcihwYXJhbU5vZGVz
LCBFT3BQYXJhbWV0ZXJzLCBAMSk7Ci0gICAgICAgICQxLmludGVybUFnZ3JlZ2F0ZSA9IHBhcmFt
Tm9kZXM7Ci0gICAgICAgIGNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPSAwOwotICAgIH0KLSAg
ICBjb21wb3VuZF9zdGF0ZW1lbnRfbm9fbmV3X3Njb3BlIHsKLSAgICAgICAgLy8/PyBDaGVjayB0
aGF0IGFsbCBwYXRocyByZXR1cm4gYSB2YWx1ZSBpZiByZXR1cm4gdHlwZSAhPSB2b2lkID8KLSAg
ICAgICAgLy8gICBNYXkgYmUgYmVzdCBkb25lIGFzIHBvc3QgcHJvY2VzcyBwaGFzZSBvbiBpbnRl
cm1lZGlhdGUgY29kZQotICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+
Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCAmJiAhIGNvbnRleHQtPmZ1bmN0aW9uUmV0dXJuc1Zh
bHVlKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgImZ1bmN0aW9uIGRvZXMgbm90
IHJldHVybiBhIHZhbHVlOiIsICIiLCAkMS5mdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLmludGVybUFn
Z3JlZ2F0ZSwgJDMsIEAkKTsKLSAgICAgICAgY29udGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3Jl
Z2F0ZU9wZXJhdG9yKCQkLCBFT3BGdW5jdGlvbiwgQDEpOwotICAgICAgICAkJC0+Z2V0QXNBZ2dy
ZWdhdGUoKS0+c2V0TmFtZSgkMS5mdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKS5jX3N0cigpKTsK
LSAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldFR5cGUoJDEuZnVuY3Rpb24tPmdldFJl
dHVyblR5cGUoKSk7Ci0KLSAgICAgICAgLy8gc3RvcmUgdGhlIHByYWdtYSBpbmZvcm1hdGlvbiBm
b3IgZGVidWcgYW5kIG9wdGltaXplIGFuZCBvdGhlciB2ZW5kb3Igc3BlY2lmaWMKLSAgICAgICAg
Ly8gaW5mb3JtYXRpb24uIFRoaXMgaW5mb3JtYXRpb24gY2FuIGJlIHF1ZXJpZWQgZnJvbSB0aGUg
cGFyc2UgdHJlZQotICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0T3B0aW1pemUoY29u
dGV4dC0+cHJhZ21hKCkub3B0aW1pemUpOwotICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+
c2V0RGVidWcoY29udGV4dC0+cHJhZ21hKCkuZGVidWcpOwotCi0gICAgICAgIGNvbnRleHQtPnN5
bWJvbFRhYmxlLnBvcCgpOwotICAgIH0KLSAgICA7Ci0KLSUlCi0KLWludCBnbHNsYW5nX3BhcnNl
KFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKLSAgICByZXR1cm4geXlwYXJzZShjb250ZXh0KTsK
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNs
YW5nX2xleC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFu
Z19sZXguY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTA2MmNiNzZjOTMxMjhk
YjE3MjFkYWNlNTZiM2JiZDg0ODc5OTNiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNs
YW5nX2xleC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyOTc0ICswLDAgQEAKLSNsaW5lIDE3ICIu
L2dsc2xhbmcubCIKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0
ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKLQotLy8gSWdub3JlIGVycm9y
cyBpbiBhdXRvLWdlbmVyYXRlZCBjb2RlLgotI2lmIGRlZmluZWQoX19HTlVDX18pCi0jcHJhZ21h
IEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLWZ1bmN0aW9uIgotI3ByYWdtYSBHQ0Mg
ZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC12YXJpYWJsZSIKLSNwcmFnbWEgR0NDIGRpYWdu
b3N0aWMgaWdub3JlZCAiLVdzd2l0Y2gtZW51bSIKLSNlbGlmIGRlZmluZWQoX01TQ19WRVIpCi0j
cHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDA2NSkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0
MTg5KQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ1MDUpCi0jcHJhZ21hIHdhcm5pbmcoZGlz
YWJsZTogNDcwMSkKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX2NsYW5nX18pCi0jcHJhZ21hIGNs
YW5nIGRpYWdub3N0aWMgcHVzaAotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1X
dW5rbm93bi1wcmFnbWFzIgotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVw
cmVjYXRlZC1yZWdpc3RlciIKLSNlbmRpZgotCi0KLQotI2xpbmUgMjUgIi4vZ2xzbGFuZ19sZXgu
Y3BwIgotCi0jZGVmaW5lICBZWV9JTlRfQUxJR05FRCBzaG9ydCBpbnQKLQotLyogQSBsZXhpY2Fs
IHNjYW5uZXIgZ2VuZXJhdGVkIGJ5IGZsZXggKi8KLQotI2RlZmluZSBGTEVYX1NDQU5ORVIKLSNk
ZWZpbmUgWVlfRkxFWF9NQUpPUl9WRVJTSU9OIDIKLSNkZWZpbmUgWVlfRkxFWF9NSU5PUl9WRVJT
SU9OIDUKLSNkZWZpbmUgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OIDM1Ci0jaWYgWVlfRkxFWF9T
VUJNSU5PUl9WRVJTSU9OID4gMAotI2RlZmluZSBGTEVYX0JFVEEKLSNlbmRpZgotCi0vKiBGaXJz
dCwgd2UgZGVhbCB3aXRoICBwbGF0Zm9ybS1zcGVjaWZpYyBvciBjb21waWxlci1zcGVjaWZpYyBp
c3N1ZXMuICovCi0KLS8qIGJlZ2luIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KLSNpbmNsdWRlIDxz
dGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVk
ZSA8c3RkbGliLmg+Ci0KLS8qIGVuZCBzdGFuZGFyZCBDIGhlYWRlcnMuICovCi0KLS8qIGZsZXgg
aW50ZWdlciB0eXBlIGRlZmluaXRpb25zICovCi0KLSNpZm5kZWYgRkxFWElOVF9ICi0jZGVmaW5l
IEZMRVhJTlRfSAotCi0vKiBDOTkgc3lzdGVtcyBoYXZlIDxpbnR0eXBlcy5oPi4gTm9uLUM5OSBz
eXN0ZW1zIG1heSBvciBtYXkgbm90LiAqLwotCi0jaWYgZGVmaW5lZCAoX19TVERDX1ZFUlNJT05f
XykgJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCi0KLS8qIEM5OSBzYXlzIHRvIGRlZmlu
ZSBfX1NURENfTElNSVRfTUFDUk9TIGJlZm9yZSBpbmNsdWRpbmcgc3RkaW50LmgsCi0gKiBpZiB5
b3Ugd2FudCB0aGUgbGltaXQgKG1heC9taW4pIG1hY3JvcyBmb3IgaW50IHR5cGVzLiAKLSAqLwot
I2lmbmRlZiBfX1NURENfTElNSVRfTUFDUk9TCi0jZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1Mg
MQotI2VuZGlmCi0KLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgotdHlwZWRlZiBpbnQ4X3QgZmxleF9p
bnQ4X3Q7Ci10eXBlZGVmIHVpbnQ4X3QgZmxleF91aW50OF90OwotdHlwZWRlZiBpbnQxNl90IGZs
ZXhfaW50MTZfdDsKLXR5cGVkZWYgdWludDE2X3QgZmxleF91aW50MTZfdDsKLXR5cGVkZWYgaW50
MzJfdCBmbGV4X2ludDMyX3Q7Ci10eXBlZGVmIHVpbnQzMl90IGZsZXhfdWludDMyX3Q7Ci10eXBl
ZGVmIHVpbnQ2NF90IGZsZXhfdWludDY0X3Q7Ci0jZWxzZQotdHlwZWRlZiBzaWduZWQgY2hhciBm
bGV4X2ludDhfdDsKLXR5cGVkZWYgc2hvcnQgaW50IGZsZXhfaW50MTZfdDsKLXR5cGVkZWYgaW50
IGZsZXhfaW50MzJfdDsKLXR5cGVkZWYgdW5zaWduZWQgY2hhciBmbGV4X3VpbnQ4X3Q7IAotdHlw
ZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgZmxleF91aW50MTZfdDsKLXR5cGVkZWYgdW5zaWduZWQg
aW50IGZsZXhfdWludDMyX3Q7Ci0jZW5kaWYgLyogISBDOTkgKi8KLQotLyogTGltaXRzIG9mIGlu
dGVncmFsIHR5cGVzLiAqLwotI2lmbmRlZiBJTlQ4X01JTgotI2RlZmluZSBJTlQ4X01JTiAgICAg
ICAgICAgICAgICgtMTI4KQotI2VuZGlmCi0jaWZuZGVmIElOVDE2X01JTgotI2RlZmluZSBJTlQx
Nl9NSU4gICAgICAgICAgICAgICgtMzI3NjctMSkKLSNlbmRpZgotI2lmbmRlZiBJTlQzMl9NSU4K
LSNkZWZpbmUgSU5UMzJfTUlOICAgICAgICAgICAgICAoLTIxNDc0ODM2NDctMSkKLSNlbmRpZgot
I2lmbmRlZiBJTlQ4X01BWAotI2RlZmluZSBJTlQ4X01BWCAgICAgICAgICAgICAgICgxMjcpCi0j
ZW5kaWYKLSNpZm5kZWYgSU5UMTZfTUFYCi0jZGVmaW5lIElOVDE2X01BWCAgICAgICAgICAgICAg
KDMyNzY3KQotI2VuZGlmCi0jaWZuZGVmIElOVDMyX01BWAotI2RlZmluZSBJTlQzMl9NQVggICAg
ICAgICAgICAgICgyMTQ3NDgzNjQ3KQotI2VuZGlmCi0jaWZuZGVmIFVJTlQ4X01BWAotI2RlZmlu
ZSBVSU5UOF9NQVggICAgICAgICAgICAgICgyNTVVKQotI2VuZGlmCi0jaWZuZGVmIFVJTlQxNl9N
QVgKLSNkZWZpbmUgVUlOVDE2X01BWCAgICAgICAgICAgICAoNjU1MzVVKQotI2VuZGlmCi0jaWZu
ZGVmIFVJTlQzMl9NQVgKLSNkZWZpbmUgVUlOVDMyX01BWCAgICAgICAgICAgICAoNDI5NDk2NzI5
NVUpCi0jZW5kaWYKLQotI2VuZGlmIC8qICEgRkxFWElOVF9IICovCi0KLSNpZmRlZiBfX2NwbHVz
cGx1cwotCi0vKiBUaGUgImNvbnN0IiBzdG9yYWdlLWNsYXNzLW1vZGlmaWVyIGlzIHZhbGlkLiAq
LwotI2RlZmluZSBZWV9VU0VfQ09OU1QKLQotI2Vsc2UJLyogISBfX2NwbHVzcGx1cyAqLwotCi0v
KiBDOTkgcmVxdWlyZXMgX19TVERDX18gdG8gYmUgZGVmaW5lZCBhcyAxLiAqLwotI2lmIGRlZmlu
ZWQgKF9fU1REQ19fKQotCi0jZGVmaW5lIFlZX1VTRV9DT05TVAotCi0jZW5kaWYJLyogZGVmaW5l
ZCAoX19TVERDX18pICovCi0jZW5kaWYJLyogISBfX2NwbHVzcGx1cyAqLwotCi0jaWZkZWYgWVlf
VVNFX0NPTlNUCi0jZGVmaW5lIHl5Y29uc3QgY29uc3QKLSNlbHNlCi0jZGVmaW5lIHl5Y29uc3QK
LSNlbmRpZgotCi0vKiBSZXR1cm5lZCB1cG9uIGVuZC1vZi1maWxlLiAqLwotI2RlZmluZSBZWV9O
VUxMIDAKLQotLyogUHJvbW90ZXMgYSBwb3NzaWJseSBuZWdhdGl2ZSwgcG9zc2libHkgc2lnbmVk
IGNoYXIgdG8gYW4gdW5zaWduZWQKLSAqIGludGVnZXIgZm9yIHVzZSBhcyBhbiBhcnJheSBpbmRl
eC4gIElmIHRoZSBzaWduZWQgY2hhciBpcyBuZWdhdGl2ZSwKLSAqIHdlIHdhbnQgdG8gaW5zdGVh
ZCB0cmVhdCBpdCBhcyBhbiA4LWJpdCB1bnNpZ25lZCBjaGFyLCBoZW5jZSB0aGUKLSAqIGRvdWJs
ZSBjYXN0LgotICovCi0jZGVmaW5lIFlZX1NDX1RPX1VJKGMpICgodW5zaWduZWQgaW50KSAodW5z
aWduZWQgY2hhcikgYykKLQotLyogQW4gb3BhcXVlIHBvaW50ZXIuICovCi0jaWZuZGVmIFlZX1RZ
UEVERUZfWVlfU0NBTk5FUl9UCi0jZGVmaW5lIFlZX1RZUEVERUZfWVlfU0NBTk5FUl9UCi10eXBl
ZGVmIHZvaWQqIHl5c2Nhbl90OwotI2VuZGlmCi0KLS8qIEZvciBjb252ZW5pZW5jZSwgdGhlc2Ug
dmFycyAocGx1cyB0aGUgYmlzb24gdmFycyBmYXIgYmVsb3cpCi0gICBhcmUgbWFjcm9zIGluIHRo
ZSByZWVudHJhbnQgc2Nhbm5lci4gKi8KLSNkZWZpbmUgeXlpbiB5eWctPnl5aW5fcgotI2RlZmlu
ZSB5eW91dCB5eWctPnl5b3V0X3IKLSNkZWZpbmUgeXlleHRyYSB5eWctPnl5ZXh0cmFfcgotI2Rl
ZmluZSB5eWxlbmcgeXlnLT55eWxlbmdfcgotI2RlZmluZSB5eXRleHQgeXlnLT55eXRleHRfcgot
I2RlZmluZSB5eWxpbmVubyAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9ic19saW5lbm8p
Ci0jZGVmaW5lIHl5Y29sdW1uIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2JzX2NvbHVt
bikKLSNkZWZpbmUgeXlfZmxleF9kZWJ1ZyB5eWctPnl5X2ZsZXhfZGVidWdfcgotCi0vKiBFbnRl
ciBhIHN0YXJ0IGNvbmRpdGlvbi4gIFRoaXMgbWFjcm8gcmVhbGx5IG91Z2h0IHRvIHRha2UgYSBw
YXJhbWV0ZXIsCi0gKiBidXQgd2UgZG8gaXQgdGhlIGRpc2d1c3RpbmcgY3J1ZnR5IHdheSBmb3Jj
ZWQgb24gdXMgYnkgdGhlICgpLWxlc3MKLSAqIGRlZmluaXRpb24gb2YgQkVHSU4uCi0gKi8KLSNk
ZWZpbmUgQkVHSU4geXlnLT55eV9zdGFydCA9IDEgKyAyICoKLQotLyogVHJhbnNsYXRlIHRoZSBj
dXJyZW50IHN0YXJ0IHN0YXRlIGludG8gYSB2YWx1ZSB0aGF0IGNhbiBiZSBsYXRlciBoYW5kZWQK
LSAqIHRvIEJFR0lOIHRvIHJldHVybiB0byB0aGUgc3RhdGUuICBUaGUgWVlTVEFURSBhbGlhcyBp
cyBmb3IgbGV4Ci0gKiBjb21wYXRpYmlsaXR5LgotICovCi0jZGVmaW5lIFlZX1NUQVJUICgoeXln
LT55eV9zdGFydCAtIDEpIC8gMikKLSNkZWZpbmUgWVlTVEFURSBZWV9TVEFSVAotCi0vKiBBY3Rp
b24gbnVtYmVyIGZvciBFT0YgcnVsZSBvZiBhIGdpdmVuIHN0YXJ0IHN0YXRlLiAqLwotI2RlZmlu
ZSBZWV9TVEFURV9FT0Yoc3RhdGUpIChZWV9FTkRfT0ZfQlVGRkVSICsgc3RhdGUgKyAxKQotCi0v
KiBTcGVjaWFsIGFjdGlvbiBtZWFuaW5nICJzdGFydCBwcm9jZXNzaW5nIGEgbmV3IGZpbGUiLiAq
LwotI2RlZmluZSBZWV9ORVdfRklMRSB5eXJlc3RhcnQoeXlpbiAseXlzY2FubmVyICkKLQotI2Rl
ZmluZSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgMAotCi0vKiBTaXplIG9mIGRlZmF1bHQgaW5wdXQg
YnVmZmVyLiAqLwotI2lmbmRlZiBZWV9CVUZfU0laRQotI2RlZmluZSBZWV9CVUZfU0laRSAxNjM4
NAotI2VuZGlmCi0KLS8qIFRoZSBzdGF0ZSBidWYgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9s
ZCBvbmUgc3RhdGUgcGVyIGNoYXJhY3RlciBpbiB0aGUgbWFpbiBidWZmZXIuCi0gKi8KLSNkZWZp
bmUgWVlfU1RBVEVfQlVGX1NJWkUgICAoKFlZX0JVRl9TSVpFICsgMikgKiBzaXplb2YoeXlfc3Rh
dGVfdHlwZSkpCi0KLSNpZm5kZWYgWVlfVFlQRURFRl9ZWV9CVUZGRVJfU1RBVEUKLSNkZWZpbmUg
WVlfVFlQRURFRl9ZWV9CVUZGRVJfU1RBVEUKLXR5cGVkZWYgc3RydWN0IHl5X2J1ZmZlcl9zdGF0
ZSAqWVlfQlVGRkVSX1NUQVRFOwotI2VuZGlmCi0KLSNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpF
X1QKLSNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TSVpFX1QKLXR5cGVkZWYgc2l6ZV90IHl5X3NpemVf
dDsKLSNlbmRpZgotCi0jZGVmaW5lIEVPQl9BQ1RfQ09OVElOVUVfU0NBTiAwCi0jZGVmaW5lIEVP
Ql9BQ1RfRU5EX09GX0ZJTEUgMQotI2RlZmluZSBFT0JfQUNUX0xBU1RfTUFUQ0ggMgotCi0gICAg
LyogTm90ZTogV2Ugc3BlY2lmaWNhbGx5IG9taXQgdGhlIHRlc3QgZm9yIHl5X3J1bGVfY2FuX21h
dGNoX2VvbCBiZWNhdXNlIGl0IHJlcXVpcmVzCi0gICAgICogICAgICAgYWNjZXNzIHRvIHRoZSBs
b2NhbCB2YXJpYWJsZSB5eV9hY3QuIFNpbmNlIHl5bGVzcygpIGlzIGEgbWFjcm8sIGl0IHdvdWxk
IGJyZWFrCi0gICAgICogICAgICAgZXhpc3Rpbmcgc2Nhbm5lcnMgdGhhdCBjYWxsIHl5bGVzcygp
IGZyb20gT1VUU0lERSB5eWxleC4gCi0gICAgICogICAgICAgT25lIG9idmlvdXMgc29sdXRpb24g
aXQgdG8gbWFrZSB5eV9hY3QgYSBnbG9iYWwuIEkgdHJpZWQgdGhhdCwgYW5kIHNhdwotICAgICAq
ICAgICAgIGEgNSUgcGVyZm9ybWFuY2UgaGl0IGluIGEgbm9uLXl5bGluZW5vIHNjYW5uZXIsIGJl
Y2F1c2UgeXlfYWN0IGlzCi0gICAgICogICAgICAgbm9ybWFsbHkgZGVjbGFyZWQgYXMgYSByZWdp
c3RlciB2YXJpYWJsZS0tIHNvIGl0IGlzIG5vdCB3b3J0aCBpdC4KLSAgICAgKi8KLSAgICAjZGVm
aW5lICBZWV9MRVNTX0xJTkVOTyhuKSBcCi0gICAgICAgICAgICBkbyB7IFwKLSAgICAgICAgICAg
ICAgICB5eV9zaXplX3QgeXlsO1wKLSAgICAgICAgICAgICAgICBmb3IgKCB5eWwgPSBuOyB5eWwg
PCB5eWxlbmc7ICsreXlsIClcCi0gICAgICAgICAgICAgICAgICAgIGlmICggeXl0ZXh0W3l5bF0g
PT0gJ1xuJyApXAotICAgICAgICAgICAgICAgICAgICAgICAgLS15eWxpbmVubztcCi0gICAgICAg
ICAgICB9d2hpbGUoMCkKLSAgICAKLS8qIFJldHVybiBhbGwgYnV0IHRoZSBmaXJzdCAibiIgbWF0
Y2hlZCBjaGFyYWN0ZXJzIGJhY2sgdG8gdGhlIGlucHV0IHN0cmVhbS4gKi8KLSNkZWZpbmUgeXls
ZXNzKG4pIFwKLQlkbyBcCi0JCXsgXAotCQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5
eXRleHQuICovIFwKLSAgICAgICAgaW50IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwKLSAgICAg
ICAgWVlfTEVTU19MSU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7XAotCQkqeXlfY3AgPSB5eWctPnl5
X2hvbGRfY2hhcjsgXAotCQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUIFwKLQkJeXlnLT55eV9j
X2J1Zl9wID0geXlfY3AgPSB5eV9icCArIHl5bGVzc19tYWNyb19hcmcgLSBZWV9NT1JFX0FESjsg
XAotCQlZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWluICovIFwKLQkJ
fSBcCi0Jd2hpbGUgKCAwICkKLQotI2RlZmluZSB1bnB1dChjKSB5eXVucHV0KCBjLCB5eWctPnl5
dGV4dF9wdHIgLCB5eXNjYW5uZXIgKQotCi0jaWZuZGVmIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RB
VEUKLSNkZWZpbmUgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQotc3RydWN0IHl5X2J1ZmZlcl9z
dGF0ZQotCXsKLQlGSUxFICp5eV9pbnB1dF9maWxlOwotCi0JY2hhciAqeXlfY2hfYnVmOwkJLyog
aW5wdXQgYnVmZmVyICovCi0JY2hhciAqeXlfYnVmX3BvczsJCS8qIGN1cnJlbnQgcG9zaXRpb24g
aW4gaW5wdXQgYnVmZmVyICovCi0KLQkvKiBTaXplIG9mIGlucHV0IGJ1ZmZlciBpbiBieXRlcywg
bm90IGluY2x1ZGluZyByb29tIGZvciBFT0IKLQkgKiBjaGFyYWN0ZXJzLgotCSAqLwotCXl5X3Np
emVfdCB5eV9idWZfc2l6ZTsKLQotCS8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5
eV9jaF9idWYsIG5vdCBpbmNsdWRpbmcgRU9CCi0JICogY2hhcmFjdGVycy4KLQkgKi8KLQl5eV9z
aXplX3QgeXlfbl9jaGFyczsKLQotCS8qIFdoZXRoZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGku
ZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwKLQkgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBn
cm93IGl0LCBhbmQgc2hvdWxkIGZyZWUoKSBpdCB0bwotCSAqIGRlbGV0ZSBpdC4KLQkgKi8KLQlp
bnQgeXlfaXNfb3VyX2J1ZmZlcjsKLQotCS8qIFdoZXRoZXIgdGhpcyBpcyBhbiAiaW50ZXJhY3Rp
dmUiIGlucHV0IHNvdXJjZTsgaWYgc28sIGFuZAotCSAqIGlmIHdlJ3JlIHVzaW5nIHN0ZGlvIGZv
ciBpbnB1dCwgdGhlbiB3ZSB3YW50IHRvIHVzZSBnZXRjKCkKLQkgKiBpbnN0ZWFkIG9mIGZyZWFk
KCksIHRvIG1ha2Ugc3VyZSB3ZSBzdG9wIGZldGNoaW5nIGlucHV0IGFmdGVyCi0JICogZWFjaCBu
ZXdsaW5lLgotCSAqLwotCWludCB5eV9pc19pbnRlcmFjdGl2ZTsKLQotCS8qIFdoZXRoZXIgd2Un
cmUgY29uc2lkZXJlZCB0byBiZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZS4KLQkgKiBJZiBz
bywgJ14nIHJ1bGVzIHdpbGwgYmUgYWN0aXZlIG9uIHRoZSBuZXh0IG1hdGNoLCBvdGhlcndpc2UK
LQkgKiBub3QuCi0JICovCi0JaW50IHl5X2F0X2JvbDsKLQotICAgIGludCB5eV9ic19saW5lbm87
IC8qKjwgVGhlIGxpbmUgY291bnQuICovCi0gICAgaW50IHl5X2JzX2NvbHVtbjsgLyoqPCBUaGUg
Y29sdW1uIGNvdW50LiAqLwotICAgIAotCS8qIFdoZXRoZXIgdG8gdHJ5IHRvIGZpbGwgdGhlIGlu
cHV0IGJ1ZmZlciB3aGVuIHdlIHJlYWNoIHRoZQotCSAqIGVuZCBvZiBpdC4KLQkgKi8KLQlpbnQg
eXlfZmlsbF9idWZmZXI7Ci0KLQlpbnQgeXlfYnVmZmVyX3N0YXR1czsKLQotI2RlZmluZSBZWV9C
VUZGRVJfTkVXIDAKLSNkZWZpbmUgWVlfQlVGRkVSX05PUk1BTCAxCi0JLyogV2hlbiBhbiBFT0Yn
cyBiZWVuIHNlZW4gYnV0IHRoZXJlJ3Mgc3RpbGwgc29tZSB0ZXh0IHRvIHByb2Nlc3MKLQkgKiB0
aGVuIHdlIG1hcmsgdGhlIGJ1ZmZlciBhcyBZWV9FT0ZfUEVORElORywgdG8gaW5kaWNhdGUgdGhh
dCB3ZQotCSAqIHNob3VsZG4ndCB0cnkgcmVhZGluZyBmcm9tIHRoZSBpbnB1dCBzb3VyY2UgYW55
IG1vcmUuICBXZSBtaWdodAotCSAqIHN0aWxsIGhhdmUgYSBidW5jaCBvZiB0b2tlbnMgdG8gbWF0
Y2gsIHRob3VnaCwgYmVjYXVzZSBvZgotCSAqIHBvc3NpYmxlIGJhY2tpbmctdXAuCi0JICoKLQkg
KiBXaGVuIHdlIGFjdHVhbGx5IHNlZSB0aGUgRU9GLCB3ZSBjaGFuZ2UgdGhlIHN0YXR1cyB0byAi
bmV3IgotCSAqICh2aWEgeXlyZXN0YXJ0KCkpLCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBjb250aW51
ZSBzY2FubmluZyBieQotCSAqIGp1c3QgcG9pbnRpbmcgeXlpbiBhdCBhIG5ldyBpbnB1dCBmaWxl
LgotCSAqLwotI2RlZmluZSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgMgotCi0JfTsKLSNlbmRpZiAv
KiAhWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURSAqLwotCi0vKiBXZSBwcm92aWRlIG1hY3JvcyBm
b3IgYWNjZXNzaW5nIGJ1ZmZlciBzdGF0ZXMgaW4gY2FzZSBpbiB0aGUKLSAqIGZ1dHVyZSB3ZSB3
YW50IHRvIHB1dCB0aGUgYnVmZmVyIHN0YXRlcyBpbiBhIG1vcmUgZ2VuZXJhbAotICogInNjYW5u
ZXIgc3RhdGUiLgotICoKLSAqIFJldHVybnMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIG9yIE5VTEwu
Ci0gKi8KLSNkZWZpbmUgWVlfQ1VSUkVOVF9CVUZGRVIgKCB5eWctPnl5X2J1ZmZlcl9zdGFjayBc
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgID8geXlnLT55eV9idWZmZXJfc3RhY2tbeXlnLT55
eV9idWZmZXJfc3RhY2tfdG9wXSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDogTlVMTCkK
LQotLyogU2FtZSBhcyBwcmV2aW91cyBtYWNybywgYnV0IHVzZWZ1bCB3aGVuIHdlIGtub3cgdGhh
dCB0aGUgYnVmZmVyIHN0YWNrIGlzIG5vdAotICogTlVMTCBvciB3aGVuIHdlIG5lZWQgYW4gbHZh
bHVlLiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCi0gKi8KLSNkZWZpbmUgWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFIHl5Zy0+eXlfYnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcF0K
LQotdm9pZCB5eXJlc3RhcnQgKEZJTEUgKmlucHV0X2ZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5lciAp
Owotdm9pZCB5eV9zd2l0Y2hfdG9fYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAs
eXlzY2FuX3QgeXlzY2FubmVyICk7Ci1ZWV9CVUZGRVJfU1RBVEUgeXlfY3JlYXRlX2J1ZmZlciAo
RklMRSAqZmlsZSxpbnQgc2l6ZSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHl5X2RlbGV0
ZV9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQg
eXlfZmx1c2hfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYiAseXlzY2FuX3QgeXlzY2FubmVyICk7
Ci12b2lkIHl5cHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICx5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgeXlwb3BfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKLQotc3RhdGljIHZvaWQgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKLXN0YXRpYyB2b2lkIHl5X2xvYWRfYnVmZmVyX3N0YXRlICh5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKLXN0YXRpYyB2b2lkIHl5X2luaXRfYnVmZmVyIChZWV9CVUZGRVJfU1RB
VEUgYixGSUxFICpmaWxlICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotI2RlZmluZSBZWV9GTFVT
SF9CVUZGRVIgeXlfZmx1c2hfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIpCi0K
LVlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J1ZmZlciAoY2hhciAqYmFzZSx5eV9zaXplX3Qgc2l6
ZSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci1ZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9zdHJpbmcg
KHl5Y29uc3QgY2hhciAqeXlfc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLVlZX0JVRkZFUl9T
VEFURSB5eV9zY2FuX2J5dGVzICh5eWNvbnN0IGNoYXIgKmJ5dGVzLHl5X3NpemVfdCBsZW4gLHl5
c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkICp5eWFsbG9jICh5eV9zaXplX3QgLHl5c2Nhbl90
IHl5c2Nhbm5lciApOwotdm9pZCAqeXlyZWFsbG9jICh2b2lkICoseXlfc2l6ZV90ICx5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKLXZvaWQgeXlmcmVlICh2b2lkICogLHl5c2Nhbl90IHl5c2Nhbm5lciAp
OwotCi0jZGVmaW5lIHl5X25ld19idWZmZXIgeXlfY3JlYXRlX2J1ZmZlcgotCi0jZGVmaW5lIHl5
X3NldF9pbnRlcmFjdGl2ZShpc19pbnRlcmFjdGl2ZSkgXAotCXsgXAotCWlmICggISBZWV9DVVJS
RU5UX0JVRkZFUiApeyBcCi0gICAgICAgIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVy
KTsgXAotCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCi0gICAgICAgICAgICB5eV9j
cmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwKLQl9IFwKLQlZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlID0gaXNfaW50ZXJhY3RpdmU7
IFwKLQl9Ci0KLSNkZWZpbmUgeXlfc2V0X2JvbChhdF9ib2wpIFwKLQl7IFwKLQlpZiAoICEgWVlf
Q1VSUkVOVF9CVUZGRVIgKXtcCi0gICAgICAgIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2Fu
bmVyKTsgXAotCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCi0gICAgICAgICAgICB5
eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwKLQl9IFwKLQlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCA9IGF0X2JvbDsgXAotCX0KLQotI2Rl
ZmluZSBZWV9BVF9CT0woKSAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wpCi0K
LS8qIEJlZ2luIHVzZXIgc2VjdDMgKi8KLQotI2RlZmluZSB5eXdyYXAobikgMQotI2RlZmluZSBZ
WV9TS0lQX1lZV1JBUAotCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgWVlfQ0hBUjsKLQotdHlwZWRl
ZiBpbnQgeXlfc3RhdGVfdHlwZTsKLQotI2RlZmluZSB5eXRleHRfcHRyIHl5dGV4dF9yCi0KLXN0
YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlzY2Fu
bmVyICk7Ci1zdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICh5eV9zdGF0ZV90
eXBlIGN1cnJlbnRfc3RhdGUgICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotc3RhdGljIGludCB5eV9n
ZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotc3RhdGljIHZvaWQgeXlfZmF0
YWxfZXJyb3IgKHl5Y29uc3QgY2hhciBtc2dbXSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLS8q
IERvbmUgYWZ0ZXIgdGhlIGN1cnJlbnQgcGF0dGVybiBoYXMgYmVlbiBtYXRjaGVkIGFuZCBiZWZv
cmUgdGhlCi0gKiBjb3JyZXNwb25kaW5nIGFjdGlvbiAtIHNldHMgdXAgeXl0ZXh0LgotICovCi0j
ZGVmaW5lIFlZX0RPX0JFRk9SRV9BQ1RJT04gXAotCXl5Zy0+eXl0ZXh0X3B0ciA9IHl5X2JwOyBc
Ci0JeXlsZW5nID0gKHl5X3NpemVfdCkgKHl5X2NwIC0geXlfYnApOyBcCi0JeXlnLT55eV9ob2xk
X2NoYXIgPSAqeXlfY3A7IFwKLQkqeXlfY3AgPSAnXDAnOyBcCi0JeXlnLT55eV9jX2J1Zl9wID0g
eXlfY3A7Ci0KLSNkZWZpbmUgWVlfTlVNX1JVTEVTIDE0NwotI2RlZmluZSBZWV9FTkRfT0ZfQlVG
RkVSIDE0OAotLyogVGhpcyBzdHJ1Y3QgaXMgbm90IHVzZWQgaW4gdGhpcyBzY2FubmVyLAotICAg
YnV0IGl0cyBwcmVzZW5jZSBpcyBuZWNlc3NhcnkuICovCi1zdHJ1Y3QgeXlfdHJhbnNfaW5mbwot
CXsKLQlmbGV4X2ludDMyX3QgeXlfdmVyaWZ5OwotCWZsZXhfaW50MzJfdCB5eV9ueHQ7Ci0JfTsK
LXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9hY2NlcHRbNDQzXSA9Ci0gICAgeyAgIDAs
Ci0gICAgICAgIDAsICAgIDAsICAxNDgsICAxNDYsICAxNDUsICAxNDUsICAxMzIsICAxMzgsICAx
NDMsICAxMjcsCi0gICAgICAxMjgsICAxMzYsICAxMzUsICAxMjQsICAxMzMsICAxMzEsICAxMzcs
ICAgOTYsICAgOTYsICAxMjUsCi0gICAgICAxMjEsICAxMzksICAxMjYsICAxNDAsICAxNDQsICAg
OTMsICAxMjksICAxMzAsICAxNDIsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAxMjIsCi0gICAgICAxNDEs
ICAxMjMsICAxMzQsICAxMTgsICAxMDQsICAxMjMsICAxMTIsICAxMDcsICAxMDIsICAxMTAsCi0g
ICAgICAxMDAsICAxMTEsICAxMDEsICAgOTksICAxMDMsICAgOTgsICAgOTUsICAgOTYsICAgIDAs
ICAgIDAsCi0gICAgICAxMzAsICAxMjIsICAxMjksICAxMTksICAxMTUsICAxMTcsICAxMTYsICAx
MjAsICAgOTMsICAxMDgsCi0gICAgICAxMTQsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgMTIsICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0KLSAgICAgICA5MywgICA5MywgICA5
MywgICA5MywgICA5MywgICAxNSwgICAxNywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5Mywg
ICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAg
ICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5Mywg
ICA5MywKLSAgICAgICA5MywgICA5MywgICA5MywgICA5MywgIDEwOSwgIDExMywgICAgMCwgICA5
OCwgICAgMCwgICAgMCwKLSAgICAgICA5NywgICA5NCwgIDEwNSwgIDEwNiwgICA0NSwgICA5Mywg
ICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5
MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICA5Mywg
ICAxMywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5
MywgICAyMSwgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAg
ICA5MywgICAxOCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5
MywKLSAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5Mywg
ICA5MywgICA5MywKLQotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgICAwLCAg
IDk5LCAgICAwLCAgIDk4LCAgIDkzLAotICAgICAgIDIzLCAgIDkzLCAgIDkzLCAgIDkwLCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDE2LCAgIDQ4LCAg
IDkzLCAgIDkzLCAgIDkzLCAgIDY0LCAgIDkzLCAgIDkzLCAgIDUzLAotICAgICAgIDY4LCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDY1LAotICAgICAg
ICA0LCAgIDI4LCAgIDI5LCAgIDMwLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAg
IDkzLCAgIDkzLAotICAgICAgIDUxLCAgIDI0LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLCAgIDMxLCAgIDMyLAotICAgICAgIDMzLCAgIDIyLCAgIDkzLCAgIDkzLCAgIDkzLCAg
IDEwLCAgIDM3LCAgIDM4LCAgIDM5LCAgIDQ2LAotICAgICAgICA3LCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLCAgIDc3LCAgIDc4LCAgIDc5LCAgIDkzLCAgIDI1LAotICAgICAgIDY5LCAgIDIwLCAg
IDgwLCAgIDgxLCAgIDgyLCAgICAyLCAgIDc0LCAgIDc1LCAgIDc2LCAgIDkzLAotCi0gICAgICAg
MTksICAgNzIsICAgOTMsICAgOTMsICAgMzQsICAgMzUsICAgMzYsICAgOTMsICAgOTMsICAgOTMs
Ci0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgNjYsICAgOTMsICAg
OTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgNDcsICAgOTMs
ICAgOTIsICAgOTMsICAgOTMsCi0gICAgICAgMTQsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
NjcsICAgNjEsICAgNTYsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgNzMs
ICAgNTIsICAgOTMsICAgNTksICAgMjcsICAgOTMsICAgODksCi0gICAgICAgNjAsICAgNDQsICAg
NzEsICAgNTQsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMs
ICAgOTMsICAgNTUsICAgMjYsICAgOTMsICAgOTMsICAgOTMsICAgIDMsICAgOTMsICAgOTMsCi0g
ICAgICAgOTMsICAgOTMsICAgOTMsICAgNDksICAgIDgsICAgOTMsICAgIDksICAgOTMsICAgOTMs
ICAgMTEsCi0gICAgICAgNjIsICAgOTMsICAgOTMsICAgOTMsICAgNTcsICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgNTAsICAgNzAsICAgNTgsICAgIDYsICAgNjMs
ICAgIDEsICAgOTEsICAgIDUsICAgODMsCi0KLSAgICAgICA0MCwgICA4NCwgICA5MywgICA5Mywg
ICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICA5
MywgICA5MywgICA0MSwgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5Mywg
ICA5MywgICA0MywgICA5MywgICA4NywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAg
ICAgICA4NSwgICA5MywgICA4NiwgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5Mywg
ICA0MiwKLSAgICAgICA4OCwgICAgMAotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2lu
dDMyX3QgeXlfZWNbMjU2XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDIsICAgIDMsCi0gICAgICAgIDIsICAgIDIs
ICAgIDIsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
Ci0gICAgICAgIDEsICAgIDIsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDUsICAgIDYsICAg
IDEsICAgIDcsCi0gICAgICAgIDgsICAgIDksICAgMTAsICAgMTEsICAgMTIsICAgMTMsICAgMTQs
ICAgMTUsICAgMTYsICAgMTcsCi0gICAgICAgMTgsICAgMTksICAgMjAsICAgMjAsICAgMjAsICAg
MjEsICAgMjEsICAgMjIsICAgMjMsICAgMjQsCi0gICAgICAgMjUsICAgMjYsICAgMjcsICAgIDEs
ICAgMjgsICAgMjgsICAgMjksICAgMzAsICAgMzEsICAgMjgsCi0gICAgICAgMzIsICAgMzIsICAg
MzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzMsICAgMzIsCi0gICAgICAgMzIs
ICAgMzQsICAgMzUsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzYsICAgMzIsICAgMzIsCi0g
ICAgICAgMzcsICAgIDEsICAgMzgsICAgMzksICAgMzIsICAgIDEsICAgNDAsICAgNDEsICAgNDIs
ICAgNDMsCi0KLSAgICAgICA0NCwgICA0NSwgICA0NiwgICA0NywgICA0OCwgICAzMiwgICA0OSwg
ICA1MCwgICA1MSwgICA1MiwKLSAgICAgICA1MywgICA1NCwgICAzMiwgICA1NSwgICA1NiwgICA1
NywgICA1OCwgICA1OSwgICA2MCwgICA2MSwKLSAgICAgICA2MiwgICA2MywgICA2NCwgICA2NSwg
ICA2NiwgICA2NywgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLQotICAgICAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9tZXRh
WzY4XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsCi0gICAgICAgIDIsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDIsICAgIDIsICAgIDIsCi0gICAgICAgIDIs
ICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDEsICAgIDEsICAgIDEsICAgIDIsCi0g
ICAgICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDMsICAgIDMsICAgIDMsICAgIDMs
ICAgIDMsCi0gICAgICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAg
IDMsICAgIDMsICAgIDMsCi0gICAgICAgIDMsICAgIDMsICAgIDMsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbNDQ1
XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDAsICAgIDAsICA1ODcsICA1ODgsICA1ODgsICA1ODgs
ICA1NjEsICAgNDMsICAgNjQsICA1ODgsCi0gICAgICA1ODgsICA1NjAsICAgNjEsICA1ODgsICAg
NjAsICAgNTgsICA1NTksICAgNzcsICAgODYsICA1NTcsCi0gICAgICA1ODgsICAxMDQsICA1NTcs
ICAgNTUsICA1ODgsICAgIDAsICA1ODgsICA1ODgsICAgNzUsICAgMjYsCi0gICAgICAgNTcsICAg
ODIsICAgODMsICAgNzMsICAgOTMsICA1MjgsICAgOTcsICAgOTUsICA1MjcsICAgNDQsCi0gICAg
ICAgNzEsICA1MjEsICAxMDQsICA1MzQsICAxMTAsICAxMTYsICAgMzUsICAxMTEsICA1MzAsICA1
ODgsCi0gICAgICAxMTQsICA1ODgsICA1ODgsICA1ODgsICA1ODgsICA1ODgsICA1ODgsICA1ODgs
ICA1ODgsICA1ODgsCi0gICAgICA1ODgsICA1ODgsICA1ODgsICAxNjUsICA1ODgsICAxNzIsICAy
MDIsICAyMTEsICAyMzMsICAgIDAsCi0gICAgICA1ODgsICA1ODgsICA1ODgsICA1NTEsICA1ODgs
ICA1ODgsICA1ODgsICA1NTAsICAgIDAsICA1ODgsCi0gICAgICA1ODgsICA1MjMsICA1MTYsICA1
MTksICA1MjcsICA1MjYsICA1MTMsICA1MjgsICA1MTUsICA1MjEsCi0gICAgICA1MDksICA1MDYs
ICA1MTksICA1MDYsICA1MDMsICA1MDMsICA1MDksICA0OTcsICAxMDgsICA1MDIsCi0KLSAgICAg
IDUxMiwgIDQ5OCwgIDUwNCwgIDUwNywgIDUwOCwgICAgMCwgIDE0NSwgIDUwNywgIDExMywgIDQ5
MywKLSAgICAgIDUwNiwgIDQ5NywgIDQ5OSwgIDQ4OSwgIDUwMywgIDUwMCwgIDUwMiwgIDQ4NSwg
IDQ5MCwgIDQ4NywKLSAgICAgIDQ3NiwgIDE1NywgIDQ4NCwgIDQ4OSwgIDQ4NSwgIDQ4NywgIDQ3
NiwgIDQ3OSwgIDExOCwgIDQ4NCwKLSAgICAgIDQ3NiwgIDQ4OCwgICA3MCwgIDQ4MSwgIDU4OCwg
IDU4OCwgIDI0NiwgIDI1MywgIDI3MCwgIDIxOSwKLSAgICAgIDI4MywgICAgMCwgIDU4OCwgIDU4
OCwgICAgMCwgIDQ3MywgIDQ3NywgIDQ4NiwgIDQ4MywgIDQ2NywKLSAgICAgIDQ2NywgIDExOSwg
IDQ4MiwgIDQ3OSwgIDQ3OSwgIDQ3NywgIDQ3NCwgIDQ2NiwgIDQ3MiwgIDQ1OSwKLSAgICAgIDQ3
MCwgIDQ1NiwgIDQ3MiwgICAgMCwgIDQ2OSwgIDQ1NywgIDQ2NCwgIDQ2MSwgIDQ2NSwgIDQ1OCwK
LSAgICAgIDQ0NywgIDQ0NiwgIDQ1OSwgIDQ2MiwgIDQ1OSwgIDQ1NCwgIDQ0NSwgIDE4OCwgIDQ1
MCwgIDQ1MywKLSAgICAgIDQ0NCwgIDQ0MSwgIDQ0NSwgIDQ1MSwgIDQ0MiwgIDQzMywgIDQzNiwg
IDQzNCwgIDQ0NCwgIDQzMCwKLSAgICAgIDQyOCwgIDQ0MSwgIDQyNywgIDQyOSwgIDQyNiwgIDQz
NywgIDQzNiwgIDEyNCwgIDQzMSwgIDQyNiwKLQotICAgICAgNDE1LCAgMjU4LCAgNDMzLCAgNDM1
LCAgNDI0LCAgMjkwLCAgMjk3LCAgMzA0LCAgMzExLCAgNDI1LAotICAgICAgICAwLCAgNDIzLCAg
Mjc1LCAgICAwLCAgNDE1LCAgNDEzLCAgNDIxLCAgNDEwLCAgNDI3LCAgNDE2LAotICAgICAgMzE2
LCAgICAwLCAgICAwLCAgNDEwLCAgNDIwLCAgNDIwLCAgICAwLCAgNDA1LCAgMzE5LCAgICAwLAot
ICAgICAgICAwLCAgNDA3LCAgMzIyLCAgNDA4LCAgNDAyLCAgNDAxLCAgNDAyLCAgNDAxLCAgMzI1
LCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMzk3LCAgMzk4LCAgNDAzLCAg
Mzk0LCAgNDA3LCAgNDAyLAotICAgICAgNDAxLCAgMzkzLCAgMzk3LCAgMzg5LCAgMzkyLCAgMzk2
LCAgNDAxLCAgMzg3LCAgMzk5LCAgMzkwLAotICAgICAgICAwLCAgICAwLCAgMzk2LCAgMzg1LCAg
Mzg1LCAgMzkwLCAgMzg5LCAgMzg2LCAgICAwLCAgICAwLAotICAgICAgICAwLCAgICAwLCAgMzc2
LCAgMzg4LCAgMzkwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAotICAgICAgICAwLCAg
Mzc4LCAgMzc5LCAgMzczLCAgMzgzLCAgICAwLCAgICAwLCAgICAwLCAgMzc0LCAgICAwLAotICAg
ICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
MzgxLAotCi0gICAgICAgIDAsICAgIDAsICAzNzksICAzNzUsICAgIDAsICAgIDAsICAgIDAsICAz
NzEsICAzNjcsICAzNzIsCi0gICAgICAzNjIsICAzNzUsICAzNjEsICAzNzQsICAzNjMsICAzNzAs
ICAgIDAsICAzNjgsICAzNzAsICAzNTQsCi0gICAgICAzNTYsICAzNjIsICAzNjgsICAzNjMsICAz
NTEsICAgIDAsICAzNTMsICAgIDAsICAzNTIsICAzNTUsCi0gICAgICAgIDAsICAzNDQsICAzNDMs
ICAzNDMsICAzNTYsICAgIDAsICAzNTgsICAgIDAsICAzNTcsICAzNTYsCi0gICAgICAzNDEsICAz
NTQsICAzNDEsICAgIDAsICAgIDAsICAzNDQsICAgIDAsICAgIDAsICAzMzYsICAgIDAsCi0gICAg
ICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAzMzMsICAzNDQsICAzMzcsICAzNDMsICAzNDAsICAz
MzUsCi0gICAgICAzMjcsICAzMzksICAgIDAsICAgIDAsICAzMzIsICAzMzksICAzMjgsICAgIDAs
ICAzMzcsICAzMzQsCi0gICAgICAzMjQsICAzMjksICAzMzIsICAgIDAsICAgIDAsICAzMzIsICAg
IDAsICAzMzAsICAzMjksICAgIDAsCi0gICAgICAgIDAsICAzMjgsICAzMTQsICAzMjYsICAgIDAs
ICAzMTcsICAzMzgsICAzMzcsICAzMzYsICAzMDcsCi0gICAgICAzMDMsICAgIDAsICAgIDAsICAg
IDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAzMjgsCi0KLSAgICAgIDE2NiwgIDMy
NSwgIDMxNiwgIDI5OSwgIDMwOCwgIDMxMCwgIDMwNiwgIDMwOCwgIDMwNywgIDMwNiwKLSAgICAg
IDMwOSwgIDMwNiwgIDI1NiwgIDI1MywgICAgMCwgIDIyOCwgIDIzOCwgIDIyMiwgIDIzNSwgIDIw
MywKLSAgICAgIDIwNywgIDIwNCwgIDIxMiwgIDE5MSwgICAgMCwgIDIwMSwgIDE2NSwgIDE2Nywg
IDE1MywgIDE2MSwKLSAgICAgICAgMCwgIDE3MCwgICAgMCwgIDE3NSwgIDE1MSwgIDE0MSwgIDEw
MCwgIDExNCwgICA1OSwgICAgMCwKLSAgICAgICAgMCwgIDU4OCwgIDM1OSwgIDExMwotICAgIH0g
OwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfZGVmWzQ0NV0gPQotICAgIHsgICAw
LAotICAgICAgNDQyLCAgICAxLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQzLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQyLAotICAgICAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAot
ICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQ0LAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQzLCAgNDQyLAotICAgICAgNDQyLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotCi0gICAgICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0g
ICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDIsICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDQsICA0NDIsICA0NDIsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAg
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsCi0KLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLQotICAgICAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAot
ICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0g
ICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsCi0gICAgICA0NDMsICAgIDAsICA0NDIsICA0NDIKLSAgICB9IDsKLQotc3RhdGljIHl5
Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFs2NTZdID0KLSAgICB7ICAgMCwKLSAgICAgICAgNCwg
ICAgNSwgICAgNiwgICAgNywgICAgOCwgICAgOSwgICAxMCwgICAxMSwgICAxMiwgICAxMywKLSAg
ICAgICAxNCwgICAxNSwgICAxNiwgICAxNywgICAxOCwgICAxOSwgICAxOSwgICAxOSwgICAxOSwg
ICAxOSwKLSAgICAgICAxOSwgICAyMCwgICAyMSwgICAyMiwgICAyMywgICAyNCwgICAyNSwgICAy
NiwgICAyNiwgICAyNiwKLSAgICAgICAyNiwgICAyNiwgICAyNiwgICAyNiwgICAyNiwgICAyNiwg
ICAyNywgICAyOCwgICAyOSwgICAzMCwKLSAgICAgICAzMSwgICAzMiwgICAzMywgICAzNCwgICAz
NSwgICAzNiwgICAzNywgICAzOCwgICAyNiwgICAzOSwKLSAgICAgICA0MCwgICA0MSwgICA0Miwg
ICA0MywgICA0NCwgICA0NSwgICA0NiwgICA0NywgICA0OCwgICA0OSwKLSAgICAgICAyNiwgICAy
NiwgICAyNiwgICA1MCwgICA1MSwgICA1MiwgICA1MywgICA1NSwgICA1NiwgICA1NywKLSAgICAg
ICA2MCwgICA2MiwgICA2NCwgICA2NCwgICA2NCwgICA2NCwgICA2NCwgICA2NCwgICA2NCwgICA3
NywKLSAgICAgICA3OCwgICA4MiwgICA4MywgIDExMCwgICA2MywgICA2MSwgIDEyOSwgIDExMSwg
ICA1OCwgICA2NiwKLSAgICAgIDEzMCwgICA2NywgICA2NywgICA2NywgICA2NywgICA2NywgICA2
NywgICA2OCwgICA2NiwgICA4MCwKLQotICAgICAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4
LCAgIDY4LCAgIDY4LCAgIDY5LCAgIDcyLCAgIDg0LAotICAgICAgMTEyLCAgIDg1LCAgIDcwLCAg
IDgxLCAgMTQyLCAgIDg2LCAgIDY5LCAgMjAzLCAgNDQxLCAgMjA0LAotICAgICAgIDY5LCAgIDg3
LCAgIDk0LCAgMTEzLCAgIDk1LCAgIDczLCAgIDkwLCAgIDc0LCAgIDc1LCAgIDY5LAotICAgICAg
IDkxLCAgIDg4LCAgIDk3LCAgIDk2LCAgIDg5LCAgIDkyLCAgMTAzLCAgIDcwLCAgMTM1LCAgMTA2
LAotICAgICAgIDk4LCAgIDkzLCAgIDk5LCAgMTE1LCAgMTA0LCAgMTAwLCAgMTA3LCAgMTYyLCAg
NDQwLCAgMTE5LAotICAgICAgMTMxLCAgMTAxLCAgNDM5LCAgMTA4LCAgMTMyLCAgMTA1LCAgMTIw
LCAgMTIxLCAgMTE2LCAgMTI1LAotICAgICAgMTYzLCAgMTE3LCAgMTI2LCAgMTMzLCAgMTc2LCAg
MTk4LCAgMTIyLCAgMTIzLCAgMjY0LCAgMTI0LAotICAgICAgMTI3LCAgNDM4LCAgMTc3LCAgMTk5
LCAgMjE2LCAgMjE3LCAgMjY1LCAgMTI4LCAgMTM2LCAgIDY0LAotICAgICAgIDY0LCAgIDY0LCAg
IDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgMTM4LCAgMTM4LCAgMTM4LCAgMTM4LAotICAgICAgMTM4
LCAgMTM4LCAgMTM4LCAgNDM3LCAgMTcwLCAgMTM3LCAgMTkwLCAgMTcxLCAgMTcyLCAgNDA2LAot
Ci0gICAgICA0MDcsICAxNzMsICAxMzksICAxNzQsICAyNDIsICAyNDMsICAyNDQsICA0MzYsICAx
MzcsICA0MzUsCi0gICAgICA0MzQsICAxOTEsICA0MzMsICA0MzIsICAgNjYsICAxMzksICAgNjcs
ICAgNjcsICAgNjcsICAgNjcsCi0gICAgICAgNjcsICAgNjcsICAgNjgsICAgNjYsICA0MzEsICAg
NjgsICAgNjgsICAgNjgsICAgNjgsICAgNjgsCi0gICAgICAgNjgsICAgNjgsICAgNjksICAxNDEs
ICAxNDEsICAxNDEsICAxNDEsICAxNDEsICAxNDEsICAxNDEsCi0gICAgICA0MzAsICAgNjksICAx
NDAsICA0MjksICAxNDAsICAgNjksICA0MjgsICAxNDEsICAxNDEsICAxNDEsCi0gICAgICAxNDEs
ICAxNDEsICAxNDEsICAxNDEsICAgNjksICAyMDYsICA0MjcsICAyMDYsICA0MjYsICA0MjUsCi0g
ICAgICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAxMzgsICAxMzgs
ICAxMzgsCi0gICAgICAxMzgsICAxMzgsICAxMzgsICAxMzgsICAyNjksICAyNzAsICAyNzEsICA0
MjQsICA0MjMsICAyMDgsCi0gICAgICA0MjIsICAyMDgsICA0MjEsICAxMzksICAyMDksICAyMDks
ICAyMDksICAyMDksICAyMDksICAyMDksCi0gICAgICAyMDksICAyNzcsICAyNzgsICAyNzksICA0
MjAsICA0MTksICAxMzksICAxNDEsICAxNDEsICAxNDEsCi0KLSAgICAgIDE0MSwgIDE0MSwgIDE0
MSwgIDE0MSwgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywKLSAgICAgIDIwNywg
IDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwOSwgIDIwOSwKLSAg
ICAgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwg
IDIwOSwKLSAgICAgIDIwOSwgIDIwOSwgIDI4NiwgIDI4NywgIDI4OCwgIDI5MywgIDI5NCwgIDI5
NSwgIDI5NywgIDI5OCwKLSAgICAgIDI5OSwgIDMwNSwgIDMwNiwgIDMwNywgIDM4NywgIDM4OCwg
IDM4OSwgIDQxOCwgIDQxNywgIDQxNiwKLSAgICAgIDQxNSwgIDQxNCwgIDQxMywgIDQxMiwgIDQx
MSwgIDQxMCwgIDQwOSwgIDM5MCwgIDQwOCwgIDM5MSwKLSAgICAgICA3OSwgICA3OSwgIDQwNSwg
IDQwNCwgIDQwMywgIDQwMiwgIDQwMSwgIDQwMCwgIDM5OSwgIDM5OCwKLSAgICAgIDM5NywgIDM5
NiwgIDM5NSwgIDM5NCwgIDM5MywgIDM5MiwgIDM4NiwgIDM4NSwgIDM4NCwgIDM4MywKLSAgICAg
IDM4MiwgIDM4MSwgIDM4MCwgIDM3OSwgIDM3OCwgIDM3NywgIDM3NiwgIDM3NSwgIDM3NCwgIDM3
MywKLSAgICAgIDM3MiwgIDM3MSwgIDM3MCwgIDM2OSwgIDM2OCwgIDM2NywgIDM2NiwgIDM2NSwg
IDM2NCwgIDM2MywKLQotICAgICAgMzYyLCAgMzYxLCAgMzYwLCAgMzU5LCAgMzU4LCAgMzU3LCAg
MzU2LCAgMzU1LCAgMzU0LCAgMzUzLAotICAgICAgMzUyLCAgMzUxLCAgMzUwLCAgMzQ5LCAgMzQ4
LCAgMzQ3LCAgMzQ2LCAgMzQ1LCAgMzQ0LCAgMzQzLAotICAgICAgMzQyLCAgMzQxLCAgMzQwLCAg
MzM5LCAgMzM4LCAgMzM3LCAgMzM2LCAgMzM1LCAgMzM0LCAgMzMzLAotICAgICAgMzMyLCAgMzMx
LCAgMzMwLCAgMzI5LCAgMzI4LCAgMzI3LCAgMzI2LCAgMzI1LCAgMzI0LCAgMzIzLAotICAgICAg
MzIyLCAgMzIxLCAgMzIwLCAgMzE5LCAgMzE4LCAgMzE3LCAgMzE2LCAgMzE1LCAgMzE0LCAgMzEz
LAotICAgICAgMzEyLCAgMzExLCAgMzEwLCAgMzA5LCAgMzA4LCAgMzA0LCAgMzAzLCAgMzAyLCAg
MzAxLCAgMzAwLAotICAgICAgMjk2LCAgMjkyLCAgMjkxLCAgMjkwLCAgMjg5LCAgMjg1LCAgMjg0
LCAgMjgzLCAgMjgyLCAgMjgxLAotICAgICAgMjgwLCAgMjc2LCAgMjc1LCAgMjc0LCAgMjczLCAg
MjcyLCAgMjY4LCAgMjY3LCAgMjY2LCAgMjYzLAotICAgICAgMjYyLCAgMjYxLCAgMjYwLCAgMjU5
LCAgMjU4LCAgMjU3LCAgMjU2LCAgMjU1LCAgMjU0LCAgMjUzLAotICAgICAgMjUyLCAgMjUxLCAg
MjUwLCAgMjQ5LCAgMjQ4LCAgMjQ3LCAgMjQ2LCAgMjQ1LCAgMjQxLCAgMjQwLAotCi0gICAgICAy
MzksICAyMzgsICAyMzcsICAyMzYsICAyMzUsICAyMzQsICAyMzMsICAyMzIsICAyMzEsICAyMzAs
Ci0gICAgICAyMjksICAyMjgsICAyMjcsICAyMjYsICAyMjUsICAyMjQsICAyMjMsICAyMjIsICAy
MjEsICAyMjAsCi0gICAgICAyMTksICAyMTgsICAyMTUsICAyMTQsICAyMTMsICAyMTIsICAyMTEs
ICAyMTAsICAyMDUsICAyMDIsCi0gICAgICAyMDEsICAyMDAsICAxOTcsICAxOTYsICAxOTUsICAx
OTQsICAxOTMsICAxOTIsICAxODksICAxODgsCi0gICAgICAxODcsICAxODYsICAxODUsICAxODQs
ICAxODMsICAxODIsICAxODEsICAxODAsICAxNzksICAxNzgsCi0gICAgICAxNzUsICAxNjksICAx
NjgsICAxNjcsICAxNjYsICAxNjUsICAxNjQsICAxNjEsICAxNjAsICAxNTksCi0gICAgICAxNTgs
ICAxNTcsICAxNTYsICAxNTUsICAxNTQsICAxNTMsICAxNTIsICAxNTEsICAxNTAsICAxNDksCi0g
ICAgICAxNDgsICAxNDcsICAxNDYsICAxNDUsICAxNDQsICAxNDMsICAxMzQsICAxMTgsICAxMTQs
ICAxMDksCi0gICAgICAxMDIsICAgNzYsICAgNzEsICAgNjUsICAgNTksICAgNTQsICA0NDIsICAg
IDMsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0KLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAg
ICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MgotICAgIH0g
OwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzY1Nl0gPQotICAgIHsgICAw
LAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAot
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICA4LCAgICA4
LCAgICA5LAotICAgICAgIDEzLCAgIDE1LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAg
IDE2LCAgIDE2LCAgIDI0LAotICAgICAgIDI0LCAgIDMwLCAgIDMwLCAgIDQwLCAgIDE1LCAgIDEz
LCAgIDQ3LCAgIDQwLCAgICA5LCAgIDE4LAotICAgICAgIDQ3LCAgIDE4LCAgIDE4LCAgIDE4LCAg
IDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE5LCAgIDI5LAotCi0gICAgICAgMTksICAgMTksICAg
MTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTgsICAgMjIsICAgMzEsCi0gICAgICAgNDEs
ICAgMzEsICAgMTgsICAgMjksICA0NDQsICAgMzEsICAgMTksICAxMzMsICA0MzksICAxMzMsCi0g
ICAgICAgMTgsICAgMzIsICAgMzQsICAgNDEsICAgMzQsICAgMjIsICAgMzMsICAgMjIsICAgMjIs
ICAgMTksCi0gICAgICAgMzMsICAgMzIsICAgMzUsICAgMzQsICAgMzIsICAgMzMsICAgMzcsICAg
MTgsICAgNTEsICAgMzgsCi0gICAgICAgMzUsICAgMzMsICAgMzUsICAgNDMsICAgMzcsICAgMzUs
ICAgMzgsICAgOTksICA0MzgsICAgNDUsCi0gICAgICAgNDgsICAgMzUsICA0MzcsICAgMzgsICAg
NDgsICAgMzcsICAgNDUsICAgNDUsICAgNDMsICAgNDYsCi0gICAgICAgOTksICAgNDMsICAgNDYs
ICAgNDgsICAxMDksICAxMjksICAgNDUsICAgNDUsICAxOTgsICAgNDUsCi0gICAgICAgNDYsICA0
MzYsICAxMDksICAxMjksICAxNTIsICAxNTIsICAxOTgsICAgNDYsICAgNTEsICAgNjQsCi0gICAg
ICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNjYsICAgNjYsICAgNjYsICAg
NjYsCi0gICAgICAgNjYsICAgNjYsICAgNjYsICA0MzUsICAxMDcsICAgNjQsICAxMjIsICAxMDcs
ICAxMDcsICA0MDEsCi0KLSAgICAgIDQwMSwgIDEwNywgICA2NiwgIDEwNywgIDE3OCwgIDE3OCwg
IDE3OCwgIDQzNCwgICA2NCwgIDQzMiwKLSAgICAgIDQzMCwgIDEyMiwgIDQyOSwgIDQyOCwgICA2
NywgICA2NiwgICA2NywgICA2NywgICA2NywgICA2NywKLSAgICAgICA2NywgICA2NywgICA2Nywg
ICA2OCwgIDQyNywgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwKLSAgICAgICA2OCwgICA2
OCwgICA2NywgIDE0MCwgIDE0MCwgIDE0MCwgIDE0MCwgIDE0MCwgIDE0MCwgIDE0MCwKLSAgICAg
IDQyNiwgICA2OCwgICA2OSwgIDQyNCwgICA2OSwgICA2NywgIDQyMywgICA2OSwgICA2OSwgICA2
OSwKLSAgICAgICA2OSwgICA2OSwgICA2OSwgICA2OSwgICA2OCwgIDEzNywgIDQyMiwgIDEzNywg
IDQyMSwgIDQyMCwKLSAgICAgIDEzNywgIDEzNywgIDEzNywgIDEzNywgIDEzNywgIDEzNywgIDEz
NywgIDEzOCwgIDEzOCwgIDEzOCwKLSAgICAgIDEzOCwgIDEzOCwgIDEzOCwgIDEzOCwgIDIwMiwg
IDIwMiwgIDIwMiwgIDQxOSwgIDQxOCwgIDEzOSwKLSAgICAgIDQxNywgIDEzOSwgIDQxNiwgIDEz
OCwgIDEzOSwgIDEzOSwgIDEzOSwgIDEzOSwgIDEzOSwgIDEzOSwKLSAgICAgIDEzOSwgIDIxMywg
IDIxMywgIDIxMywgIDQxNCwgIDQxMywgIDEzOCwgIDE0MSwgIDE0MSwgIDE0MSwKLQotICAgICAg
MTQxLCAgMTQxLCAgMTQxLCAgMTQxLCAgMjA2LCAgMjA2LCAgMjA2LCAgMjA2LCAgMjA2LCAgMjA2
LAotICAgICAgMjA2LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAg
MjA4LCAgMjA4LAotICAgICAgMjA4LCAgMjA4LCAgMjA4LCAgMjA4LCAgMjA4LCAgMjA5LCAgMjA5
LCAgMjA5LCAgMjA5LCAgMjA5LAotICAgICAgMjA5LCAgMjA5LCAgMjIxLCAgMjIxLCAgMjIxLCAg
MjI5LCAgMjI5LCAgMjI5LCAgMjMzLCAgMjMzLAotICAgICAgMjMzLCAgMjM5LCAgMjM5LCAgMjM5
LCAgMzcyLCAgMzcyLCAgMzcyLCAgNDEyLCAgNDExLCAgNDEwLAotICAgICAgNDA5LCAgNDA4LCAg
NDA3LCAgNDA2LCAgNDA1LCAgNDA0LCAgNDAzLCAgMzcyLCAgNDAyLCAgMzcyLAotICAgICAgNDQz
LCAgNDQzLCAgNDAwLCAgMzkxLCAgMzkwLCAgMzg5LCAgMzg4LCAgMzg3LCAgMzg2LCAgMzg0LAot
ICAgICAgMzgzLCAgMzgyLCAgMzc5LCAgMzc4LCAgMzc2LCAgMzczLCAgMzcxLCAgMzcwLCAgMzY5
LCAgMzY3LAotICAgICAgMzY2LCAgMzY1LCAgMzYyLCAgMzYxLCAgMzYwLCAgMzU5LCAgMzU4LCAg
MzU3LCAgMzU2LCAgMzU1LAotICAgICAgMzQ5LCAgMzQ2LCAgMzQzLCAgMzQyLCAgMzQxLCAgMzQw
LCAgMzM5LCAgMzM3LCAgMzM1LCAgMzM0LAotCi0gICAgICAzMzMsICAzMzIsICAzMzAsICAzMjks
ICAzMjcsICAzMjUsICAzMjQsICAzMjMsICAzMjIsICAzMjEsCi0gICAgICAzMjAsICAzMTksICAz
MTgsICAzMTYsICAzMTUsICAzMTQsICAzMTMsICAzMTIsICAzMTEsICAzMTAsCi0gICAgICAzMDks
ICAzMDgsICAzMDQsICAzMDMsICAzMDAsICAyODksICAyODUsICAyODQsICAyODMsICAyODIsCi0g
ICAgICAyNzUsICAyNzQsICAyNzMsICAyNjgsICAyNjcsICAyNjYsICAyNjUsICAyNjQsICAyNjMs
ICAyNjAsCi0gICAgICAyNTksICAyNTgsICAyNTcsICAyNTYsICAyNTUsICAyNTQsICAyNTMsICAy
NTIsICAyNTEsICAyNTAsCi0gICAgICAyNDksICAyNDgsICAyNDcsICAyNDYsICAyNDUsICAyMzgs
ICAyMzcsICAyMzYsICAyMzUsICAyMzQsCi0gICAgICAyMzIsICAyMjgsICAyMjYsICAyMjUsICAy
MjQsICAyMjAsICAyMTksICAyMTgsICAyMTcsICAyMTYsCi0gICAgICAyMTUsICAyMTIsICAyMTAs
ICAyMDUsICAyMDQsICAyMDMsICAyMDEsICAyMDAsICAxOTksICAxOTcsCi0gICAgICAxOTYsICAx
OTUsICAxOTQsICAxOTMsICAxOTIsICAxOTEsICAxOTAsICAxODksICAxODgsICAxODcsCi0gICAg
ICAxODYsICAxODUsICAxODQsICAxODMsICAxODIsICAxODEsICAxODAsICAxNzksICAxNzcsICAx
NzYsCi0KLSAgICAgIDE3NSwgIDE3NCwgIDE3MywgIDE3MiwgIDE3MSwgIDE3MCwgIDE2OSwgIDE2
OCwgIDE2NywgIDE2NiwKLSAgICAgIDE2NSwgIDE2MywgIDE2MiwgIDE2MSwgIDE2MCwgIDE1OSwg
IDE1OCwgIDE1NywgIDE1NiwgIDE1NSwKLSAgICAgIDE1NCwgIDE1MywgIDE1MSwgIDE1MCwgIDE0
OSwgIDE0OCwgIDE0NywgIDE0NiwgIDEzNCwgIDEzMiwKLSAgICAgIDEzMSwgIDEzMCwgIDEyOCwg
IDEyNywgIDEyNiwgIDEyNSwgIDEyNCwgIDEyMywgIDEyMSwgIDEyMCwKLSAgICAgIDExOSwgIDEx
OCwgIDExNywgIDExNiwgIDExNSwgIDExNCwgIDExMywgIDExMiwgIDExMSwgIDExMCwKLSAgICAg
IDEwOCwgIDEwNSwgIDEwNCwgIDEwMywgIDEwMiwgIDEwMSwgIDEwMCwgICA5OCwgICA5NywgICA5
NiwKLSAgICAgICA5NSwgICA5NCwgICA5MywgICA5MiwgICA5MSwgICA5MCwgICA4OSwgICA4OCwg
ICA4NywgICA4NiwKLSAgICAgICA4NSwgICA4NCwgICA4MywgICA4MiwgICA3OCwgICA3NCwgICA0
OSwgICA0NCwgICA0MiwgICAzOSwKLSAgICAgICAzNiwgICAyMywgICAyMCwgICAxNywgICAxMiwg
ICAgNywgICAgMywgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLQotICAgICAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyCi0gICAgfSA7Ci0KLS8qIFRhYmxlIG9mIGJvb2xlYW5zLCB0cnVlIGlmIHJ1bGUgY291
bGQgbWF0Y2ggZW9sLiAqLwotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2Fu
X21hdGNoX2VvbFsxNDhdID0KLSAgICB7ICAgMCwKLTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAs
ICAgICB9OwotCi0vKiBUaGUgaW50ZW50IGJlaGluZCB0aGlzIGRlZmluaXRpb24gaXMgdGhhdCBp
dCdsbCBjYXRjaAotICogYW55IHVzZXMgb2YgUkVKRUNUIHdoaWNoIGZsZXggbWlzc2VkLgotICov
Ci0jZGVmaW5lIFJFSkVDVCByZWplY3RfdXNlZF9idXRfbm90X2RldGVjdGVkCi0jZGVmaW5lIHl5
bW9yZSgpIHl5bW9yZV91c2VkX2J1dF9ub3RfZGV0ZWN0ZWQKLSNkZWZpbmUgWVlfTU9SRV9BREog
MAotI2RlZmluZSBZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCi0vKgotLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLQotVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBMZXggc3BlY2lmaWNhdGlvbiBmb3IgR0xTTCBF
Uy4KLUJhc2VkIG9uIEFOU0kgQyBncmFtbWFyLCBMZXggc3BlY2lmaWNhdGlvbjoKLWh0dHA6Ly93
d3cubHlzYXRvci5saXUuc2UvYy9BTlNJLUMtZ3JhbW1hci1sLmh0bWwKLQotSUYgWU9VIE1PRElG
WSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNoLAotV0hJ
Q0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIExFWEVSIChnbHNsYW5nX2xleC5jcHApLgotKi8KLQot
I2luY2x1ZGUgImNvbXBpbGVyL2dsc2xhbmcuaCIKLSNpbmNsdWRlICJjb21waWxlci9QYXJzZUNv
bnRleHQuaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW4uaCIKLSNpbmNs
dWRlICJjb21waWxlci91dGlsLmgiCi0jaW5jbHVkZSAiZ2xzbGFuZ190YWIuaCIKLQotLyogd2lu
ZG93cyBvbmx5IHByYWdtYSAqLwotI2lmZGVmIF9NU0NfVkVSCi0jcHJhZ21hIHdhcm5pbmcoZGlz
YWJsZSA6IDQxMDIpCi0jZW5kaWYKLQotI2RlZmluZSBZWV9VU0VSX0FDVElPTiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB5eWxsb2MtPmZpcnN0X2ZpbGUgPSB5eWxsb2Mt
Pmxhc3RfZmlsZSA9IHl5Y29sdW1uOyBcCi0gICAgeXlsbG9jLT5maXJzdF9saW5lID0geXlsbG9j
LT5sYXN0X2xpbmUgPSB5eWxpbmVubzsKLQotI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwg
bWF4X3NpemUpIFwKLSAgICByZXN1bHQgPSBzdHJpbmdfaW5wdXQoYnVmLCBtYXhfc2l6ZSwgeXlz
Y2FubmVyKTsKLQotc3RhdGljIHl5X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCB5eV9z
aXplX3QgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci1zdGF0aWMgaW50IGNoZWNrX3R5
cGUoeXlzY2FuX3QgeXlzY2FubmVyKTsKLXN0YXRpYyBpbnQgcmVzZXJ2ZWRfd29yZCh5eXNjYW5f
dCB5eXNjYW5uZXIpOwotc3RhdGljIGludCBpbnRfY29uc3RhbnQoeXlzY2FuX3QgeXlzY2FubmVy
KTsKLXN0YXRpYyBpbnQgZmxvYXRfY29uc3RhbnQoeXlzY2FuX3QgeXlzY2FubmVyKTsKLQotI2Rl
ZmluZSBJTklUSUFMIDAKLQotI2RlZmluZSBZWV9FWFRSQV9UWVBFIFRQYXJzZUNvbnRleHQqCi0K
LS8qIEhvbGRzIHRoZSBlbnRpcmUgc3RhdGUgb2YgdGhlIHJlZW50cmFudCBzY2FubmVyLiAqLwot
c3RydWN0IHl5Z3V0c190Ci0gICAgewotCi0gICAgLyogVXNlci1kZWZpbmVkLiBOb3QgdG91Y2hl
ZCBieSBmbGV4LiAqLwotICAgIFlZX0VYVFJBX1RZUEUgeXlleHRyYV9yOwotCi0gICAgLyogVGhl
IHJlc3QgYXJlIHRoZSBzYW1lIGFzIHRoZSBnbG9iYWxzIGRlY2xhcmVkIGluIHRoZSBub24tcmVl
bnRyYW50IHNjYW5uZXIuICovCi0gICAgRklMRSAqeXlpbl9yLCAqeXlvdXRfcjsKLSAgICBzaXpl
X3QgeXlfYnVmZmVyX3N0YWNrX3RvcDsgLyoqPCBpbmRleCBvZiB0b3Agb2Ygc3RhY2suICovCi0g
ICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja19tYXg7IC8qKjwgY2FwYWNpdHkgb2Ygc3RhY2suICov
Ci0gICAgWVlfQlVGRkVSX1NUQVRFICogeXlfYnVmZmVyX3N0YWNrOyAvKio8IFN0YWNrIGFzIGFu
IGFycmF5LiAqLwotICAgIGNoYXIgeXlfaG9sZF9jaGFyOwotICAgIHl5X3NpemVfdCB5eV9uX2No
YXJzOwotICAgIHl5X3NpemVfdCB5eWxlbmdfcjsKLSAgICBjaGFyICp5eV9jX2J1Zl9wOwotICAg
IGludCB5eV9pbml0OwotICAgIGludCB5eV9zdGFydDsKLSAgICBpbnQgeXlfZGlkX2J1ZmZlcl9z
d2l0Y2hfb25fZW9mOwotICAgIGludCB5eV9zdGFydF9zdGFja19wdHI7Ci0gICAgaW50IHl5X3N0
YXJ0X3N0YWNrX2RlcHRoOwotICAgIGludCAqeXlfc3RhcnRfc3RhY2s7Ci0gICAgeXlfc3RhdGVf
dHlwZSB5eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLSAgICBjaGFyKiB5eV9sYXN0X2FjY2VwdGlu
Z19jcG9zOwotCi0gICAgaW50IHl5bGluZW5vX3I7Ci0gICAgaW50IHl5X2ZsZXhfZGVidWdfcjsK
LQotICAgIGNoYXIgKnl5dGV4dF9yOwotICAgIGludCB5eV9tb3JlX2ZsYWc7Ci0gICAgaW50IHl5
X21vcmVfbGVuOwotCi0gICAgWVlTVFlQRSAqIHl5bHZhbF9yOwotCi0gICAgWVlMVFlQRSAqIHl5
bGxvY19yOwotCi0gICAgfTsgLyogZW5kIHN0cnVjdCB5eWd1dHNfdCAqLwotCi1zdGF0aWMgaW50
IHl5X2luaXRfZ2xvYmFscyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLSAgICAvKiBUaGlzIG11
c3QgZ28gaGVyZSBiZWNhdXNlIFlZU1RZUEUgYW5kIFlZTFRZUEUgYXJlIGluY2x1ZGVkCi0gICAg
ICogZnJvbSBiaXNvbiBvdXRwdXQgaW4gc2VjdGlvbiAxLiovCi0gICAgIyAgICBkZWZpbmUgeXls
dmFsIHl5Zy0+eXlsdmFsX3IKLSAgICAKLSAgICAjICAgIGRlZmluZSB5eWxsb2MgeXlnLT55eWxs
b2NfcgotICAgIAotaW50IHl5bGV4X2luaXQgKHl5c2Nhbl90KiBzY2FubmVyKTsKLQotaW50IHl5
bGV4X2luaXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkLHl5c2Nhbl90KiBzY2Fu
bmVyKTsKLQotLyogQWNjZXNzb3IgbWV0aG9kcyB0byBnbG9iYWxzLgotICAgVGhlc2UgYXJlIG1h
ZGUgdmlzaWJsZSB0byBub24tcmVlbnRyYW50IHNjYW5uZXJzIGZvciBjb252ZW5pZW5jZS4gKi8K
LQotaW50IHl5bGV4X2Rlc3Ryb3kgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1pbnQgeXlnZXRf
ZGVidWcgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkIHl5c2V0X2RlYnVnIChpbnQgZGVi
dWdfZmxhZyAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLVlZX0VYVFJBX1RZUEUgeXlnZXRfZXh0
cmEgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkIHl5c2V0X2V4dHJhIChZWV9FWFRSQV9U
WVBFIHVzZXJfZGVmaW5lZCAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLUZJTEUgKnl5Z2V0X2lu
ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCB5eXNldF9pbiAgKEZJTEUgKiBpbl9zdHIg
LHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1GSUxFICp5eWdldF9vdXQgKHl5c2Nhbl90IHl5c2Nh
bm5lciApOwotCi12b2lkIHl5c2V0X291dCAgKEZJTEUgKiBvdXRfc3RyICx5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKLQoteXlfc2l6ZV90IHl5Z2V0X2xlbmcgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwot
Ci1jaGFyICp5eWdldF90ZXh0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotaW50IHl5Z2V0X2xp
bmVubyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgeXlzZXRfbGluZW5vIChpbnQgbGlu
ZV9udW1iZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1ZWVNUWVBFICogeXlnZXRfbHZhbCAo
eXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgeXlzZXRfbHZhbCAoWVlTVFlQRSAqIHl5bHZh
bF9wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLSAgICAgICBZWUxUWVBFICp5eWdldF9s
bG9jICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAgICAKLSAgICAgICAgdm9pZCB5eXNldF9sbG9j
IChZWUxUWVBFICogeXlsbG9jX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAgICAKLS8q
IE1hY3JvcyBhZnRlciB0aGlzIHBvaW50IGNhbiBhbGwgYmUgb3ZlcnJpZGRlbiBieSB1c2VyIGRl
ZmluaXRpb25zIGluCi0gKiBzZWN0aW9uIDEuCi0gKi8KLQotI2lmbmRlZiBZWV9TS0lQX1lZV1JB
UAotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIGludCB5eXdyYXAgKHl5c2Nhbl90IHl5
c2Nhbm5lciApOwotI2Vsc2UKLWV4dGVybiBpbnQgeXl3cmFwICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgeXl0ZXh0X3B0cgotc3RhdGljIHZvaWQgeXlf
ZmxleF9zdHJuY3B5IChjaGFyICoseXljb25zdCBjaGFyICosaW50ICx5eXNjYW5fdCB5eXNjYW5u
ZXIpOwotI2VuZGlmCi0KLSNpZmRlZiBZWV9ORUVEX1NUUkxFTgotc3RhdGljIGludCB5eV9mbGV4
X3N0cmxlbiAoeXljb25zdCBjaGFyICogLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0jZW5kaWYKLQot
I2lmbmRlZiBZWV9OT19JTlBVVAotCi0jaWZkZWYgX19jcGx1c3BsdXMKLXN0YXRpYyBpbnQgeXlp
bnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0jZWxzZQotc3RhdGljIGludCBpbnB1dCAoeXlz
Y2FuX3QgeXlzY2FubmVyICk7Ci0jZW5kaWYKLQotI2VuZGlmCi0KLS8qIEFtb3VudCBvZiBzdHVm
ZiB0byBzbHVycCB1cCB3aXRoIGVhY2ggcmVhZC4gKi8KLSNpZm5kZWYgWVlfUkVBRF9CVUZfU0la
RQotI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDgxOTIKLSNlbmRpZgotCi0vKiBDb3B5IHdoYXRl
dmVyIHRoZSBsYXN0IHJ1bGUgbWF0Y2hlZCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAqLwotI2lm
bmRlZiBFQ0hPCi0vKiBUaGlzIHVzZWQgdG8gYmUgYW4gZnB1dHMoKSwgYnV0IHNpbmNlIHRoZSBz
dHJpbmcgbWlnaHQgY29udGFpbiBOVUwncywKLSAqIHdlIG5vdyB1c2UgZndyaXRlKCkuCi0gKi8K
LSNkZWZpbmUgRUNITyBmd3JpdGUoIHl5dGV4dCwgeXlsZW5nLCAxLCB5eW91dCApCi0jZW5kaWYK
LQotLyogR2V0cyBpbnB1dCBhbmQgc3R1ZmZzIGl0IGludG8gImJ1ZiIuICBudW1iZXIgb2YgY2hh
cmFjdGVycyByZWFkLCBvciBZWV9OVUxMLAotICogaXMgcmV0dXJuZWQgaW4gInJlc3VsdCIuCi0g
Ki8KLSNpZm5kZWYgWVlfSU5QVVQKLSNkZWZpbmUgWVlfSU5QVVQoYnVmLHJlc3VsdCxtYXhfc2l6
ZSkgXAotCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRlcmFjdGl2ZSAp
IFwKLQkJeyBcCi0JCWludCBjID0gJyonOyBcCi0JCXl5X3NpemVfdCBuOyBcCi0JCWZvciAoIG4g
PSAwOyBuIDwgbWF4X3NpemUgJiYgXAotCQkJICAgICAoYyA9IGdldGMoIHl5aW4gKSkgIT0gRU9G
ICYmIGMgIT0gJ1xuJzsgKytuICkgXAotCQkJYnVmW25dID0gKGNoYXIpIGM7IFwKLQkJaWYgKCBj
ID09ICdcbicgKSBcCi0JCQlidWZbbisrXSA9IChjaGFyKSBjOyBcCi0JCWlmICggYyA9PSBFT0Yg
JiYgZmVycm9yKCB5eWluICkgKSBcCi0JCQlZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZsZXgg
c2Nhbm5lciBmYWlsZWQiICk7IFwKLQkJcmVzdWx0ID0gbjsgXAotCQl9IFwKLQllbHNlIFwKLQkJ
eyBcCi0JCWVycm5vPTA7IFwKLQkJd2hpbGUgKCAocmVzdWx0ID0gZnJlYWQoYnVmLCAxLCBtYXhf
c2l6ZSwgeXlpbikpPT0wICYmIGZlcnJvcih5eWluKSkgXAotCQkJeyBcCi0JCQlpZiggZXJybm8g
IT0gRUlOVFIpIFwKLQkJCQl7IFwKLQkJCQlZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZsZXgg
c2Nhbm5lciBmYWlsZWQiICk7IFwKLQkJCQlicmVhazsgXAotCQkJCX0gXAotCQkJZXJybm89MDsg
XAotCQkJY2xlYXJlcnIoeXlpbik7IFwKLQkJCX0gXAotCQl9XAotXAotCi0jZW5kaWYKLQotLyog
Tm8gc2VtaS1jb2xvbiBhZnRlciByZXR1cm47IGNvcnJlY3QgdXNhZ2UgaXMgdG8gd3JpdGUgInl5
dGVybWluYXRlKCk7IiAtCi0gKiB3ZSBkb24ndCB3YW50IGFuIGV4dHJhICc7JyBhZnRlciB0aGUg
InJldHVybiIgYmVjYXVzZSB0aGF0IHdpbGwgY2F1c2UKLSAqIHNvbWUgY29tcGlsZXJzIHRvIGNv
bXBsYWluIGFib3V0IHVucmVhY2hhYmxlIHN0YXRlbWVudHMuCi0gKi8KLSNpZm5kZWYgeXl0ZXJt
aW5hdGUKLSNkZWZpbmUgeXl0ZXJtaW5hdGUoKSByZXR1cm4gWVlfTlVMTAotI2VuZGlmCi0KLS8q
IE51bWJlciBvZiBlbnRyaWVzIGJ5IHdoaWNoIHN0YXJ0LWNvbmRpdGlvbiBzdGFjayBncm93cy4g
Ki8KLSNpZm5kZWYgWVlfU1RBUlRfU1RBQ0tfSU5DUgotI2RlZmluZSBZWV9TVEFSVF9TVEFDS19J
TkNSIDI1Ci0jZW5kaWYKLQotLyogUmVwb3J0IGEgZmF0YWwgZXJyb3IuICovCi0jaWZuZGVmIFlZ
X0ZBVEFMX0VSUk9SCi0jZGVmaW5lIFlZX0ZBVEFMX0VSUk9SKG1zZykgeXlfZmF0YWxfZXJyb3Io
IG1zZyAsIHl5c2Nhbm5lcikKLSNlbmRpZgotCi0vKiBlbmQgdGFibGVzIHNlcmlhbGl6YXRpb24g
c3RydWN0dXJlcyBhbmQgcHJvdG90eXBlcyAqLwotCi0vKiBEZWZhdWx0IGRlY2xhcmF0aW9uIG9m
IGdlbmVyYXRlZCBzY2FubmVyIC0gYSBkZWZpbmUgc28gdGhlIHVzZXIgY2FuCi0gKiBlYXNpbHkg
YWRkIHBhcmFtZXRlcnMuCi0gKi8KLSNpZm5kZWYgWVlfREVDTAotI2RlZmluZSBZWV9ERUNMX0lT
X09VUlMgMQotCi1leHRlcm4gaW50IHl5bGV4IFwKLSAgICAgICAgICAgICAgIChZWVNUWVBFICog
eXlsdmFsX3BhcmFtLFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0gLHl5c2Nhbl90IHl5c2Nhbm5lcik7
Ci0KLSNkZWZpbmUgWVlfREVDTCBpbnQgeXlsZXggXAotICAgICAgICAgICAgICAgKFlZU1RZUEUg
KiB5eWx2YWxfcGFyYW0sIFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCi0jZW5kaWYgLyogIVlZX0RFQ0wgKi8KLQotLyogQ29kZSBleGVjdXRlZCBhdCB0aGUgYmVn
aW5uaW5nIG9mIGVhY2ggcnVsZSwgYWZ0ZXIgeXl0ZXh0IGFuZCB5eWxlbmcKLSAqIGhhdmUgYmVl
biBzZXQgdXAuCi0gKi8KLSNpZm5kZWYgWVlfVVNFUl9BQ1RJT04KLSNkZWZpbmUgWVlfVVNFUl9B
Q1RJT04KLSNlbmRpZgotCi0vKiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBlbmQgb2YgZWFjaCBydWxl
LiAqLwotI2lmbmRlZiBZWV9CUkVBSwotI2RlZmluZSBZWV9CUkVBSyBicmVhazsKLSNlbmRpZgot
Ci0jZGVmaW5lIFlZX1JVTEVfU0VUVVAgXAotCVlZX1VTRVJfQUNUSU9OCi0KLS8qKiBUaGUgbWFp
biBzY2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMgYWxsIHRoZSB3b3JrLgotICovCi1ZWV9ERUNM
Ci17Ci0JcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlOwotCXJlZ2lzdGVy
IGNoYXIgKnl5X2NwLCAqeXlfYnA7Ci0JcmVnaXN0ZXIgaW50IHl5X2FjdDsKLSAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICB5eWx2
YWwgPSB5eWx2YWxfcGFyYW07Ci0KLSAgICB5eWxsb2MgPSB5eWxsb2NfcGFyYW07Ci0KLQlpZiAo
ICF5eWctPnl5X2luaXQgKQotCQl7Ci0JCXl5Zy0+eXlfaW5pdCA9IDE7Ci0KLSNpZmRlZiBZWV9V
U0VSX0lOSVQKLQkJWVlfVVNFUl9JTklUOwotI2VuZGlmCi0KLQkJaWYgKCAhIHl5Zy0+eXlfc3Rh
cnQgKQotCQkJeXlnLT55eV9zdGFydCA9IDE7CS8qIGZpcnN0IHN0YXJ0IHN0YXRlICovCi0KLQkJ
aWYgKCAhIHl5aW4gKQotCQkJeXlpbiA9IHN0ZGluOwotCi0JCWlmICggISB5eW91dCApCi0JCQl5
eW91dCA9IHN0ZG91dDsKLQotCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKSB7Ci0JCQl5eWVu
c3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7Ci0JCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUgPQotCQkJCXl5X2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsK
LQkJfQotCi0JCXl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotCQl9Ci0KLQl3aGls
ZSAoIDEgKQkJLyogbG9vcHMgdW50aWwgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZCAqLwotCQl7Ci0J
CXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwotCi0JCS8qIFN1cHBvcnQgb2YgeXl0ZXh0LiAqLwot
CQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLQotCQkvKiB5eV9icCBwb2ludHMgdG8gdGhl
IHBvc2l0aW9uIGluIHl5X2NoX2J1ZiBvZiB0aGUgc3RhcnQgb2YKLQkJICogdGhlIGN1cnJlbnQg
cnVuLgotCQkgKi8KLQkJeXlfYnAgPSB5eV9jcDsKLQotCQl5eV9jdXJyZW50X3N0YXRlID0geXln
LT55eV9zdGFydDsKLXl5X21hdGNoOgotCQlkbwotCQkJewotCQkJcmVnaXN0ZXIgWVlfQ0hBUiB5
eV9jID0geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV07Ci0JCQlpZiAoIHl5X2FjY2VwdFt5eV9j
dXJyZW50X3N0YXRlXSApCi0JCQkJewotCQkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUg
PSB5eV9jdXJyZW50X3N0YXRlOwotCQkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5
X2NwOwotCQkJCX0KLQkJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0g
KyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKLQkJCQl7Ci0JCQkJeXlfY3VycmVudF9zdGF0
ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJCQlpZiAoIHl5X2N1cnJlbnRf
c3RhdGUgPj0gNDQzICkKLQkJCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107
Ci0JCQkJfQotCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRf
c3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0JCQkrK3l5X2NwOwotCQkJfQotCQl3aGls
ZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0gNDQyICk7Ci0JCXl5X2NwID0geXlnLT55eV9sYXN0X2Fj
Y2VwdGluZ19jcG9zOwotCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGlu
Z19zdGF0ZTsKLQoteXlfZmluZF9hY3Rpb246Ci0JCXl5X2FjdCA9IHl5X2FjY2VwdFt5eV9jdXJy
ZW50X3N0YXRlXTsKLQotCQlZWV9ET19CRUZPUkVfQUNUSU9OOwotCi0JCWlmICggeXlfYWN0ICE9
IFlZX0VORF9PRl9CVUZGRVIgJiYgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sW3l5X2FjdF0gKQotCQkJ
ewotCQkJeXlfc2l6ZV90IHl5bDsKLQkJCWZvciAoIHl5bCA9IDA7IHl5bCA8IHl5bGVuZzsgKyt5
eWwgKQotCQkJCWlmICggeXl0ZXh0W3l5bF0gPT0gJ1xuJyApCi0JCQkJCSAgIAotICAgIGRveyB5
eWxpbmVubysrOwotICAgICAgICB5eWNvbHVtbj0wOwotICAgIH13aGlsZSgwKQotOwotCQkJfQot
Ci1kb19hY3Rpb246CS8qIFRoaXMgbGFiZWwgaXMgdXNlZCBvbmx5IHRvIGFjY2VzcyBFT0YgYWN0
aW9ucy4gKi8KLQotCQlzd2l0Y2ggKCB5eV9hY3QgKQotCXsgLyogYmVnaW5uaW5nIG9mIGFjdGlv
biBzd2l0Y2ggKi8KLQkJCWNhc2UgMDogLyogbXVzdCBiYWNrIHVwICovCi0JCQkvKiB1bmRvIHRo
ZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04gKi8KLQkJCSp5eV9jcCA9IHl5Zy0+eXlf
aG9sZF9jaGFyOwotCQkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0JCQl5
eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLQkJCWdvdG8g
eXlfZmluZF9hY3Rpb247Ci0KLWNhc2UgMToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElOVkFS
SUFOVDsgfQotCVlZX0JSRUFLCi1jYXNlIDI6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBISUdI
X1BSRUNJU0lPTjsgfQotCVlZX0JSRUFLCi1jYXNlIDM6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVy
biBNRURJVU1fUFJFQ0lTSU9OOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNDoKLVlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIExPV19QUkVDSVNJT047IH0KLQlZWV9CUkVBSwotY2FzZSA1OgotWVlfUlVMRV9T
RVRVUAoteyByZXR1cm4gUFJFQ0lTSU9OOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNjoKLVlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIEFUVFJJQlVURTsgfQotCVlZX0JSRUFLCi1jYXNlIDc6Ci1ZWV9SVUxF
X1NFVFVQCi17IHJldHVybiBDT05TVF9RVUFMOyB9Ci0JWVlfQlJFQUsKLWNhc2UgODoKLVlZX1JV
TEVfU0VUVVAKLXsgcmV0dXJuIFVOSUZPUk07IH0KLQlZWV9CUkVBSwotY2FzZSA5OgotWVlfUlVM
RV9TRVRVUAoteyByZXR1cm4gVkFSWUlORzsgfQotCVlZX0JSRUFLCi1jYXNlIDEwOgotWVlfUlVM
RV9TRVRVUAoteyByZXR1cm4gQlJFQUs7IH0KLQlZWV9CUkVBSwotY2FzZSAxMToKLVlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIENPTlRJTlVFOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTI6Ci1ZWV9SVUxF
X1NFVFVQCi17IHJldHVybiBETzsgfQotCVlZX0JSRUFLCi1jYXNlIDEzOgotWVlfUlVMRV9TRVRV
UAoteyByZXR1cm4gRk9SOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTQ6Ci1ZWV9SVUxFX1NFVFVQCi17
IHJldHVybiBXSElMRTsgfQotCVlZX0JSRUFLCi1jYXNlIDE1OgotWVlfUlVMRV9TRVRVUAoteyBy
ZXR1cm4gSUY7IH0KLQlZWV9CUkVBSwotY2FzZSAxNjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJu
IEVMU0U7IH0KLQlZWV9CUkVBSwotY2FzZSAxNzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElO
X1FVQUw7IH0KLQlZWV9CUkVBSwotY2FzZSAxODoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIE9V
VF9RVUFMOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTk6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBJ
Tk9VVF9RVUFMOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMjA6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVy
biBGTE9BVF9UWVBFOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMjE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJl
dHVybiBJTlRfVFlQRTsgfQotCVlZX0JSRUFLCi1jYXNlIDIyOgotWVlfUlVMRV9TRVRVUAoteyBy
ZXR1cm4gVk9JRF9UWVBFOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMjM6Ci1ZWV9SVUxFX1NFVFVQCi17
IHJldHVybiBCT09MX1RZUEU7IH0KLQlZWV9CUkVBSwotY2FzZSAyNDoKLVlZX1JVTEVfU0VUVVAK
LXsgeXlsdmFsLT5sZXguYiA9IHRydWU7ICByZXR1cm4gQk9PTENPTlNUQU5UOyB9Ci0JWVlfQlJF
QUsKLWNhc2UgMjU6Ci1ZWV9SVUxFX1NFVFVQCi17IHl5bHZhbC0+bGV4LmIgPSBmYWxzZTsgcmV0
dXJuIEJPT0xDT05TVEFOVDsgfQotCVlZX0JSRUFLCi1jYXNlIDI2OgotWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gRElTQ0FSRDsgfQotCVlZX0JSRUFLCi1jYXNlIDI3OgotWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gUkVUVVJOOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMjg6Ci1ZWV9SVUxFX1NFVFVQCi17
IHJldHVybiBNQVRSSVgyOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMjk6Ci1ZWV9SVUxFX1NFVFVQCi17
IHJldHVybiBNQVRSSVgzOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMzA6Ci1ZWV9SVUxFX1NFVFVQCi17
IHJldHVybiBNQVRSSVg0OyB9Ci0JWVlfQlJFQUsKLWNhc2UgMzE6Ci1ZWV9SVUxFX1NFVFVQCi17
IHJldHVybiBWRUMyOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMzI6Ci1ZWV9SVUxFX1NFVFVQCi17IHJl
dHVybiBWRUMzOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMzM6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVy
biBWRUM0OyB9Ci0JWVlfQlJFQUsKLWNhc2UgMzQ6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBJ
VkVDMjsgfQotCVlZX0JSRUFLCi1jYXNlIDM1OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSVZF
QzM7IH0KLQlZWV9CUkVBSwotY2FzZSAzNjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElWRUM0
OyB9Ci0JWVlfQlJFQUsKLWNhc2UgMzc6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBCVkVDMjsg
fQotCVlZX0JSRUFLCi1jYXNlIDM4OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gQlZFQzM7IH0K
LQlZWV9CUkVBSwotY2FzZSAzOToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEJWRUM0OyB9Ci0J
WVlfQlJFQUsKLWNhc2UgNDA6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBTQU1QTEVSMkQ7IH0K
LQlZWV9CUkVBSwotY2FzZSA0MToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFNBTVBMRVJDVUJF
OyB9Ci0JWVlfQlJFQUsKLWNhc2UgNDI6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBTQU1QTEVS
X0VYVEVSTkFMX09FUzsgfQotCVlZX0JSRUFLCi1jYXNlIDQzOgotWVlfUlVMRV9TRVRVUAoteyBy
ZXR1cm4gU0FNUExFUjJEUkVDVDsgfQotCVlZX0JSRUFLCi1jYXNlIDQ0OgotWVlfUlVMRV9TRVRV
UAoteyByZXR1cm4gU1RSVUNUOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNDU6Ci1ZWV9SVUxFX1NFVFVQ
Ci17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA0
NjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQot
CVlZX0JSRUFLCi1jYXNlIDQ3OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNDg6Ci1ZWV9SVUxFX1NFVFVQCi17IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA0OToKLVlZ
X1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JS
RUFLCi1jYXNlIDUwOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNTE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA1MjoKLVlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1j
YXNlIDUzOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0JWVlfQlJFQUsKLWNhc2UgNTQ6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA1NToKLVlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDU2
OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0J
WVlfQlJFQUsKLWNhc2UgNTc6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA1ODoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDU5OgotWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJF
QUsKLWNhc2UgNjA6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA2MToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDYyOgotWVlfUlVMRV9T
RVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNh
c2UgNjM6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KLQlZWV9CUkVBSwotY2FzZSA2NDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDY1OgotWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNjY6
Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZ
WV9CUkVBSwotY2FzZSA2NzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDY4OgotWVlfUlVMRV9TRVRVUAoteyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNjk6Ci1ZWV9S
VUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVB
SwotY2FzZSA3MDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDcxOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNzI6Ci1ZWV9SVUxFX1NF
VFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2Fz
ZSA3MzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQotCVlZX0JSRUFLCi1jYXNlIDc0OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNzU6Ci1ZWV9SVUxFX1NFVFVQCi17
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA3NjoK
LVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZ
X0JSRUFLCi1jYXNlIDc3OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNzg6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA3OToKLVlZX1JV
TEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFL
Ci1jYXNlIDgwOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgODE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA4MjoKLVlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNl
IDgzOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0JWVlfQlJFQUsKLWNhc2UgODQ6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA4NToKLVlZX1JVTEVfU0VUVVAKLXsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDg2Ogot
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlf
QlJFQUsKLWNhc2UgODc6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA4ODoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDg5OgotWVlfUlVM
RV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsK
LWNhc2UgOTA6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KLQlZWV9CUkVBSwotY2FzZSA5MToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDkyOgotWVlfUlVMRV9TRVRV
UAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2Ug
OTM6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0
cmluZyh5eXRleHQpOyAKLSAgIHJldHVybiBjaGVja190eXBlKHl5c2Nhbm5lcik7Ci19Ci0JWVlf
QlJFQUsKLWNhc2UgOTQ6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBpbnRfY29uc3RhbnQoeXlz
Y2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDk1OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4g
aW50X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA5NjoKLVlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIGludF9jb25zdGFudCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNh
c2UgOTc6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBmbG9hdF9jb25zdGFudCh5eXNjYW5uZXIp
OyB9Ci0JWVlfQlJFQUsKLWNhc2UgOTg6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBmbG9hdF9j
b25zdGFudCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgOTk6Ci1ZWV9SVUxFX1NFVFVQ
Ci17IHJldHVybiBmbG9hdF9jb25zdGFudCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2Ug
MTAwOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gQUREX0FTU0lHTjsgfQotCVlZX0JSRUFLCi1j
YXNlIDEwMToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFNVQl9BU1NJR047IH0KLQlZWV9CUkVB
SwotY2FzZSAxMDI6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBNVUxfQVNTSUdOOyB9Ci0JWVlf
QlJFQUsKLWNhc2UgMTAzOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gRElWX0FTU0lHTjsgfQot
CVlZX0JSRUFLCi1jYXNlIDEwNDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIE1PRF9BU1NJR047
IH0KLQlZWV9CUkVBSwotY2FzZSAxMDU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBMRUZUX0FT
U0lHTjsgfQotCVlZX0JSRUFLCi1jYXNlIDEwNjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFJJ
R0hUX0FTU0lHTjsgfQotCVlZX0JSRUFLCi1jYXNlIDEwNzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0
dXJuIEFORF9BU1NJR047IH0KLQlZWV9CUkVBSwotY2FzZSAxMDg6Ci1ZWV9SVUxFX1NFVFVQCi17
IHJldHVybiBYT1JfQVNTSUdOOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTA5OgotWVlfUlVMRV9TRVRV
UAoteyByZXR1cm4gT1JfQVNTSUdOOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTEwOgotWVlfUlVMRV9T
RVRVUAoteyByZXR1cm4gSU5DX09QOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTExOgotWVlfUlVMRV9T
RVRVUAoteyByZXR1cm4gREVDX09QOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTEyOgotWVlfUlVMRV9T
RVRVUAoteyByZXR1cm4gQU5EX09QOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTEzOgotWVlfUlVMRV9T
RVRVUAoteyByZXR1cm4gT1JfT1A7IH0KLQlZWV9CUkVBSwotY2FzZSAxMTQ6Ci1ZWV9SVUxFX1NF
VFVQCi17IHJldHVybiBYT1JfT1A7IH0KLQlZWV9CUkVBSwotY2FzZSAxMTU6Ci1ZWV9SVUxFX1NF
VFVQCi17IHJldHVybiBMRV9PUDsgfQotCVlZX0JSRUFLCi1jYXNlIDExNjoKLVlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIEdFX09QOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTE3OgotWVlfUlVMRV9TRVRV
UAoteyByZXR1cm4gRVFfT1A7IH0KLQlZWV9CUkVBSwotY2FzZSAxMTg6Ci1ZWV9SVUxFX1NFVFVQ
Ci17IHJldHVybiBORV9PUDsgfQotCVlZX0JSRUFLCi1jYXNlIDExOToKLVlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIExFRlRfT1A7IH0KLQlZWV9CUkVBSwotY2FzZSAxMjA6Ci1ZWV9SVUxFX1NFVFVQ
Ci17IHJldHVybiBSSUdIVF9PUDsgfQotCVlZX0JSRUFLCi1jYXNlIDEyMToKLVlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIFNFTUlDT0xPTjsgfQotCVlZX0JSRUFLCi1jYXNlIDEyMjoKLVlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIExFRlRfQlJBQ0U7IH0KLQlZWV9CUkVBSwotY2FzZSAxMjM6Ci1ZWV9S
VUxFX1NFVFVQCi17IHJldHVybiBSSUdIVF9CUkFDRTsgfQotCVlZX0JSRUFLCi1jYXNlIDEyNDoK
LVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIENPTU1BOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTI1Ogot
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gQ09MT047IH0KLQlZWV9CUkVBSwotY2FzZSAxMjY6Ci1Z
WV9SVUxFX1NFVFVQCi17IHJldHVybiBFUVVBTDsgfQotCVlZX0JSRUFLCi1jYXNlIDEyNzoKLVlZ
X1JVTEVfU0VUVVAKLXsgcmV0dXJuIExFRlRfUEFSRU47IH0KLQlZWV9CUkVBSwotY2FzZSAxMjg6
Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBSSUdIVF9QQVJFTjsgfQotCVlZX0JSRUFLCi1jYXNl
IDEyOToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIExFRlRfQlJBQ0tFVDsgfQotCVlZX0JSRUFL
Ci1jYXNlIDEzMDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFJJR0hUX0JSQUNLRVQ7IH0KLQlZ
WV9CUkVBSwotY2FzZSAxMzE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBET1Q7IH0KLQlZWV9C
UkVBSwotY2FzZSAxMzI6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBCQU5HOyB9Ci0JWVlfQlJF
QUsKLWNhc2UgMTMzOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gREFTSDsgfQotCVlZX0JSRUFL
Ci1jYXNlIDEzNDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFRJTERFOyB9Ci0JWVlfQlJFQUsK
LWNhc2UgMTM1OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gUExVUzsgfQotCVlZX0JSRUFLCi1j
YXNlIDEzNjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFNUQVI7IH0KLQlZWV9CUkVBSwotY2Fz
ZSAxMzc6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBTTEFTSDsgfQotCVlZX0JSRUFLCi1jYXNl
IDEzODoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFBFUkNFTlQ7IH0KLQlZWV9CUkVBSwotY2Fz
ZSAxMzk6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBMRUZUX0FOR0xFOyB9Ci0JWVlfQlJFQUsK
LWNhc2UgMTQwOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gUklHSFRfQU5HTEU7IH0KLQlZWV9C
UkVBSwotY2FzZSAxNDE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBWRVJUSUNBTF9CQVI7IH0K
LQlZWV9CUkVBSwotY2FzZSAxNDI6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBDQVJFVDsgfQot
CVlZX0JSRUFLCi1jYXNlIDE0MzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEFNUEVSU0FORDsg
fQotCVlZX0JSRUFLCi1jYXNlIDE0NDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFFVRVNUSU9O
OyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTQ1OgotLyogcnVsZSAxNDUgY2FuIG1hdGNoIGVvbCAqLwot
WVlfUlVMRV9TRVRVUAoteyB9Ci0JWVlfQlJFQUsKLWNhc2UgWVlfU1RBVEVfRU9GKElOSVRJQUwp
OgoteyB5eXRlcm1pbmF0ZSgpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTQ2OgotWVlfUlVMRV9TRVRV
UAoteyBhc3NlcnQoZmFsc2UpOyByZXR1cm4gMDsgfQotCVlZX0JSRUFLCi1jYXNlIDE0NzoKLVlZ
X1JVTEVfU0VUVVAKLUVDSE87Ci0JWVlfQlJFQUsKLQotCWNhc2UgWVlfRU5EX09GX0JVRkZFUjoK
LQkJewotCQkvKiBBbW91bnQgb2YgdGV4dCBtYXRjaGVkIG5vdCBpbmNsdWRpbmcgdGhlIEVPQiBj
aGFyLiAqLwotCQlpbnQgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dCA9IChpbnQpICh5eV9jcCAt
IHl5Zy0+eXl0ZXh0X3B0cikgLSAxOwotCi0JCS8qIFVuZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9f
QkVGT1JFX0FDVElPTi4gKi8KLQkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7Ci0JCVlZX1JF
U1RPUkVfWVlfTU9SRV9PRkZTRVQKLQotCQlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfTkVXICkKLQkJCXsKLQkJCS8qIFdlJ3JlIHNj
YW5uaW5nIGEgbmV3IGZpbGUgb3IgaW5wdXQgc291cmNlLiAgSXQncwotCQkJICogcG9zc2libGUg
dGhhdCB0aGlzIGhhcHBlbmVkIGJlY2F1c2UgdGhlIHVzZXIKLQkJCSAqIGp1c3QgcG9pbnRlZCB5
eWluIGF0IGEgbmV3IHNvdXJjZSBhbmQgY2FsbGVkCi0JCQkgKiB5eWxleCgpLiAgSWYgc28sIHRo
ZW4gd2UgaGF2ZSB0byBhc3N1cmUKLQkJCSAqIGNvbnNpc3RlbmN5IGJldHdlZW4gWVlfQ1VSUkVO
VF9CVUZGRVIgYW5kIG91cgotCQkJICogZ2xvYmFscy4gIEhlcmUgaXMgdGhlIHJpZ2h0IHBsYWNl
IHRvIGRvIHNvLCBiZWNhdXNlCi0JCQkgKiB0aGlzIGlzIHRoZSBmaXJzdCBhY3Rpb24gKG90aGVy
IHRoYW4gcG9zc2libHkgYQotCQkJICogYmFjay11cCkgdGhhdCB3aWxsIG1hdGNoIGZvciB0aGUg
bmV3IGlucHV0IHNvdXJjZS4KLQkJCSAqLwotCQkJeXlnLT55eV9uX2NoYXJzID0gWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOwotCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9pbnB1dF9maWxlID0geXlpbjsKLQkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
YnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9OT1JNQUw7Ci0JCQl9Ci0KLQkJLyogTm90ZSB0aGF0
IGhlcmUgd2UgdGVzdCBmb3IgeXlfY19idWZfcCAiPD0iIHRvIHRoZSBwb3NpdGlvbgotCQkgKiBv
ZiB0aGUgZmlyc3QgRU9CIGluIHRoZSBidWZmZXIsIHNpbmNlIHl5X2NfYnVmX3Agd2lsbAotCQkg
KiBhbHJlYWR5IGhhdmUgYmVlbiBpbmNyZW1lbnRlZCBwYXN0IHRoZSBOVUwgY2hhcmFjdGVyCi0J
CSAqIChzaW5jZSBhbGwgc3RhdGVzIG1ha2UgdHJhbnNpdGlvbnMgb24gRU9CIHRvIHRoZQotCQkg
KiBlbmQtb2YtYnVmZmVyIHN0YXRlKS4gIENvbnRyYXN0IHRoaXMgd2l0aCB0aGUgdGVzdAotCQkg
KiBpbiBpbnB1dCgpLgotCQkgKi8KLQkJaWYgKCB5eWctPnl5X2NfYnVmX3AgPD0gJllZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQotCQkJeyAvKiBU
aGlzIHdhcyByZWFsbHkgYSBOVUwuICovCi0JCQl5eV9zdGF0ZV90eXBlIHl5X25leHRfc3RhdGU7
Ci0KLQkJCXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIHl5X2Ftb3VudF9vZl9t
YXRjaGVkX3RleHQ7Ci0KLQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3Rh
dGUoIHl5c2Nhbm5lciApOwotCi0JCQkvKiBPa2F5LCB3ZSdyZSBub3cgcG9zaXRpb25lZCB0byBt
YWtlIHRoZSBOVUwKLQkJCSAqIHRyYW5zaXRpb24uICBXZSBjb3VsZG4ndCBoYXZlCi0JCQkgKiB5
eV9nZXRfcHJldmlvdXNfc3RhdGUoKSBnbyBhaGVhZCBhbmQgZG8gaXQKLQkJCSAqIGZvciB1cyBi
ZWNhdXNlIGl0IGRvZXNuJ3Qga25vdyBob3cgdG8gZGVhbAotCQkJICogd2l0aCB0aGUgcG9zc2li
aWxpdHkgb2YgamFtbWluZyAoYW5kIHdlIGRvbid0Ci0JCQkgKiB3YW50IHRvIGJ1aWxkIGphbW1p
bmcgaW50byBpdCBiZWNhdXNlIHRoZW4gaXQKLQkJCSAqIHdpbGwgcnVuIG1vcmUgc2xvd2x5KS4K
LQkJCSAqLwotCi0JCQl5eV9uZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggeXlfY3VycmVu
dF9zdGF0ZSAsIHl5c2Nhbm5lcik7Ci0KLQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlf
TU9SRV9BREo7Ci0KLQkJCWlmICggeXlfbmV4dF9zdGF0ZSApCi0JCQkJewotCQkJCS8qIENvbnN1
bWUgdGhlIE5VTC4gKi8KLQkJCQl5eV9jcCA9ICsreXlnLT55eV9jX2J1Zl9wOwotCQkJCXl5X2N1
cnJlbnRfc3RhdGUgPSB5eV9uZXh0X3N0YXRlOwotCQkJCWdvdG8geXlfbWF0Y2g7Ci0JCQkJfQot
Ci0JCQllbHNlCi0JCQkJewotCQkJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9z
OwotCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwot
CQkJCWdvdG8geXlfZmluZF9hY3Rpb247Ci0JCQkJfQotCQkJfQotCi0JCWVsc2Ugc3dpdGNoICgg
eXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCi0JCQl7Ci0JCQljYXNlIEVPQl9BQ1Rf
RU5EX09GX0ZJTEU6Ci0JCQkJewotCQkJCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9m
ID0gMDsKLQotCQkJCWlmICggeXl3cmFwKHl5c2Nhbm5lciApICkKLQkJCQkJewotCQkJCQkvKiBO
b3RlOiBiZWNhdXNlIHdlJ3ZlIHRha2VuIGNhcmUgaW4KLQkJCQkJICogeXlfZ2V0X25leHRfYnVm
ZmVyKCkgdG8gaGF2ZSBzZXQgdXAKLQkJCQkJICogeXl0ZXh0LCB3ZSBjYW4gbm93IHNldCB1cAot
CQkJCQkgKiB5eV9jX2J1Zl9wIHNvIHRoYXQgaWYgc29tZSB0b3RhbAotCQkJCQkgKiBob3NlciAo
bGlrZSBmbGV4IGl0c2VsZikgd2FudHMgdG8KLQkJCQkJICogY2FsbCB0aGUgc2Nhbm5lciBhZnRl
ciB3ZSByZXR1cm4gdGhlCi0JCQkJCSAqIFlZX05VTEwsIGl0J2xsIHN0aWxsIHdvcmsgLSBhbm90
aGVyCi0JCQkJCSAqIFlZX05VTEwgd2lsbCBnZXQgcmV0dXJuZWQuCi0JCQkJCSAqLwotCQkJCQl5
eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKLQotCQkJCQl5
eV9hY3QgPSBZWV9TVEFURV9FT0YoWVlfU1RBUlQpOwotCQkJCQlnb3RvIGRvX2FjdGlvbjsKLQkJ
CQkJfQotCi0JCQkJZWxzZQotCQkJCQl7Ci0JCQkJCWlmICggISB5eWctPnl5X2RpZF9idWZmZXJf
c3dpdGNoX29uX2VvZiApCi0JCQkJCQlZWV9ORVdfRklMRTsKLQkJCQkJfQotCQkJCWJyZWFrOwot
CQkJCX0KLQotCQkJY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46Ci0JCQkJeXlnLT55eV9jX2J1
Zl9wID0KLQkJCQkJeXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsK
LQotCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5l
ciApOwotCi0JCQkJeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7Ci0JCQkJeXlfYnAgPSB5eWctPnl5
dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKLQkJCQlnb3RvIHl5X21hdGNoOwotCi0JCQljYXNlIEVP
Ql9BQ1RfTEFTVF9NQVRDSDoKLQkJCQl5eWctPnl5X2NfYnVmX3AgPQotCQkJCSZZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdOwotCi0JCQkJeXlfY3Vy
cmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7Ci0KLQkJCQl5
eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKLQkJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZ
X01PUkVfQURKOwotCQkJCWdvdG8geXlfZmluZF9hY3Rpb247Ci0JCQl9Ci0JCWJyZWFrOwotCQl9
Ci0KLQlkZWZhdWx0OgotCQlZWV9GQVRBTF9FUlJPUigKLQkJCSJmYXRhbCBmbGV4IHNjYW5uZXIg
aW50ZXJuYWwgZXJyb3ItLW5vIGFjdGlvbiBmb3VuZCIgKTsKLQl9IC8qIGVuZCBvZiBhY3Rpb24g
c3dpdGNoICovCi0JCX0gLyogZW5kIG9mIHNjYW5uaW5nIG9uZSB0b2tlbiAqLwotfSAvKiBlbmQg
b2YgeXlsZXggKi8KLQotLyogeXlfZ2V0X25leHRfYnVmZmVyIC0gdHJ5IHRvIHJlYWQgaW4gYSBu
ZXcgYnVmZmVyCi0gKgotICogUmV0dXJucyBhIGNvZGUgcmVwcmVzZW50aW5nIGFuIGFjdGlvbjoK
LSAqCUVPQl9BQ1RfTEFTVF9NQVRDSCAtCi0gKglFT0JfQUNUX0NPTlRJTlVFX1NDQU4gLSBjb250
aW51ZSBzY2FubmluZyBmcm9tIGN1cnJlbnQgcG9zaXRpb24KLSAqCUVPQl9BQ1RfRU5EX09GX0ZJ
TEUgLSBlbmQgb2YgZmlsZQotICovCi1zdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlz
Y2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKLQlyZWdpc3RlciBjaGFyICpkZXN0ID0gWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9jaF9idWY7Ci0JcmVnaXN0ZXIgY2hhciAqc291cmNlID0geXlnLT55
eXRleHRfcHRyOwotCXJlZ2lzdGVyIGludCBudW1iZXJfdG9fbW92ZSwgaTsKLQlpbnQgcmV0X3Zh
bDsKLQotCWlmICggeXlnLT55eV9jX2J1Zl9wID4gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFycyArIDFdICkKLQkJWVlfRkFUQUxfRVJST1IoCi0JCSJm
YXRhbCBmbGV4IHNjYW5uZXIgaW50ZXJuYWwgZXJyb3ItLWVuZCBvZiBidWZmZXIgbWlzc2VkIiAp
OwotCi0JaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2ZpbGxfYnVmZmVyID09IDAg
KQotCQl7IC8qIERvbid0IHRyeSB0byBmaWxsIHRoZSBidWZmZXIsIHNvIHRoaXMgaXMgYW4gRU9G
LiAqLwotCQlpZiAoIHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0ciAtIFlZX01PUkVf
QURKID09IDEgKQotCQkJewotCQkJLyogV2UgbWF0Y2hlZCBhIHNpbmdsZSBjaGFyYWN0ZXIsIHRo
ZSBFT0IsIHNvCi0JCQkgKiB0cmVhdCB0aGlzIGFzIGEgZmluYWwgRU9GLgotCQkJICovCi0JCQly
ZXR1cm4gRU9CX0FDVF9FTkRfT0ZfRklMRTsKLQkJCX0KLQotCQllbHNlCi0JCQl7Ci0JCQkvKiBX
ZSBtYXRjaGVkIHNvbWUgdGV4dCBwcmlvciB0byB0aGUgRU9CLCBmaXJzdAotCQkJICogcHJvY2Vz
cyBpdC4KLQkJCSAqLwotCQkJcmV0dXJuIEVPQl9BQ1RfTEFTVF9NQVRDSDsKLQkJCX0KLQkJfQot
Ci0JLyogVHJ5IHRvIHJlYWQgbW9yZSBkYXRhLiAqLwotCi0JLyogRmlyc3QgbW92ZSBsYXN0IGNo
YXJzIHRvIHN0YXJ0IG9mIGJ1ZmZlci4gKi8KLQludW1iZXJfdG9fbW92ZSA9IChpbnQpICh5eWct
Pnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsKLQotCWZvciAoIGkgPSAwOyBpIDwg
bnVtYmVyX3RvX21vdmU7ICsraSApCi0JCSooZGVzdCsrKSA9ICooc291cmNlKyspOwotCi0JaWYg
KCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVS
X0VPRl9QRU5ESU5HICkKLQkJLyogZG9uJ3QgZG8gdGhlIHJlYWQsIGl0J3Mgbm90IGd1YXJhbnRl
ZWQgdG8gcmV0dXJuIGFuIEVPRiwKLQkJICoganVzdCBmb3JjZSBhbiBFT0YKLQkJICovCi0JCVlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFycyA9IDA7
Ci0KLQllbHNlCi0JCXsKLQkJCXl5X3NpemVfdCBudW1fdG9fcmVhZCA9Ci0JCQlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0gbnVtYmVyX3RvX21vdmUgLSAxOwotCi0JCXdo
aWxlICggbnVtX3RvX3JlYWQgPD0gMCApCi0JCQl7IC8qIE5vdCBlbm91Z2ggcm9vbSBpbiB0aGUg
YnVmZmVyIC0gZ3JvdyBpdC4gKi8KLQotCQkJLyoganVzdCBhIHNob3J0ZXIgbmFtZSBmb3IgdGhl
IGN1cnJlbnQgYnVmZmVyICovCi0JCQlZWV9CVUZGRVJfU1RBVEUgYiA9IFlZX0NVUlJFTlRfQlVG
RkVSOwotCi0JCQlpbnQgeXlfY19idWZfcF9vZmZzZXQgPQotCQkJCShpbnQpICh5eWctPnl5X2Nf
YnVmX3AgLSBiLT55eV9jaF9idWYpOwotCi0JCQlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQot
CQkJCXsKLQkJCQl5eV9zaXplX3QgbmV3X3NpemUgPSBiLT55eV9idWZfc2l6ZSAqIDI7Ci0KLQkJ
CQlpZiAoIG5ld19zaXplIDw9IDAgKQotCQkJCQliLT55eV9idWZfc2l6ZSArPSBiLT55eV9idWZf
c2l6ZSAvIDg7Ci0JCQkJZWxzZQotCQkJCQliLT55eV9idWZfc2l6ZSAqPSAyOwotCi0JCQkJYi0+
eXlfY2hfYnVmID0gKGNoYXIgKikKLQkJCQkJLyogSW5jbHVkZSByb29tIGluIGZvciAyIEVPQiBj
aGFycy4gKi8KLQkJCQkJeXlyZWFsbG9jKCh2b2lkICopIGItPnl5X2NoX2J1ZixiLT55eV9idWZf
c2l6ZSArIDIgLHl5c2Nhbm5lciApOwotCQkJCX0KLQkJCWVsc2UKLQkJCQkvKiBDYW4ndCBncm93
IGl0LCB3ZSBkb24ndCBvd24gaXQuICovCi0JCQkJYi0+eXlfY2hfYnVmID0gMDsKLQotCQkJaWYg
KCAhIGItPnl5X2NoX2J1ZiApCi0JCQkJWVlfRkFUQUxfRVJST1IoCi0JCQkJImZhdGFsIGVycm9y
IC0gc2Nhbm5lciBpbnB1dCBidWZmZXIgb3ZlcmZsb3ciICk7Ci0KLQkJCXl5Zy0+eXlfY19idWZf
cCA9ICZiLT55eV9jaF9idWZbeXlfY19idWZfcF9vZmZzZXRdOwotCi0JCQludW1fdG9fcmVhZCA9
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLQotCQkJCQkJbnVtYmVyX3Rv
X21vdmUgLSAxOwotCi0JCQl9Ci0KLQkJaWYgKCBudW1fdG9fcmVhZCA+IFlZX1JFQURfQlVGX1NJ
WkUgKQotCQkJbnVtX3RvX3JlYWQgPSBZWV9SRUFEX0JVRl9TSVpFOwotCi0JCS8qIFJlYWQgaW4g
bW9yZSBkYXRhLiAqLwotCQlZWV9JTlBVVCggKCZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2NoX2J1ZltudW1iZXJfdG9fbW92ZV0pLAotCQkJeXlnLT55eV9uX2NoYXJzLCBudW1fdG9fcmVh
ZCApOwotCi0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlf
bl9jaGFyczsKLQkJfQotCi0JaWYgKCB5eWctPnl5X25fY2hhcnMgPT0gMCApCi0JCXsKLQkJaWYg
KCBudW1iZXJfdG9fbW92ZSA9PSBZWV9NT1JFX0FESiApCi0JCQl7Ci0JCQlyZXRfdmFsID0gRU9C
X0FDVF9FTkRfT0ZfRklMRTsKLQkJCXl5cmVzdGFydCh5eWluICAseXlzY2FubmVyKTsKLQkJCX0K
LQotCQllbHNlCi0JCQl7Ci0JCQlyZXRfdmFsID0gRU9CX0FDVF9MQVNUX01BVENIOwotCQkJWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0KLQkJCQlZWV9CVUZGRVJf
RU9GX1BFTkRJTkc7Ci0JCQl9Ci0JCX0KLQotCWVsc2UKLQkJcmV0X3ZhbCA9IEVPQl9BQ1RfQ09O
VElOVUVfU0NBTjsKLQotCWlmICgoeXlfc2l6ZV90KSAoeXlnLT55eV9uX2NoYXJzICsgbnVtYmVy
X3RvX21vdmUpID4gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSkgewotCQkv
KiBFeHRlbmQgdGhlIGFycmF5IGJ5IDUwJSwgcGx1cyB0aGUgbnVtYmVyIHdlIHJlYWxseSBuZWVk
LiAqLwotCQl5eV9zaXplX3QgbmV3X3NpemUgPSB5eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9f
bW92ZSArICh5eWctPnl5X25fY2hhcnMgPj4gMSk7Ci0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfY2hfYnVmID0gKGNoYXIgKikgeXlyZWFsbG9jKCh2b2lkICopIFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfY2hfYnVmLG5ld19zaXplICx5eXNjYW5uZXIgKTsKLQkJaWYgKCAhIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmICkKLQkJCVlZX0ZBVEFMX0VSUk9SKCAi
b3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2dldF9uZXh0X2J1ZmZlcigpIiApOwotCX0KLQot
CXl5Zy0+eXlfbl9jaGFycyArPSBudW1iZXJfdG9fbW92ZTsKLQlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFS
OwotCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFycyAr
IDFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwotCi0JeXlnLT55eXRleHRfcHRyID0gJllZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWzBdOwotCi0JcmV0dXJuIHJldF92YWw7Ci19
Ci0KLS8qIHl5X2dldF9wcmV2aW91c19zdGF0ZSAtIGdldCB0aGUgc3RhdGUganVzdCBiZWZvcmUg
dGhlIEVPQiBjaGFyIHdhcyByZWFjaGVkICovCi0KLSAgICBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5
eV9nZXRfcHJldmlvdXNfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLQlyZWdpc3RlciB5
eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7Ci0JcmVnaXN0ZXIgY2hhciAqeXlfY3A7Ci0g
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwot
Ci0JeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7Ci0KLQlmb3IgKCB5eV9jcCA9IHl5
Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOyB5eV9jcCA8IHl5Zy0+eXlfY19idWZfcDsgKyt5
eV9jcCApCi0JCXsKLQkJcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gKCp5eV9jcCA/IHl5X2VjW1lZ
X1NDX1RPX1VJKCp5eV9jcCldIDogMSk7Ci0JCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3Rh
dGVdICkKLQkJCXsKLQkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJyZW50
X3N0YXRlOwotCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7Ci0JCQl9Ci0J
CXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9j
dXJyZW50X3N0YXRlICkKLQkJCXsKLQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZb
eXlfY3VycmVudF9zdGF0ZV07Ci0JCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDQzICkKLQkJ
CQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKLQkJCX0KLQkJeXlfY3VycmVu
dF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGlu
dCkgeXlfY107Ci0JCX0KLQotCXJldHVybiB5eV9jdXJyZW50X3N0YXRlOwotfQotCi0vKiB5eV90
cnlfTlVMX3RyYW5zIC0gdHJ5IHRvIG1ha2UgYSB0cmFuc2l0aW9uIG9uIHRoZSBOVUwgY2hhcmFj
dGVyCi0gKgotICogc3lub3BzaXMKLSAqCW5leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCBj
dXJyZW50X3N0YXRlICk7Ci0gKi8KLSAgICBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV90cnlfTlVM
X3RyYW5zICAoeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQotewotCXJlZ2lzdGVyIGludCB5eV9pc19qYW07Ci0gICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOyAvKiBUaGlzIHZhciBtYXkgYmUgdW51
c2VkIGRlcGVuZGluZyB1cG9uIG9wdGlvbnMuICovCi0JcmVnaXN0ZXIgY2hhciAqeXlfY3AgPSB5
eWctPnl5X2NfYnVmX3A7Ci0KLQlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSAxOwotCWlmICggeXlf
YWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKLQkJewotCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5n
X3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKLQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9z
ID0geXlfY3A7Ci0JCX0KLQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVd
ICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0JCXsKLQkJeXlfY3VycmVudF9zdGF0ZSA9
IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJaWYgKCB5eV9jdXJyZW50X3N0YXRl
ID49IDQ0MyApCi0JCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKLQkJfQot
CXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1
bnNpZ25lZCBpbnQpIHl5X2NdOwotCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDQ0
Mik7Ci0KLQlyZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7Ci19Ci0KLSNp
Zm5kZWYgWVlfTk9fSU5QVVQKLSNpZmRlZiBfX2NwbHVzcGx1cwotICAgIHN0YXRpYyBpbnQgeXlp
bnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyKQotI2Vsc2UKLSAgICBzdGF0aWMgaW50IGlucHV0ICAo
eXlzY2FuX3QgeXlzY2FubmVyKQotI2VuZGlmCi0KLXsKLQlpbnQgYzsKLSAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLQkqeXlnLT55eV9j
X2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7Ci0KLQlpZiAoICp5eWctPnl5X2NfYnVmX3AgPT0g
WVlfRU5EX09GX0JVRkZFUl9DSEFSICkKLQkJewotCQkvKiB5eV9jX2J1Zl9wIG5vdyBwb2ludHMg
dG8gdGhlIGNoYXJhY3RlciB3ZSB3YW50IHRvIHJldHVybi4KLQkJICogSWYgdGhpcyBvY2N1cnMg
KmJlZm9yZSogdGhlIEVPQiBjaGFyYWN0ZXJzLCB0aGVuIGl0J3MgYQotCQkgKiB2YWxpZCBOVUw7
IGlmIG5vdCwgdGhlbiB3ZSd2ZSBoaXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLgotCQkgKi8KLQkJ
aWYgKCB5eWctPnl5X2NfYnVmX3AgPCAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9i
dWZbeXlnLT55eV9uX2NoYXJzXSApCi0JCQkvKiBUaGlzIHdhcyByZWFsbHkgYSBOVUwuICovCi0J
CQkqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsKLQotCQllbHNlCi0JCQl7IC8qIG5lZWQgbW9yZSBp
bnB1dCAqLwotCQkJeXlfc2l6ZV90IG9mZnNldCA9IHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0
ZXh0X3B0cjsKLQkJCSsreXlnLT55eV9jX2J1Zl9wOwotCi0JCQlzd2l0Y2ggKCB5eV9nZXRfbmV4
dF9idWZmZXIoIHl5c2Nhbm5lciApICkKLQkJCQl7Ci0JCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFU
Q0g6Ci0JCQkJCS8qIFRoaXMgaGFwcGVucyBiZWNhdXNlIHl5X2dfbl9iKCkKLQkJCQkJICogc2Vl
cyB0aGF0IHdlJ3ZlIGFjY3VtdWxhdGVkIGEKLQkJCQkJICogdG9rZW4gYW5kIGZsYWdzIHRoYXQg
d2UgbmVlZCB0bwotCQkJCQkgKiB0cnkgbWF0Y2hpbmcgdGhlIHRva2VuIGJlZm9yZQotCQkJCQkg
KiBwcm9jZWVkaW5nLiAgQnV0IGZvciBpbnB1dCgpLAotCQkJCQkgKiB0aGVyZSdzIG5vIG1hdGNo
aW5nIHRvIGNvbnNpZGVyLgotCQkJCQkgKiBTbyBjb252ZXJ0IHRoZSBFT0JfQUNUX0xBU1RfTUFU
Q0gKLQkJCQkJICogdG8gRU9CX0FDVF9FTkRfT0ZfRklMRS4KLQkJCQkJICovCi0KLQkJCQkJLyog
UmVzZXQgYnVmZmVyIHN0YXR1cy4gKi8KLQkJCQkJeXlyZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lcik7
Ci0KLQkJCQkJLypGQUxMVEhST1VHSCovCi0KLQkJCQljYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6
Ci0JCQkJCXsKLQkJCQkJaWYgKCB5eXdyYXAoeXlzY2FubmVyICkgKQotCQkJCQkJcmV0dXJuIEVP
RjsKLQotCQkJCQlpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQotCQkJ
CQkJWVlfTkVXX0ZJTEU7Ci0jaWZkZWYgX19jcGx1c3BsdXMKLQkJCQkJcmV0dXJuIHl5aW5wdXQo
eXlzY2FubmVyKTsKLSNlbHNlCi0JCQkJCXJldHVybiBpbnB1dCh5eXNjYW5uZXIpOwotI2VuZGlm
Ci0JCQkJCX0KLQotCQkJCWNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOgotCQkJCQl5eWctPnl5
X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyBvZmZzZXQ7Ci0JCQkJCWJyZWFrOwotCQkJCX0K
LQkJCX0KLQkJfQotCi0JYyA9ICoodW5zaWduZWQgY2hhciAqKSB5eWctPnl5X2NfYnVmX3A7CS8q
IGNhc3QgZm9yIDgtYml0IGNoYXIncyAqLwotCSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOwkvKiBw
cmVzZXJ2ZSB5eXRleHQgKi8KLQl5eWctPnl5X2hvbGRfY2hhciA9ICorK3l5Zy0+eXlfY19idWZf
cDsKLQotCWlmICggYyA9PSAnXG4nICkKLQkJICAgCi0gICAgZG97IHl5bGluZW5vKys7Ci0gICAg
ICAgIHl5Y29sdW1uPTA7Ci0gICAgfXdoaWxlKDApCi07Ci0KLQlyZXR1cm4gYzsKLX0KLSNlbmRp
ZgkvKiBpZm5kZWYgWVlfTk9fSU5QVVQgKi8KLQotLyoqIEltbWVkaWF0ZWx5IHN3aXRjaCB0byBh
IGRpZmZlcmVudCBpbnB1dCBzdHJlYW0uCi0gKiBAcGFyYW0gaW5wdXRfZmlsZSBBIHJlYWRhYmxl
IHN0cmVhbS4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICogQG5v
dGUgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXNldCB0aGUgc3RhcnQgY29uZGl0aW9uIHRvIEBj
IElOSVRJQUwgLgotICovCi0gICAgdm9pZCB5eXJlc3RhcnQgIChGSUxFICogaW5wdXRfZmlsZSAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsK
LSAgICAgICAgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwotCQlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUgPQotICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JV
Rl9TSVpFICx5eXNjYW5uZXIpOwotCX0KLQotCXl5X2luaXRfYnVmZmVyKFlZX0NVUlJFTlRfQlVG
RkVSLGlucHV0X2ZpbGUgLHl5c2Nhbm5lcik7Ci0JeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2Fu
bmVyICk7Ci19Ci0KLS8qKiBTd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgYnVmZmVyLgotICog
QHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBpbnB1dCBidWZmZXIuCi0gKiBAcGFyYW0geXlzY2Fu
bmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotICAgIHZvaWQgeXlfc3dpdGNoX3RvX2J1ZmZl
ciAgKFlZX0JVRkZFUl9TVEFURSAgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsK
LSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
Ci0KLQkvKiBUT0RPLiBXZSBzaG91bGQgYmUgYWJsZSB0byByZXBsYWNlIHRoaXMgZW50aXJlIGZ1
bmN0aW9uIGJvZHkKLQkgKiB3aXRoCi0JICoJCXl5cG9wX2J1ZmZlcl9zdGF0ZSgpOwotCSAqCQl5
eXB1c2hfYnVmZmVyX3N0YXRlKG5ld19idWZmZXIpOwotICAgICAqLwotCXl5ZW5zdXJlX2J1ZmZl
cl9zdGFjayAoeXlzY2FubmVyKTsKLQlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSID09IG5ld19idWZm
ZXIgKQotCQlyZXR1cm47Ci0KLQlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKLQkJewotCQkvKiBG
bHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCi0JCSp5eWctPnl5X2NfYnVm
X3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9i
dWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOwotCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0JCX0KLQotCVlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRSA9IG5ld19idWZmZXI7Ci0JeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0K
LQkvKiBXZSBkb24ndCBhY3R1YWxseSBrbm93IHdoZXRoZXIgd2UgZGlkIHRoaXMgc3dpdGNoIGR1
cmluZwotCSAqIEVPRiAoeXl3cmFwKCkpIHByb2Nlc3NpbmcsIGJ1dCB0aGUgb25seSB0aW1lIHRo
aXMgZmxhZwotCSAqIGlzIGxvb2tlZCBhdCBpcyBhZnRlciB5eXdyYXAoKSBpcyBjYWxsZWQsIHNv
IGl0J3Mgc2FmZQotCSAqIHRvIGdvIGFoZWFkIGFuZCBhbHdheXMgc2V0IGl0LgotCSAqLwotCXl5
Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKLX0KLQotc3RhdGljIHZvaWQgeXlf
bG9hZF9idWZmZXJfc3RhdGUgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCXl5Zy0+eXlfbl9j
aGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsKLQl5eWctPnl5dGV4
dF9wdHIgPSB5eWctPnl5X2NfYnVmX3AgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1
Zl9wb3M7Ci0JeXlpbiA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZTsK
LQl5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7Ci19Ci0KLS8qKiBBbGxvY2F0
ZSBhbmQgaW5pdGlhbGl6ZSBhbiBpbnB1dCBidWZmZXIgc3RhdGUuCi0gKiBAcGFyYW0gZmlsZSBB
IHJlYWRhYmxlIHN0cmVhbS4KLSAqIEBwYXJhbSBzaXplIFRoZSBjaGFyYWN0ZXIgYnVmZmVyIHNp
emUgaW4gYnl0ZXMuIFdoZW4gaW4gZG91YnQsIHVzZSBAYyBZWV9CVUZfU0laRS4KLSAqIEBwYXJh
bSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICogQHJldHVybiB0aGUgYWxsb2NhdGVk
IGJ1ZmZlciBzdGF0ZS4KLSAqLwotICAgIFlZX0JVRkZFUl9TVEFURSB5eV9jcmVhdGVfYnVmZmVy
ICAoRklMRSAqIGZpbGUsIGludCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLQlZWV9C
VUZGRVJfU1RBVEUgYjsKLSAgICAKLQliID0gKFlZX0JVRkZFUl9TVEFURSkgeXlhbGxvYyhzaXpl
b2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7Ci0JaWYgKCAhIGIgKQot
CQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9jcmVhdGVfYnVm
ZmVyKCkiICk7Ci0KLQliLT55eV9idWZfc2l6ZSA9IHNpemU7Ci0KLQkvKiB5eV9jaF9idWYgaGFz
IHRvIGJlIDIgY2hhcmFjdGVycyBsb25nZXIgdGhhbiB0aGUgc2l6ZSBnaXZlbiBiZWNhdXNlCi0J
ICogd2UgbmVlZCB0byBwdXQgaW4gMiBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuCi0JICovCi0J
Yi0+eXlfY2hfYnVmID0gKGNoYXIgKikgeXlhbGxvYyhiLT55eV9idWZfc2l6ZSArIDIgLHl5c2Nh
bm5lciApOwotCWlmICggISBiLT55eV9jaF9idWYgKQotCQlZWV9GQVRBTF9FUlJPUiggIm91dCBv
ZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9jcmVhdGVfYnVmZmVyKCkiICk7Ci0KLQliLT55eV9pc19v
dXJfYnVmZmVyID0gMTsKLQotCXl5X2luaXRfYnVmZmVyKGIsZmlsZSAseXlzY2FubmVyKTsKLQot
CXJldHVybiBiOwotfQotCi0vKiogRGVzdHJveSB0aGUgYnVmZmVyLgotICogQHBhcmFtIGIgYSBi
dWZmZXIgY3JlYXRlZCB3aXRoIHl5X2NyZWF0ZV9idWZmZXIoKQotICogQHBhcmFtIHl5c2Nhbm5l
ciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLSAgICB2b2lkIHl5X2RlbGV0ZV9idWZmZXIgKFlZ
X0JVRkZFUl9TVEFURSAgYiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLQlpZiAoICEgYiAp
Ci0JCXJldHVybjsKLQotCWlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApIC8qIE5vdCBzdXJl
IGlmIHdlIHNob3VsZCBwb3AgaGVyZS4gKi8KLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0g
KFlZX0JVRkZFUl9TVEFURSkgMDsKLQotCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCi0JCXl5
ZnJlZSgodm9pZCAqKSBiLT55eV9jaF9idWYgLHl5c2Nhbm5lciApOwotCi0JeXlmcmVlKCh2b2lk
ICopIGIgLHl5c2Nhbm5lciApOwotfQotCi0vKiBJbml0aWFsaXplcyBvciByZWluaXRpYWxpemVz
IGEgYnVmZmVyLgotICogVGhpcyBmdW5jdGlvbiBpcyBzb21ldGltZXMgY2FsbGVkIG1vcmUgdGhh
biBvbmNlIG9uIHRoZSBzYW1lIGJ1ZmZlciwKLSAqIHN1Y2ggYXMgZHVyaW5nIGEgeXlyZXN0YXJ0
KCkgb3IgYXQgRU9GLgotICovCi0gICAgc3RhdGljIHZvaWQgeXlfaW5pdF9idWZmZXIgIChZWV9C
VUZGRVJfU1RBVEUgIGIsIEZJTEUgKiBmaWxlICwgeXlzY2FuX3QgeXlzY2FubmVyKQotCi17Ci0J
aW50IG9lcnJubyA9IGVycm5vOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotCXl5X2ZsdXNoX2J1ZmZlcihiICx5eXNjYW5uZXIpOwot
Ci0JYi0+eXlfaW5wdXRfZmlsZSA9IGZpbGU7Ci0JYi0+eXlfZmlsbF9idWZmZXIgPSAxOwotCi0g
ICAgLyogSWYgYiBpcyB0aGUgY3VycmVudCBidWZmZXIsIHRoZW4geXlfaW5pdF9idWZmZXIgd2Fz
IF9wcm9iYWJseV8KLSAgICAgKiBjYWxsZWQgZnJvbSB5eXJlc3RhcnQoKSBvciB0aHJvdWdoIHl5
X2dldF9uZXh0X2J1ZmZlci4KLSAgICAgKiBJbiB0aGF0IGNhc2UsIHdlIGRvbid0IHdhbnQgdG8g
cmVzZXQgdGhlIGxpbmVubyBvciBjb2x1bW4uCi0gICAgICovCi0gICAgaWYgKGIgIT0gWVlfQ1VS
UkVOVF9CVUZGRVIpewotICAgICAgICBiLT55eV9ic19saW5lbm8gPSAxOwotICAgICAgICBiLT55
eV9ic19jb2x1bW4gPSAwOwotICAgIH0KLQotICAgICAgICBiLT55eV9pc19pbnRlcmFjdGl2ZSA9
IDA7Ci0gICAgCi0JZXJybm8gPSBvZXJybm87Ci19Ci0KLS8qKiBEaXNjYXJkIGFsbCBidWZmZXJl
ZCBjaGFyYWN0ZXJzLiBPbiB0aGUgbmV4dCBzY2FuLCBZWV9JTlBVVCB3aWxsIGJlIGNhbGxlZC4K
LSAqIEBwYXJhbSBiIHRoZSBidWZmZXIgc3RhdGUgdG8gYmUgZmx1c2hlZCwgdXN1YWxseSBAYyBZ
WV9DVVJSRU5UX0JVRkZFUi4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0
LgotICovCi0gICAgdm9pZCB5eV9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSAgYiAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0JaWYgKCAhIGIgKQotCQlyZXR1cm47Ci0KLQliLT55eV9u
X2NoYXJzID0gMDsKLQotCS8qIFdlIGFsd2F5cyBuZWVkIHR3byBlbmQtb2YtYnVmZmVyIGNoYXJh
Y3RlcnMuICBUaGUgZmlyc3QgY2F1c2VzCi0JICogYSB0cmFuc2l0aW9uIHRvIHRoZSBlbmQtb2Yt
YnVmZmVyIHN0YXRlLiAgVGhlIHNlY29uZCBjYXVzZXMKLQkgKiBhIGphbSBpbiB0aGF0IHN0YXRl
LgotCSAqLwotCWItPnl5X2NoX2J1ZlswXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLQliLT55
eV9jaF9idWZbMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0KLQliLT55eV9idWZfcG9zID0g
JmItPnl5X2NoX2J1ZlswXTsKLQotCWItPnl5X2F0X2JvbCA9IDE7Ci0JYi0+eXlfYnVmZmVyX3N0
YXR1cyA9IFlZX0JVRkZFUl9ORVc7Ci0KLQlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKQot
CQl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLX0KLQotLyoqIFB1c2hlcyB0aGUg
bmV3IHN0YXRlIG9udG8gdGhlIHN0YWNrLiBUaGUgbmV3IHN0YXRlIGJlY29tZXMKLSAqICB0aGUg
Y3VycmVudCBzdGF0ZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGFsbG9jYXRlIHRoZSBzdGFjawotICog
IGlmIG5lY2Vzc2FyeS4KLSAqICBAcGFyYW0gbmV3X2J1ZmZlciBUaGUgbmV3IHN0YXRlLgotICog
IEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi12b2lkIHl5cHVzaF9i
dWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKLQlpZiAobmV3X2J1ZmZlciA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQl5eWVuc3Vy
ZV9idWZmZXJfc3RhY2soeXlzY2FubmVyKTsKLQotCS8qIFRoaXMgYmxvY2sgaXMgY29waWVkIGZy
b20geXlfc3dpdGNoX3RvX2J1ZmZlci4gKi8KLQlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKLQkJ
ewotCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCi0JCSp5eWct
Pnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOwotCQlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0JCX0KLQotCS8qIE9ubHkgcHVz
aCBpZiB0b3AgZXhpc3RzLiBPdGhlcndpc2UsIHJlcGxhY2UgdG9wLiAqLwotCWlmIChZWV9DVVJS
RU5UX0JVRkZFUikKLQkJeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wKys7Ci0JWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKLQotCS8qIGNvcGllZCBmcm9tIHl5X3N3aXRjaF90
b19idWZmZXIuICovCi0JeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0JeXlnLT55
eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOwotfQotCi0vKiogUmVtb3ZlcyBhbmQgZGVs
ZXRlcyB0aGUgdG9wIG9mIHRoZSBzdGFjaywgaWYgcHJlc2VudC4KLSAqICBUaGUgbmV4dCBlbGVt
ZW50IGJlY29tZXMgdGhlIG5ldyB0b3AuCi0gKiAgQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5l
ciBvYmplY3QuCi0gKi8KLXZvaWQgeXlwb3BfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOwotCWlmICghWVlfQ1VSUkVOVF9CVUZGRVIpCi0JCXJldHVybjsKLQotCXl5X2RlbGV0
ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lcik7Ci0JWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFID0gTlVMTDsKLQlpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID4gMCkKLQkJ
LS15eWctPnl5X2J1ZmZlcl9zdGFja190b3A7Ci0KLQlpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpIHsK
LQkJeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0JCXl5Zy0+eXlfZGlkX2J1ZmZl
cl9zd2l0Y2hfb25fZW9mID0gMTsKLQl9Ci19Ci0KLS8qIEFsbG9jYXRlcyB0aGUgc3RhY2sgaWYg
aXQgZG9lcyBub3QgZXhpc3QuCi0gKiAgR3VhcmFudGVlcyBzcGFjZSBmb3IgYXQgbGVhc3Qgb25l
IHB1c2guCi0gKi8KLXN0YXRpYyB2b2lkIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3Qg
eXlzY2FubmVyKQotewotCXl5X3NpemVfdCBudW1fdG9fYWxsb2M7Ci0gICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0JaWYgKCF5eWctPnl5
X2J1ZmZlcl9zdGFjaykgewotCi0JCS8qIEZpcnN0IGFsbG9jYXRpb24gaXMganVzdCBmb3IgMiBl
bGVtZW50cywgc2luY2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGlzCi0JCSAqIHNjYW5uZXIgd2lsbCBl
dmVuIG5lZWQgYSBzdGFjay4gV2UgdXNlIDIgaW5zdGVhZCBvZiAxIHRvIGF2b2lkIGFuCi0JCSAq
IGltbWVkaWF0ZSByZWFsbG9jIG9uIHRoZSBuZXh0IGNhbGwuCi0gICAgICAgICAqLwotCQludW1f
dG9fYWxsb2MgPSAxOwotCQl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVy
X3N0YXRlKiopeXlhbGxvYwotCQkJCQkJCQkobnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5
eV9idWZmZXJfc3RhdGUqKQotCQkJCQkJCQksIHl5c2Nhbm5lcik7Ci0JCWlmICggISB5eWctPnl5
X2J1ZmZlcl9zdGFjayApCi0JCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9y
eSBpbiB5eWVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKLQkJCQkJCQkJICAKLQkJbWVtc2V0KHl5
Zy0+eXlfYnVmZmVyX3N0YWNrLCAwLCBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1
ZmZlcl9zdGF0ZSopKTsKLQkJCQkKLQkJeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gbnVtX3Rv
X2FsbG9jOwotCQl5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPSAwOwotCQlyZXR1cm47Ci0JfQot
Ci0JaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+PSAoeXlnLT55eV9idWZmZXJfc3RhY2tf
bWF4KSAtIDEpewotCi0JCS8qIEluY3JlYXNlIHRoZSBidWZmZXIgdG8gcHJlcGFyZSBmb3IgYSBw
b3NzaWJsZSBwdXNoLiAqLwotCQlpbnQgZ3Jvd19zaXplID0gOCAvKiBhcmJpdHJhcnkgZ3JvdyBz
aXplICovOwotCi0JCW51bV90b19hbGxvYyA9IHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCArIGdy
b3dfc2l6ZTsKLQkJeXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0
ZSoqKXl5cmVhbGxvYwotCQkJCQkJCQkoeXlnLT55eV9idWZmZXJfc3RhY2ssCi0JCQkJCQkJCW51
bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKLQkJCQkJCQkJLCB5
eXNjYW5uZXIpOwotCQlpZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQotCQkJWVlfRkFUQUxf
RVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXllbnN1cmVfYnVmZmVyX3N0YWNrKCki
ICk7Ci0KLQkJLyogemVybyBvbmx5IHRoZSBuZXcgc2xvdHMuKi8KLQkJbWVtc2V0KHl5Zy0+eXlf
YnVmZmVyX3N0YWNrICsgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4LCAwLCBncm93X3NpemUgKiBz
aXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKLQkJeXlnLT55eV9idWZmZXJfc3RhY2tf
bWF4ID0gbnVtX3RvX2FsbG9jOwotCX0KLX0KLQotLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIg
c3RhdGUgdG8gc2NhbiBkaXJlY3RseSBmcm9tIGEgdXNlci1zcGVjaWZpZWQgY2hhcmFjdGVyIGJ1
ZmZlci4KLSAqIEBwYXJhbSBiYXNlIHRoZSBjaGFyYWN0ZXIgYnVmZmVyCi0gKiBAcGFyYW0gc2l6
ZSB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgotICogQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0
ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4gCi0gKi8KLVlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J1
ZmZlciAgKGNoYXIgKiBiYXNlLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIp
Ci17Ci0JWVlfQlVGRkVSX1NUQVRFIGI7Ci0gICAgCi0JaWYgKCBzaXplIDwgMiB8fAotCSAgICAg
YmFzZVtzaXplLTJdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiB8fAotCSAgICAgYmFzZVtzaXpl
LTFdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCi0JCS8qIFRoZXkgZm9yZ290IHRvIGxlYXZl
IHJvb20gZm9yIHRoZSBFT0Incy4gKi8KLQkJcmV0dXJuIDA7Ci0KLQliID0gKFlZX0JVRkZFUl9T
VEFURSkgeXlhbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVy
ICk7Ci0JaWYgKCAhIGIgKQotCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9y
eSBpbiB5eV9zY2FuX2J1ZmZlcigpIiApOwotCi0JYi0+eXlfYnVmX3NpemUgPSBzaXplIC0gMjsJ
LyogIi0gMiIgdG8gdGFrZSBjYXJlIG9mIEVPQidzICovCi0JYi0+eXlfYnVmX3BvcyA9IGItPnl5
X2NoX2J1ZiA9IGJhc2U7Ci0JYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDA7Ci0JYi0+eXlfaW5wdXRf
ZmlsZSA9IDA7Ci0JYi0+eXlfbl9jaGFycyA9IGItPnl5X2J1Zl9zaXplOwotCWItPnl5X2lzX2lu
dGVyYWN0aXZlID0gMDsKLQliLT55eV9hdF9ib2wgPSAxOwotCWItPnl5X2ZpbGxfYnVmZmVyID0g
MDsKLQliLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKLQotCXl5X3N3aXRjaF90
b19idWZmZXIoYiAseXlzY2FubmVyICk7Ci0KLQlyZXR1cm4gYjsKLX0KLQotLyoqIFNldHVwIHRo
ZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBhIHN0cmluZy4gVGhlIG5leHQgY2FsbCB0byB5
eWxleCgpIHdpbGwKLSAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgc3RyLgotICogQHBhcmFt
IHl5c3RyIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHNjYW4KLSAqIEBwYXJhbSB5eXNjYW5u
ZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1
ZmZlciBzdGF0ZSBvYmplY3QuCi0gKiBAbm90ZSBJZiB5b3Ugd2FudCB0byBzY2FuIGJ5dGVzIHRo
YXQgbWF5IGNvbnRhaW4gTlVMIHZhbHVlcywgdGhlbiB1c2UKLSAqICAgICAgIHl5X3NjYW5fYnl0
ZXMoKSBpbnN0ZWFkLgotICovCi1ZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9zdHJpbmcgKHl5Y29u
c3QgY2hhciAqIHl5c3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIAotCXJldHVybiB5
eV9zY2FuX2J5dGVzKHl5c3RyLHN0cmxlbih5eXN0cikgLHl5c2Nhbm5lcik7Ci19Ci0KLS8qKiBT
ZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gdGhlIGdpdmVuIGJ5dGVzLiBUaGUg
bmV4dCBjYWxsIHRvIHl5bGV4KCkgd2lsbAotICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBi
eXRlcy4KLSAqIEBwYXJhbSBieXRlcyB0aGUgYnl0ZSBidWZmZXIgdG8gc2NhbgotICogQHBhcmFt
IGxlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBAYSBi
eXRlcy4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICogQHJldHVy
biB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCi0gKi8KLVlZX0JVRkZF
Ul9TVEFURSB5eV9zY2FuX2J5dGVzICAoeXljb25zdCBjaGFyICogeXlieXRlcywgeXlfc2l6ZV90
ICBfeXlieXRlc19sZW4gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0JWVlfQlVGRkVSX1NUQVRF
IGI7Ci0JY2hhciAqYnVmOwotCXl5X3NpemVfdCBuLCBpOwotICAgIAotCS8qIEdldCBtZW1vcnkg
Zm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRpbmcgc3BhY2UgZm9yIHRyYWlsaW5nIEVPQidzLiAqLwot
CW4gPSBfeXlieXRlc19sZW4gKyAyOwotCWJ1ZiA9IChjaGFyICopIHl5YWxsb2MobiAseXlzY2Fu
bmVyICk7Ci0JaWYgKCAhIGJ1ZiApCi0JCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMg
bWVtb3J5IGluIHl5X3NjYW5fYnl0ZXMoKSIgKTsKLQotCWZvciAoIGkgPSAwOyBpIDwgX3l5Ynl0
ZXNfbGVuOyArK2kgKQotCQlidWZbaV0gPSB5eWJ5dGVzW2ldOwotCi0JYnVmW195eWJ5dGVzX2xl
bl0gPSBidWZbX3l5Ynl0ZXNfbGVuKzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwotCi0JYiA9
IHl5X3NjYW5fYnVmZmVyKGJ1ZixuICx5eXNjYW5uZXIpOwotCWlmICggISBiICkKLQkJWVlfRkFU
QUxfRVJST1IoICJiYWQgYnVmZmVyIGluIHl5X3NjYW5fYnl0ZXMoKSIgKTsKLQotCS8qIEl0J3Mg
b2theSB0byBncm93IGV0Yy4gdGhpcyBidWZmZXIsIGFuZCB3ZSBzaG91bGQgdGhyb3cgaXQKLQkg
KiBhd2F5IHdoZW4gd2UncmUgZG9uZS4KLQkgKi8KLQliLT55eV9pc19vdXJfYnVmZmVyID0gMTsK
LQotCXJldHVybiBiOwotfQotCi0jaWZuZGVmIFlZX0VYSVRfRkFJTFVSRQotI2RlZmluZSBZWV9F
WElUX0ZBSUxVUkUgMgotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNv
bnN0IGNoYXIqIG1zZyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICAJKHZvaWQpIGZwcmlu
dGYoIHN0ZGVyciwgIiVzXG4iLCBtc2cgKTsKLQlleGl0KCBZWV9FWElUX0ZBSUxVUkUgKTsKLX0K
LQotLyogUmVkZWZpbmUgeXlsZXNzKCkgc28gaXQgd29ya3MgaW4gc2VjdGlvbiAzIGNvZGUuICov
Ci0KLSN1bmRlZiB5eWxlc3MKLSNkZWZpbmUgeXlsZXNzKG4pIFwKLQlkbyBcCi0JCXsgXAotCQkv
KiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQuICovIFwKLSAgICAgICAgaW50IHl5
bGVzc19tYWNyb19hcmcgPSAobik7IFwKLSAgICAgICAgWVlfTEVTU19MSU5FTk8oeXlsZXNzX21h
Y3JvX2FyZyk7XAotCQl5eXRleHRbeXlsZW5nXSA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBcCi0JCXl5
Zy0+eXlfY19idWZfcCA9IHl5dGV4dCArIHl5bGVzc19tYWNyb19hcmc7IFwKLQkJeXlnLT55eV9o
b2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOyBcCi0JCSp5eWctPnl5X2NfYnVmX3AgPSAnXDAn
OyBcCi0JCXl5bGVuZyA9IHl5bGVzc19tYWNyb19hcmc7IFwKLQkJfSBcCi0Jd2hpbGUgKCAwICkK
LQotLyogQWNjZXNzb3IgIG1ldGhvZHMgKGdldC9zZXQgZnVuY3Rpb25zKSB0byBzdHJ1Y3QgbWVt
YmVycy4gKi8KLQotLyoqIEdldCB0aGUgdXNlci1kZWZpbmVkIGRhdGEgZm9yIHRoaXMgc2Nhbm5l
ci4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi1ZWV9FWFRS
QV9UWVBFIHl5Z2V0X2V4dHJhICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4g
eXlleHRyYTsKLX0KLQotLyoqIEdldCB0aGUgY3VycmVudCBsaW5lIG51bWJlci4KLSAqIEBwYXJh
bSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi1pbnQgeXlnZXRfbGluZW5vICAo
eXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICAKLSAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9C
VUZGRVIpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICByZXR1cm4geXlsaW5lbm87
Ci19Ci0KLS8qKiBHZXQgdGhlIGN1cnJlbnQgY29sdW1uIG51bWJlci4KLSAqIEBwYXJhbSB5eXNj
YW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi1pbnQgeXlnZXRfY29sdW1uICAoeXlzY2Fu
X3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKLSAgICAKLSAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIp
Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICByZXR1cm4geXljb2x1bW47Ci19Ci0K
LS8qKiBHZXQgdGhlIGlucHV0IHN0cmVhbS4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5u
ZXIgb2JqZWN0LgotICovCi1GSUxFICp5eWdldF9pbiAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsK
LSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
Ci0gICAgcmV0dXJuIHl5aW47Ci19Ci0KLS8qKiBHZXQgdGhlIG91dHB1dCBzdHJlYW0uCi0gKiBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotRklMRSAqeXlnZXRfb3V0
ICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlvdXQ7Ci19Ci0KLS8qKiBH
ZXQgdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudCB0b2tlbi4KLSAqIEBwYXJhbSB5eXNjYW5uZXIg
VGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi15eV9zaXplX3QgeXlnZXRfbGVuZyAgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5bGVuZzsKLX0KLQotLyoqIEdldCB0aGUgY3Vy
cmVudCB0b2tlbi4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICov
Ci0KLWNoYXIgKnl5Z2V0X3RleHQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVy
biB5eXRleHQ7Ci19Ci0KLS8qKiBTZXQgdGhlIHVzZXItZGVmaW5lZCBkYXRhLiBUaGlzIGRhdGEg
aXMgbmV2ZXIgdG91Y2hlZCBieSB0aGUgc2Nhbm5lci4KLSAqIEBwYXJhbSB1c2VyX2RlZmluZWQg
VGhlIGRhdGEgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Nhbm5lci4KLSAqIEBwYXJhbSB5
eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi12b2lkIHl5c2V0X2V4dHJhIChZWV9F
WFRSQV9UWVBFICB1c2VyX2RlZmluZWQgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5
ZXh0cmEgPSB1c2VyX2RlZmluZWQgOwotfQotCi0vKiogU2V0IHRoZSBjdXJyZW50IGxpbmUgbnVt
YmVyLgotICogQHBhcmFtIGxpbmVfbnVtYmVyCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2Fu
bmVyIG9iamVjdC4KLSAqLwotdm9pZCB5eXNldF9saW5lbm8gKGludCAgbGluZV9udW1iZXIgLCB5
eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgICAgIC8qIGxpbmVubyBpcyBvbmx5IHZhbGlk
IGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCi0gICAgICAgIGlmICghIFlZX0NVUlJFTlRf
QlVGRkVSICkKLSAgICAgICAgICAgeXlfZmF0YWxfZXJyb3IoICJ5eXNldF9saW5lbm8gY2FsbGVk
IHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5lcik7IAotICAgIAotICAgIHl5bGluZW5vID0gbGlu
ZV9udW1iZXI7Ci19Ci0KLS8qKiBTZXQgdGhlIGN1cnJlbnQgY29sdW1uLgotICogQHBhcmFtIGxp
bmVfbnVtYmVyCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwot
dm9pZCB5eXNldF9jb2x1bW4gKGludCAgY29sdW1uX25vICwgeXlzY2FuX3QgeXlzY2FubmVyKQot
ewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5l
cjsKLQotICAgICAgICAvKiBjb2x1bW4gaXMgb25seSB2YWxpZCBpZiBhbiBpbnB1dCBidWZmZXIg
ZXhpc3RzLiAqLwotICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUiApCi0gICAgICAgICAg
IHl5X2ZhdGFsX2Vycm9yKCAieXlzZXRfY29sdW1uIGNhbGxlZCB3aXRoIG5vIGJ1ZmZlciIgLCB5
eXNjYW5uZXIpOyAKLSAgICAKLSAgICB5eWNvbHVtbiA9IGNvbHVtbl9ubzsKLX0KLQotLyoqIFNl
dCB0aGUgaW5wdXQgc3RyZWFtLiBUaGlzIGRvZXMgbm90IGRpc2NhcmQgdGhlIGN1cnJlbnQKLSAq
IGlucHV0IGJ1ZmZlci4KLSAqIEBwYXJhbSBpbl9zdHIgQSByZWFkYWJsZSBzdHJlYW0uCi0gKiBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEBzZWUgeXlfc3dpdGNoX3Rv
X2J1ZmZlcgotICovCi12b2lkIHl5c2V0X2luIChGSUxFICogIGluX3N0ciAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7Ci0gICAgeXlpbiA9IGluX3N0ciA7Ci19Ci0KLXZvaWQgeXlzZXRfb3V0IChG
SUxFICogIG91dF9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5b3V0ID0gb3V0
X3N0ciA7Ci19Ci0KLWludCB5eWdldF9kZWJ1ZyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0g
ICAgcmV0dXJuIHl5X2ZsZXhfZGVidWc7Ci19Ci0KLXZvaWQgeXlzZXRfZGVidWcgKGludCAgYmRl
YnVnICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eV9mbGV4X2RlYnVnID0gYmRlYnVn
IDsKLX0KLQotLyogQWNjZXNzb3IgbWV0aG9kcyBmb3IgeXlsdmFsIGFuZCB5eWxsb2MgKi8KLQot
WVlTVFlQRSAqIHl5Z2V0X2x2YWwgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVy
biB5eWx2YWw7Ci19Ci0KLXZvaWQgeXlzZXRfbHZhbCAoWVlTVFlQRSAqICB5eWx2YWxfcGFyYW0g
LCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5bHZhbCA9IHl5bHZhbF9wYXJhbTsKLX0K
LQotWVlMVFlQRSAqeXlnZXRfbGxvYyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1
Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0
dXJuIHl5bGxvYzsKLX0KLSAgICAKLXZvaWQgeXlzZXRfbGxvYyAoWVlMVFlQRSAqICB5eWxsb2Nf
cGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5bGxvYyA9IHl5bGxvY19wYXJh
bTsKLX0KLSAgICAKLS8qIFVzZXItdmlzaWJsZSBBUEkgKi8KLQotLyogeXlsZXhfaW5pdCBpcyBz
cGVjaWFsIGJlY2F1c2UgaXQgY3JlYXRlcyB0aGUgc2Nhbm5lciBpdHNlbGYsIHNvIGl0IGlzCi0g
KiB0aGUgT05MWSByZWVudHJhbnQgZnVuY3Rpb24gdGhhdCBkb2Vzbid0IHRha2UgdGhlIHNjYW5u
ZXIgYXMgdGhlIGxhc3QgYXJndW1lbnQuCi0gKiBUaGF0J3Mgd2h5IHdlIGV4cGxpY2l0bHkgaGFu
ZGxlIHRoZSBkZWNsYXJhdGlvbiwgaW5zdGVhZCBvZiB1c2luZyBvdXIgbWFjcm9zLgotICovCi0K
LWludCB5eWxleF9pbml0KHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFscykKLQotewotICAgIGlmIChw
dHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKLSAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAg
IHJldHVybiAxOwotICAgIH0KLQotICAgICpwdHJfeXlfZ2xvYmFscyA9ICh5eXNjYW5fdCkgeXlh
bGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0c190ICksIE5VTEwgKTsKLQotICAgIGlmICgqcHRy
X3l5X2dsb2JhbHMgPT0gTlVMTCl7Ci0gICAgICAgIGVycm5vID0gRU5PTUVNOwotICAgICAgICBy
ZXR1cm4gMTsKLSAgICB9Ci0KLSAgICAvKiBCeSBzZXR0aW5nIHRvIDB4QUEsIHdlIGV4cG9zZSBi
dWdzIGluIHl5X2luaXRfZ2xvYmFscy4gTGVhdmUgYXQgMHgwMCBmb3IgcmVsZWFzZXMuICovCi0g
ICAgbWVtc2V0KCpwdHJfeXlfZ2xvYmFscywweDAwLHNpemVvZihzdHJ1Y3QgeXlndXRzX3QpKTsK
LQotICAgIHJldHVybiB5eV9pbml0X2dsb2JhbHMgKCAqcHRyX3l5X2dsb2JhbHMgKTsKLX0KLQot
LyogeXlsZXhfaW5pdF9leHRyYSBoYXMgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBhcyB5eWxleF9p
bml0LCBidXQgZm9sbG93cyB0aGUKLSAqIGNvbnZlbnRpb24gb2YgdGFraW5nIHRoZSBzY2FubmVy
IGFzIHRoZSBsYXN0IGFyZ3VtZW50LiBOb3RlIGhvd2V2ZXIsIHRoYXQKLSAqIHRoaXMgaXMgYSAq
cG9pbnRlciogdG8gYSBzY2FubmVyLCBhcyBpdCB3aWxsIGJlIGFsbG9jYXRlZCBieSB0aGlzIGNh
bGwgKGFuZAotICogaXMgdGhlIHJlYXNvbiwgdG9vLCB3aHkgdGhpcyBmdW5jdGlvbiBhbHNvIG11
c3QgaGFuZGxlIGl0cyBvd24gZGVjbGFyYXRpb24pLgotICogVGhlIHVzZXIgZGVmaW5lZCB2YWx1
ZSBpbiB0aGUgZmlyc3QgYXJndW1lbnQgd2lsbCBiZSBhdmFpbGFibGUgdG8geXlhbGxvYyBpbgot
ICogdGhlIHl5ZXh0cmEgZmllbGQuCi0gKi8KLQotaW50IHl5bGV4X2luaXRfZXh0cmEoWVlfRVhU
UkFfVFlQRSB5eV91c2VyX2RlZmluZWQseXlzY2FuX3QqIHB0cl95eV9nbG9iYWxzICkKLQotewot
ICAgIHN0cnVjdCB5eWd1dHNfdCBkdW1teV95eWd1dHM7Ci0KLSAgICB5eXNldF9leHRyYSAoeXlf
dXNlcl9kZWZpbmVkLCAmZHVtbXlfeXlndXRzKTsKLQotICAgIGlmIChwdHJfeXlfZ2xvYmFscyA9
PSBOVUxMKXsKLSAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgIHJldHVybiAxOwotICAg
IH0KLQkKLSAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3QpIHl5YWxsb2MgKCBzaXplb2Yo
IHN0cnVjdCB5eWd1dHNfdCApLCAmZHVtbXlfeXlndXRzICk7Ci0JCi0gICAgaWYgKCpwdHJfeXlf
Z2xvYmFscyA9PSBOVUxMKXsKLSAgICAgICAgZXJybm8gPSBFTk9NRU07Ci0gICAgICAgIHJldHVy
biAxOwotICAgIH0KLSAgICAKLSAgICAvKiBCeSBzZXR0aW5nIHRvIDB4QUEsIHdlIGV4cG9zZSBi
dWdzIGluCi0gICAgeXlfaW5pdF9nbG9iYWxzLiBMZWF2ZSBhdCAweDAwIGZvciByZWxlYXNlcy4g
Ki8KLSAgICBtZW1zZXQoKnB0cl95eV9nbG9iYWxzLDB4MDAsc2l6ZW9mKHN0cnVjdCB5eWd1dHNf
dCkpOwotICAgIAotICAgIHl5c2V0X2V4dHJhICh5eV91c2VyX2RlZmluZWQsICpwdHJfeXlfZ2xv
YmFscyk7Ci0gICAgCi0gICAgcmV0dXJuIHl5X2luaXRfZ2xvYmFscyAoICpwdHJfeXlfZ2xvYmFs
cyApOwotfQotCi1zdGF0aWMgaW50IHl5X2luaXRfZ2xvYmFscyAoeXlzY2FuX3QgeXlzY2FubmVy
KQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKLSAgICAvKiBJbml0aWFsaXphdGlvbiBpcyB0aGUgc2FtZSBhcyBmb3IgdGhlIG5vbi1y
ZWVudHJhbnQgc2Nhbm5lci4KLSAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHl5
bGV4X2Rlc3Ryb3koKSwgc28gZG9uJ3QgYWxsb2NhdGUgaGVyZS4KLSAgICAgKi8KLQotICAgIHl5
Zy0+eXlfYnVmZmVyX3N0YWNrID0gMDsKLSAgICB5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPSAw
OwotICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IDA7Ci0gICAgeXlnLT55eV9jX2J1Zl9w
ID0gKGNoYXIgKikgMDsKLSAgICB5eWctPnl5X2luaXQgPSAwOwotICAgIHl5Zy0+eXlfc3RhcnQg
PSAwOwotCi0gICAgeXlnLT55eV9zdGFydF9zdGFja19wdHIgPSAwOwotICAgIHl5Zy0+eXlfc3Rh
cnRfc3RhY2tfZGVwdGggPSAwOwotICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sgPSAgTlVMTDsKLQot
LyogRGVmaW5lZCBpbiBtYWluLmMgKi8KLSNpZmRlZiBZWV9TVERJTklUCi0gICAgeXlpbiA9IHN0
ZGluOwotICAgIHl5b3V0ID0gc3Rkb3V0OwotI2Vsc2UKLSAgICB5eWluID0gKEZJTEUgKikgMDsK
LSAgICB5eW91dCA9IChGSUxFICopIDA7Ci0jZW5kaWYKLQotICAgIC8qIEZvciBmdXR1cmUgcmVm
ZXJlbmNlOiBTZXQgZXJybm8gb24gZXJyb3IsIHNpbmNlIHdlIGFyZSBjYWxsZWQgYnkKLSAgICAg
KiB5eWxleF9pbml0KCkKLSAgICAgKi8KLSAgICByZXR1cm4gMDsKLX0KLQotLyogeXlsZXhfZGVz
dHJveSBpcyBmb3IgYm90aCByZWVudHJhbnQgYW5kIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMuICov
Ci1pbnQgeXlsZXhfZGVzdHJveSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICAvKiBQ
b3AgdGhlIGJ1ZmZlciBzdGFjaywgZGVzdHJveWluZyBlYWNoIGVsZW1lbnQuICovCi0Jd2hpbGUo
WVlfQ1VSUkVOVF9CVUZGRVIpewotCQl5eV9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVS
ICx5eXNjYW5uZXIgKTsKLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsKLQkJeXlw
b3BfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lcik7Ci0JfQotCi0JLyogRGVzdHJveSB0aGUgc3RhY2sg
aXRzZWxmLiAqLwotCXl5ZnJlZSh5eWctPnl5X2J1ZmZlcl9zdGFjayAseXlzY2FubmVyKTsKLQl5
eWctPnl5X2J1ZmZlcl9zdGFjayA9IE5VTEw7Ci0KLSAgICAvKiBEZXN0cm95IHRoZSBzdGFydCBj
b25kaXRpb24gc3RhY2suICovCi0gICAgICAgIHl5ZnJlZSh5eWctPnl5X3N0YXJ0X3N0YWNrICx5
eXNjYW5uZXIgKTsKLSAgICAgICAgeXlnLT55eV9zdGFydF9zdGFjayA9IE5VTEw7Ci0KLSAgICAv
KiBSZXNldCB0aGUgZ2xvYmFscy4gVGhpcyBpcyBpbXBvcnRhbnQgaW4gYSBub24tcmVlbnRyYW50
IHNjYW5uZXIgc28gdGhlIG5leHQgdGltZQotICAgICAqIHl5bGV4KCkgaXMgY2FsbGVkLCBpbml0
aWFsaXphdGlvbiB3aWxsIG9jY3VyLiAqLwotICAgIHl5X2luaXRfZ2xvYmFscyggeXlzY2FubmVy
KTsKLQotICAgIC8qIERlc3Ryb3kgdGhlIG1haW4gc3RydWN0IChyZWVudHJhbnQgb25seSkuICov
Ci0gICAgeXlmcmVlICggeXlzY2FubmVyICwgeXlzY2FubmVyICk7Ci0gICAgeXlzY2FubmVyID0g
TlVMTDsKLSAgICByZXR1cm4gMDsKLX0KLQotLyoKLSAqIEludGVybmFsIHV0aWxpdHkgcm91dGlu
ZXMuCi0gKi8KLQotI2lmbmRlZiB5eXRleHRfcHRyCi1zdGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5j
cHkgKGNoYXIqIHMxLCB5eWNvbnN0IGNoYXIgKiBzMiwgaW50IG4gLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCi17Ci0JcmVnaXN0ZXIgaW50IGk7Ci0JZm9yICggaSA9IDA7IGkgPCBuOyArK2kgKQotCQlz
MVtpXSA9IHMyW2ldOwotfQotI2VuZGlmCi0KLSNpZmRlZiBZWV9ORUVEX1NUUkxFTgotc3RhdGlj
IGludCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBjaGFyICogcyAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKLXsKLQlyZWdpc3RlciBpbnQgbjsKLQlmb3IgKCBuID0gMDsgc1tuXTsgKytuICkKLQkJOwot
Ci0JcmV0dXJuIG47Ci19Ci0jZW5kaWYKLQotdm9pZCAqeXlhbGxvYyAoeXlfc2l6ZV90ICBzaXpl
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotCXJldHVybiAodm9pZCAqKSBtYWxsb2MoIHNpemUg
KTsKLX0KLQotdm9pZCAqeXlyZWFsbG9jICAodm9pZCAqIHB0ciwgeXlfc2l6ZV90ICBzaXplICwg
eXlzY2FuX3QgeXlzY2FubmVyKQotewotCS8qIFRoZSBjYXN0IHRvIChjaGFyICopIGluIHRoZSBm
b2xsb3dpbmcgYWNjb21tb2RhdGVzIGJvdGgKLQkgKiBpbXBsZW1lbnRhdGlvbnMgdGhhdCB1c2Ug
Y2hhciogZ2VuZXJpYyBwb2ludGVycywgYW5kIHRob3NlCi0JICogdGhhdCB1c2Ugdm9pZCogZ2Vu
ZXJpYyBwb2ludGVycy4gIEl0IHdvcmtzIHdpdGggdGhlIGxhdHRlcgotCSAqIGJlY2F1c2UgYm90
aCBBTlNJIEMgYW5kIEMrKyBhbGxvdyBjYXN0bGVzcyBhc3NpZ25tZW50IGZyb20KLQkgKiBhbnkg
cG9pbnRlciB0eXBlIHRvIHZvaWQqLCBhbmQgZGVhbCB3aXRoIGFyZ3VtZW50IGNvbnZlcnNpb25z
Ci0JICogYXMgdGhvdWdoIGRvaW5nIGFuIGFzc2lnbm1lbnQuCi0JICovCi0JcmV0dXJuICh2b2lk
ICopIHJlYWxsb2MoIChjaGFyICopIHB0ciwgc2l6ZSApOwotfQotCi12b2lkIHl5ZnJlZSAodm9p
ZCAqIHB0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLQlmcmVlKCAoY2hhciAqKSBwdHIgKTsJ
Lyogc2VlIHl5cmVhbGxvYygpIGZvciAoY2hhciAqKSBjYXN0ICovCi19Ci0KLSNkZWZpbmUgWVlU
QUJMRVNfTkFNRSAieXl0YWJsZXMiCi0KLSNpZiBkZWZpbmVkKF9fY2xhbmdfXykKLSNwcmFnbWEg
Y2xhbmcgZGlhZ25vc3RpYyBwb3AKLSNlbmRpZgotCi15eV9zaXplX3Qgc3RyaW5nX2lucHV0KGNo
YXIqIGJ1ZiwgeXlfc2l6ZV90IG1heF9zaXplLCB5eXNjYW5fdCB5eXNjYW5uZXIpIHsKLSAgICBw
cDo6VG9rZW4gdG9rZW47Ci0gICAgeXlnZXRfZXh0cmEoeXlzY2FubmVyKS0+cHJlcHJvY2Vzc29y
LmxleCgmdG9rZW4pOwotICAgIHl5X3NpemVfdCBsZW4gPSB0b2tlbi50eXBlID09IHBwOjpUb2tl
bjo6TEFTVCA/IDAgOiB0b2tlbi50ZXh0LnNpemUoKTsKLSAgICBpZiAobGVuIDwgbWF4X3NpemUp
Ci0gICAgICAgIG1lbWNweShidWYsIHRva2VuLnRleHQuY19zdHIoKSwgbGVuKTsKLSAgICB5eXNl
dF9jb2x1bW4odG9rZW4ubG9jYXRpb24uZmlsZSx5eXNjYW5uZXIpOwotICAgIHl5c2V0X2xpbmVu
byh0b2tlbi5sb2NhdGlvbi5saW5lLHl5c2Nhbm5lcik7Ci0KLSAgICBpZiAobGVuID49IG1heF9z
aXplKQotICAgICAgICBZWV9GQVRBTF9FUlJPUigiSW5wdXQgYnVmZmVyIG92ZXJmbG93Iik7Ci0g
ICAgZWxzZSBpZiAobGVuID4gMCkKLSAgICAgICAgYnVmW2xlbisrXSA9ICcgJzsKLSAgICByZXR1
cm4gbGVuOwotfQotCi1pbnQgY2hlY2tfdHlwZSh5eXNjYW5fdCB5eXNjYW5uZXIpIHsKLSAgICBz
dHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSB5eXNjYW5uZXI7Ci0gICAg
Ci0gICAgaW50IHRva2VuID0gSURFTlRJRklFUjsKLSAgICBUU3ltYm9sKiBzeW1ib2wgPSB5eWV4
dHJhLT5zeW1ib2xUYWJsZS5maW5kKHl5dGV4dCk7Ci0gICAgaWYgKHN5bWJvbCAmJiBzeW1ib2wt
PmlzVmFyaWFibGUoKSkgewotICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gc3RhdGljX2Nh
c3Q8VFZhcmlhYmxlKj4oc3ltYm9sKTsKLSAgICAgICAgaWYgKHZhcmlhYmxlLT5pc1VzZXJUeXBl
KCkpCi0gICAgICAgICAgICB0b2tlbiA9IFRZUEVfTkFNRTsKLSAgICB9Ci0gICAgeXlsdmFsLT5s
ZXguc3ltYm9sID0gc3ltYm9sOwotICAgIHJldHVybiB0b2tlbjsKLX0KLQotaW50IHJlc2VydmVk
X3dvcmQoeXlzY2FuX3QgeXlzY2FubmVyKSB7Ci0gICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190KikgeXlzY2FubmVyOwotCi0gICAgeXlleHRyYS0+ZXJyb3IoKnl5bGxv
YywgIklsbGVnYWwgdXNlIG9mIHJlc2VydmVkIHdvcmQiLCB5eXRleHQsICIiKTsKLSAgICB5eWV4
dHJhLT5yZWNvdmVyKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgeXllcnJvcihZWUxUWVBF
KiBsbG9jLCBUUGFyc2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pIHsKLSAg
ICBjb250ZXh0LT5lcnJvcigqbGxvYywgcmVhc29uLCB5eWdldF90ZXh0KGNvbnRleHQtPnNjYW5u
ZXIpKTsKLSAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci19Ci0KLWludCBpbnRfY29uc3RhbnQoeXlz
Y2FuX3QgeXlzY2FubmVyKSB7Ci0gICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190KikgeXlzY2FubmVyOwotCi0gICAgaWYgKCFhdG9pX2NsYW1wKHl5dGV4dCwgJih5eWx2
YWwtPmxleC5pKSkpCi0gICAgICAgIHl5ZXh0cmEtPndhcm5pbmcoKnl5bGxvYywgIkludGVnZXIg
b3ZlcmZsb3ciLCB5eXRleHQsICIiKTsKLSAgICByZXR1cm4gSU5UQ09OU1RBTlQ7Ci19Ci0KLWlu
dCBmbG9hdF9jb25zdGFudCh5eXNjYW5fdCB5eXNjYW5uZXIpIHsKLSAgICBzdHJ1Y3QgeXlndXRz
X3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSB5eXNjYW5uZXI7Ci0KLSAgICBpZiAoIWF0b2Zf
Y2xhbXAoeXl0ZXh0LCAmKHl5bHZhbC0+bGV4LmYpKSkKLSAgICAgICAgeXlleHRyYS0+d2Fybmlu
ZygqeXlsbG9jLCAiRmxvYXQgb3ZlcmZsb3ciLCB5eXRleHQsICIiKTsKLSAgICByZXR1cm4gRkxP
QVRDT05TVEFOVDsKLX0KLQotaW50IGdsc2xhbmdfaW5pdGlhbGl6ZShUUGFyc2VDb250ZXh0KiBj
b250ZXh0KSB7Ci0gICAgeXlzY2FuX3Qgc2Nhbm5lciA9IE5VTEw7Ci0gICAgaWYgKHl5bGV4X2lu
aXRfZXh0cmEoY29udGV4dCwmc2Nhbm5lcikpCi0gICAgICAgIHJldHVybiAxOwotCi0gICAgY29u
dGV4dC0+c2Nhbm5lciA9IHNjYW5uZXI7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBnbHNsYW5n
X2ZpbmFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKLSAgICB5eXNjYW5fdCBzY2FubmVy
ID0gY29udGV4dC0+c2Nhbm5lcjsKLSAgICBpZiAoc2Nhbm5lciA9PSBOVUxMKSByZXR1cm4gMDsK
LSAgICAKLSAgICBjb250ZXh0LT5zY2FubmVyID0gTlVMTDsKLSAgICB5eWxleF9kZXN0cm95KHNj
YW5uZXIpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBnbHNsYW5nX3NjYW4oc2l6ZV90IGNv
dW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdLAotICAg
ICAgICAgICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7Ci0gICAgeXlyZXN0YXJ0KE5V
TEwsY29udGV4dC0+c2Nhbm5lcik7Ci0gICAgeXlzZXRfY29sdW1uKDAsY29udGV4dC0+c2Nhbm5l
cik7Ci0gICAgeXlzZXRfbGluZW5vKDEsY29udGV4dC0+c2Nhbm5lcik7Ci0KLSAgICAvLyBJbml0
aWFsaXplIHByZXByb2Nlc3Nvci4KLSAgICBpZiAoIWNvbnRleHQtPnByZXByb2Nlc3Nvci5pbml0
KGNvdW50LCBzdHJpbmcsIGxlbmd0aCkpCi0gICAgICAgIHJldHVybiAxOwotICAgIGNvbnRleHQt
PnByZXByb2Nlc3Nvci5zZXRNYXhUb2tlbkxlbmd0aChTSF9NQVhfVE9LRU5fTEVOR1RIKTsKLQot
ICAgIC8vIERlZmluZSBleHRlbnNpb24gbWFjcm9zLgotICAgIGNvbnN0IFRFeHRlbnNpb25CZWhh
dmlvciYgZXh0QmVoYXZpb3IgPSBjb250ZXh0LT5leHRlbnNpb25CZWhhdmlvcigpOwotICAgIGZv
ciAoVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0QmVoYXZpb3Iu
YmVnaW4oKTsKLSAgICAgICAgIGl0ZXIgIT0gZXh0QmVoYXZpb3IuZW5kKCk7ICsraXRlcikgewot
ICAgICAgICBjb250ZXh0LT5wcmVwcm9jZXNzb3IucHJlZGVmaW5lTWFjcm8oaXRlci0+Zmlyc3Qu
Y19zdHIoKSwgMSk7Ci0gICAgfQotICAgIGlmIChjb250ZXh0LT5mcmFnbWVudFByZWNpc2lvbkhp
Z2gpCi0gICAgICAgIGNvbnRleHQtPnByZXByb2Nlc3Nvci5wcmVkZWZpbmVNYWNybygiR0xfRlJB
R01FTlRfUFJFQ0lTSU9OX0hJR0giLCAxKTsKLQotICAgIHJldHVybiAwOwotfQotCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U3YjJjNzExNzBhOGI0N2JmNGRmMDg3YTlk
YmEzYTBlNmY1MTdhNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNDg3MiArMCwwIEBACi0vKiBBcHBsZSBOb3RlOiBGb3IgdGhl
IGF2b2lkYW5jZSBvZiBkb3VidCwgQXBwbGUgZWxlY3RzIHRvIGRpc3RyaWJ1dGUgdGhpcyBmaWxl
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQlNEIGxpY2Vuc2UuICovCi0KLS8qIEEgQmlzb24gcGFy
c2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjcuICAqLwotCi0vKiBCaXNvbiBpbXBsZW1lbnRhdGlv
biBmb3IgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwotICAgCi0gICAgICBDb3B5cmlnaHQgKEMpIDE5
ODQsIDE5ODktMTk5MCwgMjAwMC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgot
ICAgCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yIG1vZGlmeQotICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0gICAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICAgCi0gICBUaGlzIHByb2dyYW0gaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlCi0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICAgCi0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3Qs
IHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwotCi0vKiBBcyBhIHNwZWNp
YWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMK
LSAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1
dGUgdGhhdCB3b3JrCi0gICB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0
aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGEKLSAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNr
ZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9mCi0gICBhcyBhIHBhcnNlciBza2Vs
ZXRvbi4gIEFsdGVybmF0aXZlbHksIGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlCi0gICB0
aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92
ZSB0aGlzCi0gICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0
b24gYW5kIHRoZSByZXN1bHRpbmcKLSAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNl
ZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBz
cGVjaWFsIGV4Y2VwdGlvbi4KLSAgIAotICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRk
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgotICAgdmVyc2lvbiAyLjIgb2Yg
Qmlzb24uICAqLwotCi0vKiBDIExBTFIoMSkgcGFyc2VyIHNrZWxldG9uIHdyaXR0ZW4gYnkgUmlj
aGFyZCBTdGFsbG1hbiwgYnkKLSAgIHNpbXBsaWZ5aW5nIHRoZSBvcmlnaW5hbCBzby1jYWxsZWQg
InNlbWFudGljIiBwYXJzZXIuICAqLwotCi0vKiBBbGwgc3ltYm9scyBkZWZpbmVkIGJlbG93IHNo
b3VsZCBiZWdpbiB3aXRoIHl5IG9yIFlZLCB0byBhdm9pZAotICAgaW5mcmluZ2luZyBvbiB1c2Vy
IG5hbWUgc3BhY2UuICBUaGlzIHNob3VsZCBiZSBkb25lIGV2ZW4gZm9yIGxvY2FsCi0gICB2YXJp
YWJsZXMsIGFzIHRoZXkgbWlnaHQgb3RoZXJ3aXNlIGJlIGV4cGFuZGVkIGJ5IHVzZXIgbWFjcm9z
LgotICAgVGhlcmUgYXJlIHNvbWUgdW5hdm9pZGFibGUgZXhjZXB0aW9ucyB3aXRoaW4gaW5jbHVk
ZSBmaWxlcyB0bwotICAgZGVmaW5lIG5lY2Vzc2FyeSBsaWJyYXJ5IHN5bWJvbHM7IHRoZXkgYXJl
IG5vdGVkICJJTkZSSU5HRVMgT04KLSAgIFVTRVIgTkFNRSBTUEFDRSIgYmVsb3cuICAqLwotCi0v
KiBJZGVudGlmeSBCaXNvbiBvdXRwdXQuICAqLwotI2RlZmluZSBZWUJJU09OIDEKLQotLyogQmlz
b24gdmVyc2lvbi4gICovCi0jZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMi43IgotCi0vKiBTa2Vs
ZXRvbiBuYW1lLiAgKi8KLSNkZWZpbmUgWVlTS0VMRVRPTl9OQU1FICJ5YWNjLmMiCi0KLS8qIFB1
cmUgcGFyc2Vycy4gICovCi0jZGVmaW5lIFlZUFVSRSAxCi0KLS8qIFB1c2ggcGFyc2Vycy4gICov
Ci0jZGVmaW5lIFlZUFVTSCAwCi0KLS8qIFB1bGwgcGFyc2Vycy4gICovCi0jZGVmaW5lIFlZUFVM
TCAxCi0KLQotCi0KLS8qIENvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMu
ICAqLwotCi0KLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVy
YXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQotCi0vLyBJZ25vcmUgZXJy
b3JzIGluIGF1dG8tZ2VuZXJhdGVkIGNvZGUuCi0jaWYgZGVmaW5lZChfX0dOVUNfXykKLSNwcmFn
bWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtZnVuY3Rpb24iCi0jcHJhZ21hIEdD
QyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLXZhcmlhYmxlIgotI3ByYWdtYSBHQ0MgZGlh
Z25vc3RpYyBpZ25vcmVkICItV3N3aXRjaC1lbnVtIgotI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikK
LSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MDY1KQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6
IDQxODkpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUwNSkKLSNwcmFnbWEgd2FybmluZyhk
aXNhYmxlOiA0NzAxKQotI2VuZGlmCi0KLSNpbmNsdWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5o
IgotI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlQ29udGV4dC5oIgotI2luY2x1ZGUgIkdMU0xBTkcv
U2hhZGVyTGFuZy5oIgotCi0jZGVmaW5lIFlZRU5BQkxFX05MUyAwCi0KLSNkZWZpbmUgWVlMRVhf
UEFSQU0gY29udGV4dC0+c2Nhbm5lcgotCi0KLQotIyBpZm5kZWYgWVlfTlVMTAotIyAgaWYgZGVm
aW5lZCBfX2NwbHVzcGx1cyAmJiAyMDExMDNMIDw9IF9fY3BsdXNwbHVzCi0jICAgZGVmaW5lIFlZ
X05VTEwgbnVsbHB0cgotIyAgZWxzZQotIyAgIGRlZmluZSBZWV9OVUxMIDAKLSMgIGVuZGlmCi0j
IGVuZGlmCi0KLS8qIEVuYWJsaW5nIHZlcmJvc2UgZXJyb3IgbWVzc2FnZXMuICAqLwotI2lmZGVm
IFlZRVJST1JfVkVSQk9TRQotIyB1bmRlZiBZWUVSUk9SX1ZFUkJPU0UKLSMgZGVmaW5lIFlZRVJS
T1JfVkVSQk9TRSAxCi0jZWxzZQotIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDAKLSNlbmRpZgot
Ci0vKiBJbiBhIGZ1dHVyZSByZWxlYXNlIG9mIEJpc29uLCB0aGlzIHNlY3Rpb24gd2lsbCBiZSBy
ZXBsYWNlZAotICAgYnkgI2luY2x1ZGUgImdsc2xhbmdfdGFiLmgiLiAgKi8KLSNpZm5kZWYgWVlf
WVlfR0xTTEFOR19UQUJfSF9JTkNMVURFRAotIyBkZWZpbmUgWVlfWVlfR0xTTEFOR19UQUJfSF9J
TkNMVURFRAotLyogRW5hYmxpbmcgdHJhY2VzLiAgKi8KLSNpZm5kZWYgWVlERUJVRwotIyBkZWZp
bmUgWVlERUJVRyAwCi0jZW5kaWYKLSNpZiBZWURFQlVHCi1leHRlcm4gaW50IHl5ZGVidWc7Ci0j
ZW5kaWYKLS8qICIlY29kZSByZXF1aXJlcyIgYmxvY2tzLiAgKi8KLQotCi0jZGVmaW5lIFlZTFRZ
UEUgVFNvdXJjZUxvYwotI2RlZmluZSBZWUxUWVBFX0lTX0RFQ0xBUkVEIDEKLSNkZWZpbmUgU0hf
TUFYX1RPS0VOX0xFTkdUSCAyNTYgIC8vIFdlYkdMIHNwZWMuCi0KLQotCi0KLS8qIFRva2Vucy4g
ICovCi0jaWZuZGVmIFlZVE9LRU5UWVBFCi0jIGRlZmluZSBZWVRPS0VOVFlQRQotICAgLyogUHV0
IHRoZSB0b2tlbnMgaW50byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdEQiBhbmQgb3RoZXIg
ZGVidWdnZXJzCi0gICAgICBrbm93IGFib3V0IHRoZW0uICAqLwotICAgZW51bSB5eXRva2VudHlw
ZSB7Ci0gICAgIElOVkFSSUFOVCA9IDI1OCwKLSAgICAgSElHSF9QUkVDSVNJT04gPSAyNTksCi0g
ICAgIE1FRElVTV9QUkVDSVNJT04gPSAyNjAsCi0gICAgIExPV19QUkVDSVNJT04gPSAyNjEsCi0g
ICAgIFBSRUNJU0lPTiA9IDI2MiwKLSAgICAgQVRUUklCVVRFID0gMjYzLAotICAgICBDT05TVF9R
VUFMID0gMjY0LAotICAgICBCT09MX1RZUEUgPSAyNjUsCi0gICAgIEZMT0FUX1RZUEUgPSAyNjYs
Ci0gICAgIElOVF9UWVBFID0gMjY3LAotICAgICBCUkVBSyA9IDI2OCwKLSAgICAgQ09OVElOVUUg
PSAyNjksCi0gICAgIERPID0gMjcwLAotICAgICBFTFNFID0gMjcxLAotICAgICBGT1IgPSAyNzIs
Ci0gICAgIElGID0gMjczLAotICAgICBESVNDQVJEID0gMjc0LAotICAgICBSRVRVUk4gPSAyNzUs
Ci0gICAgIEJWRUMyID0gMjc2LAotICAgICBCVkVDMyA9IDI3NywKLSAgICAgQlZFQzQgPSAyNzgs
Ci0gICAgIElWRUMyID0gMjc5LAotICAgICBJVkVDMyA9IDI4MCwKLSAgICAgSVZFQzQgPSAyODEs
Ci0gICAgIFZFQzIgPSAyODIsCi0gICAgIFZFQzMgPSAyODMsCi0gICAgIFZFQzQgPSAyODQsCi0g
ICAgIE1BVFJJWDIgPSAyODUsCi0gICAgIE1BVFJJWDMgPSAyODYsCi0gICAgIE1BVFJJWDQgPSAy
ODcsCi0gICAgIElOX1FVQUwgPSAyODgsCi0gICAgIE9VVF9RVUFMID0gMjg5LAotICAgICBJTk9V
VF9RVUFMID0gMjkwLAotICAgICBVTklGT1JNID0gMjkxLAotICAgICBWQVJZSU5HID0gMjkyLAot
ICAgICBTVFJVQ1QgPSAyOTMsCi0gICAgIFZPSURfVFlQRSA9IDI5NCwKLSAgICAgV0hJTEUgPSAy
OTUsCi0gICAgIFNBTVBMRVIyRCA9IDI5NiwKLSAgICAgU0FNUExFUkNVQkUgPSAyOTcsCi0gICAg
IFNBTVBMRVJfRVhURVJOQUxfT0VTID0gMjk4LAotICAgICBTQU1QTEVSMkRSRUNUID0gMjk5LAot
ICAgICBJREVOVElGSUVSID0gMzAwLAotICAgICBUWVBFX05BTUUgPSAzMDEsCi0gICAgIEZMT0FU
Q09OU1RBTlQgPSAzMDIsCi0gICAgIElOVENPTlNUQU5UID0gMzAzLAotICAgICBCT09MQ09OU1RB
TlQgPSAzMDQsCi0gICAgIExFRlRfT1AgPSAzMDUsCi0gICAgIFJJR0hUX09QID0gMzA2LAotICAg
ICBJTkNfT1AgPSAzMDcsCi0gICAgIERFQ19PUCA9IDMwOCwKLSAgICAgTEVfT1AgPSAzMDksCi0g
ICAgIEdFX09QID0gMzEwLAotICAgICBFUV9PUCA9IDMxMSwKLSAgICAgTkVfT1AgPSAzMTIsCi0g
ICAgIEFORF9PUCA9IDMxMywKLSAgICAgT1JfT1AgPSAzMTQsCi0gICAgIFhPUl9PUCA9IDMxNSwK
LSAgICAgTVVMX0FTU0lHTiA9IDMxNiwKLSAgICAgRElWX0FTU0lHTiA9IDMxNywKLSAgICAgQURE
X0FTU0lHTiA9IDMxOCwKLSAgICAgTU9EX0FTU0lHTiA9IDMxOSwKLSAgICAgTEVGVF9BU1NJR04g
PSAzMjAsCi0gICAgIFJJR0hUX0FTU0lHTiA9IDMyMSwKLSAgICAgQU5EX0FTU0lHTiA9IDMyMiwK
LSAgICAgWE9SX0FTU0lHTiA9IDMyMywKLSAgICAgT1JfQVNTSUdOID0gMzI0LAotICAgICBTVUJf
QVNTSUdOID0gMzI1LAotICAgICBMRUZUX1BBUkVOID0gMzI2LAotICAgICBSSUdIVF9QQVJFTiA9
IDMyNywKLSAgICAgTEVGVF9CUkFDS0VUID0gMzI4LAotICAgICBSSUdIVF9CUkFDS0VUID0gMzI5
LAotICAgICBMRUZUX0JSQUNFID0gMzMwLAotICAgICBSSUdIVF9CUkFDRSA9IDMzMSwKLSAgICAg
RE9UID0gMzMyLAotICAgICBDT01NQSA9IDMzMywKLSAgICAgQ09MT04gPSAzMzQsCi0gICAgIEVR
VUFMID0gMzM1LAotICAgICBTRU1JQ09MT04gPSAzMzYsCi0gICAgIEJBTkcgPSAzMzcsCi0gICAg
IERBU0ggPSAzMzgsCi0gICAgIFRJTERFID0gMzM5LAotICAgICBQTFVTID0gMzQwLAotICAgICBT
VEFSID0gMzQxLAotICAgICBTTEFTSCA9IDM0MiwKLSAgICAgUEVSQ0VOVCA9IDM0MywKLSAgICAg
TEVGVF9BTkdMRSA9IDM0NCwKLSAgICAgUklHSFRfQU5HTEUgPSAzNDUsCi0gICAgIFZFUlRJQ0FM
X0JBUiA9IDM0NiwKLSAgICAgQ0FSRVQgPSAzNDcsCi0gICAgIEFNUEVSU0FORCA9IDM0OCwKLSAg
ICAgUVVFU1RJT04gPSAzNDkKLSAgIH07Ci0jZW5kaWYKLQotCi0jaWYgISBkZWZpbmVkIFlZU1RZ
UEUgJiYgISBkZWZpbmVkIFlZU1RZUEVfSVNfREVDTEFSRUQKLXR5cGVkZWYgdW5pb24gWVlTVFlQ
RQotewotCi0KLSAgICBzdHJ1Y3QgewotICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAgICBUU3Ry
aW5nICpzdHJpbmc7Ci0gICAgICAgICAgICBmbG9hdCBmOwotICAgICAgICAgICAgaW50IGk7Ci0g
ICAgICAgICAgICBib29sIGI7Ci0gICAgICAgIH07Ci0gICAgICAgIFRTeW1ib2wqIHN5bWJvbDsK
LSAgICB9IGxleDsKLSAgICBzdHJ1Y3QgewotICAgICAgICBUT3BlcmF0b3Igb3A7Ci0gICAgICAg
IHVuaW9uIHsKLSAgICAgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOwotICAgICAgICAg
ICAgVEludGVybU5vZGVQYWlyIG5vZGVQYWlyOwotICAgICAgICAgICAgVEludGVybVR5cGVkKiBp
bnRlcm1UeXBlZE5vZGU7Ci0gICAgICAgICAgICBUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dy
ZWdhdGU7Ci0gICAgICAgIH07Ci0gICAgICAgIHVuaW9uIHsKLSAgICAgICAgICAgIFRQdWJsaWNU
eXBlIHR5cGU7Ci0gICAgICAgICAgICBUUHJlY2lzaW9uIHByZWNpc2lvbjsKLSAgICAgICAgICAg
IFRRdWFsaWZpZXIgcXVhbGlmaWVyOwotICAgICAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlvbjsK
LSAgICAgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW07Ci0gICAgICAgICAgICBURmllbGQqIGZpZWxk
OwotICAgICAgICAgICAgVEZpZWxkTGlzdCogZmllbGRMaXN0OwotICAgICAgICB9OwotICAgIH0g
aW50ZXJtOwotCi0KLQotfSBZWVNUWVBFOwotIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEK
LSMgZGVmaW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJh
d24gKi8KLSMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQotI2VuZGlmCi0KLSNpZiAhIGRl
ZmluZWQgWVlMVFlQRSAmJiAhIGRlZmluZWQgWVlMVFlQRV9JU19ERUNMQVJFRAotdHlwZWRlZiBz
dHJ1Y3QgWVlMVFlQRQotewotICBpbnQgZmlyc3RfbGluZTsKLSAgaW50IGZpcnN0X2NvbHVtbjsK
LSAgaW50IGxhc3RfbGluZTsKLSAgaW50IGxhc3RfY29sdW1uOwotfSBZWUxUWVBFOwotIyBkZWZp
bmUgeXlsdHlwZSBZWUxUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLwot
IyBkZWZpbmUgWVlMVFlQRV9JU19ERUNMQVJFRCAxCi0jIGRlZmluZSBZWUxUWVBFX0lTX1RSSVZJ
QUwgMQotI2VuZGlmCi0KLQotI2lmZGVmIFlZUEFSU0VfUEFSQU0KLSNpZiBkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKLWludCB5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BB
UkFNKTsKLSNlbHNlCi1pbnQgeXlwYXJzZSAoKTsKLSNlbmRpZgotI2Vsc2UgLyogISBZWVBBUlNF
X1BBUkFNICovCi0jaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCi1p
bnQgeXlwYXJzZSAoVFBhcnNlQ29udGV4dCogY29udGV4dCk7Ci0jZWxzZQotaW50IHl5cGFyc2Ug
KCk7Ci0jZW5kaWYKLSNlbmRpZiAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KLQotI2VuZGlmIC8qICFZ
WV9ZWV9HTFNMQU5HX1RBQl9IX0lOQ0xVREVEICAqLwotCi0vKiBDb3B5IHRoZSBzZWNvbmQgcGFy
dCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCi0KLQotZXh0ZXJuIGludCB5eWxleChZWVNUWVBF
KiB5eWx2YWwsIFlZTFRZUEUqIHl5bGxvYywgdm9pZCogeXlzY2FubmVyKTsKLWV4dGVybiB2b2lk
IHl5ZXJyb3IoWVlMVFlQRSogeXlsbG9jLCBUUGFyc2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBj
aGFyKiByZWFzb24pOwotCi0jZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJocywgTikg
ICAgICAgICAgICAgICAgICAgICAgXAotICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmIChZWUlEKE4pKSB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIChDdXJyZW50KS5m
aXJzdF9maWxlID0gWVlSSFNMT0MoUmhzLCAxKS5maXJzdF9maWxlOyAgXAotICAgICAgICAoQ3Vy
cmVudCkuZmlyc3RfbGluZSA9IFlZUkhTTE9DKFJocywgMSkuZmlyc3RfbGluZTsgIFwKLSAgICAg
ICAgKEN1cnJlbnQpLmxhc3RfZmlsZSA9IFlZUkhTTE9DKFJocywgTikubGFzdF9maWxlOyAgICBc
Ci0gICAgICAgIChDdXJyZW50KS5sYXN0X2xpbmUgPSBZWVJIU0xPQyhSaHMsIE4pLmxhc3RfbGlu
ZTsgICAgXAotICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIChDdXJyZW50KS5maXJzdF9maWxlID0gWVlS
SFNMT0MoUmhzLCAwKS5sYXN0X2ZpbGU7ICAgXAotICAgICAgICAoQ3VycmVudCkuZmlyc3RfbGlu
ZSA9IFlZUkhTTE9DKFJocywgMCkubGFzdF9saW5lOyAgIFwKLSAgICAgICAgKEN1cnJlbnQpLmxh
c3RfZmlsZSA9IFlZUkhTTE9DKFJocywgMCkubGFzdF9maWxlOyAgICBcCi0gICAgICAgIChDdXJy
ZW50KS5sYXN0X2xpbmUgPSBZWVJIU0xPQyhSaHMsIDApLmxhc3RfbGluZTsgICAgXAotICAgICAg
fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBWRVJURVhfT05MWShTLCBMKSB7ICBcCi0gICAgaWYg
KGNvbnRleHQtPnNoYWRlclR5cGUgIT0gU0hfVkVSVEVYX1NIQURFUikgeyAgXAotICAgICAgICBj
b250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXggc2hhZGVycyBvbmx5ICIsIFMp
OyAgXAotICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCi0gICAgfSAgXAotfQotCi0jZGVm
aW5lIEZSQUdfT05MWShTLCBMKSB7ICBcCi0gICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgIT0g
U0hfRlJBR01FTlRfU0hBREVSKSB7ICBcCi0gICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3Vw
cG9ydGVkIGluIGZyYWdtZW50IHNoYWRlcnMgb25seSAiLCBTKTsgIFwKLSAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOyAgXAotICAgIH0gIFwKLX0KLQotCi0KLSNpZmRlZiBzaG9ydAotIyB1bmRl
ZiBzaG9ydAotI2VuZGlmCi0KLSNpZmRlZiBZWVRZUEVfVUlOVDgKLXR5cGVkZWYgWVlUWVBFX1VJ
TlQ4IHl5dHlwZV91aW50ODsKLSNlbHNlCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgeXl0eXBlX3Vp
bnQ4OwotI2VuZGlmCi0KLSNpZmRlZiBZWVRZUEVfSU5UOAotdHlwZWRlZiBZWVRZUEVfSU5UOCB5
eXR5cGVfaW50ODsKLSNlbGlmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZV
TkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikK
LXR5cGVkZWYgc2lnbmVkIGNoYXIgeXl0eXBlX2ludDg7Ci0jZWxzZQotdHlwZWRlZiBzaG9ydCBp
bnQgeXl0eXBlX2ludDg7Ci0jZW5kaWYKLQotI2lmZGVmIFlZVFlQRV9VSU5UMTYKLXR5cGVkZWYg
WVlUWVBFX1VJTlQxNiB5eXR5cGVfdWludDE2OwotI2Vsc2UKLXR5cGVkZWYgdW5zaWduZWQgc2hv
cnQgaW50IHl5dHlwZV91aW50MTY7Ci0jZW5kaWYKLQotI2lmZGVmIFlZVFlQRV9JTlQxNgotdHlw
ZWRlZiBZWVRZUEVfSU5UMTYgeXl0eXBlX2ludDE2OwotI2Vsc2UKLXR5cGVkZWYgc2hvcnQgaW50
IHl5dHlwZV9pbnQxNjsKLSNlbmRpZgotCi0jaWZuZGVmIFlZU0laRV9UCi0jIGlmZGVmIF9fU0la
RV9UWVBFX18KLSMgIGRlZmluZSBZWVNJWkVfVCBfX1NJWkVfVFlQRV9fCi0jIGVsaWYgZGVmaW5l
ZCBzaXplX3QKLSMgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKLSMgZWxpZiAhIGRlZmluZWQgWVlT
SVpFX1QgJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAg
ICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotIyAgaW5jbHVk
ZSA8c3RkZGVmLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgIGRlZmlu
ZSBZWVNJWkVfVCBzaXplX3QKLSMgZWxzZQotIyAgZGVmaW5lIFlZU0laRV9UIHVuc2lnbmVkIGlu
dAotIyBlbmRpZgotI2VuZGlmCi0KLSNkZWZpbmUgWVlTSVpFX01BWElNVU0gKChZWVNJWkVfVCkg
LTEpCi0KLSNpZm5kZWYgWVlfCi0jIGlmIGRlZmluZWQgWVlFTkFCTEVfTkxTICYmIFlZRU5BQkxF
X05MUwotIyAgaWYgRU5BQkxFX05MUwotIyAgIGluY2x1ZGUgPGxpYmludGwuaD4gLyogSU5GUklO
R0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgIGRlZmluZSBZWV8oTXNnaWQpIGRnZXR0ZXh0
ICgiYmlzb24tcnVudGltZSIsIE1zZ2lkKQotIyAgZW5kaWYKLSMgZW5kaWYKLSMgaWZuZGVmIFlZ
XwotIyAgZGVmaW5lIFlZXyhNc2dpZCkgTXNnaWQKLSMgZW5kaWYKLSNlbmRpZgotCi0vKiBTdXBw
cmVzcyB1bnVzZWQtdmFyaWFibGUgd2FybmluZ3MgYnkgInVzaW5nIiBFLiAgKi8KLSNpZiAhIGRl
ZmluZWQgbGludCB8fCBkZWZpbmVkIF9fR05VQ19fCi0jIGRlZmluZSBZWVVTRShFKSAoKHZvaWQp
IChFKSkKLSNlbHNlCi0jIGRlZmluZSBZWVVTRShFKSAvKiBlbXB0eSAqLwotI2VuZGlmCi0KLS8q
IElkZW50aXR5IGZ1bmN0aW9uLCB1c2VkIHRvIHN1cHByZXNzIHdhcm5pbmdzIGFib3V0IGNvbnN0
YW50IGNvbmRpdGlvbnMuICAqLwotI2lmbmRlZiBsaW50Ci0jIGRlZmluZSBZWUlEKE4pIChOKQot
I2Vsc2UKLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAot
ICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMg
aW50Ci1ZWUlEIChpbnQgeXlpKQotI2Vsc2UKLXN0YXRpYyBpbnQKLVlZSUQgKHl5aSkKLSAgICBp
bnQgeXlpOwotI2VuZGlmCi17Ci0gIHJldHVybiB5eWk7Ci19Ci0jZW5kaWYKLQotI2lmICEgZGVm
aW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRQotCi0vKiBUaGUgcGFyc2VyIGludm9r
ZXMgYWxsb2NhIG9yIG1hbGxvYzsgZGVmaW5lIHRoZSBuZWNlc3Nhcnkgc3ltYm9scy4gICovCi0K
LSMgaWZkZWYgWVlTVEFDS19VU0VfQUxMT0NBCi0jICBpZiBZWVNUQUNLX1VTRV9BTExPQ0EKLSMg
ICBpZmRlZiBfX0dOVUNfXwotIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBfX2J1aWx0aW5fYWxs
b2NhCi0jICAgZWxpZiBkZWZpbmVkIF9fQlVJTFRJTl9WQV9BUkdfSU5DUgotIyAgICBpbmNsdWRl
IDxhbGxvY2EuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgIGVsaWYg
ZGVmaW5lZCBfQUlYCi0jICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYWxsb2NhCi0jICAgZWxp
ZiBkZWZpbmVkIF9NU0NfVkVSCi0jICAgIGluY2x1ZGUgPG1hbGxvYy5oPiAvKiBJTkZSSU5HRVMg
T04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgIGRlZmluZSBhbGxvY2EgX2FsbG9jYQotIyAgIGVs
c2UKLSMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgYWxsb2NhCi0jICAgIGlmICEgZGVmaW5lZCBf
QUxMT0NBX0ggJiYgISBkZWZpbmVkIEVYSVRfU1VDQ0VTUyAmJiAoZGVmaW5lZCBfX1NURENfXyB8
fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8
IGRlZmluZWQgX01TQ19WRVIpCi0jICAgICBpbmNsdWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VT
IE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotICAgICAgLyogVXNlIEVYSVRfU1VDQ0VTUyBhcyBhIHdp
dG5lc3MgZm9yIHN0ZGxpYi5oLiAgKi8KLSMgICAgIGlmbmRlZiBFWElUX1NVQ0NFU1MKLSMgICAg
ICBkZWZpbmUgRVhJVF9TVUNDRVNTIDAKLSMgICAgIGVuZGlmCi0jICAgIGVuZGlmCi0jICAgZW5k
aWYKLSMgIGVuZGlmCi0jIGVuZGlmCi0KLSMgaWZkZWYgWVlTVEFDS19BTExPQwotICAgLyogUGFj
aWZ5IEdDQydzIGBlbXB0eSBpZi1ib2R5JyB3YXJuaW5nLiAgKi8KLSMgIGRlZmluZSBZWVNUQUNL
X0ZSRUUoUHRyKSBkbyB7IC8qIGVtcHR5ICovOyB9IHdoaWxlIChZWUlEICgwKSkKLSMgIGlmbmRl
ZiBZWVNUQUNLX0FMTE9DX01BWElNVU0KLSAgICAvKiBUaGUgT1MgbWlnaHQgZ3VhcmFudGVlIG9u
bHkgb25lIGd1YXJkIHBhZ2UgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2ssCi0gICAgICAgYW5k
IGEgcGFnZSBzaXplIGNhbiBiZSBhcyBzbWFsbCBhcyA0MDk2IGJ5dGVzLiAgU28gd2UgY2Fubm90
IHNhZmVseQotICAgICAgIGludm9rZSBhbGxvY2EgKE4pIGlmIE4gZXhjZWVkcyA0MDk2LiAgVXNl
IGEgc2xpZ2h0bHkgc21hbGxlciBudW1iZXIKLSAgICAgICB0byBhbGxvdyBmb3IgYSBmZXcgY29t
cGlsZXItYWxsb2NhdGVkIHRlbXBvcmFyeSBzdGFjayBzbG90cy4gICovCi0jICAgZGVmaW5lIFlZ
U1RBQ0tfQUxMT0NfTUFYSU1VTSA0MDMyIC8qIHJlYXNvbmFibGUgY2lyY2EgMjAwNiAqLwotIyAg
ZW5kaWYKLSMgZWxzZQotIyAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgWVlNQUxMT0MKLSMgIGRlZmlu
ZSBZWVNUQUNLX0ZSRUUgWVlGUkVFCi0jICBpZm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNCi0j
ICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSBZWVNJWkVfTUFYSU1VTQotIyAgZW5kaWYK
LSMgIGlmIChkZWZpbmVkIF9fY3BsdXNwbHVzICYmICEgZGVmaW5lZCBFWElUX1NVQ0NFU1MgXAot
ICAgICAgICYmICEgKChkZWZpbmVkIFlZTUFMTE9DIHx8IGRlZmluZWQgbWFsbG9jKSBcCi0JICAg
ICAmJiAoZGVmaW5lZCBZWUZSRUUgfHwgZGVmaW5lZCBmcmVlKSkpCi0jICAgaW5jbHVkZSA8c3Rk
bGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBpZm5kZWYgRVhJ
VF9TVUNDRVNTCi0jICAgIGRlZmluZSBFWElUX1NVQ0NFU1MgMAotIyAgIGVuZGlmCi0jICBlbmRp
ZgotIyAgaWZuZGVmIFlZTUFMTE9DCi0jICAgZGVmaW5lIFlZTUFMTE9DIG1hbGxvYwotIyAgIGlm
ICEgZGVmaW5lZCBtYWxsb2MgJiYgISBkZWZpbmVkIEVYSVRfU1VDQ0VTUyAmJiAoZGVmaW5lZCBf
X1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3Bs
dXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi12b2lkICptYWxsb2MgKFlZU0laRV9UKTsgLyog
SU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgIGVuZGlmCi0jICBlbmRpZgotIyAg
aWZuZGVmIFlZRlJFRQotIyAgIGRlZmluZSBZWUZSRUUgZnJlZQotIyAgIGlmICEgZGVmaW5lZCBm
cmVlICYmICEgZGVmaW5lZCBFWElUX1NVQ0NFU1MgJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVm
aW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZp
bmVkIF9NU0NfVkVSKQotdm9pZCBmcmVlICh2b2lkICopOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBO
QU1FIFNQQUNFICovCi0jICAgZW5kaWYKLSMgIGVuZGlmCi0jIGVuZGlmCi0jZW5kaWYgLyogISBk
ZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFICovCi0KLQotI2lmICghIGRlZmlu
ZWQgeXlvdmVyZmxvdyBcCi0gICAgICYmICghIGRlZmluZWQgX19jcGx1c3BsdXMgXAotCSB8fCAo
ZGVmaW5lZCBZWUxUWVBFX0lTX1RSSVZJQUwgJiYgWVlMVFlQRV9JU19UUklWSUFMIFwKLQkgICAg
ICYmIGRlZmluZWQgWVlTVFlQRV9JU19UUklWSUFMICYmIFlZU1RZUEVfSVNfVFJJVklBTCkpKQot
Ci0vKiBBIHR5cGUgdGhhdCBpcyBwcm9wZXJseSBhbGlnbmVkIGZvciBhbnkgc3RhY2sgbWVtYmVy
LiAgKi8KLXVuaW9uIHl5YWxsb2MKLXsKLSAgeXl0eXBlX2ludDE2IHl5c3NfYWxsb2M7Ci0gIFlZ
U1RZUEUgeXl2c19hbGxvYzsKLSAgWVlMVFlQRSB5eWxzX2FsbG9jOwotfTsKLQotLyogVGhlIHNp
emUgb2YgdGhlIG1heGltdW0gZ2FwIGJldHdlZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRoZSBu
ZXh0LiAgKi8KLSMgZGVmaW5lIFlZU1RBQ0tfR0FQX01BWElNVU0gKHNpemVvZiAodW5pb24geXlh
bGxvYykgLSAxKQotCi0vKiBUaGUgc2l6ZSBvZiBhbiBhcnJheSBsYXJnZSB0byBlbm91Z2ggdG8g
aG9sZCBhbGwgc3RhY2tzLCBlYWNoIHdpdGgKLSAgIE4gZWxlbWVudHMuICAqLwotIyBkZWZpbmUg
WVlTVEFDS19CWVRFUyhOKSBcCi0gICAgICgoTikgKiAoc2l6ZW9mICh5eXR5cGVfaW50MTYpICsg
c2l6ZW9mIChZWVNUWVBFKSArIHNpemVvZiAoWVlMVFlQRSkpIFwKLSAgICAgICsgMiAqIFlZU1RB
Q0tfR0FQX01BWElNVU0pCi0KLSMgZGVmaW5lIFlZQ09QWV9ORUVERUQgMQotCi0vKiBSZWxvY2F0
ZSBTVEFDSyBmcm9tIGl0cyBvbGQgbG9jYXRpb24gdG8gdGhlIG5ldyBvbmUuICBUaGUKLSAgIGxv
Y2FsIHZhcmlhYmxlcyBZWVNJWkUgYW5kIFlZU1RBQ0tTSVpFIGdpdmUgdGhlIG9sZCBhbmQgbmV3
IG51bWJlciBvZgotICAgZWxlbWVudHMgaW4gdGhlIHN0YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhl
IG5ldyBsb2NhdGlvbiBvZiB0aGUKLSAgIHN0YWNrLiAgQWR2YW5jZSBZWVBUUiB0byBhIHByb3Bl
cmx5IGFsaWduZWQgbG9jYXRpb24gZm9yIHRoZSBuZXh0Ci0gICBzdGFjay4gICovCi0jIGRlZmlu
ZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrX2FsbG9jLCBTdGFjaykJCQkJXAotICAgIGRvCQkJCQkJ
CQkJXAotICAgICAgewkJCQkJCQkJCVwKLQlZWVNJWkVfVCB5eW5ld2J5dGVzOwkJCQkJCVwKLQlZ
WUNPUFkgKCZ5eXB0ci0+U3RhY2tfYWxsb2MsIFN0YWNrLCB5eXNpemUpOwkJCVwKLQlTdGFjayA9
ICZ5eXB0ci0+U3RhY2tfYWxsb2M7CQkJCQlcCi0JeXluZXdieXRlcyA9IHl5c3RhY2tzaXplICog
c2l6ZW9mICgqU3RhY2spICsgWVlTVEFDS19HQVBfTUFYSU1VTTsgXAotCXl5cHRyICs9IHl5bmV3
Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7CQkJCVwKLSAgICAgIH0JCQkJCQkJCQlcCi0gICAgd2hp
bGUgKFlZSUQgKDApKQotCi0jZW5kaWYKLQotI2lmIGRlZmluZWQgWVlDT1BZX05FRURFRCAmJiBZ
WUNPUFlfTkVFREVECi0vKiBDb3B5IENPVU5UIG9iamVjdHMgZnJvbSBTUkMgdG8gRFNULiAgVGhl
IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZG8KLSAgIG5vdCBvdmVybGFwLiAgKi8KLSMgaWZuZGVm
IFlZQ09QWQotIyAgaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiAxIDwgX19HTlVDX18KLSMgICBkZWZp
bmUgWVlDT1BZKERzdCwgU3JjLCBDb3VudCkgXAotICAgICAgX19idWlsdGluX21lbWNweSAoRHN0
LCBTcmMsIChDb3VudCkgKiBzaXplb2YgKCooU3JjKSkpCi0jICBlbHNlCi0jICAgZGVmaW5lIFlZ
Q09QWShEc3QsIFNyYywgQ291bnQpICAgICAgICAgICAgICBcCi0gICAgICBkbyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgWVlTSVpFX1QgeXlpOyAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgZm9yICh5eWkgPSAwOyB5eWkgPCAoQ291bnQp
OyB5eWkrKykgICBcCi0gICAgICAgICAgICAoRHN0KVt5eWldID0gKFNyYylbeXlpXTsgICAgICAg
ICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICB3aGlsZSAoWVlJRCAoMCkpCi0jICBlbmRpZgotIyBlbmRpZgotI2VuZGlmIC8qICFZ
WUNPUFlfTkVFREVEICovCi0KLS8qIFlZRklOQUwgLS0gU3RhdGUgbnVtYmVyIG9mIHRoZSB0ZXJt
aW5hdGlvbiBzdGF0ZS4gICovCi0jZGVmaW5lIFlZRklOQUwgIDc0Ci0vKiBZWUxBU1QgLS0gTGFz
dCBpbmRleCBpbiBZWVRBQkxFLiAgKi8KLSNkZWZpbmUgWVlMQVNUICAgMTQ5MAotCi0vKiBZWU5U
T0tFTlMgLS0gTnVtYmVyIG9mIHRlcm1pbmFscy4gICovCi0jZGVmaW5lIFlZTlRPS0VOUyAgOTUK
LS8qIFlZTk5UUyAtLSBOdW1iZXIgb2Ygbm9udGVybWluYWxzLiAgKi8KLSNkZWZpbmUgWVlOTlRT
ICA4NAotLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHJ1bGVzLiAgKi8KLSNkZWZpbmUgWVlOUlVM
RVMgIDIwMgotLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHN0YXRlcy4gICovCi0jZGVmaW5lIFlZ
TlNUQVRFUyAgMzA3Ci0KLS8qIFlZVFJBTlNMQVRFKFlZTEVYKSAtLSBCaXNvbiBzeW1ib2wgbnVt
YmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLwotI2RlZmluZSBZWVVOREVGVE9LICAyCi0j
ZGVmaW5lIFlZTUFYVVRPSyAgIDM0OQotCi0jZGVmaW5lIFlZVFJBTlNMQVRFKFlZWCkJCQkJCQlc
Ci0gICgodW5zaWduZWQgaW50KSAoWVlYKSA8PSBZWU1BWFVUT0sgPyB5eXRyYW5zbGF0ZVtZWVhd
IDogWVlVTkRFRlRPSykKLQotLyogWVlUUkFOU0xBVEVbWVlMRVhdIC0tIEJpc29uIHN5bWJvbCBu
dW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3Vp
bnQ4IHl5dHJhbnNsYXRlW10gPQotewotICAgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwK
LSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAot
ICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0g
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAz
LCAgICAgNCwKLSAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAg
IDExLCAgICAxMiwgICAgMTMsICAgIDE0LAotICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgs
ICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsCi0gICAgICAyNSwgICAg
MjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAz
NCwKLSAgICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAg
ICA0MiwgICAgNDMsICAgIDQ0LAotICAgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5
LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsCi0gICAgICA1NSwgICAgNTYsICAg
IDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwKLSAg
ICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcxLCAgICA3Miwg
ICAgNzMsICAgIDc0LAotICAgICAgNzUsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4
MCwgICAgODEsICAgIDgyLCAgICA4MywgICAgODQsCi0gICAgICA4NSwgICAgODYsICAgIDg3LCAg
ICA4OCwgICAgODksICAgIDkwLCAgICA5MSwgICAgOTIsICAgIDkzLCAgICA5NAotfTsKLQotI2lm
IFlZREVCVUcKLS8qIFlZUFJIU1tZWU5dIC0tIEluZGV4IG9mIHRoZSBmaXJzdCBSSFMgc3ltYm9s
IG9mIHJ1bGUgbnVtYmVyIFlZTiBpbgotICAgWVlSSFMuICAqLwotc3RhdGljIGNvbnN0IHl5dHlw
ZV91aW50MTYgeXlwcmhzW10gPQotewotICAgICAgIDAsICAgICAwLCAgICAgMywgICAgIDUsICAg
ICA3LCAgICAgOSwgICAgMTEsICAgIDEzLCAgICAxNSwgICAgMTcsCi0gICAgICAyMSwgICAgMjMs
ICAgIDI4LCAgICAzMCwgICAgMzQsICAgIDM3LCAgICA0MCwgICAgNDIsICAgIDQ0LCAgICA0NiwK
LSAgICAgIDUwLCAgICA1MywgICAgNTYsICAgIDU5LCAgICA2MSwgICAgNjQsICAgIDY4LCAgICA3
MSwgICAgNzMsICAgIDc1LAotICAgICAgNzcsICAgIDgwLCAgICA4MywgICAgODYsICAgIDg4LCAg
ICA5MCwgICAgOTIsICAgIDk0LCAgICA5OCwgICAxMDIsCi0gICAgIDEwNCwgICAxMDgsICAgMTEy
LCAgIDExNCwgICAxMTYsICAgMTIwLCAgIDEyNCwgICAxMjgsICAgMTMyLCAgIDEzNCwKLSAgICAg
MTM4LCAgIDE0MiwgICAxNDQsICAgMTQ2LCAgIDE0OCwgICAxNTAsICAgMTU0LCAgIDE1NiwgICAx
NjAsICAgMTYyLAotICAgICAxNjYsICAgMTY4LCAgIDE3NCwgICAxNzYsICAgMTgwLCAgIDE4Miwg
ICAxODQsICAgMTg2LCAgIDE4OCwgICAxOTAsCi0gICAgIDE5MiwgICAxOTYsICAgMTk4LCAgIDIw
MSwgICAyMDQsICAgMjA5LCAgIDIxMiwgICAyMTQsICAgMjE2LCAgIDIxOSwKLSAgICAgMjIzLCAg
IDIyNywgICAyMzAsICAgMjM2LCAgIDI0MCwgICAyNDMsICAgMjQ3LCAgIDI1MCwgICAyNTEsICAg
MjUzLAotICAgICAyNTUsICAgMjU3LCAgIDI1OSwgICAyNjEsICAgMjY1LCAgIDI3MSwgICAyNzgs
ICAgMjg0LCAgIDI4NiwgICAyODksCi0gICAgIDI5NCwgICAzMDAsICAgMzA1LCAgIDMwOCwgICAz
MTAsICAgMzEzLCAgIDMxNSwgICAzMTcsICAgMzE5LCAgIDMyMiwKLSAgICAgMzI0LCAgIDMyNiwg
ICAzMjksICAgMzMxLCAgIDMzMywgICAzMzUsICAgMzM3LCAgIDM0MiwgICAzNDQsICAgMzQ2LAot
ICAgICAzNDgsICAgMzUwLCAgIDM1MiwgICAzNTQsICAgMzU2LCAgIDM1OCwgICAzNjAsICAgMzYy
LCAgIDM2NCwgICAzNjYsCi0gICAgIDM2OCwgICAzNzAsICAgMzcyLCAgIDM3NCwgICAzNzYsICAg
Mzc4LCAgIDM4MCwgICAzODIsICAgMzg0LCAgIDM4NiwKLSAgICAgMzg3LCAgIDM5NCwgICAzOTUs
ICAgNDAxLCAgIDQwMywgICA0MDYsICAgNDEwLCAgIDQxMiwgICA0MTYsICAgNDE4LAotICAgICA0
MjMsICAgNDI1LCAgIDQyNywgICA0MjksICAgNDMxLCAgIDQzMywgICA0MzUsICAgNDM3LCAgIDQz
OSwgICA0NDEsCi0gICAgIDQ0NCwgICA0NDUsICAgNDQ2LCAgIDQ1MiwgICA0NTQsICAgNDU2LCAg
IDQ1NywgICA0NjAsICAgNDYxLCAgIDQ2NCwKLSAgICAgNDY3LCAgIDQ3MSwgICA0NzMsICAgNDc2
LCAgIDQ3OCwgICA0ODEsICAgNDg3LCAgIDQ5MSwgICA0OTMsICAgNDk1LAotICAgICA1MDAsICAg
NTAxLCAgIDUwOCwgICA1MDksICAgNTE4LCAgIDUxOSwgICA1MjcsICAgNTI5LCAgIDUzMSwgICA1
MzMsCi0gICAgIDUzNCwgICA1MzcsICAgNTQxLCAgIDU0NCwgICA1NDcsICAgNTUwLCAgIDU1NCwg
ICA1NTcsICAgNTU5LCAgIDU2MiwKLSAgICAgNTY0LCAgIDU2NiwgICA1NjcKLX07Ci0KLS8qIFlZ
UkhTIC0tIEEgYC0xJy1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgcnVsZXMnIFJIUy4gICovCi1zdGF0
aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cmhzW10gPQotewotICAgICAxNzUsICAgICAwLCAgICAt
MSwgICAgNDUsICAgIC0xLCAgICA0NiwgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgOTcsCi0gICAg
ICAtMSwgICAgNDgsICAgIC0xLCAgICA0NywgICAgLTEsICAgIDQ5LCAgICAtMSwgICAgNzEsICAg
MTI0LCAgICA3MiwKLSAgICAgIC0xLCAgICA5OCwgICAgLTEsICAgIDk5LCAgICA3MywgICAxMDAs
ICAgIDc0LCAgICAtMSwgICAxMDEsICAgIC0xLAotICAgICAgOTksICAgIDc3LCAgICA5NiwgICAg
LTEsICAgIDk5LCAgICA1MiwgICAgLTEsICAgIDk5LCAgICA1MywgICAgLTEsCi0gICAgIDEyNCwg
ICAgLTEsICAgMTAyLCAgICAtMSwgICAxMDMsICAgIC0xLCAgICA5OSwgICAgNzcsICAgMTAzLCAg
ICAtMSwKLSAgICAgMTA1LCAgICA3MiwgICAgLTEsICAgMTA0LCAgICA3MiwgICAgLTEsICAgMTA2
LCAgICAzOSwgICAgLTEsICAgMTA2LAotICAgICAgLTEsICAgMTA2LCAgIDEyMiwgICAgLTEsICAg
MTA1LCAgICA3OCwgICAxMjIsICAgIC0xLCAgIDEwNywgICAgNzEsCi0gICAgICAtMSwgICAxNDIs
ICAgIC0xLCAgICA0NSwgICAgLTEsICAgIDk5LCAgICAtMSwgICAgNTIsICAgMTA4LCAgICAtMSwK
LSAgICAgIDUzLCAgIDEwOCwgICAgLTEsICAgMTA5LCAgIDEwOCwgICAgLTEsICAgIDg1LCAgICAt
MSwgICAgODMsICAgIC0xLAotICAgICAgODIsICAgIC0xLCAgIDEwOCwgICAgLTEsICAgMTEwLCAg
ICA4NiwgICAxMDgsICAgIC0xLCAgIDExMCwgICAgODcsCi0gICAgIDEwOCwgICAgLTEsICAgMTEw
LCAgICAtMSwgICAxMTEsICAgIDg1LCAgIDExMCwgICAgLTEsICAgMTExLCAgICA4MywKLSAgICAg
MTEwLCAgICAtMSwgICAxMTEsICAgIC0xLCAgIDExMiwgICAgLTEsICAgMTEzLCAgICA4OSwgICAx
MTIsICAgIC0xLAotICAgICAxMTMsICAgIDkwLCAgIDExMiwgICAgLTEsICAgMTEzLCAgICA1NCwg
ICAxMTIsICAgIC0xLCAgIDExMywgICAgNTUsCi0gICAgIDExMiwgICAgLTEsICAgMTEzLCAgICAt
MSwgICAxMTQsICAgIDU2LCAgIDExMywgICAgLTEsICAgMTE0LCAgICA1NywKLSAgICAgMTEzLCAg
ICAtMSwgICAxMTQsICAgIC0xLCAgIDExNSwgICAgLTEsICAgMTE2LCAgICAtMSwgICAxMTcsICAg
IC0xLAotICAgICAxMTgsICAgIDU4LCAgIDExNywgICAgLTEsICAgMTE4LCAgICAtMSwgICAxMTks
ICAgIDYwLCAgIDExOCwgICAgLTEsCi0gICAgIDExOSwgICAgLTEsICAgMTIwLCAgICA1OSwgICAx
MTksICAgIC0xLCAgIDEyMCwgICAgLTEsICAgMTIwLCAgICA5NCwKLSAgICAgMTI0LCAgICA3OSwg
ICAxMjIsICAgIC0xLCAgIDEyMSwgICAgLTEsICAgMTA4LCAgIDEyMywgICAxMjIsICAgIC0xLAot
ICAgICAgODAsICAgIC0xLCAgICA2MSwgICAgLTEsICAgIDYyLCAgICAtMSwgICAgNjMsICAgIC0x
LCAgICA3MCwgICAgLTEsCi0gICAgIDEyMiwgICAgLTEsICAgMTI0LCAgICA3OCwgICAxMjIsICAg
IC0xLCAgIDEyMSwgICAgLTEsICAgMTI3LCAgICA4MSwKLSAgICAgIC0xLCAgIDEzNSwgICAgODEs
ICAgIC0xLCAgICAgNywgICAxNDAsICAgMTQxLCAgICA4MSwgICAgLTEsICAgMTI4LAotICAgICAg
NzIsICAgIC0xLCAgIDEzMCwgICAgLTEsICAgMTI5LCAgICAtMSwgICAxMzAsICAgMTMyLCAgICAt
MSwgICAxMjksCi0gICAgICA3OCwgICAxMzIsICAgIC0xLCAgIDEzNywgICAgNDUsICAgIDcxLCAg
ICAtMSwgICAxMzksICAgIDk2LCAgICAtMSwKLSAgICAgMTM5LCAgICA5NiwgICAgNzMsICAgMTI1
LCAgICA3NCwgICAgLTEsICAgMTM4LCAgIDEzMywgICAxMzEsICAgIC0xLAotICAgICAxMzMsICAg
MTMxLCAgICAtMSwgICAxMzgsICAgMTMzLCAgIDEzNCwgICAgLTEsICAgMTMzLCAgIDEzNCwgICAg
LTEsCi0gICAgICAtMSwgICAgMzMsICAgIC0xLCAgICAzNCwgICAgLTEsICAgIDM1LCAgICAtMSwg
ICAxMzksICAgIC0xLCAgIDEzNiwKLSAgICAgIC0xLCAgIDEzNSwgICAgNzgsICAgIDk2LCAgICAt
MSwgICAxMzUsICAgIDc4LCAgICA5NiwgICAgNzMsICAgIDc0LAotICAgICAgLTEsICAgMTM1LCAg
ICA3OCwgICAgOTYsICAgIDczLCAgIDEyNSwgICAgNzQsICAgIC0xLCAgIDEzNSwgICAgNzgsCi0g
ICAgICA5NiwgICAgODAsICAgMTUwLCAgICAtMSwgICAxMzcsICAgIC0xLCAgIDEzNywgICAgOTYs
ICAgIC0xLCAgIDEzNywKLSAgICAgIDk2LCAgICA3MywgICAgNzQsICAgIC0xLCAgIDEzNywgICAg
OTYsICAgIDczLCAgIDEyNSwgICAgNzQsICAgIC0xLAotICAgICAxMzcsICAgIDk2LCAgICA4MCwg
ICAxNTAsICAgIC0xLCAgICAgMywgICAgNDUsICAgIC0xLCAgIDEzOSwgICAgLTEsCi0gICAgIDEz
OCwgICAxMzksICAgIC0xLCAgICAgOSwgICAgLTEsICAgICA4LCAgICAtMSwgICAgMzcsICAgIC0x
LCAgICAgMywKLSAgICAgIDM3LCAgICAtMSwgICAgMzYsICAgIC0xLCAgIDE0MSwgICAgLTEsICAg
MTQwLCAgIDE0MSwgICAgLTEsICAgICA0LAotICAgICAgLTEsICAgICA1LCAgICAtMSwgICAgIDYs
ICAgIC0xLCAgIDE0MiwgICAgLTEsICAgMTQyLCAgICA3MywgICAxMjUsCi0gICAgICA3NCwgICAg
LTEsICAgIDM5LCAgICAtMSwgICAgMTEsICAgIC0xLCAgICAxMiwgICAgLTEsICAgIDEwLCAgICAt
MSwKLSAgICAgIDI3LCAgICAtMSwgICAgMjgsICAgIC0xLCAgICAyOSwgICAgLTEsICAgIDIxLCAg
ICAtMSwgICAgMjIsICAgIC0xLAotICAgICAgMjMsICAgIC0xLCAgICAyNCwgICAgLTEsICAgIDI1
LCAgICAtMSwgICAgMjYsICAgIC0xLCAgICAzMCwgICAgLTEsCi0gICAgICAzMSwgICAgLTEsICAg
IDMyLCAgICAtMSwgICAgNDEsICAgIC0xLCAgICA0MiwgICAgLTEsICAgIDQzLCAgICAtMSwKLSAg
ICAgIDQ0LCAgICAtMSwgICAxNDMsICAgIC0xLCAgICA0NiwgICAgLTEsICAgIC0xLCAgICAzOCwg
ICAgOTYsICAgIDc1LAotICAgICAxNDQsICAgMTQ2LCAgICA3NiwgICAgLTEsICAgIC0xLCAgICAz
OCwgICAgNzUsICAgMTQ1LCAgIDE0NiwgICAgNzYsCi0gICAgICAtMSwgICAxNDcsICAgIC0xLCAg
IDE0NiwgICAxNDcsICAgIC0xLCAgIDEzOSwgICAxNDgsICAgIDgxLCAgICAtMSwKLSAgICAgMTQ5
LCAgICAtMSwgICAxNDgsICAgIDc4LCAgIDE0OSwgICAgLTEsICAgIDk2LCAgICAtMSwgICAgOTYs
ICAgIDczLAotICAgICAxMjUsICAgIDc0LCAgICAtMSwgICAxMjIsICAgIC0xLCAgIDEyNiwgICAg
LTEsICAgMTU0LCAgICAtMSwgICAxNTMsCi0gICAgICAtMSwgICAxNTEsICAgIC0xLCAgIDE2Mywg
ICAgLTEsICAgMTY0LCAgICAtMSwgICAxNjcsICAgIC0xLCAgIDE3NCwKLSAgICAgIC0xLCAgICA3
NSwgICAgNzYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc1LCAgIDE1NSwgICAxNjIsICAgMTU2
LAotICAgICAgNzYsICAgIC0xLCAgIDE2MSwgICAgLTEsICAgMTUzLCAgICAtMSwgICAgLTEsICAg
MTU5LCAgIDE2MSwgICAgLTEsCi0gICAgICAtMSwgICAxNjAsICAgMTUzLCAgICAtMSwgICAgNzUs
ICAgIDc2LCAgICAtMSwgICAgNzUsICAgMTYyLCAgICA3NiwKLSAgICAgIC0xLCAgIDE1MiwgICAg
LTEsICAgMTYyLCAgIDE1MiwgICAgLTEsICAgIDgxLCAgICAtMSwgICAxMjQsICAgIDgxLAotICAg
ICAgLTEsICAgIDE4LCAgICA3MSwgICAxMjQsICAgIDcyLCAgIDE2NSwgICAgLTEsICAgMTU4LCAg
ICAxNiwgICAxNTgsCi0gICAgICAtMSwgICAxNTgsICAgIC0xLCAgIDEyNCwgICAgLTEsICAgMTM3
LCAgICA5NiwgICAgODAsICAgMTUwLCAgICAtMSwKLSAgICAgIC0xLCAgICA0MCwgICAgNzEsICAg
MTY4LCAgIDE2NiwgICAgNzIsICAgMTU3LCAgICAtMSwgICAgLTEsICAgIDE1LAotICAgICAxNjks
ICAgMTU4LCAgICA0MCwgICAgNzEsICAgMTI0LCAgICA3MiwgICAgODEsICAgIC0xLCAgICAtMSwg
ICAgMTcsCi0gICAgICA3MSwgICAxNzAsICAgMTcxLCAgIDE3MywgICAgNzIsICAgMTU3LCAgICAt
MSwgICAxNjMsICAgIC0xLCAgIDE1MSwKLSAgICAgIC0xLCAgIDE2NiwgICAgLTEsICAgIC0xLCAg
IDE3MiwgICAgODEsICAgIC0xLCAgIDE3MiwgICAgODEsICAgMTI0LAotICAgICAgLTEsICAgIDE0
LCAgICA4MSwgICAgLTEsICAgIDEzLCAgICA4MSwgICAgLTEsICAgIDIwLCAgICA4MSwgICAgLTEs
Ci0gICAgICAyMCwgICAxMjQsICAgIDgxLCAgICAtMSwgICAgMTksICAgIDgxLCAgICAtMSwgICAx
NzYsICAgIC0xLCAgIDE3NSwKLSAgICAgMTc2LCAgICAtMSwgICAxNzcsICAgIC0xLCAgIDEyNiwg
ICAgLTEsICAgIC0xLCAgIDEyNywgICAxNzgsICAgMTYxLAotICAgICAgLTEKLX07Ci0KLS8qIFlZ
UkxJTkVbWVlOXSAtLSBzb3VyY2UgbGluZSB3aGVyZSBydWxlIG51bWJlciBZWU4gd2FzIGRlZmlu
ZWQuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXlybGluZVtdID0KLXsKLSAgICAg
ICAwLCAgIDE4MCwgICAxODAsICAgMTgxLCAgIDE4NCwgICAyMjcsICAgMjMwLCAgIDI0MywgICAy
NDgsICAgMjUzLAotICAgICAyNTksICAgMjYyLCAgIDI2NSwgICAyNjgsICAgMzYzLCAgIDM3Mywg
ICAzODYsICAgMzk0LCAgIDQ5NCwgICA0OTcsCi0gICAgIDUwNSwgICA1MDgsICAgNTE0LCAgIDUx
OCwgICA1MjUsICAgNTMxLCAgIDU0MCwgICA1NDgsICAgNjAzLCAgIDYxMywKLSAgICAgNjE2LCAg
IDYyNiwgICA2MzYsICAgNjU3LCAgIDY1OCwgICA2NTksICAgNjY0LCAgIDY2NSwgICA2NzMsICAg
Njg0LAotICAgICA2ODUsICAgNjkzLCAgIDcwNCwgICA3MDgsICAgNzA5LCAgIDcxOSwgICA3Mjks
ICAgNzM5LCAgIDc1MiwgICA3NTMsCi0gICAgIDc2MywgICA3NzYsICAgNzgwLCAgIDc4NCwgICA3
ODgsICAgNzg5LCAgIDgwMiwgICA4MDMsICAgODE2LCAgIDgxNywKLSAgICAgODMwLCAgIDgzMSwg
ICA4NDgsICAgODQ5LCAgIDg2MiwgICA4NjMsICAgODY0LCAgIDg2NSwgICA4NjYsICAgODcwLAot
ICAgICA4NzMsICAgODg0LCAgIDg5MiwgICA5MTksICAgOTI0LCAgIDkzOCwgICA5OTMsICAgOTk2
LCAgMTAwMywgIDEwMTEsCi0gICAgMTAzMiwgIDEwNTMsICAxMDYzLCAgMTA5MSwgIDEwOTYsICAx
MTA2LCAgMTExMSwgIDExMjEsICAxMTI0LCAgMTEyNywKLSAgICAxMTMwLCAgMTEzNiwgIDExNDMs
ICAxMTQ2LCAgMTE2OCwgIDExODYsICAxMjEwLCAgMTIzMywgIDEyMzcsICAxMjU1LAotICAgIDEy
NjMsICAxMjk1LCAgMTMxNSwgIDEzMzYsICAxMzQ1LCAgMTM2OCwgIDEzNzEsICAxMzc3LCAgMTM4
NSwgIDEzOTMsCi0gICAgMTQwMSwgIDE0MTEsICAxNDE4LCAgMTQyMSwgIDE0MjQsICAxNDMwLCAg
MTQzMywgIDE0NDgsICAxNDUyLCAgMTQ1NiwKLSAgICAxNDYwLCAgMTQ2NCwgIDE0NjksICAxNDc0
LCAgMTQ3OSwgIDE0ODQsICAxNDg5LCAgMTQ5NCwgIDE0OTksICAxNTA0LAotICAgIDE1MDksICAx
NTE0LCAgMTUxOSwgIDE1MjQsICAxNTI4LCAgMTUzMiwgIDE1NDAsICAxNTQ4LCAgMTU1MiwgIDE1
NjUsCi0gICAgMTU2NSwgIDE1NzksICAxNTc5LCAgMTU4OCwgIDE1OTEsICAxNjA3LCAgMTY0MCwg
IDE2NDQsICAxNjUwLCAgMTY1NywKLSAgICAxNjcyLCAgMTY3NiwgIDE2ODAsICAxNjgxLCAgMTY4
NywgIDE2ODgsICAxNjg5LCAgMTY5MCwgIDE2OTEsICAxNjk1LAotICAgIDE2OTYsICAxNjk2LCAg
MTY5NiwgIDE3MDYsICAxNzA3LCAgMTcxMSwgIDE3MTEsICAxNzEyLCAgMTcxMiwgIDE3MTcsCi0g
ICAgMTcyMCwgIDE3MzAsICAxNzMzLCAgMTczOSwgIDE3NDAsICAxNzQ0LCAgMTc1MiwgIDE3NTYs
ICAxNzY2LCAgMTc3MSwKLSAgICAxNzg4LCAgMTc4OCwgIDE3OTMsICAxNzkzLCAgMTgwMCwgIDE4
MDAsICAxODA4LCAgMTgxMSwgIDE4MTcsICAxODIwLAotICAgIDE4MjYsICAxODMwLCAgMTgzNywg
IDE4NDQsICAxODUxLCAgMTg1OCwgIDE4NjksICAxODc4LCAgMTg4MiwgIDE4ODksCi0gICAgMTg5
MiwgIDE4OTgsICAxODk4Ci19OwotI2VuZGlmCi0KLSNpZiBZWURFQlVHIHx8IFlZRVJST1JfVkVS
Qk9TRSB8fCAwCi0vKiBZWVROQU1FW1NZTUJPTC1OVU1dIC0tIFN0cmluZyBuYW1lIG9mIHRoZSBz
eW1ib2wgU1lNQk9MLU5VTS4KLSAgIEZpcnN0LCB0aGUgdGVybWluYWxzLCB0aGVuLCBzdGFydGlu
ZyBhdCBZWU5UT0tFTlMsIG5vbnRlcm1pbmFscy4gICovCi1zdGF0aWMgY29uc3QgY2hhciAqY29u
c3QgeXl0bmFtZVtdID0KLXsKLSAgIiRlbmQiLCAiZXJyb3IiLCAiJHVuZGVmaW5lZCIsICJJTlZB
UklBTlQiLCAiSElHSF9QUkVDSVNJT04iLAotICAiTUVESVVNX1BSRUNJU0lPTiIsICJMT1dfUFJF
Q0lTSU9OIiwgIlBSRUNJU0lPTiIsICJBVFRSSUJVVEUiLAotICAiQ09OU1RfUVVBTCIsICJCT09M
X1RZUEUiLCAiRkxPQVRfVFlQRSIsICJJTlRfVFlQRSIsICJCUkVBSyIsICJDT05USU5VRSIsCi0g
ICJETyIsICJFTFNFIiwgIkZPUiIsICJJRiIsICJESVNDQVJEIiwgIlJFVFVSTiIsICJCVkVDMiIs
ICJCVkVDMyIsCi0gICJCVkVDNCIsICJJVkVDMiIsICJJVkVDMyIsICJJVkVDNCIsICJWRUMyIiwg
IlZFQzMiLCAiVkVDNCIsICJNQVRSSVgyIiwKLSAgIk1BVFJJWDMiLCAiTUFUUklYNCIsICJJTl9R
VUFMIiwgIk9VVF9RVUFMIiwgIklOT1VUX1FVQUwiLCAiVU5JRk9STSIsCi0gICJWQVJZSU5HIiwg
IlNUUlVDVCIsICJWT0lEX1RZUEUiLCAiV0hJTEUiLCAiU0FNUExFUjJEIiwgIlNBTVBMRVJDVUJF
IiwKLSAgIlNBTVBMRVJfRVhURVJOQUxfT0VTIiwgIlNBTVBMRVIyRFJFQ1QiLCAiSURFTlRJRklF
UiIsICJUWVBFX05BTUUiLAotICAiRkxPQVRDT05TVEFOVCIsICJJTlRDT05TVEFOVCIsICJCT09M
Q09OU1RBTlQiLCAiTEVGVF9PUCIsICJSSUdIVF9PUCIsCi0gICJJTkNfT1AiLCAiREVDX09QIiwg
IkxFX09QIiwgIkdFX09QIiwgIkVRX09QIiwgIk5FX09QIiwgIkFORF9PUCIsCi0gICJPUl9PUCIs
ICJYT1JfT1AiLCAiTVVMX0FTU0lHTiIsICJESVZfQVNTSUdOIiwgIkFERF9BU1NJR04iLAotICAi
TU9EX0FTU0lHTiIsICJMRUZUX0FTU0lHTiIsICJSSUdIVF9BU1NJR04iLCAiQU5EX0FTU0lHTiIs
ICJYT1JfQVNTSUdOIiwKLSAgIk9SX0FTU0lHTiIsICJTVUJfQVNTSUdOIiwgIkxFRlRfUEFSRU4i
LCAiUklHSFRfUEFSRU4iLCAiTEVGVF9CUkFDS0VUIiwKLSAgIlJJR0hUX0JSQUNLRVQiLCAiTEVG
VF9CUkFDRSIsICJSSUdIVF9CUkFDRSIsICJET1QiLCAiQ09NTUEiLCAiQ09MT04iLAotICAiRVFV
QUwiLCAiU0VNSUNPTE9OIiwgIkJBTkciLCAiREFTSCIsICJUSUxERSIsICJQTFVTIiwgIlNUQVIi
LCAiU0xBU0giLAotICAiUEVSQ0VOVCIsICJMRUZUX0FOR0xFIiwgIlJJR0hUX0FOR0xFIiwgIlZF
UlRJQ0FMX0JBUiIsICJDQVJFVCIsCi0gICJBTVBFUlNBTkQiLCAiUVVFU1RJT04iLCAiJGFjY2Vw
dCIsICJpZGVudGlmaWVyIiwgInZhcmlhYmxlX2lkZW50aWZpZXIiLAotICAicHJpbWFyeV9leHBy
ZXNzaW9uIiwgInBvc3RmaXhfZXhwcmVzc2lvbiIsICJpbnRlZ2VyX2V4cHJlc3Npb24iLAotICAi
ZnVuY3Rpb25fY2FsbCIsICJmdW5jdGlvbl9jYWxsX29yX21ldGhvZCIsICJmdW5jdGlvbl9jYWxs
X2dlbmVyaWMiLAotICAiZnVuY3Rpb25fY2FsbF9oZWFkZXJfbm9fcGFyYW1ldGVycyIsCi0gICJm
dW5jdGlvbl9jYWxsX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMiLCAiZnVuY3Rpb25fY2FsbF9oZWFk
ZXIiLAotICAiZnVuY3Rpb25faWRlbnRpZmllciIsICJ1bmFyeV9leHByZXNzaW9uIiwgInVuYXJ5
X29wZXJhdG9yIiwKLSAgIm11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24iLCAiYWRkaXRpdmVfZXhw
cmVzc2lvbiIsICJzaGlmdF9leHByZXNzaW9uIiwKLSAgInJlbGF0aW9uYWxfZXhwcmVzc2lvbiIs
ICJlcXVhbGl0eV9leHByZXNzaW9uIiwgImFuZF9leHByZXNzaW9uIiwKLSAgImV4Y2x1c2l2ZV9v
cl9leHByZXNzaW9uIiwgImluY2x1c2l2ZV9vcl9leHByZXNzaW9uIiwKLSAgImxvZ2ljYWxfYW5k
X2V4cHJlc3Npb24iLCAibG9naWNhbF94b3JfZXhwcmVzc2lvbiIsCi0gICJsb2dpY2FsX29yX2V4
cHJlc3Npb24iLCAiY29uZGl0aW9uYWxfZXhwcmVzc2lvbiIsCi0gICJhc3NpZ25tZW50X2V4cHJl
c3Npb24iLCAiYXNzaWdubWVudF9vcGVyYXRvciIsICJleHByZXNzaW9uIiwKLSAgImNvbnN0YW50
X2V4cHJlc3Npb24iLCAiZGVjbGFyYXRpb24iLCAiZnVuY3Rpb25fcHJvdG90eXBlIiwKLSAgImZ1
bmN0aW9uX2RlY2xhcmF0b3IiLCAiZnVuY3Rpb25faGVhZGVyX3dpdGhfcGFyYW1ldGVycyIsCi0g
ICJmdW5jdGlvbl9oZWFkZXIiLCAicGFyYW1ldGVyX2RlY2xhcmF0b3IiLCAicGFyYW1ldGVyX2Rl
Y2xhcmF0aW9uIiwKLSAgInBhcmFtZXRlcl9xdWFsaWZpZXIiLCAicGFyYW1ldGVyX3R5cGVfc3Bl
Y2lmaWVyIiwKLSAgImluaXRfZGVjbGFyYXRvcl9saXN0IiwgInNpbmdsZV9kZWNsYXJhdGlvbiIs
ICJmdWxseV9zcGVjaWZpZWRfdHlwZSIsCi0gICJ0eXBlX3F1YWxpZmllciIsICJ0eXBlX3NwZWNp
ZmllciIsICJwcmVjaXNpb25fcXVhbGlmaWVyIiwKLSAgInR5cGVfc3BlY2lmaWVyX25vX3ByZWMi
LCAidHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkiLCAic3RydWN0X3NwZWNpZmllciIsCi0gICIkQDEi
LCAiJEAyIiwgInN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IiwgInN0cnVjdF9kZWNsYXJhdGlvbiIs
Ci0gICJzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0IiwgInN0cnVjdF9kZWNsYXJhdG9yIiwgImluaXRp
YWxpemVyIiwKLSAgImRlY2xhcmF0aW9uX3N0YXRlbWVudCIsICJzdGF0ZW1lbnQiLCAic2ltcGxl
X3N0YXRlbWVudCIsCi0gICJjb21wb3VuZF9zdGF0ZW1lbnQiLCAiJEAzIiwgIiRANCIsICJzdGF0
ZW1lbnRfbm9fbmV3X3Njb3BlIiwKLSAgInN0YXRlbWVudF93aXRoX3Njb3BlIiwgIiRANSIsICIk
QDYiLCAiY29tcG91bmRfc3RhdGVtZW50X25vX25ld19zY29wZSIsCi0gICJzdGF0ZW1lbnRfbGlz
dCIsICJleHByZXNzaW9uX3N0YXRlbWVudCIsICJzZWxlY3Rpb25fc3RhdGVtZW50IiwKLSAgInNl
bGVjdGlvbl9yZXN0X3N0YXRlbWVudCIsICJjb25kaXRpb24iLCAiaXRlcmF0aW9uX3N0YXRlbWVu
dCIsICIkQDciLAotICAiJEA4IiwgIiRAOSIsICJmb3JfaW5pdF9zdGF0ZW1lbnQiLCAiY29uZGl0
aW9ub3B0IiwgImZvcl9yZXN0X3N0YXRlbWVudCIsCi0gICJqdW1wX3N0YXRlbWVudCIsICJ0cmFu
c2xhdGlvbl91bml0IiwgImV4dGVybmFsX2RlY2xhcmF0aW9uIiwKLSAgImZ1bmN0aW9uX2RlZmlu
aXRpb24iLCAiJEAxMCIsIFlZX05VTEwKLX07Ci0jZW5kaWYKLQotIyBpZmRlZiBZWVBSSU5UCi0v
KiBZWVRPS05VTVtZWUxFWC1OVU1dIC0tIEludGVybmFsIHRva2VuIG51bWJlciBjb3JyZXNwb25k
aW5nIHRvCi0gICB0b2tlbiBZWUxFWC1OVU0uICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50
MTYgeXl0b2tudW1bXSA9Ci17Ci0gICAgICAgMCwgICAyNTYsICAgMjU3LCAgIDI1OCwgICAyNTks
ICAgMjYwLCAgIDI2MSwgICAyNjIsICAgMjYzLCAgIDI2NCwKLSAgICAgMjY1LCAgIDI2NiwgICAy
NjcsICAgMjY4LCAgIDI2OSwgICAyNzAsICAgMjcxLCAgIDI3MiwgICAyNzMsICAgMjc0LAotICAg
ICAyNzUsICAgMjc2LCAgIDI3NywgICAyNzgsICAgMjc5LCAgIDI4MCwgICAyODEsICAgMjgyLCAg
IDI4MywgICAyODQsCi0gICAgIDI4NSwgICAyODYsICAgMjg3LCAgIDI4OCwgICAyODksICAgMjkw
LCAgIDI5MSwgICAyOTIsICAgMjkzLCAgIDI5NCwKLSAgICAgMjk1LCAgIDI5NiwgICAyOTcsICAg
Mjk4LCAgIDI5OSwgICAzMDAsICAgMzAxLCAgIDMwMiwgICAzMDMsICAgMzA0LAotICAgICAzMDUs
ICAgMzA2LCAgIDMwNywgICAzMDgsICAgMzA5LCAgIDMxMCwgICAzMTEsICAgMzEyLCAgIDMxMywg
ICAzMTQsCi0gICAgIDMxNSwgICAzMTYsICAgMzE3LCAgIDMxOCwgICAzMTksICAgMzIwLCAgIDMy
MSwgICAzMjIsICAgMzIzLCAgIDMyNCwKLSAgICAgMzI1LCAgIDMyNiwgICAzMjcsICAgMzI4LCAg
IDMyOSwgICAzMzAsICAgMzMxLCAgIDMzMiwgICAzMzMsICAgMzM0LAotICAgICAzMzUsICAgMzM2
LCAgIDMzNywgICAzMzgsICAgMzM5LCAgIDM0MCwgICAzNDEsICAgMzQyLCAgIDM0MywgICAzNDQs
Ci0gICAgIDM0NSwgICAzNDYsICAgMzQ3LCAgIDM0OCwgICAzNDkKLX07Ci0jIGVuZGlmCi0KLS8q
IFlZUjFbWVlOXSAtLSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1bGUgWVlOIGRlcml2
ZXMuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIxW10gPQotewotICAgICAgIDAs
ICAgIDk1LCAgICA5NiwgICAgOTYsICAgIDk3LCAgICA5OCwgICAgOTgsICAgIDk4LCAgICA5OCwg
ICAgOTgsCi0gICAgICA5OSwgICAgOTksICAgIDk5LCAgICA5OSwgICAgOTksICAgIDk5LCAgIDEw
MCwgICAxMDEsICAgMTAyLCAgIDEwMiwKLSAgICAgMTAzLCAgIDEwMywgICAxMDQsICAgMTA0LCAg
IDEwNSwgICAxMDUsICAgMTA2LCAgIDEwNywgICAxMDcsICAgMTA4LAotICAgICAxMDgsICAgMTA4
LCAgIDEwOCwgICAxMDksICAgMTA5LCAgIDEwOSwgICAxMTAsICAgMTEwLCAgIDExMCwgICAxMTEs
Ci0gICAgIDExMSwgICAxMTEsICAgMTEyLCAgIDExMywgICAxMTMsICAgMTEzLCAgIDExMywgICAx
MTMsICAgMTE0LCAgIDExNCwKLSAgICAgMTE0LCAgIDExNSwgICAxMTYsICAgMTE3LCAgIDExOCwg
ICAxMTgsICAgMTE5LCAgIDExOSwgICAxMjAsICAgMTIwLAotICAgICAxMjEsICAgMTIxLCAgIDEy
MiwgICAxMjIsICAgMTIzLCAgIDEyMywgICAxMjMsICAgMTIzLCAgIDEyMywgICAxMjQsCi0gICAg
IDEyNCwgICAxMjUsICAgMTI2LCAgIDEyNiwgICAxMjYsICAgMTI3LCAgIDEyOCwgICAxMjgsICAg
MTI5LCAgIDEyOSwKLSAgICAgMTMwLCAgIDEzMSwgICAxMzEsICAgMTMyLCAgIDEzMiwgICAxMzIs
ICAgMTMyLCAgIDEzMywgICAxMzMsICAgMTMzLAotICAgICAxMzMsICAgMTM0LCAgIDEzNSwgICAx
MzUsICAgMTM1LCAgIDEzNSwgICAxMzUsICAgMTM2LCAgIDEzNiwgICAxMzYsCi0gICAgIDEzNiwg
ICAxMzYsICAgMTM2LCAgIDEzNywgICAxMzcsICAgMTM4LCAgIDEzOCwgICAxMzgsICAgMTM4LCAg
IDEzOCwKLSAgICAgMTM5LCAgIDEzOSwgICAxNDAsICAgMTQwLCAgIDE0MCwgICAxNDEsICAgMTQx
LCAgIDE0MiwgICAxNDIsICAgMTQyLAotICAgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAg
MTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsCi0gICAgIDE0MiwgICAxNDIs
ICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0NCwK
LSAgICAgMTQzLCAgIDE0NSwgICAxNDMsICAgMTQ2LCAgIDE0NiwgICAxNDcsICAgMTQ4LCAgIDE0
OCwgICAxNDksICAgMTQ5LAotICAgICAxNTAsICAgMTUxLCAgIDE1MiwgICAxNTIsICAgMTUzLCAg
IDE1MywgICAxNTMsICAgMTUzLCAgIDE1MywgICAxNTQsCi0gICAgIDE1NSwgICAxNTYsICAgMTU0
LCAgIDE1NywgICAxNTcsICAgMTU5LCAgIDE1OCwgICAxNjAsICAgMTU4LCAgIDE2MSwKLSAgICAg
MTYxLCAgIDE2MiwgICAxNjIsICAgMTYzLCAgIDE2MywgICAxNjQsICAgMTY1LCAgIDE2NSwgICAx
NjYsICAgMTY2LAotICAgICAxNjgsICAgMTY3LCAgIDE2OSwgICAxNjcsICAgMTcwLCAgIDE2Nywg
ICAxNzEsICAgMTcxLCAgIDE3MiwgICAxNzIsCi0gICAgIDE3MywgICAxNzMsICAgMTc0LCAgIDE3
NCwgICAxNzQsICAgMTc0LCAgIDE3NCwgICAxNzUsICAgMTc1LCAgIDE3NiwKLSAgICAgMTc2LCAg
IDE3OCwgICAxNzcKLX07Ci0KLS8qIFlZUjJbWVlOXSAtLSBOdW1iZXIgb2Ygc3ltYm9scyBjb21w
b3NpbmcgcmlnaHQgaGFuZCBzaWRlIG9mIHJ1bGUgWVlOLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5
cGVfdWludDggeXlyMltdID0KLXsKLSAgICAgICAwLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLAotICAgICAgIDEsICAgICA0LCAg
ICAgMSwgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsCi0g
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDEs
ICAgICAxLCAgICAgMSwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMSwgICAg
IDEsICAgICAxLCAgICAgMywgICAgIDMsICAgICAxLAotICAgICAgIDMsICAgICAzLCAgICAgMSwg
ICAgIDEsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMSwgICAgIDMsCi0gICAgICAg
MywgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDMsICAgICAx
LCAgICAgMywKLSAgICAgICAxLCAgICAgNSwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLAotICAgICAgIDMsICAgICAxLCAgICAgMiwgICAgIDIs
ICAgICA0LCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDMsCi0gICAgICAgMywgICAg
IDIsICAgICA1LCAgICAgMywgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDAsICAgICAxLCAgICAg
MSwKLSAgICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgNSwgICAgIDYsICAgICA1LCAg
ICAgMSwgICAgIDIsICAgICA0LAotICAgICAgIDUsICAgICA0LCAgICAgMiwgICAgIDEsICAgICAy
LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDEsCi0gICAgICAgMSwgICAgIDIsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgNCwgICAgIDEsICAgICAxLCAgICAgMSwKLSAg
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAxLAotICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDAsCi0gICAgICAgNiwgICAgIDAsICAgICA1LCAg
ICAgMSwgICAgIDIsICAgICAzLCAgICAgMSwgICAgIDMsICAgICAxLCAgICAgNCwKLSAgICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEs
ICAgICAyLAotICAgICAgIDAsICAgICAwLCAgICAgNSwgICAgIDEsICAgICAxLCAgICAgMCwgICAg
IDIsICAgICAwLCAgICAgMiwgICAgIDIsCi0gICAgICAgMywgICAgIDEsICAgICAyLCAgICAgMSwg
ICAgIDIsICAgICA1LCAgICAgMywgICAgIDEsICAgICAxLCAgICAgNCwKLSAgICAgICAwLCAgICAg
NiwgICAgIDAsICAgICA4LCAgICAgMCwgICAgIDcsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAw
LAotICAgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMywgICAgIDIsICAg
ICAxLCAgICAgMiwgICAgIDEsCi0gICAgICAgMSwgICAgIDAsICAgICAzCi19OwotCi0vKiBZWURF
RkFDVFtTVEFURS1OQU1FXSAtLSBEZWZhdWx0IHJlZHVjdGlvbiBudW1iZXIgaW4gc3RhdGUgU1RB
VEUtTlVNLgotICAgUGVyZm9ybWVkIHdoZW4gWVlUQUJMRSBkb2Vzbid0IHNwZWNpZnkgc29tZXRo
aW5nIGVsc2UgdG8gZG8uICBaZXJvCi0gICBtZWFucyB0aGUgZGVmYXVsdCBpcyBhbiBlcnJvci4g
ICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5ZGVmYWN0W10gPQotewotICAgICAgIDAs
ICAgICAwLCAgIDExMiwgICAxMTMsICAgMTE0LCAgICAgMCwgICAxMDYsICAgMTA1LCAgIDEyMCwg
ICAxMTgsCi0gICAgIDExOSwgICAxMjQsICAgMTI1LCAgIDEyNiwgICAxMjcsICAgMTI4LCAgIDEy
OSwgICAxMjEsICAgMTIyLCAgIDEyMywKLSAgICAgMTMwLCAgIDEzMSwgICAxMzIsICAgMTA5LCAg
IDEwNywgICAgIDAsICAgMTE3LCAgIDEzMywgICAxMzQsICAgMTM1LAotICAgICAxMzYsICAgMTM4
LCAgIDIwMCwgICAyMDEsICAgICAwLCAgICA3NywgICAgODcsICAgICAwLCAgICA5MiwgICAgOTcs
Ci0gICAgICAgMCwgICAxMDMsICAgICAwLCAgIDExMCwgICAxMTUsICAgMTM3LCAgICAgMCwgICAx
OTcsICAgMTk5LCAgIDEwOCwKLSAgICAgMTAyLCAgICAgMCwgICAgIDIsICAgICAzLCAgIDE0MSwg
ICAgIDAsICAgIDcyLCAgICAgMCwgICAgNzUsICAgIDg3LAotICAgICAgIDAsICAgIDg4LCAgICA4
OSwgICAgOTAsICAgIDc4LCAgICAgMCwgICAgODcsICAgICAwLCAgICA3MywgICAgIDIsCi0gICAg
ICA5OCwgICAxMDQsICAgMTExLCAgICAgMCwgICAgIDEsICAgMTk4LCAgICAgMCwgICAgIDAsICAg
MTM5LCAgICAgMCwKLSAgICAgMjAyLCAgICA3OSwgICAgODQsICAgIDg2LCAgICA5MSwgICAgIDAs
ICAgIDkzLCAgICA4MCwgICAgIDAsICAgICAwLAotICAgICAgIDQsICAgICA3LCAgICAgNiwgICAg
IDgsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDM1LCAgICAzNCwgICAgMzMsCi0gICAgICAgNSwg
ICAgMTAsICAgIDI5LCAgICAxMiwgICAgMTcsICAgIDE4LCAgICAgMCwgICAgIDAsICAgIDIzLCAg
ICAgMCwKLSAgICAgIDM2LCAgICAgMCwgICAgMzksICAgIDQyLCAgICA0MywgICAgNDgsICAgIDUx
LCAgICA1MiwgICAgNTMsICAgIDU0LAotICAgICAgNTYsICAgIDU4LCAgICA2MCwgICAgNzEsICAg
ICAwLCAgICAyNywgICAgNzQsICAgICAwLCAgICAgMCwgICAxNDMsCi0gICAgICAgMCwgICAgIDAs
ICAgICAwLCAgIDE4MiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE2MCwK
LSAgICAgMTY5LCAgIDE3MywgICAgMzYsICAgIDYyLCAgICA2OSwgICAgIDAsICAgMTUxLCAgICAg
MCwgICAxMTUsICAgMTU0LAotICAgICAxNzEsICAgMTUzLCAgIDE1MiwgICAgIDAsICAgMTU1LCAg
IDE1NiwgICAxNTcsICAgMTU4LCAgICA4MSwgICAgODMsCi0gICAgICA4NSwgICAgIDAsICAgICAw
LCAgICA5OSwgICAgIDAsICAgMTUwLCAgIDEwMSwgICAgMzAsICAgIDMxLCAgICAgMCwKLSAgICAg
IDE0LCAgICAxNSwgICAgIDAsICAgICAwLCAgICAyMSwgICAgMjAsICAgICAwLCAgICAyMiwgICAg
MjQsICAgIDI2LAotICAgICAgMzIsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgMTE2LCAgIDE0OCwgICAgIDAsICAgMTQ2LCAgIDE0MiwKLSAgICAgMTQ0LCAg
ICAgMCwgICAxOTMsICAgMTkyLCAgIDE2NywgICAxODQsICAgICAwLCAgIDE5NiwgICAxOTQsICAg
ICAwLAotICAgICAxODAsICAgMTU5LCAgICAgMCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgs
ICAgIDY0LCAgICAgMCwgICAgIDAsCi0gICAgIDE3NCwgICAxNzAsICAgMTcyLCAgICAgMCwgICAg
OTQsICAgICAwLCAgICA5NiwgICAxMDAsICAgICA5LCAgICAgMCwKLSAgICAgIDE2LCAgICAgMiwg
ICAgIDMsICAgIDEzLCAgICAxOSwgICAgMjUsICAgIDM3LCAgICAzOCwgICAgNDEsICAgIDQwLAot
ICAgICAgNDYsICAgIDQ3LCAgICA0NCwgICAgNDUsICAgIDQ5LCAgICA1MCwgICAgNTUsICAgIDU3
LCAgICA1OSwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgMTQ1LCAgIDE0MCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE5NSwKLSAgICAgICAwLCAgIDE2MSwgICAgNjMs
ICAgIDcwLCAgICAgMCwgICAgOTUsICAgIDExLCAgICAgMCwgICAgIDAsICAgMTQ3LAotICAgICAg
IDAsICAgMTY2LCAgIDE2OCwgICAxODcsICAgMTg2LCAgIDE4OSwgICAxNjcsICAgMTc4LCAgICAg
MCwgICAgIDAsCi0gICAgICAgMCwgICAgODIsICAgIDYxLCAgIDE0OSwgICAgIDAsICAgMTg4LCAg
ICAgMCwgICAgIDAsICAgMTc3LCAgIDE3NSwKLSAgICAgICAwLCAgICAgMCwgICAxNjIsICAgICAw
LCAgIDE5MCwgICAgIDAsICAgMTY3LCAgICAgMCwgICAxNjQsICAgMTgxLAotICAgICAxNjMsICAg
ICAwLCAgIDE5MSwgICAxODUsICAgMTc2LCAgIDE3OSwgICAxODMKLX07Ci0KLS8qIFlZREVGR09U
T1tOVEVSTS1OVU1dLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlkZWZnb3RvW10g
PQotewotICAgICAgLTEsICAgMTk2LCAgIDEwMCwgICAxMDEsICAgMTAyLCAgIDIyOSwgICAxMDMs
ICAgMTA0LCAgIDEwNSwgICAxMDYsCi0gICAgIDEwNywgICAxMDgsICAgMTA5LCAgIDE0MiwgICAx
MTEsICAgMTEyLCAgIDExMywgICAxMTQsICAgMTE1LCAgIDExNiwKLSAgICAgMTE3LCAgIDExOCwg
ICAxMTksICAgMTIwLCAgIDEyMSwgICAxMjIsICAgMTQzLCAgIDE0NCwgICAyMTgsICAgMTQ1LAot
ICAgICAxMjQsICAgMTQ2LCAgIDE0NywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgODIsICAgIDY0
LCAgICA2NSwgICAgODMsCi0gICAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAg
IDQyLCAgICA0MywgICAxMjUsICAgIDQ1LCAgIDEzMCwKLSAgICAgIDc3LCAgIDEyOCwgICAxMjks
ICAgMTk3LCAgIDE5OCwgICAxNjYsICAgMTQ5LCAgIDE1MCwgICAxNTEsICAgMTUyLAotICAgICAy
MTIsICAgMjgwLCAgIDI5OSwgICAyNTQsICAgMjU1LCAgIDI1NiwgICAzMDAsICAgMTUzLCAgIDE1
NCwgICAxNTUsCi0gICAgIDI4OSwgICAyNzksICAgMTU2LCAgIDI2MCwgICAyMDQsICAgMjU3LCAg
IDI3NSwgICAyODYsICAgMjg3LCAgIDE1NywKLSAgICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDU3
Ci19OwotCi0vKiBZWVBBQ1RbU1RBVEUtTlVNXSAtLSBJbmRleCBpbiBZWVRBQkxFIG9mIHRoZSBw
b3J0aW9uIGRlc2NyaWJpbmcKLSAgIFNUQVRFLU5VTS4gICovCi0jZGVmaW5lIFlZUEFDVF9OSU5G
IC0yNjEKLXN0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlwYWN0W10gPQotewotICAgIDEzMjcs
ICAgLTIwLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgIDExMywgIC0yNjEsICAtMjYxLCAgLTI2MSwg
IC0yNjEsCi0gICAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2
MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwKLSAgICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAg
LTI2MSwgICAtMTksICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAtMjYx
LCAgLTI2MSwgICAtNjEsICAgLTQwLCAgIC0yOCwgICAgNzUsICAgIC03LCAgLTI2MSwgICAgMjQs
Ci0gICAgMTM3MCwgIC0yNjEsICAxNDQ0LCAgLTI2MSwgICAtMTEsICAtMjYxLCAgMTI4MywgIC0y
NjEsICAtMjYxLCAgLTI2MSwKLSAgICAtMjYxLCAgMTQ0NCwgIC0yNjEsICAtMjYxLCAgLTI2MSwg
ICAgIDYsICAtMjYxLCAgICA1NCwgIC0yNjEsICAgIDg4LAotICAgICAgNjIsICAtMjYxLCAgLTI2
MSwgIC0yNjEsICAtMjYxLCAgMTM3MCwgICAgNTksICAgIDkxLCAgLTI2MSwgICAgMzYsCi0gICAg
IC01MCwgIC0yNjEsICAtMjYxLCAgMTA1MSwgIC0yNjEsICAtMjYxLCAgICA2MywgIDEzNzAsICAt
MjYxLCAgIDI5MywKLSAgICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgICA5MSwgIDEzNzAs
ICAgLTEyLCAgLTI2MSwgICA4NTYsICAxMDUxLAotICAgICAgNzcsICAtMjYxLCAgLTI2MSwgIC0y
NjEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAtMjYxLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2MSwg
IC0yNjEsICAgLTE0LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgICA4NCwgICAtNDQsICAxMTE2LCAg
ICA5NSwKLSAgICAtMjYxLCAgMTA1MSwgICAgNTMsICAgICAzLCAgLTI2MSwgICAtMzYsICAgIDg5
LCAgLTI2MSwgIC0yNjEsICAtMjYxLAotICAgICAxMDQsICAgMTA3LCAgIC00NSwgIC0yNjEsICAg
IDk2LCAgLTI2MSwgIC0yNjEsICAgIDkxLCAgMTE4NCwgIC0yNjEsCi0gICAgMTM3MCwgICAgOTIs
ICAgIDkzLCAgLTI2MSwgICAgOTgsICAgMTAxLCAgICA5NCwgICA5MjEsICAgMTA1LCAgIDEwMiwK
LSAgICAtMjYxLCAgLTI2MSwgICAgNzIsICAtMjYxLCAgLTI2MSwgICAgIDksICAtMjYxLCAgIC02
MSwgICAgNDIsICAtMjYxLAotICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAzNzYsICAtMjYxLCAg
LTI2MSwgIC0yNjEsICAtMjYxLCAgIDEwNiwgIC0yNjEsCi0gICAgLTI2MSwgICA5ODYsICAxMDUx
LCAgLTI2MSwgICAxMDMsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgIC00MSwKLSAgICAt
MjYxLCAgLTI2MSwgIDEwNTEsICAxNDA3LCAgLTI2MSwgIC0yNjEsICAxMDUxLCAgIDExMCwgIC0y
NjEsICAtMjYxLAotICAgIC0yNjEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwg
IDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsCi0gICAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1
MSwgIDEwNTEsICAtMjYxLCAgIDEwOSwgICAgMjMsICAtMjYxLCAgLTI2MSwKLSAgICAtMjYxLCAg
MTIyNywgIC0yNjEsICAtMjYxLCAgIDExMSwgIC0yNjEsICAxMDUxLCAgLTI2MSwgIC0yNjEsICAg
IDI1LAotICAgIC0yNjEsICAtMjYxLCAgIDQ1OSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEs
ICAtMjYxLCAgMTA1MSwgIDEwNTEsCi0gICAgLTI2MSwgIC0yNjEsICAtMjYxLCAgMTA1MSwgIC0y
NjEsICAgMTE0LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgIDExNSwKLSAgICAgMTEyLCAgICA3Nywg
ICAxMTYsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAgNTMsICAgIDUzLAot
ICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgLTM2LCAgIC0zNiwgIC0yNjEsICAgMTA0
LCAgIDEwNywgICAgNzYsCi0gICAgMTA1MSwgICAgOTEsICAtMjYxLCAgLTI2MSwgICAxNDUsICAg
IDU0LCAgIDYyNSwgICA3MDgsICAgIC02LCAgLTI2MSwKLSAgICAgNzkxLCAgIDQ1OSwgIC0yNjEs
ICAtMjYxLCAgIDExNywgIC0yNjEsICAtMjYxLCAgMTA1MSwgICAxMjAsICAtMjYxLAotICAgICAx
MjQsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgIDc5MSwgICAxMTEsICAgMTEyLCAgICA5
MSwgICAxMjUsCi0gICAgIDEyMiwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIDEwNTEsICAtMjYxLCAg
IDExOCwgICAxMjgsICAgMTgwLCAgLTI2MSwKLSAgICAgMTI2LCAgIDU0MiwgIC0yNjEsICAgIC01
LCAgMTA1MSwgICA1NDIsICAgMTExLCAgMTA1MSwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAg
MTIzLCAgIDExMiwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEKLX07Ci0KLS8qIFlZUEdPVE9b
TlRFUk0tTlVNXS4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cGdvdG9bXSA9Ci17
Ci0gICAgLTI2MSwgICAtMjQsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0y
NjEsICAgIDM0LCAgLTI2MSwKLSAgICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgIDMyLCAgLTI2MSwg
ICAtMzMsICAtMjYxLCAgIC0yNywgICAtMjYsICAtMjYxLAotICAgIC0yNjEsICAtMjYxLCAgICAx
NCwgICAgMTYsICAgIDE4LCAgLTI2MSwgICAtNjYsICAgLTg3LCAgLTI2MSwgICAtOTIsCi0gICAg
IC04NSwgICAgMTEsICAgIDEyLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgIDE0MSwgICAxNTAsICAg
MTYxLCAgIDE0MywKLSAgICAtMjYxLCAgLTI2MSwgIC0yMzEsICAgICA1LCAgIC0zMCwgICAyMjQs
ICAgLTE4LCAgICAgMCwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAgMTAwLCAgLTExOSwgIC0y
NjEsICAgLTE3LCAgLTE1NiwgICAtMjUsICAtMTQ1LCAgLTI0MywgIC0yNjEsCi0gICAgLTI2MSwg
IC0yNjEsICAgLTY0LCAgLTI2MCwgIC0yNjEsICAtMjYxLCAgIC01MiwgICAgMjEsICAgLTIyLCAg
LTI2MSwKLSAgICAtMjYxLCAgIC0zOSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYx
LCAgLTI2MSwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAgMTkxLCAgLTI2MSwgIC0yNjEKLX07
Ci0KLS8qIFlZVEFCTEVbWVlQQUNUW1NUQVRFLU5VTV1dLiAgV2hhdCB0byBkbyBpbiBzdGF0ZSBT
VEFURS1OVU0uICBJZgotICAgcG9zaXRpdmUsIHNoaWZ0IHRoYXQgdG9rZW4uICBJZiBuZWdhdGl2
ZSwgcmVkdWNlIHRoZSBydWxlIHdoaWNoCi0gICBudW1iZXIgaXMgdGhlIG9wcG9zaXRlLiAgSWYg
WVlUQUJMRV9OSU5GLCBzeW50YXggZXJyb3IuICAqLwotI2RlZmluZSBZWVRBQkxFX05JTkYgLTE2
Ngotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXRhYmxlW10gPQotewotICAgICAgNDQsICAg
IDU1LCAgIDE2NSwgICAxNjQsICAgMTY5LCAgICA4MCwgICAyMjYsICAgMTIzLCAgIDIyMiwgICAy
MDAsCi0gICAgICA3MSwgICAgMzIsICAgIDMzLCAgIDI3MiwgICAxOTMsICAgIDcwLCAgIDI4OCwg
ICAgNDksICAgMTg1LCAgIDE4NiwKLSAgICAgIDU2LCAgIDE3OCwgICAxMjMsICAgIDg4LCAgICA3
MiwgICAgNTAsICAgIDUyLCAgICA1MywgICAxNzUsICAgMjc4LAotICAgICAgODksICAgMjI4LCAg
ICA1OCwgICAgNzYsICAgMTc2LCAgICA4NCwgICAzMDQsICAgMjE5LCAgIDE3MCwgICAxNzEsCi0g
ICAgICA0NCwgICAgNjYsICAgIDQ0LCAgICA4NiwgICAyNzgsICAgMjA5LCAgICA0NCwgICAxMjcs
ICAgMjk4LCAgIDE5NCwKLSAgICAgIDU5LCAgICA0NCwgICAyOTgsICAgMTg3LCAgIDE4OCwgICAg
ODQsICAgIDU0LCAgICAzMiwgICAgMzMsICAgMTcyLAotICAgICAxNTgsICAgMTYxLCAgICA3Mywg
ICAxNzMsICAgIDY2LCAgICA0NCwgICAyNzYsICAgMzAxLCAgIDE2MiwgICAgNjksCi0gICAgICA1
MywgICAgNjcsICAgMjE5LCAgIDIxOSwgICAgNjgsICAgMTY1LCAgIDIyNSwgICAgNDQsICAgIDYw
LCAgIDE0OCwKLSAgICAgMjMwLCAgICA3OCwgICAyMDAsICAgICA2LCAgICAgNywgICAgNDQsICAg
MTgzLCAgIDIxOSwgICAxODQsICAgMjM1LAotICAgICAyMjAsICAgIDYwLCAgICA2MSwgICAgNjIs
ICAgIDYzLCAgIDEyMywgICAgIDYsICAgICA3LCAgIDEyNywgICAgNDksCi0gICAgIDEyNywgICAy
NTEsICAgMjQ5LCAgIDIxOSwgICAyNTIsICAgMTEwLCAgIDI1OSwgICAgODcsICAgIDYxLCAgICA2
MiwKLSAgICAgIDYzLCAgICAyMywgICAgMjQsICAgLTI3LCAgIDI1OCwgICAgNzMsICAgMjIyLCAg
ICAgMiwgICAgIDMsICAgICA0LAotICAgICAxMTAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDIz
LCAgICAyNCwgICAxNjcsICAgMTY4LCAgICA0NCwgICAgNzksCi0gICAgICA0NCwgICAyNjIsICAg
MjYzLCAgIDIxMywgICAyMTQsICAgMjE1LCAgICA1MiwgICAgNTMsICAgMjY0LCAgIDE4MSwKLSAg
ICAgMTgyLCAgIDMwNSwgICAyMTYsICAgMTgwLCAgIDEyNiwgICAxODksICAgMTkwLCAgIC03Niwg
ICAtMjgsICAgMjMzLAotICAgICAyMzgsICAgMjM5LCAgIDIxNywgICAxNDgsICAgMjE5LCAgIDI2
NywgICAxNzQsICAgMTIzLCAgIDI0MCwgICAyNDEsCi0gICAgIDI0MiwgICAyNDMsICAgMTkxLCAg
IDI0NCwgICAyNDUsICAgMjY4LCAgIDE3OSwgICAxOTIsICAgMjc3LCAgIDIwNSwKLSAgICAgMTk1
LCAgIDEyNywgICAyMDYsICAgMjAyLCAgIDIwMywgICAyMDcsICAgMjEwLCAgIDIyNywgICAyMTEs
ICAgMjIzLAotICAgICAyODIsICAtMTE3LCAgIDI1MCwgICAyNzcsICAgMTIzLCAgIDI3MCwgIC0x
NjUsICAtMTM4LCAgIDI2NSwgICAyNjYsCi0gICAgIDIxOSwgICAyODEsICAgMjkzLCAgIDExMCwg
ICAyODMsICAgMjg0LCAgIDI5NiwgICAyOTEsICAgMjkyLCAgIDI5NCwKLSAgICAgMjk1LCAgICA0
NCwgICAzMDIsICAgMjcxLCAgIDMwNiwgICAyNDYsICAgMjk3LCAgIDIzNCwgICAyNDcsICAgIDgx
LAotICAgICAxNjUsICAgMjQ4LCAgIDE0OCwgICAyMzYsICAgMjM3LCAgIDExMCwgICAxMTAsICAg
MTEwLCAgIDExMCwgICAxMTAsCi0gICAgIDExMCwgICAxMTAsICAgMTEwLCAgIDExMCwgICAxMTAs
ICAgMTEwLCAgIDE1OSwgICAgODUsICAgMTYwLCAgICA1MSwKLSAgICAgMjAxLCAgIDMwMywgICAy
NzMsICAgMjYxLCAgIDI2OSwgICAyNzQsICAgMjg1LCAgICA3NSwgICAgIDAsICAgICAwLAotICAg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyOTAsICAgMTEw
LCAgIDE0OCwgICAxNDgsICAgICAwLCAgICAgMCwKLSAgICAgMTQ4LCAgIDE0OCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0OCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgMTEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgIDE0OCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAxNDgsICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LAotICAgICAgIDUsICAgICA2
LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAxMzEsICAgMTMyLCAgIDEzMywgICAgIDAs
Ci0gICAgIDEzNCwgICAxMzUsICAgMTM2LCAgIDEzNywgICAgMTEsICAgIDEyLCAgICAxMywgICAg
MTQsICAgIDE1LCAgICAxNiwKLSAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwg
ICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLAotICAgICAgMjQsICAgIDI1LCAgICAy
NiwgICAxMzgsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICA5MCwgICAgMzEsCi0gICAg
ICA5MSwgICAgOTIsICAgIDkzLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICA5NSwgICAgIDAsICAg
ICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgIDk2LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEzOSwgICAxNDAsCi0gICAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAxNDEsICAgIDk3LCAgICA5OCwgICAgIDAsICAgIDk5LCAg
ICAgMSwKLSAgICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4
LCAgICAgOSwgICAgMTAsICAgMTMxLAotICAgICAxMzIsICAgMTMzLCAgICAgMCwgICAxMzQsICAg
MTM1LCAgIDEzNiwgICAxMzcsICAgIDExLCAgICAxMiwgICAgMTMsCi0gICAgICAxNCwgICAgMTUs
ICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwK
LSAgICAgICAwLCAgICAgMCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgMTM4LCAgICAy
NywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLCAg
ICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsCi0gICAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAg
IDAsICAgICAwLAotICAgICAgIDAsICAgMTM5LCAgIDIyMSwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgMTQxLCAgICA5NywgICAgOTgsCi0gICAgICAgMCwgICAgOTksICAgICAxLCAgICAg
MiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwKLSAgICAgICA5LCAg
ICAxMCwgICAxMzEsICAgMTMyLCAgIDEzMywgICAgIDAsICAgMTM0LCAgIDEzNSwgICAxMzYsICAg
MTM3LAotICAgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcs
ICAgIDE4LCAgICAxOSwgICAgMjAsCi0gICAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAg
IDAsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgIDEzOCwKLSAgICAgIDI3LCAgICAyOCwg
ICAgMjksICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLAot
ICAgICAgIDAsICAgIDk0LCAgICA5NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgIDk2LCAgICAgMCwgICAgIDAs
ICAgICAwLCAgIDEzOSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAx
NDEsICAgIDk3LCAgICA5OCwgICAgIDAsICAgIDk5LCAgICAgMSwgICAgIDIsICAgICAzLCAgICAg
NCwgICAgIDUsCi0gICAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgMTMxLCAg
IDEzMiwgICAxMzMsICAgICAwLCAgIDEzNCwKLSAgICAgMTM1LCAgIDEzNiwgICAxMzcsICAgIDEx
LCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LAotICAgICAgMTgsICAg
IDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywgICAg
MjQsCi0gICAgICAyNSwgICAgMjYsICAgMTM4LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwg
ICAgOTAsICAgIDMxLCAgICA5MSwKLSAgICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICA5
NCwgICAgOTUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0g
ICAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNzks
ICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQxLCAgICA5NywgICAg
OTgsICAgICAwLCAgICA5OSwgICAgIDEsICAgICAyLAotICAgICAgIDMsICAgICA0LCAgICAgNSwg
ICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgIDEzMSwgICAxMzIsCi0gICAgIDEz
MywgICAgIDAsICAgMTM0LCAgIDEzNSwgICAxMzYsICAgMTM3LCAgICAxMSwgICAgMTIsICAgIDEz
LCAgICAxNCwKLSAgICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAg
IDIxLCAgICAyMiwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgIDIzLCAgICAyNCwgICAgMjUs
ICAgIDI2LCAgIDEzOCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCi0gICAgICA5MCwgICAg
MzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LCAgICAg
MCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0MSwgICAgOTcsICAgIDk4LCAgICAgMCwKLSAg
ICAgIDk5LCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywg
ICAgIDgsICAgICA5LAotICAgICAgMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTEsCi0gICAgICAxMiwgICAgMTMsICAgIDE0LCAg
ICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwKLSAgICAgIDIy
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgIDAs
ICAgIDI3LAotICAgICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwgICAg
OTIsICAgIDkzLCAgICAgMCwgICAgIDAsCi0gICAgICA5NCwgICAgOTUsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk2
LAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAxNDEsCi0gICAgICA5NywgICAgOTgsICAgICAwLCAgICA5OSwgICAgNjAs
ICAgICAyLCAgICAgMywgICAgIDQsICAgICAwLCAgICAgNiwKLSAgICAgICA3LCAgICAgOCwgICAg
IDksICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAg
ICAgIDAsICAgICAwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAg
ICAxNywgICAgMTgsCi0gICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgMjMsICAgIDI0LCAgICAyNSwKLSAgICAgIDI2LCAgICAgMCwgICAgMjcsICAg
IDI4LCAgICAyOSwgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLAotICAgICAgOTMs
ICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLAotICAgICAgIDAsICAgICAw
LCAgICAgMCwgICAgOTcsICAgIDk4LCAgICAgMCwgICAgOTksICAgIDExLCAgICAxMiwgICAgMTMs
Ci0gICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
MjEsICAgIDIyLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwg
ICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAgIDkwLCAgICAz
MSwgICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsCi0gICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLAotICAgICAxNjMsICAgICA4LCAgICAgOSwgICAg
MTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NywgICAgOTgsCi0gICAgICAgMCwg
ICAgOTksICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAg
ICAxOCwKLSAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgIDI1LAotICAgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAg
IDI5LCAgICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwgICAgOTIsCi0gICAgICA5MywgICAgIDAs
ICAgICAwLCAgICA5NCwgICAgOTUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwK
LSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgMjA4
LCAgICA5NywgICAgOTgsICAgICAwLCAgICA5OSwgICAgMTEsICAgIDEyLCAgICAxMywKLSAgICAg
IDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAg
MjIsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI1LCAgICAyNiwg
ICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksCi0gICAgICAzMCwgICAgOTAsICAgIDMxLCAgICA5
MSwgICAgOTIsICAgIDkzLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICA5NSwKLSAgICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgIDk2LCAgICAgMCwgICAgIDAsCi0gICAgIDIyNCwgICAgIDgsICAgICA5LCAgICAxMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk3LCAgICA5OCwKLSAgICAgICAwLCAgICA5OSwg
ICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAot
ICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgMjUsCi0gICAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAg
IDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwKLSAgICAgIDkzLCAgICAgMCwgICAgIDAs
ICAgIDk0LCAgICA5NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk3
LCAgICA5OCwgICAgIDAsICAgIDk5LCAgICAxMSwgICAgMTIsICAgIDEzLAotICAgICAgMTQsICAg
IDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAg
IDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjUsICAgMTc3LCAgICAgMCwg
ICAgMjcsICAgIDI4LCAgICAyOSwKLSAgICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5
MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LAotICAgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0g
ICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTYs
ICAgICAyLCAgICAgMywKLSAgICAgICA0LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgOCwgICAg
IDksICAgIDEwLCAgICAgMCwgICAgOTcsICAgIDk4LAotICAgICAgIDAsICAgIDk5LCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsCi0gICAgICAx
NiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAw
LCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAg
IDI4LCAgICAyOSwgICAgMzAsICAgICAwLAotICAgICAgMzEsICAgICAyLCAgICAgMywgICAgIDQs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsCi0gICAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAx
MiwKLSAgICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgIDIyLAotICAgICAxOTksICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsCi0gICAgICAyOSwgICAgMzAsICAg
ICAwLCAgICAzMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAg
ICAgICAwLCAgICAgMCwgICAgIDAsICAgIDc0LCAgICAgMCwgICAgIDAsICAgICAxLCAgICAgMiwg
ICAgIDMsICAgICA0LAotICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAx
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAg
IDI1MywgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwKLSAgICAgIDE3
LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgIDIzLAotICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAg
MjksICAgIDMwLCAgICAgMCwgICAgMzEsCi0gICAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwg
ICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwKLSAgICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTEsICAgIDEy
LAotICAgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAg
IDIwLCAgICAyMSwgICAgMjIsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywgICAgMjQs
ICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwKLSAgICAgIDI5LCAgICAzMCwgICAg
IDAsICAgIDMxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgMCwgICAgIDAsICAgICAwLAotICAg
ICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1
LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwKLSAgICAgIDIwLCAgICAyMSwgICAgMjIsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjUsICAgIDI2LAotICAgICAgIDAs
ICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAgMCwgICAgMzEsICAgICA4LCAgICAgOSwg
ICAgMTAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgIDExLCAgICAxMiwKLSAgICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAg
ICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLAotICAgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgs
Ci0gICAgICAyOSwgICAgMzAsICAgMjMxLCAgIDIzMiwgICAgIDgsICAgICA5LCAgICAxMCwgICAg
IDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAotICAgICAgMTYsICAgIDE3LCAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAg
ICAgMCwgICAgIDAsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAg
IDMwLCAgICAgMCwKLSAgICAgIDMxCi19OwotCi0jZGVmaW5lIHl5cGFjdF92YWx1ZV9pc19kZWZh
dWx0KFl5c3RhdGUpIFwKLSAgKCEhKChZeXN0YXRlKSA9PSAoLTI2MSkpKQotCi0jZGVmaW5lIHl5
dGFibGVfdmFsdWVfaXNfZXJyb3IoWXl0YWJsZV92YWx1ZSkgXAotICBZWUlEICgwKQotCi1zdGF0
aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5Y2hlY2tbXSA9Ci17Ci0gICAgICAgMCwgICAgMjUsICAg
IDg5LCAgICA4OCwgICAgOTYsICAgIDU3LCAgIDE2MiwgICAgNzMsICAgMTUzLCAgIDEyOCwKLSAg
ICAgIDQwLCAgICAgMCwgICAgIDAsICAgMjU2LCAgICA1OSwgICAgMzksICAgMjc2LCAgICAzNywg
ICAgNTQsICAgIDU1LAotICAgICAgODEsICAgMTA4LCAgICA4OCwgICAgNzMsICAgIDQyLCAgICA0
NSwgICAgNDUsICAgIDQ2LCAgICA3MiwgICAyNjAsCi0gICAgICA4MCwgICAgNzIsICAgIDcyLCAg
ICA1MSwgICAgNzgsICAgIDY1LCAgIDI5NiwgICAgNzgsICAgIDUyLCAgICA1MywKLSAgICAgIDQw
LCAgICAzNiwgICAgNDIsICAgIDY3LCAgIDI3NSwgICAxMzcsICAgIDQ2LCAgICA3NywgICAyOTEs
ICAgIDk0LAotICAgICAgNzgsICAgIDUxLCAgIDI5NSwgICAgODksICAgIDkwLCAgICA4NSwgICAg
NzUsICAgIDQ2LCAgICA0NiwgICAgNzMsCi0gICAgICA4NCwgICAgNzMsICAgIDczLCAgICA3Nywg
ICAgNTksICAgIDY1LCAgICA3MiwgICAgNzIsICAgIDgwLCAgICA0NSwKLSAgICAgIDQ2LCAgICA3
OCwgICAgNzgsICAgIDc4LCAgICA4MSwgICAxNjIsICAgMTYxLCAgICA3NywgICAgIDMsICAgIDc5
LAotICAgICAxNzIsICAgIDc1LCAgIDIwMSwgICAgIDgsICAgICA5LCAgICA4NSwgICAgODMsICAg
IDc4LCAgICA4NSwgICAxNzYsCi0gICAgICA4MSwgICAgIDMsICAgIDMzLCAgICAzNCwgICAgMzUs
ICAgMTYxLCAgICAgOCwgICAgIDksICAgMTI4LCAgICAzNywKLSAgICAgMTMwLCAgICA3OCwgICAx
OTQsICAgIDc4LCAgICA4MSwgICAgNzMsICAgIDgxLCAgICA3MSwgICAgMzMsICAgIDM0LAotICAg
ICAgMzUsICAgIDM2LCAgICAzNywgICAgNzEsICAgMjA2LCAgICA3MywgICAyNjEsICAgICA0LCAg
ICAgNSwgICAgIDYsCi0gICAgICA4OCwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3
LCAgICA5NCwgICAgOTUsICAgMTI4LCAgICA3NSwKLSAgICAgMTMwLCAgIDIxOCwgICAyMTksICAg
IDYxLCAgICA2MiwgICAgNjMsICAgIDQ1LCAgICA0NiwgICAyMjMsICAgIDg2LAotICAgICAgODcs
ICAgMjk3LCAgICA3MCwgICAxMTEsICAgIDgxLCAgICA1NiwgICAgNTcsICAgIDcyLCAgICA3MSwg
ICAxNzMsCi0gICAgIDE4MywgICAxODQsICAgIDgwLCAgIDE1MywgICAgNzgsICAgIDc5LCAgICA3
MiwgICAyMjMsICAgMTg1LCAgIDE4NiwKLSAgICAgMTg3LCAgIDE4OCwgICAgNTgsICAgMTg5LCAg
IDE5MCwgICAyNTAsICAgIDcxLCAgICA2MCwgICAyNjAsICAgIDcxLAotICAgICAgNzQsICAgMjAx
LCAgICA3MSwgICAgODEsICAgIDgxLCAgICA4MSwgICAgNzEsICAgIDc0LCAgICA3NiwgICAgNzMs
Ci0gICAgIDI2NywgICAgNzEsICAgIDczLCAgIDI3NSwgICAyNTAsICAgIDQwLCAgICA3NSwgICAg
NzEsICAgIDc0LCAgICA3NCwKLSAgICAgIDc4LCAgICA3NCwgICAyODQsICAgMTYxLCAgICA3NCwg
ICAgNzEsICAgIDE2LCAgICA3MiwgICAgNzYsICAgIDgxLAotICAgICAgNzIsICAgMjAxLCAgIDI5
NCwgICAyNTUsICAgIDgxLCAgIDE5MSwgICAgODAsICAgMTczLCAgIDE5MiwgICAgNTksCi0gICAg
IDI5NywgICAxOTMsICAgMjEyLCAgIDE4MSwgICAxODIsICAgMTgzLCAgIDE4NCwgICAxODUsICAg
MTg2LCAgIDE4NywKLSAgICAgMTg4LCAgIDE4OSwgICAxOTAsICAgMTkxLCAgIDE5MiwgICAxOTMs
ICAgIDg1LCAgICA2NiwgICAgODUsICAgICA1LAotICAgICAxMzAsICAgMjk1LCAgIDI1NywgICAy
MTIsICAgMjUxLCAgIDI1NywgICAyNzUsICAgIDQ2LCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDI3OCwgICAyMjMsICAgMjU2
LCAgIDI1NywgICAgLTEsICAgIC0xLAotICAgICAyNjAsICAgMjYxLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgMjc1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwK
LSAgICAgIC0xLCAgICAtMSwgICAyNTAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgMjkxLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
IDI5NSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsCi0gICAgICAgNywgICAgIDgsICAgICA5
LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAtMSwKLSAgICAg
IDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAg
MjUsICAgIDI2LAotICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsCi0gICAgICAzNywgICAgMzgsICAgIDM5LCAgICA0
MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwKLSAgICAgIDQ3LCAg
ICA0OCwgICAgNDksICAgIC0xLCAgICAtMSwgICAgNTIsICAgIDUzLCAgICAtMSwgICAgLTEsICAg
IC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
NzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc1LCAgICA3NiwKLSAgICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICA4MSwgICAgODIsICAgIDgzLCAgICAtMSwgICAgODUsICAgICAzLAot
ICAgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDEx
LCAgICAxMiwgICAgMTMsCi0gICAgICAxNCwgICAgMTUsICAgIC0xLCAgICAxNywgICAgMTgsICAg
IDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywKLSAgICAgIDI0LCAgICAyNSwgICAgMjYs
ICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLAotICAgICAg
LTEsICAgIC0xLCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0
MiwgICAgNDMsCi0gICAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAg
ICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAg
LTEsCi0gICAgICAtMSwgICAgNzUsICAgIDc2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgODEsICAgIDgyLCAgICA4MywKLSAgICAgIC0xLCAgICA4NSwgICAgIDMsICAgICA0LCAgICAg
NSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLAotICAgICAgMTEsICAgIDEyLCAg
ICAxMywgICAgMTQsICAgIDE1LCAgICAtMSwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsCi0g
ICAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgs
ICAgIDI5LCAgICAzMCwKLSAgICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
MzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLAotICAgICAgNDEsICAgIDQyLCAgICA0Mywg
ICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgLTEsCi0gICAgICAt
MSwgICAgNTIsICAgIDUzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgNzEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDc1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICA4MSwgICAg
ODIsICAgIDgzLCAgICAtMSwgICAgODUsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAg
NywKLSAgICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAg
ICAxNSwgICAgLTEsICAgIDE3LAotICAgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIy
LCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsCi0gICAgICAyOCwgICAgMjksICAg
IDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywKLSAg
ICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwg
ICAgNDYsICAgIDQ3LAotICAgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1
MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3NSwgICAgLTEs
ICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODEsICAgIDgyLCAgICA4MywgICAg
LTEsICAgIDg1LCAgICAgMywgICAgIDQsCi0gICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwg
ICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwKLSAgICAgIDE1LCAgICAt
MSwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0
LAotICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAg
IDMyLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzks
ICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwKLSAgICAgIDQ1LCAgICA0NiwgICAg
NDcsICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMsICAgIC0xLAotICAg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDgxLCAgICA4MiwgICAgODMsICAgIC0xLAotICAgICAgODUs
ICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwg
ICAgMTEsCi0gICAgICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAyMSwKLSAgICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAg
ICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLAotICAgICAgMzIsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEs
Ci0gICAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAg
NDksICAgIC0xLCAgICAtMSwKLSAgICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsCi0gICAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICA4MSwKLSAgICAgIDgyLCAgICA4MywgICAgLTEsICAgIDg1LCAgICAgMywgICAgIDQs
ICAgICA1LCAgICAgNiwgICAgLTEsICAgICA4LAotICAgICAgIDksICAgIDEwLCAgICAxMSwgICAg
MTIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwg
ICAgLTEsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAg
ICAyOCwKLSAgICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAzNiwgICAgMzcsICAgIDM4LAotICAgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsICAg
IDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsCi0gICAgICA0OSwgICAgLTEs
ICAgIC0xLCAgICA1MiwgICAgNTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwK
LSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0x
LCAgICA4MiwgICAgODMsICAgIC0xLCAgICA4NSwgICAgMjEsICAgIDIyLCAgICAyMywKLSAgICAg
IDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAg
MzIsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwg
ICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsCi0gICAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0
NywgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywKLSAgICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDcxLCAgICAtMSwgICAgLTEsCi0gICAgICA3NCwgICAgMTAsICAgIDExLCAgICAxMiwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgyLCAgICA4MywKLSAgICAgIC0xLCAgICA4NSwg
ICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LAot
ICAgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgMzgsCi0gICAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAg
IDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwKLSAgICAgIDQ5LCAgICAtMSwgICAgLTEs
ICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgODEsICAgIDgy
LCAgICA4MywgICAgLTEsICAgIDg1LCAgICAyMSwgICAgMjIsICAgIDIzLAotICAgICAgMjQsICAg
IDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAg
LTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwg
ICAgNDEsICAgIDQyLCAgICA0MywKLSAgICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0
OCwgICAgNDksICAgIC0xLCAgICAtMSwgICAgNTIsICAgIDUzLAotICAgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0g
ICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEs
ICAgIC0xLCAgICAtMSwKLSAgICAgIDc0LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgODIsICAgIDgzLAotICAgICAgLTEsICAgIDg1LCAgICAyMSwg
ICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCi0gICAgICAy
OSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAzOCwKLSAgICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAg
IDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LAotICAgICAgNDksICAgIC0xLCAgICAtMSwgICAgNTIs
ICAgIDUzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwKLSAgICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDEwLCAg
ICAxMSwgICAgMTIsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODIsICAgIDgz
LCAgICAtMSwgICAgODUsICAgIDIxLCAgICAyMiwgICAgMjMsCi0gICAgICAyNCwgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwKLSAg
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwg
ICAgNDIsICAgIDQzLAotICAgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0
OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MSwgICAgIDQs
ICAgICA1LAotICAgICAgIDYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDEwLCAgICAxMSwgICAg
MTIsICAgIC0xLCAgICA4MiwgICAgODMsCi0gICAgICAtMSwgICAgODUsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwKLSAgICAgIDI2LCAgICAy
NywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0x
LAotICAgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsICAg
IDQzLCAgICA0NCwgICAgLTEsCi0gICAgICA0NiwgICAgIDQsICAgICA1LCAgICAgNiwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgMTAsICAgIDExLCAgICAxMiwKLSAgICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjEsICAgIDIyLAotICAg
ICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAg
ICAzMSwgICAgMzIsCi0gICAgICA3NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4
LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwKLSAgICAgIDQzLCAgICA0NCwgICAgLTEsICAg
IDQ2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgIDAsICAgIC0xLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwg
ICAgIDYsCi0gICAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc2LCAg
ICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAotICAgICAgMjcsICAgIDI4
LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYs
Ci0gICAgICAzNywgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAg
NDQsICAgIC0xLCAgICA0NiwKLSAgICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywg
ICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLAotICAgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsCi0gICAg
ICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAg
IDMxLCAgICAzMiwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgs
ICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLAotICAgICAgNDMsICAgIDQ0LCAgICAtMSwgICAg
NDYsICAgICA0LCAgICAgNSwgICAgIDYsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAxMCwg
ICAgMTEsICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwKLSAgICAgIC0xLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2
LCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksCi0gICAgICAtMSwgICAgNDEs
ICAgIDQyLCAgICA0MywgICAgNDQsICAgIC0xLCAgICA0NiwgICAgMTAsICAgIDExLCAgICAxMiwK
LSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgMjEsICAgIDIyLAotICAgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAg
ICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsCi0gICAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwKLSAgICAg
IDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAg
LTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwg
ICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsCi0gICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAy
OSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAg
ICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAg
IC0xLAotICAgICAgNDYKLX07Ci0KLS8qIFlZU1RPU1tTVEFURS1OVU1dIC0tIFRoZSAoaW50ZXJu
YWwgbnVtYmVyIG9mIHRoZSkgYWNjZXNzaW5nCi0gICBzeW1ib2wgb2Ygc3RhdGUgU1RBVEUtTlVN
LiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlzdG9zW10gPQotewotICAgICAgIDAs
ICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwg
ICAgMTEsCi0gICAgICAxMiwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAy
NiwgICAgMjcsICAgIDI4LCAgICAyOSwKLSAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDM2LCAg
ICAzNywgICAgMzgsICAgIDM5LCAgICA0MSwgICAgNDIsICAgIDQzLAotICAgICAgNDQsICAgIDQ2
LCAgIDEyNiwgICAxMjcsICAgMTI4LCAgIDEyOSwgICAxMzAsICAgMTM1LCAgIDEzNiwgICAxMzcs
Ci0gICAgIDEzOCwgICAxMzksICAgMTQwLCAgIDE0MSwgICAxNDIsICAgMTQzLCAgIDE3NSwgICAx
NzYsICAgMTc3LCAgICAzNywKLSAgICAgIDQ1LCAgIDE0MCwgICAgNDUsICAgIDQ2LCAgICA3NSwg
ICAgOTYsICAgIDgxLCAgIDE3OCwgICAgNzIsICAgIDc4LAotICAgICAgIDMsICAgIDMzLCAgICAz
NCwgICAgMzUsICAgMTMyLCAgIDEzMywgICAxMzgsICAgIDc4LCAgICA4MSwgICAgNDUsCi0gICAg
ICA5NiwgICAxMzksICAgMTQxLCAgICA3MywgICAgIDAsICAgMTc2LCAgIDE0MSwgICAxNDUsICAg
IDc1LCAgICA3NSwKLSAgICAgMTYxLCAgIDEzMiwgICAxMzEsICAgMTM0LCAgIDEzOSwgICAxMzMs
ICAgIDk2LCAgICA3MSwgICAgNzMsICAgIDgwLAotICAgICAgNDUsICAgIDQ3LCAgICA0OCwgICAg
NDksICAgIDUyLCAgICA1MywgICAgNzEsICAgIDgyLCAgICA4MywgICAgODUsCi0gICAgICA5Nywg
ICAgOTgsICAgIDk5LCAgIDEwMSwgICAxMDIsICAgMTAzLCAgIDEwNCwgICAxMDUsICAgMTA2LCAg
IDEwNywKLSAgICAgMTA4LCAgIDEwOSwgICAxMTAsICAgMTExLCAgIDExMiwgICAxMTMsICAgMTE0
LCAgIDExNSwgICAxMTYsICAgMTE3LAotICAgICAxMTgsICAgMTE5LCAgIDEyMCwgICAxMjEsICAg
MTI1LCAgIDE0MiwgICAgODEsICAgMTM5LCAgIDE0NiwgICAxNDcsCi0gICAgIDE0NCwgICAgMTMs
ICAgIDE0LCAgICAxNSwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDQwLCAgICA3NSwK
LSAgICAgIDc2LCAgICA4MSwgICAxMDgsICAgMTIxLCAgIDEyMiwgICAxMjQsICAgMTI2LCAgIDEy
NywgICAxNDIsICAgMTUxLAotICAgICAxNTIsICAgMTUzLCAgIDE1NCwgICAxNjIsICAgMTYzLCAg
IDE2NCwgICAxNjcsICAgMTc0LCAgICA5NiwgICAxMzEsCi0gICAgIDEzNCwgICAgNzMsICAgIDgw
LCAgICA3NCwgICAxMjUsICAgMTIyLCAgIDE1MCwgICAxMDgsICAgMTA4LCAgIDEyNCwKLSAgICAg
IDUyLCAgICA1MywgICAgNzMsICAgIDc3LCAgICA3MiwgICAgNzIsICAgIDc4LCAgICAzOSwgICAx
MjIsICAgIDcxLAotICAgICAxMDgsICAgIDg2LCAgICA4NywgICAgODMsICAgIDg1LCAgICA1NCwg
ICAgNTUsICAgIDg5LCAgICA5MCwgICAgNTYsCi0gICAgICA1NywgICAgNTgsICAgIDYwLCAgICA1
OSwgICAgOTQsICAgIDc0LCAgICA5NiwgICAxNDgsICAgMTQ5LCAgICA3NiwKLSAgICAgMTQ3LCAg
IDE0NiwgICAgODEsICAgIDgxLCAgIDE2OSwgICAgNzEsICAgIDcxLCAgICA4MSwgICAgODEsICAg
MTI0LAotICAgICAgNzEsICAgIDc2LCAgIDE1NSwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNzAs
ICAgIDgwLCAgIDEyMywgICAgNzgsCi0gICAgICA4MSwgICAgNzYsICAgMTUyLCAgICA3MywgICAg
NzQsICAgMTI1LCAgIDE1MCwgICAgNzQsICAgIDcyLCAgIDEwMCwKLSAgICAgMTI0LCAgICA0NSwg
ICAgNDYsICAgIDk2LCAgIDEwMywgICAxMjIsICAgMTA4LCAgIDEwOCwgICAxMTAsICAgMTEwLAot
ICAgICAxMTIsICAgMTEyLCAgIDExMiwgICAxMTIsICAgMTEzLCAgIDExMywgICAxMTcsICAgMTE4
LCAgIDExOSwgICAxMjQsCi0gICAgICA3MywgICAgNzgsICAgIDgxLCAgICA3NiwgICAxNTgsICAg
MTU5LCAgIDE2MCwgICAxNzAsICAgMTI0LCAgICA4MSwKLSAgICAgMTY4LCAgIDE2MiwgICAxMjIs
ICAgMTIyLCAgIDEyNSwgICAgNzQsICAgIDc0LCAgICA3OSwgICAxMjUsICAgMTQ5LAotICAgICAg
NDAsICAgMTYxLCAgIDE1MywgICAxNTEsICAgMTYzLCAgIDE3MSwgICAgNzIsICAgMTI0LCAgIDEz
NywgICAxNjYsCi0gICAgIDE1NiwgICAgNzQsICAgMTIyLCAgICA3NCwgICAgNzEsICAgMTY2LCAg
IDE3MiwgICAxNzMsICAgMTU4LCAgIDE2NSwKLSAgICAgIDk2LCAgICA3MiwgICAgNzYsICAgMTI0
LCAgICA4MSwgICAgNzIsICAgIDE2LCAgICA4MCwgICAxNTMsICAgMTU3LAotICAgICAxNjEsICAg
IDcyLCAgIDEyNCwgICAxNTcsICAgMTU4LCAgIDE1MCwgICAgODEKLX07Ci0KLSNkZWZpbmUgeXll
cnJvawkJKHl5ZXJyc3RhdHVzID0gMCkKLSNkZWZpbmUgeXljbGVhcmluCSh5eWNoYXIgPSBZWUVN
UFRZKQotI2RlZmluZSBZWUVNUFRZCQkoLTIpCi0jZGVmaW5lIFlZRU9GCQkwCi0KLSNkZWZpbmUg
WVlBQ0NFUFQJZ290byB5eWFjY2VwdGxhYgotI2RlZmluZSBZWUFCT1JUCQlnb3RvIHl5YWJvcnRs
YWIKLSNkZWZpbmUgWVlFUlJPUgkJZ290byB5eWVycm9ybGFiCi0KLQotLyogTGlrZSBZWUVSUk9S
IGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3IuICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseQot
ICAgdG8gZWFzZSB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1lYW5pbmcgb2YgWVlFUlJPUiwg
Zm9yIEdDQy4KLSAgIE9uY2UgR0NDIHZlcnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJzaW9uIDEs
IHRoaXMgY2FuIGdvLiAgSG93ZXZlciwKLSAgIFlZRkFJTCBhcHBlYXJzIHRvIGJlIGluIHVzZS4g
IE5ldmVydGhlbGVzcywgaXQgaXMgZm9ybWFsbHkgZGVwcmVjYXRlZAotICAgaW4gQmlzb24gMi40
LjIncyBORVdTIGVudHJ5LCB3aGVyZSBhIHBsYW4gdG8gcGhhc2UgaXQgb3V0IGlzCi0gICBkaXNj
dXNzZWQuICAqLwotCi0jZGVmaW5lIFlZRkFJTAkJZ290byB5eWVycmxhYgotI2lmIGRlZmluZWQg
WVlGQUlMCi0gIC8qIFRoaXMgaXMgaGVyZSB0byBzdXBwcmVzcyB3YXJuaW5ncyBmcm9tIHRoZSBH
Q0MgY3BwJ3MKLSAgICAgLVd1bnVzZWQtbWFjcm9zLiAgTm9ybWFsbHkgd2UgZG9uJ3Qgd29ycnkg
YWJvdXQgdGhhdCB3YXJuaW5nLCBidXQKLSAgICAgc29tZSB1c2VycyBkbywgYW5kIHdlIHdhbnQg
dG8gbWFrZSBpdCBlYXN5IGZvciB1c2VycyB0byByZW1vdmUKLSAgICAgWVlGQUlMIHVzZXMsIHdo
aWNoIHdpbGwgcHJvZHVjZSB3YXJuaW5ncyBmcm9tIEJpc29uIDIuNS4gICovCi0jZW5kaWYKLQot
I2RlZmluZSBZWVJFQ09WRVJJTkcoKSAgKCEheXllcnJzdGF0dXMpCi0KLSNkZWZpbmUgWVlCQUNL
VVAoVG9rZW4sIFZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1kbyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICBpZiAoeXljaGFyID09IFlZRU1QVFkpICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB5eWNoYXIgPSAoVG9rZW4pOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeXlsdmFsID0gKFZhbHVl
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIFlZUE9Q
U1RBQ0sgKHl5bGVuKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICB5eXN0YXRlID0gKnl5c3NwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgZ290byB5eWJhY2t1cDsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGVsc2UgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHl5
ZXJyb3IgKCZ5eWxsb2MsIGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1
cCIpKTsgXAotICAgICAgWVlFUlJPUjsJCQkJCQkJXAotICAgIH0JCQkJCQkJCVwKLXdoaWxlIChZ
WUlEICgwKSkKLQotLyogRXJyb3IgdG9rZW4gbnVtYmVyICovCi0jZGVmaW5lIFlZVEVSUk9SCTEK
LSNkZWZpbmUgWVlFUlJDT0RFCTI1NgotCi0KLS8qIFlZTExPQ19ERUZBVUxUIC0tIFNldCBDVVJS
RU5UIHRvIHNwYW4gZnJvbSBSSFNbMV0gdG8gUkhTW05dLgotICAgSWYgTiBpcyAwLCB0aGVuIHNl
dCBDVVJSRU5UIHRvIHRoZSBlbXB0eSBsb2NhdGlvbiB3aGljaCBlbmRzCi0gICB0aGUgcHJldmlv
dXMgc3ltYm9sOiBSSFNbMF0gKGFsd2F5cyBkZWZpbmVkKS4gICovCi0KLSNpZm5kZWYgWVlMTE9D
X0RFRkFVTFQKLSMgZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJocywgTikgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmIChZ
WUlEIChOKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAoQ3VycmVudCkuZmlyc3RfbGluZSAg
ID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3RfbGluZTsgICAgICAgIFwKLSAgICAgICAgICAoQ3Vy
cmVudCkuZmlyc3RfY29sdW1uID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3RfY29sdW1uOyAgICAg
IFwKLSAgICAgICAgICAoQ3VycmVudCkubGFzdF9saW5lICAgID0gWVlSSFNMT0MgKFJocywgTiku
bGFzdF9saW5lOyAgICAgICAgIFwKLSAgICAgICAgICAoQ3VycmVudCkubGFzdF9jb2x1bW4gID0g
WVlSSFNMT0MgKFJocywgTikubGFzdF9jb2x1bW47ICAgICAgIFwKLSAgICAgICAgfSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAoQ3VycmVudCku
Zmlyc3RfbGluZSAgID0gKEN1cnJlbnQpLmxhc3RfbGluZSAgID0gICAgICAgICAgICAgIFwKLSAg
ICAgICAgICAgIFlZUkhTTE9DIChSaHMsIDApLmxhc3RfbGluZTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0gKEN1cnJl
bnQpLmxhc3RfY29sdW1uID0gICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFlZUkhTTE9DIChS
aHMsIDApLmxhc3RfY29sdW1uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICB3aGlsZSAoWVlJRCAoMCkpCi0jZW5kaWYKLQotI2RlZmluZSBZWVJI
U0xPQyhSaHMsIEspICgoUmhzKVtLXSkKLQotCi0vKiBZWV9MT0NBVElPTl9QUklOVCAtLSBQcmlu
dCB0aGUgbG9jYXRpb24gb24gdGhlIHN0cmVhbS4KLSAgIFRoaXMgbWFjcm8gd2FzIG5vdCBtYW5k
YXRlZCBvcmlnaW5hbGx5OiBkZWZpbmUgb25seSBpZiB3ZSBrbm93Ci0gICB3ZSB3b24ndCBicmVh
ayB1c2VyIGNvZGU6IHdoZW4gdGhlc2UgYXJlIHRoZSBsb2NhdGlvbnMgd2Uga25vdy4gICovCi0K
LSNpZm5kZWYgWVlfTE9DQVRJT05fUFJJTlQKLSMgaWYgZGVmaW5lZCBZWUxUWVBFX0lTX1RSSVZJ
QUwgJiYgWVlMVFlQRV9JU19UUklWSUFMCi0KLS8qIFByaW50ICpZWUxPQ1Agb24gWVlPLiAgUHJp
dmF0ZSwgZG8gbm90IHJlbHkgb24gaXRzIGV4aXN0ZW5jZS4gKi8KLQotX19hdHRyaWJ1dGVfXygo
X191bnVzZWRfXykpCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVO
Q19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQot
c3RhdGljIHVuc2lnbmVkCi15eV9sb2NhdGlvbl9wcmludF8gKEZJTEUgKnl5bywgWVlMVFlQRSBj
b25zdCAqIGNvbnN0IHl5bG9jcCkKLSNlbHNlCi1zdGF0aWMgdW5zaWduZWQKLXl5X2xvY2F0aW9u
X3ByaW50XyAoeXlvLCB5eWxvY3ApCi0gICAgRklMRSAqeXlvOwotICAgIFlZTFRZUEUgY29uc3Qg
KiBjb25zdCB5eWxvY3A7Ci0jZW5kaWYKLXsKLSAgdW5zaWduZWQgcmVzID0gMDsKLSAgaW50IGVu
ZF9jb2wgPSAwICE9IHl5bG9jcC0+bGFzdF9jb2x1bW4gPyB5eWxvY3AtPmxhc3RfY29sdW1uIC0g
MSA6IDA7Ci0gIGlmICgwIDw9IHl5bG9jcC0+Zmlyc3RfbGluZSkKLSAgICB7Ci0gICAgICByZXMg
Kz0gZnByaW50ZiAoeXlvLCAiJWQiLCB5eWxvY3AtPmZpcnN0X2xpbmUpOwotICAgICAgaWYgKDAg
PD0geXlsb2NwLT5maXJzdF9jb2x1bW4pCi0gICAgICAgIHJlcyArPSBmcHJpbnRmICh5eW8sICIu
JWQiLCB5eWxvY3AtPmZpcnN0X2NvbHVtbik7Ci0gICAgfQotICBpZiAoMCA8PSB5eWxvY3AtPmxh
c3RfbGluZSkKLSAgICB7Ci0gICAgICBpZiAoeXlsb2NwLT5maXJzdF9saW5lIDwgeXlsb2NwLT5s
YXN0X2xpbmUpCi0gICAgICAgIHsKLSAgICAgICAgICByZXMgKz0gZnByaW50ZiAoeXlvLCAiLSVk
IiwgeXlsb2NwLT5sYXN0X2xpbmUpOwotICAgICAgICAgIGlmICgwIDw9IGVuZF9jb2wpCi0gICAg
ICAgICAgICByZXMgKz0gZnByaW50ZiAoeXlvLCAiLiVkIiwgZW5kX2NvbCk7Ci0gICAgICAgIH0K
LSAgICAgIGVsc2UgaWYgKDAgPD0gZW5kX2NvbCAmJiB5eWxvY3AtPmZpcnN0X2NvbHVtbiA8IGVu
ZF9jb2wpCi0gICAgICAgIHJlcyArPSBmcHJpbnRmICh5eW8sICItJWQiLCBlbmRfY29sKTsKLSAg
ICB9Ci0gIHJldHVybiByZXM7Ci0gfQotCi0jICBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmls
ZSwgTG9jKSAgICAgICAgICBcCi0gIHl5X2xvY2F0aW9uX3ByaW50XyAoRmlsZSwgJihMb2MpKQot
Ci0jIGVsc2UKLSMgIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpICgodm9pZCkg
MCkKLSMgZW5kaWYKLSNlbmRpZgotCi0KLS8qIFlZTEVYIC0tIGNhbGxpbmcgYHl5bGV4JyB3aXRo
IHRoZSByaWdodCBhcmd1bWVudHMuICAqLwotI2lmZGVmIFlZTEVYX1BBUkFNCi0jIGRlZmluZSBZ
WUxFWCB5eWxleCAoJnl5bHZhbCwgJnl5bGxvYywgWVlMRVhfUEFSQU0pCi0jZWxzZQotIyBkZWZp
bmUgWVlMRVggeXlsZXggKCZ5eWx2YWwsICZ5eWxsb2MpCi0jZW5kaWYKLQotLyogRW5hYmxlIGRl
YnVnZ2luZyBpZiByZXF1ZXN0ZWQuICAqLwotI2lmIFlZREVCVUcKLQotIyBpZm5kZWYgWVlGUFJJ
TlRGCi0jICBpbmNsdWRlIDxzdGRpby5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNF
ICovCi0jICBkZWZpbmUgWVlGUFJJTlRGIGZwcmludGYKLSMgZW5kaWYKLQotIyBkZWZpbmUgWVlE
UFJJTlRGKEFyZ3MpCQkJXAotZG8gewkJCQkJCVwKLSAgaWYgKHl5ZGVidWcpCQkJCQlcCi0gICAg
WVlGUFJJTlRGIEFyZ3M7CQkJCVwKLX0gd2hpbGUgKFlZSUQgKDApKQotCi0jIGRlZmluZSBZWV9T
WU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikJCQkgIFwKLWRvIHsJCQkJ
CQkJCQkgIFwKLSAgaWYgKHl5ZGVidWcpCQkJCQkJCQkgIFwKLSAgICB7CQkJCQkJCQkJICBcCi0g
ICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiVzICIsIFRpdGxlKTsJCQkJCSAgXAotICAgICAgeXlf
c3ltYm9sX3ByaW50IChzdGRlcnIsCQkJCQkJICBcCi0JCSAgVHlwZSwgVmFsdWUsIExvY2F0aW9u
LCBjb250ZXh0KTsgXAotICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwkJCQkJCSAgXAot
ICAgIH0JCQkJCQkJCQkgIFwKLX0gd2hpbGUgKFlZSUQgKDApKQotCi0KLS8qLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAg
fAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLypBUkdTVVNFRCovCi0j
aWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwg
ZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIHZvaWQKLXl5
X3N5bWJvbF92YWx1ZV9wcmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUg
Y29uc3QgKiBjb25zdCB5eXZhbHVlcCwgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jYXRpb25w
LCBUUGFyc2VDb250ZXh0KiBjb250ZXh0KQotI2Vsc2UKLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xf
dmFsdWVfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCwgY29u
dGV4dCkKLSAgICBGSUxFICp5eW91dHB1dDsKLSAgICBpbnQgeXl0eXBlOwotICAgIFlZU1RZUEUg
Y29uc3QgKiBjb25zdCB5eXZhbHVlcDsKLSAgICBZWUxUWVBFIGNvbnN0ICogY29uc3QgeXlsb2Nh
dGlvbnA7Ci0gICAgVFBhcnNlQ29udGV4dCogY29udGV4dDsKLSNlbmRpZgotewotICBGSUxFICp5
eW8gPSB5eW91dHB1dDsKLSAgWVlVU0UgKHl5byk7Ci0gIGlmICgheXl2YWx1ZXApCi0gICAgcmV0
dXJuOwotICBZWVVTRSAoeXlsb2NhdGlvbnApOwotICBZWVVTRSAoY29udGV4dCk7Ci0jIGlmZGVm
IFlZUFJJTlQKLSAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKLSAgICBZWVBSSU5UICh5eW91dHB1
dCwgeXl0b2tudW1beXl0eXBlXSwgKnl5dmFsdWVwKTsKLSMgZWxzZQotICBZWVVTRSAoeXlvdXRw
dXQpOwotIyBlbmRpZgotICBzd2l0Y2ggKHl5dHlwZSkKLSAgICB7Ci0gICAgICBkZWZhdWx0Ogot
ICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS4KLXwgUHJpbnQgdGhpcyBzeW1ib2wgb24gWVlPVVRQVVQuICB8Ci1gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVm
aW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZp
bmVkIF9NU0NfVkVSKQotc3RhdGljIHZvaWQKLXl5X3N5bWJvbF9wcmludCAoRklMRSAqeXlvdXRw
dXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcCwgWVlMVFlQRSBj
b25zdCAqIGNvbnN0IHl5bG9jYXRpb25wLCBUUGFyc2VDb250ZXh0KiBjb250ZXh0KQotI2Vsc2UK
LXN0YXRpYyB2b2lkCi15eV9zeW1ib2xfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVw
LCB5eWxvY2F0aW9ucCwgY29udGV4dCkKLSAgICBGSUxFICp5eW91dHB1dDsKLSAgICBpbnQgeXl0
eXBlOwotICAgIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcDsKLSAgICBZWUxUWVBFIGNv
bnN0ICogY29uc3QgeXlsb2NhdGlvbnA7Ci0gICAgVFBhcnNlQ29udGV4dCogY29udGV4dDsKLSNl
bmRpZgotewotICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQotICAgIFlZRlBSSU5URiAoeXlvdXRw
dXQsICJ0b2tlbiAlcyAoIiwgeXl0bmFtZVt5eXR5cGVdKTsKLSAgZWxzZQotICAgIFlZRlBSSU5U
RiAoeXlvdXRwdXQsICJudGVybSAlcyAoIiwgeXl0bmFtZVt5eXR5cGVdKTsKLQotICBZWV9MT0NB
VElPTl9QUklOVCAoeXlvdXRwdXQsICp5eWxvY2F0aW9ucCk7Ci0gIFlZRlBSSU5URiAoeXlvdXRw
dXQsICI6ICIpOwotICB5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5
dmFsdWVwLCB5eWxvY2F0aW9ucCwgY29udGV4dCk7Ci0gIFlZRlBSSU5URiAoeXlvdXRwdXQsICIp
Iik7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eV9zdGFja19wcmludCAtLSBQcmludCB0aGUgc3Rh
dGUgc3RhY2sgZnJvbSBpdHMgQk9UVE9NIHVwIHRvIGl0cyB8Ci18IFRPUCAoaW5jbHVkZWQpLiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLWAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLwotCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19f
IFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3Rh
dGljIHZvaWQKLXl5X3N0YWNrX3ByaW50ICh5eXR5cGVfaW50MTYgKnl5Ym90dG9tLCB5eXR5cGVf
aW50MTYgKnl5dG9wKQotI2Vsc2UKLXN0YXRpYyB2b2lkCi15eV9zdGFja19wcmludCAoeXlib3R0
b20sIHl5dG9wKQotICAgIHl5dHlwZV9pbnQxNiAqeXlib3R0b207Ci0gICAgeXl0eXBlX2ludDE2
ICp5eXRvcDsKLSNlbmRpZgotewotICBZWUZQUklOVEYgKHN0ZGVyciwgIlN0YWNrIG5vdyIpOwot
ICBmb3IgKDsgeXlib3R0b20gPD0geXl0b3A7IHl5Ym90dG9tKyspCi0gICAgewotICAgICAgaW50
IHl5Ym90ID0gKnl5Ym90dG9tOwotICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgJWQiLCB5eWJv
dCk7Ci0gICAgfQotICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7Ci19Ci0KLSMgZGVmaW5lIFlZ
X1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKQkJCQlcCi1kbyB7CQkJCQkJCQlcCi0gIGlmICh5eWRl
YnVnKQkJCQkJCQlcCi0gICAgeXlfc3RhY2tfcHJpbnQgKChCb3R0b20pLCAoVG9wKSk7CQkJCVwK
LX0gd2hpbGUgKFlZSUQgKDApKQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLgotfCBSZXBvcnQgdGhhdCB0aGUgWVlSVUxFIGlzIGdvaW5nIHRv
IGJlIHJlZHVjZWQuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKi8KLQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZV
TkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikK
LXN0YXRpYyB2b2lkCi15eV9yZWR1Y2VfcHJpbnQgKFlZU1RZUEUgKnl5dnNwLCBZWUxUWVBFICp5
eWxzcCwgaW50IHl5cnVsZSwgVFBhcnNlQ29udGV4dCogY29udGV4dCkKLSNlbHNlCi1zdGF0aWMg
dm9pZAoteXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgeXlsc3AsIHl5cnVsZSwgY29udGV4dCkKLSAg
ICBZWVNUWVBFICp5eXZzcDsKLSAgICBZWUxUWVBFICp5eWxzcDsKLSAgICBpbnQgeXlydWxlOwot
ICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQ7Ci0jZW5kaWYKLXsKLSAgaW50IHl5bnJocyA9IHl5
cjJbeXlydWxlXTsKLSAgaW50IHl5aTsKLSAgdW5zaWduZWQgbG9uZyBpbnQgeXlsbm8gPSB5eXJs
aW5lW3l5cnVsZV07Ci0gIFlZRlBSSU5URiAoc3RkZXJyLCAiUmVkdWNpbmcgc3RhY2sgYnkgcnVs
ZSAlZCAobGluZSAlbHUpOlxuIiwKLQkgICAgIHl5cnVsZSAtIDEsIHl5bG5vKTsKLSAgLyogVGhl
IHN5bWJvbHMgYmVpbmcgcmVkdWNlZC4gICovCi0gIGZvciAoeXlpID0gMDsgeXlpIDwgeXlucmhz
OyB5eWkrKykKLSAgICB7Ci0gICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAgICQlZCA9ICIsIHl5
aSArIDEpOwotICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsIHl5cmhzW3l5cHJoc1t5eXJ1
bGVdICsgeXlpXSwKLQkJICAgICAgICYoeXl2c3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQotCQkg
ICAgICAgLCAmKHl5bHNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkJCSAgICAgICAsIGNvbnRleHQp
OwotICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwotICAgIH0KLX0KLQotIyBkZWZpbmUg
WVlfUkVEVUNFX1BSSU5UKFJ1bGUpCQlcCi1kbyB7CQkJCQlcCi0gIGlmICh5eWRlYnVnKQkJCQlc
Ci0gICAgeXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgeXlsc3AsIFJ1bGUsIGNvbnRleHQpOyBcCi19
IHdoaWxlIChZWUlEICgwKSkKLQotLyogTm9uemVybyBtZWFucyBwcmludCBwYXJzZSB0cmFjZS4g
IEl0IGlzIGxlZnQgdW5pbml0aWFsaXplZCBzbyB0aGF0Ci0gICBtdWx0aXBsZSBwYXJzZXJzIGNh
biBjb2V4aXN0LiAgKi8KLWludCB5eWRlYnVnOwotI2Vsc2UgLyogIVlZREVCVUcgKi8KLSMgZGVm
aW5lIFlZRFBSSU5URihBcmdzKQotIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBl
LCBWYWx1ZSwgTG9jYXRpb24pCi0jIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkK
LSMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQotI2VuZGlmIC8qICFZWURFQlVHICovCi0K
LQotLyogWVlJTklUREVQVEggLS0gaW5pdGlhbCBzaXplIG9mIHRoZSBwYXJzZXIncyBzdGFja3Mu
ICAqLwotI2lmbmRlZglZWUlOSVRERVBUSAotIyBkZWZpbmUgWVlJTklUREVQVEggMjAwCi0jZW5k
aWYKLQotLyogWVlNQVhERVBUSCAtLSBtYXhpbXVtIHNpemUgdGhlIHN0YWNrcyBjYW4gZ3JvdyB0
byAoZWZmZWN0aXZlIG9ubHkKLSAgIGlmIHRoZSBidWlsdC1pbiBzdGFjayBleHRlbnNpb24gbWV0
aG9kIGlzIHVzZWQpLgotCi0gICBEbyBub3QgbWFrZSB0aGlzIHZhbHVlIHRvbyBsYXJnZTsgdGhl
IHJlc3VsdHMgYXJlIHVuZGVmaW5lZCBpZgotICAgWVlTVEFDS19BTExPQ19NQVhJTVVNIDwgWVlT
VEFDS19CWVRFUyAoWVlNQVhERVBUSCkKLSAgIGV2YWx1YXRlZCB3aXRoIGluZmluaXRlLXByZWNp
c2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMuICAqLwotCi0jaWZuZGVmIFlZTUFYREVQVEgKLSMgZGVm
aW5lIFlZTUFYREVQVEggMTAwMDAKLSNlbmRpZgotCi0KLSNpZiBZWUVSUk9SX1ZFUkJPU0UKLQot
IyBpZm5kZWYgeXlzdHJsZW4KLSMgIGlmIGRlZmluZWQgX19HTElCQ19fICYmIGRlZmluZWQgX1NU
UklOR19ICi0jICAgZGVmaW5lIHl5c3RybGVuIHN0cmxlbgotIyAgZWxzZQotLyogUmV0dXJuIHRo
ZSBsZW5ndGggb2YgWVlTVFIuICAqLwotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQg
X19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBf
TVNDX1ZFUikKLXN0YXRpYyBZWVNJWkVfVAoteXlzdHJsZW4gKGNvbnN0IGNoYXIgKnl5c3RyKQot
I2Vsc2UKLXN0YXRpYyBZWVNJWkVfVAoteXlzdHJsZW4gKHl5c3RyKQotICAgIGNvbnN0IGNoYXIg
Knl5c3RyOwotI2VuZGlmCi17Ci0gIFlZU0laRV9UIHl5bGVuOwotICBmb3IgKHl5bGVuID0gMDsg
eXlzdHJbeXlsZW5dOyB5eWxlbisrKQotICAgIGNvbnRpbnVlOwotICByZXR1cm4geXlsZW47Ci19
Ci0jICBlbmRpZgotIyBlbmRpZgotCi0jIGlmbmRlZiB5eXN0cGNweQotIyAgaWYgZGVmaW5lZCBf
X0dMSUJDX18gJiYgZGVmaW5lZCBfU1RSSU5HX0ggJiYgZGVmaW5lZCBfR05VX1NPVVJDRQotIyAg
IGRlZmluZSB5eXN0cGNweSBzdHBjcHkKLSMgIGVsc2UKLS8qIENvcHkgWVlTUkMgdG8gWVlERVNU
LCByZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHRlcm1pbmF0aW5nICdcMCcgaW4KLSAgIFlZ
REVTVC4gICovCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19f
IFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3Rh
dGljIGNoYXIgKgoteXlzdHBjcHkgKGNoYXIgKnl5ZGVzdCwgY29uc3QgY2hhciAqeXlzcmMpCi0j
ZWxzZQotc3RhdGljIGNoYXIgKgoteXlzdHBjcHkgKHl5ZGVzdCwgeXlzcmMpCi0gICAgY2hhciAq
eXlkZXN0OwotICAgIGNvbnN0IGNoYXIgKnl5c3JjOwotI2VuZGlmCi17Ci0gIGNoYXIgKnl5ZCA9
IHl5ZGVzdDsKLSAgY29uc3QgY2hhciAqeXlzID0geXlzcmM7Ci0KLSAgd2hpbGUgKCgqeXlkKysg
PSAqeXlzKyspICE9ICdcMCcpCi0gICAgY29udGludWU7Ci0KLSAgcmV0dXJuIHl5ZCAtIDE7Ci19
Ci0jICBlbmRpZgotIyBlbmRpZgotCi0jIGlmbmRlZiB5eXRuYW1lcnIKLS8qIENvcHkgdG8gWVlS
RVMgdGhlIGNvbnRlbnRzIG9mIFlZU1RSIGFmdGVyIHN0cmlwcGluZyBhd2F5IHVubmVjZXNzYXJ5
Ci0gICBxdW90ZXMgYW5kIGJhY2tzbGFzaGVzLCBzbyB0aGF0IGl0J3Mgc3VpdGFibGUgZm9yIHl5
ZXJyb3IuICBUaGUKLSAgIGhldXJpc3RpYyBpcyB0aGF0IGRvdWJsZS1xdW90aW5nIGlzIHVubmVj
ZXNzYXJ5IHVubGVzcyB0aGUgc3RyaW5nCi0gICBjb250YWlucyBhbiBhcG9zdHJvcGhlLCBhIGNv
bW1hLCBvciBiYWNrc2xhc2ggKG90aGVyIHRoYW4KLSAgIGJhY2tzbGFzaC1iYWNrc2xhc2gpLiAg
WVlTVFIgaXMgdGFrZW4gZnJvbSB5eXRuYW1lLiAgSWYgWVlSRVMgaXMKLSAgIG51bGwsIGRvIG5v
dCBjb3B5OyBpbnN0ZWFkLCByZXR1cm4gdGhlIGxlbmd0aCBvZiB3aGF0IHRoZSByZXN1bHQKLSAg
IHdvdWxkIGhhdmUgYmVlbi4gICovCi1zdGF0aWMgWVlTSVpFX1QKLXl5dG5hbWVyciAoY2hhciAq
eXlyZXMsIGNvbnN0IGNoYXIgKnl5c3RyKQotewotICBpZiAoKnl5c3RyID09ICciJykKLSAgICB7
Ci0gICAgICBZWVNJWkVfVCB5eW4gPSAwOwotICAgICAgY2hhciBjb25zdCAqeXlwID0geXlzdHI7
Ci0KLSAgICAgIGZvciAoOzspCi0Jc3dpdGNoICgqKyt5eXApCi0JICB7Ci0JICBjYXNlICdcJyc6
Ci0JICBjYXNlICcsJzoKLQkgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOwotCi0JICBjYXNl
ICdcXCc6Ci0JICAgIGlmICgqKyt5eXAgIT0gJ1xcJykKLQkgICAgICBnb3RvIGRvX25vdF9zdHJp
cF9xdW90ZXM7Ci0JICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCi0JICBkZWZhdWx0OgotCSAgICBp
ZiAoeXlyZXMpCi0JICAgICAgeXlyZXNbeXluXSA9ICp5eXA7Ci0JICAgIHl5bisrOwotCSAgICBi
cmVhazsKLQotCSAgY2FzZSAnIic6Ci0JICAgIGlmICh5eXJlcykKLQkgICAgICB5eXJlc1t5eW5d
ID0gJ1wwJzsKLQkgICAgcmV0dXJuIHl5bjsKLQkgIH0KLSAgICBkb19ub3Rfc3RyaXBfcXVvdGVz
OiA7Ci0gICAgfQotCi0gIGlmICghIHl5cmVzKQotICAgIHJldHVybiB5eXN0cmxlbiAoeXlzdHIp
OwotCi0gIHJldHVybiB5eXN0cGNweSAoeXlyZXMsIHl5c3RyKSAtIHl5cmVzOwotfQotIyBlbmRp
ZgotCi0vKiBDb3B5IGludG8gKllZTVNHLCB3aGljaCBpcyBvZiBzaXplICpZWU1TR19BTExPQywg
YW4gZXJyb3IgbWVzc2FnZQotICAgYWJvdXQgdGhlIHVuZXhwZWN0ZWQgdG9rZW4gWVlUT0tFTiBm
b3IgdGhlIHN0YXRlIHN0YWNrIHdob3NlIHRvcCBpcwotICAgWVlTU1AuCi0KLSAgIFJldHVybiAw
IGlmICpZWU1TRyB3YXMgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4uICBSZXR1cm4gMSBpZiAqWVlNU0cg
aXMKLSAgIG5vdCBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUgbWVzc2FnZS4gIEluIHRoYXQgY2Fz
ZSwgYWxzbyBzZXQKLSAgICpZWU1TR19BTExPQyB0byB0aGUgcmVxdWlyZWQgbnVtYmVyIG9mIGJ5
dGVzLiAgUmV0dXJuIDIgaWYgdGhlCi0gICByZXF1aXJlZCBudW1iZXIgb2YgYnl0ZXMgaXMgdG9v
IGxhcmdlIHRvIHN0b3JlLiAgKi8KLXN0YXRpYyBpbnQKLXl5c3ludGF4X2Vycm9yIChZWVNJWkVf
VCAqeXltc2dfYWxsb2MsIGNoYXIgKip5eW1zZywKLSAgICAgICAgICAgICAgICB5eXR5cGVfaW50
MTYgKnl5c3NwLCBpbnQgeXl0b2tlbikKLXsKLSAgWVlTSVpFX1QgeXlzaXplMCA9IHl5dG5hbWVy
ciAoWVlfTlVMTCwgeXl0bmFtZVt5eXRva2VuXSk7Ci0gIFlZU0laRV9UIHl5c2l6ZSA9IHl5c2l6
ZTA7Ci0gIGVudW0geyBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNID0gNSB9OwotICAvKiBJ
bnRlcm5hdGlvbmFsaXplZCBmb3JtYXQgc3RyaW5nLiAqLwotICBjb25zdCBjaGFyICp5eWZvcm1h
dCA9IFlZX05VTEw7Ci0gIC8qIEFyZ3VtZW50cyBvZiB5eWZvcm1hdC4gKi8KLSAgY2hhciBjb25z
dCAqeXlhcmdbWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTV07Ci0gIC8qIE51bWJlciBvZiBy
ZXBvcnRlZCB0b2tlbnMgKG9uZSBmb3IgdGhlICJ1bmV4cGVjdGVkIiwgb25lIHBlcgotICAgICAi
ZXhwZWN0ZWQiKS4gKi8KLSAgaW50IHl5Y291bnQgPSAwOwotCi0gIC8qIFRoZXJlIGFyZSBtYW55
IHBvc3NpYmlsaXRpZXMgaGVyZSB0byBjb25zaWRlcjoKLSAgICAgLSBBc3N1bWUgWVlGQUlMIGlz
IG5vdCB1c2VkLiAgSXQncyB0b28gZmxhd2VkIHRvIGNvbnNpZGVyLiAgU2VlCi0gICAgICAgPGh0
dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNvbi1wYXRjaGVzLzIwMDktMTIvbXNn
MDAwMjQuaHRtbD4KLSAgICAgICBmb3IgZGV0YWlscy4gIFlZRVJST1IgaXMgZmluZSBhcyBpdCBk
b2VzIG5vdCBpbnZva2UgdGhpcwotICAgICAgIGZ1bmN0aW9uLgotICAgICAtIElmIHRoaXMgc3Rh
dGUgaXMgYSBjb25zaXN0ZW50IHN0YXRlIHdpdGggYSBkZWZhdWx0IGFjdGlvbiwgdGhlbgotICAg
ICAgIHRoZSBvbmx5IHdheSB0aGlzIGZ1bmN0aW9uIHdhcyBpbnZva2VkIGlzIGlmIHRoZSBkZWZh
dWx0IGFjdGlvbgotICAgICAgIGlzIGFuIGVycm9yIGFjdGlvbi4gIEluIHRoYXQgY2FzZSwgZG9u
J3QgY2hlY2sgZm9yIGV4cGVjdGVkCi0gICAgICAgdG9rZW5zIGJlY2F1c2UgdGhlcmUgYXJlIG5v
bmUuCi0gICAgIC0gVGhlIG9ubHkgd2F5IHRoZXJlIGNhbiBiZSBubyBsb29rYWhlYWQgcHJlc2Vu
dCAoaW4geXljaGFyKSBpcyBpZgotICAgICAgIHRoaXMgc3RhdGUgaXMgYSBjb25zaXN0ZW50IHN0
YXRlIHdpdGggYSBkZWZhdWx0IGFjdGlvbi4gIFRodXMsCi0gICAgICAgZGV0ZWN0aW5nIHRoZSBh
YnNlbmNlIG9mIGEgbG9va2FoZWFkIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZXJtaW5lCi0gICAgICAg
dGhhdCB0aGVyZSBpcyBubyB1bmV4cGVjdGVkIG9yIGV4cGVjdGVkIHRva2VuIHRvIHJlcG9ydC4g
IEluIHRoYXQKLSAgICAgICBjYXNlLCBqdXN0IHJlcG9ydCBhIHNpbXBsZSAic3ludGF4IGVycm9y
Ii4KLSAgICAgLSBEb24ndCBhc3N1bWUgdGhlcmUgaXNuJ3QgYSBsb29rYWhlYWQganVzdCBiZWNh
dXNlIHRoaXMgc3RhdGUgaXMgYQotICAgICAgIGNvbnNpc3RlbnQgc3RhdGUgd2l0aCBhIGRlZmF1
bHQgYWN0aW9uLiAgVGhlcmUgbWlnaHQgaGF2ZSBiZWVuIGEKLSAgICAgICBwcmV2aW91cyBpbmNv
bnNpc3RlbnQgc3RhdGUsIGNvbnNpc3RlbnQgc3RhdGUgd2l0aCBhIG5vbi1kZWZhdWx0Ci0gICAg
ICAgYWN0aW9uLCBvciB1c2VyIHNlbWFudGljIGFjdGlvbiB0aGF0IG1hbmlwdWxhdGVkIHl5Y2hh
ci4KLSAgICAgLSBPZiBjb3Vyc2UsIHRoZSBleHBlY3RlZCB0b2tlbiBsaXN0IGRlcGVuZHMgb24g
c3RhdGVzIHRvIGhhdmUKLSAgICAgICBjb3JyZWN0IGxvb2thaGVhZCBpbmZvcm1hdGlvbiwgYW5k
IGl0IGRlcGVuZHMgb24gdGhlIHBhcnNlciBub3QKLSAgICAgICB0byBwZXJmb3JtIGV4dHJhIHJl
ZHVjdGlvbnMgYWZ0ZXIgZmV0Y2hpbmcgYSBsb29rYWhlYWQgZnJvbSB0aGUKLSAgICAgICBzY2Fu
bmVyIGFuZCBiZWZvcmUgZGV0ZWN0aW5nIGEgc3ludGF4IGVycm9yLiAgVGh1cywgc3RhdGUgbWVy
Z2luZwotICAgICAgIChmcm9tIExBTFIgb3IgSUVMUikgYW5kIGRlZmF1bHQgcmVkdWN0aW9ucyBj
b3JydXB0IHRoZSBleHBlY3RlZAotICAgICAgIHRva2VuIGxpc3QuICBIb3dldmVyLCB0aGUgbGlz
dCBpcyBjb3JyZWN0IGZvciBjYW5vbmljYWwgTFIgd2l0aAotICAgICAgIG9uZSBleGNlcHRpb246
IGl0IHdpbGwgc3RpbGwgY29udGFpbiBhbnkgdG9rZW4gdGhhdCB3aWxsIG5vdCBiZQotICAgICAg
IGFjY2VwdGVkIGR1ZSB0byBhbiBlcnJvciBhY3Rpb24gaW4gYSBsYXRlciBzdGF0ZS4KLSAgKi8K
LSAgaWYgKHl5dG9rZW4gIT0gWVlFTVBUWSkKLSAgICB7Ci0gICAgICBpbnQgeXluID0geXlwYWN0
Wyp5eXNzcF07Ci0gICAgICB5eWFyZ1t5eWNvdW50KytdID0geXl0bmFtZVt5eXRva2VuXTsKLSAg
ICAgIGlmICgheXlwYWN0X3ZhbHVlX2lzX2RlZmF1bHQgKHl5bikpCi0gICAgICAgIHsKLSAgICAg
ICAgICAvKiBTdGFydCBZWVggYXQgLVlZTiBpZiBuZWdhdGl2ZSB0byBhdm9pZCBuZWdhdGl2ZSBp
bmRleGVzIGluCi0gICAgICAgICAgICAgWVlDSEVDSy4gIEluIG90aGVyIHdvcmRzLCBza2lwIHRo
ZSBmaXJzdCAtWVlOIGFjdGlvbnMgZm9yCi0gICAgICAgICAgICAgdGhpcyBzdGF0ZSBiZWNhdXNl
IHRoZXkgYXJlIGRlZmF1bHQgYWN0aW9ucy4gICovCi0gICAgICAgICAgaW50IHl5eGJlZ2luID0g
eXluIDwgMCA/IC15eW4gOiAwOwotICAgICAgICAgIC8qIFN0YXkgd2l0aGluIGJvdW5kcyBvZiBi
b3RoIHl5Y2hlY2sgYW5kIHl5dG5hbWUuICAqLwotICAgICAgICAgIGludCB5eWNoZWNrbGltID0g
WVlMQVNUIC0geXluICsgMTsKLSAgICAgICAgICBpbnQgeXl4ZW5kID0geXljaGVja2xpbSA8IFlZ
TlRPS0VOUyA/IHl5Y2hlY2tsaW0gOiBZWU5UT0tFTlM7Ci0gICAgICAgICAgaW50IHl5eDsKLQot
ICAgICAgICAgIGZvciAoeXl4ID0geXl4YmVnaW47IHl5eCA8IHl5eGVuZDsgKyt5eXgpCi0gICAg
ICAgICAgICBpZiAoeXljaGVja1t5eXggKyB5eW5dID09IHl5eCAmJiB5eXggIT0gWVlURVJST1IK
LSAgICAgICAgICAgICAgICAmJiAheXl0YWJsZV92YWx1ZV9pc19lcnJvciAoeXl0YWJsZVt5eXgg
KyB5eW5dKSkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICh5eWNvdW50ID09
IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0pCi0gICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHl5Y291bnQgPSAxOwotICAgICAgICAgICAgICAgICAgICB5eXNpemUg
PSB5eXNpemUwOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB5eWFyZ1t5eWNvdW50KytdID0geXl0bmFtZVt5eXhdOwotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIFlZU0laRV9UIHl5c2l6ZTEgPSB5eXNp
emUgKyB5eXRuYW1lcnIgKFlZX05VTEwsIHl5dG5hbWVbeXl4XSk7Ci0gICAgICAgICAgICAgICAg
ICBpZiAoISAoeXlzaXplIDw9IHl5c2l6ZTEKLSAgICAgICAgICAgICAgICAgICAgICAgICAmJiB5
eXNpemUxIDw9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiAyOwotICAgICAgICAgICAgICAgICAgeXlzaXplID0geXlzaXplMTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICBzd2l0Y2ggKHl5
Y291bnQpCi0gICAgewotIyBkZWZpbmUgWVlDQVNFXyhOLCBTKSAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICBjYXNlIE46ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgeXlmb3JtYXQgPSBTOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgYnJlYWsKLSAg
ICAgIFlZQ0FTRV8oMCwgWVlfKCJzeW50YXggZXJyb3IiKSk7Ci0gICAgICBZWUNBU0VfKDEsIFlZ
Xygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIikpOwotICAgICAgWVlDQVNFXygyLCBZWV8o
InN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIikpOwotICAgICAgWVlD
QVNFXygzLCBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9y
ICVzIikpOwotICAgICAgWVlDQVNFXyg0LCBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAl
cywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIikpOwotICAgICAgWVlDQVNFXyg1LCBZWV8oInN5
bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIG9yICVz
IikpOwotIyB1bmRlZiBZWUNBU0VfCi0gICAgfQotCi0gIHsKLSAgICBZWVNJWkVfVCB5eXNpemUx
ID0geXlzaXplICsgeXlzdHJsZW4gKHl5Zm9ybWF0KTsKLSAgICBpZiAoISAoeXlzaXplIDw9IHl5
c2l6ZTEgJiYgeXlzaXplMSA8PSBZWVNUQUNLX0FMTE9DX01BWElNVU0pKQotICAgICAgcmV0dXJu
IDI7Ci0gICAgeXlzaXplID0geXlzaXplMTsKLSAgfQotCi0gIGlmICgqeXltc2dfYWxsb2MgPCB5
eXNpemUpCi0gICAgewotICAgICAgKnl5bXNnX2FsbG9jID0gMiAqIHl5c2l6ZTsKLSAgICAgIGlm
ICghICh5eXNpemUgPD0gKnl5bXNnX2FsbG9jCi0gICAgICAgICAgICAgJiYgKnl5bXNnX2FsbG9j
IDw9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkpCi0gICAgICAgICp5eW1zZ19hbGxvYyA9IFlZU1RB
Q0tfQUxMT0NfTUFYSU1VTTsKLSAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAvKiBBdm9pZCBz
cHJpbnRmLCBhcyB0aGF0IGluZnJpbmdlcyBvbiB0aGUgdXNlcidzIG5hbWUgc3BhY2UuCi0gICAg
IERvbid0IGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIGV2ZW4gaWYgdGhlIHRyYW5zbGF0aW9uCi0g
ICAgIHByb2R1Y2VkIGEgc3RyaW5nIHdpdGggdGhlIHdyb25nIG51bWJlciBvZiAiJXMicy4gICov
Ci0gIHsKLSAgICBjaGFyICp5eXAgPSAqeXltc2c7Ci0gICAgaW50IHl5aSA9IDA7Ci0gICAgd2hp
bGUgKCgqeXlwID0gKnl5Zm9ybWF0KSAhPSAnXDAnKQotICAgICAgaWYgKCp5eXAgPT0gJyUnICYm
IHl5Zm9ybWF0WzFdID09ICdzJyAmJiB5eWkgPCB5eWNvdW50KQotICAgICAgICB7Ci0gICAgICAg
ICAgeXlwICs9IHl5dG5hbWVyciAoeXlwLCB5eWFyZ1t5eWkrK10pOwotICAgICAgICAgIHl5Zm9y
bWF0ICs9IDI7Ci0gICAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHl5
cCsrOwotICAgICAgICAgIHl5Zm9ybWF0Kys7Ci0gICAgICAgIH0KLSAgfQotICByZXR1cm4gMDsK
LX0KLSNlbmRpZiAvKiBZWUVSUk9SX1ZFUkJPU0UgKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgUmVsZWFzZSB0aGUgbWVtb3J5IGFzc29j
aWF0ZWQgdG8gdGhpcyBzeW1ib2wuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKkFSR1NVU0VEKi8KLSNpZiAoZGVmaW5lZCBfX1NURENf
XyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVz
IHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlkZXN0cnVjdCAoY29uc3QgY2hh
ciAqeXltc2csIGludCB5eXR5cGUsIFlZU1RZUEUgKnl5dmFsdWVwLCBZWUxUWVBFICp5eWxvY2F0
aW9ucCwgVFBhcnNlQ29udGV4dCogY29udGV4dCkKLSNlbHNlCi1zdGF0aWMgdm9pZAoteXlkZXN0
cnVjdCAoeXltc2csIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wLCBjb250ZXh0KQotICAg
IGNvbnN0IGNoYXIgKnl5bXNnOwotICAgIGludCB5eXR5cGU7Ci0gICAgWVlTVFlQRSAqeXl2YWx1
ZXA7Ci0gICAgWVlMVFlQRSAqeXlsb2NhdGlvbnA7Ci0gICAgVFBhcnNlQ29udGV4dCogY29udGV4
dDsKLSNlbmRpZgotewotICBZWVVTRSAoeXl2YWx1ZXApOwotICBZWVVTRSAoeXlsb2NhdGlvbnAp
OwotICBZWVVTRSAoY29udGV4dCk7Ci0KLSAgaWYgKCF5eW1zZykKLSAgICB5eW1zZyA9ICJEZWxl
dGluZyI7Ci0gIFlZX1NZTUJPTF9QUklOVCAoeXltc2csIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9j
YXRpb25wKTsKLQotICBzd2l0Y2ggKHl5dHlwZSkKLSAgICB7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotCi0KLQotLyotLS0tLS0tLS0tLgotfCB5eXBhcnNl
LiAgfAotYC0tLS0tLS0tLS0qLwotCi0jaWZkZWYgWVlQQVJTRV9QQVJBTQotI2lmIChkZWZpbmVk
IF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19j
cGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLWludAoteXlwYXJzZSAodm9pZCAqWVlQQVJT
RV9QQVJBTSkKLSNlbHNlCi1pbnQKLXl5cGFyc2UgKFlZUEFSU0VfUEFSQU0pCi0gICAgdm9pZCAq
WVlQQVJTRV9QQVJBTTsKLSNlbmRpZgotI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovCi0jaWYg
KGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVm
aW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotaW50Ci15eXBhcnNlIChUUGFy
c2VDb250ZXh0KiBjb250ZXh0KQotI2Vsc2UKLWludAoteXlwYXJzZSAoY29udGV4dCkKLSAgICBU
UGFyc2VDb250ZXh0KiBjb250ZXh0OwotI2VuZGlmCi0jZW5kaWYKLXsKLS8qIFRoZSBsb29rYWhl
YWQgc3ltYm9sLiAgKi8KLWludCB5eWNoYXI7Ci0KLQotI2lmIGRlZmluZWQgX19HTlVDX18gJiYg
NDA3IDw9IF9fR05VQ19fICogMTAwICsgX19HTlVDX01JTk9SX18KLS8qIFN1cHByZXNzIGFuIGlu
Y29ycmVjdCBkaWFnbm9zdGljIGFib3V0IHl5bHZhbCBiZWluZyB1bmluaXRpYWxpemVkLiAgKi8K
LSMgZGVmaW5lIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOIFwKLSAgICBfUHJh
Z21hICgiR0NDIGRpYWdub3N0aWMgcHVzaCIpIFwKLSAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0
aWMgaWdub3JlZCBcIi1XdW5pbml0aWFsaXplZFwiIilcCi0gICAgX1ByYWdtYSAoIkdDQyBkaWFn
bm9zdGljIGlnbm9yZWQgXCItV21heWJlLXVuaW5pdGlhbGl6ZWRcIiIpCi0jIGRlZmluZSBZWV9J
R05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9FTkQgXAotICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25v
c3RpYyBwb3AiKQotI2Vsc2UKLS8qIERlZmF1bHQgdmFsdWUgdXNlZCBmb3IgaW5pdGlhbGl6YXRp
b24sIGZvciBwYWNpZnlpbmcgb2xkZXIgR0NDcwotICAgb3Igbm9uLUdDQyBjb21waWxlcnMuICAq
Lwotc3RhdGljIFlZU1RZUEUgeXl2YWxfZGVmYXVsdDsKLSMgZGVmaW5lIFlZX0lOSVRJQUxfVkFM
VUUoVmFsdWUpID0gVmFsdWUKLSNlbmRpZgotc3RhdGljIFlZTFRZUEUgeXlsb2NfZGVmYXVsdAot
IyBpZiBkZWZpbmVkIFlZTFRZUEVfSVNfVFJJVklBTCAmJiBZWUxUWVBFX0lTX1RSSVZJQUwKLSAg
PSB7IDEsIDEsIDEsIDEgfQotIyBlbmRpZgotOwotI2lmbmRlZiBZWV9JR05PUkVfTUFZQkVfVU5J
TklUSUFMSVpFRF9CRUdJTgotIyBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURf
QkVHSU4KLSMgZGVmaW5lIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORAotI2VuZGlm
Ci0jaWZuZGVmIFlZX0lOSVRJQUxfVkFMVUUKLSMgZGVmaW5lIFlZX0lOSVRJQUxfVkFMVUUoVmFs
dWUpIC8qIE5vdGhpbmcuICovCi0jZW5kaWYKLQotLyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRo
ZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8KLVlZU1RZUEUgeXlsdmFsIFlZX0lOSVRJQUxfVkFMVUUo
eXl2YWxfZGVmYXVsdCk7Ci0KLS8qIExvY2F0aW9uIGRhdGEgZm9yIHRoZSBsb29rYWhlYWQgc3lt
Ym9sLiAgKi8KLVlZTFRZUEUgeXlsbG9jID0geXlsb2NfZGVmYXVsdDsKLQotCi0gICAgLyogTnVt
YmVyIG9mIHN5bnRheCBlcnJvcnMgc28gZmFyLiAgKi8KLSAgICBpbnQgeXluZXJyczsKLQotICAg
IGludCB5eXN0YXRlOwotICAgIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVy
cm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLwotICAgIGludCB5eWVycnN0YXR1czsKLQotICAgIC8q
IFRoZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOgotICAgICAgIGB5eXNzJzogcmVsYXRlZCB0byBz
dGF0ZXMuCi0gICAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNlbWFudGljIHZhbHVlcy4KLSAgICAg
ICBgeXlscyc6IHJlbGF0ZWQgdG8gbG9jYXRpb25zLgotCi0gICAgICAgUmVmZXIgdG8gdGhlIHN0
YWNrcyB0aHJvdWdoIHNlcGFyYXRlIHBvaW50ZXJzLCB0byBhbGxvdyB5eW92ZXJmbG93Ci0gICAg
ICAgdG8gcmVhbGxvY2F0ZSB0aGVtIGVsc2V3aGVyZS4gICovCi0KLSAgICAvKiBUaGUgc3RhdGUg
c3RhY2suICAqLwotICAgIHl5dHlwZV9pbnQxNiB5eXNzYVtZWUlOSVRERVBUSF07Ci0gICAgeXl0
eXBlX2ludDE2ICp5eXNzOwotICAgIHl5dHlwZV9pbnQxNiAqeXlzc3A7Ci0KLSAgICAvKiBUaGUg
c2VtYW50aWMgdmFsdWUgc3RhY2suICAqLwotICAgIFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhd
OwotICAgIFlZU1RZUEUgKnl5dnM7Ci0gICAgWVlTVFlQRSAqeXl2c3A7Ci0KLSAgICAvKiBUaGUg
bG9jYXRpb24gc3RhY2suICAqLwotICAgIFlZTFRZUEUgeXlsc2FbWVlJTklUREVQVEhdOwotICAg
IFlZTFRZUEUgKnl5bHM7Ci0gICAgWVlMVFlQRSAqeXlsc3A7Ci0KLSAgICAvKiBUaGUgbG9jYXRp
b25zIHdoZXJlIHRoZSBlcnJvciBzdGFydGVkIGFuZCBlbmRlZC4gICovCi0gICAgWVlMVFlQRSB5
eWVycm9yX3JhbmdlWzNdOwotCi0gICAgWVlTSVpFX1QgeXlzdGFja3NpemU7Ci0KLSAgaW50IHl5
bjsKLSAgaW50IHl5cmVzdWx0OwotICAvKiBMb29rYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwg
KHRyYW5zbGF0ZWQpIHRva2VuIG51bWJlci4gICovCi0gIGludCB5eXRva2VuID0gMDsKLSAgLyog
VGhlIHZhcmlhYmxlcyB1c2VkIHRvIHJldHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24g
ZnJvbSB0aGUKLSAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KLSAgWVlTVFlQRSB5eXZhbDsKLSAg
WVlMVFlQRSB5eWxvYzsKLQotI2lmIFlZRVJST1JfVkVSQk9TRQotICAvKiBCdWZmZXIgZm9yIGVy
cm9yIG1lc3NhZ2VzLCBhbmQgaXRzIGFsbG9jYXRlZCBzaXplLiAgKi8KLSAgY2hhciB5eW1zZ2J1
ZlsxMjhdOwotICBjaGFyICp5eW1zZyA9IHl5bXNnYnVmOwotICBZWVNJWkVfVCB5eW1zZ19hbGxv
YyA9IHNpemVvZiB5eW1zZ2J1ZjsKLSNlbmRpZgotCi0jZGVmaW5lIFlZUE9QU1RBQ0soTikgICAo
eXl2c3AgLT0gKE4pLCB5eXNzcCAtPSAoTiksIHl5bHNwIC09IChOKSkKLQotICAvKiBUaGUgbnVt
YmVyIG9mIHN5bWJvbHMgb24gdGhlIFJIUyBvZiB0aGUgcmVkdWNlZCBydWxlLgotICAgICBLZWVw
IHRvIHplcm8gd2hlbiBubyBzeW1ib2wgc2hvdWxkIGJlIHBvcHBlZC4gICovCi0gIGludCB5eWxl
biA9IDA7Ci0KLSAgeXlzc3AgPSB5eXNzID0geXlzc2E7Ci0gIHl5dnNwID0geXl2cyA9IHl5dnNh
OwotICB5eWxzcCA9IHl5bHMgPSB5eWxzYTsKLSAgeXlzdGFja3NpemUgPSBZWUlOSVRERVBUSDsK
LQotICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFydGluZyBwYXJzZVxuIikpOwotCi0gIHl5c3Rh
dGUgPSAwOwotICB5eWVycnN0YXR1cyA9IDA7Ci0gIHl5bmVycnMgPSAwOwotICB5eWNoYXIgPSBZ
WUVNUFRZOyAvKiBDYXVzZSBhIHRva2VuIHRvIGJlIHJlYWQuICAqLwotICB5eWxzcFswXSA9IHl5
bGxvYzsKLSAgZ290byB5eXNldHN0YXRlOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXluZXdzdGF0ZSAtLSBQdXNo
IGEgbmV3IHN0YXRlLCB3aGljaCBpcyBmb3VuZCBpbiB5eXN0YXRlLiAgfAotYC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0geXlu
ZXdzdGF0ZToKLSAgLyogSW4gYWxsIGNhc2VzLCB3aGVuIHlvdSBnZXQgaGVyZSwgdGhlIHZhbHVl
IGFuZCBsb2NhdGlvbiBzdGFja3MKLSAgICAgaGF2ZSBqdXN0IGJlZW4gcHVzaGVkLiAgU28gcHVz
aGluZyBhIHN0YXRlIGhlcmUgZXZlbnMgdGhlIHN0YWNrcy4gICovCi0gIHl5c3NwKys7Ci0KLSB5
eXNldHN0YXRlOgotICAqeXlzc3AgPSB5eXN0YXRlOwotCi0gIGlmICh5eXNzICsgeXlzdGFja3Np
emUgLSAxIDw9IHl5c3NwKQotICAgIHsKLSAgICAgIC8qIEdldCB0aGUgY3VycmVudCB1c2VkIHNp
emUgb2YgdGhlIHRocmVlIHN0YWNrcywgaW4gZWxlbWVudHMuICAqLwotICAgICAgWVlTSVpFX1Qg
eXlzaXplID0geXlzc3AgLSB5eXNzICsgMTsKLQotI2lmZGVmIHl5b3ZlcmZsb3cKLSAgICAgIHsK
LQkvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suICBVc2UgY29w
aWVzIG9mCi0JICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9u
ZXMgaW50bwotCSAgIG1lbW9yeS4gICovCi0JWVlTVFlQRSAqeXl2czEgPSB5eXZzOwotCXl5dHlw
ZV9pbnQxNiAqeXlzczEgPSB5eXNzOwotCVlZTFRZUEUgKnl5bHMxID0geXlsczsKLQotCS8qIEVh
Y2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQot
CSAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJl
IGEKLQkgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0
aGF0IG1pZ2h0Ci0JICAgYmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cgaXMgYSBtYWNyby4gICov
Ci0JeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCi0JCSAgICAmeXlzczEsIHl5
c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKLQkJICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgq
eXl2c3ApLAotCQkgICAgJnl5bHMxLCB5eXNpemUgKiBzaXplb2YgKCp5eWxzcCksCi0JCSAgICAm
eXlzdGFja3NpemUpOwotCi0JeXlscyA9IHl5bHMxOwotCXl5c3MgPSB5eXNzMTsKLQl5eXZzID0g
eXl2czE7Ci0gICAgICB9Ci0jZWxzZSAvKiBubyB5eW92ZXJmbG93ICovCi0jIGlmbmRlZiBZWVNU
QUNLX1JFTE9DQVRFCi0gICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwotIyBlbHNlCi0gICAgICAv
KiBFeHRlbmQgdGhlIHN0YWNrIG91ciBvd24gd2F5LiAgKi8KLSAgICAgIGlmIChZWU1BWERFUFRI
IDw9IHl5c3RhY2tzaXplKQotCWdvdG8geXlleGhhdXN0ZWRsYWI7Ci0gICAgICB5eXN0YWNrc2l6
ZSAqPSAyOwotICAgICAgaWYgKFlZTUFYREVQVEggPCB5eXN0YWNrc2l6ZSkKLQl5eXN0YWNrc2l6
ZSA9IFlZTUFYREVQVEg7Ci0KLSAgICAgIHsKLQl5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsK
LQl1bmlvbiB5eWFsbG9jICp5eXB0ciA9Ci0JICAodW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FM
TE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOwotCWlmICghIHl5cHRyKQotCSAgZ290
byB5eWV4aGF1c3RlZGxhYjsKLQlZWVNUQUNLX1JFTE9DQVRFICh5eXNzX2FsbG9jLCB5eXNzKTsK
LQlZWVNUQUNLX1JFTE9DQVRFICh5eXZzX2FsbG9jLCB5eXZzKTsKLQlZWVNUQUNLX1JFTE9DQVRF
ICh5eWxzX2FsbG9jLCB5eWxzKTsKLSMgIHVuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKLQlpZiAoeXlz
czEgIT0geXlzc2EpCi0JICBZWVNUQUNLX0ZSRUUgKHl5c3MxKTsKLSAgICAgIH0KLSMgZW5kaWYK
LSNlbmRpZiAvKiBubyB5eW92ZXJmbG93ICovCi0KLSAgICAgIHl5c3NwID0geXlzcyArIHl5c2l6
ZSAtIDE7Ci0gICAgICB5eXZzcCA9IHl5dnMgKyB5eXNpemUgLSAxOwotICAgICAgeXlsc3AgPSB5
eWxzICsgeXlzaXplIC0gMTsKLQotICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhY2sgc2l6
ZSBpbmNyZWFzZWQgdG8gJWx1XG4iLAotCQkgICh1bnNpZ25lZCBsb25nIGludCkgeXlzdGFja3Np
emUpKTsKLQotICAgICAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCi0JWVlB
Qk9SVDsKLSAgICB9Ci0KLSAgWVlEUFJJTlRGICgoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRc
biIsIHl5c3RhdGUpKTsKLQotICBpZiAoeXlzdGF0ZSA9PSBZWUZJTkFMKQotICAgIFlZQUNDRVBU
OwotCi0gIGdvdG8geXliYWNrdXA7Ci0KLS8qLS0tLS0tLS0tLS0uCi18IHl5YmFja3VwLiAgfAot
YC0tLS0tLS0tLS0tKi8KLXl5YmFja3VwOgotCi0gIC8qIERvIGFwcHJvcHJpYXRlIHByb2Nlc3Np
bmcgZ2l2ZW4gdGhlIGN1cnJlbnQgc3RhdGUuICBSZWFkIGEKLSAgICAgbG9va2FoZWFkIHRva2Vu
IGlmIHdlIG5lZWQgb25lIGFuZCBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KLQotICAvKiBG
aXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9va2Fo
ZWFkIHRva2VuLiAgKi8KLSAgeXluID0geXlwYWN0W3l5c3RhdGVdOwotICBpZiAoeXlwYWN0X3Zh
bHVlX2lzX2RlZmF1bHQgKHl5bikpCi0gICAgZ290byB5eWRlZmF1bHQ7Ci0KLSAgLyogTm90IGtu
b3duID0+IGdldCBhIGxvb2thaGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAg
Ki8KLQotICAvKiBZWUNIQVIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0Ygb3IgYSB2YWxpZCBs
b29rYWhlYWQgc3ltYm9sLiAgKi8KLSAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQotICAgIHsKLSAg
ICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIikpOwotICAgICAgeXlj
aGFyID0gWVlMRVg7Ci0gICAgfQotCi0gIGlmICh5eWNoYXIgPD0gWVlFT0YpCi0gICAgewotICAg
ICAgeXljaGFyID0geXl0b2tlbiA9IFlZRU9GOwotICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAi
Tm93IGF0IGVuZCBvZiBpbnB1dC5cbiIpKTsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICB5
eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7Ci0gICAgICBZWV9TWU1CT0xfUFJJTlQgKCJO
ZXh0IHRva2VuIGlzIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7Ci0gICAgfQotCi0gIC8q
IElmIHRoZSBwcm9wZXIgYWN0aW9uIG9uIHNlZWluZyB0b2tlbiBZWVRPS0VOIGlzIHRvIHJlZHVj
ZSBvciB0bwotICAgICBkZXRlY3QgYW4gZXJyb3IsIHRha2UgdGhhdCBhY3Rpb24uICAqLwotICB5
eW4gKz0geXl0b2tlbjsKLSAgaWYgKHl5biA8IDAgfHwgWVlMQVNUIDwgeXluIHx8IHl5Y2hlY2tb
eXluXSAhPSB5eXRva2VuKQotICAgIGdvdG8geXlkZWZhdWx0OwotICB5eW4gPSB5eXRhYmxlW3l5
bl07Ci0gIGlmICh5eW4gPD0gMCkKLSAgICB7Ci0gICAgICBpZiAoeXl0YWJsZV92YWx1ZV9pc19l
cnJvciAoeXluKSkKLSAgICAgICAgZ290byB5eWVycmxhYjsKLSAgICAgIHl5biA9IC15eW47Ci0g
ICAgICBnb3RvIHl5cmVkdWNlOwotICAgIH0KLQotICAvKiBDb3VudCB0b2tlbnMgc2hpZnRlZCBz
aW5jZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1cm4gb2ZmIGVycm9yCi0gICAgIHN0YXR1cy4gICov
Ci0gIGlmICh5eWVycnN0YXR1cykKLSAgICB5eWVycnN0YXR1cy0tOwotCi0gIC8qIFNoaWZ0IHRo
ZSBsb29rYWhlYWQgdG9rZW4uICAqLwotICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5
dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOwotCi0gIC8qIERpc2NhcmQgdGhlIHNoaWZ0ZWQgdG9r
ZW4uICAqLwotICB5eWNoYXIgPSBZWUVNUFRZOwotCi0gIHl5c3RhdGUgPSB5eW47Ci0gIFlZX0lH
Tk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOCi0gICorK3l5dnNwID0geXlsdmFsOwotICBZ
WV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9FTkQKLSAgKisreXlsc3AgPSB5eWxsb2M7Ci0g
IGdvdG8geXluZXdzdGF0ZTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWRlZmF1bHQgLS0gZG8gdGhlIGRlZmF1
bHQgYWN0aW9uIGZvciB0aGUgY3VycmVudCBzdGF0ZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWRlZmF1bHQ6Ci0g
IHl5biA9IHl5ZGVmYWN0W3l5c3RhdGVdOwotICBpZiAoeXluID09IDApCi0gICAgZ290byB5eWVy
cmxhYjsKLSAgZ290byB5eXJlZHVjZTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLgotfCB5eXJlZHVjZSAtLSBEbyBhIHJlZHVjdGlvbi4gIHwKLWAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovCi15eXJlZHVjZToKLSAgLyogeXluIGlzIHRoZSBudW1iZXIgb2YgYSBy
dWxlIHRvIHJlZHVjZSB3aXRoLiAgKi8KLSAgeXlsZW4gPSB5eXIyW3l5bl07Ci0KLSAgLyogSWYg
WVlMRU4gaXMgbm9uemVybywgaW1wbGVtZW50IHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBhY3Rp
b246Ci0gICAgIGAkJCA9ICQxJy4KLQotICAgICBPdGhlcndpc2UsIHRoZSBmb2xsb3dpbmcgbGlu
ZSBzZXRzIFlZVkFMIHRvIGdhcmJhZ2UuCi0gICAgIFRoaXMgYmVoYXZpb3IgaXMgdW5kb2N1bWVu
dGVkIGFuZCBCaXNvbgotICAgICB1c2VycyBzaG91bGQgbm90IHJlbHkgdXBvbiBpdC4gIEFzc2ln
bmluZyB0byBZWVZBTAotICAgICB1bmNvbmRpdGlvbmFsbHkgbWFrZXMgdGhlIHBhcnNlciBhIGJp
dCBzbWFsbGVyLCBhbmQgaXQgYXZvaWRzIGEKLSAgICAgR0NDIHdhcm5pbmcgdGhhdCBZWVZBTCBt
YXkgYmUgdXNlZCB1bmluaXRpYWxpemVkLiAgKi8KLSAgeXl2YWwgPSB5eXZzcFsxLXl5bGVuXTsK
LQotICAvKiBEZWZhdWx0IGxvY2F0aW9uLiAgKi8KLSAgWVlMTE9DX0RFRkFVTFQgKHl5bG9jLCAo
eXlsc3AgLSB5eWxlbiksIHl5bGVuKTsKLSAgWVlfUkVEVUNFX1BSSU5UICh5eW4pOwotICBzd2l0
Y2ggKHl5bikKLSAgICB7Ci0gICAgICAgIGNhc2UgNDoKLQotICAgIHsKLSAgICAgICAgLy8gVGhl
IHN5bWJvbCB0YWJsZSBzZWFyY2ggd2FzIGRvbmUgaW4gdGhlIGxleGljYWwgcGhhc2UKLSAgICAg
ICAgY29uc3QgVFN5bWJvbCogc3ltYm9sID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zeW1ib2w7
Ci0gICAgICAgIGNvbnN0IFRWYXJpYWJsZSogdmFyaWFibGU7Ci0gICAgICAgIGlmIChzeW1ib2wg
PT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0pLCAi
dW5kZWNsYXJlZCBpZGVudGlmaWVyIiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmctPmNf
c3RyKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgVFR5
cGUgdHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkKTsKLSAgICAgICAgICAgIFRWYXJpYWJsZSog
ZmFrZVZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmlu
ZywgdHlwZSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKmZha2VW
YXJpYWJsZSk7Ci0gICAgICAgICAgICB2YXJpYWJsZSA9IGZha2VWYXJpYWJsZTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaWRlbnRpZmllciBjYW4gb25seSBiZSBhIHZh
cmlhYmxlIHR5cGUgc3ltYm9sCi0gICAgICAgICAgICBpZiAoISBzeW1ib2wtPmlzVmFyaWFibGUo
KSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwg
InZhcmlhYmxlIGV4cGVjdGVkIiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmctPmNfc3Ry
KCkpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICAgICAgdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxjb25zdCBU
VmFyaWFibGUqPihzeW1ib2wpOwotCi0gICAgICAgICAgICBpZiAoY29udGV4dC0+c3ltYm9sVGFi
bGUuZmluZEJ1aWx0SW4odmFyaWFibGUtPmdldE5hbWUoKSkgJiYKLSAgICAgICAgICAgICAgICAh
dmFyaWFibGUtPmdldEV4dGVuc2lvbigpLmVtcHR5KCkgJiYKLSAgICAgICAgICAgICAgICBjb250
ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgdmFyaWFibGUtPmdl
dEV4dGVuc2lvbigpKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGRvbid0IGRlbGV0ZSAkMS5zdHJp
bmcsIGl0J3MgdXNlZCBieSBlcnJvciByZWNvdmVyeSwgYW5kIHRoZSBwb29sCi0gICAgICAgIC8v
IHBvcCB3aWxsIHJlY2xhaW0gdGhlIG1lbW9yeQotCi0gICAgICAgIGlmICh2YXJpYWJsZS0+Z2V0
VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0ICkgewotICAgICAgICAgICAgQ29uc3Rh
bnRVbmlvbiogY29uc3RBcnJheSA9IHZhcmlhYmxlLT5nZXRDb25zdFBvaW50ZXIoKTsKLSAgICAg
ICAgICAgIFRUeXBlIHQodmFyaWFibGUtPmdldFR5cGUoKSk7Ci0gICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3Rh
bnRVbmlvbihjb25zdEFycmF5LCB0LCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUtPmdldFVuaXF1ZUlkKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldE5h
bWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXJpYWJsZS0+Z2V0VHlwZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0g
IGNhc2UgNToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgfQotICAg
IGJyZWFrOwotCi0gIGNhc2UgNjoKLQotICAgIHsKLSAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5p
b25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICB1bmlvbkFycmF5LT5zZXRJ
Q29uc3QoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5pKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24o
dW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNw
WygxKSAtICgxKV0pKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA3OgotCi0gICAgewot
ICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07
Ci0gICAgICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmYp
OwotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRGbG9hdCwgRWJw
VW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgfQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgODoKLQotICAgIHsKLSAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25B
cnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29u
c3QoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5iKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5p
b25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFso
MSkgLSAoMSldKSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgOToKLQotICAgIHsKLSAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygyKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTA6
Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgIH0KLSAgICBicmVhazsK
LQotICBjYXNlIDExOgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSBjb250ZXh0LT5hZGRJbmRleEV4cHJlc3Npb24oKHl5dnNwWygxKSAtICg0KV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoNCldKSwgKHl5dnNwWygzKSAtICg0
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNl
IDEyOgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICB9Ci0gICAgYnJl
YWs7Ci0KLSAgY2FzZSAxMzoKLQotICAgIHsKLSAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc0FycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eWxzcFsoMykgLSAoMyldKSwgImNhbm5vdCBhcHBseSBkb3Qgb3BlcmF0b3Ig
dG8gYW4gYXJyYXkiLCAiLiIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5pc1ZlY3RvcigpKSB7Ci0gICAgICAgICAgICBUVmVjdG9yRmllbGRzIGZpZWxkczsK
LSAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnBhcnNlVmVjdG9yRmllbGRzKCooeXl2c3BbKDMp
IC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldE5vbWluYWxTaXplKCksIGZpZWxkcywgKHl5bHNwWygzKSAtICgzKV0pKSkgewot
ICAgICAgICAgICAgICAgIGZpZWxkcy5udW0gPSAxOwotICAgICAgICAgICAgICAgIGZpZWxkcy5v
ZmZzZXRzWzBdID0gMDsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7IC8v
IGNvbnN0YW50IGZvbGRpbmcgZm9yIHZlY3RvciBmaWVsZHMKLSAgICAgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5hZGRDb25zdFZlY3Rvck5vZGUo
ZmllbGRzLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNw
WygzKSAtICgzKV0pKTsKLSAgICAgICAgICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2cUNvbnN0LCAoaW50KSAo
Kih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nKS5zaXplKCkpKTsKLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgVFN0cmluZyB2ZWN0b3JTdHJpbmcgPSAqKHl5dnNwWygz
KSAtICgzKV0ubGV4KS5zdHJpbmc7Ci0gICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRl
eCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTd2l6emxlKGZpZWxkcywgKHl5bHNwWygzKSAt
ICgzKV0pKTsKLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wVmVjdG9yU3dpenpsZSwgKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGluZGV4LCAoeXlsc3BbKDIpIC0g
KDMpXSkpOwotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0QmFzaWNUeXBlKCksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAoaW50KSB2ZWN0b3JTdHJpbmcuc2l6ZSgp
KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgIFRNYXRy
aXhGaWVsZHMgZmllbGRzOwotICAgICAgICAgICAgaWYgKCEgY29udGV4dC0+cGFyc2VNYXRyaXhG
aWVsZHMoKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Tm9taW5hbFNpemUoKSwgZmllbGRzLCAoeXlsc3Bb
KDMpIC0gKDMpXSkpKSB7Ci0gICAgICAgICAgICAgICAgZmllbGRzLndob2xlUm93ID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgZmllbGRzLndob2xlQ29sID0gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgZmllbGRzLnJvdyA9IDA7Ci0gICAgICAgICAgICAgICAgZmllbGRzLmNvbCA9IDA7Ci0gICAg
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZpZWxkcy53aG9sZUNvbCkgewotICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIiBub24tc2NhbGFyIGZp
ZWxkcyBub3QgaW1wbGVtZW50ZWQgeWV0IiwgIi4iKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9
IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElD
b25zdCgwKTsKLSAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBF
YnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygzKSAtICgzKV0pKTsKLSAgICAgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5bHNwWygyKSAtICgzKV0pKTsKLSAgICAgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksRXZxVGVt
cG9yYXJ5LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Tm9t
aW5hbFNpemUoKSkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBDb25z
dGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAg
ICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGZpZWxkcy5jb2wgKiAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Tm9taW5hbFNpemUoKSArIGZpZWxkcy5yb3cp
OwotICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVm
aW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDMpIC0gKDMpXSkpOwotICAgICAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJ
bmRleChFT3BJbmRleERpcmVjdCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksIGluZGV4LCAoeXlsc3BbKDIpIC0gKDMpXSkpOwotICAgICAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5eXZzcFsoMSkgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSkpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9IGVsc2UgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAgICAgIGJv
b2wgZmllbGRGb3VuZCA9IGZhbHNlOwotICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCYgZmll
bGRzID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUo
KS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgaTsKLSAg
ICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoZmllbGRzW2ldLT5uYW1lKCkgPT0gKih5eXZzcFsoMykgLSAoMyldLmxleCku
c3RyaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpZWxkRm91bmQgPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAoZmllbGRGb3VuZCkgewotICAgICAgICAgICAgICAgIGlmICgoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldFF1YWxpZmll
cigpID09IEV2cUNvbnN0KSB7Ci0gICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmFkZENvbnN0U3RydWN0KCooeXl2c3BbKDMpIC0gKDMp
XS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eWxzcFsoMikgLSAoMyldKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNl
dFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNo
YW5nZSB0aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1cm4gdHlwZSwgbm90IG9mIHRoZSBzdHJ1Y3R1
cmUgZmllbGQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHRoZSBzdHJ1Y3R1cmUgZGVm
aW5pdGlvbiBpcyBzaGFyZWQgYmV0d2VlbiB2YXJpb3VzIHN0cnVjdHVyZXMuCi0gICAgICAgICAg
ICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGVQb2lu
dGVyKCktPnNldFF1YWxpZmllcihFdnFDb25zdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9u
ICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAgICAg
IHVuaW9uQXJyYXktPnNldElDb25zdChpKTsKLSAgICAgICAgICAgICAgICAgICAgVEludGVybVR5
cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9u
QXJyYXksICpmaWVsZHNbaV0tPnR5cGUoKSwgKHl5bHNwWygzKSAtICgzKV0pKTsKLSAgICAgICAg
ICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0U3RydWN0LCAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eWxzcFsoMikgLSAoMyldKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlw
ZSgqZmllbGRzW2ldLT50eXBlKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgzKV0p
LCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5z
dHJpbmctPmNfc3RyKCkpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwg
IiBmaWVsZCBzZWxlY3Rpb24gcmVxdWlyZXMgc3RydWN0dXJlLCB2ZWN0b3IsIG9yIG1hdHJpeCBv
biBsZWZ0IGhhbmQgc2lkZSIsICh5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLT5jX3N0cigp
KTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOwotICAgICAgICB9Ci0gICAgICAgIC8vIGRvbid0IGRlbGV0ZSAkMy5zdHJpbmcs
IGl0J3MgZnJvbSB0aGUgcG9vbAotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE0OgotCi0g
ICAgewotICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0g
KDIpXSksICIrKyIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQ
b3N0SW5jcmVtZW50LCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5bHNwWygyKSAtICgyKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmICgo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewotICAgICAgICAgICAgY29udGV4
dC0+dW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgIisrIiwgKHl5dnNwWygxKSAtICgy
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNToKLQotICAgIHsKLSAg
ICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgyKV0pLCAi
LS0iLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCi0gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdERlY3Jl
bWVudCwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFso
MikgLSAoMildKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnVuYXJ5
T3BFcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICItLSIsICh5eXZzcFsoMSkgLSAoMildLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTY6Ci0KLSAgICB7Ci0gICAgICAgIGlm
IChjb250ZXh0LT5pbnRlZ2VyRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSwgIltdIikpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE3
OgotCi0gICAgewotICAgICAgICBURnVuY3Rpb24qIGZuQ2FsbCA9ICh5eXZzcFsoMSkgLSAoMSld
LmludGVybSkuZnVuY3Rpb247Ci0gICAgICAgIFRPcGVyYXRvciBvcCA9IGZuQ2FsbC0+Z2V0QnVp
bHRJbk9wKCk7Ci0KLSAgICAgICAgaWYgKG9wICE9IEVPcE51bGwpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIC8vCi0gICAgICAgICAgICAvLyBUaGVuIHRoaXMgc2hvdWxkIGJlIGEgY29uc3RydWN0
b3IuCi0gICAgICAgICAgICAvLyBEb24ndCBnbyB0aHJvdWdoIHRoZSBzeW1ib2wgdGFibGUgZm9y
IGNvbnN0cnVjdG9ycy4KLSAgICAgICAgICAgIC8vIFRoZWlyIHBhcmFtZXRlcnMgd2lsbCBiZSB2
ZXJpZmllZCBhbGdvcml0aG1pY2FsbHkuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgVFR5
cGUgdHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpOyAgLy8gdXNlIHRoaXMgdG8gZ2V0IHRoZSB0
eXBlIGJhY2sKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5jb25zdHJ1Y3RvckVycm9yQ2hlY2so
KHl5bHNwWygxKSAtICgxKV0pLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUs
ICpmbkNhbGwsIG9wLCAmdHlwZSkpIHsKLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSAwOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAvLwotICAgICAgICAgICAgICAgIC8vIEl0J3MgYSBjb25zdHJ1Y3Rvciwgb2YgdHlwZSAndHlw
ZScuCi0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5hZGRDb25zdHJ1Y3RvcigoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0pLmludGVybU5vZGUsICZ0eXBlLCBvcCwgZm5DYWxsLCAoeXlsc3BbKDEpIC0gKDEp
XSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID09IDApIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKDAsIG9wLCAoeXlsc3BbKDEpIC0g
KDEpXSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5zZXRUeXBlKHR5cGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Ly8KLSAgICAgICAgICAgIC8vIE5vdCBhIGNvbnN0cnVjdG9yLiAgRmluZCBpdCBpbiB0aGUgc3lt
Ym9sIHRhYmxlLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiog
Zm5DYW5kaWRhdGU7Ci0gICAgICAgICAgICBib29sIGJ1aWx0SW47Ci0gICAgICAgICAgICBmbkNh
bmRpZGF0ZSA9IGNvbnRleHQtPmZpbmRGdW5jdGlvbigoeXlsc3BbKDEpIC0gKDEpXSksIGZuQ2Fs
bCwgJmJ1aWx0SW4pOwotICAgICAgICAgICAgaWYgKGZuQ2FuZGlkYXRlKSB7Ci0gICAgICAgICAg
ICAgICAgLy8KLSAgICAgICAgICAgICAgICAvLyBBIGRlY2xhcmVkIGZ1bmN0aW9uLgotICAgICAg
ICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgaWYgKGJ1aWx0SW4gJiYgIWZuQ2FuZGlkYXRl
LT5nZXRFeHRlbnNpb24oKS5lbXB0eSgpICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PmV4dGVuc2lvbkVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgxKV0pLCBmbkNhbmRpZGF0ZS0+Z2V0
RXh0ZW5zaW9uKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb3AgPSBmbkNhbmRpZGF0ZS0+Z2V0
QnVpbHRJbk9wKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGJ1aWx0SW4gJiYgb3AgIT0gRU9wTnVs
bCkgewotICAgICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgICAgICAvLyBBIGZ1
bmN0aW9uIGNhbGwgbWFwcGVkIHRvIGEgYnVpbHQtaW4gb3BlcmF0aW9uLgotICAgICAgICAgICAg
ICAgICAgICAvLwotICAgICAgICAgICAgICAgICAgICBpZiAoZm5DYW5kaWRhdGUtPmdldFBhcmFt
Q291bnQoKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gVHJlYXQgaXQgbGlrZSBhIGJ1aWx0LWluIHVuYXJ5IG9wZXJhdG9yLgot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFy
eU1hdGgob3AsICh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZSwgKHl5bHNwWygx
KSAtICgxKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiYnVpbHQgaW4gdW5h
cnkgb3BlcmF0b3IgZnVuY3Rpb24uICBUeXBlOiAiIDw8IHN0YXRpY19jYXN0PFRJbnRlcm1UeXBl
ZCo+KCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZSktPmdldENvbXBsZXRlU3Ry
aW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZv
ID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZS0+Z2V0TGlu
ZSgpLCAiIHdyb25nIG9wZXJhbmQgdHlwZSIsICJJbnRlcm5hbCBFcnJvciIsIGV4dHJhSW5mby5j
X3N0cigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBZWUVSUk9SOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVy
bSkuaW50ZXJtQWdncmVnYXRlLCBvcCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIFRoaXMgaXMgYSByZWFsIGZ1bmN0aW9uIGNhbGwKLQotICAgICAgICAgICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0
QWdncmVnYXRlT3BlcmF0b3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdh
dGUsIEVPcEZ1bmN0aW9uQ2FsbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKGZuQ2FuZGlkYXRl
LT5nZXRSZXR1cm5UeXBlKCkpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgaG93
IHdlIGtub3cgd2hldGhlciB0aGUgZ2l2ZW4gZnVuY3Rpb24gaXMgYSBidWlsdEluIGZ1bmN0aW9u
IG9yIGEgdXNlciBkZWZpbmVkIGZ1bmN0aW9uCi0gICAgICAgICAgICAgICAgICAgIC8vIGlmIGJ1
aWx0SW4gPT0gZmFsc2UsIGl0J3MgYSB1c2VyRGVmaW5lZCAtPiBjb3VsZCBiZSBhbiBvdmVybG9h
ZGVkIGJ1aWx0SW4gZnVuY3Rpb24gYWxzbwotICAgICAgICAgICAgICAgICAgICAvLyBpZiBidWls
dEluID09IHRydWUsIGl0J3MgZGVmaW5pdGVseSBhIGJ1aWx0SW4gZnVuY3Rpb24gd2l0aCBFT3BO
dWxsCi0gICAgICAgICAgICAgICAgICAgIGlmICghYnVpbHRJbikKLSAgICAgICAgICAgICAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+
c2V0VXNlckRlZmluZWQoKTsKLSAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXROYW1lKGZuQ2FuZGlkYXRlLT5nZXRN
YW5nbGVkTmFtZSgpKTsKLQotICAgICAgICAgICAgICAgICAgICBUUXVhbGlmaWVyIHF1YWw7Ci0g
ICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZm5DYW5kaWRhdGUtPmdl
dFBhcmFtQ291bnQoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBxdWFsID0gZm5D
YW5kaWRhdGUtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHF1YWwgPT0gRXZxT3V0IHx8IHF1YWwgPT0gRXZxSW5PdXQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldExpbmUoKSwgImFzc2lnbiIsICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2Uo
KVtpXS0+Z2V0QXNUeXBlZCgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUtPmdldExp
bmUoKSwgIkNvbnN0YW50IHZhbHVlIGNhbm5vdCBiZSBwYXNzZWQgZm9yICdvdXQnIG9yICdpbm91
dCcgcGFyYW1ldGVycy4iLCAiRXJyb3IiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PnNldFR5cGUoZm5DYW5kaWRhdGUtPmdldFJldHVyblR5cGUoKSk7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIC8vIGVycm9yIG1lc3NhZ2Ugd2FzIHB1dCBvdXQgYnkgUGFG
aW5kRnVuY3Rpb24oKQotICAgICAgICAgICAgICAgIC8vIFB1dCBvbiBhIGR1bW15IG5vZGUgZm9y
IGVycm9yIHJlY292ZXJ5Ci0gICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJh
eSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNl
dEZDb25zdCgwLjBmKTsKLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5
LCBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMSkgLSAo
MSldKSk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGRlbGV0ZSBmbkNhbGw7Ci0gICAgfQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgMTg6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxOToKLQotICAg
IHsKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygzKSAtICgzKV0pLCAibWV0aG9kcyBh
cmUgbm90IHN1cHBvcnRlZCIsICIiKTsKLSAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMykgLSAoMyldLmludGVybSk7Ci0gICAgfQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgMjA6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0p
ID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSAyMToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0pOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDIyOgotCi0gICAgewotICAg
ICAgICAoeXl2YWwuaW50ZXJtKS5mdW5jdGlvbiA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5m
dW5jdGlvbik7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybU5vZGUgPSAwOwotICAgIH0K
LSAgICBicmVhazsKLQotICBjYXNlIDIzOgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJt
KS5mdW5jdGlvbiA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5mdW5jdGlvbik7Ci0gICAgICAg
ICh5eXZhbC5pbnRlcm0pLmludGVybU5vZGUgPSAwOwotICAgIH0KLSAgICBicmVhazsKLQotICBj
YXNlIDI0OgotCi0gICAgewotICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAwLCBuZXcgVFR5
cGUoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKSkg
fTsKLSAgICAgICAgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+YWRkUGFyYW1l
dGVyKHBhcmFtKTsKLSAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEp
IC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pOwotICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1O
b2RlID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgfQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgMjU6Ci0KLSAgICB7Ci0gICAgICAgIFRQYXJhbWV0ZXIgcGFy
YW0gPSB7IDAsIG5ldyBUVHlwZSgoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0VHlwZSgpKSB9OwotICAgICAgICAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmZ1
bmN0aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW0pOwotICAgICAgICAoeXl2YWwuaW50ZXJtKS5mdW5j
dGlvbiA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybSkuZnVuY3Rpb247Ci0gICAgICAgICh5eXZh
bC5pbnRlcm0pLmludGVybU5vZGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0
ZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmludGVybU5vZGUsICh5eXZzcFsoMykgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwotICAgIH0KLSAg
ICBicmVhazsKLQotICBjYXNlIDI2OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1
bmN0aW9uKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbik7Ci0gICAgfQotICAg
IGJyZWFrOwotCi0gIGNhc2UgMjc6Ci0KLSAgICB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIENv
bnN0cnVjdG9yCi0gICAgICAgIC8vCi0gICAgICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7Ci0g
ICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudXNlckRlZikgewotICAg
ICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RTdHJ1Y3Q7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBzd2l0Y2ggKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS50eXBlKSB7Ci0g
ICAgICAgICAgICBjYXNlIEVidEZsb2F0OgotICAgICAgICAgICAgICAgIGlmICgoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0udHlwZSkubWF0cml4KSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRj
aCgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuc2l6ZSkgewotICAgICAgICAgICAgICAg
ICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0TWF0MjsgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0TWF0MzsgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0TWF0NDsgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgc3dpdGNoKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zaXplKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RGbG9hdDsgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBFT3BDb25zdHJ1Y3RWZWMyOyAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RWZWMzOyAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RWZWM0OyAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVidEludDoKLSAgICAgICAgICAgICAg
ICBzd2l0Y2goKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnNpemUpIHsKLSAgICAgICAg
ICAgICAgICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0SW50OyAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGNhc2UgMjogb3AgPSBFT3BDb25zdHJ1Y3RJVmVjMjsgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVjdElWZWMzOyBicmVhazsKLSAgICAgICAgICAg
ICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0SVZlYzQ7IGJyZWFrOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoK
LSAgICAgICAgICAgICAgICBzd2l0Y2goKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnNp
emUpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0Qm9vbDsgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBFT3BDb25zdHJ1Y3RCVmVjMjsgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVjdEJWZWMzOyBicmVh
azsKLSAgICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0QlZlYzQ7IGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGRlZmF1bHQ6IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG9wID09IEVP
cE51bGwpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEp
XSksICJjYW5ub3QgY29uc3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5nKCh5eXZzcFso
MSkgLSAoMSldLmludGVybS50eXBlKS50eXBlKSk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBl
KS50eXBlID0gRWJ0RmxvYXQ7Ci0gICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RGbG9h
dDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBUU3RyaW5nIHRlbXBTdHJpbmc7
Ci0gICAgICAgIFRUeXBlIHR5cGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpKTsKLSAg
ICAgICAgVEZ1bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oJnRlbXBTdHJpbmcsIHR5
cGUsIG9wKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSBmdW5jdGlvbjsKLSAg
ICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyODoKLQotICAgIHsKLSAgICAgICAgaWYgKGNvbnRl
eHQtPnJlc2VydmVkRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDEpXSksICooeXl2c3BbKDEpIC0g
KDEpXS5sZXgpLnN0cmluZykpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
ICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKLSAgICAgICAgVEZ1bmN0aW9u
ICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcs
IHR5cGUpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9IGZ1bmN0aW9uOwotICAg
IH0KLSAgICBicmVhazsKLQotICBjYXNlIDI5OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzMDoKLQotICAgIHsKLSAgICAg
ICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgyKV0pLCAiKysi
LCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCi0gICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUHJlSW5jcmVtZW50
LCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygxKSAt
ICgyKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmICgoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVy
cm9yKCh5eWxzcFsoMSkgLSAoMildKSwgIisrIiwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzMToKLQotICAgIHsKLSAgICAgICAgaWYgKGNv
bnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgyKV0pLCAiLS0iLCAoeXl2c3Bb
KDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCi0gICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUHJlRGVjcmVtZW50LCAoeXl2c3Bb
KDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygxKSAtICgyKV0pLCBj
b250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKCh5eWxz
cFsoMSkgLSAoMildKSwgIi0tIiwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNw
WygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSAzMjoKLQotICAgIHsKLSAgICAgICAgaWYgKCh5eXZzcFsoMSkg
LSAoMildLmludGVybSkub3AgIT0gRU9wTnVsbCkgewotICAgICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aCgo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLm9wLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygxKSAtICgyKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7
Ci0gICAgICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsK
LSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBlcnJvck9wID0gIiI7Ci0gICAgICAgICAgICAg
ICAgc3dpdGNoKCh5eXZzcFsoMSkgLSAoMildLmludGVybSkub3ApIHsKLSAgICAgICAgICAgICAg
ICBjYXNlIEVPcE5lZ2F0aXZlOiAgIGVycm9yT3AgPSAiLSI7IGJyZWFrOwotICAgICAgICAgICAg
ICAgIGNhc2UgRU9wTG9naWNhbE5vdDogZXJyb3JPcCA9ICIhIjsgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgZGVmYXVsdDogYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGNvbnRleHQtPnVuYXJ5T3BFcnJvcigoeXlsc3BbKDEpIC0gKDIpXSksIGVycm9yT3AsICh5eXZz
cFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygp
KTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygyKSAtICgyKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzM6
Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTnVsbDsgfQotICAgIGJyZWFrOwotCi0g
IGNhc2UgMzQ6Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTmVnYXRpdmU7IH0KLSAg
ICBicmVhazsKLQotICBjYXNlIDM1OgotCi0gICAgeyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcExv
Z2ljYWxOb3Q7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDM2OgotCi0gICAgeyAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzc6Ci0KLSAgICB7Ci0gICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRC
aW5hcnlNYXRoKEVPcE11bCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIp
IC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlP
cEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIioiLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzODoKLQotICAgIHsKLSAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEJpbmFyeU1hdGgoRU9wRGl2LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxz
cFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmJp
bmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiLyIsICh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDM5OgotCi0gICAgeyAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDA6Ci0KLSAgICB7Ci0g
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEFkZCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAo
eXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0
LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIisiLCAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygz
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0MToKLQotICAg
IHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wU3ViLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBp
ZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKLSAgICAgICAgICAgIGNv
bnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiLSIsICh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2
c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmco
KSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDQyOgot
Ci0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDM6Ci0K
LSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0NDoKLQot
ICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTGVzc1RoYW4sICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0g
ICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewotICAgICAg
ICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICI8IiwgKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5n
KCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0
ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAg
IENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAg
ICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3Rh
bnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0
KSwgKHl5bHNwWygyKSAtICgzKV0pKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLQot
ICBjYXNlIDQ1OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbiwg
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQt
PnN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikg
LSAoMyldKSwgIj4iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFu
dFVuaW9uWzFdOwotICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwotICAgICAgICB9Ci0gICAg
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDY6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRo
KEVPcExlc3NUaGFuRXF1YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygy
KSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmICgoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5
T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICI8PSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlv
bkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICB1bmlvbkFycmF5LT5z
ZXRCQ29uc3QoZmFsc2UpOwotICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwg
VFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMikgLSAoMyld
KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0NzoKLQotICAgIHsK
LSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wR3JlYXRlclRoYW5FcXVhbCwgKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsK
LSAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIj49Iiwg
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3Ry
aW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21w
bGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
ICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAg
ICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29u
c3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNv
bnN0KSwgKHl5bHNwWygyKSAtICgzKV0pKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsK
LQotICBjYXNlIDQ4OgotCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgNDk6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEVxdWFsLCAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3lt
Ym9sVGFibGUpOwotICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09
IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgz
KV0pLCAiPT0iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0
Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uWzFdOwotICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVm
aW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgNTA6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVP
cE5vdEVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5
dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyld
KSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3Io
KHl5bHNwWygyKSAtICgzKV0pLCAiIT0iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9
IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0
KGZhbHNlKTsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVi
dEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTE6Ci0KLSAgICB7ICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1MjoKLQotICAgIHsgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSk7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDUzOgotCi0gICAgeyAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTQ6Ci0KLSAgICB7ICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1NToKLQotICAgIHsKLSAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJp
bmFyeU1hdGgoRU9wTG9naWNhbEFuZCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXls
c3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5i
aW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIiYmIiwgKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIENvbnN0YW50VW5pb24g
KnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgIHVuaW9uQXJy
YXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFy
cmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygyKSAt
ICgzKV0pKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDU2OgotCi0g
ICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTc6Ci0KLSAg
ICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxYb3IsICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0g
ICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewotICAgICAg
ICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICJeXiIsICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmlu
ZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxl
dGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAg
ICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAg
ICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwotICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0
YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25z
dCksICh5eWxzcFsoMikgLSAoMyldKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSA1ODoKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KLSAgICBicmVhazsKLQot
ICBjYXNlIDU5OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2FsT3IsICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5z
eW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0g
KDMpXSksICJ8fCIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50
VW5pb25bMV07Ci0gICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwotICAg
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5k
ZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMikgLSAoMyldKSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA2MDoKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0K
LSAgICBicmVhazsKLQotICBjYXNlIDYxOgotCi0gICAgewotICAgICAgIGlmIChjb250ZXh0LT5i
b29sRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQot
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkU2VsZWN0aW9uKCh5eXZzcFsoMSkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCAoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWyg1
KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoNSldKSk7Ci0g
ICAgICAgIGlmICgoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0
VHlwZSgpICE9ICh5eXZzcFsoNSkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRU
eXBlKCkpCi0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAwOwot
Ci0gICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewotICAg
ICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDUpXSksICI6Iiwg
KHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3Ry
aW5nKCksICh5eXZzcFsoNSkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21w
bGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoNSkgLSAoNSldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotCi0g
IGNhc2UgNjI6Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSA2MzoKLQotICAgIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2so
KHl5bHNwWygyKSAtICgzKV0pLCAiYXNzaWduIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkQXNzaWduKCh5eXZzcFsoMikgLSAoMyldLmludGVybSkub3AsICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKLSAgICAgICAgaWYgKCh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5hc3NpZ25F
cnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICJhc3NpZ24iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA2NDoKLQotICAgIHsgKHl5
dmFsLmludGVybSkub3AgPSBFT3BBc3NpZ247IH0KLSAgICBicmVhazsKLQotICBjYXNlIDY1Ogot
Ci0gICAgeyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcE11bEFzc2lnbjsgfQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgNjY6Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wRGl2QXNzaWduOyB9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA2NzoKLQotICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBF
T3BBZGRBc3NpZ247IH0KLSAgICBicmVhazsKLQotICBjYXNlIDY4OgotCi0gICAgeyAoeXl2YWwu
aW50ZXJtKS5vcCA9IEVPcFN1YkFzc2lnbjsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNjk6Ci0K
LSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgIH0KLSAgICBicmVhazsKLQot
ICBjYXNlIDcwOgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29tbWEoKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwotICAgICAgICBpZiAoKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJy
b3IoKHl5bHNwWygyKSAtICgzKV0pLCAiLCIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDcxOgotCi0gICAgewotICAgICAgICBp
ZiAoY29udGV4dC0+Y29uc3RFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNzI6Ci0KLSAg
ICB7Ci0gICAgICAgIFRGdW5jdGlvbiAmZnVuY3Rpb24gPSAqKCh5eXZzcFsoMSkgLSAoMildLmlu
dGVybSkuZnVuY3Rpb24pOwotICAgICAgICAKLSAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSAqcHJv
dG90eXBlID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGU7Ci0gICAgICAgIHByb3RvdHlwZS0+c2V0VHlw
ZShmdW5jdGlvbi5nZXRSZXR1cm5UeXBlKCkpOwotICAgICAgICBwcm90b3R5cGUtPnNldE5hbWUo
ZnVuY3Rpb24uZ2V0TmFtZSgpKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGNvbnN0IFRQYXJhbWV0ZXIgJnBhcmFtID0gZnVuY3Rpb24uZ2V0UGFyYW0oaSk7Ci0gICAg
ICAgICAgICBpZiAocGFyYW0ubmFtZSAhPSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIFRWYXJpYWJsZSB2YXJpYWJsZShwYXJhbS5uYW1lLCAqcGFyYW0udHlwZSk7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgcHJvdG90eXBlID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmdyb3dBZ2dyZWdhdGUocHJvdG90eXBlLCBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3lt
Ym9sKHZhcmlhYmxlLmdldFVuaXF1ZUlkKCksIHZhcmlhYmxlLmdldE5hbWUoKSwgdmFyaWFibGUu
Z2V0VHlwZSgpLCAoeXlsc3BbKDEpIC0gKDIpXSkpLCAoeXlsc3BbKDEpIC0gKDIpXSkpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHByb3RvdHlwZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKHByb3Rv
dHlwZSwgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAiIiwgKnBhcmFtLnR5cGUs
ICh5eWxzcFsoMSkgLSAoMildKSksICh5eWxzcFsoMSkgLSAoMildKSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHByb3RvdHlwZS0+c2V0T3AoRU9wUHJvdG90
eXBlKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IHByb3RvdHlwZTsKLQot
ICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSA3MzoKLQotICAgIHsKLSAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMildLmludGVy
bSkuaW50ZXJtQWdncmVnYXRlKQotICAgICAgICAgICAgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJt
KS5pbnRlcm1BZ2dyZWdhdGUtPnNldE9wKEVPcERlY2xhcmF0aW9uKTsKLSAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybSkuaW50ZXJtQWdn
cmVnYXRlOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDc0OgotCi0gICAgewotICAgICAg
ICBpZiAoKCh5eXZzcFsoMikgLSAoNCldLmludGVybS5wcmVjaXNpb24pID09IEVicEhpZ2gpICYm
IChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikgJiYgIWNvbnRleHQt
PmZyYWdtZW50UHJlY2lzaW9uSGlnaCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5
bHNwWygxKSAtICg0KV0pLCAicHJlY2lzaW9uIGlzIG5vdCBzdXBwb3J0ZWQgaW4gZnJhZ21lbnQg
c2hhZGVyIiwgImhpZ2hwIik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKCFjb250ZXh0LT5zeW1ib2xUYWJsZS5zZXREZWZhdWx0UHJlY2lz
aW9uKCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0udHlwZSksICh5eXZzcFsoMikgLSAoNCldLmlu
dGVybS5wcmVjaXNpb24pICkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFso
MSkgLSAoNCldKSwgImlsbGVnYWwgdHlwZSBhcmd1bWVudCBmb3IgZGVmYXVsdCBwcmVjaXNpb24g
cXVhbGlmaWVyIiwgZ2V0QmFzaWNTdHJpbmcoKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLnR5cGUp
LnR5cGUpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gMDsKLSAgICB9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSA3NToKLQotICAgIHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gTXVsdGlwbGUgZGVj
bGFyYXRpb25zIG9mIHRoZSBzYW1lIGZ1bmN0aW9uIGFyZSBhbGxvd2VkLgotICAgICAgICAvLwot
ICAgICAgICAvLyBJZiB0aGlzIGlzIGEgZGVmaW5pdGlvbiwgdGhlIGRlZmluaXRpb24gcHJvZHVj
dGlvbiBjb2RlIHdpbGwgY2hlY2sgZm9yIHJlZGVmaW5pdGlvbnMKLSAgICAgICAgLy8gKHdlIGRv
bid0IGtub3cgYXQgdGhpcyBwb2ludCBpZiBpdCdzIGEgZGVmaW5pdGlvbiBvciBub3QpLgotICAg
ICAgICAvLwotICAgICAgICAvLyBSZWRlY2xhcmF0aW9ucyBhcmUgYWxsb3dlZC4gIEJ1dCwgcmV0
dXJuIHR5cGVzIGFuZCBwYXJhbWV0ZXIgcXVhbGlmaWVycyBtdXN0IG1hdGNoLgotICAgICAgICAv
LwotICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihj
b250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlv
biktPmdldE1hbmdsZWROYW1lKCkpKTsKLSAgICAgICAgaWYgKHByZXZEZWMpIHsKLSAgICAgICAg
ICAgIGlmIChwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkgIT0gKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgyKV0pLCAib3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBo
YXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0
aW9uKS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCkpOwotICAgICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcHJldkRlYy0+Z2V0UGFyYW1Db3VudCgpOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICBpZiAocHJldkRlYy0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCkgIT0g
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0
UXVhbGlmaWVyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNw
WygyKSAtICgyKV0pLCAib3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHBh
cmFtZXRlciBxdWFsaWZpZXJzIiwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+
Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyU3RyaW5nKCkpOwotICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgLy8KLSAgICAgICAgLy8gQ2hlY2sgZm9yIHByZXZpb3Vz
bHkgZGVjbGFyZWQgdmFyaWFibGVzIHVzaW5nIHRoZSBzYW1lIG5hbWUuCi0gICAgICAgIC8vCi0g
ICAgICAgIFRTeW1ib2wgKnByZXZTeW0gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCh5eXZz
cFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldE5hbWUoKSk7Ci0gICAgICAgIGlmIChw
cmV2U3ltKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIXByZXZTeW0tPmlzRnVuY3Rpb24o
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3Bb
KDIpIC0gKDIpXSksICJyZWRlZmluaXRpb24iLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVu
Y3Rpb24pLT5nZXROYW1lKCkuY19zdHIoKSwgImZ1bmN0aW9uIik7Ci0gICAgICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgewotICAgICAgICAgICAgLy8gSW5zZXJ0IHRoZSB1bm1hbmdsZWQgbmFtZSB0
byBkZXRlY3QgcG90ZW50aWFsIGZ1dHVyZSByZWRlZmluaXRpb24gYXMgYSB2YXJpYWJsZS4KLSAg
ICAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLmdldE91dGVyTGV2ZWwoKS0+aW5zZXJ0KCh5
eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldE5hbWUoKSwgKih5eXZzcFsoMSkg
LSAoMildLmludGVybS5mdW5jdGlvbikpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8KLSAgICAg
ICAgLy8gSWYgdGhpcyBpcyBhIHJlZGVjbGFyYXRpb24sIGl0IGNvdWxkIGFsc28gYmUgYSBkZWZp
bml0aW9uLAotICAgICAgICAvLyBpbiB3aGljaCBjYXNlLCB3ZSB3YW50IHRvIHVzZSB0aGUgdmFy
aWFibGUgbmFtZXMgZnJvbSB0aGlzIG9uZSwgYW5kIG5vdCB0aGUgb25lIHRoYXQncwotICAgICAg
ICAvLyBiZWluZyByZWRlY2xhcmVkLiAgU28sIHBhc3MgYmFjayB1cCB0aGlzIGRlY2xhcmF0aW9u
LCBub3QgdGhlIG9uZSBpbiB0aGUgc3ltYm9sIHRhYmxlLgotICAgICAgICAvLwotICAgICAgICAo
eXl2YWwuaW50ZXJtKS5mdW5jdGlvbiA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlv
bik7Ci0KLSAgICAgICAgLy8gV2UncmUgYXQgdGhlIGlubmVyIHNjb3BlIGxldmVsIG9mIHRoZSBm
dW5jdGlvbidzIGFyZ3VtZW50cyBhbmQgYm9keSBzdGF0ZW1lbnQuCi0gICAgICAgIC8vIEFkZCB0
aGUgZnVuY3Rpb24gcHJvdG90eXBlIHRvIHRoZSBzdXJyb3VuZGluZyBzY29wZSBpbnN0ZWFkLgot
ICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5nZXRPdXRlckxldmVsKCktPmluc2VydCgqKHl5
dmFsLmludGVybSkuZnVuY3Rpb24pOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDc2Ogot
Ci0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5mdW5jdGlvbik7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNzc6Ci0K
LSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmZ1bmN0aW9uKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA3ODoKLQot
ICAgIHsKLSAgICAgICAgLy8gQWRkIHRoZSBwYXJhbWV0ZXIKLSAgICAgICAgKHl5dmFsLmludGVy
bS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pOwotICAgICAg
ICBpZiAoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKS5wYXJhbS50eXBlLT5nZXRCYXNpY1R5cGUo
KSAhPSBFYnRWb2lkKQotICAgICAgICAgICAgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0
aW9uKS0+YWRkUGFyYW1ldGVyKCh5eXZzcFsoMikgLSAoMildLmludGVybSkucGFyYW0pOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBkZWxldGUgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKS5w
YXJhbS50eXBlOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDc5OgotCi0gICAgewotICAg
ICAgICAvLwotICAgICAgICAvLyBPbmx5IGZpcnN0IHBhcmFtZXRlciBvZiBvbmUtcGFyYW1ldGVy
IGZ1bmN0aW9ucyBjYW4gYmUgdm9pZAotICAgICAgICAvLyBUaGUgY2hlY2sgZm9yIG5hbWVkIHBh
cmFtZXRlcnMgbm90IGJlaW5nIHZvaWQgaXMgZG9uZSBpbiBwYXJhbWV0ZXJfZGVjbGFyYXRvcgot
ICAgICAgICAvLwotICAgICAgICBpZiAoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKS5wYXJhbS50
eXBlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICAvLwotICAgICAg
ICAgICAgLy8gVGhpcyBwYXJhbWV0ZXIgPiBmaXJzdCBpcyB2b2lkCi0gICAgICAgICAgICAvLwot
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiY2Fubm90IGJl
IGFuIGFyZ3VtZW50IHR5cGUgZXhjZXB0IGZvciAnKHZvaWQpJyIsICJ2b2lkIik7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBkZWxldGUgKHl5dnNwWygzKSAt
ICgzKV0uaW50ZXJtKS5wYXJhbS50eXBlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Ly8gQWRkIHRoZSBwYXJhbWV0ZXIKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24p
ID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmZ1bmN0aW9uKTsKLSAgICAgICAgICAgICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5mdW5jdGlvbiktPmFkZFBhcmFtZXRlcigoeXl2c3BbKDMpIC0g
KDMpXS5pbnRlcm0pLnBhcmFtKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLQotICBj
YXNlIDgwOgotCi0gICAgewotICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5
cGUpLnF1YWxpZmllciAhPSBFdnFHbG9iYWwgJiYgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5
cGUpLnF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIm5vIHF1YWxpZmllcnMgYWxsb3dlZCBmb3IgZnVuY3Rp
b24gcmV0dXJuIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50
eXBlKS5xdWFsaWZpZXIpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgfQotICAgICAgICAvLyBtYWtlIHN1cmUgYSBzYW1wbGVyIGlzIG5vdCBpbnZvbHZlZCBhcyB3
ZWxsLi4uCi0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5
eWxzcFsoMikgLSAoMyldKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpKSkKLSAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICAvLyBBZGQgdGhlIGZ1bmN0aW9u
IGFzIGEgcHJvdG90eXBlIGFmdGVyIHBhcnNpbmcgaXQgKHdlIGRvIG5vdCBzdXBwb3J0IHJlY3Vy
c2lvbikKLSAgICAgICAgVEZ1bmN0aW9uICpmdW5jdGlvbjsKLSAgICAgICAgVFR5cGUgdHlwZSgo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkpOwotICAgICAgICBmdW5jdGlvbiA9IG5ldyBU
RnVuY3Rpb24oKHl5dnNwWygyKSAtICgzKV0ubGV4KS5zdHJpbmcsIHR5cGUpOwotICAgICAgICAo
eXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9IGZ1bmN0aW9uOwotICAgICAgICAKLSAgICAgICAgY29u
dGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDgx
OgotCi0gICAgewotICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5
cGUgPT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAt
ICgyKV0pLCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9pZCciLCAoeXl2c3BbKDIpIC0gKDIpXS5s
ZXgpLnN0cmluZy0+Y19zdHIoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygoeXlsc3Bb
KDIpIC0gKDIpXSksICooeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZykpCi0gICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7KHl5dnNw
WygyKSAtICgyKV0ubGV4KS5zdHJpbmcsIG5ldyBUVHlwZSgoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0udHlwZSkpfTsKLSAgICAgICAgKHl5dmFsLmludGVybSkucGFyYW0gPSBwYXJhbTsKLSAgICB9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA4MjoKLQotICAgIHsKLSAgICAgICAgLy8gQ2hlY2sgdGhh
dCB3ZSBjYW4gbWFrZSBhbiBhcnJheSBvdXQgb2YgdGhpcyB0eXBlCi0gICAgICAgIGlmIChjb250
ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwgKHl5dnNwWygxKSAt
ICg1KV0uaW50ZXJtLnR5cGUpKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQot
ICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNSld
KSwgKih5eXZzcFsoMikgLSAoNSldLmxleCkuc3RyaW5nKSkKLSAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLQotICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgaWYgKGNvbnRleHQtPmFy
cmF5U2l6ZUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0pLCAoeXl2c3BbKDQpIC0gKDUpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKS5zZXRBcnJheSh0
cnVlLCBzaXplKTsKLQotICAgICAgICBUVHlwZSogdHlwZSA9IG5ldyBUVHlwZSgoeXl2c3BbKDEp
IC0gKDUpXS5pbnRlcm0udHlwZSkpOwotICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAoeXl2
c3BbKDIpIC0gKDUpXS5sZXgpLnN0cmluZywgdHlwZSB9OwotICAgICAgICAoeXl2YWwuaW50ZXJt
KS5wYXJhbSA9IHBhcmFtOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDgzOgotCi0gICAg
ewotICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMykgLSAoMyldLmludGVybSk7Ci0g
ICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICgzKV0pLCAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyLCAoeXl2c3BbKDIpIC0gKDMp
XS5pbnRlcm0ucXVhbGlmaWVyKSwgKHl5dmFsLmludGVybSkucGFyYW0udHlwZSkpCi0gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgODQ6
Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygyKSAtICgyKV0uaW50
ZXJtKTsKLSAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKCh5
eWxzcFsoMikgLSAoMildKSwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnF1YWxpZmllciksICoo
eXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLnBhcmFtLnR5cGUpKQotICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5eWxz
cFsoMikgLSAoMildKSwgRXZxVGVtcG9yYXJ5LCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0ucXVh
bGlmaWVyKSwgKHl5dmFsLmludGVybSkucGFyYW0udHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgODU6Ci0KLSAgICB7Ci0g
ICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKTsKLSAgICAg
ICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDMpXSksICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZpZXIsICh5eXZzcFsoMikgLSAoMyldLmlu
dGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJhbS50eXBlKSkKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA4NjoKLQot
ICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0p
OwotICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1ldGVyU2FtcGxlckVycm9yQ2hlY2soKHl5bHNw
WygyKSAtICgyKV0pLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0ucXVhbGlmaWVyKSwgKih5eXZz
cFsoMikgLSAoMildLmludGVybSkucGFyYW0udHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0gICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soKHl5bHNwWygy
KSAtICgyKV0pLCBFdnFUZW1wb3JhcnksICh5eXZzcFsoMSkgLSAoMildLmludGVybS5xdWFsaWZp
ZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJhbS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA4NzoKLQotICAgIHsKLSAgICAg
ICAgKHl5dmFsLmludGVybS5xdWFsaWZpZXIpID0gRXZxSW47Ci0gICAgfQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgODg6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9
IEV2cUluOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDg5OgotCi0gICAgewotICAgICAg
ICAoeXl2YWwuaW50ZXJtLnF1YWxpZmllcikgPSBFdnFPdXQ7Ci0gICAgfQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgOTA6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9
IEV2cUluT3V0OwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDkxOgotCi0gICAgewotICAg
ICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUoKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLnR5cGUpKSB9OwotICAgICAgICAoeXl2YWwuaW50ZXJtKS5wYXJhbSA9IHBhcmFtOwot
ICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDkyOgotCi0gICAgewotICAgICAgICAoeXl2YWwu
aW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybSk7Ci0gICAgfQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgOTM6Ci0KLSAgICB7Ci0gICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0pLnR5cGUudHlwZSA9PSBFYnRJbnZhcmlhbnQgJiYgISh5eXZzcFsoMykgLSAoMyldLmxleCku
c3ltYm9sKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDMp
IC0gKDMpXSksICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50Iiwg
KHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwotICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgVEludGVybVN5bWJvbCogc3lt
Ym9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygzKSAtICgz
KV0ubGV4KS5zdHJpbmcsIFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybSkudHlwZSksICh5
eWxzcFsoMykgLSAoMyldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0
ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoMyld
LmludGVybSkuaW50ZXJtTm9kZSwgc3ltYm9sLCAoeXlsc3BbKDMpIC0gKDMpXSkpOwotICAgICAg
ICAKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNw
WygzKSAtICgzKV0pLCAoeXl2YWwuaW50ZXJtKS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVj
aygoeXlsc3BbKDMpIC0gKDMpXSksICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5
dmFsLmludGVybSkudHlwZSwgZmFsc2UpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotCi0gICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwotICAgICAgICBpZiAoY29udGV4
dC0+bm9uSW5pdEVycm9yQ2hlY2soKHl5bHNwWygzKSAtICgzKV0pLCAqKHl5dnNwWygzKSAtICgz
KV0ubGV4KS5zdHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5cGUsIHZhcmlhYmxlKSkKLSAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgaWYgKHN5bWJvbCAmJiB2YXJpYWJsZSkK
LSAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUtPmdldFVuaXF1ZUlkKCkpOwotICAg
IH0KLSAgICBicmVhazsKLQotICBjYXNlIDk0OgotCi0gICAgewotICAgICAgICBpZiAoY29udGV4
dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDUpXSksICh5eXZzcFso
MSkgLSAoNSldLmludGVybSkudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5bHNwWygz
KSAtICg1KV0pLCAqKHl5dnNwWygzKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAo
NSldLmludGVybSkudHlwZSwgdHJ1ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0KLSAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pOwot
Ci0gICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eWxzcFsoNCkgLSAo
NSldKSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlKSB8fCBjb250ZXh0LT5hcnJheVF1
YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWyg0KSAtICg1KV0pLCAoeXl2c3BbKDEpIC0gKDUpXS5p
bnRlcm0pLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZS5zZXRBcnJh
eSh0cnVlKTsKLSAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGU7Ci0gICAgICAgICAgICBp
ZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCh5eWxzcFsoNCkgLSAoNSldKSwgKih5eXZzcFso
MykgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUsIHZh
cmlhYmxlKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA5NToKLQotICAgIHsKLSAgICAgICAgaWYgKGNv
bnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg2KV0pLCAoeXl2
c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eWxz
cFsoMykgLSAoNildKSwgKih5eXZzcFsoMykgLSAoNildLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEp
IC0gKDYpXS5pbnRlcm0pLnR5cGUsIHRydWUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotCi0gICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICg2KV0uaW50ZXJt
KTsKLQotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXlsc3BbKDQp
IC0gKDYpXSksICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSkgfHwgY29udGV4dC0+YXJy
YXlRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoNCkgLSAoNildKSwgKHl5dnNwWygxKSAtICg2
KV0uaW50ZXJtKS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgICAgIGlmIChjb250ZXh0
LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eWxzcFsoNCkgLSAoNildKSwgKHl5dnNwWyg1KSAtICg2
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNpemUpKQotICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlw
ZS5zZXRBcnJheSh0cnVlLCBzaXplKTsKLSAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUg
PSAwOwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygoeXlsc3BbKDQp
IC0gKDYpXSksICooeXl2c3BbKDMpIC0gKDYpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg2
KV0uaW50ZXJtKS50eXBlLCB2YXJpYWJsZSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotICAgICAgICAgICAgVFR5cGUgdHlwZSA9IFRUeXBlKCh5eXZzcFsoMSkgLSAoNild
LmludGVybSkudHlwZSk7Ci0gICAgICAgICAgICB0eXBlLnNldEFycmF5U2l6ZShzaXplKTsKLSAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoNildLmludGVybSkuaW50ZXJtTm9k
ZSwgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZSA/IHZhcmlhYmxlLT5n
ZXRVbmlxdWVJZCgpIDogMCwgKih5eXZzcFsoMykgLSAoNildLmxleCkuc3RyaW5nLCB0eXBlLCAo
eXlsc3BbKDMpIC0gKDYpXSkpLCAoeXlsc3BbKDMpIC0gKDYpXSkpOwotICAgICAgICB9Ci0gICAg
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgOTY6Ci0KLSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0
LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwgKHl5dnNwWygx
KSAtICg1KV0uaW50ZXJtKS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LQotICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoNSldLmludGVybSk7Ci0K
LSAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7Ci0gICAgICAgIGlmICghY29udGV4dC0+
ZXhlY3V0ZUluaXRpYWxpemVyKCh5eWxzcFsoMykgLSAoNSldKSwgKih5eXZzcFsoMykgLSAoNSld
LmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUsICh5eXZzcFsoNSkg
LSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbnRlcm1Ob2RlKSkgewotICAgICAgICAg
ICAgLy8KLSAgICAgICAgICAgIC8vIGJ1aWxkIHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRp
b24KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBpZiAoaW50ZXJtTm9kZSkKLSAgICAgICAg
KHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdy
b3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCBpbnRlcm1O
b2RlLCAoeXlsc3BbKDQpIC0gKDUpXSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9ICh5eXZzcFsoMSkgLSAoNSldLmlu
dGVybSkuaW50ZXJtQWdncmVnYXRlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVn
YXRlID0gMDsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDk3OgotCi0g
ICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLnR5cGUpOwotICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
U3ltYm9sKDAsICIiLCBUVHlwZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkpLCAoeXls
c3BbKDEpIC0gKDEpXSkpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgIH0KLSAgICBicmVhazsK
LQotICBjYXNlIDk4OgotCi0gICAgewotICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICooeXl2c3BbKDIpIC0gKDIpXS5sZXgp
LnN0cmluZywgVFR5cGUoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpKSwgKHl5bHNwWygy
KSAtICgyKV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCAoeXlsc3BbKDIpIC0gKDIp
XSkpOwotICAgICAgICAKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9y
Q2hlY2soKHl5bHNwWygyKSAtICgyKV0pLCAoeXl2YWwuaW50ZXJtKS50eXBlKSkKLSAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENv
bnN0RXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksICooeXl2c3BbKDIpIC0gKDIpXS5sZXgp
LnN0cmluZywgKHl5dmFsLmludGVybSkudHlwZSwgZmFsc2UpKQotICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS50
eXBlID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpOwotCi0gICAgICAgIFRWYXJpYWJs
ZSogdmFyaWFibGUgPSAwOwotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdEVycm9yQ2hlY2so
KHl5bHNwWygyKSAtICgyKV0pLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcsICh5eXZh
bC5pbnRlcm0pLnR5cGUsIHZhcmlhYmxlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgaWYgKHZhcmlhYmxlICYmIHN5bWJvbCkKLSAgICAgICAgICAgIHN5bWJvbC0+
c2V0SWQodmFyaWFibGUtPmdldFVuaXF1ZUlkKCkpOwotICAgIH0KLSAgICBicmVhazsKLQotICBj
YXNlIDk5OgotCi0gICAgewotICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDQp
XSksICJ1bnNpemVkIGFycmF5IGRlY2xhcmF0aW9ucyBub3Qgc3VwcG9ydGVkIiwgKHl5dnNwWygy
KSAtICg0KV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwotICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0KLSAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmcsIFRUeXBlKCh5
eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSksICh5eWxzcFsoMikgLSAoNCldKSk7Ci0gICAg
ICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgKHl5bHNwWygyKSAtICg0KV0pKTsKLSAgICAgICAgKHl5
dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKTsKLSAgICB9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMDA6Ci0KLSAgICB7Ci0gICAgICAgIFRUeXBlIHR5cGUg
PSBUVHlwZSgoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSkpOwotICAgICAgICBpbnQgc2l6
ZTsKLSAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soKHl5bHNwWygyKSAt
ICg1KV0pLCAoeXl2c3BbKDQpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkp
Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIHR5cGUuc2V0QXJyYXlT
aXplKHNpemUpOwotICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkU3ltYm9sKDAsICooeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0cmluZywgdHlw
ZSwgKHl5bHNwWygyKSAtICg1KV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdn
cmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCAoeXls
c3BbKDIpIC0gKDUpXSkpOwotICAgICAgICAKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1
YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg1KV0pLCAoeXl2c3BbKDEpIC0gKDUpXS5p
bnRlcm0udHlwZSkpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAg
IGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNSldKSwg
Kih5eXZzcFsoMikgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0u
dHlwZSksIHRydWUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAg
ICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSk7Ci0K
LSAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1
KV0pLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSkpIHx8IGNvbnRleHQtPmFycmF5UXVh
bGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmlu
dGVybS50eXBlKSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgaW50IHNpemU7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJy
YXlTaXplRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDUpXSksICh5eXZzcFsoNCkgLSAoNSldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCBzaXplKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0KLSAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKS5z
ZXRBcnJheSh0cnVlLCBzaXplKTsKLSAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAw
OwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygoeXlsc3BbKDMpIC0g
KDUpXSksICooeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1KV0u
aW50ZXJtLnR5cGUpLCB2YXJpYWJsZSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotICAgICAgICAgICAgaWYgKHZhcmlhYmxlICYmIHN5bWJvbCkKLSAgICAgICAgICAgICAg
ICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKLSAgICAgICAgfQotICAg
IH0KLSAgICBicmVhazsKLQotICBjYXNlIDEwMToKLQotICAgIHsKLSAgICAgICAgaWYgKGNvbnRl
eHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg0KV0pLCAoeXl2c3Bb
KDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotCi0gICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDQpXS5pbnRl
cm0udHlwZSk7Ci0KLSAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7Ci0gICAgICAgIGlm
ICghY29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKCh5eWxzcFsoMikgLSAoNCldKSwgKih5eXZz
cFsoMikgLSAoNCldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSks
ICh5eXZzcFsoNCkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbnRlcm1Ob2RlKSkg
ewotICAgICAgICAvLwotICAgICAgICAvLyBCdWlsZCBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRp
b24KLSAgICAgICAgLy8KLSAgICAgICAgICAgIGlmKGludGVybU5vZGUpCi0gICAgICAgICAgICAg
ICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
Lm1ha2VBZ2dyZWdhdGUoaW50ZXJtTm9kZSwgKHl5bHNwWygzKSAtICg0KV0pKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUg
PSAwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gMDsKLSAgICAgICAg
fQotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDEwMjoKLQotICAgIHsKLSAgICAgICAgVkVS
VEVYX09OTFkoImludmFyaWFudCBkZWNsYXJhdGlvbiIsICh5eWxzcFsoMSkgLSAoMildKSk7Ci0g
ICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMildKSwg
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAiaW52YXJpYW50IHZhcnlpbmci
KSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgKHl5dmFsLmludGVy
bSkudHlwZS5zZXRCYXNpYyhFYnRJbnZhcmlhbnQsIEV2cUludmFyaWFudFZhcnlpbmdPdXQsICh5
eWxzcFsoMikgLSAoMildKSk7Ci0gICAgICAgIGlmICghKHl5dnNwWygyKSAtICgyKV0ubGV4KS5z
eW1ib2wpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikg
LSAoMildKSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCAo
eXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7Ci0gICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0p
LmludGVybUFnZ3JlZ2F0ZSA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7
Ci0gICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkU3ltYm9sKDAsICooeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZywgVFR5cGUoKHl5
dmFsLmludGVybSkudHlwZSksICh5eWxzcFsoMikgLSAoMildKSk7Ci0gICAgICAgICAgICAoeXl2
YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFn
Z3JlZ2F0ZShzeW1ib2wsICh5eWxzcFsoMikgLSAoMildKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSAxMDM6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7Ci0KLSAgICAgICAgaWYgKCh5
eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5hcnJheSkgewotICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0pLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFz
cyBhcnJheSIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAg
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnNldEFycmF5KGZhbHNlKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDEwNDoKLQotICAgIHsKLSAgICAgICAgaWYg
KCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5hcnJheSkgewotICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgyKV0pLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1j
bGFzcyBhcnJheSIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAg
ICAgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnNldEFycmF5KGZhbHNlKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlm
aWVyID09IEV2cUF0dHJpYnV0ZSAmJgotICAgICAgICAgICAgKCh5eXZzcFsoMikgLSAoMildLmlu
dGVybS50eXBlKS50eXBlID09IEVidEJvb2wgfHwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5
cGUpLnR5cGUgPT0gRWJ0SW50KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNw
WygyKSAtICgyKV0pLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5n
KCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIpKTsKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKCh5eXZzcFsoMSkg
LSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8ICh5eXZzcFso
MSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKLSAg
ICAgICAgICAgICgoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRCb29s
IHx8ICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidEludCkpIHsKLSAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgImNhbm5vdCBiZSBi
b29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0u
dHlwZSkucXVhbGlmaWVyKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMikgLSAoMildLmlu
dGVybS50eXBlKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSAoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyOwotICAgIH0KLSAgICBicmVhazsK
LQotICBjYXNlIDEwNToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRWb2lkLCBFdnFDb25zdCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICB9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSAxMDY6Ci0KLSAgICB7Ci0gICAgICAgIFZFUlRFWF9PTkxZKCJhdHRy
aWJ1dGUiLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFs
RXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDEpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSwgImF0dHJpYnV0ZSIpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUF0dHJp
YnV0ZSwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAx
MDc6Ci0KLSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCh5eWxz
cFsoMSkgLSAoMSldKSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAidmFy
eWluZyIpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBpZiAoY29u
dGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKQotICAgICAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFWYXJ5aW5nT3V0LCAoeXlsc3BbKDEp
IC0gKDEpXSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnNldEJhc2ljKEVidFZvaWQsIEV2cVZhcnlpbmdJbiwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAg
ICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMDg6Ci0KLSAgICB7Ci0gICAgICAgIGlmIChjb250
ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMildKSwgY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpLCAiaW52YXJpYW50IHZhcnlpbmciKSkKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgPT0g
U0hfVkVSVEVYX1NIQURFUikKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFz
aWMoRWJ0Vm9pZCwgRXZxSW52YXJpYW50VmFyeWluZ091dCwgKHl5bHNwWygxKSAtICgyKV0pKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhF
YnRWb2lkLCBFdnFJbnZhcmlhbnRWYXJ5aW5nSW4sICh5eWxzcFsoMSkgLSAoMildKSk7Ci0gICAg
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTA5OgotCi0gICAgewotICAgICAgICBpZiAoY29udGV4
dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDEpXSksIGNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSwgInVuaWZvcm0iKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBF
dnFVbmlmb3JtLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgIH0KLSAgICBicmVhazsKLQotICBj
YXNlIDExMDoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS50eXBlKTsKLQotICAgICAgICBpZiAoKHl5dmFsLmludGVybS50eXBl
KS5wcmVjaXNpb24gPT0gRWJwVW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnByZWNpc2lvbiA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmdldERlZmF1bHRQcmVjaXNp
b24oKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5cGUpOwotICAgICAgICAgICAgaWYg
KGNvbnRleHQtPnByZWNpc2lvbkVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgxKV0pLCAoeXl2YWwu
aW50ZXJtLnR5cGUpLnByZWNpc2lvbiwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5
cGUpKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTExOgotCi0gICAgewot
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5
cGUpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnByZWNpc2lvbiA9ICh5eXZzcFsoMSkg
LSAoMildLmludGVybS5wcmVjaXNpb24pOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDEx
MjoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5wcmVjaXNpb24pID0gRWJwSGlnaDsK
LSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMTM6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZh
bC5pbnRlcm0ucHJlY2lzaW9uKSA9IEVicE1lZGl1bTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSAxMTQ6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0ucHJlY2lzaW9uKSA9IEVi
cExvdzsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMTU6Ci0KLSAgICB7Ci0gICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7Ci0g
ICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTE2OgotCi0gICAgewotICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpOwotCi0gICAgICAg
IGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNCldKSwgKHl5
dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgICAg
IGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNCldKSwgKHl5
dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNpemUpKQotICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSAxMTc6Ci0KLSAgICB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
LSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBxdWFsLCAoeXls
c3BbKDEpIC0gKDEpXSkpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDExODoKLQotICAg
IHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9i
YWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwot
ICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDExOToKLQotICAgIHsKLSAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2lj
KEVidEludCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSAxMjA6Ci0KLSAgICB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
LSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXls
c3BbKDEpIC0gKDEpXSkpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDEyMToKLQotICAg
IHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9i
YWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwot
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgyKTsKLSAgICB9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSAxMjI6Ci0KLSAgICB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwg
cXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5z
ZXRBZ2dyZWdhdGUoMyk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTIzOgotCi0gICAg
ewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2Jh
bExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0g
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDQpOwotICAgIH0KLSAgICBi
cmVhazsKLQotICBjYXNlIDEyNDoKLQotICAgIHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEJvb2wsIHF1
YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0
QWdncmVnYXRlKDIpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDEyNToKLQotICAgIHsK
LSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxM
ZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnNldEJhc2ljKEVidEJvb2wsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOwotICAgIH0KLSAgICBicmVh
azsKLQotICBjYXNlIDEyNjoKLQotICAgIHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEJvb2wsIHF1YWws
ICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdn
cmVnYXRlKDQpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDEyNzoKLQotICAgIHsKLSAg
ICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEJhc2ljKEVidEludCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMik7Ci0gICAgfQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgMTI4OgotCi0gICAgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7
Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXls
c3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0
ZSgzKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMjk6Ci0KLSAgICB7Ci0gICAgICAg
IFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/
IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5z
ZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDQpOwotICAgIH0KLSAgICBicmVhazsKLQotICBj
YXNlIDEzMDoKLQotICAgIHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3Bb
KDEpIC0gKDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgy
LCB0cnVlKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMzE6Ci0KLSAgICB7Ci0gICAg
ICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMywgdHJ1ZSk7Ci0gICAgfQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgMTMyOgotCi0gICAgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1
YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0
QWdncmVnYXRlKDQsIHRydWUpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDEzMzoKLQot
ICAgIHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRH
bG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNhbXBsZXIyRCwgcXVhbCwgKHl5bHNwWygxKSAtICgx
KV0pKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMzQ6Ci0KLSAgICB7Ci0gICAgICAg
IFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/
IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5z
ZXRCYXNpYyhFYnRTYW1wbGVyQ3ViZSwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICB9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMzU6Ci0KLSAgICB7Ci0gICAgICAgIGlmICghY29udGV4
dC0+c3VwcG9ydHNFeHRlbnNpb24oIkdMX09FU19FR0xfaW1hZ2VfZXh0ZXJuYWwiKSkgewotICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0pLCAidW5zdXBwb3J0ZWQg
dHlwZSIsICJzYW1wbGVyRXh0ZXJuYWxPRVMiKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1i
b2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U2FtcGxlckV4dGVybmFsT0VTLCBx
dWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDEz
NjoKLQotICAgIHsKLSAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0V4dGVuc2lvbigiR0xf
QVJCX3RleHR1cmVfcmVjdGFuZ2xlIikpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eWxzcFsoMSkgLSAoMSldKSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlcjJEUmVjdCIpOwot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgIFRRdWFs
aWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUds
b2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNp
YyhFYnRTYW1wbGVyMkRSZWN0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgIH0KLSAg
ICBicmVhazsKLQotICBjYXNlIDEzNzoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsKLSAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5xdWFsaWZpZXIgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNh
c2UgMTM4OgotCi0gICAgewotICAgICAgICAvLwotICAgICAgICAvLyBUaGlzIGlzIGZvciB1c2Vy
IGRlZmluZWQgdHlwZSBuYW1lcy4gIFRoZSBsZXhpY2FsIHBoYXNlIGxvb2tlZCB1cCB0aGUKLSAg
ICAgICAgLy8gdHlwZS4KLSAgICAgICAgLy8KLSAgICAgICAgVFR5cGUmIHN0cnVjdHVyZSA9IHN0
YXRpY19jYXN0PFRWYXJpYWJsZSo+KCh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3ltYm9sKS0+Z2V0
VHlwZSgpOwotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U3RydWN0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEp
XSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnVzZXJEZWYgPSAmc3RydWN0dXJlOwot
ICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDEzOToKLQotICAgIHsgaWYgKGNvbnRleHQtPmVu
dGVyU3RydWN0RGVjbGFyYXRpb24oKHl5bHNwWygyKSAtICgzKV0pLCAqKHl5dnNwWygyKSAtICgz
KV0ubGV4KS5zdHJpbmcpKSBjb250ZXh0LT5yZWNvdmVyKCk7IH0KLSAgICBicmVhazsKLQotICBj
YXNlIDE0MDoKLQotICAgIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVj
aygoeXlsc3BbKDIpIC0gKDYpXSksICooeXl2c3BbKDIpIC0gKDYpXS5sZXgpLnN0cmluZykpCi0g
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgVFR5cGUqIHN0cnVjdHVy
ZSA9IG5ldyBUVHlwZShuZXcgVFN0cnVjdHVyZSgoeXl2c3BbKDIpIC0gKDYpXS5sZXgpLnN0cmlu
ZywgKHl5dnNwWyg1KSAtICg2KV0uaW50ZXJtLmZpZWxkTGlzdCkpKTsKLSAgICAgICAgVFZhcmlh
YmxlKiB1c2VyVHlwZURlZiA9IG5ldyBUVmFyaWFibGUoKHl5dnNwWygyKSAtICg2KV0ubGV4KS5z
dHJpbmcsICpzdHJ1Y3R1cmUsIHRydWUpOwotICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xU
YWJsZS5pbnNlcnQoKnVzZXJUeXBlRGVmKSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
KHl5bHNwWygyKSAtICg2KV0pLCAicmVkZWZpbml0aW9uIiwgKHl5dnNwWygyKSAtICg2KV0ubGV4
KS5zdHJpbmctPmNfc3RyKCksICJzdHJ1Y3QiKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgfQotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVi
dFN0cnVjdCwgRXZxVGVtcG9yYXJ5LCAoeXlsc3BbKDEpIC0gKDYpXSkpOwotICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7Ci0gICAgICAgIGNvbnRleHQtPmV4
aXRTdHJ1Y3REZWNsYXJhdGlvbigpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE0MToK
LQotICAgIHsgaWYgKGNvbnRleHQtPmVudGVyU3RydWN0RGVjbGFyYXRpb24oKHl5bHNwWygyKSAt
ICgyKV0pLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcpKSBjb250ZXh0LT5yZWNvdmVy
KCk7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDE0MjoKLQotICAgIHsKLSAgICAgICAgVFR5cGUq
IHN0cnVjdHVyZSA9IG5ldyBUVHlwZShuZXcgVFN0cnVjdHVyZShOZXdQb29sVFN0cmluZygiIiks
ICh5eXZzcFsoNCkgLSAoNSldLmludGVybS5maWVsZExpc3QpKSk7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U3RydWN0LCBFdnFUZW1wb3JhcnksICh5eWxzcFsoMSkg
LSAoNSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkudXNlckRlZiA9IHN0cnVjdHVy
ZTsKLSAgICAgICAgY29udGV4dC0+ZXhpdFN0cnVjdERlY2xhcmF0aW9uKCk7Ci0gICAgfQotICAg
IGJyZWFrOwotCi0gIGNhc2UgMTQzOgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmZp
ZWxkTGlzdCkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uZmllbGRMaXN0KTsKLSAgICB9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSAxNDQ6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0u
ZmllbGRMaXN0KSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5maWVsZExpc3QpOwotICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8ICh5eXZzcFsoMikgLSAoMildLmludGVybS5maWVsZExp
c3QpLT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgVEZpZWxkKiBmaWVsZCA9ICgqKHl5dnNw
WygyKSAtICgyKV0uaW50ZXJtLmZpZWxkTGlzdCkpW2ldOwotICAgICAgICAgICAgZm9yIChzaXpl
X3QgaiA9IDA7IGogPCAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCktPnNpemUoKTsgKytqKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCgqKHl5dmFsLmludGVybS5maWVsZExpc3QpKVtqXS0+bmFtZSgp
ID09IGZpZWxkLT5uYW1lKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
KHl5bHNwWygyKSAtICgyKV0pLCAiZHVwbGljYXRlIGZpZWxkIG5hbWUgaW4gc3RydWN0dXJlOiIs
ICJzdHJ1Y3QiLCBmaWVsZC0+bmFtZSgpLmNfc3RyKCkpOwotICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgKHl5dmFsLmludGVybS5maWVsZExpc3QpLT5wdXNoX2JhY2soZmllbGQpOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTQ1OgotCi0gICAgewotICAgICAg
ICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uZmll
bGRMaXN0KTsKLQotICAgICAgICBpZiAoY29udGV4dC0+dm9pZEVycm9yQ2hlY2soKHl5bHNwWygx
KSAtICgzKV0pLCAoKih5eXZzcFsoMikgLSAoMyldLmludGVybS5maWVsZExpc3QpKVswXS0+bmFt
ZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkpKSB7Ci0gICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCktPnNpemUoKTsgKytpKSB7Ci0gICAgICAg
ICAgICAvLwotICAgICAgICAgICAgLy8gQ2FyZWZ1bCBub3QgdG8gcmVwbGFjZSBhbHJlYWR5IGtu
b3duIGFzcGVjdHMgb2YgdHlwZSwgbGlrZSBhcnJheS1uZXNzCi0gICAgICAgICAgICAvLwotICAg
ICAgICAgICAgVFR5cGUqIHR5cGUgPSAoKih5eXZhbC5pbnRlcm0uZmllbGRMaXN0KSlbaV0tPnR5
cGUoKTsKLSAgICAgICAgICAgIHR5cGUtPnNldEJhc2ljVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0udHlwZSkudHlwZSk7Ci0gICAgICAgICAgICB0eXBlLT5zZXROb21pbmFsU2l6ZSgoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkuc2l6ZSk7Ci0gICAgICAgICAgICB0eXBlLT5zZXRN
YXRyaXgoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLm1hdHJpeCk7Ci0gICAgICAgICAg
ICB0eXBlLT5zZXRQcmVjaXNpb24oKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnByZWNp
c2lvbik7Ci0KLSAgICAgICAgICAgIC8vIGRvbid0IGFsbG93IGFycmF5cyBvZiBhcnJheXMKLSAg
ICAgICAgICAgIGlmICh0eXBlLT5pc0FycmF5KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY29u
dGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDMpXSksICh5eXZzcFsoMSkg
LSAoMyldLmludGVybS50eXBlKSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0udHlwZSkuYXJyYXkpCi0gICAgICAgICAgICAgICAgdHlwZS0+c2V0QXJyYXlTaXplKCh5
eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5hcnJheVNpemUpOwotICAgICAgICAgICAgaWYg
KCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS51c2VyRGVmKQotICAgICAgICAgICAgICAg
IHR5cGUtPnNldFN0cnVjdCgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkudXNlckRlZi0+
Z2V0U3RydWN0KCkpOwotCi0gICAgICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0TmVzdGluZ0Vy
cm9yQ2hlY2soKHl5bHNwWygxKSAtICgzKV0pLCAqKCooeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkp
W2ldKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNDY6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0uZmllbGRMaXN0KSA9IE5ld1Bvb2xURmllbGRMaXN0KCk7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0uZmllbGRMaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS5maWVs
ZCkpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE0NzoKLQotICAgIHsKLSAgICAgICAg
KHl5dmFsLmludGVybS5maWVsZExpc3QpLT5wdXNoX2JhY2soKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtLmZpZWxkKSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTQ4OgotCi0gICAgewot
ICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSld
KSwgKih5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nKSkKLSAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLQotICAgICAgICBUVHlwZSogdHlwZSA9IG5ldyBUVHlwZShFYnRWb2lkLCBF
YnBVbmRlZmluZWQpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkKSA9IG5ldyBURmllbGQo
dHlwZSwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcpOwotICAgIH0KLSAgICBicmVhazsK
LQotICBjYXNlIDE0OToKLQotICAgIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJy
b3JDaGVjaygoeXlsc3BbKDEpIC0gKDQpXSksICooeXl2c3BbKDEpIC0gKDQpXS5sZXgpLnN0cmlu
ZykpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgVFR5cGUqIHR5
cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKLSAgICAgICAgaW50IHNpemUg
PSAwOwotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygoeXlsc3BbKDMp
IC0gKDQpXSksICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBzaXpl
KSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgdHlwZS0+c2V0QXJy
YXlTaXplKHNpemUpOwotCi0gICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGQpID0gbmV3IFRGaWVs
ZCh0eXBlLCAoeXl2c3BbKDEpIC0gKDQpXS5sZXgpLnN0cmluZyk7Ci0gICAgfQotICAgIGJyZWFr
OwotCi0gIGNhc2UgMTUwOgotCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQotICAgIGJyZWFr
OwotCi0gIGNhc2UgMTUxOgotCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSAxNTI6Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTUz
OgotCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybU5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNTQ6Ci0KLSAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50
ZXJtTm9kZSk7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDE1NToKLQotICAgIHsgKHl5dmFsLmlu
dGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsg
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTU2OgotCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9Ci0gICAgYnJl
YWs7Ci0KLSAgY2FzZSAxNTc6Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KLSAgICBicmVhazsKLQotICBj
YXNlIDE1ODoKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTU5Ogot
Ci0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgPSAwOyB9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSAxNjA6Ci0KLSAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgfQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgMTYxOgotCi0gICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5w
b3AoKTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTYyOgotCi0gICAgewotICAgICAgICBpZiAo
KHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgIT0gMCkgewotICAgICAg
ICAgICAgKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSktPnNldE9wKEVP
cFNlcXVlbmNlKTsKLSAgICAgICAgICAgICh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1B
Z2dyZWdhdGUpLT5zZXRMaW5lKCh5eWxvYykpOwotICAgICAgICB9Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtQWdncmVnYXRlKSA9ICh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1B
Z2dyZWdhdGUpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE2MzoKLQotICAgIHsgKHl5
dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1O
b2RlKTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTY0OgotCi0gICAgeyAoeXl2YWwuaW50ZXJt
LmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSAxNjU6Ci0KLSAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1
c2goKTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTY2OgotCi0gICAgeyBjb250ZXh0LT5zeW1i
b2xUYWJsZS5wb3AoKTsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMikgLSAo
MildLmludGVybS5pbnRlcm1Ob2RlKTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTY3OgotCi0g
ICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0KLSAgICBicmVhazsKLQotICBjYXNl
IDE2ODoKLQotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7ICh5eXZhbC5pbnRlcm0u
aW50ZXJtTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KLSAg
ICBicmVhazsKLQotICBjYXNlIDE2OToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1Ob2RlKSA9IDA7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTcwOgotCi0gICAg
ewotICAgICAgICBpZiAoKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkp
IHsKLSAgICAgICAgICAgICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUp
LT5zZXRPcChFT3BTZXF1ZW5jZSk7Ci0gICAgICAgICAgICAoeXl2c3BbKDIpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtQWdncmVnYXRlKS0+c2V0TGluZSgoeXlsb2MpKTsKLSAgICAgICAgfQotICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmlu
dGVybUFnZ3JlZ2F0ZSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTcxOgotCi0gICAg
ewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9k
ZSksICh5eWxvYykpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE3MjoKLQotICAgIHsK
LSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybUFnZ3Jl
Z2F0ZSksICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1Ob2RlKSwgKHl5bG9jKSk7Ci0g
ICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTczOgotCi0gICAgeyAoeXl2YWwuaW50ZXJtLmlu
dGVybU5vZGUpID0gMDsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTc0OgotCi0gICAgeyAoeXl2
YWwuaW50ZXJtLmludGVybU5vZGUpID0gc3RhdGljX2Nhc3Q8VEludGVybU5vZGUqPigoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSk7IH0KLSAgICBicmVhazsKLQotICBj
YXNlIDE3NToKLQotICAgIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCh5
eWxzcFsoMSkgLSAoNSldKSwgKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFNlbGVjdGlvbigoeXl2
c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWyg1KSAtICg1KV0u
aW50ZXJtLm5vZGVQYWlyKSwgKHl5bHNwWygxKSAtICg1KV0pKTsKLSAgICB9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSAxNzY6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIp
Lm5vZGUxID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybU5vZGUpOwotICAgICAgICAo
eXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMiA9ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5p
bnRlcm1Ob2RlKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNzc6Ci0KLSAgICB7Ci0g
ICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUxID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybU5vZGUpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2Rl
MiA9IDA7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTc4OgotCi0gICAgewotICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICAgICAgaWYgKGNvbnRleHQtPmJvb2xFcnJvckNoZWNr
KCh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRMaW5lKCksICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKLSAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNzk6Ci0KLSAg
ICB7Ci0gICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOwotICAgICAgICBpZiAoY29udGV4
dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDQpXSksICh5eXZzcFso
MSkgLSAoNCldLmludGVybS50eXBlKSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0gICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDQpXSks
ICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSkpCi0gICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKCFjb250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoKHl5
bHNwWygyKSAtICg0KV0pLCAqKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmcsICh5eXZzcFso
MSkgLSAoNCldLmludGVybS50eXBlKSwgKHl5dnNwWyg0KSAtICg0KV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksIGludGVybU5vZGUpKQotICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gKHl5dnNwWyg0KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0g
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gMDsKLSAgICAgICAgfQotICAgIH0K
LSAgICBicmVhazsKLQotICBjYXNlIDE4MDoKLQotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUu
cHVzaCgpOyArK2NvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0KLSAgICBicmVhazsKLQotICBj
YXNlIDE4MToKLQotICAgIHsKLSAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7Ci0g
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkTG9vcChFTG9vcFdoaWxlLCAwLCAoeXl2c3BbKDQpIC0gKDYpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSwgMCwgKHl5dnNwWyg2KSAtICg2KV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXlsc3Bb
KDEpIC0gKDYpXSkpOwotICAgICAgICAtLWNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7Ci0gICAg
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTgyOgotCi0gICAgeyArK2NvbnRleHQtPmxvb3BOZXN0
aW5nTGV2ZWw7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDE4MzoKLQotICAgIHsKLSAgICAgICAg
aWYgKGNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCh5eWxzcFsoOCkgLSAoOCldKSwgKHl5dnNwWyg2
KSAtICg4KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQotICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotCi0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkTG9vcChFTG9vcERvV2hpbGUsIDAsICh5eXZzcFsoNikgLSAoOCld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAwLCAoeXl2c3BbKDMpIC0gKDgpXS5pbnRlcm0uaW50
ZXJtTm9kZSksICh5eWxzcFsoNCkgLSAoOCldKSk7Ci0gICAgICAgIC0tY29udGV4dC0+bG9vcE5l
c3RpbmdMZXZlbDsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxODQ6Ci0KLSAgICB7IGNv
bnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyB9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxODU6Ci0KLSAgICB7Ci0gICAgICAgIGNvbnRleHQtPnN5
bWJvbFRhYmxlLnBvcCgpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3AoRUxvb3BGb3IsICh5eXZzcFsoNCkgLSAoNyldLmlu
dGVybS5pbnRlcm1Ob2RlKSwgcmVpbnRlcnByZXRfY2FzdDxUSW50ZXJtVHlwZWQqPigoeXl2c3Bb
KDUpIC0gKDcpXS5pbnRlcm0ubm9kZVBhaXIpLm5vZGUxKSwgcmVpbnRlcnByZXRfY2FzdDxUSW50
ZXJtVHlwZWQqPigoeXl2c3BbKDUpIC0gKDcpXS5pbnRlcm0ubm9kZVBhaXIpLm5vZGUyKSwgKHl5
dnNwWyg3KSAtICg3KV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXlsc3BbKDEpIC0gKDcpXSkpOwot
ICAgICAgICAtLWNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7Ci0gICAgfQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgMTg2OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwotICAgIH0KLSAgICBicmVh
azsKLQotICBjYXNlIDE4NzoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1O
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKLSAgICB9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSAxODg6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
OwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE4OToKLQotICAgIHsKLSAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gMDsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSAxOTA6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUx
ID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgICAgICh5
eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUyID0gMDsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSAxOTE6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUx
ID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgICAgICh5
eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUyID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTkyOgotCi0gICAg
ewotICAgICAgICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDIpXSksICJjb250aW51ZSBzdGF0ZW1l
bnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcENvbnRpbnVlLCAoeXlsc3BbKDEpIC0g
KDIpXSkpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE5MzoKLQotICAgIHsKLSAgICAg
ICAgaWYgKGNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPD0gMCkgewotICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgyKV0pLCAiYnJlYWsgc3RhdGVtZW50IG9ubHkgYWxs
b3dlZCBpbiBsb29wcyIsICIiKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgfQotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BCcmVhaywgKHl5bHNwWygxKSAtICgyKV0pKTsKLSAgICB9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxOTQ6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVy
biwgKHl5bHNwWygxKSAtICgyKV0pKTsKLSAgICAgICAgaWYgKGNvbnRleHQtPmN1cnJlbnRGdW5j
dGlvblR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQpIHsKLSAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMildKSwgIm5vbi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0
dXJuIGEgdmFsdWUiLCAicmV0dXJuIik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxOTU6Ci0KLSAgICB7Ci0g
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkQnJhbmNoKEVPcFJldHVybiwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eWxzcFsoMSkgLSAoMyldKSk7Ci0gICAgICAgIGNvbnRleHQtPmZ1bmN0aW9uUmV0
dXJuc1ZhbHVlID0gdHJ1ZTsKLSAgICAgICAgaWYgKGNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5
cGUtPmdldEJhc2ljVHlwZSgpID09IEVidFZvaWQpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eWxzcFsoMSkgLSAoMyldKSwgInZvaWQgZnVuY3Rpb24gY2Fubm90IHJldHVybiBhIHZh
bHVlIiwgInJldHVybiIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAg
ICB9IGVsc2UgaWYgKCooY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZSkgIT0gKHl5dnNwWygy
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKSkgewotICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgzKV0pLCAiZnVuY3Rpb24gcmV0dXJuIGlz
IG5vdCBtYXRjaGluZyB0eXBlOiIsICJyZXR1cm4iKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE5NjoKLQot
ICAgIHsKLSAgICAgICAgRlJBR19PTkxZKCJkaXNjYXJkIiwgKHl5bHNwWygxKSAtICgyKV0pKTsK
LSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRCcmFuY2goRU9wS2lsbCwgKHl5bHNwWygxKSAtICgyKV0pKTsKLSAgICB9Ci0gICAgYnJl
YWs7Ci0KLSAgY2FzZSAxOTc6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgICAgIGNv
bnRleHQtPnRyZWVSb290ID0gKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKTsKLSAgICB9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSAxOTg6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEp
IC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRl
cm1Ob2RlKSwgKHl5bG9jKSk7Ci0gICAgICAgIGNvbnRleHQtPnRyZWVSb290ID0gKHl5dmFsLmlu
dGVybS5pbnRlcm1Ob2RlKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxOTk6Ci0KLSAg
ICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjAwOgot
Ci0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDIw
MToKLQotICAgIHsKLSAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlvbiA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybSkuZnVuY3Rpb247Ci0gICAgICAgIAotICAgICAgICBjb25zdCBUU3ltYm9sICpi
dWlsdEluID0gY29udGV4dC0+c3ltYm9sVGFibGUuZmluZEJ1aWx0SW4oZnVuY3Rpb24tPmdldE1h
bmdsZWROYW1lKCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKGJ1aWx0SW4pCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgImJ1aWx0LWlu
IGZ1bmN0aW9ucyBjYW5ub3QgYmUgcmVkZWZpbmVkIiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0
cigpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4o
Y29udGV4dC0+c3ltYm9sVGFibGUuZmluZChmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSkpOwot
ICAgICAgICAvLwotICAgICAgICAvLyBOb3RlOiAgJ3ByZXZEZWMnIGNvdWxkIGJlICdmdW5jdGlv
bicgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSd2ZSBzZWVuIGZ1bmN0aW9uCi0gICAgICAg
IC8vIGFzIGl0IHdvdWxkIGhhdmUganVzdCBiZWVuIHB1dCBpbiB0aGUgc3ltYm9sIHRhYmxlLiAg
T3RoZXJ3aXNlLCB3ZSdyZSBsb29raW5nIHVwCi0gICAgICAgIC8vIGFuIGVhcmxpZXIgb2NjdXJh
bmNlLgotICAgICAgICAvLwotICAgICAgICBpZiAocHJldkRlYy0+aXNEZWZpbmVkKCkpIHsKLSAg
ICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBUaGVuIHRoaXMgZnVuY3Rpb24gYWxyZWFkeSBo
YXMgYSBib2R5LgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eWxzcFsoMSkgLSAoMSldKSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9u
LT5nZXROYW1lKCkuY19zdHIoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcHJldkRlYy0+c2V0RGVmaW5lZCgpOwotCi0gICAgICAgIC8vCi0g
ICAgICAgIC8vIFJhaXNlIGVycm9yIG1lc3NhZ2UgaWYgbWFpbiBmdW5jdGlvbiB0YWtlcyBhbnkg
cGFyYW1ldGVycyBvciByZXR1cm4gYW55dGhpbmcgb3RoZXIgdGhhbiB2b2lkCi0gICAgICAgIC8v
Ci0gICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0TmFtZSgpID09ICJtYWluIikgewotICAgICAgICAg
ICAgaWYgKGZ1bmN0aW9uLT5nZXRQYXJhbUNvdW50KCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0pLCAiZnVuY3Rpb24gY2Fubm90IHRha2Ug
YW55IHBhcmFtZXRlcihzKSIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSk7Ci0gICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKGZ1bmN0aW9uLT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkg
ewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgIiIs
IGZ1bmN0aW9uLT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNTdHJpbmcoKSwgIm1haW4gZnVuY3Rp
b24gY2Fubm90IHJldHVybiBhIHZhbHVlIik7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8KLSAgICAgICAg
Ly8gUmVtZW1iZXIgdGhlIHJldHVybiB0eXBlIGZvciBsYXRlciBjaGVja2luZyBmb3IgUkVUVVJO
IHN0YXRlbWVudHMuCi0gICAgICAgIC8vCi0gICAgICAgIGNvbnRleHQtPmN1cnJlbnRGdW5jdGlv
blR5cGUgPSAmKHByZXZEZWMtPmdldFJldHVyblR5cGUoKSk7Ci0gICAgICAgIGNvbnRleHQtPmZ1
bmN0aW9uUmV0dXJuc1ZhbHVlID0gZmFsc2U7Ci0KLSAgICAgICAgLy8KLSAgICAgICAgLy8gSW5z
ZXJ0IHBhcmFtZXRlcnMgaW50byB0aGUgc3ltYm9sIHRhYmxlLgotICAgICAgICAvLyBJZiB0aGUg
cGFyYW1ldGVyIGhhcyBubyBuYW1lLCBpdCdzIG5vdCBhbiBlcnJvciwganVzdCBkb24ndCBpbnNl
cnQgaXQKLSAgICAgICAgLy8gKGNvdWxkIGJlIHVzZWQgZm9yIHVudXNlZCBhcmdzKS4KLSAgICAg
ICAgLy8KLSAgICAgICAgLy8gQWxzbywgYWNjdW11bGF0ZSB0aGUgbGlzdCBvZiBwYXJhbWV0ZXJz
IGludG8gdGhlIEhJTCwgc28gbG93ZXIgbGV2ZWwgY29kZQotICAgICAgICAvLyBrbm93cyB3aGVy
ZSB0byBmaW5kIHBhcmFtZXRlcnMuCi0gICAgICAgIC8vCi0gICAgICAgIFRJbnRlcm1BZ2dyZWdh
dGUqIHBhcmFtTm9kZXMgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBmdW5jdGlvbi0+Z2V0UGFyYW1Db3VudCgpOyBpKyspIHsKLSAgICAgICAg
ICAgIGNvbnN0IFRQYXJhbWV0ZXImIHBhcmFtID0gZnVuY3Rpb24tPmdldFBhcmFtKGkpOwotICAg
ICAgICAgICAgaWYgKHBhcmFtLm5hbWUgIT0gMCkgewotICAgICAgICAgICAgICAgIFRWYXJpYWJs
ZSAqdmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKHBhcmFtLm5hbWUsICpwYXJhbS50eXBlKTsKLSAg
ICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIC8vIEluc2VydCB0aGUgcGFyYW1ldGVy
cyB3aXRoIG5hbWUgaW4gdGhlIHN5bWJvbCB0YWJsZS4KLSAgICAgICAgICAgICAgICAvLwotICAg
ICAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSld
KSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgZGVs
ZXRlIHZhcmlhYmxlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vCi0g
ICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBwYXJhbWV0ZXIgdG8gdGhlIEhJTAotICAgICAgICAg
ICAgICAgIC8vCi0gICAgICAgICAgICAgICAgcGFyYW1Ob2RlcyA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5ncm93QWdncmVnYXRlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbU5vZGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5n
ZXRVbmlxdWVJZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXROYW1lKCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoeXlsc3BbKDEpIC0gKDEpXSkpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwYXJhbU5vZGVzID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmdyb3dBZ2dyZWdhdGUocGFyYW1Ob2RlcywgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5
bWJvbCgwLCAiIiwgKnBhcmFtLnR5cGUsICh5eWxzcFsoMSkgLSAoMSldKSksICh5eWxzcFsoMSkg
LSAoMSldKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY29udGV4dC0+aW50
ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKHBhcmFtTm9kZXMsIEVPcFBhcmFtZXRlcnMs
ICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZzcFsoMSkgLSAoMSldLmludGVybSku
aW50ZXJtQWdncmVnYXRlID0gcGFyYW1Ob2RlczsKLSAgICAgICAgY29udGV4dC0+bG9vcE5lc3Rp
bmdMZXZlbCA9IDA7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjAyOgotCi0gICAgewot
ICAgICAgICAvLz8/IENoZWNrIHRoYXQgYWxsIHBhdGhzIHJldHVybiBhIHZhbHVlIGlmIHJldHVy
biB0eXBlICE9IHZvaWQgPwotICAgICAgICAvLyAgIE1heSBiZSBiZXN0IGRvbmUgYXMgcG9zdCBw
cm9jZXNzIHBoYXNlIG9uIGludGVybWVkaWF0ZSBjb2RlCi0gICAgICAgIGlmIChjb250ZXh0LT5j
dXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkICYmICEgY29udGV4
dC0+ZnVuY3Rpb25SZXR1cm5zVmFsdWUpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eWxzcFsoMSkgLSAoMyldKSwgImZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiBhIHZhbHVlOiIsICIi
LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSk7
Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
Z3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSwg
KHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXlsb2MpKTsKLSAgICAgICAg
Y29udGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKCh5eXZhbC5pbnRlcm0u
aW50ZXJtTm9kZSksIEVPcEZ1bmN0aW9uLCAoeXlsc3BbKDEpIC0gKDMpXSkpOwotICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXROYW1lKCh5eXZz
cFsoMSkgLSAoMyldLmludGVybSkuZnVuY3Rpb24tPmdldE1hbmdsZWROYW1lKCkuY19zdHIoKSk7
Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNl
dFR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5mdW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgp
KTsKLQotICAgICAgICAvLyBzdG9yZSB0aGUgcHJhZ21hIGluZm9ybWF0aW9uIGZvciBkZWJ1ZyBh
bmQgb3B0aW1pemUgYW5kIG90aGVyIHZlbmRvciBzcGVjaWZpYwotICAgICAgICAvLyBpbmZvcm1h
dGlvbi4gVGhpcyBpbmZvcm1hdGlvbiBjYW4gYmUgcXVlcmllZCBmcm9tIHRoZSBwYXJzZSB0cmVl
Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNl
dE9wdGltaXplKGNvbnRleHQtPnByYWdtYSgpLm9wdGltaXplKTsKLSAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0RGVidWcoY29udGV4dC0+cHJh
Z21hKCkuZGVidWcpOwotCi0gICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwotICAg
IH0KLSAgICBicmVhazsKLQotCi0KLSAgICAgIGRlZmF1bHQ6IGJyZWFrOwotICAgIH0KLSAgLyog
VXNlciBzZW1hbnRpYyBhY3Rpb25zIHNvbWV0aW1lcyBhbHRlciB5eWNoYXIsIGFuZCB0aGF0IHJl
cXVpcmVzCi0gICAgIHRoYXQgeXl0b2tlbiBiZSB1cGRhdGVkIHdpdGggdGhlIG5ldyB0cmFuc2xh
dGlvbi4gIFdlIHRha2UgdGhlCi0gICAgIGFwcHJvYWNoIG9mIHRyYW5zbGF0aW5nIGltbWVkaWF0
ZWx5IGJlZm9yZSBldmVyeSB1c2Ugb2YgeXl0b2tlbi4KLSAgICAgT25lIGFsdGVybmF0aXZlIGlz
IHRyYW5zbGF0aW5nIGhlcmUgYWZ0ZXIgZXZlcnkgc2VtYW50aWMgYWN0aW9uLAotICAgICBidXQg
dGhhdCB0cmFuc2xhdGlvbiB3b3VsZCBiZSBtaXNzZWQgaWYgdGhlIHNlbWFudGljIGFjdGlvbiBp
bnZva2VzCi0gICAgIFlZQUJPUlQsIFlZQUNDRVBULCBvciBZWUVSUk9SIGltbWVkaWF0ZWx5IGFm
dGVyIGFsdGVyaW5nIHl5Y2hhciBvcgotICAgICBpZiBpdCBpbnZva2VzIFlZQkFDS1VQLiAgSW4g
dGhlIGNhc2Ugb2YgWVlBQk9SVCBvciBZWUFDQ0VQVCwgYW4KLSAgICAgaW5jb3JyZWN0IGRlc3Ry
dWN0b3IgbWlnaHQgdGhlbiBiZSBpbnZva2VkIGltbWVkaWF0ZWx5LiAgSW4gdGhlCi0gICAgIGNh
c2Ugb2YgWVlFUlJPUiBvciBZWUJBQ0tVUCwgc3Vic2VxdWVudCBwYXJzZXIgYWN0aW9ucyBtaWdo
dCBsZWFkCi0gICAgIHRvIGFuIGluY29ycmVjdCBkZXN0cnVjdG9yIGNhbGwgb3IgdmVyYm9zZSBz
eW50YXggZXJyb3IgbWVzc2FnZQotICAgICBiZWZvcmUgdGhlIGxvb2thaGVhZCBpcyB0cmFuc2xh
dGVkLiAgKi8KLSAgWVlfU1lNQk9MX1BSSU5UICgiLT4gJCQgPSIsIHl5cjFbeXluXSwgJnl5dmFs
LCAmeXlsb2MpOwotCi0gIFlZUE9QU1RBQ0sgKHl5bGVuKTsKLSAgeXlsZW4gPSAwOwotICBZWV9T
VEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwotCi0gICorK3l5dnNwID0geXl2YWw7Ci0gICorK3l5
bHNwID0geXlsb2M7Ci0KLSAgLyogTm93IGBzaGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0
aW9uLiAgRGV0ZXJtaW5lIHdoYXQgc3RhdGUKLSAgICAgdGhhdCBnb2VzIHRvLCBiYXNlZCBvbiB0
aGUgc3RhdGUgd2UgcG9wcGVkIGJhY2sgdG8gYW5kIHRoZSBydWxlCi0gICAgIG51bWJlciByZWR1
Y2VkIGJ5LiAgKi8KLQotICB5eW4gPSB5eXIxW3l5bl07Ci0KLSAgeXlzdGF0ZSA9IHl5cGdvdG9b
eXluIC0gWVlOVE9LRU5TXSArICp5eXNzcDsKLSAgaWYgKDAgPD0geXlzdGF0ZSAmJiB5eXN0YXRl
IDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5c3RhdGVdID09ICp5eXNzcCkKLSAgICB5eXN0YXRlID0g
eXl0YWJsZVt5eXN0YXRlXTsKLSAgZWxzZQotICAgIHl5c3RhdGUgPSB5eWRlZmdvdG9beXluIC0g
WVlOVE9LRU5TXTsKLQotICBnb3RvIHl5bmV3c3RhdGU7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZXJybGFiIC0tIGhlcmUgb24gZGV0ZWN0aW5nIGVy
cm9yIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXllcnJsYWI6
Ci0gIC8qIE1ha2Ugc3VyZSB3ZSBoYXZlIGxhdGVzdCBsb29rYWhlYWQgdHJhbnNsYXRpb24uICBT
ZWUgY29tbWVudHMgYXQKLSAgICAgdXNlciBzZW1hbnRpYyBhY3Rpb25zIGZvciB3aHkgdGhpcyBp
cyBuZWNlc3NhcnkuICAqLwotICB5eXRva2VuID0geXljaGFyID09IFlZRU1QVFkgPyBZWUVNUFRZ
IDogWVlUUkFOU0xBVEUgKHl5Y2hhcik7Ci0KLSAgLyogSWYgbm90IGFscmVhZHkgcmVjb3Zlcmlu
ZyBmcm9tIGFuIGVycm9yLCByZXBvcnQgdGhpcyBlcnJvci4gICovCi0gIGlmICgheXllcnJzdGF0
dXMpCi0gICAgewotICAgICAgKyt5eW5lcnJzOwotI2lmICEgWVlFUlJPUl9WRVJCT1NFCi0gICAg
ICB5eWVycm9yICgmeXlsbG9jLCBjb250ZXh0LCBZWV8oInN5bnRheCBlcnJvciIpKTsKLSNlbHNl
Ci0jIGRlZmluZSBZWVNZTlRBWF9FUlJPUiB5eXN5bnRheF9lcnJvciAoJnl5bXNnX2FsbG9jLCAm
eXltc2csIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5eXNzcCwg
eXl0b2tlbikKLSAgICAgIHsKLSAgICAgICAgY2hhciBjb25zdCAqeXltc2dwID0gWVlfKCJzeW50
YXggZXJyb3IiKTsKLSAgICAgICAgaW50IHl5c3ludGF4X2Vycm9yX3N0YXR1czsKLSAgICAgICAg
eXlzeW50YXhfZXJyb3Jfc3RhdHVzID0gWVlTWU5UQVhfRVJST1I7Ci0gICAgICAgIGlmICh5eXN5
bnRheF9lcnJvcl9zdGF0dXMgPT0gMCkKLSAgICAgICAgICB5eW1zZ3AgPSB5eW1zZzsKLSAgICAg
ICAgZWxzZSBpZiAoeXlzeW50YXhfZXJyb3Jfc3RhdHVzID09IDEpCi0gICAgICAgICAgewotICAg
ICAgICAgICAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQotICAgICAgICAgICAgICBZWVNUQUNLX0ZS
RUUgKHl5bXNnKTsKLSAgICAgICAgICAgIHl5bXNnID0gKGNoYXIgKikgWVlTVEFDS19BTExPQyAo
eXltc2dfYWxsb2MpOwotICAgICAgICAgICAgaWYgKCF5eW1zZykKLSAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHl5bXNnID0geXltc2didWY7Ci0gICAgICAgICAgICAgICAgeXltc2df
YWxsb2MgPSBzaXplb2YgeXltc2didWY7Ci0gICAgICAgICAgICAgICAgeXlzeW50YXhfZXJyb3Jf
c3RhdHVzID0gMjsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgeXlzeW50YXhfZXJyb3Jfc3RhdHVzID0gWVlTWU5UQVhf
RVJST1I7Ci0gICAgICAgICAgICAgICAgeXltc2dwID0geXltc2c7Ci0gICAgICAgICAgICAgIH0K
LSAgICAgICAgICB9Ci0gICAgICAgIHl5ZXJyb3IgKCZ5eWxsb2MsIGNvbnRleHQsIHl5bXNncCk7
Ci0gICAgICAgIGlmICh5eXN5bnRheF9lcnJvcl9zdGF0dXMgPT0gMikKLSAgICAgICAgICBnb3Rv
IHl5ZXhoYXVzdGVkbGFiOwotICAgICAgfQotIyB1bmRlZiBZWVNZTlRBWF9FUlJPUgotI2VuZGlm
Ci0gICAgfQotCi0gIHl5ZXJyb3JfcmFuZ2VbMV0gPSB5eWxsb2M7Ci0KLSAgaWYgKHl5ZXJyc3Rh
dHVzID09IDMpCi0gICAgewotICAgICAgLyogSWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJl
dXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBhbgotCSBlcnJvciwgZGlzY2FyZCBpdC4gICovCi0K
LSAgICAgIGlmICh5eWNoYXIgPD0gWVlFT0YpCi0JewotCSAgLyogUmV0dXJuIGZhaWx1cmUgaWYg
YXQgZW5kIG9mIGlucHV0LiAgKi8KLQkgIGlmICh5eWNoYXIgPT0gWVlFT0YpCi0JICAgIFlZQUJP
UlQ7Ci0JfQotICAgICAgZWxzZQotCXsKLQkgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogZGlzY2FyZGlu
ZyIsCi0JCSAgICAgIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MsIGNvbnRleHQpOwotCSAgeXlj
aGFyID0gWVlFTVBUWTsKLQl9Ci0gICAgfQotCi0gIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2Ug
bG9va2FoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRoZSBlcnJvcgotICAgICB0b2tlbi4gICov
Ci0gIGdvdG8geXllcnJsYWIxOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWVycm9ybGFiIC0tIGVycm9yIHJhaXNlZCBleHBs
aWNpdGx5IGJ5IFlZRVJST1IuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZXJyb3JsYWI6Ci0KLSAgLyogUGFjaWZ5IGNvbXBpbGVy
cyBsaWtlIEdDQyB3aGVuIHRoZSB1c2VyIGNvZGUgbmV2ZXIgaW52b2tlcwotICAgICBZWUVSUk9S
IGFuZCB0aGUgbGFiZWwgeXllcnJvcmxhYiB0aGVyZWZvcmUgbmV2ZXIgYXBwZWFycyBpbiB1c2Vy
Ci0gICAgIGNvZGUuICAqLwotICBpZiAoLypDT05TVENPTkQqLyAwKQotICAgICBnb3RvIHl5ZXJy
b3JsYWI7Ci0KLSAgeXllcnJvcl9yYW5nZVsxXSA9IHl5bHNwWzEteXlsZW5dOwotICAvKiBEbyBu
b3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUgcnVsZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVk
Ci0gICAgIHRoaXMgWVlFUlJPUi4gICovCi0gIFlZUE9QU1RBQ0sgKHl5bGVuKTsKLSAgeXlsZW4g
PSAwOwotICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwotICB5eXN0YXRlID0gKnl5c3Nw
OwotICBnb3RvIHl5ZXJybGFiMTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZXJybGFiMSAtLSBjb21tb24g
Y29kZSBmb3IgYm90aCBzeW50YXggZXJyb3IgYW5kIFlZRVJST1IuICB8Ci1gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWVy
cmxhYjE6Ci0gIHl5ZXJyc3RhdHVzID0gMzsJLyogRWFjaCByZWFsIHRva2VuIHNoaWZ0ZWQgZGVj
cmVtZW50cyB0aGlzLiAgKi8KLQotICBmb3IgKDs7KQotICAgIHsKLSAgICAgIHl5biA9IHl5cGFj
dFt5eXN0YXRlXTsKLSAgICAgIGlmICgheXlwYWN0X3ZhbHVlX2lzX2RlZmF1bHQgKHl5bikpCi0J
ewotCSAgeXluICs9IFlZVEVSUk9SOwotCSAgaWYgKDAgPD0geXluICYmIHl5biA8PSBZWUxBU1Qg
JiYgeXljaGVja1t5eW5dID09IFlZVEVSUk9SKQotCSAgICB7Ci0JICAgICAgeXluID0geXl0YWJs
ZVt5eW5dOwotCSAgICAgIGlmICgwIDwgeXluKQotCQlicmVhazsKLQkgICAgfQotCX0KLQotICAg
ICAgLyogUG9wIHRoZSBjdXJyZW50IHN0YXRlIGJlY2F1c2UgaXQgY2Fubm90IGhhbmRsZSB0aGUg
ZXJyb3IgdG9rZW4uICAqLwotICAgICAgaWYgKHl5c3NwID09IHl5c3MpCi0JWVlBQk9SVDsKLQot
ICAgICAgeXllcnJvcl9yYW5nZVsxXSA9ICp5eWxzcDsKLSAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJv
cjogcG9wcGluZyIsCi0JCSAgeXlzdG9zW3l5c3RhdGVdLCB5eXZzcCwgeXlsc3AsIGNvbnRleHQp
OwotICAgICAgWVlQT1BTVEFDSyAoMSk7Ci0gICAgICB5eXN0YXRlID0gKnl5c3NwOwotICAgICAg
WVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKLSAgICB9Ci0KLSAgWVlfSUdOT1JFX01BWUJF
X1VOSU5JVElBTElaRURfQkVHSU4KLSAgKisreXl2c3AgPSB5eWx2YWw7Ci0gIFlZX0lHTk9SRV9N
QVlCRV9VTklOSVRJQUxJWkVEX0VORAotCi0gIHl5ZXJyb3JfcmFuZ2VbMl0gPSB5eWxsb2M7Ci0g
IC8qIFVzaW5nIFlZTExPQyBpcyB0ZW1wdGluZywgYnV0IHdvdWxkIGNoYW5nZSB0aGUgbG9jYXRp
b24gb2YKLSAgICAgdGhlIGxvb2thaGVhZC4gIFlZTE9DIGlzIGF2YWlsYWJsZSB0aG91Z2guICAq
LwotICBZWUxMT0NfREVGQVVMVCAoeXlsb2MsIHl5ZXJyb3JfcmFuZ2UsIDIpOwotICAqKyt5eWxz
cCA9IHl5bG9jOwotCi0gIC8qIFNoaWZ0IHRoZSBlcnJvciB0b2tlbi4gICovCi0gIFlZX1NZTUJP
TF9QUklOVCAoIlNoaWZ0aW5nIiwgeXlzdG9zW3l5bl0sIHl5dnNwLCB5eWxzcCk7Ci0KLSAgeXlz
dGF0ZSA9IHl5bjsKLSAgZ290byB5eW5ld3N0YXRlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlhY2NlcHRsYWIgLS0gWVlBQ0NFUFQgY29tZXMgaGVy
ZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5YWNjZXB0
bGFiOgotICB5eXJlc3VsdCA9IDA7Ci0gIGdvdG8geXlyZXR1cm47Ci0KLS8qLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5YWJvcnRsYWIgLS0gWVlBQk9SVCBjb21lcyBo
ZXJlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5YWJvcnRs
YWI6Ci0gIHl5cmVzdWx0ID0gMTsKLSAgZ290byB5eXJldHVybjsKLQotI2lmICFkZWZpbmVkIHl5
b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZXhoYXVzdGVkbGFiIC0tIG1lbW9yeSBleGhh
dXN0aW9uIGNvbWVzIGhlcmUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCi15eWV4aGF1c3RlZGxhYjoKLSAgeXllcnJvciAoJnl5bGxvYywg
Y29udGV4dCwgWVlfKCJtZW1vcnkgZXhoYXVzdGVkIikpOwotICB5eXJlc3VsdCA9IDI7Ci0gIC8q
IEZhbGwgdGhyb3VnaC4gICovCi0jZW5kaWYKLQoteXlyZXR1cm46Ci0gIGlmICh5eWNoYXIgIT0g
WVlFTVBUWSkKLSAgICB7Ci0gICAgICAvKiBNYWtlIHN1cmUgd2UgaGF2ZSBsYXRlc3QgbG9va2Fo
ZWFkIHRyYW5zbGF0aW9uLiAgU2VlIGNvbW1lbnRzIGF0Ci0gICAgICAgICB1c2VyIHNlbWFudGlj
IGFjdGlvbnMgZm9yIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS4gICovCi0gICAgICB5eXRva2VuID0g
WVlUUkFOU0xBVEUgKHl5Y2hhcik7Ci0gICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogZGlzY2Fy
ZGluZyBsb29rYWhlYWQiLAotICAgICAgICAgICAgICAgICAgeXl0b2tlbiwgJnl5bHZhbCwgJnl5
bGxvYywgY29udGV4dCk7Ci0gICAgfQotICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBv
ZiB0aGUgcnVsZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVkCi0gICAgIHRoaXMgWVlBQk9SVCBvciBZ
WUFDQ0VQVC4gICovCi0gIFlZUE9QU1RBQ0sgKHl5bGVuKTsKLSAgWVlfU1RBQ0tfUFJJTlQgKHl5
c3MsIHl5c3NwKTsKLSAgd2hpbGUgKHl5c3NwICE9IHl5c3MpCi0gICAgewotICAgICAgeXlkZXN0
cnVjdCAoIkNsZWFudXA6IHBvcHBpbmciLAotCQkgIHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCwgeXls
c3AsIGNvbnRleHQpOwotICAgICAgWVlQT1BTVEFDSyAoMSk7Ci0gICAgfQotI2lmbmRlZiB5eW92
ZXJmbG93Ci0gIGlmICh5eXNzICE9IHl5c3NhKQotICAgIFlZU1RBQ0tfRlJFRSAoeXlzcyk7Ci0j
ZW5kaWYKLSNpZiBZWUVSUk9SX1ZFUkJPU0UKLSAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQotICAg
IFlZU1RBQ0tfRlJFRSAoeXltc2cpOwotI2VuZGlmCi0gIC8qIE1ha2Ugc3VyZSBZWUlEIGlzIHVz
ZWQuICAqLwotICByZXR1cm4gWVlJRCAoeXlyZXN1bHQpOwotfQotCi0KLQotCi0KLWludCBnbHNs
YW5nX3BhcnNlKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKLSAgICByZXR1cm4geXlwYXJzZShj
b250ZXh0KTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9nbHNsYW5nX3RhYi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L2dsc2xhbmdfdGFiLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzNWIwMjFmYmZl
ZjQxN2M3YzNmNmFkMmY2NGNiNjVjNjBmZmM1NzguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L2dsc2xhbmdfdGFiLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMjUgKzAsMCBAQAotLyogQXBwbGUg
Tm90ZTogRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIEFwcGxlIGVsZWN0cyB0byBkaXN0cmli
dXRlIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEJTRCBsaWNlbnNlLiAqLwotCi0v
KiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi43LiAgKi8KLQotLyogQmlzb24g
aW50ZXJmYWNlIGZvciBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCi0gICAKLSAgICAgIENvcHlyaWdo
dCAoQykgMTk4NCwgMTk4OS0xOTkwLCAyMDAwLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuCi0gICAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IK
LSAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gICAKLSAgIFRoaXMgcHJv
Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUKLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gICAKLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4g
IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCi0KLS8qIEFz
IGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgY3JlYXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBj
b250YWlucwotICAgcGFydCBvciBhbGwgb2YgdGhlIEJpc29uIHBhcnNlciBza2VsZXRvbiBhbmQg
ZGlzdHJpYnV0ZSB0aGF0IHdvcmsKLSAgIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBzbyBs
b25nIGFzIHRoYXQgd29yayBpc24ndCBpdHNlbGYgYQotICAgcGFyc2VyIGdlbmVyYXRvciB1c2lu
ZyB0aGUgc2tlbGV0b24gb3IgYSBtb2RpZmllZCB2ZXJzaW9uIHRoZXJlb2YKLSAgIGFzIGEgcGFy
c2VyIHNrZWxldG9uLiAgQWx0ZXJuYXRpdmVseSwgaWYgeW91IG1vZGlmeSBvciByZWRpc3RyaWJ1
dGUKLSAgIHRoZSBwYXJzZXIgc2tlbGV0b24gaXRzZWxmLCB5b3UgbWF5IChhdCB5b3VyIG9wdGlv
bikgcmVtb3ZlIHRoaXMKLSAgIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRo
ZSBza2VsZXRvbiBhbmQgdGhlIHJlc3VsdGluZwotICAgQmlzb24gb3V0cHV0IGZpbGVzIHRvIGJl
IGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAgIExpY2Vuc2Ugd2l0aG91
dCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uLgotICAgCi0gICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9u
IHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluCi0gICB2ZXJzaW9u
IDIuMiBvZiBCaXNvbi4gICovCi0KLSNpZm5kZWYgWVlfWVlfR0xTTEFOR19UQUJfSF9JTkNMVURF
RAotIyBkZWZpbmUgWVlfWVlfR0xTTEFOR19UQUJfSF9JTkNMVURFRAotLyogRW5hYmxpbmcgdHJh
Y2VzLiAgKi8KLSNpZm5kZWYgWVlERUJVRwotIyBkZWZpbmUgWVlERUJVRyAwCi0jZW5kaWYKLSNp
ZiBZWURFQlVHCi1leHRlcm4gaW50IHl5ZGVidWc7Ci0jZW5kaWYKLS8qICIlY29kZSByZXF1aXJl
cyIgYmxvY2tzLiAgKi8KLQotCi0jZGVmaW5lIFlZTFRZUEUgVFNvdXJjZUxvYwotI2RlZmluZSBZ
WUxUWVBFX0lTX0RFQ0xBUkVEIDEKLSNkZWZpbmUgU0hfTUFYX1RPS0VOX0xFTkdUSCAyNTYgIC8v
IFdlYkdMIHNwZWMuCi0KLQotCi0KLS8qIFRva2Vucy4gICovCi0jaWZuZGVmIFlZVE9LRU5UWVBF
Ci0jIGRlZmluZSBZWVRPS0VOVFlQRQotICAgLyogUHV0IHRoZSB0b2tlbnMgaW50byB0aGUgc3lt
Ym9sIHRhYmxlLCBzbyB0aGF0IEdEQiBhbmQgb3RoZXIgZGVidWdnZXJzCi0gICAgICBrbm93IGFi
b3V0IHRoZW0uICAqLwotICAgZW51bSB5eXRva2VudHlwZSB7Ci0gICAgIElOVkFSSUFOVCA9IDI1
OCwKLSAgICAgSElHSF9QUkVDSVNJT04gPSAyNTksCi0gICAgIE1FRElVTV9QUkVDSVNJT04gPSAy
NjAsCi0gICAgIExPV19QUkVDSVNJT04gPSAyNjEsCi0gICAgIFBSRUNJU0lPTiA9IDI2MiwKLSAg
ICAgQVRUUklCVVRFID0gMjYzLAotICAgICBDT05TVF9RVUFMID0gMjY0LAotICAgICBCT09MX1RZ
UEUgPSAyNjUsCi0gICAgIEZMT0FUX1RZUEUgPSAyNjYsCi0gICAgIElOVF9UWVBFID0gMjY3LAot
ICAgICBCUkVBSyA9IDI2OCwKLSAgICAgQ09OVElOVUUgPSAyNjksCi0gICAgIERPID0gMjcwLAot
ICAgICBFTFNFID0gMjcxLAotICAgICBGT1IgPSAyNzIsCi0gICAgIElGID0gMjczLAotICAgICBE
SVNDQVJEID0gMjc0LAotICAgICBSRVRVUk4gPSAyNzUsCi0gICAgIEJWRUMyID0gMjc2LAotICAg
ICBCVkVDMyA9IDI3NywKLSAgICAgQlZFQzQgPSAyNzgsCi0gICAgIElWRUMyID0gMjc5LAotICAg
ICBJVkVDMyA9IDI4MCwKLSAgICAgSVZFQzQgPSAyODEsCi0gICAgIFZFQzIgPSAyODIsCi0gICAg
IFZFQzMgPSAyODMsCi0gICAgIFZFQzQgPSAyODQsCi0gICAgIE1BVFJJWDIgPSAyODUsCi0gICAg
IE1BVFJJWDMgPSAyODYsCi0gICAgIE1BVFJJWDQgPSAyODcsCi0gICAgIElOX1FVQUwgPSAyODgs
Ci0gICAgIE9VVF9RVUFMID0gMjg5LAotICAgICBJTk9VVF9RVUFMID0gMjkwLAotICAgICBVTklG
T1JNID0gMjkxLAotICAgICBWQVJZSU5HID0gMjkyLAotICAgICBTVFJVQ1QgPSAyOTMsCi0gICAg
IFZPSURfVFlQRSA9IDI5NCwKLSAgICAgV0hJTEUgPSAyOTUsCi0gICAgIFNBTVBMRVIyRCA9IDI5
NiwKLSAgICAgU0FNUExFUkNVQkUgPSAyOTcsCi0gICAgIFNBTVBMRVJfRVhURVJOQUxfT0VTID0g
Mjk4LAotICAgICBTQU1QTEVSMkRSRUNUID0gMjk5LAotICAgICBJREVOVElGSUVSID0gMzAwLAot
ICAgICBUWVBFX05BTUUgPSAzMDEsCi0gICAgIEZMT0FUQ09OU1RBTlQgPSAzMDIsCi0gICAgIElO
VENPTlNUQU5UID0gMzAzLAotICAgICBCT09MQ09OU1RBTlQgPSAzMDQsCi0gICAgIExFRlRfT1Ag
PSAzMDUsCi0gICAgIFJJR0hUX09QID0gMzA2LAotICAgICBJTkNfT1AgPSAzMDcsCi0gICAgIERF
Q19PUCA9IDMwOCwKLSAgICAgTEVfT1AgPSAzMDksCi0gICAgIEdFX09QID0gMzEwLAotICAgICBF
UV9PUCA9IDMxMSwKLSAgICAgTkVfT1AgPSAzMTIsCi0gICAgIEFORF9PUCA9IDMxMywKLSAgICAg
T1JfT1AgPSAzMTQsCi0gICAgIFhPUl9PUCA9IDMxNSwKLSAgICAgTVVMX0FTU0lHTiA9IDMxNiwK
LSAgICAgRElWX0FTU0lHTiA9IDMxNywKLSAgICAgQUREX0FTU0lHTiA9IDMxOCwKLSAgICAgTU9E
X0FTU0lHTiA9IDMxOSwKLSAgICAgTEVGVF9BU1NJR04gPSAzMjAsCi0gICAgIFJJR0hUX0FTU0lH
TiA9IDMyMSwKLSAgICAgQU5EX0FTU0lHTiA9IDMyMiwKLSAgICAgWE9SX0FTU0lHTiA9IDMyMywK
LSAgICAgT1JfQVNTSUdOID0gMzI0LAotICAgICBTVUJfQVNTSUdOID0gMzI1LAotICAgICBMRUZU
X1BBUkVOID0gMzI2LAotICAgICBSSUdIVF9QQVJFTiA9IDMyNywKLSAgICAgTEVGVF9CUkFDS0VU
ID0gMzI4LAotICAgICBSSUdIVF9CUkFDS0VUID0gMzI5LAotICAgICBMRUZUX0JSQUNFID0gMzMw
LAotICAgICBSSUdIVF9CUkFDRSA9IDMzMSwKLSAgICAgRE9UID0gMzMyLAotICAgICBDT01NQSA9
IDMzMywKLSAgICAgQ09MT04gPSAzMzQsCi0gICAgIEVRVUFMID0gMzM1LAotICAgICBTRU1JQ09M
T04gPSAzMzYsCi0gICAgIEJBTkcgPSAzMzcsCi0gICAgIERBU0ggPSAzMzgsCi0gICAgIFRJTERF
ID0gMzM5LAotICAgICBQTFVTID0gMzQwLAotICAgICBTVEFSID0gMzQxLAotICAgICBTTEFTSCA9
IDM0MiwKLSAgICAgUEVSQ0VOVCA9IDM0MywKLSAgICAgTEVGVF9BTkdMRSA9IDM0NCwKLSAgICAg
UklHSFRfQU5HTEUgPSAzNDUsCi0gICAgIFZFUlRJQ0FMX0JBUiA9IDM0NiwKLSAgICAgQ0FSRVQg
PSAzNDcsCi0gICAgIEFNUEVSU0FORCA9IDM0OCwKLSAgICAgUVVFU1RJT04gPSAzNDkKLSAgIH07
Ci0jZW5kaWYKLQotCi0jaWYgISBkZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZpbmVkIFlZU1RZUEVf
SVNfREVDTEFSRUQKLXR5cGVkZWYgdW5pb24gWVlTVFlQRQotewotCi0KLSAgICBzdHJ1Y3Qgewot
ICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAgICBUU3RyaW5nICpzdHJpbmc7Ci0gICAgICAgICAg
ICBmbG9hdCBmOwotICAgICAgICAgICAgaW50IGk7Ci0gICAgICAgICAgICBib29sIGI7Ci0gICAg
ICAgIH07Ci0gICAgICAgIFRTeW1ib2wqIHN5bWJvbDsKLSAgICB9IGxleDsKLSAgICBzdHJ1Y3Qg
ewotICAgICAgICBUT3BlcmF0b3Igb3A7Ci0gICAgICAgIHVuaW9uIHsKLSAgICAgICAgICAgIFRJ
bnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOwotICAgICAgICAgICAgVEludGVybU5vZGVQYWlyIG5vZGVQ
YWlyOwotICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbnRlcm1UeXBlZE5vZGU7Ci0gICAgICAg
ICAgICBUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGU7Ci0gICAgICAgIH07Ci0gICAg
ICAgIHVuaW9uIHsKLSAgICAgICAgICAgIFRQdWJsaWNUeXBlIHR5cGU7Ci0gICAgICAgICAgICBU
UHJlY2lzaW9uIHByZWNpc2lvbjsKLSAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyOwot
ICAgICAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlvbjsKLSAgICAgICAgICAgIFRQYXJhbWV0ZXIg
cGFyYW07Ci0gICAgICAgICAgICBURmllbGQqIGZpZWxkOwotICAgICAgICAgICAgVEZpZWxkTGlz
dCogZmllbGRMaXN0OwotICAgICAgICB9OwotICAgIH0gaW50ZXJtOwotCi0KLQotfSBZWVNUWVBF
OwotIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKLSMgZGVmaW5lIHl5c3R5cGUgWVlTVFlQ
RSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KLSMgZGVmaW5lIFlZU1RZUEVf
SVNfREVDTEFSRUQgMQotI2VuZGlmCi0KLSNpZiAhIGRlZmluZWQgWVlMVFlQRSAmJiAhIGRlZmlu
ZWQgWVlMVFlQRV9JU19ERUNMQVJFRAotdHlwZWRlZiBzdHJ1Y3QgWVlMVFlQRQotewotICBpbnQg
Zmlyc3RfbGluZTsKLSAgaW50IGZpcnN0X2NvbHVtbjsKLSAgaW50IGxhc3RfbGluZTsKLSAgaW50
IGxhc3RfY29sdW1uOwotfSBZWUxUWVBFOwotIyBkZWZpbmUgeXlsdHlwZSBZWUxUWVBFIC8qIG9i
c29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLwotIyBkZWZpbmUgWVlMVFlQRV9JU19ERUNM
QVJFRCAxCi0jIGRlZmluZSBZWUxUWVBFX0lTX1RSSVZJQUwgMQotI2VuZGlmCi0KLQotI2lmZGVm
IFlZUEFSU0VfUEFSQU0KLSNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3Bs
dXMKLWludCB5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKTsKLSNlbHNlCi1pbnQgeXlwYXJz
ZSAoKTsKLSNlbmRpZgotI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovCi0jaWYgZGVmaW5lZCBf
X1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCi1pbnQgeXlwYXJzZSAoVFBhcnNlQ29udGV4
dCogY29udGV4dCk7Ci0jZWxzZQotaW50IHl5cGFyc2UgKCk7Ci0jZW5kaWYKLSNlbmRpZiAvKiAh
IFlZUEFSU0VfUEFSQU0gKi8KLQotI2VuZGlmIC8qICFZWV9ZWV9HTFNMQU5HX1RBQl9IX0lOQ0xV
REVEICAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L2ludGVybU91dC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50
ZXJtT3V0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNhYTk2YWY2ZDYyZDEw
ZTdlZjcyZjJmZWFjMzY2MmU3M2RiODY2ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50
ZXJtT3V0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQyNCArMCwwIEBACi0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
Ci0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvbG9jYWxpbnRlcm1lZGlhdGUuaCIKLQotLy8KLS8v
IFR3byBwdXJwb3NlczoKLS8vIDEuICBTaG93IGFuIGV4YW1wbGUgb2YgaG93IHRvIGl0ZXJhdGUg
dHJlZS4gIEZ1bmN0aW9ucyBjYW4KLS8vICAgICBhbHNvIGRpcmVjdGx5IGNhbGwgVHJhdmVyc2Uo
KSBvbiBjaGlsZHJlbiB0aGVtc2VsdmVzIHRvCi0vLyAgICAgaGF2ZSBmaW5lciBncmFpbmVkIGNv
bnRyb2wgb3ZlciB0aGUgcHJvY2VzcyB0aGFuIHNob3duIGhlcmUuCi0vLyAgICAgU2VlIHRoZSBs
YXN0IGZ1bmN0aW9uIGZvciBob3cgdG8gZ2V0IHN0YXJ0ZWQuCi0vLyAyLiAgUHJpbnQgb3V0IGEg
dGV4dCBiYXNlZCBkZXNjcmlwdGlvbiBvZiB0aGUgdHJlZS4KLS8vCi0KLS8vCi0vLyBVc2UgdGhp
cyBjbGFzcyB0byBjYXJyeSBhbG9uZyBkYXRhIGZyb20gbm9kZSB0byBub2RlIGluCi0vLyB0aGUg
dHJhdmVyc2FsCi0vLwotY2xhc3MgVE91dHB1dFRyYXZlcnNlciA6IHB1YmxpYyBUSW50ZXJtVHJh
dmVyc2VyIHsKLXB1YmxpYzoKLSAgICBUT3V0cHV0VHJhdmVyc2VyKFRJbmZvU2lua0Jhc2UmIGkp
IDogc2luayhpKSB7IH0KLSAgICBUSW5mb1NpbmtCYXNlJiBzaW5rOwotCi1wcm90ZWN0ZWQ6Ci0g
ICAgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7Ci0gICAgdm9pZCB2aXNpdENvbnN0
YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qKTsKLSAgICBib29sIHZpc2l0QmluYXJ5KFZp
c2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7Ci0gICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZp
c2l0LCBUSW50ZXJtVW5hcnkqKTsKLSAgICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0
LCBUSW50ZXJtU2VsZWN0aW9uKik7Ci0gICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNp
dCwgVEludGVybUFnZ3JlZ2F0ZSopOwotICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBU
SW50ZXJtTG9vcCopOwotICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1C
cmFuY2gqKTsKLX07Ci0KLVRTdHJpbmcgVFR5cGU6OmdldENvbXBsZXRlU3RyaW5nKCkgY29uc3QK
LXsKLSAgICBUU3RyaW5nU3RyZWFtIHN0cmVhbTsKLQotICAgIGlmIChxdWFsaWZpZXIgIT0gRXZx
VGVtcG9yYXJ5ICYmIHF1YWxpZmllciAhPSBFdnFHbG9iYWwpCi0gICAgICAgIHN0cmVhbSA8PCBn
ZXRRdWFsaWZpZXJTdHJpbmcoKSA8PCAiICIgPDwgZ2V0UHJlY2lzaW9uU3RyaW5nKCkgPDwgIiAi
OwotICAgIGlmIChhcnJheSkKLSAgICAgICAgc3RyZWFtIDw8ICJhcnJheVsiIDw8IGdldEFycmF5
U2l6ZSgpIDw8ICJdIG9mICI7Ci0gICAgaWYgKG1hdHJpeCkKLSAgICAgICAgc3RyZWFtIDw8IHNp
emUgPDwgIlgiIDw8IHNpemUgPDwgIiBtYXRyaXggb2YgIjsKLSAgICBlbHNlIGlmIChzaXplID4g
MSkKLSAgICAgICAgc3RyZWFtIDw8IHNpemUgPDwgIi1jb21wb25lbnQgdmVjdG9yIG9mICI7Ci0K
LSAgICBzdHJlYW0gPDwgZ2V0QmFzaWNTdHJpbmcoKTsKLSAgICByZXR1cm4gc3RyZWFtLnN0cigp
OwotfQotCi0vLwotLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgcHJpbnRpbmcsIG5vdCBwYXJ0IG9m
IHRyYXZlcnNpbmcuCi0vLwotCi12b2lkIE91dHB1dFRyZWVUZXh0KFRJbmZvU2lua0Jhc2UmIHNp
bmssIFRJbnRlcm1Ob2RlKiBub2RlLCBjb25zdCBpbnQgZGVwdGgpCi17Ci0gICAgaW50IGk7Ci0K
LSAgICBzaW5rLmxvY2F0aW9uKG5vZGUtPmdldExpbmUoKSk7Ci0KLSAgICBmb3IgKGkgPSAwOyBp
IDwgZGVwdGg7ICsraSkKLSAgICAgICAgc2luayA8PCAiICAiOwotfQotCi0vLwotLy8gVGhlIHJl
c3Qgb2YgdGhlIGZpbGUgYXJlIHRoZSB0cmF2ZXJzYWwgZnVuY3Rpb25zLiAgVGhlIGxhc3Qgb25l
Ci0vLyBpcyB0aGUgb25lIHRoYXQgc3RhcnRzIHRoZSB0cmF2ZXJzYWwuCi0vLwotLy8gUmV0dXJu
IHRydWUgZnJvbSBpbnRlcmlvciBub2RlcyB0byBoYXZlIHRoZSBleHRlcm5hbCB0cmF2ZXJzYWwK
LS8vIGNvbnRpbnVlIG9uIHRvIGNoaWxkcmVuLiAgSWYgeW91IHByb2Nlc3MgY2hpbGRyZW4geW91
cnNlbGYsCi0vLyByZXR1cm4gZmFsc2UuCi0vLwotCi12b2lkIFRPdXRwdXRUcmF2ZXJzZXI6OnZp
c2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCi17Ci0gICAgT3V0cHV0VHJlZVRleHQoc2lu
aywgbm9kZSwgZGVwdGgpOwotCi0gICAgc2luayA8PCAiJyIgPDwgbm9kZS0+Z2V0U3ltYm9sKCkg
PDwgIicgIjsKLSAgICBzaW5rIDw8ICIoIiA8PCBub2RlLT5nZXRDb21wbGV0ZVN0cmluZygpIDw8
ICIpXG4iOwotfQotCi1ib29sIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0QmluYXJ5KFZpc2l0IHZp
c2l0LCBUSW50ZXJtQmluYXJ5KiBub2RlKQotewotICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IHNp
bms7Ci0KLSAgICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUsIGRlcHRoKTsKLQotICAgIHN3aXRj
aCAobm9kZS0+Z2V0T3AoKSkgewotICAgICAgICBjYXNlIEVPcEFzc2lnbjogICAgICAgICAgICAg
ICAgICAgb3V0IDw8ICJtb3ZlIHNlY29uZCBjaGlsZCB0byBmaXJzdCBjaGlsZCI7ICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BJbml0aWFsaXplOiAgICAgICAgICAgICAgIG91dCA8
PCAiaW5pdGlhbGl6ZSBmaXJzdCBjaGlsZCB3aXRoIHNlY29uZCBjaGlsZCI7ICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRU9wQWRkQXNzaWduOiAgICAgICAgICAgICAgICBvdXQgPDwgImFkZCBzZWNv
bmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEVPcFN1YkFzc2lnbjogICAgICAgICAgICAgICAgb3V0IDw8ICJzdWJ0cmFjdCBzZWNvbmQgY2hp
bGQgaW50byBmaXJzdCBjaGlsZCI7ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BNdWxBc3Np
Z246ICAgICAgICAgICAgICAgIG91dCA8PCAibXVsdGlwbHkgc2Vjb25kIGNoaWxkIGludG8gZmly
c3QgY2hpbGQiOyAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXhB
c3NpZ246ICBvdXQgPDwgIm1hdHJpeCBtdWx0IHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxk
IjsgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOiAgb3V0
IDw8ICJ2ZWN0b3Igc2NhbGUgc2Vjb25kIGNoaWxkIGludG8gZmlyc3QgY2hpbGQiOyBicmVhazsK
LSAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbjogIG91dCA8PCAibWF0cml4
IHNjYWxlIHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246ICBvdXQgPDwgIm1hdHJpeCBtdWx0IHNlY29u
ZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wRGl2QXNz
aWduOiAgICAgICAgICAgICAgICBvdXQgPDwgImRpdmlkZSBzZWNvbmQgY2hpbGQgaW50byBmaXJz
dCBjaGlsZCI7ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0OiAgIG91
dCA8PCAiZGlyZWN0IGluZGV4IjsgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BJbmRleEluZGly
ZWN0OiBvdXQgPDwgImluZGlyZWN0IGluZGV4IjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wSW5k
ZXhEaXJlY3RTdHJ1Y3Q6ICAgb3V0IDw8ICJkaXJlY3QgaW5kZXggZm9yIHN0cnVjdHVyZSI7ICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wVmVjdG9yU3dpenpsZTogb3V0IDw8ICJ2ZWN0b3Igc3dp
enpsZSI7IGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wQWRkOiAgICBvdXQgPDwgImFkZCI7ICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wU3ViOiAgICBvdXQgPDwg
InN1YnRyYWN0IjsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTXVsOiAg
ICBvdXQgPDwgImNvbXBvbmVudC13aXNlIG11bHRpcGx5IjsgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RU9wRGl2OiAgICBvdXQgPDwgImRpdmlkZSI7ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRU9wRXF1YWw6ICAgICAgICAgICAgb3V0IDw8ICJDb21wYXJlIEVxdWFsIjsgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcE5vdEVxdWFsOiAgICAgICAgIG91
dCA8PCAiQ29tcGFyZSBOb3QgRXF1YWwiOyAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBFT3BMZXNzVGhhbjogICAgICAgICBvdXQgPDwgIkNvbXBhcmUgTGVzcyBUaGFuIjsgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46ICAgICAgb3V0IDw8ICJD
b21wYXJlIEdyZWF0ZXIgVGhhbiI7ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcExl
c3NUaGFuRXF1YWw6ICAgIG91dCA8PCAiQ29tcGFyZSBMZXNzIFRoYW4gb3IgRXF1YWwiOyAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiBvdXQgPDwgIkNvbXBhcmUg
R3JlYXRlciBUaGFuIG9yIEVxdWFsIjsgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BWZWN0b3JU
aW1lc1NjYWxhcjogb3V0IDw8ICJ2ZWN0b3Itc2NhbGUiOyAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeDogb3V0IDw8ICJ2ZWN0b3ItdGltZXMtbWF0cml4
IjsgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1ZlY3Rvcjogb3V0IDw8ICJt
YXRyaXgtdGltZXMtdmVjdG9yIjsgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1l
c1NjYWxhcjogb3V0IDw8ICJtYXRyaXgtc2NhbGUiOyAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeDogb3V0IDw8ICJtYXRyaXgtbXVsdGlwbHkiOyAgICAg
ICBicmVhazsKLQotICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjogIG91dCA8PCAibG9naWNhbC1v
ciI7ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjogb3V0IDw8ICJsb2dpY2Fs
LXhvciI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6IG91dCA8PCAibG9naWNh
bC1hbmQiOyBicmVhazsKLSAgICAgICAgZGVmYXVsdDogb3V0IDw8ICI8dW5rbm93biBvcD4iOwot
ICAgIH0KLQotICAgIG91dCA8PCAiICgiIDw8IG5vZGUtPmdldENvbXBsZXRlU3RyaW5nKCkgPDwg
IikiOwotCi0gICAgb3V0IDw8ICJcbiI7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBU
T3V0cHV0VHJhdmVyc2VyOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqIG5v
ZGUpCi17Ci0gICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gc2luazsKLQotICAgIE91dHB1dFRyZWVU
ZXh0KG91dCwgbm9kZSwgZGVwdGgpOwotCi0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKSB7Ci0g
ICAgICAgIGNhc2UgRU9wTmVnYXRpdmU6ICAgICAgIG91dCA8PCAiTmVnYXRlIHZhbHVlIjsgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BWZWN0b3JMb2dpY2FsTm90OgotICAgICAgICBj
YXNlIEVPcExvZ2ljYWxOb3Q6ICAgICBvdXQgPDwgIk5lZ2F0ZSBjb25kaXRpb25hbCI7ICAgYnJl
YWs7Ci0KLSAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50OiAgb3V0IDw8ICJQb3N0LUluY3Jl
bWVudCI7ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6ICBvdXQg
PDwgIlBvc3QtRGVjcmVtZW50IjsgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wUHJlSW5j
cmVtZW50OiAgIG91dCA8PCAiUHJlLUluY3JlbWVudCI7ICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBFT3BQcmVEZWNyZW1lbnQ6ICAgb3V0IDw8ICJQcmUtRGVjcmVtZW50IjsgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgIGNhc2UgRU9wQ29udkludFRvQm9vbDogIG91dCA8PCAiQ29udmVydCBp
bnQgdG8gYm9vbCI7ICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0Jvb2w6b3V0
IDw8ICJDb252ZXJ0IGZsb2F0IHRvIGJvb2wiO2JyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnZC
b29sVG9GbG9hdDpvdXQgPDwgIkNvbnZlcnQgYm9vbCB0byBmbG9hdCI7YnJlYWs7Ci0gICAgICAg
IGNhc2UgRU9wQ29udkludFRvRmxvYXQ6IG91dCA8PCAiQ29udmVydCBpbnQgdG8gZmxvYXQiOyBi
cmVhazsKLSAgICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0ludDogb3V0IDw8ICJDb252ZXJ0IGZs
b2F0IHRvIGludCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnZCb29sVG9JbnQ6ICBvdXQg
PDwgIkNvbnZlcnQgYm9vbCB0byBpbnQiOyAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BSYWRp
YW5zOiAgICAgICAgb3V0IDw8ICJyYWRpYW5zIjsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEVPcERlZ3JlZXM6ICAgICAgICBvdXQgPDwgImRlZ3JlZXMiOyAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wU2luOiAgICAgICAgICAgIG91dCA8PCAic2luZSI7ICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb3M6ICAgICAgICAgICAgb3V0
IDw8ICJjb3NpbmUiOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFRhbjog
ICAgICAgICAgICBvdXQgPDwgInRhbmdlbnQiOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRU9wQXNpbjogICAgICAgICAgIG91dCA8PCAiYXJjIHNpbmUiOyAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBFT3BBY29zOiAgICAgICAgICAgb3V0IDw8ICJhcmMgY29zaW5l
IjsgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEF0YW46ICAgICAgICAgICBvdXQg
PDwgImFyYyB0YW5nZW50IjsgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BFeHA6
ICAgICAgICAgICAgb3V0IDw8ICJleHAiOyAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEVPcExvZzogICAgICAgICAgICBvdXQgPDwgImxvZyI7ICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wRXhwMjogICAgICAgICAgIG91dCA8PCAiZXhwMiI7ICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BMb2cyOiAgICAgICAgICAgb3V0
IDw8ICJsb2cyIjsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFNxcnQ6
ICAgICAgICAgICBvdXQgPDwgInNxcnQiOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRU9wSW52ZXJzZVNxcnQ6ICAgIG91dCA8PCAiaW52ZXJzZSBzcXJ0IjsgICAgICAgICBi
cmVhazsKLQotICAgICAgICBjYXNlIEVPcEFiczogICAgICAgICAgICBvdXQgPDwgIkFic29sdXRl
IHZhbHVlIjsgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wU2lnbjogICAgICAgICAgIG91
dCA8PCAiU2lnbiI7ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BGbG9v
cjogICAgICAgICAgb3V0IDw8ICJGbG9vciI7ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEVPcENlaWw6ICAgICAgICAgICBvdXQgPDwgIkNlaWxpbmciOyAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wRnJhY3Q6ICAgICAgICAgIG91dCA8PCAiRnJhY3Rpb24i
OyAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEVPcExlbmd0aDogICAgICAgICBv
dXQgPDwgImxlbmd0aCI7ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTm9y
bWFsaXplOiAgICAgIG91dCA8PCAibm9ybWFsaXplIjsgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIC8vCWNhc2UgRU9wRFBkeDogICAgICAgICAgIG91dCA8PCAiZFBkeCI7ICAgICAgICAg
ICAgICAgICBicmVhazsgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vCWNhc2UgRU9wRFBk
eTogICAgICAgICAgIG91dCA8PCAiZFBkeSI7ICAgICAgICAgICAgICAgICBicmVhazsgICAKLSAg
ICAgICAgICAgIC8vCWNhc2UgRU9wRndpZHRoOiAgICAgICAgIG91dCA8PCAiZndpZHRoIjsgICAg
ICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgCi0KLSAgICAgICAgY2FzZSBFT3BB
bnk6ICAgICAgICAgICAgb3V0IDw8ICJhbnkiOyAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEVPcEFsbDogICAgICAgICAgICBvdXQgPDwgImFsbCI7ICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIG91dC5wcmVmaXgoRVBy
ZWZpeEVycm9yKTsKLSAgICAgICAgICAgIG91dCA8PCAiQmFkIHVuYXJ5IG9wIjsKLSAgICB9Ci0K
LSAgICBvdXQgPDwgIiAoIiA8PCBub2RlLT5nZXRDb21wbGV0ZVN0cmluZygpIDw8ICIpIjsKLQot
ICAgIG91dCA8PCAiXG4iOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVE91dHB1dFRy
YXZlcnNlcjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5v
ZGUpCi17Ci0gICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gc2luazsKLQotICAgIGlmIChub2RlLT5n
ZXRPcCgpID09IEVPcE51bGwpIHsKLSAgICAgICAgb3V0LnByZWZpeChFUHJlZml4RXJyb3IpOwot
ICAgICAgICBvdXQgPDwgIm5vZGUgaXMgc3RpbGwgRU9wTnVsbCEiOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUsIGRlcHRoKTsKLQot
ICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkgewotICAgICAgICBjYXNlIEVPcFNlcXVlbmNlOiAg
ICAgIG91dCA8PCAiU2VxdWVuY2VcbiI7IHJldHVybiB0cnVlOwotICAgICAgICBjYXNlIEVPcENv
bW1hOiAgICAgICAgIG91dCA8PCAiQ29tbWFcbiI7IHJldHVybiB0cnVlOwotICAgICAgICBjYXNl
IEVPcEZ1bmN0aW9uOiAgICAgIG91dCA8PCAiRnVuY3Rpb24gRGVmaW5pdGlvbjogIiA8PCBub2Rl
LT5nZXROYW1lKCk7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEZ1bmN0aW9uQ2FsbDogIG91dCA8
PCAiRnVuY3Rpb24gQ2FsbDogIiA8PCBub2RlLT5nZXROYW1lKCk7IGJyZWFrOwotICAgICAgICBj
YXNlIEVPcFBhcmFtZXRlcnM6ICAgIG91dCA8PCAiRnVuY3Rpb24gUGFyYW1ldGVyczogIjsgICAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6IG91dCA8
PCAiQ29uc3RydWN0IGZsb2F0IjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVj
MjogIG91dCA8PCAiQ29uc3RydWN0IHZlYzIiOyAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29u
c3RydWN0VmVjMzogIG91dCA8PCAiQ29uc3RydWN0IHZlYzMiOyAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRU9wQ29uc3RydWN0VmVjNDogIG91dCA8PCAiQ29uc3RydWN0IHZlYzQiOyAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDogIG91dCA8PCAiQ29uc3RydWN0IGJvb2wiOyAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzI6IG91dCA8PCAiQ29uc3RydWN0
IGJ2ZWMyIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzM6IG91dCA8PCAi
Q29uc3RydWN0IGJ2ZWMzIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6
IG91dCA8PCAiQ29uc3RydWN0IGJ2ZWM0IjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0SW50OiAgIG91dCA8PCAiQ29uc3RydWN0IGludCI7ICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0SVZlYzI6IG91dCA8PCAiQ29uc3RydWN0IGl2ZWMyIjsgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzM6IG91dCA8PCAiQ29uc3RydWN0IGl2ZWMzIjsgYnJl
YWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzQ6IG91dCA8PCAiQ29uc3RydWN0IGl2
ZWM0IjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MjogIG91dCA8PCAiQ29u
c3RydWN0IG1hdDIiOyAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MzogIG91
dCA8PCAiQ29uc3RydWN0IG1hdDMiOyAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0
TWF0NDogIG91dCA8PCAiQ29uc3RydWN0IG1hdDQiOyAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9w
Q29uc3RydWN0U3RydWN0OiAgb3V0IDw8ICJDb25zdHJ1Y3Qgc3RydWN0dXJlIjsgIGJyZWFrOwot
Ci0gICAgICAgIGNhc2UgRU9wTGVzc1RoYW46ICAgICAgICAgb3V0IDw8ICJDb21wYXJlIExlc3Mg
VGhhbiI7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOiAg
ICAgIG91dCA8PCAiQ29tcGFyZSBHcmVhdGVyIFRoYW4iOyAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOiAgICBvdXQgPDwgIkNvbXBhcmUgTGVzcyBUaGFuIG9y
IEVxdWFsIjsgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDogb3V0
IDw8ICJDb21wYXJlIEdyZWF0ZXIgVGhhbiBvciBFcXVhbCI7IGJyZWFrOwotICAgICAgICBjYXNl
IEVPcFZlY3RvckVxdWFsOiAgICAgIG91dCA8PCAiRXF1YWwiOyAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BWZWN0b3JOb3RFcXVhbDogICBvdXQgPDwgIk5v
dEVxdWFsIjsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BN
b2Q6ICAgICAgICAgICBvdXQgPDwgIm1vZCI7ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RU9wUG93OiAgICAgICAgICAgb3V0IDw8ICJwb3ciOyAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
IGNhc2UgRU9wQXRhbjogICAgICAgICAgb3V0IDw8ICJhcmMgdGFuZ2VudCI7IGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgRU9wTWluOiAgICAgICAgICAgb3V0IDw8ICJtaW4iOyAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEVPcE1heDogICAgICAgICAgIG91dCA8PCAibWF4IjsgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBFT3BDbGFtcDogICAgICAgICBvdXQgPDwgImNsYW1wIjsgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTWl4OiAgICAgICAgICAgb3V0IDw8ICJtaXgiOyAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFN0ZXA6ICAgICAgICAgIG91dCA8PCAic3Rl
cCI7ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BTbW9vdGhTdGVwOiAgICBvdXQgPDwg
InNtb290aHN0ZXAiOyAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BEaXN0YW5jZTogICAgICBv
dXQgPDwgImRpc3RhbmNlIjsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9w
RG90OiAgICAgICAgICAgb3V0IDw8ICJkb3QtcHJvZHVjdCI7ICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEVPcENyb3NzOiAgICAgICAgIG91dCA8PCAiY3Jvc3MtcHJvZHVjdCI7ICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BGYWNlRm9yd2FyZDogICBvdXQgPDwgImZh
Y2UtZm9yd2FyZCI7ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wUmVmbGVjdDog
ICAgICAgb3V0IDw8ICJyZWZsZWN0IjsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEVPcFJlZnJhY3Q6ICAgICAgIG91dCA8PCAicmVmcmFjdCI7ICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBFT3BNdWw6ICAgICAgICAgICBvdXQgPDwgImNvbXBvbmVudC13
aXNlIG11bHRpcGx5IjsgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BEZWNsYXJhdGlvbjogICBv
dXQgPDwgIkRlY2xhcmF0aW9uOiAiOyAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBvdXQucHJlZml4KEVQcmVmaXhFcnJvcik7Ci0gICAgICAgICAgICBvdXQgPDwgIkJh
ZCBhZ2dyZWdhdGlvbiBvcCI7Ci0gICAgfQotCi0gICAgaWYgKG5vZGUtPmdldE9wKCkgIT0gRU9w
U2VxdWVuY2UgJiYgbm9kZS0+Z2V0T3AoKSAhPSBFT3BQYXJhbWV0ZXJzKQotICAgICAgICBvdXQg
PDwgIiAoIiA8PCBub2RlLT5nZXRDb21wbGV0ZVN0cmluZygpIDw8ICIpIjsKLQotICAgIG91dCA8
PCAiXG4iOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVE91dHB1dFRyYXZlcnNlcjo6
dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUpCi17Ci0g
ICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gc2luazsKLQotICAgIE91dHB1dFRyZWVUZXh0KG91dCwg
bm9kZSwgZGVwdGgpOwotCi0gICAgb3V0IDw8ICJUZXN0IGNvbmRpdGlvbiBhbmQgc2VsZWN0IjsK
LSAgICBvdXQgPDwgIiAoIiA8PCBub2RlLT5nZXRDb21wbGV0ZVN0cmluZygpIDw8ICIpXG4iOwot
Ci0gICAgKytkZXB0aDsKLQotICAgIE91dHB1dFRyZWVUZXh0KHNpbmssIG5vZGUsIGRlcHRoKTsK
LSAgICBvdXQgPDwgIkNvbmRpdGlvblxuIjsKLSAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJh
dmVyc2UodGhpcyk7Ci0KLSAgICBPdXRwdXRUcmVlVGV4dChzaW5rLCBub2RlLCBkZXB0aCk7Ci0g
ICAgaWYgKG5vZGUtPmdldFRydWVCbG9jaygpKSB7Ci0gICAgICAgIG91dCA8PCAidHJ1ZSBjYXNl
XG4iOwotICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIG91dCA8PCAidHJ1ZSBjYXNlIGlzIG51bGxcbiI7Ci0KLSAgICBpZiAo
bm9kZS0+Z2V0RmFsc2VCbG9jaygpKSB7Ci0gICAgICAgIE91dHB1dFRyZWVUZXh0KHNpbmssIG5v
ZGUsIGRlcHRoKTsKLSAgICAgICAgb3V0IDw8ICJmYWxzZSBjYXNlXG4iOwotICAgICAgICBub2Rl
LT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOwotICAgIH0KLQotICAgIC0tZGVwdGg7
Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRD
b25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKQotewotICAgIFRJbmZvU2lu
a0Jhc2UmIG91dCA9IHNpbms7Ci0KLSAgICBzaXplX3Qgc2l6ZSA9IG5vZGUtPmdldFR5cGUoKS5n
ZXRPYmplY3RTaXplKCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykg
ewotICAgICAgICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUsIGRlcHRoKTsKLSAgICAgICAgc3dp
dGNoIChub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpW2ldLmdldFR5cGUoKSkgewotICAgICAg
ICAgICAgY2FzZSBFYnRCb29sOgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRVbmlvbkFy
cmF5UG9pbnRlcigpW2ldLmdldEJDb25zdCgpKQotICAgICAgICAgICAgICAgICAgICBvdXQgPDwg
InRydWUiOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgb3V0IDw8
ICJmYWxzZSI7Ci0KLSAgICAgICAgICAgICAgICBvdXQgPDwgIiAoIiA8PCAiY29uc3QgYm9vbCIg
PDwgIikiOwotICAgICAgICAgICAgICAgIG91dCA8PCAiXG4iOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKLSAgICAgICAgICAgICAgICBvdXQgPDwg
bm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVtpXS5nZXRGQ29uc3QoKTsKLSAgICAgICAgICAg
ICAgICBvdXQgPDwgIiAoY29uc3QgZmxvYXQpXG4iOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAgICAgICAgICAgb3V0IDw8IG5vZGUtPmdl
dFVuaW9uQXJyYXlQb2ludGVyKClbaV0uZ2V0SUNvbnN0KCk7Ci0gICAgICAgICAgICAgICAgb3V0
IDw8ICIgKGNvbnN0IGludClcbiI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIG91dC5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVy
cm9yLCBub2RlLT5nZXRMaW5lKCksICJVbmtub3duIGNvbnN0YW50Iik7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgVE91dHB1dFRyYXZlcnNlcjo6
dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCogbm9kZSkKLXsKLSAgICBUSW5mb1Np
bmtCYXNlJiBvdXQgPSBzaW5rOwotCi0gICAgT3V0cHV0VHJlZVRleHQob3V0LCBub2RlLCBkZXB0
aCk7Ci0KLSAgICBvdXQgPDwgIkxvb3Agd2l0aCBjb25kaXRpb24gIjsKLSAgICBpZiAobm9kZS0+
Z2V0VHlwZSgpID09IEVMb29wRG9XaGlsZSkKLSAgICAgICAgb3V0IDw8ICJub3QgIjsKLSAgICBv
dXQgPDwgInRlc3RlZCBmaXJzdFxuIjsKLQotICAgICsrZGVwdGg7Ci0KLSAgICBPdXRwdXRUcmVl
VGV4dChzaW5rLCBub2RlLCBkZXB0aCk7Ci0gICAgaWYgKG5vZGUtPmdldENvbmRpdGlvbigpKSB7
Ci0gICAgICAgIG91dCA8PCAiTG9vcCBDb25kaXRpb25cbiI7Ci0gICAgICAgIG5vZGUtPmdldENv
bmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgb3V0IDw8ICJO
byBsb29wIGNvbmRpdGlvblxuIjsKLQotICAgIE91dHB1dFRyZWVUZXh0KHNpbmssIG5vZGUsIGRl
cHRoKTsKLSAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKSB7Ci0gICAgICAgIG91dCA8PCAiTG9vcCBC
b2R5XG4iOwotICAgICAgICBub2RlLT5nZXRCb2R5KCktPnRyYXZlcnNlKHRoaXMpOwotICAgIH0g
ZWxzZQotICAgICAgICBvdXQgPDwgIk5vIGxvb3AgYm9keVxuIjsKLQotICAgIGlmIChub2RlLT5n
ZXRFeHByZXNzaW9uKCkpIHsKLSAgICAgICAgT3V0cHV0VHJlZVRleHQoc2luaywgbm9kZSwgZGVw
dGgpOwotICAgICAgICBvdXQgPDwgIkxvb3AgVGVybWluYWwgRXhwcmVzc2lvblxuIjsKLSAgICAg
ICAgbm9kZS0+Z2V0RXhwcmVzc2lvbigpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICB9Ci0KLSAgICAt
LWRlcHRoOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFRPdXRwdXRUcmF2ZXJzZXI6
OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKiBub2RlKQotewotICAgIFRJ
bmZvU2lua0Jhc2UmIG91dCA9IHNpbms7Ci0KLSAgICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUs
IGRlcHRoKTsKLQotICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkpIHsKLSAgICAgICAgY2Fz
ZSBFT3BLaWxsOiAgICAgIG91dCA8PCAiQnJhbmNoOiBLaWxsIjsgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEVPcEJyZWFrOiAgICAgb3V0IDw8ICJCcmFuY2g6IEJyZWFrIjsgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29udGludWU6ICBvdXQgPDwgIkJyYW5jaDogQ29u
dGludWUiOyAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BSZXR1cm46ICAgIG91dCA8PCAi
QnJhbmNoOiBSZXR1cm4iOyAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OiAgICAgICAg
ICAgb3V0IDw8ICJCcmFuY2g6IFVua25vd24gQnJhbmNoIjsgYnJlYWs7Ci0gICAgfQotCi0gICAg
aWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkgewotICAgICAgICBvdXQgPDwgIiB3aXRoIGV4cHJl
c3Npb25cbiI7Ci0gICAgICAgICsrZGVwdGg7Ci0gICAgICAgIG5vZGUtPmdldEV4cHJlc3Npb24o
KS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIC0tZGVwdGg7Ci0gICAgfSBlbHNlCi0gICAgICAg
IG91dCA8PCAiXG4iOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLwotLy8gVGhpcyBmdW5j
dGlvbiBpcyB0aGUgb25lIHRvIGNhbGwgZXh0ZXJuYWxseSB0byBzdGFydCB0aGUgdHJhdmVyc2Fs
LgotLy8gSW5kaXZpZHVhbCBmdW5jdGlvbnMgY2FuIGJlIGluaXRpYWxpemVkIHRvIDAgdG8gc2tp
cCBwcm9jZXNzaW5nIG9mIHRoYXQKLS8vIHR5cGUgb2Ygbm9kZS4gIEl0J3MgY2hpbGRyZW4gd2ls
bCBzdGlsbCBiZSBwcm9jZXNzZWQuCi0vLwotdm9pZCBUSW50ZXJtZWRpYXRlOjpvdXRwdXRUcmVl
KFRJbnRlcm1Ob2RlKiByb290KQotewotICAgIGlmIChyb290ID09IDApCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFRPdXRwdXRUcmF2ZXJzZXIgaXQoaW5mb1NpbmsuaW5mbyk7Ci0KLSAgICByb290
LT50cmF2ZXJzZSgmaXQpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL2ludGVybWVkaWF0ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL2ludGVybWVkaWF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAx
NGUzOWZkNTYyZGMwNDU1NDFjMzFmYzQzMTkwNjNiNTA2MDIwOTliLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9pbnRlcm1lZGlhdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDYzNSArMCwwIEBA
Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLwotLy8gRGVmaW5pdGlvbiBvZiB0aGUgaW4tbWVtb3J5
IGhpZ2gtbGV2ZWwgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCi0vLyBvZiBzaGFkZXJzLiAg
VGhpcyBpcyBhIHRyZWUgdGhhdCBwYXJzZXIgY3JlYXRlcy4KLS8vCi0vLyBOb2RlcyBpbiB0aGUg
dHJlZSBhcmUgZGVmaW5lZCBhcyBhIGhpZXJhcmNoeSBvZiBjbGFzc2VzIGRlcml2ZWQgZnJvbSAK
LS8vIFRJbnRlcm1Ob2RlLiBFYWNoIGlzIGEgbm9kZSBpbiBhIHRyZWUuICBUaGVyZSBpcyBubyBw
cmVzZXQgYnJhbmNoaW5nIGZhY3RvcjsKLS8vIGVhY2ggbm9kZSBjYW4gaGF2ZSBpdCdzIG93biB0
eXBlIG9mIGxpc3Qgb2YgY2hpbGRyZW4uCi0vLwotCi0jaWZuZGVmIF9fSU5URVJNRURJQVRFX0gK
LSNkZWZpbmUgX19JTlRFUk1FRElBVEVfSAotCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5n
LmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSAiY29tcGlsZXIvQ29tbW9uLmgi
Ci0jaW5jbHVkZSAiY29tcGlsZXIvVHlwZXMuaCIKLSNpbmNsdWRlICJjb21waWxlci9Db25zdGFu
dFVuaW9uLmgiCi0KLS8vCi0vLyBPcGVyYXRvcnMgdXNlZCBieSB0aGUgaGlnaC1sZXZlbCAocGFy
c2UgdHJlZSkgcmVwcmVzZW50YXRpb24uCi0vLwotZW51bSBUT3BlcmF0b3IgewotICAgIEVPcE51
bGwsICAgICAgICAgICAgLy8gaWYgaW4gYSBub2RlLCBzaG91bGQgb25seSBtZWFuIGEgbm9kZSBp
cyBzdGlsbCBiZWluZyBidWlsdAotICAgIEVPcFNlcXVlbmNlLCAgICAgICAgLy8gZGVub3RlcyBh
IGxpc3Qgb2Ygc3RhdGVtZW50cywgb3IgcGFyYW1ldGVycywgZXRjLgotICAgIEVPcEZ1bmN0aW9u
Q2FsbCwgICAgCi0gICAgRU9wRnVuY3Rpb24sICAgICAgICAvLyBGb3IgZnVuY3Rpb24gZGVmaW5p
dGlvbgotICAgIEVPcFBhcmFtZXRlcnMsICAgICAgLy8gYW4gYWdncmVnYXRlIGxpc3RpbmcgdGhl
IHBhcmFtZXRlcnMgdG8gYSBmdW5jdGlvbgotCi0gICAgRU9wRGVjbGFyYXRpb24sCi0gICAgRU9w
UHJvdG90eXBlLAotCi0gICAgLy8KLSAgICAvLyBVbmFyeSBvcGVyYXRvcnMKLSAgICAvLwotCi0g
ICAgRU9wTmVnYXRpdmUsCi0gICAgRU9wTG9naWNhbE5vdCwKLSAgICBFT3BWZWN0b3JMb2dpY2Fs
Tm90LAotCi0gICAgRU9wUG9zdEluY3JlbWVudCwKLSAgICBFT3BQb3N0RGVjcmVtZW50LAotICAg
IEVPcFByZUluY3JlbWVudCwKLSAgICBFT3BQcmVEZWNyZW1lbnQsCi0KLSAgICBFT3BDb252SW50
VG9Cb29sLAotICAgIEVPcENvbnZGbG9hdFRvQm9vbCwKLSAgICBFT3BDb252Qm9vbFRvRmxvYXQs
Ci0gICAgRU9wQ29udkludFRvRmxvYXQsCi0gICAgRU9wQ29udkZsb2F0VG9JbnQsCi0gICAgRU9w
Q29udkJvb2xUb0ludCwKLQotICAgIC8vCi0gICAgLy8gYmluYXJ5IG9wZXJhdGlvbnMKLSAgICAv
LwotCi0gICAgRU9wQWRkLAotICAgIEVPcFN1YiwKLSAgICBFT3BNdWwsCi0gICAgRU9wRGl2LAot
ICAgIEVPcEVxdWFsLAotICAgIEVPcE5vdEVxdWFsLAotICAgIEVPcFZlY3RvckVxdWFsLAotICAg
IEVPcFZlY3Rvck5vdEVxdWFsLAotICAgIEVPcExlc3NUaGFuLAotICAgIEVPcEdyZWF0ZXJUaGFu
LAotICAgIEVPcExlc3NUaGFuRXF1YWwsCi0gICAgRU9wR3JlYXRlclRoYW5FcXVhbCwKLSAgICBF
T3BDb21tYSwKLQotICAgIEVPcFZlY3RvclRpbWVzU2NhbGFyLAotICAgIEVPcFZlY3RvclRpbWVz
TWF0cml4LAotICAgIEVPcE1hdHJpeFRpbWVzVmVjdG9yLAotICAgIEVPcE1hdHJpeFRpbWVzU2Nh
bGFyLAotCi0gICAgRU9wTG9naWNhbE9yLAotICAgIEVPcExvZ2ljYWxYb3IsCi0gICAgRU9wTG9n
aWNhbEFuZCwKLQotICAgIEVPcEluZGV4RGlyZWN0LAotICAgIEVPcEluZGV4SW5kaXJlY3QsCi0g
ICAgRU9wSW5kZXhEaXJlY3RTdHJ1Y3QsCi0KLSAgICBFT3BWZWN0b3JTd2l6emxlLAotCi0gICAg
Ly8KLSAgICAvLyBCdWlsdC1pbiBmdW5jdGlvbnMgcG90ZW50aWFsbHkgbWFwcGVkIHRvIG9wZXJh
dG9ycwotICAgIC8vCi0KLSAgICBFT3BSYWRpYW5zLAotICAgIEVPcERlZ3JlZXMsCi0gICAgRU9w
U2luLAotICAgIEVPcENvcywKLSAgICBFT3BUYW4sCi0gICAgRU9wQXNpbiwKLSAgICBFT3BBY29z
LAotICAgIEVPcEF0YW4sCi0KLSAgICBFT3BQb3csCi0gICAgRU9wRXhwLAotICAgIEVPcExvZywK
LSAgICBFT3BFeHAyLAotICAgIEVPcExvZzIsCi0gICAgRU9wU3FydCwKLSAgICBFT3BJbnZlcnNl
U3FydCwKLQotICAgIEVPcEFicywKLSAgICBFT3BTaWduLAotICAgIEVPcEZsb29yLAotICAgIEVP
cENlaWwsCi0gICAgRU9wRnJhY3QsCi0gICAgRU9wTW9kLAotICAgIEVPcE1pbiwKLSAgICBFT3BN
YXgsCi0gICAgRU9wQ2xhbXAsCi0gICAgRU9wTWl4LAotICAgIEVPcFN0ZXAsCi0gICAgRU9wU21v
b3RoU3RlcCwKLQotICAgIEVPcExlbmd0aCwKLSAgICBFT3BEaXN0YW5jZSwKLSAgICBFT3BEb3Qs
Ci0gICAgRU9wQ3Jvc3MsCi0gICAgRU9wTm9ybWFsaXplLAotICAgIEVPcEZhY2VGb3J3YXJkLAot
ICAgIEVPcFJlZmxlY3QsCi0gICAgRU9wUmVmcmFjdCwKLQotICAgIEVPcERGZHgsICAgICAgICAg
ICAgLy8gRnJhZ21lbnQgb25seSwgT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIGV4dGVuc2lvbgot
ICAgIEVPcERGZHksICAgICAgICAgICAgLy8gRnJhZ21lbnQgb25seSwgT0VTX3N0YW5kYXJkX2Rl
cml2YXRpdmVzIGV4dGVuc2lvbgotICAgIEVPcEZ3aWR0aCwgICAgICAgICAgLy8gRnJhZ21lbnQg
b25seSwgT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIGV4dGVuc2lvbgotCi0gICAgRU9wTWF0cml4
VGltZXNNYXRyaXgsCi0KLSAgICBFT3BBbnksCi0gICAgRU9wQWxsLAotCi0gICAgLy8KLSAgICAv
LyBCcmFuY2gKLSAgICAvLwotCi0gICAgRU9wS2lsbCwgICAgICAgICAgICAvLyBGcmFnbWVudCBv
bmx5Ci0gICAgRU9wUmV0dXJuLAotICAgIEVPcEJyZWFrLAotICAgIEVPcENvbnRpbnVlLAotCi0g
ICAgLy8KLSAgICAvLyBDb25zdHJ1Y3RvcnMKLSAgICAvLwotCi0gICAgRU9wQ29uc3RydWN0SW50
LAotICAgIEVPcENvbnN0cnVjdEJvb2wsCi0gICAgRU9wQ29uc3RydWN0RmxvYXQsCi0gICAgRU9w
Q29uc3RydWN0VmVjMiwKLSAgICBFT3BDb25zdHJ1Y3RWZWMzLAotICAgIEVPcENvbnN0cnVjdFZl
YzQsCi0gICAgRU9wQ29uc3RydWN0QlZlYzIsCi0gICAgRU9wQ29uc3RydWN0QlZlYzMsCi0gICAg
RU9wQ29uc3RydWN0QlZlYzQsCi0gICAgRU9wQ29uc3RydWN0SVZlYzIsCi0gICAgRU9wQ29uc3Ry
dWN0SVZlYzMsCi0gICAgRU9wQ29uc3RydWN0SVZlYzQsCi0gICAgRU9wQ29uc3RydWN0TWF0MiwK
LSAgICBFT3BDb25zdHJ1Y3RNYXQzLAotICAgIEVPcENvbnN0cnVjdE1hdDQsCi0gICAgRU9wQ29u
c3RydWN0U3RydWN0LAotCi0gICAgLy8KLSAgICAvLyBtb3ZlcwotICAgIC8vCi0KLSAgICBFT3BB
c3NpZ24sCi0gICAgRU9wSW5pdGlhbGl6ZSwKLSAgICBFT3BBZGRBc3NpZ24sCi0gICAgRU9wU3Vi
QXNzaWduLAotICAgIEVPcE11bEFzc2lnbiwKLSAgICBFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2ln
biwKLSAgICBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbiwKLSAgICBFT3BNYXRyaXhUaW1lc1Nj
YWxhckFzc2lnbiwKLSAgICBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbiwKLSAgICBFT3BEaXZB
c3NpZ24KLX07Ci0KLWV4dGVybiBjb25zdCBjaGFyKiBnZXRPcGVyYXRvclN0cmluZyhUT3BlcmF0
b3Igb3ApOwotCi1jbGFzcyBUSW50ZXJtVHJhdmVyc2VyOwotY2xhc3MgVEludGVybUFnZ3JlZ2F0
ZTsKLWNsYXNzIFRJbnRlcm1CaW5hcnk7Ci1jbGFzcyBUSW50ZXJtVW5hcnk7Ci1jbGFzcyBUSW50
ZXJtQ29uc3RhbnRVbmlvbjsKLWNsYXNzIFRJbnRlcm1TZWxlY3Rpb247Ci1jbGFzcyBUSW50ZXJt
VHlwZWQ7Ci1jbGFzcyBUSW50ZXJtU3ltYm9sOwotY2xhc3MgVEludGVybUxvb3A7Ci1jbGFzcyBU
SW5mb1Npbms7Ci0KLS8vCi0vLyBCYXNlIGNsYXNzIGZvciB0aGUgdHJlZSBub2RlcwotLy8KLWNs
YXNzIFRJbnRlcm1Ob2RlIHsKLXB1YmxpYzoKLSAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRF
KCk7Ci0gICAgVEludGVybU5vZGUoKSB7Ci0gICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyB0byBU
U291cmNlTG9jIGNvbnN0cnVjdG9yCi0gICAgICAgIC8vIGFmdGVyIGdldHRpbmcgcmlkIG9mIFRQ
dWJsaWNUeXBlLgotICAgICAgICBsaW5lLmZpcnN0X2ZpbGUgPSBsaW5lLmxhc3RfZmlsZSA9IDA7
Ci0gICAgICAgIGxpbmUuZmlyc3RfbGluZSA9IGxpbmUubGFzdF9saW5lID0gMDsKLSAgICB9Ci0g
ICAgdmlydHVhbCB+VEludGVybU5vZGUoKSB7IH0KLQotICAgIGNvbnN0IFRTb3VyY2VMb2MmIGdl
dExpbmUoKSBjb25zdCB7IHJldHVybiBsaW5lOyB9Ci0gICAgdm9pZCBzZXRMaW5lKGNvbnN0IFRT
b3VyY2VMb2MmIGwpIHsgbGluZSA9IGw7IH0KLQotICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShU
SW50ZXJtVHJhdmVyc2VyKikgPSAwOwotICAgIHZpcnR1YWwgVEludGVybVR5cGVkKiBnZXRBc1R5
cGVkKCkgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgVEludGVybUNvbnN0YW50VW5pb24qIGdl
dEFzQ29uc3RhbnRVbmlvbigpIHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIFRJbnRlcm1BZ2dy
ZWdhdGUqIGdldEFzQWdncmVnYXRlKCkgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgVEludGVy
bUJpbmFyeSogZ2V0QXNCaW5hcnlOb2RlKCkgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgVElu
dGVybVVuYXJ5KiBnZXRBc1VuYXJ5Tm9kZSgpIHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIFRJ
bnRlcm1TZWxlY3Rpb24qIGdldEFzU2VsZWN0aW9uTm9kZSgpIHsgcmV0dXJuIDA7IH0KLSAgICB2
aXJ0dWFsIFRJbnRlcm1TeW1ib2wqIGdldEFzU3ltYm9sTm9kZSgpIHsgcmV0dXJuIDA7IH0KLSAg
ICB2aXJ0dWFsIFRJbnRlcm1Mb29wKiBnZXRBc0xvb3BOb2RlKCkgeyByZXR1cm4gMDsgfQotCi0g
ICAgLy8gUmVwbGFjZSBhIGNoaWxkIG5vZGUuIFJldHVybiB0cnVlIGlmIHxvcmlnaW5hbHwgaXMg
YSBjaGlsZAotICAgIC8vIG5vZGUgYW5kIGl0IGlzIHJlcGxhY2VkOyBvdGhlcndpc2UsIHJldHVy
biBmYWxzZS4KLSAgICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxkTm9kZSgKLSAgICAgICAgVElu
dGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFjZW1lbnQpID0gMDsKLQotcHJv
dGVjdGVkOgotICAgIFRTb3VyY2VMb2MgbGluZTsKLX07Ci0KLS8vCi0vLyBUaGlzIGlzIGp1c3Qg
dG8gaGVscCB5YWNjLgotLy8KLXN0cnVjdCBUSW50ZXJtTm9kZVBhaXIgewotICAgIFRJbnRlcm1O
b2RlKiBub2RlMTsKLSAgICBUSW50ZXJtTm9kZSogbm9kZTI7Ci19OwotCi0vLwotLy8gSW50ZXJt
ZWRpYXRlIGNsYXNzIGZvciBub2RlcyB0aGF0IGhhdmUgYSB0eXBlLgotLy8KLWNsYXNzIFRJbnRl
cm1UeXBlZCA6IHB1YmxpYyBUSW50ZXJtTm9kZSB7Ci1wdWJsaWM6Ci0gICAgVEludGVybVR5cGVk
KGNvbnN0IFRUeXBlJiB0KSA6IHR5cGUodCkgIHsgfQotICAgIHZpcnR1YWwgVEludGVybVR5cGVk
KiBnZXRBc1R5cGVkKCkgeyByZXR1cm4gdGhpczsgfQotCi0gICAgdmlydHVhbCBib29sIGhhc1Np
ZGVFZmZlY3RzKCkgY29uc3QgPSAwOwotCi0gICAgdm9pZCBzZXRUeXBlKGNvbnN0IFRUeXBlJiB0
KSB7IHR5cGUgPSB0OyB9Ci0gICAgY29uc3QgVFR5cGUmIGdldFR5cGUoKSBjb25zdCB7IHJldHVy
biB0eXBlOyB9Ci0gICAgVFR5cGUqIGdldFR5cGVQb2ludGVyKCkgeyByZXR1cm4gJnR5cGU7IH0K
LQotICAgIFRCYXNpY1R5cGUgZ2V0QmFzaWNUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRC
YXNpY1R5cGUoKTsgfQotICAgIFRRdWFsaWZpZXIgZ2V0UXVhbGlmaWVyKCkgY29uc3QgeyByZXR1
cm4gdHlwZS5nZXRRdWFsaWZpZXIoKTsgfQotICAgIFRQcmVjaXNpb24gZ2V0UHJlY2lzaW9uKCkg
Y29uc3QgeyByZXR1cm4gdHlwZS5nZXRQcmVjaXNpb24oKTsgfQotICAgIGludCBnZXROb21pbmFs
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0Tm9taW5hbFNpemUoKTsgfQotICAgIAotICAg
IGJvb2wgaXNNYXRyaXgoKSBjb25zdCB7IHJldHVybiB0eXBlLmlzTWF0cml4KCk7IH0KLSAgICBi
b29sIGlzQXJyYXkoKSAgY29uc3QgeyByZXR1cm4gdHlwZS5pc0FycmF5KCk7IH0KLSAgICBib29s
IGlzVmVjdG9yKCkgY29uc3QgeyByZXR1cm4gdHlwZS5pc1ZlY3RvcigpOyB9Ci0gICAgYm9vbCBp
c1NjYWxhcigpIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNTY2FsYXIoKTsgfQotICAgIGNvbnN0IGNo
YXIqIGdldEJhc2ljU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRCYXNpY1N0cmluZygp
OyB9Ci0gICAgY29uc3QgY2hhciogZ2V0UXVhbGlmaWVyU3RyaW5nKCkgY29uc3QgeyByZXR1cm4g
dHlwZS5nZXRRdWFsaWZpZXJTdHJpbmcoKTsgfQotICAgIFRTdHJpbmcgZ2V0Q29tcGxldGVTdHJp
bmcoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldENvbXBsZXRlU3RyaW5nKCk7IH0KLQotICAgIGlu
dCB0b3RhbFJlZ2lzdGVyQ291bnQoKSBjb25zdCB7IHJldHVybiB0eXBlLnRvdGFsUmVnaXN0ZXJD
b3VudCgpOyB9Ci0gICAgaW50IGVsZW1lbnRSZWdpc3RlckNvdW50KCkgY29uc3QgeyByZXR1cm4g
dHlwZS5lbGVtZW50UmVnaXN0ZXJDb3VudCgpOyB9Ci0gICAgaW50IGdldEFycmF5U2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIHR5cGUuZ2V0QXJyYXlTaXplKCk7IH0KLQotcHJvdGVjdGVkOgotICAgIFRU
eXBlIHR5cGU7Ci19OwotCi0vLwotLy8gSGFuZGxlIGZvciwgZG8td2hpbGUsIGFuZCB3aGlsZSBs
b29wcy4KLS8vCi1lbnVtIFRMb29wVHlwZSB7Ci0gICAgRUxvb3BGb3IsCi0gICAgRUxvb3BXaGls
ZSwKLSAgICBFTG9vcERvV2hpbGUKLX07Ci0KLWNsYXNzIFRJbnRlcm1Mb29wIDogcHVibGljIFRJ
bnRlcm1Ob2RlIHsKLXB1YmxpYzoKLSAgICBUSW50ZXJtTG9vcChUTG9vcFR5cGUgYVR5cGUsCi0g
ICAgICAgICAgICAgICAgVEludGVybU5vZGUgKmFJbml0LCBUSW50ZXJtVHlwZWQqIGFDb25kLCBU
SW50ZXJtVHlwZWQqIGFFeHByLAotICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlKiBhQm9keSkg
OgotICAgICAgICAgICAgdHlwZShhVHlwZSksCi0gICAgICAgICAgICBpbml0KGFJbml0KSwKLSAg
ICAgICAgICAgIGNvbmQoYUNvbmQpLAotICAgICAgICAgICAgZXhwcihhRXhwciksCi0gICAgICAg
ICAgICBib2R5KGFCb2R5KSwKLSAgICAgICAgICAgIHVucm9sbEZsYWcoZmFsc2UpIHsgfQotCi0g
ICAgdmlydHVhbCBUSW50ZXJtTG9vcCogZ2V0QXNMb29wTm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOwotICAgIHZpcnR1
YWwgYm9vbCByZXBsYWNlQ2hpbGROb2RlKAotICAgICAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWws
IFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCk7Ci0KLSAgICBUTG9vcFR5cGUgZ2V0VHlwZSgpIGNv
bnN0IHsgcmV0dXJuIHR5cGU7IH0KLSAgICBUSW50ZXJtTm9kZSogZ2V0SW5pdCgpIHsgcmV0dXJu
IGluaXQ7IH0KLSAgICBUSW50ZXJtVHlwZWQqIGdldENvbmRpdGlvbigpIHsgcmV0dXJuIGNvbmQ7
IH0KLSAgICBUSW50ZXJtVHlwZWQqIGdldEV4cHJlc3Npb24oKSB7IHJldHVybiBleHByOyB9Ci0g
ICAgVEludGVybU5vZGUqIGdldEJvZHkoKSB7IHJldHVybiBib2R5OyB9Ci0KLSAgICB2b2lkIHNl
dFVucm9sbEZsYWcoYm9vbCBmbGFnKSB7IHVucm9sbEZsYWcgPSBmbGFnOyB9Ci0gICAgYm9vbCBn
ZXRVbnJvbGxGbGFnKCkgeyByZXR1cm4gdW5yb2xsRmxhZzsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAg
VExvb3BUeXBlIHR5cGU7Ci0gICAgVEludGVybU5vZGUqIGluaXQ7ICAvLyBmb3ItbG9vcCBpbml0
aWFsaXphdGlvbgotICAgIFRJbnRlcm1UeXBlZCogY29uZDsgLy8gbG9vcCBleGl0IGNvbmRpdGlv
bgotICAgIFRJbnRlcm1UeXBlZCogZXhwcjsgLy8gZm9yLWxvb3AgZXhwcmVzc2lvbgotICAgIFRJ
bnRlcm1Ob2RlKiBib2R5OyAgLy8gbG9vcCBib2R5Ci0KLSAgICBib29sIHVucm9sbEZsYWc7IC8v
IFdoZXRoZXIgdGhlIGxvb3Agc2hvdWxkIGJlIHVucm9sbGVkIG9yIG5vdC4KLX07Ci0KLS8vCi0v
LyBIYW5kbGUgYnJlYWssIGNvbnRpbnVlLCByZXR1cm4sIGFuZCBraWxsLgotLy8KLWNsYXNzIFRJ
bnRlcm1CcmFuY2ggOiBwdWJsaWMgVEludGVybU5vZGUgewotcHVibGljOgotICAgIFRJbnRlcm1C
cmFuY2goVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGUpIDoKLSAgICAgICAgICAgIGZsb3dP
cChvcCksCi0gICAgICAgICAgICBleHByZXNzaW9uKGUpIHsgfQotCi0gICAgdmlydHVhbCB2b2lk
IHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKLSAgICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNo
aWxkTm9kZSgKLSAgICAgICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVw
bGFjZW1lbnQpOwotCi0gICAgVE9wZXJhdG9yIGdldEZsb3dPcCgpIHsgcmV0dXJuIGZsb3dPcDsg
fQotICAgIFRJbnRlcm1UeXBlZCogZ2V0RXhwcmVzc2lvbigpIHsgcmV0dXJuIGV4cHJlc3Npb247
IH0KLQotcHJvdGVjdGVkOgotICAgIFRPcGVyYXRvciBmbG93T3A7Ci0gICAgVEludGVybVR5cGVk
KiBleHByZXNzaW9uOyAgLy8gbm9uLXplcm8gZXhjZXB0IGZvciAicmV0dXJuIGV4cDsiIHN0YXRl
bWVudHMKLX07Ci0KLS8vCi0vLyBOb2RlcyB0aGF0IGNvcnJlc3BvbmQgdG8gc3ltYm9scyBvciBj
b25zdGFudHMgaW4gdGhlIHNvdXJjZSBjb2RlLgotLy8KLWNsYXNzIFRJbnRlcm1TeW1ib2wgOiBw
dWJsaWMgVEludGVybVR5cGVkIHsKLXB1YmxpYzoKLSAgICAvLyBpZiBzeW1ib2wgaXMgaW5pdGlh
bGl6ZWQgYXMgc3ltYm9sKHN5bSksIHRoZSBtZW1vcnkgY29tZXMgZnJvbSB0aGUgcG9vbGFsbG9j
YXRvciBvZiBzeW0uIElmIHN5bSBjb21lcyBmcm9tCi0gICAgLy8gcGVyIHByb2Nlc3MgZ2xvYmFs
cG9vbGFsbG9jYXRvciwgdGhlbiBpdCBjYXVzZXMgaW5jcmVhc2VkIG1lbW9yeSB1c2FnZSBwZXIg
Y29tcGlsZQotICAgIC8vIGl0IGlzIGVzc2VudGlhbCB0byB1c2UgInN5bWJvbCA9IHN5bSIgdG8g
YXNzaWduIHRvIHN5bWJvbAotICAgIFRJbnRlcm1TeW1ib2woaW50IGksIGNvbnN0IFRTdHJpbmcm
IHN5bSwgY29uc3QgVFR5cGUmIHQpIDogCi0gICAgICAgICAgICBUSW50ZXJtVHlwZWQodCksIGlk
KGkpICB7IHN5bWJvbCA9IHN5bTsgb3JpZ2luYWxTeW1ib2wgPSBzeW07IH0gCi0KLSAgICB2aXJ0
dWFsIGJvb2wgaGFzU2lkZUVmZmVjdHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAg
aW50IGdldElkKCkgY29uc3QgeyByZXR1cm4gaWQ7IH0KLSAgICBjb25zdCBUU3RyaW5nJiBnZXRT
eW1ib2woKSBjb25zdCB7IHJldHVybiBzeW1ib2w7IH0KLQotICAgIHZvaWQgc2V0SWQoaW50IG5l
d0lkKSB7IGlkID0gbmV3SWQ7IH0KLSAgICB2b2lkIHNldFN5bWJvbChjb25zdCBUU3RyaW5nJiBz
eW0pIHsgc3ltYm9sID0gc3ltOyB9Ci0KLSAgICBjb25zdCBUU3RyaW5nJiBnZXRPcmlnaW5hbFN5
bWJvbCgpIGNvbnN0IHsgcmV0dXJuIG9yaWdpbmFsU3ltYm9sOyB9Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOwotICAgIHZpcnR1YWwgVEludGVybVN5bWJv
bCogZ2V0QXNTeW1ib2xOb2RlKCkgeyByZXR1cm4gdGhpczsgfQotICAgIHZpcnR1YWwgYm9vbCBy
ZXBsYWNlQ2hpbGROb2RlKFRJbnRlcm1Ob2RlICosIFRJbnRlcm1Ob2RlICopIHsgcmV0dXJuIGZh
bHNlOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBpbnQgaWQ7Ci0gICAgVFN0cmluZyBzeW1ib2w7Ci0g
ICAgVFN0cmluZyBvcmlnaW5hbFN5bWJvbDsKLX07Ci0KLWNsYXNzIFRJbnRlcm1Db25zdGFudFVu
aW9uIDogcHVibGljIFRJbnRlcm1UeXBlZCB7Ci1wdWJsaWM6Ci0gICAgVEludGVybUNvbnN0YW50
VW5pb24oQ29uc3RhbnRVbmlvbiAqdW5pb25Qb2ludGVyLCBjb25zdCBUVHlwZSYgdCkgOiBUSW50
ZXJtVHlwZWQodCksIHVuaW9uQXJyYXlQb2ludGVyKHVuaW9uUG9pbnRlcikgeyB9Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgaGFzU2lkZUVmZmVjdHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0g
ICAgQ29uc3RhbnRVbmlvbiogZ2V0VW5pb25BcnJheVBvaW50ZXIoKSBjb25zdCB7IHJldHVybiB1
bmlvbkFycmF5UG9pbnRlcjsgfQotICAgIAotICAgIGludCBnZXRJQ29uc3QoaW50IGluZGV4KSBj
b25zdCB7IHJldHVybiB1bmlvbkFycmF5UG9pbnRlciA/IHVuaW9uQXJyYXlQb2ludGVyW2luZGV4
XS5nZXRJQ29uc3QoKSA6IDA7IH0KLSAgICBmbG9hdCBnZXRGQ29uc3QoaW50IGluZGV4KSBjb25z
dCB7IHJldHVybiB1bmlvbkFycmF5UG9pbnRlciA/IHVuaW9uQXJyYXlQb2ludGVyW2luZGV4XS5n
ZXRGQ29uc3QoKSA6IDAuMGY7IH0KLSAgICBib29sIGdldEJDb25zdChpbnQgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIHVuaW9uQXJyYXlQb2ludGVyID8gdW5pb25BcnJheVBvaW50ZXJbaW5kZXhdLmdl
dEJDb25zdCgpIDogZmFsc2U7IH0KLQotICAgIHZpcnR1YWwgVEludGVybUNvbnN0YW50VW5pb24q
IGdldEFzQ29uc3RhbnRVbmlvbigpICB7IHJldHVybiB0aGlzOyB9Ci0gICAgdmlydHVhbCB2b2lk
IHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKLSAgICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNo
aWxkTm9kZShUSW50ZXJtTm9kZSAqLCBUSW50ZXJtTm9kZSAqKSB7IHJldHVybiBmYWxzZTsgfQot
Ci0gICAgVEludGVybVR5cGVkKiBmb2xkKFRPcGVyYXRvciwgVEludGVybVR5cGVkKiwgVEluZm9T
aW5rJik7Ci0KLXByb3RlY3RlZDoKLSAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5UG9pbnRl
cjsKLX07Ci0KLS8vCi0vLyBJbnRlcm1lZGlhdGUgY2xhc3MgZm9yIG5vZGUgdHlwZXMgdGhhdCBo
b2xkIG9wZXJhdG9ycy4KLS8vCi1jbGFzcyBUSW50ZXJtT3BlcmF0b3IgOiBwdWJsaWMgVEludGVy
bVR5cGVkIHsKLXB1YmxpYzoKLSAgICBUT3BlcmF0b3IgZ2V0T3AoKSBjb25zdCB7IHJldHVybiBv
cDsgfQotICAgIHZvaWQgc2V0T3AoVE9wZXJhdG9yIG8pIHsgb3AgPSBvOyB9Ci0KLSAgICBib29s
IGlzQXNzaWdubWVudCgpIGNvbnN0OwotICAgIGJvb2wgaXNDb25zdHJ1Y3RvcigpIGNvbnN0Owot
Ci0gICAgdmlydHVhbCBib29sIGhhc1NpZGVFZmZlY3RzKCkgY29uc3QgeyByZXR1cm4gaXNBc3Np
Z25tZW50KCk7IH0KLQotcHJvdGVjdGVkOgotICAgIFRJbnRlcm1PcGVyYXRvcihUT3BlcmF0b3Ig
bykgOiBUSW50ZXJtVHlwZWQoVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCkpLCBvcChvKSB7
fQotICAgIFRJbnRlcm1PcGVyYXRvcihUT3BlcmF0b3IgbywgVFR5cGUmIHQpIDogVEludGVybVR5
cGVkKHQpLCBvcChvKSB7fSAgIAotICAgIFRPcGVyYXRvciBvcDsKLX07Ci0KLS8vCi0vLyBOb2Rl
cyBmb3IgYWxsIHRoZSBiYXNpYyBiaW5hcnkgbWF0aCBvcGVyYXRvcnMuCi0vLwotY2xhc3MgVElu
dGVybUJpbmFyeSA6IHB1YmxpYyBUSW50ZXJtT3BlcmF0b3IgewotcHVibGljOgotICAgIFRJbnRl
cm1CaW5hcnkoVE9wZXJhdG9yIG8pIDogVEludGVybU9wZXJhdG9yKG8pLCBhZGRJbmRleENsYW1w
KGZhbHNlKSB7fQotCi0gICAgdmlydHVhbCBUSW50ZXJtQmluYXJ5KiBnZXRBc0JpbmFyeU5vZGUo
KSB7IHJldHVybiB0aGlzOyB9Ci0gICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2
ZXJzZXIqKTsKLSAgICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxkTm9kZSgKLSAgICAgICAgVElu
dGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFjZW1lbnQpOwotCi0gICAgdmly
dHVhbCBib29sIGhhc1NpZGVFZmZlY3RzKCkgY29uc3QgeyByZXR1cm4gKGlzQXNzaWdubWVudCgp
IHx8IGxlZnQtPmhhc1NpZGVFZmZlY3RzKCkgfHwgcmlnaHQtPmhhc1NpZGVFZmZlY3RzKCkpOyB9
Ci0KLSAgICB2b2lkIHNldExlZnQoVEludGVybVR5cGVkKiBuKSB7IGxlZnQgPSBuOyB9Ci0gICAg
dm9pZCBzZXRSaWdodChUSW50ZXJtVHlwZWQqIG4pIHsgcmlnaHQgPSBuOyB9Ci0gICAgVEludGVy
bVR5cGVkKiBnZXRMZWZ0KCkgY29uc3QgeyByZXR1cm4gbGVmdDsgfQotICAgIFRJbnRlcm1UeXBl
ZCogZ2V0UmlnaHQoKSBjb25zdCB7IHJldHVybiByaWdodDsgfQotICAgIGJvb2wgcHJvbW90ZShU
SW5mb1NpbmsmKTsKLQotICAgIHZvaWQgc2V0QWRkSW5kZXhDbGFtcCgpIHsgYWRkSW5kZXhDbGFt
cCA9IHRydWU7IH0KLSAgICBib29sIGdldEFkZEluZGV4Q2xhbXAoKSB7IHJldHVybiBhZGRJbmRl
eENsYW1wOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBUSW50ZXJtVHlwZWQqIGxlZnQ7Ci0gICAgVElu
dGVybVR5cGVkKiByaWdodDsKLQotICAgIC8vIElmIHNldCB0byB0cnVlLCB3cmFwIGFueSBFT3BJ
bmRleEluZGlyZWN0IHdpdGggYSBjbGFtcCB0byBib3VuZHMuCi0gICAgYm9vbCBhZGRJbmRleENs
YW1wOwotfTsKLQotLy8KLS8vIE5vZGVzIGZvciB1bmFyeSBtYXRoIG9wZXJhdG9ycy4KLS8vCi1j
bGFzcyBUSW50ZXJtVW5hcnkgOiBwdWJsaWMgVEludGVybU9wZXJhdG9yIHsKLXB1YmxpYzoKLSAg
ICBUSW50ZXJtVW5hcnkoVE9wZXJhdG9yIG8sIFRUeXBlJiB0KSA6IFRJbnRlcm1PcGVyYXRvcihv
LCB0KSwgb3BlcmFuZCgwKSwgdXNlRW11bGF0ZWRGdW5jdGlvbihmYWxzZSkge30KLSAgICBUSW50
ZXJtVW5hcnkoVE9wZXJhdG9yIG8pIDogVEludGVybU9wZXJhdG9yKG8pLCBvcGVyYW5kKDApLCB1
c2VFbXVsYXRlZEZ1bmN0aW9uKGZhbHNlKSB7fQotCi0gICAgdmlydHVhbCB2b2lkIHRyYXZlcnNl
KFRJbnRlcm1UcmF2ZXJzZXIqKTsKLSAgICB2aXJ0dWFsIFRJbnRlcm1VbmFyeSogZ2V0QXNVbmFy
eU5vZGUoKSB7IHJldHVybiB0aGlzOyB9Ci0gICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGlsZE5v
ZGUoCi0gICAgICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2Vt
ZW50KTsKLQotICAgIHZpcnR1YWwgYm9vbCBoYXNTaWRlRWZmZWN0cygpIGNvbnN0IHsgcmV0dXJu
IChpc0Fzc2lnbm1lbnQoKSB8fCBvcGVyYW5kLT5oYXNTaWRlRWZmZWN0cygpKTsgfQotCi0gICAg
dm9pZCBzZXRPcGVyYW5kKFRJbnRlcm1UeXBlZCogbykgeyBvcGVyYW5kID0gbzsgfQotICAgIFRJ
bnRlcm1UeXBlZCogZ2V0T3BlcmFuZCgpIHsgcmV0dXJuIG9wZXJhbmQ7IH0gICAgCi0gICAgYm9v
bCBwcm9tb3RlKFRJbmZvU2luayYpOwotCi0gICAgdm9pZCBzZXRVc2VFbXVsYXRlZEZ1bmN0aW9u
KCkgeyB1c2VFbXVsYXRlZEZ1bmN0aW9uID0gdHJ1ZTsgfQotICAgIGJvb2wgZ2V0VXNlRW11bGF0
ZWRGdW5jdGlvbigpIHsgcmV0dXJuIHVzZUVtdWxhdGVkRnVuY3Rpb247IH0KLQotcHJvdGVjdGVk
OgotICAgIFRJbnRlcm1UeXBlZCogb3BlcmFuZDsKLQotICAgIC8vIElmIHNldCB0byB0cnVlLCBy
ZXBsYWNlIHRoZSBidWlsdC1pbiBmdW5jdGlvbiBjYWxsIHdpdGggYW4gZW11bGF0ZWQgb25lCi0g
ICAgLy8gdG8gd29yayBhcm91bmQgZHJpdmVyIGJ1Z3MuCi0gICAgYm9vbCB1c2VFbXVsYXRlZEZ1
bmN0aW9uOwotfTsKLQotdHlwZWRlZiBUVmVjdG9yPFRJbnRlcm1Ob2RlKj4gVEludGVybVNlcXVl
bmNlOwotdHlwZWRlZiBUVmVjdG9yPGludD4gVFF1YWxpZmllckxpc3Q7Ci0KLS8vCi0vLyBOb2Rl
cyB0aGF0IG9wZXJhdGUgb24gYW4gYXJiaXRyYXJ5IHNpemVkIHNldCBvZiBjaGlsZHJlbi4KLS8v
Ci1jbGFzcyBUSW50ZXJtQWdncmVnYXRlIDogcHVibGljIFRJbnRlcm1PcGVyYXRvciB7Ci1wdWJs
aWM6Ci0gICAgVEludGVybUFnZ3JlZ2F0ZSgpIDogVEludGVybU9wZXJhdG9yKEVPcE51bGwpLCB1
c2VyRGVmaW5lZChmYWxzZSksIHVzZUVtdWxhdGVkRnVuY3Rpb24oZmFsc2UpIHsgfQotICAgIFRJ
bnRlcm1BZ2dyZWdhdGUoVE9wZXJhdG9yIG8pIDogVEludGVybU9wZXJhdG9yKG8pLCB1c2VFbXVs
YXRlZEZ1bmN0aW9uKGZhbHNlKSB7IH0KLSAgICB+VEludGVybUFnZ3JlZ2F0ZSgpIHsgfQotCi0g
ICAgdmlydHVhbCBUSW50ZXJtQWdncmVnYXRlKiBnZXRBc0FnZ3JlZ2F0ZSgpIHsgcmV0dXJuIHRo
aXM7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOwotICAg
IHZpcnR1YWwgYm9vbCByZXBsYWNlQ2hpbGROb2RlKAotICAgICAgICBUSW50ZXJtTm9kZSAqb3Jp
Z2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCk7Ci0KLSAgICAvLyBDb25zZXJ2YXRpdmVs
eSBhc3N1bWUgZnVuY3Rpb24gY2FsbHMgYW5kIG90aGVyIGFnZ3JlZ2F0ZSBvcGVyYXRvcnMgaGF2
ZSBzaWRlLWVmZmVjdHMKLSAgICB2aXJ0dWFsIGJvb2wgaGFzU2lkZUVmZmVjdHMoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9Ci0KLSAgICBUSW50ZXJtU2VxdWVuY2UmIGdldFNlcXVlbmNlKCkgeyBy
ZXR1cm4gc2VxdWVuY2U7IH0KLQotICAgIHZvaWQgc2V0TmFtZShjb25zdCBUU3RyaW5nJiBuKSB7
IG5hbWUgPSBuOyB9Ci0gICAgY29uc3QgVFN0cmluZyYgZ2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG5hbWU7IH0KLQotICAgIHZvaWQgc2V0VXNlckRlZmluZWQoKSB7IHVzZXJEZWZpbmVkID0gdHJ1
ZTsgfQotICAgIGJvb2wgaXNVc2VyRGVmaW5lZCgpIGNvbnN0IHsgcmV0dXJuIHVzZXJEZWZpbmVk
OyB9Ci0KLSAgICB2b2lkIHNldE9wdGltaXplKGJvb2wgbykgeyBvcHRpbWl6ZSA9IG87IH0KLSAg
ICBib29sIGdldE9wdGltaXplKCkgeyByZXR1cm4gb3B0aW1pemU7IH0KLSAgICB2b2lkIHNldERl
YnVnKGJvb2wgZCkgeyBkZWJ1ZyA9IGQ7IH0KLSAgICBib29sIGdldERlYnVnKCkgeyByZXR1cm4g
ZGVidWc7IH0KLQotICAgIHZvaWQgc2V0VXNlRW11bGF0ZWRGdW5jdGlvbigpIHsgdXNlRW11bGF0
ZWRGdW5jdGlvbiA9IHRydWU7IH0KLSAgICBib29sIGdldFVzZUVtdWxhdGVkRnVuY3Rpb24oKSB7
IHJldHVybiB1c2VFbXVsYXRlZEZ1bmN0aW9uOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBUSW50ZXJt
QWdncmVnYXRlKGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUmKTsgLy8gZGlzYWxsb3cgY29weSBjb25z
dHJ1Y3RvcgotICAgIFRJbnRlcm1BZ2dyZWdhdGUmIG9wZXJhdG9yPShjb25zdCBUSW50ZXJtQWdn
cmVnYXRlJik7IC8vIGRpc2FsbG93IGFzc2lnbm1lbnQgb3BlcmF0b3IKLSAgICBUSW50ZXJtU2Vx
dWVuY2Ugc2VxdWVuY2U7Ci0gICAgVFN0cmluZyBuYW1lOwotICAgIGJvb2wgdXNlckRlZmluZWQ7
IC8vIHVzZWQgZm9yIHVzZXIgZGVmaW5lZCBmdW5jdGlvbiBuYW1lcwotCi0gICAgYm9vbCBvcHRp
bWl6ZTsKLSAgICBib29sIGRlYnVnOwotCi0gICAgLy8gSWYgc2V0IHRvIHRydWUsIHJlcGxhY2Ug
dGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGNhbGwgd2l0aCBhbiBlbXVsYXRlZCBvbmUKLSAgICAvLyB0
byB3b3JrIGFyb3VuZCBkcml2ZXIgYnVncy4KLSAgICBib29sIHVzZUVtdWxhdGVkRnVuY3Rpb247
Ci19OwotCi0vLwotLy8gRm9yIGlmIHRlc3RzLiAgU2ltcGxpZmllZCBzaW5jZSB0aGVyZSBpcyBu
byBzd2l0Y2ggc3RhdGVtZW50LgotLy8KLWNsYXNzIFRJbnRlcm1TZWxlY3Rpb24gOiBwdWJsaWMg
VEludGVybVR5cGVkIHsKLXB1YmxpYzoKLSAgICBUSW50ZXJtU2VsZWN0aW9uKFRJbnRlcm1UeXBl
ZCogY29uZCwgVEludGVybU5vZGUqIHRydWVCLCBUSW50ZXJtTm9kZSogZmFsc2VCKSA6Ci0gICAg
ICAgICAgICBUSW50ZXJtVHlwZWQoVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKSksIGNvbmRp
dGlvbihjb25kKSwgdHJ1ZUJsb2NrKHRydWVCKSwgZmFsc2VCbG9jayhmYWxzZUIpIHt9Ci0gICAg
VEludGVybVNlbGVjdGlvbihUSW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1Ob2RlKiB0cnVlQiwg
VEludGVybU5vZGUqIGZhbHNlQiwgY29uc3QgVFR5cGUmIHR5cGUpIDoKLSAgICAgICAgICAgIFRJ
bnRlcm1UeXBlZCh0eXBlKSwgY29uZGl0aW9uKGNvbmQpLCB0cnVlQmxvY2sodHJ1ZUIpLCBmYWxz
ZUJsb2NrKGZhbHNlQikge30KLQotICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJh
dmVyc2VyKik7Ci0gICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGlsZE5vZGUoCi0gICAgICAgIFRJ
bnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KTsKLQotICAgIC8v
IENvbnNlcnZhdGl2ZWx5IGFzc3VtZSBzZWxlY3Rpb25zIGhhdmUgc2lkZS1lZmZlY3RzCi0gICAg
dmlydHVhbCBib29sIGhhc1NpZGVFZmZlY3RzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0g
ICAgYm9vbCB1c2VzVGVybmFyeU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gZ2V0QmFzaWNUeXBl
KCkgIT0gRWJ0Vm9pZDsgfQotICAgIFRJbnRlcm1Ob2RlKiBnZXRDb25kaXRpb24oKSBjb25zdCB7
IHJldHVybiBjb25kaXRpb247IH0KLSAgICBUSW50ZXJtTm9kZSogZ2V0VHJ1ZUJsb2NrKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZUJsb2NrOyB9Ci0gICAgVEludGVybU5vZGUqIGdldEZhbHNlQmxvY2so
KSBjb25zdCB7IHJldHVybiBmYWxzZUJsb2NrOyB9Ci0gICAgVEludGVybVNlbGVjdGlvbiogZ2V0
QXNTZWxlY3Rpb25Ob2RlKCkgeyByZXR1cm4gdGhpczsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgVElu
dGVybVR5cGVkKiBjb25kaXRpb247Ci0gICAgVEludGVybU5vZGUqIHRydWVCbG9jazsKLSAgICBU
SW50ZXJtTm9kZSogZmFsc2VCbG9jazsKLX07Ci0KLWVudW0gVmlzaXQKLXsKLSAgICBQcmVWaXNp
dCwKLSAgICBJblZpc2l0LAotICAgIFBvc3RWaXNpdAotfTsKLQotLy8KLS8vIEZvciB0cmF2ZXJz
aW5nIHRoZSB0cmVlLiAgVXNlciBzaG91bGQgZGVyaXZlIGZyb20gdGhpcywgCi0vLyBwdXQgdGhl
aXIgdHJhdmVyc2FsIHNwZWNpZmljIGRhdGEgaW4gaXQsIGFuZCB0aGVuIHBhc3MKLS8vIGl0IHRv
IGEgVHJhdmVyc2UgbWV0aG9kLgotLy8KLS8vIFdoZW4gdXNpbmcgdGhpcywganVzdCBmaWxsIGlu
IHRoZSBtZXRob2RzIGZvciBub2RlcyB5b3Ugd2FudCB2aXNpdGVkLgotLy8gUmV0dXJuIGZhbHNl
IGZyb20gYSBwcmUtdmlzaXQgdG8gc2tpcCB2aXNpdGluZyB0aGF0IG5vZGUncyBzdWJ0cmVlLgot
Ly8KLWNsYXNzIFRJbnRlcm1UcmF2ZXJzZXIKLXsKLXB1YmxpYzoKLSAgICBQT09MX0FMTE9DQVRP
Ul9ORVdfREVMRVRFKCk7Ci0gICAgVEludGVybVRyYXZlcnNlcihib29sIHByZVZpc2l0ID0gdHJ1
ZSwgYm9vbCBpblZpc2l0ID0gZmFsc2UsIGJvb2wgcG9zdFZpc2l0ID0gZmFsc2UsIGJvb2wgcmln
aHRUb0xlZnQgPSBmYWxzZSkgOiAKLSAgICAgICAgICAgIHByZVZpc2l0KHByZVZpc2l0KSwKLSAg
ICAgICAgICAgIGluVmlzaXQoaW5WaXNpdCksCi0gICAgICAgICAgICBwb3N0VmlzaXQocG9zdFZp
c2l0KSwKLSAgICAgICAgICAgIHJpZ2h0VG9MZWZ0KHJpZ2h0VG9MZWZ0KSwKLSAgICAgICAgICAg
IGRlcHRoKDApLAotICAgICAgICAgICAgbWF4RGVwdGgoMCkge30KLSAgICB2aXJ0dWFsIH5USW50
ZXJtVHJhdmVyc2VyKCkge30KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJt
U3ltYm9sKikge30KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1D
b25zdGFudFVuaW9uKikge30KLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlz
aXQsIFRJbnRlcm1CaW5hcnkqKSB7cmV0dXJuIHRydWU7fQotICAgIHZpcnR1YWwgYm9vbCB2aXNp
dFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqKSB7cmV0dXJuIHRydWU7fQotICAgIHZp
cnR1YWwgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiop
IHtyZXR1cm4gdHJ1ZTt9Ci0gICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZp
c2l0LCBUSW50ZXJtQWdncmVnYXRlKikge3JldHVybiB0cnVlO30KLSAgICB2aXJ0dWFsIGJvb2wg
dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCopIHtyZXR1cm4gdHJ1ZTt9Ci0gICAg
dmlydHVhbCBib29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKikge3Jl
dHVybiB0cnVlO30KLQotICAgIGludCBnZXRNYXhEZXB0aCgpIGNvbnN0IHtyZXR1cm4gbWF4RGVw
dGg7fQotCi0gICAgdm9pZCBpbmNyZW1lbnREZXB0aChUSW50ZXJtTm9kZSAqY3VycmVudCkKLSAg
ICB7Ci0gICAgICAgIGRlcHRoKys7Ci0gICAgICAgIG1heERlcHRoID0gc3RkOjptYXgobWF4RGVw
dGgsIGRlcHRoKTsKLSAgICAgICAgcGF0aC5wdXNoX2JhY2soY3VycmVudCk7Ci0gICAgfQotCi0g
ICAgdm9pZCBkZWNyZW1lbnREZXB0aCgpCi0gICAgewotICAgICAgICBkZXB0aC0tOwotICAgICAg
ICBwYXRoLnBvcF9iYWNrKCk7Ci0gICAgfQotCi0gICAgVEludGVybU5vZGUgKmdldFBhcmVudE5v
ZGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHBhdGguc2l6ZSgpID09IDAgPyBOVUxMIDogcGF0
aC5iYWNrKCk7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIHRoZSBvcmlnaW5hbCBuYW1lIGlmIGhh
c2ggZnVuY3Rpb24gcG9pbnRlciBpcyBOVUxMOwotICAgIC8vIG90aGVyd2lzZSByZXR1cm4gdGhl
IGhhc2hlZCBuYW1lLgotICAgIHN0YXRpYyBUU3RyaW5nIGhhc2goY29uc3QgVFN0cmluZyYgbmFt
ZSwgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24pOwotCi0gICAgY29uc3QgYm9vbCBwcmVW
aXNpdDsKLSAgICBjb25zdCBib29sIGluVmlzaXQ7Ci0gICAgY29uc3QgYm9vbCBwb3N0VmlzaXQ7
Ci0gICAgY29uc3QgYm9vbCByaWdodFRvTGVmdDsKLQotcHJvdGVjdGVkOgotICAgIGludCBkZXB0
aDsKLSAgICBpbnQgbWF4RGVwdGg7Ci0KLSAgICAvLyBBbGwgdGhlIG5vZGVzIGZyb20gcm9vdCB0
byB0aGUgY3VycmVudCBub2RlJ3MgcGFyZW50IGR1cmluZyB0cmF2ZXJzaW5nLgotICAgIFRWZWN0
b3I8VEludGVybU5vZGUgKj4gcGF0aDsKLX07Ci0KLSNlbmRpZiAvLyBfX0lOVEVSTUVESUFURV9I
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvbG9jYWxp
bnRlcm1lZGlhdGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9sb2Nh
bGludGVybWVkaWF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2JjNDAxNzhh
Y2Y2M2VlNGIzZGMxNTc3ZGUzYzcwYmIzYTNhMzdhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9sb2NhbGludGVybWVkaWF0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBfTE9DQUxfSU5URVJNRURJQVRFX0lOQ0xVREVEXwot
I2RlZmluZSBfTE9DQUxfSU5URVJNRURJQVRFX0lOQ0xVREVEXwotCi0jaW5jbHVkZSAiR0xTTEFO
Ry9TaGFkZXJMYW5nLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCi0jaW5j
bHVkZSAiY29tcGlsZXIvU3ltYm9sVGFibGUuaCIKLQotc3RydWN0IFRWZWN0b3JGaWVsZHMgewot
ICAgIGludCBvZmZzZXRzWzRdOwotICAgIGludCBudW07Ci19OwotCi0vLwotLy8gU2V0IG9mIGhl
bHBlciBmdW5jdGlvbnMgdG8gaGVscCBwYXJzZSBhbmQgYnVpbGQgdGhlIHRyZWUuCi0vLwotY2xh
c3MgVEluZm9TaW5rOwotY2xhc3MgVEludGVybWVkaWF0ZSB7Ci1wdWJsaWM6ICAgIAotICAgIFBP
T0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKLSAgICBUSW50ZXJtZWRpYXRlKFRJbmZvU2luayYg
aSkgOiBpbmZvU2luayhpKSB7IH0KLQotICAgIFRJbnRlcm1TeW1ib2wqIGFkZFN5bWJvbChpbnQg
SWQsIGNvbnN0IFRTdHJpbmcmLCBjb25zdCBUVHlwZSYsIGNvbnN0IFRTb3VyY2VMb2MmKTsKLSAg
ICBUSW50ZXJtVHlwZWQqIGFkZENvbnZlcnNpb24oVE9wZXJhdG9yLCBjb25zdCBUVHlwZSYsIFRJ
bnRlcm1UeXBlZCopOwotICAgIFRJbnRlcm1UeXBlZCogYWRkQmluYXJ5TWF0aChUT3BlcmF0b3Ig
b3AsIFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdodCwgY29uc3QgVFNvdXJj
ZUxvYyYsIFRTeW1ib2xUYWJsZSYpOwotICAgIFRJbnRlcm1UeXBlZCogYWRkQXNzaWduKFRPcGVy
YXRvciBvcCwgVEludGVybVR5cGVkKiBsZWZ0LCBUSW50ZXJtVHlwZWQqIHJpZ2h0LCBjb25zdCBU
U291cmNlTG9jJik7Ci0gICAgVEludGVybVR5cGVkKiBhZGRJbmRleChUT3BlcmF0b3Igb3AsIFRJ
bnRlcm1UeXBlZCogYmFzZSwgVEludGVybVR5cGVkKiBpbmRleCwgY29uc3QgVFNvdXJjZUxvYyYp
OwotICAgIFRJbnRlcm1UeXBlZCogYWRkVW5hcnlNYXRoKFRPcGVyYXRvciBvcCwgVEludGVybU5v
ZGUqIGNoaWxkLCBjb25zdCBUU291cmNlTG9jJiwgVFN5bWJvbFRhYmxlJik7Ci0gICAgVEludGVy
bUFnZ3JlZ2F0ZSogZ3Jvd0FnZ3JlZ2F0ZShUSW50ZXJtTm9kZSogbGVmdCwgVEludGVybU5vZGUq
IHJpZ2h0LCBjb25zdCBUU291cmNlTG9jJik7Ci0gICAgVEludGVybUFnZ3JlZ2F0ZSogbWFrZUFn
Z3JlZ2F0ZShUSW50ZXJtTm9kZSogbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYpOwotICAgIFRJbnRl
cm1BZ2dyZWdhdGUqIHNldEFnZ3JlZ2F0ZU9wZXJhdG9yKFRJbnRlcm1Ob2RlKiwgVE9wZXJhdG9y
LCBjb25zdCBUU291cmNlTG9jJik7Ci0gICAgVEludGVybU5vZGUqICBhZGRTZWxlY3Rpb24oVElu
dGVybVR5cGVkKiBjb25kLCBUSW50ZXJtTm9kZVBhaXIgY29kZSwgY29uc3QgVFNvdXJjZUxvYyYp
OwotICAgIFRJbnRlcm1UeXBlZCogYWRkU2VsZWN0aW9uKFRJbnRlcm1UeXBlZCogY29uZCwgVElu
dGVybVR5cGVkKiB0cnVlQmxvY2ssIFRJbnRlcm1UeXBlZCogZmFsc2VCbG9jaywgY29uc3QgVFNv
dXJjZUxvYyYpOwotICAgIFRJbnRlcm1UeXBlZCogYWRkQ29tbWEoVEludGVybVR5cGVkKiBsZWZ0
LCBUSW50ZXJtVHlwZWQqIHJpZ2h0LCBjb25zdCBUU291cmNlTG9jJik7Ci0gICAgVEludGVybUNv
bnN0YW50VW5pb24qIGFkZENvbnN0YW50VW5pb24oQ29uc3RhbnRVbmlvbiosIGNvbnN0IFRUeXBl
JiwgY29uc3QgVFNvdXJjZUxvYyYpOwotICAgIFRJbnRlcm1UeXBlZCogcHJvbW90ZUNvbnN0YW50
VW5pb24oVEJhc2ljVHlwZSwgVEludGVybUNvbnN0YW50VW5pb24qKSA7Ci0gICAgYm9vbCBwYXJz
ZUNvbnN0VHJlZShjb25zdCBUU291cmNlTG9jJiwgVEludGVybU5vZGUqLCBDb25zdGFudFVuaW9u
KiwgVE9wZXJhdG9yLCBUU3ltYm9sVGFibGUmLCBUVHlwZSwgYm9vbCBzaW5nbGVDb25zdGFudFBh
cmFtID0gZmFsc2UpOyAgICAgICAgCi0gICAgVEludGVybU5vZGUqIGFkZExvb3AoVExvb3BUeXBl
LCBUSW50ZXJtTm9kZSosIFRJbnRlcm1UeXBlZCosIFRJbnRlcm1UeXBlZCosIFRJbnRlcm1Ob2Rl
KiwgY29uc3QgVFNvdXJjZUxvYyYpOwotICAgIFRJbnRlcm1CcmFuY2gqIGFkZEJyYW5jaChUT3Bl
cmF0b3IsIGNvbnN0IFRTb3VyY2VMb2MmKTsKLSAgICBUSW50ZXJtQnJhbmNoKiBhZGRCcmFuY2go
VE9wZXJhdG9yLCBUSW50ZXJtVHlwZWQqLCBjb25zdCBUU291cmNlTG9jJik7Ci0gICAgVEludGVy
bVR5cGVkKiBhZGRTd2l6emxlKFRWZWN0b3JGaWVsZHMmLCBjb25zdCBUU291cmNlTG9jJik7Ci0g
ICAgYm9vbCBwb3N0UHJvY2VzcyhUSW50ZXJtTm9kZSopOwotICAgIHZvaWQgcmVtb3ZlKFRJbnRl
cm1Ob2RlKik7Ci0gICAgdm9pZCBvdXRwdXRUcmVlKFRJbnRlcm1Ob2RlKik7Ci0KLXByaXZhdGU6
Ci0gICAgdm9pZCBvcGVyYXRvcj0oVEludGVybWVkaWF0ZSYpOyAvLyBwcmV2ZW50IGFzc2lnbm1l
bnRzCi0KLSAgICBUSW5mb1NpbmsmIGluZm9TaW5rOwotfTsKLQotI2VuZGlmIC8vIF9MT0NBTF9J
TlRFUk1FRElBVEVfSU5DTFVERURfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvb3NpbmNsdWRlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvb3NpbmNsdWRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4YmIx
YTc5N2M0ZDhkOTJmZDYzNTQyYTllMTk1ZGU1MGRmMDY4OGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL29zaW5jbHVkZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLQotI2lmbmRlZiBfX09TSU5DTFVERV9ICi0jZGVmaW5lIF9fT1NJTkNMVURF
X0gKLQotLy8KLS8vIFRoaXMgZmlsZSBjb250YWlucyBjb250YWlucyBvcy1zcGVjaWZpYyBkYXRh
dHlwZXMgYW5kCi0vLyBkZWNsYXJlcyBhbnkgb3Mtc3BlY2lmaWMgZnVuY3Rpb25zLgotLy8KLQot
I2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9XSU42NCkKLSNkZWZpbmUgQU5HTEVfT1Nf
V0lOCi0jZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX2xpbnV4X18pIHx8IFwK
LSAgICAgIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19PcGVuQlNEX18pIHx8IFwK
LSAgICAgIGRlZmluZWQoX19zdW4pIHx8IGRlZmluZWQoQU5EUk9JRCkgfHwgXAotICAgICAgZGVm
aW5lZChfX0dMSUJDX18pIHx8IGRlZmluZWQoX19HTlVfXykgfHwgXAotICAgICAgZGVmaW5lZChf
X1FOWF9fKQotI2RlZmluZSBBTkdMRV9PU19QT1NJWAotI2Vsc2UKLSNlcnJvciBVbnN1cHBvcnRl
ZCBwbGF0Zm9ybS4KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChBTkdMRV9PU19XSU4pCi0jZGVmaW5l
IFNUUklDVAotI2RlZmluZSBWQ19FWFRSQUxFQU4gMQotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNl
bGlmIGRlZmluZWQoQU5HTEVfT1NfUE9TSVgpCi0jaW5jbHVkZSA8cHRocmVhZC5oPgotI2luY2x1
ZGUgPHNlbWFwaG9yZS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jZW5kaWYgIC8vIEFOR0xFX09T
X1dJTgotCi0KLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgotCi0vLwotLy8gVGhyZWFkIExv
Y2FsIFN0b3JhZ2UgT3BlcmF0aW9ucwotLy8KLSNpZiBkZWZpbmVkKEFOR0xFX09TX1dJTikKLXR5
cGVkZWYgRFdPUkQgT1NfVExTSW5kZXg7Ci0jZGVmaW5lIE9TX0lOVkFMSURfVExTX0lOREVYIChU
TFNfT1VUX09GX0lOREVYRVMpCi0jZWxpZiBkZWZpbmVkKEFOR0xFX09TX1BPU0lYKQotdHlwZWRl
ZiBwdGhyZWFkX2tleV90IE9TX1RMU0luZGV4OwotI2RlZmluZSBPU19JTlZBTElEX1RMU19JTkRF
WCAoc3RhdGljX2Nhc3Q8T1NfVExTSW5kZXg+KC0xKSkKLSNlbmRpZiAgLy8gQU5HTEVfT1NfV0lO
Ci0KLU9TX1RMU0luZGV4IE9TX0FsbG9jVExTSW5kZXgoKTsKLWJvb2wgT1NfU2V0VExTVmFsdWUo
T1NfVExTSW5kZXggbkluZGV4LCB2b2lkICpscHZWYWx1ZSk7Ci1ib29sIE9TX0ZyZWVUTFNJbmRl
eChPU19UTFNJbmRleCBuSW5kZXgpOwotCi1pbmxpbmUgdm9pZCogT1NfR2V0VExTVmFsdWUoT1Nf
VExTSW5kZXggbkluZGV4KQotewotICAgIEFTU0VSVChuSW5kZXggIT0gT1NfSU5WQUxJRF9UTFNf
SU5ERVgpOwotI2lmIGRlZmluZWQoQU5HTEVfT1NfV0lOKQotICAgIHJldHVybiBUbHNHZXRWYWx1
ZShuSW5kZXgpOwotI2VsaWYgZGVmaW5lZChBTkdMRV9PU19QT1NJWCkKLSAgICByZXR1cm4gcHRo
cmVhZF9nZXRzcGVjaWZpYyhuSW5kZXgpOwotI2VuZGlmICAvLyBBTkdMRV9PU19XSU4KLX0KLQot
I2VuZGlmIC8vIF9fT1NJTkNMVURFX0gKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9vc3NvdXJjZV9wb3NpeC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvb3Nzb3VyY2VfcG9zaXguY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAxZTFlNjk5YWViYzNhMjdiYTNkYTE3ZWU4MTMxNWRjNjYyYjk5OGU5Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9vc3NvdXJjZV9wb3NpeC5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw2NCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLwotLy8gVGhpcyBmaWxlIGNv
bnRhaW5zIHRoZSBwb3NpeCBzcGVjaWZpYyBmdW5jdGlvbnMKLS8vCi0jaW5jbHVkZSAiY29tcGls
ZXIvb3NpbmNsdWRlLmgiCi0KLSNpZiAhZGVmaW5lZChBTkdMRV9PU19QT1NJWCkKLSNlcnJvciBU
cnlpbmcgdG8gYnVpbGQgYSBwb3NpeCBzcGVjaWZpYyBmaWxlIGluIGEgbm9uLXBvc2l4IGJ1aWxk
LgotI2VuZGlmCi0KLS8vCi0vLyBUaHJlYWQgTG9jYWwgU3RvcmFnZSBPcGVyYXRpb25zCi0vLwot
T1NfVExTSW5kZXggT1NfQWxsb2NUTFNJbmRleCgpCi17Ci0gICAgcHRocmVhZF9rZXlfdCBwUG9v
bEluZGV4OwotCi0gICAgLy8KLSAgICAvLyBDcmVhdGUgZ2xvYmFsIHBvb2wga2V5LgotICAgIC8v
Ci0gICAgaWYgKChwdGhyZWFkX2tleV9jcmVhdGUoJnBQb29sSW5kZXgsIE5VTEwpKSAhPSAwKSB7
Ci0gICAgICAgIGFzc2VydCgwICYmICJPU19BbGxvY1RMU0luZGV4KCk6IFVuYWJsZSB0byBhbGxv
Y2F0ZSBUaHJlYWQgTG9jYWwgU3RvcmFnZSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIGVsc2UgewotICAgICAgICByZXR1cm4gcFBvb2xJbmRleDsKLSAgICB9Ci19Ci0KLQot
Ym9vbCBPU19TZXRUTFNWYWx1ZShPU19UTFNJbmRleCBuSW5kZXgsIHZvaWQgKmxwdlZhbHVlKQot
ewotICAgIGlmIChuSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKLSAgICAgICAgYXNz
ZXJ0KDAgJiYgIk9TX1NldFRMU1ZhbHVlKCk6IEludmFsaWQgVExTIEluZGV4Iik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAocHRocmVhZF9zZXRzcGVjaWZpYyhuSW5k
ZXgsIGxwdlZhbHVlKSA9PSAwKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBlbHNlCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotCi1ib29sIE9TX0ZyZWVUTFNJbmRleChPU19UTFNJbmRl
eCBuSW5kZXgpCi17Ci0gICAgaWYgKG5JbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgewot
ICAgICAgICBhc3NlcnQoMCAmJiAiT1NfU2V0VExTVmFsdWUoKTogSW52YWxpZCBUTFMgSW5kZXgi
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vCi0gICAgLy8gRGVsZXRl
IHRoZSBnbG9iYWwgcG9vbCBrZXkuCi0gICAgLy8KLSAgICBpZiAocHRocmVhZF9rZXlfZGVsZXRl
KG5JbmRleCkgPT0gMCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZWxzZQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvb3Nzb3VyY2Vfd2luLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9vc3NvdXJjZV93aW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4
OTkyMmZlZjNmNDExZWRiYjgzYjUyMjQxMmI2Y2Y3MjhjM2Y5ZjM5Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9vc3NvdXJjZV93aW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBA
QAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL29zaW5jbHVkZS5oIgot
Ly8KLS8vIFRoaXMgZmlsZSBjb250YWlucyBjb250YWlucyB0aGUgd2luZG93J3Mgc3BlY2lmaWMg
ZnVuY3Rpb25zCi0vLwotCi0jaWYgIWRlZmluZWQoQU5HTEVfT1NfV0lOKQotI2Vycm9yIFRyeWlu
ZyB0byBidWlsZCBhIHdpbmRvd3Mgc3BlY2lmaWMgZmlsZSBpbiBhIG5vbiB3aW5kb3dzIGJ1aWxk
LgotI2VuZGlmCi0KLQotLy8KLS8vIFRocmVhZCBMb2NhbCBTdG9yYWdlIE9wZXJhdGlvbnMKLS8v
Ci1PU19UTFNJbmRleCBPU19BbGxvY1RMU0luZGV4KCkKLXsKLQlEV09SRCBkd0luZGV4ID0gVGxz
QWxsb2MoKTsKLQlpZiAoZHdJbmRleCA9PSBUTFNfT1VUX09GX0lOREVYRVMpIHsKLQkJYXNzZXJ0
KDAgJiYgIk9TX0FsbG9jVExTSW5kZXgoKTogVW5hYmxlIHRvIGFsbG9jYXRlIFRocmVhZCBMb2Nh
bCBTdG9yYWdlIik7Ci0JCXJldHVybiBPU19JTlZBTElEX1RMU19JTkRFWDsKLQl9Ci0KLQlyZXR1
cm4gZHdJbmRleDsKLX0KLQotCi1ib29sIE9TX1NldFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRl
eCwgdm9pZCAqbHB2VmFsdWUpCi17Ci0JaWYgKG5JbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRF
WCkgewotCQlhc3NlcnQoMCAmJiAiT1NfU2V0VExTVmFsdWUoKTogSW52YWxpZCBUTFMgSW5kZXgi
KTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWlmIChUbHNTZXRWYWx1ZShuSW5kZXgsIGxwdlZh
bHVlKSkKLQkJcmV0dXJuIHRydWU7Ci0JZWxzZQotCQlyZXR1cm4gZmFsc2U7Ci19Ci0KLQotYm9v
bCBPU19GcmVlVExTSW5kZXgoT1NfVExTSW5kZXggbkluZGV4KQotewotCWlmIChuSW5kZXggPT0g
T1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKLQkJYXNzZXJ0KDAgJiYgIk9TX1NldFRMU1ZhbHVlKCk6
IEludmFsaWQgVExTIEluZGV4Iik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoVGxzRnJl
ZShuSW5kZXgpKQotCQlyZXR1cm4gdHJ1ZTsKLQllbHNlCi0JCXJldHVybiBmYWxzZTsKLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wYXJzZUNvbnN0
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wYXJzZUNvbnN0LmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVlZDExNWNiY2IzMzg3OTg3ZDMxMzlh
ZjhjZTNmMmUwMjA3NTQyMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcGFyc2VDb25zdC5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNDUgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
I2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlQ29udGV4dC5oIgotCi0vLwotLy8gVXNlIHRoaXMgY2xh
c3MgdG8gY2FycnkgYWxvbmcgZGF0YSBmcm9tIG5vZGUgdG8gbm9kZSBpbiAKLS8vIHRoZSB0cmF2
ZXJzYWwKLS8vCi1jbGFzcyBUQ29uc3RUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNl
ciB7Ci1wdWJsaWM6Ci0gICAgVENvbnN0VHJhdmVyc2VyKENvbnN0YW50VW5pb24qIGNVbmlvbiwg
Ym9vbCBzaW5nbGVDb25zdFBhcmFtLCBUT3BlcmF0b3IgY29uc3RydWN0VHlwZSwgVEluZm9TaW5r
JiBzaW5rLCBUU3ltYm9sVGFibGUmIHN5bVRhYmxlLCBUVHlwZSYgdCkKLSAgICAgICAgOiBlcnJv
cihmYWxzZSksCi0gICAgICAgICAgaW5kZXgoMCksCi0gICAgICAgICAgdW5pb25BcnJheShjVW5p
b24pLAotICAgICAgICAgIHR5cGUodCksCi0gICAgICAgICAgY29uc3RydWN0b3JUeXBlKGNvbnN0
cnVjdFR5cGUpLAotICAgICAgICAgIHNpbmdsZUNvbnN0YW50UGFyYW0oc2luZ2xlQ29uc3RQYXJh
bSksCi0gICAgICAgICAgaW5mb1Npbmsoc2luayksCi0gICAgICAgICAgc3ltYm9sVGFibGUoc3lt
VGFibGUpLAotICAgICAgICAgIHNpemUoMCksCi0gICAgICAgICAgaXNNYXRyaXgoZmFsc2UpLAot
ICAgICAgICAgIG1hdHJpeFNpemUoMCkgewotICAgIH0KLQotICAgIGJvb2wgZXJyb3I7Ci0KLXBy
b3RlY3RlZDoKLSAgICB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKLSAgICB2b2lk
IHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiopOwotICAgIGJvb2wgdmlz
aXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKLSAgICBib29sIHZpc2l0VW5h
cnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSopOwotICAgIGJvb2wgdmlzaXRTZWxlY3Rpb24o
VmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKLSAgICBib29sIHZpc2l0QWdncmVnYXRl
KFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7Ci0gICAgYm9vbCB2aXNpdExvb3AoVmlz
aXQgdmlzaXQsIFRJbnRlcm1Mb29wKik7Ci0gICAgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNp
dCwgVEludGVybUJyYW5jaCopOwotCi0gICAgc2l6ZV90IGluZGV4OwotICAgIENvbnN0YW50VW5p
b24gKnVuaW9uQXJyYXk7Ci0gICAgVFR5cGUgdHlwZTsKLSAgICBUT3BlcmF0b3IgY29uc3RydWN0
b3JUeXBlOwotICAgIGJvb2wgc2luZ2xlQ29uc3RhbnRQYXJhbTsKLSAgICBUSW5mb1NpbmsmIGlu
Zm9TaW5rOwotICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGU7Ci0gICAgc2l6ZV90IHNpemU7
IC8vIHNpemUgb2YgdGhlIGNvbnN0cnVjdG9yICggNCBmb3IgdmVjNCkKLSAgICBib29sIGlzTWF0
cml4OwotICAgIHNpemVfdCBtYXRyaXhTaXplOyAvLyBkaW1lbnNpb24gb2YgdGhlIG1hdHJpeCAo
bm9taW5hbCBzaXplIGFuZCBub3QgdGhlIGluc3RhbmNlIHNpemUpCi19OwotCi0vLwotLy8gVGhl
IHJlc3Qgb2YgdGhlIGZpbGUgYXJlIHRoZSB0cmF2ZXJzYWwgZnVuY3Rpb25zLiAgVGhlIGxhc3Qg
b25lCi0vLyBpcyB0aGUgb25lIHRoYXQgc3RhcnRzIHRoZSB0cmF2ZXJzYWwuCi0vLwotLy8gUmV0
dXJuIHRydWUgZnJvbSBpbnRlcmlvciBub2RlcyB0byBoYXZlIHRoZSBleHRlcm5hbCB0cmF2ZXJz
YWwKLS8vIGNvbnRpbnVlIG9uIHRvIGNoaWxkcmVuLiAgSWYgeW91IHByb2Nlc3MgY2hpbGRyZW4g
eW91cnNlbGYsCi0vLyByZXR1cm4gZmFsc2UuCi0vLwotCi12b2lkIFRDb25zdFRyYXZlcnNlcjo6
dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKLXsKLSAgICBpbmZvU2luay5pbmZvLm1l
c3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIlN5bWJvbCBOb2Rl
IGZvdW5kIGluIGNvbnN0YW50IGNvbnN0cnVjdG9yIik7Ci0gICAgcmV0dXJuOwotCi19Ci0KLWJv
b2wgVENvbnN0VHJhdmVyc2VyOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFy
eSogbm9kZSkKLXsKLSAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IG5vZGUtPmdldFR5cGUoKS5n
ZXRRdWFsaWZpZXIoKTsKLSAgICAKLSAgICBpZiAocXVhbGlmaWVyICE9IEV2cUNvbnN0KSB7Ci0g
ICAgICAgIFRTdHJpbmcgYnVmOwotICAgICAgICBidWYuYXBwZW5kKCInY29uc3RydWN0b3InIDog
YXNzaWduaW5nIG5vbi1jb25zdGFudCB0byAiKTsKLSAgICAgICAgYnVmLmFwcGVuZCh0eXBlLmdl
dENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZp
eEVycm9yLCBub2RlLT5nZXRMaW5lKCksIGJ1Zi5jX3N0cigpKTsKLSAgICAgICAgZXJyb3IgPSB0
cnVlOwotICAgICAgICByZXR1cm4gZmFsc2U7ICAKLSAgICB9Ci0KLSAgIGluZm9TaW5rLmluZm8u
bWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQmluYXJ5IE5v
ZGUgZm91bmQgaW4gY29uc3RhbnQgY29uc3RydWN0b3IiKTsKLSAgICAKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgVENvbnN0VHJhdmVyc2VyOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBU
SW50ZXJtVW5hcnkqIG5vZGUpCi17Ci0gICAgVFN0cmluZyBidWY7Ci0gICAgYnVmLmFwcGVuZCgi
J2NvbnN0cnVjdG9yJyA6IGFzc2lnbmluZyBub24tY29uc3RhbnQgdG8gIik7Ci0gICAgYnVmLmFw
cGVuZCh0eXBlLmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgIGluZm9TaW5rLmluZm8ubWVzc2Fn
ZShFUHJlZml4RXJyb3IsIG5vZGUtPmdldExpbmUoKSwgYnVmLmNfc3RyKCkpOwotICAgIGVycm9y
ID0gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7ICAKLX0KLQotYm9vbCBUQ29uc3RUcmF2ZXJzZXI6
OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQotewot
ICAgIGlmICghbm9kZS0+aXNDb25zdHJ1Y3RvcigpICYmIG5vZGUtPmdldE9wKCkgIT0gRU9wQ29t
bWEpIHsKLSAgICAgICAgVFN0cmluZyBidWY7Ci0gICAgICAgIGJ1Zi5hcHBlbmQoIidjb25zdHJ1
Y3RvcicgOiBhc3NpZ25pbmcgbm9uLWNvbnN0YW50IHRvICIpOwotICAgICAgICBidWYuYXBwZW5k
KHR5cGUuZ2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2Fn
ZShFUHJlZml4RXJyb3IsIG5vZGUtPmdldExpbmUoKSwgYnVmLmNfc3RyKCkpOwotICAgICAgICBl
cnJvciA9IHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsgIAotICAgIH0KLQotICAgIGlmIChu
b2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAwKSB7Ci0gICAgICAgIGVycm9yID0gdHJ1ZTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wgZmxhZyA9IG5vZGUtPmdl
dFNlcXVlbmNlKCkuc2l6ZSgpID09IDEgJiYgbm9kZS0+Z2V0U2VxdWVuY2UoKVswXS0+Z2V0QXNU
eXBlZCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLSAgICBpZiAoZmxhZykgCi0gICAgewotICAg
ICAgICBzaW5nbGVDb25zdGFudFBhcmFtID0gdHJ1ZTsgCi0gICAgICAgIGNvbnN0cnVjdG9yVHlw
ZSA9IG5vZGUtPmdldE9wKCk7Ci0gICAgICAgIHNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0T2Jq
ZWN0U2l6ZSgpOwotCi0gICAgICAgIGlmIChub2RlLT5nZXRUeXBlKCkuaXNNYXRyaXgoKSkgewot
ICAgICAgICAgICAgaXNNYXRyaXggPSB0cnVlOwotICAgICAgICAgICAgbWF0cml4U2l6ZSA9IG5v
ZGUtPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpOwotICAgICAgICB9Ci0gICAgfSAgICAgICAK
LQotICAgIGZvciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBwID0gbm9kZS0+Z2V0U2VxdWVu
Y2UoKS5iZWdpbigpOyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCAhPSBu
b2RlLT5nZXRTZXF1ZW5jZSgpLmVuZCgpOyBwKyspIHsKLQotICAgICAgICBpZiAobm9kZS0+Z2V0
T3AoKSA9PSBFT3BDb21tYSkKLSAgICAgICAgICAgIGluZGV4ID0gMDsgICAgICAgICAgIAotCi0g
ICAgICAgICgqcCktPnRyYXZlcnNlKHRoaXMpOwotICAgIH0gICAKLSAgICBpZiAoZmxhZykgCi0g
ICAgewotICAgICAgICBzaW5nbGVDb25zdGFudFBhcmFtID0gZmFsc2U7ICAgCi0gICAgICAgIGNv
bnN0cnVjdG9yVHlwZSA9IEVPcE51bGw7Ci0gICAgICAgIHNpemUgPSAwOwotICAgICAgICBpc01h
dHJpeCA9IGZhbHNlOwotICAgICAgICBtYXRyaXhTaXplID0gMDsKLSAgICB9Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRTZWxlY3Rpb24oVmlzaXQg
dmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUpCi17Ci0gICAgaW5mb1NpbmsuaW5mby5tZXNz
YWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRMaW5lKCksICJTZWxlY3Rpb24gTm9k
ZSBmb3VuZCBpbiBjb25zdGFudCBjb25zdHJ1Y3RvciIpOwotICAgIGVycm9yID0gdHJ1ZTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgVENvbnN0VHJhdmVyc2VyOjp2aXNpdENvbnN0YW50
VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qIG5vZGUpCi17Ci0gICAgaWYgKCFub2RlLT5nZXRV
bmlvbkFycmF5UG9pbnRlcigpKQotICAgIHsKLSAgICAgICAgLy8gVGhlIGNvbnN0YW50IHdhcyBu
b3QgaW5pdGlhbGl6ZWQsIHRoaXMgc2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIGxvZ2dlZAotICAg
ICAgICBhc3NlcnQoaW5mb1NpbmsuaW5mby5zaXplKCkgIT0gMCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBDb25zdGFudFVuaW9uKiBsZWZ0VW5pb25BcnJheSA9IHVuaW9uQXJyYXk7
Ci0gICAgc2l6ZV90IGluc3RhbmNlU2l6ZSA9IHR5cGUuZ2V0T2JqZWN0U2l6ZSgpOwotCi0gICAg
aWYgKGluZGV4ID49IGluc3RhbmNlU2l6ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFz
aW5nbGVDb25zdGFudFBhcmFtKSB7Ci0gICAgICAgIHNpemVfdCBzaXplID0gbm9kZS0+Z2V0VHlw
ZSgpLmdldE9iamVjdFNpemUoKTsKLSAgICAKLSAgICAgICAgQ29uc3RhbnRVbmlvbiAqcmlnaHRV
bmlvbkFycmF5ID0gbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChpbmRleCA+PSBp
bnN0YW5jZVNpemUpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgbGVmdFVu
aW9uQXJyYXlbaW5kZXhdID0gcmlnaHRVbmlvbkFycmF5W2ldOwotCi0gICAgICAgICAgICAoaW5k
ZXgpKys7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBzaXplX3QgdG90YWxTaXpl
ID0gaW5kZXggKyBzaXplOwotICAgICAgICBDb25zdGFudFVuaW9uICpyaWdodFVuaW9uQXJyYXkg
PSBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOwotICAgICAgICBpZiAoIWlzTWF0cml4KSB7
Ci0gICAgICAgICAgICBzaXplX3QgY291bnQgPSAwOwotICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IGluZGV4OyBpIDwgdG90YWxTaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoaSA+
PSBpbnN0YW5jZVNpemUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAg
ICAgICAgIGxlZnRVbmlvbkFycmF5W2ldID0gcmlnaHRVbmlvbkFycmF5W2NvdW50XTsKLQotICAg
ICAgICAgICAgICAgIChpbmRleCkrKzsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKSA+IDEpCi0gICAgICAgICAgICAg
ICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7ICAvLyBmb3Ig
bWF0cml4IGNvbnN0cnVjdG9ycwotICAgICAgICAgICAgc2l6ZV90IGNvdW50ID0gMDsKLSAgICAg
ICAgICAgIHNpemVfdCBlbGVtZW50ID0gaW5kZXg7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gaW5kZXg7IGkgPCB0b3RhbFNpemU7IGkrKykgewotICAgICAgICAgICAgICAgIGlmIChpID49
IGluc3RhbmNlU2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICAgIGlmIChlbGVtZW50IC0gaSA9PSAwIHx8IChpIC0gZWxlbWVudCkgJSAobWF0cml4U2l6ZSAr
IDEpID09IDAgKQotICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXSA9IHJpZ2h0
VW5pb25BcnJheVtjb3VudF07Ci0gICAgICAgICAgICAgICAgZWxzZSAKLSAgICAgICAgICAgICAg
ICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0RkNvbnN0KDAuMGYpOwotCi0gICAgICAgICAgICAg
ICAgKGluZGV4KSsrOwotCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFR5cGUoKS5nZXRP
YmplY3RTaXplKCkgPiAxKQotICAgICAgICAgICAgICAgICAgICBjb3VudCsrOyAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9vbCBUQ29uc3RU
cmF2ZXJzZXI6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqIG5vZGUpCi17Ci0g
ICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRM
aW5lKCksICJMb29wIE5vZGUgZm91bmQgaW4gY29uc3RhbnQgY29uc3RydWN0b3IiKTsKLSAgICBl
cnJvciA9IHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFRDb25zdFRyYXZlcnNl
cjo6dmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqIG5vZGUpCi17Ci0gICAg
aW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRMaW5l
KCksICJCcmFuY2ggTm9kZSBmb3VuZCBpbiBjb25zdGFudCBjb25zdHJ1Y3RvciIpOwotICAgIGVy
cm9yID0gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vCi0vLyBUaGlzIGZ1bmN0aW9u
IGlzIHRoZSBvbmUgdG8gY2FsbCBleHRlcm5hbGx5IHRvIHN0YXJ0IHRoZSB0cmF2ZXJzYWwuCi0v
LyBJbmRpdmlkdWFsIGZ1bmN0aW9ucyBjYW4gYmUgaW5pdGlhbGl6ZWQgdG8gMCB0byBza2lwIHBy
b2Nlc3Npbmcgb2YgdGhhdAotLy8gdHlwZSBvZiBub2RlLiAgSXQncyBjaGlsZHJlbiB3aWxsIHN0
aWxsIGJlIHByb2Nlc3NlZC4KLS8vCi1ib29sIFRJbnRlcm1lZGlhdGU6OnBhcnNlQ29uc3RUcmVl
KGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRJbnRlcm1Ob2RlKiByb290LCBDb25zdGFudFVuaW9u
KiB1bmlvbkFycmF5LCBUT3BlcmF0b3IgY29uc3RydWN0b3JUeXBlLCBUU3ltYm9sVGFibGUmIHN5
bWJvbFRhYmxlLCBUVHlwZSB0LCBib29sIHNpbmdsZUNvbnN0YW50UGFyYW0pCi17Ci0gICAgaWYg
KHJvb3QgPT0gMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVENvbnN0VHJhdmVyc2Vy
IGl0KHVuaW9uQXJyYXksIHNpbmdsZUNvbnN0YW50UGFyYW0sIGNvbnN0cnVjdG9yVHlwZSwgaW5m
b1NpbmssIHN5bWJvbFRhYmxlLCB0KTsKLQotICAgIHJvb3QtPnRyYXZlcnNlKCZpdCk7Ci0gICAg
aWYgKGl0LmVycm9yKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBlbHNlCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NCYXNlLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NCYXNlLmNwcApp
bmRleCAzZTIyZTFmMWM1NzlkZmNjMWNhNjViZjI0ODQwMWI0ZGVlNjk5NDA4Li5hN2NlODYyYmNi
NDViZDU5OTI3ZTEwMWQ4MWZhZDRjYWUwNTk2ZWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpYWdub3N0aWNzQmFzZS5jcHAK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9E
aWFnbm9zdGljc0Jhc2UuY3BwCkBAIC0yNSwxNCArMjUsMTQgQEAgdm9pZCBEaWFnbm9zdGljczo6
cmVwb3J0KElEIGlkLAogCiBEaWFnbm9zdGljczo6U2V2ZXJpdHkgRGlhZ25vc3RpY3M6OnNldmVy
aXR5KElEIGlkKQogewotICAgIGlmICgoaWQgPiBFUlJPUl9CRUdJTikgJiYgKGlkIDwgRVJST1Jf
RU5EKSkKLSAgICAgICAgcmV0dXJuIEVSUk9SOworICAgIGlmICgoaWQgPiBQUF9FUlJPUl9CRUdJ
TikgJiYgKGlkIDwgUFBfRVJST1JfRU5EKSkKKyAgICAgICAgcmV0dXJuIFBQX0VSUk9SOwogCi0g
ICAgaWYgKChpZCA+IFdBUk5JTkdfQkVHSU4pICYmIChpZCA8IFdBUk5JTkdfRU5EKSkKLSAgICAg
ICAgcmV0dXJuIFdBUk5JTkc7CisgICAgaWYgKChpZCA+IFBQX1dBUk5JTkdfQkVHSU4pICYmIChp
ZCA8IFBQX1dBUk5JTkdfRU5EKSkKKyAgICAgICAgcmV0dXJuIFBQX1dBUk5JTkc7CiAKICAgICBh
c3NlcnQoZmFsc2UpOwotICAgIHJldHVybiBFUlJPUjsKKyAgICByZXR1cm4gUFBfRVJST1I7CiB9
CiAKIHN0ZDo6c3RyaW5nIERpYWdub3N0aWNzOjptZXNzYWdlKElEIGlkKQpAQCAtNDAsODIgKzQw
LDgyIEBAIHN0ZDo6c3RyaW5nIERpYWdub3N0aWNzOjptZXNzYWdlKElEIGlkKQogICAgIHN3aXRj
aCAoaWQpCiAgICAgewogICAgICAgLy8gRXJyb3JzIGJlZ2luLgotICAgICAgY2FzZSBJTlRFUk5B
TF9FUlJPUjoKKyAgICAgIGNhc2UgUFBfSU5URVJOQUxfRVJST1I6CiAgICAgICAgICAgcmV0dXJu
ICJpbnRlcm5hbCBlcnJvciI7Ci0gICAgICBjYXNlIE9VVF9PRl9NRU1PUlk6CisgICAgICBjYXNl
IFBQX09VVF9PRl9NRU1PUlk6CiAgICAgICAgICAgcmV0dXJuICJvdXQgb2YgbWVtb3J5IjsKLSAg
ICAgIGNhc2UgSU5WQUxJRF9DSEFSQUNURVI6CisgICAgICBjYXNlIFBQX0lOVkFMSURfQ0hBUkFD
VEVSOgogICAgICAgICAgIHJldHVybiAiaW52YWxpZCBjaGFyYWN0ZXIiOwotICAgICAgY2FzZSBJ
TlZBTElEX05VTUJFUjoKKyAgICAgIGNhc2UgUFBfSU5WQUxJRF9OVU1CRVI6CiAgICAgICAgICAg
cmV0dXJuICJpbnZhbGlkIG51bWJlciI7Ci0gICAgICBjYXNlIElOVEVHRVJfT1ZFUkZMT1c6Cisg
ICAgICBjYXNlIFBQX0lOVEVHRVJfT1ZFUkZMT1c6CiAgICAgICAgICAgcmV0dXJuICJpbnRlZ2Vy
IG92ZXJmbG93IjsKLSAgICAgIGNhc2UgRkxPQVRfT1ZFUkZMT1c6CisgICAgICBjYXNlIFBQX0ZM
T0FUX09WRVJGTE9XOgogICAgICAgICAgIHJldHVybiAiZmxvYXQgb3ZlcmZsb3ciOwotICAgICAg
Y2FzZSBUT0tFTl9UT09fTE9ORzoKKyAgICAgIGNhc2UgUFBfVE9LRU5fVE9PX0xPTkc6CiAgICAg
ICAgICAgcmV0dXJuICJ0b2tlbiB0b28gbG9uZyI7Ci0gICAgICBjYXNlIElOVkFMSURfRVhQUkVT
U0lPTjoKKyAgICAgIGNhc2UgUFBfSU5WQUxJRF9FWFBSRVNTSU9OOgogICAgICAgICAgIHJldHVy
biAiaW52YWxpZCBleHByZXNzaW9uIjsKLSAgICAgIGNhc2UgRElWSVNJT05fQllfWkVSTzoKKyAg
ICAgIGNhc2UgUFBfRElWSVNJT05fQllfWkVSTzoKICAgICAgICAgICByZXR1cm4gImRpdmlzaW9u
IGJ5IHplcm8iOwotICAgICAgY2FzZSBFT0ZfSU5fQ09NTUVOVDoKKyAgICAgIGNhc2UgUFBfRU9G
X0lOX0NPTU1FTlQ6CiAgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIGZv
dW5kIGluIGNvbW1lbnQiOwotICAgICAgY2FzZSBVTkVYUEVDVEVEX1RPS0VOOgorICAgICAgY2Fz
ZSBQUF9VTkVYUEVDVEVEX1RPS0VOOgogICAgICAgICAgIHJldHVybiAidW5leHBlY3RlZCB0b2tl
biI7Ci0gICAgICBjYXNlIERJUkVDVElWRV9JTlZBTElEX05BTUU6CisgICAgICBjYXNlIFBQX0RJ
UkVDVElWRV9JTlZBTElEX05BTUU6CiAgICAgICAgICAgcmV0dXJuICJpbnZhbGlkIGRpcmVjdGl2
ZSBuYW1lIjsKLSAgICAgIGNhc2UgTUFDUk9fTkFNRV9SRVNFUlZFRDoKKyAgICAgIGNhc2UgUFBf
TUFDUk9fTkFNRV9SRVNFUlZFRDoKICAgICAgICAgICByZXR1cm4gIm1hY3JvIG5hbWUgaXMgcmVz
ZXJ2ZWQiOwotICAgICAgY2FzZSBNQUNST19SRURFRklORUQ6CisgICAgICBjYXNlIFBQX01BQ1JP
X1JFREVGSU5FRDoKICAgICAgICAgICByZXR1cm4gIm1hY3JvIHJlZGVmaW5lZCI7Ci0gICAgICBj
YXNlIE1BQ1JPX1BSRURFRklORURfUkVERUZJTkVEOgorICAgICAgY2FzZSBQUF9NQUNST19QUkVE
RUZJTkVEX1JFREVGSU5FRDoKICAgICAgICAgICByZXR1cm4gInByZWRlZmluZWQgbWFjcm8gcmVk
ZWZpbmVkIjsKLSAgICAgIGNhc2UgTUFDUk9fUFJFREVGSU5FRF9VTkRFRklORUQ6CisgICAgICBj
YXNlIFBQX01BQ1JPX1BSRURFRklORURfVU5ERUZJTkVEOgogICAgICAgICAgIHJldHVybiAicHJl
ZGVmaW5lZCBtYWNybyB1bmRlZmluZWQiOwotICAgICAgY2FzZSBNQUNST19VTlRFUk1JTkFURURf
SU5WT0NBVElPTjoKKyAgICAgIGNhc2UgUFBfTUFDUk9fVU5URVJNSU5BVEVEX0lOVk9DQVRJT046
CiAgICAgICAgICAgcmV0dXJuICJ1bnRlcm1pbmF0ZWQgbWFjcm8gaW52b2NhdGlvbiI7Ci0gICAg
ICBjYXNlIE1BQ1JPX1RPT19GRVdfQVJHUzoKKyAgICAgIGNhc2UgUFBfTUFDUk9fVE9PX0ZFV19B
UkdTOgogICAgICAgICAgIHJldHVybiAiTm90IGVub3VnaCBhcmd1bWVudHMgZm9yIG1hY3JvIjsK
LSAgICAgIGNhc2UgTUFDUk9fVE9PX01BTllfQVJHUzoKKyAgICAgIGNhc2UgUFBfTUFDUk9fVE9P
X01BTllfQVJHUzoKICAgICAgICAgICByZXR1cm4gIlRvbyBtYW55IGFyZ3VtZW50cyBmb3IgbWFj
cm8iOwotICAgICAgY2FzZSBDT05ESVRJT05BTF9FTkRJRl9XSVRIT1VUX0lGOgorICAgICAgY2Fz
ZSBQUF9DT05ESVRJT05BTF9FTkRJRl9XSVRIT1VUX0lGOgogICAgICAgICAgIHJldHVybiAidW5l
eHBlY3RlZCAjZW5kaWYgZm91bmQgd2l0aG91dCBhIG1hdGNoaW5nICNpZiI7Ci0gICAgICBjYXNl
IENPTkRJVElPTkFMX0VMU0VfV0lUSE9VVF9JRjoKKyAgICAgIGNhc2UgUFBfQ09ORElUSU9OQUxf
RUxTRV9XSVRIT1VUX0lGOgogICAgICAgICAgIHJldHVybiAidW5leHBlY3RlZCAjZWxzZSBmb3Vu
ZCB3aXRob3V0IGEgbWF0Y2hpbmcgI2lmIjsKLSAgICAgIGNhc2UgQ09ORElUSU9OQUxfRUxTRV9B
RlRFUl9FTFNFOgorICAgICAgY2FzZSBQUF9DT05ESVRJT05BTF9FTFNFX0FGVEVSX0VMU0U6CiAg
ICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkICNlbHNlIGZvdW5kIGFmdGVyIGFub3RoZXIgI2Vs
c2UiOwotICAgICAgY2FzZSBDT05ESVRJT05BTF9FTElGX1dJVEhPVVRfSUY6CisgICAgICBjYXNl
IFBQX0NPTkRJVElPTkFMX0VMSUZfV0lUSE9VVF9JRjoKICAgICAgICAgICByZXR1cm4gInVuZXhw
ZWN0ZWQgI2VsaWYgZm91bmQgd2l0aG91dCBhIG1hdGNoaW5nICNpZiI7Ci0gICAgICBjYXNlIENP
TkRJVElPTkFMX0VMSUZfQUZURVJfRUxTRToKKyAgICAgIGNhc2UgUFBfQ09ORElUSU9OQUxfRUxJ
Rl9BRlRFUl9FTFNFOgogICAgICAgICAgIHJldHVybiAidW5leHBlY3RlZCAjZWxpZiBmb3VuZCBh
ZnRlciAjZWxzZSI7Ci0gICAgICBjYXNlIENPTkRJVElPTkFMX1VOVEVSTUlOQVRFRDoKKyAgICAg
IGNhc2UgUFBfQ09ORElUSU9OQUxfVU5URVJNSU5BVEVEOgogICAgICAgICAgIHJldHVybiAidW5l
eHBlY3RlZCBlbmQgb2YgZmlsZSBmb3VuZCBpbiBjb25kaXRpb25hbCBibG9jayI7Ci0gICAgICBj
YXNlIElOVkFMSURfRVhURU5TSU9OX05BTUU6CisgICAgICBjYXNlIFBQX0lOVkFMSURfRVhURU5T
SU9OX05BTUU6CiAgICAgICAgICAgcmV0dXJuICJpbnZhbGlkIGV4dGVuc2lvbiBuYW1lIjsKLSAg
ICAgIGNhc2UgSU5WQUxJRF9FWFRFTlNJT05fQkVIQVZJT1I6CisgICAgICBjYXNlIFBQX0lOVkFM
SURfRVhURU5TSU9OX0JFSEFWSU9SOgogICAgICAgICAgIHJldHVybiAiaW52YWxpZCBleHRlbnNp
b24gYmVoYXZpb3IiOwotICAgICAgY2FzZSBJTlZBTElEX0VYVEVOU0lPTl9ESVJFQ1RJVkU6Cisg
ICAgICBjYXNlIFBQX0lOVkFMSURfRVhURU5TSU9OX0RJUkVDVElWRToKICAgICAgICAgICByZXR1
cm4gImludmFsaWQgZXh0ZW5zaW9uIGRpcmVjdGl2ZSI7Ci0gICAgICBjYXNlIElOVkFMSURfVkVS
U0lPTl9OVU1CRVI6CisgICAgICBjYXNlIFBQX0lOVkFMSURfVkVSU0lPTl9OVU1CRVI6CiAgICAg
ICAgICAgcmV0dXJuICJpbnZhbGlkIHZlcnNpb24gbnVtYmVyIjsKLSAgICAgIGNhc2UgSU5WQUxJ
RF9WRVJTSU9OX0RJUkVDVElWRToKKyAgICAgIGNhc2UgUFBfSU5WQUxJRF9WRVJTSU9OX0RJUkVD
VElWRToKICAgICAgICAgICByZXR1cm4gImludmFsaWQgdmVyc2lvbiBkaXJlY3RpdmUiOwotICAg
ICAgY2FzZSBWRVJTSU9OX05PVF9GSVJTVF9TVEFURU1FTlQ6CisgICAgICBjYXNlIFBQX1ZFUlNJ
T05fTk9UX0ZJUlNUX1NUQVRFTUVOVDoKICAgICAgICAgcmV0dXJuICIjdmVyc2lvbiBkaXJlY3Rp
dmUgbXVzdCBvY2N1ciBiZWZvcmUgYW55dGhpbmcgZWxzZSwgIgogICAgICAgICAgICAgICAgImV4
Y2VwdCBmb3IgY29tbWVudHMgYW5kIHdoaXRlIHNwYWNlIjsKLSAgICAgIGNhc2UgSU5WQUxJRF9M
SU5FX05VTUJFUjoKKyAgICAgIGNhc2UgUFBfSU5WQUxJRF9MSU5FX05VTUJFUjoKICAgICAgICAg
ICByZXR1cm4gImludmFsaWQgbGluZSBudW1iZXIiOwotICAgICAgY2FzZSBJTlZBTElEX0ZJTEVf
TlVNQkVSOgorICAgICAgY2FzZSBQUF9JTlZBTElEX0ZJTEVfTlVNQkVSOgogICAgICAgICAgIHJl
dHVybiAiaW52YWxpZCBmaWxlIG51bWJlciI7Ci0gICAgICBjYXNlIElOVkFMSURfTElORV9ESVJF
Q1RJVkU6CisgICAgICBjYXNlIFBQX0lOVkFMSURfTElORV9ESVJFQ1RJVkU6CiAgICAgICAgICAg
cmV0dXJuICJpbnZhbGlkIGxpbmUgZGlyZWN0aXZlIjsKICAgICAgIC8vIEVycm9ycyBlbmQuCiAg
ICAgICAvLyBXYXJuaW5ncyBiZWdpbi4KLSAgICAgIGNhc2UgRU9GX0lOX0RJUkVDVElWRToKKyAg
ICAgIGNhc2UgUFBfRU9GX0lOX0RJUkVDVElWRToKICAgICAgICAgICByZXR1cm4gInVuZXhwZWN0
ZWQgZW5kIG9mIGZpbGUgZm91bmQgaW4gZGlyZWN0aXZlIjsKLSAgICAgIGNhc2UgQ09ORElUSU9O
QUxfVU5FWFBFQ1RFRF9UT0tFTjoKKyAgICAgIGNhc2UgUFBfQ09ORElUSU9OQUxfVU5FWFBFQ1RF
RF9UT0tFTjoKICAgICAgICAgICByZXR1cm4gInVuZXhwZWN0ZWQgdG9rZW4gYWZ0ZXIgY29uZGl0
aW9uYWwgZXhwcmVzc2lvbiI7Ci0gICAgICBjYXNlIFVOUkVDT0dOSVpFRF9QUkFHTUE6CisgICAg
ICBjYXNlIFBQX1VOUkVDT0dOSVpFRF9QUkFHTUE6CiAgICAgICAgICAgcmV0dXJuICJ1bnJlY29n
bml6ZWQgcHJhZ21hIjsKICAgICAgIC8vIFdhcm5pbmdzIGVuZC4KICAgICAgIGRlZmF1bHQ6CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL0RpYWdub3N0aWNzQmFzZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9EaWFnbm9zdGljc0Jhc2UuaAppbmRleCAwN2JjNDExODQ2NDJhM2Rj
NzQyZWY0ZGY0NmRmMmU0NGVlNmUyNjQ5Li4yYzhjNTM5MTM3Yjk2YTc2OTYxNTFiM2NmMDdjNTBh
OTQwNzQyYmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL0RpYWdub3N0aWNzQmFzZS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NCYXNlLmgKQEAgLTIx
LDUzICsyMSw1MyBAQCBjbGFzcyBEaWFnbm9zdGljcwogICBwdWJsaWM6CiAgICAgZW51bSBTZXZl
cml0eQogICAgIHsKLSAgICAgICAgRVJST1IsCi0gICAgICAgIFdBUk5JTkcKKyAgICAgICAgUFBf
RVJST1IsCisgICAgICAgIFBQX1dBUk5JTkcKICAgICB9OwogICAgIGVudW0gSUQKICAgICB7Ci0g
ICAgICAgIEVSUk9SX0JFR0lOLAotICAgICAgICBJTlRFUk5BTF9FUlJPUiwKLSAgICAgICAgT1VU
X09GX01FTU9SWSwKLSAgICAgICAgSU5WQUxJRF9DSEFSQUNURVIsCi0gICAgICAgIElOVkFMSURf
TlVNQkVSLAotICAgICAgICBJTlRFR0VSX09WRVJGTE9XLAotICAgICAgICBGTE9BVF9PVkVSRkxP
VywKLSAgICAgICAgVE9LRU5fVE9PX0xPTkcsCi0gICAgICAgIElOVkFMSURfRVhQUkVTU0lPTiwK
LSAgICAgICAgRElWSVNJT05fQllfWkVSTywKLSAgICAgICAgRU9GX0lOX0NPTU1FTlQsCi0gICAg
ICAgIFVORVhQRUNURURfVE9LRU4sCi0gICAgICAgIERJUkVDVElWRV9JTlZBTElEX05BTUUsCi0g
ICAgICAgIE1BQ1JPX05BTUVfUkVTRVJWRUQsCi0gICAgICAgIE1BQ1JPX1JFREVGSU5FRCwKLSAg
ICAgICAgTUFDUk9fUFJFREVGSU5FRF9SRURFRklORUQsCi0gICAgICAgIE1BQ1JPX1BSRURFRklO
RURfVU5ERUZJTkVELAotICAgICAgICBNQUNST19VTlRFUk1JTkFURURfSU5WT0NBVElPTiwKLSAg
ICAgICAgTUFDUk9fVE9PX0ZFV19BUkdTLAotICAgICAgICBNQUNST19UT09fTUFOWV9BUkdTLAot
ICAgICAgICBDT05ESVRJT05BTF9FTkRJRl9XSVRIT1VUX0lGLAotICAgICAgICBDT05ESVRJT05B
TF9FTFNFX1dJVEhPVVRfSUYsCi0gICAgICAgIENPTkRJVElPTkFMX0VMU0VfQUZURVJfRUxTRSwK
LSAgICAgICAgQ09ORElUSU9OQUxfRUxJRl9XSVRIT1VUX0lGLAotICAgICAgICBDT05ESVRJT05B
TF9FTElGX0FGVEVSX0VMU0UsCi0gICAgICAgIENPTkRJVElPTkFMX1VOVEVSTUlOQVRFRCwKLSAg
ICAgICAgSU5WQUxJRF9FWFRFTlNJT05fTkFNRSwKLSAgICAgICAgSU5WQUxJRF9FWFRFTlNJT05f
QkVIQVZJT1IsCi0gICAgICAgIElOVkFMSURfRVhURU5TSU9OX0RJUkVDVElWRSwKLSAgICAgICAg
SU5WQUxJRF9WRVJTSU9OX05VTUJFUiwKLSAgICAgICAgSU5WQUxJRF9WRVJTSU9OX0RJUkVDVElW
RSwKLSAgICAgICAgVkVSU0lPTl9OT1RfRklSU1RfU1RBVEVNRU5ULAotICAgICAgICBJTlZBTElE
X0xJTkVfTlVNQkVSLAotICAgICAgICBJTlZBTElEX0ZJTEVfTlVNQkVSLAotICAgICAgICBJTlZB
TElEX0xJTkVfRElSRUNUSVZFLAotICAgICAgICBFUlJPUl9FTkQsCisgICAgICAgIFBQX0VSUk9S
X0JFR0lOLAorICAgICAgICBQUF9JTlRFUk5BTF9FUlJPUiwKKyAgICAgICAgUFBfT1VUX09GX01F
TU9SWSwKKyAgICAgICAgUFBfSU5WQUxJRF9DSEFSQUNURVIsCisgICAgICAgIFBQX0lOVkFMSURf
TlVNQkVSLAorICAgICAgICBQUF9JTlRFR0VSX09WRVJGTE9XLAorICAgICAgICBQUF9GTE9BVF9P
VkVSRkxPVywKKyAgICAgICAgUFBfVE9LRU5fVE9PX0xPTkcsCisgICAgICAgIFBQX0lOVkFMSURf
RVhQUkVTU0lPTiwKKyAgICAgICAgUFBfRElWSVNJT05fQllfWkVSTywKKyAgICAgICAgUFBfRU9G
X0lOX0NPTU1FTlQsCisgICAgICAgIFBQX1VORVhQRUNURURfVE9LRU4sCisgICAgICAgIFBQX0RJ
UkVDVElWRV9JTlZBTElEX05BTUUsCisgICAgICAgIFBQX01BQ1JPX05BTUVfUkVTRVJWRUQsCisg
ICAgICAgIFBQX01BQ1JPX1JFREVGSU5FRCwKKyAgICAgICAgUFBfTUFDUk9fUFJFREVGSU5FRF9S
RURFRklORUQsCisgICAgICAgIFBQX01BQ1JPX1BSRURFRklORURfVU5ERUZJTkVELAorICAgICAg
ICBQUF9NQUNST19VTlRFUk1JTkFURURfSU5WT0NBVElPTiwKKyAgICAgICAgUFBfTUFDUk9fVE9P
X0ZFV19BUkdTLAorICAgICAgICBQUF9NQUNST19UT09fTUFOWV9BUkdTLAorICAgICAgICBQUF9D
T05ESVRJT05BTF9FTkRJRl9XSVRIT1VUX0lGLAorICAgICAgICBQUF9DT05ESVRJT05BTF9FTFNF
X1dJVEhPVVRfSUYsCisgICAgICAgIFBQX0NPTkRJVElPTkFMX0VMU0VfQUZURVJfRUxTRSwKKyAg
ICAgICAgUFBfQ09ORElUSU9OQUxfRUxJRl9XSVRIT1VUX0lGLAorICAgICAgICBQUF9DT05ESVRJ
T05BTF9FTElGX0FGVEVSX0VMU0UsCisgICAgICAgIFBQX0NPTkRJVElPTkFMX1VOVEVSTUlOQVRF
RCwKKyAgICAgICAgUFBfSU5WQUxJRF9FWFRFTlNJT05fTkFNRSwKKyAgICAgICAgUFBfSU5WQUxJ
RF9FWFRFTlNJT05fQkVIQVZJT1IsCisgICAgICAgIFBQX0lOVkFMSURfRVhURU5TSU9OX0RJUkVD
VElWRSwKKyAgICAgICAgUFBfSU5WQUxJRF9WRVJTSU9OX05VTUJFUiwKKyAgICAgICAgUFBfSU5W
QUxJRF9WRVJTSU9OX0RJUkVDVElWRSwKKyAgICAgICAgUFBfVkVSU0lPTl9OT1RfRklSU1RfU1RB
VEVNRU5ULAorICAgICAgICBQUF9JTlZBTElEX0xJTkVfTlVNQkVSLAorICAgICAgICBQUF9JTlZB
TElEX0ZJTEVfTlVNQkVSLAorICAgICAgICBQUF9JTlZBTElEX0xJTkVfRElSRUNUSVZFLAorICAg
ICAgICBQUF9FUlJPUl9FTkQsCiAKLSAgICAgICAgV0FSTklOR19CRUdJTiwKLSAgICAgICAgRU9G
X0lOX0RJUkVDVElWRSwKLSAgICAgICAgQ09ORElUSU9OQUxfVU5FWFBFQ1RFRF9UT0tFTiwKLSAg
ICAgICAgVU5SRUNPR05JWkVEX1BSQUdNQSwKLSAgICAgICAgV0FSTklOR19FTkQKKyAgICAgICAg
UFBfV0FSTklOR19CRUdJTiwKKyAgICAgICAgUFBfRU9GX0lOX0RJUkVDVElWRSwKKyAgICAgICAg
UFBfQ09ORElUSU9OQUxfVU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgUFBfVU5SRUNPR05JWkVE
X1BSQUdNQSwKKyAgICAgICAgUFBfV0FSTklOR19FTkQKICAgICB9OwogCiAgICAgdmlydHVhbCB+
RGlhZ25vc3RpY3MoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFyc2VyLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFyc2VyLmNwcApp
bmRleCA5NGRmZGY1MTNkNzU1Mzg0YzVmNWExYWU1Y2I2MzE2NTg0YzQ2MGEzLi5lYmVjNzk4MDRk
Y2VmODM2YTRiNDJmOTY0NDcyMzZjNzE2MzQ3MDIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZVBhcnNlci5jcHAK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9E
aXJlY3RpdmVQYXJzZXIuY3BwCkBAIC0xNzIsNyArMTcyLDcgQEAgY2xhc3MgRGVmaW5lZFBhcnNl
ciA6IHB1YmxpYyBMZXhlcgogCiAgICAgICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURF
TlRJRklFUikKICAgICAgICAgewotICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJl
cG9ydChEaWFnbm9zdGljczo6UFBfVU5FWFBFQ1RFRF9UT0tFTiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICAg
ICAgc2tpcFVudGlsRU9EKG1MZXhlciwgdG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAt
MTg1LDcgKzE4NSw3IEBAIGNsYXNzIERlZmluZWRQYXJzZXIgOiBwdWJsaWMgTGV4ZXIKICAgICAg
ICAgICAgIG1MZXhlci0+bGV4KHRva2VuKTsKICAgICAgICAgICAgIGlmICh0b2tlbi0+dHlwZSAh
PSAnKScpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBv
cnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgbURpYWdu
b3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX1VORVhQRUNURURfVE9LRU4sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4
dCk7CiAgICAgICAgICAgICAgICAgc2tpcFVudGlsRU9EKG1MZXhlciwgdG9rZW4pOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTIzMyw3ICsyMzMsNyBAQCB2b2lkIERpcmVjdGl2ZVBhcnNl
cjo6bGV4KFRva2VuKiB0b2tlbikKICAgICAgICAgICAgIGlmICghbUNvbmRpdGlvbmFsU3RhY2su
ZW1wdHkoKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBjb25zdCBDb25kaXRpb25h
bEJsb2NrJiBibG9jayA9IG1Db25kaXRpb25hbFN0YWNrLmJhY2soKTsKLSAgICAgICAgICAgICAg
ICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfVU5URVJNSU5B
VEVELAorICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQ
UF9DT05ESVRJT05BTF9VTlRFUk1JTkFURUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYmxvY2subG9jYXRpb24sIGJsb2NrLnR5cGUpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgYnJlYWs7CkBAIC0yNjgsNyArMjY4LDcgQEAgdm9pZCBEaXJlY3RpdmVQYXJzZXI6
OnBhcnNlRGlyZWN0aXZlKFRva2VuKiB0b2tlbikKICAgICBzd2l0Y2goZGlyZWN0aXZlKQogICAg
IHsKICAgICAgIGNhc2UgRElSRUNUSVZFX05PTkU6Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVw
b3J0KERpYWdub3N0aWNzOjpESVJFQ1RJVkVfSU5WQUxJRF9OQU1FLAorICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfRElSRUNUSVZFX0lOVkFMSURfTkFNRSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7
CiAgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CiAgICAgICAgIGJyZWFr
OwpAQCAtMzE5LDcgKzMxOSw3IEBAIHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZURpcmVjdGl2
ZShUb2tlbiogdG9rZW4pCiAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKICAg
ICBpZiAodG9rZW4tPnR5cGUgPT0gVG9rZW46OkxBU1QpCiAgICAgewotICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6RU9GX0lOX0RJUkVDVElWRSwKKyAgICAgICAgbURp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX0VPRl9JTl9ESVJFQ1RJVkUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwog
ICAgIH0KIH0KQEAgLTMzMSwxOSArMzMxLDE5IEBAIHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJz
ZURlZmluZShUb2tlbiogdG9rZW4pCiAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKICAgICBp
ZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCiAgICAgewotICAgICAgICBtRGlh
Z25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX1VORVhQRUNURURfVE9LRU4sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChpc01hY3JvUHJlZGVmaW5lZCh0b2tl
bi0+dGV4dCwgKm1NYWNyb1NldCkpCiAgICAgewotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6TUFDUk9fUFJFREVGSU5FRF9SRURFRklORUQsCisgICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9NQUNST19QUkVERUZJTkVEX1JFREVGSU5F
RCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+
dGV4dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGlzTWFjcm9OYW1lUmVzZXJ2
ZWQodG9rZW4tPnRleHQpKQogICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6Ok1BQ1JPX05BTUVfUkVTRVJWRUQsCisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVw
b3J0KERpYWdub3N0aWNzOjpQUF9NQUNST19OQU1FX1JFU0VSVkVELAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTM2OCw3ICszNjgsNyBAQCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFy
c2VEZWZpbmUoVG9rZW4qIHRva2VuKQogCiAgICAgICAgIGlmICh0b2tlbi0+dHlwZSAhPSAnKScp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNz
OjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6OlBQX1VORVhQRUNURURfVE9LRU4sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0b2tlbi0+dGV4dCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0zOTYsNyArMzk2LDcgQEAg
dm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGVmaW5lKFRva2VuKiB0b2tlbikKICAgICBNYWNy
b1NldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1NYWNyb1NldC0+ZmluZChtYWNyby5uYW1lKTsK
ICAgICBpZiAoaXRlciAhPSBtTWFjcm9TZXQtPmVuZCgpICYmICFtYWNyby5lcXVhbHMoaXRlci0+
c2Vjb25kKSkKICAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNz
OjpNQUNST19SRURFRklORUQsCisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpQUF9NQUNST19SRURFRklORUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv
a2VuLT5sb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjcm8ubmFtZSk7
CiAgICAgICAgIHJldHVybjsKQEAgLTQxMSw3ICs0MTEsNyBAQCB2b2lkIERpcmVjdGl2ZVBhcnNl
cjo6cGFyc2VVbmRlZihUb2tlbiogdG9rZW4pCiAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsK
ICAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCiAgICAgewotICAgICAg
ICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX1VORVhQRUNURURfVE9L
RU4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4t
PnRleHQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDIxLDcgKzQyMSw3IEBAIHZvaWQg
RGlyZWN0aXZlUGFyc2VyOjpwYXJzZVVuZGVmKFRva2VuKiB0b2tlbikKICAgICB7CiAgICAgICAg
IGlmIChpdGVyLT5zZWNvbmQucHJlZGVmaW5lZCkKICAgICAgICAgewotICAgICAgICAgICAgbURp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1BQ1JPX1BSRURFRklORURfVU5ERUZJTkVE
LAorICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX01BQ1JP
X1BSRURFRklORURfVU5ERUZJTkVELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQpA
QCAtNDU3LDcgKzQ1Nyw3IEBAIHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVsc2UoVG9rZW4q
IHRva2VuKQogCiAgICAgaWYgKG1Db25kaXRpb25hbFN0YWNrLmVtcHR5KCkpCiAgICAgewotICAg
ICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfRUxTRV9X
SVRIT1VUX0lGLAorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBf
Q09ORElUSU9OQUxfRUxTRV9XSVRIT1VUX0lGLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgc2tpcFVudGlsRU9EKG1U
b2tlbml6ZXIsIHRva2VuKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNDcyLDcgKzQ3Miw3IEBAIHZv
aWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVsc2UoVG9rZW4qIHRva2VuKQogICAgIH0KICAgICBp
ZiAoYmxvY2suZm91bmRFbHNlR3JvdXApCiAgICAgewotICAgICAgICBtRGlhZ25vc3RpY3MtPnJl
cG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfRUxTRV9BRlRFUl9FTFNFLAorICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfQ09ORElUSU9OQUxfRUxTRV9BRlRF
Ul9FTFNFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRv
a2VuLT50ZXh0KTsKICAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKICAg
ICAgICAgcmV0dXJuOwpAQCAtNDg2LDcgKzQ4Niw3IEBAIHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpw
YXJzZUVsc2UoVG9rZW4qIHRva2VuKQogICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CiAgICAg
aWYgKCFpc0VPRCh0b2tlbikpCiAgICAgewotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6Q09ORElUSU9OQUxfVU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgbURpYWdu
b3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX0NPTkRJVElPTkFMX1VORVhQRUNURURfVE9L
RU4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4t
PnRleHQpOwogICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOwogICAgIH0K
QEAgLTQ5OCw3ICs0OTgsNyBAQCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFbGlmKFRva2Vu
KiB0b2tlbikKIAogICAgIGlmIChtQ29uZGl0aW9uYWxTdGFjay5lbXB0eSgpKQogICAgIHsKLSAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX0VMSUZf
V0lUSE9VVF9JRiwKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQ
X0NPTkRJVElPTkFMX0VMSUZfV0lUSE9VVF9JRiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgIHNraXBVbnRpbEVPRCht
VG9rZW5pemVyLCB0b2tlbik7CiAgICAgICAgIHJldHVybjsKQEAgLTUxMyw3ICs1MTMsNyBAQCB2
b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFbGlmKFRva2VuKiB0b2tlbikKICAgICB9CiAgICAg
aWYgKGJsb2NrLmZvdW5kRWxzZUdyb3VwKQogICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5y
ZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX0VMSUZfQUZURVJfRUxTRSwKKyAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX0NPTkRJVElPTkFMX0VMSUZfQUZU
RVJfRUxTRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0
b2tlbi0+dGV4dCk7CiAgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CiAg
ICAgICAgIHJldHVybjsKQEAgLTUzOCw3ICs1MzgsNyBAQCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6
cGFyc2VFbmRpZihUb2tlbiogdG9rZW4pCiAKICAgICBpZiAobUNvbmRpdGlvbmFsU3RhY2suZW1w
dHkoKSkKICAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpD
T05ESVRJT05BTF9FTkRJRl9XSVRIT1VUX0lGLAorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6UFBfQ09ORElUSU9OQUxfRU5ESUZfV0lUSE9VVF9JRiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAg
ICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CiAgICAgICAgIHJldHVybjsKQEAg
LTU1MCw3ICs1NTAsNyBAQCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFbmRpZihUb2tlbiog
dG9rZW4pCiAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKICAgICBpZiAoIWlzRU9EKHRva2Vu
KSkKICAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05E
SVRJT05BTF9VTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6UFBfQ09ORElUSU9OQUxfVU5FWFBFQ1RFRF9UT0tFTiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAg
IHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CiAgICAgfQpAQCAtNjE4LDcgKzYxOCw3
IEBAIHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZVByYWdtYShUb2tlbiogdG9rZW4pCiAgICAg
ICAgICAgICAgICAgICAgICAgKHN0YXRlID09IFJJR0hUX1BBUkVOICsgMSkpOyAgLy8gV2l0aCB2
YWx1ZS4KICAgICBpZiAoIXZhbGlkKQogICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBv
cnQoRGlhZ25vc3RpY3M6OlVOUkVDT0dOSVpFRF9QUkFHTUEsCisgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9VTlJFQ09HTklaRURfUFJBR01BLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIG5hbWUpOwogICAgIH0KICAgICBl
bHNlIGlmIChzdGF0ZSA+IFBSQUdNQV9OQU1FKSAgLy8gRG8gbm90IG5vdGlmeSBmb3IgZW1wdHkg
cHJhZ21hLgpAQCAtNjUwLDcgKzY1MCw3IEBAIHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4
dGVuc2lvbihUb2tlbiogdG9rZW4pCiAgICAgICAgICAgY2FzZSBFWFRfTkFNRToKICAgICAgICAg
ICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpKQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpJTlZBTElEX0VYVEVOU0lPTl9OQU1FLAorICAgICAgICAgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9JTlZBTElEX0VYVEVOU0lPTl9OQU1FLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRl
eHQpOwogICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICB9CkBAIC02
NTksNyArNjU5LDcgQEAgdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXh0ZW5zaW9uKFRva2Vu
KiB0b2tlbikKICAgICAgICAgICBjYXNlIENPTE9OOgogICAgICAgICAgICAgaWYgKHZhbGlkICYm
ICh0b2tlbi0+dHlwZSAhPSAnOicpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1E
aWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAg
ICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9VTkVYUEVDVEVE
X1RPS0VOLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2Nh
dGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAg
ICAgICAgICB9CkBAIC02NjcsNyArNjY3LDcgQEAgdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNl
RXh0ZW5zaW9uKFRva2VuKiB0b2tlbikKICAgICAgICAgICBjYXNlIEVYVF9CRUhBVklPUjoKICAg
ICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIp
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERp
YWdub3N0aWNzOjpJTlZBTElEX0VYVEVOU0lPTl9CRUhBVklPUiwKKyAgICAgICAgICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfSU5WQUxJRF9FWFRFTlNJT05fQkVI
QVZJT1IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0
aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICAg
ICAgICAgIH0KQEAgLTY3Niw3ICs2NzYsNyBAQCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VF
eHRlbnNpb24oVG9rZW4qIHRva2VuKQogICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBp
ZiAodmFsaWQpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5y
ZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgbURp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX1VORVhQRUNURURfVE9LRU4sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+
dGV4dCk7CiAgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KQEAg
LTY4Niw3ICs2ODYsNyBAQCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFeHRlbnNpb24oVG9r
ZW4qIHRva2VuKQogICAgIH0KICAgICBpZiAodmFsaWQgJiYgKHN0YXRlICE9IEVYVF9CRUhBVklP
UiArIDEpKQogICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OklOVkFMSURfRVhURU5TSU9OX0RJUkVDVElWRSwKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBv
cnQoRGlhZ25vc3RpY3M6OlBQX0lOVkFMSURfRVhURU5TSU9OX0RJUkVDVElWRSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAg
ICAgIHZhbGlkID0gZmFsc2U7CiAgICAgfQpAQCAtNzAwLDcgKzcwMCw3IEBAIHZvaWQgRGlyZWN0
aXZlUGFyc2VyOjpwYXJzZVZlcnNpb24oVG9rZW4qIHRva2VuKQogCiAgICAgaWYgKG1QYXN0Rmly
c3RTdGF0ZW1lbnQpCiAgICAgewotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6VkVSU0lPTl9OT1RfRklSU1RfU1RBVEVNRU5ULAorICAgICAgICBtRGlhZ25vc3RpY3Mt
PnJlcG9ydChEaWFnbm9zdGljczo6UFBfVkVSU0lPTl9OT1RfRklSU1RfU1RBVEVNRU5ULAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsK
ICAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKICAgICAgICAgcmV0dXJu
OwpAQCAtNzIzLDEzICs3MjMsMTMgQEAgdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVmVyc2lv
bihUb2tlbiogdG9rZW4pCiAgICAgICAgICAgY2FzZSBWRVJTSU9OX05VTUJFUjoKICAgICAgICAg
ICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkNPTlNUX0lOVCkpCiAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6OklOVkFMSURfVkVSU0lPTl9OVU1CRVIsCisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNz
LT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX0lOVkFMSURfVkVSU0lPTl9OVU1CRVIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4
dCk7CiAgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGlmICh2YWxpZCAmJiAhdG9rZW4tPmlWYWx1ZSgmdmVyc2lvbikpCiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklO
VEVHRVJfT1ZFUkZMT1csCisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6OlBQX0lOVEVHRVJfT1ZFUkZMT1csCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgICAgICAg
ICAgdmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KQEAgLTczNyw3ICs3MzcsNyBAQCB2b2lk
IERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VWZXJzaW9uKFRva2VuKiB0b2tlbikKICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgaWYgKHZhbGlkKQogICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VO
LAorICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9V
TkVYUEVDVEVEX1RPS0VOLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv
a2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICAgICAgICAgIHZhbGlkID0gZmFs
c2U7CiAgICAgICAgICAgICB9CkBAIC03NDcsNyArNzQ3LDcgQEAgdm9pZCBEaXJlY3RpdmVQYXJz
ZXI6OnBhcnNlVmVyc2lvbihUb2tlbiogdG9rZW4pCiAgICAgfQogICAgIGlmICh2YWxpZCAmJiAo
c3RhdGUgIT0gVkVSU0lPTl9OVU1CRVIgKyAxKSkKICAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX1ZFUlNJT05fRElSRUNUSVZFLAorICAgICAg
ICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfSU5WQUxJRF9WRVJTSU9OX0RJ
UkVDVElWRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0
b2tlbi0+dGV4dCk7CiAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgfQpAQCAtNzc4LDEzICs3
NzgsMTMgQEAgdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlTGluZShUb2tlbiogdG9rZW4pCiAg
ICAgICAgICAgY2FzZSBMSU5FX05VTUJFUjoKICAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9r
ZW4tPnR5cGUgIT0gVG9rZW46OkNPTlNUX0lOVCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfTElORV9OVU1C
RVIsCisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQ
X0lOVkFMSURfTElORV9OVU1CRVIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgICAgICAgICAgdmFsaWQg
PSBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICh2YWxpZCAmJiAhdG9rZW4t
PmlWYWx1ZSgmbGluZSkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURpYWdub3N0
aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVEVHRVJfT1ZFUkZMT1csCisgICAgICAgICAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX0lOVEVHRVJfT1ZFUkZMT1cs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0
b2tlbi0+dGV4dCk7CiAgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAg
IH0KQEAgLTc5MiwxMyArNzkyLDEzIEBAIHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUxpbmUo
VG9rZW4qIHRva2VuKQogICAgICAgICAgIGNhc2UgRklMRV9OVU1CRVI6CiAgICAgICAgICAgICBp
ZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpDT05TVF9JTlQpKQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJ
TlZBTElEX0ZJTEVfTlVNQkVSLAorICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0
KERpYWdub3N0aWNzOjpQUF9JTlZBTElEX0ZJTEVfTlVNQkVSLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAg
ICAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAo
dmFsaWQgJiYgIXRva2VuLT5pVmFsdWUoJmZpbGUpKQogICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlRFR0VSX09WRVJGTE9X
LAorICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9J
TlRFR0VSX09WRVJGTE9XLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv
a2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICAgICAgICAgIHZhbGlkID0gZmFs
c2U7CiAgICAgICAgICAgICB9CkBAIC04MDYsNyArODA2LDcgQEAgdm9pZCBEaXJlY3RpdmVQYXJz
ZXI6OnBhcnNlTGluZShUb2tlbiogdG9rZW4pCiAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIGlmICh2YWxpZCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGlhZ25vc3Rp
Y3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAg
ICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfVU5FWFBFQ1RFRF9UT0tFTiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRv
a2VuLT50ZXh0KTsKICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAg
fQpAQCAtODE3LDcgKzgxNyw3IEBAIHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUxpbmUoVG9r
ZW4qIHRva2VuKQogCiAgICAgaWYgKHZhbGlkICYmIChzdGF0ZSAhPSBGSUxFX05VTUJFUikgJiYg
KHN0YXRlICE9IEZJTEVfTlVNQkVSICsgMSkpCiAgICAgewotICAgICAgICBtRGlhZ25vc3RpY3Mt
PnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9MSU5FX0RJUkVDVElWRSwKKyAgICAgICAgbURp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX0lOVkFMSURfTElORV9ESVJFQ1RJVkUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRl
eHQpOwogICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgIH0KQEAgLTg5Myw3ICs4OTMsNyBAQCBp
bnQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25JZihUb2tlbiogdG9rZW4pCiAgICAg
Ly8gV2FybiBpZiB0aGVyZSBhcmUgdG9rZW5zIGFmdGVyICNpZiBleHByZXNzaW9uLgogICAgIGlm
ICghaXNFT0QodG9rZW4pKQogICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6OkNPTkRJVElPTkFMX1VORVhQRUNURURfVE9LRU4sCisgICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9DT05ESVRJT05BTF9VTkVYUEVDVEVEX1RPS0VO
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50
ZXh0KTsKICAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKICAgICB9CkBA
IC05MDksNyArOTA5LDcgQEAgaW50IERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFeHByZXNzaW9uSWZk
ZWYoVG9rZW4qIHRva2VuKQogICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CiAgICAgaWYgKHRv
a2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQogICAgIHsKLSAgICAgICAgbURpYWdub3N0
aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9VTkVYUEVDVEVEX1RPS0VOLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAg
ICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKICAgICAgICAgcmV0dXJuIDA7
CkBAIC05MjIsNyArOTIyLDcgQEAgaW50IERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFeHByZXNzaW9u
SWZkZWYoVG9rZW4qIHRva2VuKQogICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CiAgICAgaWYg
KCFpc0VPRCh0b2tlbikpCiAgICAgewotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFn
bm9zdGljczo6Q09ORElUSU9OQUxfVU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgbURpYWdub3N0
aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX0NPTkRJVElPTkFMX1VORVhQRUNURURfVE9LRU4s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRl
eHQpOwogICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOwogICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvRXhwcmVzc2lvblBhcnNlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIuY3BwCmluZGV4IDFmYWUwMDk0NTZh
MTlhNmJkYTgwYTIzMDRjMGI4ZWFjNzRiZWRkOWIuLjNiODBiNDY2MjRhNzNiOWQ2MzY1ZjJmNmJj
MDFhYTYxNjc5MjQ4NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci5jcHAKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFyc2Vy
LmNwcApAQCAtMSwyMSArMSwyMSBAQAotLyogQXBwbGUgTm90ZTogRm9yIHRoZSBhdm9pZGFuY2Ug
b2YgZG91YnQsIEFwcGxlIGVsZWN0cyB0byBkaXN0cmlidXRlIHRoaXMgZmlsZSB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEJTRCBsaWNlbnNlLiAqLworLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkg
R05VIEJpc29uIDIuNy4gICovCiAKLS8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNv
biAzLjAuMS4gICovCisvKiBBcHBsZSBOb3RlOiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwg
QXBwbGUgZWxlY3RzIHRvIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgQlNEIGxpY2Vuc2UuICovCiAKIC8qIEJpc29uIGltcGxlbWVudGF0aW9uIGZvciBZYWNjLWxp
a2UgcGFyc2VycyBpbiBDCi0KLSAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAyMDAw
LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KKyAgIAorICAgICAgQ29weXJp
Z2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4KKyAgIAogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBv
cgogICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQorICAgCiAgICBUaGlz
IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotCisgICAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgICBhbG9uZyB3aXRoIHRoaXMgcHJv
Z3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAK
QEAgLTI4LDcgKzI4LDcgQEAKICAgIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNl
IHRoZSBza2VsZXRvbiBhbmQgdGhlIHJlc3VsdGluZwogICAgQmlzb24gb3V0cHV0IGZpbGVzIHRv
IGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAgIExpY2Vuc2Ugd2l0
aG91dCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uLgotCisgICAKICAgIFRoaXMgc3BlY2lhbCBleGNl
cHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KICAgIHZl
cnNpb24gMi4yIG9mIEJpc29uLiAgKi8KIApAQCAtNDYsNyArNDYsNyBAQAogI2RlZmluZSBZWUJJ
U09OIDEKIAogLyogQmlzb24gdmVyc2lvbi4gICovCi0jZGVmaW5lIFlZQklTT05fVkVSU0lPTiAi
My4wLjEiCisjZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMi43IgogCiAvKiBTa2VsZXRvbiBuYW1l
LiAgKi8KICNkZWZpbmUgWVlTS0VMRVRPTl9OQU1FICJ5YWNjLmMiCkBAIC02NSwxMCArNjUsMTEg
QEAKICNkZWZpbmUgeXlwYXJzZSAgICAgICAgIHBwcGFyc2UKICNkZWZpbmUgeXlsZXggICAgICAg
ICAgIHBwbGV4CiAjZGVmaW5lIHl5ZXJyb3IgICAgICAgICBwcGVycm9yCisjZGVmaW5lIHl5bHZh
bCAgICAgICAgICBwcGx2YWwKKyNkZWZpbmUgeXljaGFyICAgICAgICAgIHBwY2hhcgogI2RlZmlu
ZSB5eWRlYnVnICAgICAgICAgcHBkZWJ1ZwogI2RlZmluZSB5eW5lcnJzICAgICAgICAgcHBuZXJy
cwogCi0KIC8qIENvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLwog
CiAKQEAgLTEzMywxMSArMTM0LDExIEBAIHN0YXRpYyB2b2lkIHl5ZXJyb3IoQ29udGV4dCogY29u
dGV4dCwgY29uc3QgY2hhciogcmVhc29uKTsKIAogCiAKLSMgaWZuZGVmIFlZX05VTExQVFIKKyMg
aWZuZGVmIFlZX05VTEwKICMgIGlmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgMjAxMTAzTCA8PSBf
X2NwbHVzcGx1cwotIyAgIGRlZmluZSBZWV9OVUxMUFRSIG51bGxwdHIKKyMgICBkZWZpbmUgWVlf
TlVMTCBudWxscHRyCiAjICBlbHNlCi0jICAgZGVmaW5lIFlZX05VTExQVFIgMAorIyAgIGRlZmlu
ZSBZWV9OVUxMIDAKICMgIGVuZGlmCiAjIGVuZGlmCiAKQEAgLTE1MCw3ICsxNTEsNyBAQCBzdGF0
aWMgdm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7CiAj
ZW5kaWYKIAogCi0vKiBEZWJ1ZyB0cmFjZXMuICAqLworLyogRW5hYmxpbmcgdHJhY2VzLiAgKi8K
ICNpZm5kZWYgWVlERUJVRwogIyBkZWZpbmUgWVlERUJVRyAwCiAjZW5kaWYKQEAgLTE1OCwzNCAr
MTU5LDQ3IEBAIHN0YXRpYyB2b2lkIHl5ZXJyb3IoQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hh
ciogcmVhc29uKTsKIGV4dGVybiBpbnQgcHBkZWJ1ZzsKICNlbmRpZgogCi0vKiBUb2tlbiB0eXBl
LiAgKi8KKy8qIFRva2Vucy4gICovCiAjaWZuZGVmIFlZVE9LRU5UWVBFCiAjIGRlZmluZSBZWVRP
S0VOVFlQRQotICBlbnVtIHl5dG9rZW50eXBlCi0gIHsKLSAgICBUT0tfQ09OU1RfSU5UID0gMjU4
LAotICAgIFRPS19PUF9PUiA9IDI1OSwKLSAgICBUT0tfT1BfQU5EID0gMjYwLAotICAgIFRPS19P
UF9FUSA9IDI2MSwKLSAgICBUT0tfT1BfTkUgPSAyNjIsCi0gICAgVE9LX09QX0xFID0gMjYzLAot
ICAgIFRPS19PUF9HRSA9IDI2NCwKLSAgICBUT0tfT1BfTEVGVCA9IDI2NSwKLSAgICBUT0tfT1Bf
UklHSFQgPSAyNjYsCi0gICAgVE9LX1VOQVJZID0gMjY3Ci0gIH07CisgICAvKiBQdXQgdGhlIHRv
a2VucyBpbnRvIHRoZSBzeW1ib2wgdGFibGUsIHNvIHRoYXQgR0RCIGFuZCBvdGhlciBkZWJ1Z2dl
cnMKKyAgICAgIGtub3cgYWJvdXQgdGhlbS4gICovCisgICBlbnVtIHl5dG9rZW50eXBlIHsKKyAg
ICAgVE9LX0NPTlNUX0lOVCA9IDI1OCwKKyAgICAgVE9LX09QX09SID0gMjU5LAorICAgICBUT0tf
T1BfQU5EID0gMjYwLAorICAgICBUT0tfT1BfTkUgPSAyNjEsCisgICAgIFRPS19PUF9FUSA9IDI2
MiwKKyAgICAgVE9LX09QX0dFID0gMjYzLAorICAgICBUT0tfT1BfTEUgPSAyNjQsCisgICAgIFRP
S19PUF9SSUdIVCA9IDI2NSwKKyAgICAgVE9LX09QX0xFRlQgPSAyNjYsCisgICAgIFRPS19VTkFS
WSA9IDI2NworICAgfTsKICNlbmRpZgogCi0vKiBWYWx1ZSB0eXBlLiAgKi8KKwogI2lmICEgZGVm
aW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECiB0eXBlZGVmIGlu
dCBZWVNUWVBFOwogIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKKyMgZGVmaW5lIHl5c3R5
cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KICMgZGVmaW5l
IFlZU1RZUEVfSVNfREVDTEFSRUQgMQogI2VuZGlmCiAKIAotCisjaWZkZWYgWVlQQVJTRV9QQVJB
TQorI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cworaW50IHBwcGFy
c2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pOworI2Vsc2UKK2ludCBwcHBhcnNlICgpOworI2VuZGlm
CisjZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KKyNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRl
ZmluZWQgX19jcGx1c3BsdXMKIGludCBwcHBhcnNlIChDb250ZXh0ICpjb250ZXh0KTsKKyNlbHNl
CitpbnQgcHBwYXJzZSAoKTsKKyNlbmRpZgorI2VuZGlmIC8qICEgWVlQQVJTRV9QQVJBTSAqLwog
CiAKIApAQCAtMjA1LDggKzIxOSwxMSBAQCB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgeXl0eXBlX3Vp
bnQ4OwogCiAjaWZkZWYgWVlUWVBFX0lOVDgKIHR5cGVkZWYgWVlUWVBFX0lOVDggeXl0eXBlX2lu
dDg7Ci0jZWxzZQorI2VsaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVO
Q19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQog
dHlwZWRlZiBzaWduZWQgY2hhciB5eXR5cGVfaW50ODsKKyNlbHNlCit0eXBlZGVmIHNob3J0IGlu
dCB5eXR5cGVfaW50ODsKICNlbmRpZgogCiAjaWZkZWYgWVlUWVBFX1VJTlQxNgpAQCAtMjI2LDcg
KzI0Myw4IEBAIHR5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQxNjsKICMgIGRlZmluZSBZWVNJ
WkVfVCBfX1NJWkVfVFlQRV9fCiAjIGVsaWYgZGVmaW5lZCBzaXplX3QKICMgIGRlZmluZSBZWVNJ
WkVfVCBzaXplX3QKLSMgZWxpZiAhIGRlZmluZWQgWVlTSVpFX1QKKyMgZWxpZiAhIGRlZmluZWQg
WVlTSVpFX1QgJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwK
KyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQogIyAgaW5j
bHVkZSA8c3RkZGVmLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KICMgIGRl
ZmluZSBZWVNJWkVfVCBzaXplX3QKICMgZWxzZQpAQCAtMjQ4LDMzICsyNjYsNiBAQCB0eXBlZGVm
IHNob3J0IGludCB5eXR5cGVfaW50MTY7CiAjIGVuZGlmCiAjZW5kaWYKIAotI2lmbmRlZiBZWV9B
VFRSSUJVVEUKLSMgaWYgKGRlZmluZWQgX19HTlVDX18gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICYmICgyIDwgX19HTlVDX18gfHwgKF9fR05V
Q19fID09IDIgJiYgOTYgPD0gX19HTlVDX01JTk9SX18pKSkgIFwKLSAgICAgfHwgZGVmaW5lZCBf
X1NVTlBST19DICYmIDB4NTExMCA8PSBfX1NVTlBST19DCi0jICBkZWZpbmUgWVlfQVRUUklCVVRF
KFNwZWMpIF9fYXR0cmlidXRlX18oU3BlYykKLSMgZWxzZQotIyAgZGVmaW5lIFlZX0FUVFJJQlVU
RShTcGVjKSAvKiBlbXB0eSAqLwotIyBlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgWVlfQVRUUklC
VVRFX1BVUkUKLSMgZGVmaW5lIFlZX0FUVFJJQlVURV9QVVJFICAgWVlfQVRUUklCVVRFICgoX19w
dXJlX18pKQotI2VuZGlmCi0KLSNpZm5kZWYgWVlfQVRUUklCVVRFX1VOVVNFRAotIyBkZWZpbmUg
WVlfQVRUUklCVVRFX1VOVVNFRCBZWV9BVFRSSUJVVEUgKChfX3VudXNlZF9fKSkKLSNlbmRpZgot
Ci0jaWYgIWRlZmluZWQgX05vcmV0dXJuIFwKLSAgICAgJiYgKCFkZWZpbmVkIF9fU1REQ19WRVJT
SU9OX18gfHwgX19TVERDX1ZFUlNJT05fXyA8IDIwMTExMikKLSMgaWYgZGVmaW5lZCBfTVNDX1ZF
UiAmJiAxMjAwIDw9IF9NU0NfVkVSCi0jICBkZWZpbmUgX05vcmV0dXJuIF9fZGVjbHNwZWMgKG5v
cmV0dXJuKQotIyBlbHNlCi0jICBkZWZpbmUgX05vcmV0dXJuIFlZX0FUVFJJQlVURSAoKF9fbm9y
ZXR1cm5fXykpCi0jIGVuZGlmCi0jZW5kaWYKLQogLyogU3VwcHJlc3MgdW51c2VkLXZhcmlhYmxl
IHdhcm5pbmdzIGJ5ICJ1c2luZyIgRS4gICovCiAjaWYgISBkZWZpbmVkIGxpbnQgfHwgZGVmaW5l
ZCBfX0dOVUNfXwogIyBkZWZpbmUgWVlVU0UoRSkgKCh2b2lkKSAoRSkpCkBAIC0yODIsMjYgKzI3
MywyNCBAQCB0eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50MTY7CiAjIGRlZmluZSBZWVVTRShF
KSAvKiBlbXB0eSAqLwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkIF9fR05VQ19fICYmIDQwNyA8PSBf
X0dOVUNfXyAqIDEwMCArIF9fR05VQ19NSU5PUl9fCi0vKiBTdXBwcmVzcyBhbiBpbmNvcnJlY3Qg
ZGlhZ25vc3RpYyBhYm91dCB5eWx2YWwgYmVpbmcgdW5pbml0aWFsaXplZC4gICovCi0jIGRlZmlu
ZSBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTiBcCi0gICAgX1ByYWdtYSAoIkdD
QyBkaWFnbm9zdGljIHB1c2giKSBcCi0gICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIGlnbm9y
ZWQgXCItV3VuaW5pdGlhbGl6ZWRcIiIpXAotICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBp
Z25vcmVkIFwiLVdtYXliZS11bmluaXRpYWxpemVkXCIiKQotIyBkZWZpbmUgWVlfSUdOT1JFX01B
WUJFX1VOSU5JVElBTElaRURfRU5EIFwKLSAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgcG9w
IikKKy8qIElkZW50aXR5IGZ1bmN0aW9uLCB1c2VkIHRvIHN1cHByZXNzIHdhcm5pbmdzIGFib3V0
IGNvbnN0YW50IGNvbmRpdGlvbnMuICAqLworI2lmbmRlZiBsaW50CisjIGRlZmluZSBZWUlEKE4p
IChOKQogI2Vsc2UKLSMgZGVmaW5lIFlZX0lOSVRJQUxfVkFMVUUoVmFsdWUpIFZhbHVlCi0jZW5k
aWYKLSNpZm5kZWYgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4KLSMgZGVmaW5l
IFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOCi0jIGRlZmluZSBZWV9JR05PUkVf
TUFZQkVfVU5JTklUSUFMSVpFRF9FTkQKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVk
IF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQg
X01TQ19WRVIpCitzdGF0aWMgaW50CitZWUlEIChpbnQgeXlpKQorI2Vsc2UKK3N0YXRpYyBpbnQK
K1lZSUQgKHl5aSkKKyAgICBpbnQgeXlpOwogI2VuZGlmCi0jaWZuZGVmIFlZX0lOSVRJQUxfVkFM
VUUKLSMgZGVmaW5lIFlZX0lOSVRJQUxfVkFMVUUoVmFsdWUpIC8qIE5vdGhpbmcuICovCit7Cisg
IHJldHVybiB5eWk7Cit9CiAjZW5kaWYKIAotCiAjaWYgISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwg
WVlFUlJPUl9WRVJCT1NFCiAKIC8qIFRoZSBwYXJzZXIgaW52b2tlcyBhbGxvY2Egb3IgbWFsbG9j
OyBkZWZpbmUgdGhlIG5lY2Vzc2FyeSBzeW1ib2xzLiAgKi8KQEAgLTMxOSw3ICszMDgsOCBAQCB0
eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50MTY7CiAjICAgIGRlZmluZSBhbGxvY2EgX2FsbG9j
YQogIyAgIGVsc2UKICMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgYWxsb2NhCi0jICAgIGlmICEg
ZGVmaW5lZCBfQUxMT0NBX0ggJiYgISBkZWZpbmVkIEVYSVRfU1VDQ0VTUworIyAgICBpZiAhIGRl
ZmluZWQgX0FMTE9DQV9IICYmICEgZGVmaW5lZCBFWElUX1NVQ0NFU1MgJiYgKGRlZmluZWQgX19T
VERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVz
cGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQogIyAgICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElO
RlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KICAgICAgIC8qIFVzZSBFWElUX1NVQ0NFU1Mg
YXMgYSB3aXRuZXNzIGZvciBzdGRsaWIuaC4gICovCiAjICAgICBpZm5kZWYgRVhJVF9TVUNDRVNT
CkBAIC0zMzEsOCArMzIxLDggQEAgdHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDE2OwogIyBl
bmRpZgogCiAjIGlmZGVmIFlZU1RBQ0tfQUxMT0MKLSAgIC8qIFBhY2lmeSBHQ0MncyAnZW1wdHkg
aWYtYm9keScgd2FybmluZy4gICovCi0jICBkZWZpbmUgWVlTVEFDS19GUkVFKFB0cikgZG8geyAv
KiBlbXB0eSAqLzsgfSB3aGlsZSAoMCkKKyAgIC8qIFBhY2lmeSBHQ0MncyBgZW1wdHkgaWYtYm9k
eScgd2FybmluZy4gICovCisjICBkZWZpbmUgWVlTVEFDS19GUkVFKFB0cikgZG8geyAvKiBlbXB0
eSAqLzsgfSB3aGlsZSAoWVlJRCAoMCkpCiAjICBpZm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVN
CiAgICAgLyogVGhlIE9TIG1pZ2h0IGd1YXJhbnRlZSBvbmx5IG9uZSBndWFyZCBwYWdlIGF0IHRo
ZSBib3R0b20gb2YgdGhlIHN0YWNrLAogICAgICAgIGFuZCBhIHBhZ2Ugc2l6ZSBjYW4gYmUgYXMg
c21hbGwgYXMgNDA5NiBieXRlcy4gIFNvIHdlIGNhbm5vdCBzYWZlbHkKQEAgLTM0OCw3ICszMzgs
NyBAQCB0eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50MTY7CiAjICBlbmRpZgogIyAgaWYgKGRl
ZmluZWQgX19jcGx1c3BsdXMgJiYgISBkZWZpbmVkIEVYSVRfU1VDQ0VTUyBcCiAgICAgICAgJiYg
ISAoKGRlZmluZWQgWVlNQUxMT0MgfHwgZGVmaW5lZCBtYWxsb2MpIFwKLSAgICAgICAgICAgICAm
JiAoZGVmaW5lZCBZWUZSRUUgfHwgZGVmaW5lZCBmcmVlKSkpCisJICAgICAmJiAoZGVmaW5lZCBZ
WUZSRUUgfHwgZGVmaW5lZCBmcmVlKSkpCiAjICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJ
TkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KICMgICBpZm5kZWYgRVhJVF9TVUNDRVNTCiAjICAg
IGRlZmluZSBFWElUX1NVQ0NFU1MgMApAQCAtMzU2LDEzICszNDYsMTUgQEAgdHlwZWRlZiBzaG9y
dCBpbnQgeXl0eXBlX2ludDE2OwogIyAgZW5kaWYKICMgIGlmbmRlZiBZWU1BTExPQwogIyAgIGRl
ZmluZSBZWU1BTExPQyBtYWxsb2MKLSMgICBpZiAhIGRlZmluZWQgbWFsbG9jICYmICEgZGVmaW5l
ZCBFWElUX1NVQ0NFU1MKKyMgICBpZiAhIGRlZmluZWQgbWFsbG9jICYmICEgZGVmaW5lZCBFWElU
X1NVQ0NFU1MgJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwK
KyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQogdm9pZCAq
bWFsbG9jIChZWVNJWkVfVCk7IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KICMg
ICBlbmRpZgogIyAgZW5kaWYKICMgIGlmbmRlZiBZWUZSRUUKICMgICBkZWZpbmUgWVlGUkVFIGZy
ZWUKLSMgICBpZiAhIGRlZmluZWQgZnJlZSAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTCisjICAg
aWYgISBkZWZpbmVkIGZyZWUgJiYgISBkZWZpbmVkIEVYSVRfU1VDQ0VTUyAmJiAoZGVmaW5lZCBf
X1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3Bs
dXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCiB2b2lkIGZyZWUgKHZvaWQgKik7IC8qIElORlJJ
TkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KICMgICBlbmRpZgogIyAgZW5kaWYKQEAgLTM3Miw3
ICszNjQsNyBAQCB2b2lkIGZyZWUgKHZvaWQgKik7IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUg
U1BBQ0UgKi8KIAogI2lmICghIGRlZmluZWQgeXlvdmVyZmxvdyBcCiAgICAgICYmICghIGRlZmlu
ZWQgX19jcGx1c3BsdXMgXAotICAgICAgICAgfHwgKGRlZmluZWQgWVlTVFlQRV9JU19UUklWSUFM
ICYmIFlZU1RZUEVfSVNfVFJJVklBTCkpKQorCSB8fCAoZGVmaW5lZCBZWVNUWVBFX0lTX1RSSVZJ
QUwgJiYgWVlTVFlQRV9JU19UUklWSUFMKSkpCiAKIC8qIEEgdHlwZSB0aGF0IGlzIHByb3Blcmx5
IGFsaWduZWQgZm9yIGFueSBzdGFjayBtZW1iZXIuICAqLwogdW5pb24geXlhbGxvYwpAQCAtMzk3
LDE2ICszODksMTYgQEAgdW5pb24geXlhbGxvYwogICAgZWxlbWVudHMgaW4gdGhlIHN0YWNrLCBh
bmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUKICAgIHN0YWNrLiAgQWR2YW5j
ZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRpb24gZm9yIHRoZSBuZXh0CiAgICBz
dGFjay4gICovCi0jIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrX2FsbG9jLCBTdGFjaykg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZG8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgIFlZU0laRV9UIHl5bmV3Ynl0ZXM7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFlZQ09QWSAoJnl5cHRyLT5TdGFja19h
bGxvYywgU3RhY2ssIHl5c2l6ZSk7ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFN0YWNr
ID0gJnl5cHRyLT5TdGFja19hbGxvYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgIHl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNrKSAr
IFlZU1RBQ0tfR0FQX01BWElNVU07IFwKLSAgICAgICAgeXlwdHIgKz0geXluZXdieXRlcyAvIHNp
emVvZiAoKnl5cHRyKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIH0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICB3aGlsZSAoMCkKKyMgZGVmaW5lIFlZU1RBQ0tfUkVMT0NBVEUoU3RhY2tfYWxsb2Ms
IFN0YWNrKQkJCQlcCisgICAgZG8JCQkJCQkJCQlcCisgICAgICB7CQkJCQkJCQkJXAorCVlZU0la
RV9UIHl5bmV3Ynl0ZXM7CQkJCQkJXAorCVlZQ09QWSAoJnl5cHRyLT5TdGFja19hbGxvYywgU3Rh
Y2ssIHl5c2l6ZSk7CQkJXAorCVN0YWNrID0gJnl5cHRyLT5TdGFja19hbGxvYzsJCQkJCVwKKwl5
eW5ld2J5dGVzID0geXlzdGFja3NpemUgKiBzaXplb2YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9N
QVhJTVVNOyBcCisJeXlwdHIgKz0geXluZXdieXRlcyAvIHNpemVvZiAoKnl5cHRyKTsJCQkJXAor
ICAgICAgfQkJCQkJCQkJCVwKKyAgICB3aGlsZSAoWVlJRCAoMCkpCiAKICNlbmRpZgogCkBAIC00
MjUsNyArNDE3LDcgQEAgdW5pb24geXlhbGxvYwogICAgICAgICAgIGZvciAoeXlpID0gMDsgeXlp
IDwgKENvdW50KTsgeXlpKyspICAgXAogICAgICAgICAgICAgKERzdClbeXlpXSA9IChTcmMpW3l5
aV07ICAgICAgICAgICAgXAogICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgd2hpbGUgKDApCisgICAgICB3aGlsZSAoWVlJRCAoMCkpCiAjICBl
bmRpZgogIyBlbmRpZgogI2VuZGlmIC8qICFZWUNPUFlfTkVFREVEICovCkBAIC00NDEsMTkgKzQz
MywxNyBAQCB1bmlvbiB5eWFsbG9jCiAjZGVmaW5lIFlZTk5UUyAgMwogLyogWVlOUlVMRVMgLS0g
TnVtYmVyIG9mIHJ1bGVzLiAgKi8KICNkZWZpbmUgWVlOUlVMRVMgIDI2Ci0vKiBZWU5TVEFURVMg
LS0gTnVtYmVyIG9mIHN0YXRlcy4gICovCisvKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2Ygc3RhdGVz
LiAgKi8KICNkZWZpbmUgWVlOU1RBVEVTICA1MgogCi0vKiBZWVRSQU5TTEFURVtZWVhdIC0tIFN5
bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWVggYXMgcmV0dXJuZWQKLSAgIGJ5IHl5bGV4
LCB3aXRoIG91dC1vZi1ib3VuZHMgY2hlY2tpbmcuICAqLworLyogWVlUUkFOU0xBVEUoWVlMRVgp
IC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCiAjZGVm
aW5lIFlZVU5ERUZUT0sgIDIKICNkZWZpbmUgWVlNQVhVVE9LICAgMjY3CiAKLSNkZWZpbmUgWVlU
UkFOU0xBVEUoWVlYKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyNkZWZpbmUgWVlUUkFOU0xBVEUoWVlYKQkJCQkJCVwKICAgKCh1bnNpZ25lZCBpbnQp
IChZWVgpIDw9IFlZTUFYVVRPSyA/IHl5dHJhbnNsYXRlW1lZWF0gOiBZWVVOREVGVE9LKQogCi0v
KiBZWVRSQU5TTEFURVtUT0tFTi1OVU1dIC0tIFN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0
byBUT0tFTi1OVU0KLSAgIGFzIHJldHVybmVkIGJ5IHl5bGV4LCB3aXRob3V0IG91dC1vZi1ib3Vu
ZHMgY2hlY2tpbmcuICAqLworLyogWVlUUkFOU0xBVEVbWVlMRVhdIC0tIEJpc29uIHN5bWJvbCBu
dW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX3Vp
bnQ4IHl5dHJhbnNsYXRlW10gPQogewogICAgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCkBAIC00ODYsMTIgKzQ3Niwz
NiBAQCBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dHJhbnNsYXRlW10gPQogfTsKIAogI2lm
IFlZREVCVUcKLSAgLyogWVlSTElORVtZWU5dIC0tIFNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVt
YmVyIFlZTiB3YXMgZGVmaW5lZC4gICovCisvKiBZWVBSSFNbWVlOXSAtLSBJbmRleCBvZiB0aGUg
Zmlyc3QgUkhTIHN5bWJvbCBvZiBydWxlIG51bWJlciBZWU4gaW4KKyAgIFlZUkhTLiAgKi8KK3N0
YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlwcmhzW10gPQoreworICAgICAgIDAsICAgICAwLCAg
ICAgMywgICAgIDUsICAgICA3LCAgICAxMSwgICAgMTUsICAgIDE5LCAgICAyMywgICAgMjcsCisg
ICAgICAzMSwgICAgMzUsICAgIDM5LCAgICA0MywgICAgNDcsICAgIDUxLCAgICA1NSwgICAgNTks
ICAgIDYzLCAgICA2NywKKyAgICAgIDcxLCAgICA3NSwgICAgNzksICAgIDgyLCAgICA4NSwgICAg
ODgsICAgIDkxCit9OworCisvKiBZWVJIUyAtLSBBIGAtMSctc2VwYXJhdGVkIGxpc3Qgb2YgdGhl
IHJ1bGVzJyBSSFMuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5cmhzW10gPQorewor
ICAgICAgMjgsICAgICAwLCAgICAtMSwgICAgMjksICAgIC0xLCAgICAgMywgICAgLTEsICAgIDI5
LCAgICAgNCwgICAgMjksCisgICAgICAtMSwgICAgMjksICAgICA1LCAgICAyOSwgICAgLTEsICAg
IDI5LCAgICAgNiwgICAgMjksICAgIC0xLCAgICAyOSwKKyAgICAgICA3LCAgICAyOSwgICAgLTEs
ICAgIDI5LCAgICAgOCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgIDksICAgIDI5LAorICAgICAg
LTEsICAgIDI5LCAgICAxMCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTMsICAgIDI5LCAgICAt
MSwgICAgMjksCisgICAgICAxNCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTIsICAgIDI5LCAg
ICAtMSwgICAgMjksICAgIDExLCAgICAyOSwKKyAgICAgIC0xLCAgICAyOSwgICAgMTUsICAgIDI5
LCAgICAtMSwgICAgMjksICAgIDE2LCAgICAyOSwgICAgLTEsICAgIDI5LAorICAgICAgMTgsICAg
IDI5LCAgICAtMSwgICAgMjksICAgIDE3LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAyMSwgICAg
MjksCisgICAgICAtMSwgICAgMjksICAgIDIwLCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxOSwg
ICAgMjksICAgIC0xLCAgICAyMywKKyAgICAgIDI5LCAgICAtMSwgICAgMjQsICAgIDI5LCAgICAt
MSwgICAgMTgsICAgIDI5LCAgICAtMSwgICAgMTcsICAgIDI5LAorICAgICAgLTEsICAgIDI1LCAg
ICAyOSwgICAgMjYsICAgIC0xCit9OworCisvKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUg
d2hlcmUgcnVsZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5
cGVfdWludDggeXlybGluZVtdID0KIHsKLSAgICAgICAwLCAgICA5NywgICAgOTcsICAgMTA0LCAg
IDEwNSwgICAxMDgsICAgMTExLCAgIDExNCwgICAxMTcsICAgMTIwLAotICAgICAxMjMsICAgMTI2
LCAgIDEyOSwgICAxMzIsICAgMTM1LCAgIDEzOCwgICAxNDEsICAgMTQ0LCAgIDE0NywgICAxNTAs
Ci0gICAgIDE2MywgICAxNzYsICAgMTc5LCAgIDE4MiwgICAxODUsICAgMTg4LCAgIDE5MQorICAg
ICAgIDAsICAgIDkxLCAgICA5MSwgICAgOTgsICAgIDk5LCAgIDEwMiwgICAxMDUsICAgMTA4LCAg
IDExMSwgICAxMTQsCisgICAgIDExNywgICAxMjAsICAgMTIzLCAgIDEyNiwgICAxMjksICAgMTMy
LCAgIDEzNSwgICAxMzgsICAgMTQxLCAgIDE0NCwKKyAgICAgMTU3LCAgIDE3MCwgICAxNzMsICAg
MTc2LCAgIDE3OSwgICAxODIsICAgMTg1CiB9OwogI2VuZGlmCiAKQEAgLTUwMSwxNiArNTE1LDE2
IEBAIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlybGluZVtdID0KIHN0YXRpYyBjb25zdCBj
aGFyICpjb25zdCB5eXRuYW1lW10gPQogewogICAiJGVuZCIsICJlcnJvciIsICIkdW5kZWZpbmVk
IiwgIlRPS19DT05TVF9JTlQiLCAiVE9LX09QX09SIiwKLSAgIlRPS19PUF9BTkQiLCAiJ3wnIiwg
IideJyIsICInJiciLCAiVE9LX09QX0VRIiwgIlRPS19PUF9ORSIsICInPCciLAotICAiJz4nIiwg
IlRPS19PUF9MRSIsICJUT0tfT1BfR0UiLCAiVE9LX09QX0xFRlQiLCAiVE9LX09QX1JJR0hUIiwg
IicrJyIsCisgICJUT0tfT1BfQU5EIiwgIid8JyIsICInXiciLCAiJyYnIiwgIlRPS19PUF9ORSIs
ICJUT0tfT1BfRVEiLCAiJzwnIiwKKyAgIic+JyIsICJUT0tfT1BfR0UiLCAiVE9LX09QX0xFIiwg
IlRPS19PUF9SSUdIVCIsICJUT0tfT1BfTEVGVCIsICInKyciLAogICAiJy0nIiwgIicqJyIsICIn
LyciLCAiJyUnIiwgIlRPS19VTkFSWSIsICInISciLCAiJ34nIiwgIicoJyIsICInKSciLAotICAi
JGFjY2VwdCIsICJpbnB1dCIsICJleHByZXNzaW9uIiwgWVlfTlVMTFBUUgorICAiJGFjY2VwdCIs
ICJpbnB1dCIsICJleHByZXNzaW9uIiwgWVlfTlVMTAogfTsKICNlbmRpZgogCiAjIGlmZGVmIFlZ
UFJJTlQKLS8qIFlZVE9LTlVNW05VTV0gLS0gKEV4dGVybmFsKSB0b2tlbiBudW1iZXIgY29ycmVz
cG9uZGluZyB0byB0aGUKLSAgIChpbnRlcm5hbCkgc3ltYm9sIG51bWJlciBOVU0gKHdoaWNoIG11
c3QgYmUgdGhhdCBvZiBhIHRva2VuKS4gICovCisvKiBZWVRPS05VTVtZWUxFWC1OVU1dIC0tIElu
dGVybmFsIHRva2VuIG51bWJlciBjb3JyZXNwb25kaW5nIHRvCisgICB0b2tlbiBZWUxFWC1OVU0u
ICAqLwogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXl0b2tudW1bXSA9CiB7CiAgICAgICAg
MCwgICAyNTYsICAgMjU3LCAgIDI1OCwgICAyNTksICAgMjYwLCAgIDEyNCwgICAgOTQsICAgIDM4
LCAgIDI2MSwKQEAgLTUxOSwxOCArNTMzLDQ0IEBAIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2
IHl5dG9rbnVtW10gPQogfTsKICMgZW5kaWYKIAotI2RlZmluZSBZWVBBQ1RfTklORiAtMTEKKy8q
IFlZUjFbWVlOXSAtLSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1bGUgWVlOIGRlcml2
ZXMuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIxW10gPQoreworICAgICAgIDAs
ICAgIDI3LCAgICAyOCwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwg
ICAgMjksCisgICAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAy
OSwgICAgMjksICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAg
ICAyOSwgICAgMjksICAgIDI5Cit9OwogCi0jZGVmaW5lIHl5cGFjdF92YWx1ZV9pc19kZWZhdWx0
KFl5c3RhdGUpIFwKLSAgKCEhKChZeXN0YXRlKSA9PSAoLTExKSkpCisvKiBZWVIyW1lZTl0gLS0g
TnVtYmVyIG9mIHN5bWJvbHMgY29tcG9zaW5nIHJpZ2h0IGhhbmQgc2lkZSBvZiBydWxlIFlZTi4g
ICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjJbXSA9Cit7CisgICAgICAgMCwgICAg
IDIsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAg
MywKKyAgICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAg
ICAgMywgICAgIDMsICAgICAzLAorICAgICAgIDMsICAgICAzLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDMKK307CiAKLSNkZWZpbmUgWVlUQUJMRV9OSU5GIC0xCisvKiBZWURFRkFD
VFtTVEFURS1OQU1FXSAtLSBEZWZhdWx0IHJlZHVjdGlvbiBudW1iZXIgaW4gc3RhdGUgU1RBVEUt
TlVNLgorICAgUGVyZm9ybWVkIHdoZW4gWVlUQUJMRSBkb2Vzbid0IHNwZWNpZnkgc29tZXRoaW5n
IGVsc2UgdG8gZG8uICBaZXJvCisgICBtZWFucyB0aGUgZGVmYXVsdCBpcyBhbiBlcnJvci4gICov
CitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5ZGVmYWN0W10gPQoreworICAgICAgIDAsICAg
ICAzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMiwgICAg
MjUsCisgICAgICAyNCwgICAgMjIsICAgIDIzLCAgICAgMCwgICAgIDEsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgMjYsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksCisg
ICAgICAxMCwgICAgMTQsICAgIDEzLCAgICAxMSwgICAgMTIsICAgIDE1LCAgICAxNiwgICAgMTgs
ICAgIDE3LCAgICAyMSwKKyAgICAgIDIwLCAgICAxOQorfTsKIAotI2RlZmluZSB5eXRhYmxlX3Zh
bHVlX2lzX2Vycm9yKFl5dGFibGVfdmFsdWUpIFwKLSAgMAorLyogWVlERUZHT1RPW05URVJNLU5V
TV0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5ZGVmZ290b1tdID0KK3sKKyAgICAg
IC0xLCAgICAgNywgICAgIDgKK307CiAKLSAgLyogWVlQQUNUW1NUQVRFLU5VTV0gLS0gSW5kZXgg
aW4gWVlUQUJMRSBvZiB0aGUgcG9ydGlvbiBkZXNjcmliaW5nCi0gICAgIFNUQVRFLU5VTS4gICov
CisvKiBZWVBBQ1RbU1RBVEUtTlVNXSAtLSBJbmRleCBpbiBZWVRBQkxFIG9mIHRoZSBwb3J0aW9u
IGRlc2NyaWJpbmcKKyAgIFNUQVRFLU5VTS4gICovCisjZGVmaW5lIFlZUEFDVF9OSU5GIC0xMQog
c3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXBhY3RbXSA9CiB7CiAgICAgICA0NiwgICAtMTEs
ICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgMTIsICAgIDY4LCAgIC0xMSwK
QEAgLTU0MSwzNCArNTgxLDE2IEBAIHN0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlwYWN0W10g
PQogICAgICAtMTEsICAgLTExCiB9OwogCi0gIC8qIFlZREVGQUNUW1NUQVRFLU5VTV0gLS0gRGVm
YXVsdCByZWR1Y3Rpb24gbnVtYmVyIGluIHN0YXRlIFNUQVRFLU5VTS4KLSAgICAgUGVyZm9ybWVk
IHdoZW4gWVlUQUJMRSBkb2VzIG5vdCBzcGVjaWZ5IHNvbWV0aGluZyBlbHNlIHRvIGRvLiAgWmVy
bwotICAgICBtZWFucyB0aGUgZGVmYXVsdCBpcyBhbiBlcnJvci4gICovCi1zdGF0aWMgY29uc3Qg
eXl0eXBlX3VpbnQ4IHl5ZGVmYWN0W10gPQotewotICAgICAgIDAsICAgICAzLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMiwgICAgMjUsCi0gICAgICAyNCwg
ICAgMjIsICAgIDIzLCAgICAgMCwgICAgIDEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjYsICAg
ICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgMTAsCi0gICAgICAgOSwgICAgMTQs
ICAgIDEzLCAgICAxMiwgICAgMTEsICAgIDE2LCAgICAxNSwgICAgMTgsICAgIDE3LCAgICAyMSwK
LSAgICAgIDIwLCAgICAxOQotfTsKLQotICAvKiBZWVBHT1RPW05URVJNLU5VTV0uICAqLworLyog
WVlQR09UT1tOVEVSTS1OVU1dLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eXBnb3Rv
W10gPQogewogICAgICAtMTEsICAgLTExLCAgICAtMgogfTsKIAotICAvKiBZWURFRkdPVE9bTlRF
Uk0tTlVNXS4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlkZWZnb3RvW10gPQotewot
ICAgICAgLTEsICAgICA3LCAgICAgOAotfTsKLQotICAvKiBZWVRBQkxFW1lZUEFDVFtTVEFURS1O
VU1dXSAtLSBXaGF0IHRvIGRvIGluIHN0YXRlIFNUQVRFLU5VTS4gIElmCi0gICAgIHBvc2l0aXZl
LCBzaGlmdCB0aGF0IHRva2VuLiAgSWYgbmVnYXRpdmUsIHJlZHVjZSB0aGUgcnVsZSB3aG9zZQot
ICAgICBudW1iZXIgaXMgdGhlIG9wcG9zaXRlLiAgSWYgWVlUQUJMRV9OSU5GLCBzeW50YXggZXJy
b3IuICAqLworLyogWVlUQUJMRVtZWVBBQ1RbU1RBVEUtTlVNXV0uICBXaGF0IHRvIGRvIGluIHN0
YXRlIFNUQVRFLU5VTS4gIElmCisgICBwb3NpdGl2ZSwgc2hpZnQgdGhhdCB0b2tlbi4gIElmIG5l
Z2F0aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hpY2gKKyAgIG51bWJlciBpcyB0aGUgb3Bwb3NpdGUu
ICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci4gICovCisjZGVmaW5lIFlZVEFCTEVfTklO
RiAtMQogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRhYmxlW10gPQogewogICAgICAgIDks
ICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwg
ICAgMzAsCkBAIC01OTEsNiArNjEzLDEyIEBAIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXl0
YWJsZVtdID0KICAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIKIH07
CiAKKyNkZWZpbmUgeXlwYWN0X3ZhbHVlX2lzX2RlZmF1bHQoWXlzdGF0ZSkgXAorICAoISEoKFl5
c3RhdGUpID09ICgtMTEpKSkKKworI2RlZmluZSB5eXRhYmxlX3ZhbHVlX2lzX2Vycm9yKFl5dGFi
bGVfdmFsdWUpIFwKKyAgWVlJRCAoMCkKKwogc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5Y2hl
Y2tbXSA9CiB7CiAgICAgICAgMiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgIDE1LCAg
ICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwKQEAgLTYxMyw4ICs2NDEsOCBAQCBzdGF0aWMgY29u
c3QgeXl0eXBlX2ludDggeXljaGVja1tdID0KICAgICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5
LCAgICAyMCwgICAgMjEKIH07CiAKLSAgLyogWVlTVE9TW1NUQVRFLU5VTV0gLS0gVGhlIChpbnRl
cm5hbCBudW1iZXIgb2YgdGhlKSBhY2Nlc3NpbmcKLSAgICAgc3ltYm9sIG9mIHN0YXRlIFNUQVRF
LU5VTS4gICovCisvKiBZWVNUT1NbU1RBVEUtTlVNXSAtLSBUaGUgKGludGVybmFsIG51bWJlciBv
ZiB0aGUpIGFjY2Vzc2luZworICAgc3ltYm9sIG9mIHN0YXRlIFNUQVRFLU5VTS4gICovCiBzdGF0
aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5c3Rvc1tdID0KIHsKICAgICAgICAwLCAgICAgMywgICAg
MTcsICAgIDE4LCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyOCwgICAgMjksICAgIDI5LApAQCAt
NjI1LDMyICs2NTMsMzAgQEAgc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXN0b3NbXSA9CiAg
ICAgICAyOSwgICAgMjkKIH07CiAKLSAgLyogWVlSMVtZWU5dIC0tIFN5bWJvbCBudW1iZXIgb2Yg
c3ltYm9sIHRoYXQgcnVsZSBZWU4gZGVyaXZlcy4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3Vp
bnQ4IHl5cjFbXSA9Ci17Ci0gICAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMjksICAg
IDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwKLSAgICAgIDI5LCAgICAyOSwgICAgMjks
ICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LAotICAgICAg
MjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjkKLX07Ci0KLSAgLyog
WVlSMltZWU5dIC0tIE51bWJlciBvZiBzeW1ib2xzIG9uIHRoZSByaWdodCBoYW5kIHNpZGUgb2Yg
cnVsZSBZWU4uICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIyW10gPQotewotICAg
ICAgIDAsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAg
ICAgMywgICAgIDMsCi0gICAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAz
LCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywKLSAgICAgICAzLCAgICAgMywgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAzCi19OwotCi0KLSNkZWZpbmUgeXllcnJvayAgICAgICAg
ICh5eWVycnN0YXR1cyA9IDApCi0jZGVmaW5lIHl5Y2xlYXJpbiAgICAgICAoeXljaGFyID0gWVlF
TVBUWSkKLSNkZWZpbmUgWVlFTVBUWSAgICAgICAgICgtMikKLSNkZWZpbmUgWVlFT0YgICAgICAg
ICAgIDAKLQotI2RlZmluZSBZWUFDQ0VQVCAgICAgICAgZ290byB5eWFjY2VwdGxhYgotI2RlZmlu
ZSBZWUFCT1JUICAgICAgICAgZ290byB5eWFib3J0bGFiCi0jZGVmaW5lIFlZRVJST1IgICAgICAg
ICBnb3RvIHl5ZXJyb3JsYWIKLQorI2RlZmluZSB5eWVycm9rCQkoeXllcnJzdGF0dXMgPSAwKQor
I2RlZmluZSB5eWNsZWFyaW4JKHl5Y2hhciA9IFlZRU1QVFkpCisjZGVmaW5lIFlZRU1QVFkJCSgt
MikKKyNkZWZpbmUgWVlFT0YJCTAKKworI2RlZmluZSBZWUFDQ0VQVAlnb3RvIHl5YWNjZXB0bGFi
CisjZGVmaW5lIFlZQUJPUlQJCWdvdG8geXlhYm9ydGxhYgorI2RlZmluZSBZWUVSUk9SCQlnb3Rv
IHl5ZXJyb3JsYWIKKworCisvKiBMaWtlIFlZRVJST1IgZXhjZXB0IGRvIGNhbGwgeXllcnJvci4g
IFRoaXMgcmVtYWlucyBoZXJlIHRlbXBvcmFyaWx5CisgICB0byBlYXNlIHRoZSB0cmFuc2l0aW9u
IHRvIHRoZSBuZXcgbWVhbmluZyBvZiBZWUVSUk9SLCBmb3IgR0NDLgorICAgT25jZSBHQ0MgdmVy
c2lvbiAyIGhhcyBzdXBwbGFudGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICBIb3dldmVyLAor
ICAgWVlGQUlMIGFwcGVhcnMgdG8gYmUgaW4gdXNlLiAgTmV2ZXJ0aGVsZXNzLCBpdCBpcyBmb3Jt
YWxseSBkZXByZWNhdGVkCisgICBpbiBCaXNvbiAyLjQuMidzIE5FV1MgZW50cnksIHdoZXJlIGEg
cGxhbiB0byBwaGFzZSBpdCBvdXQgaXMKKyAgIGRpc2N1c3NlZC4gICovCisKKyNkZWZpbmUgWVlG
QUlMCQlnb3RvIHl5ZXJybGFiCisjaWYgZGVmaW5lZCBZWUZBSUwKKyAgLyogVGhpcyBpcyBoZXJl
IHRvIHN1cHByZXNzIHdhcm5pbmdzIGZyb20gdGhlIEdDQyBjcHAncworICAgICAtV3VudXNlZC1t
YWNyb3MuICBOb3JtYWxseSB3ZSBkb24ndCB3b3JyeSBhYm91dCB0aGF0IHdhcm5pbmcsIGJ1dAor
ICAgICBzb21lIHVzZXJzIGRvLCBhbmQgd2Ugd2FudCB0byBtYWtlIGl0IGVhc3kgZm9yIHVzZXJz
IHRvIHJlbW92ZQorICAgICBZWUZBSUwgdXNlcywgd2hpY2ggd2lsbCBwcm9kdWNlIHdhcm5pbmdz
IGZyb20gQmlzb24gMi41LiAgKi8KKyNlbmRpZgogCiAjZGVmaW5lIFlZUkVDT1ZFUklORygpICAo
ISF5eWVycnN0YXR1cykKIApAQCAtNjY3LDE1ICs2OTMsMjcgQEAgZG8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgZWxzZSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CiAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgICAgeXllcnJvciAoY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3I6IGNh
bm5vdCBiYWNrIHVwIikpOyBcCi0gICAgICBZWUVSUk9SOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXdoaWxlICgwKQorICAgICAg
WVlFUlJPUjsJCQkJCQkJXAorICAgIH0JCQkJCQkJCVwKK3doaWxlIChZWUlEICgwKSkKIAogLyog
RXJyb3IgdG9rZW4gbnVtYmVyICovCi0jZGVmaW5lIFlZVEVSUk9SICAgICAgICAxCi0jZGVmaW5l
IFlZRVJSQ09ERSAgICAgICAyNTYKKyNkZWZpbmUgWVlURVJST1IJMQorI2RlZmluZSBZWUVSUkNP
REUJMjU2CiAKIAorLyogVGhpcyBtYWNybyBpcyBwcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0
aWJpbGl0eS4gKi8KKyNpZm5kZWYgWVlfTE9DQVRJT05fUFJJTlQKKyMgZGVmaW5lIFlZX0xPQ0FU
SU9OX1BSSU5UKEZpbGUsIExvYykgKCh2b2lkKSAwKQorI2VuZGlmCisKKworLyogWVlMRVggLS0g
Y2FsbGluZyBgeXlsZXgnIHdpdGggdGhlIHJpZ2h0IGFyZ3VtZW50cy4gICovCisjaWZkZWYgWVlM
RVhfUEFSQU0KKyMgZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsLCBZWUxFWF9QQVJBTSkKKyNl
bHNlCisjIGRlZmluZSBZWUxFWCB5eWxleCAoJnl5bHZhbCwgY29udGV4dCkKKyNlbmRpZgogCiAv
KiBFbmFibGUgZGVidWdnaW5nIGlmIHJlcXVlc3RlZC4gICovCiAjaWYgWVlERUJVRwpAQCAtNjg1
LDQ3ICs3MjMsNTggQEAgd2hpbGUgKDApCiAjICBkZWZpbmUgWVlGUFJJTlRGIGZwcmludGYKICMg
ZW5kaWYKIAotIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpICAgICAgICAgICAgICAgICAgICAgICAg
XAotZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBp
ZiAoeXlkZWJ1ZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFlZRlBS
SU5URiBBcmdzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSB3aGlsZSAoMCkKKyMg
ZGVmaW5lIFlZRFBSSU5URihBcmdzKQkJCVwKK2RvIHsJCQkJCQlcCisgIGlmICh5eWRlYnVnKQkJ
CQkJXAorICAgIFlZRlBSSU5URiBBcmdzOwkJCQlcCit9IHdoaWxlIChZWUlEICgwKSkKIAotLyog
VGhpcyBtYWNybyBpcyBwcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gKi8KLSNp
Zm5kZWYgWVlfTE9DQVRJT05fUFJJTlQKLSMgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUs
IExvYykgKCh2b2lkKSAwKQotI2VuZGlmCisjIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUs
IFR5cGUsIFZhbHVlLCBMb2NhdGlvbikJCQkgIFwKK2RvIHsJCQkJCQkJCQkgIFwKKyAgaWYgKHl5
ZGVidWcpCQkJCQkJCQkgIFwKKyAgICB7CQkJCQkJCQkJICBcCisgICAgICBZWUZQUklOVEYgKHN0
ZGVyciwgIiVzICIsIFRpdGxlKTsJCQkJCSAgXAorICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRl
cnIsCQkJCQkJICBcCisJCSAgVHlwZSwgVmFsdWUsIGNvbnRleHQpOyBcCisgICAgICBZWUZQUklO
VEYgKHN0ZGVyciwgIlxuIik7CQkJCQkJICBcCisgICAgfQkJCQkJCQkJCSAgXAorfSB3aGlsZSAo
WVlJRCAoMCkpCiAKIAotIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1
ZSwgTG9jYXRpb24pICAgICAgICAgICAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
aWYgKHl5ZGVidWcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBZWUZQUklOVEYgKHN0
ZGVyciwgIiVzICIsIFRpdGxlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgVHlwZSwgVmFsdWUsIGNvbnRl
eHQpOyBcCi0gICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSB3aGlsZSAo
MCkKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IFBy
aW50IHRoaXMgc3ltYm9sJ3MgdmFsdWUgb24gWVlPVVRQVVQuICB8Ci1gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLgorfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKK2AtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qQVJHU1VTRUQqLworI2lmIChkZWZpbmVkIF9f
U1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1
c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKIHN0YXRpYyB2b2lkCiB5eV9zeW1ib2xfdmFsdWVf
cHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3Qg
eXl2YWx1ZXAsIENvbnRleHQgKmNvbnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3N5bWJv
bF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpCisgICAg
RklMRSAqeXlvdXRwdXQ7CisgICAgaW50IHl5dHlwZTsKKyAgICBZWVNUWVBFIGNvbnN0ICogY29u
c3QgeXl2YWx1ZXA7CisgICAgQ29udGV4dCAqY29udGV4dDsKKyNlbmRpZgogewogICBGSUxFICp5
eW8gPSB5eW91dHB1dDsKICAgWVlVU0UgKHl5byk7Ci0gIFlZVVNFIChjb250ZXh0KTsKICAgaWYg
KCF5eXZhbHVlcCkKICAgICByZXR1cm47CisgIFlZVVNFIChjb250ZXh0KTsKICMgaWZkZWYgWVlQ
UklOVAogICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQogICAgIFlZUFJJTlQgKHl5b3V0cHV0LCB5
eXRva251bVt5eXR5cGVdLCAqeXl2YWx1ZXApOworIyBlbHNlCisgIFlZVVNFICh5eW91dHB1dCk7
CiAjIGVuZGlmCi0gIFlZVVNFICh5eXR5cGUpOworICBzd2l0Y2ggKHl5dHlwZSkKKyAgICB7Cisg
ICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKIApAQCAtNzMzLDExICs3
ODIsMjMgQEAgeXlfc3ltYm9sX3ZhbHVlX3ByaW50IChGSUxFICp5eW91dHB1dCwgaW50IHl5dHlw
ZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWUKIHwgUHJpbnQgdGhpcyBzeW1ib2wgb24g
WVlPVVRQVVQuICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisjaWYg
KGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVm
aW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQogc3RhdGljIHZvaWQKIHl5X3N5
bWJvbF9wcmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBj
b25zdCB5eXZhbHVlcCwgQ29udGV4dCAqY29udGV4dCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlf
c3ltYm9sX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgY29udGV4dCkKKyAgICBG
SUxFICp5eW91dHB1dDsKKyAgICBpbnQgeXl0eXBlOworICAgIFlZU1RZUEUgY29uc3QgKiBjb25z
dCB5eXZhbHVlcDsKKyAgICBDb250ZXh0ICpjb250ZXh0OworI2VuZGlmCiB7Ci0gIFlZRlBSSU5U
RiAoeXlvdXRwdXQsICIlcyAlcyAoIiwKLSAgICAgICAgICAgICB5eXR5cGUgPCBZWU5UT0tFTlMg
PyAidG9rZW4iIDogIm50ZXJtIiwgeXl0bmFtZVt5eXR5cGVdKTsKKyAgaWYgKHl5dHlwZSA8IFlZ
TlRPS0VOUykKKyAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAidG9rZW4gJXMgKCIsIHl5dG5hbWVb
eXl0eXBlXSk7CisgIGVsc2UKKyAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAibnRlcm0gJXMgKCIs
IHl5dG5hbWVbeXl0eXBlXSk7CiAKICAgeXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwg
eXl0eXBlLCB5eXZhbHVlcCwgY29udGV4dCk7CiAgIFlZRlBSSU5URiAoeXlvdXRwdXQsICIpIik7
CkBAIC03NDgsOCArODA5LDE2IEBAIHl5X3N5bWJvbF9wcmludCAoRklMRSAqeXlvdXRwdXQsIGlu
dCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcCwgQ29uCiB8IFRPUCAoaW5j
bHVkZWQpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLwogCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5
OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0Nf
VkVSKQogc3RhdGljIHZvaWQKIHl5X3N0YWNrX3ByaW50ICh5eXR5cGVfaW50MTYgKnl5Ym90dG9t
LCB5eXR5cGVfaW50MTYgKnl5dG9wKQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9zdGFja19wcmlu
dCAoeXlib3R0b20sIHl5dG9wKQorICAgIHl5dHlwZV9pbnQxNiAqeXlib3R0b207CisgICAgeXl0
eXBlX2ludDE2ICp5eXRvcDsKKyNlbmRpZgogewogICBZWUZQUklOVEYgKHN0ZGVyciwgIlN0YWNr
IG5vdyIpOwogICBmb3IgKDsgeXlib3R0b20gPD0geXl0b3A7IHl5Ym90dG9tKyspCkBAIC03NjAs
NDIgKzgyOSw1MCBAQCB5eV9zdGFja19wcmludCAoeXl0eXBlX2ludDE2ICp5eWJvdHRvbSwgeXl0
eXBlX2ludDE2ICp5eXRvcCkKICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwogfQogCi0jIGRl
ZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeXlfc3RhY2tfcHJpbnQgKChCb3R0b20pLCAo
VG9wKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSB3aGlsZSAoMCkKKyMgZGVmaW5l
IFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKQkJCQlcCitkbyB7CQkJCQkJCQlcCisgIGlmICh5
eWRlYnVnKQkJCQkJCQlcCisgICAgeXlfc3RhY2tfcHJpbnQgKChCb3R0b20pLCAoVG9wKSk7CQkJ
CVwKK30gd2hpbGUgKFlZSUQgKDApKQogCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLgogfCBSZXBvcnQgdGhhdCB0aGUgWVlSVUxFIGlzIGdvaW5n
IHRvIGJlIHJlZHVjZWQuICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKi8KIAorI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlf
X0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZF
UikKIHN0YXRpYyB2b2lkCi15eV9yZWR1Y2VfcHJpbnQgKHl5dHlwZV9pbnQxNiAqeXlzc3AsIFlZ
U1RZUEUgKnl5dnNwLCBpbnQgeXlydWxlLCBDb250ZXh0ICpjb250ZXh0KQoreXlfcmVkdWNlX3By
aW50IChZWVNUWVBFICp5eXZzcCwgaW50IHl5cnVsZSwgQ29udGV4dCAqY29udGV4dCkKKyNlbHNl
CitzdGF0aWMgdm9pZAoreXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgeXlydWxlLCBjb250ZXh0KQor
ICAgIFlZU1RZUEUgKnl5dnNwOworICAgIGludCB5eXJ1bGU7CisgICAgQ29udGV4dCAqY29udGV4
dDsKKyNlbmRpZgogewotICB1bnNpZ25lZCBsb25nIGludCB5eWxubyA9IHl5cmxpbmVbeXlydWxl
XTsKICAgaW50IHl5bnJocyA9IHl5cjJbeXlydWxlXTsKICAgaW50IHl5aTsKKyAgdW5zaWduZWQg
bG9uZyBpbnQgeXlsbm8gPSB5eXJsaW5lW3l5cnVsZV07CiAgIFlZRlBSSU5URiAoc3RkZXJyLCAi
UmVkdWNpbmcgc3RhY2sgYnkgcnVsZSAlZCAobGluZSAlbHUpOlxuIiwKLSAgICAgICAgICAgICB5
eXJ1bGUgLSAxLCB5eWxubyk7CisJICAgICB5eXJ1bGUgLSAxLCB5eWxubyk7CiAgIC8qIFRoZSBz
eW1ib2xzIGJlaW5nIHJlZHVjZWQuICAqLwogICBmb3IgKHl5aSA9IDA7IHl5aSA8IHl5bnJoczsg
eXlpKyspCiAgICAgewogICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkg
KyAxKTsKLSAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLAotICAgICAgICAgICAgICAgICAg
ICAgICB5eXN0b3NbeXlzc3BbeXlpICsgMSAtIHl5bnJoc11dLAotICAgICAgICAgICAgICAgICAg
ICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIGNvbnRleHQpOworICAgICAgeXlfc3ltYm9sX3By
aW50IChzdGRlcnIsIHl5cmhzW3l5cHJoc1t5eXJ1bGVdICsgeXlpXSwKKwkJICAgICAgICYoeXl2
c3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQorCQkgICAgICAgCQkgICAgICAgLCBjb250ZXh0KTsK
ICAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKICAgICB9CiB9CiAKLSMgZGVmaW5lIFlZ
X1JFRFVDRV9QUklOVChSdWxlKSAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICB5eV9yZWR1Y2VfcHJpbnQgKHl5c3NwLCB5eXZzcCwgUnVsZSwgY29udGV4dCk7IFwK
LX0gd2hpbGUgKDApCisjIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkJCVwKK2RvIHsJCQkJ
CVwKKyAgaWYgKHl5ZGVidWcpCQkJCVwKKyAgICB5eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCBSdWxl
LCBjb250ZXh0KTsgXAorfSB3aGlsZSAoWVlJRCAoMCkpCiAKIC8qIE5vbnplcm8gbWVhbnMgcHJp
bnQgcGFyc2UgdHJhY2UuICBJdCBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQgc28gdGhhdAogICAgbXVs
dGlwbGUgcGFyc2VycyBjYW4gY29leGlzdC4gICovCkBAIC04MDksNyArODg2LDcgQEAgaW50IHl5
ZGVidWc7CiAKIAogLyogWVlJTklUREVQVEggLS0gaW5pdGlhbCBzaXplIG9mIHRoZSBwYXJzZXIn
cyBzdGFja3MuICAqLwotI2lmbmRlZiBZWUlOSVRERVBUSAorI2lmbmRlZglZWUlOSVRERVBUSAog
IyBkZWZpbmUgWVlJTklUREVQVEggMjAwCiAjZW5kaWYKIApAQCAtODMyLDggKzkwOSwxNSBAQCBp
bnQgeXlkZWJ1ZzsKICMgICBkZWZpbmUgeXlzdHJsZW4gc3RybGVuCiAjICBlbHNlCiAvKiBSZXR1
cm4gdGhlIGxlbmd0aCBvZiBZWVNUUi4gICovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVm
aW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZp
bmVkIF9NU0NfVkVSKQogc3RhdGljIFlZU0laRV9UCiB5eXN0cmxlbiAoY29uc3QgY2hhciAqeXlz
dHIpCisjZWxzZQorc3RhdGljIFlZU0laRV9UCit5eXN0cmxlbiAoeXlzdHIpCisgICAgY29uc3Qg
Y2hhciAqeXlzdHI7CisjZW5kaWYKIHsKICAgWVlTSVpFX1QgeXlsZW47CiAgIGZvciAoeXlsZW4g
PSAwOyB5eXN0clt5eWxlbl07IHl5bGVuKyspCkBAIC04NDksOCArOTMzLDE2IEBAIHl5c3RybGVu
IChjb25zdCBjaGFyICp5eXN0cikKICMgIGVsc2UKIC8qIENvcHkgWVlTUkMgdG8gWVlERVNULCBy
ZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHRlcm1pbmF0aW5nICdcMCcgaW4KICAgIFlZREVT
VC4gICovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwK
KyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQogc3RhdGlj
IGNoYXIgKgogeXlzdHBjcHkgKGNoYXIgKnl5ZGVzdCwgY29uc3QgY2hhciAqeXlzcmMpCisjZWxz
ZQorc3RhdGljIGNoYXIgKgoreXlzdHBjcHkgKHl5ZGVzdCwgeXlzcmMpCisgICAgY2hhciAqeXlk
ZXN0OworICAgIGNvbnN0IGNoYXIgKnl5c3JjOworI2VuZGlmCiB7CiAgIGNoYXIgKnl5ZCA9IHl5
ZGVzdDsKICAgY29uc3QgY2hhciAqeXlzID0geXlzcmM7CkBAIC04ODAsMjcgKzk3MiwyNyBAQCB5
eXRuYW1lcnIgKGNoYXIgKnl5cmVzLCBjb25zdCBjaGFyICp5eXN0cikKICAgICAgIGNoYXIgY29u
c3QgKnl5cCA9IHl5c3RyOwogCiAgICAgICBmb3IgKDs7KQotICAgICAgICBzd2l0Y2ggKCorK3l5
cCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgY2FzZSAnXCcnOgotICAgICAgICAgIGNhc2UgJywn
OgotICAgICAgICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOwotCi0gICAgICAgICAgY2Fz
ZSAnXFwnOgotICAgICAgICAgICAgaWYgKCorK3l5cCAhPSAnXFwnKQotICAgICAgICAgICAgICBn
b3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7Ci0gICAgICAgICAgICAvKiBGYWxsIHRocm91Z2guICAq
LwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAoeXlyZXMpCi0gICAgICAgICAg
ICAgIHl5cmVzW3l5bl0gPSAqeXlwOwotICAgICAgICAgICAgeXluKys7Ci0gICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICAgIGNhc2UgJyInOgotICAgICAgICAgICAgaWYgKHl5cmVzKQotICAg
ICAgICAgICAgICB5eXJlc1t5eW5dID0gJ1wwJzsKLSAgICAgICAgICAgIHJldHVybiB5eW47Ci0g
ICAgICAgICAgfQorCXN3aXRjaCAoKisreXlwKQorCSAgeworCSAgY2FzZSAnXCcnOgorCSAgY2Fz
ZSAnLCc6CisJICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKKworCSAgY2FzZSAnXFwnOgor
CSAgICBpZiAoKisreXlwICE9ICdcXCcpCisJICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVz
OworCSAgICAvKiBGYWxsIHRocm91Z2guICAqLworCSAgZGVmYXVsdDoKKwkgICAgaWYgKHl5cmVz
KQorCSAgICAgIHl5cmVzW3l5bl0gPSAqeXlwOworCSAgICB5eW4rKzsKKwkgICAgYnJlYWs7CisK
KwkgIGNhc2UgJyInOgorCSAgICBpZiAoeXlyZXMpCisJICAgICAgeXlyZXNbeXluXSA9ICdcMCc7
CisJICAgIHJldHVybiB5eW47CisJICB9CiAgICAgZG9fbm90X3N0cmlwX3F1b3RlczogOwogICAg
IH0KIApAQCAtOTIzLDExICsxMDE1LDExIEBAIHN0YXRpYyBpbnQKIHl5c3ludGF4X2Vycm9yIChZ
WVNJWkVfVCAqeXltc2dfYWxsb2MsIGNoYXIgKip5eW1zZywKICAgICAgICAgICAgICAgICB5eXR5
cGVfaW50MTYgKnl5c3NwLCBpbnQgeXl0b2tlbikKIHsKLSAgWVlTSVpFX1QgeXlzaXplMCA9IHl5
dG5hbWVyciAoWVlfTlVMTFBUUiwgeXl0bmFtZVt5eXRva2VuXSk7CisgIFlZU0laRV9UIHl5c2l6
ZTAgPSB5eXRuYW1lcnIgKFlZX05VTEwsIHl5dG5hbWVbeXl0b2tlbl0pOwogICBZWVNJWkVfVCB5
eXNpemUgPSB5eXNpemUwOwogICBlbnVtIHsgWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSA9
IDUgfTsKICAgLyogSW50ZXJuYXRpb25hbGl6ZWQgZm9ybWF0IHN0cmluZy4gKi8KLSAgY29uc3Qg
Y2hhciAqeXlmb3JtYXQgPSBZWV9OVUxMUFRSOworICBjb25zdCBjaGFyICp5eWZvcm1hdCA9IFlZ
X05VTEw7CiAgIC8qIEFyZ3VtZW50cyBvZiB5eWZvcm1hdC4gKi8KICAgY2hhciBjb25zdCAqeXlh
cmdbWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTV07CiAgIC8qIE51bWJlciBvZiByZXBvcnRl
ZCB0b2tlbnMgKG9uZSBmb3IgdGhlICJ1bmV4cGVjdGVkIiwgb25lIHBlcgpAQCAtOTM1LDYgKzEw
MjcsMTAgQEAgeXlzeW50YXhfZXJyb3IgKFlZU0laRV9UICp5eW1zZ19hbGxvYywgY2hhciAqKnl5
bXNnLAogICBpbnQgeXljb3VudCA9IDA7CiAKICAgLyogVGhlcmUgYXJlIG1hbnkgcG9zc2liaWxp
dGllcyBoZXJlIHRvIGNvbnNpZGVyOgorICAgICAtIEFzc3VtZSBZWUZBSUwgaXMgbm90IHVzZWQu
ICBJdCdzIHRvbyBmbGF3ZWQgdG8gY29uc2lkZXIuICBTZWUKKyAgICAgICA8aHR0cDovL2xpc3Rz
LmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwOS0xMi9tc2cwMDAyNC5odG1s
PgorICAgICAgIGZvciBkZXRhaWxzLiAgWVlFUlJPUiBpcyBmaW5lIGFzIGl0IGRvZXMgbm90IGlu
dm9rZSB0aGlzCisgICAgICAgZnVuY3Rpb24uCiAgICAgIC0gSWYgdGhpcyBzdGF0ZSBpcyBhIGNv
bnNpc3RlbnQgc3RhdGUgd2l0aCBhIGRlZmF1bHQgYWN0aW9uLCB0aGVuCiAgICAgICAgdGhlIG9u
bHkgd2F5IHRoaXMgZnVuY3Rpb24gd2FzIGludm9rZWQgaXMgaWYgdGhlIGRlZmF1bHQgYWN0aW9u
CiAgICAgICAgaXMgYW4gZXJyb3IgYWN0aW9uLiAgSW4gdGhhdCBjYXNlLCBkb24ndCBjaGVjayBm
b3IgZXhwZWN0ZWQKQEAgLTk4NCw3ICsxMDgwLDcgQEAgeXlzeW50YXhfZXJyb3IgKFlZU0laRV9U
ICp5eW1zZ19hbGxvYywgY2hhciAqKnl5bXNnLAogICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIHl5YXJnW3l5Y291bnQrK10gPSB5eXRuYW1lW3l5eF07CiAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgWVlTSVpFX1QgeXlzaXplMSA9IHl5c2l6ZSArIHl5dG5h
bWVyciAoWVlfTlVMTFBUUiwgeXl0bmFtZVt5eXhdKTsKKyAgICAgICAgICAgICAgICAgIFlZU0la
RV9UIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXRuYW1lcnIgKFlZX05VTEwsIHl5dG5hbWVbeXl4XSk7
CiAgICAgICAgICAgICAgICAgICBpZiAoISAoeXlzaXplIDw9IHl5c2l6ZTEKICAgICAgICAgICAg
ICAgICAgICAgICAgICAmJiB5eXNpemUxIDw9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAyOwpAQCAtMTA1MSwxOCArMTE0NywzMyBAQCB5eXN5bnRh
eF9lcnJvciAoWVlTSVpFX1QgKnl5bXNnX2FsbG9jLCBjaGFyICoqeXltc2csCiB8IFJlbGVhc2Ug
dGhlIG1lbW9yeSBhc3NvY2lhdGVkIHRvIHRoaXMgc3ltYm9sLiAgfAogYC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorLypBUkdTVVNFRCovCisjaWYg
KGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVm
aW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQogc3RhdGljIHZvaWQKIHl5ZGVz
dHJ1Y3QgKGNvbnN0IGNoYXIgKnl5bXNnLCBpbnQgeXl0eXBlLCBZWVNUWVBFICp5eXZhbHVlcCwg
Q29udGV4dCAqY29udGV4dCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlkZXN0cnVjdCAoeXltc2cs
IHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpCisgICAgY29uc3QgY2hhciAqeXltc2c7CisgICAg
aW50IHl5dHlwZTsKKyAgICBZWVNUWVBFICp5eXZhbHVlcDsKKyAgICBDb250ZXh0ICpjb250ZXh0
OworI2VuZGlmCiB7CiAgIFlZVVNFICh5eXZhbHVlcCk7CiAgIFlZVVNFIChjb250ZXh0KTsKKwog
ICBpZiAoIXl5bXNnKQogICAgIHl5bXNnID0gIkRlbGV0aW5nIjsKICAgWVlfU1lNQk9MX1BSSU5U
ICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnApOwogCi0gIFlZX0lHTk9SRV9N
QVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOCi0gIFlZVVNFICh5eXR5cGUpOwotICBZWV9JR05PUkVf
TUFZQkVfVU5JTklUSUFMSVpFRF9FTkQKKyAgc3dpdGNoICh5eXR5cGUpCisgICAgeworCisgICAg
ICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKIApAQCAtMTA3MiwxOCArMTE4
Myw1NiBAQCB5eWRlc3RydWN0IChjb25zdCBjaGFyICp5eW1zZywgaW50IHl5dHlwZSwgWVlTVFlQ
RSAqeXl2YWx1ZXAsIENvbnRleHQgKmNvbnRleHQpCiB8IHl5cGFyc2UuICB8CiBgLS0tLS0tLS0t
LSovCiAKKyNpZmRlZiBZWVBBUlNFX1BBUkFNCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVm
aW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZp
bmVkIF9NU0NfVkVSKQoraW50Cit5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKQorI2Vsc2UK
K2ludAoreXlwYXJzZSAoWVlQQVJTRV9QQVJBTSkKKyAgICB2b2lkICpZWVBBUlNFX1BBUkFNOwor
I2VuZGlmCisjZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KKyNpZiAoZGVmaW5lZCBfX1NURENf
XyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVz
IHx8IGRlZmluZWQgX01TQ19WRVIpCiBpbnQKIHl5cGFyc2UgKENvbnRleHQgKmNvbnRleHQpCisj
ZWxzZQoraW50Cit5eXBhcnNlIChjb250ZXh0KQorICAgIENvbnRleHQgKmNvbnRleHQ7CisjZW5k
aWYKKyNlbmRpZgogewogLyogVGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLwogaW50IHl5Y2hhcjsK
IAogCi0vKiBUaGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLwor
I2lmIGRlZmluZWQgX19HTlVDX18gJiYgNDA3IDw9IF9fR05VQ19fICogMTAwICsgX19HTlVDX01J
Tk9SX18KKy8qIFN1cHByZXNzIGFuIGluY29ycmVjdCBkaWFnbm9zdGljIGFib3V0IHl5bHZhbCBi
ZWluZyB1bmluaXRpYWxpemVkLiAgKi8KKyMgZGVmaW5lIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJ
QUxJWkVEX0JFR0lOIFwKKyAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgcHVzaCIpIFwKKyAg
ICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XdW5pbml0aWFsaXplZFwiIilc
CisgICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV21heWJlLXVuaW5pdGlh
bGl6ZWRcIiIpCisjIGRlZmluZSBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9FTkQgXAor
ICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBwb3AiKQorI2Vsc2UKIC8qIERlZmF1bHQgdmFs
dWUgdXNlZCBmb3IgaW5pdGlhbGl6YXRpb24sIGZvciBwYWNpZnlpbmcgb2xkZXIgR0NDcwogICAg
b3Igbm9uLUdDQyBjb21waWxlcnMuICAqLwotWVlfSU5JVElBTF9WQUxVRSAoc3RhdGljIFlZU1RZ
UEUgeXl2YWxfZGVmYXVsdDspCi1ZWVNUWVBFIHl5bHZhbCBZWV9JTklUSUFMX1ZBTFVFICg9IHl5
dmFsX2RlZmF1bHQpOworc3RhdGljIFlZU1RZUEUgeXl2YWxfZGVmYXVsdDsKKyMgZGVmaW5lIFlZ
X0lOSVRJQUxfVkFMVUUoVmFsdWUpID0gVmFsdWUKKyNlbmRpZgorI2lmbmRlZiBZWV9JR05PUkVf
TUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTgorIyBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VOSU5J
VElBTElaRURfQkVHSU4KKyMgZGVmaW5lIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0VO
RAorI2VuZGlmCisjaWZuZGVmIFlZX0lOSVRJQUxfVkFMVUUKKyMgZGVmaW5lIFlZX0lOSVRJQUxf
VkFMVUUoVmFsdWUpIC8qIE5vdGhpbmcuICovCisjZW5kaWYKKworLyogVGhlIHNlbWFudGljIHZh
bHVlIG9mIHRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8KK1lZU1RZUEUgeXlsdmFsIFlZX0lOSVRJ
QUxfVkFMVUUoeXl2YWxfZGVmYXVsdCk7CiAKICAgICAvKiBOdW1iZXIgb2Ygc3ludGF4IGVycm9y
cyBzbyBmYXIuICAqLwogICAgIGludCB5eW5lcnJzOwpAQCAtMTA5Myw4ICsxMjQyLDggQEAgWVlT
VFlQRSB5eWx2YWwgWVlfSU5JVElBTF9WQUxVRSAoPSB5eXZhbF9kZWZhdWx0KTsKICAgICBpbnQg
eXllcnJzdGF0dXM7CiAKICAgICAvKiBUaGUgc3RhY2tzIGFuZCB0aGVpciB0b29sczoKLSAgICAg
ICAneXlzcyc6IHJlbGF0ZWQgdG8gc3RhdGVzLgotICAgICAgICd5eXZzJzogcmVsYXRlZCB0byBz
ZW1hbnRpYyB2YWx1ZXMuCisgICAgICAgYHl5c3MnOiByZWxhdGVkIHRvIHN0YXRlcy4KKyAgICAg
ICBgeXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLgogCiAgICAgICAgUmVmZXIgdG8g
dGhlIHN0YWNrcyB0aHJvdWdoIHNlcGFyYXRlIHBvaW50ZXJzLCB0byBhbGxvdyB5eW92ZXJmbG93
CiAgICAgICAgdG8gcmVhbGxvY2F0ZSB0aGVtIGVsc2V3aGVyZS4gICovCkBAIC0xMTYyLDIzICsx
MzExLDIzIEBAIFlZU1RZUEUgeXlsdmFsIFlZX0lOSVRJQUxfVkFMVUUgKD0geXl2YWxfZGVmYXVs
dCk7CiAKICNpZmRlZiB5eW92ZXJmbG93CiAgICAgICB7Ci0gICAgICAgIC8qIEdpdmUgdXNlciBh
IGNoYW5jZSB0byByZWFsbG9jYXRlIHRoZSBzdGFjay4gIFVzZSBjb3BpZXMgb2YKLSAgICAgICAg
ICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50bwot
ICAgICAgICAgICBtZW1vcnkuICAqLwotICAgICAgICBZWVNUWVBFICp5eXZzMSA9IHl5dnM7Ci0g
ICAgICAgIHl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOwotCi0gICAgICAgIC8qIEVhY2ggc3Rh
Y2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQotICAgICAg
ICAgICBkYXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4gIFRoaXMgdXNlZCB0byBi
ZSBhCi0gICAgICAgICAgIGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0IHRoZSB0d28gZXh0cmEgYXJn
cywgYnV0IHRoYXQgbWlnaHQKLSAgICAgICAgICAgYmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cg
aXMgYSBtYWNyby4gICovCi0gICAgICAgIHl5b3ZlcmZsb3cgKFlZXygibWVtb3J5IGV4aGF1c3Rl
ZCIpLAotICAgICAgICAgICAgICAgICAgICAmeXlzczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3Nw
KSwKLSAgICAgICAgICAgICAgICAgICAgJnl5dnMxLCB5eXNpemUgKiBzaXplb2YgKCp5eXZzcCks
Ci0gICAgICAgICAgICAgICAgICAgICZ5eXN0YWNrc2l6ZSk7Ci0KLSAgICAgICAgeXlzcyA9IHl5
c3MxOwotICAgICAgICB5eXZzID0geXl2czE7CisJLyogR2l2ZSB1c2VyIGEgY2hhbmNlIHRvIHJl
YWxsb2NhdGUgdGhlIHN0YWNrLiAgVXNlIGNvcGllcyBvZgorCSAgIHRoZXNlIHNvIHRoYXQgdGhl
ICYncyBkb24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8KKwkgICBtZW1vcnkuICAqLworCVlZ
U1RZUEUgKnl5dnMxID0geXl2czsKKwl5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKKworCS8q
IEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRo
ZQorCSAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRv
IGJlIGEKKwkgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1
dCB0aGF0IG1pZ2h0CisJICAgYmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cgaXMgYSBtYWNyby4g
ICovCisJeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCisJCSAgICAmeXlzczEs
IHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKKwkJICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9m
ICgqeXl2c3ApLAorCQkgICAgJnl5c3RhY2tzaXplKTsKKworCXl5c3MgPSB5eXNzMTsKKwl5eXZz
ID0geXl2czE7CiAgICAgICB9CiAjZWxzZSAvKiBubyB5eW92ZXJmbG93ICovCiAjIGlmbmRlZiBZ
WVNUQUNLX1JFTE9DQVRFCkBAIC0xMTg2LDIyICsxMzM1LDIyIEBAIFlZU1RZUEUgeXlsdmFsIFlZ
X0lOSVRJQUxfVkFMVUUgKD0geXl2YWxfZGVmYXVsdCk7CiAjIGVsc2UKICAgICAgIC8qIEV4dGVu
ZCB0aGUgc3RhY2sgb3VyIG93biB3YXkuICAqLwogICAgICAgaWYgKFlZTUFYREVQVEggPD0geXlz
dGFja3NpemUpCi0gICAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7CisJZ290byB5eWV4aGF1c3Rl
ZGxhYjsKICAgICAgIHl5c3RhY2tzaXplICo9IDI7CiAgICAgICBpZiAoWVlNQVhERVBUSCA8IHl5
c3RhY2tzaXplKQotICAgICAgICB5eXN0YWNrc2l6ZSA9IFlZTUFYREVQVEg7CisJeXlzdGFja3Np
emUgPSBZWU1BWERFUFRIOwogCiAgICAgICB7Ci0gICAgICAgIHl5dHlwZV9pbnQxNiAqeXlzczEg
PSB5eXNzOwotICAgICAgICB1bmlvbiB5eWFsbG9jICp5eXB0ciA9Ci0gICAgICAgICAgKHVuaW9u
IHl5YWxsb2MgKikgWVlTVEFDS19BTExPQyAoWVlTVEFDS19CWVRFUyAoeXlzdGFja3NpemUpKTsK
LSAgICAgICAgaWYgKCEgeXlwdHIpCi0gICAgICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKLSAg
ICAgICAgWVlTVEFDS19SRUxPQ0FURSAoeXlzc19hbGxvYywgeXlzcyk7Ci0gICAgICAgIFlZU1RB
Q0tfUkVMT0NBVEUgKHl5dnNfYWxsb2MsIHl5dnMpOworCXl5dHlwZV9pbnQxNiAqeXlzczEgPSB5
eXNzOworCXVuaW9uIHl5YWxsb2MgKnl5cHRyID0KKwkgICh1bmlvbiB5eWFsbG9jICopIFlZU1RB
Q0tfQUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7CisJaWYgKCEgeXlwdHIpCisJ
ICBnb3RvIHl5ZXhoYXVzdGVkbGFiOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3NfYWxsb2MsIHl5
c3MpOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnNfYWxsb2MsIHl5dnMpOwogIyAgdW5kZWYgWVlT
VEFDS19SRUxPQ0FURQotICAgICAgICBpZiAoeXlzczEgIT0geXlzc2EpCi0gICAgICAgICAgWVlT
VEFDS19GUkVFICh5eXNzMSk7CisJaWYgKHl5c3MxICE9IHl5c3NhKQorCSAgWVlTVEFDS19GUkVF
ICh5eXNzMSk7CiAgICAgICB9CiAjIGVuZGlmCiAjZW5kaWYgLyogbm8geXlvdmVyZmxvdyAqLwpA
QCAtMTIxMCwxMCArMTM1OSwxMCBAQCBZWVNUWVBFIHl5bHZhbCBZWV9JTklUSUFMX1ZBTFVFICg9
IHl5dmFsX2RlZmF1bHQpOwogICAgICAgeXl2c3AgPSB5eXZzICsgeXlzaXplIC0gMTsKIAogICAg
ICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhY2sgc2l6ZSBpbmNyZWFzZWQgdG8gJWx1XG4iLAot
ICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOworCQkg
ICh1bnNpZ25lZCBsb25nIGludCkgeXlzdGFja3NpemUpKTsKIAogICAgICAgaWYgKHl5c3MgKyB5
eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCi0gICAgICAgIFlZQUJPUlQ7CisJWVlBQk9SVDsKICAg
ICB9CiAKICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3Rh
dGUpKTsKQEAgLTEyNDIsNyArMTM5MSw3IEBAIHl5YmFja3VwOgogICBpZiAoeXljaGFyID09IFlZ
RU1QVFkpCiAgICAgewogICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiUmVhZGluZyBhIHRva2Vu
OiAiKSk7Ci0gICAgICB5eWNoYXIgPSB5eWxleCAoJnl5bHZhbCwgY29udGV4dCk7CisgICAgICB5
eWNoYXIgPSBZWUxFWDsKICAgICB9CiAKICAgaWYgKHl5Y2hhciA8PSBZWUVPRikKQEAgLTEzMDcs
NyArMTQ1Niw3IEBAIHl5cmVkdWNlOgogICB5eWxlbiA9IHl5cjJbeXluXTsKIAogICAvKiBJZiBZ
WUxFTiBpcyBub256ZXJvLCBpbXBsZW1lbnQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGFjdGlv
bjoKLSAgICAgJyQkID0gJDEnLgorICAgICBgJCQgPSAkMScuCiAKICAgICAgT3RoZXJ3aXNlLCB0
aGUgZm9sbG93aW5nIGxpbmUgc2V0cyBZWVZBTCB0byBnYXJiYWdlLgogICAgICBUaGlzIGJlaGF2
aW9yIGlzIHVuZG9jdW1lbnRlZCBhbmQgQmlzb24KQEAgLTEzMjMsMjE0ICsxNDcyLDE5MCBAQCB5
eXJlZHVjZToKICAgICAgICAgY2FzZSAyOgogCiAgICAgewotICAgICAgICAqKGNvbnRleHQtPnJl
c3VsdCkgPSBzdGF0aWNfY2FzdDxpbnQ+KCh5eXZzcFswXSkpOworICAgICAgICAqKGNvbnRleHQt
PnJlc3VsdCkgPSBzdGF0aWNfY2FzdDxpbnQ+KCh5eXZzcFsoMSkgLSAoMSldKSk7CiAgICAgICAg
IFlZQUNDRVBUOwogICAgIH0KLQogICAgIGJyZWFrOwogCiAgIGNhc2UgNDoKIAogICAgIHsKLSAg
ICAgICAgKHl5dmFsKSA9ICh5eXZzcFstMl0pIHx8ICh5eXZzcFswXSk7CisgICAgICAgICh5eXZh
bCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgfHwgKHl5dnNwWygzKSAtICgzKV0pOwogICAgIH0KLQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgNToKIAogICAgIHsKLSAgICAgICAgKHl5dmFsKSA9ICh5eXZz
cFstMl0pICYmICh5eXZzcFswXSk7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMp
XSkgJiYgKHl5dnNwWygzKSAtICgzKV0pOwogICAgIH0KLQogICAgIGJyZWFrOwogCiAgIGNhc2Ug
NjoKIAogICAgIHsKLSAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFstMl0pIHwgKHl5dnNwWzBdKTsK
KyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSB8ICh5eXZzcFsoMykgLSAoMyld
KTsKICAgICB9Ci0KICAgICBicmVhazsKIAogICBjYXNlIDc6CiAKICAgICB7Ci0gICAgICAgICh5
eXZhbCkgPSAoeXl2c3BbLTJdKSBeICh5eXZzcFswXSk7CisgICAgICAgICh5eXZhbCkgPSAoeXl2
c3BbKDEpIC0gKDMpXSkgXiAoeXl2c3BbKDMpIC0gKDMpXSk7CiAgICAgfQotCiAgICAgYnJlYWs7
CiAKICAgY2FzZSA4OgogCiAgICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWy0yXSkgJiAo
eXl2c3BbMF0pOworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICYgKHl5dnNw
WygzKSAtICgzKV0pOwogICAgIH0KLQogICAgIGJyZWFrOwogCiAgIGNhc2UgOToKIAogICAgIHsK
LSAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFstMl0pICE9ICh5eXZzcFswXSk7CisgICAgICAgICh5
eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgIT0gKHl5dnNwWygzKSAtICgzKV0pOwogICAgIH0K
LQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTA6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAo
eXl2c3BbLTJdKSA9PSAoeXl2c3BbMF0pOworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAt
ICgzKV0pID09ICh5eXZzcFsoMykgLSAoMyldKTsKICAgICB9Ci0KICAgICBicmVhazsKIAogICBj
YXNlIDExOgogCiAgICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWy0yXSkgPj0gKHl5dnNw
WzBdKTsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA+PSAoeXl2c3BbKDMp
IC0gKDMpXSk7CiAgICAgfQotCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMjoKIAogICAgIHsKLSAg
ICAgICAgKHl5dmFsKSA9ICh5eXZzcFstMl0pIDw9ICh5eXZzcFswXSk7CisgICAgICAgICh5eXZh
bCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPD0gKHl5dnNwWygzKSAtICgzKV0pOwogICAgIH0KLQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTM6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2
c3BbLTJdKSA+ICh5eXZzcFswXSk7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMp
XSkgPiAoeXl2c3BbKDMpIC0gKDMpXSk7CiAgICAgfQotCiAgICAgYnJlYWs7CiAKICAgY2FzZSAx
NDoKIAogICAgIHsKLSAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFstMl0pIDwgKHl5dnNwWzBdKTsK
KyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA8ICh5eXZzcFsoMykgLSAoMyld
KTsKICAgICB9Ci0KICAgICBicmVhazsKIAogICBjYXNlIDE1OgogCiAgICAgewotICAgICAgICAo
eXl2YWwpID0gKHl5dnNwWy0yXSkgPj4gKHl5dnNwWzBdKTsKKyAgICAgICAgKHl5dmFsKSA9ICh5
eXZzcFsoMSkgLSAoMyldKSA+PiAoeXl2c3BbKDMpIC0gKDMpXSk7CiAgICAgfQotCiAgICAgYnJl
YWs7CiAKICAgY2FzZSAxNjoKIAogICAgIHsKLSAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFstMl0p
IDw8ICh5eXZzcFswXSk7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPDwg
KHl5dnNwWygzKSAtICgzKV0pOwogICAgIH0KLQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTc6CiAK
ICAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3BbLTJdKSAtICh5eXZzcFswXSk7CisgICAg
ICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgLSAoeXl2c3BbKDMpIC0gKDMpXSk7CiAg
ICAgfQotCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODoKIAogICAgIHsKLSAgICAgICAgKHl5dmFs
KSA9ICh5eXZzcFstMl0pICsgKHl5dnNwWzBdKTsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFso
MSkgLSAoMyldKSArICh5eXZzcFsoMykgLSAoMyldKTsKICAgICB9Ci0KICAgICBicmVhazsKIAog
ICBjYXNlIDE5OgogCiAgICAgewotICAgICAgICBpZiAoKHl5dnNwWzBdKSA9PSAwKSB7CisgICAg
ICAgIGlmICgoeXl2c3BbKDMpIC0gKDMpXSkgPT0gMCkgewogICAgICAgICAgICAgc3RkOjpvc3Ry
aW5nc3RyZWFtIHN0cmVhbTsKLSAgICAgICAgICAgIHN0cmVhbSA8PCAoeXl2c3BbLTJdKSA8PCAi
ICUgIiA8PCAoeXl2c3BbMF0pOworICAgICAgICAgICAgc3RyZWFtIDw8ICh5eXZzcFsoMSkgLSAo
MyldKSA8PCAiICUgIiA8PCAoeXl2c3BbKDMpIC0gKDMpXSk7CiAgICAgICAgICAgICBzdGQ6OnN0
cmluZyB0ZXh0ID0gc3RyZWFtLnN0cigpOwotICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3Rp
Y3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCisgICAgICAgICAg
ICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6UFBfRElWSVNJ
T05fQllfWkVSTywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC0+dG9rZW4tPmxvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0LmNfc3RyKCkpOwogICAgICAgICAgICAgWVlBQk9SVDsKICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbLTJdKSAlICh5eXZzcFswXSk7Cisg
ICAgICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICUgKHl5dnNwWygzKSAtICgz
KV0pOwogICAgICAgICB9CiAgICAgfQotCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMDoKIAogICAg
IHsKLSAgICAgICAgaWYgKCh5eXZzcFswXSkgPT0gMCkgeworICAgICAgICBpZiAoKHl5dnNwWygz
KSAtICgzKV0pID09IDApIHsKICAgICAgICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBzdHJlYW07
Ci0gICAgICAgICAgICBzdHJlYW0gPDwgKHl5dnNwWy0yXSkgPDwgIiAvICIgPDwgKHl5dnNwWzBd
KTsKKyAgICAgICAgICAgIHN0cmVhbSA8PCAoeXl2c3BbKDEpIC0gKDMpXSkgPDwgIiAvICIgPDwg
KHl5dnNwWygzKSAtICgzKV0pOwogICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVh
bS5zdHIoKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRp
YWdub3N0aWNzOjpESVZJU0lPTl9CWV9aRVJPLAorICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25v
c3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OlBQX0RJVklTSU9OX0JZX1pFUk8sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2Nh
dGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0
cigpKTsKICAgICAgICAgICAgIFlZQUJPUlQ7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAoeXl2YWwpID0gKHl5dnNwWy0yXSkgLyAoeXl2c3BbMF0pOworICAgICAgICAgICAgKHl5dmFs
KSA9ICh5eXZzcFsoMSkgLSAoMyldKSAvICh5eXZzcFsoMykgLSAoMyldKTsKICAgICAgICAgfQog
ICAgIH0KLQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjE6CiAKICAgICB7Ci0gICAgICAgICh5eXZh
bCkgPSAoeXl2c3BbLTJdKSAqICh5eXZzcFswXSk7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3Bb
KDEpIC0gKDMpXSkgKiAoeXl2c3BbKDMpIC0gKDMpXSk7CiAgICAgfQotCiAgICAgYnJlYWs7CiAK
ICAgY2FzZSAyMjoKIAogICAgIHsKLSAgICAgICAgKHl5dmFsKSA9ICEgKHl5dnNwWzBdKTsKKyAg
ICAgICAgKHl5dmFsKSA9ICEgKHl5dnNwWygyKSAtICgyKV0pOwogICAgIH0KLQogICAgIGJyZWFr
OwogCiAgIGNhc2UgMjM6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbCkgPSB+ICh5eXZzcFswXSk7
CisgICAgICAgICh5eXZhbCkgPSB+ICh5eXZzcFsoMikgLSAoMildKTsKICAgICB9Ci0KICAgICBi
cmVhazsKIAogICBjYXNlIDI0OgogCiAgICAgewotICAgICAgICAoeXl2YWwpID0gLSAoeXl2c3Bb
MF0pOworICAgICAgICAoeXl2YWwpID0gLSAoeXl2c3BbKDIpIC0gKDIpXSk7CiAgICAgfQotCiAg
ICAgYnJlYWs7CiAKICAgY2FzZSAyNToKIAogICAgIHsKLSAgICAgICAgKHl5dmFsKSA9ICsgKHl5
dnNwWzBdKTsKKyAgICAgICAgKHl5dmFsKSA9ICsgKHl5dnNwWygyKSAtICgyKV0pOwogICAgIH0K
LQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjY6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAo
eXl2c3BbLTFdKTsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMikgLSAoMyldKTsKICAgICB9
Ci0KICAgICBicmVhazsKIAogCkBAIC0xNTU2LDcgKzE2ODEsNyBAQCB5eXJlZHVjZToKIAogICAq
Kyt5eXZzcCA9IHl5dmFsOwogCi0gIC8qIE5vdyAnc2hpZnQnIHRoZSByZXN1bHQgb2YgdGhlIHJl
ZHVjdGlvbi4gIERldGVybWluZSB3aGF0IHN0YXRlCisgIC8qIE5vdyBgc2hpZnQnIHRoZSByZXN1
bHQgb2YgdGhlIHJlZHVjdGlvbi4gIERldGVybWluZSB3aGF0IHN0YXRlCiAgICAgIHRoYXQgZ29l
cyB0bywgYmFzZWQgb24gdGhlIHN0YXRlIHdlIHBvcHBlZCBiYWNrIHRvIGFuZCB0aGUgcnVsZQog
ICAgICBudW1iZXIgcmVkdWNlZCBieS4gICovCiAKQEAgLTE1NzEsOSArMTY5Niw5IEBAIHl5cmVk
dWNlOgogICBnb3RvIHl5bmV3c3RhdGU7CiAKIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS4KLXwgeXllcnJsYWIgLS0gaGVyZSBvbiBkZXRlY3RpbmcgZXJyb3IuICB8
Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZXJybGFiIC0tIGhlcmUgb24gZGV0ZWN0
aW5nIGVycm9yIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogeXll
cnJsYWI6CiAgIC8qIE1ha2Ugc3VyZSB3ZSBoYXZlIGxhdGVzdCBsb29rYWhlYWQgdHJhbnNsYXRp
b24uICBTZWUgY29tbWVudHMgYXQKICAgICAgdXNlciBzZW1hbnRpYyBhY3Rpb25zIGZvciB3aHkg
dGhpcyBpcyBuZWNlc3NhcnkuICAqLwpAQCAtMTYyNCwyMCArMTc0OSwyMCBAQCB5eWVycmxhYjoK
ICAgaWYgKHl5ZXJyc3RhdHVzID09IDMpCiAgICAgewogICAgICAgLyogSWYganVzdCB0cmllZCBh
bmQgZmFpbGVkIHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBhbgotICAgICAgICAgZXJy
b3IsIGRpc2NhcmQgaXQuICAqLworCSBlcnJvciwgZGlzY2FyZCBpdC4gICovCiAKICAgICAgIGlm
ICh5eWNoYXIgPD0gWVlFT0YpCi0gICAgICAgIHsKLSAgICAgICAgICAvKiBSZXR1cm4gZmFpbHVy
ZSBpZiBhdCBlbmQgb2YgaW5wdXQuICAqLwotICAgICAgICAgIGlmICh5eWNoYXIgPT0gWVlFT0Yp
Ci0gICAgICAgICAgICBZWUFCT1JUOwotICAgICAgICB9CisJeworCSAgLyogUmV0dXJuIGZhaWx1
cmUgaWYgYXQgZW5kIG9mIGlucHV0LiAgKi8KKwkgIGlmICh5eWNoYXIgPT0gWVlFT0YpCisJICAg
IFlZQUJPUlQ7CisJfQogICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgeXlkZXN0cnVj
dCAoIkVycm9yOiBkaXNjYXJkaW5nIiwKLSAgICAgICAgICAgICAgICAgICAgICB5eXRva2VuLCAm
eXlsdmFsLCBjb250ZXh0KTsKLSAgICAgICAgICB5eWNoYXIgPSBZWUVNUFRZOwotICAgICAgICB9
CisJeworCSAgeXlkZXN0cnVjdCAoIkVycm9yOiBkaXNjYXJkaW5nIiwKKwkJICAgICAgeXl0b2tl
biwgJnl5bHZhbCwgY29udGV4dCk7CisJICB5eWNoYXIgPSBZWUVNUFRZOworCX0KICAgICB9CiAK
ICAgLyogRWxzZSB3aWxsIHRyeSB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgc2hpZnRp
bmcgdGhlIGVycm9yCkBAIC0xNjU2LDcgKzE3ODEsNyBAQCB5eWVycm9ybGFiOgogICBpZiAoLypD
T05TVENPTkQqLyAwKQogICAgICBnb3RvIHl5ZXJyb3JsYWI7CiAKLSAgLyogRG8gbm90IHJlY2xh
aW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hvc2UgYWN0aW9uIHRyaWdnZXJlZAorICAvKiBE
byBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUgcnVsZSB3aGljaCBhY3Rpb24gdHJpZ2dl
cmVkCiAgICAgIHRoaXMgWVlFUlJPUi4gICovCiAgIFlZUE9QU1RBQ0sgKHl5bGVuKTsKICAgeXls
ZW4gPSAwOwpAQCAtMTY2OSwyOSArMTc5NCwyOSBAQCB5eWVycm9ybGFiOgogfCB5eWVycmxhYjEg
LS0gY29tbW9uIGNvZGUgZm9yIGJvdGggc3ludGF4IGVycm9yIGFuZCBZWUVSUk9SLiAgfAogYC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLwogeXllcnJsYWIxOgotICB5eWVycnN0YXR1cyA9IDM7ICAgICAgLyogRWFjaCByZWFsIHRv
a2VuIHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzLiAgKi8KKyAgeXllcnJzdGF0dXMgPSAzOwkvKiBF
YWNoIHJlYWwgdG9rZW4gc2hpZnRlZCBkZWNyZW1lbnRzIHRoaXMuICAqLwogCiAgIGZvciAoOzsp
CiAgICAgewogICAgICAgeXluID0geXlwYWN0W3l5c3RhdGVdOwogICAgICAgaWYgKCF5eXBhY3Rf
dmFsdWVfaXNfZGVmYXVsdCAoeXluKSkKLSAgICAgICAgewotICAgICAgICAgIHl5biArPSBZWVRF
UlJPUjsKLSAgICAgICAgICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5eWNoZWNr
W3l5bl0gPT0gWVlURVJST1IpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHl5biA9IHl5
dGFibGVbeXluXTsKLSAgICAgICAgICAgICAgaWYgKDAgPCB5eW4pCi0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwl7CisJICB5eW4gKz0gWVlURVJST1I7
CisJICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5bl0gPT0gWVlU
RVJST1IpCisJICAgIHsKKwkgICAgICB5eW4gPSB5eXRhYmxlW3l5bl07CisJICAgICAgaWYgKDAg
PCB5eW4pCisJCWJyZWFrOworCSAgICB9CisJfQogCiAgICAgICAvKiBQb3AgdGhlIGN1cnJlbnQg
c3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0b2tlbi4gICovCiAgICAg
ICBpZiAoeXlzc3AgPT0geXlzcykKLSAgICAgICAgWVlBQk9SVDsKKwlZWUFCT1JUOwogCiAKICAg
ICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogcG9wcGluZyIsCi0gICAgICAgICAgICAgICAgICB5eXN0
b3NbeXlzdGF0ZV0sIHl5dnNwLCBjb250ZXh0KTsKKwkJICB5eXN0b3NbeXlzdGF0ZV0sIHl5dnNw
LCBjb250ZXh0KTsKICAgICAgIFlZUE9QU1RBQ0sgKDEpOwogICAgICAgeXlzdGF0ZSA9ICp5eXNz
cDsKICAgICAgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CkBAIC0xNzQyLDE0ICsxODY3
LDE0IEBAIHl5cmV0dXJuOgogICAgICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6IGRpc2NhcmRpbmcg
bG9va2FoZWFkIiwKICAgICAgICAgICAgICAgICAgIHl5dG9rZW4sICZ5eWx2YWwsIGNvbnRleHQp
OwogICAgIH0KLSAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hv
c2UgYWN0aW9uIHRyaWdnZXJlZAorICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0
aGUgcnVsZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVkCiAgICAgIHRoaXMgWVlBQk9SVCBvciBZWUFD
Q0VQVC4gICovCiAgIFlZUE9QU1RBQ0sgKHl5bGVuKTsKICAgWVlfU1RBQ0tfUFJJTlQgKHl5c3Ms
IHl5c3NwKTsKICAgd2hpbGUgKHl5c3NwICE9IHl5c3MpCiAgICAgewogICAgICAgeXlkZXN0cnVj
dCAoIkNsZWFudXA6IHBvcHBpbmciLAotICAgICAgICAgICAgICAgICAgeXlzdG9zWyp5eXNzcF0s
IHl5dnNwLCBjb250ZXh0KTsKKwkJICB5eXN0b3NbKnl5c3NwXSwgeXl2c3AsIGNvbnRleHQpOwog
ICAgICAgWVlQT1BTVEFDSyAoMSk7CiAgICAgfQogI2lmbmRlZiB5eW92ZXJmbG93CkBAIC0xNzYw
LDExICsxODg1LDE0IEBAIHl5cmV0dXJuOgogICBpZiAoeXltc2cgIT0geXltc2didWYpCiAgICAg
WVlTVEFDS19GUkVFICh5eW1zZyk7CiAjZW5kaWYKLSAgcmV0dXJuIHl5cmVzdWx0OworICAvKiBN
YWtlIHN1cmUgWVlJRCBpcyB1c2VkLiAgKi8KKyAgcmV0dXJuIFlZSUQgKHl5cmVzdWx0KTsKIH0K
IAogCiAKKworCiBpbnQgeXlsZXgoWVlTVFlQRSogbHZhbHAsIENvbnRleHQqIGNvbnRleHQpCiB7
CiAgICAgaW50IHR5cGUgPSAwOwpAQCAtMTc3Nyw3ICsxOTA1LDcgQEAgaW50IHl5bGV4KFlZU1RZ
UEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KQogICAgICAgICB1bnNpZ25lZCBpbnQgdmFsID0g
MDsKICAgICAgICAgaWYgKCF0b2tlbi0+dVZhbHVlKCZ2YWwpKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5URUdF
Ul9PVkVSRkxPVywKKyAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6
OkRpYWdub3N0aWNzOjpQUF9JTlRFR0VSX09WRVJGTE9XLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAg
ICAgfQogICAgICAgICAqbHZhbHAgPSBzdGF0aWNfY2FzdDxZWVNUWVBFPih2YWwpOwpAQCAtMTgx
OCw3ICsxOTQ2LDcgQEAgaW50IHl5bGV4KFlZU1RZUEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0
KQogCiB2b2lkIHl5ZXJyb3IoQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQog
ewotICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlZB
TElEX0VYUFJFU1NJT04sCisgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlh
Z25vc3RpY3M6OlBQX0lOVkFMSURfRVhQUkVTU0lPTiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlYXNvbik7CiB9CkBAIC0xODQ2LDEyICsxOTc0LDEyIEBAIGJvb2wgRXhw
cmVzc2lvblBhcnNlcjo6cGFyc2UoVG9rZW4qIHRva2VuLCBpbnQqIHJlc3VsdCkKICAgICAgICAg
YnJlYWs7CiAKICAgICAgIGNhc2UgMjoKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6Ok9VVF9PRl9NRU1PUlksIHRva2VuLT5sb2NhdGlvbiwgIiIpOworICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfT1VUX09GX01FTU9SWSwgdG9rZW4t
PmxvY2F0aW9uLCAiIik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgICBkZWZhdWx0OgogICAgICAg
ICBhc3NlcnQoZmFsc2UpOwotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGlj
czo6SU5URVJOQUxfRVJST1IsIHRva2VuLT5sb2NhdGlvbiwgIiIpOworICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfSU5URVJOQUxfRVJST1IsIHRva2VuLT5sb2Nh
dGlvbiwgIiIpOwogICAgICAgICBicmVhazsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvTWFjcm9FeHBhbmRlci5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL01h
Y3JvRXhwYW5kZXIuY3BwCmluZGV4IDExMTZjNTE2ZmY2MjY4NDFkZmQzMTk5MzViOTM4MmUwOGRj
MjM2NjMuLmI3ODkyNjBhZjkxNjNhN2JkYmQ4YjQ1NGJiM2ZkNDg2OGE0ZTMwYjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvTWFj
cm9FeHBhbmRlci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9NYWNyb0V4cGFuZGVyLmNwcApAQCAtMjU0LDcgKzI1NCw3IEBAIGJvb2wg
TWFjcm9FeHBhbmRlcjo6Y29sbGVjdE1hY3JvQXJncyhjb25zdCBNYWNybyYgbWFjcm8sCiAKICAg
ICAgICAgaWYgKHRva2VuLnR5cGUgPT0gVG9rZW46OkxBU1QpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19VTlRFUk1JTkFURURf
SU5WT0NBVElPTiwKKyAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNz
OjpQUF9NQUNST19VTlRFUk1JTkFURURfSU5WT0NBVElPTiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlkZW50aWZpZXIubG9jYXRpb24sIGlkZW50aWZpZXIudGV4dCk7CiAgICAg
ICAgICAgICAvLyBEbyBub3QgbG9zZSBFT0YgdG9rZW4uCiAgICAgICAgICAgICB1bmdldFRva2Vu
KHRva2VuKTsKQEAgLTMwMiw4ICszMDIsOCBAQCBib29sIE1hY3JvRXhwYW5kZXI6OmNvbGxlY3RN
YWNyb0FyZ3MoY29uc3QgTWFjcm8mIG1hY3JvLAogICAgIGlmIChhcmdzLT5zaXplKCkgIT0gcGFy
YW1zLnNpemUoKSkKICAgICB7CiAgICAgICAgIERpYWdub3N0aWNzOjpJRCBpZCA9IGFyZ3MtPnNp
emUoKSA8IG1hY3JvLnBhcmFtZXRlcnMuc2l6ZSgpID8KLSAgICAgICAgICAgIERpYWdub3N0aWNz
OjpNQUNST19UT09fRkVXX0FSR1MgOgotICAgICAgICAgICAgRGlhZ25vc3RpY3M6Ok1BQ1JPX1RP
T19NQU5ZX0FSR1M7CisgICAgICAgICAgICBEaWFnbm9zdGljczo6UFBfTUFDUk9fVE9PX0ZFV19B
UkdTIDoKKyAgICAgICAgICAgIERpYWdub3N0aWNzOjpQUF9NQUNST19UT09fTUFOWV9BUkdTOwog
ICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChpZCwgaWRlbnRpZmllci5sb2NhdGlvbiwgaWRl
bnRpZmllci50ZXh0KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJv
Y2Vzc29yLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvUHJlcHJvY2Vzc29yLmNwcAppbmRleCBiNjE1Yzg1ZGNlMDRhYzgxYjYxZTUyMmEwNWJm
MmFhZWJmOWQ5MDkzLi41ODBmZmJhNDU5ZjljYWZjMTc0MjhiMzNiOWQwYWFhOWM5NTNhN2VlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL1ByZXByb2Nlc3Nvci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuY3BwCkBAIC0xMDEsMTEgKzEwMSwxMSBA
QCB2b2lkIFByZXByb2Nlc3Nvcjo6bGV4KFRva2VuKiB0b2tlbikKICAgICAgICAgICAgIGFzc2Vy
dChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIFRva2VuOjpQUF9O
VU1CRVI6Ci0gICAgICAgICAgICBtSW1wbC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGlj
czo6SU5WQUxJRF9OVU1CRVIsCisgICAgICAgICAgICBtSW1wbC0+ZGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6UFBfSU5WQUxJRF9OVU1CRVIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgVG9rZW46OlBQX09USEVSOgotICAgICAgICAgICAg
bUltcGwtPmRpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfQ0hBUkFDVEVS
LAorICAgICAgICAgICAgbUltcGwtPmRpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQ
X0lOVkFMSURfQ0hBUkFDVEVSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuY3BwCmluZGV4IDM2M2Ez
N2IzNjVhNjQ5NzZkOTBkYjZlMGY2MTliZDM5MjhhYWIwNzcuLmRkNGVmMzgxODA1MTVkOTVlZTgz
NjIwMDEzN2I0ZGEzMjEwYjI5Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmNwcAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5jcHAKQEAg
LTY4MCw2ICs2ODAsMTggQEAgc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyICoseXlj
b25zdCBjaGFyICosaW50ICx5eXNjYW5fdCB5eXNjYW5uZXIpOwogc3RhdGljIGludCB5eV9mbGV4
X3N0cmxlbiAoeXljb25zdCBjaGFyICogLHl5c2Nhbl90IHl5c2Nhbm5lcik7CiAjZW5kaWYKIAor
I2RlZmluZSBZWV9OT19JTlBVVAorCisjaWZuZGVmIFlZX05PX0lOUFVUCisKKyNpZmRlZiBfX2Nw
bHVzcGx1cworc3RhdGljIGludCB5eWlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyNlbHNl
CitzdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyNlbmRpZgorCisjZW5k
aWYKKwogLyogQW1vdW50IG9mIHN0dWZmIHRvIHNsdXJwIHVwIHdpdGggZWFjaCByZWFkLiAqLwog
I2lmbmRlZiBZWV9SRUFEX0JVRl9TSVpFCiAjZGVmaW5lIFlZX1JFQURfQlVGX1NJWkUgODE5MgpA
QCAtMTEzOSw3ICsxMTUxLDcgQEAgY2FzZSBZWV9TVEFURV9FT0YoQ09NTUVOVCk6CiAKICAgICBp
ZiAoWVlfU1RBUlQgPT0gQ09NTUVOVCkKICAgICB7Ci0gICAgICAgIHl5ZXh0cmEtPmRpYWdub3N0
aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpFT0ZfSU5fQ09NTUVOVCwKKyAgICAgICAgeXll
eHRyYS0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OlBQX0VPRl9JTl9DT01N
RU5ULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpTb3VyY2VMb2Nh
dGlvbih5eWZpbGVubywgeXlsaW5lbm8pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICIiKTsKICAgICB9CkBAIC0xNDgwLDYgKzE0OTIsODEgQEAgc3RhdGljIGludCB5eV9n
ZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIAlyZXR1cm4geXlfaXNfamFtID8g
MCA6IHl5X2N1cnJlbnRfc3RhdGU7CiB9CiAKKyNpZm5kZWYgWVlfTk9fSU5QVVQKKyNpZmRlZiBf
X2NwbHVzcGx1cworICAgIHN0YXRpYyBpbnQgeXlpbnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyKQor
I2Vsc2UKKyAgICBzdGF0aWMgaW50IGlucHV0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQorI2VuZGlm
CisKK3sKKwlpbnQgYzsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7CisKKwkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7
CisKKwlpZiAoICp5eWctPnl5X2NfYnVmX3AgPT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSICkKKwkJ
eworCQkvKiB5eV9jX2J1Zl9wIG5vdyBwb2ludHMgdG8gdGhlIGNoYXJhY3RlciB3ZSB3YW50IHRv
IHJldHVybi4KKwkJICogSWYgdGhpcyBvY2N1cnMgKmJlZm9yZSogdGhlIEVPQiBjaGFyYWN0ZXJz
LCB0aGVuIGl0J3MgYQorCQkgKiB2YWxpZCBOVUw7IGlmIG5vdCwgdGhlbiB3ZSd2ZSBoaXQgdGhl
IGVuZCBvZiB0aGUgYnVmZmVyLgorCQkgKi8KKwkJaWYgKCB5eWctPnl5X2NfYnVmX3AgPCAmWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSApCisJCQkv
KiBUaGlzIHdhcyByZWFsbHkgYSBOVUwuICovCisJCQkqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsK
KworCQllbHNlCisJCQl7IC8qIG5lZWQgbW9yZSBpbnB1dCAqLworCQkJeXlfc2l6ZV90IG9mZnNl
dCA9IHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cjsKKwkJCSsreXlnLT55eV9jX2J1
Zl9wOworCisJCQlzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKKwkJ
CQl7CisJCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6CisJCQkJCS8qIFRoaXMgaGFwcGVucyBi
ZWNhdXNlIHl5X2dfbl9iKCkKKwkJCQkJICogc2VlcyB0aGF0IHdlJ3ZlIGFjY3VtdWxhdGVkIGEK
KwkJCQkJICogdG9rZW4gYW5kIGZsYWdzIHRoYXQgd2UgbmVlZCB0bworCQkJCQkgKiB0cnkgbWF0
Y2hpbmcgdGhlIHRva2VuIGJlZm9yZQorCQkJCQkgKiBwcm9jZWVkaW5nLiAgQnV0IGZvciBpbnB1
dCgpLAorCQkJCQkgKiB0aGVyZSdzIG5vIG1hdGNoaW5nIHRvIGNvbnNpZGVyLgorCQkJCQkgKiBT
byBjb252ZXJ0IHRoZSBFT0JfQUNUX0xBU1RfTUFUQ0gKKwkJCQkJICogdG8gRU9CX0FDVF9FTkRf
T0ZfRklMRS4KKwkJCQkJICovCisKKwkJCQkJLyogUmVzZXQgYnVmZmVyIHN0YXR1cy4gKi8KKwkJ
CQkJcHByZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lcik7CisKKwkJCQkJLypGQUxMVEhST1VHSCovCisK
KwkJCQljYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6CisJCQkJCXsKKwkJCQkJaWYgKCBwcHdyYXAo
eXlzY2FubmVyICkgKQorCQkJCQkJcmV0dXJuIEVPRjsKKworCQkJCQlpZiAoICEgeXlnLT55eV9k
aWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQorCQkJCQkJWVlfTkVXX0ZJTEU7CisjaWZkZWYgX19j
cGx1c3BsdXMKKwkJCQkJcmV0dXJuIHl5aW5wdXQoeXlzY2FubmVyKTsKKyNlbHNlCisJCQkJCXJl
dHVybiBpbnB1dCh5eXNjYW5uZXIpOworI2VuZGlmCisJCQkJCX0KKworCQkJCWNhc2UgRU9CX0FD
VF9DT05USU5VRV9TQ0FOOgorCQkJCQl5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIg
KyBvZmZzZXQ7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCisJYyA9ICoodW5zaWdu
ZWQgY2hhciAqKSB5eWctPnl5X2NfYnVmX3A7CS8qIGNhc3QgZm9yIDgtYml0IGNoYXIncyAqLwor
CSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOwkvKiBwcmVzZXJ2ZSB5eXRleHQgKi8KKwl5eWctPnl5
X2hvbGRfY2hhciA9ICorK3l5Zy0+eXlfY19idWZfcDsKKworCXJldHVybiBjOworfQorI2VuZGlm
CS8qIGlmbmRlZiBZWV9OT19JTlBVVCAqLworCiAvKiogSW1tZWRpYXRlbHkgc3dpdGNoIHRvIGEg
ZGlmZmVyZW50IGlucHV0IHN0cmVhbS4KICAqIEBwYXJhbSBpbnB1dF9maWxlIEEgcmVhZGFibGUg
c3RyZWFtLgogICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCkBAIC0yMjUy
LDcgKzIzMzksNyBAQCB2b2lkIFRva2VuaXplcjo6bGV4KFRva2VuKiB0b2tlbikKICAgICB0b2tl
bi0+dHlwZSA9IHBwbGV4KCZ0b2tlbi0+dGV4dCwmdG9rZW4tPmxvY2F0aW9uLG1IYW5kbGUpOwog
ICAgIGlmICh0b2tlbi0+dGV4dC5zaXplKCkgPiBtTWF4VG9rZW5MZW5ndGgpCiAgICAgewotICAg
ICAgICBtQ29udGV4dC5kaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpUT0tFTl9UT09f
TE9ORywKKyAgICAgICAgbUNvbnRleHQuZGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6
UFBfVE9LRU5fVE9PX0xPTkcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgIHRva2VuLT50ZXh0LmVyYXNl
KG1NYXhUb2tlbkxlbmd0aCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIubCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmwKaW5kZXgg
OTBjNDJjODcwYmUwMDBlOWE1NzNkYzE5MWQ0OGJjZGY3MGVjZDZlMS4uMDFmMDE3N2I2YzI2M2Uy
MjdhOTU0MGQzMmJkYTc0NmQwN2Y3OWNmOSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIubAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5sCkBA
IC0zMywxMiArMzMsNiBAQCBJRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRP
IFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2guCiAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQg
Ii1XbWlzc2luZy1ub3JldHVybiIKICNlbmRpZgogCi0jaWYgZGVmaW5lZChfX2NsYW5nX18pCi0j
cHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGln
bm9yZWQgIi1XdW5rbm93bi1wcmFnbWFzIgotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9y
ZWQgIi1XZGVwcmVjYXRlZC1yZWdpc3RlciIKLSNlbmRpZgotCiB0eXBlZGVmIHN0ZDo6c3RyaW5n
IFlZU1RZUEU7CiB0eXBlZGVmIHBwOjpTb3VyY2VMb2NhdGlvbiBZWUxUWVBFOwogCkBAIC0yNzEs
MTAgKzI2NSw2IEBAIEZSQUNUSU9OQUxfQ09OU1RBTlQgICh7RElHSVR9KiIuIntESUdJVH0rKXwo
e0RJR0lUfSsiLiIpCiAKICUlCiAKLSNpZiBkZWZpbmVkKF9fY2xhbmdfXykKLSNwcmFnbWEgY2xh
bmcgZGlhZ25vc3RpYyBwb3AKLSNlbmRpZgotCiBuYW1lc3BhY2UgcHAgewogCiBUb2tlbml6ZXI6
OlRva2VuaXplcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3Nvci52
Y3hwcm9qIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9wcmVwcm9jZXNzb3IudmN4cHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E4
NTMwYjUwNzRhMTczZGQwMDg3NDJjMzgzMGRlNmMxZTg0MjM4Zi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3Nvci52Y3hwcm9qCisrKyAvZGV2L251bGwK
QEAgLTEsMTcyICswLDAgQEAKLe+7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04
Ij8+DQotPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIg
eG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAw
MyI+DQotICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPg0KLSAgICA8
UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPg0KLSAgICAgIDxDb25m
aWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPg0KLSAgICAgIDxQbGF0Zm9ybT5XaW4zMjwv
UGxhdGZvcm0+DQotICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQotICAgIDxQcm9qZWN0Q29u
ZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPg0KLSAgICAgIDxDb25maWd1cmF0aW9uPkRl
YnVnPC9Db25maWd1cmF0aW9uPg0KLSAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPg0KLSAg
ICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KLSAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5j
bHVkZT0iUmVsZWFzZXxXaW4zMiI+DQotICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29u
ZmlndXJhdGlvbj4NCi0gICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPg0KLSAgICA8L1By
b2plY3RDb25maWd1cmF0aW9uPg0KLSAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0i
UmVsZWFzZXx4NjQiPg0KLSAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRp
b24+DQotICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+DQotICAgIDwvUHJvamVjdENvbmZp
Z3VyYXRpb24+DQotICA8L0l0ZW1Hcm91cD4NCi0gIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9i
YWxzIj4NCi0gICAgPFByb2plY3RHdWlkPntGQkUzMkRGMy0wRkIwLTRGMkYtQTQyNC0yQzIxQkQ3
QkMzMjV9PC9Qcm9qZWN0R3VpZD4NCi0gICAgPFJvb3ROYW1lc3BhY2U+cHJlcHJvY2Vzc29yPC9S
b290TmFtZXNwYWNlPg0KLSAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+DQotICA8L1By
b3BlcnR5R3JvdXA+DQotICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9z
b2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPg0KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSIn
JChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNv
bmZpZ3VyYXRpb24iPg0KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29u
ZmlndXJhdGlvblR5cGU+DQotICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0
Pg0KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGlt
aXphdGlvbj4NCi0gIDwvUHJvcGVydHlHcm91cD4NCi0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlv
bj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0i
Q29uZmlndXJhdGlvbiI+DQotICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9D
b25maWd1cmF0aW9uVHlwZT4NCi0gICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJT
ZXQ+DQotICA8L1Byb3BlcnR5R3JvdXA+DQotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249Iick
KENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZp
Z3VyYXRpb24iPg0KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmln
dXJhdGlvblR5cGU+DQotICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0Pg0K
LSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXph
dGlvbj4NCi0gIDwvUHJvcGVydHlHcm91cD4NCi0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZp
Z3VyYXRpb24iPg0KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmln
dXJhdGlvblR5cGU+DQotICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0Pg0K
LSAgPC9Qcm9wZXJ0eUdyb3VwPg0KLSAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgp
XE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+DQotICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lv
blNldHRpbmdzIj4NCi0gIDwvSW1wb3J0R3JvdXA+DQotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9u
PSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9
IlByb3BlcnR5U2hlZXRzIj4NCi0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxN
aWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCck
KFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFi
ZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KLSAgPC9JbXBvcnRHcm91cD4NCi0gIDxJbXBv
cnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVn
fFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCi0gICAgPEltcG9ydCBQcm9qZWN0PSIk
KFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRp
dGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVz
ZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KLSAgPC9JbXBvcnRH
cm91cD4NCi0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCi0gICAgPElt
cG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVz
ZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3Bw
LiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAv
Pg0KLSAgPC9JbXBvcnRHcm91cD4NCi0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0
cyI+DQotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4k
KFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilc
TWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERh
dGFQbGF0Zm9ybSIgLz4NCi0gIDwvSW1wb3J0R3JvdXA+DQotICA8UHJvcGVydHlHcm91cCBMYWJl
bD0iVXNlck1hY3JvcyIgLz4NCi0gIDxQcm9wZXJ0eUdyb3VwPg0KLSAgICA8X1Byb2plY3RGaWxl
VmVyc2lvbj4xMC4wLjQwMjE5LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+DQotICAgIDxPdXREaXIg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMici
PiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCi0gICAgPEludERpciBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+
JChDb25maWd1cmF0aW9uKVw8L0ludERpcj4NCi0gICAgPE91dERpciBDb25kaXRpb249IickKENv
bmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiQoU29sdXRpb25EaXIpJChQ
bGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCi0gICAgPEludERpciBDb25kaXRp
b249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiQoUGxhdGZv
cm0pXCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+DQotICAgIDxPdXREaXIgQ29uZGl0aW9uPSIn
JChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JChTb2x1dGlv
bkRpcikkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KLSAgICA8SW50RGlyIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiQoQ29uZmln
dXJhdGlvbilcPC9JbnREaXI+DQotICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiQoU29sdXRpb25EaXIpJChQbGF0Zm9y
bSlcJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCi0gICAgPEludERpciBDb25kaXRpb249Iick
KENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JChQbGF0Zm9ybSlc
JChDb25maWd1cmF0aW9uKVw8L0ludERpcj4NCi0gIDwvUHJvcGVydHlHcm91cD4NCi0gIDxJdGVt
RGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nRGVidWd8V2luMzInIj4NCi0gICAgPENsQ29tcGlsZT4NCi0gICAgICA8T3B0aW1pemF0aW9u
PkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25z
PldJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtO
T01JTk1BWDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlv
bnM+DQotICAgICAgPE1pbmltYWxSZWJ1aWxkPnRydWU8L01pbmltYWxSZWJ1aWxkPg0KLSAgICAg
IDxCYXNpY1J1bnRpbWVDaGVja3M+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tz
Pg0KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWc8L1J1bnRpbWVMaWJy
YXJ5Pg0KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4NCi0gICAgICA8L1ByZWNvbXBpbGVkSGVh
ZGVyPg0KLSAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWw0PC9XYXJuaW5nTGV2ZWw+DQotICAgICAg
PFRyZWF0V2FybmluZ0FzRXJyb3I+dHJ1ZTwvVHJlYXRXYXJuaW5nQXNFcnJvcj4NCi0gICAgICA8
RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5FZGl0QW5kQ29udGludWU8L0RlYnVnSW5mb3JtYXRpb25G
b3JtYXQ+DQotICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzPjQxMDA7NDEyNzs0MTg5OzQy
Mzk7NDI0NDs0MjQ1OzQ1MTI7NDcwMjs0MjY3OyUoRGlzYWJsZVNwZWNpZmljV2FybmluZ3MpPC9E
aXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4NCi0gICAgPC9DbENvbXBpbGU+DQotICA8L0l0ZW1EZWZp
bml0aW9uR3JvdXA+DQotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPg0KLSAgICA8TWlkbD4NCi0gICAg
ICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4NCi0gICAgPC9NaWRs
Pg0KLSAgICA8Q2xDb21waWxlPg0KLSAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGlt
aXphdGlvbj4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19X
SU5ET1dTO19VU1JETEw7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO05PTUlOTUFYOyUoUHJlcHJv
Y2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8TWlu
aW1hbFJlYnVpbGQ+dHJ1ZTwvTWluaW1hbFJlYnVpbGQ+DQotICAgICAgPEJhc2ljUnVudGltZUNo
ZWNrcz5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPFJ1bnRp
bWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1ZzwvUnVudGltZUxpYnJhcnk+DQotICAgICAgPFBy
ZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAgICAgPFdh
cm5pbmdMZXZlbD5MZXZlbDQ8L1dhcm5pbmdMZXZlbD4NCi0gICAgICA8VHJlYXRXYXJuaW5nQXNF
cnJvcj50cnVlPC9UcmVhdFdhcm5pbmdBc0Vycm9yPg0KLSAgICAgIDxEZWJ1Z0luZm9ybWF0aW9u
Rm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCi0gICAgICA8
RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+NDEwMDs0MTI3OzQxODk7NDIzOTs0MjQ0OzQyNDU7NDUx
Mjs0NzAyOzQ3MTg7NDI2NzslKERpc2FibGVTcGVjaWZpY1dhcm5pbmdzKTwvRGlzYWJsZVNwZWNp
ZmljV2FybmluZ3M+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3Vw
Pg0KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+DQotICAgIDxDbENvbXBpbGU+DQotICAgICAg
PE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxJbmxpbmVGdW5j
dGlvbkV4cGFuc2lvbj5BbnlTdWl0YWJsZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+DQotICAg
ICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExM
O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWDtfU0VDVVJFX1NDTD0wOyUoUHJlcHJv
Y2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UnVu
dGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+DQotICAgICAgPFByZWNv
bXBpbGVkSGVhZGVyPg0KLSAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAgICAgPFdhcm5p
bmdMZXZlbD5MZXZlbDQ8L1dhcm5pbmdMZXZlbD4NCi0gICAgICA8VHJlYXRXYXJuaW5nQXNFcnJv
cj50cnVlPC9UcmVhdFdhcm5pbmdBc0Vycm9yPg0KLSAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9y
bWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCi0gICAgICA8RGlz
YWJsZVNwZWNpZmljV2FybmluZ3M+NDEwMDs0MTI3OzQxODk7NDIzOTs0MjQ0OzQyNDU7NDUxMjs0
NzAyOzQ3MTg7NDI2NzslKERpc2FibGVTcGVjaWZpY1dhcm5pbmdzKTwvRGlzYWJsZVNwZWNpZmlj
V2FybmluZ3M+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0K
LSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPg0KLSAgICA8TWlkbD4NCi0gICAgICA8VGFyZ2V0RW52
aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4NCi0gICAgPC9NaWRsPg0KLSAgICA8Q2xD
b21waWxlPg0KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0g
ICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+QW55U3VpdGFibGU8L0lubGluZUZ1bmN0aW9u
RXhwYW5zaW9uPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7
X1dJTkRPV1M7X1VTUkRMTDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7Tk9NSU5NQVg7X1NFQ1VS
RV9TQ0w9MDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlv
bnM+DQotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5
Pg0KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4NCi0gICAgICA8L1ByZWNvbXBpbGVkSGVhZGVy
Pg0KLSAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWw0PC9XYXJuaW5nTGV2ZWw+DQotICAgICAgPFRy
ZWF0V2FybmluZ0FzRXJyb3I+dHJ1ZTwvVHJlYXRXYXJuaW5nQXNFcnJvcj4NCi0gICAgICA8RGVi
dWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3Jt
YXQ+DQotICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzPjQxMDA7NDEyNzs0MTg5OzQyMzk7
NDI0NDs0MjQ1OzQ1MTI7NDcwMjs0NzE4OzQyNjc7JShEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncyk8
L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gIDwvSXRlbURl
ZmluaXRpb25Hcm91cD4NCi0gIDxJdGVtR3JvdXA+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
RGlhZ25vc3RpY3NCYXNlLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJEaXJlY3Rp
dmVIYW5kbGVyQmFzZS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iRGlyZWN0aXZl
UGFyc2VyLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJFeHByZXNzaW9uUGFyc2Vy
LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJJbnB1dC5jcHAiIC8+DQotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iTGV4ZXIuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ik1hY3JvLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJNYWNyb0V4cGFuZGVyLmNw
cCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJQcmVwcm9jZXNzb3IuY3BwIiAvPg0KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9IlRva2VuLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSJUb2tlbml6ZXIuY3BwIiAvPg0KLSAgPC9JdGVtR3JvdXA+DQotICA8SXRlbUdyb3VwPg0K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Imxlbmd0aF9saW1pdHMuaCIgLz4NCi0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSJEaWFnbm9zdGljc0Jhc2UuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSJEaXJlY3RpdmVIYW5kbGVyQmFzZS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
IkRpcmVjdGl2ZVBhcnNlci5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkV4cHJlc3Np
b25QYXJzZXIuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJJbnB1dC5oIiAvPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkxleGVyLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iTWFjcm8uaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJNYWNyb0V4cGFuZGVyLmgi
IC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0ibnVtZXJpY19sZXguaCIgLz4NCi0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSJwcF91dGlscy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
IlByZXByb2Nlc3Nvci5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlNvdXJjZUxvY2F0
aW9uLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iVG9rZW4uaCIgLz4NCi0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSJUb2tlbml6ZXIuaCIgLz4NCi0gIDwvSXRlbUdyb3VwPg0KLSAgPEl0
ZW1Hcm91cD4NCi0gICAgPE5vbmUgSW5jbHVkZT0iVG9rZW5pemVyLmwiIC8+DQotICA8L0l0ZW1H
cm91cD4NCi0gIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3Bw
LnRhcmdldHMiIC8+DQotICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPg0K
LSAgPC9JbXBvcnRHcm91cD4NCi08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9wcmVwcm9jZXNzb3IudmN4cHJvai5maWx0ZXJzIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzb3IudmN4cHJvai5maWx0
ZXJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWMyMDJmNDAwMmEyOTJjNjE0Zjk0
YWQzZDdkOGNjM2M4MTQzN2QzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvcHJlcHJvY2Vzc29yLnZjeHByb2ouZmlsdGVycworKysgL2Rldi9udWxsCkBAIC0xLDEwMCAr
MCwwIEBACi3vu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTxQcm9q
ZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNv
bS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4NCi0gIDxJdGVtR3JvdXA+DQotICAgIDxGaWx0ZXIg
SW5jbHVkZT0iU291cmNlIEZpbGVzIj4NCi0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57NEZDNzM3
RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfTwvVW5pcXVlSWRlbnRpZmllcj4NCi0gICAg
ICA8RXh0ZW5zaW9ucz5jcHA7YztjYztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNteDwv
RXh0ZW5zaW9ucz4NCi0gICAgPC9GaWx0ZXI+DQotICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVy
IEZpbGVzIj4NCi0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57OTM5OTUzODAtODlCRC00YjA0LTg4
RUItNjI1RkJFNTJFQkZCfTwvVW5pcXVlSWRlbnRpZmllcj4NCi0gICAgICA8RXh0ZW5zaW9ucz5o
O2hwcDtoeHg7aG07aW5sO2luYzt4c2Q8L0V4dGVuc2lvbnM+DQotICAgIDwvRmlsdGVyPg0KLSAg
PC9JdGVtR3JvdXA+DQotICA8SXRlbUdyb3VwPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkRp
cmVjdGl2ZVBhcnNlci5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+
DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkV4cHJlc3Npb25Q
YXJzZXIuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8
L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJJbnB1dC5jcHAiPg0KLSAgICAg
IDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9IkxleGVyLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmls
ZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
TWFjcm8uY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8
L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJNYWNyb0V4cGFuZGVyLmNwcCI+
DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+
DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iUHJlcHJvY2Vzc29yLmNwcCI+DQotICAgICAgPEZp
bHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iVG9rZW4uY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwv
RmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJUb2tl
bml6ZXIuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8
L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJEaWFnbm9zdGljc0Jhc2UuY3Bw
Ij4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGls
ZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJEaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAiPg0K
LSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0K
LSAgPC9JdGVtR3JvdXA+DQotICA8SXRlbUdyb3VwPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
IkRpcmVjdGl2ZVBhcnNlci5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVy
Pg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJFeHByZXNzaW9u
UGFyc2VyLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwv
Q2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IklucHV0LmgiPg0KLSAgICAgIDxG
aWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9IkxleGVyLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9G
aWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ik1hY3Jv
LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNs
dWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ik1hY3JvRXhwYW5kZXIuaCI+DQotICAgICAg
PEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0ibnVtZXJpY19sZXguaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIg
RmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0icHBfdXRpbHMuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0g
ICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iUHJlcHJvY2Vzc29yLmgi
Pg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRl
Pg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlNvdXJjZUxvY2F0aW9uLmgiPg0KLSAgICAgIDxG
aWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9IlRva2VuLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9G
aWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlRva2Vu
aXplci5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0Ns
SW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJsZW5ndGhfbGltaXRzLmgiPg0KLSAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkRpYWdub3N0aWNzQmFzZS5oIj4NCi0gICAgICA8RmlsdGVy
PkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSJEaXJlY3RpdmVIYW5kbGVyQmFzZS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRl
ciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gIDwvSXRlbUdyb3VwPg0KLSAg
PEl0ZW1Hcm91cD4NCi0gICAgPE5vbmUgSW5jbHVkZT0iVG9rZW5pemVyLmwiPg0KLSAgICAgIDxG
aWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvTm9uZT4NCi0gIDwvSXRlbUdyb3Vw
Pg0KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmcuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYjlkMmJhYjE3ZjgxNGFlNGNjYjNkZmExMzE5NjQ4MWI0ODdhMWU0OC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwot
Ci0jaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKLSNpbmNsdWRlICJjb21waWxlci9QYXJz
ZUNvbnRleHQuaCIKLSNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhP
dXRwdXQuaCIKLSNpbmNsdWRlICJjb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRl
clRpbWluZy5oIgotCi1SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjpSZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nKFRJbmZvU2lua0Jhc2UmIHNpbmspCi0gICAgOiBtU2luayhzaW5rKQot
ICAgICwgbU51bUVycm9ycygwKQotewotICAgIC8vIFNhbXBsaW5nIG9wcyBmb3VuZCBvbmx5IGlu
IGZyYWdtZW50IHNoYWRlcnMuCi0gICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEKHMy
MTt2ZjI7ZjE7Iik7Ci0gICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUHJvaihzMjE7
dmYzO2YxOyIpOwotICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFByb2ooczIxO3Zm
NDtmMTsiKTsKLSAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlQ3ViZShzQzE7dmYzO2Yx
OyIpOwotICAgIC8vIFNhbXBsaW5nIG9wcyBmb3VuZCBpbiBib3RoIHZlcnRleCBhbmQgZnJhZ21l
bnQgc2hhZGVycy4KLSAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkQoczIxO3ZmMjsi
KTsKLSAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRQcm9qKHMyMTt2ZjM7Iik7Ci0g
ICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUHJvaihzMjE7dmY0OyIpOwotICAgIG1T
YW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmVDdWJlKHNDMTt2ZjM7Iik7Ci0gICAgLy8gU2FtcGxp
bmcgb3BzIHByb3ZpZGVkIGJ5IE9FU19FR0xfaW1hZ2VfZXh0ZXJuYWwuCi0gICAgbVNhbXBsaW5n
T3BzLmluc2VydCgidGV4dHVyZTJEKDE7dmYyOyIpOwotICAgIG1TYW1wbGluZ09wcy5pbnNlcnQo
InRleHR1cmUyRFByb2ooMTt2ZjM7Iik7Ci0gICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVy
ZTJEUHJvaigxO3ZmNDsiKTsKLSAgICAvLyBTYW1wbGluZyBvcHMgcHJvdmlkZWQgYnkgQVJCX3Rl
eHR1cmVfcmVjdGFuZ2xlLgotICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFJlY3Qo
MTt2ZjI7Iik7Ci0gICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUmVjdFByb2ooMTt2
ZjM7Iik7Ci0gICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUmVjdFByb2ooMTt2ZjQ7
Iik7Ci19Ci0KLS8vIEZJWE1FKG12dWpvdmljKTogV2UgZG8gbm90IGtub3cgaWYgdGhlIGV4ZWN1
dGlvbiB0aW1lIG9mIGJ1aWx0LWluIG9wZXJhdGlvbnMgbGlrZSBzaW4sIHBvdywgZXRjLgotLy8g
Y2FuIHZhcnkgYmFzZWQgb24gdGhlIHZhbHVlIG9mIHRoZSBpbnB1dCBhcmd1bWVudHMuIElmIHNv
LCB3ZSBzaG91bGQgcmVzdHJpY3QgdGhvc2UgYXMgd2VsbC4KLXZvaWQgUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZzo6ZW5mb3JjZVJlc3RyaWN0aW9ucyhjb25zdCBURGVwZW5kZW5jeUdyYXBo
JiBncmFwaCkKLXsKLSAgICBtTnVtRXJyb3JzID0gMDsKLQotICAgIC8vIEZJWE1FKG12dWpvdmlj
KTogVGhlIGRlcGVuZGVuY3kgZ3JhcGggZG9lcyBub3Qgc3VwcG9ydCB1c2VyIGRlZmluZWQgZnVu
Y3Rpb24gY2FsbHMgcmlnaHQgbm93LAotICAgIC8vIHNvIHdlIGdlbmVyYXRlIGVycm9ycyBmb3Ig
dGhlbS4KLSAgICB2YWxpZGF0ZVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxsVXNhZ2UoZ3JhcGgpOwot
Ci0gICAgLy8gU3RhcnRpbmcgZnJvbSBlYWNoIHNhbXBsZXIsIHRyYXZlcnNlIHRoZSBkZXBlbmRl
bmN5IGdyYXBoIGFuZCBnZW5lcmF0ZSBhbiBlcnJvciBlYWNoIHRpbWUgd2UKLSAgICAvLyBoaXQg
YSBub2RlIHdoZXJlIHNhbXBsZXIgZGVwZW5kZW50IHZhbHVlcyBhcmUgbm90IGFsbG93ZWQuCi0g
ICAgZm9yIChUR3JhcGhTeW1ib2xWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBncmFwaC5i
ZWdpblNhbXBsZXJTeW1ib2xzKCk7Ci0gICAgICAgICBpdGVyICE9IGdyYXBoLmVuZFNhbXBsZXJT
eW1ib2xzKCk7Ci0gICAgICAgICArK2l0ZXIpCi0gICAgewotICAgICAgICBUR3JhcGhTeW1ib2wq
IHNhbXBsZXJTeW1ib2wgPSAqaXRlcjsKLSAgICAgICAgY2xlYXJWaXNpdGVkKCk7Ci0gICAgICAg
IHNhbXBsZXJTeW1ib2wtPnRyYXZlcnNlKHRoaXMpOwotICAgIH0KLX0KLQotdm9pZCBSZXN0cmlj
dEZyYWdtZW50U2hhZGVyVGltaW5nOjp2YWxpZGF0ZVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxsVXNh
Z2UoY29uc3QgVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpCi17Ci0gICAgZm9yIChURnVuY3Rpb25D
YWxsVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZ3JhcGguYmVnaW5Vc2VyRGVmaW5lZEZ1
bmN0aW9uQ2FsbHMoKTsKLSAgICAgICAgIGl0ZXIgIT0gZ3JhcGguZW5kVXNlckRlZmluZWRGdW5j
dGlvbkNhbGxzKCk7Ci0gICAgICAgICArK2l0ZXIpCi0gICAgewotICAgICAgICBUR3JhcGhGdW5j
dGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCA9ICppdGVyOwotICAgICAgICBiZWdpbkVycm9yKGZ1bmN0
aW9uQ2FsbC0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkpOwotICAgICAgICBtU2luayA8PCAiQSBj
YWxsIHRvIGEgdXNlciBkZWZpbmVkIGZ1bmN0aW9uIGlzIG5vdCBwZXJtaXR0ZWQuXG4iOwotICAg
IH0KLX0KLQotdm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjpiZWdpbkVycm9yKGNv
bnN0IFRJbnRlcm1Ob2RlKiBub2RlKQotewotICAgICsrbU51bUVycm9yczsKLSAgICBtU2luay5w
cmVmaXgoRVByZWZpeEVycm9yKTsKLSAgICBtU2luay5sb2NhdGlvbihub2RlLT5nZXRMaW5lKCkp
OwotfQotCi1ib29sIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OmlzU2FtcGxpbmdPcChj
b25zdCBUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuICFpbnRlcm1GdW5jdGlvbkNhbGwtPmlzVXNlckRlZmluZWQoKSAmJgotICAgICAgICAg
ICBtU2FtcGxpbmdPcHMuZmluZChpbnRlcm1GdW5jdGlvbkNhbGwtPmdldE5hbWUoKSkgIT0gbVNh
bXBsaW5nT3BzLmVuZCgpOwotfQotCi12b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6
OnZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFtZXRlcikKLXsKLSAgICAvLyBUZXh0
dXJlIGNhY2hlIGFjY2VzcyB0aW1lIG1pZ2h0IGxlYWsgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLgot
ICAgIC8vIFRodXMsIHdlIHJlc3RyaWN0IHNhbXBsZXIgZGVwZW5kZW50IHZhbHVlcyBmcm9tIGFm
ZmVjdGluZyB0aGUgY29vcmRpbmF0ZSBvciBMT0QgYmlhcyBvZiBhCi0gICAgLy8gc2FtcGxpbmcg
b3BlcmF0aW9uLgotICAgIGlmIChpc1NhbXBsaW5nT3AocGFyYW1ldGVyLT5nZXRJbnRlcm1GdW5j
dGlvbkNhbGwoKSkpIHsKLSAgICAgICAgc3dpdGNoIChwYXJhbWV0ZXItPmdldEFyZ3VtZW50TnVt
YmVyKCkpIHsKLSAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICAvLyBTZWNvbmQg
YXJndW1lbnQgKGNvb3JkKQotICAgICAgICAgICAgICAgIGJlZ2luRXJyb3IocGFyYW1ldGVyLT5n
ZXRJbnRlcm1GdW5jdGlvbkNhbGwoKSk7Ci0gICAgICAgICAgICAgICAgbVNpbmsgPDwgIkFuIGV4
cHJlc3Npb24gZGVwZW5kZW50IG9uIGEgc2FtcGxlciBpcyBub3QgcGVybWl0dGVkIHRvIGJlIHRo
ZSIKLSAgICAgICAgICAgICAgICAgICAgICA8PCAiIGNvb3JkaW5hdGUgYXJndW1lbnQgb2YgYSBz
YW1wbGluZyBvcGVyYXRpb24uXG4iOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSAyOgotICAgICAgICAgICAgICAgIC8vIFRoaXJkIGFyZ3VtZW50IChiaWFzKQotICAg
ICAgICAgICAgICAgIGJlZ2luRXJyb3IocGFyYW1ldGVyLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwo
KSk7Ci0gICAgICAgICAgICAgICAgbVNpbmsgPDwgIkFuIGV4cHJlc3Npb24gZGVwZW5kZW50IG9u
IGEgc2FtcGxlciBpcyBub3QgcGVybWl0dGVkIHRvIGJlIHRoZSIKLSAgICAgICAgICAgICAgICAg
ICAgICA8PCAiIGJpYXMgYXJndW1lbnQgb2YgYSBzYW1wbGluZyBvcGVyYXRpb24uXG4iOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICAvLyBGaXJzdCBhcmd1bWVudCAoc2FtcGxlcikKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2
aXNpdFNlbGVjdGlvbihUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbikKLXsKLSAgICBiZWdpbkVy
cm9yKHNlbGVjdGlvbi0+Z2V0SW50ZXJtU2VsZWN0aW9uKCkpOwotICAgIG1TaW5rIDw8ICJBbiBl
eHByZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1pdHRlZCBpbiBhIGNv
bmRpdGlvbmFsIHN0YXRlbWVudC5cbiI7Ci19Ci0KLXZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRl
clRpbWluZzo6dmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3ApCi17Ci0gICAgYmVnaW5FcnJvcihs
b29wLT5nZXRJbnRlcm1Mb29wKCkpOwotICAgIG1TaW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVu
ZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1pdHRlZCBpbiBhIGxvb3AgY29uZGl0aW9uLlxu
IjsKLX0KLQotdm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdExvZ2ljYWxP
cChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCkKLXsKLSAgICBiZWdpbkVycm9yKGxvZ2ljYWxP
cC0+Z2V0SW50ZXJtTG9naWNhbE9wKCkpOwotICAgIG1TaW5rIDw8ICJBbiBleHByZXNzaW9uIGRl
cGVuZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1pdHRlZCBvbiB0aGUgbGVmdCBoYW5kIHNp
ZGUgb2YgYSBsb2dpY2FsICIKLSAgICAgICAgICA8PCBsb2dpY2FsT3AtPmdldE9wU3RyaW5nKCkK
LSAgICAgICAgICA8PCAiIG9wZXJhdG9yLlxuIjsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRp
bWluZy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0
cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDg5OTE2NWNhMjg3ZTMzMTAyNTdkMmMwNjBiMjBmZWM5ZDRlMzAzYjcuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxF
Ul9USU1JTkdfUkVTVFJJQ1RfRlJBR01FTlRfU0hBREVSX1RJTUlOR19IXwotI2RlZmluZSBDT01Q
SUxFUl9USU1JTkdfUkVTVFJJQ1RfRlJBR01FTlRfU0hBREVSX1RJTUlOR19IXwotCi0jaW5jbHVk
ZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCi0KLSNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlh
dGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCIKLQot
Y2xhc3MgVEluZm9TaW5rQmFzZTsKLQotY2xhc3MgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWlu
ZyA6IFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIgewotcHVibGljOgotICAgIFJlc3RyaWN0RnJh
Z21lbnRTaGFkZXJUaW1pbmcoVEluZm9TaW5rQmFzZSYgc2luayk7Ci0gICAgdm9pZCBlbmZvcmNl
UmVzdHJpY3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKTsKLSAgICBpbnQgbnVt
RXJyb3JzKCkgY29uc3QgeyByZXR1cm4gbU51bUVycm9yczsgfQotCi0gICAgdmlydHVhbCB2b2lk
IHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFtZXRlcik7Ci0gICAgdmlydHVhbCB2
b2lkIHZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKTsKLSAgICB2aXJ0
dWFsIHZvaWQgdmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3ApOwotICAgIHZpcnR1YWwgdm9pZCB2
aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCk7Ci0KLXByaXZhdGU6Ci0g
ICAgdm9pZCBiZWdpbkVycm9yKGNvbnN0IFRJbnRlcm1Ob2RlKiBub2RlKTsKLSAgICB2b2lkIHZh
bGlkYXRlVXNlckRlZmluZWRGdW5jdGlvbkNhbGxVc2FnZShjb25zdCBURGVwZW5kZW5jeUdyYXBo
JiBncmFwaCk7Ci0gICAgYm9vbCBpc1NhbXBsaW5nT3AoY29uc3QgVEludGVybUFnZ3JlZ2F0ZSog
aW50ZXJtRnVuY3Rpb25DYWxsKSBjb25zdDsKLQotICAgIFRJbmZvU2lua0Jhc2UmIG1TaW5rOwot
ICAgIGludCBtTnVtRXJyb3JzOwotCi0gICAgdHlwZWRlZiBzdGQ6OnNldDxUU3RyaW5nPiBTdHJp
bmdTZXQ7Ci0gICAgU3RyaW5nU2V0IG1TYW1wbGluZ09wczsKLX07Ci0KLSNlbmRpZiAgLy8gQ09N
UElMRVJfVElNSU5HX1JFU1RSSUNUX0ZSQUdNRU5UX1NIQURFUl9USU1JTkdfSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RW
ZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDM1NWViNjJkNjUwYjk5ZGU0Njg1YWE5ZDAxNDFkNGJmMjZlNTkwMDQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRp
bWluZy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
I2luY2x1ZGUgImNvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIgot
Ci12b2lkIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nOjp2aXNpdFN5bWJvbChUSW50ZXJtU3lt
Ym9sKiBub2RlKQotewotICAgIGlmIChJc1NhbXBsZXIobm9kZS0+Z2V0QmFzaWNUeXBlKCkpKSB7
Ci0gICAgICAgICsrbU51bUVycm9yczsKLSAgICAgICAgbVNpbmsubWVzc2FnZShFUHJlZml4RXJy
b3IsCi0gICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Z2V0TGluZSgpLAotICAgICAgICAgICAg
ICAgICAgICAgICJTYW1wbGVycyBhcmUgbm90IHBlcm1pdHRlZCBpbiB2ZXJ0ZXggc2hhZGVycyIp
OwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTlhMDVmYTY4YmM4YmZmZjc4YjY4YjQx
OTYyODYzMTI0OGNiNmM4MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3Ry
aWN0VmVydGV4U2hhZGVyVGltaW5nLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfVkVSVEVYX1NI
QURFUl9USU1JTkdfSF8KLSNkZWZpbmUgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX1ZFUlRFWF9T
SEFERVJfVElNSU5HX0hfCi0KLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLQotI2lu
Y2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL0luZm9T
aW5rLmgiCi0KLWNsYXNzIFRJbmZvU2lua0Jhc2U7Ci0KLWNsYXNzIFJlc3RyaWN0VmVydGV4U2hh
ZGVyVGltaW5nIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIFJlc3Ry
aWN0VmVydGV4U2hhZGVyVGltaW5nKFRJbmZvU2lua0Jhc2UmIHNpbmspCi0gICAgICAgIDogVElu
dGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwgZmFsc2UpCi0gICAgICAgICwgbVNpbmsoc2luaykK
LSAgICAgICAgLCBtTnVtRXJyb3JzKDApIHt9Ci0KLSAgICB2b2lkIGVuZm9yY2VSZXN0cmljdGlv
bnMoVEludGVybU5vZGUqIHJvb3QpIHsgcm9vdC0+dHJhdmVyc2UodGhpcyk7IH0KLSAgICBpbnQg
bnVtRXJyb3JzKCkgeyByZXR1cm4gbU51bUVycm9yczsgfQotCi0gICAgdmlydHVhbCB2b2lkIHZp
c2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKLXByaXZhdGU6Ci0gICAgVEluZm9TaW5rQmFzZSYg
bVNpbms7Ci0gICAgaW50IG1OdW1FcnJvcnM7Ci19OwotCi0jZW5kaWYgIC8vIENPTVBJTEVSX1RJ
TUlOR19SRVNUUklDVF9WRVJURVhfU0hBREVSX1RJTUlOR19IXwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IudmN4cHJvaiBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yLnZjeHByb2oKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNjk0OWYwODNkYTU3YzNjZDEyMzRiMGRkYjhiMDIw
ODE3OTk1OTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IudmN4cHJvagor
KysgL2Rldi9udWxsCkBAIC0xLDMwNCArMCwwIEBACi3vu788P3htbCB2ZXJzaW9uPSIxLjAiIGVu
Y29kaW5nPSJ1dGYtOCI/Pg0KLTxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNW
ZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Bl
ci9tc2J1aWxkLzIwMDMiPg0KLSAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRp
b25zIj4NCi0gICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4N
Ci0gICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4NCi0gICAgICA8UGxh
dGZvcm0+V2luMzI8L1BsYXRmb3JtPg0KLSAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KLSAg
ICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4NCi0gICAgICA8Q29u
ZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4NCi0gICAgICA8UGxhdGZvcm0+eDY0PC9Q
bGF0Zm9ybT4NCi0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCi0gICAgPFByb2plY3RDb25m
aWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPg0KLSAgICAgIDxDb25maWd1cmF0aW9u
PlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+DQotICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9y
bT4NCi0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCi0gICAgPFByb2plY3RDb25maWd1cmF0
aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4NCi0gICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNl
PC9Db25maWd1cmF0aW9uPg0KLSAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPg0KLSAgICA8
L1Byb2plY3RDb25maWd1cmF0aW9uPg0KLSAgPC9JdGVtR3JvdXA+DQotICA8UHJvcGVydHlHcm91
cCBMYWJlbD0iR2xvYmFscyI+DQotICAgIDxQcm9qZWN0R3VpZD57NUIzQTZEQjgtMUU3RS00MEQ3
LTkyQjktREE4QUFFNjE5RkFEfTwvUHJvamVjdEd1aWQ+DQotICAgIDxSb290TmFtZXNwYWNlPmNv
bXBpbGVyPC9Sb290TmFtZXNwYWNlPg0KLSAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+
DQotICAgIDxQcm9qZWN0TmFtZT50cmFuc2xhdG9yPC9Qcm9qZWN0TmFtZT4NCi0gIDwvUHJvcGVy
dHlHcm91cD4NCi0gIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQu
Q3BwLkRlZmF1bHQucHJvcHMiIC8+DQotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENv
bmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmln
dXJhdGlvbiI+DQotICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1
cmF0aW9uVHlwZT4NCi0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4NCi0g
ICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRp
b24+DQotICA8L1Byb3BlcnR5R3JvdXA+DQotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249Iick
KENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZp
Z3VyYXRpb24iPg0KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmln
dXJhdGlvblR5cGU+DQotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+DQot
ICA8L1Byb3BlcnR5R3JvdXA+DQotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRp
b24iPg0KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlv
blR5cGU+DQotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+DQotICAgIDxX
aG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPg0K
LSAgPC9Qcm9wZXJ0eUdyb3VwPg0KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25m
aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlv
biI+DQotICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9u
VHlwZT4NCi0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4NCi0gIDwvUHJv
cGVydHlHcm91cD4NCi0gIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3Nv
ZnQuQ3BwLnByb3BzIiAvPg0KLSAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5n
cyI+DQotICA8L0ltcG9ydEdyb3VwPg0KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29u
ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0
eVNoZWV0cyI+DQotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0
LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9v
dERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2Nh
bEFwcERhdGFQbGF0Zm9ybSIgLz4NCi0gIDwvSW1wb3J0R3JvdXA+DQotICA8SW1wb3J0R3JvdXAg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMici
IExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9v
dERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4
aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3Bz
JykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCi0gIDwvSW1wb3J0R3JvdXA+DQot
ICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQotICAgIDxJbXBvcnQgUHJv
amVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3Bz
IiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRm
b3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCi0gIDwv
SW1wb3J0R3JvdXA+DQotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u
KXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KLSAg
ICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9y
bSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29m
dC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZv
cm0iIC8+DQotICA8L0ltcG9ydEdyb3VwPg0KLSAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJN
YWNyb3MiIC8+DQotICA8UHJvcGVydHlHcm91cD4NCi0gICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+
MTAuMC40MDIxOS4xPC9fUHJvamVjdEZpbGVWZXJzaW9uPg0KLSAgICA8T3V0RGlyIENvbmRpdGlv
bj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4kKFNvbHV0
aW9uRGlyKSQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQotICAgIDxJbnREaXIgQ29uZGl0aW9u
PSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiQoQ29uZmln
dXJhdGlvbilcY29tbW9uXDwvSW50RGlyPg0KLSAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29u
ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JChTb2x1dGlvbkRpcikkKFBs
YXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KLSAgICA8SW50RGlyIENvbmRpdGlv
bj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JChQbGF0Zm9y
bSlcJChDb25maWd1cmF0aW9uKVw8L0ludERpcj4NCi0gICAgPE91dERpciBDb25kaXRpb249Iick
KENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4kKFNvbHV0aW9u
RGlyKSQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQotICAgIDxJbnREaXIgQ29uZGl0aW9uPSIn
JChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JChDb25maWd1
cmF0aW9uKVxjb21tb25cPC9JbnREaXI+DQotICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25m
aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiQoU29sdXRpb25EaXIpJChQ
bGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCi0gICAgPEludERpciBDb25kaXRp
b249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JChQbGF0
Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L0ludERpcj4NCi0gIDwvUHJvcGVydHlHcm91cD4NCi0g
IDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nRGVidWd8V2luMzInIj4NCi0gICAgPENsQ29tcGlsZT4NCi0gICAgICA8T3B0aW1p
emF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRl
RGlyZWN0b3JpZXM+JChQcm9qZWN0RGlyKTskKFByb2plY3REaXIpLi4vOyQoUHJvamVjdERpciku
Li8uLi9pbmNsdWRlOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJ
bmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMy
O19ERUJVRztfTElCO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWDslKFByZXByb2Nl
c3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPE1pbmlt
YWxSZWJ1aWxkPnRydWU8L01pbmltYWxSZWJ1aWxkPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVj
a3M+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxSdW50aW1l
TGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWc8L1J1bnRpbWVMaWJyYXJ5Pg0KLSAgICAgIDxQcmVj
b21waWxlZEhlYWRlcj4NCi0gICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDxXYXJu
aW5nTGV2ZWw+TGV2ZWw0PC9XYXJuaW5nTGV2ZWw+DQotICAgICAgPFRyZWF0V2FybmluZ0FzRXJy
b3I+dHJ1ZTwvVHJlYXRXYXJuaW5nQXNFcnJvcj4NCi0gICAgICA8RGVidWdJbmZvcm1hdGlvbkZv
cm1hdD5FZGl0QW5kQ29udGludWU8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQotICAgICAgPERp
c2FibGVTcGVjaWZpY1dhcm5pbmdzPjQxMDA7NDEyNzs0MTg5OzQyMzk7NDI0NDs0MjQ1OzQ1MTI7
NDcwMjs0NzE4OyUoRGlzYWJsZVNwZWNpZmljV2FybmluZ3MpPC9EaXNhYmxlU3BlY2lmaWNXYXJu
aW5ncz4NCi0gICAgPC9DbENvbXBpbGU+DQotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQotICA8
SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZv
cm0pJz09J0RlYnVnfHg2NCciPg0KLSAgICA8TWlkbD4NCi0gICAgICA8VGFyZ2V0RW52aXJvbm1l
bnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4NCi0gICAgPC9NaWRsPg0KLSAgICA8Q2xDb21waWxl
Pg0KLSAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8
QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKFByb2plY3REaXIpOyQoUHJvamVjdERpciku
Li87JChQcm9qZWN0RGlyKS4uLy4uL2luY2x1ZGU7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9y
aWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29y
RGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19MSUI7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO05P
TUlOTUFYOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9u
cz4NCi0gICAgICA8TWluaW1hbFJlYnVpbGQ+dHJ1ZTwvTWluaW1hbFJlYnVpbGQ+DQotICAgICAg
PEJhc2ljUnVudGltZUNoZWNrcz5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+
DQotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1ZzwvUnVudGltZUxpYnJh
cnk+DQotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDwvUHJlY29tcGlsZWRIZWFk
ZXI+DQotICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDQ8L1dhcm5pbmdMZXZlbD4NCi0gICAgICA8
VHJlYXRXYXJuaW5nQXNFcnJvcj50cnVlPC9UcmVhdFdhcm5pbmdBc0Vycm9yPg0KLSAgICAgIDxE
ZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZv
cm1hdD4NCi0gICAgICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+NDEwMDs0MTI3OzQxODk7NDIz
OTs0MjQ0OzQyNDU7NDI2Nzs0NTEyOzQ3MDI7NDcxODslKERpc2FibGVTcGVjaWZpY1dhcm5pbmdz
KTwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgPC9JdGVt
RGVmaW5pdGlvbkdyb3VwPg0KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChD
b25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+DQotICAgIDxDbENv
bXBpbGU+DQotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAg
ICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5BbnlTdWl0YWJsZTwvSW5saW5lRnVuY3Rpb25F
eHBhbnNpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChQcm9qZWN0
RGlyKTskKFByb2plY3REaXIpLi4vOyQoUHJvamVjdERpcikuLi8uLi9pbmNsdWRlOyUoQWRkaXRp
b25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQot
ICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfTElCO19DUlRfU0VD
VVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWDtfU0VDVVJFX1NDTD0wOyUoUHJlcHJvY2Vzc29yRGVm
aW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UnVudGltZUxpYnJh
cnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+DQotICAgICAgPFByZWNvbXBpbGVkSGVh
ZGVyPg0KLSAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAgICAgPFdhcm5pbmdMZXZlbD5M
ZXZlbDQ8L1dhcm5pbmdMZXZlbD4NCi0gICAgICA8VHJlYXRXYXJuaW5nQXNFcnJvcj50cnVlPC9U
cmVhdFdhcm5pbmdBc0Vycm9yPg0KLSAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dy
YW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCi0gICAgICA8RGlzYWJsZVNwZWNp
ZmljV2FybmluZ3M+NDEwMDs0MTI3OzQxODk7NDIzOTs0MjQ0OzQyNDU7NDUxMjs0NzAyOzQ3MTg7
JShEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncyk8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPg0KLSAg
ICA8L0NsQ29tcGlsZT4NCi0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCi0gIDxJdGVtRGVmaW5p
dGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVs
ZWFzZXx4NjQnIj4NCi0gICAgPE1pZGw+DQotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwv
VGFyZ2V0RW52aXJvbm1lbnQ+DQotICAgIDwvTWlkbD4NCi0gICAgPENsQ29tcGlsZT4NCi0gICAg
ICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPElubGluZUZ1
bmN0aW9uRXhwYW5zaW9uPkFueVN1aXRhYmxlPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCi0g
ICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKFByb2plY3REaXIpOyQoUHJvamVj
dERpcikuLi87JChQcm9qZWN0RGlyKS4uLy4uL2luY2x1ZGU7JShBZGRpdGlvbmFsSW5jbHVkZURp
cmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJv
Y2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19MSUI7X0NSVF9TRUNVUkVfTk9fREVQUkVD
QVRFO05PTUlOTUFYO19TRUNVUkVfU0NMPTA7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1By
ZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVh
ZGVkPC9SdW50aW1lTGlicmFyeT4NCi0gICAgICA8UHJlY29tcGlsZWRIZWFkZXI+DQotICAgICAg
PC9QcmVjb21waWxlZEhlYWRlcj4NCi0gICAgICA8V2FybmluZ0xldmVsPkxldmVsNDwvV2Fybmlu
Z0xldmVsPg0KLSAgICAgIDxUcmVhdFdhcm5pbmdBc0Vycm9yPnRydWU8L1RyZWF0V2FybmluZ0Fz
RXJyb3I+DQotICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9E
ZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KLSAgICAgIDxEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz40
MTAwOzQxMjc7NDE4OTs0MjM5OzQyNDQ7NDI0NTs0MjY3OzQ1MTI7NDcwMjs0NzE4OyUoRGlzYWJs
ZVNwZWNpZmljV2FybmluZ3MpPC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4NCi0gICAgPC9DbENv
bXBpbGU+DQotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQotICA8SXRlbUdyb3VwPg0KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9IkJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCIgLz4NCi0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSJDb2RlR2VuLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSJDb21waWxlci5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iZGVidWcuY3Bw
IiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkRldGVjdENhbGxEZXB0aC5jcHAiIC8+DQot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iRGV0ZWN0RGlzY29udGludWl0eS5jcHAiIC8+DQotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iRGlhZ25vc3RpY3MuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9IkRpcmVjdGl2ZUhhbmRsZXIuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9IkZvckxvb3BVbnJvbGwuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkluZm9T
aW5rLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJJbml0aWFsaXplLmNwcCIgLz4N
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJJbml0aWFsaXplRGxsLmNwcCIgLz4NCi0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSJJbml0aWFsaXplR0xQb3NpdGlvbi5jcHAiIC8+DQotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAiIC8+DQotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iSW50ZXJtZWRpYXRlLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSJpbnRlcm1PdXQuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkludGVybVRy
YXZlcnNlLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJNYXBMb25nVmFyaWFibGVO
YW1lcy5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0ib3Nzb3VyY2Vfd2luLmNwcCIg
Lz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJPdXRwdXRFU1NMLmNwcCIgLz4NCi0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSJPdXRwdXRHTFNMLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSJPdXRwdXRHTFNMQmFzZS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iT3V0
cHV0SExTTC5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icGFyc2VDb25zdC5jcHAi
IC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iUGFyc2VDb250ZXh0LmNwcCIgLz4NCi0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSJQb29sQWxsb2MuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9IlF1YWxpZmllckFsaXZlLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJS
ZW1vdmVUcmVlLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJTZWFyY2hTeW1ib2wu
Y3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlNoYWRlckxhbmcuY3BwIiAvPg0KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9IlN5bWJvbFRhYmxlLmNwcCIgLz4NCi0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSJUcmFuc2xhdG9yRVNTTC5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iVHJhbnNsYXRvckdMU0wuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlRyYW5z
bGF0b3JITFNMLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJVbmZvbGRTaG9ydENp
cmN1aXQuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlVuZm9sZFNob3J0Q2lyY3Vp
dEFTVC5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iVW5pZm9ybS5jcHAiIC8+DQot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0idXRpbC5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iVmFyaWFibGVJbmZvLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJWYXJpYWJs
ZVBhY2tlci5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iZ2xzbGFuZ19sZXguY3Bw
IiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Imdsc2xhbmdfdGFiLmNwcCIgLz4NCi0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSJkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGguY3BwIiAvPg0KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9ImRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3Bw
IiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaE91
dHB1dC5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iZGVwZ3JhcGhcRGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2UuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InRpbWluZ1xS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSJ0aW1pbmdcUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIiAvPg0KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHRoaXJkX3BhcnR5XGNvbXBpbGVyXEFycmF5Qm91bmRzQ2xhbXBl
ci5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iVmVyc2lvbkdMU0wuY3BwIiAvPg0K
LSAgPC9JdGVtR3JvdXA+DQotICA8SXRlbUdyb3VwPg0KLSAgICA8Q3VzdG9tQnVpbGQgSW5jbHVk
ZT0iZ2xzbGFuZy5sIj4NCi0gICAgICA8TWVzc2FnZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRp
b24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+DQotICAgICAgPC9NZXNzYWdlPg0KLSAg
ICAgIDxDb21tYW5kIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n
RGVidWd8V2luMzInIj4NCi0gICAgICA8L0NvbW1hbmQ+DQotICAgICAgPEFkZGl0aW9uYWxJbnB1
dHMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4z
MiciPiUoQWRkaXRpb25hbElucHV0cyk8L0FkZGl0aW9uYWxJbnB1dHM+DQotICAgICAgPE91dHB1
dHMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4z
MiciPiUoT3V0cHV0cyk8L091dHB1dHM+DQotICAgICAgPE1lc3NhZ2UgQ29uZGl0aW9uPSInJChD
b25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4NCi0gICAgICA8L01lc3Nh
Z2U+DQotICAgICAgPENvbW1hbmQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRm
b3JtKSc9PSdEZWJ1Z3x4NjQnIj4NCi0gICAgICA8L0NvbW1hbmQ+DQotICAgICAgPEFkZGl0aW9u
YWxJbnB1dHMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1
Z3x4NjQnIj4lKEFkZGl0aW9uYWxJbnB1dHMpPC9BZGRpdGlvbmFsSW5wdXRzPg0KLSAgICAgIDxP
dXRwdXRzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8
eDY0JyI+JShPdXRwdXRzKTwvT3V0cHV0cz4NCi0gICAgICA8TWVzc2FnZSBDb25kaXRpb249Iick
KENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4NCi0gICAgICA8
L01lc3NhZ2U+DQotICAgICAgPENvbW1hbmQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+DQotICAgICAgPC9Db21tYW5kPg0KLSAgICAg
IDxBZGRpdGlvbmFsSW5wdXRzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9y
bSknPT0nUmVsZWFzZXxXaW4zMiciPiUoQWRkaXRpb25hbElucHV0cyk8L0FkZGl0aW9uYWxJbnB1
dHM+DQotICAgICAgPE91dHB1dHMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRm
b3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JShPdXRwdXRzKTwvT3V0cHV0cz4NCi0gICAgICA8TWVz
c2FnZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8
eDY0JyI+DQotICAgICAgPC9NZXNzYWdlPg0KLSAgICAgIDxDb21tYW5kIENvbmRpdGlvbj0iJyQo
Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4NCi0gICAgICA8L0Nv
bW1hbmQ+DQotICAgICAgPEFkZGl0aW9uYWxJbnB1dHMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoQWRkaXRpb25hbElucHV0cyk8L0Fk
ZGl0aW9uYWxJbnB1dHM+DQotICAgICAgPE91dHB1dHMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoT3V0cHV0cyk8L091dHB1dHM+DQot
ICAgIDwvQ3VzdG9tQnVpbGQ+DQotICAgIDxDdXN0b21CdWlsZCBJbmNsdWRlPSJnbHNsYW5nLnki
Pg0KLSAgICAgIDxNZXNzYWdlIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9y
bSknPT0nRGVidWd8V2luMzInIj4NCi0gICAgICA8L01lc3NhZ2U+DQotICAgICAgPENvbW1hbmQg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMici
Pg0KLSAgICAgIDwvQ29tbWFuZD4NCi0gICAgICA8T3V0cHV0cyBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShPdXRwdXRzKTwvT3V0cHV0
cz4NCi0gICAgICA8TWVzc2FnZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZv
cm0pJz09J0RlYnVnfHg2NCciPg0KLSAgICAgIDwvTWVzc2FnZT4NCi0gICAgICA8Q29tbWFuZCBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPg0K
LSAgICAgIDwvQ29tbWFuZD4NCi0gICAgICA8T3V0cHV0cyBDb25kaXRpb249IickKENvbmZpZ3Vy
YXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoT3V0cHV0cyk8L091dHB1dHM+DQot
ICAgICAgPE1lc3NhZ2UgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdSZWxlYXNlfFdpbjMyJyI+DQotICAgICAgPC9NZXNzYWdlPg0KLSAgICAgIDxDb21tYW5kIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMici
Pg0KLSAgICAgIDwvQ29tbWFuZD4NCi0gICAgICA8T3V0cHV0cyBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKE91dHB1dHMpPC9PdXRw
dXRzPg0KLSAgICAgIDxNZXNzYWdlIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4NCi0gICAgICA8L01lc3NhZ2U+DQotICAgICAgPENvbW1h
bmQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2
NCciPg0KLSAgICAgIDwvQ29tbWFuZD4NCi0gICAgICA8T3V0cHV0cyBDb25kaXRpb249IickKENv
bmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JShPdXRwdXRzKTwvT3V0
cHV0cz4NCi0gICAgPC9DdXN0b21CdWlsZD4NCi0gIDwvSXRlbUdyb3VwPg0KLSAgPEl0ZW1Hcm91
cD4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJCYXNlVHlwZXMuaCIgLz4NCi0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSJCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oIiAvPg0KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9IkNvbW1vbi5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkNvbnN0
YW50VW5pb24uaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJkZWJ1Zy5oIiAvPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkRldGVjdENhbGxEZXB0aC5oIiAvPg0KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9IkRldGVjdERpc2NvbnRpbnVpdHkuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSJEaWFnbm9zdGljcy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkRpcmVj
dGl2ZUhhbmRsZXIuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJGb3JMb29wVW5yb2xs
LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iSGFzaE5hbWVzLmgiIC8+DQotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iSW5mb1NpbmsuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSJJbml0aWFsaXplLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iSW5pdGlhbGl6ZURs
bC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkluaXRpYWxpemVHbG9iYWxzLmgiIC8+
DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iSW5pdGlhbGl6ZUdMUG9zaXRpb24uaCIgLz4NCi0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSJJbml0aWFsaXplUGFyc2VDb250ZXh0LmgiIC8+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iaW50ZXJtZWRpYXRlLmgiIC8+DQotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0ibG9jYWxpbnRlcm1lZGlhdGUuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSJNYXBMb25nVmFyaWFibGVOYW1lcy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ik1N
YXAuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJOb2RlU2VhcmNoLmgiIC8+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0ib3NpbmNsdWRlLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iT3V0cHV0RVNTTC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ik91dHB1dEdM
U0wuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJPdXRwdXRHTFNMQmFzZS5oIiAvPg0K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ik91dHB1dEhMU0wuaCIgLz4NCi0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSJQYXJzZUNvbnRleHQuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJQ
b29sQWxsb2MuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJRdWFsaWZpZXJBbGl2ZS5o
IiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlJlbW92ZVRyZWUuaCIgLz4NCi0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSJSZW5hbWVGdW5jdGlvbi5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXC4uXGluY2x1ZGVcR0xTTEFOR1xTaGFkZXJMYW5nLmgiIC8+DQotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iU2VhcmNoU3ltYm9sLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iU2hIYW5kbGUuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJTeW1ib2xUYWJsZS5o
IiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlRyYW5zbGF0b3JFU1NMLmgiIC8+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iVHJhbnNsYXRvckdMU0wuaCIgLz4NCi0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSJUcmFuc2xhdG9ySExTTC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
IlR5cGVzLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iVW5mb2xkU2hvcnRDaXJjdWl0
LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iVW5mb2xkU2hvcnRDaXJjdWl0QVNULmgi
IC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iVW5pZm9ybS5oIiAvPg0KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9InV0aWwuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJWYWxpZGF0
ZUxpbWl0YXRpb25zLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iVmFyaWFibGVJbmZv
LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iVmFyaWFibGVQYWNrZXIuaCIgLz4NCi0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSJnbHNsYW5nX3RhYi5oIiAvPg0KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9InRpbWluZ1xSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgiIC8+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0idGltaW5nXFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgi
IC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoLmgi
IC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoQnVp
bGRlci5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImRlcGdyYXBoXERlcGVuZGVuY3lH
cmFwaE91dHB1dC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHRoaXJkX3BhcnR5
XGNvbXBpbGVyXEFycmF5Qm91bmRzQ2xhbXBlci5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9IlZlcnNpb25HTFNMLmgiIC8+DQotICA8L0l0ZW1Hcm91cD4NCi0gIDxJbXBvcnQgUHJvamVj
dD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+DQotICA8SW1wb3J0
R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPg0KLSAgPC9JbXBvcnRHcm91cD4NCi08L1By
b2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IudmN4cHJvai5maWx0ZXJzIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IudmN4cHJvai5m
aWx0ZXJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjYzMTM3ZTYxZmFlMWI4N2Fm
OGZhZTA1NTg3MmQwYWRmYmEzZDY0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yLnZjeHByb2ouZmlsdGVycworKysgL2Rldi9udWxsCkBAIC0xLDM2MSArMCwwIEBACi3vu788
P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTxQcm9qZWN0IFRvb2xzVmVy
c2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIv
bXNidWlsZC8yMDAzIj4NCi0gIDxJdGVtR3JvdXA+DQotICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291
cmNlIEZpbGVzIj4NCi0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57NEZDNzM3RjEtQzdBNS00Mzc2
LUEwNjYtMkEzMkQ3NTJBMkZGfTwvVW5pcXVlSWRlbnRpZmllcj4NCi0gICAgICA8RXh0ZW5zaW9u
cz5jcHA7YztjYztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNteDwvRXh0ZW5zaW9ucz4N
Ci0gICAgPC9GaWx0ZXI+DQotICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzXGdlbmVy
YXRlZCI+DQotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+e2ViOGRhMTU3LWIyOWMtNDNjMy04ODBk
LTU0Njc5ZTE3NmRjNX08L1VuaXF1ZUlkZW50aWZpZXI+DQotICAgIDwvRmlsdGVyPg0KLSAgICA8
RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlc1xkZXBncmFwaCI+DQotICAgICAgPFVuaXF1ZUlk
ZW50aWZpZXI+e2I1NDEwZDNhLWMzYzgtNGFlNi04NDNhLWIwMDBkNjUyNjMyZX08L1VuaXF1ZUlk
ZW50aWZpZXI+DQotICAgIDwvRmlsdGVyPg0KLSAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBG
aWxlc1x0aW1pbmciPg0KLSAgICAgIDxVbmlxdWVJZGVudGlmaWVyPnthOTg0NzYxMS1kY2Q1LTRj
ODktODI2Mi1hMjJiOTZjN2M5OGR9PC9VbmlxdWVJZGVudGlmaWVyPg0KLSAgICA8L0ZpbHRlcj4N
Ci0gICAgPEZpbHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXMiPg0KLSAgICAgIDxVbmlxdWVJZGVu
dGlmaWVyPns5Mzk5NTM4MC04OUJELTRiMDQtODhFQi02MjVGQkU1MkVCRkJ9PC9VbmlxdWVJZGVu
dGlmaWVyPg0KLSAgICAgIDxFeHRlbnNpb25zPmg7aHBwO2h4eDtobTtpbmw7aW5jO3hzZDwvRXh0
ZW5zaW9ucz4NCi0gICAgPC9GaWx0ZXI+DQotICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZp
bGVzXGdlbmVyYXRlZCI+DQotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezA5NGY3MTE1LTM1ZDMt
NGM2My04NzBjLWFiNWYzOTNkYzJjMn08L1VuaXF1ZUlkZW50aWZpZXI+DQotICAgIDwvRmlsdGVy
Pg0KLSAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlc1x0aW1pbmciPg0KLSAgICAgIDxV
bmlxdWVJZGVudGlmaWVyPns1ZjU3NDJlOS0xNWUxLTQzYjQtYjFlNy0wYzExOGJlMTRlMDR9PC9V
bmlxdWVJZGVudGlmaWVyPg0KLSAgICA8L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJbmNsdWRlPSJI
ZWFkZXIgRmlsZXNcZGVwZ3JhcGgiPg0KLSAgICAgIDxVbmlxdWVJZGVudGlmaWVyPntjNDAwN2Uz
NS0zYzExLTQ0ZDYtOTVmNy1iYjgxZGI1MjgwNjh9PC9VbmlxdWVJZGVudGlmaWVyPg0KLSAgICA8
L0ZpbHRlcj4NCi0gIDwvSXRlbUdyb3VwPg0KLSAgPEl0ZW1Hcm91cD4NCi0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSJCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+
U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9IkNvbXBpbGVyLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0Zp
bHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iZGVidWcu
Y3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29t
cGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJEZXRlY3RDYWxsRGVwdGguY3BwIj4NCi0g
ICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSJEaWFnbm9zdGljcy5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+
U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9IkRpcmVjdGl2ZUhhbmRsZXIuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBG
aWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSJGb3JMb29wVW5yb2xsLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRl
cj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iSW5mb1Npbmsu
Y3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29t
cGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJJbml0aWFsaXplLmNwcCI+DQotICAgICAg
PEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iSW5pdGlhbGl6ZURsbC5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291
cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9IkluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJj
ZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSJJbnRlcm1lZGlhdGUuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmls
dGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJpbnRlcm1P
dXQuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0Ns
Q29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJJbnRlcm1UcmF2ZXJzZS5jcHAiPg0K
LSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ik1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCI+DQotICAg
ICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0ib3Nzb3VyY2Vfd2luLmNwcCI+DQotICAgICAgPEZpbHRlcj5T
b3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0icGFyc2VDb25zdC5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9G
aWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlBvb2xB
bGxvYy5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwv
Q2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlF1YWxpZmllckFsaXZlLmNwcCI+
DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+
DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iUmVtb3ZlVHJlZS5jcHAiPg0KLSAgICAgIDxGaWx0
ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9IlNoYWRlckxhbmcuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxl
czwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJT
eW1ib2xUYWJsZS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQot
ICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InV0aWwuY3BwIj4NCi0g
ICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSJWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCI+DQotICAgICAg
PEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iVmFyaWFibGVJbmZvLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3Vy
Y2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iVmFyaWFibGVQYWNrZXIuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwv
RmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJnbHNs
YW5nX2xleC5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGdlbmVyYXRlZDwvRmls
dGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJnbHNsYW5n
X3RhYi5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGdlbmVyYXRlZDwvRmlsdGVy
Pg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJkZXBncmFwaFxE
ZXBlbmRlbmN5R3JhcGguY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xkZXBncmFw
aDwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJk
ZXBncmFwaFxEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3Vy
Y2UgRmlsZXNcZGVwZ3JhcGg8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCI+DQotICAg
ICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcZGVwZ3JhcGg8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBp
bGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoVHJh
dmVyc2UuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xkZXBncmFwaDwvRmlsdGVy
Pg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJ0aW1pbmdcUmVz
dHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZp
bGVzXHRpbWluZzwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSJ0aW1pbmdcUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIj4NCi0gICAgICA8
RmlsdGVyPlNvdXJjZSBGaWxlc1x0aW1pbmc8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cdGhpcmRfcGFydHlcY29tcGlsZXJcQXJyYXlCb3Vu
ZHNDbGFtcGVyLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0g
ICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iSW5pdGlhbGl6ZUdMUG9z
aXRpb24uY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8
L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJEZXRlY3REaXNjb250aW51aXR5
LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENv
bXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iT3V0cHV0SExTTC5jcHAiPg0KLSAgICAg
IDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9IlNlYXJjaFN5bWJvbC5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291
cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9IlRyYW5zbGF0b3JITFNMLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8
L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iVW5m
b2xkU2hvcnRDaXJjdWl0LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRl
cj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iVW5pZm9ybS5j
cHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21w
aWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkNvZGVHZW4uY3BwIj4NCi0gICAgICA8Rmls
dGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSJUcmFuc2xhdG9yR0xTTC5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNl
IEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9IlRyYW5zbGF0b3JFU1NMLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0Zp
bHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iT3V0cHV0
RVNTTC5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwv
Q2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ik91dHB1dEdMU0wuY3BwIj4NCi0g
ICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSJPdXRwdXRHTFNMQmFzZS5jcHAiPg0KLSAgICAgIDxGaWx0
ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9IlZlcnNpb25HTFNMLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmls
ZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
VW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8
L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iUGFy
c2VDb250ZXh0LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0g
ICAgPC9DbENvbXBpbGU+DQotICA8L0l0ZW1Hcm91cD4NCi0gIDxJdGVtR3JvdXA+DQotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iQmFzZVR5cGVzLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZp
bGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
IkJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVz
PC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkNv
bW1vbi5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0Ns
SW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJDb25zdGFudFVuaW9uLmgiPg0KLSAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImRlYnVnLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZp
bGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
IkRldGVjdENhbGxEZXB0aC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVy
Pg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJEaWFnbm9zdGlj
cy5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5j
bHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJEaXJlY3RpdmVIYW5kbGVyLmgiPg0KLSAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkZvckxvb3BVbnJvbGwuaCI+DQotICAgICAgPEZpbHRlcj5I
ZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iSW5mb1NpbmsuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRl
cj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iSW5pdGlhbGl6
ZS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5j
bHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJJbml0aWFsaXplRGxsLmgiPg0KLSAgICAg
IDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9IkluaXRpYWxpemVHbG9iYWxzLmgiPg0KLSAgICAgIDxGaWx0ZXI+
SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9IkluaXRpYWxpemVQYXJzZUNvbnRleHQuaCI+DQotICAgICAgPEZpbHRlcj5IZWFk
ZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iaW50ZXJtZWRpYXRlLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0
ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImxvY2FsaW50
ZXJtZWRpYXRlLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAg
IDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ik1hcExvbmdWYXJpYWJsZU5h
bWVzLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJ
bmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ik1NYXAuaCI+DQotICAgICAgPEZpbHRl
cj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0ib3NpbmNsdWRlLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9G
aWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlBvb2xB
bGxvYy5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0Ns
SW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJRdWFsaWZpZXJBbGl2ZS5oIj4NCi0g
ICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSJSZW1vdmVUcmVlLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVh
ZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9IlJlbmFtZUZ1bmN0aW9uLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9G
aWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4u
XGluY2x1ZGVcR0xTTEFOR1xTaGFkZXJMYW5nLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZp
bGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
IlNoSGFuZGxlLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAg
IDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlN5bWJvbFRhYmxlLmgiPg0K
LSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlR5cGVzLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVy
IEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9InV0aWwuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAg
PC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iVmFsaWRhdGVMaW1pdGF0aW9u
cy5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5j
bHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJWYXJpYWJsZUluZm8uaCI+DQotICAgICAg
PEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iVmFyaWFibGVQYWNrZXIuaCI+DQotICAgICAgPEZpbHRlcj5IZWFk
ZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iZ2xzbGFuZ190YWIuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcZ2VuZXJh
dGVkPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
InRpbWluZ1xSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgiPg0KLSAgICAgIDxGaWx0ZXI+
SGVhZGVyIEZpbGVzXHRpbWluZzwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSJ0aW1pbmdcUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCI+DQot
ICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGltaW5nPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNs
dWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaC5o
Ij4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xkZXBncmFwaDwvRmlsdGVyPg0KLSAgICA8
L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJkZXBncmFwaFxEZXBlbmRlbmN5
R3JhcGhCdWlsZGVyLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXGRlcGdyYXBoPC9G
aWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImRlcGdy
YXBoXERlcGVuZGVuY3lHcmFwaE91dHB1dC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxl
c1xkZXBncmFwaDwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSJIYXNoTmFtZXMuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRl
cj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iSW5pdGlhbGl6
ZUdMUG9zaXRpb24uaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0g
ICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cdGhpcmRfcGFydHlc
Y29tcGlsZXJcQXJyYXlCb3VuZHNDbGFtcGVyLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZp
bGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
IkRldGVjdERpc2NvbnRpbnVpdHkuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0Zp
bHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iT3V0cHV0
SExTTC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0Ns
SW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJTZWFyY2hTeW1ib2wuaCI+DQotICAg
ICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iVHJhbnNsYXRvckhMU0wuaCI+DQotICAgICAgPEZpbHRlcj5I
ZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iVW5mb2xkU2hvcnRDaXJjdWl0LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZp
bGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
IlVuaWZvcm0uaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAg
PC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iVHJhbnNsYXRvckdMU0wuaCI+
DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+
DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iVHJhbnNsYXRvckVTU0wuaCI+DQotICAgICAgPEZp
bHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iT3V0cHV0RVNTTC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxl
czwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJP
dXRwdXRHTFNMLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAg
IDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ik91dHB1dEdMU0xCYXNlLmgi
Pg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRl
Pg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlZlcnNpb25HTFNMLmgiPg0KLSAgICAgIDxGaWx0
ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9IlVuZm9sZFNob3J0Q2lyY3VpdEFTVC5oIj4NCi0gICAgICA8RmlsdGVyPkhl
YWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSJQYXJzZUNvbnRleHQuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0Zp
bHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iTm9kZVNl
YXJjaC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0Ns
SW5jbHVkZT4NCi0gIDwvSXRlbUdyb3VwPg0KLSAgPEl0ZW1Hcm91cD4NCi0gICAgPEN1c3RvbUJ1
aWxkIEluY2x1ZGU9Imdsc2xhbmcubCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0Zp
bHRlcj4NCi0gICAgPC9DdXN0b21CdWlsZD4NCi0gICAgPEN1c3RvbUJ1aWxkIEluY2x1ZGU9Imds
c2xhbmcueSI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9D
dXN0b21CdWlsZD4NCi0gIDwvSXRlbUdyb3VwPg0KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9CYXNlVHlwZXMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL0Jhc2VUeXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdiZGFmMTQ5ODM5
ZDBhZjdiYjU2NDQwZjg0MTNhOGQ0MjA5NDUwZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9CYXNlVHlwZXMuaApAQCAt
MCwwICsxLDE0OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfQkFTSUNUWVBFU19J
TkNMVURFRF8KKyNkZWZpbmUgX0JBU0lDVFlQRVNfSU5DTFVERURfCisKKy8vCisvLyBQcmVjaXNp
b24gcXVhbGlmaWVycworLy8KK2VudW0gVFByZWNpc2lvbgoreworICAgIC8vIFRoZXNlIG5lZWQg
dG8gYmUga2VwdCBzb3J0ZWQKKyAgICBFYnBVbmRlZmluZWQsCisgICAgRWJwTG93LAorICAgIEVi
cE1lZGl1bSwKKyAgICBFYnBIaWdoCit9OworCitpbmxpbmUgY29uc3QgY2hhciogZ2V0UHJlY2lz
aW9uU3RyaW5nKFRQcmVjaXNpb24gcCkKK3sKKyAgICBzd2l0Y2gocCkKKyAgICB7CisgICAgY2Fz
ZSBFYnBIaWdoOgkJcmV0dXJuICJoaWdocCI7CQlicmVhazsKKyAgICBjYXNlIEVicE1lZGl1bToJ
CXJldHVybiAibWVkaXVtcCI7CWJyZWFrOworICAgIGNhc2UgRWJwTG93OgkJcmV0dXJuICJsb3dw
IjsJCWJyZWFrOworICAgIGRlZmF1bHQ6CQkJcmV0dXJuICJtZWRpdW1wIjsgICBicmVhazsgICAv
LyBTYWZlc3QgZmFsbGJhY2sKKyAgICB9Cit9CisKKy8vCisvLyBCYXNpYyB0eXBlLiAgQXJyYXlz
LCB2ZWN0b3JzLCBldGMuLCBhcmUgb3J0aG9nb25hbCB0byB0aGlzLgorLy8KK2VudW0gVEJhc2lj
VHlwZQoreworICAgIEVidFZvaWQsCisgICAgRWJ0RmxvYXQsCisgICAgRWJ0SW50LAorICAgIEVi
dEJvb2wsCisgICAgRWJ0R3VhcmRTYW1wbGVyQmVnaW4sICAvLyBub24gdHlwZTogIHNlZSBpbXBs
ZW1lbnRhdGlvbiBvZiBJc1NhbXBsZXIoKQorICAgIEVidFNhbXBsZXIyRCwKKyAgICBFYnRTYW1w
bGVyQ3ViZSwKKyAgICBFYnRTYW1wbGVyRXh0ZXJuYWxPRVMsICAvLyBPbmx5IHZhbGlkIGlmIE9F
U19FR0xfaW1hZ2VfZXh0ZXJuYWwgZXhpc3RzLgorICAgIEVidFNhbXBsZXIyRFJlY3QsICAgICAg
IC8vIE9ubHkgdmFsaWQgaWYgR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlIGV4aXN0cy4KKyAgICBF
YnRHdWFyZFNhbXBsZXJFbmQsICAgIC8vIG5vbiB0eXBlOiAgc2VlIGltcGxlbWVudGF0aW9uIG9m
IElzU2FtcGxlcigpCisgICAgRWJ0U3RydWN0LAorICAgIEVidEFkZHJlc3MsICAgICAgICAgICAg
Ly8gc2hvdWxkIGJlIGRlcHJlY2F0ZWQ/PworICAgIEVidEludmFyaWFudCAgICAgICAgICAvLyB1
c2VkIGFzIGEgdHlwZSB3aGVuIHF1YWxpZnlpbmcgYSBwcmV2aW91c2x5IGRlY2xhcmVkIHZhcmlh
YmxlIGFzIGJlaW5nIGludmFyaWFudAorfTsKKworaW5saW5lIGNvbnN0IGNoYXIqIGdldEJhc2lj
U3RyaW5nKFRCYXNpY1R5cGUgdCkKK3sKKyAgICBzd2l0Y2ggKHQpCisgICAgeworICAgIGNhc2Ug
RWJ0Vm9pZDogICAgICAgICAgICAgIHJldHVybiAidm9pZCI7ICAgICAgICAgICAgICBicmVhazsK
KyAgICBjYXNlIEVidEZsb2F0OiAgICAgICAgICAgICByZXR1cm4gImZsb2F0IjsgICAgICAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBFYnRJbnQ6ICAgICAgICAgICAgICAgcmV0dXJuICJpbnQiOyAg
ICAgICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRWJ0Qm9vbDogICAgICAgICAgICAgIHJldHVy
biAiYm9vbCI7ICAgICAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEVidFNhbXBsZXIyRDogICAg
ICAgICByZXR1cm4gInNhbXBsZXIyRCI7ICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFYnRTYW1w
bGVyQ3ViZTogICAgICAgcmV0dXJuICJzYW1wbGVyQ3ViZSI7ICAgICAgIGJyZWFrOworICAgIGNh
c2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOiByZXR1cm4gInNhbXBsZXJFeHRlcm5hbE9FUyI7IGJy
ZWFrOworICAgIGNhc2UgRWJ0U2FtcGxlcjJEUmVjdDogICAgIHJldHVybiAic2FtcGxlcjJEUmVj
dCI7ICAgICBicmVhazsKKyAgICBjYXNlIEVidFN0cnVjdDogICAgICAgICAgICByZXR1cm4gInN0
cnVjdHVyZSI7ICAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAg
cmV0dXJuICJ1bmtub3duIHR5cGUiOworICAgIH0KK30KKworaW5saW5lIGJvb2wgSXNTYW1wbGVy
KFRCYXNpY1R5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gdHlwZSA+IEVidEd1YXJkU2FtcGxlckJl
Z2luICYmIHR5cGUgPCBFYnRHdWFyZFNhbXBsZXJFbmQ7Cit9CisKKy8vCisvLyBRdWFsaWZpZXJz
IGFuZCBidWlsdC1pbnMuICBUaGVzZSBhcmUgbWFpbmx5IHVzZWQgdG8gc2VlIHdoYXQgY2FuIGJl
IHJlYWQKKy8vIG9yIHdyaXR0ZW4sIGFuZCBieSB0aGUgbWFjaGluZSBkZXBlbmRlbnQgdHJhbnNs
YXRvciB0byBrbm93IHdoaWNoIHJlZ2lzdGVycworLy8gdG8gYWxsb2NhdGUgdmFyaWFibGVzIGlu
LiAgU2luY2UgYnVpbHQtaW5zIHRlbmQgdG8gZ28gdG8gZGlmZmVyZW50IHJlZ2lzdGVycworLy8g
dGhhbiB2YXJ5aW5nIG9yIHVuaWZvcm0sIGl0IG1ha2VzIHNlbnNlIHRoZXkgYXJlIHBlZXJzLCBu
b3Qgc3ViLWNsYXNzZXMuCisvLworZW51bSBUUXVhbGlmaWVyCit7CisgICAgRXZxVGVtcG9yYXJ5
LCAgICAgLy8gRm9yIHRlbXBvcmFyaWVzICh3aXRoaW4gYSBmdW5jdGlvbiksIHJlYWQvd3JpdGUK
KyAgICBFdnFHbG9iYWwsICAgICAgICAvLyBGb3IgZ2xvYmFscyByZWFkL3dyaXRlCisgICAgRXZx
SW50ZXJuYWwsICAgICAgLy8gRm9yIGludGVybmFsIHVzZSwgbm90IHZpc2libGUgdG8gdGhlIHVz
ZXIKKyAgICBFdnFDb25zdCwgICAgICAgICAvLyBVc2VyIGRlZmluZWQgY29uc3RhbnRzIGFuZCBu
b24tb3V0cHV0IHBhcmFtZXRlcnMgaW4gZnVuY3Rpb25zCisgICAgRXZxQXR0cmlidXRlLCAgICAg
Ly8gUmVhZG9ubHkKKyAgICBFdnFWYXJ5aW5nSW4sICAgICAvLyByZWFkb25seSwgZnJhZ21lbnQg
c2hhZGVycyBvbmx5CisgICAgRXZxVmFyeWluZ091dCwgICAgLy8gdmVydGV4IHNoYWRlcnMgb25s
eSAgcmVhZC93cml0ZQorICAgIEV2cUludmFyaWFudFZhcnlpbmdJbiwgICAgIC8vIHJlYWRvbmx5
LCBmcmFnbWVudCBzaGFkZXJzIG9ubHkKKyAgICBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCAgICAv
LyB2ZXJ0ZXggc2hhZGVycyBvbmx5ICByZWFkL3dyaXRlCisgICAgRXZxVW5pZm9ybSwgICAgICAg
Ly8gUmVhZG9ubHksIHZlcnRleCBhbmQgZnJhZ21lbnQKKworICAgIC8vIHBhcmFtZXRlcnMKKyAg
ICBFdnFJbiwKKyAgICBFdnFPdXQsCisgICAgRXZxSW5PdXQsCisgICAgRXZxQ29uc3RSZWFkT25s
eSwKKworICAgIC8vIGJ1aWx0LWlucyB3cml0dGVuIGJ5IHZlcnRleCBzaGFkZXIKKyAgICBFdnFQ
b3NpdGlvbiwKKyAgICBFdnFQb2ludFNpemUsCisKKyAgICAvLyBidWlsdC1pbnMgcmVhZCBieSBm
cmFnbWVudCBzaGFkZXIKKyAgICBFdnFGcmFnQ29vcmQsCisgICAgRXZxRnJvbnRGYWNpbmcsCisg
ICAgRXZxUG9pbnRDb29yZCwKKworICAgIC8vIGJ1aWx0LWlucyB3cml0dGVuIGJ5IGZyYWdtZW50
IHNoYWRlcgorICAgIEV2cUZyYWdDb2xvciwKKyAgICBFdnFGcmFnRGF0YSwKKyAgICBFdnFGcmFn
RGVwdGgsCisKKyAgICAvLyBlbmQgb2YgbGlzdAorICAgIEV2cUxhc3QKK307CisKKy8vCisvLyBU
aGlzIGlzIGp1c3QgZm9yIGRlYnVnIHByaW50IG91dCwgY2FycmllZCBhbG9uZyB3aXRoIHRoZSBk
ZWZpbml0aW9ucyBhYm92ZS4KKy8vCitpbmxpbmUgY29uc3QgY2hhciogZ2V0UXVhbGlmaWVyU3Ry
aW5nKFRRdWFsaWZpZXIgcSkKK3sKKyAgICBzd2l0Y2gocSkKKyAgICB7CisgICAgY2FzZSBFdnFU
ZW1wb3Jhcnk6ICAgICAgcmV0dXJuICJUZW1wb3JhcnkiOyAgICAgIGJyZWFrOworICAgIGNhc2Ug
RXZxR2xvYmFsOiAgICAgICAgIHJldHVybiAiR2xvYmFsIjsgICAgICAgICBicmVhazsKKyAgICBj
YXNlIEV2cUNvbnN0OiAgICAgICAgICByZXR1cm4gImNvbnN0IjsgICAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBFdnFDb25zdFJlYWRPbmx5OiAgcmV0dXJuICJjb25zdCI7ICAgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRXZxQXR0cmlidXRlOiAgICAgIHJldHVybiAiYXR0cmlidXRlIjsgICAgICBi
cmVhazsKKyAgICBjYXNlIEV2cVZhcnlpbmdJbjogICAgICByZXR1cm4gInZhcnlpbmciOyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBFdnFWYXJ5aW5nT3V0OiAgICAgcmV0dXJuICJ2YXJ5aW5nIjsg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWluZ0luOiByZXR1cm4gImlu
dmFyaWFudCB2YXJ5aW5nIjsJYnJlYWs7CisgICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0
OnJldHVybiAiaW52YXJpYW50IHZhcnlpbmciOwlicmVhazsKKyAgICBjYXNlIEV2cVVuaWZvcm06
ICAgICAgICByZXR1cm4gInVuaWZvcm0iOyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFJbjog
ICAgICAgICAgICAgcmV0dXJuICJpbiI7ICAgICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZx
T3V0OiAgICAgICAgICAgIHJldHVybiAib3V0IjsgICAgICAgICAgICBicmVhazsKKyAgICBjYXNl
IEV2cUluT3V0OiAgICAgICAgICByZXR1cm4gImlub3V0IjsgICAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBFdnFQb3NpdGlvbjogICAgICAgcmV0dXJuICJQb3NpdGlvbiI7ICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRXZxUG9pbnRTaXplOiAgICAgIHJldHVybiAiUG9pbnRTaXplIjsgICAgICBicmVh
azsKKyAgICBjYXNlIEV2cUZyYWdDb29yZDogICAgICByZXR1cm4gIkZyYWdDb29yZCI7ICAgICAg
YnJlYWs7CisgICAgY2FzZSBFdnFGcm9udEZhY2luZzogICAgcmV0dXJuICJGcm9udEZhY2luZyI7
ICAgIGJyZWFrOworICAgIGNhc2UgRXZxRnJhZ0NvbG9yOiAgICAgIHJldHVybiAiRnJhZ0NvbG9y
IjsgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUZyYWdEYXRhOiAgICAgICByZXR1cm4gIkZyYWdE
YXRhIjsgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUZyYWdEZXB0aDogICAgICByZXR1cm4gIkZy
YWdEZXB0aCI7ICAgICBicmVhazsKKyAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICByZXR1cm4g
InVua25vd24gcXVhbGlmaWVyIjsKKyAgICB9Cit9CisKKyNlbmRpZiAvLyBfQkFTSUNUWVBFU19J
TkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9y
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45MmI3MWM2YmRiMTczN2MwMTJiNjk2ZDVmZDkwZWYwMzcyNzVjY2Vk
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCkBAIC0wLDAgKzEsNDA2IEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9CdWls
dEluRnVuY3Rpb25FbXVsYXRvci5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9T
eW1ib2xUYWJsZS5oIgorCituYW1lc3BhY2UgeworCisvLyB3ZSB1c2UgbWFjcm9zIGhlcmUgaW5z
dGVhZCBvZiBmdW5jdGlvbiBkZWZpbml0aW9ucyB0byB3b3JrIGFyb3VuZCBtb3JlIEdMU0wKKy8v
IGNvbXBpbGVyIGJ1Z3MsIGluIHBhcnRpY3VsYXIgb24gTlZJRElBIGhhcmR3YXJlIG9uIE1hYyBP
U1guIE1hY3JvcyBhcmUKKy8vIHByb2JsZW1hdGljIGJlY2F1c2UgaWYgdGhlIGFyZ3VtZW50IGhh
cyBzaWRlLWVmZmVjdHMgdGhleSB3aWxsIGJlIHJlcGVhdGVkbHkKKy8vIGV2YWx1YXRlZC4gVGhp
cyBpcyB1bmxpa2VseSB0byBzaG93IHVwIGluIHJlYWwgc2hhZGVycywgYnV0IGlzIHNvbWV0aGlu
ZyB0bworLy8gY29uc2lkZXIuCitjb25zdCBjaGFyKiBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhT
b3VyY2VbXSA9IHsKKyAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgY29zKGZsb2F0KSIsCisg
ICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGNvcyh2ZWMyKSIsCisgICAgIiNlcnJvciBubyBl
bXVsYXRpb24gZm9yIGNvcyh2ZWMzKSIsCisgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGNv
cyh2ZWM0KSIsCisKKyAgICAiI2RlZmluZSB3ZWJnbF9kaXN0YW5jZV9lbXUoeCwgeSkgKCh4KSA+
PSAoeSkgPyAoeCkgLSAoeSkgOiAoeSkgLSAoeCkpIiwKKyAgICAiI2Vycm9yIG5vIGVtdWxhdGlv
biBmb3IgZGlzdGFuY2UodmVjMiwgdmVjMikiLAorICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZv
ciBkaXN0YW5jZSh2ZWMzLCB2ZWMzKSIsCisgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRp
c3RhbmNlKHZlYzQsIHZlYzQpIiwKKworICAgICIjZGVmaW5lIHdlYmdsX2RvdF9lbXUoeCwgeSkg
KCh4KSAqICh5KSkiLAorICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjMiwgdmVj
MikiLAorICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjMywgdmVjMykiLAorICAg
ICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjNCwgdmVjNCkiLAorCisgICAgIiNkZWZp
bmUgd2ViZ2xfbGVuZ3RoX2VtdSh4KSAoKHgpID49IDAuMCA/ICh4KSA6IC0oeCkpIiwKKyAgICAi
I2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3RoKHZlYzIpIiwKKyAgICAiI2Vycm9yIG5vIGVt
dWxhdGlvbiBmb3IgbGVuZ3RoKHZlYzMpIiwKKyAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Ig
bGVuZ3RoKHZlYzQpIiwKKworICAgICIjZGVmaW5lIHdlYmdsX25vcm1hbGl6ZV9lbXUoeCkgKCh4
KSA9PSAwLjAgPyAwLjAgOiAoKHgpID4gMC4wID8gMS4wIDogLTEuMCkpIiwKKyAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzIpIiwKKyAgICAiI2Vycm9yIG5vIGVtdWxh
dGlvbiBmb3Igbm9ybWFsaXplKHZlYzMpIiwKKyAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Ig
bm9ybWFsaXplKHZlYzQpIiwKKworICAgICIjZGVmaW5lIHdlYmdsX3JlZmxlY3RfZW11KEksIE4p
ICgoSSkgLSAyLjAgKiAoTikgKiAoSSkgKiAoTikpIiwKKyAgICAiI2Vycm9yIG5vIGVtdWxhdGlv
biBmb3IgcmVmbGVjdCh2ZWMyLCB2ZWMyKSIsCisgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9y
IHJlZmxlY3QodmVjMywgdmVjMykiLAorICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciByZWZs
ZWN0KHZlYzQsIHZlYzQpIgorfTsKKworY29uc3QgY2hhcioga0Z1bmN0aW9uRW11bGF0aW9uRnJh
Z21lbnRTb3VyY2VbXSA9IHsKKyAgICAid2ViZ2xfZW11X3ByZWNpc2lvbiBmbG9hdCB3ZWJnbF9j
b3NfZW11KHdlYmdsX2VtdV9wcmVjaXNpb24gZmxvYXQgYSkgeyByZXR1cm4gY29zKGEpOyB9IiwK
KyAgICAid2ViZ2xfZW11X3ByZWNpc2lvbiB2ZWMyIHdlYmdsX2Nvc19lbXUod2ViZ2xfZW11X3By
ZWNpc2lvbiB2ZWMyIGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCisgICAgIndlYmdsX2VtdV9wcmVj
aXNpb24gdmVjMyB3ZWJnbF9jb3NfZW11KHdlYmdsX2VtdV9wcmVjaXNpb24gdmVjMyBhKSB7IHJl
dHVybiBjb3MoYSk7IH0iLAorICAgICJ3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzQgd2ViZ2xfY29z
X2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzQgYSkgeyByZXR1cm4gY29zKGEpOyB9IiwKKwor
ICAgICIjZGVmaW5lIHdlYmdsX2Rpc3RhbmNlX2VtdSh4LCB5KSAoKHgpID49ICh5KSA/ICh4KSAt
ICh5KSA6ICh5KSAtICh4KSkiLAorICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkaXN0YW5j
ZSh2ZWMyLCB2ZWMyKSIsCisgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRpc3RhbmNlKHZl
YzMsIHZlYzMpIiwKKyAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UodmVjNCwg
dmVjNCkiLAorCisgICAgIiNkZWZpbmUgd2ViZ2xfZG90X2VtdSh4LCB5KSAoKHgpICogKHkpKSIs
CisgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRvdCh2ZWMyLCB2ZWMyKSIsCisgICAgIiNl
cnJvciBubyBlbXVsYXRpb24gZm9yIGRvdCh2ZWMzLCB2ZWMzKSIsCisgICAgIiNlcnJvciBubyBl
bXVsYXRpb24gZm9yIGRvdCh2ZWM0LCB2ZWM0KSIsCisKKyAgICAiI2RlZmluZSB3ZWJnbF9sZW5n
dGhfZW11KHgpICgoeCkgPj0gMC4wID8gKHgpIDogLSh4KSkiLAorICAgICIjZXJyb3Igbm8gZW11
bGF0aW9uIGZvciBsZW5ndGgodmVjMikiLAorICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBs
ZW5ndGgodmVjMykiLAorICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBsZW5ndGgodmVjNCki
LAorCisgICAgIiNkZWZpbmUgd2ViZ2xfbm9ybWFsaXplX2VtdSh4KSAoKHgpID09IDAuMCA/IDAu
MCA6ICgoeCkgPiAwLjAgPyAxLjAgOiAtMS4wKSkiLAorICAgICIjZXJyb3Igbm8gZW11bGF0aW9u
IGZvciBub3JtYWxpemUodmVjMikiLAorICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBub3Jt
YWxpemUodmVjMykiLAorICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBub3JtYWxpemUodmVj
NCkiLAorCisgICAgIiNkZWZpbmUgd2ViZ2xfcmVmbGVjdF9lbXUoSSwgTikgKChJKSAtIDIuMCAq
IChOKSAqIChJKSAqIChOKSkiLAorICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciByZWZsZWN0
KHZlYzIsIHZlYzIpIiwKKyAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgcmVmbGVjdCh2ZWMz
LCB2ZWMzKSIsCisgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIHJlZmxlY3QodmVjNCwgdmVj
NCkiCit9OworCitjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbXSA9IHsK
KyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyAgICAvLyBXb3JrIGFyb3VuZCBBVEkgZHJpdmVyIGJ1
Z3MgaW4gTWFjLgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MxCisgICAgZmFsc2UsIC8vIFRG
dW5jdGlvbkNvczIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMworICAgIGZhbHNlLCAvLyBU
RnVuY3Rpb25Db3M0CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRpc3RhbmNlMV8xCisgICAgZmFs
c2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlMl8yCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3Rh
bmNlM18zCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlNF80CisgICAgdHJ1ZSwgIC8v
IFRGdW5jdGlvbkRvdDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3QyXzIKKyAgICBmYWxz
ZSwgLy8gVEZ1bmN0aW9uRG90M18zCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDRfNAorICAg
IHRydWUsICAvLyBURnVuY3Rpb25MZW5ndGgxCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0
aDIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMworICAgIGZhbHNlLCAvLyBURnVuY3Rp
b25MZW5ndGg0CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTEKKyAgICBmYWxzZSwg
Ly8gVEZ1bmN0aW9uTm9ybWFsaXplMgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUz
CisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTQKKyAgICB0cnVlLCAgLy8gVEZ1bmN0
aW9uUmVmbGVjdDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0Ml8yCisgICAgZmFs
c2UsIC8vIFRGdW5jdGlvblJlZmxlY3QzXzMKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVj
dDRfNAorI2Vsc2UKKyAgICAvLyBXb3JrIGFyb3VuZCBEM0QgZHJpdmVyIGJ1ZyBpbiBXaW4uCisg
ICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMgor
ICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MzCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczQK
KyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2UxXzEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uRGlzdGFuY2UyXzIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2UzXzMKKyAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2U0XzQKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90
MV8xCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDJfMgorICAgIGZhbHNlLCAvLyBURnVuY3Rp
b25Eb3QzXzMKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90NF80CisgICAgZmFsc2UsIC8vIFRG
dW5jdGlvbkxlbmd0aDEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMgorICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25MZW5ndGgzCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDQKKyAg
ICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25O
b3JtYWxpemUyCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTMKKyAgICBmYWxzZSwg
Ly8gVEZ1bmN0aW9uTm9ybWFsaXplNAorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0MV8x
CisgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QyXzIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uUmVmbGVjdDNfMworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0NF80CisjZW5kaWYK
KyAgICBmYWxzZSAgLy8gVEZ1bmN0aW9uVW5rbm93bgorfTsKKworY29uc3QgYm9vbCBrRnVuY3Rp
b25FbXVsYXRpb25GcmFnbWVudE1hc2tbXSA9IHsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyAg
ICAvLyBXb3JrIGFyb3VuZCBBVEkgZHJpdmVyIGJ1Z3MgaW4gTWFjLgorICAgIHRydWUsICAvLyBU
RnVuY3Rpb25Db3MxCisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczIKKyAgICB0cnVlLCAgLy8g
VEZ1bmN0aW9uQ29zMworICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3M0CisgICAgdHJ1ZSwgIC8v
IFRGdW5jdGlvbkRpc3RhbmNlMV8xCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlMl8y
CisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlM18zCisgICAgZmFsc2UsIC8vIFRGdW5j
dGlvbkRpc3RhbmNlNF80CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRvdDFfMQorICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25Eb3QyXzIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90M18zCisgICAg
ZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDRfNAorICAgIHRydWUsICAvLyBURnVuY3Rpb25MZW5ndGgx
CisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
TGVuZ3RoMworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0CisgICAgdHJ1ZSwgIC8vIFRG
dW5jdGlvbk5vcm1hbGl6ZTEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMgorICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUzCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5v
cm1hbGl6ZTQKKyAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uUmVmbGVjdDFfMQorICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25SZWZsZWN0Ml8yCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QzXzMK
KyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDRfNAorI2Vsc2UKKyAgICAvLyBXb3JrIGFy
b3VuZCBEM0QgZHJpdmVyIGJ1ZyBpbiBXaW4uCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczEK
KyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3Mz
CisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczQKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlz
dGFuY2UxXzEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2UyXzIKKyAgICBmYWxzZSwg
Ly8gVEZ1bmN0aW9uRGlzdGFuY2UzXzMKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2U0
XzQKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90MV8xCisgICAgZmFsc2UsIC8vIFRGdW5jdGlv
bkRvdDJfMgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3QzXzMKKyAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uRG90NF80CisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDEKKyAgICBmYWxzZSwg
Ly8gVEZ1bmN0aW9uTGVuZ3RoMgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgzCisgICAg
ZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDQKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFs
aXplMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUyCisgICAgZmFsc2UsIC8vIFRG
dW5jdGlvbk5vcm1hbGl6ZTMKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplNAorICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0MV8xCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJl
ZmxlY3QyXzIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDNfMworICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25SZWZsZWN0NF80CisjZW5kaWYKKyAgICBmYWxzZSAgLy8gVEZ1bmN0aW9uVW5r
bm93bgorfTsKKworY2xhc3MgQnVpbHRJbkZ1bmN0aW9uRW11bGF0aW9uTWFya2VyIDogcHVibGlj
IFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgorICAgIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdGlv
bk1hcmtlcihCdWlsdEluRnVuY3Rpb25FbXVsYXRvciYgZW11bGF0b3IpCisgICAgICAgIDogbUVt
dWxhdG9yKGVtdWxhdG9yKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRV
bmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQorICAgIHsKKyAgICAgICAgaWYg
KHZpc2l0ID09IFByZVZpc2l0KSB7CisgICAgICAgICAgICBib29sIG5lZWRUb0VtdWxhdGUgPSBt
RW11bGF0b3IuU2V0RnVuY3Rpb25DYWxsZWQoCisgICAgICAgICAgICAgICAgbm9kZS0+Z2V0T3Ao
KSwgbm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCkpOworICAgICAgICAgICAgaWYgKG5lZWRU
b0VtdWxhdGUpCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0VXNlRW11bGF0ZWRGdW5jdGlvbigp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZpcnR1YWwg
Ym9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkK
KyAgICB7CisgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkgeworICAgICAgICAgICAgLy8g
SGVyZSB3ZSBoYW5kbGUgYWxsIHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgaW5zdGVhZCBvZiB0aGUg
b25lcyB3ZQorICAgICAgICAgICAgLy8gY3VycmVudGx5IGlkZW50aWZpZWQgYXMgcHJvYmxlbWF0
aWMuCisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIEVPcExlc3NUaGFuOgorICAgICAgICAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46
CisgICAgICAgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgorICAgICAgICAgICAgICAg
IGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKKyAgICAgICAgICAgICAgICBjYXNlIEVPcFZlY3Rv
ckVxdWFsOgorICAgICAgICAgICAgICAgIGNhc2UgRU9wVmVjdG9yTm90RXF1YWw6CisgICAgICAg
ICAgICAgICAgY2FzZSBFT3BNb2Q6CisgICAgICAgICAgICAgICAgY2FzZSBFT3BQb3c6CisgICAg
ICAgICAgICAgICAgY2FzZSBFT3BBdGFuOgorICAgICAgICAgICAgICAgIGNhc2UgRU9wTWluOgor
ICAgICAgICAgICAgICAgIGNhc2UgRU9wTWF4OgorICAgICAgICAgICAgICAgIGNhc2UgRU9wQ2xh
bXA6CisgICAgICAgICAgICAgICAgY2FzZSBFT3BNaXg6CisgICAgICAgICAgICAgICAgY2FzZSBF
T3BTdGVwOgorICAgICAgICAgICAgICAgIGNhc2UgRU9wU21vb3RoU3RlcDoKKyAgICAgICAgICAg
ICAgICBjYXNlIEVPcERpc3RhbmNlOgorICAgICAgICAgICAgICAgIGNhc2UgRU9wRG90OgorICAg
ICAgICAgICAgICAgIGNhc2UgRU9wQ3Jvc3M6CisgICAgICAgICAgICAgICAgY2FzZSBFT3BGYWNl
Rm9yd2FyZDoKKyAgICAgICAgICAgICAgICBjYXNlIEVPcFJlZmxlY3Q6CisgICAgICAgICAgICAg
ICAgY2FzZSBFT3BSZWZyYWN0OgorICAgICAgICAgICAgICAgIGNhc2UgRU9wTXVsOgorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBjb25z
dCBUSW50ZXJtU2VxdWVuY2UmIHNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAg
ICAgICAgIC8vIFJpZ2h0IG5vdyB3ZSBvbmx5IGhhbmRsZSBidWlsdC1pbiBmdW5jdGlvbnMgd2l0
aCB0d28gcGFyYW1ldGVycy4KKyAgICAgICAgICAgIGlmIChzZXF1ZW5jZS5zaXplKCkgIT0gMikK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIFRJbnRlcm1UeXBlZCog
cGFyYW0xID0gc2VxdWVuY2VbMF0tPmdldEFzVHlwZWQoKTsKKyAgICAgICAgICAgIFRJbnRlcm1U
eXBlZCogcGFyYW0yID0gc2VxdWVuY2VbMV0tPmdldEFzVHlwZWQoKTsKKyAgICAgICAgICAgIGlm
ICghcGFyYW0xIHx8ICFwYXJhbTIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICBib29sIG5lZWRUb0VtdWxhdGUgPSBtRW11bGF0b3IuU2V0RnVuY3Rpb25DYWxsZWQo
CisgICAgICAgICAgICAgICAgbm9kZS0+Z2V0T3AoKSwgcGFyYW0xLT5nZXRUeXBlKCksIHBhcmFt
Mi0+Z2V0VHlwZSgpKTsKKyAgICAgICAgICAgIGlmIChuZWVkVG9FbXVsYXRlKQorICAgICAgICAg
ICAgICAgIG5vZGUtPnNldFVzZUVtdWxhdGVkRnVuY3Rpb24oKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3ImIG1FbXVsYXRvcjsKK307CisKK30gIC8vIGFub255bW91cyBuYW1lcHNhY2UKKworQnVp
bHRJbkZ1bmN0aW9uRW11bGF0b3I6OkJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yKFNoU2hhZGVyVHlw
ZSBzaGFkZXJUeXBlKQoreworICAgIGlmIChzaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURF
UikgeworICAgICAgICBtRnVuY3Rpb25NYXNrID0ga0Z1bmN0aW9uRW11bGF0aW9uRnJhZ21lbnRN
YXNrOworICAgICAgICBtRnVuY3Rpb25Tb3VyY2UgPSBrRnVuY3Rpb25FbXVsYXRpb25GcmFnbWVu
dFNvdXJjZTsKKyAgICB9IGVsc2UgeworICAgICAgICBtRnVuY3Rpb25NYXNrID0ga0Z1bmN0aW9u
RW11bGF0aW9uVmVydGV4TWFzazsKKyAgICAgICAgbUZ1bmN0aW9uU291cmNlID0ga0Z1bmN0aW9u
RW11bGF0aW9uVmVydGV4U291cmNlOworICAgIH0KK30KKworYm9vbCBCdWlsdEluRnVuY3Rpb25F
bXVsYXRvcjo6U2V0RnVuY3Rpb25DYWxsZWQoCisgICAgVE9wZXJhdG9yIG9wLCBjb25zdCBUVHlw
ZSYgcGFyYW0pCit7CisgICAgVEJ1aWx0SW5GdW5jdGlvbiBmdW5jdGlvbiA9IElkZW50aWZ5RnVu
Y3Rpb24ob3AsIHBhcmFtKTsKKyAgICByZXR1cm4gU2V0RnVuY3Rpb25DYWxsZWQoZnVuY3Rpb24p
OworfQorCitib29sIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpTZXRGdW5jdGlvbkNhbGxlZCgK
KyAgICBUT3BlcmF0b3Igb3AsIGNvbnN0IFRUeXBlJiBwYXJhbTEsIGNvbnN0IFRUeXBlJiBwYXJh
bTIpCit7CisgICAgVEJ1aWx0SW5GdW5jdGlvbiBmdW5jdGlvbiA9IElkZW50aWZ5RnVuY3Rpb24o
b3AsIHBhcmFtMSwgcGFyYW0yKTsKKyAgICByZXR1cm4gU2V0RnVuY3Rpb25DYWxsZWQoZnVuY3Rp
b24pOworfQorCitib29sIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpTZXRGdW5jdGlvbkNhbGxl
ZCgKKyAgICBCdWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6VEJ1aWx0SW5GdW5jdGlvbiBmdW5jdGlv
bikgeworICAgIGlmIChmdW5jdGlvbiA9PSBURnVuY3Rpb25Vbmtub3duIHx8IG1GdW5jdGlvbk1h
c2tbZnVuY3Rpb25dID09IGZhbHNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtRnVuY3Rpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICht
RnVuY3Rpb25zW2ldID09IGZ1bmN0aW9uKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIG1GdW5jdGlvbnMucHVzaF9iYWNrKGZ1bmN0aW9uKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBCdWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6T3V0cHV0RW11bGF0ZWRGdW5jdGlv
bkRlZmluaXRpb24oCisgICAgVEluZm9TaW5rQmFzZSYgb3V0LCBib29sIHdpdGhQcmVjaXNpb24p
IGNvbnN0Cit7CisgICAgaWYgKG1GdW5jdGlvbnMuc2l6ZSgpID09IDApCisgICAgICAgIHJldHVy
bjsKKyAgICBvdXQgPDwgIi8vIEJFR0lOOiBHZW5lcmF0ZWQgY29kZSBmb3IgYnVpbHQtaW4gZnVu
Y3Rpb24gZW11bGF0aW9uXG5cbiI7CisgICAgaWYgKHdpdGhQcmVjaXNpb24pIHsKKyAgICAgICAg
b3V0IDw8ICIjaWYgZGVmaW5lZChHTF9GUkFHTUVOVF9QUkVDSVNJT05fSElHSClcbiIKKyAgICAg
ICAgICAgIDw8ICIjZGVmaW5lIHdlYmdsX2VtdV9wcmVjaXNpb24gaGlnaHBcbiIKKyAgICAgICAg
ICAgIDw8ICIjZWxzZVxuIgorICAgICAgICAgICAgPDwgIiNkZWZpbmUgd2ViZ2xfZW11X3ByZWNp
c2lvbiBtZWRpdW1wXG4iCisgICAgICAgICAgICA8PCAiI2VuZGlmXG5cbiI7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgb3V0IDw8ICIjZGVmaW5lIHdlYmdsX2VtdV9wcmVjaXNpb25cblxuIjsKKyAg
ICB9CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtRnVuY3Rpb25zLnNpemUoKTsgKytpKSB7
CisgICAgICAgIG91dCA8PCBtRnVuY3Rpb25Tb3VyY2VbbUZ1bmN0aW9uc1tpXV0gPDwgIlxuXG4i
OworICAgIH0KKyAgICBvdXQgPDwgIi8vIEVORDogR2VuZXJhdGVkIGNvZGUgZm9yIGJ1aWx0LWlu
IGZ1bmN0aW9uIGVtdWxhdGlvblxuXG4iOworfQorCitCdWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6
VEJ1aWx0SW5GdW5jdGlvbgorQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OklkZW50aWZ5RnVuY3Rp
b24oCisgICAgVE9wZXJhdG9yIG9wLCBjb25zdCBUVHlwZSYgcGFyYW0pCit7CisgICAgaWYgKHBh
cmFtLmdldE5vbWluYWxTaXplKCkgPiA0KQorICAgICAgICByZXR1cm4gVEZ1bmN0aW9uVW5rbm93
bjsKKyAgICB1bnNpZ25lZCBpbnQgZnVuY3Rpb24gPSBURnVuY3Rpb25Vbmtub3duOworICAgIHN3
aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBFT3BDb3M6CisgICAgICAgICAgICBmdW5jdGlvbiA9
IFRGdW5jdGlvbkNvczE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMZW5n
dGg6CisgICAgICAgICAgICBmdW5jdGlvbiA9IFRGdW5jdGlvbkxlbmd0aDE7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BOb3JtYWxpemU6CisgICAgICAgICAgICBmdW5jdGlv
biA9IFRGdW5jdGlvbk5vcm1hbGl6ZTE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoZnVuY3Rpb24gPT0gVEZ1
bmN0aW9uVW5rbm93bikKKyAgICAgICAgcmV0dXJuIFRGdW5jdGlvblVua25vd247CisgICAgaWYg
KHBhcmFtLmlzVmVjdG9yKCkpCisgICAgICAgIGZ1bmN0aW9uICs9IHBhcmFtLmdldE5vbWluYWxT
aXplKCkgLSAxOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUQnVpbHRJbkZ1bmN0aW9uPihmdW5j
dGlvbik7Cit9CisKK0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpUQnVpbHRJbkZ1bmN0aW9uCitC
dWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6SWRlbnRpZnlGdW5jdGlvbigKKyAgICBUT3BlcmF0b3Ig
b3AsIGNvbnN0IFRUeXBlJiBwYXJhbTEsIGNvbnN0IFRUeXBlJiBwYXJhbTIpCit7CisgICAgLy8g
UmlnaHQgbm93IGZvciBhbGwgdGhlIGVtdWxhdGVkIGZ1bmN0aW9ucyB3aXRoIHR3byBwYXJhbWV0
ZXJzLCB0aGUgdHdvCisgICAgLy8gcGFyYW1ldGVycyBoYXZlIHRoZSBzYW1lIHR5cGUuCisgICAg
aWYgKHBhcmFtMS5pc1ZlY3RvcigpICE9IHBhcmFtMi5pc1ZlY3RvcigpIHx8CisgICAgICAgIHBh
cmFtMS5nZXROb21pbmFsU2l6ZSgpICE9IHBhcmFtMi5nZXROb21pbmFsU2l6ZSgpIHx8CisgICAg
ICAgIHBhcmFtMS5nZXROb21pbmFsU2l6ZSgpID4gNCkKKyAgICAgICAgcmV0dXJuIFRGdW5jdGlv
blVua25vd247CisKKyAgICB1bnNpZ25lZCBpbnQgZnVuY3Rpb24gPSBURnVuY3Rpb25Vbmtub3du
OworICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBFT3BEaXN0YW5jZToKKyAgICAgICAg
ICAgIGZ1bmN0aW9uID0gVEZ1bmN0aW9uRGlzdGFuY2UxXzE7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BEb3Q6CisgICAgICAgICAgICBmdW5jdGlvbiA9IFRGdW5jdGlvbkRv
dDFfMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFJlZmxlY3Q6CisgICAg
ICAgICAgICBmdW5jdGlvbiA9IFRGdW5jdGlvblJlZmxlY3QxXzE7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAo
ZnVuY3Rpb24gPT0gVEZ1bmN0aW9uVW5rbm93bikKKyAgICAgICAgcmV0dXJuIFRGdW5jdGlvblVu
a25vd247CisgICAgaWYgKHBhcmFtMS5pc1ZlY3RvcigpKQorICAgICAgICBmdW5jdGlvbiArPSBw
YXJhbTEuZ2V0Tm9taW5hbFNpemUoKSAtIDE7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRCdWls
dEluRnVuY3Rpb24+KGZ1bmN0aW9uKTsKK30KKwordm9pZCBCdWlsdEluRnVuY3Rpb25FbXVsYXRv
cjo6TWFya0J1aWx0SW5GdW5jdGlvbnNGb3JFbXVsYXRpb24oCisgICAgVEludGVybU5vZGUqIHJv
b3QpCit7CisgICAgQVNTRVJUKHJvb3QpOworCisgICAgQnVpbHRJbkZ1bmN0aW9uRW11bGF0aW9u
TWFya2VyIG1hcmtlcigqdGhpcyk7CisgICAgcm9vdC0+dHJhdmVyc2UoJm1hcmtlcik7Cit9CisK
K3ZvaWQgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OkNsZWFudXAoKQoreworICAgIG1GdW5jdGlv
bnMuY2xlYXIoKTsKK30KKworLy9zdGF0aWMKK1RTdHJpbmcgQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3I6OkdldEVtdWxhdGVkRnVuY3Rpb25OYW1lKAorICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUpCit7
CisgICAgQVNTRVJUKG5hbWVbbmFtZS5sZW5ndGgoKSAtIDFdID09ICcoJyk7CisgICAgcmV0dXJu
ICJ3ZWJnbF8iICsgbmFtZS5zdWJzdHIoMCwgbmFtZS5sZW5ndGgoKSAtIDEpICsgIl9lbXUoIjsK
K30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uY2ZiNzFhODAzYWNjN2QyODM0YmY0MGY0OWZkOWY4YWJiMjQ2OWQzOAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmgKQEAgLTAsMCArMSw5MyBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNpZm5kZWYgQ09NUElMSUVSX0JVSUxUX0lOX0ZVTkNUSU9OX0VNVUxBVE9SX0hfCisj
ZGVmaW5lIENPTVBJTElFUl9CVUlMVF9JTl9GVU5DVElPTl9FTVVMQVRPUl9IXworCisjaW5jbHVk
ZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L0luZm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUu
aCIKKworLy8KKy8vIFRoaXMgY2xhc3MgZGVjaWRlcyB3aGljaCBidWlsdC1pbiBmdW5jdGlvbnMg
bmVlZCB0byBiZSByZXBsYWNlZCB3aXRoIHRoZQorLy8gZW11bGF0ZWQgb25lcy4KKy8vIEl0J3Mg
b25seSBhIHdvcmthcm91bmQgZm9yIE9wZW5HTCBkcml2ZXIgYnVncywgYW5kIGlzbid0IG5lZWRl
ZCBpbiBnZW5lcmFsLgorLy8KK2NsYXNzIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yIHsKK3B1Ymxp
YzoKKyAgICBCdWlsdEluRnVuY3Rpb25FbXVsYXRvcihTaFNoYWRlclR5cGUgc2hhZGVyVHlwZSk7
CisgICAgLy8gUmVjb3JkcyB0aGF0IGEgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBzaGFkZXIg
YW5kIG1pZ2h0IG5lZWRzIHRvIGJlCisgICAgLy8gZW11bGF0ZWQuICBJZiB0aGUgZnVuY3Rpb24n
cyBncm91cCBpcyBub3QgaW4gbUZ1bmN0aW9uR3JvdXBGaWx0ZXIsIHRoaXMKKyAgICAvLyBiZWNv
bWVzIGFuIG5vLW9wLgorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZnVuY3Rpb24gY2FsbCBu
ZWVkcyB0byBiZSByZXBsYWNlZCB3aXRoIGFuIGVtdWxhdGVkCisgICAgLy8gb25lLgorICAgIGJv
b2wgU2V0RnVuY3Rpb25DYWxsZWQoVE9wZXJhdG9yIG9wLCBjb25zdCBUVHlwZSYgcGFyYW0pOwor
ICAgIGJvb2wgU2V0RnVuY3Rpb25DYWxsZWQoCisgICAgICAgIFRPcGVyYXRvciBvcCwgY29uc3Qg
VFR5cGUmIHBhcmFtMSwgY29uc3QgVFR5cGUmIHBhcmFtMik7CisKKyAgICAvLyBPdXRwdXQgZnVu
Y3Rpb24gZW11bGF0aW9uIGRlZmluaXRpb24uICBUaGlzIHNob3VsZCBiZSBiZWZvcmUgYW55IG90
aGVyCisgICAgLy8gc2hhZGVyIHNvdXJjZS4KKyAgICB2b2lkIE91dHB1dEVtdWxhdGVkRnVuY3Rp
b25EZWZpbml0aW9uKFRJbmZvU2lua0Jhc2UmIG91dCwgYm9vbCB3aXRoUHJlY2lzaW9uKSBjb25z
dDsKKworICAgIHZvaWQgTWFya0J1aWx0SW5GdW5jdGlvbnNGb3JFbXVsYXRpb24oVEludGVybU5v
ZGUqIHJvb3QpOworCisgICAgdm9pZCBDbGVhbnVwKCk7CisKKyAgICAvLyAibmFtZSgiIGJlY29t
ZXMgIndlYmdsX25hbWVfZW11KCIuCisgICAgc3RhdGljIFRTdHJpbmcgR2V0RW11bGF0ZWRGdW5j
dGlvbk5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSk7CisKK3ByaXZhdGU6CisgICAgLy8KKyAgICAv
LyBCdWlsdC1pbiBmdW5jdGlvbnMuCisgICAgLy8KKyAgICBlbnVtIFRCdWlsdEluRnVuY3Rpb24g
eworICAgICAgICBURnVuY3Rpb25Db3MxID0gMCwgIC8vIGZsb2F0IGNvcyhmbG9hdCk7CisgICAg
ICAgIFRGdW5jdGlvbkNvczIsICAvLyB2ZWMyIGNvcyh2ZWMyKTsKKyAgICAgICAgVEZ1bmN0aW9u
Q29zMywgIC8vIHZlYzMgY29zKHZlYzMpOworICAgICAgICBURnVuY3Rpb25Db3M0LCAgLy8gdmVj
NCBjb3ModmVjNCk7CisKKyAgICAgICAgVEZ1bmN0aW9uRGlzdGFuY2UxXzEsICAvLyBmbG9hdCBk
aXN0YW5jZShmbG9hdCwgZmxvYXQpOworICAgICAgICBURnVuY3Rpb25EaXN0YW5jZTJfMiwgIC8v
IHZlYzIgZGlzdGFuY2UodmVjMiwgdmVjMik7CisgICAgICAgIFRGdW5jdGlvbkRpc3RhbmNlM18z
LCAgLy8gdmVjMyBkaXN0YW5jZSh2ZWMzLCB2ZWMzKTsKKyAgICAgICAgVEZ1bmN0aW9uRGlzdGFu
Y2U0XzQsICAvLyB2ZWM0IGRpc3RhbmNlKHZlYzQsIHZlYzQpOworCisgICAgICAgIFRGdW5jdGlv
bkRvdDFfMSwgIC8vIGZsb2F0IGRvdChmbG9hdCwgZmxvYXQpOworICAgICAgICBURnVuY3Rpb25E
b3QyXzIsICAvLyB2ZWMyIGRvdCh2ZWMyLCB2ZWMyKTsKKyAgICAgICAgVEZ1bmN0aW9uRG90M18z
LCAgLy8gdmVjMyBkb3QodmVjMywgdmVjMyk7CisgICAgICAgIFRGdW5jdGlvbkRvdDRfNCwgIC8v
IHZlYzQgZG90KHZlYzQsIHZlYzQpOworCisgICAgICAgIFRGdW5jdGlvbkxlbmd0aDEsICAvLyBm
bG9hdCBsZW5ndGgoZmxvYXQpOworICAgICAgICBURnVuY3Rpb25MZW5ndGgyLCAgLy8gZmxvYXQg
bGVuZ3RoKHZlYzIpOworICAgICAgICBURnVuY3Rpb25MZW5ndGgzLCAgLy8gZmxvYXQgbGVuZ3Ro
KHZlYzMpOworICAgICAgICBURnVuY3Rpb25MZW5ndGg0LCAgLy8gZmxvYXQgbGVuZ3RoKHZlYzQp
OworCisgICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTEsICAvLyBmbG9hdCBub3JtYWxpemUoZmxv
YXQpOworICAgICAgICBURnVuY3Rpb25Ob3JtYWxpemUyLCAgLy8gdmVjMiBub3JtYWxpemUodmVj
Mik7CisgICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTMsICAvLyB2ZWMzIG5vcm1hbGl6ZSh2ZWMz
KTsKKyAgICAgICAgVEZ1bmN0aW9uTm9ybWFsaXplNCwgIC8vIHZlYzQgbm9ybWFsaXplKHZlYzQp
OworCisgICAgICAgIFRGdW5jdGlvblJlZmxlY3QxXzEsICAvLyBmbG9hdCByZWZsZWN0KGZsb2F0
LCBmbG9hdCk7CisgICAgICAgIFRGdW5jdGlvblJlZmxlY3QyXzIsICAvLyB2ZWMyIHJlZmxlY3Qo
dmVjMiwgdmVjMik7CisgICAgICAgIFRGdW5jdGlvblJlZmxlY3QzXzMsICAvLyB2ZWMzIHJlZmxl
Y3QodmVjMywgdmVjMyk7CisgICAgICAgIFRGdW5jdGlvblJlZmxlY3Q0XzQsICAvLyB2ZWM0IHJl
ZmxlY3QodmVjNCwgdmVjNCk7CisKKyAgICAgICAgVEZ1bmN0aW9uVW5rbm93bgorICAgIH07CisK
KyAgICBUQnVpbHRJbkZ1bmN0aW9uIElkZW50aWZ5RnVuY3Rpb24oVE9wZXJhdG9yIG9wLCBjb25z
dCBUVHlwZSYgcGFyYW0pOworICAgIFRCdWlsdEluRnVuY3Rpb24gSWRlbnRpZnlGdW5jdGlvbigK
KyAgICAgICAgVE9wZXJhdG9yIG9wLCBjb25zdCBUVHlwZSYgcGFyYW0xLCBjb25zdCBUVHlwZSYg
cGFyYW0yKTsKKworICAgIGJvb2wgU2V0RnVuY3Rpb25DYWxsZWQoVEJ1aWx0SW5GdW5jdGlvbiBm
dW5jdGlvbik7CisKKyAgICBzdGQ6OnZlY3RvcjxUQnVpbHRJbkZ1bmN0aW9uPiBtRnVuY3Rpb25z
OworCisgICAgY29uc3QgYm9vbCogbUZ1bmN0aW9uTWFzazsgIC8vIGEgYm9vbGVhbiBmbGFnIGZv
ciBlYWNoIGZ1bmN0aW9uLgorICAgIGNvbnN0IGNoYXIqKiBtRnVuY3Rpb25Tb3VyY2U7Cit9Owor
CisjZW5kaWYgIC8vIENPTVBJTElFUl9CVUlMVF9JTl9GVU5DVElPTl9FTVVMQVRPUl9IXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Q29kZUdlbi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9Db2RlR2VuLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZjVkMTI5MTA0MGQwMTMyMzFjNTViYjI0YTU2
MjE5OTQwODNkOWY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29kZUdlbi5jcHAKQEAgLTAsMCArMSwzOCBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ckVTU0wuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JHTFNMLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9ySExTTC5oIgorCisvLwor
Ly8gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIHByb3ZpZGVkIHRvIGNyZWF0ZSB0aGUgYWN0dWFsCisv
LyBjb21waWxlIG9iamVjdCB1c2VkIGJ5IGhpZ2hlciBsZXZlbCBjb2RlLiAgSXQgcmV0dXJucwor
Ly8gYSBzdWJjbGFzcyBvZiBUQ29tcGlsZXIuCisvLworVENvbXBpbGVyKiBDb25zdHJ1Y3RDb21w
aWxlcigKKyAgICBTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsIFNoU2hhZGVy
T3V0cHV0IG91dHB1dCkKK3sKKyAgICBzd2l0Y2ggKG91dHB1dCkgeworICAgICAgY2FzZSBTSF9F
U1NMX09VVFBVVDoKKyAgICAgICAgcmV0dXJuIG5ldyBUcmFuc2xhdG9yRVNTTCh0eXBlLCBzcGVj
KTsKKyAgICAgIGNhc2UgU0hfR0xTTF9PVVRQVVQ6CisgICAgICAgIHJldHVybiBuZXcgVHJhbnNs
YXRvckdMU0wodHlwZSwgc3BlYyk7CisgICAgICBjYXNlIFNIX0hMU0w5X09VVFBVVDoKKyAgICAg
IGNhc2UgU0hfSExTTDExX09VVFBVVDoKKyAgICAgICAgcmV0dXJuIG5ldyBUcmFuc2xhdG9ySExT
TCh0eXBlLCBzcGVjLCBvdXRwdXQpOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIE5V
TEw7CisgICAgfQorfQorCisvLworLy8gRGVsZXRlIHRoZSBjb21waWxlciBtYWRlIGJ5IENvbnN0
cnVjdENvbXBpbGVyCisvLwordm9pZCBEZWxldGVDb21waWxlcihUQ29tcGlsZXIqIGNvbXBpbGVy
KQoreworICAgIGRlbGV0ZSBjb21waWxlcjsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbW1vbi5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tbW9uLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MWU0NTAzZTM0MGNmNzRiMjA5YTgyZGNjNTdkYzA0M2MyN2RlOTQzZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbW1v
bi5oCkBAIC0wLDAgKzEsOTIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX0NPTU1P
Tl9JTkNMVURFRF8KKyNkZWZpbmUgX0NPTU1PTl9JTkNMVURFRF8KKworI2luY2x1ZGUgPG1hcD4K
KyNpbmNsdWRlIDxzc3RyZWFtPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+
CisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1Bvb2xBbGxvYy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvY29tcGlsZXJkZWJ1Zy5oIgorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisKK3N0
cnVjdCBUU291cmNlTG9jIHsKKyAgICBpbnQgZmlyc3RfZmlsZTsKKyAgICBpbnQgZmlyc3RfbGlu
ZTsKKyAgICBpbnQgbGFzdF9maWxlOworICAgIGludCBsYXN0X2xpbmU7Cit9OworCisvLworLy8g
UHV0IFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUgaW4gYmFzZSBjbGFzc2VzIHRvIG1ha2UgdGhl
bSB1c2UgdGhpcyBzY2hlbWUuCisvLworI2RlZmluZSBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRF
KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHMpIHsgcmV0dXJuIEdldEdsb2JhbFBvb2xBbGxv
Y2F0b3IoKS0+YWxsb2NhdGUocyk7IH0gICBcCisgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVf
dCwgdm9pZCAqX1doZXJlKSB7IHJldHVybiAoX1doZXJlKTsgfSAgICAgICAgICAgICAgICAgICAg
XAorICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqKSB7IH0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB2b2lkIG9wZXJhdG9yIGRlbGV0
ZSh2b2lkICosIHZvaWQgKikgeyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgdm9pZCogb3BlcmF0b3IgbmV3W10oc2l6ZV90IHMpIHsgcmV0dXJuIEdldEds
b2JhbFBvb2xBbGxvY2F0b3IoKS0+YWxsb2NhdGUocyk7IH0gXAorICAgIHZvaWQqIG9wZXJhdG9y
IG5ld1tdKHNpemVfdCwgdm9pZCAqX1doZXJlKSB7IHJldHVybiAoX1doZXJlKTsgfSAgICAgICAg
ICAgICAgICAgIFwKKyAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqKSB7IH0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdm9pZCBvcGVy
YXRvciBkZWxldGVbXSh2b2lkICosIHZvaWQgKikgeyB9CisKKy8vCisvLyBQb29sIHZlcnNpb24g
b2Ygc3RyaW5nLgorLy8KK3R5cGVkZWYgcG9vbF9hbGxvY2F0b3I8Y2hhcj4gVFN0cmluZ0FsbG9j
YXRvcjsKK3R5cGVkZWYgc3RkOjpiYXNpY19zdHJpbmcgPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8
Y2hhcj4sIFRTdHJpbmdBbGxvY2F0b3I+IFRTdHJpbmc7Cit0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0
cmluZ3N0cmVhbTxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBUU3RyaW5nQWxsb2NhdG9y
PiBUU3RyaW5nU3RyZWFtOworaW5saW5lIFRTdHJpbmcqIE5ld1Bvb2xUU3RyaW5nKGNvbnN0IGNo
YXIqIHMpCit7CisJdm9pZCogbWVtb3J5ID0gR2V0R2xvYmFsUG9vbEFsbG9jYXRvcigpLT5hbGxv
Y2F0ZShzaXplb2YoVFN0cmluZykpOworCXJldHVybiBuZXcobWVtb3J5KSBUU3RyaW5nKHMpOwor
fQorCisvLworLy8gUGVyc2lzdGVudCBzdHJpbmcgbWVtb3J5LiAgU2hvdWxkIG9ubHkgYmUgdXNl
ZCBmb3Igc3RyaW5ncyB0aGF0IHN1cnZpdmUKKy8vIGFjcm9zcyBjb21waWxlcy4KKy8vCisjZGVm
aW5lIFRQZXJzaXN0U3RyaW5nIHN0ZDo6c3RyaW5nCisjZGVmaW5lIFRQZXJzaXN0U3RyaW5nU3Ry
ZWFtIHN0ZDo6b3N0cmluZ3N0cmVhbQorCisvLworLy8gUG9vbCBhbGxvY2F0b3IgdmVyc2lvbnMg
b2YgdmVjdG9ycywgbGlzdHMsIGFuZCBtYXBzCisvLwordGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNz
IFRWZWN0b3IgOiBwdWJsaWMgc3RkOjp2ZWN0b3I8VCwgcG9vbF9hbGxvY2F0b3I8VD4gPiB7Citw
dWJsaWM6CisgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OnZlY3RvcjxULCBwb29sX2FsbG9jYXRv
cjxUPiA+OjpzaXplX3R5cGUgc2l6ZV90eXBlOworICAgIFRWZWN0b3IoKSA6IHN0ZDo6dmVjdG9y
PFQsIHBvb2xfYWxsb2NhdG9yPFQ+ID4oKSB7fQorICAgIFRWZWN0b3IoY29uc3QgcG9vbF9hbGxv
Y2F0b3I8VD4mIGEpIDogc3RkOjp2ZWN0b3I8VCwgcG9vbF9hbGxvY2F0b3I8VD4gPihhKSB7fQor
ICAgIFRWZWN0b3Ioc2l6ZV90eXBlIGkpOiBzdGQ6OnZlY3RvcjxULCBwb29sX2FsbG9jYXRvcjxU
PiA+KGkpIHt9Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgSywgY2xhc3MgRCwgY2xhc3MgQ01QID0g
c3RkOjpsZXNzPEs+ID4gCitjbGFzcyBUTWFwIDogcHVibGljIHN0ZDo6bWFwPEssIEQsIENNUCwg
cG9vbF9hbGxvY2F0b3I8c3RkOjpwYWlyPGNvbnN0IEssIEQ+ID4gPiB7CitwdWJsaWM6CisgICAg
dHlwZWRlZiBwb29sX2FsbG9jYXRvcjxzdGQ6OnBhaXI8Y29uc3QgSywgRD4gPiB0QWxsb2NhdG9y
OworCisgICAgVE1hcCgpIDogc3RkOjptYXA8SywgRCwgQ01QLCB0QWxsb2NhdG9yPigpIHt9Cisg
ICAgLy8gdXNlIGNvcnJlY3QgdHdvLXN0YWdlIG5hbWUgbG9va3VwIHN1cHBvcnRlZCBpbiBnY2Mg
My40IGFuZCBhYm92ZQorICAgIFRNYXAoY29uc3QgdEFsbG9jYXRvciYgYSkgOiBzdGQ6Om1hcDxL
LCBELCBDTVAsIHRBbGxvY2F0b3I+KHN0ZDo6bWFwPEssIEQsIENNUCwgdEFsbG9jYXRvcj46Omtl
eV9jb21wYXJlKCksIGEpIHt9Cit9OworCisvLyBJbnRlZ2VyIHRvIFRTdHJpbmcgY29udmVyc2lv
bgordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitpbmxpbmUgVFN0cmluZyBzdHIoVCBpKQoreworICAg
IEFTU0VSVChzdGQ6Om51bWVyaWNfbGltaXRzPFQ+Ojppc19pbnRlZ2VyKTsKKyAgICBjaGFyIGJ1
ZmZlclsoKDggKiBzaXplb2YoVCkpIC8gMykgKyAzXTsKKyAgICBjb25zdCBjaGFyICpmb3JtYXRT
dHIgPSBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+Ojppc19zaWduZWQgPyAiJWQiIDogIiV1IjsKKyAg
ICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCBmb3JtYXRTdHIsIGkpOworICAgIHJl
dHVybiBidWZmZXI7Cit9CisKKyNlbmRpZiAvLyBfQ09NTU9OX0lOQ0xVREVEXwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGls
ZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Q29tcGlsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmViNzQ2NWUzNWM4MGY2ODk4ZTUzM2ZiNjFlZjAwMWVm
NjY5YWQ5NDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5jcHAKQEAgLTAsMCArMSw1MjcgQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0J1aWx0SW5GdW5j
dGlvbkVtdWxhdG9yLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9EZXRlY3RDYWxs
RGVwdGguaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwuaCIK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemUuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVWYXJpYWJsZXMuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL01hcExvbmdWYXJpYWJsZU5hbWVzLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1JlbmFtZUZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TaEhh
bmRsZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0
QVNULmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUxpbWl0YXRpb25z
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZVBhY2tlci5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRw
dXQuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcv
UmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jb21w
aWxlci9BcnJheUJvdW5kc0NsYW1wZXIuaCIKKworYm9vbCBpc1dlYkdMQmFzZWRTcGVjKFNoU2hh
ZGVyU3BlYyBzcGVjKQoreworICAgICByZXR1cm4gc3BlYyA9PSBTSF9XRUJHTF9TUEVDIHx8IHNw
ZWMgPT0gU0hfQ1NTX1NIQURFUlNfU1BFQzsKK30KKworbmFtZXNwYWNlIHsKK2NsYXNzIFRTY29w
ZWRQb29sQWxsb2NhdG9yCit7CisgIHB1YmxpYzoKKyAgICBUU2NvcGVkUG9vbEFsbG9jYXRvcihU
UG9vbEFsbG9jYXRvciogYWxsb2NhdG9yKSA6IG1BbGxvY2F0b3IoYWxsb2NhdG9yKQorICAgIHsK
KyAgICAgICAgbUFsbG9jYXRvci0+cHVzaCgpOworICAgICAgICBTZXRHbG9iYWxQb29sQWxsb2Nh
dG9yKG1BbGxvY2F0b3IpOworICAgIH0KKyAgICB+VFNjb3BlZFBvb2xBbGxvY2F0b3IoKQorICAg
IHsKKyAgICAgICAgU2V0R2xvYmFsUG9vbEFsbG9jYXRvcihOVUxMKTsKKyAgICAgICAgbUFsbG9j
YXRvci0+cG9wKCk7CisgICAgfQorCisgIHByaXZhdGU6CisgICAgVFBvb2xBbGxvY2F0b3IqIG1B
bGxvY2F0b3I7Cit9OworCitjbGFzcyBUU2NvcGVkU3ltYm9sVGFibGVMZXZlbAoreworICBwdWJs
aWM6CisgICAgVFNjb3BlZFN5bWJvbFRhYmxlTGV2ZWwoVFN5bWJvbFRhYmxlKiB0YWJsZSkgOiBt
VGFibGUodGFibGUpCisgICAgeworICAgICAgICBBU1NFUlQobVRhYmxlLT5hdEJ1aWx0SW5MZXZl
bCgpKTsKKyAgICAgICAgbVRhYmxlLT5wdXNoKCk7CisgICAgfQorICAgIH5UU2NvcGVkU3ltYm9s
VGFibGVMZXZlbCgpCisgICAgeworICAgICAgICB3aGlsZSAoIW1UYWJsZS0+YXRCdWlsdEluTGV2
ZWwoKSkKKyAgICAgICAgICAgIG1UYWJsZS0+cG9wKCk7CisgICAgfQorCisgIHByaXZhdGU6Cisg
ICAgVFN5bWJvbFRhYmxlKiBtVGFibGU7Cit9OworfSAgLy8gbmFtZXNwYWNlCisKK1RTaEhhbmRs
ZUJhc2U6OlRTaEhhbmRsZUJhc2UoKQoreworICAgIGFsbG9jYXRvci5wdXNoKCk7CisgICAgU2V0
R2xvYmFsUG9vbEFsbG9jYXRvcigmYWxsb2NhdG9yKTsKK30KKworVFNoSGFuZGxlQmFzZTo6flRT
aEhhbmRsZUJhc2UoKQoreworICAgIFNldEdsb2JhbFBvb2xBbGxvY2F0b3IoTlVMTCk7CisgICAg
YWxsb2NhdG9yLnBvcEFsbCgpOworfQorCitUQ29tcGlsZXI6OlRDb21waWxlcihTaFNoYWRlclR5
cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMpCisgICAgOiBzaGFkZXJUeXBlKHR5cGUpLAorICAg
ICAgc2hhZGVyU3BlYyhzcGVjKSwKKyAgICAgIG1heFVuaWZvcm1WZWN0b3JzKDApLAorICAgICAg
bWF4RXhwcmVzc2lvbkNvbXBsZXhpdHkoMCksCisgICAgICBtYXhDYWxsU3RhY2tEZXB0aCgwKSwK
KyAgICAgIGZyYWdtZW50UHJlY2lzaW9uSGlnaChmYWxzZSksCisgICAgICBjbGFtcGluZ1N0cmF0
ZWd5KFNIX0NMQU1QX1dJVEhfQ0xBTVBfSU5UUklOU0lDKSwKKyAgICAgIGJ1aWx0SW5GdW5jdGlv
bkVtdWxhdG9yKHR5cGUpCit7CisgICAgbG9uZ05hbWVNYXAgPSBMb25nTmFtZU1hcDo6R2V0SW5z
dGFuY2UoKTsKK30KKworVENvbXBpbGVyOjp+VENvbXBpbGVyKCkKK3sKKyAgICBBU1NFUlQobG9u
Z05hbWVNYXApOworICAgIGxvbmdOYW1lTWFwLT5SZWxlYXNlKCk7Cit9CisKK2Jvb2wgVENvbXBp
bGVyOjpJbml0KGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyYgcmVzb3VyY2VzKQoreworICAgIG1h
eFVuaWZvcm1WZWN0b3JzID0gKHNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUikgPworICAg
ICAgICByZXNvdXJjZXMuTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMgOgorICAgICAgICByZXNvdXJj
ZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9yczsKKyAgICBtYXhFeHByZXNzaW9uQ29tcGxleGl0
eSA9IHJlc291cmNlcy5NYXhFeHByZXNzaW9uQ29tcGxleGl0eTsKKyAgICBtYXhDYWxsU3RhY2tE
ZXB0aCA9IHJlc291cmNlcy5NYXhDYWxsU3RhY2tEZXB0aDsKKworICAgIFNldEdsb2JhbFBvb2xB
bGxvY2F0b3IoJmFsbG9jYXRvcik7CisKKyAgICAvLyBHZW5lcmF0ZSBidWlsdC1pbiBzeW1ib2wg
dGFibGUuCisgICAgaWYgKCFJbml0QnVpbHRJblN5bWJvbFRhYmxlKHJlc291cmNlcykpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBJbml0RXh0ZW5zaW9uQmVoYXZpb3IocmVzb3VyY2VzLCBl
eHRlbnNpb25CZWhhdmlvcik7CisgICAgZnJhZ21lbnRQcmVjaXNpb25IaWdoID0gcmVzb3VyY2Vz
LkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9PSAxOworCisgICAgYXJyYXlCb3VuZHNDbGFtcGVyLlNl
dENsYW1waW5nU3RyYXRlZ3kocmVzb3VyY2VzLkFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5KTsK
KyAgICBjbGFtcGluZ1N0cmF0ZWd5ID0gcmVzb3VyY2VzLkFycmF5SW5kZXhDbGFtcGluZ1N0cmF0
ZWd5OworCisgICAgaGFzaEZ1bmN0aW9uID0gcmVzb3VyY2VzLkhhc2hGdW5jdGlvbjsKKworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIFRDb21waWxlcjo6Y29tcGlsZShjb25zdCBjaGFyKiBj
b25zdCBzaGFkZXJTdHJpbmdzW10sCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbnVt
U3RyaW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb21waWxlT3B0aW9ucykKK3sK
KyAgICBUU2NvcGVkUG9vbEFsbG9jYXRvciBzY29wZWRBbGxvYygmYWxsb2NhdG9yKTsKKyAgICBj
bGVhclJlc3VsdHMoKTsKKworICAgIGlmIChudW1TdHJpbmdzID09IDApCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgLy8gSWYgY29tcGlsaW5nIGZvciBXZWJHTCwgdmFsaWRhdGUgbG9vcCBh
bmQgaW5kZXhpbmcgYXMgd2VsbC4KKyAgICBpZiAoaXNXZWJHTEJhc2VkU3BlYyhzaGFkZXJTcGVj
KSkKKyAgICAgICAgY29tcGlsZU9wdGlvbnMgfD0gU0hfVkFMSURBVEVfTE9PUF9JTkRFWElORzsK
KworICAgIC8vIEZpcnN0IHN0cmluZyBpcyBwYXRoIG9mIHNvdXJjZSBmaWxlIGlmIGZsYWcgaXMg
c2V0LiBUaGUgYWN0dWFsIHNvdXJjZSBmb2xsb3dzLgorICAgIGNvbnN0IGNoYXIqIHNvdXJjZVBh
dGggPSBOVUxMOworICAgIHNpemVfdCBmaXJzdFNvdXJjZSA9IDA7CisgICAgaWYgKGNvbXBpbGVP
cHRpb25zICYgU0hfU09VUkNFX1BBVEgpCisgICAgeworICAgICAgICBzb3VyY2VQYXRoID0gc2hh
ZGVyU3RyaW5nc1swXTsKKyAgICAgICAgKytmaXJzdFNvdXJjZTsKKyAgICB9CisKKyAgICBUSW50
ZXJtZWRpYXRlIGludGVybWVkaWF0ZShpbmZvU2luayk7CisgICAgVFBhcnNlQ29udGV4dCBwYXJz
ZUNvbnRleHQoc3ltYm9sVGFibGUsIGV4dGVuc2lvbkJlaGF2aW9yLCBpbnRlcm1lZGlhdGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZGVyVHlwZSwgc2hhZGVyU3BlYywgY29t
cGlsZU9wdGlvbnMsIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNl
UGF0aCwgaW5mb1NpbmspOworICAgIHBhcnNlQ29udGV4dC5mcmFnbWVudFByZWNpc2lvbkhpZ2gg
PSBmcmFnbWVudFByZWNpc2lvbkhpZ2g7CisgICAgU2V0R2xvYmFsUGFyc2VDb250ZXh0KCZwYXJz
ZUNvbnRleHQpOworCisgICAgLy8gV2UgcHJlc2VydmUgc3ltYm9scyBhdCB0aGUgYnVpbHQtaW4g
bGV2ZWwgZnJvbSBjb21waWxlLXRvLWNvbXBpbGUuCisgICAgLy8gU3RhcnQgcHVzaGluZyB0aGUg
dXNlci1kZWZpbmVkIHN5bWJvbHMgYXQgZ2xvYmFsIGxldmVsLgorICAgIFRTY29wZWRTeW1ib2xU
YWJsZUxldmVsIHNjb3BlZFN5bWJvbExldmVsKCZzeW1ib2xUYWJsZSk7CisKKyAgICAvLyBQYXJz
ZSBzaGFkZXIuCisgICAgYm9vbCBzdWNjZXNzID0KKyAgICAgICAgKFBhUGFyc2VTdHJpbmdzKG51
bVN0cmluZ3MgLSBmaXJzdFNvdXJjZSwgJnNoYWRlclN0cmluZ3NbZmlyc3RTb3VyY2VdLCBOVUxM
LCAmcGFyc2VDb250ZXh0KSA9PSAwKSAmJgorICAgICAgICAocGFyc2VDb250ZXh0LnRyZWVSb290
ICE9IE5VTEwpOworICAgIGlmIChzdWNjZXNzKQorICAgIHsKKyAgICAgICAgVEludGVybU5vZGUq
IHJvb3QgPSBwYXJzZUNvbnRleHQudHJlZVJvb3Q7CisgICAgICAgIHN1Y2Nlc3MgPSBpbnRlcm1l
ZGlhdGUucG9zdFByb2Nlc3Mocm9vdCk7CisKKyAgICAgICAgaWYgKHN1Y2Nlc3MpCisgICAgICAg
ICAgICBzdWNjZXNzID0gZGV0ZWN0Q2FsbERlcHRoKHJvb3QsIGluZm9TaW5rLCAoY29tcGlsZU9w
dGlvbnMgJiBTSF9MSU1JVF9DQUxMX1NUQUNLX0RFUFRIKSAhPSAwKTsKKworICAgICAgICBpZiAo
c3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9WQUxJREFURV9MT09QX0lOREVYSU5HKSkK
KyAgICAgICAgICAgIHN1Y2Nlc3MgPSB2YWxpZGF0ZUxpbWl0YXRpb25zKHJvb3QpOworCisgICAg
ICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1RJTUlOR19SRVNUUklDVElP
TlMpKQorICAgICAgICAgICAgc3VjY2VzcyA9IGVuZm9yY2VUaW1pbmdSZXN0cmljdGlvbnMocm9v
dCwgKGNvbXBpbGVPcHRpb25zICYgU0hfREVQRU5ERU5DWV9HUkFQSCkgIT0gMCk7CisKKyAgICAg
ICAgaWYgKHN1Y2Nlc3MgJiYgc2hhZGVyU3BlYyA9PSBTSF9DU1NfU0hBREVSU19TUEVDKQorICAg
ICAgICAgICAgcmV3cml0ZUNTU1NoYWRlcihyb290KTsKKworICAgICAgICAvLyBVbnJvbGwgZm9y
LWxvb3AgbWFya3VwIG5lZWRzIHRvIGhhcHBlbiBhZnRlciB2YWxpZGF0ZUxpbWl0YXRpb25zIHBh
c3MuCisgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1VOUk9MTF9G
T1JfTE9PUF9XSVRIX0lOVEVHRVJfSU5ERVgpKQorICAgICAgICAgICAgRm9yTG9vcFVucm9sbDo6
TWFya0Zvckxvb3BzV2l0aEludGVnZXJJbmRpY2VzRm9yVW5yb2xsaW5nKHJvb3QpOworCisgICAg
ICAgIC8vIEJ1aWx0LWluIGZ1bmN0aW9uIGVtdWxhdGlvbiBuZWVkcyB0byBoYXBwZW4gYWZ0ZXIg
dmFsaWRhdGVMaW1pdGF0aW9ucyBwYXNzLgorICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGls
ZU9wdGlvbnMgJiBTSF9FTVVMQVRFX0JVSUxUX0lOX0ZVTkNUSU9OUykpCisgICAgICAgICAgICBi
dWlsdEluRnVuY3Rpb25FbXVsYXRvci5NYXJrQnVpbHRJbkZ1bmN0aW9uc0ZvckVtdWxhdGlvbihy
b290KTsKKworICAgICAgICAvLyBDbGFtcGluZyB1bmlmb3JtIGFycmF5IGJvdW5kcyBuZWVkcyB0
byBoYXBwZW4gYWZ0ZXIgdmFsaWRhdGVMaW1pdGF0aW9ucyBwYXNzLgorICAgICAgICBpZiAoc3Vj
Y2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9DTEFNUF9JTkRJUkVDVF9BUlJBWV9CT1VORFMp
KQorICAgICAgICAgICAgYXJyYXlCb3VuZHNDbGFtcGVyLk1hcmtJbmRpcmVjdEFycmF5Qm91bmRz
Rm9yQ2xhbXBpbmcocm9vdCk7CisKKyAgICAgICAgLy8gRGlzYWxsb3cgZXhwcmVzc2lvbnMgZGVl
bWVkIHRvbyBjb21wbGV4LgorICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMg
JiBTSF9MSU1JVF9FWFBSRVNTSU9OX0NPTVBMRVhJVFkpKQorICAgICAgICAgICAgc3VjY2VzcyA9
IGxpbWl0RXhwcmVzc2lvbkNvbXBsZXhpdHkocm9vdCk7CisKKyAgICAgICAgLy8gQ2FsbCBtYXBM
b25nVmFyaWFibGVOYW1lcygpIGJlZm9yZSBjb2xsZWN0QXR0cmlic1VuaWZvcm1zKCkgc28gaW4K
KyAgICAgICAgLy8gY29sbGVjdEF0dHJpYnNVbmlmb3JtcygpIHdlIGFscmVhZHkgaGF2ZSB0aGUg
bWFwcGVkIHN5bWJvbCBuYW1lcyBhbmQKKyAgICAgICAgLy8gd2UgY291bGQgY29tcG9zaXRlIG1h
cHBlZCBhbmQgb3JpZ2luYWwgdmFyaWFibGUgbmFtZXMuCisgICAgICAgIC8vIEFsc28sIGlmIHdl
IGhhc2ggYWxsIHRoZSBuYW1lcywgdGhlbiBubyBuZWVkIHRvIGRvIHRoaXMgZm9yIGxvbmcgbmFt
ZXMuCisgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX01BUF9MT05H
X1ZBUklBQkxFX05BTUVTKSAmJiBoYXNoRnVuY3Rpb24gPT0gTlVMTCkKKyAgICAgICAgICAgIG1h
cExvbmdWYXJpYWJsZU5hbWVzKHJvb3QpOworCisgICAgICAgIGlmIChzdWNjZXNzICYmIHNoYWRl
clR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUiAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9JTklUX0dM
X1BPU0lUSU9OKSkKKyAgICAgICAgICAgIGluaXRpYWxpemVHTFBvc2l0aW9uKHJvb3QpOworCisg
ICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1VORk9MRF9TSE9SVF9D
SVJDVUlUKSkKKyAgICAgICAgeworICAgICAgICAgICAgVW5mb2xkU2hvcnRDaXJjdWl0QVNUIHVu
Zm9sZFNob3J0Q2lyY3VpdDsKKyAgICAgICAgICAgIHJvb3QtPnRyYXZlcnNlKCZ1bmZvbGRTaG9y
dENpcmN1aXQpOworICAgICAgICAgICAgdW5mb2xkU2hvcnRDaXJjdWl0LnVwZGF0ZVRyZWUoKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNI
X1ZBUklBQkxFUykpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbGxlY3RWYXJpYWJsZXMocm9v
dCk7CisgICAgICAgICAgICBpZiAoY29tcGlsZU9wdGlvbnMgJiBTSF9FTkZPUkNFX1BBQ0tJTkdf
UkVTVFJJQ1RJT05TKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBl
bmZvcmNlUGFja2luZ1Jlc3RyaWN0aW9ucygpOworICAgICAgICAgICAgICAgIGlmICghc3VjY2Vz
cykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8u
cHJlZml4KEVQcmVmaXhFcnJvcik7CisgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8g
PDwgInRvbyBtYW55IHVuaWZvcm1zIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoc3VjY2VzcyAmJiBzaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFE
RVIgJiYKKyAgICAgICAgICAgICAgICAoY29tcGlsZU9wdGlvbnMgJiBTSF9JTklUX1ZBUllJTkdT
X1dJVEhPVVRfU1RBVElDX1VTRSkpCisgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZVZhcnlpbmdz
V2l0aG91dFN0YXRpY1VzZShyb290KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdWNjZXNz
ICYmIChjb21waWxlT3B0aW9ucyAmIFNIX0lOVEVSTUVESUFURV9UUkVFKSkKKyAgICAgICAgICAg
IGludGVybWVkaWF0ZS5vdXRwdXRUcmVlKHJvb3QpOworCisgICAgICAgIGlmIChzdWNjZXNzICYm
IChjb21waWxlT3B0aW9ucyAmIFNIX09CSkVDVF9DT0RFKSkKKyAgICAgICAgICAgIHRyYW5zbGF0
ZShyb290KTsKKyAgICB9CisKKyAgICAvLyBDbGVhbnVwIG1lbW9yeS4KKyAgICBpbnRlcm1lZGlh
dGUucmVtb3ZlKHBhcnNlQ29udGV4dC50cmVlUm9vdCk7CisKKyAgICByZXR1cm4gc3VjY2VzczsK
K30KKworYm9vbCBUQ29tcGlsZXI6OkluaXRCdWlsdEluU3ltYm9sVGFibGUoY29uc3QgU2hCdWls
dEluUmVzb3VyY2VzICZyZXNvdXJjZXMpCit7CisgICAgY29tcGlsZVJlc291cmNlcyA9IHJlc291
cmNlczsKKworICAgIGFzc2VydChzeW1ib2xUYWJsZS5pc0VtcHR5KCkpOworICAgIHN5bWJvbFRh
YmxlLnB1c2goKTsKKworICAgIFRQdWJsaWNUeXBlIGludGVnZXI7CisgICAgaW50ZWdlci50eXBl
ID0gRWJ0SW50OworICAgIGludGVnZXIuc2l6ZSA9IDE7CisgICAgaW50ZWdlci5tYXRyaXggPSBm
YWxzZTsKKyAgICBpbnRlZ2VyLmFycmF5ID0gZmFsc2U7CisKKyAgICBUUHVibGljVHlwZSBmbG9h
dGluZ1BvaW50OworICAgIGZsb2F0aW5nUG9pbnQudHlwZSA9IEVidEZsb2F0OworICAgIGZsb2F0
aW5nUG9pbnQuc2l6ZSA9IDE7CisgICAgZmxvYXRpbmdQb2ludC5tYXRyaXggPSBmYWxzZTsKKyAg
ICBmbG9hdGluZ1BvaW50LmFycmF5ID0gZmFsc2U7CisKKyAgICBUUHVibGljVHlwZSBzYW1wbGVy
OworICAgIHNhbXBsZXIuc2l6ZSA9IDE7CisgICAgc2FtcGxlci5tYXRyaXggPSBmYWxzZTsKKyAg
ICBzYW1wbGVyLmFycmF5ID0gZmFsc2U7CisKKyAgICBzd2l0Y2goc2hhZGVyVHlwZSkKKyAgICB7
CisgICAgICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjoKKyAgICAgICAgc3ltYm9sVGFibGUuc2V0
RGVmYXVsdFByZWNpc2lvbihpbnRlZ2VyLCBFYnBNZWRpdW0pOworICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgU0hfVkVSVEVYX1NIQURFUjoKKyAgICAgICAgc3ltYm9sVGFibGUuc2V0RGVmYXVs
dFByZWNpc2lvbihpbnRlZ2VyLCBFYnBIaWdoKTsKKyAgICAgICAgc3ltYm9sVGFibGUuc2V0RGVm
YXVsdFByZWNpc2lvbihmbG9hdGluZ1BvaW50LCBFYnBIaWdoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoZmFsc2UgJiYgIkxhbmd1YWdlIG5vdCBzdXBw
b3J0ZWQiKTsKKyAgICB9CisgICAgLy8gV2Ugc2V0IGRlZmF1bHRzIGZvciBhbGwgdGhlIHNhbXBs
ZXIgdHlwZXMsIGV2ZW4gdGhvc2UgdGhhdCBhcmUKKyAgICAvLyBvbmx5IGF2YWlsYWJsZSBpZiBh
biBleHRlbnNpb24gZXhpc3RzLgorICAgIGZvciAoaW50IHNhbXBsZXJUeXBlID0gRWJ0R3VhcmRT
YW1wbGVyQmVnaW4gKyAxOworICAgICAgICAgc2FtcGxlclR5cGUgPCBFYnRHdWFyZFNhbXBsZXJF
bmQ7ICsrc2FtcGxlclR5cGUpCisgICAgeworICAgICAgICBzYW1wbGVyLnR5cGUgPSBzdGF0aWNf
Y2FzdDxUQmFzaWNUeXBlPihzYW1wbGVyVHlwZSk7CisgICAgICAgIHN5bWJvbFRhYmxlLnNldERl
ZmF1bHRQcmVjaXNpb24oc2FtcGxlciwgRWJwTG93KTsKKyAgICB9CisKKyAgICBJbnNlcnRCdWls
dEluRnVuY3Rpb25zKHNoYWRlclR5cGUsIHNoYWRlclNwZWMsIHJlc291cmNlcywgc3ltYm9sVGFi
bGUpOworCisgICAgSWRlbnRpZnlCdWlsdElucyhzaGFkZXJUeXBlLCBzaGFkZXJTcGVjLCByZXNv
dXJjZXMsIHN5bWJvbFRhYmxlKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFRDb21w
aWxlcjo6Y2xlYXJSZXN1bHRzKCkKK3sKKyAgICBhcnJheUJvdW5kc0NsYW1wZXIuQ2xlYW51cCgp
OworICAgIGluZm9TaW5rLmluZm8uZXJhc2UoKTsKKyAgICBpbmZvU2luay5vYmouZXJhc2UoKTsK
KyAgICBpbmZvU2luay5kZWJ1Zy5lcmFzZSgpOworCisgICAgYXR0cmlicy5jbGVhcigpOworICAg
IHVuaWZvcm1zLmNsZWFyKCk7CisgICAgdmFyeWluZ3MuY2xlYXIoKTsKKworICAgIGJ1aWx0SW5G
dW5jdGlvbkVtdWxhdG9yLkNsZWFudXAoKTsKKworICAgIG5hbWVNYXAuY2xlYXIoKTsKK30KKwor
Ym9vbCBUQ29tcGlsZXI6OmRldGVjdENhbGxEZXB0aChUSW50ZXJtTm9kZSogcm9vdCwgVEluZm9T
aW5rJiBpbmZvU2luaywgYm9vbCBsaW1pdENhbGxTdGFja0RlcHRoKQoreworICAgIERldGVjdENh
bGxEZXB0aCBkZXRlY3QoaW5mb1NpbmssIGxpbWl0Q2FsbFN0YWNrRGVwdGgsIG1heENhbGxTdGFj
a0RlcHRoKTsKKyAgICByb290LT50cmF2ZXJzZSgmZGV0ZWN0KTsKKyAgICBzd2l0Y2ggKGRldGVj
dC5kZXRlY3RDYWxsRGVwdGgoKSkKKyAgICB7CisgICAgICBjYXNlIERldGVjdENhbGxEZXB0aDo6
a0Vycm9yTm9uZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICBjYXNlIERldGVjdENhbGxE
ZXB0aDo6a0Vycm9yTWlzc2luZ01haW46CisgICAgICAgIGluZm9TaW5rLmluZm8ucHJlZml4KEVQ
cmVmaXhFcnJvcik7CisgICAgICAgIGluZm9TaW5rLmluZm8gPDwgIk1pc3NpbmcgbWFpbigpIjsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgY2FzZSBEZXRlY3RDYWxsRGVwdGg6OmtFcnJv
clJlY3Vyc2lvbjoKKyAgICAgICAgaW5mb1NpbmsuaW5mby5wcmVmaXgoRVByZWZpeEVycm9yKTsK
KyAgICAgICAgaW5mb1NpbmsuaW5mbyA8PCAiRnVuY3Rpb24gcmVjdXJzaW9uIGRldGVjdGVkIjsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgY2FzZSBEZXRlY3RDYWxsRGVwdGg6OmtFcnJv
ck1heERlcHRoRXhjZWVkZWQ6CisgICAgICAgIGluZm9TaW5rLmluZm8ucHJlZml4KEVQcmVmaXhF
cnJvcik7CisgICAgICAgIGluZm9TaW5rLmluZm8gPDwgIkZ1bmN0aW9uIGNhbGwgc3RhY2sgdG9v
IGRlZXAiOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBkZWZhdWx0OgorICAgICAgICBV
TlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit2b2lkIFRD
b21waWxlcjo6cmV3cml0ZUNTU1NoYWRlcihUSW50ZXJtTm9kZSogcm9vdCkKK3sKKyAgICBSZW5h
bWVGdW5jdGlvbiByZW5hbWVyKCJtYWluKCIsICJjc3NfbWFpbigiKTsKKyAgICByb290LT50cmF2
ZXJzZSgmcmVuYW1lcik7Cit9CisKK2Jvb2wgVENvbXBpbGVyOjp2YWxpZGF0ZUxpbWl0YXRpb25z
KFRJbnRlcm1Ob2RlKiByb290KQoreworICAgIFZhbGlkYXRlTGltaXRhdGlvbnMgdmFsaWRhdGUo
c2hhZGVyVHlwZSwgaW5mb1NpbmsuaW5mbyk7CisgICAgcm9vdC0+dHJhdmVyc2UoJnZhbGlkYXRl
KTsKKyAgICByZXR1cm4gdmFsaWRhdGUubnVtRXJyb3JzKCkgPT0gMDsKK30KKworYm9vbCBUQ29t
cGlsZXI6OmVuZm9yY2VUaW1pbmdSZXN0cmljdGlvbnMoVEludGVybU5vZGUqIHJvb3QsIGJvb2wg
b3V0cHV0R3JhcGgpCit7CisgICAgaWYgKHNoYWRlclNwZWMgIT0gU0hfV0VCR0xfU1BFQykKKyAg
ICB7CisgICAgICAgIGluZm9TaW5rLmluZm8gPDwgIlRpbWluZyByZXN0cmljdGlvbnMgbXVzdCBi
ZSBlbmZvcmNlZCB1bmRlciB0aGUgV2ViR0wgc3BlYy4iOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgaWYgKHNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKQorICAg
IHsKKyAgICAgICAgVERlcGVuZGVuY3lHcmFwaCBncmFwaChyb290KTsKKworICAgICAgICAvLyBP
dXRwdXQgYW55IGVycm9ycyBmaXJzdC4KKyAgICAgICAgYm9vbCBzdWNjZXNzID0gZW5mb3JjZUZy
YWdtZW50U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKGdyYXBoKTsKKyAgICAgICAgCisgICAgICAg
IC8vIFRoZW4sIG91dHB1dCB0aGUgZGVwZW5kZW5jeSBncmFwaC4KKyAgICAgICAgaWYgKG91dHB1
dEdyYXBoKQorICAgICAgICB7CisgICAgICAgICAgICBURGVwZW5kZW5jeUdyYXBoT3V0cHV0IG91
dHB1dChpbmZvU2luay5pbmZvKTsKKyAgICAgICAgICAgIG91dHB1dC5vdXRwdXRBbGxTcGFubmlu
Z1RyZWVzKGdyYXBoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHN1Y2Nl
c3M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBlbmZvcmNlVmVydGV4
U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKHJvb3QpOworICAgIH0KK30KKworYm9vbCBUQ29tcGls
ZXI6OmxpbWl0RXhwcmVzc2lvbkNvbXBsZXhpdHkoVEludGVybU5vZGUqIHJvb3QpCit7CisgICAg
VEludGVybVRyYXZlcnNlciB0cmF2ZXJzZXI7CisgICAgcm9vdC0+dHJhdmVyc2UoJnRyYXZlcnNl
cik7CisgICAgVERlcGVuZGVuY3lHcmFwaCBncmFwaChyb290KTsKKworICAgIGZvciAoVEZ1bmN0
aW9uQ2FsbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGdyYXBoLmJlZ2luVXNlckRlZmlu
ZWRGdW5jdGlvbkNhbGxzKCk7CisgICAgICAgICBpdGVyICE9IGdyYXBoLmVuZFVzZXJEZWZpbmVk
RnVuY3Rpb25DYWxscygpOworICAgICAgICAgKytpdGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBo
RnVuY3Rpb25DYWxsKiBzYW1wbGVyU3ltYm9sID0gKml0ZXI7CisgICAgICAgIFREZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZXIgZ3JhcGhUcmF2ZXJzZXI7CisgICAgICAgIHNhbXBsZXJTeW1ib2wtPnRy
YXZlcnNlKCZncmFwaFRyYXZlcnNlcik7CisgICAgfQorCisgICAgaWYgKHRyYXZlcnNlci5nZXRN
YXhEZXB0aCgpID4gbWF4RXhwcmVzc2lvbkNvbXBsZXhpdHkpCisgICAgeworICAgICAgICBpbmZv
U2luay5pbmZvIDw8ICJFeHByZXNzaW9uIHRvbyBjb21wbGV4LiI7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVENvbXBpbGVyOjplbmZv
cmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoY29uc3QgVERlcGVuZGVuY3lHcmFw
aCYgZ3JhcGgpCit7CisgICAgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZyByZXN0cmljdG9y
KGluZm9TaW5rLmluZm8pOworICAgIHJlc3RyaWN0b3IuZW5mb3JjZVJlc3RyaWN0aW9ucyhncmFw
aCk7CisgICAgcmV0dXJuIHJlc3RyaWN0b3IubnVtRXJyb3JzKCkgPT0gMDsKK30KKworYm9vbCBU
Q29tcGlsZXI6OmVuZm9yY2VWZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoVEludGVybU5v
ZGUqIHJvb3QpCit7CisgICAgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcgcmVzdHJpY3Rvcihp
bmZvU2luay5pbmZvKTsKKyAgICByZXN0cmljdG9yLmVuZm9yY2VSZXN0cmljdGlvbnMocm9vdCk7
CisgICAgcmV0dXJuIHJlc3RyaWN0b3IubnVtRXJyb3JzKCkgPT0gMDsKK30KKwordm9pZCBUQ29t
cGlsZXI6OmNvbGxlY3RWYXJpYWJsZXMoVEludGVybU5vZGUqIHJvb3QpCit7CisgICAgQ29sbGVj
dFZhcmlhYmxlcyBjb2xsZWN0KGF0dHJpYnMsIHVuaWZvcm1zLCB2YXJ5aW5ncywgaGFzaEZ1bmN0
aW9uKTsKKyAgICByb290LT50cmF2ZXJzZSgmY29sbGVjdCk7Cit9CisKK2Jvb2wgVENvbXBpbGVy
OjplbmZvcmNlUGFja2luZ1Jlc3RyaWN0aW9ucygpCit7CisgICAgVmFyaWFibGVQYWNrZXIgcGFj
a2VyOworICAgIHJldHVybiBwYWNrZXIuQ2hlY2tWYXJpYWJsZXNXaXRoaW5QYWNraW5nTGltaXRz
KG1heFVuaWZvcm1WZWN0b3JzLCB1bmlmb3Jtcyk7Cit9CisKK3ZvaWQgVENvbXBpbGVyOjppbml0
aWFsaXplR0xQb3NpdGlvbihUSW50ZXJtTm9kZSogcm9vdCkKK3sKKyAgICBJbml0aWFsaXplVmFy
aWFibGVzOjpJbml0VmFyaWFibGVJbmZvTGlzdCB2YXJpYWJsZXM7CisgICAgSW5pdGlhbGl6ZVZh
cmlhYmxlczo6SW5pdFZhcmlhYmxlSW5mbyB2YXIoCisgICAgICAgICJnbF9Qb3NpdGlvbiIsIFRU
eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cVBvc2l0aW9uLCA0KSk7CisgICAgdmFyaWFi
bGVzLnB1c2hfYmFjayh2YXIpOworICAgIEluaXRpYWxpemVWYXJpYWJsZXMgaW5pdGlhbGl6ZXIo
dmFyaWFibGVzKTsKKyAgICByb290LT50cmF2ZXJzZSgmaW5pdGlhbGl6ZXIpOworfQorCit2b2lk
IFRDb21waWxlcjo6aW5pdGlhbGl6ZVZhcnlpbmdzV2l0aG91dFN0YXRpY1VzZShUSW50ZXJtTm9k
ZSogcm9vdCkKK3sKKyAgICBJbml0aWFsaXplVmFyaWFibGVzOjpJbml0VmFyaWFibGVJbmZvTGlz
dCB2YXJpYWJsZXM7CisgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHZhcnlpbmdzLnNpemUo
KTsgKytpaSkKKyAgICB7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZUluZm8mIHZhcnlpbmcgPSB2
YXJ5aW5nc1tpaV07CisgICAgICAgIGlmICh2YXJ5aW5nLnN0YXRpY1VzZSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB1bnNpZ25lZCBjaGFyIHNpemUgPSAwOworICAgICAgICBib29s
IG1hdHJpeCA9IGZhbHNlOworICAgICAgICBzd2l0Y2ggKHZhcnlpbmcudHlwZSkKKyAgICAgICAg
eworICAgICAgICAgIGNhc2UgU0hfRkxPQVQ6CisgICAgICAgICAgICBzaXplID0gMTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMjoKKyAgICAgICAgICAg
IHNpemUgPSAyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBTSF9GTE9BVF9W
RUMzOgorICAgICAgICAgICAgc2l6ZSA9IDM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBjYXNlIFNIX0ZMT0FUX1ZFQzQ6CisgICAgICAgICAgICBzaXplID0gNDsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMjoKKyAgICAgICAgICAgIHNpemUg
PSAyOworICAgICAgICAgICAgbWF0cml4ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMzoKKyAgICAgICAgICAgIHNpemUgPSAzOworICAgICAg
ICAgICAgbWF0cml4ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2Ug
U0hfRkxPQVRfTUFUNDoKKyAgICAgICAgICAgIHNpemUgPSA0OworICAgICAgICAgICAgbWF0cml4
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBBU1NFUlQoZmFsc2UpOworICAgICAgICB9CisgICAgICAgIFRUeXBlIHR5cGUoRWJ0Rmxv
YXQsIEVicFVuZGVmaW5lZCwgRXZxVmFyeWluZ091dCwgc2l6ZSwgbWF0cml4LCB2YXJ5aW5nLmlz
QXJyYXkpOworICAgICAgICBUU3RyaW5nIG5hbWUgPSB2YXJ5aW5nLm5hbWUuY19zdHIoKTsKKyAg
ICAgICAgaWYgKHZhcnlpbmcuaXNBcnJheSkKKyAgICAgICAgeworICAgICAgICAgICAgdHlwZS5z
ZXRBcnJheVNpemUodmFyeWluZy5zaXplKTsKKyAgICAgICAgICAgIG5hbWUgPSBuYW1lLnN1YnN0
cigwLCBuYW1lLmZpbmRfZmlyc3Rfb2YoJ1snKSk7CisgICAgICAgIH0KKworICAgICAgICBJbml0
aWFsaXplVmFyaWFibGVzOjpJbml0VmFyaWFibGVJbmZvIHZhcihuYW1lLCB0eXBlKTsKKyAgICAg
ICAgdmFyaWFibGVzLnB1c2hfYmFjayh2YXIpOworICAgIH0KKyAgICBJbml0aWFsaXplVmFyaWFi
bGVzIGluaXRpYWxpemVyKHZhcmlhYmxlcyk7CisgICAgcm9vdC0+dHJhdmVyc2UoJmluaXRpYWxp
emVyKTsKK30KKwordm9pZCBUQ29tcGlsZXI6Om1hcExvbmdWYXJpYWJsZU5hbWVzKFRJbnRlcm1O
b2RlKiByb290KQoreworICAgIEFTU0VSVChsb25nTmFtZU1hcCk7CisgICAgTWFwTG9uZ1Zhcmlh
YmxlTmFtZXMgbWFwKGxvbmdOYW1lTWFwKTsKKyAgICByb290LT50cmF2ZXJzZSgmbWFwKTsKK30K
KworaW50IFRDb21waWxlcjo6Z2V0TWFwcGVkTmFtZU1heExlbmd0aCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFICsgMTsKK30KKworY29uc3QgVEV4
dGVuc2lvbkJlaGF2aW9yJiBUQ29tcGlsZXI6OmdldEV4dGVuc2lvbkJlaGF2aW9yKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gZXh0ZW5zaW9uQmVoYXZpb3I7Cit9CisKK2NvbnN0IFNoQnVpbHRJblJl
c291cmNlcyYgVENvbXBpbGVyOjpnZXRSZXNvdXJjZXMoKSBjb25zdAoreworICAgIHJldHVybiBj
b21waWxlUmVzb3VyY2VzOworfQorCitjb25zdCBBcnJheUJvdW5kc0NsYW1wZXImIFRDb21waWxl
cjo6Z2V0QXJyYXlCb3VuZHNDbGFtcGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXJyYXlCb3Vu
ZHNDbGFtcGVyOworfQorCitTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IFRDb21waWxlcjo6
Z2V0QXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3koKSBjb25zdAoreworICAgIHJldHVybiBjbGFt
cGluZ1N0cmF0ZWd5OworfQorCitjb25zdCBCdWlsdEluRnVuY3Rpb25FbXVsYXRvciYgVENvbXBp
bGVyOjpnZXRCdWlsdEluRnVuY3Rpb25FbXVsYXRvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGJ1
aWx0SW5GdW5jdGlvbkVtdWxhdG9yOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmIxZTM3ODg1ZjkwMWIwMjRkNjM0NjU4NDc3MTJiZmI2ODg2MDczNGMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9Db25zdGFudFVuaW9uLmgKQEAgLTAsMCArMSwyNTcgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpZm5kZWYgX0NPTlNUQU5UX1VOSU9OX0lOQ0xVREVEXworI2RlZmluZSBfQ09OU1RBTlRf
VU5JT05fSU5DTFVERURfCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworY2xhc3MgQ29uc3RhbnRV
bmlvbiB7CitwdWJsaWM6CisgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSgpOworICAgIENv
bnN0YW50VW5pb24oKQorICAgIHsKKyAgICAgICAgaUNvbnN0ID0gMDsKKyAgICAgICAgdHlwZSA9
IEVidFZvaWQ7CisgICAgfQorCisgICAgdm9pZCBzZXRJQ29uc3QoaW50IGkpIHtpQ29uc3QgPSBp
OyB0eXBlID0gRWJ0SW50OyB9CisgICAgdm9pZCBzZXRGQ29uc3QoZmxvYXQgZikge2ZDb25zdCA9
IGY7IHR5cGUgPSBFYnRGbG9hdDsgfQorICAgIHZvaWQgc2V0QkNvbnN0KGJvb2wgYikge2JDb25z
dCA9IGI7IHR5cGUgPSBFYnRCb29sOyB9CisKKyAgICBpbnQgZ2V0SUNvbnN0KCkgeyByZXR1cm4g
aUNvbnN0OyB9CisgICAgZmxvYXQgZ2V0RkNvbnN0KCkgeyByZXR1cm4gZkNvbnN0OyB9CisgICAg
Ym9vbCBnZXRCQ29uc3QoKSB7IHJldHVybiBiQ29uc3Q7IH0KKyAgICBpbnQgZ2V0SUNvbnN0KCkg
Y29uc3QgeyByZXR1cm4gaUNvbnN0OyB9CisgICAgZmxvYXQgZ2V0RkNvbnN0KCkgY29uc3QgeyBy
ZXR1cm4gZkNvbnN0OyB9CisgICAgYm9vbCBnZXRCQ29uc3QoKSBjb25zdCB7IHJldHVybiBiQ29u
c3Q7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpbnQgaSkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpID09IGlDb25zdDsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgZmxvYXQgZikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmID09IGZDb25zdDsK
KyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgYm9vbCBiKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGIgPT0gYkNvbnN0OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
IChjb25zdGFudC50eXBlICE9IHR5cGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50OgorICAgICAgICAgICAg
cmV0dXJuIGNvbnN0YW50LmlDb25zdCA9PSBpQ29uc3Q7CisgICAgICAgIGNhc2UgRWJ0RmxvYXQ6
CisgICAgICAgICAgICByZXR1cm4gY29uc3RhbnQuZkNvbnN0ID09IGZDb25zdDsKKyAgICAgICAg
Y2FzZSBFYnRCb29sOgorICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50LmJDb25zdCA9PSBiQ29u
c3Q7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaW50IGkpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gIW9wZXJhdG9yPT0oaSk7CisgICAgfQorCisgICAgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IGZsb2F0IGYpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW9wZXJh
dG9yPT0oZik7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGJvb2wgYikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiAhb3BlcmF0b3I9PShiKTsKKyAgICB9CisKKyAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gIW9wZXJhdG9yPT0oY29uc3RhbnQpOworICAgIH0KKworICAgIGJv
b2wgb3BlcmF0b3I+KGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAorICAgIHsg
CisgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOworICAgICAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAgICByZXR1cm4gaUNvbnN0
ID4gY29uc3RhbnQuaUNvbnN0OworICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAg
cmV0dXJuIGZDb25zdCA+IGNvbnN0YW50LmZDb25zdDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBJbnZhbGlkIG9wZXJhdGlvbiwgaGFuZGxlZCBhdCBz
ZW1hbnRpYyBhbmFseXNpcworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcjwo
Y29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAKKyAgICAgICAgYXNz
ZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAg
ICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgIHJldHVybiBpQ29uc3QgPCBjb25zdGFudC5p
Q29uc3Q7CisgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICByZXR1cm4gZkNvbnN0
IDwgY29uc3RhbnQuZkNvbnN0OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyAgIC8vIEludmFsaWQgb3BlcmF0aW9uLCBoYW5kbGVkIGF0IHNlbWFudGljIGFuYWx5
c2lzCisgICAgICAgIH0KKyAgICB9CisKKyAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yKyhjb25z
dCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBDb25zdGFu
dFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBl
KTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5W
YWx1ZS5zZXRJQ29uc3QoaUNvbnN0ICsgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAg
IGNhc2UgRWJ0RmxvYXQ6IHJldHVyblZhbHVlLnNldEZDb25zdChmQ29uc3QgKyBjb25zdGFudC5m
Q29uc3QpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0
IG1pc3NpbmciKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAg
ICB9CisKKyAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yLShjb25zdCBDb25zdGFudFVuaW9uJiBj
b25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVl
OworICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNv
bnN0IC0gY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IHJl
dHVyblZhbHVlLnNldEZDb25zdChmQ29uc3QgLSBjb25zdGFudC5mQ29uc3QpOyBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9CisKKyAgICBDb25zdGFu
dFVuaW9uIG9wZXJhdG9yKihjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAg
ICB7IAorICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQo
dHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAg
IGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0ICogY29uc3RhbnQuaUNv
bnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IHJldHVyblZhbHVlLnNldEZDb25z
dChmQ29uc3QgKiBjb25zdGFudC5mQ29uc3QpOyBicmVhazsgCisgICAgICAgIGRlZmF1bHQ6IGFz
c2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvciUo
Y29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAKKyAgICAgICAgQ29u
c3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQu
dHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEVidEludDogcmV0
dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAlIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAg
ICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9CisKKyAgICBDb25z
dGFudFVuaW9uIG9wZXJhdG9yPj4oY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0
CisgICAgeyAKKyAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYXNz
ZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAg
ICAgICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCA+PiBjb25zdGFu
dC5pQ29uc3QpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAi
RGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0dXJuVmFs
dWU7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvcjw8KGNvbnN0IENvbnN0YW50
VW5pb24mIGNvbnN0YW50KSBjb25zdAorICAgIHsgCisgICAgICAgIENvbnN0YW50VW5pb24gcmV0
dXJuVmFsdWU7CisgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOworICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNldElD
b25zdChpQ29uc3QgPDwgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0KKworICAgIENvbnN0YW50VW5pb24gb3Bl
cmF0b3ImKGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAorICAgIHsgCisgICAg
ICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7CisgICAgICAgIGFzc2VydCh0eXBlID09IGNv
bnN0YW50LnR5cGUpOworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJ
bnQ6ICByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0ICYgY29uc3RhbnQuaUNvbnN0KTsgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2lu
ZyIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0KKwor
ICAgIENvbnN0YW50VW5pb24gb3BlcmF0b3J8KGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50
KSBjb25zdAorICAgIHsgCisgICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7CisgICAg
ICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOworICAgICAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6ICByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0IHwg
Y29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFs
c2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJl
dHVyblZhbHVlOworICAgIH0KKworICAgIENvbnN0YW50VW5pb24gb3BlcmF0b3JeKGNvbnN0IENv
bnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAorICAgIHsgCisgICAgICAgIENvbnN0YW50VW5p
b24gcmV0dXJuVmFsdWU7CisgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwor
ICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6ICByZXR1cm5WYWx1
ZS5zZXRJQ29uc3QoaUNvbnN0IF4gY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0KKworICAgIENvbnN0YW50VW5p
b24gb3BlcmF0b3ImJihjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7
IAorICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQodHlw
ZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNh
c2UgRWJ0Qm9vbDogcmV0dXJuVmFsdWUuc2V0QkNvbnN0KGJDb25zdCAmJiBjb25zdGFudC5iQ29u
c3QpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVs
dCBtaXNzaW5nIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7Cisg
ICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvcnx8KGNvbnN0IENvbnN0YW50VW5pb24m
IGNvbnN0YW50KSBjb25zdAorICAgIHsgCisgICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFs
dWU7CisgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOworICAgICAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRCb29sOiByZXR1cm5WYWx1ZS5zZXRCQ29uc3Qo
YkNvbnN0IHx8IGNvbnN0YW50LmJDb25zdCk7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiAgICAg
YXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9CisKKyAgICBUQmFzaWNUeXBlIGdldFR5cGUoKSBj
b25zdCB7IHJldHVybiB0eXBlOyB9Citwcml2YXRlOgorCisgICAgdW5pb24gIHsKKyAgICAgICAg
aW50IGlDb25zdDsgIC8vIHVzZWQgZm9yIGl2ZWMsIHNjYWxhciBpbnRzCisgICAgICAgIGJvb2wg
YkNvbnN0OyAvLyB1c2VkIGZvciBidmVjLCBzY2FsYXIgYm9vbHMKKyAgICAgICAgZmxvYXQgZkNv
bnN0OyAgIC8vIHVzZWQgZm9yIHZlYywgbWF0LCBzY2FsYXIgZmxvYXRzCisgICAgfSA7CisKKyAg
ICBUQmFzaWNUeXBlIHR5cGU7Cit9OworCisjZW5kaWYgLy8gX0NPTlNUQU5UX1VOSU9OX0lOQ0xV
REVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvRGV0ZWN0Q2FsbERlcHRoLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL0RldGVjdENhbGxEZXB0aC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmZj
MWQ1ODUyZmYyZGM2ZmFkMzMwYzc1OTEwZmMzZDU3NmY4ZmUxOQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RldGVjdENh
bGxEZXB0aC5jcHAKQEAgLTAsMCArMSwxODUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL0RldGVjdENhbGxEZXB0aC5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKKworRGV0ZWN0Q2FsbERlcHRoOjpGdW5jdGlv
bk5vZGU6OkZ1bmN0aW9uTm9kZShjb25zdCBUU3RyaW5nJiBmbmFtZSkKKyAgICA6IG5hbWUoZm5h
bWUpLAorICAgICAgdmlzaXQoUHJlVmlzaXQpCit7Cit9CisKK2NvbnN0IFRTdHJpbmcmIERldGVj
dENhbGxEZXB0aDo6RnVuY3Rpb25Ob2RlOjpnZXROYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bmFtZTsKK30KKwordm9pZCBEZXRlY3RDYWxsRGVwdGg6OkZ1bmN0aW9uTm9kZTo6YWRkQ2FsbGVl
KAorICAgIERldGVjdENhbGxEZXB0aDo6RnVuY3Rpb25Ob2RlKiBjYWxsZWUpCit7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBjYWxsZWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChj
YWxsZWVzW2ldID09IGNhbGxlZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2Fs
bGVlcy5wdXNoX2JhY2soY2FsbGVlKTsKK30KKworaW50IERldGVjdENhbGxEZXB0aDo6RnVuY3Rp
b25Ob2RlOjpkZXRlY3RDYWxsRGVwdGgoRGV0ZWN0Q2FsbERlcHRoKiBkZXRlY3RDYWxsRGVwdGgs
IGludCBkZXB0aCkKK3sKKyAgICBBU1NFUlQodmlzaXQgPT0gUHJlVmlzaXQpOworICAgIEFTU0VS
VChkZXRlY3RDYWxsRGVwdGgpOworCisgICAgaW50IG1heERlcHRoID0gZGVwdGg7CisgICAgdmlz
aXQgPSBJblZpc2l0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FsbGVlcy5zaXplKCk7
ICsraSkgeworICAgICAgICBzd2l0Y2ggKGNhbGxlZXNbaV0tPnZpc2l0KSB7CisgICAgICAgICAg
ICBjYXNlIEluVmlzaXQ6CisgICAgICAgICAgICAgICAgLy8gY3ljbGUgZGV0ZWN0ZWQsIGkuZS4s
IHJlY3Vyc2lvbiBkZXRlY3RlZC4KKyAgICAgICAgICAgICAgICByZXR1cm4ga0luZmluaXRlQ2Fs
bERlcHRoOworICAgICAgICAgICAgY2FzZSBQb3N0VmlzaXQ6CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIFByZVZpc2l0OiB7CisgICAgICAgICAgICAgICAgLy8gQ2hl
Y2sgYmVmb3JlIHdlIHJlY3Vyc2Ugc28gd2UgZG9uJ3QgZ28gdG9vIGRlcHRoCisgICAgICAgICAg
ICAgICAgaWYgKGRldGVjdENhbGxEZXB0aC0+Y2hlY2tFeGNlZWRzTWF4RGVwdGgoZGVwdGgpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVwdGg7CisgICAgICAgICAgICAgICAgaW50IGNh
bGxEZXB0aCA9IGNhbGxlZXNbaV0tPmRldGVjdENhbGxEZXB0aChkZXRlY3RDYWxsRGVwdGgsIGRl
cHRoICsgMSk7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgYWZ0ZXIgd2UgcmVjdXJzZSBzbyB3
ZSBjYW4gZXhpdCBpbW1lZGlhdGVseSBhbmQgcHJvdmlkZSBpbmZvLgorICAgICAgICAgICAgICAg
IGlmIChkZXRlY3RDYWxsRGVwdGgtPmNoZWNrRXhjZWVkc01heERlcHRoKGNhbGxEZXB0aCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgZGV0ZWN0Q2FsbERlcHRoLT5nZXRJbmZvU2luaygpLmluZm8g
PDwgIjwtIiA8PCBjYWxsZWVzW2ldLT5nZXROYW1lKCk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBjYWxsRGVwdGg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1heERl
cHRoID0gc3RkOjptYXgoY2FsbERlcHRoLCBtYXhEZXB0aCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisgICAgdmlzaXQgPSBQb3N0VmlzaXQ7CisgICAgcmV0dXJuIG1heERlcHRoOworfQorCit2b2lk
IERldGVjdENhbGxEZXB0aDo6RnVuY3Rpb25Ob2RlOjpyZXNldCgpCit7CisgICAgdmlzaXQgPSBQ
cmVWaXNpdDsKK30KKworRGV0ZWN0Q2FsbERlcHRoOjpEZXRlY3RDYWxsRGVwdGgoVEluZm9TaW5r
JiBpbmZvU2luaywgYm9vbCBsaW1pdENhbGxTdGFja0RlcHRoLCBpbnQgbWF4Q2FsbFN0YWNrRGVw
dGgpCisgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCB0cnVlLCBmYWxzZSksCisg
ICAgICBjdXJyZW50RnVuY3Rpb24oTlVMTCksCisgICAgICBpbmZvU2luayhpbmZvU2luayksCisg
ICAgICBtYXhEZXB0aChsaW1pdENhbGxTdGFja0RlcHRoID8gbWF4Q2FsbFN0YWNrRGVwdGggOiBG
dW5jdGlvbk5vZGU6OmtJbmZpbml0ZUNhbGxEZXB0aCkKK3sKK30KKworRGV0ZWN0Q2FsbERlcHRo
Ojp+RGV0ZWN0Q2FsbERlcHRoKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0
aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgZGVsZXRlIGZ1bmN0aW9uc1tpXTsKK30KKworYm9v
bCBEZXRlY3RDYWxsRGVwdGg6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdn
cmVnYXRlKiBub2RlKQoreworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7CisgICAg
ICAgIGNhc2UgRU9wUHJvdG90eXBlOgorICAgICAgICAgICAgLy8gRnVuY3Rpb24gZGVjbGFyYXRp
b24uCisgICAgICAgICAgICAvLyBEb24ndCBhZGQgRnVuY3Rpb25Ob2RlIGhlcmUgYmVjYXVzZSBu
b2RlLT5nZXROYW1lKCkgaXMgdGhlCisgICAgICAgICAgICAvLyB1bm1hbmdsZWQgZnVuY3Rpb24g
bmFtZS4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEZ1bmN0aW9uOiB7Cisg
ICAgICAgICAgICAvLyBGdW5jdGlvbiBkZWZpbml0aW9uLgorICAgICAgICAgICAgaWYgKHZpc2l0
ID09IFByZVZpc2l0KSB7CisgICAgICAgICAgICAgICAgY3VycmVudEZ1bmN0aW9uID0gZmluZEZ1
bmN0aW9uQnlOYW1lKG5vZGUtPmdldE5hbWUoKSk7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJl
bnRGdW5jdGlvbiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGdW5jdGlv
biA9IG5ldyBGdW5jdGlvbk5vZGUobm9kZS0+Z2V0TmFtZSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgZnVuY3Rpb25zLnB1c2hfYmFjayhjdXJyZW50RnVuY3Rpb24pOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZpc2l0KSB7CisgICAgICAg
ICAgICAgICAgY3VycmVudEZ1bmN0aW9uID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRU9wRnVuY3Rpb25DYWxsOiB7Cisg
ICAgICAgICAgICAvLyBGdW5jdGlvbiBjYWxsLgorICAgICAgICAgICAgaWYgKHZpc2l0ID09IFBy
ZVZpc2l0KSB7CisgICAgICAgICAgICAgICAgRnVuY3Rpb25Ob2RlKiBmdW5jID0gZmluZEZ1bmN0
aW9uQnlOYW1lKG5vZGUtPmdldE5hbWUoKSk7CisgICAgICAgICAgICAgICAgaWYgKGZ1bmMgPT0g
TlVMTCkgeworICAgICAgICAgICAgICAgICAgICBmdW5jID0gbmV3IEZ1bmN0aW9uTm9kZShub2Rl
LT5nZXROYW1lKCkpOworICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbnMucHVzaF9iYWNrKGZ1
bmMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZ1bmN0
aW9uKQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50RnVuY3Rpb24tPmFkZENhbGxlZShmdW5j
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgRGV0ZWN0Q2FsbERlcHRoOjpjaGVja0V4Y2VlZHNNYXhEZXB0aChpbnQgZGVwdGgp
Cit7CisgICAgcmV0dXJuIGRlcHRoID49IG1heERlcHRoOworfQorCit2b2lkIERldGVjdENhbGxE
ZXB0aDo6cmVzZXRGdW5jdGlvbk5vZGVzKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGZ1bmN0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBmdW5jdGlvbnNbaV0tPnJlc2V0KCk7
CisgICAgfQorfQorCitEZXRlY3RDYWxsRGVwdGg6OkVycm9yQ29kZSBEZXRlY3RDYWxsRGVwdGg6
OmRldGVjdENhbGxEZXB0aEZvckZ1bmN0aW9uKEZ1bmN0aW9uTm9kZSogZnVuYykKK3sKKyAgICBj
dXJyZW50RnVuY3Rpb24gPSBOVUxMOworICAgIHJlc2V0RnVuY3Rpb25Ob2RlcygpOworCisgICAg
aW50IG1heENhbGxEZXB0aCA9IGZ1bmMtPmRldGVjdENhbGxEZXB0aCh0aGlzLCAxKTsKKworICAg
IGlmIChtYXhDYWxsRGVwdGggPT0gRnVuY3Rpb25Ob2RlOjprSW5maW5pdGVDYWxsRGVwdGgpCisg
ICAgICAgIHJldHVybiBrRXJyb3JSZWN1cnNpb247CisKKyAgICBpZiAobWF4Q2FsbERlcHRoID49
IG1heERlcHRoKQorICAgICAgICByZXR1cm4ga0Vycm9yTWF4RGVwdGhFeGNlZWRlZDsKKworICAg
IHJldHVybiBrRXJyb3JOb25lOworfQorCitEZXRlY3RDYWxsRGVwdGg6OkVycm9yQ29kZSBEZXRl
Y3RDYWxsRGVwdGg6OmRldGVjdENhbGxEZXB0aCgpCit7CisgICAgaWYgKG1heERlcHRoICE9IEZ1
bmN0aW9uTm9kZTo6a0luZmluaXRlQ2FsbERlcHRoKSB7CisgICAgICAgIC8vIENoZWNrIGFsbCBm
dW5jdGlvbnMgYmVjYXVzZSB0aGUgZHJpdmVyIG1heSBmYWlsIG9uIHRoZW0KKyAgICAgICAgLy8g
VE9ETzogQmVmb3JlIGRldGVjdGluZ1JlY3Vyc2lvbiwgc3RyaXAgdW51c2VkIGZ1bmN0aW9ucy4K
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbnMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIEVycm9yQ29kZSBlcnJvciA9IGRldGVjdENhbGxEZXB0aEZvckZ1bmN0aW9u
KGZ1bmN0aW9uc1tpXSk7CisgICAgICAgICAgICBpZiAoZXJyb3IgIT0ga0Vycm9yTm9uZSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgICBGdW5jdGlvbk5vZGUqIG1haW4gPSBmaW5kRnVuY3Rpb25CeU5hbWUoIm1haW4oIik7Cisg
ICAgICAgIGlmIChtYWluID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4ga0Vycm9yTWlzc2lu
Z01haW47CisKKyAgICAgICAgcmV0dXJuIGRldGVjdENhbGxEZXB0aEZvckZ1bmN0aW9uKG1haW4p
OworICAgIH0KKworICAgIHJldHVybiBrRXJyb3JOb25lOworfQorCitEZXRlY3RDYWxsRGVwdGg6
OkZ1bmN0aW9uTm9kZSogRGV0ZWN0Q2FsbERlcHRoOjpmaW5kRnVuY3Rpb25CeU5hbWUoCisgICAg
Y29uc3QgVFN0cmluZyYgbmFtZSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0
aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoZnVuY3Rpb25zW2ldLT5nZXROYW1lKCkg
PT0gbmFtZSkKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbnNbaV07CisgICAgfQorICAgIHJl
dHVybiBOVUxMOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9EZXRlY3RDYWxsRGVwdGguaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RldGVjdENhbGxEZXB0aC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjVlN2YyM2QxNWY4YzE4NmYyNTczNzY4MTA3ZDI1YjI1YmFkM2EyYmIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9E
ZXRlY3RDYWxsRGVwdGguaApAQCAtMCwwICsxLDgwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aWZuZGVmIENPTVBJTEVSX0RFVEVDVF9SRUNVUlNJT05fSF8KKyNkZWZpbmUgQ09NUElMRVJfREVU
RUNUX1JFQ1VSU0lPTl9IXworCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisKKyNp
bmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVk
aWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVJbmZvLmgiCisK
K2NsYXNzIFRJbmZvU2luazsKKworLy8gVHJhdmVyc2VzIGludGVybWVkaWF0ZSB0cmVlIHRvIGRl
dGVjdCBmdW5jdGlvbiByZWN1cnNpb24uCitjbGFzcyBEZXRlY3RDYWxsRGVwdGggOiBwdWJsaWMg
VEludGVybVRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgZW51bSBFcnJvckNvZGUgeworICAgICAg
ICBrRXJyb3JNaXNzaW5nTWFpbiwKKyAgICAgICAga0Vycm9yUmVjdXJzaW9uLAorICAgICAgICBr
RXJyb3JNYXhEZXB0aEV4Y2VlZGVkLAorICAgICAgICBrRXJyb3JOb25lCisgICAgfTsKKworICAg
IERldGVjdENhbGxEZXB0aChUSW5mb1NpbmsmIGluZm9TeW5jLCBib29sIGxpbWl0Q2FsbFN0YWNr
RGVwdGgsIGludCBtYXhDYWxsU3RhY2tEZXB0aCk7CisgICAgfkRldGVjdENhbGxEZXB0aCgpOwor
CisgICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRl
Kik7CisKKyAgICBib29sIGNoZWNrRXhjZWVkc01heERlcHRoKGludCBkZXB0aCk7CisKKyAgICBF
cnJvckNvZGUgZGV0ZWN0Q2FsbERlcHRoKCk7CisKK3ByaXZhdGU6CisgICAgY2xhc3MgRnVuY3Rp
b25Ob2RlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga0luZmluaXRl
Q2FsbERlcHRoID0gSU5UX01BWDsKKworICAgICAgICBGdW5jdGlvbk5vZGUoY29uc3QgVFN0cmlu
ZyYgZm5hbWUpOworCisgICAgICAgIGNvbnN0IFRTdHJpbmcmIGdldE5hbWUoKSBjb25zdDsKKwor
ICAgICAgICAvLyBJZiBhIGZ1bmN0aW9uIGlzIGFscmVhZHkgaW4gdGhlIGNhbGxlZSBsaXN0LCB0
aGlzIGJlY29tZXMgYSBuby1vcC4KKyAgICAgICAgdm9pZCBhZGRDYWxsZWUoRnVuY3Rpb25Ob2Rl
KiBjYWxsZWUpOworCisgICAgICAgIC8vIFJldHVybnMga0luaWZpbml0eUNhbGxEZXB0aCBpZiBy
ZWN1cnNpdmUgZnVuY3Rpb24gY2FsbHMgYXJlIGRldGVjdGVkLgorICAgICAgICBpbnQgZGV0ZWN0
Q2FsbERlcHRoKERldGVjdENhbGxEZXB0aCogZGV0ZWN0Q2FsbERlcHRoLCBpbnQgZGVwdGgpOwor
CisgICAgICAgIC8vIFJlc2V0IHN0YXRlLgorICAgICAgICB2b2lkIHJlc2V0KCk7CisKKyAgICBw
cml2YXRlOgorICAgICAgICAvLyBtYW5nbGVkIGZ1bmN0aW9uIG5hbWUgaXMgdW5pcXVlLgorICAg
ICAgICBUU3RyaW5nIG5hbWU7CisKKyAgICAgICAgLy8gZnVuY3Rpb25zIHRoYXQgYXJlIGRpcmVj
dGx5IGNhbGxlZCBieSB0aGlzIGZ1bmN0aW9uLgorICAgICAgICBUVmVjdG9yPEZ1bmN0aW9uTm9k
ZSo+IGNhbGxlZXM7CisKKyAgICAgICAgVmlzaXQgdmlzaXQ7CisgICAgfTsKKworICAgIEVycm9y
Q29kZSBkZXRlY3RDYWxsRGVwdGhGb3JGdW5jdGlvbihGdW5jdGlvbk5vZGUqIGZ1bmMpOworICAg
IEZ1bmN0aW9uTm9kZSogZmluZEZ1bmN0aW9uQnlOYW1lKGNvbnN0IFRTdHJpbmcmIG5hbWUpOwor
ICAgIHZvaWQgcmVzZXRGdW5jdGlvbk5vZGVzKCk7CisKKyAgICBUSW5mb1NpbmsmIGdldEluZm9T
aW5rKCkgeyByZXR1cm4gaW5mb1Npbms7IH0KKworICAgIFRWZWN0b3I8RnVuY3Rpb25Ob2RlKj4g
ZnVuY3Rpb25zOworICAgIEZ1bmN0aW9uTm9kZSogY3VycmVudEZ1bmN0aW9uOworICAgIFRJbmZv
U2luayYgaW5mb1Npbms7CisgICAgaW50IG1heERlcHRoOworCisgICAgRGV0ZWN0Q2FsbERlcHRo
KGNvbnN0IERldGVjdENhbGxEZXB0aCYpOworICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IERldGVj
dENhbGxEZXB0aCYpOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9ERVRFQ1RfUkVDVVJTSU9O
X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9EZXRlY3REaXNjb250aW51aXR5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RldGVjdERpc2NvbnRpbnVpdHkuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjMzNGViMGJmYThiYWY1YTI0NjBhMWQyNmY3NWUwYzU1ZTEwNzgwNmMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9E
ZXRlY3REaXNjb250aW51aXR5LmNwcApAQCAtMCwwICsxLDEzOSBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisv
LyBDb250YWlucyBhbmFseXNpcyB1dGlsaXRpZXMgZm9yIGRlYWxpbmcgd2l0aCBITFNMJ3MgbGFj
ayBvZiBzdXBwb3J0IGZvcgorLy8gdGhlIHVzZSBvZiBpbnRyaW5zaWMgZnVuY3Rpb25zIHdoaWNo
IChpbXBsaWNpdGx5IG9yIGV4cGxpY2l0bHkpIGNvbXB1dGUKKy8vIGdyYWRpZW50cyBvZiBmdW5j
dGlvbnMgd2l0aCBkaXNjb250aW51aXRpZXMuIAorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvRGV0ZWN0RGlzY29udGludWl0eS5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9QYXJzZUNvbnRleHQuaCIKKworbmFtZXNwYWNlIHNoCit7Citib29sIERldGVjdExv
b3BEaXNjb250aW51aXR5Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBtTG9v
cERlcHRoID0gMDsKKyAgICBtTG9vcERpc2NvbnRpbnVpdHkgPSBmYWxzZTsKKyAgICBub2RlLT50
cmF2ZXJzZSh0aGlzKTsKKyAgICByZXR1cm4gbUxvb3BEaXNjb250aW51aXR5OworfQorCitib29s
IERldGVjdExvb3BEaXNjb250aW51aXR5Ojp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1M
b29wICpsb29wKQoreworICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICB7CisgICAgICAg
ICsrbUxvb3BEZXB0aDsKKyAgICB9CisgICAgZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZpc2l0KQor
ICAgIHsKKyAgICAgICAgLS1tTG9vcERlcHRoOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIERldGVjdExvb3BEaXNjb250aW51aXR5Ojp2aXNpdEJyYW5jaChWaXNpdCB2aXNp
dCwgVEludGVybUJyYW5jaCAqbm9kZSkKK3sKKyAgICBpZiAobUxvb3BEaXNjb250aW51aXR5KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbUxvb3BEZXB0
aCkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHN3aXRjaCAobm9k
ZS0+Z2V0Rmxvd09wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BLaWxsOgorICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRU9wQnJlYWs6CisgICAgICBjYXNlIEVPcENvbnRpbnVlOgorICAgICAg
Y2FzZSBFT3BSZXR1cm46CisgICAgICAgIG1Mb29wRGlzY29udGludWl0eSA9IHRydWU7CisgICAg
ICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gIW1Mb29wRGlzY29udGludWl0eTsKK30KKworYm9vbCBEZXRlY3RMb29wRGlzY29udGlu
dWl0eTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUp
Cit7CisgICAgcmV0dXJuICFtTG9vcERpc2NvbnRpbnVpdHk7Cit9CisKK2Jvb2wgY29udGFpbnNM
b29wRGlzY29udGludWl0eShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBEZXRlY3RMb29wRGlz
Y29udGludWl0eSBkZXRlY3RMb29wRGlzY29udGludWl0eTsKKyAgICByZXR1cm4gZGV0ZWN0TG9v
cERpc2NvbnRpbnVpdHkudHJhdmVyc2Uobm9kZSk7Cit9CisKK2Jvb2wgRGV0ZWN0R3JhZGllbnRP
cGVyYXRpb246OnRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIG1HcmFkaWVudE9w
ZXJhdGlvbiA9IGZhbHNlOworICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOworICAgIHJldHVybiBt
R3JhZGllbnRPcGVyYXRpb247Cit9CisKK2Jvb2wgRGV0ZWN0R3JhZGllbnRPcGVyYXRpb246OnZp
c2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9kZSkKK3sKKyAgICBpZiAobUdy
YWRpZW50T3BlcmF0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7CisgICAgICBjYXNlIEVPcERGZHg6Cisg
ICAgICBjYXNlIEVPcERGZHk6CisgICAgICAgIG1HcmFkaWVudE9wZXJhdGlvbiA9IHRydWU7Cisg
ICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gIW1HcmFk
aWVudE9wZXJhdGlvbjsKK30KKworYm9vbCBEZXRlY3RHcmFkaWVudE9wZXJhdGlvbjo6dmlzaXRB
Z2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUpCit7CisgICAgaWYg
KG1HcmFkaWVudE9wZXJhdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBpZiAobm9kZS0+Z2V0T3AoKSA9PSBFT3BGdW5jdGlvbkNhbGwpCisgICAgeworICAg
ICAgICBpZiAoIW5vZGUtPmlzVXNlckRlZmluZWQoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
VFN0cmluZyBuYW1lID0gVEZ1bmN0aW9uOjp1bm1hbmdsZU5hbWUobm9kZS0+Z2V0TmFtZSgpKTsK
KworICAgICAgICAgICAgaWYgKG5hbWUgPT0gInRleHR1cmUyRCIgfHwKKyAgICAgICAgICAgICAg
ICBuYW1lID09ICJ0ZXh0dXJlMkRQcm9qIiB8fAorICAgICAgICAgICAgICAgIG5hbWUgPT0gInRl
eHR1cmVDdWJlIikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtR3JhZGllbnRPcGVy
YXRpb24gPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgLy8gV2hlbiBhIHVzZXIgZGVmaW5lZCBmdW5jdGlvbiBpcyBj
YWxsZWQsIHdlIGhhdmUgdG8KKyAgICAgICAgICAgIC8vIGNvbnNlcnZhdGl2ZWx5IGFzc3VtZSBp
dCB0byBjb250YWluIGdyYWRpZW50IG9wZXJhdGlvbnMKKyAgICAgICAgICAgIG1HcmFkaWVudE9w
ZXJhdGlvbiA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gIW1HcmFkaWVu
dE9wZXJhdGlvbjsKK30KKworYm9vbCBjb250YWluc0dyYWRpZW50T3BlcmF0aW9uKFRJbnRlcm1O
b2RlICpub2RlKQoreworICAgIERldGVjdEdyYWRpZW50T3BlcmF0aW9uIGRldGVjdEdyYWRpZW50
T3BlcmF0aW9uOworICAgIHJldHVybiBkZXRlY3RHcmFkaWVudE9wZXJhdGlvbi50cmF2ZXJzZShu
b2RlKTsKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL0RldGVjdERpc2NvbnRpbnVpdHkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RldGVjdERpc2NvbnRpbnVpdHkuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4xZGQ4YmU5MjMzNTljM2ZlNmRhYzk0ZjUyNzI2MGMzMzViMzMxMzkxCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvRGV0ZWN0RGlzY29udGludWl0eS5oCkBAIC0wLDAgKzEsNTIgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
Ly8gQ29udGFpbnMgYW5hbHlzaXMgdXRpbGl0aWVzIGZvciBkZWFsaW5nIHdpdGggSExTTCdzIGxh
Y2sgb2Ygc3VwcG9ydCBmb3IKKy8vIHRoZSB1c2Ugb2YgaW50cmluc2ljIGZ1bmN0aW9ucyB3aGlj
aCAoaW1wbGljaXRseSBvciBleHBsaWNpdGx5KSBjb21wdXRlCisvLyBncmFkaWVudHMgb2YgZnVu
Y3Rpb25zIHdpdGggZGlzY29udGludWl0aWVzLiAKKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfREVU
RUNURElTQ09OVElOVUlUWV9IXworI2RlZmluZSBDT01QSUxFUl9ERVRFQ1RESVNDT05USU5VSVRZ
X0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgorCitu
YW1lc3BhY2Ugc2gKK3sKKy8vIENoZWNrcyB3aGV0aGVyIGEgbG9vcCBjYW4gcnVuIGZvciBhIHZh
cmlhYmxlIG51bWJlciBvZiBpdGVyYXRpb25zCitjbGFzcyBEZXRlY3RMb29wRGlzY29udGludWl0
eSA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBib29sIHRyYXZl
cnNlKFRJbnRlcm1Ob2RlICpub2RlKTsKKworICBwcm90ZWN0ZWQ6CisgICAgYm9vbCB2aXNpdEJy
YW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCAqbm9kZSk7CisgICAgYm9vbCB2aXNpdExv
b3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpsb29wKTsKKyAgICBib29sIHZpc2l0QWdncmVn
YXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKTsKKworICAgIGludCBtTG9v
cERlcHRoOworICAgIGJvb2wgbUxvb3BEaXNjb250aW51aXR5OworfTsKKworYm9vbCBjb250YWlu
c0xvb3BEaXNjb250aW51aXR5KFRJbnRlcm1Ob2RlICpub2RlKTsKKworLy8gQ2hlY2tzIGZvciBp
bnRyaW5zaWMgZnVuY3Rpb25zIHdoaWNoIGNvbXB1dGUgZ3JhZGllbnRzCitjbGFzcyBEZXRlY3RH
cmFkaWVudE9wZXJhdGlvbiA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoK
KyAgICBib29sIHRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKTsKKworICBwcm90ZWN0ZWQ6Cisg
ICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUpOworICAg
IGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUp
OworCisgICAgYm9vbCBtR3JhZGllbnRPcGVyYXRpb247Cit9OworCitib29sIGNvbnRhaW5zR3Jh
ZGllbnRPcGVyYXRpb24oVEludGVybU5vZGUgKm5vZGUpOworCit9CisKKyNlbmRpZiAgIC8vIENP
TVBJTEVSX0RFVEVDVERJU0NPTlRJTlVJVFlfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RpYWdub3N0aWNzLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RpYWdub3N0aWNzLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45OTUwNmMwODQ5NDIyZmUxZGIzMjQ5YmFmYjg3NzJkYWJjNTYxMTE1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvRGlhZ25vc3RpY3MuY3BwCkBAIC0wLDAgKzEsNjMgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5oIgorCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9jb21waWxlcmRlYnVnLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9Tb3VyY2VMb2NhdGlvbi5oIgorCitURGlhZ25vc3RpY3M6OlREaWFnbm9zdGljcyhUSW5mb1Np
bmsmIGluZm9TaW5rKSA6CisgICAgbUluZm9TaW5rKGluZm9TaW5rKSwKKyAgICBtTnVtRXJyb3Jz
KDApLAorICAgIG1OdW1XYXJuaW5ncygwKQoreworfQorCitURGlhZ25vc3RpY3M6On5URGlhZ25v
c3RpY3MoKQoreworfQorCit2b2lkIFREaWFnbm9zdGljczo6d3JpdGVJbmZvKFNldmVyaXR5IHNl
dmVyaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcDo6U291cmNlTG9j
YXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJp
bmcmIHJlYXNvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJp
bmcmIHRva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmlu
ZyYgZXh0cmEpCit7CisgICAgVFByZWZpeFR5cGUgcHJlZml4ID0gRVByZWZpeE5vbmU7CisgICAg
c3dpdGNoIChzZXZlcml0eSkKKyAgICB7CisgICAgICBjYXNlIFBQX0VSUk9SOgorICAgICAgICAr
K21OdW1FcnJvcnM7CisgICAgICAgIHByZWZpeCA9IEVQcmVmaXhFcnJvcjsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIFBQX1dBUk5JTkc6CisgICAgICAgICsrbU51bVdhcm5pbmdzOworICAg
ICAgICBwcmVmaXggPSBFUHJlZml4V2FybmluZzsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZh
dWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBUSW5mb1NpbmtCYXNlJiBzaW5rID0gbUluZm9TaW5rLmluZm87CisgICAgLyogVkMrKyBmb3Jt
YXQ6IGZpbGUobGluZW51bSkgOiBlcnJvciAjOiAndG9rZW4nIDogZXh0cmFpbmZvICovCisgICAg
c2luay5wcmVmaXgocHJlZml4KTsKKyAgICBzaW5rLmxvY2F0aW9uKGxvYy5maWxlLCBsb2MubGlu
ZSk7CisgICAgc2luayA8PCAiJyIgPDwgdG9rZW4gPDwgICInIDogIiA8PCByZWFzb24gPDwgIiAi
IDw8IGV4dHJhIDw8ICJcbiI7Cit9CisKK3ZvaWQgVERpYWdub3N0aWNzOjp3cml0ZURlYnVnKGNv
bnN0IHN0ZDo6c3RyaW5nJiBzdHIpCit7CisgICAgbUluZm9TaW5rLmRlYnVnIDw8IHN0cjsKK30K
Kwordm9pZCBURGlhZ25vc3RpY3M6OnByaW50KElEIGlkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KQoreworICAgIHdyaXRlSW5mbyhzZXZlcml0eShp
ZCksIGxvYywgbWVzc2FnZShpZCksIHRleHQsICIiKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RpYWdub3N0aWNzLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGlj
cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmNiNzFiYjEyMDQyMjhhNzQ3Mzc0YTI2ZWZkODljN2M2NzJiYjU2YjgK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9EaWFnbm9zdGljcy5oCkBAIC0wLDAgKzEsNDQgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaWZuZGVmIENPTVBJTEVSX0RJQUdOT1NUSUNTX0hfCisjZGVmaW5lIENPTVBJTEVSX0RJQUdO
T1NUSUNTX0hfCisKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NC
YXNlLmgiCisKK2NsYXNzIFRJbmZvU2luazsKKworY2xhc3MgVERpYWdub3N0aWNzIDogcHVibGlj
IHBwOjpEaWFnbm9zdGljcworeworICBwdWJsaWM6CisgICAgVERpYWdub3N0aWNzKFRJbmZvU2lu
ayYgaW5mb1NpbmspOworICAgIHZpcnR1YWwgflREaWFnbm9zdGljcygpOworCisgICAgVEluZm9T
aW5rJiBpbmZvU2luaygpIHsgcmV0dXJuIG1JbmZvU2luazsgfQorCisgICAgaW50IG51bUVycm9y
cygpIGNvbnN0IHsgcmV0dXJuIG1OdW1FcnJvcnM7IH0KKyAgICBpbnQgbnVtV2FybmluZ3MoKSBj
b25zdCB7IHJldHVybiBtTnVtV2FybmluZ3M7IH0KKworICAgIHZvaWQgd3JpdGVJbmZvKFNldmVy
aXR5IHNldmVyaXR5LAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlv
biYgbG9jLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiByZWFzb24sCisg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRva2VuLAorICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHRyYSk7CisKKyAgICB2b2lkIHdyaXRlRGVidWco
Y29uc3Qgc3RkOjpzdHJpbmcmIHN0cik7CisKKyAgcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9p
ZCBwcmludChJRCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6OlNvdXJjZUxv
Y2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0
ZXh0KTsKKworICBwcml2YXRlOgorICAgIFRJbmZvU2luayYgbUluZm9TaW5rOworICAgIGludCBt
TnVtRXJyb3JzOworICAgIGludCBtTnVtV2FybmluZ3M7Cit9OworCisjZW5kaWYgIC8vIENPTVBJ
TEVSX0RJQUdOT1NUSUNTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RpcmVjdGl2ZUhhbmRsZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjY2MmM4YWU2MjQwMWJmYjM2OWVmMGY4ZWNkYTg4NWEyZGU2NDg1YjMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmNwcApAQCAtMCwwICsxLDE2MSBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0RpcmVjdGl2ZUhhbmRsZXIuaCIK
KworI2luY2x1ZGUgPHNzdHJlYW0+CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2Nv
bXBpbGVyZGVidWcuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0RpYWdub3N0aWNz
LmgiCisKK3N0YXRpYyBUQmVoYXZpb3IgZ2V0QmVoYXZpb3IoY29uc3Qgc3RkOjpzdHJpbmcmIHN0
cikKK3sKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga1JlcXVpcmUoInJlcXVpcmUiKTsK
KyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0VuYWJsZSgiZW5hYmxlIik7CisgICAgc3Rh
dGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXNhYmxlKCJkaXNhYmxlIik7CisgICAgc3RhdGljIGNv
bnN0IHN0ZDo6c3RyaW5nIGtXYXJuKCJ3YXJuIik7CisKKyAgICBpZiAoc3RyID09IGtSZXF1aXJl
KSByZXR1cm4gRUJoUmVxdWlyZTsKKyAgICBlbHNlIGlmIChzdHIgPT0ga0VuYWJsZSkgcmV0dXJu
IEVCaEVuYWJsZTsKKyAgICBlbHNlIGlmIChzdHIgPT0ga0Rpc2FibGUpIHJldHVybiBFQmhEaXNh
YmxlOworICAgIGVsc2UgaWYgKHN0ciA9PSBrV2FybikgcmV0dXJuIEVCaFdhcm47CisgICAgcmV0
dXJuIEVCaFVuZGVmaW5lZDsKK30KKworVERpcmVjdGl2ZUhhbmRsZXI6OlREaXJlY3RpdmVIYW5k
bGVyKFRFeHRlbnNpb25CZWhhdmlvciYgZXh0QmVoYXZpb3IsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVERpYWdub3N0aWNzJiBkaWFnbm9zdGljcykKKyAgICA6IG1FeHRl
bnNpb25CZWhhdmlvcihleHRCZWhhdmlvciksCisgICAgICBtRGlhZ25vc3RpY3MoZGlhZ25vc3Rp
Y3MpCit7Cit9CisKK1REaXJlY3RpdmVIYW5kbGVyOjp+VERpcmVjdGl2ZUhhbmRsZXIoKQorewor
fQorCit2b2lkIFREaXJlY3RpdmVIYW5kbGVyOjpoYW5kbGVFcnJvcihjb25zdCBwcDo6U291cmNl
TG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHN0ZDo6c3RyaW5nJiBtc2cpCit7CisgICAgbURpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlh
Z25vc3RpY3M6OlBQX0VSUk9SLCBsb2MsIG1zZywgIiIsICIiKTsKK30KKwordm9pZCBURGlyZWN0
aXZlSGFuZGxlcjo6aGFuZGxlUHJhZ21hKGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBu
YW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiB2YWx1ZSkKK3sKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga1NUREdMKCJTVERH
TCIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrT3B0aW1pemUoIm9wdGltaXplIik7
CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEZWJ1ZygiZGVidWciKTsKKyAgICBzdGF0
aWMgY29uc3Qgc3RkOjpzdHJpbmcga09uKCJvbiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0
cmluZyBrT2ZmKCJvZmYiKTsKKworICAgIGJvb2wgaW52YWxpZFZhbHVlID0gZmFsc2U7CisgICAg
aWYgKG5hbWUgPT0ga1NUREdMKQorICAgIHsKKyAgICAgICAgLy8gVGhlIFNUREdMIHByYWdtYSBp
cyB1c2VkIHRvIHJlc2VydmUgcHJhZ21hcyBmb3IgdXNlIGJ5IGZ1dHVyZQorICAgICAgICAvLyBy
ZXZpc2lvbnMgb2YgR0xTTC4gSWdub3JlIGl0LgorICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGVsc2UgaWYgKG5hbWUgPT0ga09wdGltaXplKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlID09
IGtPbikgbVByYWdtYS5vcHRpbWl6ZSA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlID09
IGtPZmYpIG1QcmFnbWEub3B0aW1pemUgPSBmYWxzZTsKKyAgICAgICAgZWxzZSBpbnZhbGlkVmFs
dWUgPSB0cnVlOworICAgIH0KKyAgICBlbHNlIGlmIChuYW1lID09IGtEZWJ1ZykKKyAgICB7Cisg
ICAgICAgIGlmICh2YWx1ZSA9PSBrT24pIG1QcmFnbWEuZGVidWcgPSB0cnVlOworICAgICAgICBl
bHNlIGlmICh2YWx1ZSA9PSBrT2ZmKSBtUHJhZ21hLmRlYnVnID0gZmFsc2U7CisgICAgICAgIGVs
c2UgaW52YWxpZFZhbHVlID0gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
bURpYWdub3N0aWNzLnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OlBQX1VOUkVDT0dOSVpFRF9QUkFH
TUEsIGxvYywgbmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaW52YWxp
ZFZhbHVlKQorICAgICAgbURpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OlBQ
X0VSUk9SLCBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHByYWdt
YSB2YWx1ZSIsIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJ29uJyBvciAn
b2ZmJyBleHBlY3RlZCIpOworfQorCit2b2lkIFREaXJlY3RpdmVIYW5kbGVyOjpoYW5kbGVFeHRl
bnNpb24oY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGJlaGF2aW9y
KQoreworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRXh0QWxsKCJhbGwiKTsKKworICAg
IFRCZWhhdmlvciBiZWhhdmlvclZhbCA9IGdldEJlaGF2aW9yKGJlaGF2aW9yKTsKKyAgICBpZiAo
YmVoYXZpb3JWYWwgPT0gRUJoVW5kZWZpbmVkKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNz
LndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OlBQX0VSUk9SLCBsb2MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImJlaGF2aW9yIiwgbmFtZSwgImludmFsaWQiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChuYW1lID09IGtFeHRBbGwpCisgICAgeworICAgICAg
ICBpZiAoYmVoYXZpb3JWYWwgPT0gRUJoUmVxdWlyZSkKKyAgICAgICAgeworICAgICAgICAgICAg
bURpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OlBQX0VSUk9SLCBsb2MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHRlbnNpb24iLCBuYW1lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IGhhdmUgJ3JlcXVpcmUnIGJl
aGF2aW9yIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYmVoYXZpb3JWYWwgPT0gRUJo
RW5hYmxlKQorICAgICAgICB7CisgICAgICAgICAgICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZvKHBw
OjpEaWFnbm9zdGljczo6UFBfRVJST1IsIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImV4dGVuc2lvbiIsIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJjYW5ub3QgaGF2ZSAnZW5hYmxlJyBiZWhhdmlvciIpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChURXh0ZW5zaW9uQmVoYXZpb3I6
Oml0ZXJhdG9yIGl0ZXIgPSBtRXh0ZW5zaW9uQmVoYXZpb3IuYmVnaW4oKTsKKyAgICAgICAgICAg
ICAgICAgaXRlciAhPSBtRXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCk7ICsraXRlcikKKyAgICAgICAg
ICAgICAgICBpdGVyLT5zZWNvbmQgPSBiZWhhdmlvclZhbDsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgVEV4dGVuc2lvbkJlaGF2aW9yOjppdGVyYXRvciBpdGVyID0g
bUV4dGVuc2lvbkJlaGF2aW9yLmZpbmQobmFtZSk7CisgICAgaWYgKGl0ZXIgIT0gbUV4dGVuc2lv
bkJlaGF2aW9yLmVuZCgpKQorICAgIHsKKyAgICAgICAgaXRlci0+c2Vjb25kID0gYmVoYXZpb3JW
YWw7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwcDo6RGlhZ25vc3RpY3M6OlNldmVy
aXR5IHNldmVyaXR5ID0gcHA6OkRpYWdub3N0aWNzOjpQUF9FUlJPUjsKKyAgICBzd2l0Y2ggKGJl
aGF2aW9yVmFsKSB7CisgICAgICBjYXNlIEVCaFJlcXVpcmU6CisgICAgICAgIHNldmVyaXR5ID0g
cHA6OkRpYWdub3N0aWNzOjpQUF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVC
aEVuYWJsZToKKyAgICAgIGNhc2UgRUJoV2FybjoKKyAgICAgIGNhc2UgRUJoRGlzYWJsZToKKyAg
ICAgICAgc2V2ZXJpdHkgPSBwcDo6RGlhZ25vc3RpY3M6OlBQX1dBUk5JTkc7CisgICAgICAgIGJy
ZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIG1EaWFnbm9zdGljcy53cml0ZUluZm8oc2V2ZXJpdHksIGxvYywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJleHRlbnNpb24iLCBuYW1lLCAiaXMgbm90IHN1cHBv
cnRlZCIpOworfQorCit2b2lkIFREaXJlY3RpdmVIYW5kbGVyOjpoYW5kbGVWZXJzaW9uKGNvbnN0
IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgdmVyc2lvbikKK3sKKyAgICBzdGF0aWMgY29uc3QgaW50IGtWZXJzaW9uID0g
MTAwOworCisgICAgaWYgKHZlcnNpb24gIT0ga1ZlcnNpb24pCisgICAgeworICAgICAgICBzdGQ6
OnN0cmluZ3N0cmVhbSBzdHJlYW07CisgICAgICAgIHN0cmVhbSA8PCB2ZXJzaW9uOworICAgICAg
ICBzdGQ6OnN0cmluZyBzdHIgPSBzdHJlYW0uc3RyKCk7CisgICAgICAgIG1EaWFnbm9zdGljcy53
cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpQUF9FUlJPUiwgbG9jLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJ2ZXJzaW9uIG51bWJlciIsIHN0ciwgIm5vdCBzdXBwb3J0ZWQiKTsK
KyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZWI1ZjA1NTQ5NDk4ODkxNWMxNGMyYzZiZmFjYWIxYWE0Y2RjZTMxZAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RpcmVj
dGl2ZUhhbmRsZXIuaApAQCAtMCwwICsxLDQ2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBD
T01QSUxFUl9ESVJFQ1RJVkVfSEFORExFUl9IXworI2RlZmluZSBDT01QSUxFUl9ESVJFQ1RJVkVf
SEFORExFUl9IXworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9FeHRlbnNpb25CZWhh
dmlvci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUHJhZ21hLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmgiCisKK2NsYXNz
IFREaWFnbm9zdGljczsKKworY2xhc3MgVERpcmVjdGl2ZUhhbmRsZXIgOiBwdWJsaWMgcHA6OkRp
cmVjdGl2ZUhhbmRsZXIKK3sKKyAgcHVibGljOgorICAgIFREaXJlY3RpdmVIYW5kbGVyKFRFeHRl
bnNpb25CZWhhdmlvciYgZXh0QmVoYXZpb3IsCisgICAgICAgICAgICAgICAgICAgICAgVERpYWdu
b3N0aWNzJiBkaWFnbm9zdGljcyk7CisgICAgdmlydHVhbCB+VERpcmVjdGl2ZUhhbmRsZXIoKTsK
KworICAgIGNvbnN0IFRQcmFnbWEmIHByYWdtYSgpIGNvbnN0IHsgcmV0dXJuIG1QcmFnbWE7IH0K
KyAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dGVuc2lvbkJlaGF2aW9yKCkgY29uc3Qg
eyByZXR1cm4gbUV4dGVuc2lvbkJlaGF2aW9yOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxl
RXJyb3IoY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtc2cpOworCisgICAgdmlydHVhbCB2b2lkIGhh
bmRsZVByYWdtYShjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKTsKKworICAgIHZpcnR1YWwg
dm9pZCBoYW5kbGVFeHRlbnNpb24oY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBiZWhhdmlv
cik7CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlVmVyc2lvbihjb25zdCBwcDo6U291cmNlTG9j
YXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmVyc2lvbik7
CisKKyAgcHJpdmF0ZToKKyAgICBUUHJhZ21hIG1QcmFnbWE7CisgICAgVEV4dGVuc2lvbkJlaGF2
aW9yJiBtRXh0ZW5zaW9uQmVoYXZpb3I7CisgICAgVERpYWdub3N0aWNzJiBtRGlhZ25vc3RpY3M7
Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX0RJUkVDVElWRV9IQU5ETEVSX0hfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9FeHRl
bnNpb25CZWhhdmlvci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvRXh0ZW5zaW9uQmVoYXZpb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YzE1OTVmYjIxMjFhOGVh
NzZiYmEyMjU3YzZmMzYzNTZlZjAwZTlkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRXh0ZW5zaW9uQmVoYXZpb3IuaApA
QCAtMCwwICsxLDM3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9FWFRFTlNJT05f
QkVIQVZJT1JfSU5DTFVERURfCisjZGVmaW5lIF9FWFRFTlNJT05fQkVIQVZJT1JfSU5DTFVERURf
CisKKyNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8c3RyaW5nPgorCit0eXBlZGVmIGVudW0KK3sK
KyAgICBFQmhSZXF1aXJlLAorICAgIEVCaEVuYWJsZSwKKyAgICBFQmhXYXJuLAorICAgIEVCaERp
c2FibGUsCisgICAgRUJoVW5kZWZpbmVkCit9IFRCZWhhdmlvcjsKKworaW5saW5lIGNvbnN0IGNo
YXIqIGdldEJlaGF2aW9yU3RyaW5nKFRCZWhhdmlvciBiKQoreworICAgIHN3aXRjaChiKQorICAg
IHsKKyAgICAgIGNhc2UgRUJoUmVxdWlyZTogcmV0dXJuICJyZXF1aXJlIjsKKyAgICAgIGNhc2Ug
RUJoRW5hYmxlOiByZXR1cm4gImVuYWJsZSI7CisgICAgICBjYXNlIEVCaFdhcm46IHJldHVybiAi
d2FybiI7CisgICAgICBjYXNlIEVCaERpc2FibGU6IHJldHVybiAiZGlzYWJsZSI7CisgICAgICBk
ZWZhdWx0OiByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKKy8vIE1hcHBpbmcgYmV0d2VlbiBleHRl
bnNpb24gbmFtZSBhbmQgYmVoYXZpb3IuCit0eXBlZGVmIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBU
QmVoYXZpb3I+IFRFeHRlbnNpb25CZWhhdmlvcjsKKworI2VuZGlmIC8vIF9FWFRFTlNJT05fVEFC
TEVfSU5DTFVERURfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9Gb3JMb29wVW5yb2xsLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljg5ZTZmMWE2MmIxYjk1OTI3NzA2MDgwMTU1YjQxZjg2N2JkNjNjNDYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Gb3JM
b29wVW5yb2xsLmNwcApAQCAtMCwwICsxLDIxNSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRm9yTG9vcFVucm9sbC5oIgorCituYW1lc3BhY2Ug
eworCitjbGFzcyBJbnRlZ2VyRm9yTG9vcFVucm9sbE1hcmtlciA6IHB1YmxpYyBUSW50ZXJtVHJh
dmVyc2VyIHsKK3B1YmxpYzoKKworICAgIHZpcnR1YWwgYm9vbCB2aXNpdExvb3AoVmlzaXQsIFRJ
bnRlcm1Mb29wKiBub2RlKQorICAgIHsKKyAgICAgICAgLy8gVGhpcyBpcyBjYWxsZWQgYWZ0ZXIg
VmFsaWRhdGVMaW1pdGF0aW9ucyBwYXNzLCBzbyBhbGwgdGhlIEFTU0VSVAorICAgICAgICAvLyBz
aG91bGQgbmV2ZXIgZmFpbC4KKyAgICAgICAgLy8gU2VlIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZh
bGlkYXRlRm9yTG9vcEluaXQoKS4KKyAgICAgICAgQVNTRVJUKG5vZGUpOworICAgICAgICBBU1NF
UlQobm9kZS0+Z2V0VHlwZSgpID09IEVMb29wRm9yKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmdl
dEluaXQoKSk7CisgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGRlY2wgPSBub2RlLT5nZXRJbml0
KCktPmdldEFzQWdncmVnYXRlKCk7CisgICAgICAgIEFTU0VSVChkZWNsICYmIGRlY2wtPmdldE9w
KCkgPT0gRU9wRGVjbGFyYXRpb24pOworICAgICAgICBUSW50ZXJtU2VxdWVuY2UmIGRlY2xTZXEg
PSBkZWNsLT5nZXRTZXF1ZW5jZSgpOworICAgICAgICBBU1NFUlQoZGVjbFNlcS5zaXplKCkgPT0g
MSk7CisgICAgICAgIFRJbnRlcm1CaW5hcnkqIGRlY2xJbml0ID0gZGVjbFNlcVswXS0+Z2V0QXNC
aW5hcnlOb2RlKCk7CisgICAgICAgIEFTU0VSVChkZWNsSW5pdCAmJiBkZWNsSW5pdC0+Z2V0T3Ao
KSA9PSBFT3BJbml0aWFsaXplKTsKKyAgICAgICAgQVNTRVJUKGRlY2xJbml0LT5nZXRMZWZ0KCkp
OworICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBkZWNsSW5pdC0+Z2V0TGVmdCgpLT5n
ZXRBc1N5bWJvbE5vZGUoKTsKKyAgICAgICAgQVNTRVJUKHN5bWJvbCk7CisgICAgICAgIFRCYXNp
Y1R5cGUgdHlwZSA9IHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCk7CisgICAgICAgIEFTU0VSVCh0eXBl
ID09IEVidEludCB8fCB0eXBlID09IEVidEZsb2F0KTsKKyAgICAgICAgaWYgKHR5cGUgPT0gRWJ0
SW50KQorICAgICAgICAgICAgbm9kZS0+c2V0VW5yb2xsRmxhZyh0cnVlKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCit9OworCit9ICAvLyBhbm9ueW1vdXMgbmFtZXBzYWNlCisKK3Zv
aWQgRm9yTG9vcFVucm9sbDo6RmlsbExvb3BJbmRleEluZm8oVEludGVybUxvb3AqIG5vZGUsIFRM
b29wSW5kZXhJbmZvJiBpbmZvKQoreworICAgIEFTU0VSVChub2RlLT5nZXRUeXBlKCkgPT0gRUxv
b3BGb3IpOworICAgIEFTU0VSVChub2RlLT5nZXRVbnJvbGxGbGFnKCkpOworCisgICAgVEludGVy
bU5vZGUqIGluaXQgPSBub2RlLT5nZXRJbml0KCk7CisgICAgQVNTRVJUKGluaXQgIT0gTlVMTCk7
CisgICAgVEludGVybUFnZ3JlZ2F0ZSogZGVjbCA9IGluaXQtPmdldEFzQWdncmVnYXRlKCk7Cisg
ICAgQVNTRVJUKChkZWNsICE9IE5VTEwpICYmIChkZWNsLT5nZXRPcCgpID09IEVPcERlY2xhcmF0
aW9uKSk7CisgICAgVEludGVybVNlcXVlbmNlJiBkZWNsU2VxID0gZGVjbC0+Z2V0U2VxdWVuY2Uo
KTsKKyAgICBBU1NFUlQoZGVjbFNlcS5zaXplKCkgPT0gMSk7CisgICAgVEludGVybUJpbmFyeSog
ZGVjbEluaXQgPSBkZWNsU2VxWzBdLT5nZXRBc0JpbmFyeU5vZGUoKTsKKyAgICBBU1NFUlQoKGRl
Y2xJbml0ICE9IE5VTEwpICYmIChkZWNsSW5pdC0+Z2V0T3AoKSA9PSBFT3BJbml0aWFsaXplKSk7
CisgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gZGVjbEluaXQtPmdldExlZnQoKS0+Z2V0QXNT
eW1ib2xOb2RlKCk7CisgICAgQVNTRVJUKHN5bWJvbCAhPSBOVUxMKTsKKyAgICBBU1NFUlQoc3lt
Ym9sLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQpOworCisgICAgaW5mby5pZCA9IHN5bWJvbC0+
Z2V0SWQoKTsKKworICAgIEFTU0VSVChkZWNsSW5pdC0+Z2V0UmlnaHQoKSAhPSBOVUxMKTsKKyAg
ICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogaW5pdE5vZGUgPSBkZWNsSW5pdC0+Z2V0UmlnaHQoKS0+
Z2V0QXNDb25zdGFudFVuaW9uKCk7CisgICAgQVNTRVJUKGluaXROb2RlICE9IE5VTEwpOworCisg
ICAgaW5mby5pbml0VmFsdWUgPSBldmFsdWF0ZUludENvbnN0YW50KGluaXROb2RlKTsKKyAgICBp
bmZvLmN1cnJlbnRWYWx1ZSA9IGluZm8uaW5pdFZhbHVlOworCisgICAgVEludGVybU5vZGUqIGNv
bmQgPSBub2RlLT5nZXRDb25kaXRpb24oKTsKKyAgICBBU1NFUlQoY29uZCAhPSBOVUxMKTsKKyAg
ICBUSW50ZXJtQmluYXJ5KiBiaW5PcCA9IGNvbmQtPmdldEFzQmluYXJ5Tm9kZSgpOworICAgIEFT
U0VSVChiaW5PcCAhPSBOVUxMKTsKKyAgICBBU1NFUlQoYmluT3AtPmdldFJpZ2h0KCkgIT0gTlVM
TCk7CisgICAgQVNTRVJUKGJpbk9wLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKSAh
PSBOVUxMKTsKKworICAgIGluZm8uaW5jcmVtZW50VmFsdWUgPSBnZXRMb29wSW5jcmVtZW50KG5v
ZGUpOworICAgIGluZm8uc3RvcFZhbHVlID0gZXZhbHVhdGVJbnRDb25zdGFudCgKKyAgICAgICAg
YmluT3AtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpKTsKKyAgICBpbmZvLm9wID0g
YmluT3AtPmdldE9wKCk7Cit9CisKK3ZvaWQgRm9yTG9vcFVucm9sbDo6U3RlcCgpCit7CisgICAg
QVNTRVJUKG1Mb29wSW5kZXhTdGFjay5zaXplKCkgPiAwKTsKKyAgICBUTG9vcEluZGV4SW5mbyYg
aW5mbyA9IG1Mb29wSW5kZXhTdGFja1ttTG9vcEluZGV4U3RhY2suc2l6ZSgpIC0gMV07CisgICAg
aW5mby5jdXJyZW50VmFsdWUgKz0gaW5mby5pbmNyZW1lbnRWYWx1ZTsKK30KKworYm9vbCBGb3JM
b29wVW5yb2xsOjpTYXRpc2ZpZXNMb29wQ29uZGl0aW9uKCkKK3sKKyAgICBBU1NFUlQobUxvb3BJ
bmRleFN0YWNrLnNpemUoKSA+IDApOworICAgIFRMb29wSW5kZXhJbmZvJiBpbmZvID0gbUxvb3BJ
bmRleFN0YWNrW21Mb29wSW5kZXhTdGFjay5zaXplKCkgLSAxXTsKKyAgICAvLyBSZWxhdGlvbmFs
IG9wZXJhdG9yIGlzIG9uZSBvZjogPiA+PSA8IDw9ID09IG9yICE9LgorICAgIHN3aXRjaCAoaW5m
by5vcCkgeworICAgICAgY2FzZSBFT3BFcXVhbDoKKyAgICAgICAgcmV0dXJuIChpbmZvLmN1cnJl
bnRWYWx1ZSA9PSBpbmZvLnN0b3BWYWx1ZSk7CisgICAgICBjYXNlIEVPcE5vdEVxdWFsOgorICAg
ICAgICByZXR1cm4gKGluZm8uY3VycmVudFZhbHVlICE9IGluZm8uc3RvcFZhbHVlKTsKKyAgICAg
IGNhc2UgRU9wTGVzc1RoYW46CisgICAgICAgIHJldHVybiAoaW5mby5jdXJyZW50VmFsdWUgPCBp
bmZvLnN0b3BWYWx1ZSk7CisgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgorICAgICAgICByZXR1
cm4gKGluZm8uY3VycmVudFZhbHVlID4gaW5mby5zdG9wVmFsdWUpOworICAgICAgY2FzZSBFT3BM
ZXNzVGhhbkVxdWFsOgorICAgICAgICByZXR1cm4gKGluZm8uY3VycmVudFZhbHVlIDw9IGluZm8u
c3RvcFZhbHVlKTsKKyAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKKyAgICAgICAgcmV0
dXJuIChpbmZvLmN1cnJlbnRWYWx1ZSA+PSBpbmZvLnN0b3BWYWx1ZSk7CisgICAgICBkZWZhdWx0
OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgRm9yTG9vcFVucm9sbDo6TmVlZHNUb1JlcGxhY2VTeW1ib2xXaXRoVmFsdWUoVEludGVy
bVN5bWJvbCogc3ltYm9sKQoreworICAgIGZvciAoVFZlY3RvcjxUTG9vcEluZGV4SW5mbz46Oml0
ZXJhdG9yIGkgPSBtTG9vcEluZGV4U3RhY2suYmVnaW4oKTsKKyAgICAgICAgIGkgIT0gbUxvb3BJ
bmRleFN0YWNrLmVuZCgpOworICAgICAgICAgKytpKSB7CisgICAgICAgIGlmIChpLT5pZCA9PSBz
eW1ib2wtPmdldElkKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitpbnQgRm9yTG9vcFVucm9sbDo6R2V0TG9vcEluZGV4VmFsdWUoVElu
dGVybVN5bWJvbCogc3ltYm9sKQoreworICAgIGZvciAoVFZlY3RvcjxUTG9vcEluZGV4SW5mbz46
Oml0ZXJhdG9yIGkgPSBtTG9vcEluZGV4U3RhY2suYmVnaW4oKTsKKyAgICAgICAgIGkgIT0gbUxv
b3BJbmRleFN0YWNrLmVuZCgpOworICAgICAgICAgKytpKSB7CisgICAgICAgIGlmIChpLT5pZCA9
PSBzeW1ib2wtPmdldElkKCkpCisgICAgICAgICAgICByZXR1cm4gaS0+Y3VycmVudFZhbHVlOwor
ICAgIH0KKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBG
b3JMb29wVW5yb2xsOjpQdXNoKFRMb29wSW5kZXhJbmZvJiBpbmZvKQoreworICAgIG1Mb29wSW5k
ZXhTdGFjay5wdXNoX2JhY2soaW5mbyk7Cit9CisKK3ZvaWQgRm9yTG9vcFVucm9sbDo6UG9wKCkK
K3sKKyAgICBtTG9vcEluZGV4U3RhY2sucG9wX2JhY2soKTsKK30KKworLy8gc3RhdGljCit2b2lk
IEZvckxvb3BVbnJvbGw6Ok1hcmtGb3JMb29wc1dpdGhJbnRlZ2VySW5kaWNlc0ZvclVucm9sbGlu
ZygKKyAgICBUSW50ZXJtTm9kZSogcm9vdCkKK3sKKyAgICBBU1NFUlQocm9vdCk7CisKKyAgICBJ
bnRlZ2VyRm9yTG9vcFVucm9sbE1hcmtlciBtYXJrZXI7CisgICAgcm9vdC0+dHJhdmVyc2UoJm1h
cmtlcik7Cit9CisKK2ludCBGb3JMb29wVW5yb2xsOjpnZXRMb29wSW5jcmVtZW50KFRJbnRlcm1M
b29wKiBub2RlKQoreworICAgIFRJbnRlcm1Ob2RlKiBleHByID0gbm9kZS0+Z2V0RXhwcmVzc2lv
bigpOworICAgIEFTU0VSVChleHByICE9IE5VTEwpOworICAgIC8vIGZvciBleHByZXNzaW9uIGhh
cyBvbmUgb2YgdGhlIGZvbGxvd2luZyBmb3JtczoKKyAgICAvLyAgICAgbG9vcF9pbmRleCsrCisg
ICAgLy8gICAgIGxvb3BfaW5kZXgtLQorICAgIC8vICAgICBsb29wX2luZGV4ICs9IGNvbnN0YW50
X2V4cHJlc3Npb24KKyAgICAvLyAgICAgbG9vcF9pbmRleCAtPSBjb25zdGFudF9leHByZXNzaW9u
CisgICAgLy8gICAgICsrbG9vcF9pbmRleAorICAgIC8vICAgICAtLWxvb3BfaW5kZXgKKyAgICAv
LyBUaGUgbGFzdCB0d28gZm9ybXMgYXJlIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHNwZWMsIGJ1dCBJ
IGFtIGFzc3VtaW5nCisgICAgLy8gaXRzIGFuIG92ZXJzaWdodC4KKyAgICBUSW50ZXJtVW5hcnkq
IHVuT3AgPSBleHByLT5nZXRBc1VuYXJ5Tm9kZSgpOworICAgIFRJbnRlcm1CaW5hcnkqIGJpbk9w
ID0gdW5PcCA/IE5VTEwgOiBleHByLT5nZXRBc0JpbmFyeU5vZGUoKTsKKworICAgIFRPcGVyYXRv
ciBvcCA9IEVPcE51bGw7CisgICAgVEludGVybUNvbnN0YW50VW5pb24qIGluY3JlbWVudE5vZGUg
PSBOVUxMOworICAgIGlmICh1bk9wICE9IE5VTEwpIHsKKyAgICAgICAgb3AgPSB1bk9wLT5nZXRP
cCgpOworICAgIH0gZWxzZSBpZiAoYmluT3AgIT0gTlVMTCkgeworICAgICAgICBvcCA9IGJpbk9w
LT5nZXRPcCgpOworICAgICAgICBBU1NFUlQoYmluT3AtPmdldFJpZ2h0KCkgIT0gTlVMTCk7Cisg
ICAgICAgIGluY3JlbWVudE5vZGUgPSBiaW5PcC0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVu
aW9uKCk7CisgICAgICAgIEFTU0VSVChpbmNyZW1lbnROb2RlICE9IE5VTEwpOworICAgIH0KKwor
ICAgIGludCBpbmNyZW1lbnQgPSAwOworICAgIC8vIFRoZSBvcGVyYXRvciBpcyBvbmUgb2Y6ICsr
IC0tICs9IC09LgorICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVt
ZW50OgorICAgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDoKKyAgICAgICAgICAgIEFTU0VSVCgo
dW5PcCAhPSBOVUxMKSAmJiAoYmluT3AgPT0gTlVMTCkpOworICAgICAgICAgICAgaW5jcmVtZW50
ID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6
CisgICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OgorICAgICAgICAgICAgQVNTRVJUKCh1bk9w
ICE9IE5VTEwpICYmIChiaW5PcCA9PSBOVUxMKSk7CisgICAgICAgICAgICBpbmNyZW1lbnQgPSAt
MTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjoKKyAgICAg
ICAgICAgIEFTU0VSVCgodW5PcCA9PSBOVUxMKSAmJiAoYmluT3AgIT0gTlVMTCkpOworICAgICAg
ICAgICAgaW5jcmVtZW50ID0gZXZhbHVhdGVJbnRDb25zdGFudChpbmNyZW1lbnROb2RlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjoKKyAgICAgICAgICAg
IEFTU0VSVCgodW5PcCA9PSBOVUxMKSAmJiAoYmluT3AgIT0gTlVMTCkpOworICAgICAgICAgICAg
aW5jcmVtZW50ID0gLSBldmFsdWF0ZUludENvbnN0YW50KGluY3JlbWVudE5vZGUpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlQoZmFsc2Up
OworICAgIH0KKworICAgIHJldHVybiBpbmNyZW1lbnQ7Cit9CisKK2ludCBGb3JMb29wVW5yb2xs
OjpldmFsdWF0ZUludENvbnN0YW50KFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKQoreworICAg
IEFTU0VSVCgobm9kZSAhPSBOVUxMKSAmJiAobm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSAh
PSBOVUxMKSk7CisgICAgcmV0dXJuIG5vZGUtPmdldElDb25zdCgwKTsKK30KKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRm9yTG9v
cFVucm9sbC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvRm9yTG9vcFVucm9sbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFmZDcwZDFmZDI1Yzk5NTQ2ODBjZDRkYWEw
Mjg1YzAwOGRlY2IwNmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Gb3JMb29wVW5yb2xsLmgKQEAgLTAsMCArMSw1MiBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfRk9STE9PUFVOUk9MTF9IXworI2Rl
ZmluZSBDT01QSUxFUl9GT1JMT09QVU5ST0xMX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL2ludGVybWVkaWF0ZS5oIgorCitzdHJ1Y3QgVExvb3BJbmRleEluZm8geworICAgIGlu
dCBpZDsKKyAgICBpbnQgaW5pdFZhbHVlOworICAgIGludCBzdG9wVmFsdWU7CisgICAgaW50IGlu
Y3JlbWVudFZhbHVlOworICAgIFRPcGVyYXRvciBvcDsKKyAgICBpbnQgY3VycmVudFZhbHVlOwor
fTsKKworY2xhc3MgRm9yTG9vcFVucm9sbCB7CitwdWJsaWM6CisgICAgRm9yTG9vcFVucm9sbCgp
IHsgfQorCisgICAgdm9pZCBGaWxsTG9vcEluZGV4SW5mbyhUSW50ZXJtTG9vcCogbm9kZSwgVExv
b3BJbmRleEluZm8mIGluZm8pOworCisgICAgLy8gVXBkYXRlIHRoZSBpbmZvLmN1cnJlbnRWYWx1
ZSBmb3IgdGhlIG5leHQgbG9vcCBpdGVyYXRpb24uCisgICAgdm9pZCBTdGVwKCk7CisKKyAgICAv
LyBSZXR1cm4gZmFsc2UgaWYgbG9vcCBjb25kaXRpb24gaXMgbm8gbG9uZ2VyIHNhdGlzZmllZC4K
KyAgICBib29sIFNhdGlzZmllc0xvb3BDb25kaXRpb24oKTsKKworICAgIC8vIENoZWNrIGlmIHRo
ZSBzeW1ib2wgaXMgdGhlIGluZGV4IG9mIGEgbG9vcCB0aGF0J3MgdW5yb2xsZWQuCisgICAgYm9v
bCBOZWVkc1RvUmVwbGFjZVN5bWJvbFdpdGhWYWx1ZShUSW50ZXJtU3ltYm9sKiBzeW1ib2wpOwor
CisgICAgLy8gUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIGEgZ2l2ZW4gbG9vcCBpbmRleCBz
eW1ib2wuCisgICAgaW50IEdldExvb3BJbmRleFZhbHVlKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCk7
CisKKyAgICB2b2lkIFB1c2goVExvb3BJbmRleEluZm8mIGluZm8pOworICAgIHZvaWQgUG9wKCk7
CisKKyAgICBzdGF0aWMgdm9pZCBNYXJrRm9yTG9vcHNXaXRoSW50ZWdlckluZGljZXNGb3JVbnJv
bGxpbmcoVEludGVybU5vZGUqIHJvb3QpOworCitwcml2YXRlOgorICAgIGludCBnZXRMb29wSW5j
cmVtZW50KFRJbnRlcm1Mb29wKiBub2RlKTsKKworICAgIGludCBldmFsdWF0ZUludENvbnN0YW50
KFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKTsKKworICAgIFRWZWN0b3I8VExvb3BJbmRleElu
Zm8+IG1Mb29wSW5kZXhTdGFjazsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSGFzaE5hbWVzLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9IYXNoTmFtZXMuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43NTEyNjViNzU5MzU3N2VjYThlYjhiNjM5MWY4ZWIwNjU4NWMxN2E4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvSGFzaE5hbWVzLmgKQEAgLTAsMCArMSwxOSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2lmbmRlZiBDT01QSUxFUl9IQVNIX05BTUVTX0hfCisjZGVmaW5lIENPTVBJTEVSX0hBU0hfTkFN
RVNfSF8KKworI2luY2x1ZGUgPG1hcD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
aW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisKKyNkZWZp
bmUgSEFTSEVEX05BTUVfUFJFRklYICJ3ZWJnbF8iCisKK3R5cGVkZWYgc3RkOjptYXA8VFBlcnNp
c3RTdHJpbmcsIFRQZXJzaXN0U3RyaW5nPiBOYW1lTWFwOworCisjZW5kaWYgIC8vIENPTVBJTEVS
X0hBU0hfTkFNRVNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL0luZm9TaW5rLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luZm9TaW5rLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZDU5NjU4
ZmY3NmM5NTc3OGY1MGQ0MTllOWE3NDNlNjMyMmM5MmE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuY3Bw
CkBAIC0wLDAgKzEsNTQgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL0luZm9TaW5rLmgiCisKK3ZvaWQgVEluZm9TaW5rQmFzZTo6cHJlZml4KFRQ
cmVmaXhUeXBlIHApIHsKKyAgICBzd2l0Y2gocCkgeworICAgICAgICBjYXNlIEVQcmVmaXhOb25l
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVByZWZpeFdhcm5pbmc6CisgICAg
ICAgICAgICBzaW5rLmFwcGVuZCgiV0FSTklORzogIik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFUHJlZml4RXJyb3I6CisgICAgICAgICAgICBzaW5rLmFwcGVuZCgiRVJST1I6
ICIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVByZWZpeEludGVybmFsRXJy
b3I6CisgICAgICAgICAgICBzaW5rLmFwcGVuZCgiSU5URVJOQUwgRVJST1I6ICIpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVByZWZpeFVuaW1wbGVtZW50ZWQ6CisgICAgICAg
ICAgICBzaW5rLmFwcGVuZCgiVU5JTVBMRU1FTlRFRDogIik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFUHJlZml4Tm90ZToKKyAgICAgICAgICAgIHNpbmsuYXBwZW5kKCJOT1RF
OiAiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
c2luay5hcHBlbmQoIlVOS09XTiBFUlJPUjogIik7CisgICAgICAgICAgICBicmVhazsKKyAgICB9
Cit9CisKK3ZvaWQgVEluZm9TaW5rQmFzZTo6bG9jYXRpb24oaW50IGZpbGUsIGludCBsaW5lKSB7
CisgICAgVFBlcnNpc3RTdHJpbmdTdHJlYW0gc3RyZWFtOworICAgIGlmIChsaW5lKQorICAgICAg
ICBzdHJlYW0gPDwgZmlsZSA8PCAiOiIgPDwgbGluZTsKKyAgICBlbHNlCisgICAgICAgIHN0cmVh
bSA8PCBmaWxlIDw8ICI6PyAiOworICAgIHN0cmVhbSA8PCAiOiAiOworCisgICAgc2luay5hcHBl
bmQoc3RyZWFtLnN0cigpKTsKK30KKwordm9pZCBUSW5mb1NpbmtCYXNlOjpsb2NhdGlvbihjb25z
dCBUU291cmNlTG9jJiBsb2MpIHsKKyAgICBsb2NhdGlvbihsb2MuZmlyc3RfZmlsZSwgbG9jLmZp
cnN0X2xpbmUpOworfQorCit2b2lkIFRJbmZvU2lua0Jhc2U6Om1lc3NhZ2UoVFByZWZpeFR5cGUg
cCwgY29uc3QgVFNvdXJjZUxvYyYgbG9jLCBjb25zdCBjaGFyKiBtKSB7CisgICAgcHJlZml4KHAp
OworICAgIGxvY2F0aW9uKGxvYyk7CisgICAgc2luay5hcHBlbmQobSk7CisgICAgc2luay5hcHBl
bmQoIlxuIik7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42OThhOGI0NTRiM2Nm
YTlkNGVkMmQwMGI4NjE2N2U4YzEzMmQxZmZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaApAQCAtMCww
ICsxLDExNiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfSU5GT1NJTktfSU5DTFVE
RURfCisjZGVmaW5lIF9JTkZPU0lOS19JTkNMVURFRF8KKworI2luY2x1ZGUgPG1hdGguaD4KKyNp
bmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbW1vbi5o
IgorCisvLyBSZXR1cm5zIHRoZSBmcmFjdGlvbmFsIHBhcnQgb2YgdGhlIGdpdmVuIGZsb2F0aW5n
LXBvaW50IG51bWJlci4KK2lubGluZSBmbG9hdCBmcmFjdGlvbmFsUGFydChmbG9hdCBmKSB7Cisg
IGZsb2F0IGludFBhcnQgPSAwLjBmOworICByZXR1cm4gbW9kZmYoZiwgJmludFBhcnQpOworfQor
CisvLworLy8gVFByZWZpeFR5cGUgaXMgdXNlZCB0byBjZW50cmFsaXplIGhvdyBpbmZvIGxvZyBt
ZXNzYWdlcyBzdGFydC4KKy8vIFNlZSBiZWxvdy4KKy8vCitlbnVtIFRQcmVmaXhUeXBlIHsKKyAg
ICBFUHJlZml4Tm9uZSwKKyAgICBFUHJlZml4V2FybmluZywKKyAgICBFUHJlZml4RXJyb3IsCisg
ICAgRVByZWZpeEludGVybmFsRXJyb3IsCisgICAgRVByZWZpeFVuaW1wbGVtZW50ZWQsCisgICAg
RVByZWZpeE5vdGUKK307CisKKy8vCisvLyBFbmNhcHN1bGF0ZSBpbmZvIGxvZ3MgZm9yIGFsbCBv
YmplY3RzIHRoYXQgaGF2ZSB0aGVtLgorLy8KKy8vIFRoZSBtZXRob2RzIGFyZSBhIGdlbmVyYWwg
c2V0IG9mIHRvb2xzIGZvciBnZXR0aW5nIGEgdmFyaWV0eSBvZgorLy8gbWVzc2FnZXMgYW5kIHR5
cGVzIGluc2VydGVkIGludG8gdGhlIGxvZy4KKy8vCitjbGFzcyBUSW5mb1NpbmtCYXNlIHsKK3B1
YmxpYzoKKyAgICBUSW5mb1NpbmtCYXNlKCkge30KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBU
PgorICAgIFRJbmZvU2lua0Jhc2UmIG9wZXJhdG9yPDwoY29uc3QgVCYgdCkgeworICAgICAgICBU
UGVyc2lzdFN0cmluZ1N0cmVhbSBzdHJlYW07CisgICAgICAgIHN0cmVhbSA8PCB0OworICAgICAg
ICBzaW5rLmFwcGVuZChzdHJlYW0uc3RyKCkpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAg
fQorICAgIC8vIE92ZXJyaWRlIDw8IG9wZXJhdG9yIGZvciBzcGVjaWZpYyB0eXBlcy4gSXQgaXMg
ZmFzdGVyIHRvIGFwcGVuZCBzdHJpbmdzCisgICAgLy8gYW5kIGNoYXJhY3RlcnMgZGlyZWN0bHkg
dG8gdGhlIHNpbmsuCisgICAgVEluZm9TaW5rQmFzZSYgb3BlcmF0b3I8PChjaGFyIGMpIHsKKyAg
ICAgICAgc2luay5hcHBlbmQoMSwgYyk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9Cisg
ICAgVEluZm9TaW5rQmFzZSYgb3BlcmF0b3I8PChjb25zdCBjaGFyKiBzdHIpIHsKKyAgICAgICAg
c2luay5hcHBlbmQoc3RyKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICBUSW5m
b1NpbmtCYXNlJiBvcGVyYXRvcjw8KGNvbnN0IFRQZXJzaXN0U3RyaW5nJiBzdHIpIHsKKyAgICAg
ICAgc2luay5hcHBlbmQoc3RyKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICBU
SW5mb1NpbmtCYXNlJiBvcGVyYXRvcjw8KGNvbnN0IFRTdHJpbmcmIHN0cikgeworICAgICAgICBz
aW5rLmFwcGVuZChzdHIuY19zdHIoKSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9Cisg
ICAgLy8gTWFrZSBzdXJlIGZsb2F0cyBhcmUgd3JpdHRlbiB3aXRoIGNvcnJlY3QgcHJlY2lzaW9u
LgorICAgIFRJbmZvU2lua0Jhc2UmIG9wZXJhdG9yPDwoZmxvYXQgZikgeworICAgICAgICAvLyBN
YWtlIHN1cmUgdGhhdCBhdCBsZWFzdCBvbmUgZGVjaW1hbCBwb2ludCBpcyB3cml0dGVuLiBJZiBh
IG51bWJlcgorICAgICAgICAvLyBkb2VzIG5vdCBoYXZlIGEgZnJhY3Rpb25hbCBwYXJ0LCB0aGUg
ZGVmYXVsdCBwcmVjaXNpb24gZm9ybWF0IGRvZXMKKyAgICAgICAgLy8gbm90IHdyaXRlIHRoZSBk
ZWNpbWFsIHBvcnRpb24gd2hpY2ggZ2V0cyBpbnRlcnByZXRlZCBhcyBpbnRlZ2VyIGJ5CisgICAg
ICAgIC8vIHRoZSBjb21waWxlci4KKyAgICAgICAgVFBlcnNpc3RTdHJpbmdTdHJlYW0gc3RyZWFt
OworICAgICAgICBpZiAoZnJhY3Rpb25hbFBhcnQoZikgPT0gMC4wZikgeworICAgICAgICAgICAg
c3RyZWFtLnByZWNpc2lvbigxKTsKKyAgICAgICAgICAgIHN0cmVhbSA8PCBzdGQ6OnNob3dwb2lu
dCA8PCBzdGQ6OmZpeGVkIDw8IGY7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdHJl
YW0udW5zZXRmKHN0ZDo6aW9zOjpmaXhlZCk7CisgICAgICAgICAgICBzdHJlYW0udW5zZXRmKHN0
ZDo6aW9zOjpzY2llbnRpZmljKTsKKyAgICAgICAgICAgIHN0cmVhbS5wcmVjaXNpb24oOCk7Cisg
ICAgICAgICAgICBzdHJlYW0gPDwgZjsKKyAgICAgICAgfQorICAgICAgICBzaW5rLmFwcGVuZChz
dHJlYW0uc3RyKCkpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIC8vIFdyaXRl
IGJvb2xlYW4gdmFsdWVzIGFzIHRoZWlyIG5hbWVzIGluc3RlYWQgb2YgaW50ZWdyYWwgdmFsdWUu
CisgICAgVEluZm9TaW5rQmFzZSYgb3BlcmF0b3I8PChib29sIGIpIHsKKyAgICAgICAgY29uc3Qg
Y2hhciogc3RyID0gYiA/ICJ0cnVlIiA6ICJmYWxzZSI7CisgICAgICAgIHNpbmsuYXBwZW5kKHN0
cik7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICB2b2lkIGVyYXNlKCkgeyBz
aW5rLmNsZWFyKCk7IH0KKyAgICBpbnQgc2l6ZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o
c2luay5zaXplKCkpOyB9CisKKyAgICBjb25zdCBUUGVyc2lzdFN0cmluZyYgc3RyKCkgY29uc3Qg
eyByZXR1cm4gc2luazsgfQorICAgIGNvbnN0IGNoYXIqIGNfc3RyKCkgY29uc3QgeyByZXR1cm4g
c2luay5jX3N0cigpOyB9CisKKyAgICB2b2lkIHByZWZpeChUUHJlZml4VHlwZSBwKTsKKyAgICB2
b2lkIGxvY2F0aW9uKGludCBmaWxlLCBpbnQgbGluZSk7CisgICAgdm9pZCBsb2NhdGlvbihjb25z
dCBUU291cmNlTG9jJiBsb2MpOworICAgIHZvaWQgbWVzc2FnZShUUHJlZml4VHlwZSBwLCBjb25z
dCBUU291cmNlTG9jJiBsb2MsIGNvbnN0IGNoYXIqIG0pOworCitwcml2YXRlOgorICAgIFRQZXJz
aXN0U3RyaW5nIHNpbms7Cit9OworCitjbGFzcyBUSW5mb1NpbmsgeworcHVibGljOgorICAgIFRJ
bmZvU2lua0Jhc2UgaW5mbzsKKyAgICBUSW5mb1NpbmtCYXNlIGRlYnVnOworICAgIFRJbmZvU2lu
a0Jhc2Ugb2JqOworfTsKKworI2VuZGlmIC8vIF9JTkZPU0lOS19JTkNMVURFRF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRp
YWxpemUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvSW5pdGlhbGl6ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGI3MjhiMjEyOTM3MTY3MDE5N2RmMWRjOGRh
YzI5ODRlZTliMjdjOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemUuY3BwCkBAIC0wLDAgKzEsNTY0IEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisvLworLy8gQ3JlYXRlIHN0cmluZ3MgdGhhdCBkZWNsYXJl
IGJ1aWx0LWluIGRlZmluaXRpb25zLCBhZGQgYnVpbHQtaW5zIHRoYXQKKy8vIGNhbm5vdCBiZSBl
eHByZXNzZWQgaW4gdGhlIGZpbGVzLCBhbmQgZXN0YWJsaXNoIG1hcHBpbmdzIGJldHdlZW4gCisv
LyBidWlsdC1pbiBmdW5jdGlvbnMgYW5kIG9wZXJhdG9ycy4KKy8vCisKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL0luaXRpYWxpemUuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvaW50ZXJtZWRpYXRlLmgiCisKK3ZvaWQgSW5zZXJ0QnVpbHRJbkZ1bmN0aW9ucyhTaFNo
YWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsIGNvbnN0IFNoQnVpbHRJblJlc291cmNl
cyAmcmVzb3VyY2VzLCBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlKQoreworICAgIFRUeXBlICpm
bG9hdDEgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAxKTsK
KyAgICBUVHlwZSAqZmxvYXQyID0gbmV3IFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2
cUdsb2JhbCwgMik7CisgICAgVFR5cGUgKmZsb2F0MyA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJw
VW5kZWZpbmVkLCBFdnFHbG9iYWwsIDMpOworICAgIFRUeXBlICpmbG9hdDQgPSBuZXcgVFR5cGUo
RWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCA0KTsKKworICAgIFRUeXBlICppbnQy
ID0gbmV3IFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDIpOworICAgIFRU
eXBlICppbnQzID0gbmV3IFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDMp
OworICAgIFRUeXBlICppbnQ0ID0gbmV3IFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFH
bG9iYWwsIDQpOworCisgICAgLy8KKyAgICAvLyBBbmdsZSBhbmQgVHJpZ29ub21ldHJpYyBGdW5j
dGlvbnMuCisgICAgLy8KKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInJh
ZGlhbnMiLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAi
cmFkaWFucyIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMs
ICJyYWRpYW5zIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
NCwgInJhZGlhbnMiLCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDEsICJkZWdyZWVzIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MiwgImRlZ3JlZXMiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQzLCAiZGVncmVlcyIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDQsICJkZWdyZWVzIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQxLCAic2luIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MiwgInNpbiIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDMsICJzaW4iLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQ0LCAic2luIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQxLCAiY29zIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MiwgImNvcyIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDMsICJjb3MiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQ0LCAiY29zIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQxLCAidGFuIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MiwgInRhbiIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMs
ICJ0YW4iLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAi
dGFuIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAi
YXNpbiIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJh
c2luIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImFz
aW4iLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiYXNp
biIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImFj
b3MiLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiYWNv
cyIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJhY29z
IiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImFjb3Mi
LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJhdGFu
IiwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQy
LCAiYXRhbiIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MywgImF0YW4iLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDQsICJhdGFuIiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJhdGFuIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImF0YW4iLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiYXRhbiIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDQsICJhdGFuIiwgZmxvYXQ0KTsKKworICAgIC8vCisgICAgLy8g
RXhwb25lbnRpYWwgRnVuY3Rpb25zLgorICAgIC8vCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDEsICJwb3ciLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDIsICJwb3ciLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJwb3ciLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJwb3ciLCBmbG9hdDQsIGZsb2F0NCk7CisK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImV4cCIsIGZsb2F0MSk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJleHAiLCBmbG9hdDIpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZXhwIiwgZmxvYXQzKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImV4cCIsIGZsb2F0NCk7CisKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImxvZyIsIGZsb2F0MSk7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJsb2ciLCBmbG9hdDIpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAibG9nIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImxvZyIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImV4cDIiLCBmbG9hdDEpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZXhwMiIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJleHAyIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImV4cDIiLCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJsb2cyIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImxvZzIiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQzLCAibG9nMiIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDQsICJsb2cyIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQxLCAic3FydCIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDIsICJzcXJ0IiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MywgInNxcnQiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQ0LCAic3FydCIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MSwgImludmVyc2VzcXJ0IiwgZmxvYXQxKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImludmVyc2VzcXJ0IiwgZmxvYXQyKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImludmVyc2VzcXJ0IiwgZmxvYXQzKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImludmVyc2VzcXJ0IiwgZmxv
YXQ0KTsKKworICAgIC8vCisgICAgLy8gQ29tbW9uIEZ1bmN0aW9ucy4KKyAgICAvLworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiYWJzIiwgZmxvYXQxKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImFicyIsIGZsb2F0Mik7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJhYnMiLCBmbG9hdDMpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiYWJzIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAic2lnbiIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJzaWduIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInNpZ24iLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAic2lnbiIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImZsb29yIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImZsb29yIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImZsb29yIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImZsb29yIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiY2VpbCIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJjZWlsIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImNlaWwiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiY2VpbCIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImZyYWN0IiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImZyYWN0IiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImZyYWN0IiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImZyYWN0IiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibW9kIiwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibW9kIiwgZmxvYXQyLCBmbG9hdDEpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAibW9kIiwgZmxvYXQzLCBmbG9h
dDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibW9kIiwgZmxvYXQ0
LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibW9kIiwg
ZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAi
bW9kIiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQ0LCAibW9kIiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDEsICJtaW4iLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDIsICJtaW4iLCBmbG9hdDIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtaW4iLCBmbG9hdDMsIGZsb2F0MSk7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJtaW4iLCBmbG9hdDQsIGZsb2F0MSk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJtaW4iLCBmbG9hdDIsIGZsb2F0
Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtaW4iLCBmbG9hdDMs
IGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJtaW4iLCBm
bG9hdDQsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwg
Im1heCIsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MiwgIm1heCIsIGZsb2F0MiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MywgIm1heCIsIGZsb2F0MywgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0NCwgIm1heCIsIGZsb2F0NCwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgIm1heCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgIm1heCIsIGZsb2F0MywgZmxvYXQzKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1heCIsIGZsb2F0NCwgZmxvYXQ0
KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiY2xhbXAiLCBmbG9h
dDEsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MiwgImNsYW1wIiwgZmxvYXQyLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDMsICJjbGFtcCIsIGZsb2F0MywgZmxvYXQxLCBmbG9hdDEpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiY2xhbXAiLCBmbG9hdDQsIGZsb2F0
MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImNsYW1w
IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDMsICJjbGFtcCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiY2xhbXAiLCBmbG9hdDQsIGZsb2F0NCwgZmxvYXQ0
KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibWl4IiwgZmxvYXQx
LCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIs
ICJtaXgiLCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MywgIm1peCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDEpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibWl4IiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0
MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJtaXgiLCBmbG9hdDIs
IGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0Mywg
Im1peCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQ0LCAibWl4IiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7CisKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInN0ZXAiLCBmbG9hdDEsIGZsb2F0MSk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJzdGVwIiwgZmxvYXQyLCBmbG9h
dDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAic3RlcCIsIGZsb2F0
MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInN0ZXAi
LCBmbG9hdDQsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIs
ICJzdGVwIiwgZmxvYXQxLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQzLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0NCwgInN0ZXAiLCBmbG9hdDEsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInNtb290aHN0ZXAiLCBmbG9hdDEsIGZsb2F0MSwgZmxv
YXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInNtb290aHN0ZXAi
LCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MywgInNtb290aHN0ZXAiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInNtb290aHN0ZXAiLCBmbG9hdDQsIGZsb2F0
NCwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInNtb290
aHN0ZXAiLCBmbG9hdDEsIGZsb2F0MSwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MywgInNtb290aHN0ZXAiLCBmbG9hdDEsIGZsb2F0MSwgZmxvYXQzKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInNtb290aHN0ZXAiLCBmbG9hdDEs
IGZsb2F0MSwgZmxvYXQ0KTsKKworICAgIC8vCisgICAgLy8gR2VvbWV0cmljIEZ1bmN0aW9ucy4K
KyAgICAvLworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibGVuZ3RoIiwg
ZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImxlbmd0aCIs
IGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJsZW5ndGgi
LCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibGVuZ3Ro
IiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZGlz
dGFuY2UiLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDEsICJkaXN0YW5jZSIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MSwgImRpc3RhbmNlIiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZGlzdGFuY2UiLCBmbG9hdDQsIGZsb2F0NCk7
CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRvdCIsIGZsb2F0MSwg
ZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRvdCIsIGZs
b2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRv
dCIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MSwgImRvdCIsIGZsb2F0NCwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQzLCAiY3Jvc3MiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDEsICJub3JtYWxpemUiLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibm9ybWFsaXplIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgIm5vcm1hbGl6ZSIsIGZsb2F0Myk7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJub3JtYWxpemUiLCBmbG9hdDQpOworCisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJmYWNlZm9yd2FyZCIsIGZsb2F0
MSwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQy
LCAiZmFjZWZvcndhcmQiLCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImZhY2Vmb3J3YXJkIiwgZmxvYXQzLCBmbG9hdDMsIGZs
b2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJmYWNlZm9yd2Fy
ZCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDEsICJyZWZsZWN0IiwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQyLCAicmVmbGVjdCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInJlZmxlY3QiLCBmbG9hdDMsIGZsb2F0
Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJyZWZsZWN0IiwgZmxv
YXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJy
ZWZyYWN0IiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDIsICJyZWZyYWN0IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0MSk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJyZWZyYWN0IiwgZmxvYXQzLCBmbG9h
dDMsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJyZWZy
YWN0IiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0MSk7CisKKyAgICBUVHlwZSAqbWF0MiA9IG5ldyBU
VHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDIsIHRydWUpOworICAgIFRU
eXBlICptYXQzID0gbmV3IFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwg
MywgdHJ1ZSk7CisgICAgVFR5cGUgKm1hdDQgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVm
aW5lZCwgRXZxR2xvYmFsLCA0LCB0cnVlKTsKKworICAgIC8vCisgICAgLy8gTWF0cml4IEZ1bmN0
aW9ucy4KKyAgICAvLworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4obWF0MiwgIm1hdHJp
eENvbXBNdWx0IiwgbWF0MiwgbWF0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbiht
YXQzLCAibWF0cml4Q29tcE11bHQiLCBtYXQzLCBtYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKG1hdDQsICJtYXRyaXhDb21wTXVsdCIsIG1hdDQsIG1hdDQpOworCisgICAgVFR5
cGUgKmJvb2wxID0gbmV3IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAx
KTsKKyAgICBUVHlwZSAqYm9vbDIgPSBuZXcgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBF
dnFHbG9iYWwsIDIpOworICAgIFRUeXBlICpib29sMyA9IG5ldyBUVHlwZShFYnRCb29sLCBFYnBV
bmRlZmluZWQsIEV2cUdsb2JhbCwgMyk7CisgICAgVFR5cGUgKmJvb2w0ID0gbmV3IFRUeXBlKEVi
dEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCA0KTsKKworICAgIC8vCisgICAgLy8gVmVj
dG9yIHJlbGF0aW9uYWwgZnVuY3Rpb25zLgorICAgIC8vCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihib29sMiwgImxlc3NUaGFuIiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJsZXNzVGhhbiIsIGZsb2F0MywgZmxvYXQzKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAibGVzc1RoYW4iLCBmbG9hdDQsIGZs
b2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAibGVzc1RoYW4i
LCBpbnQyLCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAibGVz
c1RoYW4iLCBpbnQzLCBpbnQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0
LCAibGVzc1RoYW4iLCBpbnQ0LCBpbnQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oYm9vbDIsICJsZXNzVGhhbkVxdWFsIiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJsZXNzVGhhbkVxdWFsIiwgZmxvYXQzLCBmbG9hdDMp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJsZXNzVGhhbkVxdWFsIiwg
ZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwg
Imxlc3NUaGFuRXF1YWwiLCBpbnQyLCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGJvb2wzLCAibGVzc1RoYW5FcXVhbCIsIGludDMsIGludDMpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oYm9vbDQsICJsZXNzVGhhbkVxdWFsIiwgaW50NCwgaW50NCk7CisKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZ3JlYXRlclRoYW4iLCBmbG9hdDIs
IGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImdyZWF0ZXJU
aGFuIiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9v
bDQsICJncmVhdGVyVGhhbiIsIGZsb2F0NCwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oYm9vbDIsICJncmVhdGVyVGhhbiIsIGludDIsIGludDIpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJncmVhdGVyVGhhbiIsIGludDMsIGludDMpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJncmVhdGVyVGhhbiIsIGludDQs
IGludDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImdyZWF0ZXJU
aGFuRXF1YWwiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihib29sMywgImdyZWF0ZXJUaGFuRXF1YWwiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImdyZWF0ZXJUaGFuRXF1YWwiLCBmbG9hdDQsIGZs
b2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZ3JlYXRlclRo
YW5FcXVhbCIsIGludDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9v
bDMsICJncmVhdGVyVGhhbkVxdWFsIiwgaW50MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihib29sNCwgImdyZWF0ZXJUaGFuRXF1YWwiLCBpbnQ0LCBpbnQ0KTsKKworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJlcXVhbCIsIGZsb2F0MiwgZmxvYXQy
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZXF1YWwiLCBmbG9hdDMs
IGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImVxdWFsIiwg
ZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwg
ImVxdWFsIiwgaW50MiwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29s
MywgImVxdWFsIiwgaW50MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihi
b29sNCwgImVxdWFsIiwgaW50NCwgaW50NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGJvb2wyLCAiZXF1YWwiLCBib29sMiwgYm9vbDIpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oYm9vbDMsICJlcXVhbCIsIGJvb2wzLCBib29sMyk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihib29sNCwgImVxdWFsIiwgYm9vbDQsIGJvb2w0KTsKKworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJub3RFcXVhbCIsIGZsb2F0MiwgZmxvYXQyKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAibm90RXF1YWwiLCBmbG9hdDMs
IGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgIm5vdEVxdWFs
IiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29s
MiwgIm5vdEVxdWFsIiwgaW50MiwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihib29sMywgIm5vdEVxdWFsIiwgaW50MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihib29sNCwgIm5vdEVxdWFsIiwgaW50NCwgaW50NCk7CisKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAibm90RXF1YWwiLCBib29sMiwgYm9vbDIpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJub3RFcXVhbCIsIGJvb2wzLCBib29sMyk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgIm5vdEVxdWFsIiwgYm9vbDQs
IGJvb2w0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDEsICJhbnkiLCBi
b29sMik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMSwgImFueSIsIGJvb2wz
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wxLCAiYW55IiwgYm9vbDQpOwor
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMSwgImFsbCIsIGJvb2wyKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wxLCAiYWxsIiwgYm9vbDMpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDEsICJhbGwiLCBib29sNCk7CisKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAibm90IiwgYm9vbDIpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJub3QiLCBib29sMyk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihib29sNCwgIm5vdCIsIGJvb2w0KTsKKworICAgIFRUeXBlICpzYW1wbGVy
MkQgPSBuZXcgVFR5cGUoRWJ0U2FtcGxlcjJELCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMSk7
CisgICAgVFR5cGUgKnNhbXBsZXJDdWJlID0gbmV3IFRUeXBlKEVidFNhbXBsZXJDdWJlLCBFYnBV
bmRlZmluZWQsIEV2cUdsb2JhbCwgMSk7CisKKyAgICAvLworICAgIC8vIFRleHR1cmUgRnVuY3Rp
b25zIGZvciBHTFNMIEVTIDEuMAorICAgIC8vCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDQsICJ0ZXh0dXJlMkQiLCBzYW1wbGVyMkQsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlcjJELCBmbG9h
dDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUHJv
aiIsIHNhbXBsZXIyRCwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0NCwgInRleHR1cmVDdWJlIiwgc2FtcGxlckN1YmUsIGZsb2F0Myk7CisKKyAgICBpZiAocmVz
b3VyY2VzLk9FU19FR0xfaW1hZ2VfZXh0ZXJuYWwpCisgICAgeworICAgICAgICBUVHlwZSAqc2Ft
cGxlckV4dGVybmFsT0VTID0gbmV3IFRUeXBlKEVidFNhbXBsZXJFeHRlcm5hbE9FUywgRWJwVW5k
ZWZpbmVkLCBFdnFHbG9iYWwsIDEpOworCisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQ0LCAidGV4dHVyZTJEIiwgc2FtcGxlckV4dGVybmFsT0VTLCBmbG9hdDIpOworICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFByb2oiLCBz
YW1wbGVyRXh0ZXJuYWxPRVMsIGZsb2F0Myk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXJFeHRlcm5hbE9FUywgZmxvYXQ0
KTsKKyAgICB9CisKKyAgICBpZiAocmVzb3VyY2VzLkFSQl90ZXh0dXJlX3JlY3RhbmdsZSkKKyAg
ICB7CisgICAgICAgIFRUeXBlICpzYW1wbGVyMkRSZWN0ID0gbmV3IFRUeXBlKEVidFNhbXBsZXIy
RFJlY3QsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAxKTsKKworICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFJlY3QiLCBzYW1wbGVyMkRSZWN0LCBm
bG9hdDIpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1
cmUyRFJlY3RQcm9qIiwgc2FtcGxlcjJEUmVjdCwgZmxvYXQzKTsKKyAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRSZWN0UHJvaiIsIHNhbXBsZXIyRFJl
Y3QsIGZsb2F0NCk7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVS
KQorICAgIHsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0
dXJlMkQiLCBzYW1wbGVyMkQsIGZsb2F0MiwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlcjJELCBmbG9hdDMs
IGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4
dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQ0LCBmbG9hdDEpOworICAgICAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmVDdWJlIiwgc2FtcGxlckN1YmUsIGZs
b2F0MywgZmxvYXQxKTsKKworICAgICAgICBpZiAocmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJp
dmF0aXZlcykKKyAgICAgICAgeworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDEsICJkRmR4IiwgZmxvYXQxKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQyLCAiZEZkeCIsIGZsb2F0Mik7CisgICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImRGZHgiLCBmbG9hdDMpOworICAgICAgICAgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJkRmR4IiwgZmxvYXQ0KTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkRmR5
IiwgZmxvYXQxKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQy
LCAiZEZkeSIsIGZsb2F0Mik7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MywgImRGZHkiLCBmbG9hdDMpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDQsICJkRmR5IiwgZmxvYXQ0KTsKKworICAgICAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJmd2lkdGgiLCBmbG9hdDEpOworICAgICAgICAgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJmd2lkdGgiLCBmbG9hdDIpOworICAg
ICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJmd2lkdGgiLCBmbG9h
dDMpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJmd2lk
dGgiLCBmbG9hdDQpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYodHlwZSA9PSBTSF9WRVJU
RVhfU0hBREVSKQorICAgIHsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDQsICJ0ZXh0dXJlMkRMb2QiLCBzYW1wbGVyMkQsIGZsb2F0MiwgZmxvYXQxKTsKKyAgICAgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qTG9kIiwgc2Ft
cGxlcjJELCBmbG9hdDMsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQ0LCAidGV4dHVyZTJEUHJvakxvZCIsIHNhbXBsZXIyRCwgZmxvYXQ0LCBmbG9hdDEp
OworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmVDdWJl
TG9kIiwgc2FtcGxlckN1YmUsIGZsb2F0MywgZmxvYXQxKTsKKyAgICB9CisKKyAgICAvLworICAg
IC8vIERlcHRoIHJhbmdlIGluIHdpbmRvdyBjb29yZGluYXRlcworICAgIC8vCisgICAgVEZpZWxk
TGlzdCAqZmllbGRzID0gTmV3UG9vbFRGaWVsZExpc3QoKTsKKyAgICBURmllbGQgKm5lYXIgPSBu
ZXcgVEZpZWxkKG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwSGlnaCwgRXZxR2xvYmFsLCAxKSwgTmV3
UG9vbFRTdHJpbmcoIm5lYXIiKSk7CisgICAgVEZpZWxkICpmYXIgPSBuZXcgVEZpZWxkKG5ldyBU
VHlwZShFYnRGbG9hdCwgRWJwSGlnaCwgRXZxR2xvYmFsLCAxKSwgTmV3UG9vbFRTdHJpbmcoImZh
ciIpKTsKKyAgICBURmllbGQgKmRpZmYgPSBuZXcgVEZpZWxkKG5ldyBUVHlwZShFYnRGbG9hdCwg
RWJwSGlnaCwgRXZxR2xvYmFsLCAxKSwgTmV3UG9vbFRTdHJpbmcoImRpZmYiKSk7CisgICAgZmll
bGRzLT5wdXNoX2JhY2sobmVhcik7CisgICAgZmllbGRzLT5wdXNoX2JhY2soZmFyKTsKKyAgICBm
aWVsZHMtPnB1c2hfYmFjayhkaWZmKTsKKyAgICBUU3RydWN0dXJlICpkZXB0aFJhbmdlU3RydWN0
ID0gbmV3IFRTdHJ1Y3R1cmUoTmV3UG9vbFRTdHJpbmcoImdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJz
IiksIGZpZWxkcyk7CisgICAgVFZhcmlhYmxlICpkZXB0aFJhbmdlUGFyYW1ldGVycyA9IG5ldyBU
VmFyaWFibGUoJmRlcHRoUmFuZ2VTdHJ1Y3QtPm5hbWUoKSwgZGVwdGhSYW5nZVN0cnVjdCwgdHJ1
ZSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpkZXB0aFJhbmdlUGFyYW1ldGVycyk7CisgICAg
VFZhcmlhYmxlICpkZXB0aFJhbmdlID0gbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xf
RGVwdGhSYW5nZSIpLCBUVHlwZShkZXB0aFJhbmdlU3RydWN0KSk7CisgICAgZGVwdGhSYW5nZS0+
c2V0UXVhbGlmaWVyKEV2cVVuaWZvcm0pOworICAgIHN5bWJvbFRhYmxlLmluc2VydCgqZGVwdGhS
YW5nZSk7CisKKyAgICAvLworICAgIC8vIEltcGxlbWVudGF0aW9uIGRlcGVuZGVudCBidWlsdC1p
biBjb25zdGFudHMuCisgICAgLy8KKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xf
TWF4VmVydGV4QXR0cmlicyIsIHJlc291cmNlcy5NYXhWZXJ0ZXhBdHRyaWJzKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xfTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMiLCByZXNv
dXJjZXMuTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydENv
bnN0SW50KCJnbF9NYXhWYXJ5aW5nVmVjdG9ycyIsIHJlc291cmNlcy5NYXhWYXJ5aW5nVmVjdG9y
cyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heFZlcnRleFRleHR1cmVJ
bWFnZVVuaXRzIiwgcmVzb3VyY2VzLk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xfTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0
cyIsIHJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRDb25zdEludCgiZ2xfTWF4VGV4dHVyZUltYWdlVW5pdHMiLCByZXNvdXJjZXMu
TWF4VGV4dHVyZUltYWdlVW5pdHMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KCJn
bF9NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzIiwgcmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9y
bVZlY3RvcnMpOworCisgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BFQykKKyAgICB7
CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KCJnbF9NYXhEcmF3QnVmZmVycyIs
IHJlc291cmNlcy5NYXhEcmF3QnVmZmVycyk7CisgICAgfQorfQorCit2b2lkIElkZW50aWZ5QnVp
bHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLAorICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyAmcmVzb3VyY2VzLAorICAgICAgICAg
ICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUpCit7CisgICAgLy8KKyAgICAv
LyBGaXJzdCwgaW5zZXJ0IHNvbWUgc3BlY2lhbCBidWlsdC1pbiB2YXJpYWJsZXMgdGhhdCBhcmUg
bm90IGluIAorICAgIC8vIHRoZSBidWlsdC1pbiBoZWFkZXIgZmlsZXMuCisgICAgLy8KKyAgICBz
d2l0Y2godHlwZSkgeworICAgIGNhc2UgU0hfRlJBR01FTlRfU0hBREVSOgorICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb29y
ZCIpLCAgICAgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZx
RnJhZ0Nvb3JkLCAgIDQpKSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJp
YWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJvbnRGYWNpbmciKSwgICAgICAgICAgICAgICAgICAg
ICBUVHlwZShFYnRCb29sLCAgRWJwVW5kZWZpbmVkLCBFdnFGcm9udEZhY2luZywgMSkpKTsKKyAg
ICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJn
bF9Qb2ludENvb3JkIiksICAgICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBN
ZWRpdW0sIEV2cVBvaW50Q29vcmQsICAyKSkpOworCisgICAgICAgIC8vCisgICAgICAgIC8vIElu
IENTUyBTaGFkZXJzLCBnbF9GcmFnQ29sb3IsIGdsX0ZyYWdEYXRhLCBhbmQgZ2xfTWF4RHJhd0J1
ZmZlcnMgYXJlIG5vdCBhdmFpbGFibGUuCisgICAgICAgIC8vIEluc3RlYWQsIGNzc19NaXhDb2xv
ciBhbmQgY3NzX0NvbG9yTWF0cml4IGFyZSBhdmFpbGFibGUuCisgICAgICAgIC8vCisgICAgICAg
IGlmIChzcGVjICE9IFNIX0NTU19TSEFERVJTX1NQRUMpIHsKKyAgICAgICAgICAgIHN5bWJvbFRh
YmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0NvbG9yIiks
ICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb2xv
ciwgICA0KSkpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxl
KE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnRGF0YVtnbF9NYXhEcmF3QnVmZmVyc10iKSwgVFR5cGUo
RWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0RhdGEsICAgIDQpKSk7CisgICAgICAgICAgICBp
ZiAocmVzb3VyY2VzLkVYVF9mcmFnX2RlcHRoKSB7CisgICAgICAgICAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnRGVwdGhFWFQi
KSwgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgcmVzb3VyY2VzLkZyYWdtZW50UHJlY2lzaW9u
SGlnaCA/IEVicEhpZ2ggOiBFYnBNZWRpdW0sIEV2cUZyYWdEZXB0aCwgMSkpKTsKKyAgICAgICAg
ICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbigiZ2xfRnJhZ0RlcHRoRVhUIiwg
IkdMX0VYVF9mcmFnX2RlcHRoIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJp
bmcoImNzc19NaXhDb2xvciIpLCAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJw
TWVkaXVtLCBFdnFHbG9iYWwsICAgICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmlu
c2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiY3NzX0NvbG9yTWF0cml4IiksICAg
ICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUdsb2JhbCwgICAgICA0
LCB0cnVlKSkpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNIX1ZF
UlRFWF9TSEFERVI6CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfUG9zaXRpb24iKSwgICAgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gs
IEV2cVBvc2l0aW9uLCAgICA0KSkpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBU
VmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1BvaW50U2l6ZSIpLCAgIFRUeXBlKEVidEZsb2F0
LCBFYnBNZWRpdW0sIEV2cVBvaW50U2l6ZSwgICAxKSkpOworICAgICAgICBicmVhazsKKworICAg
IGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiTGFuZ3VhZ2Ugbm90IHN1cHBvcnRlZCIpOworICAg
IH0KKworICAgIC8vCisgICAgLy8gTmV4dCwgaWRlbnRpZnkgd2hpY2ggYnVpbHQtaW5zIGZyb20g
dGhlIGFscmVhZHkgbG9hZGVkIGhlYWRlcnMgaGF2ZQorICAgIC8vIGEgbWFwcGluZyB0byBhbiBv
cGVyYXRvci4gIFRob3NlIHRoYXQgYXJlIG5vdCBpZGVudGlmaWVkIGFzIHN1Y2ggYXJlCisgICAg
Ly8gZXhwZWN0ZWQgdG8gYmUgcmVzb2x2ZWQgdGhyb3VnaCBhIGxpYnJhcnkgb2YgZnVuY3Rpb25z
LCB2ZXJzdXMgYXMKKyAgICAvLyBvcGVyYXRpb25zLgorICAgIC8vCisgICAgc3ltYm9sVGFibGUu
cmVsYXRlVG9PcGVyYXRvcigibWF0cml4Q29tcE11bHQiLCAgIEVPcE11bCk7CisKKyAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJlcXVhbCIsICAgICAgICAgICAgRU9wVmVjdG9yRXF1
YWwpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm5vdEVxdWFsIiwgICAgICAg
ICBFT3BWZWN0b3JOb3RFcXVhbCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigi
bGVzc1RoYW4iLCAgICAgICAgIEVPcExlc3NUaGFuKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVU
b09wZXJhdG9yKCJncmVhdGVyVGhhbiIsICAgICAgRU9wR3JlYXRlclRoYW4pOworICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxlc3NUaGFuRXF1YWwiLCAgICBFT3BMZXNzVGhhbkVx
dWFsKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJncmVhdGVyVGhhbkVxdWFs
IiwgRU9wR3JlYXRlclRoYW5FcXVhbCk7CisgICAgCisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9P
cGVyYXRvcigicmFkaWFucyIsICAgICAgRU9wUmFkaWFucyk7CisgICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcigiZGVncmVlcyIsICAgICAgRU9wRGVncmVlcyk7CisgICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9PcGVyYXRvcigic2luIiwgICAgICAgICAgRU9wU2luKTsKKyAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKCJjb3MiLCAgICAgICAgICBFT3BDb3MpOworICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInRhbiIsICAgICAgICAgIEVPcFRhbik7CisgICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiYXNpbiIsICAgICAgICAgRU9wQXNpbik7CisgICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiYWNvcyIsICAgICAgICAgRU9wQWNvcyk7Cisg
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiYXRhbiIsICAgICAgICAgRU9wQXRhbik7
CisKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJwb3ciLCAgICAgICAgICBFT3BQ
b3cpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImV4cDIiLCAgICAgICAgIEVP
cEV4cDIpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxvZyIsICAgICAgICAg
IEVPcExvZyk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZXhwIiwgICAgICAg
ICAgRU9wRXhwKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJsb2cyIiwgICAg
ICAgICBFT3BMb2cyKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzcXJ0Iiwg
ICAgICAgICBFT3BTcXJ0KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJpbnZl
cnNlc3FydCIsICBFT3BJbnZlcnNlU3FydCk7CisKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKCJhYnMiLCAgICAgICAgICBFT3BBYnMpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoInNpZ24iLCAgICAgICAgIEVPcFNpZ24pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoImZsb29yIiwgICAgICAgIEVPcEZsb29yKTsKKyAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKCJjZWlsIiwgICAgICAgICBFT3BDZWlsKTsKKyAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKCJmcmFjdCIsICAgICAgICBFT3BGcmFjdCk7CisgICAgc3ltYm9s
VGFibGUucmVsYXRlVG9PcGVyYXRvcigibW9kIiwgICAgICAgICAgRU9wTW9kKTsKKyAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJtaW4iLCAgICAgICAgICBFT3BNaW4pOworICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm1heCIsICAgICAgICAgIEVPcE1heCk7CisgICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiY2xhbXAiLCAgICAgICAgRU9wQ2xhbXApOwor
ICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm1peCIsICAgICAgICAgIEVPcE1peCk7
CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigic3RlcCIsICAgICAgICAgRU9wU3Rl
cCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigic21vb3Roc3RlcCIsICAgRU9w
U21vb3RoU3RlcCk7CisKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJsZW5ndGgi
LCAgICAgICBFT3BMZW5ndGgpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImRp
c3RhbmNlIiwgICAgIEVPcERpc3RhbmNlKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKCJkb3QiLCAgICAgICAgICBFT3BEb3QpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoImNyb3NzIiwgICAgICAgIEVPcENyb3NzKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVU
b09wZXJhdG9yKCJub3JtYWxpemUiLCAgICBFT3BOb3JtYWxpemUpOworICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoImZhY2Vmb3J3YXJkIiwgIEVPcEZhY2VGb3J3YXJkKTsKKyAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJyZWZsZWN0IiwgICAgICBFT3BSZWZsZWN0KTsK
KyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJyZWZyYWN0IiwgICAgICBFT3BSZWZy
YWN0KTsKKyAgICAKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhbnkiLCAgICAg
ICAgICBFT3BBbnkpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImFsbCIsICAg
ICAgICAgIEVPcEFsbCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibm90Iiwg
ICAgICAgICAgRU9wVmVjdG9yTG9naWNhbE5vdCk7CisKKyAgICAvLyBNYXAgbGFuZ3VhZ2Utc3Bl
Y2lmaWMgb3BlcmF0b3JzLgorICAgIHN3aXRjaCh0eXBlKSB7CisgICAgY2FzZSBTSF9WRVJURVhf
U0hBREVSOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjoKKyAg
ICAgICAgaWYgKHJlc291cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMpIHsKKyAgICAgICAg
ICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImRGZHgiLCAgIEVPcERGZHgpOworICAg
ICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZEZkeSIsICAgRU9wREZkeSk7
CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJmd2lkdGgiLCBFT3BG
d2lkdGgpOworCisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbigiZEZk
eCIsICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKKyAgICAgICAgICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKCJkRmR5IiwgIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZl
cyIpOworICAgICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9FeHRlbnNpb24oImZ3aWR0aCIs
ICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICAvLyBGaW5hbGx5IGFkZCByZXNv
dXJjZS1zcGVjaWZpYyB2YXJpYWJsZXMuCisgICAgc3dpdGNoKHR5cGUpIHsKKyAgICBjYXNlIFNI
X0ZSQUdNRU5UX1NIQURFUjoKKyAgICAgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BF
QykgeworICAgICAgICAgICAgLy8gU2V0IHVwIGdsX0ZyYWdEYXRhLiAgVGhlIGFycmF5IHNpemUu
CisgICAgICAgICAgICBUVHlwZSBmcmFnRGF0YShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFn
RGF0YSwgNCwgZmFsc2UsIHRydWUpOworICAgICAgICAgICAgZnJhZ0RhdGEuc2V0QXJyYXlTaXpl
KHJlc291cmNlcy5NYXhEcmF3QnVmZmVycyk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNl
cnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEYXRhIiksICAgIGZyYWdE
YXRhKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDogYnJlYWs7Cisg
ICAgfQorfQorCit2b2lkIEluaXRFeHRlbnNpb25CZWhhdmlvcihjb25zdCBTaEJ1aWx0SW5SZXNv
dXJjZXMmIHJlc291cmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFeHRlbnNpb25C
ZWhhdmlvciYgZXh0QmVoYXZpb3IpCit7CisgICAgaWYgKHJlc291cmNlcy5PRVNfc3RhbmRhcmRf
ZGVyaXZhdGl2ZXMpCisgICAgICAgIGV4dEJlaGF2aW9yWyJHTF9PRVNfc3RhbmRhcmRfZGVyaXZh
dGl2ZXMiXSA9IEVCaFVuZGVmaW5lZDsKKyAgICBpZiAocmVzb3VyY2VzLk9FU19FR0xfaW1hZ2Vf
ZXh0ZXJuYWwpCisgICAgICAgIGV4dEJlaGF2aW9yWyJHTF9PRVNfRUdMX2ltYWdlX2V4dGVybmFs
Il0gPSBFQmhVbmRlZmluZWQ7CisgICAgaWYgKHJlc291cmNlcy5BUkJfdGV4dHVyZV9yZWN0YW5n
bGUpCisgICAgICAgIGV4dEJlaGF2aW9yWyJHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUiXSA9IEVC
aFVuZGVmaW5lZDsKKyAgICBpZiAocmVzb3VyY2VzLkVYVF9kcmF3X2J1ZmZlcnMpCisgICAgICAg
IGV4dEJlaGF2aW9yWyJHTF9FWFRfZHJhd19idWZmZXJzIl0gPSBFQmhVbmRlZmluZWQ7CisgICAg
aWYgKHJlc291cmNlcy5FWFRfZnJhZ19kZXB0aCkKKyAgICAgICAgZXh0QmVoYXZpb3JbIkdMX0VY
VF9mcmFnX2RlcHRoIl0gPSBFQmhVbmRlZmluZWQ7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYjU2NDI4NjlhYTE5OWE4Y2FkOTczMDFhZWMzMDc2MDMzOWRkNTQxZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0luaXRpYWxpemUuaApAQCAtMCwwICsxLDIzIEBACisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaWZuZGVmIF9JTklUSUFMSVpFX0lOQ0xVREVEXworI2RlZmluZSBfSU5JVElBTElaRV9JTkNM
VURFRF8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29tbW9uLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvU3ltYm9sVGFibGUuaCIKKwordm9pZCBJbnNlcnRCdWlsdEluRnVuY3Rpb25zKFNo
U2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywgY29uc3QgU2hCdWlsdEluUmVzb3Vy
Y2VzICZyZXNvdXJjZXMsIFRTeW1ib2xUYWJsZSAmdGFibGUpOworCit2b2lkIElkZW50aWZ5QnVp
bHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLAorICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyYgcmVzb3VyY2VzLAorICAgICAgICAg
ICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpOworCit2b2lkIEluaXRFeHRl
bnNpb25CZWhhdmlvcihjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291cmNlcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRFeHRlbnNpb25CZWhhdmlvciYgZXh0ZW5zaW9uQmVoYXZp
b3IpOworCisjZW5kaWYgLy8gX0lOSVRJQUxJWkVfSU5DTFVERURfCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplRGxs
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0lu
aXRpYWxpemVEbGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQzZjgxNzg0ZDBhZGVjNWFiMTE2YThiZTM0ZTU3
YWRmMDYxMzNiYWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplRGxsLmNwcApAQCAtMCwwICsxLDMyIEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0
aWFsaXplRGxsLmgiCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVH
bG9iYWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplUGFyc2VD
b250ZXh0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9vc2luY2x1ZGUuaCIKKwor
Ym9vbCBJbml0UHJvY2VzcygpCit7CisgICAgaWYgKCFJbml0aWFsaXplUG9vbEluZGV4KCkpIHsK
KyAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRQcm9jZXNzKCk6IEZhaWxlZCB0byBpbml0YWxpemUg
Z2xvYmFsIHBvb2wiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICgh
SW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCkpIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIklu
aXRQcm9jZXNzKCk6IEZhaWxlZCB0byBpbml0YWxpemUgcGFyc2UgY29udGV4dCIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgRGV0
YWNoUHJvY2VzcygpCit7CisgICAgRnJlZVBhcnNlQ29udGV4dEluZGV4KCk7CisgICAgRnJlZVBv
b2xJbmRleCgpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZURsbC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZURsbC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQz
MDcwY2MzZmY3OGY3NTNhMjQ2YzQ2MDY5ODkwODZhNjNiZjA4YmEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFs
aXplRGxsLmgKQEAgLTAsMCArMSwxMyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKyNpZm5kZWYgX19J
TklUSUFMSVpFRExMX0gKKyNkZWZpbmUgX19JTklUSUFMSVpFRExMX0gKKworYm9vbCBJbml0UHJv
Y2VzcygpOwordm9pZCBEZXRhY2hQcm9jZXNzKCk7CisKKyNlbmRpZiAvLyBfX0lOSVRJQUxJWkVE
TExfSAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9Jbml0aWFsaXplR2xvYmFscy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZUdsb2JhbHMuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
NzE1OTQxNDI0NzEwNTMwODAzODYyODEzODZhOTUwNmZhYmQwNTYzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlh
bGl6ZUdsb2JhbHMuaApAQCAtMCwwICsxLDEzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZu
ZGVmIF9fSU5JVElBTElaRV9HTE9CQUxTX0lOQ0xVREVEXworI2RlZmluZSBfX0lOSVRJQUxJWkVf
R0xPQkFMU19JTkNMVURFRF8KKworYm9vbCBJbml0aWFsaXplUG9vbEluZGV4KCk7Cit2b2lkIEZy
ZWVQb29sSW5kZXgoKTsKKworI2VuZGlmIC8vIF9fSU5JVElBTElaRV9HTE9CQUxTX0lOQ0xVREVE
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5iNGRlZmFlNTY5NTNhOWFiODg4NTRmZTQ3NTNjNTdkY2U2NDAyMWQ3Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAKQEAgLTAsMCArMSw0MCBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVQYXJzZUNvbnRl
eHQuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Ivb3NpbmNsdWRlLmgiCisKK09T
X1RMU0luZGV4IEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7
CisKK2Jvb2wgSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCkKK3sKKyAgICBhc3NlcnQoR2xv
YmFsUGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpOworCisgICAgR2xv
YmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19BbGxvY1RMU0luZGV4KCk7CisgICAgcmV0dXJuIEds
b2JhbFBhcnNlQ29udGV4dEluZGV4ICE9IE9TX0lOVkFMSURfVExTX0lOREVYOworfQorCit2b2lk
IEZyZWVQYXJzZUNvbnRleHRJbmRleCgpCit7CisgICAgYXNzZXJ0KEdsb2JhbFBhcnNlQ29udGV4
dEluZGV4ICE9IE9TX0lOVkFMSURfVExTX0lOREVYKTsKKworICAgIE9TX0ZyZWVUTFNJbmRleChH
bG9iYWxQYXJzZUNvbnRleHRJbmRleCk7CisgICAgR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPSBP
U19JTlZBTElEX1RMU19JTkRFWDsKK30KKwordm9pZCBTZXRHbG9iYWxQYXJzZUNvbnRleHQoVFBh
cnNlQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBhc3NlcnQoR2xvYmFsUGFyc2VDb250ZXh0SW5k
ZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpOworICAgIE9TX1NldFRMU1ZhbHVlKEdsb2JhbFBh
cnNlQ29udGV4dEluZGV4LCBjb250ZXh0KTsKK30KKworVFBhcnNlQ29udGV4dCogR2V0R2xvYmFs
UGFyc2VDb250ZXh0KCkKK3sKKyAgICBhc3NlcnQoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggIT0g
T1NfSU5WQUxJRF9UTFNfSU5ERVgpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUUGFyc2VDb250
ZXh0Kj4oT1NfR2V0VExTVmFsdWUoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgpKTsKK30KKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
SW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJm
ZmJhYjg3ZDA3MjNhNjMyODQ2ODQzYzMwZDljYWMzMzAyNzA3NzYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFs
aXplUGFyc2VDb250ZXh0LmgKQEAgLTAsMCArMSwxNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2lmbmRlZiBfX0lOSVRJQUxJWkVfUEFSU0VfQ09OVEVYVF9JTkNMVURFRF8KKyNkZWZpbmUgX19J
TklUSUFMSVpFX1BBUlNFX0NPTlRFWFRfSU5DTFVERURfCisKK2Jvb2wgSW5pdGlhbGl6ZVBhcnNl
Q29udGV4dEluZGV4KCk7Cit2b2lkIEZyZWVQYXJzZUNvbnRleHRJbmRleCgpOworCitzdHJ1Y3Qg
VFBhcnNlQ29udGV4dDsKK2V4dGVybiB2b2lkIFNldEdsb2JhbFBhcnNlQ29udGV4dChUUGFyc2VD
b250ZXh0KiBjb250ZXh0KTsKK2V4dGVybiBUUGFyc2VDb250ZXh0KiBHZXRHbG9iYWxQYXJzZUNv
bnRleHQoKTsKKworI2VuZGlmIC8vIF9fSU5JVElBTElaRV9QQVJTRV9DT05URVhUX0lOQ0xVREVE
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvSW5pdGlhbGl6ZVZhcmlhYmxlcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplVmFyaWFibGVzLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4xMTVjNTYxYzc3NWYxNTYxNjc3ZjE5OWM2ZWMxOWMzOGFhN2Q4N2U0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5p
dGlhbGl6ZVZhcmlhYmxlcy5jcHAKQEAgLTAsMCArMSwxMTYgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVWYXJpYWJsZXMuaCIK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2NvbXBpbGVyZGVidWcuaCIKKworbmFtZXNw
YWNlCit7CisKK1RJbnRlcm1Db25zdGFudFVuaW9uKiBjb25zdHJ1Y3RGbG9hdENvbnN0VW5pb25O
b2RlKGNvbnN0IFRUeXBlJiB0eXBlKQoreworICAgIFRUeXBlIG15VHlwZSA9IHR5cGU7CisgICAg
dW5zaWduZWQgY2hhciBzaXplID0gbXlUeXBlLmdldE5vbWluYWxTaXplKCk7CisgICAgaWYgKG15
VHlwZS5pc01hdHJpeCgpKQorICAgICAgICBzaXplICo9IHNpemU7CisgICAgQ29uc3RhbnRVbmlv
biAqdSA9IG5ldyBDb25zdGFudFVuaW9uW3NpemVdOworICAgIGZvciAoaW50IGlpID0gMDsgaWkg
PCBzaXplOyArK2lpKQorICAgICAgICB1W2lpXS5zZXRGQ29uc3QoMC4wZik7CisKKyAgICBteVR5
cGUuY2xlYXJBcnJheW5lc3MoKTsKKyAgICBteVR5cGUuc2V0UXVhbGlmaWVyKEV2cUNvbnN0KTsK
KyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlv
bih1LCBteVR5cGUpOworICAgIHJldHVybiBub2RlOworfQorCitUSW50ZXJtQ29uc3RhbnRVbmlv
biogY29uc3RydWN0SW5kZXhOb2RlKGludCBpbmRleCkKK3sKKyAgICBDb25zdGFudFVuaW9uICp1
ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgdVswXS5zZXRJQ29uc3QoaW5kZXgpOworCisg
ICAgVFR5cGUgdHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QsIDEpOworICAgIFRJ
bnRlcm1Db25zdGFudFVuaW9uICpub2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHUsIHR5
cGUpOworICAgIHJldHVybiBub2RlOworfQorCit9ICAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCisK
K2Jvb2wgSW5pdGlhbGl6ZVZhcmlhYmxlczo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1BZ2dyZWdhdGUqIG5vZGUpCit7CisgICAgYm9vbCB2aXNpdENoaWxkcmVuID0gIW1Db2Rl
SW5zZXJ0ZWQ7CisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAgIGNhc2Ug
RU9wU2VxdWVuY2U6CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BGdW5jdGlvbjoKKyAg
ICAgIHsKKyAgICAgICAgLy8gRnVuY3Rpb24gZGVmaW5pdGlvbi4KKyAgICAgICAgQVNTRVJUKHZp
c2l0ID09IFByZVZpc2l0KTsKKyAgICAgICAgaWYgKG5vZGUtPmdldE5hbWUoKSA9PSAibWFpbigi
KQorICAgICAgICB7CisgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJnNlcXVlbmNlID0gbm9k
ZS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAgICAgIEFTU0VSVCgoc2VxdWVuY2Uuc2l6ZSgpID09
IDEpIHx8IChzZXF1ZW5jZS5zaXplKCkgPT0gMikpOworICAgICAgICAgICAgVEludGVybUFnZ3Jl
Z2F0ZSAqYm9keSA9IE5VTEw7CisgICAgICAgICAgICBpZiAoc2VxdWVuY2Uuc2l6ZSgpID09IDEp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9keSA9IG5ldyBUSW50ZXJtQWdncmVn
YXRlKEVPcFNlcXVlbmNlKTsKKyAgICAgICAgICAgICAgICBzZXF1ZW5jZS5wdXNoX2JhY2soYm9k
eSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgYm9keSA9IHNlcXVlbmNlWzFdLT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKGJvZHkpOworICAgICAgICAgICAgaW5zZXJ0SW5p
dENvZGUoYm9keS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgICAgICBtQ29kZUluc2VydGVkID0g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGRlZmF1bHQ6
CisgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIHJldHVybiB2aXNpdENoaWxkcmVuOworfQorCit2b2lkIEluaXRpYWxpemVWYXJpYWJsZXM6
Omluc2VydEluaXRDb2RlKFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UpCit7CisgICAgZm9yIChz
aXplX3QgaWkgPSAwOyBpaSA8IG1WYXJpYWJsZXMuc2l6ZSgpOyArK2lpKQorICAgIHsKKyAgICAg
ICAgY29uc3QgSW5pdFZhcmlhYmxlSW5mbyYgdmFySW5mbyA9IG1WYXJpYWJsZXNbaWldOworCisg
ICAgICAgIGlmICh2YXJJbmZvLnR5cGUuaXNBcnJheSgpKQorICAgICAgICB7CisgICAgICAgICAg
ICBmb3IgKGludCBpbmRleCA9IHZhckluZm8udHlwZS5nZXRBcnJheVNpemUoKSAtIDE7IGluZGV4
ID49IDA7IC0taW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVEludGVybUJp
bmFyeSAqYXNzaWduID0gbmV3IFRJbnRlcm1CaW5hcnkoRU9wQXNzaWduKTsKKyAgICAgICAgICAg
ICAgICBzZXF1ZW5jZS5pbnNlcnQoc2VxdWVuY2UuYmVnaW4oKSwgYXNzaWduKTsKKworICAgICAg
ICAgICAgICAgIFRJbnRlcm1CaW5hcnkgKmluZGV4RGlyZWN0ID0gbmV3IFRJbnRlcm1CaW5hcnko
RU9wSW5kZXhEaXJlY3QpOworICAgICAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9
IG5ldyBUSW50ZXJtU3ltYm9sKDAsIHZhckluZm8ubmFtZSwgdmFySW5mby50eXBlKTsKKyAgICAg
ICAgICAgICAgICBpbmRleERpcmVjdC0+c2V0TGVmdChzeW1ib2wpOworICAgICAgICAgICAgICAg
IFRJbnRlcm1Db25zdGFudFVuaW9uICppbmRleE5vZGUgPSBjb25zdHJ1Y3RJbmRleE5vZGUoaW5k
ZXgpOworICAgICAgICAgICAgICAgIGluZGV4RGlyZWN0LT5zZXRSaWdodChpbmRleE5vZGUpOwor
CisgICAgICAgICAgICAgICAgYXNzaWduLT5zZXRMZWZ0KGluZGV4RGlyZWN0KTsKKworICAgICAg
ICAgICAgICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICp6ZXJvQ29uc3QgPSBjb25zdHJ1Y3RGbG9h
dENvbnN0VW5pb25Ob2RlKHZhckluZm8udHlwZSk7CisgICAgICAgICAgICAgICAgYXNzaWduLT5z
ZXRSaWdodCh6ZXJvQ29uc3QpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgVEludGVybUJpbmFyeSAqYXNzaWduID0gbmV3IFRJ
bnRlcm1CaW5hcnkoRU9wQXNzaWduKTsKKyAgICAgICAgICAgIHNlcXVlbmNlLmluc2VydChzZXF1
ZW5jZS5iZWdpbigpLCBhc3NpZ24pOworICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9s
ID0gbmV3IFRJbnRlcm1TeW1ib2woMCwgdmFySW5mby5uYW1lLCB2YXJJbmZvLnR5cGUpOworICAg
ICAgICAgICAgYXNzaWduLT5zZXRMZWZ0KHN5bWJvbCk7CisgICAgICAgICAgICBUSW50ZXJtQ29u
c3RhbnRVbmlvbiAqemVyb0NvbnN0ID0gY29uc3RydWN0RmxvYXRDb25zdFVuaW9uTm9kZSh2YXJJ
bmZvLnR5cGUpOworICAgICAgICAgICAgYXNzaWduLT5zZXRSaWdodCh6ZXJvQ29uc3QpOworICAg
ICAgICB9CisKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVWYXJpYWJsZXMuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVWYXJpYWJs
ZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xY2Q2ZDdlMWI1MTFhY2U0NmFjNThkNDBkNjk1NWIzODhiNmRhNDc2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVZhcmlhYmxlcy5oCkBAIC0wLDAgKzEsNTAgQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfSU5JVElBTElaRV9WQVJJQUJMRVNfSF8K
KyNkZWZpbmUgQ09NUElMRVJfSU5JVElBTElaRV9WQVJJQUJMRVNfSF8KKworI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisKK2NsYXNzIEluaXRpYWxpemVWYXJp
YWJsZXMgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgc3RydWN0
IEluaXRWYXJpYWJsZUluZm8KKyAgICB7CisgICAgICAgIFRTdHJpbmcgbmFtZTsKKyAgICAgICAg
VFR5cGUgdHlwZTsKKworICAgICAgICBJbml0VmFyaWFibGVJbmZvKGNvbnN0IFRTdHJpbmcmIF9u
YW1lLCBjb25zdCBUVHlwZSYgX3R5cGUpCisgICAgICAgICAgICA6IG5hbWUoX25hbWUpLAorICAg
ICAgICAgICAgICB0eXBlKF90eXBlKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICB9OworICAg
IHR5cGVkZWYgVFZlY3RvcjxJbml0VmFyaWFibGVJbmZvPiBJbml0VmFyaWFibGVJbmZvTGlzdDsK
KworICAgIEluaXRpYWxpemVWYXJpYWJsZXMoY29uc3QgSW5pdFZhcmlhYmxlSW5mb0xpc3QmIHZh
cnMpCisgICAgICAgIDogbUNvZGVJbnNlcnRlZChmYWxzZSksCisgICAgICAgICAgbVZhcmlhYmxl
cyh2YXJzKQorICAgIHsKKyAgICB9CisKKyAgcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgYm9vbCB2
aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSogbm9kZSkgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVu
YXJ5KiBub2RlKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdFNlbGVj
dGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiogbm9kZSkgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCog
bm9kZSkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCcmFuY2goVmlz
aXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqIG5vZGUpIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2
aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUq
IG5vZGUpOworCisgIHByaXZhdGU6CisgICAgdm9pZCBpbnNlcnRJbml0Q29kZShUSW50ZXJtU2Vx
dWVuY2UmIHNlcXVlbmNlKTsKKworICAgIEluaXRWYXJpYWJsZUluZm9MaXN0IG1WYXJpYWJsZXM7
CisgICAgYm9vbCBtQ29kZUluc2VydGVkOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9JTklU
SUFMSVpFX1ZBUklBQkxFU19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtVHJhdmVyc2UuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtVHJhdmVyc2UuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjU1NGI4MzQwOWFjMDBhOGI3YmMzNTQ5NTcwYmQ1OThjMGM3ZTI5MGMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9JbnRlcm1UcmF2ZXJzZS5jcHAKQEAgLTAsMCArMSwyNTkgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgorCisv
LworLy8gVHJhdmVyc2UgdGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbiB0cmVlLCBhbmQK
Ky8vIGNhbGwgYSBub2RlIHR5cGUgc3BlY2lmaWMgZnVuY3Rpb24gZm9yIGVhY2ggbm9kZS4KKy8v
IERvbmUgcmVjdXJzaXZlbHkgdGhyb3VnaCB0aGUgbWVtYmVyIGZ1bmN0aW9uIFRyYXZlcnNlKCku
CisvLyBOb2RlIHR5cGVzIGNhbiBiZSBza2lwcGVkIGlmIHRoZWlyIGZ1bmN0aW9uIHRvIGNhbGwg
aXMgMCwKKy8vIGJ1dCB0aGVpciBzdWJ0cmVlIHdpbGwgc3RpbGwgYmUgdHJhdmVyc2VkLgorLy8g
Tm9kZXMgd2l0aCBjaGlsZHJlbiBjYW4gaGF2ZSB0aGVpciB3aG9sZSBzdWJ0cmVlIHNraXBwZWQK
Ky8vIGlmIHByZVZpc2l0IGlzIHR1cm5lZCBvbiBhbmQgdGhlIHR5cGUgc3BlY2lmaWMgZnVuY3Rp
b24KKy8vIHJldHVybnMgZmFsc2UuCisvLworLy8gcHJlVmlzaXQsIHBvc3RWaXNpdCwgYW5kIHJp
Z2h0VG9MZWZ0IGNvbnRyb2wgd2hhdCBvcmRlcgorLy8gbm9kZXMgYXJlIHZpc2l0ZWQgaW4uCisv
LworCisvLworLy8gVHJhdmVyc2FsIGZ1bmN0aW9ucyBmb3IgdGVybWluYWxzIGFyZSBzdHJhaWdo
Zm9yd2FyZC4uLi4KKy8vCit2b2lkIFRJbnRlcm1TeW1ib2w6OnRyYXZlcnNlKFRJbnRlcm1UcmF2
ZXJzZXIgKml0KQoreworICAgIGl0LT52aXNpdFN5bWJvbCh0aGlzKTsKK30KKwordm9pZCBUSW50
ZXJtQ29uc3RhbnRVbmlvbjo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciAqaXQpCit7CisgICAg
aXQtPnZpc2l0Q29uc3RhbnRVbmlvbih0aGlzKTsKK30KKworLy8KKy8vIFRyYXZlcnNlIGEgYmlu
YXJ5IG5vZGUuCisvLwordm9pZCBUSW50ZXJtQmluYXJ5Ojp0cmF2ZXJzZShUSW50ZXJtVHJhdmVy
c2VyICppdCkKK3sKKyAgICBib29sIHZpc2l0ID0gdHJ1ZTsKKworICAgIC8vCisgICAgLy8gdmlz
aXQgdGhlIG5vZGUgYmVmb3JlIGNoaWxkcmVuIGlmIHByZS12aXNpdGluZy4KKyAgICAvLworICAg
IGlmIChpdC0+cHJlVmlzaXQpCisgICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0QmluYXJ5KFByZVZp
c2l0LCB0aGlzKTsKKyAgICAKKyAgICAvLworICAgIC8vIFZpc2l0IHRoZSBjaGlsZHJlbiwgaW4g
dGhlIHJpZ2h0IG9yZGVyLgorICAgIC8vCisgICAgaWYgKHZpc2l0KQorICAgIHsKKyAgICAgICAg
aXQtPmluY3JlbWVudERlcHRoKHRoaXMpOworCisgICAgICAgIGlmIChpdC0+cmlnaHRUb0xlZnQp
IAorICAgICAgICB7CisgICAgICAgICAgICBpZiAocmlnaHQpCisgICAgICAgICAgICAgICAgcmln
aHQtPnRyYXZlcnNlKGl0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGl0LT5pblZp
c2l0KQorICAgICAgICAgICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0QmluYXJ5KEluVmlzaXQsIHRo
aXMpOworCisgICAgICAgICAgICBpZiAodmlzaXQgJiYgbGVmdCkKKyAgICAgICAgICAgICAgICBs
ZWZ0LT50cmF2ZXJzZShpdCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAobGVmdCkKKyAgICAgICAgICAgICAgICBsZWZ0LT50cmF2ZXJzZShpdCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpdC0+aW5WaXNpdCkKKyAgICAgICAgICAg
ICAgICB2aXNpdCA9IGl0LT52aXNpdEJpbmFyeShJblZpc2l0LCB0aGlzKTsKKworICAgICAgICAg
ICAgaWYgKHZpc2l0ICYmIHJpZ2h0KQorICAgICAgICAgICAgICAgIHJpZ2h0LT50cmF2ZXJzZShp
dCk7CisgICAgICAgIH0KKworICAgICAgICBpdC0+ZGVjcmVtZW50RGVwdGgoKTsKKyAgICB9CisK
KyAgICAvLworICAgIC8vIFZpc2l0IHRoZSBub2RlIGFmdGVyIHRoZSBjaGlsZHJlbiwgaWYgcmVx
dWVzdGVkIGFuZCB0aGUgdHJhdmVyc2FsCisgICAgLy8gaGFzbid0IGJlZW4gY2FuY2VsbGVkIHll
dC4KKyAgICAvLworICAgIGlmICh2aXNpdCAmJiBpdC0+cG9zdFZpc2l0KQorICAgICAgICBpdC0+
dmlzaXRCaW5hcnkoUG9zdFZpc2l0LCB0aGlzKTsKK30KKworLy8KKy8vIFRyYXZlcnNlIGEgdW5h
cnkgbm9kZS4gIFNhbWUgY29tbWVudHMgaW4gYmluYXJ5IG5vZGUgYXBwbHkgaGVyZS4KKy8vCit2
b2lkIFRJbnRlcm1VbmFyeTo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciAqaXQpCit7CisgICAg
Ym9vbCB2aXNpdCA9IHRydWU7CisKKyAgICBpZiAoaXQtPnByZVZpc2l0KQorICAgICAgICB2aXNp
dCA9IGl0LT52aXNpdFVuYXJ5KFByZVZpc2l0LCB0aGlzKTsKKworICAgIGlmICh2aXNpdCkgewor
ICAgICAgICBpdC0+aW5jcmVtZW50RGVwdGgodGhpcyk7CisgICAgICAgIG9wZXJhbmQtPnRyYXZl
cnNlKGl0KTsKKyAgICAgICAgaXQtPmRlY3JlbWVudERlcHRoKCk7CisgICAgfQorICAgIAorICAg
IGlmICh2aXNpdCAmJiBpdC0+cG9zdFZpc2l0KQorICAgICAgICBpdC0+dmlzaXRVbmFyeShQb3N0
VmlzaXQsIHRoaXMpOworfQorCisvLworLy8gVHJhdmVyc2UgYW4gYWdncmVnYXRlIG5vZGUuICBT
YW1lIGNvbW1lbnRzIGluIGJpbmFyeSBub2RlIGFwcGx5IGhlcmUuCisvLwordm9pZCBUSW50ZXJt
QWdncmVnYXRlOjp0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyICppdCkKK3sKKyAgICBib29sIHZp
c2l0ID0gdHJ1ZTsKKyAgICAKKyAgICBpZiAoaXQtPnByZVZpc2l0KQorICAgICAgICB2aXNpdCA9
IGl0LT52aXNpdEFnZ3JlZ2F0ZShQcmVWaXNpdCwgdGhpcyk7CisgICAgCisgICAgaWYgKHZpc2l0
KQorICAgIHsKKyAgICAgICAgaXQtPmluY3JlbWVudERlcHRoKHRoaXMpOworCisgICAgICAgIGlm
IChpdC0+cmlnaHRUb0xlZnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoVEludGVybVNl
cXVlbmNlOjpyZXZlcnNlX2l0ZXJhdG9yIHNpdCA9IHNlcXVlbmNlLnJiZWdpbigpOyBzaXQgIT0g
c2VxdWVuY2UucmVuZCgpOyBzaXQrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAo
KnNpdCktPnRyYXZlcnNlKGl0KTsKKworICAgICAgICAgICAgICAgIGlmICh2aXNpdCAmJiBpdC0+
aW5WaXNpdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICgqc2l0
ICE9IHNlcXVlbmNlLmZyb250KCkpCisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdCA9IGl0
LT52aXNpdEFnZ3JlZ2F0ZShJblZpc2l0LCB0aGlzKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gc2VxdWVuY2UuYmVnaW4oKTsg
c2l0ICE9IHNlcXVlbmNlLmVuZCgpOyBzaXQrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAoKnNpdCktPnRyYXZlcnNlKGl0KTsKKworICAgICAgICAgICAgICAgIGlmICh2aXNpdCAm
JiBpdC0+aW5WaXNpdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlm
ICgqc2l0ICE9IHNlcXVlbmNlLmJhY2soKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0
ID0gaXQtPnZpc2l0QWdncmVnYXRlKEluVmlzaXQsIHRoaXMpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaXQtPmRlY3JlbWVu
dERlcHRoKCk7CisgICAgfQorCisgICAgaWYgKHZpc2l0ICYmIGl0LT5wb3N0VmlzaXQpCisgICAg
ICAgIGl0LT52aXNpdEFnZ3JlZ2F0ZShQb3N0VmlzaXQsIHRoaXMpOworfQorCisvLworLy8gVHJh
dmVyc2UgYSBzZWxlY3Rpb24gbm9kZS4gIFNhbWUgY29tbWVudHMgaW4gYmluYXJ5IG5vZGUgYXBw
bHkgaGVyZS4KKy8vCit2b2lkIFRJbnRlcm1TZWxlY3Rpb246OnRyYXZlcnNlKFRJbnRlcm1UcmF2
ZXJzZXIgKml0KQoreworICAgIGJvb2wgdmlzaXQgPSB0cnVlOworCisgICAgaWYgKGl0LT5wcmVW
aXNpdCkKKyAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRTZWxlY3Rpb24oUHJlVmlzaXQsIHRoaXMp
OworICAgIAorICAgIGlmICh2aXNpdCkgeworICAgICAgICBpdC0+aW5jcmVtZW50RGVwdGgodGhp
cyk7CisgICAgICAgIGlmIChpdC0+cmlnaHRUb0xlZnQpIHsKKyAgICAgICAgICAgIGlmIChmYWxz
ZUJsb2NrKQorICAgICAgICAgICAgICAgIGZhbHNlQmxvY2stPnRyYXZlcnNlKGl0KTsKKyAgICAg
ICAgICAgIGlmICh0cnVlQmxvY2spCisgICAgICAgICAgICAgICAgdHJ1ZUJsb2NrLT50cmF2ZXJz
ZShpdCk7CisgICAgICAgICAgICBjb25kaXRpb24tPnRyYXZlcnNlKGl0KTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGNvbmRpdGlvbi0+dHJhdmVyc2UoaXQpOworICAgICAgICAgICAg
aWYgKHRydWVCbG9jaykKKyAgICAgICAgICAgICAgICB0cnVlQmxvY2stPnRyYXZlcnNlKGl0KTsK
KyAgICAgICAgICAgIGlmIChmYWxzZUJsb2NrKQorICAgICAgICAgICAgICAgIGZhbHNlQmxvY2st
PnRyYXZlcnNlKGl0KTsKKyAgICAgICAgfQorICAgICAgICBpdC0+ZGVjcmVtZW50RGVwdGgoKTsK
KyAgICB9CisKKyAgICBpZiAodmlzaXQgJiYgaXQtPnBvc3RWaXNpdCkKKyAgICAgICAgaXQtPnZp
c2l0U2VsZWN0aW9uKFBvc3RWaXNpdCwgdGhpcyk7Cit9CisKKy8vCisvLyBUcmF2ZXJzZSBhIGxv
b3Agbm9kZS4gIFNhbWUgY29tbWVudHMgaW4gYmluYXJ5IG5vZGUgYXBwbHkgaGVyZS4KKy8vCit2
b2lkIFRJbnRlcm1Mb29wOjp0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyICppdCkKK3sKKyAgICBi
b29sIHZpc2l0ID0gdHJ1ZTsKKworICAgIGlmIChpdC0+cHJlVmlzaXQpCisgICAgICAgIHZpc2l0
ID0gaXQtPnZpc2l0TG9vcChQcmVWaXNpdCwgdGhpcyk7CisgICAgCisgICAgaWYgKHZpc2l0KQor
ICAgIHsKKyAgICAgICAgaXQtPmluY3JlbWVudERlcHRoKHRoaXMpOworCisgICAgICAgIGlmIChp
dC0+cmlnaHRUb0xlZnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChleHByKQorICAgICAg
ICAgICAgICAgIGV4cHItPnRyYXZlcnNlKGl0KTsKKworICAgICAgICAgICAgaWYgKGJvZHkpCisg
ICAgICAgICAgICAgICAgYm9keS0+dHJhdmVyc2UoaXQpOworCisgICAgICAgICAgICBpZiAoY29u
ZCkKKyAgICAgICAgICAgICAgICBjb25kLT50cmF2ZXJzZShpdCk7CisKKyAgICAgICAgICAgIGlm
IChpbml0KQorICAgICAgICAgICAgICAgIGluaXQtPnRyYXZlcnNlKGl0KTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbml0KQorICAgICAgICAg
ICAgICAgIGluaXQtPnRyYXZlcnNlKGl0KTsKKworICAgICAgICAgICAgaWYgKGNvbmQpCisgICAg
ICAgICAgICAgICAgY29uZC0+dHJhdmVyc2UoaXQpOworCisgICAgICAgICAgICBpZiAoYm9keSkK
KyAgICAgICAgICAgICAgICBib2R5LT50cmF2ZXJzZShpdCk7CisKKyAgICAgICAgICAgIGlmIChl
eHByKQorICAgICAgICAgICAgICAgIGV4cHItPnRyYXZlcnNlKGl0KTsKKyAgICAgICAgfQorCisg
ICAgICAgIGl0LT5kZWNyZW1lbnREZXB0aCgpOworICAgIH0KKworICAgIGlmICh2aXNpdCAmJiBp
dC0+cG9zdFZpc2l0KQorICAgICAgICBpdC0+dmlzaXRMb29wKFBvc3RWaXNpdCwgdGhpcyk7Cit9
CisKKy8vCisvLyBUcmF2ZXJzZSBhIGJyYW5jaCBub2RlLiAgU2FtZSBjb21tZW50cyBpbiBiaW5h
cnkgbm9kZSBhcHBseSBoZXJlLgorLy8KK3ZvaWQgVEludGVybUJyYW5jaDo6dHJhdmVyc2UoVElu
dGVybVRyYXZlcnNlciAqaXQpCit7CisgICAgYm9vbCB2aXNpdCA9IHRydWU7CisKKyAgICBpZiAo
aXQtPnByZVZpc2l0KQorICAgICAgICB2aXNpdCA9IGl0LT52aXNpdEJyYW5jaChQcmVWaXNpdCwg
dGhpcyk7CisgICAgCisgICAgaWYgKHZpc2l0ICYmIGV4cHJlc3Npb24pIHsKKyAgICAgICAgaXQt
PmluY3JlbWVudERlcHRoKHRoaXMpOworICAgICAgICBleHByZXNzaW9uLT50cmF2ZXJzZShpdCk7
CisgICAgICAgIGl0LT5kZWNyZW1lbnREZXB0aCgpOworICAgIH0KKworICAgIGlmICh2aXNpdCAm
JiBpdC0+cG9zdFZpc2l0KQorICAgICAgICBpdC0+dmlzaXRCcmFuY2goUG9zdFZpc2l0LCB0aGlz
KTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvSW50ZXJtZWRpYXRlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybWVkaWF0ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzc3Y2Fi
NTQ1ODUxZTQ3NzBkMzVmNDJhZGY4OGQ5YmYxNzViNmUyNgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybWVkaWF0
ZS5jcHAKQEAgLTAsMCArMSwxNTAwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLworLy8gQnVp
bGQgdGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbi4KKy8vCisKKyNpbmNsdWRlIDxmbG9h
dC5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKworI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSGFzaE5hbWVzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9sb2NhbGludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvUXVhbGlmaWVyQWxpdmUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Jl
bW92ZVRyZWUuaCIKKworYm9vbCBDb21wYXJlU3RydWN0dXJlKGNvbnN0IFRUeXBlJiBsZWZ0Tm9k
ZVR5cGUsIENvbnN0YW50VW5pb24qIHJpZ2h0VW5pb25BcnJheSwgQ29uc3RhbnRVbmlvbiogbGVm
dFVuaW9uQXJyYXkpOworCitzdGF0aWMgVFByZWNpc2lvbiBHZXRIaWdoZXJQcmVjaXNpb24oVFBy
ZWNpc2lvbiBsZWZ0LCBUUHJlY2lzaW9uIHJpZ2h0KQoreworICAgIHJldHVybiBsZWZ0ID4gcmln
aHQgPyBsZWZ0IDogcmlnaHQ7Cit9CisKK2NvbnN0IGNoYXIqIGdldE9wZXJhdG9yU3RyaW5nKFRP
cGVyYXRvciBvcCkKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICBjYXNlIEVPcEluaXRpYWxp
emU6IHJldHVybiAiPSI7CisgICAgICBjYXNlIEVPcEFzc2lnbjogcmV0dXJuICI9IjsKKyAgICAg
IGNhc2UgRU9wQWRkQXNzaWduOiByZXR1cm4gIis9IjsKKyAgICAgIGNhc2UgRU9wU3ViQXNzaWdu
OiByZXR1cm4gIi09IjsKKyAgICAgIGNhc2UgRU9wRGl2QXNzaWduOiByZXR1cm4gIi89IjsKKwor
ICAgICAgLy8gRmFsbC10aHJvdWdoLgorICAgICAgY2FzZSBFT3BNdWxBc3NpZ246IAorICAgICAg
Y2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjoKKyAgICAgIGNhc2UgRU9wVmVjdG9yVGlt
ZXNTY2FsYXJBc3NpZ246CisgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOgor
ICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjogcmV0dXJuICIqPSI7CisKKyAg
ICAgIC8vIEZhbGwtdGhyb3VnaC4KKyAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6CisgICAgICBj
YXNlIEVPcEluZGV4SW5kaXJlY3Q6IHJldHVybiAiW10iOworCisgICAgICBjYXNlIEVPcEluZGV4
RGlyZWN0U3RydWN0OiByZXR1cm4gIi4iOworICAgICAgY2FzZSBFT3BWZWN0b3JTd2l6emxlOiBy
ZXR1cm4gIi4iOworICAgICAgY2FzZSBFT3BBZGQ6IHJldHVybiAiKyI7CisgICAgICBjYXNlIEVP
cFN1YjogcmV0dXJuICItIjsKKyAgICAgIGNhc2UgRU9wTXVsOiByZXR1cm4gIioiOworICAgICAg
Y2FzZSBFT3BEaXY6IHJldHVybiAiLyI7CisgICAgICBjYXNlIEVPcE1vZDogVU5JTVBMRU1FTlRF
RCgpOyBicmVhazsKKyAgICAgIGNhc2UgRU9wRXF1YWw6IHJldHVybiAiPT0iOworICAgICAgY2Fz
ZSBFT3BOb3RFcXVhbDogcmV0dXJuICIhPSI7CisgICAgICBjYXNlIEVPcExlc3NUaGFuOiByZXR1
cm4gIjwiOworICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjogcmV0dXJuICI+IjsKKyAgICAgIGNh
c2UgRU9wTGVzc1RoYW5FcXVhbDogcmV0dXJuICI8PSI7CisgICAgICBjYXNlIEVPcEdyZWF0ZXJU
aGFuRXF1YWw6IHJldHVybiAiPj0iOworCisgICAgICAvLyBGYWxsLXRocm91Z2guCisgICAgICBj
YXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyOgorICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJp
eDoKKyAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNWZWN0b3I6CisgICAgICBjYXNlIEVPcE1hdHJp
eFRpbWVzU2NhbGFyOgorICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeDogcmV0dXJuICIq
IjsKKworICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6IHJldHVybiAifHwiOworICAgICAgY2FzZSBF
T3BMb2dpY2FsWG9yOiByZXR1cm4gIl5eIjsKKyAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDogcmV0
dXJuICImJiI7CisgICAgICBjYXNlIEVPcE5lZ2F0aXZlOiByZXR1cm4gIi0iOworICAgICAgY2Fz
ZSBFT3BWZWN0b3JMb2dpY2FsTm90OiByZXR1cm4gIm5vdCI7CisgICAgICBjYXNlIEVPcExvZ2lj
YWxOb3Q6IHJldHVybiAiISI7CisgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6IHJldHVybiAi
KysiOworICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OiByZXR1cm4gIi0tIjsKKyAgICAgIGNh
c2UgRU9wUHJlSW5jcmVtZW50OiByZXR1cm4gIisrIjsKKyAgICAgIGNhc2UgRU9wUHJlRGVjcmVt
ZW50OiByZXR1cm4gIi0tIjsKKworICAgICAgLy8gRmFsbC10aHJvdWdoLgorICAgICAgY2FzZSBF
T3BDb252SW50VG9Cb29sOgorICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0Jvb2w6IHJldHVybiAi
Ym9vbCI7CisgCisgICAgICAvLyBGYWxsLXRocm91Z2guCisgICAgICBjYXNlIEVPcENvbnZCb29s
VG9GbG9hdDoKKyAgICAgIGNhc2UgRU9wQ29udkludFRvRmxvYXQ6IHJldHVybiAiZmxvYXQiOwor
IAorICAgICAgLy8gRmFsbC10aHJvdWdoLgorICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0ludDoK
KyAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0ludDogcmV0dXJuICJpbnQiOworCisgICAgICBjYXNl
IEVPcFJhZGlhbnM6IHJldHVybiAicmFkaWFucyI7CisgICAgICBjYXNlIEVPcERlZ3JlZXM6IHJl
dHVybiAiZGVncmVlcyI7CisgICAgICBjYXNlIEVPcFNpbjogcmV0dXJuICJzaW4iOworICAgICAg
Y2FzZSBFT3BDb3M6IHJldHVybiAiY29zIjsKKyAgICAgIGNhc2UgRU9wVGFuOiByZXR1cm4gInRh
biI7CisgICAgICBjYXNlIEVPcEFzaW46IHJldHVybiAiYXNpbiI7CisgICAgICBjYXNlIEVPcEFj
b3M6IHJldHVybiAiYWNvcyI7CisgICAgICBjYXNlIEVPcEF0YW46IHJldHVybiAiYXRhbiI7Cisg
ICAgICBjYXNlIEVPcEV4cDogcmV0dXJuICJleHAiOworICAgICAgY2FzZSBFT3BMb2c6IHJldHVy
biAibG9nIjsKKyAgICAgIGNhc2UgRU9wRXhwMjogcmV0dXJuICJleHAyIjsKKyAgICAgIGNhc2Ug
RU9wTG9nMjogcmV0dXJuICJsb2cyIjsKKyAgICAgIGNhc2UgRU9wU3FydDogcmV0dXJuICJzcXJ0
IjsKKyAgICAgIGNhc2UgRU9wSW52ZXJzZVNxcnQ6IHJldHVybiAiaW52ZXJzZXNxcnQiOworICAg
ICAgY2FzZSBFT3BBYnM6IHJldHVybiAiYWJzIjsKKyAgICAgIGNhc2UgRU9wU2lnbjogcmV0dXJu
ICJzaWduIjsKKyAgICAgIGNhc2UgRU9wRmxvb3I6IHJldHVybiAiZmxvb3IiOworICAgICAgY2Fz
ZSBFT3BDZWlsOiByZXR1cm4gImNlaWwiOworICAgICAgY2FzZSBFT3BGcmFjdDogcmV0dXJuICJm
cmFjdCI7CisgICAgICBjYXNlIEVPcExlbmd0aDogcmV0dXJuICJsZW5ndGgiOworICAgICAgY2Fz
ZSBFT3BOb3JtYWxpemU6IHJldHVybiAibm9ybWFsaXplIjsKKyAgICAgIGNhc2UgRU9wREZkeDog
cmV0dXJuICJkRmR4IjsKKyAgICAgIGNhc2UgRU9wREZkeTogcmV0dXJuICJkRmR5IjsKKyAgICAg
IGNhc2UgRU9wRndpZHRoOiByZXR1cm4gImZ3aWR0aCI7CisgICAgICBjYXNlIEVPcEFueTogcmV0
dXJuICJhbnkiOworICAgICAgY2FzZSBFT3BBbGw6IHJldHVybiAiYWxsIjsKKworICAgICAgZGVm
YXVsdDogYnJlYWs7CisgICAgfQorICAgIHJldHVybiAiIjsKK30KKworLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLworLy8KKy8vIEZpcnN0IHNldCBvZiBmdW5jdGlvbnMgYXJlIHRvIGhlbHAgYnVpbGQgdGhl
IGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbi4KKy8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90
IG1lbWJlciBmdW5jdGlvbnMgb2YgdGhlIG5vZGVzLgorLy8gVGhleSBhcmUgY2FsbGVkIGZyb20g
cGFyc2VyIHByb2R1Y3Rpb25zLgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vCisvLyBB
ZGQgYSB0ZXJtaW5hbCBub2RlIGZvciBhbiBpZGVudGlmaWVyIGluIGFuIGV4cHJlc3Npb24uCisv
LworLy8gUmV0dXJucyB0aGUgYWRkZWQgbm9kZS4KKy8vCitUSW50ZXJtU3ltYm9sKiBUSW50ZXJt
ZWRpYXRlOjphZGRTeW1ib2woaW50IGlkLCBjb25zdCBUU3RyaW5nJiBuYW1lLCBjb25zdCBUVHlw
ZSYgdHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKK3sKKyAgICBUSW50ZXJtU3ltYm9sKiBu
b2RlID0gbmV3IFRJbnRlcm1TeW1ib2woaWQsIG5hbWUsIHR5cGUpOworICAgIG5vZGUtPnNldExp
bmUobGluZSk7CisKKyAgICByZXR1cm4gbm9kZTsKK30KKworLy8KKy8vIENvbm5lY3QgdHdvIG5v
ZGVzIHdpdGggYSBuZXcgcGFyZW50IHRoYXQgZG9lcyBhIGJpbmFyeSBvcGVyYXRpb24gb24gdGhl
IG5vZGVzLgorLy8KKy8vIFJldHVybnMgdGhlIGFkZGVkIG5vZGUuCisvLworVEludGVybVR5cGVk
KiBUSW50ZXJtZWRpYXRlOjphZGRCaW5hcnlNYXRoKFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVk
KiBsZWZ0LCBUSW50ZXJtVHlwZWQqIHJpZ2h0LCBjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3lt
Ym9sVGFibGUmIHN5bWJvbFRhYmxlKQoreworICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2Fz
ZSBFT3BFcXVhbDoKKyAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKKyAgICAgICAgICAgIGlmIChs
ZWZ0LT5pc0FycmF5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjoKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVy
VGhhbjoKKyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgorICAgICAgICBjYXNlIEVPcEdy
ZWF0ZXJUaGFuRXF1YWw6CisgICAgICAgICAgICBpZiAobGVmdC0+aXNNYXRyaXgoKSB8fCBsZWZ0
LT5pc0FycmF5KCkgfHwgbGVmdC0+aXNWZWN0b3IoKSB8fCBsZWZ0LT5nZXRCYXNpY1R5cGUoKSA9
PSBFYnRTdHJ1Y3QpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjoKKyAgICAgICAg
Y2FzZSBFT3BMb2dpY2FsWG9yOgorICAgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6CisgICAgICAg
ICAgICBpZiAobGVmdC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Qm9vbCB8fCBsZWZ0LT5pc01hdHJp
eCgpIHx8IGxlZnQtPmlzQXJyYXkoKSB8fCBsZWZ0LT5pc1ZlY3RvcigpKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BBZGQ6CisgICAgICAgIGNhc2UgRU9wU3ViOgorICAgICAgICBjYXNlIEVPcERp
djoKKyAgICAgICAgY2FzZSBFT3BNdWw6CisgICAgICAgICAgICBpZiAobGVmdC0+Z2V0QmFzaWNU
eXBlKCkgPT0gRWJ0U3RydWN0IHx8IGxlZnQtPmdldEJhc2ljVHlwZSgpID09IEVidEJvb2wpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0K
KworICAgIC8vCisgICAgLy8gRmlyc3QgdHJ5IGNvbnZlcnRpbmcgdGhlIGNoaWxkcmVuIHRvIGNv
bXBhdGlibGUgdHlwZXMuCisgICAgLy8KKyAgICBpZiAobGVmdC0+Z2V0VHlwZSgpLmdldFN0cnVj
dCgpICYmIHJpZ2h0LT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkpIHsKKyAgICAgICAgaWYgKGxlZnQt
PmdldFR5cGUoKSAhPSByaWdodC0+Z2V0VHlwZSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgVEludGVybVR5cGVkKiBjaGlsZCA9IGFkZENvbnZlcnNpb24o
b3AsIGxlZnQtPmdldFR5cGUoKSwgcmlnaHQpOworICAgICAgICBpZiAoY2hpbGQpCisgICAgICAg
ICAgICByaWdodCA9IGNoaWxkOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNoaWxkID0g
YWRkQ29udmVyc2lvbihvcCwgcmlnaHQtPmdldFR5cGUoKSwgbGVmdCk7CisgICAgICAgICAgICBp
ZiAoY2hpbGQpCisgICAgICAgICAgICAgICAgbGVmdCA9IGNoaWxkOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorCisgICAgLy8K
KyAgICAvLyBOZWVkIGEgbmV3IG5vZGUgaG9sZGluZyB0aGluZ3MgdG9nZXRoZXIgdGhlbi4gIE1h
a2UKKyAgICAvLyBvbmUgYW5kIHByb21vdGUgaXQgdG8gdGhlIHJpZ2h0IHR5cGUuCisgICAgLy8K
KyAgICBUSW50ZXJtQmluYXJ5KiBub2RlID0gbmV3IFRJbnRlcm1CaW5hcnkob3ApOworICAgIG5v
ZGUtPnNldExpbmUobGluZSk7CisKKyAgICBub2RlLT5zZXRMZWZ0KGxlZnQpOworICAgIG5vZGUt
PnNldFJpZ2h0KHJpZ2h0KTsKKyAgICBpZiAoIW5vZGUtPnByb21vdGUoaW5mb1NpbmspKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIC8vCisgICAgLy8gU2VlIGlmIHdlIGNhbiBmb2xkIGNvbnN0
YW50cy4KKyAgICAvLworICAgIFRJbnRlcm1UeXBlZCogdHlwZWRSZXR1cm5Ob2RlID0gMDsKKyAg
ICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbGVmdFRlbXBDb25zdGFudCA9IGxlZnQtPmdldEFzQ29u
c3RhbnRVbmlvbigpOworICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpyaWdodFRlbXBDb25zdGFu
dCA9IHJpZ2h0LT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKyAgICBpZiAobGVmdFRlbXBDb25zdGFu
dCAmJiByaWdodFRlbXBDb25zdGFudCkgeworICAgICAgICB0eXBlZFJldHVybk5vZGUgPSBsZWZ0
VGVtcENvbnN0YW50LT5mb2xkKG5vZGUtPmdldE9wKCksIHJpZ2h0VGVtcENvbnN0YW50LCBpbmZv
U2luayk7CisKKyAgICAgICAgaWYgKHR5cGVkUmV0dXJuTm9kZSkKKyAgICAgICAgICAgIHJldHVy
biB0eXBlZFJldHVybk5vZGU7CisgICAgfQorCisgICAgcmV0dXJuIG5vZGU7Cit9CisKKy8vCisv
LyBDb25uZWN0IHR3byBub2RlcyB0aHJvdWdoIGFuIGFzc2lnbm1lbnQuCisvLworLy8gUmV0dXJu
cyB0aGUgYWRkZWQgbm9kZS4KKy8vCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZEFz
c2lnbihUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdo
dCwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKK3sKKyAgICAvLworICAgIC8vIExpa2UgYWRkaW5n
IGJpbmFyeSBtYXRoLCBleGNlcHQgdGhlIGNvbnZlcnNpb24gY2FuIG9ubHkgZ28KKyAgICAvLyBm
cm9tIHJpZ2h0IHRvIGxlZnQuCisgICAgLy8KKyAgICBUSW50ZXJtQmluYXJ5KiBub2RlID0gbmV3
IFRJbnRlcm1CaW5hcnkob3ApOworICAgIG5vZGUtPnNldExpbmUobGluZSk7CisKKyAgICBUSW50
ZXJtVHlwZWQqIGNoaWxkID0gYWRkQ29udmVyc2lvbihvcCwgbGVmdC0+Z2V0VHlwZSgpLCByaWdo
dCk7CisgICAgaWYgKGNoaWxkID09IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgbm9kZS0+
c2V0TGVmdChsZWZ0KTsKKyAgICBub2RlLT5zZXRSaWdodChjaGlsZCk7CisgICAgaWYgKCEgbm9k
ZS0+cHJvbW90ZShpbmZvU2luaykpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG5v
ZGU7Cit9CisKKy8vCisvLyBDb25uZWN0IHR3byBub2RlcyB0aHJvdWdoIGFuIGluZGV4IG9wZXJh
dG9yLCB3aGVyZSB0aGUgbGVmdCBub2RlIGlzIHRoZSBiYXNlCisvLyBvZiBhbiBhcnJheSBvciBz
dHJ1Y3QsIGFuZCB0aGUgcmlnaHQgbm9kZSBpcyBhIGRpcmVjdCBvciBpbmRpcmVjdCBvZmZzZXQu
CisvLworLy8gUmV0dXJucyB0aGUgYWRkZWQgbm9kZS4KKy8vIFRoZSBjYWxsZXIgc2hvdWxkIHNl
dCB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuZWQgbm9kZS4KKy8vCitUSW50ZXJtVHlwZWQqIFRJbnRl
cm1lZGlhdGU6OmFkZEluZGV4KFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBiYXNlLCBUSW50
ZXJtVHlwZWQqIGluZGV4LCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQoreworICAgIFRJbnRlcm1C
aW5hcnkqIG5vZGUgPSBuZXcgVEludGVybUJpbmFyeShvcCk7CisgICAgbm9kZS0+c2V0TGluZShs
aW5lKTsKKyAgICBub2RlLT5zZXRMZWZ0KGJhc2UpOworICAgIG5vZGUtPnNldFJpZ2h0KGluZGV4
KTsKKworICAgIC8vIGNhbGxlciBzaG91bGQgc2V0IHRoZSB0eXBlCisKKyAgICByZXR1cm4gbm9k
ZTsKK30KKworLy8KKy8vIEFkZCBvbmUgbm9kZSBhcyB0aGUgcGFyZW50IG9mIGFub3RoZXIgdGhh
dCBpdCBvcGVyYXRlcyBvbi4KKy8vCisvLyBSZXR1cm5zIHRoZSBhZGRlZCBub2RlLgorLy8KK1RJ
bnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkVW5hcnlNYXRoKFRPcGVyYXRvciBvcCwgVElu
dGVybU5vZGUqIGNoaWxkTm9kZSwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFN5bWJvbFRhYmxl
JiBzeW1ib2xUYWJsZSkKK3sKKyAgICBUSW50ZXJtVW5hcnkqIG5vZGU7CisgICAgVEludGVybVR5
cGVkKiBjaGlsZCA9IGNoaWxkTm9kZS0+Z2V0QXNUeXBlZCgpOworCisgICAgaWYgKGNoaWxkID09
IDApIHsKKyAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9y
LCBsaW5lLCAiQmFkIHR5cGUgaW4gQWRkVW5hcnlNYXRoIik7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKworICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90Ogor
ICAgICAgICAgICAgaWYgKGNoaWxkLT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0Qm9v
bCB8fCBjaGlsZC0+Z2V0VHlwZSgpLmlzTWF0cml4KCkgfHwgY2hpbGQtPmdldFR5cGUoKS5pc0Fy
cmF5KCkgfHwgY2hpbGQtPmdldFR5cGUoKS5pc1ZlY3RvcigpKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBj
YXNlIEVPcFBvc3RJbmNyZW1lbnQ6CisgICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OgorICAg
ICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6CisgICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50
OgorICAgICAgICBjYXNlIEVPcE5lZ2F0aXZlOgorICAgICAgICAgICAgaWYgKGNoaWxkLT5nZXRU
eXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0IHx8IGNoaWxkLT5nZXRUeXBlKCkuaXNB
cnJheSgpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBkZWZhdWx0OiBicmVh
azsKKyAgICB9CisKKyAgICAvLworICAgIC8vIERvIHdlIG5lZWQgdG8gcHJvbW90ZSB0aGUgb3Bl
cmFuZD8KKyAgICAvLworICAgIC8vIE5vdGU6IEltcGxpY2l0IHByb21vdGlvbnMgd2VyZSByZW1v
dmVkIGZyb20gdGhlIGxhbmd1YWdlLgorICAgIC8vCisgICAgVEJhc2ljVHlwZSBuZXdUeXBlID0g
RWJ0Vm9pZDsKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SW50
OiAgIG5ld1R5cGUgPSBFYnRJbnQ7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0
Qm9vbDogIG5ld1R5cGUgPSBFYnRCb29sOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0RmxvYXQ6IG5ld1R5cGUgPSBFYnRGbG9hdDsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IGJy
ZWFrOworICAgIH0KKworICAgIGlmIChuZXdUeXBlICE9IEVidFZvaWQpIHsKKyAgICAgICAgY2hp
bGQgPSBhZGRDb252ZXJzaW9uKG9wLCBUVHlwZShuZXdUeXBlLCBjaGlsZC0+Z2V0UHJlY2lzaW9u
KCksIEV2cVRlbXBvcmFyeSwKKyAgICAgICAgICAgIGNoaWxkLT5nZXROb21pbmFsU2l6ZSgpLAor
ICAgICAgICAgICAgY2hpbGQtPmlzTWF0cml4KCksCisgICAgICAgICAgICBjaGlsZC0+aXNBcnJh
eSgpKSwKKyAgICAgICAgICAgIGNoaWxkKTsKKyAgICAgICAgaWYgKGNoaWxkID09IDApCisgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLworICAgIC8vIEZvciBjb25zdHJ1Y3Rv
cnMsIHdlIGFyZSBub3cgZG9uZSwgaXQncyBhbGwgaW4gdGhlIGNvbnZlcnNpb24uCisgICAgLy8K
KyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OgorICAgICAg
ICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6
CisgICAgICAgICAgICByZXR1cm4gY2hpbGQ7CisgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAg
IH0KKworICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpjaGlsZFRlbXBDb25zdGFudCA9IDA7Cisg
ICAgaWYgKGNoaWxkLT5nZXRBc0NvbnN0YW50VW5pb24oKSkKKyAgICAgICAgY2hpbGRUZW1wQ29u
c3RhbnQgPSBjaGlsZC0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisKKyAgICAvLworICAgIC8vIE1h
a2UgYSBuZXcgbm9kZSBmb3IgdGhlIG9wZXJhdG9yLgorICAgIC8vCisgICAgbm9kZSA9IG5ldyBU
SW50ZXJtVW5hcnkob3ApOworICAgIG5vZGUtPnNldExpbmUobGluZSk7CisgICAgbm9kZS0+c2V0
T3BlcmFuZChjaGlsZCk7CisKKyAgICBpZiAoISBub2RlLT5wcm9tb3RlKGluZm9TaW5rKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoY2hpbGRUZW1wQ29uc3RhbnQpICB7CisgICAgICAg
IFRJbnRlcm1UeXBlZCogbmV3Q2hpbGQgPSBjaGlsZFRlbXBDb25zdGFudC0+Zm9sZChvcCwgMCwg
aW5mb1NpbmspOworCisgICAgICAgIGlmIChuZXdDaGlsZCkKKyAgICAgICAgICAgIHJldHVybiBu
ZXdDaGlsZDsKKyAgICB9CisKKyAgICByZXR1cm4gbm9kZTsKK30KKworLy8KKy8vIFRoaXMgaXMg
dGhlIHNhZmUgd2F5IHRvIGNoYW5nZSB0aGUgb3BlcmF0b3Igb24gYW4gYWdncmVnYXRlLCBhcyBp
dAorLy8gZG9lcyBsb3RzIG9mIGVycm9yIGNoZWNraW5nIGFuZCBmaXhpbmcuICBFc3BlY2lhbGx5
IGZvciBlc3RhYmxpc2hpbmcKKy8vIGEgZnVuY3Rpb24gY2FsbCdzIG9wZXJhdGlvbiBvbiBpdCdz
IHNldCBvZiBwYXJhbWV0ZXJzLiAgU2VxdWVuY2VzCisvLyBvZiBpbnN0cnVjdGlvbnMgYXJlIGFs
c28gYWdncmVnYXRlcywgYnV0IHRoZXkganVzdCBkaXJlbmN0bHkgc2V0CisvLyB0aGVpciBvcGVy
YXRvciB0byBFT3BTZXF1ZW5jZS4KKy8vCisvLyBSZXR1cm5zIGFuIGFnZ3JlZ2F0ZSBub2RlLCB3
aGljaCBjb3VsZCBiZSB0aGUgb25lIHBhc3NlZCBpbiBpZgorLy8gaXQgd2FzIGFscmVhZHkgYW4g
YWdncmVnYXRlIGJ1dCBubyBvcGVyYXRvciB3YXMgc2V0LgorLy8KK1RJbnRlcm1BZ2dyZWdhdGUq
IFRJbnRlcm1lZGlhdGU6OnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKFRJbnRlcm1Ob2RlKiBub2RlLCBU
T3BlcmF0b3Igb3AsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCit7CisgICAgVEludGVybUFnZ3Jl
Z2F0ZSogYWdnTm9kZTsKKworICAgIC8vCisgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYW4gYWdn
cmVnYXRlLiAgSWYgbm90IHR1cm4gaXQgaW50byBvbmUuCisgICAgLy8KKyAgICBpZiAobm9kZSkg
eworICAgICAgICBhZ2dOb2RlID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsKKyAgICAgICAgaWYg
KGFnZ05vZGUgPT0gMCB8fCBhZ2dOb2RlLT5nZXRPcCgpICE9IEVPcE51bGwpIHsKKyAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAvLyBNYWtlIGFuIGFnZ3JlZ2F0ZSBjb250YWluaW5nIHRoaXMg
bm9kZS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBhZ2dOb2RlID0gbmV3IFRJbnRlcm1B
Z2dyZWdhdGUoKTsKKyAgICAgICAgICAgIGFnZ05vZGUtPmdldFNlcXVlbmNlKCkucHVzaF9iYWNr
KG5vZGUpOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIGFnZ05vZGUgPSBuZXcgVElu
dGVybUFnZ3JlZ2F0ZSgpOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIG9wZXJhdG9yLgorICAg
IC8vCisgICAgYWdnTm9kZS0+c2V0T3Aob3ApOworICAgIGFnZ05vZGUtPnNldExpbmUobGluZSk7
CisKKyAgICByZXR1cm4gYWdnTm9kZTsKK30KKworLy8KKy8vIENvbnZlcnQgb25lIHR5cGUgdG8g
YW5vdGhlci4KKy8vCisvLyBSZXR1cm5zIHRoZSBub2RlIHJlcHJlc2VudGluZyB0aGUgY29udmVy
c2lvbiwgd2hpY2ggY291bGQgYmUgdGhlIHNhbWUKKy8vIG5vZGUgcGFzc2VkIGluIGlmIG5vIGNv
bnZlcnNpb24gd2FzIG5lZWRlZC4KKy8vCisvLyBSZXR1cm4gMCBpZiBhIGNvbnZlcnNpb24gY2Fu
J3QgYmUgZG9uZS4KKy8vCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZENvbnZlcnNp
b24oVE9wZXJhdG9yIG9wLCBjb25zdCBUVHlwZSYgdHlwZSwgVEludGVybVR5cGVkKiBub2RlKQor
eworICAgIC8vCisgICAgLy8gRG9lcyB0aGUgYmFzZSB0eXBlIGFsbG93IG9wZXJhdGlvbj8KKyAg
ICAvLworICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBF
YnRWb2lkOgorICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAgICAgICAgY2FzZSBFYnRTYW1w
bGVyQ3ViZToKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBkZWZhdWx0OiBicmVhazsK
KyAgICB9CisKKyAgICAvLworICAgIC8vIE90aGVyd2lzZSwgaWYgdHlwZXMgYXJlIGlkZW50aWNh
bCwgbm8gcHJvYmxlbQorICAgIC8vCisgICAgaWYgKHR5cGUgPT0gbm9kZS0+Z2V0VHlwZSgpKQor
ICAgICAgICByZXR1cm4gbm9kZTsKKworICAgIC8vCisgICAgLy8gSWYgb25lJ3MgYSBzdHJ1Y3R1
cmUsIHRoZW4gbm8gY29udmVyc2lvbnMuCisgICAgLy8KKyAgICBpZiAodHlwZS5nZXRTdHJ1Y3Qo
KSB8fCBub2RlLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgLy8KKyAgICAvLyBJZiBvbmUncyBhbiBhcnJheSwgdGhlbiBubyBjb252ZXJzaW9ucy4KKyAg
ICAvLworICAgIGlmICh0eXBlLmlzQXJyYXkoKSB8fCBub2RlLT5nZXRUeXBlKCkuaXNBcnJheSgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRCYXNpY1R5cGUgcHJvbW90ZVRvOworCisgICAg
c3dpdGNoIChvcCkgeworICAgICAgICAvLworICAgICAgICAvLyBFeHBsaWNpdCBjb252ZXJzaW9u
cworICAgICAgICAvLworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6CisgICAgICAgICAg
ICBwcm9tb3RlVG8gPSBFYnRCb29sOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0RmxvYXQ6CisgICAgICAgICAgICBwcm9tb3RlVG8gPSBFYnRGbG9hdDsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDoKKyAgICAgICAg
ICAgIHByb21vdGVUbyA9IEVidEludDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIGltcGxpY2l0IGNvbnZlcnNpb25z
IHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBsYW5ndWFnZS4KKyAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSAhPSBub2RlLT5nZXRUeXBlKCkuZ2V0QmFzaWNU
eXBlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAvLworICAgICAg
ICAgICAgLy8gU2l6ZSBhbmQgc3RydWN0dXJlIGNvdWxkIHN0aWxsIGRpZmZlciwgYnV0IHRoYXQn
cworICAgICAgICAgICAgLy8gaGFuZGxlZCBieSBvcGVyYXRvciBwcm9tb3Rpb24uCisgICAgICAg
ICAgICAvLworICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorCisgICAgaWYgKG5vZGUt
PmdldEFzQ29uc3RhbnRVbmlvbigpKSB7CisKKyAgICAgICAgcmV0dXJuIChwcm9tb3RlQ29uc3Rh
bnRVbmlvbihwcm9tb3RlVG8sIG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpKSk7CisgICAgfSBl
bHNlIHsKKworICAgICAgICAvLworICAgICAgICAvLyBBZGQgYSBuZXcgbmV3Tm9kZSBmb3IgdGhl
IGNvbnZlcnNpb24uCisgICAgICAgIC8vCisgICAgICAgIFRJbnRlcm1VbmFyeSogbmV3Tm9kZSA9
IDA7CisKKyAgICAgICAgVE9wZXJhdG9yIG5ld09wID0gRU9wTnVsbDsKKyAgICAgICAgc3dpdGNo
IChwcm9tb3RlVG8pIHsKKyAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICBj
YXNlIEVidEludDogICBuZXdPcCA9IEVPcENvbnZJbnRUb0Zsb2F0OyAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogIG5ld09wID0gRU9wQ29udkJvb2xUb0Zsb2F0OyBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0
TGluZSgpLCAiQmFkIHByb21vdGlvbiBub2RlIik7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRC
YXNpY1R5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDogICBuZXdPcCA9
IEVPcENvbnZJbnRUb0Jvb2w7ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0
RmxvYXQ6IG5ld09wID0gRU9wQ29udkZsb2F0VG9Cb29sOyBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVz
c2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQmFkIHByb21vdGlv
biBub2RlIik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVidEludDoK
KyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldEJhc2ljVHlwZSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogICBuZXdPcCA9IEVPcENvbnZCb29sVG9JbnQ7ICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogIG5ld09wID0gRU9wQ29u
dkZsb2F0VG9JbnQ7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVy
cm9yLCBub2RlLT5nZXRMaW5lKCksICJCYWQgcHJvbW90aW9uIG5vZGUiKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgaW5mb1Npbmsu
aW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRMaW5lKCksICJCYWQg
cHJvbW90aW9uIHR5cGUiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQor
CisgICAgICAgIFRUeXBlIHR5cGUocHJvbW90ZVRvLCBub2RlLT5nZXRQcmVjaXNpb24oKSwgRXZx
VGVtcG9yYXJ5LCBub2RlLT5nZXROb21pbmFsU2l6ZSgpLCBub2RlLT5pc01hdHJpeCgpLCBub2Rl
LT5pc0FycmF5KCkpOworICAgICAgICBuZXdOb2RlID0gbmV3IFRJbnRlcm1VbmFyeShuZXdPcCwg
dHlwZSk7CisgICAgICAgIG5ld05vZGUtPnNldExpbmUobm9kZS0+Z2V0TGluZSgpKTsKKyAgICAg
ICAgbmV3Tm9kZS0+c2V0T3BlcmFuZChub2RlKTsKKworICAgICAgICByZXR1cm4gbmV3Tm9kZTsK
KyAgICB9Cit9CisKKy8vCisvLyBTYWZlIHdheSB0byBjb21iaW5lIHR3byBub2RlcyBpbnRvIGFu
IGFnZ3JlZ2F0ZS4gIFdvcmtzIHdpdGggbnVsbCBwb2ludGVycywKKy8vIGEgbm9kZSB0aGF0J3Mg
bm90IGEgYWdncmVnYXRlIHlldCwgZXRjLgorLy8KKy8vIFJldHVybnMgdGhlIHJlc3VsdGluZyBh
Z2dyZWdhdGUsIHVubGVzcyAwIHdhcyBwYXNzZWQgaW4gZm9yCisvLyBib3RoIGV4aXN0aW5nIG5v
ZGVzLgorLy8KK1RJbnRlcm1BZ2dyZWdhdGUqIFRJbnRlcm1lZGlhdGU6Omdyb3dBZ2dyZWdhdGUo
VEludGVybU5vZGUqIGxlZnQsIFRJbnRlcm1Ob2RlKiByaWdodCwgY29uc3QgVFNvdXJjZUxvYyYg
bGluZSkKK3sKKyAgICBpZiAobGVmdCA9PSAwICYmIHJpZ2h0ID09IDApCisgICAgICAgIHJldHVy
biAwOworCisgICAgVEludGVybUFnZ3JlZ2F0ZSogYWdnTm9kZSA9IDA7CisgICAgaWYgKGxlZnQp
CisgICAgICAgIGFnZ05vZGUgPSBsZWZ0LT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAgIGlmICghYWdn
Tm9kZSB8fCBhZ2dOb2RlLT5nZXRPcCgpICE9IEVPcE51bGwpIHsKKyAgICAgICAgYWdnTm9kZSA9
IG5ldyBUSW50ZXJtQWdncmVnYXRlOworICAgICAgICBpZiAobGVmdCkKKyAgICAgICAgICAgIGFn
Z05vZGUtPmdldFNlcXVlbmNlKCkucHVzaF9iYWNrKGxlZnQpOworICAgIH0KKworICAgIGlmIChy
aWdodCkKKyAgICAgICAgYWdnTm9kZS0+Z2V0U2VxdWVuY2UoKS5wdXNoX2JhY2socmlnaHQpOwor
CisgICAgYWdnTm9kZS0+c2V0TGluZShsaW5lKTsKKworICAgIHJldHVybiBhZ2dOb2RlOworfQor
CisvLworLy8gVHVybiBhbiBleGlzdGluZyBub2RlIGludG8gYW4gYWdncmVnYXRlLgorLy8KKy8v
IFJldHVybnMgYW4gYWdncmVnYXRlLCB1bmxlc3MgMCB3YXMgcGFzc2VkIGluIGZvciB0aGUgZXhp
c3Rpbmcgbm9kZS4KKy8vCitUSW50ZXJtQWdncmVnYXRlKiBUSW50ZXJtZWRpYXRlOjptYWtlQWdn
cmVnYXRlKFRJbnRlcm1Ob2RlKiBub2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQoreworICAg
IGlmIChub2RlID09IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgVEludGVybUFnZ3JlZ2F0
ZSogYWdnTm9kZSA9IG5ldyBUSW50ZXJtQWdncmVnYXRlOworICAgIGFnZ05vZGUtPmdldFNlcXVl
bmNlKCkucHVzaF9iYWNrKG5vZGUpOworICAgIGFnZ05vZGUtPnNldExpbmUobGluZSk7CisKKyAg
ICByZXR1cm4gYWdnTm9kZTsKK30KKworLy8KKy8vIEZvciAiaWYiIHRlc3Qgbm9kZXMuICBUaGVy
ZSBhcmUgdGhyZWUgY2hpbGRyZW47IGEgY29uZGl0aW9uLAorLy8gYSB0cnVlIHBhdGgsIGFuZCBh
IGZhbHNlIHBhdGguICBUaGUgdHdvIHBhdGhzIGFyZSBpbiB0aGUKKy8vIG5vZGVQYWlyLgorLy8K
Ky8vIFJldHVybnMgdGhlIHNlbGVjdGlvbiBub2RlIGNyZWF0ZWQuCisvLworVEludGVybU5vZGUq
IFRJbnRlcm1lZGlhdGU6OmFkZFNlbGVjdGlvbihUSW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1O
b2RlUGFpciBub2RlUGFpciwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKK3sKKyAgICAvLworICAg
IC8vIEZvciBjb21waWxlIHRpbWUgY29uc3RhbnQgc2VsZWN0aW9ucywgcHJ1bmUgdGhlIGNvZGUg
YW5kCisgICAgLy8gdGVzdCBub3cuCisgICAgLy8KKworICAgIGlmIChjb25kLT5nZXRBc1R5cGVk
KCkgJiYgY29uZC0+Z2V0QXNUeXBlZCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKSkgeworICAgICAg
ICBpZiAoY29uZC0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldEJDb25zdCgwKSA9PSB0cnVlKQor
ICAgICAgICAgICAgcmV0dXJuIG5vZGVQYWlyLm5vZGUxID8gc2V0QWdncmVnYXRlT3BlcmF0b3Io
bm9kZVBhaXIubm9kZTEsIEVPcFNlcXVlbmNlLCBub2RlUGFpci5ub2RlMS0+Z2V0TGluZSgpKSA6
IE5VTEw7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBub2RlUGFpci5ub2RlMiA/
IHNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5vZGVQYWlyLm5vZGUyLCBFT3BTZXF1ZW5jZSwgbm9kZVBh
aXIubm9kZTItPmdldExpbmUoKSkgOiBOVUxMOworICAgIH0KKworICAgIFRJbnRlcm1TZWxlY3Rp
b24qIG5vZGUgPSBuZXcgVEludGVybVNlbGVjdGlvbihjb25kLCBub2RlUGFpci5ub2RlMSwgbm9k
ZVBhaXIubm9kZTIpOworICAgIG5vZGUtPnNldExpbmUobGluZSk7CisKKyAgICByZXR1cm4gbm9k
ZTsKK30KKworCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZENvbW1hKFRJbnRlcm1U
eXBlZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdodCwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkK
K3sKKyAgICBpZiAobGVmdC0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0ICYm
IHJpZ2h0LT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsKKyAgICAgICAg
cmV0dXJuIHJpZ2h0OworICAgIH0gZWxzZSB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqY29tbWFB
Z2dyZWdhdGUgPSBncm93QWdncmVnYXRlKGxlZnQsIHJpZ2h0LCBsaW5lKTsKKyAgICAgICAgY29t
bWFBZ2dyZWdhdGUtPmdldEFzQWdncmVnYXRlKCktPnNldE9wKEVPcENvbW1hKTsKKyAgICAgICAg
Y29tbWFBZ2dyZWdhdGUtPnNldFR5cGUocmlnaHQtPmdldFR5cGUoKSk7CisgICAgICAgIGNvbW1h
QWdncmVnYXRlLT5nZXRUeXBlUG9pbnRlcigpLT5zZXRRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsK
KyAgICAgICAgcmV0dXJuIGNvbW1hQWdncmVnYXRlOworICAgIH0KK30KKworLy8KKy8vIEZvciAi
PzoiIHRlc3Qgbm9kZXMuICBUaGVyZSBhcmUgdGhyZWUgY2hpbGRyZW47IGEgY29uZGl0aW9uLAor
Ly8gYSB0cnVlIHBhdGgsIGFuZCBhIGZhbHNlIHBhdGguICBUaGUgdHdvIHBhdGhzIGFyZSBzcGVj
aWZpZWQKKy8vIGFzIHNlcGFyYXRlIHBhcmFtZXRlcnMuCisvLworLy8gUmV0dXJucyB0aGUgc2Vs
ZWN0aW9uIG5vZGUgY3JlYXRlZCwgb3IgMCBpZiBvbmUgY291bGQgbm90IGJlLgorLy8KK1RJbnRl
cm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkU2VsZWN0aW9uKFRJbnRlcm1UeXBlZCogY29uZCwg
VEludGVybVR5cGVkKiB0cnVlQmxvY2ssIFRJbnRlcm1UeXBlZCogZmFsc2VCbG9jaywgY29uc3Qg
VFNvdXJjZUxvYyYgbGluZSkKK3sKKyAgICAvLworICAgIC8vIEdldCBjb21wYXRpYmxlIHR5cGVz
LgorICAgIC8vCisgICAgVEludGVybVR5cGVkKiBjaGlsZCA9IGFkZENvbnZlcnNpb24oRU9wU2Vx
dWVuY2UsIHRydWVCbG9jay0+Z2V0VHlwZSgpLCBmYWxzZUJsb2NrKTsKKyAgICBpZiAoY2hpbGQp
CisgICAgICAgIGZhbHNlQmxvY2sgPSBjaGlsZDsKKyAgICBlbHNlIHsKKyAgICAgICAgY2hpbGQg
PSBhZGRDb252ZXJzaW9uKEVPcFNlcXVlbmNlLCBmYWxzZUJsb2NrLT5nZXRUeXBlKCksIHRydWVC
bG9jayk7CisgICAgICAgIGlmIChjaGlsZCkKKyAgICAgICAgICAgIHRydWVCbG9jayA9IGNoaWxk
OworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLwor
ICAgIC8vIFNlZSBpZiBhbGwgdGhlIG9wZXJhbmRzIGFyZSBjb25zdGFudCwgdGhlbiBmb2xkIGl0
IG90aGVyd2lzZSBub3QuCisgICAgLy8KKworICAgIGlmIChjb25kLT5nZXRBc0NvbnN0YW50VW5p
b24oKSAmJiB0cnVlQmxvY2stPmdldEFzQ29uc3RhbnRVbmlvbigpICYmIGZhbHNlQmxvY2stPmdl
dEFzQ29uc3RhbnRVbmlvbigpKSB7CisgICAgICAgIGlmIChjb25kLT5nZXRBc0NvbnN0YW50VW5p
b24oKS0+Z2V0QkNvbnN0KDApKQorICAgICAgICAgICAgcmV0dXJuIHRydWVCbG9jazsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlQmxvY2s7CisgICAgfQorCisgICAgLy8K
KyAgICAvLyBNYWtlIGEgc2VsZWN0aW9uIG5vZGUuCisgICAgLy8KKyAgICBUSW50ZXJtU2VsZWN0
aW9uKiBub2RlID0gbmV3IFRJbnRlcm1TZWxlY3Rpb24oY29uZCwgdHJ1ZUJsb2NrLCBmYWxzZUJs
b2NrLCB0cnVlQmxvY2stPmdldFR5cGUoKSk7CisgICAgbm9kZS0+Z2V0VHlwZVBvaW50ZXIoKS0+
c2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CisgICAgbm9kZS0+c2V0TGluZShsaW5lKTsKKwor
ICAgIHJldHVybiBub2RlOworfQorCisvLworLy8gQ29uc3RhbnQgdGVybWluYWwgbm9kZXMuICBI
YXMgYSB1bmlvbiB0aGF0IGNvbnRhaW5zIGJvb2wsIGZsb2F0IG9yIGludCBjb25zdGFudHMKKy8v
CisvLyBSZXR1cm5zIHRoZSBjb25zdGFudCB1bmlvbiBub2RlIGNyZWF0ZWQuCisvLworCitUSW50
ZXJtQ29uc3RhbnRVbmlvbiogVEludGVybWVkaWF0ZTo6YWRkQ29uc3RhbnRVbmlvbihDb25zdGFu
dFVuaW9uKiB1bmlvbkFycmF5UG9pbnRlciwgY29uc3QgVFR5cGUmIHQsIGNvbnN0IFRTb3VyY2VM
b2MmIGxpbmUpCit7CisgICAgVEludGVybUNvbnN0YW50VW5pb24qIG5vZGUgPSBuZXcgVEludGVy
bUNvbnN0YW50VW5pb24odW5pb25BcnJheVBvaW50ZXIsIHQpOworICAgIG5vZGUtPnNldExpbmUo
bGluZSk7CisKKyAgICByZXR1cm4gbm9kZTsKK30KKworVEludGVybVR5cGVkKiBUSW50ZXJtZWRp
YXRlOjphZGRTd2l6emxlKFRWZWN0b3JGaWVsZHMmIGZpZWxkcywgY29uc3QgVFNvdXJjZUxvYyYg
bGluZSkKK3sKKworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUgPSBuZXcgVEludGVybUFnZ3Jl
Z2F0ZShFT3BTZXF1ZW5jZSk7CisKKyAgICBub2RlLT5zZXRMaW5lKGxpbmUpOworICAgIFRJbnRl
cm1Db25zdGFudFVuaW9uKiBjb25zdEludE5vZGU7CisgICAgVEludGVybVNlcXVlbmNlICZzZXF1
ZW5jZVZlY3RvciA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CisgICAgQ29uc3RhbnRVbmlvbiogdW5p
b25BcnJheTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgaSsrKSB7Cisg
ICAgICAgIHVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgdW5pb25B
cnJheS0+c2V0SUNvbnN0KGZpZWxkcy5vZmZzZXRzW2ldKTsKKyAgICAgICAgY29uc3RJbnROb2Rl
ID0gYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5l
ZCwgRXZxQ29uc3QpLCBsaW5lKTsKKyAgICAgICAgc2VxdWVuY2VWZWN0b3IucHVzaF9iYWNrKGNv
bnN0SW50Tm9kZSk7CisgICAgfQorCisgICAgcmV0dXJuIG5vZGU7Cit9CisKKy8vCisvLyBDcmVh
dGUgbG9vcCBub2Rlcy4KKy8vCitUSW50ZXJtTm9kZSogVEludGVybWVkaWF0ZTo6YWRkTG9vcChU
TG9vcFR5cGUgdHlwZSwgVEludGVybU5vZGUqIGluaXQsIFRJbnRlcm1UeXBlZCogY29uZCwgVElu
dGVybVR5cGVkKiBleHByLCBUSW50ZXJtTm9kZSogYm9keSwgY29uc3QgVFNvdXJjZUxvYyYgbGlu
ZSkKK3sKKyAgICBUSW50ZXJtTm9kZSogbm9kZSA9IG5ldyBUSW50ZXJtTG9vcCh0eXBlLCBpbml0
LCBjb25kLCBleHByLCBib2R5KTsKKyAgICBub2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAgcmV0
dXJuIG5vZGU7Cit9CisKKy8vCisvLyBBZGQgYnJhbmNoZXMuCisvLworVEludGVybUJyYW5jaCog
VEludGVybWVkaWF0ZTo6YWRkQnJhbmNoKFRPcGVyYXRvciBicmFuY2hPcCwgY29uc3QgVFNvdXJj
ZUxvYyYgbGluZSkKK3sKKyAgICByZXR1cm4gYWRkQnJhbmNoKGJyYW5jaE9wLCAwLCBsaW5lKTsK
K30KKworVEludGVybUJyYW5jaCogVEludGVybWVkaWF0ZTo6YWRkQnJhbmNoKFRPcGVyYXRvciBi
cmFuY2hPcCwgVEludGVybVR5cGVkKiBleHByZXNzaW9uLCBjb25zdCBUU291cmNlTG9jJiBsaW5l
KQoreworICAgIFRJbnRlcm1CcmFuY2gqIG5vZGUgPSBuZXcgVEludGVybUJyYW5jaChicmFuY2hP
cCwgZXhwcmVzc2lvbik7CisgICAgbm9kZS0+c2V0TGluZShsaW5lKTsKKworICAgIHJldHVybiBu
b2RlOworfQorCisvLworLy8gVGhpcyBpcyB0byBiZSBleGVjdXRlZCBvbmNlIHRoZSBmaW5hbCBy
b290IGlzIHB1dCBvbiB0b3AgYnkgdGhlIHBhcnNpbmcKKy8vIHByb2Nlc3MuCisvLworYm9vbCBU
SW50ZXJtZWRpYXRlOjpwb3N0UHJvY2VzcyhUSW50ZXJtTm9kZSogcm9vdCkKK3sKKyAgICBpZiAo
cm9vdCA9PSAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vCisgICAgLy8gRmlyc3Qs
IGZpbmlzaCBvZmYgdGhlIHRvcCBsZXZlbCBzZXF1ZW5jZSwgaWYgYW55CisgICAgLy8KKyAgICBU
SW50ZXJtQWdncmVnYXRlKiBhZ2dSb290ID0gcm9vdC0+Z2V0QXNBZ2dyZWdhdGUoKTsKKyAgICBp
ZiAoYWdnUm9vdCAmJiBhZ2dSb290LT5nZXRPcCgpID09IEVPcE51bGwpCisgICAgICAgIGFnZ1Jv
b3QtPnNldE9wKEVPcFNlcXVlbmNlKTsKKworICAgIHJldHVybiB0cnVlOworfQorCisvLworLy8g
VGhpcyBkZWxldGVzIHRoZSB0cmVlLgorLy8KK3ZvaWQgVEludGVybWVkaWF0ZTo6cmVtb3ZlKFRJ
bnRlcm1Ob2RlKiByb290KQoreworICAgIGlmIChyb290KQorICAgICAgICBSZW1vdmVBbGxUcmVl
Tm9kZXMocm9vdCk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBNZW1iZXIgZnVuY3Rpb25zIG9mIHRo
ZSBub2RlcyB1c2VkIGZvciBidWlsZGluZyB0aGUgdHJlZS4KKy8vCisvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyNkZWZp
bmUgUkVQTEFDRV9JRl9JUyhub2RlLCB0eXBlLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpIFwKKyAg
ICBpZiAobm9kZSA9PSBvcmlnaW5hbCkgeyBcCisgICAgICAgIG5vZGUgPSBzdGF0aWNfY2FzdDx0
eXBlICo+KHJlcGxhY2VtZW50KTsgXAorICAgICAgICByZXR1cm4gdHJ1ZTsgXAorICAgIH0KKwor
Ym9vbCBUSW50ZXJtTG9vcDo6cmVwbGFjZUNoaWxkTm9kZSgKKyAgICBUSW50ZXJtTm9kZSAqb3Jp
Z2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCkKK3sKKyAgICBSRVBMQUNFX0lGX0lTKGlu
aXQsIFRJbnRlcm1Ob2RlLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpOworICAgIFJFUExBQ0VfSUZf
SVMoY29uZCwgVEludGVybVR5cGVkLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpOworICAgIFJFUExB
Q0VfSUZfSVMoZXhwciwgVEludGVybVR5cGVkLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpOworICAg
IFJFUExBQ0VfSUZfSVMoYm9keSwgVEludGVybU5vZGUsIG9yaWdpbmFsLCByZXBsYWNlbWVudCk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRJbnRlcm1CcmFuY2g6OnJlcGxhY2VDaGls
ZE5vZGUoCisgICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFjZW1l
bnQpCit7CisgICAgUkVQTEFDRV9JRl9JUyhleHByZXNzaW9uLCBUSW50ZXJtVHlwZWQsIG9yaWdp
bmFsLCByZXBsYWNlbWVudCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRJbnRlcm1C
aW5hcnk6OnJlcGxhY2VDaGlsZE5vZGUoCisgICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50
ZXJtTm9kZSAqcmVwbGFjZW1lbnQpCit7CisgICAgUkVQTEFDRV9JRl9JUyhsZWZ0LCBUSW50ZXJt
VHlwZWQsIG9yaWdpbmFsLCByZXBsYWNlbWVudCk7CisgICAgUkVQTEFDRV9JRl9JUyhyaWdodCwg
VEludGVybVR5cGVkLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpOworICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBUSW50ZXJtVW5hcnk6OnJlcGxhY2VDaGlsZE5vZGUoCisgICAgVEludGVybU5v
ZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFjZW1lbnQpCit7CisgICAgUkVQTEFDRV9J
Rl9JUyhvcGVyYW5kLCBUSW50ZXJtVHlwZWQsIG9yaWdpbmFsLCByZXBsYWNlbWVudCk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIFRJbnRlcm1BZ2dyZWdhdGU6OnJlcGxhY2VDaGlsZE5v
ZGUoCisgICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFjZW1lbnQp
Cit7CisgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHNlcXVlbmNlLnNpemUoKTsgKytpaSkK
KyAgICB7CisgICAgICAgIFJFUExBQ0VfSUZfSVMoc2VxdWVuY2VbaWldLCBUSW50ZXJtTm9kZSwg
b3JpZ2luYWwsIHJlcGxhY2VtZW50KTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiti
b29sIFRJbnRlcm1TZWxlY3Rpb246OnJlcGxhY2VDaGlsZE5vZGUoCisgICAgVEludGVybU5vZGUg
Km9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFjZW1lbnQpCit7CisgICAgUkVQTEFDRV9JRl9J
Uyhjb25kaXRpb24sIFRJbnRlcm1UeXBlZCwgb3JpZ2luYWwsIHJlcGxhY2VtZW50KTsKKyAgICBS
RVBMQUNFX0lGX0lTKHRydWVCbG9jaywgVEludGVybU5vZGUsIG9yaWdpbmFsLCByZXBsYWNlbWVu
dCk7CisgICAgUkVQTEFDRV9JRl9JUyhmYWxzZUJsb2NrLCBUSW50ZXJtTm9kZSwgb3JpZ2luYWws
IHJlcGxhY2VtZW50KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vCisvLyBTYXkgd2hldGhl
ciBvciBub3QgYW4gb3BlcmF0aW9uIG5vZGUgY2hhbmdlcyB0aGUgdmFsdWUgb2YgYSB2YXJpYWJs
ZS4KKy8vCitib29sIFRJbnRlcm1PcGVyYXRvcjo6aXNBc3NpZ25tZW50KCkgY29uc3QKK3sKKyAg
ICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDoKKyAgICAgICAg
Y2FzZSBFT3BQb3N0RGVjcmVtZW50OgorICAgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDoKKyAg
ICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6CisgICAgICAgIGNhc2UgRU9wQXNzaWduOgorICAg
ICAgICBjYXNlIEVPcEFkZEFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246CisgICAg
ICAgIGNhc2UgRU9wTXVsQXNzaWduOgorICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4
QXNzaWduOgorICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOgorICAgICAg
ICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOgorICAgICAgICBjYXNlIEVPcE1hdHJp
eFRpbWVzTWF0cml4QXNzaWduOgorICAgICAgICBjYXNlIEVPcERpdkFzc2lnbjoKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKworLy8KKy8vIHJldHVybnMgdHJ1ZSBpZiB0aGUgb3BlcmF0b3IgaXMg
Zm9yIG9uZSBvZiB0aGUgY29uc3RydWN0b3JzCisvLworYm9vbCBUSW50ZXJtT3BlcmF0b3I6Omlz
Q29uc3RydWN0b3IoKSBjb25zdAoreworICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RWZWMyOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzM6CisgICAgICAg
IGNhc2UgRU9wQ29uc3RydWN0VmVjNDoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQyOgor
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0
TWF0NDoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RGbG9hdDoKKyAgICAgICAgY2FzZSBFT3BD
b25zdHJ1Y3RJVmVjMjoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMzoKKyAgICAgICAg
Y2FzZSBFT3BDb25zdHJ1Y3RJVmVjNDoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6Cisg
ICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzI6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0
QlZlYzM6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6CisgICAgICAgIGNhc2UgRU9w
Q29uc3RydWN0Qm9vbDoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RTdHJ1Y3Q6CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9Cit9CisKKy8vCisvLyBNYWtlIHN1cmUgdGhlIHR5cGUgb2YgYSB1bmFyeSBv
cGVyYXRvciBpcyBhcHByb3ByaWF0ZSBmb3IgaXRzCisvLyBjb21iaW5hdGlvbiBvZiBvcGVyYXRp
b24gYW5kIG9wZXJhbmQgdHlwZS4KKy8vCisvLyBSZXR1cm5zIGZhbHNlIGluIG5vdGhpbmcgbWFr
ZXMgc2Vuc2UuCisvLworYm9vbCBUSW50ZXJtVW5hcnk6OnByb21vdGUoVEluZm9TaW5rJikKK3sK
KyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDoKKyAgICAgICAg
ICAgIGlmIChvcGVyYW5kLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcE5l
Z2F0aXZlOgorICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6CisgICAgICAgIGNhc2UgRU9w
UG9zdERlY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6CisgICAgICAgIGNh
c2UgRU9wUHJlRGVjcmVtZW50OgorICAgICAgICAgICAgaWYgKG9wZXJhbmQtPmdldEJhc2ljVHlw
ZSgpID09IEVidEJvb2wpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgIC8vIG9wZXJhdG9ycyBmb3IgYnVpbHQtaW5zIGFyZSBh
bHJlYWR5IHR5cGUgY2hlY2tlZCBhZ2FpbnN0IHRoZWlyIHByb3RvdHlwZQorICAgICAgICBjYXNl
IEVPcEFueToKKyAgICAgICAgY2FzZSBFT3BBbGw6CisgICAgICAgIGNhc2UgRU9wVmVjdG9yTG9n
aWNhbE5vdDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBpZiAob3BlcmFuZC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHNldFR5cGUob3BlcmFuZC0+
Z2V0VHlwZSgpKTsKKyAgICB0eXBlLnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKKy8vCisvLyBFc3RhYmxpc2hlcyB0aGUgdHlwZSBvZiB0aGUgcmVz
dWx0YW50IG9wZXJhdGlvbiwgYXMgd2VsbCBhcworLy8gbWFrZXMgdGhlIG9wZXJhdG9yIHRoZSBj
b3JyZWN0IG9uZSBmb3IgdGhlIG9wZXJhbmRzLgorLy8KKy8vIFJldHVybnMgZmFsc2UgaWYgb3Bl
cmF0b3IgY2FuJ3Qgd29yayBvbiBvcGVyYW5kcy4KKy8vCitib29sIFRJbnRlcm1CaW5hcnk6OnBy
b21vdGUoVEluZm9TaW5rJiBpbmZvU2luaykKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIG9ubHkg
aGFuZGxlcyBzY2FsYXJzLCB2ZWN0b3JzLCBhbmQgbWF0cmljZXMuCisgICAgaWYgKGxlZnQtPmlz
QXJyYXkoKSB8fCByaWdodC0+aXNBcnJheSgpKSB7CisgICAgICAgIGluZm9TaW5rLmluZm8ubWVz
c2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiSW52YWxpZCBvcGVyYXRpb24g
Zm9yIGFycmF5cyIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gR0xT
TCBFUyAyLjAgZG9lcyBub3Qgc3VwcG9ydCBpbXBsaWNpdCB0eXBlIGNhc3RpbmcuCisgICAgLy8g
U28gdGhlIGJhc2ljIHR5cGUgc2hvdWxkIGFsd2F5cyBtYXRjaC4KKyAgICBpZiAobGVmdC0+Z2V0
QmFzaWNUeXBlKCkgIT0gcmlnaHQtPmdldEJhc2ljVHlwZSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAvLworICAgIC8vIEJhc2UgYXNzdW1wdGlvbjogIGp1c3QgbWFrZSB0aGUgdHlw
ZSB0aGUgc2FtZSBhcyB0aGUgbGVmdAorICAgIC8vIG9wZXJhbmQuICBUaGVuIG9ubHkgZGV2aWF0
aW9ucyBmcm9tIHRoaXMgbmVlZCBiZSBjb2RlZC4KKyAgICAvLworICAgIHNldFR5cGUobGVmdC0+
Z2V0VHlwZSgpKTsKKworICAgIC8vIFRoZSByZXN1bHQgZ2V0cyBwcm9tb3RlZCB0byB0aGUgaGln
aGVzdCBwcmVjaXNpb24uCisgICAgVFByZWNpc2lvbiBoaWdoZXJQcmVjaXNpb24gPSBHZXRIaWdo
ZXJQcmVjaXNpb24obGVmdC0+Z2V0UHJlY2lzaW9uKCksIHJpZ2h0LT5nZXRQcmVjaXNpb24oKSk7
CisgICAgZ2V0VHlwZVBvaW50ZXIoKS0+c2V0UHJlY2lzaW9uKGhpZ2hlclByZWNpc2lvbik7CisK
KyAgICAvLyBCaW5hcnkgb3BlcmF0aW9ucyByZXN1bHRzIGluIHRlbXBvcmFyeSB2YXJpYWJsZXMg
dW5sZXNzIGJvdGgKKyAgICAvLyBvcGVyYW5kcyBhcmUgY29uc3QuCisgICAgaWYgKGxlZnQtPmdl
dFF1YWxpZmllcigpICE9IEV2cUNvbnN0IHx8IHJpZ2h0LT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFD
b25zdCkgeworICAgICAgICBnZXRUeXBlUG9pbnRlcigpLT5zZXRRdWFsaWZpZXIoRXZxVGVtcG9y
YXJ5KTsKKyAgICB9CisKKyAgICBpbnQgc2l6ZSA9IHN0ZDo6bWF4KGxlZnQtPmdldE5vbWluYWxT
aXplKCksIHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpKTsKKworICAgIC8vCisgICAgLy8gQWxsIHNj
YWxhcnMuIENvZGUgYWZ0ZXIgdGhpcyB0ZXN0IGFzc3VtZXMgdGhpcyBjYXNlIGlzIHJlbW92ZWQh
CisgICAgLy8KKyAgICBpZiAoc2l6ZSA9PSAxKSB7CisgICAgICAgIHN3aXRjaCAob3ApIHsKKyAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBQcm9tb3RlIHRvIGNvbmRpdGlvbmFsCisgICAg
ICAgICAgICAvLworICAgICAgICAgICAgY2FzZSBFT3BFcXVhbDoKKyAgICAgICAgICAgIGNhc2Ug
RU9wTm90RXF1YWw6CisgICAgICAgICAgICBjYXNlIEVPcExlc3NUaGFuOgorICAgICAgICAgICAg
Y2FzZSBFT3BHcmVhdGVyVGhhbjoKKyAgICAgICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoK
KyAgICAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKKyAgICAgICAgICAgICAgICBz
ZXRUeXBlKFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCkpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gQW5kIGFuZCBPciBvcGVyYXRl
IG9uIGNvbmRpdGlvbmFscworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIGNhc2UgRU9wTG9n
aWNhbEFuZDoKKyAgICAgICAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgorICAgICAgICAgICAgICAg
IC8vIEJvdGggb3BlcmFuZHMgbXVzdCBiZSBvZiB0eXBlIGJvb2wuCisgICAgICAgICAgICAgICAg
aWYgKGxlZnQtPmdldEJhc2ljVHlwZSgpICE9IEVidEJvb2wgfHwgcmlnaHQtPmdldEJhc2ljVHlw
ZSgpICE9IEVidEJvb2wpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICBzZXRUeXBlKFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCkpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8v
IElmIHdlIHJlYWNoIGhlcmUsIGF0IGxlYXN0IG9uZSBvZiB0aGUgb3BlcmFuZHMgaXMgdmVjdG9y
IG9yIG1hdHJpeC4KKyAgICAvLyBUaGUgb3RoZXIgb3BlcmFuZCBjb3VsZCBiZSBhIHNjYWxhciwg
dmVjdG9yLCBvciBtYXRyaXguCisgICAgLy8gQXJlIHRoZSBzaXplcyBjb21wYXRpYmxlPworICAg
IC8vCisgICAgaWYgKGxlZnQtPmdldE5vbWluYWxTaXplKCkgIT0gcmlnaHQtPmdldE5vbWluYWxT
aXplKCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIG5vbWluYWwgc2l6ZSBvZiBvcGVyYW5kcyBkbyBu
b3QgbWF0Y2g6CisgICAgICAgIC8vIE9uZSBvZiB0aGVtIG11c3QgYmUgc2NhbGFyLgorICAgICAg
ICBpZiAobGVmdC0+Z2V0Tm9taW5hbFNpemUoKSAhPSAxICYmIHJpZ2h0LT5nZXROb21pbmFsU2l6
ZSgpICE9IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIE9wZXJhdG9y
IGNhbm5vdCBiZSBvZiB0eXBlIHB1cmUgYXNzaWdubWVudC4KKyAgICAgICAgaWYgKG9wID09IEVP
cEFzc2lnbiB8fCBvcCA9PSBFT3BJbml0aWFsaXplKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIC8vCisgICAgLy8gQ2FuIHRoZXNlIHR3byBvcGVyYW5kcyBiZSBjb21i
aW5lZD8KKyAgICAvLworICAgIFRCYXNpY1R5cGUgYmFzaWNUeXBlID0gbGVmdC0+Z2V0QmFzaWNU
eXBlKCk7CisgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIEVPcE11bDoKKyAgICAgICAg
ICAgIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkgeworICAgICAg
ICAgICAgICAgIGlmIChsZWZ0LT5pc1ZlY3RvcigpKQorICAgICAgICAgICAgICAgICAgICBvcCA9
IEVPcFZlY3RvclRpbWVzTWF0cml4OworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzU2NhbGFyOworICAgICAgICAgICAgICAgICAg
ICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3Jhcnks
IHNpemUsIHRydWUpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYg
KGxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHJpZ2h0LT5pc1ZlY3RvcigpKSB7CisgICAgICAgICAgICAgICAgICAgIG9wID0gRU9w
TWF0cml4VGltZXNWZWN0b3I7CisgICAgICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFz
aWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwgZmFsc2UpKTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJp
eFRpbWVzU2NhbGFyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
bGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgICAg
IG9wID0gRU9wTWF0cml4VGltZXNNYXRyaXg7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFsZWZ0
LT5pc01hdHJpeCgpICYmICFyaWdodC0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgICAgIGlm
IChsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5pc1ZlY3RvcigpKSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIGxlYXZlIGFzIGNvbXBvbmVudCBwcm9kdWN0CisgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChsZWZ0LT5pc1ZlY3RvcigpIHx8IHJpZ2h0LT5pc1ZlY3RvcigpKSB7CisgICAgICAg
ICAgICAgICAgICAgIG9wID0gRU9wVmVjdG9yVGltZXNTY2FsYXI7CisgICAgICAgICAgICAgICAg
ICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFy
eSwgc2l6ZSwgZmFsc2UpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxF
cnJvciwgZ2V0TGluZSgpLCAiTWlzc2luZyBlbHNlcyIpOworICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEVPcE11bEFzc2lnbjoKKyAgICAgICAgICAgIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiByaWdo
dC0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5pc1ZlY3RvcigpKQor
ICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOworICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5pc01hdHJpeCgp
ICYmICFyaWdodC0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgICAgIGlmIChyaWdodC0+aXNW
ZWN0b3IoKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc1Nj
YWxhckFzc2lnbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGxl
ZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgICAgICBv
cCA9IEVPcE1hdHJpeFRpbWVzTWF0cml4QXNzaWduOworICAgICAgICAgICAgfSBlbHNlIGlmICgh
bGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAobGVmdC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNWZWN0b3IoKSkgeworICAgICAgICAg
ICAgICAgICAgICAvLyBsZWF2ZSBhcyBjb21wb25lbnQgcHJvZHVjdAorICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAobGVmdC0+aXNWZWN0b3IoKSB8fCByaWdodC0+aXNWZWN0b3IoKSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoISBsZWZ0LT5pc1ZlY3RvcigpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcFZlY3Rv
clRpbWVzU2NhbGFyQXNzaWduOworICAgICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJh
c2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUsIGZhbHNlKSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBp
bmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIk1p
c3NpbmcgZWxzZXMiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcEFzc2lnbjoKKyAgICAg
ICAgY2FzZSBFT3BJbml0aWFsaXplOgorICAgICAgICBjYXNlIEVPcEFkZDoKKyAgICAgICAgY2Fz
ZSBFT3BTdWI6CisgICAgICAgIGNhc2UgRU9wRGl2OgorICAgICAgICBjYXNlIEVPcEFkZEFzc2ln
bjoKKyAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246CisgICAgICAgIGNhc2UgRU9wRGl2QXNzaWdu
OgorICAgICAgICAgICAgaWYgKChsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc1ZlY3Rvcigp
KSB8fAorICAgICAgICAgICAgICAgIChsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5pc01hdHJp
eCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBzZXRUeXBl
KFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUsIGxl
ZnQtPmlzTWF0cml4KCkgfHwgcmlnaHQtPmlzTWF0cml4KCkpKTsKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGNhc2UgRU9wRXF1YWw6CisgICAgICAgIGNhc2UgRU9wTm90RXF1YWw6Cisg
ICAgICAgIGNhc2UgRU9wTGVzc1RoYW46CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46Cisg
ICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhh
bkVxdWFsOgorICAgICAgICAgICAgaWYgKChsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc1Zl
Y3RvcigpKSB8fAorICAgICAgICAgICAgICAgIChsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5p
c01hdHJpeCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBz
ZXRUeXBlKFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCkpOworICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ29tcGFyZVN0cnVjdChjb25zdCBUVHlw
ZSYgbGVmdE5vZGVUeXBlLCBDb25zdGFudFVuaW9uKiByaWdodFVuaW9uQXJyYXksIENvbnN0YW50
VW5pb24qIGxlZnRVbmlvbkFycmF5KQoreworICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9
IGxlZnROb2RlVHlwZS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7CisKKyAgICBzaXplX3Qgc3RydWN0
U2l6ZSA9IGZpZWxkcy5zaXplKCk7CisgICAgc2l6ZV90IGluZGV4ID0gMDsKKworICAgIGZvciAo
c2l6ZV90IGogPSAwOyBqIDwgc3RydWN0U2l6ZTsgaisrKSB7CisgICAgICAgIHNpemVfdCBzaXpl
ID0gZmllbGRzW2pdLT50eXBlKCktPmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChmaWVsZHNbal0tPnR5
cGUoKS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7CisgICAgICAgICAgICAgICAgaWYg
KCFDb21wYXJlU3RydWN0dXJlKCooZmllbGRzW2pdLT50eXBlKCkpLCAmcmlnaHRVbmlvbkFycmF5
W2luZGV4XSwgJmxlZnRVbmlvbkFycmF5W2luZGV4XSkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGxl
ZnRVbmlvbkFycmF5W2luZGV4XSAhPSByaWdodFVuaW9uQXJyYXlbaW5kZXhdKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBD
b21wYXJlU3RydWN0dXJlKGNvbnN0IFRUeXBlJiBsZWZ0Tm9kZVR5cGUsIENvbnN0YW50VW5pb24q
IHJpZ2h0VW5pb25BcnJheSwgQ29uc3RhbnRVbmlvbiogbGVmdFVuaW9uQXJyYXkpCit7CisgICAg
aWYgKGxlZnROb2RlVHlwZS5pc0FycmF5KCkpIHsKKyAgICAgICAgVFR5cGUgdHlwZVdpdGhvdXRB
cnJheW5lc3MgPSBsZWZ0Tm9kZVR5cGU7CisgICAgICAgIHR5cGVXaXRob3V0QXJyYXluZXNzLmNs
ZWFyQXJyYXluZXNzKCk7CisKKyAgICAgICAgc2l6ZV90IGFycmF5U2l6ZSA9IGxlZnROb2RlVHlw
ZS5nZXRBcnJheVNpemUoKTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5
U2l6ZTsgKytpKSB7CisgICAgICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gdHlwZVdpdGhvdXRBcnJh
eW5lc3MuZ2V0T2JqZWN0U2l6ZSgpICogaTsKKyAgICAgICAgICAgIGlmICghQ29tcGFyZVN0cnVj
dCh0eXBlV2l0aG91dEFycmF5bmVzcywgJnJpZ2h0VW5pb25BcnJheVtvZmZzZXRdLCAmbGVmdFVu
aW9uQXJyYXlbb2Zmc2V0XSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybiBDb21wYXJlU3RydWN0KGxlZnROb2RlVHlw
ZSwgcmlnaHRVbmlvbkFycmF5LCBsZWZ0VW5pb25BcnJheSk7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworLy8KKy8vIFRoZSBmb2xkIGZ1bmN0aW9ucyBzZWUgaWYgYW4gb3BlcmF0aW9uIG9uIGEg
Y29uc3RhbnQgY2FuIGJlIGRvbmUgaW4gcGxhY2UsCisvLyB3aXRob3V0IGdlbmVyYXRpbmcgcnVu
LXRpbWUgY29kZS4KKy8vCisvLyBSZXR1cm5zIHRoZSBub2RlIHRvIGtlZXAgdXNpbmcsIHdoaWNo
IG1heSBvciBtYXkgbm90IGJlIHRoZSBub2RlIHBhc3NlZCBpbi4KKy8vCisKK1RJbnRlcm1UeXBl
ZCogVEludGVybUNvbnN0YW50VW5pb246OmZvbGQoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQq
IGNvbnN0YW50Tm9kZSwgVEluZm9TaW5rJiBpbmZvU2luaykKK3sKKyAgICBDb25zdGFudFVuaW9u
ICp1bmlvbkFycmF5ID0gZ2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKyAgICBzaXplX3Qgb2JqZWN0
U2l6ZSA9IGdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CisKKyAgICBpZiAoY29uc3RhbnROb2Rl
KSB7ICAvLyBiaW5hcnkgb3BlcmF0aW9ucworICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAq
bm9kZSA9IGNvbnN0YW50Tm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisgICAgICAgIENvbnN0
YW50VW5pb24gKnJpZ2h0VW5pb25BcnJheSA9IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7
CisgICAgICAgIFRUeXBlIHJldHVyblR5cGUgPSBnZXRUeXBlKCk7CisKKyAgICAgICAgLy8gZm9y
IGEgY2FzZSBsaWtlIGZsb2F0IGYgPSAxLjIgKyB2ZWM0KDIsMyw0LDUpOworICAgICAgICBpZiAo
Y29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpID09IDEgJiYgb2JqZWN0U2l6
ZSA+IDEpIHsKKyAgICAgICAgICAgIHJpZ2h0VW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
W29iamVjdFNpemVdOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RT
aXplOyArK2kpCisgICAgICAgICAgICAgICAgcmlnaHRVbmlvbkFycmF5W2ldID0gKm5vZGUtPmdl
dFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAgICAgICAgICByZXR1cm5UeXBlID0gZ2V0VHlwZSgp
OworICAgICAgICB9IGVsc2UgaWYgKGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNp
emUoKSA+IDEgJiYgb2JqZWN0U2l6ZSA9PSAxKSB7CisgICAgICAgICAgICAvLyBmb3IgYSBjYXNl
IGxpa2UgZmxvYXQgZiA9IHZlYzQoMiwzLDQsNSkgKyAxLjI7CisgICAgICAgICAgICB1bmlvbkFy
cmF5ID0gbmV3IENvbnN0YW50VW5pb25bY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0
U2l6ZSgpXTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29uc3RhbnROb2Rl
LT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgdW5pb25B
cnJheVtpXSA9ICpnZXRVbmlvbkFycmF5UG9pbnRlcigpOworICAgICAgICAgICAgcmV0dXJuVHlw
ZSA9IG5vZGUtPmdldFR5cGUoKTsKKyAgICAgICAgICAgIG9iamVjdFNpemUgPSBjb25zdGFudE5v
ZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CisgICAgICAgIH0KKworICAgICAgICBDb25z
dGFudFVuaW9uKiB0ZW1wQ29uc3RBcnJheSA9IDA7CisgICAgICAgIFRJbnRlcm1Db25zdGFudFVu
aW9uICp0ZW1wTm9kZTsKKworICAgICAgICBib29sIGJvb2xOb2RlRmxhZyA9IGZhbHNlOworICAg
ICAgICBzd2l0Y2gob3ApIHsKKyAgICAgICAgICAgIGNhc2UgRU9wQWRkOgorICAgICAgICAgICAg
ICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAg
ICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCisgICAgICAgICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgICAg
ICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldICsgcmlnaHRVbmlvbkFycmF5
W2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgRU9wU3ViOgorICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNW
QysrNi4wCisgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0
U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1
bmlvbkFycmF5W2ldIC0gcmlnaHRVbmlvbkFycmF5W2ldOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBFT3BNdWw6CisgICAgICAg
ICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyOgorICAgICAgICAgICAgY2FzZSBFT3BNYXRy
aXhUaW1lc1NjYWxhcjoKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uW29iamVjdFNpemVdOworICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMr
KzYuMAorICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNp
emU7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5p
b25BcnJheVtpXSAqIHJpZ2h0VW5pb25BcnJheVtpXTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4
OgorICAgICAgICAgICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0Rmxv
YXQgfHwgbm9kZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5l
KCksICJDb25zdGFudCBGb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciBtYXRyaXggbXVsdGlwbHki
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAorICAgICAgICAgICAgICAgICAgICBp
bnQgc2l6ZSA9IGdldE5vbWluYWxTaXplKCk7CisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25z
dEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bc2l6ZSpzaXplXTsKKyAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgc2l6ZTsgcm93KyspIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoaW50IGNvbHVtbiA9IDA7IGNvbHVtbiA8IHNpemU7IGNvbHVtbisrKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbc2l6ZSAqIGNvbHVt
biArIHJvd10uc2V0RkNvbnN0KDAuMGYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRlbXBDb25zdEFycmF5W3NpemUgKiBjb2x1bW4gKyByb3ddLnNldEZDb25zdCh0ZW1w
Q29uc3RBcnJheVtzaXplICogY29sdW1uICsgcm93XS5nZXRGQ29uc3QoKSArIHVuaW9uQXJyYXlb
aSAqIHNpemUgKyByb3ddLmdldEZDb25zdCgpICogKHJpZ2h0VW5pb25BcnJheVtjb2x1bW4gKiBz
aXplICsgaV0uZ2V0RkNvbnN0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVPcERp
djoKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29i
amVjdFNpemVdOworICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAorICAgICAg
ICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkp
IHsKKyAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICAgICAgaWYgKHJpZ2h0
VW5pb25BcnJheVtpXSA9PSAwLjBmKSB7CisgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmlu
Zm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgZ2V0TGluZSgpLCAiRGl2aWRlIGJ5IHplcm8gZXJy
b3IgZHVyaW5nIGNvbnN0YW50IGZvbGRpbmciKTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENv
bnN0QXJyYXlbaV0uc2V0RkNvbnN0KHVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0KCkgPCAwID8gLUZM
VF9NQVggOiBGTFRfTUFYKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KHVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0
KCkgLyByaWdodFVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0KCkpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgICAgICBpZiAocmln
aHRVbmlvbkFycmF5W2ldID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5m
by5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCBnZXRMaW5lKCksICJEaXZpZGUgYnkgemVybyBlcnJv
ciBkdXJpbmcgY29uc3RhbnQgZm9sZGluZyIpOworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheVtpXS5zZXRJQ29uc3QoSU5UX01BWCk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldElDb25zdCh1bmlvbkFycmF5
W2ldLmdldElDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdldElDb25zdCgpKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
aW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJD
b25zdGFudCBmb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciBcIi9cIiIpOworICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVjdG9yOgorICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRGbG9hdCkgeworICAgICAgICAgICAgICAgICAgICBp
bmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIkNv
bnN0YW50IEZvbGRpbmcgY2Fubm90IGJlIGRvbmUgZm9yIG1hdHJpeCB0aW1lcyB2ZWN0b3IiKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bZ2V0Tm9taW5hbFNp
emUoKV07CisKKyAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKKyAgICAgICAg
ICAgICAgICAgICAgZm9yIChpbnQgc2l6ZSA9IGdldE5vbWluYWxTaXplKCksIGkgPSAwOyBpIDwg
c2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5z
ZXRGQ29uc3QoMC4wZik7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsg
aiA8IHNpemU7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFy
cmF5W2ldLnNldEZDb25zdCh0ZW1wQ29uc3RBcnJheVtpXS5nZXRGQ29uc3QoKSArICgodW5pb25B
cnJheVtqKnNpemUgKyBpXS5nZXRGQ29uc3QoKSkgKiByaWdodFVuaW9uQXJyYXlbal0uZ2V0RkNv
bnN0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRlbXBOb2RlID0gbmV3IFRJ
bnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCBub2RlLT5nZXRUeXBlKCkpOworICAg
ICAgICAgICAgICAgIHRlbXBOb2RlLT5zZXRMaW5lKGdldExpbmUoKSk7CisKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdGVtcE5vZGU7CisKKyAgICAgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNN
YXRyaXg6CisgICAgICAgICAgICAgICAgaWYgKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBF
YnRGbG9hdCkgeworICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVBy
ZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIkNvbnN0YW50IEZvbGRpbmcgY2Fubm90IGJl
IGRvbmUgZm9yIHZlY3RvciB0aW1lcyBtYXRyaXgiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXkgPSBuZXcgQ29uc3RhbnRVbmlvbltnZXROb21pbmFsU2l6ZSgpXTsKKyAgICAgICAgICAgICAg
ICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgc2l6
ZSA9IGdldE5vbWluYWxTaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QoMC4wZik7CisgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHNpemU7IGorKykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCh0ZW1wQ29u
c3RBcnJheVtpXS5nZXRGQ29uc3QoKSArICgodW5pb25BcnJheVtqXS5nZXRGQ29uc3QoKSkgKiBy
aWdodFVuaW9uQXJyYXlbaSpzaXplICsgal0uZ2V0RkNvbnN0KCkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiAv
LyB0aGlzIGNvZGUgaXMgd3JpdHRlbiBmb3IgcG9zc2libGUgZnV0dXJlIHVzZSwgd2lsbCBub3Qg
Z2V0IGV4ZWN1dGVkIGN1cnJlbnRseQorICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0g
bmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAgICAgICAgICAgICAgey8vIHN1cHBv
cnQgTVNWQysrNi4wCisgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
b2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlb
aV0gPSB1bmlvbkFycmF5W2ldICYmIHJpZ2h0VW5pb25BcnJheVtpXTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgRU9wTG9naWNh
bE9yOiAvLyB0aGlzIGNvZGUgaXMgd3JpdHRlbiBmb3IgcG9zc2libGUgZnV0dXJlIHVzZSwgd2ls
bCBub3QgZ2V0IGV4ZWN1dGVkIGN1cnJlbnRseQorICAgICAgICAgICAgICAgIHRlbXBDb25zdEFy
cmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAgICAgICAgICAgICAgey8v
IHN1cHBvcnQgTVNWQysrNi4wCisgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldIHx8IHJpZ2h0VW5pb25BcnJheVtpXTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgRU9w
TG9naWNhbFhvcjoKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFu
dFVuaW9uW29iamVjdFNpemVdOworICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYu
MAorICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7
IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2lj
VHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEVidEJvb2w6IHRlbXBDb25zdEFycmF5W2ldLnNl
dEJDb25zdCgodW5pb25BcnJheVtpXSA9PSByaWdodFVuaW9uQXJyYXlbaV0pID8gZmFsc2UgOiB0
cnVlKTsgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1
bHQgbWlzc2luZyIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEVPcExlc3NUaGFuOgor
ICAgICAgICAgICAgICAgIGFzc2VydChvYmplY3RTaXplID09IDEpOworICAgICAgICAgICAgICAg
IHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAg
dGVtcENvbnN0QXJyYXktPnNldEJDb25zdCgqdW5pb25BcnJheSA8ICpyaWdodFVuaW9uQXJyYXkp
OworICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmlu
ZWQsIEV2cUNvbnN0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
RU9wR3JlYXRlclRoYW46CisgICAgICAgICAgICAgICAgYXNzZXJ0KG9iamVjdFNpemUgPT0gMSk7
CisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsK
KyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KCp1bmlvbkFycmF5ID4g
KnJpZ2h0VW5pb25BcnJheSk7CisgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IFRUeXBlKEVi
dEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgYXNzZXJ0KG9iamVjdFNpemUgPT0gMSk7CisgICAgICAgICAgICAg
ICAgICAgIENvbnN0YW50VW5pb24gY29uc3RhbnQ7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0
YW50LnNldEJDb25zdCgqdW5pb25BcnJheSA+ICpyaWdodFVuaW9uQXJyYXkpOworICAgICAgICAg
ICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAg
ICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KCFjb25zdGFudC5nZXRCQ29u
c3QoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBUVHlwZShFYnRCb29sLCBF
YnBVbmRlZmluZWQsIEV2cUNvbnN0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KG9iamVjdFNpemUgPT0g
MSk7CisgICAgICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gY29uc3RhbnQ7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnN0YW50LnNldEJDb25zdCgqdW5pb25BcnJheSA8ICpyaWdodFVuaW9u
QXJyYXkpOworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFu
dFVuaW9uWzFdOworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0
KCFjb25zdGFudC5nZXRCQ29uc3QoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUg
PSBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIEVPcEVx
dWFsOgorICAgICAgICAgICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0
U3RydWN0KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghQ29tcGFyZVN0cnVjdHVyZShub2Rl
LT5nZXRUeXBlKCksIG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCksIHVuaW9uQXJyYXkpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbE5vZGVGbGFnID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG9iamVjdFNpemU7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaW9uQXJy
YXlbaV0gIT0gcmlnaHRVbmlvbkFycmF5W2ldKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbE5vZGVGbGFnID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsgIC8vIGJyZWFrIG91dCBvZiBmb3IgbG9vcAorICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWJvb2xOb2RlRmxhZykgeworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJh
eS0+c2V0QkNvbnN0KHRydWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdChmYWxz
ZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdGVtcE5vZGUgPSBuZXcg
VEludGVybUNvbnN0YW50VW5pb24odGVtcENvbnN0QXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QpKTsKKyAgICAgICAgICAgICAgICB0ZW1wTm9kZS0+c2V0TGluZShn
ZXRMaW5lKCkpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOworCisgICAgICAg
ICAgICBjYXNlIEVPcE5vdEVxdWFsOgorICAgICAgICAgICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0
QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChDb21w
YXJlU3RydWN0dXJlKG5vZGUtPmdldFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIo
KSwgdW5pb25BcnJheSkpCisgICAgICAgICAgICAgICAgICAgICAgICBib29sTm9kZUZsYWcgPSB0
cnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodW5pb25BcnJheVtpXSA9PSByaWdodFVuaW9uQXJyYXlbaV0pIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sTm9kZUZsYWcgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOyAgLy8gYnJlYWsgb3V0IG9mIGZvciBsb29wCisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFd
OworICAgICAgICAgICAgICAgIGlmICghYm9vbE5vZGVGbGFnKSB7CisgICAgICAgICAgICAgICAg
ICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QodHJ1ZSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJh
eS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgVFR5
cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCkpOworICAgICAgICAgICAgICAgIHRl
bXBOb2RlLT5zZXRMaW5lKGdldExpbmUoKSk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdGVt
cE5vZGU7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgaW5mb1Npbmsu
aW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJJbnZhbGlkIG9w
ZXJhdG9yIGZvciBjb25zdGFudCBmb2xkaW5nIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIH0KKyAgICAgICAgdGVtcE5vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24o
dGVtcENvbnN0QXJyYXksIHJldHVyblR5cGUpOworICAgICAgICB0ZW1wTm9kZS0+c2V0TGluZShn
ZXRMaW5lKCkpOworCisgICAgICAgIHJldHVybiB0ZW1wTm9kZTsKKyAgICB9IGVsc2UgeworICAg
ICAgICAvLworICAgICAgICAvLyBEbyB1bmFyeSBvcGVyYXRpb25zCisgICAgICAgIC8vCisgICAg
ICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpuZXdOb2RlID0gMDsKKyAgICAgICAgQ29uc3RhbnRV
bmlvbiogdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKKyAgICAgICAg
ICAgIHN3aXRjaChvcCkgeworICAgICAgICAgICAgICAgIGNhc2UgRU9wTmVnYXRpdmU6CisgICAg
ICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OiB0ZW1wQ29uc3RBcnJheVtpXS5zZXRG
Q29uc3QoLXVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0KCkpOyBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgRWJ0SW50OiAgIHRlbXBDb25zdEFycmF5W2ldLnNldElDb25zdCgtdW5p
b25BcnJheVtpXS5nZXRJQ29uc3QoKSk7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3Nh
Z2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIlVuYXJ5IG9wZXJhdGlvbiBub3Qg
Zm9sZGVkIGludG8gY29uc3RhbnQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6IC8vIHRoaXMgY29kZSBpcyB3cml0
dGVuIGZvciBwb3NzaWJsZSBmdXR1cmUgdXNlLCB3aWxsIG5vdCBnZXQgZXhlY3V0ZWQgY3VycmVu
dGx5CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6ICB0ZW1wQ29uc3RBcnJh
eVtpXS5zZXRCQ29uc3QoIXVuaW9uQXJyYXlbaV0uZ2V0QkNvbnN0KCkpOyBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJV
bmFyeSBvcGVyYXRpb24gbm90IGZvbGRlZCBpbnRvIGNvbnN0YW50Iik7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbmV3
Tm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgZ2V0VHlwZSgp
KTsKKyAgICAgICAgbmV3Tm9kZS0+c2V0TGluZShnZXRMaW5lKCkpOworICAgICAgICByZXR1cm4g
bmV3Tm9kZTsKKyAgICB9Cit9CisKK1RJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6cHJvbW90
ZUNvbnN0YW50VW5pb24oVEJhc2ljVHlwZSBwcm9tb3RlVG8sIFRJbnRlcm1Db25zdGFudFVuaW9u
KiBub2RlKQoreworICAgIHNpemVfdCBzaXplID0gbm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNp
emUoKTsKKworICAgIENvbnN0YW50VW5pb24gKmxlZnRVbmlvbkFycmF5ID0gbmV3IENvbnN0YW50
VW5pb25bc2l6ZV07CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykgewor
CisgICAgICAgIHN3aXRjaCAocHJvbW90ZVRvKSB7CisgICAgICAgICAgICBjYXNlIEVidEZsb2F0
OgorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OgorICAgICAgICAgICAgICAgICAg
ICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0RkNvbnN0KHN0YXRpY19jYXN0PGZsb2F0Pihub2Rl
LT5nZXRJQ29uc3QoaSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0
VW5pb25BcnJheVtpXS5zZXRGQ29uc3Qoc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vZGUtPmdldEJDb25z
dChpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJh
eVtpXS5zZXRGQ29uc3Qoc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vZGUtPmdldEZDb25zdChpKSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZp
eEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIkNhbm5vdCBwcm9tb3RlIik7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAg
ICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFy
cmF5W2ldLnNldElDb25zdChzdGF0aWNfY2FzdDxpbnQ+KG5vZGUtPmdldElDb25zdChpKSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
RWJ0Qm9vbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldElD
b25zdChzdGF0aWNfY2FzdDxpbnQ+KG5vZGUtPmdldEJDb25zdChpKSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRJQ29uc3Qoc3RhdGlj
X2Nhc3Q8aW50Pihub2RlLT5nZXRGQ29uc3QoaSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAg
ICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5n
ZXRMaW5lKCksICJDYW5ub3QgcHJvbW90ZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBFYnRCb29sOgorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0VHlw
ZSgpLmdldEJhc2ljVHlwZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0QkNvbnN0KG5vZGUt
PmdldElDb25zdChpKSAhPSAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAgICAgICAgICAgICAgICBs
ZWZ0VW5pb25BcnJheVtpXS5zZXRCQ29uc3Qobm9kZS0+Z2V0QkNvbnN0KGkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0
OgorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0QkNvbnN0KG5v
ZGUtPmdldEZDb25zdChpKSAhPSAwLjBmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAg
aW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRMaW5l
KCksICJDYW5ub3QgcHJvbW90ZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4
SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiSW5jb3JyZWN0IGRhdGEgdHlwZSBmb3Vu
ZCIpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICB9CisKKyAg
ICBjb25zdCBUVHlwZSYgdCA9IG5vZGUtPmdldFR5cGUoKTsKKworICAgIHJldHVybiBhZGRDb25z
dGFudFVuaW9uKGxlZnRVbmlvbkFycmF5LCBUVHlwZShwcm9tb3RlVG8sIHQuZ2V0UHJlY2lzaW9u
KCksIHQuZ2V0UXVhbGlmaWVyKCksIHQuZ2V0Tm9taW5hbFNpemUoKSwgdC5pc01hdHJpeCgpLCB0
LmlzQXJyYXkoKSksIG5vZGUtPmdldExpbmUoKSk7Cit9CisKKy8vIHN0YXRpYworVFN0cmluZyBU
SW50ZXJtVHJhdmVyc2VyOjpoYXNoKGNvbnN0IFRTdHJpbmcmIG5hbWUsIFNoSGFzaEZ1bmN0aW9u
NjQgaGFzaEZ1bmN0aW9uKQoreworICAgIGlmIChoYXNoRnVuY3Rpb24gPT0gTlVMTCB8fCBuYW1l
LmVtcHR5KCkpCisgICAgICAgIHJldHVybiBuYW1lOworICAgIGtocm9ub3NfdWludDY0X3QgbnVt
YmVyID0gKCpoYXNoRnVuY3Rpb24pKG5hbWUuY19zdHIoKSwgbmFtZS5sZW5ndGgoKSk7CisgICAg
VFN0cmluZ1N0cmVhbSBzdHJlYW07CisgICAgc3RyZWFtIDw8IEhBU0hFRF9OQU1FX1BSRUZJWCA8
PCBzdGQ6OmhleCA8PCBudW1iZXI7CisgICAgVFN0cmluZyBoYXNoZWROYW1lID0gc3RyZWFtLnN0
cigpOworICAgIHJldHVybiBoYXNoZWROYW1lOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTU1hcC5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTU1hcC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEz
MDg2NzE1MTRjYzYzZThlNzBhMDNlMzg2OGI1Nzk1MWI4NWU5ODcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9NTWFwLmgK
QEAgLTAsMCArMSw1NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfTU1BUF9JTkNM
VURFRF8KKyNkZWZpbmUgX01NQVBfSU5DTFVERURfCisKKy8vCisvLyBFbmNhcHN1bGF0ZSBtZW1v
cnkgbWFwcGVkIGZpbGVzCisvLworCitjbGFzcyBUTU1hcCB7CitwdWJsaWM6CisgICAgVE1NYXAo
Y29uc3QgY2hhciogZmlsZU5hbWUpIDogCisgICAgICAgIGZTaXplKC0xKSwgLy8gLTEgaXMgdGhl
IGVycm9yIHZhbHVlIHJldHVybmVkIGJ5IEdldEZpbGVTaXplKCkKKyAgICAgICAgZnAoTlVMTCks
CisgICAgICAgIGZCdWZmKDApICAgLy8gMCBpcyB0aGUgZXJyb3IgdmFsdWUgcmV0dXJuZWQgYnkg
TWFwVmlld09mRmlsZSgpCisgICAgeworICAgICAgICBpZiAoKGZwID0gZm9wZW4oZmlsZU5hbWUs
ICJyIikpID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNoYXIgYyA9IGdl
dGMoZnApOworICAgICAgICBmU2l6ZSA9IDA7CisgICAgICAgIHdoaWxlIChjICE9IEVPRikgewor
ICAgICAgICAgICAgZlNpemUrKzsKKyAgICAgICAgICAgIGMgPSBnZXRjKGZwKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoYyA9PSBFT0YpCisgICAgICAgICAgICBmU2l6ZSsrOworICAgICAgICBy
ZXdpbmQoZnApOworICAgICAgICBmQnVmZiA9IChjaGFyKiltYWxsb2Moc2l6ZW9mKGNoYXIpICog
ZlNpemUpOworICAgICAgICBpbnQgY291bnQgPSAwOworICAgICAgICBjID0gZ2V0YyhmcCk7Cisg
ICAgICAgIHdoaWxlIChjICE9IEVPRikgeworICAgICAgICAgICAgZkJ1ZmZbY291bnQrK10gPSBj
OworICAgICAgICAgICAgYyA9IGdldGMoZnApOworICAgICAgICB9CisgICAgICAgIGZCdWZmW2Nv
dW50KytdID0gYzsKKyAgICB9CisKKyAgICBjaGFyKiBnZXREYXRhKCkgeyByZXR1cm4gZkJ1ZmY7
IH0KKyAgICBpbnQgICBnZXRTaXplKCkgeyByZXR1cm4gZlNpemU7IH0KKworICAgIH5UTU1hcCgp
IHsKKyAgICAgICAgaWYgKGZwICE9IE5VTEwpCisgICAgICAgICAgICBmY2xvc2UoZnApOworICAg
IH0KKyAgICAKK3ByaXZhdGU6CisgICAgaW50ICAgICAgICAgICAgIGZTaXplOyAgICAgIC8vIHNp
emUgb2YgZmlsZSB0byBtYXAgaW4KKyAgICBGSUxFICpmcDsKKyAgICBjaGFyKiAgICAgICAgICAg
ZkJ1ZmY7ICAgICAgLy8gdGhlIGFjdHVhbCBkYXRhOworfTsKKworI2VuZGlmIC8vIF9NTUFQX0lO
Q0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmVmNjI5YzI2YjFhNDY0NTgwYzhlMmIzZGU4MGQ3MjQ0YzBkNTMyOWMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAKQEAgLTAsMCArMSwxMTUgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL01hcExvbmdWYXJpYWJs
ZU5hbWVzLmgiCisKK25hbWVzcGFjZSB7CisKK1RTdHJpbmcgbWFwTG9uZ05hbWUoc2l6ZV90IGlk
LCBjb25zdCBUU3RyaW5nJiBuYW1lLCBib29sIGlzR2xvYmFsKQoreworICAgIEFTU0VSVChuYW1l
LnNpemUoKSA+IE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFKTsKKyAgICBUU3RyaW5nU3Ry
ZWFtIHN0cmVhbTsKKyAgICBzdHJlYW0gPDwgIndlYmdsXyI7CisgICAgaWYgKGlzR2xvYmFsKQor
ICAgICAgICBzdHJlYW0gPDwgImciOworICAgIHN0cmVhbSA8PCBpZDsKKyAgICBpZiAobmFtZVsw
XSAhPSAnXycpCisgICAgICAgIHN0cmVhbSA8PCAiXyI7CisgICAgc3RyZWFtIDw8IG5hbWUuc3Vi
c3RyKDAsIE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFIC0gc3RyZWFtLnN0cigpLnNpemUo
KSk7CisgICAgcmV0dXJuIHN0cmVhbS5zdHIoKTsKK30KKworTG9uZ05hbWVNYXAqIGdMb25nTmFt
ZU1hcEluc3RhbmNlID0gTlVMTDsKKworfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitMb25n
TmFtZU1hcDo6TG9uZ05hbWVNYXAoKQorICAgIDogcmVmQ291bnQoMCkKK3sKK30KKworTG9uZ05h
bWVNYXA6On5Mb25nTmFtZU1hcCgpCit7Cit9CisKKy8vIHN0YXRpYworTG9uZ05hbWVNYXAqIExv
bmdOYW1lTWFwOjpHZXRJbnN0YW5jZSgpCit7CisgICAgaWYgKGdMb25nTmFtZU1hcEluc3RhbmNl
ID09IE5VTEwpCisgICAgICAgIGdMb25nTmFtZU1hcEluc3RhbmNlID0gbmV3IExvbmdOYW1lTWFw
OworICAgIGdMb25nTmFtZU1hcEluc3RhbmNlLT5yZWZDb3VudCsrOworICAgIHJldHVybiBnTG9u
Z05hbWVNYXBJbnN0YW5jZTsKK30KKwordm9pZCBMb25nTmFtZU1hcDo6UmVsZWFzZSgpCit7Cisg
ICAgQVNTRVJUKGdMb25nTmFtZU1hcEluc3RhbmNlID09IHRoaXMpOworICAgIEFTU0VSVChyZWZD
b3VudCA+IDApOworICAgIHJlZkNvdW50LS07CisgICAgaWYgKHJlZkNvdW50ID09IDApIHsKKyAg
ICAgICAgZGVsZXRlIGdMb25nTmFtZU1hcEluc3RhbmNlOworICAgICAgICBnTG9uZ05hbWVNYXBJ
bnN0YW5jZSA9IE5VTEw7CisgICAgfQorfQorCitjb25zdCBjaGFyKiBMb25nTmFtZU1hcDo6Rmlu
ZChjb25zdCBjaGFyKiBvcmlnaW5hbE5hbWUpIGNvbnN0Cit7CisgICAgc3RkOjptYXA8c3RkOjpz
dHJpbmcsIHN0ZDo6c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtTG9uZ05hbWVNYXAuZmlu
ZCgKKyAgICAgICAgb3JpZ2luYWxOYW1lKTsKKyAgICBpZiAoaXQgIT0gbUxvbmdOYW1lTWFwLmVu
ZCgpKQorICAgICAgICByZXR1cm4gKCppdCkuc2Vjb25kLmNfc3RyKCk7CisgICAgcmV0dXJuIE5V
TEw7Cit9CisKK3ZvaWQgTG9uZ05hbWVNYXA6Okluc2VydChjb25zdCBjaGFyKiBvcmlnaW5hbE5h
bWUsIGNvbnN0IGNoYXIqIG1hcHBlZE5hbWUpCit7CisgICAgbUxvbmdOYW1lTWFwLmluc2VydChz
dGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+Ojp2YWx1ZV90eXBlKAorICAgICAgICBv
cmlnaW5hbE5hbWUsIG1hcHBlZE5hbWUpKTsKK30KKworc2l6ZV90IExvbmdOYW1lTWFwOjpTaXpl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUxvbmdOYW1lTWFwLnNpemUoKTsKK30KKworTWFwTG9u
Z1ZhcmlhYmxlTmFtZXM6Ok1hcExvbmdWYXJpYWJsZU5hbWVzKExvbmdOYW1lTWFwKiBnbG9iYWxN
YXApCit7CisgICAgQVNTRVJUKGdsb2JhbE1hcCk7CisgICAgbUdsb2JhbE1hcCA9IGdsb2JhbE1h
cDsKK30KKwordm9pZCBNYXBMb25nVmFyaWFibGVOYW1lczo6dmlzaXRTeW1ib2woVEludGVybVN5
bWJvbCogc3ltYm9sKQoreworICAgIEFTU0VSVChzeW1ib2wgIT0gTlVMTCk7CisgICAgaWYgKHN5
bWJvbC0+Z2V0U3ltYm9sKCkuc2l6ZSgpID4gTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJWkUp
IHsKKyAgICAgICAgc3dpdGNoIChzeW1ib2wtPmdldFF1YWxpZmllcigpKSB7CisgICAgICAgICAg
Y2FzZSBFdnFWYXJ5aW5nSW46CisgICAgICAgICAgY2FzZSBFdnFWYXJ5aW5nT3V0OgorICAgICAg
ICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWluZ0luOgorICAgICAgICAgIGNhc2UgRXZxSW52YXJp
YW50VmFyeWluZ091dDoKKyAgICAgICAgICBjYXNlIEV2cVVuaWZvcm06CisgICAgICAgICAgICBz
eW1ib2wtPnNldFN5bWJvbCgKKyAgICAgICAgICAgICAgICBtYXBHbG9iYWxMb25nTmFtZShzeW1i
b2wtPmdldFN5bWJvbCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgc3ltYm9sLT5zZXRTeW1ib2woCisgICAgICAgICAgICAgICAgbWFwTG9u
Z05hbWUoc3ltYm9sLT5nZXRJZCgpLCBzeW1ib2wtPmdldFN5bWJvbCgpLCBmYWxzZSkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH07CisgICAgfQorfQorCitUU3RyaW5nIE1hcExvbmdW
YXJpYWJsZU5hbWVzOjptYXBHbG9iYWxMb25nTmFtZShjb25zdCBUU3RyaW5nJiBuYW1lKQorewor
ICAgIEFTU0VSVChtR2xvYmFsTWFwKTsKKyAgICBjb25zdCBjaGFyKiBtYXBwZWROYW1lID0gbUds
b2JhbE1hcC0+RmluZChuYW1lLmNfc3RyKCkpOworICAgIGlmIChtYXBwZWROYW1lICE9IE5VTEwp
CisgICAgICAgIHJldHVybiBtYXBwZWROYW1lOworICAgIHNpemVfdCBpZCA9IG1HbG9iYWxNYXAt
PlNpemUoKTsKKyAgICBUU3RyaW5nIHJ0ID0gbWFwTG9uZ05hbWUoaWQsIG5hbWUsIHRydWUpOwor
ICAgIG1HbG9iYWxNYXAtPkluc2VydChuYW1lLmNfc3RyKCksIHJ0LmNfc3RyKCkpOworICAgIHJl
dHVybiBydDsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL01hcExvbmdWYXJpYWJsZU5hbWVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjNiMDg1YTM2ODc3YjAxMDU2MDU0ZGEyZDEyZTQ0MDBmODI5ZWEzOWUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5oCkBAIC0wLDAgKzEsNTggQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVNfSF8KKyNk
ZWZpbmUgQ09NUElMRVJfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVNfSF8KKworI2luY2x1ZGUgIkdM
U0xBTkcvU2hhZGVyTGFuZy5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRl
cm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5o
IgorCisvLyBUaGlzIHNpemUgZG9lcyBub3QgaW5jbHVkZSAnXDAnIGluIHRoZSBlbmQuCisjZGVm
aW5lIE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFIDMyCisKKy8vIFRoaXMgaXMgYSByZWYt
Y291bnRlZCBzaW5nbGV0b24uIEdldEluc3RhbmNlKCkgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhl
CisvLyBzaW5nbGV0b24sIGFuZCBhZnRlciB1c2UsIGNhbGwgUmVsZWFzZSgpLiBHZXRJbnN0YW5j
ZSgpIGFuZCBSZWxlYXNlKCkgc2hvdWxkCisvLyBiZSBwYWlyZWQuCitjbGFzcyBMb25nTmFtZU1h
cCB7CitwdWJsaWM6CisgICAgc3RhdGljIExvbmdOYW1lTWFwKiBHZXRJbnN0YW5jZSgpOworICAg
IHZvaWQgUmVsZWFzZSgpOworCisgICAgLy8gUmV0dXJuIHRoZSBtYXBwZWQgbmFtZSBpZiA8b3Jp
Z2luYWxOYW1lLCBtYXBwZWROYW1lPiBpcyBpbiB0aGUgbWFwOworICAgIC8vIG90aGVyd2lzZSwg
cmV0dXJuIE5VTEwuCisgICAgY29uc3QgY2hhciogRmluZChjb25zdCBjaGFyKiBvcmlnaW5hbE5h
bWUpIGNvbnN0OworCisgICAgLy8gSW5zZXJ0IGEgcGFpciBpbnRvIHRoZSBtYXAuCisgICAgdm9p
ZCBJbnNlcnQoY29uc3QgY2hhciogb3JpZ2luYWxOYW1lLCBjb25zdCBjaGFyKiBtYXBwZWROYW1l
KTsKKworICAgIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIG1hcC4KKyAg
ICBzaXplX3QgU2l6ZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIExvbmdOYW1lTWFwKCk7Cisg
ICAgfkxvbmdOYW1lTWFwKCk7CisKKyAgICBzaXplX3QgcmVmQ291bnQ7CisgICAgc3RkOjptYXA8
c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBtTG9uZ05hbWVNYXA7Cit9OworCisvLyBUcmF2ZXJz
ZXMgaW50ZXJtZWRpYXRlIHRyZWUgdG8gbWFwIGF0dHJpYnV0ZXMgYW5kIHVuaWZvcm1zIG5hbWVz
IHRoYXQgYXJlCisvLyBsb25nZXIgdGhhbiBNQVhfU0hPUlRFTkVEX0lERU5USUZJRVJfU0laRSB0
byBNQVhfU0hPUlRFTkVEX0lERU5USUZJRVJfU0laRS4KK2NsYXNzIE1hcExvbmdWYXJpYWJsZU5h
bWVzIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgorICAgIE1hcExvbmdWYXJp
YWJsZU5hbWVzKExvbmdOYW1lTWFwKiBnbG9iYWxNYXApOworCisgICAgdmlydHVhbCB2b2lkIHZp
c2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKKworcHJpdmF0ZToKKyAgICBUU3RyaW5nIG1hcEds
b2JhbExvbmdOYW1lKGNvbnN0IFRTdHJpbmcmIG5hbWUpOworCisgICAgTG9uZ05hbWVNYXAqIG1H
bG9iYWxNYXA7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX01BUF9MT05HX1ZBUklBQkxFX05B
TUVTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9Ob2RlU2VhcmNoLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9Ob2RlU2VhcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjU4YzdlYzY4OTQ1ODhj
MDgzNTBlODg2OTZlNzMxNDNkZjQ5ZTEyNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL05vZGVTZWFyY2guaApAQCAtMCww
ICsxLDgwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gTm9kZVNlYXJjaC5oOiBVdGlsaXRpZXMg
Zm9yIHNlYXJjaGluZyB0cmFuc2xhdG9yIG5vZGUgZ3JhcGhzCisvLworCisjaWZuZGVmIFRSQU5T
TEFUT1JfTk9ERVNFQVJDSF9IXworI2RlZmluZSBUUkFOU0xBVE9SX05PREVTRUFSQ0hfSF8KKwor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisKK25hbWVzcGFj
ZSBzaAoreworCit0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgorY2xhc3MgTm9kZVNlYXJjaFRyYXZl
cnNlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBOb2RlU2Vh
cmNoVHJhdmVyc2VyKCkKKyAgICAgICAgOiBtRm91bmQoZmFsc2UpCisgICAge30KKworICAgIGJv
b2wgZm91bmQoKSBjb25zdCB7IHJldHVybiBtRm91bmQ7IH0KKworICAgIHN0YXRpYyBib29sIHNl
YXJjaChUSW50ZXJtTm9kZSAqbm9kZSkKKyAgICB7CisgICAgICAgIFBhcmVudCBzZWFyY2hUcmF2
ZXJzZXI7CisgICAgICAgIG5vZGUtPnRyYXZlcnNlKCZzZWFyY2hUcmF2ZXJzZXIpOworICAgICAg
ICByZXR1cm4gc2VhcmNoVHJhdmVyc2VyLmZvdW5kKCk7CisgICAgfQorCisgIHByb3RlY3RlZDoK
KyAgICBib29sIG1Gb3VuZDsKK307CisKK2NsYXNzIEZpbmREaXNjYXJkIDogcHVibGljIE5vZGVT
ZWFyY2hUcmF2ZXJzZXI8RmluZERpc2NhcmQ+Cit7CisgIHB1YmxpYzoKKyAgICB2aXJ0dWFsIGJv
b2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2ggKm5vZGUpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldEZsb3dPcCgpKQorICAgICAgICB7CisgICAgICAgICAg
Y2FzZSBFT3BLaWxsOgorICAgICAgICAgICAgbUZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gIW1Gb3VuZDsKKyAgICB9Cit9OworCitjbGFzcyBGaW5kU2lkZUVmZmVjdFJld3JpdGlu
ZyA6IHB1YmxpYyBOb2RlU2VhcmNoVHJhdmVyc2VyPEZpbmRTaWRlRWZmZWN0UmV3cml0aW5nPgor
eworICBwdWJsaWM6CisgICAgdmlydHVhbCBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBU
SW50ZXJtQmluYXJ5ICpub2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5nZXRPcCgp
KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6CisgICAgICAgICAgY2Fz
ZSBFT3BMb2dpY2FsQW5kOgorICAgICAgICAgICAgaWYgKG5vZGUtPmdldFJpZ2h0KCktPmhhc1Np
ZGVFZmZlY3RzKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbUZvdW5kID0gdHJ1
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVs
dDogYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gIW1Gb3VuZDsKKyAgICB9Cit9
OworCit9CisKKyNlbmRpZiAvLyBUUkFOU0xBVE9SX05PREVTRUFSQ0hfSF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEVT
U0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
T3V0cHV0RVNTTC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODM2NzQxMjQ2MjExYTYyZDNiNDI4MzBmZTZjYzRk
NGY3MWMzZDYxNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEVTU0wuY3BwCkBAIC0wLDAgKzEsMjYgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL091dHB1dEVT
U0wuaCIKKworVE91dHB1dEVTU0w6OlRPdXRwdXRFU1NMKFRJbmZvU2lua0Jhc2UmIG9ialNpbmss
CisgICAgICAgICAgICAgICAgICAgICAgICAgU2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBj
bGFtcGluZ1N0cmF0ZWd5LAorICAgICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9u
NjQgaGFzaEZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVN
YXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkK
KyAgICA6IFRPdXRwdXRHTFNMQmFzZShvYmpTaW5rLCBjbGFtcGluZ1N0cmF0ZWd5LCBoYXNoRnVu
Y3Rpb24sIG5hbWVNYXAsIHN5bWJvbFRhYmxlKQoreworfQorCitib29sIFRPdXRwdXRFU1NMOjp3
cml0ZVZhcmlhYmxlUHJlY2lzaW9uKFRQcmVjaXNpb24gcHJlY2lzaW9uKQoreworICAgIGlmIChw
cmVjaXNpb24gPT0gRWJwVW5kZWZpbmVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBU
SW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7CisgICAgb3V0IDw8IGdldFByZWNpc2lvblN0
cmluZyhwcmVjaXNpb24pOworICAgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0RVNTTC5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0RVNT
TC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjJmMDI5NzlhMDUwNDRjMzQyZGJhNjFmNTBkMjNmNDZlNGViZjY1NmQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9PdXRwdXRFU1NMLmgKQEAgLTAsMCArMSwyNSBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI2lmbmRlZiBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRFU1NMX0hfCisjZGVmaW5lIENS
T1NTQ09NUElMRVJHTFNMX09VVFBVVEVTU0xfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvT3V0cHV0R0xTTEJhc2UuaCIKKworY2xhc3MgVE91dHB1dEVTU0wgOiBwdWJsaWMgVE91
dHB1dEdMU0xCYXNlCit7CitwdWJsaWM6CisgICAgVE91dHB1dEVTU0woVEluZm9TaW5rQmFzZSYg
b2JqU2luaywKKyAgICAgICAgICAgICAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IGNs
YW1waW5nU3RyYXRlZ3ksCisgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVu
Y3Rpb24sCisgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKKyAgICAgICAgICAgICAg
ICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwg
Ym9vbCB3cml0ZVZhcmlhYmxlUHJlY2lzaW9uKFRQcmVjaXNpb24gcHJlY2lzaW9uKTsKK307CisK
KyNlbmRpZiAgLy8gQ1JPU1NDT01QSUxFUkdMU0xfT1VUUFVURVNTTF9IXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xT
TC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9P
dXRwdXRHTFNMLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NTg5NTYwNjgyYjYyOGI1OTZmM2E3NTkwODc5Zjcx
YzQ2N2YzOWEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTC5jcHAKQEAgLTAsMCArMSwzNSBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xT
TC5oIgorCitUT3V0cHV0R0xTTDo6VE91dHB1dEdMU0woVEluZm9TaW5rQmFzZSYgb2JqU2luaywK
KyAgICAgICAgICAgICAgICAgICAgICAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IGNs
YW1waW5nU3RyYXRlZ3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242
NCBoYXNoRnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1h
cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQor
ICAgIDogVE91dHB1dEdMU0xCYXNlKG9ialNpbmssIGNsYW1waW5nU3RyYXRlZ3ksIGhhc2hGdW5j
dGlvbiwgbmFtZU1hcCwgc3ltYm9sVGFibGUpCit7Cit9CisKK2Jvb2wgVE91dHB1dEdMU0w6Ondy
aXRlVmFyaWFibGVQcmVjaXNpb24oVFByZWNpc2lvbikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgVE91dHB1dEdMU0w6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCit7
CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOworCisgICAgaWYgKG5vZGUtPmdl
dFN5bWJvbCgpID09ICJnbF9GcmFnRGVwdGhFWFQiKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJn
bF9GcmFnRGVwdGgiOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBUT3V0cHV0R0xT
TEJhc2U6OnZpc2l0U3ltYm9sKG5vZGUpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0wuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0wu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5lMWYxMTRkMzQ3YjQxMjJkOTM0MTZlNjI0NGNiYWFmOTMwZDQ5N2MyCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvT3V0cHV0R0xTTC5oCkBAIC0wLDAgKzEsMjYgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpZm5kZWYgQ1JPU1NDT01QSUxFUkdMU0xfT1VUUFVUR0xTTF9IXworI2RlZmluZSBDUk9T
U0NPTVBJTEVSR0xTTF9PVVRQVVRHTFNMX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL091dHB1dEdMU0xCYXNlLmgiCisKK2NsYXNzIFRPdXRwdXRHTFNMIDogcHVibGljIFRPdXRw
dXRHTFNMQmFzZQoreworcHVibGljOgorICAgIFRPdXRwdXRHTFNMKFRJbmZvU2lua0Jhc2UmIG9i
alNpbmssCisgICAgICAgICAgICAgICAgU2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFt
cGluZ1N0cmF0ZWd5LAorICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0
aW9uLAorICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCisgICAgICAgICAgICAgICAg
VFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIGJv
b2wgd3JpdGVWYXJpYWJsZVByZWNpc2lvbihUUHJlY2lzaW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSk7Cit9OworCisjZW5kaWYgIC8vIENST1NT
Q09NUElMRVJHTFNMX09VVFBVVEdMU0xfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0xCYXNlLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0xCYXNl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mMmYwYTNkNmJlMzgwMmUzOGUwMTMxNWFmMThhYTBhMDJkOWMxNDI2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuY3BwCkBAIC0wLDAgKzEsODE3IEBACisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMQmFz
ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvY29tcGlsZXJkZWJ1Zy5oIgorCisj
aW5jbHVkZSA8Y2Zsb2F0PgorCituYW1lc3BhY2UKK3sKK1RTdHJpbmcgYXJyYXlCcmFja2V0cyhj
b25zdCBUVHlwZSYgdHlwZSkKK3sKKyAgICBBU1NFUlQodHlwZS5pc0FycmF5KCkpOworICAgIFRJ
bmZvU2lua0Jhc2Ugb3V0OworICAgIG91dCA8PCAiWyIgPDwgdHlwZS5nZXRBcnJheVNpemUoKSA8
PCAiXSI7CisgICAgcmV0dXJuIFRTdHJpbmcob3V0LmNfc3RyKCkpOworfQorCitib29sIGlzU2lu
Z2xlU3RhdGVtZW50KFRJbnRlcm1Ob2RlKiBub2RlKSB7CisgICAgaWYgKGNvbnN0IFRJbnRlcm1B
Z2dyZWdhdGUqIGFnZ3JlZ2F0ZSA9IG5vZGUtPmdldEFzQWdncmVnYXRlKCkpCisgICAgeworICAg
ICAgICByZXR1cm4gKGFnZ3JlZ2F0ZS0+Z2V0T3AoKSAhPSBFT3BGdW5jdGlvbikgJiYKKyAgICAg
ICAgICAgICAgIChhZ2dyZWdhdGUtPmdldE9wKCkgIT0gRU9wU2VxdWVuY2UpOworICAgIH0KKyAg
ICBlbHNlIGlmIChjb25zdCBUSW50ZXJtU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBub2RlLT5nZXRB
c1NlbGVjdGlvbk5vZGUoKSkKKyAgICB7CisgICAgICAgIC8vIFRlcm5hcnkgb3BlcmF0b3JzIGFy
ZSB1c3VhbGx5IHBhcnQgb2YgYW4gYXNzaWdubWVudCBvcGVyYXRvci4KKyAgICAgICAgLy8gVGhp
cyBoYW5kbGVzIHRob3NlIHJhcmUgY2FzZXMgaW4gd2hpY2ggdGhleSBhcmUgYWxsIGJ5IHRoZW1z
ZWx2ZXMuCisgICAgICAgIHJldHVybiBzZWxlY3Rpb24tPnVzZXNUZXJuYXJ5T3BlcmF0b3IoKTsK
KyAgICB9CisgICAgZWxzZSBpZiAobm9kZS0+Z2V0QXNMb29wTm9kZSgpKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KK30gIC8vIG5hbWVz
cGFjZQorCitUT3V0cHV0R0xTTEJhc2U6OlRPdXRwdXRHTFNMQmFzZShUSW5mb1NpbmtCYXNlJiBv
YmpTaW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hBcnJheUluZGV4Q2xh
bXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOYW1lTWFwJiBuYW1lTWFwLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKKyAgICA6IFRJbnRlcm1UcmF2
ZXJzZXIodHJ1ZSwgdHJ1ZSwgdHJ1ZSksCisgICAgICBtT2JqU2luayhvYmpTaW5rKSwKKyAgICAg
IG1EZWNsYXJpbmdWYXJpYWJsZXMoZmFsc2UpLAorICAgICAgbUNsYW1waW5nU3RyYXRlZ3koY2xh
bXBpbmdTdHJhdGVneSksCisgICAgICBtSGFzaEZ1bmN0aW9uKGhhc2hGdW5jdGlvbiksCisgICAg
ICBtTmFtZU1hcChuYW1lTWFwKSwKKyAgICAgIG1TeW1ib2xUYWJsZShzeW1ib2xUYWJsZSkKK3sK
K30KKwordm9pZCBUT3V0cHV0R0xTTEJhc2U6OndyaXRlVHJpcGxldChWaXNpdCB2aXNpdCwgY29u
c3QgY2hhciogcHJlU3RyLCBjb25zdCBjaGFyKiBpblN0ciwgY29uc3QgY2hhciogcG9zdFN0cikK
K3sKKyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7CisgICAgaWYgKHZpc2l0ID09
IFByZVZpc2l0ICYmIHByZVN0cikKKyAgICB7CisgICAgICAgIG91dCA8PCBwcmVTdHI7CisgICAg
fQorICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQgJiYgaW5TdHIpCisgICAgeworICAgICAg
ICBvdXQgPDwgaW5TdHI7CisgICAgfQorICAgIGVsc2UgaWYgKHZpc2l0ID09IFBvc3RWaXNpdCAm
JiBwb3N0U3RyKQorICAgIHsKKyAgICAgICAgb3V0IDw8IHBvc3RTdHI7CisgICAgfQorfQorCit2
b2lkIFRPdXRwdXRHTFNMQmFzZTo6d3JpdGVWYXJpYWJsZVR5cGUoY29uc3QgVFR5cGUmIHR5cGUp
Cit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOworICAgIFRRdWFsaWZpZXIg
cXVhbGlmaWVyID0gdHlwZS5nZXRRdWFsaWZpZXIoKTsKKyAgICAvLyBUT0RPKGFsb2twKTogVmFs
aWRhdGUgcXVhbGlmaWVyIGZvciB2YXJpYWJsZSBkZWNsYXJhdGlvbnMuCisgICAgaWYgKChxdWFs
aWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSAmJiAocXVhbGlmaWVyICE9IEV2cUdsb2JhbCkpCisgICAg
ICAgIG91dCA8PCB0eXBlLmdldFF1YWxpZmllclN0cmluZygpIDw8ICIgIjsKKyAgICAvLyBEZWNs
YXJlIHRoZSBzdHJ1Y3QgaWYgd2UgaGF2ZSBub3QgZG9uZSBzbyBhbHJlYWR5LgorICAgIGlmICgo
dHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpICYmICFzdHJ1Y3REZWNsYXJlZCh0eXBl
LmdldFN0cnVjdCgpKSkKKyAgICB7CisgICAgICAgIGRlY2xhcmVTdHJ1Y3QodHlwZS5nZXRTdHJ1
Y3QoKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmICh3cml0ZVZhcmlhYmxl
UHJlY2lzaW9uKHR5cGUuZ2V0UHJlY2lzaW9uKCkpKQorICAgICAgICAgICAgb3V0IDw8ICIgIjsK
KyAgICAgICAgb3V0IDw8IGdldFR5cGVOYW1lKHR5cGUpOworICAgIH0KK30KKwordm9pZCBUT3V0
cHV0R0xTTEJhc2U6OndyaXRlRnVuY3Rpb25QYXJhbWV0ZXJzKGNvbnN0IFRJbnRlcm1TZXF1ZW5j
ZSYgYXJncykKK3sKKyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7CisgICAgZm9y
IChUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBhcmdzLmJlZ2luKCk7Cisg
ICAgICAgICBpdGVyICE9IGFyZ3MuZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIGNvbnN0
IFRJbnRlcm1TeW1ib2wqIGFyZyA9ICgqaXRlciktPmdldEFzU3ltYm9sTm9kZSgpOworICAgICAg
ICBBU1NFUlQoYXJnICE9IE5VTEwpOworCisgICAgICAgIGNvbnN0IFRUeXBlJiB0eXBlID0gYXJn
LT5nZXRUeXBlKCk7CisgICAgICAgIHdyaXRlVmFyaWFibGVUeXBlKHR5cGUpOworCisgICAgICAg
IGNvbnN0IFRTdHJpbmcmIG5hbWUgPSBhcmctPmdldFN5bWJvbCgpOworICAgICAgICBpZiAoIW5h
bWUuZW1wdHkoKSkKKyAgICAgICAgICAgIG91dCA8PCAiICIgPDwgaGFzaE5hbWUobmFtZSk7Cisg
ICAgICAgIGlmICh0eXBlLmlzQXJyYXkoKSkKKyAgICAgICAgICAgIG91dCA8PCBhcnJheUJyYWNr
ZXRzKHR5cGUpOworCisgICAgICAgIC8vIFB1dCBhIGNvbW1hIGlmIHRoaXMgaXMgbm90IHRoZSBs
YXN0IGFyZ3VtZW50LgorICAgICAgICBpZiAoaXRlciAhPSBhcmdzLmVuZCgpIC0gMSkKKyAgICAg
ICAgICAgIG91dCA8PCAiLCAiOworICAgIH0KK30KKworY29uc3QgQ29uc3RhbnRVbmlvbiogVE91
dHB1dEdMU0xCYXNlOjp3cml0ZUNvbnN0YW50VW5pb24oY29uc3QgVFR5cGUmIHR5cGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBDb25zdGFudFVuaW9uKiBwQ29uc3RVbmlvbikKK3sKKyAgICBUSW5mb1NpbmtCYXNlJiBvdXQg
PSBvYmpTaW5rKCk7CisKKyAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3Qp
CisgICAgeworICAgICAgICBjb25zdCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0
cnVjdCgpOworICAgICAgICBvdXQgPDwgaGFzaE5hbWUoc3RydWN0dXJlLT5uYW1lKCkpIDw8ICIo
IjsKKworICAgICAgICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSBzdHJ1Y3R1cmUtPmZpZWxk
cygpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7ICsraSkK
KyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFR5cGUqIGZpZWxkVHlwZSA9IGZpZWxkc1tp
XS0+dHlwZSgpOworICAgICAgICAgICAgQVNTRVJUKGZpZWxkVHlwZSAhPSBOVUxMKTsKKyAgICAg
ICAgICAgIHBDb25zdFVuaW9uID0gd3JpdGVDb25zdGFudFVuaW9uKCpmaWVsZFR5cGUsIHBDb25z
dFVuaW9uKTsKKyAgICAgICAgICAgIGlmIChpICE9IGZpZWxkcy5zaXplKCkgLSAxKSBvdXQgPDwg
IiwgIjsKKyAgICAgICAgfQorICAgICAgICBvdXQgPDwgIikiOworICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICBzaXplX3Qgc2l6ZSA9IHR5cGUuZ2V0T2JqZWN0U2l6ZSgpOworICAgICAg
ICBib29sIHdyaXRlVHlwZSA9IHNpemUgPiAxOworICAgICAgICBpZiAod3JpdGVUeXBlKSBvdXQg
PDwgZ2V0VHlwZU5hbWUodHlwZSkgPDwgIigiOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNpemU7ICsraSwgKytwQ29uc3RVbmlvbikKKyAgICAgICAgeworICAgICAgICAgICAgc3dp
dGNoIChwQ29uc3RVbmlvbi0+Z2V0VHlwZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGNhc2UgRWJ0RmxvYXQ6IG91dCA8PCBzdGQ6Om1pbihGTFRfTUFYLCBzdGQ6Om1heCgtRkxU
X01BWCwgcENvbnN0VW5pb24tPmdldEZDb25zdCgpKSk7IGJyZWFrOworICAgICAgICAgICAgICAg
IGNhc2UgRWJ0SW50OiBvdXQgPDwgcENvbnN0VW5pb24tPmdldElDb25zdCgpOyBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6IG91dCA8PCBwQ29uc3RVbmlvbi0+Z2V0QkNvbnN0
KCk7IGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoaSAhPSBzaXplIC0gMSkgb3V0IDw8ICIsICI7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHdyaXRlVHlwZSkgb3V0IDw8ICIpIjsKKyAgICB9CisgICAg
cmV0dXJuIHBDb25zdFVuaW9uOworfQorCit2b2lkIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRTeW1i
b2woVEludGVybVN5bWJvbCogbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpT
aW5rKCk7CisgICAgaWYgKG1Mb29wVW5yb2xsLk5lZWRzVG9SZXBsYWNlU3ltYm9sV2l0aFZhbHVl
KG5vZGUpKQorICAgICAgICBvdXQgPDwgbUxvb3BVbnJvbGwuR2V0TG9vcEluZGV4VmFsdWUobm9k
ZSk7CisgICAgZWxzZQorICAgICAgICBvdXQgPDwgaGFzaFZhcmlhYmxlTmFtZShub2RlLT5nZXRT
eW1ib2woKSk7CisKKyAgICBpZiAobURlY2xhcmluZ1ZhcmlhYmxlcyAmJiBub2RlLT5nZXRUeXBl
KCkuaXNBcnJheSgpKQorICAgICAgICBvdXQgPDwgYXJyYXlCcmFja2V0cyhub2RlLT5nZXRUeXBl
KCkpOworfQorCit2b2lkIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnRl
cm1Db25zdGFudFVuaW9uKiBub2RlKQoreworICAgIHdyaXRlQ29uc3RhbnRVbmlvbihub2RlLT5n
ZXRUeXBlKCksIG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCkpOworfQorCitib29sIFRPdXRw
dXRHTFNMQmFzZTo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5vZGUp
Cit7CisgICAgYm9vbCB2aXNpdENoaWxkcmVuID0gdHJ1ZTsKKyAgICBUSW5mb1NpbmtCYXNlJiBv
dXQgPSBvYmpTaW5rKCk7CisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAg
ICAgY2FzZSBFT3BJbml0aWFsaXplOgorICAgICAgICAgICAgaWYgKHZpc2l0ID09IEluVmlzaXQp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgPSAiOworICAgICAgICAg
ICAgICAgIC8vIFJIUyBvZiBpbml0aWFsaXplIGlzIG5vdCBiZWluZyBkZWNsYXJlZC4KKyAgICAg
ICAgICAgICAgICBtRGVjbGFyaW5nVmFyaWFibGVzID0gZmFsc2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BBc3NpZ246IHdyaXRlVHJpcGxldCh2
aXNpdCwgIigiLCAiID0gIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQWRkQXNzaWdu
OiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiArPSAiLCAiKSIpOyBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BTdWJBc3NpZ246IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiIC09ICIsICIpIik7
IGJyZWFrOworICAgICAgICBjYXNlIEVPcERpdkFzc2lnbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAi
KCIsICIgLz0gIiwgIikiKTsgYnJlYWs7CisgICAgICAgIC8vIE5vdGljZSB0aGUgZmFsbC10aHJv
dWdoLgorICAgICAgICBjYXNlIEVPcE11bEFzc2lnbjogCisgICAgICAgIGNhc2UgRU9wVmVjdG9y
VGltZXNNYXRyaXhBc3NpZ246CisgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXJBc3Np
Z246CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ246CisgICAgICAgIGNh
c2UgRU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246CisgICAgICAgICAgICB3cml0ZVRyaXBsZXQo
dmlzaXQsICIoIiwgIiAqPSAiLCAiKSIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBFT3BJbmRleERpcmVjdDoKKyAgICAgICAgICAgIHdyaXRlVHJpcGxldCh2aXNpdCwgTlVM
TCwgIlsiLCAiXSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wSW5kZXhJ
bmRpcmVjdDoKKyAgICAgICAgICAgIGlmIChub2RlLT5nZXRBZGRJbmRleENsYW1wKCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAobUNsYW1waW5nU3RyYXRlZ3kgPT0g
U0hfQ0xBTVBfV0lUSF9DTEFNUF9JTlRSSU5TSUMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG91dCA8PCAiW2ludChjbGFtcChmbG9hdCgiOworICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJbd2ViZ2xfaW50X2NsYW1wKCI7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZpc2l0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgaW50IG1heFNpemU7CisgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBl
ZCAqbGVmdCA9IG5vZGUtPmdldExlZnQoKTsKKyAgICAgICAgICAgICAgICAgICAgVFR5cGUgbGVm
dFR5cGUgPSBsZWZ0LT5nZXRUeXBlKCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxlZnQt
PmlzQXJyYXkoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gVGhlIHNoYWRlciB3aWxsIGZhaWwgdmFsaWRhdGlvbiBpZiB0aGUgYXJyYXkgbGVuZ3Ro
IGlzIG5vdCA+IDAuCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhTaXplID0gbGVmdFR5cGUu
Z2V0QXJyYXlTaXplKCkgLSAxOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgbWF4U2l6ZSA9IGxlZnRUeXBlLmdldE5vbWluYWxTaXplKCkgLSAxOworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1DbGFtcGluZ1N0cmF0ZWd5ID09
IFNIX0NMQU1QX1dJVEhfQ0xBTVBfSU5UUklOU0lDKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBvdXQgPDwgIiksIDAuMCwgZmxvYXQoIiA8PCBtYXhTaXplIDw8ICIpKSldIjsKKyAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCAw
LCAiIDw8IG1heFNpemUgPDwgIildIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICB3cml0ZVRyaXBsZXQodmlzaXQsIE5VTEwsICJbIiwgIl0iKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEluZGV4RGly
ZWN0U3RydWN0OgorICAgICAgICAgICAgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgLy8gSGVyZSB3ZSBhcmUgd3JpdGluZyBvdXQgImZvby5iYXIi
LCB3aGVyZSAiZm9vIiBpcyBzdHJ1Y3QKKyAgICAgICAgICAgICAgICAvLyBhbmQgImJhciIgaXMg
ZmllbGQuIEluIEFTVCwgaXQgaXMgcmVwcmVzZW50ZWQgYXMgYSBiaW5hcnkKKyAgICAgICAgICAg
ICAgICAvLyBub2RlLCB3aGVyZSBsZWZ0IGNoaWxkIHJlcHJlc2VudHMgImZvbyIgYW5kIHJpZ2h0
IGNoaWxkICJiYXIiLgorICAgICAgICAgICAgICAgIC8vIFRoZSBub2RlIGl0c2VsZiByZXByZXNl
bnRzICIuIi4gVGhlIHN0cnVjdCBmaWVsZCAiYmFyIiBpcworICAgICAgICAgICAgICAgIC8vIGFj
dHVhbGx5IHN0b3JlZCBhcyBhbiBpbmRleCBpbnRvIFRTdHJ1Y3R1cmU6OmZpZWxkcy4KKyAgICAg
ICAgICAgICAgICBvdXQgPDwgIi4iOworICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IG5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpOworICAg
ICAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1Db25zdGFudFVuaW9uKiBpbmRleCA9IG5vZGUtPmdl
dFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAgICAgICAgICAgICAgIGNvbnN0IFRG
aWVsZCogZmllbGQgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpW2luZGV4LT5nZXRJQ29uc3QoMCldOwor
CisgICAgICAgICAgICAgICAgVFN0cmluZyBmaWVsZE5hbWUgPSBmaWVsZC0+bmFtZSgpOworICAg
ICAgICAgICAgICAgIGlmICghbVN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKHN0cnVjdHVyZS0+bmFt
ZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gaGFzaE5hbWUoZmllbGROYW1l
KTsKKworICAgICAgICAgICAgICAgIG91dCA8PCBmaWVsZE5hbWU7CisgICAgICAgICAgICAgICAg
dmlzaXRDaGlsZHJlbiA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wVmVjdG9yU3dpenpsZToKKyAgICAgICAgICAgIGlmICh2aXNpdCA9
PSBJblZpc2l0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiLiI7Cisg
ICAgICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSogcmlnaHRDaGlsZCA9IG5vZGUtPmdldFJp
Z2h0KCktPmdldEFzQWdncmVnYXRlKCk7CisgICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNl
JiBzZXF1ZW5jZSA9IHJpZ2h0Q2hpbGQtPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAgICAgICAg
Zm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNpdCA9IHNlcXVlbmNlLmJlZ2luKCk7IHNp
dCAhPSBzZXF1ZW5jZS5lbmQoKTsgKytzaXQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogZWxlbWVudCA9ICgqc2l0KS0+Z2V0QXND
b25zdGFudFVuaW9uKCk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50LT5nZXRC
YXNpY1R5cGUoKSA9PSBFYnRJbnQpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVu
dC0+Z2V0Tm9taW5hbFNpemUoKSA9PSAxKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29u
c3RhbnRVbmlvbiYgZGF0YSA9IGVsZW1lbnQtPmdldFVuaW9uQXJyYXlQb2ludGVyKClbMF07Cisg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChkYXRhLmdldFR5cGUoKSA9PSBFYnRJbnQpOworICAg
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKGRhdGEuZ2V0SUNvbnN0KCkpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDogb3V0IDw8ICJ4IjsgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IG91dCA8PCAieSI7IGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBvdXQgPDwgInoiOyBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgMzogb3V0IDw8ICJ3IjsgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2aXNpdENoaWxk
cmVuID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICBjYXNlIEVPcEFkZDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgKyAiLCAiKSIpOyBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BTdWI6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiIC0gIiwg
IikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTXVsOiB3cml0ZVRyaXBsZXQodmlzaXQsICIo
IiwgIiAqICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcERpdjogd3JpdGVUcmlwbGV0
KHZpc2l0LCAiKCIsICIgLyAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNb2Q6IFVO
SU1QTEVNRU5URUQoKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRXF1YWw6IHdyaXRlVHJpcGxl
dCh2aXNpdCwgIigiLCAiID09ICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcE5vdEVx
dWFsOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAhPSAiLCAiKSIpOyBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BMZXNzVGhhbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgPCAiLCAiKSIp
OyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjogd3JpdGVUcmlwbGV0KHZpc2l0
LCAiKCIsICIgPiAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFs
OiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiA8PSAiLCAiKSIpOyBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiA+PSAi
LCAiKSIpOyBicmVhazsKKworICAgICAgICAvLyBOb3RpY2UgdGhlIGZhbGwtdGhyb3VnaC4KKyAg
ICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjoKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JU
aW1lc01hdHJpeDoKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1ZlY3RvcjoKKyAgICAgICAg
Y2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhcjoKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01h
dHJpeDoKKyAgICAgICAgICAgIHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiICogIiwgIikiKTsK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wTG9naWNhbE9yOiB3cml0ZVRy
aXBsZXQodmlzaXQsICIoIiwgIiB8fCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BM
b2dpY2FsWG9yOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiBeXiAiLCAiKSIpOyBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAm
JiAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7
CisgICAgfQorCisgICAgcmV0dXJuIHZpc2l0Q2hpbGRyZW47Cit9CisKK2Jvb2wgVE91dHB1dEdM
U0xCYXNlOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUpCit7Cisg
ICAgVFN0cmluZyBwcmVTdHJpbmc7CisgICAgVFN0cmluZyBwb3N0U3RyaW5nID0gIikiOworCisg
ICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAgICAgY2FzZSBFT3BOZWdhdGl2
ZTogcHJlU3RyaW5nID0gIigtIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVjdG9yTG9naWNh
bE5vdDogcHJlU3RyaW5nID0gIm5vdCgiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2Fs
Tm90OiBwcmVTdHJpbmcgPSAiKCEiOyBicmVhazsKKworICAgICAgICBjYXNlIEVPcFBvc3RJbmNy
ZW1lbnQ6IHByZVN0cmluZyA9ICIoIjsgcG9zdFN0cmluZyA9ICIrKykiOyBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OiBwcmVTdHJpbmcgPSAiKCI7IHBvc3RTdHJpbmcgPSAi
LS0pIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OiBwcmVTdHJpbmcgPSAi
KCsrIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OiBwcmVTdHJpbmcgPSAi
KC0tIjsgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BDb252SW50VG9Cb29sOgorICAgICAgICBj
YXNlIEVPcENvbnZGbG9hdFRvQm9vbDoKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3Bl
cmFuZCgpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBjYXNlIDE6IHByZVN0cmluZyA9ICAiYm9vbCgiOyAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSAyOiBwcmVTdHJpbmcgPSAiYnZlYzIoIjsgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2FzZSAzOiBwcmVTdHJpbmcgPSAiYnZlYzMoIjsgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSA0OiBwcmVTdHJpbmcgPSAiYnZlYzQoIjsgYnJlYWs7CisgICAgICAgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEVPcENvbnZCb29sVG9GbG9hdDoKKyAgICAgICAgY2FzZSBFT3BDb252
SW50VG9GbG9hdDoKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRU
eXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBj
YXNlIDE6IHByZVN0cmluZyA9ICJmbG9hdCgiOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz
ZSAyOiBwcmVTdHJpbmcgPSAidmVjMigiOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM6
IHByZVN0cmluZyA9ICJ2ZWMzKCI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDogcHJl
U3RyaW5nID0gInZlYzQoIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEVPcENvbnZGbG9hdFRvSW50OgorICAgICAgICBjYXNlIEVPcENvbnZCb29sVG9JbnQ6CisgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wZXJhbmQoKS0+Z2V0VHlwZSgpLmdldE5vbWluYWxT
aXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSAxOiBwcmVTdHJpbmcg
PSAiaW50KCI7ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6IHByZVN0cmluZyA9ICJp
dmVjMigiOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IHByZVN0cmluZyA9ICJpdmVj
MygiOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6IHByZVN0cmluZyA9ICJpdmVjNCgi
OyBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BSYWRpYW5zOiBw
cmVTdHJpbmcgPSAicmFkaWFucygiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BEZWdyZWVzOiBw
cmVTdHJpbmcgPSAiZGVncmVlcygiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BTaW46IHByZVN0
cmluZyA9ICJzaW4oIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29zOiBwcmVTdHJpbmcgPSAi
Y29zKCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFRhbjogcHJlU3RyaW5nID0gInRhbigiOyBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BBc2luOiBwcmVTdHJpbmcgPSAiYXNpbigiOyBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BBY29zOiBwcmVTdHJpbmcgPSAiYWNvcygiOyBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BBdGFuOiBwcmVTdHJpbmcgPSAiYXRhbigiOyBicmVhazsKKworICAgICAgICBj
YXNlIEVPcEV4cDogcHJlU3RyaW5nID0gImV4cCgiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BM
b2c6IHByZVN0cmluZyA9ICJsb2coIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRXhwMjogcHJl
U3RyaW5nID0gImV4cDIoIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9nMjogcHJlU3RyaW5n
ID0gImxvZzIoIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU3FydDogcHJlU3RyaW5nID0gInNx
cnQoIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wSW52ZXJzZVNxcnQ6IHByZVN0cmluZyA9ICJp
bnZlcnNlc3FydCgiOyBicmVhazsKKworICAgICAgICBjYXNlIEVPcEFiczogcHJlU3RyaW5nID0g
ImFicygiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BTaWduOiBwcmVTdHJpbmcgPSAic2lnbigi
OyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BGbG9vcjogcHJlU3RyaW5nID0gImZsb29yKCI7IGJy
ZWFrOworICAgICAgICBjYXNlIEVPcENlaWw6IHByZVN0cmluZyA9ICJjZWlsKCI7IGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcEZyYWN0OiBwcmVTdHJpbmcgPSAiZnJhY3QoIjsgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBFT3BMZW5ndGg6IHByZVN0cmluZyA9ICJsZW5ndGgoIjsgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wTm9ybWFsaXplOiBwcmVTdHJpbmcgPSAibm9ybWFsaXplKCI7IGJyZWFrOwor
CisgICAgICAgIGNhc2UgRU9wREZkeDogcHJlU3RyaW5nID0gImRGZHgoIjsgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wREZkeTogcHJlU3RyaW5nID0gImRGZHkoIjsgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wRndpZHRoOiBwcmVTdHJpbmcgPSAiZndpZHRoKCI7IGJyZWFrOworCisgICAgICAgIGNh
c2UgRU9wQW55OiBwcmVTdHJpbmcgPSAiYW55KCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEFs
bDogcHJlU3RyaW5nID0gImFsbCgiOyBicmVhazsKKworICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOyBicmVhazsKKyAgICB9CisKKyAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQgJiYgbm9k
ZS0+Z2V0VXNlRW11bGF0ZWRGdW5jdGlvbigpKQorICAgICAgICBwcmVTdHJpbmcgPSBCdWlsdElu
RnVuY3Rpb25FbXVsYXRvcjo6R2V0RW11bGF0ZWRGdW5jdGlvbk5hbWUocHJlU3RyaW5nKTsKKyAg
ICB3cml0ZVRyaXBsZXQodmlzaXQsIHByZVN0cmluZy5jX3N0cigpLCBOVUxMLCBwb3N0U3RyaW5n
LmNfc3RyKCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVE91dHB1dEdMU0xCYXNl
Ojp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiogbm9kZSkKK3sK
KyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7CisKKyAgICBpZiAobm9kZS0+dXNl
c1Rlcm5hcnlPcGVyYXRvcigpKQorICAgIHsKKyAgICAgICAgLy8gTm90aWNlIHR3byBicmFja2V0
cyBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQuIFRoZSBvdXRlciBvbmVzCisgICAgICAgIC8vIGVu
Y2Fwc3VsYXRlIHRoZSB3aG9sZSB0ZXJuYXJ5IGV4cHJlc3Npb24uIFRoaXMgcHJlc2VydmVzIHRo
ZQorICAgICAgICAvLyBvcmRlciBvZiBwcmVjZWRlbmNlIHdoZW4gdGVybmFyeSBleHByZXNzaW9u
cyBhcmUgdXNlZCBpbiBhCisgICAgICAgIC8vIGNvbXBvdW5kIGV4cHJlc3Npb24sIGkuZS4sIGMg
PSAyICogKGEgPCBiID8gMSA6IDIpLgorICAgICAgICBvdXQgPDwgIigoIjsKKyAgICAgICAgbm9k
ZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBvdXQgPDwgIikgPyAo
IjsKKyAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAg
ICBvdXQgPDwgIikgOiAoIjsKKyAgICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9jaygpLT50cmF2ZXJz
ZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIpKSI7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIG91dCA8PCAiaWYgKCI7CisgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2
ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIpXG4iOworCisgICAgICAgIGluY3JlbWVudERl
cHRoKG5vZGUpOworICAgICAgICB2aXNpdENvZGVCbG9jayhub2RlLT5nZXRUcnVlQmxvY2soKSk7
CisKKyAgICAgICAgaWYgKG5vZGUtPmdldEZhbHNlQmxvY2soKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgb3V0IDw8ICJlbHNlXG4iOworICAgICAgICAgICAgdmlzaXRDb2RlQmxvY2sobm9kZS0+
Z2V0RmFsc2VCbG9jaygpKTsKKyAgICAgICAgfQorICAgICAgICBkZWNyZW1lbnREZXB0aCgpOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVE91dHB1dEdMU0xCYXNlOjp2aXNp
dEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK3sKKyAgICBi
b29sIHZpc2l0Q2hpbGRyZW4gPSB0cnVlOworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNp
bmsoKTsKKyAgICBUU3RyaW5nIHByZVN0cmluZzsKKyAgICBib29sIGRlbGF5ZWRXcml0ZSA9IGZh
bHNlOworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7CisgICAgICAgIGNhc2UgRU9w
U2VxdWVuY2U6IHsKKyAgICAgICAgICAgIC8vIFNjb3BlIHRoZSBzZXF1ZW5jZXMgZXhjZXB0IHdo
ZW4gYXQgdGhlIGdsb2JhbCBzY29wZS4KKyAgICAgICAgICAgIGlmIChkZXB0aCA+IDApIG91dCA8
PCAie1xuIjsKKworICAgICAgICAgICAgaW5jcmVtZW50RGVwdGgobm9kZSk7CisgICAgICAgICAg
ICBjb25zdCBUSW50ZXJtU2VxdWVuY2UmIHNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsK
KyAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBpdGVyID0g
c2VxdWVuY2UuYmVnaW4oKTsKKyAgICAgICAgICAgICAgICAgaXRlciAhPSBzZXF1ZW5jZS5lbmQo
KTsgKytpdGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlKiBu
b2RlID0gKml0ZXI7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUgIT0gTlVMTCk7CisgICAg
ICAgICAgICAgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisKKyAgICAgICAgICAgICAgICBpZiAo
aXNTaW5nbGVTdGF0ZW1lbnQobm9kZSkpCisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiO1xu
IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlY3JlbWVudERlcHRoKCk7CisKKyAgICAg
ICAgICAgIC8vIFNjb3BlIHRoZSBzZXF1ZW5jZXMgZXhjZXB0IHdoZW4gYXQgdGhlIGdsb2JhbCBz
Y29wZS4KKyAgICAgICAgICAgIGlmIChkZXB0aCA+IDApIG91dCA8PCAifVxuIjsKKyAgICAgICAg
ICAgIHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2UgRU9wUHJvdG90eXBlOiB7CisgICAgICAgICAgICAvLyBGdW5jdGlvbiBk
ZWNsYXJhdGlvbi4KKyAgICAgICAgICAgIEFTU0VSVCh2aXNpdCA9PSBQcmVWaXNpdCk7CisgICAg
ICAgICAgICB3cml0ZVZhcmlhYmxlVHlwZShub2RlLT5nZXRUeXBlKCkpOworICAgICAgICAgICAg
b3V0IDw8ICIgIiA8PCBoYXNoTmFtZShub2RlLT5nZXROYW1lKCkpOworCisgICAgICAgICAgICBv
dXQgPDwgIigiOworICAgICAgICAgICAgd3JpdGVGdW5jdGlvblBhcmFtZXRlcnMobm9kZS0+Z2V0
U2VxdWVuY2UoKSk7CisgICAgICAgICAgICBvdXQgPDwgIikiOworCisgICAgICAgICAgICB2aXNp
dENoaWxkcmVuID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIEVPcEZ1bmN0aW9uOiB7CisgICAgICAgICAgICAvLyBGdW5jdGlvbiBkZWZpbml0aW9u
LgorICAgICAgICAgICAgQVNTRVJUKHZpc2l0ID09IFByZVZpc2l0KTsKKyAgICAgICAgICAgIHdy
aXRlVmFyaWFibGVUeXBlKG5vZGUtPmdldFR5cGUoKSk7CisgICAgICAgICAgICBvdXQgPDwgIiAi
IDw8IGhhc2hGdW5jdGlvbk5hbWUobm9kZS0+Z2V0TmFtZSgpKTsKKworICAgICAgICAgICAgaW5j
cmVtZW50RGVwdGgobm9kZSk7CisgICAgICAgICAgICAvLyBGdW5jdGlvbiBkZWZpbml0aW9uIG5v
ZGUgY29udGFpbnMgb25lIG9yIHR3byBjaGlsZHJlbiBub2RlcworICAgICAgICAgICAgLy8gcmVw
cmVzZW50aW5nIGZ1bmN0aW9uIHBhcmFtZXRlcnMgYW5kIGZ1bmN0aW9uIGJvZHkuIFRoZSBsYXR0
ZXIKKyAgICAgICAgICAgIC8vIGlzIG5vdCBwcmVzZW50IGluIGNhc2Ugb2YgZW1wdHkgZnVuY3Rp
b24gYm9kaWVzLgorICAgICAgICAgICAgY29uc3QgVEludGVybVNlcXVlbmNlJiBzZXF1ZW5jZSA9
IG5vZGUtPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAgICBBU1NFUlQoKHNlcXVlbmNlLnNpemUo
KSA9PSAxKSB8fCAoc2VxdWVuY2Uuc2l6ZSgpID09IDIpKTsKKyAgICAgICAgICAgIFRJbnRlcm1T
ZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3Igc2VxSXRlciA9IHNlcXVlbmNlLmJlZ2luKCk7CisKKyAg
ICAgICAgICAgIC8vIFRyYXZlcnNlIGZ1bmN0aW9uIHBhcmFtZXRlcnMuCisgICAgICAgICAgICBU
SW50ZXJtQWdncmVnYXRlKiBwYXJhbXMgPSAoKnNlcUl0ZXIpLT5nZXRBc0FnZ3JlZ2F0ZSgpOwor
ICAgICAgICAgICAgQVNTRVJUKHBhcmFtcyAhPSBOVUxMKTsKKyAgICAgICAgICAgIEFTU0VSVChw
YXJhbXMtPmdldE9wKCkgPT0gRU9wUGFyYW1ldGVycyk7CisgICAgICAgICAgICBwYXJhbXMtPnRy
YXZlcnNlKHRoaXMpOworCisgICAgICAgICAgICAvLyBUcmF2ZXJzZSBmdW5jdGlvbiBib2R5Lgor
ICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSogYm9keSA9ICsrc2VxSXRlciAhPSBzZXF1ZW5j
ZS5lbmQoKSA/CisgICAgICAgICAgICAgICAgKCpzZXFJdGVyKS0+Z2V0QXNBZ2dyZWdhdGUoKSA6
IE5VTEw7CisgICAgICAgICAgICB2aXNpdENvZGVCbG9jayhib2R5KTsKKyAgICAgICAgICAgIGRl
Y3JlbWVudERlcHRoKCk7CisgCisgICAgICAgICAgICAvLyBGdWxseSBwcm9jZXNzZWQ7IG5vIG5l
ZWQgdG8gdmlzaXQgY2hpbGRyZW4uCisgICAgICAgICAgICB2aXNpdENoaWxkcmVuID0gZmFsc2U7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEVPcEZ1bmN0aW9u
Q2FsbDoKKyAgICAgICAgICAgIC8vIEZ1bmN0aW9uIGNhbGwuCisgICAgICAgICAgICBpZiAodmlz
aXQgPT0gUHJlVmlzaXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8IGhh
c2hGdW5jdGlvbk5hbWUobm9kZS0+Z2V0TmFtZSgpKSA8PCAiKCI7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG91dCA8PCAiLCAiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiKSI7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BQYXJhbWV0ZXJzOiB7Cisg
ICAgICAgICAgICAvLyBGdW5jdGlvbiBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgQVNTRVJUKHZp
c2l0ID09IFByZVZpc2l0KTsKKyAgICAgICAgICAgIG91dCA8PCAiKCI7CisgICAgICAgICAgICB3
cml0ZUZ1bmN0aW9uUGFyYW1ldGVycyhub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgICAg
IG91dCA8PCAiKSI7CisgICAgICAgICAgICB2aXNpdENoaWxkcmVuID0gZmFsc2U7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEVPcERlY2xhcmF0aW9uOiB7Cisg
ICAgICAgICAgICAvLyBWYXJpYWJsZSBkZWNsYXJhdGlvbi4KKyAgICAgICAgICAgIGlmICh2aXNp
dCA9PSBQcmVWaXNpdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBUSW50
ZXJtU2VxdWVuY2UmIHNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAgICAg
ICAgICBjb25zdCBUSW50ZXJtVHlwZWQqIHZhcmlhYmxlID0gc2VxdWVuY2UuZnJvbnQoKS0+Z2V0
QXNUeXBlZCgpOworICAgICAgICAgICAgICAgIHdyaXRlVmFyaWFibGVUeXBlKHZhcmlhYmxlLT5n
ZXRUeXBlKCkpOworICAgICAgICAgICAgICAgIG91dCA8PCAiICI7CisgICAgICAgICAgICAgICAg
bURlY2xhcmluZ1ZhcmlhYmxlcyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG91dCA8PCAiLCAiOworICAgICAgICAgICAgICAgIG1EZWNsYXJpbmdWYXJpYWJsZXMgPSB0cnVl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIG1EZWNsYXJpbmdWYXJpYWJsZXMgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0Rmxv
YXQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgImZsb2F0KCIsIE5VTEwsICIpIik7IGJyZWFrOworICAg
ICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzI6IHdyaXRlVHJpcGxldCh2aXNpdCwgInZlYzIoIiwg
IiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMzogd3JpdGVU
cmlwbGV0KHZpc2l0LCAidmVjMygiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RWZWM0OiB3cml0ZVRyaXBsZXQodmlzaXQsICJ2ZWM0KCIsICIsICIsICIpIik7
IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6IHdyaXRlVHJpcGxldCh2aXNp
dCwgImJvb2woIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0
QlZlYzI6IHdyaXRlVHJpcGxldCh2aXNpdCwgImJ2ZWMyKCIsICIsICIsICIpIik7IGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJidmVj
MygiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjNDog
d3JpdGVUcmlwbGV0KHZpc2l0LCAiYnZlYzQoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wQ29uc3RydWN0SW50OiB3cml0ZVRyaXBsZXQodmlzaXQsICJpbnQoIiwgTlVMTCwg
IikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6IHdyaXRlVHJpcGxl
dCh2aXNpdCwgIml2ZWMyKCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdElWZWMzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJpdmVjMygiLCAiLCAiLCAiKSIpOyBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjNDogd3JpdGVUcmlwbGV0KHZpc2l0
LCAiaXZlYzQoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0
TWF0Mjogd3JpdGVUcmlwbGV0KHZpc2l0LCAibWF0MigiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJtYXQzKCIs
ICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6IHdyaXRl
VHJpcGxldCh2aXNpdCwgIm1hdDQoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0U3RydWN0OgorICAgICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlJiB0eXBlID0gbm9kZS0+
Z2V0VHlwZSgpOworICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBlLmdldEJhc2ljVHlwZSgpID09
IEVidFN0cnVjdCk7CisgICAgICAgICAgICAgICAgb3V0IDw8IGhhc2hOYW1lKHR5cGUuZ2V0U3Ry
dWN0KCktPm5hbWUoKSkgPDwgIigiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBp
ZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQg
PDwgIiwgIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgIikiOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjogcHJlU3RyaW5nID0gImxlc3NUaGFu
KCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEdyZWF0ZXJU
aGFuOiBwcmVTdHJpbmcgPSAiZ3JlYXRlclRoYW4oIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDogcHJlU3RyaW5nID0gImxlc3NUaGFu
RXF1YWwoIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wR3Jl
YXRlclRoYW5FcXVhbDogcHJlU3RyaW5nID0gImdyZWF0ZXJUaGFuRXF1YWwoIjsgZGVsYXllZFdy
aXRlID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVjdG9yRXF1YWw6IHByZVN0cmlu
ZyA9ICJlcXVhbCgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BWZWN0b3JOb3RFcXVhbDogcHJlU3RyaW5nID0gIm5vdEVxdWFsKCI7IGRlbGF5ZWRXcml0ZSA9
IHRydWU7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbW1hOiB3cml0ZVRyaXBsZXQodmlzaXQs
IE5VTEwsICIsICIsIE5VTEwpOyBicmVhazsKKworICAgICAgICBjYXNlIEVPcE1vZDogcHJlU3Ry
aW5nID0gIm1vZCgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BQb3c6IHByZVN0cmluZyA9ICJwb3coIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wQXRhbjogcHJlU3RyaW5nID0gImF0YW4oIjsgZGVsYXllZFdyaXRlID0g
dHJ1ZTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTWluOiBwcmVTdHJpbmcgPSAibWluKCI7IGRl
bGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOworICAgICAgICBjYXNlIEVPcE1heDogcHJlU3RyaW5n
ID0gIm1heCgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BD
bGFtcDogcHJlU3RyaW5nID0gImNsYW1wKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcE1peDogcHJlU3RyaW5nID0gIm1peCgiOyBkZWxheWVkV3JpdGUgPSB0
cnVlOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BTdGVwOiBwcmVTdHJpbmcgPSAic3RlcCgiOyBk
ZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BTbW9vdGhTdGVwOiBw
cmVTdHJpbmcgPSAic21vb3Roc3RlcCgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKKwor
ICAgICAgICBjYXNlIEVPcERpc3RhbmNlOiBwcmVTdHJpbmcgPSAiZGlzdGFuY2UoIjsgZGVsYXll
ZFdyaXRlID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRG90OiBwcmVTdHJpbmcgPSAi
ZG90KCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENyb3Nz
OiBwcmVTdHJpbmcgPSAiY3Jvc3MoIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wRmFjZUZvcndhcmQ6IHByZVN0cmluZyA9ICJmYWNlZm9yd2FyZCgiOyBkZWxh
eWVkV3JpdGUgPSB0cnVlOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BSZWZsZWN0OiBwcmVTdHJp
bmcgPSAicmVmbGVjdCgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BSZWZyYWN0OiBwcmVTdHJpbmcgPSAicmVmcmFjdCgiOyBkZWxheWVkV3JpdGUgPSB0cnVl
OyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNdWw6IHByZVN0cmluZyA9ICJtYXRyaXhDb21wTXVs
dCgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKKworICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOyBicmVhazsKKyAgICB9CisgICAgaWYgKGRlbGF5ZWRXcml0ZSAmJiB2aXNpdCA9
PSBQcmVWaXNpdCAmJiBub2RlLT5nZXRVc2VFbXVsYXRlZEZ1bmN0aW9uKCkpCisgICAgICAgIHBy
ZVN0cmluZyA9IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpHZXRFbXVsYXRlZEZ1bmN0aW9uTmFt
ZShwcmVTdHJpbmcpOworICAgIGlmIChkZWxheWVkV3JpdGUpCisgICAgICAgIHdyaXRlVHJpcGxl
dCh2aXNpdCwgcHJlU3RyaW5nLmNfc3RyKCksICIsICIsICIpIik7CisgICAgcmV0dXJuIHZpc2l0
Q2hpbGRyZW47Cit9CisKK2Jvb2wgVE91dHB1dEdMU0xCYXNlOjp2aXNpdExvb3AoVmlzaXQgdmlz
aXQsIFRJbnRlcm1Mb29wKiBub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNp
bmsoKTsKKworICAgIGluY3JlbWVudERlcHRoKG5vZGUpOworICAgIC8vIExvb3AgaGVhZGVyLgor
ICAgIFRMb29wVHlwZSBsb29wVHlwZSA9IG5vZGUtPmdldFR5cGUoKTsKKyAgICBpZiAobG9vcFR5
cGUgPT0gRUxvb3BGb3IpICAvLyBmb3IgbG9vcAorICAgIHsKKyAgICAgICAgaWYgKCFub2RlLT5n
ZXRVbnJvbGxGbGFnKCkpIHsKKyAgICAgICAgICAgIG91dCA8PCAiZm9yICgiOworICAgICAgICAg
ICAgaWYgKG5vZGUtPmdldEluaXQoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5nZXRJbml0KCkt
PnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICI7ICI7CisKKyAgICAgICAgICAg
IGlmIChub2RlLT5nZXRDb25kaXRpb24oKSkKKyAgICAgICAgICAgICAgICBub2RlLT5nZXRDb25k
aXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICBvdXQgPDwgIjsgIjsKKworICAg
ICAgICAgICAgaWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkKKyAgICAgICAgICAgICAgICBub2Rl
LT5nZXRFeHByZXNzaW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICIp
XG4iOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGxvb3BUeXBlID09IEVMb29wV2hp
bGUpICAvLyB3aGlsZSBsb29wCisgICAgeworICAgICAgICBvdXQgPDwgIndoaWxlICgiOworICAg
ICAgICBBU1NFUlQobm9kZS0+Z2V0Q29uZGl0aW9uKCkgIT0gTlVMTCk7CisgICAgICAgIG5vZGUt
PmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIpXG4iOwor
ICAgIH0KKyAgICBlbHNlICAvLyBkby13aGlsZSBsb29wCisgICAgeworICAgICAgICBBU1NFUlQo
bG9vcFR5cGUgPT0gRUxvb3BEb1doaWxlKTsKKyAgICAgICAgb3V0IDw8ICJkb1xuIjsKKyAgICB9
CisKKyAgICAvLyBMb29wIGJvZHkuCisgICAgaWYgKG5vZGUtPmdldFVucm9sbEZsYWcoKSkKKyAg
ICB7CisgICAgICAgIFRMb29wSW5kZXhJbmZvIGluZGV4SW5mbzsKKyAgICAgICAgbUxvb3BVbnJv
bGwuRmlsbExvb3BJbmRleEluZm8obm9kZSwgaW5kZXhJbmZvKTsKKyAgICAgICAgbUxvb3BVbnJv
bGwuUHVzaChpbmRleEluZm8pOworICAgICAgICB3aGlsZSAobUxvb3BVbnJvbGwuU2F0aXNmaWVz
TG9vcENvbmRpdGlvbigpKQorICAgICAgICB7CisgICAgICAgICAgICB2aXNpdENvZGVCbG9jayhu
b2RlLT5nZXRCb2R5KCkpOworICAgICAgICAgICAgbUxvb3BVbnJvbGwuU3RlcCgpOworICAgICAg
ICB9CisgICAgICAgIG1Mb29wVW5yb2xsLlBvcCgpOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICB2aXNpdENvZGVCbG9jayhub2RlLT5nZXRCb2R5KCkpOworICAgIH0KKworICAgIC8v
IExvb3AgZm9vdGVyLgorICAgIGlmIChsb29wVHlwZSA9PSBFTG9vcERvV2hpbGUpICAvLyBkby13
aGlsZSBsb29wCisgICAgeworICAgICAgICBvdXQgPDwgIndoaWxlICgiOworICAgICAgICBBU1NF
UlQobm9kZS0+Z2V0Q29uZGl0aW9uKCkgIT0gTlVMTCk7CisgICAgICAgIG5vZGUtPmdldENvbmRp
dGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIpO1xuIjsKKyAgICB9Cisg
ICAgZGVjcmVtZW50RGVwdGgoKTsKKworICAgIC8vIE5vIG5lZWQgdG8gdmlzaXQgY2hpbGRyZW4u
IFRoZXkgaGF2ZSBiZWVuIGFscmVhZHkgcHJvY2Vzc2VkIGluCisgICAgLy8gdGhpcyBmdW5jdGlv
bi4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVE91dHB1dEdMU0xCYXNlOjp2aXNpdEJy
YW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCogbm9kZSkKK3sKKyAgICBzd2l0Y2ggKG5v
ZGUtPmdldEZsb3dPcCgpKQorICAgIHsKKyAgICAgICAgY2FzZSBFT3BLaWxsOiB3cml0ZVRyaXBs
ZXQodmlzaXQsICJkaXNjYXJkIiwgTlVMTCwgTlVMTCk7IGJyZWFrOworICAgICAgICBjYXNlIEVP
cEJyZWFrOiB3cml0ZVRyaXBsZXQodmlzaXQsICJicmVhayIsIE5VTEwsIE5VTEwpOyBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BDb250aW51ZTogd3JpdGVUcmlwbGV0KHZpc2l0LCAiY29udGludWUi
LCBOVUxMLCBOVUxMKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUmV0dXJuOiB3cml0ZVRyaXBs
ZXQodmlzaXQsICJyZXR1cm4gIiwgTlVMTCwgTlVMTCk7IGJyZWFrOworICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dm9pZCBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0Q29kZUJsb2NrKFRJbnRlcm1Ob2RlKiBub2RlKSB7
CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gb2JqU2luaygpOworICAgIGlmIChub2RlICE9IE5V
TEwpCisgICAgeworICAgICAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgLy8gU2lu
Z2xlIHN0YXRlbWVudHMgbm90IHBhcnQgb2YgYSBzZXF1ZW5jZSBuZWVkIHRvIGJlIHRlcm1pbmF0
ZWQKKyAgICAgICAgLy8gd2l0aCBzZW1pLWNvbG9uLgorICAgICAgICBpZiAoaXNTaW5nbGVTdGF0
ZW1lbnQobm9kZSkpCisgICAgICAgICAgICBvdXQgPDwgIjtcbiI7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIG91dCA8PCAie1xufVxuIjsgIC8vIEVtcHR5IGNvZGUgYmxvY2suCisg
ICAgfQorfQorCitUU3RyaW5nIFRPdXRwdXRHTFNMQmFzZTo6Z2V0VHlwZU5hbWUoY29uc3QgVFR5
cGUmIHR5cGUpCit7CisgICAgVEluZm9TaW5rQmFzZSBvdXQ7CisgICAgaWYgKHR5cGUuaXNNYXRy
aXgoKSkKKyAgICB7CisgICAgICAgIG91dCA8PCAibWF0IjsKKyAgICAgICAgb3V0IDw8IHR5cGUu
Z2V0Tm9taW5hbFNpemUoKTsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZS5pc1ZlY3RvcigpKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlLmdldEJhc2ljVHlwZSgpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBjYXNlIEVidEZsb2F0OiBvdXQgPDwgInZlYyI7IGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBFYnRJbnQ6IG91dCA8PCAiaXZlYyI7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBF
YnRCb29sOiBvdXQgPDwgImJ2ZWMiOyBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7IGJyZWFrOworICAgICAgICB9CisgICAgICAgIG91dCA8PCB0eXBlLmdldE5vbWlu
YWxTaXplKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmICh0eXBlLmdldEJh
c2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAgICAgICAgICAgIG91dCA8PCBoYXNoTmFtZSh0eXBl
LmdldFN0cnVjdCgpLT5uYW1lKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQgPDwg
dHlwZS5nZXRCYXNpY1N0cmluZygpOworICAgIH0KKyAgICByZXR1cm4gVFN0cmluZyhvdXQuY19z
dHIoKSk7Cit9CisKK1RTdHJpbmcgVE91dHB1dEdMU0xCYXNlOjpoYXNoTmFtZShjb25zdCBUU3Ry
aW5nJiBuYW1lKQoreworICAgIGlmIChtSGFzaEZ1bmN0aW9uID09IE5VTEwgfHwgbmFtZS5lbXB0
eSgpKQorICAgICAgICByZXR1cm4gbmFtZTsKKyAgICBOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1OYW1lTWFwLmZpbmQobmFtZS5jX3N0cigpKTsKKyAgICBpZiAoaXQgIT0gbU5hbWVNYXAu
ZW5kKCkpCisgICAgICAgIHJldHVybiBpdC0+c2Vjb25kLmNfc3RyKCk7CisgICAgVFN0cmluZyBo
YXNoZWROYW1lID0gVEludGVybVRyYXZlcnNlcjo6aGFzaChuYW1lLCBtSGFzaEZ1bmN0aW9uKTsK
KyAgICBtTmFtZU1hcFtuYW1lLmNfc3RyKCldID0gaGFzaGVkTmFtZS5jX3N0cigpOworICAgIHJl
dHVybiBoYXNoZWROYW1lOworfQorCitUU3RyaW5nIFRPdXRwdXRHTFNMQmFzZTo6aGFzaFZhcmlh
YmxlTmFtZShjb25zdCBUU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChtU3ltYm9sVGFibGUuZmlu
ZEJ1aWx0SW4obmFtZSkgIT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgcmV0dXJu
IGhhc2hOYW1lKG5hbWUpOworfQorCitUU3RyaW5nIFRPdXRwdXRHTFNMQmFzZTo6aGFzaEZ1bmN0
aW9uTmFtZShjb25zdCBUU3RyaW5nJiBtYW5nbGVkX25hbWUpCit7CisgICAgVFN0cmluZyBuYW1l
ID0gVEZ1bmN0aW9uOjp1bm1hbmdsZU5hbWUobWFuZ2xlZF9uYW1lKTsKKyAgICBpZiAobVN5bWJv
bFRhYmxlLmZpbmRCdWlsdEluKG1hbmdsZWRfbmFtZSkgIT0gTlVMTCB8fCBuYW1lID09ICJtYWlu
IikKKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgcmV0dXJuIGhhc2hOYW1lKG5hbWUpOworfQor
Citib29sIFRPdXRwdXRHTFNMQmFzZTo6c3RydWN0RGVjbGFyZWQoY29uc3QgVFN0cnVjdHVyZSog
c3RydWN0dXJlKSBjb25zdAoreworICAgIHJldHVybiBtRGVjbGFyZWRTdHJ1Y3RzLmZpbmQoc3Ry
dWN0dXJlLT5uYW1lKCkpICE9IG1EZWNsYXJlZFN0cnVjdHMuZW5kKCk7Cit9CisKK3ZvaWQgVE91
dHB1dEdMU0xCYXNlOjpkZWNsYXJlU3RydWN0KGNvbnN0IFRTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
K3sKKyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7CisKKyAgICBvdXQgPDwgInN0
cnVjdCAiIDw8IGhhc2hOYW1lKHN0cnVjdHVyZS0+bmFtZSgpKSA8PCAie1xuIjsKKyAgICBjb25z
dCBURmllbGRMaXN0JiBmaWVsZHMgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKQorICAgIHsKKyAgICAgICAgY29uc3Qg
VEZpZWxkKiBmaWVsZCA9IGZpZWxkc1tpXTsKKyAgICAgICAgaWYgKHdyaXRlVmFyaWFibGVQcmVj
aXNpb24oZmllbGQtPnR5cGUoKS0+Z2V0UHJlY2lzaW9uKCkpKQorICAgICAgICAgICAgb3V0IDw8
ICIgIjsKKyAgICAgICAgb3V0IDw8IGdldFR5cGVOYW1lKCpmaWVsZC0+dHlwZSgpKSA8PCAiICIg
PDwgaGFzaE5hbWUoZmllbGQtPm5hbWUoKSk7CisgICAgICAgIGlmIChmaWVsZC0+dHlwZSgpLT5p
c0FycmF5KCkpCisgICAgICAgICAgICBvdXQgPDwgYXJyYXlCcmFja2V0cygqZmllbGQtPnR5cGUo
KSk7CisgICAgICAgIG91dCA8PCAiO1xuIjsKKyAgICB9CisgICAgb3V0IDw8ICJ9IjsKKworICAg
IG1EZWNsYXJlZFN0cnVjdHMuaW5zZXJ0KHN0cnVjdHVyZS0+bmFtZSgpKTsKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1
dEdMU0xCYXNlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9PdXRwdXRHTFNMQmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc2YmVjNGRlNjFlMDQxYWMxOGRhZWYx
MjBmZWRjM2ZkYmNkOWQ5ODMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMQmFzZS5oCkBAIC0wLDAgKzEs
NzkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ1JPU1NDT01QSUxFUkdMU0xfT1VU
UFVUR0xTTEJBU0VfSF8KKyNkZWZpbmUgQ1JPU1NDT01QSUxFUkdMU0xfT1VUUFVUR0xTTEJBU0Vf
SF8KKworI2luY2x1ZGUgPHNldD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRm9y
TG9vcFVucm9sbC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRl
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaCIKKworY2xh
c3MgVE91dHB1dEdMU0xCYXNlIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKK3B1YmxpYzoK
KyAgICBUT3V0cHV0R0xTTEJhc2UoVEluZm9TaW5rQmFzZSYgb2JqU2luaywKKyAgICAgICAgICAg
ICAgICAgICAgU2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAor
ICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwKKyAgICAg
ICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKKyAgICAgICAgICAgICAgICAgICAgVFN5
bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSk7CisKK3Byb3RlY3RlZDoKKyAgICBUSW5mb1NpbmtCYXNl
JiBvYmpTaW5rKCkgeyByZXR1cm4gbU9ialNpbms7IH0KKyAgICB2b2lkIHdyaXRlVHJpcGxldChW
aXNpdCB2aXNpdCwgY29uc3QgY2hhciogcHJlU3RyLCBjb25zdCBjaGFyKiBpblN0ciwgY29uc3Qg
Y2hhciogcG9zdFN0cik7CisgICAgdm9pZCB3cml0ZVZhcmlhYmxlVHlwZShjb25zdCBUVHlwZSYg
dHlwZSk7CisgICAgdmlydHVhbCBib29sIHdyaXRlVmFyaWFibGVQcmVjaXNpb24oVFByZWNpc2lv
biBwcmVjaXNpb24pID0gMDsKKyAgICB2b2lkIHdyaXRlRnVuY3Rpb25QYXJhbWV0ZXJzKGNvbnN0
IFRJbnRlcm1TZXF1ZW5jZSYgYXJncyk7CisgICAgY29uc3QgQ29uc3RhbnRVbmlvbiogd3JpdGVD
b25zdGFudFVuaW9uKGNvbnN0IFRUeXBlJiB0eXBlLCBjb25zdCBDb25zdGFudFVuaW9uKiBwQ29u
c3RVbmlvbik7CisgICAgVFN0cmluZyBnZXRUeXBlTmFtZShjb25zdCBUVHlwZSYgdHlwZSk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSk7CisgICAg
dmlydHVhbCB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9k
ZSk7CisgICAgdmlydHVhbCBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmlu
YXJ5KiBub2RlKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVElu
dGVybVVuYXJ5KiBub2RlKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQg
dmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUpOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEFn
Z3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSk7CisgICAgdmlydHVh
bCBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqIG5vZGUpOworICAgIHZp
cnR1YWwgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCogbm9kZSk7
CisKKyAgICB2b2lkIHZpc2l0Q29kZUJsb2NrKFRJbnRlcm1Ob2RlKiBub2RlKTsKKworCisgICAg
Ly8gUmV0dXJuIHRoZSBvcmlnaW5hbCBuYW1lIGlmIGhhc2ggZnVuY3Rpb24gcG9pbnRlciBpcyBO
VUxMOworICAgIC8vIG90aGVyd2lzZSByZXR1cm4gdGhlIGhhc2hlZCBuYW1lLgorICAgIFRTdHJp
bmcgaGFzaE5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSk7CisgICAgLy8gU2FtZSBhcyBoYXNoTmFt
ZSgpLCBidXQgd2l0aG91dCBoYXNoaW5nIGJ1aWx0LWluIHZhcmlhYmxlcy4KKyAgICBUU3RyaW5n
IGhhc2hWYXJpYWJsZU5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSk7CisgICAgLy8gU2FtZSBhcyBo
YXNoTmFtZSgpLCBidXQgd2l0aG91dCBoYXNoaW5nIGJ1aWx0LWluIGZ1bmN0aW9ucy4KKyAgICBU
U3RyaW5nIGhhc2hGdW5jdGlvbk5hbWUoY29uc3QgVFN0cmluZyYgbWFuZ2xlZF9uYW1lKTsKKwor
cHJpdmF0ZToKKyAgICBib29sIHN0cnVjdERlY2xhcmVkKGNvbnN0IFRTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkgY29uc3Q7CisgICAgdm9pZCBkZWNsYXJlU3RydWN0KGNvbnN0IFRTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSk7CisKKyAgICBUSW5mb1NpbmtCYXNlJiBtT2JqU2luazsKKyAgICBib29sIG1EZWNs
YXJpbmdWYXJpYWJsZXM7CisKKyAgICAvLyBTdHJ1Y3RzIGFyZSBkZWNsYXJlZCBhcyB0aGUgdHJl
ZSBpcyB0cmF2ZXJzZWQuIFRoaXMgc2V0IGNvbnRhaW5zIGFsbAorICAgIC8vIHRoZSBzdHJ1Y3Rz
IGFscmVhZHkgZGVjbGFyZWQuIEl0IGlzIG1haW50YWluZWQgc28gdGhhdCBhIHN0cnVjdCBpcwor
ICAgIC8vIGRlY2xhcmVkIG9ubHkgb25jZS4KKyAgICB0eXBlZGVmIHN0ZDo6c2V0PFRTdHJpbmc+
IERlY2xhcmVkU3RydWN0czsKKyAgICBEZWNsYXJlZFN0cnVjdHMgbURlY2xhcmVkU3RydWN0czsK
KworICAgIEZvckxvb3BVbnJvbGwgbUxvb3BVbnJvbGw7CisKKyAgICBTaEFycmF5SW5kZXhDbGFt
cGluZ1N0cmF0ZWd5IG1DbGFtcGluZ1N0cmF0ZWd5OworCisgICAgLy8gbmFtZSBoYXNoaW5nLgor
ICAgIFNoSGFzaEZ1bmN0aW9uNjQgbUhhc2hGdW5jdGlvbjsKKworICAgIE5hbWVNYXAmIG1OYW1l
TWFwOworCisgICAgVFN5bWJvbFRhYmxlJiBtU3ltYm9sVGFibGU7Cit9OworCisjZW5kaWYgIC8v
IENST1NTQ09NUElMRVJHTFNMX09VVFBVVEdMU0xCQVNFX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRITFNMLmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEhM
U0wuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmFmOTk2ZGY3MTlmYzRmYWZmOGEwYTUyMGNjN2U4M2E4YzJkN2E3
NzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9PdXRwdXRITFNMLmNwcApAQCAtMCwwICsxLDMxMzggQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuaCIK
KworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9jb21waWxlcmRlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9E
ZXRlY3REaXNjb250aW51aXR5LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZv
U2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU2VhcmNoU3ltYm9sLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXQuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL05vZGVTZWFyY2guaCIKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1Jld3JpdGVFbHNlQmxvY2tzLmgiCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+
CisjaW5jbHVkZSA8Y2Zsb2F0PgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK25hbWVzcGFjZSBzaAor
eworCitPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNvbnRleHQsIGNvbnN0
IFNoQnVpbHRJblJlc291cmNlcyYgcmVzb3VyY2VzLCBTaFNoYWRlck91dHB1dCBvdXRwdXRUeXBl
KQorICAgIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwgbUNvbnRleHQoY29u
dGV4dCksIG1PdXRwdXRUeXBlKG91dHB1dFR5cGUpCit7CisgICAgbVVuZm9sZFNob3J0Q2lyY3Vp
dCA9IG5ldyBVbmZvbGRTaG9ydENpcmN1aXQoY29udGV4dCwgdGhpcyk7CisgICAgbUluc2lkZUZ1
bmN0aW9uID0gZmFsc2U7CisKKyAgICBtVXNlc1RleHR1cmUyRCA9IGZhbHNlOworICAgIG1Vc2Vz
VGV4dHVyZTJEX2JpYXMgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmUyRFByb2ogPSBmYWxzZTsK
KyAgICBtVXNlc1RleHR1cmUyRFByb2pfYmlhcyA9IGZhbHNlOworICAgIG1Vc2VzVGV4dHVyZTJE
UHJvakxvZCA9IGZhbHNlOworICAgIG1Vc2VzVGV4dHVyZTJETG9kID0gZmFsc2U7CisgICAgbVVz
ZXNUZXh0dXJlQ3ViZSA9IGZhbHNlOworICAgIG1Vc2VzVGV4dHVyZUN1YmVfYmlhcyA9IGZhbHNl
OworICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmUyRExv
ZDAgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmUyRExvZDBfYmlhcyA9IGZhbHNlOworICAgIG1V
c2VzVGV4dHVyZTJEUHJvakxvZDAgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmUyRFByb2pMb2Qw
X2JpYXMgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmVDdWJlTG9kMCA9IGZhbHNlOworICAgIG1V
c2VzVGV4dHVyZUN1YmVMb2QwX2JpYXMgPSBmYWxzZTsKKyAgICBtVXNlc0ZyYWdDb2xvciA9IGZh
bHNlOworICAgIG1Vc2VzRnJhZ0RhdGEgPSBmYWxzZTsKKyAgICBtVXNlc0RlcHRoUmFuZ2UgPSBm
YWxzZTsKKyAgICBtVXNlc0ZyYWdDb29yZCA9IGZhbHNlOworICAgIG1Vc2VzUG9pbnRDb29yZCA9
IGZhbHNlOworICAgIG1Vc2VzRnJvbnRGYWNpbmcgPSBmYWxzZTsKKyAgICBtVXNlc1BvaW50U2l6
ZSA9IGZhbHNlOworICAgIG1Vc2VzRnJhZ0RlcHRoID0gZmFsc2U7CisgICAgbVVzZXNYb3IgPSBm
YWxzZTsKKyAgICBtVXNlc01vZDEgPSBmYWxzZTsKKyAgICBtVXNlc01vZDJ2ID0gZmFsc2U7Cisg
ICAgbVVzZXNNb2QyZiA9IGZhbHNlOworICAgIG1Vc2VzTW9kM3YgPSBmYWxzZTsKKyAgICBtVXNl
c01vZDNmID0gZmFsc2U7CisgICAgbVVzZXNNb2Q0diA9IGZhbHNlOworICAgIG1Vc2VzTW9kNGYg
PSBmYWxzZTsKKyAgICBtVXNlc0ZhY2Vmb3J3YXJkMSA9IGZhbHNlOworICAgIG1Vc2VzRmFjZWZv
cndhcmQyID0gZmFsc2U7CisgICAgbVVzZXNGYWNlZm9yd2FyZDMgPSBmYWxzZTsKKyAgICBtVXNl
c0ZhY2Vmb3J3YXJkNCA9IGZhbHNlOworICAgIG1Vc2VzQXRhbjJfMSA9IGZhbHNlOworICAgIG1V
c2VzQXRhbjJfMiA9IGZhbHNlOworICAgIG1Vc2VzQXRhbjJfMyA9IGZhbHNlOworICAgIG1Vc2Vz
QXRhbjJfNCA9IGZhbHNlOworICAgIG1Vc2VzRGlzY2FyZFJld3JpdGluZyA9IGZhbHNlOworCisg
ICAgbU51bVJlbmRlclRhcmdldHMgPSByZXNvdXJjZXMuRVhUX2RyYXdfYnVmZmVycyA/IHJlc291
cmNlcy5NYXhEcmF3QnVmZmVycyA6IDE7CisKKyAgICBtU2NvcGVEZXB0aCA9IDA7CisKKyAgICBt
VW5pcXVlSW5kZXggPSAwOworCisgICAgbUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkgPSBmYWxz
ZTsKKyAgICBtT3V0cHV0TG9kMEZ1bmN0aW9uID0gZmFsc2U7CisgICAgbUluc2lkZURpc2NvbnRp
bnVvdXNMb29wID0gZmFsc2U7CisKKyAgICBtRXhjZXNzaXZlTG9vcEluZGV4ID0gTlVMTDsKKwor
ICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgeworICAgICAgICBp
ZiAobUNvbnRleHQuc2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1Vbmlmb3JtUmVnaXN0ZXIgPSAzOyAgIC8vIFJlc2VydmUgcmVnaXN0ZXJz
IGZvciBkeF9EZXB0aFJhbmdlLCBkeF9WaWV3Q29vcmRzIGFuZCBkeF9EZXB0aEZyb250CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtVW5pZm9ybVJlZ2lz
dGVyID0gMjsgICAvLyBSZXNlcnZlIHJlZ2lzdGVycyBmb3IgZHhfRGVwdGhSYW5nZSBhbmQgZHhf
Vmlld0FkanVzdAorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1V
bmlmb3JtUmVnaXN0ZXIgPSAwOworICAgIH0KKworICAgIG1TYW1wbGVyUmVnaXN0ZXIgPSAwOwor
fQorCitPdXRwdXRITFNMOjp+T3V0cHV0SExTTCgpCit7CisgICAgZGVsZXRlIG1VbmZvbGRTaG9y
dENpcmN1aXQ7Cit9CisKK3ZvaWQgT3V0cHV0SExTTDo6b3V0cHV0KCkKK3sKKyAgICBtQ29udGFp
bnNMb29wRGlzY29udGludWl0eSA9IG1Db250ZXh0LnNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRf
U0hBREVSICYmIGNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkobUNvbnRleHQudHJlZVJvb3QpOwor
CisgICAgLy8gV29yayBhcm91bmQgRDNEOSBidWcgdGhhdCB3b3VsZCBtYW5pZmVzdCBpbiB2ZXJ0
ZXggc2hhZGVycyB3aXRoIHNlbGVjdGlvbiBibG9ja3Mgd2hpY2gKKyAgICAvLyB1c2UgYSB2ZXJ0
ZXggYXR0cmlidXRlIGFzIGEgY29uZGl0aW9uLCBhbmQgc29tZSByZWxhdGVkIGNvbXB1dGF0aW9u
IGluIHRoZSBlbHNlIGJsb2NrLgorICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQ
VVQgJiYgbUNvbnRleHQuc2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKQorICAgIHsKKyAg
ICAgICAgUmV3cml0ZUVsc2VCbG9ja3MobUNvbnRleHQudHJlZVJvb3QpOworICAgIH0KKworICAg
IG1Db250ZXh0LnRyZWVSb290LT50cmF2ZXJzZSh0aGlzKTsgICAvLyBPdXRwdXQgdGhlIGJvZHkg
Zmlyc3QgdG8gZGV0ZXJtaW5lIHdoYXQgaGFzIHRvIGdvIGluIHRoZSBoZWFkZXIKKyAgICBoZWFk
ZXIoKTsKKworICAgIG1Db250ZXh0LmluZm9TaW5rKCkub2JqIDw8IG1IZWFkZXIuY19zdHIoKTsK
KyAgICBtQ29udGV4dC5pbmZvU2luaygpLm9iaiA8PCBtQm9keS5jX3N0cigpOworfQorCitUSW5m
b1NpbmtCYXNlICZPdXRwdXRITFNMOjpnZXRCb2R5U3RyZWFtKCkKK3sKKyAgICByZXR1cm4gbUJv
ZHk7Cit9CisKK2NvbnN0IEFjdGl2ZVVuaWZvcm1zICZPdXRwdXRITFNMOjpnZXRVbmlmb3Jtcygp
Cit7CisgICAgcmV0dXJuIG1BY3RpdmVVbmlmb3JtczsKK30KKworaW50IE91dHB1dEhMU0w6OnZl
Y3RvclNpemUoY29uc3QgVFR5cGUgJnR5cGUpIGNvbnN0Cit7CisgICAgaW50IGVsZW1lbnRTaXpl
ID0gdHlwZS5pc01hdHJpeCgpID8gdHlwZS5nZXROb21pbmFsU2l6ZSgpIDogMTsKKyAgICBpbnQg
YXJyYXlTaXplID0gdHlwZS5pc0FycmF5KCkgPyB0eXBlLmdldEFycmF5U2l6ZSgpIDogMTsKKwor
ICAgIHJldHVybiBlbGVtZW50U2l6ZSAqIGFycmF5U2l6ZTsKK30KKwordm9pZCBPdXRwdXRITFNM
OjpoZWFkZXIoKQoreworICAgIFNoU2hhZGVyVHlwZSBzaGFkZXJUeXBlID0gbUNvbnRleHQuc2hh
ZGVyVHlwZTsKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtSGVhZGVyOworCisgICAgZm9yIChT
dHJ1Y3REZWNsYXJhdGlvbnM6Oml0ZXJhdG9yIHN0cnVjdERlY2xhcmF0aW9uID0gbVN0cnVjdERl
Y2xhcmF0aW9ucy5iZWdpbigpOyBzdHJ1Y3REZWNsYXJhdGlvbiAhPSBtU3RydWN0RGVjbGFyYXRp
b25zLmVuZCgpOyBzdHJ1Y3REZWNsYXJhdGlvbisrKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICpz
dHJ1Y3REZWNsYXJhdGlvbjsKKyAgICB9CisKKyAgICBmb3IgKENvbnN0cnVjdG9yczo6aXRlcmF0
b3IgY29uc3RydWN0b3IgPSBtQ29uc3RydWN0b3JzLmJlZ2luKCk7IGNvbnN0cnVjdG9yICE9IG1D
b25zdHJ1Y3RvcnMuZW5kKCk7IGNvbnN0cnVjdG9yKyspCisgICAgeworICAgICAgICBvdXQgPDwg
KmNvbnN0cnVjdG9yOworICAgIH0KKworICAgIFRTdHJpbmcgdW5pZm9ybXM7CisgICAgVFN0cmlu
ZyB2YXJ5aW5nczsKKyAgICBUU3RyaW5nIGF0dHJpYnV0ZXM7CisKKyAgICBmb3IgKFJlZmVyZW5j
ZWRTeW1ib2xzOjpjb25zdF9pdGVyYXRvciB1bmlmb3JtID0gbVJlZmVyZW5jZWRVbmlmb3Jtcy5i
ZWdpbigpOyB1bmlmb3JtICE9IG1SZWZlcmVuY2VkVW5pZm9ybXMuZW5kKCk7IHVuaWZvcm0rKykK
KyAgICB7CisgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gdW5pZm9ybS0+c2Vjb25kLT5nZXRU
eXBlKCk7CisgICAgICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSB1bmlmb3JtLT5zZWNvbmQtPmdl
dFN5bWJvbCgpOworCisgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVU
ICYmIElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSkgICAvLyBBbHNvIGRlY2xhcmUgdGhl
IHRleHR1cmUKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGluZGV4ID0gc2FtcGxlclJlZ2lz
dGVyKG1SZWZlcmVuY2VkVW5pZm9ybXNbbmFtZV0pOworCisgICAgICAgICAgICB1bmlmb3JtcyAr
PSAidW5pZm9ybSBTYW1wbGVyU3RhdGUgc2FtcGxlcl8iICsgZGVjb3JhdGVVbmlmb3JtKG5hbWUs
IHR5cGUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICIg
OiByZWdpc3RlcihzIiArIHN0cihpbmRleCkgKyAiKTtcbiI7CisKKyAgICAgICAgICAgIHVuaWZv
cm1zICs9ICJ1bmlmb3JtICIgKyB0ZXh0dXJlU3RyaW5nKHR5cGUpICsgIiB0ZXh0dXJlXyIgKyBk
ZWNvcmF0ZVVuaWZvcm0obmFtZSwgdHlwZSkgKyBhcnJheVN0cmluZyh0eXBlKSArIAorICAgICAg
ICAgICAgICAgICAgICAgICAgIiA6IHJlZ2lzdGVyKHQiICsgc3RyKGluZGV4KSArICIpO1xuIjsK
KyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuaWZvcm1z
ICs9ICJ1bmlmb3JtICIgKyB0eXBlU3RyaW5nKHR5cGUpICsgIiAiICsgZGVjb3JhdGVVbmlmb3Jt
KG5hbWUsIHR5cGUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICIgOiByZWdpc3RlcigiICsgcmVnaXN0ZXJTdHJpbmcobVJlZmVyZW5jZWRVbmlmb3Jtc1tu
YW1lXSkgKyAiKTtcbiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZmVyZW5jZWRT
eW1ib2xzOjpjb25zdF9pdGVyYXRvciB2YXJ5aW5nID0gbVJlZmVyZW5jZWRWYXJ5aW5ncy5iZWdp
bigpOyB2YXJ5aW5nICE9IG1SZWZlcmVuY2VkVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKKyAg
ICB7CisgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gdmFyeWluZy0+c2Vjb25kLT5nZXRUeXBl
KCk7CisgICAgICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSB2YXJ5aW5nLT5zZWNvbmQtPmdldFN5
bWJvbCgpOworCisgICAgICAgIC8vIFByb2dyYW0gbGlua2luZyBkZXBlbmRzIG9uIHRoaXMgZXhh
Y3QgZm9ybWF0CisgICAgICAgIHZhcnlpbmdzICs9ICJzdGF0aWMgIiArIHR5cGVTdHJpbmcodHlw
ZSkgKyAiICIgKyBkZWNvcmF0ZShuYW1lKSArIGFycmF5U3RyaW5nKHR5cGUpICsgIiA9ICIgKyBp
bml0aWFsaXplcih0eXBlKSArICI7XG4iOworICAgIH0KKworICAgIGZvciAoUmVmZXJlbmNlZFN5
bWJvbHM6OmNvbnN0X2l0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1SZWZlcmVuY2VkQXR0cmlidXRlcy5i
ZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVJlZmVyZW5jZWRBdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1
dGUrKykKKyAgICB7CisgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gYXR0cmlidXRlLT5zZWNv
bmQtPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgVFN0cmluZyAmbmFtZSA9IGF0dHJpYnV0ZS0+
c2Vjb25kLT5nZXRTeW1ib2woKTsKKworICAgICAgICBhdHRyaWJ1dGVzICs9ICJzdGF0aWMgIiAr
IHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKyBkZWNvcmF0ZShuYW1lKSArIGFycmF5U3RyaW5nKHR5
cGUpICsgIiA9ICIgKyBpbml0aWFsaXplcih0eXBlKSArICI7XG4iOworICAgIH0KKworICAgIGlm
IChtVXNlc0Rpc2NhcmRSZXdyaXRpbmcpCisgICAgeworICAgICAgICBvdXQgPDwgIiNkZWZpbmUg
QU5HTEVfVVNFU19ESVNDQVJEX1JFV1JJVElORyIgPDwgIlxuIjsKKyAgICB9CisKKyAgICBpZiAo
c2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCisgICAgeworICAgICAgICBURXh0ZW5z
aW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtQ29udGV4dC5leHRlbnNpb25CZWhh
dmlvcigpLmZpbmQoIkdMX0VYVF9kcmF3X2J1ZmZlcnMiKTsKKyAgICAgICAgY29uc3QgYm9vbCB1
c2luZ01SVEV4dGVuc2lvbiA9IChpdGVyICE9IG1Db250ZXh0LmV4dGVuc2lvbkJlaGF2aW9yKCku
ZW5kKCkgJiYgKGl0ZXItPnNlY29uZCA9PSBFQmhFbmFibGUgfHwgaXRlci0+c2Vjb25kID09IEVC
aFJlcXVpcmUpKTsKKworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbnVtQ29sb3JWYWx1ZXMg
PSB1c2luZ01SVEV4dGVuc2lvbiA/IG1OdW1SZW5kZXJUYXJnZXRzIDogMTsKKworICAgICAgICBv
dXQgPDwgIi8vIFZhcnlpbmdzXG4iOworICAgICAgICBvdXQgPDwgIHZhcnlpbmdzOworICAgICAg
ICBvdXQgPDwgIlxuIgorICAgICAgICAgICAgICAgInN0YXRpYyBmbG9hdDQgZ2xfQ29sb3JbIiA8
PCBudW1Db2xvclZhbHVlcyA8PCAiXSA9XG4iCisgICAgICAgICAgICAgICAie1xuIjsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1Db2xvclZhbHVlczsgaSsrKQorICAg
ICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdDQoMCwgMCwgMCwgMCkiOworICAg
ICAgICAgICAgaWYgKGkgKyAxICE9IG51bUNvbG9yVmFsdWVzKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG91dCA8PCAiLCI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXQg
PDwgIlxuIjsKKyAgICAgICAgfQorICAgICAgICBvdXQgPDwgIn07XG4iOworCisgICAgICAgIGlm
IChtVXNlc0ZyYWdEZXB0aCkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMg
ZmxvYXQgZ2xfRGVwdGggPSAwLjA7XG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2Vz
RnJhZ0Nvb3JkKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgInN0YXRpYyBmbG9hdDQg
Z2xfRnJhZ0Nvb3JkID0gZmxvYXQ0KDAsIDAsIDAsIDApO1xuIjsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChtVXNlc1BvaW50Q29vcmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAi
c3RhdGljIGZsb2F0MiBnbF9Qb2ludENvb3JkID0gZmxvYXQyKDAuNSwgMC41KTtcbiI7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAobVVzZXNGcm9udEZhY2luZykKKyAgICAgICAgeworICAgICAg
ICAgICAgb3V0IDw8ICJzdGF0aWMgYm9vbCBnbF9Gcm9udEZhY2luZyA9IGZhbHNlO1xuIjsKKyAg
ICAgICAgfQorCisgICAgICAgIG91dCA8PCAiXG4iOworCisgICAgICAgIGlmIChtVXNlc0RlcHRo
UmFuZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAic3RydWN0IGdsX0RlcHRoUmFu
Z2VQYXJhbWV0ZXJzXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAg
ICAgICAiICAgIGZsb2F0IG5lYXI7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBm
YXI7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBkaWZmO1xuIgorICAgICAgICAg
ICAgICAgICAgICJ9O1xuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKKyAgICAgICAgewor
ICAgICAgICAgICAgb3V0IDw8ICJjYnVmZmVyIERyaXZlckNvbnN0YW50cyA6IHJlZ2lzdGVyKGIx
KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgICAgICAgICBpZiAobVVzZXNE
ZXB0aFJhbmdlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGZs
b2F0MyBkeF9EZXB0aFJhbmdlIDogcGFja29mZnNldChjMCk7XG4iOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAobVVzZXNGcmFnQ29vcmQpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQ0IGR4X1ZpZXdDb29yZHMgOiBwYWNrb2Zmc2V0KGMx
KTtcbiI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtVXNlc0ZyYWdDb29yZCB8
fCBtVXNlc0Zyb250RmFjaW5nKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8
PCAiICAgIGZsb2F0MyBkeF9EZXB0aEZyb250IDogcGFja29mZnNldChjMik7XG4iOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBvdXQgPDwgIn07XG4iOworICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgInVuaWZvcm0gZmxvYXQzIGR4X0RlcHRo
UmFuZ2UgOiByZWdpc3RlcihjMCk7IjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KG1Vc2VzRnJhZ0Nvb3JkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAi
dW5pZm9ybSBmbG9hdDQgZHhfVmlld0Nvb3JkcyA6IHJlZ2lzdGVyKGMxKTtcbiI7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmIChtVXNlc0ZyYWdDb29yZCB8fCBtVXNlc0Zyb250RmFj
aW5nKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAidW5pZm9ybSBmbG9h
dDMgZHhfRGVwdGhGcm9udCA6IHJlZ2lzdGVyKGMyKTtcbiI7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBvdXQgPDwgIlxuIjsKKworICAgICAgICBpZiAobVVzZXNEZXB0aFJh
bmdlKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgInN0YXRpYyBnbF9EZXB0aFJhbmdl
UGFyYW1ldGVycyBnbF9EZXB0aFJhbmdlID0ge2R4X0RlcHRoUmFuZ2UueCwgZHhfRGVwdGhSYW5n
ZS55LCBkeF9EZXB0aFJhbmdlLnp9O1xuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIG91dCA8PCAgdW5pZm9ybXM7CisgICAgICAgIG91dCA8
PCAiXG4iOworCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoc2FtcGxlcjJEIHMs
IGZsb2F0MiB0KVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAg
ICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRChzLCB0KTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJE
KFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2KVxuIgorICAgICAgICAgICAg
ICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNh
bXBsZShzLCB1dik7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAg
ICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRfYmlhcykK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBV
VCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0
dXJlMkQoc2FtcGxlcjJEIHMsIGZsb2F0MiB0LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAg
ICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgy
RGJpYXMocywgZmxvYXQ0KHQueCwgdC55LCAwLCBiaWFzKSk7XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUy
RChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MiB1diwgZmxvYXQgYmlhcylcbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAg
ICByZXR1cm4gdC5TYW1wbGVCaWFzKHMsIHV2LCBiaWFzKTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChtVXNlc1RleHR1cmUyRFByb2opCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtT3V0cHV0
VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
b3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQzIHQpXG4i
CisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIg
ICAgcmV0dXJuIHRleDJEcHJvaihzLCBmbG9hdDQodC54LCB0LnksIDAsIHQueikpO1xuIgorICAg
ICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICAgICAiXG4iCisg
ICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQg
cywgZmxvYXQ0IHQpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAg
ICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEcHJvaihzLCB0KTtcbiIKKyAgICAgICAgICAg
ICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQ
VVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4
dHVyZTJEUHJvaihUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncpXG4iCisg
ICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAg
cmV0dXJuIHQuU2FtcGxlKHMsIGZsb2F0Mih1dncueCAvIHV2dy56LCB1dncueSAvIHV2dy56KSk7
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAg
ICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKFRl
eHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQ0IHV2dylcbiIKKyAgICAgICAgICAgICAg
ICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1w
bGUocywgZmxvYXQyKHV2dy54IC8gdXZ3LncsIHV2dy55IC8gdXZ3LncpKTtcbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pfYmlhcykKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBz
LCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIntcbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRiaWFzKHMsIGZsb2F0NCh0
LnggLyB0LnosIHQueSAvIHQueiwgMCwgYmlhcykpO1xuIgorICAgICAgICAgICAgICAgICAgICAg
ICAifVxuIgorICAgICAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAg
ICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQ0IHQsIGZsb2F0
IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHRleDJEYmlhcyhzLCBmbG9hdDQodC54IC8gdC53LCB0LnkgLyB0
LncsIDAsIGJpYXMpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYg
KG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihUZXh0dXJlMkQgdCwgU2Ft
cGxlclN0YXRlIHMsIGZsb2F0MyB1dncsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxl
QmlhcyhzLCBmbG9hdDIodXZ3LnggLyB1dncueiwgdXZ3LnkgLyB1dncueiksIGJpYXMpO1xuIgor
ICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICAgICAiXG4i
CisgICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihUZXh0dXJl
MkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0NCB1dncsIGZsb2F0IGJpYXMpXG4iCisgICAgICAg
ICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHQuU2FtcGxlQmlhcyhzLCBmbG9hdDIodXZ3LnggLyB1dncudywgdXZ3LnkgLyB1dncudyksIGJp
YXMpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAg
ICAgICAiXG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoc2Ft
cGxlckNVQkUgcywgZmxvYXQzIHQpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisg
ICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkUocywgdCk7XG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNM
MTFfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0
IGdsX3RleHR1cmVDdWJlKFRleHR1cmVDdWJlIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3
KVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAg
ICAiICAgIHJldHVybiB0LlNhbXBsZShzLCB1dncpO1xuIgorICAgICAgICAgICAgICAgICAgICAg
ICAifVxuIgorICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1V
c2VzVGV4dHVyZUN1YmVfYmlhcykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1PdXRwdXRU
eXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBv
dXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShzYW1wbGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxv
YXQgYmlhcylcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRWJpYXMocywgZmxvYXQ0KHQueCwgdC55LCB0Lnos
IGJpYXMpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAg
ICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRw
dXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoVGV4dHVyZUN1YmUgdCwgU2FtcGxlclN0
YXRlIHMsIGZsb2F0MyB1dncsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAgICAg
ICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlQmlhcyhz
LCB1dncsIGJpYXMpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAg
ICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBVTlJF
QUNIQUJMRSgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlc2UgKkxvZDAgaW50cmluc2lj
cyBhcmUgbm90IGF2YWlsYWJsZSBpbiBHTCBmcmFnbWVudCBzaGFkZXJzLgorICAgICAgICAvLyBU
aGV5IGFyZSB1c2VkIHRvIHNhbXBsZSB1c2luZyBkaXNjb250aW51b3VzIHRleHR1cmUgY29vcmRp
bmF0ZXMuCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExvZDApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kMChzYW1wbGVy
MkQgcywgZmxvYXQyIHQpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAg
ICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LngsIHQueSwg
MCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAg
ICAgICAgICAiXG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1
dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRMb2QwKFRleHR1cmUyRCB0LCBTYW1wbGVyU3Rh
dGUgcywgZmxvYXQyIHV2KVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIHV2LCAwKTtcbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxu
IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExvZDBfYmlhcykKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRMb2QwKHNh
bXBsZXIyRCBzLCBmbG9hdDIgdCwgZmxvYXQgYmlhcylcbiIKKyAgICAgICAgICAgICAgICAgICAg
ICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2Qocywg
ZmxvYXQ0KHQueCwgdC55LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4i
CisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoVGV4dHVy
ZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDIgdXYsIGZsb2F0IGJpYXMpXG4iCisgICAgICAg
ICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHQuU2FtcGxlTGV2ZWwocywgdXYsIDApO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxu
IgorICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4
dHVyZTJEUHJvakxvZDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9
PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8
ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZDAoc2FtcGxlcjJEIHMsIGZsb2F0MyB0KVxuIgor
ICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC56LCB0LnkgLyB0LnosIDAsIDApKTtc
biIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAg
IlxuIgorICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2Qo
c2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgor
ICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54
IC8gdC53LCB0LnkgLyB0LncsIDAsIDApKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1c
biIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZDAo
VGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3KVxuIgorICAgICAgICAgICAg
ICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNh
bXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy56LCB1dncueSAvIHV2dy56KSwgMCk7XG4i
CisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJc
biIKKyAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kMChU
ZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0NCB1dncpXG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2Ft
cGxlTGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3LncsIHV2dy55IC8gdXZ3LncpLCAwKTtcbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxu
IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pMb2QwX2JpYXMpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJv
akxvZDBfYmlhcyhzYW1wbGVyMkQgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCisgICAgICAg
ICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQueiwgMCwgMCkpO1xuIgorICAg
ICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICAgICAiXG4iCisg
ICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZF9iaWFzKHNh
bXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQgYmlhcylcbiIKKyAgICAgICAgICAgICAgICAgICAg
ICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2Qocywg
ZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUy
RFByb2pMb2RfYmlhcyhUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncsIGZs
b2F0IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3
LnosIHV2dy55IC8gdXZ3LnopLCAwKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICAgICAiZmxv
YXQ0IGdsX3RleHR1cmUyRFByb2pMb2RfYmlhcyhUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMs
IGZsb2F0NCB1dncsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4i
CisgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgZmxv
YXQyKHV2dy54IC8gdXZ3LncsIHV2dy55IC8gdXZ3LncpLCAwKTtcbiIKKyAgICAgICAgICAgICAg
ICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChtVXNlc1RleHR1cmVDdWJlTG9kMCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1P
dXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxvZDAoc2FtcGxlckNVQkUgcywgZmxv
YXQzIHQpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIDAp
KTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAg
ICAgIlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBl
ID09IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0
IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmVMb2QwKFRleHR1cmVDdWJlIHQsIFNhbXBsZXJTdGF0
ZSBzLCBmbG9hdDMgdXZ3KVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIHV2dywgMCk7XG4i
CisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJc
biI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZUxvZDBfYmlhcykKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxv
ZDAoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENV
QkVsb2QocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIDApKTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1
YmVMb2QwKFRleHR1cmVDdWJlIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3LCBmbG9hdCBi
aWFzKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIHV2dywgMCk7XG4iCisgICAgICAgICAg
ICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAodXNpbmdNUlRFeHRlbnNpb24gJiYgbU51bVJlbmRlclRhcmdldHMgPiAxKQorICAg
ICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIiNkZWZpbmUgR0xfVVNFU19NUlRcbiI7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAobVVzZXNGcmFnQ29sb3IpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX0ZSQUdfQ09MT1JcbiI7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAobVVzZXNGcmFnRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8
ICIjZGVmaW5lIEdMX1VTRVNfRlJBR19EQVRBXG4iOworICAgICAgICB9CisgICAgfQorICAgIGVs
c2UgICAvLyBWZXJ0ZXggc2hhZGVyCisgICAgeworICAgICAgICBvdXQgPDwgIi8vIEF0dHJpYnV0
ZXNcbiI7CisgICAgICAgIG91dCA8PCAgYXR0cmlidXRlczsKKyAgICAgICAgb3V0IDw8ICJcbiIK
KyAgICAgICAgICAgICAgICJzdGF0aWMgZmxvYXQ0IGdsX1Bvc2l0aW9uID0gZmxvYXQ0KDAsIDAs
IDAsIDApO1xuIjsKKyAgICAgICAgCisgICAgICAgIGlmIChtVXNlc1BvaW50U2l6ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgZmxvYXQgZ2xfUG9pbnRTaXplID0gZmxv
YXQoMSk7XG4iOworICAgICAgICB9CisKKyAgICAgICAgb3V0IDw8ICJcbiIKKyAgICAgICAgICAg
ICAgICIvLyBWYXJ5aW5nc1xuIjsKKyAgICAgICAgb3V0IDw8ICB2YXJ5aW5nczsKKyAgICAgICAg
b3V0IDw8ICJcbiI7CisKKyAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgb3V0IDw8ICJzdHJ1Y3QgZ2xfRGVwdGhSYW5nZVBhcmFtZXRlcnNcbiIKKyAg
ICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQgbmVh
cjtcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGZhcjtcbiIKKyAgICAgICAgICAg
ICAgICAgICAiICAgIGZsb2F0IGRpZmY7XG4iCisgICAgICAgICAgICAgICAgICAgIn07XG4iCisg
ICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtT3V0cHV0
VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobVVz
ZXNEZXB0aFJhbmdlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiY2J1
ZmZlciBEcml2ZXJDb25zdGFudHMgOiByZWdpc3RlcihiMSlcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDMgZHhfRGVwdGhS
YW5nZSA6IHBhY2tvZmZzZXQoYzApO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifTtcbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtVXNlc0RlcHRoUmFuZ2Up
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJ1bmlmb3JtIGZsb2F0MyBk
eF9EZXB0aFJhbmdlIDogcmVnaXN0ZXIoYzApO1xuIjsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgb3V0IDw8ICJ1bmlmb3JtIGZsb2F0NCBkeF9WaWV3QWRqdXN0IDogcmVnaXN0ZXIoYzEp
O1xuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bVVzZXNEZXB0aFJhbmdlKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgInN0YXRpYyBn
bF9EZXB0aFJhbmdlUGFyYW1ldGVycyBnbF9EZXB0aFJhbmdlID0ge2R4X0RlcHRoUmFuZ2UueCwg
ZHhfRGVwdGhSYW5nZS55LCBkeF9EZXB0aFJhbmdlLnp9O1xuIgorICAgICAgICAgICAgICAgICAg
ICJcbiI7CisgICAgICAgIH0KKworICAgICAgICBvdXQgPDwgdW5pZm9ybXM7CisgICAgICAgIG91
dCA8PCAiXG4iOworICAgICAgICAKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChz
YW1wbGVyMkQgcywgZmxvYXQyIHQpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisg
ICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0Lngs
IHQueSwgMCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAg
ICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAo
bU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoVGV4dHVyZTJEIHQsIFNhbXBsZXJT
dGF0ZSBzLCBmbG9hdDIgdXYpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXYsIDApO1xu
IgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICAgICAi
XG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJETG9kKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZChzYW1wbGVy
MkQgcywgZmxvYXQyIHQsIGZsb2F0IGxvZClcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIntc
biIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0
KHQueCwgdC55LCAwLCBsb2QpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAg
ICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kKFRleHR1cmUyRCB0
LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2LCBmbG9hdCBsb2QpXG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2Ft
cGxlTGV2ZWwocywgdXYsIGxvZCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisg
ICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJl
MkRQcm9qKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExT
TDlfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0
IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0MyB0KVxuIgorICAgICAgICAgICAg
ICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgy
RGxvZChzLCBmbG9hdDQodC54IC8gdC56LCB0LnkgLyB0LnosIDAsIDApKTtcbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAg
ICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZs
b2F0NCB0KVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC53LCB0LnkgLyB0
LncsIDAsIDApKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAg
ICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1P
dXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihUZXh0dXJlMkQgdCwgU2FtcGxl
clN0YXRlIHMsIGZsb2F0MyB1dncpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisg
ICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgZmxvYXQy
KHV2dy54IC8gdXZ3LnosIHV2dy55IC8gdXZ3LnopLCAwKTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAg
ICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0
ZSBzLCBmbG9hdDQgdXZ3KVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncu
eCAvIHV2dy53LCB1dncueSAvIHV2dy53KSwgMCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAg
ICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVz
ZXNUZXh0dXJlMkRQcm9qTG9kKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobU91dHB1dFR5
cGUgPT0gU0hfSExTTDlfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91
dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2Qoc2FtcGxlcjJEIHMsIGZsb2F0MyB0LCBm
bG9hdCBsb2QpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LnosIHQueSAv
IHQueiwgMCwgbG9kKSk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAg
ICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90
ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQgbG9kKVxuIgorICAg
ICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC53LCB0LnkgLyB0LncsIDAsIGxvZCkpO1xu
IgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICAgICAi
XG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0g
U0hfSExTTDExX09VVFBVVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwg
ImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywg
ZmxvYXQzIHV2dywgZmxvYXQgbG9kKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgor
ICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0
Mih1dncueCAvIHV2dy56LCB1dncueSAvIHV2dy56KSwgbG9kKTtcbiIKKyAgICAgICAgICAgICAg
ICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAg
ICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QoVGV4dHVyZTJEIHQsIFNhbXBs
ZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3LCBmbG9hdCBsb2QpXG4iCisgICAgICAgICAgICAgICAgICAg
ICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2
ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3LncsIHV2dy55IC8gdXZ3LncpLCBsb2QpO1xuIgorICAg
ICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoc2FtcGxlckNVQkUgcywg
ZmxvYXQzIHQpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwgdC55LCB0Lnos
IDApKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRU
eXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
b3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoVGV4dHVyZUN1YmUgdCwgU2FtcGxlclN0YXRl
IHMsIGZsb2F0MyB1dncpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAg
ICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXZ3LCAwKTtcbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxu
IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmVDdWJlTG9kKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kKHNhbXBs
ZXJDVUJFIHMsIGZsb2F0MyB0LCBmbG9hdCBsb2QpXG4iCisgICAgICAgICAgICAgICAgICAgICAg
ICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkVsb2Qocywg
ZmxvYXQ0KHQueCwgdC55LCB0LnosIGxvZCkpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAi
fVxuIgorICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxvZChU
ZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQgbG9kKVxuIgor
ICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0LlNhbXBsZUxldmVsKHMsIHV2dywgbG9kKTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmIChtVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9V
U0VTX0ZSQUdfQ09PUkRcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzUG9pbnRDb29yZCkKKyAg
ICB7CisgICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX1BPSU5UX0NPT1JEXG4iOworICAg
IH0KKworICAgIGlmIChtVXNlc0Zyb250RmFjaW5nKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICIj
ZGVmaW5lIEdMX1VTRVNfRlJPTlRfRkFDSU5HXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc1Bv
aW50U2l6ZSkKKyAgICB7CisgICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX1BPSU5UX1NJ
WkVcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzRnJhZ0RlcHRoKQorICAgIHsKKyAgICAgICAg
b3V0IDw8ICIjZGVmaW5lIEdMX1VTRVNfRlJBR19ERVBUSFxuIjsKKyAgICB9CisKKyAgICBpZiAo
bVVzZXNEZXB0aFJhbmdlKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICIjZGVmaW5lIEdMX1VTRVNf
REVQVEhfUkFOR0VcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzWG9yKQorICAgIHsKKyAgICAg
ICAgb3V0IDw8ICJib29sIHhvcihib29sIHAsIGJvb2wgcSlcbiIKKyAgICAgICAgICAgICAgICJ7
XG4iCisgICAgICAgICAgICAgICAiICAgIHJldHVybiAocCB8fCBxKSAmJiAhKHAgJiYgcSk7XG4i
CisgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgIlxuIjsKKyAgICB9CisKKyAg
ICBpZiAobVVzZXNNb2QxKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJmbG9hdCBtb2QoZmxvYXQg
eCwgZmxvYXQgeSlcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAg
IHJldHVybiB4IC0geSAqIGZsb29yKHggLyB5KTtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iCisg
ICAgICAgICAgICAgICAiXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc01vZDJ2KQorICAgIHsK
KyAgICAgICAgb3V0IDw8ICJmbG9hdDIgbW9kKGZsb2F0MiB4LCBmbG9hdDIgeSlcbiIKKyAgICAg
ICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIHJldHVybiB4IC0geSAqIGZsb29y
KHggLyB5KTtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAiXG4iOwor
ICAgIH0KKworICAgIGlmIChtVXNlc01vZDJmKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJmbG9h
dDIgbW9kKGZsb2F0MiB4LCBmbG9hdCB5KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHggLSB5ICogZmxvb3IoeCAvIHkpO1xuIgorICAgICAgICAg
ICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICJcbiI7CisgICAgfQorICAgIAorICAgIGlmICht
VXNlc01vZDN2KQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJmbG9hdDMgbW9kKGZsb2F0MyB4LCBm
bG9hdDMgeSlcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB4IC0geSAqIGZsb29yKHggLyB5KTtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iCisgICAg
ICAgICAgICAgICAiXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc01vZDNmKQorICAgIHsKKyAg
ICAgICAgb3V0IDw8ICJmbG9hdDMgbW9kKGZsb2F0MyB4LCBmbG9hdCB5KVxuIgorICAgICAgICAg
ICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHggLSB5ICogZmxvb3IoeCAv
IHkpO1xuIgorICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICJcbiI7CisgICAg
fQorCisgICAgaWYgKG1Vc2VzTW9kNHYpCisgICAgeworICAgICAgICBvdXQgPDwgImZsb2F0NCBt
b2QoZmxvYXQ0IHgsIGZsb2F0NCB5KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHggLSB5ICogZmxvb3IoeCAvIHkpO1xuIgorICAgICAgICAgICAg
ICAgIn1cbiIKKyAgICAgICAgICAgICAgICJcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzTW9k
NGYpCisgICAgeworICAgICAgICBvdXQgPDwgImZsb2F0NCBtb2QoZmxvYXQ0IHgsIGZsb2F0IHkp
XG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4geCAt
IHkgKiBmbG9vcih4IC8geSk7XG4iCisgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAg
ICAgIlxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNGYWNlZm9yd2FyZDEpCisgICAgeworICAg
ICAgICBvdXQgPDwgImZsb2F0IGZhY2Vmb3J3YXJkKGZsb2F0IE4sIGZsb2F0IEksIGZsb2F0IE5y
ZWYpXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICBpZihkb3Qo
TnJlZiwgSSkgPj0gMClcbiIKKyAgICAgICAgICAgICAgICIgICAge1xuIgorICAgICAgICAgICAg
ICAgIiAgICAgICAgcmV0dXJuIC1OO1xuIgorICAgICAgICAgICAgICAgIiAgICB9XG4iCisgICAg
ICAgICAgICAgICAiICAgIGVsc2VcbiIKKyAgICAgICAgICAgICAgICIgICAge1xuIgorICAgICAg
ICAgICAgICAgIiAgICAgICAgcmV0dXJuIE47XG4iCisgICAgICAgICAgICAgICAiICAgIH1cbiIK
KyAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAiXG4iOworICAgIH0KKworICAg
IGlmIChtVXNlc0ZhY2Vmb3J3YXJkMikKKyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQyIGZh
Y2Vmb3J3YXJkKGZsb2F0MiBOLCBmbG9hdDIgSSwgZmxvYXQyIE5yZWYpXG4iCisgICAgICAgICAg
ICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICBpZihkb3QoTnJlZiwgSSkgPj0gMClcbiIK
KyAgICAgICAgICAgICAgICIgICAge1xuIgorICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJu
IC1OO1xuIgorICAgICAgICAgICAgICAgIiAgICB9XG4iCisgICAgICAgICAgICAgICAiICAgIGVs
c2VcbiIKKyAgICAgICAgICAgICAgICIgICAge1xuIgorICAgICAgICAgICAgICAgIiAgICAgICAg
cmV0dXJuIE47XG4iCisgICAgICAgICAgICAgICAiICAgIH1cbiIKKyAgICAgICAgICAgICAgICJ9
XG4iCisgICAgICAgICAgICAgICAiXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0ZhY2Vmb3J3
YXJkMykKKyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQzIGZhY2Vmb3J3YXJkKGZsb2F0MyBO
LCBmbG9hdDMgSSwgZmxvYXQzIE5yZWYpXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAg
ICAgICAgICAgIiAgICBpZihkb3QoTnJlZiwgSSkgPj0gMClcbiIKKyAgICAgICAgICAgICAgICIg
ICAge1xuIgorICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIC1OO1xuIgorICAgICAgICAg
ICAgICAgIiAgICB9XG4iCisgICAgICAgICAgICAgICAiICAgIGVsc2VcbiIKKyAgICAgICAgICAg
ICAgICIgICAge1xuIgorICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIE47XG4iCisgICAg
ICAgICAgICAgICAiICAgIH1cbiIKKyAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAg
ICAiXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0ZhY2Vmb3J3YXJkNCkKKyAgICB7CisgICAg
ICAgIG91dCA8PCAiZmxvYXQ0IGZhY2Vmb3J3YXJkKGZsb2F0NCBOLCBmbG9hdDQgSSwgZmxvYXQ0
IE5yZWYpXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICBpZihk
b3QoTnJlZiwgSSkgPj0gMClcbiIKKyAgICAgICAgICAgICAgICIgICAge1xuIgorICAgICAgICAg
ICAgICAgIiAgICAgICAgcmV0dXJuIC1OO1xuIgorICAgICAgICAgICAgICAgIiAgICB9XG4iCisg
ICAgICAgICAgICAgICAiICAgIGVsc2VcbiIKKyAgICAgICAgICAgICAgICIgICAge1xuIgorICAg
ICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIE47XG4iCisgICAgICAgICAgICAgICAiICAgIH1c
biIKKyAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAiXG4iOworICAgIH0KKwor
ICAgIGlmIChtVXNlc0F0YW4yXzEpCisgICAgeworICAgICAgICBvdXQgPDwgImZsb2F0IGF0YW55
eChmbG9hdCB5LCBmbG9hdCB4KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAg
ICAgICIgICAgaWYoeCA9PSAwICYmIHkgPT0gMCkgeCA9IDE7XG4iICAgLy8gQXZvaWQgcHJvZHVj
aW5nIGEgTmFOCisgICAgICAgICAgICAgICAiICAgIHJldHVybiBhdGFuMih5LCB4KTtcbiIKKyAg
ICAgICAgICAgICAgICJ9XG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0F0YW4yXzIpCisgICAg
eworICAgICAgICBvdXQgPDwgImZsb2F0MiBhdGFueXgoZmxvYXQyIHksIGZsb2F0MiB4KVxuIgor
ICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgaWYoeFswXSA9PSAwICYm
IHlbMF0gPT0gMCkgeFswXSA9IDE7XG4iCisgICAgICAgICAgICAgICAiICAgIGlmKHhbMV0gPT0g
MCAmJiB5WzFdID09IDApIHhbMV0gPSAxO1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4g
ZmxvYXQyKGF0YW4yKHlbMF0sIHhbMF0pLCBhdGFuMih5WzFdLCB4WzFdKSk7XG4iCisgICAgICAg
ICAgICAgICAifVxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNBdGFuMl8zKQorICAgIHsKKyAg
ICAgICAgb3V0IDw8ICJmbG9hdDMgYXRhbnl4KGZsb2F0MyB5LCBmbG9hdDMgeClcbiIKKyAgICAg
ICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIGlmKHhbMF0gPT0gMCAmJiB5WzBd
ID09IDApIHhbMF0gPSAxO1xuIgorICAgICAgICAgICAgICAgIiAgICBpZih4WzFdID09IDAgJiYg
eVsxXSA9PSAwKSB4WzFdID0gMTtcbiIKKyAgICAgICAgICAgICAgICIgICAgaWYoeFsyXSA9PSAw
ICYmIHlbMl0gPT0gMCkgeFsyXSA9IDE7XG4iCisgICAgICAgICAgICAgICAiICAgIHJldHVybiBm
bG9hdDMoYXRhbjIoeVswXSwgeFswXSksIGF0YW4yKHlbMV0sIHhbMV0pLCBhdGFuMih5WzJdLCB4
WzJdKSk7XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNB
dGFuMl80KQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJmbG9hdDQgYXRhbnl4KGZsb2F0NCB5LCBm
bG9hdDQgeClcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIGlm
KHhbMF0gPT0gMCAmJiB5WzBdID09IDApIHhbMF0gPSAxO1xuIgorICAgICAgICAgICAgICAgIiAg
ICBpZih4WzFdID09IDAgJiYgeVsxXSA9PSAwKSB4WzFdID0gMTtcbiIKKyAgICAgICAgICAgICAg
ICIgICAgaWYoeFsyXSA9PSAwICYmIHlbMl0gPT0gMCkgeFsyXSA9IDE7XG4iCisgICAgICAgICAg
ICAgICAiICAgIGlmKHhbM10gPT0gMCAmJiB5WzNdID09IDApIHhbM10gPSAxO1xuIgorICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gZmxvYXQ0KGF0YW4yKHlbMF0sIHhbMF0pLCBhdGFuMih5WzFd
LCB4WzFdKSwgYXRhbjIoeVsyXSwgeFsyXSksIGF0YW4yKHlbM10sIHhbM10pKTtcbiIKKyAgICAg
ICAgICAgICAgICJ9XG4iOworICAgIH0KK30KKwordm9pZCBPdXRwdXRITFNMOjp2aXNpdFN5bWJv
bChUSW50ZXJtU3ltYm9sICpub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5
OworCisgICAgVFN0cmluZyBuYW1lID0gbm9kZS0+Z2V0U3ltYm9sKCk7CisKKyAgICBpZiAobmFt
ZSA9PSAiZ2xfRnJhZ0NvbG9yIikKKyAgICB7CisgICAgICAgIG91dCA8PCAiZ2xfQ29sb3JbMF0i
OworICAgICAgICBtVXNlc0ZyYWdDb2xvciA9IHRydWU7CisgICAgfQorICAgIGVsc2UgaWYgKG5h
bWUgPT0gImdsX0ZyYWdEYXRhIikKKyAgICB7CisgICAgICAgIG91dCA8PCAiZ2xfQ29sb3IiOwor
ICAgICAgICBtVXNlc0ZyYWdEYXRhID0gdHJ1ZTsKKyAgICB9CisgICAgZWxzZSBpZiAobmFtZSA9
PSAiZ2xfRGVwdGhSYW5nZSIpCisgICAgeworICAgICAgICBtVXNlc0RlcHRoUmFuZ2UgPSB0cnVl
OworICAgICAgICBvdXQgPDwgbmFtZTsKKyAgICB9CisgICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xf
RnJhZ0Nvb3JkIikKKyAgICB7CisgICAgICAgIG1Vc2VzRnJhZ0Nvb3JkID0gdHJ1ZTsKKyAgICAg
ICAgb3V0IDw8IG5hbWU7CisgICAgfQorICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX1BvaW50Q29v
cmQiKQorICAgIHsKKyAgICAgICAgbVVzZXNQb2ludENvb3JkID0gdHJ1ZTsKKyAgICAgICAgb3V0
IDw8IG5hbWU7CisgICAgfQorICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX0Zyb250RmFjaW5nIikK
KyAgICB7CisgICAgICAgIG1Vc2VzRnJvbnRGYWNpbmcgPSB0cnVlOworICAgICAgICBvdXQgPDwg
bmFtZTsKKyAgICB9CisgICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfUG9pbnRTaXplIikKKyAgICB7
CisgICAgICAgIG1Vc2VzUG9pbnRTaXplID0gdHJ1ZTsKKyAgICAgICAgb3V0IDw8IG5hbWU7Cisg
ICAgfQorICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX0ZyYWdEZXB0aEVYVCIpCisgICAgeworICAg
ICAgICBtVXNlc0ZyYWdEZXB0aCA9IHRydWU7CisgICAgICAgIG91dCA8PCAiZ2xfRGVwdGgiOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IG5v
ZGUtPmdldFF1YWxpZmllcigpOworCisgICAgICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxVW5pZm9y
bSkKKyAgICAgICAgeworICAgICAgICAgICAgbVJlZmVyZW5jZWRVbmlmb3Jtc1tuYW1lXSA9IG5v
ZGU7CisgICAgICAgICAgICBvdXQgPDwgZGVjb3JhdGVVbmlmb3JtKG5hbWUsIG5vZGUtPmdldFR5
cGUoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocXVhbGlmaWVyID09IEV2cUF0dHJp
YnV0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbVJlZmVyZW5jZWRBdHRyaWJ1dGVzW25hbWVd
ID0gbm9kZTsKKyAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCB8fCBxdWFsaWZpZXIg
PT0gRXZxSW52YXJpYW50VmFyeWluZ091dCB8fCBxdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8
IHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5aW5nSW4pCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1SZWZlcmVuY2VkVmFyeWluZ3NbbmFtZV0gPSBub2RlOworICAgICAgICAgICAgb3V0IDw8
IGRlY29yYXRlKG5hbWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9
PSBFdnFJbnRlcm5hbCkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8IG5hbWU7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgZGVjb3Jh
dGUobmFtZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgT3V0cHV0SExTTDo6dmlzaXRC
aW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCit7CisgICAgVEluZm9TaW5r
QmFzZSAmb3V0ID0gbUJvZHk7CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgewor
ICAgICAgY2FzZSBFT3BBc3NpZ246ICAgICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgIigiLCAiID0gIiwgIikiKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BJbml0
aWFsaXplOgorICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIC8vIEdMU0wgYWxsb3dzIHRvIHdyaXRlIHRoaW5ncyBsaWtlICJmbG9hdCB4ID0geDsi
IHdoZXJlIGEgbmV3IHZhcmlhYmxlIHggaXMgZGVmaW5lZAorICAgICAgICAgICAgLy8gYW5kIHRo
ZSB2YWx1ZSBvZiBhbiBleGlzdGluZyB2YXJpYWJsZSB4IGlzIGFzc2lnbmVkLiBITFNMIHVzZXMg
QyBzZW1hbnRpY3MgKHRoZQorICAgICAgICAgICAgLy8gbmV3IHZhcmlhYmxlIGlzIGNyZWF0ZWQg
YmVmb3JlIHRoZSBhc3NpZ25tZW50IGlzIGV2YWx1YXRlZCksIHNvIHdlIG5lZWQgdG8gY29udmVy
dAorICAgICAgICAgICAgLy8gdGhpcyB0byAiZmxvYXQgdCA9IHgsIHggPSB0OyIuCisKKyAgICAg
ICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUgPSBub2RlLT5nZXRMZWZ0KCktPmdldEFz
U3ltYm9sTm9kZSgpOworICAgICAgICAgICAgVEludGVybVR5cGVkICpleHByZXNzaW9uID0gbm9k
ZS0+Z2V0UmlnaHQoKTsKKworICAgICAgICAgICAgc2g6OlNlYXJjaFN5bWJvbCBzZWFyY2hTeW1i
b2woc3ltYm9sTm9kZS0+Z2V0U3ltYm9sKCkpOworICAgICAgICAgICAgZXhwcmVzc2lvbi0+dHJh
dmVyc2UoJnNlYXJjaFN5bWJvbCk7CisgICAgICAgICAgICBib29sIHNhbWVTeW1ib2wgPSBzZWFy
Y2hTeW1ib2wuZm91bmRNYXRjaCgpOworCisgICAgICAgICAgICBpZiAoc2FtZVN5bWJvbCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBUeXBlIGFscmVhZHkgcHJpbnRlZAorICAg
ICAgICAgICAgICAgIG91dCA8PCAidCIgKyBzdHIobVVuaXF1ZUluZGV4KSArICIgPSAiOworICAg
ICAgICAgICAgICAgIGV4cHJlc3Npb24tPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAg
IG91dCA8PCAiLCAiOworICAgICAgICAgICAgICAgIHN5bWJvbE5vZGUtPnRyYXZlcnNlKHRoaXMp
OworICAgICAgICAgICAgICAgIG91dCA8PCAiID0gdCIgKyBzdHIobVVuaXF1ZUluZGV4KTsKKwor
ICAgICAgICAgICAgICAgIG1VbmlxdWVJbmRleCsrOworICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh2aXNpdCA9
PSBJblZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIiA9ICI7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEFkZEFzc2lnbjogICAgICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgKz0gIiwgIikiKTsgICAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEVPcFN1YkFzc2lnbjogICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAiKCIsICIgLT0gIiwgIikiKTsgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcE11
bEFzc2lnbjogICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgKj0gIiwg
IikiKTsgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyQXNz
aWduOiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgKj0gIiwgIikiKTsgICAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOiBvdXRwdXRUcmlwbGV0
KHZpc2l0LCAiKCIsICIgKj0gIiwgIikiKTsgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVP
cFZlY3RvclRpbWVzTWF0cml4QXNzaWduOgorICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiKCI7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8
ICIgPSBtdWwoIjsKKyAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhpcyk7
CisgICAgICAgICAgICBvdXQgPDwgIiwgdHJhbnNwb3NlKCI7ICAgCisgICAgICAgIH0KKyAgICAg
ICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIikpKSI7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4QXNzaWduOgor
ICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91
dCA8PCAiKCI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCkK
KyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICIgPSBtdWwoIjsKKyAgICAgICAgICAgIG5v
ZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICBvdXQgPDwgIiwgIjsg
ICAKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8
PCAiKSkiOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BEaXZBc3Np
Z246ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIC89ICIsICIpIik7
ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDogICAgICAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgIiIsICJbIiwgIl0iKTsgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgIiIsICJbIiwgIl0iKTsgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BJbmRl
eERpcmVjdFN0cnVjdDoKKyAgICAgICAgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG5vZGUtPmdldExlZnQo
KS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpOworICAgICAgICAgICAgY29uc3QgVEludGVybUNvbnN0
YW50VW5pb24qIGluZGV4ID0gbm9kZS0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7
CisgICAgICAgICAgICBjb25zdCBURmllbGQqIGZpZWxkID0gc3RydWN0dXJlLT5maWVsZHMoKVtp
bmRleC0+Z2V0SUNvbnN0KDApXTsKKyAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZp
ZWxkKGZpZWxkLT5uYW1lKCksIG5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpKTsKKworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BWZWN0b3JTd2l6emxlOgorICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAg
ICAgeworICAgICAgICAgICAgb3V0IDw8ICIuIjsKKworICAgICAgICAgICAgVEludGVybUFnZ3Jl
Z2F0ZSAqc3dpenpsZSA9IG5vZGUtPmdldFJpZ2h0KCktPmdldEFzQWdncmVnYXRlKCk7CisKKyAg
ICAgICAgICAgIGlmIChzd2l6emxlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRJ
bnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2UgPSBzd2l6emxlLT5nZXRTZXF1ZW5jZSgpOworCisgICAg
ICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNpdCA9IHNlcXVlbmNl
LmJlZ2luKCk7IHNpdCAhPSBzZXF1ZW5jZS5lbmQoKTsgc2l0KyspCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqZWxlbWVudCA9ICgq
c2l0KS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVs
ZW1lbnQpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpID0gZWxlbWVudC0+Z2V0SUNvbnN0KDApOworCisgICAgICAgICAgICAgICAgICAgICAgICBz
d2l0Y2ggKGkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIDA6IG91dCA8PCAieCI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAxOiBvdXQgPDwgInkiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
Mjogb3V0IDw8ICJ6IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG91
dCA8PCAidyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gRnVsbHkgcHJvY2Vzc2VkCisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEFkZDogICAgICAgICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiKCIsICIgKyAiLCAiKSIpOyBicmVhazsKKyAgICAgIGNhc2UgRU9wU3Vi
OiAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAtICIsICIpIik7IGJy
ZWFrOworICAgICAgY2FzZSBFT3BNdWw6ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgIigiLCAiICogIiwgIikiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcERpdjogICAgICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgLyAiLCAiKSIpOyBicmVhazsKKyAgICAg
IGNhc2UgRU9wRXF1YWw6CisgICAgICBjYXNlIEVPcE5vdEVxdWFsOgorICAgICAgICBpZiAobm9k
ZS0+Z2V0TGVmdCgpLT5pc1NjYWxhcigpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobm9k
ZS0+Z2V0T3AoKSA9PSBFT3BFcXVhbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPT0gIiwgIikiKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiKCIsICIgIT0gIiwgIikiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRMZWZ0KCktPmdldEJhc2ljVHlwZSgpID09IEVidFN0
cnVjdCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9wRXF1
YWwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIoIjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBv
dXQgPDwgIiEoIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlz
dCAmZmllbGRzID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCktPmZpZWxk
cygpOworCisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7
IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBURmllbGQgKmZpZWxk
ID0gZmllbGRzW2ldOworCisgICAgICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJz
ZSh0aGlzKTsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3JhdGVGaWVsZChmaWVs
ZC0+bmFtZSgpLCBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKSkgKyAiID09ICI7CisgICAgICAg
ICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAg
ICAgb3V0IDw8ICIuIiArIGRlY29yYXRlRmllbGQoZmllbGQtPm5hbWUoKSwgbm9kZS0+Z2V0TGVm
dCgpLT5nZXRUeXBlKCkpOworCisgICAgICAgICAgICAgICAgaWYgKGkgPCBmaWVsZHMuc2l6ZSgp
IC0gMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICYm
ICI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvdXQg
PDwgIikiOworCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+Z2V0TGVmdCgpLT5pc01h
dHJpeCgpIHx8IG5vZGUtPmdldExlZnQoKS0+aXNWZWN0b3IoKSk7CisKKyAgICAgICAgICAgIGlm
IChub2RlLT5nZXRPcCgpID09IEVPcEVxdWFsKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJhbGwoIiwgIiA9PSAiLCAiKSIpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICIhYWxsKCIsICIgPT0gIiwgIikiKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTGVzc1RoYW46ICAgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA8ICIsICIpIik7ICAgYnJlYWs7CisgICAg
ICBjYXNlIEVPcEdyZWF0ZXJUaGFuOiAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIg
PiAiLCAiKSIpOyAgIGJyZWFrOworICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOiAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIDw9ICIsICIpIik7ICBicmVhazsKKyAgICAgIGNhc2Ug
RU9wR3JlYXRlclRoYW5FcXVhbDogIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA+PSAiLCAi
KSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyOiBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiKCIsICIgKiAiLCAiKSIpOyAgIGJyZWFrOworICAgICAgY2FzZSBFT3BNYXRy
aXhUaW1lc1NjYWxhcjogb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICogIiwgIikiKTsgICBi
cmVhazsKKyAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXg6IG91dHB1dFRyaXBsZXQodmlz
aXQsICJtdWwoIiwgIiwgdHJhbnNwb3NlKCIsICIpKSIpOyBicmVhazsKKyAgICAgIGNhc2UgRU9w
TWF0cml4VGltZXNWZWN0b3I6IG91dHB1dFRyaXBsZXQodmlzaXQsICJtdWwodHJhbnNwb3NlKCIs
ICIpLCAiLCAiKSIpOyBicmVhazsKKyAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXg6IG91
dHB1dFRyaXBsZXQodmlzaXQsICJ0cmFuc3Bvc2UobXVsKHRyYW5zcG9zZSgiLCAiKSwgdHJhbnNw
b3NlKCIsICIpKSkiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcExvZ2ljYWxPcjoKKyAgICAgICAg
aWYgKG5vZGUtPmdldFJpZ2h0KCktPmhhc1NpZGVFZmZlY3RzKCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG91dCA8PCAicyIgPDwgbVVuZm9sZFNob3J0Q2lyY3VpdC0+Z2V0TmV4dFRlbXBvcmFy
eUluZGV4KCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiB8
fCAiLCAiKSIpOworICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgY2Fz
ZSBFT3BMb2dpY2FsWG9yOgorICAgICAgICBtVXNlc1hvciA9IHRydWU7CisgICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICJ4b3IoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVPcExvZ2ljYWxBbmQ6CisgICAgICAgIGlmIChub2RlLT5nZXRSaWdodCgpLT5oYXNT
aWRlRWZmZWN0cygpKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgInMiIDw8IG1VbmZv
bGRTaG9ydENpcmN1aXQtPmdldE5leHRUZW1wb3JhcnlJbmRleCgpOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgJiYgIiwgIikiKTsKKyAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT3V0cHV0SExTTDo6dmlzaXRVbmFyeShW
aXNpdCB2aXNpdCwgVEludGVybVVuYXJ5ICpub2RlKQoreworICAgIHN3aXRjaCAobm9kZS0+Z2V0
T3AoKSkKKyAgICB7CisgICAgICBjYXNlIEVPcE5lZ2F0aXZlOiAgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICIoLSIsICIiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVPcFZlY3Rvckxv
Z2ljYWxOb3Q6IG91dHB1dFRyaXBsZXQodmlzaXQsICIoISIsICIiLCAiKSIpOyAgYnJlYWs7Cisg
ICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoISIs
ICIiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6ICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIrKykiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcFBv
c3REZWNyZW1lbnQ6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICItLSkiKTsgYnJl
YWs7CisgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDogICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICIoKysiLCAiIiwgIikiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDogICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICIoLS0iLCAiIiwgIikiKTsgYnJlYWs7CisgICAgICBjYXNl
IEVPcENvbnZJbnRUb0Jvb2w6CisgICAgICBjYXNlIEVPcENvbnZGbG9hdFRvQm9vbDoKKyAgICAg
ICAgc3dpdGNoIChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgp
KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSAxOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
Ym9vbCgiLCAiIiwgIikiKTsgIGJyZWFrOworICAgICAgICAgIGNhc2UgMjogICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgImJvb2wyKCIsICIiLCAiKSIpOyBicmVhazsKKyAgICAgICAgICBjYXNlIDM6
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJib29sMygiLCAiIiwgIikiKTsgYnJlYWs7CisgICAg
ICAgICAgY2FzZSA0OiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYm9vbDQoIiwgIiIsICIpIik7
IGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnZCb29sVG9GbG9hdDoKKyAgICAgIGNhc2Ug
RU9wQ29udkludFRvRmxvYXQ6CisgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5n
ZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgMTog
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZsb2F0KCIsICIiLCAiKSIpOyAgYnJlYWs7CisgICAg
ICAgICAgY2FzZSAyOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZmxvYXQyKCIsICIiLCAiKSIp
OyBicmVhazsKKyAgICAgICAgICBjYXNlIDM6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJmbG9h
dDMoIiwgIiIsICIpIik7IGJyZWFrOworICAgICAgICAgIGNhc2UgNDogICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgImZsb2F0NCgiLCAiIiwgIikiKTsgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9w
Q29udkZsb2F0VG9JbnQ6CisgICAgICBjYXNlIEVPcENvbnZCb29sVG9JbnQ6CisgICAgICAgIHN3
aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKKyAg
ICAgICAgeworICAgICAgICAgIGNhc2UgMTogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImludCgi
LCAiIiwgIikiKTsgIGJyZWFrOworICAgICAgICAgIGNhc2UgMjogICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgImludDIoIiwgIiIsICIpIik7IGJyZWFrOworICAgICAgICAgIGNhc2UgMzogICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgImludDMoIiwgIiIsICIpIik7IGJyZWFrOworICAgICAgICAgIGNh
c2UgNDogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImludDQoIiwgIiIsICIpIik7IGJyZWFrOwor
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEVPcFJhZGlhbnM6ICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICJyYWRpYW5zKCIsICIiLCAiKSIpOyAgIGJyZWFrOworICAgICAgY2FzZSBFT3BEZWdyZWVzOiAg
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGVncmVlcygiLCAiIiwgIikiKTsgICBicmVh
azsKKyAgICAgIGNhc2UgRU9wU2luOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
InNpbigiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvczogICAgICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJjb3MoIiwgIiIsICIpIik7ICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBFT3BUYW46ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
dGFuKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQXNpbjogICAgICAg
ICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFzaW4oIiwgIiIsICIpIik7ICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEVPcEFjb3M6ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJh
Y29zKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BBdGFuOiAgICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYXRhbigiLCAiIiwgIikiKTsgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRU9wRXhwOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImV4
cCgiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcExvZzogICAgICAgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJsb2coIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFT3BFeHAyOiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZXhw
MigiLCAiIiwgIikiKTsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTG9nMjogICAgICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImxvZzIoIiwgIiIsICIpIik7ICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEVPcFNxcnQ6ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJzcXJ0
KCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BJbnZlcnNlU3FydDogICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAicnNxcnQoIiwgIiIsICIpIik7ICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRU9wQWJzOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFicygi
LCAiIiwgIikiKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFNpZ246ICAgICAgICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICJzaWduKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBFT3BGbG9vcjogICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZmxvb3Io
IiwgIiIsICIpIik7ICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ2VpbDogICAgICAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgImNlaWwoIiwgIiIsICIpIik7ICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVPcEZyYWN0OiAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJmcmFjKCIs
ICIiLCAiKSIpOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BMZW5ndGg6ICAgICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAibGVuZ3RoKCIsICIiLCAiKSIpOyAgICBicmVhazsKKyAgICAg
IGNhc2UgRU9wTm9ybWFsaXplOiAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm5vcm1hbGl6
ZSgiLCAiIiwgIikiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcERGZHg6CisgICAgICAgIGlmKG1J
bnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1bmN0aW9uKQorICAgICAgICB7
CisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIiLCAiLCAwLjApIik7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiZGR4KCIsICIiLCAiKSIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFT3BERmR5OgorICAgICAgICBpZihtSW5zaWRlRGlzY29udGludW91c0xvb3Ag
fHwgbU91dHB1dExvZDBGdW5jdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgIigiLCAiIiwgIiwgMC4wKSIpOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGR5KCIsICIiLCAi
KSIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BGd2lkdGg6Cisg
ICAgICAgIGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1bmN0aW9u
KQorICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIiLCAi
LCAwLjApIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZndpZHRoKCIsICIiLCAiKSIpOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BBbnk6ICAgICAgICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiYW55KCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9w
QWxsOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFsbCgiLCAiIiwgIikiKTsg
ICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIE91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKFZpc2l0
IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91
dCA9IG1Cb2R5OworCisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAgIGNh
c2UgRU9wU2VxdWVuY2U6CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtSW5zaWRlRnVuY3Rp
b24pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShu
b2RlLT5nZXRMaW5lKCkuZmlyc3RfbGluZSk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJ7XG4i
OworCisgICAgICAgICAgICAgICAgbVNjb3BlRGVwdGgrKzsKKworICAgICAgICAgICAgICAgIGlm
IChtU2NvcGVCcmFja2V0LnNpemUoKSA8IG1TY29wZURlcHRoKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgbVNjb3BlQnJhY2tldC5wdXNoX2JhY2soMCk7ICAgLy8gTmV3
IHNjb3BlIGxldmVsCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1TY29wZUJyYWNrZXRbbVNjb3Bl
RGVwdGggLSAxXSsrOyAgIC8vIE5ldyBzY29wZSBhdCBleGlzdGluZyBsZXZlbAorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVu
Y2U6Oml0ZXJhdG9yIHNpdCA9IG5vZGUtPmdldFNlcXVlbmNlKCkuYmVnaW4oKTsgc2l0ICE9IG5v
ZGUtPmdldFNlcXVlbmNlKCkuZW5kKCk7IHNpdCsrKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUoKCpzaXQpLT5nZXRMaW5lKCkuZmlyc3RfbGluZSk7
CisKKyAgICAgICAgICAgICAgICB0cmF2ZXJzZVN0YXRlbWVudHMoKnNpdCk7CisKKyAgICAgICAg
ICAgICAgICBvdXQgPDwgIjtcbiI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICht
SW5zaWRlRnVuY3Rpb24pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0cHV0TGlu
ZURpcmVjdGl2ZShub2RlLT5nZXRMaW5lKCkubGFzdF9saW5lKTsKKyAgICAgICAgICAgICAgICBv
dXQgPDwgIn1cbiI7CisKKyAgICAgICAgICAgICAgICBtU2NvcGVEZXB0aC0tOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgIGNhc2Ug
RU9wRGVjbGFyYXRpb246CisgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAg
eworICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVl
bmNlKCk7CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQgKnZhcmlhYmxlID0gc2VxdWVuY2VbMF0t
PmdldEFzVHlwZWQoKTsKKworICAgICAgICAgICAgaWYgKHZhcmlhYmxlICYmICh2YXJpYWJsZS0+
Z2V0UXVhbGlmaWVyKCkgPT0gRXZxVGVtcG9yYXJ5IHx8IHZhcmlhYmxlLT5nZXRRdWFsaWZpZXIo
KSA9PSBFdnFHbG9iYWwpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICh2YXJp
YWJsZS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgYWRkQ29uc3RydWN0b3IodmFyaWFibGUtPmdldFR5cGUoKSwgc2NvcGVkU3Ry
dWN0KHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCktPm5hbWUoKSksIE5VTEwpOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghdmFyaWFibGUtPmdldEFzU3lt
Ym9sTm9kZSgpIHx8IHZhcmlhYmxlLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCkgIT0g
IiIpICAgLy8gVmFyaWFibGUgZGVjbGFyYXRpb24KKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIGlmICghbUluc2lkZUZ1bmN0aW9uKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgInN0YXRpYyAiOworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8IHR5cGVTdHJpbmcodmFyaWFi
bGUtPmdldFR5cGUoKSkgKyAiICI7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yIChUSW50ZXJt
U2VxdWVuY2U6Oml0ZXJhdG9yIHNpdCA9IHNlcXVlbmNlLmJlZ2luKCk7IHNpdCAhPSBzZXF1ZW5j
ZS5lbmQoKTsgc2l0KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9ICgqc2l0KS0+Z2V0QXNTeW1ib2xOb2RlKCk7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wpCisgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sLT50cmF2ZXJzZSh0
aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgYXJyYXlTdHJpbmcoc3lt
Ym9sLT5nZXRUeXBlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiID0g
IiArIGluaXRpYWxpemVyKHN5bWJvbC0+Z2V0VHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKnNpdCktPnRyYXZlcnNlKHRoaXMp
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoKnNpdCAhPSBzZXF1ZW5jZS5iYWNrKCkpCisgICAgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZSBpZiAodmFyaWFibGUtPmdldEFzU3ltYm9sTm9kZSgpICYmIHZhcmlh
YmxlLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCkgPT0gIiIpICAgLy8gVHlwZSAoc3Ry
dWN0KSBkZWNsYXJhdGlvbgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gQWxyZWFkeSBhZGRlZCB0byBjb25zdHJ1Y3RvciBtYXAKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSBpZiAodmFyaWFibGUgJiYgKHZhcmlhYmxlLT5nZXRRdWFsaWZpZXIoKSA9PSBF
dnFWYXJ5aW5nT3V0IHx8IHZhcmlhYmxlLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFJbnZhcmlhbnRW
YXJ5aW5nT3V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKFRJbnRlcm1T
ZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gc2VxdWVuY2UuYmVnaW4oKTsgc2l0ICE9IHNlcXVlbmNl
LmVuZCgpOyBzaXQrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFRJ
bnRlcm1TeW1ib2wgKnN5bWJvbCA9ICgqc2l0KS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHN5bWJvbCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gVmVydGV4IChvdXRwdXQpIHZhcnlpbmdzIHdoaWNoIGFyZSBk
ZWNsYXJlZCBidXQgbm90IHdyaXR0ZW4gdG8gc2hvdWxkIHN0aWxsIGJlIGRlY2xhcmVkIHRvIGFs
bG93IHN1Y2Nlc3NmdWwgbGlua2luZworICAgICAgICAgICAgICAgICAgICAgICAgbVJlZmVyZW5j
ZWRWYXJ5aW5nc1tzeW1ib2wtPmdldFN5bWJvbCgpXSA9IHN5bWJvbDsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICgqc2l0KS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh2aXNpdCA9
PSBJblZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wUHJvdG90eXBlOgorICAgICAgICBpZiAo
dmlzaXQgPT0gUHJlVmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCB0eXBlU3Ry
aW5nKG5vZGUtPmdldFR5cGUoKSkgPDwgIiAiIDw8IGRlY29yYXRlKG5vZGUtPmdldE5hbWUoKSkg
PDwgKG1PdXRwdXRMb2QwRnVuY3Rpb24gPyAiTG9kMCgiIDogIigiKTsKKworICAgICAgICAgICAg
VEludGVybVNlcXVlbmNlICZhcmd1bWVudHMgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOworCisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXplKCk7IGkr
KykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wg
PSBhcmd1bWVudHNbaV0tPmdldEFzU3ltYm9sTm9kZSgpOworCisgICAgICAgICAgICAgICAgaWYg
KHN5bWJvbCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCBh
cmd1bWVudFN0cmluZyhzeW1ib2wpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgYXJn
dW1lbnRzLnNpemUoKSAtIDEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG91dCA8PCAiLCAiOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgb3V0IDw8ICIpO1xuIjsKKworICAgICAgICAgICAgLy8gQWxzbyBw
cm90b3R5cGUgdGhlIExvZDAgdmFyaWFudCBpZiBuZWVkZWQKKyAgICAgICAgICAgIGlmIChtQ29u
dGFpbnNMb29wRGlzY29udGludWl0eSAmJiAhbU91dHB1dExvZDBGdW5jdGlvbikKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBtT3V0cHV0TG9kMEZ1bmN0aW9uID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICBtT3V0cHV0
TG9kMEZ1bmN0aW9uID0gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29tbWE6
ICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiLCAiLCAiKSIpOyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRnVuY3Rpb246CisgICAgICAgIHsKKyAgICAg
ICAgICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5h
bWUoKSk7CisKKyAgICAgICAgICAgIG91dCA8PCB0eXBlU3RyaW5nKG5vZGUtPmdldFR5cGUoKSkg
PDwgIiAiOworCisgICAgICAgICAgICBpZiAobmFtZSA9PSAibWFpbiIpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF9tYWluKCI7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8IGRlY29y
YXRlKG5hbWUpIDw8IChtT3V0cHV0TG9kMEZ1bmN0aW9uID8gIkxvZDAoIiA6ICIoIik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2UgPSBub2Rl
LT5nZXRTZXF1ZW5jZSgpOworICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZhcmd1bWVudHMg
PSBzZXF1ZW5jZVswXS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKTsKKworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyBpKysp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0g
YXJndW1lbnRzW2ldLT5nZXRBc1N5bWJvbE5vZGUoKTsKKworICAgICAgICAgICAgICAgIGlmIChz
eW1ib2wpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9s
LT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGFkZENvbnN0cnVjdG9yKHN5bWJvbC0+Z2V0VHlwZSgpLCBzY29wZWRT
dHJ1Y3Qoc3ltYm9sLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCktPm5hbWUoKSksIE5VTEwpOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8IGFyZ3VtZW50
U3RyaW5nKHN5bWJvbCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBhcmd1bWVudHMu
c2l6ZSgpIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0IDw8ICIsICI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBvdXQgPDwgIilcbiIKKyAgICAgICAgICAgICAgICAie1xuIjsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKHNlcXVlbmNlLnNpemUoKSA+IDEpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgbUluc2lkZUZ1bmN0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBzZXF1ZW5jZVsxXS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgbUluc2lkZUZ1
bmN0aW9uID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG91dCA8PCAifVxuIjsKKworICAgICAgICAgICAgaWYgKG1Db250YWluc0xvb3BEaXNjb250aW51
aXR5ICYmICFtT3V0cHV0TG9kMEZ1bmN0aW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGlmIChuYW1lICE9ICJtYWluIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBu
b2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgbU91dHB1dExvZDBGdW5j
dGlvbiA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BGdW5jdGlvbkNhbGw6CisgICAgICAgIHsKKyAgICAgICAgICAgIFRTdHJpbmcgbmFtZSA9
IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7CisgICAgICAgICAgICBi
b29sIGxvZDAgPSBtSW5zaWRlRGlzY29udGludW91c0xvb3AgfHwgbU91dHB1dExvZDBGdW5jdGlv
bjsKKworICAgICAgICAgICAgaWYgKG5vZGUtPmlzVXNlckRlZmluZWQoKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgZGVjb3JhdGUobmFtZSkgPDwgKGxvZDAgPyAiTG9k
MCgiIDogIigiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSAidGV4dHVyZTJEIikKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6
ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbVVzZXNUZXh0dXJlMkQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5z
aXplKCkgPT0gMykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtVXNlc1RleHR1cmUyRF9iaWFzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkQoIjsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNp
emUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1Vc2VzVGV4dHVyZTJETG9kMCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5j
ZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFC
TEUoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRMb2Qw
KCI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJEUHJvaiIpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBpZiAoIWxvZDApCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9
PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1Vc2VzVGV4dHVyZTJEUHJvaiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNp
emUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRQcm9qKCI7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVu
Y2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QwID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUt
PmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJn
bF90ZXh0dXJlMkRQcm9qTG9kMCgiOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVDdWJlIikK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNl
cXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZSA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5n
ZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmVfYmlhcyA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVO
UkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVy
ZUN1YmUoIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QwID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDBf
YmlhcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG91
dCA8PCAiZ2xfdGV4dHVyZUN1YmVMb2QwKCI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJE
TG9kIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5n
ZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRExvZCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJETG9kKCI7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmUyRFByb2pMb2Qi
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNl
cXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJvakxvZCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvakxvZCgiOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlQ3ViZUxv
ZCIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0
U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZUN1YmVMb2QoIjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IG5vZGUtPmdldFNl
cXVlbmNlKCk7CisKKyAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBh
cmcgPSBhcmd1bWVudHMuYmVnaW4oKTsgYXJnICE9IGFyZ3VtZW50cy5lbmQoKTsgYXJnKyspCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wx
MV9PVVRQVVQgJiYgSXNTYW1wbGVyKCgqYXJnKS0+Z2V0QXNUeXBlZCgpLT5nZXRCYXNpY1R5cGUo
KSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgInRleHR1
cmVfIjsKKyAgICAgICAgICAgICAgICAgICAgKCphcmcpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAg
ICAgICAgICAgICAgICAgb3V0IDw8ICIsIHNhbXBsZXJfIjsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAoKmFyZyktPnRyYXZlcnNlKHRoaXMpOworCisgICAgICAgICAgICAg
ICAgaWYgKGFyZyA8IGFyZ3VtZW50cy5lbmQoKSAtIDEpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIG91dCA8PCAiKSI7CisKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wUGFyYW1ldGVy
czogICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiLCAiLCAiKVxue1xuIik7ICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RGbG9hdDoKKyAgICAgICAgYWRk
Q29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAidmVjMSIsICZub2RlLT5nZXRTZXF1ZW5jZSgp
KTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInZlYzEoIiwgIiIsICIpIik7CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMyOgorICAgICAgICBhZGRDb25z
dHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJ2ZWMyIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOwor
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidmVjMigiLCAiLCAiLCAiKSIpOworICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMzoKKyAgICAgICAgYWRkQ29uc3Ry
dWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAidmVjMyIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAg
ICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInZlYzMoIiwgIiwgIiwgIikiKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzQ6CisgICAgICAgIGFkZENvbnN0cnVj
dG9yKG5vZGUtPmdldFR5cGUoKSwgInZlYzQiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ2ZWM0KCIsICIsICIsICIpIik7CisgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29sOgorICAgICAgICBhZGRDb25zdHJ1Y3Rv
cihub2RlLT5nZXRUeXBlKCksICJidmVjMSIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImJ2ZWMxKCIsICIiLCAiKSIpOworICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzI6CisgICAgICAgIGFkZENvbnN0cnVjdG9y
KG5vZGUtPmdldFR5cGUoKSwgImJ2ZWMyIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYnZlYzIoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMzOgorICAgICAgICBhZGRDb25zdHJ1Y3Rv
cihub2RlLT5nZXRUeXBlKCksICJidmVjMyIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImJ2ZWMzKCIsICIsICIsICIpIik7CisgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjNDoKKyAgICAgICAgYWRkQ29uc3RydWN0
b3Iobm9kZS0+Z2V0VHlwZSgpLCAiYnZlYzQiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJidmVjNCgiLCAiLCAiLCAiKSIpOworICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OgorICAgICAgICBhZGRDb25zdHJ1Y3Rv
cihub2RlLT5nZXRUeXBlKCksICJpdmVjMSIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIml2ZWMxKCIsICIiLCAiKSIpOworICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6CisgICAgICAgIGFkZENvbnN0cnVjdG9y
KG5vZGUtPmdldFR5cGUoKSwgIml2ZWMyIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaXZlYzIoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMzOgorICAgICAgICBhZGRDb25zdHJ1Y3Rv
cihub2RlLT5nZXRUeXBlKCksICJpdmVjMyIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIml2ZWMzKCIsICIsICIsICIpIik7CisgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjNDoKKyAgICAgICAgYWRkQ29uc3RydWN0
b3Iobm9kZS0+Z2V0VHlwZSgpLCAiaXZlYzQiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJpdmVjNCgiLCAiLCAiLCAiKSIpOworICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MjoKKyAgICAgICAgYWRkQ29uc3RydWN0
b3Iobm9kZS0+Z2V0VHlwZSgpLCAibWF0MiIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm1hdDIoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6CisgICAgICAgIGFkZENvbnN0cnVjdG9y
KG5vZGUtPmdldFR5cGUoKSwgIm1hdDMiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICJtYXQzKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQ0OiAKKyAgICAgICAgYWRkQ29uc3RydWN0b3Io
bm9kZS0+Z2V0VHlwZSgpLCAibWF0NCIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgIm1hdDQoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEVPcENvbnN0cnVjdFN0cnVjdDoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Io
bm9kZS0+Z2V0VHlwZSgpLCBzY29wZWRTdHJ1Y3Qobm9kZS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgp
LT5uYW1lKCkpLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsIHN0cnVjdExvb2t1cChub2RlLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCktPm5hbWUoKSkg
KyAiX2N0b3IoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcExl
c3NUaGFuOiAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA8ICIsICIpIik7ICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46ICAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiID4gIiwgIikiKTsgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
KCIsICIgPD0gIiwgIikiKTsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEdy
ZWF0ZXJUaGFuRXF1YWw6IG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA+PSAiLCAiKSIpOyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wVmVjdG9yRXF1YWw6ICAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiID09ICIsICIpIik7ICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBFT3BWZWN0b3JOb3RFcXVhbDogICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
KCIsICIgIT0gIiwgIikiKTsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcE1v
ZDoKKyAgICAgICAgeworICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBsb29rIGF0IHRoZSBudW1i
ZXIgb2YgY29tcG9uZW50cyBpbiBib3RoIGFyZ3VtZW50cworICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5nZXRTZXF1ZW5jZSgpWzBdLT5nZXRBc1R5cGVkKCktPmdldE5vbWluYWxTaXplKCkgKiAx
MAorICAgICAgICAgICAgICAgICAgICAgKyBub2RlLT5nZXRTZXF1ZW5jZSgpWzFdLT5nZXRBc1R5
cGVkKCktPmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNh
c2UgMTE6IG1Vc2VzTW9kMSA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDIyOiBt
VXNlc01vZDJ2ID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgMjE6IG1Vc2VzTW9k
MmYgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAzMzogbVVzZXNNb2QzdiA9IHRy
dWU7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDMxOiBtVXNlc01vZDNmID0gdHJ1ZTsgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgNDQ6IG1Vc2VzTW9kNHYgPSB0cnVlOyBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSA0MTogbVVzZXNNb2Q0ZiA9IHRydWU7IGJyZWFrOworICAgICAgICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibW9kKCIsICIsICIsICIpIik7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFBvdzogICAgICAgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICJwb3coIiwgIiwgIiwgIikiKTsgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgRU9wQXRhbjoKKyAgICAgICAgQVNTRVJUKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgp
ID09IDIpOyAgIC8vIGF0YW4oeCkgaXMgYSB1bmFyeSBvcGVyYXRvcgorICAgICAgICBzd2l0Y2gg
KG5vZGUtPmdldFNlcXVlbmNlKClbMF0tPmdldEFzVHlwZWQoKS0+Z2V0Tm9taW5hbFNpemUoKSkK
KyAgICAgICAgeworICAgICAgICAgIGNhc2UgMTogbVVzZXNBdGFuMl8xID0gdHJ1ZTsgYnJlYWs7
CisgICAgICAgICAgY2FzZSAyOiBtVXNlc0F0YW4yXzIgPSB0cnVlOyBicmVhazsKKyAgICAgICAg
ICBjYXNlIDM6IG1Vc2VzQXRhbjJfMyA9IHRydWU7IGJyZWFrOworICAgICAgICAgIGNhc2UgNDog
bVVzZXNBdGFuMl80ID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgfQorICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYXRhbnl4KCIs
ICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BNaW46ICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibWluKCIsICIsICIsICIpIik7ICAgICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRU9wTWF4OiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm1h
eCgiLCAiLCAiLCAiKSIpOyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENsYW1wOiAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJjbGFtcCgiLCAiLCAiLCAiKSIpOyAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBFT3BNaXg6ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAibGVycCgiLCAiLCAiLCAiKSIpOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wU3Rl
cDogICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInN0ZXAoIiwgIiwgIiwgIikiKTsgICAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFNtb290aFN0ZXA6ICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJzbW9vdGhzdGVwKCIsICIsICIsICIpIik7ICAgIGJyZWFrOworICAgICAgY2FzZSBF
T3BEaXN0YW5jZTogICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGlzdGFuY2UoIiwgIiwgIiwg
IikiKTsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRG90OiAgICAgICAgICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgImRvdCgiLCAiLCAiLCAiKSIpOyAgICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEVPcENyb3NzOiAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJjcm9zcygiLCAiLCAi
LCAiKSIpOyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BGYWNlRm9yd2FyZDoKKyAgICAg
ICAgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRTZXF1ZW5jZSgpWzBdLT5nZXRBc1R5
cGVkKCktPmdldE5vbWluYWxTaXplKCkpICAgLy8gTnVtYmVyIG9mIGNvbXBvbmVudHMgaW4gdGhl
IGZpcnN0IGFyZ3VtZW50CisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNlIDE6IG1Vc2Vz
RmFjZWZvcndhcmQxID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6IG1Vc2VzRmFj
ZWZvcndhcmQyID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDM6IG1Vc2VzRmFjZWZv
cndhcmQzID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDQ6IG1Vc2VzRmFjZWZvcndh
cmQ0ID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAiZmFjZWZvcndhcmQoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRU9wUmVmbGVjdDogICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInJl
ZmxlY3QoIiwgIiwgIiwgIikiKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFJlZnJhY3Q6
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJyZWZyYWN0KCIsICIsICIsICIpIik7ICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBFT3BNdWw6ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAiKCIsICIgKiAiLCAiKSIpOyAgICAgICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT3V0cHV0
SExTTDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUp
Cit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CisKKyAgICBpZiAobm9kZS0+dXNl
c1Rlcm5hcnlPcGVyYXRvcigpKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xk
U2hvcnRDaXJjdWl0LT5nZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKKyAgICB9CisgICAgZWxzZSAg
Ly8gaWYvZWxzZSBzdGF0ZW1lbnQKKyAgICB7CisgICAgICAgIG1VbmZvbGRTaG9ydENpcmN1aXQt
PnRyYXZlcnNlKG5vZGUtPmdldENvbmRpdGlvbigpKTsKKworICAgICAgICBvdXQgPDwgImlmICgi
OworCisgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKKworICAg
ICAgICBvdXQgPDwgIilcbiI7CisgICAgICAgIAorICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZl
KG5vZGUtPmdldExpbmUoKS5maXJzdF9saW5lKTsKKyAgICAgICAgb3V0IDw8ICJ7XG4iOworCisg
ICAgICAgIGJvb2wgZGlzY2FyZCA9IGZhbHNlOworCisgICAgICAgIGlmIChub2RlLT5nZXRUcnVl
QmxvY2soKSkKKyAgICAgICAgeworICAgICAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRzKG5vZGUt
PmdldFRydWVCbG9jaygpKTsKKworICAgICAgICAgICAgLy8gRGV0ZWN0IHRydWUgZGlzY2FyZAor
ICAgICAgICAgICAgZGlzY2FyZCA9IChkaXNjYXJkIHx8IEZpbmREaXNjYXJkOjpzZWFyY2gobm9k
ZS0+Z2V0VHJ1ZUJsb2NrKCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIG91dHB1dExpbmVEaXJl
Y3RpdmUobm9kZS0+Z2V0TGluZSgpLmZpcnN0X2xpbmUpOworICAgICAgICBvdXQgPDwgIjtcbn1c
biI7CisKKyAgICAgICAgaWYgKG5vZGUtPmdldEZhbHNlQmxvY2soKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgb3V0IDw8ICJlbHNlXG4iOworCisgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0
aXZlKG5vZGUtPmdldEZhbHNlQmxvY2soKS0+Z2V0TGluZSgpLmZpcnN0X2xpbmUpOworICAgICAg
ICAgICAgb3V0IDw8ICJ7XG4iOworCisgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5v
ZGUtPmdldEZhbHNlQmxvY2soKS0+Z2V0TGluZSgpLmZpcnN0X2xpbmUpOworICAgICAgICAgICAg
dHJhdmVyc2VTdGF0ZW1lbnRzKG5vZGUtPmdldEZhbHNlQmxvY2soKSk7CisKKyAgICAgICAgICAg
IG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0RmFsc2VCbG9jaygpLT5nZXRMaW5lKCkuZmly
c3RfbGluZSk7CisgICAgICAgICAgICBvdXQgPDwgIjtcbn1cbiI7CisKKyAgICAgICAgICAgIC8v
IERldGVjdCBmYWxzZSBkaXNjYXJkCisgICAgICAgICAgICBkaXNjYXJkID0gKGRpc2NhcmQgfHwg
RmluZERpc2NhcmQ6OnNlYXJjaChub2RlLT5nZXRGYWxzZUJsb2NrKCkpKTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIEFOR0xFIGlzc3VlIDQ4NjogRGV0ZWN0IHByb2JsZW1hdGljIGNvbmRpdGlv
bmFsIGRpc2NhcmQKKyAgICAgICAgaWYgKGRpc2NhcmQgJiYgRmluZFNpZGVFZmZlY3RSZXdyaXRp
bmc6OnNlYXJjaChub2RlKSkKKyAgICAgICAgeworICAgICAgICAgICAgbVVzZXNEaXNjYXJkUmV3
cml0aW5nID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBPdXRwdXRITFNMOjp2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5p
b24gKm5vZGUpCit7CisgICAgd3JpdGVDb25zdGFudFVuaW9uKG5vZGUtPmdldFR5cGUoKSwgbm9k
ZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSk7Cit9CisKK2Jvb2wgT3V0cHV0SExTTDo6dmlzaXRM
b29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKK3sKKyAgICBib29sIHdhc0Rpc2Nv
bnRpbnVvdXMgPSBtSW5zaWRlRGlzY29udGludW91c0xvb3A7CisKKyAgICBpZiAobUNvbnRhaW5z
TG9vcERpc2NvbnRpbnVpdHkgJiYgIW1JbnNpZGVEaXNjb250aW51b3VzTG9vcCkKKyAgICB7Cisg
ICAgICAgIG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCA9IGNvbnRhaW5zTG9vcERpc2NvbnRpbnVp
dHkobm9kZSk7CisgICAgfQorCisgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBV
VCkKKyAgICB7CisgICAgICAgIGlmIChoYW5kbGVFeGNlc3NpdmVMb29wKG5vZGUpKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBU
SW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKKworICAgIGlmIChub2RlLT5nZXRUeXBlKCkgPT0g
RUxvb3BEb1doaWxlKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJ7ZG9cbiI7CisKKyAgICAgICAg
b3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRMaW5lKCkuZmlyc3RfbGluZSk7CisgICAgICAg
IG91dCA8PCAie1xuIjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJ7
Zm9yKCI7CisgICAgICAgIAorICAgICAgICBpZiAobm9kZS0+Z2V0SW5pdCgpKQorICAgICAgICB7
CisgICAgICAgICAgICBub2RlLT5nZXRJbml0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB9
CisKKyAgICAgICAgb3V0IDw8ICI7ICI7CisKKyAgICAgICAgaWYgKG5vZGUtPmdldENvbmRpdGlv
bigpKQorICAgICAgICB7CisgICAgICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVy
c2UodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBvdXQgPDwgIjsgIjsKKworICAgICAgICBp
ZiAobm9kZS0+Z2V0RXhwcmVzc2lvbigpKQorICAgICAgICB7CisgICAgICAgICAgICBub2RlLT5n
ZXRFeHByZXNzaW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgb3V0
IDw8ICIpXG4iOworICAgICAgICAKKyAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5n
ZXRMaW5lKCkuZmlyc3RfbGluZSk7CisgICAgICAgIG91dCA8PCAie1xuIjsKKyAgICB9CisKKyAg
ICBpZiAobm9kZS0+Z2V0Qm9keSgpKQorICAgIHsKKyAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRz
KG5vZGUtPmdldEJvZHkoKSk7CisgICAgfQorCisgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2Rl
LT5nZXRMaW5lKCkuZmlyc3RfbGluZSk7CisgICAgb3V0IDw8ICI7fVxuIjsKKworICAgIGlmIChu
b2RlLT5nZXRUeXBlKCkgPT0gRUxvb3BEb1doaWxlKQorICAgIHsKKyAgICAgICAgb3V0cHV0TGlu
ZURpcmVjdGl2ZShub2RlLT5nZXRDb25kaXRpb24oKS0+Z2V0TGluZSgpLmZpcnN0X2xpbmUpOwor
ICAgICAgICBvdXQgPDwgIndoaWxlKFxuIjsKKworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24o
KS0+dHJhdmVyc2UodGhpcyk7CisKKyAgICAgICAgb3V0IDw8ICIpOyI7CisgICAgfQorCisgICAg
b3V0IDw8ICJ9XG4iOworCisgICAgbUluc2lkZURpc2NvbnRpbnVvdXNMb29wID0gd2FzRGlzY29u
dGludW91czsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBPdXRwdXRITFNMOjp2aXNp
dEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCAqbm9kZSkKK3sKKyAgICBUSW5mb1Np
bmtCYXNlICZvdXQgPSBtQm9keTsKKworICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkpCisg
ICAgeworICAgICAgY2FzZSBFT3BLaWxsOgorICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
ZGlzY2FyZDtcbiIsICIiLCAiIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BCcmVh
azoKKyAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAobUV4Y2Vzc2l2ZUxvb3BJbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBvdXQgPDwgIntCcmVhayI7CisgICAgICAgICAgICAgICAgbUV4Y2Vzc2l2ZUxvb3BJbmRleC0+
dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgPSB0cnVlOyBicmVhazt9
XG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG91dCA8PCAiYnJlYWs7XG4iOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb250aW51ZTogb3V0cHV0VHJpcGxldCh2
aXNpdCwgImNvbnRpbnVlO1xuIiwgIiIsICIiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcFJldHVy
bjoKKyAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAobm9kZS0+Z2V0RXhwcmVzc2lvbigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG91dCA8PCAicmV0dXJuICI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJyZXR1cm47XG4iOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IFBvc3RWaXNpdCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIjtcbiI7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE91dHB1dEhMU0w6OnRyYXZlcnNl
U3RhdGVtZW50cyhUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBpZiAoaXNTaW5nbGVTdGF0ZW1l
bnQobm9kZSkpCisgICAgeworICAgICAgICBtVW5mb2xkU2hvcnRDaXJjdWl0LT50cmF2ZXJzZShu
b2RlKTsKKyAgICB9CisKKyAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKK30KKworYm9vbCBPdXRw
dXRITFNMOjppc1NpbmdsZVN0YXRlbWVudChUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBUSW50
ZXJtQWdncmVnYXRlICphZ2dyZWdhdGUgPSBub2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpOworCisgICAg
aWYgKGFnZ3JlZ2F0ZSkKKyAgICB7CisgICAgICAgIGlmIChhZ2dyZWdhdGUtPmdldE9wKCkgPT0g
RU9wU2VxdWVuY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoVEludGVybVNl
cXVlbmNlOjppdGVyYXRvciBzaXQgPSBhZ2dyZWdhdGUtPmdldFNlcXVlbmNlKCkuYmVnaW4oKTsg
c2l0ICE9IGFnZ3JlZ2F0ZS0+Z2V0U2VxdWVuY2UoKS5lbmQoKTsgc2l0KyspCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgaWYgKCFpc1NpbmdsZVN0YXRlbWVudCgqc2l0KSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIEhhbmRsZSBsb29wcyB3
aXRoIG1vcmUgdGhhbiAyNTQgaXRlcmF0aW9ucyAodW5zdXBwb3J0ZWQgYnkgRDNEOSkgYnkgc3Bs
aXR0aW5nIHRoZW0KKy8vIChUaGUgRDNEIGRvY3VtZW50YXRpb24gc2F5cyAyNTUgaXRlcmF0aW9u
cywgYnV0IHRoZSBjb21waWxlciBjb21wbGFpbnMgYXQgYW55dGhpbmcgbW9yZSB0aGFuIDI1NCku
Citib29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxvb3AgKm5vZGUp
Cit7CisgICAgY29uc3QgaW50IE1BWF9MT09QX0lURVJBVElPTlMgPSAyNTQ7CisgICAgVEluZm9T
aW5rQmFzZSAmb3V0ID0gbUJvZHk7CisKKyAgICAvLyBQYXJzZSBsb29wcyBvZiB0aGUgZm9ybToK
KyAgICAvLyBmb3IoaW50IGluZGV4ID0gaW5pdGlhbDsgaW5kZXggW2NvbXBhcmF0b3JdIGxpbWl0
OyBpbmRleCArPSBpbmNyZW1lbnQpCisgICAgVEludGVybVN5bWJvbCAqaW5kZXggPSBOVUxMOwor
ICAgIFRPcGVyYXRvciBjb21wYXJhdG9yID0gRU9wTnVsbDsKKyAgICBpbnQgaW5pdGlhbCA9IDA7
CisgICAgaW50IGxpbWl0ID0gMDsKKyAgICBpbnQgaW5jcmVtZW50ID0gMDsKKworICAgIC8vIFBh
cnNlIGluZGV4IG5hbWUgYW5kIGludGlhbCB2YWx1ZQorICAgIGlmIChub2RlLT5nZXRJbml0KCkp
CisgICAgeworICAgICAgICBUSW50ZXJtQWdncmVnYXRlICppbml0ID0gbm9kZS0+Z2V0SW5pdCgp
LT5nZXRBc0FnZ3JlZ2F0ZSgpOworCisgICAgICAgIGlmIChpbml0KQorICAgICAgICB7CisgICAg
ICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJnNlcXVlbmNlID0gaW5pdC0+Z2V0U2VxdWVuY2UoKTsK
KyAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAqdmFyaWFibGUgPSBzZXF1ZW5jZVswXS0+Z2V0QXNU
eXBlZCgpOworCisgICAgICAgICAgICBpZiAodmFyaWFibGUgJiYgdmFyaWFibGUtPmdldFF1YWxp
ZmllcigpID09IEV2cVRlbXBvcmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBU
SW50ZXJtQmluYXJ5ICphc3NpZ24gPSB2YXJpYWJsZS0+Z2V0QXNCaW5hcnlOb2RlKCk7CisKKyAg
ICAgICAgICAgICAgICBpZiAoYXNzaWduLT5nZXRPcCgpID09IEVPcEluaXRpYWxpemUpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wg
PSBhc3NpZ24tPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgICAgICAgICAgICAg
ICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpjb25zdGFudCA9IGFzc2lnbi0+Z2V0UmlnaHQoKS0+
Z2V0QXNDb25zdGFudFVuaW9uKCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbCAm
JiBjb25zdGFudCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmdl
dE5vbWluYWxTaXplKCkgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHN5bWJvbDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbml0aWFsID0gY29uc3RhbnQtPmdldElDb25zdCgwKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFBhcnNlIGNvbXBhcmF0b3Ig
YW5kIGxpbWl0IHZhbHVlCisgICAgaWYgKGluZGV4ICE9IE5VTEwgJiYgbm9kZS0+Z2V0Q29uZGl0
aW9uKCkpCisgICAgeworICAgICAgICBUSW50ZXJtQmluYXJ5ICp0ZXN0ID0gbm9kZS0+Z2V0Q29u
ZGl0aW9uKCktPmdldEFzQmluYXJ5Tm9kZSgpOworICAgICAgICAKKyAgICAgICAgaWYgKHRlc3Qg
JiYgdGVzdC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0SWQoKSA9PSBpbmRleC0+
Z2V0SWQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgVEludGVybUNvbnN0YW50VW5pb24gKmNv
bnN0YW50ID0gdGVzdC0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisKKyAgICAg
ICAgICAgIGlmIChjb25zdGFudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAo
Y29uc3RhbnQtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAmJiBjb25zdGFudC0+Z2V0Tm9taW5h
bFNpemUoKSA9PSAxKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29t
cGFyYXRvciA9IHRlc3QtPmdldE9wKCk7CisgICAgICAgICAgICAgICAgICAgIGxpbWl0ID0gY29u
c3RhbnQtPmdldElDb25zdCgwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBQYXJzZSBpbmNyZW1lbnQKKyAgICBpZiAoaW5kZXgg
IT0gTlVMTCAmJiBjb21wYXJhdG9yICE9IEVPcE51bGwgJiYgbm9kZS0+Z2V0RXhwcmVzc2lvbigp
KQorICAgIHsKKyAgICAgICAgVEludGVybUJpbmFyeSAqYmluYXJ5VGVybWluYWwgPSBub2RlLT5n
ZXRFeHByZXNzaW9uKCktPmdldEFzQmluYXJ5Tm9kZSgpOworICAgICAgICBUSW50ZXJtVW5hcnkg
KnVuYXJ5VGVybWluYWwgPSBub2RlLT5nZXRFeHByZXNzaW9uKCktPmdldEFzVW5hcnlOb2RlKCk7
CisgICAgICAgIAorICAgICAgICBpZiAoYmluYXJ5VGVybWluYWwpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIFRPcGVyYXRvciBvcCA9IGJpbmFyeVRlcm1pbmFsLT5nZXRPcCgpOworICAgICAgICAg
ICAgVEludGVybUNvbnN0YW50VW5pb24gKmNvbnN0YW50ID0gYmluYXJ5VGVybWluYWwtPmdldFJp
Z2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpOworCisgICAgICAgICAgICBpZiAoY29uc3RhbnQp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50LT5nZXRCYXNpY1R5
cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmdldE5vbWluYWxTaXplKCkgPT0gMSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZSA9IGNvbnN0YW50LT5n
ZXRJQ29uc3QoMCk7CisKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChvcCkKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRU9wQWRkQXNzaWduOiBp
bmNyZW1lbnQgPSB2YWx1ZTsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRU9w
U3ViQXNzaWduOiBpbmNyZW1lbnQgPSAtdmFsdWU7IGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOSU1QTEVNRU5URUQoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm
ICh1bmFyeVRlcm1pbmFsKQorICAgICAgICB7CisgICAgICAgICAgICBUT3BlcmF0b3Igb3AgPSB1
bmFyeVRlcm1pbmFsLT5nZXRPcCgpOworCisgICAgICAgICAgICBzd2l0Y2ggKG9wKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6IGluY3JlbWVudCA9
IDE7ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OiBpbmNyZW1l
bnQgPSAtMTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OiAgaW5j
cmVtZW50ID0gMTsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDog
IGluY3JlbWVudCA9IC0xOyBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5JTVBMRU1F
TlRFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGluZGV4
ICE9IE5VTEwgJiYgY29tcGFyYXRvciAhPSBFT3BOdWxsICYmIGluY3JlbWVudCAhPSAwKQorICAg
IHsKKyAgICAgICAgaWYgKGNvbXBhcmF0b3IgPT0gRU9wTGVzc1RoYW5FcXVhbCkKKyAgICAgICAg
eworICAgICAgICAgICAgY29tcGFyYXRvciA9IEVPcExlc3NUaGFuOworICAgICAgICAgICAgbGlt
aXQgKz0gMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb21wYXJhdG9yID09IEVPcExlc3NU
aGFuKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgaXRlcmF0aW9ucyA9IChsaW1pdCAtIGlu
aXRpYWwpIC8gaW5jcmVtZW50OworCisgICAgICAgICAgICBpZiAoaXRlcmF0aW9ucyA8PSBNQVhf
TE9PUF9JVEVSQVRJT05TKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsgICAvLyBOb3QgYW4gZXhjZXNzaXZlIGxvb3AKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgVEludGVybVN5bWJvbCAqcmVzdG9yZUluZGV4ID0gbUV4Y2Vzc2l2ZUxvb3BJbmRleDsK
KyAgICAgICAgICAgIG1FeGNlc3NpdmVMb29wSW5kZXggPSBpbmRleDsKKworICAgICAgICAgICAg
b3V0IDw8ICJ7aW50ICI7CisgICAgICAgICAgICBpbmRleC0+dHJhdmVyc2UodGhpcyk7CisgICAg
ICAgICAgICBvdXQgPDwgIjtcbiIKKyAgICAgICAgICAgICAgICAgICAiYm9vbCBCcmVhayI7Cisg
ICAgICAgICAgICBpbmRleC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICBvdXQgPDwgIiA9
IGZhbHNlO1xuIjsKKworICAgICAgICAgICAgYm9vbCBmaXJzdExvb3BGcmFnbWVudCA9IHRydWU7
CisKKyAgICAgICAgICAgIHdoaWxlIChpdGVyYXRpb25zID4gMCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpbnQgY2xhbXBlZExpbWl0ID0gaW5pdGlhbCArIGluY3JlbWVudCAqIHN0
ZDo6bWluKE1BWF9MT09QX0lURVJBVElPTlMsIGl0ZXJhdGlvbnMpOworCisgICAgICAgICAgICAg
ICAgaWYgKCFmaXJzdExvb3BGcmFnbWVudCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIG91dCA8PCAiaWYgKCFCcmVhayI7CisgICAgICAgICAgICAgICAgICAgIGluZGV4
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIpIHtcbiI7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGl0ZXJhdGlvbnMgPD0gTUFY
X0xPT1BfSVRFUkFUSU9OUykgICAvLyBMYXN0IGxvb3AgZnJhZ21lbnQKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIG1FeGNlc3NpdmVMb29wSW5kZXggPSBOVUxMOyAgIC8v
IFN0b3BzIHNldHRpbmcgdGhlIEJyZWFrIGZsYWcKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gZm9yKGludCBpbmRleCA9IGluaXRpYWw7IGlu
ZGV4IDwgY2xhbXBlZExpbWl0OyBpbmRleCArPSBpbmNyZW1lbnQpCisKKyAgICAgICAgICAgICAg
ICBvdXQgPDwgImZvcigiOworICAgICAgICAgICAgICAgIGluZGV4LT50cmF2ZXJzZSh0aGlzKTsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgIiA9ICI7CisgICAgICAgICAgICAgICAgb3V0IDw8IGlu
aXRpYWw7CisKKyAgICAgICAgICAgICAgICBvdXQgPDwgIjsgIjsKKyAgICAgICAgICAgICAgICBp
bmRleC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgPCAiOworICAg
ICAgICAgICAgICAgIG91dCA8PCBjbGFtcGVkTGltaXQ7CisKKyAgICAgICAgICAgICAgICBvdXQg
PDwgIjsgIjsKKyAgICAgICAgICAgICAgICBpbmRleC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAg
ICAgICAgICAgb3V0IDw8ICIgKz0gIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgaW5jcmVtZW50
OworICAgICAgICAgICAgICAgIG91dCA8PCAiKVxuIjsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKS5maXJzdF9saW5l
KTsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIntcbiI7CisKKyAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+Z2V0Qm9keSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
bm9kZS0+Z2V0Qm9keSgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKS5maXJzdF9s
aW5lKTsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIjt9XG4iOworCisgICAgICAgICAgICAgICAg
aWYgKCFmaXJzdExvb3BGcmFnbWVudCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIG91dCA8PCAifVxuIjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBmaXJzdExvb3BGcmFnbWVudCA9IGZhbHNlOworCisgICAgICAgICAgICAgICAgaW5pdGlhbCAr
PSBNQVhfTE9PUF9JVEVSQVRJT05TICogaW5jcmVtZW50OworICAgICAgICAgICAgICAgIGl0ZXJh
dGlvbnMgLT0gTUFYX0xPT1BfSVRFUkFUSU9OUzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgb3V0IDw8ICJ9IjsKKworICAgICAgICAgICAgbUV4Y2Vzc2l2ZUxvb3BJ
bmRleCA9IHJlc3RvcmVJbmRleDsKKworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSBVTklNUExFTUVOVEVEKCk7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOyAgIC8vIE5vdCBoYW5kbGVkIGFzIGFuIGV4Y2Vzc2l2ZSBsb29wCit9CisKK3ZvaWQgT3V0
cHV0SExTTDo6b3V0cHV0VHJpcGxldChWaXNpdCB2aXNpdCwgY29uc3QgVFN0cmluZyAmcHJlU3Ry
aW5nLCBjb25zdCBUU3RyaW5nICZpblN0cmluZywgY29uc3QgVFN0cmluZyAmcG9zdFN0cmluZykK
K3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKKworICAgIGlmICh2aXNpdCA9PSBQ
cmVWaXNpdCkKKyAgICB7CisgICAgICAgIG91dCA8PCBwcmVTdHJpbmc7CisgICAgfQorICAgIGVs
c2UgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAgeworICAgICAgICBvdXQgPDwgaW5TdHJpbmc7
CisgICAgfQorICAgIGVsc2UgaWYgKHZpc2l0ID09IFBvc3RWaXNpdCkKKyAgICB7CisgICAgICAg
IG91dCA8PCBwb3N0U3RyaW5nOworICAgIH0KK30KKwordm9pZCBPdXRwdXRITFNMOjpvdXRwdXRM
aW5lRGlyZWN0aXZlKGludCBsaW5lKQoreworICAgIGlmICgobUNvbnRleHQuY29tcGlsZU9wdGlv
bnMgJiBTSF9MSU5FX0RJUkVDVElWRVMpICYmIChsaW5lID4gMCkpCisgICAgeworICAgICAgICBt
Qm9keSA8PCAiXG4iOworICAgICAgICBtQm9keSA8PCAiI2xpbmUgIiA8PCBsaW5lOworCisgICAg
ICAgIGlmIChtQ29udGV4dC5zb3VyY2VQYXRoKQorICAgICAgICB7CisgICAgICAgICAgICBtQm9k
eSA8PCAiIFwiIiA8PCBtQ29udGV4dC5zb3VyY2VQYXRoIDw8ICJcIiI7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIG1Cb2R5IDw8ICJcbiI7CisgICAgfQorfQorCitUU3RyaW5nIE91dHB1
dEhMU0w6OmFyZ3VtZW50U3RyaW5nKGNvbnN0IFRJbnRlcm1TeW1ib2wgKnN5bWJvbCkKK3sKKyAg
ICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHN5bWJvbC0+Z2V0UXVhbGlmaWVyKCk7CisgICAgY29u
c3QgVFR5cGUgJnR5cGUgPSBzeW1ib2wtPmdldFR5cGUoKTsKKyAgICBUU3RyaW5nIG5hbWUgPSBz
eW1ib2wtPmdldFN5bWJvbCgpOworCisgICAgaWYgKG5hbWUuZW1wdHkoKSkgICAvLyBITFNMIGRl
bWFuZHMgbmFtZWQgYXJndW1lbnRzLCBhbHNvIGZvciBwcm90b3R5cGVzCisgICAgeworICAgICAg
ICBuYW1lID0gIngiICsgc3RyKG1VbmlxdWVJbmRleCsrKTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgbmFtZSA9IGRlY29yYXRlKG5hbWUpOworICAgIH0KKworICAgIGlmIChtT3V0
cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUICYmIElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlw
ZSgpKSkKKyAgICB7CisgICAgICAgcmV0dXJuIHF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpICsg
IiAiICsgdGV4dHVyZVN0cmluZyh0eXBlKSArICIgdGV4dHVyZV8iICsgbmFtZSArIGFycmF5U3Ry
aW5nKHR5cGUpICsgIiwgIiArCisgICAgICAgICAgICAgIHF1YWxpZmllclN0cmluZyhxdWFsaWZp
ZXIpICsgIiBTYW1wbGVyU3RhdGUgc2FtcGxlcl8iICsgbmFtZSArIGFycmF5U3RyaW5nKHR5cGUp
OworICAgIH0KKworICAgIHJldHVybiBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIgIiAr
IHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKyBuYW1lICsgYXJyYXlTdHJpbmcodHlwZSk7Cit9CisK
K1RTdHJpbmcgT3V0cHV0SExTTDo6cXVhbGlmaWVyU3RyaW5nKFRRdWFsaWZpZXIgcXVhbGlmaWVy
KQoreworICAgIHN3aXRjaChxdWFsaWZpZXIpCisgICAgeworICAgICAgY2FzZSBFdnFJbjogICAg
ICAgICAgICByZXR1cm4gImluIjsKKyAgICAgIGNhc2UgRXZxT3V0OiAgICAgICAgICAgcmV0dXJu
ICJvdXQiOworICAgICAgY2FzZSBFdnFJbk91dDogICAgICAgICByZXR1cm4gImlub3V0IjsKKyAg
ICAgIGNhc2UgRXZxQ29uc3RSZWFkT25seTogcmV0dXJuICJjb25zdCI7CisgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiAiIjsKK30KKworVFN0cmluZyBP
dXRwdXRITFNMOjp0eXBlU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQoreworICAgIGlmICh0eXBl
LmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAgICB7CisgICAgICAgIGNvbnN0IFRTdHJp
bmcmIHR5cGVOYW1lID0gdHlwZS5nZXRTdHJ1Y3QoKS0+bmFtZSgpOworICAgICAgICBpZiAodHlw
ZU5hbWUgIT0gIiIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdHJ1Y3RMb29rdXAo
dHlwZU5hbWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgICAvLyBOYW1lbGVzcyBzdHJ1Y3R1
cmUsIGRlZmluZSBpbiBwbGFjZQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBURmllbGRM
aXN0ICZmaWVsZHMgPSB0eXBlLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKKworICAgICAgICAgICAg
VFN0cmluZyBzdHJpbmcgPSAic3RydWN0XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJ7XG4iOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGZpZWxk
cy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBURmll
bGQgKmZpZWxkID0gZmllbGRzW2ldOworCisgICAgICAgICAgICAgICAgc3RyaW5nICs9ICIgICAg
IiArIHR5cGVTdHJpbmcoKmZpZWxkLT50eXBlKCkpICsgIiAiICsgZGVjb3JhdGUoZmllbGQtPm5h
bWUoKSkgKyBhcnJheVN0cmluZygqZmllbGQtPnR5cGUoKSkgKyAiO1xuIjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgc3RyaW5nICs9ICJ9ICI7CisKKyAgICAgICAgICAgIHJldHVybiBz
dHJpbmc7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAodHlwZS5pc01hdHJpeCgpKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgIHsK
KyAgICAgICAgICBjYXNlIDI6IHJldHVybiAiZmxvYXQyeDIiOworICAgICAgICAgIGNhc2UgMzog
cmV0dXJuICJmbG9hdDN4MyI7CisgICAgICAgICAgY2FzZSA0OiByZXR1cm4gImZsb2F0NHg0IjsK
KyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUu
Z2V0QmFzaWNUeXBlKCkpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAg
ICAgICAgICAgc3dpdGNoICh0eXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuICJmbG9hdCI7CisgICAgICAgICAgICAgIGNhc2Ug
MjogcmV0dXJuICJmbG9hdDIiOworICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiAiZmxvYXQz
IjsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gImZsb2F0NCI7CisgICAgICAgICAgICB9
CisgICAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9t
aW5hbFNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4g
ImludCI7CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuICJpbnQyIjsKKyAgICAgICAgICAg
ICAgY2FzZSAzOiByZXR1cm4gImludDMiOworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiAi
aW50NCI7CisgICAgICAgICAgICB9CisgICAgICAgICAgY2FzZSBFYnRCb29sOgorICAgICAgICAg
ICAgc3dpdGNoICh0eXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgIGNhc2UgMTogcmV0dXJuICJib29sIjsKKyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1
cm4gImJvb2wyIjsKKyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gImJvb2wzIjsKKyAgICAg
ICAgICAgICAgY2FzZSA0OiByZXR1cm4gImJvb2w0IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICBjYXNlIEVidFZvaWQ6CisgICAgICAgICAgICByZXR1cm4gInZvaWQiOworICAgICAgICAgIGNh
c2UgRWJ0U2FtcGxlcjJEOgorICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkQiOworICAgICAg
ICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6CisgICAgICAgICAgICByZXR1cm4gInNhbXBsZXJDVUJF
IjsKKyAgICAgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzoKKyAgICAgICAgICAgIHJl
dHVybiAic2FtcGxlcjJEIjsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiAiPHVu
a25vd24gdHlwZT4iOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OnRleHR1cmVTdHJpbmcoY29u
c3QgVFR5cGUgJnR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlLmdldEJhc2ljVHlwZSgpKQorICAg
IHsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAgICAgICByZXR1cm4gIlRleHR1cmUyRCI7
CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgorICAgICAgICByZXR1cm4gIlRleHR1cmVDdWJl
IjsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOgorICAgICAgICByZXR1cm4gIlRl
eHR1cmUyRCI7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBV
TlJFQUNIQUJMRSgpOworICAgIHJldHVybiAiPHVua25vd24gdGV4dHVyZSB0eXBlPiI7Cit9CisK
K1RTdHJpbmcgT3V0cHV0SExTTDo6YXJyYXlTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpCit7Cisg
ICAgaWYgKCF0eXBlLmlzQXJyYXkoKSkKKyAgICB7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9
CisKKyAgICByZXR1cm4gIlsiICsgc3RyKHR5cGUuZ2V0QXJyYXlTaXplKCkpICsgIl0iOworfQor
CitUU3RyaW5nIE91dHB1dEhMU0w6OmluaXRpYWxpemVyKGNvbnN0IFRUeXBlICZ0eXBlKQorewor
ICAgIFRTdHJpbmcgc3RyaW5nOworCisgICAgc2l6ZV90IHNpemUgPSB0eXBlLmdldE9iamVjdFNp
emUoKTsKKyAgICBmb3IgKHNpemVfdCBjb21wb25lbnQgPSAwOyBjb21wb25lbnQgPCBzaXplOyBj
b21wb25lbnQrKykKKyAgICB7CisgICAgICAgIHN0cmluZyArPSAiMCI7CisKKyAgICAgICAgaWYg
KGNvbXBvbmVudCArIDEgPCBzaXplKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJpbmcgKz0g
IiwgIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAieyIgKyBzdHJpbmcgKyAifSI7
Cit9CisKK3ZvaWQgT3V0cHV0SExTTDo6YWRkQ29uc3RydWN0b3IoY29uc3QgVFR5cGUgJnR5cGUs
IGNvbnN0IFRTdHJpbmcgJm5hbWUsIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAqcGFyYW1ldGVycykK
K3sKKyAgICBpZiAobmFtZSA9PSAiIikKKyAgICB7CisgICAgICAgIHJldHVybjsgICAvLyBOYW1l
bGVzcyBzdHJ1Y3R1cmVzIGRvbid0IGhhdmUgY29uc3RydWN0b3JzCisgICAgfQorCisgICAgaWYg
KHR5cGUuZ2V0U3RydWN0KCkgJiYgbVN0cnVjdE5hbWVzLmZpbmQoZGVjb3JhdGUobmFtZSkpICE9
IG1TdHJ1Y3ROYW1lcy5lbmQoKSkKKyAgICB7CisgICAgICAgIHJldHVybjsgICAvLyBBbHJlYWR5
IGFkZGVkCisgICAgfQorCisgICAgVFR5cGUgY3RvclR5cGUgPSB0eXBlOworICAgIGN0b3JUeXBl
LmNsZWFyQXJyYXluZXNzKCk7CisgICAgY3RvclR5cGUuc2V0UHJlY2lzaW9uKEVicEhpZ2gpOwor
ICAgIGN0b3JUeXBlLnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOworCisgICAgVFN0cmluZyBj
dG9yTmFtZSA9IHR5cGUuZ2V0U3RydWN0KCkgPyBkZWNvcmF0ZShuYW1lKSA6IG5hbWU7CisKKyAg
ICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFRUeXBlPiBQYXJhbWV0ZXJBcnJheTsKKyAgICBQYXJhbWV0
ZXJBcnJheSBjdG9yUGFyYW1ldGVyczsKKworICAgIGlmICh0eXBlLmdldFN0cnVjdCgpKQorICAg
IHsKKyAgICAgICAgbVN0cnVjdE5hbWVzLmluc2VydChkZWNvcmF0ZShuYW1lKSk7CisKKyAgICAg
ICAgVFN0cmluZyBzdHJ1Y3R1cmU7CisgICAgICAgIHN0cnVjdHVyZSArPSAic3RydWN0ICIgKyBk
ZWNvcmF0ZShuYW1lKSArICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAg
ICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHR5cGUuZ2V0U3RydWN0KCktPmZpZWxkcygp
OworCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsg
aSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBURmllbGQgKmZpZWxkID0gZmllbGRz
W2ldOworCisgICAgICAgICAgICBzdHJ1Y3R1cmUgKz0gIiAgICAiICsgdHlwZVN0cmluZygqZmll
bGQtPnR5cGUoKSkgKyAiICIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLT5uYW1lKCksIHR5cGUpICsg
YXJyYXlTdHJpbmcoKmZpZWxkLT50eXBlKCkpICsgIjtcbiI7CisgICAgICAgIH0KKworICAgICAg
ICBzdHJ1Y3R1cmUgKz0gIn07XG4iOworCisgICAgICAgIGlmIChzdGQ6OmZpbmQobVN0cnVjdERl
Y2xhcmF0aW9ucy5iZWdpbigpLCBtU3RydWN0RGVjbGFyYXRpb25zLmVuZCgpLCBzdHJ1Y3R1cmUp
ID09IG1TdHJ1Y3REZWNsYXJhdGlvbnMuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1T
dHJ1Y3REZWNsYXJhdGlvbnMucHVzaF9iYWNrKHN0cnVjdHVyZSk7CisgICAgICAgIH0KKworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKKyAg
ICAgICAgeworICAgICAgICAgICAgY3RvclBhcmFtZXRlcnMucHVzaF9iYWNrKCpmaWVsZHNbaV0t
PnR5cGUoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAocGFyYW1ldGVycykKKyAg
ICB7CisgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBwYXJhbWV0
ZXIgPSBwYXJhbWV0ZXJzLT5iZWdpbigpOyBwYXJhbWV0ZXIgIT0gcGFyYW1ldGVycy0+ZW5kKCk7
IHBhcmFtZXRlcisrKQorICAgICAgICB7CisgICAgICAgICAgICBjdG9yUGFyYW1ldGVycy5wdXNo
X2JhY2soKCpwYXJhbWV0ZXIpLT5nZXRBc1R5cGVkKCktPmdldFR5cGUoKSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgVFN0cmluZyBjb25zdHJ1Y3Rv
cjsKKworICAgIGlmIChjdG9yVHlwZS5nZXRTdHJ1Y3QoKSkKKyAgICB7CisgICAgICAgIGNvbnN0
cnVjdG9yICs9IGN0b3JOYW1lICsgIiAiICsgY3Rvck5hbWUgKyAiX2N0b3IoIjsKKyAgICB9Cisg
ICAgZWxzZSAgIC8vIEJ1aWx0LWluIHR5cGUKKyAgICB7CisgICAgICAgIGNvbnN0cnVjdG9yICs9
IHR5cGVTdHJpbmcoY3RvclR5cGUpICsgIiAiICsgY3Rvck5hbWUgKyAiKCI7CisgICAgfQorCisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgcGFyYW1ldGVyID0gMDsgcGFyYW1ldGVyIDwgY3RvclBhcmFt
ZXRlcnMuc2l6ZSgpOyBwYXJhbWV0ZXIrKykKKyAgICB7CisgICAgICAgIGNvbnN0IFRUeXBlICZ0
eXBlID0gY3RvclBhcmFtZXRlcnNbcGFyYW1ldGVyXTsKKworICAgICAgICBjb25zdHJ1Y3RvciAr
PSB0eXBlU3RyaW5nKHR5cGUpICsgIiB4IiArIHN0cihwYXJhbWV0ZXIpICsgYXJyYXlTdHJpbmco
dHlwZSk7CisKKyAgICAgICAgaWYgKHBhcmFtZXRlciA8IGN0b3JQYXJhbWV0ZXJzLnNpemUoKSAt
IDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9ICIsICI7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBjb25zdHJ1Y3RvciArPSAiKVxuIgorICAgICAgICAgICAgICAgICAg
ICJ7XG4iOworCisgICAgaWYgKGN0b3JUeXBlLmdldFN0cnVjdCgpKQorICAgIHsKKyAgICAgICAg
Y29uc3RydWN0b3IgKz0gIiAgICAiICsgY3Rvck5hbWUgKyAiIHN0cnVjdHVyZSA9IHsiOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjb25zdHJ1Y3RvciArPSAiICAgIHJldHVybiAi
ICsgdHlwZVN0cmluZyhjdG9yVHlwZSkgKyAiKCI7CisgICAgfQorCisgICAgaWYgKGN0b3JUeXBl
LmlzTWF0cml4KCkgJiYgY3RvclBhcmFtZXRlcnMuc2l6ZSgpID09IDEpCisgICAgeworICAgICAg
ICBpbnQgZGltID0gY3RvclR5cGUuZ2V0Tm9taW5hbFNpemUoKTsKKyAgICAgICAgY29uc3QgVFR5
cGUgJnBhcmFtZXRlciA9IGN0b3JQYXJhbWV0ZXJzWzBdOworCisgICAgICAgIGlmIChwYXJhbWV0
ZXIuaXNTY2FsYXIoKSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsg
cm93IDwgZGltOyByb3crKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGlu
dCBjb2wgPSAwOyBjb2wgPCBkaW07IGNvbCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gVFN0cmluZygocm93ID09IGNvbCkgPyAieDAiIDog
IjAuMCIpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJv
dyA8IGRpbSAtIDEgfHwgY29sIDwgZGltIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gIiwgIjsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBlbHNlIGlmIChwYXJhbWV0ZXIuaXNNYXRyaXgoKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgZGltOyByb3crKykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBkaW07IGNvbCsrKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvdyA8IHBhcmFtZXRlci5nZXRO
b21pbmFsU2l6ZSgpICYmIGNvbCA8IHBhcmFtZXRlci5nZXROb21pbmFsU2l6ZSgpKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSBU
U3RyaW5nKCJ4MCIpICsgIlsiICsgc3RyKHJvdykgKyAiXSIgKyAiWyIgKyBzdHIoY29sKSArICJd
IjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9
IFRTdHJpbmcoKHJvdyA9PSBjb2wpID8gIjEuMCIgOiAiMC4wIik7CisgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAocm93IDwgZGltIC0gMSB8fCBjb2wgPCBk
aW0gLSAxKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdHJ1Y3RvciArPSAiLCAiOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUo
KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc2l6ZV90IHJlbWFpbmluZ0NvbXBv
bmVudHMgPSBjdG9yVHlwZS5nZXRPYmplY3RTaXplKCk7CisgICAgICAgIHNpemVfdCBwYXJhbWV0
ZXJJbmRleCA9IDA7CisKKyAgICAgICAgd2hpbGUgKHJlbWFpbmluZ0NvbXBvbmVudHMgPiAwKQor
ICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVHlwZSAmcGFyYW1ldGVyID0gY3RvclBhcmFt
ZXRlcnNbcGFyYW1ldGVySW5kZXhdOworICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHBhcmFtZXRl
clNpemUgPSBwYXJhbWV0ZXIuZ2V0T2JqZWN0U2l6ZSgpOworICAgICAgICAgICAgYm9vbCBtb3Jl
UGFyYW1ldGVycyA9IHBhcmFtZXRlckluZGV4ICsgMSA8IGN0b3JQYXJhbWV0ZXJzLnNpemUoKTsK
KworICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gIngiICsgc3RyKHBhcmFtZXRlckluZGV4KTsK
KworICAgICAgICAgICAgaWYgKHBhcmFtZXRlci5pc1NjYWxhcigpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIEFTU0VSVChwYXJhbWV0ZXJTaXplIDw9IHJlbWFpbmluZ0NvbXBvbmVu
dHMpOworICAgICAgICAgICAgICAgIHJlbWFpbmluZ0NvbXBvbmVudHMgLT0gcGFyYW1ldGVyU2l6
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHBhcmFtZXRlci5pc1ZlY3Rv
cigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChyZW1haW5pbmdDb21wb25l
bnRzID09IHBhcmFtZXRlclNpemUgfHwgbW9yZVBhcmFtZXRlcnMpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBBU1NFUlQocGFyYW1ldGVyU2l6ZSA8PSByZW1haW5pbmdD
b21wb25lbnRzKTsKKyAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nQ29tcG9uZW50cyAtPSBw
YXJhbWV0ZXJTaXplOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlm
IChyZW1haW5pbmdDb21wb25lbnRzIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihwYXJhbWV0ZXIuZ2V0
Tm9taW5hbFNpemUoKSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBz
d2l0Y2ggKHJlbWFpbmluZ0NvbXBvbmVudHMpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIDE6IGNvbnN0cnVjdG9yICs9ICIueCI7ICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogY29uc3RydWN0b3IgKz0gIi54eSI7ICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBjb25zdHJ1Y3RvciArPSAiLnh5eiI7
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IGNvbnN0cnVjdG9yICs9ICIu
eHl6dyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICByZW1haW5p
bmdDb21wb25lbnRzID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxz
ZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocGFy
YW1ldGVyLmlzTWF0cml4KCkgfHwgcGFyYW1ldGVyLmdldFN0cnVjdCgpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIEFTU0VSVChyZW1haW5pbmdDb21wb25lbnRzID09IHBhcmFtZXRl
clNpemUgfHwgbW9yZVBhcmFtZXRlcnMpOworICAgICAgICAgICAgICAgIEFTU0VSVChwYXJhbWV0
ZXJTaXplIDw9IHJlbWFpbmluZ0NvbXBvbmVudHMpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIHJlbWFpbmluZ0NvbXBvbmVudHMgLT0gcGFyYW1ldGVyU2l6ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAgICAgaWYg
KG1vcmVQYXJhbWV0ZXJzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBhcmFtZXRl
ckluZGV4Kys7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChyZW1haW5pbmdDb21w
b25lbnRzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9ICIs
ICI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY3RvclR5cGUu
Z2V0U3RydWN0KCkpCisgICAgeworICAgICAgICBjb25zdHJ1Y3RvciArPSAifTtcbiIKKyAgICAg
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gc3RydWN0dXJlO1xuIgorICAgICAgICAgICAg
ICAgICAgICAgICAifVxuIjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY29uc3Ry
dWN0b3IgKz0gIik7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iOworICAgIH0KKwor
ICAgIG1Db25zdHJ1Y3RvcnMuaW5zZXJ0KGNvbnN0cnVjdG9yKTsKK30KKworY29uc3QgQ29uc3Rh
bnRVbmlvbiAqT3V0cHV0SExTTDo6d3JpdGVDb25zdGFudFVuaW9uKGNvbnN0IFRUeXBlICZ0eXBl
LCBjb25zdCBDb25zdGFudFVuaW9uICpjb25zdFVuaW9uKQoreworICAgIFRJbmZvU2lua0Jhc2Ug
Jm91dCA9IG1Cb2R5OworCisgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0
KQorICAgIHsKKyAgICAgICAgb3V0IDw8IHN0cnVjdExvb2t1cCh0eXBlLmdldFN0cnVjdCgpLT5u
YW1lKCkpICsgIl9jdG9yKCI7CisgICAgICAgIAorICAgICAgICBjb25zdCBURmllbGRMaXN0ICZm
aWVsZHMgPSB0eXBlLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKKworICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAg
Y29uc3QgVFR5cGUgKmZpZWxkVHlwZSA9IGZpZWxkc1tpXS0+dHlwZSgpOworCisgICAgICAgICAg
ICBjb25zdFVuaW9uID0gd3JpdGVDb25zdGFudFVuaW9uKCpmaWVsZFR5cGUsIGNvbnN0VW5pb24p
OworCisgICAgICAgICAgICBpZiAoaSAhPSBmaWVsZHMuc2l6ZSgpIC0gMSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIG91dCA8PCAiKSI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IHNpemVfdCBzaXplID0gdHlwZS5nZXRPYmplY3RTaXplKCk7CisgICAgICAgIGJvb2wgd3JpdGVU
eXBlID0gc2l6ZSA+IDE7CisgICAgICAgIAorICAgICAgICBpZiAod3JpdGVUeXBlKQorICAgICAg
ICB7CisgICAgICAgICAgICBvdXQgPDwgdHlwZVN0cmluZyh0eXBlKSA8PCAiKCI7CisgICAgICAg
IH0KKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkrKywgY29uc3RVbmlv
bisrKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnN0VW5pb24tPmdldFR5cGUo
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogb3V0IDw8IHN0
ZDo6bWluKEZMVF9NQVgsIHN0ZDo6bWF4KC1GTFRfTUFYLCBjb25zdFVuaW9uLT5nZXRGQ29uc3Qo
KSkpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgb3V0IDw8IGNvbnN0VW5p
b24tPmdldElDb25zdCgpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOiAgb3V0
IDw8IGNvbnN0VW5pb24tPmdldEJDb25zdCgpOyBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGkgIT0g
c2l6ZSAtIDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAod3JpdGVUeXBlKQorICAgICAg
ICB7CisgICAgICAgICAgICBvdXQgPDwgIikiOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIGNvbnN0VW5pb247Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6c2NvcGVTdHJpbmcodW5z
aWduZWQgaW50IGRlcHRoTGltaXQpCit7CisgICAgVFN0cmluZyBzdHJpbmc7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1TY29wZUJyYWNrZXQuc2l6ZSgpICYmIGkgPCBkZXB0
aExpbWl0OyBpKyspCisgICAgeworICAgICAgICBzdHJpbmcgKz0gIl8iICsgc3RyKGkpOworICAg
IH0KKworICAgIHJldHVybiBzdHJpbmc7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6c2NvcGVk
U3RydWN0KGNvbnN0IFRTdHJpbmcgJnR5cGVOYW1lKQoreworICAgIGlmICh0eXBlTmFtZSA9PSAi
IikKKyAgICB7CisgICAgICAgIHJldHVybiB0eXBlTmFtZTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHlwZU5hbWUgKyBzY29wZVN0cmluZyhtU2NvcGVEZXB0aCk7Cit9CisKK1RTdHJpbmcgT3V0cHV0
SExTTDo6c3RydWN0TG9va3VwKGNvbnN0IFRTdHJpbmcgJnR5cGVOYW1lKQoreworICAgIGZvciAo
aW50IGRlcHRoID0gbVNjb3BlRGVwdGg7IGRlcHRoID49IDA7IGRlcHRoLS0pCisgICAgeworICAg
ICAgICBUU3RyaW5nIHNjb3BlZE5hbWUgPSBkZWNvcmF0ZSh0eXBlTmFtZSArIHNjb3BlU3RyaW5n
KGRlcHRoKSk7CisKKyAgICAgICAgZm9yIChTdHJ1Y3ROYW1lczo6aXRlcmF0b3Igc3RydWN0TmFt
ZSA9IG1TdHJ1Y3ROYW1lcy5iZWdpbigpOyBzdHJ1Y3ROYW1lICE9IG1TdHJ1Y3ROYW1lcy5lbmQo
KTsgc3RydWN0TmFtZSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKnN0cnVjdE5hbWUg
PT0gc2NvcGVkTmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2Nv
cGVkTmFtZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIFVOUkVBQ0hB
QkxFKCk7ICAgLy8gU2hvdWxkIGhhdmUgZm91bmQgYSBtYXRjaGluZyBjb25zdHJ1Y3RvcgorCisg
ICAgcmV0dXJuIHR5cGVOYW1lOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlKGNv
bnN0IFRTdHJpbmcgJnN0cmluZykKK3sKKyAgICBpZiAoc3RyaW5nLmNvbXBhcmUoMCwgMywgImds
XyIpICE9IDAgJiYgc3RyaW5nLmNvbXBhcmUoMCwgMywgImR4XyIpICE9IDApCisgICAgeworICAg
ICAgICByZXR1cm4gIl8iICsgc3RyaW5nOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gc3RyaW5n
OworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlVW5pZm9ybShjb25zdCBUU3RyaW5n
ICZzdHJpbmcsIGNvbnN0IFRUeXBlICZ0eXBlKQoreworICAgIGlmICh0eXBlLmdldEJhc2ljVHlw
ZSgpID09IEVidFNhbXBsZXJFeHRlcm5hbE9FUykKKyAgICB7CisgICAgICAgIHJldHVybiAiZXhf
IiArIHN0cmluZzsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGRlY29yYXRlKHN0cmluZyk7Cit9
CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6ZGVjb3JhdGVGaWVsZChjb25zdCBUU3RyaW5nICZzdHJp
bmcsIGNvbnN0IFRUeXBlICZzdHJ1Y3R1cmUpCit7CisgICAgaWYgKHN0cnVjdHVyZS5nZXRTdHJ1
Y3QoKS0+bmFtZSgpLmNvbXBhcmUoMCwgMywgImdsXyIpICE9IDApCisgICAgeworICAgICAgICBy
ZXR1cm4gZGVjb3JhdGUoc3RyaW5nKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RyaW5nOworfQor
CitUU3RyaW5nIE91dHB1dEhMU0w6OnJlZ2lzdGVyU3RyaW5nKFRJbnRlcm1TeW1ib2wgKm9wZXJh
bmQpCit7CisgICAgQVNTRVJUKG9wZXJhbmQtPmdldFF1YWxpZmllcigpID09IEV2cVVuaWZvcm0p
OworCisgICAgaWYgKElzU2FtcGxlcihvcGVyYW5kLT5nZXRCYXNpY1R5cGUoKSkpCisgICAgewor
ICAgICAgICByZXR1cm4gInMiICsgc3RyKHNhbXBsZXJSZWdpc3RlcihvcGVyYW5kKSk7CisgICAg
fQorCisgICAgcmV0dXJuICJjIiArIHN0cih1bmlmb3JtUmVnaXN0ZXIob3BlcmFuZCkpOworfQor
CitpbnQgT3V0cHV0SExTTDo6c2FtcGxlclJlZ2lzdGVyKFRJbnRlcm1TeW1ib2wgKnNhbXBsZXIp
Cit7CisgICAgY29uc3QgVFR5cGUgJnR5cGUgPSBzYW1wbGVyLT5nZXRUeXBlKCk7CisgICAgQVNT
RVJUKElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSk7CisKKyAgICBpbnQgaW5kZXggPSBt
U2FtcGxlclJlZ2lzdGVyOworICAgIG1TYW1wbGVyUmVnaXN0ZXIgKz0gc2FtcGxlci0+dG90YWxS
ZWdpc3RlckNvdW50KCk7CisKKyAgICBkZWNsYXJlVW5pZm9ybSh0eXBlLCBzYW1wbGVyLT5nZXRT
eW1ib2woKSwgaW5kZXgpOworCisgICAgcmV0dXJuIGluZGV4OworfQorCitpbnQgT3V0cHV0SExT
TDo6dW5pZm9ybVJlZ2lzdGVyKFRJbnRlcm1TeW1ib2wgKnVuaWZvcm0pCit7CisgICAgY29uc3Qg
VFR5cGUgJnR5cGUgPSB1bmlmb3JtLT5nZXRUeXBlKCk7CisgICAgQVNTRVJUKCFJc1NhbXBsZXIo
dHlwZS5nZXRCYXNpY1R5cGUoKSkpOworCisgICAgaW50IGluZGV4ID0gbVVuaWZvcm1SZWdpc3Rl
cjsKKyAgICBtVW5pZm9ybVJlZ2lzdGVyICs9IHVuaWZvcm0tPnRvdGFsUmVnaXN0ZXJDb3VudCgp
OworCisgICAgZGVjbGFyZVVuaWZvcm0odHlwZSwgdW5pZm9ybS0+Z2V0U3ltYm9sKCksIGluZGV4
KTsKKworICAgIHJldHVybiBpbmRleDsKK30KKwordm9pZCBPdXRwdXRITFNMOjpkZWNsYXJlVW5p
Zm9ybShjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSwgaW50IGluZGV4KQor
eworICAgIFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7CisKKyAgICBp
ZiAoIXN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIG1BY3RpdmVVbmlmb3Jtcy5wdXNoX2JhY2so
VW5pZm9ybShnbFZhcmlhYmxlVHlwZSh0eXBlKSwgZ2xWYXJpYWJsZVByZWNpc2lvbih0eXBlKSwg
bmFtZS5jX3N0cigpLCB0eXBlLmdldEFycmF5U2l6ZSgpLCBpbmRleCkpOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBjb25zdCBURmllbGRMaXN0ICZmaWVsZHMgPSBzdHJ1Y3R1cmUt
PmZpZWxkcygpOworCisgICAgICAgIGlmICh0eXBlLmlzQXJyYXkoKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgaW50IGVsZW1lbnRJbmRleCA9IGluZGV4OworCisgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHR5cGUuZ2V0QXJyYXlTaXplKCk7IGkrKykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGZpZWxkcy5zaXplKCk7IGorKykK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZmaWVs
ZFR5cGUgPSAqZmllbGRzW2pdLT50eXBlKCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRT
dHJpbmcgdW5pZm9ybU5hbWUgPSBuYW1lICsgIlsiICsgc3RyKGkpICsgIl0uIiArIGZpZWxkc1tq
XS0+bmFtZSgpOworICAgICAgICAgICAgICAgICAgICBkZWNsYXJlVW5pZm9ybShmaWVsZFR5cGUs
IHVuaWZvcm1OYW1lLCBlbGVtZW50SW5kZXgpOworICAgICAgICAgICAgICAgICAgICBlbGVtZW50
SW5kZXggKz0gZmllbGRUeXBlLnRvdGFsUmVnaXN0ZXJDb3VudCgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGludCBmaWVsZEluZGV4ID0gaW5kZXg7CisKKyAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZFR5cGUgPSAqZmllbGRzW2ldLT50eXBlKCk7Cisg
ICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyB1bmlmb3JtTmFtZSA9IG5hbWUgKyAiLiIgKyBm
aWVsZHNbaV0tPm5hbWUoKTsKKyAgICAgICAgICAgICAgICBkZWNsYXJlVW5pZm9ybShmaWVsZFR5
cGUsIHVuaWZvcm1OYW1lLCBmaWVsZEluZGV4KTsKKyAgICAgICAgICAgICAgICBmaWVsZEluZGV4
ICs9IGZpZWxkVHlwZS50b3RhbFJlZ2lzdGVyQ291bnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KK30KKworR0xlbnVtIE91dHB1dEhMU0w6OmdsVmFyaWFibGVUeXBlKGNvbnN0
IFRUeXBlICZ0eXBlKQoreworICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidEZsb2F0
KQorICAgIHsKKyAgICAgICAgaWYgKHR5cGUuaXNTY2FsYXIoKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIEdMX0ZMT0FUOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHR5cGUu
aXNWZWN0b3IoKSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKHR5cGUuZ2V0Tm9taW5h
bFNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gR0xf
RkxPQVRfVkVDMjsKKyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gR0xfRkxPQVRfVkVDMzsK
KyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gR0xfRkxPQVRfVkVDNDsKKyAgICAgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBlbHNlIGlmICh0eXBlLmlzTWF0cml4KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3
aXRjaCh0eXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
IGNhc2UgMjogcmV0dXJuIEdMX0ZMT0FUX01BVDI7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0
dXJuIEdMX0ZMT0FUX01BVDM7CisgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIEdMX0ZMT0FU
X01BVDQ7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgIH0KKyAgICBl
bHNlIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidEludCkKKyAgICB7CisgICAgICAgIGlm
ICh0eXBlLmlzU2NhbGFyKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHTF9JTlQ7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodHlwZS5pc1ZlY3RvcigpKQorICAgICAgICB7
CisgICAgICAgICAgICBzd2l0Y2godHlwZS5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBHTF9JTlRfVkVDMjsKKyAgICAgICAgICAg
ICAgY2FzZSAzOiByZXR1cm4gR0xfSU5UX1ZFQzM7CisgICAgICAgICAgICAgIGNhc2UgNDogcmV0
dXJuIEdMX0lOVF9WRUM0OworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAg
ICB9CisgICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRCb29sKQorICAgIHsK
KyAgICAgICAgaWYgKHR5cGUuaXNTY2FsYXIoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIEdMX0JPT0w7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodHlwZS5pc1ZlY3Rvcigp
KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2godHlwZS5nZXROb21pbmFsU2l6ZSgpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBHTF9CT09MX1ZFQzI7
CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIEdMX0JPT0xfVkVDMzsKKyAgICAgICAgICAg
ICAgY2FzZSA0OiByZXR1cm4gR0xfQk9PTF9WRUM0OworICAgICAgICAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBF
YnRTYW1wbGVyMkQpCisgICAgeworICAgICAgICByZXR1cm4gR0xfU0FNUExFUl8yRDsKKyAgICB9
CisgICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTYW1wbGVyQ3ViZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBHTF9TQU1QTEVSX0NVQkU7CisgICAgfQorICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKKworICAgIHJldHVybiBHTF9OT05FOworfQorCitHTGVudW0gT3V0cHV0SExT
TDo6Z2xWYXJpYWJsZVByZWNpc2lvbihjb25zdCBUVHlwZSAmdHlwZSkKK3sKKyAgICBpZiAodHlw
ZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRGbG9hdCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlw
ZS5nZXRQcmVjaXNpb24oKSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRWJwSGlnaDogICBy
ZXR1cm4gR0xfSElHSF9GTE9BVDsKKyAgICAgICAgICBjYXNlIEVicE1lZGl1bTogcmV0dXJuIEdM
X01FRElVTV9GTE9BVDsKKyAgICAgICAgICBjYXNlIEVicExvdzogICAgcmV0dXJuIEdMX0xPV19G
TE9BVDsKKyAgICAgICAgICBjYXNlIEVicFVuZGVmaW5lZDoKKyAgICAgICAgICAgIC8vIFNob3Vs
ZCBiZSBkZWZpbmVkIGFzIHRoZSBkZWZhdWx0IHByZWNpc2lvbiBieSB0aGUgcGFyc2VyCisgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNl
IGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidEludCkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAodHlwZS5nZXRQcmVjaXNpb24oKSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRWJwSGln
aDogICByZXR1cm4gR0xfSElHSF9JTlQ7CisgICAgICAgICAgY2FzZSBFYnBNZWRpdW06IHJldHVy
biBHTF9NRURJVU1fSU5UOworICAgICAgICAgIGNhc2UgRWJwTG93OiAgICByZXR1cm4gR0xfTE9X
X0lOVDsKKyAgICAgICAgICBjYXNlIEVicFVuZGVmaW5lZDoKKyAgICAgICAgICAgIC8vIFNob3Vs
ZCBiZSBkZWZpbmVkIGFzIHRoZSBkZWZhdWx0IHByZWNpc2lvbiBieSB0aGUgcGFyc2VyCisgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8v
IE90aGVyIHR5cGVzIChib29sZWFuLCBzYW1wbGVyKSBkb24ndCBoYXZlIGEgcHJlY2lzaW9uCisg
ICAgcmV0dXJuIEdMX05PTkU7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zYWZkOGU5YWRhYjAxMTdjNDk5ZmJjNzFlZTNmYzljYmQzNmIyZGZkCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
T3V0cHV0SExTTC5oCkBAIC0wLDAgKzEsMTY3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZu
ZGVmIENPTVBJTEVSX09VVFBVVEhMU0xfSF8KKyNkZWZpbmUgQ09NUElMRVJfT1VUUFVUSExTTF9I
XworCisjaW5jbHVkZSA8bGlzdD4KKyNpbmNsdWRlIDxzZXQ+CisjaW5jbHVkZSA8bWFwPgorCisj
ZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKworI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9QYXJzZUNvbnRleHQuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Vu
aWZvcm0uaCIKKworbmFtZXNwYWNlIHNoCit7CitjbGFzcyBVbmZvbGRTaG9ydENpcmN1aXQ7CisK
K2NsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6
CisgICAgT3V0cHV0SExTTChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBjb25zdCBTaEJ1aWx0SW5S
ZXNvdXJjZXMmIHJlc291cmNlcywgU2hTaGFkZXJPdXRwdXQgb3V0cHV0VHlwZSk7CisgICAgfk91
dHB1dEhMU0woKTsKKworICAgIHZvaWQgb3V0cHV0KCk7CisKKyAgICBUSW5mb1NpbmtCYXNlICZn
ZXRCb2R5U3RyZWFtKCk7CisgICAgY29uc3QgQWN0aXZlVW5pZm9ybXMgJmdldFVuaWZvcm1zKCk7
CisKKyAgICBUU3RyaW5nIHR5cGVTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpOworICAgIFRTdHJp
bmcgdGV4dHVyZVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7CisgICAgc3RhdGljIFRTdHJpbmcg
cXVhbGlmaWVyU3RyaW5nKFRRdWFsaWZpZXIgcXVhbGlmaWVyKTsKKyAgICBzdGF0aWMgVFN0cmlu
ZyBhcnJheVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7CisgICAgc3RhdGljIFRTdHJpbmcgaW5p
dGlhbGl6ZXIoY29uc3QgVFR5cGUgJnR5cGUpOworICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRl
KGNvbnN0IFRTdHJpbmcgJnN0cmluZyk7ICAgICAgICAgICAgICAgICAgICAgIC8vIFByZXBlbmRz
IGFuIHVuZGVyc2NvcmUgdG8gYXZvaWQgbmFtaW5nIGNsYXNoZXMKKyAgICBzdGF0aWMgVFN0cmlu
ZyBkZWNvcmF0ZVVuaWZvcm0oY29uc3QgVFN0cmluZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAmdHlw
ZSk7CisgICAgc3RhdGljIFRTdHJpbmcgZGVjb3JhdGVGaWVsZChjb25zdCBUU3RyaW5nICZzdHJp
bmcsIGNvbnN0IFRUeXBlICZzdHJ1Y3R1cmUpOworCisgIHByb3RlY3RlZDoKKyAgICB2b2lkIGhl
YWRlcigpOworCisgICAgLy8gVmlzaXQgQVNUIG5vZGVzIGFuZCBvdXRwdXQgdGhlaXIgY29kZSB0
byB0aGUgYm9keSBzdHJlYW0KKyAgICB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsK
KyAgICB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiopOworICAg
IGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKyAgICBib29s
IHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSopOworICAgIGJvb2wgdmlzaXRT
ZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKKyAgICBib29sIHZpc2l0
QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7CisgICAgYm9vbCB2aXNp
dExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKik7CisgICAgYm9vbCB2aXNpdEJyYW5jaChW
aXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCopOworCisgICAgdm9pZCB0cmF2ZXJzZVN0YXRlbWVu
dHMoVEludGVybU5vZGUgKm5vZGUpOworICAgIGJvb2wgaXNTaW5nbGVTdGF0ZW1lbnQoVEludGVy
bU5vZGUgKm5vZGUpOworICAgIGJvb2wgaGFuZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAq
bm9kZSk7CisgICAgdm9pZCBvdXRwdXRUcmlwbGV0KFZpc2l0IHZpc2l0LCBjb25zdCBUU3RyaW5n
ICZwcmVTdHJpbmcsIGNvbnN0IFRTdHJpbmcgJmluU3RyaW5nLCBjb25zdCBUU3RyaW5nICZwb3N0
U3RyaW5nKTsKKyAgICB2b2lkIG91dHB1dExpbmVEaXJlY3RpdmUoaW50IGxpbmUpOworICAgIFRT
dHJpbmcgYXJndW1lbnRTdHJpbmcoY29uc3QgVEludGVybVN5bWJvbCAqc3ltYm9sKTsKKyAgICBp
bnQgdmVjdG9yU2l6ZShjb25zdCBUVHlwZSAmdHlwZSkgY29uc3Q7CisKKyAgICB2b2lkIGFkZENv
bnN0cnVjdG9yKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5nICZuYW1lLCBjb25zdCBU
SW50ZXJtU2VxdWVuY2UgKnBhcmFtZXRlcnMpOworICAgIGNvbnN0IENvbnN0YW50VW5pb24gKndy
aXRlQ29uc3RhbnRVbmlvbihjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgQ29uc3RhbnRVbmlvbiAq
Y29uc3RVbmlvbik7CisKKyAgICBUU3RyaW5nIHNjb3BlU3RyaW5nKHVuc2lnbmVkIGludCBkZXB0
aExpbWl0KTsKKyAgICBUU3RyaW5nIHNjb3BlZFN0cnVjdChjb25zdCBUU3RyaW5nICZ0eXBlTmFt
ZSk7CisgICAgVFN0cmluZyBzdHJ1Y3RMb29rdXAoY29uc3QgVFN0cmluZyAmdHlwZU5hbWUpOwor
CisgICAgVFBhcnNlQ29udGV4dCAmbUNvbnRleHQ7CisgICAgY29uc3QgU2hTaGFkZXJPdXRwdXQg
bU91dHB1dFR5cGU7CisgICAgVW5mb2xkU2hvcnRDaXJjdWl0ICptVW5mb2xkU2hvcnRDaXJjdWl0
OworICAgIGJvb2wgbUluc2lkZUZ1bmN0aW9uOworCisgICAgLy8gT3V0cHV0IHN0cmVhbXMKKyAg
ICBUSW5mb1NpbmtCYXNlIG1IZWFkZXI7CisgICAgVEluZm9TaW5rQmFzZSBtQm9keTsKKyAgICBU
SW5mb1NpbmtCYXNlIG1Gb290ZXI7CisKKyAgICB0eXBlZGVmIHN0ZDo6bWFwPFRTdHJpbmcsIFRJ
bnRlcm1TeW1ib2wqPiBSZWZlcmVuY2VkU3ltYm9sczsKKyAgICBSZWZlcmVuY2VkU3ltYm9scyBt
UmVmZXJlbmNlZFVuaWZvcm1zOworICAgIFJlZmVyZW5jZWRTeW1ib2xzIG1SZWZlcmVuY2VkQXR0
cmlidXRlczsKKyAgICBSZWZlcmVuY2VkU3ltYm9scyBtUmVmZXJlbmNlZFZhcnlpbmdzOworCisg
ICAgLy8gUGFyYW1ldGVycyBkZXRlcm1pbmluZyB3aGF0IGdvZXMgaW4gdGhlIGhlYWRlciBvdXRw
dXQKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJEOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRfYmlh
czsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJETG9kOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQ
cm9qOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXM7CisgICAgYm9vbCBtVXNlc1Rl
eHR1cmUyRFByb2pMb2Q7CisgICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlOworICAgIGJvb2wgbVVz
ZXNUZXh0dXJlQ3ViZV9iaWFzOworICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZUxvZDsKKyAgICBi
b29sIG1Vc2VzVGV4dHVyZTJETG9kMDsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFz
OworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMDsKKyAgICBib29sIG1Vc2VzVGV4dHVy
ZTJEUHJvakxvZDBfYmlhczsKKyAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmVMb2QwOworICAgIGJv
b2wgbVVzZXNUZXh0dXJlQ3ViZUxvZDBfYmlhczsKKyAgICBib29sIG1Vc2VzRnJhZ0NvbG9yOwor
ICAgIGJvb2wgbVVzZXNGcmFnRGF0YTsKKyAgICBib29sIG1Vc2VzRGVwdGhSYW5nZTsKKyAgICBi
b29sIG1Vc2VzRnJhZ0Nvb3JkOworICAgIGJvb2wgbVVzZXNQb2ludENvb3JkOworICAgIGJvb2wg
bVVzZXNGcm9udEZhY2luZzsKKyAgICBib29sIG1Vc2VzUG9pbnRTaXplOworICAgIGJvb2wgbVVz
ZXNGcmFnRGVwdGg7CisgICAgYm9vbCBtVXNlc1hvcjsKKyAgICBib29sIG1Vc2VzTW9kMTsKKyAg
ICBib29sIG1Vc2VzTW9kMnY7CisgICAgYm9vbCBtVXNlc01vZDJmOworICAgIGJvb2wgbVVzZXNN
b2QzdjsKKyAgICBib29sIG1Vc2VzTW9kM2Y7CisgICAgYm9vbCBtVXNlc01vZDR2OworICAgIGJv
b2wgbVVzZXNNb2Q0ZjsKKyAgICBib29sIG1Vc2VzRmFjZWZvcndhcmQxOworICAgIGJvb2wgbVVz
ZXNGYWNlZm9yd2FyZDI7CisgICAgYm9vbCBtVXNlc0ZhY2Vmb3J3YXJkMzsKKyAgICBib29sIG1V
c2VzRmFjZWZvcndhcmQ0OworICAgIGJvb2wgbVVzZXNBdGFuMl8xOworICAgIGJvb2wgbVVzZXNB
dGFuMl8yOworICAgIGJvb2wgbVVzZXNBdGFuMl8zOworICAgIGJvb2wgbVVzZXNBdGFuMl80Owor
ICAgIGJvb2wgbVVzZXNEaXNjYXJkUmV3cml0aW5nOworCisgICAgaW50IG1OdW1SZW5kZXJUYXJn
ZXRzOworCisgICAgdHlwZWRlZiBzdGQ6OnNldDxUU3RyaW5nPiBDb25zdHJ1Y3RvcnM7CisgICAg
Q29uc3RydWN0b3JzIG1Db25zdHJ1Y3RvcnM7CisKKyAgICB0eXBlZGVmIHN0ZDo6c2V0PFRTdHJp
bmc+IFN0cnVjdE5hbWVzOworICAgIFN0cnVjdE5hbWVzIG1TdHJ1Y3ROYW1lczsKKworICAgIHR5
cGVkZWYgc3RkOjpsaXN0PFRTdHJpbmc+IFN0cnVjdERlY2xhcmF0aW9uczsKKyAgICBTdHJ1Y3RE
ZWNsYXJhdGlvbnMgbVN0cnVjdERlY2xhcmF0aW9uczsKKworICAgIHR5cGVkZWYgc3RkOjp2ZWN0
b3I8aW50PiBTY29wZUJyYWNrZXQ7CisgICAgU2NvcGVCcmFja2V0IG1TY29wZUJyYWNrZXQ7Cisg
ICAgdW5zaWduZWQgaW50IG1TY29wZURlcHRoOworCisgICAgaW50IG1VbmlxdWVJbmRleDsgICAv
LyBGb3IgY3JlYXRpbmcgdW5pcXVlIG5hbWVzCisKKyAgICBib29sIG1Db250YWluc0xvb3BEaXNj
b250aW51aXR5OworICAgIGJvb2wgbU91dHB1dExvZDBGdW5jdGlvbjsKKyAgICBib29sIG1JbnNp
ZGVEaXNjb250aW51b3VzTG9vcDsKKworICAgIFRJbnRlcm1TeW1ib2wgKm1FeGNlc3NpdmVMb29w
SW5kZXg7CisKKyAgICBpbnQgbVVuaWZvcm1SZWdpc3RlcjsKKyAgICBpbnQgbVNhbXBsZXJSZWdp
c3RlcjsKKworICAgIFRTdHJpbmcgcmVnaXN0ZXJTdHJpbmcoVEludGVybVN5bWJvbCAqb3BlcmFu
ZCk7CisgICAgaW50IHNhbXBsZXJSZWdpc3RlcihUSW50ZXJtU3ltYm9sICpzYW1wbGVyKTsKKyAg
ICBpbnQgdW5pZm9ybVJlZ2lzdGVyKFRJbnRlcm1TeW1ib2wgKnVuaWZvcm0pOworICAgIHZvaWQg
ZGVjbGFyZVVuaWZvcm0oY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IFRTdHJpbmcgJm5hbWUsIGlu
dCBpbmRleCk7CisgICAgc3RhdGljIEdMZW51bSBnbFZhcmlhYmxlVHlwZShjb25zdCBUVHlwZSAm
dHlwZSk7CisgICAgc3RhdGljIEdMZW51bSBnbFZhcmlhYmxlUHJlY2lzaW9uKGNvbnN0IFRUeXBl
ICZ0eXBlKTsKKworICAgIEFjdGl2ZVVuaWZvcm1zIG1BY3RpdmVVbmlmb3JtczsKK307Cit9CisK
KyNlbmRpZiAgIC8vIENPTVBJTEVSX09VVFBVVEhMU0xfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNv
bnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFhMWUwZDE0MGM1YTYxZWI4ZDZkZTIxZTE5NWY4NjM3MDBh
NGI4ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuY3BwCkBAIC0wLDAgKzEsMTYwMiBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250
ZXh0LmgiCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
cHJlcHJvY2Vzc29yL1NvdXJjZUxvY2F0aW9uLmgiCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8g
U3ViLSB2ZWN0b3IgYW5kIG1hdHJpeCBmaWVsZHMKKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8K
Ky8vIExvb2sgYXQgYSAnLicgZmllbGQgc2VsZWN0b3Igc3RyaW5nIGFuZCBjaGFuZ2UgaXQgaW50
byBvZmZzZXRzCisvLyBmb3IgYSB2ZWN0b3IuCisvLworYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJz
ZVZlY3RvckZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5nLCBpbnQgdmVjU2l6ZSwgVFZl
Y3RvckZpZWxkcyYgZmllbGRzLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQoreworICAgIGZpZWxk
cy5udW0gPSAoaW50KSBjb21wU3RyaW5nLnNpemUoKTsKKyAgICBpZiAoZmllbGRzLm51bSA+IDQp
IHsKKyAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgdmVjdG9yIGZpZWxkIHNlbGVjdGlvbiIs
IGNvbXBTdHJpbmcuY19zdHIoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBlbnVtIHsKKyAgICAgICAgZXh5encsCisgICAgICAgIGVyZ2JhLAorICAgICAgICBlc3RwcQor
ICAgIH0gZmllbGRTZXRbNF07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpZWxkcy5udW07
ICsraSkgeworICAgICAgICBzd2l0Y2ggKGNvbXBTdHJpbmdbaV0pICB7CisgICAgICAgIGNhc2Ug
J3gnOiAKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMDsKKyAgICAgICAgICAgIGZp
ZWxkU2V0W2ldID0gZXh5enc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAncic6
IAorICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAwOworICAgICAgICAgICAgZmllbGRT
ZXRbaV0gPSBlcmdiYTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdzJzoKKyAg
ICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMDsKKyAgICAgICAgICAgIGZpZWxkU2V0W2ld
ID0gZXN0cHE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAneSc6IAorICAgICAg
ICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAxOworICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBl
eHl6dzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdnJzogCisgICAgICAgICAg
ICBmaWVsZHMub2Zmc2V0c1tpXSA9IDE7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGVyZ2Jh
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3QnOgorICAgICAgICAgICAgZmll
bGRzLm9mZnNldHNbaV0gPSAxOworICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBlc3RwcTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICd6JzogCisgICAgICAgICAgICBmaWVsZHMu
b2Zmc2V0c1tpXSA9IDI7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGV4eXp3OworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2InOiAKKyAgICAgICAgICAgIGZpZWxkcy5vZmZz
ZXRzW2ldID0gMjsKKyAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXJnYmE7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSAncCc6CisgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tp
XSA9IDI7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGVzdHBxOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIAorICAgICAgICBjYXNlICd3JzogCisgICAgICAgICAgICBmaWVsZHMub2Zm
c2V0c1tpXSA9IDM7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGV4eXp3OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2EnOiAKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRz
W2ldID0gMzsKKyAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXJnYmE7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAncSc6CisgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9
IDM7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGVzdHBxOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCB2ZWN0
b3IgZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
ZmllbGRzLm51bTsgKytpKSB7CisgICAgICAgIGlmIChmaWVsZHMub2Zmc2V0c1tpXSA+PSB2ZWNT
aXplKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAidmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBv
dXQgb2YgcmFuZ2UiLCAgY29tcFN0cmluZy5jX3N0cigpKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpID4gMCkgeworICAgICAgICAgICAgaWYg
KGZpZWxkU2V0W2ldICE9IGZpZWxkU2V0W2ktMV0pIHsKKyAgICAgICAgICAgICAgICBlcnJvcihs
aW5lLCAiaWxsZWdhbCAtIHZlY3RvciBjb21wb25lbnQgZmllbGRzIG5vdCBmcm9tIHRoZSBzYW1l
IHNldCIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKKworLy8KKy8vIExvb2sgYXQgYSAnLicgZmllbGQgc2VsZWN0b3Igc3RyaW5nIGFuZCBjaGFu
Z2UgaXQgaW50byBvZmZzZXRzCisvLyBmb3IgYSBtYXRyaXguCisvLworYm9vbCBUUGFyc2VDb250
ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5nLCBpbnQgbWF0
U2l6ZSwgVE1hdHJpeEZpZWxkcyYgZmllbGRzLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQorewor
ICAgIGZpZWxkcy53aG9sZVJvdyA9IGZhbHNlOworICAgIGZpZWxkcy53aG9sZUNvbCA9IGZhbHNl
OworICAgIGZpZWxkcy5yb3cgPSAtMTsKKyAgICBmaWVsZHMuY29sID0gLTE7CisKKyAgICBpZiAo
Y29tcFN0cmluZy5zaXplKCkgIT0gMikgeworICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCBs
ZW5ndGggb2YgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoY29tcFN0cmluZ1swXSA9PSAn
XycpIHsKKyAgICAgICAgaWYgKGNvbXBTdHJpbmdbMV0gPCAnMCcgfHwgY29tcFN0cmluZ1sxXSA+
ICczJykgeworICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNl
bGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgZmllbGRzLndob2xlQ29sID0gdHJ1ZTsKKyAgICAgICAgZmll
bGRzLmNvbCA9IGNvbXBTdHJpbmdbMV0gLSAnMCc7CisgICAgfSBlbHNlIGlmIChjb21wU3RyaW5n
WzFdID09ICdfJykgeworICAgICAgICBpZiAoY29tcFN0cmluZ1swXSA8ICcwJyB8fCBjb21wU3Ry
aW5nWzBdID4gJzMnKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCBtYXRyaXgg
ZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBmaWVsZHMud2hvbGVSb3cgPSB0cnVlOworICAg
ICAgICBmaWVsZHMucm93ID0gY29tcFN0cmluZ1swXSAtICcwJzsKKyAgICB9IGVsc2UgeworICAg
ICAgICBpZiAoY29tcFN0cmluZ1swXSA8ICcwJyB8fCBjb21wU3RyaW5nWzBdID4gJzMnIHx8Cisg
ICAgICAgICAgICBjb21wU3RyaW5nWzFdIDwgJzAnIHx8IGNvbXBTdHJpbmdbMV0gPiAnMycpIHsK
KyAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24i
LCBjb21wU3RyaW5nLmNfc3RyKCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIGZpZWxkcy5yb3cgPSBjb21wU3RyaW5nWzBdIC0gJzAnOworICAgICAgICBm
aWVsZHMuY29sID0gY29tcFN0cmluZ1sxXSAtICcwJzsKKyAgICB9CisKKyAgICBpZiAoZmllbGRz
LnJvdyA+PSBtYXRTaXplIHx8IGZpZWxkcy5jb2wgPj0gbWF0U2l6ZSkgeworICAgICAgICBlcnJv
cihsaW5lLCAibWF0cml4IGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCBjb21wU3RyaW5n
LmNfc3RyKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gRXJyb3JzCisvLworLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCisKKy8vCisvLyBUcmFjayB3aGV0aGVyIGVycm9ycyBoYXZlIG9jY3VycmVkLgorLy8KK3Zv
aWQgVFBhcnNlQ29udGV4dDo6cmVjb3ZlcigpCit7Cit9CisKKy8vCisvLyBVc2VkIGJ5IGZsZXgv
Ymlzb24gdG8gb3V0cHV0IGFsbCBzeW50YXggYW5kIHBhcnNpbmcgZXJyb3JzLgorLy8KK3ZvaWQg
VFBhcnNlQ29udGV4dDo6ZXJyb3IoY29uc3QgVFNvdXJjZUxvYyYgbG9jLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXh0cmFJbmZvKQoreworICAgIHBw
OjpTb3VyY2VMb2NhdGlvbiBzcmNMb2M7CisgICAgc3JjTG9jLmZpbGUgPSBsb2MuZmlyc3RfZmls
ZTsKKyAgICBzcmNMb2MubGluZSA9IGxvYy5maXJzdF9saW5lOworICAgIGRpYWdub3N0aWNzLndy
aXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OlBQX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBzcmNMb2MsIHJlYXNvbiwgdG9rZW4sIGV4dHJhSW5mbyk7CisKK30KKwordm9pZCBUUGFy
c2VDb250ZXh0Ojp3YXJuaW5nKGNvbnN0IFRTb3VyY2VMb2MmIGxvYywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mbykgeworICAgIHBw
OjpTb3VyY2VMb2NhdGlvbiBzcmNMb2M7CisgICAgc3JjTG9jLmZpbGUgPSBsb2MuZmlyc3RfZmls
ZTsKKyAgICBzcmNMb2MubGluZSA9IGxvYy5maXJzdF9saW5lOworICAgIGRpYWdub3N0aWNzLndy
aXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OlBQX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNyY0xvYywgcmVhc29uLCB0b2tlbiwgZXh0cmFJbmZvKTsKK30KKwordm9pZCBUUGFy
c2VDb250ZXh0Ojp0cmFjZShjb25zdCBjaGFyKiBzdHIpCit7CisgICAgZGlhZ25vc3RpY3Mud3Jp
dGVEZWJ1ZyhzdHIpOworfQorCisvLworLy8gU2FtZSBlcnJvciBtZXNzYWdlIGZvciBhbGwgcGxh
Y2VzIGFzc2lnbm1lbnRzIGRvbid0IHdvcmsuCisvLwordm9pZCBUUGFyc2VDb250ZXh0Ojphc3Np
Z25FcnJvcihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVFN0cmluZyBs
ZWZ0LCBUU3RyaW5nIHJpZ2h0KQoreworICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0
cmVhbTsKKyAgICBleHRyYUluZm9TdHJlYW0gPDwgImNhbm5vdCBjb252ZXJ0IGZyb20gJyIgPDwg
cmlnaHQgPDwgIicgdG8gJyIgPDwgbGVmdCA8PCAiJyI7CisgICAgc3RkOjpzdHJpbmcgZXh0cmFJ
bmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgIGVycm9yKGxpbmUsICIiLCBvcCwgZXh0
cmFJbmZvLmNfc3RyKCkpOworfQorCisvLworLy8gU2FtZSBlcnJvciBtZXNzYWdlIGZvciBhbGwg
cGxhY2VzIHVuYXJ5IG9wZXJhdGlvbnMgZG9uJ3Qgd29yay4KKy8vCit2b2lkIFRQYXJzZUNvbnRl
eHQ6OnVuYXJ5T3BFcnJvcihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBjaGFyKiBvcCwg
VFN0cmluZyBvcGVyYW5kKQoreworICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVh
bTsKKyAgICBleHRyYUluZm9TdHJlYW0gPDwgIm5vIG9wZXJhdGlvbiAnIiA8PCBvcCA8PCAiJyBl
eGlzdHMgdGhhdCB0YWtlcyBhbiBvcGVyYW5kIG9mIHR5cGUgIiA8PCBvcGVyYW5kIAorICAgICAg
ICAgICAgICAgICAgICA8PCAiIChvciB0aGVyZSBpcyBubyBhY2NlcHRhYmxlIGNvbnZlcnNpb24p
IjsKKyAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7Cisg
ICAgZXJyb3IobGluZSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCBvcCwgZXh0cmFJbmZvLmNfc3Ry
KCkpOworfQorCisvLworLy8gU2FtZSBlcnJvciBtZXNzYWdlIGZvciBhbGwgYmluYXJ5IG9wZXJh
dGlvbnMgZG9uJ3Qgd29yay4KKy8vCit2b2lkIFRQYXJzZUNvbnRleHQ6OmJpbmFyeU9wRXJyb3Io
Y29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgbGVmdCwgVFN0
cmluZyByaWdodCkKK3sKKyAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07Cisg
ICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJubyBvcGVyYXRpb24gJyIgPDwgb3AgPDwgIicgZXhpc3Rz
IHRoYXQgdGFrZXMgYSBsZWZ0LWhhbmQgb3BlcmFuZCBvZiB0eXBlICciIDw8IGxlZnQgCisgICAg
ICAgICAgICAgICAgICAgIDw8ICInIGFuZCBhIHJpZ2h0IG9wZXJhbmQgb2YgdHlwZSAnIiA8PCBy
aWdodCA8PCAiJyAob3IgdGhlcmUgaXMgbm8gYWNjZXB0YWJsZSBjb252ZXJzaW9uKSI7CisgICAg
c3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgIGVycm9y
KGxpbmUsICIgd3Jvbmcgb3BlcmFuZCB0eXBlcyAiLCBvcCwgZXh0cmFJbmZvLmNfc3RyKCkpOyAK
K30KKworYm9vbCBUUGFyc2VDb250ZXh0OjpwcmVjaXNpb25FcnJvckNoZWNrKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxpbmUsIFRQcmVjaXNpb24gcHJlY2lzaW9uLCBUQmFzaWNUeXBlIHR5cGUpeworICAg
IGlmICghY2hlY2tzUHJlY2lzaW9uRXJyb3JzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
c3dpdGNoKCB0eXBlICl7CisgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgaWYoIHByZWNpc2lv
biA9PSBFYnBVbmRlZmluZWQgKXsKKyAgICAgICAgICAgIGVycm9yKCBsaW5lLCAiTm8gcHJlY2lz
aW9uIHNwZWNpZmllZCBmb3IgKGZsb2F0KSIsICIiICk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEVidEludDoKKyAgICAgICAg
aWYoIHByZWNpc2lvbiA9PSBFYnBVbmRlZmluZWQgKXsKKyAgICAgICAgICAgIGVycm9yKCBsaW5l
LCAiTm8gcHJlY2lzaW9uIHNwZWNpZmllZCAoaW50KSIsICIiICk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworLy8KKy8vIEJv
dGggdGVzdCBhbmQgaWYgbmVjZXNzYXJ5LCBzcGl0IG91dCBhbiBlcnJvciwgdG8gc2VlIGlmIHRo
ZSBub2RlIGlzIHJlYWxseQorLy8gYW4gbC12YWx1ZSB0aGF0IGNhbiBiZSBvcGVyYXRlZCBvbiB0
aGlzIHdheS4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHdhcyBhbiBlcnJvci4KKy8vCiti
b29sIFRQYXJzZUNvbnRleHQ6OmxWYWx1ZUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGlu
ZSwgY29uc3QgY2hhciogb3AsIFRJbnRlcm1UeXBlZCogbm9kZSkKK3sKKyAgICBUSW50ZXJtU3lt
Ym9sKiBzeW1Ob2RlID0gbm9kZS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgVEludGVybUJpbmFy
eSogYmluYXJ5Tm9kZSA9IG5vZGUtPmdldEFzQmluYXJ5Tm9kZSgpOworCisgICAgaWYgKGJpbmFy
eU5vZGUpIHsKKyAgICAgICAgYm9vbCBlcnJvclJldHVybjsKKworICAgICAgICBzd2l0Y2goYmlu
YXJ5Tm9kZS0+Z2V0T3AoKSkgeworICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0OgorICAgICAg
ICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6CisgICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1
Y3Q6CisgICAgICAgICAgICByZXR1cm4gbFZhbHVlRXJyb3JDaGVjayhsaW5lLCBvcCwgYmluYXJ5
Tm9kZS0+Z2V0TGVmdCgpKTsKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JTd2l6emxlOgorICAgICAg
ICAgICAgZXJyb3JSZXR1cm4gPSBsVmFsdWVFcnJvckNoZWNrKGxpbmUsIG9wLCBiaW5hcnlOb2Rl
LT5nZXRMZWZ0KCkpOworICAgICAgICAgICAgaWYgKCFlcnJvclJldHVybikgeworICAgICAgICAg
ICAgICAgIGludCBvZmZzZXRbNF0gPSB7MCwwLDAsMH07CisKKyAgICAgICAgICAgICAgICBUSW50
ZXJtVHlwZWQqIHJpZ2h0Tm9kZSA9IGJpbmFyeU5vZGUtPmdldFJpZ2h0KCk7CisgICAgICAgICAg
ICAgICAgVEludGVybUFnZ3JlZ2F0ZSAqYWdnck5vZGUgPSByaWdodE5vZGUtPmdldEFzQWdncmVn
YXRlKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yIChUSW50ZXJtU2Vx
dWVuY2U6Oml0ZXJhdG9yIHAgPSBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKS5iZWdpbigpOyAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCAhPSBhZ2dyTm9k
ZS0+Z2V0U2VxdWVuY2UoKS5lbmQoKTsgcCsrKSB7CisgICAgICAgICAgICAgICAgICAgIGludCB2
YWx1ZSA9ICgqcCktPmdldEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldElDb25z
dCgwKTsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0W3ZhbHVlXSsrOyAgICAgCisgICAgICAg
ICAgICAgICAgICAgIGlmIChvZmZzZXRbdmFsdWVdID4gMSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIG9mIHN3aXp6bGUgY2Fubm90IGhhdmUgZHVwbGlj
YXRlIGNvbXBvbmVudHMiLCBvcCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfSAKKworICAgICAgICAgICAgcmV0dXJuIGVycm9yUmV0dXJuOworICAgICAgICBkZWZhdWx0
OiAKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVycm9yKGxpbmUsICIg
bC12YWx1ZSByZXF1aXJlZCIsIG9wKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KworICAgIGNvbnN0IGNoYXIqIHN5bWJvbCA9IDA7CisgICAgaWYgKHN5bU5vZGUgIT0gMCkKKyAg
ICAgICAgc3ltYm9sID0gc3ltTm9kZS0+Z2V0U3ltYm9sKCkuY19zdHIoKTsKKworICAgIGNvbnN0
IGNoYXIqIG1lc3NhZ2UgPSAwOworICAgIHN3aXRjaCAobm9kZS0+Z2V0UXVhbGlmaWVyKCkpIHsK
KyAgICBjYXNlIEV2cUNvbnN0OiAgICAgICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhIGNv
bnN0IjsgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxQ29uc3RSZWFkT25seTogIG1lc3NhZ2Ug
PSAiY2FuJ3QgbW9kaWZ5IGEgY29uc3QiOyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFBdHRy
aWJ1dGU6ICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYW4gYXR0cmlidXRlIjsgICBicmVh
azsKKyAgICBjYXNlIEV2cVVuaWZvcm06ICAgICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBh
IHVuaWZvcm0iOyAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxVmFyeWluZ0luOiAgICAgIG1lc3Nh
Z2UgPSAiY2FuJ3QgbW9kaWZ5IGEgdmFyeWluZyI7ICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFG
cmFnQ29vcmQ6ICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgZ2xfRnJhZ0Nvb3JkIjsgICBi
cmVhazsKKyAgICBjYXNlIEV2cUZyb250RmFjaW5nOiAgICBtZXNzYWdlID0gImNhbid0IG1vZGlm
eSBnbF9Gcm9udEZhY2luZyI7IGJyZWFrOworICAgIGNhc2UgRXZxUG9pbnRDb29yZDogICAgIG1l
c3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGdsX1BvaW50Q29vcmQiOyAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKworICAgICAgICAvLworICAgICAgICAvLyBUeXBlIHRoYXQgY2FuJ3QgYmUgd3JpdHRlbiB0
bz8KKyAgICAgICAgLy8KKyAgICAgICAgc3dpdGNoIChub2RlLT5nZXRCYXNpY1R5cGUoKSkgewor
ICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToK
KyAgICAgICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgc2FtcGxlciI7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFYnRWb2lkOgorICAgICAgICAgICAgbWVzc2FnZSA9
ICJjYW4ndCBtb2RpZnkgdm9pZCI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDogCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtZXNz
YWdlID09IDAgJiYgYmluYXJ5Tm9kZSA9PSAwICYmIHN5bU5vZGUgPT0gMCkgeworICAgICAgICBl
cnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCk7CisKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisKKyAgICAvLworICAgIC8vIEV2ZXJ5dGhpbmcgZWxzZSBpcyBva2F5LCBu
byBlcnJvci4KKyAgICAvLworICAgIGlmIChtZXNzYWdlID09IDApCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIC8vCisgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHdlIGhhdmUgYW4gZXJyb3Ig
YW5kIGEgbWVzc2FnZS4KKyAgICAvLworICAgIGlmIChzeW1Ob2RlKSB7CisgICAgICAgIHN0ZDo6
c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8
ICJcIiIgPDwgc3ltYm9sIDw8ICJcIiAoIiA8PCBtZXNzYWdlIDw8ICIpIjsKKyAgICAgICAgc3Rk
OjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICBlcnJv
cihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCwgZXh0cmFJbmZvLmNfc3RyKCkpOworICAg
IH0KKyAgICBlbHNlIHsKKyAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFt
OworICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgIigiIDw8IG1lc3NhZ2UgPDwgIikiOworICAg
ICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAg
ICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wLCBleHRyYUluZm8uY19zdHIo
KSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vCisvLyBCb3RoIHRlc3QsIGFu
ZCBpZiBuZWNlc3Nhcnkgc3BpdCBvdXQgYW4gZXJyb3IsIHRvIHNlZSBpZiB0aGUgbm9kZSBpcyBy
ZWFsbHkKKy8vIGEgY29uc3RhbnQuCisvLworLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB3YXMgYW4g
ZXJyb3IuCisvLworYm9vbCBUUGFyc2VDb250ZXh0Ojpjb25zdEVycm9yQ2hlY2soVEludGVybVR5
cGVkKiBub2RlKQoreworICAgIGlmIChub2RlLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiY29u
c3RhbnQgZXhwcmVzc2lvbiByZXF1aXJlZCIsICIiKTsKKworICAgIHJldHVybiB0cnVlOworfQor
CisvLworLy8gQm90aCB0ZXN0LCBhbmQgaWYgbmVjZXNzYXJ5IHNwaXQgb3V0IGFuIGVycm9yLCB0
byBzZWUgaWYgdGhlIG5vZGUgaXMgcmVhbGx5CisvLyBhbiBpbnRlZ2VyLgorLy8KKy8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgd2FzIGFuIGVycm9yLgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6aW50
ZWdlckVycm9yQ2hlY2soVEludGVybVR5cGVkKiBub2RlLCBjb25zdCBjaGFyKiB0b2tlbikKK3sK
KyAgICBpZiAobm9kZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIG5vZGUtPmdldE5vbWlu
YWxTaXplKCkgPT0gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZXJyb3Iobm9kZS0+
Z2V0TGluZSgpLCAiaW50ZWdlciBleHByZXNzaW9uIHJlcXVpcmVkIiwgdG9rZW4pOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKKy8vCisvLyBCb3RoIHRlc3QsIGFuZCBpZiBuZWNlc3Nhcnkgc3Bp
dCBvdXQgYW4gZXJyb3IsIHRvIHNlZSBpZiB3ZSBhcmUgY3VycmVudGx5CisvLyBnbG9iYWxseSBz
Y29wZWQuCisvLworLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB3YXMgYW4gZXJyb3IuCisvLworYm9v
bCBUUGFyc2VDb250ZXh0OjpnbG9iYWxFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUs
IGJvb2wgZ2xvYmFsLCBjb25zdCBjaGFyKiB0b2tlbikKK3sKKyAgICBpZiAoZ2xvYmFsKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBlcnJvcihsaW5lLCAib25seSBhbGxvd2VkIGF0IGds
b2JhbCBzY29wZSIsIHRva2VuKTsKKworICAgIHJldHVybiB0cnVlOworfQorCisvLworLy8gRm9y
IG5vdywga2VlcCBpdCBzaW1wbGU6ICBpZiBpdCBzdGFydHMgImdsXyIsIGl0J3MgcmVzZXJ2ZWQs
IGluZGVwZW5kZW50CisvLyBvZiBzY29wZS4gIEV4Y2VwdCwgaWYgdGhlIHN5bWJvbCB0YWJsZSBp
cyBhdCB0aGUgYnVpbHQtaW4gcHVzaC1sZXZlbCwKKy8vIHdoaWNoIGlzIHdoZW4gd2UgYXJlIHBh
cnNpbmcgYnVpbHQtaW5zLgorLy8gQWxzbyBjaGVja3MgZm9yICJ3ZWJnbF8iIGFuZCAiX3dlYmds
XyIgcmVzZXJ2ZWQgaWRlbnRpZmllcnMgaWYgcGFyc2luZyBhCisvLyB3ZWJnbCBzaGFkZXIuCisv
LworLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KKy8vCitib29sIFRQYXJz
ZUNvbnRleHQ6OnJlc2VydmVkRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25z
dCBUU3RyaW5nJiBpZGVudGlmaWVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiByZXNlcnZl
ZEVyck1zZyA9ICJyZXNlcnZlZCBidWlsdC1pbiBuYW1lIjsKKyAgICBpZiAoIXN5bWJvbFRhYmxl
LmF0QnVpbHRJbkxldmVsKCkpIHsKKyAgICAgICAgaWYgKGlkZW50aWZpZXIuY29tcGFyZSgwLCAz
LCAiZ2xfIikgPT0gMCkgeworICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2cs
ICJnbF8iKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlm
IChpc1dlYkdMQmFzZWRTcGVjKHNoYWRlclNwZWMpKSB7CisgICAgICAgICAgICBpZiAoaWRlbnRp
Zmllci5jb21wYXJlKDAsIDYsICJ3ZWJnbF8iKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgZXJy
b3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJ3ZWJnbF8iKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmNvbXBh
cmUoMCwgNywgIl93ZWJnbF8iKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgZXJyb3IobGluZSwg
cmVzZXJ2ZWRFcnJNc2csICJfd2ViZ2xfIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2hhZGVyU3BlYyA9PSBTSF9DU1NfU0hB
REVSU19TUEVDICYmIGlkZW50aWZpZXIuY29tcGFyZSgwLCA0LCAiY3NzXyIpID09IDApIHsKKyAg
ICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgImNzc18iKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBpZiAoaWRlbnRpZmllci5maW5kKCJfXyIpICE9IFRTdHJpbmc6Om5wb3MpIHsKKyAgICAgICAg
ICAgIGVycm9yKGxpbmUsICJpZGVudGlmaWVycyBjb250YWluaW5nIHR3byBjb25zZWN1dGl2ZSB1
bmRlcnNjb3JlcyAoX18pIGFyZSByZXNlcnZlZCBhcyBwb3NzaWJsZSBmdXR1cmUga2V5d29yZHMi
LCBpZGVudGlmaWVyLmNfc3RyKCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vCisvLyBNYWtlIHN1cmUgdGhl
cmUgaXMgZW5vdWdoIGRhdGEgcHJvdmlkZWQgdG8gdGhlIGNvbnN0cnVjdG9yIHRvIGJ1aWxkCisv
LyBzb21ldGhpbmcgb2YgdGhlIHR5cGUgb2YgdGhlIGNvbnN0cnVjdG9yLiAgQWxzbyByZXR1cm5z
IHRoZSB0eXBlIG9mCisvLyB0aGUgY29uc3RydWN0b3IuCisvLworLy8gUmV0dXJucyB0cnVlIGlm
IHRoZXJlIHdhcyBhbiBlcnJvciBpbiBjb25zdHJ1Y3Rpb24uCisvLworYm9vbCBUUGFyc2VDb250
ZXh0Ojpjb25zdHJ1Y3RvckVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVEludGVy
bU5vZGUqIG5vZGUsIFRGdW5jdGlvbiYgZnVuY3Rpb24sIFRPcGVyYXRvciBvcCwgVFR5cGUqIHR5
cGUpCit7CisgICAgKnR5cGUgPSBmdW5jdGlvbi5nZXRSZXR1cm5UeXBlKCk7CisKKyAgICBib29s
IGNvbnN0cnVjdGluZ01hdHJpeCA9IGZhbHNlOworICAgIHN3aXRjaChvcCkgeworICAgIGNhc2Ug
RU9wQ29uc3RydWN0TWF0MjoKKyAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6CisgICAgY2FzZSBF
T3BDb25zdHJ1Y3RNYXQ0OgorICAgICAgICBjb25zdHJ1Y3RpbmdNYXRyaXggPSB0cnVlOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OiAKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
Ly8KKyAgICAvLyBOb3RlOiBJdCdzIG9rYXkgdG8gaGF2ZSB0b28gbWFueSBjb21wb25lbnRzIGF2
YWlsYWJsZSwgYnV0IG5vdCBva2F5IHRvIGhhdmUgdW51c2VkCisgICAgLy8gYXJndW1lbnRzLiAg
J2Z1bGwnIHdpbGwgZ28gdG8gdHJ1ZSB3aGVuIGVub3VnaCBhcmdzIGhhdmUgYmVlbiBzZWVuLiAg
SWYgd2UgbG9vcAorICAgIC8vIGFnYWluLCB0aGVyZSBpcyBhbiBleHRyYSBhcmd1bWVudCwgc28g
J292ZXJmdWxsJyB3aWxsIGJlY29tZSB0cnVlLgorICAgIC8vCisKKyAgICBzaXplX3Qgc2l6ZSA9
IDA7CisgICAgYm9vbCBjb25zdFR5cGUgPSB0cnVlOworICAgIGJvb2wgZnVsbCA9IGZhbHNlOwor
ICAgIGJvb2wgb3ZlckZ1bGwgPSBmYWxzZTsKKyAgICBib29sIG1hdHJpeEluTWF0cml4ID0gZmFs
c2U7CisgICAgYm9vbCBhcnJheUFyZyA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgVFBhcmFt
ZXRlciYgcGFyYW0gPSBmdW5jdGlvbi5nZXRQYXJhbShpKTsKKyAgICAgICAgc2l6ZSArPSBwYXJh
bS50eXBlLT5nZXRPYmplY3RTaXplKCk7CisgICAgICAgIAorICAgICAgICBpZiAoY29uc3RydWN0
aW5nTWF0cml4ICYmIHBhcmFtLnR5cGUtPmlzTWF0cml4KCkpCisgICAgICAgICAgICBtYXRyaXhJ
bk1hdHJpeCA9IHRydWU7CisgICAgICAgIGlmIChmdWxsKQorICAgICAgICAgICAgb3ZlckZ1bGwg
PSB0cnVlOworICAgICAgICBpZiAob3AgIT0gRU9wQ29uc3RydWN0U3RydWN0ICYmICF0eXBlLT5p
c0FycmF5KCkgJiYgc2l6ZSA+PSB0eXBlLT5nZXRPYmplY3RTaXplKCkpCisgICAgICAgICAgICBm
dWxsID0gdHJ1ZTsKKyAgICAgICAgaWYgKHBhcmFtLnR5cGUtPmdldFF1YWxpZmllcigpICE9IEV2
cUNvbnN0KQorICAgICAgICAgICAgY29uc3RUeXBlID0gZmFsc2U7CisgICAgICAgIGlmIChwYXJh
bS50eXBlLT5pc0FycmF5KCkpCisgICAgICAgICAgICBhcnJheUFyZyA9IHRydWU7CisgICAgfQor
ICAgIAorICAgIGlmIChjb25zdFR5cGUpCisgICAgICAgIHR5cGUtPnNldFF1YWxpZmllcihFdnFD
b25zdCk7CisKKyAgICBpZiAodHlwZS0+aXNBcnJheSgpICYmIHN0YXRpY19jYXN0PHNpemVfdD4o
dHlwZS0+Z2V0QXJyYXlTaXplKCkpICE9IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKSkgeworICAg
ICAgICBlcnJvcihsaW5lLCAiYXJyYXkgY29uc3RydWN0b3IgbmVlZHMgb25lIGFyZ3VtZW50IHBl
ciBhcnJheSBlbGVtZW50IiwgImNvbnN0cnVjdG9yIik7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIGlmIChhcnJheUFyZyAmJiBvcCAhPSBFT3BDb25zdHJ1Y3RTdHJ1Y3QpIHsK
KyAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBmcm9tIGEgbm9uLWRlcmVmZXJlbmNl
ZCBhcnJheSIsICJjb25zdHJ1Y3RvciIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBpZiAobWF0cml4SW5NYXRyaXggJiYgIXR5cGUtPmlzQXJyYXkoKSkgeworICAgICAgICBp
ZiAoZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpICE9IDEpIHsKKyAgICAgICAgICBlcnJvcihsaW5l
LCAiY29uc3RydWN0aW5nIG1hdHJpeCBmcm9tIG1hdHJpeCBjYW4gb25seSB0YWtlIG9uZSBhcmd1
bWVudCIsICJjb25zdHJ1Y3RvciIpOworICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgfQorCisgICAgaWYgKG92ZXJGdWxsKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJ0b28g
bWFueSBhcmd1bWVudHMiLCAiY29uc3RydWN0b3IiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIAorICAgIGlmIChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QgJiYgIXR5cGUtPmlz
QXJyYXkoKSAmJiB0eXBlLT5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCkuc2l6ZSgpICE9IGZ1bmN0aW9u
LmdldFBhcmFtQ291bnQoKSkgeworICAgICAgICBlcnJvcihsaW5lLCAiTnVtYmVyIG9mIGNvbnN0
cnVjdG9yIHBhcmFtZXRlcnMgZG9lcyBub3QgbWF0Y2ggdGhlIG51bWJlciBvZiBzdHJ1Y3R1cmUg
ZmllbGRzIiwgImNvbnN0cnVjdG9yIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIGlmICghdHlwZS0+aXNNYXRyaXgoKSB8fCAhbWF0cml4SW5NYXRyaXgpIHsKKyAgICAgICAg
aWYgKChvcCAhPSBFT3BDb25zdHJ1Y3RTdHJ1Y3QgJiYgc2l6ZSAhPSAxICYmIHNpemUgPCB0eXBl
LT5nZXRPYmplY3RTaXplKCkpIHx8CisgICAgICAgICAgICAob3AgPT0gRU9wQ29uc3RydWN0U3Ry
dWN0ICYmIHNpemUgPCB0eXBlLT5nZXRPYmplY3RTaXplKCkpKSB7CisgICAgICAgICAgICBlcnJv
cihsaW5lLCAibm90IGVub3VnaCBkYXRhIHByb3ZpZGVkIGZvciBjb25zdHJ1Y3Rpb24iLCAiY29u
c3RydWN0b3IiKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQor
CisgICAgVEludGVybVR5cGVkICp0eXBlZCA9IG5vZGUgPyBub2RlLT5nZXRBc1R5cGVkKCkgOiAw
OworICAgIGlmICh0eXBlZCA9PSAwKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3Rv
ciBhcmd1bWVudCBkb2VzIG5vdCBoYXZlIGEgdHlwZSIsICJjb25zdHJ1Y3RvciIpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKG9wICE9IEVPcENvbnN0cnVjdFN0cnVjdCAm
JiBJc1NhbXBsZXIodHlwZWQtPmdldEJhc2ljVHlwZSgpKSkgeworICAgICAgICBlcnJvcihsaW5l
LCAiY2Fubm90IGNvbnZlcnQgYSBzYW1wbGVyIiwgImNvbnN0cnVjdG9yIik7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICBpZiAodHlwZWQtPmdldEJhc2ljVHlwZSgpID09IEVidFZv
aWQpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBjb252ZXJ0IGEgdm9pZCIsICJjb25z
dHJ1Y3RvciIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRvIHNlZSBpZiBhIHZvaWQgdmFyaWFi
bGUgaGFzIGJlZW4gZGVjbGFyZWQgYW5kIHJhaXNlIGFuIGVycm9yIG1lc3NhZ2UgZm9yIHN1Y2gg
YSBjYXNlCisvLworLy8gcmV0dXJucyB0cnVlIGluIGNhc2Ugb2YgYW4gZXJyb3IKKy8vCitib29s
IFRQYXJzZUNvbnRleHQ6OnZvaWRFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNv
bnN0IFRTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IFRQdWJsaWNUeXBlJiBwdWJUeXBlKQorewor
ICAgIGlmIChwdWJUeXBlLnR5cGUgPT0gRWJ0Vm9pZCkgeworICAgICAgICBlcnJvcihsaW5lLCAi
aWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9pZCciLCBpZGVudGlmaWVyLmNfc3RyKCkpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9IAorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBUaGlz
IGZ1bmN0aW9uIGNoZWNrcyB0byBzZWUgaWYgdGhlIG5vZGUgKGZvciB0aGUgZXhwcmVzc2lvbikg
Y29udGFpbnMgYSBzY2FsYXIgYm9vbGVhbiBleHByZXNzaW9uIG9yIG5vdAorLy8KKy8vIHJldHVy
bnMgdHJ1ZSBpbiBjYXNlIG9mIGFuIGVycm9yCisvLworYm9vbCBUUGFyc2VDb250ZXh0Ojpib29s
RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUSW50ZXJtVHlwZWQqIHR5
cGUpCit7CisgICAgaWYgKHR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVidEJvb2wgfHwgdHlwZS0+
aXNBcnJheSgpIHx8IHR5cGUtPmlzTWF0cml4KCkgfHwgdHlwZS0+aXNWZWN0b3IoKSkgeworICAg
ICAgICBlcnJvcihsaW5lLCAiYm9vbGVhbiBleHByZXNzaW9uIGV4cGVjdGVkIiwgIiIpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IAorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBU
aGlzIGZ1bmN0aW9uIGNoZWNrcyB0byBzZWUgaWYgdGhlIG5vZGUgKGZvciB0aGUgZXhwcmVzc2lv
bikgY29udGFpbnMgYSBzY2FsYXIgYm9vbGVhbiBleHByZXNzaW9uIG9yIG5vdAorLy8KKy8vIHJl
dHVybnMgdHJ1ZSBpbiBjYXNlIG9mIGFuIGVycm9yCisvLworYm9vbCBUUGFyc2VDb250ZXh0Ojpi
b29sRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYg
cFR5cGUpCit7CisgICAgaWYgKHBUeXBlLnR5cGUgIT0gRWJ0Qm9vbCB8fCBwVHlwZS5hcnJheSB8
fCBwVHlwZS5tYXRyaXggfHwgKHBUeXBlLnNpemUgPiAxKSkgeworICAgICAgICBlcnJvcihsaW5l
LCAiYm9vbGVhbiBleHByZXNzaW9uIGV4cGVjdGVkIiwgIiIpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9IAorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRQYXJzZUNvbnRleHQ6
OnNhbXBsZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRQdWJsaWNU
eXBlJiBwVHlwZSwgY29uc3QgY2hhciogcmVhc29uKQoreworICAgIGlmIChwVHlwZS50eXBlID09
IEVidFN0cnVjdCkgeworICAgICAgICBpZiAoY29udGFpbnNTYW1wbGVyKCpwVHlwZS51c2VyRGVm
KSkgeworICAgICAgICAgICAgZXJyb3IobGluZSwgcmVhc29uLCBnZXRCYXNpY1N0cmluZyhwVHlw
ZS50eXBlKSwgIihzdHJ1Y3R1cmUgY29udGFpbnMgYSBzYW1wbGVyKSIpOworICAgICAgICAKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfSBlbHNlIGlmIChJc1NhbXBsZXIocFR5cGUudHlwZSkpIHsKKyAgICAg
ICAgZXJyb3IobGluZSwgcmVhc29uLCBnZXRCYXNpY1N0cmluZyhwVHlwZS50eXBlKSk7CisKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFRQYXJzZUNvbnRleHQ6OnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxv
YyYgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlKQoreworICAgIGlmICgocFR5cGUucXVh
bGlmaWVyID09IEV2cVZhcnlpbmdJbiB8fCBwVHlwZS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091
dCB8fCBwVHlwZS5xdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlKSAmJgorICAgICAgICBwVHlwZS50
eXBlID09IEVidFN0cnVjdCkgeworICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGJlIHVzZWQg
d2l0aCBhIHN0cnVjdHVyZSIsIGdldFF1YWxpZmllclN0cmluZyhwVHlwZS5xdWFsaWZpZXIpKTsK
KyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChwVHlwZS5x
dWFsaWZpZXIgIT0gRXZxVW5pZm9ybSAmJiBzYW1wbGVyRXJyb3JDaGVjayhsaW5lLCBwVHlwZSwg
InNhbXBsZXJzIG11c3QgYmUgdW5pZm9ybSIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJhbWV0ZXJTYW1wbGVy
RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUXVhbGlmaWVyIHF1YWxpZmllciwg
Y29uc3QgVFR5cGUmIHR5cGUpCit7CisgICAgaWYgKChxdWFsaWZpZXIgPT0gRXZxT3V0IHx8IHF1
YWxpZmllciA9PSBFdnFJbk91dCkgJiYgCisgICAgICAgICAgICAgdHlwZS5nZXRCYXNpY1R5cGUo
KSAhPSBFYnRTdHJ1Y3QgJiYgSXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKSB7CisgICAg
ICAgIGVycm9yKGxpbmUsICJzYW1wbGVycyBjYW5ub3QgYmUgb3V0cHV0IHBhcmFtZXRlcnMiLCB0
eXBlLmdldEJhc2ljU3RyaW5nKCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVFBhcnNlQ29udGV4dDo6Y29udGFpbnNTYW1wbGVy
KFRUeXBlJiB0eXBlKQoreworICAgIGlmIChJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0g
RWJ0U3RydWN0KSB7CisgICAgICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9IHR5cGUuZ2V0
U3RydWN0KCktPmZpZWxkcygpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IGZpZWxkcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGNvbnRhaW5zU2FtcGxlcigq
ZmllbGRzW2ldLT50eXBlKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLworLy8gRG8gc2l6ZSBjaGVj
a2luZyBmb3IgYW4gYXJyYXkgdHlwZSdzIHNpemUuCisvLworLy8gUmV0dXJucyB0cnVlIGlmIHRo
ZXJlIHdhcyBhbiBlcnJvci4KKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5U2l6ZUVycm9y
Q2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVEludGVybVR5cGVkKiBleHByLCBpbnQmIHNp
emUpCit7CisgICAgVEludGVybUNvbnN0YW50VW5pb24qIGNvbnN0YW50ID0gZXhwci0+Z2V0QXND
b25zdGFudFVuaW9uKCk7CisgICAgaWYgKGNvbnN0YW50ID09IDAgfHwgY29uc3RhbnQtPmdldEJh
c2ljVHlwZSgpICE9IEVidEludCkgeworICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBt
dXN0IGJlIGEgY29uc3RhbnQgaW50ZWdlciBleHByZXNzaW9uIiwgIiIpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzaXplID0gY29uc3RhbnQtPmdldElDb25zdCgwKTsKKwor
ICAgIGlmIChzaXplIDw9IDApIHsKKyAgICAgICAgZXJyb3IobGluZSwgImFycmF5IHNpemUgbXVz
dCBiZSBhIHBvc2l0aXZlIGludGVnZXIiLCAiIik7CisgICAgICAgIHNpemUgPSAxOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vCisvLyBT
ZWUgaWYgdGhpcyBxdWFsaWZpZXIgY2FuIGJlIGFuIGFycmF5LgorLy8KKy8vIFJldHVybnMgdHJ1
ZSBpZiB0aGVyZSBpcyBhbiBlcnJvci4KKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5UXVh
bGlmaWVyRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUHVibGljVHlwZSB0eXBl
KQoreworICAgIGlmICgodHlwZS5xdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlKSB8fCAodHlwZS5x
dWFsaWZpZXIgPT0gRXZxQ29uc3QpKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgZGVj
bGFyZSBhcnJheXMgb2YgdGhpcyBxdWFsaWZpZXIiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0
cmluZygpLmNfc3RyKCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKKy8vCisvLyBTZWUgaWYgdGhpcyB0eXBlIGNhbiBiZSBhbiBhcnJheS4K
Ky8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYW4gZXJyb3IuCisvLworYm9vbCBUUGFy
c2VDb250ZXh0OjphcnJheVR5cGVFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRQ
dWJsaWNUeXBlIHR5cGUpCit7CisgICAgLy8KKyAgICAvLyBDYW4gdGhlIHR5cGUgYmUgYW4gYXJy
YXk/CisgICAgLy8KKyAgICBpZiAodHlwZS5hcnJheSkgeworICAgICAgICBlcnJvcihsaW5lLCAi
Y2Fubm90IGRlY2xhcmUgYXJyYXlzIG9mIGFycmF5cyIsIFRUeXBlKHR5cGUpLmdldENvbXBsZXRl
U3RyaW5nKCkuY19zdHIoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworLy8KKy8vIERvIGFsbCB0aGUgc2VtYW50aWMgY2hlY2tpbmcgZm9y
IGRlY2xhcmluZyBhbiBhcnJheSwgd2l0aCBhbmQgCisvLyB3aXRob3V0IGEgc2l6ZSwgYW5kIG1h
a2UgdGhlIHJpZ2h0IGNoYW5nZXMgdG8gdGhlIHN5bWJvbCB0YWJsZS4KKy8vCisvLyBzaXplID09
IDAgbWVhbnMgbm8gc3BlY2lmaWVkIHNpemUuCisvLworLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJl
IHdhcyBhbiBlcnJvci4KKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5RXJyb3JDaGVjayhj
b25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSB0
eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSkKK3sKKyAgICAvLworICAgIC8vIERvbid0IGNoZWNr
IGZvciByZXNlcnZlZCB3b3JkIHVzZSB1bnRpbCBhZnRlciB3ZSBrbm93IGl0J3Mgbm90IGluIHRo
ZSBzeW1ib2wgdGFibGUsCisgICAgLy8gYmVjYXVzZSByZXNlcnZlZCBhcnJheXMgY2FuIGJlIHJl
ZGVjbGFyZWQuCisgICAgLy8KKworICAgIGJvb2wgYnVpbHRJbiA9IGZhbHNlOyAKKyAgICBib29s
IHNhbWVTY29wZSA9IGZhbHNlOworICAgIFRTeW1ib2wqIHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZp
bmQoaWRlbnRpZmllciwgJmJ1aWx0SW4sICZzYW1lU2NvcGUpOworICAgIGlmIChzeW1ib2wgPT0g
MCB8fCAhc2FtZVNjb3BlKSB7CisgICAgICAgIGlmIChyZXNlcnZlZEVycm9yQ2hlY2sobGluZSwg
aWRlbnRpZmllcikpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgICAg
IHZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgmaWRlbnRpZmllciwgVFR5cGUodHlwZSkpOworCisg
ICAgICAgIGlmICh0eXBlLmFycmF5U2l6ZSkKKyAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBl
KCkuc2V0QXJyYXlTaXplKHR5cGUuYXJyYXlTaXplKTsKKworICAgICAgICBpZiAoISBzeW1ib2xU
YWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgeworICAgICAgICAgICAgZGVsZXRlIHZhcmlhYmxlOwor
ICAgICAgICAgICAgZXJyb3IobGluZSwgIklOVEVSTkFMIEVSUk9SIGluc2VydGluZyBuZXcgc3lt
Ym9sIiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCEgc3ltYm9sLT5pc1ZhcmlhYmxlKCkp
IHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIsIGlkZW50aWZp
ZXIuY19zdHIoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4oc3ltYm9sKTsKKyAgICAgICAg
aWYgKCEgdmFyaWFibGUtPmdldFR5cGUoKS5pc0FycmF5KCkpIHsKKyAgICAgICAgICAgIGVycm9y
KGxpbmUsICJyZWRlY2xhcmluZyBub24tYXJyYXkgYXMgYXJyYXkiLCBpZGVudGlmaWVyLmNfc3Ry
KCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZh
cmlhYmxlLT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkgPiAwKSB7CisgICAgICAgICAgICBlcnJv
cihsaW5lLCAicmVkZWNsYXJhdGlvbiBvZiBhcnJheSB3aXRoIHNpemUiLCBpZGVudGlmaWVyLmNf
c3RyKCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmICghIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2FtZUVsZW1lbnRUeXBlKFRUeXBlKHR5
cGUpKSkgeworICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyYXRpb24gb2YgYXJyYXkg
d2l0aCBhIGRpZmZlcmVudCB0eXBlIiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHR5cGUuYXJyYXlTaXplKQor
ICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5zZXRBcnJheVNpemUodHlwZS5hcnJheVNp
emUpOworICAgIH0gCisKKyAgICBpZiAodm9pZEVycm9yQ2hlY2sobGluZSwgaWRlbnRpZmllciwg
dHlwZSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCisv
LworLy8gRW5mb3JjZSBub24taW5pdGlhbGl6ZXIgdHlwZS9xdWFsaWZpZXIgcnVsZXMuCisvLwor
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KKy8vCitib29sIFRQYXJzZUNv
bnRleHQ6Om5vbkluaXRDb25zdEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFN0
cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHR5cGUsIGJvb2wgYXJyYXkpCit7CisgICAg
aWYgKHR5cGUucXVhbGlmaWVyID09IEV2cUNvbnN0KQorICAgIHsKKyAgICAgICAgLy8gTWFrZSB0
aGUgcXVhbGlmaWVyIG1ha2Ugc2Vuc2UuCisgICAgICAgIHR5cGUucXVhbGlmaWVyID0gRXZxVGVt
cG9yYXJ5OworICAgICAgICAKKyAgICAgICAgaWYgKGFycmF5KQorICAgICAgICB7CisgICAgICAg
ICAgICBlcnJvcihsaW5lLCAiYXJyYXlzIG1heSBub3QgYmUgZGVjbGFyZWQgY29uc3RhbnQgc2lu
Y2UgdGhleSBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQiLCBpZGVudGlmaWVyLmNfc3RyKCkpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKHR5cGUuaXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlz
KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJzdHJ1Y3R1cmVzIGNvbnRh
aW5pbmcgYXJyYXlzIG1heSBub3QgYmUgZGVjbGFyZWQgY29uc3RhbnQgc2luY2UgdGhleSBjYW5u
b3QgYmUgaW5pdGlhbGl6ZWQiLCBpZGVudGlmaWVyLmNfc3RyKCkpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IobGluZSwgInZhcmlhYmxlcyB3
aXRoIHF1YWxpZmllciAnY29uc3QnIG11c3QgYmUgaW5pdGlhbGl6ZWQiLCBpZGVudGlmaWVyLmNf
c3RyKCkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
cmV0dXJuIGZhbHNlOworfQorCisvLworLy8gRG8gc2VtYW50aWMgY2hlY2tpbmcgZm9yIGEgdmFy
aWFibGUgZGVjbGFyYXRpb24gdGhhdCBoYXMgbm8gaW5pdGlhbGl6ZXIsCisvLyBhbmQgdXBkYXRl
IHRoZSBzeW1ib2wgdGFibGUuCisvLworLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdhcyBhbiBl
cnJvci4KKy8vCitib29sIFRQYXJzZUNvbnRleHQ6Om5vbkluaXRFcnJvckNoZWNrKGNvbnN0IFRT
b3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBU
VmFyaWFibGUqJiB2YXJpYWJsZSkKK3sKKyAgICBpZiAocmVzZXJ2ZWRFcnJvckNoZWNrKGxpbmUs
IGlkZW50aWZpZXIpKQorICAgICAgICByZWNvdmVyKCk7CisKKyAgICB2YXJpYWJsZSA9IG5ldyBU
VmFyaWFibGUoJmlkZW50aWZpZXIsIFRUeXBlKHR5cGUpKTsKKworICAgIGlmICghIHN5bWJvbFRh
YmxlLmluc2VydCgqdmFyaWFibGUpKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRp
b24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOworICAgICAgICBkZWxldGUgdmFyaWFi
bGU7CisgICAgICAgIHZhcmlhYmxlID0gMDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgaWYgKHZvaWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIsIHR5cGUpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUUGFyc2VDb250
ZXh0OjpwYXJhbUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFF1YWxpZmllciBx
dWFsaWZpZXIsIFRRdWFsaWZpZXIgcGFyYW1RdWFsaWZpZXIsIFRUeXBlKiB0eXBlKQoreyAgICAK
KyAgICBpZiAocXVhbGlmaWVyICE9IEV2cUNvbnN0ICYmIHF1YWxpZmllciAhPSBFdnFUZW1wb3Jh
cnkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgInF1YWxpZmllciBub3QgYWxsb3dlZCBvbiBmdW5j
dGlvbiBwYXJhbWV0ZXIiLCBnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAocXVhbGlmaWVyID09IEV2cUNvbnN0ICYmIHBh
cmFtUXVhbGlmaWVyICE9IEV2cUluKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJxdWFsaWZpZXIg
bm90IGFsbG93ZWQgd2l0aCAiLCBnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSwgZ2V0UXVh
bGlmaWVyU3RyaW5nKHBhcmFtUXVhbGlmaWVyKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxQ29uc3QpCisgICAgICAgIHR5cGUtPnNldFF1
YWxpZmllcihFdnFDb25zdFJlYWRPbmx5KTsKKyAgICBlbHNlCisgICAgICAgIHR5cGUtPnNldFF1
YWxpZmllcihwYXJhbVF1YWxpZmllcik7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
VFBhcnNlQ29udGV4dDo6ZXh0ZW5zaW9uRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5l
LCBjb25zdCBUU3RyaW5nJiBleHRlbnNpb24pCit7CisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2
aW9yJiBleHRCZWhhdmlvciA9IGV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgVEV4dGVuc2lvbkJl
aGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0QmVoYXZpb3IuZmluZChleHRlbnNpb24u
Y19zdHIoKSk7CisgICAgaWYgKGl0ZXIgPT0gZXh0QmVoYXZpb3IuZW5kKCkpIHsKKyAgICAgICAg
ZXJyb3IobGluZSwgImV4dGVuc2lvbiIsIGV4dGVuc2lvbi5jX3N0cigpLCAiaXMgbm90IHN1cHBv
cnRlZCIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgLy8gSW4gR0xTTCBFUywg
YW4gZXh0ZW5zaW9uJ3MgZGVmYXVsdCBiZWhhdmlvciBpcyAiZGlzYWJsZSIuCisgICAgaWYgKGl0
ZXItPnNlY29uZCA9PSBFQmhEaXNhYmxlIHx8IGl0ZXItPnNlY29uZCA9PSBFQmhVbmRlZmluZWQp
IHsKKyAgICAgICAgZXJyb3IobGluZSwgImV4dGVuc2lvbiIsIGV4dGVuc2lvbi5jX3N0cigpLCAi
aXMgZGlzYWJsZWQiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChpdGVy
LT5zZWNvbmQgPT0gRUJoV2FybikgeworICAgICAgICB3YXJuaW5nKGxpbmUsICJleHRlbnNpb24i
LCBleHRlbnNpb24uY19zdHIoKSwgImlzIGJlaW5nIHVzZWQiKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0
OjpzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBjaGFyKiBleHRlbnNpb24pCit7CisgICAgY29uc3Qg
VEV4dGVuc2lvbkJlaGF2aW9yJiBleHRiZWhhdmlvciA9IGV4dGVuc2lvbkJlaGF2aW9yKCk7Cisg
ICAgVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0YmVoYXZpb3Iu
ZmluZChleHRlbnNpb24pOworICAgIHJldHVybiAoaXRlciAhPSBleHRiZWhhdmlvci5lbmQoKSk7
Cit9CisKK2Jvb2wgVFBhcnNlQ29udGV4dDo6aXNFeHRlbnNpb25FbmFibGVkKGNvbnN0IGNoYXIq
IGV4dGVuc2lvbikgY29uc3QKK3sKKyAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dGJl
aGF2aW9yID0gZXh0ZW5zaW9uQmVoYXZpb3IoKTsKKyAgICBURXh0ZW5zaW9uQmVoYXZpb3I6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRiZWhhdmlvci5maW5kKGV4dGVuc2lvbik7CisKKyAgICBp
ZiAoaXRlciA9PSBleHRiZWhhdmlvci5lbmQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gKGl0ZXItPnNlY29uZCA9PSBFQmhFbmFibGUgfHwgaXRl
ci0+c2Vjb25kID09IEVCaFJlcXVpcmUpOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
Ky8vCisvLyBOb24tRXJyb3JzLgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLwor
Ly8gTG9vayB1cCBhIGZ1bmN0aW9uIG5hbWUgaW4gdGhlIHN5bWJvbCB0YWJsZSwgYW5kIG1ha2Ug
c3VyZSBpdCBpcyBhIGZ1bmN0aW9uLgorLy8KKy8vIFJldHVybiB0aGUgZnVuY3Rpb24gc3ltYm9s
IGlmIGZvdW5kLCBvdGhlcndpc2UgMC4KKy8vCitjb25zdCBURnVuY3Rpb24qIFRQYXJzZUNvbnRl
eHQ6OmZpbmRGdW5jdGlvbihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBURnVuY3Rpb24qIGNhbGws
IGJvb2wgKmJ1aWx0SW4pCit7CisgICAgLy8gRmlyc3QgZmluZCBieSB1bm1hbmdsZWQgbmFtZSB0
byBjaGVjayB3aGV0aGVyIHRoZSBmdW5jdGlvbiBuYW1lIGhhcyBiZWVuCisgICAgLy8gaGlkZGVu
IGJ5IGEgdmFyaWFibGUgbmFtZSBvciBzdHJ1Y3QgdHlwZW5hbWUuCisgICAgLy8gSWYgYSBmdW5j
dGlvbiBpcyBmb3VuZCwgY2hlY2sgZm9yIG9uZSB3aXRoIGEgbWF0Y2hpbmcgYXJndW1lbnQgbGlz
dC4KKyAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKGNhbGwtPmdl
dE5hbWUoKSwgYnVpbHRJbik7CisgICAgaWYgKHN5bWJvbCA9PSAwIHx8IHN5bWJvbC0+aXNGdW5j
dGlvbigpKSB7CisgICAgICAgIHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQoY2FsbC0+Z2V0TWFu
Z2xlZE5hbWUoKSwgYnVpbHRJbik7CisgICAgfQorCisgICAgaWYgKHN5bWJvbCA9PSAwKSB7Cisg
ICAgICAgIGVycm9yKGxpbmUsICJubyBtYXRjaGluZyBvdmVybG9hZGVkIGZ1bmN0aW9uIGZvdW5k
IiwgY2FsbC0+Z2V0TmFtZSgpLmNfc3RyKCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisK
KyAgICBpZiAoIXN5bWJvbC0+aXNGdW5jdGlvbigpKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJm
dW5jdGlvbiBuYW1lIGV4cGVjdGVkIiwgY2FsbC0+Z2V0TmFtZSgpLmNfc3RyKCkpOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgVEZ1bmN0
aW9uKj4oc3ltYm9sKTsKK30KKworLy8KKy8vIEluaXRpYWxpemVycyBzaG93IHVwIGluIHNldmVy
YWwgcGxhY2VzIGluIHRoZSBncmFtbWFyLiAgSGF2ZSBvbmUgc2V0IG9mCisvLyBjb2RlIHRvIGhh
bmRsZSB0aGVtIGhlcmUuCisvLworYm9vbCBUUGFyc2VDb250ZXh0OjpleGVjdXRlSW5pdGlhbGl6
ZXIoY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5
cGUmIHBUeXBlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRl
cm1UeXBlZCogaW5pdGlhbGl6ZXIsIFRJbnRlcm1Ob2RlKiYgaW50ZXJtTm9kZSwgVFZhcmlhYmxl
KiB2YXJpYWJsZSkKK3sKKyAgICBUVHlwZSB0eXBlID0gVFR5cGUocFR5cGUpOworCisgICAgaWYg
KHZhcmlhYmxlID09IDApIHsKKyAgICAgICAgaWYgKHJlc2VydmVkRXJyb3JDaGVjayhsaW5lLCBp
ZGVudGlmaWVyKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGlmICh2b2lk
RXJyb3JDaGVjayhsaW5lLCBpZGVudGlmaWVyLCBwVHlwZSkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgICAgICAvLworICAgICAgICAvLyBhZGQgdmFyaWFibGUgdG8gc3ltYm9sIHRh
YmxlCisgICAgICAgIC8vCisgICAgICAgIHZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgmaWRlbnRp
ZmllciwgdHlwZSk7CisgICAgICAgIGlmICghIHN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUp
KSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAicmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdl
dE5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
Ly8gZG9uJ3QgZGVsZXRlIHZhcmlhYmxlLCBpdCdzIHVzZWQgYnkgZXJyb3IgcmVjb3ZlcnksIGFu
ZCB0aGUgcG9vbCAKKyAgICAgICAgICAgIC8vIHBvcCB3aWxsIHRha2UgY2FyZSBvZiB0aGUgbWVt
b3J5CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLworICAgIC8vIGlkZW50aWZpZXIgbXVzdCBi
ZSBvZiB0eXBlIGNvbnN0YW50LCBhIGdsb2JhbCwgb3IgYSB0ZW1wb3JhcnkKKyAgICAvLworICAg
IFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIo
KTsKKyAgICBpZiAoKHF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpICYmIChxdWFsaWZpZXIgIT0g
RXZxR2xvYmFsKSAmJiAocXVhbGlmaWVyICE9IEV2cUNvbnN0KSkgeworICAgICAgICBlcnJvcihs
aW5lLCAiIGNhbm5vdCBpbml0aWFsaXplIHRoaXMgdHlwZSBvZiBxdWFsaWZpZXIgIiwgdmFyaWFi
bGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXJTdHJpbmcoKSk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICAvLworICAgIC8vIHRlc3QgZm9yIGFuZCBwcm9wYWdhdGUgY29uc3RhbnQK
KyAgICAvLworCisgICAgaWYgKHF1YWxpZmllciA9PSBFdnFDb25zdCkgeworICAgICAgICBpZiAo
cXVhbGlmaWVyICE9IGluaXRpYWxpemVyLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkpIHsKKyAg
ICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgICAg
IGV4dHJhSW5mb1N0cmVhbSA8PCAiJyIgPDwgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRDb21wbGV0
ZVN0cmluZygpIDw8ICInIjsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4
dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICIgYXNzaWduaW5n
IG5vbi1jb25zdGFudCB0byIsICI9IiwgZXh0cmFJbmZvLmNfc3RyKCkpOworICAgICAgICAgICAg
dmFyaWFibGUtPmdldFR5cGUoKS5zZXRRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0eXBlICE9IGluaXRpYWxp
emVyLT5nZXRUeXBlKCkpIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICIgbm9uLW1hdGNoaW5n
IHR5cGVzIGZvciBjb25zdCBpbml0aWFsaXplciAiLCAKKyAgICAgICAgICAgICAgICB2YXJpYWJs
ZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllclN0cmluZygpKTsKKyAgICAgICAgICAgIHZhcmlhYmxl
LT5nZXRUeXBlKCkuc2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaW5pdGlhbGl6ZXItPmdldEFzQ29uc3Rh
bnRVbmlvbigpKSB7IAorICAgICAgICAgICAgdmFyaWFibGUtPnNoYXJlQ29uc3RQb2ludGVyKGlu
aXRpYWxpemVyLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSk7
CisgICAgICAgIH0gZWxzZSBpZiAoaW5pdGlhbGl6ZXItPmdldEFzU3ltYm9sTm9kZSgpKSB7Cisg
ICAgICAgICAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKGluaXRp
YWxpemVyLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCkpOworICAgICAgICAgICAgY29u
c3QgVFZhcmlhYmxlKiB0VmFyID0gc3RhdGljX2Nhc3Q8Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9s
KTsKKworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiogY29uc3RBcnJheSA9IHRWYXItPmdldENv
bnN0UG9pbnRlcigpOworICAgICAgICAgICAgdmFyaWFibGUtPnNoYXJlQ29uc3RQb2ludGVyKGNv
bnN0QXJyYXkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJl
YW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICInIiA8
PCB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldENvbXBsZXRlU3RyaW5nKCkgPDwgIiciOworICAgICAg
ICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAg
ICAgICAgICAgZXJyb3IobGluZSwgIiBjYW5ub3QgYXNzaWduIHRvIiwgIj0iLCBleHRyYUluZm8u
Y19zdHIoKSk7CisgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldFF1YWxpZmllcihF
dnFUZW1wb3JhcnkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9
CisgCisgICAgaWYgKHF1YWxpZmllciAhPSBFdnFDb25zdCkgeworICAgICAgICBUSW50ZXJtU3lt
Ym9sKiBpbnRlcm1TeW1ib2wgPSBpbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRV
bmlxdWVJZCgpLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLCB2YXJpYWJsZS0+Z2V0VHlwZSgpLCBsaW5l
KTsKKyAgICAgICAgaW50ZXJtTm9kZSA9IGludGVybWVkaWF0ZS5hZGRBc3NpZ24oRU9wSW5pdGlh
bGl6ZSwgaW50ZXJtU3ltYm9sLCBpbml0aWFsaXplciwgbGluZSk7CisgICAgICAgIGlmIChpbnRl
cm1Ob2RlID09IDApIHsKKyAgICAgICAgICAgIGFzc2lnbkVycm9yKGxpbmUsICI9IiwgaW50ZXJt
U3ltYm9sLT5nZXRDb21wbGV0ZVN0cmluZygpLCBpbml0aWFsaXplci0+Z2V0Q29tcGxldGVTdHJp
bmcoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSAK
KyAgICAgICAgaW50ZXJtTm9kZSA9IDA7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
VFBhcnNlQ29udGV4dDo6YXJlQWxsQ2hpbGRDb25zdChUSW50ZXJtQWdncmVnYXRlKiBhZ2dyTm9k
ZSkKK3sKKyAgICBBU1NFUlQoYWdnck5vZGUgIT0gTlVMTCk7CisgICAgaWYgKCFhZ2dyTm9kZS0+
aXNDb25zdHJ1Y3RvcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIGFsbENv
bnN0YW50ID0gdHJ1ZTsKKworICAgIC8vIGNoZWNrIGlmIGFsbCB0aGUgY2hpbGQgbm9kZXMgYXJl
IGNvbnN0YW50cyBzbyB0aGF0IHRoZXkgY2FuIGJlIGluc2VydGVkIGludG8gCisgICAgLy8gdGhl
IHBhcmVudCBub2RlCisgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IGFnZ3JOb2RlLT5n
ZXRTZXF1ZW5jZSgpIDsKKyAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3IgcCA9IHNl
cXVlbmNlLmJlZ2luKCk7IHAgIT0gc2VxdWVuY2UuZW5kKCk7ICsrcCkgeworICAgICAgICBpZiAo
ISgqcCktPmdldEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIGFsbENvbnN0YW50OworfQorCisvLyBU
aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdGVzdCBmb3IgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBw
YXJhbWV0ZXJzIHBhc3NlZCB0byB2YXJpb3VzIGNvbnN0cnVjdG9yIGZ1bmN0aW9ucworLy8gYW5k
IGFsc28gY29udmVydCB0aGVtIHRvIHRoZSByaWdodCBkYXRhdHlwZSBpZiBpdCBpcyBhbGxvd2Vk
IGFuZCByZXF1aXJlZC4gCisvLworLy8gUmV0dXJucyAwIGZvciBhbiBlcnJvciBvciB0aGUgY29u
c3RydWN0ZWQgbm9kZSAoYWdncmVnYXRlIG9yIHR5cGVkKSBmb3Igbm8gZXJyb3IuCisvLworVElu
dGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdHJ1Y3RvcihUSW50ZXJtTm9kZSogbm9k
ZSwgY29uc3QgVFR5cGUqIHR5cGUsIFRPcGVyYXRvciBvcCwgVEZ1bmN0aW9uKiBmbkNhbGwsIGNv
bnN0IFRTb3VyY2VMb2MmIGxpbmUpCit7CisgICAgaWYgKG5vZGUgPT0gMCkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBhZ2dyTm9kZSA9IG5vZGUtPmdldEFzQWdn
cmVnYXRlKCk7CisgICAgCisgICAgVEZpZWxkTGlzdDo6Y29uc3RfaXRlcmF0b3IgbWVtYmVyRmll
bGRzOworICAgIGlmIChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QpCisgICAgICAgIG1lbWJlckZp
ZWxkcyA9IHR5cGUtPmdldFN0cnVjdCgpLT5maWVsZHMoKS5iZWdpbigpOworICAgIAorICAgIFRU
eXBlIGVsZW1lbnRUeXBlID0gKnR5cGU7CisgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkKKyAgICAg
ICAgZWxlbWVudFR5cGUuY2xlYXJBcnJheW5lc3MoKTsKKworICAgIGJvb2wgc2luZ2xlQXJnOwor
ICAgIGlmIChhZ2dyTm9kZSkgeworICAgICAgICBpZiAoYWdnck5vZGUtPmdldE9wKCkgIT0gRU9w
TnVsbCB8fCBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMSkKKyAgICAgICAgICAg
IHNpbmdsZUFyZyA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNpbmdsZUFyZyA9
IGZhbHNlOworICAgIH0gZWxzZQorICAgICAgICBzaW5nbGVBcmcgPSB0cnVlOworCisgICAgVElu
dGVybVR5cGVkICpuZXdOb2RlOworICAgIGlmIChzaW5nbGVBcmcpIHsKKyAgICAgICAgLy8gSWYg
c3RydWN0dXJlIGNvbnN0cnVjdG9yIG9yIGFycmF5IGNvbnN0cnVjdG9yIGlzIGJlaW5nIGNhbGxl
ZCAKKyAgICAgICAgLy8gZm9yIG9ubHkgb25lIHBhcmFtZXRlciBpbnNpZGUgdGhlIHN0cnVjdHVy
ZSwgd2UgbmVlZCB0byBjYWxsIGNvbnN0cnVjdFN0cnVjdCBmdW5jdGlvbiBvbmNlLgorICAgICAg
ICBpZiAodHlwZS0+aXNBcnJheSgpKQorICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdFN0
cnVjdChub2RlLCAmZWxlbWVudFR5cGUsIDEsIG5vZGUtPmdldExpbmUoKSwgZmFsc2UpOworICAg
ICAgICBlbHNlIGlmIChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QpCisgICAgICAgICAgICBuZXdO
b2RlID0gY29uc3RydWN0U3RydWN0KG5vZGUsICgqbWVtYmVyRmllbGRzKS0+dHlwZSgpLCAxLCBu
b2RlLT5nZXRMaW5lKCksIGZhbHNlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmV3Tm9k
ZSA9IGNvbnN0cnVjdEJ1aWx0SW4odHlwZSwgb3AsIG5vZGUsIG5vZGUtPmdldExpbmUoKSwgZmFs
c2UpOworCisgICAgICAgIGlmIChuZXdOb2RlICYmIG5ld05vZGUtPmdldEFzQWdncmVnYXRlKCkp
IHsKKyAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogY29uc3RDb25zdHJ1Y3RvciA9IGZvbGRDb25z
dENvbnN0cnVjdG9yKG5ld05vZGUtPmdldEFzQWdncmVnYXRlKCksICp0eXBlKTsKKyAgICAgICAg
ICAgIGlmIChjb25zdENvbnN0cnVjdG9yKQorICAgICAgICAgICAgICAgIHJldHVybiBjb25zdENv
bnN0cnVjdG9yOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ld05vZGU7CisgICAgfQor
ICAgIAorICAgIC8vCisgICAgLy8gSGFuZGxlIGxpc3Qgb2YgYXJndW1lbnRzLgorICAgIC8vCisg
ICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZVZlY3RvciA9IGFnZ3JOb2RlLT5nZXRTZXF1ZW5j
ZSgpIDsgICAgLy8gU3RvcmVzIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFyYW1ldGVyIHRv
IHRoZSBjb25zdHJ1Y3RvcgorICAgIC8vIGlmIHRoZSBzdHJ1Y3R1cmUgY29uc3RydWN0b3IgY29u
dGFpbnMgbW9yZSB0aGFuIG9uZSBwYXJhbWV0ZXIsIHRoZW4gY29uc3RydWN0CisgICAgLy8gZWFj
aCBwYXJhbWV0ZXIKKyAgICAKKyAgICBpbnQgcGFyYW1Db3VudCA9IDA7ICAvLyBrZWVwcyBhIHRy
YWNrIG9mIHRoZSBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIgbnVtYmVyIGJlaW5nIGNoZWNrZWQgICAg
CisgICAgCisgICAgLy8gZm9yIGVhY2ggcGFyYW1ldGVyIHRvIHRoZSBjb25zdHJ1Y3RvciBjYWxs
LCBjaGVjayB0byBzZWUgaWYgdGhlIHJpZ2h0IHR5cGUgaXMgcGFzc2VkIG9yIGNvbnZlcnQgdGhl
bSAKKyAgICAvLyB0byB0aGUgcmlnaHQgdHlwZSBpZiBwb3NzaWJsZSAoYW5kIGFsbG93ZWQpLgor
ICAgIC8vIGZvciBzdHJ1Y3R1cmUgY29uc3RydWN0b3JzLCBqdXN0IGNoZWNrIGlmIHRoZSByaWdo
dCB0eXBlIGlzIHBhc3NlZCwgbm8gY29udmVyc2lvbiBpcyBhbGxvd2VkLgorICAgIAorICAgIGZv
ciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBwID0gc2VxdWVuY2VWZWN0b3IuYmVnaW4oKTsg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgIT0gc2VxdWVuY2VWZWN0b3Iu
ZW5kKCk7IHArKywgcGFyYW1Db3VudCsrKSB7CisgICAgICAgIGlmICh0eXBlLT5pc0FycmF5KCkp
CisgICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0U3RydWN0KCpwLCAmZWxlbWVudFR5cGUs
IHBhcmFtQ291bnQrMSwgbm9kZS0+Z2V0TGluZSgpLCB0cnVlKTsKKyAgICAgICAgZWxzZSBpZiAo
b3AgPT0gRU9wQ29uc3RydWN0U3RydWN0KQorICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVj
dFN0cnVjdCgqcCwgbWVtYmVyRmllbGRzW3BhcmFtQ291bnRdLT50eXBlKCksIHBhcmFtQ291bnQr
MSwgbm9kZS0+Z2V0TGluZSgpLCB0cnVlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmV3
Tm9kZSA9IGNvbnN0cnVjdEJ1aWx0SW4odHlwZSwgb3AsICpwLCBub2RlLT5nZXRMaW5lKCksIHRy
dWUpOworICAgICAgICAKKyAgICAgICAgaWYgKG5ld05vZGUpIHsKKyAgICAgICAgICAgICpwID0g
bmV3Tm9kZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFRJbnRlcm1UeXBlZCogY29uc3RydWN0
b3IgPSBpbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IoYWdnck5vZGUsIG9wLCBsaW5l
KTsKKyAgICBUSW50ZXJtVHlwZWQqIGNvbnN0Q29uc3RydWN0b3IgPSBmb2xkQ29uc3RDb25zdHJ1
Y3Rvcihjb25zdHJ1Y3Rvci0+Z2V0QXNBZ2dyZWdhdGUoKSwgKnR5cGUpOworICAgIGlmIChjb25z
dENvbnN0cnVjdG9yKQorICAgICAgICByZXR1cm4gY29uc3RDb25zdHJ1Y3RvcjsKKworICAgIHJl
dHVybiBjb25zdHJ1Y3RvcjsKK30KKworVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0Ojpmb2xk
Q29uc3RDb25zdHJ1Y3RvcihUSW50ZXJtQWdncmVnYXRlKiBhZ2dyTm9kZSwgY29uc3QgVFR5cGUm
IHR5cGUpCit7CisgICAgYm9vbCBjYW5CZUZvbGRlZCA9IGFyZUFsbENoaWxkQ29uc3QoYWdnck5v
ZGUpOworICAgIGFnZ3JOb2RlLT5zZXRUeXBlKHR5cGUpOworICAgIGlmIChjYW5CZUZvbGRlZCkg
eworICAgICAgICBib29sIHJldHVyblZhbCA9IGZhbHNlOworICAgICAgICBDb25zdGFudFVuaW9u
KiB1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bdHlwZS5nZXRPYmplY3RTaXplKCldOwor
ICAgICAgICBpZiAoYWdnck5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDEpICB7CisgICAg
ICAgICAgICByZXR1cm5WYWwgPSBpbnRlcm1lZGlhdGUucGFyc2VDb25zdFRyZWUoYWdnck5vZGUt
PmdldExpbmUoKSwgYWdnck5vZGUsIHVuaW9uQXJyYXksIGFnZ3JOb2RlLT5nZXRPcCgpLCBzeW1i
b2xUYWJsZSwgIHR5cGUsIHRydWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgcmV0dXJuVmFsID0gaW50ZXJtZWRpYXRlLnBhcnNlQ29uc3RUcmVlKGFnZ3JOb2RlLT5n
ZXRMaW5lKCksIGFnZ3JOb2RlLCB1bmlvbkFycmF5LCBhZ2dyTm9kZS0+Z2V0T3AoKSwgc3ltYm9s
VGFibGUsICB0eXBlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmV0dXJuVmFsKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgcmV0dXJuIGludGVybWVkaWF0ZS5hZGRDb25zdGFu
dFVuaW9uKHVuaW9uQXJyYXksIHR5cGUsIGFnZ3JOb2RlLT5nZXRMaW5lKCkpOworICAgIH0KKwor
ICAgIHJldHVybiAwOworfQorCisvLyBGdW5jdGlvbiBmb3IgY29uc3RydWN0b3IgaW1wbGVtZW50
YXRpb24uIENhbGxzIGFkZFVuYXJ5TWF0aCB3aXRoIGFwcHJvcHJpYXRlIEVPcCB2YWx1ZQorLy8g
Zm9yIHRoZSBwYXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yIChwYXNzZWQgdG8gdGhpcyBmdW5j
dGlvbikuIEVzc2VudGlhbGx5LCBpdCBjb252ZXJ0cworLy8gdGhlIHBhcmFtZXRlciB0eXBlcyBj
b3JyZWN0bHkuIElmIGEgY29uc3RydWN0b3IgZXhwZWN0cyBhbiBpbnQgKGxpa2UgaXZlYzIpIGFu
ZCBpcyBwYXNzZWQgYSAKKy8vIGZsb2F0LCB0aGVuIGZsb2F0IGlzIGNvbnZlcnRlZCB0byBpbnQu
CisvLworLy8gUmV0dXJucyAwIGZvciBhbiBlcnJvciBvciB0aGUgY29uc3RydWN0ZWQgbm9kZS4K
Ky8vCitUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdEJ1aWx0SW4oY29uc3Qg
VFR5cGUqIHR5cGUsIFRPcGVyYXRvciBvcCwgVEludGVybU5vZGUqIG5vZGUsIGNvbnN0IFRTb3Vy
Y2VMb2MmIGxpbmUsIGJvb2wgc3Vic2V0KQoreworICAgIFRJbnRlcm1UeXBlZCogbmV3Tm9kZTsK
KyAgICBUT3BlcmF0b3IgYmFzaWNPcDsKKworICAgIC8vCisgICAgLy8gRmlyc3QsIGNvbnZlcnQg
dHlwZXMgYXMgbmVlZGVkLgorICAgIC8vCisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgRU9w
Q29uc3RydWN0VmVjMjoKKyAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzM6CisgICAgY2FzZSBFT3BD
b25zdHJ1Y3RWZWM0OgorICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MjoKKyAgICBjYXNlIEVPcENv
bnN0cnVjdE1hdDM6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQ0OgorICAgIGNhc2UgRU9wQ29u
c3RydWN0RmxvYXQ6CisgICAgICAgIGJhc2ljT3AgPSBFT3BDb25zdHJ1Y3RGbG9hdDsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMyOgorICAgIGNhc2UgRU9wQ29u
c3RydWN0SVZlYzM6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjNDoKKyAgICBjYXNlIEVPcENv
bnN0cnVjdEludDoKKyAgICAgICAgYmFzaWNPcCA9IEVPcENvbnN0cnVjdEludDsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMyOgorICAgIGNhc2UgRU9wQ29uc3Ry
dWN0QlZlYzM6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjNDoKKyAgICBjYXNlIEVPcENvbnN0
cnVjdEJvb2w6CisgICAgICAgIGJhc2ljT3AgPSBFT3BDb25zdHJ1Y3RCb29sOworICAgICAgICBi
cmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGVycm9yKGxpbmUsICJ1bnN1cHBvcnRlZCBj
b25zdHJ1Y3Rpb24iLCAiIik7CisgICAgICAgIHJlY292ZXIoKTsKKworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisgICAgbmV3Tm9kZSA9IGludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoYmFzaWNP
cCwgbm9kZSwgbm9kZS0+Z2V0TGluZSgpLCBzeW1ib2xUYWJsZSk7CisgICAgaWYgKG5ld05vZGUg
PT0gMCkgeworICAgICAgICBlcnJvcihsaW5lLCAiY2FuJ3QgY29udmVydCIsICJjb25zdHJ1Y3Rv
ciIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLworICAgIC8vIE5vdywgaWYg
dGhlcmUgc3RpbGwgaXNuJ3QgYW4gb3BlcmF0aW9uIHRvIGRvIHRoZSBjb25zdHJ1Y3Rpb24sIGFu
ZCB3ZSBuZWVkIG9uZSwgYWRkIG9uZS4KKyAgICAvLworICAgIAorICAgIC8vIE90aGVyd2lzZSwg
c2tpcCBvdXQgZWFybHkuCisgICAgaWYgKHN1YnNldCB8fCAobmV3Tm9kZSAhPSBub2RlICYmIG5l
d05vZGUtPmdldFR5cGUoKSA9PSAqdHlwZSkpCisgICAgICAgIHJldHVybiBuZXdOb2RlOworCisg
ICAgLy8gc2V0QWdncmVnYXRlT3BlcmF0b3Igd2lsbCBpbnNlcnQgYSBuZXcgbm9kZSBmb3IgdGhl
IGNvbnN0cnVjdG9yLCBhcyBuZWVkZWQuCisgICAgcmV0dXJuIGludGVybWVkaWF0ZS5zZXRBZ2dy
ZWdhdGVPcGVyYXRvcihuZXdOb2RlLCBvcCwgbGluZSk7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24g
dGVzdHMgZm9yIHRoZSB0eXBlIG9mIHRoZSBwYXJhbWV0ZXJzIHRvIHRoZSBzdHJ1Y3R1cmVzIGNv
bnN0cnVjdG9ycy4gUmFpc2VzCisvLyBhbiBlcnJvciBtZXNzYWdlIGlmIHRoZSBleHBlY3RlZCB0
eXBlIGRvZXMgbm90IG1hdGNoIHRoZSBwYXJhbWV0ZXIgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rv
ci4KKy8vCisvLyBSZXR1cm5zIDAgZm9yIGFuIGVycm9yIG9yIHRoZSBpbnB1dCBub2RlIGl0c2Vs
ZiBpZiB0aGUgZXhwZWN0ZWQgYW5kIHRoZSBnaXZlbiBwYXJhbWV0ZXIgdHlwZXMgbWF0Y2guCisv
LworVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RTdHJ1Y3QoVEludGVybU5v
ZGUqIG5vZGUsIFRUeXBlKiB0eXBlLCBpbnQgcGFyYW1Db3VudCwgY29uc3QgVFNvdXJjZUxvYyYg
bGluZSwgYm9vbCBzdWJzZXQpCit7CisgICAgaWYgKCp0eXBlID09IG5vZGUtPmdldEFzVHlwZWQo
KS0+Z2V0VHlwZSgpKSB7CisgICAgICAgIGlmIChzdWJzZXQpCisgICAgICAgICAgICByZXR1cm4g
bm9kZS0+Z2V0QXNUeXBlZCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gaW50
ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5vZGUtPmdldEFzVHlwZWQoKSwgRU9wQ29u
c3RydWN0U3RydWN0LCBsaW5lKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGQ6OnN0cmluZ3N0
cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiY2Fubm90
IGNvbnZlcnQgcGFyYW1ldGVyICIgPDwgcGFyYW1Db3VudCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgIDw8ICIgZnJvbSAnIiA8PCBub2RlLT5nZXRBc1R5cGVkKCktPmdldFR5cGUoKS5nZXRCYXNp
Y1N0cmluZygpCisgICAgICAgICAgICAgICAgICAgICAgICA8PCAiJyB0byAnIiA8PCB0eXBlLT5n
ZXRCYXNpY1N0cmluZygpIDw8ICInIjsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0g
ZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICBlcnJvcihsaW5lLCAiIiwgImNvbnN0cnVj
dG9yIiwgZXh0cmFJbmZvLmNfc3RyKCkpOworICAgICAgICByZWNvdmVyKCk7CisgICAgfQorCisg
ICAgcmV0dXJuIDA7Cit9CisKKy8vCisvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHRyZWUg
cmVwcmVzZW50YXRpb24gZm9yIHRoZSB2ZWN0b3IgZmllbGQocykgYmVpbmcgYWNjZXNzZWQgZnJv
bSBjb250YW50IHZlY3Rvci4KKy8vIElmIG9ubHkgb25lIGNvbXBvbmVudCBvZiB2ZWN0b3IgaXMg
YWNjZXNzZWQgKHYueCBvciB2WzBdIHdoZXJlIHYgaXMgYSBjb250YW50IHZlY3RvciksIHRoZW4g
YSBjb250YW50IG5vZGUgaXMKKy8vIHJldHVybmVkLCBlbHNlIGFuIGFnZ3JlZ2F0ZSBub2RlIGlz
IHJldHVybmVkIChmb3Igdi54eSkuIFRoZSBpbnB1dCB0byB0aGlzIGZ1bmN0aW9uIGNvdWxkIGVp
dGhlciBiZSB0aGUgc3ltYm9sCisvLyBub2RlIG9yIGl0IGNvdWxkIGJlIHRoZSBpbnRlcm1lZGlh
dGUgdHJlZSByZXByZXNlbnRhdGlvbiBvZiBhY2Nlc3NpbmcgZmllbGRzIGluIGEgY29uc3RhbnQg
c3RydWN0dXJlIG9yIGNvbHVtbiBvZiAKKy8vIGEgY29uc3RhbnQgbWF0cml4LgorLy8KK1RJbnRl
cm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RWZWN0b3JOb2RlKFRWZWN0b3JGaWVsZHMm
IGZpZWxkcywgVEludGVybVR5cGVkKiBub2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQorewor
ICAgIFRJbnRlcm1UeXBlZCogdHlwZWROb2RlOworICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiB0
ZW1wQ29uc3RhbnROb2RlID0gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisKKyAgICBDb25z
dGFudFVuaW9uICp1bmlvbkFycmF5OworICAgIGlmICh0ZW1wQ29uc3RhbnROb2RlKSB7CisgICAg
ICAgIHVuaW9uQXJyYXkgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigp
OworCisgICAgICAgIGlmICghdW5pb25BcnJheSkgeworICAgICAgICAgICAgcmV0dXJuIG5vZGU7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgeyAvLyBUaGUgbm9kZSBoYXMgdG8gYmUgZWl0aGVyIGEg
c3ltYm9sIG5vZGUgb3IgYW4gYWdncmVnYXRlIG5vZGUgb3IgYSB0ZW1wQ29uc3RhbnQgbm9kZSwg
ZWxzZSwgaXRzIGFuIGVycm9yCisgICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGlu
dG8gdGhlIHZlY3RvciIsICJFcnJvciIpOworICAgICAgICByZWNvdmVyKCk7CisKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiogY29uc3RBcnJheSA9IG5ldyBD
b25zdGFudFVuaW9uW2ZpZWxkcy5udW1dOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVs
ZHMubnVtOyBpKyspIHsKKyAgICAgICAgaWYgKGZpZWxkcy5vZmZzZXRzW2ldID49IG5vZGUtPmdl
dFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVh
bSBleHRyYUluZm9TdHJlYW07CisgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgInZlY3Rv
ciBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICciIDw8IGZpZWxkcy5vZmZzZXRzW2ldIDw8
ICInIjsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVh
bS5zdHIoKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0
cigpKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRz
W2ldID0gMDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY29uc3RBcnJheVtpXSA9IHVu
aW9uQXJyYXlbZmllbGRzLm9mZnNldHNbaV1dOworCisgICAgfSAKKyAgICB0eXBlZE5vZGUgPSBp
bnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbihjb25zdEFycmF5LCBub2RlLT5nZXRUeXBlKCks
IGxpbmUpOworICAgIHJldHVybiB0eXBlZE5vZGU7Cit9CisKKy8vCisvLyBUaGlzIGZ1bmN0aW9u
IHJldHVybnMgdGhlIGNvbHVtbiBiZWluZyBhY2Nlc3NlZCBmcm9tIGEgY29uc3RhbnQgbWF0cml4
LiBUaGUgdmFsdWVzIGFyZSByZXRyaWV2ZWQgZnJvbQorLy8gdGhlIHN5bWJvbCB0YWJsZSBhbmQg
cGFyc2UtdHJlZSBpcyBidWlsdCBmb3IgYSB2ZWN0b3IgKGVhY2ggY29sdW1uIG9mIGEgbWF0cml4
IGlzIGEgdmVjdG9yKS4gVGhlIGlucHV0IAorLy8gdG8gdGhlIGZ1bmN0aW9uIGNvdWxkIGVpdGhl
ciBiZSBhIHN5bWJvbCBub2RlIChtWzBdIHdoZXJlIG0gaXMgYSBjb25zdGFudCBtYXRyaXgpdGhh
dCByZXByZXNlbnRzIGEgCisvLyBjb25zdGFudCBtYXRyaXggb3IgaXQgY291bGQgYmUgdGhlIHRy
ZWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbnN0YW50IG1hdHJpeCAocy5tMVswXSB3aGVyZSBz
IGlzIGEgY29uc3RhbnQgc3RydWN0dXJlKQorLy8KK1RJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4
dDo6YWRkQ29uc3RNYXRyaXhOb2RlKGludCBpbmRleCwgVEludGVybVR5cGVkKiBub2RlLCBjb25z
dCBUU291cmNlTG9jJiBsaW5lKQoreworICAgIFRJbnRlcm1UeXBlZCogdHlwZWROb2RlOworICAg
IFRJbnRlcm1Db25zdGFudFVuaW9uKiB0ZW1wQ29uc3RhbnROb2RlID0gbm9kZS0+Z2V0QXNDb25z
dGFudFVuaW9uKCk7CisKKyAgICBpZiAoaW5kZXggPj0gbm9kZS0+Z2V0VHlwZSgpLmdldE5vbWlu
YWxTaXplKCkpIHsKKyAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOwor
ICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgIm1hdHJpeCBmaWVsZCBzZWxlY3Rpb24gb3V0IG9m
IHJhbmdlICciIDw8IGluZGV4IDw8ICInIjsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZv
ID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCBl
eHRyYUluZm8uY19zdHIoKSk7CisgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgaW5kZXggPSAw
OworICAgIH0KKworICAgIGlmICh0ZW1wQ29uc3RhbnROb2RlKSB7CisgICAgICAgICBDb25zdGFu
dFVuaW9uKiB1bmlvbkFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5pb25BcnJheVBvaW50
ZXIoKTsKKyAgICAgICAgIGludCBzaXplID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdl
dE5vbWluYWxTaXplKCk7CisgICAgICAgICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29u
c3RhbnRVbmlvbigmdW5pb25BcnJheVtzaXplKmluZGV4XSwgdGVtcENvbnN0YW50Tm9kZS0+Z2V0
VHlwZSgpLCBsaW5lKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90
IG9mZnNldCBpbnRvIHRoZSBtYXRyaXgiLCAiRXJyb3IiKTsKKyAgICAgICAgcmVjb3ZlcigpOwor
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiB0eXBlZE5vZGU7Cit9CisK
KworLy8KKy8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBlbGVtZW50IG9mIGFuIGFycmF5IGFj
Y2Vzc2VkIGZyb20gYSBjb25zdGFudCBhcnJheS4gVGhlIHZhbHVlcyBhcmUgcmV0cmlldmVkIGZy
b20KKy8vIHRoZSBzeW1ib2wgdGFibGUgYW5kIHBhcnNlLXRyZWUgaXMgYnVpbHQgZm9yIHRoZSB0
eXBlIG9mIHRoZSBlbGVtZW50LiBUaGUgaW5wdXQgCisvLyB0byB0aGUgZnVuY3Rpb24gY291bGQg
ZWl0aGVyIGJlIGEgc3ltYm9sIG5vZGUgKGFbMF0gd2hlcmUgYSBpcyBhIGNvbnN0YW50IGFycmF5
KXRoYXQgcmVwcmVzZW50cyBhIAorLy8gY29uc3RhbnQgYXJyYXkgb3IgaXQgY291bGQgYmUgdGhl
IHRyZWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbnN0YW50IGFycmF5IChzLmExWzBdIHdoZXJl
IHMgaXMgYSBjb25zdGFudCBzdHJ1Y3R1cmUpCisvLworVEludGVybVR5cGVkKiBUUGFyc2VDb250
ZXh0OjphZGRDb25zdEFycmF5Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBlZCogbm9kZSwgY29u
c3QgVFNvdXJjZUxvYyYgbGluZSkKK3sKKyAgICBUSW50ZXJtVHlwZWQqIHR5cGVkTm9kZTsKKyAg
ICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0YW50Tm9kZSA9IG5vZGUtPmdldEFzQ29u
c3RhbnRVbmlvbigpOworICAgIFRUeXBlIGFycmF5RWxlbWVudFR5cGUgPSBub2RlLT5nZXRUeXBl
KCk7CisgICAgYXJyYXlFbGVtZW50VHlwZS5jbGVhckFycmF5bmVzcygpOworCisgICAgaWYgKGlu
ZGV4ID49IG5vZGUtPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSkgeworICAgICAgICBzdGQ6OnN0
cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAi
YXJyYXkgZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnIiA8PCBpbmRleCA8PCAiJyI7Cisg
ICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAg
ICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwgZXh0cmFJbmZvLmNfc3RyKCkpOworICAgICAgICBy
ZWNvdmVyKCk7CisgICAgICAgIGluZGV4ID0gMDsKKyAgICB9CisKKyAgICBpZiAodGVtcENvbnN0
YW50Tm9kZSkgeworICAgICAgICAgc2l6ZV90IGFycmF5RWxlbWVudFNpemUgPSBhcnJheUVsZW1l
bnRUeXBlLmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgIENvbnN0YW50VW5pb24qIHVuaW9uQXJy
YXkgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOworICAgICAgICAg
dHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24oJnVuaW9uQXJyYXlbYXJy
YXlFbGVtZW50U2l6ZSAqIGluZGV4XSwgdGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLCBsaW5l
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRv
IHRoZSBhcnJheSIsICJFcnJvciIpOworICAgICAgICByZWNvdmVyKCk7CisKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIHR5cGVkTm9kZTsKK30KKworCisvLworLy8gVGhp
cyBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHBhcnRpY3VsYXIgZmllbGQgaW5zaWRl
IGEgY29uc3RhbnQgc3RydWN0dXJlIGZyb20gdGhlIHN5bWJvbCB0YWJsZS4gCisvLyBJZiB0aGVy
ZSBpcyBhbiBlbWJlZGRlZC9uZXN0ZWQgc3RydWN0LCBpdCBhcHByb3ByaWF0ZWx5IGNhbGxzIGFk
ZENvbnN0U3RydWN0TmVzdGVkIG9yIGFkZENvbnN0U3RydWN0RnJvbUFnZ3IKKy8vIGZ1bmN0aW9u
IGFuZCByZXR1cm5zIHRoZSBwYXJzZS10cmVlIHdpdGggdGhlIHZhbHVlcyBvZiB0aGUgZW1iZWRk
ZWQvbmVzdGVkIHN0cnVjdC4KKy8vCitUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENv
bnN0U3RydWN0KFRTdHJpbmcmIGlkZW50aWZpZXIsIFRJbnRlcm1UeXBlZCogbm9kZSwgY29uc3Qg
VFNvdXJjZUxvYyYgbGluZSkKK3sKKyAgICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSBub2Rl
LT5nZXRUeXBlKCkuZ2V0U3RydWN0KCktPmZpZWxkcygpOworCisgICAgc2l6ZV90IGluc3RhbmNl
U2l6ZSA9IDA7CisgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IGZpZWxkcy5zaXpl
KCk7ICsraW5kZXgpIHsKKyAgICAgICAgaWYgKGZpZWxkc1tpbmRleF0tPm5hbWUoKSA9PSBpZGVu
dGlmaWVyKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGluc3RhbmNlU2l6ZSArPSBmaWVsZHNbaW5kZXhdLT50eXBlKCktPmdldE9iamVjdFNpemUo
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFRJbnRlcm1UeXBlZCogdHlwZWROb2RlID0gMDsK
KyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0YW50Tm9kZSA9IG5vZGUtPmdldEFz
Q29uc3RhbnRVbmlvbigpOworICAgIGlmICh0ZW1wQ29uc3RhbnROb2RlKSB7CisgICAgICAgICBD
b25zdGFudFVuaW9uKiBjb25zdEFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5pb25BcnJh
eVBvaW50ZXIoKTsKKworICAgICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0
YW50VW5pb24oY29uc3RBcnJheStpbnN0YW5jZVNpemUsIHRlbXBDb25zdGFudE5vZGUtPmdldFR5
cGUoKSwgbGluZSk7IC8vIHR5cGUgd2lsbCBiZSBjaGFuZ2VkIGluIHRoZSBjYWxsaW5nIGZ1bmN0
aW9uCisgICAgfSBlbHNlIHsKKyAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50
byB0aGUgc3RydWN0dXJlIiwgIkVycm9yIik7CisgICAgICAgIHJlY292ZXIoKTsKKworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gdHlwZWROb2RlOworfQorCitib29sIFRQ
YXJzZUNvbnRleHQ6OmVudGVyU3RydWN0RGVjbGFyYXRpb24oY29uc3QgVFNvdXJjZUxvYyYgbGlu
ZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllcikKK3sKKyAgICArK3N0cnVjdE5lc3RpbmdMZXZl
bDsKKworICAgIC8vIEVtYmVkZGVkIHN0cnVjdHVyZSBkZWZpbml0aW9ucyBhcmUgbm90IHN1cHBv
cnRlZCBwZXIgR0xTTCBFUyBzcGVjLgorICAgIC8vIFRoZXkgYXJlbid0IGFsbG93ZWQgaW4gR0xT
TCBlaXRoZXIsIGJ1dCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzIGhlcmUKKyAgICAvLyBzbyB3ZSBk
b24ndCByZWx5IG9uIHRoZSBHTFNMIGNvbXBpbGVyIHRvIGNhdGNoIGl0LgorICAgIGlmIChzdHJ1
Y3ROZXN0aW5nTGV2ZWwgPiAxKSB7CisgICAgICAgIGVycm9yKGxpbmUsICIiLCAiRW1iZWRkZWQg
c3RydWN0IGRlZmluaXRpb25zIGFyZSBub3QgYWxsb3dlZCIpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgVFBhcnNlQ29udGV4dDo6
ZXhpdFN0cnVjdERlY2xhcmF0aW9uKCkKK3sKKyAgICAtLXN0cnVjdE5lc3RpbmdMZXZlbDsKK30K
KworbmFtZXNwYWNlIHsKKworY29uc3QgaW50IGtXZWJHTE1heFN0cnVjdE5lc3RpbmcgPSA0Owor
Cit9ICAvLyBuYW1lc3BhY2UKKworYm9vbCBUUGFyc2VDb250ZXh0OjpzdHJ1Y3ROZXN0aW5nRXJy
b3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBURmllbGQmIGZpZWxkKQorewor
ICAgIGlmICghaXNXZWJHTEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgaWYgKGZpZWxkLnR5cGUoKS0+Z2V0QmFzaWNUeXBlKCkgIT0g
RWJ0U3RydWN0KSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBXZSdy
ZSBhbHJlYWR5IGluc2lkZSBhIHN0cnVjdHVyZSBkZWZpbml0aW9uIGF0IHRoaXMgcG9pbnQsIHNv
IGFkZAorICAgIC8vIG9uZSB0byB0aGUgZmllbGQncyBzdHJ1Y3QgbmVzdGluZy4KKyAgICBpZiAo
MSArIGZpZWxkLnR5cGUoKS0+Z2V0RGVlcGVzdFN0cnVjdE5lc3RpbmcoKSA+IGtXZWJHTE1heFN0
cnVjdE5lc3RpbmcpIHsKKyAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gcmVhc29uU3RyZWFtOwor
ICAgICAgICByZWFzb25TdHJlYW0gPDwgIlJlZmVyZW5jZSBvZiBzdHJ1Y3QgdHlwZSAiCisgICAg
ICAgICAgICAgICAgICAgICA8PCBmaWVsZC50eXBlKCktPmdldFN0cnVjdCgpLT5uYW1lKCkuY19z
dHIoKQorICAgICAgICAgICAgICAgICAgICAgPDwgIiBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBu
ZXN0aW5nIGxldmVsIG9mICIKKyAgICAgICAgICAgICAgICAgICAgIDw8IGtXZWJHTE1heFN0cnVj
dE5lc3Rpbmc7CisgICAgICAgIHN0ZDo6c3RyaW5nIHJlYXNvbiA9IHJlYXNvblN0cmVhbS5zdHIo
KTsKKyAgICAgICAgZXJyb3IobGluZSwgcmVhc29uLmNfc3RyKCksIGZpZWxkLm5hbWUoKS5jX3N0
cigpLCAiIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworLy8KKy8vIFBhcnNlIGFuIGFycmF5IGluZGV4IGV4cHJlc3Npb24KKy8vCitUSW50
ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZEluZGV4RXhwcmVzc2lvbihUSW50ZXJtVHlwZWQg
KmJhc2VFeHByZXNzaW9uLCBjb25zdCBUU291cmNlTG9jJiBsb2NhdGlvbiwgVEludGVybVR5cGVk
ICppbmRleEV4cHJlc3Npb24pCit7CisgICAgVEludGVybVR5cGVkICppbmRleGVkRXhwcmVzc2lv
biA9IE5VTEw7CisKKyAgICBpZiAoIWJhc2VFeHByZXNzaW9uLT5pc0FycmF5KCkgJiYgIWJhc2VF
eHByZXNzaW9uLT5pc01hdHJpeCgpICYmICFiYXNlRXhwcmVzc2lvbi0+aXNWZWN0b3IoKSkKKyAg
ICB7CisgICAgICAgIGlmIChiYXNlRXhwcmVzc2lvbi0+Z2V0QXNTeW1ib2xOb2RlKCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGVycm9yKGxvY2F0aW9uLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBv
ZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCBiYXNlRXhwcmVzc2lvbi0+Z2V0QXNT
eW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3RyKCkpOworICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IobG9jYXRpb24sICIgbGVmdCBvZiAnWycg
aXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICJleHByZXNzaW9uIik7
CisgICAgICAgIH0KKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKworICAgIGlmIChpbmRleEV4
cHJlc3Npb24tPmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQorICAgIHsKKyAgICAgICAgaW50
IGluZGV4ID0gaW5kZXhFeHByZXNzaW9uLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0SUNvbnN0
KDApOworICAgICAgICBpZiAoaW5kZXggPCAwKQorICAgICAgICB7CisgICAgICAgICAgICBzdGQ6
OnN0cmluZ3N0cmVhbSBpbmZvU3RyZWFtOworICAgICAgICAgICAgaW5mb1N0cmVhbSA8PCBpbmRl
eDsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGluZm8gPSBpbmZvU3RyZWFtLnN0cigpOworICAg
ICAgICAgICAgZXJyb3IobG9jYXRpb24sICJuZWdhdGl2ZSBpbmRleCIsIGluZm8uY19zdHIoKSk7
CisgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICBpbmRleCA9IDA7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGJhc2VFeHByZXNzaW9uLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkg
PT0gRXZxQ29uc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChiYXNlRXhwcmVzc2lvbi0+
aXNBcnJheSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIGNvbnN0YW50IGZv
bGRpbmcgZm9yIGFycmF5cworICAgICAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uID0gYWRk
Q29uc3RBcnJheU5vZGUoaW5kZXgsIGJhc2VFeHByZXNzaW9uLCBsb2NhdGlvbik7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNWZWN0b3IoKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2
ZWN0b3JzCisgICAgICAgICAgICAgICAgVFZlY3RvckZpZWxkcyBmaWVsZHM7CisgICAgICAgICAg
ICAgICAgZmllbGRzLm51bSA9IDE7CisgICAgICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbMF0g
PSBpbmRleDsgLy8gbmVlZCB0byBkbyBpdCB0aGlzIHdheSBiZWNhdXNlIHYueHkgc2VuZHMgZmll
bGRzIGludGVnZXIgYXJyYXkKKyAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGFk
ZENvbnN0VmVjdG9yTm9kZShmaWVsZHMsIGJhc2VFeHByZXNzaW9uLCBsb2NhdGlvbik7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNNYXRyaXgo
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBjb25zdGFudCBmb2xkaW5nIGZv
ciBtYXRyaWNlcworICAgICAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uID0gYWRkQ29uc3RN
YXRyaXhOb2RlKGluZGV4LCBiYXNlRXhwcmVzc2lvbiwgbG9jYXRpb24pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGJh
c2VFeHByZXNzaW9uLT5pc0FycmF5KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aWYgKGluZGV4ID49IGJhc2VFeHByZXNzaW9uLT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBl
eHRyYUluZm9TdHJlYW07CisgICAgICAgICAgICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAi
YXJyYXkgaW5kZXggb3V0IG9mIHJhbmdlICciIDw8IGluZGV4IDw8ICInIjsKKyAgICAgICAgICAg
ICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOwor
ICAgICAgICAgICAgICAgICAgICBlcnJvcihsb2NhdGlvbiwgIiIsICJbIiwgZXh0cmFJbmZvLmNf
c3RyKCkpOworICAgICAgICAgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICAgICAg
ICAgIGluZGV4ID0gYmFzZUV4cHJlc3Npb24tPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSAtIDE7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGJhc2VFeHByZXNz
aW9uLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFGcmFnRGF0YSAmJiBpbmRleCA+IDAgJiYgIWlzRXh0
ZW5zaW9uRW5hYmxlZCgiR0xfRVhUX2RyYXdfYnVmZmVycyIpKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgZXJyb3IobG9jYXRpb24sICIiLCAiWyIsICJhcnJheSBpbmRl
eGVzIGZvciBnbF9GcmFnRGF0YSBtdXN0IGJlIHplcm8gd2hlbiBHTF9FWFRfZHJhd19idWZmZXJz
IGlzIGRpc2FibGVkIik7CisgICAgICAgICAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAg
ICAgICAgICAgICAgaW5kZXggPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgaWYgKChiYXNlRXhwcmVzc2lvbi0+aXNWZWN0b3IoKSB8fCBiYXNl
RXhwcmVzc2lvbi0+aXNNYXRyaXgoKSkgJiYgYmFzZUV4cHJlc3Npb24tPmdldFR5cGUoKS5nZXRO
b21pbmFsU2l6ZSgpIDw9IGluZGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0
ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgICAgICAgICBleHRyYUlu
Zm9TdHJlYW0gPDwgImZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIgPDwgaW5kZXggPDwg
IiciOworICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0
cmVhbS5zdHIoKTsKKyAgICAgICAgICAgICAgICBlcnJvcihsb2NhdGlvbiwgIiIsICJbIiwgZXh0
cmFJbmZvLmNfc3RyKCkpOworICAgICAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgICAg
ICAgICBpbmRleCA9IGJhc2VFeHByZXNzaW9uLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSAt
IDE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGluZGV4RXhwcmVzc2lvbi0+Z2V0QXND
b25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPnNldElDb25zdChpbmRleCk7
CisgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGludGVybWVkaWF0ZS5hZGRJbmRleChF
T3BJbmRleERpcmVjdCwgYmFzZUV4cHJlc3Npb24sIGluZGV4RXhwcmVzc2lvbiwgbG9jYXRpb24p
OworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGluZGV4ZWRFeHBy
ZXNzaW9uID0gaW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4SW5kaXJlY3QsIGJhc2VFeHBy
ZXNzaW9uLCBpbmRleEV4cHJlc3Npb24sIGxvY2F0aW9uKTsKKyAgICB9CisKKyAgICBpZiAoaW5k
ZXhlZEV4cHJlc3Npb24gPT0gMCkKKyAgICB7CisgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9u
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgdW5pb25BcnJheS0+c2V0RkNv
bnN0KDAuMGYpOworICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFDb25z
dCksIGxvY2F0aW9uKTsKKyAgICB9CisgICAgZWxzZSBpZiAoYmFzZUV4cHJlc3Npb24tPmlzQXJy
YXkoKSkKKyAgICB7CisgICAgICAgIGNvbnN0IFRUeXBlICZiYXNlVHlwZSA9IGJhc2VFeHByZXNz
aW9uLT5nZXRUeXBlKCk7CisgICAgICAgIGlmIChiYXNlVHlwZS5nZXRTdHJ1Y3QoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgVFR5cGUgY29weU9mVHlwZShiYXNlVHlwZS5nZXRTdHJ1Y3QoKSk7
CisgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0VHlwZShjb3B5T2ZUeXBlKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZGV4ZWRFeHBy
ZXNzaW9uLT5zZXRUeXBlKFRUeXBlKGJhc2VFeHByZXNzaW9uLT5nZXRCYXNpY1R5cGUoKSwgYmFz
ZUV4cHJlc3Npb24tPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksIGJhc2VFeHByZXNzaW9u
LT5nZXROb21pbmFsU2l6ZSgpLCBiYXNlRXhwcmVzc2lvbi0+aXNNYXRyaXgoKSkpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGJhc2VFeHByZXNzaW9uLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVy
KCkgPT0gRXZxQ29uc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9u
LT5nZXRUeXBlUG9pbnRlcigpLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3QpOworICAgICAgICB9Cisg
ICAgfQorICAgIGVsc2UgaWYgKGJhc2VFeHByZXNzaW9uLT5pc01hdHJpeCgpKQorICAgIHsKKyAg
ICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBiYXNlRXhwcmVzc2lvbi0+Z2V0VHlwZSgpLmdl
dFF1YWxpZmllcigpID09IEV2cUNvbnN0ID8gRXZxQ29uc3QgOiBFdnFUZW1wb3Jhcnk7CisgICAg
ICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKFRUeXBlKGJhc2VFeHByZXNzaW9uLT5nZXRC
YXNpY1R5cGUoKSwgYmFzZUV4cHJlc3Npb24tPmdldFByZWNpc2lvbigpLCBxdWFsaWZpZXIsIGJh
c2VFeHByZXNzaW9uLT5nZXROb21pbmFsU2l6ZSgpKSk7CisgICAgfQorICAgIGVsc2UgaWYgKGJh
c2VFeHByZXNzaW9uLT5pc1ZlY3RvcigpKQorICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFs
aWZpZXIgPSBiYXNlRXhwcmVzc2lvbi0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNv
bnN0ID8gRXZxQ29uc3QgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgIGluZGV4ZWRFeHByZXNzaW9u
LT5zZXRUeXBlKFRUeXBlKGJhc2VFeHByZXNzaW9uLT5nZXRCYXNpY1R5cGUoKSwgYmFzZUV4cHJl
c3Npb24tPmdldFByZWNpc2lvbigpLCBxdWFsaWZpZXIpKTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoYmFzZUV4cHJlc3Npb24tPmdl
dFR5cGUoKSk7CisgICAgfQorCisgICAgcmV0dXJuIGluZGV4ZWRFeHByZXNzaW9uOworfQorCisv
LworLy8gUGFyc2UgYW4gYXJyYXkgb2Ygc3RyaW5ncyB1c2luZyB5eXBhcnNlLgorLy8KKy8vIFJl
dHVybnMgMCBmb3Igc3VjY2Vzcy4KKy8vCitpbnQgUGFQYXJzZVN0cmluZ3Moc2l6ZV90IGNvdW50
LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdLAorICAgICAg
ICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKKyAgICBpZiAoKGNvdW50ID09
IDApIHx8IChzdHJpbmcgPT0gTlVMTCkpCisgICAgICAgIHJldHVybiAxOworCisgICAgaWYgKGds
c2xhbmdfaW5pdGlhbGl6ZShjb250ZXh0KSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBpbnQg
ZXJyb3IgPSBnbHNsYW5nX3NjYW4oY291bnQsIHN0cmluZywgbGVuZ3RoLCBjb250ZXh0KTsKKyAg
ICBpZiAoIWVycm9yKQorICAgICAgICBlcnJvciA9IGdsc2xhbmdfcGFyc2UoY29udGV4dCk7CisK
KyAgICBnbHNsYW5nX2ZpbmFsaXplKGNvbnRleHQpOworCisgICAgcmV0dXJuIChlcnJvciA9PSAw
KSAmJiAoY29udGV4dC0+bnVtRXJyb3JzKCkgPT0gMCkgPyAwIDogMTsKK30KKworCisKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Bh
cnNlQ29udGV4dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvUGFyc2VDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjMyNGU1NzVkMzViMzk5ZDU4OWY0N2Nm
ZWNkNjM0YTVhNDk3ZTZiYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5oCkBAIC0wLDAgKzEsMTM0
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworI2lmbmRlZiBfUEFSU0VSX0hFTFBFUl9JTkNMVURFRF8K
KyNkZWZpbmUgX1BBUlNFUl9IRUxQRVJfSU5DTFVERURfCisKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL0RpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9E
aXJlY3RpdmVIYW5kbGVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9sb2NhbGlu
dGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNz
b3IuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1NoSGFuZGxlLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJsZS5oIgorCitzdHJ1Y3QgVE1hdHJpeEZp
ZWxkcyB7CisgICAgYm9vbCB3aG9sZVJvdzsKKyAgICBib29sIHdob2xlQ29sOworICAgIGludCBy
b3c7CisgICAgaW50IGNvbDsKK307CisKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBleHRyYSB2
YXJpYWJsZXMgbmVlZGVkIGR1cmluZyBwYXJzaW5nLCBncm91cGVkIHRvZ2V0aGVyIHNvCisvLyB0
aGV5IGNhbiBiZSBwYXNzZWQgdG8gdGhlIHBhcnNlciB3aXRob3V0IG5lZWRpbmcgYSBnbG9iYWwu
CisvLworc3RydWN0IFRQYXJzZUNvbnRleHQgeworICAgIFRQYXJzZUNvbnRleHQoVFN5bWJvbFRh
YmxlJiBzeW10LCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dCwgVEludGVybWVkaWF0ZSYgaW50ZXJt
LCBTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsIGludCBvcHRpb25zLCBib29s
IGNoZWNrc1ByZWNFcnJvcnMsIGNvbnN0IGNoYXIqIHNvdXJjZVBhdGgsIFRJbmZvU2luayYgaXMp
IDoKKyAgICAgICAgICAgIGludGVybWVkaWF0ZShpbnRlcm0pLAorICAgICAgICAgICAgc3ltYm9s
VGFibGUoc3ltdCksCisgICAgICAgICAgICBzaGFkZXJUeXBlKHR5cGUpLAorICAgICAgICAgICAg
c2hhZGVyU3BlYyhzcGVjKSwKKyAgICAgICAgICAgIGNvbXBpbGVPcHRpb25zKG9wdGlvbnMpLAor
ICAgICAgICAgICAgc291cmNlUGF0aChzb3VyY2VQYXRoKSwKKyAgICAgICAgICAgIHRyZWVSb290
KDApLAorICAgICAgICAgICAgbG9vcE5lc3RpbmdMZXZlbCgwKSwKKyAgICAgICAgICAgIHN0cnVj
dE5lc3RpbmdMZXZlbCgwKSwKKyAgICAgICAgICAgIGN1cnJlbnRGdW5jdGlvblR5cGUoTlVMTCks
CisgICAgICAgICAgICBmdW5jdGlvblJldHVybnNWYWx1ZShmYWxzZSksCisgICAgICAgICAgICBj
aGVja3NQcmVjaXNpb25FcnJvcnMoY2hlY2tzUHJlY0Vycm9ycyksCisgICAgICAgICAgICBkaWFn
bm9zdGljcyhpcyksCisgICAgICAgICAgICBkaXJlY3RpdmVIYW5kbGVyKGV4dCwgZGlhZ25vc3Rp
Y3MpLAorICAgICAgICAgICAgcHJlcHJvY2Vzc29yKCZkaWFnbm9zdGljcywgJmRpcmVjdGl2ZUhh
bmRsZXIpLAorICAgICAgICAgICAgc2Nhbm5lcihOVUxMKSB7ICB9CisgICAgVEludGVybWVkaWF0
ZSYgaW50ZXJtZWRpYXRlOyAvLyB0byBob2xkIGFuZCBidWlsZCBhIHBhcnNlIHRyZWUKKyAgICBU
U3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlOyAgIC8vIHN5bWJvbCB0YWJsZSB0aGF0IGdvZXMgd2l0
aCB0aGUgbGFuZ3VhZ2UgY3VycmVudGx5IGJlaW5nIHBhcnNlZAorICAgIFNoU2hhZGVyVHlwZSBz
aGFkZXJUeXBlOyAgICAgICAgICAgICAgLy8gdmVydGV4IG9yIGZyYWdtZW50IGxhbmd1YWdlIChm
dXR1cmU6IHBhY2sgb3IgdW5wYWNrKQorICAgIFNoU2hhZGVyU3BlYyBzaGFkZXJTcGVjOyAgICAg
ICAgICAgICAgLy8gVGhlIGxhbmd1YWdlIHNwZWNpZmljYXRpb24gY29tcGlsZXIgY29uZm9ybXMg
dG8gLSBHTEVTMiBvciBXZWJHTC4KKyAgICBpbnQgY29tcGlsZU9wdGlvbnM7CisgICAgY29uc3Qg
Y2hhciogc291cmNlUGF0aDsgICAgICAvLyBQYXRoIG9mIHNvdXJjZSBmaWxlIG9yIE5VTEwuCisg
ICAgVEludGVybU5vZGUqIHRyZWVSb290OyAgICAgICAvLyByb290IG9mIHBhcnNlIHRyZWUgYmVp
bmcgY3JlYXRlZAorICAgIGludCBsb29wTmVzdGluZ0xldmVsOyAgICAgICAgLy8gMCBpZiBvdXRz
aWRlIGFsbCBsb29wcworICAgIGludCBzdHJ1Y3ROZXN0aW5nTGV2ZWw7ICAgICAgLy8gaW5jcmVt
ZW50ZWQgd2hpbGUgcGFyc2luZyBhIHN0cnVjdCBkZWNsYXJhdGlvbgorICAgIGNvbnN0IFRUeXBl
KiBjdXJyZW50RnVuY3Rpb25UeXBlOyAgLy8gdGhlIHJldHVybiB0eXBlIG9mIHRoZSBmdW5jdGlv
biB0aGF0J3MgY3VycmVudGx5IGJlaW5nIHBhcnNlZAorICAgIGJvb2wgZnVuY3Rpb25SZXR1cm5z
VmFsdWU7ICAgLy8gdHJ1ZSBpZiBhIG5vbi12b2lkIGZ1bmN0aW9uIGhhcyBhIHJldHVybgorICAg
IGJvb2wgY2hlY2tzUHJlY2lzaW9uRXJyb3JzOyAgLy8gdHJ1ZSBpZiBhbiBlcnJvciB3aWxsIGJl
IGdlbmVyYXRlZCB3aGVuIGEgdmFyaWFibGUgaXMgZGVjbGFyZWQgd2l0aG91dCBwcmVjaXNpb24s
IGV4cGxpY2l0IG9yIGltcGxpY2l0LgorICAgIGJvb2wgZnJhZ21lbnRQcmVjaXNpb25IaWdoOyAg
Ly8gdHJ1ZSBpZiBoaWdocCBwcmVjaXNpb24gaXMgc3VwcG9ydGVkIGluIHRoZSBmcmFnbWVudCBs
YW5ndWFnZS4KKyAgICBUU3RyaW5nIEhhc2hFcnJNc2c7CisgICAgVERpYWdub3N0aWNzIGRpYWdu
b3N0aWNzOworICAgIFREaXJlY3RpdmVIYW5kbGVyIGRpcmVjdGl2ZUhhbmRsZXI7CisgICAgcHA6
OlByZXByb2Nlc3NvciBwcmVwcm9jZXNzb3I7CisgICAgdm9pZCogc2Nhbm5lcjsKKworICAgIGlu
dCBudW1FcnJvcnMoKSBjb25zdCB7IHJldHVybiBkaWFnbm9zdGljcy5udW1FcnJvcnMoKTsgfQor
ICAgIFRJbmZvU2luayYgaW5mb1NpbmsoKSB7IHJldHVybiBkaWFnbm9zdGljcy5pbmZvU2luaygp
OyB9CisgICAgdm9pZCBlcnJvcihjb25zdCBUU291cmNlTG9jJiBsb2MsIGNvbnN0IGNoYXIgKnJl
YXNvbiwgY29uc3QgY2hhciogdG9rZW4sCisgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRy
YUluZm89IiIpOworICAgIHZvaWQgd2FybmluZyhjb25zdCBUU291cmNlTG9jJiBsb2MsIGNvbnN0
IGNoYXIqIHJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4sCisgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIqIGV4dHJhSW5mbz0iIik7CisgICAgdm9pZCB0cmFjZShjb25zdCBjaGFyKiBzdHIpOwor
ICAgIHZvaWQgcmVjb3ZlcigpOworCisgICAgYm9vbCBwYXJzZVZlY3RvckZpZWxkcyhjb25zdCBU
U3RyaW5nJiwgaW50IHZlY1NpemUsIFRWZWN0b3JGaWVsZHMmLCBjb25zdCBUU291cmNlTG9jJiBs
aW5lKTsKKyAgICBib29sIHBhcnNlTWF0cml4RmllbGRzKGNvbnN0IFRTdHJpbmcmLCBpbnQgbWF0
U2l6ZSwgVE1hdHJpeEZpZWxkcyYsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpOworCisgICAgYm9v
bCByZXNlcnZlZEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmlu
ZyYgaWRlbnRpZmllcik7CisgICAgdm9pZCBhc3NpZ25FcnJvcihjb25zdCBUU291cmNlTG9jJiBs
aW5lLCBjb25zdCBjaGFyKiBvcCwgVFN0cmluZyBsZWZ0LCBUU3RyaW5nIHJpZ2h0KTsKKyAgICB2
b2lkIHVuYXJ5T3BFcnJvcihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBjaGFyKiBvcCwg
VFN0cmluZyBvcGVyYW5kKTsKKyAgICB2b2lkIGJpbmFyeU9wRXJyb3IoY29uc3QgVFNvdXJjZUxv
YyYgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgbGVmdCwgVFN0cmluZyByaWdodCk7Cisg
ICAgYm9vbCBwcmVjaXNpb25FcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRQcmVj
aXNpb24gcHJlY2lzaW9uLCBUQmFzaWNUeXBlIHR5cGUpOworICAgIGJvb2wgbFZhbHVlRXJyb3JD
aGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVEludGVybVR5cGVk
Kik7CisgICAgYm9vbCBjb25zdEVycm9yQ2hlY2soVEludGVybVR5cGVkKiBub2RlKTsKKyAgICBi
b29sIGludGVnZXJFcnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSwgY29uc3QgY2hhciogdG9r
ZW4pOworICAgIGJvb2wgZ2xvYmFsRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBi
b29sIGdsb2JhbCwgY29uc3QgY2hhciogdG9rZW4pOworICAgIGJvb2wgY29uc3RydWN0b3JFcnJv
ckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRJbnRlcm1Ob2RlKiwgVEZ1bmN0aW9uJiwg
VE9wZXJhdG9yLCBUVHlwZSopOworICAgIGJvb2wgYXJyYXlTaXplRXJyb3JDaGVjayhjb25zdCBU
U291cmNlTG9jJiBsaW5lLCBUSW50ZXJtVHlwZWQqIGV4cHIsIGludCYgc2l6ZSk7CisgICAgYm9v
bCBhcnJheVF1YWxpZmllckVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFB1Ymxp
Y1R5cGUgdHlwZSk7CisgICAgYm9vbCBhcnJheVR5cGVFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VM
b2MmIGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpOworICAgIGJvb2wgYXJyYXlFcnJvckNoZWNrKGNv
bnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlIHR5
cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKTsKKyAgICBib29sIHZvaWRFcnJvckNoZWNrKGNvbnN0
IFRTb3VyY2VMb2MmLCBjb25zdCBUU3RyaW5nJiwgY29uc3QgVFB1YmxpY1R5cGUmKTsKKyAgICBi
b29sIGJvb2xFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmLCBjb25zdCBUSW50ZXJtVHlwZWQq
KTsKKyAgICBib29sIGJvb2xFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmLCBjb25zdCBUUHVi
bGljVHlwZSYpOworICAgIGJvb2wgc2FtcGxlckVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYg
bGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlLCBjb25zdCBjaGFyKiByZWFzb24pOworICAg
IGJvb2wgc3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBj
b25zdCBUUHVibGljVHlwZSYgcFR5cGUpOworICAgIGJvb2wgcGFyYW1ldGVyU2FtcGxlckVycm9y
Q2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIGNvbnN0
IFRUeXBlJiB0eXBlKTsKKyAgICBib29sIG5vbkluaXRDb25zdEVycm9yQ2hlY2soY29uc3QgVFNv
dXJjZUxvYyYgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHR5cGUsIGJv
b2wgYXJyYXkpOworICAgIGJvb2wgbm9uSW5pdEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYg
bGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHR5cGUsIFRWYXJpYWJsZSom
IHZhcmlhYmxlKTsKKyAgICBib29sIHBhcmFtRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBs
aW5lLCBUUXVhbGlmaWVyIHF1YWxpZmllciwgVFF1YWxpZmllciBwYXJhbVF1YWxpZmllciwgVFR5
cGUqIHR5cGUpOworICAgIGJvb2wgZXh0ZW5zaW9uRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9j
JiBsaW5lLCBjb25zdCBUU3RyaW5nJik7CisKKyAgICBjb25zdCBUUHJhZ21hJiBwcmFnbWEoKSBj
b25zdCB7IHJldHVybiBkaXJlY3RpdmVIYW5kbGVyLnByYWdtYSgpOyB9CisgICAgY29uc3QgVEV4
dGVuc2lvbkJlaGF2aW9yJiBleHRlbnNpb25CZWhhdmlvcigpIGNvbnN0IHsgcmV0dXJuIGRpcmVj
dGl2ZUhhbmRsZXIuZXh0ZW5zaW9uQmVoYXZpb3IoKTsgfQorICAgIGJvb2wgc3VwcG9ydHNFeHRl
bnNpb24oY29uc3QgY2hhciogZXh0ZW5zaW9uKTsKKyAgICBib29sIGlzRXh0ZW5zaW9uRW5hYmxl
ZChjb25zdCBjaGFyKiBleHRlbnNpb24pIGNvbnN0OworCisgICAgYm9vbCBjb250YWluc1NhbXBs
ZXIoVFR5cGUmIHR5cGUpOworICAgIGJvb2wgYXJlQWxsQ2hpbGRDb25zdChUSW50ZXJtQWdncmVn
YXRlKiBhZ2dyTm9kZSk7CisgICAgY29uc3QgVEZ1bmN0aW9uKiBmaW5kRnVuY3Rpb24oY29uc3Qg
VFNvdXJjZUxvYyYgbGluZSwgVEZ1bmN0aW9uKiBwZm5DYWxsLCBib29sICpidWlsdEluID0gMCk7
CisgICAgYm9vbCBleGVjdXRlSW5pdGlhbGl6ZXIoY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFN0
cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHBUeXBlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5pdGlhbGl6ZXIsIFRJbnRlcm1Ob2RlKiYgaW50ZXJt
Tm9kZSwgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDApOworCisgICAgVEludGVybVR5cGVkKiBhZGRD
b25zdHJ1Y3RvcihUSW50ZXJtTm9kZSosIGNvbnN0IFRUeXBlKiwgVE9wZXJhdG9yLCBURnVuY3Rp
b24qLCBjb25zdCBUU291cmNlTG9jJik7CisgICAgVEludGVybVR5cGVkKiBmb2xkQ29uc3RDb25z
dHJ1Y3RvcihUSW50ZXJtQWdncmVnYXRlKiBhZ2dyTm9kZSwgY29uc3QgVFR5cGUmIHR5cGUpOwor
ICAgIFRJbnRlcm1UeXBlZCogY29uc3RydWN0U3RydWN0KFRJbnRlcm1Ob2RlKiwgVFR5cGUqLCBp
bnQsIGNvbnN0IFRTb3VyY2VMb2MmLCBib29sIHN1YnNldCk7CisgICAgVEludGVybVR5cGVkKiBj
b25zdHJ1Y3RCdWlsdEluKGNvbnN0IFRUeXBlKiwgVE9wZXJhdG9yLCBUSW50ZXJtTm9kZSosIGNv
bnN0IFRTb3VyY2VMb2MmLCBib29sIHN1YnNldCk7CisgICAgVEludGVybVR5cGVkKiBhZGRDb25z
dFZlY3Rvck5vZGUoVFZlY3RvckZpZWxkcyYsIFRJbnRlcm1UeXBlZCosIGNvbnN0IFRTb3VyY2VM
b2MmKTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0TWF0cml4Tm9kZShpbnQgLCBUSW50ZXJt
VHlwZWQqLCBjb25zdCBUU291cmNlTG9jJik7CisgICAgVEludGVybVR5cGVkKiBhZGRDb25zdEFy
cmF5Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBlZCogbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYg
bGluZSk7CisgICAgVEludGVybVR5cGVkKiBhZGRDb25zdFN0cnVjdChUU3RyaW5nJiAsIFRJbnRl
cm1UeXBlZCosIGNvbnN0IFRTb3VyY2VMb2MmKTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZEluZGV4
RXhwcmVzc2lvbihUSW50ZXJtVHlwZWQgKmJhc2VFeHByZXNzaW9uLCBjb25zdCBUU291cmNlTG9j
JiBsb2NhdGlvbiwgVEludGVybVR5cGVkICppbmRleEV4cHJlc3Npb24pOworCisgICAgLy8gUGVy
Zm9ybXMgYW4gZXJyb3IgY2hlY2sgZm9yIGVtYmVkZGVkIHN0cnVjdCBkZWNsYXJhdGlvbnMuCisg
ICAgLy8gUmV0dXJucyB0cnVlIGlmIGFuIGVycm9yIHdhcyByYWlzZWQgZHVlIHRvIHRoZSBkZWNs
YXJhdGlvbiBvZgorICAgIC8vIHRoaXMgc3RydWN0LgorICAgIGJvb2wgZW50ZXJTdHJ1Y3REZWNs
YXJhdGlvbihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVy
KTsKKyAgICB2b2lkIGV4aXRTdHJ1Y3REZWNsYXJhdGlvbigpOworCisgICAgYm9vbCBzdHJ1Y3RO
ZXN0aW5nRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBURmllbGQmIGZp
ZWxkKTsKK307CisKK2ludCBQYVBhcnNlU3RyaW5ncyhzaXplX3QgY291bnQsIGNvbnN0IGNoYXIq
IGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAgICAgICAgICAgICAg
VFBhcnNlQ29udGV4dCogY29udGV4dCk7CisKKyNlbmRpZiAvLyBfUEFSU0VSX0hFTFBFUl9JTkNM
VURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1Bvb2xBbGxvYy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9Qb29sQWxsb2MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFiZTcwMjYyZjJkMGQ5
ZWYwMTUwMjU1YTMzZTY1ZmRkMGU5MzNmNTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Qb29sQWxsb2MuY3BwCkBAIC0w
LDAgKzEsMjk0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9Qb29sQWxsb2MuaCIKKworI2lmbmRlZiBfTVNDX1ZFUgorI2luY2x1ZGUgPHN0ZGlu
dC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplR2xvYmFs
cy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Ivb3NpbmNsdWRlLmgiCisKK09TX1RM
U0luZGV4IFBvb2xJbmRleCA9IE9TX0lOVkFMSURfVExTX0lOREVYOworCitib29sIEluaXRpYWxp
emVQb29sSW5kZXgoKQoreworICAgIGFzc2VydChQb29sSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNf
SU5ERVgpOworCisgICAgUG9vbEluZGV4ID0gT1NfQWxsb2NUTFNJbmRleCgpOworICAgIHJldHVy
biBQb29sSW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7Cit9CisKK3ZvaWQgRnJlZVBvb2xJ
bmRleCgpCit7CisgICAgYXNzZXJ0KFBvb2xJbmRleCAhPSBPU19JTlZBTElEX1RMU19JTkRFWCk7
CisKKyAgICBPU19GcmVlVExTSW5kZXgoUG9vbEluZGV4KTsKKyAgICBQb29sSW5kZXggPSBPU19J
TlZBTElEX1RMU19JTkRFWDsKK30KKworVFBvb2xBbGxvY2F0b3IqIEdldEdsb2JhbFBvb2xBbGxv
Y2F0b3IoKQoreworICAgIGFzc2VydChQb29sSW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgp
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUUG9vbEFsbG9jYXRvcio+KE9TX0dldFRMU1ZhbHVl
KFBvb2xJbmRleCkpOworfQorCit2b2lkIFNldEdsb2JhbFBvb2xBbGxvY2F0b3IoVFBvb2xBbGxv
Y2F0b3IqIHBvb2xBbGxvY2F0b3IpCit7CisgICAgYXNzZXJ0KFBvb2xJbmRleCAhPSBPU19JTlZB
TElEX1RMU19JTkRFWCk7CisgICAgT1NfU2V0VExTVmFsdWUoUG9vbEluZGV4LCBwb29sQWxsb2Nh
dG9yKTsKK30KKworLy8KKy8vIEltcGxlbWVudCB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgVFBv
b2xBbGxvY2F0b3IgY2xhc3MsIHdoaWNoCisvLyBpcyBkb2N1bWVudGVkIGluIFBvb2xBbGxvYy5o
LgorLy8KK1RQb29sQWxsb2NhdG9yOjpUUG9vbEFsbG9jYXRvcihpbnQgZ3Jvd3RoSW5jcmVtZW50
LCBpbnQgYWxsb2NhdGlvbkFsaWdubWVudCkgOiAKKyAgICBwYWdlU2l6ZShncm93dGhJbmNyZW1l
bnQpLAorICAgIGFsaWdubWVudChhbGxvY2F0aW9uQWxpZ25tZW50KSwKKyAgICBmcmVlTGlzdCgw
KSwKKyAgICBpblVzZUxpc3QoMCksCisgICAgbnVtQ2FsbHMoMCksCisgICAgdG90YWxCeXRlcygw
KQoreworICAgIC8vCisgICAgLy8gRG9uJ3QgYWxsb3cgcGFnZSBzaXplcyB3ZSBrbm93IGFyZSBz
bWFsbGVyIHRoYW4gYWxsIGNvbW1vbgorICAgIC8vIE9TIHBhZ2Ugc2l6ZXMuCisgICAgLy8KKyAg
ICBpZiAocGFnZVNpemUgPCA0KjEwMjQpCisgICAgICAgIHBhZ2VTaXplID0gNCoxMDI0OworCisg
ICAgLy8KKyAgICAvLyBBIGxhcmdlIGN1cnJlbnRQYWdlT2Zmc2V0IGluZGljYXRlcyBhIG5ldyBw
YWdlIG5lZWRzIHRvCisgICAgLy8gYmUgb2J0YWluZWQgdG8gYWxsb2NhdGUgbWVtb3J5LgorICAg
IC8vCisgICAgY3VycmVudFBhZ2VPZmZzZXQgPSBwYWdlU2l6ZTsKKworICAgIC8vCisgICAgLy8g
QWRqdXN0IGFsaWdubWVudCB0byBiZSBhdCBsZWFzdCBwb2ludGVyIGFsaWduZWQgYW5kCisgICAg
Ly8gcG93ZXIgb2YgMi4KKyAgICAvLworICAgIHNpemVfdCBtaW5BbGlnbiA9IHNpemVvZih2b2lk
Kik7CisgICAgYWxpZ25tZW50ICY9IH4obWluQWxpZ24gLSAxKTsKKyAgICBpZiAoYWxpZ25tZW50
IDwgbWluQWxpZ24pCisgICAgICAgIGFsaWdubWVudCA9IG1pbkFsaWduOworICAgIHNpemVfdCBh
ID0gMTsKKyAgICB3aGlsZSAoYSA8IGFsaWdubWVudCkKKyAgICAgICAgYSA8PD0gMTsKKyAgICBh
bGlnbm1lbnQgPSBhOworICAgIGFsaWdubWVudE1hc2sgPSBhIC0gMTsKKworICAgIC8vCisgICAg
Ly8gQWxpZ24gaGVhZGVyIHNraXAKKyAgICAvLworICAgIGhlYWRlclNraXAgPSBtaW5BbGlnbjsK
KyAgICBpZiAoaGVhZGVyU2tpcCA8IHNpemVvZih0SGVhZGVyKSkgeworICAgICAgICBoZWFkZXJT
a2lwID0gKHNpemVvZih0SGVhZGVyKSArIGFsaWdubWVudE1hc2spICYgfmFsaWdubWVudE1hc2s7
CisgICAgfQorfQorCitUUG9vbEFsbG9jYXRvcjo6flRQb29sQWxsb2NhdG9yKCkKK3sKKyAgICB3
aGlsZSAoaW5Vc2VMaXN0KSB7CisgICAgICAgIHRIZWFkZXIqIG5leHQgPSBpblVzZUxpc3QtPm5l
eHRQYWdlOworICAgICAgICBpblVzZUxpc3QtPn50SGVhZGVyKCk7CisgICAgICAgIGRlbGV0ZSBb
XSByZWludGVycHJldF9jYXN0PGNoYXIqPihpblVzZUxpc3QpOworICAgICAgICBpblVzZUxpc3Qg
PSBuZXh0OworICAgIH0KKworICAgIC8vIFdlIHNob3VsZCBub3QgY2hlY2sgdGhlIGd1YXJkIGJs
b2NrcworICAgIC8vIGhlcmUsIGJlY2F1c2Ugd2UgZGlkIGl0IGFscmVhZHkgd2hlbiB0aGUgYmxv
Y2sgd2FzCisgICAgLy8gcGxhY2VkIGludG8gdGhlIGZyZWUgbGlzdC4KKyAgICAvLworICAgIHdo
aWxlIChmcmVlTGlzdCkgeworICAgICAgICB0SGVhZGVyKiBuZXh0ID0gZnJlZUxpc3QtPm5leHRQ
YWdlOworICAgICAgICBkZWxldGUgW10gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZnJlZUxpc3Qp
OworICAgICAgICBmcmVlTGlzdCA9IG5leHQ7CisgICAgfQorfQorCisvLyBTdXBwb3J0IE1TVkMr
KyA2LjAKK2NvbnN0IHVuc2lnbmVkIGNoYXIgVEFsbG9jYXRpb246Omd1YXJkQmxvY2tCZWdpblZh
bCA9IDB4ZmI7Citjb25zdCB1bnNpZ25lZCBjaGFyIFRBbGxvY2F0aW9uOjpndWFyZEJsb2NrRW5k
VmFsICAgPSAweGZlOworY29uc3QgdW5zaWduZWQgY2hhciBUQWxsb2NhdGlvbjo6dXNlckRhdGFG
aWxsICAgICAgID0gMHhjZDsKKworI2lmZGVmIEdVQVJEX0JMT0NLUworICAgIGNvbnN0IHNpemVf
dCBUQWxsb2NhdGlvbjo6Z3VhcmRCbG9ja1NpemUgPSAxNjsKKyNlbHNlCisgICAgY29uc3Qgc2l6
ZV90IFRBbGxvY2F0aW9uOjpndWFyZEJsb2NrU2l6ZSA9IDA7CisjZW5kaWYKKworLy8KKy8vIENo
ZWNrIGEgc2luZ2xlIGd1YXJkIGJsb2NrIGZvciBkYW1hZ2UKKy8vCit2b2lkIFRBbGxvY2F0aW9u
OjpjaGVja0d1YXJkQmxvY2sodW5zaWduZWQgY2hhciogYmxvY2tNZW0sIHVuc2lnbmVkIGNoYXIg
dmFsLCBjb25zdCBjaGFyKiBsb2NUZXh0KSBjb25zdAoreworI2lmZGVmIEdVQVJEX0JMT0NLUwor
ICAgIGZvciAoc2l6ZV90IHggPSAwOyB4IDwgZ3VhcmRCbG9ja1NpemU7IHgrKykgeworICAgICAg
ICBpZiAoYmxvY2tNZW1beF0gIT0gdmFsKSB7CisgICAgICAgICAgICBjaGFyIGFzc2VydE1zZ1s4
MF07CisKKyAgICAgICAgICAgIC8vIFdlIGRvbid0IHByaW50IHRoZSBhc3NlcnQgbWVzc2FnZS4g
IEl0J3MgaGVyZSBqdXN0IHRvIGJlIGhlbHBmdWwuCisjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyAg
ICAgICAgICAgIHNucHJpbnRmKGFzc2VydE1zZywgc2l6ZW9mKGFzc2VydE1zZyksICJQb29sQWxs
b2M6IERhbWFnZSAlcyAlSXUgYnl0ZSBhbGxvY2F0aW9uIGF0IDB4JXBcbiIsCisgICAgICAgICAg
ICAgICAgICAgIGxvY1RleHQsIHNpemUsIGRhdGEoKSk7CisjZWxzZQorICAgICAgICAgICAgc25w
cmludGYoYXNzZXJ0TXNnLCBzaXplb2YoYXNzZXJ0TXNnKSwgIlBvb2xBbGxvYzogRGFtYWdlICVz
ICV6dSBieXRlIGFsbG9jYXRpb24gYXQgMHglcFxuIiwKKyAgICAgICAgICAgICAgICAgICAgbG9j
VGV4dCwgc2l6ZSwgZGF0YSgpKTsKKyNlbmRpZgorICAgICAgICAgICAgYXNzZXJ0KDAgJiYgIlBv
b2xBbGxvYzogRGFtYWdlIGluIGd1YXJkIGJsb2NrIik7CisgICAgICAgIH0KKyAgICB9CisjZW5k
aWYKK30KKworCit2b2lkIFRQb29sQWxsb2NhdG9yOjpwdXNoKCkKK3sKKyAgICB0QWxsb2NTdGF0
ZSBzdGF0ZSA9IHsgY3VycmVudFBhZ2VPZmZzZXQsIGluVXNlTGlzdCB9OworCisgICAgc3RhY2su
cHVzaF9iYWNrKHN0YXRlKTsKKyAgICAgICAgCisgICAgLy8KKyAgICAvLyBJbmRpY2F0ZSB0aGVy
ZSBpcyBubyBjdXJyZW50IHBhZ2UgdG8gYWxsb2NhdGUgZnJvbS4KKyAgICAvLworICAgIGN1cnJl
bnRQYWdlT2Zmc2V0ID0gcGFnZVNpemU7Cit9CisKKy8vCisvLyBEbyBhIG1hc3MtZGVhbGxvY2F0
aW9uIG9mIGFsbCB0aGUgaW5kaXZpZHVhbCBhbGxvY2F0aW9ucworLy8gdGhhdCBoYXZlIG9jY3Vy
cmVkIHNpbmNlIHRoZSBsYXN0IHB1c2goKSwgb3Igc2luY2UgdGhlCisvLyBsYXN0IHBvcCgpLCBv
ciBzaW5jZSB0aGUgb2JqZWN0J3MgY3JlYXRpb24uCisvLworLy8gVGhlIGRlYWxsb2NhdGVkIHBh
Z2VzIGFyZSBzYXZlZCBmb3IgZnV0dXJlIGFsbG9jYXRpb25zLgorLy8KK3ZvaWQgVFBvb2xBbGxv
Y2F0b3I6OnBvcCgpCit7CisgICAgaWYgKHN0YWNrLnNpemUoKSA8IDEpCisgICAgICAgIHJldHVy
bjsKKworICAgIHRIZWFkZXIqIHBhZ2UgPSBzdGFjay5iYWNrKCkucGFnZTsKKyAgICBjdXJyZW50
UGFnZU9mZnNldCA9IHN0YWNrLmJhY2soKS5vZmZzZXQ7CisKKyAgICB3aGlsZSAoaW5Vc2VMaXN0
ICE9IHBhZ2UpIHsKKyAgICAgICAgLy8gaW52b2tlIGRlc3RydWN0b3IgdG8gZnJlZSBhbGxvY2F0
aW9uIGxpc3QKKyAgICAgICAgaW5Vc2VMaXN0LT5+dEhlYWRlcigpOworICAgICAgICAKKyAgICAg
ICAgdEhlYWRlciogbmV4dEluVXNlID0gaW5Vc2VMaXN0LT5uZXh0UGFnZTsKKyAgICAgICAgaWYg
KGluVXNlTGlzdC0+cGFnZUNvdW50ID4gMSkKKyAgICAgICAgICAgIGRlbGV0ZSBbXSByZWludGVy
cHJldF9jYXN0PGNoYXIqPihpblVzZUxpc3QpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IGluVXNlTGlzdC0+bmV4dFBhZ2UgPSBmcmVlTGlzdDsKKyAgICAgICAgICAgIGZyZWVMaXN0ID0g
aW5Vc2VMaXN0OworICAgICAgICB9CisgICAgICAgIGluVXNlTGlzdCA9IG5leHRJblVzZTsKKyAg
ICB9CisKKyAgICBzdGFjay5wb3BfYmFjaygpOworfQorCisvLworLy8gRG8gYSBtYXNzLWRlYWxs
b2NhdGlvbiBvZiBhbGwgdGhlIGluZGl2aWR1YWwgYWxsb2NhdGlvbnMKKy8vIHRoYXQgaGF2ZSBv
Y2N1cnJlZC4KKy8vCit2b2lkIFRQb29sQWxsb2NhdG9yOjpwb3BBbGwoKQoreworICAgIHdoaWxl
IChzdGFjay5zaXplKCkgPiAwKQorICAgICAgICBwb3AoKTsKK30KKwordm9pZCogVFBvb2xBbGxv
Y2F0b3I6OmFsbG9jYXRlKHNpemVfdCBudW1CeXRlcykKK3sKKyAgICAvLworICAgIC8vIEp1c3Qg
a2VlcCBzb21lIGludGVyZXN0aW5nIHN0YXRpc3RpY3MuCisgICAgLy8KKyAgICArK251bUNhbGxz
OworICAgIHRvdGFsQnl0ZXMgKz0gbnVtQnl0ZXM7CisKKyAgICAvLyBJZiB3ZSBhcmUgdXNpbmcg
Z3VhcmQgYmxvY2tzLCBhbGwgYWxsb2NhdGlvbnMgYXJlIGJyYWNrZXRlZCBieQorICAgIC8vIHRo
ZW06IFtndWFyZGJsb2NrXVthbGxvY2F0aW9uXVtndWFyZGJsb2NrXS4gIG51bUJ5dGVzIGlzIGhv
dworICAgIC8vIG11Y2ggbWVtb3J5IHRoZSBjYWxsZXIgYXNrZWQgZm9yLiAgYWxsb2NhdGlvblNp
emUgaXMgdGhlIHRvdGFsCisgICAgLy8gc2l6ZSBpbmNsdWRpbmcgZ3VhcmQgYmxvY2tzLiAgSW4g
cmVsZWFzZSBidWlsZCwKKyAgICAvLyBndWFyZEJsb2NrU2l6ZT0wIGFuZCB0aGlzIGFsbCBnZXRz
IG9wdGltaXplZCBhd2F5LgorICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IFRBbGxvY2F0aW9u
OjphbGxvY2F0aW9uU2l6ZShudW1CeXRlcyk7CisgICAgLy8gRGV0ZWN0IGludGVnZXIgb3ZlcmZs
b3cuCisgICAgaWYgKGFsbG9jYXRpb25TaXplIDwgbnVtQnl0ZXMpCisgICAgICAgIHJldHVybiAw
OworCisgICAgLy8KKyAgICAvLyBEbyB0aGUgYWxsb2NhdGlvbiwgbW9zdCBsaWtlbHkgY2FzZSBm
aXJzdCwgZm9yIGVmZmljaWVuY3kuCisgICAgLy8gVGhpcyBzdGVwIGNvdWxkIGJlIG1vdmVkIHRv
IGJlIGlubGluZSBzb21ldGltZS4KKyAgICAvLworICAgIGlmIChhbGxvY2F0aW9uU2l6ZSA8PSBw
YWdlU2l6ZSAtIGN1cnJlbnRQYWdlT2Zmc2V0KSB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFNh
ZmUgdG8gYWxsb2NhdGUgZnJvbSBjdXJyZW50UGFnZU9mZnNldC4KKyAgICAgICAgLy8KKyAgICAg
ICAgdW5zaWduZWQgY2hhciogbWVtb3J5ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFy
ICo+KGluVXNlTGlzdCkgKyBjdXJyZW50UGFnZU9mZnNldDsKKyAgICAgICAgY3VycmVudFBhZ2VP
ZmZzZXQgKz0gYWxsb2NhdGlvblNpemU7CisgICAgICAgIGN1cnJlbnRQYWdlT2Zmc2V0ID0gKGN1
cnJlbnRQYWdlT2Zmc2V0ICsgYWxpZ25tZW50TWFzaykgJiB+YWxpZ25tZW50TWFzazsKKworICAg
ICAgICByZXR1cm4gaW5pdGlhbGl6ZUFsbG9jYXRpb24oaW5Vc2VMaXN0LCBtZW1vcnksIG51bUJ5
dGVzKTsKKyAgICB9CisKKyAgICBpZiAoYWxsb2NhdGlvblNpemUgPiBwYWdlU2l6ZSAtIGhlYWRl
clNraXApIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRG8gYSBtdWx0aS1wYWdlIGFsbG9jYXRp
b24uICBEb24ndCBtaXggdGhlc2Ugd2l0aCB0aGUgb3RoZXJzLgorICAgICAgICAvLyBUaGUgT1Mg
aXMgZWZmaWNpZW50IGFuZCBhbGxvY2F0aW5nIGFuZCBmcmVlLWluZyBtdWx0aXBsZSBwYWdlcy4K
KyAgICAgICAgLy8KKyAgICAgICAgc2l6ZV90IG51bUJ5dGVzVG9BbGxvYyA9IGFsbG9jYXRpb25T
aXplICsgaGVhZGVyU2tpcDsKKyAgICAgICAgLy8gRGV0ZWN0IGludGVnZXIgb3ZlcmZsb3cuCisg
ICAgICAgIGlmIChudW1CeXRlc1RvQWxsb2MgPCBhbGxvY2F0aW9uU2l6ZSkKKyAgICAgICAgICAg
IHJldHVybiAwOworCisgICAgICAgIHRIZWFkZXIqIG1lbW9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dEhlYWRlcio+KDo6bmV3IGNoYXJbbnVtQnl0ZXNUb0FsbG9jXSk7CisgICAgICAgIGlmIChtZW1v
cnkgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIC8vIFVzZSBwbGFjZW1l
bnQtbmV3IHRvIGluaXRpYWxpemUgaGVhZGVyCisgICAgICAgIG5ldyhtZW1vcnkpIHRIZWFkZXIo
aW5Vc2VMaXN0LCAobnVtQnl0ZXNUb0FsbG9jICsgcGFnZVNpemUgLSAxKSAvIHBhZ2VTaXplKTsK
KyAgICAgICAgaW5Vc2VMaXN0ID0gbWVtb3J5OworCisgICAgICAgIGN1cnJlbnRQYWdlT2Zmc2V0
ID0gcGFnZVNpemU7ICAvLyBtYWtlIG5leHQgYWxsb2NhdGlvbiBjb21lIGZyb20gYSBuZXcgcGFn
ZQorCisgICAgICAgIC8vIE5vIGd1YXJkIGJsb2NrcyBmb3IgbXVsdGktcGFnZSBhbGxvY2F0aW9u
cyAoeWV0KQorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KG1lbW9yeSkgKyBoZWFkZXJTa2lwKTsKKyAgICB9CisKKyAgICAv
LworICAgIC8vIE5lZWQgYSBzaW1wbGUgcGFnZSB0byBhbGxvY2F0ZSBmcm9tLgorICAgIC8vCisg
ICAgdEhlYWRlciogbWVtb3J5OworICAgIGlmIChmcmVlTGlzdCkgeworICAgICAgICBtZW1vcnkg
PSBmcmVlTGlzdDsKKyAgICAgICAgZnJlZUxpc3QgPSBmcmVlTGlzdC0+bmV4dFBhZ2U7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgbWVtb3J5ID0gcmVpbnRlcnByZXRfY2FzdDx0SGVhZGVyKj4oOjpu
ZXcgY2hhcltwYWdlU2l6ZV0pOworICAgICAgICBpZiAobWVtb3J5ID09IDApCisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLyBVc2UgcGxhY2VtZW50LW5ldyB0byBpbml0aWFs
aXplIGhlYWRlcgorICAgIG5ldyhtZW1vcnkpIHRIZWFkZXIoaW5Vc2VMaXN0LCAxKTsKKyAgICBp
blVzZUxpc3QgPSBtZW1vcnk7CisgICAgCisgICAgdW5zaWduZWQgY2hhciogcmV0ID0gcmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyICo+KGluVXNlTGlzdCkgKyBoZWFkZXJTa2lwOworICAg
IGN1cnJlbnRQYWdlT2Zmc2V0ID0gKGhlYWRlclNraXAgKyBhbGxvY2F0aW9uU2l6ZSArIGFsaWdu
bWVudE1hc2spICYgfmFsaWdubWVudE1hc2s7CisKKyAgICByZXR1cm4gaW5pdGlhbGl6ZUFsbG9j
YXRpb24oaW5Vc2VMaXN0LCByZXQsIG51bUJ5dGVzKTsKK30KKworCisvLworLy8gQ2hlY2sgYWxs
IGFsbG9jYXRpb25zIGluIGEgbGlzdCBmb3IgZGFtYWdlIGJ5IGNhbGxpbmcgY2hlY2sgb24gZWFj
aC4KKy8vCit2b2lkIFRBbGxvY2F0aW9uOjpjaGVja0FsbG9jTGlzdCgpIGNvbnN0Cit7CisgICAg
Zm9yIChjb25zdCBUQWxsb2NhdGlvbiogYWxsb2MgPSB0aGlzOyBhbGxvYyAhPSAwOyBhbGxvYyA9
IGFsbG9jLT5wcmV2QWxsb2MpCisgICAgICAgIGFsbG9jLT5jaGVjaygpOworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUG9vbEFs
bG9jLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Q
b29sQWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZGQyNDljNGQzYTM5YmIyMDFjMzg1NTQyMzk5MDgwOGY1
NWYwN2U1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvUG9vbEFsbG9jLmgKQEAgLTAsMCArMSwzMDAgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpZm5kZWYgX1BPT0xBTExPQ19JTkNMVURFRF8KKyNkZWZpbmUgX1BPT0xB
TExPQ19JTkNMVURFRF8KKworI2lmZGVmIF9ERUJVRworI2RlZmluZSBHVUFSRF9CTE9DS1MgIC8v
IGRlZmluZSB0byBlbmFibGUgZ3VhcmQgYmxvY2sgc2FuaXR5IGNoZWNraW5nCisjZW5kaWYKKwor
Ly8KKy8vIFRoaXMgaGVhZGVyIGRlZmluZXMgYW4gYWxsb2NhdG9yIHRoYXQgY2FuIGJlIHVzZWQg
dG8gZWZmaWNpZW50bHkKKy8vIGFsbG9jYXRlIGEgbGFyZ2UgbnVtYmVyIG9mIHNtYWxsIHJlcXVl
c3RzIGZvciBoZWFwIG1lbW9yeSwgd2l0aCB0aGUgCisvLyBpbnRlbnRpb24gdGhhdCB0aGV5IGFy
ZSBub3QgaW5kaXZpZHVhbGx5IGRlYWxsb2NhdGVkLCBidXQgcmF0aGVyIAorLy8gY29sbGVjdGl2
ZWx5IGRlYWxsb2NhdGVkIGF0IG9uZSB0aW1lLgorLy8KKy8vIFRoaXMgc2ltdWx0YW5lb3VzbHkK
Ky8vCisvLyAqIE1ha2VzIGVhY2ggaW5kaXZpZHVhbCBhbGxvY2F0aW9uIG11Y2ggbW9yZSBlZmZp
Y2llbnQ7IHRoZQorLy8gICAgIHR5cGljYWwgYWxsb2NhdGlvbiBpcyB0cml2aWFsLgorLy8gKiBD
b21wbGV0ZWx5IGF2b2lkcyB0aGUgY29zdCBvZiBkb2luZyBpbmRpdmlkdWFsIGRlYWxsb2NhdGlv
bi4KKy8vICogU2F2ZXMgdGhlIHRyb3VibGUgb2YgdHJhY2tpbmcgZG93biBhbmQgcGx1Z2dpbmcg
YSBsYXJnZSBjbGFzcyBvZiBsZWFrcy4KKy8vCisvLyBJbmRpdmlkdWFsIGNsYXNzZXMgY2FuIHVz
ZSB0aGlzIGFsbG9jYXRvciBieSBzdXBwbHlpbmcgdGhlaXIgb3duCisvLyBuZXcgYW5kIGRlbGV0
ZSBtZXRob2RzLgorLy8KKy8vIFNUTCBjb250YWluZXJzIGNhbiB1c2UgdGhpcyBhbGxvY2F0b3Ig
YnkgdXNpbmcgdGhlIHBvb2xfYWxsb2NhdG9yCisvLyBjbGFzcyBhcyB0aGUgYWxsb2NhdG9yIChz
ZWNvbmQpIHRlbXBsYXRlIGFyZ3VtZW50LgorLy8KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2lu
Y2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworLy8gSWYgd2UgYXJlIHVzaW5n
IGd1YXJkIGJsb2Nrcywgd2UgbXVzdCB0cmFjayBlYWNoIGluZGl2dWFsCisvLyBhbGxvY2F0aW9u
LiAgSWYgd2UgYXJlbid0IHVzaW5nIGd1YXJkIGJsb2NrcywgdGhlc2UKKy8vIG5ldmVyIGdldCBp
bnN0YW50aWF0ZWQsIHNvIHdvbid0IGhhdmUgYW55IGltcGFjdC4KKy8vIAorCitjbGFzcyBUQWxs
b2NhdGlvbiB7CitwdWJsaWM6CisgICAgVEFsbG9jYXRpb24oc2l6ZV90IHNpemUsIHVuc2lnbmVk
IGNoYXIqIG1lbSwgVEFsbG9jYXRpb24qIHByZXYgPSAwKSA6CisgICAgICAgIHNpemUoc2l6ZSks
IG1lbShtZW0pLCBwcmV2QWxsb2MocHJldikgeworICAgICAgICAvLyBBbGxvY2F0aW9ucyBhcmUg
YnJhY2tldGVkOgorICAgICAgICAvLyAgICBbYWxsb2NhdGlvbkhlYWRlcl1baW5pdGlhbEd1YXJk
QmxvY2tdW3VzZXJEYXRhXVtmaW5hbEd1YXJkQmxvY2tdCisgICAgICAgIC8vIFRoaXMgd291bGQg
YmUgY2xlYW5lciB3aXRoIGlmIChndWFyZEJsb2NrU2l6ZSkuLi4sIGJ1dCB0aGF0CisgICAgICAg
IC8vIG1ha2VzIHRoZSBjb21waWxlciBwcmludCB3YXJuaW5ncyBhYm91dCAwIGxlbmd0aCBtZW1z
ZXRzLAorICAgICAgICAvLyBldmVuIHdpdGggdGhlIGlmKCkgcHJvdGVjdGluZyB0aGVtLgorI2lm
ZGVmIEdVQVJEX0JMT0NLUworICAgICAgICBtZW1zZXQocHJlR3VhcmQoKSwgZ3VhcmRCbG9ja0Jl
Z2luVmFsLCBndWFyZEJsb2NrU2l6ZSk7CisgICAgICAgIG1lbXNldChkYXRhKCksICAgICAgdXNl
ckRhdGFGaWxsLCAgICAgICBzaXplKTsKKyAgICAgICAgbWVtc2V0KHBvc3RHdWFyZCgpLCBndWFy
ZEJsb2NrRW5kVmFsLCAgIGd1YXJkQmxvY2tTaXplKTsKKyNlbmRpZgorICAgIH0KKworICAgIHZv
aWQgY2hlY2soKSBjb25zdCB7CisgICAgICAgIGNoZWNrR3VhcmRCbG9jayhwcmVHdWFyZCgpLCAg
Z3VhcmRCbG9ja0JlZ2luVmFsLCAiYmVmb3JlIik7CisgICAgICAgIGNoZWNrR3VhcmRCbG9jayhw
b3N0R3VhcmQoKSwgZ3VhcmRCbG9ja0VuZFZhbCwgICAiYWZ0ZXIiKTsKKyAgICB9CisKKyAgICB2
b2lkIGNoZWNrQWxsb2NMaXN0KCkgY29uc3Q7CisKKyAgICAvLyBSZXR1cm4gdG90YWwgc2l6ZSBu
ZWVkZWQgdG8gYWNjb21vZGF0ZSB1c2VyIGJ1ZmZlciBvZiAnc2l6ZScsCisgICAgLy8gcGx1cyBv
dXIgdHJhY2tpbmcgZGF0YS4KKyAgICBpbmxpbmUgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6
ZShzaXplX3Qgc2l6ZSkgeworICAgICAgICByZXR1cm4gc2l6ZSArIDIgKiBndWFyZEJsb2NrU2l6
ZSArIGhlYWRlclNpemUoKTsKKyAgICB9CisKKyAgICAvLyBPZmZzZXQgZnJvbSBzdXJyb3VuZGlu
ZyBidWZmZXIgdG8gZ2V0IHRvIHVzZXIgZGF0YSBidWZmZXIuCisgICAgaW5saW5lIHN0YXRpYyB1
bnNpZ25lZCBjaGFyKiBvZmZzZXRBbGxvY2F0aW9uKHVuc2lnbmVkIGNoYXIqIG0pIHsKKyAgICAg
ICAgcmV0dXJuIG0gKyBndWFyZEJsb2NrU2l6ZSArIGhlYWRlclNpemUoKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgdm9pZCBjaGVja0d1YXJkQmxvY2sodW5zaWduZWQgY2hhciogYmxvY2tNZW0s
IHVuc2lnbmVkIGNoYXIgdmFsLCBjb25zdCBjaGFyKiBsb2NUZXh0KSBjb25zdDsKKworICAgIC8v
IEZpbmQgb2Zmc2V0cyB0byBwcmUgYW5kIHBvc3QgZ3VhcmQgYmxvY2tzLCBhbmQgdXNlciBkYXRh
IGJ1ZmZlcgorICAgIHVuc2lnbmVkIGNoYXIqIHByZUd1YXJkKCkgIGNvbnN0IHsgcmV0dXJuIG1l
bSArIGhlYWRlclNpemUoKTsgfQorICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEoKSAgICAgIGNvbnN0
IHsgcmV0dXJuIHByZUd1YXJkKCkgKyBndWFyZEJsb2NrU2l6ZTsgfQorICAgIHVuc2lnbmVkIGNo
YXIqIHBvc3RHdWFyZCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEoKSArIHNpemU7IH0KKworICAgIHNp
emVfdCBzaXplOyAgICAgICAgICAgICAgICAgIC8vIHNpemUgb2YgdGhlIHVzZXIgZGF0YSBhcmVh
CisgICAgdW5zaWduZWQgY2hhciogbWVtOyAgICAgICAgICAgLy8gYmVnaW5uaW5nIG9mIG91ciBh
bGxvY2F0aW9uIChwdHMgdG8gaGVhZGVyKQorICAgIFRBbGxvY2F0aW9uKiBwcmV2QWxsb2M7ICAg
ICAgIC8vIHByaW9yIGFsbG9jYXRpb24gaW4gdGhlIGNoYWluCisKKyAgICAvLyBTdXBwb3J0IE1T
VkMrKyA2LjAKKyAgICBjb25zdCBzdGF0aWMgdW5zaWduZWQgY2hhciBndWFyZEJsb2NrQmVnaW5W
YWw7CisgICAgY29uc3Qgc3RhdGljIHVuc2lnbmVkIGNoYXIgZ3VhcmRCbG9ja0VuZFZhbDsKKyAg
ICBjb25zdCBzdGF0aWMgdW5zaWduZWQgY2hhciB1c2VyRGF0YUZpbGw7CisKKyAgICBjb25zdCBz
dGF0aWMgc2l6ZV90IGd1YXJkQmxvY2tTaXplOworI2lmZGVmIEdVQVJEX0JMT0NLUworICAgIGlu
bGluZSBzdGF0aWMgc2l6ZV90IGhlYWRlclNpemUoKSB7IHJldHVybiBzaXplb2YoVEFsbG9jYXRp
b24pOyB9CisjZWxzZQorICAgIGlubGluZSBzdGF0aWMgc2l6ZV90IGhlYWRlclNpemUoKSB7IHJl
dHVybiAwOyB9CisjZW5kaWYKK307CisKKy8vCisvLyBUaGVyZSBhcmUgc2V2ZXJhbCBzdGFja3Mu
ICBPbmUgaXMgdG8gdHJhY2sgdGhlIHB1c2hpbmcgYW5kIHBvcHBpbmcKKy8vIG9mIHRoZSB1c2Vy
LCBhbmQgbm90IHlldCBpbXBsZW1lbnRlZC4gIFRoZSBvdGhlcnMgYXJlIHNpbXBseSBhIAorLy8g
cmVwb3NpdG9yaWVzIG9mIGZyZWUgcGFnZXMgb3IgdXNlZCBwYWdlcy4KKy8vCisvLyBQYWdlIHN0
YWNrcyBhcmUgbGlua2VkIHRvZ2V0aGVyIHdpdGggYSBzaW1wbGUgaGVhZGVyIGF0IHRoZSBiZWdp
bm5pbmcKKy8vIG9mIGVhY2ggYWxsb2NhdGlvbiBvYnRhaW5lZCBmcm9tIHRoZSB1bmRlcmx5aW5n
IE9TLiAgTXVsdGktcGFnZSBhbGxvY2F0aW9ucworLy8gYXJlIHJldHVybmVkIHRvIHRoZSBPUy4g
IEluZGl2aWR1YWwgcGFnZSBhbGxvY2F0aW9ucyBhcmUga2VwdCBmb3IgZnV0dXJlCisvLyByZS11
c2UuCisvLworLy8gVGhlICJwYWdlIHNpemUiIHVzZWQgaXMgbm90LCBub3IgbXVzdCBpdCBtYXRj
aCwgdGhlIHVuZGVybHlpbmcgT1MKKy8vIHBhZ2Ugc2l6ZS4gIEJ1dCwgaGF2aW5nIGl0IGJlIGFi
b3V0IHRoYXQgc2l6ZSBvciBlcXVhbCB0byBhIHNldCBvZiAKKy8vIHBhZ2VzIGlzIGxpa2VseSBt
b3N0IG9wdGltYWwuCisvLworY2xhc3MgVFBvb2xBbGxvY2F0b3IgeworcHVibGljOgorICAgIFRQ
b29sQWxsb2NhdG9yKGludCBncm93dGhJbmNyZW1lbnQgPSA4KjEwMjQsIGludCBhbGxvY2F0aW9u
QWxpZ25tZW50ID0gMTYpOworCisgICAgLy8KKyAgICAvLyBEb24ndCBjYWxsIHRoZSBkZXN0cnVj
dG9yIGp1c3QgdG8gZnJlZSB1cCB0aGUgbWVtb3J5LCBjYWxsIHBvcCgpCisgICAgLy8KKyAgICB+
VFBvb2xBbGxvY2F0b3IoKTsKKworICAgIC8vCisgICAgLy8gQ2FsbCBwdXNoKCkgdG8gZXN0YWJs
aXNoIGEgbmV3IHBsYWNlIHRvIHBvcCBtZW1vcnkgdG9vLiAgRG9lcyBub3QKKyAgICAvLyBoYXZl
IHRvIGJlIGNhbGxlZCB0byBnZXQgdGhpbmdzIHN0YXJ0ZWQuCisgICAgLy8KKyAgICB2b2lkIHB1
c2goKTsKKworICAgIC8vCisgICAgLy8gQ2FsbCBwb3AoKSB0byBmcmVlIGFsbCBtZW1vcnkgYWxs
b2NhdGVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gcHVzaCgpLAorICAgIC8vIG9yIGlmIG5vIGxh
c3QgY2FsbCB0byBwdXNoLCBmcmVlcyBhbGwgbWVtb3J5IHNpbmNlIGZpcnN0IGFsbG9jYXRpb24u
CisgICAgLy8KKyAgICB2b2lkIHBvcCgpOworCisgICAgLy8KKyAgICAvLyBDYWxsIHBvcEFsbCgp
IHRvIGZyZWUgYWxsIG1lbW9yeSBhbGxvY2F0ZWQuCisgICAgLy8KKyAgICB2b2lkIHBvcEFsbCgp
OworCisgICAgLy8KKyAgICAvLyBDYWxsIGFsbG9jYXRlKCkgdG8gYWN0dWFsbHkgYWNxdWlyZSBt
ZW1vcnkuICBSZXR1cm5zIDAgaWYgbm8gbWVtb3J5CisgICAgLy8gYXZhaWxhYmxlLCBvdGhlcndp
c2UgYSBwcm9wZXJseSBhbGlnbmVkIHBvaW50ZXIgdG8gJ251bUJ5dGVzJyBvZiBtZW1vcnkuCisg
ICAgLy8KKyAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3QgbnVtQnl0ZXMpOworCisgICAgLy8KKyAg
ICAvLyBUaGVyZSBpcyBubyBkZWFsbG9jYXRlLiAgVGhlIHBvaW50IG9mIHRoaXMgY2xhc3MgaXMg
dGhhdAorICAgIC8vIGRlYWxsb2NhdGlvbiBjYW4gYmUgc2tpcHBlZCBieSB0aGUgdXNlciBvZiBp
dCwgYXMgdGhlIG1vZGVsCisgICAgLy8gb2YgdXNlIGlzIHRvIHNpbXVsdGFuZW91c2x5IGRlYWxs
b2NhdGUgZXZlcnl0aGluZyBhdCBvbmNlCisgICAgLy8gYnkgY2FsbGluZyBwb3AoKSwgYW5kIHRv
IG5vdCBoYXZlIHRvIHNvbHZlIG1lbW9yeSBsZWFrIHByb2JsZW1zLgorICAgIC8vCisKK3Byb3Rl
Y3RlZDoKKyAgICBmcmllbmQgc3RydWN0IHRIZWFkZXI7CisgICAgCisgICAgc3RydWN0IHRIZWFk
ZXIgeworICAgICAgICB0SGVhZGVyKHRIZWFkZXIqIG5leHRQYWdlLCBzaXplX3QgcGFnZUNvdW50
KSA6CisgICAgICAgICAgICBuZXh0UGFnZShuZXh0UGFnZSksCisgICAgICAgICAgICBwYWdlQ291
bnQocGFnZUNvdW50KQorI2lmZGVmIEdVQVJEX0JMT0NLUworICAgICAgICAgICwgbGFzdEFsbG9j
YXRpb24oMCkKKyNlbmRpZgorICAgICAgICAgICAgeyB9CisKKyAgICAgICAgfnRIZWFkZXIoKSB7
CisjaWZkZWYgR1VBUkRfQkxPQ0tTCisgICAgICAgICAgICBpZiAobGFzdEFsbG9jYXRpb24pCisg
ICAgICAgICAgICAgICAgbGFzdEFsbG9jYXRpb24tPmNoZWNrQWxsb2NMaXN0KCk7CisjZW5kaWYK
KyAgICAgICAgfQorCisgICAgICAgIHRIZWFkZXIqIG5leHRQYWdlOworICAgICAgICBzaXplX3Qg
cGFnZUNvdW50OworI2lmZGVmIEdVQVJEX0JMT0NLUworICAgICAgICBUQWxsb2NhdGlvbiogbGFz
dEFsbG9jYXRpb247CisjZW5kaWYKKyAgICB9OworCisgICAgc3RydWN0IHRBbGxvY1N0YXRlIHsK
KyAgICAgICAgc2l6ZV90IG9mZnNldDsKKyAgICAgICAgdEhlYWRlciogcGFnZTsKKyAgICB9Owor
ICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8dEFsbG9jU3RhdGU+IHRBbGxvY1N0YWNrOworCisgICAg
Ly8gVHJhY2sgYWxsb2NhdGlvbnMgaWYgYW5kIG9ubHkgaWYgd2UncmUgdXNpbmcgZ3VhcmQgYmxv
Y2tzCisgICAgdm9pZCogaW5pdGlhbGl6ZUFsbG9jYXRpb24odEhlYWRlciogYmxvY2ssIHVuc2ln
bmVkIGNoYXIqIG1lbW9yeSwgc2l6ZV90IG51bUJ5dGVzKSB7CisjaWZkZWYgR1VBUkRfQkxPQ0tT
CisgICAgICAgIG5ldyhtZW1vcnkpIFRBbGxvY2F0aW9uKG51bUJ5dGVzLCBtZW1vcnksIGJsb2Nr
LT5sYXN0QWxsb2NhdGlvbik7CisgICAgICAgIGJsb2NrLT5sYXN0QWxsb2NhdGlvbiA9IHJlaW50
ZXJwcmV0X2Nhc3Q8VEFsbG9jYXRpb24qPihtZW1vcnkpOworI2VuZGlmCisgICAgICAgIC8vIFRo
aXMgaXMgb3B0aW1pemVkIGVudGlyZWx5IGF3YXkgaWYgR1VBUkRfQkxPQ0tTIGlzIG5vdCBkZWZp
bmVkLgorICAgICAgICByZXR1cm4gVEFsbG9jYXRpb246Om9mZnNldEFsbG9jYXRpb24obWVtb3J5
KTsKKyAgICB9CisKKyAgICBzaXplX3QgcGFnZVNpemU7ICAgICAgICAvLyBncmFudWxhcml0eSBv
ZiBhbGxvY2F0aW9uIGZyb20gdGhlIE9TCisgICAgc2l6ZV90IGFsaWdubWVudDsgICAgICAgLy8g
YWxsIHJldHVybmVkIGFsbG9jYXRpb25zIHdpbGwgYmUgYWxpZ25lZCBhdCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyB0aGlzIGdyYW51bGFyaXR5LCB3aGljaCB3aWxsIGJlIGEgcG93
ZXIgb2YgMgorICAgIHNpemVfdCBhbGlnbm1lbnRNYXNrOworICAgIHNpemVfdCBoZWFkZXJTa2lw
OyAgICAgIC8vIGFtb3VudCBvZiBtZW1vcnkgdG8gc2tpcCB0byBtYWtlIHJvb20gZm9yIHRoZQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgaGVhZGVyIChiYXNpY2FsbHksIHNp
emUgb2YgaGVhZGVyLCByb3VuZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICB1cCB0byBtYWtlIGl0IGFsaWduZWQKKyAgICBzaXplX3QgY3VycmVudFBhZ2VPZmZzZXQ7ICAv
LyBuZXh0IG9mZnNldCBpbiB0b3Agb2YgaW5Vc2VMaXN0IHRvIGFsbG9jYXRlIGZyb20KKyAgICB0
SGVhZGVyKiBmcmVlTGlzdDsgICAgICAvLyBsaXN0IG9mIHBvcHBlZCBtZW1vcnkKKyAgICB0SGVh
ZGVyKiBpblVzZUxpc3Q7ICAgICAvLyBsaXN0IG9mIGFsbCBtZW1vcnkgY3VycmVudGx5IGJlaW5n
IHVzZWQKKyAgICB0QWxsb2NTdGFjayBzdGFjazsgICAgICAvLyBzdGFjayBvZiB3aGVyZSB0byBh
bGxvY2F0ZSBmcm9tLCB0byBwYXJ0aXRpb24gcG9vbAorCisgICAgaW50IG51bUNhbGxzOyAgICAg
ICAgICAgLy8ganVzdCBhbiBpbnRlcmVzdGluZyBzdGF0aXN0aWMKKyAgICBzaXplX3QgdG90YWxC
eXRlczsgICAgICAvLyBqdXN0IGFuIGludGVyZXN0aW5nIHN0YXRpc3RpYworcHJpdmF0ZToKKyAg
ICBUUG9vbEFsbG9jYXRvciYgb3BlcmF0b3I9KGNvbnN0IFRQb29sQWxsb2NhdG9yJik7ICAvLyBk
b250IGFsbG93IGFzc2lnbm1lbnQgb3BlcmF0b3IKKyAgICBUUG9vbEFsbG9jYXRvcihjb25zdCBU
UG9vbEFsbG9jYXRvciYpOyAgLy8gZG9udCBhbGxvdyBkZWZhdWx0IGNvcHkgY29uc3RydWN0b3IK
K307CisKKworLy8KKy8vIFRoZXJlIGNvdWxkIHBvdGVudGlhbGx5IGJlIG1hbnkgcG9vbHMgd2l0
aCBwb3BzIGhhcHBlbmluZyBhdAorLy8gZGlmZmVyZW50IHRpbWVzLiAgQnV0IGEgc2ltcGxlIHVz
ZSBpcyB0byBoYXZlIGEgZ2xvYmFsIHBvcAorLy8gd2l0aCBldmVyeW9uZSB1c2luZyB0aGUgc2Ft
ZSBnbG9iYWwgYWxsb2NhdG9yLgorLy8KK2V4dGVybiBUUG9vbEFsbG9jYXRvciogR2V0R2xvYmFs
UG9vbEFsbG9jYXRvcigpOworZXh0ZXJuIHZvaWQgU2V0R2xvYmFsUG9vbEFsbG9jYXRvcihUUG9v
bEFsbG9jYXRvciogcG9vbEFsbG9jYXRvcik7CisKKy8vCisvLyBUaGlzIFNUTCBjb21wYXRpYmxl
IGFsbG9jYXRvciBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIHRoZSBhbGxvY2F0b3IKKy8vIHBh
cmFtZXRlciB0byB0ZW1wbGF0aXplZCBTVEwgY29udGFpbmVycywgbGlrZSB2ZWN0b3IgYW5kIG1h
cC4KKy8vCisvLyBJdCB3aWxsIHVzZSB0aGUgcG9vbHMgZm9yIGFsbG9jYXRpb24sIGFuZCBub3QK
Ky8vIGRvIGFueSBkZWFsbG9jYXRpb24sIGJ1dCB3aWxsIHN0aWxsIGRvIGRlc3RydWN0aW9uLgor
Ly8KK3RlbXBsYXRlPGNsYXNzIFQ+CitjbGFzcyBwb29sX2FsbG9jYXRvciB7CitwdWJsaWM6Cisg
ICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOworICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZl
cmVuY2VfdHlwZTsKKyAgICB0eXBlZGVmIFQqIHBvaW50ZXI7CisgICAgdHlwZWRlZiBjb25zdCBU
KiBjb25zdF9wb2ludGVyOworICAgIHR5cGVkZWYgVCYgcmVmZXJlbmNlOworICAgIHR5cGVkZWYg
Y29uc3QgVCYgY29uc3RfcmVmZXJlbmNlOworICAgIHR5cGVkZWYgVCB2YWx1ZV90eXBlOworCisg
ICAgdGVtcGxhdGU8Y2xhc3MgT3RoZXI+IAorICAgIHN0cnVjdCByZWJpbmQgeworICAgICAgICB0
eXBlZGVmIHBvb2xfYWxsb2NhdG9yPE90aGVyPiBvdGhlcjsKKyAgICB9OworICAgIHBvaW50ZXIg
YWRkcmVzcyhyZWZlcmVuY2UgeCkgY29uc3QgeyByZXR1cm4gJng7IH0KKyAgICBjb25zdF9wb2lu
dGVyIGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIHgpIGNvbnN0IHsgcmV0dXJuICZ4OyB9CisKKyAg
ICBwb29sX2FsbG9jYXRvcigpIDogYWxsb2NhdG9yKEdldEdsb2JhbFBvb2xBbGxvY2F0b3IoKSkg
eyB9CisgICAgcG9vbF9hbGxvY2F0b3IoVFBvb2xBbGxvY2F0b3ImIGEpIDogYWxsb2NhdG9yKCZh
KSB7IH0KKyAgICBwb29sX2FsbG9jYXRvcihjb25zdCBwb29sX2FsbG9jYXRvcjxUPiYgcCkgOiBh
bGxvY2F0b3IocC5hbGxvY2F0b3IpIHsgfQorCisgICAgdGVtcGxhdGUgPGNsYXNzIE90aGVyPgor
ICAgIHBvb2xfYWxsb2NhdG9yPFQ+JiBvcGVyYXRvcj0oY29uc3QgcG9vbF9hbGxvY2F0b3I8T3Ro
ZXI+JiBwKSB7CisgICAgICBhbGxvY2F0b3IgPSBwLmFsbG9jYXRvcjsKKyAgICAgIHJldHVybiAq
dGhpczsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBPdGhlcj4KKyAgICBwb29sX2FsbG9j
YXRvcihjb25zdCBwb29sX2FsbG9jYXRvcjxPdGhlcj4mIHApIDogYWxsb2NhdG9yKCZwLmdldEFs
bG9jYXRvcigpKSB7IH0KKworI2lmIGRlZmluZWQoX19TVU5QUk9fQ0MpICYmICFkZWZpbmVkKF9S
V1NURF9BTExPQ0FUT1IpCisgICAgLy8gbGliQ1N0ZCBvbiBzb21lIHBsYXRmb3JtcyBoYXZlIGEg
ZGlmZmVyZW50IGFsbG9jYXRlL2RlYWxsb2NhdGUgaW50ZXJmYWNlLgorICAgIC8vIENhbGxlciBw
cmUtYmFrZXMgc2l6ZW9mKFQpIGludG8gJ24nIHdoaWNoIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMg
dG8gYmUKKyAgICAvLyBhbGxvY2F0ZWQsIG5vdCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzLgorICAg
IHZvaWQqIGFsbG9jYXRlKHNpemVfdHlwZSBuKSB7IAorICAgICAgICByZXR1cm4gZ2V0QWxsb2Nh
dG9yKCkuYWxsb2NhdGUobik7CisgICAgfQorICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdHlwZSBu
LCBjb25zdCB2b2lkKikgeworICAgICAgICByZXR1cm4gZ2V0QWxsb2NhdG9yKCkuYWxsb2NhdGUo
bik7CisgICAgfQorICAgIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiwgc2l6ZV90eXBlKSB7fQorI2Vs
c2UKKyAgICBwb2ludGVyIGFsbG9jYXRlKHNpemVfdHlwZSBuKSB7IAorICAgICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxwb2ludGVyPihnZXRBbGxvY2F0b3IoKS5hbGxvY2F0ZShuICogc2l6
ZW9mKFQpKSk7CisgICAgfQorICAgIHBvaW50ZXIgYWxsb2NhdGUoc2l6ZV90eXBlIG4sIGNvbnN0
IHZvaWQqKSB7IAorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxwb2ludGVyPihnZXRB
bGxvY2F0b3IoKS5hbGxvY2F0ZShuICogc2l6ZW9mKFQpKSk7CisgICAgfQorICAgIHZvaWQgZGVh
bGxvY2F0ZShwb2ludGVyLCBzaXplX3R5cGUpIHt9CisjZW5kaWYgIC8vIF9SV1NURF9BTExPQ0FU
T1IKKworICAgIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgcCwgY29uc3QgVCYgdmFsKSB7IG5ldyAo
KHZvaWQgKilwKSBUKHZhbCk7IH0KKyAgICB2b2lkIGRlc3Ryb3kocG9pbnRlciBwKSB7IHAtPlQ6
On5UKCk7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBwb29sX2FsbG9jYXRvciYgcmhz
KSBjb25zdCB7IHJldHVybiAmZ2V0QWxsb2NhdG9yKCkgPT0gJnJocy5nZXRBbGxvY2F0b3IoKTsg
fQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBwb29sX2FsbG9jYXRvciYgcmhzKSBjb25zdCB7
IHJldHVybiAmZ2V0QWxsb2NhdG9yKCkgIT0gJnJocy5nZXRBbGxvY2F0b3IoKTsgfQorCisgICAg
c2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90eXBl
PigtMSkgLyBzaXplb2YoVCk7IH0KKyAgICBzaXplX3R5cGUgbWF4X3NpemUoaW50IHNpemUpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdHlwZT4oLTEpIC8gc2l6ZTsgfQorCisgICAg
dm9pZCBzZXRBbGxvY2F0b3IoVFBvb2xBbGxvY2F0b3IqIGEpIHsgYWxsb2NhdG9yID0gYTsgfQor
ICAgIFRQb29sQWxsb2NhdG9yJiBnZXRBbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiAqYWxsb2Nh
dG9yOyB9CisKK3Byb3RlY3RlZDoKKyAgICBUUG9vbEFsbG9jYXRvciogYWxsb2NhdG9yOworfTsK
KworI2VuZGlmIC8vIF9QT09MQUxMT0NfSU5DTFVERURfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9QcmFnbWEuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ByYWdtYS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjJmNzQ0MTIzYjgyODk0OThjMzE3OTE0ZWFkM2RmMTM2M2FlODYxNmIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Q
cmFnbWEuaApAQCAtMCwwICsxLDE5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxF
Ul9QUkFHTUFfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJBR01BX0hfCisKK3N0cnVjdCBUUHJhZ21h
IHsKKyAgICAvLyBCeSBkZWZhdWx0IG9wdGltaXphdGlvbiBpcyB0dXJuZWQgb24gYW5kIGRlYnVn
IGlzIHR1cm5lZCBvZmYuCisgICAgVFByYWdtYSgpIDogb3B0aW1pemUodHJ1ZSksIGRlYnVnKGZh
bHNlKSB7IH0KKyAgICBUUHJhZ21hKGJvb2wgbywgYm9vbCBkKSA6IG9wdGltaXplKG8pLCBkZWJ1
ZyhkKSB7IH0KKworICAgIGJvb2wgb3B0aW1pemU7CisgICAgYm9vbCBkZWJ1ZzsKK307CisKKyNl
bmRpZiAvLyBDT01QSUxFUl9QUkFHTUFfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1F1YWxpZmllckFsaXZlLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1F1YWxpZmllckFsaXZl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xYmEwODdlMTc2NThkZDQ1NTU2ZDJiZGQzNTBiOGI3NmViN2Y3YzNj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvUXVhbGlmaWVyQWxpdmUuY3BwCkBAIC0wLDAgKzEsNTggQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5o
IgorCitjbGFzcyBUQWxpdmVUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7Citw
dWJsaWM6CisgICAgVEFsaXZlVHJhdmVyc2VyKFRRdWFsaWZpZXIgcSkgOiBUSW50ZXJtVHJhdmVy
c2VyKHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSksIGZvdW5kKGZhbHNlKSwgcXVhbGlmaWVyKHEp
CisgICAgeworICAgIH0KKworCWJvb2wgd2FzRm91bmQoKSB7IHJldHVybiBmb3VuZDsgfQorCitw
cm90ZWN0ZWQ6CisgICAgYm9vbCBmb3VuZDsKKyAgICBUUXVhbGlmaWVyIHF1YWxpZmllcjsKKwor
ICAgIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOworICAgIGJvb2wgdmlzaXRTZWxl
Y3Rpb24oVmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKK307CisKKy8vCisvLyBSZXBvcnQgd2hl
dGhlciBvciBub3QgYSB2YXJpYWJsZSBvZiB0aGUgZ2l2ZW4gcXVhbGlmaWVyIHR5cGUKKy8vIGlz
IGd1YXJhbnRlZWQgd3JpdHRlbi4gIE5vdCBhbHdheXMgcG9zc2libGUgdG8gZGV0ZXJtaW5lIGlm
CisvLyBpdCBpcyB3cml0dGVuIGNvbmRpdGlvbmFsbHkuCisvLworLy8gPz8gSXQgZG9lcyBub3Qg
ZG8gdGhpcyB3ZWxsIHlldCwgdGhpcyBpcyBqdXN0IGEgcGxhY2UgaG9sZGVyCisvLyB0aGF0IHNp
bXBseSBkZXRlcm1pbmVzIGlmIGl0IHdhcyByZWZlcmVuY2UgYXQgYWxsLCBhbnl3aGVyZS4KKy8v
Citib29sIFF1YWxpZmllcldyaXR0ZW4oVEludGVybU5vZGUqIG5vZGUsIFRRdWFsaWZpZXIgcXVh
bGlmaWVyKQoreworICAgIFRBbGl2ZVRyYXZlcnNlciBpdChxdWFsaWZpZXIpOworCisgICAgaWYg
KG5vZGUpCisgICAgICAgIG5vZGUtPnRyYXZlcnNlKCZpdCk7CisKKyAgICByZXR1cm4gaXQud2Fz
Rm91bmQoKTsKK30KKwordm9pZCBUQWxpdmVUcmF2ZXJzZXI6OnZpc2l0U3ltYm9sKFRJbnRlcm1T
eW1ib2wqIG5vZGUpCit7CisgICAgLy8KKyAgICAvLyBJZiBpdCdzIHdoYXQgd2UncmUgbG9va2lu
ZyBmb3IsIHJlY29yZCBpdC4KKyAgICAvLworICAgIGlmIChub2RlLT5nZXRRdWFsaWZpZXIoKSA9
PSBxdWFsaWZpZXIpCisgICAgICAgIGZvdW5kID0gdHJ1ZTsKK30KKworYm9vbCBUQWxpdmVUcmF2
ZXJzZXI6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHByZVZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBu
b2RlKQoreworICAgIGlmICh3YXNGb3VuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1F1YWxpZmllckFsaXZlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9RdWFsaWZpZXJBbGl2ZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjg3MmEwNmY3MjE5MmFmMWQzNzhmNzJkMWVhMjEwZGFlODk5YmJmNGIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9R
dWFsaWZpZXJBbGl2ZS5oCkBAIC0wLDAgKzEsNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworYm9v
bCBRdWFsaWZpZXJXcml0dGVuKFRJbnRlcm1Ob2RlKiByb290LCBUUXVhbGlmaWVyKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Jl
bW92ZVRyZWUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvUmVtb3ZlVHJlZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTJlNWRiYmZlMTQ4ZTVjYzM5OTQ3MWI3
NzhkYTY3OWExOTI3ZTc1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1JlbW92ZVRyZWUuY3BwCkBAIC0wLDAgKzEsNzcg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2lu
dGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUmVtb3ZlVHJlZS5o
IgorCisvLworLy8gQ29kZSB0byByZWN1cnNpdmVseSBkZWxldGUgdGhlIGludGVybWVkaWF0ZSB0
cmVlLgorLy8KKworY2xhc3MgUmVtb3ZlVHJlZSA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7
CitwdWJsaWM6CisJUmVtb3ZlVHJlZSgpIDogVEludGVybVRyYXZlcnNlcihmYWxzZSwgZmFsc2Us
IHRydWUpCisJeworCX0KKworcHJvdGVjdGVkOgorCXZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5
bWJvbCopOworCXZvaWQgdmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKik7
CisJYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSopOworCWJvb2wg
dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5Kik7CisJYm9vbCB2aXNpdFNlbGVj
dGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiopOworCWJvb2wgdmlzaXRBZ2dyZWdh
dGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKK307CisKK3ZvaWQgUmVtb3ZlVHJl
ZTo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKK3sKKwlkZWxldGUgbm9kZTsKK30K
KworYm9vbCBSZW1vdmVUcmVlOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFy
eSogbm9kZSkKK3sKKwlkZWxldGUgbm9kZTsKKworCXJldHVybiB0cnVlOworfQorCitib29sIFJl
bW92ZVRyZWU6OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSogbm9kZSkKK3sK
KyAgICBkZWxldGUgbm9kZTsKKworCXJldHVybiB0cnVlOworfQorCitib29sIFJlbW92ZVRyZWU6
OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQorewor
CWRlbGV0ZSBub2RlOworCisJcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVtb3ZlVHJlZTo6dmlz
aXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUpCit7CisJZGVs
ZXRlIG5vZGU7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBSZW1vdmVUcmVlOjp2aXNpdENv
bnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qIG5vZGUpCit7CisJZGVsZXRlIG5vZGU7
Cit9CisKKy8vCisvLyBFbnRyeSBwb2ludC4KKy8vCit2b2lkIFJlbW92ZUFsbFRyZWVOb2RlcyhU
SW50ZXJtTm9kZSogcm9vdCkKK3sKKyAgICBSZW1vdmVUcmVlIGl0OworCisgICAgcm9vdC0+dHJh
dmVyc2UoJml0KTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvUmVtb3ZlVHJlZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUmVtb3ZlVHJlZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk3YTgy
MTY3OWMyM2ZiOTI4MGIzZWRmNGE3ZThmY2JlNDE1NjE0NjcKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZW1vdmVUcmVl
LmgKQEAgLTAsMCArMSw3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCit2b2lkIFJlbW92ZUFsbFRy
ZWVOb2RlcyhUSW50ZXJtTm9kZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUmVuYW1lRnVuY3Rpb24uaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1JlbmFtZUZ1bmN0aW9uLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMWY3ZmIxNmM0NTk3OWNkMWRhMmJmMTllYTg2MTc5ZDI2NGQ1ZmZhYgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1JlbmFtZUZ1bmN0aW9uLmgKQEAgLTAsMCArMSwzNiBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
Zm5kZWYgQ09NUElMRVJfUkVOQU1FX0ZVTkNUSU9OCisjZGVmaW5lIENPTVBJTEVSX1JFTkFNRV9G
VU5DVElPTgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIK
KworLy8KKy8vIFJlbmFtZXMgYSBmdW5jdGlvbiwgaW5jbHVkaW5nIGl0cyBkZWNsYXJhdGlvbiBh
bmQgYW55IGNhbGxzIHRvIGl0LgorLy8KK2NsYXNzIFJlbmFtZUZ1bmN0aW9uIDogcHVibGljIFRJ
bnRlcm1UcmF2ZXJzZXIKK3sKK3B1YmxpYzoKKyAgICBSZW5hbWVGdW5jdGlvbihjb25zdCBUU3Ry
aW5nJiBvbGRGdW5jdGlvbk5hbWUsIGNvbnN0IFRTdHJpbmcmIG5ld0Z1bmN0aW9uTmFtZSkKKyAg
ICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIGZhbHNlKQorICAgICwgbU9sZEZ1bmN0
aW9uTmFtZShvbGRGdW5jdGlvbk5hbWUpCisgICAgLCBtTmV3RnVuY3Rpb25OYW1lKG5ld0Z1bmN0
aW9uTmFtZSkge30KKworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNp
dCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKKyAgICB7CisgICAgICAgIFRPcGVyYXRvciBvcCA9
IG5vZGUtPmdldE9wKCk7CisgICAgICAgIGlmICgob3AgPT0gRU9wRnVuY3Rpb24gfHwgb3AgPT0g
RU9wRnVuY3Rpb25DYWxsKSAmJiBub2RlLT5nZXROYW1lKCkgPT0gbU9sZEZ1bmN0aW9uTmFtZSkK
KyAgICAgICAgICAgIG5vZGUtPnNldE5hbWUobU5ld0Z1bmN0aW9uTmFtZSk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBUU3RyaW5nIG1PbGRGdW5j
dGlvbk5hbWU7CisgICAgY29uc3QgVFN0cmluZyBtTmV3RnVuY3Rpb25OYW1lOworfTsKKworI2Vu
ZGlmICAvLyBDT01QSUxFUl9SRU5BTUVfRlVOQ1RJT04KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Jld3JpdGVFbHNlQmxvY2tzLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Jld3Jp
dGVFbHNlQmxvY2tzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OGU4N2NkNTdhODgyOGFiZjY3Nzc3OWEyMjk3
Y2I5YjA2MzAzMmY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUmV3cml0ZUVsc2VCbG9ja3MuY3BwCkBAIC0wLDAgKzEs
OTggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworLy8gUmV3cml0ZUVsc2VCbG9ja3MuY3BwOiBJbXBsZW1lbnRh
dGlvbiBmb3IgdHJlZSB0cmFuc2Zvcm0gdG8gY2hhbmdlCisvLyAgIGFsbCBpZi1lbHNlIGJsb2Nr
cyB0byBpZi1pZiBibG9ja3MuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9S
ZXdyaXRlRWxzZUJsb2Nrcy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvTm9kZVNl
YXJjaC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuaCIKKwor
bmFtZXNwYWNlIHNoCit7CisKK1RJbnRlcm1TeW1ib2wgKk1ha2VOZXdUZW1wb3JhcnkoY29uc3Qg
VFN0cmluZyAmbmFtZSwgVEJhc2ljVHlwZSB0eXBlKQoreworICAgIFRUeXBlIHZhcmlhYmxlVHlw
ZSh0eXBlLCBFYnBIaWdoLCBFdnFJbnRlcm5hbCk7CisgICAgcmV0dXJuIG5ldyBUSW50ZXJtU3lt
Ym9sKC0xLCBuYW1lLCB2YXJpYWJsZVR5cGUpOworfQorCitUSW50ZXJtQmluYXJ5ICpNYWtlTmV3
QmluYXJ5KFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkICpsZWZ0LCBUSW50ZXJtVHlwZWQgKnJp
Z2h0LCBjb25zdCBUVHlwZSAmcmVzdWx0VHlwZSkKK3sKKyAgICBUSW50ZXJtQmluYXJ5ICpiaW5h
cnkgPSBuZXcgVEludGVybUJpbmFyeShvcCk7CisgICAgYmluYXJ5LT5zZXRMZWZ0KGxlZnQpOwor
ICAgIGJpbmFyeS0+c2V0UmlnaHQocmlnaHQpOworICAgIGJpbmFyeS0+c2V0VHlwZShyZXN1bHRU
eXBlKTsKKyAgICByZXR1cm4gYmluYXJ5OworfQorCitUSW50ZXJtVW5hcnkgKk1ha2VOZXdVbmFy
eShUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCAqb3BlcmFuZCkKK3sKKyAgICBUSW50ZXJtVW5h
cnkgKnVuYXJ5ID0gbmV3IFRJbnRlcm1VbmFyeShvcCwgb3BlcmFuZC0+Z2V0VHlwZSgpKTsKKyAg
ICB1bmFyeS0+c2V0T3BlcmFuZChvcGVyYW5kKTsKKyAgICByZXR1cm4gdW5hcnk7Cit9CisKK2Jv
b2wgRWxzZUJsb2NrUmV3cml0ZXI6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJt
QWdncmVnYXRlICpub2RlKQoreworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7Cisg
ICAgICBjYXNlIEVPcFNlcXVlbmNlOgorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHNpemVf
dCBzdGF0ZW1lbnRJbmRleCA9IDA7IHN0YXRlbWVudEluZGV4ICE9IG5vZGUtPmdldFNlcXVlbmNl
KCkuc2l6ZSgpOyBzdGF0ZW1lbnRJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIFRJbnRlcm1Ob2RlICpzdGF0ZW1lbnQgPSBub2RlLT5nZXRTZXF1ZW5jZSgpW3N0YXRlbWVu
dEluZGV4XTsKKyAgICAgICAgICAgICAgICBUSW50ZXJtU2VsZWN0aW9uICpzZWxlY3Rpb24gPSBz
dGF0ZW1lbnQtPmdldEFzU2VsZWN0aW9uTm9kZSgpOworICAgICAgICAgICAgICAgIGlmIChzZWxl
Y3Rpb24gJiYgc2VsZWN0aW9uLT5nZXRGYWxzZUJsb2NrKCkgIT0gTlVMTCkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmdldFNlcXVlbmNlKClbc3RhdGVtZW50
SW5kZXhdID0gcmV3cml0ZVNlbGVjdGlvbihzZWxlY3Rpb24pOworICAgICAgICAgICAgICAgICAg
ICBkZWxldGUgc2VsZWN0aW9uOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1RJbnRlcm1Ob2RlICpFbHNlQmxvY2tSZXdyaXRlcjo6
cmV3cml0ZVNlbGVjdGlvbihUSW50ZXJtU2VsZWN0aW9uICpzZWxlY3Rpb24pCit7CisgICAgQVNT
RVJUKHNlbGVjdGlvbi0+Z2V0RmFsc2VCbG9jaygpICE9IE5VTEwpOworCisgICAgVFN0cmluZyB0
ZW1wb3JhcnlOYW1lID0gImNvbmRfIiArIHN0cihtVGVtcG9yYXJ5SW5kZXgrKyk7CisgICAgVElu
dGVybVR5cGVkICp0eXBlZENvbmRpdGlvbiA9IHNlbGVjdGlvbi0+Z2V0Q29uZGl0aW9uKCktPmdl
dEFzVHlwZWQoKTsKKyAgICBUVHlwZSByZXN1bHRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCk7
CisgICAgVEludGVybVN5bWJvbCAqY29uZGl0aW9uU3ltYm9sQSA9IE1ha2VOZXdUZW1wb3Jhcnko
dGVtcG9yYXJ5TmFtZSwgRWJ0Qm9vbCk7CisgICAgVEludGVybVN5bWJvbCAqY29uZGl0aW9uU3lt
Ym9sQiA9IE1ha2VOZXdUZW1wb3JhcnkodGVtcG9yYXJ5TmFtZSwgRWJ0Qm9vbCk7CisgICAgVElu
dGVybVN5bWJvbCAqY29uZGl0aW9uU3ltYm9sQyA9IE1ha2VOZXdUZW1wb3JhcnkodGVtcG9yYXJ5
TmFtZSwgRWJ0Qm9vbCk7CisgICAgVEludGVybUJpbmFyeSAqc3RvcmVDb25kaXRpb24gPSBNYWtl
TmV3QmluYXJ5KEVPcEluaXRpYWxpemUsIGNvbmRpdGlvblN5bWJvbEEsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVkQ29uZGl0aW9uLCByZXN1
bHRUeXBlKTsKKyAgICBUSW50ZXJtVW5hcnkgKm5lZ2F0ZWRDb25kaXRpb24gPSBNYWtlTmV3VW5h
cnkoRU9wTG9naWNhbE5vdCwgY29uZGl0aW9uU3ltYm9sQik7CisgICAgVEludGVybVNlbGVjdGlv
biAqZmFsc2VCbG9jayA9IG5ldyBUSW50ZXJtU2VsZWN0aW9uKG5lZ2F0ZWRDb25kaXRpb24sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGVjdGlvbi0+Z2V0RmFsc2VCbG9jaygpLCBOVUxMKTsKKyAgICBUSW50ZXJtU2VsZWN0aW9uICpu
ZXdJZkVsc2UgPSBuZXcgVEludGVybVNlbGVjdGlvbihjb25kaXRpb25TeW1ib2xDLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlv
bi0+Z2V0VHJ1ZUJsb2NrKCksIGZhbHNlQmxvY2spOworCisgICAgVEludGVybUFnZ3JlZ2F0ZSAq
ZGVjbGFyYXRpb24gPSBuZXcgVEludGVybUFnZ3JlZ2F0ZShFT3BEZWNsYXJhdGlvbik7CisgICAg
ZGVjbGFyYXRpb24tPmdldFNlcXVlbmNlKCkucHVzaF9iYWNrKHN0b3JlQ29uZGl0aW9uKTsKKwor
ICAgIFRJbnRlcm1BZ2dyZWdhdGUgKmJsb2NrID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGUoRU9wU2Vx
dWVuY2UpOworICAgIGJsb2NrLT5nZXRTZXF1ZW5jZSgpLnB1c2hfYmFjayhkZWNsYXJhdGlvbik7
CisgICAgYmxvY2stPmdldFNlcXVlbmNlKCkucHVzaF9iYWNrKG5ld0lmRWxzZSk7CisKKyAgICBy
ZXR1cm4gYmxvY2s7Cit9CisKK3ZvaWQgUmV3cml0ZUVsc2VCbG9ja3MoVEludGVybU5vZGUgKm5v
ZGUpCit7CisgICAgRWxzZUJsb2NrUmV3cml0ZXIgcmV3cml0ZXI7CisgICAgbm9kZS0+dHJhdmVy
c2UoJnJld3JpdGVyKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUmV3cml0ZUVsc2VCbG9ja3MuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Jld3JpdGVFbHNlQmxvY2tz
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMTAyMjEzMzVjZTcwZmM5NmRmMjNhOTA4YzRkZTVjMDc1ZTA0OWMxZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1Jld3JpdGVFbHNlQmxvY2tzLmgKQEAgLTAsMCArMSwzOSBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisvLyBSZXdyaXRlRWxzZUJsb2Nrcy5oOiBQcm90b3R5cGUgZm9yIHRyZWUgdHJhbnNmb3Jt
IHRvIGNoYW5nZQorLy8gICBhbGwgaWYtZWxzZSBibG9ja3MgdG8gaWYtaWYgYmxvY2tzLgorLy8K
KworI2lmbmRlZiBDT01QSUxFUl9SRVdSSVRFX0VMU0VfQkxPQ0tTX0hfCisjZGVmaW5lIENPTVBJ
TEVSX1JFV1JJVEVfRUxTRV9CTE9DS1NfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvaW50ZXJtZWRpYXRlLmgiCisKK25hbWVzcGFjZSBzaAoreworCitjbGFzcyBFbHNlQmxvY2tS
ZXdyaXRlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICAgIEVs
c2VCbG9ja1Jld3JpdGVyKCkKKyAgICAgICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIoZmFsc2UsIGZh
bHNlLCB0cnVlLCBmYWxzZSkKKyAgICAgICAgICAsIG1UZW1wb3JhcnlJbmRleCgwKQorICAgICAg
e30KKworICBwcm90ZWN0ZWQ6CisgICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwg
VEludGVybUFnZ3JlZ2F0ZSAqYWdncmVnYXRlKTsKKworICBwcml2YXRlOgorICAgIGludCBtVGVt
cG9yYXJ5SW5kZXg7CisKKyAgICBUSW50ZXJtTm9kZSAqcmV3cml0ZVNlbGVjdGlvbihUSW50ZXJt
U2VsZWN0aW9uICpzZWxlY3Rpb24pOworfTsKKwordm9pZCBSZXdyaXRlRWxzZUJsb2NrcyhUSW50
ZXJtTm9kZSAqbm9kZSk7CisKK30KKworI2VuZGlmIC8vIENPTVBJTEVSX1JFV1JJVEVfRUxTRV9C
TE9DS1NfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1NlYXJjaFN5bWJvbC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9TZWFyY2hTeW1ib2wuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY3OGM4
NGUzNzBkYWY3M2E0NjE1ZjI4Y2JlZGE3ZjBiMzM5MzFjNTQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TZWFyY2hTeW1i
b2wuY3BwCkBAIC0wLDAgKzEsMzggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBTZWFyY2hTeW1i
b2wgaXMgYW4gQVNUIHRyYXZlcnNlciB0byBkZXRlY3QgdGhlIHVzZSBvZiBhIGdpdmVuIHN5bWJv
bCBuYW1lCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TZWFyY2hTeW1ib2wu
aCIKKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuaCIKKworbmFtZXNwYWNlIHNoCit7CitT
ZWFyY2hTeW1ib2w6OlNlYXJjaFN5bWJvbChjb25zdCBUU3RyaW5nICZzeW1ib2wpIDogbVN5bWJv
bChzeW1ib2wpCit7CisgICAgbWF0Y2ggPSBmYWxzZTsKK30KKwordm9pZCBTZWFyY2hTeW1ib2w6
OnRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMp
OworfQorCit2b2lkIFNlYXJjaFN5bWJvbDo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqc3lt
Ym9sTm9kZSkKK3sKKyAgICBpZiAoc3ltYm9sTm9kZS0+Z2V0U3ltYm9sKCkgPT0gbVN5bWJvbCkK
KyAgICB7CisgICAgICAgIG1hdGNoID0gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgU2VhcmNoU3lt
Ym9sOjpmb3VuZE1hdGNoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbWF0Y2g7Cit9Cit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9T
ZWFyY2hTeW1ib2wuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1NlYXJjaFN5bWJvbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhkZGQzY2IxYWMzYTE4MmRlOWUyOTFm
MTUxZmMzYjFlZDFhYTk5YWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TZWFyY2hTeW1ib2wuaApAQCAtMCwwICsxLDMz
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gU2VhcmNoU3ltYm9sIGlzIGFuIEFTVCB0cmF2ZXJz
ZXIgdG8gZGV0ZWN0IHRoZSB1c2Ugb2YgYSBnaXZlbiBzeW1ib2wgbmFtZQorLy8KKworI2lmbmRl
ZiBDT01QSUxFUl9TRUFSQ0hTWU1CT0xfSF8KKyNkZWZpbmUgQ09NUElMRVJfU0VBUkNIU1lNQk9M
X0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCisKK25hbWVzcGFjZSBz
aAoreworY2xhc3MgU2VhcmNoU3ltYm9sIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAg
cHVibGljOgorICAgIFNlYXJjaFN5bWJvbChjb25zdCBUU3RyaW5nICZzeW1ib2wpOworCisgICAg
dm9pZCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7CisgICAgdm9pZCB2aXNpdFN5bWJvbChU
SW50ZXJtU3ltYm9sICpzeW1ib2xOb2RlKTsKKworICAgIGJvb2wgZm91bmRNYXRjaCgpIGNvbnN0
OworCisgIHByb3RlY3RlZDoKKyAgICBjb25zdCBUU3RyaW5nICZtU3ltYm9sOworICAgIGJvb2wg
bWF0Y2g7Cit9OworfQorCisjZW5kaWYgICAvLyBDT01QSUxFUl9TRUFSQ0hTWU1CT0xfSF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1NoSGFuZGxlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9TaEhhbmRsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU0YWUyNzg1MmRkNTMyOWIwZDhlM2RkYWM0ZTAz
YmNiMTgwNjVlY2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oCkBAIC0wLDAgKzEsMTc5IEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9TSEhBTkRMRV9JTkNMVURFRF8KKyNkZWZpbmUgX1NI
SEFORExFX0lOQ0xVREVEXworCisvLworLy8gTWFjaGluZSBpbmRlcGVuZGVudCBwYXJ0IG9mIHRo
ZSBjb21waWxlciBwcml2YXRlIG9iamVjdHMKKy8vIHNlbnQgYXMgU2hIYW5kbGUgdG8gdGhlIGRy
aXZlci4KKy8vCisvLyBUaGlzIHNob3VsZCBub3QgYmUgaW5jbHVkZWQgYnkgZHJpdmVyIGNvZGUu
CisvLworCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9FeHRlbnNpb25CZWhhdmlvci5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvSGFzaE5hbWVzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9J
bmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuaCIK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5oIgorI2luY2x1ZGUg
InRoaXJkX3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oIgorCitjbGFzcyBMb25n
TmFtZU1hcDsKK2NsYXNzIFRDb21waWxlcjsKK2NsYXNzIFREZXBlbmRlbmN5R3JhcGg7CitjbGFz
cyBUcmFuc2xhdG9ySExTTDsKKworLy8KKy8vIEhlbHBlciBmdW5jdGlvbiB0byBpZGVudGlmeSBz
cGVjcyB0aGF0IGFyZSBiYXNlZCBvbiB0aGUgV2ViR0wgc3BlYywKKy8vIGxpa2UgdGhlIENTUyBT
aGFkZXJzIHNwZWMuCisvLworYm9vbCBpc1dlYkdMQmFzZWRTcGVjKFNoU2hhZGVyU3BlYyBzcGVj
KTsKKworLy8KKy8vIFRoZSBiYXNlIGNsYXNzIHVzZWQgdG8gYmFjayBoYW5kbGVzIHJldHVybmVk
IHRvIHRoZSBkcml2ZXIuCisvLworY2xhc3MgVFNoSGFuZGxlQmFzZSB7CitwdWJsaWM6CisgICAg
VFNoSGFuZGxlQmFzZSgpOworICAgIHZpcnR1YWwgflRTaEhhbmRsZUJhc2UoKTsKKyAgICB2aXJ0
dWFsIFRDb21waWxlciogZ2V0QXNDb21waWxlcigpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFs
IFRyYW5zbGF0b3JITFNMKiBnZXRBc1RyYW5zbGF0b3JITFNMKCkgeyByZXR1cm4gMDsgfQorCitw
cm90ZWN0ZWQ6CisgICAgLy8gTWVtb3J5IGFsbG9jYXRvci4gQWxsb2NhdGVzIGFuZCB0cmFja3Mg
bWVtb3J5IHJlcXVpcmVkIGJ5IHRoZSBjb21waWxlci4KKyAgICAvLyBEZWFsbG9jYXRlcyBhbGwg
bWVtb3J5IHdoZW4gY29tcGlsZXIgaXMgZGVzdHJ1Y3RlZC4KKyAgICBUUG9vbEFsbG9jYXRvciBh
bGxvY2F0b3I7Cit9OworCisvLworLy8gVGhlIGJhc2UgY2xhc3MgZm9yIHRoZSBtYWNoaW5lIGRl
cGVuZGVudCBjb21waWxlciB0byBkZXJpdmUgZnJvbQorLy8gZm9yIG1hbmFnaW5nIG9iamVjdCBj
b2RlIGZyb20gdGhlIGNvbXBpbGUuCisvLworY2xhc3MgVENvbXBpbGVyIDogcHVibGljIFRTaEhh
bmRsZUJhc2UgeworcHVibGljOgorICAgIFRDb21waWxlcihTaFNoYWRlclR5cGUgdHlwZSwgU2hT
aGFkZXJTcGVjIHNwZWMpOworICAgIHZpcnR1YWwgflRDb21waWxlcigpOworICAgIHZpcnR1YWwg
VENvbXBpbGVyKiBnZXRBc0NvbXBpbGVyKCkgeyByZXR1cm4gdGhpczsgfQorCisgICAgYm9vbCBJ
bml0KGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyYgcmVzb3VyY2VzKTsKKyAgICBib29sIGNvbXBp
bGUoY29uc3QgY2hhciogY29uc3Qgc2hhZGVyU3RyaW5nc1tdLAorICAgICAgICAgICAgICAgICBz
aXplX3QgbnVtU3RyaW5ncywKKyAgICAgICAgICAgICAgICAgaW50IGNvbXBpbGVPcHRpb25zKTsK
KworICAgIC8vIEdldCByZXN1bHRzIG9mIHRoZSBsYXN0IGNvbXBpbGF0aW9uLgorICAgIFRJbmZv
U2luayYgZ2V0SW5mb1NpbmsoKSB7IHJldHVybiBpbmZvU2luazsgfQorICAgIGNvbnN0IFRWYXJp
YWJsZUluZm9MaXN0JiBnZXRBdHRyaWJzKCkgY29uc3QgeyByZXR1cm4gYXR0cmliczsgfQorICAg
IGNvbnN0IFRWYXJpYWJsZUluZm9MaXN0JiBnZXRVbmlmb3JtcygpIGNvbnN0IHsgcmV0dXJuIHVu
aWZvcm1zOyB9CisgICAgY29uc3QgVFZhcmlhYmxlSW5mb0xpc3QmIGdldFZhcnlpbmdzKCkgY29u
c3QgeyByZXR1cm4gdmFyeWluZ3M7IH0KKyAgICBpbnQgZ2V0TWFwcGVkTmFtZU1heExlbmd0aCgp
IGNvbnN0OworCisgICAgU2hIYXNoRnVuY3Rpb242NCBnZXRIYXNoRnVuY3Rpb24oKSBjb25zdCB7
IHJldHVybiBoYXNoRnVuY3Rpb247IH0KKyAgICBOYW1lTWFwJiBnZXROYW1lTWFwKCkgeyByZXR1
cm4gbmFtZU1hcDsgfQorICAgIFRTeW1ib2xUYWJsZSYgZ2V0U3ltYm9sVGFibGUoKSB7IHJldHVy
biBzeW1ib2xUYWJsZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgU2hTaGFkZXJUeXBlIGdldFNoYWRl
clR5cGUoKSBjb25zdCB7IHJldHVybiBzaGFkZXJUeXBlOyB9CisgICAgU2hTaGFkZXJTcGVjIGdl
dFNoYWRlclNwZWMoKSBjb25zdCB7IHJldHVybiBzaGFkZXJTcGVjOyB9CisgICAgLy8gSW5pdGlh
bGl6ZSBzeW1ib2wtdGFibGUgd2l0aCBidWlsdC1pbiBzeW1ib2xzLgorICAgIGJvb2wgSW5pdEJ1
aWx0SW5TeW1ib2xUYWJsZShjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291cmNlcyk7Cisg
ICAgLy8gQ2xlYXJzIHRoZSByZXN1bHRzIGZyb20gdGhlIHByZXZpb3VzIGNvbXBpbGF0aW9uLgor
ICAgIHZvaWQgY2xlYXJSZXN1bHRzKCk7CisgICAgLy8gUmV0dXJuIHRydWUgaWYgZnVuY3Rpb24g
cmVjdXJzaW9uIGlzIGRldGVjdGVkIG9yIGNhbGwgZGVwdGggZXhjZWVkZWQuCisgICAgYm9vbCBk
ZXRlY3RDYWxsRGVwdGgoVEludGVybU5vZGUqIHJvb3QsIFRJbmZvU2luayYgaW5mb1NpbmssIGJv
b2wgbGltaXRDYWxsU3RhY2tEZXB0aCk7CisgICAgLy8gUmV3cml0ZXMgYSBzaGFkZXIncyBpbnRl
cm1lZGlhdGUgdHJlZSBhY2NvcmRpbmcgdG8gdGhlIENTUyBTaGFkZXJzIHNwZWMuCisgICAgdm9p
ZCByZXdyaXRlQ1NTU2hhZGVyKFRJbnRlcm1Ob2RlKiByb290KTsKKyAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlIGdpdmVuIHNoYWRlciBkb2VzIG5vdCBleGNlZWQgdGhlIG1pbmltdW0KKyAgICAv
LyBmdW5jdGlvbmFsaXR5IG1hbmRhdGVkIGluIEdMU0wgMS4wIHNwZWMgQXBwZW5kaXggQS4KKyAg
ICBib29sIHZhbGlkYXRlTGltaXRhdGlvbnMoVEludGVybU5vZGUqIHJvb3QpOworICAgIC8vIENv
bGxlY3QgaW5mbyBmb3IgYWxsIGF0dHJpYnMsIHVuaWZvcm1zLCB2YXJ5aW5ncy4KKyAgICB2b2lk
IGNvbGxlY3RWYXJpYWJsZXMoVEludGVybU5vZGUqIHJvb3QpOworICAgIC8vIE1hcCBsb25nIHZh
cmlhYmxlIG5hbWVzIGludG8gc2hvcnRlciBvbmVzLgorICAgIHZvaWQgbWFwTG9uZ1ZhcmlhYmxl
TmFtZXMoVEludGVybU5vZGUqIHJvb3QpOworICAgIC8vIFRyYW5zbGF0ZSB0byBvYmplY3QgY29k
ZS4KKyAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KSA9IDA7Cisg
ICAgLy8gUmV0dXJucyB0cnVlIGlmLCBhZnRlciBhcHBseWluZyB0aGUgcGFja2luZyBydWxlcyBp
biB0aGUgR0xTTCAxLjAxNyBzcGVjCisgICAgLy8gQXBwZW5kaXggQSwgc2VjdGlvbiA3LCB0aGUg
c2hhZGVyIGRvZXMgbm90IHVzZSB0b28gbWFueSB1bmlmb3Jtcy4KKyAgICBib29sIGVuZm9yY2VQ
YWNraW5nUmVzdHJpY3Rpb25zKCk7CisgICAgLy8gSW5zZXJ0IHN0YXRlbWVudHMgdG8gaW5pdGlh
bGl6ZSB2YXJ5aW5ncyB3aXRob3V0IHN0YXRpYyB1c2UgaW4gdGhlIGJlZ2lubmluZworICAgIC8v
IG9mIG1haW4oKS4gSXQgaXMgdG8gd29yayBhcm91bmQgYSBNYWMgZHJpdmVyIHdoZXJlIHN1Y2gg
dmFyeWluZ3MgaW4gYSB2ZXJ0ZXgKKyAgICAvLyBzaGFkZXIgbWF5IGJlIG9wdGltaXplZCBvdXQg
aW5jb3JyZWN0bHkgYXQgY29tcGlsZSB0aW1lLCBjYXVzaW5nIGEgbGluayBmYWlsdXJlLgorICAg
IC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byB2ZXJ0ZXggc2hhZGVy
cy4KKyAgICB2b2lkIGluaXRpYWxpemVWYXJ5aW5nc1dpdGhvdXRTdGF0aWNVc2UoVEludGVybU5v
ZGUqIHJvb3QpOworICAgIC8vIEluc2VydCBnbF9Qb3NpdGlvbiA9IHZlYzQoMCwwLDAsMCkgdG8g
dGhlIGJlZ2lubmluZyBvZiBtYWluKCkuCisgICAgLy8gSXQgaXMgdG8gd29yayBhcm91bmQgYSBM
aW51eCBkcml2ZXIgYnVnIHdoZXJlIG1pc3NpbmcgdGhpcyBjYXVzZXMgY29tcGlsZSBmYWlsdXJl
CisgICAgLy8gd2hpbGUgc3BlYyBzYXlzIGl0IGlzIGFsbG93ZWQuCisgICAgLy8gVGhpcyBmdW5j
dGlvbiBzaG91bGQgb25seSBiZSBhcHBsaWVkIHRvIHZlcnRleCBzaGFkZXJzLgorICAgIHZvaWQg
aW5pdGlhbGl6ZUdMUG9zaXRpb24oVEludGVybU5vZGUqIHJvb3QpOworICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiB0aGUgc2hhZGVyIHBhc3NlcyB0aGUgcmVzdHJpY3Rpb25zIHRoYXQgYWltIHRvIHBy
ZXZlbnQgdGltaW5nIGF0dGFja3MuCisgICAgYm9vbCBlbmZvcmNlVGltaW5nUmVzdHJpY3Rpb25z
KFRJbnRlcm1Ob2RlKiByb290LCBib29sIG91dHB1dEdyYXBoKTsKKyAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2Ugc2FtcGxlcnMuCisgICAgYm9vbCBlbmZvcmNl
VmVydGV4U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290KTsKKyAgICAv
LyBSZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2Ugc2FtcGxlciBkZXBlbmRl
bnQgdmFsdWVzIHRvIGFmZmVjdCBjb250cm9sIAorICAgIC8vIGZsb3cgb3IgaW4gb3BlcmF0aW9u
cyB3aG9zZSB0aW1lIGNhbiBkZXBlbmQgb24gdGhlIGlucHV0IHZhbHVlcy4KKyAgICBib29sIGVu
Zm9yY2VGcmFnbWVudFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhjb25zdCBURGVwZW5kZW5jeUdy
YXBoJiBncmFwaCk7CisgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIG1heGltdW0gZXhwcmVzc2lv
biBjb21wbGV4aXR5IGJlbG93IHRoZSBsaW1pdC4KKyAgICBib29sIGxpbWl0RXhwcmVzc2lvbkNv
bXBsZXhpdHkoVEludGVybU5vZGUqIHJvb3QpOworICAgIC8vIEdldCBidWlsdC1pbiBleHRlbnNp
b25zIHdpdGggZGVmYXVsdCBiZWhhdmlvci4KKyAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3Im
IGdldEV4dGVuc2lvbkJlaGF2aW9yKCkgY29uc3Q7CisgICAgLy8gR2V0IHRoZSByZXNvdXJjZXMg
c2V0IGJ5IEluaXRCdWlsdEluU3ltYm9sVGFibGUKKyAgICBjb25zdCBTaEJ1aWx0SW5SZXNvdXJj
ZXMmIGdldFJlc291cmNlcygpIGNvbnN0OworCisgICAgY29uc3QgQXJyYXlCb3VuZHNDbGFtcGVy
JiBnZXRBcnJheUJvdW5kc0NsYW1wZXIoKSBjb25zdDsKKyAgICBTaEFycmF5SW5kZXhDbGFtcGlu
Z1N0cmF0ZWd5IGdldEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5KCkgY29uc3Q7CisgICAgY29u
c3QgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3ImIGdldEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yKCkg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgU2hTaGFkZXJUeXBlIHNoYWRlclR5cGU7CisgICAgU2hT
aGFkZXJTcGVjIHNoYWRlclNwZWM7CisKKyAgICBpbnQgbWF4VW5pZm9ybVZlY3RvcnM7CisgICAg
aW50IG1heEV4cHJlc3Npb25Db21wbGV4aXR5OworICAgIGludCBtYXhDYWxsU3RhY2tEZXB0aDsK
KworICAgIFNoQnVpbHRJblJlc291cmNlcyBjb21waWxlUmVzb3VyY2VzOworCisgICAgLy8gQnVp
bHQtaW4gc3ltYm9sIHRhYmxlIGZvciB0aGUgZ2l2ZW4gbGFuZ3VhZ2UsIHNwZWMsIGFuZCByZXNv
dXJjZXMuCisgICAgLy8gSXQgaXMgcHJlc2VydmVkIGZyb20gY29tcGlsZS10by1jb21waWxlLgor
ICAgIFRTeW1ib2xUYWJsZSBzeW1ib2xUYWJsZTsKKyAgICAvLyBCdWlsdC1pbiBleHRlbnNpb25z
IHdpdGggZGVmYXVsdCBiZWhhdmlvci4KKyAgICBURXh0ZW5zaW9uQmVoYXZpb3IgZXh0ZW5zaW9u
QmVoYXZpb3I7CisgICAgYm9vbCBmcmFnbWVudFByZWNpc2lvbkhpZ2g7CisKKyAgICBBcnJheUJv
dW5kc0NsYW1wZXIgYXJyYXlCb3VuZHNDbGFtcGVyOworICAgIFNoQXJyYXlJbmRleENsYW1waW5n
U3RyYXRlZ3kgY2xhbXBpbmdTdHJhdGVneTsKKyAgICBCdWlsdEluRnVuY3Rpb25FbXVsYXRvciBi
dWlsdEluRnVuY3Rpb25FbXVsYXRvcjsKKworICAgIC8vIFJlc3VsdHMgb2YgY29tcGlsYXRpb24u
CisgICAgVEluZm9TaW5rIGluZm9TaW5rOyAgLy8gT3V0cHV0IHNpbmsuCisgICAgVFZhcmlhYmxl
SW5mb0xpc3QgYXR0cmliczsgIC8vIEFjdGl2ZSBhdHRyaWJ1dGVzIGluIHRoZSBjb21waWxlZCBz
aGFkZXIuCisgICAgVFZhcmlhYmxlSW5mb0xpc3QgdW5pZm9ybXM7ICAvLyBBY3RpdmUgdW5pZm9y
bXMgaW4gdGhlIGNvbXBpbGVkIHNoYWRlci4KKyAgICBUVmFyaWFibGVJbmZvTGlzdCB2YXJ5aW5n
czsgIC8vIFZhcnlpbmdzIGluIHRoZSBjb21waWxlZCBzaGFkZXIuCisKKyAgICAvLyBDYWNoZWQg
Y29weSBvZiB0aGUgcmVmLWNvdW50ZWQgc2luZ2xldG9uLgorICAgIExvbmdOYW1lTWFwKiBsb25n
TmFtZU1hcDsKKworICAgIC8vIG5hbWUgaGFzaGluZy4KKyAgICBTaEhhc2hGdW5jdGlvbjY0IGhh
c2hGdW5jdGlvbjsKKyAgICBOYW1lTWFwIG5hbWVNYXA7Cit9OworCisvLworLy8gVGhpcyBpcyB0
aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIG1hY2hpbmUgaW5kZXBlbmRlbnQgY29kZQorLy8gYW5k
IHRoZSBtYWNoaW5lIGRlcGVuZGVudCBjb2RlLgorLy8KKy8vIFRoZSBtYWNoaW5lIGRlcGVuZGVu
dCBjb2RlIHNob3VsZCBkZXJpdmUgZnJvbSB0aGUgY2xhc3NlcworLy8gYWJvdmUuIFRoZW4gQ29u
c3RydWN0KigpIGFuZCBEZWxldGUqKCkgd2lsbCBjcmVhdGUgYW5kIAorLy8gZGVzdHJveSB0aGUg
bWFjaGluZSBkZXBlbmRlbnQgb2JqZWN0cywgd2hpY2ggY29udGFpbiB0aGUKKy8vIGFib3ZlIG1h
Y2hpbmUgaW5kZXBlbmRlbnQgaW5mb3JtYXRpb24uCisvLworVENvbXBpbGVyKiBDb25zdHJ1Y3RD
b21waWxlcigKKyAgICBTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsIFNoU2hh
ZGVyT3V0cHV0IG91dHB1dCk7Cit2b2lkIERlbGV0ZUNvbXBpbGVyKFRDb21waWxlciopOworCisj
ZW5kaWYgLy8gX1NISEFORExFX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU2hhZGVyTGFuZy5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TaGFkZXJMYW5nLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi42MDgyMzc4NjBjMTU4MTZlN2Y0OWFkMjU1ZWJhZjA1N2Y0YmNmNzMyCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvU2hhZGVyTGFuZy5jcHAKQEAgLTAsMCArMSwzOTAgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKy8vCisvLyBJbXBsZW1lbnQgdGhlIHRvcC1sZXZlbCBvZiBpbnRlcmZhY2UgdG8gdGhlIGNv
bXBpbGVyLAorLy8gYXMgZGVmaW5lZCBpbiBTaGFkZXJMYW5nLmgKKy8vCisKKyNpbmNsdWRlICJH
TFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5p
dGlhbGl6ZURsbC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9sZW5ndGhfbGlt
aXRzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckhMU0wuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlUGFja2VyLmgiCisKKy8vCisvLyBUaGlzIGlzIHRoZSBw
bGF0Zm9ybSBpbmRlcGVuZGVudCBpbnRlcmZhY2UgYmV0d2VlbiBhbiBPR0wgZHJpdmVyCisvLyBh
bmQgdGhlIHNoYWRpbmcgbGFuZ3VhZ2UgY29tcGlsZXIuCisvLworCitzdGF0aWMgYm9vbCBjaGVj
a1ZhcmlhYmxlTWF4TGVuZ3Rocyhjb25zdCBTaEhhbmRsZSBoYW5kbGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZXhwZWN0ZWRWYWx1ZSkKK3sKKyAgICBzaXpl
X3QgYWN0aXZlVW5pZm9ybUxpbWl0ID0gMDsKKyAgICBTaEdldEluZm8oaGFuZGxlLCBTSF9BQ1RJ
VkVfVU5JRk9STV9NQVhfTEVOR1RILCAmYWN0aXZlVW5pZm9ybUxpbWl0KTsKKyAgICBzaXplX3Qg
YWN0aXZlQXR0cmliTGltaXQgPSAwOworICAgIFNoR2V0SW5mbyhoYW5kbGUsIFNIX0FDVElWRV9B
VFRSSUJVVEVfTUFYX0xFTkdUSCwgJmFjdGl2ZUF0dHJpYkxpbWl0KTsKKyAgICBzaXplX3QgdmFy
eWluZ0xpbWl0ID0gMDsKKyAgICBTaEdldEluZm8oaGFuZGxlLCBTSF9WQVJZSU5HX01BWF9MRU5H
VEgsICZ2YXJ5aW5nTGltaXQpOworICAgIHJldHVybiAoZXhwZWN0ZWRWYWx1ZSA9PSBhY3RpdmVV
bmlmb3JtTGltaXQgJiYKKyAgICAgICAgICAgIGV4cGVjdGVkVmFsdWUgPT0gYWN0aXZlQXR0cmli
TGltaXQgJiYKKyAgICAgICAgICAgIGV4cGVjdGVkVmFsdWUgPT0gdmFyeWluZ0xpbWl0KTsKK30K
Kworc3RhdGljIGJvb2wgY2hlY2tNYXBwZWROYW1lTWF4TGVuZ3RoKGNvbnN0IFNoSGFuZGxlIGhh
bmRsZSwgc2l6ZV90IGV4cGVjdGVkVmFsdWUpCit7CisgICAgc2l6ZV90IG1hcHBlZE5hbWVNYXhM
ZW5ndGggPSAwOworICAgIFNoR2V0SW5mbyhoYW5kbGUsIFNIX01BUFBFRF9OQU1FX01BWF9MRU5H
VEgsICZtYXBwZWROYW1lTWF4TGVuZ3RoKTsKKyAgICByZXR1cm4gKGV4cGVjdGVkVmFsdWUgPT0g
bWFwcGVkTmFtZU1heExlbmd0aCk7Cit9CisKKy8vCisvLyBEcml2ZXIgbXVzdCBjYWxsIHRoaXMg
Zmlyc3QsIG9uY2UsIGJlZm9yZSBkb2luZyBhbnkgb3RoZXIgY29tcGlsZXIgb3BlcmF0aW9ucy4K
Ky8vIFN1YnNlcXVlbnQgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiBhcmUgbm8tb3AuCisvLworaW50
IFNoSW5pdGlhbGl6ZSgpCit7CisgICAgc3RhdGljIGNvbnN0IGJvb2wga0luaXRpYWxpemVkID0g
SW5pdFByb2Nlc3MoKTsKKyAgICByZXR1cm4ga0luaXRpYWxpemVkID8gMSA6IDA7Cit9CisKKy8v
CisvLyBDbGVhbnVwIHN5bWJvbCB0YWJsZXMKKy8vCitpbnQgU2hGaW5hbGl6ZSgpCit7CisgICAg
RGV0YWNoUHJvY2VzcygpOworICAgIHJldHVybiAxOworfQorCisvLworLy8gSW5pdGlhbGl6ZSBi
dWlsdC1pbiByZXNvdXJjZXMgd2l0aCBtaW5pbXVtIGV4cGVjdGVkIHZhbHVlcy4KKy8vCit2b2lk
IFNoSW5pdEJ1aWx0SW5SZXNvdXJjZXMoU2hCdWlsdEluUmVzb3VyY2VzKiByZXNvdXJjZXMpCit7
CisgICAgLy8gQ29uc3RhbnRzLgorICAgIHJlc291cmNlcy0+TWF4VmVydGV4QXR0cmlicyA9IDg7
CisgICAgcmVzb3VyY2VzLT5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA9IDEyODsKKyAgICByZXNv
dXJjZXMtPk1heFZhcnlpbmdWZWN0b3JzID0gODsKKyAgICByZXNvdXJjZXMtPk1heFZlcnRleFRl
eHR1cmVJbWFnZVVuaXRzID0gMDsKKyAgICByZXNvdXJjZXMtPk1heENvbWJpbmVkVGV4dHVyZUlt
YWdlVW5pdHMgPSA4OworICAgIHJlc291cmNlcy0+TWF4VGV4dHVyZUltYWdlVW5pdHMgPSA4Owor
ICAgIHJlc291cmNlcy0+TWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyA9IDE2OworICAgIHJlc291
cmNlcy0+TWF4RHJhd0J1ZmZlcnMgPSAxOworCisgICAgLy8gRXh0ZW5zaW9ucy4KKyAgICByZXNv
dXJjZXMtPk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA9IDA7CisgICAgcmVzb3VyY2VzLT5PRVNf
RUdMX2ltYWdlX2V4dGVybmFsID0gMDsKKyAgICByZXNvdXJjZXMtPkFSQl90ZXh0dXJlX3JlY3Rh
bmdsZSA9IDA7CisgICAgcmVzb3VyY2VzLT5FWFRfZHJhd19idWZmZXJzID0gMDsKKyAgICByZXNv
dXJjZXMtPkVYVF9mcmFnX2RlcHRoID0gMDsKKworICAgIC8vIERpc2FibGUgaGlnaHAgcHJlY2lz
aW9uIGluIGZyYWdtZW50IHNoYWRlciBieSBkZWZhdWx0LgorICAgIHJlc291cmNlcy0+RnJhZ21l
bnRQcmVjaXNpb25IaWdoID0gMDsKKworICAgIC8vIERpc2FibGUgbmFtZSBoYXNoaW5nIGJ5IGRl
ZmF1bHQuCisgICAgcmVzb3VyY2VzLT5IYXNoRnVuY3Rpb24gPSBOVUxMOworCisgICAgcmVzb3Vy
Y2VzLT5BcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSA9IFNIX0NMQU1QX1dJVEhfQ0xBTVBfSU5U
UklOU0lDOworCisgICAgcmVzb3VyY2VzLT5NYXhFeHByZXNzaW9uQ29tcGxleGl0eSA9IDI1NjsK
KyAgICByZXNvdXJjZXMtPk1heENhbGxTdGFja0RlcHRoID0gMjU2OworfQorCisvLworLy8gRHJp
dmVyIGNhbGxzIHRoZXNlIHRvIGNyZWF0ZSBhbmQgZGVzdHJveSBjb21waWxlciBvYmplY3RzLgor
Ly8KK1NoSGFuZGxlIFNoQ29uc3RydWN0Q29tcGlsZXIoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hh
ZGVyU3BlYyBzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaFNoYWRlck91dHB1
dCBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNoQnVpbHRJblJl
c291cmNlcyogcmVzb3VyY2VzKQoreworICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNf
Y2FzdDxUU2hIYW5kbGVCYXNlKj4oQ29uc3RydWN0Q29tcGlsZXIodHlwZSwgc3BlYywgb3V0cHV0
KSk7CisgICAgVENvbXBpbGVyKiBjb21waWxlciA9IGJhc2UtPmdldEFzQ29tcGlsZXIoKTsKKyAg
ICBpZiAoY29tcGlsZXIgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBHZW5lcmF0
ZSBidWlsdC1pbiBzeW1ib2wgdGFibGUuCisgICAgaWYgKCFjb21waWxlci0+SW5pdCgqcmVzb3Vy
Y2VzKSkgeworICAgICAgICBTaERlc3RydWN0KGJhc2UpOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZSk7Cit9CisKK3Zv
aWQgU2hEZXN0cnVjdChTaEhhbmRsZSBoYW5kbGUpCit7CisgICAgaWYgKGhhbmRsZSA9PSAwKQor
ICAgICAgICByZXR1cm47CisKKyAgICBUU2hIYW5kbGVCYXNlKiBiYXNlID0gc3RhdGljX2Nhc3Q8
VFNoSGFuZGxlQmFzZSo+KGhhbmRsZSk7CisKKyAgICBpZiAoYmFzZS0+Z2V0QXNDb21waWxlcigp
KQorICAgICAgICBEZWxldGVDb21waWxlcihiYXNlLT5nZXRBc0NvbXBpbGVyKCkpOworfQorCisv
LworLy8gRG8gYW4gYWN0dWFsIGNvbXBpbGUgb24gdGhlIGdpdmVuIHN0cmluZ3MuICBUaGUgcmVz
dWx0IGlzIGxlZnQgCisvLyBpbiB0aGUgZ2l2ZW4gY29tcGlsZSBvYmplY3QuCisvLworLy8gUmV0
dXJuOiAgVGhlIHJldHVybiB2YWx1ZSBvZiBTaENvbXBpbGUgaXMgcmVhbGx5IGJvb2xlYW4sIGlu
ZGljYXRpbmcKKy8vIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4KKy8vCitpbnQgU2hDb21waWxlKAorICAg
IGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwKKyAgICBjb25zdCBjaGFyKiBjb25zdCBzaGFkZXJTdHJp
bmdzW10sCisgICAgc2l6ZV90IG51bVN0cmluZ3MsCisgICAgaW50IGNvbXBpbGVPcHRpb25zKQor
eworICAgIGlmIChoYW5kbGUgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBUU2hIYW5k
bGVCYXNlKiBiYXNlID0gcmVpbnRlcnByZXRfY2FzdDxUU2hIYW5kbGVCYXNlKj4oaGFuZGxlKTsK
KyAgICBUQ29tcGlsZXIqIGNvbXBpbGVyID0gYmFzZS0+Z2V0QXNDb21waWxlcigpOworICAgIGlm
IChjb21waWxlciA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGJvb2wgc3VjY2VzcyA9
IGNvbXBpbGVyLT5jb21waWxlKHNoYWRlclN0cmluZ3MsIG51bVN0cmluZ3MsIGNvbXBpbGVPcHRp
b25zKTsKKyAgICByZXR1cm4gc3VjY2VzcyA/IDEgOiAwOworfQorCit2b2lkIFNoR2V0SW5mbyhj
b25zdCBTaEhhbmRsZSBoYW5kbGUsIFNoU2hhZGVySW5mbyBwbmFtZSwgc2l6ZV90KiBwYXJhbXMp
Cit7CisgICAgaWYgKCFoYW5kbGUgfHwgIXBhcmFtcykKKyAgICAgICAgcmV0dXJuOworCisgICAg
VFNoSGFuZGxlQmFzZSogYmFzZSA9IHN0YXRpY19jYXN0PFRTaEhhbmRsZUJhc2UqPihoYW5kbGUp
OworICAgIFRDb21waWxlciogY29tcGlsZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7CisgICAg
aWYgKCFjb21waWxlcikgcmV0dXJuOworCisgICAgc3dpdGNoKHBuYW1lKQorICAgIHsKKyAgICBj
YXNlIFNIX0lORk9fTE9HX0xFTkdUSDoKKyAgICAgICAgKnBhcmFtcyA9IGNvbXBpbGVyLT5nZXRJ
bmZvU2luaygpLmluZm8uc2l6ZSgpICsgMTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSF9P
QkpFQ1RfQ09ERV9MRU5HVEg6CisgICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0SW5mb1Np
bmsoKS5vYmouc2l6ZSgpICsgMTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSF9BQ1RJVkVf
VU5JRk9STVM6CisgICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0VW5pZm9ybXMoKS5zaXpl
KCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdU
SDoKKyAgICAgICAgKnBhcmFtcyA9IDEgKyAgTUFYX1NZTUJPTF9OQU1FX0xFTjsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBTSF9BQ1RJVkVfQVRUUklCVVRFUzoKKyAgICAgICAgKnBhcmFtcyA9
IGNvbXBpbGVyLT5nZXRBdHRyaWJzKCkuc2l6ZSgpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFNIX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSDoKKyAgICAgICAgKnBhcmFtcyA9IDEgKyBN
QVhfU1lNQk9MX05BTUVfTEVOOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNIX1ZBUllJTkdT
OgorICAgICAgICAqcGFyYW1zID0gY29tcGlsZXItPmdldFZhcnlpbmdzKCkuc2l6ZSgpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFNIX1ZBUllJTkdfTUFYX0xFTkdUSDoKKyAgICAgICAgKnBh
cmFtcyA9IDEgKyBNQVhfU1lNQk9MX05BTUVfTEVOOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFNIX01BUFBFRF9OQU1FX01BWF9MRU5HVEg6CisgICAgICAgIC8vIFVzZSBsb25nZXIgbGVuZ3Ro
IHRoYW4gTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJWkUgdG8KKyAgICAgICAgLy8gaGFuZGxl
IGFycmF5IGFuZCBzdHJ1Y3QgZGVyZWZlcmVuY2VzLgorICAgICAgICAqcGFyYW1zID0gMSArIE1B
WF9TWU1CT0xfTkFNRV9MRU47CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hfTkFNRV9NQVhf
TEVOR1RIOgorICAgICAgICAqcGFyYW1zID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgU0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSDoKKyAgICAgICAg
aWYgKGNvbXBpbGVyLT5nZXRIYXNoRnVuY3Rpb24oKSA9PSBOVUxMKSB7CisgICAgICAgICAgICAq
cGFyYW1zID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIDY0IGJpdHMgaGFz
aGluZyBvdXRwdXQgcmVxdWlyZXMgMTYgYnl0ZXMgZm9yIGhleCAKKyAgICAgICAgICAgIC8vIHJl
cHJlc2VudGF0aW9uLgorICAgICAgICAgICAgY29uc3QgY2hhciBIYXNoZWROYW1lUHJlZml4W10g
PSBIQVNIRURfTkFNRV9QUkVGSVg7CisgICAgICAgICAgICAqcGFyYW1zID0gMTYgKyBzaXplb2Yo
SGFzaGVkTmFtZVByZWZpeCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBT
SF9IQVNIRURfTkFNRVNfQ09VTlQ6CisgICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0TmFt
ZU1hcCgpLnNpemUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICB9Cit9CisKKy8vCisvLyBSZXR1cm4gYW55IGNvbXBpbGVyIGxvZyBvZiBtZXNzYWdl
cyBmb3IgdGhlIGFwcGxpY2F0aW9uLgorLy8KK3ZvaWQgU2hHZXRJbmZvTG9nKGNvbnN0IFNoSGFu
ZGxlIGhhbmRsZSwgY2hhciogaW5mb0xvZykKK3sKKyAgICBpZiAoIWhhbmRsZSB8fCAhaW5mb0xv
ZykKKyAgICAgICAgcmV0dXJuOworCisgICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHN0YXRpY19j
YXN0PFRTaEhhbmRsZUJhc2UqPihoYW5kbGUpOworICAgIFRDb21waWxlciogY29tcGlsZXIgPSBi
YXNlLT5nZXRBc0NvbXBpbGVyKCk7CisgICAgaWYgKCFjb21waWxlcikgcmV0dXJuOworCisgICAg
VEluZm9TaW5rJiBpbmZvU2luayA9IGNvbXBpbGVyLT5nZXRJbmZvU2luaygpOworICAgIHN0cmNw
eShpbmZvTG9nLCBpbmZvU2luay5pbmZvLmNfc3RyKCkpOworfQorCisvLworLy8gUmV0dXJuIGFu
eSBvYmplY3QgY29kZS4KKy8vCit2b2lkIFNoR2V0T2JqZWN0Q29kZShjb25zdCBTaEhhbmRsZSBo
YW5kbGUsIGNoYXIqIG9iakNvZGUpCit7CisgICAgaWYgKCFoYW5kbGUgfHwgIW9iakNvZGUpCisg
ICAgICAgIHJldHVybjsKKworICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2FzdDxU
U2hIYW5kbGVCYXNlKj4oaGFuZGxlKTsKKyAgICBUQ29tcGlsZXIqIGNvbXBpbGVyID0gYmFzZS0+
Z2V0QXNDb21waWxlcigpOworICAgIGlmICghY29tcGlsZXIpIHJldHVybjsKKworICAgIFRJbmZv
U2luayYgaW5mb1NpbmsgPSBjb21waWxlci0+Z2V0SW5mb1NpbmsoKTsKKyAgICBzdHJjcHkob2Jq
Q29kZSwgaW5mb1Npbmsub2JqLmNfc3RyKCkpOworfQorCit2b2lkIFNoR2V0VmFyaWFibGVJbmZv
KGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgU2hTaGFkZXJJ
bmZvIHZhclR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90KiBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgIGlu
dCogc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgU2hEYXRhVHlwZSogdHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgU2hQcmVjaXNpb25UeXBlKiBwcmVjaXNpb24sCisgICAgICAgICAg
ICAgICAgICAgICAgIGludCogc3RhdGljVXNlLAorICAgICAgICAgICAgICAgICAgICAgICBjaGFy
KiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBtYXBwZWROYW1lKQoreworICAg
IGlmICghaGFuZGxlIHx8ICFzaXplIHx8ICF0eXBlIHx8ICFwcmVjaXNpb24gfHwgIXN0YXRpY1Vz
ZSB8fCAhbmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCgodmFyVHlwZSA9PSBTSF9B
Q1RJVkVfQVRUUklCVVRFUykgfHwKKyAgICAgICAgICAgKHZhclR5cGUgPT0gU0hfQUNUSVZFX1VO
SUZPUk1TKSB8fAorICAgICAgICAgICAodmFyVHlwZSA9PSBTSF9WQVJZSU5HUykpOworCisgICAg
VFNoSGFuZGxlQmFzZSogYmFzZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8VFNoSGFuZGxlQmFzZSo+KGhh
bmRsZSk7CisgICAgVENvbXBpbGVyKiBjb21waWxlciA9IGJhc2UtPmdldEFzQ29tcGlsZXIoKTsK
KyAgICBpZiAoY29tcGlsZXIgPT0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgVFZh
cmlhYmxlSW5mb0xpc3QmIHZhckxpc3QgPQorICAgICAgICB2YXJUeXBlID09IFNIX0FDVElWRV9B
VFRSSUJVVEVTID8gY29tcGlsZXItPmdldEF0dHJpYnMoKSA6CisgICAgICAgICAgICAodmFyVHlw
ZSA9PSBTSF9BQ1RJVkVfVU5JRk9STVMgPyBjb21waWxlci0+Z2V0VW5pZm9ybXMoKSA6CisgICAg
ICAgICAgICAgICAgY29tcGlsZXItPmdldFZhcnlpbmdzKCkpOworICAgIGlmIChpbmRleCA8IDAg
fHwgaW5kZXggPj0gc3RhdGljX2Nhc3Q8aW50Pih2YXJMaXN0LnNpemUoKSkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGNvbnN0IFRWYXJpYWJsZUluZm8mIHZhckluZm8gPSB2YXJMaXN0W2luZGV4
XTsKKyAgICBpZiAobGVuZ3RoKSAqbGVuZ3RoID0gdmFySW5mby5uYW1lLnNpemUoKTsKKyAgICAq
c2l6ZSA9IHZhckluZm8uc2l6ZTsKKyAgICAqdHlwZSA9IHZhckluZm8udHlwZTsKKyAgICBzd2l0
Y2ggKHZhckluZm8ucHJlY2lzaW9uKSB7CisgICAgY2FzZSBFYnBMb3c6CisgICAgICAgICpwcmVj
aXNpb24gPSBTSF9QUkVDSVNJT05fTE9XUDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFYnBN
ZWRpdW06CisgICAgICAgICpwcmVjaXNpb24gPSBTSF9QUkVDSVNJT05fTUVESVVNUDsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBFYnBIaWdoOgorICAgICAgICAqcHJlY2lzaW9uID0gU0hfUFJF
Q0lTSU9OX0hJR0hQOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBT
b21lIHR5cGVzIGRvZXMgbm90IHN1cHBvcnQgcHJlY2lzaW9uLCBmb3IgZXhhbXBsZSwgYm9vbGVh
bi4KKyAgICAgICAgKnByZWNpc2lvbiA9IFNIX1BSRUNJU0lPTl9VTkRFRklORUQ7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICAqc3RhdGljVXNlID0gdmFySW5mby5zdGF0aWNVc2UgPyAxIDog
MDsKKworICAgIC8vIFRoaXMgc2l6ZSBtdXN0IG1hdGNoIHRoYXQgcXVlcmllZCBieQorICAgIC8v
IFNIX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEgsIFNIX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xF
TkdUSCwgU0hfVkFSWUlOR19NQVhfTEVOR1RICisgICAgLy8gaW4gU2hHZXRJbmZvLCBiZWxvdy4K
KyAgICBzaXplX3QgdmFyaWFibGVMZW5ndGggPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsKKyAg
ICBBU1NFUlQoY2hlY2tWYXJpYWJsZU1heExlbmd0aHMoaGFuZGxlLCB2YXJpYWJsZUxlbmd0aCkp
OworICAgIHN0cm5jcHkobmFtZSwgdmFySW5mby5uYW1lLmNfc3RyKCksIHZhcmlhYmxlTGVuZ3Ro
KTsKKyAgICBuYW1lW3ZhcmlhYmxlTGVuZ3RoIC0gMV0gPSAwOworICAgIGlmIChtYXBwZWROYW1l
KSB7CisgICAgICAgIC8vIFRoaXMgc2l6ZSBtdXN0IG1hdGNoIHRoYXQgcXVlcmllZCBieQorICAg
ICAgICAvLyBTSF9NQVBQRURfTkFNRV9NQVhfTEVOR1RIIGluIFNoR2V0SW5mbywgYmVsb3cuCisg
ICAgICAgIHNpemVfdCBtYXhNYXBwZWROYW1lTGVuZ3RoID0gMSArIE1BWF9TWU1CT0xfTkFNRV9M
RU47CisgICAgICAgIEFTU0VSVChjaGVja01hcHBlZE5hbWVNYXhMZW5ndGgoaGFuZGxlLCBtYXhN
YXBwZWROYW1lTGVuZ3RoKSk7CisgICAgICAgIHN0cm5jcHkobWFwcGVkTmFtZSwgdmFySW5mby5t
YXBwZWROYW1lLmNfc3RyKCksIG1heE1hcHBlZE5hbWVMZW5ndGgpOworICAgICAgICBtYXBwZWRO
YW1lW21heE1hcHBlZE5hbWVMZW5ndGggLSAxXSA9IDA7CisgICAgfQorfQorCit2b2lkIFNoR2V0
TmFtZUhhc2hpbmdFbnRyeShjb25zdCBTaEhhbmRsZSBoYW5kbGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBu
YW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogaGFzaGVkTmFtZSkKK3sKKyAg
ICBpZiAoIWhhbmRsZSB8fCAhbmFtZSB8fCAhaGFzaGVkTmFtZSB8fCBpbmRleCA8IDApCisgICAg
ICAgIHJldHVybjsKKworICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2FzdDxUU2hI
YW5kbGVCYXNlKj4oaGFuZGxlKTsKKyAgICBUQ29tcGlsZXIqIGNvbXBpbGVyID0gYmFzZS0+Z2V0
QXNDb21waWxlcigpOworICAgIGlmICghY29tcGlsZXIpIHJldHVybjsKKworICAgIGNvbnN0IE5h
bWVNYXAmIG5hbWVNYXAgPSBjb21waWxlci0+Z2V0TmFtZU1hcCgpOworICAgIGlmIChpbmRleCA+
PSBzdGF0aWNfY2FzdDxpbnQ+KG5hbWVNYXAuc2l6ZSgpKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuYW1lTWFwLmJlZ2luKCk7CisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBpbmRleDsgKytpKQorICAgICAgICArK2l0OworCisgICAgc2l6ZV90
IGxlbiA9IGl0LT5maXJzdC5sZW5ndGgoKSArIDE7CisgICAgc2l6ZV90IG1heF9sZW4gPSAwOwor
ICAgIFNoR2V0SW5mbyhoYW5kbGUsIFNIX05BTUVfTUFYX0xFTkdUSCwgJm1heF9sZW4pOworICAg
IGlmIChsZW4gPiBtYXhfbGVuKSB7CisgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgIGxl
biA9IG1heF9sZW47CisgICAgfQorICAgIHN0cm5jcHkobmFtZSwgaXQtPmZpcnN0LmNfc3RyKCks
IGxlbik7CisgICAgLy8gVG8gYmUgb24gdGhlIHNhZmUgc2lkZSBpbiBjYXNlIHRoZSBzb3VyY2Ug
aXMgbG9uZ2VyIHRoYW4gZXhwZWN0ZWQuCisgICAgbmFtZVtsZW4gLSAxXSA9ICdcMCc7CisKKyAg
ICBsZW4gPSBpdC0+c2Vjb25kLmxlbmd0aCgpICsgMTsKKyAgICBtYXhfbGVuID0gMDsKKyAgICBT
aEdldEluZm8oaGFuZGxlLCBTSF9IQVNIRURfTkFNRV9NQVhfTEVOR1RILCAmbWF4X2xlbik7Cisg
ICAgaWYgKGxlbiA+IG1heF9sZW4pIHsKKyAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAg
bGVuID0gbWF4X2xlbjsKKyAgICB9CisgICAgc3RybmNweShoYXNoZWROYW1lLCBpdC0+c2Vjb25k
LmNfc3RyKCksIGxlbik7CisgICAgLy8gVG8gYmUgb24gdGhlIHNhZmUgc2lkZSBpbiBjYXNlIHRo
ZSBzb3VyY2UgaXMgbG9uZ2VyIHRoYW4gZXhwZWN0ZWQuCisgICAgaGFzaGVkTmFtZVtsZW4gLSAx
XSA9ICdcMCc7Cit9CisKK3ZvaWQgU2hHZXRJbmZvUG9pbnRlcihjb25zdCBTaEhhbmRsZSBoYW5k
bGUsIFNoU2hhZGVySW5mbyBwbmFtZSwgdm9pZCoqIHBhcmFtcykKK3sKKyAgICBpZiAoIWhhbmRs
ZSB8fCAhcGFyYW1zKQorICAgICAgICByZXR1cm47CisKKyAgICBUU2hIYW5kbGVCYXNlKiBiYXNl
ID0gc3RhdGljX2Nhc3Q8VFNoSGFuZGxlQmFzZSo+KGhhbmRsZSk7CisgICAgVHJhbnNsYXRvckhM
U0wqIHRyYW5zbGF0b3IgPSBiYXNlLT5nZXRBc1RyYW5zbGF0b3JITFNMKCk7CisgICAgaWYgKCF0
cmFuc2xhdG9yKSByZXR1cm47CisKKyAgICBzd2l0Y2gocG5hbWUpCisgICAgeworICAgIGNhc2Ug
U0hfQUNUSVZFX1VOSUZPUk1TX0FSUkFZOgorICAgICAgICAqcGFyYW1zID0gKHZvaWQqKSZ0cmFu
c2xhdG9yLT5nZXRVbmlmb3JtcygpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgIH0KK30KKworaW50IFNoQ2hlY2tWYXJpYWJsZXNXaXRoaW5QYWNraW5n
TGltaXRzKAorICAgIGludCBtYXhWZWN0b3JzLCBTaFZhcmlhYmxlSW5mbyogdmFySW5mb0FycmF5
LCBzaXplX3QgdmFySW5mb0FycmF5U2l6ZSkKK3sKKyAgICBpZiAodmFySW5mb0FycmF5U2l6ZSA9
PSAwKQorICAgICAgICByZXR1cm4gMTsKKyAgICBBU1NFUlQodmFySW5mb0FycmF5KTsKKyAgICBU
VmFyaWFibGVJbmZvTGlzdCB2YXJpYWJsZXM7CisgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8
IHZhckluZm9BcnJheVNpemU7ICsraWkpCisgICAgeworICAgICAgICBUVmFyaWFibGVJbmZvIHZh
cih2YXJJbmZvQXJyYXlbaWldLnR5cGUsIHZhckluZm9BcnJheVtpaV0uc2l6ZSk7CisgICAgICAg
IHZhcmlhYmxlcy5wdXNoX2JhY2sodmFyKTsKKyAgICB9CisgICAgVmFyaWFibGVQYWNrZXIgcGFj
a2VyOworICAgIHJldHVybiBwYWNrZXIuQ2hlY2tWYXJpYWJsZXNXaXRoaW5QYWNraW5nTGltaXRz
KG1heFZlY3RvcnMsIHZhcmlhYmxlcykgPyAxIDogMDsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRh
YmxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5kMDRmZTVkMzU1NmM5ZmFmOTFiMzU4MzE2OTIzMmI4NTg1NDcx
YWYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuY3BwCkBAIC0wLDAgKzEsMjE2IEBACisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisvLworLy8gU3ltYm9sIHRhYmxlIGZvciBwYXJzaW5nLiAgTW9zdCBmdW5j
dGlvbmFsaXkgYW5kIG1haW4gaWRlYXMKKy8vIGFyZSBkb2N1bWVudGVkIGluIHRoZSBoZWFkZXIg
ZmlsZS4KKy8vCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorI3ByYWdtYSB3YXJuaW5nKGRpc2Fi
bGU6IDQ3MTgpCisjZW5kaWYKKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9s
VGFibGUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2lu
Y2x1ZGUgPGNsaW1pdHM+CisKK1RUeXBlOjpUVHlwZShjb25zdCBUUHVibGljVHlwZSAmcCkgOgor
ICAgICAgICAgICAgdHlwZShwLnR5cGUpLCBwcmVjaXNpb24ocC5wcmVjaXNpb24pLCBxdWFsaWZp
ZXIocC5xdWFsaWZpZXIpLCBzaXplKHAuc2l6ZSksIG1hdHJpeChwLm1hdHJpeCksIGFycmF5KHAu
YXJyYXkpLCBhcnJheVNpemUocC5hcnJheVNpemUpLCBzdHJ1Y3R1cmUoMCkKK3sKKyAgICBpZiAo
cC51c2VyRGVmKQorICAgICAgICBzdHJ1Y3R1cmUgPSBwLnVzZXJEZWYtPmdldFN0cnVjdCgpOwor
fQorCisvLworLy8gUmVjdXJzaXZlbHkgZ2VuZXJhdGUgbWFuZ2xlZCBuYW1lcy4KKy8vCitUU3Ry
aW5nIFRUeXBlOjpidWlsZE1hbmdsZWROYW1lKCkgY29uc3QKK3sKKyAgICBUU3RyaW5nIG1hbmds
ZWROYW1lOworICAgIGlmIChpc01hdHJpeCgpKQorICAgICAgICBtYW5nbGVkTmFtZSArPSAnbSc7
CisgICAgZWxzZSBpZiAoaXNWZWN0b3IoKSkKKyAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ3YnOwor
CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBFYnRGbG9hdDogICAgICAgbWFuZ2xlZE5h
bWUgKz0gJ2YnOyAgICAgIGJyZWFrOworICAgIGNhc2UgRWJ0SW50OiAgICAgICAgIG1hbmdsZWRO
YW1lICs9ICdpJzsgICAgICBicmVhazsKKyAgICBjYXNlIEVidEJvb2w6ICAgICAgICBtYW5nbGVk
TmFtZSArPSAnYic7ICAgICAgYnJlYWs7CisgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgbWFuZ2xl
ZE5hbWUgKz0gInMyIjsgICAgIGJyZWFrOworICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6IG1hbmds
ZWROYW1lICs9ICJzQyI7ICAgICBicmVhazsKKyAgICBjYXNlIEVidFN0cnVjdDogICAgICBtYW5n
bGVkTmFtZSArPSBzdHJ1Y3R1cmUtPm1hbmdsZWROYW1lKCk7IGJyZWFrOworICAgIGRlZmF1bHQ6
ICAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1hbmdsZWROYW1lICs9IHN0YXRpY19j
YXN0PGNoYXI+KCcwJyArIGdldE5vbWluYWxTaXplKCkpOworICAgIGlmIChpc0FycmF5KCkpIHsK
KyAgICAgICAgY2hhciBidWZbMjBdOworICAgICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYp
LCAiJWQiLCBhcnJheVNpemUpOworICAgICAgICBtYW5nbGVkTmFtZSArPSAnWyc7CisgICAgICAg
IG1hbmdsZWROYW1lICs9IGJ1ZjsKKyAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ10nOworICAgIH0K
KyAgICByZXR1cm4gbWFuZ2xlZE5hbWU7Cit9CisKK3NpemVfdCBUVHlwZTo6Z2V0T2JqZWN0U2l6
ZSgpIGNvbnN0Cit7CisgICAgc2l6ZV90IHRvdGFsU2l6ZSA9IDA7CisKKyAgICBpZiAoZ2V0QmFz
aWNUeXBlKCkgPT0gRWJ0U3RydWN0KQorICAgICAgICB0b3RhbFNpemUgPSBzdHJ1Y3R1cmUtPm9i
amVjdFNpemUoKTsKKyAgICBlbHNlIGlmIChtYXRyaXgpCisgICAgICAgIHRvdGFsU2l6ZSA9IHNp
emUgKiBzaXplOworICAgIGVsc2UKKyAgICAgICAgdG90YWxTaXplID0gc2l6ZTsKKworICAgIGlm
IChpc0FycmF5KCkpIHsKKyAgICAgICAgc2l6ZV90IGFycmF5U2l6ZSA9IGdldEFycmF5U2l6ZSgp
OworICAgICAgICBpZiAoYXJyYXlTaXplID4gSU5UX01BWCAvIHRvdGFsU2l6ZSkKKyAgICAgICAg
ICAgIHRvdGFsU2l6ZSA9IElOVF9NQVg7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRvdGFs
U2l6ZSAqPSBhcnJheVNpemU7CisgICAgfQorCisgICAgcmV0dXJuIHRvdGFsU2l6ZTsKK30KKwor
Ym9vbCBUU3RydWN0dXJlOjpjb250YWluc0FycmF5cygpIGNvbnN0Cit7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtRmllbGRzLT5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBUVHlw
ZSogZmllbGRUeXBlID0gKCptRmllbGRzKVtpXS0+dHlwZSgpOworICAgICAgICBpZiAoZmllbGRU
eXBlLT5pc0FycmF5KCkgfHwgZmllbGRUeXBlLT5pc1N0cnVjdHVyZUNvbnRhaW5pbmdBcnJheXMo
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK1RTdHJpbmcgVFN0cnVjdHVyZTo6YnVpbGRNYW5nbGVkTmFtZSgpIGNvbnN0Cit7CisgICAg
VFN0cmluZyBtYW5nbGVkTmFtZSgic3RydWN0LSIpOworICAgIG1hbmdsZWROYW1lICs9ICptTmFt
ZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1GaWVsZHMtPnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIG1hbmdsZWROYW1lICs9ICctJzsKKyAgICAgICAgbWFuZ2xlZE5hbWUgKz0gKCptRmll
bGRzKVtpXS0+dHlwZSgpLT5nZXRNYW5nbGVkTmFtZSgpOworICAgIH0KKyAgICByZXR1cm4gbWFu
Z2xlZE5hbWU7Cit9CisKK3NpemVfdCBUU3RydWN0dXJlOjpjYWxjdWxhdGVPYmplY3RTaXplKCkg
Y29uc3QKK3sKKyAgICBzaXplX3Qgc2l6ZSA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtRmllbGRzLT5zaXplKCk7ICsraSkgeworICAgICAgICBzaXplX3QgZmllbGRTaXplID0gKCpt
RmllbGRzKVtpXS0+dHlwZSgpLT5nZXRPYmplY3RTaXplKCk7CisgICAgICAgIGlmIChmaWVsZFNp
emUgPiBJTlRfTUFYIC0gc2l6ZSkKKyAgICAgICAgICAgIHNpemUgPSBJTlRfTUFYOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBzaXplICs9IGZpZWxkU2l6ZTsKKyAgICB9CisgICAgcmV0dXJu
IHNpemU7Cit9CisKK2ludCBUU3RydWN0dXJlOjpjYWxjdWxhdGVEZWVwZXN0TmVzdGluZygpIGNv
bnN0Cit7CisgICAgaW50IG1heE5lc3RpbmcgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbUZpZWxkcy0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgbWF4TmVzdGluZyA9IHN0ZDo6bWF4
KG1heE5lc3RpbmcsICgqbUZpZWxkcylbaV0tPnR5cGUoKS0+Z2V0RGVlcGVzdFN0cnVjdE5lc3Rp
bmcoKSk7CisgICAgfQorICAgIHJldHVybiAxICsgbWF4TmVzdGluZzsKK30KKworLy8KKy8vIER1
bXAgZnVuY3Rpb25zLgorLy8KKwordm9pZCBUVmFyaWFibGU6OmR1bXAoVEluZm9TaW5rJiBpbmZv
U2luaykgY29uc3QKK3sKKyAgICBpbmZvU2luay5kZWJ1ZyA8PCBnZXROYW1lKCkuY19zdHIoKSA8
PCAiOiAiIDw8IHR5cGUuZ2V0UXVhbGlmaWVyU3RyaW5nKCkgPDwgIiAiIDw8IHR5cGUuZ2V0UHJl
Y2lzaW9uU3RyaW5nKCkgPDwgIiAiIDw8IHR5cGUuZ2V0QmFzaWNTdHJpbmcoKTsKKyAgICBpZiAo
dHlwZS5pc0FycmF5KCkpIHsKKyAgICAgICAgaW5mb1NpbmsuZGVidWcgPDwgIlswXSI7CisgICAg
fQorICAgIGluZm9TaW5rLmRlYnVnIDw8ICJcbiI7Cit9CisKK3ZvaWQgVEZ1bmN0aW9uOjpkdW1w
KFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0Cit7CisgICAgaW5mb1NpbmsuZGVidWcgPDwgZ2V0
TmFtZSgpLmNfc3RyKCkgPDwgIjogIiA8PCAgcmV0dXJuVHlwZS5nZXRCYXNpY1N0cmluZygpIDw8
ICIgIiA8PCBnZXRNYW5nbGVkTmFtZSgpLmNfc3RyKCkgPDwgIlxuIjsKK30KKwordm9pZCBUU3lt
Ym9sVGFibGVMZXZlbDo6ZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdAoreworICAgIHRM
ZXZlbDo6Y29uc3RfaXRlcmF0b3IgaXQ7CisgICAgZm9yIChpdCA9IGxldmVsLmJlZ2luKCk7IGl0
ICE9IGxldmVsLmVuZCgpOyArK2l0KQorICAgICAgICAoKml0KS5zZWNvbmQtPmR1bXAoaW5mb1Np
bmspOworfQorCit2b2lkIFRTeW1ib2xUYWJsZTo6ZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBj
b25zdAoreworICAgIGZvciAoaW50IGxldmVsID0gY3VycmVudExldmVsKCk7IGxldmVsID49IDA7
IC0tbGV2ZWwpIHsKKyAgICAgICAgaW5mb1NpbmsuZGVidWcgPDwgIkxFVkVMICIgPDwgbGV2ZWwg
PDwgIlxuIjsKKyAgICAgICAgdGFibGVbbGV2ZWxdLT5kdW1wKGluZm9TaW5rKTsKKyAgICB9Cit9
CisKKy8vCisvLyBGdW5jdGlvbnMgaGF2ZSBidXJpZWQgcG9pbnRlcnMgdG8gZGVsZXRlLgorLy8K
K1RGdW5jdGlvbjo6flRGdW5jdGlvbigpCit7CisgICAgZm9yIChUUGFyYW1MaXN0OjppdGVyYXRv
ciBpID0gcGFyYW1ldGVycy5iZWdpbigpOyBpICE9IHBhcmFtZXRlcnMuZW5kKCk7ICsraSkKKyAg
ICAgICAgZGVsZXRlICgqaSkudHlwZTsKK30KKworLy8KKy8vIFN5bWJvbCB0YWJsZSBsZXZlbHMg
YXJlIGEgbWFwIG9mIHBvaW50ZXJzIHRvIHN5bWJvbHMgdGhhdCBoYXZlIHRvIGJlIGRlbGV0ZWQu
CisvLworVFN5bWJvbFRhYmxlTGV2ZWw6On5UU3ltYm9sVGFibGVMZXZlbCgpCit7CisgICAgZm9y
ICh0TGV2ZWw6Oml0ZXJhdG9yIGl0ID0gbGV2ZWwuYmVnaW4oKTsgaXQgIT0gbGV2ZWwuZW5kKCk7
ICsraXQpCisgICAgICAgIGRlbGV0ZSAoKml0KS5zZWNvbmQ7Cit9CisKKy8vCisvLyBDaGFuZ2Ug
YWxsIGZ1bmN0aW9uIGVudHJpZXMgaW4gdGhlIHRhYmxlIHdpdGggdGhlIG5vbi1tYW5nbGVkIG5h
bWUKKy8vIHRvIGJlIHJlbGF0ZWQgdG8gdGhlIHByb3ZpZGVkIGJ1aWx0LWluIG9wZXJhdGlvbi4g
IFRoaXMgaXMgYSBsb3cKKy8vIHBlcmZvcm1hbmNlIG9wZXJhdGlvbiwgYW5kIG9ubHkgaW50ZW5k
ZWQgZm9yIHN5bWJvbCB0YWJsZXMgdGhhdAorLy8gbGl2ZSBhY3Jvc3MgYSBsYXJnZSBudW1iZXIg
b2YgY29tcGlsZXMuCisvLwordm9pZCBUU3ltYm9sVGFibGVMZXZlbDo6cmVsYXRlVG9PcGVyYXRv
cihjb25zdCBjaGFyKiBuYW1lLCBUT3BlcmF0b3Igb3ApCit7CisgICAgdExldmVsOjppdGVyYXRv
ciBpdDsKKyAgICBmb3IgKGl0ID0gbGV2ZWwuYmVnaW4oKTsgaXQgIT0gbGV2ZWwuZW5kKCk7ICsr
aXQpIHsKKyAgICAgICAgaWYgKCgqaXQpLnNlY29uZC0+aXNGdW5jdGlvbigpKSB7CisgICAgICAg
ICAgICBURnVuY3Rpb24qIGZ1bmN0aW9uID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oKCppdCku
c2Vjb25kKTsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0TmFtZSgpID09IG5hbWUpCisg
ICAgICAgICAgICAgICAgZnVuY3Rpb24tPnJlbGF0ZVRvT3BlcmF0b3Iob3ApOworICAgICAgICB9
CisgICAgfQorfQorCisvLworLy8gQ2hhbmdlIGFsbCBmdW5jdGlvbiBlbnRyaWVzIGluIHRoZSB0
YWJsZSB3aXRoIHRoZSBub24tbWFuZ2xlZCBuYW1lCisvLyB0byBiZSByZWxhdGVkIHRvIHRoZSBw
cm92aWRlZCBidWlsdC1pbiBleHRlbnNpb24uIFRoaXMgaXMgYSBsb3cKKy8vIHBlcmZvcm1hbmNl
IG9wZXJhdGlvbiwgYW5kIG9ubHkgaW50ZW5kZWQgZm9yIHN5bWJvbCB0YWJsZXMgdGhhdAorLy8g
bGl2ZSBhY3Jvc3MgYSBsYXJnZSBudW1iZXIgb2YgY29tcGlsZXMuCisvLwordm9pZCBUU3ltYm9s
VGFibGVMZXZlbDo6cmVsYXRlVG9FeHRlbnNpb24oY29uc3QgY2hhciogbmFtZSwgY29uc3QgVFN0
cmluZyYgZXh0KQoreworICAgIGZvciAodExldmVsOjppdGVyYXRvciBpdCA9IGxldmVsLmJlZ2lu
KCk7IGl0ICE9IGxldmVsLmVuZCgpOyArK2l0KSB7CisgICAgICAgIFRTeW1ib2wqIHN5bWJvbCA9
IGl0LT5zZWNvbmQ7CisgICAgICAgIGlmIChzeW1ib2wtPmdldE5hbWUoKSA9PSBuYW1lKQorICAg
ICAgICAgICAgc3ltYm9sLT5yZWxhdGVUb0V4dGVuc2lvbihleHQpOworICAgIH0KK30KKworVFN5
bWJvbFRhYmxlOjp+VFN5bWJvbFRhYmxlKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHRhYmxlLnNpemUoKTsgKytpKQorICAgICAgICBkZWxldGUgdGFibGVbaV07CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBwcmVjaXNpb25TdGFjay5zaXplKCk7ICsraSkKKyAgICAgICAgZGVs
ZXRlIHByZWNpc2lvblN0YWNrW2ldOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNmM3MjExZjJhOTUyYzg5NTE3ODM1MTUyNTc2ZDY4YzkzODg2NzdiNQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1N5bWJvbFRhYmxlLmgKQEAgLTAsMCArMSwzODIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
Zm5kZWYgX1NZTUJPTF9UQUJMRV9JTkNMVURFRF8KKyNkZWZpbmUgX1NZTUJPTF9UQUJMRV9JTkNM
VURFRF8KKworLy8KKy8vIFN5bWJvbCB0YWJsZSBmb3IgcGFyc2luZy4gIEhhcyB0aGVzZSBkZXNp
Z24gY2hhcmFjdGVyaXN0aWNzOgorLy8KKy8vICogU2FtZSBzeW1ib2wgdGFibGUgY2FuIGJlIHVz
ZWQgdG8gY29tcGlsZSBtYW55IHNoYWRlcnMsIHRvIHByZXNlcnZlCisvLyAgIGVmZm9ydCBvZiBj
cmVhdGluZyBhbmQgbG9hZGluZyB3aXRoIHRoZSBsYXJnZSBudW1iZXJzIG9mIGJ1aWx0LWluCisv
LyAgIHN5bWJvbHMuCisvLworLy8gKiBOYW1lIG1hbmdsaW5nIHdpbGwgYmUgdXNlZCB0byBnaXZl
IGVhY2ggZnVuY3Rpb24gYSB1bmlxdWUgbmFtZQorLy8gICBzbyB0aGF0IHN5bWJvbCB0YWJsZSBs
b29rdXBzIGFyZSBuZXZlciBhbWJpZ3VvdXMuICBUaGlzIGFsbG93cworLy8gICBhIHNpbXBsZXIg
c3ltYm9sIHRhYmxlIHN0cnVjdHVyZS4KKy8vCisvLyAqIFB1c2hpbmcgYW5kIHBvcHBpbmcgb2Yg
c2NvcGUsIHNvIHN5bWJvbCB0YWJsZSB3aWxsIHJlYWxseSBiZSBhIHN0YWNrIAorLy8gICBvZiBz
eW1ib2wgdGFibGVzLiAgU2VhcmNoZWQgZnJvbSB0aGUgdG9wLCB3aXRoIG5ldyBpbnNlcnRzIGdv
aW5nIGludG8KKy8vICAgdGhlIHRvcC4KKy8vCisvLyAqIENvbnN0YW50czogIENvbXBpbGUgdGlt
ZSBjb25zdGFudCBzeW1ib2xzIHdpbGwga2VlcCB0aGVpciB2YWx1ZXMKKy8vICAgaW4gdGhlIHN5
bWJvbCB0YWJsZS4gIFRoZSBwYXJzZXIgY2FuIHN1YnN0aXR1dGUgY29uc3RhbnRzIGF0IHBhcnNl
CisvLyAgIHRpbWUsIGluY2x1ZGluZyBkb2luZyBjb25zdGFudCBmb2xkaW5nIGFuZCBjb25zdGFu
dCBwcm9wYWdhdGlvbi4KKy8vCisvLyAqIE5vIHRlbXBvcmFyaWVzOiAgVGVtcG9yYXJpZXMgbWFk
ZSBmcm9tIG9wZXJhdGlvbnMgKCssIC0tLCAueHksIGV0Yy4pCisvLyAgIGFyZSB0cmFja2VkIGlu
IHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24sIG5vdCB0aGUgc3ltYm9sIHRhYmxlLgor
Ly8KKworI2luY2x1ZGUgPGFzc2VydC5oPgorCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMu
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luZm9TaW5rLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKworLy8KKy8vIFN5bWJvbCBiYXNl
IGNsYXNzLiAgKENhbiBidWlsZCBmdW5jdGlvbnMgb3IgdmFyaWFibGVzIG91dCBvZiB0aGVzZS4u
LikKKy8vCitjbGFzcyBUU3ltYm9sIHsgICAgCitwdWJsaWM6CisgICAgUE9PTF9BTExPQ0FUT1Jf
TkVXX0RFTEVURSgpOworICAgIFRTeW1ib2woY29uc3QgVFN0cmluZyogbikgOiAgdW5pcXVlSWQo
MCksIG5hbWUobikgeyB9CisgICAgdmlydHVhbCB+VFN5bWJvbCgpIHsgLyogZG9uJ3QgZGVsZXRl
IG5hbWUsIGl0J3MgZnJvbSB0aGUgcG9vbCAqLyB9CisKKyAgICBjb25zdCBUU3RyaW5nJiBnZXRO
YW1lKCkgY29uc3QgeyByZXR1cm4gKm5hbWU7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFRTdHJpbmcm
IGdldE1hbmdsZWROYW1lKCkgY29uc3QgeyByZXR1cm4gZ2V0TmFtZSgpOyB9CisgICAgdmlydHVh
bCBib29sIGlzRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBpc1ZhcmlhYmxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIHNldFVu
aXF1ZUlkKGludCBpZCkgeyB1bmlxdWVJZCA9IGlkOyB9CisgICAgaW50IGdldFVuaXF1ZUlkKCkg
Y29uc3QgeyByZXR1cm4gdW5pcXVlSWQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZHVtcChUSW5mb1Np
bmsgJmluZm9TaW5rKSBjb25zdCA9IDA7CisgICAgdm9pZCByZWxhdGVUb0V4dGVuc2lvbihjb25z
dCBUU3RyaW5nJiBleHQpIHsgZXh0ZW5zaW9uID0gZXh0OyB9CisgICAgY29uc3QgVFN0cmluZyYg
Z2V0RXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gZXh0ZW5zaW9uOyB9CisKK3ByaXZhdGU6Cisg
ICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRTeW1ib2wpOworCisgICAgaW50IHVuaXF1ZUlk
OyAgICAgIC8vIEZvciByZWFsIGNvbXBhcmluZyBkdXJpbmcgY29kZSBnZW5lcmF0aW9uCisgICAg
Y29uc3QgVFN0cmluZyAqbmFtZTsKKyAgICBUU3RyaW5nIGV4dGVuc2lvbjsKK307CisKKy8vCisv
LyBWYXJpYWJsZSBjbGFzcywgbWVhbmluZyBhIHN5bWJvbCB0aGF0J3Mgbm90IGEgZnVuY3Rpb24u
CisvLyAKKy8vIFRoZXJlIGNvdWxkIGJlIGEgc2VwYXJhdGUgY2xhc3MgaGVpcmFyY2h5IGZvciBD
b25zdGFudCB2YXJpYWJsZXM7CisvLyBPbmx5IG9uZSBvZiBpbnQsIGJvb2wsIG9yIGZsb2F0LCAo
b3Igbm9uZSkgaXMgY29ycmVjdCBmb3IKKy8vIGFueSBwYXJ0aWN1bGFyIHVzZSwgYnV0IGl0J3Mg
ZWFzeSB0byBkbyB0aGlzIHdheSwgYW5kIGRvZXNuJ3QKKy8vIHNlZW0gd29ydGggaGF2aW5nIHNl
cGFyYXRlIGNsYXNzZXMsIGFuZCAiZ2V0Q29uc3QiIGNhbid0IHNpbXBseSByZXR1cm4KKy8vIGRp
ZmZlcmVudCB2YWx1ZXMgZm9yIGRpZmZlcmVudCB0eXBlcyBwb2x5bW9ycGhpY2FsbHksIHNvIHRo
aXMgaXMgCisvLyBqdXN0IHNpbXBsZSBhbmQgcHJhZ21hdGljLgorLy8KK2NsYXNzIFRWYXJpYWJs
ZSA6IHB1YmxpYyBUU3ltYm9sIHsKK3B1YmxpYzoKKyAgICBUVmFyaWFibGUoY29uc3QgVFN0cmlu
ZyAqbmFtZSwgY29uc3QgVFR5cGUmIHQsIGJvb2wgdVQgPSBmYWxzZSApIDogVFN5bWJvbChuYW1l
KSwgdHlwZSh0KSwgdXNlclR5cGUodVQpLCB1bmlvbkFycmF5KDApIHsgfQorICAgIHZpcnR1YWwg
flRWYXJpYWJsZSgpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1ZhcmlhYmxlKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfSAgICAKKyAgICBUVHlwZSYgZ2V0VHlwZSgpIHsgcmV0dXJuIHR5cGU7IH0g
ICAgCisgICAgY29uc3QgVFR5cGUmIGdldFR5cGUoKSBjb25zdCB7IHJldHVybiB0eXBlOyB9Cisg
ICAgYm9vbCBpc1VzZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gdXNlclR5cGU7IH0KKyAgICB2b2lk
IHNldFF1YWxpZmllcihUUXVhbGlmaWVyIHF1YWxpZmllcikgeyB0eXBlLnNldFF1YWxpZmllcihx
dWFsaWZpZXIpOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcChUSW5mb1NpbmsgJmluZm9TaW5r
KSBjb25zdDsKKworICAgIENvbnN0YW50VW5pb24qIGdldENvbnN0UG9pbnRlcigpCisgICAgeyAK
KyAgICAgICAgaWYgKCF1bmlvbkFycmF5KQorICAgICAgICAgICAgdW5pb25BcnJheSA9IG5ldyBD
b25zdGFudFVuaW9uW3R5cGUuZ2V0T2JqZWN0U2l6ZSgpXTsKKworICAgICAgICByZXR1cm4gdW5p
b25BcnJheTsKKyAgICB9CisKKyAgICBDb25zdGFudFVuaW9uKiBnZXRDb25zdFBvaW50ZXIoKSBj
b25zdCB7IHJldHVybiB1bmlvbkFycmF5OyB9CisKKyAgICB2b2lkIHNoYXJlQ29uc3RQb2ludGVy
KCBDb25zdGFudFVuaW9uICpjb25zdEFycmF5KQorICAgIHsKKyAgICAgICAgaWYgKHVuaW9uQXJy
YXkgPT0gY29uc3RBcnJheSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBkZWxldGVb
XSB1bmlvbkFycmF5OworICAgICAgICB1bmlvbkFycmF5ID0gY29uc3RBcnJheTsgIAorICAgIH0K
KworcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVFZhcmlhYmxlKTsKKwor
ICAgIFRUeXBlIHR5cGU7CisgICAgYm9vbCB1c2VyVHlwZTsKKyAgICAvLyB3ZSBhcmUgYXNzdW1p
bmcgdGhhdCBQb29sIEFsbG9jYXRvciB3aWxsIGZyZWUgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgdG8g
dW5pb25BcnJheQorICAgIC8vIHdoZW4gdGhpcyBvYmplY3QgaXMgZGVzdHJveWVkCisgICAgQ29u
c3RhbnRVbmlvbiAqdW5pb25BcnJheTsKK307CisKKy8vCisvLyBUaGUgZnVuY3Rpb24gc3ViLWNs
YXNzIG9mIHN5bWJvbHMgYW5kIHRoZSBwYXJzZXIgd2lsbCBuZWVkIHRvCisvLyBzaGFyZSB0aGlz
IGRlZmluaXRpb24gb2YgYSBmdW5jdGlvbiBwYXJhbWV0ZXIuCisvLworc3RydWN0IFRQYXJhbWV0
ZXIgeworICAgIFRTdHJpbmcgKm5hbWU7CisgICAgVFR5cGUqIHR5cGU7Cit9OworCisvLworLy8g
VGhlIGZ1bmN0aW9uIHN1Yi1jbGFzcyBvZiBhIHN5bWJvbC4gIAorLy8KK2NsYXNzIFRGdW5jdGlv
biA6IHB1YmxpYyBUU3ltYm9sIHsKK3B1YmxpYzoKKyAgICBURnVuY3Rpb24oVE9wZXJhdG9yIG8p
IDoKKyAgICAgICAgVFN5bWJvbCgwKSwKKyAgICAgICAgcmV0dXJuVHlwZShUVHlwZShFYnRWb2lk
LCBFYnBVbmRlZmluZWQpKSwKKyAgICAgICAgb3AobyksCisgICAgICAgIGRlZmluZWQoZmFsc2Up
IHsgfQorICAgIFRGdW5jdGlvbihjb25zdCBUU3RyaW5nICpuYW1lLCBUVHlwZSYgcmV0VHlwZSwg
VE9wZXJhdG9yIHRPcCA9IEVPcE51bGwpIDogCisgICAgICAgIFRTeW1ib2wobmFtZSksIAorICAg
ICAgICByZXR1cm5UeXBlKHJldFR5cGUpLAorICAgICAgICBtYW5nbGVkTmFtZShURnVuY3Rpb246
Om1hbmdsZU5hbWUoKm5hbWUpKSwKKyAgICAgICAgb3AodE9wKSwKKyAgICAgICAgZGVmaW5lZChm
YWxzZSkgeyB9CisgICAgdmlydHVhbCB+VEZ1bmN0aW9uKCk7CisgICAgdmlydHVhbCBib29sIGlz
RnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9ICAgIAorCisgICAgc3RhdGljIFRTdHJp
bmcgbWFuZ2xlTmFtZShjb25zdCBUU3RyaW5nJiBuYW1lKSB7IHJldHVybiBuYW1lICsgJygnOyB9
CisgICAgc3RhdGljIFRTdHJpbmcgdW5tYW5nbGVOYW1lKGNvbnN0IFRTdHJpbmcmIG1hbmdsZWRO
YW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFRTdHJpbmcobWFuZ2xlZE5hbWUuY19zdHIoKSwg
bWFuZ2xlZE5hbWUuZmluZF9maXJzdF9vZignKCcpKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZFBh
cmFtZXRlcihUUGFyYW1ldGVyJiBwKSAKKyAgICB7IAorICAgICAgICBwYXJhbWV0ZXJzLnB1c2hf
YmFjayhwKTsKKyAgICAgICAgbWFuZ2xlZE5hbWUgPSBtYW5nbGVkTmFtZSArIHAudHlwZS0+Z2V0
TWFuZ2xlZE5hbWUoKTsKKyAgICB9CisKKyAgICBjb25zdCBUU3RyaW5nJiBnZXRNYW5nbGVkTmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1hbmdsZWROYW1lOyB9CisgICAgY29uc3QgVFR5cGUmIGdldFJl
dHVyblR5cGUoKSBjb25zdCB7IHJldHVybiByZXR1cm5UeXBlOyB9CisKKyAgICB2b2lkIHJlbGF0
ZVRvT3BlcmF0b3IoVE9wZXJhdG9yIG8pIHsgb3AgPSBvOyB9CisgICAgVE9wZXJhdG9yIGdldEJ1
aWx0SW5PcCgpIGNvbnN0IHsgcmV0dXJuIG9wOyB9CisKKyAgICB2b2lkIHNldERlZmluZWQoKSB7
IGRlZmluZWQgPSB0cnVlOyB9CisgICAgYm9vbCBpc0RlZmluZWQoKSB7IHJldHVybiBkZWZpbmVk
OyB9CisKKyAgICBzaXplX3QgZ2V0UGFyYW1Db3VudCgpIGNvbnN0IHsgcmV0dXJuIHBhcmFtZXRl
cnMuc2l6ZSgpOyB9ICAKKyAgICBjb25zdCBUUGFyYW1ldGVyJiBnZXRQYXJhbShzaXplX3QgaSkg
Y29uc3QgeyByZXR1cm4gcGFyYW1ldGVyc1tpXTsgfQorCisgICAgdmlydHVhbCB2b2lkIGR1bXAo
VEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKFRGdW5jdGlvbik7CisKKyAgICB0eXBlZGVmIFRWZWN0b3I8VFBhcmFtZXRl
cj4gVFBhcmFtTGlzdDsKKyAgICBUUGFyYW1MaXN0IHBhcmFtZXRlcnM7CisgICAgVFR5cGUgcmV0
dXJuVHlwZTsKKyAgICBUU3RyaW5nIG1hbmdsZWROYW1lOworICAgIFRPcGVyYXRvciBvcDsKKyAg
ICBib29sIGRlZmluZWQ7Cit9OworCisKK2NsYXNzIFRTeW1ib2xUYWJsZUxldmVsIHsKK3B1Ymxp
YzoKKyAgICB0eXBlZGVmIFRNYXA8VFN0cmluZywgVFN5bWJvbCo+IHRMZXZlbDsKKyAgICB0eXBl
ZGVmIHRMZXZlbDo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAgdHlwZWRlZiBj
b25zdCB0TGV2ZWw6OnZhbHVlX3R5cGUgdExldmVsUGFpcjsKKyAgICB0eXBlZGVmIHN0ZDo6cGFp
cjx0TGV2ZWw6Oml0ZXJhdG9yLCBib29sPiB0SW5zZXJ0UmVzdWx0OworCisgICAgVFN5bWJvbFRh
YmxlTGV2ZWwoKSB7IH0KKyAgICB+VFN5bWJvbFRhYmxlTGV2ZWwoKTsKKworICAgIGJvb2wgaW5z
ZXJ0KGNvbnN0IFRTdHJpbmcgJm5hbWUsIFRTeW1ib2wgJnN5bWJvbCkKKyAgICB7CisgICAgICAg
IC8vCisgICAgICAgIC8vIHJldHVybmluZyB0cnVlIG1lYW5zIHN5bWJvbCB3YXMgYWRkZWQgdG8g
dGhlIHRhYmxlCisgICAgICAgIC8vCisgICAgICAgIHRJbnNlcnRSZXN1bHQgcmVzdWx0ID0gbGV2
ZWwuaW5zZXJ0KHRMZXZlbFBhaXIobmFtZSwgJnN5bWJvbCkpOworCisgICAgICAgIHJldHVybiBy
ZXN1bHQuc2Vjb25kOworICAgIH0KKworICAgIGJvb2wgaW5zZXJ0KFRTeW1ib2wgJnN5bWJvbCkK
KyAgICB7CisgICAgICAgIHJldHVybiBpbnNlcnQoc3ltYm9sLmdldE1hbmdsZWROYW1lKCksIHN5
bWJvbCk7CisgICAgfQorCisgICAgVFN5bWJvbCogZmluZChjb25zdCBUU3RyaW5nJiBuYW1lKSBj
b25zdAorICAgIHsKKyAgICAgICAgdExldmVsOjpjb25zdF9pdGVyYXRvciBpdCA9IGxldmVsLmZp
bmQobmFtZSk7CisgICAgICAgIGlmIChpdCA9PSBsZXZlbC5lbmQoKSkKKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gKCppdCkuc2Vjb25kOwor
ICAgIH0KKworICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBsZXZlbC5iZWdpbigpOworICAgIH0KKworICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbGV2ZWwuZW5kKCk7CisgICAgfQorCisgICAg
dm9pZCByZWxhdGVUb09wZXJhdG9yKGNvbnN0IGNoYXIqIG5hbWUsIFRPcGVyYXRvciBvcCk7Cisg
ICAgdm9pZCByZWxhdGVUb0V4dGVuc2lvbihjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBUU3RyaW5n
JiBleHQpOworICAgIHZvaWQgZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdDsKKworcHJv
dGVjdGVkOgorICAgIHRMZXZlbCBsZXZlbDsKK307CisKK2NsYXNzIFRTeW1ib2xUYWJsZSB7Citw
dWJsaWM6CisgICAgVFN5bWJvbFRhYmxlKCkgOiB1bmlxdWVJZCgwKQorICAgIHsKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gVGhlIHN5bWJvbCB0YWJsZSBjYW5ub3QgYmUgdXNlZCB1bnRpbCBwdXNo
KCkgaXMgY2FsbGVkLCBidXQKKyAgICAgICAgLy8gdGhlIGxhY2sgb2YgYW4gaW5pdGlhbCBjYWxs
IHRvIHB1c2goKSBjYW4gYmUgdXNlZCB0byBkZXRlY3QKKyAgICAgICAgLy8gdGhhdCB0aGUgc3lt
Ym9sIHRhYmxlIGhhcyBub3QgYmVlbiBwcmVsb2FkZWQgd2l0aCBidWlsdC1pbnMuCisgICAgICAg
IC8vCisgICAgfQorICAgIH5UU3ltYm9sVGFibGUoKTsKKworICAgIC8vCisgICAgLy8gV2hlbiB0
aGUgc3ltYm9sIHRhYmxlIGlzIGluaXRpYWxpemVkIHdpdGggdGhlIGJ1aWx0LWlucywgdGhlcmUg
c2hvdWxkCisgICAgLy8gJ3B1c2gnIGNhbGxzLCBzbyB0aGF0IGJ1aWx0LWlucyBhcmUgYXQgbGV2
ZWwgMCBhbmQgdGhlIHNoYWRlcgorICAgIC8vIGdsb2JhbHMgYXJlIGF0IGxldmVsIDEuCisgICAg
Ly8KKyAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiB0YWJsZS5zaXplKCkgPT0gMDsgfQorICAg
IGJvb2wgYXRCdWlsdEluTGV2ZWwoKSB7IHJldHVybiB0YWJsZS5zaXplKCkgPT0gMTsgfQorICAg
IGJvb2wgYXRHbG9iYWxMZXZlbCgpIHsgcmV0dXJuIHRhYmxlLnNpemUoKSA8PSAyOyB9CisgICAg
dm9pZCBwdXNoKCkKKyAgICB7CisgICAgICAgIHRhYmxlLnB1c2hfYmFjayhuZXcgVFN5bWJvbFRh
YmxlTGV2ZWwpOworICAgICAgICBwcmVjaXNpb25TdGFjay5wdXNoX2JhY2sobmV3IFByZWNpc2lv
blN0YWNrTGV2ZWwpOworICAgIH0KKworICAgIHZvaWQgcG9wKCkKKyAgICB7CisgICAgICAgIGRl
bGV0ZSB0YWJsZS5iYWNrKCk7CisgICAgICAgIHRhYmxlLnBvcF9iYWNrKCk7CisKKyAgICAgICAg
ZGVsZXRlIHByZWNpc2lvblN0YWNrLmJhY2soKTsKKyAgICAgICAgcHJlY2lzaW9uU3RhY2sucG9w
X2JhY2soKTsKKyAgICB9CisKKyAgICBib29sIGluc2VydChUU3ltYm9sJiBzeW1ib2wpCisgICAg
eworICAgICAgICBzeW1ib2wuc2V0VW5pcXVlSWQoKyt1bmlxdWVJZCk7CisgICAgICAgIHJldHVy
biB0YWJsZVtjdXJyZW50TGV2ZWwoKV0tPmluc2VydChzeW1ib2wpOworICAgIH0KKworICAgIGJv
b2wgaW5zZXJ0Q29uc3RJbnQoY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbHVlKQorICAgIHsKKyAg
ICAgICAgVFZhcmlhYmxlICpjb25zdGFudCA9IG5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmco
bmFtZSksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCwgMSkpOworICAgICAg
ICBjb25zdGFudC0+Z2V0Q29uc3RQb2ludGVyKCktPnNldElDb25zdCh2YWx1ZSk7CisgICAgICAg
IHJldHVybiBpbnNlcnQoKmNvbnN0YW50KTsKKyAgICB9CisKKyAgICBib29sIGluc2VydEJ1aWx0
SW4oVFR5cGUgKnJ2YWx1ZSwgY29uc3QgY2hhciAqbmFtZSwgVFR5cGUgKnB0eXBlMSwgVFR5cGUg
KnB0eXBlMiA9IDAsIFRUeXBlICpwdHlwZTMgPSAwKQorICAgIHsKKyAgICAgICAgVEZ1bmN0aW9u
ICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oTmV3UG9vbFRTdHJpbmcobmFtZSksICpydmFsdWUp
OworCisgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0xID0ge05VTEwsIHB0eXBlMX07CisgICAgICAg
IGZ1bmN0aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW0xKTsKKworICAgICAgICBpZihwdHlwZTIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0yID0ge05VTEwsIHB0eXBlMn07
CisgICAgICAgICAgICBmdW5jdGlvbi0+YWRkUGFyYW1ldGVyKHBhcmFtMik7CisgICAgICAgIH0K
KworICAgICAgICBpZihwdHlwZTMpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRQYXJhbWV0ZXIg
cGFyYW0zID0ge05VTEwsIHB0eXBlM307CisgICAgICAgICAgICBmdW5jdGlvbi0+YWRkUGFyYW1l
dGVyKHBhcmFtMyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gaW5zZXJ0KCpmdW5jdGlv
bik7CisgICAgfQorCisgICAgVFN5bWJvbCogZmluZChjb25zdCBUU3RyaW5nJiBuYW1lLCBib29s
KiBidWlsdEluID0gMCwgYm9vbCAqc2FtZVNjb3BlID0gMCkgCisgICAgeworICAgICAgICBpbnQg
bGV2ZWwgPSBjdXJyZW50TGV2ZWwoKTsKKyAgICAgICAgVFN5bWJvbCogc3ltYm9sOworICAgICAg
ICBkbyB7CisgICAgICAgICAgICBzeW1ib2wgPSB0YWJsZVtsZXZlbF0tPmZpbmQobmFtZSk7Cisg
ICAgICAgICAgICAtLWxldmVsOworICAgICAgICB9IHdoaWxlIChzeW1ib2wgPT0gMCAmJiBsZXZl
bCA+PSAwKTsKKyAgICAgICAgbGV2ZWwrKzsKKyAgICAgICAgaWYgKGJ1aWx0SW4pCisgICAgICAg
ICAgICAqYnVpbHRJbiA9IGxldmVsID09IDA7CisgICAgICAgIGlmIChzYW1lU2NvcGUpCisgICAg
ICAgICAgICAqc2FtZVNjb3BlID0gbGV2ZWwgPT0gY3VycmVudExldmVsKCk7CisgICAgICAgIHJl
dHVybiBzeW1ib2w7CisgICAgfQorCisgICAgVFN5bWJvbCogZmluZEJ1aWx0SW4oY29uc3QgVFN0
cmluZyAmbmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0YWJsZVswXS0+ZmluZChuYW1lKTsK
KyAgICB9CisKKyAgICBUU3ltYm9sVGFibGVMZXZlbCogZ2V0T3V0ZXJMZXZlbCgpIHsKKyAgICAg
ICAgYXNzZXJ0KHRhYmxlLnNpemUoKSA+PSAyKTsKKyAgICAgICAgcmV0dXJuIHRhYmxlW2N1cnJl
bnRMZXZlbCgpIC0gMV07CisgICAgfQorCisgICAgdm9pZCByZWxhdGVUb09wZXJhdG9yKGNvbnN0
IGNoYXIqIG5hbWUsIFRPcGVyYXRvciBvcCkgeworICAgICAgICB0YWJsZVswXS0+cmVsYXRlVG9P
cGVyYXRvcihuYW1lLCBvcCk7CisgICAgfQorICAgIHZvaWQgcmVsYXRlVG9FeHRlbnNpb24oY29u
c3QgY2hhciogbmFtZSwgY29uc3QgVFN0cmluZyYgZXh0KSB7CisgICAgICAgIHRhYmxlWzBdLT5y
ZWxhdGVUb0V4dGVuc2lvbihuYW1lLCBleHQpOworICAgIH0KKyAgICB2b2lkIGR1bXAoVEluZm9T
aW5rICZpbmZvU2luaykgY29uc3Q7CisKKyAgICBib29sIHNldERlZmF1bHRQcmVjaXNpb24oY29u
c3QgVFB1YmxpY1R5cGUmIHR5cGUsIFRQcmVjaXNpb24gcHJlYykgeworICAgICAgICBpZiAoIXN1
cHBvcnRzUHJlY2lzaW9uKHR5cGUudHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGlmICh0eXBlLnNpemUgIT0gMSB8fCB0eXBlLm1hdHJpeCB8fCB0eXBlLmFycmF5KQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBOb3QgYWxsb3dlZCB0byBzZXQgZm9yIGFnZ3Jl
Z2F0ZSB0eXBlcworICAgICAgICBpbnQgaW5kZXhPZkxhc3RFbGVtZW50ID0gc3RhdGljX2Nhc3Q8
aW50PihwcmVjaXNpb25TdGFjay5zaXplKCkpIC0gMTsKKyAgICAgICAgKCpwcmVjaXNpb25TdGFj
a1tpbmRleE9mTGFzdEVsZW1lbnRdKVt0eXBlLnR5cGVdID0gcHJlYzsgLy8gVXNlcyBtYXAgb3Bl
cmF0b3IgW10sIG92ZXJ3cml0ZXMgdGhlIGN1cnJlbnQgdmFsdWUKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgLy8gU2VhcmNoZXMgZG93biB0aGUgcHJlY2lzaW9uU3RhY2sgZm9y
IGEgcHJlY2lzaW9uIHF1YWxpZmllciBmb3IgdGhlIHNwZWNpZmllZCBUQmFzaWNUeXBlCisgICAg
VFByZWNpc2lvbiBnZXREZWZhdWx0UHJlY2lzaW9uKFRCYXNpY1R5cGUgdHlwZSkgeworICAgICAg
ICBpZiAoIXN1cHBvcnRzUHJlY2lzaW9uKHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIEVicFVu
ZGVmaW5lZDsKKyAgICAgICAgaW50IGxldmVsID0gc3RhdGljX2Nhc3Q8aW50PihwcmVjaXNpb25T
dGFjay5zaXplKCkpIC0gMTsKKyAgICAgICAgYXNzZXJ0KGxldmVsID49IDApOyAvLyBKdXN0IHRv
IGJlIHNhZmUuIFNob3VsZCBub3QgaGFwcGVuLgorICAgICAgICBQcmVjaXNpb25TdGFja0xldmVs
OjppdGVyYXRvciBpdDsKKyAgICAgICAgVFByZWNpc2lvbiBwcmVjID0gRWJwVW5kZWZpbmVkOyAv
LyBJZiB3ZSBkb250IGZpbmQgYW55dGhpbmcgd2UgcmV0dXJuIHRoaXMuIFNob3VsZCB3ZSBlcnJv
ciBjaGVjayB0aGlzPworICAgICAgICB3aGlsZSAobGV2ZWwgPj0gMCkgeworICAgICAgICAgICAg
aXQgPSBwcmVjaXNpb25TdGFja1tsZXZlbF0tPmZpbmQodHlwZSk7CisgICAgICAgICAgICBpZiAo
aXQgIT0gcHJlY2lzaW9uU3RhY2tbbGV2ZWxdLT5lbmQoKSkgeworICAgICAgICAgICAgICAgIHBy
ZWMgPSAoKml0KS5zZWNvbmQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBsZXZlbC0tOworICAgICAgICB9CisgICAgICAgIHJldHVybiBwcmVjOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQgY3VycmVudExldmVsKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8aW50Pih0YWJsZS5zaXplKCkpIC0gMTsgfQorCisgICAgYm9vbCBzdXBwb3J0
c1ByZWNpc2lvbihUQmFzaWNUeXBlIHR5cGUpIHsKKyAgICAgIC8vIE9ubHkgc3VwcG9ydHMgcHJl
Y2lzaW9uIGZvciBpbnQsIGZsb2F0LCBhbmQgc2FtcGxlciB0eXBlcy4KKyAgICAgIHJldHVybiB0
eXBlID09IEVidEZsb2F0IHx8IHR5cGUgPT0gRWJ0SW50IHx8IElzU2FtcGxlcih0eXBlKTsKKyAg
ICB9CisKKyAgICBpbnQgdW5pcXVlSWQ7ICAgICAvLyBmb3IgdW5pcXVlIGlkZW50aWZpY2F0aW9u
IGluIGNvZGUgZ2VuZXJhdGlvbgorICAgIHN0ZDo6dmVjdG9yPFRTeW1ib2xUYWJsZUxldmVsKj4g
dGFibGU7CisgICAgdHlwZWRlZiBUTWFwPFRCYXNpY1R5cGUsIFRQcmVjaXNpb24+IFByZWNpc2lv
blN0YWNrTGV2ZWw7CisgICAgc3RkOjp2ZWN0b3I8UHJlY2lzaW9uU3RhY2tMZXZlbCo+IHByZWNp
c2lvblN0YWNrOworfTsKKworI2VuZGlmIC8vIF9TWU1CT0xfVEFCTEVfSU5DTFVERURfCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yRVNTTC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yRVNTTC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTI2MmY3YWY4Y2I4NWE2
MjNjODgwYzcxMzU4MjNlMGUzMjQ5NjYxZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JFU1NMLmNwcApA
QCAtMCwwICsxLDQzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yRVNTTC5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9PdXRwdXRFU1NMLmgiCisKK1RyYW5zbGF0b3JFU1NMOjpUcmFuc2xhdG9yRVNTTChTaFNo
YWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMpCisgICAgOiBUQ29tcGlsZXIodHlwZSwg
c3BlYykgeworfQorCit2b2lkIFRyYW5zbGF0b3JFU1NMOjp0cmFuc2xhdGUoVEludGVybU5vZGUq
IHJvb3QpIHsKKyAgICBUSW5mb1NpbmtCYXNlJiBzaW5rID0gZ2V0SW5mb1NpbmsoKS5vYmo7CisK
KyAgICAvLyBXcml0ZSBidWlsdC1pbiBleHRlbnNpb24gYmVoYXZpb3JzLgorICAgIHdyaXRlRXh0
ZW5zaW9uQmVoYXZpb3IoKTsKKworICAgIC8vIFdyaXRlIGVtdWxhdGVkIGJ1aWx0LWluIGZ1bmN0
aW9ucyBpZiBuZWVkZWQuCisgICAgZ2V0QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IoKS5PdXRwdXRF
bXVsYXRlZEZ1bmN0aW9uRGVmaW5pdGlvbigKKyAgICAgICAgc2luaywgZ2V0U2hhZGVyVHlwZSgp
ID09IFNIX0ZSQUdNRU5UX1NIQURFUik7CisKKyAgICAvLyBXcml0ZSBhcnJheSBib3VuZHMgY2xh
bXBpbmcgZW11bGF0aW9uIGlmIG5lZWRlZC4KKyAgICBnZXRBcnJheUJvdW5kc0NsYW1wZXIoKS5P
dXRwdXRDbGFtcGluZ0Z1bmN0aW9uRGVmaW5pdGlvbihzaW5rKTsKKworICAgIC8vIFdyaXRlIHRy
YW5zbGF0ZWQgc2hhZGVyLgorICAgIFRPdXRwdXRFU1NMIG91dHB1dEVTU0woc2luaywgZ2V0QXJy
YXlJbmRleENsYW1waW5nU3RyYXRlZ3koKSwgZ2V0SGFzaEZ1bmN0aW9uKCksIGdldE5hbWVNYXAo
KSwgZ2V0U3ltYm9sVGFibGUoKSk7CisgICAgcm9vdC0+dHJhdmVyc2UoJm91dHB1dEVTU0wpOwor
fQorCit2b2lkIFRyYW5zbGF0b3JFU1NMOjp3cml0ZUV4dGVuc2lvbkJlaGF2aW9yKCkgeworICAg
IFRJbmZvU2lua0Jhc2UmIHNpbmsgPSBnZXRJbmZvU2luaygpLm9iajsKKyAgICBjb25zdCBURXh0
ZW5zaW9uQmVoYXZpb3ImIGV4dGVuc2lvbkJlaGF2aW9yID0gZ2V0RXh0ZW5zaW9uQmVoYXZpb3Io
KTsKKyAgICBmb3IgKFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4
dGVuc2lvbkJlaGF2aW9yLmJlZ2luKCk7CisgICAgICAgICBpdGVyICE9IGV4dGVuc2lvbkJlaGF2
aW9yLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKGl0ZXItPnNlY29uZCAhPSBFQmhVbmRl
ZmluZWQpIHsKKyAgICAgICAgICAgIHNpbmsgPDwgIiNleHRlbnNpb24gIiA8PCBpdGVyLT5maXJz
dCA8PCAiIDogIgorICAgICAgICAgICAgICAgICA8PCBnZXRCZWhhdmlvclN0cmluZyhpdGVyLT5z
ZWNvbmQpIDw8ICJcbiI7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yRVNTTC5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvckVTU0wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMThmM2MyNWVjOGI5ZWU1Mjk2ZGQ4OGFkZGQ1ZTEzZDY2
MzJmMmEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckVTU0wuaApAQCAtMCwwICsxLDIzIEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JFU1NMX0hfCisjZGVm
aW5lIENPTVBJTEVSX1RSQU5TTEFUT1JFU1NMX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1NoSGFuZGxlLmgiCisKK2NsYXNzIFRyYW5zbGF0b3JFU1NMIDogcHVibGljIFRDb21w
aWxlciB7CitwdWJsaWM6CisgICAgVHJhbnNsYXRvckVTU0woU2hTaGFkZXJUeXBlIHR5cGUsIFNo
U2hhZGVyU3BlYyBzcGVjKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCB0cmFuc2xh
dGUoVEludGVybU5vZGUqIHJvb3QpOworCitwcml2YXRlOgorICAgIHZvaWQgd3JpdGVFeHRlbnNp
b25CZWhhdmlvcigpOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SRVNTTF9I
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvckdMU0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckdMU0wuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2ODhkN2Yz
NjJlOTBiZGNjN2FmOGYxYTRhZDUxYTYwNGI1MmMwYTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yR0xT
TC5jcHAKQEAgLTAsMCArMSw0NCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckdMU0wuaCIKKworI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvT3V0cHV0R0xTTC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
VmVyc2lvbkdMU0wuaCIKKworc3RhdGljIHZvaWQgd3JpdGVWZXJzaW9uKFNoU2hhZGVyVHlwZSB0
eXBlLCBUSW50ZXJtTm9kZSogcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBUSW5mb1Np
bmtCYXNlJiBzaW5rKSB7CisgICAgVFZlcnNpb25HTFNMIHZlcnNpb25HTFNMKHR5cGUpOworICAg
IHJvb3QtPnRyYXZlcnNlKCZ2ZXJzaW9uR0xTTCk7CisgICAgaW50IHZlcnNpb24gPSB2ZXJzaW9u
R0xTTC5nZXRWZXJzaW9uKCk7CisgICAgLy8gV2UgbmVlZCB0byB3cml0ZSB2ZXJzaW9uIGRpcmVj
dGl2ZSBvbmx5IGlmIGl0IGlzIGdyZWF0ZXIgdGhhbiAxMTAuCisgICAgLy8gSWYgdGhlcmUgaXMg
bm8gdmVyc2lvbiBkaXJlY3RpdmUgaW4gdGhlIHNoYWRlciwgMTEwIGlzIGltcGxpZWQuCisgICAg
aWYgKHZlcnNpb24gPiAxMTApIHsKKyAgICAgICAgc2luayA8PCAiI3ZlcnNpb24gIiA8PCB2ZXJz
aW9uIDw8ICJcbiI7CisgICAgfQorfQorCitUcmFuc2xhdG9yR0xTTDo6VHJhbnNsYXRvckdMU0wo
U2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjKQorICAgIDogVENvbXBpbGVyKHR5
cGUsIHNwZWMpIHsKK30KKwordm9pZCBUcmFuc2xhdG9yR0xTTDo6dHJhbnNsYXRlKFRJbnRlcm1O
b2RlKiByb290KSB7CisgICAgVEluZm9TaW5rQmFzZSYgc2luayA9IGdldEluZm9TaW5rKCkub2Jq
OworCisgICAgLy8gV3JpdGUgR0xTTCB2ZXJzaW9uLgorICAgIHdyaXRlVmVyc2lvbihnZXRTaGFk
ZXJUeXBlKCksIHJvb3QsIHNpbmspOworCisgICAgLy8gV3JpdGUgZW11bGF0ZWQgYnVpbHQtaW4g
ZnVuY3Rpb25zIGlmIG5lZWRlZC4KKyAgICBnZXRCdWlsdEluRnVuY3Rpb25FbXVsYXRvcigpLk91
dHB1dEVtdWxhdGVkRnVuY3Rpb25EZWZpbml0aW9uKAorICAgICAgICBzaW5rLCBmYWxzZSk7CisK
KyAgICAvLyBXcml0ZSBhcnJheSBib3VuZHMgY2xhbXBpbmcgZW11bGF0aW9uIGlmIG5lZWRlZC4K
KyAgICBnZXRBcnJheUJvdW5kc0NsYW1wZXIoKS5PdXRwdXRDbGFtcGluZ0Z1bmN0aW9uRGVmaW5p
dGlvbihzaW5rKTsKKworICAgIC8vIFdyaXRlIHRyYW5zbGF0ZWQgc2hhZGVyLgorICAgIFRPdXRw
dXRHTFNMIG91dHB1dEdMU0woc2luaywgZ2V0QXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3koKSwg
Z2V0SGFzaEZ1bmN0aW9uKCksIGdldE5hbWVNYXAoKSwgZ2V0U3ltYm9sVGFibGUoKSk7CisgICAg
cm9vdC0+dHJhdmVyc2UoJm91dHB1dEdMU0wpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckdMU0wuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JH
TFNMLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNDBiYjMxNDVlODBmN2IyMjJjNTNjYmQzODMyZTE4ZmViZTc5NzZj
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JHTFNMLmgKQEAgLTAsMCArMSwyMCBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SR0xTTF9IXworI2RlZmluZSBD
T01QSUxFUl9UUkFOU0xBVE9SR0xTTF9IXworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9TaEhhbmRsZS5oIgorCitjbGFzcyBUcmFuc2xhdG9yR0xTTCA6IHB1YmxpYyBUQ29tcGlsZXIg
eworcHVibGljOgorICAgIFRyYW5zbGF0b3JHTFNMKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRl
clNwZWMgc3BlYyk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKFRJ
bnRlcm1Ob2RlKiByb290KTsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUkdM
U0xfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JITFNMLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JITFNMLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYzFk
YjAxMWI2NmEyMmVhMjY0ZmU5YjFkNjc1MWQyYTk5ZDdkZjc2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ckhMU0wuY3BwCkBAIC0wLDAgKzEsMjQgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JITFNMLmgiCisKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuaCIKKworVHJhbnNsYXRvckhMU0w6OlRyYW5zbGF0
b3JITFNMKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywgU2hTaGFkZXJPdXRw
dXQgb3V0cHV0KQorICAgIDogVENvbXBpbGVyKHR5cGUsIHNwZWMpLCBtT3V0cHV0VHlwZShvdXRw
dXQpCit7Cit9CisKK3ZvaWQgVHJhbnNsYXRvckhMU0w6OnRyYW5zbGF0ZShUSW50ZXJtTm9kZSAq
cm9vdCkKK3sKKyAgICBUUGFyc2VDb250ZXh0JiBwYXJzZUNvbnRleHQgPSAqR2V0R2xvYmFsUGFy
c2VDb250ZXh0KCk7CisgICAgc2g6Ok91dHB1dEhMU0wgb3V0cHV0SExTTChwYXJzZUNvbnRleHQs
IGdldFJlc291cmNlcygpLCBtT3V0cHV0VHlwZSk7CisKKyAgICBvdXRwdXRITFNMLm91dHB1dCgp
OworICAgIG1BY3RpdmVVbmlmb3JtcyA9IG91dHB1dEhMU0wuZ2V0VW5pZm9ybXMoKTsKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JITFNMLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9ySExTTC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYyMDRiMzBjYzI0MWFjNzkw
ZjM2NmNmMjNkY2VkN2ZlYjE3MDk0NjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9ySExTTC5oCkBAIC0w
LDAgKzEsMjcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNM
QVRPUkhMU0xfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUkhMU0xfSF8KKworI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU2hIYW5kbGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1VuaWZvcm0uaCIKKworY2xhc3MgVHJhbnNsYXRvckhMU0wgOiBwdWJsaWMgVENv
bXBpbGVyIHsKK3B1YmxpYzoKKyAgICBUcmFuc2xhdG9ySExTTChTaFNoYWRlclR5cGUgdHlwZSwg
U2hTaGFkZXJTcGVjIHNwZWMsIFNoU2hhZGVyT3V0cHV0IG91dHB1dCk7CisKKyAgICB2aXJ0dWFs
IFRyYW5zbGF0b3JITFNMICpnZXRBc1RyYW5zbGF0b3JITFNMKCkgeyByZXR1cm4gdGhpczsgfQor
ICAgIGNvbnN0IHNoOjpBY3RpdmVVbmlmb3JtcyAmZ2V0VW5pZm9ybXMoKSB7IHJldHVybiBtQWN0
aXZlVW5pZm9ybXM7IH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCB0cmFuc2xhdGUo
VEludGVybU5vZGUqIHJvb3QpOworCisgICAgc2g6OkFjdGl2ZVVuaWZvcm1zIG1BY3RpdmVVbmlm
b3JtczsKKyAgICBTaFNoYWRlck91dHB1dCBtT3V0cHV0VHlwZTsKK307CisKKyNlbmRpZiAgLy8g
Q09NUElMRVJfVFJBTlNMQVRPUkhMU0xfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1R5cGVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjExOWY0
ZjI5ZTU1ZmYxZjY3NzhjODkwMmYyYWVlNmM1M2E4ZDBiYjcKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oCkBA
IC0wLDAgKzEsMzA3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9UWVBFU19JTkNM
VURFRAorI2RlZmluZSBfVFlQRVNfSU5DTFVERUQKKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0
aWxzLmgiCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0Jhc2VUeXBlcy5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29tbW9uLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9jb21waWxlcmRlYnVnLmgiCisKK3N0cnVjdCBUUHVibGljVHlwZTsKK2NsYXNz
IFRUeXBlOworCitjbGFzcyBURmllbGQKK3sKK3B1YmxpYzoKKyAgICBQT09MX0FMTE9DQVRPUl9O
RVdfREVMRVRFKCk7CisgICAgVEZpZWxkKFRUeXBlKiB0eXBlLCBUU3RyaW5nKiBuYW1lKSA6IG1U
eXBlKHR5cGUpLCBtTmFtZShuYW1lKSB7fQorCisgICAgLy8gVE9ETyhhbG9rcCk6IFdlIHNob3Vs
ZCBvbmx5IHJldHVybiBjb25zdCB0eXBlLgorICAgIC8vIEZpeCBpdCBieSB0d2Vha2luZyBncmFt
bWFyLgorICAgIFRUeXBlKiB0eXBlKCkgeyByZXR1cm4gbVR5cGU7IH0KKyAgICBjb25zdCBUVHlw
ZSogdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1UeXBlOyB9CisKKyAgICBjb25zdCBUU3RyaW5nJiBu
YW1lKCkgY29uc3QgeyByZXR1cm4gKm1OYW1lOyB9CisKK3ByaXZhdGU6CisgICAgRElTQUxMT1df
Q09QWV9BTkRfQVNTSUdOKFRGaWVsZCk7CisgICAgVFR5cGUqIG1UeXBlOworICAgIFRTdHJpbmcq
IG1OYW1lOworfTsKKwordHlwZWRlZiBUVmVjdG9yPFRGaWVsZCo+IFRGaWVsZExpc3Q7Citpbmxp
bmUgVEZpZWxkTGlzdCogTmV3UG9vbFRGaWVsZExpc3QoKQoreworICAgIHZvaWQqIG1lbW9yeSA9
IEdldEdsb2JhbFBvb2xBbGxvY2F0b3IoKS0+YWxsb2NhdGUoc2l6ZW9mKFRGaWVsZExpc3QpKTsK
KyAgICByZXR1cm4gbmV3KG1lbW9yeSkgVEZpZWxkTGlzdDsKK30KKworY2xhc3MgVFN0cnVjdHVy
ZQoreworcHVibGljOgorICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKKyAgICBUU3Ry
dWN0dXJlKFRTdHJpbmcqIG5hbWUsIFRGaWVsZExpc3QqIGZpZWxkcykKKyAgICAgICAgOiBtTmFt
ZShuYW1lKSwKKyAgICAgICAgICBtRmllbGRzKGZpZWxkcyksCisgICAgICAgICAgbU9iamVjdFNp
emUoMCksCisgICAgICAgICAgbURlZXBlc3ROZXN0aW5nKDApIHsKKyAgICB9CisKKyAgICBjb25z
dCBUU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gKm1OYW1lOyB9CisgICAgY29uc3QgVEZp
ZWxkTGlzdCYgZmllbGRzKCkgY29uc3QgeyByZXR1cm4gKm1GaWVsZHM7IH0KKworICAgIGNvbnN0
IFRTdHJpbmcmIG1hbmdsZWROYW1lKCkgY29uc3QgeworICAgICAgICBpZiAobU1hbmdsZWROYW1l
LmVtcHR5KCkpCisgICAgICAgICAgICBtTWFuZ2xlZE5hbWUgPSBidWlsZE1hbmdsZWROYW1lKCk7
CisgICAgICAgIHJldHVybiBtTWFuZ2xlZE5hbWU7CisgICAgfQorICAgIHNpemVfdCBvYmplY3RT
aXplKCkgY29uc3QgeworICAgICAgICBpZiAobU9iamVjdFNpemUgPT0gMCkKKyAgICAgICAgICAg
IG1PYmplY3RTaXplID0gY2FsY3VsYXRlT2JqZWN0U2l6ZSgpOworICAgICAgICByZXR1cm4gbU9i
amVjdFNpemU7CisgICAgfTsKKyAgICBpbnQgZGVlcGVzdE5lc3RpbmcoKSBjb25zdCB7CisgICAg
ICAgIGlmIChtRGVlcGVzdE5lc3RpbmcgPT0gMCkKKyAgICAgICAgICAgIG1EZWVwZXN0TmVzdGlu
ZyA9IGNhbGN1bGF0ZURlZXBlc3ROZXN0aW5nKCk7CisgICAgICAgIHJldHVybiBtRGVlcGVzdE5l
c3Rpbmc7CisgICAgfQorICAgIGJvb2wgY29udGFpbnNBcnJheXMoKSBjb25zdDsKKworcHJpdmF0
ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVFN0cnVjdHVyZSk7CisgICAgVFN0cmlu
ZyBidWlsZE1hbmdsZWROYW1lKCkgY29uc3Q7CisgICAgc2l6ZV90IGNhbGN1bGF0ZU9iamVjdFNp
emUoKSBjb25zdDsKKyAgICBpbnQgY2FsY3VsYXRlRGVlcGVzdE5lc3RpbmcoKSBjb25zdDsKKwor
ICAgIFRTdHJpbmcqIG1OYW1lOworICAgIFRGaWVsZExpc3QqIG1GaWVsZHM7CisKKyAgICBtdXRh
YmxlIFRTdHJpbmcgbU1hbmdsZWROYW1lOworICAgIG11dGFibGUgc2l6ZV90IG1PYmplY3RTaXpl
OworICAgIG11dGFibGUgaW50IG1EZWVwZXN0TmVzdGluZzsKK307CisKKy8vCisvLyBCYXNlIGNs
YXNzIGZvciB0aGluZ3MgdGhhdCBoYXZlIGEgdHlwZS4KKy8vCitjbGFzcyBUVHlwZQoreworcHVi
bGljOgorICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKKyAgICBUVHlwZSgpIHt9Cisg
ICAgVFR5cGUoVEJhc2ljVHlwZSB0LCBUUHJlY2lzaW9uIHAsIFRRdWFsaWZpZXIgcSA9IEV2cVRl
bXBvcmFyeSwgdW5zaWduZWQgY2hhciBzID0gMSwgYm9vbCBtID0gZmFsc2UsIGJvb2wgYSA9IGZh
bHNlKSA6CisgICAgICAgICAgICB0eXBlKHQpLCBwcmVjaXNpb24ocCksIHF1YWxpZmllcihxKSwg
c2l6ZShzKSwgbWF0cml4KG0pLCBhcnJheShhKSwgYXJyYXlTaXplKDApLCBzdHJ1Y3R1cmUoMCkK
KyAgICB7CisgICAgfQorICAgIGV4cGxpY2l0IFRUeXBlKGNvbnN0IFRQdWJsaWNUeXBlICZwKTsK
KyAgICBUVHlwZShUU3RydWN0dXJlKiB1c2VyRGVmLCBUUHJlY2lzaW9uIHAgPSBFYnBVbmRlZmlu
ZWQpIDoKKyAgICAgICAgICAgIHR5cGUoRWJ0U3RydWN0KSwgcHJlY2lzaW9uKHApLCBxdWFsaWZp
ZXIoRXZxVGVtcG9yYXJ5KSwgc2l6ZSgxKSwgbWF0cml4KGZhbHNlKSwgYXJyYXkoZmFsc2UpLCBh
cnJheVNpemUoMCksIHN0cnVjdHVyZSh1c2VyRGVmKQorICAgIHsKKyAgICB9CisKKyAgICBUQmFz
aWNUeXBlIGdldEJhc2ljVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGU7IH0KKyAgICB2b2lkIHNl
dEJhc2ljVHlwZShUQmFzaWNUeXBlIHQpIHsgdHlwZSA9IHQ7IH0KKworICAgIFRQcmVjaXNpb24g
Z2V0UHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gcHJlY2lzaW9uOyB9CisgICAgdm9pZCBzZXRQ
cmVjaXNpb24oVFByZWNpc2lvbiBwKSB7IHByZWNpc2lvbiA9IHA7IH0KKworICAgIFRRdWFsaWZp
ZXIgZ2V0UXVhbGlmaWVyKCkgY29uc3QgeyByZXR1cm4gcXVhbGlmaWVyOyB9CisgICAgdm9pZCBz
ZXRRdWFsaWZpZXIoVFF1YWxpZmllciBxKSB7IHF1YWxpZmllciA9IHE7IH0KKworICAgIC8vIE9u
ZS1kaW1lbnNpb25hbCBzaXplIG9mIHNpbmdsZSBpbnN0YW5jZSB0eXBlCisgICAgaW50IGdldE5v
bWluYWxTaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZTsgfQorICAgIHZvaWQgc2V0Tm9taW5hbFNp
emUodW5zaWduZWQgY2hhciBzKSB7IHNpemUgPSBzOyB9CisgICAgLy8gRnVsbCBzaXplIG9mIHNp
bmdsZSBpbnN0YW5jZSBvZiB0eXBlCisgICAgc2l6ZV90IGdldE9iamVjdFNpemUoKSBjb25zdDsK
KworICAgIGludCBlbGVtZW50UmVnaXN0ZXJDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAoc3RydWN0dXJlKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBURmllbGRMaXN0ICZm
aWVsZHMgPSBnZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7CisgICAgICAgICAgICBpbnQgcmVnaXN0ZXJD
b3VudCA9IDA7CisKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNp
emUoKTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ291bnQg
Kz0gZmllbGRzW2ldLT50eXBlKCktPnRvdGFsUmVnaXN0ZXJDb3VudCgpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICByZXR1cm4gcmVnaXN0ZXJDb3VudDsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmIChpc01hdHJpeCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2V0
Tm9taW5hbFNpemUoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgfQorCisgICAgaW50IHRvdGFsUmVnaXN0
ZXJDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoYXJyYXkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBhcnJheVNpemUgKiBlbGVtZW50UmVnaXN0ZXJDb3VudCgpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVsZW1l
bnRSZWdpc3RlckNvdW50KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGlzTWF0cml4
KCkgY29uc3QgeyByZXR1cm4gbWF0cml4ID8gdHJ1ZSA6IGZhbHNlOyB9CisgICAgdm9pZCBzZXRN
YXRyaXgoYm9vbCBtKSB7IG1hdHJpeCA9IG07IH0KKworICAgIGJvb2wgaXNBcnJheSgpIGNvbnN0
ICB7IHJldHVybiBhcnJheSA/IHRydWUgOiBmYWxzZTsgfQorICAgIGludCBnZXRBcnJheVNpemUo
KSBjb25zdCB7IHJldHVybiBhcnJheVNpemU7IH0KKyAgICB2b2lkIHNldEFycmF5U2l6ZShpbnQg
cykgeyBhcnJheSA9IHRydWU7IGFycmF5U2l6ZSA9IHM7IH0KKyAgICB2b2lkIGNsZWFyQXJyYXlu
ZXNzKCkgeyBhcnJheSA9IGZhbHNlOyBhcnJheVNpemUgPSAwOyB9CisKKyAgICBib29sIGlzVmVj
dG9yKCkgY29uc3QgeyByZXR1cm4gc2l6ZSA+IDEgJiYgIW1hdHJpeDsgfQorICAgIGJvb2wgaXNT
Y2FsYXIoKSBjb25zdCB7IHJldHVybiBzaXplID09IDEgJiYgIW1hdHJpeCAmJiAhc3RydWN0dXJl
OyB9CisKKyAgICBUU3RydWN0dXJlKiBnZXRTdHJ1Y3QoKSBjb25zdCB7IHJldHVybiBzdHJ1Y3R1
cmU7IH0KKyAgICB2b2lkIHNldFN0cnVjdChUU3RydWN0dXJlKiBzKSB7IHN0cnVjdHVyZSA9IHM7
IH0KKworICAgIGNvbnN0IFRTdHJpbmcmIGdldE1hbmdsZWROYW1lKCkgY29uc3QgeworICAgICAg
ICBpZiAobWFuZ2xlZC5lbXB0eSgpKSB7CisgICAgICAgICAgICBtYW5nbGVkID0gYnVpbGRNYW5n
bGVkTmFtZSgpOworICAgICAgICAgICAgbWFuZ2xlZCArPSAnOyc7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG1hbmdsZWQ7CisgICAgfQorCisgICAgYm9vbCBzYW1lRWxlbWVudFR5cGUoY29u
c3QgVFR5cGUmIHJpZ2h0KSBjb25zdCB7CisgICAgICAgIHJldHVybiAgICAgIHR5cGUgPT0gcmln
aHQudHlwZSAgICYmCisgICAgICAgICAgICAgICAgICAgIHNpemUgPT0gcmlnaHQuc2l6ZSAgICYm
CisgICAgICAgICAgICAgICAgICBtYXRyaXggPT0gcmlnaHQubWF0cml4ICYmCisgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmUgPT0gcmlnaHQuc3RydWN0dXJlOworICAgIH0KKyAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgVFR5cGUmIHJpZ2h0KSBjb25zdCB7CisgICAgICAgIHJldHVybiAgICAgIHR5
cGUgPT0gcmlnaHQudHlwZSAgICYmCisgICAgICAgICAgICAgICAgICAgIHNpemUgPT0gcmlnaHQu
c2l6ZSAgICYmCisgICAgICAgICAgICAgICAgICBtYXRyaXggPT0gcmlnaHQubWF0cml4ICYmCisg
ICAgICAgICAgICAgICAgICAgYXJyYXkgPT0gcmlnaHQuYXJyYXkgICYmICghYXJyYXkgfHwgYXJy
YXlTaXplID09IHJpZ2h0LmFycmF5U2l6ZSkgJiYKKyAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9
PSByaWdodC5zdHJ1Y3R1cmU7CisgICAgICAgIC8vIGRvbid0IGNoZWNrIHRoZSBxdWFsaWZpZXIs
IGl0J3Mgbm90IGV2ZXIgd2hhdCdzIGJlaW5nIHNvdWdodCBhZnRlcgorICAgIH0KKyAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgVFR5cGUmIHJpZ2h0KSBjb25zdCB7CisgICAgICAgIHJldHVybiAh
b3BlcmF0b3I9PShyaWdodCk7CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFRUeXBl
JiByaWdodCkgY29uc3QgeworICAgICAgICBpZiAodHlwZSAhPSByaWdodC50eXBlKSByZXR1cm4g
dHlwZSA8IHJpZ2h0LnR5cGU7CisgICAgICAgIGlmIChzaXplICE9IHJpZ2h0LnNpemUpIHJldHVy
biBzaXplIDwgcmlnaHQuc2l6ZTsKKyAgICAgICAgaWYgKG1hdHJpeCAhPSByaWdodC5tYXRyaXgp
IHJldHVybiBtYXRyaXggPCByaWdodC5tYXRyaXg7CisgICAgICAgIGlmIChhcnJheSAhPSByaWdo
dC5hcnJheSkgcmV0dXJuIGFycmF5IDwgcmlnaHQuYXJyYXk7CisgICAgICAgIGlmIChhcnJheVNp
emUgIT0gcmlnaHQuYXJyYXlTaXplKSByZXR1cm4gYXJyYXlTaXplIDwgcmlnaHQuYXJyYXlTaXpl
OworICAgICAgICBpZiAoc3RydWN0dXJlICE9IHJpZ2h0LnN0cnVjdHVyZSkgcmV0dXJuIHN0cnVj
dHVyZSA8IHJpZ2h0LnN0cnVjdHVyZTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgY29uc3QgY2hhciogZ2V0QmFzaWNTdHJpbmcoKSBjb25zdCB7IHJldHVybiA6OmdldEJh
c2ljU3RyaW5nKHR5cGUpOyB9CisgICAgY29uc3QgY2hhciogZ2V0UHJlY2lzaW9uU3RyaW5nKCkg
Y29uc3QgeyByZXR1cm4gOjpnZXRQcmVjaXNpb25TdHJpbmcocHJlY2lzaW9uKTsgfQorICAgIGNv
bnN0IGNoYXIqIGdldFF1YWxpZmllclN0cmluZygpIGNvbnN0IHsgcmV0dXJuIDo6Z2V0UXVhbGlm
aWVyU3RyaW5nKHF1YWxpZmllcik7IH0KKyAgICBUU3RyaW5nIGdldENvbXBsZXRlU3RyaW5nKCkg
Y29uc3Q7CisKKyAgICAvLyBJZiB0aGlzIHR5cGUgaXMgYSBzdHJ1Y3QsIHJldHVybnMgdGhlIGRl
ZXBlc3Qgc3RydWN0IG5lc3Rpbmcgb2YKKyAgICAvLyBhbnkgZmllbGQgaW4gdGhlIHN0cnVjdC4g
Rm9yIGV4YW1wbGU6CisgICAgLy8gICBzdHJ1Y3QgbmVzdGluZzEgeworICAgIC8vICAgICB2ZWM0
IHBvc2l0aW9uOworICAgIC8vICAgfTsKKyAgICAvLyAgIHN0cnVjdCBuZXN0aW5nMiB7CisgICAg
Ly8gICAgIG5lc3RpbmcxIGZpZWxkMTsKKyAgICAvLyAgICAgdmVjNCBmaWVsZDI7CisgICAgLy8g
ICB9OworICAgIC8vIEZvciB0eXBlICJuZXN0aW5nMiIsIHRoaXMgbWV0aG9kIHdvdWxkIHJldHVy
biAyIC0tIHRoZSBudW1iZXIKKyAgICAvLyBvZiBzdHJ1Y3R1cmVzIHRocm91Z2ggd2hpY2ggaW5k
aXJlY3Rpb24gbXVzdCBvY2N1ciB0byByZWFjaCB0aGUKKyAgICAvLyBkZWVwZXN0IGZpZWxkIChu
ZXN0aW5nMi5maWVsZDEucG9zaXRpb24pLgorICAgIGludCBnZXREZWVwZXN0U3RydWN0TmVzdGlu
ZygpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZSA/IHN0cnVjdHVyZS0+ZGVlcGVz
dE5lc3RpbmcoKSA6IDA7CisgICAgfQorCisgICAgYm9vbCBpc1N0cnVjdHVyZUNvbnRhaW5pbmdB
cnJheXMoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBzdHJ1Y3R1cmUgPyBzdHJ1Y3R1cmUtPmNv
bnRhaW5zQXJyYXlzKCkgOiBmYWxzZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVFN0cmluZyBi
dWlsZE1hbmdsZWROYW1lKCkgY29uc3Q7CisKKyAgICBUQmFzaWNUeXBlIHR5cGU7CisgICAgVFBy
ZWNpc2lvbiBwcmVjaXNpb247CisgICAgVFF1YWxpZmllciBxdWFsaWZpZXI7CisgICAgdW5zaWdu
ZWQgY2hhciBzaXplOworICAgIGJvb2wgbWF0cml4OworICAgIGJvb2wgYXJyYXk7CisgICAgaW50
IGFycmF5U2l6ZTsKKworICAgIFRTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsgICAgICAvLyAwIHVubGVz
cyB0aGlzIGlzIGEgc3RydWN0CisKKyAgICBtdXRhYmxlIFRTdHJpbmcgbWFuZ2xlZDsKK307CisK
Ky8vCisvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBwcm9ibGVtIHdpdGggdGhlIHlhY2Mg
c3RhY2ssICBJdCBjYW4ndCBoYXZlCisvLyB0eXBlcyB0aGF0IGl0IHRoaW5rcyBoYXZlIG5vbi10
cml2aWFsIGNvbnN0cnVjdG9ycy4gIEl0IHNob3VsZAorLy8ganVzdCBiZSB1c2VkIHdoaWxlIHJl
Y29nbml6aW5nIHRoZSBncmFtbWFyLCBub3QgYW55dGhpbmcgZWxzZS4gIFBvaW50ZXJzCisvLyBj
b3VsZCBiZSB1c2VkLCBidXQgYWxzbyB0cnlpbmcgdG8gYXZvaWQgbG90cyBvZiBtZW1vcnkgbWFu
YWdlbWVudCBvdmVyaGVhZC4KKy8vCisvLyBOb3QgYXMgYmFkIGFzIGl0IGxvb2tzLCB0aGVyZSBp
cyBubyBhY3R1YWwgYXNzdW1wdGlvbiB0aGF0IHRoZSBmaWVsZHMKKy8vIG1hdGNoIHVwIG9yIGFy
ZSBuYW1lIHRoZSBzYW1lIG9yIGFueXRoaW5nIGxpa2UgdGhhdC4KKy8vCitzdHJ1Y3QgVFB1Ymxp
Y1R5cGUKK3sKKyAgICBUQmFzaWNUeXBlIHR5cGU7CisgICAgVFF1YWxpZmllciBxdWFsaWZpZXI7
CisgICAgVFByZWNpc2lvbiBwcmVjaXNpb247CisgICAgdW5zaWduZWQgY2hhciBzaXplOyAgICAg
ICAgICAvLyBzaXplIG9mIHZlY3RvciBvciBtYXRyaXgsIG5vdCBzaXplIG9mIGFycmF5CisgICAg
Ym9vbCBtYXRyaXg7CisgICAgYm9vbCBhcnJheTsKKyAgICBpbnQgYXJyYXlTaXplOworICAgIFRU
eXBlKiB1c2VyRGVmOworICAgIFRTb3VyY2VMb2MgbGluZTsKKworICAgIHZvaWQgc2V0QmFzaWMo
VEJhc2ljVHlwZSBidCwgVFF1YWxpZmllciBxLCBjb25zdCBUU291cmNlTG9jJiBsbikKKyAgICB7
CisgICAgICAgIHR5cGUgPSBidDsKKyAgICAgICAgcXVhbGlmaWVyID0gcTsKKyAgICAgICAgcHJl
Y2lzaW9uID0gRWJwVW5kZWZpbmVkOworICAgICAgICBzaXplID0gMTsKKyAgICAgICAgbWF0cml4
ID0gZmFsc2U7CisgICAgICAgIGFycmF5ID0gZmFsc2U7CisgICAgICAgIGFycmF5U2l6ZSA9IDA7
CisgICAgICAgIHVzZXJEZWYgPSAwOworICAgICAgICBsaW5lID0gbG47CisgICAgfQorCisgICAg
dm9pZCBzZXRBZ2dyZWdhdGUodW5zaWduZWQgY2hhciBzLCBib29sIG0gPSBmYWxzZSkKKyAgICB7
CisgICAgICAgIHNpemUgPSBzOworICAgICAgICBtYXRyaXggPSBtOworICAgIH0KKworICAgIHZv
aWQgc2V0QXJyYXkoYm9vbCBhLCBpbnQgcyA9IDApCisgICAgeworICAgICAgICBhcnJheSA9IGE7
CisgICAgICAgIGFycmF5U2l6ZSA9IHM7CisgICAgfQorCisgICAgYm9vbCBpc1N0cnVjdHVyZUNv
bnRhaW5pbmdBcnJheXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCF1c2VyRGVmKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gdXNlckRlZi0+aXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlzKCk7CisgICAgfQorfTsK
KworI2VuZGlmIC8vIF9UWVBFU19JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1VuZm9sZFNob3J0Q2lyY3VpdC5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRT
aG9ydENpcmN1aXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI3ODI2MTE5YWVhMDA3NGQ0ZmNjYzA0ODU1N2Qw
MTExZjc4OTA4MzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwCkBAIC0wLDAgKzEs
MTg0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gVW5mb2xkU2hvcnRDaXJjdWl0IGlzIGFuIEFT
VCB0cmF2ZXJzZXIgdG8gb3V0cHV0IHNob3J0LWNpcmN1aXRpbmcgb3BlcmF0b3JzIGFzIGlmLWVs
c2Ugc3RhdGVtZW50cy4KKy8vIFRoZSByZXN1bHRzIGFyZSBhc3NpZ25lZCB0byBzIyB0ZW1wb3Jh
cmllcywgd2hpY2ggYXJlIHVzZWQgYnkgdGhlIG1haW4gdHJhbnNsYXRvciBpbnN0ZWFkIG9mCisv
LyB0aGUgb3JpZ2luYWwgZXhwcmVzc2lvbi4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1VuZm9sZFNob3J0Q2lyY3VpdC5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9JbmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0SExT
TC5oIgorCituYW1lc3BhY2Ugc2gKK3sKK1VuZm9sZFNob3J0Q2lyY3VpdDo6VW5mb2xkU2hvcnRD
aXJjdWl0KFRQYXJzZUNvbnRleHQgJmNvbnRleHQsIE91dHB1dEhMU0wgKm91dHB1dEhMU0wpIDog
bUNvbnRleHQoY29udGV4dCksIG1PdXRwdXRITFNMKG91dHB1dEhMU0wpCit7CisgICAgbVRlbXBv
cmFyeUluZGV4ID0gMDsKK30KKwordm9pZCBVbmZvbGRTaG9ydENpcmN1aXQ6OnRyYXZlcnNlKFRJ
bnRlcm1Ob2RlICpub2RlKQoreworICAgIGludCByZXdpbmRJbmRleCA9IG1UZW1wb3JhcnlJbmRl
eDsKKyAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICBtVGVtcG9yYXJ5SW5kZXggPSByZXdp
bmRJbmRleDsKK30KKworYm9vbCBVbmZvbGRTaG9ydENpcmN1aXQ6OnZpc2l0QmluYXJ5KFZpc2l0
IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9
IG1PdXRwdXRITFNMLT5nZXRCb2R5U3RyZWFtKCk7CisKKyAgICAvLyBJZiBvdXIgcmlnaHQgbm9k
ZSBkb2Vzbid0IGhhdmUgc2lkZSBlZmZlY3RzLCB3ZSBrbm93IHdlIGRvbid0IG5lZWQgdG8gdW5m
b2xkIHRoaXMKKyAgICAvLyBleHByZXNzaW9uOiB0aGVyZSB3aWxsIGJlIG5vIHNob3J0LWNpcmN1
aXRpbmcgc2lkZSBlZmZlY3RzIHRvIGF2b2lkCisgICAgLy8gKG5vdGU6IHVuZm9sZGluZyBkb2Vz
bid0IGRlcGVuZCBvbiB0aGUgbGVmdCBub2RlIC0tIGl0IHdpbGwgYWx3YXlzIGJlIGV2YWx1YXRl
ZCkKKyAgICBpZiAoIW5vZGUtPmdldFJpZ2h0KCktPmhhc1NpZGVFZmZlY3RzKCkpCisgICAgewor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkp
CisgICAgeworICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6CisgICAgICAgIC8vICJ4IHx8IHkiIGlz
IGVxdWl2YWxlbnQgdG8gInggPyB0cnVlIDogeSIsIHdoaWNoIHVuZm9sZHMgdG8gImJvb2wgczsg
aWYoeCkgcyA9IHRydWU7IGVsc2UgcyA9IHk7IiwKKyAgICAgICAgLy8gYW5kIHRoZW4gZnVydGhl
ciBzaW1wbGlmaWVzIGRvd24gdG8gImJvb2wgcyA9IHg7IGlmKCFzKSBzID0geTsiLgorICAgICAg
ICB7CisgICAgICAgICAgICBpbnQgaSA9IG1UZW1wb3JhcnlJbmRleDsKKworICAgICAgICAgICAg
b3V0IDw8ICJib29sIHMiIDw8IGkgPDwgIjtcbiI7CisKKyAgICAgICAgICAgIG91dCA8PCAie1xu
IjsKKworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBu
b2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICJzIiA8
PCBpIDw8ICIgPSAiOworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAg
ICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKKyAgICAgICAg
ICAgIG91dCA8PCAiO1xuIjsKKyAgICAgICAgICAgIG91dCA8PCAiaWYgKCFzIiA8PCBpIDw8ICIp
XG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5k
ZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdldFJpZ2h0KCktPnRyYXZlcnNlKHRoaXMp
OworICAgICAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8PCAiID0gIjsKKyAgICAgICAgICAg
IG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+
dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICAgICAgb3V0IDw8ICI7XG4iCisgICAgICAg
ICAgICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgICAgIG91dCA8PCAifVxuIjsKKworICAgICAg
ICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOgorICAgICAgICAvLyAieCAmJiB5IiBp
cyBlcXVpdmFsZW50IHRvICJ4ID8geSA6IGZhbHNlIiwgd2hpY2ggdW5mb2xkcyB0byAiYm9vbCBz
OyBpZih4KSBzID0geTsgZWxzZSBzID0gZmFsc2U7IiwKKyAgICAgICAgLy8gYW5kIHRoZW4gZnVy
dGhlciBzaW1wbGlmaWVzIGRvd24gdG8gImJvb2wgcyA9IHg7IGlmKHMpIHMgPSB5OyIuCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGludCBpID0gbVRlbXBvcmFyeUluZGV4OworCisgICAgICAgICAg
ICBvdXQgPDwgImJvb2wgcyIgPDwgaSA8PCAiO1xuIjsKKworICAgICAgICAgICAgb3V0IDw8ICJ7
XG4iOworCisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAg
IG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICBvdXQgPDwgInMi
IDw8IGkgPDwgIiA9ICI7CisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAg
ICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAg
ICAgICAgb3V0IDw8ICI7XG4iOworICAgICAgICAgICAgb3V0IDw8ICJpZiAocyIgPDwgaSA8PCAi
KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iOworICAgICAgICAgICAgbVRlbXBvcmFyeUlu
ZGV4ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSh0aGlz
KTsKKyAgICAgICAgICAgIG91dCA8PCAiICAgIHMiIDw8IGkgPDwgIiA9ICI7CisgICAgICAgICAg
ICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdldFJpZ2h0KCkt
PnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKKyAgICAgICAgICAgIG91dCA8PCAiO1xuIgorICAgICAg
ICAgICAgICAgICAgICJ9XG4iOworCisgICAgICAgICAgICBvdXQgPDwgIn1cbiI7CisKKyAgICAg
ICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30K
KworYm9vbCBVbmZvbGRTaG9ydENpcmN1aXQ6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBU
SW50ZXJtU2VsZWN0aW9uICpub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1PdXRw
dXRITFNMLT5nZXRCb2R5U3RyZWFtKCk7CisKKyAgICAvLyBVbmZvbGQgImIgPyB4IDogeSIgaW50
byAidHlwZSBzOyBpZihiKSBzID0geDsgZWxzZSBzID0geTsiCisgICAgaWYgKG5vZGUtPnVzZXNU
ZXJuYXJ5T3BlcmF0b3IoKSkKKyAgICB7CisgICAgICAgIGludCBpID0gbVRlbXBvcmFyeUluZGV4
OworCisgICAgICAgIG91dCA8PCBtT3V0cHV0SExTTC0+dHlwZVN0cmluZyhub2RlLT5nZXRUeXBl
KCkpIDw8ICIgcyIgPDwgaSA8PCAiO1xuIjsKKworICAgICAgICBvdXQgPDwgIntcbiI7CisKKyAg
ICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgIG5vZGUtPmdldENvbmRpdGlv
bigpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICJpZiAoIjsKKyAgICAgICAgbVRl
bXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2
ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgIG91dCA8PCAiKVxuIgorICAgICAgICAgICAgICAg
IntcbiI7CisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5n
ZXRUcnVlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG91dCA8PCAiICAgIHMiIDw8
IGkgPDwgIiA9ICI7CisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBu
b2RlLT5nZXRUcnVlQmxvY2soKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICBvdXQg
PDwgIjtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAiZWxzZVxuIgor
ICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwor
ICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBv
dXQgPDwgIiAgICBzIiA8PCBpIDw8ICIgPSAiOworICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBp
ICsgMTsKKyAgICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9jaygpLT50cmF2ZXJzZShtT3V0cHV0SExT
TCk7CisgICAgICAgIG91dCA8PCAiO1xuIgorICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICAg
ICAgb3V0IDw8ICJ9XG4iOworCisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAg
IH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBVbmZvbGRTaG9ydENpcmN1aXQ6OnZp
c2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AgKm5vZGUpCit7CisgICAgaW50IHJld2lu
ZEluZGV4ID0gbVRlbXBvcmFyeUluZGV4OworCisgICAgaWYgKG5vZGUtPmdldEluaXQoKSkKKyAg
ICB7CisgICAgICAgIG5vZGUtPmdldEluaXQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorICAg
IAorICAgIGlmIChub2RlLT5nZXRDb25kaXRpb24oKSkKKyAgICB7CisgICAgICAgIG5vZGUtPmdl
dENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9CisKKyAgICBpZiAobm9kZS0+Z2V0
RXhwcmVzc2lvbigpKQorICAgIHsKKyAgICAgICAgbm9kZS0+Z2V0RXhwcmVzc2lvbigpLT50cmF2
ZXJzZSh0aGlzKTsKKyAgICB9CisKKyAgICBtVGVtcG9yYXJ5SW5kZXggPSByZXdpbmRJbmRleDsK
KworICAgIHJldHVybiBmYWxzZTsKK30KKworaW50IFVuZm9sZFNob3J0Q2lyY3VpdDo6Z2V0TmV4
dFRlbXBvcmFyeUluZGV4KCkKK3sKKyAgICByZXR1cm4gbVRlbXBvcmFyeUluZGV4Kys7Cit9Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9VbmZvbGRTaG9ydENpcmN1aXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1VuZm9sZFNob3J0Q2lyY3VpdC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFlNDE2
YmMwNGMxNGY1M2NhMDRiODViOTdhOWQ5MjQ1ZGMwZjcyYzAKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9y
dENpcmN1aXQuaApAQCAtMCwwICsxLDM5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gVW5mb2xk
U2hvcnRDaXJjdWl0IGlzIGFuIEFTVCB0cmF2ZXJzZXIgdG8gb3V0cHV0IHNob3J0LWNpcmN1aXRp
bmcgb3BlcmF0b3JzIGFzIGlmLWVsc2Ugc3RhdGVtZW50cworLy8KKworI2lmbmRlZiBDT01QSUxF
Ul9VTkZPTERTSE9SVENJUkNVSVRfSF8KKyNkZWZpbmUgQ09NUElMRVJfVU5GT0xEU0hPUlRDSVJD
VUlUX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCisKK25hbWVzcGFj
ZSBzaAoreworY2xhc3MgT3V0cHV0SExTTDsKKworY2xhc3MgVW5mb2xkU2hvcnRDaXJjdWl0IDog
cHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIFVuZm9sZFNob3J0Q2ly
Y3VpdChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBPdXRwdXRITFNMICpvdXRwdXRITFNMKTsKKwor
ICAgIHZvaWQgdHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpOworICAgIGJvb2wgdmlzaXRCaW5h
cnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKyAgICBib29sIHZpc2l0U2VsZWN0aW9u
KFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uICpub2RlKTsKKyAgICBib29sIHZpc2l0TG9v
cChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AgKm5vZGUpOworCisgICAgaW50IGdldE5leHRUZW1w
b3JhcnlJbmRleCgpOworCisgIHByb3RlY3RlZDoKKyAgICBUUGFyc2VDb250ZXh0ICZtQ29udGV4
dDsKKyAgICBPdXRwdXRITFNMICpjb25zdCBtT3V0cHV0SExTTDsKKworICAgIGludCBtVGVtcG9y
YXJ5SW5kZXg7Cit9OworfQorCisjZW5kaWYgICAvLyBDT01QSUxFUl9VTkZPTERTSE9SVENJUkNV
SVRfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1VuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjI5YzQzOTdkNTYxZWEyYWFkZjM5OTg0OGUwNDYwNTRlNDNjMzkyNzIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwCkBAIC0wLDAgKzEsODEgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1VuZm9sZFNob3J0Q2ly
Y3VpdEFTVC5oIgorCituYW1lc3BhY2UKK3sKKworLy8gInggfHwgeSIgaXMgZXF1aXZhbGVudCB0
byAieCA/IHRydWUgOiB5Ii4KK1RJbnRlcm1TZWxlY3Rpb24gKlVuZm9sZE9SKFRJbnRlcm1UeXBl
ZCAqeCwgVEludGVybVR5cGVkICp5KQoreworICAgIGNvbnN0IFRUeXBlIGJvb2xUeXBlKEVidEJv
b2wsIEVicFVuZGVmaW5lZCk7CisgICAgQ29uc3RhbnRVbmlvbiAqdSA9IG5ldyBDb25zdGFudFVu
aW9uOworICAgIHUtPnNldEJDb25zdCh0cnVlKTsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAq
dHJ1ZU5vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24oCisgICAgICAgIHUsIFRUeXBlKEVi
dEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QsIDEpKTsKKyAgICByZXR1cm4gbmV3IFRJbnRl
cm1TZWxlY3Rpb24oeCwgdHJ1ZU5vZGUsIHksIGJvb2xUeXBlKTsKK30KKworLy8gInggJiYgeSIg
aXMgZXF1aXZhbGVudCB0byAieCA/IHkgOiBmYWxzZSIuCitUSW50ZXJtU2VsZWN0aW9uICpVbmZv
bGRBTkQoVEludGVybVR5cGVkICp4LCBUSW50ZXJtVHlwZWQgKnkpCit7CisgICAgY29uc3QgVFR5
cGUgYm9vbFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkKTsKKyAgICBDb25zdGFudFVuaW9uICp1
ID0gbmV3IENvbnN0YW50VW5pb247CisgICAgdS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICBUSW50
ZXJtQ29uc3RhbnRVbmlvbiAqZmFsc2VOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKAor
ICAgICAgICB1LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0LCAxKSk7Cisg
ICAgcmV0dXJuIG5ldyBUSW50ZXJtU2VsZWN0aW9uKHgsIHksIGZhbHNlTm9kZSwgYm9vbFR5cGUp
OworfQorCit9ICAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCisKK2Jvb2wgVW5mb2xkU2hvcnRDaXJj
dWl0QVNUOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm9kZSkKK3sK
KyAgICBUSW50ZXJtU2VsZWN0aW9uICpyZXBsYWNlbWVudCA9IE5VTEw7CisKKyAgICBzd2l0Y2gg
KG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6CisgICAgICAg
IHJlcGxhY2VtZW50ID0gVW5mb2xkT1Iobm9kZS0+Z2V0TGVmdCgpLCBub2RlLT5nZXRSaWdodCgp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6CisgICAgICAgIHJl
cGxhY2VtZW50ID0gVW5mb2xkQU5EKG5vZGUtPmdldExlZnQoKSwgbm9kZS0+Z2V0UmlnaHQoKSk7
CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGlmIChyZXBsYWNlbWVudCkKKyAgICB7CisgICAgICAgIHJlcGxhY2VtZW50cy5wdXNoX2Jh
Y2soCisgICAgICAgICAgICBOb2RlVXBkYXRlRW50cnkoZ2V0UGFyZW50Tm9kZSgpLCBub2RlLCBy
ZXBsYWNlbWVudCkpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBVbmZvbGRT
aG9ydENpcmN1aXRBU1Q6OnVwZGF0ZVRyZWUoKQoreworICAgIGZvciAoc2l6ZV90IGlpID0gMDsg
aWkgPCByZXBsYWNlbWVudHMuc2l6ZSgpOyArK2lpKQorICAgIHsKKyAgICAgICAgY29uc3QgTm9k
ZVVwZGF0ZUVudHJ5JiBlbnRyeSA9IHJlcGxhY2VtZW50c1tpaV07CisgICAgICAgIEFTU0VSVChl
bnRyeS5wYXJlbnQpOworICAgICAgICBib29sIHJlcGxhY2VkID0gZW50cnkucGFyZW50LT5yZXBs
YWNlQ2hpbGROb2RlKAorICAgICAgICAgICAgZW50cnkub3JpZ2luYWwsIGVudHJ5LnJlcGxhY2Vt
ZW50KTsKKyAgICAgICAgQVNTRVJUKHJlcGxhY2VkKTsKKworICAgICAgICAvLyBJbiBBU1QgdHJh
dmVyc2luZywgYSBwYXJlbnQgaXMgdmlzaXRlZCBiZWZvcmUgaXRzIGNoaWxkcmVuLgorICAgICAg
ICAvLyBBZnRlciB3ZSByZXBsYWNlIGEgbm9kZSwgaWYgYW4gaW1tZWRpYXRlIGNoaWxkIGlzIHRv
CisgICAgICAgIC8vIGJlIHJlcGxhY2VkLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCB1
cGRhdGUgdGhlIHJlcGxhY2VkCisJLy8gbm9kZTsgaW5zdGVhZCwgd2UgdXBkYXRlIHRoZSByZXBs
YWNlbWVudCBub2RlLgorICAgICAgICBmb3IgKHNpemVfdCBqaiA9IGlpICsgMTsgamogPCByZXBs
YWNlbWVudHMuc2l6ZSgpOyArK2pqKQorICAgICAgICB7CisgICAgICAgICAgICBOb2RlVXBkYXRl
RW50cnkmIGVudHJ5MiA9IHJlcGxhY2VtZW50c1tqal07CisgICAgICAgICAgICBpZiAoZW50cnky
LnBhcmVudCA9PSBlbnRyeS5vcmlnaW5hbCkKKyAgICAgICAgICAgICAgICBlbnRyeTIucGFyZW50
ID0gZW50cnkucmVwbGFjZW1lbnQ7CisgICAgICAgIH0KKyAgICB9Cit9CisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1VuZm9sZFNo
b3J0Q2lyY3VpdEFTVC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0QVNULmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjRjMTRhNjBlMzdm
ZWRiMjIyY2Y5MjZkMDg2M2JiZDIyMzU3NzljMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1VuZm9sZFNob3J0Q2lyY3Vp
dEFTVC5oCkBAIC0wLDAgKzEsNTEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBVbmZvbGRTaG9y
dENpcmN1aXRBU1QgaXMgYW4gQVNUIHRyYXZlcnNlciB0byByZXBsYWNlIHNob3J0LWNpcmN1aXRp
bmcKKy8vIG9wZXJhdGlvbnMgd2l0aCB0ZXJuYXJ5IG9wZXJhdGlvbnMuCisvLworCisjaWZuZGVm
IENPTVBJTEVSX1VORk9MRF9TSE9SVF9DSVJDVUlUX0FTVF9IXworI2RlZmluZSBDT01QSUxFUl9V
TkZPTERfU0hPUlRfQ0lSQ1VJVF9BU1RfSF8KKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxz
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKworLy8g
VGhpcyB0cmF2ZXJzZXIgaWRlbnRpZmllcyBhbGwgdGhlIHNob3J0IGNpcmN1aXQgYmluYXJ5ICBu
b2RlcyB0aGF0IG5lZWQgdG8KKy8vIGJlIHJlcGxhY2VkLCBhbmQgY3JlYXRlcyB0aGUgY29ycmVz
cG9uZGluZyByZXBsYWNlbWVudCBub2Rlcy4gSG93ZXZlciwKKy8vIHRoZSBhY3R1YWwgcmVwbGFj
ZW1lbnRzIGhhcHBlbiBhZnRlciB0aGUgdHJhdmVyc2UgdGhyb3VnaCB1cGRhdGVUcmVlKCkuCisK
K2NsYXNzIFVuZm9sZFNob3J0Q2lyY3VpdEFTVCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7
CisgIHB1YmxpYzoKKyAgICBVbmZvbGRTaG9ydENpcmN1aXRBU1QoKSB7IH0KKworICAgIHZpcnR1
YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqKTsKKworICAg
IHZvaWQgdXBkYXRlVHJlZSgpOworCisgIHByaXZhdGU6CisgICAgc3RydWN0IE5vZGVVcGRhdGVF
bnRyeQorICAgIHsKKyAgICAgICAgTm9kZVVwZGF0ZUVudHJ5KFRJbnRlcm1Ob2RlICpfcGFyZW50
LAorICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5vZGUgKl9vcmlnaW5hbCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICpfcmVwbGFjZW1lbnQpCisgICAgICAgICAg
ICA6IHBhcmVudChfcGFyZW50KSwKKyAgICAgICAgICAgICAgb3JpZ2luYWwoX29yaWdpbmFsKSwK
KyAgICAgICAgICAgICAgcmVwbGFjZW1lbnQoX3JlcGxhY2VtZW50KSB7fQorCisgICAgICAgIFRJ
bnRlcm1Ob2RlICpwYXJlbnQ7CisgICAgICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbDsKKyAgICAg
ICAgVEludGVybU5vZGUgKnJlcGxhY2VtZW50OworICAgIH07CisKKyAgICAvLyBEdXJpbmcgdHJh
dmVyc2luZywgc2F2ZSBhbGwgdGhlIHJlcGxhY2VtZW50cyB0aGF0IG5lZWQgdG8gaGFwcGVuOwor
ICAgIC8vIHRoZW4gcmVwbGFjZSB0aGVtIGJ5IGNhbGxpbmcgdXBkYXRlTm9kZXMoKS4KKyAgICBz
dGQ6OnZlY3RvcjxOb2RlVXBkYXRlRW50cnk+IHJlcGxhY2VtZW50czsKKworICAgIERJU0FMTE9X
X0NPUFlfQU5EX0FTU0lHTihVbmZvbGRTaG9ydENpcmN1aXRBU1QpOworfTsKKworI2VuZGlmICAv
LyBDT01QSUxFUl9VTkZPTERfU0hPUlRfQ0lSQ1VJVF9BU1RfSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1VuaWZvcm0uY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5pZm9ybS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOTIyZTEzZjA3MTIwODFlNTU3NGM4MGQ0OWQ1Zjc0ZGUwNTM3YTlkZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1VuaWZvcm0uY3BwCkBAIC0wLDAgKzEsMjEgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmgiCisKK25hbWVzcGFjZSBzaAor
eworCitVbmlmb3JtOjpVbmlmb3JtKEdMZW51bSB0eXBlLCBHTGVudW0gcHJlY2lzaW9uLCBjb25z
dCBjaGFyICpuYW1lLCBpbnQgYXJyYXlTaXplLCBpbnQgcmVnaXN0ZXJJbmRleCkKK3sKKyAgICB0
aGlzLT50eXBlID0gdHlwZTsKKyAgICB0aGlzLT5wcmVjaXNpb24gPSBwcmVjaXNpb247CisgICAg
dGhpcy0+bmFtZSA9IG5hbWU7CisgICAgdGhpcy0+YXJyYXlTaXplID0gYXJyYXlTaXplOworICAg
IHRoaXMtPnJlZ2lzdGVySW5kZXggPSByZWdpc3RlckluZGV4OworfQorCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3Jt
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlm
b3JtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNGM1M2ZmYTdkMmZjNTg0ZTQwMGMyY2YwNGQwMTJlNmFmMWUyNTJk
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1VuaWZvcm0uaApAQCAtMCwwICsxLDM1IEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2lmbmRlZiBDT01QSUxFUl9VTklGT1JNX0hfCisjZGVmaW5lIENPTVBJTEVSX1VOSUZPUk1fSF8K
KworI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNkZWZpbmUgR0xfQVBJ
Q0FMTAorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorCituYW1lc3BhY2Ugc2gKK3sKKworc3RydWN0
IFVuaWZvcm0KK3sKKyAgICBVbmlmb3JtKEdMZW51bSB0eXBlLCBHTGVudW0gcHJlY2lzaW9uLCBj
b25zdCBjaGFyICpuYW1lLCBpbnQgYXJyYXlTaXplLCBpbnQgcmVnaXN0ZXJJbmRleCk7CisKKyAg
ICBHTGVudW0gdHlwZTsKKyAgICBHTGVudW0gcHJlY2lzaW9uOworICAgIHN0ZDo6c3RyaW5nIG5h
bWU7CisgICAgdW5zaWduZWQgaW50IGFycmF5U2l6ZTsKKyAgICAKKyAgICBpbnQgcmVnaXN0ZXJJ
bmRleDsKK307CisKK3R5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybT4gQWN0aXZlVW5pZm9ybXM7
CisKK30KKworI2VuZGlmICAgLy8gQ09NUElMRVJfVU5JRk9STV9IXwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1p
dGF0aW9ucy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYzJjYzQxY2RhMzZmODEz
NzExZmYzNjg4NGYyNWIwNjZiYmM4ODQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1pdGF0aW9ucy5j
cHAKQEAgLTAsMCArMSw1MTIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL0luZm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9J
bml0aWFsaXplUGFyc2VDb250ZXh0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Q
YXJzZUNvbnRleHQuaCIKKworbmFtZXNwYWNlIHsKK2Jvb2wgSXNMb29wSW5kZXgoY29uc3QgVElu
dGVybVN5bWJvbCogc3ltYm9sLCBjb25zdCBUTG9vcFN0YWNrJiBzdGFjaykgeworICAgIGZvciAo
VExvb3BTdGFjazo6Y29uc3RfaXRlcmF0b3IgaSA9IHN0YWNrLmJlZ2luKCk7IGkgIT0gc3RhY2su
ZW5kKCk7ICsraSkgeworICAgICAgICBpZiAoaS0+aW5kZXguaWQgPT0gc3ltYm9sLT5nZXRJZCgp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBNYXJrTG9vcEZvclVucm9sbChjb25zdCBUSW50ZXJtU3ltYm9sKiBzeW1ib2wsIFRM
b29wU3RhY2smIHN0YWNrKSB7CisgICAgZm9yIChUTG9vcFN0YWNrOjppdGVyYXRvciBpID0gc3Rh
Y2suYmVnaW4oKTsgaSAhPSBzdGFjay5lbmQoKTsgKytpKSB7CisgICAgICAgIGlmIChpLT5pbmRl
eC5pZCA9PSBzeW1ib2wtPmdldElkKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChpLT5sb29wICE9
IE5VTEwpOworICAgICAgICAgICAgaS0+bG9vcC0+c2V0VW5yb2xsRmxhZyh0cnVlKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBVTlJFQUNIQUJMRSgpOworfQor
CisvLyBUcmF2ZXJzZXMgYSBub2RlIHRvIGNoZWNrIGlmIGl0IHJlcHJlc2VudHMgYSBjb25zdGFu
dCBpbmRleCBleHByZXNzaW9uLgorLy8gRGVmaW5pdGlvbjoKKy8vIGNvbnN0YW50LWluZGV4LWV4
cHJlc3Npb25zIGFyZSBhIHN1cGVyc2V0IG9mIGNvbnN0YW50LWV4cHJlc3Npb25zLgorLy8gQ29u
c3RhbnQtaW5kZXgtZXhwcmVzc2lvbnMgY2FuIGluY2x1ZGUgbG9vcCBpbmRpY2VzIGFzIGRlZmlu
ZWQgaW4KKy8vIEdMU0wgRVMgMS4wIHNwZWMsIEFwcGVuZGl4IEEsIHNlY3Rpb24gNC4KKy8vIFRo
ZSBmb2xsb3dpbmcgYXJlIGNvbnN0YW50LWluZGV4LWV4cHJlc3Npb25zOgorLy8gLSBDb25zdGFu
dCBleHByZXNzaW9ucworLy8gLSBMb29wIGluZGljZXMgYXMgZGVmaW5lZCBpbiBzZWN0aW9uIDQK
Ky8vIC0gRXhwcmVzc2lvbnMgY29tcG9zZWQgb2YgYm90aCBvZiB0aGUgYWJvdmUKK2NsYXNzIFZh
bGlkYXRlQ29uc3RJbmRleEV4cHIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7CitwdWJsaWM6
CisgICAgVmFsaWRhdGVDb25zdEluZGV4RXhwcihjb25zdCBUTG9vcFN0YWNrJiBzdGFjaykKKyAg
ICAgICAgOiBtVmFsaWQodHJ1ZSksIG1Mb29wU3RhY2soc3RhY2spIHt9CisKKyAgICAvLyBSZXR1
cm5zIHRydWUgaWYgdGhlIHBhcnNlZCBub2RlIHJlcHJlc2VudHMgYSBjb25zdGFudCBpbmRleCBl
eHByZXNzaW9uLgorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1WYWxpZDsgfQor
CisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCkgewor
ICAgICAgICAvLyBPbmx5IGNvbnN0YW50cyBhbmQgbG9vcCBpbmRpY2VzIGFyZSBhbGxvd2VkIGlu
IGEKKyAgICAgICAgLy8gY29uc3RhbnQgaW5kZXggZXhwcmVzc2lvbi4KKyAgICAgICAgaWYgKG1W
YWxpZCkgeworICAgICAgICAgICAgbVZhbGlkID0gKHN5bWJvbC0+Z2V0UXVhbGlmaWVyKCkgPT0g
RXZxQ29uc3QpIHx8CisgICAgICAgICAgICAgICAgICAgICBJc0xvb3BJbmRleChzeW1ib2wsIG1M
b29wU3RhY2spOworICAgICAgICB9CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgbVZhbGlk
OworICAgIGNvbnN0IFRMb29wU3RhY2smIG1Mb29wU3RhY2s7Cit9OworCisvLyBUcmF2ZXJzZXMg
YSBub2RlIHRvIGNoZWNrIGlmIGl0IHVzZXMgYSBsb29wIGluZGV4LgorLy8gSWYgYW4gaW50IGxv
b3AgaW5kZXggaXMgdXNlZCBpbiBpdHMgYm9keSBhcyBhIHNhbXBsZXIgYXJyYXkgaW5kZXgsCisv
LyBtYXJrIHRoZSBsb29wIGZvciB1bnJvbGwuCitjbGFzcyBWYWxpZGF0ZUxvb3BJbmRleEV4cHIg
OiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgVmFsaWRhdGVMb29wSW5k
ZXhFeHByKFRMb29wU3RhY2smIHN0YWNrKQorICAgICAgICA6IG1Vc2VzRmxvYXRMb29wSW5kZXgo
ZmFsc2UpLAorICAgICAgICAgIG1Vc2VzSW50TG9vcEluZGV4KGZhbHNlKSwKKyAgICAgICAgICBt
TG9vcFN0YWNrKHN0YWNrKSB7fQorCisgICAgYm9vbCB1c2VzRmxvYXRMb29wSW5kZXgoKSBjb25z
dCB7IHJldHVybiBtVXNlc0Zsb2F0TG9vcEluZGV4OyB9CisgICAgYm9vbCB1c2VzSW50TG9vcElu
ZGV4KCkgY29uc3QgeyByZXR1cm4gbVVzZXNJbnRMb29wSW5kZXg7IH0KKworICAgIHZpcnR1YWwg
dm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBzeW1ib2wpIHsKKyAgICAgICAgaWYgKElz
TG9vcEluZGV4KHN5bWJvbCwgbUxvb3BTdGFjaykpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3lt
Ym9sLT5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAg
ICAgICAgICAgICAgIG1Vc2VzRmxvYXRMb29wSW5kZXggPSB0cnVlOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgICAgICBtVXNl
c0ludExvb3BJbmRleCA9IHRydWU7CisgICAgICAgICAgICAgICAgTWFya0xvb3BGb3JVbnJvbGwo
c3ltYm9sLCBtTG9vcFN0YWNrKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgbVVzZXNGbG9hdExvb3BJ
bmRleDsKKyAgICBib29sIG1Vc2VzSW50TG9vcEluZGV4OworICAgIFRMb29wU3RhY2smIG1Mb29w
U3RhY2s7Cit9OworfSAgLy8gbmFtZXNwYWNlCisKK1ZhbGlkYXRlTGltaXRhdGlvbnM6OlZhbGlk
YXRlTGltaXRhdGlvbnMoU2hTaGFkZXJUeXBlIHNoYWRlclR5cGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRJbmZvU2lua0Jhc2UmIHNpbmspCisgICAgOiBtU2hh
ZGVyVHlwZShzaGFkZXJUeXBlKSwKKyAgICAgIG1TaW5rKHNpbmspLAorICAgICAgbU51bUVycm9y
cygwKQoreworfQorCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZpc2l0QmluYXJ5KFZpc2l0
LCBUSW50ZXJtQmluYXJ5KiBub2RlKQoreworICAgIC8vIENoZWNrIGlmIGxvb3AgaW5kZXggaXMg
bW9kaWZpZWQgaW4gdGhlIGxvb3AgYm9keS4KKyAgICB2YWxpZGF0ZU9wZXJhdGlvbihub2RlLCBu
b2RlLT5nZXRMZWZ0KCkpOworCisgICAgLy8gQ2hlY2sgaW5kZXhpbmcuCisgICAgc3dpdGNoIChu
b2RlLT5nZXRPcCgpKSB7CisgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0OgorICAgICAgICB2YWxp
ZGF0ZUluZGV4aW5nKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wSW5kZXhJ
bmRpcmVjdDoKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyAgICAgICAgLy8gTG9vcCB1bnJvbGxp
bmcgaXMgYSB3b3JrLWFyb3VuZCBmb3IgYSBNYWMgQ2cgY29tcGlsZXIgYnVnIHdoZXJlIGl0Cisg
ICAgICAgIC8vIGNyYXNoZXMgd2hlbiBhIHNhbXBsZXIgYXJyYXkncyBpbmRleCBpcyBhbHNvIHRo
ZSBsb29wIGluZGV4LgorICAgICAgICAvLyBPbmNlIEFwcGxlIGZpeGVzIHRoaXMgYnVnLCB3ZSBz
aG91bGQgcmVtb3ZlIHRoZSBjb2RlIGluIHRoaXMgQ0wuCisgICAgICAgIC8vIFNlZSBodHRwOi8v
Y29kZXJldmlldy5hcHBzcG90LmNvbS80MzMxMDQ4Ly4KKyAgICAgICAgaWYgKChub2RlLT5nZXRM
ZWZ0KCkgIT0gTlVMTCkgJiYgKG5vZGUtPmdldFJpZ2h0KCkgIT0gTlVMTCkgJiYKKyAgICAgICAg
ICAgIChub2RlLT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpKSkgeworICAgICAgICAgICAg
VEludGVybVN5bWJvbCogc3ltYm9sID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUo
KTsKKyAgICAgICAgICAgIGlmIChJc1NhbXBsZXIoc3ltYm9sLT5nZXRCYXNpY1R5cGUoKSkgJiYg
c3ltYm9sLT5pc0FycmF5KCkpIHsKKyAgICAgICAgICAgICAgICBWYWxpZGF0ZUxvb3BJbmRleEV4
cHIgdmFsaWRhdGUobUxvb3BTdGFjayk7CisgICAgICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQo
KS0+dHJhdmVyc2UoJnZhbGlkYXRlKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGUudXNl
c0Zsb2F0TG9vcEluZGV4KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJyb3Iobm9kZS0+Z2V0
TGluZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAic2FtcGxlciBhcnJheSBpbmRleCBp
cyBmbG9hdCBsb29wIGluZGV4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImZvciIpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmCisgICAg
ICAgIHZhbGlkYXRlSW5kZXhpbmcobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVs
dDogYnJlYWs7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFZhbGlkYXRlTGlt
aXRhdGlvbnM6OnZpc2l0VW5hcnkoVmlzaXQsIFRJbnRlcm1VbmFyeSogbm9kZSkKK3sKKyAgICAv
LyBDaGVjayBpZiBsb29wIGluZGV4IGlzIG1vZGlmaWVkIGluIHRoZSBsb29wIGJvZHkuCisgICAg
dmFsaWRhdGVPcGVyYXRpb24obm9kZSwgbm9kZS0+Z2V0T3BlcmFuZCgpKTsKKworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZpc2l0QWdncmVnYXRlKFZp
c2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQoreworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3Ao
KSkgeworICAgICAgY2FzZSBFT3BGdW5jdGlvbkNhbGw6CisgICAgICAgIHZhbGlkYXRlRnVuY3Rp
b25DYWxsKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBWYWxpZGF0ZUxpbWl0YXRp
b25zOjp2aXNpdExvb3AoVmlzaXQsIFRJbnRlcm1Mb29wKiBub2RlKQoreworICAgIGlmICghdmFs
aWRhdGVMb29wVHlwZShub2RlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVExvb3BJ
bmZvIGluZm87CisgICAgbWVtc2V0KCZpbmZvLCAwLCBzaXplb2YoVExvb3BJbmZvKSk7CisgICAg
aW5mby5sb29wID0gbm9kZTsKKyAgICBpZiAoIXZhbGlkYXRlRm9yTG9vcEhlYWRlcihub2RlLCAm
aW5mbykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFRJbnRlcm1Ob2RlKiBib2R5ID0g
bm9kZS0+Z2V0Qm9keSgpOworICAgIGlmIChib2R5ICE9IE5VTEwpIHsKKyAgICAgICAgbUxvb3BT
dGFjay5wdXNoX2JhY2soaW5mbyk7CisgICAgICAgIGJvZHktPnRyYXZlcnNlKHRoaXMpOworICAg
ICAgICBtTG9vcFN0YWNrLnBvcF9iYWNrKCk7CisgICAgfQorCisgICAgLy8gVGhlIGxvb3AgaXMg
ZnVsbHkgcHJvY2Vzc2VkIC0gbm8gbmVlZCB0byB2aXNpdCBjaGlsZHJlbi4KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgVmFsaWRhdGVMaW1pdGF0aW9uczo6ZXJyb3IoVFNvdXJjZUxvYyBs
b2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJlYXNvbiwg
Y29uc3QgY2hhciogdG9rZW4pCit7CisgICAgbVNpbmsucHJlZml4KEVQcmVmaXhFcnJvcik7Cisg
ICAgbVNpbmsubG9jYXRpb24obG9jKTsKKyAgICBtU2luayA8PCAiJyIgPDwgdG9rZW4gPDwgIicg
OiAiIDw8IHJlYXNvbiA8PCAiXG4iOworICAgICsrbU51bUVycm9yczsKK30KKworYm9vbCBWYWxp
ZGF0ZUxpbWl0YXRpb25zOjp3aXRoaW5Mb29wQm9keSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFt
TG9vcFN0YWNrLmVtcHR5KCk7Cit9CisKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6aXNMb29w
SW5kZXgoY29uc3QgVEludGVybVN5bWJvbCogc3ltYm9sKSBjb25zdAoreworICAgIHJldHVybiBJ
c0xvb3BJbmRleChzeW1ib2wsIG1Mb29wU3RhY2spOworfQorCitib29sIFZhbGlkYXRlTGltaXRh
dGlvbnM6OnZhbGlkYXRlTG9vcFR5cGUoVEludGVybUxvb3AqIG5vZGUpIHsKKyAgICBUTG9vcFR5
cGUgdHlwZSA9IG5vZGUtPmdldFR5cGUoKTsKKyAgICBpZiAodHlwZSA9PSBFTG9vcEZvcikKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBSZWplY3Qgd2hpbGUgYW5kIGRvLXdoaWxlIGxv
b3BzLgorICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwKKyAgICAgICAgICAiVGhpcyB0eXBlIG9m
IGxvb3AgaXMgbm90IGFsbG93ZWQiLAorICAgICAgICAgIHR5cGUgPT0gRUxvb3BXaGlsZSA/ICJ3
aGlsZSIgOiAiZG8iKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVmFsaWRhdGVMaW1p
dGF0aW9uczo6dmFsaWRhdGVGb3JMb29wSGVhZGVyKFRJbnRlcm1Mb29wKiBub2RlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVExvb3BJbmZvKiBpbmZv
KQoreworICAgIEFTU0VSVChub2RlLT5nZXRUeXBlKCkgPT0gRUxvb3BGb3IpOworCisgICAgLy8K
KyAgICAvLyBUaGUgZm9yIHN0YXRlbWVudCBoYXMgdGhlIGZvcm06CisgICAgLy8gICAgZm9yICgg
aW5pdC1kZWNsYXJhdGlvbiA7IGNvbmRpdGlvbiA7IGV4cHJlc3Npb24gKSBzdGF0ZW1lbnQKKyAg
ICAvLworICAgIGlmICghdmFsaWRhdGVGb3JMb29wSW5pdChub2RlLCBpbmZvKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICghdmFsaWRhdGVGb3JMb29wQ29uZChub2RlLCBpbmZvKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghdmFsaWRhdGVGb3JMb29wRXhwcihub2Rl
LCBpbmZvKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wSW5pdChUSW50ZXJtTG9v
cCogbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
TG9vcEluZm8qIGluZm8pCit7CisgICAgVEludGVybU5vZGUqIGluaXQgPSBub2RlLT5nZXRJbml0
KCk7CisgICAgaWYgKGluaXQgPT0gTlVMTCkgeworICAgICAgICBlcnJvcihub2RlLT5nZXRMaW5l
KCksICJNaXNzaW5nIGluaXQgZGVjbGFyYXRpb24iLCAiZm9yIik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIGluaXQtZGVjbGFyYXRpb24gaGFzIHRoZSBm
b3JtOgorICAgIC8vICAgICB0eXBlLXNwZWNpZmllciBpZGVudGlmaWVyID0gY29uc3RhbnQtZXhw
cmVzc2lvbgorICAgIC8vCisgICAgVEludGVybUFnZ3JlZ2F0ZSogZGVjbCA9IGluaXQtPmdldEFz
QWdncmVnYXRlKCk7CisgICAgaWYgKChkZWNsID09IE5VTEwpIHx8IChkZWNsLT5nZXRPcCgpICE9
IEVPcERlY2xhcmF0aW9uKSkgeworICAgICAgICBlcnJvcihpbml0LT5nZXRMaW5lKCksICJJbnZh
bGlkIGluaXQgZGVjbGFyYXRpb24iLCAiZm9yIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgLy8gVG8ga2VlcCB0aGluZ3Mgc2ltcGxlIGRvIG5vdCBhbGxvdyBkZWNsYXJhdGlv
biBsaXN0LgorICAgIFRJbnRlcm1TZXF1ZW5jZSYgZGVjbFNlcSA9IGRlY2wtPmdldFNlcXVlbmNl
KCk7CisgICAgaWYgKGRlY2xTZXEuc2l6ZSgpICE9IDEpIHsKKyAgICAgICAgZXJyb3IoZGVjbC0+
Z2V0TGluZSgpLCAiSW52YWxpZCBpbml0IGRlY2xhcmF0aW9uIiwgImZvciIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIFRJbnRlcm1CaW5hcnkqIGRlY2xJbml0ID0gZGVjbFNl
cVswXS0+Z2V0QXNCaW5hcnlOb2RlKCk7CisgICAgaWYgKChkZWNsSW5pdCA9PSBOVUxMKSB8fCAo
ZGVjbEluaXQtPmdldE9wKCkgIT0gRU9wSW5pdGlhbGl6ZSkpIHsKKyAgICAgICAgZXJyb3IoZGVj
bC0+Z2V0TGluZSgpLCAiSW52YWxpZCBpbml0IGRlY2xhcmF0aW9uIiwgImZvciIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGRlY2xJ
bml0LT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOworICAgIGlmIChzeW1ib2wgPT0gTlVM
TCkgeworICAgICAgICBlcnJvcihkZWNsSW5pdC0+Z2V0TGluZSgpLCAiSW52YWxpZCBpbml0IGRl
Y2xhcmF0aW9uIiwgImZvciIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8v
IFRoZSBsb29wIGluZGV4IGhhcyB0eXBlIGludCBvciBmbG9hdC4KKyAgICBUQmFzaWNUeXBlIHR5
cGUgPSBzeW1ib2wtPmdldEJhc2ljVHlwZSgpOworICAgIGlmICgodHlwZSAhPSBFYnRJbnQpICYm
ICh0eXBlICE9IEVidEZsb2F0KSkgeworICAgICAgICBlcnJvcihzeW1ib2wtPmdldExpbmUoKSwK
KyAgICAgICAgICAgICAgIkludmFsaWQgdHlwZSBmb3IgbG9vcCBpbmRleCIsIGdldEJhc2ljU3Ry
aW5nKHR5cGUpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBUaGUgbG9v
cCBpbmRleCBpcyBpbml0aWFsaXplZCB3aXRoIGNvbnN0YW50IGV4cHJlc3Npb24uCisgICAgaWYg
KCFpc0NvbnN0RXhwcihkZWNsSW5pdC0+Z2V0UmlnaHQoKSkpIHsKKyAgICAgICAgZXJyb3IoZGVj
bEluaXQtPmdldExpbmUoKSwKKyAgICAgICAgICAgICAgIkxvb3AgaW5kZXggY2Fubm90IGJlIGlu
aXRpYWxpemVkIHdpdGggbm9uLWNvbnN0YW50IGV4cHJlc3Npb24iLAorICAgICAgICAgICAgICBz
eW1ib2wtPmdldFN5bWJvbCgpLmNfc3RyKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaW5mby0+aW5kZXguaWQgPSBzeW1ib2wtPmdldElkKCk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wQ29uZChU
SW50ZXJtTG9vcCogbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUTG9vcEluZm8qIGluZm8pCit7CisgICAgVEludGVybU5vZGUqIGNvbmQgPSBub2Rl
LT5nZXRDb25kaXRpb24oKTsKKyAgICBpZiAoY29uZCA9PSBOVUxMKSB7CisgICAgICAgIGVycm9y
KG5vZGUtPmdldExpbmUoKSwgIk1pc3NpbmcgY29uZGl0aW9uIiwgImZvciIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8vCisgICAgLy8gY29uZGl0aW9uIGhhcyB0aGUgZm9y
bToKKyAgICAvLyAgICAgbG9vcF9pbmRleCByZWxhdGlvbmFsX29wZXJhdG9yIGNvbnN0YW50X2V4
cHJlc3Npb24KKyAgICAvLworICAgIFRJbnRlcm1CaW5hcnkqIGJpbk9wID0gY29uZC0+Z2V0QXNC
aW5hcnlOb2RlKCk7CisgICAgaWYgKGJpbk9wID09IE5VTEwpIHsKKyAgICAgICAgZXJyb3Iobm9k
ZS0+Z2V0TGluZSgpLCAiSW52YWxpZCBjb25kaXRpb24iLCAiZm9yIik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgLy8gTG9vcCBpbmRleCBzaG91bGQgYmUgdG8gdGhlIGxlZnQg
b2YgcmVsYXRpb25hbCBvcGVyYXRvci4KKyAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBiaW5P
cC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICBpZiAoc3ltYm9sID09IE5VTEwp
IHsKKyAgICAgICAgZXJyb3IoYmluT3AtPmdldExpbmUoKSwgIkludmFsaWQgY29uZGl0aW9uIiwg
ImZvciIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChzeW1ib2wtPmdl
dElkKCkgIT0gaW5mby0+aW5kZXguaWQpIHsKKyAgICAgICAgZXJyb3Ioc3ltYm9sLT5nZXRMaW5l
KCksCisgICAgICAgICAgICAgICJFeHBlY3RlZCBsb29wIGluZGV4Iiwgc3ltYm9sLT5nZXRTeW1i
b2woKS5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBSZWxh
dGlvbmFsIG9wZXJhdG9yIGlzIG9uZSBvZjogPiA+PSA8IDw9ID09IG9yICE9LgorICAgIHN3aXRj
aCAoYmluT3AtPmdldE9wKCkpIHsKKyAgICAgIGNhc2UgRU9wRXF1YWw6CisgICAgICBjYXNlIEVP
cE5vdEVxdWFsOgorICAgICAgY2FzZSBFT3BMZXNzVGhhbjoKKyAgICAgIGNhc2UgRU9wR3JlYXRl
clRoYW46CisgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6CisgICAgICBjYXNlIEVPcEdyZWF0
ZXJUaGFuRXF1YWw6CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgZXJy
b3IoYmluT3AtPmdldExpbmUoKSwKKyAgICAgICAgICAgICAgIkludmFsaWQgcmVsYXRpb25hbCBv
cGVyYXRvciIsCisgICAgICAgICAgICAgIGdldE9wZXJhdG9yU3RyaW5nKGJpbk9wLT5nZXRPcCgp
KSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvLyBMb29wIGluZGV4IG11c3QgYmUgY29t
cGFyZWQgd2l0aCBhIGNvbnN0YW50LgorICAgIGlmICghaXNDb25zdEV4cHIoYmluT3AtPmdldFJp
Z2h0KCkpKSB7CisgICAgICAgIGVycm9yKGJpbk9wLT5nZXRMaW5lKCksCisgICAgICAgICAgICAg
ICJMb29wIGluZGV4IGNhbm5vdCBiZSBjb21wYXJlZCB3aXRoIG5vbi1jb25zdGFudCBleHByZXNz
aW9uIiwKKyAgICAgICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFZh
bGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcEV4cHIoVEludGVybUxvb3AqIG5vZGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVExvb3BJbmZv
KiBpbmZvKQoreworICAgIFRJbnRlcm1Ob2RlKiBleHByID0gbm9kZS0+Z2V0RXhwcmVzc2lvbigp
OworICAgIGlmIChleHByID09IE5VTEwpIHsKKyAgICAgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgp
LCAiTWlzc2luZyBleHByZXNzaW9uIiwgImZvciIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgLy8gZm9yIGV4cHJlc3Npb24gaGFzIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZv
cm1zOgorICAgIC8vICAgICBsb29wX2luZGV4KysKKyAgICAvLyAgICAgbG9vcF9pbmRleC0tCisg
ICAgLy8gICAgIGxvb3BfaW5kZXggKz0gY29uc3RhbnRfZXhwcmVzc2lvbgorICAgIC8vICAgICBs
b29wX2luZGV4IC09IGNvbnN0YW50X2V4cHJlc3Npb24KKyAgICAvLyAgICAgKytsb29wX2luZGV4
CisgICAgLy8gICAgIC0tbG9vcF9pbmRleAorICAgIC8vIFRoZSBsYXN0IHR3byBmb3JtcyBhcmUg
bm90IHNwZWNpZmllZCBpbiB0aGUgc3BlYywgYnV0IEkgYW0gYXNzdW1pbmcKKyAgICAvLyBpdHMg
YW4gb3ZlcnNpZ2h0LgorICAgIFRJbnRlcm1VbmFyeSogdW5PcCA9IGV4cHItPmdldEFzVW5hcnlO
b2RlKCk7CisgICAgVEludGVybUJpbmFyeSogYmluT3AgPSB1bk9wID8gTlVMTCA6IGV4cHItPmdl
dEFzQmluYXJ5Tm9kZSgpOworCisgICAgVE9wZXJhdG9yIG9wID0gRU9wTnVsbDsKKyAgICBUSW50
ZXJtU3ltYm9sKiBzeW1ib2wgPSBOVUxMOworICAgIGlmICh1bk9wICE9IE5VTEwpIHsKKyAgICAg
ICAgb3AgPSB1bk9wLT5nZXRPcCgpOworICAgICAgICBzeW1ib2wgPSB1bk9wLT5nZXRPcGVyYW5k
KCktPmdldEFzU3ltYm9sTm9kZSgpOworICAgIH0gZWxzZSBpZiAoYmluT3AgIT0gTlVMTCkgewor
ICAgICAgICBvcCA9IGJpbk9wLT5nZXRPcCgpOworICAgICAgICBzeW1ib2wgPSBiaW5PcC0+Z2V0
TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICB9CisKKyAgICAvLyBUaGUgb3BlcmFuZCBt
dXN0IGJlIGxvb3AgaW5kZXguCisgICAgaWYgKHN5bWJvbCA9PSBOVUxMKSB7CisgICAgICAgIGVy
cm9yKGV4cHItPmdldExpbmUoKSwgIkludmFsaWQgZXhwcmVzc2lvbiIsICJmb3IiKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoc3ltYm9sLT5nZXRJZCgpICE9IGluZm8t
PmluZGV4LmlkKSB7CisgICAgICAgIGVycm9yKHN5bWJvbC0+Z2V0TGluZSgpLAorICAgICAgICAg
ICAgICAiRXhwZWN0ZWQgbG9vcCBpbmRleCIsIHN5bWJvbC0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBUaGUgb3BlcmF0b3IgaXMg
b25lIG9mOiArKyAtLSArPSAtPS4KKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9w
UG9zdEluY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OgorICAgICAgICBj
YXNlIEVPcFByZUluY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6CisgICAg
ICAgICAgICBBU1NFUlQoKHVuT3AgIT0gTlVMTCkgJiYgKGJpbk9wID09IE5VTEwpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjoKKyAgICAgICAgY2FzZSBF
T3BTdWJBc3NpZ246CisgICAgICAgICAgICBBU1NFUlQoKHVuT3AgPT0gTlVMTCkgJiYgKGJpbk9w
ICE9IE5VTEwpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgZXJyb3IoZXhwci0+Z2V0TGluZSgpLCAiSW52YWxpZCBvcGVyYXRvciIsIGdldE9wZXJh
dG9yU3RyaW5nKG9wKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
Ly8gTG9vcCBpbmRleCBtdXN0IGJlIGluY3JlbWVudGVkL2RlY3JlbWVudGVkIHdpdGggYSBjb25z
dGFudC4KKyAgICBpZiAoYmluT3AgIT0gTlVMTCkgeworICAgICAgICBpZiAoIWlzQ29uc3RFeHBy
KGJpbk9wLT5nZXRSaWdodCgpKSkgeworICAgICAgICAgICAgZXJyb3IoYmluT3AtPmdldExpbmUo
KSwKKyAgICAgICAgICAgICAgICAgICJMb29wIGluZGV4IGNhbm5vdCBiZSBtb2RpZmllZCBieSBu
b24tY29uc3RhbnQgZXhwcmVzc2lvbiIsCisgICAgICAgICAgICAgICAgICBzeW1ib2wtPmdldFN5
bWJvbCgpLmNfc3RyKCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6
dmFsaWRhdGVGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK3sKKyAgICBBU1NF
UlQobm9kZS0+Z2V0T3AoKSA9PSBFT3BGdW5jdGlvbkNhbGwpOworCisgICAgLy8gSWYgbm90IHdp
dGhpbiBsb29wIGJvZHksIHRoZXJlIGlzIG5vdGhpbmcgdG8gY2hlY2suCisgICAgaWYgKCF3aXRo
aW5Mb29wQm9keSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIExpc3Qgb2YgcGFy
YW0gaW5kaWNlcyBmb3Igd2hpY2ggbG9vcCBpbmRpY2VzIGFyZSB1c2VkIGFzIGFyZ3VtZW50Lgor
ICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8c2l6ZV90PiBQYXJhbUluZGV4OworICAgIFBhcmFtSW5k
ZXggcEluZGV4OworICAgIFRJbnRlcm1TZXF1ZW5jZSYgcGFyYW1zID0gbm9kZS0+Z2V0U2VxdWVu
Y2UoKTsKKyAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6c2l6ZV90eXBlIGkgPSAwOyBpIDwgcGFy
YW1zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IHBhcmFt
c1tpXS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgICAgIGlmIChzeW1ib2wgJiYgaXNMb29wSW5k
ZXgoc3ltYm9sKSkKKyAgICAgICAgICAgIHBJbmRleC5wdXNoX2JhY2soaSk7CisgICAgfQorICAg
IC8vIElmIG5vbmUgb2YgdGhlIGxvb3AgaW5kaWNlcyBhcmUgdXNlZCBhcyBhcmd1bWVudHMsCisg
ICAgLy8gdGhlcmUgaXMgbm90aGluZyB0byBjaGVjay4KKyAgICBpZiAocEluZGV4LmVtcHR5KCkp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgYm9vbCB2YWxpZCA9IHRydWU7CisgICAgVFN5
bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSA9IEdldEdsb2JhbFBhcnNlQ29udGV4dCgpLT5zeW1ib2xU
YWJsZTsKKyAgICBUU3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKG5vZGUtPmdldE5h
bWUoKSk7CisgICAgQVNTRVJUKHN5bWJvbCAmJiBzeW1ib2wtPmlzRnVuY3Rpb24oKSk7CisgICAg
VEZ1bmN0aW9uKiBmdW5jdGlvbiA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KHN5bWJvbCk7Cisg
ICAgZm9yIChQYXJhbUluZGV4Ojpjb25zdF9pdGVyYXRvciBpID0gcEluZGV4LmJlZ2luKCk7Cisg
ICAgICAgICBpICE9IHBJbmRleC5lbmQoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IFRQYXJhbWV0
ZXImIHBhcmFtID0gZnVuY3Rpb24tPmdldFBhcmFtKCppKTsKKyAgICAgICAgVFF1YWxpZmllciBx
dWFsID0gcGFyYW0udHlwZS0+Z2V0UXVhbGlmaWVyKCk7CisgICAgICAgIGlmICgocXVhbCA9PSBF
dnFPdXQpIHx8IChxdWFsID09IEV2cUluT3V0KSkgeworICAgICAgICAgICAgZXJyb3IocGFyYW1z
WyppXS0+Z2V0TGluZSgpLAorICAgICAgICAgICAgICAgICAgIkxvb3AgaW5kZXggY2Fubm90IGJl
IHVzZWQgYXMgYXJndW1lbnQgdG8gYSBmdW5jdGlvbiBvdXQgb3IgaW5vdXQgcGFyYW1ldGVyIiwK
KyAgICAgICAgICAgICAgICAgIHBhcmFtc1sqaV0tPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1i
b2woKS5jX3N0cigpKTsKKyAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gdmFsaWQ7Cit9CisKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6
dmFsaWRhdGVPcGVyYXRpb24oVEludGVybU9wZXJhdG9yKiBub2RlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSogb3BlcmFuZCkgeworICAg
IC8vIENoZWNrIGlmIGxvb3AgaW5kZXggaXMgbW9kaWZpZWQgaW4gdGhlIGxvb3AgYm9keS4KKyAg
ICBpZiAoIXdpdGhpbkxvb3BCb2R5KCkgfHwgIW5vZGUtPmlzQXNzaWdubWVudCgpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIGNvbnN0IFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IG9wZXJh
bmQtPmdldEFzU3ltYm9sTm9kZSgpOworICAgIGlmIChzeW1ib2wgJiYgaXNMb29wSW5kZXgoc3lt
Ym9sKSkgeworICAgICAgICBlcnJvcihub2RlLT5nZXRMaW5lKCksCisgICAgICAgICAgICAgICJM
b29wIGluZGV4IGNhbm5vdCBiZSBzdGF0aWNhbGx5IGFzc2lnbmVkIHRvIHdpdGhpbiB0aGUgYm9k
eSBvZiB0aGUgbG9vcCIsCisgICAgICAgICAgICAgIHN5bWJvbC0+Z2V0U3ltYm9sKCkuY19zdHIo
KSk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFZhbGlkYXRlTGltaXRhdGlv
bnM6OmlzQ29uc3RFeHByKFRJbnRlcm1Ob2RlKiBub2RlKQoreworICAgIEFTU0VSVChub2RlICE9
IE5VTEwpOworICAgIHJldHVybiBub2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKSAhPSBOVUxMOwor
fQorCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OmlzQ29uc3RJbmRleEV4cHIoVEludGVybU5v
ZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUgIT0gTlVMTCk7CisKKyAgICBWYWxpZGF0ZUNv
bnN0SW5kZXhFeHByIHZhbGlkYXRlKG1Mb29wU3RhY2spOworICAgIG5vZGUtPnRyYXZlcnNlKCZ2
YWxpZGF0ZSk7CisgICAgcmV0dXJuIHZhbGlkYXRlLmlzVmFsaWQoKTsKK30KKworYm9vbCBWYWxp
ZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUluZGV4aW5nKFRJbnRlcm1CaW5hcnkqIG5vZGUpCit7
CisgICAgQVNTRVJUKChub2RlLT5nZXRPcCgpID09IEVPcEluZGV4RGlyZWN0KSB8fAorICAgICAg
ICAgICAobm9kZS0+Z2V0T3AoKSA9PSBFT3BJbmRleEluZGlyZWN0KSk7CisKKyAgICBib29sIHZh
bGlkID0gdHJ1ZTsKKyAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gbm9kZS0+Z2V0UmlnaHQoKTsK
KyAgICAvLyBUaGUgaW5kZXggZXhwcmVzc2lvbiBtdXN0IGhhdmUgaW50ZWdyYWwgdHlwZS4KKyAg
ICBpZiAoIWluZGV4LT5pc1NjYWxhcigpIHx8IChpbmRleC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0
SW50KSkgeworICAgICAgICBlcnJvcihpbmRleC0+Z2V0TGluZSgpLAorICAgICAgICAgICAgICAi
SW5kZXggZXhwcmVzc2lvbiBtdXN0IGhhdmUgaW50ZWdyYWwgdHlwZSIsCisgICAgICAgICAgICAg
IGluZGV4LT5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOworICAgICAgICB2YWxpZCA9IGZh
bHNlOworICAgIH0KKyAgICAvLyBUaGUgaW5kZXggZXhwZXNzaW9uIG11c3QgYmUgYSBjb25zdGFu
dC1pbmRleC1leHByZXNzaW9uIHVubGVzcworICAgIC8vIHRoZSBvcGVyYW5kIGlzIGEgdW5pZm9y
bSBpbiBhIHZlcnRleCBzaGFkZXIuCisgICAgVEludGVybVR5cGVkKiBvcGVyYW5kID0gbm9kZS0+
Z2V0TGVmdCgpOworICAgIGJvb2wgc2tpcCA9IChtU2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hB
REVSKSAmJgorICAgICAgICAgICAgICAgIChvcGVyYW5kLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFV
bmlmb3JtKTsKKyAgICBpZiAoIXNraXAgJiYgIWlzQ29uc3RJbmRleEV4cHIoaW5kZXgpKSB7Cisg
ICAgICAgIGVycm9yKGluZGV4LT5nZXRMaW5lKCksICJJbmRleCBleHByZXNzaW9uIG11c3QgYmUg
Y29uc3RhbnQiLCAiW10iKTsKKyAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICB9CisgICAgcmV0
dXJuIHZhbGlkOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUxpbWl0YXRpb25zLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uODgzOWRkOGI4YWYzNjU2ZDEzMzI0MWQwMTYxNzg4Mzc5ODE4MTFmYgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuaApAQCAtMCwwICsxLDU5IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisKK2NsYXNzIFRJbmZvU2lua0Jhc2U7CisKK3N0
cnVjdCBUTG9vcEluZm8geworICAgIHN0cnVjdCBUSW5kZXggeworICAgICAgICBpbnQgaWQ7ICAv
LyBzeW1ib2wgaWQuCisgICAgfSBpbmRleDsKKyAgICBUSW50ZXJtTG9vcCogbG9vcDsKK307Cit0
eXBlZGVmIFRWZWN0b3I8VExvb3BJbmZvPiBUTG9vcFN0YWNrOworCisvLyBUcmF2ZXJzZXMgaW50
ZXJtZWRpYXRlIHRyZWUgdG8gZW5zdXJlIHRoYXQgdGhlIHNoYWRlciBkb2VzIG5vdCBleGNlZWQg
dGhlCisvLyBtaW5pbXVtIGZ1bmN0aW9uYWxpdHkgbWFuZGF0ZWQgaW4gR0xTTCAxLjAgc3BlYywg
QXBwZW5kaXggQS4KK2NsYXNzIFZhbGlkYXRlTGltaXRhdGlvbnMgOiBwdWJsaWMgVEludGVybVRy
YXZlcnNlciB7CitwdWJsaWM6CisgICAgVmFsaWRhdGVMaW1pdGF0aW9ucyhTaFNoYWRlclR5cGUg
c2hhZGVyVHlwZSwgVEluZm9TaW5rQmFzZSYgc2luayk7CisKKyAgICBpbnQgbnVtRXJyb3JzKCkg
Y29uc3QgeyByZXR1cm4gbU51bUVycm9yczsgfQorCisgICAgdmlydHVhbCBib29sIHZpc2l0Qmlu
YXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7CisgICAgdmlydHVhbCBib29sIHZpc2l0VW5hcnko
VmlzaXQsIFRJbnRlcm1VbmFyeSopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShW
aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdExvb3AoVmlz
aXQsIFRJbnRlcm1Mb29wKik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBlcnJvcihUU291cmNlTG9j
IGxvYywgY29uc3QgY2hhciAqcmVhc29uLCBjb25zdCBjaGFyKiB0b2tlbik7CisKKyAgICBib29s
IHdpdGhpbkxvb3BCb2R5KCkgY29uc3Q7CisgICAgYm9vbCBpc0xvb3BJbmRleChjb25zdCBUSW50
ZXJtU3ltYm9sKiBzeW1ib2wpIGNvbnN0OworICAgIGJvb2wgdmFsaWRhdGVMb29wVHlwZShUSW50
ZXJtTG9vcCogbm9kZSk7CisgICAgYm9vbCB2YWxpZGF0ZUZvckxvb3BIZWFkZXIoVEludGVybUxv
b3AqIG5vZGUsIFRMb29wSW5mbyogaW5mbyk7CisgICAgYm9vbCB2YWxpZGF0ZUZvckxvb3BJbml0
KFRJbnRlcm1Mb29wKiBub2RlLCBUTG9vcEluZm8qIGluZm8pOworICAgIGJvb2wgdmFsaWRhdGVG
b3JMb29wQ29uZChUSW50ZXJtTG9vcCogbm9kZSwgVExvb3BJbmZvKiBpbmZvKTsKKyAgICBib29s
IHZhbGlkYXRlRm9yTG9vcEV4cHIoVEludGVybUxvb3AqIG5vZGUsIFRMb29wSW5mbyogaW5mbyk7
CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIG5vbmUgb2YgdGhlIGxvb3AgaW5kaWNlcyBpcyB1c2Vk
IGFzIHRoZSBhcmd1bWVudCB0bworICAgIC8vIHRoZSBnaXZlbiBmdW5jdGlvbiBvdXQgb3IgaW5v
dXQgcGFyYW1ldGVyLgorICAgIGJvb2wgdmFsaWRhdGVGdW5jdGlvbkNhbGwoVEludGVybUFnZ3Jl
Z2F0ZSogbm9kZSk7CisgICAgYm9vbCB2YWxpZGF0ZU9wZXJhdGlvbihUSW50ZXJtT3BlcmF0b3Iq
IG5vZGUsIFRJbnRlcm1Ob2RlKiBvcGVyYW5kKTsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBp
bmRleGluZyBkb2VzIG5vdCBleGNlZWQgdGhlIG1pbmltdW0gZnVuY3Rpb25hbGl0eQorICAgIC8v
IG1hbmRhdGVkIGluIEdMU0wgMS4wIHNwZWMsIEFwcGVuZGl4IEEsIFNlY3Rpb24gNS4KKyAgICBi
b29sIGlzQ29uc3RFeHByKFRJbnRlcm1Ob2RlKiBub2RlKTsKKyAgICBib29sIGlzQ29uc3RJbmRl
eEV4cHIoVEludGVybU5vZGUqIG5vZGUpOworICAgIGJvb2wgdmFsaWRhdGVJbmRleGluZyhUSW50
ZXJtQmluYXJ5KiBub2RlKTsKKworICAgIFNoU2hhZGVyVHlwZSBtU2hhZGVyVHlwZTsKKyAgICBU
SW5mb1NpbmtCYXNlJiBtU2luazsKKyAgICBpbnQgbU51bUVycm9yczsKKyAgICBUTG9vcFN0YWNr
IG1Mb29wU3RhY2s7Cit9OworCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZUluZm8uY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVJbmZvLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lZjg4OGFmZjExMDQ3MzNkYTM5ZTYzZDRmMTgxYTY2YjQxOGE1NWRiCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VmFyaWFibGVJbmZvLmNwcApAQCAtMCwwICsxLDMxMiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVJbmZvLmgiCisKK25hbWVzcGFj
ZSB7CisKK1RTdHJpbmcgYXJyYXlCcmFja2V0cyhpbnQgaW5kZXgpCit7CisgICAgVFN0cmluZ1N0
cmVhbSBzdHJlYW07CisgICAgc3RyZWFtIDw8ICJbIiA8PCBpbmRleCA8PCAiXSI7CisgICAgcmV0
dXJuIHN0cmVhbS5zdHIoKTsKK30KKworLy8gUmV0dXJucyB0aGUgZGF0YSB0eXBlIGZvciBhbiBh
dHRyaWJ1dGUsIHVuaWZvcm0sIG9yIHZhcnlpbmcuCitTaERhdGFUeXBlIGdldFZhcmlhYmxlRGF0
YVR5cGUoY29uc3QgVFR5cGUmIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlLmdldEJhc2ljVHlw
ZSgpKSB7CisgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgIGlmICh0eXBlLmlzTWF0cml4
KCkpIHsKKyAgICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldE5vbWluYWxTaXplKCkpIHsKKyAg
ICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBTSF9GTE9BVF9NQVQyOworICAgICAgICAgICAg
ICAgIGNhc2UgMzogcmV0dXJuIFNIX0ZMT0FUX01BVDM7CisgICAgICAgICAgICAgICAgY2FzZSA0
OiByZXR1cm4gU0hfRkxPQVRfTUFUNDsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIGlmICh0eXBlLmlzVmVj
dG9yKCkpIHsKKyAgICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldE5vbWluYWxTaXplKCkpIHsK
KyAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBTSF9GTE9BVF9WRUMyOworICAgICAgICAg
ICAgICAgIGNhc2UgMzogcmV0dXJuIFNIX0ZMT0FUX1ZFQzM7CisgICAgICAgICAgICAgICAgY2Fz
ZSA0OiByZXR1cm4gU0hfRkxPQVRfVkVDNDsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgcmV0dXJuIFNIX0ZMT0FUOworICAgICAgICAgIH0KKyAgICAgIGNhc2UgRWJ0SW50Ogor
ICAgICAgICAgIGlmICh0eXBlLmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUuaXNWZWN0b3IoKSkgeworICAgICAgICAg
ICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkgeworICAgICAgICAgICAgICAgIGNh
c2UgMjogcmV0dXJuIFNIX0lOVF9WRUMyOworICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJu
IFNIX0lOVF9WRUMzOworICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFNIX0lOVF9WRUM0
OworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAg
IH0KKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICByZXR1cm4gU0hfSU5UOworICAg
ICAgICAgIH0KKyAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICBpZiAodHlwZS5pc01hdHJp
eCgpKSB7CisgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgfSBlbHNlIGlm
ICh0eXBlLmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldE5vbWlu
YWxTaXplKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBTSF9CT09MX1ZFQzI7
CisgICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gU0hfQk9PTF9WRUMzOworICAgICAgICAg
ICAgICAgIGNhc2UgNDogcmV0dXJuIFNIX0JPT0xfVkVDNDsKKyAgICAgICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgcmV0dXJuIFNIX0JPT0w7CisgICAgICAgICAgfQorICAgICAgY2FzZSBF
YnRTYW1wbGVyMkQ6IHJldHVybiBTSF9TQU1QTEVSXzJEOworICAgICAgY2FzZSBFYnRTYW1wbGVy
Q3ViZTogcmV0dXJuIFNIX1NBTVBMRVJfQ1VCRTsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVy
bmFsT0VTOiByZXR1cm4gU0hfU0FNUExFUl9FWFRFUk5BTF9PRVM7CisgICAgICBjYXNlIEVidFNh
bXBsZXIyRFJlY3Q6IHJldHVybiBTSF9TQU1QTEVSXzJEX1JFQ1RfQVJCOworICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgcmV0dXJuIFNIX05PTkU7Cit9CisKK3ZvaWQg
Z2V0QnVpbHRJblZhcmlhYmxlSW5mbyhjb25zdCBUVHlwZSYgdHlwZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRTdHJpbmcmIG1hcHBlZE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIGluZm9MaXN0KTsKK3ZvaWQgZ2V0VXNlckRlZmluZWRW
YXJpYWJsZUluZm8oY29uc3QgVFR5cGUmIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRTdHJpbmcmIG1hcHBlZE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFRWYXJpYWJsZUluZm9MaXN0JiBpbmZvTGlzdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24pOworCisvLyBSZXR1cm5z
IGluZm8gZm9yIGFuIGF0dHJpYnV0ZSwgdW5pZm9ybSwgb3IgdmFyeWluZy4KK3ZvaWQgZ2V0VmFy
aWFibGVJbmZvKGNvbnN0IFRUeXBlJiB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VFN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcmIG1hcHBl
ZE5hbWUsCisgICAgICAgICAgICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYgaW5mb0xpc3Qs
CisgICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbikKK3sK
KyAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKKyAgICAgICAgaWYg
KHR5cGUuaXNBcnJheSgpKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGUu
Z2V0QXJyYXlTaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIFRTdHJpbmcgbG5hbWUgPSBu
YW1lICsgYXJyYXlCcmFja2V0cyhpKTsKKyAgICAgICAgICAgICAgICBUU3RyaW5nIGxtYXBwZWRO
YW1lID0gbWFwcGVkTmFtZSArIGFycmF5QnJhY2tldHMoaSk7CisgICAgICAgICAgICAgICAgZ2V0
VXNlckRlZmluZWRWYXJpYWJsZUluZm8odHlwZSwgbG5hbWUsIGxtYXBwZWROYW1lLCBpbmZvTGlz
dCwgaGFzaEZ1bmN0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGdldFVzZXJEZWZpbmVkVmFyaWFibGVJbmZvKHR5cGUsIG5hbWUsIG1hcHBlZE5hbWUs
IGluZm9MaXN0LCBoYXNoRnVuY3Rpb24pOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZ2V0QnVpbHRJblZhcmlhYmxlSW5mbyh0eXBlLCBuYW1lLCBtYXBwZWROYW1lLCBpbmZvTGlz
dCk7CisgICAgfQorfQorCit2b2lkIGdldEJ1aWx0SW5WYXJpYWJsZUluZm8oY29uc3QgVFR5cGUm
IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyYgbmFtZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nJiBtYXBwZWROYW1lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9MaXN0JiBpbmZvTGlzdCkK
K3sKKyAgICBBU1NFUlQodHlwZS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRTdHJ1Y3QpOworCisgICAg
VFZhcmlhYmxlSW5mbyB2YXJJbmZvOworICAgIGlmICh0eXBlLmlzQXJyYXkoKSkgeworICAgICAg
ICB2YXJJbmZvLm5hbWUgPSAobmFtZSArICJbMF0iKS5jX3N0cigpOworICAgICAgICB2YXJJbmZv
Lm1hcHBlZE5hbWUgPSAobWFwcGVkTmFtZSArICJbMF0iKS5jX3N0cigpOworICAgICAgICB2YXJJ
bmZvLnNpemUgPSB0eXBlLmdldEFycmF5U2l6ZSgpOworICAgICAgICB2YXJJbmZvLmlzQXJyYXkg
PSB0cnVlOworICAgIH0gZWxzZSB7CisgICAgICAgIHZhckluZm8ubmFtZSA9IG5hbWUuY19zdHIo
KTsKKyAgICAgICAgdmFySW5mby5tYXBwZWROYW1lID0gbWFwcGVkTmFtZS5jX3N0cigpOworICAg
ICAgICB2YXJJbmZvLnNpemUgPSAxOworICAgICAgICB2YXJJbmZvLmlzQXJyYXkgPSBmYWxzZTsK
KyAgICB9CisgICAgdmFySW5mby5wcmVjaXNpb24gPSB0eXBlLmdldFByZWNpc2lvbigpOworICAg
IHZhckluZm8udHlwZSA9IGdldFZhcmlhYmxlRGF0YVR5cGUodHlwZSk7CisgICAgaW5mb0xpc3Qu
cHVzaF9iYWNrKHZhckluZm8pOworfQorCit2b2lkIGdldFVzZXJEZWZpbmVkVmFyaWFibGVJbmZv
KGNvbnN0IFRUeXBlJiB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBUU3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
U3RyaW5nJiBtYXBwZWROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFy
aWFibGVJbmZvTGlzdCYgaW5mb0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uKQoreworICAgIEFTU0VSVCh0eXBlLmdldEJh
c2ljVHlwZSgpID09IEVidFN0cnVjdCk7CisKKyAgICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMg
PSB0eXBlLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGZpZWxkcy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBUVHlwZSYgZmllbGRUeXBlID0g
KihmaWVsZHNbaV0tPnR5cGUoKSk7CisgICAgICAgIGNvbnN0IFRTdHJpbmcmIGZpZWxkTmFtZSA9
IGZpZWxkc1tpXS0+bmFtZSgpOworICAgICAgICBnZXRWYXJpYWJsZUluZm8oZmllbGRUeXBlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArICIuIiArIGZpZWxkTmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1hcHBlZE5hbWUgKyAiLiIgKyBUSW50ZXJtVHJhdmVyc2VyOjpoYXNo
KGZpZWxkTmFtZSwgaGFzaEZ1bmN0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9M
aXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgaGFzaEZ1bmN0aW9uKTsKKyAgICB9Cit9CisK
K1RWYXJpYWJsZUluZm8qIGZpbmRWYXJpYWJsZShjb25zdCBUVHlwZSYgdHlwZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9MaXN0JiBpbmZvTGlzdCkKK3sKKyAgICAvLyBUT0RP
KHptbyk6IG9wdGltaXplIHRoaXMgZnVuY3Rpb24uCisgICAgVFN0cmluZyBteU5hbWUgPSBuYW1l
OworICAgIGlmICh0eXBlLmlzQXJyYXkoKSkKKyAgICAgICAgbXlOYW1lICs9ICJbMF0iOworICAg
IGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCBpbmZvTGlzdC5zaXplKCk7ICsraWkpCisgICAgewor
ICAgICAgICBpZiAoaW5mb0xpc3RbaWldLm5hbWUuY19zdHIoKSA9PSBteU5hbWUpCisgICAgICAg
ICAgICByZXR1cm4gJihpbmZvTGlzdFtpaV0pOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30K
KworfSAgLy8gbmFtZXNwYWNlIGFub255bW91cworCitUVmFyaWFibGVJbmZvOjpUVmFyaWFibGVJ
bmZvKCkKKyAgICA6IHR5cGUoU0hfTk9ORSksCisgICAgICBzaXplKDApLAorICAgICAgaXNBcnJh
eShmYWxzZSksCisgICAgICBwcmVjaXNpb24oRWJwVW5kZWZpbmVkKSwKKyAgICAgIHN0YXRpY1Vz
ZShmYWxzZSkKK3sKK30KKworVFZhcmlhYmxlSW5mbzo6VFZhcmlhYmxlSW5mbyhTaERhdGFUeXBl
IHR5cGUsIGludCBzaXplKQorICAgIDogdHlwZSh0eXBlKSwKKyAgICAgIHNpemUoc2l6ZSksCisg
ICAgICBpc0FycmF5KGZhbHNlKSwKKyAgICAgIHByZWNpc2lvbihFYnBVbmRlZmluZWQpLAorICAg
ICAgc3RhdGljVXNlKGZhbHNlKQoreworfQorCitDb2xsZWN0VmFyaWFibGVzOjpDb2xsZWN0VmFy
aWFibGVzKFRWYXJpYWJsZUluZm9MaXN0JiBhdHRyaWJzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYgdW5pZm9ybXMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9MaXN0JiB2YXJ5aW5ncywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rp
b24pCisgICAgOiBtQXR0cmlicyhhdHRyaWJzKSwKKyAgICAgIG1Vbmlmb3Jtcyh1bmlmb3Jtcyks
CisgICAgICBtVmFyeWluZ3ModmFyeWluZ3MpLAorICAgICAgbVBvaW50Q29vcmRBZGRlZChmYWxz
ZSksCisgICAgICBtRnJvbnRGYWNpbmdBZGRlZChmYWxzZSksCisgICAgICBtRnJhZ0Nvb3JkQWRk
ZWQoZmFsc2UpLAorICAgICAgbUhhc2hGdW5jdGlvbihoYXNoRnVuY3Rpb24pCit7Cit9CisKKy8v
IFdlIHdhbnQgdG8gY2hlY2sgd2hldGhlciBhIHVuaWZvcm0vdmFyeWluZyBpcyBzdGF0aWNhbGx5
IHVzZWQKKy8vIGJlY2F1c2Ugd2Ugb25seSBjb3VudCB0aGUgdXNlZCBvbmVzIGluIHBhY2tpbmcg
Y29tcHV0aW5nLgorLy8gQWxzbywgZ2xfRnJhZ0Nvb3JkLCBnbF9Qb2ludENvb3JkLCBhbmQgZ2xf
RnJvbnRGYWNpbmcgY291bnQKKy8vIHRvd2FyZCB2YXJ5aW5nIGNvdW50aW5nIGlmIHRoZXkgYXJl
IHN0YXRpY2FsbHkgdXNlZCBpbiBhIGZyYWdtZW50CisvLyBzaGFkZXIuCit2b2lkIENvbGxlY3RW
YXJpYWJsZXM6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCkKK3sKKyAgICBBU1NF
UlQoc3ltYm9sICE9IE5VTEwpOworICAgIFRWYXJpYWJsZUluZm8qIHZhciA9IE5VTEw7CisgICAg
c3dpdGNoIChzeW1ib2wtPmdldFF1YWxpZmllcigpKQorICAgIHsKKyAgICBjYXNlIEV2cVZhcnlp
bmdPdXQ6CisgICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0OgorICAgIGNhc2UgRXZxVmFy
eWluZ0luOgorICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWluZ0luOgorICAgICAgICB2YXIgPSBm
aW5kVmFyaWFibGUoc3ltYm9sLT5nZXRUeXBlKCksIHN5bWJvbC0+Z2V0U3ltYm9sKCksIG1WYXJ5
aW5ncyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxVW5pZm9ybToKKyAgICAgICAgdmFy
ID0gZmluZFZhcmlhYmxlKHN5bWJvbC0+Z2V0VHlwZSgpLCBzeW1ib2wtPmdldFN5bWJvbCgpLCBt
VW5pZm9ybXMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUZyYWdDb29yZDoKKyAgICAg
ICAgaWYgKCFtRnJhZ0Nvb3JkQWRkZWQpIHsKKyAgICAgICAgICAgIFRWYXJpYWJsZUluZm8gaW5m
bzsKKyAgICAgICAgICAgIGluZm8ubmFtZSA9ICJnbF9GcmFnQ29vcmQiOworICAgICAgICAgICAg
aW5mby5tYXBwZWROYW1lID0gImdsX0ZyYWdDb29yZCI7CisgICAgICAgICAgICBpbmZvLnR5cGUg
PSBTSF9GTE9BVF9WRUM0OworICAgICAgICAgICAgaW5mby5zaXplID0gMTsKKyAgICAgICAgICAg
IGluZm8ucHJlY2lzaW9uID0gRWJwTWVkaXVtOyAgLy8gVXNlIG1lZGl1bXAgYXMgaXQgZG9lc24n
dCByZWFsbHkgbWF0dGVyLgorICAgICAgICAgICAgaW5mby5zdGF0aWNVc2UgPSB0cnVlOworCSAg
ICBtVmFyeWluZ3MucHVzaF9iYWNrKGluZm8pOworICAgICAgICAgICAgbUZyYWdDb29yZEFkZGVk
ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgY2FzZSBFdnFGcm9udEZh
Y2luZzoKKyAgICAgICAgaWYgKCFtRnJvbnRGYWNpbmdBZGRlZCkgeworICAgICAgICAgICAgVFZh
cmlhYmxlSW5mbyBpbmZvOworICAgICAgICAgICAgaW5mby5uYW1lID0gImdsX0Zyb250RmFjaW5n
IjsKKyAgICAgICAgICAgIGluZm8ubWFwcGVkTmFtZSA9ICJnbF9Gcm9udEZhY2luZyI7CisgICAg
ICAgICAgICBpbmZvLnR5cGUgPSBTSF9CT09MOworICAgICAgICAgICAgaW5mby5zaXplID0gMTsK
KyAgICAgICAgICAgIGluZm8ucHJlY2lzaW9uID0gRWJwVW5kZWZpbmVkOworICAgICAgICAgICAg
aW5mby5zdGF0aWNVc2UgPSB0cnVlOworCSAgICBtVmFyeWluZ3MucHVzaF9iYWNrKGluZm8pOwor
ICAgICAgICAgICAgbUZyb250RmFjaW5nQWRkZWQgPSB0cnVlOworICAgICAgICB9CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEV2cVBvaW50Q29vcmQ6CisgICAgICAgIGlmICghbVBvaW50Q29v
cmRBZGRlZCkgeworICAgICAgICAgICAgVFZhcmlhYmxlSW5mbyBpbmZvOworICAgICAgICAgICAg
aW5mby5uYW1lID0gImdsX1BvaW50Q29vcmQiOworICAgICAgICAgICAgaW5mby5tYXBwZWROYW1l
ID0gImdsX1BvaW50Q29vcmQiOworICAgICAgICAgICAgaW5mby50eXBlID0gU0hfRkxPQVRfVkVD
MjsKKyAgICAgICAgICAgIGluZm8uc2l6ZSA9IDE7CisgICAgICAgICAgICBpbmZvLnByZWNpc2lv
biA9IEVicE1lZGl1bTsgIC8vIFVzZSBtZWRpdW1wIGFzIGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRl
ci4KKyAgICAgICAgICAgIGluZm8uc3RhdGljVXNlID0gdHJ1ZTsKKwkgICAgbVZhcnlpbmdzLnB1
c2hfYmFjayhpbmZvKTsKKyAgICAgICAgICAgIG1Qb2ludENvb3JkQWRkZWQgPSB0cnVlOworICAg
ICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgaWYgKHZhcikKKyAgICAgICAgdmFyLT5zdGF0aWNVc2UgPSB0cnVlOworfQorCiti
b29sIENvbGxlY3RWYXJpYWJsZXM6OnZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVn
YXRlKiBub2RlKQoreworICAgIGJvb2wgdmlzaXRDaGlsZHJlbiA9IHRydWU7CisKKyAgICBzd2l0
Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgeworICAgIGNhc2UgRU9wRGVjbGFyYXRpb246IHsKKyAg
ICAgICAgY29uc3QgVEludGVybVNlcXVlbmNlJiBzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNl
KCk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gc2VxdWVuY2UuZnJvbnQoKS0+Z2V0
QXNUeXBlZCgpLT5nZXRRdWFsaWZpZXIoKTsKKyAgICAgICAgaWYgKHF1YWxpZmllciA9PSBFdnFB
dHRyaWJ1dGUgfHwgcXVhbGlmaWVyID09IEV2cVVuaWZvcm0gfHwKKyAgICAgICAgICAgIHF1YWxp
ZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgcXVhbGlmaWVyID09IEV2cVZhcnlpbmdPdXQgfHwKKyAg
ICAgICAgICAgIHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5aW5nSW4gfHwgcXVhbGlmaWVy
ID09IEV2cUludmFyaWFudFZhcnlpbmdPdXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRWYXJp
YWJsZUluZm9MaXN0JiBpbmZvTGlzdCA9IHF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUgPyBtQXR0
cmlicyA6CisgICAgICAgICAgICAgICAgKHF1YWxpZmllciA9PSBFdnFVbmlmb3JtID8gbVVuaWZv
cm1zIDogbVZhcnlpbmdzKTsKKyAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjpjb25z
dF9pdGVyYXRvciBpID0gc2VxdWVuY2UuYmVnaW4oKTsKKyAgICAgICAgICAgICAgICAgaSAhPSBz
ZXF1ZW5jZS5lbmQoKTsgKytpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0
IFRJbnRlcm1TeW1ib2wqIHZhcmlhYmxlID0gKCppKS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAg
ICAgICAgICAgICAgLy8gVGhlIG9ubHkgY2FzZSBpbiB3aGljaCB0aGUgc2VxdWVuY2Ugd2lsbCBu
b3QgY29udGFpbiBhCisgICAgICAgICAgICAgICAgLy8gVEludGVybVN5bWJvbCBub2RlIGlzIGlu
aXRpYWxpemF0aW9uLiBJdCB3aWxsIGNvbnRhaW4gYQorICAgICAgICAgICAgICAgIC8vIFRJbnRl
ckJpbmFyeSBub2RlIGluIHRoYXQgY2FzZS4gU2luY2UgYXR0cmlidXRlcywgdW5pZm9ybXMsCisg
ICAgICAgICAgICAgICAgLy8gYW5kIHZhcnlpbmdzIGNhbm5vdCBiZSBpbml0aWFsaXplZCBpbiBh
IHNoYWRlciwgd2UgbXVzdCBoYXZlCisgICAgICAgICAgICAgICAgLy8gb25seSBUSW50ZXJtU3lt
Ym9sIG5vZGVzIGluIHRoZSBzZXF1ZW5jZS4KKyAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFi
bGUgIT0gTlVMTCk7CisgICAgICAgICAgICAgICAgVFN0cmluZyBwcm9jZXNzZWRTeW1ib2w7Cisg
ICAgICAgICAgICAgICAgaWYgKG1IYXNoRnVuY3Rpb24gPT0gTlVMTCkKKyAgICAgICAgICAgICAg
ICAgICAgcHJvY2Vzc2VkU3ltYm9sID0gdmFyaWFibGUtPmdldFN5bWJvbCgpOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkU3ltYm9sID0gVEludGVy
bVRyYXZlcnNlcjo6aGFzaCh2YXJpYWJsZS0+Z2V0T3JpZ2luYWxTeW1ib2woKSwgbUhhc2hGdW5j
dGlvbik7CisgICAgICAgICAgICAgICAgZ2V0VmFyaWFibGVJbmZvKHZhcmlhYmxlLT5nZXRUeXBl
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRPcmlnaW5h
bFN5bWJvbCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRTeW1i
b2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9MaXN0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtSGFzaEZ1bmN0aW9uKTsKKyAgICAgICAgICAgICAgICB2
aXNpdENoaWxkcmVuID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB2
aXNpdENoaWxkcmVuOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZUluZm8uaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjM3MjE2Y2QxNDI4ZjJkY2QyMGIxY2NmMGY2ZjA1ODllOWViOThlNDEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJp
YWJsZUluZm8uaApAQCAtMCwwICsxLDUyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVm
IENPTVBJTEVSX1ZBUklBQkxFX0lORk9fSF8KKyNkZWZpbmUgQ09NUElMRVJfVkFSSUFCTEVfSU5G
T19IXworCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKworLy8gUHJvdmlkZXMgaW5mb3JtYXRpb24g
YWJvdXQgYSB2YXJpYWJsZS4KKy8vIEl0IGlzIGN1cnJlbnRseSBiZWluZyB1c2VkIHRvIHN0b3Jl
IGluZm8gYWJvdXQgYWN0aXZlIGF0dHJpYnMgYW5kIHVuaWZvcm1zLgorc3RydWN0IFRWYXJpYWJs
ZUluZm8geworICAgIFRWYXJpYWJsZUluZm8oU2hEYXRhVHlwZSB0eXBlLCBpbnQgc2l6ZSk7Cisg
ICAgVFZhcmlhYmxlSW5mbygpOworCisgICAgVFBlcnNpc3RTdHJpbmcgbmFtZTsKKyAgICBUUGVy
c2lzdFN0cmluZyBtYXBwZWROYW1lOworICAgIFNoRGF0YVR5cGUgdHlwZTsKKyAgICBpbnQgc2l6
ZTsKKyAgICBib29sIGlzQXJyYXk7CisgICAgVFByZWNpc2lvbiBwcmVjaXNpb247CisgICAgYm9v
bCBzdGF0aWNVc2U7Cit9OwordHlwZWRlZiBzdGQ6OnZlY3RvcjxUVmFyaWFibGVJbmZvPiBUVmFy
aWFibGVJbmZvTGlzdDsKKworLy8gVHJhdmVyc2VzIGludGVybWVkaWF0ZSB0cmVlIHRvIGNvbGxl
Y3QgYWxsIGF0dHJpYnV0ZXMsIHVuaWZvcm1zLCB2YXJ5aW5ncy4KK2NsYXNzIENvbGxlY3RWYXJp
YWJsZXMgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgQ29sbGVjdFZh
cmlhYmxlcyhUVmFyaWFibGVJbmZvTGlzdCYgYXR0cmlicywKKyAgICAgICAgICAgICAgICAgICAg
IFRWYXJpYWJsZUluZm9MaXN0JiB1bmlmb3JtcywKKyAgICAgICAgICAgICAgICAgICAgIFRWYXJp
YWJsZUluZm9MaXN0JiB2YXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0
aW9uNjQgaGFzaEZ1bmN0aW9uKTsKKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50
ZXJtU3ltYm9sKik7CisgICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50
ZXJtQWdncmVnYXRlKik7CisKK3ByaXZhdGU6CisgICAgVFZhcmlhYmxlSW5mb0xpc3QmIG1BdHRy
aWJzOworICAgIFRWYXJpYWJsZUluZm9MaXN0JiBtVW5pZm9ybXM7CisgICAgVFZhcmlhYmxlSW5m
b0xpc3QmIG1WYXJ5aW5nczsKKworICAgIGJvb2wgbVBvaW50Q29vcmRBZGRlZDsKKyAgICBib29s
IG1Gcm9udEZhY2luZ0FkZGVkOworICAgIGJvb2wgbUZyYWdDb29yZEFkZGVkOworCisgICAgU2hI
YXNoRnVuY3Rpb242NCBtSGFzaEZ1bmN0aW9uOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9W
QVJJQUJMRV9JTkZPX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZVBhY2tlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZVBhY2tlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNTYzNGQ4NjMzNzdjOWY5NzFhNTJlNzI3MWZlOTc4ZWVkYzM1ZWIxZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1ZhcmlhYmxlUGFja2VyLmNwcApAQCAtMCwwICsxLDI5NyBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlUGFja2VyLmgiCisKKyNpbmNs
dWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5o
IgorCituYW1lc3BhY2UgeworaW50IEdldFNvcnRPcmRlcihTaERhdGFUeXBlIHR5cGUpCit7Cisg
ICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUNDoKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDI6CisgICAgICAgICAgICBy
ZXR1cm4gMTsKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUM0OgorICAgICAgICBjYXNlIFNIX0lO
VF9WRUM0OgorICAgICAgICBjYXNlIFNIX0JPT0xfVkVDNDoKKyAgICAgICAgICAgIHJldHVybiAy
OworICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDM6CisgICAgICAgICAgICByZXR1cm4gMzsKKyAg
ICAgICAgY2FzZSBTSF9GTE9BVF9WRUMzOgorICAgICAgICBjYXNlIFNIX0lOVF9WRUMzOgorICAg
ICAgICBjYXNlIFNIX0JPT0xfVkVDMzoKKyAgICAgICAgICAgIHJldHVybiA0OworICAgICAgICBj
YXNlIFNIX0ZMT0FUX1ZFQzI6CisgICAgICAgIGNhc2UgU0hfSU5UX1ZFQzI6CisgICAgICAgIGNh
c2UgU0hfQk9PTF9WRUMyOgorICAgICAgICAgICAgcmV0dXJuIDU7CisgICAgICAgIGNhc2UgU0hf
RkxPQVQ6CisgICAgICAgIGNhc2UgU0hfSU5UOgorICAgICAgICBjYXNlIFNIX0JPT0w6CisgICAg
ICAgIGNhc2UgU0hfU0FNUExFUl8yRDoKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSX0NVQkU6Cisg
ICAgICAgIGNhc2UgU0hfU0FNUExFUl9FWFRFUk5BTF9PRVM6CisgICAgICAgIGNhc2UgU0hfU0FN
UExFUl8yRF9SRUNUX0FSQjoKKyAgICAgICAgICAgIHJldHVybiA2OworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybiA3OworICAg
IH0KK30KK30gICAgLy8gbmFtZXNwYWNlCisKK2ludCBWYXJpYWJsZVBhY2tlcjo6R2V0TnVtQ29t
cG9uZW50c1BlclJvdyhTaERhdGFUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUNDoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQyOgor
ICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzQ6CisgICAgICAgIGNhc2UgU0hfSU5UX1ZFQzQ6Cisg
ICAgICAgIGNhc2UgU0hfQk9PTF9WRUM0OgorICAgICAgICAgICAgcmV0dXJuIDQ7CisgICAgICAg
IGNhc2UgU0hfRkxPQVRfTUFUMzoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUMzOgorICAgICAg
ICBjYXNlIFNIX0lOVF9WRUMzOgorICAgICAgICBjYXNlIFNIX0JPT0xfVkVDMzoKKyAgICAgICAg
ICAgIHJldHVybiAzOworICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzI6CisgICAgICAgIGNhc2Ug
U0hfSU5UX1ZFQzI6CisgICAgICAgIGNhc2UgU0hfQk9PTF9WRUMyOgorICAgICAgICAgICAgcmV0
dXJuIDI7CisgICAgICAgIGNhc2UgU0hfRkxPQVQ6CisgICAgICAgIGNhc2UgU0hfSU5UOgorICAg
ICAgICBjYXNlIFNIX0JPT0w6CisgICAgICAgIGNhc2UgU0hfU0FNUExFUl8yRDoKKyAgICAgICAg
Y2FzZSBTSF9TQU1QTEVSX0NVQkU6CisgICAgICAgIGNhc2UgU0hfU0FNUExFUl9FWFRFUk5BTF9P
RVM6CisgICAgICAgIGNhc2UgU0hfU0FNUExFUl8yRF9SRUNUX0FSQjoKKyAgICAgICAgICAgIHJl
dHVybiAxOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAg
ICAgICAgICAgIHJldHVybiA1OworICAgIH0KK30KKworaW50IFZhcmlhYmxlUGFja2VyOjpHZXRO
dW1Sb3dzKFNoRGF0YVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAg
Y2FzZSBTSF9GTE9BVF9NQVQ0OgorICAgICAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgIGNhc2Ug
U0hfRkxPQVRfTUFUMzoKKyAgICAgICAgICAgIHJldHVybiAzOworICAgICAgICBjYXNlIFNIX0ZM
T0FUX01BVDI6CisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9W
RUM0OgorICAgICAgICBjYXNlIFNIX0lOVF9WRUM0OgorICAgICAgICBjYXNlIFNIX0JPT0xfVkVD
NDoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUMzOgorICAgICAgICBjYXNlIFNIX0lOVF9WRUMz
OgorICAgICAgICBjYXNlIFNIX0JPT0xfVkVDMzoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUMy
OgorICAgICAgICBjYXNlIFNIX0lOVF9WRUMyOgorICAgICAgICBjYXNlIFNIX0JPT0xfVkVDMjoK
KyAgICAgICAgY2FzZSBTSF9GTE9BVDoKKyAgICAgICAgY2FzZSBTSF9JTlQ6CisgICAgICAgIGNh
c2UgU0hfQk9PTDoKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSXzJEOgorICAgICAgICBjYXNlIFNI
X1NBTVBMRVJfQ1VCRToKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSX0VYVEVSTkFMX09FUzoKKyAg
ICAgICAgY2FzZSBTSF9TQU1QTEVSXzJEX1JFQ1RfQVJCOgorICAgICAgICAgICAgcmV0dXJuIDE7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlQoZmFsc2UpOworICAgICAgICAg
ICAgcmV0dXJuIDEwMDAwMDsKKyAgICB9Cit9CisKK3N0cnVjdCBUVmFyaWFibGVJbmZvQ29tcGFy
ZXIgeworICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBUVmFyaWFibGVJbmZvJiBsaHMsIGNvbnN0
IFRWYXJpYWJsZUluZm8mIHJocykgY29uc3QKKyAgICB7CisgICAgICAgIGludCBsaHNTb3J0T3Jk
ZXIgPSBHZXRTb3J0T3JkZXIobGhzLnR5cGUpOworICAgICAgICBpbnQgcmhzU29ydE9yZGVyID0g
R2V0U29ydE9yZGVyKHJocy50eXBlKTsKKyAgICAgICAgaWYgKGxoc1NvcnRPcmRlciAhPSByaHNT
b3J0T3JkZXIpIHsKKyAgICAgICAgICAgIHJldHVybiBsaHNTb3J0T3JkZXIgPCByaHNTb3J0T3Jk
ZXI7CisgICAgICAgIH0KKyAgICAgICAgLy8gU29ydCBieSBsYXJnZXN0IGZpcnN0LgorICAgICAg
ICByZXR1cm4gbGhzLnNpemUgPiByaHMuc2l6ZTsKKyAgICB9Cit9OworCit1bnNpZ25lZCBWYXJp
YWJsZVBhY2tlcjo6bWFrZUNvbHVtbkZsYWdzKGludCBjb2x1bW4sIGludCBudW1Db21wb25lbnRz
UGVyUm93KQoreworICAgIHJldHVybiAoKGtDb2x1bW5NYXNrIDw8IChrTnVtQ29sdW1ucyAtIG51
bUNvbXBvbmVudHNQZXJSb3cpKSAmCisgICAgICAgICAgICAgICAgICAgIGtDb2x1bW5NYXNrKSA+
PiBjb2x1bW47Cit9CisKK3ZvaWQgVmFyaWFibGVQYWNrZXI6OmZpbGxDb2x1bW5zKGludCB0b3BS
b3csIGludCBudW1Sb3dzLCBpbnQgY29sdW1uLCBpbnQgbnVtQ29tcG9uZW50c1BlclJvdykKK3sK
KyAgICB1bnNpZ25lZCBjb2x1bW5GbGFncyA9IG1ha2VDb2x1bW5GbGFncyhjb2x1bW4sIG51bUNv
bXBvbmVudHNQZXJSb3cpOworICAgIGZvciAoaW50IHIgPSAwOyByIDwgbnVtUm93czsgKytyKSB7
CisgICAgICAgIGludCByb3cgPSB0b3BSb3cgKyByOworICAgICAgICBBU1NFUlQoKHJvd3NfW3Jv
d10gJiBjb2x1bW5GbGFncykgPT0gMCk7CisgICAgICAgIHJvd3NfW3Jvd10gfD0gY29sdW1uRmxh
Z3M7CisgICAgfQorfQorCitib29sIFZhcmlhYmxlUGFja2VyOjpzZWFyY2hDb2x1bW4oaW50IGNv
bHVtbiwgaW50IG51bVJvd3MsIGludCogZGVzdFJvdywgaW50KiBkZXN0U2l6ZSkKK3sKKyAgICBB
U1NFUlQoZGVzdFJvdyk7CisKKyAgICBmb3IgKDsgdG9wTm9uRnVsbFJvd18gPCBtYXhSb3dzXyAm
JiByb3dzX1t0b3BOb25GdWxsUm93X10gPT0ga0NvbHVtbk1hc2s7CisgICAgICAgICArK3RvcE5v
bkZ1bGxSb3dfKSB7CisgICAgfQorCisgICAgZm9yICg7IGJvdHRvbU5vbkZ1bGxSb3dfID49IDAg
JiYgcm93c19bYm90dG9tTm9uRnVsbFJvd19dID09IGtDb2x1bW5NYXNrOworICAgICAgICAgLS1i
b3R0b21Ob25GdWxsUm93XykgeworICAgIH0KKworICAgIGlmIChib3R0b21Ob25GdWxsUm93XyAt
IHRvcE5vbkZ1bGxSb3dfICsgMSA8IG51bVJvd3MpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIHVuc2lnbmVkIGNvbHVtbkZsYWdzID0gbWFrZUNvbHVtbkZsYWdzKGNvbHVt
biwgMSk7CisgICAgaW50IHRvcEdvb2RSb3cgPSAwOworICAgIGludCBzbWFsbGVzdEdvb2RUb3Ag
PSAtMTsKKyAgICBpbnQgc21hbGxlc3RHb29kU2l6ZSA9IG1heFJvd3NfICsgMTsKKyAgICBpbnQg
Ym90dG9tUm93ID0gYm90dG9tTm9uRnVsbFJvd18gKyAxOworICAgIGJvb2wgZm91bmQgPSBmYWxz
ZTsKKyAgICBmb3IgKGludCByb3cgPSB0b3BOb25GdWxsUm93Xzsgcm93IDw9IGJvdHRvbVJvdzsg
Kytyb3cpIHsKKyAgICAgICAgYm9vbCByb3dFbXB0eSA9IHJvdyA8IGJvdHRvbVJvdyA/ICgocm93
c19bcm93XSAmIGNvbHVtbkZsYWdzKSA9PSAwKSA6IGZhbHNlOworICAgICAgICBpZiAocm93RW1w
dHkpIHsKKyAgICAgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgICAgICB0b3BHb29k
Um93ID0gcm93OworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChmb3VuZCkgeworICAgICAgICAgICAg
ICAgIGludCBzaXplID0gcm93IC0gdG9wR29vZFJvdzsKKyAgICAgICAgICAgICAgICBpZiAoc2l6
ZSA+PSBudW1Sb3dzICYmIHNpemUgPCBzbWFsbGVzdEdvb2RTaXplKSB7CisgICAgICAgICAgICAg
ICAgICAgIHNtYWxsZXN0R29vZFNpemUgPSBzaXplOworICAgICAgICAgICAgICAgICAgICBzbWFs
bGVzdEdvb2RUb3AgPSB0b3BHb29kUm93OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGZvdW5kID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYg
KHNtYWxsZXN0R29vZFRvcCA8IDApIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgICpkZXN0Um93ID0gc21hbGxlc3RHb29kVG9wOworICAgIGlmIChkZXN0U2l6ZSkgeworICAg
ICAgICAqZGVzdFNpemUgPSBzbWFsbGVzdEdvb2RTaXplOworICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBWYXJpYWJsZVBhY2tlcjo6Q2hlY2tWYXJpYWJsZXNXaXRoaW5QYWNraW5n
TGltaXRzKGludCBtYXhWZWN0b3JzLCBjb25zdCBUVmFyaWFibGVJbmZvTGlzdCYgaW5fdmFyaWFi
bGVzKQoreworICAgIEFTU0VSVChtYXhWZWN0b3JzID4gMCk7CisgICAgbWF4Um93c18gPSBtYXhW
ZWN0b3JzOworICAgIHRvcE5vbkZ1bGxSb3dfID0gMDsKKyAgICBib3R0b21Ob25GdWxsUm93XyA9
IG1heFJvd3NfIC0gMTsKKyAgICBUVmFyaWFibGVJbmZvTGlzdCB2YXJpYWJsZXMoaW5fdmFyaWFi
bGVzKTsKKworICAgIC8vIEFzIHBlciBHTFNMIDEuMDE3IEFwcGVuZGl4IEEsIFNlY3Rpb24gNyB2
YXJpYWJsZXMgYXJlIHBhY2tlZCBpbiBzcGVjaWZpYworICAgIC8vIG9yZGVyIGJ5IHR5cGUsIHRo
ZW4gYnkgc2l6ZSBvZiBhcnJheSwgbGFyZ2VzdCBmaXJzdC4KKyAgICBzdGQ6OnNvcnQodmFyaWFi
bGVzLmJlZ2luKCksIHZhcmlhYmxlcy5lbmQoKSwgVFZhcmlhYmxlSW5mb0NvbXBhcmVyKCkpOwor
ICAgIHJvd3NfLmNsZWFyKCk7CisgICAgcm93c18ucmVzaXplKG1heFZlY3RvcnMsIDApOworCisg
ICAgLy8gUGFja3MgdGhlIDQgY29sdW1uIHZhcmlhYmxlcy4KKyAgICBzaXplX3QgaWkgPSAwOwor
ICAgIGZvciAoOyBpaSA8IHZhcmlhYmxlcy5zaXplKCk7ICsraWkpIHsKKyAgICAgICAgY29uc3Qg
VFZhcmlhYmxlSW5mbyYgdmFyaWFibGUgPSB2YXJpYWJsZXNbaWldOworICAgICAgICBpZiAoR2V0
TnVtQ29tcG9uZW50c1BlclJvdyh2YXJpYWJsZS50eXBlKSAhPSA0KSB7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICB0b3BOb25GdWxsUm93XyArPSBHZXROdW1Sb3dzKHZh
cmlhYmxlLnR5cGUpICogdmFyaWFibGUuc2l6ZTsKKyAgICB9CisKKyAgICBpZiAodG9wTm9uRnVs
bFJvd18gPiBtYXhSb3dzXykgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
Ly8gUGFja3MgdGhlIDMgY29sdW1uIHZhcmlhYmxlcy4KKyAgICBpbnQgbnVtM0NvbHVtblJvd3Mg
PSAwOworICAgIGZvciAoOyBpaSA8IHZhcmlhYmxlcy5zaXplKCk7ICsraWkpIHsKKyAgICAgICAg
Y29uc3QgVFZhcmlhYmxlSW5mbyYgdmFyaWFibGUgPSB2YXJpYWJsZXNbaWldOworICAgICAgICBp
ZiAoR2V0TnVtQ29tcG9uZW50c1BlclJvdyh2YXJpYWJsZS50eXBlKSAhPSAzKSB7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBudW0zQ29sdW1uUm93cyArPSBHZXROdW1S
b3dzKHZhcmlhYmxlLnR5cGUpICogdmFyaWFibGUuc2l6ZTsKKyAgICB9CisKKyAgICBpZiAodG9w
Tm9uRnVsbFJvd18gKyBudW0zQ29sdW1uUm93cyA+IG1heFJvd3NfKSB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBmaWxsQ29sdW1ucyh0b3BOb25GdWxsUm93XywgbnVtM0Nv
bHVtblJvd3MsIDAsIDMpOworCisgICAgLy8gUGFja3MgdGhlIDIgY29sdW1uIHZhcmlhYmxlcy4K
KyAgICBpbnQgdG9wMkNvbHVtblJvdyA9IHRvcE5vbkZ1bGxSb3dfICsgbnVtM0NvbHVtblJvd3M7
CisgICAgaW50IHR3b0NvbHVtblJvd3NBdmFpbGFibGUgPSBtYXhSb3dzXyAtIHRvcDJDb2x1bW5S
b3c7CisgICAgaW50IHJvd3NBdmFpbGFibGVJbkNvbHVtbnMwMSA9IHR3b0NvbHVtblJvd3NBdmFp
bGFibGU7CisgICAgaW50IHJvd3NBdmFpbGFibGVJbkNvbHVtbnMyMyA9IHR3b0NvbHVtblJvd3NB
dmFpbGFibGU7CisgICAgZm9yICg7IGlpIDwgdmFyaWFibGVzLnNpemUoKTsgKytpaSkgeworICAg
ICAgICBjb25zdCBUVmFyaWFibGVJbmZvJiB2YXJpYWJsZSA9IHZhcmlhYmxlc1tpaV07CisgICAg
ICAgIGlmIChHZXROdW1Db21wb25lbnRzUGVyUm93KHZhcmlhYmxlLnR5cGUpICE9IDIpIHsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGludCBudW1Sb3dzID0gR2V0TnVt
Um93cyh2YXJpYWJsZS50eXBlKSAqIHZhcmlhYmxlLnNpemU7CisgICAgICAgIGlmIChudW1Sb3dz
IDw9IHJvd3NBdmFpbGFibGVJbkNvbHVtbnMwMSkgeworICAgICAgICAgICAgcm93c0F2YWlsYWJs
ZUluQ29sdW1uczAxIC09IG51bVJvd3M7CisgICAgICAgIH0gZWxzZSBpZiAobnVtUm93cyA8PSBy
b3dzQXZhaWxhYmxlSW5Db2x1bW5zMjMpIHsKKyAgICAgICAgICAgIHJvd3NBdmFpbGFibGVJbkNv
bHVtbnMyMyAtPSBudW1Sb3dzOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgaW50IG51bVJvd3NVc2VkSW5Db2x1bW5z
MDEgPQorICAgICAgICB0d29Db2x1bW5Sb3dzQXZhaWxhYmxlIC0gcm93c0F2YWlsYWJsZUluQ29s
dW1uczAxOworICAgIGludCBudW1Sb3dzVXNlZEluQ29sdW1uczIzID0KKyAgICAgICAgdHdvQ29s
dW1uUm93c0F2YWlsYWJsZSAtIHJvd3NBdmFpbGFibGVJbkNvbHVtbnMyMzsKKyAgICBmaWxsQ29s
dW1ucyh0b3AyQ29sdW1uUm93LCBudW1Sb3dzVXNlZEluQ29sdW1uczAxLCAwLCAyKTsKKyAgICBm
aWxsQ29sdW1ucyhtYXhSb3dzXyAtIG51bVJvd3NVc2VkSW5Db2x1bW5zMjMsIG51bVJvd3NVc2Vk
SW5Db2x1bW5zMjMsCisgICAgICAgICAgICAgICAgMiwgMik7CisKKyAgICAvLyBQYWNrcyB0aGUg
MSBjb2x1bW4gdmFyaWFibGVzLgorICAgIGZvciAoOyBpaSA8IHZhcmlhYmxlcy5zaXplKCk7ICsr
aWkpIHsKKyAgICAgICAgY29uc3QgVFZhcmlhYmxlSW5mbyYgdmFyaWFibGUgPSB2YXJpYWJsZXNb
aWldOworICAgICAgICBBU1NFUlQoMSA9PSBHZXROdW1Db21wb25lbnRzUGVyUm93KHZhcmlhYmxl
LnR5cGUpKTsKKyAgICAgICAgaW50IG51bVJvd3MgPSBHZXROdW1Sb3dzKHZhcmlhYmxlLnR5cGUp
ICogdmFyaWFibGUuc2l6ZTsKKyAgICAgICAgaW50IHNtYWxsZXN0Q29sdW1uID0gLTE7CisgICAg
ICAgIGludCBzbWFsbGVzdFNpemUgPSBtYXhSb3dzXyArIDE7CisgICAgICAgIGludCB0b3BSb3cg
PSAtMTsKKyAgICAgICAgZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1uIDwga051bUNvbHVtbnM7
ICsrY29sdW1uKSB7CisgICAgICAgICAgICBpbnQgcm93ID0gMDsKKyAgICAgICAgICAgIGludCBz
aXplID0gMDsKKyAgICAgICAgICAgIGlmIChzZWFyY2hDb2x1bW4oY29sdW1uLCBudW1Sb3dzLCAm
cm93LCAmc2l6ZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2l6ZSA8IHNtYWxsZXN0U2l6ZSkg
eworICAgICAgICAgICAgICAgICAgICBzbWFsbGVzdFNpemUgPSBzaXplOworICAgICAgICAgICAg
ICAgICAgICBzbWFsbGVzdENvbHVtbiA9IGNvbHVtbjsKKyAgICAgICAgICAgICAgICAgICAgdG9w
Um93ID0gcm93OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGlmIChzbWFsbGVzdENvbHVtbiA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGZpbGxDb2x1bW5zKHRvcFJvdywgbnVtUm93cywg
c21hbGxlc3RDb2x1bW4sIDEpOworICAgIH0KKworICAgIEFTU0VSVCh2YXJpYWJsZXMuc2l6ZSgp
ID09IGlpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCisKKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVQYWNrZXIu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Zhcmlh
YmxlUGFja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmQ2MDkwODI3Y2Q4ZTE5NTkzOGNlNDU5NWNmOTM3MWU3
NGQxNmE1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlUGFja2VyLmgKQEAgLTAsMCArMSw0MSBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfVkFSSUFCTEVQQUNLRVJfSU5DTFVERURfCisjZGVm
aW5lIF9WQVJJQUJMRVBBQ0tFUl9JTkNMVURFRF8KKworI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1NoSGFuZGxlLmgiCisKK2NsYXNzIFZhcmlhYmxlUGFj
a2VyIHsKKyBwdWJsaWM6CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBwYXNzZWQgaW4gdmFy
aWFibGVzIHBhY2sgaW4gbWF4VmVjdG9ycyBmb2xsb3dpbmcKKyAgICAvLyB0aGUgcGFja2luZyBy
dWxlcyBmcm9tIHRoZSBHTFNMIDEuMDE3IHNwZWMsIEFwcGVuZGl4IEEsIHNlY3Rpb24gNy4KKyAg
ICBib29sIENoZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cygKKyAgICAgICAgaW50IG1h
eFZlY3RvcnMsCisgICAgICAgIGNvbnN0IFRWYXJpYWJsZUluZm9MaXN0JiBpbl92YXJpYWJsZXMp
OworCisgICAgLy8gR2V0cyBob3cgbWFueSBjb21wb25lbnRzIGluIGEgcm93IGEgZGF0YSB0eXBl
IHRha2VzLgorICAgIHN0YXRpYyBpbnQgR2V0TnVtQ29tcG9uZW50c1BlclJvdyhTaERhdGFUeXBl
IHR5cGUpOworCisgICAgLy8gR2V0cyBob3cgbWFueSByb3dzIGEgZGF0YSB0eXBlIHRha2VzLgor
ICAgIHN0YXRpYyBpbnQgR2V0TnVtUm93cyhTaERhdGFUeXBlIHR5cGUpOworCisgcHJpdmF0ZToK
KyAgICBzdGF0aWMgY29uc3QgaW50IGtOdW1Db2x1bW5zID0gNDsKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQga0NvbHVtbk1hc2sgPSAoMSA8PCBrTnVtQ29sdW1ucykgLSAxOworCisgICAgdW5z
aWduZWQgbWFrZUNvbHVtbkZsYWdzKGludCBjb2x1bW4sIGludCBudW1Db21wb25lbnRzUGVyUm93
KTsKKyAgICB2b2lkIGZpbGxDb2x1bW5zKGludCB0b3BSb3csIGludCBudW1Sb3dzLCBpbnQgY29s
dW1uLCBpbnQgbnVtQ29tcG9uZW50c1BlclJvdyk7CisgICAgYm9vbCBzZWFyY2hDb2x1bW4oaW50
IGNvbHVtbiwgaW50IG51bVJvd3MsIGludCogZGVzdFJvdywgaW50KiBkZXN0U2l6ZSk7CisKKyAg
ICBpbnQgdG9wTm9uRnVsbFJvd187CisgICAgaW50IGJvdHRvbU5vbkZ1bGxSb3dfOworICAgIGlu
dCBtYXhSb3dzXzsKKyAgICBzdGQ6OnZlY3Rvcjx1bnNpZ25lZD4gcm93c187Cit9OworCisjZW5k
aWYgLy8gX1ZBUklBQkxFUEFDS0VSX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmVyc2lvbkdMU0wuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmVyc2lvbkdMU0wu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmRkMTFmOTllYjg5YzZhNTVhMDkxNWFmMDg4MzA3NmFkNmRkZTQ3MzcK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9WZXJzaW9uR0xTTC5jcHAKQEAgLTAsMCArMSwxNDAgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1ZlcnNpb25HTFNMLmgiCisK
K3N0YXRpYyBjb25zdCBpbnQgR0xTTF9WRVJTSU9OXzExMCA9IDExMDsKK3N0YXRpYyBjb25zdCBp
bnQgR0xTTF9WRVJTSU9OXzEyMCA9IDEyMDsKKworLy8gV2UgbmVlZCB0byBzY2FuIGZvciB0aGUg
Zm9sbG93aW5nOgorLy8gMS4gImludmFyaWFudCIga2V5d29yZDogVGhpcyBjYW4gb2NjdXIgaW4g
Ym90aCAtIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycworLy8gICAgYnV0IG9ubHkgYXQgdGhl
IGdsb2JhbCBzY29wZS4KKy8vIDIuICJnbF9Qb2ludENvb3JkIiBidWlsdC1pbiB2YXJpYWJsZTog
VGhpcyBjYW4gb25seSBvY2N1ciBpbiBmcmFnbWVudCBzaGFkZXIKKy8vICAgIGJ1dCBpbnNpZGUg
YW55IHNjb3BlLgorLy8gMy4gQ2FsbCB0byBhIG1hdHJpeCBjb25zdHJ1Y3RvciB3aXRoIGFub3Ro
ZXIgbWF0cml4IGFzIGFyZ3VtZW50LgorLy8gICAgKFRoZXNlIGNvbnN0cnVjdG9ycyB3ZXJlIHJl
c2VydmVkIGluIEdMU0wgdmVyc2lvbiAxLjEwLikKKy8vIDQuIEFycmF5cyBhcyAib3V0IiBmdW5j
dGlvbiBwYXJhbWV0ZXJzLgorLy8gICAgR0xTTCBzcGVjIHNlY3Rpb24gNi4xLjE6ICJXaGVuIGNh
bGxpbmcgYSBmdW5jdGlvbiwgZXhwcmVzc2lvbnMgdGhhdCBkbworLy8gICAgbm90IGV2YWx1YXRl
IHRvIGwtdmFsdWVzIGNhbm5vdCBiZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBkZWNsYXJlZCBhcwor
Ly8gICAgb3V0IG9yIGlub3V0LiIKKy8vICAgIEdMU0wgMS4xIHNlY3Rpb24gNS44OiAiT3RoZXIg
YmluYXJ5IG9yIHVuYXJ5IGV4cHJlc3Npb25zLAorLy8gICAgbm9uLWRlcmVmZXJlbmNlZCBhcnJh
eXMsIGZ1bmN0aW9uIG5hbWVzLCBzd2l6emxlcyB3aXRoIHJlcGVhdGVkIGZpZWxkcywKKy8vICAg
IGFuZCBjb25zdGFudHMgY2Fubm90IGJlIGwtdmFsdWVzLiIKKy8vICAgIEdMU0wgMS4yIHJlbGF4
ZWQgdGhlIHJlc3RyaWN0aW9uIG9uIGFycmF5cywgc2VjdGlvbiA1Ljg6ICJWYXJpYWJsZXMgdGhh
dAorLy8gICAgYXJlIGJ1aWx0LWluIHR5cGVzLCBlbnRpcmUgc3RydWN0dXJlcyBvciBhcnJheXMu
Li4gYXJlIGFsbCBsLXZhbHVlcy4iCisvLworLy8gVE9ETyhhbG9rcCk6IFRoZSBmb2xsb3dpbmcg
dHdvIGNhc2VzIG9mIGludmFyaWFudCBkZWNhbGFyYXRpb24gZ2V0IGxvc3QKKy8vIGR1cmluZyBw
YXJzaW5nIC0gdGhleSBkbyBub3QgZ2V0IGNhcnJpZWQgb3ZlciB0byB0aGUgaW50ZXJtZWRpYXRl
IHRyZWUuCisvLyBIYW5kbGUgdGhlc2UgY2FzZXM6CisvLyAxLiBXaGVuIGEgcHJhZ21hIGlzIHVz
ZWQgdG8gZm9yY2UgYWxsIG91dHB1dCB2YXJpYWJsZXMgdG8gYmUgaW52YXJpYW50OgorLy8gICAg
LSAjcHJhZ21hIFNUREdMIGludmFyaWFudChhbGwpCisvLyAyLiBXaGVuIGEgcHJldmlvdXNseSBk
ZWNhbGFyZWQgb3IgYnVpbHQtaW4gdmFyaWFibGUgaXMgbWFya2VkIGludmFyaWFudDoKKy8vICAg
IC0gaW52YXJpYW50IGdsX1Bvc2l0aW9uOworLy8gICAgLSB2YXJ5aW5nIHZlYzMgY29sb3I7IGlu
dmFyaWFudCBjb2xvcjsKKy8vCitUVmVyc2lvbkdMU0w6OlRWZXJzaW9uR0xTTChTaFNoYWRlclR5
cGUgdHlwZSkKKyAgICA6IG1TaGFkZXJUeXBlKHR5cGUpLAorICAgICAgbVZlcnNpb24oR0xTTF9W
RVJTSU9OXzExMCkKK3sKK30KKwordm9pZCBUVmVyc2lvbkdMU0w6OnZpc2l0U3ltYm9sKFRJbnRl
cm1TeW1ib2wqIG5vZGUpCit7CisgICAgaWYgKG5vZGUtPmdldFN5bWJvbCgpID09ICJnbF9Qb2lu
dENvb3JkIikKKyAgICAgICAgdXBkYXRlVmVyc2lvbihHTFNMX1ZFUlNJT05fMTIwKTsKK30KKwor
dm9pZCBUVmVyc2lvbkdMU0w6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlv
biopCit7Cit9CisKK2Jvb2wgVFZlcnNpb25HTFNMOjp2aXNpdEJpbmFyeShWaXNpdCwgVEludGVy
bUJpbmFyeSopCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVFZlcnNpb25HTFNMOjp2
aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkqKQoreworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFRWZXJzaW9uR0xTTDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQsIFRJbnRlcm1TZWxlY3Rp
b24qKQoreworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFRWZXJzaW9uR0xTTDo6dmlzaXRB
Z2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCit7CisgICAgYm9vbCB2aXNp
dENoaWxkcmVuID0gdHJ1ZTsKKworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkgeworICAgICAg
Y2FzZSBFT3BTZXF1ZW5jZToKKyAgICAgICAgLy8gV2UgbmVlZCB0byB2aXNpdCBzZXF1ZW5jZSBj
aGlsZHJlbiB0byBnZXQgdG8gZ2xvYmFsIG9yIGlubmVyIHNjb3BlLgorICAgICAgICB2aXNpdENo
aWxkcmVuID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcERlY2xhcmF0aW9u
OiB7CisgICAgICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBub2RlLT5nZXRT
ZXF1ZW5jZSgpOworICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHNlcXVlbmNlLmZyb250
KCktPmdldEFzVHlwZWQoKS0+Z2V0UXVhbGlmaWVyKCk7CisgICAgICAgIGlmICgocXVhbGlmaWVy
ID09IEV2cUludmFyaWFudFZhcnlpbmdJbikgfHwKKyAgICAgICAgICAgIChxdWFsaWZpZXIgPT0g
RXZxSW52YXJpYW50VmFyeWluZ091dCkpIHsKKyAgICAgICAgICAgIHVwZGF0ZVZlcnNpb24oR0xT
TF9WRVJTSU9OXzEyMCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAg
ICBjYXNlIEVPcFBhcmFtZXRlcnM6IHsKKyAgICAgICAgY29uc3QgVEludGVybVNlcXVlbmNlJiBw
YXJhbXMgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOworICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5j
ZTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHBhcmFtcy5iZWdpbigpOworICAgICAgICAgICAgIGl0
ZXIgIT0gcGFyYW1zLmVuZCgpOyArK2l0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0
IFRJbnRlcm1UeXBlZCogcGFyYW0gPSAoKml0ZXIpLT5nZXRBc1R5cGVkKCk7CisgICAgICAgICAg
ICBpZiAocGFyYW0tPmlzQXJyYXkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBU
UXVhbGlmaWVyIHF1YWxpZmllciA9IHBhcmFtLT5nZXRRdWFsaWZpZXIoKTsKKyAgICAgICAgICAg
ICAgICBpZiAoKHF1YWxpZmllciA9PSBFdnFPdXQpIHx8IChxdWFsaWZpZXIgPT0gIEV2cUluT3V0
KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVZlcnNpb24o
R0xTTF9WRVJTSU9OXzEyMCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBGdWxseSBwcm9j
ZXNzZWQuIE5vIG5lZWQgdG8gdmlzaXQgY2hpbGRyZW4uCisgICAgICAgIHZpc2l0Q2hpbGRyZW4g
PSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIEVPcENvbnN0cnVj
dE1hdDI6CisgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6CisgICAgICBjYXNlIEVPcENvbnN0
cnVjdE1hdDQ6IHsKKyAgICAgICAgY29uc3QgVEludGVybVNlcXVlbmNlJiBzZXF1ZW5jZSA9IG5v
ZGUtPmdldFNlcXVlbmNlKCk7CisgICAgICAgIGlmIChzZXF1ZW5jZS5zaXplKCkgPT0gMSkgewor
ICAgICAgICAgIFRJbnRlcm1UeXBlZCogdHlwZWQgPSBzZXF1ZW5jZS5mcm9udCgpLT5nZXRBc1R5
cGVkKCk7CisgICAgICAgICAgaWYgKHR5cGVkICYmIHR5cGVkLT5pc01hdHJpeCgpKSB7CisgICAg
ICAgICAgICB1cGRhdGVWZXJzaW9uKEdMU0xfVkVSU0lPTl8xMjApOworICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgZGVmYXVsdDogYnJlYWs7
CisgICAgfQorCisgICAgcmV0dXJuIHZpc2l0Q2hpbGRyZW47Cit9CisKK2Jvb2wgVFZlcnNpb25H
TFNMOjp2aXNpdExvb3AoVmlzaXQsIFRJbnRlcm1Mb29wKikKK3sKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBUVmVyc2lvbkdMU0w6OnZpc2l0QnJhbmNoKFZpc2l0LCBUSW50ZXJtQnJhbmNo
KikKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBUVmVyc2lvbkdMU0w6OnVwZGF0ZVZl
cnNpb24oaW50IHZlcnNpb24pCit7CisgICAgbVZlcnNpb24gPSBzdGQ6Om1heCh2ZXJzaW9uLCBt
VmVyc2lvbik7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1ZlcnNpb25HTFNMLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WZXJzaW9uR0xTTC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQzMTAw
NjYxNzExNDU3ZmI2OThkMDE0MTYxOTlhNmRmMmYwYWFmMGMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WZXJzaW9uR0xT
TC5oCkBAIC0wLDAgKzEsNTYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElM
RVJfVkVSU0lPTkdMU0xfSF8KKyNkZWZpbmUgQ09NUElMRVJfVkVSU0lPTkdMU0xfSF8KKworI2lu
Y2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvaW50ZXJtZWRpYXRlLmgiCisKKy8vIFRyYXZlcnNlcyB0aGUgaW50ZXJtZWRpYXRlIHRyZWUg
dG8gcmV0dXJuIHRoZSBtaW5pbXVtIEdMU0wgdmVyc2lvbgorLy8gcmVxdWlyZWQgdG8gbGVnYWxs
eSBhY2Nlc3MgYWxsIGJ1aWx0LWluIGZlYXR1cmVzIHVzZWQgaW4gdGhlIHNoYWRlci4KKy8vIEdM
U0wgMS4xIHdoaWNoIGlzIG1hbmRhdGVkIGJ5IE9wZW5HTCAyLjAgcHJvdmlkZXM6CisvLyAgIC0g
I3ZlcnNpb24gYW5kICNleHRlbnNpb24gdG8gZGVjbGFyZSB2ZXJzaW9uIGFuZCBleHRlbnNpb25z
LgorLy8gICAtIGJ1aWx0LWluIGZ1bmN0aW9ucyByZWZyYWN0LCBleHAsIGFuZCBsb2cuCisvLyAg
IC0gdXBkYXRlZCBzdGVwKCkgdG8gY29tcGFyZSB4IDwgZWRnZSBpbnN0ZWFkIG9mIHggPD0gZWRn
ZS4KKy8vIEdMU0wgMS4yIHdoaWNoIGlzIG1hbmRhdGVkIGJ5IE9wZW5HTCAyLjEgcHJvdmlkZXM6
CisvLyAgIC0gbWFueSBjaGFuZ2VzIHRvIHJlZHVjZSBkaWZmZXJlbmNlcyB3aGVuIGNvbXBhcmVk
IHRvIHRoZSBFUyBzcGVjaWZpY2F0aW9uLgorLy8gICAtIGludmFyaWFudCBrZXl3b3JkIGFuZCBp
dHMgc3VwcG9ydC4KKy8vICAgLSBjKysgc3R5bGUgbmFtZSBoaWRpbmcgcnVsZXMuCisvLyAgIC0g
YnVpbHQtaW4gdmFyaWFibGUgZ2xfUG9pbnRDb29yZCBmb3IgZnJhZ21lbnQgc2hhZGVycy4KKy8v
ICAgLSBtYXRyaXggY29uc3RydWN0b3JzIHRha2luZyBtYXRyaXggYXMgYXJndW1lbnQuCisvLyAg
IC0gYXJyYXkgYXMgIm91dCIgZnVuY3Rpb24gcGFyYW1ldGVycworLy8KK2NsYXNzIFRWZXJzaW9u
R0xTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBUVmVyc2lvbkdM
U0woU2hTaGFkZXJUeXBlIHR5cGUpOworCisgICAgLy8gUmV0dXJucyAxMjAgaWYgdGhlIGZvbGxv
d2luZyBpcyB1c2VkIHRoZSBzaGFkZXI6CisgICAgLy8gLSAiaW52YXJpYW50IiwKKyAgICAvLyAt
ICJnbF9Qb2ludENvb3JkIiwKKyAgICAvLyAtIG1hdHJpeC9tYXRyaXggY29uc3RydWN0b3JzCisg
ICAgLy8gLSBhcnJheSAib3V0IiBwYXJhbWV0ZXJzCisgICAgLy8gRWxzZSAxMTAgaXMgcmV0dXJu
ZWQuCisgICAgaW50IGdldFZlcnNpb24oKSB7IHJldHVybiBtVmVyc2lvbjsgfQorCisgICAgdmly
dHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKik7CisgICAgdmlydHVhbCBi
b29sIHZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7CisgICAgdmlydHVhbCBib29s
IHZpc2l0VW5hcnkoVmlzaXQsIFRJbnRlcm1VbmFyeSopOworICAgIHZpcnR1YWwgYm9vbCB2aXNp
dFNlbGVjdGlvbihWaXNpdCwgVEludGVybVNlbGVjdGlvbiopOworICAgIHZpcnR1YWwgYm9vbCB2
aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOworICAgIHZpcnR1YWwgYm9v
bCB2aXNpdExvb3AoVmlzaXQsIFRJbnRlcm1Mb29wKik7CisgICAgdmlydHVhbCBib29sIHZpc2l0
QnJhbmNoKFZpc2l0LCBUSW50ZXJtQnJhbmNoKik7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHVw
ZGF0ZVZlcnNpb24oaW50IHZlcnNpb24pOworCitwcml2YXRlOgorICAgIFNoU2hhZGVyVHlwZSBt
U2hhZGVyVHlwZTsKKyAgICBpbnQgbVZlcnNpb247Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVS
X1ZFUlNJT05HTFNMX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9jb21waWxlcmRlYnVnLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2NvbXBpbGVyZGVidWcuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjEwY2JlNDNiOGQ1NDhiOGUyNjE4NThhNzk3NGYyODQzNjM0Y2Q4NGUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9j
b21waWxlcmRlYnVnLmNwcApAQCAtMCwwICsxLDM3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisv
LyBkZWJ1Zy5jcHA6IERlYnVnZ2luZyB1dGlsaXRpZXMuCisKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL2NvbXBpbGVyZGVidWcuaCIKKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1
ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVQ
YXJzZUNvbnRleHQuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4
dC5oIgorCisjaWZkZWYgVFJBQ0VfRU5BQkxFRAorc3RhdGljIGNvbnN0IGludCBrVHJhY2VCdWZm
ZXJMZW4gPSAxMDI0OworCitleHRlcm4gIkMiIHsKK3ZvaWQgVHJhY2UoY29uc3QgY2hhciAqZm9y
bWF0LCAuLi4pIHsKKyAgICBpZiAoIWZvcm1hdCkgcmV0dXJuOworCisgICAgVFBhcnNlQ29udGV4
dCogcGFyc2VDb250ZXh0ID0gR2V0R2xvYmFsUGFyc2VDb250ZXh0KCk7CisgICAgaWYgKHBhcnNl
Q29udGV4dCkgeworICAgICAgICBjaGFyIGJ1ZltrVHJhY2VCdWZmZXJMZW5dOworICAgICAgICB2
YV9saXN0IGFyZ3M7CisgICAgICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7CisgICAgICAgIHZz
bnByaW50ZihidWYsIGtUcmFjZUJ1ZmZlckxlbiwgZm9ybWF0LCBhcmdzKTsKKyAgICAgICAgdmFf
ZW5kKGFyZ3MpOworCisgICAgICAgIHBhcnNlQ29udGV4dC0+dHJhY2UoYnVmKTsKKyAgICB9Cit9
Cit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYgIC8vIFRSQUNFX0VOQUJMRUQKKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvY29tcGls
ZXJkZWJ1Zy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvY29tcGlsZXJkZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdhMzcxNTE2YWYwZmVlYzYxZjQ2ZWUxMTgy
MWJhMjhkMzUxZGQ0OWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9jb21waWxlcmRlYnVnLmgKQEAgLTAsMCArMSw1MyBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gZGVidWcuaDogRGVidWdnaW5nIHV0aWxpdGllcy4K
KworI2lmbmRlZiBDT01QSUxFUl9ERUJVR19IXworI2RlZmluZSBDT01QSUxFUl9ERUJVR19IXwor
CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpZmRlZiBfREVCVUcKKyNkZWZpbmUgVFJBQ0VfRU5B
QkxFRCAgLy8gZGVmaW5lIHRvIGVuYWJsZSBkZWJ1ZyBtZXNzYWdlIHRyYWNpbmcKKyNlbmRpZiAg
Ly8gX0RFQlVHCisKKy8vIE91dHB1dHMgdGV4dCB0byB0aGUgZGVidWcgbG9nCisjaWZkZWYgVFJB
Q0VfRU5BQkxFRAorCisjaWZkZWYgIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAg
Ly8gX19jcGx1c3BsdXMKK3ZvaWQgVHJhY2UoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pOworI2lm
ZGVmICBfX2NwbHVzcGx1cworfQorI2VuZGlmICAvLyBfX2NwbHVzcGx1cworCisjZWxzZSAgIC8v
IFRSQUNFX0VOQUJMRUQKKworI2RlZmluZSBUcmFjZSguLi4pICgodm9pZCkwKQorCisjZW5kaWYg
IC8vIFRSQUNFX0VOQUJMRUQKKworLy8gQSBtYWNybyBhc3NlcnRpbmcgYSBjb25kaXRpb24gYW5k
IG91dHB1dHRpbmcgZmFpbHVyZXMgdG8gdGhlIGRlYnVnIGxvZworI2RlZmluZSBBU1NFUlQoZXhw
cmVzc2lvbikgZG8geyBcCisgICAgaWYoIShleHByZXNzaW9uKSkgXAorICAgICAgICBUcmFjZSgi
QXNzZXJ0IGZhaWxlZDogJXMoJWQpOiAiI2V4cHJlc3Npb24iXG4iLCBfX0ZVTkNUSU9OX18sIF9f
TElORV9fKTsgXAorICAgIGFzc2VydChleHByZXNzaW9uKTsgXAorfSB3aGlsZSgwKQorCisjZGVm
aW5lIFVOSU1QTEVNRU5URUQoKSBkbyB7IFwKKyAgICBUcmFjZSgiVW5pbXBsZW1lbnRlZCBpbnZv
a2VkOiAlcyglZClcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOyBcCisgICAgYXNzZXJ0KGZh
bHNlKTsgXAorfSB3aGlsZSgwKQorCisjZGVmaW5lIFVOUkVBQ0hBQkxFKCkgZG8geyBcCisgICAg
VHJhY2UoIlVucmVhY2hhYmxlIHJlYWNoZWQ6ICVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBfX0xJ
TkVfXyk7IFwKKyAgICBhc3NlcnQoZmFsc2UpOyBcCit9IHdoaWxlKDApCisKKyNlbmRpZiAgIC8v
IENPTVBJTEVSX0RFQlVHX0hfCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9E
ZXBlbmRlbmN5R3JhcGguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5ZGRmNWM0MzkyNTg4M2M3OTRjNzE0ZTc5
OTg2ZTIzYWJiNTE0N2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwCkBA
IC0wLDAgKzEsOTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTog
NDcxOCkKKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5j
eUdyYXBoLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRl
bmN5R3JhcGhCdWlsZGVyLmgiCisKK1REZXBlbmRlbmN5R3JhcGg6OlREZXBlbmRlbmN5R3JhcGgo
VEludGVybU5vZGUqIGludGVybU5vZGUpCit7CisgICAgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6
OmJ1aWxkKGludGVybU5vZGUsIHRoaXMpOworfQorCitURGVwZW5kZW5jeUdyYXBoOjp+VERlcGVu
ZGVuY3lHcmFwaCgpCit7CisgICAgZm9yIChUR3JhcGhOb2RlVmVjdG9yOjpjb25zdF9pdGVyYXRv
ciBpdGVyID0gbUFsbE5vZGVzLmJlZ2luKCk7IGl0ZXIgIT0gbUFsbE5vZGVzLmVuZCgpOyArK2l0
ZXIpCisgICAgeworICAgICAgICBUR3JhcGhOb2RlKiBub2RlID0gKml0ZXI7CisgICAgICAgIGRl
bGV0ZSBub2RlOworICAgIH0KK30KKworVEdyYXBoQXJndW1lbnQqIFREZXBlbmRlbmN5R3JhcGg6
OmNyZWF0ZUFyZ3VtZW50KFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXJndW1l
bnROdW1iZXIpCit7CisgICAgVEdyYXBoQXJndW1lbnQqIGFyZ3VtZW50ID0gbmV3IFRHcmFwaEFy
Z3VtZW50KGludGVybUZ1bmN0aW9uQ2FsbCwgYXJndW1lbnROdW1iZXIpOworICAgIG1BbGxOb2Rl
cy5wdXNoX2JhY2soYXJndW1lbnQpOworICAgIHJldHVybiBhcmd1bWVudDsKK30KKworVEdyYXBo
RnVuY3Rpb25DYWxsKiBURGVwZW5kZW5jeUdyYXBoOjpjcmVhdGVGdW5jdGlvbkNhbGwoVEludGVy
bUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKQoreworICAgIFRHcmFwaEZ1bmN0aW9uQ2Fs
bCogZnVuY3Rpb25DYWxsID0gbmV3IFRHcmFwaEZ1bmN0aW9uQ2FsbChpbnRlcm1GdW5jdGlvbkNh
bGwpOworICAgIG1BbGxOb2Rlcy5wdXNoX2JhY2soZnVuY3Rpb25DYWxsKTsKKyAgICBpZiAoZnVu
Y3Rpb25DYWxsLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKS0+aXNVc2VyRGVmaW5lZCgpKQorICAg
ICAgICBtVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzLnB1c2hfYmFjayhmdW5jdGlvbkNhbGwpOwor
ICAgIHJldHVybiBmdW5jdGlvbkNhbGw7Cit9CisKK1RHcmFwaFN5bWJvbCogVERlcGVuZGVuY3lH
cmFwaDo6Z2V0T3JDcmVhdGVTeW1ib2woVEludGVybVN5bWJvbCogaW50ZXJtU3ltYm9sKQorewor
ICAgIFRTeW1ib2xJZE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1TeW1ib2xJZE1hcC5maW5k
KGludGVybVN5bWJvbC0+Z2V0SWQoKSk7CisKKyAgICBUR3JhcGhTeW1ib2wqIHN5bWJvbCA9IE5V
TEw7CisKKyAgICBpZiAoaXRlciAhPSBtU3ltYm9sSWRNYXAuZW5kKCkpIHsKKyAgICAgICAgVFN5
bWJvbElkUGFpciBwYWlyID0gKml0ZXI7CisgICAgICAgIHN5bWJvbCA9IHBhaXIuc2Vjb25kOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHN5bWJvbCA9IG5ldyBUR3JhcGhTeW1ib2woaW50ZXJtU3lt
Ym9sKTsKKyAgICAgICAgbUFsbE5vZGVzLnB1c2hfYmFjayhzeW1ib2wpOworCisgICAgICAgIFRT
eW1ib2xJZFBhaXIgcGFpcihpbnRlcm1TeW1ib2wtPmdldElkKCksIHN5bWJvbCk7CisgICAgICAg
IG1TeW1ib2xJZE1hcC5pbnNlcnQocGFpcik7CisKKyAgICAgICAgLy8gV2Ugc2F2ZSBhbGwgc2Ft
cGxlciBzeW1ib2xzIGluIGEgY29sbGVjdGlvbiwgc28gd2UgY2FuIHN0YXJ0IGdyYXBoIHRyYXZl
cnNhbHMgZnJvbSB0aGVtIHF1aWNrbHkuCisgICAgICAgIGlmIChJc1NhbXBsZXIoaW50ZXJtU3lt
Ym9sLT5nZXRCYXNpY1R5cGUoKSkpCisgICAgICAgICAgICBtU2FtcGxlclN5bWJvbHMucHVzaF9i
YWNrKHN5bWJvbCk7CisgICAgfQorCisgICAgcmV0dXJuIHN5bWJvbDsKK30KKworVEdyYXBoU2Vs
ZWN0aW9uKiBURGVwZW5kZW5jeUdyYXBoOjpjcmVhdGVTZWxlY3Rpb24oVEludGVybVNlbGVjdGlv
biogaW50ZXJtU2VsZWN0aW9uKQoreworICAgIFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uID0g
bmV3IFRHcmFwaFNlbGVjdGlvbihpbnRlcm1TZWxlY3Rpb24pOworICAgIG1BbGxOb2Rlcy5wdXNo
X2JhY2soc2VsZWN0aW9uKTsKKyAgICByZXR1cm4gc2VsZWN0aW9uOworfQorCitUR3JhcGhMb29w
KiBURGVwZW5kZW5jeUdyYXBoOjpjcmVhdGVMb29wKFRJbnRlcm1Mb29wKiBpbnRlcm1Mb29wKQor
eworICAgIFRHcmFwaExvb3AqIGxvb3AgPSBuZXcgVEdyYXBoTG9vcChpbnRlcm1Mb29wKTsKKyAg
ICBtQWxsTm9kZXMucHVzaF9iYWNrKGxvb3ApOworICAgIHJldHVybiBsb29wOworfQorCitUR3Jh
cGhMb2dpY2FsT3AqIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUxvZ2ljYWxPcChUSW50ZXJtQmlu
YXJ5KiBpbnRlcm1Mb2dpY2FsT3ApCit7CisgICAgVEdyYXBoTG9naWNhbE9wKiBsb2dpY2FsT3Ag
PSBuZXcgVEdyYXBoTG9naWNhbE9wKGludGVybUxvZ2ljYWxPcCk7CisgICAgbUFsbE5vZGVzLnB1
c2hfYmFjayhsb2dpY2FsT3ApOworICAgIHJldHVybiBsb2dpY2FsT3A7Cit9CisKK2NvbnN0IGNo
YXIqIFRHcmFwaExvZ2ljYWxPcDo6Z2V0T3BTdHJpbmcoKSBjb25zdAoreworICAgIGNvbnN0IGNo
YXIqIG9wU3RyaW5nID0gTlVMTDsKKyAgICBzd2l0Y2ggKGdldEludGVybUxvZ2ljYWxPcCgpLT5n
ZXRPcCgpKSB7CisgICAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDogb3BTdHJpbmcgPSAiYW5kIjsg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9naWNhbE9yOiBvcFN0cmluZyA9ICJvciI7IGJyZWFr
OworICAgICAgICBkZWZhdWx0OiBvcFN0cmluZyA9ICJ1bmtub3duIjsgYnJlYWs7CisgICAgfQor
ICAgIHJldHVybiBvcFN0cmluZzsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgv
RGVwZW5kZW5jeUdyYXBoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWVhMWNiYjgzN2RjYjQ0ZGZmMWIxMjI1MWZl
ODhmYzBmM2Q4YTA1NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oCkBAIC0w
LDAgKzEsMjEyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9ERVBHUkFQSF9E
RVBFTkRFTkNZX0dSQVBIX0gKKyNkZWZpbmUgQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9H
UkFQSF9ICisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgor
CisjaW5jbHVkZSA8c2V0PgorI2luY2x1ZGUgPHN0YWNrPgorCitjbGFzcyBUR3JhcGhOb2RlOwor
Y2xhc3MgVEdyYXBoUGFyZW50Tm9kZTsKK2NsYXNzIFRHcmFwaEFyZ3VtZW50OworY2xhc3MgVEdy
YXBoRnVuY3Rpb25DYWxsOworY2xhc3MgVEdyYXBoU3ltYm9sOworY2xhc3MgVEdyYXBoU2VsZWN0
aW9uOworY2xhc3MgVEdyYXBoTG9vcDsKK2NsYXNzIFRHcmFwaExvZ2ljYWxPcDsKK2NsYXNzIFRE
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI7CitjbGFzcyBURGVwZW5kZW5jeUdyYXBoT3V0cHV0Owor
Cit0eXBlZGVmIHN0ZDo6c2V0PFRHcmFwaE5vZGUqPiBUR3JhcGhOb2RlU2V0OwordHlwZWRlZiBz
dGQ6OnZlY3RvcjxUR3JhcGhOb2RlKj4gVEdyYXBoTm9kZVZlY3RvcjsKK3R5cGVkZWYgc3RkOjp2
ZWN0b3I8VEdyYXBoU3ltYm9sKj4gVEdyYXBoU3ltYm9sVmVjdG9yOwordHlwZWRlZiBzdGQ6OnZl
Y3RvcjxUR3JhcGhGdW5jdGlvbkNhbGwqPiBURnVuY3Rpb25DYWxsVmVjdG9yOworCisvLworLy8g
QmFzZSBjbGFzcyBmb3IgYWxsIGRlcGVuZGVuY3kgZ3JhcGggbm9kZXMuCisvLworY2xhc3MgVEdy
YXBoTm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoTm9kZShUSW50ZXJtTm9kZSogbm9kZSkgOiBp
bnRlcm1Ob2RlKG5vZGUpIHt9CisgICAgdmlydHVhbCB+VEdyYXBoTm9kZSgpIHt9CisgICAgdmly
dHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVy
c2VyKTsKK3Byb3RlY3RlZDoKKyAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKK307CisKKy8v
CisvLyBCYXNlIGNsYXNzIGZvciBkZXBlbmRlbmN5IGdyYXBoIG5vZGVzIHRoYXQgbWF5IGhhdmUg
Y2hpbGRyZW4uCisvLworY2xhc3MgVEdyYXBoUGFyZW50Tm9kZSA6IHB1YmxpYyBUR3JhcGhOb2Rl
IHsKK3B1YmxpYzoKKyAgICBUR3JhcGhQYXJlbnROb2RlKFRJbnRlcm1Ob2RlKiBub2RlKSA6IFRH
cmFwaE5vZGUobm9kZSkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhQYXJlbnROb2RlKCkge30KKyAg
ICB2b2lkIGFkZERlcGVuZGVudE5vZGUoVEdyYXBoTm9kZSogbm9kZSkgeyBpZiAobm9kZSAhPSB0
aGlzKSBtRGVwZW5kZW50Tm9kZXMuaW5zZXJ0KG5vZGUpOyB9CisgICAgdmlydHVhbCB2b2lkIHRy
YXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK3ByaXZh
dGU6CisgICAgVEdyYXBoTm9kZVNldCBtRGVwZW5kZW50Tm9kZXM7Cit9OworCisvLworLy8gSGFu
ZGxlIGZ1bmN0aW9uIGNhbGwgYXJndW1lbnRzLgorLy8KK2NsYXNzIFRHcmFwaEFyZ3VtZW50IDog
cHVibGljIFRHcmFwaFBhcmVudE5vZGUgeworcHVibGljOgorICAgIFRHcmFwaEFyZ3VtZW50KFRJ
bnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCwgaW50IGFyZ3VtZW50TnVtYmVyKQor
ICAgICAgICA6IFRHcmFwaFBhcmVudE5vZGUoaW50ZXJtRnVuY3Rpb25DYWxsKQorICAgICAgICAs
IG1Bcmd1bWVudE51bWJlcihhcmd1bWVudE51bWJlcikge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhB
cmd1bWVudCgpIHt9CisgICAgY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogZ2V0SW50ZXJtRnVuY3Rp
b25DYWxsKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsgfQor
ICAgIGludCBnZXRBcmd1bWVudE51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1Bcmd1bWVudE51bWJl
cjsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2Vy
KiBncmFwaFRyYXZlcnNlcik7Citwcml2YXRlOgorICAgIGludCBtQXJndW1lbnROdW1iZXI7Cit9
OworCisvLworLy8gSGFuZGxlIGZ1bmN0aW9uIGNhbGxzLgorLy8KK2NsYXNzIFRHcmFwaEZ1bmN0
aW9uQ2FsbCA6IHB1YmxpYyBUR3JhcGhQYXJlbnROb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhG
dW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKQorICAgICAg
ICA6IFRHcmFwaFBhcmVudE5vZGUoaW50ZXJtRnVuY3Rpb25DYWxsKSB7fQorICAgIHZpcnR1YWwg
flRHcmFwaEZ1bmN0aW9uQ2FsbCgpIHt9CisgICAgY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogZ2V0
SW50ZXJtRnVuY3Rpb25DYWxsKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNBZ2dy
ZWdhdGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJh
dmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxlIHN5bWJvbHMuCisv
LworY2xhc3MgVEdyYXBoU3ltYm9sIDogcHVibGljIFRHcmFwaFBhcmVudE5vZGUgeworcHVibGlj
OgorICAgIFRHcmFwaFN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wpIDogVEdyYXBo
UGFyZW50Tm9kZShpbnRlcm1TeW1ib2wpIHt9CisgICAgdmlydHVhbCB+VEdyYXBoU3ltYm9sKCkg
e30KKyAgICBjb25zdCBUSW50ZXJtU3ltYm9sKiBnZXRJbnRlcm1TeW1ib2woKSBjb25zdCB7IHJl
dHVybiBpbnRlcm1Ob2RlLT5nZXRBc1N5bWJvbE5vZGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0
cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9Owor
CisvLworLy8gSGFuZGxlIGlmIHN0YXRlbWVudHMgYW5kIHRlcm5hcnkgb3BlcmF0b3JzLgorLy8K
K2NsYXNzIFRHcmFwaFNlbGVjdGlvbiA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAg
ICBUR3JhcGhTZWxlY3Rpb24oVEludGVybVNlbGVjdGlvbiogaW50ZXJtU2VsZWN0aW9uKSA6IFRH
cmFwaE5vZGUoaW50ZXJtU2VsZWN0aW9uKSB7fQorICAgIHZpcnR1YWwgflRHcmFwaFNlbGVjdGlv
bigpIHt9CisgICAgY29uc3QgVEludGVybVNlbGVjdGlvbiogZ2V0SW50ZXJtU2VsZWN0aW9uKCkg
Y29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNTZWxlY3Rpb25Ob2RlKCk7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2
ZXJzZXIpOworfTsKKworLy8KKy8vIEhhbmRsZSBmb3IsIGRvLXdoaWxlLCBhbmQgd2hpbGUgbG9v
cHMuCisvLworY2xhc3MgVEdyYXBoTG9vcCA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoK
KyAgICBUR3JhcGhMb29wKFRJbnRlcm1Mb29wKiBpbnRlcm1Mb29wKSA6IFRHcmFwaE5vZGUoaW50
ZXJtTG9vcCkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhMb29wKCkge30KKyAgICBjb25zdCBUSW50
ZXJtTG9vcCogZ2V0SW50ZXJtTG9vcCgpIGNvbnN0IHsgcmV0dXJuIGludGVybU5vZGUtPmdldEFz
TG9vcE5vZGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBo
VHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxlIGxvZ2ljYWwg
YW5kLCBvci4KKy8vCitjbGFzcyBUR3JhcGhMb2dpY2FsT3AgOiBwdWJsaWMgVEdyYXBoTm9kZSB7
CitwdWJsaWM6CisgICAgVEdyYXBoTG9naWNhbE9wKFRJbnRlcm1CaW5hcnkqIGludGVybUxvZ2lj
YWxPcCkgOiBUR3JhcGhOb2RlKGludGVybUxvZ2ljYWxPcCkge30KKyAgICB2aXJ0dWFsIH5UR3Jh
cGhMb2dpY2FsT3AoKSB7fQorICAgIGNvbnN0IFRJbnRlcm1CaW5hcnkqIGdldEludGVybUxvZ2lj
YWxPcCgpIGNvbnN0IHsgcmV0dXJuIGludGVybU5vZGUtPmdldEFzQmluYXJ5Tm9kZSgpOyB9Cisg
ICAgY29uc3QgY2hhciogZ2V0T3BTdHJpbmcoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgdHJh
dmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOworfTsKKwor
Ly8KKy8vIEEgZGVwZW5kZW5jeSBncmFwaCBvZiBzeW1ib2xzLCBmdW5jdGlvbiBjYWxscywgY29u
ZGl0aW9ucyBldGMuCisvLworLy8gVGhpcyBjbGFzcyBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdG8g
dGhlIGVudHJ5IHBvaW50cyBvZiB0aGUgZGVwZW5kZW5jeSBncmFwaC4KKy8vCisvLyBEZXBlbmRl
bmN5IGdyYXBoIG5vZGVzIHNob3VsZCBiZSBjcmVhdGVkIGJ5IHVzaW5nIG9uZSBvZiB0aGUgcHJv
dmlkZWQgImNyZWF0ZS4uLiIgbWV0aG9kcy4KKy8vIFRoaXMgY2xhc3MgKGFuZCBub2JvZHkgZWxz
ZSkgbWFuYWdlcyB0aGUgbWVtb3J5IG9mIHRoZSBjcmVhdGVkIG5vZGVzLgorLy8gTm9kZXMgbWF5
IG5vdCBiZSByZW1vdmVkIGFmdGVyIGJlaW5nIGFkZGVkLCBzbyBhbGwgY3JlYXRlZCBub2RlcyB3
aWxsIGV4aXN0IHdoaWxlIHRoZQorLy8gVERlcGVuZGVuY3lHcmFwaCBpbnN0YW5jZSBleGlzdHMu
CisvLworY2xhc3MgVERlcGVuZGVuY3lHcmFwaCB7CitwdWJsaWM6CisgICAgVERlcGVuZGVuY3lH
cmFwaChUSW50ZXJtTm9kZSogaW50ZXJtTm9kZSk7CisgICAgflREZXBlbmRlbmN5R3JhcGgoKTsK
KyAgICBUR3JhcGhOb2RlVmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0
dXJuIG1BbGxOb2Rlcy5iZWdpbigpOyB9CisgICAgVEdyYXBoTm9kZVZlY3Rvcjo6Y29uc3RfaXRl
cmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbUFsbE5vZGVzLmVuZCgpOyB9CisKKyAgICBUR3Jh
cGhTeW1ib2xWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luU2FtcGxlclN5bWJvbHMoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1TYW1wbGVyU3ltYm9scy5iZWdpbigpOworICAgIH0K
KworICAgIFRHcmFwaFN5bWJvbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kU2FtcGxlclN5bWJv
bHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1TYW1wbGVyU3ltYm9scy5lbmQoKTsK
KyAgICB9CisKKyAgICBURnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpblVz
ZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbVVz
ZXJEZWZpbmVkRnVuY3Rpb25DYWxscy5iZWdpbigpOworICAgIH0KKworICAgIFRGdW5jdGlvbkNh
bGxWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZFVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscy5lbmQo
KTsKKyAgICB9CisKKyAgICBUR3JhcGhBcmd1bWVudCogY3JlYXRlQXJndW1lbnQoVEludGVybUFn
Z3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsLCBpbnQgYXJndW1lbnROdW1iZXIpOworICAgIFRH
cmFwaEZ1bmN0aW9uQ2FsbCogY3JlYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGlu
dGVybUZ1bmN0aW9uQ2FsbCk7CisgICAgVEdyYXBoU3ltYm9sKiBnZXRPckNyZWF0ZVN5bWJvbChU
SW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wpOworICAgIFRHcmFwaFNlbGVjdGlvbiogY3JlYXRl
U2VsZWN0aW9uKFRJbnRlcm1TZWxlY3Rpb24qIGludGVybVNlbGVjdGlvbik7CisgICAgVEdyYXBo
TG9vcCogY3JlYXRlTG9vcChUSW50ZXJtTG9vcCogaW50ZXJtTG9vcCk7CisgICAgVEdyYXBoTG9n
aWNhbE9wKiBjcmVhdGVMb2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJtTG9naWNhbE9wKTsK
K3ByaXZhdGU6CisgICAgdHlwZWRlZiBUTWFwPGludCwgVEdyYXBoU3ltYm9sKj4gVFN5bWJvbElk
TWFwOworICAgIHR5cGVkZWYgc3RkOjpwYWlyPGludCwgVEdyYXBoU3ltYm9sKj4gVFN5bWJvbElk
UGFpcjsKKworICAgIFRHcmFwaE5vZGVWZWN0b3IgbUFsbE5vZGVzOworICAgIFRHcmFwaFN5bWJv
bFZlY3RvciBtU2FtcGxlclN5bWJvbHM7CisgICAgVEZ1bmN0aW9uQ2FsbFZlY3RvciBtVXNlckRl
ZmluZWRGdW5jdGlvbkNhbGxzOworICAgIFRTeW1ib2xJZE1hcCBtU3ltYm9sSWRNYXA7Cit9Owor
CisvLworLy8gRm9yIHRyYXZlcnNpbmcgdGhlIGRlcGVuZGVuY3kgZ3JhcGguIFVzZXJzIHNob3Vs
ZCBkZXJpdmUgZnJvbSB0aGlzLAorLy8gcHV0IHRoZWlyIHRyYXZlcnNhbCBzcGVjaWZpYyBkYXRh
IGluIGl0LCBhbmQgdGhlbiBwYXNzIGl0IHRvIGEKKy8vIHRyYXZlcnNlIG1ldGhvZC4KKy8vCisv
LyBXaGVuIHVzaW5nIHRoaXMsIGp1c3QgZmlsbCBpbiB0aGUgbWV0aG9kcyBmb3Igbm9kZXMgeW91
IHdhbnQgdmlzaXRlZC4KKy8vCitjbGFzcyBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyIHsKK3B1
YmxpYzoKKyAgICBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKCkgOiBtRGVwdGgoMCkge30KKwor
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUR3JhcGhTeW1ib2wqIHN5bWJvbCkge307Cisg
ICAgdmlydHVhbCB2b2lkIHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHNlbGVjdGlvbikg
e307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2Fs
bCogZnVuY3Rpb25DYWxsKSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTZWxlY3Rpb24oVEdy
YXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24pIHt9OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvb3Ao
VEdyYXBoTG9vcCogbG9vcCkge307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0TG9naWNhbE9wKFRH
cmFwaExvZ2ljYWxPcCogbG9naWNhbE9wKSB7fTsKKworICAgIGludCBnZXREZXB0aCgpIGNvbnN0
IHsgcmV0dXJuIG1EZXB0aDsgfQorICAgIHZvaWQgaW5jcmVtZW50RGVwdGgoKSB7ICsrbURlcHRo
OyB9CisgICAgdm9pZCBkZWNyZW1lbnREZXB0aCgpIHsgLS1tRGVwdGg7IH0KKworICAgIHZvaWQg
Y2xlYXJWaXNpdGVkKCkgeyBtVmlzaXRlZC5jbGVhcigpOyB9CisgICAgdm9pZCBtYXJrVmlzaXRl
ZChUR3JhcGhOb2RlKiBub2RlKSB7IG1WaXNpdGVkLmluc2VydChub2RlKTsgfQorICAgIGJvb2wg
aXNWaXNpdGVkKFRHcmFwaE5vZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIG1WaXNpdGVkLmZpbmQo
bm9kZSkgIT0gbVZpc2l0ZWQuZW5kKCk7IH0KK3ByaXZhdGU6CisgICAgaW50IG1EZXB0aDsKKyAg
ICBUR3JhcGhOb2RlU2V0IG1WaXNpdGVkOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBl
bmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmQ1ZjJjYmE1ZmMwMTg3MzRkMTg1N2ZkOGQ1OTllNzBhNWYyNjc4NTgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcApAQCAtMCwwICsxLDIyNyBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0Rl
cGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCIKKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6
YnVpbGQoVEludGVybU5vZGUqIG5vZGUsIFREZXBlbmRlbmN5R3JhcGgqIGdyYXBoKQoreworICAg
IFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyIGJ1aWxkZXIoZ3JhcGgpOworICAgIGJ1aWxkZXIuYnVp
bGQobm9kZSk7Cit9CisKK2Jvb2wgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdncmVn
YXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUpCit7Cisg
ICAgc3dpdGNoIChpbnRlcm1BZ2dyZWdhdGUtPmdldE9wKCkpIHsKKyAgICAgICAgY2FzZSBFT3BG
dW5jdGlvbjogdmlzaXRGdW5jdGlvbkRlZmluaXRpb24oaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wRnVuY3Rpb25DYWxsOiB2aXNpdEZ1bmN0aW9uQ2FsbChpbnRlcm1B
Z2dyZWdhdGUpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogdmlzaXRBZ2dyZWdhdGVDaGlsZHJl
bihpbnRlcm1BZ2dyZWdhdGUpOyBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0RnVuY3Rpb25EZWZpbml0aW9u
KFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUFnZ3JlZ2F0ZSkKK3sKKyAgICAvLyBDdXJyZW50bHks
IHdlIGRvIG5vdCBzdXBwb3J0IHVzZXIgZGVmaW5lZCBmdW5jdGlvbnMuCisgICAgaWYgKGludGVy
bUFnZ3JlZ2F0ZS0+Z2V0TmFtZSgpICE9ICJtYWluKCIpCisgICAgICAgIHJldHVybjsKKworICAg
IHZpc2l0QWdncmVnYXRlQ2hpbGRyZW4oaW50ZXJtQWdncmVnYXRlKTsKK30KKworLy8gVGFrZXMg
YW4gZXhwcmVzc2lvbiBsaWtlICJmKHgpIiBhbmQgY3JlYXRlcyBhIGRlcGVuZGVuY3kgZ3JhcGgg
bGlrZQorLy8gInggLT4gYXJndW1lbnQgMCAtPiBmdW5jdGlvbiBjYWxsIi4KK3ZvaWQgVERlcGVu
ZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0RnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGlu
dGVybUZ1bmN0aW9uQ2FsbCkKK3sKKyAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2Fs
bCA9IG1HcmFwaC0+Y3JlYXRlRnVuY3Rpb25DYWxsKGludGVybUZ1bmN0aW9uQ2FsbCk7CisKKyAg
ICAvLyBSdW4gdGhyb3VnaCB0aGUgZnVuY3Rpb24gY2FsbCBhcmd1bWVudHMuCisgICAgaW50IGFy
Z3VtZW50TnVtYmVyID0gMDsKKyAgICBUSW50ZXJtU2VxdWVuY2UmIGludGVybUFyZ3VtZW50cyA9
IGludGVybUZ1bmN0aW9uQ2FsbC0+Z2V0U2VxdWVuY2UoKTsKKyAgICBmb3IgKFRJbnRlcm1TZXF1
ZW5jZTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGludGVybUFyZ3VtZW50cy5iZWdpbigpOworICAg
ICAgICAgaXRlciAhPSBpbnRlcm1Bcmd1bWVudHMuZW5kKCk7CisgICAgICAgICArK2l0ZXIsICsr
YXJndW1lbnROdW1iZXIpCisgICAgeworICAgICAgICBUTm9kZVNldE1haW50YWluZXIgbm9kZVNl
dE1haW50YWluZXIodGhpcyk7CisKKyAgICAgICAgVEludGVybU5vZGUqIGludGVybUFyZ3VtZW50
ID0gKml0ZXI7CisgICAgICAgIGludGVybUFyZ3VtZW50LT50cmF2ZXJzZSh0aGlzKTsKKworICAg
ICAgICBpZiAoVFBhcmVudE5vZGVTZXQqIGFyZ3VtZW50Tm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9w
U2V0KCkpIHsKKyAgICAgICAgICAgIFRHcmFwaEFyZ3VtZW50KiBhcmd1bWVudCA9IG1HcmFwaC0+
Y3JlYXRlQXJndW1lbnQoaW50ZXJtRnVuY3Rpb25DYWxsLCBhcmd1bWVudE51bWJlcik7CisgICAg
ICAgICAgICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShhcmd1bWVudE5vZGVzLCBh
cmd1bWVudCk7CisgICAgICAgICAgICBhcmd1bWVudC0+YWRkRGVwZW5kZW50Tm9kZShmdW5jdGlv
bkNhbGwpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUHVzaCB0aGUgbGVmdG1vc3Qgc3lt
Ym9sIG9mIHRoaXMgZnVuY3Rpb24gY2FsbCBpbnRvIHRoZSBjdXJyZW50IHNldCBvZiBkZXBlbmRl
bnQgc3ltYm9scyB0bworICAgIC8vIHJlcHJlc2VudCB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rp
b24gY2FsbC4KKyAgICAvLyBUaHVzLCBhbiBleHByZXNzaW9uIGxpa2UgInkgPSBmKHgpIiB3aWxs
IHlpZWxkIGEgZGVwZW5kZW5jeSBncmFwaCBsaWtlCisgICAgLy8gInggLT4gYXJndW1lbnQgMCAt
PiBmdW5jdGlvbiBjYWxsIC0+IHkiLgorICAgIC8vIFRoaXMgbGluZSBlc3NlbnRpYWxseSBwYXNz
ZXMgdGhlIGZ1bmN0aW9uIGNhbGwgbm9kZSBiYWNrIHVwIHRvIGFuIGVhcmxpZXIgdmlzaXRBc3Np
Z25tZW50CisgICAgLy8gY2FsbCwgd2hpY2ggd2lsbCBjcmVhdGUgdGhlIGNvbm5lY3Rpb24gImZ1
bmN0aW9uIGNhbGwgLT4geSIuCisgICAgbU5vZGVTZXRzLmluc2VydEludG9Ub3BTZXQoZnVuY3Rp
b25DYWxsKTsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBZ2dyZWdh
dGVDaGlsZHJlbihUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUpCit7CisgICAgVElu
dGVybVNlcXVlbmNlJiBzZXF1ZW5jZSA9IGludGVybUFnZ3JlZ2F0ZS0+Z2V0U2VxdWVuY2UoKTsK
KyAgICBmb3IoVEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBpdGVyID0gc2VxdWVuY2Uu
YmVnaW4oKTsgaXRlciAhPSBzZXF1ZW5jZS5lbmQoKTsgKytpdGVyKQorICAgIHsKKyAgICAgICAg
VEludGVybU5vZGUqIGludGVybUNoaWxkID0gKml0ZXI7CisgICAgICAgIGludGVybUNoaWxkLT50
cmF2ZXJzZSh0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6
OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIGludGVybVN5bWJvbCkKK3sKKyAgICAvLyBQdXNo
IHRoaXMgc3ltYm9sIGludG8gdGhlIHNldCBvZiBkZXBlbmRlbnQgc3ltYm9scyBmb3IgdGhlIGN1
cnJlbnQgYXNzaWdubWVudCBvciBjb25kaXRpb24KKyAgICAvLyB0aGF0IHdlIGFyZSB0cmF2ZXJz
aW5nLgorICAgIFRHcmFwaFN5bWJvbCogc3ltYm9sID0gbUdyYXBoLT5nZXRPckNyZWF0ZVN5bWJv
bChpbnRlcm1TeW1ib2wpOworICAgIG1Ob2RlU2V0cy5pbnNlcnRJbnRvVG9wU2V0KHN5bWJvbCk7
CisKKyAgICAvLyBJZiB0aGlzIHN5bWJvbCBpcyB0aGUgY3VycmVudCBsZWZ0bW9zdCBzeW1ib2wg
dW5kZXIgYW4gYXNzaWdubWVudCwgcmVwbGFjZSB0aGUgcHJldmlvdXMKKyAgICAvLyBsZWZ0bW9z
dCBzeW1ib2wgd2l0aCB0aGlzIHN5bWJvbC4KKyAgICBpZiAoIW1MZWZ0bW9zdFN5bWJvbHMuZW1w
dHkoKSAmJiBtTGVmdG1vc3RTeW1ib2xzLnRvcCgpICE9ICZtUmlnaHRTdWJ0cmVlKSB7CisgICAg
ICAgIG1MZWZ0bW9zdFN5bWJvbHMucG9wKCk7CisgICAgICAgIG1MZWZ0bW9zdFN5bWJvbHMucHVz
aChzeW1ib2wpOworICAgIH0KK30KKworYm9vbCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlz
aXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqIGludGVybUJpbmFyeSkKK3sKKyAg
ICBUT3BlcmF0b3Igb3AgPSBpbnRlcm1CaW5hcnktPmdldE9wKCk7CisgICAgaWYgKG9wID09IEVP
cEluaXRpYWxpemUgfHwgaW50ZXJtQmluYXJ5LT5pc0Fzc2lnbm1lbnQoKSkKKyAgICAgICAgdmlz
aXRBc3NpZ25tZW50KGludGVybUJpbmFyeSk7CisgICAgZWxzZSBpZiAob3AgPT0gRU9wTG9naWNh
bEFuZCB8fCBvcCA9PSBFT3BMb2dpY2FsT3IpCisgICAgICAgIHZpc2l0TG9naWNhbE9wKGludGVy
bUJpbmFyeSk7CisgICAgZWxzZQorICAgICAgICB2aXNpdEJpbmFyeUNoaWxkcmVuKGludGVybUJp
bmFyeSk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXI6OnZpc2l0QXNzaWdubWVudChUSW50ZXJtQmluYXJ5KiBpbnRlcm1Bc3NpZ25tZW50KQor
eworICAgIFRJbnRlcm1UeXBlZCogaW50ZXJtTGVmdCA9IGludGVybUFzc2lnbm1lbnQtPmdldExl
ZnQoKTsKKyAgICBpZiAoIWludGVybUxlZnQpCisgICAgICAgIHJldHVybjsKKworICAgIFRHcmFw
aFN5bWJvbCogbGVmdG1vc3RTeW1ib2wgPSBOVUxMOworCisgICAgeworICAgICAgICBUTm9kZVNl
dE1haW50YWluZXIgbm9kZVNldE1haW50YWluZXIodGhpcyk7CisKKyAgICAgICAgeworICAgICAg
ICAgICAgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lciBsZWZ0bW9zdFN5bWJvbE1haW50YWluZXIo
dGhpcywgbUxlZnRTdWJ0cmVlKTsKKyAgICAgICAgICAgIGludGVybUxlZnQtPnRyYXZlcnNlKHRo
aXMpOworICAgICAgICAgICAgbGVmdG1vc3RTeW1ib2wgPSBtTGVmdG1vc3RTeW1ib2xzLnRvcCgp
OworCisgICAgICAgICAgICAvLyBBZnRlciB0cmF2ZXJzaW5nIHRoZSBsZWZ0IHN1YnRyZWUgb2Yg
dGhpcyBhc3NpZ25tZW50LCB3ZSBzaG91bGQgaGF2ZSBmb3VuZCBhIHJlYWwKKyAgICAgICAgICAg
IC8vIGxlZnRtb3N0IHN5bWJvbCwgYW5kIHRoZSBsZWZ0bW9zdCBzeW1ib2wgc2hvdWxkIG5vdCBi
ZSBhIHBsYWNlaG9sZGVyLgorICAgICAgICAgICAgQVNTRVJUKGxlZnRtb3N0U3ltYm9sICE9ICZt
TGVmdFN1YnRyZWUpOworICAgICAgICAgICAgQVNTRVJUKGxlZnRtb3N0U3ltYm9sICE9ICZtUmln
aHRTdWJ0cmVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVy
bVJpZ2h0ID0gaW50ZXJtQXNzaWdubWVudC0+Z2V0UmlnaHQoKSkgeworICAgICAgICAgICAgVExl
ZnRtb3N0U3ltYm9sTWFpbnRhaW5lciBsZWZ0bW9zdFN5bWJvbE1haW50YWluZXIodGhpcywgbVJp
Z2h0U3VidHJlZSk7CisgICAgICAgICAgICBpbnRlcm1SaWdodC0+dHJhdmVyc2UodGhpcyk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoVFBhcmVudE5vZGVTZXQqIGFzc2lnbm1lbnROb2RlcyA9
IG1Ob2RlU2V0cy5nZXRUb3BTZXQoKSkKKyAgICAgICAgICAgIGNvbm5lY3RNdWx0aXBsZU5vZGVz
VG9TaW5nbGVOb2RlKGFzc2lnbm1lbnROb2RlcywgbGVmdG1vc3RTeW1ib2wpOworICAgIH0KKwor
ICAgIC8vIFB1c2ggdGhlIGxlZnRtb3N0IHN5bWJvbCBvZiB0aGlzIGFzc2lnbm1lbnQgaW50byB0
aGUgY3VycmVudCBzZXQgb2YgZGVwZW5kZW50IHN5bWJvbHMgdG8KKyAgICAvLyByZXByZXNlbnQg
dGhlIHJlc3VsdCBvZiB0aGlzIGFzc2lnbm1lbnQuCisgICAgLy8gQW4gZXhwcmVzc2lvbiBsaWtl
ICJhID0gKGIgPSBjKSIgd2lsbCB5aWVsZCBhIGRlcGVuZGVuY3kgZ3JhcGggbGlrZSAiYyAtPiBi
IC0+IGEiLgorICAgIC8vIFRoaXMgbGluZSBlc3NlbnRpYWxseSBwYXNzZXMgdGhlIGxlZnRtb3N0
IHN5bWJvbCBvZiB0aGUgbmVzdGVkIGFzc2lnbm1lbnQgKCJiIiBpbiB0aGlzCisgICAgLy8gZXhh
bXBsZSkgYmFjayB1cCB0byB0aGUgZWFybGllciB2aXNpdEFzc2lnbm1lbnQgY2FsbCBmb3IgdGhl
IG91dGVyIGFzc2lnbm1lbnQsIHdoaWNoIHdpbGwKKyAgICAvLyBjcmVhdGUgdGhlIGNvbm5lY3Rp
b24gImIgLT4gYSIuCisgICAgbU5vZGVTZXRzLmluc2VydEludG9Ub3BTZXQobGVmdG1vc3RTeW1i
b2wpOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdExvZ2ljYWxPcChU
SW50ZXJtQmluYXJ5KiBpbnRlcm1Mb2dpY2FsT3ApCit7CisgICAgaWYgKFRJbnRlcm1UeXBlZCog
aW50ZXJtTGVmdCA9IGludGVybUxvZ2ljYWxPcC0+Z2V0TGVmdCgpKSB7CisgICAgICAgIFROb2Rl
U2V0UHJvcGFnYXRpbmdNYWludGFpbmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMpOworCisgICAg
ICAgIGludGVybUxlZnQtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBpZiAoVFBhcmVudE5vZGVT
ZXQqIGxlZnROb2RlcyA9IG1Ob2RlU2V0cy5nZXRUb3BTZXQoKSkgeworICAgICAgICAgICAgVEdy
YXBoTG9naWNhbE9wKiBsb2dpY2FsT3AgPSBtR3JhcGgtPmNyZWF0ZUxvZ2ljYWxPcChpbnRlcm1M
b2dpY2FsT3ApOworICAgICAgICAgICAgY29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUo
bGVmdE5vZGVzLCBsb2dpY2FsT3ApOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKFRJbnRl
cm1UeXBlZCogaW50ZXJtUmlnaHQgPSBpbnRlcm1Mb2dpY2FsT3AtPmdldFJpZ2h0KCkpIHsKKyAg
ICAgICAgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lciBsZWZ0bW9zdFN5bWJvbE1haW50YWluZXIo
dGhpcywgbVJpZ2h0U3VidHJlZSk7CisgICAgICAgIGludGVybVJpZ2h0LT50cmF2ZXJzZSh0aGlz
KTsKKyAgICB9Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QmluYXJ5
Q2hpbGRyZW4oVEludGVybUJpbmFyeSogaW50ZXJtQmluYXJ5KQoreworICAgIGlmIChUSW50ZXJt
VHlwZWQqIGludGVybUxlZnQgPSBpbnRlcm1CaW5hcnktPmdldExlZnQoKSkKKyAgICAgICAgaW50
ZXJtTGVmdC0+dHJhdmVyc2UodGhpcyk7CisKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1S
aWdodCA9IGludGVybUJpbmFyeS0+Z2V0UmlnaHQoKSkgeworICAgICAgICBUTGVmdG1vc3RTeW1i
b2xNYWludGFpbmVyIGxlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcih0aGlzLCBtUmlnaHRTdWJ0cmVl
KTsKKyAgICAgICAgaW50ZXJtUmlnaHQtPnRyYXZlcnNlKHRoaXMpOworICAgIH0KK30KKworYm9v
bCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJ
bnRlcm1TZWxlY3Rpb24qIGludGVybVNlbGVjdGlvbikKK3sKKyAgICBpZiAoVEludGVybU5vZGUq
IGludGVybUNvbmRpdGlvbiA9IGludGVybVNlbGVjdGlvbi0+Z2V0Q29uZGl0aW9uKCkpIHsKKyAg
ICAgICAgVE5vZGVTZXRNYWludGFpbmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMpOworCisgICAg
ICAgIGludGVybUNvbmRpdGlvbi0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIGlmIChUUGFyZW50
Tm9kZVNldCogY29uZGl0aW9uTm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0KCkpIHsKKyAgICAg
ICAgICAgIFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uID0gbUdyYXBoLT5jcmVhdGVTZWxlY3Rp
b24oaW50ZXJtU2VsZWN0aW9uKTsKKyAgICAgICAgICAgIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9T
aW5nbGVOb2RlKGNvbmRpdGlvbk5vZGVzLCBzZWxlY3Rpb24pOworICAgICAgICB9CisgICAgfQor
CisgICAgaWYgKFRJbnRlcm1Ob2RlKiBpbnRlcm1UcnVlQmxvY2sgPSBpbnRlcm1TZWxlY3Rpb24t
PmdldFRydWVCbG9jaygpKQorICAgICAgICBpbnRlcm1UcnVlQmxvY2stPnRyYXZlcnNlKHRoaXMp
OworCisgICAgaWYgKFRJbnRlcm1Ob2RlKiBpbnRlcm1GYWxzZUJsb2NrID0gaW50ZXJtU2VsZWN0
aW9uLT5nZXRGYWxzZUJsb2NrKCkpCisgICAgICAgIGludGVybUZhbHNlQmxvY2stPnRyYXZlcnNl
KHRoaXMpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFREZXBlbmRlbmN5R3JhcGhC
dWlsZGVyOjp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKiBpbnRlcm1Mb29wKQor
eworICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybUNvbmRpdGlvbiA9IGludGVybUxvb3AtPmdl
dENvbmRpdGlvbigpKSB7CisgICAgICAgIFROb2RlU2V0TWFpbnRhaW5lciBub2RlU2V0TWFpbnRh
aW5lcih0aGlzKTsKKworICAgICAgICBpbnRlcm1Db25kaXRpb24tPnRyYXZlcnNlKHRoaXMpOwor
ICAgICAgICBpZiAoVFBhcmVudE5vZGVTZXQqIGNvbmRpdGlvbk5vZGVzID0gbU5vZGVTZXRzLmdl
dFRvcFNldCgpKSB7CisgICAgICAgICAgICBUR3JhcGhMb29wKiBsb29wID0gbUdyYXBoLT5jcmVh
dGVMb29wKGludGVybUxvb3ApOworICAgICAgICAgICAgY29ubmVjdE11bHRpcGxlTm9kZXNUb1Np
bmdsZU5vZGUoY29uZGl0aW9uTm9kZXMsIGxvb3ApOworICAgICAgICB9CisgICAgfQorCisgICAg
aWYgKFRJbnRlcm1Ob2RlKiBpbnRlcm1Cb2R5ID0gaW50ZXJtTG9vcC0+Z2V0Qm9keSgpKQorICAg
ICAgICBpbnRlcm1Cb2R5LT50cmF2ZXJzZSh0aGlzKTsKKworICAgIGlmIChUSW50ZXJtVHlwZWQq
IGludGVybUV4cHJlc3Npb24gPSBpbnRlcm1Mb29wLT5nZXRFeHByZXNzaW9uKCkpCisgICAgICAg
IGludGVybUV4cHJlc3Npb24tPnRyYXZlcnNlKHRoaXMpOworCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OmNvbm5lY3RNdWx0aXBsZU5vZGVz
VG9TaW5nbGVOb2RlKFRQYXJlbnROb2RlU2V0KiBub2RlcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRHcmFwaE5vZGUqIG5v
ZGUpIGNvbnN0Cit7CisgICAgZm9yIChUUGFyZW50Tm9kZVNldDo6Y29uc3RfaXRlcmF0b3IgaXRl
ciA9IG5vZGVzLT5iZWdpbigpOyBpdGVyICE9IG5vZGVzLT5lbmQoKTsgKytpdGVyKQorICAgIHsK
KyAgICAgICAgVEdyYXBoUGFyZW50Tm9kZSogY3VycmVudE5vZGUgPSAqaXRlcjsKKyAgICAgICAg
Y3VycmVudE5vZGUtPmFkZERlcGVuZGVudE5vZGUobm9kZSk7CisgICAgfQorfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3Jh
cGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjNlOTI4ZmI3N2ViNDgxZDgzY2Y4NWY1ZmU2YzM1ZmRlYTE4ZWM1NjQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmgKQEAgLTAsMCArMSwxODEgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JB
UEhfQlVJTERFUl9ICisjZGVmaW5lIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhf
QlVJTERFUl9ICisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVu
ZGVuY3lHcmFwaC5oIgorCisvLworLy8gQ3JlYXRlcyBhIGRlcGVuZGVuY3kgZ3JhcGggb2Ygc3lt
Ym9scywgZnVuY3Rpb24gY2FsbHMsIGNvbmRpdGlvbnMgZXRjLiBieSB0cmF2ZXJzaW5nIGEKKy8v
IGludGVybWVkaWF0ZSB0cmVlLgorLy8KK2NsYXNzIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyIDog
cHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGJ1aWxk
KFRJbnRlcm1Ob2RlKiBub2RlLCBURGVwZW5kZW5jeUdyYXBoKiBncmFwaCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOworICAgIHZpcnR1YWwgYm9vbCB2
aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSopOworICAgIHZpcnR1YWwgYm9v
bCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiopOworICAgIHZp
cnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSop
OworICAgIHZpcnR1YWwgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKik7
CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBzdGQ6OnN0YWNrPFRHcmFwaFN5bWJvbCo+IFRTeW1i
b2xTdGFjazsKKyAgICB0eXBlZGVmIHN0ZDo6c2V0PFRHcmFwaFBhcmVudE5vZGUqPiBUUGFyZW50
Tm9kZVNldDsKKworICAgIC8vCisgICAgLy8gRm9yIGNvbGxlY3RpbmcgdGhlIGRlcGVuZGVudCBu
b2RlcyBvZiBhc3NpZ25tZW50cywgY29uZGl0aW9ucywgZXRjLgorICAgIC8vIHdoaWxlIHRyYXZl
cnNpbmcgdGhlIGludGVybWVkaWF0ZSB0cmVlLgorICAgIC8vCisgICAgLy8gVGhpcyBkYXRhIHN0
cnVjdHVyZSBpcyBzdGFjayBvZiBzZXRzLiBFYWNoIHNldCBjb250YWlucyBkZXBlbmRlbmN5IGdy
YXBoIHBhcmVudCBub2Rlcy4KKyAgICAvLworICAgIGNsYXNzIFROb2RlU2V0U3RhY2sgeworICAg
IHB1YmxpYzoKKyAgICAgICAgVE5vZGVTZXRTdGFjaygpIHt9OworICAgICAgICB+VE5vZGVTZXRT
dGFjaygpIHsgY2xlYXIoKTsgfQorCisgICAgICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2Fs
bGVkIGFmdGVyIGEgcHVzaFNldC4KKyAgICAgICAgLy8gUmV0dXJucyBOVUxMIGlmIHRoZSB0b3Ag
c2V0IGlzIGVtcHR5LgorICAgICAgICBUUGFyZW50Tm9kZVNldCogZ2V0VG9wU2V0KCkgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKCFub2RlU2V0cy5lbXB0eSgpKTsKKyAgICAg
ICAgICAgIFRQYXJlbnROb2RlU2V0KiB0b3BTZXQgPSBub2RlU2V0cy50b3AoKTsKKyAgICAgICAg
ICAgIHJldHVybiAhdG9wU2V0LT5lbXB0eSgpID8gdG9wU2V0IDogTlVMTDsKKyAgICAgICAgfQor
CisgICAgICAgIHZvaWQgcHVzaFNldCgpIHsgbm9kZVNldHMucHVzaChuZXcgVFBhcmVudE5vZGVT
ZXQoKSk7IH0KKyAgICAgICAgdm9pZCBwb3BTZXQoKQorICAgICAgICB7CisgICAgICAgICAgICBB
U1NFUlQoIW5vZGVTZXRzLmVtcHR5KCkpOworICAgICAgICAgICAgZGVsZXRlIG5vZGVTZXRzLnRv
cCgpOworICAgICAgICAgICAgbm9kZVNldHMucG9wKCk7CisgICAgICAgIH0KKworICAgICAgICAv
LyBQb3BzIHRoZSB0b3Agc2V0IGFuZCBhZGRzIGl0cyBjb250ZW50cyB0byB0aGUgbmV3IHRvcCBz
ZXQuCisgICAgICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFmdGVyIGEgcHVzaFNl
dC4KKyAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gc2V0IGJlbG93IHRoZSB0b3Agc2V0LCB0aGUg
dG9wIHNldCBpcyBqdXN0IGRlbGV0ZWQuCisgICAgICAgIHZvaWQgcG9wU2V0SW50b05leHQoKQor
ICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIW5vZGVTZXRzLmVtcHR5KCkpOworICAgICAg
ICAgICAgVFBhcmVudE5vZGVTZXQqIG9sZFRvcFNldCA9IG5vZGVTZXRzLnRvcCgpOworICAgICAg
ICAgICAgbm9kZVNldHMucG9wKCk7CisKKyAgICAgICAgICAgIGlmICghbm9kZVNldHMuZW1wdHko
KSkgeworICAgICAgICAgICAgICAgIFRQYXJlbnROb2RlU2V0KiBuZXdUb3BTZXQgPSBub2RlU2V0
cy50b3AoKTsKKyAgICAgICAgICAgICAgICBuZXdUb3BTZXQtPmluc2VydChvbGRUb3BTZXQtPmJl
Z2luKCksIG9sZFRvcFNldC0+ZW5kKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBk
ZWxldGUgb2xkVG9wU2V0OworICAgICAgICB9CisKKyAgICAgICAgLy8gRG9lcyBub3RoaW5nIGlm
IHRoZXJlIGlzIG5vIHRvcCBzZXQuCisgICAgICAgIC8vIFRoaXMgY2FuIGJlIGNhbGxlZCB3aGVu
IHRoZXJlIGlzIG5vIHRvcCBzZXQgaWYgd2UgYXJlIHZpc2l0aW5nCisgICAgICAgIC8vIHN5bWJv
bHMgdGhhdCBhcmUgbm90IHVuZGVyIGFuIGFzc2lnbm1lbnQgb3IgY29uZGl0aW9uLgorICAgICAg
ICAvLyBXZSBkb24ndCBuZWVkIHRvIHRyYWNrIHRob3NlIHN5bWJvbHMuCisgICAgICAgIHZvaWQg
aW5zZXJ0SW50b1RvcFNldChUR3JhcGhQYXJlbnROb2RlKiBub2RlKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAobm9kZVNldHMuZW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgICAgIG5vZGVTZXRzLnRvcCgpLT5pbnNlcnQobm9kZSk7CisgICAgICAgIH0KKwor
ICAgICAgICB2b2lkIGNsZWFyKCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKCFub2Rl
U2V0cy5lbXB0eSgpKQorICAgICAgICAgICAgICAgIHBvcFNldCgpOworICAgICAgICB9CisKKyAg
ICBwcml2YXRlOgorICAgICAgICB0eXBlZGVmIHN0ZDo6c3RhY2s8VFBhcmVudE5vZGVTZXQqPiBU
UGFyZW50Tm9kZVNldFN0YWNrOworCisgICAgICAgIFRQYXJlbnROb2RlU2V0U3RhY2sgbm9kZVNl
dHM7CisgICAgfTsKKworICAgIC8vCisgICAgLy8gQW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBw
dXNoZXMgYSBuZXcgbm9kZSBzZXQgd2hlbiBpbnN0YW50aWF0ZWQuCisgICAgLy8gV2hlbiB0aGUg
aW5zdGFuY2UgZ29lcyBvdXQgb2Ygc2NvcGUsIGl0IGFuZCBwb3BzIHRoZSBub2RlIHNldC4KKyAg
ICAvLworICAgIGNsYXNzIFROb2RlU2V0TWFpbnRhaW5lciB7CisgICAgcHVibGljOgorICAgICAg
ICBUTm9kZVNldE1haW50YWluZXIoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIqIGZhY3RvcnkpCisg
ICAgICAgICAgICA6IHNldHMoZmFjdG9yeS0+bU5vZGVTZXRzKSB7IHNldHMucHVzaFNldCgpOyB9
CisgICAgICAgIH5UTm9kZVNldE1haW50YWluZXIoKSB7IHNldHMucG9wU2V0KCk7IH0KKyAgICBw
cm90ZWN0ZWQ6CisgICAgICAgIFROb2RlU2V0U3RhY2smIHNldHM7CisgICAgfTsKKworICAgIC8v
CisgICAgLy8gQW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBwdXNoZXMgYSBuZXcgbm9kZSBzZXQg
d2hlbiBpbnN0YW50aWF0ZWQuCisgICAgLy8gV2hlbiB0aGUgaW5zdGFuY2UgZ29lcyBvdXQgb2Yg
c2NvcGUsIGl0IGFuZCBwb3BzIHRoZSB0b3Agbm9kZSBzZXQgYW5kIGFkZHMgaXRzIGNvbnRlbnRz
IHRvCisgICAgLy8gdGhlIG5ldyB0b3Agbm9kZSBzZXQuCisgICAgLy8KKyAgICBjbGFzcyBUTm9k
ZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lciB7CisgICAgcHVibGljOgorICAgICAgICBUTm9kZVNl
dFByb3BhZ2F0aW5nTWFpbnRhaW5lcihURGVwZW5kZW5jeUdyYXBoQnVpbGRlciogZmFjdG9yeSkK
KyAgICAgICAgICAgIDogc2V0cyhmYWN0b3J5LT5tTm9kZVNldHMpIHsgc2V0cy5wdXNoU2V0KCk7
IH0KKyAgICAgICAgflROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyKCkgeyBzZXRzLnBvcFNl
dEludG9OZXh0KCk7IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFROb2RlU2V0U3RhY2smIHNl
dHM7CisgICAgfTsKKworICAgIC8vCisgICAgLy8gQW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBr
ZWVwcyB0cmFjayBvZiB0aGUgbGVmdG1vc3Qgc3ltYm9sIHdoaWxlIHdlJ3JlIGV4cGxvcmluZyBh
bgorICAgIC8vIGFzc2lnbm1lbnQuCisgICAgLy8gSXQgd2lsbCBwdXNoIHRoZSBwbGFjZWhvbGRl
ciBzeW1ib2wga0xlZnRTdWJ0cmVlIHdoZW4gaW5zdGFudGlhdGVkIHVuZGVyIGEgbGVmdCBzdWJ0
cmVlLAorICAgIC8vIGFuZCBrUmlnaHRTdWJ0cmVlIHVuZGVyIGEgcmlnaHQgc3VidHJlZS4KKyAg
ICAvLyBXaGVuIGl0IGdvZXMgb3V0IG9mIHNjb3BlLCBpdCB3aWxsIHBvcCB0aGUgbGVmdG1vc3Qg
c3ltYm9sIGF0IHRoZSB0b3Agb2YgdGhlIHNjb3BlLgorICAgIC8vIER1cmluZyB0cmF2ZXJzYWws
IHRoZSBURGVwZW5kZW5jeUdyYXBoQnVpbGRlciB3aWxsIHJlcGxhY2Uga0xlZnRTdWJ0cmVlIHdp
dGggYSByZWFsIHN5bWJvbC4KKyAgICAvLyBrUmlnaHRTdWJ0cmVlIHdpbGwgbmV2ZXIgYmUgcmVw
bGFjZWQgYnkgYSByZWFsIHN5bWJvbCBiZWNhdXNlIHdlIGFyZSB0cmFja2luZyB0aGUgbGVmdG1v
c3QKKyAgICAvLyBzeW1ib2wuCisgICAgLy8KKyAgICBjbGFzcyBUTGVmdG1vc3RTeW1ib2xNYWlu
dGFpbmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIo
VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIqIGZhY3RvcnksIFRHcmFwaFN5bWJvbCYgc3VidHJlZSkK
KyAgICAgICAgICAgIDogbGVmdG1vc3RTeW1ib2xzKGZhY3RvcnktPm1MZWZ0bW9zdFN5bWJvbHMp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG5lZWRzUGxhY2Vob2xkZXJTeW1ib2wgPSBsZWZ0bW9z
dFN5bWJvbHMuZW1wdHkoKSB8fCBsZWZ0bW9zdFN5bWJvbHMudG9wKCkgIT0gJnN1YnRyZWU7Cisg
ICAgICAgICAgICBpZiAobmVlZHNQbGFjZWhvbGRlclN5bWJvbCkKKyAgICAgICAgICAgICAgICBs
ZWZ0bW9zdFN5bWJvbHMucHVzaCgmc3VidHJlZSk7CisgICAgICAgIH0KKworICAgICAgICB+VExl
ZnRtb3N0U3ltYm9sTWFpbnRhaW5lcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChuZWVk
c1BsYWNlaG9sZGVyU3ltYm9sKQorICAgICAgICAgICAgICAgIGxlZnRtb3N0U3ltYm9scy5wb3Ao
KTsKKyAgICAgICAgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgICBUU3ltYm9sU3RhY2smIGxl
ZnRtb3N0U3ltYm9sczsKKyAgICAgICAgYm9vbCBuZWVkc1BsYWNlaG9sZGVyU3ltYm9sOworICAg
IH07CisKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcihURGVwZW5kZW5jeUdyYXBoKiBncmFw
aCkKKyAgICAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSkKKyAgICAg
ICAgLCBtTGVmdFN1YnRyZWUoTlVMTCkKKyAgICAgICAgLCBtUmlnaHRTdWJ0cmVlKE5VTEwpCisg
ICAgICAgICwgbUdyYXBoKGdyYXBoKSB7fQorICAgIHZvaWQgYnVpbGQoVEludGVybU5vZGUqIGlu
dGVybU5vZGUpIHsgaW50ZXJtTm9kZS0+dHJhdmVyc2UodGhpcyk7IH0KKworICAgIHZvaWQgY29u
bmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoVFBhcmVudE5vZGVTZXQqIG5vZGVzLCBUR3Jh
cGhOb2RlKiBub2RlKSBjb25zdDsKKworICAgIHZvaWQgdmlzaXRBc3NpZ25tZW50KFRJbnRlcm1C
aW5hcnkqKTsKKyAgICB2b2lkIHZpc2l0TG9naWNhbE9wKFRJbnRlcm1CaW5hcnkqKTsKKyAgICB2
b2lkIHZpc2l0QmluYXJ5Q2hpbGRyZW4oVEludGVybUJpbmFyeSopOworICAgIHZvaWQgdmlzaXRG
dW5jdGlvbkRlZmluaXRpb24oVEludGVybUFnZ3JlZ2F0ZSopOworICAgIHZvaWQgdmlzaXRGdW5j
dGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKTsKKyAgICB2b2lk
IHZpc2l0QWdncmVnYXRlQ2hpbGRyZW4oVEludGVybUFnZ3JlZ2F0ZSopOworCisgICAgVEdyYXBo
U3ltYm9sIG1MZWZ0U3VidHJlZTsKKyAgICBUR3JhcGhTeW1ib2wgbVJpZ2h0U3VidHJlZTsKKwor
ICAgIFREZXBlbmRlbmN5R3JhcGgqIG1HcmFwaDsKKyAgICBUTm9kZVNldFN0YWNrIG1Ob2RlU2V0
czsKKyAgICBUU3ltYm9sU3RhY2sgbUxlZnRtb3N0U3ltYm9sczsKK307CisKKyNlbmRpZiAgLy8g
Q09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9CVUlMREVSX0gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBo
L0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmUyMjYzMzM1NDVmNzNhN2Q4NWRmYjc0MjBiNDVjMWE3OTNlNDgwYjUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwCkBAIC0wLDAgKzEsNjUgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9E
ZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCIKKwordm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojpv
dXRwdXRJbmRlbnRhdGlvbigpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBnZXREZXB0aCgp
OyArK2kpCisgICAgICAgIG1TaW5rIDw8ICIgICI7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFw
aE91dHB1dDo6dmlzaXRBcmd1bWVudChUR3JhcGhBcmd1bWVudCogcGFyYW1ldGVyKQoreworICAg
IG91dHB1dEluZGVudGF0aW9uKCk7CisgICAgbVNpbmsgPDwgImFyZ3VtZW50ICIgPDwgcGFyYW1l
dGVyLT5nZXRBcmd1bWVudE51bWJlcigpIDw8ICIgb2YgY2FsbCB0byAiCisgICAgICAgICAgPDwg
cGFyYW1ldGVyLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKS0+Z2V0TmFtZSgpIDw8ICJcbiI7Cit9
CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRGdW5jdGlvbkNhbGwoVEdyYXBo
RnVuY3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwpCit7CisgICAgb3V0cHV0SW5kZW50YXRpb24oKTsK
KyAgICBtU2luayA8PCAiZnVuY3Rpb24gY2FsbCAiIDw8ICBmdW5jdGlvbkNhbGwtPmdldEludGVy
bUZ1bmN0aW9uQ2FsbCgpLT5nZXROYW1lKCkgPDwgIlxuIjsKK30KKwordm9pZCBURGVwZW5kZW5j
eUdyYXBoT3V0cHV0Ojp2aXNpdFN5bWJvbChUR3JhcGhTeW1ib2wqIHN5bWJvbCkKK3sKKyAgICBv
dXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5rIDw8IHN5bWJvbC0+Z2V0SW50ZXJtU3ltYm9s
KCktPmdldFN5bWJvbCgpIDw8ICIgKHN5bWJvbCBpZDogIgorICAgICAgICAgIDw8IHN5bWJvbC0+
Z2V0SW50ZXJtU3ltYm9sKCktPmdldElkKCkgPDwgIilcbiI7Cit9CisKK3ZvaWQgVERlcGVuZGVu
Y3lHcmFwaE91dHB1dDo6dmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24p
Cit7CisgICAgb3V0cHV0SW5kZW50YXRpb24oKTsKKyAgICBtU2luayA8PCAic2VsZWN0aW9uXG4i
OworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0TG9vcChUR3JhcGhMb29w
KiBsb29wKQoreworICAgIG91dHB1dEluZGVudGF0aW9uKCk7CisgICAgbVNpbmsgPDwgImxvb3Ag
Y29uZGl0aW9uXG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0TG9n
aWNhbE9wKFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wKQoreworICAgIG91dHB1dEluZGVudGF0
aW9uKCk7CisgICAgbVNpbmsgPDwgImxvZ2ljYWwgIiA8PCBsb2dpY2FsT3AtPmdldE9wU3RyaW5n
KCkgPDwgIlxuIjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpvdXRwdXRBbGxT
cGFubmluZ1RyZWVzKFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKQoreworICAgIG1TaW5rIDw8ICJc
biI7CisKKyAgICBmb3IgKFRHcmFwaE5vZGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBn
cmFwaC5iZWdpbigpOyBpdGVyICE9IGdyYXBoLmVuZCgpOyArK2l0ZXIpCisgICAgeworICAgICAg
ICBUR3JhcGhOb2RlKiBzeW1ib2wgPSAqaXRlcjsKKyAgICAgICAgbVNpbmsgPDwgIi0tLSBEZXBl
bmRlbmN5IGdyYXBoIHNwYW5uaW5nIHRyZWUgLS0tXG4iOworICAgICAgICBjbGVhclZpc2l0ZWQo
KTsKKyAgICAgICAgc3ltYm9sLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgbVNpbmsgPDwgIlxu
IjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVu
ZGVuY3lHcmFwaE91dHB1dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMzYTQxMTIyNzhmYmJkNGYwOTE3NTNlOGQ0
NDQ1NDE1NWNjMTcyNWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQu
aApAQCAtMCwwICsxLDMwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9ERVBH
UkFQSF9ERVBFTkRFTkNZX0dSQVBIX09VVFBVVF9ICisjZGVmaW5lIENPTVBJTEVSX0RFUEdSQVBI
X0RFUEVOREVOQ1lfR1JBUEhfT1VUUFVUX0gKKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9JbmZvU2luay5oIgorCitjbGFzcyBURGVwZW5kZW5jeUdyYXBoT3V0cHV0IDogcHVibGlj
IFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIgeworcHVibGljOgorICAgIFREZXBlbmRlbmN5R3Jh
cGhPdXRwdXQoVEluZm9TaW5rQmFzZSYgc2luaykgOiBtU2luayhzaW5rKSB7fQorICAgIHZpcnR1
YWwgdm9pZCB2aXNpdFN5bWJvbChUR3JhcGhTeW1ib2wqIHN5bWJvbCk7CisgICAgdmlydHVhbCB2
b2lkIHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFtZXRlcik7CisgICAgdmlydHVh
bCB2b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxs
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBzZWxl
Y3Rpb24pOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCk7Cisg
ICAgdmlydHVhbCB2b2lkIHZpc2l0TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9w
KTsKKworICAgIHZvaWQgb3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhURGVwZW5kZW5jeUdyYXBoJiBn
cmFwaCk7Citwcml2YXRlOgorICAgIHZvaWQgb3V0cHV0SW5kZW50YXRpb24oKTsKKworICAgIFRJ
bmZvU2lua0Jhc2UmIG1TaW5rOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9ERVBHUkFQSF9E
RVBFTkRFTkNZX0dSQVBIX09VVFBVVF9ICmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2
ZXJzZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTk3ZmRl
OTdlMjYwZDBiNTAyZTE0ZDk4MGM1ZTZmY2QxODgwNzYxYwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0Rl
cGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcApAQCAtMCwwICsxLDY5IEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBo
LmgiCisKKy8vIFRoZXNlIG1ldGhvZHMgZG8gYSBicmVhZHRoLWZpcnN0IHRyYXZlcnNhbCB0aHJv
dWdoIHRoZSBncmFwaCBhbmQgbWFyayB2aXNpdGVkIG5vZGVzLgorCit2b2lkIFRHcmFwaE5vZGU6
OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQorewor
ICAgIGdyYXBoVHJhdmVyc2VyLT5tYXJrVmlzaXRlZCh0aGlzKTsKK30KKwordm9pZCBUR3JhcGhQ
YXJlbnROb2RlOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZl
cnNlcikKK3sKKyAgICBUR3JhcGhOb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7CisKKyAg
ICBncmFwaFRyYXZlcnNlci0+aW5jcmVtZW50RGVwdGgoKTsKKworICAgIC8vIFZpc2l0IHRoZSBw
YXJlbnQgbm9kZSdzIGNoaWxkcmVuLgorICAgIGZvciAoVEdyYXBoTm9kZVNldDo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IG1EZXBlbmRlbnROb2Rlcy5iZWdpbigpOworICAgICAgICAgaXRlciAhPSBt
RGVwZW5kZW50Tm9kZXMuZW5kKCk7CisgICAgICAgICArK2l0ZXIpCisgICAgeworICAgICAgICBU
R3JhcGhOb2RlKiBub2RlID0gKml0ZXI7CisgICAgICAgIGlmICghZ3JhcGhUcmF2ZXJzZXItPmlz
VmlzaXRlZChub2RlKSkKKyAgICAgICAgICAgIG5vZGUtPnRyYXZlcnNlKGdyYXBoVHJhdmVyc2Vy
KTsKKyAgICB9CisKKyAgICBncmFwaFRyYXZlcnNlci0+ZGVjcmVtZW50RGVwdGgoKTsKK30KKwor
dm9pZCBUR3JhcGhBcmd1bWVudDo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciog
Z3JhcGhUcmF2ZXJzZXIpCit7CisgICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0QXJndW1lbnQodGhp
cyk7CisgICAgVEdyYXBoUGFyZW50Tm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworfQor
Cit2b2lkIFRHcmFwaEZ1bmN0aW9uQ2FsbDo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZl
cnNlciogZ3JhcGhUcmF2ZXJzZXIpCit7CisgICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0RnVuY3Rp
b25DYWxsKHRoaXMpOworICAgIFRHcmFwaFBhcmVudE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVy
c2VyKTsKK30KKwordm9pZCBUR3JhcGhTeW1ib2w6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdFN5
bWJvbCh0aGlzKTsKKyAgICBUR3JhcGhQYXJlbnROb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNl
cik7Cit9CisKK3ZvaWQgVEdyYXBoU2VsZWN0aW9uOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBo
VHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRT
ZWxlY3Rpb24odGhpcyk7CisgICAgVEdyYXBoTm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIp
OworfQorCit2b2lkIFRHcmFwaExvb3A6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJz
ZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdExvb3AodGhp
cyk7CisgICAgVEdyYXBoTm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworfQorCit2b2lk
IFRHcmFwaExvZ2ljYWxPcDo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3Jh
cGhUcmF2ZXJzZXIpCit7CisgICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0TG9naWNhbE9wKHRoaXMp
OworICAgIFRHcmFwaE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dlbmVy
YXRlX3BhcnNlci5zaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL2dlbmVyYXRlX3BhcnNlci5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNDcyMTkxNWUzY2ZiMjdjODdm
ZjkzYTBmOTUzYWQ5MTY0M2NjNmI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2VuZXJhdGVfcGFyc2VyLnNoCkBAIC0w
LDAgKzEsMjcgQEAKKyMhL2Jpbi9iYXNoCisjIENvcHlyaWdodCAoYykgMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisj
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyMgR2VuZXJhdGVzIEdMU0wgRVMgcGFyc2Vy
IC0gZ2xzbGFuZ19sZXguY3BwLCBnbHNsYW5nX3RhYi5oLCBhbmQgZ2xzbGFuZ190YWIuY3BwCisK
K3J1bl9mbGV4KCkKK3sKK2lucHV0X2ZpbGU9JHNjcmlwdF9kaXIvJDEubAorb3V0cHV0X3NvdXJj
ZT0kc2NyaXB0X2Rpci8kMV9sZXguY3BwCitmbGV4IC0tbm9saW5lIC0tbm91bmlzdGQgLS1vdXRm
aWxlPSRvdXRwdXRfc291cmNlICRpbnB1dF9maWxlCit9CisKK3J1bl9iaXNvbigpCit7CitpbnB1
dF9maWxlPSRzY3JpcHRfZGlyLyQxLnkKK291dHB1dF9oZWFkZXI9JHNjcmlwdF9kaXIvJDFfdGFi
LmgKK291dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIvJDFfdGFiLmNwcAorYmlzb24gLS1uby1saW5l
cyAtLXNrZWxldG9uPXlhY2MuYyAtLWRlZmluZXM9JG91dHB1dF9oZWFkZXIgLS1vdXRwdXQ9JG91
dHB1dF9zb3VyY2UgJGlucHV0X2ZpbGUKK30KKworc2NyaXB0X2Rpcj0kKGRpcm5hbWUgJDApCisK
KyMgR2VuZXJhdGUgUGFyc2VyCitydW5fZmxleCBnbHNsYW5nCitydW5fYmlzb24gZ2xzbGFuZwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvZ2xzbGFuZy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvZ2xzbGFuZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYyMjExOTkwOTNjMjFhYjk3ZjgyMWE2ZmI2YjE4
NDgyMTZlMjI4NTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nLmgKQEAgLTAsMCArMSwxNiBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKK3N0cnVjdCBUUGFyc2VDb250ZXh0OworZXh0ZXJuIGludCBnbHNsYW5nX2luaXRp
YWxpemUoVFBhcnNlQ29udGV4dCogY29udGV4dCk7CitleHRlcm4gaW50IGdsc2xhbmdfZmluYWxp
emUoVFBhcnNlQ29udGV4dCogY29udGV4dCk7CisKK2V4dGVybiBpbnQgZ2xzbGFuZ19zY2FuKHNp
emVfdCBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHN0
cmluZ1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGxlbmd0aFtdLAorICAg
ICAgICAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4dCogY29udGV4dCk7CitleHRlcm4gaW50
IGdsc2xhbmdfcGFyc2UoVFBhcnNlQ29udGV4dCogY29udGV4dCk7CisKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcubCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcu
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42YjYyM2VjNDEwNjJiZTZjYTg5ZDgyNTg0NzNhYjgwYmE3N2FkMWRlCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvZ2xzbGFuZy5sCkBAIC0wLDAgKzEsMzU1IEBACisvKgorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBMZXggc3BlY2lmaWNhdGlvbiBmb3IgR0xTTCBF
Uy4KK0Jhc2VkIG9uIEFOU0kgQyBncmFtbWFyLCBMZXggc3BlY2lmaWNhdGlvbjoKK2h0dHA6Ly93
d3cubHlzYXRvci5saXUuc2UvYy9BTlNJLUMtZ3JhbW1hci1sLmh0bWwKKworSUYgWU9VIE1PRElG
WSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNoLAorV0hJ
Q0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIExFWEVSIChnbHNsYW5nX2xleC5jcHApLgorKi8KKwor
JXRvcHsKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkg
Z2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKKworLy8gSWdub3JlIGVycm9ycyBpbiBh
dXRvLWdlbmVyYXRlZCBjb2RlLgorI2lmIGRlZmluZWQoX19HTlVDX18pCisjcHJhZ21hIEdDQyBk
aWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLWZ1bmN0aW9uIgorI3ByYWdtYSBHQ0MgZGlhZ25v
c3RpYyBpZ25vcmVkICItV3VudXNlZC12YXJpYWJsZSIKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMg
aWdub3JlZCAiLVdzd2l0Y2gtZW51bSIKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpCisjcHJhZ21h
IHdhcm5pbmcoZGlzYWJsZTogNDA2NSkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MTg5KQor
I3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ1MDUpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTog
NDcwMSkKKyNlbmRpZgorfQorCisleworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvZ2xz
bGFuZy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci91dGlsLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9nbHNs
YW5nX3RhYi5oIgorCisvKiB3aW5kb3dzIG9ubHkgcHJhZ21hICovCisjaWZkZWYgX01TQ19WRVIK
KyNwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDEwMikKKyNlbmRpZgorCisjZGVmaW5lIFlZX1VT
RVJfQUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHl5bGxvYy0+
Zmlyc3RfZmlsZSA9IHl5bGxvYy0+bGFzdF9maWxlID0geXljb2x1bW47IFwKKyAgICB5eWxsb2Mt
PmZpcnN0X2xpbmUgPSB5eWxsb2MtPmxhc3RfbGluZSA9IHl5bGluZW5vOworCisjZGVmaW5lIFlZ
X0lOUFVUKGJ1ZiwgcmVzdWx0LCBtYXhfc2l6ZSkgXAorICAgIHJlc3VsdCA9IHN0cmluZ19pbnB1
dChidWYsIG1heF9zaXplLCB5eXNjYW5uZXIpOworCitzdGF0aWMgeXlfc2l6ZV90IHN0cmluZ19p
bnB1dChjaGFyKiBidWYsIHl5X3NpemVfdCBtYXhfc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKTsK
K3N0YXRpYyBpbnQgY2hlY2tfdHlwZSh5eXNjYW5fdCB5eXNjYW5uZXIpOworc3RhdGljIGludCBy
ZXNlcnZlZF93b3JkKHl5c2Nhbl90IHl5c2Nhbm5lcik7CitzdGF0aWMgaW50IGludF9jb25zdGFu
dCh5eXNjYW5fdCB5eXNjYW5uZXIpOworc3RhdGljIGludCBmbG9hdF9jb25zdGFudCh5eXNjYW5f
dCB5eXNjYW5uZXIpOworJX0KKworJW9wdGlvbiBub3l5d3JhcCBub3VucHV0IG5ldmVyLWludGVy
YWN0aXZlCislb3B0aW9uIHl5bGluZW5vIHJlZW50cmFudCBiaXNvbi1icmlkZ2UgYmlzb24tbG9j
YXRpb25zCislb3B0aW9uIGV4dHJhLXR5cGU9IlRQYXJzZUNvbnRleHQqIgorCitEICAgICAgICAg
ICBbMC05XQorTCAgICAgICAgICAgW2EtekEtWl9dCitIICAgICAgICAgICBbYS1mQS1GMC05XQor
RSAgICAgICAgICAgW0VlXVsrLV0/e0R9KworTyAgICAgICAgICAgWzAtN10KKworJSUKKworImlu
dmFyaWFudCIgICAgeyByZXR1cm4gSU5WQVJJQU5UOyB9CisiaGlnaHAiICAgICAgICB7IHJldHVy
biBISUdIX1BSRUNJU0lPTjsgfQorIm1lZGl1bXAiICAgICAgeyByZXR1cm4gTUVESVVNX1BSRUNJ
U0lPTjsgfQorImxvd3AiICAgICAgICAgeyByZXR1cm4gTE9XX1BSRUNJU0lPTjsgfQorInByZWNp
c2lvbiIgICAgeyByZXR1cm4gUFJFQ0lTSU9OOyB9CisKKyJhdHRyaWJ1dGUiICAgIHsgcmV0dXJu
IEFUVFJJQlVURTsgfQorImNvbnN0IiAgICAgICAgeyByZXR1cm4gQ09OU1RfUVVBTDsgfQorInVu
aWZvcm0iICAgICAgeyByZXR1cm4gVU5JRk9STTsgfQorInZhcnlpbmciICAgICAgeyByZXR1cm4g
VkFSWUlORzsgfQorCisiYnJlYWsiICAgICAgICB7IHJldHVybiBCUkVBSzsgfQorImNvbnRpbnVl
IiAgICAgeyByZXR1cm4gQ09OVElOVUU7IH0KKyJkbyIgICAgICAgICAgIHsgcmV0dXJuIERPOyB9
CisiZm9yIiAgICAgICAgICB7IHJldHVybiBGT1I7IH0KKyJ3aGlsZSIgICAgICAgIHsgcmV0dXJu
IFdISUxFOyB9CisKKyJpZiIgICAgICAgICAgIHsgcmV0dXJuIElGOyB9CisiZWxzZSIgICAgICAg
ICB7IHJldHVybiBFTFNFOyB9CisKKyJpbiIgICAgICAgICAgIHsgcmV0dXJuIElOX1FVQUw7IH0K
KyJvdXQiICAgICAgICAgIHsgcmV0dXJuIE9VVF9RVUFMOyB9CisiaW5vdXQiICAgICAgICB7IHJl
dHVybiBJTk9VVF9RVUFMOyB9CisKKyJmbG9hdCIgICAgICAgIHsgcmV0dXJuIEZMT0FUX1RZUEU7
IH0KKyJpbnQiICAgICAgICAgIHsgcmV0dXJuIElOVF9UWVBFOyB9Cisidm9pZCIgICAgICAgICB7
IHJldHVybiBWT0lEX1RZUEU7IH0KKyJib29sIiAgICAgICAgIHsgcmV0dXJuIEJPT0xfVFlQRTsg
fQorInRydWUiICAgICAgICAgeyB5eWx2YWwtPmxleC5iID0gdHJ1ZTsgIHJldHVybiBCT09MQ09O
U1RBTlQ7IH0KKyJmYWxzZSIgICAgICAgIHsgeXlsdmFsLT5sZXguYiA9IGZhbHNlOyByZXR1cm4g
Qk9PTENPTlNUQU5UOyB9CisKKyJkaXNjYXJkIiAgICAgIHsgcmV0dXJuIERJU0NBUkQ7IH0KKyJy
ZXR1cm4iICAgICAgIHsgcmV0dXJuIFJFVFVSTjsgfQorCisibWF0MiIgICAgICAgICB7IHJldHVy
biBNQVRSSVgyOyB9CisibWF0MyIgICAgICAgICB7IHJldHVybiBNQVRSSVgzOyB9CisibWF0NCIg
ICAgICAgICB7IHJldHVybiBNQVRSSVg0OyB9CisKKyJ2ZWMyIiAgICAgICAgIHsgcmV0dXJuIFZF
QzI7IH0KKyJ2ZWMzIiAgICAgICAgIHsgcmV0dXJuIFZFQzM7IH0KKyJ2ZWM0IiAgICAgICAgIHsg
cmV0dXJuIFZFQzQ7IH0KKyJpdmVjMiIgICAgICAgIHsgcmV0dXJuIElWRUMyOyB9CisiaXZlYzMi
ICAgICAgICB7IHJldHVybiBJVkVDMzsgfQorIml2ZWM0IiAgICAgICAgeyByZXR1cm4gSVZFQzQ7
IH0KKyJidmVjMiIgICAgICAgIHsgcmV0dXJuIEJWRUMyOyB9CisiYnZlYzMiICAgICAgICB7IHJl
dHVybiBCVkVDMzsgfQorImJ2ZWM0IiAgICAgICAgeyByZXR1cm4gQlZFQzQ7IH0KKworInNhbXBs
ZXIyRCIgICAgICAgICAgeyByZXR1cm4gU0FNUExFUjJEOyB9Cisic2FtcGxlckN1YmUiICAgICAg
ICB7IHJldHVybiBTQU1QTEVSQ1VCRTsgfQorInNhbXBsZXJFeHRlcm5hbE9FUyIgeyByZXR1cm4g
U0FNUExFUl9FWFRFUk5BTF9PRVM7IH0KKyJzYW1wbGVyMkRSZWN0IiAgICAgIHsgcmV0dXJuIFNB
TVBMRVIyRFJFQ1Q7IH0KKworInN0cnVjdCIgICAgICAgeyByZXR1cm4gU1RSVUNUOyB9CisKKyJh
c20iICAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCisiY2xh
c3MiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJ1bmlvbiIg
ICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImVudW0iICAgICAg
ICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisidHlwZWRlZiIgICAgICB7
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJ0ZW1wbGF0ZSIgICAgIHsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInRoaXMiICAgICAgICAgeyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisicGFja2VkIiAgICAgICB7IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworImdvdG8iICAgICAgICAgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic3dpdGNoIiAgICAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KKyJkZWZhdWx0IiAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQorCisiaW5saW5lIiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KKyJub2lubGluZSIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQorInZvbGF0aWxlIiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9CisicHVibGljIiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
KyJzdGF0aWMiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImV4
dGVybiIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZXh0ZXJu
YWwiICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJpbnRlcmZhY2Ui
ICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImZsYXQiICAgICAgICAg
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisKKyJsb25nIiAgICAgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInNob3J0IiAgICAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZG91YmxlIiAgICAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJoYWxmIiAgICAgICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImZpeGVkIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9CisidW5zaWduZWQiICAgICB7IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KKyJzdXBlcnAiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQorCisiaW5wdXQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KKyJvdXRwdXQiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQorCisiaHZlYzIiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KKyJodmVjMyIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQor
Imh2ZWM0IiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZHZl
YzIiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJkdmVjMyIg
ICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImR2ZWM0IiAgICAg
ICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZnZlYzIiICAgICAgICB7
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJmdmVjMyIgICAgICAgIHsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImZ2ZWM0IiAgICAgICAgeyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisKKyJzYW1wbGVyMUQiICAgICAgICAgICB7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJzYW1wbGVyM0QiICAgICAgICAgICB7
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJzYW1wbGVyMURTaGFkb3ciICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJzYW1wbGVyMkRTaGFkb3ci
ICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJzYW1wbGVyM0RSZWN0
IiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJzYW1wbGVyMkRS
ZWN0U2hhZG93IiB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworInNpemVv
ZiIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiY2FzdCIgICAg
ICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworIm5hbWVzcGFjZSIg
ICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisidXNpbmciICAgICAgICB7
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwore0x9KHtMfXx7RH0pKiAgICAg
ICB7CisgICB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOyAKKyAg
IHJldHVybiBjaGVja190eXBlKHl5c2Nhbm5lcik7Cit9CisKKzBbeFhde0h9KyAgICAgICAgIHsg
cmV0dXJuIGludF9jb25zdGFudCh5eXNjYW5uZXIpOyB9Ciswe099KyAgICAgICAgICAgICB7IHJl
dHVybiBpbnRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQore0R9KyAgICAgICAgICAgICAgeyByZXR1
cm4gaW50X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KKwore0R9K3tFfSAgICAgICAgICAgeyByZXR1
cm4gZmxvYXRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQore0R9KyIuIntEfSooe0V9KT8geyByZXR1
cm4gZmxvYXRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQorIi4ie0R9Kyh7RX0pPyAgICAgeyByZXR1
cm4gZmxvYXRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQorCisiKz0iICAgICAgICAgICAgeyByZXR1
cm4gQUREX0FTU0lHTjsgfQorIi09IiAgICAgICAgICAgIHsgcmV0dXJuIFNVQl9BU1NJR047IH0K
KyIqPSIgICAgICAgICAgICB7IHJldHVybiBNVUxfQVNTSUdOOyB9CisiLz0iICAgICAgICAgICAg
eyByZXR1cm4gRElWX0FTU0lHTjsgfQorIiU9IiAgICAgICAgICAgIHsgcmV0dXJuIE1PRF9BU1NJ
R047IH0KKyI8PD0iICAgICAgICAgICB7IHJldHVybiBMRUZUX0FTU0lHTjsgfQorIj4+PSIgICAg
ICAgICAgIHsgcmV0dXJuIFJJR0hUX0FTU0lHTjsgfQorIiY9IiAgICAgICAgICAgIHsgcmV0dXJu
IEFORF9BU1NJR047IH0KKyJePSIgICAgICAgICAgICB7IHJldHVybiBYT1JfQVNTSUdOOyB9Cisi
fD0iICAgICAgICAgICAgeyByZXR1cm4gT1JfQVNTSUdOOyB9CisKKyIrKyIgICAgICAgICAgICB7
IHJldHVybiBJTkNfT1A7IH0KKyItLSIgICAgICAgICAgICB7IHJldHVybiBERUNfT1A7IH0KKyIm
JiIgICAgICAgICAgICB7IHJldHVybiBBTkRfT1A7IH0KKyJ8fCIgICAgICAgICAgICB7IHJldHVy
biBPUl9PUDsgfQorIl5eIiAgICAgICAgICAgIHsgcmV0dXJuIFhPUl9PUDsgfQorIjw9IiAgICAg
ICAgICAgIHsgcmV0dXJuIExFX09QOyB9CisiPj0iICAgICAgICAgICAgeyByZXR1cm4gR0VfT1A7
IH0KKyI9PSIgICAgICAgICAgICB7IHJldHVybiBFUV9PUDsgfQorIiE9IiAgICAgICAgICAgIHsg
cmV0dXJuIE5FX09QOyB9CisiPDwiICAgICAgICAgICAgeyByZXR1cm4gTEVGVF9PUDsgfQorIj4+
IiAgICAgICAgICAgIHsgcmV0dXJuIFJJR0hUX09QOyB9CisiOyIgICAgICAgICAgICAgeyByZXR1
cm4gU0VNSUNPTE9OOyB9CisoInsifCI8JSIpICAgICAgeyByZXR1cm4gTEVGVF9CUkFDRTsgfQor
KCJ9InwiJT4iKSAgICAgIHsgcmV0dXJuIFJJR0hUX0JSQUNFOyB9CisiLCIgICAgICAgICB7IHJl
dHVybiBDT01NQTsgfQorIjoiICAgICAgICAgeyByZXR1cm4gQ09MT047IH0KKyI9IiAgICAgICAg
IHsgcmV0dXJuIEVRVUFMOyB9CisiKCIgICAgICAgICB7IHJldHVybiBMRUZUX1BBUkVOOyB9Cisi
KSIgICAgICAgICB7IHJldHVybiBSSUdIVF9QQVJFTjsgfQorKCJbInwiPDoiKSAgeyByZXR1cm4g
TEVGVF9CUkFDS0VUOyB9CisoIl0ifCI6PiIpICB7IHJldHVybiBSSUdIVF9CUkFDS0VUOyB9Cisi
LiIgICAgICAgICB7IHJldHVybiBET1Q7IH0KKyIhIiAgICAgICAgIHsgcmV0dXJuIEJBTkc7IH0K
KyItIiAgICAgICAgIHsgcmV0dXJuIERBU0g7IH0KKyJ+IiAgICAgICAgIHsgcmV0dXJuIFRJTERF
OyB9CisiKyIgICAgICAgICB7IHJldHVybiBQTFVTOyB9CisiKiIgICAgICAgICB7IHJldHVybiBT
VEFSOyB9CisiLyIgICAgICAgICB7IHJldHVybiBTTEFTSDsgfQorIiUiICAgICAgICAgeyByZXR1
cm4gUEVSQ0VOVDsgfQorIjwiICAgICAgICAgeyByZXR1cm4gTEVGVF9BTkdMRTsgfQorIj4iICAg
ICAgICAgeyByZXR1cm4gUklHSFRfQU5HTEU7IH0KKyJ8IiAgICAgICAgIHsgcmV0dXJuIFZFUlRJ
Q0FMX0JBUjsgfQorIl4iICAgICAgICAgeyByZXR1cm4gQ0FSRVQ7IH0KKyImIiAgICAgICAgIHsg
cmV0dXJuIEFNUEVSU0FORDsgfQorIj8iICAgICAgICAgeyByZXR1cm4gUVVFU1RJT047IH0KKwor
WyBcdFx2XG5cZlxyXSB7IH0KKzw8RU9GPj4gICAgeyB5eXRlcm1pbmF0ZSgpOyB9CisuICAgICAg
ICAgIHsgYXNzZXJ0KGZhbHNlKTsgcmV0dXJuIDA7IH0KKworJSUKKworeXlfc2l6ZV90IHN0cmlu
Z19pbnB1dChjaGFyKiBidWYsIHl5X3NpemVfdCBtYXhfc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVy
KSB7CisgICAgcHA6OlRva2VuIHRva2VuOworICAgIHl5Z2V0X2V4dHJhKHl5c2Nhbm5lciktPnBy
ZXByb2Nlc3Nvci5sZXgoJnRva2VuKTsKKyAgICB5eV9zaXplX3QgbGVuID0gdG9rZW4udHlwZSA9
PSBwcDo6VG9rZW46OkxBU1QgPyAwIDogdG9rZW4udGV4dC5zaXplKCk7CisgICAgaWYgKGxlbiA8
IG1heF9zaXplKQorICAgICAgICBtZW1jcHkoYnVmLCB0b2tlbi50ZXh0LmNfc3RyKCksIGxlbik7
CisgICAgeXlzZXRfY29sdW1uKHRva2VuLmxvY2F0aW9uLmZpbGUsIHl5c2Nhbm5lcik7CisgICAg
eXlzZXRfbGluZW5vKHRva2VuLmxvY2F0aW9uLmxpbmUsIHl5c2Nhbm5lcik7CisKKyAgICBpZiAo
bGVuID49IG1heF9zaXplKQorICAgICAgICBZWV9GQVRBTF9FUlJPUigiSW5wdXQgYnVmZmVyIG92
ZXJmbG93Iik7CisgICAgZWxzZSBpZiAobGVuID4gMCkKKyAgICAgICAgYnVmW2xlbisrXSA9ICcg
JzsKKyAgICByZXR1cm4gbGVuOworfQorCitpbnQgY2hlY2tfdHlwZSh5eXNjYW5fdCB5eXNjYW5u
ZXIpIHsKKyAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSB5eXNj
YW5uZXI7CisgICAgCisgICAgaW50IHRva2VuID0gSURFTlRJRklFUjsKKyAgICBUU3ltYm9sKiBz
eW1ib2wgPSB5eWV4dHJhLT5zeW1ib2xUYWJsZS5maW5kKHl5dGV4dCk7CisgICAgaWYgKHN5bWJv
bCAmJiBzeW1ib2wtPmlzVmFyaWFibGUoKSkgeworICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxl
ID0gc3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4oc3ltYm9sKTsKKyAgICAgICAgaWYgKHZhcmlhYmxl
LT5pc1VzZXJUeXBlKCkpCisgICAgICAgICAgICB0b2tlbiA9IFRZUEVfTkFNRTsKKyAgICB9Cisg
ICAgeXlsdmFsLT5sZXguc3ltYm9sID0gc3ltYm9sOworICAgIHJldHVybiB0b2tlbjsKK30KKwor
aW50IHJlc2VydmVkX3dvcmQoeXlzY2FuX3QgeXlzY2FubmVyKSB7CisgICAgc3RydWN0IHl5Z3V0
c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgeXlzY2FubmVyOworCisgICAgeXlleHRyYS0+
ZXJyb3IoKnl5bGxvYywgIklsbGVnYWwgdXNlIG9mIHJlc2VydmVkIHdvcmQiLCB5eXRleHQsICIi
KTsKKyAgICB5eWV4dHJhLT5yZWNvdmVyKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgeXll
cnJvcihZWUxUWVBFKiBsbG9jLCBUUGFyc2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiBy
ZWFzb24pIHsKKyAgICBjb250ZXh0LT5lcnJvcigqbGxvYywgcmVhc29uLCB5eWdldF90ZXh0KGNv
bnRleHQtPnNjYW5uZXIpKTsKKyAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cit9CisKK2ludCBpbnRf
Y29uc3RhbnQoeXlzY2FuX3QgeXlzY2FubmVyKSB7CisgICAgc3RydWN0IHl5Z3V0c190KiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190KikgeXlzY2FubmVyOworCisgICAgaWYgKCFhdG9pX2NsYW1wKHl5
dGV4dCwgJih5eWx2YWwtPmxleC5pKSkpCisgICAgICAgIHl5ZXh0cmEtPndhcm5pbmcoKnl5bGxv
YywgIkludGVnZXIgb3ZlcmZsb3ciLCB5eXRleHQsICIiKTsKKyAgICByZXR1cm4gSU5UQ09OU1RB
TlQ7Cit9CisKK2ludCBmbG9hdF9jb25zdGFudCh5eXNjYW5fdCB5eXNjYW5uZXIpIHsKKyAgICBz
dHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSB5eXNjYW5uZXI7CisKKyAg
ICBpZiAoIWF0b2ZfY2xhbXAoeXl0ZXh0LCAmKHl5bHZhbC0+bGV4LmYpKSkKKyAgICAgICAgeXll
eHRyYS0+d2FybmluZygqeXlsbG9jLCAiRmxvYXQgb3ZlcmZsb3ciLCB5eXRleHQsICIiKTsKKyAg
ICByZXR1cm4gRkxPQVRDT05TVEFOVDsKK30KKworaW50IGdsc2xhbmdfaW5pdGlhbGl6ZShUUGFy
c2VDb250ZXh0KiBjb250ZXh0KSB7CisgICAgeXlzY2FuX3Qgc2Nhbm5lciA9IE5VTEw7CisgICAg
aWYgKHl5bGV4X2luaXRfZXh0cmEoY29udGV4dCwgJnNjYW5uZXIpKQorICAgICAgICByZXR1cm4g
MTsKKworICAgIGNvbnRleHQtPnNjYW5uZXIgPSBzY2FubmVyOworICAgIHJldHVybiAwOworfQor
CitpbnQgZ2xzbGFuZ19maW5hbGl6ZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7CisgICAgeXlz
Y2FuX3Qgc2Nhbm5lciA9IGNvbnRleHQtPnNjYW5uZXI7CisgICAgaWYgKHNjYW5uZXIgPT0gTlVM
TCkgcmV0dXJuIDA7CisgICAgCisgICAgY29udGV4dC0+c2Nhbm5lciA9IE5VTEw7CisgICAgeXls
ZXhfZGVzdHJveShzY2FubmVyKTsKKworICAgIHJldHVybiAwOworfQorCitpbnQgZ2xzbGFuZ19z
Y2FuKHNpemVfdCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBs
ZW5ndGhbXSwKKyAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4dCogY29udGV4dCkgeworICAg
IHl5cmVzdGFydChOVUxMLCBjb250ZXh0LT5zY2FubmVyKTsKKyAgICB5eXNldF9jb2x1bW4oMCwg
Y29udGV4dC0+c2Nhbm5lcik7CisgICAgeXlzZXRfbGluZW5vKDEsIGNvbnRleHQtPnNjYW5uZXIp
OworCisgICAgLy8gSW5pdGlhbGl6ZSBwcmVwcm9jZXNzb3IuCisgICAgaWYgKCFjb250ZXh0LT5w
cmVwcm9jZXNzb3IuaW5pdChjb3VudCwgc3RyaW5nLCBsZW5ndGgpKQorICAgICAgICByZXR1cm4g
MTsKKyAgICBjb250ZXh0LT5wcmVwcm9jZXNzb3Iuc2V0TWF4VG9rZW5MZW5ndGgoU0hfTUFYX1RP
S0VOX0xFTkdUSCk7CisKKyAgICAvLyBEZWZpbmUgZXh0ZW5zaW9uIG1hY3Jvcy4KKyAgICBjb25z
dCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yID0gY29udGV4dC0+ZXh0ZW5zaW9uQmVo
YXZpb3IoKTsKKyAgICBmb3IgKFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRl
ciA9IGV4dEJlaGF2aW9yLmJlZ2luKCk7CisgICAgICAgICBpdGVyICE9IGV4dEJlaGF2aW9yLmVu
ZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnByZWRlZmluZU1h
Y3JvKGl0ZXItPmZpcnN0LmNfc3RyKCksIDEpOworICAgIH0KKyAgICBpZiAoY29udGV4dC0+ZnJh
Z21lbnRQcmVjaXNpb25IaWdoKQorICAgICAgICBjb250ZXh0LT5wcmVwcm9jZXNzb3IucHJlZGVm
aW5lTWFjcm8oIkdMX0ZSQUdNRU5UX1BSRUNJU0lPTl9ISUdIIiwgMSk7CisKKyAgICByZXR1cm4g
MDsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvZ2xzbGFuZy55IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvZ2xzbGFuZy55Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc2MTRmZjM0NDdmNWNkMTZjNDFl
YzRmMWM0NmE0MDllN2UxYzkyMDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nLnkKQEAgLTAsMCArMSwyMDE0
IEBACisvKgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBZYWNj
IGdyYW1tYXIgZm9yIEdMU0wgRVMuCitCYXNlZCBvbiBBTlNJIEMgWWFjYyBncmFtbWFyOgoraHR0
cDovL3d3dy5seXNhdG9yLmxpdS5zZS9jL0FOU0ktQy1ncmFtbWFyLXkuaHRtbAorCitJRiBZT1Ug
TU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2gs
CitXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgUEFSU0VSIChnbHNsYW5nX3RhYi5jcHAgQU5E
IGdsc2xhbmdfdGFiLmgpLgorKi8KKworJXsKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFRoaXMg
ZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElU
IQorCisvLyBJZ25vcmUgZXJyb3JzIGluIGF1dG8tZ2VuZXJhdGVkIGNvZGUuCisjaWYgZGVmaW5l
ZChfX0dOVUNfXykKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtZnVu
Y3Rpb24iCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLXZhcmlhYmxl
IgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3N3aXRjaC1lbnVtIgorI2VsaWYg
ZGVmaW5lZChfTVNDX1ZFUikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MDY1KQorI3ByYWdt
YSB3YXJuaW5nKGRpc2FibGU6IDQxODkpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUwNSkK
KyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzAxKQorI2VuZGlmCisKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9QYXJzZUNvbnRleHQuaCIKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKwor
I2RlZmluZSBZWUVOQUJMRV9OTFMgMAorCisjZGVmaW5lIFlZTEVYX1BBUkFNIGNvbnRleHQtPnNj
YW5uZXIKKyV9CisKKyVleHBlY3QgMSAvKiBPbmUgc2hpZnQgcmVkdWNlIGNvbmZsaWN0IGJlY2F1
c2Ugb2YgaWYgfCBlbHNlICovCislcHVyZS1wYXJzZXIKKyVwYXJzZS1wYXJhbSB7VFBhcnNlQ29u
dGV4dCogY29udGV4dH0KKyVsb2NhdGlvbnMKKworJWNvZGUgcmVxdWlyZXMgeworI2RlZmluZSBZ
WUxUWVBFIFRTb3VyY2VMb2MKKyNkZWZpbmUgWVlMVFlQRV9JU19ERUNMQVJFRCAxCisjZGVmaW5l
IFNIX01BWF9UT0tFTl9MRU5HVEggMjU2ICAvLyBXZWJHTCBzcGVjLgorfQorCisldW5pb24gewor
ICAgIHN0cnVjdCB7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFRTdHJpbmcgKnN0cmlu
ZzsKKyAgICAgICAgICAgIGZsb2F0IGY7CisgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAg
IGJvb2wgYjsKKyAgICAgICAgfTsKKyAgICAgICAgVFN5bWJvbCogc3ltYm9sOworICAgIH0gbGV4
OworICAgIHN0cnVjdCB7CisgICAgICAgIFRPcGVyYXRvciBvcDsKKyAgICAgICAgdW5pb24gewor
ICAgICAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CisgICAgICAgICAgICBUSW50ZXJt
Tm9kZVBhaXIgbm9kZVBhaXI7CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGludGVybVR5cGVk
Tm9kZTsKKyAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUFnZ3JlZ2F0ZTsKKyAg
ICAgICAgfTsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgVFB1YmxpY1R5cGUgdHlwZTsK
KyAgICAgICAgICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOworICAgICAgICAgICAgVFF1YWxpZmll
ciBxdWFsaWZpZXI7CisgICAgICAgICAgICBURnVuY3Rpb24qIGZ1bmN0aW9uOworICAgICAgICAg
ICAgVFBhcmFtZXRlciBwYXJhbTsKKyAgICAgICAgICAgIFRGaWVsZCogZmllbGQ7CisgICAgICAg
ICAgICBURmllbGRMaXN0KiBmaWVsZExpc3Q7CisgICAgICAgIH07CisgICAgfSBpbnRlcm07Cit9
CisKKyV7CitleHRlcm4gaW50IHl5bGV4KFlZU1RZUEUqIHl5bHZhbCwgWVlMVFlQRSogeXlsbG9j
LCB2b2lkKiB5eXNjYW5uZXIpOworZXh0ZXJuIHZvaWQgeXllcnJvcihZWUxUWVBFKiB5eWxsb2Ms
IFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7CisKKyNkZWZpbmUg
WVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKSAgICAgICAgICAgICAgICAgICAgICBcCisg
IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgaWYgKFlZSUQoTikpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2ZpbGUgPSBZWVJIU0xPQyhSaHMs
IDEpLmZpcnN0X2ZpbGU7ICBcCisgICAgICAgIChDdXJyZW50KS5maXJzdF9saW5lID0gWVlSSFNM
T0MoUmhzLCAxKS5maXJzdF9saW5lOyAgXAorICAgICAgICAoQ3VycmVudCkubGFzdF9maWxlID0g
WVlSSFNMT0MoUmhzLCBOKS5sYXN0X2ZpbGU7ICAgIFwKKyAgICAgICAgKEN1cnJlbnQpLmxhc3Rf
bGluZSA9IFlZUkhTTE9DKFJocywgTikubGFzdF9saW5lOyAgICBcCisgICAgICB9ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgZWxz
ZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgKEN1cnJlbnQpLmZpcnN0X2ZpbGUgPSBZWVJIU0xPQyhSaHMsIDApLmxhc3RfZmlsZTsg
ICBcCisgICAgICAgIChDdXJyZW50KS5maXJzdF9saW5lID0gWVlSSFNMT0MoUmhzLCAwKS5sYXN0
X2xpbmU7ICAgXAorICAgICAgICAoQ3VycmVudCkubGFzdF9maWxlID0gWVlSSFNMT0MoUmhzLCAw
KS5sYXN0X2ZpbGU7ICAgIFwKKyAgICAgICAgKEN1cnJlbnQpLmxhc3RfbGluZSA9IFlZUkhTTE9D
KFJocywgMCkubGFzdF9saW5lOyAgICBcCisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5l
IFZFUlRFWF9PTkxZKFMsIEwpIHsgIFwKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSAhPSBT
SF9WRVJURVhfU0hBREVSKSB7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9y
dGVkIGluIHZlcnRleCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCisgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsgIFwKKyAgICB9ICBcCit9CisKKyNkZWZpbmUgRlJBR19PTkxZKFMsIEwpIHsgIFwK
KyAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSAhPSBTSF9GUkFHTUVOVF9TSEFERVIpIHsgIFwK
KyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21lbnQgc2hhZGVy
cyBvbmx5ICIsIFMpOyAgXAorICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCisgICAgfSAg
XAorfQorJX0KKworJXRva2VuIDxsZXg+IElOVkFSSUFOVCBISUdIX1BSRUNJU0lPTiBNRURJVU1f
UFJFQ0lTSU9OIExPV19QUkVDSVNJT04gUFJFQ0lTSU9OCisldG9rZW4gPGxleD4gQVRUUklCVVRF
IENPTlNUX1FVQUwgQk9PTF9UWVBFIEZMT0FUX1RZUEUgSU5UX1RZUEUKKyV0b2tlbiA8bGV4PiBC
UkVBSyBDT05USU5VRSBETyBFTFNFIEZPUiBJRiBESVNDQVJEIFJFVFVSTgorJXRva2VuIDxsZXg+
IEJWRUMyIEJWRUMzIEJWRUM0IElWRUMyIElWRUMzIElWRUM0IFZFQzIgVkVDMyBWRUM0CisldG9r
ZW4gPGxleD4gTUFUUklYMiBNQVRSSVgzIE1BVFJJWDQgSU5fUVVBTCBPVVRfUVVBTCBJTk9VVF9R
VUFMIFVOSUZPUk0gVkFSWUlORworJXRva2VuIDxsZXg+IFNUUlVDVCBWT0lEX1RZUEUgV0hJTEUK
KyV0b2tlbiA8bGV4PiBTQU1QTEVSMkQgU0FNUExFUkNVQkUgU0FNUExFUl9FWFRFUk5BTF9PRVMg
U0FNUExFUjJEUkVDVAorCisldG9rZW4gPGxleD4gSURFTlRJRklFUiBUWVBFX05BTUUgRkxPQVRD
T05TVEFOVCBJTlRDT05TVEFOVCBCT09MQ09OU1RBTlQKKyV0b2tlbiA8bGV4PiBMRUZUX09QIFJJ
R0hUX09QCisldG9rZW4gPGxleD4gSU5DX09QIERFQ19PUCBMRV9PUCBHRV9PUCBFUV9PUCBORV9P
UAorJXRva2VuIDxsZXg+IEFORF9PUCBPUl9PUCBYT1JfT1AgTVVMX0FTU0lHTiBESVZfQVNTSUdO
IEFERF9BU1NJR04KKyV0b2tlbiA8bGV4PiBNT0RfQVNTSUdOIExFRlRfQVNTSUdOIFJJR0hUX0FT
U0lHTiBBTkRfQVNTSUdOIFhPUl9BU1NJR04gT1JfQVNTSUdOCisldG9rZW4gPGxleD4gU1VCX0FT
U0lHTgorCisldG9rZW4gPGxleD4gTEVGVF9QQVJFTiBSSUdIVF9QQVJFTiBMRUZUX0JSQUNLRVQg
UklHSFRfQlJBQ0tFVCBMRUZUX0JSQUNFIFJJR0hUX0JSQUNFIERPVAorJXRva2VuIDxsZXg+IENP
TU1BIENPTE9OIEVRVUFMIFNFTUlDT0xPTiBCQU5HIERBU0ggVElMREUgUExVUyBTVEFSIFNMQVNI
IFBFUkNFTlQKKyV0b2tlbiA8bGV4PiBMRUZUX0FOR0xFIFJJR0hUX0FOR0xFIFZFUlRJQ0FMX0JB
UiBDQVJFVCBBTVBFUlNBTkQgUVVFU1RJT04KKworJXR5cGUgPGxleD4gaWRlbnRpZmllcgorJXR5
cGUgPGludGVybT4gYXNzaWdubWVudF9vcGVyYXRvciB1bmFyeV9vcGVyYXRvcgorJXR5cGUgPGlu
dGVybS5pbnRlcm1UeXBlZE5vZGU+IHZhcmlhYmxlX2lkZW50aWZpZXIgcHJpbWFyeV9leHByZXNz
aW9uIHBvc3RmaXhfZXhwcmVzc2lvbgorJXR5cGUgPGludGVybS5pbnRlcm1UeXBlZE5vZGU+IGV4
cHJlc3Npb24gaW50ZWdlcl9leHByZXNzaW9uIGFzc2lnbm1lbnRfZXhwcmVzc2lvbgorJXR5cGUg
PGludGVybS5pbnRlcm1UeXBlZE5vZGU+IHVuYXJ5X2V4cHJlc3Npb24gbXVsdGlwbGljYXRpdmVf
ZXhwcmVzc2lvbiBhZGRpdGl2ZV9leHByZXNzaW9uCisldHlwZSA8aW50ZXJtLmludGVybVR5cGVk
Tm9kZT4gcmVsYXRpb25hbF9leHByZXNzaW9uIGVxdWFsaXR5X2V4cHJlc3Npb24KKyV0eXBlIDxp
bnRlcm0uaW50ZXJtVHlwZWROb2RlPiBjb25kaXRpb25hbF9leHByZXNzaW9uIGNvbnN0YW50X2V4
cHJlc3Npb24KKyV0eXBlIDxpbnRlcm0uaW50ZXJtVHlwZWROb2RlPiBsb2dpY2FsX29yX2V4cHJl
c3Npb24gbG9naWNhbF94b3JfZXhwcmVzc2lvbiBsb2dpY2FsX2FuZF9leHByZXNzaW9uCisldHlw
ZSA8aW50ZXJtLmludGVybVR5cGVkTm9kZT4gc2hpZnRfZXhwcmVzc2lvbiBhbmRfZXhwcmVzc2lv
biBleGNsdXNpdmVfb3JfZXhwcmVzc2lvbiBpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbgorJXR5cGUg
PGludGVybS5pbnRlcm1UeXBlZE5vZGU+IGZ1bmN0aW9uX2NhbGwgaW5pdGlhbGl6ZXIgY29uZGl0
aW9uIGNvbmRpdGlvbm9wdAorCisldHlwZSA8aW50ZXJtLmludGVybU5vZGU+IHRyYW5zbGF0aW9u
X3VuaXQgZnVuY3Rpb25fZGVmaW5pdGlvbgorJXR5cGUgPGludGVybS5pbnRlcm1Ob2RlPiBzdGF0
ZW1lbnQgc2ltcGxlX3N0YXRlbWVudAorJXR5cGUgPGludGVybS5pbnRlcm1BZ2dyZWdhdGU+ICBz
dGF0ZW1lbnRfbGlzdCBjb21wb3VuZF9zdGF0ZW1lbnQKKyV0eXBlIDxpbnRlcm0uaW50ZXJtTm9k
ZT4gZGVjbGFyYXRpb25fc3RhdGVtZW50IHNlbGVjdGlvbl9zdGF0ZW1lbnQgZXhwcmVzc2lvbl9z
dGF0ZW1lbnQKKyV0eXBlIDxpbnRlcm0uaW50ZXJtTm9kZT4gZGVjbGFyYXRpb24gZXh0ZXJuYWxf
ZGVjbGFyYXRpb24KKyV0eXBlIDxpbnRlcm0uaW50ZXJtTm9kZT4gZm9yX2luaXRfc3RhdGVtZW50
IGNvbXBvdW5kX3N0YXRlbWVudF9ub19uZXdfc2NvcGUKKyV0eXBlIDxpbnRlcm0ubm9kZVBhaXI+
IHNlbGVjdGlvbl9yZXN0X3N0YXRlbWVudCBmb3JfcmVzdF9zdGF0ZW1lbnQKKyV0eXBlIDxpbnRl
cm0uaW50ZXJtTm9kZT4gaXRlcmF0aW9uX3N0YXRlbWVudCBqdW1wX3N0YXRlbWVudCBzdGF0ZW1l
bnRfbm9fbmV3X3Njb3BlIHN0YXRlbWVudF93aXRoX3Njb3BlCisldHlwZSA8aW50ZXJtPiBzaW5n
bGVfZGVjbGFyYXRpb24gaW5pdF9kZWNsYXJhdG9yX2xpc3QKKworJXR5cGUgPGludGVybT4gcGFy
YW1ldGVyX2RlY2xhcmF0aW9uIHBhcmFtZXRlcl9kZWNsYXJhdG9yIHBhcmFtZXRlcl90eXBlX3Nw
ZWNpZmllcgorJXR5cGUgPGludGVybS5xdWFsaWZpZXI+IHBhcmFtZXRlcl9xdWFsaWZpZXIKKwor
JXR5cGUgPGludGVybS5wcmVjaXNpb24+IHByZWNpc2lvbl9xdWFsaWZpZXIKKyV0eXBlIDxpbnRl
cm0udHlwZT4gdHlwZV9xdWFsaWZpZXIgZnVsbHlfc3BlY2lmaWVkX3R5cGUgdHlwZV9zcGVjaWZp
ZXIKKyV0eXBlIDxpbnRlcm0udHlwZT4gdHlwZV9zcGVjaWZpZXJfbm9fcHJlYyB0eXBlX3NwZWNp
Zmllcl9ub25hcnJheQorJXR5cGUgPGludGVybS50eXBlPiBzdHJ1Y3Rfc3BlY2lmaWVyCisldHlw
ZSA8aW50ZXJtLmZpZWxkPiBzdHJ1Y3RfZGVjbGFyYXRvcgorJXR5cGUgPGludGVybS5maWVsZExp
c3Q+IHN0cnVjdF9kZWNsYXJhdG9yX2xpc3Qgc3RydWN0X2RlY2xhcmF0aW9uIHN0cnVjdF9kZWNs
YXJhdGlvbl9saXN0CisldHlwZSA8aW50ZXJtLmZ1bmN0aW9uPiBmdW5jdGlvbl9oZWFkZXIgZnVu
Y3Rpb25fZGVjbGFyYXRvciBmdW5jdGlvbl9pZGVudGlmaWVyCisldHlwZSA8aW50ZXJtLmZ1bmN0
aW9uPiBmdW5jdGlvbl9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIGZ1bmN0aW9uX2NhbGxfaGVhZGVy
CisldHlwZSA8aW50ZXJtPiBmdW5jdGlvbl9jYWxsX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMgZnVu
Y3Rpb25fY2FsbF9oZWFkZXJfbm9fcGFyYW1ldGVycyBmdW5jdGlvbl9jYWxsX2dlbmVyaWMgZnVu
Y3Rpb25fcHJvdG90eXBlCisldHlwZSA8aW50ZXJtPiBmdW5jdGlvbl9jYWxsX29yX21ldGhvZAor
Cislc3RhcnQgdHJhbnNsYXRpb25fdW5pdAorJSUKKworaWRlbnRpZmllcgorICAgIDogSURFTlRJ
RklFUgorICAgIHwgVFlQRV9OQU1FCisKK3ZhcmlhYmxlX2lkZW50aWZpZXIKKyAgICA6IElERU5U
SUZJRVIgeworICAgICAgICAvLyBUaGUgc3ltYm9sIHRhYmxlIHNlYXJjaCB3YXMgZG9uZSBpbiB0
aGUgbGV4aWNhbCBwaGFzZQorICAgICAgICBjb25zdCBUU3ltYm9sICpzeW1ib2wgPSAkMS5zeW1i
b2w7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqdmFyaWFibGUgPSAwOworCisgICAgICAgIGlm
ICghc3ltYm9sKQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgInVu
ZGVjbGFyZWQgaWRlbnRpZmllciIsICQxLnN0cmluZy0+Y19zdHIoKSk7CisgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIXN5bWJvbC0+
aXNWYXJpYWJsZSgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwg
InZhcmlhYmxlIGV4cGVjdGVkIiwgJDEuc3RyaW5nLT5jX3N0cigpKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9s
KTsKKworICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKHZh
cmlhYmxlLT5nZXROYW1lKCkpICYmCisgICAgICAgICAgICAgICAgIXZhcmlhYmxlLT5nZXRFeHRl
bnNpb24oKS5lbXB0eSgpICYmCisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXh0ZW5zaW9uRXJy
b3JDaGVjayhAMSwgdmFyaWFibGUtPmdldEV4dGVuc2lvbigpKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBpZiAoIXZhcmlhYmxlKQorICAgICAgICB7CisgICAgICAgICAgICBUVHlw
ZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQpOworICAgICAgICAgICAgVFZhcmlhYmxlICpm
YWtlVmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCQxLnN0cmluZywgdHlwZSk7CisgICAgICAgICAg
ICBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKmZha2VWYXJpYWJsZSk7CisgICAgICAgICAg
ICB2YXJpYWJsZSA9IGZha2VWYXJpYWJsZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh2YXJp
YWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBDb25zdGFudFVuaW9uKiBjb25zdEFycmF5ID0gdmFyaWFibGUtPmdldENvbnN0
UG9pbnRlcigpOworICAgICAgICAgICAgVFR5cGUgdCh2YXJpYWJsZS0+Z2V0VHlwZSgpKTsKKyAg
ICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24oY29u
c3RBcnJheSwgdCwgQDEpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAg
ICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5n
ZXRVbmlxdWVJZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhcmlhYmxlLT5nZXROYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMSk7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBkb24ndCBkZWxldGUgJDEuc3RyaW5nLCBpdCdzIHVzZWQgYnkgZXJyb3IgcmVjb3Zl
cnksIGFuZCB0aGUgcG9vbAorICAgICAgICAvLyBwb3Agd2lsbCByZWNsYWltIHRoZSBtZW1vcnkK
KyAgICB9CisgICAgOworCitwcmltYXJ5X2V4cHJlc3Npb24KKyAgICA6IHZhcmlhYmxlX2lkZW50
aWZpZXIgeworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IElOVENPTlNUQU5UIHsKKyAg
ICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwor
ICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoJDEuaSk7CisgICAgICAgICQkID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50
LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDEpOworICAgIH0KKyAgICB8IEZMT0FUQ09OU1RB
TlQgeworICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bMV07CisgICAgICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgkMS5mKTsKKyAgICAgICAgJCQg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlw
ZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAxKTsKKyAgICB9CisgICAgfCBC
T09MQ09OU1RBTlQgeworICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bMV07CisgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdCgkMS5iKTsKKyAg
ICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFy
cmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDEpOworICAgIH0K
KyAgICB8IExFRlRfUEFSRU4gZXhwcmVzc2lvbiBSSUdIVF9QQVJFTiB7CisgICAgICAgICQkID0g
JDI7CisgICAgfQorICAgIDsKKworcG9zdGZpeF9leHByZXNzaW9uCisgICAgOiBwcmltYXJ5X2V4
cHJlc3Npb24geworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IHBvc3RmaXhfZXhwcmVz
c2lvbiBMRUZUX0JSQUNLRVQgaW50ZWdlcl9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQgeworICAg
ICAgICAkJCA9IGNvbnRleHQtPmFkZEluZGV4RXhwcmVzc2lvbigkMSwgQDIsICQzKTsKKyAgICB9
CisgICAgfCBmdW5jdGlvbl9jYWxsIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgfCBw
b3N0Zml4X2V4cHJlc3Npb24gRE9UIGlkZW50aWZpZXIgeworICAgICAgICBpZiAoJDEtPmlzQXJy
YXkoKSkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDMsICJjYW5ub3QgYXBwbHkgZG90
IG9wZXJhdG9yIHRvIGFuIGFycmF5IiwgIi4iKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgkMS0+aXNWZWN0b3IoKSkgeworICAgICAg
ICAgICAgVFZlY3RvckZpZWxkcyBmaWVsZHM7CisgICAgICAgICAgICBpZiAoISBjb250ZXh0LT5w
YXJzZVZlY3RvckZpZWxkcygqJDMuc3RyaW5nLCAkMS0+Z2V0Tm9taW5hbFNpemUoKSwgZmllbGRz
LCBAMykpIHsKKyAgICAgICAgICAgICAgICBmaWVsZHMubnVtID0gMTsKKyAgICAgICAgICAgICAg
ICBmaWVsZHMub2Zmc2V0c1swXSA9IDA7CisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRR
dWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgeyAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2ZWN0b3Ig
ZmllbGRzCisgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRDb25zdFZlY3Rvck5vZGUo
ZmllbGRzLCAkMSwgQDMpOworICAgICAgICAgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgJCQg
PSAkMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQ
cmVjaXNpb24oKSwgRXZxQ29uc3QsIChpbnQpICgqJDMuc3RyaW5nKS5zaXplKCkpKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgVFN0cmluZyB2ZWN0b3JTdHJpbmcgPSAq
JDMuc3RyaW5nOworICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkU3dpenpsZShmaWVsZHMsIEAzKTsKKyAgICAgICAgICAgICAgICAk
JCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BWZWN0b3JTd2l6emxlLCAkMSwg
aW5kZXgsIEAyKTsKKyAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFz
aWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAoaW50KSB2ZWN0b3JT
dHJpbmcuc2l6ZSgpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoJDEtPmlz
TWF0cml4KCkpIHsKKyAgICAgICAgICAgIFRNYXRyaXhGaWVsZHMgZmllbGRzOworICAgICAgICAg
ICAgaWYgKCEgY29udGV4dC0+cGFyc2VNYXRyaXhGaWVsZHMoKiQzLnN0cmluZywgJDEtPmdldE5v
bWluYWxTaXplKCksIGZpZWxkcywgQDMpKSB7CisgICAgICAgICAgICAgICAgZmllbGRzLndob2xl
Um93ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZmllbGRzLndob2xlQ29sID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgZmllbGRzLnJvdyA9IDA7CisgICAgICAgICAgICAgICAgZmllbGRzLmNv
bCA9IDA7CisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZpZWxkcy53aG9sZUNvbCkg
eworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAiIG5vbi1zY2FsYXIgZmllbGRz
IG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3
IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0
KDApOworICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QpLCBAMyk7CisgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICQxLCBpbmRleCwgQDIpOworICAg
ICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdl
dFByZWNpc2lvbigpLEV2cVRlbXBvcmFyeSwgJDEtPmdldE5vbWluYWxTaXplKCkpKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJh
eSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNl
dElDb25zdChmaWVsZHMuY29sICogJDEtPmdldE5vbWluYWxTaXplKCkgKyBmaWVsZHMucm93KTsK
KyAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmlu
ZWQsIEV2cUNvbnN0KSwgQDMpOworICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAkMSwgaW5kZXgsIEAyKTsKKyAgICAgICAg
ICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVj
aXNpb24oKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKCQxLT5nZXRCYXNp
Y1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKKyAgICAgICAgICAgIGJvb2wgZmllbGRGb3VuZCA9IGZh
bHNlOworICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRzID0gJDEtPmdldFR5cGUo
KS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaTsKKyAg
ICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoZmllbGRzW2ldLT5uYW1lKCkgPT0gKiQzLnN0cmluZykgeworICAgICAgICAg
ICAgICAgICAgICBmaWVsZEZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZpZWxk
Rm91bmQpIHsKKyAgICAgICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIo
KSA9PSBFdnFDb25zdCkgeworICAgICAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmFkZENv
bnN0U3RydWN0KCokMy5zdHJpbmcsICQxLCBAMik7CisgICAgICAgICAgICAgICAgICAgIGlmICgk
JCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgJCQtPnNl
dFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNo
YW5nZSB0aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1cm4gdHlwZSwgbm90IG9mIHRoZSBzdHJ1Y3R1
cmUgZmllbGQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHRoZSBzdHJ1Y3R1cmUgZGVm
aW5pdGlvbiBpcyBzaGFyZWQgYmV0d2VlbiB2YXJpb3VzIHN0cnVjdHVyZXMuCisgICAgICAgICAg
ICAgICAgICAgICAgICAkJC0+Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvblsxXTsKKyAgICAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGkpOwor
ICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgKmZpZWxkc1tpXS0+dHlwZSgpLCBA
Myk7CisgICAgICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZElu
ZGV4KEVPcEluZGV4RGlyZWN0U3RydWN0LCAkMSwgaW5kZXgsIEAyKTsKKyAgICAgICAgICAgICAg
ICAgICAgJCQtPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAy
LCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgJDMuc3RyaW5nLT5jX3N0cigpKTsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgJCQgPSAk
MTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKEAyLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1cmUsIHZlY3Rvciwg
b3IgbWF0cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgJDMuc3RyaW5nLT5jX3N0cigpKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkID0gJDE7CisgICAgICAg
IH0KKyAgICAgICAgLy8gZG9uJ3QgZGVsZXRlICQzLnN0cmluZywgaXQncyBmcm9tIHRoZSBwb29s
CisgICAgfQorICAgIHwgcG9zdGZpeF9leHByZXNzaW9uIElOQ19PUCB7CisgICAgICAgIGlmIChj
b250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKEAyLCAiKysiLCAkMSkpCisgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVu
YXJ5TWF0aChFT3BQb3N0SW5jcmVtZW50LCAkMSwgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsK
KyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJv
cihAMiwgIisrIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBERUNfT1AgeworICAgICAgICBpZiAoY29udGV4dC0+bFZh
bHVlRXJyb3JDaGVjayhAMiwgIi0tIiwgJDEpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9w
UG9zdERlY3JlbWVudCwgJDEsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlm
ICgkJCA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoQDIsICItLSIs
ICQxLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgICAgICQkID0gJDE7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCitpbnRl
Z2VyX2V4cHJlc3Npb24KKyAgICA6IGV4cHJlc3Npb24geworICAgICAgICBpZiAoY29udGV4dC0+
aW50ZWdlckVycm9yQ2hlY2soJDEsICJbXSIpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICA7CisKK2Z1bmN0aW9uX2NhbGwKKyAg
ICA6IGZ1bmN0aW9uX2NhbGxfb3JfbWV0aG9kIHsKKyAgICAgICAgVEZ1bmN0aW9uKiBmbkNhbGwg
PSAkMS5mdW5jdGlvbjsKKyAgICAgICAgVE9wZXJhdG9yIG9wID0gZm5DYWxsLT5nZXRCdWlsdElu
T3AoKTsKKworICAgICAgICBpZiAob3AgIT0gRU9wTnVsbCkKKyAgICAgICAgeworICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgIC8vIFRoZW4gdGhpcyBzaG91bGQgYmUgYSBjb25zdHJ1Y3Rvci4K
KyAgICAgICAgICAgIC8vIERvbid0IGdvIHRocm91Z2ggdGhlIHN5bWJvbCB0YWJsZSBmb3IgY29u
c3RydWN0b3JzLgorICAgICAgICAgICAgLy8gVGhlaXIgcGFyYW1ldGVycyB3aWxsIGJlIHZlcmlm
aWVkIGFsZ29yaXRobWljYWxseS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBUVHlwZSB0
eXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7ICAvLyB1c2UgdGhpcyB0byBnZXQgdGhlIHR5cGUg
YmFjaworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmNvbnN0cnVjdG9yRXJyb3JDaGVjayhAMSwg
JDEuaW50ZXJtTm9kZSwgKmZuQ2FsbCwgb3AsICZ0eXBlKSkgeworICAgICAgICAgICAgICAgICQk
ID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgICAgICAvLyBJdCdzIGEgY29uc3RydWN0b3IsIG9mIHR5cGUgJ3R5cGUnLgorICAgICAgICAg
ICAgICAgIC8vCisgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRDb25zdHJ1Y3Rvcigk
MS5pbnRlcm1Ob2RlLCAmdHlwZSwgb3AsIGZuQ2FsbCwgQDEpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dy
ZWdhdGVPcGVyYXRvcigwLCBvcCwgQDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgJCQt
PnNldFR5cGUodHlwZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLworICAgICAg
ICAgICAgLy8gTm90IGEgY29uc3RydWN0b3IuICBGaW5kIGl0IGluIHRoZSBzeW1ib2wgdGFibGUu
CisgICAgICAgICAgICAvLworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uKiBmbkNhbmRpZGF0
ZTsKKyAgICAgICAgICAgIGJvb2wgYnVpbHRJbjsKKyAgICAgICAgICAgIGZuQ2FuZGlkYXRlID0g
Y29udGV4dC0+ZmluZEZ1bmN0aW9uKEAxLCBmbkNhbGwsICZidWlsdEluKTsKKyAgICAgICAgICAg
IGlmIChmbkNhbmRpZGF0ZSkgeworICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAg
Ly8gQSBkZWNsYXJlZCBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAg
ICAgIGlmIChidWlsdEluICYmICFmbkNhbmRpZGF0ZS0+Z2V0RXh0ZW5zaW9uKCkuZW1wdHkoKSAm
JgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKEAxLCBm
bkNhbmRpZGF0ZS0+Z2V0RXh0ZW5zaW9uKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb3AgPSBm
bkNhbmRpZGF0ZS0+Z2V0QnVpbHRJbk9wKCk7CisgICAgICAgICAgICAgICAgaWYgKGJ1aWx0SW4g
JiYgb3AgIT0gRU9wTnVsbCkgeworICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAg
ICAgICAgICAvLyBBIGZ1bmN0aW9uIGNhbGwgbWFwcGVkIHRvIGEgYnVpbHQtaW4gb3BlcmF0aW9u
LgorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICBpZiAoZm5DYW5k
aWRhdGUtPmdldFBhcmFtQ291bnQoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAv
LworICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJlYXQgaXQgbGlrZSBhIGJ1aWx0LWluIHVu
YXJ5IG9wZXJhdG9yLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAg
ICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChvcCwgJDEu
aW50ZXJtTm9kZSwgQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICgkJCA9PSAwKSAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBleHRyYUluZm9TdHJlYW0gPDwgImJ1aWx0IGluIHVuYXJ5IG9wZXJhdG9yIGZ1bmN0aW9uLiAg
VHlwZTogIiA8PCBzdGF0aWNfY2FzdDxUSW50ZXJtVHlwZWQqPigkMS5pbnRlcm1Ob2RlKS0+Z2V0
Q29tcGxldGVTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmlu
ZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiIHdyb25n
IG9wZXJhbmQgdHlwZSIsICJJbnRlcm5hbCBFcnJvciIsIGV4dHJhSW5mby5jX3N0cigpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBZWUVSUk9SOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IoJDEuaW50
ZXJtQWdncmVnYXRlLCBvcCwgQDEpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHJlYWwgZnVu
Y3Rpb24gY2FsbAorCisgICAgICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKCQxLmludGVybUFnZ3JlZ2F0ZSwgRU9wRnVuY3Rpb25D
YWxsLCBAMSk7CisgICAgICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKGZuQ2FuZGlkYXRlLT5n
ZXRSZXR1cm5UeXBlKCkpOworCisgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgaG93IHdl
IGtub3cgd2hldGhlciB0aGUgZ2l2ZW4gZnVuY3Rpb24gaXMgYSBidWlsdEluIGZ1bmN0aW9uIG9y
IGEgdXNlciBkZWZpbmVkIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgIC8vIGlmIGJ1aWx0
SW4gPT0gZmFsc2UsIGl0J3MgYSB1c2VyRGVmaW5lZCAtPiBjb3VsZCBiZSBhbiBvdmVybG9hZGVk
IGJ1aWx0SW4gZnVuY3Rpb24gYWxzbworICAgICAgICAgICAgICAgICAgICAvLyBpZiBidWlsdElu
ID09IHRydWUsIGl0J3MgZGVmaW5pdGVseSBhIGJ1aWx0SW4gZnVuY3Rpb24gd2l0aCBFT3BOdWxs
CisgICAgICAgICAgICAgICAgICAgIGlmICghYnVpbHRJbikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRVc2VyRGVmaW5lZCgpOworICAgICAgICAgICAg
ICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0TmFtZShmbkNhbmRpZGF0ZS0+Z2V0TWFu
Z2xlZE5hbWUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgVFF1YWxpZmllciBxdWFsOworICAg
ICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZuQ2FuZGlkYXRlLT5nZXRQ
YXJhbUNvdW50KCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcXVhbCA9IGZuQ2Fu
ZGlkYXRlLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChxdWFsID09IEV2cU91dCB8fCBxdWFsID09IEV2cUluT3V0KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soJCQt
PmdldExpbmUoKSwgImFzc2lnbiIsICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgp
W2ldLT5nZXRBc1R5cGVkKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCQxLmludGVybU5vZGUtPmdldExpbmUoKSwgIkNvbnN0YW50IHZhbHVlIGNh
bm5vdCBiZSBwYXNzZWQgZm9yICdvdXQnIG9yICdpbm91dCcgcGFyYW1ldGVycy4iLCAiRXJyb3Ii
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAkJC0+c2V0VHlwZShmbkNhbmRpZGF0ZS0+Z2V0UmV0dXJuVHlwZSgpKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gZXJyb3IgbWVzc2FnZSB3YXMgcHV0IG91dCBi
eSBQYUZpbmRGdW5jdGlvbigpCisgICAgICAgICAgICAgICAgLy8gUHV0IG9uIGEgZHVtbXkgbm9k
ZSBmb3IgZXJyb3IgcmVjb3ZlcnkKKyAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlv
bkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgdW5pb25BcnJh
eS0+c2V0RkNvbnN0KDAuMGYpOworICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QpLCBAMSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGRlbGV0ZSBmbkNhbGw7Cisg
ICAgfQorICAgIDsKKworZnVuY3Rpb25fY2FsbF9vcl9tZXRob2QKKyAgICA6IGZ1bmN0aW9uX2Nh
bGxfZ2VuZXJpYyB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgcG9zdGZpeF9leHBy
ZXNzaW9uIERPVCBmdW5jdGlvbl9jYWxsX2dlbmVyaWMgeworICAgICAgICBjb250ZXh0LT5lcnJv
cihAMywgIm1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQiLCAiIik7CisgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgJCQgPSAkMzsKKyAgICB9CisgICAgOworCitmdW5jdGlvbl9j
YWxsX2dlbmVyaWMKKyAgICA6IGZ1bmN0aW9uX2NhbGxfaGVhZGVyX3dpdGhfcGFyYW1ldGVycyBS
SUdIVF9QQVJFTiB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgZnVuY3Rpb25fY2Fs
bF9oZWFkZXJfbm9fcGFyYW1ldGVycyBSSUdIVF9QQVJFTiB7CisgICAgICAgICQkID0gJDE7Cisg
ICAgfQorICAgIDsKKworZnVuY3Rpb25fY2FsbF9oZWFkZXJfbm9fcGFyYW1ldGVycworICAgIDog
ZnVuY3Rpb25fY2FsbF9oZWFkZXIgVk9JRF9UWVBFIHsKKyAgICAgICAgJCQuZnVuY3Rpb24gPSAk
MTsKKyAgICAgICAgJCQuaW50ZXJtTm9kZSA9IDA7CisgICAgfQorICAgIHwgZnVuY3Rpb25fY2Fs
bF9oZWFkZXIgeworICAgICAgICAkJC5mdW5jdGlvbiA9ICQxOworICAgICAgICAkJC5pbnRlcm1O
b2RlID0gMDsKKyAgICB9CisgICAgOworCitmdW5jdGlvbl9jYWxsX2hlYWRlcl93aXRoX3BhcmFt
ZXRlcnMKKyAgICA6IGZ1bmN0aW9uX2NhbGxfaGVhZGVyIGFzc2lnbm1lbnRfZXhwcmVzc2lvbiB7
CisgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7IDAsIG5ldyBUVHlwZSgkMi0+Z2V0VHlwZSgp
KSB9OworICAgICAgICAkMS0+YWRkUGFyYW1ldGVyKHBhcmFtKTsKKyAgICAgICAgJCQuZnVuY3Rp
b24gPSAkMTsKKyAgICAgICAgJCQuaW50ZXJtTm9kZSA9ICQyOworICAgIH0KKyAgICB8IGZ1bmN0
aW9uX2NhbGxfaGVhZGVyX3dpdGhfcGFyYW1ldGVycyBDT01NQSBhc3NpZ25tZW50X2V4cHJlc3Np
b24geworICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUoJDMtPmdldFR5
cGUoKSkgfTsKKyAgICAgICAgJDEuZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJhbSk7CisgICAg
ICAgICQkLmZ1bmN0aW9uID0gJDEuZnVuY3Rpb247CisgICAgICAgICQkLmludGVybU5vZGUgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1Ob2RlLCAkMywgQDIp
OworICAgIH0KKyAgICA7CisKK2Z1bmN0aW9uX2NhbGxfaGVhZGVyCisgICAgOiBmdW5jdGlvbl9p
ZGVudGlmaWVyIExFRlRfUEFSRU4geworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICA7CisK
Ky8vIEdyYW1tYXIgTm90ZTogIENvbnN0cnVjdG9ycyBsb29rIGxpa2UgZnVuY3Rpb25zLCBidXQg
YXJlIHJlY29nbml6ZWQgYXMgdHlwZXMuCisKK2Z1bmN0aW9uX2lkZW50aWZpZXIKKyAgICA6IHR5
cGVfc3BlY2lmaWVyX25vbmFycmF5IHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQ29uc3RydWN0
b3IKKyAgICAgICAgLy8KKyAgICAgICAgVE9wZXJhdG9yIG9wID0gRU9wTnVsbDsKKyAgICAgICAg
aWYgKCQxLnVzZXJEZWYpIHsKKyAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0U3RydWN0Owor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3dpdGNoICgkMS50eXBlKSB7CisgICAgICAg
ICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgICAgIGlmICgkMS5tYXRyaXgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoKCQxLnNpemUpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdE1hdDI7ICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVjdE1hdDM7ICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVjdE1hdDQ7ICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IHN3aXRjaCgkMS5zaXplKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogb3AgPSBFT3BD
b25zdHJ1Y3RGbG9hdDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBF
T3BDb25zdHJ1Y3RWZWMyOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogb3Ag
PSBFT3BDb25zdHJ1Y3RWZWMzOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDog
b3AgPSBFT3BDb25zdHJ1Y3RWZWM0OyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IEVidEludDoKKyAgICAgICAgICAgICAgICBzd2l0Y2goJDEuc2l6ZSkgeworICAgICAgICAgICAg
ICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RJbnQ7ICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdElWZWMyOyBicmVhazsKKyAgICAgICAgICAgICAg
ICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0SVZlYzM7IGJyZWFrOworICAgICAgICAgICAgICAg
IGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RJVmVjNDsgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRCb29sOgorICAg
ICAgICAgICAgICAgIHN3aXRjaCgkMS5zaXplKSB7CisgICAgICAgICAgICAgICAgY2FzZSAxOiBv
cCA9IEVPcENvbnN0cnVjdEJvb2w7ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6IG9w
ID0gRU9wQ29uc3RydWN0QlZlYzI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMzogb3Ag
PSBFT3BDb25zdHJ1Y3RCVmVjMzsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9
IEVPcENvbnN0cnVjdEJWZWM0OyBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChvcCA9PSBFT3BOdWxsKSB7CisgICAgICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoQDEsICJjYW5ub3QgY29uc3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5n
KCQxLnR5cGUpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
ICAgICAgICAgJDEudHlwZSA9IEVidEZsb2F0OworICAgICAgICAgICAgICAgIG9wID0gRU9wQ29u
c3RydWN0RmxvYXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgVFN0cmluZyB0
ZW1wU3RyaW5nOworICAgICAgICBUVHlwZSB0eXBlKCQxKTsKKyAgICAgICAgVEZ1bmN0aW9uICpm
dW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oJnRlbXBTdHJpbmcsIHR5cGUsIG9wKTsKKyAgICAgICAg
JCQgPSBmdW5jdGlvbjsKKyAgICB9CisgICAgfCBJREVOVElGSUVSIHsKKyAgICAgICAgaWYgKGNv
bnRleHQtPnJlc2VydmVkRXJyb3JDaGVjayhAMSwgKiQxLnN0cmluZykpCisgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZp
bmVkKTsKKyAgICAgICAgVEZ1bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oJDEuc3Ry
aW5nLCB0eXBlKTsKKyAgICAgICAgJCQgPSBmdW5jdGlvbjsKKyAgICB9CisgICAgOworCit1bmFy
eV9leHByZXNzaW9uCisgICAgOiBwb3N0Zml4X2V4cHJlc3Npb24geworICAgICAgICAkJCA9ICQx
OworICAgIH0KKyAgICB8IElOQ19PUCB1bmFyeV9leHByZXNzaW9uIHsKKyAgICAgICAgaWYgKGNv
bnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soQDEsICIrKyIsICQyKSkKKyAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5h
cnlNYXRoKEVPcFByZUluY3JlbWVudCwgJDIsIEAxLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Cisg
ICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3Io
QDEsICIrKyIsICQyLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkID0gJDI7CisgICAgICAgIH0KKyAgICB9CisgICAg
fCBERUNfT1AgdW5hcnlfZXhwcmVzc2lvbiB7CisgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVF
cnJvckNoZWNrKEAxLCAiLS0iLCAkMikpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQcmVE
ZWNyZW1lbnQsICQyLCBAMSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQg
PT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKEAxLCAiLS0iLCAkMi0+
Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICAkJCA9ICQyOworICAgICAgICB9CisgICAgfQorICAgIHwgdW5hcnlfb3BlcmF0
b3IgdW5hcnlfZXhwcmVzc2lvbiB7CisgICAgICAgIGlmICgkMS5vcCAhPSBFT3BOdWxsKSB7Cisg
ICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoJDEub3As
ICQyLCBAMSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAgICAgaWYgKCQkID09IDAp
IHsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBlcnJvck9wID0gIiI7CisgICAgICAgICAg
ICAgICAgc3dpdGNoKCQxLm9wKSB7CisgICAgICAgICAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZTog
ICBlcnJvck9wID0gIi0iOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxO
b3Q6IGVycm9yT3AgPSAiISI7IGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJy
b3IoQDEsIGVycm9yT3AsICQyLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgJCQgPSAkMjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAkJCA9ICQyOworICAgIH0KKyAgICA7
CisvLyBHcmFtbWFyIE5vdGU6ICBObyB0cmFkaXRpb25hbCBzdHlsZSB0eXBlIGNhc3RzLgorCit1
bmFyeV9vcGVyYXRvcgorICAgIDogUExVUyAgeyAkJC5vcCA9IEVPcE51bGw7IH0KKyAgICB8IERB
U0ggIHsgJCQub3AgPSBFT3BOZWdhdGl2ZTsgfQorICAgIHwgQkFORyAgeyAkJC5vcCA9IEVPcExv
Z2ljYWxOb3Q7IH0KKyAgICA7CisvLyBHcmFtbWFyIE5vdGU6ICBObyAnKicgb3IgJyYnIHVuYXJ5
IG9wcy4gIFBvaW50ZXJzIGFyZSBub3Qgc3VwcG9ydGVkLgorCittdWx0aXBsaWNhdGl2ZV9leHBy
ZXNzaW9uCisgICAgOiB1bmFyeV9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIHwgbXVsdGlw
bGljYXRpdmVfZXhwcmVzc2lvbiBTVEFSIHVuYXJ5X2V4cHJlc3Npb24geworICAgICAgICAkJCA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcE11bCwgJDEsICQzLCBAMiwg
Y29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAg
ICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIioiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmco
KSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IG11bHRp
cGxpY2F0aXZlX2V4cHJlc3Npb24gU0xBU0ggdW5hcnlfZXhwcmVzc2lvbiB7CisgICAgICAgICQk
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wRGl2LCAkMSwgJDMsIEAy
LCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAg
ICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiLyIsICQxLT5nZXRDb21wbGV0ZVN0cmlu
ZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICAkJCA9ICQxOworICAgICAgICB9CisgICAgfQorICAgIDsKKwor
YWRkaXRpdmVfZXhwcmVzc2lvbgorICAgIDogbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbiB7ICQk
ID0gJDE7IH0KKyAgICB8IGFkZGl0aXZlX2V4cHJlc3Npb24gUExVUyBtdWx0aXBsaWNhdGl2ZV9l
eHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5
TWF0aChFT3BBZGQsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAg
aWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICIr
IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkID0gJDE7CisgICAg
ICAgIH0KKyAgICB9CisgICAgfCBhZGRpdGl2ZV9leHByZXNzaW9uIERBU0ggbXVsdGlwbGljYXRp
dmVfZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJp
bmFyeU1hdGgoRU9wU3ViLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAg
ICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAy
LCAiLSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7
CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9ICQxOwor
ICAgICAgICB9CisgICAgfQorICAgIDsKKworc2hpZnRfZXhwcmVzc2lvbgorICAgIDogYWRkaXRp
dmVfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICA7CisKK3JlbGF0aW9uYWxfZXhwcmVzc2lv
bgorICAgIDogc2hpZnRfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICB8IHJlbGF0aW9uYWxf
ZXhwcmVzc2lvbiBMRUZUX0FOR0xFIHNoaWZ0X2V4cHJlc3Npb24geworICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExlc3NUaGFuLCAkMSwgJDMsIEAy
LCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAg
ICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiPCIsICQxLT5nZXRDb21wbGV0ZVN0cmlu
ZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwor
ICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1
bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDIpOwor
ICAgICAgICB9CisgICAgfQorICAgIHwgcmVsYXRpb25hbF9leHByZXNzaW9uIFJJR0hUX0FOR0xF
IHNoaWZ0X2V4cHJlc3Npb24gIHsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbiwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9s
VGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+Ymlu
YXJ5T3BFcnJvcihAMiwgIj4iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBs
ZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAg
ICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAg
ICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICQkID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUo
RWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAyKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICB8IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiBMRV9PUCBzaGlmdF9leHByZXNzaW9uICB7Cisg
ICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTGVzc1Ro
YW5FcXVhbCwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAo
JCQgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIjw9Iiwg
JDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVu
aW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXkt
PnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5l
ZCwgRXZxQ29uc3QpLCBAMik7CisgICAgICAgIH0KKyAgICB9CisgICAgfCByZWxhdGlvbmFsX2V4
cHJlc3Npb24gR0VfT1Agc2hpZnRfZXhwcmVzc2lvbiAgeworICAgICAgICAkJCA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuRXF1YWwsICQxLCAkMywg
QDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICI+PSIsICQxLT5nZXRDb21wbGV0ZVN0
cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2Up
OworICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlv
bih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDIp
OworICAgICAgICB9CisgICAgfQorICAgIDsKKworZXF1YWxpdHlfZXhwcmVzc2lvbgorICAgIDog
cmVsYXRpb25hbF9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIHwgZXF1YWxpdHlfZXhwcmVz
c2lvbiBFUV9PUCByZWxhdGlvbmFsX2V4cHJlc3Npb24gIHsKKyAgICAgICAgJCQgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BFcXVhbCwgJDEsICQzLCBAMiwgY29udGV4
dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgY29u
dGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIj09IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQz
LT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlv
blsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAg
ICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJy
YXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMik7CisgICAgICAg
IH0KKyAgICB9CisgICAgfCBlcXVhbGl0eV9leHByZXNzaW9uIE5FX09QIHJlbGF0aW9uYWxfZXhw
cmVzc2lvbiB7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1h
dGgoRU9wTm90RXF1YWwsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAg
ICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIs
ICIhPSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7
CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVu
aW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlv
bkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBV
bmRlZmluZWQsIEV2cUNvbnN0KSwgQDIpOworICAgICAgICB9CisgICAgfQorICAgIDsKKworYW5k
X2V4cHJlc3Npb24KKyAgICA6IGVxdWFsaXR5X2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAg
OworCitleGNsdXNpdmVfb3JfZXhwcmVzc2lvbgorICAgIDogYW5kX2V4cHJlc3Npb24geyAkJCA9
ICQxOyB9CisgICAgOworCitpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbgorICAgIDogZXhjbHVzaXZl
X29yX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAgOworCitsb2dpY2FsX2FuZF9leHByZXNz
aW9uCisgICAgOiBpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICB8IGxv
Z2ljYWxfYW5kX2V4cHJlc3Npb24gQU5EX09QIGluY2x1c2l2ZV9vcl9leHByZXNzaW9uIHsKKyAg
ICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2Fs
QW5kLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9
PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiJiYiLCAkMS0+
Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25B
cnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0
QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBF
dnFDb25zdCksIEAyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisKK2xvZ2ljYWxfeG9yX2V4
cHJlc3Npb24KKyAgICA6IGxvZ2ljYWxfYW5kX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAg
fCBsb2dpY2FsX3hvcl9leHByZXNzaW9uIFhPUl9PUCBsb2dpY2FsX2FuZF9leHByZXNzaW9uICB7
CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9n
aWNhbFhvciwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAo
JCQgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIl5eIiwg
JDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVu
aW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXkt
PnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5l
ZCwgRXZxQ29uc3QpLCBAMik7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCitsb2dpY2FsX29y
X2V4cHJlc3Npb24KKyAgICA6IGxvZ2ljYWxfeG9yX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9Cisg
ICAgfCBsb2dpY2FsX29yX2V4cHJlc3Npb24gT1JfT1AgbG9naWNhbF94b3JfZXhwcmVzc2lvbiAg
eworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExv
Z2ljYWxPciwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAo
JCQgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgInx8Iiwg
JDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVu
aW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXkt
PnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5l
ZCwgRXZxQ29uc3QpLCBAMik7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCitjb25kaXRpb25h
bF9leHByZXNzaW9uCisgICAgOiBsb2dpY2FsX29yX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9Cisg
ICAgfCBsb2dpY2FsX29yX2V4cHJlc3Npb24gUVVFU1RJT04gZXhwcmVzc2lvbiBDT0xPTiBhc3Np
Z25tZW50X2V4cHJlc3Npb24geworICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVjayhA
MiwgJDEpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICQkID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFNlbGVjdGlvbigkMSwgJDMsICQ1LCBAMik7CisgICAg
ICAgIGlmICgkMy0+Z2V0VHlwZSgpICE9ICQ1LT5nZXRUeXBlKCkpCisgICAgICAgICAgICAkJCA9
IDA7CisKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFy
eU9wRXJyb3IoQDIsICI6IiwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCksICQ1LT5nZXRDb21wbGV0
ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAg
ICQkID0gJDU7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCithc3NpZ25tZW50X2V4cHJlc3Np
b24KKyAgICA6IGNvbmRpdGlvbmFsX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAgfCB1bmFy
eV9leHByZXNzaW9uIGFzc2lnbm1lbnRfb3BlcmF0b3IgYXNzaWdubWVudF9leHByZXNzaW9uIHsK
KyAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soQDIsICJhc3NpZ24iLCAkMSkp
CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQkID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEFzc2lnbigkMi5vcCwgJDEsICQzLCBAMik7CisgICAgICAgIGlmICgk
JCA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5hc3NpZ25FcnJvcihAMiwgImFzc2lnbiIs
ICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9ICQxOworICAgICAg
ICB9CisgICAgfQorICAgIDsKKworYXNzaWdubWVudF9vcGVyYXRvcgorICAgIDogRVFVQUwgICAg
ICAgIHsgJCQub3AgPSBFT3BBc3NpZ247IH0KKyAgICB8IE1VTF9BU1NJR04gICB7ICQkLm9wID0g
RU9wTXVsQXNzaWduOyB9CisgICAgfCBESVZfQVNTSUdOICAgeyAkJC5vcCA9IEVPcERpdkFzc2ln
bjsgfQorICAgIHwgQUREX0FTU0lHTiAgIHsgJCQub3AgPSBFT3BBZGRBc3NpZ247IH0KKyAgICB8
IFNVQl9BU1NJR04gICB7ICQkLm9wID0gRU9wU3ViQXNzaWduOyB9CisgICAgOworCitleHByZXNz
aW9uCisgICAgOiBhc3NpZ25tZW50X2V4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxOworICAg
IH0KKyAgICB8IGV4cHJlc3Npb24gQ09NTUEgYXNzaWdubWVudF9leHByZXNzaW9uIHsKKyAgICAg
ICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29tbWEoJDEsICQzLCBAMik7CisgICAg
ICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAy
LCAiLCIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7
CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9ICQzOwor
ICAgICAgICB9CisgICAgfQorICAgIDsKKworY29uc3RhbnRfZXhwcmVzc2lvbgorICAgIDogY29u
ZGl0aW9uYWxfZXhwcmVzc2lvbiB7CisgICAgICAgIGlmIChjb250ZXh0LT5jb25zdEVycm9yQ2hl
Y2soJDEpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAkJCA9ICQx
OworICAgIH0KKyAgICA7CisKK2RlY2xhcmF0aW9uCisgICAgOiBmdW5jdGlvbl9wcm90b3R5cGUg
U0VNSUNPTE9OICAgeworICAgICAgICBURnVuY3Rpb24gJmZ1bmN0aW9uID0gKigkMS5mdW5jdGlv
bik7CisgICAgICAgIAorICAgICAgICBUSW50ZXJtQWdncmVnYXRlICpwcm90b3R5cGUgPSBuZXcg
VEludGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgcHJvdG90eXBlLT5zZXRUeXBlKGZ1bmN0aW9uLmdl
dFJldHVyblR5cGUoKSk7CisgICAgICAgIHByb3RvdHlwZS0+c2V0TmFtZShmdW5jdGlvbi5nZXRO
YW1lKCkpOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlv
bi5nZXRQYXJhbUNvdW50KCk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFBh
cmFtZXRlciAmcGFyYW0gPSBmdW5jdGlvbi5nZXRQYXJhbShpKTsKKyAgICAgICAgICAgIGlmIChw
YXJhbS5uYW1lICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVFZhcmlhYmxl
IHZhcmlhYmxlKHBhcmFtLm5hbWUsICpwYXJhbS50eXBlKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBwcm90b3R5cGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3Jl
Z2F0ZShwcm90b3R5cGUsIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUu
Z2V0VW5pcXVlSWQoKSwgdmFyaWFibGUuZ2V0TmFtZSgpLCB2YXJpYWJsZS5nZXRUeXBlKCksIEAx
KSwgQDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHByb3RvdHlwZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdn
cmVnYXRlKHByb3RvdHlwZSwgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAiIiwg
KnBhcmFtLnR5cGUsIEAxKSwgQDEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBwcm90b3R5cGUtPnNldE9wKEVPcFByb3RvdHlwZSk7CisgICAgICAgICQkID0g
cHJvdG90eXBlOworCisgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOworICAgIH0K
KyAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IFNFTUlDT0xPTiB7CisgICAgICAgIGlmICgkMS5p
bnRlcm1BZ2dyZWdhdGUpCisgICAgICAgICAgICAkMS5pbnRlcm1BZ2dyZWdhdGUtPnNldE9wKEVP
cERlY2xhcmF0aW9uKTsKKyAgICAgICAgJCQgPSAkMS5pbnRlcm1BZ2dyZWdhdGU7CisgICAgfQor
ICAgIHwgUFJFQ0lTSU9OIHByZWNpc2lvbl9xdWFsaWZpZXIgdHlwZV9zcGVjaWZpZXJfbm9fcHJl
YyBTRU1JQ09MT04geworICAgICAgICBpZiAoKCQyID09IEVicEhpZ2gpICYmIChjb250ZXh0LT5z
aGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikgJiYgIWNvbnRleHQtPmZyYWdtZW50UHJl
Y2lzaW9uSGlnaCkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJwcmVjaXNpb24g
aXMgbm90IHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXIiLCAiaGlnaHAiKTsKKyAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWNvbnRleHQt
PnN5bWJvbFRhYmxlLnNldERlZmF1bHRQcmVjaXNpb24oICQzLCAkMiApKSB7CisgICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcihAMSwgImlsbGVnYWwgdHlwZSBhcmd1bWVudCBmb3IgZGVmYXVsdCBw
cmVjaXNpb24gcXVhbGlmaWVyIiwgZ2V0QmFzaWNTdHJpbmcoJDMudHlwZSkpOworICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgICQkID0gMDsKKyAgICB9
CisgICAgOworCitmdW5jdGlvbl9wcm90b3R5cGUKKyAgICA6IGZ1bmN0aW9uX2RlY2xhcmF0b3Ig
UklHSFRfUEFSRU4gIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gTXVsdGlwbGUgZGVjbGFyYXRp
b25zIG9mIHRoZSBzYW1lIGZ1bmN0aW9uIGFyZSBhbGxvd2VkLgorICAgICAgICAvLworICAgICAg
ICAvLyBJZiB0aGlzIGlzIGEgZGVmaW5pdGlvbiwgdGhlIGRlZmluaXRpb24gcHJvZHVjdGlvbiBj
b2RlIHdpbGwgY2hlY2sgZm9yIHJlZGVmaW5pdGlvbnMKKyAgICAgICAgLy8gKHdlIGRvbid0IGtu
b3cgYXQgdGhpcyBwb2ludCBpZiBpdCdzIGEgZGVmaW5pdGlvbiBvciBub3QpLgorICAgICAgICAv
LworICAgICAgICAvLyBSZWRlY2xhcmF0aW9ucyBhcmUgYWxsb3dlZC4gIEJ1dCwgcmV0dXJuIHR5
cGVzIGFuZCBwYXJhbWV0ZXIgcXVhbGlmaWVycyBtdXN0IG1hdGNoLgorICAgICAgICAvLworICAg
ICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihjb250ZXh0
LT5zeW1ib2xUYWJsZS5maW5kKCQxLT5nZXRNYW5nbGVkTmFtZSgpKSk7CisgICAgICAgIGlmIChw
cmV2RGVjKSB7CisgICAgICAgICAgICBpZiAocHJldkRlYy0+Z2V0UmV0dXJuVHlwZSgpICE9ICQx
LT5nZXRSZXR1cm5UeXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwg
Im92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSByZXR1cm4gdHlwZSIsICQx
LT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBwcmV2RGVjLT5nZXRQYXJhbUNvdW50KCk7ICsraSkgeworICAgICAgICAgICAg
ICAgIGlmIChwcmV2RGVjLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSAkMS0+
Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoQDIsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNh
bWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAkMS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlm
aWVyU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gQ2hlY2sgZm9yIHByZXZpb3VzbHkgZGVjbGFyZWQgdmFyaWFibGVzIHVzaW5n
IHRoZSBzYW1lIG5hbWUuCisgICAgICAgIC8vCisgICAgICAgIFRTeW1ib2wgKnByZXZTeW0gPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCQxLT5nZXROYW1lKCkpOworICAgICAgICBpZiAocHJl
dlN5bSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFwcmV2U3ltLT5pc0Z1bmN0aW9uKCkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJyZWRl
ZmluaXRpb24iLCAkMS0+Z2V0TmFtZSgpLmNfc3RyKCksICJmdW5jdGlvbiIpOworICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEluc2VydCB0aGUgdW5tYW5nbGVk
IG5hbWUgdG8gZGV0ZWN0IHBvdGVudGlhbCBmdXR1cmUgcmVkZWZpbml0aW9uIGFzIGEgdmFyaWFi
bGUuCisgICAgICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5nZXRPdXRlckxldmVsKCktPmlu
c2VydCgkMS0+Z2V0TmFtZSgpLCAqJDEpOworICAgICAgICB9CisKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gSWYgdGhpcyBpcyBhIHJlZGVjbGFyYXRpb24sIGl0IGNvdWxkIGFsc28gYmUgYSBkZWZp
bml0aW9uLAorICAgICAgICAvLyBpbiB3aGljaCBjYXNlLCB3ZSB3YW50IHRvIHVzZSB0aGUgdmFy
aWFibGUgbmFtZXMgZnJvbSB0aGlzIG9uZSwgYW5kIG5vdCB0aGUgb25lIHRoYXQncworICAgICAg
ICAvLyBiZWluZyByZWRlY2xhcmVkLiAgU28sIHBhc3MgYmFjayB1cCB0aGlzIGRlY2xhcmF0aW9u
LCBub3QgdGhlIG9uZSBpbiB0aGUgc3ltYm9sIHRhYmxlLgorICAgICAgICAvLworICAgICAgICAk
JC5mdW5jdGlvbiA9ICQxOworCisgICAgICAgIC8vIFdlJ3JlIGF0IHRoZSBpbm5lciBzY29wZSBs
ZXZlbCBvZiB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudHMgYW5kIGJvZHkgc3RhdGVtZW50LgorICAg
ICAgICAvLyBBZGQgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZSB0byB0aGUgc3Vycm91bmRpbmcgc2Nv
cGUgaW5zdGVhZC4KKyAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUuZ2V0T3V0ZXJMZXZlbCgp
LT5pbnNlcnQoKiQkLmZ1bmN0aW9uKTsKKyAgICB9CisgICAgOworCitmdW5jdGlvbl9kZWNsYXJh
dG9yCisgICAgOiBmdW5jdGlvbl9oZWFkZXIgeworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAg
ICB8IGZ1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMgeworICAgICAgICAkJCA9ICQxOwor
ICAgIH0KKyAgICA7CisKKworZnVuY3Rpb25faGVhZGVyX3dpdGhfcGFyYW1ldGVycworICAgIDog
ZnVuY3Rpb25faGVhZGVyIHBhcmFtZXRlcl9kZWNsYXJhdGlvbiB7CisgICAgICAgIC8vIEFkZCB0
aGUgcGFyYW1ldGVyCisgICAgICAgICQkID0gJDE7CisgICAgICAgIGlmICgkMi5wYXJhbS50eXBl
LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKQorICAgICAgICAgICAgJDEtPmFkZFBhcmFtZXRl
cigkMi5wYXJhbSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRlbGV0ZSAkMi5wYXJhbS50
eXBlOworICAgIH0KKyAgICB8IGZ1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMgQ09NTUEg
cGFyYW1ldGVyX2RlY2xhcmF0aW9uIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gT25seSBmaXJz
dCBwYXJhbWV0ZXIgb2Ygb25lLXBhcmFtZXRlciBmdW5jdGlvbnMgY2FuIGJlIHZvaWQKKyAgICAg
ICAgLy8gVGhlIGNoZWNrIGZvciBuYW1lZCBwYXJhbWV0ZXJzIG5vdCBiZWluZyB2b2lkIGlzIGRv
bmUgaW4gcGFyYW1ldGVyX2RlY2xhcmF0b3IKKyAgICAgICAgLy8KKyAgICAgICAgaWYgKCQzLnBh
cmFtLnR5cGUtPmdldEJhc2ljVHlwZSgpID09IEVidFZvaWQpIHsKKyAgICAgICAgICAgIC8vCisg
ICAgICAgICAgICAvLyBUaGlzIHBhcmFtZXRlciA+IGZpcnN0IGlzIHZvaWQKKyAgICAgICAgICAg
IC8vCisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgImNhbm5vdCBiZSBhbiBhcmd1bWVu
dCB0eXBlIGV4Y2VwdCBmb3IgJyh2b2lkKSciLCAidm9pZCIpOworICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgZGVsZXRlICQzLnBhcmFtLnR5cGU7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAvLyBBZGQgdGhlIHBhcmFtZXRlcgorICAgICAgICAgICAg
JCQgPSAkMTsKKyAgICAgICAgICAgICQxLT5hZGRQYXJhbWV0ZXIoJDMucGFyYW0pOworICAgICAg
ICB9CisgICAgfQorICAgIDsKKworZnVuY3Rpb25faGVhZGVyCisgICAgOiBmdWxseV9zcGVjaWZp
ZWRfdHlwZSBJREVOVElGSUVSIExFRlRfUEFSRU4geworICAgICAgICBpZiAoJDEucXVhbGlmaWVy
ICE9IEV2cUdsb2JhbCAmJiAkMS5xdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7CisgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcihAMiwgIm5vIHF1YWxpZmllcnMgYWxsb3dlZCBmb3IgZnVuY3Rp
b24gcmV0dXJuIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikpOworICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIC8vIG1ha2Ugc3VyZSBh
IHNhbXBsZXIgaXMgbm90IGludm9sdmVkIGFzIHdlbGwuLi4KKyAgICAgICAgaWYgKGNvbnRleHQt
PnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soQDIsICQxKSkKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKworICAgICAgICAvLyBBZGQgdGhlIGZ1bmN0aW9uIGFzIGEgcHJvdG90eXBl
IGFmdGVyIHBhcnNpbmcgaXQgKHdlIGRvIG5vdCBzdXBwb3J0IHJlY3Vyc2lvbikKKyAgICAgICAg
VEZ1bmN0aW9uICpmdW5jdGlvbjsKKyAgICAgICAgVFR5cGUgdHlwZSgkMSk7CisgICAgICAgIGZ1
bmN0aW9uID0gbmV3IFRGdW5jdGlvbigkMi5zdHJpbmcsIHR5cGUpOworICAgICAgICAkJCA9IGZ1
bmN0aW9uOworICAgICAgICAKKyAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOwor
ICAgIH0KKyAgICA7CisKK3BhcmFtZXRlcl9kZWNsYXJhdG9yCisgICAgLy8gVHlwZSArIG5hbWUK
KyAgICA6IHR5cGVfc3BlY2lmaWVyIGlkZW50aWZpZXIgeworICAgICAgICBpZiAoJDEudHlwZSA9
PSBFYnRWb2lkKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgImlsbGVnYWwgdXNl
IG9mIHR5cGUgJ3ZvaWQnIiwgJDIuc3RyaW5nLT5jX3N0cigpKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRF
cnJvckNoZWNrKEAyLCAqJDIuc3RyaW5nKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHskMi5zdHJpbmcsIG5ldyBUVHlwZSgkMSl9
OworICAgICAgICAkJC5wYXJhbSA9IHBhcmFtOworICAgIH0KKyAgICB8IHR5cGVfc3BlY2lmaWVy
IGlkZW50aWZpZXIgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tF
VCB7CisgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgY2FuIG1ha2UgYW4gYXJyYXkgb3V0IG9mIHRo
aXMgdHlwZQorICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjayhAMywgJDEp
KQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmIChjb250ZXh0
LT5yZXNlcnZlZEVycm9yQ2hlY2soQDIsICokMi5zdHJpbmcpKQorICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworCisgICAgICAgIGludCBzaXplOworICAgICAgICBpZiAoY29udGV4dC0+
YXJyYXlTaXplRXJyb3JDaGVjayhAMywgJDQsIHNpemUpKQorICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICAkMS5zZXRBcnJheSh0cnVlLCBzaXplKTsKKworICAgICAgICBU
VHlwZSogdHlwZSA9IG5ldyBUVHlwZSgkMSk7CisgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7
ICQyLnN0cmluZywgdHlwZSB9OworICAgICAgICAkJC5wYXJhbSA9IHBhcmFtOworICAgIH0KKyAg
ICA7CisKK3BhcmFtZXRlcl9kZWNsYXJhdGlvbgorICAgIC8vCisgICAgLy8gVGhlIG9ubHkgcGFy
YW1ldGVyIHF1YWxpZmllciBhIHBhcmFtZXRlciBjYW4gaGF2ZSBhcmUKKyAgICAvLyBJTl9RVUFM
LCBPVVRfUVVBTCwgSU5PVVRfUVVBTCwgb3IgQ09OU1QuCisgICAgLy8KKworICAgIC8vCisgICAg
Ly8gVHlwZSArIG5hbWUKKyAgICAvLworICAgIDogdHlwZV9xdWFsaWZpZXIgcGFyYW1ldGVyX3F1
YWxpZmllciBwYXJhbWV0ZXJfZGVjbGFyYXRvciB7CisgICAgICAgICQkID0gJDM7CisgICAgICAg
IGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soQDMsICQxLnF1YWxpZmllciwgJDIsICQkLnBh
cmFtLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgIH0KKyAgICB8
IHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX2RlY2xhcmF0b3IgeworICAgICAgICAkJCA9
ICQyOworICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1ldGVyU2FtcGxlckVycm9yQ2hlY2soQDIs
ICQxLCAqJDIucGFyYW0udHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soQDIsIEV2cVRlbXBvcmFyeSwgJDEs
ICQkLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgIH0K
KyAgICAvLworICAgIC8vIE9ubHkgdHlwZQorICAgIC8vCisgICAgfCB0eXBlX3F1YWxpZmllciBw
YXJhbWV0ZXJfcXVhbGlmaWVyIHBhcmFtZXRlcl90eXBlX3NwZWNpZmllciB7CisgICAgICAgICQk
ID0gJDM7CisgICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soQDMsICQxLnF1YWxp
ZmllciwgJDIsICQkLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OworICAgIH0KKyAgICB8IHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX3R5cGVfc3BlY2lm
aWVyIHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtZXRlclNh
bXBsZXJFcnJvckNoZWNrKEAyLCAkMSwgKiQyLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKEAy
LCBFdnFUZW1wb3JhcnksICQxLCAkJC5wYXJhbS50eXBlKSkKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICB9CisgICAgOworCitwYXJhbWV0ZXJfcXVhbGlmaWVyCisgICAgOiAv
KiBlbXB0eSAqLyB7CisgICAgICAgICQkID0gRXZxSW47CisgICAgfQorICAgIHwgSU5fUVVBTCB7
CisgICAgICAgICQkID0gRXZxSW47CisgICAgfQorICAgIHwgT1VUX1FVQUwgeworICAgICAgICAk
JCA9IEV2cU91dDsKKyAgICB9CisgICAgfCBJTk9VVF9RVUFMIHsKKyAgICAgICAgJCQgPSBFdnFJ
bk91dDsKKyAgICB9CisgICAgOworCitwYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIKKyAgICA6IHR5
cGVfc3BlY2lmaWVyIHsKKyAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBl
KCQxKSB9OworICAgICAgICAkJC5wYXJhbSA9IHBhcmFtOworICAgIH0KKyAgICA7CisKK2luaXRf
ZGVjbGFyYXRvcl9saXN0CisgICAgOiBzaW5nbGVfZGVjbGFyYXRpb24geworICAgICAgICAkJCA9
ICQxOworICAgIH0KKyAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIGlkZW50aWZpZXIg
eworICAgICAgICBpZiAoJDEudHlwZS50eXBlID09IEVidEludmFyaWFudCAmJiAhJDMuc3ltYm9s
KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMywgInVuZGVjbGFyZWQg
aWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCAkMy5zdHJpbmctPmNfc3RyKCkpOwor
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisKKyAgICAgICAgVElu
dGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAq
JDMuc3RyaW5nLCBUVHlwZSgkMS50eXBlKSwgQDMpOworICAgICAgICAkJC5pbnRlcm1BZ2dyZWdh
dGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1Ob2RlLCBz
eW1ib2wsIEAzKTsKKyAgICAgICAgCisgICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZp
ZXJFcnJvckNoZWNrKEAzLCAkJC50eXBlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKKworICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjayhAMywgKiQz
LnN0cmluZywgJCQudHlwZSwgZmFsc2UpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OworCisgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOworICAgICAgICBpZiAoY29udGV4
dC0+bm9uSW5pdEVycm9yQ2hlY2soQDMsICokMy5zdHJpbmcsICQkLnR5cGUsIHZhcmlhYmxlKSkK
KyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKHN5bWJvbCAmJiB2
YXJpYWJsZSkKKyAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUtPmdldFVuaXF1ZUlk
KCkpOworICAgIH0KKyAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIGlkZW50aWZpZXIg
TEVGVF9CUkFDS0VUIFJJR0hUX0JSQUNLRVQgeworICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0
UXVhbGlmaWVyRXJyb3JDaGVjayhAMywgJDEudHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2so
QDMsICokMy5zdHJpbmcsICQxLnR5cGUsIHRydWUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOworCisgICAgICAgICQkID0gJDE7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5
VHlwZUVycm9yQ2hlY2soQDQsICQxLnR5cGUpIHx8IGNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJy
b3JDaGVjayhANCwgJDEudHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgJDEudHlwZS5zZXRBcnJheSh0cnVlKTsKKyAgICAg
ICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGU7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+YXJy
YXlFcnJvckNoZWNrKEA0LCAqJDMuc3RyaW5nLCAkMS50eXBlLCB2YXJpYWJsZSkpCisgICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgfQorICAgIHwgaW5p
dF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgaWRlbnRpZmllciBMRUZUX0JSQUNLRVQgY29uc3RhbnRf
ZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1
YWxpZmllckVycm9yQ2hlY2soQDMsICQxLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOworCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKEAz
LCAqJDMuc3RyaW5nLCAkMS50eXBlLCB0cnVlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKworICAgICAgICAkJCA9ICQxOworCisgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5
cGVFcnJvckNoZWNrKEA0LCAkMS50eXBlKSB8fCBjb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9y
Q2hlY2soQDQsICQxLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludCBzaXplOworICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soQDQsICQ1LCBzaXplKSkKKyAgICAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkMS50eXBlLnNldEFycmF5KHRydWUsIHNp
emUpOworICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7CisgICAgICAgICAgICBp
ZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKEA0LCAqJDMuc3RyaW5nLCAkMS50eXBlLCB2YXJp
YWJsZSkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAg
VFR5cGUgdHlwZSA9IFRUeXBlKCQxLnR5cGUpOworICAgICAgICAgICAgdHlwZS5zZXRBcnJheVNp
emUoc2l6ZSk7CisgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1Ob2RlLCBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkU3ltYm9sKHZhcmlhYmxlID8gdmFyaWFibGUtPmdldFVuaXF1ZUlkKCkgOiAwLCAqJDMu
c3RyaW5nLCB0eXBlLCBAMyksIEAzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IGluaXRfZGVj
bGFyYXRvcl9saXN0IENPTU1BIGlkZW50aWZpZXIgRVFVQUwgaW5pdGlhbGl6ZXIgeworICAgICAg
ICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhAMywgJDEudHlwZSkpCisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgJCQgPSAkMTsKKworICAg
ICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKKyAgICAgICAgaWYgKCFjb250ZXh0LT5leGVj
dXRlSW5pdGlhbGl6ZXIoQDMsICokMy5zdHJpbmcsICQxLnR5cGUsICQ1LCBpbnRlcm1Ob2RlKSkg
eworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIGJ1aWxkIHRoZSBpbnRlcm1lZGlhdGUg
cmVwcmVzZW50YXRpb24KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBpZiAoaW50ZXJtTm9k
ZSkKKyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdy
b3dBZ2dyZWdhdGUoJDEuaW50ZXJtTm9kZSwgaW50ZXJtTm9kZSwgQDQpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9ICQxLmludGVybUFnZ3Jl
Z2F0ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgOworCitzaW5nbGVfZGVjbGFyYXRpb24KKyAgICA6IGZ1bGx5X3NwZWNpZmllZF90eXBlIHsK
KyAgICAgICAgJCQudHlwZSA9ICQxOworICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
U3ltYm9sKDAsICIiLCBUVHlwZSgkMSksIEAxKSwgQDEpOworICAgIH0KKyAgICB8IGZ1bGx5X3Nw
ZWNpZmllZF90eXBlIGlkZW50aWZpZXIgeworICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICokMi5zdHJpbmcsIFRUeXBlKCQx
KSwgQDIpOworICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsIEAyKTsKKyAgICAgICAgCisgICAgICAgIGlmIChjb250
ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAyLCAkJC50eXBlKSkKKyAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0
RXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZywgJCQudHlwZSwgZmFsc2UpKQorICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICAkJC50eXBlID0g
JDE7CisKKyAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7CisgICAgICAgIGlmIChjb250
ZXh0LT5ub25Jbml0RXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZywgJCQudHlwZSwgdmFyaWFibGUp
KQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAodmFyaWFibGUg
JiYgc3ltYm9sKQorICAgICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVl
SWQoKSk7CisgICAgfQorICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUgaWRlbnRpZmllciBMRUZU
X0JSQUNLRVQgUklHSFRfQlJBQ0tFVCB7CisgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAidW5z
aXplZCBhcnJheSBkZWNsYXJhdGlvbnMgbm90IHN1cHBvcnRlZCIsICQyLnN0cmluZy0+Y19zdHIo
KSk7CisgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBUSW50ZXJtU3ltYm9s
KiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICokMi5zdHJpbmcs
IFRUeXBlKCQxKSwgQDIpOworICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsIEAyKTsKKyAgICAgICAgJCQudHlwZSA9
ICQxOworICAgIH0KKyAgICB8IGZ1bGx5X3NwZWNpZmllZF90eXBlIGlkZW50aWZpZXIgTEVGVF9C
UkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7CisgICAgICAgIFRUeXBl
IHR5cGUgPSBUVHlwZSgkMSk7CisgICAgICAgIGludCBzaXplOworICAgICAgICBpZiAoY29udGV4
dC0+YXJyYXlTaXplRXJyb3JDaGVjayhAMiwgJDQsIHNpemUpKQorICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICB0eXBlLnNldEFycmF5U2l6ZShzaXplKTsKKyAgICAgICAg
VEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgw
LCAqJDIuc3RyaW5nLCB0eXBlLCBAMik7CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgQDIpOworICAgICAgICAK
KyAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soQDIsICQxKSkK
KyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBpZiAoY29udGV4dC0+
bm9uSW5pdENvbnN0RXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZywgJDEsIHRydWUpKQorICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICQkLnR5cGUgPSAkMTsKKworICAg
ICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjayhAMywgJDEpIHx8IGNvbnRleHQt
PmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayhAMywgJDEpKQorICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludCBzaXplOworICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soQDMsICQ0LCBzaXplKSkKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgICAgICQxLnNldEFy
cmF5KHRydWUsIHNpemUpOworICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7Cisg
ICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKEAzLCAqJDIuc3RyaW5nLCAk
MSwgdmFyaWFibGUpKQorICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCisgICAgICAgICAgICAgICAgc3ltYm9sLT5z
ZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBm
dWxseV9zcGVjaWZpZWRfdHlwZSBpZGVudGlmaWVyIEVRVUFMIGluaXRpYWxpemVyIHsKKyAgICAg
ICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soQDIsICQxKSkKKyAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAkJC50eXBlID0gJDE7CisKKyAg
ICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CisgICAgICAgIGlmICghY29udGV4dC0+ZXhl
Y3V0ZUluaXRpYWxpemVyKEAyLCAqJDIuc3RyaW5nLCAkMSwgJDQsIGludGVybU5vZGUpKSB7Cisg
ICAgICAgIC8vCisgICAgICAgIC8vIEJ1aWxkIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgor
ICAgICAgICAvLworICAgICAgICAgICAgaWYoaW50ZXJtTm9kZSkKKyAgICAgICAgICAgICAgICAk
JC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShp
bnRlcm1Ob2RlLCBAMyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgJCQuaW50
ZXJtQWdncmVnYXRlID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7CisgICAgICAg
IH0KKyAgICB9CisgICAgfCBJTlZBUklBTlQgSURFTlRJRklFUiB7CisgICAgICAgIFZFUlRFWF9P
TkxZKCJpbnZhcmlhbnQgZGVjbGFyYXRpb24iLCBAMSk7CisgICAgICAgIGlmIChjb250ZXh0LT5n
bG9iYWxFcnJvckNoZWNrKEAxLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCks
ICJpbnZhcmlhbnQgdmFyeWluZyIpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICAkJC50eXBlLnNldEJhc2ljKEVidEludmFyaWFudCwgRXZxSW52YXJpYW50VmFyeWlu
Z091dCwgQDIpOworICAgICAgICBpZiAoISQyLnN5bWJvbCkKKyAgICAgICAgeworICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoQDIsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMg
aW52YXJpYW50IiwgJDIuc3RyaW5nLT5jX3N0cigpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0g
MDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFRJbnRl
cm1TeW1ib2wgKnN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQy
LnN0cmluZywgVFR5cGUoJCQudHlwZSksIEAyKTsKKyAgICAgICAgICAgICQkLmludGVybUFnZ3Jl
Z2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgQDIpOwor
ICAgICAgICB9CisgICAgfQorICAgIDsKKworZnVsbHlfc3BlY2lmaWVkX3R5cGUKKyAgICA6IHR5
cGVfc3BlY2lmaWVyIHsKKyAgICAgICAgJCQgPSAkMTsKKworICAgICAgICBpZiAoJDEuYXJyYXkp
IHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAibm90IHN1cHBvcnRlZCIsICJmaXJz
dC1jbGFzcyBhcnJheSIpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICAgICAgJDEuc2V0QXJyYXkoZmFsc2UpOworICAgICAgICB9CisgICAgfQorICAgIHwgdHlwZV9x
dWFsaWZpZXIgdHlwZV9zcGVjaWZpZXIgIHsKKyAgICAgICAgaWYgKCQyLmFycmF5KSB7CisgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3Mg
YXJyYXkiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQy
LnNldEFycmF5KGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgkMS5xdWFsaWZpZXIg
PT0gRXZxQXR0cmlidXRlICYmCisgICAgICAgICAgICAoJDIudHlwZSA9PSBFYnRCb29sIHx8ICQy
LnR5cGUgPT0gRWJ0SW50KSkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJjYW5u
b3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSk7Cisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCgk
MS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8ICQxLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5n
T3V0KSAmJgorICAgICAgICAgICAgKCQyLnR5cGUgPT0gRWJ0Qm9vbCB8fCAkMi50eXBlID09IEVi
dEludCkpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAiY2Fubm90IGJlIGJvb2wg
b3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikpOworICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgICQkID0gJDI7CisgICAgICAg
ICQkLnF1YWxpZmllciA9ICQxLnF1YWxpZmllcjsKKyAgICB9CisgICAgOworCit0eXBlX3F1YWxp
ZmllcgorICAgIDogQ09OU1RfUVVBTCB7CisgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2
cUNvbnN0LCBAMSk7CisgICAgfQorICAgIHwgQVRUUklCVVRFIHsKKyAgICAgICAgVkVSVEVYX09O
TFkoImF0dHJpYnV0ZSIsIEAxKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hl
Y2soQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImF0dHJpYnV0ZSIp
KQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAkJC5zZXRCYXNpYyhF
YnRWb2lkLCBFdnFBdHRyaWJ1dGUsIEAxKTsKKyAgICB9CisgICAgfCBWQVJZSU5HIHsKKyAgICAg
ICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSwgInZhcnlpbmciKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NIQURF
UikKKyAgICAgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cVZhcnlpbmdPdXQsIEAxKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVmFyeWlu
Z0luLCBAMSk7CisgICAgfQorICAgIHwgSU5WQVJJQU5UIFZBUllJTkcgeworICAgICAgICBpZiAo
Y29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjayhAMSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9i
YWxMZXZlbCgpLCAiaW52YXJpYW50IHZhcnlpbmciKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NI
QURFUikKKyAgICAgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFyaWFudFZhcnlp
bmdPdXQsIEAxKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9p
ZCwgRXZxSW52YXJpYW50VmFyeWluZ0luLCBAMSk7CisgICAgfQorICAgIHwgVU5JRk9STSB7Cisg
ICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKEAxLCBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCksICJ1bmlmb3JtIikpCisgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cVVuaWZvcm0sIEAxKTsK
KyAgICB9CisgICAgOworCit0eXBlX3NwZWNpZmllcgorICAgIDogdHlwZV9zcGVjaWZpZXJfbm9f
cHJlYyB7CisgICAgICAgICQkID0gJDE7CisKKyAgICAgICAgaWYgKCQkLnByZWNpc2lvbiA9PSBF
YnBVbmRlZmluZWQpIHsKKyAgICAgICAgICAgICQkLnByZWNpc2lvbiA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmdldERlZmF1bHRQcmVjaXNpb24oJDEudHlwZSk7CisgICAgICAgICAgICBpZiAoY29u
dGV4dC0+cHJlY2lzaW9uRXJyb3JDaGVjayhAMSwgJCQucHJlY2lzaW9uLCAkMS50eXBlKSkgewor
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICB8IHByZWNpc2lvbl9xdWFsaWZpZXIgdHlwZV9zcGVjaWZpZXJfbm9f
cHJlYyB7CisgICAgICAgICQkID0gJDI7CisgICAgICAgICQkLnByZWNpc2lvbiA9ICQxOworICAg
IH0KKyAgICA7CisKK3ByZWNpc2lvbl9xdWFsaWZpZXIKKyAgICA6IEhJR0hfUFJFQ0lTSU9OIHsK
KyAgICAgICAgJCQgPSBFYnBIaWdoOworICAgIH0KKyAgICB8IE1FRElVTV9QUkVDSVNJT04gewor
ICAgICAgICAkJCA9IEVicE1lZGl1bTsKKyAgICB9CisgICAgfCBMT1dfUFJFQ0lTSU9OICB7Cisg
ICAgICAgICQkID0gRWJwTG93OworICAgIH0KKyAgICA7CisKK3R5cGVfc3BlY2lmaWVyX25vX3By
ZWMKKyAgICA6IHR5cGVfc3BlY2lmaWVyX25vbmFycmF5IHsKKyAgICAgICAgJCQgPSAkMTsKKyAg
ICB9CisgICAgfCB0eXBlX3NwZWNpZmllcl9ub25hcnJheSBMRUZUX0JSQUNLRVQgY29uc3RhbnRf
ZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKKyAgICAgICAgJCQgPSAkMTsKKworICAgICAgICBp
ZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjayhAMiwgJDEpKQorICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludCBzaXplOwor
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soQDIsICQzLCBzaXpl
KSkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJC5z
ZXRBcnJheSh0cnVlLCBzaXplKTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisKK3R5cGVfc3Bl
Y2lmaWVyX25vbmFycmF5CisgICAgOiBWT0lEX1RZUEUgeworICAgICAgICBUUXVhbGlmaWVyIHF1
YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIHF1YWwsIEAxKTsKKyAg
ICB9CisgICAgfCBGTE9BVF9UWVBFIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4
dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5
OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8
IElOVF9UWVBFIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAk
JC5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBCT09MX1RZUEUgewor
ICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVi
dEJvb2wsIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBWRUMyIHsKKyAgICAgICAgVFF1YWxpZmll
ciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFs
IDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgQDEp
OworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMik7CisgICAgfQorICAgIHwgVkVDMyB7CisgICAg
ICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Rmxv
YXQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRlKDMpOworICAgIH0KKyAgICB8
IFZFQzQgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNl
dEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSg0KTsK
KyAgICB9CisgICAgfCBCVkVDMiB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
KyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgQDEpOworICAgICAgICAkJC5zZXRB
Z2dyZWdhdGUoMik7CisgICAgfQorICAgIHwgQlZFQzMgeworICAgICAgICBUUXVhbGlmaWVyIHF1
YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEJvb2wsIHF1YWwsIEAxKTsKKyAg
ICAgICAgJCQuc2V0QWdncmVnYXRlKDMpOworICAgIH0KKyAgICB8IEJWRUM0IHsKKyAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRCb29sLCBx
dWFsLCBAMSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSg0KTsKKyAgICB9CisgICAgfCBJVkVD
MiB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFz
aWMoRWJ0SW50LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgyKTsKKyAgICB9
CisgICAgfCBJVkVDMyB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAg
ICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0
ZSgzKTsKKyAgICB9CisgICAgfCBJVkVDNCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCBAMSk7CisgICAgICAgICQk
LnNldEFnZ3JlZ2F0ZSg0KTsKKyAgICB9CisgICAgfCBNQVRSSVgyIHsKKyAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwg
QDEpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMiwgdHJ1ZSk7CisgICAgfQorICAgIHwgTUFU
UklYMyB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0
R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0
QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRlKDMsIHRy
dWUpOworICAgIH0KKyAgICB8IE1BVFJJWDQgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7CisgICAgICAg
ICQkLnNldEFnZ3JlZ2F0ZSg0LCB0cnVlKTsKKyAgICB9CisgICAgfCBTQU1QTEVSMkQgeworICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidFNh
bXBsZXIyRCwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IFNBTVBMRVJDVUJFIHsKKyAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVy
Q3ViZSwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IFNBTVBMRVJfRVhURVJOQUxfT0VTIHsKKyAg
ICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0V4dGVuc2lvbigiR0xfT0VTX0VHTF9pbWFnZV9l
eHRlcm5hbCIpKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgInVuc3VwcG9ydGVk
IHR5cGUiLCAic2FtcGxlckV4dGVybmFsT0VTIik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAg
ICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyRXh0ZXJuYWxPRVMsIHF1YWwsIEAxKTsKKyAgICB9
CisgICAgfCBTQU1QTEVSMkRSRUNUIHsKKyAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0V4
dGVuc2lvbigiR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlIikpIHsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKEAxLCAidW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyMkRSZWN0Iik7CisgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgVFF1YWxpZmll
ciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFs
IDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyMkRSZWN0LCBx
dWFsLCBAMSk7CisgICAgfQorICAgIHwgc3RydWN0X3NwZWNpZmllciB7CisgICAgICAgICQkID0g
JDE7CisgICAgICAgICQkLnF1YWxpZmllciA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICB9CisgICAgfCBUWVBFX05B
TUUgeworICAgICAgICAvLworICAgICAgICAvLyBUaGlzIGlzIGZvciB1c2VyIGRlZmluZWQgdHlw
ZSBuYW1lcy4gIFRoZSBsZXhpY2FsIHBoYXNlIGxvb2tlZCB1cCB0aGUKKyAgICAgICAgLy8gdHlw
ZS4KKyAgICAgICAgLy8KKyAgICAgICAgVFR5cGUmIHN0cnVjdHVyZSA9IHN0YXRpY19jYXN0PFRW
YXJpYWJsZSo+KCQxLnN5bWJvbCktPmdldFR5cGUoKTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTdHJ1Y3QsIHF1YWwsIEAxKTsKKyAg
ICAgICAgJCQudXNlckRlZiA9ICZzdHJ1Y3R1cmU7CisgICAgfQorICAgIDsKKworc3RydWN0X3Nw
ZWNpZmllcgorICAgIDogU1RSVUNUIGlkZW50aWZpZXIgTEVGVF9CUkFDRSB7IGlmIChjb250ZXh0
LT5lbnRlclN0cnVjdERlY2xhcmF0aW9uKEAyLCAqJDIuc3RyaW5nKSkgY29udGV4dC0+cmVjb3Zl
cigpOyB9IHN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IFJJR0hUX0JSQUNFIHsKKyAgICAgICAgaWYg
KGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZykpCisgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgVFR5cGUqIHN0cnVjdHVyZSA9IG5ldyBU
VHlwZShuZXcgVFN0cnVjdHVyZSgkMi5zdHJpbmcsICQ1KSk7CisgICAgICAgIFRWYXJpYWJsZSog
dXNlclR5cGVEZWYgPSBuZXcgVFZhcmlhYmxlKCQyLnN0cmluZywgKnN0cnVjdHVyZSwgdHJ1ZSk7
CisgICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgqdXNlclR5cGVEZWYp
KSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgInJlZGVmaW5pdGlvbiIsICQyLnN0
cmluZy0+Y19zdHIoKSwgInN0cnVjdCIpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICB9CisgICAgICAgICQkLnNldEJhc2ljKEVidFN0cnVjdCwgRXZxVGVtcG9yYXJ5
LCBAMSk7CisgICAgICAgICQkLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7CisgICAgICAgIGNvbnRleHQt
PmV4aXRTdHJ1Y3REZWNsYXJhdGlvbigpOworICAgIH0KKyAgICB8IFNUUlVDVCBMRUZUX0JSQUNF
IHsgaWYgKGNvbnRleHQtPmVudGVyU3RydWN0RGVjbGFyYXRpb24oQDIsICokMi5zdHJpbmcpKSBj
b250ZXh0LT5yZWNvdmVyKCk7IH0gc3RydWN0X2RlY2xhcmF0aW9uX2xpc3QgUklHSFRfQlJBQ0Ug
eworICAgICAgICBUVHlwZSogc3RydWN0dXJlID0gbmV3IFRUeXBlKG5ldyBUU3RydWN0dXJlKE5l
d1Bvb2xUU3RyaW5nKCIiKSwgJDQpKTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U3RydWN0LCBF
dnFUZW1wb3JhcnksIEAxKTsKKyAgICAgICAgJCQudXNlckRlZiA9IHN0cnVjdHVyZTsKKyAgICAg
ICAgY29udGV4dC0+ZXhpdFN0cnVjdERlY2xhcmF0aW9uKCk7CisgICAgfQorICAgIDsKKworc3Ry
dWN0X2RlY2xhcmF0aW9uX2xpc3QKKyAgICA6IHN0cnVjdF9kZWNsYXJhdGlvbiB7CisgICAgICAg
ICQkID0gJDE7CisgICAgfQorICAgIHwgc3RydWN0X2RlY2xhcmF0aW9uX2xpc3Qgc3RydWN0X2Rl
Y2xhcmF0aW9uIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCAkMi0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIFRGaWVsZCogZmllbGQgPSAoKiQy
KVtpXTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgJCQtPnNpemUoKTsgKytq
KSB7CisgICAgICAgICAgICAgICAgaWYgKCgqJCQpW2pdLT5uYW1lKCkgPT0gZmllbGQtPm5hbWUo
KSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgImR1cGxpY2F0ZSBm
aWVsZCBuYW1lIGluIHN0cnVjdHVyZToiLCAic3RydWN0IiwgZmllbGQtPm5hbWUoKS5jX3N0cigp
KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICQkLT5wdXNoX2JhY2soZmllbGQpOwor
ICAgICAgICB9CisgICAgfQorICAgIDsKKworc3RydWN0X2RlY2xhcmF0aW9uCisgICAgOiB0eXBl
X3NwZWNpZmllciBzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0IFNFTUlDT0xPTiB7CisgICAgICAgICQk
ID0gJDI7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPnZvaWRFcnJvckNoZWNrKEAxLCAoKiQyKVsw
XS0+bmFtZSgpLCAkMSkpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8ICQkLT5zaXplKCk7ICsr
aSkgeworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIENhcmVmdWwgbm90IHRvIHJlcGxh
Y2UgYWxyZWFkeSBrbm93biBhc3BlY3RzIG9mIHR5cGUsIGxpa2UgYXJyYXktbmVzcworICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgIFRUeXBlKiB0eXBlID0gKCokJClbaV0tPnR5cGUoKTsKKyAg
ICAgICAgICAgIHR5cGUtPnNldEJhc2ljVHlwZSgkMS50eXBlKTsKKyAgICAgICAgICAgIHR5cGUt
PnNldE5vbWluYWxTaXplKCQxLnNpemUpOworICAgICAgICAgICAgdHlwZS0+c2V0TWF0cml4KCQx
Lm1hdHJpeCk7CisgICAgICAgICAgICB0eXBlLT5zZXRQcmVjaXNpb24oJDEucHJlY2lzaW9uKTsK
KworICAgICAgICAgICAgLy8gZG9uJ3QgYWxsb3cgYXJyYXlzIG9mIGFycmF5cworICAgICAgICAg
ICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5h
cnJheVR5cGVFcnJvckNoZWNrKEAxLCAkMSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgkMS5hcnJheSkKKyAg
ICAgICAgICAgICAgICB0eXBlLT5zZXRBcnJheVNpemUoJDEuYXJyYXlTaXplKTsKKyAgICAgICAg
ICAgIGlmICgkMS51c2VyRGVmKQorICAgICAgICAgICAgICAgIHR5cGUtPnNldFN0cnVjdCgkMS51
c2VyRGVmLT5nZXRTdHJ1Y3QoKSk7CisKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RO
ZXN0aW5nRXJyb3JDaGVjayhAMSwgKigqJCQpW2ldKSkKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCitzdHJ1Y3RfZGVjbGFyYXRv
cl9saXN0CisgICAgOiBzdHJ1Y3RfZGVjbGFyYXRvciB7CisgICAgICAgICQkID0gTmV3UG9vbFRG
aWVsZExpc3QoKTsKKyAgICAgICAgJCQtPnB1c2hfYmFjaygkMSk7CisgICAgfQorICAgIHwgc3Ry
dWN0X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBzdHJ1Y3RfZGVjbGFyYXRvciB7CisgICAgICAgICQk
LT5wdXNoX2JhY2soJDMpOworICAgIH0KKyAgICA7CisKK3N0cnVjdF9kZWNsYXJhdG9yCisgICAg
OiBpZGVudGlmaWVyIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjayhA
MSwgKiQxLnN0cmluZykpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAg
ICAgVFR5cGUqIHR5cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKKyAgICAg
ICAgJCQgPSBuZXcgVEZpZWxkKHR5cGUsICQxLnN0cmluZyk7CisgICAgfQorICAgIHwgaWRlbnRp
ZmllciBMRUZUX0JSQUNLRVQgY29uc3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKKyAg
ICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjayhAMSwgKiQxLnN0cmluZykpCisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgVFR5cGUqIHR5cGUgPSBu
ZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKKyAgICAgICAgaW50IHNpemUgPSAwOwor
ICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjayhAMywgJDMsIHNpemUpKQor
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB0eXBlLT5zZXRBcnJheVNp
emUoc2l6ZSk7CisKKyAgICAgICAgJCQgPSBuZXcgVEZpZWxkKHR5cGUsICQxLnN0cmluZyk7Cisg
ICAgfQorICAgIDsKKworaW5pdGlhbGl6ZXIKKyAgICA6IGFzc2lnbm1lbnRfZXhwcmVzc2lvbiB7
ICQkID0gJDE7IH0KKyAgICA7CisKK2RlY2xhcmF0aW9uX3N0YXRlbWVudAorICAgIDogZGVjbGFy
YXRpb24geyAkJCA9ICQxOyB9CisgICAgOworCitzdGF0ZW1lbnQKKyAgICA6IGNvbXBvdW5kX3N0
YXRlbWVudCAgeyAkJCA9ICQxOyB9CisgICAgfCBzaW1wbGVfc3RhdGVtZW50ICAgIHsgJCQgPSAk
MTsgfQorICAgIDsKKworLy8gR3JhbW1hciBOb3RlOiAgTm8gbGFiZWxlZCBzdGF0ZW1lbnRzOyAn
Z290bycgaXMgbm90IHN1cHBvcnRlZC4KKworc2ltcGxlX3N0YXRlbWVudAorICAgIDogZGVjbGFy
YXRpb25fc3RhdGVtZW50IHsgJCQgPSAkMTsgfQorICAgIHwgZXhwcmVzc2lvbl9zdGF0ZW1lbnQg
IHsgJCQgPSAkMTsgfQorICAgIHwgc2VsZWN0aW9uX3N0YXRlbWVudCAgIHsgJCQgPSAkMTsgfQor
ICAgIHwgaXRlcmF0aW9uX3N0YXRlbWVudCAgIHsgJCQgPSAkMTsgfQorICAgIHwganVtcF9zdGF0
ZW1lbnQgICAgICAgIHsgJCQgPSAkMTsgfQorICAgIDsKKworY29tcG91bmRfc3RhdGVtZW50Cisg
ICAgOiBMRUZUX0JSQUNFIFJJR0hUX0JSQUNFIHsgJCQgPSAwOyB9CisgICAgfCBMRUZUX0JSQUNF
IHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyB9IHN0YXRlbWVudF9saXN0IHsgY29udGV4
dC0+c3ltYm9sVGFibGUucG9wKCk7IH0gUklHSFRfQlJBQ0UgeworICAgICAgICBpZiAoJDMgIT0g
MCkgeworICAgICAgICAgICAgJDMtPnNldE9wKEVPcFNlcXVlbmNlKTsKKyAgICAgICAgICAgICQz
LT5zZXRMaW5lKEAkKTsKKyAgICAgICAgfQorICAgICAgICAkJCA9ICQzOworICAgIH0KKyAgICA7
CisKK3N0YXRlbWVudF9ub19uZXdfc2NvcGUKKyAgICA6IGNvbXBvdW5kX3N0YXRlbWVudF9ub19u
ZXdfc2NvcGUgeyAkJCA9ICQxOyB9CisgICAgfCBzaW1wbGVfc3RhdGVtZW50ICAgICAgICAgICAg
ICAgIHsgJCQgPSAkMTsgfQorICAgIDsKKworc3RhdGVtZW50X3dpdGhfc2NvcGUKKyAgICA6IHsg
Y29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyB9IGNvbXBvdW5kX3N0YXRlbWVudF9ub19uZXdf
c2NvcGUgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgJCQgPSAkMjsgfQorICAgIHwgeyBj
b250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0gc2ltcGxlX3N0YXRlbWVudCAgICAgICAgICAg
ICAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOyAkJCA9ICQyOyB9CisgICAgOworCitj
b21wb3VuZF9zdGF0ZW1lbnRfbm9fbmV3X3Njb3BlCisgICAgLy8gU3RhdGVtZW50IHRoYXQgZG9l
c24ndCBjcmVhdGUgYSBuZXcgc2NvcGUsIGZvciBzZWxlY3Rpb25fc3RhdGVtZW50LCBpdGVyYXRp
b25fc3RhdGVtZW50CisgICAgOiBMRUZUX0JSQUNFIFJJR0hUX0JSQUNFIHsKKyAgICAgICAgJCQg
PSAwOworICAgIH0KKyAgICB8IExFRlRfQlJBQ0Ugc3RhdGVtZW50X2xpc3QgUklHSFRfQlJBQ0Ug
eworICAgICAgICBpZiAoJDIpIHsKKyAgICAgICAgICAgICQyLT5zZXRPcChFT3BTZXF1ZW5jZSk7
CisgICAgICAgICAgICAkMi0+c2V0TGluZShAJCk7CisgICAgICAgIH0KKyAgICAgICAgJCQgPSAk
MjsKKyAgICB9CisgICAgOworCitzdGF0ZW1lbnRfbGlzdAorICAgIDogc3RhdGVtZW50IHsKKyAg
ICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZSgkMSwgQCQpOwor
ICAgIH0KKyAgICB8IHN0YXRlbWVudF9saXN0IHN0YXRlbWVudCB7CisgICAgICAgICQkID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEsICQyLCBAJCk7CisgICAgfQorICAg
IDsKKworZXhwcmVzc2lvbl9zdGF0ZW1lbnQKKyAgICA6IFNFTUlDT0xPTiAgeyAkJCA9IDA7IH0K
KyAgICB8IGV4cHJlc3Npb24gU0VNSUNPTE9OICB7ICQkID0gc3RhdGljX2Nhc3Q8VEludGVybU5v
ZGUqPigkMSk7IH0KKyAgICA7CisKK3NlbGVjdGlvbl9zdGF0ZW1lbnQKKyAgICA6IElGIExFRlRf
UEFSRU4gZXhwcmVzc2lvbiBSSUdIVF9QQVJFTiBzZWxlY3Rpb25fcmVzdF9zdGF0ZW1lbnQgewor
ICAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2soQDEsICQzKSkKKyAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkU2VsZWN0aW9uKCQzLCAkNSwgQDEpOworICAgIH0KKyAgICA7CisKK3NlbGVjdGlvbl9yZXN0
X3N0YXRlbWVudAorICAgIDogc3RhdGVtZW50X3dpdGhfc2NvcGUgRUxTRSBzdGF0ZW1lbnRfd2l0
aF9zY29wZSB7CisgICAgICAgICQkLm5vZGUxID0gJDE7CisgICAgICAgICQkLm5vZGUyID0gJDM7
CisgICAgfQorICAgIHwgc3RhdGVtZW50X3dpdGhfc2NvcGUgeworICAgICAgICAkJC5ub2RlMSA9
ICQxOworICAgICAgICAkJC5ub2RlMiA9IDA7CisgICAgfQorICAgIDsKKworLy8gR3JhbW1hciBO
b3RlOiAgTm8gJ3N3aXRjaCcuICBTd2l0Y2ggc3RhdGVtZW50cyBub3Qgc3VwcG9ydGVkLgorCitj
b25kaXRpb24KKyAgICAvLyBJbiAxOTk2IGMrKyBkcmFmdCwgY29uZGl0aW9ucyBjYW4gaW5jbHVk
ZSBzaW5nbGUgZGVjbGFyYXRpb25zCisgICAgOiBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAk
MTsKKyAgICAgICAgaWYgKGNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCQxLT5nZXRMaW5lKCksICQx
KSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICB9CisgICAgfCBmdWxseV9z
cGVjaWZpZWRfdHlwZSBpZGVudGlmaWVyIEVRVUFMIGluaXRpYWxpemVyIHsKKyAgICAgICAgVElu
dGVybU5vZGUqIGludGVybU5vZGU7CisgICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZp
ZXJFcnJvckNoZWNrKEAyLCAkMSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVjayhAMiwgJDEpKQorICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmICghY29udGV4dC0+ZXhlY3V0ZUluaXRp
YWxpemVyKEAyLCAqJDIuc3RyaW5nLCAkMSwgJDQsIGludGVybU5vZGUpKQorICAgICAgICAgICAg
JCQgPSAkNDsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgICAgICAkJCA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCitpdGVyYXRp
b25fc3RhdGVtZW50CisgICAgOiBXSElMRSBMRUZUX1BBUkVOIHsgY29udGV4dC0+c3ltYm9sVGFi
bGUucHVzaCgpOyArK2NvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0gY29uZGl0aW9uIFJJR0hU
X1BBUkVOIHN0YXRlbWVudF9ub19uZXdfc2NvcGUgeworICAgICAgICBjb250ZXh0LT5zeW1ib2xU
YWJsZS5wb3AoKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkTG9vcChF
TG9vcFdoaWxlLCAwLCAkNCwgMCwgJDYsIEAxKTsKKyAgICAgICAgLS1jb250ZXh0LT5sb29wTmVz
dGluZ0xldmVsOworICAgIH0KKyAgICB8IERPIHsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVs
OyB9IHN0YXRlbWVudF93aXRoX3Njb3BlIFdISUxFIExFRlRfUEFSRU4gZXhwcmVzc2lvbiBSSUdI
VF9QQVJFTiBTRU1JQ09MT04geworICAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2so
QDgsICQ2KSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAkJCA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRMb29wKEVMb29wRG9XaGlsZSwgMCwgJDYsIDAsICQz
LCBANCk7CisgICAgICAgIC0tY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsKKyAgICB9CisgICAg
fCBGT1IgTEVGVF9QQVJFTiB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgKytjb250ZXh0
LT5sb29wTmVzdGluZ0xldmVsOyB9IGZvcl9pbml0X3N0YXRlbWVudCBmb3JfcmVzdF9zdGF0ZW1l
bnQgUklHSFRfUEFSRU4gc3RhdGVtZW50X25vX25ld19zY29wZSB7CisgICAgICAgIGNvbnRleHQt
PnN5bWJvbFRhYmxlLnBvcCgpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRMb29wKEVMb29wRm9yLCAkNCwgcmVpbnRlcnByZXRfY2FzdDxUSW50ZXJtVHlwZWQqPigkNS5u
b2RlMSksIHJlaW50ZXJwcmV0X2Nhc3Q8VEludGVybVR5cGVkKj4oJDUubm9kZTIpLCAkNywgQDEp
OworICAgICAgICAtLWNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7CisgICAgfQorICAgIDsKKwor
Zm9yX2luaXRfc3RhdGVtZW50CisgICAgOiBleHByZXNzaW9uX3N0YXRlbWVudCB7CisgICAgICAg
ICQkID0gJDE7CisgICAgfQorICAgIHwgZGVjbGFyYXRpb25fc3RhdGVtZW50IHsKKyAgICAgICAg
JCQgPSAkMTsKKyAgICB9CisgICAgOworCitjb25kaXRpb25vcHQKKyAgICA6IGNvbmRpdGlvbiB7
CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgLyogTWF5IGJlIG51bGwgKi8geworICAg
ICAgICAkJCA9IDA7CisgICAgfQorICAgIDsKKworZm9yX3Jlc3Rfc3RhdGVtZW50CisgICAgOiBj
b25kaXRpb25vcHQgU0VNSUNPTE9OIHsKKyAgICAgICAgJCQubm9kZTEgPSAkMTsKKyAgICAgICAg
JCQubm9kZTIgPSAwOworICAgIH0KKyAgICB8IGNvbmRpdGlvbm9wdCBTRU1JQ09MT04gZXhwcmVz
c2lvbiAgeworICAgICAgICAkJC5ub2RlMSA9ICQxOworICAgICAgICAkJC5ub2RlMiA9ICQzOwor
ICAgIH0KKyAgICA7CisKK2p1bXBfc3RhdGVtZW50CisgICAgOiBDT05USU5VRSBTRU1JQ09MT04g
eworICAgICAgICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7CisgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcihAMSwgImNvbnRpbnVlIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQg
aW4gbG9vcHMiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
IH0KKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcENvbnRp
bnVlLCBAMSk7CisgICAgfQorICAgIHwgQlJFQUsgU0VNSUNPTE9OIHsKKyAgICAgICAgaWYgKGNv
bnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPD0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoQDEsICJicmVhayBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIpOworICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgICQkID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BCcmVhaywgQDEpOworICAgIH0KKyAgICB8
IFJFVFVSTiBTRU1JQ09MT04geworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRCcmFuY2goRU9wUmV0dXJuLCBAMSk7CisgICAgICAgIGlmIChjb250ZXh0LT5jdXJyZW50RnVu
Y3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7CisgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcihAMSwgIm5vbi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUiLCAi
cmV0dXJuIik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgfCBSRVRVUk4gZXhwcmVzc2lvbiBTRU1JQ09MT04geworICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCAkMiwgQDEpOworICAgICAg
ICBjb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IHRydWU7CisgICAgICAgIGlmIChjb250
ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkKSB7Cisg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgInZvaWQgZnVuY3Rpb24gY2Fubm90IHJldHVy
biBhIHZhbHVlIiwgInJldHVybiIpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICB9IGVsc2UgaWYgKCooY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZSkgIT0gJDIt
PmdldFR5cGUoKSkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJmdW5jdGlvbiBy
ZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6IiwgInJldHVybiIpOworICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgfQorICAgIHwgRElTQ0FSRCBTRU1JQ09M
T04geworICAgICAgICBGUkFHX09OTFkoImRpc2NhcmQiLCBAMSk7CisgICAgICAgICQkID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BLaWxsLCBAMSk7CisgICAgfQorICAgIDsK
KworLy8gR3JhbW1hciBOb3RlOiAgTm8gJ2dvdG8nLiAgR290b3MgYXJlIG5vdCBzdXBwb3J0ZWQu
CisKK3RyYW5zbGF0aW9uX3VuaXQKKyAgICA6IGV4dGVybmFsX2RlY2xhcmF0aW9uIHsKKyAgICAg
ICAgJCQgPSAkMTsKKyAgICAgICAgY29udGV4dC0+dHJlZVJvb3QgPSAkJDsKKyAgICB9CisgICAg
fCB0cmFuc2xhdGlvbl91bml0IGV4dGVybmFsX2RlY2xhcmF0aW9uIHsKKyAgICAgICAgJCQgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMSwgJDIsIEAkKTsKKyAgICAgICAg
Y29udGV4dC0+dHJlZVJvb3QgPSAkJDsKKyAgICB9CisgICAgOworCitleHRlcm5hbF9kZWNsYXJh
dGlvbgorICAgIDogZnVuY3Rpb25fZGVmaW5pdGlvbiB7CisgICAgICAgICQkID0gJDE7CisgICAg
fQorICAgIHwgZGVjbGFyYXRpb24geworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICA7CisK
K2Z1bmN0aW9uX2RlZmluaXRpb24KKyAgICA6IGZ1bmN0aW9uX3Byb3RvdHlwZSB7CisgICAgICAg
IFRGdW5jdGlvbiogZnVuY3Rpb24gPSAkMS5mdW5jdGlvbjsKKyAgICAgICAgCisgICAgICAgIGNv
bnN0IFRTeW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbihm
dW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoYnVpbHRJ
bikKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJidWlsdC1pbiBm
dW5jdGlvbnMgY2Fubm90IGJlIHJlZGVmaW5lZCIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIo
KSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNv
bnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoZnVuY3Rpb24tPmdldE1hbmdsZWROYW1lKCkpKTsKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gTm90ZTogICdwcmV2RGVjJyBjb3VsZCBiZSAnZnVuY3Rpb24n
IGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUgc2VlbiBmdW5jdGlvbgorICAgICAgICAv
LyBhcyBpdCB3b3VsZCBoYXZlIGp1c3QgYmVlbiBwdXQgaW4gdGhlIHN5bWJvbCB0YWJsZS4gIE90
aGVyd2lzZSwgd2UncmUgbG9va2luZyB1cAorICAgICAgICAvLyBhbiBlYXJsaWVyIG9jY3VyYW5j
ZS4KKyAgICAgICAgLy8KKyAgICAgICAgaWYgKHByZXZEZWMtPmlzRGVmaW5lZCgpKSB7CisgICAg
ICAgICAgICAvLworICAgICAgICAgICAgLy8gVGhlbiB0aGlzIGZ1bmN0aW9uIGFscmVhZHkgaGFz
IGEgYm9keS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwg
ImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIo
KSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAg
cHJldkRlYy0+c2V0RGVmaW5lZCgpOworCisgICAgICAgIC8vCisgICAgICAgIC8vIFJhaXNlIGVy
cm9yIG1lc3NhZ2UgaWYgbWFpbiBmdW5jdGlvbiB0YWtlcyBhbnkgcGFyYW1ldGVycyBvciByZXR1
cm4gYW55dGhpbmcgb3RoZXIgdGhhbiB2b2lkCisgICAgICAgIC8vCisgICAgICAgIGlmIChmdW5j
dGlvbi0+Z2V0TmFtZSgpID09ICJtYWluIikgeworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLT5n
ZXRQYXJhbUNvdW50KCkgPiAwKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEs
ICJmdW5jdGlvbiBjYW5ub3QgdGFrZSBhbnkgcGFyYW1ldGVyKHMpIiwgZnVuY3Rpb24tPmdldE5h
bWUoKS5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoZnVuY3Rpb24tPmdldFJldHVyblR5cGUoKS5nZXRC
YXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
QDEsICIiLCBmdW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCksICJtYWlu
IGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIpOworICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vCisg
ICAgICAgIC8vIFJlbWVtYmVyIHRoZSByZXR1cm4gdHlwZSBmb3IgbGF0ZXIgY2hlY2tpbmcgZm9y
IFJFVFVSTiBzdGF0ZW1lbnRzLgorICAgICAgICAvLworICAgICAgICBjb250ZXh0LT5jdXJyZW50
RnVuY3Rpb25UeXBlID0gJihwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkpOworICAgICAgICBjb250
ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IGZhbHNlOworCisgICAgICAgIC8vCisgICAgICAg
IC8vIEluc2VydCBwYXJhbWV0ZXJzIGludG8gdGhlIHN5bWJvbCB0YWJsZS4KKyAgICAgICAgLy8g
SWYgdGhlIHBhcmFtZXRlciBoYXMgbm8gbmFtZSwgaXQncyBub3QgYW4gZXJyb3IsIGp1c3QgZG9u
J3QgaW5zZXJ0IGl0CisgICAgICAgIC8vIChjb3VsZCBiZSB1c2VkIGZvciB1bnVzZWQgYXJncyku
CisgICAgICAgIC8vCisgICAgICAgIC8vIEFsc28sIGFjY3VtdWxhdGUgdGhlIGxpc3Qgb2YgcGFy
YW1ldGVycyBpbnRvIHRoZSBISUwsIHNvIGxvd2VyIGxldmVsIGNvZGUKKyAgICAgICAgLy8ga25v
d3Mgd2hlcmUgdG8gZmluZCBwYXJhbWV0ZXJzLgorICAgICAgICAvLworICAgICAgICBUSW50ZXJt
QWdncmVnYXRlKiBwYXJhbU5vZGVzID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGU7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb24tPmdldFBhcmFtQ291bnQoKTsgaSsrKSB7Cisg
ICAgICAgICAgICBjb25zdCBUUGFyYW1ldGVyJiBwYXJhbSA9IGZ1bmN0aW9uLT5nZXRQYXJhbShp
KTsKKyAgICAgICAgICAgIGlmIChwYXJhbS5uYW1lICE9IDApIHsKKyAgICAgICAgICAgICAgICBU
VmFyaWFibGUgKnZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZShwYXJhbS5uYW1lLCAqcGFyYW0udHlw
ZSk7CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIHBh
cmFtZXRlcnMgd2l0aCBuYW1lIGluIHRoZSBzeW1ib2wgdGFibGUuCisgICAgICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnZh
cmlhYmxlKSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgInJlZGVm
aW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhcmlh
YmxlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAgICAgLy8gQWRkIHRoZSBwYXJhbWV0ZXIgdG8gdGhlIEhJTAorICAgICAgICAgICAgICAgIC8v
CisgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcyA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93
QWdncmVnYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJhbU5vZGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJ
ZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXROYW1lKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBAMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAx
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcyA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKHBhcmFtTm9kZXMsIGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsICpwYXJhbS50eXBlLCBAMSksIEAxKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdn
cmVnYXRlT3BlcmF0b3IocGFyYW1Ob2RlcywgRU9wUGFyYW1ldGVycywgQDEpOworICAgICAgICAk
MS5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJhbU5vZGVzOworICAgICAgICBjb250ZXh0LT5sb29wTmVz
dGluZ0xldmVsID0gMDsKKyAgICB9CisgICAgY29tcG91bmRfc3RhdGVtZW50X25vX25ld19zY29w
ZSB7CisgICAgICAgIC8vPz8gQ2hlY2sgdGhhdCBhbGwgcGF0aHMgcmV0dXJuIGEgdmFsdWUgaWYg
cmV0dXJuIHR5cGUgIT0gdm9pZCA/CisgICAgICAgIC8vICAgTWF5IGJlIGJlc3QgZG9uZSBhcyBw
b3N0IHByb2Nlc3MgcGhhc2Ugb24gaW50ZXJtZWRpYXRlIGNvZGUKKyAgICAgICAgaWYgKGNvbnRl
eHQtPmN1cnJlbnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQgJiYgISBj
b250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoQDEsICJmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZToiLCAiIiwgJDEuZnVuY3Rp
b24tPmdldE5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
Z3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1BZ2dyZWdhdGUsICQzLCBAJCk7CisgICAgICAgIGNvbnRl
eHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcigkJCwgRU9wRnVuY3Rpb24sIEAx
KTsKKyAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldE5hbWUoJDEuZnVuY3Rpb24tPmdl
dE1hbmdsZWROYW1lKCkuY19zdHIoKSk7CisgICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5z
ZXRUeXBlKCQxLmZ1bmN0aW9uLT5nZXRSZXR1cm5UeXBlKCkpOworCisgICAgICAgIC8vIHN0b3Jl
IHRoZSBwcmFnbWEgaW5mb3JtYXRpb24gZm9yIGRlYnVnIGFuZCBvcHRpbWl6ZSBhbmQgb3RoZXIg
dmVuZG9yIHNwZWNpZmljCisgICAgICAgIC8vIGluZm9ybWF0aW9uLiBUaGlzIGluZm9ybWF0aW9u
IGNhbiBiZSBxdWVyaWVkIGZyb20gdGhlIHBhcnNlIHRyZWUKKyAgICAgICAgJCQtPmdldEFzQWdn
cmVnYXRlKCktPnNldE9wdGltaXplKGNvbnRleHQtPnByYWdtYSgpLm9wdGltaXplKTsKKyAgICAg
ICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldERlYnVnKGNvbnRleHQtPnByYWdtYSgpLmRlYnVn
KTsKKworICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKKyAgICB9CisgICAgOwor
CislJQorCitpbnQgZ2xzbGFuZ19wYXJzZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7CisgICAg
cmV0dXJuIHl5cGFyc2UoY29udGV4dCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX2xleC5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX2xleC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNjQ4ZTc2MTA2NjNmMjc3OTA1NTY1YjQzOTdmZTE0YTQ5NzUzM2I0ZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL2dsc2xhbmdfbGV4LmNwcApAQCAtMCwwICsxLDI5NzggQEAKKyNsaW5lIDE3ICIuL2ds
c2xhbmcubCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQg
YnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKKworLy8gSWdub3JlIGVycm9ycyBp
biBhdXRvLWdlbmVyYXRlZCBjb2RlLgorI2lmIGRlZmluZWQoX19HTlVDX18pCisjcHJhZ21hIEdD
QyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLWZ1bmN0aW9uIgorI3ByYWdtYSBHQ0MgZGlh
Z25vc3RpYyBpZ25vcmVkICItV3VudXNlZC12YXJpYWJsZSIKKyNwcmFnbWEgR0NDIGRpYWdub3N0
aWMgaWdub3JlZCAiLVdzd2l0Y2gtZW51bSIKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpCisjcHJh
Z21hIHdhcm5pbmcoZGlzYWJsZTogNDA2NSkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MTg5
KQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ1MDUpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJs
ZTogNDcwMSkKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX2NsYW5nX18pCisjcHJhZ21hIGNsYW5n
IGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5r
bm93bi1wcmFnbWFzIgorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVj
YXRlZC1yZWdpc3RlciIKKyNlbmRpZgorCisjbGluZSAyNSAiLi9nbHNsYW5nX2xleC5jcHAiCisK
KyNkZWZpbmUgIFlZX0lOVF9BTElHTkVEIHNob3J0IGludAorCisvKiBBIGxleGljYWwgc2Nhbm5l
ciBnZW5lcmF0ZWQgYnkgZmxleCAqLworCisjZGVmaW5lIEZMRVhfU0NBTk5FUgorI2RlZmluZSBZ
WV9GTEVYX01BSk9SX1ZFUlNJT04gMgorI2RlZmluZSBZWV9GTEVYX01JTk9SX1ZFUlNJT04gNQor
I2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gMzcKKyNpZiBZWV9GTEVYX1NVQk1JTk9S
X1ZFUlNJT04gPiAwCisjZGVmaW5lIEZMRVhfQkVUQQorI2VuZGlmCisKKy8qIEZpcnN0LCB3ZSBk
ZWFsIHdpdGggIHBsYXRmb3JtLXNwZWNpZmljIG9yIGNvbXBpbGVyLXNwZWNpZmljIGlzc3Vlcy4g
Ki8KKworLyogYmVnaW4gc3RhbmRhcmQgQyBoZWFkZXJzLiAqLworI2luY2x1ZGUgPHN0ZGlvLmg+
CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRs
aWIuaD4KKworLyogZW5kIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KKworLyogZmxleCBpbnRlZ2Vy
IHR5cGUgZGVmaW5pdGlvbnMgKi8KKworI2lmbmRlZiBGTEVYSU5UX0gKKyNkZWZpbmUgRkxFWElO
VF9ICisKKy8qIEM5OSBzeXN0ZW1zIGhhdmUgPGludHR5cGVzLmg+LiBOb24tQzk5IHN5c3RlbXMg
bWF5IG9yIG1heSBub3QuICovCisKKyNpZiBkZWZpbmVkIChfX1NURENfVkVSU0lPTl9fKSAmJiBf
X1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKworLyogQzk5IHNheXMgdG8gZGVmaW5lIF9fU1RE
Q19MSU1JVF9NQUNST1MgYmVmb3JlIGluY2x1ZGluZyBzdGRpbnQuaCwKKyAqIGlmIHlvdSB3YW50
IHRoZSBsaW1pdCAobWF4L21pbikgbWFjcm9zIGZvciBpbnQgdHlwZXMuIAorICovCisjaWZuZGVm
IF9fU1REQ19MSU1JVF9NQUNST1MKKyNkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyAxCisjZW5k
aWYKKworI2luY2x1ZGUgPGludHR5cGVzLmg+Cit0eXBlZGVmIGludDhfdCBmbGV4X2ludDhfdDsK
K3R5cGVkZWYgdWludDhfdCBmbGV4X3VpbnQ4X3Q7Cit0eXBlZGVmIGludDE2X3QgZmxleF9pbnQx
Nl90OwordHlwZWRlZiB1aW50MTZfdCBmbGV4X3VpbnQxNl90OwordHlwZWRlZiBpbnQzMl90IGZs
ZXhfaW50MzJfdDsKK3R5cGVkZWYgdWludDMyX3QgZmxleF91aW50MzJfdDsKKyNlbHNlCit0eXBl
ZGVmIHNpZ25lZCBjaGFyIGZsZXhfaW50OF90OwordHlwZWRlZiBzaG9ydCBpbnQgZmxleF9pbnQx
Nl90OwordHlwZWRlZiBpbnQgZmxleF9pbnQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIGZs
ZXhfdWludDhfdDsgCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBmbGV4X3VpbnQxNl90Owor
dHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxleF91aW50MzJfdDsKKworLyogTGltaXRzIG9mIGludGVn
cmFsIHR5cGVzLiAqLworI2lmbmRlZiBJTlQ4X01JTgorI2RlZmluZSBJTlQ4X01JTiAgICAgICAg
ICAgICAgICgtMTI4KQorI2VuZGlmCisjaWZuZGVmIElOVDE2X01JTgorI2RlZmluZSBJTlQxNl9N
SU4gICAgICAgICAgICAgICgtMzI3NjctMSkKKyNlbmRpZgorI2lmbmRlZiBJTlQzMl9NSU4KKyNk
ZWZpbmUgSU5UMzJfTUlOICAgICAgICAgICAgICAoLTIxNDc0ODM2NDctMSkKKyNlbmRpZgorI2lm
bmRlZiBJTlQ4X01BWAorI2RlZmluZSBJTlQ4X01BWCAgICAgICAgICAgICAgICgxMjcpCisjZW5k
aWYKKyNpZm5kZWYgSU5UMTZfTUFYCisjZGVmaW5lIElOVDE2X01BWCAgICAgICAgICAgICAgKDMy
NzY3KQorI2VuZGlmCisjaWZuZGVmIElOVDMyX01BWAorI2RlZmluZSBJTlQzMl9NQVggICAgICAg
ICAgICAgICgyMTQ3NDgzNjQ3KQorI2VuZGlmCisjaWZuZGVmIFVJTlQ4X01BWAorI2RlZmluZSBV
SU5UOF9NQVggICAgICAgICAgICAgICgyNTVVKQorI2VuZGlmCisjaWZuZGVmIFVJTlQxNl9NQVgK
KyNkZWZpbmUgVUlOVDE2X01BWCAgICAgICAgICAgICAoNjU1MzVVKQorI2VuZGlmCisjaWZuZGVm
IFVJTlQzMl9NQVgKKyNkZWZpbmUgVUlOVDMyX01BWCAgICAgICAgICAgICAoNDI5NDk2NzI5NVUp
CisjZW5kaWYKKworI2VuZGlmIC8qICEgQzk5ICovCisKKyNlbmRpZiAvKiAhIEZMRVhJTlRfSCAq
LworCisjaWZkZWYgX19jcGx1c3BsdXMKKworLyogVGhlICJjb25zdCIgc3RvcmFnZS1jbGFzcy1t
b2RpZmllciBpcyB2YWxpZC4gKi8KKyNkZWZpbmUgWVlfVVNFX0NPTlNUCisKKyNlbHNlCS8qICEg
X19jcGx1c3BsdXMgKi8KKworLyogQzk5IHJlcXVpcmVzIF9fU1REQ19fIHRvIGJlIGRlZmluZWQg
YXMgMS4gKi8KKyNpZiBkZWZpbmVkIChfX1NURENfXykKKworI2RlZmluZSBZWV9VU0VfQ09OU1QK
KworI2VuZGlmCS8qIGRlZmluZWQgKF9fU1REQ19fKSAqLworI2VuZGlmCS8qICEgX19jcGx1c3Bs
dXMgKi8KKworI2lmZGVmIFlZX1VTRV9DT05TVAorI2RlZmluZSB5eWNvbnN0IGNvbnN0CisjZWxz
ZQorI2RlZmluZSB5eWNvbnN0CisjZW5kaWYKKworLyogUmV0dXJuZWQgdXBvbiBlbmQtb2YtZmls
ZS4gKi8KKyNkZWZpbmUgWVlfTlVMTCAwCisKKy8qIFByb21vdGVzIGEgcG9zc2libHkgbmVnYXRp
dmUsIHBvc3NpYmx5IHNpZ25lZCBjaGFyIHRvIGFuIHVuc2lnbmVkCisgKiBpbnRlZ2VyIGZvciB1
c2UgYXMgYW4gYXJyYXkgaW5kZXguICBJZiB0aGUgc2lnbmVkIGNoYXIgaXMgbmVnYXRpdmUsCisg
KiB3ZSB3YW50IHRvIGluc3RlYWQgdHJlYXQgaXQgYXMgYW4gOC1iaXQgdW5zaWduZWQgY2hhciwg
aGVuY2UgdGhlCisgKiBkb3VibGUgY2FzdC4KKyAqLworI2RlZmluZSBZWV9TQ19UT19VSShjKSAo
KHVuc2lnbmVkIGludCkgKHVuc2lnbmVkIGNoYXIpIGMpCisKKy8qIEFuIG9wYXF1ZSBwb2ludGVy
LiAqLworI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAorI2RlZmluZSBZWV9UWVBFREVG
X1lZX1NDQU5ORVJfVAordHlwZWRlZiB2b2lkKiB5eXNjYW5fdDsKKyNlbmRpZgorCisvKiBGb3Ig
Y29udmVuaWVuY2UsIHRoZXNlIHZhcnMgKHBsdXMgdGhlIGJpc29uIHZhcnMgZmFyIGJlbG93KQor
ICAgYXJlIG1hY3JvcyBpbiB0aGUgcmVlbnRyYW50IHNjYW5uZXIuICovCisjZGVmaW5lIHl5aW4g
eXlnLT55eWluX3IKKyNkZWZpbmUgeXlvdXQgeXlnLT55eW91dF9yCisjZGVmaW5lIHl5ZXh0cmEg
eXlnLT55eWV4dHJhX3IKKyNkZWZpbmUgeXlsZW5nIHl5Zy0+eXlsZW5nX3IKKyNkZWZpbmUgeXl0
ZXh0IHl5Zy0+eXl0ZXh0X3IKKyNkZWZpbmUgeXlsaW5lbm8gKFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfYnNfbGluZW5vKQorI2RlZmluZSB5eWNvbHVtbiAoWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9ic19jb2x1bW4pCisjZGVmaW5lIHl5X2ZsZXhfZGVidWcgeXlnLT55eV9mbGV4
X2RlYnVnX3IKKworLyogRW50ZXIgYSBzdGFydCBjb25kaXRpb24uICBUaGlzIG1hY3JvIHJlYWxs
eSBvdWdodCB0byB0YWtlIGEgcGFyYW1ldGVyLAorICogYnV0IHdlIGRvIGl0IHRoZSBkaXNndXN0
aW5nIGNydWZ0eSB3YXkgZm9yY2VkIG9uIHVzIGJ5IHRoZSAoKS1sZXNzCisgKiBkZWZpbml0aW9u
IG9mIEJFR0lOLgorICovCisjZGVmaW5lIEJFR0lOIHl5Zy0+eXlfc3RhcnQgPSAxICsgMiAqCisK
Ky8qIFRyYW5zbGF0ZSB0aGUgY3VycmVudCBzdGFydCBzdGF0ZSBpbnRvIGEgdmFsdWUgdGhhdCBj
YW4gYmUgbGF0ZXIgaGFuZGVkCisgKiB0byBCRUdJTiB0byByZXR1cm4gdG8gdGhlIHN0YXRlLiAg
VGhlIFlZU1RBVEUgYWxpYXMgaXMgZm9yIGxleAorICogY29tcGF0aWJpbGl0eS4KKyAqLworI2Rl
ZmluZSBZWV9TVEFSVCAoKHl5Zy0+eXlfc3RhcnQgLSAxKSAvIDIpCisjZGVmaW5lIFlZU1RBVEUg
WVlfU1RBUlQKKworLyogQWN0aW9uIG51bWJlciBmb3IgRU9GIHJ1bGUgb2YgYSBnaXZlbiBzdGFy
dCBzdGF0ZS4gKi8KKyNkZWZpbmUgWVlfU1RBVEVfRU9GKHN0YXRlKSAoWVlfRU5EX09GX0JVRkZF
UiArIHN0YXRlICsgMSkKKworLyogU3BlY2lhbCBhY3Rpb24gbWVhbmluZyAic3RhcnQgcHJvY2Vz
c2luZyBhIG5ldyBmaWxlIi4gKi8KKyNkZWZpbmUgWVlfTkVXX0ZJTEUgeXlyZXN0YXJ0KHl5aW4g
LHl5c2Nhbm5lciApCisKKyNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUl9DSEFSIDAKKworLyogU2l6
ZSBvZiBkZWZhdWx0IGlucHV0IGJ1ZmZlci4gKi8KKyNpZm5kZWYgWVlfQlVGX1NJWkUKKyNkZWZp
bmUgWVlfQlVGX1NJWkUgMTYzODQKKyNlbmRpZgorCisvKiBUaGUgc3RhdGUgYnVmIG11c3QgYmUg
bGFyZ2UgZW5vdWdoIHRvIGhvbGQgb25lIHN0YXRlIHBlciBjaGFyYWN0ZXIgaW4gdGhlIG1haW4g
YnVmZmVyLgorICovCisjZGVmaW5lIFlZX1NUQVRFX0JVRl9TSVpFICAgKChZWV9CVUZfU0laRSAr
IDIpICogc2l6ZW9mKHl5X3N0YXRlX3R5cGUpKQorCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfQlVG
RkVSX1NUQVRFCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCit0eXBlZGVmIHN0
cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFURTsKKyNlbmRpZgorCisjaWZuZGVm
IFlZX1RZUEVERUZfWVlfU0laRV9UCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfU0laRV9UCit0eXBl
ZGVmIHNpemVfdCB5eV9zaXplX3Q7CisjZW5kaWYKKworI2RlZmluZSBFT0JfQUNUX0NPTlRJTlVF
X1NDQU4gMAorI2RlZmluZSBFT0JfQUNUX0VORF9PRl9GSUxFIDEKKyNkZWZpbmUgRU9CX0FDVF9M
QVNUX01BVENIIDIKKworICAgIC8qIE5vdGU6IFdlIHNwZWNpZmljYWxseSBvbWl0IHRoZSB0ZXN0
IGZvciB5eV9ydWxlX2Nhbl9tYXRjaF9lb2wgYmVjYXVzZSBpdCByZXF1aXJlcworICAgICAqICAg
ICAgIGFjY2VzcyB0byB0aGUgbG9jYWwgdmFyaWFibGUgeXlfYWN0LiBTaW5jZSB5eWxlc3MoKSBp
cyBhIG1hY3JvLCBpdCB3b3VsZCBicmVhaworICAgICAqICAgICAgIGV4aXN0aW5nIHNjYW5uZXJz
IHRoYXQgY2FsbCB5eWxlc3MoKSBmcm9tIE9VVFNJREUgeXlsZXguIAorICAgICAqICAgICAgIE9u
ZSBvYnZpb3VzIHNvbHV0aW9uIGl0IHRvIG1ha2UgeXlfYWN0IGEgZ2xvYmFsLiBJIHRyaWVkIHRo
YXQsIGFuZCBzYXcKKyAgICAgKiAgICAgICBhIDUlIHBlcmZvcm1hbmNlIGhpdCBpbiBhIG5vbi15
eWxpbmVubyBzY2FubmVyLCBiZWNhdXNlIHl5X2FjdCBpcworICAgICAqICAgICAgIG5vcm1hbGx5
IGRlY2xhcmVkIGFzIGEgcmVnaXN0ZXIgdmFyaWFibGUtLSBzbyBpdCBpcyBub3Qgd29ydGggaXQu
CisgICAgICovCisgICAgI2RlZmluZSAgWVlfTEVTU19MSU5FTk8obikgXAorICAgICAgICAgICAg
ZG8geyBcCisgICAgICAgICAgICAgICAgaW50IHl5bDtcCisgICAgICAgICAgICAgICAgZm9yICgg
eXlsID0gbjsgeXlsIDwgeXlsZW5nOyArK3l5bCApXAorICAgICAgICAgICAgICAgICAgICBpZiAo
IHl5dGV4dFt5eWxdID09ICdcbicgKVwKKyAgICAgICAgICAgICAgICAgICAgICAgIC0teXlsaW5l
bm87XAorICAgICAgICAgICAgfXdoaWxlKDApCisgICAgCisvKiBSZXR1cm4gYWxsIGJ1dCB0aGUg
Zmlyc3QgIm4iIG1hdGNoZWQgY2hhcmFjdGVycyBiYWNrIHRvIHRoZSBpbnB1dCBzdHJlYW0uICov
CisjZGVmaW5lIHl5bGVzcyhuKSBcCisJZG8gXAorCQl7IFwKKwkJLyogVW5kbyBlZmZlY3RzIG9m
IHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCisgICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0g
KG4pOyBcCisgICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVzc19tYWNyb19hcmcpO1wKKwkJKnl5
X2NwID0geXlnLT55eV9ob2xkX2NoYXI7IFwKKwkJWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVCBc
CisJCXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwID0geXlfYnAgKyB5eWxlc3NfbWFjcm9fYXJnIC0g
WVlfTU9SRV9BREo7IFwKKwkJWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBh
Z2FpbiAqLyBcCisJCX0gXAorCXdoaWxlICggMCApCisKKyNkZWZpbmUgdW5wdXQoYykgeXl1bnB1
dCggYywgeXlnLT55eXRleHRfcHRyICwgeXlzY2FubmVyICkKKworI2lmbmRlZiBZWV9TVFJVQ1Rf
WVlfQlVGRkVSX1NUQVRFCisjZGVmaW5lIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKK3N0cnVj
dCB5eV9idWZmZXJfc3RhdGUKKwl7CisJRklMRSAqeXlfaW5wdXRfZmlsZTsKKworCWNoYXIgKnl5
X2NoX2J1ZjsJCS8qIGlucHV0IGJ1ZmZlciAqLworCWNoYXIgKnl5X2J1Zl9wb3M7CQkvKiBjdXJy
ZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1ZmZlciAqLworCisJLyogU2l6ZSBvZiBpbnB1dCBidWZm
ZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBmb3IgRU9CCisJICogY2hhcmFjdGVycy4K
KwkgKi8KKwl5eV9zaXplX3QgeXlfYnVmX3NpemU7CisKKwkvKiBOdW1iZXIgb2YgY2hhcmFjdGVy
cyByZWFkIGludG8geXlfY2hfYnVmLCBub3QgaW5jbHVkaW5nIEVPQgorCSAqIGNoYXJhY3RlcnMu
CisJICovCisJeXlfc2l6ZV90IHl5X25fY2hhcnM7CisKKwkvKiBXaGV0aGVyIHdlICJvd24iIHRo
ZSBidWZmZXIgLSBpLmUuLCB3ZSBrbm93IHdlIGNyZWF0ZWQgaXQsCisJICogYW5kIGNhbiByZWFs
bG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNob3VsZCBmcmVlKCkgaXQgdG8KKwkgKiBkZWxldGUg
aXQuCisJICovCisJaW50IHl5X2lzX291cl9idWZmZXI7CisKKwkvKiBXaGV0aGVyIHRoaXMgaXMg
YW4gImludGVyYWN0aXZlIiBpbnB1dCBzb3VyY2U7IGlmIHNvLCBhbmQKKwkgKiBpZiB3ZSdyZSB1
c2luZyBzdGRpbyBmb3IgaW5wdXQsIHRoZW4gd2Ugd2FudCB0byB1c2UgZ2V0YygpCisJICogaW5z
dGVhZCBvZiBmcmVhZCgpLCB0byBtYWtlIHN1cmUgd2Ugc3RvcCBmZXRjaGluZyBpbnB1dCBhZnRl
cgorCSAqIGVhY2ggbmV3bGluZS4KKwkgKi8KKwlpbnQgeXlfaXNfaW50ZXJhY3RpdmU7CisKKwkv
KiBXaGV0aGVyIHdlJ3JlIGNvbnNpZGVyZWQgdG8gYmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxp
bmUuCisJICogSWYgc28sICdeJyBydWxlcyB3aWxsIGJlIGFjdGl2ZSBvbiB0aGUgbmV4dCBtYXRj
aCwgb3RoZXJ3aXNlCisJICogbm90LgorCSAqLworCWludCB5eV9hdF9ib2w7CisKKyAgICBpbnQg
eXlfYnNfbGluZW5vOyAvKio8IFRoZSBsaW5lIGNvdW50LiAqLworICAgIGludCB5eV9ic19jb2x1
bW47IC8qKjwgVGhlIGNvbHVtbiBjb3VudC4gKi8KKyAgICAKKwkvKiBXaGV0aGVyIHRvIHRyeSB0
byBmaWxsIHRoZSBpbnB1dCBidWZmZXIgd2hlbiB3ZSByZWFjaCB0aGUKKwkgKiBlbmQgb2YgaXQu
CisJICovCisJaW50IHl5X2ZpbGxfYnVmZmVyOworCisJaW50IHl5X2J1ZmZlcl9zdGF0dXM7CisK
KyNkZWZpbmUgWVlfQlVGRkVSX05FVyAwCisjZGVmaW5lIFlZX0JVRkZFUl9OT1JNQUwgMQorCS8q
IFdoZW4gYW4gRU9GJ3MgYmVlbiBzZWVuIGJ1dCB0aGVyZSdzIHN0aWxsIHNvbWUgdGV4dCB0byBw
cm9jZXNzCisJICogdGhlbiB3ZSBtYXJrIHRoZSBidWZmZXIgYXMgWVlfRU9GX1BFTkRJTkcsIHRv
IGluZGljYXRlIHRoYXQgd2UKKwkgKiBzaG91bGRuJ3QgdHJ5IHJlYWRpbmcgZnJvbSB0aGUgaW5w
dXQgc291cmNlIGFueSBtb3JlLiAgV2UgbWlnaHQKKwkgKiBzdGlsbCBoYXZlIGEgYnVuY2ggb2Yg
dG9rZW5zIHRvIG1hdGNoLCB0aG91Z2gsIGJlY2F1c2Ugb2YKKwkgKiBwb3NzaWJsZSBiYWNraW5n
LXVwLgorCSAqCisJICogV2hlbiB3ZSBhY3R1YWxseSBzZWUgdGhlIEVPRiwgd2UgY2hhbmdlIHRo
ZSBzdGF0dXMgdG8gIm5ldyIKKwkgKiAodmlhIHl5cmVzdGFydCgpKSwgc28gdGhhdCB0aGUgdXNl
ciBjYW4gY29udGludWUgc2Nhbm5pbmcgYnkKKwkgKiBqdXN0IHBvaW50aW5nIHl5aW4gYXQgYSBu
ZXcgaW5wdXQgZmlsZS4KKwkgKi8KKyNkZWZpbmUgWVlfQlVGRkVSX0VPRl9QRU5ESU5HIDIKKwor
CX07CisjZW5kaWYgLyogIVlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUgKi8KKworLyogV2UgcHJv
dmlkZSBtYWNyb3MgZm9yIGFjY2Vzc2luZyBidWZmZXIgc3RhdGVzIGluIGNhc2UgaW4gdGhlCisg
KiBmdXR1cmUgd2Ugd2FudCB0byBwdXQgdGhlIGJ1ZmZlciBzdGF0ZXMgaW4gYSBtb3JlIGdlbmVy
YWwKKyAqICJzY2FubmVyIHN0YXRlIi4KKyAqCisgKiBSZXR1cm5zIHRoZSB0b3Agb2YgdGhlIHN0
YWNrLCBvciBOVUxMLgorICovCisjZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSICggeXlnLT55eV9i
dWZmZXJfc3RhY2sgXAorICAgICAgICAgICAgICAgICAgICAgICAgICA/IHl5Zy0+eXlfYnVmZmVy
X3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcF0gXAorICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IE5VTEwpCisKKy8qIFNhbWUgYXMgcHJldmlvdXMgbWFjcm8sIGJ1dCB1c2VmdWwgd2hl
biB3ZSBrbm93IHRoYXQgdGhlIGJ1ZmZlciBzdGFjayBpcyBub3QKKyAqIE5VTEwgb3Igd2hlbiB3
ZSBuZWVkIGFuIGx2YWx1ZS4gRm9yIGludGVybmFsIHVzZSBvbmx5LgorICovCisjZGVmaW5lIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRSB5eWctPnl5X2J1ZmZlcl9zdGFja1t5eWctPnl5X2J1ZmZl
cl9zdGFja190b3BdCisKK3ZvaWQgeXlyZXN0YXJ0IChGSUxFICppbnB1dF9maWxlICx5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKK3ZvaWQgeXlfc3dpdGNoX3RvX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRF
IG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworWVlfQlVGRkVSX1NUQVRFIHl5X2Ny
ZWF0ZV9idWZmZXIgKEZJTEUgKmZpbGUsaW50IHNpemUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwor
dm9pZCB5eV9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYiAseXlzY2FuX3QgeXlzY2Fu
bmVyICk7Cit2b2lkIHl5X2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgLHl5c2Nhbl90
IHl5c2Nhbm5lciApOwordm9pZCB5eXB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUg
bmV3X2J1ZmZlciAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHl5cG9wX2J1ZmZlcl9zdGF0
ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3N0YXRpYyB2b2lkIHl5ZW5zdXJlX2J1ZmZlcl9z
dGFjayAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgdm9pZCB5eV9sb2FkX2J1ZmZlcl9z
dGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgdm9pZCB5eV9pbml0X2J1ZmZlciAo
WVlfQlVGRkVSX1NUQVRFIGIsRklMRSAqZmlsZSAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKKyNk
ZWZpbmUgWVlfRkxVU0hfQlVGRkVSIHl5X2ZsdXNoX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAs
eXlzY2FubmVyKQorCitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9idWZmZXIgKGNoYXIgKmJhc2Us
eXlfc2l6ZV90IHNpemUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworWVlfQlVGRkVSX1NUQVRFIHl5
X3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKnl5X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7
CitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAoeXljb25zdCBjaGFyICpieXRlcyx5eV9z
aXplX3QgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCAqeXlhbGxvYyAoeXlfc2l6
ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgKnl5cmVhbGxvYyAodm9pZCAqLHl5X3Np
emVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHl5ZnJlZSAodm9pZCAqICx5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKKworI2RlZmluZSB5eV9uZXdfYnVmZmVyIHl5X2NyZWF0ZV9idWZmZXIK
KworI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNfaW50ZXJhY3RpdmUpIFwKKwl7IFwKKwlp
ZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAorICAgICAgICB5eWVuc3VyZV9idWZmZXJfc3Rh
Y2sgKHl5c2Nhbm5lcik7IFwKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAorICAg
ICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOyBc
CisJfSBcCisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRlcmFjdGl2ZSA9IGlz
X2ludGVyYWN0aXZlOyBcCisJfQorCisjZGVmaW5lIHl5X3NldF9ib2woYXRfYm9sKSBcCisJeyBc
CisJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7XAorICAgICAgICB5eWVuc3VyZV9idWZmZXJf
c3RhY2sgKHl5c2Nhbm5lcik7IFwKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAor
ICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIp
OyBcCisJfSBcCisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wgPSBhdF9ib2w7
IFwKKwl9CisKKyNkZWZpbmUgWVlfQVRfQk9MKCkgKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfYXRfYm9sKQorCisvKiBCZWdpbiB1c2VyIHNlY3QzICovCisKKyNkZWZpbmUgeXl3cmFwKHl5
c2Nhbm5lcikgMQorI2RlZmluZSBZWV9TS0lQX1lZV1JBUAorCit0eXBlZGVmIHVuc2lnbmVkIGNo
YXIgWVlfQ0hBUjsKKwordHlwZWRlZiBpbnQgeXlfc3RhdGVfdHlwZTsKKworI2RlZmluZSB5eXRl
eHRfcHRyIHl5dGV4dF9yCisKK3N0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19z
dGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV90cnlf
TlVMX3RyYW5zICh5eV9zdGF0ZV90eXBlIGN1cnJlbnRfc3RhdGUgICx5eXNjYW5fdCB5eXNjYW5u
ZXIpOworc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lciAp
Oworc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciBtc2dbXSAseXlzY2Fu
X3QgeXlzY2FubmVyICk7CisKKy8qIERvbmUgYWZ0ZXIgdGhlIGN1cnJlbnQgcGF0dGVybiBoYXMg
YmVlbiBtYXRjaGVkIGFuZCBiZWZvcmUgdGhlCisgKiBjb3JyZXNwb25kaW5nIGFjdGlvbiAtIHNl
dHMgdXAgeXl0ZXh0LgorICovCisjZGVmaW5lIFlZX0RPX0JFRk9SRV9BQ1RJT04gXAorCXl5Zy0+
eXl0ZXh0X3B0ciA9IHl5X2JwOyBcCisJeXlsZW5nID0gKHNpemVfdCkgKHl5X2NwIC0geXlfYnAp
OyBcCisJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlfY3A7IFwKKwkqeXlfY3AgPSAnXDAnOyBcCisJ
eXlnLT55eV9jX2J1Zl9wID0geXlfY3A7CisKKyNkZWZpbmUgWVlfTlVNX1JVTEVTIDE0NworI2Rl
ZmluZSBZWV9FTkRfT0ZfQlVGRkVSIDE0OAorLyogVGhpcyBzdHJ1Y3QgaXMgbm90IHVzZWQgaW4g
dGhpcyBzY2FubmVyLAorICAgYnV0IGl0cyBwcmVzZW5jZSBpcyBuZWNlc3NhcnkuICovCitzdHJ1
Y3QgeXlfdHJhbnNfaW5mbworCXsKKwlmbGV4X2ludDMyX3QgeXlfdmVyaWZ5OworCWZsZXhfaW50
MzJfdCB5eV9ueHQ7CisJfTsKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9hY2NlcHRb
NDQzXSA9CisgICAgeyAgIDAsCisgICAgICAgIDAsICAgIDAsICAxNDgsICAxNDYsICAxNDUsICAx
NDUsICAxMzIsICAxMzgsICAxNDMsICAxMjcsCisgICAgICAxMjgsICAxMzYsICAxMzUsICAxMjQs
ICAxMzMsICAxMzEsICAxMzcsICAgOTYsICAgOTYsICAxMjUsCisgICAgICAxMjEsICAxMzksICAx
MjYsICAxNDAsICAxNDQsICAgOTMsICAxMjksICAxMzAsICAxNDIsICAgOTMsCisgICAgICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCisg
ICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAxMjIsCisgICAgICAxNDEsICAxMjMsICAxMzQsICAxMTgsICAxMDQsICAxMjMsICAxMTIsICAx
MDcsICAxMDIsICAxMTAsCisgICAgICAxMDAsICAxMTEsICAxMDEsICAgOTksICAxMDMsICAgOTgs
ICAgOTUsICAgOTYsICAgIDAsICAgIDAsCisgICAgICAxMzAsICAxMjIsICAxMjksICAxMTksICAx
MTUsICAxMTcsICAxMTYsICAxMjAsICAgOTMsICAxMDgsCisgICAgICAxMTQsICAgOTMsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgOTMsICAg
MTIsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCisKKyAg
ICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICAxNSwgICAxNywgICA5MywgICA5Mywg
ICA5MywKKyAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5
MywgICA5MywgICA5MywKKyAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5Mywg
ICA5MywgICA5MywgICA5MywgICA5MywKKyAgICAgICA5MywgICA5MywgICA5MywgICA5MywgIDEw
OSwgIDExMywgICAgMCwgICA5OCwgICAgMCwgICAgMCwKKyAgICAgICA5NywgICA5NCwgIDEwNSwg
IDEwNiwgICA0NSwgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKKyAgICAgICA5MywgICA5
MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKKyAgICAg
ICA5MywgICA5MywgICA5MywgICAxMywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5
MywKKyAgICAgICA5MywgICA5MywgICAyMSwgICA5MywgICA5MywgICA5MywgICA5MywgICA5Mywg
ICA5MywgICA5MywKKyAgICAgICA5MywgICAxOCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5
MywgICA5MywgICA5MywgICA5MywKKyAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5Mywg
ICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKKworICAgICAgIDkzLCAgIDkzLCAgIDkzLCAg
IDkzLCAgIDkzLCAgICAwLCAgIDk5LCAgICAwLCAgIDk4LCAgIDkzLAorICAgICAgIDIzLCAgIDkz
LCAgIDkzLCAgIDkwLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAorICAgICAg
IDkzLCAgIDE2LCAgIDQ4LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDY0LCAgIDkzLCAgIDkzLCAgIDUz
LAorICAgICAgIDY4LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAg
IDkzLCAgIDY1LAorICAgICAgICA0LCAgIDI4LCAgIDI5LCAgIDMwLCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLAorICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAg
IDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAorICAgICAgIDUxLCAgIDI0LCAgIDkzLCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDMxLCAgIDMyLAorICAgICAgIDMzLCAgIDIyLCAg
IDkzLCAgIDkzLCAgIDkzLCAgIDEwLCAgIDM3LCAgIDM4LCAgIDM5LCAgIDQ2LAorICAgICAgICA3
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDc3LCAgIDc4LCAgIDc5LCAgIDkzLCAgIDI1LAor
ICAgICAgIDY5LCAgIDIwLCAgIDgwLCAgIDgxLCAgIDgyLCAgICAyLCAgIDc0LCAgIDc1LCAgIDc2
LCAgIDkzLAorCisgICAgICAgMTksICAgNzIsICAgOTMsICAgOTMsICAgMzQsICAgMzUsICAgMzYs
ICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsICAgNjYsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsICAgNDcsICAgOTMsICAgOTIsICAgOTMsICAgOTMsCisgICAgICAgMTQsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgNjcsICAgNjEsICAgNTYsICAgOTMsICAgOTMsCisgICAgICAgOTMs
ICAgOTMsICAgOTMsICAgNzMsICAgNTIsICAgOTMsICAgNTksICAgMjcsICAgOTMsICAgODksCisg
ICAgICAgNjAsICAgNDQsICAgNzEsICAgNTQsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsCisgICAgICAgOTMsICAgOTMsICAgNTUsICAgMjYsICAgOTMsICAgOTMsICAgOTMsICAg
IDMsICAgOTMsICAgOTMsCisgICAgICAgOTMsICAgOTMsICAgOTMsICAgNDksICAgIDgsICAgOTMs
ICAgIDksICAgOTMsICAgOTMsICAgMTEsCisgICAgICAgNjIsICAgOTMsICAgOTMsICAgOTMsICAg
NTcsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgOTMsICAgNTAsICAgNzAs
ICAgNTgsICAgIDYsICAgNjMsICAgIDEsICAgOTEsICAgIDUsICAgODMsCisKKyAgICAgICA0MCwg
ICA4NCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKKyAg
ICAgICA5MywgICA5MywgICA5MywgICA5MywgICA0MSwgICA5MywgICA5MywgICA5MywgICA5Mywg
ICA5MywKKyAgICAgICA5MywgICA5MywgICA0MywgICA5MywgICA4NywgICA5MywgICA5MywgICA5
MywgICA5MywgICA5MywKKyAgICAgICA4NSwgICA5MywgICA4NiwgICA5MywgICA5MywgICA5Mywg
ICA5MywgICA5MywgICA5MywgICA0MiwKKyAgICAgICA4OCwgICAgMAorICAgIH0gOworCitzdGF0
aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CisgICAgeyAgIDAsCisgICAgICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDIsICAgIDMs
CisgICAgICAgIDIsICAgIDIsICAgIDIsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDIsICAgIDQsICAgIDEsICAgIDEsICAg
IDEsICAgIDUsICAgIDYsICAgIDEsICAgIDcsCisgICAgICAgIDgsICAgIDksICAgMTAsICAgMTEs
ICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTcsCisgICAgICAgMTgsICAgMTksICAg
MjAsICAgMjAsICAgMjAsICAgMjEsICAgMjEsICAgMjIsICAgMjMsICAgMjQsCisgICAgICAgMjUs
ICAgMjYsICAgMjcsICAgIDEsICAgMjgsICAgMjgsICAgMjksICAgMzAsICAgMzEsICAgMjgsCisg
ICAgICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzMs
ICAgMzIsCisgICAgICAgMzIsICAgMzQsICAgMzUsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAg
MzYsICAgMzIsICAgMzIsCisgICAgICAgMzcsICAgIDEsICAgMzgsICAgMzksICAgMzIsICAgIDEs
ICAgNDAsICAgNDEsICAgNDIsICAgNDMsCisKKyAgICAgICA0NCwgICA0NSwgICA0NiwgICA0Nywg
ICA0OCwgICAzMiwgICA0OSwgICA1MCwgICA1MSwgICA1MiwKKyAgICAgICA1MywgICA1NCwgICAz
MiwgICA1NSwgICA1NiwgICA1NywgICA1OCwgICA1OSwgICA2MCwgICA2MSwKKyAgICAgICA2Miwg
ICA2MywgICA2NCwgICA2NSwgICA2NiwgICA2NywgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwKKworICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZs
ZXhfaW50MzJfdCB5eV9tZXRhWzY4XSA9CisgICAgeyAgIDAsCisgICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsCisg
ICAgICAgIDIsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDIsICAgIDIs
ICAgIDIsCisgICAgICAgIDIsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDEsICAg
IDEsICAgIDEsICAgIDIsCisgICAgICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDMs
ICAgIDMsICAgIDMsICAgIDMsICAgIDMsCisgICAgICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAg
IDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsCisgICAgICAgIDMsICAgIDMsICAgIDMs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQxNl90IHl5X2Jhc2VbNDQ1XSA9CisgICAgeyAgIDAsCisgICAgICAgIDAsICAgIDAsICA1ODcs
ICA1ODgsICA1ODgsICA1ODgsICA1NjEsICAgNDMsICAgNjQsICA1ODgsCisgICAgICA1ODgsICA1
NjAsICAgNjEsICA1ODgsICAgNjAsICAgNTgsICA1NTksICAgNzcsICAgODYsICA1NTcsCisgICAg
ICA1ODgsICAxMDQsICA1NTcsICAgNTUsICA1ODgsICAgIDAsICA1ODgsICA1ODgsICAgNzUsICAg
MjYsCisgICAgICAgNTcsICAgODIsICAgODMsICAgNzMsICAgOTMsICA1MjgsICAgOTcsICAgOTUs
ICA1MjcsICAgNDQsCisgICAgICAgNzEsICA1MjEsICAxMDQsICA1MzQsICAxMTAsICAxMTYsICAg
MzUsICAxMTEsICA1MzAsICA1ODgsCisgICAgICAxMTQsICA1ODgsICA1ODgsICA1ODgsICA1ODgs
ICA1ODgsICA1ODgsICA1ODgsICA1ODgsICA1ODgsCisgICAgICA1ODgsICA1ODgsICA1ODgsICAx
NjUsICA1ODgsICAxNzIsICAyMDIsICAyMTEsICAyMzMsICAgIDAsCisgICAgICA1ODgsICA1ODgs
ICA1ODgsICA1NTEsICA1ODgsICA1ODgsICA1ODgsICA1NTAsICAgIDAsICA1ODgsCisgICAgICA1
ODgsICA1MjMsICA1MTYsICA1MTksICA1MjcsICA1MjYsICA1MTMsICA1MjgsICA1MTUsICA1MjEs
CisgICAgICA1MDksICA1MDYsICA1MTksICA1MDYsICA1MDMsICA1MDMsICA1MDksICA0OTcsICAx
MDgsICA1MDIsCisKKyAgICAgIDUxMiwgIDQ5OCwgIDUwNCwgIDUwNywgIDUwOCwgICAgMCwgIDE0
NSwgIDUwNywgIDExMywgIDQ5MywKKyAgICAgIDUwNiwgIDQ5NywgIDQ5OSwgIDQ4OSwgIDUwMywg
IDUwMCwgIDUwMiwgIDQ4NSwgIDQ5MCwgIDQ4NywKKyAgICAgIDQ3NiwgIDE1NywgIDQ4NCwgIDQ4
OSwgIDQ4NSwgIDQ4NywgIDQ3NiwgIDQ3OSwgIDExOCwgIDQ4NCwKKyAgICAgIDQ3NiwgIDQ4OCwg
ICA3MCwgIDQ4MSwgIDU4OCwgIDU4OCwgIDI0NiwgIDI1MywgIDI3MCwgIDIxOSwKKyAgICAgIDI4
MywgICAgMCwgIDU4OCwgIDU4OCwgICAgMCwgIDQ3MywgIDQ3NywgIDQ4NiwgIDQ4MywgIDQ2NywK
KyAgICAgIDQ2NywgIDExOSwgIDQ4MiwgIDQ3OSwgIDQ3OSwgIDQ3NywgIDQ3NCwgIDQ2NiwgIDQ3
MiwgIDQ1OSwKKyAgICAgIDQ3MCwgIDQ1NiwgIDQ3MiwgICAgMCwgIDQ2OSwgIDQ1NywgIDQ2NCwg
IDQ2MSwgIDQ2NSwgIDQ1OCwKKyAgICAgIDQ0NywgIDQ0NiwgIDQ1OSwgIDQ2MiwgIDQ1OSwgIDQ1
NCwgIDQ0NSwgIDE4OCwgIDQ1MCwgIDQ1MywKKyAgICAgIDQ0NCwgIDQ0MSwgIDQ0NSwgIDQ1MSwg
IDQ0MiwgIDQzMywgIDQzNiwgIDQzNCwgIDQ0NCwgIDQzMCwKKyAgICAgIDQyOCwgIDQ0MSwgIDQy
NywgIDQyOSwgIDQyNiwgIDQzNywgIDQzNiwgIDEyNCwgIDQzMSwgIDQyNiwKKworICAgICAgNDE1
LCAgMjU4LCAgNDMzLCAgNDM1LCAgNDI0LCAgMjkwLCAgMjk3LCAgMzA0LCAgMzExLCAgNDI1LAor
ICAgICAgICAwLCAgNDIzLCAgMjc1LCAgICAwLCAgNDE1LCAgNDEzLCAgNDIxLCAgNDEwLCAgNDI3
LCAgNDE2LAorICAgICAgMzE2LCAgICAwLCAgICAwLCAgNDEwLCAgNDIwLCAgNDIwLCAgICAwLCAg
NDA1LCAgMzE5LCAgICAwLAorICAgICAgICAwLCAgNDA3LCAgMzIyLCAgNDA4LCAgNDAyLCAgNDAx
LCAgNDAyLCAgNDAxLCAgMzI1LCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
Mzk3LCAgMzk4LCAgNDAzLCAgMzk0LCAgNDA3LCAgNDAyLAorICAgICAgNDAxLCAgMzkzLCAgMzk3
LCAgMzg5LCAgMzkyLCAgMzk2LCAgNDAxLCAgMzg3LCAgMzk5LCAgMzkwLAorICAgICAgICAwLCAg
ICAwLCAgMzk2LCAgMzg1LCAgMzg1LCAgMzkwLCAgMzg5LCAgMzg2LCAgICAwLCAgICAwLAorICAg
ICAgICAwLCAgICAwLCAgMzc2LCAgMzg4LCAgMzkwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLAorICAgICAgICAwLCAgMzc4LCAgMzc5LCAgMzczLCAgMzgzLCAgICAwLCAgICAwLCAgICAw
LCAgMzc0LCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgICAwLCAgICAwLCAgMzgxLAorCisgICAgICAgIDAsICAgIDAsICAzNzksICAzNzUsICAg
IDAsICAgIDAsICAgIDAsICAzNzEsICAzNjcsICAzNzIsCisgICAgICAzNjIsICAzNzUsICAzNjEs
ICAzNzQsICAzNjMsICAzNzAsICAgIDAsICAzNjgsICAzNzAsICAzNTQsCisgICAgICAzNTYsICAz
NjIsICAzNjgsICAzNjMsICAzNTEsICAgIDAsICAzNTMsICAgIDAsICAzNTIsICAzNTUsCisgICAg
ICAgIDAsICAzNDQsICAzNDMsICAzNDMsICAzNTYsICAgIDAsICAzNTgsICAgIDAsICAzNTcsICAz
NTYsCisgICAgICAzNDEsICAzNTQsICAzNDEsICAgIDAsICAgIDAsICAzNDQsICAgIDAsICAgIDAs
ICAzMzYsICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAzMzMsICAzNDQsICAz
MzcsICAzNDMsICAzNDAsICAzMzUsCisgICAgICAzMjcsICAzMzksICAgIDAsICAgIDAsICAzMzIs
ICAzMzksICAzMjgsICAgIDAsICAzMzcsICAzMzQsCisgICAgICAzMjQsICAzMjksICAzMzIsICAg
IDAsICAgIDAsICAzMzIsICAgIDAsICAzMzAsICAzMjksICAgIDAsCisgICAgICAgIDAsICAzMjgs
ICAzMTQsICAzMjYsICAgIDAsICAzMTcsICAzMzgsICAzMzcsICAzMzYsICAzMDcsCisgICAgICAz
MDMsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAzMjgs
CisKKyAgICAgIDE2NiwgIDMyNSwgIDMxNiwgIDI5OSwgIDMwOCwgIDMxMCwgIDMwNiwgIDMwOCwg
IDMwNywgIDMwNiwKKyAgICAgIDMwOSwgIDMwNiwgIDI1NiwgIDI1MywgICAgMCwgIDIyOCwgIDIz
OCwgIDIyMiwgIDIzNSwgIDIwMywKKyAgICAgIDIwNywgIDIwNCwgIDIxMiwgIDE5MSwgICAgMCwg
IDIwMSwgIDE2NSwgIDE2NywgIDE1MywgIDE2MSwKKyAgICAgICAgMCwgIDE3MCwgICAgMCwgIDE3
NSwgIDE1MSwgIDE0MSwgIDEwMCwgIDExNCwgICA1OSwgICAgMCwKKyAgICAgICAgMCwgIDU4OCwg
IDM1OSwgIDExMworICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfZGVm
WzQ0NV0gPQorICAgIHsgICAwLAorICAgICAgNDQyLCAgICAxLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAorICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAorICAgICAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQzLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQzLAorICAgICAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAor
ICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQyLAorICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLAorICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQ0LAorICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQzLCAgNDQyLAorICAgICAgNDQyLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorCisg
ICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCisgICAgICA0NDIsICA0NDQsICA0NDIs
ICA0NDIsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisgICAgICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisgICAg
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisKKyAgICAgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MywKKyAgICAgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKKyAgICAg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywKKyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywKKyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywKKyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKKyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKKyAgICAgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKKyAgICAgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywK
KyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywKKworICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAor
ICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLAorICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorCisgICAgICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisg
ICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisgICAgICA0NDMsICAgIDAsICA0NDIsICA0NDIKKyAg
ICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFs2NTZdID0KKyAgICB7
ICAgMCwKKyAgICAgICAgNCwgICAgNSwgICAgNiwgICAgNywgICAgOCwgICAgOSwgICAxMCwgICAx
MSwgICAxMiwgICAxMywKKyAgICAgICAxNCwgICAxNSwgICAxNiwgICAxNywgICAxOCwgICAxOSwg
ICAxOSwgICAxOSwgICAxOSwgICAxOSwKKyAgICAgICAxOSwgICAyMCwgICAyMSwgICAyMiwgICAy
MywgICAyNCwgICAyNSwgICAyNiwgICAyNiwgICAyNiwKKyAgICAgICAyNiwgICAyNiwgICAyNiwg
ICAyNiwgICAyNiwgICAyNiwgICAyNywgICAyOCwgICAyOSwgICAzMCwKKyAgICAgICAzMSwgICAz
MiwgICAzMywgICAzNCwgICAzNSwgICAzNiwgICAzNywgICAzOCwgICAyNiwgICAzOSwKKyAgICAg
ICA0MCwgICA0MSwgICA0MiwgICA0MywgICA0NCwgICA0NSwgICA0NiwgICA0NywgICA0OCwgICA0
OSwKKyAgICAgICAyNiwgICAyNiwgICAyNiwgICA1MCwgICA1MSwgICA1MiwgICA1MywgICA1NSwg
ICA1NiwgICA1NywKKyAgICAgICA2MCwgICA2MiwgICA2NCwgICA2NCwgICA2NCwgICA2NCwgICA2
NCwgICA2NCwgICA2NCwgICA3NywKKyAgICAgICA3OCwgICA4MiwgICA4MywgIDExMCwgICA2Mywg
ICA2MSwgIDEyOSwgIDExMSwgICA1OCwgICA2NiwKKyAgICAgIDEzMCwgICA2NywgICA2NywgICA2
NywgICA2NywgICA2NywgICA2NywgICA2OCwgICA2NiwgICA4MCwKKworICAgICAgIDY4LCAgIDY4
LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY5LCAgIDcyLCAgIDg0LAorICAgICAg
MTEyLCAgIDg1LCAgIDcwLCAgIDgxLCAgMTQyLCAgIDg2LCAgIDY5LCAgMjAzLCAgNDQxLCAgMjA0
LAorICAgICAgIDY5LCAgIDg3LCAgIDk0LCAgMTEzLCAgIDk1LCAgIDczLCAgIDkwLCAgIDc0LCAg
IDc1LCAgIDY5LAorICAgICAgIDkxLCAgIDg4LCAgIDk3LCAgIDk2LCAgIDg5LCAgIDkyLCAgMTAz
LCAgIDcwLCAgMTM1LCAgMTA2LAorICAgICAgIDk4LCAgIDkzLCAgIDk5LCAgMTE1LCAgMTA0LCAg
MTAwLCAgMTA3LCAgMTYyLCAgNDQwLCAgMTE5LAorICAgICAgMTMxLCAgMTAxLCAgNDM5LCAgMTA4
LCAgMTMyLCAgMTA1LCAgMTIwLCAgMTIxLCAgMTE2LCAgMTI1LAorICAgICAgMTYzLCAgMTE3LCAg
MTI2LCAgMTMzLCAgMTc2LCAgMTk4LCAgMTIyLCAgMTIzLCAgMjY0LCAgMTI0LAorICAgICAgMTI3
LCAgNDM4LCAgMTc3LCAgMTk5LCAgMjE2LCAgMjE3LCAgMjY1LCAgMTI4LCAgMTM2LCAgIDY0LAor
ICAgICAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgMTM4LCAgMTM4LCAgMTM4
LCAgMTM4LAorICAgICAgMTM4LCAgMTM4LCAgMTM4LCAgNDM3LCAgMTcwLCAgMTM3LCAgMTkwLCAg
MTcxLCAgMTcyLCAgNDA2LAorCisgICAgICA0MDcsICAxNzMsICAxMzksICAxNzQsICAyNDIsICAy
NDMsICAyNDQsICA0MzYsICAxMzcsICA0MzUsCisgICAgICA0MzQsICAxOTEsICA0MzMsICA0MzIs
ICAgNjYsICAxMzksICAgNjcsICAgNjcsICAgNjcsICAgNjcsCisgICAgICAgNjcsICAgNjcsICAg
NjgsICAgNjYsICA0MzEsICAgNjgsICAgNjgsICAgNjgsICAgNjgsICAgNjgsCisgICAgICAgNjgs
ICAgNjgsICAgNjksICAxNDEsICAxNDEsICAxNDEsICAxNDEsICAxNDEsICAxNDEsICAxNDEsCisg
ICAgICA0MzAsICAgNjksICAxNDAsICA0MjksICAxNDAsICAgNjksICA0MjgsICAxNDEsICAxNDEs
ICAxNDEsCisgICAgICAxNDEsICAxNDEsICAxNDEsICAxNDEsICAgNjksICAyMDYsICA0MjcsICAy
MDYsICA0MjYsICA0MjUsCisgICAgICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDcs
ICAyMDcsICAxMzgsICAxMzgsICAxMzgsCisgICAgICAxMzgsICAxMzgsICAxMzgsICAxMzgsICAy
NjksICAyNzAsICAyNzEsICA0MjQsICA0MjMsICAyMDgsCisgICAgICA0MjIsICAyMDgsICA0MjEs
ICAxMzksICAyMDksICAyMDksICAyMDksICAyMDksICAyMDksICAyMDksCisgICAgICAyMDksICAy
NzcsICAyNzgsICAyNzksICA0MjAsICA0MTksICAxMzksICAxNDEsICAxNDEsICAxNDEsCisKKyAg
ICAgIDE0MSwgIDE0MSwgIDE0MSwgIDE0MSwgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywg
IDIwNywKKyAgICAgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIw
NywgIDIwOSwgIDIwOSwKKyAgICAgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwg
IDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwKKyAgICAgIDIwOSwgIDIwOSwgIDI4NiwgIDI4NywgIDI4
OCwgIDI5MywgIDI5NCwgIDI5NSwgIDI5NywgIDI5OCwKKyAgICAgIDI5OSwgIDMwNSwgIDMwNiwg
IDMwNywgIDM4NywgIDM4OCwgIDM4OSwgIDQxOCwgIDQxNywgIDQxNiwKKyAgICAgIDQxNSwgIDQx
NCwgIDQxMywgIDQxMiwgIDQxMSwgIDQxMCwgIDQwOSwgIDM5MCwgIDQwOCwgIDM5MSwKKyAgICAg
ICA3OSwgICA3OSwgIDQwNSwgIDQwNCwgIDQwMywgIDQwMiwgIDQwMSwgIDQwMCwgIDM5OSwgIDM5
OCwKKyAgICAgIDM5NywgIDM5NiwgIDM5NSwgIDM5NCwgIDM5MywgIDM5MiwgIDM4NiwgIDM4NSwg
IDM4NCwgIDM4MywKKyAgICAgIDM4MiwgIDM4MSwgIDM4MCwgIDM3OSwgIDM3OCwgIDM3NywgIDM3
NiwgIDM3NSwgIDM3NCwgIDM3MywKKyAgICAgIDM3MiwgIDM3MSwgIDM3MCwgIDM2OSwgIDM2OCwg
IDM2NywgIDM2NiwgIDM2NSwgIDM2NCwgIDM2MywKKworICAgICAgMzYyLCAgMzYxLCAgMzYwLCAg
MzU5LCAgMzU4LCAgMzU3LCAgMzU2LCAgMzU1LCAgMzU0LCAgMzUzLAorICAgICAgMzUyLCAgMzUx
LCAgMzUwLCAgMzQ5LCAgMzQ4LCAgMzQ3LCAgMzQ2LCAgMzQ1LCAgMzQ0LCAgMzQzLAorICAgICAg
MzQyLCAgMzQxLCAgMzQwLCAgMzM5LCAgMzM4LCAgMzM3LCAgMzM2LCAgMzM1LCAgMzM0LCAgMzMz
LAorICAgICAgMzMyLCAgMzMxLCAgMzMwLCAgMzI5LCAgMzI4LCAgMzI3LCAgMzI2LCAgMzI1LCAg
MzI0LCAgMzIzLAorICAgICAgMzIyLCAgMzIxLCAgMzIwLCAgMzE5LCAgMzE4LCAgMzE3LCAgMzE2
LCAgMzE1LCAgMzE0LCAgMzEzLAorICAgICAgMzEyLCAgMzExLCAgMzEwLCAgMzA5LCAgMzA4LCAg
MzA0LCAgMzAzLCAgMzAyLCAgMzAxLCAgMzAwLAorICAgICAgMjk2LCAgMjkyLCAgMjkxLCAgMjkw
LCAgMjg5LCAgMjg1LCAgMjg0LCAgMjgzLCAgMjgyLCAgMjgxLAorICAgICAgMjgwLCAgMjc2LCAg
Mjc1LCAgMjc0LCAgMjczLCAgMjcyLCAgMjY4LCAgMjY3LCAgMjY2LCAgMjYzLAorICAgICAgMjYy
LCAgMjYxLCAgMjYwLCAgMjU5LCAgMjU4LCAgMjU3LCAgMjU2LCAgMjU1LCAgMjU0LCAgMjUzLAor
ICAgICAgMjUyLCAgMjUxLCAgMjUwLCAgMjQ5LCAgMjQ4LCAgMjQ3LCAgMjQ2LCAgMjQ1LCAgMjQx
LCAgMjQwLAorCisgICAgICAyMzksICAyMzgsICAyMzcsICAyMzYsICAyMzUsICAyMzQsICAyMzMs
ICAyMzIsICAyMzEsICAyMzAsCisgICAgICAyMjksICAyMjgsICAyMjcsICAyMjYsICAyMjUsICAy
MjQsICAyMjMsICAyMjIsICAyMjEsICAyMjAsCisgICAgICAyMTksICAyMTgsICAyMTUsICAyMTQs
ICAyMTMsICAyMTIsICAyMTEsICAyMTAsICAyMDUsICAyMDIsCisgICAgICAyMDEsICAyMDAsICAx
OTcsICAxOTYsICAxOTUsICAxOTQsICAxOTMsICAxOTIsICAxODksICAxODgsCisgICAgICAxODcs
ICAxODYsICAxODUsICAxODQsICAxODMsICAxODIsICAxODEsICAxODAsICAxNzksICAxNzgsCisg
ICAgICAxNzUsICAxNjksICAxNjgsICAxNjcsICAxNjYsICAxNjUsICAxNjQsICAxNjEsICAxNjAs
ICAxNTksCisgICAgICAxNTgsICAxNTcsICAxNTYsICAxNTUsICAxNTQsICAxNTMsICAxNTIsICAx
NTEsICAxNTAsICAxNDksCisgICAgICAxNDgsICAxNDcsICAxNDYsICAxNDUsICAxNDQsICAxNDMs
ICAxMzQsICAxMTgsICAxMTQsICAxMDksCisgICAgICAxMDIsICAgNzYsICAgNzEsICAgNjUsICAg
NTksICAgNTQsICA0NDIsICAgIDMsICA0NDIsICA0NDIsCisgICAgICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCisKKyAgICAgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKKyAg
ICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwKKyAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwKKyAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKKyAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKKyAgICAgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MgorICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hr
WzY1Nl0gPQorICAgIHsgICAwLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAor
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICA4LCAgICA4LCAgICA5LAorICAgICAgIDEzLCAgIDE1LCAgIDE2LCAgIDE2LCAg
IDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDI0LAorICAgICAgIDI0LCAgIDMwLCAgIDMw
LCAgIDQwLCAgIDE1LCAgIDEzLCAgIDQ3LCAgIDQwLCAgICA5LCAgIDE4LAorICAgICAgIDQ3LCAg
IDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE5LCAgIDI5LAorCisg
ICAgICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTgsICAgMjIs
ICAgMzEsCisgICAgICAgNDEsICAgMzEsICAgMTgsICAgMjksICA0NDQsICAgMzEsICAgMTksICAx
MzMsICA0MzksICAxMzMsCisgICAgICAgMTgsICAgMzIsICAgMzQsICAgNDEsICAgMzQsICAgMjIs
ICAgMzMsICAgMjIsICAgMjIsICAgMTksCisgICAgICAgMzMsICAgMzIsICAgMzUsICAgMzQsICAg
MzIsICAgMzMsICAgMzcsICAgMTgsICAgNTEsICAgMzgsCisgICAgICAgMzUsICAgMzMsICAgMzUs
ICAgNDMsICAgMzcsICAgMzUsICAgMzgsICAgOTksICA0MzgsICAgNDUsCisgICAgICAgNDgsICAg
MzUsICA0MzcsICAgMzgsICAgNDgsICAgMzcsICAgNDUsICAgNDUsICAgNDMsICAgNDYsCisgICAg
ICAgOTksICAgNDMsICAgNDYsICAgNDgsICAxMDksICAxMjksICAgNDUsICAgNDUsICAxOTgsICAg
NDUsCisgICAgICAgNDYsICA0MzYsICAxMDksICAxMjksICAxNTIsICAxNTIsICAxOTgsICAgNDYs
ICAgNTEsICAgNjQsCisgICAgICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAg
NjYsICAgNjYsICAgNjYsICAgNjYsCisgICAgICAgNjYsICAgNjYsICAgNjYsICA0MzUsICAxMDcs
ICAgNjQsICAxMjIsICAxMDcsICAxMDcsICA0MDEsCisKKyAgICAgIDQwMSwgIDEwNywgICA2Niwg
IDEwNywgIDE3OCwgIDE3OCwgIDE3OCwgIDQzNCwgICA2NCwgIDQzMiwKKyAgICAgIDQzMCwgIDEy
MiwgIDQyOSwgIDQyOCwgICA2NywgICA2NiwgICA2NywgICA2NywgICA2NywgICA2NywKKyAgICAg
ICA2NywgICA2NywgICA2NywgICA2OCwgIDQyNywgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2
OCwKKyAgICAgICA2OCwgICA2OCwgICA2NywgIDE0MCwgIDE0MCwgIDE0MCwgIDE0MCwgIDE0MCwg
IDE0MCwgIDE0MCwKKyAgICAgIDQyNiwgICA2OCwgICA2OSwgIDQyNCwgICA2OSwgICA2NywgIDQy
MywgICA2OSwgICA2OSwgICA2OSwKKyAgICAgICA2OSwgICA2OSwgICA2OSwgICA2OSwgICA2OCwg
IDEzNywgIDQyMiwgIDEzNywgIDQyMSwgIDQyMCwKKyAgICAgIDEzNywgIDEzNywgIDEzNywgIDEz
NywgIDEzNywgIDEzNywgIDEzNywgIDEzOCwgIDEzOCwgIDEzOCwKKyAgICAgIDEzOCwgIDEzOCwg
IDEzOCwgIDEzOCwgIDIwMiwgIDIwMiwgIDIwMiwgIDQxOSwgIDQxOCwgIDEzOSwKKyAgICAgIDQx
NywgIDEzOSwgIDQxNiwgIDEzOCwgIDEzOSwgIDEzOSwgIDEzOSwgIDEzOSwgIDEzOSwgIDEzOSwK
KyAgICAgIDEzOSwgIDIxMywgIDIxMywgIDIxMywgIDQxNCwgIDQxMywgIDEzOCwgIDE0MSwgIDE0
MSwgIDE0MSwKKworICAgICAgMTQxLCAgMTQxLCAgMTQxLCAgMTQxLCAgMjA2LCAgMjA2LCAgMjA2
LCAgMjA2LCAgMjA2LCAgMjA2LAorICAgICAgMjA2LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAg
MjA3LCAgMjA3LCAgMjA3LCAgMjA4LCAgMjA4LAorICAgICAgMjA4LCAgMjA4LCAgMjA4LCAgMjA4
LCAgMjA4LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LAorICAgICAgMjA5LCAgMjA5LCAg
MjIxLCAgMjIxLCAgMjIxLCAgMjI5LCAgMjI5LCAgMjI5LCAgMjMzLCAgMjMzLAorICAgICAgMjMz
LCAgMjM5LCAgMjM5LCAgMjM5LCAgMzcyLCAgMzcyLCAgMzcyLCAgNDEyLCAgNDExLCAgNDEwLAor
ICAgICAgNDA5LCAgNDA4LCAgNDA3LCAgNDA2LCAgNDA1LCAgNDA0LCAgNDAzLCAgMzcyLCAgNDAy
LCAgMzcyLAorICAgICAgNDQzLCAgNDQzLCAgNDAwLCAgMzkxLCAgMzkwLCAgMzg5LCAgMzg4LCAg
Mzg3LCAgMzg2LCAgMzg0LAorICAgICAgMzgzLCAgMzgyLCAgMzc5LCAgMzc4LCAgMzc2LCAgMzcz
LCAgMzcxLCAgMzcwLCAgMzY5LCAgMzY3LAorICAgICAgMzY2LCAgMzY1LCAgMzYyLCAgMzYxLCAg
MzYwLCAgMzU5LCAgMzU4LCAgMzU3LCAgMzU2LCAgMzU1LAorICAgICAgMzQ5LCAgMzQ2LCAgMzQz
LCAgMzQyLCAgMzQxLCAgMzQwLCAgMzM5LCAgMzM3LCAgMzM1LCAgMzM0LAorCisgICAgICAzMzMs
ICAzMzIsICAzMzAsICAzMjksICAzMjcsICAzMjUsICAzMjQsICAzMjMsICAzMjIsICAzMjEsCisg
ICAgICAzMjAsICAzMTksICAzMTgsICAzMTYsICAzMTUsICAzMTQsICAzMTMsICAzMTIsICAzMTEs
ICAzMTAsCisgICAgICAzMDksICAzMDgsICAzMDQsICAzMDMsICAzMDAsICAyODksICAyODUsICAy
ODQsICAyODMsICAyODIsCisgICAgICAyNzUsICAyNzQsICAyNzMsICAyNjgsICAyNjcsICAyNjYs
ICAyNjUsICAyNjQsICAyNjMsICAyNjAsCisgICAgICAyNTksICAyNTgsICAyNTcsICAyNTYsICAy
NTUsICAyNTQsICAyNTMsICAyNTIsICAyNTEsICAyNTAsCisgICAgICAyNDksICAyNDgsICAyNDcs
ICAyNDYsICAyNDUsICAyMzgsICAyMzcsICAyMzYsICAyMzUsICAyMzQsCisgICAgICAyMzIsICAy
MjgsICAyMjYsICAyMjUsICAyMjQsICAyMjAsICAyMTksICAyMTgsICAyMTcsICAyMTYsCisgICAg
ICAyMTUsICAyMTIsICAyMTAsICAyMDUsICAyMDQsICAyMDMsICAyMDEsICAyMDAsICAxOTksICAx
OTcsCisgICAgICAxOTYsICAxOTUsICAxOTQsICAxOTMsICAxOTIsICAxOTEsICAxOTAsICAxODks
ICAxODgsICAxODcsCisgICAgICAxODYsICAxODUsICAxODQsICAxODMsICAxODIsICAxODEsICAx
ODAsICAxNzksICAxNzcsICAxNzYsCisKKyAgICAgIDE3NSwgIDE3NCwgIDE3MywgIDE3MiwgIDE3
MSwgIDE3MCwgIDE2OSwgIDE2OCwgIDE2NywgIDE2NiwKKyAgICAgIDE2NSwgIDE2MywgIDE2Miwg
IDE2MSwgIDE2MCwgIDE1OSwgIDE1OCwgIDE1NywgIDE1NiwgIDE1NSwKKyAgICAgIDE1NCwgIDE1
MywgIDE1MSwgIDE1MCwgIDE0OSwgIDE0OCwgIDE0NywgIDE0NiwgIDEzNCwgIDEzMiwKKyAgICAg
IDEzMSwgIDEzMCwgIDEyOCwgIDEyNywgIDEyNiwgIDEyNSwgIDEyNCwgIDEyMywgIDEyMSwgIDEy
MCwKKyAgICAgIDExOSwgIDExOCwgIDExNywgIDExNiwgIDExNSwgIDExNCwgIDExMywgIDExMiwg
IDExMSwgIDExMCwKKyAgICAgIDEwOCwgIDEwNSwgIDEwNCwgIDEwMywgIDEwMiwgIDEwMSwgIDEw
MCwgICA5OCwgICA5NywgICA5NiwKKyAgICAgICA5NSwgICA5NCwgICA5MywgICA5MiwgICA5MSwg
ICA5MCwgICA4OSwgICA4OCwgICA4NywgICA4NiwKKyAgICAgICA4NSwgICA4NCwgICA4MywgICA4
MiwgICA3OCwgICA3NCwgICA0OSwgICA0NCwgICA0MiwgICAzOSwKKyAgICAgICAzNiwgICAyMywg
ICAyMCwgICAxNywgICAxMiwgICAgNywgICAgMywgIDQ0MiwgIDQ0MiwgIDQ0MiwKKyAgICAgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwK
KworICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLAorICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLAorICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAorICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAorICAgICAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAorICAgICAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyCisgICAgfSA7CisKKy8qIFRhYmxlIG9mIGJvb2xlYW5z
LCB0cnVlIGlmIHJ1bGUgY291bGQgbWF0Y2ggZW9sLiAqLworc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQzMl90IHl5X3J1bGVfY2FuX21hdGNoX2VvbFsxNDhdID0KKyAgICB7ICAgMCwKKzAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAs
IDAsIDAsIDAsIDEsIDAsIDAsICAgICB9OworCisvKiBUaGUgaW50ZW50IGJlaGluZCB0aGlzIGRl
ZmluaXRpb24gaXMgdGhhdCBpdCdsbCBjYXRjaAorICogYW55IHVzZXMgb2YgUkVKRUNUIHdoaWNo
IGZsZXggbWlzc2VkLgorICovCisjZGVmaW5lIFJFSkVDVCByZWplY3RfdXNlZF9idXRfbm90X2Rl
dGVjdGVkCisjZGVmaW5lIHl5bW9yZSgpIHl5bW9yZV91c2VkX2J1dF9ub3RfZGV0ZWN0ZWQKKyNk
ZWZpbmUgWVlfTU9SRV9BREogMAorI2RlZmluZSBZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCisv
KgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBMZXggc3BlY2lm
aWNhdGlvbiBmb3IgR0xTTCBFUy4KK0Jhc2VkIG9uIEFOU0kgQyBncmFtbWFyLCBMZXggc3BlY2lm
aWNhdGlvbjoKK2h0dHA6Ly93d3cubHlzYXRvci5saXUuc2UvYy9BTlNJLUMtZ3JhbW1hci1sLmh0
bWwKKworSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJh
dGVfcGFyc2VyLnNoLAorV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIExFWEVSIChnbHNsYW5n
X2xleC5jcHApLgorKi8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZy5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci91dGlsLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3Rh
Yi5oIgorCisvKiB3aW5kb3dzIG9ubHkgcHJhZ21hICovCisjaWZkZWYgX01TQ19WRVIKKyNwcmFn
bWEgd2FybmluZyhkaXNhYmxlIDogNDEwMikKKyNlbmRpZgorCisjZGVmaW5lIFlZX1VTRVJfQUNU
SU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHl5bGxvYy0+Zmlyc3Rf
ZmlsZSA9IHl5bGxvYy0+bGFzdF9maWxlID0geXljb2x1bW47IFwKKyAgICB5eWxsb2MtPmZpcnN0
X2xpbmUgPSB5eWxsb2MtPmxhc3RfbGluZSA9IHl5bGluZW5vOworCisjZGVmaW5lIFlZX0lOUFVU
KGJ1ZiwgcmVzdWx0LCBtYXhfc2l6ZSkgXAorICAgIHJlc3VsdCA9IHN0cmluZ19pbnB1dChidWYs
IG1heF9zaXplLCB5eXNjYW5uZXIpOworCitzdGF0aWMgeXlfc2l6ZV90IHN0cmluZ19pbnB1dChj
aGFyKiBidWYsIHl5X3NpemVfdCBtYXhfc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKTsKK3N0YXRp
YyBpbnQgY2hlY2tfdHlwZSh5eXNjYW5fdCB5eXNjYW5uZXIpOworc3RhdGljIGludCByZXNlcnZl
ZF93b3JkKHl5c2Nhbl90IHl5c2Nhbm5lcik7CitzdGF0aWMgaW50IGludF9jb25zdGFudCh5eXNj
YW5fdCB5eXNjYW5uZXIpOworc3RhdGljIGludCBmbG9hdF9jb25zdGFudCh5eXNjYW5fdCB5eXNj
YW5uZXIpOworCisjZGVmaW5lIElOSVRJQUwgMAorCisjZGVmaW5lIFlZX0VYVFJBX1RZUEUgVFBh
cnNlQ29udGV4dCoKKworLyogSG9sZHMgdGhlIGVudGlyZSBzdGF0ZSBvZiB0aGUgcmVlbnRyYW50
IHNjYW5uZXIuICovCitzdHJ1Y3QgeXlndXRzX3QKKyAgICB7CisKKyAgICAvKiBVc2VyLWRlZmlu
ZWQuIE5vdCB0b3VjaGVkIGJ5IGZsZXguICovCisgICAgWVlfRVhUUkFfVFlQRSB5eWV4dHJhX3I7
CisKKyAgICAvKiBUaGUgcmVzdCBhcmUgdGhlIHNhbWUgYXMgdGhlIGdsb2JhbHMgZGVjbGFyZWQg
aW4gdGhlIG5vbi1yZWVudHJhbnQgc2Nhbm5lci4gKi8KKyAgICBGSUxFICp5eWluX3IsICp5eW91
dF9yOworICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfdG9wOyAvKio8IGluZGV4IG9mIHRvcCBv
ZiBzdGFjay4gKi8KKyAgICBzaXplX3QgeXlfYnVmZmVyX3N0YWNrX21heDsgLyoqPCBjYXBhY2l0
eSBvZiBzdGFjay4gKi8KKyAgICBZWV9CVUZGRVJfU1RBVEUgKiB5eV9idWZmZXJfc3RhY2s7IC8q
KjwgU3RhY2sgYXMgYW4gYXJyYXkuICovCisgICAgY2hhciB5eV9ob2xkX2NoYXI7CisgICAgeXlf
c2l6ZV90IHl5X25fY2hhcnM7CisgICAgeXlfc2l6ZV90IHl5bGVuZ19yOworICAgIGNoYXIgKnl5
X2NfYnVmX3A7CisgICAgaW50IHl5X2luaXQ7CisgICAgaW50IHl5X3N0YXJ0OworICAgIGludCB5
eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2Y7CisgICAgaW50IHl5X3N0YXJ0X3N0YWNrX3B0cjsK
KyAgICBpbnQgeXlfc3RhcnRfc3RhY2tfZGVwdGg7CisgICAgaW50ICp5eV9zdGFydF9zdGFjazsK
KyAgICB5eV9zdGF0ZV90eXBlIHl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOworICAgIGNoYXIqIHl5
X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisKKyAgICBpbnQgeXlsaW5lbm9fcjsKKyAgICBpbnQgeXlf
ZmxleF9kZWJ1Z19yOworCisgICAgY2hhciAqeXl0ZXh0X3I7CisgICAgaW50IHl5X21vcmVfZmxh
ZzsKKyAgICBpbnQgeXlfbW9yZV9sZW47CisKKyAgICBZWVNUWVBFICogeXlsdmFsX3I7CisKKyAg
ICBZWUxUWVBFICogeXlsbG9jX3I7CisKKyAgICB9OyAvKiBlbmQgc3RydWN0IHl5Z3V0c190ICov
CisKK3N0YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxzICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwor
ICAgIC8qIFRoaXMgbXVzdCBnbyBoZXJlIGJlY2F1c2UgWVlTVFlQRSBhbmQgWVlMVFlQRSBhcmUg
aW5jbHVkZWQKKyAgICAgKiBmcm9tIGJpc29uIG91dHB1dCBpbiBzZWN0aW9uIDEuKi8KKyAgICAj
ICAgIGRlZmluZSB5eWx2YWwgeXlnLT55eWx2YWxfcgorICAgIAorICAgICMgICAgZGVmaW5lIHl5
bGxvYyB5eWctPnl5bGxvY19yCisgICAgCitpbnQgeXlsZXhfaW5pdCAoeXlzY2FuX3QqIHNjYW5u
ZXIpOworCitpbnQgeXlsZXhfaW5pdF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQs
eXlzY2FuX3QqIHNjYW5uZXIpOworCisvKiBBY2Nlc3NvciBtZXRob2RzIHRvIGdsb2JhbHMuCisg
ICBUaGVzZSBhcmUgbWFkZSB2aXNpYmxlIHRvIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMgZm9yIGNv
bnZlbmllbmNlLiAqLworCitpbnQgeXlsZXhfZGVzdHJveSAoeXlzY2FuX3QgeXlzY2FubmVyICk7
CisKK2ludCB5eWdldF9kZWJ1ZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgeXlzZXRf
ZGVidWcgKGludCBkZWJ1Z19mbGFnICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworWVlfRVhUUkFf
VFlQRSB5eWdldF9leHRyYSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgeXlzZXRfZXh0
cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwor
RklMRSAqeXlnZXRfaW4gKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHl5c2V0X2luICAo
RklMRSAqIGluX3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKK0ZJTEUgKnl5Z2V0X291dCAo
eXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgeXlzZXRfb3V0ICAoRklMRSAqIG91dF9zdHIg
LHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit5eV9zaXplX3QgeXlnZXRfbGVuZyAoeXlzY2FuX3Qg
eXlzY2FubmVyICk7CisKK2NoYXIgKnl5Z2V0X3RleHQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwor
CitpbnQgeXlnZXRfbGluZW5vICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCB5eXNldF9s
aW5lbm8gKGludCBsaW5lX251bWJlciAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2ludCB5eWdl
dF9jb2x1bW4gICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCB5eXNldF9jb2x1bW4gKGlu
dCBjb2x1bW5fbm8gLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitZWVNUWVBFICogeXlnZXRfbHZh
bCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgeXlzZXRfbHZhbCAoWVlTVFlQRSAqIHl5
bHZhbF9wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKKyAgICAgICBZWUxUWVBFICp5eWdl
dF9sbG9jICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyAgICAKKyAgICAgICAgdm9pZCB5eXNldF9s
bG9jIChZWUxUWVBFICogeXlsbG9jX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyAgICAK
Ky8qIE1hY3JvcyBhZnRlciB0aGlzIHBvaW50IGNhbiBhbGwgYmUgb3ZlcnJpZGRlbiBieSB1c2Vy
IGRlZmluaXRpb25zIGluCisgKiBzZWN0aW9uIDEuCisgKi8KKworI2lmbmRlZiBZWV9TS0lQX1lZ
V1JBUAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIGludCB5eXdyYXAgKHl5c2Nhbl90
IHl5c2Nhbm5lciApOworI2Vsc2UKK2V4dGVybiBpbnQgeXl3cmFwICh5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgeXl0ZXh0X3B0cgorc3RhdGljIHZvaWQg
eXlfZmxleF9zdHJuY3B5IChjaGFyICoseXljb25zdCBjaGFyICosaW50ICx5eXNjYW5fdCB5eXNj
YW5uZXIpOworI2VuZGlmCisKKyNpZmRlZiBZWV9ORUVEX1NUUkxFTgorc3RhdGljIGludCB5eV9m
bGV4X3N0cmxlbiAoeXljb25zdCBjaGFyICogLHl5c2Nhbl90IHl5c2Nhbm5lcik7CisjZW5kaWYK
KworI2lmbmRlZiBZWV9OT19JTlBVVAorCisjaWZkZWYgX19jcGx1c3BsdXMKK3N0YXRpYyBpbnQg
eXlpbnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZWxzZQorc3RhdGljIGludCBpbnB1dCAo
eXlzY2FuX3QgeXlzY2FubmVyICk7CisjZW5kaWYKKworI2VuZGlmCisKKy8qIEFtb3VudCBvZiBz
dHVmZiB0byBzbHVycCB1cCB3aXRoIGVhY2ggcmVhZC4gKi8KKyNpZm5kZWYgWVlfUkVBRF9CVUZf
U0laRQorI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDgxOTIKKyNlbmRpZgorCisvKiBDb3B5IHdo
YXRldmVyIHRoZSBsYXN0IHJ1bGUgbWF0Y2hlZCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAqLwor
I2lmbmRlZiBFQ0hPCisvKiBUaGlzIHVzZWQgdG8gYmUgYW4gZnB1dHMoKSwgYnV0IHNpbmNlIHRo
ZSBzdHJpbmcgbWlnaHQgY29udGFpbiBOVUwncywKKyAqIHdlIG5vdyB1c2UgZndyaXRlKCkuCisg
Ki8KKyNkZWZpbmUgRUNITyBkbyB7IGlmIChmd3JpdGUoIHl5dGV4dCwgeXlsZW5nLCAxLCB5eW91
dCApKSB7fSB9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qIEdldHMgaW5wdXQgYW5kIHN0dWZmcyBp
dCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVMTCwKKyAq
IGlzIHJldHVybmVkIGluICJyZXN1bHQiLgorICovCisjaWZuZGVmIFlZX0lOUFVUCisjZGVmaW5l
IFlZX0lOUFVUKGJ1ZixyZXN1bHQsbWF4X3NpemUpIFwKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCisJCXsgXAorCQlpbnQgYyA9ICcqJzsgXAor
CQlzaXplX3QgbjsgXAorCQlmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKKwkJCSAgICAg
KGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsrbiApIFwKKwkJCWJ1Zltu
XSA9IChjaGFyKSBjOyBcCisJCWlmICggYyA9PSAnXG4nICkgXAorCQkJYnVmW24rK10gPSAoY2hh
cikgYzsgXAorCQlpZiAoIGMgPT0gRU9GICYmIGZlcnJvciggeXlpbiApICkgXAorCQkJWVlfRkFU
QUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCisJCXJlc3VsdCA9
IG47IFwKKwkJfSBcCisJZWxzZSBcCisJCXsgXAorCQllcnJubz0wOyBcCisJCXdoaWxlICggKHJl
c3VsdCA9IGZyZWFkKGJ1ZiwgMSwgbWF4X3NpemUsIHl5aW4pKT09MCAmJiBmZXJyb3IoeXlpbikp
IFwKKwkJCXsgXAorCQkJaWYoIGVycm5vICE9IEVJTlRSKSBcCisJCQkJeyBcCisJCQkJWVlfRkFU
QUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCisJCQkJYnJlYWs7
IFwKKwkJCQl9IFwKKwkJCWVycm5vPTA7IFwKKwkJCWNsZWFyZXJyKHl5aW4pOyBcCisJCQl9IFwK
KwkJfVwKK1wKKworI2VuZGlmCisKKy8qIE5vIHNlbWktY29sb24gYWZ0ZXIgcmV0dXJuOyBjb3Jy
ZWN0IHVzYWdlIGlzIHRvIHdyaXRlICJ5eXRlcm1pbmF0ZSgpOyIgLQorICogd2UgZG9uJ3Qgd2Fu
dCBhbiBleHRyYSAnOycgYWZ0ZXIgdGhlICJyZXR1cm4iIGJlY2F1c2UgdGhhdCB3aWxsIGNhdXNl
CisgKiBzb21lIGNvbXBpbGVycyB0byBjb21wbGFpbiBhYm91dCB1bnJlYWNoYWJsZSBzdGF0ZW1l
bnRzLgorICovCisjaWZuZGVmIHl5dGVybWluYXRlCisjZGVmaW5lIHl5dGVybWluYXRlKCkgcmV0
dXJuIFlZX05VTEwKKyNlbmRpZgorCisvKiBOdW1iZXIgb2YgZW50cmllcyBieSB3aGljaCBzdGFy
dC1jb25kaXRpb24gc3RhY2sgZ3Jvd3MuICovCisjaWZuZGVmIFlZX1NUQVJUX1NUQUNLX0lOQ1IK
KyNkZWZpbmUgWVlfU1RBUlRfU1RBQ0tfSU5DUiAyNQorI2VuZGlmCisKKy8qIFJlcG9ydCBhIGZh
dGFsIGVycm9yLiAqLworI2lmbmRlZiBZWV9GQVRBTF9FUlJPUgorI2RlZmluZSBZWV9GQVRBTF9F
UlJPUihtc2cpIHl5X2ZhdGFsX2Vycm9yKCBtc2cgLCB5eXNjYW5uZXIpCisjZW5kaWYKKworLyog
ZW5kIHRhYmxlcyBzZXJpYWxpemF0aW9uIHN0cnVjdHVyZXMgYW5kIHByb3RvdHlwZXMgKi8KKwor
LyogRGVmYXVsdCBkZWNsYXJhdGlvbiBvZiBnZW5lcmF0ZWQgc2Nhbm5lciAtIGEgZGVmaW5lIHNv
IHRoZSB1c2VyIGNhbgorICogZWFzaWx5IGFkZCBwYXJhbWV0ZXJzLgorICovCisjaWZuZGVmIFlZ
X0RFQ0wKKyNkZWZpbmUgWVlfREVDTF9JU19PVVJTIDEKKworZXh0ZXJuIGludCB5eWxleCBcCisg
ICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSxZWUxUWVBFICogeXlsbG9jX3Bh
cmFtICx5eXNjYW5fdCB5eXNjYW5uZXIpOworCisjZGVmaW5lIFlZX0RFQ0wgaW50IHl5bGV4IFwK
KyAgICAgICAgICAgICAgIChZWVNUWVBFICogeXlsdmFsX3BhcmFtLCBZWUxUWVBFICogeXlsbG9j
X3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQorI2VuZGlmIC8qICFZWV9ERUNMICovCisKKy8q
IENvZGUgZXhlY3V0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHJ1bGUsIGFmdGVyIHl5dGV4
dCBhbmQgeXlsZW5nCisgKiBoYXZlIGJlZW4gc2V0IHVwLgorICovCisjaWZuZGVmIFlZX1VTRVJf
QUNUSU9OCisjZGVmaW5lIFlZX1VTRVJfQUNUSU9OCisjZW5kaWYKKworLyogQ29kZSBleGVjdXRl
ZCBhdCB0aGUgZW5kIG9mIGVhY2ggcnVsZS4gKi8KKyNpZm5kZWYgWVlfQlJFQUsKKyNkZWZpbmUg
WVlfQlJFQUsgYnJlYWs7CisjZW5kaWYKKworI2RlZmluZSBZWV9SVUxFX1NFVFVQIFwKKwlZWV9V
U0VSX0FDVElPTgorCisvKiogVGhlIG1haW4gc2Nhbm5lciBmdW5jdGlvbiB3aGljaCBkb2VzIGFs
bCB0aGUgd29yay4KKyAqLworWVlfREVDTAoreworCXJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlf
Y3VycmVudF9zdGF0ZTsKKwlyZWdpc3RlciBjaGFyICp5eV9jcCwgKnl5X2JwOworCXJlZ2lzdGVy
IGludCB5eV9hY3Q7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOworCisgICAgeXlsdmFsID0geXlsdmFsX3BhcmFtOworCisgICAgeXlsbG9j
ID0geXlsbG9jX3BhcmFtOworCisJaWYgKCAheXlnLT55eV9pbml0ICkKKwkJeworCQl5eWctPnl5
X2luaXQgPSAxOworCisjaWZkZWYgWVlfVVNFUl9JTklUCisJCVlZX1VTRVJfSU5JVDsKKyNlbmRp
ZgorCisJCWlmICggISB5eWctPnl5X3N0YXJ0ICkKKwkJCXl5Zy0+eXlfc3RhcnQgPSAxOwkvKiBm
aXJzdCBzdGFydCBzdGF0ZSAqLworCisJCWlmICggISB5eWluICkKKwkJCXl5aW4gPSBzdGRpbjsK
KworCQlpZiAoICEgeXlvdXQgKQorCQkJeXlvdXQgPSBzdGRvdXQ7CisKKwkJaWYgKCAhIFlZX0NV
UlJFTlRfQlVGRkVSICkgeworCQkJeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwor
CQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KKwkJCQl5eV9jcmVhdGVfYnVmZmVyKHl5aW4s
WVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7CisJCX0KKworCQl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5
eXNjYW5uZXIgKTsKKwkJfQorCisJd2hpbGUgKCAxICkJCS8qIGxvb3BzIHVudGlsIGVuZC1vZi1m
aWxlIGlzIHJlYWNoZWQgKi8KKwkJeworCQl5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKKworCQkv
KiBTdXBwb3J0IG9mIHl5dGV4dC4gKi8KKwkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7CisK
KwkJLyogeXlfYnAgcG9pbnRzIHRvIHRoZSBwb3NpdGlvbiBpbiB5eV9jaF9idWYgb2YgdGhlIHN0
YXJ0IG9mCisJCSAqIHRoZSBjdXJyZW50IHJ1bi4KKwkJICovCisJCXl5X2JwID0geXlfY3A7CisK
KwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7Cit5eV9tYXRjaDoKKwkJZG8KKwkJ
CXsKKwkJCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCld
OworCQkJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQkJCXsKKwkJCQl5eWct
Pnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKKwkJCQl5eWctPnl5
X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKKwkJCQl9CisJCQl3aGlsZSAoIHl5X2Noa1t5
eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCisJ
CQkJeworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0
ZV07CisJCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ0MyApCisJCQkJCXl5X2MgPSB5eV9t
ZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQkJCX0KKwkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5
eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwor
CQkJKyt5eV9jcDsKKwkJCX0KKwkJd2hpbGUgKCB5eV9jdXJyZW50X3N0YXRlICE9IDQ0MiApOwor
CQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKwkJeXlfY3VycmVudF9zdGF0
ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisKK3l5X2ZpbmRfYWN0aW9uOgorCQl5
eV9hY3QgPSB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV07CisKKwkJWVlfRE9fQkVGT1JFX0FD
VElPTjsKKworCQlpZiAoIHl5X2FjdCAhPSBZWV9FTkRfT0ZfQlVGRkVSICYmIHl5X3J1bGVfY2Fu
X21hdGNoX2VvbFt5eV9hY3RdICkKKwkJCXsKKwkJCXl5X3NpemVfdCB5eWw7CisJCQlmb3IgKCB5
eWwgPSAwOyB5eWwgPCB5eWxlbmc7ICsreXlsICkKKwkJCQlpZiAoIHl5dGV4dFt5eWxdID09ICdc
bicgKQorCQkJCQkgICAKKyAgICBkb3sgeXlsaW5lbm8rKzsKKyAgICAgICAgeXljb2x1bW49MDsK
KyAgICB9d2hpbGUoMCkKKzsKKwkJCX0KKworZG9fYWN0aW9uOgkvKiBUaGlzIGxhYmVsIGlzIHVz
ZWQgb25seSB0byBhY2Nlc3MgRU9GIGFjdGlvbnMuICovCisKKwkJc3dpdGNoICggeXlfYWN0ICkK
Kwl7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dpdGNoICovCisJCQljYXNlIDA6IC8qIG11c3Qg
YmFjayB1cCAqLworCQkJLyogdW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9O
ICovCisJCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJCXl5X2NwID0geXlnLT55eV9s
YXN0X2FjY2VwdGluZ19jcG9zOworCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9h
Y2NlcHRpbmdfc3RhdGU7CisJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOworCitjYXNlIDE6CitZWV9S
VUxFX1NFVFVQCit7IHJldHVybiBJTlZBUklBTlQ7IH0KKwlZWV9CUkVBSworY2FzZSAyOgorWVlf
UlVMRV9TRVRVUAoreyByZXR1cm4gSElHSF9QUkVDSVNJT047IH0KKwlZWV9CUkVBSworY2FzZSAz
OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gTUVESVVNX1BSRUNJU0lPTjsgfQorCVlZX0JSRUFL
CitjYXNlIDQ6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBMT1dfUFJFQ0lTSU9OOyB9CisJWVlf
QlJFQUsKK2Nhc2UgNToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIFBSRUNJU0lPTjsgfQorCVlZ
X0JSRUFLCitjYXNlIDY6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBBVFRSSUJVVEU7IH0KKwlZ
WV9CUkVBSworY2FzZSA3OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gQ09OU1RfUVVBTDsgfQor
CVlZX0JSRUFLCitjYXNlIDg6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBVTklGT1JNOyB9CisJ
WVlfQlJFQUsKK2Nhc2UgOToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIFZBUllJTkc7IH0KKwlZ
WV9CUkVBSworY2FzZSAxMDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIEJSRUFLOyB9CisJWVlf
QlJFQUsKK2Nhc2UgMTE6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBDT05USU5VRTsgfQorCVlZ
X0JSRUFLCitjYXNlIDEyOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gRE87IH0KKwlZWV9CUkVB
SworY2FzZSAxMzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIEZPUjsgfQorCVlZX0JSRUFLCitj
YXNlIDE0OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gV0hJTEU7IH0KKwlZWV9CUkVBSworY2Fz
ZSAxNToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIElGOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTY6
CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBFTFNFOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTc6CitZ
WV9SVUxFX1NFVFVQCit7IHJldHVybiBJTl9RVUFMOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTg6CitZ
WV9SVUxFX1NFVFVQCit7IHJldHVybiBPVVRfUVVBTDsgfQorCVlZX0JSRUFLCitjYXNlIDE5Ogor
WVlfUlVMRV9TRVRVUAoreyByZXR1cm4gSU5PVVRfUVVBTDsgfQorCVlZX0JSRUFLCitjYXNlIDIw
OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gRkxPQVRfVFlQRTsgfQorCVlZX0JSRUFLCitjYXNl
IDIxOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gSU5UX1RZUEU7IH0KKwlZWV9CUkVBSworY2Fz
ZSAyMjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIFZPSURfVFlQRTsgfQorCVlZX0JSRUFLCitj
YXNlIDIzOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gQk9PTF9UWVBFOyB9CisJWVlfQlJFQUsK
K2Nhc2UgMjQ6CitZWV9SVUxFX1NFVFVQCit7IHl5bHZhbC0+bGV4LmIgPSB0cnVlOyAgcmV0dXJu
IEJPT0xDT05TVEFOVDsgfQorCVlZX0JSRUFLCitjYXNlIDI1OgorWVlfUlVMRV9TRVRVUAoreyB5
eWx2YWwtPmxleC5iID0gZmFsc2U7IHJldHVybiBCT09MQ09OU1RBTlQ7IH0KKwlZWV9CUkVBSwor
Y2FzZSAyNjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIERJU0NBUkQ7IH0KKwlZWV9CUkVBSwor
Y2FzZSAyNzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIFJFVFVSTjsgfQorCVlZX0JSRUFLCitj
YXNlIDI4OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gTUFUUklYMjsgfQorCVlZX0JSRUFLCitj
YXNlIDI5OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gTUFUUklYMzsgfQorCVlZX0JSRUFLCitj
YXNlIDMwOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gTUFUUklYNDsgfQorCVlZX0JSRUFLCitj
YXNlIDMxOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gVkVDMjsgfQorCVlZX0JSRUFLCitjYXNl
IDMyOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gVkVDMzsgfQorCVlZX0JSRUFLCitjYXNlIDMz
OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gVkVDNDsgfQorCVlZX0JSRUFLCitjYXNlIDM0Ogor
WVlfUlVMRV9TRVRVUAoreyByZXR1cm4gSVZFQzI7IH0KKwlZWV9CUkVBSworY2FzZSAzNToKK1lZ
X1JVTEVfU0VUVVAKK3sgcmV0dXJuIElWRUMzOyB9CisJWVlfQlJFQUsKK2Nhc2UgMzY6CitZWV9S
VUxFX1NFVFVQCit7IHJldHVybiBJVkVDNDsgfQorCVlZX0JSRUFLCitjYXNlIDM3OgorWVlfUlVM
RV9TRVRVUAoreyByZXR1cm4gQlZFQzI7IH0KKwlZWV9CUkVBSworY2FzZSAzODoKK1lZX1JVTEVf
U0VUVVAKK3sgcmV0dXJuIEJWRUMzOyB9CisJWVlfQlJFQUsKK2Nhc2UgMzk6CitZWV9SVUxFX1NF
VFVQCit7IHJldHVybiBCVkVDNDsgfQorCVlZX0JSRUFLCitjYXNlIDQwOgorWVlfUlVMRV9TRVRV
UAoreyByZXR1cm4gU0FNUExFUjJEOyB9CisJWVlfQlJFQUsKK2Nhc2UgNDE6CitZWV9SVUxFX1NF
VFVQCit7IHJldHVybiBTQU1QTEVSQ1VCRTsgfQorCVlZX0JSRUFLCitjYXNlIDQyOgorWVlfUlVM
RV9TRVRVUAoreyByZXR1cm4gU0FNUExFUl9FWFRFUk5BTF9PRVM7IH0KKwlZWV9CUkVBSworY2Fz
ZSA0MzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIFNBTVBMRVIyRFJFQ1Q7IH0KKwlZWV9CUkVB
SworY2FzZSA0NDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIFNUUlVDVDsgfQorCVlZX0JSRUFL
CitjYXNlIDQ1OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNDY6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA0NzoKK1lZX1JVTEVfU0VU
VVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNl
IDQ4OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
CisJWVlfQlJFQUsKK2Nhc2UgNDk6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA1MDoKK1lZX1JVTEVfU0VUVVAKK3sg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDUxOgor
WVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlf
QlJFQUsKK2Nhc2UgNTI6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA1MzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDU0OgorWVlfUlVM
RV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsK
K2Nhc2UgNTU6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KKwlZWV9CUkVBSworY2FzZSA1NjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDU3OgorWVlfUlVMRV9TRVRV
UAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2Ug
NTg6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
KwlZWV9CUkVBSworY2FzZSA1OToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDYwOgorWVlfUlVMRV9TRVRVUAoreyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNjE6CitZ
WV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9C
UkVBSworY2FzZSA2MjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDYzOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNjQ6CitZWV9SVUxF
X1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSwor
Y2FzZSA2NToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQorCVlZX0JSRUFLCitjYXNlIDY2OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNjc6CitZWV9SVUxFX1NFVFVQ
Cit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA2
ODoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQor
CVlZX0JSRUFLCitjYXNlIDY5OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNzA6CitZWV9SVUxFX1NFVFVQCit7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA3MToKK1lZ
X1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JS
RUFLCitjYXNlIDcyOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNzM6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA3NDoKK1lZX1JVTEVf
U0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitj
YXNlIDc1OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9CisJWVlfQlJFQUsKK2Nhc2UgNzY6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA3NzoKK1lZX1JVTEVfU0VUVVAK
K3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDc4
OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJ
WVlfQlJFQUsKK2Nhc2UgNzk6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA4MDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDgxOgorWVlf
UlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJF
QUsKK2Nhc2UgODI6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA4MzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDg0OgorWVlfUlVMRV9T
RVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nh
c2UgODU6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KKwlZWV9CUkVBSworY2FzZSA4NjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDg3OgorWVlfUlVMRV9TRVRVUAor
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgODg6
CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZ
WV9CUkVBSworY2FzZSA4OToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDkwOgorWVlfUlVMRV9TRVRVUAoreyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTE6CitZWV9S
VUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVB
SworY2FzZSA5MjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDkzOgorWVlfUlVMRV9TRVRVUAoreworICAgeXlsdmFs
LT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsgCisgICByZXR1cm4gY2hlY2tf
dHlwZSh5eXNjYW5uZXIpOworfQorCVlZX0JSRUFLCitjYXNlIDk0OgorWVlfUlVMRV9TRVRVUAor
eyByZXR1cm4gaW50X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5NToK
K1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIGludF9jb25zdGFudCh5eXNjYW5uZXIpOyB9CisJWVlf
QlJFQUsKK2Nhc2UgOTY6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBpbnRfY29uc3RhbnQoeXlz
Y2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDk3OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4g
ZmxvYXRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDk4OgorWVlfUlVM
RV9TRVRVUAoreyByZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFL
CitjYXNlIDk5OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2Fu
bmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDEwMDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIEFE
RF9BU1NJR047IH0KKwlZWV9CUkVBSworY2FzZSAxMDE6CitZWV9SVUxFX1NFVFVQCit7IHJldHVy
biBTVUJfQVNTSUdOOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTAyOgorWVlfUlVMRV9TRVRVUAoreyBy
ZXR1cm4gTVVMX0FTU0lHTjsgfQorCVlZX0JSRUFLCitjYXNlIDEwMzoKK1lZX1JVTEVfU0VUVVAK
K3sgcmV0dXJuIERJVl9BU1NJR047IH0KKwlZWV9CUkVBSworY2FzZSAxMDQ6CitZWV9SVUxFX1NF
VFVQCit7IHJldHVybiBNT0RfQVNTSUdOOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTA1OgorWVlfUlVM
RV9TRVRVUAoreyByZXR1cm4gTEVGVF9BU1NJR047IH0KKwlZWV9CUkVBSworY2FzZSAxMDY6CitZ
WV9SVUxFX1NFVFVQCit7IHJldHVybiBSSUdIVF9BU1NJR047IH0KKwlZWV9CUkVBSworY2FzZSAx
MDc6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBBTkRfQVNTSUdOOyB9CisJWVlfQlJFQUsKK2Nh
c2UgMTA4OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gWE9SX0FTU0lHTjsgfQorCVlZX0JSRUFL
CitjYXNlIDEwOToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIE9SX0FTU0lHTjsgfQorCVlZX0JS
RUFLCitjYXNlIDExMDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIElOQ19PUDsgfQorCVlZX0JS
RUFLCitjYXNlIDExMToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIERFQ19PUDsgfQorCVlZX0JS
RUFLCitjYXNlIDExMjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIEFORF9PUDsgfQorCVlZX0JS
RUFLCitjYXNlIDExMzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIE9SX09QOyB9CisJWVlfQlJF
QUsKK2Nhc2UgMTE0OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gWE9SX09QOyB9CisJWVlfQlJF
QUsKK2Nhc2UgMTE1OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gTEVfT1A7IH0KKwlZWV9CUkVB
SworY2FzZSAxMTY6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBHRV9PUDsgfQorCVlZX0JSRUFL
CitjYXNlIDExNzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIEVRX09QOyB9CisJWVlfQlJFQUsK
K2Nhc2UgMTE4OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gTkVfT1A7IH0KKwlZWV9CUkVBSwor
Y2FzZSAxMTk6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBMRUZUX09QOyB9CisJWVlfQlJFQUsK
K2Nhc2UgMTIwOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gUklHSFRfT1A7IH0KKwlZWV9CUkVB
SworY2FzZSAxMjE6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBTRU1JQ09MT047IH0KKwlZWV9C
UkVBSworY2FzZSAxMjI6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBMRUZUX0JSQUNFOyB9CisJ
WVlfQlJFQUsKK2Nhc2UgMTIzOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gUklHSFRfQlJBQ0U7
IH0KKwlZWV9CUkVBSworY2FzZSAxMjQ6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBDT01NQTsg
fQorCVlZX0JSRUFLCitjYXNlIDEyNToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIENPTE9OOyB9
CisJWVlfQlJFQUsKK2Nhc2UgMTI2OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gRVFVQUw7IH0K
KwlZWV9CUkVBSworY2FzZSAxMjc6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBMRUZUX1BBUkVO
OyB9CisJWVlfQlJFQUsKK2Nhc2UgMTI4OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gUklHSFRf
UEFSRU47IH0KKwlZWV9CUkVBSworY2FzZSAxMjk6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBM
RUZUX0JSQUNLRVQ7IH0KKwlZWV9CUkVBSworY2FzZSAxMzA6CitZWV9SVUxFX1NFVFVQCit7IHJl
dHVybiBSSUdIVF9CUkFDS0VUOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTMxOgorWVlfUlVMRV9TRVRV
UAoreyByZXR1cm4gRE9UOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTMyOgorWVlfUlVMRV9TRVRVUAor
eyByZXR1cm4gQkFORzsgfQorCVlZX0JSRUFLCitjYXNlIDEzMzoKK1lZX1JVTEVfU0VUVVAKK3sg
cmV0dXJuIERBU0g7IH0KKwlZWV9CUkVBSworY2FzZSAxMzQ6CitZWV9SVUxFX1NFVFVQCit7IHJl
dHVybiBUSUxERTsgfQorCVlZX0JSRUFLCitjYXNlIDEzNToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0
dXJuIFBMVVM7IH0KKwlZWV9CUkVBSworY2FzZSAxMzY6CitZWV9SVUxFX1NFVFVQCit7IHJldHVy
biBTVEFSOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTM3OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4g
U0xBU0g7IH0KKwlZWV9CUkVBSworY2FzZSAxMzg6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBQ
RVJDRU5UOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTM5OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4g
TEVGVF9BTkdMRTsgfQorCVlZX0JSRUFLCitjYXNlIDE0MDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0
dXJuIFJJR0hUX0FOR0xFOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTQxOgorWVlfUlVMRV9TRVRVUAor
eyByZXR1cm4gVkVSVElDQUxfQkFSOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTQyOgorWVlfUlVMRV9T
RVRVUAoreyByZXR1cm4gQ0FSRVQ7IH0KKwlZWV9CUkVBSworY2FzZSAxNDM6CitZWV9SVUxFX1NF
VFVQCit7IHJldHVybiBBTVBFUlNBTkQ7IH0KKwlZWV9CUkVBSworY2FzZSAxNDQ6CitZWV9SVUxF
X1NFVFVQCit7IHJldHVybiBRVUVTVElPTjsgfQorCVlZX0JSRUFLCitjYXNlIDE0NToKKy8qIHJ1
bGUgMTQ1IGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VUVVAKK3sgfQorCVlZX0JSRUFLCitj
YXNlIFlZX1NUQVRFX0VPRihJTklUSUFMKToKK3sgeXl0ZXJtaW5hdGUoKTsgfQorCVlZX0JSRUFL
CitjYXNlIDE0NjoKK1lZX1JVTEVfU0VUVVAKK3sgYXNzZXJ0KGZhbHNlKTsgcmV0dXJuIDA7IH0K
KwlZWV9CUkVBSworY2FzZSAxNDc6CitZWV9SVUxFX1NFVFVQCitFQ0hPOworCVlZX0JSRUFLCisK
KwljYXNlIFlZX0VORF9PRl9CVUZGRVI6CisJCXsKKwkJLyogQW1vdW50IG9mIHRleHQgbWF0Y2hl
ZCBub3QgaW5jbHVkaW5nIHRoZSBFT0IgY2hhci4gKi8KKwkJaW50IHl5X2Ftb3VudF9vZl9tYXRj
aGVkX3RleHQgPSAoaW50KSAoeXlfY3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsKKworCQkvKiBV
bmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04uICovCisJCSp5eV9jcCA9IHl5
Zy0+eXlfaG9sZF9jaGFyOworCQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCisKKwkJaWYgKCBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX05F
VyApCisJCQl7CisJCQkvKiBXZSdyZSBzY2FubmluZyBhIG5ldyBmaWxlIG9yIGlucHV0IHNvdXJj
ZS4gIEl0J3MKKwkJCSAqIHBvc3NpYmxlIHRoYXQgdGhpcyBoYXBwZW5lZCBiZWNhdXNlIHRoZSB1
c2VyCisJCQkgKiBqdXN0IHBvaW50ZWQgeXlpbiBhdCBhIG5ldyBzb3VyY2UgYW5kIGNhbGxlZAor
CQkJICogeXlsZXgoKS4gIElmIHNvLCB0aGVuIHdlIGhhdmUgdG8gYXNzdXJlCisJCQkgKiBjb25z
aXN0ZW5jeSBiZXR3ZWVuIFlZX0NVUlJFTlRfQlVGRkVSIGFuZCBvdXIKKwkJCSAqIGdsb2JhbHMu
ICBIZXJlIGlzIHRoZSByaWdodCBwbGFjZSB0byBkbyBzbywgYmVjYXVzZQorCQkJICogdGhpcyBp
cyB0aGUgZmlyc3QgYWN0aW9uIChvdGhlciB0aGFuIHBvc3NpYmx5IGEKKwkJCSAqIGJhY2stdXAp
IHRoYXQgd2lsbCBtYXRjaCBmb3IgdGhlIG5ldyBpbnB1dCBzb3VyY2UuCisJCQkgKi8KKwkJCXl5
Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsKKwkJ
CVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZSA9IHl5aW47CisJCQlZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTk9STUFM
OworCQkJfQorCisJCS8qIE5vdGUgdGhhdCBoZXJlIHdlIHRlc3QgZm9yIHl5X2NfYnVmX3AgIjw9
IiB0byB0aGUgcG9zaXRpb24KKwkJICogb2YgdGhlIGZpcnN0IEVPQiBpbiB0aGUgYnVmZmVyLCBz
aW5jZSB5eV9jX2J1Zl9wIHdpbGwKKwkJICogYWxyZWFkeSBoYXZlIGJlZW4gaW5jcmVtZW50ZWQg
cGFzdCB0aGUgTlVMIGNoYXJhY3RlcgorCQkgKiAoc2luY2UgYWxsIHN0YXRlcyBtYWtlIHRyYW5z
aXRpb25zIG9uIEVPQiB0byB0aGUKKwkJICogZW5kLW9mLWJ1ZmZlciBzdGF0ZSkuICBDb250cmFz
dCB0aGlzIHdpdGggdGhlIHRlc3QKKwkJICogaW4gaW5wdXQoKS4KKwkJICovCisJCWlmICggeXln
LT55eV9jX2J1Zl9wIDw9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWct
Pnl5X25fY2hhcnNdICkKKwkJCXsgLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLworCQkJeXlf
c3RhdGVfdHlwZSB5eV9uZXh0X3N0YXRlOworCisJCQl5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5
dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OworCisJCQl5eV9jdXJyZW50X3N0
YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKKworCQkJLyogT2theSwg
d2UncmUgbm93IHBvc2l0aW9uZWQgdG8gbWFrZSB0aGUgTlVMCisJCQkgKiB0cmFuc2l0aW9uLiAg
V2UgY291bGRuJ3QgaGF2ZQorCQkJICogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCkgZ28gYWhlYWQg
YW5kIGRvIGl0CisJCQkgKiBmb3IgdXMgYmVjYXVzZSBpdCBkb2Vzbid0IGtub3cgaG93IHRvIGRl
YWwKKwkJCSAqIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIGphbW1pbmcgKGFuZCB3ZSBkb24ndAor
CQkJICogd2FudCB0byBidWlsZCBqYW1taW5nIGludG8gaXQgYmVjYXVzZSB0aGVuIGl0CisJCQkg
KiB3aWxsIHJ1biBtb3JlIHNsb3dseSkuCisJCQkgKi8KKworCQkJeXlfbmV4dF9zdGF0ZSA9IHl5
X3RyeV9OVUxfdHJhbnMoIHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5uZXIpOworCisJCQl5eV9i
cCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOworCisJCQlpZiAoIHl5X25leHRfc3Rh
dGUgKQorCQkJCXsKKwkJCQkvKiBDb25zdW1lIHRoZSBOVUwuICovCisJCQkJeXlfY3AgPSArK3l5
Zy0+eXlfY19idWZfcDsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbmV4dF9zdGF0ZTsKKwkJ
CQlnb3RvIHl5X21hdGNoOworCQkJCX0KKworCQkJZWxzZQorCQkJCXsKKwkJCQl5eV9jcCA9IHl5
Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55
eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKKwkJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOworCQkJCX0K
KwkJCX0KKworCQllbHNlIHN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkg
KQorCQkJeworCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgorCQkJCXsKKwkJCQl5eWctPnl5
X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDA7CisKKwkJCQlpZiAoIHl5d3JhcCh5eXNjYW5u
ZXIgKSApCisJCQkJCXsKKwkJCQkJLyogTm90ZTogYmVjYXVzZSB3ZSd2ZSB0YWtlbiBjYXJlIGlu
CisJCQkJCSAqIHl5X2dldF9uZXh0X2J1ZmZlcigpIHRvIGhhdmUgc2V0IHVwCisJCQkJCSAqIHl5
dGV4dCwgd2UgY2FuIG5vdyBzZXQgdXAKKwkJCQkJICogeXlfY19idWZfcCBzbyB0aGF0IGlmIHNv
bWUgdG90YWwKKwkJCQkJICogaG9zZXIgKGxpa2UgZmxleCBpdHNlbGYpIHdhbnRzIHRvCisJCQkJ
CSAqIGNhbGwgdGhlIHNjYW5uZXIgYWZ0ZXIgd2UgcmV0dXJuIHRoZQorCQkJCQkgKiBZWV9OVUxM
LCBpdCdsbCBzdGlsbCB3b3JrIC0gYW5vdGhlcgorCQkJCQkgKiBZWV9OVUxMIHdpbGwgZ2V0IHJl
dHVybmVkLgorCQkJCQkgKi8KKwkJCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRy
ICsgWVlfTU9SRV9BREo7CisKKwkJCQkJeXlfYWN0ID0gWVlfU1RBVEVfRU9GKFlZX1NUQVJUKTsK
KwkJCQkJZ290byBkb19hY3Rpb247CisJCQkJCX0KKworCQkJCWVsc2UKKwkJCQkJeworCQkJCQlp
ZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQorCQkJCQkJWVlfTkVXX0ZJ
TEU7CisJCQkJCX0KKwkJCQlicmVhazsKKwkJCQl9CisKKwkJCWNhc2UgRU9CX0FDVF9DT05USU5V
RV9TQ0FOOgorCQkJCXl5Zy0+eXlfY19idWZfcCA9CisJCQkJCXl5Zy0+eXl0ZXh0X3B0ciArIHl5
X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7CisKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0
X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKKworCQkJCXl5X2NwID0geXlnLT55eV9jX2J1
Zl9wOworCQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7CisJCQkJZ290
byB5eV9tYXRjaDsKKworCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6CisJCQkJeXlnLT55eV9j
X2J1Zl9wID0KKwkJCQkmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55
eV9uX2NoYXJzXTsKKworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3Rh
dGUoIHl5c2Nhbm5lciApOworCisJCQkJeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7CisJCQkJeXlf
YnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKKwkJCQlnb3RvIHl5X2ZpbmRfYWN0
aW9uOworCQkJfQorCQlicmVhazsKKwkJfQorCisJZGVmYXVsdDoKKwkJWVlfRkFUQUxfRVJST1Io
CisJCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1ubyBhY3Rpb24gZm91bmQi
ICk7CisJfSAvKiBlbmQgb2YgYWN0aW9uIHN3aXRjaCAqLworCQl9IC8qIGVuZCBvZiBzY2Fubmlu
ZyBvbmUgdG9rZW4gKi8KK30gLyogZW5kIG9mIHl5bGV4ICovCisKKy8qIHl5X2dldF9uZXh0X2J1
ZmZlciAtIHRyeSB0byByZWFkIGluIGEgbmV3IGJ1ZmZlcgorICoKKyAqIFJldHVybnMgYSBjb2Rl
IHJlcHJlc2VudGluZyBhbiBhY3Rpb246CisgKglFT0JfQUNUX0xBU1RfTUFUQ0ggLQorICoJRU9C
X0FDVF9DT05USU5VRV9TQ0FOIC0gY29udGludWUgc2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0
aW9uCisgKglFT0JfQUNUX0VORF9PRl9GSUxFIC0gZW5kIG9mIGZpbGUKKyAqLworc3RhdGljIGlu
dCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisJcmVnaXN0ZXIg
Y2hhciAqZGVzdCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmOworCXJlZ2lz
dGVyIGNoYXIgKnNvdXJjZSA9IHl5Zy0+eXl0ZXh0X3B0cjsKKwlyZWdpc3RlciBpbnQgbnVtYmVy
X3RvX21vdmUsIGk7CisJaW50IHJldF92YWw7CisKKwlpZiAoIHl5Zy0+eXlfY19idWZfcCA+ICZZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSAp
CisJCVlZX0ZBVEFMX0VSUk9SKAorCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9y
LS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKKworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9maWxsX2J1ZmZlciA9PSAwICkKKwkJeyAvKiBEb24ndCB0cnkgdG8gZmlsbCB0aGUg
YnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4gKi8KKwkJaWYgKCB5eWctPnl5X2NfYnVmX3AgLSB5
eWctPnl5dGV4dF9wdHIgLSBZWV9NT1JFX0FESiA9PSAxICkKKwkJCXsKKwkJCS8qIFdlIG1hdGNo
ZWQgYSBzaW5nbGUgY2hhcmFjdGVyLCB0aGUgRU9CLCBzbworCQkJICogdHJlYXQgdGhpcyBhcyBh
IGZpbmFsIEVPRi4KKwkJCSAqLworCQkJcmV0dXJuIEVPQl9BQ1RfRU5EX09GX0ZJTEU7CisJCQl9
CisKKwkJZWxzZQorCQkJeworCQkJLyogV2UgbWF0Y2hlZCBzb21lIHRleHQgcHJpb3IgdG8gdGhl
IEVPQiwgZmlyc3QKKwkJCSAqIHByb2Nlc3MgaXQuCisJCQkgKi8KKwkJCXJldHVybiBFT0JfQUNU
X0xBU1RfTUFUQ0g7CisJCQl9CisJCX0KKworCS8qIFRyeSB0byByZWFkIG1vcmUgZGF0YS4gKi8K
KworCS8qIEZpcnN0IG1vdmUgbGFzdCBjaGFycyB0byBzdGFydCBvZiBidWZmZXIuICovCisJbnVt
YmVyX3RvX21vdmUgPSAoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyKSAt
IDE7CisKKwlmb3IgKCBpID0gMDsgaSA8IG51bWJlcl90b19tb3ZlOyArK2kgKQorCQkqKGRlc3Qr
KykgPSAqKHNvdXJjZSsrKTsKKworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9i
dWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9FT0ZfUEVORElORyApCisJCS8qIGRvbid0IGRvIHRo
ZSByZWFkLCBpdCdzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiBhbiBFT0YsCisJCSAqIGp1c3Qg
Zm9yY2UgYW4gRU9GCisJCSAqLworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hh
cnMgPSB5eWctPnl5X25fY2hhcnMgPSAwOworCisJZWxzZQorCQl7CisJCQl5eV9zaXplX3QgbnVt
X3RvX3JlYWQgPQorCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtIG51
bWJlcl90b19tb3ZlIC0gMTsKKworCQl3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQorCQkJeyAv
KiBOb3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQuICovCisKKwkJCS8qIGp1
c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciAqLworCQkJWVlfQlVGRkVS
X1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUU7CisKKwkJCWludCB5eV9jX2J1Zl9w
X29mZnNldCA9CisJCQkJKGludCkgKHl5Zy0+eXlfY19idWZfcCAtIGItPnl5X2NoX2J1Zik7CisK
KwkJCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCisJCQkJeworCQkJCXl5X3NpemVfdCBuZXdf
c2l6ZSA9IGItPnl5X2J1Zl9zaXplICogMjsKKworCQkJCWlmICggbmV3X3NpemUgPD0gMCApCisJ
CQkJCWItPnl5X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsKKwkJCQllbHNlCisJCQkJ
CWItPnl5X2J1Zl9zaXplICo9IDI7CisKKwkJCQliLT55eV9jaF9idWYgPSAoY2hhciAqKQorCQkJ
CQkvKiBJbmNsdWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJzLiAqLworCQkJCQl5eXJlYWxsb2Mo
KHZvaWQgKikgYi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7CisJ
CQkJfQorCQkJZWxzZQorCQkJCS8qIENhbid0IGdyb3cgaXQsIHdlIGRvbid0IG93biBpdC4gKi8K
KwkJCQliLT55eV9jaF9idWYgPSAwOworCisJCQlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJCQlZ
WV9GQVRBTF9FUlJPUigKKwkJCQkiZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZlciBv
dmVyZmxvdyIgKTsKKworCQkJeXlnLT55eV9jX2J1Zl9wID0gJmItPnl5X2NoX2J1Zlt5eV9jX2J1
Zl9wX29mZnNldF07CisKKwkJCW51bV90b19yZWFkID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9idWZfc2l6ZSAtCisJCQkJCQludW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJCX0KKworCQlp
ZiAoIG51bV90b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSApCisJCQludW1fdG9fcmVhZCA9IFlZ
X1JFQURfQlVGX1NJWkU7CisKKwkJLyogUmVhZCBpbiBtb3JlIGRhdGEuICovCisJCVlZX0lOUFVU
KCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90b19tb3ZlXSks
CisJCQl5eWctPnl5X25fY2hhcnMsIG51bV90b19yZWFkICk7CisKKwkJWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwlpZiAoIHl5
Zy0+eXlfbl9jaGFycyA9PSAwICkKKwkJeworCQlpZiAoIG51bWJlcl90b19tb3ZlID09IFlZX01P
UkVfQURKICkKKwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0VORF9PRl9GSUxFOworCQkJeXly
ZXN0YXJ0KHl5aW4gICx5eXNjYW5uZXIpOworCQkJfQorCisJCWVsc2UKKwkJCXsKKwkJCXJldF92
YWwgPSBFT0JfQUNUX0xBU1RfTUFUQ0g7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2J1ZmZlcl9zdGF0dXMgPQorCQkJCVlZX0JVRkZFUl9FT0ZfUEVORElORzsKKwkJCX0KKwkJfQor
CisJZWxzZQorCQlyZXRfdmFsID0gRU9CX0FDVF9DT05USU5VRV9TQ0FOOworCisJaWYgKCh5eV9z
aXplX3QpICh5eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSkgPiBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplKSB7CisJCS8qIEV4dGVuZCB0aGUgYXJyYXkgYnkgNTAl
LCBwbHVzIHRoZSBudW1iZXIgd2UgcmVhbGx5IG5lZWQuICovCisJCXl5X3NpemVfdCBuZXdfc2l6
ZSA9IHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlICsgKHl5Zy0+eXlfbl9jaGFycyA+
PiAxKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgPSAoY2hhciAqKSB5
eXJlYWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYsbmV3
X3NpemUgLHl5c2Nhbm5lciApOworCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9jaF9idWYgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4g
eXlfZ2V0X25leHRfYnVmZmVyKCkiICk7CisJfQorCisJeXlnLT55eV9uX2NoYXJzICs9IG51bWJl
cl90b19tb3ZlOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlf
bl9jaGFyc10gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NI
QVI7CisKKwl5eWctPnl5dGV4dF9wdHIgPSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9j
aF9idWZbMF07CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyogeXlfZ2V0X3ByZXZpb3VzX3N0
YXRlIC0gZ2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9yZSB0aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQg
Ki8KKworICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlz
Y2FuX3QgeXlzY2FubmVyKQoreworCXJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9z
dGF0ZTsKKwlyZWdpc3RlciBjaGFyICp5eV9jcDsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwl5eV9jdXJyZW50X3N0YXRlID0geXln
LT55eV9zdGFydDsKKworCWZvciAoIHl5X2NwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9B
REo7IHl5X2NwIDwgeXlnLT55eV9jX2J1Zl9wOyArK3l5X2NwICkKKwkJeworCQlyZWdpc3RlciBZ
WV9DSEFSIHl5X2MgPSAoKnl5X2NwID8geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV0gOiAxKTsK
KwkJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQkJeworCQkJeXlnLT55eV9s
YXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJCQl5eWctPnl5X2xhc3Rf
YWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKKwkJCX0KKwkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5
eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQorCQkJeworCQkJ
eXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKKwkJCWlm
ICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NDMgKQorCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25l
ZCBpbnQpIHl5X2NdOworCQkJfQorCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2Vb
eXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJfQorCisJcmV0dXJu
IHl5X2N1cnJlbnRfc3RhdGU7Cit9CisKKy8qIHl5X3RyeV9OVUxfdHJhbnMgLSB0cnkgdG8gbWFr
ZSBhIHRyYW5zaXRpb24gb24gdGhlIE5VTCBjaGFyYWN0ZXIKKyAqCisgKiBzeW5vcHNpcworICoJ
bmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIGN1cnJlbnRfc3RhdGUgKTsKKyAqLworICAg
IHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgICh5eV9zdGF0ZV90eXBlIHl5
X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJcmVnaXN0ZXIgaW50IHl5
X2lzX2phbTsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7IC8qIFRoaXMgdmFyIG1heSBiZSB1bnVzZWQgZGVwZW5kaW5nIHVwb24gb3B0aW9u
cy4gKi8KKwlyZWdpc3RlciBjaGFyICp5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKKworCXJlZ2lz
dGVyIFlZX0NIQVIgeXlfYyA9IDE7CisJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0g
KQorCQl7CisJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJyZW50X3N0YXRl
OworCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKKwkJfQorCXdoaWxlICgg
eXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0
YXRlICkKKwkJeworCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRf
c3RhdGVdOworCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDQzICkKKwkJCXl5X2MgPSB5eV9t
ZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQl9CisJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254
dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CisJeXlf
aXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gNDQyKTsKKworCSh2b2lkKXl5ZzsKKwlyZXR1
cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7Cit9CisKKyNpZm5kZWYgWVlfTk9f
SU5QVVQKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIHN0YXRpYyBpbnQgeXlpbnB1dCAoeXlzY2Fu
X3QgeXlzY2FubmVyKQorI2Vsc2UKKyAgICBzdGF0aWMgaW50IGlucHV0ICAoeXlzY2FuX3QgeXlz
Y2FubmVyKQorI2VuZGlmCisKK3sKKwlpbnQgYzsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwkqeXlnLT55eV9jX2J1Zl9wID0geXln
LT55eV9ob2xkX2NoYXI7CisKKwlpZiAoICp5eWctPnl5X2NfYnVmX3AgPT0gWVlfRU5EX09GX0JV
RkZFUl9DSEFSICkKKwkJeworCQkvKiB5eV9jX2J1Zl9wIG5vdyBwb2ludHMgdG8gdGhlIGNoYXJh
Y3RlciB3ZSB3YW50IHRvIHJldHVybi4KKwkJICogSWYgdGhpcyBvY2N1cnMgKmJlZm9yZSogdGhl
IEVPQiBjaGFyYWN0ZXJzLCB0aGVuIGl0J3MgYQorCQkgKiB2YWxpZCBOVUw7IGlmIG5vdCwgdGhl
biB3ZSd2ZSBoaXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLgorCQkgKi8KKwkJaWYgKCB5eWctPnl5
X2NfYnVmX3AgPCAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9u
X2NoYXJzXSApCisJCQkvKiBUaGlzIHdhcyByZWFsbHkgYSBOVUwuICovCisJCQkqeXlnLT55eV9j
X2J1Zl9wID0gJ1wwJzsKKworCQllbHNlCisJCQl7IC8qIG5lZWQgbW9yZSBpbnB1dCAqLworCQkJ
eXlfc2l6ZV90IG9mZnNldCA9IHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cjsKKwkJ
CSsreXlnLT55eV9jX2J1Zl9wOworCisJCQlzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5
c2Nhbm5lciApICkKKwkJCQl7CisJCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6CisJCQkJCS8q
IFRoaXMgaGFwcGVucyBiZWNhdXNlIHl5X2dfbl9iKCkKKwkJCQkJICogc2VlcyB0aGF0IHdlJ3Zl
IGFjY3VtdWxhdGVkIGEKKwkJCQkJICogdG9rZW4gYW5kIGZsYWdzIHRoYXQgd2UgbmVlZCB0bwor
CQkJCQkgKiB0cnkgbWF0Y2hpbmcgdGhlIHRva2VuIGJlZm9yZQorCQkJCQkgKiBwcm9jZWVkaW5n
LiAgQnV0IGZvciBpbnB1dCgpLAorCQkJCQkgKiB0aGVyZSdzIG5vIG1hdGNoaW5nIHRvIGNvbnNp
ZGVyLgorCQkJCQkgKiBTbyBjb252ZXJ0IHRoZSBFT0JfQUNUX0xBU1RfTUFUQ0gKKwkJCQkJICog
dG8gRU9CX0FDVF9FTkRfT0ZfRklMRS4KKwkJCQkJICovCisKKwkJCQkJLyogUmVzZXQgYnVmZmVy
IHN0YXR1cy4gKi8KKwkJCQkJeXlyZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lcik7CisKKwkJCQkJLypG
QUxMVEhST1VHSCovCisKKwkJCQljYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6CisJCQkJCXsKKwkJ
CQkJaWYgKCB5eXdyYXAoeXlzY2FubmVyICkgKQorCQkJCQkJcmV0dXJuIEVPRjsKKworCQkJCQlp
ZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQorCQkJCQkJWVlfTkVXX0ZJ
TEU7CisjaWZkZWYgX19jcGx1c3BsdXMKKwkJCQkJcmV0dXJuIHl5aW5wdXQoeXlzY2FubmVyKTsK
KyNlbHNlCisJCQkJCXJldHVybiBpbnB1dCh5eXNjYW5uZXIpOworI2VuZGlmCisJCQkJCX0KKwor
CQkJCWNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOgorCQkJCQl5eWctPnl5X2NfYnVmX3AgPSB5
eWctPnl5dGV4dF9wdHIgKyBvZmZzZXQ7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQor
CisJYyA9ICoodW5zaWduZWQgY2hhciAqKSB5eWctPnl5X2NfYnVmX3A7CS8qIGNhc3QgZm9yIDgt
Yml0IGNoYXIncyAqLworCSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOwkvKiBwcmVzZXJ2ZSB5eXRl
eHQgKi8KKwl5eWctPnl5X2hvbGRfY2hhciA9ICorK3l5Zy0+eXlfY19idWZfcDsKKworCWlmICgg
YyA9PSAnXG4nICkKKwkJICAgCisgICAgZG97IHl5bGluZW5vKys7CisgICAgICAgIHl5Y29sdW1u
PTA7CisgICAgfXdoaWxlKDApCis7CisKKwlyZXR1cm4gYzsKK30KKyNlbmRpZgkvKiBpZm5kZWYg
WVlfTk9fSU5QVVQgKi8KKworLyoqIEltbWVkaWF0ZWx5IHN3aXRjaCB0byBhIGRpZmZlcmVudCBp
bnB1dCBzdHJlYW0uCisgKiBAcGFyYW0gaW5wdXRfZmlsZSBBIHJlYWRhYmxlIHN0cmVhbS4KKyAq
IEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQG5vdGUgVGhpcyBmdW5j
dGlvbiBkb2VzIG5vdCByZXNldCB0aGUgc3RhcnQgY29uZGl0aW9uIHRvIEBjIElOSVRJQUwgLgor
ICovCisgICAgdm9pZCB5eXJlc3RhcnQgIChGSUxFICogaW5wdXRfZmlsZSAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7CisKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsKKyAgICAgICAgeXll
bnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUgPQorICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNj
YW5uZXIpOworCX0KKworCXl5X2luaXRfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSLGlucHV0X2Zp
bGUgLHl5c2Nhbm5lcik7CisJeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Cit9CisK
Ky8qKiBTd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgYnVmZmVyLgorICogQHBhcmFtIG5ld19i
dWZmZXIgVGhlIG5ldyBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2Fu
bmVyIG9iamVjdC4KKyAqLworICAgIHZvaWQgeXlfc3dpdGNoX3RvX2J1ZmZlciAgKFlZX0JVRkZF
Ul9TVEFURSAgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwkvKiBUT0RP
LiBXZSBzaG91bGQgYmUgYWJsZSB0byByZXBsYWNlIHRoaXMgZW50aXJlIGZ1bmN0aW9uIGJvZHkK
KwkgKiB3aXRoCisJICoJCXl5cG9wX2J1ZmZlcl9zdGF0ZSgpOworCSAqCQl5eXB1c2hfYnVmZmVy
X3N0YXRlKG5ld19idWZmZXIpOworICAgICAqLworCXl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlz
Y2FubmVyKTsKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSID09IG5ld19idWZmZXIgKQorCQlyZXR1
cm47CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJeworCQkvKiBGbHVzaCBvdXQgaW5m
b3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCisJCSp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5
X2hvbGRfY2hhcjsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0geXln
LT55eV9jX2J1Zl9wOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5
eWctPnl5X25fY2hhcnM7CisJCX0KKworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19i
dWZmZXI7CisJeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisKKwkvKiBXZSBkb24n
dCBhY3R1YWxseSBrbm93IHdoZXRoZXIgd2UgZGlkIHRoaXMgc3dpdGNoIGR1cmluZworCSAqIEVP
RiAoeXl3cmFwKCkpIHByb2Nlc3NpbmcsIGJ1dCB0aGUgb25seSB0aW1lIHRoaXMgZmxhZworCSAq
IGlzIGxvb2tlZCBhdCBpcyBhZnRlciB5eXdyYXAoKSBpcyBjYWxsZWQsIHNvIGl0J3Mgc2FmZQor
CSAqIHRvIGdvIGFoZWFkIGFuZCBhbHdheXMgc2V0IGl0LgorCSAqLworCXl5Zy0+eXlfZGlkX2J1
ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKK30KKworc3RhdGljIHZvaWQgeXlfbG9hZF9idWZmZXJf
c3RhdGUgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCXl5Zy0+eXlfbl9jaGFycyA9IFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsKKwl5eWctPnl5dGV4dF9wdHIgPSB5eWct
Pnl5X2NfYnVmX3AgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3M7CisJeXlp
biA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZTsKKwl5eWctPnl5X2hv
bGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7Cit9CisKKy8qKiBBbGxvY2F0ZSBhbmQgaW5pdGlh
bGl6ZSBhbiBpbnB1dCBidWZmZXIgc3RhdGUuCisgKiBAcGFyYW0gZmlsZSBBIHJlYWRhYmxlIHN0
cmVhbS4KKyAqIEBwYXJhbSBzaXplIFRoZSBjaGFyYWN0ZXIgYnVmZmVyIHNpemUgaW4gYnl0ZXMu
IFdoZW4gaW4gZG91YnQsIHVzZSBAYyBZWV9CVUZfU0laRS4KKyAqIEBwYXJhbSB5eXNjYW5uZXIg
VGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHJldHVybiB0aGUgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0
ZS4KKyAqLworICAgIFlZX0JVRkZFUl9TVEFURSB5eV9jcmVhdGVfYnVmZmVyICAoRklMRSAqIGZp
bGUsIGludCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlZWV9CVUZGRVJfU1RBVEUg
YjsKKyAgICAKKwliID0gKFlZX0JVRkZFUl9TVEFURSkgeXlhbGxvYyhzaXplb2YoIHN0cnVjdCB5
eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7CisJaWYgKCAhIGIgKQorCQlZWV9GQVRBTF9F
UlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9jcmVhdGVfYnVmZmVyKCkiICk7CisK
KwliLT55eV9idWZfc2l6ZSA9IHNpemU7CisKKwkvKiB5eV9jaF9idWYgaGFzIHRvIGJlIDIgY2hh
cmFjdGVycyBsb25nZXIgdGhhbiB0aGUgc2l6ZSBnaXZlbiBiZWNhdXNlCisJICogd2UgbmVlZCB0
byBwdXQgaW4gMiBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuCisJICovCisJYi0+eXlfY2hfYnVm
ID0gKGNoYXIgKikgeXlhbGxvYyhiLT55eV9idWZfc2l6ZSArIDIgLHl5c2Nhbm5lciApOworCWlm
ICggISBiLT55eV9jaF9idWYgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1l
bW9yeSBpbiB5eV9jcmVhdGVfYnVmZmVyKCkiICk7CisKKwliLT55eV9pc19vdXJfYnVmZmVyID0g
MTsKKworCXl5X2luaXRfYnVmZmVyKGIsZmlsZSAseXlzY2FubmVyKTsKKworCXJldHVybiBiOwor
fQorCisvKiogRGVzdHJveSB0aGUgYnVmZmVyLgorICogQHBhcmFtIGIgYSBidWZmZXIgY3JlYXRl
ZCB3aXRoIHl5X2NyZWF0ZV9idWZmZXIoKQorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5l
ciBvYmplY3QuCisgKi8KKyAgICB2b2lkIHl5X2RlbGV0ZV9idWZmZXIgKFlZX0JVRkZFUl9TVEFU
RSAgYiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwlpZiAoICEgYiApCisJCXJldHVybjsK
KworCWlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApIC8qIE5vdCBzdXJlIGlmIHdlIHNob3Vs
ZCBwb3AgaGVyZS4gKi8KKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gKFlZX0JVRkZFUl9T
VEFURSkgMDsKKworCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCisJCXl5ZnJlZSgodm9pZCAq
KSBiLT55eV9jaF9idWYgLHl5c2Nhbm5lciApOworCisJeXlmcmVlKCh2b2lkICopIGIgLHl5c2Nh
bm5lciApOworfQorCisvKiBJbml0aWFsaXplcyBvciByZWluaXRpYWxpemVzIGEgYnVmZmVyLgor
ICogVGhpcyBmdW5jdGlvbiBpcyBzb21ldGltZXMgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIG9uIHRo
ZSBzYW1lIGJ1ZmZlciwKKyAqIHN1Y2ggYXMgZHVyaW5nIGEgeXlyZXN0YXJ0KCkgb3IgYXQgRU9G
LgorICovCisgICAgc3RhdGljIHZvaWQgeXlfaW5pdF9idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUg
IGIsIEZJTEUgKiBmaWxlICwgeXlzY2FuX3QgeXlzY2FubmVyKQorCit7CisJaW50IG9lcnJubyA9
IGVycm5vOworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKKworCXl5X2ZsdXNoX2J1ZmZlcihiICx5eXNjYW5uZXIpOworCisJYi0+eXlfaW5w
dXRfZmlsZSA9IGZpbGU7CisJYi0+eXlfZmlsbF9idWZmZXIgPSAxOworCisgICAgLyogSWYgYiBp
cyB0aGUgY3VycmVudCBidWZmZXIsIHRoZW4geXlfaW5pdF9idWZmZXIgd2FzIF9wcm9iYWJseV8K
KyAgICAgKiBjYWxsZWQgZnJvbSB5eXJlc3RhcnQoKSBvciB0aHJvdWdoIHl5X2dldF9uZXh0X2J1
ZmZlci4KKyAgICAgKiBJbiB0aGF0IGNhc2UsIHdlIGRvbid0IHdhbnQgdG8gcmVzZXQgdGhlIGxp
bmVubyBvciBjb2x1bW4uCisgICAgICovCisgICAgaWYgKGIgIT0gWVlfQ1VSUkVOVF9CVUZGRVIp
eworICAgICAgICBiLT55eV9ic19saW5lbm8gPSAxOworICAgICAgICBiLT55eV9ic19jb2x1bW4g
PSAwOworICAgIH0KKworICAgICAgICBiLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7CisgICAgCisJ
ZXJybm8gPSBvZXJybm87Cit9CisKKy8qKiBEaXNjYXJkIGFsbCBidWZmZXJlZCBjaGFyYWN0ZXJz
LiBPbiB0aGUgbmV4dCBzY2FuLCBZWV9JTlBVVCB3aWxsIGJlIGNhbGxlZC4KKyAqIEBwYXJhbSBi
IHRoZSBidWZmZXIgc3RhdGUgdG8gYmUgZmx1c2hlZCwgdXN1YWxseSBAYyBZWV9DVVJSRU5UX0JV
RkZFUi4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCisgICAg
dm9pZCB5eV9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSAgYiAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7CisJaWYgKCAhIGIgKQorCQlyZXR1cm47CisKKwliLT55eV9uX2NoYXJzID0gMDsK
KworCS8qIFdlIGFsd2F5cyBuZWVkIHR3byBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuICBUaGUg
Zmlyc3QgY2F1c2VzCisJICogYSB0cmFuc2l0aW9uIHRvIHRoZSBlbmQtb2YtYnVmZmVyIHN0YXRl
LiAgVGhlIHNlY29uZCBjYXVzZXMKKwkgKiBhIGphbSBpbiB0aGF0IHN0YXRlLgorCSAqLworCWIt
Pnl5X2NoX2J1ZlswXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKwliLT55eV9jaF9idWZbMV0g
PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwliLT55eV9idWZfcG9zID0gJmItPnl5X2NoX2J1
ZlswXTsKKworCWItPnl5X2F0X2JvbCA9IDE7CisJYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JV
RkZFUl9ORVc7CisKKwlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKQorCQl5eV9sb2FkX2J1
ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKK30KKworLyoqIFB1c2hlcyB0aGUgbmV3IHN0YXRlIG9u
dG8gdGhlIHN0YWNrLiBUaGUgbmV3IHN0YXRlIGJlY29tZXMKKyAqICB0aGUgY3VycmVudCBzdGF0
ZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGFsbG9jYXRlIHRoZSBzdGFjaworICogIGlmIG5lY2Vzc2Fy
eS4KKyAqICBAcGFyYW0gbmV3X2J1ZmZlciBUaGUgbmV3IHN0YXRlLgorICogIEBwYXJhbSB5eXNj
YW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHl5cHVzaF9idWZmZXJfc3RhdGUg
KFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwlp
ZiAobmV3X2J1ZmZlciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwl5eWVuc3VyZV9idWZmZXJfc3Rh
Y2soeXlzY2FubmVyKTsKKworCS8qIFRoaXMgYmxvY2sgaXMgY29waWVkIGZyb20geXlfc3dpdGNo
X3RvX2J1ZmZlci4gKi8KKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJeworCQkvKiBGbHVz
aCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCisJCSp5eWctPnl5X2NfYnVmX3Ag
PSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZf
cG9zID0geXlnLT55eV9jX2J1Zl9wOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25f
Y2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CisJCX0KKworCS8qIE9ubHkgcHVzaCBpZiB0b3AgZXhp
c3RzLiBPdGhlcndpc2UsIHJlcGxhY2UgdG9wLiAqLworCWlmIChZWV9DVVJSRU5UX0JVRkZFUikK
KwkJeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wKys7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
ID0gbmV3X2J1ZmZlcjsKKworCS8qIGNvcGllZCBmcm9tIHl5X3N3aXRjaF90b19idWZmZXIuICov
CisJeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisJeXlnLT55eV9kaWRfYnVmZmVy
X3N3aXRjaF9vbl9lb2YgPSAxOworfQorCisvKiogUmVtb3ZlcyBhbmQgZGVsZXRlcyB0aGUgdG9w
IG9mIHRoZSBzdGFjaywgaWYgcHJlc2VudC4KKyAqICBUaGUgbmV4dCBlbGVtZW50IGJlY29tZXMg
dGhlIG5ldyB0b3AuCisgKiAgQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisg
Ki8KK3ZvaWQgeXlwb3BfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCWlm
ICghWVlfQ1VSUkVOVF9CVUZGRVIpCisJCXJldHVybjsKKworCXl5X2RlbGV0ZV9idWZmZXIoWVlf
Q1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lcik7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0g
TlVMTDsKKwlpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID4gMCkKKwkJLS15eWctPnl5X2J1
ZmZlcl9zdGFja190b3A7CisKKwlpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpIHsKKwkJeXlfbG9hZF9i
dWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisJCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25f
ZW9mID0gMTsKKwl9Cit9CisKKy8qIEFsbG9jYXRlcyB0aGUgc3RhY2sgaWYgaXQgZG9lcyBub3Qg
ZXhpc3QuCisgKiAgR3VhcmFudGVlcyBzcGFjZSBmb3IgYXQgbGVhc3Qgb25lIHB1c2guCisgKi8K
K3N0YXRpYyB2b2lkIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyKQor
eworCXl5X3NpemVfdCBudW1fdG9fYWxsb2M7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJaWYgKCF5eWctPnl5X2J1ZmZlcl9zdGFj
aykgeworCisJCS8qIEZpcnN0IGFsbG9jYXRpb24gaXMganVzdCBmb3IgMiBlbGVtZW50cywgc2lu
Y2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGlzCisJCSAqIHNjYW5uZXIgd2lsbCBldmVuIG5lZWQgYSBz
dGFjay4gV2UgdXNlIDIgaW5zdGVhZCBvZiAxIHRvIGF2b2lkIGFuCisJCSAqIGltbWVkaWF0ZSBy
ZWFsbG9jIG9uIHRoZSBuZXh0IGNhbGwuCisgICAgICAgICAqLworCQludW1fdG9fYWxsb2MgPSAx
OworCQl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopeXlh
bGxvYworCQkJCQkJCQkobnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3Rh
dGUqKQorCQkJCQkJCQksIHl5c2Nhbm5lcik7CisJCWlmICggISB5eWctPnl5X2J1ZmZlcl9zdGFj
ayApCisJCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eWVuc3Vy
ZV9idWZmZXJfc3RhY2soKSIgKTsKKwkJCQkJCQkJICAKKwkJbWVtc2V0KHl5Zy0+eXlfYnVmZmVy
X3N0YWNrLCAwLCBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSop
KTsKKwkJCQkKKwkJeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gbnVtX3RvX2FsbG9jOworCQl5
eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPSAwOworCQlyZXR1cm47CisJfQorCisJaWYgKHl5Zy0+
eXlfYnVmZmVyX3N0YWNrX3RvcCA+PSAoeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4KSAtIDEpewor
CisJCS8qIEluY3JlYXNlIHRoZSBidWZmZXIgdG8gcHJlcGFyZSBmb3IgYSBwb3NzaWJsZSBwdXNo
LiAqLworCQlpbnQgZ3Jvd19zaXplID0gOCAvKiBhcmJpdHJhcnkgZ3JvdyBzaXplICovOworCisJ
CW51bV90b19hbGxvYyA9IHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCArIGdyb3dfc2l6ZTsKKwkJ
eXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXl5cmVhbGxv
YworCQkJCQkJCQkoeXlnLT55eV9idWZmZXJfc3RhY2ssCisJCQkJCQkJCW51bV90b19hbGxvYyAq
IHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKKwkJCQkJCQkJLCB5eXNjYW5uZXIpOwor
CQlpZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQg
b2YgZHluYW1pYyBtZW1vcnkgaW4geXllbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7CisKKwkJLyog
emVybyBvbmx5IHRoZSBuZXcgc2xvdHMuKi8KKwkJbWVtc2V0KHl5Zy0+eXlfYnVmZmVyX3N0YWNr
ICsgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4LCAwLCBncm93X3NpemUgKiBzaXplb2Yoc3RydWN0
IHl5X2J1ZmZlcl9zdGF0ZSopKTsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gbnVtX3Rv
X2FsbG9jOworCX0KK30KKworLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2Nh
biBkaXJlY3RseSBmcm9tIGEgdXNlci1zcGVjaWZpZWQgY2hhcmFjdGVyIGJ1ZmZlci4KKyAqIEBw
YXJhbSBiYXNlIHRoZSBjaGFyYWN0ZXIgYnVmZmVyCisgKiBAcGFyYW0gc2l6ZSB0aGUgc2l6ZSBp
biBieXRlcyBvZiB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUg
c2Nhbm5lciBvYmplY3QuCisgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0
YXRlIG9iamVjdC4gCisgKi8KK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J1ZmZlciAgKGNoYXIg
KiBiYXNlLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJWVlfQlVG
RkVSX1NUQVRFIGI7CisgICAgCisJaWYgKCBzaXplIDwgMiB8fAorCSAgICAgYmFzZVtzaXplLTJd
ICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiB8fAorCSAgICAgYmFzZVtzaXplLTFdICE9IFlZX0VO
RF9PRl9CVUZGRVJfQ0hBUiApCisJCS8qIFRoZXkgZm9yZ290IHRvIGxlYXZlIHJvb20gZm9yIHRo
ZSBFT0Incy4gKi8KKwkJcmV0dXJuIDA7CisKKwliID0gKFlZX0JVRkZFUl9TVEFURSkgeXlhbGxv
YyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7CisJaWYgKCAh
IGIgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9zY2Fu
X2J1ZmZlcigpIiApOworCisJYi0+eXlfYnVmX3NpemUgPSBzaXplIC0gMjsJLyogIi0gMiIgdG8g
dGFrZSBjYXJlIG9mIEVPQidzICovCisJYi0+eXlfYnVmX3BvcyA9IGItPnl5X2NoX2J1ZiA9IGJh
c2U7CisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDA7CisJYi0+eXlfaW5wdXRfZmlsZSA9IDA7CisJ
Yi0+eXlfbl9jaGFycyA9IGItPnl5X2J1Zl9zaXplOworCWItPnl5X2lzX2ludGVyYWN0aXZlID0g
MDsKKwliLT55eV9hdF9ib2wgPSAxOworCWItPnl5X2ZpbGxfYnVmZmVyID0gMDsKKwliLT55eV9i
dWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKKworCXl5X3N3aXRjaF90b19idWZmZXIoYiAs
eXlzY2FubmVyICk7CisKKwlyZXR1cm4gYjsKK30KKworLyoqIFNldHVwIHRoZSBpbnB1dCBidWZm
ZXIgc3RhdGUgdG8gc2NhbiBhIHN0cmluZy4gVGhlIG5leHQgY2FsbCB0byB5eWxleCgpIHdpbGwK
KyAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgc3RyLgorICogQHBhcmFtIHl5c3RyIGEgTlVM
LXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHNjYW4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5u
ZXIgb2JqZWN0LgorICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBv
YmplY3QuCisgKiBAbm90ZSBJZiB5b3Ugd2FudCB0byBzY2FuIGJ5dGVzIHRoYXQgbWF5IGNvbnRh
aW4gTlVMIHZhbHVlcywgdGhlbiB1c2UKKyAqICAgICAgIHl5X3NjYW5fYnl0ZXMoKSBpbnN0ZWFk
LgorICovCitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqIHl5
c3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIAorCXJldHVybiB5eV9zY2FuX2J5dGVz
KHl5c3RyLHN0cmxlbih5eXN0cikgLHl5c2Nhbm5lcik7Cit9CisKKy8qKiBTZXR1cCB0aGUgaW5w
dXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gdGhlIGdpdmVuIGJ5dGVzLiBUaGUgbmV4dCBjYWxsIHRv
IHl5bGV4KCkgd2lsbAorICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBieXRlcy4KKyAqIEBw
YXJhbSB5eWJ5dGVzIHRoZSBieXRlIGJ1ZmZlciB0byBzY2FuCisgKiBAcGFyYW0gX3l5Ynl0ZXNf
bGVuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBhIGJ5
dGVzLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAcmV0dXJu
IHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KKyAqLworWVlfQlVGRkVS
X1NUQVRFIHl5X3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCB5eV9zaXplX3Qg
IF95eWJ5dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlZWV9CVUZGRVJfU1RBVEUg
YjsKKwljaGFyICpidWY7CisJeXlfc2l6ZV90IG47CisJeXlfc2l6ZV90IGk7CisgICAgCisJLyog
R2V0IG1lbW9yeSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3IgdHJhaWxpbmcg
RU9CJ3MuICovCisJbiA9IF95eWJ5dGVzX2xlbiArIDI7CisJYnVmID0gKGNoYXIgKikgeXlhbGxv
YyhuICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYnVmICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQg
b2YgZHluYW1pYyBtZW1vcnkgaW4geXlfc2Nhbl9ieXRlcygpIiApOworCisJZm9yICggaSA9IDA7
IGkgPCBfeXlieXRlc19sZW47ICsraSApCisJCWJ1ZltpXSA9IHl5Ynl0ZXNbaV07CisKKwlidWZb
X3l5Ynl0ZXNfbGVuXSA9IGJ1ZltfeXlieXRlc19sZW4rMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NI
QVI7CisKKwliID0geXlfc2Nhbl9idWZmZXIoYnVmLG4gLHl5c2Nhbm5lcik7CisJaWYgKCAhIGIg
KQorCQlZWV9GQVRBTF9FUlJPUiggImJhZCBidWZmZXIgaW4geXlfc2Nhbl9ieXRlcygpIiApOwor
CisJLyogSXQncyBva2F5IHRvIGdyb3cgZXRjLiB0aGlzIGJ1ZmZlciwgYW5kIHdlIHNob3VsZCB0
aHJvdyBpdAorCSAqIGF3YXkgd2hlbiB3ZSdyZSBkb25lLgorCSAqLworCWItPnl5X2lzX291cl9i
dWZmZXIgPSAxOworCisJcmV0dXJuIGI7Cit9CisKKyNpZm5kZWYgWVlfRVhJVF9GQUlMVVJFCisj
ZGVmaW5lIFlZX0VYSVRfRkFJTFVSRSAyCisjZW5kaWYKKworc3RhdGljIHZvaWQgeXlfZmF0YWxf
ZXJyb3IgKHl5Y29uc3QgY2hhciogbXNnICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIAko
dm9pZCkgZnByaW50Ziggc3RkZXJyLCAiJXNcbiIsIG1zZyApOworCWV4aXQoIFlZX0VYSVRfRkFJ
TFVSRSApOworfQorCisvKiBSZWRlZmluZSB5eWxlc3MoKSBzbyBpdCB3b3JrcyBpbiBzZWN0aW9u
IDMgY29kZS4gKi8KKworI3VuZGVmIHl5bGVzcworI2RlZmluZSB5eWxlc3MobikgXAorCWRvIFwK
KwkJeyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAorICAg
ICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAorICAgICAgICBZWV9MRVNTX0xJTkVO
Tyh5eWxlc3NfbWFjcm9fYXJnKTtcCisJCXl5dGV4dFt5eWxlbmddID0geXlnLT55eV9ob2xkX2No
YXI7IFwKKwkJeXlnLT55eV9jX2J1Zl9wID0geXl0ZXh0ICsgeXlsZXNzX21hY3JvX2FyZzsgXAor
CQl5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7IFwKKwkJKnl5Zy0+eXlfY19i
dWZfcCA9ICdcMCc7IFwKKwkJeXlsZW5nID0geXlsZXNzX21hY3JvX2FyZzsgXAorCQl9IFwKKwl3
aGlsZSAoIDAgKQorCisvKiBBY2Nlc3NvciAgbWV0aG9kcyAoZ2V0L3NldCBmdW5jdGlvbnMpIHRv
IHN0cnVjdCBtZW1iZXJzLiAqLworCisvKiogR2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0YSBmb3Ig
dGhpcyBzY2FubmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisg
Ki8KK1lZX0VYVFJBX1RZUEUgeXlnZXRfZXh0cmEgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7Cisg
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwor
ICAgIHJldHVybiB5eWV4dHJhOworfQorCisvKiogR2V0IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVy
LgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK2ludCB5eWdl
dF9saW5lbm8gICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIAorICAgICAgICBpZiAoISBZ
WV9DVVJSRU5UX0JVRkZFUikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVy
biB5eWxpbmVubzsKK30KKworLyoqIEdldCB0aGUgY3VycmVudCBjb2x1bW4gbnVtYmVyLgorICog
QHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK2ludCB5eWdldF9jb2x1
bW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIAorICAgICAgICBpZiAoISBZWV9DVVJS
RU5UX0JVRkZFUikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiB5eWNv
bHVtbjsKK30KKworLyoqIEdldCB0aGUgaW5wdXQgc3RyZWFtLgorICogQHBhcmFtIHl5c2Nhbm5l
ciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK0ZJTEUgKnl5Z2V0X2luICAoeXlzY2FuX3QgeXlz
Y2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlpbjsKK30KKworLyoqIEdldCB0aGUgb3V0cHV0IHN0
cmVhbS4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCitGSUxF
ICp5eWdldF9vdXQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190
ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eW91dDsK
K30KKworLyoqIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50IHRva2VuLgorICogQHBhcmFt
IHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3l5X3NpemVfdCB5eWdldF9sZW5n
ICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlsZW5nOworfQorCisvKiog
R2V0IHRoZSBjdXJyZW50IHRva2VuLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBv
YmplY3QuCisgKi8KKworY2hhciAqeXlnZXRfdGV4dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sK
KyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
CisgICAgcmV0dXJuIHl5dGV4dDsKK30KKworLyoqIFNldCB0aGUgdXNlci1kZWZpbmVkIGRhdGEu
IFRoaXMgZGF0YSBpcyBuZXZlciB0b3VjaGVkIGJ5IHRoZSBzY2FubmVyLgorICogQHBhcmFtIHVz
ZXJfZGVmaW5lZCBUaGUgZGF0YSB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzY2FubmVyLgor
ICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQgeXlzZXRf
ZXh0cmEgKFlZX0VYVFJBX1RZUEUgIHVzZXJfZGVmaW5lZCAsIHl5c2Nhbl90IHl5c2Nhbm5lcikK
K3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7CisgICAgeXlleHRyYSA9IHVzZXJfZGVmaW5lZCA7Cit9CisKKy8qKiBTZXQgdGhlIGN1cnJl
bnQgbGluZSBudW1iZXIuCisgKiBAcGFyYW0gbGluZV9udW1iZXIKKyAqIEBwYXJhbSB5eXNjYW5u
ZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHl5c2V0X2xpbmVubyAoaW50ICBsaW5l
X251bWJlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKyAgICAgICAgLyogbGluZW5vIGlz
IG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8KKyAgICAgICAgaWYgKCEg
WVlfQ1VSUkVOVF9CVUZGRVIgKQorICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggInl5c2V0X2xp
bmVubyBjYWxsZWQgd2l0aCBubyBidWZmZXIiICk7CisgICAgCisgICAgeXlsaW5lbm8gPSBsaW5l
X251bWJlcjsKK30KKworLyoqIFNldCB0aGUgY3VycmVudCBjb2x1bW4uCisgKiBAcGFyYW0gbGlu
ZV9udW1iZXIKKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2
b2lkIHl5c2V0X2NvbHVtbiAoaW50ICBjb2x1bW5fbm8gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7
CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OworCisgICAgICAgIC8qIGNvbHVtbiBpcyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBl
eGlzdHMuICovCisgICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSICkKKyAgICAgICAgICAg
WVlfRkFUQUxfRVJST1IoICJ5eXNldF9jb2x1bW4gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiApOwor
ICAgIAorICAgIHl5Y29sdW1uID0gY29sdW1uX25vOworfQorCisvKiogU2V0IHRoZSBpbnB1dCBz
dHJlYW0uIFRoaXMgZG9lcyBub3QgZGlzY2FyZCB0aGUgY3VycmVudAorICogaW5wdXQgYnVmZmVy
LgorICogQHBhcmFtIGluX3N0ciBBIHJlYWRhYmxlIHN0cmVhbS4KKyAqIEBwYXJhbSB5eXNjYW5u
ZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHNlZSB5eV9zd2l0Y2hfdG9fYnVmZmVyCisgKi8K
K3ZvaWQgeXlzZXRfaW4gKEZJTEUgKiAgaW5fc3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQorewor
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
KyAgICB5eWluID0gaW5fc3RyIDsKK30KKwordm9pZCB5eXNldF9vdXQgKEZJTEUgKiAgb3V0X3N0
ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlvdXQgPSBvdXRfc3RyIDsKK30KKwor
aW50IHl5Z2V0X2RlYnVnICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlf
ZmxleF9kZWJ1ZzsKK30KKwordm9pZCB5eXNldF9kZWJ1ZyAoaW50ICBiZGVidWcgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOworICAgIHl5X2ZsZXhfZGVidWcgPSBiZGVidWcgOworfQorCisvKiBB
Y2Nlc3NvciBtZXRob2RzIGZvciB5eWx2YWwgYW5kIHl5bGxvYyAqLworCitZWVNUWVBFICogeXln
ZXRfbHZhbCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5bHZhbDsKK30K
Kwordm9pZCB5eXNldF9sdmFsIChZWVNUWVBFICogIHl5bHZhbF9wYXJhbSAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7CisgICAgeXlsdmFsID0geXlsdmFsX3BhcmFtOworfQorCitZWUxUWVBFICp5
eWdldF9sbG9jICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlsbG9jOwor
fQorICAgIAordm9pZCB5eXNldF9sbG9jIChZWUxUWVBFICogIHl5bGxvY19wYXJhbSAsIHl5c2Nh
bl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOworfQorICAgIAor
LyogVXNlci12aXNpYmxlIEFQSSAqLworCisvKiB5eWxleF9pbml0IGlzIHNwZWNpYWwgYmVjYXVz
ZSBpdCBjcmVhdGVzIHRoZSBzY2FubmVyIGl0c2VsZiwgc28gaXQgaXMKKyAqIHRoZSBPTkxZIHJl
ZW50cmFudCBmdW5jdGlvbiB0aGF0IGRvZXNuJ3QgdGFrZSB0aGUgc2Nhbm5lciBhcyB0aGUgbGFz
dCBhcmd1bWVudC4KKyAqIFRoYXQncyB3aHkgd2UgZXhwbGljaXRseSBoYW5kbGUgdGhlIGRlY2xh
cmF0aW9uLCBpbnN0ZWFkIG9mIHVzaW5nIG91ciBtYWNyb3MuCisgKi8KKworaW50IHl5bGV4X2lu
aXQoeXlzY2FuX3QqIHB0cl95eV9nbG9iYWxzKQorCit7CisgICAgaWYgKHB0cl95eV9nbG9iYWxz
ID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIDE7Cisg
ICAgfQorCisgICAgKnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSB5eWFsbG9jICggc2l6ZW9m
KCBzdHJ1Y3QgeXlndXRzX3QgKSwgTlVMTCApOworCisgICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9
PSBOVUxMKXsKKyAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgIHJldHVybiAxOworICAg
IH0KKworICAgIC8qIEJ5IHNldHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4geXlfaW5p
dF9nbG9iYWxzLiBMZWF2ZSBhdCAweDAwIGZvciByZWxlYXNlcy4gKi8KKyAgICBtZW1zZXQoKnB0
cl95eV9nbG9iYWxzLDB4MDAsc2l6ZW9mKHN0cnVjdCB5eWd1dHNfdCkpOworCisgICAgcmV0dXJu
IHl5X2luaXRfZ2xvYmFscyAoICpwdHJfeXlfZ2xvYmFscyApOworfQorCisvKiB5eWxleF9pbml0
X2V4dHJhIGhhcyB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGFzIHl5bGV4X2luaXQsIGJ1dCBmb2xs
b3dzIHRoZQorICogY29udmVudGlvbiBvZiB0YWtpbmcgdGhlIHNjYW5uZXIgYXMgdGhlIGxhc3Qg
YXJndW1lbnQuIE5vdGUgaG93ZXZlciwgdGhhdAorICogdGhpcyBpcyBhICpwb2ludGVyKiB0byBh
IHNjYW5uZXIsIGFzIGl0IHdpbGwgYmUgYWxsb2NhdGVkIGJ5IHRoaXMgY2FsbCAoYW5kCisgKiBp
cyB0aGUgcmVhc29uLCB0b28sIHdoeSB0aGlzIGZ1bmN0aW9uIGFsc28gbXVzdCBoYW5kbGUgaXRz
IG93biBkZWNsYXJhdGlvbikuCisgKiBUaGUgdXNlciBkZWZpbmVkIHZhbHVlIGluIHRoZSBmaXJz
dCBhcmd1bWVudCB3aWxsIGJlIGF2YWlsYWJsZSB0byB5eWFsbG9jIGluCisgKiB0aGUgeXlleHRy
YSBmaWVsZC4KKyAqLworCitpbnQgeXlsZXhfaW5pdF9leHRyYShZWV9FWFRSQV9UWVBFIHl5X3Vz
ZXJfZGVmaW5lZCx5eXNjYW5fdCogcHRyX3l5X2dsb2JhbHMgKQorCit7CisgICAgc3RydWN0IHl5
Z3V0c190IGR1bW15X3l5Z3V0czsKKworICAgIHl5c2V0X2V4dHJhICh5eV91c2VyX2RlZmluZWQs
ICZkdW1teV95eWd1dHMpOworCisgICAgaWYgKHB0cl95eV9nbG9iYWxzID09IE5VTEwpeworICAg
ICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCQorICAgICpw
dHJfeXlfZ2xvYmFscyA9ICh5eXNjYW5fdCkgeXlhbGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0
c190ICksICZkdW1teV95eWd1dHMgKTsKKwkKKyAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5V
TEwpeworICAgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQor
ICAgIAorICAgIC8qIEJ5IHNldHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4KKyAgICB5
eV9pbml0X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLworICAgIG1lbXNl
dCgqcHRyX3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7CisgICAgCisg
ICAgeXlzZXRfZXh0cmEgKHl5X3VzZXJfZGVmaW5lZCwgKnB0cl95eV9nbG9iYWxzKTsKKyAgICAK
KyAgICByZXR1cm4geXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7Cit9CisKK3N0
YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxzICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIC8q
IEluaXRpYWxpemF0aW9uIGlzIHRoZSBzYW1lIGFzIGZvciB0aGUgbm9uLXJlZW50cmFudCBzY2Fu
bmVyLgorICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20geXlsZXhfZGVzdHJveSgp
LCBzbyBkb24ndCBhbGxvY2F0ZSBoZXJlLgorICAgICAqLworCisgICAgeXlnLT55eV9idWZmZXJf
c3RhY2sgPSAwOworICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7CisgICAgeXlnLT55
eV9idWZmZXJfc3RhY2tfbWF4ID0gMDsKKyAgICB5eWctPnl5X2NfYnVmX3AgPSAoY2hhciAqKSAw
OworICAgIHl5Zy0+eXlfaW5pdCA9IDA7CisgICAgeXlnLT55eV9zdGFydCA9IDA7CisKKyAgICB5
eWctPnl5X3N0YXJ0X3N0YWNrX3B0ciA9IDA7CisgICAgeXlnLT55eV9zdGFydF9zdGFja19kZXB0
aCA9IDA7CisgICAgeXlnLT55eV9zdGFydF9zdGFjayA9ICBOVUxMOworCisvKiBEZWZpbmVkIGlu
IG1haW4uYyAqLworI2lmZGVmIFlZX1NURElOSVQKKyAgICB5eWluID0gc3RkaW47CisgICAgeXlv
dXQgPSBzdGRvdXQ7CisjZWxzZQorICAgIHl5aW4gPSAoRklMRSAqKSAwOworICAgIHl5b3V0ID0g
KEZJTEUgKikgMDsKKyNlbmRpZgorCisgICAgLyogRm9yIGZ1dHVyZSByZWZlcmVuY2U6IFNldCBl
cnJubyBvbiBlcnJvciwgc2luY2Ugd2UgYXJlIGNhbGxlZCBieQorICAgICAqIHl5bGV4X2luaXQo
KQorICAgICAqLworICAgIHJldHVybiAwOworfQorCisvKiB5eWxleF9kZXN0cm95IGlzIGZvciBi
b3RoIHJlZW50cmFudCBhbmQgbm9uLXJlZW50cmFudCBzY2FubmVycy4gKi8KK2ludCB5eWxleF9k
ZXN0cm95ICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworICAgIC8qIFBvcCB0aGUgYnVmZmVy
IHN0YWNrLCBkZXN0cm95aW5nIGVhY2ggZWxlbWVudC4gKi8KKwl3aGlsZShZWV9DVVJSRU5UX0JV
RkZFUil7CisJCXl5X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lciAp
OworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOworCQl5eXBvcF9idWZmZXJfc3Rh
dGUoeXlzY2FubmVyKTsKKwl9CisKKwkvKiBEZXN0cm95IHRoZSBzdGFjayBpdHNlbGYuICovCisJ
eXlmcmVlKHl5Zy0+eXlfYnVmZmVyX3N0YWNrICx5eXNjYW5uZXIpOworCXl5Zy0+eXlfYnVmZmVy
X3N0YWNrID0gTlVMTDsKKworICAgIC8qIERlc3Ryb3kgdGhlIHN0YXJ0IGNvbmRpdGlvbiBzdGFj
ay4gKi8KKyAgICAgICAgeXlmcmVlKHl5Zy0+eXlfc3RhcnRfc3RhY2sgLHl5c2Nhbm5lciApOwor
ICAgICAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gTlVMTDsKKworICAgIC8qIFJlc2V0IHRoZSBn
bG9iYWxzLiBUaGlzIGlzIGltcG9ydGFudCBpbiBhIG5vbi1yZWVudHJhbnQgc2Nhbm5lciBzbyB0
aGUgbmV4dCB0aW1lCisgICAgICogeXlsZXgoKSBpcyBjYWxsZWQsIGluaXRpYWxpemF0aW9uIHdp
bGwgb2NjdXIuICovCisgICAgeXlfaW5pdF9nbG9iYWxzKCB5eXNjYW5uZXIpOworCisgICAgLyog
RGVzdHJveSB0aGUgbWFpbiBzdHJ1Y3QgKHJlZW50cmFudCBvbmx5KS4gKi8KKyAgICB5eWZyZWUg
KCB5eXNjYW5uZXIgLCB5eXNjYW5uZXIgKTsKKyAgICB5eXNjYW5uZXIgPSBOVUxMOworICAgIHJl
dHVybiAwOworfQorCisvKgorICogSW50ZXJuYWwgdXRpbGl0eSByb3V0aW5lcy4KKyAqLworCisj
aWZuZGVmIHl5dGV4dF9wdHIKK3N0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciogczEs
IHl5Y29uc3QgY2hhciAqIHMyLCBpbnQgbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZWdp
c3RlciBpbnQgaTsKKwlmb3IgKCBpID0gMDsgaSA8IG47ICsraSApCisJCXMxW2ldID0gczJbaV07
Cit9CisjZW5kaWYKKworI2lmZGVmIFlZX05FRURfU1RSTEVOCitzdGF0aWMgaW50IHl5X2ZsZXhf
c3RybGVuICh5eWNvbnN0IGNoYXIgKiBzICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJlZ2lz
dGVyIGludCBuOworCWZvciAoIG4gPSAwOyBzW25dOyArK24gKQorCQk7CisKKwlyZXR1cm4gbjsK
K30KKyNlbmRpZgorCit2b2lkICp5eWFsbG9jICh5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCit7CisJcmV0dXJuICh2b2lkICopIG1hbGxvYyggc2l6ZSApOworfQorCit2b2lk
ICp5eXJlYWxsb2MgICh2b2lkICogcHRyLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCit7CisJLyogVGhlIGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZvbGxvd2luZyBhY2Nv
bW1vZGF0ZXMgYm90aAorCSAqIGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBjaGFyKiBnZW5lcmlj
IHBvaW50ZXJzLCBhbmQgdGhvc2UKKwkgKiB0aGF0IHVzZSB2b2lkKiBnZW5lcmljIHBvaW50ZXJz
LiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVyCisJICogYmVjYXVzZSBib3RoIEFOU0kgQyBhbmQg
QysrIGFsbG93IGNhc3RsZXNzIGFzc2lnbm1lbnQgZnJvbQorCSAqIGFueSBwb2ludGVyIHR5cGUg
dG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1lbnQgY29udmVyc2lvbnMKKwkgKiBhcyB0aG91
Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KKwkgKi8KKwlyZXR1cm4gKHZvaWQgKikgcmVhbGxvYygg
KGNoYXIgKikgcHRyLCBzaXplICk7Cit9CisKK3ZvaWQgeXlmcmVlICh2b2lkICogcHRyICwgeXlz
Y2FuX3QgeXlzY2FubmVyKQoreworCWZyZWUoIChjaGFyICopIHB0ciApOwkvKiBzZWUgeXlyZWFs
bG9jKCkgZm9yIChjaGFyICopIGNhc3QgKi8KK30KKworI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5
eXRhYmxlcyIKKworI2lmIGRlZmluZWQoX19jbGFuZ19fKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9z
dGljIHBvcAorI2VuZGlmCisKK3l5X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCB5eV9z
aXplX3QgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikgeworICAgIHBwOjpUb2tlbiB0b2tl
bjsKKyAgICB5eWdldF9leHRyYSh5eXNjYW5uZXIpLT5wcmVwcm9jZXNzb3IubGV4KCZ0b2tlbik7
CisgICAgeXlfc2l6ZV90IGxlbiA9IHRva2VuLnR5cGUgPT0gcHA6OlRva2VuOjpMQVNUID8gMCA6
IHRva2VuLnRleHQuc2l6ZSgpOworICAgIGlmIChsZW4gPCBtYXhfc2l6ZSkKKyAgICAgICAgbWVt
Y3B5KGJ1ZiwgdG9rZW4udGV4dC5jX3N0cigpLCBsZW4pOworICAgIHl5c2V0X2NvbHVtbih0b2tl
bi5sb2NhdGlvbi5maWxlLHl5c2Nhbm5lcik7CisgICAgeXlzZXRfbGluZW5vKHRva2VuLmxvY2F0
aW9uLmxpbmUseXlzY2FubmVyKTsKKworICAgIGlmIChsZW4gPj0gbWF4X3NpemUpCisgICAgICAg
IFlZX0ZBVEFMX0VSUk9SKCJJbnB1dCBidWZmZXIgb3ZlcmZsb3ciKTsKKyAgICBlbHNlIGlmIChs
ZW4gPiAwKQorICAgICAgICBidWZbbGVuKytdID0gJyAnOworICAgIHJldHVybiBsZW47Cit9CisK
K2ludCBjaGVja190eXBlKHl5c2Nhbl90IHl5c2Nhbm5lcikgeworICAgIHN0cnVjdCB5eWd1dHNf
dCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIHl5c2Nhbm5lcjsKKyAgICAKKyAgICBpbnQgdG9r
ZW4gPSBJREVOVElGSUVSOworICAgIFRTeW1ib2wqIHN5bWJvbCA9IHl5ZXh0cmEtPnN5bWJvbFRh
YmxlLmZpbmQoeXl0ZXh0KTsKKyAgICBpZiAoc3ltYm9sICYmIHN5bWJvbC0+aXNWYXJpYWJsZSgp
KSB7CisgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUq
PihzeW1ib2wpOworICAgICAgICBpZiAodmFyaWFibGUtPmlzVXNlclR5cGUoKSkKKyAgICAgICAg
ICAgIHRva2VuID0gVFlQRV9OQU1FOworICAgIH0KKyAgICB5eWx2YWwtPmxleC5zeW1ib2wgPSBz
eW1ib2w7CisgICAgcmV0dXJuIHRva2VuOworfQorCitpbnQgcmVzZXJ2ZWRfd29yZCh5eXNjYW5f
dCB5eXNjYW5uZXIpIHsKKyAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKSB5eXNjYW5uZXI7CisKKyAgICB5eWV4dHJhLT5lcnJvcigqeXlsbG9jLCAiSWxsZWdhbCB1
c2Ugb2YgcmVzZXJ2ZWQgd29yZCIsIHl5dGV4dCwgIiIpOworICAgIHl5ZXh0cmEtPnJlY292ZXIo
KTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCB5eWVycm9yKFlZTFRZUEUqIGxsb2MsIFRQYXJz
ZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikgeworICAgIGNvbnRleHQtPmVy
cm9yKCpsbG9jLCByZWFzb24sIHl5Z2V0X3RleHQoY29udGV4dC0+c2Nhbm5lcikpOworICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKK30KKworaW50IGludF9jb25zdGFudCh5eXNjYW5fdCB5eXNjYW5u
ZXIpIHsKKyAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSB5eXNj
YW5uZXI7CisKKyAgICBpZiAoIWF0b2lfY2xhbXAoeXl0ZXh0LCAmKHl5bHZhbC0+bGV4LmkpKSkK
KyAgICAgICAgeXlleHRyYS0+d2FybmluZygqeXlsbG9jLCAiSW50ZWdlciBvdmVyZmxvdyIsIHl5
dGV4dCwgIiIpOworICAgIHJldHVybiBJTlRDT05TVEFOVDsKK30KKworaW50IGZsb2F0X2NvbnN0
YW50KHl5c2Nhbl90IHl5c2Nhbm5lcikgeworICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopIHl5c2Nhbm5lcjsKKworICAgIGlmICghYXRvZl9jbGFtcCh5eXRleHQs
ICYoeXlsdmFsLT5sZXguZikpKQorICAgICAgICB5eWV4dHJhLT53YXJuaW5nKCp5eWxsb2MsICJG
bG9hdCBvdmVyZmxvdyIsIHl5dGV4dCwgIiIpOworICAgIHJldHVybiBGTE9BVENPTlNUQU5UOwor
fQorCitpbnQgZ2xzbGFuZ19pbml0aWFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKKyAg
ICB5eXNjYW5fdCBzY2FubmVyID0gTlVMTDsKKyAgICBpZiAoeXlsZXhfaW5pdF9leHRyYShjb250
ZXh0LCZzY2FubmVyKSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBjb250ZXh0LT5zY2FubmVy
ID0gc2Nhbm5lcjsKKyAgICByZXR1cm4gMDsKK30KKworaW50IGdsc2xhbmdfZmluYWxpemUoVFBh
cnNlQ29udGV4dCogY29udGV4dCkgeworICAgIHl5c2Nhbl90IHNjYW5uZXIgPSBjb250ZXh0LT5z
Y2FubmVyOworICAgIGlmIChzY2FubmVyID09IE5VTEwpIHJldHVybiAwOworICAgIAorICAgIGNv
bnRleHQtPnNjYW5uZXIgPSBOVUxMOworICAgIHl5bGV4X2Rlc3Ryb3koc2Nhbm5lcik7CisKKyAg
ICByZXR1cm4gMDsKK30KKworaW50IGdsc2xhbmdfc2NhbihzaXplX3QgY291bnQsIGNvbnN0IGNo
YXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAgICAgICAgICAg
IFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKKyAgICB5eXJlc3RhcnQoTlVMTCxjb250ZXh0LT5z
Y2FubmVyKTsKKyAgICB5eXNldF9jb2x1bW4oMCxjb250ZXh0LT5zY2FubmVyKTsKKyAgICB5eXNl
dF9saW5lbm8oMSxjb250ZXh0LT5zY2FubmVyKTsKKworICAgIC8vIEluaXRpYWxpemUgcHJlcHJv
Y2Vzc29yLgorICAgIGlmICghY29udGV4dC0+cHJlcHJvY2Vzc29yLmluaXQoY291bnQsIHN0cmlu
ZywgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY29udGV4dC0+cHJlcHJvY2Vzc29y
LnNldE1heFRva2VuTGVuZ3RoKFNIX01BWF9UT0tFTl9MRU5HVEgpOworCisgICAgLy8gRGVmaW5l
IGV4dGVuc2lvbiBtYWNyb3MuCisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhh
dmlvciA9IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgZm9yIChURXh0ZW5zaW9u
QmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRCZWhhdmlvci5iZWdpbigpOworICAg
ICAgICAgaXRlciAhPSBleHRCZWhhdmlvci5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIGNvbnRl
eHQtPnByZXByb2Nlc3Nvci5wcmVkZWZpbmVNYWNybyhpdGVyLT5maXJzdC5jX3N0cigpLCAxKTsK
KyAgICB9CisgICAgaWYgKGNvbnRleHQtPmZyYWdtZW50UHJlY2lzaW9uSGlnaCkKKyAgICAgICAg
Y29udGV4dC0+cHJlcHJvY2Vzc29yLnByZWRlZmluZU1hY3JvKCJHTF9GUkFHTUVOVF9QUkVDSVNJ
T05fSElHSCIsIDEpOworCisgICAgcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdf
dGFiLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4wZmFmNjJhNDViMGFmMjk1ZTNkZDFmYTEyMGNmZTU2ZjI5YTY5
N2FmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuY3BwCkBAIC0wLDAgKzEsNDg4NCBAQAorLyogQSBC
aXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuNy4xLiAgKi8KKworLyogQXBwbGUgTm90
ZTogRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIEFwcGxlIGVsZWN0cyB0byBkaXN0cmlidXRl
IHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEJTRCBsaWNlbnNlLiAqLworCisvKiBC
aXNvbiBpbXBsZW1lbnRhdGlvbiBmb3IgWWFjYy1saWtlIHBhcnNlcnMgaW4gQworICAgCisgICAg
ICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDEzIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLgorICAgCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTog
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExp
Y2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAgCisg
ICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlz
IHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAq
LworCisvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3
b3JrIHRoYXQgY29udGFpbnMKKyAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tl
bGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCisgICB1bmRlciB0ZXJtcyBvZiB5b3VyIGNo
b2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGEKKyAgIHBhcnNlciBnZW5l
cmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9mCisg
ICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFsdGVybmF0aXZlbHksIGlmIHlvdSBtb2RpZnkgb3Ig
cmVkaXN0cmlidXRlCisgICB0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91IG1heSAoYXQg
eW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCisgICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2ls
bCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKKyAgIEJpc29uIG91dHB1dCBm
aWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICBMaWNl
bnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KKyAgIAorICAgVGhpcyBzcGVjaWFs
IGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgor
ICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLworCisvKiBDIExBTFIoMSkgcGFyc2VyIHNrZWxl
dG9uIHdyaXR0ZW4gYnkgUmljaGFyZCBTdGFsbG1hbiwgYnkKKyAgIHNpbXBsaWZ5aW5nIHRoZSBv
cmlnaW5hbCBzby1jYWxsZWQgInNlbWFudGljIiBwYXJzZXIuICAqLworCisvKiBBbGwgc3ltYm9s
cyBkZWZpbmVkIGJlbG93IHNob3VsZCBiZWdpbiB3aXRoIHl5IG9yIFlZLCB0byBhdm9pZAorICAg
aW5mcmluZ2luZyBvbiB1c2VyIG5hbWUgc3BhY2UuICBUaGlzIHNob3VsZCBiZSBkb25lIGV2ZW4g
Zm9yIGxvY2FsCisgICB2YXJpYWJsZXMsIGFzIHRoZXkgbWlnaHQgb3RoZXJ3aXNlIGJlIGV4cGFu
ZGVkIGJ5IHVzZXIgbWFjcm9zLgorICAgVGhlcmUgYXJlIHNvbWUgdW5hdm9pZGFibGUgZXhjZXB0
aW9ucyB3aXRoaW4gaW5jbHVkZSBmaWxlcyB0bworICAgZGVmaW5lIG5lY2Vzc2FyeSBsaWJyYXJ5
IHN5bWJvbHM7IHRoZXkgYXJlIG5vdGVkICJJTkZSSU5HRVMgT04KKyAgIFVTRVIgTkFNRSBTUEFD
RSIgYmVsb3cuICAqLworCisvKiBJZGVudGlmeSBCaXNvbiBvdXRwdXQuICAqLworI2RlZmluZSBZ
WUJJU09OIDEKKworLyogQmlzb24gdmVyc2lvbi4gICovCisjZGVmaW5lIFlZQklTT05fVkVSU0lP
TiAiMi43LjEiCisKKy8qIFNrZWxldG9uIG5hbWUuICAqLworI2RlZmluZSBZWVNLRUxFVE9OX05B
TUUgInlhY2MuYyIKKworLyogUHVyZSBwYXJzZXJzLiAgKi8KKyNkZWZpbmUgWVlQVVJFIDEKKwor
LyogUHVzaCBwYXJzZXJzLiAgKi8KKyNkZWZpbmUgWVlQVVNIIDAKKworLyogUHVsbCBwYXJzZXJz
LiAgKi8KKyNkZWZpbmUgWVlQVUxMIDEKKworCisKKworLyogQ29weSB0aGUgZmlyc3QgcGFydCBv
ZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCisKKworLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVGhp
cyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVE
SVQhCisKKy8vIElnbm9yZSBlcnJvcnMgaW4gYXV0by1nZW5lcmF0ZWQgY29kZS4KKyNpZiBkZWZp
bmVkKF9fR05VQ19fKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1m
dW5jdGlvbiIKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtdmFyaWFi
bGUiCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc3dpdGNoLWVudW0iCisjZWxp
ZiBkZWZpbmVkKF9NU0NfVkVSKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQwNjUpCisjcHJh
Z21hIHdhcm5pbmcoZGlzYWJsZTogNDE4OSkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NTA1
KQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEpCisjZW5kaWYKKworI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1BhcnNlQ29udGV4dC5oIgorI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgor
CisjZGVmaW5lIFlZRU5BQkxFX05MUyAwCisKKyNkZWZpbmUgWVlMRVhfUEFSQU0gY29udGV4dC0+
c2Nhbm5lcgorCisKKworIyBpZm5kZWYgWVlfTlVMTAorIyAgaWYgZGVmaW5lZCBfX2NwbHVzcGx1
cyAmJiAyMDExMDNMIDw9IF9fY3BsdXNwbHVzCisjICAgZGVmaW5lIFlZX05VTEwgbnVsbHB0cgor
IyAgZWxzZQorIyAgIGRlZmluZSBZWV9OVUxMIDAKKyMgIGVuZGlmCisjIGVuZGlmCisKKy8qIEVu
YWJsaW5nIHZlcmJvc2UgZXJyb3IgbWVzc2FnZXMuICAqLworI2lmZGVmIFlZRVJST1JfVkVSQk9T
RQorIyB1bmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAxCisj
ZWxzZQorIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDAKKyNlbmRpZgorCisvKiBJbiBhIGZ1dHVy
ZSByZWxlYXNlIG9mIEJpc29uLCB0aGlzIHNlY3Rpb24gd2lsbCBiZSByZXBsYWNlZAorICAgYnkg
I2luY2x1ZGUgImdsc2xhbmdfdGFiLmgiLiAgKi8KKyNpZm5kZWYgWVlfWVlfR0xTTEFOR19UQUJf
SF9JTkNMVURFRAorIyBkZWZpbmUgWVlfWVlfR0xTTEFOR19UQUJfSF9JTkNMVURFRAorLyogRW5h
YmxpbmcgdHJhY2VzLiAgKi8KKyNpZm5kZWYgWVlERUJVRworIyBkZWZpbmUgWVlERUJVRyAwCisj
ZW5kaWYKKyNpZiBZWURFQlVHCitleHRlcm4gaW50IHl5ZGVidWc7CisjZW5kaWYKKy8qICIlY29k
ZSByZXF1aXJlcyIgYmxvY2tzLiAgKi8KKworCisjZGVmaW5lIFlZTFRZUEUgVFNvdXJjZUxvYwor
I2RlZmluZSBZWUxUWVBFX0lTX0RFQ0xBUkVEIDEKKyNkZWZpbmUgU0hfTUFYX1RPS0VOX0xFTkdU
SCAyNTYgIC8vIFdlYkdMIHNwZWMuCisKKworCisKKy8qIFRva2Vucy4gICovCisjaWZuZGVmIFlZ
VE9LRU5UWVBFCisjIGRlZmluZSBZWVRPS0VOVFlQRQorICAgLyogUHV0IHRoZSB0b2tlbnMgaW50
byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdEQiBhbmQgb3RoZXIgZGVidWdnZXJzCisgICAg
ICBrbm93IGFib3V0IHRoZW0uICAqLworICAgZW51bSB5eXRva2VudHlwZSB7CisgICAgIElOVkFS
SUFOVCA9IDI1OCwKKyAgICAgSElHSF9QUkVDSVNJT04gPSAyNTksCisgICAgIE1FRElVTV9QUkVD
SVNJT04gPSAyNjAsCisgICAgIExPV19QUkVDSVNJT04gPSAyNjEsCisgICAgIFBSRUNJU0lPTiA9
IDI2MiwKKyAgICAgQVRUUklCVVRFID0gMjYzLAorICAgICBDT05TVF9RVUFMID0gMjY0LAorICAg
ICBCT09MX1RZUEUgPSAyNjUsCisgICAgIEZMT0FUX1RZUEUgPSAyNjYsCisgICAgIElOVF9UWVBF
ID0gMjY3LAorICAgICBCUkVBSyA9IDI2OCwKKyAgICAgQ09OVElOVUUgPSAyNjksCisgICAgIERP
ID0gMjcwLAorICAgICBFTFNFID0gMjcxLAorICAgICBGT1IgPSAyNzIsCisgICAgIElGID0gMjcz
LAorICAgICBESVNDQVJEID0gMjc0LAorICAgICBSRVRVUk4gPSAyNzUsCisgICAgIEJWRUMyID0g
Mjc2LAorICAgICBCVkVDMyA9IDI3NywKKyAgICAgQlZFQzQgPSAyNzgsCisgICAgIElWRUMyID0g
Mjc5LAorICAgICBJVkVDMyA9IDI4MCwKKyAgICAgSVZFQzQgPSAyODEsCisgICAgIFZFQzIgPSAy
ODIsCisgICAgIFZFQzMgPSAyODMsCisgICAgIFZFQzQgPSAyODQsCisgICAgIE1BVFJJWDIgPSAy
ODUsCisgICAgIE1BVFJJWDMgPSAyODYsCisgICAgIE1BVFJJWDQgPSAyODcsCisgICAgIElOX1FV
QUwgPSAyODgsCisgICAgIE9VVF9RVUFMID0gMjg5LAorICAgICBJTk9VVF9RVUFMID0gMjkwLAor
ICAgICBVTklGT1JNID0gMjkxLAorICAgICBWQVJZSU5HID0gMjkyLAorICAgICBTVFJVQ1QgPSAy
OTMsCisgICAgIFZPSURfVFlQRSA9IDI5NCwKKyAgICAgV0hJTEUgPSAyOTUsCisgICAgIFNBTVBM
RVIyRCA9IDI5NiwKKyAgICAgU0FNUExFUkNVQkUgPSAyOTcsCisgICAgIFNBTVBMRVJfRVhURVJO
QUxfT0VTID0gMjk4LAorICAgICBTQU1QTEVSMkRSRUNUID0gMjk5LAorICAgICBJREVOVElGSUVS
ID0gMzAwLAorICAgICBUWVBFX05BTUUgPSAzMDEsCisgICAgIEZMT0FUQ09OU1RBTlQgPSAzMDIs
CisgICAgIElOVENPTlNUQU5UID0gMzAzLAorICAgICBCT09MQ09OU1RBTlQgPSAzMDQsCisgICAg
IExFRlRfT1AgPSAzMDUsCisgICAgIFJJR0hUX09QID0gMzA2LAorICAgICBJTkNfT1AgPSAzMDcs
CisgICAgIERFQ19PUCA9IDMwOCwKKyAgICAgTEVfT1AgPSAzMDksCisgICAgIEdFX09QID0gMzEw
LAorICAgICBFUV9PUCA9IDMxMSwKKyAgICAgTkVfT1AgPSAzMTIsCisgICAgIEFORF9PUCA9IDMx
MywKKyAgICAgT1JfT1AgPSAzMTQsCisgICAgIFhPUl9PUCA9IDMxNSwKKyAgICAgTVVMX0FTU0lH
TiA9IDMxNiwKKyAgICAgRElWX0FTU0lHTiA9IDMxNywKKyAgICAgQUREX0FTU0lHTiA9IDMxOCwK
KyAgICAgTU9EX0FTU0lHTiA9IDMxOSwKKyAgICAgTEVGVF9BU1NJR04gPSAzMjAsCisgICAgIFJJ
R0hUX0FTU0lHTiA9IDMyMSwKKyAgICAgQU5EX0FTU0lHTiA9IDMyMiwKKyAgICAgWE9SX0FTU0lH
TiA9IDMyMywKKyAgICAgT1JfQVNTSUdOID0gMzI0LAorICAgICBTVUJfQVNTSUdOID0gMzI1LAor
ICAgICBMRUZUX1BBUkVOID0gMzI2LAorICAgICBSSUdIVF9QQVJFTiA9IDMyNywKKyAgICAgTEVG
VF9CUkFDS0VUID0gMzI4LAorICAgICBSSUdIVF9CUkFDS0VUID0gMzI5LAorICAgICBMRUZUX0JS
QUNFID0gMzMwLAorICAgICBSSUdIVF9CUkFDRSA9IDMzMSwKKyAgICAgRE9UID0gMzMyLAorICAg
ICBDT01NQSA9IDMzMywKKyAgICAgQ09MT04gPSAzMzQsCisgICAgIEVRVUFMID0gMzM1LAorICAg
ICBTRU1JQ09MT04gPSAzMzYsCisgICAgIEJBTkcgPSAzMzcsCisgICAgIERBU0ggPSAzMzgsCisg
ICAgIFRJTERFID0gMzM5LAorICAgICBQTFVTID0gMzQwLAorICAgICBTVEFSID0gMzQxLAorICAg
ICBTTEFTSCA9IDM0MiwKKyAgICAgUEVSQ0VOVCA9IDM0MywKKyAgICAgTEVGVF9BTkdMRSA9IDM0
NCwKKyAgICAgUklHSFRfQU5HTEUgPSAzNDUsCisgICAgIFZFUlRJQ0FMX0JBUiA9IDM0NiwKKyAg
ICAgQ0FSRVQgPSAzNDcsCisgICAgIEFNUEVSU0FORCA9IDM0OCwKKyAgICAgUVVFU1RJT04gPSAz
NDkKKyAgIH07CisjZW5kaWYKKworCisjaWYgISBkZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZpbmVk
IFlZU1RZUEVfSVNfREVDTEFSRUQKK3R5cGVkZWYgdW5pb24gWVlTVFlQRQoreworCisKKyAgICBz
dHJ1Y3QgeworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBUU3RyaW5nICpzdHJpbmc7Cisg
ICAgICAgICAgICBmbG9hdCBmOworICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICBib29s
IGI7CisgICAgICAgIH07CisgICAgICAgIFRTeW1ib2wqIHN5bWJvbDsKKyAgICB9IGxleDsKKyAg
ICBzdHJ1Y3QgeworICAgICAgICBUT3BlcmF0b3Igb3A7CisgICAgICAgIHVuaW9uIHsKKyAgICAg
ICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOworICAgICAgICAgICAgVEludGVybU5vZGVQ
YWlyIG5vZGVQYWlyOworICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbnRlcm1UeXBlZE5vZGU7
CisgICAgICAgICAgICBUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGU7CisgICAgICAg
IH07CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFRQdWJsaWNUeXBlIHR5cGU7CisgICAg
ICAgICAgICBUUHJlY2lzaW9uIHByZWNpc2lvbjsKKyAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVh
bGlmaWVyOworICAgICAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlvbjsKKyAgICAgICAgICAgIFRQ
YXJhbWV0ZXIgcGFyYW07CisgICAgICAgICAgICBURmllbGQqIGZpZWxkOworICAgICAgICAgICAg
VEZpZWxkTGlzdCogZmllbGRMaXN0OworICAgICAgICB9OworICAgIH0gaW50ZXJtOworCisKKwor
fSBZWVNUWVBFOworIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKKyMgZGVmaW5lIHl5c3R5
cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KKyMgZGVmaW5l
IFlZU1RZUEVfSVNfREVDTEFSRUQgMQorI2VuZGlmCisKKyNpZiAhIGRlZmluZWQgWVlMVFlQRSAm
JiAhIGRlZmluZWQgWVlMVFlQRV9JU19ERUNMQVJFRAordHlwZWRlZiBzdHJ1Y3QgWVlMVFlQRQor
eworICBpbnQgZmlyc3RfbGluZTsKKyAgaW50IGZpcnN0X2NvbHVtbjsKKyAgaW50IGxhc3RfbGlu
ZTsKKyAgaW50IGxhc3RfY29sdW1uOworfSBZWUxUWVBFOworIyBkZWZpbmUgeXlsdHlwZSBZWUxU
WVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLworIyBkZWZpbmUgWVlMVFlQ
RV9JU19ERUNMQVJFRCAxCisjIGRlZmluZSBZWUxUWVBFX0lTX1RSSVZJQUwgMQorI2VuZGlmCisK
KworI2lmZGVmIFlZUEFSU0VfUEFSQU0KKyNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQg
X19jcGx1c3BsdXMKK2ludCB5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKTsKKyNlbHNlCitp
bnQgeXlwYXJzZSAoKTsKKyNlbmRpZgorI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovCisjaWYg
ZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCitpbnQgeXlwYXJzZSAoVFBh
cnNlQ29udGV4dCogY29udGV4dCk7CisjZWxzZQoraW50IHl5cGFyc2UgKCk7CisjZW5kaWYKKyNl
bmRpZiAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KKworI2VuZGlmIC8qICFZWV9ZWV9HTFNMQU5HX1RB
Ql9IX0lOQ0xVREVEICAqLworCisvKiBDb3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xh
cmF0aW9ucy4gICovCisKKworZXh0ZXJuIGludCB5eWxleChZWVNUWVBFKiB5eWx2YWwsIFlZTFRZ
UEUqIHl5bGxvYywgdm9pZCogeXlzY2FubmVyKTsKK2V4dGVybiB2b2lkIHl5ZXJyb3IoWVlMVFlQ
RSogeXlsbG9jLCBUUGFyc2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pOwor
CisjZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJocywgTikgICAgICAgICAgICAgICAg
ICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgIGlmIChZWUlEKE4pKSB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChDdXJyZW50KS5maXJzdF9maWxlID0gWVlS
SFNMT0MoUmhzLCAxKS5maXJzdF9maWxlOyAgXAorICAgICAgICAoQ3VycmVudCkuZmlyc3RfbGlu
ZSA9IFlZUkhTTE9DKFJocywgMSkuZmlyc3RfbGluZTsgIFwKKyAgICAgICAgKEN1cnJlbnQpLmxh
c3RfZmlsZSA9IFlZUkhTTE9DKFJocywgTikubGFzdF9maWxlOyAgICBcCisgICAgICAgIChDdXJy
ZW50KS5sYXN0X2xpbmUgPSBZWVJIU0xPQyhSaHMsIE4pLmxhc3RfbGluZTsgICAgXAorICAgICAg
fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIChDdXJyZW50KS5maXJzdF9maWxlID0gWVlSSFNMT0MoUmhzLCAwKS5s
YXN0X2ZpbGU7ICAgXAorICAgICAgICAoQ3VycmVudCkuZmlyc3RfbGluZSA9IFlZUkhTTE9DKFJo
cywgMCkubGFzdF9saW5lOyAgIFwKKyAgICAgICAgKEN1cnJlbnQpLmxhc3RfZmlsZSA9IFlZUkhT
TE9DKFJocywgMCkubGFzdF9maWxlOyAgICBcCisgICAgICAgIChDdXJyZW50KS5sYXN0X2xpbmUg
PSBZWVJIU0xPQyhSaHMsIDApLmxhc3RfbGluZTsgICAgXAorICAgICAgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSAoMCkK
KworI2RlZmluZSBWRVJURVhfT05MWShTLCBMKSB7ICBcCisgICAgaWYgKGNvbnRleHQtPnNoYWRl
clR5cGUgIT0gU0hfVkVSVEVYX1NIQURFUikgeyAgXAorICAgICAgICBjb250ZXh0LT5lcnJvcihM
LCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXggc2hhZGVycyBvbmx5ICIsIFMpOyAgXAorICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7ICBcCisgICAgfSAgXAorfQorCisjZGVmaW5lIEZSQUdfT05MWShT
LCBMKSB7ICBcCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgIT0gU0hfRlJBR01FTlRfU0hB
REVSKSB7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIGZyYWdt
ZW50IHNoYWRlcnMgb25seSAiLCBTKTsgIFwKKyAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAg
XAorICAgIH0gIFwKK30KKworCisKKyNpZmRlZiBzaG9ydAorIyB1bmRlZiBzaG9ydAorI2VuZGlm
CisKKyNpZmRlZiBZWVRZUEVfVUlOVDgKK3R5cGVkZWYgWVlUWVBFX1VJTlQ4IHl5dHlwZV91aW50
ODsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgeXl0eXBlX3VpbnQ4OworI2VuZGlmCisK
KyNpZmRlZiBZWVRZUEVfSU5UOAordHlwZWRlZiBZWVRZUEVfSU5UOCB5eXR5cGVfaW50ODsKKyNl
bGlmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8
IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3R5cGVkZWYgc2lnbmVk
IGNoYXIgeXl0eXBlX2ludDg7CisjZWxzZQordHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDg7
CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9VSU5UMTYKK3R5cGVkZWYgWVlUWVBFX1VJTlQxNiB5
eXR5cGVfdWludDE2OworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHl5dHlwZV91
aW50MTY7CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9JTlQxNgordHlwZWRlZiBZWVRZUEVfSU5U
MTYgeXl0eXBlX2ludDE2OworI2Vsc2UKK3R5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQxNjsK
KyNlbmRpZgorCisjaWZuZGVmIFlZU0laRV9UCisjIGlmZGVmIF9fU0laRV9UWVBFX18KKyMgIGRl
ZmluZSBZWVNJWkVfVCBfX1NJWkVfVFlQRV9fCisjIGVsaWYgZGVmaW5lZCBzaXplX3QKKyMgIGRl
ZmluZSBZWVNJWkVfVCBzaXplX3QKKyMgZWxpZiAhIGRlZmluZWQgWVlTSVpFX1QgJiYgKGRlZmlu
ZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBf
X2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorIyAgaW5jbHVkZSA8c3RkZGVmLmg+IC8q
IElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgIGRlZmluZSBZWVNJWkVfVCBzaXpl
X3QKKyMgZWxzZQorIyAgZGVmaW5lIFlZU0laRV9UIHVuc2lnbmVkIGludAorIyBlbmRpZgorI2Vu
ZGlmCisKKyNkZWZpbmUgWVlTSVpFX01BWElNVU0gKChZWVNJWkVfVCkgLTEpCisKKyNpZm5kZWYg
WVlfCisjIGlmIGRlZmluZWQgWVlFTkFCTEVfTkxTICYmIFlZRU5BQkxFX05MUworIyAgaWYgRU5B
QkxFX05MUworIyAgIGluY2x1ZGUgPGxpYmludGwuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFN
RSBTUEFDRSAqLworIyAgIGRlZmluZSBZWV8oTXNnaWQpIGRnZXR0ZXh0ICgiYmlzb24tcnVudGlt
ZSIsIE1zZ2lkKQorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZuZGVmIFlZXworIyAgZGVmaW5lIFlZ
XyhNc2dpZCkgTXNnaWQKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIF9fYXR0cmlidXRlX18K
Ky8qIFRoaXMgZmVhdHVyZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDIuNSBhbmQgbGF0
ZXIuICAqLworIyBpZiAoISBkZWZpbmVkIF9fR05VQ19fIHx8IF9fR05VQ19fIDwgMiBcCisgICAg
ICB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDUpKQorIyAgZGVmaW5lIF9f
YXR0cmlidXRlX18oU3BlYykgLyogZW1wdHkgKi8KKyMgZW5kaWYKKyNlbmRpZgorCisvKiBTdXBw
cmVzcyB1bnVzZWQtdmFyaWFibGUgd2FybmluZ3MgYnkgInVzaW5nIiBFLiAgKi8KKyNpZiAhIGRl
ZmluZWQgbGludCB8fCBkZWZpbmVkIF9fR05VQ19fCisjIGRlZmluZSBZWVVTRShFKSAoKHZvaWQp
IChFKSkKKyNlbHNlCisjIGRlZmluZSBZWVVTRShFKSAvKiBlbXB0eSAqLworI2VuZGlmCisKKwor
LyogSWRlbnRpdHkgZnVuY3Rpb24sIHVzZWQgdG8gc3VwcHJlc3Mgd2FybmluZ3MgYWJvdXQgY29u
c3RhbnQgY29uZGl0aW9ucy4gICovCisjaWZuZGVmIGxpbnQKKyMgZGVmaW5lIFlZSUQoTikgKE4p
CisjZWxzZQorI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBc
CisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRp
YyBpbnQKK1lZSUQgKGludCB5eWkpCisjZWxzZQorc3RhdGljIGludAorWVlJRCAoeXlpKQorICAg
IGludCB5eWk7CisjZW5kaWYKK3sKKyAgcmV0dXJuIHl5aTsKK30KKyNlbmRpZgorCisjaWYgISBk
ZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFCisKKy8qIFRoZSBwYXJzZXIgaW52
b2tlcyBhbGxvY2Egb3IgbWFsbG9jOyBkZWZpbmUgdGhlIG5lY2Vzc2FyeSBzeW1ib2xzLiAgKi8K
KworIyBpZmRlZiBZWVNUQUNLX1VTRV9BTExPQ0EKKyMgIGlmIFlZU1RBQ0tfVVNFX0FMTE9DQQor
IyAgIGlmZGVmIF9fR05VQ19fCisjICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYnVpbHRpbl9h
bGxvY2EKKyMgICBlbGlmIGRlZmluZWQgX19CVUlMVElOX1ZBX0FSR19JTkNSCisjICAgIGluY2x1
ZGUgPGFsbG9jYS5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZWxp
ZiBkZWZpbmVkIF9BSVgKKyMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19hbGxvY2EKKyMgICBl
bGlmIGRlZmluZWQgX01TQ19WRVIKKyMgICAgaW5jbHVkZSA8bWFsbG9jLmg+IC8qIElORlJJTkdF
UyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCisjICAg
ZWxzZQorIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBhbGxvY2EKKyMgICAgaWYgISBkZWZpbmVk
IF9BTExPQ0FfSCAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTICYmIChkZWZpbmVkIF9fU1REQ19f
IHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMg
fHwgZGVmaW5lZCBfTVNDX1ZFUikKKyMgICAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5H
RVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisgICAgICAvKiBVc2UgRVhJVF9TVUNDRVNTIGFzIGEg
d2l0bmVzcyBmb3Igc3RkbGliLmguICAqLworIyAgICAgaWZuZGVmIEVYSVRfU1VDQ0VTUworIyAg
ICAgIGRlZmluZSBFWElUX1NVQ0NFU1MgMAorIyAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgICBl
bmRpZgorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZmRlZiBZWVNUQUNLX0FMTE9DCisgICAvKiBQ
YWNpZnkgR0NDJ3MgYGVtcHR5IGlmLWJvZHknIHdhcm5pbmcuICAqLworIyAgZGVmaW5lIFlZU1RB
Q0tfRlJFRShQdHIpIGRvIHsgLyogZW1wdHkgKi87IH0gd2hpbGUgKFlZSUQgKDApKQorIyAgaWZu
ZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQorICAgIC8qIFRoZSBPUyBtaWdodCBndWFyYW50ZWUg
b25seSBvbmUgZ3VhcmQgcGFnZSBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjaywKKyAgICAgICBh
bmQgYSBwYWdlIHNpemUgY2FuIGJlIGFzIHNtYWxsIGFzIDQwOTYgYnl0ZXMuICBTbyB3ZSBjYW5u
b3Qgc2FmZWx5CisgICAgICAgaW52b2tlIGFsbG9jYSAoTikgaWYgTiBleGNlZWRzIDQwOTYuICBV
c2UgYSBzbGlnaHRseSBzbWFsbGVyIG51bWJlcgorICAgICAgIHRvIGFsbG93IGZvciBhIGZldyBj
b21waWxlci1hbGxvY2F0ZWQgdGVtcG9yYXJ5IHN0YWNrIHNsb3RzLiAgKi8KKyMgICBkZWZpbmUg
WVlTVEFDS19BTExPQ19NQVhJTVVNIDQwMzIgLyogcmVhc29uYWJsZSBjaXJjYSAyMDA2ICovCisj
ICBlbmRpZgorIyBlbHNlCisjICBkZWZpbmUgWVlTVEFDS19BTExPQyBZWU1BTExPQworIyAgZGVm
aW5lIFlZU1RBQ0tfRlJFRSBZWUZSRUUKKyMgIGlmbmRlZiBZWVNUQUNLX0FMTE9DX01BWElNVU0K
KyMgICBkZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVNIFlZU0laRV9NQVhJTVVNCisjICBlbmRp
ZgorIyAgaWYgKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgISBkZWZpbmVkIEVYSVRfU1VDQ0VTUyBc
CisgICAgICAgJiYgISAoKGRlZmluZWQgWVlNQUxMT0MgfHwgZGVmaW5lZCBtYWxsb2MpIFwKKwkg
ICAgICYmIChkZWZpbmVkIFlZRlJFRSB8fCBkZWZpbmVkIGZyZWUpKSkKKyMgICBpbmNsdWRlIDxz
dGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGlmbmRlZiBF
WElUX1NVQ0NFU1MKKyMgICAgZGVmaW5lIEVYSVRfU1VDQ0VTUyAwCisjICAgZW5kaWYKKyMgIGVu
ZGlmCisjICBpZm5kZWYgWVlNQUxMT0MKKyMgICBkZWZpbmUgWVlNQUxMT0MgbWFsbG9jCisjICAg
aWYgISBkZWZpbmVkIG1hbGxvYyAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTICYmIChkZWZpbmVk
IF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19j
cGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3ZvaWQgKm1hbGxvYyAoWVlTSVpFX1QpOyAv
KiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZW5kaWYKKyMgIGVuZGlmCisj
ICBpZm5kZWYgWVlGUkVFCisjICAgZGVmaW5lIFlZRlJFRSBmcmVlCisjICAgaWYgISBkZWZpbmVk
IGZyZWUgJiYgISBkZWZpbmVkIEVYSVRfU1VDQ0VTUyAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBk
ZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRl
ZmluZWQgX01TQ19WRVIpCit2b2lkIGZyZWUgKHZvaWQgKik7IC8qIElORlJJTkdFUyBPTiBVU0VS
IE5BTUUgU1BBQ0UgKi8KKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZiAvKiAh
IGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UgKi8KKworCisjaWYgKCEgZGVm
aW5lZCB5eW92ZXJmbG93IFwKKyAgICAgJiYgKCEgZGVmaW5lZCBfX2NwbHVzcGx1cyBcCisJIHx8
IChkZWZpbmVkIFlZTFRZUEVfSVNfVFJJVklBTCAmJiBZWUxUWVBFX0lTX1RSSVZJQUwgXAorCSAg
ICAgJiYgZGVmaW5lZCBZWVNUWVBFX0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9JU19UUklWSUFMKSkp
CisKKy8qIEEgdHlwZSB0aGF0IGlzIHByb3Blcmx5IGFsaWduZWQgZm9yIGFueSBzdGFjayBtZW1i
ZXIuICAqLwordW5pb24geXlhbGxvYworeworICB5eXR5cGVfaW50MTYgeXlzc19hbGxvYzsKKyAg
WVlTVFlQRSB5eXZzX2FsbG9jOworICBZWUxUWVBFIHl5bHNfYWxsb2M7Cit9OworCisvKiBUaGUg
c2l6ZSBvZiB0aGUgbWF4aW11bSBnYXAgYmV0d2VlbiBvbmUgYWxpZ25lZCBzdGFjayBhbmQgdGhl
IG5leHQuICAqLworIyBkZWZpbmUgWVlTVEFDS19HQVBfTUFYSU1VTSAoc2l6ZW9mICh1bmlvbiB5
eWFsbG9jKSAtIDEpCisKKy8qIFRoZSBzaXplIG9mIGFuIGFycmF5IGxhcmdlIHRvIGVub3VnaCB0
byBob2xkIGFsbCBzdGFja3MsIGVhY2ggd2l0aAorICAgTiBlbGVtZW50cy4gICovCisjIGRlZmlu
ZSBZWVNUQUNLX0JZVEVTKE4pIFwKKyAgICAgKChOKSAqIChzaXplb2YgKHl5dHlwZV9pbnQxNikg
KyBzaXplb2YgKFlZU1RZUEUpICsgc2l6ZW9mIChZWUxUWVBFKSkgXAorICAgICAgKyAyICogWVlT
VEFDS19HQVBfTUFYSU1VTSkKKworIyBkZWZpbmUgWVlDT1BZX05FRURFRCAxCisKKy8qIFJlbG9j
YXRlIFNUQUNLIGZyb20gaXRzIG9sZCBsb2NhdGlvbiB0byB0aGUgbmV3IG9uZS4gIFRoZQorICAg
bG9jYWwgdmFyaWFibGVzIFlZU0laRSBhbmQgWVlTVEFDS1NJWkUgZ2l2ZSB0aGUgb2xkIGFuZCBu
ZXcgbnVtYmVyIG9mCisgICBlbGVtZW50cyBpbiB0aGUgc3RhY2ssIGFuZCBZWVBUUiBnaXZlcyB0
aGUgbmV3IGxvY2F0aW9uIG9mIHRoZQorICAgc3RhY2suICBBZHZhbmNlIFlZUFRSIHRvIGEgcHJv
cGVybHkgYWxpZ25lZCBsb2NhdGlvbiBmb3IgdGhlIG5leHQKKyAgIHN0YWNrLiAgKi8KKyMgZGVm
aW5lIFlZU1RBQ0tfUkVMT0NBVEUoU3RhY2tfYWxsb2MsIFN0YWNrKQkJCQlcCisgICAgZG8JCQkJ
CQkJCQlcCisgICAgICB7CQkJCQkJCQkJXAorCVlZU0laRV9UIHl5bmV3Ynl0ZXM7CQkJCQkJXAor
CVlZQ09QWSAoJnl5cHRyLT5TdGFja19hbGxvYywgU3RhY2ssIHl5c2l6ZSk7CQkJXAorCVN0YWNr
ID0gJnl5cHRyLT5TdGFja19hbGxvYzsJCQkJCVwKKwl5eW5ld2J5dGVzID0geXlzdGFja3NpemUg
KiBzaXplb2YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJTVVNOyBcCisJeXlwdHIgKz0geXlu
ZXdieXRlcyAvIHNpemVvZiAoKnl5cHRyKTsJCQkJXAorICAgICAgfQkJCQkJCQkJCVwKKyAgICB3
aGlsZSAoWVlJRCAoMCkpCisKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBZWUNPUFlfTkVFREVEICYm
IFlZQ09QWV9ORUVERUQKKy8qIENvcHkgQ09VTlQgb2JqZWN0cyBmcm9tIFNSQyB0byBEU1QuICBU
aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkbworICAgbm90IG92ZXJsYXAuICAqLworIyBpZm5k
ZWYgWVlDT1BZCisjICBpZiBkZWZpbmVkIF9fR05VQ19fICYmIDEgPCBfX0dOVUNfXworIyAgIGRl
ZmluZSBZWUNPUFkoRHN0LCBTcmMsIENvdW50KSBcCisgICAgICBfX2J1aWx0aW5fbWVtY3B5IChE
c3QsIFNyYywgKENvdW50KSAqIHNpemVvZiAoKihTcmMpKSkKKyMgIGVsc2UKKyMgICBkZWZpbmUg
WVlDT1BZKERzdCwgU3JjLCBDb3VudCkgICAgICAgICAgICAgIFwKKyAgICAgIGRvICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBZWVNJWkVfVCB5eWk7ICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBmb3IgKHl5aSA9IDA7IHl5aSA8IChDb3Vu
dCk7IHl5aSsrKSAgIFwKKyAgICAgICAgICAgIChEc3QpW3l5aV0gPSAoU3JjKVt5eWldOyAgICAg
ICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgIHdoaWxlIChZWUlEICgwKSkKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYgLyog
IVlZQ09QWV9ORUVERUQgKi8KKworLyogWVlGSU5BTCAtLSBTdGF0ZSBudW1iZXIgb2YgdGhlIHRl
cm1pbmF0aW9uIHN0YXRlLiAgKi8KKyNkZWZpbmUgWVlGSU5BTCAgNzQKKy8qIFlZTEFTVCAtLSBM
YXN0IGluZGV4IGluIFlZVEFCTEUuICAqLworI2RlZmluZSBZWUxBU1QgICAxNDkwCisKKy8qIFlZ
TlRPS0VOUyAtLSBOdW1iZXIgb2YgdGVybWluYWxzLiAgKi8KKyNkZWZpbmUgWVlOVE9LRU5TICA5
NQorLyogWVlOTlRTIC0tIE51bWJlciBvZiBub250ZXJtaW5hbHMuICAqLworI2RlZmluZSBZWU5O
VFMgIDg0CisvKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2YgcnVsZXMuICAqLworI2RlZmluZSBZWU5S
VUxFUyAgMjAyCisvKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2Ygc3RhdGVzLiAgKi8KKyNkZWZpbmUg
WVlOU1RBVEVTICAzMDcKKworLyogWVlUUkFOU0xBVEUoWVlMRVgpIC0tIEJpc29uIHN5bWJvbCBu
dW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCisjZGVmaW5lIFlZVU5ERUZUT0sgIDIK
KyNkZWZpbmUgWVlNQVhVVE9LICAgMzQ5CisKKyNkZWZpbmUgWVlUUkFOU0xBVEUoWVlYKQkJCQkJ
CVwKKyAgKCh1bnNpZ25lZCBpbnQpIChZWVgpIDw9IFlZTUFYVVRPSyA/IHl5dHJhbnNsYXRlW1lZ
WF0gOiBZWVVOREVGVE9LKQorCisvKiBZWVRSQU5TTEFURVtZWUxFWF0gLS0gQmlzb24gc3ltYm9s
IG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVf
dWludDggeXl0cmFuc2xhdGVbXSA9Cit7CisgICAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
CisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwK
KyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAg
IDMsICAgICA0LAorICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwg
ICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsCisgICAgICAxNSwgICAgMTYsICAgIDE3LCAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwKKyAgICAgIDI1LCAg
ICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAg
IDM0LAorICAgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEs
ICAgIDQyLCAgICA0MywgICAgNDQsCisgICAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAg
NDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwKKyAgICAgIDU1LCAgICA1Niwg
ICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDY0LAor
ICAgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcy
LCAgICA3MywgICAgNzQsCisgICAgICA3NSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAg
IDgwLCAgICA4MSwgICAgODIsICAgIDgzLCAgICA4NCwKKyAgICAgIDg1LCAgICA4NiwgICAgODcs
ICAgIDg4LCAgICA4OSwgICAgOTAsICAgIDkxLCAgICA5MiwgICAgOTMsICAgIDk0Cit9OworCisj
aWYgWVlERUJVRworLyogWVlQUkhTW1lZTl0gLS0gSW5kZXggb2YgdGhlIGZpcnN0IFJIUyBzeW1i
b2wgb2YgcnVsZSBudW1iZXIgWVlOIGluCisgICBZWVJIUy4gICovCitzdGF0aWMgY29uc3QgeXl0
eXBlX3VpbnQxNiB5eXByaHNbXSA9Cit7CisgICAgICAgMCwgICAgIDAsICAgICAzLCAgICAgNSwg
ICAgIDcsICAgICA5LCAgICAxMSwgICAgMTMsICAgIDE1LCAgICAxNywKKyAgICAgIDIxLCAgICAy
MywgICAgMjgsICAgIDMwLCAgICAzNCwgICAgMzcsICAgIDQwLCAgICA0MiwgICAgNDQsICAgIDQ2
LAorICAgICAgNTAsICAgIDUzLCAgICA1NiwgICAgNTksICAgIDYxLCAgICA2NCwgICAgNjgsICAg
IDcxLCAgICA3MywgICAgNzUsCisgICAgICA3NywgICAgODAsICAgIDgzLCAgICA4NiwgICAgODgs
ICAgIDkwLCAgICA5MiwgICAgOTQsICAgIDk4LCAgIDEwMiwKKyAgICAgMTA0LCAgIDEwOCwgICAx
MTIsICAgMTE0LCAgIDExNiwgICAxMjAsICAgMTI0LCAgIDEyOCwgICAxMzIsICAgMTM0LAorICAg
ICAxMzgsICAgMTQyLCAgIDE0NCwgICAxNDYsICAgMTQ4LCAgIDE1MCwgICAxNTQsICAgMTU2LCAg
IDE2MCwgICAxNjIsCisgICAgIDE2NiwgICAxNjgsICAgMTc0LCAgIDE3NiwgICAxODAsICAgMTgy
LCAgIDE4NCwgICAxODYsICAgMTg4LCAgIDE5MCwKKyAgICAgMTkyLCAgIDE5NiwgICAxOTgsICAg
MjAxLCAgIDIwNCwgICAyMDksICAgMjEyLCAgIDIxNCwgICAyMTYsICAgMjE5LAorICAgICAyMjMs
ICAgMjI3LCAgIDIzMCwgICAyMzYsICAgMjQwLCAgIDI0MywgICAyNDcsICAgMjUwLCAgIDI1MSwg
ICAyNTMsCisgICAgIDI1NSwgICAyNTcsICAgMjU5LCAgIDI2MSwgICAyNjUsICAgMjcxLCAgIDI3
OCwgICAyODQsICAgMjg2LCAgIDI4OSwKKyAgICAgMjk0LCAgIDMwMCwgICAzMDUsICAgMzA4LCAg
IDMxMCwgICAzMTMsICAgMzE1LCAgIDMxNywgICAzMTksICAgMzIyLAorICAgICAzMjQsICAgMzI2
LCAgIDMyOSwgICAzMzEsICAgMzMzLCAgIDMzNSwgICAzMzcsICAgMzQyLCAgIDM0NCwgICAzNDYs
CisgICAgIDM0OCwgICAzNTAsICAgMzUyLCAgIDM1NCwgICAzNTYsICAgMzU4LCAgIDM2MCwgICAz
NjIsICAgMzY0LCAgIDM2NiwKKyAgICAgMzY4LCAgIDM3MCwgICAzNzIsICAgMzc0LCAgIDM3Niwg
ICAzNzgsICAgMzgwLCAgIDM4MiwgICAzODQsICAgMzg2LAorICAgICAzODcsICAgMzk0LCAgIDM5
NSwgICA0MDEsICAgNDAzLCAgIDQwNiwgICA0MTAsICAgNDEyLCAgIDQxNiwgICA0MTgsCisgICAg
IDQyMywgICA0MjUsICAgNDI3LCAgIDQyOSwgICA0MzEsICAgNDMzLCAgIDQzNSwgICA0MzcsICAg
NDM5LCAgIDQ0MSwKKyAgICAgNDQ0LCAgIDQ0NSwgICA0NDYsICAgNDUyLCAgIDQ1NCwgICA0NTYs
ICAgNDU3LCAgIDQ2MCwgICA0NjEsICAgNDY0LAorICAgICA0NjcsICAgNDcxLCAgIDQ3MywgICA0
NzYsICAgNDc4LCAgIDQ4MSwgICA0ODcsICAgNDkxLCAgIDQ5MywgICA0OTUsCisgICAgIDUwMCwg
ICA1MDEsICAgNTA4LCAgIDUwOSwgICA1MTgsICAgNTE5LCAgIDUyNywgICA1MjksICAgNTMxLCAg
IDUzMywKKyAgICAgNTM0LCAgIDUzNywgICA1NDEsICAgNTQ0LCAgIDU0NywgICA1NTAsICAgNTU0
LCAgIDU1NywgICA1NTksICAgNTYyLAorICAgICA1NjQsICAgNTY2LCAgIDU2NworfTsKKworLyog
WVlSSFMgLS0gQSBgLTEnLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBydWxlcycgUkhTLiAgKi8KK3N0
YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlyaHNbXSA9Cit7CisgICAgIDE3NSwgICAgIDAsICAg
IC0xLCAgICA0NSwgICAgLTEsICAgIDQ2LCAgICAtMSwgICAgNDUsICAgIC0xLCAgICA5NywKKyAg
ICAgIC0xLCAgICA0OCwgICAgLTEsICAgIDQ3LCAgICAtMSwgICAgNDksICAgIC0xLCAgICA3MSwg
ICAxMjQsICAgIDcyLAorICAgICAgLTEsICAgIDk4LCAgICAtMSwgICAgOTksICAgIDczLCAgIDEw
MCwgICAgNzQsICAgIC0xLCAgIDEwMSwgICAgLTEsCisgICAgICA5OSwgICAgNzcsICAgIDk2LCAg
ICAtMSwgICAgOTksICAgIDUyLCAgICAtMSwgICAgOTksICAgIDUzLCAgICAtMSwKKyAgICAgMTI0
LCAgICAtMSwgICAxMDIsICAgIC0xLCAgIDEwMywgICAgLTEsICAgIDk5LCAgICA3NywgICAxMDMs
ICAgIC0xLAorICAgICAxMDUsICAgIDcyLCAgICAtMSwgICAxMDQsICAgIDcyLCAgICAtMSwgICAx
MDYsICAgIDM5LCAgICAtMSwgICAxMDYsCisgICAgICAtMSwgICAxMDYsICAgMTIyLCAgICAtMSwg
ICAxMDUsICAgIDc4LCAgIDEyMiwgICAgLTEsICAgMTA3LCAgICA3MSwKKyAgICAgIC0xLCAgIDE0
MiwgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgOTksICAgIC0xLCAgICA1MiwgICAxMDgsICAgIC0x
LAorICAgICAgNTMsICAgMTA4LCAgICAtMSwgICAxMDksICAgMTA4LCAgICAtMSwgICAgODUsICAg
IC0xLCAgICA4MywgICAgLTEsCisgICAgICA4MiwgICAgLTEsICAgMTA4LCAgICAtMSwgICAxMTAs
ICAgIDg2LCAgIDEwOCwgICAgLTEsICAgMTEwLCAgICA4NywKKyAgICAgMTA4LCAgICAtMSwgICAx
MTAsICAgIC0xLCAgIDExMSwgICAgODUsICAgMTEwLCAgICAtMSwgICAxMTEsICAgIDgzLAorICAg
ICAxMTAsICAgIC0xLCAgIDExMSwgICAgLTEsICAgMTEyLCAgICAtMSwgICAxMTMsICAgIDg5LCAg
IDExMiwgICAgLTEsCisgICAgIDExMywgICAgOTAsICAgMTEyLCAgICAtMSwgICAxMTMsICAgIDU0
LCAgIDExMiwgICAgLTEsICAgMTEzLCAgICA1NSwKKyAgICAgMTEyLCAgICAtMSwgICAxMTMsICAg
IC0xLCAgIDExNCwgICAgNTYsICAgMTEzLCAgICAtMSwgICAxMTQsICAgIDU3LAorICAgICAxMTMs
ICAgIC0xLCAgIDExNCwgICAgLTEsICAgMTE1LCAgICAtMSwgICAxMTYsICAgIC0xLCAgIDExNywg
ICAgLTEsCisgICAgIDExOCwgICAgNTgsICAgMTE3LCAgICAtMSwgICAxMTgsICAgIC0xLCAgIDEx
OSwgICAgNjAsICAgMTE4LCAgICAtMSwKKyAgICAgMTE5LCAgICAtMSwgICAxMjAsICAgIDU5LCAg
IDExOSwgICAgLTEsICAgMTIwLCAgICAtMSwgICAxMjAsICAgIDk0LAorICAgICAxMjQsICAgIDc5
LCAgIDEyMiwgICAgLTEsICAgMTIxLCAgICAtMSwgICAxMDgsICAgMTIzLCAgIDEyMiwgICAgLTEs
CisgICAgICA4MCwgICAgLTEsICAgIDYxLCAgICAtMSwgICAgNjIsICAgIC0xLCAgICA2MywgICAg
LTEsICAgIDcwLCAgICAtMSwKKyAgICAgMTIyLCAgICAtMSwgICAxMjQsICAgIDc4LCAgIDEyMiwg
ICAgLTEsICAgMTIxLCAgICAtMSwgICAxMjcsICAgIDgxLAorICAgICAgLTEsICAgMTM1LCAgICA4
MSwgICAgLTEsICAgICA3LCAgIDE0MCwgICAxNDEsICAgIDgxLCAgICAtMSwgICAxMjgsCisgICAg
ICA3MiwgICAgLTEsICAgMTMwLCAgICAtMSwgICAxMjksICAgIC0xLCAgIDEzMCwgICAxMzIsICAg
IC0xLCAgIDEyOSwKKyAgICAgIDc4LCAgIDEzMiwgICAgLTEsICAgMTM3LCAgICA0NSwgICAgNzEs
ICAgIC0xLCAgIDEzOSwgICAgOTYsICAgIC0xLAorICAgICAxMzksICAgIDk2LCAgICA3MywgICAx
MjUsICAgIDc0LCAgICAtMSwgICAxMzgsICAgMTMzLCAgIDEzMSwgICAgLTEsCisgICAgIDEzMywg
ICAxMzEsICAgIC0xLCAgIDEzOCwgICAxMzMsICAgMTM0LCAgICAtMSwgICAxMzMsICAgMTM0LCAg
ICAtMSwKKyAgICAgIC0xLCAgICAzMywgICAgLTEsICAgIDM0LCAgICAtMSwgICAgMzUsICAgIC0x
LCAgIDEzOSwgICAgLTEsICAgMTM2LAorICAgICAgLTEsICAgMTM1LCAgICA3OCwgICAgOTYsICAg
IC0xLCAgIDEzNSwgICAgNzgsICAgIDk2LCAgICA3MywgICAgNzQsCisgICAgICAtMSwgICAxMzUs
ICAgIDc4LCAgICA5NiwgICAgNzMsICAgMTI1LCAgICA3NCwgICAgLTEsICAgMTM1LCAgICA3OCwK
KyAgICAgIDk2LCAgICA4MCwgICAxNTAsICAgIC0xLCAgIDEzNywgICAgLTEsICAgMTM3LCAgICA5
NiwgICAgLTEsICAgMTM3LAorICAgICAgOTYsICAgIDczLCAgICA3NCwgICAgLTEsICAgMTM3LCAg
ICA5NiwgICAgNzMsICAgMTI1LCAgICA3NCwgICAgLTEsCisgICAgIDEzNywgICAgOTYsICAgIDgw
LCAgIDE1MCwgICAgLTEsICAgICAzLCAgICA0NSwgICAgLTEsICAgMTM5LCAgICAtMSwKKyAgICAg
MTM4LCAgIDEzOSwgICAgLTEsICAgICA5LCAgICAtMSwgICAgIDgsICAgIC0xLCAgICAzNywgICAg
LTEsICAgICAzLAorICAgICAgMzcsICAgIC0xLCAgICAzNiwgICAgLTEsICAgMTQxLCAgICAtMSwg
ICAxNDAsICAgMTQxLCAgICAtMSwgICAgIDQsCisgICAgICAtMSwgICAgIDUsICAgIC0xLCAgICAg
NiwgICAgLTEsICAgMTQyLCAgICAtMSwgICAxNDIsICAgIDczLCAgIDEyNSwKKyAgICAgIDc0LCAg
ICAtMSwgICAgMzksICAgIC0xLCAgICAxMSwgICAgLTEsICAgIDEyLCAgICAtMSwgICAgMTAsICAg
IC0xLAorICAgICAgMjcsICAgIC0xLCAgICAyOCwgICAgLTEsICAgIDI5LCAgICAtMSwgICAgMjEs
ICAgIC0xLCAgICAyMiwgICAgLTEsCisgICAgICAyMywgICAgLTEsICAgIDI0LCAgICAtMSwgICAg
MjUsICAgIC0xLCAgICAyNiwgICAgLTEsICAgIDMwLCAgICAtMSwKKyAgICAgIDMxLCAgICAtMSwg
ICAgMzIsICAgIC0xLCAgICA0MSwgICAgLTEsICAgIDQyLCAgICAtMSwgICAgNDMsICAgIC0xLAor
ICAgICAgNDQsICAgIC0xLCAgIDE0MywgICAgLTEsICAgIDQ2LCAgICAtMSwgICAgLTEsICAgIDM4
LCAgICA5NiwgICAgNzUsCisgICAgIDE0NCwgICAxNDYsICAgIDc2LCAgICAtMSwgICAgLTEsICAg
IDM4LCAgICA3NSwgICAxNDUsICAgMTQ2LCAgICA3NiwKKyAgICAgIC0xLCAgIDE0NywgICAgLTEs
ICAgMTQ2LCAgIDE0NywgICAgLTEsICAgMTM5LCAgIDE0OCwgICAgODEsICAgIC0xLAorICAgICAx
NDksICAgIC0xLCAgIDE0OCwgICAgNzgsICAgMTQ5LCAgICAtMSwgICAgOTYsICAgIC0xLCAgICA5
NiwgICAgNzMsCisgICAgIDEyNSwgICAgNzQsICAgIC0xLCAgIDEyMiwgICAgLTEsICAgMTI2LCAg
ICAtMSwgICAxNTQsICAgIC0xLCAgIDE1MywKKyAgICAgIC0xLCAgIDE1MSwgICAgLTEsICAgMTYz
LCAgICAtMSwgICAxNjQsICAgIC0xLCAgIDE2NywgICAgLTEsICAgMTc0LAorICAgICAgLTEsICAg
IDc1LCAgICA3NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzUsICAgMTU1LCAgIDE2MiwgICAx
NTYsCisgICAgICA3NiwgICAgLTEsICAgMTYxLCAgICAtMSwgICAxNTMsICAgIC0xLCAgICAtMSwg
ICAxNTksICAgMTYxLCAgICAtMSwKKyAgICAgIC0xLCAgIDE2MCwgICAxNTMsICAgIC0xLCAgICA3
NSwgICAgNzYsICAgIC0xLCAgICA3NSwgICAxNjIsICAgIDc2LAorICAgICAgLTEsICAgMTUyLCAg
ICAtMSwgICAxNjIsICAgMTUyLCAgICAtMSwgICAgODEsICAgIC0xLCAgIDEyNCwgICAgODEsCisg
ICAgICAtMSwgICAgMTgsICAgIDcxLCAgIDEyNCwgICAgNzIsICAgMTY1LCAgICAtMSwgICAxNTgs
ICAgIDE2LCAgIDE1OCwKKyAgICAgIC0xLCAgIDE1OCwgICAgLTEsICAgMTI0LCAgICAtMSwgICAx
MzcsICAgIDk2LCAgICA4MCwgICAxNTAsICAgIC0xLAorICAgICAgLTEsICAgIDQwLCAgICA3MSwg
ICAxNjgsICAgMTY2LCAgICA3MiwgICAxNTcsICAgIC0xLCAgICAtMSwgICAgMTUsCisgICAgIDE2
OSwgICAxNTgsICAgIDQwLCAgICA3MSwgICAxMjQsICAgIDcyLCAgICA4MSwgICAgLTEsICAgIC0x
LCAgICAxNywKKyAgICAgIDcxLCAgIDE3MCwgICAxNzEsICAgMTczLCAgICA3MiwgICAxNTcsICAg
IC0xLCAgIDE2MywgICAgLTEsICAgMTUxLAorICAgICAgLTEsICAgMTY2LCAgICAtMSwgICAgLTEs
ICAgMTcyLCAgICA4MSwgICAgLTEsICAgMTcyLCAgICA4MSwgICAxMjQsCisgICAgICAtMSwgICAg
MTQsICAgIDgxLCAgICAtMSwgICAgMTMsICAgIDgxLCAgICAtMSwgICAgMjAsICAgIDgxLCAgICAt
MSwKKyAgICAgIDIwLCAgIDEyNCwgICAgODEsICAgIC0xLCAgICAxOSwgICAgODEsICAgIC0xLCAg
IDE3NiwgICAgLTEsICAgMTc1LAorICAgICAxNzYsICAgIC0xLCAgIDE3NywgICAgLTEsICAgMTI2
LCAgICAtMSwgICAgLTEsICAgMTI3LCAgIDE3OCwgICAxNjEsCisgICAgICAtMQorfTsKKworLyog
WVlSTElORVtZWU5dIC0tIHNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVyIFlZTiB3YXMgZGVm
aW5lZC4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXJsaW5lW10gPQoreworICAg
ICAgIDAsICAgMTgwLCAgIDE4MCwgICAxODEsICAgMTg0LCAgIDIzOSwgICAyNDIsICAgMjQ3LCAg
IDI1MiwgICAyNTcsCisgICAgIDI2MywgICAyNjYsICAgMjY5LCAgIDI3MiwgICAzNjcsICAgMzc3
LCAgIDM5MCwgICAzOTgsICAgNDk4LCAgIDUwMSwKKyAgICAgNTA5LCAgIDUxMiwgICA1MTgsICAg
NTIyLCAgIDUyOSwgICA1MzUsICAgNTQ0LCAgIDU1MiwgICA2MDcsICAgNjE3LAorICAgICA2MjAs
ICAgNjMwLCAgIDY0MCwgICA2NjEsICAgNjYyLCAgIDY2MywgICA2NjgsICAgNjY5LCAgIDY3Nywg
ICA2ODgsCisgICAgIDY4OSwgICA2OTcsICAgNzA4LCAgIDcxMiwgICA3MTMsICAgNzIzLCAgIDcz
MywgICA3NDMsICAgNzU2LCAgIDc1NywKKyAgICAgNzY3LCAgIDc4MCwgICA3ODQsICAgNzg4LCAg
IDc5MiwgICA3OTMsICAgODA2LCAgIDgwNywgICA4MjAsICAgODIxLAorICAgICA4MzQsICAgODM1
LCAgIDg1MiwgICA4NTMsICAgODY2LCAgIDg2NywgICA4NjgsICAgODY5LCAgIDg3MCwgICA4NzQs
CisgICAgIDg3NywgICA4ODgsICAgODk2LCAgIDkyMywgICA5MjgsICAgOTQyLCAgIDk5NywgIDEw
MDAsICAxMDA3LCAgMTAxNSwKKyAgICAxMDM2LCAgMTA1NywgIDEwNjcsICAxMDk1LCAgMTEwMCwg
IDExMTAsICAxMTE1LCAgMTEyNSwgIDExMjgsICAxMTMxLAorICAgIDExMzQsICAxMTQwLCAgMTE0
NywgIDExNTAsICAxMTcyLCAgMTE5MCwgIDEyMTQsICAxMjM3LCAgMTI0MSwgIDEyNTksCisgICAg
MTI2NywgIDEyOTksICAxMzE5LCAgMTM0MCwgIDEzNDksICAxMzcyLCAgMTM3NSwgIDEzODEsICAx
Mzg5LCAgMTM5NywKKyAgICAxNDA1LCAgMTQxNSwgIDE0MjIsICAxNDI1LCAgMTQyOCwgIDE0MzQs
ICAxNDM3LCAgMTQ1MiwgIDE0NTYsICAxNDYwLAorICAgIDE0NjQsICAxNDY4LCAgMTQ3MywgIDE0
NzgsICAxNDgzLCAgMTQ4OCwgIDE0OTMsICAxNDk4LCAgMTUwMywgIDE1MDgsCisgICAgMTUxMywg
IDE1MTgsICAxNTIzLCAgMTUyOCwgIDE1MzIsICAxNTM2LCAgMTU0NCwgIDE1NTIsICAxNTU2LCAg
MTU2OSwKKyAgICAxNTY5LCAgMTU4MywgIDE1ODMsICAxNTkyLCAgMTU5NSwgIDE2MTEsICAxNjQ0
LCAgMTY0OCwgIDE2NTQsICAxNjYxLAorICAgIDE2NzYsICAxNjgwLCAgMTY4NCwgIDE2ODUsICAx
NjkxLCAgMTY5MiwgIDE2OTMsICAxNjk0LCAgMTY5NSwgIDE2OTksCisgICAgMTcwMCwgIDE3MDAs
ICAxNzAwLCAgMTcxMCwgIDE3MTEsICAxNzE1LCAgMTcxNSwgIDE3MTYsICAxNzE2LCAgMTcyMSwK
KyAgICAxNzI0LCAgMTczNCwgIDE3MzcsICAxNzQzLCAgMTc0NCwgIDE3NDgsICAxNzU2LCAgMTc2
MCwgIDE3NzAsICAxNzc1LAorICAgIDE3OTIsICAxNzkyLCAgMTc5NywgIDE3OTcsICAxODA0LCAg
MTgwNCwgIDE4MTIsICAxODE1LCAgMTgyMSwgIDE4MjQsCisgICAgMTgzMCwgIDE4MzQsICAxODQx
LCAgMTg0OCwgIDE4NTUsICAxODYyLCAgMTg3MywgIDE4ODIsICAxODg2LCAgMTg5MywKKyAgICAx
ODk2LCAgMTkwMiwgIDE5MDIKK307CisjZW5kaWYKKworI2lmIFlZREVCVUcgfHwgWVlFUlJPUl9W
RVJCT1NFIHx8IDAKKy8qIFlZVE5BTUVbU1lNQk9MLU5VTV0gLS0gU3RyaW5nIG5hbWUgb2YgdGhl
IHN5bWJvbCBTWU1CT0wtTlVNLgorICAgRmlyc3QsIHRoZSB0ZXJtaW5hbHMsIHRoZW4sIHN0YXJ0
aW5nIGF0IFlZTlRPS0VOUywgbm9udGVybWluYWxzLiAgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpj
b25zdCB5eXRuYW1lW10gPQoreworICAiJGVuZCIsICJlcnJvciIsICIkdW5kZWZpbmVkIiwgIklO
VkFSSUFOVCIsICJISUdIX1BSRUNJU0lPTiIsCisgICJNRURJVU1fUFJFQ0lTSU9OIiwgIkxPV19Q
UkVDSVNJT04iLCAiUFJFQ0lTSU9OIiwgIkFUVFJJQlVURSIsCisgICJDT05TVF9RVUFMIiwgIkJP
T0xfVFlQRSIsICJGTE9BVF9UWVBFIiwgIklOVF9UWVBFIiwgIkJSRUFLIiwgIkNPTlRJTlVFIiwK
KyAgIkRPIiwgIkVMU0UiLCAiRk9SIiwgIklGIiwgIkRJU0NBUkQiLCAiUkVUVVJOIiwgIkJWRUMy
IiwgIkJWRUMzIiwKKyAgIkJWRUM0IiwgIklWRUMyIiwgIklWRUMzIiwgIklWRUM0IiwgIlZFQzIi
LCAiVkVDMyIsICJWRUM0IiwgIk1BVFJJWDIiLAorICAiTUFUUklYMyIsICJNQVRSSVg0IiwgIklO
X1FVQUwiLCAiT1VUX1FVQUwiLCAiSU5PVVRfUVVBTCIsICJVTklGT1JNIiwKKyAgIlZBUllJTkci
LCAiU1RSVUNUIiwgIlZPSURfVFlQRSIsICJXSElMRSIsICJTQU1QTEVSMkQiLCAiU0FNUExFUkNV
QkUiLAorICAiU0FNUExFUl9FWFRFUk5BTF9PRVMiLCAiU0FNUExFUjJEUkVDVCIsICJJREVOVElG
SUVSIiwgIlRZUEVfTkFNRSIsCisgICJGTE9BVENPTlNUQU5UIiwgIklOVENPTlNUQU5UIiwgIkJP
T0xDT05TVEFOVCIsICJMRUZUX09QIiwgIlJJR0hUX09QIiwKKyAgIklOQ19PUCIsICJERUNfT1Ai
LCAiTEVfT1AiLCAiR0VfT1AiLCAiRVFfT1AiLCAiTkVfT1AiLCAiQU5EX09QIiwKKyAgIk9SX09Q
IiwgIlhPUl9PUCIsICJNVUxfQVNTSUdOIiwgIkRJVl9BU1NJR04iLCAiQUREX0FTU0lHTiIsCisg
ICJNT0RfQVNTSUdOIiwgIkxFRlRfQVNTSUdOIiwgIlJJR0hUX0FTU0lHTiIsICJBTkRfQVNTSUdO
IiwgIlhPUl9BU1NJR04iLAorICAiT1JfQVNTSUdOIiwgIlNVQl9BU1NJR04iLCAiTEVGVF9QQVJF
TiIsICJSSUdIVF9QQVJFTiIsICJMRUZUX0JSQUNLRVQiLAorICAiUklHSFRfQlJBQ0tFVCIsICJM
RUZUX0JSQUNFIiwgIlJJR0hUX0JSQUNFIiwgIkRPVCIsICJDT01NQSIsICJDT0xPTiIsCisgICJF
UVVBTCIsICJTRU1JQ09MT04iLCAiQkFORyIsICJEQVNIIiwgIlRJTERFIiwgIlBMVVMiLCAiU1RB
UiIsICJTTEFTSCIsCisgICJQRVJDRU5UIiwgIkxFRlRfQU5HTEUiLCAiUklHSFRfQU5HTEUiLCAi
VkVSVElDQUxfQkFSIiwgIkNBUkVUIiwKKyAgIkFNUEVSU0FORCIsICJRVUVTVElPTiIsICIkYWNj
ZXB0IiwgImlkZW50aWZpZXIiLCAidmFyaWFibGVfaWRlbnRpZmllciIsCisgICJwcmltYXJ5X2V4
cHJlc3Npb24iLCAicG9zdGZpeF9leHByZXNzaW9uIiwgImludGVnZXJfZXhwcmVzc2lvbiIsCisg
ICJmdW5jdGlvbl9jYWxsIiwgImZ1bmN0aW9uX2NhbGxfb3JfbWV0aG9kIiwgImZ1bmN0aW9uX2Nh
bGxfZ2VuZXJpYyIsCisgICJmdW5jdGlvbl9jYWxsX2hlYWRlcl9ub19wYXJhbWV0ZXJzIiwKKyAg
ImZ1bmN0aW9uX2NhbGxfaGVhZGVyX3dpdGhfcGFyYW1ldGVycyIsICJmdW5jdGlvbl9jYWxsX2hl
YWRlciIsCisgICJmdW5jdGlvbl9pZGVudGlmaWVyIiwgInVuYXJ5X2V4cHJlc3Npb24iLCAidW5h
cnlfb3BlcmF0b3IiLAorICAibXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbiIsICJhZGRpdGl2ZV9l
eHByZXNzaW9uIiwgInNoaWZ0X2V4cHJlc3Npb24iLAorICAicmVsYXRpb25hbF9leHByZXNzaW9u
IiwgImVxdWFsaXR5X2V4cHJlc3Npb24iLCAiYW5kX2V4cHJlc3Npb24iLAorICAiZXhjbHVzaXZl
X29yX2V4cHJlc3Npb24iLCAiaW5jbHVzaXZlX29yX2V4cHJlc3Npb24iLAorICAibG9naWNhbF9h
bmRfZXhwcmVzc2lvbiIsICJsb2dpY2FsX3hvcl9leHByZXNzaW9uIiwKKyAgImxvZ2ljYWxfb3Jf
ZXhwcmVzc2lvbiIsICJjb25kaXRpb25hbF9leHByZXNzaW9uIiwKKyAgImFzc2lnbm1lbnRfZXhw
cmVzc2lvbiIsICJhc3NpZ25tZW50X29wZXJhdG9yIiwgImV4cHJlc3Npb24iLAorICAiY29uc3Rh
bnRfZXhwcmVzc2lvbiIsICJkZWNsYXJhdGlvbiIsICJmdW5jdGlvbl9wcm90b3R5cGUiLAorICAi
ZnVuY3Rpb25fZGVjbGFyYXRvciIsICJmdW5jdGlvbl9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIiwK
KyAgImZ1bmN0aW9uX2hlYWRlciIsICJwYXJhbWV0ZXJfZGVjbGFyYXRvciIsICJwYXJhbWV0ZXJf
ZGVjbGFyYXRpb24iLAorICAicGFyYW1ldGVyX3F1YWxpZmllciIsICJwYXJhbWV0ZXJfdHlwZV9z
cGVjaWZpZXIiLAorICAiaW5pdF9kZWNsYXJhdG9yX2xpc3QiLCAic2luZ2xlX2RlY2xhcmF0aW9u
IiwgImZ1bGx5X3NwZWNpZmllZF90eXBlIiwKKyAgInR5cGVfcXVhbGlmaWVyIiwgInR5cGVfc3Bl
Y2lmaWVyIiwgInByZWNpc2lvbl9xdWFsaWZpZXIiLAorICAidHlwZV9zcGVjaWZpZXJfbm9fcHJl
YyIsICJ0eXBlX3NwZWNpZmllcl9ub25hcnJheSIsICJzdHJ1Y3Rfc3BlY2lmaWVyIiwKKyAgIiRA
MSIsICIkQDIiLCAic3RydWN0X2RlY2xhcmF0aW9uX2xpc3QiLCAic3RydWN0X2RlY2xhcmF0aW9u
IiwKKyAgInN0cnVjdF9kZWNsYXJhdG9yX2xpc3QiLCAic3RydWN0X2RlY2xhcmF0b3IiLCAiaW5p
dGlhbGl6ZXIiLAorICAiZGVjbGFyYXRpb25fc3RhdGVtZW50IiwgInN0YXRlbWVudCIsICJzaW1w
bGVfc3RhdGVtZW50IiwKKyAgImNvbXBvdW5kX3N0YXRlbWVudCIsICIkQDMiLCAiJEA0IiwgInN0
YXRlbWVudF9ub19uZXdfc2NvcGUiLAorICAic3RhdGVtZW50X3dpdGhfc2NvcGUiLCAiJEA1Iiwg
IiRANiIsICJjb21wb3VuZF9zdGF0ZW1lbnRfbm9fbmV3X3Njb3BlIiwKKyAgInN0YXRlbWVudF9s
aXN0IiwgImV4cHJlc3Npb25fc3RhdGVtZW50IiwgInNlbGVjdGlvbl9zdGF0ZW1lbnQiLAorICAi
c2VsZWN0aW9uX3Jlc3Rfc3RhdGVtZW50IiwgImNvbmRpdGlvbiIsICJpdGVyYXRpb25fc3RhdGVt
ZW50IiwgIiRANyIsCisgICIkQDgiLCAiJEA5IiwgImZvcl9pbml0X3N0YXRlbWVudCIsICJjb25k
aXRpb25vcHQiLCAiZm9yX3Jlc3Rfc3RhdGVtZW50IiwKKyAgImp1bXBfc3RhdGVtZW50IiwgInRy
YW5zbGF0aW9uX3VuaXQiLCAiZXh0ZXJuYWxfZGVjbGFyYXRpb24iLAorICAiZnVuY3Rpb25fZGVm
aW5pdGlvbiIsICIkQDEwIiwgWVlfTlVMTAorfTsKKyNlbmRpZgorCisjIGlmZGVmIFlZUFJJTlQK
Ky8qIFlZVE9LTlVNW1lZTEVYLU5VTV0gLS0gSW50ZXJuYWwgdG9rZW4gbnVtYmVyIGNvcnJlc3Bv
bmRpbmcgdG8KKyAgIHRva2VuIFlZTEVYLU5VTS4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3Vp
bnQxNiB5eXRva251bVtdID0KK3sKKyAgICAgICAwLCAgIDI1NiwgICAyNTcsICAgMjU4LCAgIDI1
OSwgICAyNjAsICAgMjYxLCAgIDI2MiwgICAyNjMsICAgMjY0LAorICAgICAyNjUsICAgMjY2LCAg
IDI2NywgICAyNjgsICAgMjY5LCAgIDI3MCwgICAyNzEsICAgMjcyLCAgIDI3MywgICAyNzQsCisg
ICAgIDI3NSwgICAyNzYsICAgMjc3LCAgIDI3OCwgICAyNzksICAgMjgwLCAgIDI4MSwgICAyODIs
ICAgMjgzLCAgIDI4NCwKKyAgICAgMjg1LCAgIDI4NiwgICAyODcsICAgMjg4LCAgIDI4OSwgICAy
OTAsICAgMjkxLCAgIDI5MiwgICAyOTMsICAgMjk0LAorICAgICAyOTUsICAgMjk2LCAgIDI5Nywg
ICAyOTgsICAgMjk5LCAgIDMwMCwgICAzMDEsICAgMzAyLCAgIDMwMywgICAzMDQsCisgICAgIDMw
NSwgICAzMDYsICAgMzA3LCAgIDMwOCwgICAzMDksICAgMzEwLCAgIDMxMSwgICAzMTIsICAgMzEz
LCAgIDMxNCwKKyAgICAgMzE1LCAgIDMxNiwgICAzMTcsICAgMzE4LCAgIDMxOSwgICAzMjAsICAg
MzIxLCAgIDMyMiwgICAzMjMsICAgMzI0LAorICAgICAzMjUsICAgMzI2LCAgIDMyNywgICAzMjgs
ICAgMzI5LCAgIDMzMCwgICAzMzEsICAgMzMyLCAgIDMzMywgICAzMzQsCisgICAgIDMzNSwgICAz
MzYsICAgMzM3LCAgIDMzOCwgICAzMzksICAgMzQwLCAgIDM0MSwgICAzNDIsICAgMzQzLCAgIDM0
NCwKKyAgICAgMzQ1LCAgIDM0NiwgICAzNDcsICAgMzQ4LCAgIDM0OQorfTsKKyMgZW5kaWYKKwor
LyogWVlSMVtZWU5dIC0tIFN5bWJvbCBudW1iZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4gZGVy
aXZlcy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjFbXSA9Cit7CisgICAgICAg
MCwgICAgOTUsICAgIDk2LCAgICA5NiwgICAgOTcsICAgIDk4LCAgICA5OCwgICAgOTgsICAgIDk4
LCAgICA5OCwKKyAgICAgIDk5LCAgICA5OSwgICAgOTksICAgIDk5LCAgICA5OSwgICAgOTksICAg
MTAwLCAgIDEwMSwgICAxMDIsICAgMTAyLAorICAgICAxMDMsICAgMTAzLCAgIDEwNCwgICAxMDQs
ICAgMTA1LCAgIDEwNSwgICAxMDYsICAgMTA3LCAgIDEwNywgICAxMDgsCisgICAgIDEwOCwgICAx
MDgsICAgMTA4LCAgIDEwOSwgICAxMDksICAgMTA5LCAgIDExMCwgICAxMTAsICAgMTEwLCAgIDEx
MSwKKyAgICAgMTExLCAgIDExMSwgICAxMTIsICAgMTEzLCAgIDExMywgICAxMTMsICAgMTEzLCAg
IDExMywgICAxMTQsICAgMTE0LAorICAgICAxMTQsICAgMTE1LCAgIDExNiwgICAxMTcsICAgMTE4
LCAgIDExOCwgICAxMTksICAgMTE5LCAgIDEyMCwgICAxMjAsCisgICAgIDEyMSwgICAxMjEsICAg
MTIyLCAgIDEyMiwgICAxMjMsICAgMTIzLCAgIDEyMywgICAxMjMsICAgMTIzLCAgIDEyNCwKKyAg
ICAgMTI0LCAgIDEyNSwgICAxMjYsICAgMTI2LCAgIDEyNiwgICAxMjcsICAgMTI4LCAgIDEyOCwg
ICAxMjksICAgMTI5LAorICAgICAxMzAsICAgMTMxLCAgIDEzMSwgICAxMzIsICAgMTMyLCAgIDEz
MiwgICAxMzIsICAgMTMzLCAgIDEzMywgICAxMzMsCisgICAgIDEzMywgICAxMzQsICAgMTM1LCAg
IDEzNSwgICAxMzUsICAgMTM1LCAgIDEzNSwgICAxMzYsICAgMTM2LCAgIDEzNiwKKyAgICAgMTM2
LCAgIDEzNiwgICAxMzYsICAgMTM3LCAgIDEzNywgICAxMzgsICAgMTM4LCAgIDEzOCwgICAxMzgs
ICAgMTM4LAorICAgICAxMzksICAgMTM5LCAgIDE0MCwgICAxNDAsICAgMTQwLCAgIDE0MSwgICAx
NDEsICAgMTQyLCAgIDE0MiwgICAxNDIsCisgICAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0Miwg
ICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwKKyAgICAgMTQyLCAgIDE0
MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQ0
LAorICAgICAxNDMsICAgMTQ1LCAgIDE0MywgICAxNDYsICAgMTQ2LCAgIDE0NywgICAxNDgsICAg
MTQ4LCAgIDE0OSwgICAxNDksCisgICAgIDE1MCwgICAxNTEsICAgMTUyLCAgIDE1MiwgICAxNTMs
ICAgMTUzLCAgIDE1MywgICAxNTMsICAgMTUzLCAgIDE1NCwKKyAgICAgMTU1LCAgIDE1NiwgICAx
NTQsICAgMTU3LCAgIDE1NywgICAxNTksICAgMTU4LCAgIDE2MCwgICAxNTgsICAgMTYxLAorICAg
ICAxNjEsICAgMTYyLCAgIDE2MiwgICAxNjMsICAgMTYzLCAgIDE2NCwgICAxNjUsICAgMTY1LCAg
IDE2NiwgICAxNjYsCisgICAgIDE2OCwgICAxNjcsICAgMTY5LCAgIDE2NywgICAxNzAsICAgMTY3
LCAgIDE3MSwgICAxNzEsICAgMTcyLCAgIDE3MiwKKyAgICAgMTczLCAgIDE3MywgICAxNzQsICAg
MTc0LCAgIDE3NCwgICAxNzQsICAgMTc0LCAgIDE3NSwgICAxNzUsICAgMTc2LAorICAgICAxNzYs
ICAgMTc4LCAgIDE3NworfTsKKworLyogWVlSMltZWU5dIC0tIE51bWJlciBvZiBzeW1ib2xzIGNv
bXBvc2luZyByaWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLworc3RhdGljIGNvbnN0IHl5
dHlwZV91aW50OCB5eXIyW10gPQoreworICAgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsCisgICAgICAgMSwgICAgIDQs
ICAgICAxLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMywK
KyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAg
MSwgICAgIDEsICAgICAxLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAzLCAgICAgMywgICAgIDEsCisgICAgICAgMywgICAgIDMsICAgICAx
LCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAxLCAgICAgMywKKyAgICAg
ICAzLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAxLCAgICAgMywgICAg
IDEsICAgICAzLAorICAgICAgIDEsICAgICA1LCAgICAgMSwgICAgIDMsICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCisgICAgICAgMywgICAgIDEsICAgICAyLCAgICAg
MiwgICAgIDQsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMywKKyAgICAgICAzLCAg
ICAgMiwgICAgIDUsICAgICAzLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMCwgICAgIDEsICAg
ICAxLAorICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsICAgICA1LCAgICAgNiwgICAgIDUs
ICAgICAxLCAgICAgMiwgICAgIDQsCisgICAgICAgNSwgICAgIDQsICAgICAyLCAgICAgMSwgICAg
IDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMSwKKyAgICAgICAxLCAgICAgMiwg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICA0LCAgICAgMSwgICAgIDEsICAgICAxLAor
ICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDEsCisgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMCwKKyAgICAgICA2LCAgICAgMCwgICAgIDUs
ICAgICAxLCAgICAgMiwgICAgIDMsICAgICAxLCAgICAgMywgICAgIDEsICAgICA0LAorICAgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDIsCisgICAgICAgMCwgICAgIDAsICAgICA1LCAgICAgMSwgICAgIDEsICAgICAwLCAg
ICAgMiwgICAgIDAsICAgICAyLCAgICAgMiwKKyAgICAgICAzLCAgICAgMSwgICAgIDIsICAgICAx
LCAgICAgMiwgICAgIDUsICAgICAzLCAgICAgMSwgICAgIDEsICAgICA0LAorICAgICAgIDAsICAg
ICA2LCAgICAgMCwgICAgIDgsICAgICAwLCAgICAgNywgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDAsCisgICAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAzLCAgICAgMiwg
ICAgIDEsICAgICAyLCAgICAgMSwKKyAgICAgICAxLCAgICAgMCwgICAgIDMKK307CisKKy8qIFlZ
REVGQUNUW1NUQVRFLU5BTUVdIC0tIERlZmF1bHQgcmVkdWN0aW9uIG51bWJlciBpbiBzdGF0ZSBT
VEFURS1OVU0uCisgICBQZXJmb3JtZWQgd2hlbiBZWVRBQkxFIGRvZXNuJ3Qgc3BlY2lmeSBzb21l
dGhpbmcgZWxzZSB0byBkby4gIFplcm8KKyAgIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuIGVycm9y
LiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlkZWZhY3RbXSA9Cit7CisgICAgICAg
MCwgICAgIDAsICAgMTEyLCAgIDExMywgICAxMTQsICAgICAwLCAgIDEwNiwgICAxMDUsICAgMTIw
LCAgIDExOCwKKyAgICAgMTE5LCAgIDEyNCwgICAxMjUsICAgMTI2LCAgIDEyNywgICAxMjgsICAg
MTI5LCAgIDEyMSwgICAxMjIsICAgMTIzLAorICAgICAxMzAsICAgMTMxLCAgIDEzMiwgICAxMDks
ICAgMTA3LCAgICAgMCwgICAxMTcsICAgMTMzLCAgIDEzNCwgICAxMzUsCisgICAgIDEzNiwgICAx
MzgsICAgMjAwLCAgIDIwMSwgICAgIDAsICAgIDc3LCAgICA4NywgICAgIDAsICAgIDkyLCAgICA5
NywKKyAgICAgICAwLCAgIDEwMywgICAgIDAsICAgMTEwLCAgIDExNSwgICAxMzcsICAgICAwLCAg
IDE5NywgICAxOTksICAgMTA4LAorICAgICAxMDIsICAgICAwLCAgICAgMiwgICAgIDMsICAgMTQx
LCAgICAgMCwgICAgNzIsICAgICAwLCAgICA3NSwgICAgODcsCisgICAgICAgMCwgICAgODgsICAg
IDg5LCAgICA5MCwgICAgNzgsICAgICAwLCAgICA4NywgICAgIDAsICAgIDczLCAgICAgMiwKKyAg
ICAgIDk4LCAgIDEwNCwgICAxMTEsICAgICAwLCAgICAgMSwgICAxOTgsICAgICAwLCAgICAgMCwg
ICAxMzksICAgICAwLAorICAgICAyMDIsICAgIDc5LCAgICA4NCwgICAgODYsICAgIDkxLCAgICAg
MCwgICAgOTMsICAgIDgwLCAgICAgMCwgICAgIDAsCisgICAgICAgNCwgICAgIDcsICAgICA2LCAg
ICAgOCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMzUsICAgIDM0LCAgICAzMywKKyAgICAgICA1
LCAgICAxMCwgICAgMjksICAgIDEyLCAgICAxNywgICAgMTgsICAgICAwLCAgICAgMCwgICAgMjMs
ICAgICAwLAorICAgICAgMzYsICAgICAwLCAgICAzOSwgICAgNDIsICAgIDQzLCAgICA0OCwgICAg
NTEsICAgIDUyLCAgICA1MywgICAgNTQsCisgICAgICA1NiwgICAgNTgsICAgIDYwLCAgICA3MSwg
ICAgIDAsICAgIDI3LCAgICA3NCwgICAgIDAsICAgICAwLCAgIDE0MywKKyAgICAgICAwLCAgICAg
MCwgICAgIDAsICAgMTgyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTYw
LAorICAgICAxNjksICAgMTczLCAgICAzNiwgICAgNjIsICAgIDY5LCAgICAgMCwgICAxNTEsICAg
ICAwLCAgIDExNSwgICAxNTQsCisgICAgIDE3MSwgICAxNTMsICAgMTUyLCAgICAgMCwgICAxNTUs
ICAgMTU2LCAgIDE1NywgICAxNTgsICAgIDgxLCAgICA4MywKKyAgICAgIDg1LCAgICAgMCwgICAg
IDAsICAgIDk5LCAgICAgMCwgICAxNTAsICAgMTAxLCAgICAzMCwgICAgMzEsICAgICAwLAorICAg
ICAgMTQsICAgIDE1LCAgICAgMCwgICAgIDAsICAgIDIxLCAgICAyMCwgICAgIDAsICAgIDIyLCAg
ICAyNCwgICAgMjYsCisgICAgICAzMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAxMTYsICAgMTQ4LCAgICAgMCwgICAxNDYsICAgMTQyLAorICAgICAxNDQs
ICAgICAwLCAgIDE5MywgICAxOTIsICAgMTY3LCAgIDE4NCwgICAgIDAsICAgMTk2LCAgIDE5NCwg
ICAgIDAsCisgICAgIDE4MCwgICAxNTksICAgICAwLCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2
OCwgICAgNjQsICAgICAwLCAgICAgMCwKKyAgICAgMTc0LCAgIDE3MCwgICAxNzIsICAgICAwLCAg
ICA5NCwgICAgIDAsICAgIDk2LCAgIDEwMCwgICAgIDksICAgICAwLAorICAgICAgMTYsICAgICAy
LCAgICAgMywgICAgMTMsICAgIDE5LCAgICAyNSwgICAgMzcsICAgIDM4LCAgICA0MSwgICAgNDAs
CisgICAgICA0NiwgICAgNDcsICAgIDQ0LCAgICA0NSwgICAgNDksICAgIDUwLCAgICA1NSwgICAg
NTcsICAgIDU5LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAxNDUsICAgMTQwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTk1LAorICAgICAgIDAsICAgMTYxLCAgICA2
MywgICAgNzAsICAgICAwLCAgICA5NSwgICAgMTEsICAgICAwLCAgICAgMCwgICAxNDcsCisgICAg
ICAgMCwgICAxNjYsICAgMTY4LCAgIDE4NywgICAxODYsICAgMTg5LCAgIDE2NywgICAxNzgsICAg
ICAwLCAgICAgMCwKKyAgICAgICAwLCAgICA4MiwgICAgNjEsICAgMTQ5LCAgICAgMCwgICAxODgs
ICAgICAwLCAgICAgMCwgICAxNzcsICAgMTc1LAorICAgICAgIDAsICAgICAwLCAgIDE2MiwgICAg
IDAsICAgMTkwLCAgICAgMCwgICAxNjcsICAgICAwLCAgIDE2NCwgICAxODEsCisgICAgIDE2Mywg
ICAgIDAsICAgMTkxLCAgIDE4NSwgICAxNzYsICAgMTc5LCAgIDE4MworfTsKKworLyogWVlERUZH
T1RPW05URVJNLU5VTV0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eWRlZmdvdG9b
XSA9Cit7CisgICAgICAtMSwgICAxOTYsICAgMTAwLCAgIDEwMSwgICAxMDIsICAgMjI5LCAgIDEw
MywgICAxMDQsICAgMTA1LCAgIDEwNiwKKyAgICAgMTA3LCAgIDEwOCwgICAxMDksICAgMTQyLCAg
IDExMSwgICAxMTIsICAgMTEzLCAgIDExNCwgICAxMTUsICAgMTE2LAorICAgICAxMTcsICAgMTE4
LCAgIDExOSwgICAxMjAsICAgMTIxLCAgIDEyMiwgICAxNDMsICAgMTQ0LCAgIDIxOCwgICAxNDUs
CisgICAgIDEyNCwgICAxNDYsICAgMTQ3LCAgICAzNCwgICAgMzUsICAgIDM2LCAgICA4MiwgICAg
NjQsICAgIDY1LCAgICA4MywKKyAgICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwg
ICAgNDIsICAgIDQzLCAgIDEyNSwgICAgNDUsICAgMTMwLAorICAgICAgNzcsICAgMTI4LCAgIDEy
OSwgICAxOTcsICAgMTk4LCAgIDE2NiwgICAxNDksICAgMTUwLCAgIDE1MSwgICAxNTIsCisgICAg
IDIxMiwgICAyODAsICAgMjk5LCAgIDI1NCwgICAyNTUsICAgMjU2LCAgIDMwMCwgICAxNTMsICAg
MTU0LCAgIDE1NSwKKyAgICAgMjg5LCAgIDI3OSwgICAxNTYsICAgMjYwLCAgIDIwNCwgICAyNTcs
ICAgMjc1LCAgIDI4NiwgICAyODcsICAgMTU3LAorICAgICAgNDYsICAgIDQ3LCAgICA0OCwgICAg
NTcKK307CisKKy8qIFlZUEFDVFtTVEFURS1OVU1dIC0tIEluZGV4IGluIFlZVEFCTEUgb2YgdGhl
IHBvcnRpb24gZGVzY3JpYmluZworICAgU1RBVEUtTlVNLiAgKi8KKyNkZWZpbmUgWVlQQUNUX05J
TkYgLTI2MQorc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXBhY3RbXSA9Cit7CisgICAgMTMy
NywgICAtMjAsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgMTEzLCAgLTI2MSwgIC0yNjEsICAtMjYx
LCAgLTI2MSwKKyAgICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAt
MjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLAorICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEs
ICAtMjYxLCAgIC0xOSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsCisgICAgLTI2MSwgIC0y
NjEsICAtMjYxLCAgIC02MSwgICAtNDAsICAgLTI4LCAgICA3NSwgICAgLTcsICAtMjYxLCAgICAy
NCwKKyAgICAxMzcwLCAgLTI2MSwgIDE0NDQsICAtMjYxLCAgIC0xMSwgIC0yNjEsICAxMjgzLCAg
LTI2MSwgIC0yNjEsICAtMjYxLAorICAgIC0yNjEsICAxNDQ0LCAgLTI2MSwgIC0yNjEsICAtMjYx
LCAgICAgNiwgIC0yNjEsICAgIDU0LCAgLTI2MSwgICAgODgsCisgICAgICA2MiwgIC0yNjEsICAt
MjYxLCAgLTI2MSwgIC0yNjEsICAxMzcwLCAgICA1OSwgICAgOTEsICAtMjYxLCAgICAzNiwKKyAg
ICAgLTUwLCAgLTI2MSwgIC0yNjEsICAxMDUxLCAgLTI2MSwgIC0yNjEsICAgIDYzLCAgMTM3MCwg
IC0yNjEsICAgMjkzLAorICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgIDkxLCAgMTM3
MCwgICAtMTIsICAtMjYxLCAgIDg1NiwgIDEwNTEsCisgICAgICA3NywgIC0yNjEsICAtMjYxLCAg
LTI2MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwKKyAgICAtMjYx
LCAgLTI2MSwgICAtMTQsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgIDg0LCAgIC00NCwgIDExMTYs
ICAgIDk1LAorICAgIC0yNjEsICAxMDUxLCAgICA1MywgICAgIDMsICAtMjYxLCAgIC0zNiwgICAg
ODksICAtMjYxLCAgLTI2MSwgIC0yNjEsCisgICAgIDEwNCwgICAxMDcsICAgLTQ1LCAgLTI2MSwg
ICAgOTYsICAtMjYxLCAgLTI2MSwgICAgOTEsICAxMTg0LCAgLTI2MSwKKyAgICAxMzcwLCAgICA5
MiwgICAgOTMsICAtMjYxLCAgICA5OCwgICAxMDEsICAgIDk0LCAgIDkyMSwgICAxMDUsICAgMTAy
LAorICAgIC0yNjEsICAtMjYxLCAgICA3MiwgIC0yNjEsICAtMjYxLCAgICAgOSwgIC0yNjEsICAg
LTYxLCAgICA0MiwgIC0yNjEsCisgICAgLTI2MSwgIC0yNjEsICAtMjYxLCAgIDM3NiwgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgMTA2LCAgLTI2MSwKKyAgICAtMjYxLCAgIDk4NiwgIDEw
NTEsICAtMjYxLCAgIDEwMywgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgLTQxLAorICAg
IC0yNjEsICAtMjYxLCAgMTA1MSwgIDE0MDcsICAtMjYxLCAgLTI2MSwgIDEwNTEsICAgMTEwLCAg
LTI2MSwgIC0yNjEsCisgICAgLTI2MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAxMDUx
LCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwKKyAgICAxMDUxLCAgMTA1MSwgIDEwNTEsICAx
MDUxLCAgMTA1MSwgIC0yNjEsICAgMTA5LCAgICAyMywgIC0yNjEsICAtMjYxLAorICAgIC0yNjEs
ICAxMjI3LCAgLTI2MSwgIC0yNjEsICAgMTExLCAgLTI2MSwgIDEwNTEsICAtMjYxLCAgLTI2MSwg
ICAgMjUsCisgICAgLTI2MSwgIC0yNjEsICAgNDU5LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2
MSwgIC0yNjEsICAxMDUxLCAgMTA1MSwKKyAgICAtMjYxLCAgLTI2MSwgIC0yNjEsICAxMDUxLCAg
LTI2MSwgICAxMTQsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgMTE1LAorICAgICAxMTIsICAgIDc3
LCAgIDExNiwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgICA1MywgICAgNTMs
CisgICAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAtMzYsICAgLTM2LCAgLTI2MSwgICAx
MDQsICAgMTA3LCAgICA3NiwKKyAgICAxMDUxLCAgICA5MSwgIC0yNjEsICAtMjYxLCAgIDE0NSwg
ICAgNTQsICAgNjI1LCAgIDcwOCwgICAgLTYsICAtMjYxLAorICAgICA3OTEsICAgNDU5LCAgLTI2
MSwgIC0yNjEsICAgMTE3LCAgLTI2MSwgIC0yNjEsICAxMDUxLCAgIDEyMCwgIC0yNjEsCisgICAg
IDEyNCwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgNzkxLCAgIDExMSwgICAxMTIsICAg
IDkxLCAgIDEyNSwKKyAgICAgMTIyLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgMTA1MSwgIC0yNjEs
ICAgMTE4LCAgIDEyOCwgICAxODAsICAtMjYxLAorICAgICAxMjYsICAgNTQyLCAgLTI2MSwgICAg
LTUsICAxMDUxLCAgIDU0MiwgICAxMTEsICAxMDUxLCAgLTI2MSwgIC0yNjEsCisgICAgLTI2MSwg
ICAxMjMsICAgMTEyLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MQorfTsKKworLyogWVlQR09U
T1tOVEVSTS1OVU1dLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlwZ290b1tdID0K
K3sKKyAgICAtMjYxLCAgIC0yNCwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAg
LTI2MSwgICAgMzQsICAtMjYxLAorICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAgMzIsICAtMjYx
LCAgIC0zMywgIC0yNjEsICAgLTI3LCAgIC0yNiwgIC0yNjEsCisgICAgLTI2MSwgIC0yNjEsICAg
IDE0LCAgICAxNiwgICAgMTgsICAtMjYxLCAgIC02NiwgICAtODcsICAtMjYxLCAgIC05MiwKKyAg
ICAgLTg1LCAgICAxMSwgICAgMTIsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgMTQxLCAgIDE1MCwg
ICAxNjEsICAgMTQzLAorICAgIC0yNjEsICAtMjYxLCAgLTIzMSwgICAgIDUsICAgLTMwLCAgIDIy
NCwgICAtMTgsICAgICAwLCAgLTI2MSwgIC0yNjEsCisgICAgLTI2MSwgICAxMDAsICAtMTE5LCAg
LTI2MSwgICAtMTcsICAtMTU2LCAgIC0yNSwgIC0xNDUsICAtMjQzLCAgLTI2MSwKKyAgICAtMjYx
LCAgLTI2MSwgICAtNjQsICAtMjYwLCAgLTI2MSwgIC0yNjEsICAgLTUyLCAgICAyMSwgICAtMjIs
ICAtMjYxLAorICAgIC0yNjEsICAgLTM5LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0y
NjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsCisgICAgLTI2MSwgICAxOTEsICAtMjYxLCAgLTI2MQor
fTsKKworLyogWVlUQUJMRVtZWVBBQ1RbU1RBVEUtTlVNXV0uICBXaGF0IHRvIGRvIGluIHN0YXRl
IFNUQVRFLU5VTS4gIElmCisgICBwb3NpdGl2ZSwgc2hpZnQgdGhhdCB0b2tlbi4gIElmIG5lZ2F0
aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hpY2gKKyAgIG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJ
ZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci4gICovCisjZGVmaW5lIFlZVEFCTEVfTklORiAt
MTY2CitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5dGFibGVbXSA9Cit7CisgICAgICA0NCwg
ICAgNTUsICAgMTY1LCAgIDE2NCwgICAxNjksICAgIDgwLCAgIDIyNiwgICAxMjMsICAgMjIyLCAg
IDIwMCwKKyAgICAgIDcxLCAgICAzMiwgICAgMzMsICAgMjcyLCAgIDE5MywgICAgNzAsICAgMjg4
LCAgICA0OSwgICAxODUsICAgMTg2LAorICAgICAgNTYsICAgMTc4LCAgIDEyMywgICAgODgsICAg
IDcyLCAgICA1MCwgICAgNTIsICAgIDUzLCAgIDE3NSwgICAyNzgsCisgICAgICA4OSwgICAyMjgs
ICAgIDU4LCAgICA3NiwgICAxNzYsICAgIDg0LCAgIDMwNCwgICAyMTksICAgMTcwLCAgIDE3MSwK
KyAgICAgIDQ0LCAgICA2NiwgICAgNDQsICAgIDg2LCAgIDI3OCwgICAyMDksICAgIDQ0LCAgIDEy
NywgICAyOTgsICAgMTk0LAorICAgICAgNTksICAgIDQ0LCAgIDI5OCwgICAxODcsICAgMTg4LCAg
ICA4NCwgICAgNTQsICAgIDMyLCAgICAzMywgICAxNzIsCisgICAgIDE1OCwgICAxNjEsICAgIDcz
LCAgIDE3MywgICAgNjYsICAgIDQ0LCAgIDI3NiwgICAzMDEsICAgMTYyLCAgICA2OSwKKyAgICAg
IDUzLCAgICA2NywgICAyMTksICAgMjE5LCAgICA2OCwgICAxNjUsICAgMjI1LCAgICA0NCwgICAg
NjAsICAgMTQ4LAorICAgICAyMzAsICAgIDc4LCAgIDIwMCwgICAgIDYsICAgICA3LCAgICA0NCwg
ICAxODMsICAgMjE5LCAgIDE4NCwgICAyMzUsCisgICAgIDIyMCwgICAgNjAsICAgIDYxLCAgICA2
MiwgICAgNjMsICAgMTIzLCAgICAgNiwgICAgIDcsICAgMTI3LCAgICA0OSwKKyAgICAgMTI3LCAg
IDI1MSwgICAyNDksICAgMjE5LCAgIDI1MiwgICAxMTAsICAgMjU5LCAgICA4NywgICAgNjEsICAg
IDYyLAorICAgICAgNjMsICAgIDIzLCAgICAyNCwgICAtMjcsICAgMjU4LCAgICA3MywgICAyMjIs
ICAgICAyLCAgICAgMywgICAgIDQsCisgICAgIDExMCwgICAgNjEsICAgIDYyLCAgICA2MywgICAg
MjMsICAgIDI0LCAgIDE2NywgICAxNjgsICAgIDQ0LCAgICA3OSwKKyAgICAgIDQ0LCAgIDI2Miwg
ICAyNjMsICAgMjEzLCAgIDIxNCwgICAyMTUsICAgIDUyLCAgICA1MywgICAyNjQsICAgMTgxLAor
ICAgICAxODIsICAgMzA1LCAgIDIxNiwgICAxODAsICAgMTI2LCAgIDE4OSwgICAxOTAsICAgLTc2
LCAgIC0yOCwgICAyMzMsCisgICAgIDIzOCwgICAyMzksICAgMjE3LCAgIDE0OCwgICAyMTksICAg
MjY3LCAgIDE3NCwgICAxMjMsICAgMjQwLCAgIDI0MSwKKyAgICAgMjQyLCAgIDI0MywgICAxOTEs
ICAgMjQ0LCAgIDI0NSwgICAyNjgsICAgMTc5LCAgIDE5MiwgICAyNzcsICAgMjA1LAorICAgICAx
OTUsICAgMTI3LCAgIDIwNiwgICAyMDIsICAgMjAzLCAgIDIwNywgICAyMTAsICAgMjI3LCAgIDIx
MSwgICAyMjMsCisgICAgIDI4MiwgIC0xMTcsICAgMjUwLCAgIDI3NywgICAxMjMsICAgMjcwLCAg
LTE2NSwgIC0xMzgsICAgMjY1LCAgIDI2NiwKKyAgICAgMjE5LCAgIDI4MSwgICAyOTMsICAgMTEw
LCAgIDI4MywgICAyODQsICAgMjk2LCAgIDI5MSwgICAyOTIsICAgMjk0LAorICAgICAyOTUsICAg
IDQ0LCAgIDMwMiwgICAyNzEsICAgMzA2LCAgIDI0NiwgICAyOTcsICAgMjM0LCAgIDI0NywgICAg
ODEsCisgICAgIDE2NSwgICAyNDgsICAgMTQ4LCAgIDIzNiwgICAyMzcsICAgMTEwLCAgIDExMCwg
ICAxMTAsICAgMTEwLCAgIDExMCwKKyAgICAgMTEwLCAgIDExMCwgICAxMTAsICAgMTEwLCAgIDEx
MCwgICAxMTAsICAgMTU5LCAgICA4NSwgICAxNjAsICAgIDUxLAorICAgICAyMDEsICAgMzAzLCAg
IDI3MywgICAyNjEsICAgMjY5LCAgIDI3NCwgICAyODUsICAgIDc1LCAgICAgMCwgICAgIDAsCisg
ICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI5MCwgICAx
MTAsICAgMTQ4LCAgIDE0OCwgICAgIDAsICAgICAwLAorICAgICAxNDgsICAgMTQ4LCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ4LCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAxMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgMTQ4LCAgICAgMCwgICAgIDAs
ICAgICAwLCAgIDE0OCwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsCisgICAgICAgNSwgICAg
IDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgIDEzMSwgICAxMzIsICAgMTMzLCAgICAg
MCwKKyAgICAgMTM0LCAgIDEzNSwgICAxMzYsICAgMTM3LCAgICAxMSwgICAgMTIsICAgIDEzLCAg
ICAxNCwgICAgMTUsICAgIDE2LAorICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIx
LCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsCisgICAgICAyNCwgICAgMjUsICAg
IDI2LCAgIDEzOCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDkwLCAgICAzMSwKKyAg
ICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LCAgICAgMCwg
ICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTM5LCAgIDE0MCwKKyAgICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0MSwgICAgOTcsICAgIDk4LCAgICAgMCwgICAgOTks
ICAgICAxLAorICAgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAg
IDgsICAgICA5LCAgICAxMCwgICAxMzEsCisgICAgIDEzMiwgICAxMzMsICAgICAwLCAgIDEzNCwg
ICAxMzUsICAgMTM2LCAgIDEzNywgICAgMTEsICAgIDEyLCAgICAxMywKKyAgICAgIDE0LCAgICAx
NSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAw
LAorICAgICAgIDAsICAgICAwLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAxMzgsICAg
IDI3LCAgICAyOCwgICAgMjksCisgICAgICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwgICAgOTIs
ICAgIDkzLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICA5NSwKKyAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk2LCAg
ICAgMCwgICAgIDAsCisgICAgICAgMCwgICAxMzksICAgMjIxLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAxNDEsICAgIDk3LCAgICA5OCwKKyAgICAgICAwLCAgICA5OSwgICAgIDEsICAg
ICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LAorICAgICAgIDks
ICAgIDEwLCAgIDEzMSwgICAxMzIsICAgMTMzLCAgICAgMCwgICAxMzQsICAgMTM1LCAgIDEzNiwg
ICAxMzcsCisgICAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAx
NywgICAgMTgsICAgIDE5LCAgICAyMCwKKyAgICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgMTM4LAorICAgICAgMjcsICAgIDI4
LCAgICAyOSwgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAs
CisgICAgICAgMCwgICAgOTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgOTYsICAgICAwLCAgICAg
MCwgICAgIDAsICAgMTM5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAg
IDE0MSwgICAgOTcsICAgIDk4LCAgICAgMCwgICAgOTksICAgICAxLCAgICAgMiwgICAgIDMsICAg
ICA0LCAgICAgNSwKKyAgICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAxMzEs
ICAgMTMyLCAgIDEzMywgICAgIDAsICAgMTM0LAorICAgICAxMzUsICAgMTM2LCAgIDEzNywgICAg
MTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsCisgICAgICAxOCwg
ICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAg
ICAyNCwKKyAgICAgIDI1LCAgICAyNiwgICAxMzgsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMw
LCAgICA5MCwgICAgMzEsICAgIDkxLAorICAgICAgOTIsICAgIDkzLCAgICAgMCwgICAgIDAsICAg
IDk0LCAgICA5NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwK
KyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICA3
OSwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDEsICAgIDk3LCAg
ICA5OCwgICAgIDAsICAgIDk5LCAgICAgMSwgICAgIDIsCisgICAgICAgMywgICAgIDQsICAgICA1
LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgMTMxLCAgIDEzMiwKKyAgICAg
MTMzLCAgICAgMCwgICAxMzQsICAgMTM1LCAgIDEzNiwgICAxMzcsICAgIDExLCAgICAxMiwgICAg
MTMsICAgIDE0LAorICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwg
ICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgMjMsICAgIDI0LCAgICAy
NSwgICAgMjYsICAgMTM4LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKKyAgICAgIDkwLCAg
ICAzMSwgICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsICAg
ICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQxLCAgICA5NywgICAgOTgsICAgICAwLAor
ICAgICAgOTksICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3
LCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwKKyAgICAgIDEyLCAgICAxMywgICAgMTQs
ICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLAorICAgICAg
MjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAg
MCwgICAgMjcsCisgICAgICAyOCwgICAgMjksICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAg
ICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwKKyAgICAgIDk0LCAgICA5NSwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
OTYsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgIDE0MSwKKyAgICAgIDk3LCAgICA5OCwgICAgIDAsICAgIDk5LCAgICA2
MCwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDAsICAgICA2LAorICAgICAgIDcsICAgICA4LCAg
ICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisg
ICAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYs
ICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAyMywgICAgMjQsICAgIDI1LAorICAgICAgMjYsICAgICAwLCAgICAyNywg
ICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwgICAgOTIsCisgICAgICA5
MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsCisgICAgICAgMCwgICAg
IDAsICAgICAwLCAgICA5NywgICAgOTgsICAgICAwLCAgICA5OSwgICAgMTEsICAgIDEyLCAgICAx
MywKKyAgICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAg
ICAyMSwgICAgMjIsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI1
LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksCisgICAgICAzMCwgICAgOTAsICAg
IDMxLCAgICA5MSwgICAgOTIsICAgIDkzLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICA5NSwKKyAg
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAsCisgICAgIDE2MywgICAgIDgsICAgICA5LCAg
ICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk3LCAgICA5OCwKKyAgICAgICAw
LCAgICA5OSwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcs
ICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgMjUsCisgICAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwg
ICAgMjksICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwKKyAgICAgIDkzLCAgICAg
MCwgICAgIDAsICAgIDk0LCAgICA5NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAy
MDgsICAgIDk3LCAgICA5OCwgICAgIDAsICAgIDk5LCAgICAxMSwgICAgMTIsICAgIDEzLAorICAg
ICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAg
ICAyMiwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjUsICAgIDI2
LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwKKyAgICAgIDMwLCAgICA5MCwgICAgMzEsICAg
IDkxLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LAorICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgOTYsICAgICAwLCAgICAgMCwKKyAgICAgMjI0LCAgICAgOCwgICAgIDksICAgIDEwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTcsICAgIDk4LAorICAgICAgIDAsICAgIDk5
LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgs
CisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAyNSwKKyAgICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwg
ICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLAorICAgICAgOTMsICAgICAwLCAgICAg
MCwgICAgOTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
OTcsICAgIDk4LCAgICAgMCwgICAgOTksICAgIDExLCAgICAxMiwgICAgMTMsCisgICAgICAxNCwg
ICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAg
ICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwgICAxNzcsICAgICAw
LCAgICAyNywgICAgMjgsICAgIDI5LAorICAgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAg
IDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsCisgICAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwK
KyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5
NiwgICAgIDIsICAgICAzLAorICAgICAgIDQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA4LCAg
ICAgOSwgICAgMTAsICAgICAwLCAgICA5NywgICAgOTgsCisgICAgICAgMCwgICAgOTksICAgICAw
LCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwKKyAgICAg
IDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAg
IDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywg
ICAgMjgsICAgIDI5LCAgICAzMCwgICAgIDAsCisgICAgICAzMSwgICAgIDIsICAgICAzLCAgICAg
NCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAgICAxMCwKKyAgICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTEsICAg
IDEyLAorICAgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTks
ICAgIDIwLCAgICAyMSwgICAgMjIsCisgICAgIDE5OSwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwKKyAgICAgIDI5LCAgICAzMCwg
ICAgIDAsICAgIDMxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAor
ICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgNzQsICAgICAwLCAgICAgMCwgICAgIDEsICAgICAy
LCAgICAgMywgICAgIDQsCisgICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAg
IDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAs
ICAgMjUzLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAorICAgICAg
MTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgMjMsCisgICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAg
ICAyOSwgICAgMzAsICAgICAwLCAgICAzMSwKKyAgICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0
LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLAorICAgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwgICAg
MTIsCisgICAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwg
ICAgMjAsICAgIDIxLCAgICAyMiwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAy
NCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LAorICAgICAgMjksICAgIDMwLCAg
ICAgMCwgICAgMzEsICAgICAyLCAgICAgMywgICAgIDQsICAgICAwLCAgICAgMCwgICAgIDAsCisg
ICAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAg
MTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICAyMiwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwgICAgMjYsCisgICAgICAg
MCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgICAwLCAgICAzMSwgICAgIDgsICAgICA5
LCAgICAxMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgMTEsICAgIDEyLAorICAgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYs
ICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCisgICAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAy
OCwKKyAgICAgIDI5LCAgICAzMCwgICAyMzEsICAgMjMyLCAgICAgOCwgICAgIDksICAgIDEwLCAg
ICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsCisgICAgICAxNiwgICAgMTcsICAg
IDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwKKyAg
ICAgICAwLCAgICAgMCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwg
ICAgMzAsICAgICAwLAorICAgICAgMzEKK307CisKKyNkZWZpbmUgeXlwYWN0X3ZhbHVlX2lzX2Rl
ZmF1bHQoWXlzdGF0ZSkgXAorICAoISEoKFl5c3RhdGUpID09ICgtMjYxKSkpCisKKyNkZWZpbmUg
eXl0YWJsZV92YWx1ZV9pc19lcnJvcihZeXRhYmxlX3ZhbHVlKSBcCisgIFlZSUQgKDApCisKK3N0
YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXljaGVja1tdID0KK3sKKyAgICAgICAwLCAgICAyNSwg
ICAgODksICAgIDg4LCAgICA5NiwgICAgNTcsICAgMTYyLCAgICA3MywgICAxNTMsICAgMTI4LAor
ICAgICAgNDAsICAgICAwLCAgICAgMCwgICAyNTYsICAgIDU5LCAgICAzOSwgICAyNzYsICAgIDM3
LCAgICA1NCwgICAgNTUsCisgICAgICA4MSwgICAxMDgsICAgIDg4LCAgICA3MywgICAgNDIsICAg
IDQ1LCAgICA0NSwgICAgNDYsICAgIDcyLCAgIDI2MCwKKyAgICAgIDgwLCAgICA3MiwgICAgNzIs
ICAgIDUxLCAgICA3OCwgICAgNjUsICAgMjk2LCAgICA3OCwgICAgNTIsICAgIDUzLAorICAgICAg
NDAsICAgIDM2LCAgICA0MiwgICAgNjcsICAgMjc1LCAgIDEzNywgICAgNDYsICAgIDc3LCAgIDI5
MSwgICAgOTQsCisgICAgICA3OCwgICAgNTEsICAgMjk1LCAgICA4OSwgICAgOTAsICAgIDg1LCAg
ICA3NSwgICAgNDYsICAgIDQ2LCAgICA3MywKKyAgICAgIDg0LCAgICA3MywgICAgNzMsICAgIDc3
LCAgICA1OSwgICAgNjUsICAgIDcyLCAgICA3MiwgICAgODAsICAgIDQ1LAorICAgICAgNDYsICAg
IDc4LCAgICA3OCwgICAgNzgsICAgIDgxLCAgIDE2MiwgICAxNjEsICAgIDc3LCAgICAgMywgICAg
NzksCisgICAgIDE3MiwgICAgNzUsICAgMjAxLCAgICAgOCwgICAgIDksICAgIDg1LCAgICA4Mywg
ICAgNzgsICAgIDg1LCAgIDE3NiwKKyAgICAgIDgxLCAgICAgMywgICAgMzMsICAgIDM0LCAgICAz
NSwgICAxNjEsICAgICA4LCAgICAgOSwgICAxMjgsICAgIDM3LAorICAgICAxMzAsICAgIDc4LCAg
IDE5NCwgICAgNzgsICAgIDgxLCAgICA3MywgICAgODEsICAgIDcxLCAgICAzMywgICAgMzQsCisg
ICAgICAzNSwgICAgMzYsICAgIDM3LCAgICA3MSwgICAyMDYsICAgIDczLCAgIDI2MSwgICAgIDQs
ICAgICA1LCAgICAgNiwKKyAgICAgIDg4LCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAg
MzcsICAgIDk0LCAgICA5NSwgICAxMjgsICAgIDc1LAorICAgICAxMzAsICAgMjE4LCAgIDIxOSwg
ICAgNjEsICAgIDYyLCAgICA2MywgICAgNDUsICAgIDQ2LCAgIDIyMywgICAgODYsCisgICAgICA4
NywgICAyOTcsICAgIDcwLCAgIDExMSwgICAgODEsICAgIDU2LCAgICA1NywgICAgNzIsICAgIDcx
LCAgIDE3MywKKyAgICAgMTgzLCAgIDE4NCwgICAgODAsICAgMTUzLCAgICA3OCwgICAgNzksICAg
IDcyLCAgIDIyMywgICAxODUsICAgMTg2LAorICAgICAxODcsICAgMTg4LCAgICA1OCwgICAxODks
ICAgMTkwLCAgIDI1MCwgICAgNzEsICAgIDYwLCAgIDI2MCwgICAgNzEsCisgICAgICA3NCwgICAy
MDEsICAgIDcxLCAgICA4MSwgICAgODEsICAgIDgxLCAgICA3MSwgICAgNzQsICAgIDc2LCAgICA3
MywKKyAgICAgMjY3LCAgICA3MSwgICAgNzMsICAgMjc1LCAgIDI1MCwgICAgNDAsICAgIDc1LCAg
ICA3MSwgICAgNzQsICAgIDc0LAorICAgICAgNzgsICAgIDc0LCAgIDI4NCwgICAxNjEsICAgIDc0
LCAgICA3MSwgICAgMTYsICAgIDcyLCAgICA3NiwgICAgODEsCisgICAgICA3MiwgICAyMDEsICAg
Mjk0LCAgIDI1NSwgICAgODEsICAgMTkxLCAgICA4MCwgICAxNzMsICAgMTkyLCAgICA1OSwKKyAg
ICAgMjk3LCAgIDE5MywgICAyMTIsICAgMTgxLCAgIDE4MiwgICAxODMsICAgMTg0LCAgIDE4NSwg
ICAxODYsICAgMTg3LAorICAgICAxODgsICAgMTg5LCAgIDE5MCwgICAxOTEsICAgMTkyLCAgIDE5
MywgICAgODUsICAgIDY2LCAgICA4NSwgICAgIDUsCisgICAgIDEzMCwgICAyOTUsICAgMjU3LCAg
IDIxMiwgICAyNTEsICAgMjU3LCAgIDI3NSwgICAgNDYsICAgIC0xLCAgICAtMSwKKyAgICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMjc4LCAgIDIyMywgICAy
NTYsICAgMjU3LCAgICAtMSwgICAgLTEsCisgICAgIDI2MCwgICAyNjEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAyNzUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LAorICAgICAgLTEsICAgIC0xLCAgIDI1MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAyOTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgMjk1LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwKKyAgICAgICA3LCAgICAgOCwgICAg
IDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIC0xLAorICAg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAg
ICAyNSwgICAgMjYsCisgICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMy
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzNiwKKyAgICAgIDM3LCAgICAzOCwgICAgMzksICAg
IDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAorICAgICAgNDcs
ICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMsICAgIC0xLCAgICAtMSwg
ICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzUsICAgIDc2LAorICAgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDgxLCAgICA4MiwgICAgODMsICAgIC0xLCAgICA4NSwgICAgIDMs
CisgICAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAg
MTEsICAgIDEyLCAgICAxMywKKyAgICAgIDE0LCAgICAxNSwgICAgLTEsICAgIDE3LCAgICAxOCwg
ICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLAorICAgICAgMjQsICAgIDI1LCAgICAy
NiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsCisgICAg
ICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAg
IDQyLCAgICA0MywKKyAgICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDks
ICAgIC0xLCAgICAtMSwgICAgNTIsICAgIDUzLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAg
ICAtMSwKKyAgICAgIC0xLCAgICA3NSwgICAgNzYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICA4MSwgICAgODIsICAgIDgzLAorICAgICAgLTEsICAgIDg1LCAgICAgMywgICAgIDQsICAg
ICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsCisgICAgICAxMSwgICAgMTIs
ICAgIDEzLCAgICAxNCwgICAgMTUsICAgIC0xLCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwK
KyAgICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDMwLAorICAgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsCisgICAgICA0MSwgICAgNDIsICAgIDQz
LCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwKKyAgICAg
IC0xLCAgICA1MiwgICAgNTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICA3MSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgNzUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIDgxLCAg
ICA4MiwgICAgODMsICAgIC0xLCAgICA4NSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAg
ICA3LAorICAgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQs
ICAgIDE1LCAgICAtMSwgICAgMTcsCisgICAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAg
MjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywKKyAgICAgIDI4LCAgICAyOSwg
ICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDM3LAor
ICAgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1
LCAgICA0NiwgICAgNDcsCisgICAgICA0OCwgICAgNDksICAgIC0xLCAgICAtMSwgICAgNTIsICAg
IDUzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc1LCAgICAt
MSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MSwgICAgODIsICAgIDgzLCAg
ICAtMSwgICAgODUsICAgICAzLCAgICAgNCwKKyAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4
LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LAorICAgICAgMTUsICAg
IC0xLCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAg
MjQsCisgICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwg
ICAgMzIsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAz
OSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LAorICAgICAgNDUsICAgIDQ2LCAg
ICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsCisg
ICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgODEsICAgIDgyLCAgICA4MywgICAgLTEsCisgICAgICA4
NSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEw
LCAgICAxMSwKKyAgICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDIxLAorICAgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUs
ICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCisgICAgICAzMiwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0
MSwKKyAgICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAg
ICA0OSwgICAgLTEsICAgIC0xLAorICAgICAgNTIsICAgIDUzLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MSwKKyAg
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDgxLAorICAgICAgODIsICAgIDgzLCAgICAtMSwgICAgODUsICAgICAzLCAgICAg
NCwgICAgIDUsICAgICA2LCAgICAtMSwgICAgIDgsCisgICAgICAgOSwgICAgMTAsICAgIDExLCAg
ICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0x
LCAgICAtMSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcs
ICAgIDI4LAorICAgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDM2LCAgICAzNywgICAgMzgsCisgICAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0Miwg
ICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwKKyAgICAgIDQ5LCAgICAt
MSwgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDgyLCAgICA4MywgICAgLTEsICAgIDg1LCAgICAyMSwgICAgMjIsICAgIDIzLAorICAg
ICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAg
ICAzMiwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5
LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywKKyAgICAgIDQ0LCAgICA0NSwgICAgNDYsICAg
IDQ3LCAgICA0OCwgICAgNDksICAgIC0xLCAgICAtMSwgICAgNTIsICAgIDUzLAorICAgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgNzEsICAgIC0xLCAgICAtMSwKKyAgICAgIDc0LCAgICAxMCwgICAgMTEsICAgIDEyLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODIsICAgIDgzLAorICAgICAgLTEsICAgIDg1
LCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgs
CisgICAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAzOCwKKyAgICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0Mywg
ICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LAorICAgICAgNDksICAgIC0xLCAgICAt
MSwgICAgNTIsICAgIDUzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICA4MSwgICAg
ODIsICAgIDgzLCAgICAtMSwgICAgODUsICAgIDIxLCAgICAyMiwgICAgMjMsCisgICAgICAyNCwg
ICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAg
ICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0x
LCAgICA0MSwgICAgNDIsICAgIDQzLAorICAgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAg
IDQ4LCAgICA0OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMsCisgICAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3
MSwgICAgLTEsICAgIC0xLAorICAgICAgNzQsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICA4MiwgICAgODMsCisgICAgICAtMSwgICAgODUsICAgIDIx
LCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwKKyAgICAg
IDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDM4LAorICAgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwg
ICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsCisgICAgICA0OSwgICAgLTEsICAgIC0xLCAgICA1
MiwgICAgNTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLAorICAgICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTAs
ICAgIDExLCAgICAxMiwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MiwgICAg
ODMsICAgIC0xLCAgICA4NSwgICAgMjEsICAgIDIyLCAgICAyMywKKyAgICAgIDI0LCAgICAyNSwg
ICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLAor
ICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQx
LCAgICA0MiwgICAgNDMsCisgICAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAg
IDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywKKyAgICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAg
NCwgICAgIDUsCisgICAgICAgNiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTAsICAgIDExLCAg
ICAxMiwgICAgLTEsICAgIDgyLCAgICA4MywKKyAgICAgIC0xLCAgICA4NSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LAorICAgICAgMjYsICAg
IDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAg
LTEsCisgICAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0Miwg
ICAgNDMsICAgIDQ0LCAgICAtMSwKKyAgICAgIDQ2LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAxMCwgICAgMTEsICAgIDEyLAorICAgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsCisg
ICAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAs
ICAgIDMxLCAgICAzMiwKKyAgICAgIDc2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
MzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLAorICAgICAgNDMsICAgIDQ0LCAgICAtMSwg
ICAgNDYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAgMCwgICAgLTEsICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1
LCAgICAgNiwKKyAgICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzYs
ICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCisgICAgICAyNywgICAg
MjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAz
NiwKKyAgICAgIDM3LCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQzLCAg
ICA0NCwgICAgLTEsICAgIDQ2LAorICAgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3
LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsCisgICAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIxLCAgICAyMiwKKyAg
ICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwg
ICAgMzEsICAgIDMyLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDM3LCAgICAz
OCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsCisgICAgICA0MywgICAgNDQsICAgIC0xLCAg
ICA0NiwgICAgIDQsICAgICA1LCAgICAgNiwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIDEw
LCAgICAxMSwgICAgMTIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLAorICAgICAgLTEsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAg
MjYsICAgIDI3LCAgICAyOCwgICAgMjksCisgICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwKKyAgICAgIC0xLCAgICA0
MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgLTEsICAgIDQ2LCAgICAxMCwgICAgMTEsICAgIDEy
LAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAyMSwgICAgMjIsCisgICAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcs
ICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwKKyAgICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLAorICAg
ICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAg
ICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIx
LCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwKKyAgICAgIDI2LCAgICAyNywgICAgMjgsICAg
IDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEs
ICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwg
ICAgLTEsCisgICAgICA0NgorfTsKKworLyogWVlTVE9TW1NUQVRFLU5VTV0gLS0gVGhlIChpbnRl
cm5hbCBudW1iZXIgb2YgdGhlKSBhY2Nlc3NpbmcKKyAgIHN5bWJvbCBvZiBzdGF0ZSBTVEFURS1O
VU0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXN0b3NbXSA9Cit7CisgICAgICAg
MCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEw
LCAgICAxMSwKKyAgICAgIDEyLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LAorICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzYs
ICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQxLCAgICA0MiwgICAgNDMsCisgICAgICA0NCwgICAg
NDYsICAgMTI2LCAgIDEyNywgICAxMjgsICAgMTI5LCAgIDEzMCwgICAxMzUsICAgMTM2LCAgIDEz
NywKKyAgICAgMTM4LCAgIDEzOSwgICAxNDAsICAgMTQxLCAgIDE0MiwgICAxNDMsICAgMTc1LCAg
IDE3NiwgICAxNzcsICAgIDM3LAorICAgICAgNDUsICAgMTQwLCAgICA0NSwgICAgNDYsICAgIDc1
LCAgICA5NiwgICAgODEsICAgMTc4LCAgICA3MiwgICAgNzgsCisgICAgICAgMywgICAgMzMsICAg
IDM0LCAgICAzNSwgICAxMzIsICAgMTMzLCAgIDEzOCwgICAgNzgsICAgIDgxLCAgICA0NSwKKyAg
ICAgIDk2LCAgIDEzOSwgICAxNDEsICAgIDczLCAgICAgMCwgICAxNzYsICAgMTQxLCAgIDE0NSwg
ICAgNzUsICAgIDc1LAorICAgICAxNjEsICAgMTMyLCAgIDEzMSwgICAxMzQsICAgMTM5LCAgIDEz
MywgICAgOTYsICAgIDcxLCAgICA3MywgICAgODAsCisgICAgICA0NSwgICAgNDcsICAgIDQ4LCAg
ICA0OSwgICAgNTIsICAgIDUzLCAgICA3MSwgICAgODIsICAgIDgzLCAgICA4NSwKKyAgICAgIDk3
LCAgICA5OCwgICAgOTksICAgMTAxLCAgIDEwMiwgICAxMDMsICAgMTA0LCAgIDEwNSwgICAxMDYs
ICAgMTA3LAorICAgICAxMDgsICAgMTA5LCAgIDExMCwgICAxMTEsICAgMTEyLCAgIDExMywgICAx
MTQsICAgMTE1LCAgIDExNiwgICAxMTcsCisgICAgIDExOCwgICAxMTksICAgMTIwLCAgIDEyMSwg
ICAxMjUsICAgMTQyLCAgICA4MSwgICAxMzksICAgMTQ2LCAgIDE0NywKKyAgICAgMTQ0LCAgICAx
MywgICAgMTQsICAgIDE1LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgNDAsICAgIDc1
LAorICAgICAgNzYsICAgIDgxLCAgIDEwOCwgICAxMjEsICAgMTIyLCAgIDEyNCwgICAxMjYsICAg
MTI3LCAgIDE0MiwgICAxNTEsCisgICAgIDE1MiwgICAxNTMsICAgMTU0LCAgIDE2MiwgICAxNjMs
ICAgMTY0LCAgIDE2NywgICAxNzQsICAgIDk2LCAgIDEzMSwKKyAgICAgMTM0LCAgICA3MywgICAg
ODAsICAgIDc0LCAgIDEyNSwgICAxMjIsICAgMTUwLCAgIDEwOCwgICAxMDgsICAgMTI0LAorICAg
ICAgNTIsICAgIDUzLCAgICA3MywgICAgNzcsICAgIDcyLCAgICA3MiwgICAgNzgsICAgIDM5LCAg
IDEyMiwgICAgNzEsCisgICAgIDEwOCwgICAgODYsICAgIDg3LCAgICA4MywgICAgODUsICAgIDU0
LCAgICA1NSwgICAgODksICAgIDkwLCAgICA1NiwKKyAgICAgIDU3LCAgICA1OCwgICAgNjAsICAg
IDU5LCAgICA5NCwgICAgNzQsICAgIDk2LCAgIDE0OCwgICAxNDksICAgIDc2LAorICAgICAxNDcs
ICAgMTQ2LCAgICA4MSwgICAgODEsICAgMTY5LCAgICA3MSwgICAgNzEsICAgIDgxLCAgICA4MSwg
ICAxMjQsCisgICAgICA3MSwgICAgNzYsICAgMTU1LCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA3
MCwgICAgODAsICAgMTIzLCAgICA3OCwKKyAgICAgIDgxLCAgICA3NiwgICAxNTIsICAgIDczLCAg
ICA3NCwgICAxMjUsICAgMTUwLCAgICA3NCwgICAgNzIsICAgMTAwLAorICAgICAxMjQsICAgIDQ1
LCAgICA0NiwgICAgOTYsICAgMTAzLCAgIDEyMiwgICAxMDgsICAgMTA4LCAgIDExMCwgICAxMTAs
CisgICAgIDExMiwgICAxMTIsICAgMTEyLCAgIDExMiwgICAxMTMsICAgMTEzLCAgIDExNywgICAx
MTgsICAgMTE5LCAgIDEyNCwKKyAgICAgIDczLCAgICA3OCwgICAgODEsICAgIDc2LCAgIDE1OCwg
ICAxNTksICAgMTYwLCAgIDE3MCwgICAxMjQsICAgIDgxLAorICAgICAxNjgsICAgMTYyLCAgIDEy
MiwgICAxMjIsICAgMTI1LCAgICA3NCwgICAgNzQsICAgIDc5LCAgIDEyNSwgICAxNDksCisgICAg
ICA0MCwgICAxNjEsICAgMTUzLCAgIDE1MSwgICAxNjMsICAgMTcxLCAgICA3MiwgICAxMjQsICAg
MTM3LCAgIDE2NiwKKyAgICAgMTU2LCAgICA3NCwgICAxMjIsICAgIDc0LCAgICA3MSwgICAxNjYs
ICAgMTcyLCAgIDE3MywgICAxNTgsICAgMTY1LAorICAgICAgOTYsICAgIDcyLCAgICA3NiwgICAx
MjQsICAgIDgxLCAgICA3MiwgICAgMTYsICAgIDgwLCAgIDE1MywgICAxNTcsCisgICAgIDE2MSwg
ICAgNzIsICAgMTI0LCAgIDE1NywgICAxNTgsICAgMTUwLCAgICA4MQorfTsKKworI2RlZmluZSB5
eWVycm9rCQkoeXllcnJzdGF0dXMgPSAwKQorI2RlZmluZSB5eWNsZWFyaW4JKHl5Y2hhciA9IFlZ
RU1QVFkpCisjZGVmaW5lIFlZRU1QVFkJCSgtMikKKyNkZWZpbmUgWVlFT0YJCTAKKworI2RlZmlu
ZSBZWUFDQ0VQVAlnb3RvIHl5YWNjZXB0bGFiCisjZGVmaW5lIFlZQUJPUlQJCWdvdG8geXlhYm9y
dGxhYgorI2RlZmluZSBZWUVSUk9SCQlnb3RvIHl5ZXJyb3JsYWIKKworCisvKiBMaWtlIFlZRVJS
T1IgZXhjZXB0IGRvIGNhbGwgeXllcnJvci4gIFRoaXMgcmVtYWlucyBoZXJlIHRlbXBvcmFyaWx5
CisgICB0byBlYXNlIHRoZSB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgbWVhbmluZyBvZiBZWUVSUk9S
LCBmb3IgR0NDLgorICAgT25jZSBHQ0MgdmVyc2lvbiAyIGhhcyBzdXBwbGFudGVkIHZlcnNpb24g
MSwgdGhpcyBjYW4gZ28uICBIb3dldmVyLAorICAgWVlGQUlMIGFwcGVhcnMgdG8gYmUgaW4gdXNl
LiAgTmV2ZXJ0aGVsZXNzLCBpdCBpcyBmb3JtYWxseSBkZXByZWNhdGVkCisgICBpbiBCaXNvbiAy
LjQuMidzIE5FV1MgZW50cnksIHdoZXJlIGEgcGxhbiB0byBwaGFzZSBpdCBvdXQgaXMKKyAgIGRp
c2N1c3NlZC4gICovCisKKyNkZWZpbmUgWVlGQUlMCQlnb3RvIHl5ZXJybGFiCisjaWYgZGVmaW5l
ZCBZWUZBSUwKKyAgLyogVGhpcyBpcyBoZXJlIHRvIHN1cHByZXNzIHdhcm5pbmdzIGZyb20gdGhl
IEdDQyBjcHAncworICAgICAtV3VudXNlZC1tYWNyb3MuICBOb3JtYWxseSB3ZSBkb24ndCB3b3Jy
eSBhYm91dCB0aGF0IHdhcm5pbmcsIGJ1dAorICAgICBzb21lIHVzZXJzIGRvLCBhbmQgd2Ugd2Fu
dCB0byBtYWtlIGl0IGVhc3kgZm9yIHVzZXJzIHRvIHJlbW92ZQorICAgICBZWUZBSUwgdXNlcywg
d2hpY2ggd2lsbCBwcm9kdWNlIHdhcm5pbmdzIGZyb20gQmlzb24gMi41LiAgKi8KKyNlbmRpZgor
CisjZGVmaW5lIFlZUkVDT1ZFUklORygpICAoISF5eWVycnN0YXR1cykKKworI2RlZmluZSBZWUJB
Q0tVUChUb2tlbiwgVmFsdWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2Rv
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHl5Y2hhciA9IChUb2tlbik7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB5eWx2YWwgPSAoVmFs
dWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgWVlQ
T1BTVEFDSyAoeXlsZW4pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgIHl5c3RhdGUgPSAqeXlzc3A7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICBnb3RvIHl5YmFja3VwOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZWxzZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
eXllcnJvciAoJnl5bGxvYywgY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNr
IHVwIikpOyBcCisgICAgICBZWUVSUk9SOwkJCQkJCQlcCisgICAgfQkJCQkJCQkJXAord2hpbGUg
KFlZSUQgKDApKQorCisvKiBFcnJvciB0b2tlbiBudW1iZXIgKi8KKyNkZWZpbmUgWVlURVJST1IJ
MQorI2RlZmluZSBZWUVSUkNPREUJMjU2CisKKworLyogWVlMTE9DX0RFRkFVTFQgLS0gU2V0IENV
UlJFTlQgdG8gc3BhbiBmcm9tIFJIU1sxXSB0byBSSFNbTl0uCisgICBJZiBOIGlzIDAsIHRoZW4g
c2V0IENVUlJFTlQgdG8gdGhlIGVtcHR5IGxvY2F0aW9uIHdoaWNoIGVuZHMKKyAgIHRoZSBwcmV2
aW91cyBzeW1ib2w6IFJIU1swXSAoYWx3YXlzIGRlZmluZWQpLiAgKi8KKworI2lmbmRlZiBZWUxM
T0NfREVGQVVMVAorIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgaWYg
KFlZSUQgKE4pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChDdXJyZW50KS5maXJzdF9saW5l
ICAgPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9saW5lOyAgICAgICAgXAorICAgICAgICAgIChD
dXJyZW50KS5maXJzdF9jb2x1bW4gPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9jb2x1bW47ICAg
ICAgXAorICAgICAgICAgIChDdXJyZW50KS5sYXN0X2xpbmUgICAgPSBZWVJIU0xPQyAoUmhzLCBO
KS5sYXN0X2xpbmU7ICAgICAgICAgXAorICAgICAgICAgIChDdXJyZW50KS5sYXN0X2NvbHVtbiAg
PSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2NvbHVtbjsgICAgICAgXAorICAgICAgICB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChDdXJyZW50
KS5maXJzdF9saW5lICAgPSAoQ3VycmVudCkubGFzdF9saW5lICAgPSAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9saW5lOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgIChDdXJyZW50KS5maXJzdF9jb2x1bW4gPSAoQ3Vy
cmVudCkubGFzdF9jb2x1bW4gPSAgICAgICAgICAgICAgXAorICAgICAgICAgICAgWVlSSFNMT0Mg
KFJocywgMCkubGFzdF9jb2x1bW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIHdoaWxlIChZWUlEICgwKSkKKyNlbmRpZgorCisjZGVmaW5lIFlZ
UkhTTE9DKFJocywgSykgKChSaHMpW0tdKQorCisKKy8qIFlZX0xPQ0FUSU9OX1BSSU5UIC0tIFBy
aW50IHRoZSBsb2NhdGlvbiBvbiB0aGUgc3RyZWFtLgorICAgVGhpcyBtYWNybyB3YXMgbm90IG1h
bmRhdGVkIG9yaWdpbmFsbHk6IGRlZmluZSBvbmx5IGlmIHdlIGtub3cKKyAgIHdlIHdvbid0IGJy
ZWFrIHVzZXIgY29kZTogd2hlbiB0aGVzZSBhcmUgdGhlIGxvY2F0aW9ucyB3ZSBrbm93LiAgKi8K
KworI2lmbmRlZiBZWV9MT0NBVElPTl9QUklOVAorIyBpZiBkZWZpbmVkIFlZTFRZUEVfSVNfVFJJ
VklBTCAmJiBZWUxUWVBFX0lTX1RSSVZJQUwKKworLyogUHJpbnQgKllZTE9DUCBvbiBZWU8uICBQ
cml2YXRlLCBkbyBub3QgcmVseSBvbiBpdHMgZXhpc3RlbmNlLiAqLworCitfX2F0dHJpYnV0ZV9f
KChfX3VudXNlZF9fKSkKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19G
VU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIp
CitzdGF0aWMgdW5zaWduZWQKK3l5X2xvY2F0aW9uX3ByaW50XyAoRklMRSAqeXlvLCBZWUxUWVBF
IGNvbnN0ICogY29uc3QgeXlsb2NwKQorI2Vsc2UKK3N0YXRpYyB1bnNpZ25lZAoreXlfbG9jYXRp
b25fcHJpbnRfICh5eW8sIHl5bG9jcCkKKyAgICBGSUxFICp5eW87CisgICAgWVlMVFlQRSBjb25z
dCAqIGNvbnN0IHl5bG9jcDsKKyNlbmRpZgoreworICB1bnNpZ25lZCByZXMgPSAwOworICBpbnQg
ZW5kX2NvbCA9IDAgIT0geXlsb2NwLT5sYXN0X2NvbHVtbiA/IHl5bG9jcC0+bGFzdF9jb2x1bW4g
LSAxIDogMDsKKyAgaWYgKDAgPD0geXlsb2NwLT5maXJzdF9saW5lKQorICAgIHsKKyAgICAgIHJl
cyArPSBmcHJpbnRmICh5eW8sICIlZCIsIHl5bG9jcC0+Zmlyc3RfbGluZSk7CisgICAgICBpZiAo
MCA8PSB5eWxvY3AtPmZpcnN0X2NvbHVtbikKKyAgICAgICAgcmVzICs9IGZwcmludGYgKHl5bywg
Ii4lZCIsIHl5bG9jcC0+Zmlyc3RfY29sdW1uKTsKKyAgICB9CisgIGlmICgwIDw9IHl5bG9jcC0+
bGFzdF9saW5lKQorICAgIHsKKyAgICAgIGlmICh5eWxvY3AtPmZpcnN0X2xpbmUgPCB5eWxvY3At
Pmxhc3RfbGluZSkKKyAgICAgICAgeworICAgICAgICAgIHJlcyArPSBmcHJpbnRmICh5eW8sICIt
JWQiLCB5eWxvY3AtPmxhc3RfbGluZSk7CisgICAgICAgICAgaWYgKDAgPD0gZW5kX2NvbCkKKyAg
ICAgICAgICAgIHJlcyArPSBmcHJpbnRmICh5eW8sICIuJWQiLCBlbmRfY29sKTsKKyAgICAgICAg
fQorICAgICAgZWxzZSBpZiAoMCA8PSBlbmRfY29sICYmIHl5bG9jcC0+Zmlyc3RfY29sdW1uIDwg
ZW5kX2NvbCkKKyAgICAgICAgcmVzICs9IGZwcmludGYgKHl5bywgIi0lZCIsIGVuZF9jb2wpOwor
ICAgIH0KKyAgcmV0dXJuIHJlczsKKyB9CisKKyMgIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChG
aWxlLCBMb2MpICAgICAgICAgIFwKKyAgeXlfbG9jYXRpb25fcHJpbnRfIChGaWxlLCAmKExvYykp
CisKKyMgZWxzZQorIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykgKCh2b2lk
KSAwKQorIyBlbmRpZgorI2VuZGlmCisKKworLyogWVlMRVggLS0gY2FsbGluZyBgeXlsZXgnIHdp
dGggdGhlIHJpZ2h0IGFyZ3VtZW50cy4gICovCisjaWZkZWYgWVlMRVhfUEFSQU0KKyMgZGVmaW5l
IFlZTEVYIHl5bGV4ICgmeXlsdmFsLCAmeXlsbG9jLCBZWUxFWF9QQVJBTSkKKyNlbHNlCisjIGRl
ZmluZSBZWUxFWCB5eWxleCAoJnl5bHZhbCwgJnl5bGxvYykKKyNlbmRpZgorCisvKiBFbmFibGUg
ZGVidWdnaW5nIGlmIHJlcXVlc3RlZC4gICovCisjaWYgWVlERUJVRworCisjIGlmbmRlZiBZWUZQ
UklOVEYKKyMgIGluY2x1ZGUgPHN0ZGlvLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BB
Q0UgKi8KKyMgIGRlZmluZSBZWUZQUklOVEYgZnByaW50ZgorIyBlbmRpZgorCisjIGRlZmluZSBZ
WURQUklOVEYoQXJncykJCQlcCitkbyB7CQkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJCVwKKyAg
ICBZWUZQUklOVEYgQXJnczsJCQkJXAorfSB3aGlsZSAoWVlJRCAoMCkpCisKKyMgZGVmaW5lIFlZ
X1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKQkJCSAgXAorZG8gewkJ
CQkJCQkJCSAgXAorICBpZiAoeXlkZWJ1ZykJCQkJCQkJCSAgXAorICAgIHsJCQkJCQkJCQkgIFwK
KyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgVGl0bGUpOwkJCQkJICBcCisgICAgICB5
eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwJCQkJCQkgIFwKKwkJICBUeXBlLCBWYWx1ZSwgTG9jYXRp
b24sIGNvbnRleHQpOyBcCisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CQkJCQkJICBc
CisgICAgfQkJCQkJCQkJCSAgXAorfSB3aGlsZSAoWVlJRCAoMCkpCisKKworLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUHJpbnQgdGhpcyBzeW1ib2wgb24gWVlPVVRQVVQu
ICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKkFSR1NVU0VEKi8K
KyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8
fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAor
eXlfc3ltYm9sX3ZhbHVlX3ByaW50IChGSUxFICp5eW91dHB1dCwgaW50IHl5dHlwZSwgWVlTVFlQ
RSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwLCBZWUxUWVBFIGNvbnN0ICogY29uc3QgeXlsb2NhdGlv
bnAsIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3N5bWJv
bF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wLCBj
b250ZXh0KQorICAgIEZJTEUgKnl5b3V0cHV0OworICAgIGludCB5eXR5cGU7CisgICAgWVlTVFlQ
RSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOworICAgIFlZTFRZUEUgY29uc3QgKiBjb25zdCB5eWxv
Y2F0aW9ucDsKKyAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0OworI2VuZGlmCit7CisgIEZJTEUg
Knl5byA9IHl5b3V0cHV0OworICBZWVVTRSAoeXlvKTsKKyAgaWYgKCF5eXZhbHVlcCkKKyAgICBy
ZXR1cm47CisgIFlZVVNFICh5eWxvY2F0aW9ucCk7CisgIFlZVVNFIChjb250ZXh0KTsKKyMgaWZk
ZWYgWVlQUklOVAorICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQorICAgIFlZUFJJTlQgKHl5b3V0
cHV0LCB5eXRva251bVt5eXR5cGVdLCAqeXl2YWx1ZXApOworIyBlbHNlCisgIFlZVVNFICh5eW91
dHB1dCk7CisjIGVuZGlmCisgIFlZVVNFICh5eXR5cGUpOworfQorCisKKy8qLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAg
fAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIChkZWZpbmVkIF9f
U1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1
c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xfcHJpbnQg
KEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1
ZXAsIFlZTFRZUEUgY29uc3QgKiBjb25zdCB5eWxvY2F0aW9ucCwgVFBhcnNlQ29udGV4dCogY29u
dGV4dCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ByaW50ICh5eW91dHB1dCwgeXl0
eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAsIGNvbnRleHQpCisgICAgRklMRSAqeXlvdXRwdXQ7
CisgICAgaW50IHl5dHlwZTsKKyAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7Cisg
ICAgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jYXRpb25wOworICAgIFRQYXJzZUNvbnRleHQq
IGNvbnRleHQ7CisjZW5kaWYKK3sKKyAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKKyAgICBZWUZQ
UklOVEYgKHl5b3V0cHV0LCAidG9rZW4gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7CisgIGVsc2UK
KyAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAibnRlcm0gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7
CisKKyAgWVlfTE9DQVRJT05fUFJJTlQgKHl5b3V0cHV0LCAqeXlsb2NhdGlvbnApOworICBZWUZQ
UklOVEYgKHl5b3V0cHV0LCAiOiAiKTsKKyAgeXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1
dCwgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAsIGNvbnRleHQpOworICBZWUZQUklOVEYg
KHl5b3V0cHV0LCAiKSIpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlfc3RhY2tfcHJpbnQgLS0g
UHJpbnQgdGhlIHN0YXRlIHN0YWNrIGZyb20gaXRzIEJPVFRPTSB1cCB0byBpdHMgfAorfCBUT1Ag
KGluY2x1ZGVkKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQg
X19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBf
TVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9zdGFja19wcmludCAoeXl0eXBlX2ludDE2ICp5eWJv
dHRvbSwgeXl0eXBlX2ludDE2ICp5eXRvcCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfc3RhY2tf
cHJpbnQgKHl5Ym90dG9tLCB5eXRvcCkKKyAgICB5eXR5cGVfaW50MTYgKnl5Ym90dG9tOworICAg
IHl5dHlwZV9pbnQxNiAqeXl0b3A7CisjZW5kaWYKK3sKKyAgWVlGUFJJTlRGIChzdGRlcnIsICJT
dGFjayBub3ciKTsKKyAgZm9yICg7IHl5Ym90dG9tIDw9IHl5dG9wOyB5eWJvdHRvbSsrKQorICAg
IHsKKyAgICAgIGludCB5eWJvdCA9ICp5eWJvdHRvbTsKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJy
LCAiICVkIiwgeXlib3QpOworICAgIH0KKyAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOworfQor
CisjIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkJCQkJXAorZG8gewkJCQkJCQkJ
XAorICBpZiAoeXlkZWJ1ZykJCQkJCQkJXAorICAgIHl5X3N0YWNrX3ByaW50ICgoQm90dG9tKSwg
KFRvcCkpOwkJCQlcCit9IHdoaWxlIChZWUlEICgwKSkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUmVwb3J0IHRoYXQgdGhlIFlZUlVM
RSBpcyBnb2luZyB0byBiZSByZWR1Y2VkLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZp
bmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmlu
ZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlfcmVkdWNlX3ByaW50IChZWVNUWVBFICp5eXZz
cCwgWVlMVFlQRSAqeXlsc3AsIGludCB5eXJ1bGUsIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpCisj
ZWxzZQorc3RhdGljIHZvaWQKK3l5X3JlZHVjZV9wcmludCAoeXl2c3AsIHl5bHNwLCB5eXJ1bGUs
IGNvbnRleHQpCisgICAgWVlTVFlQRSAqeXl2c3A7CisgICAgWVlMVFlQRSAqeXlsc3A7CisgICAg
aW50IHl5cnVsZTsKKyAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0OworI2VuZGlmCit7CisgIGlu
dCB5eW5yaHMgPSB5eXIyW3l5cnVsZV07CisgIGludCB5eWk7CisgIHVuc2lnbmVkIGxvbmcgaW50
IHl5bG5vID0geXlybGluZVt5eXJ1bGVdOworICBZWUZQUklOVEYgKHN0ZGVyciwgIlJlZHVjaW5n
IHN0YWNrIGJ5IHJ1bGUgJWQgKGxpbmUgJWx1KTpcbiIsCisJICAgICB5eXJ1bGUgLSAxLCB5eWxu
byk7CisgIC8qIFRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQuICAqLworICBmb3IgKHl5aSA9IDA7
IHl5aSA8IHl5bnJoczsgeXlpKyspCisgICAgeworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIg
ICAkJWQgPSAiLCB5eWkgKyAxKTsKKyAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJo
c1t5eXByaHNbeXlydWxlXSArIHl5aV0sCisJCSAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5
eW5yaHMpXSkKKwkJICAgICAgICwgJih5eWxzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0pCQkgICAg
ICAgLCBjb250ZXh0KTsKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKKyAgICB9Cit9
CisKKyMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQkJXAorZG8gewkJCQkJXAorICBpZiAo
eXlkZWJ1ZykJCQkJXAorICAgIHl5X3JlZHVjZV9wcmludCAoeXl2c3AsIHl5bHNwLCBSdWxlLCBj
b250ZXh0KTsgXAorfSB3aGlsZSAoWVlJRCAoMCkpCisKKy8qIE5vbnplcm8gbWVhbnMgcHJpbnQg
cGFyc2UgdHJhY2UuICBJdCBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQgc28gdGhhdAorICAgbXVsdGlw
bGUgcGFyc2VycyBjYW4gY29leGlzdC4gICovCitpbnQgeXlkZWJ1ZzsKKyNlbHNlIC8qICFZWURF
QlVHICovCisjIGRlZmluZSBZWURQUklOVEYoQXJncykKKyMgZGVmaW5lIFlZX1NZTUJPTF9QUklO
VChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKQorIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQo
Qm90dG9tLCBUb3ApCisjIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkKKyNlbmRpZiAvKiAh
WVlERUJVRyAqLworCisKKy8qIFlZSU5JVERFUFRIIC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFy
c2VyJ3Mgc3RhY2tzLiAgKi8KKyNpZm5kZWYJWVlJTklUREVQVEgKKyMgZGVmaW5lIFlZSU5JVERF
UFRIIDIwMAorI2VuZGlmCisKKy8qIFlZTUFYREVQVEggLS0gbWF4aW11bSBzaXplIHRoZSBzdGFj
a3MgY2FuIGdyb3cgdG8gKGVmZmVjdGl2ZSBvbmx5CisgICBpZiB0aGUgYnVpbHQtaW4gc3RhY2sg
ZXh0ZW5zaW9uIG1ldGhvZCBpcyB1c2VkKS4KKworICAgRG8gbm90IG1ha2UgdGhpcyB2YWx1ZSB0
b28gbGFyZ2U7IHRoZSByZXN1bHRzIGFyZSB1bmRlZmluZWQgaWYKKyAgIFlZU1RBQ0tfQUxMT0Nf
TUFYSU1VTSA8IFlZU1RBQ0tfQllURVMgKFlZTUFYREVQVEgpCisgICBldmFsdWF0ZWQgd2l0aCBp
bmZpbml0ZS1wcmVjaXNpb24gaW50ZWdlciBhcml0aG1ldGljLiAgKi8KKworI2lmbmRlZiBZWU1B
WERFUFRICisjIGRlZmluZSBZWU1BWERFUFRIIDEwMDAwCisjZW5kaWYKKworCisjaWYgWVlFUlJP
Ul9WRVJCT1NFCisKKyMgaWZuZGVmIHl5c3RybGVuCisjICBpZiBkZWZpbmVkIF9fR0xJQkNfXyAm
JiBkZWZpbmVkIF9TVFJJTkdfSAorIyAgIGRlZmluZSB5eXN0cmxlbiBzdHJsZW4KKyMgIGVsc2UK
Ky8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIFlZU1RSLiAgKi8KKyNpZiAoZGVmaW5lZCBfX1NURENf
XyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVz
IHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgWVlTSVpFX1QKK3l5c3RybGVuIChjb25zdCBj
aGFyICp5eXN0cikKKyNlbHNlCitzdGF0aWMgWVlTSVpFX1QKK3l5c3RybGVuICh5eXN0cikKKyAg
ICBjb25zdCBjaGFyICp5eXN0cjsKKyNlbmRpZgoreworICBZWVNJWkVfVCB5eWxlbjsKKyAgZm9y
ICh5eWxlbiA9IDA7IHl5c3RyW3l5bGVuXTsgeXlsZW4rKykKKyAgICBjb250aW51ZTsKKyAgcmV0
dXJuIHl5bGVuOworfQorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZm5kZWYgeXlzdHBjcHkKKyMg
IGlmIGRlZmluZWQgX19HTElCQ19fICYmIGRlZmluZWQgX1NUUklOR19IICYmIGRlZmluZWQgX0dO
VV9TT1VSQ0UKKyMgICBkZWZpbmUgeXlzdHBjcHkgc3RwY3B5CisjICBlbHNlCisvKiBDb3B5IFlZ
U1JDIHRvIFlZREVTVCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSB0ZXJtaW5hdGluZyAn
XDAnIGluCisgICBZWURFU1QuICAqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQg
X19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBf
TVNDX1ZFUikKK3N0YXRpYyBjaGFyICoKK3l5c3RwY3B5IChjaGFyICp5eWRlc3QsIGNvbnN0IGNo
YXIgKnl5c3JjKQorI2Vsc2UKK3N0YXRpYyBjaGFyICoKK3l5c3RwY3B5ICh5eWRlc3QsIHl5c3Jj
KQorICAgIGNoYXIgKnl5ZGVzdDsKKyAgICBjb25zdCBjaGFyICp5eXNyYzsKKyNlbmRpZgorewor
ICBjaGFyICp5eWQgPSB5eWRlc3Q7CisgIGNvbnN0IGNoYXIgKnl5cyA9IHl5c3JjOworCisgIHdo
aWxlICgoKnl5ZCsrID0gKnl5cysrKSAhPSAnXDAnKQorICAgIGNvbnRpbnVlOworCisgIHJldHVy
biB5eWQgLSAxOworfQorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZm5kZWYgeXl0bmFtZXJyCisv
KiBDb3B5IHRvIFlZUkVTIHRoZSBjb250ZW50cyBvZiBZWVNUUiBhZnRlciBzdHJpcHBpbmcgYXdh
eSB1bm5lY2Vzc2FyeQorICAgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcywgc28gdGhhdCBpdCdzIHN1
aXRhYmxlIGZvciB5eWVycm9yLiAgVGhlCisgICBoZXVyaXN0aWMgaXMgdGhhdCBkb3VibGUtcXVv
dGluZyBpcyB1bm5lY2Vzc2FyeSB1bmxlc3MgdGhlIHN0cmluZworICAgY29udGFpbnMgYW4gYXBv
c3Ryb3BoZSwgYSBjb21tYSwgb3IgYmFja3NsYXNoIChvdGhlciB0aGFuCisgICBiYWNrc2xhc2gt
YmFja3NsYXNoKS4gIFlZU1RSIGlzIHRha2VuIGZyb20geXl0bmFtZS4gIElmIFlZUkVTIGlzCisg
ICBudWxsLCBkbyBub3QgY29weTsgaW5zdGVhZCwgcmV0dXJuIHRoZSBsZW5ndGggb2Ygd2hhdCB0
aGUgcmVzdWx0CisgICB3b3VsZCBoYXZlIGJlZW4uICAqLworc3RhdGljIFlZU0laRV9UCit5eXRu
YW1lcnIgKGNoYXIgKnl5cmVzLCBjb25zdCBjaGFyICp5eXN0cikKK3sKKyAgaWYgKCp5eXN0ciA9
PSAnIicpCisgICAgeworICAgICAgWVlTSVpFX1QgeXluID0gMDsKKyAgICAgIGNoYXIgY29uc3Qg
Knl5cCA9IHl5c3RyOworCisgICAgICBmb3IgKDs7KQorCXN3aXRjaCAoKisreXlwKQorCSAgewor
CSAgY2FzZSAnXCcnOgorCSAgY2FzZSAnLCc6CisJICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3Rl
czsKKworCSAgY2FzZSAnXFwnOgorCSAgICBpZiAoKisreXlwICE9ICdcXCcpCisJICAgICAgZ290
byBkb19ub3Rfc3RyaXBfcXVvdGVzOworCSAgICAvKiBGYWxsIHRocm91Z2guICAqLworCSAgZGVm
YXVsdDoKKwkgICAgaWYgKHl5cmVzKQorCSAgICAgIHl5cmVzW3l5bl0gPSAqeXlwOworCSAgICB5
eW4rKzsKKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgJyInOgorCSAgICBpZiAoeXlyZXMpCisJICAg
ICAgeXlyZXNbeXluXSA9ICdcMCc7CisJICAgIHJldHVybiB5eW47CisJICB9CisgICAgZG9fbm90
X3N0cmlwX3F1b3RlczogOworICAgIH0KKworICBpZiAoISB5eXJlcykKKyAgICByZXR1cm4geXlz
dHJsZW4gKHl5c3RyKTsKKworICByZXR1cm4geXlzdHBjcHkgKHl5cmVzLCB5eXN0cikgLSB5eXJl
czsKK30KKyMgZW5kaWYKKworLyogQ29weSBpbnRvICpZWU1TRywgd2hpY2ggaXMgb2Ygc2l6ZSAq
WVlNU0dfQUxMT0MsIGFuIGVycm9yIG1lc3NhZ2UKKyAgIGFib3V0IHRoZSB1bmV4cGVjdGVkIHRv
a2VuIFlZVE9LRU4gZm9yIHRoZSBzdGF0ZSBzdGFjayB3aG9zZSB0b3AgaXMKKyAgIFlZU1NQLgor
CisgICBSZXR1cm4gMCBpZiAqWVlNU0cgd2FzIHN1Y2Nlc3NmdWxseSB3cml0dGVuLiAgUmV0dXJu
IDEgaWYgKllZTVNHIGlzCisgICBub3QgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIG1lc3NhZ2Uu
ICBJbiB0aGF0IGNhc2UsIGFsc28gc2V0CisgICAqWVlNU0dfQUxMT0MgdG8gdGhlIHJlcXVpcmVk
IG51bWJlciBvZiBieXRlcy4gIFJldHVybiAyIGlmIHRoZQorICAgcmVxdWlyZWQgbnVtYmVyIG9m
IGJ5dGVzIGlzIHRvbyBsYXJnZSB0byBzdG9yZS4gICovCitzdGF0aWMgaW50Cit5eXN5bnRheF9l
cnJvciAoWVlTSVpFX1QgKnl5bXNnX2FsbG9jLCBjaGFyICoqeXltc2csCisgICAgICAgICAgICAg
ICAgeXl0eXBlX2ludDE2ICp5eXNzcCwgaW50IHl5dG9rZW4pCit7CisgIFlZU0laRV9UIHl5c2l6
ZTAgPSB5eXRuYW1lcnIgKFlZX05VTEwsIHl5dG5hbWVbeXl0b2tlbl0pOworICBZWVNJWkVfVCB5
eXNpemUgPSB5eXNpemUwOworICBlbnVtIHsgWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSA9
IDUgfTsKKyAgLyogSW50ZXJuYXRpb25hbGl6ZWQgZm9ybWF0IHN0cmluZy4gKi8KKyAgY29uc3Qg
Y2hhciAqeXlmb3JtYXQgPSBZWV9OVUxMOworICAvKiBBcmd1bWVudHMgb2YgeXlmb3JtYXQuICov
CisgIGNoYXIgY29uc3QgKnl5YXJnW1lZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU1dOworICAv
KiBOdW1iZXIgb2YgcmVwb3J0ZWQgdG9rZW5zIChvbmUgZm9yIHRoZSAidW5leHBlY3RlZCIsIG9u
ZSBwZXIKKyAgICAgImV4cGVjdGVkIikuICovCisgIGludCB5eWNvdW50ID0gMDsKKworICAvKiBU
aGVyZSBhcmUgbWFueSBwb3NzaWJpbGl0aWVzIGhlcmUgdG8gY29uc2lkZXI6CisgICAgIC0gQXNz
dW1lIFlZRkFJTCBpcyBub3QgdXNlZC4gIEl0J3MgdG9vIGZsYXdlZCB0byBjb25zaWRlci4gIFNl
ZQorICAgICAgIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hl
cy8yMDA5LTEyL21zZzAwMDI0Lmh0bWw+CisgICAgICAgZm9yIGRldGFpbHMuICBZWUVSUk9SIGlz
IGZpbmUgYXMgaXQgZG9lcyBub3QgaW52b2tlIHRoaXMKKyAgICAgICBmdW5jdGlvbi4KKyAgICAg
LSBJZiB0aGlzIHN0YXRlIGlzIGEgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgZGVmYXVsdCBhY3Rp
b24sIHRoZW4KKyAgICAgICB0aGUgb25seSB3YXkgdGhpcyBmdW5jdGlvbiB3YXMgaW52b2tlZCBp
cyBpZiB0aGUgZGVmYXVsdCBhY3Rpb24KKyAgICAgICBpcyBhbiBlcnJvciBhY3Rpb24uICBJbiB0
aGF0IGNhc2UsIGRvbid0IGNoZWNrIGZvciBleHBlY3RlZAorICAgICAgIHRva2VucyBiZWNhdXNl
IHRoZXJlIGFyZSBub25lLgorICAgICAtIFRoZSBvbmx5IHdheSB0aGVyZSBjYW4gYmUgbm8gbG9v
a2FoZWFkIHByZXNlbnQgKGluIHl5Y2hhcikgaXMgaWYKKyAgICAgICB0aGlzIHN0YXRlIGlzIGEg
Y29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgZGVmYXVsdCBhY3Rpb24uICBUaHVzLAorICAgICAgIGRl
dGVjdGluZyB0aGUgYWJzZW5jZSBvZiBhIGxvb2thaGVhZCBpcyBzdWZmaWNpZW50IHRvIGRldGVy
bWluZQorICAgICAgIHRoYXQgdGhlcmUgaXMgbm8gdW5leHBlY3RlZCBvciBleHBlY3RlZCB0b2tl
biB0byByZXBvcnQuICBJbiB0aGF0CisgICAgICAgY2FzZSwganVzdCByZXBvcnQgYSBzaW1wbGUg
InN5bnRheCBlcnJvciIuCisgICAgIC0gRG9uJ3QgYXNzdW1lIHRoZXJlIGlzbid0IGEgbG9va2Fo
ZWFkIGp1c3QgYmVjYXVzZSB0aGlzIHN0YXRlIGlzIGEKKyAgICAgICBjb25zaXN0ZW50IHN0YXRl
IHdpdGggYSBkZWZhdWx0IGFjdGlvbi4gIFRoZXJlIG1pZ2h0IGhhdmUgYmVlbiBhCisgICAgICAg
cHJldmlvdXMgaW5jb25zaXN0ZW50IHN0YXRlLCBjb25zaXN0ZW50IHN0YXRlIHdpdGggYSBub24t
ZGVmYXVsdAorICAgICAgIGFjdGlvbiwgb3IgdXNlciBzZW1hbnRpYyBhY3Rpb24gdGhhdCBtYW5p
cHVsYXRlZCB5eWNoYXIuCisgICAgIC0gT2YgY291cnNlLCB0aGUgZXhwZWN0ZWQgdG9rZW4gbGlz
dCBkZXBlbmRzIG9uIHN0YXRlcyB0byBoYXZlCisgICAgICAgY29ycmVjdCBsb29rYWhlYWQgaW5m
b3JtYXRpb24sIGFuZCBpdCBkZXBlbmRzIG9uIHRoZSBwYXJzZXIgbm90CisgICAgICAgdG8gcGVy
Zm9ybSBleHRyYSByZWR1Y3Rpb25zIGFmdGVyIGZldGNoaW5nIGEgbG9va2FoZWFkIGZyb20gdGhl
CisgICAgICAgc2Nhbm5lciBhbmQgYmVmb3JlIGRldGVjdGluZyBhIHN5bnRheCBlcnJvci4gIFRo
dXMsIHN0YXRlIG1lcmdpbmcKKyAgICAgICAoZnJvbSBMQUxSIG9yIElFTFIpIGFuZCBkZWZhdWx0
IHJlZHVjdGlvbnMgY29ycnVwdCB0aGUgZXhwZWN0ZWQKKyAgICAgICB0b2tlbiBsaXN0LiAgSG93
ZXZlciwgdGhlIGxpc3QgaXMgY29ycmVjdCBmb3IgY2Fub25pY2FsIExSIHdpdGgKKyAgICAgICBv
bmUgZXhjZXB0aW9uOiBpdCB3aWxsIHN0aWxsIGNvbnRhaW4gYW55IHRva2VuIHRoYXQgd2lsbCBu
b3QgYmUKKyAgICAgICBhY2NlcHRlZCBkdWUgdG8gYW4gZXJyb3IgYWN0aW9uIGluIGEgbGF0ZXIg
c3RhdGUuCisgICovCisgIGlmICh5eXRva2VuICE9IFlZRU1QVFkpCisgICAgeworICAgICAgaW50
IHl5biA9IHl5cGFjdFsqeXlzc3BdOworICAgICAgeXlhcmdbeXljb3VudCsrXSA9IHl5dG5hbWVb
eXl0b2tlbl07CisgICAgICBpZiAoIXl5cGFjdF92YWx1ZV9pc19kZWZhdWx0ICh5eW4pKQorICAg
ICAgICB7CisgICAgICAgICAgLyogU3RhcnQgWVlYIGF0IC1ZWU4gaWYgbmVnYXRpdmUgdG8gYXZv
aWQgbmVnYXRpdmUgaW5kZXhlcyBpbgorICAgICAgICAgICAgIFlZQ0hFQ0suICBJbiBvdGhlciB3
b3Jkcywgc2tpcCB0aGUgZmlyc3QgLVlZTiBhY3Rpb25zIGZvcgorICAgICAgICAgICAgIHRoaXMg
c3RhdGUgYmVjYXVzZSB0aGV5IGFyZSBkZWZhdWx0IGFjdGlvbnMuICAqLworICAgICAgICAgIGlu
dCB5eXhiZWdpbiA9IHl5biA8IDAgPyAteXluIDogMDsKKyAgICAgICAgICAvKiBTdGF5IHdpdGhp
biBib3VuZHMgb2YgYm90aCB5eWNoZWNrIGFuZCB5eXRuYW1lLiAgKi8KKyAgICAgICAgICBpbnQg
eXljaGVja2xpbSA9IFlZTEFTVCAtIHl5biArIDE7CisgICAgICAgICAgaW50IHl5eGVuZCA9IHl5
Y2hlY2tsaW0gPCBZWU5UT0tFTlMgPyB5eWNoZWNrbGltIDogWVlOVE9LRU5TOworICAgICAgICAg
IGludCB5eXg7CisKKyAgICAgICAgICBmb3IgKHl5eCA9IHl5eGJlZ2luOyB5eXggPCB5eXhlbmQ7
ICsreXl4KQorICAgICAgICAgICAgaWYgKHl5Y2hlY2tbeXl4ICsgeXluXSA9PSB5eXggJiYgeXl4
ICE9IFlZVEVSUk9SCisgICAgICAgICAgICAgICAgJiYgIXl5dGFibGVfdmFsdWVfaXNfZXJyb3Ig
KHl5dGFibGVbeXl4ICsgeXluXSkpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
ZiAoeXljb3VudCA9PSBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNKQorICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICB5eWNvdW50ID0gMTsKKyAgICAgICAgICAgICAg
ICAgICAgeXlzaXplID0geXlzaXplMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgeXlhcmdbeXljb3VudCsrXSA9IHl5dG5h
bWVbeXl4XTsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBZWVNJWkVfVCB5
eXNpemUxID0geXlzaXplICsgeXl0bmFtZXJyIChZWV9OVUxMLCB5eXRuYW1lW3l5eF0pOworICAg
ICAgICAgICAgICAgICAgaWYgKCEgKHl5c2l6ZSA8PSB5eXNpemUxCisgICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgeXlzaXplMSA8PSBZWVNUQUNLX0FMTE9DX01BWElNVU0pKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgICAgICAgICAgIHl5c2l6ZSA9IHl5c2l6ZTE7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgc3dpdGNoICh5eWNvdW50KQorICAgIHsKKyMgZGVmaW5lIFlZQ0FTRV8oTiwgUykgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgY2FzZSBOOiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIHl5Zm9ybWF0ID0gUzsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgIGJyZWFrCisgICAgICBZWUNBU0VfKDAsIFlZXygic3ludGF4IGVycm9yIikpOworICAgICAg
WVlDQVNFXygxLCBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIpKTsKKyAgICAgIFlZ
Q0FTRV8oMiwgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIp
KTsKKyAgICAgIFlZQ0FTRV8oMywgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4
cGVjdGluZyAlcyBvciAlcyIpKTsKKyAgICAgIFlZQ0FTRV8oNCwgWVlfKCJzeW50YXggZXJyb3Is
IHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIpKTsKKyAgICAgIFlZQ0FT
RV8oNSwgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAl
cyBvciAlcyBvciAlcyIpKTsKKyMgdW5kZWYgWVlDQVNFXworICAgIH0KKworICB7CisgICAgWVlT
SVpFX1QgeXlzaXplMSA9IHl5c2l6ZSArIHl5c3RybGVuICh5eWZvcm1hdCk7CisgICAgaWYgKCEg
KHl5c2l6ZSA8PSB5eXNpemUxICYmIHl5c2l6ZTEgPD0gWVlTVEFDS19BTExPQ19NQVhJTVVNKSkK
KyAgICAgIHJldHVybiAyOworICAgIHl5c2l6ZSA9IHl5c2l6ZTE7CisgIH0KKworICBpZiAoKnl5
bXNnX2FsbG9jIDwgeXlzaXplKQorICAgIHsKKyAgICAgICp5eW1zZ19hbGxvYyA9IDIgKiB5eXNp
emU7CisgICAgICBpZiAoISAoeXlzaXplIDw9ICp5eW1zZ19hbGxvYworICAgICAgICAgICAgICYm
ICp5eW1zZ19hbGxvYyA8PSBZWVNUQUNLX0FMTE9DX01BWElNVU0pKQorICAgICAgICAqeXltc2df
YWxsb2MgPSBZWVNUQUNLX0FMTE9DX01BWElNVU07CisgICAgICByZXR1cm4gMTsKKyAgICB9CisK
KyAgLyogQXZvaWQgc3ByaW50ZiwgYXMgdGhhdCBpbmZyaW5nZXMgb24gdGhlIHVzZXIncyBuYW1l
IHNwYWNlLgorICAgICBEb24ndCBoYXZlIHVuZGVmaW5lZCBiZWhhdmlvciBldmVuIGlmIHRoZSB0
cmFuc2xhdGlvbgorICAgICBwcm9kdWNlZCBhIHN0cmluZyB3aXRoIHRoZSB3cm9uZyBudW1iZXIg
b2YgIiVzInMuICAqLworICB7CisgICAgY2hhciAqeXlwID0gKnl5bXNnOworICAgIGludCB5eWkg
PSAwOworICAgIHdoaWxlICgoKnl5cCA9ICp5eWZvcm1hdCkgIT0gJ1wwJykKKyAgICAgIGlmICgq
eXlwID09ICclJyAmJiB5eWZvcm1hdFsxXSA9PSAncycgJiYgeXlpIDwgeXljb3VudCkKKyAgICAg
ICAgeworICAgICAgICAgIHl5cCArPSB5eXRuYW1lcnIgKHl5cCwgeXlhcmdbeXlpKytdKTsKKyAg
ICAgICAgICB5eWZvcm1hdCArPSAyOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsK
KyAgICAgICAgICB5eXArKzsKKyAgICAgICAgICB5eWZvcm1hdCsrOworICAgICAgICB9CisgIH0K
KyAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogWVlFUlJPUl9WRVJCT1NFICovCisKKy8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFJlbGVhc2UgdGhl
IG1lbW9yeSBhc3NvY2lhdGVkIHRvIHRoaXMgc3ltYm9sLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLypBUkdTVVNFRCovCisjaWYgKGRl
ZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5l
ZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5ZGVzdHJ1
Y3QgKGNvbnN0IGNoYXIgKnl5bXNnLCBpbnQgeXl0eXBlLCBZWVNUWVBFICp5eXZhbHVlcCwgWVlM
VFlQRSAqeXlsb2NhdGlvbnAsIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpCisjZWxzZQorc3RhdGlj
IHZvaWQKK3l5ZGVzdHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCwg
Y29udGV4dCkKKyAgICBjb25zdCBjaGFyICp5eW1zZzsKKyAgICBpbnQgeXl0eXBlOworICAgIFlZ
U1RZUEUgKnl5dmFsdWVwOworICAgIFlZTFRZUEUgKnl5bG9jYXRpb25wOworICAgIFRQYXJzZUNv
bnRleHQqIGNvbnRleHQ7CisjZW5kaWYKK3sKKyAgWVlVU0UgKHl5dmFsdWVwKTsKKyAgWVlVU0Ug
KHl5bG9jYXRpb25wKTsKKyAgWVlVU0UgKGNvbnRleHQpOworCisgIGlmICgheXltc2cpCisgICAg
eXltc2cgPSAiRGVsZXRpbmciOworICBZWV9TWU1CT0xfUFJJTlQgKHl5bXNnLCB5eXR5cGUsIHl5
dmFsdWVwLCB5eWxvY2F0aW9ucCk7CisKKyAgWVlVU0UgKHl5dHlwZSk7Cit9CisKKworCisKKy8q
LS0tLS0tLS0tLS4KK3wgeXlwYXJzZS4gIHwKK2AtLS0tLS0tLS0tKi8KKworI2lmZGVmIFlZUEFS
U0VfUEFSQU0KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18g
XAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitpbnQK
K3l5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pCisjZWxzZQoraW50Cit5eXBhcnNlIChZWVBB
UlNFX1BBUkFNKQorICAgIHZvaWQgKllZUEFSU0VfUEFSQU07CisjZW5kaWYKKyNlbHNlIC8qICEg
WVlQQVJTRV9QQVJBTSAqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlf
X0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZF
UikKK2ludAoreXlwYXJzZSAoVFBhcnNlQ29udGV4dCogY29udGV4dCkKKyNlbHNlCitpbnQKK3l5
cGFyc2UgKGNvbnRleHQpCisgICAgVFBhcnNlQ29udGV4dCogY29udGV4dDsKKyNlbmRpZgorI2Vu
ZGlmCit7CisvKiBUaGUgbG9va2FoZWFkIHN5bWJvbC4gICovCitpbnQgeXljaGFyOworCisKKyNp
ZiBkZWZpbmVkIF9fR05VQ19fICYmIDQwNyA8PSBfX0dOVUNfXyAqIDEwMCArIF9fR05VQ19NSU5P
Ul9fCisvKiBTdXBwcmVzcyBhbiBpbmNvcnJlY3QgZGlhZ25vc3RpYyBhYm91dCB5eWx2YWwgYmVp
bmcgdW5pbml0aWFsaXplZC4gICovCisjIGRlZmluZSBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFM
SVpFRF9CRUdJTiBcCisgICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIHB1c2giKSBcCisgICAg
X1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3VuaW5pdGlhbGl6ZWRcIiIpXAor
ICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdtYXliZS11bmluaXRpYWxp
emVkXCIiKQorIyBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5EIFwKKyAg
ICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgcG9wIikKKyNlbHNlCisvKiBEZWZhdWx0IHZhbHVl
IHVzZWQgZm9yIGluaXRpYWxpemF0aW9uLCBmb3IgcGFjaWZ5aW5nIG9sZGVyIEdDQ3MKKyAgIG9y
IG5vbi1HQ0MgY29tcGlsZXJzLiAgKi8KK3N0YXRpYyBZWVNUWVBFIHl5dmFsX2RlZmF1bHQ7Cisj
IGRlZmluZSBZWV9JTklUSUFMX1ZBTFVFKFZhbHVlKSA9IFZhbHVlCisjZW5kaWYKK3N0YXRpYyBZ
WUxUWVBFIHl5bG9jX2RlZmF1bHQKKyMgaWYgZGVmaW5lZCBZWUxUWVBFX0lTX1RSSVZJQUwgJiYg
WVlMVFlQRV9JU19UUklWSUFMCisgID0geyAxLCAxLCAxLCAxIH0KKyMgZW5kaWYKKzsKKyNpZm5k
ZWYgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4KKyMgZGVmaW5lIFlZX0lHTk9S
RV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOCisjIGRlZmluZSBZWV9JR05PUkVfTUFZQkVfVU5J
TklUSUFMSVpFRF9FTkQKKyNlbmRpZgorI2lmbmRlZiBZWV9JTklUSUFMX1ZBTFVFCisjIGRlZmlu
ZSBZWV9JTklUSUFMX1ZBTFVFKFZhbHVlKSAvKiBOb3RoaW5nLiAqLworI2VuZGlmCisKKy8qIFRo
ZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9va2FoZWFkIHN5bWJvbC4gICovCitZWVNUWVBFIHl5
bHZhbCBZWV9JTklUSUFMX1ZBTFVFKHl5dmFsX2RlZmF1bHQpOworCisvKiBMb2NhdGlvbiBkYXRh
IGZvciB0aGUgbG9va2FoZWFkIHN5bWJvbC4gICovCitZWUxUWVBFIHl5bGxvYyA9IHl5bG9jX2Rl
ZmF1bHQ7CisKKworICAgIC8qIE51bWJlciBvZiBzeW50YXggZXJyb3JzIHNvIGZhci4gICovCisg
ICAgaW50IHl5bmVycnM7CisKKyAgICBpbnQgeXlzdGF0ZTsKKyAgICAvKiBOdW1iZXIgb2YgdG9r
ZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVkLiAgKi8KKyAgICBpbnQg
eXllcnJzdGF0dXM7CisKKyAgICAvKiBUaGUgc3RhY2tzIGFuZCB0aGVpciB0b29sczoKKyAgICAg
ICBgeXlzcyc6IHJlbGF0ZWQgdG8gc3RhdGVzLgorICAgICAgIGB5eXZzJzogcmVsYXRlZCB0byBz
ZW1hbnRpYyB2YWx1ZXMuCisgICAgICAgYHl5bHMnOiByZWxhdGVkIHRvIGxvY2F0aW9ucy4KKwor
ICAgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhyb3VnaCBzZXBhcmF0ZSBwb2ludGVycywgdG8g
YWxsb3cgeXlvdmVyZmxvdworICAgICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUuICAq
LworCisgICAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KKyAgICB5eXR5cGVfaW50MTYgeXlzc2Fb
WVlJTklUREVQVEhdOworICAgIHl5dHlwZV9pbnQxNiAqeXlzczsKKyAgICB5eXR5cGVfaW50MTYg
Knl5c3NwOworCisgICAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAgKi8KKyAgICBZWVNU
WVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKKyAgICBZWVNUWVBFICp5eXZzOworICAgIFlZU1RZUEUg
Knl5dnNwOworCisgICAgLyogVGhlIGxvY2F0aW9uIHN0YWNrLiAgKi8KKyAgICBZWUxUWVBFIHl5
bHNhW1lZSU5JVERFUFRIXTsKKyAgICBZWUxUWVBFICp5eWxzOworICAgIFlZTFRZUEUgKnl5bHNw
OworCisgICAgLyogVGhlIGxvY2F0aW9ucyB3aGVyZSB0aGUgZXJyb3Igc3RhcnRlZCBhbmQgZW5k
ZWQuICAqLworICAgIFlZTFRZUEUgeXllcnJvcl9yYW5nZVszXTsKKworICAgIFlZU0laRV9UIHl5
c3RhY2tzaXplOworCisgIGludCB5eW47CisgIGludCB5eXJlc3VsdDsKKyAgLyogTG9va2FoZWFk
IHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIuICAqLworICBp
bnQgeXl0b2tlbiA9IDA7CisgIC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1cm4gc2VtYW50
aWMgdmFsdWUgYW5kIGxvY2F0aW9uIGZyb20gdGhlCisgICAgIGFjdGlvbiByb3V0aW5lcy4gICov
CisgIFlZU1RZUEUgeXl2YWw7CisgIFlZTFRZUEUgeXlsb2M7CisKKyNpZiBZWUVSUk9SX1ZFUkJP
U0UKKyAgLyogQnVmZmVyIGZvciBlcnJvciBtZXNzYWdlcywgYW5kIGl0cyBhbGxvY2F0ZWQgc2l6
ZS4gICovCisgIGNoYXIgeXltc2didWZbMTI4XTsKKyAgY2hhciAqeXltc2cgPSB5eW1zZ2J1ZjsK
KyAgWVlTSVpFX1QgeXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7CisjZW5kaWYKKworI2Rl
ZmluZSBZWVBPUFNUQUNLKE4pICAgKHl5dnNwIC09IChOKSwgeXlzc3AgLT0gKE4pLCB5eWxzcCAt
PSAoTikpCisKKyAgLyogVGhlIG51bWJlciBvZiBzeW1ib2xzIG9uIHRoZSBSSFMgb2YgdGhlIHJl
ZHVjZWQgcnVsZS4KKyAgICAgS2VlcCB0byB6ZXJvIHdoZW4gbm8gc3ltYm9sIHNob3VsZCBiZSBw
b3BwZWQuICAqLworICBpbnQgeXlsZW4gPSAwOworCisgIHl5c3NwID0geXlzcyA9IHl5c3NhOwor
ICB5eXZzcCA9IHl5dnMgPSB5eXZzYTsKKyAgeXlsc3AgPSB5eWxzID0geXlsc2E7CisgIHl5c3Rh
Y2tzaXplID0gWVlJTklUREVQVEg7CisKKyAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhcnRpbmcg
cGFyc2VcbiIpKTsKKworICB5eXN0YXRlID0gMDsKKyAgeXllcnJzdGF0dXMgPSAwOworICB5eW5l
cnJzID0gMDsKKyAgeXljaGFyID0gWVlFTVBUWTsgLyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFk
LiAgKi8KKyAgeXlsc3BbMF0gPSB5eWxsb2M7CisgIGdvdG8geXlzZXRzdGF0ZTsKKworLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0u
Cit8IHl5bmV3c3RhdGUgLS0gUHVzaCBhIG5ldyBzdGF0ZSwgd2hpY2ggaXMgZm91bmQgaW4geXlz
dGF0ZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLworIHl5bmV3c3RhdGU6CisgIC8qIEluIGFsbCBjYXNlcywgd2hlbiB5
b3UgZ2V0IGhlcmUsIHRoZSB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2tzCisgICAgIGhhdmUganVz
dCBiZWVuIHB1c2hlZC4gIFNvIHB1c2hpbmcgYSBzdGF0ZSBoZXJlIGV2ZW5zIHRoZSBzdGFja3Mu
ICAqLworICB5eXNzcCsrOworCisgeXlzZXRzdGF0ZToKKyAgKnl5c3NwID0geXlzdGF0ZTsKKwor
ICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkKKyAgICB7CisgICAgICAvKiBH
ZXQgdGhlIGN1cnJlbnQgdXNlZCBzaXplIG9mIHRoZSB0aHJlZSBzdGFja3MsIGluIGVsZW1lbnRz
LiAgKi8KKyAgICAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5c3NwIC0geXlzcyArIDE7CisKKyNpZmRl
ZiB5eW92ZXJmbG93CisgICAgICB7CisJLyogR2l2ZSB1c2VyIGEgY2hhbmNlIHRvIHJlYWxsb2Nh
dGUgdGhlIHN0YWNrLiAgVXNlIGNvcGllcyBvZgorCSAgIHRoZXNlIHNvIHRoYXQgdGhlICYncyBk
b24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8KKwkgICBtZW1vcnkuICAqLworCVlZU1RZUEUg
Knl5dnMxID0geXl2czsKKwl5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKKwlZWUxUWVBFICp5
eWxzMSA9IHl5bHM7CisKKwkvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dl
ZCBieSB0aGUgc2l6ZSBvZiB0aGUKKwkgICBkYXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBi
eXRlcy4gIFRoaXMgdXNlZCB0byBiZSBhCisJICAgY29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhl
IHR3byBleHRyYSBhcmdzLCBidXQgdGhhdCBtaWdodAorCSAgIGJlIHVuZGVmaW5lZCBpZiB5eW92
ZXJmbG93IGlzIGEgbWFjcm8uICAqLworCXl5b3ZlcmZsb3cgKFlZXygibWVtb3J5IGV4aGF1c3Rl
ZCIpLAorCQkgICAgJnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCksCisJCSAgICAmeXl2
czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKKwkJICAgICZ5eWxzMSwgeXlzaXplICogc2l6
ZW9mICgqeXlsc3ApLAorCQkgICAgJnl5c3RhY2tzaXplKTsKKworCXl5bHMgPSB5eWxzMTsKKwl5
eXNzID0geXlzczE7CisJeXl2cyA9IHl5dnMxOworICAgICAgfQorI2Vsc2UgLyogbm8geXlvdmVy
ZmxvdyAqLworIyBpZm5kZWYgWVlTVEFDS19SRUxPQ0FURQorICAgICAgZ290byB5eWV4aGF1c3Rl
ZGxhYjsKKyMgZWxzZQorICAgICAgLyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3duIHdheS4gICov
CisgICAgICBpZiAoWVlNQVhERVBUSCA8PSB5eXN0YWNrc2l6ZSkKKwlnb3RvIHl5ZXhoYXVzdGVk
bGFiOworICAgICAgeXlzdGFja3NpemUgKj0gMjsKKyAgICAgIGlmIChZWU1BWERFUFRIIDwgeXlz
dGFja3NpemUpCisJeXlzdGFja3NpemUgPSBZWU1BWERFUFRIOworCisgICAgICB7CisJeXl0eXBl
X2ludDE2ICp5eXNzMSA9IHl5c3M7CisJdW5pb24geXlhbGxvYyAqeXlwdHIgPQorCSAgKHVuaW9u
IHl5YWxsb2MgKikgWVlTVEFDS19BTExPQyAoWVlTVEFDS19CWVRFUyAoeXlzdGFja3NpemUpKTsK
KwlpZiAoISB5eXB0cikKKwkgIGdvdG8geXlleGhhdXN0ZWRsYWI7CisJWVlTVEFDS19SRUxPQ0FU
RSAoeXlzc19hbGxvYywgeXlzcyk7CisJWVlTVEFDS19SRUxPQ0FURSAoeXl2c19hbGxvYywgeXl2
cyk7CisJWVlTVEFDS19SRUxPQ0FURSAoeXlsc19hbGxvYywgeXlscyk7CisjICB1bmRlZiBZWVNU
QUNLX1JFTE9DQVRFCisJaWYgKHl5c3MxICE9IHl5c3NhKQorCSAgWVlTVEFDS19GUkVFICh5eXNz
MSk7CisgICAgICB9CisjIGVuZGlmCisjZW5kaWYgLyogbm8geXlvdmVyZmxvdyAqLworCisgICAg
ICB5eXNzcCA9IHl5c3MgKyB5eXNpemUgLSAxOworICAgICAgeXl2c3AgPSB5eXZzICsgeXlzaXpl
IC0gMTsKKyAgICAgIHl5bHNwID0geXlscyArIHl5c2l6ZSAtIDE7CisKKyAgICAgIFlZRFBSSU5U
RiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKKwkJICAodW5zaWdu
ZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7CisKKyAgICAgIGlmICh5eXNzICsgeXlzdGFja3Np
emUgLSAxIDw9IHl5c3NwKQorCVlZQUJPUlQ7CisgICAgfQorCisgIFlZRFBSSU5URiAoKHN0ZGVy
ciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7CisKKyAgaWYgKHl5c3RhdGUgPT0g
WVlGSU5BTCkKKyAgICBZWUFDQ0VQVDsKKworICBnb3RvIHl5YmFja3VwOworCisvKi0tLS0tLS0t
LS0tLgorfCB5eWJhY2t1cC4gIHwKK2AtLS0tLS0tLS0tLSovCit5eWJhY2t1cDoKKworICAvKiBE
byBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgUmVhZCBh
CisgICAgIGxvb2thaGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBo
YXZlIG9uZS4gICovCisKKyAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhv
dXQgcmVmZXJlbmNlIHRvIGxvb2thaGVhZCB0b2tlbi4gICovCisgIHl5biA9IHl5cGFjdFt5eXN0
YXRlXTsKKyAgaWYgKHl5cGFjdF92YWx1ZV9pc19kZWZhdWx0ICh5eW4pKQorICAgIGdvdG8geXlk
ZWZhdWx0OworCisgIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rYWhlYWQgdG9rZW4gaWYgZG9u
J3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisKKyAgLyogWVlDSEFSIGlzIGVpdGhlciBZWUVNUFRZ
IG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9va2FoZWFkIHN5bWJvbC4gICovCisgIGlmICh5eWNoYXIg
PT0gWVlFTVBUWSkKKyAgICB7CisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJSZWFkaW5nIGEg
dG9rZW46ICIpKTsKKyAgICAgIHl5Y2hhciA9IFlZTEVYOworICAgIH0KKworICBpZiAoeXljaGFy
IDw9IFlZRU9GKQorICAgIHsKKyAgICAgIHl5Y2hhciA9IHl5dG9rZW4gPSBZWUVPRjsKKyAgICAg
IFlZRFBSSU5URiAoKHN0ZGVyciwgIk5vdyBhdCBlbmQgb2YgaW5wdXQuXG4iKSk7CisgICAgfQor
ICBlbHNlCisgICAgeworICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOworICAg
ICAgWVlfU1lNQk9MX1BSSU5UICgiTmV4dCB0b2tlbiBpcyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5
eWxsb2MpOworICAgIH0KKworICAvKiBJZiB0aGUgcHJvcGVyIGFjdGlvbiBvbiBzZWVpbmcgdG9r
ZW4gWVlUT0tFTiBpcyB0byByZWR1Y2Ugb3IgdG8KKyAgICAgZGV0ZWN0IGFuIGVycm9yLCB0YWtl
IHRoYXQgYWN0aW9uLiAgKi8KKyAgeXluICs9IHl5dG9rZW47CisgIGlmICh5eW4gPCAwIHx8IFlZ
TEFTVCA8IHl5biB8fCB5eWNoZWNrW3l5bl0gIT0geXl0b2tlbikKKyAgICBnb3RvIHl5ZGVmYXVs
dDsKKyAgeXluID0geXl0YWJsZVt5eW5dOworICBpZiAoeXluIDw9IDApCisgICAgeworICAgICAg
aWYgKHl5dGFibGVfdmFsdWVfaXNfZXJyb3IgKHl5bikpCisgICAgICAgIGdvdG8geXllcnJsYWI7
CisgICAgICB5eW4gPSAteXluOworICAgICAgZ290byB5eXJlZHVjZTsKKyAgICB9CisKKyAgLyog
Q291bnQgdG9rZW5zIHNoaWZ0ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0dXJuIG9mZiBl
cnJvcgorICAgICBzdGF0dXMuICAqLworICBpZiAoeXllcnJzdGF0dXMpCisgICAgeXllcnJzdGF0
dXMtLTsKKworICAvKiBTaGlmdCB0aGUgbG9va2FoZWFkIHRva2VuLiAgKi8KKyAgWVlfU1lNQk9M
X1BSSU5UICgiU2hpZnRpbmciLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKKworICAvKiBE
aXNjYXJkIHRoZSBzaGlmdGVkIHRva2VuLiAgKi8KKyAgeXljaGFyID0gWVlFTVBUWTsKKworICB5
eXN0YXRlID0geXluOworICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTgorICAq
Kyt5eXZzcCA9IHl5bHZhbDsKKyAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5ECisg
ICorK3l5bHNwID0geXlsbG9jOworICBnb3RvIHl5bmV3c3RhdGU7CisKKworLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlk
ZWZhdWx0IC0tIGRvIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgdGhlIGN1cnJlbnQgc3RhdGUuICB8
CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLworeXlkZWZhdWx0OgorICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsKKyAgaWYgKHl5
biA9PSAwKQorICAgIGdvdG8geXllcnJsYWI7CisgIGdvdG8geXlyZWR1Y2U7CisKKworLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlyZWR1Y2UgLS0gRG8gYSByZWR1Y3Rpb24u
ICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlyZWR1Y2U6CisgIC8qIHl5
biBpcyB0aGUgbnVtYmVyIG9mIGEgcnVsZSB0byByZWR1Y2Ugd2l0aC4gICovCisgIHl5bGVuID0g
eXlyMlt5eW5dOworCisgIC8qIElmIFlZTEVOIGlzIG5vbnplcm8sIGltcGxlbWVudCB0aGUgZGVm
YXVsdCB2YWx1ZSBvZiB0aGUgYWN0aW9uOgorICAgICBgJCQgPSAkMScuCisKKyAgICAgT3RoZXJ3
aXNlLCB0aGUgZm9sbG93aW5nIGxpbmUgc2V0cyBZWVZBTCB0byBnYXJiYWdlLgorICAgICBUaGlz
IGJlaGF2aW9yIGlzIHVuZG9jdW1lbnRlZCBhbmQgQmlzb24KKyAgICAgdXNlcnMgc2hvdWxkIG5v
dCByZWx5IHVwb24gaXQuICBBc3NpZ25pbmcgdG8gWVlWQUwKKyAgICAgdW5jb25kaXRpb25hbGx5
IG1ha2VzIHRoZSBwYXJzZXIgYSBiaXQgc21hbGxlciwgYW5kIGl0IGF2b2lkcyBhCisgICAgIEdD
QyB3YXJuaW5nIHRoYXQgWVlWQUwgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZC4gICovCisgIHl5
dmFsID0geXl2c3BbMS15eWxlbl07CisKKyAgLyogRGVmYXVsdCBsb2NhdGlvbi4gICovCisgIFlZ
TExPQ19ERUZBVUxUICh5eWxvYywgKHl5bHNwIC0geXlsZW4pLCB5eWxlbik7CisgIFlZX1JFRFVD
RV9QUklOVCAoeXluKTsKKyAgc3dpdGNoICh5eW4pCisgICAgeworICAgICAgICBjYXNlIDQ6CisK
KyAgICB7CisgICAgICAgIC8vIFRoZSBzeW1ib2wgdGFibGUgc2VhcmNoIHdhcyBkb25lIGluIHRo
ZSBsZXhpY2FsIHBoYXNlCisgICAgICAgIGNvbnN0IFRTeW1ib2wgKnN5bWJvbCA9ICh5eXZzcFso
MSkgLSAoMSldLmxleCkuc3ltYm9sOworICAgICAgICBjb25zdCBUVmFyaWFibGUgKnZhcmlhYmxl
ID0gMDsKKworICAgICAgICBpZiAoIXN5bWJvbCkKKyAgICAgICAgeworICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0pLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIiwg
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOworICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCFzeW1ib2wtPmlz
VmFyaWFibGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNw
WygxKSAtICgxKV0pLCAidmFyaWFibGUgZXhwZWN0ZWQiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LnN0cmluZy0+Y19zdHIoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB2YXJpYWJsZSA9IHN0
YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSo+KHN5bWJvbCk7CisKKyAgICAgICAgICAgIGlmIChj
b250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbih2YXJpYWJsZS0+Z2V0TmFtZSgpKSAmJgor
ICAgICAgICAgICAgICAgICF2YXJpYWJsZS0+Z2V0RXh0ZW5zaW9uKCkuZW1wdHkoKSAmJgorICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgx
KV0pLCB2YXJpYWJsZS0+Z2V0RXh0ZW5zaW9uKCkpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIGlmICghdmFyaWFibGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRUeXBlIHR5cGUo
RWJ0RmxvYXQsIEVicFVuZGVmaW5lZCk7CisgICAgICAgICAgICBUVmFyaWFibGUgKmZha2VWYXJp
YWJsZSA9IG5ldyBUVmFyaWFibGUoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcsIHR5cGUp
OworICAgICAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCpmYWtlVmFyaWFibGUp
OworICAgICAgICAgICAgdmFyaWFibGUgPSBmYWtlVmFyaWFibGU7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAodmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkK
KyAgICAgICAgeworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiogY29uc3RBcnJheSA9IHZhcmlh
YmxlLT5nZXRDb25zdFBvaW50ZXIoKTsKKyAgICAgICAgICAgIFRUeXBlIHQodmFyaWFibGUtPmdl
dFR5cGUoKSk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbihjb25zdEFycmF5LCB0LCAoeXls
c3BbKDEpIC0gKDEpXSkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAg
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0TmFtZSgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxl
LT5nZXRUeXBlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGRvbid0
IGRlbGV0ZSAkMS5zdHJpbmcsIGl0J3MgdXNlZCBieSBlcnJvciByZWNvdmVyeSwgYW5kIHRoZSBw
b29sCisgICAgICAgIC8vIHBvcCB3aWxsIHJlY2xhaW0gdGhlIG1lbW9yeQorICAgIH0KKyAgICBi
cmVhazsKKworICBjYXNlIDU6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDY6CisKKyAgICB7CisgICAgICAgIENvbnN0YW50
VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgdW5pb25B
cnJheS0+c2V0SUNvbnN0KCh5eXZzcFsoMSkgLSAoMSldLmxleCkuaSk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25z
dGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25z
dCksICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNzoK
KworICAgIHsKKyAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFu
dFVuaW9uWzFdOworICAgICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3QoKHl5dnNwWygxKSAtICgx
KV0ubGV4KS5mKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0
RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAg
IH0KKyAgICBicmVhazsKKworICBjYXNlIDg6CisKKyAgICB7CisgICAgICAgIENvbnN0YW50VW5p
b24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgdW5pb25BcnJh
eS0+c2V0QkNvbnN0KCh5eXZzcFsoMSkgLSAoMSldLmxleCkuYik7CisgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFu
dFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3Qp
LCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDk6CisK
KyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFso
MikgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgIH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDEwOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxMToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+YWRkSW5kZXhFeHByZXNzaW9uKCh5eXZzcFsoMSkg
LSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDQpXSksICh5eXZz
cFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKTsKKyAgICB9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAxMjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAg
fQorICAgIGJyZWFrOworCisgIGNhc2UgMTM6CisKKyAgICB7CisgICAgICAgIGlmICgoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgpKSB7CisgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDMpIC0gKDMpXSksICJjYW5ub3QgYXBwbHkgZG90
IG9wZXJhdG9yIHRvIGFuIGFycmF5IiwgIi4iKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgVFZlY3RvckZpZWxk
cyBmaWVsZHM7CisgICAgICAgICAgICBpZiAoISBjb250ZXh0LT5wYXJzZVZlY3RvckZpZWxkcygq
KHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXROb21pbmFsU2l6ZSgpLCBmaWVsZHMsICh5eWxzcFsoMykgLSAo
MyldKSkpIHsKKyAgICAgICAgICAgICAgICBmaWVsZHMubnVtID0gMTsKKyAgICAgICAgICAgICAg
ICBmaWVsZHMub2Zmc2V0c1swXSA9IDA7CisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFD
b25zdCkgeyAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2ZWN0b3IgZmllbGRzCisgICAgICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+YWRkQ29uc3RW
ZWN0b3JOb2RlKGZpZWxkcywgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSksICh5eWxzcFsoMykgLSAoMyldKSk7CisgICAgICAgICAgICAgICAgaWYgKCh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKFRUeXBlKCh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRCYXNpY1R5cGUoKSwgKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFByZWNpc2lvbigpLCBFdnFDb25z
dCwgKGludCkgKCooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZykuc2l6ZSgpKSk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFRTdHJpbmcgdmVjdG9yU3RyaW5nID0g
Kih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nOworICAgICAgICAgICAgICAgIFRJbnRlcm1U
eXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3dpenpsZShmaWVsZHMsICh5
eWxzcFsoMykgLSAoMyldKSk7CisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcFZlY3RvclN3aXp6
bGUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5
bHNwWygyKSAtICgzKV0pKTsKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgKGludCkgdmVjdG9yU3Ry
aW5nLnNpemUoKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKCh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc01hdHJpeCgpKSB7CisgICAgICAg
ICAgICBUTWF0cml4RmllbGRzIGZpZWxkczsKKyAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnBh
cnNlTWF0cml4RmllbGRzKCooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxTaXplKCksIGZpZWxk
cywgKHl5bHNwWygzKSAtICgzKV0pKSkgeworICAgICAgICAgICAgICAgIGZpZWxkcy53aG9sZVJv
dyA9IGZhbHNlOworICAgICAgICAgICAgICAgIGZpZWxkcy53aG9sZUNvbCA9IGZhbHNlOworICAg
ICAgICAgICAgICAgIGZpZWxkcy5yb3cgPSAwOworICAgICAgICAgICAgICAgIGZpZWxkcy5jb2wg
PSAwOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKGZpZWxkcy53aG9sZVJvdyB8fCBmaWVsZHMud2hvbGVDb2wpIHsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICIgbm9u
LXNjYWxhciBmaWVsZHMgbm90IGltcGxlbWVudGVkIHlldCIsICIuIik7CisgICAgICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVu
aW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICB1bmlvbkFy
cmF5LT5zZXRJQ29uc3QoMCk7CisgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBl
KEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMykgLSAoMyldKSk7Cisg
ICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eWxzcFsoMikgLSAoMyldKSk7CisgICAg
ICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKFRUeXBl
KCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRCYXNpY1R5cGUo
KSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFByZWNpc2lv
bigpLEV2cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldE5vbWluYWxTaXplKCkpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwor
ICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChmaWVsZHMuY29sICogKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxTaXplKCkgKyBm
aWVsZHMucm93KTsKKyAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50
LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygzKSAtICgzKV0pKTsKKyAgICAgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5bHNwWygyKSAtICgzKV0pKTsKKyAgICAgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCkpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7CisgICAg
ICAgICAgICBib29sIGZpZWxkRm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgIGNvbnN0IFRGaWVs
ZExpc3QmIGZpZWxkcyA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5nZXRUeXBlKCkuZ2V0U3RydWN0KCktPmZpZWxkcygpOworICAgICAgICAgICAgdW5zaWduZWQg
aW50IGk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICAgICAgaWYgKGZpZWxkc1tpXS0+bmFtZSgpID09ICooeXl2c3BbKDMpIC0g
KDMpXS5sZXgpLnN0cmluZykgeworICAgICAgICAgICAgICAgICAgICBmaWVsZEZvdW5kID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKGZpZWxkRm91bmQpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5n
ZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgeworICAgICAgICAgICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5hZGRDb25zdFN0cnVjdCgqKHl5dnNw
WygzKSAtICgzKV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOworICAgICAgICAgICAgICAgICAgICBpZiAo
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5zZXRUeXBlKCpmaWVsZHNbaV0tPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBjaGFuZ2UgdGhlIHF1YWxpZmllciBvZiB0aGUgcmV0dXJuIHR5cGUsIG5vdCBvZiB0
aGUgc3RydWN0dXJlIGZpZWxkCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcyB0aGUgc3Ry
dWN0dXJlIGRlZmluaXRpb24gaXMgc2hhcmVkIGJldHdlZW4gdmFyaW91cyBzdHJ1Y3R1cmVzLgor
ICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRUeXBlUG9pbnRlcigpLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3QpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgQ29u
c3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAg
ICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoaSk7CisgICAgICAgICAgICAgICAgICAg
IFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRV
bmlvbih1bmlvbkFycmF5LCAqZmllbGRzW2ldLT50eXBlKCksICh5eWxzcFsoMykgLSAoMyldKSk7
CisgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdFN0cnVjdCwgKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGluZGV4LCAoeXlsc3BbKDIpIC0g
KDMpXSkpOworICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFso
MikgLSAoMyldKSwgIiBubyBzdWNoIGZpZWxkIGluIHN0cnVjdHVyZSIsICh5eXZzcFsoMykgLSAo
MyldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIp
IC0gKDMpXSksICIgZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBv
ciBtYXRyaXggb24gbGVmdCBoYW5kIHNpZGUiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmlu
Zy0+Y19zdHIoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgfQorICAgICAgICAvLyBkb24ndCBkZWxldGUg
JDMuc3RyaW5nLCBpdCdzIGZyb20gdGhlIHBvb2wKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAxNDoKKworICAgIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5
bHNwWygyKSAtICgyKV0pLCAiKysiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFy
eU1hdGgoRU9wUG9zdEluY3JlbWVudCwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMildKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAg
ICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAg
ICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICIrKyIsICh5eXZz
cFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygp
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTU6CisK
KyAgICB7CisgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCh5eWxzcFsoMikg
LSAoMildKSwgIi0tIiwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkp
KQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVP
cFBvc3REZWNyZW1lbnQsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCAoeXlsc3BbKDIpIC0gKDIpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYg
KCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBjb250
ZXh0LT51bmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgyKV0pLCAiLS0iLCAoeXl2c3BbKDEpIC0g
KDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE2OgorCisgICAgewor
ICAgICAgICBpZiAoY29udGV4dC0+aW50ZWdlckVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSksICJbXSIpKQorICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxNzoKKworICAgIHsKKyAgICAgICAgVEZ1bmN0aW9uKiBmbkNhbGwgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0pLmZ1bmN0aW9uOworICAgICAgICBUT3BlcmF0b3Igb3AgPSBmbkNh
bGwtPmdldEJ1aWx0SW5PcCgpOworCisgICAgICAgIGlmIChvcCAhPSBFT3BOdWxsKQorICAgICAg
ICB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVGhlbiB0aGlzIHNob3VsZCBiZSBh
IGNvbnN0cnVjdG9yLgorICAgICAgICAgICAgLy8gRG9uJ3QgZ28gdGhyb3VnaCB0aGUgc3ltYm9s
IHRhYmxlIGZvciBjb25zdHJ1Y3RvcnMuCisgICAgICAgICAgICAvLyBUaGVpciBwYXJhbWV0ZXJz
IHdpbGwgYmUgdmVyaWZpZWQgYWxnb3JpdGhtaWNhbGx5LgorICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsgIC8vIHVzZSB0aGlzIHRv
IGdldCB0aGUgdHlwZSBiYWNrCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Y29uc3RydWN0b3JF
cnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5p
bnRlcm1Ob2RlLCAqZm5DYWxsLCBvcCwgJnR5cGUpKSB7CisgICAgICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBJdCdzIGEgY29uc3RydWN0b3IsIG9m
IHR5cGUgJ3R5cGUnLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+YWRkQ29uc3RydWN0b3IoKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCAmdHlwZSwgb3AsIGZuQ2FsbCwgKHl5bHNw
WygxKSAtICgxKV0pKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcigwLCBvcCwgKHl5
bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZSh0eXBlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBOb3QgYSBjb25zdHJ1Y3Rvci4gIEZpbmQgaXQg
aW4gdGhlIHN5bWJvbCB0YWJsZS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBjb25zdCBU
RnVuY3Rpb24qIGZuQ2FuZGlkYXRlOworICAgICAgICAgICAgYm9vbCBidWlsdEluOworICAgICAg
ICAgICAgZm5DYW5kaWRhdGUgPSBjb250ZXh0LT5maW5kRnVuY3Rpb24oKHl5bHNwWygxKSAtICgx
KV0pLCBmbkNhbGwsICZidWlsdEluKTsKKyAgICAgICAgICAgIGlmIChmbkNhbmRpZGF0ZSkgewor
ICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gQSBkZWNsYXJlZCBmdW5jdGlv
bi4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIGlmIChidWlsdEluICYmICFm
bkNhbmRpZGF0ZS0+Z2V0RXh0ZW5zaW9uKCkuZW1wdHkoKSAmJgorICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgZm5DYW5k
aWRhdGUtPmdldEV4dGVuc2lvbigpKSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG9wID0gZm5DYW5k
aWRhdGUtPmdldEJ1aWx0SW5PcCgpOworICAgICAgICAgICAgICAgIGlmIChidWlsdEluICYmIG9w
ICE9IEVPcE51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAg
ICAgLy8gQSBmdW5jdGlvbiBjYWxsIG1hcHBlZCB0byBhIGJ1aWx0LWluIG9wZXJhdGlvbi4KKyAg
ICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGZuQ2FuZGlkYXRl
LT5nZXRQYXJhbUNvdW50KCkgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFRyZWF0IGl0IGxpa2UgYSBidWlsdC1pbiB1bmFyeSBv
cGVyYXRvci4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkVW5hcnlNYXRoKG9wLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUs
ICh5eWxzcFsoMSkgLSAoMSldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0
cmVhbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImJ1
aWx0IGluIHVuYXJ5IG9wZXJhdG9yIGZ1bmN0aW9uLiAgVHlwZTogIiA8PCBzdGF0aWNfY2FzdDxU
SW50ZXJtVHlwZWQqPigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUpLT5nZXRD
b21wbGV0ZVN0cmluZygpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5n
IGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5v
ZGUtPmdldExpbmUoKSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCAiSW50ZXJuYWwgRXJyb3IiLCBl
eHRyYUluZm8uY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWVlFUlJPUjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcigoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSwgb3AsICh5eWxzcFsoMSkgLSAoMSldKSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAvLyBUaGlzIGlzIGEgcmVhbCBmdW5jdGlvbiBjYWxsCisKKyAgICAgICAgICAg
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50
ZXJtQWdncmVnYXRlLCBFT3BGdW5jdGlvbkNhbGwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAg
ICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShm
bkNhbmRpZGF0ZS0+Z2V0UmV0dXJuVHlwZSgpKTsKKworICAgICAgICAgICAgICAgICAgICAvLyB0
aGlzIGlzIGhvdyB3ZSBrbm93IHdoZXRoZXIgdGhlIGdpdmVuIGZ1bmN0aW9uIGlzIGEgYnVpbHRJ
biBmdW5jdGlvbiBvciBhIHVzZXIgZGVmaW5lZCBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAg
ICAvLyBpZiBidWlsdEluID09IGZhbHNlLCBpdCdzIGEgdXNlckRlZmluZWQgLT4gY291bGQgYmUg
YW4gb3ZlcmxvYWRlZCBidWlsdEluIGZ1bmN0aW9uIGFsc28KKyAgICAgICAgICAgICAgICAgICAg
Ly8gaWYgYnVpbHRJbiA9PSB0cnVlLCBpdCdzIGRlZmluaXRlbHkgYSBidWlsdEluIGZ1bmN0aW9u
IHdpdGggRU9wTnVsbAorICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1aWx0SW4pCisgICAgICAg
ICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQWdn
cmVnYXRlKCktPnNldFVzZXJEZWZpbmVkKCk7CisgICAgICAgICAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0TmFtZShmbkNhbmRp
ZGF0ZS0+Z2V0TWFuZ2xlZE5hbWUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgVFF1YWxpZmll
ciBxdWFsOworICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZuQ2Fu
ZGlkYXRlLT5nZXRQYXJhbUNvdW50KCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
cXVhbCA9IGZuQ2FuZGlkYXRlLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChxdWFsID09IEV2cU91dCB8fCBxdWFsID09IEV2cUlu
T3V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVy
cm9yQ2hlY2soKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRMaW5lKCksICJhc3Np
Z24iLCAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQWdncmVnYXRlKCktPmdl
dFNlcXVlbmNlKClbaV0tPmdldEFzVHlwZWQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1O
b2RlLT5nZXRMaW5lKCksICJDb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFzc2VkIGZvciAnb3V0
JyBvciAnaW5vdXQnIHBhcmFtZXRlcnMuIiwgIkVycm9yIik7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5zZXRUeXBlKGZuQ2FuZGlkYXRlLT5nZXRSZXR1cm5UeXBlKCkpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBlcnJvciBtZXNzYWdlIHdhcyBwdXQg
b3V0IGJ5IFBhRmluZEZ1bmN0aW9uKCkKKyAgICAgICAgICAgICAgICAvLyBQdXQgb24gYSBkdW1t
eSBub2RlIGZvciBlcnJvciByZWNvdmVyeQorICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24g
KnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICB1bmlv
bkFycmF5LT5zZXRGQ29uc3QoMC4wZik7CisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24o
dW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXls
c3BbKDEpIC0gKDEpXSkpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBkZWxldGUgZm5DYWxsOworICAgIH0KKyAg
ICBicmVhazsKKworICBjYXNlIDE4OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtKSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2Ug
MTk6CisKKyAgICB7CisgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMykgLSAoMyldKSwg
Im1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQiLCAiIik7CisgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0p
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDIwOgorCisgICAgeworICAgICAgICAoeXl2
YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybSk7CisgICAgfQorICAgIGJyZWFr
OworCisgIGNhc2UgMjE6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMjoKKwor
ICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0uZnVuY3Rpb24pOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1Ob2RlID0g
MDsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMzoKKworICAgIHsKKyAgICAgICAgKHl5
dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24p
OworICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1Ob2RlID0gMDsKKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAyNDoKKworICAgIHsKKyAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsg
MCwgbmV3IFRUeXBlKCh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRUeXBlKCkpIH07CisgICAgICAgICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbikt
PmFkZFBhcmFtZXRlcihwYXJhbSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uID0g
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKTsKKyAgICAgICAgKHl5dmFsLmludGVy
bSkuaW50ZXJtTm9kZSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDI1OgorCisgICAgeworICAgICAgICBUUGFy
YW1ldGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldFR5cGUoKSkgfTsKKyAgICAgICAgKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtKS5mdW5jdGlvbi0+YWRkUGFyYW1ldGVyKHBhcmFtKTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmZ1bmN0aW9uOworICAg
ICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1Ob2RlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdy
b3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCAoeXl2c3Bb
KDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsK
KyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNjoKKworICAgIHsKKyAgICAgICAgKHl5dmFs
LmludGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDI3OgorCisgICAgeworICAgICAgICAvLworICAg
ICAgICAvLyBDb25zdHJ1Y3RvcgorICAgICAgICAvLworICAgICAgICBUT3BlcmF0b3Igb3AgPSBF
T3BOdWxsOworICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnVzZXJE
ZWYpIHsKKyAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0U3RydWN0OworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgc3dpdGNoICgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSku
dHlwZSkgeworICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAgICBpZiAo
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLm1hdHJpeCkgeworICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2goKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnNpemUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdE1hdDI7ICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVjdE1hdDM7ICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVjdE1hdDQ7ICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIHN3aXRjaCgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuc2l6
ZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0VmVj
MjsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0
VmVjMzsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3Ry
dWN0VmVjNDsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAg
ICAgICAgICAgICAgc3dpdGNoKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zaXplKSB7
CisgICAgICAgICAgICAgICAgY2FzZSAxOiBvcCA9IEVPcENvbnN0cnVjdEludDsgICBicmVhazsK
KyAgICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0SVZlYzI7IGJyZWFrOwor
ICAgICAgICAgICAgICAgIGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RJVmVjMzsgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVjdElWZWM0OyBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IEVidEJvb2w6CisgICAgICAgICAgICAgICAgc3dpdGNoKCh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS50eXBlKS5zaXplKSB7CisgICAgICAgICAgICAgICAgY2FzZSAxOiBvcCA9IEVPcENvbnN0cnVj
dEJvb2w7ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0
QlZlYzI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RC
VmVjMzsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVjdEJW
ZWM0OyBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChvcCA9PSBFT3BOdWxsKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNw
WygxKSAtICgxKV0pLCAiY2Fubm90IGNvbnN0cnVjdCB0aGlzIHR5cGUiLCBnZXRCYXNpY1N0cmlu
ZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSkpOworICAgICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0udHlwZSkudHlwZSA9IEVidEZsb2F0OworICAgICAgICAgICAgICAgIG9wID0gRU9wQ29u
c3RydWN0RmxvYXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgVFN0cmluZyB0
ZW1wU3RyaW5nOworICAgICAgICBUVHlwZSB0eXBlKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50
eXBlKSk7CisgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCZ0ZW1w
U3RyaW5nLCB0eXBlLCBvcCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gZnVu
Y3Rpb247CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMjg6CisKKyAgICB7CisgICAgICAg
IGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgxKV0pLCAqKHl5
dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICBUVHlwZSB0eXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7CisgICAgICAg
IFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCh5eXZzcFsoMSkgLSAoMSldLmxl
eCkuc3RyaW5nLCB0eXBlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSBmdW5j
dGlvbjsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyOToKKworICAgIHsKKyAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMzA6CisKKyAg
ICB7CisgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAo
MildKSwgIisrIiwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQor
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFBy
ZUluY3JlbWVudCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5
eWxzcFsoMSkgLSAoMildKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQt
PnVuYXJ5T3BFcnJvcigoeXlsc3BbKDEpIC0gKDIpXSksICIrKyIsICh5eXZzcFsoMikgLSAoMild
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwor
ICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMzE6CisKKyAgICB7CisgICAg
ICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMildKSwgIi0t
IiwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQorICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFByZURlY3JlbWVu
dCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMSkg
LSAoMildKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnVuYXJ5T3BF
cnJvcigoeXlsc3BbKDEpIC0gKDIpXSksICItLSIsICh5eXZzcFsoMikgLSAoMildLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICB9
CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMzI6CisKKyAgICB7CisgICAgICAgIGlmICgo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLm9wICE9IEVPcE51bGwpIHsKKyAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRV
bmFyeU1hdGgoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5vcCwgKHl5dnNwWygyKSAtICgyKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMSkgLSAoMildKSwgY29udGV4dC0+c3lt
Ym9sVGFibGUpOworICAgICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9PSAwKSB7CisgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXJyb3JPcCA9ICIiOworICAg
ICAgICAgICAgICAgIHN3aXRjaCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLm9wKSB7CisgICAg
ICAgICAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZTogICBlcnJvck9wID0gIi0iOyBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6IGVycm9yT3AgPSAiISI7IGJyZWFrOwor
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoKHl5bHNwWygxKSAtICgyKV0pLCBlcnJv
ck9wLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxl
dGVTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMikgLSAo
MildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFso
MikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgIH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDMzOgorCisgICAgeyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcE51bGw7IH0KKyAgICBi
cmVhazsKKworICBjYXNlIDM0OgorCisgICAgeyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcE5lZ2F0
aXZlOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAzNToKKworICAgIHsgKHl5dmFsLmludGVybSku
b3AgPSBFT3BMb2dpY2FsTm90OyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAzNjoKKworICAgIHsg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDM3OgorCisgICAgewor
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BNdWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgY29udGV4
dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICIqIiwgKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFso
MykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsK
KyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMzg6CisKKyAg
ICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcERpdiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAg
aWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBj
b250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIi8iLCAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5
dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5n
KCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAzOToK
KworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDQwOgor
CisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BBZGQsICh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAg
ICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAg
ICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICIrIiwgKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCks
ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0
cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2Ug
NDE6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcFN1YiwgKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsK
KyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAg
ICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIi0iLCAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJp
bmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBs
ZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSA0MjoKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KKyAgICBicmVhazsKKworICBj
YXNlIDQzOgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQorICAgIGJyZWFrOworCisgIGNh
c2UgNDQ6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExlc3NUaGFuLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9s
VGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDAp
IHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0p
LCAiPCIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21w
bGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25b
MV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVk
LCBFdnFDb25zdCksICh5eWxzcFsoMikgLSAoMyldKSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSA0NToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wR3Jl
YXRlclRoYW4sICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2
c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0p
LCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigo
eXlsc3BbKDIpIC0gKDMpXSksICI+IiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBu
ZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChm
YWxzZSk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRC
b29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygyKSAtICgzKV0pKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDQ2OgorCisgICAgeworICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
QmluYXJ5TWF0aChFT3BMZXNzVGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAo
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiPD0iLCAoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNw
WygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkp
OworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRV
bmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5p
b25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVu
aW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3Bb
KDIpIC0gKDMpXSkpOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNDc6
CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuRXF1YWwsICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1i
b2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0g
MCkgeworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMp
XSksICI+PSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRD
b21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZp
bmVkLCBFdnFDb25zdCksICh5eWxzcFsoMikgLSAoMyldKSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSA0ODoKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KKyAg
ICBicmVhazsKKworICBjYXNlIDQ5OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BF
cXVhbCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFso
MykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNv
bnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxz
cFsoMikgLSAoMyldKSwgIj09IiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcg
Q29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxz
ZSk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29s
LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygyKSAtICgzKV0pKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDUwOgorCisgICAgeworICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmlu
YXJ5TWF0aChFT3BOb3RFcXVhbCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3Bb
KDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5h
cnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIiE9IiwgKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVu
aW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXkt
PnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5
LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygyKSAtICgz
KV0pKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDUxOgorCisgICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsgfQorICAgIGJyZWFrOworCisgIGNhc2UgNTI6CisKKyAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA1MzoKKworICAgIHsg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDU0OgorCisgICAgeyAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKTsgfQorICAgIGJyZWFrOworCisgIGNhc2UgNTU6CisKKyAgICB7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxBbmQsICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAg
IGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAg
Y29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICImJiIsICh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAo
eXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJp
bmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBDb25z
dGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAg
ICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5p
b24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5
eWxzcFsoMikgLSAoMyldKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSA1NjoKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KKyAgICBicmVhazsKKworICBjYXNl
IDU3OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2FsWG9yLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9s
VGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDAp
IHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0p
LCAiXl4iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29t
cGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
WzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5l
ZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOworICAgICAgICB9CisgICAgfQorICAg
IGJyZWFrOworCisgIGNhc2UgNTg6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSA1OToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9n
aWNhbE9yLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNw
WygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwg
Y29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5
bHNwWygyKSAtICgzKV0pLCAifHwiLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZh
bHNlKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJv
b2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOworICAgICAg
ICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNjA6CisKKyAgICB7ICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2MToKKworICAgIHsKKyAgICAgICBpZiAo
Y29udGV4dC0+Ym9vbEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg1KV0pLCAoeXl2c3BbKDEpIC0g
KDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZFNlbGVjdGlvbigoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eXZzcFsoNSkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0g
KDUpXSkpOworICAgICAgICBpZiAoKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldFR5cGUoKSAhPSAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0VHlwZSgpKQorICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gMDsKKworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09
IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICg1
KV0pLCAiOiIsICh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRD
b21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDUp
IC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBi
cmVhazsKKworICBjYXNlIDYyOgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQorICAgIGJy
ZWFrOworCisgIGNhc2UgNjM6CisKKyAgICB7CisgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVF
cnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMyldKSwgImFzc2lnbiIsICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEFzc2lnbigoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0pLm9wLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CisgICAgICAgIGlmICgo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgY29udGV4
dC0+YXNzaWduRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiYXNzaWduIiwgKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZz
cFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygp
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNjQ6CisK
KyAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wQXNzaWduOyB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSA2NToKKworICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BNdWxBc3NpZ247IH0KKyAg
ICBicmVhazsKKworICBjYXNlIDY2OgorCisgICAgeyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcERp
dkFzc2lnbjsgfQorICAgIGJyZWFrOworCisgIGNhc2UgNjc6CisKKyAgICB7ICh5eXZhbC5pbnRl
cm0pLm9wID0gRU9wQWRkQXNzaWduOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2ODoKKworICAg
IHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BTdWJBc3NpZ247IH0KKyAgICBicmVhazsKKworICBj
YXNlIDY5OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSA3MDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbW1hKCh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKKyAgICAgICAgaWYgKCh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5i
aW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIiwiLCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3MToKKworICAgIHsK
KyAgICAgICAgaWYgKGNvbnRleHQtPmNvbnN0RXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNl
IDcyOgorCisgICAgeworICAgICAgICBURnVuY3Rpb24gJmZ1bmN0aW9uID0gKigoeXl2c3BbKDEp
IC0gKDIpXS5pbnRlcm0pLmZ1bmN0aW9uKTsKKyAgICAgICAgCisgICAgICAgIFRJbnRlcm1BZ2dy
ZWdhdGUgKnByb3RvdHlwZSA9IG5ldyBUSW50ZXJtQWdncmVnYXRlOworICAgICAgICBwcm90b3R5
cGUtPnNldFR5cGUoZnVuY3Rpb24uZ2V0UmV0dXJuVHlwZSgpKTsKKyAgICAgICAgcHJvdG90eXBl
LT5zZXROYW1lKGZ1bmN0aW9uLmdldE5hbWUoKSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKTsgaSsrKQorICAgICAgICB7
CisgICAgICAgICAgICBjb25zdCBUUGFyYW1ldGVyICZwYXJhbSA9IGZ1bmN0aW9uLmdldFBhcmFt
KGkpOworICAgICAgICAgICAgaWYgKHBhcmFtLm5hbWUgIT0gMCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBUVmFyaWFibGUgdmFyaWFibGUocGFyYW0ubmFtZSwgKnBhcmFtLnR5cGUp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHByb3RvdHlwZSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKHByb3RvdHlwZSwgY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFN5bWJvbCh2YXJpYWJsZS5nZXRVbmlxdWVJZCgpLCB2YXJpYWJsZS5nZXROYW1lKCks
IHZhcmlhYmxlLmdldFR5cGUoKSwgKHl5bHNwWygxKSAtICgyKV0pKSwgKHl5bHNwWygxKSAtICgy
KV0pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBwcm90b3R5cGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3Jl
Z2F0ZShwcm90b3R5cGUsIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsICpw
YXJhbS50eXBlLCAoeXlsc3BbKDEpIC0gKDIpXSkpLCAoeXlsc3BbKDEpIC0gKDIpXSkpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwcm90b3R5cGUtPnNldE9w
KEVPcFByb3RvdHlwZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBwcm90
b3R5cGU7CisKKyAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7CisgICAgfQorICAg
IGJyZWFrOworCisgIGNhc2UgNzM6CisKKyAgICB7CisgICAgICAgIGlmICgoeXl2c3BbKDEpIC0g
KDIpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSkKKyAgICAgICAgICAgICh5eXZzcFsoMSkgLSAo
MildLmludGVybSkuaW50ZXJtQWdncmVnYXRlLT5zZXRPcChFT3BEZWNsYXJhdGlvbik7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0p
LmludGVybUFnZ3JlZ2F0ZTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3NDoKKworICAg
IHsKKyAgICAgICAgaWYgKCgoeXl2c3BbKDIpIC0gKDQpXS5pbnRlcm0ucHJlY2lzaW9uKSA9PSBF
YnBIaWdoKSAmJiAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpICYm
ICFjb250ZXh0LT5mcmFnbWVudFByZWNpc2lvbkhpZ2gpIHsKKyAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eWxzcFsoMSkgLSAoNCldKSwgInByZWNpc2lvbiBpcyBub3Qgc3VwcG9ydGVkIGlu
IGZyYWdtZW50IHNoYWRlciIsICJoaWdocCIpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICB9CisgICAgICAgIGlmICghY29udGV4dC0+c3ltYm9sVGFibGUuc2V0RGVm
YXVsdFByZWNpc2lvbiggKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLnR5cGUpLCAoeXl2c3BbKDIp
IC0gKDQpXS5pbnRlcm0ucHJlY2lzaW9uKSApKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXlsc3BbKDEpIC0gKDQpXSksICJpbGxlZ2FsIHR5cGUgYXJndW1lbnQgZm9yIGRlZmF1bHQg
cHJlY2lzaW9uIHF1YWxpZmllciIsIGdldEJhc2ljU3RyaW5nKCh5eXZzcFsoMykgLSAoNCldLmlu
dGVybS50eXBlKS50eXBlKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgIH0KKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IDA7CisgICAgfQorICAg
IGJyZWFrOworCisgIGNhc2UgNzU6CisKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIE11
bHRpcGxlIGRlY2xhcmF0aW9ucyBvZiB0aGUgc2FtZSBmdW5jdGlvbiBhcmUgYWxsb3dlZC4KKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGRlZmluaXRpb24sIHRoZSBkZWZpbml0
aW9uIHByb2R1Y3Rpb24gY29kZSB3aWxsIGNoZWNrIGZvciByZWRlZmluaXRpb25zCisgICAgICAg
IC8vICh3ZSBkb24ndCBrbm93IGF0IHRoaXMgcG9pbnQgaWYgaXQncyBhIGRlZmluaXRpb24gb3Ig
bm90KS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gUmVkZWNsYXJhdGlvbnMgYXJlIGFsbG93ZWQu
ICBCdXQsIHJldHVybiB0eXBlcyBhbmQgcGFyYW1ldGVyIHF1YWxpZmllcnMgbXVzdCBtYXRjaC4K
KyAgICAgICAgLy8KKyAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nhc3Q8VEZ1
bmN0aW9uKj4oY29udGV4dC0+c3ltYm9sVGFibGUuZmluZCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0uZnVuY3Rpb24pLT5nZXRNYW5nbGVkTmFtZSgpKSk7CisgICAgICAgIGlmIChwcmV2RGVjKSB7
CisgICAgICAgICAgICBpZiAocHJldkRlYy0+Z2V0UmV0dXJuVHlwZSgpICE9ICh5eXZzcFsoMSkg
LSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFJldHVyblR5cGUoKSkgeworICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgIm92ZXJsb2FkZWQgZnVuY3Rp
b25zIG11c3QgaGF2ZSB0aGUgc2FtZSByZXR1cm4gdHlwZSIsICh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS5mdW5jdGlvbiktPmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpKTsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZXZEZWMtPmdldFBhcmFtQ291bnQoKTsgKytpKSB7
CisgICAgICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxp
ZmllcigpICE9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFBhcmFtKGkp
LnR5cGUtPmdldFF1YWxpZmllcigpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eWxzcFsoMikgLSAoMildKSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0
aGUgc2FtZSBwYXJhbWV0ZXIgcXVhbGlmaWVycyIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5m
dW5jdGlvbiktPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllclN0cmluZygpKTsKKyAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vCisgICAgICAgIC8vIENoZWNrIGZv
ciBwcmV2aW91c2x5IGRlY2xhcmVkIHZhcmlhYmxlcyB1c2luZyB0aGUgc2FtZSBuYW1lLgorICAg
ICAgICAvLworICAgICAgICBUU3ltYm9sICpwcmV2U3ltID0gY29udGV4dC0+c3ltYm9sVGFibGUu
ZmluZCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXROYW1lKCkpOworICAg
ICAgICBpZiAocHJldlN5bSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFwcmV2U3ltLT5p
c0Z1bmN0aW9uKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoKHl5bHNwWygyKSAtICgyKV0pLCAicmVkZWZpbml0aW9uIiwgKHl5dnNwWygxKSAtICgyKV0u
aW50ZXJtLmZ1bmN0aW9uKS0+Z2V0TmFtZSgpLmNfc3RyKCksICJmdW5jdGlvbiIpOworICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEluc2VydCB0aGUgdW5tYW5n
bGVkIG5hbWUgdG8gZGV0ZWN0IHBvdGVudGlhbCBmdXR1cmUgcmVkZWZpbml0aW9uIGFzIGEgdmFy
aWFibGUuCisgICAgICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5nZXRPdXRlckxldmVsKCkt
Pmluc2VydCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXROYW1lKCksICoo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vCisgICAgICAgIC8vIElmIHRoaXMgaXMgYSByZWRlY2xhcmF0aW9uLCBpdCBjb3VsZCBhbHNv
IGJlIGEgZGVmaW5pdGlvbiwKKyAgICAgICAgLy8gaW4gd2hpY2ggY2FzZSwgd2Ugd2FudCB0byB1
c2UgdGhlIHZhcmlhYmxlIG5hbWVzIGZyb20gdGhpcyBvbmUsIGFuZCBub3QgdGhlIG9uZSB0aGF0
J3MKKyAgICAgICAgLy8gYmVpbmcgcmVkZWNsYXJlZC4gIFNvLCBwYXNzIGJhY2sgdXAgdGhpcyBk
ZWNsYXJhdGlvbiwgbm90IHRoZSBvbmUgaW4gdGhlIHN5bWJvbCB0YWJsZS4KKyAgICAgICAgLy8K
KyAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0uZnVuY3Rpb24pOworCisgICAgICAgIC8vIFdlJ3JlIGF0IHRoZSBpbm5lciBzY29wZSBsZXZl
bCBvZiB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudHMgYW5kIGJvZHkgc3RhdGVtZW50LgorICAgICAg
ICAvLyBBZGQgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZSB0byB0aGUgc3Vycm91bmRpbmcgc2NvcGUg
aW5zdGVhZC4KKyAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUuZ2V0T3V0ZXJMZXZlbCgpLT5p
bnNlcnQoKih5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSA3NjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24pOworICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDc3OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5mdW5jdGlvbik7CisgICAgfQorICAgIGJyZWFrOworCisgIGNh
c2UgNzg6CisKKyAgICB7CisgICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyCisgICAgICAgICh5
eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9u
KTsKKyAgICAgICAgaWYgKCh5eXZzcFsoMikgLSAoMildLmludGVybSkucGFyYW0udHlwZS0+Z2V0
QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkKKyAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS5mdW5jdGlvbiktPmFkZFBhcmFtZXRlcigoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLnBh
cmFtKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGVsZXRlICh5eXZzcFsoMikgLSAoMild
LmludGVybSkucGFyYW0udHlwZTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3OToKKwor
ICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gT25seSBmaXJzdCBwYXJhbWV0ZXIgb2Ygb25l
LXBhcmFtZXRlciBmdW5jdGlvbnMgY2FuIGJlIHZvaWQKKyAgICAgICAgLy8gVGhlIGNoZWNrIGZv
ciBuYW1lZCBwYXJhbWV0ZXJzIG5vdCBiZWluZyB2b2lkIGlzIGRvbmUgaW4gcGFyYW1ldGVyX2Rl
Y2xhcmF0b3IKKyAgICAgICAgLy8KKyAgICAgICAgaWYgKCh5eXZzcFsoMykgLSAoMyldLmludGVy
bSkucGFyYW0udHlwZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgeworICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgIC8vIFRoaXMgcGFyYW1ldGVyID4gZmlyc3QgaXMgdm9pZAorICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwg
ImNhbm5vdCBiZSBhbiBhcmd1bWVudCB0eXBlIGV4Y2VwdCBmb3IgJyh2b2lkKSciLCAidm9pZCIp
OworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgZGVsZXRlICh5
eXZzcFsoMykgLSAoMyldLmludGVybSkucGFyYW0udHlwZTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyCisgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LmZ1bmN0aW9uKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5mdW5jdGlvbik7CisgICAgICAg
ICAgICAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uZnVuY3Rpb24pLT5hZGRQYXJhbWV0ZXIoKHl5
dnNwWygzKSAtICgzKV0uaW50ZXJtKS5wYXJhbSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSA4MDoKKworICAgIHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyld
LmludGVybS50eXBlKS5xdWFsaWZpZXIgIT0gRXZxR2xvYmFsICYmICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS50eXBlKS5xdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7CisgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICJubyBxdWFsaWZpZXJzIGFsbG93ZWQg
Zm9yIGZ1bmN0aW9uIHJldHVybiIsIGdldFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gbWFrZSBzdXJlIGEgc2FtcGxlciBpcyBub3QgaW52
b2x2ZWQgYXMgd2VsbC4uLgorICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJy
b3JDaGVjaygoeXlsc3BbKDIpIC0gKDMpXSksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBl
KSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgLy8gQWRkIHRo
ZSBmdW5jdGlvbiBhcyBhIHByb3RvdHlwZSBhZnRlciBwYXJzaW5nIGl0ICh3ZSBkbyBub3Qgc3Vw
cG9ydCByZWN1cnNpb24pCisgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb247CisgICAgICAgIFRU
eXBlIHR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpKTsKKyAgICAgICAgZnVuY3Rp
b24gPSBuZXcgVEZ1bmN0aW9uKCh5eXZzcFsoMikgLSAoMyldLmxleCkuc3RyaW5nLCB0eXBlKTsK
KyAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSBmdW5jdGlvbjsKKyAgICAgICAgCisg
ICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsKKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSA4MToKKworICAgIHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMildLmludGVy
bS50eXBlKS50eXBlID09IEVidFZvaWQpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eWxzcFsoMikgLSAoMildKSwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgKHl5dnNwWygy
KSAtICgyKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICB9CisgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hl
Y2soKHl5bHNwWygyKSAtICgyKV0pLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcpKQor
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBUUGFyYW1ldGVyIHBhcmFt
ID0geyh5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLCBuZXcgVFR5cGUoKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLnR5cGUpKX07CisgICAgICAgICh5eXZhbC5pbnRlcm0pLnBhcmFtID0gcGFy
YW07CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgODI6CisKKyAgICB7CisgICAgICAgIC8v
IENoZWNrIHRoYXQgd2UgY2FuIG1ha2UgYW4gYXJyYXkgb3V0IG9mIHRoaXMgdHlwZQorICAgICAg
ICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDUpXSksICh5
eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygoeXlsc3Bb
KDIpIC0gKDUpXSksICooeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0cmluZykpCisgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaW50IHNpemU7CisgICAgICAgIGlmIChj
b250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwgKHl5dnNwWyg0
KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNpemUpKQorICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSku
c2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CisKKyAgICAgICAgVFR5cGUqIHR5cGUgPSBuZXcgVFR5cGUo
KHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKTsKKyAgICAgICAgVFBhcmFtZXRlciBwYXJh
bSA9IHsgKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsIHR5cGUgfTsKKyAgICAgICAgKHl5
dmFsLmludGVybSkucGFyYW0gPSBwYXJhbTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA4
MzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDMpIC0gKDMpXS5p
bnRlcm0pOworICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5eWxzcFsoMykg
LSAoMyldKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciwgKHl5dnNw
WygyKSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRlcm0pLnBhcmFtLnR5cGUp
KQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgIH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDg0OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMikg
LSAoMildLmludGVybSk7CisgICAgICAgIGlmIChjb250ZXh0LT5wYXJhbWV0ZXJTYW1wbGVyRXJy
b3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksICh5eXZzcFsoMSkgLSAoMildLmludGVybS5xdWFs
aWZpZXIpLCAqKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKS5wYXJhbS50eXBlKSkKKyAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JD
aGVjaygoeXlsc3BbKDIpIC0gKDIpXSksIEV2cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICgyKV0u
aW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRlcm0pLnBhcmFtLnR5cGUpKQorICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDg1Ogor
CisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMykgLSAoMyldLmludGVy
bSk7CisgICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICgz
KV0pLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyLCAoeXl2c3BbKDIp
IC0gKDMpXS5pbnRlcm0ucXVhbGlmaWVyKSwgKHl5dmFsLmludGVybSkucGFyYW0udHlwZSkpCisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNh
c2UgODY6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygyKSAtICgy
KV0uaW50ZXJtKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtZXRlclNhbXBsZXJFcnJvckNo
ZWNrKCh5eWxzcFsoMikgLSAoMildKSwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnF1YWxpZmll
ciksICooeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNr
KCh5eWxzcFsoMikgLSAoMildKSwgRXZxVGVtcG9yYXJ5LCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0ucXVhbGlmaWVyKSwgKHl5dmFsLmludGVybSkucGFyYW0udHlwZSkpCisgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgODc6CisKKyAg
ICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cUluOworICAgIH0KKyAg
ICBicmVhazsKKworICBjYXNlIDg4OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnF1
YWxpZmllcikgPSBFdnFJbjsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA4OToKKworICAg
IHsKKyAgICAgICAgKHl5dmFsLmludGVybS5xdWFsaWZpZXIpID0gRXZxT3V0OworICAgIH0KKyAg
ICBicmVhazsKKworICBjYXNlIDkwOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnF1
YWxpZmllcikgPSBFdnFJbk91dDsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5MToKKwor
ICAgIHsKKyAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBlKCh5eXZzcFso
MSkgLSAoMSldLmludGVybS50eXBlKSkgfTsKKyAgICAgICAgKHl5dmFsLmludGVybSkucGFyYW0g
PSBwYXJhbTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5MjoKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pOworICAgIH0KKyAg
ICBicmVhazsKKworICBjYXNlIDkzOgorCisgICAgeworICAgICAgICBpZiAoKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtKS50eXBlLnR5cGUgPT0gRWJ0SW52YXJpYW50ICYmICEoeXl2c3BbKDMpIC0g
KDMpXS5sZXgpLnN5bWJvbCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
KHl5bHNwWygzKSAtICgzKV0pLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGlu
dmFyaWFudCIsICh5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIFRJbnRlcm1T
eW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZz
cFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0p
LnR5cGUpLCAoeXlsc3BbKDMpIC0gKDMpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRl
cm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0pLmludGVybU5vZGUsIHN5bWJvbCwgKHl5bHNwWygzKSAtICgzKV0p
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNo
ZWNrKCh5eWxzcFsoMykgLSAoMyldKSwgKHl5dmFsLmludGVybSkudHlwZSkpCisgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25z
dEVycm9yQ2hlY2soKHl5bHNwWygzKSAtICgzKV0pLCAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5z
dHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5cGUsIGZhbHNlKSkKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKworICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKKyAgICAgICAg
aWYgKGNvbnRleHQtPm5vbkluaXRFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoMyldKSwgKih5eXZz
cFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2YWwuaW50ZXJtKS50eXBlLCB2YXJpYWJsZSkp
CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChzeW1ib2wgJiYg
dmFyaWFibGUpCisgICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJ
ZCgpKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5NDoKKworICAgIHsKKyAgICAgICAg
aWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0p
LCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNr
KCh5eWxzcFsoMykgLSAoNSldKSwgKih5eXZzcFsoMykgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2
c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUsIHRydWUpKQorICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworCisgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICg1KV0u
aW50ZXJtKTsKKworICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXls
c3BbKDQpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSkgfHwgY29udGV4
dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoNCkgLSAoNSldKSwgKHl5dnNwWygx
KSAtICg1KV0uaW50ZXJtKS50eXBlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5
cGUuc2V0QXJyYXkodHJ1ZSk7CisgICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlOworICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygoeXlsc3BbKDQpIC0gKDUpXSks
ICooeXl2c3BbKDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJt
KS50eXBlLCB2YXJpYWJsZSkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgOTU6CisKKyAgICB7CisgICAg
ICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAo
NildKSwgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50eXBlKSkKKyAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKKworICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JD
aGVjaygoeXlsc3BbKDMpIC0gKDYpXSksICooeXl2c3BbKDMpIC0gKDYpXS5sZXgpLnN0cmluZywg
KHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50eXBlLCB0cnVlKSkKKyAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKKworICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAo
NildLmludGVybSk7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2so
KHl5bHNwWyg0KSAtICg2KV0pLCAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUpIHx8IGNv
bnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDQpIC0gKDYpXSksICh5eXZz
cFsoMSkgLSAoNildLmludGVybSkudHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW50IHNpemU7CisgICAgICAgICAgICBp
ZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygoeXlsc3BbKDQpIC0gKDYpXSksICh5eXZz
cFsoNSkgLSAoNildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBzaXplKSkKKyAgICAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDYpXS5p
bnRlcm0pLnR5cGUuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CisgICAgICAgICAgICBUVmFyaWFibGUq
IHZhcmlhYmxlID0gMDsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheUVycm9yQ2hlY2so
KHl5bHNwWyg0KSAtICg2KV0pLCAqKHl5dnNwWygzKSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eXZz
cFsoMSkgLSAoNildLmludGVybSkudHlwZSwgdmFyaWFibGUpKQorICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIFRUeXBlIHR5cGUgPSBUVHlwZSgoeXl2c3Bb
KDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUpOworICAgICAgICAgICAgdHlwZS5zZXRBcnJheVNpemUo
c2l6ZSk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0p
LmludGVybU5vZGUsIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUgPyB2
YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSA6IDAsICooeXl2c3BbKDMpIC0gKDYpXS5sZXgpLnN0cmlu
ZywgdHlwZSwgKHl5bHNwWygzKSAtICg2KV0pKSwgKHl5bHNwWygzKSAtICg2KV0pKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDk2OgorCisgICAgeworICAgICAgICBp
ZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDUpXSks
ICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisKKyAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDUpXS5p
bnRlcm0pOworCisgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOworICAgICAgICBpZiAo
IWNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigoeXlsc3BbKDMpIC0gKDUpXSksICooeXl2c3Bb
KDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlLCAo
eXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW50ZXJtTm9kZSkpIHsK
KyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBidWlsZCB0aGUgaW50ZXJtZWRpYXRlIHJl
cHJlc2VudGF0aW9uCisgICAgICAgICAgICAvLworICAgICAgICAgICAgaWYgKGludGVybU5vZGUp
CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoNSldLmludGVybSkuaW50ZXJtTm9k
ZSwgaW50ZXJtTm9kZSwgKHl5bHNwWyg0KSAtICg1KV0pKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAoeXl2c3BbKDEp
IC0gKDUpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmlu
dGVybUFnZ3JlZ2F0ZSA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSA5NzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS50eXBlKTsKKyAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVn
YXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZFN5bWJvbCgwLCAiIiwgVFR5cGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5
cGUpKSwgKHl5bHNwWygxKSAtICgxKV0pKSwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSA5ODoKKworICAgIHsKKyAgICAgICAgVEludGVybVN5bWJvbCog
c3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAt
ICgyKV0ubGV4KS5zdHJpbmcsIFRUeXBlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKSks
ICh5eWxzcFsoMikgLSAoMildKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3Jl
Z2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgKHl5bHNw
WygyKSAtICgyKV0pKTsKKyAgICAgICAgCisgICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFs
aWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgKHl5dmFsLmludGVybSkudHlwZSkp
CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQt
Pm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgyKV0pLCAqKHl5dnNwWygyKSAt
ICgyKV0ubGV4KS5zdHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5cGUsIGZhbHNlKSkKKyAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgKHl5dmFs
LmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKTsKKworICAgICAg
ICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKKyAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRF
cnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgKih5eXZzcFsoMikgLSAoMildLmxleCkuc3Ry
aW5nLCAoeXl2YWwuaW50ZXJtKS50eXBlLCB2YXJpYWJsZSkpCisgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCisgICAgICAgICAg
ICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSA5OToKKworICAgIHsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNw
WygyKSAtICg0KV0pLCAidW5zaXplZCBhcnJheSBkZWNsYXJhdGlvbnMgbm90IHN1cHBvcnRlZCIs
ICh5eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKKyAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworCisgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5n
LCBUVHlwZSgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpLCAoeXlsc3BbKDIpIC0gKDQp
XSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsICh5eWxzcFsoMikgLSAoNCldKSk7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlw
ZSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTAwOgorCisgICAgeworICAgICAgICBU
VHlwZSB0eXBlID0gVFR5cGUoKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKTsKKyAgICAg
ICAgaW50IHNpemU7CisgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5
eWxzcFsoMikgLSAoNSldKSwgKHl5dnNwWyg0KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSksIHNpemUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB0eXBl
LnNldEFycmF5U2l6ZShzaXplKTsKKyAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5z
dHJpbmcsIHR5cGUsICh5eWxzcFsoMikgLSAoNSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0p
LmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5
bWJvbCwgKHl5bHNwWygyKSAtICg1KV0pKTsKKyAgICAgICAgCisgICAgICAgIGlmIChjb250ZXh0
LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNSldKSwgKHl5dnNwWygx
KSAtICg1KV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KworICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygoeXlsc3BbKDIp
IC0gKDUpXSksICooeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1
KV0uaW50ZXJtLnR5cGUpLCB0cnVlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KworICAgICAgICAoeXl2YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICg1KV0uaW50ZXJt
LnR5cGUpOworCisgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eWxz
cFsoMykgLSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKSB8fCBjb250ZXh0
LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0pLCAoeXl2c3BbKDEp
IC0gKDUpXS5pbnRlcm0udHlwZSkpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludCBzaXplOworICAgICAgICAgICAgaWYgKGNv
bnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0pLCAoeXl2c3BbKDQp
IC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCisgICAgICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDUpXS5pbnRl
cm0udHlwZSkuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CisgICAgICAgICAgICBUVmFyaWFibGUqIHZh
cmlhYmxlID0gMDsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheUVycm9yQ2hlY2soKHl5
bHNwWygzKSAtICg1KV0pLCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFso
MSkgLSAoNSldLmludGVybS50eXBlKSwgdmFyaWFibGUpKQorICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCisgICAg
ICAgICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDE6CisKKyAgICB7CisgICAgICAg
IGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNCld
KSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKworICAgICAgICAoeXl2YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAt
ICg0KV0uaW50ZXJtLnR5cGUpOworCisgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOwor
ICAgICAgICBpZiAoIWNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigoeXlsc3BbKDIpIC0gKDQp
XSksICooeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg0KV0uaW50
ZXJtLnR5cGUpLCAoeXl2c3BbKDQpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW50
ZXJtTm9kZSkpIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQnVpbGQgaW50ZXJtZWRpYXRlIHJl
cHJlc2VudGF0aW9uCisgICAgICAgIC8vCisgICAgICAgICAgICBpZihpbnRlcm1Ob2RlKQorICAg
ICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKGludGVybU5vZGUsICh5eWxzcFsoMykgLSAoNCldKSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJt
QWdncmVnYXRlID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IDA7
CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDI6CisKKyAgICB7Cisg
ICAgICAgIFZFUlRFWF9PTkxZKCJpbnZhcmlhbnQgZGVjbGFyYXRpb24iLCAoeXlsc3BbKDEpIC0g
KDIpXSkpOworICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXlsc3BbKDEp
IC0gKDIpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImludmFyaWFu
dCB2YXJ5aW5nIikpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0pLnR5cGUuc2V0QmFzaWMoRWJ0SW52YXJpYW50LCBFdnFJbnZhcmlhbnRWYXJ5
aW5nT3V0LCAoeXlsc3BbKDIpIC0gKDIpXSkpOworICAgICAgICBpZiAoISh5eXZzcFsoMikgLSAo
MildLmxleCkuc3ltYm9sKQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXlsc3BbKDIpIC0gKDIpXSksICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52
YXJpYW50IiwgKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOworICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcs
IFRUeXBlKCh5eXZhbC5pbnRlcm0pLnR5cGUpLCAoeXlsc3BbKDIpIC0gKDIpXSkpOworICAgICAg
ICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCAoeXlsc3BbKDIpIC0gKDIpXSkpOworICAgICAgICB9
CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTAzOgorCisgICAgeworICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOworCisgICAg
ICAgIGlmICgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuYXJyYXkpIHsKKyAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgIm5vdCBzdXBwb3J0ZWQiLCAi
Zmlyc3QtY2xhc3MgYXJyYXkiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgICAgICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zZXRBcnJheShmYWxzZSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDQ6CisKKyAgICB7Cisg
ICAgICAgIGlmICgoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkuYXJyYXkpIHsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgIm5vdCBzdXBwb3J0ZWQi
LCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgICAgICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5zZXRBcnJheShmYWxz
ZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5
cGUpLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUgJiYKKyAgICAgICAgICAgICgoeXl2c3BbKDIp
IC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRCb29sIHx8ICh5eXZzcFsoMikgLSAoMild
LmludGVybS50eXBlKS50eXBlID09IEVidEludCkpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eWxzcFsoMikgLSAoMildKSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxp
ZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSk7Cisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCgo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyID09IEV2cVZhcnlpbmdJbiB8
fCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyID09IEV2cVZhcnlpbmdP
dXQpICYmCisgICAgICAgICAgICAoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUg
PT0gRWJ0Qm9vbCB8fCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRJ
bnQpKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICJj
YW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAtICgy
KV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcikpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICB9CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDIp
IC0gKDIpXS5pbnRlcm0udHlwZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucXVhbGlm
aWVyID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcjsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxMDU6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxQ29uc3QsICh5eWxzcFsoMSkgLSAoMSldKSk7Cisg
ICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTA2OgorCisgICAgeworICAgICAgICBWRVJURVhf
T05MWSgiYXR0cmlidXRlIiwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgaWYgKGNvbnRl
eHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgxKV0pLCBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCksICJhdHRyaWJ1dGUiKSkKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lk
LCBFdnFBdHRyaWJ1dGUsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgMTA3OgorCisgICAgeworICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JD
aGVjaygoeXlsc3BbKDEpIC0gKDEpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2
ZWwoKSwgInZhcnlpbmciKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUikKKyAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVmFyeWluZ091dCwg
KHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFWYXJ5aW5nSW4sICh5eWxzcFsoMSkgLSAo
MSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTA4OgorCisgICAgeworICAgICAg
ICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDIpXSksIGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImludmFyaWFudCB2YXJ5aW5nIikpCisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChjb250ZXh0LT5zaGFk
ZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFyaWFudFZhcnlpbmdPdXQsICh5eWxzcFsoMSkg
LSAoMildKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSku
c2V0QmFzaWMoRWJ0Vm9pZCwgRXZxSW52YXJpYW50VmFyeWluZ0luLCAoeXlsc3BbKDEpIC0gKDIp
XSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEwOToKKworICAgIHsKKyAgICAgICAg
aWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgxKV0pLCBjb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ1bmlmb3JtIikpCisgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMo
RWJ0Vm9pZCwgRXZxVW5pZm9ybSwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxMTA6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7CisKKyAgICAgICAgaWYgKCh5eXZhbC5p
bnRlcm0udHlwZSkucHJlY2lzaW9uID09IEVicFVuZGVmaW5lZCkgeworICAgICAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5wcmVjaXNpb24gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5nZXREZWZh
dWx0UHJlY2lzaW9uKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS50eXBlKTsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5wcmVjaXNpb25FcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSld
KSwgKHl5dmFsLmludGVybS50eXBlKS5wcmVjaXNpb24sICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS50eXBlKS50eXBlKSkgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDExMToK
KworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMikgLSAoMild
LmludGVybS50eXBlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5wcmVjaXNpb24gPSAo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0ucHJlY2lzaW9uKTsKKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxMTI6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ucHJlY2lzaW9uKSA9
IEVicEhpZ2g7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTEzOgorCisgICAgeworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnByZWNpc2lvbikgPSBFYnBNZWRpdW07CisgICAgfQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTE0OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnByZWNp
c2lvbikgPSBFYnBMb3c7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTE1OgorCisgICAg
eworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LnR5cGUpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDExNjoKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKTsK
KworICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0g
KDQpXSksICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSkpCisgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW50IHNpemU7Cisg
ICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0g
KDQpXSksICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBzaXplKSkK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLnNldEFycmF5KHRydWUsIHNpemUpOworICAgICAgICB9CisgICAgfQorICAg
IGJyZWFrOworCisgIGNhc2UgMTE3OgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwg
PSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwg
cXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAx
MTg6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAt
ICgxKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTk6CisKKyAgICB7CisgICAg
ICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAg
IGJyZWFrOworCisgIGNhc2UgMTIwOgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwg
PSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwg
cXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAx
MjE6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAt
ICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMik7Cisg
ICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTIyOgorCisgICAgeworICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMo
RWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEy
MzoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0g
KDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjQ6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZp
ZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2Jh
bCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhF
YnRCb29sLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnNldEFnZ3JlZ2F0ZSgyKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjU6
CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEp
XSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgzKTsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjY6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRC
b29sLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjc6CisK
KyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0
R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDIpOworICAgIH0KKyAg
ICBicmVhazsKKworICBjYXNlIDEyODoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEludCwg
cXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5z
ZXRBZ2dyZWdhdGUoMyk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTI5OgorCisgICAg
eworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2Jh
bExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxMzA6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVh
bCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRB
Z2dyZWdhdGUoMiwgdHJ1ZSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTMxOgorCisg
ICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMsIHRydWUpOworICAg
IH0KKyAgICBicmVhazsKKworICBjYXNlIDEzMjoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmll
ciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFs
IDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVi
dEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnNldEFnZ3JlZ2F0ZSg0LCB0cnVlKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAxMzM6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyMkQsIHF1YWwsICh5eWxz
cFsoMSkgLSAoMSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTM0OgorCisgICAg
eworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2Jh
bExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkuc2V0QmFzaWMoRWJ0U2FtcGxlckN1YmUsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSld
KSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTM1OgorCisgICAgeworICAgICAgICBp
ZiAoIWNvbnRleHQtPnN1cHBvcnRzRXh0ZW5zaW9uKCJHTF9PRVNfRUdMX2ltYWdlX2V4dGVybmFs
IikpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgInVu
c3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlckV4dGVybmFsT0VTIik7CisgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNhbXBsZXJFeHRl
cm5hbE9FUywgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxMzY6CisKKyAgICB7CisgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNFeHRl
bnNpb24oIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIpKSB7CisgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSksICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXIy
RFJlY3QiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0U2FtcGxlcjJEUmVjdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsK
KyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzc6CisKKyAgICB7CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkucXVhbGlmaWVyID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRH
bG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgIH0KKyAgICBicmVh
azsKKworICBjYXNlIDEzODoKKworICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhpcyBp
cyBmb3IgdXNlciBkZWZpbmVkIHR5cGUgbmFtZXMuICBUaGUgbGV4aWNhbCBwaGFzZSBsb29rZWQg
dXAgdGhlCisgICAgICAgIC8vIHR5cGUuCisgICAgICAgIC8vCisgICAgICAgIFRUeXBlJiBzdHJ1
Y3R1cmUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN5
bWJvbCktPmdldFR5cGUoKTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFN0cnVjdCwgcXVhbCwgKHl5bHNw
WygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS51c2VyRGVmID0gJnN0
cnVjdHVyZTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzk6CisKKyAgICB7IGlmIChj
b250ZXh0LT5lbnRlclN0cnVjdERlY2xhcmF0aW9uKCh5eWxzcFsoMikgLSAoMyldKSwgKih5eXZz
cFsoMikgLSAoMyldLmxleCkuc3RyaW5nKSkgY29udGV4dC0+cmVjb3ZlcigpOyB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxNDA6CisKKyAgICB7CisgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZl
ZEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg2KV0pLCAqKHl5dnNwWygyKSAtICg2KV0ubGV4KS5z
dHJpbmcpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIFRUeXBl
KiBzdHJ1Y3R1cmUgPSBuZXcgVFR5cGUobmV3IFRTdHJ1Y3R1cmUoKHl5dnNwWygyKSAtICg2KV0u
bGV4KS5zdHJpbmcsICh5eXZzcFsoNSkgLSAoNildLmludGVybS5maWVsZExpc3QpKSk7CisgICAg
ICAgIFRWYXJpYWJsZSogdXNlclR5cGVEZWYgPSBuZXcgVFZhcmlhYmxlKCh5eXZzcFsoMikgLSAo
NildLmxleCkuc3RyaW5nLCAqc3RydWN0dXJlLCB0cnVlKTsKKyAgICAgICAgaWYgKCEgY29udGV4
dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp1c2VyVHlwZURlZikpIHsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eWxzcFsoMikgLSAoNildKSwgInJlZGVmaW5pdGlvbiIsICh5eXZzcFsoMikg
LSAoNildLmxleCkuc3RyaW5nLT5jX3N0cigpLCAic3RydWN0Iik7CisgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5z
ZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgKHl5bHNwWygxKSAtICg2KV0pKTsKKyAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKS51c2VyRGVmID0gc3RydWN0dXJlOworICAgICAgICBj
b250ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAxNDE6CisKKyAgICB7IGlmIChjb250ZXh0LT5lbnRlclN0cnVjdERlY2xhcmF0aW9uKCh5
eWxzcFsoMikgLSAoMildKSwgKih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nKSkgY29udGV4
dC0+cmVjb3ZlcigpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDI6CisKKyAgICB7CisgICAg
ICAgIFRUeXBlKiBzdHJ1Y3R1cmUgPSBuZXcgVFR5cGUobmV3IFRTdHJ1Y3R1cmUoTmV3UG9vbFRT
dHJpbmcoIiIpLCAoeXl2c3BbKDQpIC0gKDUpXS5pbnRlcm0uZmllbGRMaXN0KSkpOworICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFN0cnVjdCwgRXZxVGVtcG9yYXJ5LCAo
eXlsc3BbKDEpIC0gKDUpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnVzZXJEZWYg
PSBzdHJ1Y3R1cmU7CisgICAgICAgIGNvbnRleHQtPmV4aXRTdHJ1Y3REZWNsYXJhdGlvbigpOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE0MzoKKworICAgIHsKKyAgICAgICAgKHl5dmFs
LmludGVybS5maWVsZExpc3QpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmZpZWxkTGlzdCk7
CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTQ0OgorCisgICAgeworICAgICAgICAoeXl2
YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZmllbGRMaXN0
KTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRl
cm0uZmllbGRMaXN0KS0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIFRGaWVsZCogZmllbGQg
PSAoKih5eXZzcFsoMikgLSAoMildLmludGVybS5maWVsZExpc3QpKVtpXTsKKyAgICAgICAgICAg
IGZvciAoc2l6ZV90IGogPSAwOyBqIDwgKHl5dmFsLmludGVybS5maWVsZExpc3QpLT5zaXplKCk7
ICsraikgeworICAgICAgICAgICAgICAgIGlmICgoKih5eXZhbC5pbnRlcm0uZmllbGRMaXN0KSlb
al0tPm5hbWUoKSA9PSBmaWVsZC0+bmFtZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgImR1cGxpY2F0ZSBmaWVsZCBuYW1lIGluIHN0
cnVjdHVyZToiLCAic3RydWN0IiwgZmllbGQtPm5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0KS0+cHVzaF9iYWNrKGZp
ZWxkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE0NToKKworICAg
IHsKKyAgICAgICAgKHl5dmFsLmludGVybS5maWVsZExpc3QpID0gKHl5dnNwWygyKSAtICgzKV0u
aW50ZXJtLmZpZWxkTGlzdCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPnZvaWRFcnJvckNoZWNr
KCh5eWxzcFsoMSkgLSAoMyldKSwgKCooeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uZmllbGRMaXN0
KSlbMF0tPm5hbWUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpKSkgeworICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgKHl5dmFsLmludGVybS5maWVsZExpc3QpLT5zaXplKCk7ICsraSkg
eworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIENhcmVmdWwgbm90IHRvIHJlcGxhY2Ug
YWxyZWFkeSBrbm93biBhc3BlY3RzIG9mIHR5cGUsIGxpa2UgYXJyYXktbmVzcworICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgIFRUeXBlKiB0eXBlID0gKCooeXl2YWwuaW50ZXJtLmZpZWxkTGlz
dCkpW2ldLT50eXBlKCk7CisgICAgICAgICAgICB0eXBlLT5zZXRCYXNpY1R5cGUoKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLnR5cGUpLnR5cGUpOworICAgICAgICAgICAgdHlwZS0+c2V0Tm9taW5h
bFNpemUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnNpemUpOworICAgICAgICAgICAg
dHlwZS0+c2V0TWF0cml4KCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5tYXRyaXgpOwor
ICAgICAgICAgICAgdHlwZS0+c2V0UHJlY2lzaW9uKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50
eXBlKS5wcmVjaXNpb24pOworCisgICAgICAgICAgICAvLyBkb24ndCBhbGxvdyBhcnJheXMgb2Yg
YXJyYXlzCisgICAgICAgICAgICBpZiAodHlwZS0+aXNBcnJheSgpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgzKV0pLCAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkpKQorICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLnR5cGUpLmFycmF5KQorICAgICAgICAgICAgICAgIHR5cGUtPnNldEFy
cmF5U2l6ZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkuYXJyYXlTaXplKTsKKyAgICAg
ICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkudXNlckRlZikKKyAgICAg
ICAgICAgICAgICB0eXBlLT5zZXRTdHJ1Y3QoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUp
LnVzZXJEZWYtPmdldFN0cnVjdCgpKTsKKworICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVj
dE5lc3RpbmdFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMyldKSwgKigqKHl5dmFsLmludGVybS5m
aWVsZExpc3QpKVtpXSkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTQ2OgorCisgICAgeworICAgICAg
ICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSBOZXdQb29sVEZpZWxkTGlzdCgpOworICAgICAg
ICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uZmllbGQpKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDc6CisKKyAgICB7
CisgICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMykg
LSAoMyldLmludGVybS5maWVsZCkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE0ODoK
KworICAgIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygoeXlsc3Bb
KDEpIC0gKDEpXSksICooeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZykpCisgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgVFR5cGUqIHR5cGUgPSBuZXcgVFR5cGUo
RWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5maWVsZCkgPSBu
ZXcgVEZpZWxkKHR5cGUsICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxNDk6CisKKyAgICB7CisgICAgICAgIGlmIChjb250ZXh0LT5y
ZXNlcnZlZEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICg0KV0pLCAqKHl5dnNwWygxKSAtICg0KV0u
bGV4KS5zdHJpbmcpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAg
IFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7CisgICAgICAg
IGludCBzaXplID0gMDsKKyAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2so
KHl5bHNwWygzKSAtICg0KV0pLCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgc2l6ZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIHR5
cGUtPnNldEFycmF5U2l6ZShzaXplKTsKKworICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkKSA9
IG5ldyBURmllbGQodHlwZSwgKHl5dnNwWygxKSAtICg0KV0ubGV4KS5zdHJpbmcpOworICAgIH0K
KyAgICBicmVhazsKKworICBjYXNlIDE1MDoKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0K
KyAgICBicmVhazsKKworICBjYXNlIDE1MToKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1O
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQorICAgIGJyZWFr
OworCisgIGNhc2UgMTUyOgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSk7IH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDE1MzoKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTU0
OgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybU5vZGUpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNTU6CisKKyAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50
ZXJtTm9kZSk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDE1NjoKKworICAgIHsgKHl5dmFsLmlu
dGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsg
fQorICAgIGJyZWFrOworCisgIGNhc2UgMTU3OgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxNTg6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KKyAgICBicmVhazsKKworICBj
YXNlIDE1OToKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gMDsgfQor
ICAgIGJyZWFrOworCisgIGNhc2UgMTYwOgorCisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5w
dXNoKCk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDE2MToKKworICAgIHsgY29udGV4dC0+c3lt
Ym9sVGFibGUucG9wKCk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDE2MjoKKworICAgIHsKKyAg
ICAgICAgaWYgKCh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpICE9IDAp
IHsKKyAgICAgICAgICAgICh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUp
LT5zZXRPcChFT3BTZXF1ZW5jZSk7CisgICAgICAgICAgICAoeXl2c3BbKDMpIC0gKDUpXS5pbnRl
cm0uaW50ZXJtQWdncmVnYXRlKS0+c2V0TGluZSgoeXlsb2MpKTsKKyAgICAgICAgfQorICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgPSAoeXl2c3BbKDMpIC0gKDUpXS5pbnRl
cm0uaW50ZXJtQWdncmVnYXRlKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNjM6CisK
KyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtTm9kZSk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDE2NDoKKworICAgIHsgKHl5
dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1O
b2RlKTsgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTY1OgorCisgICAgeyBjb250ZXh0LT5zeW1i
b2xUYWJsZS5wdXNoKCk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDE2NjoKKworICAgIHsgY29u
dGV4dC0+c3ltYm9sVGFibGUucG9wKCk7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2
c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KKyAgICBicmVhazsKKworICBjYXNl
IDE2NzoKKworICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyB9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAxNjg6CisKKyAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOyAoeXl2
YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybU5v
ZGUpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNjk6CisKKyAgICB7CisgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE3
MDoKKworICAgIHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1B
Z2dyZWdhdGUpKSB7CisgICAgICAgICAgICAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
QWdncmVnYXRlKS0+c2V0T3AoRU9wU2VxdWVuY2UpOworICAgICAgICAgICAgKHl5dnNwWygyKSAt
ICgzKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSktPnNldExpbmUoKHl5bG9jKSk7CisgICAgICAg
IH0KKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMikgLSAoMyld
LmludGVybS5pbnRlcm1BZ2dyZWdhdGUpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE3
MToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybU5vZGUpLCAoeXlsb2MpKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNzI6
CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS5p
bnRlcm1BZ2dyZWdhdGUpLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5
eWxvYykpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE3MzoKKworICAgIHsgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKSA9IDA7IH0KKyAgICBicmVhazsKKworICBjYXNlIDE3NDoKKwor
ICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IHN0YXRpY19jYXN0PFRJbnRlcm1Ob2Rl
Kj4oKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpOyB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxNzU6CisKKyAgICB7CisgICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJy
b3JDaGVjaygoeXlsc3BbKDEpIC0gKDUpXSksICh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTZWxl
Y3Rpb24oKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFso
NSkgLSAoNSldLmludGVybS5ub2RlUGFpciksICh5eWxzcFsoMSkgLSAoNSldKSk7CisgICAgfQor
ICAgIGJyZWFrOworCisgIGNhc2UgMTc2OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJt
Lm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1Ob2RlKTsK
KyAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTIgPSAoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtTm9kZSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTc3Ogor
CisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5ub2Rl
UGFpcikubm9kZTIgPSAwOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE3ODoKKworICAg
IHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgICAgIGlmIChjb250ZXh0LT5ib29s
RXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0
TGluZSgpLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCisgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2Ug
MTc5OgorCisgICAgeworICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKKyAgICAgICAg
aWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg0KV0p
LCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpKQorICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2soKHl5bHNwWygy
KSAtICg0KV0pLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpKQorICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmICghY29udGV4dC0+ZXhlY3V0ZUluaXRp
YWxpemVyKCh5eWxzcFsoMikgLSAoNCldKSwgKih5eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5n
LCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSksICh5eXZzcFsoNCkgLSAoNCldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCBpbnRlcm1Ob2RlKSkKKyAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoNCkgLSAoNCldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IDA7CisgICAgICAg
IH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxODA6CisKKyAgICB7IGNvbnRleHQtPnN5
bWJvbFRhYmxlLnB1c2goKTsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxODE6CisKKyAgICB7CisgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxl
LnBvcCgpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZExvb3AoRUxvb3BXaGlsZSwgMCwgKHl5dnNwWyg0KSAtICg2KV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksIDAsICh5eXZzcFsoNikgLSAoNildLmludGVybS5pbnRlcm1Ob2Rl
KSwgKHl5bHNwWygxKSAtICg2KV0pKTsKKyAgICAgICAgLS1jb250ZXh0LT5sb29wTmVzdGluZ0xl
dmVsOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE4MjoKKworICAgIHsgKytjb250ZXh0
LT5sb29wTmVzdGluZ0xldmVsOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxODM6CisKKyAgICB7
CisgICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVjaygoeXlsc3BbKDgpIC0gKDgpXSks
ICh5eXZzcFsoNikgLSAoOCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKKyAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUp
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3AoRUxvb3BEb1doaWxlLCAwLCAoeXl2c3Bb
KDYpIC0gKDgpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgMCwgKHl5dnNwWygzKSAtICg4KV0u
aW50ZXJtLmludGVybU5vZGUpLCAoeXlsc3BbKDQpIC0gKDgpXSkpOworICAgICAgICAtLWNvbnRl
eHQtPmxvb3BOZXN0aW5nTGV2ZWw7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTg0Ogor
CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7ICsrY29udGV4dC0+bG9vcE5lc3Rp
bmdMZXZlbDsgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTg1OgorCisgICAgeworICAgICAgICBj
b250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1O
b2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRMb29wKEVMb29wRm9yLCAoeXl2c3BbKDQp
IC0gKDcpXS5pbnRlcm0uaW50ZXJtTm9kZSksIHJlaW50ZXJwcmV0X2Nhc3Q8VEludGVybVR5cGVk
Kj4oKHl5dnNwWyg1KSAtICg3KV0uaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSksIHJlaW50ZXJwcmV0
X2Nhc3Q8VEludGVybVR5cGVkKj4oKHl5dnNwWyg1KSAtICg3KV0uaW50ZXJtLm5vZGVQYWlyKS5u
b2RlMiksICh5eXZzcFsoNykgLSAoNyldLmludGVybS5pbnRlcm1Ob2RlKSwgKHl5bHNwWygxKSAt
ICg3KV0pKTsKKyAgICAgICAgLS1jb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOworICAgIH0KKyAg
ICBicmVhazsKKworICBjYXNlIDE4NjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxODc6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7Cisg
ICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTg4OgorCisgICAgeworICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxODk6CisKKyAgICB7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IDA7CisgICAgfQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTkwOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQ
YWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwor
ICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMiA9IDA7CisgICAgfQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTkxOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQ
YWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwor
ICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMiA9ICh5eXZzcFsoMykgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE5
MjoKKworICAgIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPD0gMCkg
eworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgyKV0pLCAiY29udGlu
dWUgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIiKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BDb250aW51ZSwgKHl5
bHNwWygxKSAtICgyKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxOTM6CisKKyAg
ICB7CisgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9IDApIHsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMildKSwgImJyZWFrIHN0YXRlbWVu
dCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wQnJlYWssICh5eWxzcFsoMSkgLSAoMild
KSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTk0OgorCisgICAgeworICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5j
aChFT3BSZXR1cm4sICh5eWxzcFsoMSkgLSAoMildKSk7CisgICAgICAgIGlmIChjb250ZXh0LT5j
dXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7CisgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDIpXSksICJub24tdm9pZCBmdW5jdGlv
biBtdXN0IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIpOworICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTk1Ogor
CisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1cm4sICh5eXZzcFsoMikgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDEpIC0gKDMpXSkpOworICAgICAgICBjb250ZXh0LT5m
dW5jdGlvblJldHVybnNWYWx1ZSA9IHRydWU7CisgICAgICAgIGlmIChjb250ZXh0LT5jdXJyZW50
RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkKSB7CisgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDMpXSksICJ2b2lkIGZ1bmN0aW9uIGNhbm5vdCBy
ZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgfSBlbHNlIGlmICgqKGNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUpICE9
ICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkpIHsK
KyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMyldKSwgImZ1bmN0aW9u
IHJldHVybiBpcyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0dXJuIik7CisgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAxOTY6CisKKyAgICB7CisgICAgICAgIEZSQUdfT05MWSgiZGlzY2FyZCIsICh5eWxzcFsoMSkg
LSAoMildKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcEtpbGwsICh5eWxzcFsoMSkgLSAoMildKSk7CisgICAg
fQorICAgIGJyZWFrOworCisgIGNhc2UgMTk3OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwor
ICAgICAgICBjb250ZXh0LT50cmVlUm9vdCA9ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSk7Cisg
ICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTk4OgorCisgICAgeworICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUo
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXl2c3BbKDIpIC0gKDIpXS5p
bnRlcm0uaW50ZXJtTm9kZSksICh5eWxvYykpOworICAgICAgICBjb250ZXh0LT50cmVlUm9vdCA9
ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2Ug
MTk5OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOworICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDIwMDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAyMDE6CisKKyAgICB7CisgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb24gPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmZ1bmN0aW9uOworICAgICAgICAKKyAgICAgICAgY29uc3Qg
VFN5bWJvbCAqYnVpbHRJbiA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKGZ1bmN0
aW9uLT5nZXRNYW5nbGVkTmFtZSgpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChidWlsdEluKQor
ICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSks
ICJidWlsdC1pbiBmdW5jdGlvbnMgY2Fubm90IGJlIHJlZGVmaW5lZCIsIGZ1bmN0aW9uLT5nZXRO
YW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRG
dW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoZnVuY3Rpb24tPmdldE1hbmdsZWRO
YW1lKCkpKTsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gTm90ZTogICdwcmV2RGVjJyBjb3VsZCBi
ZSAnZnVuY3Rpb24nIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUgc2VlbiBmdW5jdGlv
bgorICAgICAgICAvLyBhcyBpdCB3b3VsZCBoYXZlIGp1c3QgYmVlbiBwdXQgaW4gdGhlIHN5bWJv
bCB0YWJsZS4gIE90aGVyd2lzZSwgd2UncmUgbG9va2luZyB1cAorICAgICAgICAvLyBhbiBlYXJs
aWVyIG9jY3VyYW5jZS4KKyAgICAgICAgLy8KKyAgICAgICAgaWYgKHByZXZEZWMtPmlzRGVmaW5l
ZCgpKSB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVGhlbiB0aGlzIGZ1bmN0aW9u
IGFscmVhZHkgaGFzIGEgYm9keS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSksICJmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHki
LCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICB9CisgICAgICAgIHByZXZEZWMtPnNldERlZmluZWQoKTsKKworICAg
ICAgICAvLworICAgICAgICAvLyBSYWlzZSBlcnJvciBtZXNzYWdlIGlmIG1haW4gZnVuY3Rpb24g
dGFrZXMgYW55IHBhcmFtZXRlcnMgb3IgcmV0dXJuIGFueXRoaW5nIG90aGVyIHRoYW4gdm9pZAor
ICAgICAgICAvLworICAgICAgICBpZiAoZnVuY3Rpb24tPmdldE5hbWUoKSA9PSAibWFpbiIpIHsK
KyAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0UGFyYW1Db3VudCgpID4gMCkgeworICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgImZ1bmN0aW9uIGNh
bm5vdCB0YWtlIGFueSBwYXJhbWV0ZXIocykiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkp
OworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljVHlwZSgpICE9
IEVidFZvaWQpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0g
KDEpXSksICIiLCBmdW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCksICJt
YWluIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIpOworICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8v
CisgICAgICAgIC8vIFJlbWVtYmVyIHRoZSByZXR1cm4gdHlwZSBmb3IgbGF0ZXIgY2hlY2tpbmcg
Zm9yIFJFVFVSTiBzdGF0ZW1lbnRzLgorICAgICAgICAvLworICAgICAgICBjb250ZXh0LT5jdXJy
ZW50RnVuY3Rpb25UeXBlID0gJihwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkpOworICAgICAgICBj
b250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IGZhbHNlOworCisgICAgICAgIC8vCisgICAg
ICAgIC8vIEluc2VydCBwYXJhbWV0ZXJzIGludG8gdGhlIHN5bWJvbCB0YWJsZS4KKyAgICAgICAg
Ly8gSWYgdGhlIHBhcmFtZXRlciBoYXMgbm8gbmFtZSwgaXQncyBub3QgYW4gZXJyb3IsIGp1c3Qg
ZG9uJ3QgaW5zZXJ0IGl0CisgICAgICAgIC8vIChjb3VsZCBiZSB1c2VkIGZvciB1bnVzZWQgYXJn
cykuCisgICAgICAgIC8vCisgICAgICAgIC8vIEFsc28sIGFjY3VtdWxhdGUgdGhlIGxpc3Qgb2Yg
cGFyYW1ldGVycyBpbnRvIHRoZSBISUwsIHNvIGxvd2VyIGxldmVsIGNvZGUKKyAgICAgICAgLy8g
a25vd3Mgd2hlcmUgdG8gZmluZCBwYXJhbWV0ZXJzLgorICAgICAgICAvLworICAgICAgICBUSW50
ZXJtQWdncmVnYXRlKiBwYXJhbU5vZGVzID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGU7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb24tPmdldFBhcmFtQ291bnQoKTsgaSsrKSB7
CisgICAgICAgICAgICBjb25zdCBUUGFyYW1ldGVyJiBwYXJhbSA9IGZ1bmN0aW9uLT5nZXRQYXJh
bShpKTsKKyAgICAgICAgICAgIGlmIChwYXJhbS5uYW1lICE9IDApIHsKKyAgICAgICAgICAgICAg
ICBUVmFyaWFibGUgKnZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZShwYXJhbS5uYW1lLCAqcGFyYW0u
dHlwZSk7CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhl
IHBhcmFtZXRlcnMgd2l0aCBuYW1lIGluIHRoZSBzeW1ib2wgdGFibGUuCisgICAgICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQo
KnZhcmlhYmxlKSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3Bb
KDEpIC0gKDEpXSksICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkp
OworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAg
ICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAvLworICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyIHRvIHRoZSBISUwK
KyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIHBhcmFtTm9kZXMgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2
YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+
Z2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHl5bHNwWygxKSAtICgxKV0pKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcyA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKHBhcmFtTm9kZXMsIGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRTeW1ib2woMCwgIiIsICpwYXJhbS50eXBlLCAoeXlsc3BbKDEpIC0gKDEpXSkpLCAo
eXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNv
bnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcihwYXJhbU5vZGVzLCBFT3BQ
YXJhbWV0ZXJzLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IHBhcmFtTm9kZXM7CisgICAgICAgIGNvbnRleHQt
Pmxvb3BOZXN0aW5nTGV2ZWwgPSAwOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDIwMjoK
KworICAgIHsKKyAgICAgICAgLy8/PyBDaGVjayB0aGF0IGFsbCBwYXRocyByZXR1cm4gYSB2YWx1
ZSBpZiByZXR1cm4gdHlwZSAhPSB2b2lkID8KKyAgICAgICAgLy8gICBNYXkgYmUgYmVzdCBkb25l
IGFzIHBvc3QgcHJvY2VzcyBwaGFzZSBvbiBpbnRlcm1lZGlhdGUgY29kZQorICAgICAgICBpZiAo
Y29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCAm
JiAhIGNvbnRleHQtPmZ1bmN0aW9uUmV0dXJuc1ZhbHVlKSB7CisgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXlsc3BbKDEpIC0gKDMpXSksICJmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYSB2
YWx1ZToiLCAiIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5mdW5jdGlvbi0+Z2V0TmFtZSgp
LmNfc3RyKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5pbnRlcm1B
Z2dyZWdhdGUsICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1Ob2RlKSwgKHl5bG9jKSk7
CisgICAgICAgIGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcigoeXl2
YWwuaW50ZXJtLmludGVybU5vZGUpLCBFT3BGdW5jdGlvbiwgKHl5bHNwWygxKSAtICgzKV0pKTsK
KyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0
TmFtZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmZ1bmN0aW9uLT5nZXRNYW5nbGVkTmFtZSgp
LmNfc3RyKCkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLT5nZXRBc0FnZ3Jl
Z2F0ZSgpLT5zZXRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybSkuZnVuY3Rpb24tPmdldFJl
dHVyblR5cGUoKSk7CisKKyAgICAgICAgLy8gc3RvcmUgdGhlIHByYWdtYSBpbmZvcm1hdGlvbiBm
b3IgZGVidWcgYW5kIG9wdGltaXplIGFuZCBvdGhlciB2ZW5kb3Igc3BlY2lmaWMKKyAgICAgICAg
Ly8gaW5mb3JtYXRpb24uIFRoaXMgaW5mb3JtYXRpb24gY2FuIGJlIHF1ZXJpZWQgZnJvbSB0aGUg
cGFyc2UgdHJlZQorICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLT5nZXRBc0FnZ3Jl
Z2F0ZSgpLT5zZXRPcHRpbWl6ZShjb250ZXh0LT5wcmFnbWEoKS5vcHRpbWl6ZSk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNldERlYnVnKGNv
bnRleHQtPnByYWdtYSgpLmRlYnVnKTsKKworICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5w
b3AoKTsKKyAgICB9CisgICAgYnJlYWs7CisKKworCisgICAgICBkZWZhdWx0OiBicmVhazsKKyAg
ICB9CisgIC8qIFVzZXIgc2VtYW50aWMgYWN0aW9ucyBzb21ldGltZXMgYWx0ZXIgeXljaGFyLCBh
bmQgdGhhdCByZXF1aXJlcworICAgICB0aGF0IHl5dG9rZW4gYmUgdXBkYXRlZCB3aXRoIHRoZSBu
ZXcgdHJhbnNsYXRpb24uICBXZSB0YWtlIHRoZQorICAgICBhcHByb2FjaCBvZiB0cmFuc2xhdGlu
ZyBpbW1lZGlhdGVseSBiZWZvcmUgZXZlcnkgdXNlIG9mIHl5dG9rZW4uCisgICAgIE9uZSBhbHRl
cm5hdGl2ZSBpcyB0cmFuc2xhdGluZyBoZXJlIGFmdGVyIGV2ZXJ5IHNlbWFudGljIGFjdGlvbiwK
KyAgICAgYnV0IHRoYXQgdHJhbnNsYXRpb24gd291bGQgYmUgbWlzc2VkIGlmIHRoZSBzZW1hbnRp
YyBhY3Rpb24gaW52b2tlcworICAgICBZWUFCT1JULCBZWUFDQ0VQVCwgb3IgWVlFUlJPUiBpbW1l
ZGlhdGVseSBhZnRlciBhbHRlcmluZyB5eWNoYXIgb3IKKyAgICAgaWYgaXQgaW52b2tlcyBZWUJB
Q0tVUC4gIEluIHRoZSBjYXNlIG9mIFlZQUJPUlQgb3IgWVlBQ0NFUFQsIGFuCisgICAgIGluY29y
cmVjdCBkZXN0cnVjdG9yIG1pZ2h0IHRoZW4gYmUgaW52b2tlZCBpbW1lZGlhdGVseS4gIEluIHRo
ZQorICAgICBjYXNlIG9mIFlZRVJST1Igb3IgWVlCQUNLVVAsIHN1YnNlcXVlbnQgcGFyc2VyIGFj
dGlvbnMgbWlnaHQgbGVhZAorICAgICB0byBhbiBpbmNvcnJlY3QgZGVzdHJ1Y3RvciBjYWxsIG9y
IHZlcmJvc2Ugc3ludGF4IGVycm9yIG1lc3NhZ2UKKyAgICAgYmVmb3JlIHRoZSBsb29rYWhlYWQg
aXMgdHJhbnNsYXRlZC4gICovCisgIFlZX1NZTUJPTF9QUklOVCAoIi0+ICQkID0iLCB5eXIxW3l5
bl0sICZ5eXZhbCwgJnl5bG9jKTsKKworICBZWVBPUFNUQUNLICh5eWxlbik7CisgIHl5bGVuID0g
MDsKKyAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKworICAqKyt5eXZzcCA9IHl5dmFs
OworICAqKyt5eWxzcCA9IHl5bG9jOworCisgIC8qIE5vdyBgc2hpZnQnIHRoZSByZXN1bHQgb2Yg
dGhlIHJlZHVjdGlvbi4gIERldGVybWluZSB3aGF0IHN0YXRlCisgICAgIHRoYXQgZ29lcyB0bywg
YmFzZWQgb24gdGhlIHN0YXRlIHdlIHBvcHBlZCBiYWNrIHRvIGFuZCB0aGUgcnVsZQorICAgICBu
dW1iZXIgcmVkdWNlZCBieS4gICovCisKKyAgeXluID0geXlyMVt5eW5dOworCisgIHl5c3RhdGUg
PSB5eXBnb3RvW3l5biAtIFlZTlRPS0VOU10gKyAqeXlzc3A7CisgIGlmICgwIDw9IHl5c3RhdGUg
JiYgeXlzdGF0ZSA8PSBZWUxBU1QgJiYgeXljaGVja1t5eXN0YXRlXSA9PSAqeXlzc3ApCisgICAg
eXlzdGF0ZSA9IHl5dGFibGVbeXlzdGF0ZV07CisgIGVsc2UKKyAgICB5eXN0YXRlID0geXlkZWZn
b3RvW3l5biAtIFlZTlRPS0VOU107CisKKyAgZ290byB5eW5ld3N0YXRlOworCisKKy8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWVycmxhYiAtLSBoZXJlIG9uIGRl
dGVjdGluZyBlcnJvciB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
K3l5ZXJybGFiOgorICAvKiBNYWtlIHN1cmUgd2UgaGF2ZSBsYXRlc3QgbG9va2FoZWFkIHRyYW5z
bGF0aW9uLiAgU2VlIGNvbW1lbnRzIGF0CisgICAgIHVzZXIgc2VtYW50aWMgYWN0aW9ucyBmb3Ig
d2h5IHRoaXMgaXMgbmVjZXNzYXJ5LiAgKi8KKyAgeXl0b2tlbiA9IHl5Y2hhciA9PSBZWUVNUFRZ
ID8gWVlFTVBUWSA6IFlZVFJBTlNMQVRFICh5eWNoYXIpOworCisgIC8qIElmIG5vdCBhbHJlYWR5
IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0IHRoaXMgZXJyb3IuICAqLworICBpZiAo
IXl5ZXJyc3RhdHVzKQorICAgIHsKKyAgICAgICsreXluZXJyczsKKyNpZiAhIFlZRVJST1JfVkVS
Qk9TRQorICAgICAgeXllcnJvciAoJnl5bGxvYywgY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3Ii
KSk7CisjZWxzZQorIyBkZWZpbmUgWVlTWU5UQVhfRVJST1IgeXlzeW50YXhfZXJyb3IgKCZ5eW1z
Z19hbGxvYywgJnl5bXNnLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeXlzc3AsIHl5dG9rZW4pCisgICAgICB7CisgICAgICAgIGNoYXIgY29uc3QgKnl5bXNncCA9
IFlZXygic3ludGF4IGVycm9yIik7CisgICAgICAgIGludCB5eXN5bnRheF9lcnJvcl9zdGF0dXM7
CisgICAgICAgIHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9IFlZU1lOVEFYX0VSUk9SOworICAgICAg
ICBpZiAoeXlzeW50YXhfZXJyb3Jfc3RhdHVzID09IDApCisgICAgICAgICAgeXltc2dwID0geXlt
c2c7CisgICAgICAgIGVsc2UgaWYgKHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9PSAxKQorICAgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKKyAgICAgICAgICAgICAg
WVlTVEFDS19GUkVFICh5eW1zZyk7CisgICAgICAgICAgICB5eW1zZyA9IChjaGFyICopIFlZU1RB
Q0tfQUxMT0MgKHl5bXNnX2FsbG9jKTsKKyAgICAgICAgICAgIGlmICgheXltc2cpCisgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICB5eW1zZyA9IHl5bXNnYnVmOworICAgICAgICAgICAg
ICAgIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOworICAgICAgICAgICAgICAgIHl5c3lu
dGF4X2Vycm9yX3N0YXR1cyA9IDI7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9
IFlZU1lOVEFYX0VSUk9SOworICAgICAgICAgICAgICAgIHl5bXNncCA9IHl5bXNnOworICAgICAg
ICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB5eWVycm9yICgmeXlsbG9jLCBjb250ZXh0
LCB5eW1zZ3ApOworICAgICAgICBpZiAoeXlzeW50YXhfZXJyb3Jfc3RhdHVzID09IDIpCisgICAg
ICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKKyAgICAgIH0KKyMgdW5kZWYgWVlTWU5UQVhfRVJS
T1IKKyNlbmRpZgorICAgIH0KKworICB5eWVycm9yX3JhbmdlWzFdID0geXlsbG9jOworCisgIGlm
ICh5eWVycnN0YXR1cyA9PSAzKQorICAgIHsKKyAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZh
aWxlZCB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgYW4KKwkgZXJyb3IsIGRpc2NhcmQg
aXQuICAqLworCisgICAgICBpZiAoeXljaGFyIDw9IFlZRU9GKQorCXsKKwkgIC8qIFJldHVybiBm
YWlsdXJlIGlmIGF0IGVuZCBvZiBpbnB1dC4gICovCisJICBpZiAoeXljaGFyID09IFlZRU9GKQor
CSAgICBZWUFCT1JUOworCX0KKyAgICAgIGVsc2UKKwl7CisJICB5eWRlc3RydWN0ICgiRXJyb3I6
IGRpc2NhcmRpbmciLAorCQkgICAgICB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jLCBjb250ZXh0
KTsKKwkgIHl5Y2hhciA9IFlZRU1QVFk7CisJfQorICAgIH0KKworICAvKiBFbHNlIHdpbGwgdHJ5
IHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKKyAgICAg
dG9rZW4uICAqLworICBnb3RvIHl5ZXJybGFiMTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJvcmxhYiAtLSBlcnJvciBy
YWlzZWQgZXhwbGljaXRseSBieSBZWUVSUk9SLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWVycm9ybGFiOgorCisgIC8qIFBhY2lm
eSBjb21waWxlcnMgbGlrZSBHQ0Mgd2hlbiB0aGUgdXNlciBjb2RlIG5ldmVyIGludm9rZXMKKyAg
ICAgWVlFUlJPUiBhbmQgdGhlIGxhYmVsIHl5ZXJyb3JsYWIgdGhlcmVmb3JlIG5ldmVyIGFwcGVh
cnMgaW4gdXNlcgorICAgICBjb2RlLiAgKi8KKyAgaWYgKC8qQ09OU1RDT05EKi8gMCkKKyAgICAg
Z290byB5eWVycm9ybGFiOworCisgIHl5ZXJyb3JfcmFuZ2VbMV0gPSB5eWxzcFsxLXl5bGVuXTsK
KyAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9u
IHRyaWdnZXJlZAorICAgICB0aGlzIFlZRVJST1IuICAqLworICBZWVBPUFNUQUNLICh5eWxlbik7
CisgIHl5bGVuID0gMDsKKyAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKyAgeXlzdGF0
ZSA9ICp5eXNzcDsKKyAgZ290byB5eWVycmxhYjE7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWVycmxhYjEg
LS0gY29tbW9uIGNvZGUgZm9yIGJvdGggc3ludGF4IGVycm9yIGFuZCBZWUVSUk9SLiAgfAorYC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLworeXllcnJsYWIxOgorICB5eWVycnN0YXR1cyA9IDM7CS8qIEVhY2ggcmVhbCB0b2tlbiBz
aGlmdGVkIGRlY3JlbWVudHMgdGhpcy4gICovCisKKyAgZm9yICg7OykKKyAgICB7CisgICAgICB5
eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisgICAgICBpZiAoIXl5cGFjdF92YWx1ZV9pc19kZWZhdWx0
ICh5eW4pKQorCXsKKwkgIHl5biArPSBZWVRFUlJPUjsKKwkgIGlmICgwIDw9IHl5biAmJiB5eW4g
PD0gWVlMQVNUICYmIHl5Y2hlY2tbeXluXSA9PSBZWVRFUlJPUikKKwkgICAgeworCSAgICAgIHl5
biA9IHl5dGFibGVbeXluXTsKKwkgICAgICBpZiAoMCA8IHl5bikKKwkJYnJlYWs7CisJICAgIH0K
Kwl9CisKKyAgICAgIC8qIFBvcCB0aGUgY3VycmVudCBzdGF0ZSBiZWNhdXNlIGl0IGNhbm5vdCBo
YW5kbGUgdGhlIGVycm9yIHRva2VuLiAgKi8KKyAgICAgIGlmICh5eXNzcCA9PSB5eXNzKQorCVlZ
QUJPUlQ7CisKKyAgICAgIHl5ZXJyb3JfcmFuZ2VbMV0gPSAqeXlsc3A7CisgICAgICB5eWRlc3Ry
dWN0ICgiRXJyb3I6IHBvcHBpbmciLAorCQkgIHl5c3Rvc1t5eXN0YXRlXSwgeXl2c3AsIHl5bHNw
LCBjb250ZXh0KTsKKyAgICAgIFlZUE9QU1RBQ0sgKDEpOworICAgICAgeXlzdGF0ZSA9ICp5eXNz
cDsKKyAgICAgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CisgICAgfQorCisgIFlZX0lH
Tk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOCisgICorK3l5dnNwID0geXlsdmFsOworICBZ
WV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9FTkQKKworICB5eWVycm9yX3JhbmdlWzJdID0g
eXlsbG9jOworICAvKiBVc2luZyBZWUxMT0MgaXMgdGVtcHRpbmcsIGJ1dCB3b3VsZCBjaGFuZ2Ug
dGhlIGxvY2F0aW9uIG9mCisgICAgIHRoZSBsb29rYWhlYWQuICBZWUxPQyBpcyBhdmFpbGFibGUg
dGhvdWdoLiAgKi8KKyAgWVlMTE9DX0RFRkFVTFQgKHl5bG9jLCB5eWVycm9yX3JhbmdlLCAyKTsK
KyAgKisreXlsc3AgPSB5eWxvYzsKKworICAvKiBTaGlmdCB0aGUgZXJyb3IgdG9rZW4uICAqLwor
ICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5c3Rvc1t5eW5dLCB5eXZzcCwgeXlsc3Ap
OworCisgIHl5c3RhdGUgPSB5eW47CisgIGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5YWNjZXB0bGFiIC0tIFlZQUNDRVBU
IGNvbWVzIGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
Cit5eWFjY2VwdGxhYjoKKyAgeXlyZXN1bHQgPSAwOworICBnb3RvIHl5cmV0dXJuOworCisvKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWFib3J0bGFiIC0tIFlZQUJP
UlQgY29tZXMgaGVyZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
Cit5eWFib3J0bGFiOgorICB5eXJlc3VsdCA9IDE7CisgIGdvdG8geXlyZXR1cm47CisKKyNpZiAh
ZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRQorLyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWV4aGF1c3RlZGxhYiAtLSBt
ZW1vcnkgZXhoYXVzdGlvbiBjb21lcyBoZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlleGhhdXN0ZWRsYWI6CisgIHl5ZXJyb3Ig
KCZ5eWxsb2MsIGNvbnRleHQsIFlZXygibWVtb3J5IGV4aGF1c3RlZCIpKTsKKyAgeXlyZXN1bHQg
PSAyOworICAvKiBGYWxsIHRocm91Z2guICAqLworI2VuZGlmCisKK3l5cmV0dXJuOgorICBpZiAo
eXljaGFyICE9IFlZRU1QVFkpCisgICAgeworICAgICAgLyogTWFrZSBzdXJlIHdlIGhhdmUgbGF0
ZXN0IGxvb2thaGVhZCB0cmFuc2xhdGlvbi4gIFNlZSBjb21tZW50cyBhdAorICAgICAgICAgdXNl
ciBzZW1hbnRpYyBhY3Rpb25zIGZvciB3aHkgdGhpcyBpcyBuZWNlc3NhcnkuICAqLworICAgICAg
eXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOworICAgICAgeXlkZXN0cnVjdCAoIkNsZWFu
dXA6IGRpc2NhcmRpbmcgbG9va2FoZWFkIiwKKyAgICAgICAgICAgICAgICAgIHl5dG9rZW4sICZ5
eWx2YWwsICZ5eWxsb2MsIGNvbnRleHQpOworICAgIH0KKyAgLyogRG8gbm90IHJlY2xhaW0gdGhl
IHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAorICAgICB0aGlzIFlZ
QUJPUlQgb3IgWVlBQ0NFUFQuICAqLworICBZWVBPUFNUQUNLICh5eWxlbik7CisgIFlZX1NUQUNL
X1BSSU5UICh5eXNzLCB5eXNzcCk7CisgIHdoaWxlICh5eXNzcCAhPSB5eXNzKQorICAgIHsKKyAg
ICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBwb3BwaW5nIiwKKwkJICB5eXN0b3NbKnl5c3NwXSwg
eXl2c3AsIHl5bHNwLCBjb250ZXh0KTsKKyAgICAgIFlZUE9QU1RBQ0sgKDEpOworICAgIH0KKyNp
Zm5kZWYgeXlvdmVyZmxvdworICBpZiAoeXlzcyAhPSB5eXNzYSkKKyAgICBZWVNUQUNLX0ZSRUUg
KHl5c3MpOworI2VuZGlmCisjaWYgWVlFUlJPUl9WRVJCT1NFCisgIGlmICh5eW1zZyAhPSB5eW1z
Z2J1ZikKKyAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKKyNlbmRpZgorICAvKiBNYWtlIHN1cmUg
WVlJRCBpcyB1c2VkLiAgKi8KKyAgcmV0dXJuIFlZSUQgKHl5cmVzdWx0KTsKK30KKworCisKKwor
CitpbnQgZ2xzbGFuZ19wYXJzZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7CisgICAgcmV0dXJu
IHl5cGFyc2UoY29udGV4dCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40MTQ0MTlhNzY1YjlmMjQ2NWVlZDFmZGY0OThjOTBmY2RjYjQ1YTM0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xz
bGFuZ190YWIuaApAQCAtMCwwICsxLDIyNSBAQAorLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkg
R05VIEJpc29uIDIuNy4xLiAgKi8KKworLyogQXBwbGUgTm90ZTogRm9yIHRoZSBhdm9pZGFuY2Ug
b2YgZG91YnQsIEFwcGxlIGVsZWN0cyB0byBkaXN0cmlidXRlIHRoaXMgZmlsZSB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEJTRCBsaWNlbnNlLiAqLworCisvKiBCaXNvbiBpbnRlcmZhY2UgZm9yIFlh
Y2MtbGlrZSBwYXJzZXJzIGluIEMKKyAgIAorICAgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5
LTE5OTAsIDIwMDAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIAorICAg
VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgIAor
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0
dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogQXMgYSBzcGVjaWFsIGV4Y2Vw
dGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCisgICBwYXJ0
IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQg
d29yaworICAgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHNvIGxvbmcgYXMgdGhhdCB3b3Jr
IGlzbid0IGl0c2VsZiBhCisgICBwYXJzZXIgZ2VuZXJhdG9yIHVzaW5nIHRoZSBza2VsZXRvbiBv
ciBhIG1vZGlmaWVkIHZlcnNpb24gdGhlcmVvZgorICAgYXMgYSBwYXJzZXIgc2tlbGV0b24uICBB
bHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZQorICAgdGhlIHBhcnNl
ciBza2VsZXRvbiBpdHNlbGYsIHlvdSBtYXkgKGF0IHlvdXIgb3B0aW9uKSByZW1vdmUgdGhpcwor
ICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0
aGUgcmVzdWx0aW5nCisgICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIg
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBl
eGNlcHRpb24uCisgICAKKyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KKyAgIHZlcnNpb24gMi4yIG9mIEJpc29uLiAg
Ki8KKworI2lmbmRlZiBZWV9ZWV9HTFNMQU5HX1RBQl9IX0lOQ0xVREVECisjIGRlZmluZSBZWV9Z
WV9HTFNMQU5HX1RBQl9IX0lOQ0xVREVECisvKiBFbmFibGluZyB0cmFjZXMuICAqLworI2lmbmRl
ZiBZWURFQlVHCisjIGRlZmluZSBZWURFQlVHIDAKKyNlbmRpZgorI2lmIFlZREVCVUcKK2V4dGVy
biBpbnQgeXlkZWJ1ZzsKKyNlbmRpZgorLyogIiVjb2RlIHJlcXVpcmVzIiBibG9ja3MuICAqLwor
CisKKyNkZWZpbmUgWVlMVFlQRSBUU291cmNlTG9jCisjZGVmaW5lIFlZTFRZUEVfSVNfREVDTEFS
RUQgMQorI2RlZmluZSBTSF9NQVhfVE9LRU5fTEVOR1RIIDI1NiAgLy8gV2ViR0wgc3BlYy4KKwor
CisKKworLyogVG9rZW5zLiAgKi8KKyNpZm5kZWYgWVlUT0tFTlRZUEUKKyMgZGVmaW5lIFlZVE9L
RU5UWVBFCisgICAvKiBQdXQgdGhlIHRva2VucyBpbnRvIHRoZSBzeW1ib2wgdGFibGUsIHNvIHRo
YXQgR0RCIGFuZCBvdGhlciBkZWJ1Z2dlcnMKKyAgICAgIGtub3cgYWJvdXQgdGhlbS4gICovCisg
ICBlbnVtIHl5dG9rZW50eXBlIHsKKyAgICAgSU5WQVJJQU5UID0gMjU4LAorICAgICBISUdIX1BS
RUNJU0lPTiA9IDI1OSwKKyAgICAgTUVESVVNX1BSRUNJU0lPTiA9IDI2MCwKKyAgICAgTE9XX1BS
RUNJU0lPTiA9IDI2MSwKKyAgICAgUFJFQ0lTSU9OID0gMjYyLAorICAgICBBVFRSSUJVVEUgPSAy
NjMsCisgICAgIENPTlNUX1FVQUwgPSAyNjQsCisgICAgIEJPT0xfVFlQRSA9IDI2NSwKKyAgICAg
RkxPQVRfVFlQRSA9IDI2NiwKKyAgICAgSU5UX1RZUEUgPSAyNjcsCisgICAgIEJSRUFLID0gMjY4
LAorICAgICBDT05USU5VRSA9IDI2OSwKKyAgICAgRE8gPSAyNzAsCisgICAgIEVMU0UgPSAyNzEs
CisgICAgIEZPUiA9IDI3MiwKKyAgICAgSUYgPSAyNzMsCisgICAgIERJU0NBUkQgPSAyNzQsCisg
ICAgIFJFVFVSTiA9IDI3NSwKKyAgICAgQlZFQzIgPSAyNzYsCisgICAgIEJWRUMzID0gMjc3LAor
ICAgICBCVkVDNCA9IDI3OCwKKyAgICAgSVZFQzIgPSAyNzksCisgICAgIElWRUMzID0gMjgwLAor
ICAgICBJVkVDNCA9IDI4MSwKKyAgICAgVkVDMiA9IDI4MiwKKyAgICAgVkVDMyA9IDI4MywKKyAg
ICAgVkVDNCA9IDI4NCwKKyAgICAgTUFUUklYMiA9IDI4NSwKKyAgICAgTUFUUklYMyA9IDI4NiwK
KyAgICAgTUFUUklYNCA9IDI4NywKKyAgICAgSU5fUVVBTCA9IDI4OCwKKyAgICAgT1VUX1FVQUwg
PSAyODksCisgICAgIElOT1VUX1FVQUwgPSAyOTAsCisgICAgIFVOSUZPUk0gPSAyOTEsCisgICAg
IFZBUllJTkcgPSAyOTIsCisgICAgIFNUUlVDVCA9IDI5MywKKyAgICAgVk9JRF9UWVBFID0gMjk0
LAorICAgICBXSElMRSA9IDI5NSwKKyAgICAgU0FNUExFUjJEID0gMjk2LAorICAgICBTQU1QTEVS
Q1VCRSA9IDI5NywKKyAgICAgU0FNUExFUl9FWFRFUk5BTF9PRVMgPSAyOTgsCisgICAgIFNBTVBM
RVIyRFJFQ1QgPSAyOTksCisgICAgIElERU5USUZJRVIgPSAzMDAsCisgICAgIFRZUEVfTkFNRSA9
IDMwMSwKKyAgICAgRkxPQVRDT05TVEFOVCA9IDMwMiwKKyAgICAgSU5UQ09OU1RBTlQgPSAzMDMs
CisgICAgIEJPT0xDT05TVEFOVCA9IDMwNCwKKyAgICAgTEVGVF9PUCA9IDMwNSwKKyAgICAgUklH
SFRfT1AgPSAzMDYsCisgICAgIElOQ19PUCA9IDMwNywKKyAgICAgREVDX09QID0gMzA4LAorICAg
ICBMRV9PUCA9IDMwOSwKKyAgICAgR0VfT1AgPSAzMTAsCisgICAgIEVRX09QID0gMzExLAorICAg
ICBORV9PUCA9IDMxMiwKKyAgICAgQU5EX09QID0gMzEzLAorICAgICBPUl9PUCA9IDMxNCwKKyAg
ICAgWE9SX09QID0gMzE1LAorICAgICBNVUxfQVNTSUdOID0gMzE2LAorICAgICBESVZfQVNTSUdO
ID0gMzE3LAorICAgICBBRERfQVNTSUdOID0gMzE4LAorICAgICBNT0RfQVNTSUdOID0gMzE5LAor
ICAgICBMRUZUX0FTU0lHTiA9IDMyMCwKKyAgICAgUklHSFRfQVNTSUdOID0gMzIxLAorICAgICBB
TkRfQVNTSUdOID0gMzIyLAorICAgICBYT1JfQVNTSUdOID0gMzIzLAorICAgICBPUl9BU1NJR04g
PSAzMjQsCisgICAgIFNVQl9BU1NJR04gPSAzMjUsCisgICAgIExFRlRfUEFSRU4gPSAzMjYsCisg
ICAgIFJJR0hUX1BBUkVOID0gMzI3LAorICAgICBMRUZUX0JSQUNLRVQgPSAzMjgsCisgICAgIFJJ
R0hUX0JSQUNLRVQgPSAzMjksCisgICAgIExFRlRfQlJBQ0UgPSAzMzAsCisgICAgIFJJR0hUX0JS
QUNFID0gMzMxLAorICAgICBET1QgPSAzMzIsCisgICAgIENPTU1BID0gMzMzLAorICAgICBDT0xP
TiA9IDMzNCwKKyAgICAgRVFVQUwgPSAzMzUsCisgICAgIFNFTUlDT0xPTiA9IDMzNiwKKyAgICAg
QkFORyA9IDMzNywKKyAgICAgREFTSCA9IDMzOCwKKyAgICAgVElMREUgPSAzMzksCisgICAgIFBM
VVMgPSAzNDAsCisgICAgIFNUQVIgPSAzNDEsCisgICAgIFNMQVNIID0gMzQyLAorICAgICBQRVJD
RU5UID0gMzQzLAorICAgICBMRUZUX0FOR0xFID0gMzQ0LAorICAgICBSSUdIVF9BTkdMRSA9IDM0
NSwKKyAgICAgVkVSVElDQUxfQkFSID0gMzQ2LAorICAgICBDQVJFVCA9IDM0NywKKyAgICAgQU1Q
RVJTQU5EID0gMzQ4LAorICAgICBRVUVTVElPTiA9IDM0OQorICAgfTsKKyNlbmRpZgorCisKKyNp
ZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAordHlw
ZWRlZiB1bmlvbiBZWVNUWVBFCit7CisKKworICAgIHN0cnVjdCB7CisgICAgICAgIHVuaW9uIHsK
KyAgICAgICAgICAgIFRTdHJpbmcgKnN0cmluZzsKKyAgICAgICAgICAgIGZsb2F0IGY7CisgICAg
ICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgIGJvb2wgYjsKKyAgICAgICAgfTsKKyAgICAgICAg
VFN5bWJvbCogc3ltYm9sOworICAgIH0gbGV4OworICAgIHN0cnVjdCB7CisgICAgICAgIFRPcGVy
YXRvciBvcDsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgVEludGVybU5vZGUqIGludGVy
bU5vZGU7CisgICAgICAgICAgICBUSW50ZXJtTm9kZVBhaXIgbm9kZVBhaXI7CisgICAgICAgICAg
ICBUSW50ZXJtVHlwZWQqIGludGVybVR5cGVkTm9kZTsKKyAgICAgICAgICAgIFRJbnRlcm1BZ2dy
ZWdhdGUqIGludGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgfTsKKyAgICAgICAgdW5pb24geworICAg
ICAgICAgICAgVFB1YmxpY1R5cGUgdHlwZTsKKyAgICAgICAgICAgIFRQcmVjaXNpb24gcHJlY2lz
aW9uOworICAgICAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXI7CisgICAgICAgICAgICBURnVu
Y3Rpb24qIGZ1bmN0aW9uOworICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJhbTsKKyAgICAgICAg
ICAgIFRGaWVsZCogZmllbGQ7CisgICAgICAgICAgICBURmllbGRMaXN0KiBmaWVsZExpc3Q7Cisg
ICAgICAgIH07CisgICAgfSBpbnRlcm07CisKKworCit9IFlZU1RZUEU7CisjIGRlZmluZSBZWVNU
WVBFX0lTX1RSSVZJQUwgMQorIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50
OyB3aWxsIGJlIHdpdGhkcmF3biAqLworIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCisj
ZW5kaWYKKworI2lmICEgZGVmaW5lZCBZWUxUWVBFICYmICEgZGVmaW5lZCBZWUxUWVBFX0lTX0RF
Q0xBUkVECit0eXBlZGVmIHN0cnVjdCBZWUxUWVBFCit7CisgIGludCBmaXJzdF9saW5lOworICBp
bnQgZmlyc3RfY29sdW1uOworICBpbnQgbGFzdF9saW5lOworICBpbnQgbGFzdF9jb2x1bW47Cit9
IFlZTFRZUEU7CisjIGRlZmluZSB5eWx0eXBlIFlZTFRZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwg
YmUgd2l0aGRyYXduICovCisjIGRlZmluZSBZWUxUWVBFX0lTX0RFQ0xBUkVEIDEKKyMgZGVmaW5l
IFlZTFRZUEVfSVNfVFJJVklBTCAxCisjZW5kaWYKKworCisjaWZkZWYgWVlQQVJTRV9QQVJBTQor
I2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cworaW50IHl5cGFyc2Ug
KHZvaWQgKllZUEFSU0VfUEFSQU0pOworI2Vsc2UKK2ludCB5eXBhcnNlICgpOworI2VuZGlmCisj
ZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KKyNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmlu
ZWQgX19jcGx1c3BsdXMKK2ludCB5eXBhcnNlIChUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKKyNl
bHNlCitpbnQgeXlwYXJzZSAoKTsKKyNlbmRpZgorI2VuZGlmIC8qICEgWVlQQVJTRV9QQVJBTSAq
LworCisjZW5kaWYgLyogIVlZX1lZX0dMU0xBTkdfVEFCX0hfSU5DTFVERUQgICovCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9pbnRl
cm1PdXQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvaW50ZXJtT3V0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMmY5MThkNzdhNzgyZjhlMjFlYzg1NTU0MzIw
ZjRhZGRmODQ0ZWFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtT3V0LmNwcApAQCAtMCwwICsxLDQyNCBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvbG9jYWxp
bnRlcm1lZGlhdGUuaCIKKworLy8KKy8vIFR3byBwdXJwb3NlczoKKy8vIDEuICBTaG93IGFuIGV4
YW1wbGUgb2YgaG93IHRvIGl0ZXJhdGUgdHJlZS4gIEZ1bmN0aW9ucyBjYW4KKy8vICAgICBhbHNv
IGRpcmVjdGx5IGNhbGwgVHJhdmVyc2UoKSBvbiBjaGlsZHJlbiB0aGVtc2VsdmVzIHRvCisvLyAg
ICAgaGF2ZSBmaW5lciBncmFpbmVkIGNvbnRyb2wgb3ZlciB0aGUgcHJvY2VzcyB0aGFuIHNob3du
IGhlcmUuCisvLyAgICAgU2VlIHRoZSBsYXN0IGZ1bmN0aW9uIGZvciBob3cgdG8gZ2V0IHN0YXJ0
ZWQuCisvLyAyLiAgUHJpbnQgb3V0IGEgdGV4dCBiYXNlZCBkZXNjcmlwdGlvbiBvZiB0aGUgdHJl
ZS4KKy8vCisKKy8vCisvLyBVc2UgdGhpcyBjbGFzcyB0byBjYXJyeSBhbG9uZyBkYXRhIGZyb20g
bm9kZSB0byBub2RlIGluCisvLyB0aGUgdHJhdmVyc2FsCisvLworY2xhc3MgVE91dHB1dFRyYXZl
cnNlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBUT3V0cHV0VHJh
dmVyc2VyKFRJbmZvU2lua0Jhc2UmIGkpIDogc2luayhpKSB7IH0KKyAgICBUSW5mb1NpbmtCYXNl
JiBzaW5rOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9s
Kik7CisgICAgdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qKTsK
KyAgICBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7CisgICAg
Ym9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqKTsKKyAgICBib29sIHZp
c2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKik7CisgICAgYm9vbCB2
aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOworICAgIGJvb2wg
dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCopOworICAgIGJvb2wgdmlzaXRCcmFu
Y2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqKTsKK307CisKK1RTdHJpbmcgVFR5cGU6Omdl
dENvbXBsZXRlU3RyaW5nKCkgY29uc3QKK3sKKyAgICBUU3RyaW5nU3RyZWFtIHN0cmVhbTsKKwor
ICAgIGlmIChxdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5ICYmIHF1YWxpZmllciAhPSBFdnFHbG9i
YWwpCisgICAgICAgIHN0cmVhbSA8PCBnZXRRdWFsaWZpZXJTdHJpbmcoKSA8PCAiICIgPDwgZ2V0
UHJlY2lzaW9uU3RyaW5nKCkgPDwgIiAiOworICAgIGlmIChhcnJheSkKKyAgICAgICAgc3RyZWFt
IDw8ICJhcnJheVsiIDw8IGdldEFycmF5U2l6ZSgpIDw8ICJdIG9mICI7CisgICAgaWYgKG1hdHJp
eCkKKyAgICAgICAgc3RyZWFtIDw8IHN0YXRpY19jYXN0PGludD4oc2l6ZSkgPDwgIlgiIDw8IHN0
YXRpY19jYXN0PGludD4oc2l6ZSkgPDwgIiBtYXRyaXggb2YgIjsKKyAgICBlbHNlIGlmIChzaXpl
ID4gMSkKKyAgICAgICAgc3RyZWFtIDw8IHN0YXRpY19jYXN0PGludD4oc2l6ZSkgPDwgIi1jb21w
b25lbnQgdmVjdG9yIG9mICI7CisKKyAgICBzdHJlYW0gPDwgZ2V0QmFzaWNTdHJpbmcoKTsKKyAg
ICByZXR1cm4gc3RyZWFtLnN0cigpOworfQorCisvLworLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3Ig
cHJpbnRpbmcsIG5vdCBwYXJ0IG9mIHRyYXZlcnNpbmcuCisvLworCit2b2lkIE91dHB1dFRyZWVU
ZXh0KFRJbmZvU2lua0Jhc2UmIHNpbmssIFRJbnRlcm1Ob2RlKiBub2RlLCBjb25zdCBpbnQgZGVw
dGgpCit7CisgICAgaW50IGk7CisKKyAgICBzaW5rLmxvY2F0aW9uKG5vZGUtPmdldExpbmUoKSk7
CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKKyAgICAgICAgc2luayA8PCAiICAi
OworfQorCisvLworLy8gVGhlIHJlc3Qgb2YgdGhlIGZpbGUgYXJlIHRoZSB0cmF2ZXJzYWwgZnVu
Y3Rpb25zLiAgVGhlIGxhc3Qgb25lCisvLyBpcyB0aGUgb25lIHRoYXQgc3RhcnRzIHRoZSB0cmF2
ZXJzYWwuCisvLworLy8gUmV0dXJuIHRydWUgZnJvbSBpbnRlcmlvciBub2RlcyB0byBoYXZlIHRo
ZSBleHRlcm5hbCB0cmF2ZXJzYWwKKy8vIGNvbnRpbnVlIG9uIHRvIGNoaWxkcmVuLiAgSWYgeW91
IHByb2Nlc3MgY2hpbGRyZW4geW91cnNlbGYsCisvLyByZXR1cm4gZmFsc2UuCisvLworCit2b2lk
IFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCit7Cisg
ICAgT3V0cHV0VHJlZVRleHQoc2luaywgbm9kZSwgZGVwdGgpOworCisgICAgc2luayA8PCAiJyIg
PDwgbm9kZS0+Z2V0U3ltYm9sKCkgPDwgIicgIjsKKyAgICBzaW5rIDw8ICIoIiA8PCBub2RlLT5n
ZXRDb21wbGV0ZVN0cmluZygpIDw8ICIpXG4iOworfQorCitib29sIFRPdXRwdXRUcmF2ZXJzZXI6
OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBub2RlKQoreworICAgIFRJ
bmZvU2lua0Jhc2UmIG91dCA9IHNpbms7CisKKyAgICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUs
IGRlcHRoKTsKKworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkgeworICAgICAgICBjYXNlIEVP
cEFzc2lnbjogICAgICAgICAgICAgICAgICAgb3V0IDw8ICJtb3ZlIHNlY29uZCBjaGlsZCB0byBm
aXJzdCBjaGlsZCI7ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BJbml0aWFsaXpl
OiAgICAgICAgICAgICAgIG91dCA8PCAiaW5pdGlhbGl6ZSBmaXJzdCBjaGlsZCB3aXRoIHNlY29u
ZCBjaGlsZCI7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQWRkQXNzaWduOiAgICAgICAgICAg
ICAgICBvdXQgPDwgImFkZCBzZWNvbmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7ICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjogICAgICAgICAgICAgICAgb3V0IDw8
ICJzdWJ0cmFjdCBzZWNvbmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7ICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BNdWxBc3NpZ246ICAgICAgICAgICAgICAgIG91dCA8PCAibXVsdGlwbHkg
c2Vjb25kIGNoaWxkIGludG8gZmlyc3QgY2hpbGQiOyAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wVmVjdG9yVGltZXNNYXRyaXhBc3NpZ246ICBvdXQgPDwgIm1hdHJpeCBtdWx0IHNlY29uZCBj
aGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFZlY3RvclRp
bWVzU2NhbGFyQXNzaWduOiAgb3V0IDw8ICJ2ZWN0b3Igc2NhbGUgc2Vjb25kIGNoaWxkIGludG8g
Zmlyc3QgY2hpbGQiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhckFz
c2lnbjogIG91dCA8PCAibWF0cml4IHNjYWxlIHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxk
IjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246ICBvdXQg
PDwgIm1hdHJpeCBtdWx0IHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wRGl2QXNzaWduOiAgICAgICAgICAgICAgICBvdXQgPDwgImRpdmlkZSBz
ZWNvbmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7ICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEVPcEluZGV4RGlyZWN0OiAgIG91dCA8PCAiZGlyZWN0IGluZGV4IjsgICBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OiBvdXQgPDwgImluZGlyZWN0IGluZGV4IjsgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6ICAgb3V0IDw8ICJkaXJlY3QgaW5k
ZXggZm9yIHN0cnVjdHVyZSI7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVjdG9yU3dpenps
ZTogb3V0IDw8ICJ2ZWN0b3Igc3dpenpsZSI7IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wQWRk
OiAgICBvdXQgPDwgImFkZCI7ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wU3ViOiAgICBvdXQgPDwgInN1YnRyYWN0IjsgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wTXVsOiAgICBvdXQgPDwgImNvbXBvbmVudC13aXNlIG11bHRpcGx5Ijsg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wRGl2OiAgICBvdXQgPDwgImRpdmlkZSI7ICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRXF1YWw6ICAgICAgICAgICAgb3V0IDw8
ICJDb21wYXJlIEVxdWFsIjsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVP
cE5vdEVxdWFsOiAgICAgICAgIG91dCA8PCAiQ29tcGFyZSBOb3QgRXF1YWwiOyAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjogICAgICAgICBvdXQgPDwgIkNvbXBh
cmUgTGVzcyBUaGFuIjsgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wR3JlYXRl
clRoYW46ICAgICAgb3V0IDw8ICJDb21wYXJlIEdyZWF0ZXIgVGhhbiI7ICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6ICAgIG91dCA8PCAiQ29tcGFyZSBMZXNz
IFRoYW4gb3IgRXF1YWwiOyAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVx
dWFsOiBvdXQgPDwgIkNvbXBhcmUgR3JlYXRlciBUaGFuIG9yIEVxdWFsIjsgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjogb3V0IDw8ICJ2ZWN0b3Itc2NhbGUiOyAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeDogb3V0IDw8
ICJ2ZWN0b3ItdGltZXMtbWF0cml4IjsgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhU
aW1lc1ZlY3Rvcjogb3V0IDw8ICJtYXRyaXgtdGltZXMtdmVjdG9yIjsgICBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhcjogb3V0IDw8ICJtYXRyaXgtc2NhbGUiOyAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeDogb3V0IDw8ICJt
YXRyaXgtbXVsdGlwbHkiOyAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcExvZ2ljYWxP
cjogIG91dCA8PCAibG9naWNhbC1vciI7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9naWNh
bFhvcjogb3V0IDw8ICJsb2dpY2FsLXhvciI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcExvZ2lj
YWxBbmQ6IG91dCA8PCAibG9naWNhbC1hbmQiOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogb3V0
IDw8ICI8dW5rbm93biBvcD4iOworICAgIH0KKworICAgIG91dCA8PCAiICgiIDw8IG5vZGUtPmdl
dENvbXBsZXRlU3RyaW5nKCkgPDwgIikiOworCisgICAgb3V0IDw8ICJcbiI7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdFVuYXJ5KFZpc2l0IHZp
c2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gc2lu
azsKKworICAgIE91dHB1dFRyZWVUZXh0KG91dCwgbm9kZSwgZGVwdGgpOworCisgICAgc3dpdGNo
IChub2RlLT5nZXRPcCgpKSB7CisgICAgICAgIGNhc2UgRU9wTmVnYXRpdmU6ICAgICAgIG91dCA8
PCAiTmVnYXRlIHZhbHVlIjsgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JM
b2dpY2FsTm90OgorICAgICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6ICAgICBvdXQgPDwgIk5lZ2F0
ZSBjb25kaXRpb25hbCI7ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50
OiAgb3V0IDw8ICJQb3N0LUluY3JlbWVudCI7ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVP
cFBvc3REZWNyZW1lbnQ6ICBvdXQgPDwgIlBvc3QtRGVjcmVtZW50IjsgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OiAgIG91dCA8PCAiUHJlLUluY3JlbWVudCI7ICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6ICAgb3V0IDw8ICJQcmUt
RGVjcmVtZW50IjsgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wQ29udkludFRvQm9v
bDogIG91dCA8PCAiQ29udmVydCBpbnQgdG8gYm9vbCI7ICBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BDb252RmxvYXRUb0Jvb2w6b3V0IDw8ICJDb252ZXJ0IGZsb2F0IHRvIGJvb2wiO2JyZWFrOwor
ICAgICAgICBjYXNlIEVPcENvbnZCb29sVG9GbG9hdDpvdXQgPDwgIkNvbnZlcnQgYm9vbCB0byBm
bG9hdCI7YnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udkludFRvRmxvYXQ6IG91dCA8PCAiQ29u
dmVydCBpbnQgdG8gZmxvYXQiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0lu
dDogb3V0IDw8ICJDb252ZXJ0IGZsb2F0IHRvIGludCI7IGJyZWFrOworICAgICAgICBjYXNlIEVP
cENvbnZCb29sVG9JbnQ6ICBvdXQgPDwgIkNvbnZlcnQgYm9vbCB0byBpbnQiOyAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSBFT3BSYWRpYW5zOiAgICAgICAgb3V0IDw8ICJyYWRpYW5zIjsgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcERlZ3JlZXM6ICAgICAgICBvdXQgPDwgImRl
Z3JlZXMiOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU2luOiAgICAgICAg
ICAgIG91dCA8PCAic2luZSI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BDb3M6ICAgICAgICAgICAgb3V0IDw8ICJjb3NpbmUiOyAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcFRhbjogICAgICAgICAgICBvdXQgPDwgInRhbmdlbnQiOyAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQXNpbjogICAgICAgICAgIG91dCA8PCAiYXJj
IHNpbmUiOyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BBY29zOiAgICAgICAg
ICAgb3V0IDw8ICJhcmMgY29zaW5lIjsgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVP
cEF0YW46ICAgICAgICAgICBvdXQgPDwgImFyYyB0YW5nZW50IjsgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSBFT3BFeHA6ICAgICAgICAgICAgb3V0IDw8ICJleHAiOyAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcExvZzogICAgICAgICAgICBvdXQgPDwgImxv
ZyI7ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRXhwMjogICAgICAg
ICAgIG91dCA8PCAiZXhwMiI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BMb2cyOiAgICAgICAgICAgb3V0IDw8ICJsb2cyIjsgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcFNxcnQ6ICAgICAgICAgICBvdXQgPDwgInNxcnQiOyAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wSW52ZXJzZVNxcnQ6ICAgIG91dCA8PCAiaW52
ZXJzZSBzcXJ0IjsgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcEFiczogICAgICAg
ICAgICBvdXQgPDwgIkFic29sdXRlIHZhbHVlIjsgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wU2lnbjogICAgICAgICAgIG91dCA8PCAiU2lnbiI7ICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BGbG9vcjogICAgICAgICAgb3V0IDw8ICJGbG9vciI7ICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENlaWw6ICAgICAgICAgICBvdXQgPDwgIkNl
aWxpbmciOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRnJhY3Q6ICAgICAg
ICAgIG91dCA8PCAiRnJhY3Rpb24iOyAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
IEVPcExlbmd0aDogICAgICAgICBvdXQgPDwgImxlbmd0aCI7ICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiAgICAgIG91dCA8PCAibm9ybWFsaXplIjsgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vCWNhc2UgRU9wRFBkeDogICAgICAgICAgIG91
dCA8PCAiZFBkeCI7ICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vCWNhc2UgRU9wRFBkeTogICAgICAgICAgIG91dCA8PCAiZFBkeSI7ICAgICAgICAg
ICAgICAgICBicmVhazsgICAKKyAgICAgICAgICAgIC8vCWNhc2UgRU9wRndpZHRoOiAgICAgICAg
IG91dCA8PCAiZndpZHRoIjsgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAg
CisKKyAgICAgICAgY2FzZSBFT3BBbnk6ICAgICAgICAgICAgb3V0IDw8ICJhbnkiOyAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEFsbDogICAgICAgICAgICBvdXQgPDwg
ImFsbCI7ICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIG91dC5wcmVmaXgoRVByZWZpeEVycm9yKTsKKyAgICAgICAgICAgIG91dCA8PCAiQmFk
IHVuYXJ5IG9wIjsKKyAgICB9CisKKyAgICBvdXQgPDwgIiAoIiA8PCBub2RlLT5nZXRDb21wbGV0
ZVN0cmluZygpIDw8ICIpIjsKKworICAgIG91dCA8PCAiXG4iOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQs
IFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gc2lu
azsKKworICAgIGlmIChub2RlLT5nZXRPcCgpID09IEVPcE51bGwpIHsKKyAgICAgICAgb3V0LnBy
ZWZpeChFUHJlZml4RXJyb3IpOworICAgICAgICBvdXQgPDwgIm5vZGUgaXMgc3RpbGwgRU9wTnVs
bCEiOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBPdXRwdXRUcmVlVGV4dChv
dXQsIG5vZGUsIGRlcHRoKTsKKworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkgeworICAgICAg
ICBjYXNlIEVPcFNlcXVlbmNlOiAgICAgIG91dCA8PCAiU2VxdWVuY2VcbiI7IHJldHVybiB0cnVl
OworICAgICAgICBjYXNlIEVPcENvbW1hOiAgICAgICAgIG91dCA8PCAiQ29tbWFcbiI7IHJldHVy
biB0cnVlOworICAgICAgICBjYXNlIEVPcEZ1bmN0aW9uOiAgICAgIG91dCA8PCAiRnVuY3Rpb24g
RGVmaW5pdGlvbjogIiA8PCBub2RlLT5nZXROYW1lKCk7IGJyZWFrOworICAgICAgICBjYXNlIEVP
cEZ1bmN0aW9uQ2FsbDogIG91dCA8PCAiRnVuY3Rpb24gQ2FsbDogIiA8PCBub2RlLT5nZXROYW1l
KCk7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFBhcmFtZXRlcnM6ICAgIG91dCA8PCAiRnVuY3Rp
b24gUGFyYW1ldGVyczogIjsgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9w
Q29uc3RydWN0RmxvYXQ6IG91dCA8PCAiQ29uc3RydWN0IGZsb2F0IjsgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wQ29uc3RydWN0VmVjMjogIG91dCA8PCAiQ29uc3RydWN0IHZlYzIiOyAgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMzogIG91dCA8PCAiQ29uc3RydWN0IHZlYzMi
OyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjNDogIG91dCA8PCAiQ29uc3Ry
dWN0IHZlYzQiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDogIG91dCA8
PCAiQ29uc3RydWN0IGJvb2wiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZl
YzI6IG91dCA8PCAiQ29uc3RydWN0IGJ2ZWMyIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29u
c3RydWN0QlZlYzM6IG91dCA8PCAiQ29uc3RydWN0IGJ2ZWMzIjsgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wQ29uc3RydWN0QlZlYzQ6IG91dCA8PCAiQ29uc3RydWN0IGJ2ZWM0IjsgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OiAgIG91dCA8PCAiQ29uc3RydWN0IGludCI7ICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6IG91dCA8PCAiQ29uc3RydWN0
IGl2ZWMyIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzM6IG91dCA8PCAi
Q29uc3RydWN0IGl2ZWMzIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzQ6
IG91dCA8PCAiQ29uc3RydWN0IGl2ZWM0IjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0TWF0MjogIG91dCA8PCAiQ29uc3RydWN0IG1hdDIiOyAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0TWF0MzogIG91dCA8PCAiQ29uc3RydWN0IG1hdDMiOyAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0NDogIG91dCA8PCAiQ29uc3RydWN0IG1hdDQiOyAgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0U3RydWN0OiAgb3V0IDw8ICJDb25zdHJ1Y3Qg
c3RydWN0dXJlIjsgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW46ICAgICAgICAg
b3V0IDw8ICJDb21wYXJlIExlc3MgVGhhbiI7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEVPcEdyZWF0ZXJUaGFuOiAgICAgIG91dCA8PCAiQ29tcGFyZSBHcmVhdGVyIFRoYW4iOyAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOiAgICBvdXQgPDwg
IkNvbXBhcmUgTGVzcyBUaGFuIG9yIEVxdWFsIjsgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
R3JlYXRlclRoYW5FcXVhbDogb3V0IDw8ICJDb21wYXJlIEdyZWF0ZXIgVGhhbiBvciBFcXVhbCI7
IGJyZWFrOworICAgICAgICBjYXNlIEVPcFZlY3RvckVxdWFsOiAgICAgIG91dCA8PCAiRXF1YWwi
OyAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JO
b3RFcXVhbDogICBvdXQgPDwgIk5vdEVxdWFsIjsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgY2FzZSBFT3BNb2Q6ICAgICAgICAgICBvdXQgPDwgIm1vZCI7ICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wUG93OiAgICAgICAgICAgb3V0IDw8ICJwb3ciOyAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wQXRhbjogICAgICAgICAgb3V0IDw8ICJhcmMg
dGFuZ2VudCI7IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wTWluOiAgICAgICAgICAgb3V0IDw8
ICJtaW4iOyAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcE1heDogICAgICAgICAgIG91
dCA8PCAibWF4IjsgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDbGFtcDogICAgICAg
ICBvdXQgPDwgImNsYW1wIjsgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTWl4OiAgICAg
ICAgICAgb3V0IDw8ICJtaXgiOyAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFN0ZXA6
ICAgICAgICAgIG91dCA8PCAic3RlcCI7ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BT
bW9vdGhTdGVwOiAgICBvdXQgPDwgInNtb290aHN0ZXAiOyAgYnJlYWs7CisKKyAgICAgICAgY2Fz
ZSBFT3BEaXN0YW5jZTogICAgICBvdXQgPDwgImRpc3RhbmNlIjsgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wRG90OiAgICAgICAgICAgb3V0IDw8ICJkb3QtcHJvZHVjdCI7
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENyb3NzOiAgICAgICAgIG91dCA8
PCAiY3Jvc3MtcHJvZHVjdCI7ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BGYWNl
Rm9yd2FyZDogICBvdXQgPDwgImZhY2UtZm9yd2FyZCI7ICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wUmVmbGVjdDogICAgICAgb3V0IDw8ICJyZWZsZWN0IjsgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFJlZnJhY3Q6ICAgICAgIG91dCA8PCAicmVmcmFj
dCI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNdWw6ICAgICAgICAg
ICBvdXQgPDwgImNvbXBvbmVudC13aXNlIG11bHRpcGx5IjsgYnJlYWs7CisKKyAgICAgICAgY2Fz
ZSBFT3BEZWNsYXJhdGlvbjogICBvdXQgPDwgIkRlY2xhcmF0aW9uOiAiOyAgIGJyZWFrOworCisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBvdXQucHJlZml4KEVQcmVmaXhFcnJvcik7Cisg
ICAgICAgICAgICBvdXQgPDwgIkJhZCBhZ2dyZWdhdGlvbiBvcCI7CisgICAgfQorCisgICAgaWYg
KG5vZGUtPmdldE9wKCkgIT0gRU9wU2VxdWVuY2UgJiYgbm9kZS0+Z2V0T3AoKSAhPSBFT3BQYXJh
bWV0ZXJzKQorICAgICAgICBvdXQgPDwgIiAoIiA8PCBub2RlLT5nZXRDb21wbGV0ZVN0cmluZygp
IDw8ICIpIjsKKworICAgIG91dCA8PCAiXG4iOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1T
ZWxlY3Rpb24qIG5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gc2luazsKKworICAg
IE91dHB1dFRyZWVUZXh0KG91dCwgbm9kZSwgZGVwdGgpOworCisgICAgb3V0IDw8ICJUZXN0IGNv
bmRpdGlvbiBhbmQgc2VsZWN0IjsKKyAgICBvdXQgPDwgIiAoIiA8PCBub2RlLT5nZXRDb21wbGV0
ZVN0cmluZygpIDw8ICIpXG4iOworCisgICAgKytkZXB0aDsKKworICAgIE91dHB1dFRyZWVUZXh0
KHNpbmssIG5vZGUsIGRlcHRoKTsKKyAgICBvdXQgPDwgIkNvbmRpdGlvblxuIjsKKyAgICBub2Rl
LT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CisKKyAgICBPdXRwdXRUcmVlVGV4dChz
aW5rLCBub2RlLCBkZXB0aCk7CisgICAgaWYgKG5vZGUtPmdldFRydWVCbG9jaygpKSB7CisgICAg
ICAgIG91dCA8PCAidHJ1ZSBjYXNlXG4iOworICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+
dHJhdmVyc2UodGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIG91dCA8PCAidHJ1ZSBjYXNlIGlz
IG51bGxcbiI7CisKKyAgICBpZiAobm9kZS0+Z2V0RmFsc2VCbG9jaygpKSB7CisgICAgICAgIE91
dHB1dFRyZWVUZXh0KHNpbmssIG5vZGUsIGRlcHRoKTsKKyAgICAgICAgb3V0IDw8ICJmYWxzZSBj
YXNlXG4iOworICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOwor
ICAgIH0KKworICAgIC0tZGVwdGg7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgVE91
dHB1dFRyYXZlcnNlcjo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKiBu
b2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IHNpbms7CisKKyAgICBzaXplX3Qgc2l6
ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CisKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUs
IGRlcHRoKTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpW2ld
LmdldFR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBFYnRCb29sOgorICAgICAgICAgICAgICAg
IGlmIChub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpW2ldLmdldEJDb25zdCgpKQorICAgICAg
ICAgICAgICAgICAgICBvdXQgPDwgInRydWUiOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgb3V0IDw8ICJmYWxzZSI7CisKKyAgICAgICAgICAgICAgICBvdXQgPDwg
IiAoIiA8PCAiY29uc3QgYm9vbCIgPDwgIikiOworICAgICAgICAgICAgICAgIG91dCA8PCAiXG4i
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAg
ICAgICAgICAgICAgICBvdXQgPDwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVtpXS5nZXRG
Q29uc3QoKTsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAoY29uc3QgZmxvYXQpXG4iOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAg
ICAgICAgb3V0IDw8IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKClbaV0uZ2V0SUNvbnN0KCk7
CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgKGNvbnN0IGludClcbiI7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG91dC5tZXNz
YWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRMaW5lKCksICJVbmtub3duIGNvbnN0
YW50Iik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jv
b2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCog
bm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBzaW5rOworCisgICAgT3V0cHV0VHJl
ZVRleHQob3V0LCBub2RlLCBkZXB0aCk7CisKKyAgICBvdXQgPDwgIkxvb3Agd2l0aCBjb25kaXRp
b24gIjsKKyAgICBpZiAobm9kZS0+Z2V0VHlwZSgpID09IEVMb29wRG9XaGlsZSkKKyAgICAgICAg
b3V0IDw8ICJub3QgIjsKKyAgICBvdXQgPDwgInRlc3RlZCBmaXJzdFxuIjsKKworICAgICsrZGVw
dGg7CisKKyAgICBPdXRwdXRUcmVlVGV4dChzaW5rLCBub2RlLCBkZXB0aCk7CisgICAgaWYgKG5v
ZGUtPmdldENvbmRpdGlvbigpKSB7CisgICAgICAgIG91dCA8PCAiTG9vcCBDb25kaXRpb25cbiI7
CisgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgb3V0IDw8ICJObyBsb29wIGNvbmRpdGlvblxuIjsKKworICAgIE91dHB1dFRy
ZWVUZXh0KHNpbmssIG5vZGUsIGRlcHRoKTsKKyAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKSB7Cisg
ICAgICAgIG91dCA8PCAiTG9vcCBCb2R5XG4iOworICAgICAgICBub2RlLT5nZXRCb2R5KCktPnRy
YXZlcnNlKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBvdXQgPDwgIk5vIGxvb3AgYm9keVxu
IjsKKworICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkpIHsKKyAgICAgICAgT3V0cHV0VHJl
ZVRleHQoc2luaywgbm9kZSwgZGVwdGgpOworICAgICAgICBvdXQgPDwgIkxvb3AgVGVybWluYWwg
RXhwcmVzc2lvblxuIjsKKyAgICAgICAgbm9kZS0+Z2V0RXhwcmVzc2lvbigpLT50cmF2ZXJzZSh0
aGlzKTsKKyAgICB9CisKKyAgICAtLWRlcHRoOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCiti
b29sIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJh
bmNoKiBub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IHNpbms7CisKKyAgICBPdXRw
dXRUcmVlVGV4dChvdXQsIG5vZGUsIGRlcHRoKTsKKworICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxv
d09wKCkpIHsKKyAgICAgICAgY2FzZSBFT3BLaWxsOiAgICAgIG91dCA8PCAiQnJhbmNoOiBLaWxs
IjsgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEJyZWFrOiAgICAgb3V0IDw8ICJC
cmFuY2g6IEJyZWFrIjsgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udGludWU6
ICBvdXQgPDwgIkJyYW5jaDogQ29udGludWUiOyAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BSZXR1cm46ICAgIG91dCA8PCAiQnJhbmNoOiBSZXR1cm4iOyAgICAgICAgIGJyZWFrOworICAg
ICAgICBkZWZhdWx0OiAgICAgICAgICAgb3V0IDw8ICJCcmFuY2g6IFVua25vd24gQnJhbmNoIjsg
YnJlYWs7CisgICAgfQorCisgICAgaWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkgeworICAgICAg
ICBvdXQgPDwgIiB3aXRoIGV4cHJlc3Npb25cbiI7CisgICAgICAgICsrZGVwdGg7CisgICAgICAg
IG5vZGUtPmdldEV4cHJlc3Npb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIC0tZGVwdGg7
CisgICAgfSBlbHNlCisgICAgICAgIG91dCA8PCAiXG4iOworCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCisvLworLy8gVGhpcyBmdW5jdGlvbiBpcyB0aGUgb25lIHRvIGNhbGwgZXh0ZXJuYWxseSB0
byBzdGFydCB0aGUgdHJhdmVyc2FsLgorLy8gSW5kaXZpZHVhbCBmdW5jdGlvbnMgY2FuIGJlIGlu
aXRpYWxpemVkIHRvIDAgdG8gc2tpcCBwcm9jZXNzaW5nIG9mIHRoYXQKKy8vIHR5cGUgb2Ygbm9k
ZS4gIEl0J3MgY2hpbGRyZW4gd2lsbCBzdGlsbCBiZSBwcm9jZXNzZWQuCisvLwordm9pZCBUSW50
ZXJtZWRpYXRlOjpvdXRwdXRUcmVlKFRJbnRlcm1Ob2RlKiByb290KQoreworICAgIGlmIChyb290
ID09IDApCisgICAgICAgIHJldHVybjsKKworICAgIFRPdXRwdXRUcmF2ZXJzZXIgaXQoaW5mb1Np
bmsuaW5mbyk7CisKKyAgICByb290LT50cmF2ZXJzZSgmaXQpOworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRl
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9pbnRl
cm1lZGlhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZjlmZTIzZDNiNDhlY2IwMmUxYWE1ZjEwNzYwNGIzNTE4
NGFmYmI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgKQEAgLTAsMCArMSw2MzUgQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKy8vCisvLyBEZWZpbml0aW9uIG9mIHRoZSBpbi1tZW1vcnkgaGlnaC1s
ZXZlbCBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24KKy8vIG9mIHNoYWRlcnMuICBUaGlzIGlz
IGEgdHJlZSB0aGF0IHBhcnNlciBjcmVhdGVzLgorLy8KKy8vIE5vZGVzIGluIHRoZSB0cmVlIGFy
ZSBkZWZpbmVkIGFzIGEgaGllcmFyY2h5IG9mIGNsYXNzZXMgZGVyaXZlZCBmcm9tIAorLy8gVElu
dGVybU5vZGUuIEVhY2ggaXMgYSBub2RlIGluIGEgdHJlZS4gIFRoZXJlIGlzIG5vIHByZXNldCBi
cmFuY2hpbmcgZmFjdG9yOworLy8gZWFjaCBub2RlIGNhbiBoYXZlIGl0J3Mgb3duIHR5cGUgb2Yg
bGlzdCBvZiBjaGlsZHJlbi4KKy8vCisKKyNpZm5kZWYgX19JTlRFUk1FRElBVEVfSAorI2RlZmlu
ZSBfX0lOVEVSTUVESUFURV9ICisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKwor
I2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbW1v
bi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHlwZXMuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaCIKKworLy8KKy8vIE9wZXJhdG9ycyB1
c2VkIGJ5IHRoZSBoaWdoLWxldmVsIChwYXJzZSB0cmVlKSByZXByZXNlbnRhdGlvbi4KKy8vCitl
bnVtIFRPcGVyYXRvciB7CisgICAgRU9wTnVsbCwgICAgICAgICAgICAvLyBpZiBpbiBhIG5vZGUs
IHNob3VsZCBvbmx5IG1lYW4gYSBub2RlIGlzIHN0aWxsIGJlaW5nIGJ1aWx0CisgICAgRU9wU2Vx
dWVuY2UsICAgICAgICAvLyBkZW5vdGVzIGEgbGlzdCBvZiBzdGF0ZW1lbnRzLCBvciBwYXJhbWV0
ZXJzLCBldGMuCisgICAgRU9wRnVuY3Rpb25DYWxsLCAgICAKKyAgICBFT3BGdW5jdGlvbiwgICAg
ICAgIC8vIEZvciBmdW5jdGlvbiBkZWZpbml0aW9uCisgICAgRU9wUGFyYW1ldGVycywgICAgICAv
LyBhbiBhZ2dyZWdhdGUgbGlzdGluZyB0aGUgcGFyYW1ldGVycyB0byBhIGZ1bmN0aW9uCisKKyAg
ICBFT3BEZWNsYXJhdGlvbiwKKyAgICBFT3BQcm90b3R5cGUsCisKKyAgICAvLworICAgIC8vIFVu
YXJ5IG9wZXJhdG9ycworICAgIC8vCisKKyAgICBFT3BOZWdhdGl2ZSwKKyAgICBFT3BMb2dpY2Fs
Tm90LAorICAgIEVPcFZlY3RvckxvZ2ljYWxOb3QsCisKKyAgICBFT3BQb3N0SW5jcmVtZW50LAor
ICAgIEVPcFBvc3REZWNyZW1lbnQsCisgICAgRU9wUHJlSW5jcmVtZW50LAorICAgIEVPcFByZURl
Y3JlbWVudCwKKworICAgIEVPcENvbnZJbnRUb0Jvb2wsCisgICAgRU9wQ29udkZsb2F0VG9Cb29s
LAorICAgIEVPcENvbnZCb29sVG9GbG9hdCwKKyAgICBFT3BDb252SW50VG9GbG9hdCwKKyAgICBF
T3BDb252RmxvYXRUb0ludCwKKyAgICBFT3BDb252Qm9vbFRvSW50LAorCisgICAgLy8KKyAgICAv
LyBiaW5hcnkgb3BlcmF0aW9ucworICAgIC8vCisKKyAgICBFT3BBZGQsCisgICAgRU9wU3ViLAor
ICAgIEVPcE11bCwKKyAgICBFT3BEaXYsCisgICAgRU9wRXF1YWwsCisgICAgRU9wTm90RXF1YWws
CisgICAgRU9wVmVjdG9yRXF1YWwsCisgICAgRU9wVmVjdG9yTm90RXF1YWwsCisgICAgRU9wTGVz
c1RoYW4sCisgICAgRU9wR3JlYXRlclRoYW4sCisgICAgRU9wTGVzc1RoYW5FcXVhbCwKKyAgICBF
T3BHcmVhdGVyVGhhbkVxdWFsLAorICAgIEVPcENvbW1hLAorCisgICAgRU9wVmVjdG9yVGltZXNT
Y2FsYXIsCisgICAgRU9wVmVjdG9yVGltZXNNYXRyaXgsCisgICAgRU9wTWF0cml4VGltZXNWZWN0
b3IsCisgICAgRU9wTWF0cml4VGltZXNTY2FsYXIsCisKKyAgICBFT3BMb2dpY2FsT3IsCisgICAg
RU9wTG9naWNhbFhvciwKKyAgICBFT3BMb2dpY2FsQW5kLAorCisgICAgRU9wSW5kZXhEaXJlY3Qs
CisgICAgRU9wSW5kZXhJbmRpcmVjdCwKKyAgICBFT3BJbmRleERpcmVjdFN0cnVjdCwKKworICAg
IEVPcFZlY3RvclN3aXp6bGUsCisKKyAgICAvLworICAgIC8vIEJ1aWx0LWluIGZ1bmN0aW9ucyBw
b3RlbnRpYWxseSBtYXBwZWQgdG8gb3BlcmF0b3JzCisgICAgLy8KKworICAgIEVPcFJhZGlhbnMs
CisgICAgRU9wRGVncmVlcywKKyAgICBFT3BTaW4sCisgICAgRU9wQ29zLAorICAgIEVPcFRhbiwK
KyAgICBFT3BBc2luLAorICAgIEVPcEFjb3MsCisgICAgRU9wQXRhbiwKKworICAgIEVPcFBvdywK
KyAgICBFT3BFeHAsCisgICAgRU9wTG9nLAorICAgIEVPcEV4cDIsCisgICAgRU9wTG9nMiwKKyAg
ICBFT3BTcXJ0LAorICAgIEVPcEludmVyc2VTcXJ0LAorCisgICAgRU9wQWJzLAorICAgIEVPcFNp
Z24sCisgICAgRU9wRmxvb3IsCisgICAgRU9wQ2VpbCwKKyAgICBFT3BGcmFjdCwKKyAgICBFT3BN
b2QsCisgICAgRU9wTWluLAorICAgIEVPcE1heCwKKyAgICBFT3BDbGFtcCwKKyAgICBFT3BNaXgs
CisgICAgRU9wU3RlcCwKKyAgICBFT3BTbW9vdGhTdGVwLAorCisgICAgRU9wTGVuZ3RoLAorICAg
IEVPcERpc3RhbmNlLAorICAgIEVPcERvdCwKKyAgICBFT3BDcm9zcywKKyAgICBFT3BOb3JtYWxp
emUsCisgICAgRU9wRmFjZUZvcndhcmQsCisgICAgRU9wUmVmbGVjdCwKKyAgICBFT3BSZWZyYWN0
LAorCisgICAgRU9wREZkeCwgICAgICAgICAgICAvLyBGcmFnbWVudCBvbmx5LCBPRVNfc3RhbmRh
cmRfZGVyaXZhdGl2ZXMgZXh0ZW5zaW9uCisgICAgRU9wREZkeSwgICAgICAgICAgICAvLyBGcmFn
bWVudCBvbmx5LCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgZXh0ZW5zaW9uCisgICAgRU9wRndp
ZHRoLCAgICAgICAgICAvLyBGcmFnbWVudCBvbmx5LCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMg
ZXh0ZW5zaW9uCisKKyAgICBFT3BNYXRyaXhUaW1lc01hdHJpeCwKKworICAgIEVPcEFueSwKKyAg
ICBFT3BBbGwsCisKKyAgICAvLworICAgIC8vIEJyYW5jaAorICAgIC8vCisKKyAgICBFT3BLaWxs
LCAgICAgICAgICAgIC8vIEZyYWdtZW50IG9ubHkKKyAgICBFT3BSZXR1cm4sCisgICAgRU9wQnJl
YWssCisgICAgRU9wQ29udGludWUsCisKKyAgICAvLworICAgIC8vIENvbnN0cnVjdG9ycworICAg
IC8vCisKKyAgICBFT3BDb25zdHJ1Y3RJbnQsCisgICAgRU9wQ29uc3RydWN0Qm9vbCwKKyAgICBF
T3BDb25zdHJ1Y3RGbG9hdCwKKyAgICBFT3BDb25zdHJ1Y3RWZWMyLAorICAgIEVPcENvbnN0cnVj
dFZlYzMsCisgICAgRU9wQ29uc3RydWN0VmVjNCwKKyAgICBFT3BDb25zdHJ1Y3RCVmVjMiwKKyAg
ICBFT3BDb25zdHJ1Y3RCVmVjMywKKyAgICBFT3BDb25zdHJ1Y3RCVmVjNCwKKyAgICBFT3BDb25z
dHJ1Y3RJVmVjMiwKKyAgICBFT3BDb25zdHJ1Y3RJVmVjMywKKyAgICBFT3BDb25zdHJ1Y3RJVmVj
NCwKKyAgICBFT3BDb25zdHJ1Y3RNYXQyLAorICAgIEVPcENvbnN0cnVjdE1hdDMsCisgICAgRU9w
Q29uc3RydWN0TWF0NCwKKyAgICBFT3BDb25zdHJ1Y3RTdHJ1Y3QsCisKKyAgICAvLworICAgIC8v
IG1vdmVzCisgICAgLy8KKworICAgIEVPcEFzc2lnbiwKKyAgICBFT3BJbml0aWFsaXplLAorICAg
IEVPcEFkZEFzc2lnbiwKKyAgICBFT3BTdWJBc3NpZ24sCisgICAgRU9wTXVsQXNzaWduLAorICAg
IEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduLAorICAgIEVPcFZlY3RvclRpbWVzU2NhbGFyQXNz
aWduLAorICAgIEVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduLAorICAgIEVPcE1hdHJpeFRpbWVz
TWF0cml4QXNzaWduLAorICAgIEVPcERpdkFzc2lnbgorfTsKKworZXh0ZXJuIGNvbnN0IGNoYXIq
IGdldE9wZXJhdG9yU3RyaW5nKFRPcGVyYXRvciBvcCk7CisKK2NsYXNzIFRJbnRlcm1UcmF2ZXJz
ZXI7CitjbGFzcyBUSW50ZXJtQWdncmVnYXRlOworY2xhc3MgVEludGVybUJpbmFyeTsKK2NsYXNz
IFRJbnRlcm1VbmFyeTsKK2NsYXNzIFRJbnRlcm1Db25zdGFudFVuaW9uOworY2xhc3MgVEludGVy
bVNlbGVjdGlvbjsKK2NsYXNzIFRJbnRlcm1UeXBlZDsKK2NsYXNzIFRJbnRlcm1TeW1ib2w7Citj
bGFzcyBUSW50ZXJtTG9vcDsKK2NsYXNzIFRJbmZvU2luazsKKworLy8KKy8vIEJhc2UgY2xhc3Mg
Zm9yIHRoZSB0cmVlIG5vZGVzCisvLworY2xhc3MgVEludGVybU5vZGUgeworcHVibGljOgorICAg
IFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKKyAgICBUSW50ZXJtTm9kZSgpIHsKKyAgICAg
ICAgLy8gVE9ETzogTW92ZSB0aGlzIHRvIFRTb3VyY2VMb2MgY29uc3RydWN0b3IKKyAgICAgICAg
Ly8gYWZ0ZXIgZ2V0dGluZyByaWQgb2YgVFB1YmxpY1R5cGUuCisgICAgICAgIGxpbmUuZmlyc3Rf
ZmlsZSA9IGxpbmUubGFzdF9maWxlID0gMDsKKyAgICAgICAgbGluZS5maXJzdF9saW5lID0gbGlu
ZS5sYXN0X2xpbmUgPSAwOworICAgIH0KKyAgICB2aXJ0dWFsIH5USW50ZXJtTm9kZSgpIHsgfQor
CisgICAgY29uc3QgVFNvdXJjZUxvYyYgZ2V0TGluZSgpIGNvbnN0IHsgcmV0dXJuIGxpbmU7IH0K
KyAgICB2b2lkIHNldExpbmUoY29uc3QgVFNvdXJjZUxvYyYgbCkgeyBsaW5lID0gbDsgfQorCisg
ICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKSA9IDA7CisgICAgdmly
dHVhbCBUSW50ZXJtVHlwZWQqIGdldEFzVHlwZWQoKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVh
bCBUSW50ZXJtQ29uc3RhbnRVbmlvbiogZ2V0QXNDb25zdGFudFVuaW9uKCkgeyByZXR1cm4gMDsg
fQorICAgIHZpcnR1YWwgVEludGVybUFnZ3JlZ2F0ZSogZ2V0QXNBZ2dyZWdhdGUoKSB7IHJldHVy
biAwOyB9CisgICAgdmlydHVhbCBUSW50ZXJtQmluYXJ5KiBnZXRBc0JpbmFyeU5vZGUoKSB7IHJl
dHVybiAwOyB9CisgICAgdmlydHVhbCBUSW50ZXJtVW5hcnkqIGdldEFzVW5hcnlOb2RlKCkgeyBy
ZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgVEludGVybVNlbGVjdGlvbiogZ2V0QXNTZWxlY3Rpb25O
b2RlKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgVEludGVybVN5bWJvbCogZ2V0QXNTeW1i
b2xOb2RlKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgVEludGVybUxvb3AqIGdldEFzTG9v
cE5vZGUoKSB7IHJldHVybiAwOyB9CisKKyAgICAvLyBSZXBsYWNlIGEgY2hpbGQgbm9kZS4gUmV0
dXJuIHRydWUgaWYgfG9yaWdpbmFsfCBpcyBhIGNoaWxkCisgICAgLy8gbm9kZSBhbmQgaXQgaXMg
cmVwbGFjZWQ7IG90aGVyd2lzZSwgcmV0dXJuIGZhbHNlLgorICAgIHZpcnR1YWwgYm9vbCByZXBs
YWNlQ2hpbGROb2RlKAorICAgICAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2Rl
ICpyZXBsYWNlbWVudCkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgVFNvdXJjZUxvYyBsaW5lOwor
fTsKKworLy8KKy8vIFRoaXMgaXMganVzdCB0byBoZWxwIHlhY2MuCisvLworc3RydWN0IFRJbnRl
cm1Ob2RlUGFpciB7CisgICAgVEludGVybU5vZGUqIG5vZGUxOworICAgIFRJbnRlcm1Ob2RlKiBu
b2RlMjsKK307CisKKy8vCisvLyBJbnRlcm1lZGlhdGUgY2xhc3MgZm9yIG5vZGVzIHRoYXQgaGF2
ZSBhIHR5cGUuCisvLworY2xhc3MgVEludGVybVR5cGVkIDogcHVibGljIFRJbnRlcm1Ob2RlIHsK
K3B1YmxpYzoKKyAgICBUSW50ZXJtVHlwZWQoY29uc3QgVFR5cGUmIHQpIDogdHlwZSh0KSAgeyB9
CisgICAgdmlydHVhbCBUSW50ZXJtVHlwZWQqIGdldEFzVHlwZWQoKSB7IHJldHVybiB0aGlzOyB9
CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzU2lkZUVmZmVjdHMoKSBjb25zdCA9IDA7CisKKyAgICB2
b2lkIHNldFR5cGUoY29uc3QgVFR5cGUmIHQpIHsgdHlwZSA9IHQ7IH0KKyAgICBjb25zdCBUVHlw
ZSYgZ2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGU7IH0KKyAgICBUVHlwZSogZ2V0VHlwZVBv
aW50ZXIoKSB7IHJldHVybiAmdHlwZTsgfQorCisgICAgVEJhc2ljVHlwZSBnZXRCYXNpY1R5cGUo
KSBjb25zdCB7IHJldHVybiB0eXBlLmdldEJhc2ljVHlwZSgpOyB9CisgICAgVFF1YWxpZmllciBn
ZXRRdWFsaWZpZXIoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldFF1YWxpZmllcigpOyB9CisgICAg
VFByZWNpc2lvbiBnZXRQcmVjaXNpb24oKSBjb25zdCB7IHJldHVybiB0eXBlLmdldFByZWNpc2lv
bigpOyB9CisgICAgaW50IGdldE5vbWluYWxTaXplKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRO
b21pbmFsU2l6ZSgpOyB9CisgICAgCisgICAgYm9vbCBpc01hdHJpeCgpIGNvbnN0IHsgcmV0dXJu
IHR5cGUuaXNNYXRyaXgoKTsgfQorICAgIGJvb2wgaXNBcnJheSgpICBjb25zdCB7IHJldHVybiB0
eXBlLmlzQXJyYXkoKTsgfQorICAgIGJvb2wgaXNWZWN0b3IoKSBjb25zdCB7IHJldHVybiB0eXBl
LmlzVmVjdG9yKCk7IH0KKyAgICBib29sIGlzU2NhbGFyKCkgY29uc3QgeyByZXR1cm4gdHlwZS5p
c1NjYWxhcigpOyB9CisgICAgY29uc3QgY2hhciogZ2V0QmFzaWNTdHJpbmcoKSBjb25zdCB7IHJl
dHVybiB0eXBlLmdldEJhc2ljU3RyaW5nKCk7IH0KKyAgICBjb25zdCBjaGFyKiBnZXRRdWFsaWZp
ZXJTdHJpbmcoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldFF1YWxpZmllclN0cmluZygpOyB9Cisg
ICAgVFN0cmluZyBnZXRDb21wbGV0ZVN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0Q29t
cGxldGVTdHJpbmcoKTsgfQorCisgICAgaW50IHRvdGFsUmVnaXN0ZXJDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIHR5cGUudG90YWxSZWdpc3RlckNvdW50KCk7IH0KKyAgICBpbnQgZWxlbWVudFJlZ2lz
dGVyQ291bnQoKSBjb25zdCB7IHJldHVybiB0eXBlLmVsZW1lbnRSZWdpc3RlckNvdW50KCk7IH0K
KyAgICBpbnQgZ2V0QXJyYXlTaXplKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRBcnJheVNpemUo
KTsgfQorCitwcm90ZWN0ZWQ6CisgICAgVFR5cGUgdHlwZTsKK307CisKKy8vCisvLyBIYW5kbGUg
Zm9yLCBkby13aGlsZSwgYW5kIHdoaWxlIGxvb3BzLgorLy8KK2VudW0gVExvb3BUeXBlIHsKKyAg
ICBFTG9vcEZvciwKKyAgICBFTG9vcFdoaWxlLAorICAgIEVMb29wRG9XaGlsZQorfTsKKworY2xh
c3MgVEludGVybUxvb3AgOiBwdWJsaWMgVEludGVybU5vZGUgeworcHVibGljOgorICAgIFRJbnRl
cm1Mb29wKFRMb29wVHlwZSBhVHlwZSwKKyAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSAqYUlu
aXQsIFRJbnRlcm1UeXBlZCogYUNvbmQsIFRJbnRlcm1UeXBlZCogYUV4cHIsCisgICAgICAgICAg
ICAgICAgVEludGVybU5vZGUqIGFCb2R5KSA6CisgICAgICAgICAgICB0eXBlKGFUeXBlKSwKKyAg
ICAgICAgICAgIGluaXQoYUluaXQpLAorICAgICAgICAgICAgY29uZChhQ29uZCksCisgICAgICAg
ICAgICBleHByKGFFeHByKSwKKyAgICAgICAgICAgIGJvZHkoYUJvZHkpLAorICAgICAgICAgICAg
dW5yb2xsRmxhZyhmYWxzZSkgeyB9CisKKyAgICB2aXJ0dWFsIFRJbnRlcm1Mb29wKiBnZXRBc0xv
b3BOb2RlKCkgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50
ZXJtVHJhdmVyc2VyKik7CisgICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGlsZE5vZGUoCisgICAg
ICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KTsKKwor
ICAgIFRMb29wVHlwZSBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZTsgfQorICAgIFRJbnRl
cm1Ob2RlKiBnZXRJbml0KCkgeyByZXR1cm4gaW5pdDsgfQorICAgIFRJbnRlcm1UeXBlZCogZ2V0
Q29uZGl0aW9uKCkgeyByZXR1cm4gY29uZDsgfQorICAgIFRJbnRlcm1UeXBlZCogZ2V0RXhwcmVz
c2lvbigpIHsgcmV0dXJuIGV4cHI7IH0KKyAgICBUSW50ZXJtTm9kZSogZ2V0Qm9keSgpIHsgcmV0
dXJuIGJvZHk7IH0KKworICAgIHZvaWQgc2V0VW5yb2xsRmxhZyhib29sIGZsYWcpIHsgdW5yb2xs
RmxhZyA9IGZsYWc7IH0KKyAgICBib29sIGdldFVucm9sbEZsYWcoKSB7IHJldHVybiB1bnJvbGxG
bGFnOyB9CisKK3Byb3RlY3RlZDoKKyAgICBUTG9vcFR5cGUgdHlwZTsKKyAgICBUSW50ZXJtTm9k
ZSogaW5pdDsgIC8vIGZvci1sb29wIGluaXRpYWxpemF0aW9uCisgICAgVEludGVybVR5cGVkKiBj
b25kOyAvLyBsb29wIGV4aXQgY29uZGl0aW9uCisgICAgVEludGVybVR5cGVkKiBleHByOyAvLyBm
b3ItbG9vcCBleHByZXNzaW9uCisgICAgVEludGVybU5vZGUqIGJvZHk7ICAvLyBsb29wIGJvZHkK
KworICAgIGJvb2wgdW5yb2xsRmxhZzsgLy8gV2hldGhlciB0aGUgbG9vcCBzaG91bGQgYmUgdW5y
b2xsZWQgb3Igbm90LgorfTsKKworLy8KKy8vIEhhbmRsZSBicmVhaywgY29udGludWUsIHJldHVy
biwgYW5kIGtpbGwuCisvLworY2xhc3MgVEludGVybUJyYW5jaCA6IHB1YmxpYyBUSW50ZXJtTm9k
ZSB7CitwdWJsaWM6CisgICAgVEludGVybUJyYW5jaChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBl
ZCogZSkgOgorICAgICAgICAgICAgZmxvd09wKG9wKSwKKyAgICAgICAgICAgIGV4cHJlc3Npb24o
ZSkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOwor
ICAgIHZpcnR1YWwgYm9vbCByZXBsYWNlQ2hpbGROb2RlKAorICAgICAgICBUSW50ZXJtTm9kZSAq
b3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCk7CisKKyAgICBUT3BlcmF0b3IgZ2V0
Rmxvd09wKCkgeyByZXR1cm4gZmxvd09wOyB9CisgICAgVEludGVybVR5cGVkKiBnZXRFeHByZXNz
aW9uKCkgeyByZXR1cm4gZXhwcmVzc2lvbjsgfQorCitwcm90ZWN0ZWQ6CisgICAgVE9wZXJhdG9y
IGZsb3dPcDsKKyAgICBUSW50ZXJtVHlwZWQqIGV4cHJlc3Npb247ICAvLyBub24temVybyBleGNl
cHQgZm9yICJyZXR1cm4gZXhwOyIgc3RhdGVtZW50cworfTsKKworLy8KKy8vIE5vZGVzIHRoYXQg
Y29ycmVzcG9uZCB0byBzeW1ib2xzIG9yIGNvbnN0YW50cyBpbiB0aGUgc291cmNlIGNvZGUuCisv
LworY2xhc3MgVEludGVybVN5bWJvbCA6IHB1YmxpYyBUSW50ZXJtVHlwZWQgeworcHVibGljOgor
ICAgIC8vIGlmIHN5bWJvbCBpcyBpbml0aWFsaXplZCBhcyBzeW1ib2woc3ltKSwgdGhlIG1lbW9y
eSBjb21lcyBmcm9tIHRoZSBwb29sYWxsb2NhdG9yIG9mIHN5bS4gSWYgc3ltIGNvbWVzIGZyb20K
KyAgICAvLyBwZXIgcHJvY2VzcyBnbG9iYWxwb29sYWxsb2NhdG9yLCB0aGVuIGl0IGNhdXNlcyBp
bmNyZWFzZWQgbWVtb3J5IHVzYWdlIHBlciBjb21waWxlCisgICAgLy8gaXQgaXMgZXNzZW50aWFs
IHRvIHVzZSAic3ltYm9sID0gc3ltIiB0byBhc3NpZ24gdG8gc3ltYm9sCisgICAgVEludGVybVN5
bWJvbChpbnQgaSwgY29uc3QgVFN0cmluZyYgc3ltLCBjb25zdCBUVHlwZSYgdCkgOiAKKyAgICAg
ICAgICAgIFRJbnRlcm1UeXBlZCh0KSwgaWQoaSkgIHsgc3ltYm9sID0gc3ltOyBvcmlnaW5hbFN5
bWJvbCA9IHN5bTsgfSAKKworICAgIHZpcnR1YWwgYm9vbCBoYXNTaWRlRWZmZWN0cygpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBpbnQgZ2V0SWQoKSBjb25zdCB7IHJldHVybiBpZDsg
fQorICAgIGNvbnN0IFRTdHJpbmcmIGdldFN5bWJvbCgpIGNvbnN0IHsgcmV0dXJuIHN5bWJvbDsg
fQorCisgICAgdm9pZCBzZXRJZChpbnQgbmV3SWQpIHsgaWQgPSBuZXdJZDsgfQorICAgIHZvaWQg
c2V0U3ltYm9sKGNvbnN0IFRTdHJpbmcmIHN5bSkgeyBzeW1ib2wgPSBzeW07IH0KKworICAgIGNv
bnN0IFRTdHJpbmcmIGdldE9yaWdpbmFsU3ltYm9sKCkgY29uc3QgeyByZXR1cm4gb3JpZ2luYWxT
eW1ib2w7IH0KKworICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7
CisgICAgdmlydHVhbCBUSW50ZXJtU3ltYm9sKiBnZXRBc1N5bWJvbE5vZGUoKSB7IHJldHVybiB0
aGlzOyB9CisgICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGlsZE5vZGUoVEludGVybU5vZGUgKiwg
VEludGVybU5vZGUgKikgeyByZXR1cm4gZmFsc2U7IH0KKworcHJvdGVjdGVkOgorICAgIGludCBp
ZDsKKyAgICBUU3RyaW5nIHN5bWJvbDsKKyAgICBUU3RyaW5nIG9yaWdpbmFsU3ltYm9sOworfTsK
KworY2xhc3MgVEludGVybUNvbnN0YW50VW5pb24gOiBwdWJsaWMgVEludGVybVR5cGVkIHsKK3B1
YmxpYzoKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbihDb25zdGFudFVuaW9uICp1bmlvblBvaW50
ZXIsIGNvbnN0IFRUeXBlJiB0KSA6IFRJbnRlcm1UeXBlZCh0KSwgdW5pb25BcnJheVBvaW50ZXIo
dW5pb25Qb2ludGVyKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCBoYXNTaWRlRWZmZWN0cygpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBDb25zdGFudFVuaW9uKiBnZXRVbmlvbkFycmF5
UG9pbnRlcigpIGNvbnN0IHsgcmV0dXJuIHVuaW9uQXJyYXlQb2ludGVyOyB9CisgICAgCisgICAg
aW50IGdldElDb25zdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIHVuaW9uQXJyYXlQb2lu
dGVyID8gdW5pb25BcnJheVBvaW50ZXJbaW5kZXhdLmdldElDb25zdCgpIDogMDsgfQorICAgIGZs
b2F0IGdldEZDb25zdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIHVuaW9uQXJyYXlQb2lu
dGVyID8gdW5pb25BcnJheVBvaW50ZXJbaW5kZXhdLmdldEZDb25zdCgpIDogMC4wZjsgfQorICAg
IGJvb2wgZ2V0QkNvbnN0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gdW5pb25BcnJheVBv
aW50ZXIgPyB1bmlvbkFycmF5UG9pbnRlcltpbmRleF0uZ2V0QkNvbnN0KCkgOiBmYWxzZTsgfQor
CisgICAgdmlydHVhbCBUSW50ZXJtQ29uc3RhbnRVbmlvbiogZ2V0QXNDb25zdGFudFVuaW9uKCkg
IHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZl
cnNlciopOworICAgIHZpcnR1YWwgYm9vbCByZXBsYWNlQ2hpbGROb2RlKFRJbnRlcm1Ob2RlICos
IFRJbnRlcm1Ob2RlICopIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBUSW50ZXJtVHlwZWQqIGZv
bGQoVE9wZXJhdG9yLCBUSW50ZXJtVHlwZWQqLCBUSW5mb1NpbmsmKTsKKworcHJvdGVjdGVkOgor
ICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXlQb2ludGVyOworfTsKKworLy8KKy8vIEludGVy
bWVkaWF0ZSBjbGFzcyBmb3Igbm9kZSB0eXBlcyB0aGF0IGhvbGQgb3BlcmF0b3JzLgorLy8KK2Ns
YXNzIFRJbnRlcm1PcGVyYXRvciA6IHB1YmxpYyBUSW50ZXJtVHlwZWQgeworcHVibGljOgorICAg
IFRPcGVyYXRvciBnZXRPcCgpIGNvbnN0IHsgcmV0dXJuIG9wOyB9CisgICAgdm9pZCBzZXRPcChU
T3BlcmF0b3IgbykgeyBvcCA9IG87IH0KKworICAgIGJvb2wgaXNBc3NpZ25tZW50KCkgY29uc3Q7
CisgICAgYm9vbCBpc0NvbnN0cnVjdG9yKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFz
U2lkZUVmZmVjdHMoKSBjb25zdCB7IHJldHVybiBpc0Fzc2lnbm1lbnQoKTsgfQorCitwcm90ZWN0
ZWQ6CisgICAgVEludGVybU9wZXJhdG9yKFRPcGVyYXRvciBvKSA6IFRJbnRlcm1UeXBlZChUVHlw
ZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkKSksIG9wKG8pIHt9CisgICAgVEludGVybU9wZXJhdG9y
KFRPcGVyYXRvciBvLCBjb25zdCBUVHlwZSYgdCkgOiBUSW50ZXJtVHlwZWQodCksIG9wKG8pIHt9
CisgICAgVE9wZXJhdG9yIG9wOworfTsKKworLy8KKy8vIE5vZGVzIGZvciBhbGwgdGhlIGJhc2lj
IGJpbmFyeSBtYXRoIG9wZXJhdG9ycy4KKy8vCitjbGFzcyBUSW50ZXJtQmluYXJ5IDogcHVibGlj
IFRJbnRlcm1PcGVyYXRvciB7CitwdWJsaWM6CisgICAgVEludGVybUJpbmFyeShUT3BlcmF0b3Ig
bykgOiBUSW50ZXJtT3BlcmF0b3IobyksIGFkZEluZGV4Q2xhbXAoZmFsc2UpIHt9CisKKyAgICB2
aXJ0dWFsIFRJbnRlcm1CaW5hcnkqIGdldEFzQmluYXJ5Tm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOworICAgIHZpcnR1
YWwgYm9vbCByZXBsYWNlQ2hpbGROb2RlKAorICAgICAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWws
IFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzU2lkZUVm
ZmVjdHMoKSBjb25zdCB7IHJldHVybiAoaXNBc3NpZ25tZW50KCkgfHwgbGVmdC0+aGFzU2lkZUVm
ZmVjdHMoKSB8fCByaWdodC0+aGFzU2lkZUVmZmVjdHMoKSk7IH0KKworICAgIHZvaWQgc2V0TGVm
dChUSW50ZXJtVHlwZWQqIG4pIHsgbGVmdCA9IG47IH0KKyAgICB2b2lkIHNldFJpZ2h0KFRJbnRl
cm1UeXBlZCogbikgeyByaWdodCA9IG47IH0KKyAgICBUSW50ZXJtVHlwZWQqIGdldExlZnQoKSBj
b25zdCB7IHJldHVybiBsZWZ0OyB9CisgICAgVEludGVybVR5cGVkKiBnZXRSaWdodCgpIGNvbnN0
IHsgcmV0dXJuIHJpZ2h0OyB9CisgICAgYm9vbCBwcm9tb3RlKFRJbmZvU2luayYpOworCisgICAg
dm9pZCBzZXRBZGRJbmRleENsYW1wKCkgeyBhZGRJbmRleENsYW1wID0gdHJ1ZTsgfQorICAgIGJv
b2wgZ2V0QWRkSW5kZXhDbGFtcCgpIHsgcmV0dXJuIGFkZEluZGV4Q2xhbXA7IH0KKworcHJvdGVj
dGVkOgorICAgIFRJbnRlcm1UeXBlZCogbGVmdDsKKyAgICBUSW50ZXJtVHlwZWQqIHJpZ2h0Owor
CisgICAgLy8gSWYgc2V0IHRvIHRydWUsIHdyYXAgYW55IEVPcEluZGV4SW5kaXJlY3Qgd2l0aCBh
IGNsYW1wIHRvIGJvdW5kcy4KKyAgICBib29sIGFkZEluZGV4Q2xhbXA7Cit9OworCisvLworLy8g
Tm9kZXMgZm9yIHVuYXJ5IG1hdGggb3BlcmF0b3JzLgorLy8KK2NsYXNzIFRJbnRlcm1VbmFyeSA6
IHB1YmxpYyBUSW50ZXJtT3BlcmF0b3IgeworcHVibGljOgorICAgIFRJbnRlcm1VbmFyeShUT3Bl
cmF0b3IgbywgY29uc3QgVFR5cGUmIHQpIDogVEludGVybU9wZXJhdG9yKG8sIHQpLCBvcGVyYW5k
KDApLCB1c2VFbXVsYXRlZEZ1bmN0aW9uKGZhbHNlKSB7fQorICAgIFRJbnRlcm1VbmFyeShUT3Bl
cmF0b3IgbykgOiBUSW50ZXJtT3BlcmF0b3IobyksIG9wZXJhbmQoMCksIHVzZUVtdWxhdGVkRnVu
Y3Rpb24oZmFsc2UpIHt9CisKKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZl
cnNlciopOworICAgIHZpcnR1YWwgVEludGVybVVuYXJ5KiBnZXRBc1VuYXJ5Tm9kZSgpIHsgcmV0
dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxkTm9kZSgKKyAgICAgICAg
VEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFjZW1lbnQpOworCisgICAg
dmlydHVhbCBib29sIGhhc1NpZGVFZmZlY3RzKCkgY29uc3QgeyByZXR1cm4gKGlzQXNzaWdubWVu
dCgpIHx8IG9wZXJhbmQtPmhhc1NpZGVFZmZlY3RzKCkpOyB9CisKKyAgICB2b2lkIHNldE9wZXJh
bmQoVEludGVybVR5cGVkKiBvKSB7IG9wZXJhbmQgPSBvOyB9CisgICAgVEludGVybVR5cGVkKiBn
ZXRPcGVyYW5kKCkgeyByZXR1cm4gb3BlcmFuZDsgfSAgICAKKyAgICBib29sIHByb21vdGUoVElu
Zm9TaW5rJik7CisKKyAgICB2b2lkIHNldFVzZUVtdWxhdGVkRnVuY3Rpb24oKSB7IHVzZUVtdWxh
dGVkRnVuY3Rpb24gPSB0cnVlOyB9CisgICAgYm9vbCBnZXRVc2VFbXVsYXRlZEZ1bmN0aW9uKCkg
eyByZXR1cm4gdXNlRW11bGF0ZWRGdW5jdGlvbjsgfQorCitwcm90ZWN0ZWQ6CisgICAgVEludGVy
bVR5cGVkKiBvcGVyYW5kOworCisgICAgLy8gSWYgc2V0IHRvIHRydWUsIHJlcGxhY2UgdGhlIGJ1
aWx0LWluIGZ1bmN0aW9uIGNhbGwgd2l0aCBhbiBlbXVsYXRlZCBvbmUKKyAgICAvLyB0byB3b3Jr
IGFyb3VuZCBkcml2ZXIgYnVncy4KKyAgICBib29sIHVzZUVtdWxhdGVkRnVuY3Rpb247Cit9Owor
Cit0eXBlZGVmIFRWZWN0b3I8VEludGVybU5vZGUqPiBUSW50ZXJtU2VxdWVuY2U7Cit0eXBlZGVm
IFRWZWN0b3I8aW50PiBUUXVhbGlmaWVyTGlzdDsKKworLy8KKy8vIE5vZGVzIHRoYXQgb3BlcmF0
ZSBvbiBhbiBhcmJpdHJhcnkgc2l6ZWQgc2V0IG9mIGNoaWxkcmVuLgorLy8KK2NsYXNzIFRJbnRl
cm1BZ2dyZWdhdGUgOiBwdWJsaWMgVEludGVybU9wZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBUSW50
ZXJtQWdncmVnYXRlKCkgOiBUSW50ZXJtT3BlcmF0b3IoRU9wTnVsbCksIHVzZXJEZWZpbmVkKGZh
bHNlKSwgdXNlRW11bGF0ZWRGdW5jdGlvbihmYWxzZSkgeyB9CisgICAgVEludGVybUFnZ3JlZ2F0
ZShUT3BlcmF0b3IgbykgOiBUSW50ZXJtT3BlcmF0b3IobyksIHVzZUVtdWxhdGVkRnVuY3Rpb24o
ZmFsc2UpIHsgfQorICAgIH5USW50ZXJtQWdncmVnYXRlKCkgeyB9CisKKyAgICB2aXJ0dWFsIFRJ
bnRlcm1BZ2dyZWdhdGUqIGdldEFzQWdncmVnYXRlKCkgeyByZXR1cm4gdGhpczsgfQorICAgIHZp
cnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7CisgICAgdmlydHVhbCBib29s
IHJlcGxhY2VDaGlsZE5vZGUoCisgICAgICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVy
bU5vZGUgKnJlcGxhY2VtZW50KTsKKworICAgIC8vIENvbnNlcnZhdGl2ZWx5IGFzc3VtZSBmdW5j
dGlvbiBjYWxscyBhbmQgb3RoZXIgYWdncmVnYXRlIG9wZXJhdG9ycyBoYXZlIHNpZGUtZWZmZWN0
cworICAgIHZpcnR1YWwgYm9vbCBoYXNTaWRlRWZmZWN0cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KKworICAgIFRJbnRlcm1TZXF1ZW5jZSYgZ2V0U2VxdWVuY2UoKSB7IHJldHVybiBzZXF1ZW5j
ZTsgfQorCisgICAgdm9pZCBzZXROYW1lKGNvbnN0IFRTdHJpbmcmIG4pIHsgbmFtZSA9IG47IH0K
KyAgICBjb25zdCBUU3RyaW5nJiBnZXROYW1lKCkgY29uc3QgeyByZXR1cm4gbmFtZTsgfQorCisg
ICAgdm9pZCBzZXRVc2VyRGVmaW5lZCgpIHsgdXNlckRlZmluZWQgPSB0cnVlOyB9CisgICAgYm9v
bCBpc1VzZXJEZWZpbmVkKCkgY29uc3QgeyByZXR1cm4gdXNlckRlZmluZWQ7IH0KKworICAgIHZv
aWQgc2V0T3B0aW1pemUoYm9vbCBvKSB7IG9wdGltaXplID0gbzsgfQorICAgIGJvb2wgZ2V0T3B0
aW1pemUoKSB7IHJldHVybiBvcHRpbWl6ZTsgfQorICAgIHZvaWQgc2V0RGVidWcoYm9vbCBkKSB7
IGRlYnVnID0gZDsgfQorICAgIGJvb2wgZ2V0RGVidWcoKSB7IHJldHVybiBkZWJ1ZzsgfQorCisg
ICAgdm9pZCBzZXRVc2VFbXVsYXRlZEZ1bmN0aW9uKCkgeyB1c2VFbXVsYXRlZEZ1bmN0aW9uID0g
dHJ1ZTsgfQorICAgIGJvb2wgZ2V0VXNlRW11bGF0ZWRGdW5jdGlvbigpIHsgcmV0dXJuIHVzZUVt
dWxhdGVkRnVuY3Rpb247IH0KKworcHJvdGVjdGVkOgorICAgIFRJbnRlcm1BZ2dyZWdhdGUoY29u
c3QgVEludGVybUFnZ3JlZ2F0ZSYpOyAvLyBkaXNhbGxvdyBjb3B5IGNvbnN0cnVjdG9yCisgICAg
VEludGVybUFnZ3JlZ2F0ZSYgb3BlcmF0b3I9KGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUmKTsgLy8g
ZGlzYWxsb3cgYXNzaWdubWVudCBvcGVyYXRvcgorICAgIFRJbnRlcm1TZXF1ZW5jZSBzZXF1ZW5j
ZTsKKyAgICBUU3RyaW5nIG5hbWU7CisgICAgYm9vbCB1c2VyRGVmaW5lZDsgLy8gdXNlZCBmb3Ig
dXNlciBkZWZpbmVkIGZ1bmN0aW9uIG5hbWVzCisKKyAgICBib29sIG9wdGltaXplOworICAgIGJv
b2wgZGVidWc7CisKKyAgICAvLyBJZiBzZXQgdG8gdHJ1ZSwgcmVwbGFjZSB0aGUgYnVpbHQtaW4g
ZnVuY3Rpb24gY2FsbCB3aXRoIGFuIGVtdWxhdGVkIG9uZQorICAgIC8vIHRvIHdvcmsgYXJvdW5k
IGRyaXZlciBidWdzLgorICAgIGJvb2wgdXNlRW11bGF0ZWRGdW5jdGlvbjsKK307CisKKy8vCisv
LyBGb3IgaWYgdGVzdHMuICBTaW1wbGlmaWVkIHNpbmNlIHRoZXJlIGlzIG5vIHN3aXRjaCBzdGF0
ZW1lbnQuCisvLworY2xhc3MgVEludGVybVNlbGVjdGlvbiA6IHB1YmxpYyBUSW50ZXJtVHlwZWQg
eworcHVibGljOgorICAgIFRJbnRlcm1TZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50
ZXJtTm9kZSogdHJ1ZUIsIFRJbnRlcm1Ob2RlKiBmYWxzZUIpIDoKKyAgICAgICAgICAgIFRJbnRl
cm1UeXBlZChUVHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpKSwgY29uZGl0aW9uKGNvbmQpLCB0
cnVlQmxvY2sodHJ1ZUIpLCBmYWxzZUJsb2NrKGZhbHNlQikge30KKyAgICBUSW50ZXJtU2VsZWN0
aW9uKFRJbnRlcm1UeXBlZCogY29uZCwgVEludGVybU5vZGUqIHRydWVCLCBUSW50ZXJtTm9kZSog
ZmFsc2VCLCBjb25zdCBUVHlwZSYgdHlwZSkgOgorICAgICAgICAgICAgVEludGVybVR5cGVkKHR5
cGUpLCBjb25kaXRpb24oY29uZCksIHRydWVCbG9jayh0cnVlQiksIGZhbHNlQmxvY2soZmFsc2VC
KSB7fQorCisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxkTm9kZSgKKyAgICAgICAgVEludGVybU5vZGUgKm9y
aWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFjZW1lbnQpOworCisgICAgLy8gQ29uc2VydmF0aXZl
bHkgYXNzdW1lIHNlbGVjdGlvbnMgaGF2ZSBzaWRlLWVmZmVjdHMKKyAgICB2aXJ0dWFsIGJvb2wg
aGFzU2lkZUVmZmVjdHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBib29sIHVzZXNU
ZXJuYXJ5T3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBnZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lk
OyB9CisgICAgVEludGVybU5vZGUqIGdldENvbmRpdGlvbigpIGNvbnN0IHsgcmV0dXJuIGNvbmRp
dGlvbjsgfQorICAgIFRJbnRlcm1Ob2RlKiBnZXRUcnVlQmxvY2soKSBjb25zdCB7IHJldHVybiB0
cnVlQmxvY2s7IH0KKyAgICBUSW50ZXJtTm9kZSogZ2V0RmFsc2VCbG9jaygpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlQmxvY2s7IH0KKyAgICBUSW50ZXJtU2VsZWN0aW9uKiBnZXRBc1NlbGVjdGlvbk5v
ZGUoKSB7IHJldHVybiB0aGlzOyB9CisKK3Byb3RlY3RlZDoKKyAgICBUSW50ZXJtVHlwZWQqIGNv
bmRpdGlvbjsKKyAgICBUSW50ZXJtTm9kZSogdHJ1ZUJsb2NrOworICAgIFRJbnRlcm1Ob2RlKiBm
YWxzZUJsb2NrOworfTsKKworZW51bSBWaXNpdAoreworICAgIFByZVZpc2l0LAorICAgIEluVmlz
aXQsCisgICAgUG9zdFZpc2l0Cit9OworCisvLworLy8gRm9yIHRyYXZlcnNpbmcgdGhlIHRyZWUu
ICBVc2VyIHNob3VsZCBkZXJpdmUgZnJvbSB0aGlzLCAKKy8vIHB1dCB0aGVpciB0cmF2ZXJzYWwg
c3BlY2lmaWMgZGF0YSBpbiBpdCwgYW5kIHRoZW4gcGFzcworLy8gaXQgdG8gYSBUcmF2ZXJzZSBt
ZXRob2QuCisvLworLy8gV2hlbiB1c2luZyB0aGlzLCBqdXN0IGZpbGwgaW4gdGhlIG1ldGhvZHMg
Zm9yIG5vZGVzIHlvdSB3YW50IHZpc2l0ZWQuCisvLyBSZXR1cm4gZmFsc2UgZnJvbSBhIHByZS12
aXNpdCB0byBza2lwIHZpc2l0aW5nIHRoYXQgbm9kZSdzIHN1YnRyZWUuCisvLworY2xhc3MgVElu
dGVybVRyYXZlcnNlcgoreworcHVibGljOgorICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUo
KTsKKyAgICBUSW50ZXJtVHJhdmVyc2VyKGJvb2wgcHJlVmlzaXQgPSB0cnVlLCBib29sIGluVmlz
aXQgPSBmYWxzZSwgYm9vbCBwb3N0VmlzaXQgPSBmYWxzZSwgYm9vbCByaWdodFRvTGVmdCA9IGZh
bHNlKSA6IAorICAgICAgICAgICAgcHJlVmlzaXQocHJlVmlzaXQpLAorICAgICAgICAgICAgaW5W
aXNpdChpblZpc2l0KSwKKyAgICAgICAgICAgIHBvc3RWaXNpdChwb3N0VmlzaXQpLAorICAgICAg
ICAgICAgcmlnaHRUb0xlZnQocmlnaHRUb0xlZnQpLAorICAgICAgICAgICAgZGVwdGgoMCksCisg
ICAgICAgICAgICBtYXhEZXB0aCgwKSB7fQorICAgIHZpcnR1YWwgflRJbnRlcm1UcmF2ZXJzZXIo
KSB7fQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKSB7fQor
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24q
KSB7fQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJp
bmFyeSopIHtyZXR1cm4gdHJ1ZTt9CisgICAgdmlydHVhbCBib29sIHZpc2l0VW5hcnkoVmlzaXQg
dmlzaXQsIFRJbnRlcm1VbmFyeSopIHtyZXR1cm4gdHJ1ZTt9CisgICAgdmlydHVhbCBib29sIHZp
c2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKikge3JldHVybiB0cnVl
O30KKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1B
Z2dyZWdhdGUqKSB7cmV0dXJuIHRydWU7fQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdExvb3AoVmlz
aXQgdmlzaXQsIFRJbnRlcm1Mb29wKikge3JldHVybiB0cnVlO30KKyAgICB2aXJ0dWFsIGJvb2wg
dmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqKSB7cmV0dXJuIHRydWU7fQor
CisgICAgaW50IGdldE1heERlcHRoKCkgY29uc3Qge3JldHVybiBtYXhEZXB0aDt9CisKKyAgICB2
b2lkIGluY3JlbWVudERlcHRoKFRJbnRlcm1Ob2RlICpjdXJyZW50KQorICAgIHsKKyAgICAgICAg
ZGVwdGgrKzsKKyAgICAgICAgbWF4RGVwdGggPSBzdGQ6Om1heChtYXhEZXB0aCwgZGVwdGgpOwor
ICAgICAgICBwYXRoLnB1c2hfYmFjayhjdXJyZW50KTsKKyAgICB9CisKKyAgICB2b2lkIGRlY3Jl
bWVudERlcHRoKCkKKyAgICB7CisgICAgICAgIGRlcHRoLS07CisgICAgICAgIHBhdGgucG9wX2Jh
Y2soKTsKKyAgICB9CisKKyAgICBUSW50ZXJtTm9kZSAqZ2V0UGFyZW50Tm9kZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gcGF0aC5zaXplKCkgPT0gMCA/IE5VTEwgOiBwYXRoLmJhY2soKTsKKyAg
ICB9CisKKyAgICAvLyBSZXR1cm4gdGhlIG9yaWdpbmFsIG5hbWUgaWYgaGFzaCBmdW5jdGlvbiBw
b2ludGVyIGlzIE5VTEw7CisgICAgLy8gb3RoZXJ3aXNlIHJldHVybiB0aGUgaGFzaGVkIG5hbWUu
CisgICAgc3RhdGljIFRTdHJpbmcgaGFzaChjb25zdCBUU3RyaW5nJiBuYW1lLCBTaEhhc2hGdW5j
dGlvbjY0IGhhc2hGdW5jdGlvbik7CisKKyAgICBjb25zdCBib29sIHByZVZpc2l0OworICAgIGNv
bnN0IGJvb2wgaW5WaXNpdDsKKyAgICBjb25zdCBib29sIHBvc3RWaXNpdDsKKyAgICBjb25zdCBi
b29sIHJpZ2h0VG9MZWZ0OworCitwcm90ZWN0ZWQ6CisgICAgaW50IGRlcHRoOworICAgIGludCBt
YXhEZXB0aDsKKworICAgIC8vIEFsbCB0aGUgbm9kZXMgZnJvbSByb290IHRvIHRoZSBjdXJyZW50
IG5vZGUncyBwYXJlbnQgZHVyaW5nIHRyYXZlcnNpbmcuCisgICAgVFZlY3RvcjxUSW50ZXJtTm9k
ZSAqPiBwYXRoOworfTsKKworI2VuZGlmIC8vIF9fSU5URVJNRURJQVRFX0gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2xvY2FsaW50
ZXJtZWRpYXRlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9sb2NhbGludGVybWVkaWF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1ODJlMDJmNWQ4NTQxZTdjYjMz
NzAzNGUwZTZjOTgyZTFlZjVmNjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9sb2NhbGludGVybWVkaWF0ZS5oCkBAIC0w
LDAgKzEsNTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX0xPQ0FMX0lOVEVSTUVE
SUFURV9JTkNMVURFRF8KKyNkZWZpbmUgX0xPQ0FMX0lOVEVSTUVESUFURV9JTkNMVURFRF8KKwor
I2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TeW1i
b2xUYWJsZS5oIgorCitzdHJ1Y3QgVFZlY3RvckZpZWxkcyB7CisgICAgaW50IG9mZnNldHNbNF07
CisgICAgaW50IG51bTsKK307CisKKy8vCisvLyBTZXQgb2YgaGVscGVyIGZ1bmN0aW9ucyB0byBo
ZWxwIHBhcnNlIGFuZCBidWlsZCB0aGUgdHJlZS4KKy8vCitjbGFzcyBUSW5mb1Npbms7CitjbGFz
cyBUSW50ZXJtZWRpYXRlIHsKK3B1YmxpYzogICAgCisgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RF
TEVURSgpOworICAgIFRJbnRlcm1lZGlhdGUoVEluZm9TaW5rJiBpKSA6IGluZm9TaW5rKGkpIHsg
fQorCisgICAgVEludGVybVN5bWJvbCogYWRkU3ltYm9sKGludCBJZCwgY29uc3QgVFN0cmluZyYs
IGNvbnN0IFRUeXBlJiwgY29uc3QgVFNvdXJjZUxvYyYpOworICAgIFRJbnRlcm1UeXBlZCogYWRk
Q29udmVyc2lvbihUT3BlcmF0b3IsIGNvbnN0IFRUeXBlJiwgVEludGVybVR5cGVkKik7CisgICAg
VEludGVybVR5cGVkKiBhZGRCaW5hcnlNYXRoKFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBs
ZWZ0LCBUSW50ZXJtVHlwZWQqIHJpZ2h0LCBjb25zdCBUU291cmNlTG9jJiwgVFN5bWJvbFRhYmxl
Jik7CisgICAgVEludGVybVR5cGVkKiBhZGRBc3NpZ24oVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlw
ZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmKTsKKyAgICBU
SW50ZXJtVHlwZWQqIGFkZEluZGV4KFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBiYXNlLCBU
SW50ZXJtVHlwZWQqIGluZGV4LCBjb25zdCBUU291cmNlTG9jJik7CisgICAgVEludGVybVR5cGVk
KiBhZGRVbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtTm9kZSogY2hpbGQsIGNvbnN0IFRT
b3VyY2VMb2MmLCBUU3ltYm9sVGFibGUmKTsKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBncm93QWdn
cmVnYXRlKFRJbnRlcm1Ob2RlKiBsZWZ0LCBUSW50ZXJtTm9kZSogcmlnaHQsIGNvbnN0IFRTb3Vy
Y2VMb2MmKTsKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBtYWtlQWdncmVnYXRlKFRJbnRlcm1Ob2Rl
KiBub2RlLCBjb25zdCBUU291cmNlTG9jJik7CisgICAgVEludGVybUFnZ3JlZ2F0ZSogc2V0QWdn
cmVnYXRlT3BlcmF0b3IoVEludGVybU5vZGUqLCBUT3BlcmF0b3IsIGNvbnN0IFRTb3VyY2VMb2Mm
KTsKKyAgICBUSW50ZXJtTm9kZSogIGFkZFNlbGVjdGlvbihUSW50ZXJtVHlwZWQqIGNvbmQsIFRJ
bnRlcm1Ob2RlUGFpciBjb2RlLCBjb25zdCBUU291cmNlTG9jJik7CisgICAgVEludGVybVR5cGVk
KiBhZGRTZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtVHlwZWQqIHRydWVCbG9j
aywgVEludGVybVR5cGVkKiBmYWxzZUJsb2NrLCBjb25zdCBUU291cmNlTG9jJik7CisgICAgVElu
dGVybVR5cGVkKiBhZGRDb21tYShUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmln
aHQsIGNvbnN0IFRTb3VyY2VMb2MmKTsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogYWRkQ29u
c3RhbnRVbmlvbihDb25zdGFudFVuaW9uKiwgY29uc3QgVFR5cGUmLCBjb25zdCBUU291cmNlTG9j
Jik7CisgICAgVEludGVybVR5cGVkKiBwcm9tb3RlQ29uc3RhbnRVbmlvbihUQmFzaWNUeXBlLCBU
SW50ZXJtQ29uc3RhbnRVbmlvbiopIDsKKyAgICBib29sIHBhcnNlQ29uc3RUcmVlKGNvbnN0IFRT
b3VyY2VMb2MmLCBUSW50ZXJtTm9kZSosIENvbnN0YW50VW5pb24qLCBUT3BlcmF0b3IsIFRTeW1i
b2xUYWJsZSYsIFRUeXBlLCBib29sIHNpbmdsZUNvbnN0YW50UGFyYW0gPSBmYWxzZSk7ICAgICAg
ICAKKyAgICBUSW50ZXJtTm9kZSogYWRkTG9vcChUTG9vcFR5cGUsIFRJbnRlcm1Ob2RlKiwgVElu
dGVybVR5cGVkKiwgVEludGVybVR5cGVkKiwgVEludGVybU5vZGUqLCBjb25zdCBUU291cmNlTG9j
Jik7CisgICAgVEludGVybUJyYW5jaCogYWRkQnJhbmNoKFRPcGVyYXRvciwgY29uc3QgVFNvdXJj
ZUxvYyYpOworICAgIFRJbnRlcm1CcmFuY2gqIGFkZEJyYW5jaChUT3BlcmF0b3IsIFRJbnRlcm1U
eXBlZCosIGNvbnN0IFRTb3VyY2VMb2MmKTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZFN3aXp6bGUo
VFZlY3RvckZpZWxkcyYsIGNvbnN0IFRTb3VyY2VMb2MmKTsKKyAgICBib29sIHBvc3RQcm9jZXNz
KFRJbnRlcm1Ob2RlKik7CisgICAgdm9pZCByZW1vdmUoVEludGVybU5vZGUqKTsKKyAgICB2b2lk
IG91dHB1dFRyZWUoVEludGVybU5vZGUqKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIG9wZXJhdG9y
PShUSW50ZXJtZWRpYXRlJik7IC8vIHByZXZlbnQgYXNzaWdubWVudHMKKworICAgIFRJbmZvU2lu
ayYgaW5mb1Npbms7Cit9OworCisjZW5kaWYgLy8gX0xPQ0FMX0lOVEVSTUVESUFURV9JTkNMVURF
RF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL29zaW5jbHVkZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3Ivb3NpbmNsdWRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzMwNjNkNjI0YTg3MjE4NmM0ZTI3
YTgyMjI0NzVhZGQzODhhNzM4MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL29zaW5jbHVkZS5oCkBAIC0wLDAgKzEsNjYg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX19PU0lOQ0xVREVfSAorI2RlZmluZSBf
X09TSU5DTFVERV9ICisKKy8vCisvLyBUaGlzIGZpbGUgY29udGFpbnMgY29udGFpbnMgb3Mtc3Bl
Y2lmaWMgZGF0YXR5cGVzIGFuZAorLy8gZGVjbGFyZXMgYW55IG9zLXNwZWNpZmljIGZ1bmN0aW9u
cy4KKy8vCisKKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfV0lONjQpCisjZGVmaW5l
IEFOR0xFX09TX1dJTgorI2VsaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19saW51
eF9fKSB8fCBcCisgICAgICBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fT3BlbkJT
RF9fKSB8fCBcCisgICAgICBkZWZpbmVkKF9fTmV0QlNEX18pIHx8IGRlZmluZWQoX19EcmFnb25G
bHlfXykgfHwgXAorICAgICAgZGVmaW5lZChfX3N1bikgfHwgZGVmaW5lZChBTkRST0lEKSB8fCBc
CisgICAgICBkZWZpbmVkKF9fR0xJQkNfXykgfHwgZGVmaW5lZChfX0dOVV9fKSB8fCBcCisgICAg
ICBkZWZpbmVkKF9fUU5YX18pCisjZGVmaW5lIEFOR0xFX09TX1BPU0lYCisjZWxzZQorI2Vycm9y
IFVuc3VwcG9ydGVkIHBsYXRmb3JtLgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEFOR0xFX09TX1dJ
TikKKyNkZWZpbmUgU1RSSUNUCisjZGVmaW5lIFZDX0VYVFJBTEVBTiAxCisjaW5jbHVkZSA8d2lu
ZG93cy5oPgorI2VsaWYgZGVmaW5lZChBTkdMRV9PU19QT1NJWCkKKyNpbmNsdWRlIDxwdGhyZWFk
Lmg+CisjaW5jbHVkZSA8c2VtYXBob3JlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZiAg
Ly8gQU5HTEVfT1NfV0lOCisKKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvY29tcGls
ZXJkZWJ1Zy5oIgorCisvLworLy8gVGhyZWFkIExvY2FsIFN0b3JhZ2UgT3BlcmF0aW9ucworLy8K
KyNpZiBkZWZpbmVkKEFOR0xFX09TX1dJTikKK3R5cGVkZWYgRFdPUkQgT1NfVExTSW5kZXg7Cisj
ZGVmaW5lIE9TX0lOVkFMSURfVExTX0lOREVYIChUTFNfT1VUX09GX0lOREVYRVMpCisjZWxpZiBk
ZWZpbmVkKEFOR0xFX09TX1BPU0lYKQordHlwZWRlZiBwdGhyZWFkX2tleV90IE9TX1RMU0luZGV4
OworI2RlZmluZSBPU19JTlZBTElEX1RMU19JTkRFWCAoc3RhdGljX2Nhc3Q8T1NfVExTSW5kZXg+
KC0xKSkKKyNlbmRpZiAgLy8gQU5HTEVfT1NfV0lOCisKK09TX1RMU0luZGV4IE9TX0FsbG9jVExT
SW5kZXgoKTsKK2Jvb2wgT1NfU2V0VExTVmFsdWUoT1NfVExTSW5kZXggbkluZGV4LCB2b2lkICps
cHZWYWx1ZSk7Citib29sIE9TX0ZyZWVUTFNJbmRleChPU19UTFNJbmRleCBuSW5kZXgpOworCitp
bmxpbmUgdm9pZCogT1NfR2V0VExTVmFsdWUoT1NfVExTSW5kZXggbkluZGV4KQoreworICAgIEFT
U0VSVChuSW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpOworI2lmIGRlZmluZWQoQU5HTEVf
T1NfV0lOKQorICAgIHJldHVybiBUbHNHZXRWYWx1ZShuSW5kZXgpOworI2VsaWYgZGVmaW5lZChB
TkdMRV9PU19QT1NJWCkKKyAgICByZXR1cm4gcHRocmVhZF9nZXRzcGVjaWZpYyhuSW5kZXgpOwor
I2VuZGlmICAvLyBBTkdMRV9PU19XSU4KK30KKworI2VuZGlmIC8vIF9fT1NJTkNMVURFX0gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L29zc291cmNlX3Bvc2l4LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL29zc291cmNlX3Bvc2l4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MGEzNzU3NDQ0MWMw
MTM0NmU3MzFlZTcyNTMyMWViMTVlY2UyZGMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Ivb3Nzb3VyY2VfcG9zaXguY3Bw
CkBAIC0wLDAgKzEsNjQgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vCisvLyBUaGlzIGZpbGUg
Y29udGFpbnMgdGhlIHBvc2l4IHNwZWNpZmljIGZ1bmN0aW9ucworLy8KKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL29zaW5jbHVkZS5oIgorCisjaWYgIWRlZmluZWQoQU5HTEVfT1NfUE9T
SVgpCisjZXJyb3IgVHJ5aW5nIHRvIGJ1aWxkIGEgcG9zaXggc3BlY2lmaWMgZmlsZSBpbiBhIG5v
bi1wb3NpeCBidWlsZC4KKyNlbmRpZgorCisvLworLy8gVGhyZWFkIExvY2FsIFN0b3JhZ2UgT3Bl
cmF0aW9ucworLy8KK09TX1RMU0luZGV4IE9TX0FsbG9jVExTSW5kZXgoKQoreworICAgIHB0aHJl
YWRfa2V5X3QgcFBvb2xJbmRleDsKKworICAgIC8vCisgICAgLy8gQ3JlYXRlIGdsb2JhbCBwb29s
IGtleS4KKyAgICAvLworICAgIGlmICgocHRocmVhZF9rZXlfY3JlYXRlKCZwUG9vbEluZGV4LCBO
VUxMKSkgIT0gMCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiT1NfQWxsb2NUTFNJbmRleCgpOiBV
bmFibGUgdG8gYWxsb2NhdGUgVGhyZWFkIExvY2FsIFN0b3JhZ2UiKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0dXJuIHBQb29sSW5kZXg7Cisg
ICAgfQorfQorCisKK2Jvb2wgT1NfU2V0VExTVmFsdWUoT1NfVExTSW5kZXggbkluZGV4LCB2b2lk
ICpscHZWYWx1ZSkKK3sKKyAgICBpZiAobkluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7
CisgICAgICAgIGFzc2VydCgwICYmICJPU19TZXRUTFNWYWx1ZSgpOiBJbnZhbGlkIFRMUyBJbmRl
eCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHB0aHJlYWRfc2V0
c3BlY2lmaWMobkluZGV4LCBscHZWYWx1ZSkgPT0gMCkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7Cit9CisKKworYm9vbCBPU19GcmVlVExTSW5k
ZXgoT1NfVExTSW5kZXggbkluZGV4KQoreworICAgIGlmIChuSW5kZXggPT0gT1NfSU5WQUxJRF9U
TFNfSU5ERVgpIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIk9TX1NldFRMU1ZhbHVlKCk6IEludmFs
aWQgVExTIEluZGV4Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLwor
ICAgIC8vIERlbGV0ZSB0aGUgZ2xvYmFsIHBvb2wga2V5LgorICAgIC8vCisgICAgaWYgKHB0aHJl
YWRfa2V5X2RlbGV0ZShuSW5kZXgpID09IDApCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGVs
c2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Ivb3Nzb3VyY2Vfd2luLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL29zc291cmNlX3dpbi5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMmNjNTg3MWI3MWQzZWVmZDIxNTYxOTM2NWVhYWNkNjI1NTA4Yjg4Mwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL29zc291cmNlX3dpbi5jcHAKQEAgLTAsMCArMSw1NyBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Ivb3NpbmNsdWRlLmgiCisvLwor
Ly8gVGhpcyBmaWxlIGNvbnRhaW5zIGNvbnRhaW5zIHRoZSB3aW5kb3cncyBzcGVjaWZpYyBmdW5j
dGlvbnMKKy8vCisKKyNpZiAhZGVmaW5lZChBTkdMRV9PU19XSU4pCisjZXJyb3IgVHJ5aW5nIHRv
IGJ1aWxkIGEgd2luZG93cyBzcGVjaWZpYyBmaWxlIGluIGEgbm9uIHdpbmRvd3MgYnVpbGQuCisj
ZW5kaWYKKworCisvLworLy8gVGhyZWFkIExvY2FsIFN0b3JhZ2UgT3BlcmF0aW9ucworLy8KK09T
X1RMU0luZGV4IE9TX0FsbG9jVExTSW5kZXgoKQoreworCURXT1JEIGR3SW5kZXggPSBUbHNBbGxv
YygpOworCWlmIChkd0luZGV4ID09IFRMU19PVVRfT0ZfSU5ERVhFUykgeworCQlhc3NlcnQoMCAm
JiAiT1NfQWxsb2NUTFNJbmRleCgpOiBVbmFibGUgdG8gYWxsb2NhdGUgVGhyZWFkIExvY2FsIFN0
b3JhZ2UiKTsKKwkJcmV0dXJuIE9TX0lOVkFMSURfVExTX0lOREVYOworCX0KKworCXJldHVybiBk
d0luZGV4OworfQorCisKK2Jvb2wgT1NfU2V0VExTVmFsdWUoT1NfVExTSW5kZXggbkluZGV4LCB2
b2lkICpscHZWYWx1ZSkKK3sKKwlpZiAobkluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7
CisJCWFzc2VydCgwICYmICJPU19TZXRUTFNWYWx1ZSgpOiBJbnZhbGlkIFRMUyBJbmRleCIpOwor
CQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKFRsc1NldFZhbHVlKG5JbmRleCwgbHB2VmFsdWUp
KQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlCisJCXJldHVybiBmYWxzZTsKK30KKworCitib29sIE9T
X0ZyZWVUTFNJbmRleChPU19UTFNJbmRleCBuSW5kZXgpCit7CisJaWYgKG5JbmRleCA9PSBPU19J
TlZBTElEX1RMU19JTkRFWCkgeworCQlhc3NlcnQoMCAmJiAiT1NfU2V0VExTVmFsdWUoKTogSW52
YWxpZCBUTFMgSW5kZXgiKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChUbHNGcmVlKG5J
bmRleCkpCisJCXJldHVybiB0cnVlOworCWVsc2UKKwkJcmV0dXJuIGZhbHNlOworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvcGFy
c2VDb25zdC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9wYXJzZUNvbnN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNTlmMGJlOWQ4YzAwNmZjOTIyMmM0OThm
MDRlNmJlNGY2NWIxNTc4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvcGFyc2VDb25zdC5jcHAKQEAgLTAsMCArMSwyNDUg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Bh
cnNlQ29udGV4dC5oIgorCisvLworLy8gVXNlIHRoaXMgY2xhc3MgdG8gY2FycnkgYWxvbmcgZGF0
YSBmcm9tIG5vZGUgdG8gbm9kZSBpbiAKKy8vIHRoZSB0cmF2ZXJzYWwKKy8vCitjbGFzcyBUQ29u
c3RUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgVENv
bnN0VHJhdmVyc2VyKENvbnN0YW50VW5pb24qIGNVbmlvbiwgYm9vbCBzaW5nbGVDb25zdFBhcmFt
LCBUT3BlcmF0b3IgY29uc3RydWN0VHlwZSwgVEluZm9TaW5rJiBzaW5rLCBUU3ltYm9sVGFibGUm
IHN5bVRhYmxlLCBUVHlwZSYgdCkKKyAgICAgICAgOiBlcnJvcihmYWxzZSksCisgICAgICAgICAg
aW5kZXgoMCksCisgICAgICAgICAgdW5pb25BcnJheShjVW5pb24pLAorICAgICAgICAgIHR5cGUo
dCksCisgICAgICAgICAgY29uc3RydWN0b3JUeXBlKGNvbnN0cnVjdFR5cGUpLAorICAgICAgICAg
IHNpbmdsZUNvbnN0YW50UGFyYW0oc2luZ2xlQ29uc3RQYXJhbSksCisgICAgICAgICAgaW5mb1Np
bmsoc2luayksCisgICAgICAgICAgc3ltYm9sVGFibGUoc3ltVGFibGUpLAorICAgICAgICAgIHNp
emUoMCksCisgICAgICAgICAgaXNNYXRyaXgoZmFsc2UpLAorICAgICAgICAgIG1hdHJpeFNpemUo
MCkgeworICAgIH0KKworICAgIGJvb2wgZXJyb3I7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHZp
c2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKKyAgICB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihU
SW50ZXJtQ29uc3RhbnRVbmlvbiopOworICAgIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQs
IFRJbnRlcm1CaW5hcnkqKTsKKyAgICBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRl
cm1VbmFyeSopOworICAgIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1T
ZWxlY3Rpb24qKTsKKyAgICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJt
QWdncmVnYXRlKik7CisgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29w
Kik7CisgICAgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCopOwor
CisgICAgc2l6ZV90IGluZGV4OworICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXk7CisgICAg
VFR5cGUgdHlwZTsKKyAgICBUT3BlcmF0b3IgY29uc3RydWN0b3JUeXBlOworICAgIGJvb2wgc2lu
Z2xlQ29uc3RhbnRQYXJhbTsKKyAgICBUSW5mb1NpbmsmIGluZm9TaW5rOworICAgIFRTeW1ib2xU
YWJsZSYgc3ltYm9sVGFibGU7CisgICAgc2l6ZV90IHNpemU7IC8vIHNpemUgb2YgdGhlIGNvbnN0
cnVjdG9yICggNCBmb3IgdmVjNCkKKyAgICBib29sIGlzTWF0cml4OworICAgIHNpemVfdCBtYXRy
aXhTaXplOyAvLyBkaW1lbnNpb24gb2YgdGhlIG1hdHJpeCAobm9taW5hbCBzaXplIGFuZCBub3Qg
dGhlIGluc3RhbmNlIHNpemUpCit9OworCisvLworLy8gVGhlIHJlc3Qgb2YgdGhlIGZpbGUgYXJl
IHRoZSB0cmF2ZXJzYWwgZnVuY3Rpb25zLiAgVGhlIGxhc3Qgb25lCisvLyBpcyB0aGUgb25lIHRo
YXQgc3RhcnRzIHRoZSB0cmF2ZXJzYWwuCisvLworLy8gUmV0dXJuIHRydWUgZnJvbSBpbnRlcmlv
ciBub2RlcyB0byBoYXZlIHRoZSBleHRlcm5hbCB0cmF2ZXJzYWwKKy8vIGNvbnRpbnVlIG9uIHRv
IGNoaWxkcmVuLiAgSWYgeW91IHByb2Nlc3MgY2hpbGRyZW4geW91cnNlbGYsCisvLyByZXR1cm4g
ZmFsc2UuCisvLworCit2b2lkIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRTeW1ib2woVEludGVybVN5
bWJvbCogbm9kZSkKK3sKKyAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFs
RXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIlN5bWJvbCBOb2RlIGZvdW5kIGluIGNvbnN0YW50IGNv
bnN0cnVjdG9yIik7CisgICAgcmV0dXJuOworCit9CisKK2Jvb2wgVENvbnN0VHJhdmVyc2VyOjp2
aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSogbm9kZSkKK3sKKyAgICBUUXVh
bGlmaWVyIHF1YWxpZmllciA9IG5vZGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKTsKKyAgICAK
KyAgICBpZiAocXVhbGlmaWVyICE9IEV2cUNvbnN0KSB7CisgICAgICAgIFRTdHJpbmcgYnVmOwor
ICAgICAgICBidWYuYXBwZW5kKCInY29uc3RydWN0b3InIDogYXNzaWduaW5nIG5vbi1jb25zdGFu
dCB0byAiKTsKKyAgICAgICAgYnVmLmFwcGVuZCh0eXBlLmdldENvbXBsZXRlU3RyaW5nKCkpOwor
ICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEVycm9yLCBub2RlLT5nZXRMaW5l
KCksIGJ1Zi5jX3N0cigpKTsKKyAgICAgICAgZXJyb3IgPSB0cnVlOworICAgICAgICByZXR1cm4g
ZmFsc2U7ICAKKyAgICB9CisKKyAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJu
YWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQmluYXJ5IE5vZGUgZm91bmQgaW4gY29uc3RhbnQg
Y29uc3RydWN0b3IiKTsKKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVENvbnN0
VHJhdmVyc2VyOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUpCit7
CisgICAgVFN0cmluZyBidWY7CisgICAgYnVmLmFwcGVuZCgiJ2NvbnN0cnVjdG9yJyA6IGFzc2ln
bmluZyBub24tY29uc3RhbnQgdG8gIik7CisgICAgYnVmLmFwcGVuZCh0eXBlLmdldENvbXBsZXRl
U3RyaW5nKCkpOworICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4RXJyb3IsIG5vZGUt
PmdldExpbmUoKSwgYnVmLmNfc3RyKCkpOworICAgIGVycm9yID0gdHJ1ZTsKKyAgICByZXR1cm4g
ZmFsc2U7ICAKK30KKworYm9vbCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0QWdncmVnYXRlKFZpc2l0
IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQoreworICAgIGlmICghbm9kZS0+aXNDb25z
dHJ1Y3RvcigpICYmIG5vZGUtPmdldE9wKCkgIT0gRU9wQ29tbWEpIHsKKyAgICAgICAgVFN0cmlu
ZyBidWY7CisgICAgICAgIGJ1Zi5hcHBlbmQoIidjb25zdHJ1Y3RvcicgOiBhc3NpZ25pbmcgbm9u
LWNvbnN0YW50IHRvICIpOworICAgICAgICBidWYuYXBwZW5kKHR5cGUuZ2V0Q29tcGxldGVTdHJp
bmcoKSk7CisgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4RXJyb3IsIG5vZGUt
PmdldExpbmUoKSwgYnVmLmNfc3RyKCkpOworICAgICAgICBlcnJvciA9IHRydWU7CisgICAgICAg
IHJldHVybiBmYWxzZTsgIAorICAgIH0KKworICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNp
emUoKSA9PSAwKSB7CisgICAgICAgIGVycm9yID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGJvb2wgZmxhZyA9IG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09
IDEgJiYgbm9kZS0+Z2V0U2VxdWVuY2UoKVswXS0+Z2V0QXNUeXBlZCgpLT5nZXRBc0NvbnN0YW50
VW5pb24oKTsKKyAgICBpZiAoZmxhZykgCisgICAgeworICAgICAgICBzaW5nbGVDb25zdGFudFBh
cmFtID0gdHJ1ZTsgCisgICAgICAgIGNvbnN0cnVjdG9yVHlwZSA9IG5vZGUtPmdldE9wKCk7Cisg
ICAgICAgIHNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOworCisgICAgICAg
IGlmIChub2RlLT5nZXRUeXBlKCkuaXNNYXRyaXgoKSkgeworICAgICAgICAgICAgaXNNYXRyaXgg
PSB0cnVlOworICAgICAgICAgICAgbWF0cml4U2l6ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXROb21p
bmFsU2l6ZSgpOworICAgICAgICB9CisgICAgfSAgICAgICAKKworICAgIGZvciAoVEludGVybVNl
cXVlbmNlOjppdGVyYXRvciBwID0gbm9kZS0+Z2V0U2VxdWVuY2UoKS5iZWdpbigpOyAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCAhPSBub2RlLT5nZXRTZXF1ZW5jZSgpLmVu
ZCgpOyBwKyspIHsKKworICAgICAgICBpZiAobm9kZS0+Z2V0T3AoKSA9PSBFT3BDb21tYSkKKyAg
ICAgICAgICAgIGluZGV4ID0gMDsgICAgICAgICAgIAorCisgICAgICAgICgqcCktPnRyYXZlcnNl
KHRoaXMpOworICAgIH0gICAKKyAgICBpZiAoZmxhZykgCisgICAgeworICAgICAgICBzaW5nbGVD
b25zdGFudFBhcmFtID0gZmFsc2U7ICAgCisgICAgICAgIGNvbnN0cnVjdG9yVHlwZSA9IEVPcE51
bGw7CisgICAgICAgIHNpemUgPSAwOworICAgICAgICBpc01hdHJpeCA9IGZhbHNlOworICAgICAg
ICBtYXRyaXhTaXplID0gMDsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRD
b25zdFRyYXZlcnNlcjo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rp
b24qIG5vZGUpCit7CisgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVy
cm9yLCBub2RlLT5nZXRMaW5lKCksICJTZWxlY3Rpb24gTm9kZSBmb3VuZCBpbiBjb25zdGFudCBj
b25zdHJ1Y3RvciIpOworICAgIGVycm9yID0gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgVENvbnN0VHJhdmVyc2VyOjp2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50
VW5pb24qIG5vZGUpCit7CisgICAgaWYgKCFub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpKQor
ICAgIHsKKyAgICAgICAgLy8gVGhlIGNvbnN0YW50IHdhcyBub3QgaW5pdGlhbGl6ZWQsIHRoaXMg
c2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIGxvZ2dlZAorICAgICAgICBhc3NlcnQoaW5mb1Npbmsu
aW5mby5zaXplKCkgIT0gMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDb25zdGFu
dFVuaW9uKiBsZWZ0VW5pb25BcnJheSA9IHVuaW9uQXJyYXk7CisgICAgc2l6ZV90IGluc3RhbmNl
U2l6ZSA9IHR5cGUuZ2V0T2JqZWN0U2l6ZSgpOworCisgICAgaWYgKGluZGV4ID49IGluc3RhbmNl
U2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFzaW5nbGVDb25zdGFudFBhcmFtKSB7
CisgICAgICAgIHNpemVfdCBzaXplID0gbm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsK
KyAgICAKKyAgICAgICAgQ29uc3RhbnRVbmlvbiAqcmlnaHRVbmlvbkFycmF5ID0gbm9kZS0+Z2V0
VW5pb25BcnJheVBvaW50ZXIoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXpl
OyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBpbnN0YW5jZVNpemUpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaW5kZXhdID0gcmln
aHRVbmlvbkFycmF5W2ldOworCisgICAgICAgICAgICAoaW5kZXgpKys7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBzaXplX3QgdG90YWxTaXplID0gaW5kZXggKyBzaXplOworICAg
ICAgICBDb25zdGFudFVuaW9uICpyaWdodFVuaW9uQXJyYXkgPSBub2RlLT5nZXRVbmlvbkFycmF5
UG9pbnRlcigpOworICAgICAgICBpZiAoIWlzTWF0cml4KSB7CisgICAgICAgICAgICBzaXplX3Qg
Y291bnQgPSAwOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGluZGV4OyBpIDwgdG90YWxT
aXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoaSA+PSBpbnN0YW5jZVNpemUpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5
W2ldID0gcmlnaHRVbmlvbkFycmF5W2NvdW50XTsKKworICAgICAgICAgICAgICAgIChpbmRleCkr
KzsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0VHlwZSgp
LmdldE9iamVjdFNpemUoKSA+IDEpCisgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7ICAvLyBmb3IgbWF0cml4IGNvbnN0cnVjdG9ycwor
ICAgICAgICAgICAgc2l6ZV90IGNvdW50ID0gMDsKKyAgICAgICAgICAgIHNpemVfdCBlbGVtZW50
ID0gaW5kZXg7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gaW5kZXg7IGkgPCB0b3RhbFNp
emU7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChpID49IGluc3RhbmNlU2l6ZSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmIChlbGVtZW50IC0gaSA9
PSAwIHx8IChpIC0gZWxlbWVudCkgJSAobWF0cml4U2l6ZSArIDEpID09IDAgKQorICAgICAgICAg
ICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXSA9IHJpZ2h0VW5pb25BcnJheVtjb3VudF07Cisg
ICAgICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlb
aV0uc2V0RkNvbnN0KDAuMGYpOworCisgICAgICAgICAgICAgICAgKGluZGV4KSsrOworCisgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCkgPiAxKQorICAg
ICAgICAgICAgICAgICAgICBjb3VudCsrOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0TG9vcChW
aXNpdCB2aXNpdCwgVEludGVybUxvb3AqIG5vZGUpCit7CisgICAgaW5mb1NpbmsuaW5mby5tZXNz
YWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRMaW5lKCksICJMb29wIE5vZGUgZm91
bmQgaW4gY29uc3RhbnQgY29uc3RydWN0b3IiKTsKKyAgICBlcnJvciA9IHRydWU7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRCcmFuY2goVmlzaXQg
dmlzaXQsIFRJbnRlcm1CcmFuY2gqIG5vZGUpCit7CisgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdl
KEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRMaW5lKCksICJCcmFuY2ggTm9kZSBmb3Vu
ZCBpbiBjb25zdGFudCBjb25zdHJ1Y3RvciIpOworICAgIGVycm9yID0gdHJ1ZTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKKy8vCisvLyBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBvbmUgdG8gY2FsbCBl
eHRlcm5hbGx5IHRvIHN0YXJ0IHRoZSB0cmF2ZXJzYWwuCisvLyBJbmRpdmlkdWFsIGZ1bmN0aW9u
cyBjYW4gYmUgaW5pdGlhbGl6ZWQgdG8gMCB0byBza2lwIHByb2Nlc3Npbmcgb2YgdGhhdAorLy8g
dHlwZSBvZiBub2RlLiAgSXQncyBjaGlsZHJlbiB3aWxsIHN0aWxsIGJlIHByb2Nlc3NlZC4KKy8v
Citib29sIFRJbnRlcm1lZGlhdGU6OnBhcnNlQ29uc3RUcmVlKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIFRJbnRlcm1Ob2RlKiByb290LCBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5LCBUT3BlcmF0
b3IgY29uc3RydWN0b3JUeXBlLCBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBUVHlwZSB0LCBi
b29sIHNpbmdsZUNvbnN0YW50UGFyYW0pCit7CisgICAgaWYgKHJvb3QgPT0gMCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgVENvbnN0VHJhdmVyc2VyIGl0KHVuaW9uQXJyYXksIHNpbmds
ZUNvbnN0YW50UGFyYW0sIGNvbnN0cnVjdG9yVHlwZSwgaW5mb1NpbmssIHN5bWJvbFRhYmxlLCB0
KTsKKworICAgIHJvb3QtPnRyYXZlcnNlKCZpdCk7CisgICAgaWYgKGl0LmVycm9yKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBmYWxzZTsKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3Rp
bWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hh
ZGVyVGltaW5nLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOWYzZjQ5ZWYzOGVkOTljZWI1MGE3ODk3MzJhMDgz
MTE4NjU0OWRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcu
Y3BwCkBAIC0wLDAgKzEsMTI3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Bh
cnNlQ29udGV4dC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVw
ZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90aW1p
bmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIgorCitSZXN0cmljdEZyYWdtZW50U2hh
ZGVyVGltaW5nOjpSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nKFRJbmZvU2lua0Jhc2UmIHNp
bmspCisgICAgOiBtU2luayhzaW5rKQorICAgICwgbU51bUVycm9ycygwKQoreworICAgIC8vIFNh
bXBsaW5nIG9wcyBmb3VuZCBvbmx5IGluIGZyYWdtZW50IHNoYWRlcnMuCisgICAgbVNhbXBsaW5n
T3BzLmluc2VydCgidGV4dHVyZTJEKHMyMTt2ZjI7ZjE7Iik7CisgICAgbVNhbXBsaW5nT3BzLmlu
c2VydCgidGV4dHVyZTJEUHJvaihzMjE7dmYzO2YxOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNl
cnQoInRleHR1cmUyRFByb2ooczIxO3ZmNDtmMTsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0
KCJ0ZXh0dXJlQ3ViZShzQzE7dmYzO2YxOyIpOworICAgIC8vIFNhbXBsaW5nIG9wcyBmb3VuZCBp
biBib3RoIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycy4KKyAgICBtU2FtcGxpbmdPcHMuaW5z
ZXJ0KCJ0ZXh0dXJlMkQoczIxO3ZmMjsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0
dXJlMkRQcm9qKHMyMTt2ZjM7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJE
UHJvaihzMjE7dmY0OyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmVDdWJlKHND
MTt2ZjM7Iik7CisgICAgLy8gU2FtcGxpbmcgb3BzIHByb3ZpZGVkIGJ5IE9FU19FR0xfaW1hZ2Vf
ZXh0ZXJuYWwuCisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEKDE7dmYyOyIpOwor
ICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFByb2ooMTt2ZjM7Iik7CisgICAgbVNh
bXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUHJvaigxO3ZmNDsiKTsKKyAgICAvLyBTYW1wbGlu
ZyBvcHMgcHJvdmlkZWQgYnkgQVJCX3RleHR1cmVfcmVjdGFuZ2xlLgorICAgIG1TYW1wbGluZ09w
cy5pbnNlcnQoInRleHR1cmUyRFJlY3QoMTt2ZjI7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2Vy
dCgidGV4dHVyZTJEUmVjdFByb2ooMTt2ZjM7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgi
dGV4dHVyZTJEUmVjdFByb2ooMTt2ZjQ7Iik7Cit9CisKKy8vIEZJWE1FKG12dWpvdmljKTogV2Ug
ZG8gbm90IGtub3cgaWYgdGhlIGV4ZWN1dGlvbiB0aW1lIG9mIGJ1aWx0LWluIG9wZXJhdGlvbnMg
bGlrZSBzaW4sIHBvdywgZXRjLgorLy8gY2FuIHZhcnkgYmFzZWQgb24gdGhlIHZhbHVlIG9mIHRo
ZSBpbnB1dCBhcmd1bWVudHMuIElmIHNvLCB3ZSBzaG91bGQgcmVzdHJpY3QgdGhvc2UgYXMgd2Vs
bC4KK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6ZW5mb3JjZVJlc3RyaWN0aW9u
cyhjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCkKK3sKKyAgICBtTnVtRXJyb3JzID0gMDsK
KworICAgIC8vIEZJWE1FKG12dWpvdmljKTogVGhlIGRlcGVuZGVuY3kgZ3JhcGggZG9lcyBub3Qg
c3VwcG9ydCB1c2VyIGRlZmluZWQgZnVuY3Rpb24gY2FsbHMgcmlnaHQgbm93LAorICAgIC8vIHNv
IHdlIGdlbmVyYXRlIGVycm9ycyBmb3IgdGhlbS4KKyAgICB2YWxpZGF0ZVVzZXJEZWZpbmVkRnVu
Y3Rpb25DYWxsVXNhZ2UoZ3JhcGgpOworCisgICAgLy8gU3RhcnRpbmcgZnJvbSBlYWNoIHNhbXBs
ZXIsIHRyYXZlcnNlIHRoZSBkZXBlbmRlbmN5IGdyYXBoIGFuZCBnZW5lcmF0ZSBhbiBlcnJvciBl
YWNoIHRpbWUgd2UKKyAgICAvLyBoaXQgYSBub2RlIHdoZXJlIHNhbXBsZXIgZGVwZW5kZW50IHZh
bHVlcyBhcmUgbm90IGFsbG93ZWQuCisgICAgZm9yIChUR3JhcGhTeW1ib2xWZWN0b3I6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBncmFwaC5iZWdpblNhbXBsZXJTeW1ib2xzKCk7CisgICAgICAgICBp
dGVyICE9IGdyYXBoLmVuZFNhbXBsZXJTeW1ib2xzKCk7CisgICAgICAgICArK2l0ZXIpCisgICAg
eworICAgICAgICBUR3JhcGhTeW1ib2wqIHNhbXBsZXJTeW1ib2wgPSAqaXRlcjsKKyAgICAgICAg
Y2xlYXJWaXNpdGVkKCk7CisgICAgICAgIHNhbXBsZXJTeW1ib2wtPnRyYXZlcnNlKHRoaXMpOwor
ICAgIH0KK30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2YWxpZGF0ZVVz
ZXJEZWZpbmVkRnVuY3Rpb25DYWxsVXNhZ2UoY29uc3QgVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgp
Cit7CisgICAgZm9yIChURnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0g
Z3JhcGguYmVnaW5Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMoKTsKKyAgICAgICAgIGl0ZXIgIT0g
Z3JhcGguZW5kVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKCk7CisgICAgICAgICArK2l0ZXIpCisg
ICAgeworICAgICAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCA9ICppdGVyOwor
ICAgICAgICBiZWdpbkVycm9yKGZ1bmN0aW9uQ2FsbC0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkp
OworICAgICAgICBtU2luayA8PCAiQSBjYWxsIHRvIGEgdXNlciBkZWZpbmVkIGZ1bmN0aW9uIGlz
IG5vdCBwZXJtaXR0ZWQuXG4iOworICAgIH0KK30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hh
ZGVyVGltaW5nOjpiZWdpbkVycm9yKGNvbnN0IFRJbnRlcm1Ob2RlKiBub2RlKQoreworICAgICsr
bU51bUVycm9yczsKKyAgICBtU2luay5wcmVmaXgoRVByZWZpeEVycm9yKTsKKyAgICBtU2luay5s
b2NhdGlvbihub2RlLT5nZXRMaW5lKCkpOworfQorCitib29sIFJlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmc6OmlzU2FtcGxpbmdPcChjb25zdCBUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5j
dGlvbkNhbGwpIGNvbnN0Cit7CisgICAgcmV0dXJuICFpbnRlcm1GdW5jdGlvbkNhbGwtPmlzVXNl
ckRlZmluZWQoKSAmJgorICAgICAgICAgICBtU2FtcGxpbmdPcHMuZmluZChpbnRlcm1GdW5jdGlv
bkNhbGwtPmdldE5hbWUoKSkgIT0gbVNhbXBsaW5nT3BzLmVuZCgpOworfQorCit2b2lkIFJlc3Ry
aWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBh
cmFtZXRlcikKK3sKKyAgICAvLyBUZXh0dXJlIGNhY2hlIGFjY2VzcyB0aW1lIG1pZ2h0IGxlYWsg
c2Vuc2l0aXZlIGluZm9ybWF0aW9uLgorICAgIC8vIFRodXMsIHdlIHJlc3RyaWN0IHNhbXBsZXIg
ZGVwZW5kZW50IHZhbHVlcyBmcm9tIGFmZmVjdGluZyB0aGUgY29vcmRpbmF0ZSBvciBMT0QgYmlh
cyBvZiBhCisgICAgLy8gc2FtcGxpbmcgb3BlcmF0aW9uLgorICAgIGlmIChpc1NhbXBsaW5nT3Ao
cGFyYW1ldGVyLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKSkpIHsKKyAgICAgICAgc3dpdGNoIChw
YXJhbWV0ZXItPmdldEFyZ3VtZW50TnVtYmVyKCkpIHsKKyAgICAgICAgICAgIGNhc2UgMToKKyAg
ICAgICAgICAgICAgICAvLyBTZWNvbmQgYXJndW1lbnQgKGNvb3JkKQorICAgICAgICAgICAgICAg
IGJlZ2luRXJyb3IocGFyYW1ldGVyLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKSk7CisgICAgICAg
ICAgICAgICAgbVNpbmsgPDwgIkFuIGV4cHJlc3Npb24gZGVwZW5kZW50IG9uIGEgc2FtcGxlciBp
cyBub3QgcGVybWl0dGVkIHRvIGJlIHRoZSIKKyAgICAgICAgICAgICAgICAgICAgICA8PCAiIGNv
b3JkaW5hdGUgYXJndW1lbnQgb2YgYSBzYW1wbGluZyBvcGVyYXRpb24uXG4iOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIC8vIFRo
aXJkIGFyZ3VtZW50IChiaWFzKQorICAgICAgICAgICAgICAgIGJlZ2luRXJyb3IocGFyYW1ldGVy
LT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKSk7CisgICAgICAgICAgICAgICAgbVNpbmsgPDwgIkFu
IGV4cHJlc3Npb24gZGVwZW5kZW50IG9uIGEgc2FtcGxlciBpcyBub3QgcGVybWl0dGVkIHRvIGJl
IHRoZSIKKyAgICAgICAgICAgICAgICAgICAgICA8PCAiIGJpYXMgYXJndW1lbnQgb2YgYSBzYW1w
bGluZyBvcGVyYXRpb24uXG4iOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAvLyBGaXJzdCBhcmd1bWVudCAoc2FtcGxlcikKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBSZXN0cmlj
dEZyYWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdFNlbGVjdGlvbihUR3JhcGhTZWxlY3Rpb24qIHNl
bGVjdGlvbikKK3sKKyAgICBiZWdpbkVycm9yKHNlbGVjdGlvbi0+Z2V0SW50ZXJtU2VsZWN0aW9u
KCkpOworICAgIG1TaW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIg
aXMgbm90IHBlcm1pdHRlZCBpbiBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudC5cbiI7Cit9CisKK3Zv
aWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRMb29wKFRHcmFwaExvb3AqIGxv
b3ApCit7CisgICAgYmVnaW5FcnJvcihsb29wLT5nZXRJbnRlcm1Mb29wKCkpOworICAgIG1TaW5r
IDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1pdHRl
ZCBpbiBhIGxvb3AgY29uZGl0aW9uLlxuIjsKK30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hh
ZGVyVGltaW5nOjp2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCkKK3sK
KyAgICBiZWdpbkVycm9yKGxvZ2ljYWxPcC0+Z2V0SW50ZXJtTG9naWNhbE9wKCkpOworICAgIG1T
aW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1p
dHRlZCBvbiB0aGUgbGVmdCBoYW5kIHNpZGUgb2YgYSBsb2dpY2FsICIKKyAgICAgICAgICA8PCBs
b2dpY2FsT3AtPmdldE9wU3RyaW5nKCkKKyAgICAgICAgICA8PCAiIG9wZXJhdG9yLlxuIjsKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMyM2NiNjJkOGEzODZlMjVhZTAwNTBhZTQyZTkx
MzRjODA1NzYxOGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWlu
Zy5oCkBAIC0wLDAgKzEsNDAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RJ
TUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCisjZGVmaW5lIENPTVBJTEVS
X1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCisKKyNpbmNsdWRlICJH
TFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50
ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBl
bmRlbmN5R3JhcGguaCIKKworY2xhc3MgVEluZm9TaW5rQmFzZTsKKworY2xhc3MgUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZyA6IFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIgeworcHVibGlj
OgorICAgIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcoVEluZm9TaW5rQmFzZSYgc2luayk7
CisgICAgdm9pZCBlbmZvcmNlUmVzdHJpY3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdy
YXBoKTsKKyAgICBpbnQgbnVtRXJyb3JzKCkgY29uc3QgeyByZXR1cm4gbU51bUVycm9yczsgfQor
CisgICAgdmlydHVhbCB2b2lkIHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFtZXRl
cik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2Vs
ZWN0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3ApOwor
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxP
cCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBiZWdpbkVycm9yKGNvbnN0IFRJbnRlcm1Ob2RlKiBu
b2RlKTsKKyAgICB2b2lkIHZhbGlkYXRlVXNlckRlZmluZWRGdW5jdGlvbkNhbGxVc2FnZShjb25z
dCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCk7CisgICAgYm9vbCBpc1NhbXBsaW5nT3AoY29uc3Qg
VEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKSBjb25zdDsKKworICAgIFRJbmZv
U2lua0Jhc2UmIG1TaW5rOworICAgIGludCBtTnVtRXJyb3JzOworCisgICAgdHlwZWRlZiBzdGQ6
OnNldDxUU3RyaW5nPiBTdHJpbmdTZXQ7CisgICAgU3RyaW5nU2V0IG1TYW1wbGluZ09wczsKK307
CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX0ZSQUdNRU5UX1NIQURFUl9U
SU1JTkdfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVlNzhjMzU0NTAxN2JkYzFlOGU5
OThmMTkxODJmNjEzOWZjMWE2ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFk
ZXJUaW1pbmcuY3BwCkBAIC0wLDAgKzEsMTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCIK
Kwordm9pZCBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZzo6dmlzaXRTeW1ib2woVEludGVybVN5
bWJvbCogbm9kZSkKK3sKKyAgICBpZiAoSXNTYW1wbGVyKG5vZGUtPmdldEJhc2ljVHlwZSgpKSkg
eworICAgICAgICArK21OdW1FcnJvcnM7CisgICAgICAgIG1TaW5rLm1lc3NhZ2UoRVByZWZpeEVy
cm9yLAorICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmdldExpbmUoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAiU2FtcGxlcnMgYXJlIG5vdCBwZXJtaXR0ZWQgaW4gdmVydGV4IHNoYWRlcnMi
KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0
cmljdFZlcnRleFNoYWRlclRpbWluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVmMGRkMzE5N2EyMzk3YmNiMTIz
OTU1ODc5YzE4NDQ1M2ZkNjI4ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFk
ZXJUaW1pbmcuaApAQCAtMCwwICsxLDMzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01Q
SUxFUl9USU1JTkdfUkVTVFJJQ1RfVkVSVEVYX1NIQURFUl9USU1JTkdfSF8KKyNkZWZpbmUgQ09N
UElMRVJfVElNSU5HX1JFU1RSSUNUX1ZFUlRFWF9TSEFERVJfVElNSU5HX0hfCisKKyNpbmNsdWRl
ICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
aW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5o
IgorCitjbGFzcyBUSW5mb1NpbmtCYXNlOworCitjbGFzcyBSZXN0cmljdFZlcnRleFNoYWRlclRp
bWluZyA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBSZXN0cmljdFZl
cnRleFNoYWRlclRpbWluZyhUSW5mb1NpbmtCYXNlJiBzaW5rKQorICAgICAgICA6IFRJbnRlcm1U
cmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIGZhbHNlKQorICAgICAgICAsIG1TaW5rKHNpbmspCisgICAg
ICAgICwgbU51bUVycm9ycygwKSB7fQorCisgICAgdm9pZCBlbmZvcmNlUmVzdHJpY3Rpb25zKFRJ
bnRlcm1Ob2RlKiByb290KSB7IHJvb3QtPnRyYXZlcnNlKHRoaXMpOyB9CisgICAgaW50IG51bUVy
cm9ycygpIHsgcmV0dXJuIG1OdW1FcnJvcnM7IH0KKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5
bWJvbChUSW50ZXJtU3ltYm9sKik7Citwcml2YXRlOgorICAgIFRJbmZvU2lua0Jhc2UmIG1TaW5r
OworICAgIGludCBtTnVtRXJyb3JzOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9USU1JTkdf
UkVTVFJJQ1RfVkVSVEVYX1NIQURFUl9USU1JTkdfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3V0aWwuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMDc3YmRjYzQ4Yjg2N2U0MTNlMGRlOTM3ZTQ4NzQ2NDg1NGM0ZGI0YwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3V0
aWwuY3BwCkBAIC0wLDAgKzEsMjggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci91dGlsLmgiCisKKyNpbmNsdWRlIDxsaW1pdHM+CisKKyNpbmNsdWRlICJj
b21waWxlci9wcmVwcm9jZXNzb3IvbnVtZXJpY19sZXguaCIKKworYm9vbCBhdG9mX2NsYW1wKGNv
bnN0IGNoYXIgKnN0ciwgZmxvYXQgKnZhbHVlKQoreworICAgIGJvb2wgc3VjY2VzcyA9IHBwOjpu
dW1lcmljX2xleF9mbG9hdChzdHIsIHZhbHVlKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAg
ICp2YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKTsKKyAgICByZXR1cm4g
c3VjY2VzczsKK30KKworYm9vbCBhdG9pX2NsYW1wKGNvbnN0IGNoYXIgKnN0ciwgaW50ICp2YWx1
ZSkKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSBwcDo6bnVtZXJpY19sZXhfaW50KHN0ciwgdmFsdWUp
OworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgKnZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ+OjptYXgoKTsKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmRjNjlmMzkwNjBkMjA1MWYzYTIwMDY1OTVmMzA2MDBmZWMyZTdmNzcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci91dGlsLmgKQEAgLTAsMCArMSwyMCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBD
T01QSUxFUl9VVElMX0gKKyNkZWZpbmUgQ09NUElMRVJfVVRJTF9ICisKKy8vIGF0b2ZfY2xhbXAg
aXMgbGlrZSBhdG9mIGJ1dAorLy8gICAxLiBpdCBmb3JjZXMgQyBsb2NhbGUsIGkuZS4gZm9yY2lu
ZyAnLicgYXMgZGVjaW1hbCBwb2ludC4KKy8vICAgMi4gaXQgY2xhbXBzIHRoZSB2YWx1ZSB0byAt
RkxUX01BWCBvciBGTFRfTUFYIGlmIG92ZXJmbG93IGhhcHBlbnMuCisvLyBSZXR1cm4gZmFsc2Ug
aWYgb3ZlcmZsb3cgaGFwcGVucy4KK2V4dGVybiBib29sIGF0b2ZfY2xhbXAoY29uc3QgY2hhciAq
c3RyLCBmbG9hdCAqdmFsdWUpOworCisvLyBJZiBvdmVyZmxvdyBoYXBwZW5zLCBjbGFtcCB0aGUg
dmFsdWUgdG8gSU5UX01JTiBvciBJTlRfTUFYLgorLy8gUmV0dXJuIGZhbHNlIGlmIG92ZXJmbG93
IGhhcHBlbnMuCitleHRlcm4gYm9vbCBhdG9pX2NsYW1wKGNvbnN0IGNoYXIgKnN0ciwgaW50ICp2
YWx1ZSk7CisKKyNlbmRpZiAvLyBDT01QSUxFUl9VVElMX0gKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci91dGlsLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci91dGlsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZDZlNWVlZWQ5MWY4ZjVhNTkyZTUzMjczZjA5YTg3OGY1NGI4NjBlZi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdXRpbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL3V0aWwuaCIKLQotI2luY2x1ZGUgPGxp
bWl0cz4KLQotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9udW1lcmljX2xleC5oIgot
Ci1ib29sIGF0b2ZfY2xhbXAoY29uc3QgY2hhciAqc3RyLCBmbG9hdCAqdmFsdWUpCi17Ci0gICAg
Ym9vbCBzdWNjZXNzID0gcHA6Om51bWVyaWNfbGV4X2Zsb2F0KHN0ciwgdmFsdWUpOwotICAgIGlm
ICghc3VjY2VzcykKLSAgICAgICAgKnZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46
Om1heCgpOwotICAgIHJldHVybiBzdWNjZXNzOwotfQotCi1ib29sIGF0b2lfY2xhbXAoY29uc3Qg
Y2hhciAqc3RyLCBpbnQgKnZhbHVlKQotewotICAgIGJvb2wgc3VjY2VzcyA9IHBwOjpudW1lcmlj
X2xleF9pbnQoc3RyLCB2YWx1ZSk7Ci0gICAgaWYgKCFzdWNjZXNzKQotICAgICAgICAqdmFsdWUg
PSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOwotICAgIHJldHVybiBzdWNjZXNzOwot
fQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdXRp
bC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3V0aWwuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM2OWYzOTA2MGQyMDUxZjNhMjAwNjU5NWYzMDYwMGZl
YzJlN2Y3Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdXRpbC5oCisrKyAvZGV2L251bGwK
QEAgLTEsMjAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9V
VElMX0gKLSNkZWZpbmUgQ09NUElMRVJfVVRJTF9ICi0KLS8vIGF0b2ZfY2xhbXAgaXMgbGlrZSBh
dG9mIGJ1dAotLy8gICAxLiBpdCBmb3JjZXMgQyBsb2NhbGUsIGkuZS4gZm9yY2luZyAnLicgYXMg
ZGVjaW1hbCBwb2ludC4KLS8vICAgMi4gaXQgY2xhbXBzIHRoZSB2YWx1ZSB0byAtRkxUX01BWCBv
ciBGTFRfTUFYIGlmIG92ZXJmbG93IGhhcHBlbnMuCi0vLyBSZXR1cm4gZmFsc2UgaWYgb3ZlcmZs
b3cgaGFwcGVucy4KLWV4dGVybiBib29sIGF0b2ZfY2xhbXAoY29uc3QgY2hhciAqc3RyLCBmbG9h
dCAqdmFsdWUpOwotCi0vLyBJZiBvdmVyZmxvdyBoYXBwZW5zLCBjbGFtcCB0aGUgdmFsdWUgdG8g
SU5UX01JTiBvciBJTlRfTUFYLgotLy8gUmV0dXJuIGZhbHNlIGlmIG92ZXJmbG93IGhhcHBlbnMu
Ci1leHRlcm4gYm9vbCBhdG9pX2NsYW1wKGNvbnN0IGNoYXIgKnN0ciwgaW50ICp2YWx1ZSk7Ci0K
LSNlbmRpZiAvLyBDT01QSUxFUl9VVElMX0gKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkVHTC9EaXNwbGF5LmgKaW5kZXggNThjMzk0MDMzMWIzNjNmZmMyNGJkZDQ5MDE1NDQzNzdm
YzcxY2U0MC4uYzgxNmU0ZTFhNTVhYTFjYWQyMjcwYjNmN2Y4YWQ2YjZmMzM4ZTBiZiAxMDA2NDQK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgKQEAgLTExLDggKzEx
LDYgQEAKICNpZm5kZWYgTElCRUdMX0RJU1BMQVlfSF8KICNkZWZpbmUgTElCRUdMX0RJU1BMQVlf
SF8KIAotI2luY2x1ZGUgImNvbW1vbi9zeXN0ZW0uaCIKLQogI2luY2x1ZGUgPHNldD4KICNpbmNs
dWRlIDx2ZWN0b3I+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJFR0wvU3VyZmFjZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1
cmZhY2UuY3BwCmluZGV4IDAxYjQwMTcxNzkxYzdlMTFlZmUyYTlhMmQzOGFlM2FmMzcyYTc4Mzcu
LjEyZjhkZmRmMjUwMjRiMjE3MzJjMzhkMWQ5Y2JkNGM2NGY2MjZjOWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5jcHAKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcApAQCAtMzE4LDYgKzMxOCw4
IEBAIGJvb2wgU3VyZmFjZTo6Y2hlY2tGb3JPdXRPZkRhdGVTd2FwQ2hhaW4oKQogICAgICAgICBz
aXplRGlydHkgPSBmYWxzZTsKICAgICB9CiAKKyAgICBib29sIHdhc0RpcnR5ID0gKG1Td2FwSW50
ZXJ2YWxEaXJ0eSB8fCBzaXplRGlydHkpOworCiAgICAgaWYgKG1Td2FwSW50ZXJ2YWxEaXJ0eSkK
ICAgICB7CiAgICAgICAgIHJlc2V0U3dhcENoYWluKGNsaWVudFdpZHRoLCBjbGllbnRIZWlnaHQp
OwpAQCAtMzI3LDcgKzMyOSw3IEBAIGJvb2wgU3VyZmFjZTo6Y2hlY2tGb3JPdXRPZkRhdGVTd2Fw
Q2hhaW4oKQogICAgICAgICByZXNpemVTd2FwQ2hhaW4oY2xpZW50V2lkdGgsIGNsaWVudEhlaWdo
dCk7CiAgICAgfQogCi0gICAgaWYgKG1Td2FwSW50ZXJ2YWxEaXJ0eSB8fCBzaXplRGlydHkpCisg
ICAgaWYgKHdhc0RpcnR5KQogICAgIHsKICAgICAgICAgaWYgKHN0YXRpY19jYXN0PGVnbDo6U3Vy
ZmFjZSo+KGdldEN1cnJlbnREcmF3U3VyZmFjZSgpKSA9PSB0aGlzKQogICAgICAgICB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAKaW5kZXggMzIwNjcw
ZGEwYzk2ZDE5MmU1M2Q5YTczOTZhZTQ2NjlhMzgyZjc2Mi4uMGVhNDZkNGIzOWVmYjE3OTNkOTRl
MzdmMjhjMDhmNmViZDQ4ZTNjZiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkVHTC9saWJFR0wuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJFR0wvbGliRUdMLmNwcApAQCAtMTg0LDcgKzE4NCw3IEBAIGNvbnN0IGNoYXIgKl9fc3RkY2Fs
bCBlZ2xRdWVyeVN0cmluZyhFR0xEaXNwbGF5IGRweSwgRUdMaW50IG5hbWUpCiAgICAgICAgICAg
Y2FzZSBFR0xfVkVORE9SOgogICAgICAgICAgICAgcmV0dXJuIGVnbDo6c3VjY2VzcyhkaXNwbGF5
LT5nZXRWZW5kb3JTdHJpbmcoKSk7CiAgICAgICAgICAgY2FzZSBFR0xfVkVSU0lPTjoKLSAgICAg
ICAgICAgIHJldHVybiBlZ2w6OnN1Y2Nlc3MoIjEuNCAoQU5HTEUgIiBWRVJTSU9OX1NUUklORyAi
KSIpOworICAgICAgICAgICAgcmV0dXJuIGVnbDo6c3VjY2VzcygiMS40IChBTkdMRSAiIEFOR0xF
X1ZFUlNJT05fU1RSSU5HICIpIik7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gZWdsOjpl
cnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgKGNvbnN0IGNoYXIqKU5VTEwpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wucmMgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5yYwppbmRleCBlMmM0NzJmM2JiMzNiODIx
OTM2MTY2OTY0ZmM4NDhkM2ZlNWViMDNiLi41NWUxYjgzOGM4NzY0MWQxOWEwNDU1NjVlZTcwYTU1
NjNjYjhhMDQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdM
L2xpYkVHTC5yYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVH
TC5yYwpAQCAtNTQsOCArNTQsOCBAQCBFTkQKIC8vDQogDQogVlNfVkVSU0lPTl9JTkZPIFZFUlNJ
T05JTkZPDQotIEZJTEVWRVJTSU9OIE1BSk9SX1ZFUlNJT04sTUlOT1JfVkVSU0lPTixCVUlMRF9W
RVJTSU9OLEJVSUxEX1JFVklTSU9ODQotIFBST0RVQ1RWRVJTSU9OIE1BSk9SX1ZFUlNJT04sTUlO
T1JfVkVSU0lPTixCVUlMRF9WRVJTSU9OLEJVSUxEX1JFVklTSU9ODQorIEZJTEVWRVJTSU9OIEFO
R0xFX01BSk9SX1ZFUlNJT04sQU5HTEVfTUlOT1JfVkVSU0lPTiwwLDANCisgUFJPRFVDVFZFUlNJ
T04gQU5HTEVfTUFKT1JfVkVSU0lPTixBTkdMRV9NSU5PUl9WRVJTSU9OLDAsMA0KICBGSUxFRkxB
R1NNQVNLIDB4MTdMDQogI2lmZGVmIF9ERUJVRw0KICBGSUxFRkxBR1MgMHgxTA0KQEAgLTcxLDEz
ICs3MSwxNCBAQCBCRUdJTgogICAgICAgICBCTE9DSyAiMDQwOTA0YjAiDQogICAgICAgICBCRUdJ
Tg0KICAgICAgICAgICAgIFZBTFVFICJGaWxlRGVzY3JpcHRpb24iLCAiQU5HTEUgbGliRUdMIER5
bmFtaWMgTGluayBMaWJyYXJ5Ig0KLSAgICAgICAgICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsIFZF
UlNJT05fU1RSSU5HDQorICAgICAgICAgICAgVkFMVUUgIkZpbGVWZXJzaW9uIiwgQU5HTEVfVkVS
U0lPTl9TVFJJTkcNCiAgICAgICAgICAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwgImxpYkVHTCIN
CiAgICAgICAgICAgICBWQUxVRSAiTGVnYWxDb3B5cmlnaHQiLCAiQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIg0KICAgICAgICAgICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwgImxp
YkVHTC5kbGwiDQotICAgICAgICAgICAgVkFMVUUgIlByaXZhdGVCdWlsZCIsIFZFUlNJT05fU1RS
SU5HDQorICAgICAgICAgICAgVkFMVUUgIlByaXZhdGVCdWlsZCIsIEFOR0xFX1ZFUlNJT05fU1RS
SU5HDQogICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwgIkFOR0xFIGxpYkVHTCBEeW5h
bWljIExpbmsgTGlicmFyeSINCi0gICAgICAgICAgICBWQUxVRSAiUHJvZHVjdFZlcnNpb24iLCBW
RVJTSU9OX1NUUklORw0KKyAgICAgICAgICAgIFZBTFVFICJQcm9kdWN0VmVyc2lvbiIsIEFOR0xF
X1ZFUlNJT05fU1RSSU5HDQorICAgICAgICAgICAgVkFMVUUgIkNvbW1lbnRzIiwgIkJ1aWxkIERh
dGU6ICIgQU5HTEVfQ09NTUlUX0RBVEUNCiAgICAgICAgIEVORA0KICAgICBFTkQNCiAgICAgQkxP
Q0sgIlZhckZpbGVJbmZvIg0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJFR0wvbWFpbi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML21h
aW4uY3BwCmluZGV4IDQyNGVjM2ZjZDFkOTg2MzUxYmY1ZWE0YmFiYmIxMTZjMGZkMWFlZTcuLjgw
ZGNjMzQ1ODA3NTYwZWY2YTQxMTc0ZjE0YjdjOWYwZDc4YzZmMWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbWFpbi5jcHAKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkVHTC9tYWluLmNwcApAQCAtMTIsMTMgKzEyLDUwIEBACiAKIHN0
YXRpYyBEV09SRCBjdXJyZW50VExTID0gVExTX09VVF9PRl9JTkRFWEVTOwogCituYW1lc3BhY2Ug
ZWdsCit7CisKK0N1cnJlbnQgKkFsbG9jYXRlQ3VycmVudCgpCit7CisgICAgQ3VycmVudCAqY3Vy
cmVudCA9IChlZ2w6OkN1cnJlbnQqKUxvY2FsQWxsb2MoTFBUUiwgc2l6ZW9mKGVnbDo6Q3VycmVu
dCkpOworCisgICAgaWYgKCFjdXJyZW50KQorICAgIHsKKyAgICAgICAgRVJSKCJDb3VsZCBub3Qg
YWxsb2NhdGUgdGhyZWFkIGxvY2FsIHN0b3JhZ2UuIik7CisgICAgICAgIHJldHVybiBOVUxMOwor
ICAgIH0KKworICAgIEFTU0VSVChjdXJyZW50VExTICE9IFRMU19PVVRfT0ZfSU5ERVhFUyk7Cisg
ICAgVGxzU2V0VmFsdWUoY3VycmVudFRMUywgY3VycmVudCk7CisKKyAgICBjdXJyZW50LT5lcnJv
ciA9IEVHTF9TVUNDRVNTOworICAgIGN1cnJlbnQtPkFQSSA9IEVHTF9PUEVOR0xfRVNfQVBJOwor
ICAgIGN1cnJlbnQtPmRpc3BsYXkgPSBFR0xfTk9fRElTUExBWTsKKyAgICBjdXJyZW50LT5kcmF3
U3VyZmFjZSA9IEVHTF9OT19TVVJGQUNFOworICAgIGN1cnJlbnQtPnJlYWRTdXJmYWNlID0gRUdM
X05PX1NVUkZBQ0U7CisKKyAgICByZXR1cm4gY3VycmVudDsKK30KKwordm9pZCBEZWFsbG9jYXRl
Q3VycmVudCgpCit7CisgICAgdm9pZCAqY3VycmVudCA9IFRsc0dldFZhbHVlKGN1cnJlbnRUTFMp
OworCisgICAgaWYgKGN1cnJlbnQpCisgICAgeworICAgICAgICBMb2NhbEZyZWUoKEhMT0NBTClj
dXJyZW50KTsKKyAgICB9Cit9CisKK30KKwogZXh0ZXJuICJDIiBCT09MIFdJTkFQSSBEbGxNYWlu
KEhJTlNUQU5DRSBpbnN0YW5jZSwgRFdPUkQgcmVhc29uLCBMUFZPSUQgcmVzZXJ2ZWQpCiB7CiAg
ICAgc3dpdGNoIChyZWFzb24pCiAgICAgewogICAgICAgY2FzZSBETExfUFJPQ0VTU19BVFRBQ0g6
CiAgICAgICAgIHsKLSNpZiAhZGVmaW5lZChBTkdMRV9ESVNBQkxFX1RSQUNFKQorI2lmIGRlZmlu
ZWQoQU5HTEVfRU5BQkxFX1RSQUNFKQogICAgICAgICAgICAgRklMRSAqZGVidWcgPSBmb3BlbihU
UkFDRV9PVVRQVVRfRklMRSwgInJ0Iik7CiAKICAgICAgICAgICAgIGlmIChkZWJ1ZykKQEAgLTQz
LDM5ICs4MCwxNyBAQCBleHRlcm4gIkMiIEJPT0wgV0lOQVBJIERsbE1haW4oSElOU1RBTkNFIGlu
c3RhbmNlLCBEV09SRCByZWFzb24sIExQVk9JRCByZXNlcnZlZAogICAgICAgICAvLyBGYWxsIHRo
cm91Z2h0IHRvIGluaXRpYWxpemUgaW5kZXgKICAgICAgIGNhc2UgRExMX1RIUkVBRF9BVFRBQ0g6
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGVnbDo6Q3VycmVudCAqY3VycmVudCA9IChlZ2w6OkN1
cnJlbnQqKUxvY2FsQWxsb2MoTFBUUiwgc2l6ZW9mKGVnbDo6Q3VycmVudCkpOwotCi0gICAgICAg
ICAgICBpZiAoY3VycmVudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUbHNTZXRW
YWx1ZShjdXJyZW50VExTLCBjdXJyZW50KTsKLQotICAgICAgICAgICAgICAgIGN1cnJlbnQtPmVy
cm9yID0gRUdMX1NVQ0NFU1M7Ci0gICAgICAgICAgICAgICAgY3VycmVudC0+QVBJID0gRUdMX09Q
RU5HTF9FU19BUEk7Ci0gICAgICAgICAgICAgICAgY3VycmVudC0+ZGlzcGxheSA9IEVHTF9OT19E
SVNQTEFZOwotICAgICAgICAgICAgICAgIGN1cnJlbnQtPmRyYXdTdXJmYWNlID0gRUdMX05PX1NV
UkZBQ0U7Ci0gICAgICAgICAgICAgICAgY3VycmVudC0+cmVhZFN1cmZhY2UgPSBFR0xfTk9fU1VS
RkFDRTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVnbDo6QWxsb2NhdGVDdXJyZW50KCk7
CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIERMTF9USFJFQURfREVUQUNI
OgogICAgICAgICB7Ci0gICAgICAgICAgICB2b2lkICpjdXJyZW50ID0gVGxzR2V0VmFsdWUoY3Vy
cmVudFRMUyk7Ci0KLSAgICAgICAgICAgIGlmIChjdXJyZW50KQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIExvY2FsRnJlZSgoSExPQ0FMKWN1cnJlbnQpOwotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWdsOjpEZWFsbG9jYXRlQ3VycmVudCgpOwogICAgICAgICB9CiAgICAgICAg
IGJyZWFrOwogICAgICAgY2FzZSBETExfUFJPQ0VTU19ERVRBQ0g6CiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHZvaWQgKmN1cnJlbnQgPSBUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKLQotICAgICAg
ICAgICAgaWYgKGN1cnJlbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTG9jYWxG
cmVlKChITE9DQUwpY3VycmVudCk7Ci0gICAgICAgICAgICB9Ci0KKyAgICAgICAgICAgIGVnbDo6
RGVhbGxvY2F0ZUN1cnJlbnQoKTsKICAgICAgICAgICAgIFRsc0ZyZWUoY3VycmVudFRMUyk7CiAg
ICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC04OCw3MiArMTAzLDgyIEBAIGV4dGVybiAiQyIg
Qk9PTCBXSU5BUEkgRGxsTWFpbihISU5TVEFOQ0UgaW5zdGFuY2UsIERXT1JEIHJlYXNvbiwgTFBW
T0lEIHJlc2VydmVkCiAKIG5hbWVzcGFjZSBlZ2wKIHsKLXZvaWQgc2V0Q3VycmVudEVycm9yKEVH
TGludCBlcnJvcikKKworQ3VycmVudCAqR2V0Q3VycmVudERhdGEoKQogewogICAgIEN1cnJlbnQg
KmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CiAKKyAgICAvLyBB
TkdMRSBpc3N1ZSA0ODg6IHdoZW4gdGhlIGRsbCBpcyBsb2FkZWQgYWZ0ZXIgdGhyZWFkIGluaXRp
YWxpemF0aW9uLAorICAgIC8vIHRocmVhZCBsb2NhbCBzdG9yYWdlIChjdXJyZW50KSBtaWdodCBu
b3QgZXhpc3QgeWV0LgorICAgIHJldHVybiAoY3VycmVudCA/IGN1cnJlbnQgOiBBbGxvY2F0ZUN1
cnJlbnQoKSk7Cit9CisKK3ZvaWQgc2V0Q3VycmVudEVycm9yKEVHTGludCBlcnJvcikKK3sKKyAg
ICBDdXJyZW50ICpjdXJyZW50ID0gR2V0Q3VycmVudERhdGEoKTsKKwogICAgIGN1cnJlbnQtPmVy
cm9yID0gZXJyb3I7CiB9CiAKIEVHTGludCBnZXRDdXJyZW50RXJyb3IoKQogewotICAgIEN1cnJl
bnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisgICAgQ3Vy
cmVudCAqY3VycmVudCA9IEdldEN1cnJlbnREYXRhKCk7CiAKICAgICByZXR1cm4gY3VycmVudC0+
ZXJyb3I7CiB9CiAKIHZvaWQgc2V0Q3VycmVudEFQSShFR0xlbnVtIEFQSSkKIHsKLSAgICBDdXJy
ZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworICAgIEN1
cnJlbnQgKmN1cnJlbnQgPSBHZXRDdXJyZW50RGF0YSgpOwogCiAgICAgY3VycmVudC0+QVBJID0g
QVBJOwogfQogCiBFR0xlbnVtIGdldEN1cnJlbnRBUEkoKQogewotICAgIEN1cnJlbnQgKmN1cnJl
bnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisgICAgQ3VycmVudCAqY3Vy
cmVudCA9IEdldEN1cnJlbnREYXRhKCk7CiAKICAgICByZXR1cm4gY3VycmVudC0+QVBJOwogfQog
CiB2b2lkIHNldEN1cnJlbnREaXNwbGF5KEVHTERpc3BsYXkgZHB5KQogewotICAgIEN1cnJlbnQg
KmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisgICAgQ3VycmVu
dCAqY3VycmVudCA9IEdldEN1cnJlbnREYXRhKCk7CiAKICAgICBjdXJyZW50LT5kaXNwbGF5ID0g
ZHB5OwogfQogCiBFR0xEaXNwbGF5IGdldEN1cnJlbnREaXNwbGF5KCkKIHsKLSAgICBDdXJyZW50
ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworICAgIEN1cnJl
bnQgKmN1cnJlbnQgPSBHZXRDdXJyZW50RGF0YSgpOwogCiAgICAgcmV0dXJuIGN1cnJlbnQtPmRp
c3BsYXk7CiB9CiAKIHZvaWQgc2V0Q3VycmVudERyYXdTdXJmYWNlKEVHTFN1cmZhY2Ugc3VyZmFj
ZSkKIHsKLSAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJl
bnRUTFMpOworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSBHZXRDdXJyZW50RGF0YSgpOwogCiAgICAg
Y3VycmVudC0+ZHJhd1N1cmZhY2UgPSBzdXJmYWNlOwogfQogCiBFR0xTdXJmYWNlIGdldEN1cnJl
bnREcmF3U3VyZmFjZSgpCiB7Ci0gICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNH
ZXRWYWx1ZShjdXJyZW50VExTKTsKKyAgICBDdXJyZW50ICpjdXJyZW50ID0gR2V0Q3VycmVudERh
dGEoKTsKIAogICAgIHJldHVybiBjdXJyZW50LT5kcmF3U3VyZmFjZTsKIH0KIAogdm9pZCBzZXRD
dXJyZW50UmVhZFN1cmZhY2UoRUdMU3VyZmFjZSBzdXJmYWNlKQogewotICAgIEN1cnJlbnQgKmN1
cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisgICAgQ3VycmVudCAq
Y3VycmVudCA9IEdldEN1cnJlbnREYXRhKCk7CiAKICAgICBjdXJyZW50LT5yZWFkU3VyZmFjZSA9
IHN1cmZhY2U7CiB9CiAKIEVHTFN1cmZhY2UgZ2V0Q3VycmVudFJlYWRTdXJmYWNlKCkKIHsKLSAg
ICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOwor
ICAgIEN1cnJlbnQgKmN1cnJlbnQgPSBHZXRDdXJyZW50RGF0YSgpOwogCiAgICAgcmV0dXJuIGN1
cnJlbnQtPnJlYWRTdXJmYWNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9Db25zdGFudHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvQ29uc3RhbnRzLmgKaW5kZXggZDkwMmQ0NTZiMTI2OWIzNWM3YmIyMmU1MjY3
NzU1YzA5MjI1ZWYzMy4uOWYyNGQ2NmE3ZGM3NGM2MDdmOTYxNzdmN2ViNGY1Y2U5NzJmZDM0MiAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db25zdGFu
dHMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnN0YW50
cy5oCkBAIC0xLDM0ICsxLDM0IEBACi0vLw0KLS8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLS8vDQotDQotLy8gQ29udGFudHMu
aDogRGVmaW5lcyBzb21lIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIGFuZCBnbCBjb25zdGFudHMN
Ci0NCi0jaWZuZGVmIExJQkdMRVNWMl9DT05TVEFOVFNfSF8NCi0jZGVmaW5lIExJQkdMRVNWMl9D
T05TVEFOVFNfSF8NCi0NCi1uYW1lc3BhY2UgZ2wNCi17DQotDQotZW51bQ0KLXsNCi0gICAgTUFY
X1ZFUlRFWF9BVFRSSUJTID0gMTYsDQotICAgIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTID0gMTYs
DQotDQotICAgIC8vIEltcGxlbWVudGF0aW9uIHVwcGVyIGxpbWl0cywgcmVhbCBtYXhpbXVtcyBk
ZXBlbmQgb24gdGhlIGhhcmR3YXJlDQotICAgIElNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVY
VFVSRV9JTUFHRV9VTklUUyA9IDE2LA0KLSAgICBJTVBMRU1FTlRBVElPTl9NQVhfQ09NQklORURf
VEVYVFVSRV9JTUFHRV9VTklUUyA9IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTICsgSU1QTEVNRU5U
QVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAgICANCi0NCi0gICAgSU1QTEVN
RU5UQVRJT05fTUFYX1ZBUllJTkdfVkVDVE9SUyA9IDMyLA0KLSAgICBJTVBMRU1FTlRBVElPTl9N
QVhfRFJBV19CVUZGRVJTID0gOA0KLX07DQotDQotY29uc3QgZmxvYXQgQUxJQVNFRF9MSU5FX1dJ
RFRIX1JBTkdFX01JTiA9IDEuMGY7DQotY29uc3QgZmxvYXQgQUxJQVNFRF9MSU5FX1dJRFRIX1JB
TkdFX01BWCA9IDEuMGY7DQotY29uc3QgZmxvYXQgQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01J
TiA9IDEuMGY7DQotDQotfQ0KLQ0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfQ09OU1RBTlRTX0hfDQor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKy8vIENvbnRhbnRzLmg6IERlZmluZXMgc29tZSBpbXBsZW1lbnRhdGlv
biBzcGVjaWZpYyBhbmQgZ2wgY29uc3RhbnRzCisKKyNpZm5kZWYgTElCR0xFU1YyX0NPTlNUQU5U
U19IXworI2RlZmluZSBMSUJHTEVTVjJfQ09OU1RBTlRTX0hfCisKK25hbWVzcGFjZSBnbAorewor
CitlbnVtCit7CisgICAgTUFYX1ZFUlRFWF9BVFRSSUJTID0gMTYsCisgICAgTUFYX1RFWFRVUkVf
SU1BR0VfVU5JVFMgPSAxNiwKKworICAgIC8vIEltcGxlbWVudGF0aW9uIHVwcGVyIGxpbWl0cywg
cmVhbCBtYXhpbXVtcyBkZXBlbmQgb24gdGhlIGhhcmR3YXJlCisgICAgSU1QTEVNRU5UQVRJT05f
TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTID0gMTYsCisgICAgSU1QTEVNRU5UQVRJT05f
TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSBNQVhfVEVYVFVSRV9JTUFHRV9VTklU
UyArIElNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUywgICAgCisK
KyAgICBJTVBMRU1FTlRBVElPTl9NQVhfVkFSWUlOR19WRUNUT1JTID0gMzIsCisgICAgSU1QTEVN
RU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSUyA9IDgKK307CisKK2NvbnN0IGZsb2F0IEFMSUFTRURf
TElORV9XSURUSF9SQU5HRV9NSU4gPSAxLjBmOworY29uc3QgZmxvYXQgQUxJQVNFRF9MSU5FX1dJ
RFRIX1JBTkdFX01BWCA9IDEuMGY7Citjb25zdCBmbG9hdCBBTElBU0VEX1BPSU5UX1NJWkVfUkFO
R0VfTUlOID0gMS4wZjsKKworfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX0NPTlNUQU5UU19IXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAK
aW5kZXggZmJhNDEwNGQxZTExMjlkMzZmMWZlOWQxNjJlMWQ1Y2RmYjliYzlkYi4uNmJjNGM3NmMz
ZDQxYzJlYTZlMDUyMThhY2U1NGUyZjUwYWE2MDljMyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwCkBAIC0xNzc4LDcgKzE3NzgsNyBA
QCB2b2lkIENvbnRleHQ6OmFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2RlKQogICAgIHsKICAgICAg
ICAgbWFzayA9IDB4RkZGRkZGRkY7CiAgICAgfQotICAgIG1SZW5kZXJlci0+c2V0QmxlbmRTdGF0
ZShtU3RhdGUuYmxlbmQsIG1TdGF0ZS5ibGVuZENvbG9yLCBtYXNrKTsKKyAgICBtUmVuZGVyZXIt
PnNldEJsZW5kU3RhdGUoZnJhbWVidWZmZXJPYmplY3QsIG1TdGF0ZS5ibGVuZCwgbVN0YXRlLmJs
ZW5kQ29sb3IsIG1hc2spOwogCiAgICAgbVJlbmRlcmVyLT5zZXREZXB0aFN0ZW5jaWxTdGF0ZSht
U3RhdGUuZGVwdGhTdGVuY2lsLCBtU3RhdGUuc3RlbmNpbFJlZiwgbVN0YXRlLnN0ZW5jaWxCYWNr
UmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRlLnJhc3Rlcml6
ZXIuZnJvbnRGYWNlID09IEdMX0NDVyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvQ29udGV4dC5oCmluZGV4IDA5ZWVkZTlmZjk0MjIxMmJmNWQyZjgzMzJjZGQ5
ZWUzMzY4YmEwM2IuLjNkYzk1ZTNiOTUyZGM4ZjA2Y2IyOWM0MzAzYWNiY2RiODNjZWRmMjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5o
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCkBA
IC03Myw3ICs3Myw3IEBAIGVudW0gUXVlcnlUeXBlCiBjbGFzcyBWZXJ0ZXhBdHRyaWJ1dGUKIHsK
ICAgcHVibGljOgotICAgIFZlcnRleEF0dHJpYnV0ZSgpIDogbVR5cGUoR0xfRkxPQVQpLCBtU2l6
ZSgwKSwgbU5vcm1hbGl6ZWQoZmFsc2UpLCBtU3RyaWRlKDApLCBtUG9pbnRlcihOVUxMKSwgbUFy
cmF5RW5hYmxlZChmYWxzZSksIG1EaXZpc29yKDApCisgICAgVmVydGV4QXR0cmlidXRlKCkgOiBt
VHlwZShHTF9GTE9BVCksIG1TaXplKDQpLCBtTm9ybWFsaXplZChmYWxzZSksIG1TdHJpZGUoMCks
IG1Qb2ludGVyKE5VTEwpLCBtQXJyYXlFbmFibGVkKGZhbHNlKSwgbURpdmlzb3IoMCkKICAgICB7
CiAgICAgICAgIG1DdXJyZW50VmFsdWVbMF0gPSAwLjBmOwogICAgICAgICBtQ3VycmVudFZhbHVl
WzFdID0gMC4wZjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvUHJvZ3JhbUJpbmFyeS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwCmluZGV4IGVlMGVjOGUwM2YxZDkyODMxZWQ2NWIyMzZh
OWU1ZWNhMTNiZGQzMTkuLjI1ZWZjNDA5NzNiMzM3NTQwNTk3NGM5MzMxNzRiZmZhNTViNzFlZTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3Jh
bUJpbmFyeS5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Q
cm9ncmFtQmluYXJ5LmNwcApAQCAtMTYyNyw5ICsxNjI3LDE5IEBAIGJvb2wgUHJvZ3JhbUJpbmFy
eTo6bG9hZChJbmZvTG9nICZpbmZvTG9nLCBjb25zdCB2b2lkICpiaW5hcnksIEdMc2l6ZWkgbGVu
Z3RoKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaW50IHZlcnNpb24gPSAw
OwotICAgIHN0cmVhbS5yZWFkKCZ2ZXJzaW9uKTsKLSAgICBpZiAodmVyc2lvbiAhPSBWRVJTSU9O
X0RXT1JEKQorICAgIGludCBtYWpvclZlcnNpb24gPSAwOworICAgIGludCBtaW5vclZlcnNpb24g
PSAwOworICAgIHN0cmVhbS5yZWFkKCZtYWpvclZlcnNpb24pOworICAgIHN0cmVhbS5yZWFkKCZt
aW5vclZlcnNpb24pOworICAgIGlmIChtYWpvclZlcnNpb24gIT0gQU5HTEVfTUFKT1JfVkVSU0lP
TiB8fCBtaW5vclZlcnNpb24gIT0gQU5HTEVfTUlOT1JfVkVSU0lPTikKKyAgICB7CisgICAgICAg
IGluZm9Mb2cuYXBwZW5kKCJJbnZhbGlkIHByb2dyYW0gYmluYXJ5IHZlcnNpb24uIik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBjaGFyIGNvbW1pdFN0cmlu
Z1tBTkdMRV9DT01NSVRfSEFTSF9TSVpFXTsKKyAgICBzdHJlYW0ucmVhZChjb21taXRTdHJpbmcs
IEFOR0xFX0NPTU1JVF9IQVNIX1NJWkUpOworICAgIGlmIChtZW1jbXAoY29tbWl0U3RyaW5nLCBB
TkdMRV9DT01NSVRfSEFTSCwgc2l6ZW9mKHVuc2lnbmVkIGNoYXIpICogQU5HTEVfQ09NTUlUX0hB
U0hfU0laRSkgIT0gMCkKICAgICB7CiAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJJbnZhbGlkIHBy
b2dyYW0gYmluYXJ5IHZlcnNpb24uIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE3OTYs
NyArMTgwNiw5IEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6c2F2ZSh2b2lkKiBiaW5hcnksIEdMc2l6
ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoKQogICAgIEJpbmFyeU91dHB1dFN0cmVhbSBzdHJl
YW07CiAKICAgICBzdHJlYW0ud3JpdGUoR0xfUFJPR1JBTV9CSU5BUllfQU5HTEUpOwotICAgIHN0
cmVhbS53cml0ZShWRVJTSU9OX0RXT1JEKTsKKyAgICBzdHJlYW0ud3JpdGUoQU5HTEVfTUFKT1Jf
VkVSU0lPTik7CisgICAgc3RyZWFtLndyaXRlKEFOR0xFX01JTk9SX1ZFUlNJT04pOworICAgIHN0
cmVhbS53cml0ZShBTkdMRV9DT01NSVRfSEFTSCwgQU5HTEVfQ09NTUlUX0hBU0hfU0laRSk7CiAg
ICAgc3RyZWFtLndyaXRlKEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMKTsKIAogICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyArK2kpCkBA
IC0yNTkyLDcgKzI2MDQsOSBAQCBzdHJ1Y3QgQXR0cmlidXRlU29ydGVyCiAKICAgICBib29sIG9w
ZXJhdG9yKCkoaW50IGEsIGludCBiKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9yaWdpbmFsSW5k
aWNlc1thXSA9PSAtMSA/IGZhbHNlIDogb3JpZ2luYWxJbmRpY2VzW2FdIDwgb3JpZ2luYWxJbmRp
Y2VzW2JdOworICAgICAgICBpZiAob3JpZ2luYWxJbmRpY2VzW2FdID09IC0xKSByZXR1cm4gZmFs
c2U7CisgICAgICAgIGlmIChvcmlnaW5hbEluZGljZXNbYl0gPT0gLTEpIHJldHVybiB0cnVlOwor
ICAgICAgICByZXR1cm4gKG9yaWdpbmFsSW5kaWNlc1thXSA8IG9yaWdpbmFsSW5kaWNlc1tiXSk7
CiAgICAgfQogCiAgICAgY29uc3QgaW50ICgmb3JpZ2luYWxJbmRpY2VzKVtNQVhfVkVSVEVYX0FU
VFJJQlNdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9TaGFkZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVy
LmgKaW5kZXggODQ4ZDRjOTlhNzEzODgzMGQ2YjJiY2U3OGE5Njc1MzU5M2Y4OWNlOS4uMjAxNWFk
ZGQxMWQyNDZiYWU2MmQ2MTRhZDEwNzIyNzg0MDNmYTZmNiAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5oCkBAIC0xOCw3ICsxOCw3IEBACiAjaW5j
bHVkZSA8bGlzdD4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlICJjb21waWxlci9Vbmlm
b3JtLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmgiCiAjaW5jbHVk
ZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKIAogbmFtZXNwYWNlIHJ4CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcAppbmRleCBjZWU5YzU3ZGFj
ZjUwOGFkMmI2OGU2OGM4ZDc3NGI2ZmY0M2U1NDJjLi4zZGVlY2FmMTEyY2JiYTUwMWUxM2ZlNzBj
NGEwNzZmMzA5OWRmMTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1RleHR1cmUuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvVGV4dHVyZS5jcHAKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlICJsaWJHTEVT
djIvbWFpbi5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgogI2luY2x1ZGUgImxp
YkdMRVN2Mi91dGlsaXRpZXMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvQmxpdC5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0JsaXQuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0lt
YWdlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAKaW5k
ZXggMWU3Y2Y5ZDBjZmFlYTNiZmU3ZDQzNjFlZDUzYmVmNWJiNTY4NmQ4Zi4uYTMzNDgxZTE1YzEz
YzRlOTNmNjVmYWNjNTdhMWQwZmQ5ZjIxZjA3MyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcApAQCAtMzg0NCw5ICszODQ0LDkg
QEAgY29uc3QgR0x1Ynl0ZSogX19zdGRjYWxsIGdsR2V0U3RyaW5nKEdMZW51bSBuYW1lKQogICAg
ICAgICAgIGNhc2UgR0xfUkVOREVSRVI6CiAgICAgICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSgo
Y29udGV4dCAhPSBOVUxMKSA/IGNvbnRleHQtPmdldFJlbmRlcmVyU3RyaW5nKCkgOiAiQU5HTEUi
KTsKICAgICAgICAgICBjYXNlIEdMX1ZFUlNJT046Ci0gICAgICAgICAgICByZXR1cm4gKEdMdWJ5
dGUqKSJPcGVuR0wgRVMgMi4wIChBTkdMRSAiIFZFUlNJT05fU1RSSU5HICIpIjsKKyAgICAgICAg
ICAgIHJldHVybiAoR0x1Ynl0ZSopIk9wZW5HTCBFUyAyLjAgKEFOR0xFICIgQU5HTEVfVkVSU0lP
Tl9TVFJJTkcgIikiOwogICAgICAgICAgIGNhc2UgR0xfU0hBRElOR19MQU5HVUFHRV9WRVJTSU9O
OgotICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikiT3BlbkdMIEVTIEdMU0wgRVMgMS4wMCAo
QU5HTEUgIiBWRVJTSU9OX1NUUklORyAiKSI7CisgICAgICAgICAgICByZXR1cm4gKEdMdWJ5dGUq
KSJPcGVuR0wgRVMgR0xTTCBFUyAxLjAwIChBTkdMRSAiIEFOR0xFX1ZFUlNJT05fU1RSSU5HICIp
IjsKICAgICAgICAgICBjYXNlIEdMX0VYVEVOU0lPTlM6CiAgICAgICAgICAgICByZXR1cm4gKEdM
dWJ5dGUqKSgoY29udGV4dCAhPSBOVUxMKSA/IGNvbnRleHQtPmdldEV4dGVuc2lvblN0cmluZygp
IDogIiIpOwogICAgICAgICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5kZWYgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5kZWYKaW5kZXggMmNkOGVjZTJiMjJjNGFjMTA1
NWY0OTJlYTg3MzUyODRhNmU1MDYzYi4uYjgzMjBjOGYyNTYzYjllZjE5NjZlZjNhNDQ1YmM1OGI1
MDA4YmNkYyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9saWJHTEVTdjIuZGVmCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvbGliR0xFU3YyLmRlZgpAQCAtMTgzLDMgKzE4Myw2IEBAIEVYUE9SVFMKICAgICBnbEJpbmRU
ZXhJbWFnZSAgICAgICAgICAgICAgICAgIEAxNTggTk9OQU1FCiAgICAgZ2xDcmVhdGVSZW5kZXJl
ciAgICAgICAgICAgICAgICBAMTc3IE5PTkFNRQogICAgIGdsRGVzdHJveVJlbmRlcmVyICAgICAg
ICAgICAgICAgQDE3OCBOT05BTUUKKworICAgIDsgU2V0dGluZyB1cCBUUkFDRSBtYWNybyBjYWxs
YmFja3MKKyAgICBTZXRUcmFjZUZ1bmN0aW9uUG9pbnRlcnMgICAgICAgIEAxODAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnJjIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIucmMKaW5kZXgg
ZjFiMDFiOWI3OTU5ZWJjOWZmMDUzYTVhZDdkYTQxM2ZkNjViYmE0ZS4uNGNhMzFmOTcyMWU3OTgx
ZWJjNDE2ZjE5ZmRlNTQyNzA0MjI5YmE0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIucmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIucmMKQEAgLTU0LDggKzU0LDggQEAgRU5ECiAv
Lw0KIA0KIFZTX1ZFUlNJT05fSU5GTyBWRVJTSU9OSU5GTw0KLSBGSUxFVkVSU0lPTiBNQUpPUl9W
RVJTSU9OLE1JTk9SX1ZFUlNJT04sQlVJTERfVkVSU0lPTixCVUlMRF9SRVZJU0lPTg0KLSBQUk9E
VUNUVkVSU0lPTiBNQUpPUl9WRVJTSU9OLE1JTk9SX1ZFUlNJT04sQlVJTERfVkVSU0lPTixCVUlM
RF9SRVZJU0lPTg0KKyBGSUxFVkVSU0lPTiBBTkdMRV9NQUpPUl9WRVJTSU9OLEFOR0xFX01JTk9S
X1ZFUlNJT04sMCwwDQorIFBST0RVQ1RWRVJTSU9OIEFOR0xFX01BSk9SX1ZFUlNJT04sQU5HTEVf
TUlOT1JfVkVSU0lPTiwwLDANCiAgRklMRUZMQUdTTUFTSyAweDE3TA0KICNpZmRlZiBfREVCVUcN
CiAgRklMRUZMQUdTIDB4MUwNCkBAIC03MSwxMyArNzEsMTQgQEAgQkVHSU4KICAgICAgICAgQkxP
Q0sgIjA0MDkwNGIwIg0KICAgICAgICAgQkVHSU4NCiAgICAgICAgICAgICBWQUxVRSAiRmlsZURl
c2NyaXB0aW9uIiwgIkFOR0xFIGxpYkdMRVN2MiBEeW5hbWljIExpbmsgTGlicmFyeSINCi0gICAg
ICAgICAgICBWQUxVRSAiRmlsZVZlcnNpb24iLCBWRVJTSU9OX1NUUklORw0KKyAgICAgICAgICAg
IFZBTFVFICJGaWxlVmVyc2lvbiIsIEFOR0xFX1ZFUlNJT05fU1RSSU5HDQogICAgICAgICAgICAg
VkFMVUUgIkludGVybmFsTmFtZSIsICJsaWJHTEVTdjIiDQogICAgICAgICAgICAgVkFMVUUgIkxl
Z2FsQ29weXJpZ2h0IiwgIkNvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiINCiAgICAgICAg
ICAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsICJsaWJHTEVTdjIuZGxsIg0KLSAgICAgICAg
ICAgIFZBTFVFICJQcml2YXRlQnVpbGQiLCBWRVJTSU9OX1NUUklORw0KKyAgICAgICAgICAgIFZB
TFVFICJQcml2YXRlQnVpbGQiLCBBTkdMRV9WRVJTSU9OX1NUUklORw0KICAgICAgICAgICAgIFZB
TFVFICJQcm9kdWN0TmFtZSIsICJBTkdMRSBsaWJHTEVTdjIgRHluYW1pYyBMaW5rIExpYnJhcnki
DQotICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgVkVSU0lPTl9TVFJJTkcNCisg
ICAgICAgICAgICBWQUxVRSAiUHJvZHVjdFZlcnNpb24iLCBBTkdMRV9WRVJTSU9OX1NUUklORw0K
KyAgICAgICAgICAgIFZBTFVFICJDb21tZW50cyIsICJCdWlsZCBEYXRlOiAiIEFOR0xFX0NPTU1J
VF9EQVRFDQogICAgICAgICBFTkQNCiAgICAgRU5EDQogICAgIEJMT0NLICJWYXJGaWxlSW5mbyIN
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdM
RVN2Mi52Y3hwcm9qIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJH
TEVTdjIudmN4cHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIwMGUxNzBlNDZi
ZWM2NTU4NjU1Y2YyOGFiYTY4MDE3OGNlY2RiNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L2xpYkdMRVN2Mi52Y3hwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNDI1ICswLDAgQEAKLe+7vzw/
eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPFByb2plY3QgRGVmYXVsdFRh
cmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1p
Y3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+DQotICA8SXRlbUdyb3VwIExhYmVs
PSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPg0KLSAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5j
bHVkZT0iRGVidWd8V2luMzIiPg0KLSAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1
cmF0aW9uPg0KLSAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+DQotICAgIDwvUHJvamVj
dENvbmZpZ3VyYXRpb24+DQotICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1
Z3x4NjQiPg0KLSAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPg0KLSAg
ICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPg0KLSAgICA8L1Byb2plY3RDb25maWd1cmF0aW9u
Pg0KLSAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+DQot
ICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4NCi0gICAgICA8UGxh
dGZvcm0+V2luMzI8L1BsYXRmb3JtPg0KLSAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KLSAg
ICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPg0KLSAgICAgIDxD
b25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+DQotICAgICAgPFBsYXRmb3JtPng2
NDwvUGxhdGZvcm0+DQotICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQotICA8L0l0ZW1Hcm91
cD4NCi0gIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4NCi0gICAgPFByb2plY3RHdWlk
PntCNTg3MUE3QS05NjhDLTQyRTMtQTMzQi05ODFFNkY0NDhFNzh9PC9Qcm9qZWN0R3VpZD4NCi0g
ICAgPFJvb3ROYW1lc3BhY2U+bGliR0xFU3YyPC9Sb290TmFtZXNwYWNlPg0KLSAgICA8S2V5d29y
ZD5XaW4zMlByb2o8L0tleXdvcmQ+DQotICA8L1Byb3BlcnR5R3JvdXA+DQotICA8SW1wb3J0IFBy
b2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPg0K
LSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KLSAgICA8Q29uZmln
dXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KLSAgICA8Q2hh
cmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4NCi0gICAgPFdob2xlUHJvZ3JhbU9wdGlt
aXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+DQotICA8L1Byb3BlcnR5R3Jv
dXA+DQotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KLSAgICA8Q29u
ZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KLSAgICA8
Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4NCi0gIDwvUHJvcGVydHlHcm91cD4N
Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9y
bSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQotICAgIDxDb25maWd1
cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+DQotICAgIDxDaGFy
YWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0Pg0KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1p
emF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4NCi0gIDwvUHJvcGVydHlHcm91
cD4NCi0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KLSAgICA8Q29uZmln
dXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KLSAgICA8Q2hh
cmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4NCi0gIDwvUHJvcGVydHlHcm91cD4NCi0g
IDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAv
Pg0KLSAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+DQotICA8L0ltcG9y
dEdyb3VwPg0KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQ
bGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQotICAg
IDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3Jt
KS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0
LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9y
bSIgLz4NCi0gIDwvSW1wb3J0R3JvdXA+DQotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChD
b25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0
eVNoZWV0cyI+DQotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0
LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9v
dERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2Nh
bEFwcERhdGFQbGF0Zm9ybSIgLz4NCi0gIDwvSW1wb3J0R3JvdXA+DQotICA8SW1wb3J0R3JvdXAg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCci
IExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9v
dERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4
aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3Bz
JykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCi0gIDwvSW1wb3J0R3JvdXA+DQot
ICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KLSAgICA8SW1wb3J0IFByb2pl
Y3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIg
Q29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9y
bSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQotICA8L0lt
cG9ydEdyb3VwPg0KLSAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+DQotICA8
UHJvcGVydHlHcm91cD4NCi0gICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC40MDIxOS4xPC9f
UHJvamVjdEZpbGVWZXJzaW9uPg0KLSAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4kKFNvbHV0aW9uRGlyKSQoQ29uZmln
dXJhdGlvbilcPC9PdXREaXI+DQotICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiQoQ29uZmlndXJhdGlvbilcPC9JbnRE
aXI+DQotICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4NCi0gICAg
PE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVh
c2V8V2luMzInIj4kKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQotICAg
IDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxl
YXNlfFdpbjMyJyI+JChDb25maWd1cmF0aW9uKVw8L0ludERpcj4NCi0gICAgPExpbmtJbmNyZW1l
bnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8
V2luMzInIj5mYWxzZTwvTGlua0luY3JlbWVudGFsPg0KLSAgICA8T3V0RGlyIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JChTb2x1dGlvbkRp
cikkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KLSAgICA8SW50RGlyIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JChQ
bGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L0ludERpcj4NCi0gICAgPExpbmtJbmNyZW1lbnRh
bCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCci
PnRydWU8L0xpbmtJbmNyZW1lbnRhbD4NCi0gICAgPE91dERpciBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JChTb2x1dGlvbkRpcikkKFBs
YXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KLSAgICA8SW50RGlyIENvbmRpdGlv
bj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4kKFBsYXRm
b3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPg0KLSAgICA8TGlua0luY3JlbWVudGFsIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5m
YWxzZTwvTGlua0luY3JlbWVudGFsPg0KLSAgICA8SW5jbHVkZVBhdGggQ29uZGl0aW9uPSInJChD
b25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiQoSW5jbHVkZVBhdGgp
PC9JbmNsdWRlUGF0aD4NCi0gICAgPExpYnJhcnlQYXRoIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4kKExpYnJhcnlQYXRoKTwvTGlicmFy
eVBhdGg+DQotICAgIDxJbmNsdWRlUGF0aCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo
UGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiQoSW5jbHVkZVBhdGgpPC9JbmNsdWRlUGF0aD4NCi0g
ICAgPExpYnJhcnlQYXRoIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nRGVidWd8eDY0JyI+JChMaWJyYXJ5UGF0aCk8L0xpYnJhcnlQYXRoPg0KLSAgICA8SW5jbHVk
ZVBhdGggQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xX
aW4zMiciPiQoSW5jbHVkZVBhdGgpPC9JbmNsdWRlUGF0aD4NCi0gICAgPEluY2x1ZGVQYXRoIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMici
PiQoSW5jbHVkZVBhdGgpPC9JbmNsdWRlUGF0aD4NCi0gICAgPExpYnJhcnlQYXRoIENvbmRpdGlv
bj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4kKExpYnJh
cnlQYXRoKTwvTGlicmFyeVBhdGg+DQotICAgIDxMaWJyYXJ5UGF0aCBDb25kaXRpb249IickKENv
bmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4kKExpYnJhcnlQYXRo
KTwvTGlicmFyeVBhdGg+DQotICA8L1Byb3BlcnR5R3JvdXA+DQotICA8SXRlbURlZmluaXRpb25H
cm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdp
bjMyJyI+DQotICAgIDxDbENvbXBpbGU+DQotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwv
T3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQoUHJv
amVjdERpcik7JChQcm9qZWN0RGlyKS8uLjsgJChQcm9qZWN0RGlyKS8uLi8uLi9pbmNsdWRlOyUo
QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3Jp
ZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfV0lORE9X
UztfVVNSRExMO0xJQkdMRVNWMl9FWFBPUlRTO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01J
Tk1BWDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+
DQotICAgICAgPE1pbmltYWxSZWJ1aWxkPnRydWU8L01pbmltYWxSZWJ1aWxkPg0KLSAgICAgIDxC
YXNpY1J1bnRpbWVDaGVja3M+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0K
LSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWc8L1J1bnRpbWVMaWJyYXJ5
Pg0KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlcj5Vc2U8L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAg
ICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWw0PC9XYXJuaW5nTGV2ZWw+DQotICAgICAgPFRyZWF0V2Fy
bmluZ0FzRXJyb3I+dHJ1ZTwvVHJlYXRXYXJuaW5nQXNFcnJvcj4NCi0gICAgICA8RGVidWdJbmZv
cm1hdGlvbkZvcm1hdD5FZGl0QW5kQ29udGludWU8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQot
ICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzPjQxMDA7NDEyNzs0MTg5OzQyMzk7NDI0NDs0
MjQ1OzQ1MTI7NDcwMjs0OTk2OyUoRGlzYWJsZVNwZWNpZmljV2FybmluZ3MpPC9EaXNhYmxlU3Bl
Y2lmaWNXYXJuaW5ncz4NCi0gICAgICA8UHJlY29tcGlsZWRIZWFkZXJGaWxlPnByZWNvbXBpbGVk
Lmg8L1ByZWNvbXBpbGVkSGVhZGVyRmlsZT4NCi0gICAgICA8QWRkaXRpb25hbE9wdGlvbnM+JChF
eHRlcm5hbENvbXBpbGVyT3B0aW9ucykgJShBZGRpdGlvbmFsT3B0aW9ucyk8L0FkZGl0aW9uYWxP
cHRpb25zPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPExpbms+DQotICAgICAgPEFkZGl0aW9u
YWxEZXBlbmRlbmNpZXM+ZDNkOS5saWI7ZHhndWlkLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNp
ZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPg0KLSAgICAgIDxNb2R1bGVEZWZpbml0aW9uRmls
ZT5saWJHTEVTdjIuZGVmPC9Nb2R1bGVEZWZpbml0aW9uRmlsZT4NCi0gICAgICA8R2VuZXJhdGVE
ZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4NCi0gICAgICA8
U3ViU3lzdGVtPldpbmRvd3M8L1N1YlN5c3RlbT4NCi0gICAgICA8RGF0YUV4ZWN1dGlvblByZXZl
bnRpb24+DQotICAgICAgPC9EYXRhRXhlY3V0aW9uUHJldmVudGlvbj4NCi0gICAgICA8VGFyZ2V0
TWFjaGluZT5NYWNoaW5lWDg2PC9UYXJnZXRNYWNoaW5lPg0KLSAgICA8L0xpbms+DQotICAgIDxQ
b3N0QnVpbGRFdmVudD4NCi0gICAgICA8Q29tbWFuZD4lNDBlY2hvIG9uDQotbWtkaXIgIiQoUHJv
amVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uKVwiDQotY29weSAiJChPdXREaXIpbGli
R0xFU3YyLmRsbCIgIiQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uKVwiDQot
Y29weSAiJChPdXREaXIpbGliR0xFU3YyLmxpYiIgIiQoUHJvamVjdERpcikuLlwuLlxsaWJcJChD
b25maWd1cmF0aW9uKVwiDQotJTQwZWNobyBvZmYNCi08L0NvbW1hbmQ+DQotICAgIDwvUG9zdEJ1
aWxkRXZlbnQ+DQotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQotICA8SXRlbURlZmluaXRpb25H
cm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8
V2luMzInIj4NCi0gICAgPENsQ29tcGlsZT4NCi0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVk
PC9PcHRpbWl6YXRpb24+DQotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPkFueVN1aXRh
YmxlPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVE
aXJlY3Rvcmllcz4kKFByb2plY3REaXIpOyQoUHJvamVjdERpcikvLi47ICQoUHJvamVjdERpcikv
Li4vLi4vaW5jbHVkZTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFs
SW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5BTkdM
RV9ESVNBQkxFX1RSQUNFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO0xJQkdMRVNWMl9F
WFBPUlRTO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWDtfU0VDVVJFX1NDTD0wOyUo
UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAg
ICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+DQotICAgICAg
PFByZWNvbXBpbGVkSGVhZGVyPlVzZTwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAgICAgPFdhcm5p
bmdMZXZlbD5MZXZlbDQ8L1dhcm5pbmdMZXZlbD4NCi0gICAgICA8VHJlYXRXYXJuaW5nQXNFcnJv
cj50cnVlPC9UcmVhdFdhcm5pbmdBc0Vycm9yPg0KLSAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9y
bWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCi0gICAgICA8RGlz
YWJsZVNwZWNpZmljV2FybmluZ3M+NDEwMDs0MTI3OzQxODk7NDIzOTs0MjQ0OzQyNDU7NDUxMjs0
NzAyOzQ3MTg7NDk5NjslKERpc2FibGVTcGVjaWZpY1dhcm5pbmdzKTwvRGlzYWJsZVNwZWNpZmlj
V2FybmluZ3M+DQotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyRmlsZT5wcmVjb21waWxlZC5oPC9Q
cmVjb21waWxlZEhlYWRlckZpbGU+DQotICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPiQoRXh0ZXJu
YWxDb21waWxlck9wdGlvbnMpICUoQWRkaXRpb25hbE9wdGlvbnMpPC9BZGRpdGlvbmFsT3B0aW9u
cz4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxMaW5rPg0KLSAgICAgIDxBZGRpdGlvbmFsRGVw
ZW5kZW5jaWVzPmQzZDkubGliO2R4Z3VpZC5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwv
QWRkaXRpb25hbERlcGVuZGVuY2llcz4NCi0gICAgICA8SWdub3JlQWxsRGVmYXVsdExpYnJhcmll
cz5mYWxzZTwvSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz4NCi0gICAgICA8TW9kdWxlRGVmaW5p
dGlvbkZpbGU+bGliR0xFU3YyLmRlZjwvTW9kdWxlRGVmaW5pdGlvbkZpbGU+DQotICAgICAgPEdl
bmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+DQot
ICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+DQotICAgICAgPE9wdGltaXplUmVm
ZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+DQotICAgICAgPEVuYWJsZUNPTURBVEZv
bGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4NCi0gICAgICA8RGF0YUV4ZWN1dGlvblBy
ZXZlbnRpb24+DQotICAgICAgPC9EYXRhRXhlY3V0aW9uUHJldmVudGlvbj4NCi0gICAgICA8VGFy
Z2V0TWFjaGluZT5NYWNoaW5lWDg2PC9UYXJnZXRNYWNoaW5lPg0KLSAgICA8L0xpbms+DQotICAg
IDxQb3N0QnVpbGRFdmVudD4NCi0gICAgICA8Q29tbWFuZD4lNDBlY2hvIG9uDQotbWtkaXIgIiQo
UHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uKVwiDQotY29weSAiJChPdXREaXIp
bGliR0xFU3YyLmRsbCIgIiQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uKVwi
DQotY29weSAiJChPdXREaXIpbGliR0xFU3YyLmxpYiIgIiQoUHJvamVjdERpcikuLlwuLlxsaWJc
JChDb25maWd1cmF0aW9uKVwiDQotJTQwZWNobyBvZmYNCi08L0NvbW1hbmQ+DQotICAgIDwvUG9z
dEJ1aWxkRXZlbnQ+DQotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQotICA8SXRlbURlZmluaXRp
b25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVn
fHg2NCciPg0KLSAgICA8TWlkbD4NCi0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJn
ZXRFbnZpcm9ubWVudD4NCi0gICAgPC9NaWRsPg0KLSAgICA8Q2xDb21waWxlPg0KLSAgICAgIDxP
cHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbElu
Y2x1ZGVEaXJlY3Rvcmllcz4kKFByb2plY3REaXIpLy4uOyAkKFByb2plY3REaXIpLy4uLy4uL2lu
Y2x1ZGU7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVE
aXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVH
O19XSU5ET1dTO19VU1JETEw7TElCR0xFU1YyX0VYUE9SVFM7X0NSVF9TRUNVUkVfTk9fREVQUkVD
QVRFO05PTUlOTUFYOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZp
bml0aW9ucz4NCi0gICAgICA8TWluaW1hbFJlYnVpbGQ+dHJ1ZTwvTWluaW1hbFJlYnVpbGQ+DQot
ICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVD
aGVja3M+DQotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1ZzwvUnVudGlt
ZUxpYnJhcnk+DQotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPlVzZTwvUHJlY29tcGlsZWRIZWFk
ZXI+DQotICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDQ8L1dhcm5pbmdMZXZlbD4NCi0gICAgICA8
RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+NDEwMDs0MTI3OzQxODk7NDIzOTs0MjQ0OzQyNDU7NDUx
Mjs0NzAyOzQ3MTg7NDk5NjslKERpc2FibGVTcGVjaWZpY1dhcm5pbmdzKTwvRGlzYWJsZVNwZWNp
ZmljV2FybmluZ3M+DQotICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFi
YXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KLSAgICAgIDxUcmVhdFdhcm5pbmdBc0Vycm9y
PnRydWU8L1RyZWF0V2FybmluZ0FzRXJyb3I+DQotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyRmls
ZT5wcmVjb21waWxlZC5oPC9QcmVjb21waWxlZEhlYWRlckZpbGU+DQotICAgICAgPEFkZGl0aW9u
YWxPcHRpb25zPiQoRXh0ZXJuYWxDb21waWxlck9wdGlvbnMpICUoQWRkaXRpb25hbE9wdGlvbnMp
PC9BZGRpdGlvbmFsT3B0aW9ucz4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxMaW5rPg0KLSAg
ICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmQzZDkubGliO2R4Z3VpZC5saWI7JShBZGRpdGlv
bmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCi0gICAgICA8TW9kdWxl
RGVmaW5pdGlvbkZpbGU+bGliR0xFU3YyLmRlZjwvTW9kdWxlRGVmaW5pdGlvbkZpbGU+DQotICAg
ICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRp
b24+DQotICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+DQotICAgICAgPERhdGFF
eGVjdXRpb25QcmV2ZW50aW9uPg0KLSAgICAgIDwvRGF0YUV4ZWN1dGlvblByZXZlbnRpb24+DQot
ICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4NCi0gICAgPC9M
aW5rPg0KLSAgICA8UG9zdEJ1aWxkRXZlbnQ+DQotICAgICAgPENvbW1hbmQ+JTQwZWNobyBvbg0K
LW1rZGlyICIkKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbilcIg0KLWNvcHkg
IiQoT3V0RGlyKWxpYkdMRVN2Mi5kbGwiICIkKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmln
dXJhdGlvbilcIg0KLWNvcHkgIiQoT3V0RGlyKWxpYkdMRVN2Mi5saWIiICIkKFByb2plY3REaXIp
Li5cLi5cbGliXCQoQ29uZmlndXJhdGlvbilcIg0KLSU0MGVjaG8gb2ZmDQotPC9Db21tYW5kPg0K
LSAgICA8L1Bvc3RCdWlsZEV2ZW50Pg0KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KLSAgPEl0
ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdSZWxlYXNlfHg2NCciPg0KLSAgICA8TWlkbD4NCi0gICAgICA8VGFyZ2V0RW52aXJvbm1l
bnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4NCi0gICAgPC9NaWRsPg0KLSAgICA8Q2xDb21waWxl
Pg0KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8
SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+QW55U3VpdGFibGU8L0lubGluZUZ1bmN0aW9uRXhwYW5z
aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQoUHJvamVjdERpcikv
Li47ICQoUHJvamVjdERpcikvLi4vLi4vaW5jbHVkZTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0
b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNz
b3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtMSUJHTEVTVjJfRVhQ
T1JUUztfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7Tk9NSU5NQVg7X1NFQ1VSRV9TQ0w9MDslKFBy
ZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAg
PFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5Pg0KLSAgICAgIDxQ
cmVjb21waWxlZEhlYWRlcj5Vc2U8L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDxXYXJuaW5n
TGV2ZWw+TGV2ZWw0PC9XYXJuaW5nTGV2ZWw+DQotICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5p
bmdzPjQxMDA7NDEyNzs0MTg5OzQyMzk7NDI0NDs0MjQ1OzQ1MTI7NDcwMjs0NzE4OzQ5OTY7JShE
aXNhYmxlU3BlY2lmaWNXYXJuaW5ncyk8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPg0KLSAgICAg
IDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlv
bkZvcm1hdD4NCi0gICAgICA8VHJlYXRXYXJuaW5nQXNFcnJvcj50cnVlPC9UcmVhdFdhcm5pbmdB
c0Vycm9yPg0KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlckZpbGU+cHJlY29tcGlsZWQuaDwvUHJl
Y29tcGlsZWRIZWFkZXJGaWxlPg0KLSAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4kKEV4dGVybmFs
Q29tcGlsZXJPcHRpb25zKSAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlvbnM+
DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8TGluaz4NCi0gICAgICA8QWRkaXRpb25hbERlcGVu
ZGVuY2llcz5kM2Q5LmxpYjtkeGd1aWQubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0Fk
ZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQotICAgICAgPElnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM+
ZmFsc2U8L0lnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM+DQotICAgICAgPE1vZHVsZURlZmluaXRp
b25GaWxlPmxpYkdMRVN2Mi5kZWY8L01vZHVsZURlZmluaXRpb25GaWxlPg0KLSAgICAgIDxHZW5l
cmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPg0KLSAg
ICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPg0KLSAgICAgIDxPcHRpbWl6ZVJlZmVy
ZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPg0KLSAgICAgIDxFbmFibGVDT01EQVRGb2xk
aW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+DQotICAgICAgPERhdGFFeGVjdXRpb25QcmV2
ZW50aW9uPg0KLSAgICAgIDwvRGF0YUV4ZWN1dGlvblByZXZlbnRpb24+DQotICAgICAgPFRhcmdl
dE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4NCi0gICAgPC9MaW5rPg0KLSAgICA8
UG9zdEJ1aWxkRXZlbnQ+DQotICAgICAgPENvbW1hbmQ+JTQwZWNobyBvbg0KLW1rZGlyICIkKFBy
b2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbilcIg0KLWNvcHkgIiQoT3V0RGlyKWxp
YkdMRVN2Mi5kbGwiICIkKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbilcIg0K
LWNvcHkgIiQoT3V0RGlyKWxpYkdMRVN2Mi5saWIiICIkKFByb2plY3REaXIpLi5cLi5cbGliXCQo
Q29uZmlndXJhdGlvbilcIg0KLSU0MGVjaG8gb2ZmDQotPC9Db21tYW5kPg0KLSAgICA8L1Bvc3RC
dWlsZEV2ZW50Pg0KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KLSAgPEl0ZW1Hcm91cD4NCi0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx0aGlyZF9wYXJ0eVxtdXJtdXJoYXNoXE11cm11ckhh
c2gzLmNwcCI+DQotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmln
dXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5Ob3RVc2luZzwvUHJlY29tcGls
ZWRIZWFkZXI+DQotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmln
dXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPk5vdFVzaW5nPC9QcmVjb21w
aWxlZEhlYWRlcj4NCi0gICAgICA8UHJlY29tcGlsZWRIZWFkZXIgQ29uZGl0aW9uPSInJChDb25m
aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5Ob3RVc2luZzwvUHJlY29tcGls
ZWRIZWFkZXI+DQotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmln
dXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5Ob3RVc2luZzwvUHJlY29tcGls
ZWRIZWFkZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkJ1
ZmZlci5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iQ29udGV4dC5jcHAiIC8+DQot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cY29tbW9uXGRlYnVnLmNwcCI+DQotICAgICAgPFBy
ZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nRGVidWd8V2luMzInIj5Ob3RVc2luZzwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAgICAgPFBy
ZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nUmVsZWFzZXxXaW4zMiciPk5vdFVzaW5nPC9QcmVjb21waWxlZEhlYWRlcj4NCi0gICAgICA8
UHJlY29tcGlsZWRIZWFkZXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdEZWJ1Z3x4NjQnIj5Ob3RVc2luZzwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAgICAgPFBy
ZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nUmVsZWFzZXx4NjQnIj5Ob3RVc2luZzwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAgIDwvQ2xD
b21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGNvbW1vblxldmVudF90cmFjZXIu
Y3BwIj4NCi0gICAgICA8UHJlY29tcGlsZWRIZWFkZXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPk5vdFVzaW5nPC9QcmVjb21waWxlZEhl
YWRlcj4NCi0gICAgICA8UHJlY29tcGlsZWRIZWFkZXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+Tm90VXNpbmc8L1ByZWNvbXBpbGVk
SGVhZGVyPg0KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlciBDb25kaXRpb249IickKENvbmZpZ3Vy
YXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPk5vdFVzaW5nPC9QcmVjb21waWxlZEhl
YWRlcj4NCi0gICAgICA8UHJlY29tcGlsZWRIZWFkZXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPk5vdFVzaW5nPC9QcmVjb21waWxlZEhl
YWRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iRmVuY2Uu
Y3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkZsb2F0MTZUb0Zsb2F0MzIuY3BwIiAv
Pg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkZyYW1lYnVmZmVyLmNwcCIgLz4NCi0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSJIYW5kbGVBbGxvY2F0b3IuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9ImxpYkdMRVN2Mi5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0ibWFp
bi5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icHJlY29tcGlsZWQuY3BwIj4NCi0g
ICAgICA8UHJlY29tcGlsZWRIZWFkZXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkNyZWF0ZTwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAg
ICAgPFByZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPkNyZWF0ZTwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAg
ICAgPFByZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nRGVidWd8eDY0JyI+Q3JlYXRlPC9QcmVjb21waWxlZEhlYWRlcj4NCi0gICAgICA8
UHJlY29tcGlsZWRIZWFkZXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdSZWxlYXNlfHg2NCciPkNyZWF0ZTwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAgIDwvQ2xD
b21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlByb2dyYW0uY3BwIiAvPg0KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9IlByb2dyYW1CaW5hcnkuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9IlF1ZXJ5LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxjb21t
b25cUmVmQ291bnRPYmplY3QuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlJlbmRl
cmJ1ZmZlci5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcQmxpdC5j
cHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcRmVuY2UxMS5jcHAiIC8+
DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcRmVuY2U5LmNwcCIgLz4NCi0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxCdWZmZXJTdG9yYWdlLmNwcCIgLz4NCi0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxCdWZmZXJTdG9yYWdlMTEuY3BwIiAvPg0KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXEJ1ZmZlclN0b3JhZ2U5LmNwcCIgLz4NCi0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxJbWFnZS5jcHAiIC8+DQotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcSW1hZ2U5LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSJyZW5kZXJlclxJbmRleEJ1ZmZlci5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0icmVuZGVyZXJcSW5kZXhCdWZmZXIxMS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0icmVuZGVyZXJcSW5kZXhCdWZmZXI5LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSJyZW5kZXJlclxJbmRleERhdGFNYW5hZ2VyLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSJyZW5kZXJlclxJbWFnZVNTRTIuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9InJlbmRlcmVyXEltYWdlMTEuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJl
bmRlcmVyXEluZGV4UmFuZ2VDYWNoZS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
cmVuZGVyZXJcSW5wdXRMYXlvdXRDYWNoZS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0icmVuZGVyZXJcUXVlcnkxMS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVu
ZGVyZXJcUXVlcnk5LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxS
ZW5kZXJlci5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcUmVuZGVy
ZXIxMS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJccmVuZGVyZXIx
MV91dGlscy5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcUmVuZGVy
ZXI5LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxyZW5kZXJlcjlf
dXRpbHMuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFJlbmRlclRh
cmdldDExLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxSZW5kZXJU
YXJnZXQ5LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxSZW5kZXJT
dGF0ZUNhY2hlLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxTaGFk
ZXJFeGVjdXRhYmxlMTEuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVy
XFNoYWRlckV4ZWN1dGFibGU5LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5k
ZXJlclxTd2FwQ2hhaW4xMS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVy
ZXJcU3dhcENoYWluOS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJc
VGV4dHVyZVN0b3JhZ2UuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVy
XFRleHR1cmVTdG9yYWdlMTEuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRl
cmVyXFRleHR1cmVTdG9yYWdlOS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVu
ZGVyZXJcVmVydGV4QnVmZmVyLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5k
ZXJlclxWZXJ0ZXhCdWZmZXIxMS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVu
ZGVyZXJcVmVydGV4QnVmZmVyOS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVu
ZGVyZXJcVmVydGV4RGF0YU1hbmFnZXIuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
InJlbmRlcmVyXFZlcnRleERlY2xhcmF0aW9uQ2FjaGUuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9IlJlc291cmNlTWFuYWdlci5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iU2hhZGVyLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJUZXh0dXJlLmNwcCIg
Lz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJVbmlmb3JtLmNwcCIgLz4NCi0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSJ1dGlsaXRpZXMuY3BwIiAvPg0KLSAgPC9JdGVtR3JvdXA+DQotICA8SXRl
bUdyb3VwPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGNvbW1vblxkZWJ1Zy5oIiAvPg0K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGNvbW1vblxldmVudF90cmFjZXIuaCIgLz4NCi0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxjb21tb25cc3lzdGVtLmgiIC8+DQotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cdGhpcmRfcGFydHlcbXVybXVyaGFzaFxNdXJtdXJIYXNoMy5oIiAv
Pg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHRoaXJkX3BhcnR5XHRyYWNlX2V2ZW50XHRy
YWNlX2V2ZW50LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iYW5nbGV0eXBlcy5oIiAv
Pg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkJpbmFyeVN0cmVhbS5oIiAvPg0KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9IkJ1ZmZlci5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImNv
bnN0YW50cy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkNvbnRleHQuaCIgLz4NCi0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSJGZW5jZS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9IkZyYW1lYnVmZmVyLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5j
bHVkZVxHTEVTMlxnbDIuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNs
dWRlXEdMRVMyXGdsMmV4dC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGlu
Y2x1ZGVcR0xFUzJcZ2wycGxhdGZvcm0uaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJI
YW5kbGVBbGxvY2F0b3IuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJtYWluLmgiIC8+
DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0ibWF0aHV0aWwuaCIgLz4NCi0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSJwcmVjb21waWxlZC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlBy
b2dyYW0uaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJQcm9ncmFtQmluYXJ5LmgiIC8+
DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iUXVlcnkuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxjb21tb25cUmVmQ291bnRPYmplY3QuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSJSZW5kZXJidWZmZXIuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5k
ZXJlclxCbGl0LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcRmVuY2Ux
MS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEZlbmNlOS5oIiAvPg0K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEZlbmNlSW1wbC5oIiAvPg0KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEJ1ZmZlclN0b3JhZ2UuaCIgLz4NCi0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxCdWZmZXJTdG9yYWdlMTEuaCIgLz4NCi0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxCdWZmZXJTdG9yYWdlOS5oIiAvPg0KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXGdlbmVyYXRlbWlwLmgiIC8+DQotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0icmVuZGVyZXJcSW1hZ2UuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSJyZW5kZXJlclxJbWFnZTExLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVy
ZXJcSW1hZ2U5LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcSW5kZXhC
dWZmZXIuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxJbmRleEJ1ZmZl
cjExLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcSW5kZXhCdWZmZXI5
LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcSW5kZXhEYXRhTWFuYWdl
ci5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEluZGV4UmFuZ2VDYWNo
ZS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXElucHV0TGF5b3V0Q2Fj
aGUuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxRdWVyeTExLmgiIC8+
DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcUXVlcnlJbXBsLmgiIC8+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcUXVlcnk5LmgiIC8+DQotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0icmVuZGVyZXJcUmVuZGVyZXIuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSJyZW5kZXJlclxSZW5kZXJlcjExLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
cmVuZGVyZXJccmVuZGVyZXIxMV91dGlscy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
InJlbmRlcmVyXFJlbmRlcmVyOS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRl
cmVyXHJlbmRlcmVyOV91dGlscy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRl
cmVyXFJlbmRlclRhcmdldC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVy
XFJlbmRlclRhcmdldDExLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJc
UmVuZGVyVGFyZ2V0OS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFJl
bmRlclN0YXRlQ2FjaGUuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxT
aGFkZXJDYWNoZS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFNoYWRl
ckV4ZWN1dGFibGUuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxTaGFk
ZXJFeGVjdXRhYmxlMTEuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxT
aGFkZXJFeGVjdXRhYmxlOS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVy
XHNoYWRlcnNcY29tcGlsZWRcY2xlYXIxMXZzLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0icmVuZGVyZXJcc2hhZGVyc1xjb21waWxlZFxjbGVhcm11bHRpcGxlMTFwcy5oIiAvPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRcY2xlYXJzaW5n
bGUxMXBzLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xj
b21waWxlZFxjb21wb25lbnRtYXNrcHMuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJy
ZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVkXGZsaXB5dnMuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVkXGx1bWluYW5jZXBzLmgiIC8+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xjb21waWxlZFxwYXNzdGhyb3Vn
aDExdnMuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXGNv
bXBpbGVkXHBhc3N0aHJvdWdobHVtMTFwcy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
InJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRccGFzc3Rocm91Z2hsdW1hbHBoYTExcHMuaCIgLz4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVkXHBhc3N0
aHJvdWdocHMuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJz
XGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiMTFwcy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9InJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRccGFzc3Rocm91Z2hyZ2JhMTFwcy5oIiAvPg0K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRcc3RhbmRh
cmR2cy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFN3YXBDaGFpbi5o
IiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFN3YXBDaGFpbjExLmgiIC8+
DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcU3dhcENoYWluOS5oIiAvPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFRleHR1cmVTdG9yYWdlLmgiIC8+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcVGV4dHVyZVN0b3JhZ2UxMS5oIiAvPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFRleHR1cmVTdG9yYWdlOS5oIiAvPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFZlcnRleEJ1ZmZlci5oIiAvPg0KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFZlcnRleEJ1ZmZlcjExLmgiIC8+DQotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcVmVydGV4QnVmZmVyOS5oIiAvPg0KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXHZlcnRleGNvbnZlcnNpb24uaCIgLz4NCi0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxWZXJ0ZXhEYXRhTWFuYWdlci5oIiAvPg0KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFZlcnRleERlY2xhcmF0aW9uQ2FjaGUuaCIgLz4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZXNvdXJjZS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9IlJlc291cmNlTWFuYWdlci5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
IlNoYWRlci5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlRleHR1cmUuaCIgLz4NCi0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSJVbmlmb3JtLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0idXRpbGl0aWVzLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cY29tbW9u
XHZlcnNpb24uaCIgLz4NCi0gIDwvSXRlbUdyb3VwPg0KLSAgPEl0ZW1Hcm91cD4NCi0gICAgPE5v
bmUgSW5jbHVkZT0ibGliR0xFU3YyLmRlZiIgLz4NCi0gICAgPE5vbmUgSW5jbHVkZT0icmVuZGVy
ZXJcc2hhZGVyc1xCbGl0LnBzIiAvPg0KLSAgICA8Tm9uZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFk
ZXJzXEJsaXQudnMiIC8+DQotICAgIDxOb25lIEluY2x1ZGU9InJlbmRlcmVyXHNoYWRlcnNcQ2xl
YXIxMS5obHNsIiAvPg0KLSAgICA8Tm9uZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXGdlbmVy
YXRlX3NoYWRlcnMuYmF0IiAvPg0KLSAgICA8Tm9uZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJz
XFBhc3N0aHJvdWdoMTEuaGxzbCIgLz4NCi0gIDwvSXRlbUdyb3VwPg0KLSAgPEl0ZW1Hcm91cD4N
Ci0gICAgPFJlc291cmNlQ29tcGlsZSBJbmNsdWRlPSJsaWJHTEVTdjIucmMiIC8+DQotICA8L0l0
ZW1Hcm91cD4NCi0gIDxJdGVtR3JvdXA+DQotICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9
Ii4uXGNvbXBpbGVyXHByZXByb2Nlc3NvclxwcmVwcm9jZXNzb3IudmN4cHJvaiI+DQotICAgICAg
PFByb2plY3Q+e2ZiZTMyZGYzLTBmYjAtNGYyZi1hNDI0LTJjMjFiZDdiYzMyNX08L1Byb2plY3Q+
DQotICAgIDwvUHJvamVjdFJlZmVyZW5jZT4NCi0gICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVk
ZT0iLi5cY29tcGlsZXJcdHJhbnNsYXRvci52Y3hwcm9qIj4NCi0gICAgICA8UHJvamVjdD57NWIz
YTZkYjgtMWU3ZS00MGQ3LTkyYjktZGE4YWFlNjE5ZmFkfTwvUHJvamVjdD4NCi0gICAgPC9Qcm9q
ZWN0UmVmZXJlbmNlPg0KLSAgPC9JdGVtR3JvdXA+DQotICA8SW1wb3J0IFByb2plY3Q9IiQoVkNU
YXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPg0KLSAgPEltcG9ydEdyb3VwIExh
YmVsPSJFeHRlbnNpb25UYXJnZXRzIj4NCi0gIDwvSW1wb3J0R3JvdXA+DQotPC9Qcm9qZWN0Pgpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjeHByb2ouZmlsdGVycwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTIyOWJhZjEyNGUxZTllZjUzOGEyNWYzMzZj
NmVmZjUzYThlNTU4ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52Y3hw
cm9qLmZpbHRlcnMKKysrIC9kZXYvbnVsbApAQCAtMSw1MjcgKzAsMCBAQAot77u/PD94bWwgdmVy
c2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08UHJvamVjdCBUb29sc1ZlcnNpb249IjQu
MCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQv
MjAwMyI+DQotICA8SXRlbUdyb3VwPg0KLSAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxl
cyI+DQotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJB
MzJENzUyQTJGRn08L1VuaXF1ZUlkZW50aWZpZXI+DQotICAgICAgPEV4dGVuc2lvbnM+Y3BwO2M7
Y2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXg8L0V4dGVuc2lvbnM+DQotICAgIDwv
RmlsdGVyPg0KLSAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlcyI+DQotICAgICAgPFVu
aXF1ZUlkZW50aWZpZXI+ezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJGQn08L1Vu
aXF1ZUlkZW50aWZpZXI+DQotICAgICAgPEV4dGVuc2lvbnM+aDtocHA7aHh4O2htO2lubDtpbmM7
eHNkPC9FeHRlbnNpb25zPg0KLSAgICA8L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJbmNsdWRlPSJU
aGlyZCBQYXJ0eSI+DQotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+e2RjMWRhYzQwLTM1NjMtNDFi
ZS05ZTJkLWMyNTg4ZDg2NzBmYn08L1VuaXF1ZUlkZW50aWZpZXI+DQotICAgIDwvRmlsdGVyPg0K
LSAgICA8RmlsdGVyIEluY2x1ZGU9IlRoaXJkIFBhcnR5XE11cm11ckhhc2giPg0KLSAgICAgIDxV
bmlxdWVJZGVudGlmaWVyPntiMDAwNWQyZi05YjRhLTQ2NTktYTI3MC0xMzg4MTExNzRmNzN9PC9V
bmlxdWVJZGVudGlmaWVyPg0KLSAgICA8L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJbmNsdWRlPSJI
ZWFkZXIgRmlsZXNcUmVuZGVyZXIiPg0KLSAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns1NjJlNDY5
ZC0xYWJiLTQ0YmMtYjdmYS01NWVlZmJmNzVhY2N9PC9VbmlxdWVJZGVudGlmaWVyPg0KLSAgICA8
L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJbmNsdWRlPSJTaGFkZXJzIj4NCi0gICAgICA8VW5pcXVl
SWRlbnRpZmllcj57NmRjMDMwNmYtNjM5Ni00ZTgwLTllZjktMDliNThhYTUzYzRkfTwvVW5pcXVl
SWRlbnRpZmllcj4NCi0gICAgPC9GaWx0ZXI+DQotICAgIDxGaWx0ZXIgSW5jbHVkZT0iU2hhZGVy
c1xDb21waWxlZCI+DQotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezYzMzI3MDViLTE5OTktNDI5
Mi1hMzhiLWRkNDczMjk3MzRhYX08L1VuaXF1ZUlkZW50aWZpZXI+DQotICAgIDwvRmlsdGVyPg0K
LSAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlc1xSZW5kZXJlciI+DQotICAgICAgPFVu
aXF1ZUlkZW50aWZpZXI+ezkzYTc2OTY0LTc3YTMtNGIyMC1hNmY1LWUxNGU3NjJkNGUxNH08L1Vu
aXF1ZUlkZW50aWZpZXI+DQotICAgIDwvRmlsdGVyPg0KLSAgICA8RmlsdGVyIEluY2x1ZGU9Ikhl
YWRlciBGaWxlc1xSZW5kZXJlcjkiPg0KLSAgICAgIDxVbmlxdWVJZGVudGlmaWVyPnszODc3ZjM1
ZS04NDVjLTRlOTUtYjlhNS1jN2Q4YjlmMzA3YzV9PC9VbmlxdWVJZGVudGlmaWVyPg0KLSAgICA8
L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXNcUmVuZGVyZXIxMSI+
DQotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezJkNzBmZDYwLTZkZWEtNDg5Zi1hYzA5LTE2ODkw
ZDMyNTY2OX08L1VuaXF1ZUlkZW50aWZpZXI+DQotICAgIDwvRmlsdGVyPg0KLSAgICA8RmlsdGVy
IEluY2x1ZGU9IlNvdXJjZSBGaWxlc1xSZW5kZXJlcjkiPg0KLSAgICAgIDxVbmlxdWVJZGVudGlm
aWVyPns2MGUxNGYwNC0yY2YyLTRhMDctYjNlZi03YzY4YTgyYmEyZDl9PC9VbmlxdWVJZGVudGlm
aWVyPg0KLSAgICA8L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXNc
UmVuZGVyZXIxMSI+DQotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezcyZGI2MWQzLWUwODEtNGI1
OC1iYzYzLWEwNGE4YTcwNTg1Zn08L1VuaXF1ZUlkZW50aWZpZXI+DQotICAgIDwvRmlsdGVyPg0K
LSAgICA8RmlsdGVyIEluY2x1ZGU9IlRoaXJkIFBhcnR5XHRyYWNlX2V2ZW50Ij4NCi0gICAgICA8
VW5pcXVlSWRlbnRpZmllcj57ZWJmYzE2MTQtOGYwYi00OGM3LWI2YmQtMjk1YmY5MWVmODVjfTwv
VW5pcXVlSWRlbnRpZmllcj4NCi0gICAgPC9GaWx0ZXI+DQotICA8L0l0ZW1Hcm91cD4NCi0gIDxJ
dGVtR3JvdXA+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iQnVmZmVyLmNwcCI+DQotICAgICAg
PEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iQ29udGV4dC5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZp
bGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGNvbW1vblxkZWJ1Zy5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0
ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkZlbmNlLmNw
cCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBp
bGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iRmxvYXQxNlRvRmxvYXQzMi5jcHAiPg0KLSAg
ICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9IkZyYW1lYnVmZmVyLmNwcCI+DQotICAgICAgPEZpbHRlcj5T
b3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iSGFuZGxlQWxsb2NhdG9yLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmls
ZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
bGliR0xFU3YyLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0g
ICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0ibWFpbi5jcHAiPg0KLSAg
ICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9IlByb2dyYW0uY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJj
ZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSJQcm9ncmFtQmluYXJ5LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0Zp
bHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iUXVlcnku
Y3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29t
cGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxjb21tb25cUmVmQ291bnRPYmplY3Qu
Y3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29t
cGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJSZW5kZXJidWZmZXIuY3BwIj4NCi0gICAg
ICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSJSZXNvdXJjZU1hbmFnZXIuY3BwIj4NCi0gICAgICA8RmlsdGVy
PlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSJTaGFkZXIuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmls
dGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJUZXh0dXJl
LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENv
bXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0idXRpbGl0aWVzLmNwcCI+DQotICAgICAg
PEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcSW1hZ2UuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNv
dXJjZSBGaWxlc1xSZW5kZXJlcjwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxUZXh0dXJlU3RvcmFnZS5jcHAiPg0KLSAgICAgIDxG
aWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFJlbmRlcmVyLmNwcCI+DQotICAgICAg
PEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+
DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cdGhpcmRfcGFydHlcbXVybXVyaGFzaFxNdXJt
dXJIYXNoMy5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+VGhpcmQgUGFydHlcTXVybXVySGFzaDwvRmls
dGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJl
clxJbmRleERhdGFNYW5hZ2VyLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVu
ZGVyZXI8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0icmVuZGVyZXJcVmVydGV4RGF0YU1hbmFnZXIuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJj
ZSBGaWxlc1xSZW5kZXJlcjwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSJyZW5kZXJlclxJbWFnZS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+UmVuZGVy
ZXI8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
cmVuZGVyZXJcSW1hZ2VTU0UyLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVu
ZGVyZXI8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0icmVuZGVyZXJcVmVydGV4QnVmZmVyLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmls
ZXNcUmVuZGVyZXI8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0icmVuZGVyZXJcSW5kZXhCdWZmZXIuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJj
ZSBGaWxlc1xSZW5kZXJlcjwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSJVbmlmb3JtLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8
L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVu
ZGVyZXJcQnVmZmVyU3RvcmFnZS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJl
bmRlcmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9InJlbmRlcmVyXEJ1ZmZlclN0b3JhZ2UxMS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNl
IEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcRmVuY2UxMS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291
cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcSW1hZ2UxMS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+
U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcSW5kZXhCdWZmZXIxMS5jcHAiPg0KLSAgICAg
IDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBp
bGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcUXVlcnkxMS5jcHAiPg0KLSAg
ICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbENv
bXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcUmVuZGVyZXIxMS5jcHAi
Pg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAg
PC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJccmVuZGVyZXIx
MV91dGlscy5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0Zp
bHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVy
ZXJcUmVuZGVyVGFyZ2V0MTEuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5k
ZXJlcjExPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9InJlbmRlcmVyXFNoYWRlckV4ZWN1dGFibGUxMS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291
cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcU3dhcENoYWluMTEuY3BwIj4NCi0gICAgICA8Rmls
dGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFRleHR1cmVTdG9yYWdlMTEuY3BwIj4N
Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+DQotICAgIDwv
Q2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFZlcnRleEJ1ZmZl
cjExLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVy
Pg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxC
dWZmZXJTdG9yYWdlOS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVy
OTwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJy
ZW5kZXJlclxGZW5jZTkuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJl
cjk8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
cmVuZGVyZXJcSW1hZ2U5LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVy
ZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
InJlbmRlcmVyXEluZGV4QnVmZmVyOS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVz
XFJlbmRlcmVyOTwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSJyZW5kZXJlclxRdWVyeTkuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxl
c1xSZW5kZXJlcjk8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0icmVuZGVyZXJcUmVuZGVyZXI5LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2Ug
RmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9InJlbmRlcmVyXHJlbmRlcmVyOV91dGlscy5jcHAiPg0KLSAgICAgIDxGaWx0
ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxSZW5kZXJUYXJnZXQ5LmNwcCI+DQotICAg
ICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xDb21w
aWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFNoYWRlckV4ZWN1dGFibGU5
LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQot
ICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFN3YXBD
aGFpbjkuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRl
cj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJc
VGV4dHVyZVN0b3JhZ2U5LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVy
ZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
InJlbmRlcmVyXFZlcnRleEJ1ZmZlcjkuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxl
c1xSZW5kZXJlcjk8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0icmVuZGVyZXJcQmxpdC5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVz
XFJlbmRlcmVyOTwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSJyZW5kZXJlclxJbnB1dExheW91dENhY2hlLmNwcCI+DQotICAgICAgPEZpbHRlcj5T
b3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxSZW5kZXJTdGF0ZUNhY2hlLmNwcCI+DQotICAg
ICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPg0KLSAgICA8L0NsQ29t
cGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxWZXJ0ZXhEZWNsYXJhdGlv
bkNhY2hlLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI5PC9GaWx0
ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InByZWNvbXBp
bGVkLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9D
bENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcSW5kZXhSYW5nZUNh
Y2hlLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI8L0ZpbHRlcj4N
Ci0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cY29tbW9uXGV2
ZW50X3RyYWNlci5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQot
ICAgIDwvQ2xDb21waWxlPg0KLSAgPC9JdGVtR3JvdXA+DQotICA8SXRlbUdyb3VwPg0KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9IkJpbmFyeVN0cmVhbS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRl
ciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSJCdWZmZXIuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0g
ICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iQ29udGV4dC5oIj4NCi0g
ICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSJGZW5jZS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBG
aWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSJGcmFtZWJ1ZmZlci5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0K
LSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRl
XEdMRVMyXGdsMi5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAg
ICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXEdM
RVMyXGdsMmV4dC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAg
ICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXEdM
RVMyXGdsMnBsYXRmb3JtLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+
DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkhhbmRsZUFsbG9j
YXRvci5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0Ns
SW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJtYWluLmgiPg0KLSAgICAgIDxGaWx0
ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Im1hdGh1dGlsLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9G
aWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlByb2dy
YW0uaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbElu
Y2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iUHJvZ3JhbUJpbmFyeS5oIj4NCi0gICAg
ICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSJRdWVyeS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxl
czwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
Llxjb21tb25cUmVmQ291bnRPYmplY3QuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8
L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iUmVu
ZGVyYnVmZmVyLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAg
IDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlc291cmNlLmgiPg0KLSAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlJlc291cmNlTWFuYWdlci5oIj4NCi0gICAgICA8RmlsdGVy
PkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSJTaGFkZXIuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRl
cj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iVGV4dHVyZS5o
Ij4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVk
ZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJ1dGlsaXRpZXMuaCI+DQotICAgICAgPEZpbHRl
cj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cY29tbW9uXHZlcnNpb24uaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIg
RmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iYW5nbGV0eXBlcy5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0K
LSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx0aGlyZF9wYXJ0
eVxtdXJtdXJoYXNoXE11cm11ckhhc2gzLmgiPg0KLSAgICAgIDxGaWx0ZXI+VGhpcmQgUGFydHlc
TXVybXVySGFzaDwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSJVbmlmb3JtLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+
DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXHNo
YWRlcnNcY29tcGlsZWRccGFzc3Rocm91Z2gxMXZzLmgiPg0KLSAgICAgIDxGaWx0ZXI+U2hhZGVy
c1xDb21waWxlZDwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVkXHBhc3N0aHJvdWdocHMuaCI+DQotICAg
ICAgPEZpbHRlcj5TaGFkZXJzXENvbXBpbGVkPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRcc3RhbmRh
cmR2cy5oIj4NCi0gICAgICA8RmlsdGVyPlNoYWRlcnNcQ29tcGlsZWQ8L0ZpbHRlcj4NCi0gICAg
PC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xj
b21waWxlZFxjb21wb25lbnRtYXNrcHMuaCI+DQotICAgICAgPEZpbHRlcj5TaGFkZXJzXENvbXBp
bGVkPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
InJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRcZmxpcHl2cy5oIj4NCi0gICAgICA8RmlsdGVyPlNo
YWRlcnNcQ29tcGlsZWQ8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xjb21waWxlZFxsdW1pbmFuY2Vwcy5oIj4NCi0g
ICAgICA8RmlsdGVyPlNoYWRlcnNcQ29tcGlsZWQ8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+
DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xjb21waWxlZFxwYXNz
dGhyb3VnaHJnYmExMXBzLmgiPg0KLSAgICAgIDxGaWx0ZXI+U2hhZGVyc1xDb21waWxlZDwvRmls
dGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJl
clxzaGFkZXJzXGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiMTFwcy5oIj4NCi0gICAgICA8RmlsdGVy
PlNoYWRlcnNcQ29tcGlsZWQ8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xjb21waWxlZFxwYXNzdGhyb3VnaGx1bTEx
cHMuaCI+DQotICAgICAgPEZpbHRlcj5TaGFkZXJzXENvbXBpbGVkPC9GaWx0ZXI+DQotICAgIDwv
Q2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXHNoYWRlcnNcY29t
cGlsZWRccGFzc3Rocm91Z2hsdW1hbHBoYTExcHMuaCI+DQotICAgICAgPEZpbHRlcj5TaGFkZXJz
XENvbXBpbGVkPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9InJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRcY2xlYXIxMXZzLmgiPg0KLSAgICAgIDxG
aWx0ZXI+U2hhZGVyc1xDb21waWxlZDwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVkXGNsZWFybXVsdGlw
bGUxMXBzLmgiPg0KLSAgICAgIDxGaWx0ZXI+U2hhZGVyc1xDb21waWxlZDwvRmlsdGVyPg0KLSAg
ICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJz
XGNvbXBpbGVkXGNsZWFyc2luZ2xlMTFwcy5oIj4NCi0gICAgICA8RmlsdGVyPlNoYWRlcnNcQ29t
cGlsZWQ8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cY29tbW9uXHN5c3RlbS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmls
dGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxjb21t
b25cZGVidWcuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAg
PC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcQnVmZmVyU3Rv
cmFnZS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjwvRmlsdGVyPg0K
LSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxGZW5j
ZUltcGwuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI8L0ZpbHRlcj4N
Ci0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcZ2Vu
ZXJhdGVtaXAuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI8L0ZpbHRl
cj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJc
SW1hZ2UuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI8L0ZpbHRlcj4N
Ci0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcSW5k
ZXhCdWZmZXIuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI8L0ZpbHRl
cj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJc
SW5kZXhEYXRhTWFuYWdlci5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJl
cjwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJy
ZW5kZXJlclxRdWVyeUltcGwuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVy
ZXI8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
cmVuZGVyZXJcUmVuZGVyZXIuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVy
ZXI8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
cmVuZGVyZXJcUmVuZGVyVGFyZ2V0LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJl
bmRlcmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9InJlbmRlcmVyXFNoYWRlckV4ZWN1dGFibGUuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIg
RmlsZXNcUmVuZGVyZXI8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0icmVuZGVyZXJcU3dhcENoYWluLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVy
IEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9InJlbmRlcmVyXFRleHR1cmVTdG9yYWdlLmgiPg0KLSAgICAgIDxGaWx0ZXI+
SGVhZGVyIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFZlcnRleEJ1ZmZlci5oIj4NCi0gICAgICA8Rmls
dGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclx2ZXJ0ZXhjb252ZXJzaW9uLmgiPg0KLSAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNs
dWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFZlcnRleERhdGFNYW5hZ2Vy
LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAg
IDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEJ1ZmZlclN0
b3JhZ2UxMS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjExPC9GaWx0
ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVy
XEluZGV4QnVmZmVyMTEuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIx
MTwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJy
ZW5kZXJlclxRdWVyeTExLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVy
MTE8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
cmVuZGVyZXJcUmVuZGVyZXIxMS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5k
ZXJlcjExPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9InJlbmRlcmVyXFJlbmRlclRhcmdldDExLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZp
bGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0icmVuZGVyZXJcU2hhZGVyRXhlY3V0YWJsZTExLmgiPg0KLSAgICAgIDxGaWx0
ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcU3dhcENoYWluMTEuaCI+DQotICAgICAg
PEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVk
ZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxUZXh0dXJlU3RvcmFnZTExLmgi
Pg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAg
PC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcVmVydGV4QnVm
ZmVyMTEuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVy
Pg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxC
dWZmZXJTdG9yYWdlOS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjk8
L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVu
ZGVyZXJcRmVuY2U5LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyOTwv
RmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5k
ZXJlclxJbWFnZTkuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9G
aWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRl
cmVyXEluZGV4QnVmZmVyOS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJl
cjk8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
cmVuZGVyZXJcUXVlcnk5LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVy
OTwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJy
ZW5kZXJlclxSZW5kZXJlcjkuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVy
ZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
InJlbmRlcmVyXHJlbmRlcmVyOV91dGlscy5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxl
c1xSZW5kZXJlcjk8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0icmVuZGVyZXJcUmVuZGVyVGFyZ2V0OS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRl
ciBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcU2hhZGVyRXhlY3V0YWJsZTkuaCI+DQotICAgICAgPEZp
bHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFN3YXBDaGFpbjkuaCI+DQotICAgICAg
PEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRl
Pg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFRleHR1cmVTdG9yYWdlOS5oIj4N
Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4NCi0gICAgPC9D
bEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcVmVydGV4QnVmZmVy
OS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4NCi0g
ICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcRmVuY2Ux
MS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+DQot
ICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEltYWdl
MTEuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPg0K
LSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxyZW5k
ZXJlcjExX3V0aWxzLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyMTE8
L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVu
ZGVyZXJcRmVuY2U5LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyXFJl
bmRlcmVyOTwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSJyZW5kZXJlclxRdWVyeTExLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJl
bmRlcmVyXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcQmxpdC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBG
aWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0icmVuZGVyZXJcU2hhZGVyQ2FjaGUuaCI+DQotICAgICAgPEZpbHRlcj5IZWFk
ZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXElucHV0TGF5b3V0Q2FjaGUuaCI+DQotICAgICAgPEZp
bHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxSZW5kZXJTdGF0ZUNhY2hlLmgiPg0K
LSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9D
bEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcVmVydGV4RGVjbGFy
YXRpb25DYWNoZS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjk8L0Zp
bHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iY29uc3Rh
bnRzLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJ
bmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InByZWNvbXBpbGVkLmgiPg0KLSAgICAg
IDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEluZGV4UmFuZ2VDYWNoZS5oIj4NCi0gICAgICA8
RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxjb21tb25cZXZlbnRfdHJhY2VyLmgiPg0KLSAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHRoaXJkX3BhcnR5XHRyYWNlX2V2ZW50XHRyYWNlX2V2
ZW50LmgiPg0KLSAgICAgIDxGaWx0ZXI+VGhpcmQgUGFydHlcdHJhY2VfZXZlbnQ8L0ZpbHRlcj4N
Ci0gICAgPC9DbEluY2x1ZGU+DQotICA8L0l0ZW1Hcm91cD4NCi0gIDxJdGVtR3JvdXA+DQotICAg
IDxOb25lIEluY2x1ZGU9InJlbmRlcmVyXHNoYWRlcnNcQmxpdC5wcyI+DQotICAgICAgPEZpbHRl
cj5TaGFkZXJzPC9GaWx0ZXI+DQotICAgIDwvTm9uZT4NCi0gICAgPE5vbmUgSW5jbHVkZT0icmVu
ZGVyZXJcc2hhZGVyc1xCbGl0LnZzIj4NCi0gICAgICA8RmlsdGVyPlNoYWRlcnM8L0ZpbHRlcj4N
Ci0gICAgPC9Ob25lPg0KLSAgICA8Tm9uZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXGdlbmVy
YXRlX3NoYWRlcnMuYmF0Ij4NCi0gICAgICA8RmlsdGVyPlNoYWRlcnM8L0ZpbHRlcj4NCi0gICAg
PC9Ob25lPg0KLSAgICA8Tm9uZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXFBhc3N0aHJvdWdo
MTEuaGxzbCI+DQotICAgICAgPEZpbHRlcj5TaGFkZXJzPC9GaWx0ZXI+DQotICAgIDwvTm9uZT4N
Ci0gICAgPE5vbmUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xDbGVhcjExLmhsc2wiPg0KLSAg
ICAgIDxGaWx0ZXI+U2hhZGVyczwvRmlsdGVyPg0KLSAgICA8L05vbmU+DQotICAgIDxOb25lIElu
Y2x1ZGU9ImxpYkdMRVN2Mi5kZWYiIC8+DQotICA8L0l0ZW1Hcm91cD4NCi0gIDxJdGVtR3JvdXA+
DQotICAgIDxSZXNvdXJjZUNvbXBpbGUgSW5jbHVkZT0ibGliR0xFU3YyLnJjIiAvPg0KLSAgPC9J
dGVtR3JvdXA+DQotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21haW4uY3BwCmluZGV4IDZkN2Ey
NDEzNDBmOWU3Yjk0N2IzMTc5NTg5YjY1MzJlZTEwNzNiY2MuLjUwZTI1OTMzMjhkMTg4YzEzMWVk
ZWZmZmFjMWQ2NGY2NmU3YWZkNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvbWFpbi5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9tYWluLmNwcApAQCAtMTMsNiArMTMsNDAgQEAKIAogc3RhdGljIERXT1JEIGN1
cnJlbnRUTFMgPSBUTFNfT1VUX09GX0lOREVYRVM7CiAKK25hbWVzcGFjZSBnbAoreworCitDdXJy
ZW50ICpBbGxvY2F0ZUN1cnJlbnQoKQoreworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVu
dCopTG9jYWxBbGxvYyhMUFRSLCBzaXplb2YoQ3VycmVudCkpOworCisgICAgaWYgKCFjdXJyZW50
KQorICAgIHsKKyAgICAgICAgRVJSKCJDb3VsZCBub3QgYWxsb2NhdGUgdGhyZWFkIGxvY2FsIHN0
b3JhZ2UuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIEFTU0VSVChjdXJy
ZW50VExTICE9IFRMU19PVVRfT0ZfSU5ERVhFUyk7CisgICAgVGxzU2V0VmFsdWUoY3VycmVudFRM
UywgY3VycmVudCk7CisKKyAgICBjdXJyZW50LT5jb250ZXh0ID0gTlVMTDsKKyAgICBjdXJyZW50
LT5kaXNwbGF5ID0gTlVMTDsKKworICAgIHJldHVybiBjdXJyZW50OworfQorCit2b2lkIERlYWxs
b2NhdGVDdXJyZW50KCkKK3sKKyAgICB2b2lkICpjdXJyZW50ID0gVGxzR2V0VmFsdWUoY3VycmVu
dFRMUyk7CisKKyAgICBpZiAoY3VycmVudCkKKyAgICB7CisgICAgICAgIExvY2FsRnJlZSgoSExP
Q0FMKWN1cnJlbnQpOworICAgIH0KK30KKworfQorCiBleHRlcm4gIkMiIEJPT0wgV0lOQVBJIERs
bE1haW4oSElOU1RBTkNFIGluc3RhbmNlLCBEV09SRCByZWFzb24sIExQVk9JRCByZXNlcnZlZCkK
IHsKICAgICBzd2l0Y2ggKHJlYXNvbikKQEAgLTI5LDM2ICs2MywxNyBAQCBleHRlcm4gIkMiIEJP
T0wgV0lOQVBJIERsbE1haW4oSElOU1RBTkNFIGluc3RhbmNlLCBEV09SRCByZWFzb24sIExQVk9J
RCByZXNlcnZlZAogICAgICAgICAvLyBGYWxsIHRocm91Z2h0IHRvIGluaXRpYWxpemUgaW5kZXgK
ICAgICAgIGNhc2UgRExMX1RIUkVBRF9BVFRBQ0g6CiAgICAgICAgIHsKLSAgICAgICAgICAgIGds
OjpDdXJyZW50ICpjdXJyZW50ID0gKGdsOjpDdXJyZW50KilMb2NhbEFsbG9jKExQVFIsIHNpemVv
ZihnbDo6Q3VycmVudCkpOwotCi0gICAgICAgICAgICBpZiAoY3VycmVudCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBUbHNTZXRWYWx1ZShjdXJyZW50VExTLCBjdXJyZW50KTsKLQot
ICAgICAgICAgICAgICAgIGN1cnJlbnQtPmNvbnRleHQgPSBOVUxMOwotICAgICAgICAgICAgICAg
IGN1cnJlbnQtPmRpc3BsYXkgPSBOVUxMOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZ2w6
OkFsbG9jYXRlQ3VycmVudCgpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgY2Fz
ZSBETExfVEhSRUFEX0RFVEFDSDoKICAgICAgICAgewotICAgICAgICAgICAgdm9pZCAqY3VycmVu
dCA9IFRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOwotCi0gICAgICAgICAgICBpZiAoY3VycmVudCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMb2NhbEZyZWUoKEhMT0NBTCljdXJyZW50
KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdsOjpEZWFsbG9jYXRlQ3VycmVudCgpOwog
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBETExfUFJPQ0VTU19ERVRBQ0g6
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHZvaWQgKmN1cnJlbnQgPSBUbHNHZXRWYWx1ZShjdXJy
ZW50VExTKTsKLQotICAgICAgICAgICAgaWYgKGN1cnJlbnQpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgTG9jYWxGcmVlKChITE9DQUwpY3VycmVudCk7Ci0gICAgICAgICAgICB9Ci0K
KyAgICAgICAgICAgIGdsOjpEZWFsbG9jYXRlQ3VycmVudCgpOwogICAgICAgICAgICAgVGxzRnJl
ZShjdXJyZW50VExTKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTcxLDEwICs4Niwy
MCBAQCBleHRlcm4gIkMiIEJPT0wgV0lOQVBJIERsbE1haW4oSElOU1RBTkNFIGluc3RhbmNlLCBE
V09SRCByZWFzb24sIExQVk9JRCByZXNlcnZlZAogCiBuYW1lc3BhY2UgZ2wKIHsKLXZvaWQgbWFr
ZUN1cnJlbnQoQ29udGV4dCAqY29udGV4dCwgZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1
cmZhY2UgKnN1cmZhY2UpCisKK0N1cnJlbnQgKkdldEN1cnJlbnREYXRhKCkKIHsKICAgICBDdXJy
ZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOwogCisgICAg
Ly8gQU5HTEUgaXNzdWUgNDg4OiB3aGVuIHRoZSBkbGwgaXMgbG9hZGVkIGFmdGVyIHRocmVhZCBp
bml0aWFsaXphdGlvbiwKKyAgICAvLyB0aHJlYWQgbG9jYWwgc3RvcmFnZSAoY3VycmVudCkgbWln
aHQgbm90IGV4aXN0IHlldC4KKyAgICByZXR1cm4gKGN1cnJlbnQgPyBjdXJyZW50IDogQWxsb2Nh
dGVDdXJyZW50KCkpOworfQorCit2b2lkIG1ha2VDdXJyZW50KENvbnRleHQgKmNvbnRleHQsIGVn
bDo6RGlzcGxheSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKQoreworICAgIEN1cnJl
bnQgKmN1cnJlbnQgPSBHZXRDdXJyZW50RGF0YSgpOworCiAgICAgY3VycmVudC0+Y29udGV4dCA9
IGNvbnRleHQ7CiAgICAgY3VycmVudC0+ZGlzcGxheSA9IGRpc3BsYXk7CiAKQEAgLTg2LDcgKzEx
MSw3IEBAIHZvaWQgbWFrZUN1cnJlbnQoQ29udGV4dCAqY29udGV4dCwgZWdsOjpEaXNwbGF5ICpk
aXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpCiAKIENvbnRleHQgKmdldENvbnRleHQoKQog
ewotICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRM
Uyk7CisgICAgQ3VycmVudCAqY3VycmVudCA9IEdldEN1cnJlbnREYXRhKCk7CiAKICAgICByZXR1
cm4gY3VycmVudC0+Y29udGV4dDsKIH0KQEAgLTExMiw3ICsxMzcsNyBAQCBDb250ZXh0ICpnZXRO
b25Mb3N0Q29udGV4dCgpCiAKIGVnbDo6RGlzcGxheSAqZ2V0RGlzcGxheSgpCiB7Ci0gICAgQ3Vy
cmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKyAgICBD
dXJyZW50ICpjdXJyZW50ID0gR2V0Q3VycmVudERhdGEoKTsKIAogICAgIHJldHVybiBjdXJyZW50
LT5kaXNwbGF5OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9tYWluLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21h
aW4uaAppbmRleCAxOTZhZmFlYWI2N2U3NDJmNzkyM2Q5MWRiMDU2MzFjZTlkOTNlMGRkLi5iNDEz
ZjIzMjBjMTUxZmQ3MjBhM2ZmMzhkYjRhZGY2MDUyZmJiZjg2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21haW4uaAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21haW4uaApAQCAtMTAsNyArMTAsNiBAQAogI2RlZmlu
ZSBMSUJHTEVTVjJfTUFJTl9IXwogCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0jaW5jbHVk
ZSAiY29tbW9uL3N5c3RlbS5oIgogCiBuYW1lc3BhY2UgZWdsCiB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21hdGh1dGlsLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21hdGh1dGlsLmgKaW5kZXggYmI0OGI5NGVhZjcx
YTQ5ZDA1MzEyYzEzOWI0ZTU3NzJiYmI4YTFlOC4uZjkwMjEzMWEzNTIyMWJmNjBmNzcyMDJkOTlh
YzBiOGRhNjE4MTJiYiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9tYXRodXRpbC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvbWF0aHV0aWwuaApAQCAtMTEsNyArMTEsNiBAQAogCiAjaW5jbHVkZSA8aW50cmluLmg+
CiAKLSNpbmNsdWRlICJjb21tb24vc3lzdGVtLmgiCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgi
CiAKIG5hbWVzcGFjZSBnbApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9wcmVjb21waWxlZC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9wcmVjb21waWxlZC5oCmluZGV4IDU4YWQxODE4NzRiMzJmYTVjMzM0ZjM2MWE0NzY2
OTdkMzA2ZDMyNGUuLjRiOWFjYzc5OWRjMWYzNWJkNDZjZDRlOGY4NGEzMzUyOWU1ZDNlYzIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcHJlY29tcGls
ZWQuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3ByZWNvbXBp
bGVkLmgKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxkM2Q5Lmg+CiAjaW5jbHVkZSA8ZDNk
MTEuaD4KICNpbmNsdWRlIDxkeGdpLmg+CisjaW5jbHVkZSA8ZHhnaTFfMi5oPgogI2luY2x1ZGUg
PGQzZGNvbXBpbGVyLmg+CiAKICNpZmRlZiBfTVNDX1ZFUgpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9CbGl0LmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQmxpdC5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhM2NlMzljNjMyNGIwODI0MjZjOTI2YTc1YmYwNTlhODdh
NWQ5ZDIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9CbGl0LmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDU5NSArMCwwIEBACi0jaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLS8vCi0KLS8vIEJsaXQuY3BwOiBTdXJmYWNlIGNvcHkgdXRpbGl0eSBjbGFz
cy4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9CbGl0LmgiCi0KLSNpbmNsdWRlICJs
aWJHTEVTdjIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9yZW5kZXJlcjlf
dXRpbHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0b3JhZ2U5Lmgi
Ci0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldDkuaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXI5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0Zy
YW1lYnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgotCi1uYW1l
c3BhY2UKLXsKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9z
dGFuZGFyZHZzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGls
ZWQvZmxpcHl2cy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBp
bGVkL3Bhc3N0aHJvdWdocHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVy
cy9jb21waWxlZC9sdW1pbmFuY2Vwcy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9z
aGFkZXJzL2NvbXBpbGVkL2NvbXBvbmVudG1hc2twcy5oIgotCi1jb25zdCBCWVRFKiBjb25zdCBn
X3NoYWRlckNvZGVbXSA9Ci17Ci0gICAgZ192czIwX3N0YW5kYXJkdnMsCi0gICAgZ192czIwX2Zs
aXB5dnMsCi0gICAgZ19wczIwX3Bhc3N0aHJvdWdocHMsCi0gICAgZ19wczIwX2x1bWluYW5jZXBz
LAotICAgIGdfcHMyMF9jb21wb25lbnRtYXNrcHMKLX07Ci0KLWNvbnN0IHNpemVfdCBnX3NoYWRl
clNpemVbXSA9Ci17Ci0gICAgc2l6ZW9mKGdfdnMyMF9zdGFuZGFyZHZzKSwKLSAgICBzaXplb2Yo
Z192czIwX2ZsaXB5dnMpLAotICAgIHNpemVvZihnX3BzMjBfcGFzc3Rocm91Z2hwcyksCi0gICAg
c2l6ZW9mKGdfcHMyMF9sdW1pbmFuY2VwcyksCi0gICAgc2l6ZW9mKGdfcHMyMF9jb21wb25lbnRt
YXNrcHMpCi19OwotfQotCi1uYW1lc3BhY2UgcngKLXsKLUJsaXQ6OkJsaXQocng6OlJlbmRlcmVy
OSAqcmVuZGVyZXIpCi0gIDogbVJlbmRlcmVyKHJlbmRlcmVyKSwgbVF1YWRWZXJ0ZXhCdWZmZXIo
TlVMTCksIG1RdWFkVmVydGV4RGVjbGFyYXRpb24oTlVMTCksIG1TYXZlZFN0YXRlQmxvY2soTlVM
TCksIG1TYXZlZFJlbmRlclRhcmdldChOVUxMKSwgbVNhdmVkRGVwdGhTdGVuY2lsKE5VTEwpCi17
Ci0gICAgaW5pdEdlb21ldHJ5KCk7Ci0gICAgbWVtc2V0KG1Db21waWxlZFNoYWRlcnMsIDAsIHNp
emVvZihtQ29tcGlsZWRTaGFkZXJzKSk7Ci19Ci0KLUJsaXQ6On5CbGl0KCkKLXsKLSAgICBpZiAo
bVNhdmVkU3RhdGVCbG9jaykgbVNhdmVkU3RhdGVCbG9jay0+UmVsZWFzZSgpOwotICAgIGlmICht
UXVhZFZlcnRleEJ1ZmZlcikgbVF1YWRWZXJ0ZXhCdWZmZXItPlJlbGVhc2UoKTsKLSAgICBpZiAo
bVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbikgbVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbi0+UmVsZWFzZSgp
OwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTSEFERVJfQ09VTlQ7IGkrKykKLSAgICB7Ci0g
ICAgICAgIGlmIChtQ29tcGlsZWRTaGFkZXJzW2ldKQotICAgICAgICB7Ci0gICAgICAgICAgICBt
Q29tcGlsZWRTaGFkZXJzW2ldLT5SZWxlYXNlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZv
aWQgQmxpdDo6aW5pdEdlb21ldHJ5KCkKLXsKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgcXVhZFtd
ID0KLSAgICB7Ci0gICAgICAgIC0xLCAtMSwKLSAgICAgICAgLTEsICAxLAotICAgICAgICAgMSwg
LTEsCi0gICAgICAgICAxLCAgMQotICAgIH07Ci0KLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZp
Y2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZp
Y2UtPkNyZWF0ZVZlcnRleEJ1ZmZlcihzaXplb2YocXVhZCksIEQzRFVTQUdFX1dSSVRFT05MWSwg
MCwgRDNEUE9PTF9ERUZBVUxULCAmbVF1YWRWZXJ0ZXhCdWZmZXIsIE5VTEwpOwotCi0gICAgaWYg
KEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJf
T1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotCi0gICAgdm9pZCAqbG9j
a1B0ciA9IE5VTEw7Ci0gICAgcmVzdWx0ID0gbVF1YWRWZXJ0ZXhCdWZmZXItPkxvY2soMCwgMCwg
JmxvY2tQdHIsIDApOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpIHx8IGxvY2tQdHIgPT0gTlVM
TCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1P
UlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAgIG1lbWNweShsb2NrUHRyLCBxdWFkLCBz
aXplb2YocXVhZCkpOwotICAgIG1RdWFkVmVydGV4QnVmZmVyLT5VbmxvY2soKTsKLQotICAgIHN0
YXRpYyBjb25zdCBEM0RWRVJURVhFTEVNRU5UOSBlbGVtZW50c1tdID0KLSAgICB7Ci0gICAgICAg
IHsgMCwgMCwgRDNEREVDTFRZUEVfRkxPQVQyLCBEM0RERUNMTUVUSE9EX0RFRkFVTFQsIEQzRERF
Q0xVU0FHRV9QT1NJVElPTiwgMCB9LAotICAgICAgICBEM0RERUNMX0VORCgpCi0gICAgfTsKLQot
ICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVmVydGV4RGVjbGFyYXRpb24oZWxlbWVudHMsICZt
UXVhZFZlcnRleERlY2xhcmF0aW9uKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOwotICAgIH0KLX0KLQotdGVtcGxhdGUgPGNsYXNzIEQzRFNoYWRlclR5cGU+Ci1i
b29sIEJsaXQ6OnNldFNoYWRlcihTaGFkZXJJZCBzb3VyY2UsIGNvbnN0IGNoYXIgKnByb2ZpbGUs
Ci0gICAgICAgICAgICAgICAgICAgICBEM0RTaGFkZXJUeXBlICoocng6OlJlbmRlcmVyOTo6KmNy
ZWF0ZVNoYWRlcikoY29uc3QgRFdPUkQgKiwgc2l6ZV90IGxlbmd0aCksCi0gICAgICAgICAgICAg
ICAgICAgICBIUkVTVUxUIChXSU5BUEkgSURpcmVjdDNERGV2aWNlOTo6KnNldFNoYWRlcikoRDNE
U2hhZGVyVHlwZSopKQotewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJl
ci0+Z2V0RGV2aWNlKCk7Ci0KLSAgICBEM0RTaGFkZXJUeXBlICpzaGFkZXI7Ci0KLSAgICBpZiAo
bUNvbXBpbGVkU2hhZGVyc1tzb3VyY2VdICE9IE5VTEwpCi0gICAgewotICAgICAgICBzaGFkZXIg
PSBzdGF0aWNfY2FzdDxEM0RTaGFkZXJUeXBlKj4obUNvbXBpbGVkU2hhZGVyc1tzb3VyY2VdKTsK
LSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgY29uc3QgQllURSogc2hhZGVyQ29kZSA9
IGdfc2hhZGVyQ29kZVtzb3VyY2VdOwotICAgICAgICBzaXplX3Qgc2hhZGVyU2l6ZSA9IGdfc2hh
ZGVyU2l6ZVtzb3VyY2VdOwotCi0gICAgICAgIHNoYWRlciA9IChtUmVuZGVyZXItPipjcmVhdGVT
aGFkZXIpKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRFdPUkQqPihzaGFkZXJDb2RlKSwgc2hhZGVy
U2l6ZSk7Ci0gICAgICAgIGlmICghc2hhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIo
IkZhaWxlZCB0byBjcmVhdGUgc2hhZGVyIGZvciBibGl0IG9wZXJhdGlvbiIpOwotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgbUNvbXBpbGVkU2hhZGVyc1tz
b3VyY2VdID0gc2hhZGVyOwotICAgIH0KLQotICAgIEhSRVNVTFQgaHIgPSAoZGV2aWNlLT4qc2V0
U2hhZGVyKShzaGFkZXIpOwotCi0gICAgaWYgKEZBSUxFRChocikpCi0gICAgewotICAgICAgICBF
UlIoIkZhaWxlZCB0byBzZXQgc2hhZGVyIGZvciBibGl0IG9wZXJhdGlvbiIpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQmxpdDo6
c2V0VmVydGV4U2hhZGVyKFNoYWRlcklkIHNoYWRlcikKLXsKLSAgICByZXR1cm4gc2V0U2hhZGVy
PElEaXJlY3QzRFZlcnRleFNoYWRlcjk+KHNoYWRlciwgInZzXzJfMCIsICZyeDo6UmVuZGVyZXI5
OjpjcmVhdGVWZXJ0ZXhTaGFkZXIsICZJRGlyZWN0M0REZXZpY2U5OjpTZXRWZXJ0ZXhTaGFkZXIp
OwotfQotCi1ib29sIEJsaXQ6OnNldFBpeGVsU2hhZGVyKFNoYWRlcklkIHNoYWRlcikKLXsKLSAg
ICByZXR1cm4gc2V0U2hhZGVyPElEaXJlY3QzRFBpeGVsU2hhZGVyOT4oc2hhZGVyLCAicHNfMl8w
IiwgJnJ4OjpSZW5kZXJlcjk6OmNyZWF0ZVBpeGVsU2hhZGVyLCAmSURpcmVjdDNERGV2aWNlOTo6
U2V0UGl4ZWxTaGFkZXIpOwotfQotCi1SRUNUIEJsaXQ6OmdldFN1cmZhY2VSZWN0KElEaXJlY3Qz
RFN1cmZhY2U5ICpzdXJmYWNlKSBjb25zdAotewotICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOwot
ICAgIHN1cmZhY2UtPkdldERlc2MoJmRlc2MpOwotCi0gICAgUkVDVCByZWN0OwotICAgIHJlY3Qu
bGVmdCA9IDA7Ci0gICAgcmVjdC50b3AgPSAwOwotICAgIHJlY3QucmlnaHQgPSBkZXNjLldpZHRo
OwotICAgIHJlY3QuYm90dG9tID0gZGVzYy5IZWlnaHQ7Ci0KLSAgICByZXR1cm4gcmVjdDsKLX0K
LQotYm9vbCBCbGl0Ojpib3hGaWx0ZXIoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgSURpcmVj
dDNEU3VyZmFjZTkgKmRlc3QpCi17Ci0gICAgSURpcmVjdDNEVGV4dHVyZTkgKnRleHR1cmUgPSBj
b3B5U3VyZmFjZVRvVGV4dHVyZShzb3VyY2UsIGdldFN1cmZhY2VSZWN0KHNvdXJjZSkpOwotICAg
IGlmICghdGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0g
ICAgc2F2ZVN0YXRlKCk7Ci0KLSAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwgdGV4dHVyZSk7Ci0g
ICAgZGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgZGVzdCk7Ci0KLSAgICBzZXRWZXJ0ZXhTaGFk
ZXIoU0hBREVSX1ZTX1NUQU5EQVJEKTsKLSAgICBzZXRQaXhlbFNoYWRlcihTSEFERVJfUFNfUEFT
U1RIUk9VR0gpOwotCi0gICAgc2V0Q29tbW9uQmxpdFN0YXRlKCk7Ci0gICAgZGV2aWNlLT5TZXRT
YW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NSU5GSUxURVIsIEQzRFRFWEZfTElORUFSKTsKLSAgICBk
ZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01BR0ZJTFRFUiwgRDNEVEVYRl9MSU5F
QVIpOwotCi0gICAgc2V0Vmlld3BvcnQoZ2V0U3VyZmFjZVJlY3QoZGVzdCksIDAsIDApOwotCi0g
ICAgcmVuZGVyKCk7Ci0KLSAgICB0ZXh0dXJlLT5SZWxlYXNlKCk7Ci0KLSAgICByZXN0b3JlU3Rh
dGUoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEJsaXQ6OmNvcHkoZ2w6OkZyYW1l
YnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RG
b3JtYXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlMkQgKnN0b3JhZ2UsIEdMaW50IGxldmVsKQotewotICAgIFJlbmRlclRhcmdldDkgKnJlbmRl
clRhcmdldCA9IE5VTEw7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSA9IE5VTEw7Ci0g
ICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3Ji
dWZmZXIoMCk7Ci0KLSAgICBpZiAoY29sb3JidWZmZXIpCi0gICAgewotICAgICAgICByZW5kZXJU
YXJnZXQgPSBSZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShjb2xvcmJ1ZmZlci0+Z2V0
UmVuZGVyVGFyZ2V0KCkpOwotICAgIH0KLSAgICAKLSAgICBpZiAocmVuZGVyVGFyZ2V0KQotICAg
IHsKLSAgICAgICAgc291cmNlID0gcmVuZGVyVGFyZ2V0LT5nZXRTdXJmYWNlKCk7Ci0gICAgfQot
Ci0gICAgaWYgKCFzb3VyY2UpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2
ZSB0aGUgcmVuZGVyIHRhcmdldC4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgVGV4dHVyZVN0b3JhZ2U5XzJEICpzdG9y
YWdlOSA9IFRleHR1cmVTdG9yYWdlOV8yRDo6bWFrZVRleHR1cmVTdG9yYWdlOV8yRChzdG9yYWdl
LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJm
YWNlID0gc3RvcmFnZTktPmdldFN1cmZhY2VMZXZlbChsZXZlbCwgdHJ1ZSk7Ci0gICAgYm9vbCBy
ZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgCi0gICAgaWYgKGRlc3RTdXJmYWNlKQotICAgIHsKLSAg
ICAgICAgcmVzdWx0ID0gY29weShzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RGb3JtYXQsIHhvZmZz
ZXQsIHlvZmZzZXQsIGRlc3RTdXJmYWNlKTsKLSAgICAgICAgZGVzdFN1cmZhY2UtPlJlbGVhc2Uo
KTsKLSAgICB9Ci0KLSAgICBzb3VyY2UtPlJlbGVhc2UoKTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1ib29sIEJsaXQ6OmNvcHkoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3Qg
UkVDVCAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwpCi17Ci0gICAgUmVuZGVyVGFyZ2V0OSAqcmVuZGVyVGFyZ2V0ID0g
TlVMTDsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlID0gTlVMTDsKLSAgICBnbDo6UmVu
ZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigwKTsK
LQotICAgIGlmIChjb2xvcmJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIHJlbmRlclRhcmdldCA9IFJl
bmRlclRhcmdldDk6Om1ha2VSZW5kZXJUYXJnZXQ5KGNvbG9yYnVmZmVyLT5nZXRSZW5kZXJUYXJn
ZXQoKSk7Ci0gICAgfQotICAgIAotICAgIGlmIChyZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAg
ICBzb3VyY2UgPSByZW5kZXJUYXJnZXQtPmdldFN1cmZhY2UoKTsKLSAgICB9Ci0KLSAgICBpZiAo
IXNvdXJjZSkKLSAgICB7Ci0gICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5k
ZXIgdGFyZ2V0LiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlks
IGZhbHNlKTsKLSAgICB9Ci0KLSAgICBUZXh0dXJlU3RvcmFnZTlfQ3ViZSAqc3RvcmFnZTkgPSBU
ZXh0dXJlU3RvcmFnZTlfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlOV9DdWJlKHN0b3JhZ2UtPmdl
dFN0b3JhZ2VJbnN0YW5jZSgpKTsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdFN1cmZhY2Ug
PSBzdG9yYWdlOS0+Z2V0Q3ViZU1hcFN1cmZhY2UodGFyZ2V0LCBsZXZlbCwgdHJ1ZSk7Ci0gICAg
Ym9vbCByZXN1bHQgPSBmYWxzZTsKLQotICAgIGlmIChkZXN0U3VyZmFjZSkKLSAgICB7Ci0gICAg
ICAgIHJlc3VsdCA9IGNvcHkoc291cmNlLCBzb3VyY2VSZWN0LCBkZXN0Rm9ybWF0LCB4b2Zmc2V0
LCB5b2Zmc2V0LCBkZXN0U3VyZmFjZSk7Ci0gICAgICAgIGRlc3RTdXJmYWNlLT5SZWxlYXNlKCk7
Ci0gICAgfQotCi0gICAgc291cmNlLT5SZWxlYXNlKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotYm9vbCBCbGl0Ojpjb3B5KElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGNvbnN0IFJFQ1Qg
JnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCkKLXsKLSAgICBpZiAoIWRlc3QpCi0gICAgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2
aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLQotICAgIEQzRFNVUkZBQ0VfREVTQyBzb3Vy
Y2VEZXNjOwotICAgIEQzRFNVUkZBQ0VfREVTQyBkZXN0RGVzYzsKLSAgICBzb3VyY2UtPkdldERl
c2MoJnNvdXJjZURlc2MpOwotICAgIGRlc3QtPkdldERlc2MoJmRlc3REZXNjKTsKLQotICAgIGlm
IChzb3VyY2VEZXNjLkZvcm1hdCA9PSBkZXN0RGVzYy5Gb3JtYXQgJiYgZGVzdERlc2MuVXNhZ2Ug
JiBEM0RVU0FHRV9SRU5ERVJUQVJHRVQgJiYKLSAgICAgICAgZDNkOV9nbDo6SXNGb3JtYXRDaGFu
bmVsRXF1aXZhbGVudChkZXN0RGVzYy5Gb3JtYXQsIGRlc3RGb3JtYXQpKSAgIC8vIENhbiB1c2Ug
U3RyZXRjaFJlY3QKLSAgICB7Ci0gICAgICAgIFJFQ1QgZGVzdFJlY3QgPSB7eG9mZnNldCwgeW9m
ZnNldCwgeG9mZnNldCArIChzb3VyY2VSZWN0LnJpZ2h0IC0gc291cmNlUmVjdC5sZWZ0KSwgeW9m
ZnNldCArIChzb3VyY2VSZWN0LmJvdHRvbSAtIHNvdXJjZVJlY3QudG9wKX07Ci0gICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5TdHJldGNoUmVjdChzb3VyY2UsICZzb3VyY2VSZWN0LCBk
ZXN0LCAmZGVzdFJlY3QsIEQzRFRFWEZfUE9JTlQpOwotCi0gICAgICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VU
T0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKLSAgICAgICAgfQotICAg
IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZm9ybWF0Q29udmVydChzb3VyY2Us
IHNvdXJjZVJlY3QsIGRlc3RGb3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQsIGRlc3QpOwotICAgIH0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBCbGl0Ojpmb3JtYXRDb252ZXJ0KElEaXJlY3Qz
RFN1cmZhY2U5ICpzb3VyY2UsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9y
bWF0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVz
dCkKLXsKLSAgICBJRGlyZWN0M0RUZXh0dXJlOSAqdGV4dHVyZSA9IGNvcHlTdXJmYWNlVG9UZXh0
dXJlKHNvdXJjZSwgc291cmNlUmVjdCk7Ci0gICAgaWYgKCF0ZXh0dXJlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9
IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0KLSAgICBzYXZlU3RhdGUoKTsKLQotICAgIGRldmlj
ZS0+U2V0VGV4dHVyZSgwLCB0ZXh0dXJlKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgw
LCBkZXN0KTsKLQotICAgIHNldFZpZXdwb3J0KHNvdXJjZVJlY3QsIHhvZmZzZXQsIHlvZmZzZXQp
OwotCi0gICAgc2V0Q29tbW9uQmxpdFN0YXRlKCk7Ci0gICAgaWYgKHNldEZvcm1hdENvbnZlcnRT
aGFkZXJzKGRlc3RGb3JtYXQpKQotICAgIHsKLSAgICAgICAgcmVuZGVyKCk7Ci0gICAgfQotCi0g
ICAgdGV4dHVyZS0+UmVsZWFzZSgpOwotCi0gICAgcmVzdG9yZVN0YXRlKCk7Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBCbGl0OjpzZXRGb3JtYXRDb252ZXJ0U2hhZGVycyhHTGVudW0g
ZGVzdEZvcm1hdCkKLXsKLSAgICBib29sIG9rYXkgPSBzZXRWZXJ0ZXhTaGFkZXIoU0hBREVSX1ZT
X1NUQU5EQVJEKTsKLQotICAgIHN3aXRjaCAoZGVzdEZvcm1hdCkKLSAgICB7Ci0gICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgY2FzZSBHTF9C
R1JBX0VYVDoKLSAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAg
ICAgb2theSA9IG9rYXkgJiYgc2V0UGl4ZWxTaGFkZXIoU0hBREVSX1BTX0NPTVBPTkVOVE1BU0sp
OwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICBjYXNl
IEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgb2theSA9IG9rYXkgJiYgc2V0UGl4ZWxTaGFk
ZXIoU0hBREVSX1BTX0xVTUlOQU5DRSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlm
ICghb2theSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBlbnVt
IHsgWCA9IDAsIFkgPSAxLCBaID0gMiwgVyA9IDMgfTsKLQotICAgIC8vIFRoZSBtZWFuaW5nIG9m
IHRoaXMgY29uc3RhbnQgZGVwZW5kcyBvbiB0aGUgc2hhZGVyIHRoYXQgd2FzIHNlbGVjdGVkLgot
ICAgIC8vIFNlZSB0aGUgc2hhZGVyIGFzc2VtYmx5IGNvZGUgYWJvdmUgZm9yIGRldGFpbHMuCi0g
ICAgZmxvYXQgcHNDb25zdDBbNF0gPSB7IDAsIDAsIDAsIDAgfTsKLQotICAgIHN3aXRjaCAoZGVz
dEZvcm1hdCkKLSAgICB7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgY2Fz
ZSBHTF9SR0JBOgotICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgcHNDb25zdDBbWF0g
PSAxOwotICAgICAgICBwc0NvbnN0MFtaXSA9IDE7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBj
YXNlIEdMX1JHQjoKLSAgICAgICAgcHNDb25zdDBbWF0gPSAxOwotICAgICAgICBwc0NvbnN0MFtX
XSA9IDE7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICBw
c0NvbnN0MFtaXSA9IDE7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEdMX0xVTUlOQU5D
RToKLSAgICAgICAgcHNDb25zdDBbWV0gPSAxOwotICAgICAgICBicmVhazsKLQotICAgICAgY2Fz
ZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgIHBzQ29uc3QwW1hdID0gMTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotCi0gICAgbVJlbmRlcmVyLT5nZXREZXZpY2UoKS0+U2V0UGl4ZWxTaGFk
ZXJDb25zdGFudEYoMCwgcHNDb25zdDAsIDEpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUlE
aXJlY3QzRFRleHR1cmU5ICpCbGl0Ojpjb3B5U3VyZmFjZVRvVGV4dHVyZShJRGlyZWN0M0RTdXJm
YWNlOSAqc3VyZmFjZSwgY29uc3QgUkVDVCAmc291cmNlUmVjdCkKLXsKLSAgICBpZiAoIXN1cmZh
Y2UpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBJRGlyZWN0M0RE
ZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0gICAgRDNEU1VSRkFD
RV9ERVNDIHNvdXJjZURlc2M7Ci0gICAgc3VyZmFjZS0+R2V0RGVzYygmc291cmNlRGVzYyk7Ci0K
LSAgICAvLyBDb3B5IHRoZSByZW5kZXIgdGFyZ2V0IGludG8gYSB0ZXh0dXJlCi0gICAgSURpcmVj
dDNEVGV4dHVyZTkgKnRleHR1cmU7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZVRleHR1cmUoc291cmNlUmVjdC5yaWdodCAtIHNvdXJjZVJlY3QubGVmdCwgc291cmNlUmVjdC5i
b3R0b20gLSBzb3VyY2VSZWN0LnRvcCwgMSwgRDNEVVNBR0VfUkVOREVSVEFSR0VULCBzb3VyY2VE
ZXNjLkZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmdGV4dHVyZSwgTlVMTCk7Ci0KLSAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9P
VVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSURpcmVjdDNEVGV4dHVyZTkqKU5VTEwp
OwotICAgIH0KLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICp0ZXh0dXJlU3VyZmFjZTsKLSAgICBy
ZXN1bHQgPSB0ZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoMCwgJnRleHR1cmVTdXJmYWNlKTsKLQot
ICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0g
RDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAg
ICAgICB0ZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSwgKElEaXJlY3QzRFRleHR1cmU5KilOVUxMKTsKLSAgICB9Ci0KLSAgICBtUmVu
ZGVyZXItPmVuZFNjZW5lKCk7Ci0gICAgcmVzdWx0ID0gZGV2aWNlLT5TdHJldGNoUmVjdChzdXJm
YWNlLCAmc291cmNlUmVjdCwgdGV4dHVyZVN1cmZhY2UsIE5VTEwsIEQzRFRFWEZfTk9ORSk7Ci0K
LSAgICB0ZXh0dXJlU3VyZmFjZS0+UmVsZWFzZSgpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQp
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9S
WSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgIHRleHR1cmUtPlJlbGVhc2Uo
KTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSURpcmVjdDNE
VGV4dHVyZTkqKU5VTEwpOwotICAgIH0KLQotICAgIHJldHVybiB0ZXh0dXJlOwotfQotCi12b2lk
IEJsaXQ6OnNldFZpZXdwb3J0KGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQpCi17Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRl
cmVyLT5nZXREZXZpY2UoKTsKLQotICAgIEQzRFZJRVdQT1JUOSB2cDsKLSAgICB2cC5YICAgICAg
PSB4b2Zmc2V0OwotICAgIHZwLlkgICAgICA9IHlvZmZzZXQ7Ci0gICAgdnAuV2lkdGggID0gc291
cmNlUmVjdC5yaWdodCAtIHNvdXJjZVJlY3QubGVmdDsKLSAgICB2cC5IZWlnaHQgPSBzb3VyY2VS
ZWN0LmJvdHRvbSAtIHNvdXJjZVJlY3QudG9wOwotICAgIHZwLk1pblogICA9IDAuMGY7Ci0gICAg
dnAuTWF4WiAgID0gMS4wZjsKLSAgICBkZXZpY2UtPlNldFZpZXdwb3J0KCZ2cCk7Ci0KLSAgICBm
bG9hdCBoYWxmUGl4ZWxBZGp1c3RbNF0gPSB7IC0xLjBmL3ZwLldpZHRoLCAxLjBmL3ZwLkhlaWdo
dCwgMCwgMCB9OwotICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKDAsIGhhbGZQ
aXhlbEFkanVzdCwgMSk7Ci19Ci0KLXZvaWQgQmxpdDo6c2V0Q29tbW9uQmxpdFN0YXRlKCkKLXsK
LSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwot
Ci0gICAgZGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKE5VTEwpOwotCi0gICAgZGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7Ci0gICAgZGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsKLSAgICBk
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKLSAg
ICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOwot
ICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsKLSAg
ICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIEQzRENPTE9S
V1JJVEVFTkFCTEVfQUxQSEEgfCBEM0RDT0xPUldSSVRFRU5BQkxFX0JMVUUgfCBEM0RDT0xPUldS
SVRFRU5BQkxFX0dSRUVOIHwgRDNEQ09MT1JXUklURUVOQUJMRV9SRUQpOwotICAgIGRldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JHQldSSVRFRU5BQkxFLCBGQUxTRSk7Ci0gICAgZGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSwgRkFMU0UpOwotCi0gICAg
ZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NQUdGSUxURVIsIEQzRFRFWEZfUE9J
TlQpOwotICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUlORklMVEVSLCBE
M0RURVhGX1BPSU5UKTsKLSAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX1NS
R0JURVhUVVJFLCBGQUxTRSk7Ci0gICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FN
UF9BRERSRVNTVSwgRDNEVEFERFJFU1NfQ0xBTVApOwotICAgIGRldmljZS0+U2V0U2FtcGxlclN0
YXRlKDAsIEQzRFNBTVBfQUREUkVTU1YsIEQzRFRBRERSRVNTX0NMQU1QKTsKLQotICAgIFJFQ1Qg
c2Npc3NvclJlY3QgPSB7MH07ICAgLy8gU2Npc3NvcmluZyBpcyBkaXNhYmxlZCBmb3IgZmxpcHBp
bmcsIGJ1dCB3ZSBuZWVkIHRoaXMgdG8gY2FwdHVyZSBhbmQgcmVzdG9yZSB0aGUgb2xkIHJlY3Rh
bmdsZQotICAgIGRldmljZS0+U2V0U2Npc3NvclJlY3QoJnNjaXNzb3JSZWN0KTsKLQotICAgIGZv
cihpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAgewotICAg
ICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoaSwgMSk7Ci0gICAgfQotfQotCi12b2lk
IEJsaXQ6OnJlbmRlcigpCi17Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRl
cmVyLT5nZXREZXZpY2UoKTsKLQotICAgIEhSRVNVTFQgaHIgPSBkZXZpY2UtPlNldFN0cmVhbVNv
dXJjZSgwLCBtUXVhZFZlcnRleEJ1ZmZlciwgMCwgMiAqIHNpemVvZihmbG9hdCkpOwotICAgIGhy
ID0gZGV2aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbihtUXVhZFZlcnRleERlY2xhcmF0aW9uKTsK
LQotICAgIG1SZW5kZXJlci0+c3RhcnRTY2VuZSgpOwotICAgIGhyID0gZGV2aWNlLT5EcmF3UHJp
bWl0aXZlKEQzRFBUX1RSSUFOR0xFU1RSSVAsIDAsIDIpOwotfQotCi12b2lkIEJsaXQ6OnNhdmVT
dGF0ZSgpCi17Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXRE
ZXZpY2UoKTsKLQotICAgIEhSRVNVTFQgaHI7Ci0KLSAgICBkZXZpY2UtPkdldERlcHRoU3RlbmNp
bFN1cmZhY2UoJm1TYXZlZERlcHRoU3RlbmNpbCk7Ci0gICAgZGV2aWNlLT5HZXRSZW5kZXJUYXJn
ZXQoMCwgJm1TYXZlZFJlbmRlclRhcmdldCk7Ci0KLSAgICBpZiAobVNhdmVkU3RhdGVCbG9jayA9
PSBOVUxMKQotICAgIHsKLSAgICAgICAgaHIgPSBkZXZpY2UtPkJlZ2luU3RhdGVCbG9jaygpOwot
ICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01F
TU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsKLQotICAgICAgICBzZXRDb21tb25CbGl0U3Rh
dGUoKTsKLQotICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXQgZHVtbXlDb25zdFs0XSA9IHsgMCwg
MCwgMCwgMCB9OwotCi0gICAgICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOwotICAg
ICAgICBkZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50RigwLCBkdW1teUNvbnN0LCAxKTsK
LSAgICAgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsKLSAgICAgICAgZGV2aWNlLT5T
ZXRQaXhlbFNoYWRlckNvbnN0YW50RigwLCBkdW1teUNvbnN0LCAxKTsKLQotICAgICAgICBEM0RW
SUVXUE9SVDkgZHVtbXlWcDsKLSAgICAgICAgZHVtbXlWcC5YID0gMDsKLSAgICAgICAgZHVtbXlW
cC5ZID0gMDsKLSAgICAgICAgZHVtbXlWcC5XaWR0aCA9IDE7Ci0gICAgICAgIGR1bW15VnAuSGVp
Z2h0ID0gMTsKLSAgICAgICAgZHVtbXlWcC5NaW5aID0gMDsKLSAgICAgICAgZHVtbXlWcC5NYXha
ID0gMTsKLQotICAgICAgICBkZXZpY2UtPlNldFZpZXdwb3J0KCZkdW1teVZwKTsKLQotICAgICAg
ICBkZXZpY2UtPlNldFRleHR1cmUoMCwgTlVMTCk7Ci0KLSAgICAgICAgZGV2aWNlLT5TZXRTdHJl
YW1Tb3VyY2UoMCwgbVF1YWRWZXJ0ZXhCdWZmZXIsIDAsIDApOwotCi0gICAgICAgIGRldmljZS0+
U2V0VmVydGV4RGVjbGFyYXRpb24obVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbik7Ci0KLSAgICAgICAg
aHIgPSBkZXZpY2UtPkVuZFN0YXRlQmxvY2soJm1TYXZlZFN0YXRlQmxvY2spOwotICAgICAgICBB
U1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBo
ciA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobVNhdmVkU3RhdGVCbG9j
ayAhPSBOVUxMKTsKLQotICAgIGlmIChtU2F2ZWRTdGF0ZUJsb2NrICE9IE5VTEwpCi0gICAgewot
ICAgICAgICBociA9IG1TYXZlZFN0YXRlQmxvY2stPkNhcHR1cmUoKTsKLSAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChocikpOwotICAgIH0KLX0KLQotdm9pZCBCbGl0OjpyZXN0b3JlU3RhdGUoKQot
ewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7
Ci0KLSAgICBkZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UobVNhdmVkRGVwdGhTdGVuY2ls
KTsKLSAgICBpZiAobVNhdmVkRGVwdGhTdGVuY2lsICE9IE5VTEwpCi0gICAgewotICAgICAgICBt
U2F2ZWREZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKLSAgICAgICAgbVNhdmVkRGVwdGhTdGVuY2ls
ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBtU2F2ZWRS
ZW5kZXJUYXJnZXQpOwotICAgIGlmIChtU2F2ZWRSZW5kZXJUYXJnZXQgIT0gTlVMTCkKLSAgICB7
Ci0gICAgICAgIG1TYXZlZFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgICAgICBtU2F2ZWRS
ZW5kZXJUYXJnZXQgPSBOVUxMOwotICAgIH0KLQotICAgIEFTU0VSVChtU2F2ZWRTdGF0ZUJsb2Nr
ICE9IE5VTEwpOwotCi0gICAgaWYgKG1TYXZlZFN0YXRlQmxvY2sgIT0gTlVMTCkKLSAgICB7Ci0g
ICAgICAgIG1TYXZlZFN0YXRlQmxvY2stPkFwcGx5KCk7Ci0gICAgfQotfQotCi19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0JsaXQu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQmxpdC5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzE4MDI4ZTY2MmQzZDU2MWM3NmNkMGNh
NmY1MmU4MTNlNjcyNWMzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQmxp
dC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
Ly8gQmxpdC5jcHA6IFN1cmZhY2UgY29weSB1dGlsaXR5IGNsYXNzLgotCi0jaWZuZGVmIExJQkdM
RVNWMl9CTElUX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9CTElUX0hfCi0KLSNpbmNsdWRlICJjb21t
b24vYW5nbGV1dGlscy5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLWNsYXNzIEZyYW1lYnVmZmVyOwot
fQotCi1uYW1lc3BhY2UgcngKLXsKLWNsYXNzIFJlbmRlcmVyOTsKLWNsYXNzIFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlMkQ7Ci1jbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU7Ci0KLWNs
YXNzIEJsaXQKLXsKLSAgcHVibGljOgotICAgIGV4cGxpY2l0IEJsaXQoUmVuZGVyZXI5ICpyZW5k
ZXJlcik7Ci0gICAgfkJsaXQoKTsKLQotICAgIC8vIENvcHkgZnJvbSBzb3VyY2Ugc3VyZmFjZSB0
byBkZXN0IHN1cmZhY2UuCi0gICAgLy8gc291cmNlUmVjdCwgeG9mZnNldCwgeW9mZnNldCBhcmUg
aW4gRDNEIGNvb3JkaW5hdGVzICgwLDAgaW4gdXBwZXItbGVmdCkKLSAgICBib29sIGNvcHkoZ2w6
OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xlbnVt
IGRlc3RGb3JtYXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlMkQgKnN0b3JhZ2UsIEdMaW50IGxldmVsKTsKLSAgICBib29sIGNvcHkoZ2w6OkZy
YW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xlbnVtIGRl
c3RGb3JtYXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpOwotCi0gICAg
Ly8gQ29weSBmcm9tIHNvdXJjZSBzdXJmYWNlIHRvIGRlc3Qgc3VyZmFjZS4KLSAgICAvLyBzb3Vy
Y2VSZWN0LCB4b2Zmc2V0LCB5b2Zmc2V0IGFyZSBpbiBEM0QgY29vcmRpbmF0ZXMgKDAsMCBpbiB1
cHBlci1sZWZ0KQotICAgIC8vIHNvdXJjZSBpcyBpbnRlcnByZXRlZCBhcyBSR0JBIGFuZCBkZXN0
Rm9ybWF0IHNwZWNpZmllcyB0aGUgZGVzaXJlZCByZXN1bHQgZm9ybWF0LiBGb3IgZXhhbXBsZSwg
aWYgZGVzdEZvcm1hdCA9IEdMX1JHQiwgdGhlIGFscGhhIGNoYW5uZWwgd2lsbCBiZSBmb3JjZWQg
dG8gMC4KLSAgICBib29sIGZvcm1hdENvbnZlcnQoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwg
Y29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0KTsKLQotICAgIC8vIDJ4MiBi
b3ggZmlsdGVyIHNhbXBsZSBmcm9tIHNvdXJjZSB0byBkZXN0LgotICAgIC8vIFJlcXVpcmVzIHRo
YXQgc291cmNlIGlzIFJHQihBKSBhbmQgZGVzdCBoYXMgdGhlIHNhbWUgZm9ybWF0IGFzIHNvdXJj
ZS4KLSAgICBib29sIGJveEZpbHRlcihJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBJRGlyZWN0
M0RTdXJmYWNlOSAqZGVzdCk7Ci0KLSAgcHJpdmF0ZToKLSAgICByeDo6UmVuZGVyZXI5ICptUmVu
ZGVyZXI7Ci0KLSAgICBJRGlyZWN0M0RWZXJ0ZXhCdWZmZXI5ICptUXVhZFZlcnRleEJ1ZmZlcjsK
LSAgICBJRGlyZWN0M0RWZXJ0ZXhEZWNsYXJhdGlvbjkgKm1RdWFkVmVydGV4RGVjbGFyYXRpb247
Ci0KLSAgICB2b2lkIGluaXRHZW9tZXRyeSgpOwotCi0gICAgYm9vbCBzZXRGb3JtYXRDb252ZXJ0
U2hhZGVycyhHTGVudW0gZGVzdEZvcm1hdCk7Ci0KLSAgICBib29sIGNvcHkoSURpcmVjdDNEU3Vy
ZmFjZTkgKnNvdXJjZSwgY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQs
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0KTsK
LSAgICBJRGlyZWN0M0RUZXh0dXJlOSAqY29weVN1cmZhY2VUb1RleHR1cmUoSURpcmVjdDNEU3Vy
ZmFjZTkgKnN1cmZhY2UsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QpOwotICAgIHZvaWQgc2V0Vmll
d3BvcnQoY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCk7Ci0gICAgdm9pZCBzZXRDb21tb25CbGl0U3RhdGUoKTsKLSAgICBSRUNUIGdldFN1cmZhY2VS
ZWN0KElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlKSBjb25zdDsKLQotICAgIC8vIFRoaXMgZW51
bSBpcyB1c2VkIHRvIGluZGV4IG1Db21waWxlZFNoYWRlcnMgYW5kIG1TaGFkZXJTb3VyY2UuCi0g
ICAgZW51bSBTaGFkZXJJZAotICAgIHsKLSAgICAgICAgU0hBREVSX1ZTX1NUQU5EQVJELAotICAg
ICAgICBTSEFERVJfVlNfRkxJUFksCi0gICAgICAgIFNIQURFUl9QU19QQVNTVEhST1VHSCwKLSAg
ICAgICAgU0hBREVSX1BTX0xVTUlOQU5DRSwKLSAgICAgICAgU0hBREVSX1BTX0NPTVBPTkVOVE1B
U0ssCi0gICAgICAgIFNIQURFUl9DT1VOVAotICAgIH07Ci0KLSAgICAvLyBUaGlzIGFjdHVhbGx5
IGNvbnRhaW5zIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgb3IgSURpcmVjdDNEUGl4ZWxTaGFkZXI5
IGNhc3RlZCB0byBJVW5rbm93bi4KLSAgICBJVW5rbm93biAqbUNvbXBpbGVkU2hhZGVyc1tTSEFE
RVJfQ09VTlRdOwotCi0gICAgdGVtcGxhdGUgPGNsYXNzIEQzRFNoYWRlclR5cGU+Ci0gICAgYm9v
bCBzZXRTaGFkZXIoU2hhZGVySWQgc291cmNlLCBjb25zdCBjaGFyICpwcm9maWxlLAotICAgICAg
ICAgICAgICAgICAgIEQzRFNoYWRlclR5cGUgKihSZW5kZXJlcjk6OipjcmVhdGVTaGFkZXIpKGNv
bnN0IERXT1JEICosIHNpemVfdCBsZW5ndGgpLAotICAgICAgICAgICAgICAgICAgIEhSRVNVTFQg
KFdJTkFQSSBJRGlyZWN0M0REZXZpY2U5Ojoqc2V0U2hhZGVyKShEM0RTaGFkZXJUeXBlKikpOwot
Ci0gICAgYm9vbCBzZXRWZXJ0ZXhTaGFkZXIoU2hhZGVySWQgc2hhZGVyKTsKLSAgICBib29sIHNl
dFBpeGVsU2hhZGVyKFNoYWRlcklkIHNoYWRlcik7Ci0gICAgdm9pZCByZW5kZXIoKTsKLQotICAg
IHZvaWQgc2F2ZVN0YXRlKCk7Ci0gICAgdm9pZCByZXN0b3JlU3RhdGUoKTsKLSAgICBJRGlyZWN0
M0RTdGF0ZUJsb2NrOSAqbVNhdmVkU3RhdGVCbG9jazsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAq
bVNhdmVkUmVuZGVyVGFyZ2V0OwotICAgIElEaXJlY3QzRFN1cmZhY2U5ICptU2F2ZWREZXB0aFN0
ZW5jaWw7Ci0KLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQmxpdCk7Ci19OwotfQotCi0j
ZW5kaWYgICAvLyBMSUJHTEVTVjJfQkxJVF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdlMTEuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdl
MTEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjQ3ZDhhODk4NTU0Yjk4NDc3
YjZmZDQ4ZWE4MzdjNmRmOGJiYTNiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvQnVmZmVyU3RvcmFnZTExLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM1OCArMCwwIEBACi0j
aW5jbHVkZSAicHJlY29tcGlsZWQuaCIKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBCdWZmZXJTdG9yYWdl
MTEuY3BwIERlZmluZXMgdGhlIEJ1ZmZlclN0b3JhZ2UxMSBjbGFzcy4KLQotI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdlMTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIv
bWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlcjExLmgiCi0KLW5h
bWVzcGFjZSByeAotewotCi1CdWZmZXJTdG9yYWdlMTE6OkJ1ZmZlclN0b3JhZ2UxMShSZW5kZXJl
cjExICpyZW5kZXJlcikKLXsKLSAgICBtUmVuZGVyZXIgPSByZW5kZXJlcjsKLQotICAgIG1TdGFn
aW5nQnVmZmVyID0gTlVMTDsKLSAgICBtU3RhZ2luZ0J1ZmZlclNpemUgPSAwOwotCi0gICAgbUJ1
ZmZlciA9IE5VTEw7Ci0gICAgbUJ1ZmZlclNpemUgPSAwOwotCi0gICAgbVNpemUgPSAwOwotCi0g
ICAgbVJlc29sdmVkRGF0YSA9IE5VTEw7Ci0gICAgbVJlc29sdmVkRGF0YVNpemUgPSAwOwotICAg
IG1SZXNvbHZlZERhdGFWYWxpZCA9IGZhbHNlOwotCi0gICAgbVJlYWRVc2FnZUNvdW50ID0gMDsK
LSAgICBtV3JpdGVVc2FnZUNvdW50ID0gMDsKLX0KLQotQnVmZmVyU3RvcmFnZTExOjp+QnVmZmVy
U3RvcmFnZTExKCkKLXsKLSAgICBpZiAobVN0YWdpbmdCdWZmZXIpCi0gICAgewotICAgICAgICBt
U3RhZ2luZ0J1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtU3RhZ2luZ0J1ZmZlciA9IE5VTEw7
Ci0gICAgfQotCi0gICAgaWYgKG1CdWZmZXIpCi0gICAgewotICAgICAgICBtQnVmZmVyLT5SZWxl
YXNlKCk7Ci0gICAgICAgIG1CdWZmZXIgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtUmVzb2x2
ZWREYXRhKQotICAgIHsKLSAgICAgICAgZnJlZShtUmVzb2x2ZWREYXRhKTsKLSAgICAgICAgbVJl
c29sdmVkRGF0YSA9IE5VTEw7Ci0gICAgfQotfQotCi1CdWZmZXJTdG9yYWdlMTEgKkJ1ZmZlclN0
b3JhZ2UxMTo6bWFrZUJ1ZmZlclN0b3JhZ2UxMShCdWZmZXJTdG9yYWdlICpidWZmZXJTdG9yYWdl
KQotewotICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKEJ1ZmZlclN0b3JhZ2UxMSosIGJ1ZmZl
clN0b3JhZ2UpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QnVmZmVyU3RvcmFnZTExKj4oYnVm
ZmVyU3RvcmFnZSk7Ci19Ci0KLXZvaWQgKkJ1ZmZlclN0b3JhZ2UxMTo6Z2V0RGF0YSgpCi17Ci0g
ICAgaWYgKCFtUmVzb2x2ZWREYXRhVmFsaWQpCi0gICAgewotICAgICAgICBJRDNEMTFEZXZpY2Ug
KmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0gICAgICAgIElEM0QxMURldmljZUNv
bnRleHQgKmNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKLSAgICAgICAg
SFJFU1VMVCByZXN1bHQ7Ci0KLSAgICAgICAgaWYgKCFtU3RhZ2luZ0J1ZmZlciB8fCBtU3RhZ2lu
Z0J1ZmZlclNpemUgPCBtQnVmZmVyU2l6ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1T
dGFnaW5nQnVmZmVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1TdGFnaW5nQnVm
ZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgbVN0YWdpbmdCdWZmZXIgPSBOVUxMOwot
ICAgICAgICAgICAgICAgIG1TdGFnaW5nQnVmZmVyU2l6ZSA9IDA7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIGJ1ZmZlckRlc2M7Ci0gICAgICAgICAgICBi
dWZmZXJEZXNjLkJ5dGVXaWR0aCA9IG1TaXplOwotICAgICAgICAgICAgYnVmZmVyRGVzYy5Vc2Fn
ZSA9IEQzRDExX1VTQUdFX1NUQUdJTkc7Ci0gICAgICAgICAgICBidWZmZXJEZXNjLkJpbmRGbGFn
cyA9IDA7Ci0gICAgICAgICAgICBidWZmZXJEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BV
X0FDQ0VTU19SRUFEIHwgRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsKLSAgICAgICAgICAgIGJ1ZmZl
ckRlc2MuTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgICAgIGJ1ZmZlckRlc2MuU3RydWN0dXJlQnl0
ZVN0cmlkZSA9IDA7Ci0KLSAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVy
KCZidWZmZXJEZXNjLCBOVUxMLCAmbVN0YWdpbmdCdWZmZXIpOwotICAgICAgICAgICAgaWYgKEZB
SUxFRChyZXN1bHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgKHZvaWQqKU5VTEwpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBtU3RhZ2luZ0J1ZmZlclNpemUgPSBidWZmZXJEZXNjLkJ5dGVXaWR0aDsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICghbVJlc29sdmVkRGF0YSB8fCBtUmVzb2x2ZWREYXRhU2l6
ZSA8IG1CdWZmZXJTaXplKQotICAgICAgICB7Ci0gICAgICAgICAgICBmcmVlKG1SZXNvbHZlZERh
dGEpOwotICAgICAgICAgICAgbVJlc29sdmVkRGF0YSA9IG1hbGxvYyhtU2l6ZSk7Ci0gICAgICAg
ICAgICBtUmVzb2x2ZWREYXRhU2l6ZSA9IG1TaXplOwotICAgICAgICB9Ci0KLSAgICAgICAgRDNE
MTFfQk9YIHNyY0JveDsKLSAgICAgICAgc3JjQm94LmxlZnQgPSAwOwotICAgICAgICBzcmNCb3gu
cmlnaHQgPSBtU2l6ZTsKLSAgICAgICAgc3JjQm94LnRvcCA9IDA7Ci0gICAgICAgIHNyY0JveC5i
b3R0b20gPSAxOwotICAgICAgICBzcmNCb3guZnJvbnQgPSAwOwotICAgICAgICBzcmNCb3guYmFj
ayA9IDE7Ci0KLSAgICAgICAgY29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKG1TdGFnaW5n
QnVmZmVyLCAwLCAwLCAwLCAwLCBtQnVmZmVyLCAwLCAmc3JjQm94KTsKLQotICAgICAgICBEM0Qx
MV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7Ci0gICAgICAgIHJlc3VsdCA9IGNv
bnRleHQtPk1hcChtU3RhZ2luZ0J1ZmZlciwgMCwgRDNEMTFfTUFQX1JFQUQsIDAsICZtYXBwZWRS
ZXNvdXJjZSk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAodm9pZCopTlVMTCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBtZW1jcHkobVJlc29sdmVkRGF0YSwgbWFwcGVkUmVzb3VyY2Uu
cERhdGEsIG1TaXplKTsKLQotICAgICAgICBjb250ZXh0LT5Vbm1hcChtU3RhZ2luZ0J1ZmZlciwg
MCk7Ci0KLSAgICAgICAgbVJlc29sdmVkRGF0YVZhbGlkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBt
UmVhZFVzYWdlQ291bnQgPSAwOwotCi0gICAgcmV0dXJuIG1SZXNvbHZlZERhdGE7Ci19Ci0KLXZv
aWQgQnVmZmVyU3RvcmFnZTExOjpzZXREYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGlu
dCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQotewotICAgIElEM0QxMURldmljZSAqZGV2aWNl
ID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLSAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250
ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7Ci0gICAgSFJFU1VMVCByZXN1bHQ7
Ci0KLSAgICB1bnNpZ25lZCBpbnQgcmVxdWlyZWRCdWZmZXJTaXplID0gc2l6ZSArIG9mZnNldDsK
LSAgICB1bnNpZ25lZCBpbnQgcmVxdWlyZWRTdGFnaW5nU2l6ZSA9IHNpemU7Ci0gICAgYm9vbCBk
aXJlY3RJbml0aWFsaXphdGlvbiA9IG9mZnNldCA9PSAwICYmICghbUJ1ZmZlciB8fCBtQnVmZmVy
U2l6ZSA8IHNpemUgKyBvZmZzZXQpOwotCi0gICAgaWYgKCFkaXJlY3RJbml0aWFsaXphdGlvbikK
LSAgICB7Ci0gICAgICAgIGlmICghbVN0YWdpbmdCdWZmZXIgfHwgbVN0YWdpbmdCdWZmZXJTaXpl
IDwgcmVxdWlyZWRTdGFnaW5nU2l6ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1TdGFn
aW5nQnVmZmVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1TdGFnaW5nQnVmZmVy
LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgbVN0YWdpbmdCdWZmZXIgPSBOVUxMOwotICAg
ICAgICAgICAgICAgIG1TdGFnaW5nQnVmZmVyU2l6ZSA9IDA7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIGJ1ZmZlckRlc2M7Ci0gICAgICAgICAgICBidWZm
ZXJEZXNjLkJ5dGVXaWR0aCA9IHNpemU7Ci0gICAgICAgICAgICBidWZmZXJEZXNjLlVzYWdlID0g
RDNEMTFfVVNBR0VfU1RBR0lORzsKLSAgICAgICAgICAgIGJ1ZmZlckRlc2MuQmluZEZsYWdzID0g
MDsKLSAgICAgICAgICAgIGJ1ZmZlckRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUND
RVNTX1JFQUQgfCBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOwotICAgICAgICAgICAgYnVmZmVyRGVz
Yy5NaXNjRmxhZ3MgPSAwOwotICAgICAgICAgICAgYnVmZmVyRGVzYy5TdHJ1Y3R1cmVCeXRlU3Ry
aWRlID0gMDsKLQotICAgICAgICAgICAgaWYgKGRhdGEpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgRDNEMTFfU1VCUkVTT1VSQ0VfREFUQSBpbml0aWFsRGF0YTsKLSAgICAgICAgICAg
ICAgICBpbml0aWFsRGF0YS5wU3lzTWVtID0gZGF0YTsKLSAgICAgICAgICAgICAgICBpbml0aWFs
RGF0YS5TeXNNZW1QaXRjaCA9IHNpemU7Ci0gICAgICAgICAgICAgICAgaW5pdGlhbERhdGEuU3lz
TWVtU2xpY2VQaXRjaCA9IDA7Ci0KLSAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZUJ1ZmZlcigmYnVmZmVyRGVzYywgJmluaXRpYWxEYXRhLCAmbVN0YWdpbmdCdWZmZXIpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJEZXNjLCBOVUxMLCAm
bVN0YWdpbmdCdWZmZXIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoRkFJTEVE
KHJlc3VsdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbVN0YWdp
bmdCdWZmZXJTaXplID0gc2l6ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChkYXRhKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVz
b3VyY2U7Ci0gICAgICAgICAgICByZXN1bHQgPSBjb250ZXh0LT5NYXAobVN0YWdpbmdCdWZmZXIs
IDAsIEQzRDExX01BUF9XUklURSwgMCwgJm1hcHBlZFJlc291cmNlKTsKLSAgICAgICAgICAgIGlm
IChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBtZW1jcHkobWFwcGVkUmVzb3VyY2UucERhdGEsIGRhdGEsIHNpemUpOwotCi0gICAgICAgICAg
ICBjb250ZXh0LT5Vbm1hcChtU3RhZ2luZ0J1ZmZlciwgMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAoIW1CdWZmZXIgfHwgbUJ1ZmZlclNpemUgPCBzaXplICsgb2Zmc2V0KQotICAgIHsK
LSAgICAgICAgRDNEMTFfQlVGRkVSX0RFU0MgYnVmZmVyRGVzYzsKLSAgICAgICAgYnVmZmVyRGVz
Yy5CeXRlV2lkdGggPSByZXF1aXJlZEJ1ZmZlclNpemU7Ci0gICAgICAgIGJ1ZmZlckRlc2MuVXNh
Z2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOwotICAgICAgICBidWZmZXJEZXNjLkJpbmRGbGFncyA9
IEQzRDExX0JJTkRfVkVSVEVYX0JVRkZFUiB8IEQzRDExX0JJTkRfSU5ERVhfQlVGRkVSOwotICAg
ICAgICBidWZmZXJEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKLSAgICAgICAgYnVmZmVyRGVzYy5N
aXNjRmxhZ3MgPSAwOwotICAgICAgICBidWZmZXJEZXNjLlN0cnVjdHVyZUJ5dGVTdHJpZGUgPSAw
OwotCi0gICAgICAgIGlmIChkaXJlY3RJbml0aWFsaXphdGlvbikKLSAgICAgICAgewotICAgICAg
ICAgICAgLy8gU2luY2UgdGhlIGRhdGEgd2lsbCBmaWxsIHRoZSBlbnRpcmUgYnVmZmVyIChiZWlu
ZyBsYXJnZXIgdGhhbiB0aGUgaW5pdGlhbCBzaXplIGFuZCBoYXZpbmcKLSAgICAgICAgICAgIC8v
IG5vIG9mZnNldCksIHRoZSBidWZmZXIgY2FuIGJlIGluaXRpYWxpemVkIHdpdGggdGhlIGRhdGEg
c28gbm8gc3RhZ2luZyBidWZmZXIgaXMgcmVxdWlyZWQKLQotICAgICAgICAgICAgLy8gTm8gbG9u
Z2VyIG5lZWQgdGhlIG9sZCBidWZmZXIKLSAgICAgICAgICAgIGlmIChtQnVmZmVyKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG1CdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgICAg
ICAgICBtQnVmZmVyID0gTlVMTDsKLSAgICAgICAgICAgICAgICBtQnVmZmVyU2l6ZSA9IDA7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChkYXRhKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIEQzRDExX1NVQlJFU09VUkNFX0RBVEEgaW5pdGlhbERhdGE7Ci0gICAgICAg
ICAgICAgICAgaW5pdGlhbERhdGEucFN5c01lbSA9IGRhdGE7Ci0gICAgICAgICAgICAgICAgaW5p
dGlhbERhdGEuU3lzTWVtUGl0Y2ggPSBzaXplOwotICAgICAgICAgICAgICAgIGluaXRpYWxEYXRh
LlN5c01lbVNsaWNlUGl0Y2ggPSAwOwotCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVCdWZmZXIoJmJ1ZmZlckRlc2MsICZpbml0aWFsRGF0YSwgJm1CdWZmZXIpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJEZXNjLCBOVUxMLCAmbUJ1
ZmZlcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG1C
dWZmZXIgJiYgb2Zmc2V0ID4gMCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gSWYgb2Zmc2V0
IGlzIGdyZWF0ZXIgdGhhbiB6ZXJvIGFuZCB0aGUgYnVmZmVyIGlzIG5vbi1udWxsLCBuZWVkIHRv
IHByZXNlcnZlIHRoZSBkYXRhIGZyb20KLSAgICAgICAgICAgIC8vIHRoZSBvbGQgYnVmZmVyIHVw
IHRvIG9mZnNldAotICAgICAgICAgICAgSUQzRDExQnVmZmVyICpuZXdCdWZmZXIgPSBOVUxMOwot
Ci0gICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmYnVmZmVyRGVzYywg
TlVMTCwgJm5ld0J1ZmZlcik7Ci0gICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgRDNEMTFfQk9YIHNyY0JveDsKLSAg
ICAgICAgICAgIHNyY0JveC5sZWZ0ID0gMDsKLSAgICAgICAgICAgIHNyY0JveC5yaWdodCA9IHN0
ZDo6bWluKG9mZnNldCwgbUJ1ZmZlclNpemUpOwotICAgICAgICAgICAgc3JjQm94LnRvcCA9IDA7
Ci0gICAgICAgICAgICBzcmNCb3guYm90dG9tID0gMTsKLSAgICAgICAgICAgIHNyY0JveC5mcm9u
dCA9IDA7Ci0gICAgICAgICAgICBzcmNCb3guYmFjayA9IDE7Ci0KLSAgICAgICAgICAgIGNvbnRl
eHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihuZXdCdWZmZXIsIDAsIDAsIDAsIDAsIG1CdWZmZXIs
IDAsICZzcmNCb3gpOwotCi0gICAgICAgICAgICBtQnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAg
ICAgICBtQnVmZmVyID0gbmV3QnVmZmVyOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgewotICAgICAgICAgICAgLy8gU2ltcGxlIGNhc2UsIG5vdGhpbmcgbmVlZHMgdG8gYmUgY29w
aWVkIGZyb20gdGhlIG9sZCBidWZmZXIgdG8gdGhlIG5ldyBvbmUsIGp1c3QgY3JlYXRlCi0gICAg
ICAgICAgICAvLyBhIG5ldyBidWZmZXIKLQotICAgICAgICAgICAgLy8gTm8gbG9uZ2VyIG5lZWQg
dGhlIG9sZCBidWZmZXIKLSAgICAgICAgICAgIGlmIChtQnVmZmVyKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIG1CdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBtQnVm
ZmVyID0gTlVMTDsKLSAgICAgICAgICAgICAgICBtQnVmZmVyU2l6ZSA9IDA7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBidWZmZXIgZm9yIGRhdGEgc3RvcmFn
ZQotICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVCdWZmZXIoJmJ1ZmZlckRlc2Ms
IE5VTEwsICZtQnVmZmVyKTsKLSAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdXBkYXRlU2VyaWFsKCk7
Ci0gICAgICAgIG1CdWZmZXJTaXplID0gYnVmZmVyRGVzYy5CeXRlV2lkdGg7Ci0gICAgfQotCi0g
ICAgaWYgKCFkaXJlY3RJbml0aWFsaXphdGlvbikKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtU3Rh
Z2luZ0J1ZmZlciAmJiBtU3RhZ2luZ0J1ZmZlclNpemUgPj0gcmVxdWlyZWRTdGFnaW5nU2l6ZSk7
Ci0KLSAgICAgICAgLy8gRGF0YSBpcyBhbHJlYWR5IHB1dCBpbnRvIHRoZSBzdGFnaW5nIGJ1ZmZl
ciwgY29weSBpdCBvdmVyIHRvIHRoZSBkYXRhIGJ1ZmZlcgotICAgICAgICBEM0QxMV9CT1ggc3Jj
Qm94OwotICAgICAgICBzcmNCb3gubGVmdCA9IDA7Ci0gICAgICAgIHNyY0JveC5yaWdodCA9IHNp
emU7Ci0gICAgICAgIHNyY0JveC50b3AgPSAwOwotICAgICAgICBzcmNCb3guYm90dG9tID0gMTsK
LSAgICAgICAgc3JjQm94LmZyb250ID0gMDsKLSAgICAgICAgc3JjQm94LmJhY2sgPSAxOwotCi0g
ICAgICAgIGNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihtQnVmZmVyLCAwLCBvZmZzZXQs
IDAsIDAsIG1TdGFnaW5nQnVmZmVyLCAwLCAmc3JjQm94KTsKLSAgICB9Ci0KLSAgICBtU2l6ZSA9
IHN0ZDo6bWF4KG1TaXplLCBvZmZzZXQgKyBzaXplKTsKLQotICAgIG1Xcml0ZVVzYWdlQ291bnQg
PSAwOwotCi0gICAgbVJlc29sdmVkRGF0YVZhbGlkID0gZmFsc2U7Ci19Ci0KLXZvaWQgQnVmZmVy
U3RvcmFnZTExOjpjbGVhcigpCi17Ci0gICAgbVJlc29sdmVkRGF0YVZhbGlkID0gZmFsc2U7Ci0g
ICAgbVNpemUgPSAwOwotfQotCi11bnNpZ25lZCBpbnQgQnVmZmVyU3RvcmFnZTExOjpnZXRTaXpl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVNpemU7Ci19Ci0KLWJvb2wgQnVmZmVyU3RvcmFnZTEx
OjpzdXBwb3J0c0RpcmVjdEJpbmRpbmcoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6bWFya0J1ZmZlclVzYWdlKCkKLXsKLSAgICBtUmVhZFVz
YWdlQ291bnQrKzsKLSAgICBtV3JpdGVVc2FnZUNvdW50Kys7Ci0KLSAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgaW50IHVzYWdlTGltaXQgPSA1OwotCi0gICAgaWYgKG1SZWFkVXNhZ2VDb3VudCA+
IHVzYWdlTGltaXQgJiYgbVJlc29sdmVkRGF0YSkKLSAgICB7Ci0gICAgICAgIGZyZWUobVJlc29s
dmVkRGF0YSk7Ci0gICAgICAgIG1SZXNvbHZlZERhdGEgPSBOVUxMOwotICAgICAgICBtUmVzb2x2
ZWREYXRhU2l6ZSA9IDA7Ci0gICAgICAgIG1SZXNvbHZlZERhdGFWYWxpZCA9IGZhbHNlOwotICAg
IH0KLQotICAgIGlmIChtUmVhZFVzYWdlQ291bnQgPiB1c2FnZUxpbWl0ICYmIG1Xcml0ZVVzYWdl
Q291bnQgPiB1c2FnZUxpbWl0ICYmIG1TdGFnaW5nQnVmZmVyKQotICAgIHsKLSAgICAgICAgbVN0
YWdpbmdCdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbVN0YWdpbmdCdWZmZXIgPSBOVUxMOwot
ICAgICAgICBtU3RhZ2luZ0J1ZmZlclNpemUgPSAwOwotICAgIH0KLX0KLQotSUQzRDExQnVmZmVy
ICpCdWZmZXJTdG9yYWdlMTE6OmdldEJ1ZmZlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1CdWZm
ZXI7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZTExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UxMS5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBiNjIzNDhiMGM5MzZmZWQ4M2E5MDQ1Y2UxOGViN2E5YTJkNjI4NTky
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZTExLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEz
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gQnVmZmVy
U3RvcmFnZTExLmggRGVmaW5lcyB0aGUgQnVmZmVyU3RvcmFnZTExIGNsYXNzLgotCi0jaWZuZGVm
IExJQkdMRVNWMl9SRU5ERVJFUl9CVUZGRVJTVE9SQUdFMTFfSF8KLSNkZWZpbmUgTElCR0xFU1Yy
X1JFTkRFUkVSX0JVRkZFUlNUT1JBR0UxMV9IXwotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL0J1ZmZlclN0b3JhZ2UuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci1jbGFzcyBSZW5kZXJlcjEx
OwotCi1jbGFzcyBCdWZmZXJTdG9yYWdlMTEgOiBwdWJsaWMgQnVmZmVyU3RvcmFnZQotewotICBw
dWJsaWM6Ci0gICAgZXhwbGljaXQgQnVmZmVyU3RvcmFnZTExKFJlbmRlcmVyMTEgKnJlbmRlcmVy
KTsKLSAgICB2aXJ0dWFsIH5CdWZmZXJTdG9yYWdlMTEoKTsKLQotICAgIHN0YXRpYyBCdWZmZXJT
dG9yYWdlMTEgKm1ha2VCdWZmZXJTdG9yYWdlMTEoQnVmZmVyU3RvcmFnZSAqYnVmZmVyU3RvcmFn
ZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgKmdldERhdGEoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9m
ZnNldCk7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyKCk7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBp
bnQgZ2V0U2l6ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0RpcmVjdEJpbmRp
bmcoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgbWFya0J1ZmZlclVzYWdlKCk7Ci0KLSAgICBJ
RDNEMTFCdWZmZXIgKmdldEJ1ZmZlcigpIGNvbnN0OwotCi0gIHByaXZhdGU6Ci0gICAgUmVuZGVy
ZXIxMSAqbVJlbmRlcmVyOwotCi0gICAgSUQzRDExQnVmZmVyICptU3RhZ2luZ0J1ZmZlcjsKLSAg
ICB1bnNpZ25lZCBpbnQgbVN0YWdpbmdCdWZmZXJTaXplOwotCi0gICAgSUQzRDExQnVmZmVyICpt
QnVmZmVyOwotICAgIHVuc2lnbmVkIGludCBtQnVmZmVyU2l6ZTsKLQotICAgIHVuc2lnbmVkIGlu
dCBtU2l6ZTsKLQotICAgIHZvaWQgKm1SZXNvbHZlZERhdGE7Ci0gICAgdW5zaWduZWQgaW50IG1S
ZXNvbHZlZERhdGFTaXplOwotICAgIGJvb2wgbVJlc29sdmVkRGF0YVZhbGlkOwotCi0gICAgdW5z
aWduZWQgaW50IG1SZWFkVXNhZ2VDb3VudDsKLSAgICB1bnNpZ25lZCBpbnQgbVdyaXRlVXNhZ2VD
b3VudDsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9CVUZGRVJTVE9S
QUdFMTFfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZTkuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdlOS5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGU2OWU3YTg5MjFlM2YzZWIwZjdlNjlkM2Y1YjZmNzFjM2Y5OWZhMzku
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdlOS5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0jaW5jbHVkZSAicHJlY29tcGlsZWQuaCIK
LS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwotCi0vLyBCdWZmZXJTdG9yYWdlOS5jcHAgRGVmaW5lcyB0aGUgQnVmZmVy
U3RvcmFnZTkgY2xhc3MuCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3Rv
cmFnZTkuaCIKLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0K
LUJ1ZmZlclN0b3JhZ2U5OjpCdWZmZXJTdG9yYWdlOSgpCi17Ci0gICAgbU1lbW9yeSA9IE5VTEw7
Ci0gICAgbUFsbG9jYXRlZFNpemUgPSAwOwotICAgIG1TaXplID0gMDsKLX0KLQotQnVmZmVyU3Rv
cmFnZTk6On5CdWZmZXJTdG9yYWdlOSgpCi17Ci0gICAgZGVsZXRlW10gbU1lbW9yeTsKLX0KLQot
QnVmZmVyU3RvcmFnZTkgKkJ1ZmZlclN0b3JhZ2U5OjptYWtlQnVmZmVyU3RvcmFnZTkoQnVmZmVy
U3RvcmFnZSAqYnVmZmVyU3RvcmFnZSkKLXsKLSAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShC
dWZmZXJTdG9yYWdlOSosIGJ1ZmZlclN0b3JhZ2UpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
QnVmZmVyU3RvcmFnZTkqPihidWZmZXJTdG9yYWdlKTsKLX0KLQotdm9pZCAqQnVmZmVyU3RvcmFn
ZTk6OmdldERhdGEoKQotewotICAgIHJldHVybiBtTWVtb3J5OwotfQotCi12b2lkIEJ1ZmZlclN0
b3JhZ2U5OjpzZXREYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNp
Z25lZCBpbnQgb2Zmc2V0KQotewotICAgIGlmICghbU1lbW9yeSB8fCBvZmZzZXQgKyBzaXplID4g
bUFsbG9jYXRlZFNpemUpCi0gICAgewotICAgICAgICB1bnNpZ25lZCBpbnQgbmV3QWxsb2NhdGVk
U2l6ZSA9IG9mZnNldCArIHNpemU7Ci0gICAgICAgIHZvaWQgKm5ld01lbW9yeSA9IG5ldyBjaGFy
W25ld0FsbG9jYXRlZFNpemVdOwotCi0gICAgICAgIGlmIChvZmZzZXQgPiAwICYmIG1NZW1vcnkg
JiYgbUFsbG9jYXRlZFNpemUgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBtZW1jcHkobmV3
TWVtb3J5LCBtTWVtb3J5LCBzdGQ6Om1pbihvZmZzZXQsIG1BbGxvY2F0ZWRTaXplKSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBkZWxldGVbXSBtTWVtb3J5OwotICAgICAgICBtTWVtb3J5ID0gbmV3
TWVtb3J5OwotICAgICAgICBtQWxsb2NhdGVkU2l6ZSA9IG5ld0FsbG9jYXRlZFNpemU7Ci0gICAg
fQotCi0gICAgbVNpemUgPSBzdGQ6Om1heChtU2l6ZSwgb2Zmc2V0ICsgc2l6ZSk7Ci0gICAgaWYg
KGRhdGEpCi0gICAgewotICAgICAgICBtZW1jcHkocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obU1l
bW9yeSkgKyBvZmZzZXQsIGRhdGEsIHNpemUpOwotICAgIH0KLX0KLQotdm9pZCBCdWZmZXJTdG9y
YWdlOTo6Y2xlYXIoKQotewotICAgIG1TaXplID0gMDsKLX0KLQotdW5zaWduZWQgaW50IEJ1ZmZl
clN0b3JhZ2U5OjpnZXRTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVNpemU7Ci19Ci0KLWJv
b2wgQnVmZmVyU3RvcmFnZTk6OnN1cHBvcnRzRGlyZWN0QmluZGluZygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2U5LmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2U5LmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlODAzOTY5YmMzNWQ0ZWExMTFkYTIyODFmMjViM2Ux
NzFkZGMyMzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9y
YWdlOS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8v
IEJ1ZmZlclN0b3JhZ2U5LmggRGVmaW5lcyB0aGUgQnVmZmVyU3RvcmFnZTkgY2xhc3MuCi0KLSNp
Zm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0JVRkZFUlNUT1JBR0U5X0hfCi0jZGVmaW5lIExJQkdM
RVNWMl9SRU5ERVJFUl9CVUZGRVJTVE9SQUdFOV9IXwotCi0jaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL0J1ZmZlclN0b3JhZ2UuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLWNsYXNzIEJ1ZmZl
clN0b3JhZ2U5IDogcHVibGljIEJ1ZmZlclN0b3JhZ2UKLXsKLSAgcHVibGljOgotICAgIEJ1ZmZl
clN0b3JhZ2U5KCk7Ci0gICAgdmlydHVhbCB+QnVmZmVyU3RvcmFnZTkoKTsKLQotICAgIHN0YXRp
YyBCdWZmZXJTdG9yYWdlOSAqbWFrZUJ1ZmZlclN0b3JhZ2U5KEJ1ZmZlclN0b3JhZ2UgKmJ1ZmZl
clN0b3JhZ2UpOwotCi0gICAgdmlydHVhbCB2b2lkICpnZXREYXRhKCk7Ci0gICAgdmlydHVhbCB2
b2lkIHNldERhdGEoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVk
IGludCBvZmZzZXQpOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpOwotICAgIHZpcnR1YWwgdW5z
aWduZWQgaW50IGdldFNpemUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNEaXJl
Y3RCaW5kaW5nKCkgY29uc3Q7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9B
U1NJR04oQnVmZmVyU3RvcmFnZTkpOwotCi0gICAgdm9pZCAqbU1lbW9yeTsKLSAgICB1bnNpZ25l
ZCBpbnQgbUFsbG9jYXRlZFNpemU7Ci0KLSAgICB1bnNpZ25lZCBpbnQgbVNpemU7Ci19OwotCi19
Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfQlVGRkVSU1RPUkFHRTlfSF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvRmVu
Y2UxMS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L0ZlbmNlMTEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDExYzlhMGZjODJl
OGNlNTYxZjAwZjE0NjA2MTAyNGJmZjQyZGM1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvRmVuY2UxMS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotI2lu
Y2x1ZGUgInByZWNvbXBpbGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gRmVuY2UxMS5jcHA6IERl
ZmluZXMgdGhlIHJ4OjpGZW5jZTExIGNsYXNzIHdoaWNoIGltcGxlbWVudHMgcng6OkZlbmNlSW1w
bC4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZTExLmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIx
MS5oIgotCi1uYW1lc3BhY2UgcngKLXsKLQotRmVuY2UxMTo6RmVuY2UxMShyeDo6UmVuZGVyZXIx
MSAqcmVuZGVyZXIpCi17Ci0gICAgbVJlbmRlcmVyID0gcmVuZGVyZXI7Ci0gICAgbVF1ZXJ5ID0g
TlVMTDsKLX0KLQotRmVuY2UxMTo6fkZlbmNlMTEoKQotewotICAgIGlmIChtUXVlcnkpCi0gICAg
ewotICAgICAgICBtUXVlcnktPlJlbGVhc2UoKTsKLSAgICAgICAgbVF1ZXJ5ID0gTlVMTDsKLSAg
ICB9Ci19Ci0KLUdMYm9vbGVhbiBGZW5jZTExOjppc0ZlbmNlKCkKLXsKLSAgICAvLyBHTF9OVl9m
ZW5jZSBzcGVjOgotICAgIC8vIEEgbmFtZSByZXR1cm5lZCBieSBHZW5GZW5jZXNOViwgYnV0IG5v
dCB5ZXQgc2V0IHZpYSBTZXRGZW5jZU5WLCBpcyBub3QgdGhlIG5hbWUgb2YgYW4gZXhpc3Rpbmcg
ZmVuY2UuCi0gICAgcmV0dXJuIG1RdWVyeSAhPSBOVUxMOwotfQotCi12b2lkIEZlbmNlMTE6OnNl
dEZlbmNlKEdMZW51bSBjb25kaXRpb24pCi17Ci0gICAgaWYgKCFtUXVlcnkpCi0gICAgewotICAg
ICAgICBEM0QxMV9RVUVSWV9ERVNDIHF1ZXJ5RGVzYzsKLSAgICAgICAgcXVlcnlEZXNjLlF1ZXJ5
ID0gRDNEMTFfUVVFUllfRVZFTlQ7Ci0gICAgICAgIHF1ZXJ5RGVzYy5NaXNjRmxhZ3MgPSAwOwot
Ci0gICAgICAgIGlmIChGQUlMRUQobVJlbmRlcmVyLT5nZXREZXZpY2UoKS0+Q3JlYXRlUXVlcnko
JnF1ZXJ5RGVzYywgJm1RdWVyeSkpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbVJlbmRl
cmVyLT5nZXREZXZpY2VDb250ZXh0KCktPkVuZChtUXVlcnkpOwotCi0gICAgc2V0Q29uZGl0aW9u
KGNvbmRpdGlvbik7Ci0gICAgc2V0U3RhdHVzKEdMX0ZBTFNFKTsKLX0KLQotR0xib29sZWFuIEZl
bmNlMTE6OnRlc3RGZW5jZSgpCi17Ci0gICAgaWYgKG1RdWVyeSA9PSBOVUxMKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfVFJVRSk7Ci0g
ICAgfQotCi0gICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQo
KS0+R2V0RGF0YShtUXVlcnksIE5VTEwsIDAsIDApOwotCi0gICAgaWYgKG1SZW5kZXJlci0+aXNE
ZXZpY2VMb3N0KCkpCi0gICAgewotICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSwgR0xfVFJVRSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKHJlc3VsdCA9PSBTX09LIHx8IHJl
c3VsdCA9PSBTX0ZBTFNFKTsKLSAgICBzZXRTdGF0dXMocmVzdWx0ID09IFNfT0spOwotICAgIHJl
dHVybiBnZXRTdGF0dXMoKTsKLX0KLQotdm9pZCBGZW5jZTExOjpmaW5pc2hGZW5jZSgpCi17Ci0g
ICAgaWYgKG1RdWVyeSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgd2hpbGUgKCF0ZXN0RmVuY2UoKSkK
LSAgICB7Ci0gICAgICAgIFNsZWVwKDApOwotICAgIH0KLX0KLQotdm9pZCBGZW5jZTExOjpnZXRG
ZW5jZWl2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcykKLXsKLSAgICBpZiAobVF1ZXJ5ID09
IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHBuYW1lKQotICAgIHsKLSAgICAgIGNhc2UgR0xf
RkVOQ0VfU1RBVFVTX05WOgotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBHTF9OVl9mZW5jZSBz
cGVjOgotICAgICAgICAgICAgLy8gT25jZSB0aGUgc3RhdHVzIG9mIGEgZmVuY2UgaGFzIGJlZW4g
ZmluaXNoZWQgKHZpYSBGaW5pc2hGZW5jZU5WKSBvciB0ZXN0ZWQgYW5kIHRoZSByZXR1cm5lZCBz
dGF0dXMgaXMgVFJVRSAodmlhIGVpdGhlciBUZXN0RmVuY2VOVgotICAgICAgICAgICAgLy8gb3Ig
R2V0RmVuY2Vpdk5WIHF1ZXJ5aW5nIHRoZSBGRU5DRV9TVEFUVVNfTlYpLCB0aGUgc3RhdHVzIHJl
bWFpbnMgVFJVRSB1bnRpbCB0aGUgbmV4dCBTZXRGZW5jZU5WIG9mIHRoZSBmZW5jZS4KLSAgICAg
ICAgICAgIGlmIChnZXRTdGF0dXMoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBw
YXJhbXNbMF0gPSBHTF9UUlVFOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXItPmdldERldmljZUNv
bnRleHQoKS0+R2V0RGF0YShtUXVlcnksIE5VTEwsIDAsIEQzRDExX0FTWU5DX0dFVERBVEFfRE9O
T1RGTFVTSCk7Ci0KLSAgICAgICAgICAgIGlmIChtUmVuZGVyZXItPmlzRGV2aWNlTG9zdCgpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9IEdMX1RSVUU7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBTX09LIHx8IHJlc3VsdCA9PSBT
X0ZBTFNFKTsKLSAgICAgICAgICAgIHNldFN0YXR1cyhyZXN1bHQgPT0gU19PSyk7Ci0gICAgICAg
ICAgICBwYXJhbXNbMF0gPSBnZXRTdGF0dXMoKTsKLQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgIGNhc2UgR0xfRkVOQ0VfQ09ORElUSU9OX05WOgotICAgICAgICBwYXJhbXNb
MF0gPSBnZXRDb25kaXRpb24oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9GZW5jZTExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL0ZlbmNlMTEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYTUzOThiY2ExNDkwMDY0N2IwM2RmMjdhMTAxOTFkOTA2OTE5MTExMi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ZlbmNlMTEuaAorKysgL2Rldi9udWxsCkBAIC0xLDM5
ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBGZW5jZTExLmg6IERlZmluZXMgdGhlIHJ4OjpG
ZW5jZTExIGNsYXNzIHdoaWNoIGltcGxlbWVudHMgcng6OkZlbmNlSW1wbC4KLQotI2lmbmRlZiBM
SUJHTEVTVjJfUkVOREVSRVJfRmVuY2UxMV9IXwotI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJf
RmVuY2UxMV9IXwotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0ZlbmNlSW1wbC5oIgot
Ci1uYW1lc3BhY2UgcngKLXsKLWNsYXNzIFJlbmRlcmVyMTE7Ci0KLWNsYXNzIEZlbmNlMTEgOiBw
dWJsaWMgRmVuY2VJbXBsCi17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBGZW5jZTExKHJ4OjpS
ZW5kZXJlcjExICpyZW5kZXJlcik7Ci0gICAgdmlydHVhbCB+RmVuY2UxMSgpOwotCi0gICAgR0xi
b29sZWFuIGlzRmVuY2UoKTsKLSAgICB2b2lkIHNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pOwot
ICAgIEdMYm9vbGVhbiB0ZXN0RmVuY2UoKTsKLSAgICB2b2lkIGZpbmlzaEZlbmNlKCk7Ci0gICAg
dm9pZCBnZXRGZW5jZWl2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7Ci0KLSAgcHJpdmF0
ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRmVuY2UxMSk7Ci0KLSAgICByeDo6UmVu
ZGVyZXIxMSAqbVJlbmRlcmVyOwotICAgIElEM0QxMVF1ZXJ5ICptUXVlcnk7Ci19OwotCi19Ci0K
LSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfRkVOQ0UxMV9IXwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZTkuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZTkuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjA2NGQ3ZTUyYmFmYWU5NzUxNTA4NGE4
M2FiYjYyOGE0YjhiM2Y0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvRmVu
Y2U5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzNSArMCwwIEBACi0jaW5jbHVkZSAicHJlY29t
cGlsZWQuaCIKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBGZW5jZTkuY3BwOiBEZWZpbmVzIHRoZSByeDo6
RmVuY2U5IGNsYXNzLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0ZlbmNlOS5oIgot
I2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L3JlbmRlcmVyOV91dGlscy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJl
cjkuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLUZlbmNlOTo6RmVuY2U5KHJ4OjpSZW5kZXJlcjkg
KnJlbmRlcmVyKQotewotICAgIG1SZW5kZXJlciA9IHJlbmRlcmVyOwotICAgIG1RdWVyeSA9IE5V
TEw7Ci19Ci0KLUZlbmNlOTo6fkZlbmNlOSgpCi17Ci0gICAgaWYgKG1RdWVyeSkKLSAgICB7Ci0g
ICAgICAgIG1SZW5kZXJlci0+ZnJlZUV2ZW50UXVlcnkobVF1ZXJ5KTsKLSAgICAgICAgbVF1ZXJ5
ID0gTlVMTDsKLSAgICB9Ci19Ci0KLUdMYm9vbGVhbiBGZW5jZTk6OmlzRmVuY2UoKQotewotICAg
IC8vIEdMX05WX2ZlbmNlIHNwZWM6Ci0gICAgLy8gQSBuYW1lIHJldHVybmVkIGJ5IEdlbkZlbmNl
c05WLCBidXQgbm90IHlldCBzZXQgdmlhIFNldEZlbmNlTlYsIGlzIG5vdCB0aGUgbmFtZSBvZiBh
biBleGlzdGluZyBmZW5jZS4KLSAgICByZXR1cm4gbVF1ZXJ5ICE9IE5VTEw7Ci19Ci0KLXZvaWQg
RmVuY2U5OjpzZXRGZW5jZShHTGVudW0gY29uZGl0aW9uKQotewotICAgIGlmICghbVF1ZXJ5KQot
ICAgIHsKLSAgICAgICAgbVF1ZXJ5ID0gbVJlbmRlcmVyLT5hbGxvY2F0ZUV2ZW50UXVlcnkoKTsK
LSAgICAgICAgaWYgKCFtUXVlcnkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBIUkVTVUxU
IHJlc3VsdCA9IG1RdWVyeS0+SXNzdWUoRDNESVNTVUVfRU5EKTsKLSAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOwotCi0gICAgc2V0Q29uZGl0aW9uKGNvbmRpdGlvbik7Ci0gICAgc2V0U3Rh
dHVzKEdMX0ZBTFNFKTsKLX0KLQotR0xib29sZWFuIEZlbmNlOTo6dGVzdEZlbmNlKCkKLXsKLSAg
ICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OLCBHTF9UUlVFKTsKLSAgICB9Ci0KLSAgICBIUkVTVUxUIHJlc3Vs
dCA9IG1RdWVyeS0+R2V0RGF0YShOVUxMLCAwLCBEM0RHRVREQVRBX0ZMVVNIKTsKLQotICAgIGlm
IChkM2Q5Ojppc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQotICAgIHsKLSAgICAgICAgbVJlbmRl
cmVyLT5ub3RpZnlEZXZpY2VMb3N0KCk7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSwgR0xfVFJVRSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKHJlc3VsdCA9PSBTX09L
IHx8IHJlc3VsdCA9PSBTX0ZBTFNFKTsKLSAgICBzZXRTdGF0dXMocmVzdWx0ID09IFNfT0spOwot
ICAgIHJldHVybiBnZXRTdGF0dXMoKTsKLX0KLQotdm9pZCBGZW5jZTk6OmZpbmlzaEZlbmNlKCkK
LXsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIXRlc3RGZW5j
ZSgpKQotICAgIHsKLSAgICAgICAgU2xlZXAoMCk7Ci0gICAgfQotfQotCi12b2lkIEZlbmNlOTo6
Z2V0RmVuY2VpdihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpCi17Ci0gICAgaWYgKG1RdWVy
eSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgfQotCi0gICAgc3dpdGNoIChwbmFtZSkKLSAgICB7Ci0gICAgICAgIGNh
c2UgR0xfRkVOQ0VfU1RBVFVTX05WOgotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBHTF9OVl9m
ZW5jZSBzcGVjOgotICAgICAgICAgICAgLy8gT25jZSB0aGUgc3RhdHVzIG9mIGEgZmVuY2UgaGFz
IGJlZW4gZmluaXNoZWQgKHZpYSBGaW5pc2hGZW5jZU5WKSBvciB0ZXN0ZWQgYW5kIHRoZSByZXR1
cm5lZCBzdGF0dXMgaXMgVFJVRSAodmlhIGVpdGhlciBUZXN0RmVuY2VOVgotICAgICAgICAgICAg
Ly8gb3IgR2V0RmVuY2Vpdk5WIHF1ZXJ5aW5nIHRoZSBGRU5DRV9TVEFUVVNfTlYpLCB0aGUgc3Rh
dHVzIHJlbWFpbnMgVFJVRSB1bnRpbCB0aGUgbmV4dCBTZXRGZW5jZU5WIG9mIHRoZSBmZW5jZS4K
LSAgICAgICAgICAgIGlmIChnZXRTdGF0dXMoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBwYXJhbXNbMF0gPSBHTF9UUlVFOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtUXVl
cnktPkdldERhdGEoTlVMTCwgMCwgMCk7Ci0KLSAgICAgICAgICAgIGlmIChkM2Q5Ojppc0Rldmlj
ZUxvc3RFcnJvcihyZXN1bHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBhcmFt
c1swXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICAgICAgbVJlbmRlcmVyLT5ub3RpZnlEZXZpY2VM
b3N0KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBTX09LIHx8
IHJlc3VsdCA9PSBTX0ZBTFNFKTsKLSAgICAgICAgICAgIHNldFN0YXR1cyhyZXN1bHQgPT0gU19P
Syk7Ci0gICAgICAgICAgICBwYXJhbXNbMF0gPSBnZXRTdGF0dXMoKTsKLQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHTF9GRU5DRV9DT05ESVRJT05fTlY6Ci0g
ICAgICAgICAgICBwYXJhbXNbMF0gPSBnZXRDb25kaXRpb24oKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ZlbmNlOS5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZTku
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWYxNzY0MWU1MTlhYjQ3ODQwN2U4MGNj
YmZkMjUzODBhM2RjYzhiYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0Zl
bmNlOS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8v
IEZlbmNlOS5oOiBEZWZpbmVzIHRoZSByeDo6RmVuY2U5IGNsYXNzIHdoaWNoIGltcGxlbWVudHMg
cng6OkZlbmNlSW1wbC4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfRkVOQ0U5X0hfCi0j
ZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9GRU5DRTlfSF8KLQotI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9GZW5jZUltcGwuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci1jbGFzcyBSZW5kZXJl
cjk7Ci0KLWNsYXNzIEZlbmNlOSA6IHB1YmxpYyBGZW5jZUltcGwKLXsKLSAgcHVibGljOgotICAg
IGV4cGxpY2l0IEZlbmNlOShyeDo6UmVuZGVyZXI5ICpyZW5kZXJlcik7Ci0gICAgdmlydHVhbCB+
RmVuY2U5KCk7Ci0KLSAgICBHTGJvb2xlYW4gaXNGZW5jZSgpOwotICAgIHZvaWQgc2V0RmVuY2Uo
R0xlbnVtIGNvbmRpdGlvbik7Ci0gICAgR0xib29sZWFuIHRlc3RGZW5jZSgpOwotICAgIHZvaWQg
ZmluaXNoRmVuY2UoKTsKLSAgICB2b2lkIGdldEZlbmNlaXYoR0xlbnVtIHBuYW1lLCBHTGludCAq
cGFyYW1zKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihGZW5j
ZTkpOwotCi0gICAgcng6OlJlbmRlcmVyOSAqbVJlbmRlcmVyOwotICAgIElEaXJlY3QzRFF1ZXJ5
OSAqbVF1ZXJ5OwotfTsKLQotfQotCi0jZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX0ZFTkNF
OV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9JbWFnZTExLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvSW1hZ2UxMS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5
Yzg5MjJkMDczZDBhNDFhNzkwNDY0YmYyYThhZjRhYzM5NDFjMjQuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZTExLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ1NyAr
MCwwIEBACi0jaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBJbWFn
ZTExLmg6IEltcGxlbWVudHMgdGhlIHJ4OjpJbWFnZTExIGNsYXNzLCB3aGljaCBhY3RzIGFzIHRo
ZSBpbnRlcmZhY2UgdG8KLS8vIHRoZSBhY3R1YWwgdW5kZXJseWluZyByZXNvdXJjZXMgb2YgYSBU
ZXh0dXJlCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIxMS5oIgotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZTExLmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlMTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVi
dWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCi0KLSNpbmNsdWRl
ICJsaWJHTEVTdjIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKLSNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXIxMV91dGlscy5oIgotI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9nZW5lcmF0ZW1pcC5oIgotCi1uYW1lc3BhY2UgcngKLXsKLQot
SW1hZ2UxMTo6SW1hZ2UxMSgpCi17Ci0gICAgbVN0YWdpbmdUZXh0dXJlID0gTlVMTDsKLSAgICBt
UmVuZGVyZXIgPSBOVUxMOwotICAgIG1EWEdJRm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5LTk9XTjsK
LX0KLQotSW1hZ2UxMTo6fkltYWdlMTEoKQotewotICAgIGlmIChtU3RhZ2luZ1RleHR1cmUpCi0g
ICAgewotICAgICAgICBtU3RhZ2luZ1RleHR1cmUtPlJlbGVhc2UoKTsKLSAgICB9Ci19Ci0KLUlt
YWdlMTEgKkltYWdlMTE6Om1ha2VJbWFnZTExKEltYWdlICppbWcpCi17Ci0gICAgQVNTRVJUKEhB
U19EWU5BTUlDX1RZUEUocng6OkltYWdlMTEqLCBpbWcpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8cng6OkltYWdlMTEqPihpbWcpOwotfQotCi12b2lkIEltYWdlMTE6OmdlbmVyYXRlTWlwbWFw
KEltYWdlMTEgKmRlc3QsIEltYWdlMTEgKnNyYykKLXsKLSAgICBBU1NFUlQoc3JjLT5nZXREWEdJ
Rm9ybWF0KCkgPT0gZGVzdC0+Z2V0RFhHSUZvcm1hdCgpKTsKLSAgICBBU1NFUlQoc3JjLT5nZXRX
aWR0aCgpID09IDEgfHwgc3JjLT5nZXRXaWR0aCgpIC8gMiA9PSBkZXN0LT5nZXRXaWR0aCgpKTsK
LSAgICBBU1NFUlQoc3JjLT5nZXRIZWlnaHQoKSA9PSAxIHx8IHNyYy0+Z2V0SGVpZ2h0KCkgLyAy
ID09IGRlc3QtPmdldEhlaWdodCgpKTsKLQotICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBk
ZXN0TWFwcGVkLCBzcmNNYXBwZWQ7Ci0gICAgZGVzdC0+bWFwKEQzRDExX01BUF9XUklURSwgJmRl
c3RNYXBwZWQpOwotICAgIHNyYy0+bWFwKEQzRDExX01BUF9SRUFELCAmc3JjTWFwcGVkKTsKLQot
ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IHVuc2lnbmVkIGNoYXIqPihzcmNNYXBwZWQucERhdGEpOwotICAgIHVuc2lnbmVkIGNoYXIg
KmRlc3REYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZGVzdE1hcHBlZC5w
RGF0YSk7Ci0KLSAgICBpZiAoc291cmNlRGF0YSAmJiBkZXN0RGF0YSkKLSAgICB7Ci0gICAgICAg
IHN3aXRjaCAoc3JjLT5nZXREWEdJRm9ybWF0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNl
IERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOgotICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
QjhHOFI4QThfVU5PUk06Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxSOEc4QjhBOD4oc3JjLT5n
ZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0
Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQThfVU5PUk06Ci0gICAgICAgICAgICBHZW5lcmF0
ZU1pcDxBOD4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRhLCBz
cmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVU5PUk06Ci0gICAg
ICAgICAgICBHZW5lcmF0ZU1pcDxSOD4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgp
LCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJv
d1BpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjMyRzMyQjMyQTMyX0ZMT0FUOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8QTMyQjMyRzMyUjMy
Rj4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBw
ZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FUOgotICAg
ICAgICAgICAgR2VuZXJhdGVNaXA8UjMyRzMyQjMyRj4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdl
dEhlaWdodCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0
TWFwcGVkLlJvd1BpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfUjE2RzE2QjE2QTE2X0ZMT0FUOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8QTE2
QjE2RzE2UjE2Rj4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRh
LCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9VTk9STToK
LSAgICAgICAgICAgIEdlbmVyYXRlTWlwPFI4Rzg+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRI
ZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1h
cHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERYR0lf
Rk9STUFUX1IxNl9GTE9BVDoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPFIxNkY+KHNyYy0+Z2V0
V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNo
LCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9GTE9BVDoKLSAgICAgICAgICAgIEdlbmVy
YXRlTWlwPFIxNkcxNkY+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNl
RGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMl9GTE9B
VDoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPFIzMkY+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5n
ZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVz
dE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERY
R0lfRk9STUFUX1IzMkczMl9GTE9BVDoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPFIzMkczMkY+
KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVk
LlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVzdC0+dW5tYXAoKTsKLSAg
ICAgICAgc3JjLT51bm1hcCgpOwotICAgIH0KLQotICAgIGRlc3QtPm1hcmtEaXJ0eSgpOwotfQot
Ci1ib29sIEltYWdlMTE6OmlzRGlydHkoKSBjb25zdAotewotICAgIHJldHVybiAobVN0YWdpbmdU
ZXh0dXJlICYmIG1EaXJ0eSk7Ci19Ci0KLWJvb2wgSW1hZ2UxMTo6dXBkYXRlU3VyZmFjZShUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIFRl
eHR1cmVTdG9yYWdlMTFfMkQgKnN0b3JhZ2UxMSA9IFRleHR1cmVTdG9yYWdlMTFfMkQ6Om1ha2VU
ZXh0dXJlU3RvcmFnZTExXzJEKHN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKLSAgICBy
ZXR1cm4gc3RvcmFnZTExLT51cGRhdGVTdWJyZXNvdXJjZUxldmVsKGdldFN0YWdpbmdUZXh0dXJl
KCksIGdldFN0YWdpbmdTdWJyZXNvdXJjZSgpLCBsZXZlbCwgMCwgeG9mZnNldCwgeW9mZnNldCwg
d2lkdGgsIGhlaWdodCk7Ci19Ci0KLWJvb2wgSW1hZ2UxMTo6dXBkYXRlU3VyZmFjZShUZXh0dXJl
U3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQot
ewotICAgIFRleHR1cmVTdG9yYWdlMTFfQ3ViZSAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2Ux
MV9DdWJlOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKHN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0
YW5jZSgpKTsKLSAgICByZXR1cm4gc3RvcmFnZTExLT51cGRhdGVTdWJyZXNvdXJjZUxldmVsKGdl
dFN0YWdpbmdUZXh0dXJlKCksIGdldFN0YWdpbmdTdWJyZXNvdXJjZSgpLCBsZXZlbCwgZmFjZSwg
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLWJvb2wgSW1hZ2UxMTo6cmVk
ZWZpbmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIGJvb2wgZm9yY2VSZWxlYXNlKQotewotICAgIGlmIChtV2lk
dGggIT0gd2lkdGggfHwKLSAgICAgICAgbUhlaWdodCAhPSBoZWlnaHQgfHwKLSAgICAgICAgbUlu
dGVybmFsRm9ybWF0ICE9IGludGVybmFsZm9ybWF0IHx8Ci0gICAgICAgIGZvcmNlUmVsZWFzZSkK
LSAgICB7Ci0gICAgICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKHJl
bmRlcmVyKTsKLQotICAgICAgICBtV2lkdGggPSB3aWR0aDsKLSAgICAgICAgbUhlaWdodCA9IGhl
aWdodDsKLSAgICAgICAgbUludGVybmFsRm9ybWF0ID0gaW50ZXJuYWxmb3JtYXQ7Ci0gICAgICAg
IC8vIGNvbXB1dGUgdGhlIGQzZCBmb3JtYXQgdGhhdCB3aWxsIGJlIHVzZWQKLSAgICAgICAgbURY
R0lGb3JtYXQgPSBnbF9kM2QxMTo6Q29udmVydFRleHR1cmVGb3JtYXQoaW50ZXJuYWxmb3JtYXQp
OwotICAgICAgICBtQWN0dWFsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRUZXh0dXJlSW50ZXJu
YWxGb3JtYXQobURYR0lGb3JtYXQpOwotCi0gICAgICAgIGlmIChtU3RhZ2luZ1RleHR1cmUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1TdGFnaW5nVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAg
ICAgICAgbVN0YWdpbmdUZXh0dXJlID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIElt
YWdlMTE6OmlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFRleHR1cmVT
dG9yYWdlMTE6OklzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUobURYR0lGb3JtYXQpOwotfQotCi1E
WEdJX0ZPUk1BVCBJbWFnZTExOjpnZXREWEdJRm9ybWF0KCkgY29uc3QKLXsKLSAgICAvLyB0aGlz
IHNob3VsZCBvbmx5IGhhcHBlbiBpZiB0aGUgaW1hZ2UgaGFzbid0IGJlZW4gcmVkZWZpbmVkIGZp
cnN0Ci0gICAgLy8gd2hpY2ggd291bGQgYmUgYSBidWcgYnkgdGhlIGNhbGxlcgotICAgIEFTU0VS
VChtRFhHSUZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKTsKLQotICAgIHJldHVybiBtRFhH
SUZvcm1hdDsKLX0KLQotLy8gU3RvcmUgdGhlIHBpeGVsIHJlY3RhbmdsZSBkZXNpZ25hdGVkIGJ5
IHhvZmZzZXQseW9mZnNldCx3aWR0aCxoZWlnaHQgd2l0aCBwaXhlbHMgc3RvcmVkIGFzIGZvcm1h
dC90eXBlIGF0IGlucHV0Ci0vLyBpbnRvIHRoZSB0YXJnZXQgcGl4ZWwgcmVjdGFuZ2xlLgotdm9p
ZCBJbWFnZTExOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5w
YWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCkKLXsKLSAgICBEM0QxMV9NQVBQRURfU1VC
UkVTT1VSQ0UgbWFwcGVkSW1hZ2U7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBtYXAoRDNEMTFfTUFQ
X1dSSVRFLCAmbWFwcGVkSW1hZ2UpOwotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0g
ICAgICAgIEVSUigiQ291bGQgbm90IG1hcCBpbWFnZSBmb3IgbG9hZGluZy4iKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSBnbDo6Q29tcHV0
ZVBpdGNoKHdpZHRoLCBtSW50ZXJuYWxGb3JtYXQsIHVucGFja0FsaWdubWVudCk7Ci0gICAgc2l6
ZV90IHBpeGVsU2l6ZSA9IGQzZDExOjpDb21wdXRlUGl4ZWxTaXplQml0cyhtRFhHSUZvcm1hdCkg
LyA4OwotICAgIHZvaWQqIG9mZnNldE1hcHBlZERhdGEgPSAodm9pZCopKChCWVRFICopbWFwcGVk
SW1hZ2UucERhdGEgKyAoeW9mZnNldCAqIG1hcHBlZEltYWdlLlJvd1BpdGNoICsgeG9mZnNldCAq
IHBpeGVsU2l6ZSkpOwotCi0gICAgc3dpdGNoIChtSW50ZXJuYWxGb3JtYXQpCi0gICAgewotICAg
ICAgY2FzZSBHTF9BTFBIQThfRVhUOgotICAgICAgICBsb2FkQWxwaGFEYXRhVG9OYXRpdmUod2lk
dGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZz
ZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRThf
RVhUOgotICAgICAgICBsb2FkTHVtaW5hbmNlRGF0YVRvTmF0aXZlT3JCR1JBKHdpZHRoLCBoZWln
aHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVk
RGF0YSwgZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQUxQSEEzMkZfRVhU
OgotICAgICAgICBsb2FkQWxwaGFGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTMyRl9FWFQ6Ci0gICAgICAgIGxv
YWRMdW1pbmFuY2VGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX0FMUEhBMTZGX0VYVDoKLSAgICAgICAgbG9hZEFscGhhSGFsZkZs
b2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1h
Z2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfTFVNSU5BTkNFMTZGX0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5jZUhhbGZGbG9hdERh
dGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJv
d1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X0xVTUlOQU5DRThfQUxQSEE4X0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhRGF0YVRv
TmF0aXZlT3JCR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFn
ZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSwgZmFsc2UpOwotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5j
ZUFscGhhRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBt
YXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhUOgotICAgICAgICBsb2FkTHVtaW5h
bmNlQWxwaGFIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgICAgbG9hZFJHQlVCeXRlRGF0YVRv
UkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0
Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdC
NTY1OgotICAgICAgICBsb2FkUkdCNTY1RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBp
dGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQThfT0VTOgotICAgICAgICBsb2FkUkdCQVVC
eXRlRGF0YVRvTmF0aXZlKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJ
bWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9SR0JBNDoKLSAgICAgICAgbG9hZFJHQkE0NDQ0RGF0YVRvUkdCQSh3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBl
ZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCNV9BMToKLSAgICAgICAg
bG9hZFJHQkE1NTUxRGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwg
bWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfQkdSQThfRVhUOgotICAgICAgICBsb2FkQkdSQURhdGFUb0JHUkEod2lk
dGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZz
ZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQjMyRl9FWFQ6
Ci0gICAgICAgIGxvYWRSR0JGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQjE2Rl9FWFQ6Ci0gICAgICAgIGxvYWRSR0JIYWxm
RmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJ
bWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9SR0JBMzJGX0VYVDoKLSAgICAgICAgbG9hZFJHQkFGbG9hdERhdGFUb1JHQkEod2lk
dGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZz
ZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQkExNkZfRVhU
OgotICAgICAgICBsb2FkUkdCQUhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAKLSAgICB9Ci0K
LSAgICB1bm1hcCgpOwotfQotCi12b2lkIEltYWdlMTE6OmxvYWRDb21wcmVzc2VkRGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQpCi17Ci0g
ICAgQVNTRVJUKHhvZmZzZXQgJSA0ID09IDApOwotICAgIEFTU0VSVCh5b2Zmc2V0ICUgNCA9PSAw
KTsKLQotICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRJbWFnZTsKLSAgICBIUkVT
VUxUIHJlc3VsdCA9IG1hcChEM0QxMV9NQVBfV1JJVEUsICZtYXBwZWRJbWFnZSk7Ci0gICAgaWYg
KEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgRVJSKCJDb3VsZCBub3QgbWFwIGltYWdl
IGZvciBsb2FkaW5nLiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gU2l6ZSBj
b21wdXRhdGlvbiBhc3N1bWVzIGEgNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQK
LSAgICBzaXplX3QgYmxvY2tTaXplID0gZDNkMTE6OkNvbXB1dGVCbG9ja1NpemVCaXRzKG1EWEdJ
Rm9ybWF0KSAvIDg7Ci0gICAgdm9pZCogb2Zmc2V0TWFwcGVkRGF0YSA9ICh2b2lkKikoKEJZVEUg
KiltYXBwZWRJbWFnZS5wRGF0YSArICgoeW9mZnNldCAvIDQpICogbWFwcGVkSW1hZ2UuUm93UGl0
Y2ggKyAoeG9mZnNldCAvIDQpICogYmxvY2tTaXplKSk7Ci0KLSAgICBHTHNpemVpIGlucHV0U2l6
ZSA9IGdsOjpDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhlaWdodCwgbUludGVybmFsRm9y
bWF0KTsKLSAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSBnbDo6Q29tcHV0ZUNvbXByZXNzZWRQaXRj
aCh3aWR0aCwgbUludGVybmFsRm9ybWF0KTsKLSAgICBpbnQgcm93cyA9IGlucHV0U2l6ZSAvIGlu
cHV0UGl0Y2g7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dzOyArK2kpCi0gICAgewotICAg
ICAgICBtZW1jcHkoKHZvaWQqKSgoQllURSopb2Zmc2V0TWFwcGVkRGF0YSArIGkgKiBtYXBwZWRJ
bWFnZS5Sb3dQaXRjaCksICh2b2lkKikoKEJZVEUqKWlucHV0ICsgaSAqIGlucHV0UGl0Y2gpLCBp
bnB1dFBpdGNoKTsKLSAgICB9Ci0KLSAgICB1bm1hcCgpOwotfQotCi12b2lkIEltYWdlMTE6OmNv
cHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAqc291cmNlKQotewotICAg
IGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gc291cmNlLT5nZXRSZWFkQ29sb3JidWZm
ZXIoKTsKLQotICAgIGlmIChjb2xvcmJ1ZmZlciAmJiBjb2xvcmJ1ZmZlci0+Z2V0QWN0dWFsRm9y
bWF0KCkgPT0gKEdMdWludCltQWN0dWFsRm9ybWF0KQotICAgIHsKLSAgICAgICAgLy8gTm8gY29u
dmVyc2lvbiBuZWVkZWQtLSB1c2UgY29weWJhY2sgZmFzdHBhdGgKLSAgICAgICAgSUQzRDExVGV4
dHVyZTJEICpjb2xvckJ1ZmZlclRleHR1cmUgPSBOVUxMOwotICAgICAgICB1bnNpZ25lZCBpbnQg
c3VicmVzb3VyY2VJbmRleCA9IDA7Ci0KLSAgICAgICAgaWYgKG1SZW5kZXJlci0+Z2V0UmVuZGVy
VGFyZ2V0UmVzb3VyY2UoY29sb3JidWZmZXIsICZzdWJyZXNvdXJjZUluZGV4LCAmY29sb3JCdWZm
ZXJUZXh0dXJlKSkKLSAgICAgICAgewotICAgICAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0Mg
dGV4dHVyZURlc2M7Ci0gICAgICAgICAgICBjb2xvckJ1ZmZlclRleHR1cmUtPkdldERlc2MoJnRl
eHR1cmVEZXNjKTsKLQotICAgICAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVy
ZXItPmdldERldmljZSgpOwotICAgICAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqZGV2aWNl
Q29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotCi0gICAgICAgICAgICBJ
RDNEMTFUZXh0dXJlMkQqIHNyY1RleCA9IE5VTEw7Ci0gICAgICAgICAgICBpZiAodGV4dHVyZURl
c2MuU2FtcGxlRGVzYy5Db3VudCA+IDEpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
RDNEMTFfVEVYVFVSRTJEX0RFU0MgcmVzb2x2ZURlc2M7Ci0gICAgICAgICAgICAgICAgcmVzb2x2
ZURlc2MuV2lkdGggPSB0ZXh0dXJlRGVzYy5XaWR0aDsKLSAgICAgICAgICAgICAgICByZXNvbHZl
RGVzYy5IZWlnaHQgPSB0ZXh0dXJlRGVzYy5IZWlnaHQ7Ci0gICAgICAgICAgICAgICAgcmVzb2x2
ZURlc2MuTWlwTGV2ZWxzID0gMTsKLSAgICAgICAgICAgICAgICByZXNvbHZlRGVzYy5BcnJheVNp
emUgPSAxOwotICAgICAgICAgICAgICAgIHJlc29sdmVEZXNjLkZvcm1hdCA9IHRleHR1cmVEZXNj
LkZvcm1hdDsKLSAgICAgICAgICAgICAgICByZXNvbHZlRGVzYy5TYW1wbGVEZXNjLkNvdW50ID0g
MTsKLSAgICAgICAgICAgICAgICByZXNvbHZlRGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOwot
ICAgICAgICAgICAgICAgIHJlc29sdmVEZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsK
LSAgICAgICAgICAgICAgICByZXNvbHZlRGVzYy5CaW5kRmxhZ3MgPSAwOwotICAgICAgICAgICAg
ICAgIHJlc29sdmVEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKLSAgICAgICAgICAgICAgICByZXNv
bHZlRGVzYy5NaXNjRmxhZ3MgPSAwOwotCi0gICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQg
PSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmcmVzb2x2ZURlc2MsIE5VTEwsICZzcmNUZXgpOwot
ICAgICAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIGNyZWF0ZSByZXNvbHZlIHRleHR1cmUg
Zm9yIEltYWdlMTE6OmNvcHksIEhSRVNVTFQ6IDB4JVguIiwgcmVzdWx0KTsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGRl
dmljZUNvbnRleHQtPlJlc29sdmVTdWJyZXNvdXJjZShzcmNUZXgsIDAsIGNvbG9yQnVmZmVyVGV4
dHVyZSwgc3VicmVzb3VyY2VJbmRleCwgdGV4dHVyZURlc2MuRm9ybWF0KTsKLSAgICAgICAgICAg
ICAgICBzdWJyZXNvdXJjZUluZGV4ID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzcmNUZXggPSBjb2xvckJ1ZmZlclRl
eHR1cmU7Ci0gICAgICAgICAgICAgICAgc3JjVGV4LT5BZGRSZWYoKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgRDNEMTFfQk9YIHNyY0JveDsKLSAgICAgICAgICAgIHNyY0JveC5sZWZ0
ID0geDsKLSAgICAgICAgICAgIHNyY0JveC5yaWdodCA9IHggKyB3aWR0aDsKLSAgICAgICAgICAg
IHNyY0JveC50b3AgPSB5OwotICAgICAgICAgICAgc3JjQm94LmJvdHRvbSA9IHkgKyBoZWlnaHQ7
Ci0gICAgICAgICAgICBzcmNCb3guZnJvbnQgPSAwOwotICAgICAgICAgICAgc3JjQm94LmJhY2sg
PSAxOwotCi0gICAgICAgICAgICBkZXZpY2VDb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24o
bVN0YWdpbmdUZXh0dXJlLCAwLCB4b2Zmc2V0LCB5b2Zmc2V0LCAwLCBzcmNUZXgsIHN1YnJlc291
cmNlSW5kZXgsICZzcmNCb3gpOwotCi0gICAgICAgICAgICBzcmNUZXgtPlJlbGVhc2UoKTsKLSAg
ICAgICAgICAgIGNvbG9yQnVmZmVyVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICB9Ci0gICAg
fQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgZm9ybWF0IHJlcXVpcmVzIGNvbnZl
cnNpb24sIHNvIHdlIG11c3QgY29weSB0aGUgdGV4dHVyZSB0byBzdGFnaW5nIGFuZCBtYW51YWxs
eSBjb252ZXJ0IHZpYSByZWFkUGl4ZWxzCi0gICAgICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJD
RSBtYXBwZWRJbWFnZTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtYXAoRDNEMTFfTUFQX1dS
SVRFLCAmbWFwcGVkSW1hZ2UpOwotCi0gICAgICAgIC8vIGRldGVybWluZSB0aGUgb2Zmc2V0IGNv
b3JkaW5hdGUgaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyCi0gICAgICAgIEdMc2l6ZWkgcm93
T2Zmc2V0ID0gZ2w6OkNvbXB1dGVQaXhlbFNpemUobUFjdHVhbEZvcm1hdCkgKiB4b2Zmc2V0Owot
ICAgICAgICB2b2lkICpkYXRhT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG1h
cHBlZEltYWdlLnBEYXRhKSArIG1hcHBlZEltYWdlLlJvd1BpdGNoICogeW9mZnNldCArIHJvd09m
ZnNldDsKLQotICAgICAgICBtUmVuZGVyZXItPnJlYWRQaXhlbHMoc291cmNlLCB4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBnbDo6RXh0cmFjdEZvcm1hdChtSW50ZXJuYWxGb3JtYXQpLCAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsOjpFeHRyYWN0VHlwZShtSW50ZXJuYWxGb3JtYXQpLCBt
YXBwZWRJbWFnZS5Sb3dQaXRjaCwgZmFsc2UsIDQsIGRhdGFPZmZzZXQpOwotCi0gICAgICAgIHVu
bWFwKCk7Ci0gICAgfQotfQotCi1JRDNEMTFUZXh0dXJlMkQgKkltYWdlMTE6OmdldFN0YWdpbmdU
ZXh0dXJlKCkKLXsKLSAgICBjcmVhdGVTdGFnaW5nVGV4dHVyZSgpOwotCi0gICAgcmV0dXJuIG1T
dGFnaW5nVGV4dHVyZTsKLX0KLQotdW5zaWduZWQgaW50IEltYWdlMTE6OmdldFN0YWdpbmdTdWJy
ZXNvdXJjZSgpCi17Ci0gICAgY3JlYXRlU3RhZ2luZ1RleHR1cmUoKTsKLQotICAgIHJldHVybiBt
U3RhZ2luZ1N1YnJlc291cmNlOwotfQotCi12b2lkIEltYWdlMTE6OmNyZWF0ZVN0YWdpbmdUZXh0
dXJlKCkKLXsKLSAgICBpZiAobVN0YWdpbmdUZXh0dXJlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIElEM0QxMVRleHR1cmUyRCAqbmV3VGV4dHVyZSA9IE5VTEw7Ci0gICAg
aW50IGxvZE9mZnNldCA9IDE7Ci0gICAgY29uc3QgRFhHSV9GT1JNQVQgZHhnaUZvcm1hdCA9IGdl
dERYR0lGb3JtYXQoKTsKLSAgICBBU1NFUlQoIWQzZDExOjpJc0RlcHRoU3RlbmNpbEZvcm1hdChk
eGdpRm9ybWF0KSk7IC8vIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSBmb3IgZGVwdGggdGV4dHVy
ZXMKLQotICAgIGlmIChtV2lkdGggIT0gMCAmJiBtSGVpZ2h0ICE9IDApCi0gICAgewotICAgICAg
ICBHTHNpemVpIHdpZHRoID0gbVdpZHRoOwotICAgICAgICBHTHNpemVpIGhlaWdodCA9IG1IZWln
aHQ7Ci0KLSAgICAgICAgLy8gYWRqdXN0IHNpemUgaWYgbmVlZGVkIGZvciBjb21wcmVzc2VkIHRl
eHR1cmVzCi0gICAgICAgIGdsOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBkM2QxMTo6SXNDb21wcmVz
c2VkKGR4Z2lGb3JtYXQpLCAmd2lkdGgsICZoZWlnaHQsICZsb2RPZmZzZXQpOwotICAgICAgICBJ
RDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0KLSAgICAgICAg
RDNEMTFfVEVYVFVSRTJEX0RFU0MgZGVzYzsKLSAgICAgICAgZGVzYy5XaWR0aCA9IHdpZHRoOwot
ICAgICAgICBkZXNjLkhlaWdodCA9IGhlaWdodDsKLSAgICAgICAgZGVzYy5NaXBMZXZlbHMgPSBs
b2RPZmZzZXQgKyAxOwotICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IDE7Ci0gICAgICAgIGRlc2Mu
Rm9ybWF0ID0gZHhnaUZvcm1hdDsKLSAgICAgICAgZGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gMTsK
LSAgICAgICAgZGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOwotICAgICAgICBkZXNjLlVzYWdl
ID0gRDNEMTFfVVNBR0VfU1RBR0lORzsKLSAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSAwOwotICAg
ICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19SRUFEIHwgRDNEMTFf
Q1BVX0FDQ0VTU19XUklURTsKLSAgICAgICAgZGVzYy5NaXNjRmxhZ3MgPSAwOwotCi0gICAgICAg
IEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRlc2MsIE5VTEwsICZu
ZXdUZXh0dXJlKTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgICAgICBF
UlIoIkNyZWF0aW5nIGltYWdlIGZhaWxlZC4iKTsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtU3RhZ2luZ1Rl
eHR1cmUgPSBuZXdUZXh0dXJlOwotICAgIG1TdGFnaW5nU3VicmVzb3VyY2UgPSBEM0QxMUNhbGNT
dWJyZXNvdXJjZShsb2RPZmZzZXQsIDAsIGxvZE9mZnNldCArIDEpOwotICAgIG1EaXJ0eSA9IGZh
bHNlOwotfQotCi1IUkVTVUxUIEltYWdlMTE6Om1hcChEM0QxMV9NQVAgbWFwVHlwZSwgRDNEMTFf
TUFQUEVEX1NVQlJFU09VUkNFICptYXApCi17Ci0gICAgY3JlYXRlU3RhZ2luZ1RleHR1cmUoKTsK
LQotICAgIEhSRVNVTFQgcmVzdWx0ID0gRV9GQUlMOwotCi0gICAgaWYgKG1TdGFnaW5nVGV4dHVy
ZSkKLSAgICB7Ci0gICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmRldmljZUNvbnRleHQgPSBt
UmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKLSAgICAgICAgcmVzdWx0ID0gZGV2aWNlQ29u
dGV4dC0+TWFwKG1TdGFnaW5nVGV4dHVyZSwgbVN0YWdpbmdTdWJyZXNvdXJjZSwgbWFwVHlwZSwg
MCwgbWFwKTsKLQotICAgICAgICAvLyB0aGlzIGNhbiBmYWlsIGlmIHRoZSBkZXZpY2UgaXMgcmVt
b3ZlZCAoZnJvbSBURFIpCi0gICAgICAgIGlmIChkM2QxMTo6aXNEZXZpY2VMb3N0RXJyb3IocmVz
dWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgbVJlbmRlcmVyLT5ub3RpZnlEZXZpY2VMb3N0
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1EaXJ0eSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEltYWdlMTE6OnVubWFwKCkKLXsKLSAgICBpZiAo
bVN0YWdpbmdUZXh0dXJlKQotICAgIHsKLSAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqZGV2
aWNlQ29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotICAgICAgICBkZXZp
Y2VDb250ZXh0LT5Vbm1hcChtU3RhZ2luZ1RleHR1cmUsIG1TdGFnaW5nU3VicmVzb3VyY2UpOwot
ICAgIH0KLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9JbWFnZTExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlMTEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMTFhNjQ5MmRjODYzYTkxNjQxOWI1YmNkMTY0Y2E3ZDdiYjVkOTVkYi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlMTEuaAorKysgL2Rldi9udWxsCkBAIC0xLDc2
ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBJbWFnZTExLmg6IERlZmluZXMgdGhlIHJ4OjpJ
bWFnZTExIGNsYXNzLCB3aGljaCBhY3RzIGFzIHRoZSBpbnRlcmZhY2UgdG8KLS8vIHRoZSBhY3R1
YWwgdW5kZXJseWluZyByZXNvdXJjZXMgb2YgYSBUZXh0dXJlCi0KLSNpZm5kZWYgTElCR0xFU1Yy
X1JFTkRFUkVSX0lNQUdFMTFfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX0lNQUdFMTFf
SF8KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZS5oIgotCi0jaW5jbHVkZSAi
Y29tbW9uL2RlYnVnLmgiCi0KLW5hbWVzcGFjZSBnbAotewotY2xhc3MgRnJhbWVidWZmZXI7Ci19
Ci0KLW5hbWVzcGFjZSByeAotewotY2xhc3MgUmVuZGVyZXI7Ci1jbGFzcyBSZW5kZXJlcjExOwot
Y2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRDsKLWNsYXNzIFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlQ3ViZTsKLQotY2xhc3MgSW1hZ2UxMSA6IHB1YmxpYyBJbWFnZQotewotICBwdWJsaWM6
Ci0gICAgSW1hZ2UxMSgpOwotICAgIHZpcnR1YWwgfkltYWdlMTEoKTsKLQotICAgIHN0YXRpYyBJ
bWFnZTExICptYWtlSW1hZ2UxMShJbWFnZSAqaW1nKTsKLQotICAgIHN0YXRpYyB2b2lkIGdlbmVy
YXRlTWlwbWFwKEltYWdlMTEgKmRlc3QsIEltYWdlMTEgKnNyYyk7Ci0KLSAgICB2aXJ0dWFsIGJv
b2wgaXNEaXJ0eSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIHVwZGF0ZVN1cmZhY2UoVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgdmly
dHVhbCBib29sIHVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9y
YWdlLCBpbnQgZmFjZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcmVkZWZp
bmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIGJvb2wgZm9yY2VSZWxlYXNlKTsKLQotICAgIHZpcnR1YWwgYm9v
bCBpc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdDsKLSAgICBEWEdJX0ZPUk1BVCBnZXREWEdJRm9y
bWF0KCkgY29uc3Q7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGxvYWREYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCk7Ci0g
ICAgdmlydHVhbCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0KTsKLQotICAgIHZpcnR1YWwgdm9p
ZCBjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSk7Ci0K
LSAgcHJvdGVjdGVkOgotICAgIEhSRVNVTFQgbWFwKEQzRDExX01BUCBtYXBUeXBlLCBEM0QxMV9N
QVBQRURfU1VCUkVTT1VSQ0UgKm1hcCk7Ci0gICAgdm9pZCB1bm1hcCgpOwotCi0gIHByaXZhdGU6
Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEltYWdlMTEpOwotCi0gICAgSUQzRDExVGV4
dHVyZTJEICpnZXRTdGFnaW5nVGV4dHVyZSgpOwotICAgIHVuc2lnbmVkIGludCBnZXRTdGFnaW5n
U3VicmVzb3VyY2UoKTsKLSAgICB2b2lkIGNyZWF0ZVN0YWdpbmdUZXh0dXJlKCk7Ci0KLSAgICBS
ZW5kZXJlcjExICptUmVuZGVyZXI7Ci0KLSAgICBEWEdJX0ZPUk1BVCBtRFhHSUZvcm1hdDsKLSAg
ICBJRDNEMTFUZXh0dXJlMkQgKm1TdGFnaW5nVGV4dHVyZTsKLSAgICB1bnNpZ25lZCBpbnQgbVN0
YWdpbmdTdWJyZXNvdXJjZTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJF
Ul9JTUFHRTExX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL0ltYWdlOS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlOS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGIzZGNjNTliNmJkOTk5ODk5ZWM4YzBkOWUyZmMyZWNiYWIxYjdiZjIuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZTkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
NzMyICswLDAgQEAKLSNpbmNsdWRlICJwcmVjb21waWxlZC5oIgotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LQotLy8gSW1hZ2U5LmNwcDogSW1wbGVtZW50cyB0aGUgcng6OkltYWdlOSBjbGFzcywgd2hpY2gg
YWN0cyBhcyB0aGUgaW50ZXJmYWNlIHRvCi0vLyB0aGUgYWN0dWFsIHVuZGVybHlpbmcgc3VyZmFj
ZXMgb2YgYSBUZXh0dXJlLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlOS5o
IgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvRnJh
bWVidWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyOS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9SZW5kZXJUYXJnZXQ5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1Rl
eHR1cmVTdG9yYWdlOS5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL3JlbmRlcmVy
OV91dGlscy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9nZW5lcmF0ZW1pcC5oIgot
Ci1uYW1lc3BhY2UgcngKLXsKLQotSW1hZ2U5OjpJbWFnZTkoKQotewotICAgIG1TdXJmYWNlID0g
TlVMTDsKLSAgICBtUmVuZGVyZXIgPSBOVUxMOwotCi0gICAgbUQzRFBvb2wgPSBEM0RQT09MX1NZ
U1RFTU1FTTsKLSAgICBtRDNERm9ybWF0ID0gRDNERk1UX1VOS05PV047Ci19Ci0KLUltYWdlOTo6
fkltYWdlOSgpCi17Ci0gICAgaWYgKG1TdXJmYWNlKQotICAgIHsKLSAgICAgICAgbVN1cmZhY2Ut
PlJlbGVhc2UoKTsKLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U5OjpnZW5lcmF0ZU1pcChJRGlyZWN0
M0RTdXJmYWNlOSAqZGVzdFN1cmZhY2UsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2VTdXJmYWNl
KQotewotICAgIEQzRFNVUkZBQ0VfREVTQyBkZXN0RGVzYzsKLSAgICBIUkVTVUxUIHJlc3VsdCA9
IGRlc3RTdXJmYWNlLT5HZXREZXNjKCZkZXN0RGVzYyk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKLQotICAgIEQzRFNVUkZBQ0VfREVTQyBzb3VyY2VEZXNjOwotICAgIHJlc3VsdCA9
IHNvdXJjZVN1cmZhY2UtPkdldERlc2MoJnNvdXJjZURlc2MpOwotICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7Ci0KLSAgICBBU1NFUlQoc291cmNlRGVzYy5Gb3JtYXQgPT0gZGVzdERlc2Mu
Rm9ybWF0KTsKLSAgICBBU1NFUlQoc291cmNlRGVzYy5XaWR0aCA9PSAxIHx8IHNvdXJjZURlc2Mu
V2lkdGggLyAyID09IGRlc3REZXNjLldpZHRoKTsKLSAgICBBU1NFUlQoc291cmNlRGVzYy5IZWln
aHQgPT0gMSB8fCBzb3VyY2VEZXNjLkhlaWdodCAvIDIgPT0gZGVzdERlc2MuSGVpZ2h0KTsKLQot
ICAgIEQzRExPQ0tFRF9SRUNUIHNvdXJjZUxvY2tlZCA9IHswfTsKLSAgICByZXN1bHQgPSBzb3Vy
Y2VTdXJmYWNlLT5Mb2NrUmVjdCgmc291cmNlTG9ja2VkLCBOVUxMLCBEM0RMT0NLX1JFQURPTkxZ
KTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgRDNETE9DS0VEX1JFQ1Qg
ZGVzdExvY2tlZCA9IHswfTsKLSAgICByZXN1bHQgPSBkZXN0U3VyZmFjZS0+TG9ja1JlY3QoJmRl
c3RMb2NrZWQsIE5VTEwsIDApOwotICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAg
ICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2VEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1bnNpZ25lZCBjaGFyKj4oc291cmNlTG9ja2VkLnBCaXRzKTsKLSAgICB1bnNpZ25lZCBjaGFy
ICpkZXN0RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRlc3RMb2NrZWQu
cEJpdHMpOwotCi0gICAgaWYgKHNvdXJjZURhdGEgJiYgZGVzdERhdGEpCi0gICAgewotICAgICAg
ICBzd2l0Y2ggKHNvdXJjZURlc2MuRm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBE
M0RGTVRfTDg6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxMOD4oc291cmNlRGVzYy5XaWR0aCwg
c291cmNlRGVzYy5IZWlnaHQsIHNvdXJjZURhdGEsIHNvdXJjZUxvY2tlZC5QaXRjaCwgZGVzdERh
dGEsIGRlc3RMb2NrZWQuUGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSBEM0RGTVRfQThMODoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPEE4TDg+KHNvdXJjZURlc2Mu
V2lkdGgsIHNvdXJjZURlc2MuSGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3VyY2VMb2NrZWQuUGl0Y2gs
IGRlc3REYXRhLCBkZXN0TG9ja2VkLlBpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4
OgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8QThSOEc4Qjg+KHNvdXJjZURlc2MuV2lkdGgsIHNv
dXJjZURlc2MuSGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3VyY2VMb2NrZWQuUGl0Y2gsIGRlc3REYXRh
LCBkZXN0TG9ja2VkLlBpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug
RDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxBMTZCMTZHMTZS
MTZGPihzb3VyY2VEZXNjLldpZHRoLCBzb3VyY2VEZXNjLkhlaWdodCwgc291cmNlRGF0YSwgc291
cmNlTG9ja2VkLlBpdGNoLCBkZXN0RGF0YSwgZGVzdExvY2tlZC5QaXRjaCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgotICAgICAgICAg
ICAgR2VuZXJhdGVNaXA8QTMyQjMyRzMyUjMyRj4oc291cmNlRGVzYy5XaWR0aCwgc291cmNlRGVz
Yy5IZWlnaHQsIHNvdXJjZURhdGEsIHNvdXJjZUxvY2tlZC5QaXRjaCwgZGVzdERhdGEsIGRlc3RM
b2NrZWQuUGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
Ci0gICAgICAgIGRlc3RTdXJmYWNlLT5VbmxvY2tSZWN0KCk7Ci0gICAgICAgIHNvdXJjZVN1cmZh
Y2UtPlVubG9ja1JlY3QoKTsKLSAgICB9Ci19Ci0KLUltYWdlOSAqSW1hZ2U5OjptYWtlSW1hZ2U5
KEltYWdlICppbWcpCi17Ci0gICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUocng6OkltYWdlOSos
IGltZykpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxyeDo6SW1hZ2U5Kj4oaW1nKTsKLX0KLQot
dm9pZCBJbWFnZTk6OmdlbmVyYXRlTWlwbWFwKEltYWdlOSAqZGVzdCwgSW1hZ2U5ICpzb3VyY2Up
Ci17Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZVN1cmZhY2UgPSBzb3VyY2UtPmdldFN1
cmZhY2UoKTsKLSAgICBpZiAoc291cmNlU3VyZmFjZSA9PSBOVUxMKQotICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmRl
c3RTdXJmYWNlID0gZGVzdC0+Z2V0U3VyZmFjZSgpOwotICAgIGdlbmVyYXRlTWlwKGRlc3RTdXJm
YWNlLCBzb3VyY2VTdXJmYWNlKTsKLQotICAgIGRlc3QtPm1hcmtEaXJ0eSgpOwotfQotCi12b2lk
IEltYWdlOTo6Y29weUxvY2thYmxlU3VyZmFjZXMoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIElE
aXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UpCi17Ci0gICAgRDNETE9DS0VEX1JFQ1Qgc291cmNlTG9j
ayA9IHswfTsKLSAgICBEM0RMT0NLRURfUkVDVCBkZXN0TG9jayA9IHswfTsKLSAgICAKLSAgICBz
b3VyY2UtPkxvY2tSZWN0KCZzb3VyY2VMb2NrLCBOVUxMLCAwKTsKLSAgICBkZXN0LT5Mb2NrUmVj
dCgmZGVzdExvY2ssIE5VTEwsIDApOwotICAgIAotICAgIGlmIChzb3VyY2VMb2NrLnBCaXRzICYm
IGRlc3RMb2NrLnBCaXRzKQotICAgIHsKLSAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7Ci0g
ICAgICAgIHNvdXJjZS0+R2V0RGVzYygmZGVzYyk7Ci0KLSAgICAgICAgaW50IHJvd3MgPSBkM2Q5
OjpJc0NvbXByZXNzZWRGb3JtYXQoZGVzYy5Gb3JtYXQpID8gZGVzYy5IZWlnaHQgLyA0IDogZGVz
Yy5IZWlnaHQ7Ci0gICAgICAgIGludCBieXRlcyA9IGQzZDk6OkNvbXB1dGVSb3dTaXplKGRlc2Mu
Rm9ybWF0LCBkZXNjLldpZHRoKTsKLSAgICAgICAgQVNTRVJUKGJ5dGVzIDw9IHNvdXJjZUxvY2su
UGl0Y2ggJiYgYnl0ZXMgPD0gZGVzdExvY2suUGl0Y2gpOwotCi0gICAgICAgIGZvcihpbnQgaSA9
IDA7IGkgPCByb3dzOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1lbWNweSgoY2hhciop
ZGVzdExvY2sucEJpdHMgKyBkZXN0TG9jay5QaXRjaCAqIGksIChjaGFyKilzb3VyY2VMb2NrLnBC
aXRzICsgc291cmNlTG9jay5QaXRjaCAqIGksIGJ5dGVzKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHNvdXJjZS0+VW5sb2NrUmVjdCgpOwotICAgICAgICBkZXN0LT5VbmxvY2tSZWN0KCk7Ci0gICAg
fQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLX0KLQotYm9vbCBJbWFnZTk6OnJlZGVmaW5lKHJ4
OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgYm9vbCBmb3JjZVJlbGVhc2UpCi17Ci0gICAgaWYgKG1XaWR0aCAh
PSB3aWR0aCB8fAotICAgICAgICBtSGVpZ2h0ICE9IGhlaWdodCB8fAotICAgICAgICBtSW50ZXJu
YWxGb3JtYXQgIT0gaW50ZXJuYWxmb3JtYXQgfHwKLSAgICAgICAgZm9yY2VSZWxlYXNlKQotICAg
IHsKLSAgICAgICAgbVJlbmRlcmVyID0gUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5KHJlbmRlcmVy
KTsKLQotICAgICAgICBtV2lkdGggPSB3aWR0aDsKLSAgICAgICAgbUhlaWdodCA9IGhlaWdodDsK
LSAgICAgICAgbUludGVybmFsRm9ybWF0ID0gaW50ZXJuYWxmb3JtYXQ7Ci0gICAgICAgIC8vIGNv
bXB1dGUgdGhlIGQzZCBmb3JtYXQgdGhhdCB3aWxsIGJlIHVzZWQKLSAgICAgICAgbUQzREZvcm1h
dCA9IG1SZW5kZXJlci0+Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1h
dCk7Ci0gICAgICAgIG1BY3R1YWxGb3JtYXQgPSBkM2Q5X2dsOjpHZXRFcXVpdmFsZW50Rm9ybWF0
KG1EM0RGb3JtYXQpOwotCi0gICAgICAgIGlmIChtU3VyZmFjZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgbVN1cmZhY2UtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1TdXJmYWNlID0gTlVMTDsK
LSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotdm9pZCBJbWFnZTk6OmNyZWF0ZVN1cmZhY2UoKQotewotICAgIGlmKG1TdXJm
YWNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIElEaXJlY3QzRFRleHR1
cmU5ICpuZXdUZXh0dXJlID0gTlVMTDsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbmV3U3VyZmFj
ZSA9IE5VTEw7Ci0gICAgY29uc3QgRDNEUE9PTCBwb29sVG9Vc2UgPSBEM0RQT09MX1NZU1RFTU1F
TTsKLSAgICBjb25zdCBEM0RGT1JNQVQgZDNkRm9ybWF0ID0gZ2V0RDNERm9ybWF0KCk7Ci0gICAg
QVNTRVJUKGQzZEZvcm1hdCAhPSBEM0RGTVRfSU5UWik7IC8vIFdlIHNob3VsZCBuZXZlciBnZXQg
aGVyZSBmb3IgZGVwdGggdGV4dHVyZXMKLQotICAgIGlmIChtV2lkdGggIT0gMCAmJiBtSGVpZ2h0
ICE9IDApCi0gICAgewotICAgICAgICBpbnQgbGV2ZWxUb0ZldGNoID0gMDsKLSAgICAgICAgR0xz
aXplaSByZXF1ZXN0V2lkdGggPSBtV2lkdGg7Ci0gICAgICAgIEdMc2l6ZWkgcmVxdWVzdEhlaWdo
dCA9IG1IZWlnaHQ7Ci0gICAgICAgIGdsOjpNYWtlVmFsaWRTaXplKHRydWUsIGdsOjpJc0NvbXBy
ZXNzZWQobUludGVybmFsRm9ybWF0KSwgJnJlcXVlc3RXaWR0aCwgJnJlcXVlc3RIZWlnaHQsICZs
ZXZlbFRvRmV0Y2gpOwotCi0gICAgICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5k
ZXJlci0+Z2V0RGV2aWNlKCk7Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZVRleHR1cmUocmVxdWVzdFdpZHRoLCByZXF1ZXN0SGVpZ2h0LCBsZXZlbFRvRmV0Y2ggKyAx
LCAwLCBkM2RGb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcG9vbFRvVXNlLCAmbmV3VGV4dHVyZSwgTlVMTCk7Ci0KLSAgICAgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09
IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAg
ICAgICAgICAgIEVSUigiQ3JlYXRpbmcgaW1hZ2Ugc3VyZmFjZSBmYWlsZWQuIik7Ci0gICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgbmV3VGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKGxldmVsVG9GZXRjaCwgJm5ld1N1cmZh
Y2UpOwotICAgICAgICBuZXdUZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgbVN1cmZh
Y2UgPSBuZXdTdXJmYWNlOwotICAgIG1EaXJ0eSA9IGZhbHNlOwotICAgIG1EM0RQb29sID0gcG9v
bFRvVXNlOwotfQotCi1IUkVTVUxUIEltYWdlOTo6bG9jayhEM0RMT0NLRURfUkVDVCAqbG9ja2Vk
UmVjdCwgY29uc3QgUkVDVCAqcmVjdCkKLXsKLSAgICBjcmVhdGVTdXJmYWNlKCk7Ci0KLSAgICBI
UkVTVUxUIHJlc3VsdCA9IEQzREVSUl9JTlZBTElEQ0FMTDsKLQotICAgIGlmIChtU3VyZmFjZSkK
LSAgICB7Ci0gICAgICAgIHJlc3VsdCA9IG1TdXJmYWNlLT5Mb2NrUmVjdChsb2NrZWRSZWN0LCBy
ZWN0LCAwKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgICAgICBt
RGlydHkgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgSW1h
Z2U5Ojp1bmxvY2soKQotewotICAgIGlmIChtU3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gbVN1cmZhY2UtPlVubG9ja1JlY3QoKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChyZXN1bHQpKTsKLSAgICB9Ci19Ci0KLWJvb2wgSW1hZ2U5Ojppc1JlbmRlcmFibGVGb3Jt
YXQoKSBjb25zdAoteyAgICAKLSAgICByZXR1cm4gVGV4dHVyZVN0b3JhZ2U5OjpJc1RleHR1cmVG
b3JtYXRSZW5kZXJhYmxlKGdldEQzREZvcm1hdCgpKTsKLX0KLQotRDNERk9STUFUIEltYWdlOTo6
Z2V0RDNERm9ybWF0KCkgY29uc3QKLXsKLSAgICAvLyB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBp
ZiB0aGUgaW1hZ2UgaGFzbid0IGJlZW4gcmVkZWZpbmVkIGZpcnN0Ci0gICAgLy8gd2hpY2ggd291
bGQgYmUgYSBidWcgYnkgdGhlIGNhbGxlcgotICAgIEFTU0VSVChtRDNERm9ybWF0ICE9IEQzREZN
VF9VTktOT1dOKTsKLQotICAgIHJldHVybiBtRDNERm9ybWF0OwotfQotCi1JRGlyZWN0M0RTdXJm
YWNlOSAqSW1hZ2U5OjpnZXRTdXJmYWNlKCkKLXsKLSAgICBjcmVhdGVTdXJmYWNlKCk7Ci0KLSAg
ICByZXR1cm4gbVN1cmZhY2U7Ci19Ci0KLXZvaWQgSW1hZ2U5OjpzZXRNYW5hZ2VkU3VyZmFjZShU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwpCi17Ci0gICAgVGV4
dHVyZVN0b3JhZ2U5XzJEICpzdG9yYWdlOSA9IFRleHR1cmVTdG9yYWdlOV8yRDo6bWFrZVRleHR1
cmVTdG9yYWdlOV8yRChzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgc2V0TWFu
YWdlZFN1cmZhY2Uoc3RvcmFnZTktPmdldFN1cmZhY2VMZXZlbChsZXZlbCwgZmFsc2UpKTsKLX0K
LQotdm9pZCBJbWFnZTk6OnNldE1hbmFnZWRTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
Q3ViZSAqc3RvcmFnZSwgaW50IGZhY2UsIGludCBsZXZlbCkKLXsKLSAgICBUZXh0dXJlU3RvcmFn
ZTlfQ3ViZSAqc3RvcmFnZTkgPSBUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6bWFrZVRleHR1cmVTdG9y
YWdlOV9DdWJlKHN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKLSAgICBzZXRNYW5hZ2Vk
U3VyZmFjZShzdG9yYWdlOS0+Z2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9YICsgZmFjZSwgbGV2ZWwsIGZhbHNlKSk7Ci19Ci0KLXZvaWQgSW1hZ2U5OjpzZXRN
YW5hZ2VkU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSkKLXsKLSAgICBEM0RTVVJG
QUNFX0RFU0MgZGVzYzsKLSAgICBzdXJmYWNlLT5HZXREZXNjKCZkZXNjKTsKLSAgICBBU1NFUlQo
ZGVzYy5Qb29sID09IEQzRFBPT0xfTUFOQUdFRCk7Ci0KLSAgICBpZiAoKEdMc2l6ZWkpZGVzYy5X
aWR0aCA9PSBtV2lkdGggJiYgKEdMc2l6ZWkpZGVzYy5IZWlnaHQgPT0gbUhlaWdodCkKLSAgICB7
Ci0gICAgICAgIGlmIChtU3VyZmFjZSkKLSAgICAgICAgewotICAgICAgICAgICAgY29weUxvY2th
YmxlU3VyZmFjZXMoc3VyZmFjZSwgbVN1cmZhY2UpOwotICAgICAgICAgICAgbVN1cmZhY2UtPlJl
bGVhc2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1TdXJmYWNlID0gc3VyZmFjZTsKLSAgICAg
ICAgbUQzRFBvb2wgPSBkZXNjLlBvb2w7Ci0gICAgfQotfQotCi1ib29sIEltYWdlOTo6dXBkYXRl
U3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KQotewotICAgIEFTU0VSVChnZXRTdXJmYWNlKCkgIT0gTlVMTCk7Ci0gICAgVGV4dHVyZVN0b3Jh
Z2U5XzJEICpzdG9yYWdlOSA9IFRleHR1cmVTdG9yYWdlOV8yRDo6bWFrZVRleHR1cmVTdG9yYWdl
OV8yRChzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgcmV0dXJuIHVwZGF0ZVN1
cmZhY2Uoc3RvcmFnZTktPmdldFN1cmZhY2VMZXZlbChsZXZlbCwgdHJ1ZSksIHhvZmZzZXQsIHlv
ZmZzZXQsIHdpZHRoLCBoZWlnaHQpOwotfQotCi1ib29sIEltYWdlOTo6dXBkYXRlU3VyZmFjZShU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0KQotewotICAgIEFTU0VSVChnZXRTdXJmYWNlKCkgIT0gTlVMTCk7Ci0gICAgVGV4dHVyZVN0
b3JhZ2U5X0N1YmUgKnN0b3JhZ2U5ID0gVGV4dHVyZVN0b3JhZ2U5X0N1YmU6Om1ha2VUZXh0dXJl
U3RvcmFnZTlfQ3ViZShzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgcmV0dXJu
IHVwZGF0ZVN1cmZhY2Uoc3RvcmFnZTktPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsLCB0cnVlKSwgeG9mZnNldCwgeW9mZnNldCwg
d2lkdGgsIGhlaWdodCk7Ci19Ci0KLWJvb2wgSW1hZ2U5Ojp1cGRhdGVTdXJmYWNlKElEaXJlY3Qz
RFN1cmZhY2U5ICpkZXN0U3VyZmFjZSwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKCFkZXN0U3VyZmFjZSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZVN1cmZh
Y2UgPSBnZXRTdXJmYWNlKCk7Ci0KLSAgICBpZiAoc291cmNlU3VyZmFjZSAmJiBzb3VyY2VTdXJm
YWNlICE9IGRlc3RTdXJmYWNlKQotICAgIHsKLSAgICAgICAgUkVDVCByZWN0OwotICAgICAgICBy
ZWN0LmxlZnQgPSB4b2Zmc2V0OwotICAgICAgICByZWN0LnRvcCA9IHlvZmZzZXQ7Ci0gICAgICAg
IHJlY3QucmlnaHQgPSB4b2Zmc2V0ICsgd2lkdGg7Ci0gICAgICAgIHJlY3QuYm90dG9tID0geW9m
ZnNldCArIGhlaWdodDsKLQotICAgICAgICBQT0lOVCBwb2ludCA9IHtyZWN0LmxlZnQsIHJlY3Qu
dG9wfTsKLQotICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdl
dERldmljZSgpOwotCi0gICAgICAgIGlmIChtRDNEUG9vbCA9PSBEM0RQT09MX01BTkFHRUQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOwotICAgICAgICAgICAg
c291cmNlU3VyZmFjZS0+R2V0RGVzYygmZGVzYyk7Ci0KLSAgICAgICAgICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpzdXJmID0gMDsKLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5D
cmVhdGVPZmZzY3JlZW5QbGFpblN1cmZhY2UoZGVzYy5XaWR0aCwgZGVzYy5IZWlnaHQsIGRlc2Mu
Rm9ybWF0LCBEM0RQT09MX1NZU1RFTU1FTSwgJnN1cmYsIE5VTEwpOwotCi0gICAgICAgICAgICBp
ZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29w
eUxvY2thYmxlU3VyZmFjZXMoc3VyZiwgc291cmNlU3VyZmFjZSk7Ci0gICAgICAgICAgICAgICAg
cmVzdWx0ID0gZGV2aWNlLT5VcGRhdGVTdXJmYWNlKHN1cmYsICZyZWN0LCBkZXN0U3VyZmFjZSwg
JnBvaW50KTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAg
ICAgICAgICAgICAgIHN1cmYtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFVwZGF0ZVN1cmZhY2U6IHNv
dXJjZSBtdXN0IGJlIFNZU1RFTU1FTSwgZGVzdCBtdXN0IGJlIERFRkFVTFQgcG9vbHMgCi0gICAg
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+VXBkYXRlU3VyZmFjZShzb3VyY2VTdXJm
YWNlLCAmcmVjdCwgZGVzdFN1cmZhY2UsICZwb2ludCk7Ci0gICAgICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZGVzdFN1cmZhY2UtPlJl
bGVhc2UoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gU3RvcmUgdGhlIHBpeGVsIHJlY3Rh
bmdsZSBkZXNpZ25hdGVkIGJ5IHhvZmZzZXQseW9mZnNldCx3aWR0aCxoZWlnaHQgd2l0aCBwaXhl
bHMgc3RvcmVkIGFzIGZvcm1hdC90eXBlIGF0IGlucHV0Ci0vLyBpbnRvIHRoZSB0YXJnZXQgcGl4
ZWwgcmVjdGFuZ2xlLgotdm9pZCBJbWFnZTk6OmxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQpCi17Ci0gICAg
UkVDVCBsb2NrUmVjdCA9Ci0gICAgewotICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LAotICAgICAg
ICB4b2Zmc2V0ICsgd2lkdGgsIHlvZmZzZXQgKyBoZWlnaHQKLSAgICB9OwotCi0gICAgRDNETE9D
S0VEX1JFQ1QgbG9ja2VkOwotICAgIEhSRVNVTFQgcmVzdWx0ID0gbG9jaygmbG9ja2VkLCAmbG9j
a1JlY3QpOwotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLQotICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IGdsOjpDb21wdXRlUGl0Y2god2lk
dGgsIG1JbnRlcm5hbEZvcm1hdCwgdW5wYWNrQWxpZ25tZW50KTsKLQotICAgIHN3aXRjaCAobUlu
dGVybmFsRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfQUxQSEE4X0VYVDoKLSAgICAgICAg
aWYgKGdsOjpzdXBwb3J0c1NTRTIoKSkKLSAgICAgICAgewotICAgICAgICAgICAgbG9hZEFscGhh
RGF0YVRvQkdSQVNTRTIod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5Q
aXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGxvYWRBbHBoYURhdGFUb0JHUkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOF9FWFQ6Ci0gICAgICAgIGxvYWRMdW1p
bmFuY2VEYXRhVG9OYXRpdmVPckJHUkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzLCBnZXREM0RGb3JtYXQoKSA9PSBEM0RGTVRfTDgp
OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQUxQSEEzMkZfRVhUOgotICAgICAgICBs
b2FkQWxwaGFGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX0xVTUlOQU5DRTMyRl9FWFQ6Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VGbG9hdERhdGFUb1JH
QkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2Vk
LnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FMUEhBMTZGX0VYVDoKLSAg
ICAgICAgbG9hZEFscGhhSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBp
dGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZGX0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5jZUhh
bGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tl
ZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xV
TUlOQU5DRThfQUxQSEE4X0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhRGF0YVRvTmF0
aXZlT3JCR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gs
IGxvY2tlZC5wQml0cywgZ2V0RDNERm9ybWF0KCkgPT0gRDNERk1UX0E4TDgpOwotICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVDoKLSAgICAgICAgbG9h
ZEx1bWluYW5jZUFscGhhRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhUOgotICAgICAgICBsb2FkTHVtaW5hbmNl
QWxwaGFIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0
LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9SR0I4X09FUzoKLSAgICAgICAgbG9hZFJHQlVCeXRlRGF0YVRvQkdSWCh3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCNTY1OgotICAgICAgICBsb2FkUkdCNTY1RGF0
YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBs
b2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQThfT0VTOgot
ICAgICAgICBpZiAoZ2w6OnN1cHBvcnRzU1NFMigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBs
b2FkUkdCQVVCeXRlRGF0YVRvQkdSQVNTRTIod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgfQotICAgICAgICBlbHNl
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhVG9CR1JBKHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0g
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQkE0OgotICAgICAgICBs
b2FkUkdCQTQ0NDREYXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBs
b2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9SR0I1X0ExOgotICAgICAgICBsb2FkUkdCQTU1NTFEYXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6Ci0gICAgICAgIGxvYWRCR1JBRGF0YVRv
QkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2Nr
ZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIC8vIGZsb2F0IHRleHR1cmVzIGFyZSBj
b252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRoZXkncmUgc3RvcmVkIHRoYXQgd2F5IGlu
IEQzRAotICAgICAgY2FzZSBHTF9SR0IzMkZfRVhUOgotICAgICAgICBsb2FkUkdCRmxvYXREYXRh
VG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxv
Y2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0IxNkZfRVhUOgot
ICAgICAgICBsb2FkUkdCSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBp
dGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfUkdCQTMyRl9FWFQ6Ci0gICAgICAgIGxvYWRSR0JBRmxvYXREYXRhVG9S
R0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tl
ZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0JBMTZGX0VYVDoKLSAg
ICAgICAgbG9hZFJHQkFIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgCi0gICAgfQotCi0gICAgdW5sb2NrKCk7Ci19
Ci0KLXZvaWQgSW1hZ2U5Ojpsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0KQotewotICAgIEFTU0VSVCh4b2Zmc2V0
ICUgNCA9PSAwKTsKLSAgICBBU1NFUlQoeW9mZnNldCAlIDQgPT0gMCk7Ci0KLSAgICBSRUNUIGxv
Y2tSZWN0ID0gewotICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LAotICAgICAgICB4b2Zmc2V0ICsg
d2lkdGgsIHlvZmZzZXQgKyBoZWlnaHQKLSAgICB9OwotCi0gICAgRDNETE9DS0VEX1JFQ1QgbG9j
a2VkOwotICAgIEhSRVNVTFQgcmVzdWx0ID0gbG9jaygmbG9ja2VkLCAmbG9ja1JlY3QpOwotICAg
IGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBHTHNpemVpIGlucHV0U2l6ZSA9IGdsOjpDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhl
aWdodCwgbUludGVybmFsRm9ybWF0KTsKLSAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSBnbDo6Q29t
cHV0ZUNvbXByZXNzZWRQaXRjaCh3aWR0aCwgbUludGVybmFsRm9ybWF0KTsKLSAgICBpbnQgcm93
cyA9IGlucHV0U2l6ZSAvIGlucHV0UGl0Y2g7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dz
OyArK2kpCi0gICAgewotICAgICAgICBtZW1jcHkoKHZvaWQqKSgoQllURSopbG9ja2VkLnBCaXRz
ICsgaSAqIGxvY2tlZC5QaXRjaCksICh2b2lkKikoKEJZVEUqKWlucHV0ICsgaSAqIGlucHV0UGl0
Y2gpLCBpbnB1dFBpdGNoKTsKLSAgICB9Ci0KLSAgICB1bmxvY2soKTsKLX0KLQotLy8gVGhpcyBp
bXBsZW1lbnRzIGdsQ29weVRleFtTdWJdSW1hZ2UyRCBmb3Igbm9uLXJlbmRlcmFibGUgaW50ZXJu
YWwgdGV4dHVyZSBmb3JtYXRzIGFuZCBpbmNvbXBsZXRlIHRleHR1cmVzCi12b2lkIEltYWdlOTo6
Y29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgZ2w6OkZyYW1lYnVmZmVyICpzb3VyY2UpCi17Ci0g
ICAgUmVuZGVyVGFyZ2V0OSAqcmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqc3VyZmFjZSA9IE5VTEw7Ci0gICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIg
PSBzb3VyY2UtPmdldENvbG9yYnVmZmVyKDApOwotCi0gICAgaWYgKGNvbG9yYnVmZmVyKQotICAg
IHsKLSAgICAgICAgcmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0OTo6bWFrZVJlbmRlclRhcmdl
dDkoY29sb3JidWZmZXItPmdldFJlbmRlclRhcmdldCgpKTsKLSAgICB9Ci0gICAgCi0gICAgaWYg
KHJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIHN1cmZhY2UgPSByZW5kZXJUYXJnZXQtPmdl
dFN1cmZhY2UoKTsKLSAgICB9Ci0KLSAgICBpZiAoIXN1cmZhY2UpCi0gICAgewotICAgICAgICBF
UlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldC4iKTsKLSAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICBJRGlyZWN0M0RE
ZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0gICAgSURpcmVjdDNE
U3VyZmFjZTkgKnJlbmRlclRhcmdldERhdGEgPSBOVUxMOwotICAgIEQzRFNVUkZBQ0VfREVTQyBk
ZXNjcmlwdGlvbjsKLSAgICBzdXJmYWNlLT5HZXREZXNjKCZkZXNjcmlwdGlvbik7Ci0gICAgCi0g
ICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZU9mZnNjcmVlblBsYWluU3VyZmFjZShk
ZXNjcmlwdGlvbi5XaWR0aCwgZGVzY3JpcHRpb24uSGVpZ2h0LCBkZXNjcmlwdGlvbi5Gb3JtYXQs
IEQzRFBPT0xfU1lTVEVNTUVNLCAmcmVuZGVyVGFyZ2V0RGF0YSwgTlVMTCk7Ci0KLSAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgbWF0
Y2hpbmcgZGVzdGluYXRpb24gc3VyZmFjZS4iKTsKLSAgICAgICAgc3VyZmFjZS0+UmVsZWFzZSgp
OwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLQot
ICAgIHJlc3VsdCA9IGRldmljZS0+R2V0UmVuZGVyVGFyZ2V0RGF0YShzdXJmYWNlLCByZW5kZXJU
YXJnZXREYXRhKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEVS
UigiR2V0UmVuZGVyVGFyZ2V0RGF0YSB1bmV4cGVjdGVkbHkgZmFpbGVkLiIpOwotICAgICAgICBy
ZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7Ci0gICAgICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsK
LSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAg
ICBSRUNUIHNvdXJjZVJlY3QgPSB7eCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0fTsKLSAgICBS
RUNUIGRlc3RSZWN0ID0ge3hvZmZzZXQsIHlvZmZzZXQsIHhvZmZzZXQgKyB3aWR0aCwgeW9mZnNl
dCArIGhlaWdodH07Ci0KLSAgICBEM0RMT0NLRURfUkVDVCBzb3VyY2VMb2NrID0gezB9OwotICAg
IHJlc3VsdCA9IHJlbmRlclRhcmdldERhdGEtPkxvY2tSZWN0KCZzb3VyY2VMb2NrLCAmc291cmNl
UmVjdCwgMCk7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIo
IkZhaWxlZCB0byBsb2NrIHRoZSBzb3VyY2Ugc3VyZmFjZSAocmVjdGFuZ2xlIG1pZ2h0IGJlIGlu
dmFsaWQpLiIpOwotICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7Ci0gICAgICAg
IHN1cmZhY2UtPlJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKLSAgICB9Ci0KLSAgICBEM0RMT0NLRURfUkVDVCBkZXN0TG9jayA9IHswfTsKLSAg
ICByZXN1bHQgPSBsb2NrKCZkZXN0TG9jaywgJmRlc3RSZWN0KTsKLSAgICAKLSAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byBsb2NrIHRoZSBkZXN0
aW5hdGlvbiBzdXJmYWNlIChyZWN0YW5nbGUgbWlnaHQgYmUgaW52YWxpZCkuIik7Ci0gICAgICAg
IHJlbmRlclRhcmdldERhdGEtPlVubG9ja1JlY3QoKTsKLSAgICAgICAgcmVuZGVyVGFyZ2V0RGF0
YS0+UmVsZWFzZSgpOwotICAgICAgICBzdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotCi0gICAgaWYgKGRlc3RMb2Nr
LnBCaXRzICYmIHNvdXJjZUxvY2sucEJpdHMpCi0gICAgewotICAgICAgICB1bnNpZ25lZCBjaGFy
ICpzb3VyY2UgPSAodW5zaWduZWQgY2hhciopc291cmNlTG9jay5wQml0czsKLSAgICAgICAgdW5z
aWduZWQgY2hhciAqZGVzdCA9ICh1bnNpZ25lZCBjaGFyKilkZXN0TG9jay5wQml0czsKLQotICAg
ICAgICBzd2l0Y2ggKGRlc2NyaXB0aW9uLkZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNh
c2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAg
ICAgICAgICAgc3dpdGNoKGdldEQzREZvcm1hdCgpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQThS
OEc4Qjg6Ci0gICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJj
ZSwgNCAqIHdpZHRoKTsKLQotICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9j
ay5QaXRjaDsKLSAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh
c2UgRDNERk1UX0w4OgotICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7
IHkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9
IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBkZXN0W3hdID0gc291cmNlW3ggKiA0ICsgMl07Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5QaXRjaDsK
LSAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1U
X0E4TDg6Ci0gICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8
IHdpZHRoOyB4KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc3RbeCAqIDIgKyAwXSA9IHNvdXJjZVt4ICogNCArIDJdOwotICAgICAgICAgICAgICAg
ICAgICAgICAgZGVzdFt4ICogMiArIDFdID0gc291cmNlW3ggKiA0ICsgM107Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5Q
aXRjaDsKLSAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKLSAgICAgICAgICAg
IHN3aXRjaChnZXREM0RGb3JtYXQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2Fz
ZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhl
aWdodDsgeSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yKGlu
dCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYiA9ICgodW5zaWduZWQgc2hvcnQqKXNv
dXJjZSlbeF07Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHJlZCA9IChy
Z2IgJiAweEY4MDApID4+IDg7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFy
IGdyZWVuID0gKHJnYiAmIDB4MDdFMCkgPj4gMzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGNoYXIgYmx1ZSA9IChyZ2IgJiAweDAwMUYpIDw8IDM7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0W3ggKyAwXSA9IGJsdWUgfCAoYmx1ZSA+PiA1KTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RbeCArIDFdID0gZ3JlZW4gfCAoZ3JlZW4gPj4gNik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBkZXN0W3ggKyAyXSA9IHJlZCB8IChyZWQgPj4gNSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBkZXN0W3ggKyAzXSA9IDB4RkY7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5QaXRjaDsKLSAgICAg
ICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0w4Ogot
ICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsg
eCsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBjaGFyIHJlZCA9IHNvdXJjZVt4ICogMiArIDFdICYgMHhGODsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RbeF0gPSByZWQgfCAocmVkID4+IDUpOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKLSAgICAgICAgICAgIHN3aXRj
aChnZXREM0RGb3JtYXQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBEM0RG
TVRfWDhSOEc4Qjg6Ci0gICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsg
eSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0g
MDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGFyZ2IgPSAoKHVuc2lnbmVkIHNob3J0Kilzb3VyY2Up
W3hdOwotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZWQgPSAoYXJnYiAm
IDB4N0MwMCkgPj4gNzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZ3Jl
ZW4gPSAoYXJnYiAmIDB4MDNFMCkgPj4gMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGNoYXIgYmx1ZSA9IChhcmdiICYgMHgwMDFGKSA8PCAzOwotICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdFt4ICsgMF0gPSBibHVlIHwgKGJsdWUgPj4gNSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0W3ggKyAxXSA9IGdyZWVuIHwgKGdyZWVuID4+IDUpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdFt4ICsgMl0gPSByZWQgfCAocmVkID4+IDUpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdFt4ICsgM10gPSAweEZGOwotICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7Ci0gICAgICAg
ICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BOFI4RzhC
ODoKLSAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lk
dGg7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgc2hvcnQgYXJnYiA9ICgodW5zaWduZWQgc2hvcnQqKXNvdXJjZSlbeF07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHJlZCA9IChhcmdiICYgMHg3QzAwKSA+
PiA3OwotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBncmVlbiA9IChhcmdi
ICYgMHgwM0UwKSA+PiAyOwotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBi
bHVlID0gKGFyZ2IgJiAweDAwMUYpIDw8IDM7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBjaGFyIGFscGhhID0gKHNpZ25lZCBzaG9ydClhcmdiID4+IDE1OwotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdFt4ICsgMF0gPSBibHVlIHwgKGJsdWUgPj4gNSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBkZXN0W3ggKyAxXSA9IGdyZWVuIHwgKGdyZWVuID4+IDUpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFt4ICsgMl0gPSByZWQgfCAocmVkID4+IDUpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFt4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOwot
ICAgICAgICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRf
TDg6Ci0gICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8IHdp
ZHRoOyB4KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGNoYXIgcmVkID0gc291cmNlW3ggKiAyICsgMV0gJiAweDdDOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdFt4XSA9IChyZWQgPDwgMSkgfCAocmVkID4+IDQpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxv
Y2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEQzREZNVF9BOEw4OgotICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWln
aHQ7IHkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGZvcihpbnQg
eCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHJlZCA9IHNvdXJjZVt4ICogMiArIDFdICYgMHg3
QzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCAqIDIgKyAwXSA9IChyZWQgPDwgMSkg
fCAocmVkID4+IDQpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICogMiArIDFdID0g
KHNpZ25lZCBjaGFyKXNvdXJjZVt4ICogMiArIDFdID4+IDc7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5QaXRjaDsKLSAg
ICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgdW5sb2NrKCk7Ci0gICAgcmVuZGVyVGFyZ2V0RGF0YS0+VW5s
b2NrUmVjdCgpOwotCi0gICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgpOwotICAgIHN1cmZh
Y2UtPlJlbGVhc2UoKTsKLQotICAgIG1EaXJ0eSA9IHRydWU7Ci19Ci0KLX0KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlOS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZTkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMmZiYmNhMzEyNDNkMmFjNDdkNTc0OGQ1YTFjN2ZhZjdkNWNhODIwNi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlOS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzkg
KzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gSW1hZ2U5Lmg6IERlZmluZXMgdGhlIHJ4
OjpJbWFnZTkgY2xhc3MsIHdoaWNoIGFjdHMgYXMgdGhlIGludGVyZmFjZSB0bwotLy8gdGhlIGFj
dHVhbCB1bmRlcmx5aW5nIHN1cmZhY2VzIG9mIGEgVGV4dHVyZS4KLQotI2lmbmRlZiBMSUJHTEVT
VjJfUkVOREVSRVJfSU1BR0U5X0hfCi0jZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9JTUFHRTlf
SF8KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZS5oIgotI2luY2x1ZGUgImNv
bW1vbi9kZWJ1Zy5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLWNsYXNzIEZyYW1lYnVmZmVyOwotfQot
Ci1uYW1lc3BhY2UgcngKLXsKLWNsYXNzIFJlbmRlcmVyOwotY2xhc3MgUmVuZGVyZXI5OwotY2xh
c3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRDsKLWNsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlQ3ViZTsKLQotY2xhc3MgSW1hZ2U5IDogcHVibGljIEltYWdlCi17Ci0gIHB1YmxpYzoKLSAg
ICBJbWFnZTkoKTsKLSAgICB+SW1hZ2U5KCk7Ci0KLSAgICBzdGF0aWMgSW1hZ2U5ICptYWtlSW1h
Z2U5KEltYWdlICppbWcpOwotCi0gICAgc3RhdGljIHZvaWQgZ2VuZXJhdGVNaXBtYXAoSW1hZ2U5
ICpkZXN0LCBJbWFnZTkgKnNvdXJjZSk7Ci0gICAgc3RhdGljIHZvaWQgZ2VuZXJhdGVNaXAoSURp
cmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJmYWNlLCBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlU3Vy
ZmFjZSk7Ci0gICAgc3RhdGljIHZvaWQgY29weUxvY2thYmxlU3VyZmFjZXMoSURpcmVjdDNEU3Vy
ZmFjZTkgKmRlc3QsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UpOwotCi0gICAgdmlydHVhbCBi
b29sIHJlZGVmaW5lKFJlbmRlcmVyICpyZW5kZXJlciwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBib29sIGZvcmNlUmVsZWFzZSk7Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgaXNSZW5kZXJhYmxlRm9ybWF0KCkgY29uc3Q7Ci0gICAgRDNERk9STUFUIGdl
dEQzREZvcm1hdCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIGlzRGlydHkoKSBjb25zdCB7
cmV0dXJuIG1TdXJmYWNlICYmIG1EaXJ0eTt9Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFN1
cmZhY2UoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRNYW5hZ2VkU3VyZmFjZShUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwpOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXRNYW5hZ2VkU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGlu
dCBmYWNlLCBpbnQgbGV2ZWwpOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVTdXJmYWNlKFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotICAgIHZpcnR1
YWwgYm9vbCB1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFn
ZSwgaW50IGZhY2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotCi0gICAgdmlydHVhbCB2b2lkIGxvYWREYXRh
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAotICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lk
ICppbnB1dCk7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0KTsKLQotICAg
IHZpcnR1YWwgdm9pZCBjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgs
IEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBnbDo6RnJhbWVidWZmZXIg
KnNvdXJjZSk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oSW1h
Z2U5KTsKLQotICAgIHZvaWQgY3JlYXRlU3VyZmFjZSgpOwotICAgIHZvaWQgc2V0TWFuYWdlZFN1
cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UpOwotICAgIGJvb2wgdXBkYXRlU3VyZmFj
ZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotCi0gICAgSFJFU1VMVCBsb2NrKEQzRExP
Q0tFRF9SRUNUICpsb2NrZWRSZWN0LCBjb25zdCBSRUNUICpyZWN0KTsKLSAgICB2b2lkIHVubG9j
aygpOwotICAgIAotICAgIFJlbmRlcmVyOSAqbVJlbmRlcmVyOwotCi0gICAgRDNEUE9PTCBtRDNE
UG9vbDsgICAvLyBjYW4gb25seSBiZSBEM0RQT09MX1NZU1RFTU1FTSBvciBEM0RQT09MX01BTkFH
RUQgc2luY2UgaXQgbmVlZHMgdG8gYmUgbG9ja2FibGUuCi0gICAgRDNERk9STUFUIG1EM0RGb3Jt
YXQ7Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVN1cmZhY2U7Ci19OwotfQotCi0jZW5kaWYg
ICAvLyBMSUJHTEVTVjJfUkVOREVSRVJfSU1BR0U5X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4QnVmZmVyMTEuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZl
cjExLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjY2MDRjNDU1ODI0Y2Y2YTRh
Nzc2YjA2MTk4MmM1OTE4ZTVjOTZiYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL0luZGV4QnVmZmVyMTEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTgzICswLDAgQEAKLSNp
bmNsdWRlICJwcmVjb21waWxlZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIEluZGV4QnVmZmVyMTEu
Y3BwOiBEZWZpbmVzIHRoZSBEM0QxMSBJbmRleEJ1ZmZlciBpbXBsZW1lbnRhdGlvbi4KLQotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZlcjExLmgiCi0jaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyMTEuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLUluZGV4
QnVmZmVyMTE6OkluZGV4QnVmZmVyMTEoUmVuZGVyZXIxMSAqY29uc3QgcmVuZGVyZXIpIDogbVJl
bmRlcmVyKHJlbmRlcmVyKQotewotICAgIG1CdWZmZXIgPSBOVUxMOwotICAgIG1CdWZmZXJTaXpl
ID0gMDsKLSAgICBtRHluYW1pY1VzYWdlID0gZmFsc2U7Ci19Ci0KLUluZGV4QnVmZmVyMTE6On5J
bmRleEJ1ZmZlcjExKCkKLXsKLSAgICBpZiAobUJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1CdWZm
ZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJ1ZmZlciA9IE5VTEw7Ci0gICAgfQotfQotCi1ib29s
IEluZGV4QnVmZmVyMTE6OmluaXRpYWxpemUodW5zaWduZWQgaW50IGJ1ZmZlclNpemUsIEdMZW51
bSBpbmRleFR5cGUsIGJvb2wgZHluYW1pYykKLXsKLSAgICBpZiAobUJ1ZmZlcikKLSAgICB7Ci0g
ICAgICAgIG1CdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJ1ZmZlciA9IE5VTEw7Ci0gICAg
fQotCi0gICAgdXBkYXRlU2VyaWFsKCk7Ci0KLSAgICBpZiAoYnVmZmVyU2l6ZSA+IDApCi0gICAg
ewotICAgICAgICBJRDNEMTFEZXZpY2UqIGR4RGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2Uo
KTsKLQotICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyBidWZmZXJEZXNjOwotICAgICAgICBidWZm
ZXJEZXNjLkJ5dGVXaWR0aCA9IGJ1ZmZlclNpemU7Ci0gICAgICAgIGJ1ZmZlckRlc2MuVXNhZ2Ug
PSBEM0QxMV9VU0FHRV9EWU5BTUlDOwotICAgICAgICBidWZmZXJEZXNjLkJpbmRGbGFncyA9IEQz
RDExX0JJTkRfSU5ERVhfQlVGRkVSOwotICAgICAgICBidWZmZXJEZXNjLkNQVUFjY2Vzc0ZsYWdz
ID0gRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsKLSAgICAgICAgYnVmZmVyRGVzYy5NaXNjRmxhZ3Mg
PSAwOwotICAgICAgICBidWZmZXJEZXNjLlN0cnVjdHVyZUJ5dGVTdHJpZGUgPSAwOwotCi0gICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gZHhEZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmYnVmZmVyRGVzYywg
TlVMTCwgJm1CdWZmZXIpOwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1CdWZm
ZXJTaXplID0gYnVmZmVyU2l6ZTsKLSAgICBtSW5kZXhUeXBlID0gaW5kZXhUeXBlOwotICAgIG1E
eW5hbWljVXNhZ2UgPSBkeW5hbWljOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUluZGV4QnVm
ZmVyMTEgKkluZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1ZmZlcjExKEluZGV4QnVmZmVyICppbmRl
eEJ1ZmZlcikKLXsKLSAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShJbmRleEJ1ZmZlcjExKiwg
aW5kZXhCdWZmZXIpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW5kZXhCdWZmZXIxMSo+KGlu
ZGV4QnVmZmVyKTsKLX0KLQotYm9vbCBJbmRleEJ1ZmZlcjExOjptYXBCdWZmZXIodW5zaWduZWQg
aW50IG9mZnNldCwgdW5zaWduZWQgaW50IHNpemUsIHZvaWQqKiBvdXRNYXBwZWRNZW1vcnkpCi17
Ci0gICAgaWYgKG1CdWZmZXIpCi0gICAgewotICAgICAgICAvLyBDaGVjayBmb3IgaW50ZWdlciBv
dmVyZmxvd3MgYW5kIG91dC1vdXQtYm91bmRzIG1hcCByZXF1ZXN0cwotICAgICAgICBpZiAob2Zm
c2V0ICsgc2l6ZSA8IG9mZnNldCB8fCBvZmZzZXQgKyBzaXplID4gbUJ1ZmZlclNpemUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEVSUigiSW5kZXggYnVmZmVyIG1hcCByYW5nZSBpcyBub3QgaW5z
aWRlIHRoZSBidWZmZXIuIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LQotICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpkeENvbnRleHQgPSBtUmVuZGVyZXItPmdl
dERldmljZUNvbnRleHQoKTsKLQotICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFw
cGVkUmVzb3VyY2U7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZHhDb250ZXh0LT5NYXAobUJ1
ZmZlciwgMCwgRDNEMTFfTUFQX1dSSVRFX05PX09WRVJXUklURSwgMCwgJm1hcHBlZFJlc291cmNl
KTsKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBF
UlIoIkluZGV4IGJ1ZmZlciBtYXAgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgICpvdXRNYXBw
ZWRNZW1vcnkgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihtYXBwZWRSZXNvdXJjZS5wRGF0YSkg
KyBvZmZzZXQ7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewot
ICAgICAgICBFUlIoIkluZGV4IGJ1ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgSW5kZXhCdWZmZXIxMTo6dW5tYXBCdWZmZXIo
KQotewotICAgIGlmIChtQnVmZmVyKQotICAgIHsKLSAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4
dCAqZHhDb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7Ci0gICAgICAgIGR4
Q29udGV4dC0+VW5tYXAobUJ1ZmZlciwgMCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICBFUlIoIkluZGV4IGJ1ZmZlciBub3QgaW5pdGlhbGl6
ZWQuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLUdMZW51bSBJbmRleEJ1
ZmZlcjExOjpnZXRJbmRleFR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBtSW5kZXhUeXBlOwot
fQotCi11bnNpZ25lZCBpbnQgSW5kZXhCdWZmZXIxMTo6Z2V0QnVmZmVyU2l6ZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1CdWZmZXJTaXplOwotfQotCi1ib29sIEluZGV4QnVmZmVyMTE6OnNldFNp
emUodW5zaWduZWQgaW50IGJ1ZmZlclNpemUsIEdMZW51bSBpbmRleFR5cGUpCi17Ci0gICAgaWYg
KGJ1ZmZlclNpemUgPiBtQnVmZmVyU2l6ZSB8fCBpbmRleFR5cGUgIT0gbUluZGV4VHlwZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBpbml0aWFsaXplKGJ1ZmZlclNpemUsIGluZGV4VHlwZSwgbUR5
bmFtaWNVc2FnZSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLX0KLQotYm9vbCBJbmRleEJ1ZmZlcjExOjpkaXNjYXJkKCkKLXsKLSAgICBpZiAo
bUJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmR4Q29udGV4dCA9
IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotCi0gICAgICAgIEQzRDExX01BUFBFRF9T
VUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJjZTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkeENv
bnRleHQtPk1hcChtQnVmZmVyLCAwLCBEM0QxMV9NQVBfV1JJVEVfRElTQ0FSRCwgMCwgJm1hcHBl
ZFJlc291cmNlKTsKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBFUlIoIkluZGV4IGJ1ZmZlciBtYXAgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4Iiwg
cmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAg
IGR4Q29udGV4dC0+VW5tYXAobUJ1ZmZlciwgMCk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIEVSUigiSW5kZXggYnVmZmVyIG5vdCBpbml0
aWFsaXplZC4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotRFhHSV9GT1JN
QVQgSW5kZXhCdWZmZXIxMTo6Z2V0SW5kZXhGb3JtYXQoKSBjb25zdAotewotICAgIHN3aXRjaCAo
bUluZGV4VHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6ICAgIHJldHVy
biBEWEdJX0ZPUk1BVF9SMTZfVUlOVDsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6ICAg
cmV0dXJuIERYR0lfRk9STUFUX1IxNl9VSU5UOwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6
ICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjMyX1VJTlQ7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOyAgIHJldHVybiBEWEdJX0ZPUk1BVF9VTktOT1dOOwotICAgIH0KLX0KLQotSUQzRDEx
QnVmZmVyICpJbmRleEJ1ZmZlcjExOjpnZXRCdWZmZXIoKSBjb25zdAotewotICAgIHJldHVybiBt
QnVmZmVyOwotfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZl
cjExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0lu
ZGV4QnVmZmVyMTEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzlhNjE5NDZhZDZl
Zjg5MmM0Y2E2NmI2MDdlNjU5YTM1Y2MwOWRlNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL0luZGV4QnVmZmVyMTEuaAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAK
LS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwotCi0vLyBJbmRleEJ1ZmZlcjExLmg6IERlZmluZXMgdGhlIEQzRDExIElu
ZGV4QnVmZmVyIGltcGxlbWVudGF0aW9uLgotCi0jaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9J
TkRFWEJVRkZFUjExX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9JTkRFWEJVRkZFUjEx
X0hfCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhCdWZmZXIuaCIKLQotbmFt
ZXNwYWNlIHJ4Ci17Ci1jbGFzcyBSZW5kZXJlcjExOwotCi1jbGFzcyBJbmRleEJ1ZmZlcjExIDog
cHVibGljIEluZGV4QnVmZmVyCi17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBJbmRleEJ1ZmZl
cjExKFJlbmRlcmVyMTEgKmNvbnN0IHJlbmRlcmVyKTsKLSAgICB2aXJ0dWFsIH5JbmRleEJ1ZmZl
cjExKCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgYnVmZmVy
U2l6ZSwgR0xlbnVtIGluZGV4VHlwZSwgYm9vbCBkeW5hbWljKTsKLQotICAgIHN0YXRpYyBJbmRl
eEJ1ZmZlcjExICptYWtlSW5kZXhCdWZmZXIxMShJbmRleEJ1ZmZlciAqaW5kZXhCdWZmZXIpOwot
Ci0gICAgdmlydHVhbCBib29sIG1hcEJ1ZmZlcih1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25l
ZCBpbnQgc2l6ZSwgdm9pZCoqIG91dE1hcHBlZE1lbW9yeSk7Ci0gICAgdmlydHVhbCBib29sIHVu
bWFwQnVmZmVyKCk7Ci0KLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRJbmRleFR5cGUoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRCdWZmZXJTaXplKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBib29sIHNldFNpemUodW5zaWduZWQgaW50IGJ1ZmZlclNpemUsIEdMZW51bSBpbmRleFR5
cGUpOwotCi0gICAgdmlydHVhbCBib29sIGRpc2NhcmQoKTsKLQotICAgIERYR0lfRk9STUFUIGdl
dEluZGV4Rm9ybWF0KCkgY29uc3Q7Ci0gICAgSUQzRDExQnVmZmVyICpnZXRCdWZmZXIoKSBjb25z
dDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihJbmRleEJ1ZmZl
cjExKTsKLQotICAgIHJ4OjpSZW5kZXJlcjExICpjb25zdCBtUmVuZGVyZXI7Ci0KLSAgICBJRDNE
MTFCdWZmZXIgKm1CdWZmZXI7Ci0gICAgdW5zaWduZWQgaW50IG1CdWZmZXJTaXplOwotICAgIEdM
ZW51bSBtSW5kZXhUeXBlOwotICAgIGJvb2wgbUR5bmFtaWNVc2FnZTsKLX07Ci0KLX0KLQotI2Vu
ZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9JTkRFWEJVRkZFUjExX0hfClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZlcjkuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZlcjkuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBjNmQ4M2M1ZGNhN2FmMzhlNjA5YjM0ZTI5YTM4MDY2ZmFhYzE2YTUw
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhCdWZmZXI5LmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDIwNyArMCwwIEBACi0jaW5jbHVkZSAicHJlY29tcGlsZWQuaCIK
LS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIEluZGV4ZmZlcjkuY3BwOiBEZWZpbmVzIHRoZSBEM0Q5
IEluZGV4QnVmZmVyIGltcGxlbWVudGF0aW9uLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL0luZGV4QnVmZmVyOS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJl
cjkuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLUluZGV4QnVmZmVyOTo6SW5kZXhCdWZmZXI5KFJl
bmRlcmVyOSAqY29uc3QgcmVuZGVyZXIpIDogbVJlbmRlcmVyKHJlbmRlcmVyKQotewotICAgIG1J
bmRleEJ1ZmZlciA9IE5VTEw7Ci0gICAgbUJ1ZmZlclNpemUgPSAwOwotICAgIG1JbmRleFR5cGUg
PSAwOwotICAgIG1EeW5hbWljID0gZmFsc2U7Ci19Ci0KLUluZGV4QnVmZmVyOTo6fkluZGV4QnVm
ZmVyOSgpCi17Ci0gICAgaWYgKG1JbmRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1JbmRleEJ1
ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtSW5kZXhCdWZmZXIgPSBOVUxMOwotICAgIH0KLX0K
LQotYm9vbCBJbmRleEJ1ZmZlcjk6OmluaXRpYWxpemUodW5zaWduZWQgaW50IGJ1ZmZlclNpemUs
IEdMZW51bSBpbmRleFR5cGUsIGJvb2wgZHluYW1pYykKLXsKLSAgICBpZiAobUluZGV4QnVmZmVy
KQotICAgIHsKLSAgICAgICAgbUluZGV4QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1JbmRl
eEJ1ZmZlciA9IE5VTEw7Ci0gICAgfQotCi0gICAgdXBkYXRlU2VyaWFsKCk7Ci0KLSAgICBpZiAo
YnVmZmVyU2l6ZSA+IDApCi0gICAgewotICAgICAgICBEM0RGT1JNQVQgZm9ybWF0OwotICAgICAg
ICBpZiAoaW5kZXhUeXBlID09IEdMX1VOU0lHTkVEX1NIT1JUIHx8IGluZGV4VHlwZSA9PSBHTF9V
TlNJR05FRF9CWVRFKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3JtYXQgPSBEM0RGTVRfSU5E
RVgxNjsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChpbmRleFR5cGUgPT0gR0xfVU5TSUdO
RURfSU5UKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobVJlbmRlcmVyLT5nZXQzMkJpdElu
ZGV4U3VwcG9ydCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvcm1hdCA9IEQz
REZNVF9JTkRFWDMyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIEVSUigiQXR0ZW1wdGVkIHRvIGNyZWF0ZSBhIDMyLWJpdCBp
bmRleCBidWZmZXIgYnV0IHJlbmRlcmVyIGRvZXMgbm90IHN1cHBvcnQgMzItYml0IGluZGljZXMu
Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJJbnZhbGlkIGlu
ZGV4IHR5cGUgJXUuIiwgaW5kZXhUeXBlKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIERXT1JEIHVzYWdlRmxhZ3MgPSBEM0RVU0FHRV9XUklURU9OTFk7
Ci0gICAgICAgIGlmIChkeW5hbWljKQotICAgICAgICB7Ci0gICAgICAgICAgICB1c2FnZUZsYWdz
IHw9IEQzRFVTQUdFX0RZTkFNSUM7Ci0gICAgICAgIH0KLQotICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IG1SZW5kZXJlci0+Y3JlYXRlSW5kZXhCdWZmZXIoYnVmZmVyU2l6ZSwgdXNhZ2VGbGFncywg
Zm9ybWF0LCAmbUluZGV4QnVmZmVyKTsKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBjcmVhdGUgYW4gaW5kZXggYnVmZmVy
IG9mIHNpemUgJXUsIHJlc3VsdDogMHglMDh4LiIsIG1CdWZmZXJTaXplLCByZXN1bHQpOwotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbUJ1ZmZlclNp
emUgPSBidWZmZXJTaXplOwotICAgIG1JbmRleFR5cGUgPSBpbmRleFR5cGU7Ci0gICAgbUR5bmFt
aWMgPSBkeW5hbWljOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUluZGV4QnVmZmVyOSAqSW5k
ZXhCdWZmZXI5OjptYWtlSW5kZXhCdWZmZXI5KEluZGV4QnVmZmVyICppbmRleEJ1ZmZlcikKLXsK
LSAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShJbmRleEJ1ZmZlcjkqLCBpbmRleEJ1ZmZlcikp
OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbmRleEJ1ZmZlcjkqPihpbmRleEJ1ZmZlcik7Ci19
Ci0KLWJvb2wgSW5kZXhCdWZmZXI5OjptYXBCdWZmZXIodW5zaWduZWQgaW50IG9mZnNldCwgdW5z
aWduZWQgaW50IHNpemUsIHZvaWQqKiBvdXRNYXBwZWRNZW1vcnkpCi17Ci0gICAgaWYgKG1JbmRl
eEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIERXT1JEIGxvY2tGbGFncyA9IG1EeW5hbWljID8gRDNE
TE9DS19OT09WRVJXUklURSA6IDA7Ci0KLSAgICAgICAgdm9pZCAqbWFwUHRyID0gTlVMTDsKLSAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBtSW5kZXhCdWZmZXItPkxvY2sob2Zmc2V0LCBzaXplLCAm
bWFwUHRyLCBsb2NrRmxhZ3MpOwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEVSUigiSW5kZXggYnVmZmVyIGxvY2sgZmFpbGVkIHdpdGggZXJyb3Ig
MHglMDh4IiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
Ci0gICAgICAgICpvdXRNYXBwZWRNZW1vcnkgPSBtYXBQdHI7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBFUlIoIkluZGV4IGJ1ZmZlciBub3Qg
aW5pdGlhbGl6ZWQuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wg
SW5kZXhCdWZmZXI5Ojp1bm1hcEJ1ZmZlcigpCi17Ci0gICAgaWYgKG1JbmRleEJ1ZmZlcikKLSAg
ICB7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUluZGV4QnVmZmVyLT5VbmxvY2soKTsKLSAg
ICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIklu
ZGV4IGJ1ZmZlciB1bmxvY2sgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBFUlIoIkluZGV4IGJ1ZmZlciBub3Qg
aW5pdGlhbGl6ZWQuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLUdMZW51
bSBJbmRleEJ1ZmZlcjk6OmdldEluZGV4VHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbmRl
eFR5cGU7Ci19Ci0KLXVuc2lnbmVkIGludCBJbmRleEJ1ZmZlcjk6OmdldEJ1ZmZlclNpemUoKSBj
b25zdAotewotICAgIHJldHVybiBtQnVmZmVyU2l6ZTsKLX0KLQotYm9vbCBJbmRleEJ1ZmZlcjk6
OnNldFNpemUodW5zaWduZWQgaW50IGJ1ZmZlclNpemUsIEdMZW51bSBpbmRleFR5cGUpCi17Ci0g
ICAgaWYgKGJ1ZmZlclNpemUgPiBtQnVmZmVyU2l6ZSB8fCBpbmRleFR5cGUgIT0gbUluZGV4VHlw
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpbml0aWFsaXplKGJ1ZmZlclNpemUsIGluZGV4VHlw
ZSwgbUR5bmFtaWMpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci19Ci0KLWJvb2wgSW5kZXhCdWZmZXI5OjpkaXNjYXJkKCkKLXsKLSAgICBpZiAo
bUluZGV4QnVmZmVyKQotICAgIHsKLSAgICAgICAgdm9pZCAqZHVtbXk7Ci0gICAgICAgIEhSRVNV
TFQgcmVzdWx0OwotCi0gICAgICAgIHJlc3VsdCA9IG1JbmRleEJ1ZmZlci0+TG9jaygwLCAxLCAm
ZHVtbXksIEQzRExPQ0tfRElTQ0FSRCk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAg
ICAgICAgewotICAgICAgICAgICAgRVJSKCJEaXNjYXJkIGxvY2sgZmFpbGVkIHdpdGggZXJyb3Ig
MHglMDh4IiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHJlc3VsdCA9IG1JbmRleEJ1ZmZlci0+VW5sb2NrKCk7Ci0gICAgICAgIGlmIChG
QUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJEaXNjYXJkIHVubG9j
ayBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgiLCByZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVs
c2UKLSAgICB7Ci0gICAgICAgIEVSUigiSW5kZXggYnVmZmVyIG5vdCBpbml0aWFsaXplZC4iKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotRDNERk9STUFUIEluZGV4QnVmZmVy
OTo6Z2V0SW5kZXhGb3JtYXQoKSBjb25zdAotewotICAgIHN3aXRjaCAobUluZGV4VHlwZSkKLSAg
ICB7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6ICAgIHJldHVybiBEM0RGTVRfSU5ERVgx
NjsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6ICAgcmV0dXJuIEQzREZNVF9JTkRFWDE2
OwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6ICAgICByZXR1cm4gRDNERk1UX0lOREVYMzI7
Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgIHJldHVybiBEM0RGTVRfVU5LTk9XTjsK
LSAgICB9Ci19Ci0KLUlEaXJlY3QzREluZGV4QnVmZmVyOSAqIEluZGV4QnVmZmVyOTo6Z2V0QnVm
ZmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUluZGV4QnVmZmVyOwotfQotCi19ClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZlcjkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhCdWZmZXI5LmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDY4MDE4Njc1MzI0NTU3M2IzN2E4OGQ5YTVkZGFmNWM0MDc0ZTBl
MjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZlcjkuaAor
KysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIElu
ZGV4ZmZlcjkuaDogRGVmaW5lcyB0aGUgRDNEOSBJbmRleEJ1ZmZlciBpbXBsZW1lbnRhdGlvbi4K
LQotI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfSU5ERVhCVUZGRVI5X0hfCi0jZGVmaW5lIExJ
QkdMRVNWMl9SRU5ERVJFUl9JTkRFWEJVRkZFUjlfSF8KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9JbmRleEJ1ZmZlci5oIgotCi1uYW1lc3BhY2UgcngKLXsKLWNsYXNzIFJlbmRlcmVy
OTsKLQotY2xhc3MgSW5kZXhCdWZmZXI5IDogcHVibGljIEluZGV4QnVmZmVyCi17Ci0gIHB1Ymxp
YzoKLSAgICBleHBsaWNpdCBJbmRleEJ1ZmZlcjkoUmVuZGVyZXI5ICpjb25zdCByZW5kZXJlcik7
Ci0gICAgdmlydHVhbCB+SW5kZXhCdWZmZXI5KCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaW5pdGlh
bGl6ZSh1bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSwgR0xlbnVtIGluZGV4VHlwZSwgYm9vbCBkeW5h
bWljKTsKLQotICAgIHN0YXRpYyBJbmRleEJ1ZmZlcjkgKm1ha2VJbmRleEJ1ZmZlcjkoSW5kZXhC
dWZmZXIgKmluZGV4QnVmZmVyKTsKLQotICAgIHZpcnR1YWwgYm9vbCBtYXBCdWZmZXIodW5zaWdu
ZWQgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IHNpemUsIHZvaWQqKiBvdXRNYXBwZWRNZW1vcnkp
OwotICAgIHZpcnR1YWwgYm9vbCB1bm1hcEJ1ZmZlcigpOwotCi0gICAgdmlydHVhbCBHTGVudW0g
Z2V0SW5kZXhUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0QnVmZmVy
U2l6ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBzZXRTaXplKHVuc2lnbmVkIGludCBidWZm
ZXJTaXplLCBHTGVudW0gaW5kZXhUeXBlKTsKLQotICAgIHZpcnR1YWwgYm9vbCBkaXNjYXJkKCk7
Ci0KLSAgICBEM0RGT1JNQVQgZ2V0SW5kZXhGb3JtYXQoKSBjb25zdDsKLSAgICBJRGlyZWN0M0RJ
bmRleEJ1ZmZlcjkgKmdldEJ1ZmZlcigpIGNvbnN0OwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKEluZGV4QnVmZmVyOSk7Ci0KLSAgICByeDo6UmVuZGVyZXI5ICpj
b25zdCBtUmVuZGVyZXI7Ci0KLSAgICBJRGlyZWN0M0RJbmRleEJ1ZmZlcjkgKm1JbmRleEJ1ZmZl
cjsKLSAgICB1bnNpZ25lZCBpbnQgbUJ1ZmZlclNpemU7Ci0gICAgR0xlbnVtIG1JbmRleFR5cGU7
Ci0gICAgYm9vbCBtRHluYW1pYzsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5E
RVJFUl9JTkRFWEJVRkZFUjlfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5wdXRMYXlvdXRDYWNoZS5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0lucHV0TGF5b3V0Q2FjaGUuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTUyZjNhMzI2ZWFkYTUxOGJlNDNkMDgw
M2Q3ZTYxZTExZTBmZjk1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5w
dXRMYXlvdXRDYWNoZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMTMgKzAsMCBAQAotI2luY2x1
ZGUgInByZWNvbXBpbGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0v
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gSW5wdXRMYXlvdXRDYWNoZS5j
cHA6IERlZmluZXMgSW5wdXRMYXlvdXRDYWNoZSwgYSBjbGFzcyB0aGF0IGJ1aWxkcyBhbmQgY2Fj
aGVzCi0vLyBEM0QxMSBpbnB1dCBsYXlvdXRzLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL0lucHV0TGF5b3V0Q2FjaGUuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVmVy
dGV4QnVmZmVyMTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFn
ZTExLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckV4ZWN1dGFibGUxMS5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL0NvbnRleHQuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGF0YU1h
bmFnZXIuaCIKLQotI2luY2x1ZGUgInRoaXJkX3BhcnR5L211cm11cmhhc2gvTXVybXVySGFzaDMu
aCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLWNvbnN0IHVuc2lnbmVkIGludCBJbnB1dExheW91dENh
Y2hlOjprTWF4SW5wdXRMYXlvdXRzID0gMTAyNDsKLQotSW5wdXRMYXlvdXRDYWNoZTo6SW5wdXRM
YXlvdXRDYWNoZSgpIDogbUlucHV0TGF5b3V0TWFwKGtNYXhJbnB1dExheW91dHMsIGhhc2hJbnB1
dExheW91dCwgY29tcGFyZUlucHV0TGF5b3V0cykKLXsKLSAgICBtQ291bnRlciA9IDA7Ci0gICAg
bURldmljZSA9IE5VTEw7Ci0gICAgbURldmljZUNvbnRleHQgPSBOVUxMOwotICAgIG1DdXJyZW50
SUwgPSBOVUxMOwotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9WRVJU
RVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAgICAgICAgbUN1cnJlbnRCdWZmZXJzW2ldID0gLTE7
Ci0gICAgICAgIG1DdXJyZW50VmVydGV4U3RyaWRlc1tpXSA9IC0xOwotICAgICAgICBtQ3VycmVu
dFZlcnRleE9mZnNldHNbaV0gPSAtMTsKLSAgICB9Ci19Ci0KLUlucHV0TGF5b3V0Q2FjaGU6On5J
bnB1dExheW91dENhY2hlKCkKLXsKLSAgICBjbGVhcigpOwotfQotCi12b2lkIElucHV0TGF5b3V0
Q2FjaGU6OmluaXRpYWxpemUoSUQzRDExRGV2aWNlICpkZXZpY2UsIElEM0QxMURldmljZUNvbnRl
eHQgKmNvbnRleHQpCi17Ci0gICAgY2xlYXIoKTsKLSAgICBtRGV2aWNlID0gZGV2aWNlOwotICAg
IG1EZXZpY2VDb250ZXh0ID0gY29udGV4dDsKLX0KLQotdm9pZCBJbnB1dExheW91dENhY2hlOjpj
bGVhcigpCi17Ci0gICAgZm9yIChJbnB1dExheW91dE1hcDo6aXRlcmF0b3IgaSA9IG1JbnB1dExh
eW91dE1hcC5iZWdpbigpOyBpICE9IG1JbnB1dExheW91dE1hcC5lbmQoKTsgaSsrKQotICAgIHsK
LSAgICAgICAgaS0+c2Vjb25kLmlucHV0TGF5b3V0LT5SZWxlYXNlKCk7Ci0gICAgfQotICAgIG1J
bnB1dExheW91dE1hcC5jbGVhcigpOwotICAgIG1hcmtEaXJ0eSgpOwotfQotCi12b2lkIElucHV0
TGF5b3V0Q2FjaGU6Om1hcmtEaXJ0eSgpCi17Ci0gICAgbUN1cnJlbnRJTCA9IE5VTEw7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKysp
Ci0gICAgewotICAgICAgICBtQ3VycmVudEJ1ZmZlcnNbaV0gPSAtMTsKLSAgICAgICAgbUN1cnJl
bnRWZXJ0ZXhTdHJpZGVzW2ldID0gLTE7Ci0gICAgICAgIG1DdXJyZW50VmVydGV4T2Zmc2V0c1tp
XSA9IC0xOwotICAgIH0KLX0KLQotR0xlbnVtIElucHV0TGF5b3V0Q2FjaGU6OmFwcGx5VmVydGV4
QnVmZmVycyhUcmFuc2xhdGVkQXR0cmlidXRlIGF0dHJpYnV0ZXNbZ2w6Ok1BWF9WRVJURVhfQVRU
UklCU10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KQotewotICAgIGludCBzb3J0ZWRTZW1hbnRpY0lu
ZGljZXNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107Ci0gICAgcHJvZ3JhbUJpbmFyeS0+c29ydEF0
dHJpYnV0ZXNCeUxheW91dChhdHRyaWJ1dGVzLCBzb3J0ZWRTZW1hbnRpY0luZGljZXMpOwotCi0g
ICAgaWYgKCFtRGV2aWNlIHx8ICFtRGV2aWNlQ29udGV4dCkKLSAgICB7Ci0gICAgICAgIEVSUigi
SW5wdXRMYXlvdXRDYWNoZSBpcyBub3QgaW5pdGlhbGl6ZWQuIik7Ci0gICAgICAgIHJldHVybiBH
TF9JTlZBTElEX09QRVJBVElPTjsKLSAgICB9Ci0KLSAgICBJbnB1dExheW91dEtleSBpbEtleSA9
IHsgMCB9OwotCi0gICAgSUQzRDExQnVmZmVyICp2ZXJ0ZXhCdWZmZXJzW2dsOjpNQVhfVkVSVEVY
X0FUVFJJQlNdID0geyBOVUxMIH07Ci0gICAgdW5zaWduZWQgaW50IHZlcnRleEJ1ZmZlclNlcmlh
bHNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10gPSB7IDAgfTsKLSAgICBVSU5UIHZlcnRleFN0cmlk
ZXNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10gPSB7IDAgfTsKLSAgICBVSU5UIHZlcnRleE9mZnNl
dHNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10gPSB7IDAgfTsKLQotICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBzZW1hbnRpY05hbWUgPSAiVEVYQ09PUkQiOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAgewotICAgICAgICBp
ZiAoYXR0cmlidXRlc1tpXS5hY3RpdmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFZlcnRleEJ1
ZmZlcjExICp2ZXJ0ZXhCdWZmZXIgPSBWZXJ0ZXhCdWZmZXIxMTo6bWFrZVZlcnRleEJ1ZmZlcjEx
KGF0dHJpYnV0ZXNbaV0udmVydGV4QnVmZmVyKTsKLSAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2Ux
MSAqYnVmZmVyU3RvcmFnZSA9IGF0dHJpYnV0ZXNbaV0uc3RvcmFnZSA/IEJ1ZmZlclN0b3JhZ2Ux
MTo6bWFrZUJ1ZmZlclN0b3JhZ2UxMShhdHRyaWJ1dGVzW2ldLnN0b3JhZ2UpIDogTlVMTDsKLQot
ICAgICAgICAgICAgRDNEMTFfSU5QVVRfQ0xBU1NJRklDQVRJT04gaW5wdXRDbGFzcyA9IGF0dHJp
YnV0ZXNbaV0uZGl2aXNvciA+IDAgPyBEM0QxMV9JTlBVVF9QRVJfSU5TVEFOQ0VfREFUQSA6IEQz
RDExX0lOUFVUX1BFUl9WRVJURVhfREFUQTsKLQotICAgICAgICAgICAgLy8gUmVjb3JkIHRoZSB0
eXBlIG9mIHRoZSBhc3NvY2lhdGVkIHZlcnRleCBzaGFkZXIgdmVjdG9yIGluIG91ciBrZXkKLSAg
ICAgICAgICAgIC8vIFRoaXMgd2lsbCBwcmV2ZW50IG1pc21hdGNoZWQgdmVydGV4IHNoYWRlcnMg
ZnJvbSB1c2luZyB0aGUgc2FtZSBpbnB1dCBsYXlvdXQKLSAgICAgICAgICAgIEdMaW50IGF0dHJp
YnV0ZVNpemU7Ci0gICAgICAgICAgICBwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVBdHRyaWJ1dGUo
aWxLZXkuZWxlbWVudENvdW50LCAwLCBOVUxMLCAmYXR0cmlidXRlU2l6ZSwgJmlsS2V5LmVsZW1l
bnRzW2lsS2V5LmVsZW1lbnRDb3VudF0uZ2xzbEVsZW1lbnRUeXBlLCBOVUxMKTsKLQotICAgICAg
ICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5kZXNjLlNlbWFudGljTmFt
ZSA9IHNlbWFudGljTmFtZTsKLSAgICAgICAgICAgIGlsS2V5LmVsZW1lbnRzW2lsS2V5LmVsZW1l
bnRDb3VudF0uZGVzYy5TZW1hbnRpY0luZGV4ID0gc29ydGVkU2VtYW50aWNJbmRpY2VzW2ldOwot
ICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5kZXNjLkZvcm1h
dCA9IGF0dHJpYnV0ZXNbaV0uYXR0cmlidXRlLT5tQXJyYXlFbmFibGVkID8gdmVydGV4QnVmZmVy
LT5nZXREWEdJRm9ybWF0KCphdHRyaWJ1dGVzW2ldLmF0dHJpYnV0ZSkgOiBEWEdJX0ZPUk1BVF9S
MzJHMzJCMzJBMzJfRkxPQVQ7Ci0gICAgICAgICAgICBpbEtleS5lbGVtZW50c1tpbEtleS5lbGVt
ZW50Q291bnRdLmRlc2MuSW5wdXRTbG90ID0gaTsKLSAgICAgICAgICAgIGlsS2V5LmVsZW1lbnRz
W2lsS2V5LmVsZW1lbnRDb3VudF0uZGVzYy5BbGlnbmVkQnl0ZU9mZnNldCA9IDA7Ci0gICAgICAg
ICAgICBpbEtleS5lbGVtZW50c1tpbEtleS5lbGVtZW50Q291bnRdLmRlc2MuSW5wdXRTbG90Q2xh
c3MgPSBpbnB1dENsYXNzOwotICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVu
dENvdW50XS5kZXNjLkluc3RhbmNlRGF0YVN0ZXBSYXRlID0gYXR0cmlidXRlc1tpXS5kaXZpc29y
OwotICAgICAgICAgICAgaWxLZXkuZWxlbWVudENvdW50Kys7Ci0KLSAgICAgICAgICAgIHZlcnRl
eEJ1ZmZlcnNbaV0gPSBidWZmZXJTdG9yYWdlID8gYnVmZmVyU3RvcmFnZS0+Z2V0QnVmZmVyKCkg
OiB2ZXJ0ZXhCdWZmZXItPmdldEJ1ZmZlcigpOwotICAgICAgICAgICAgdmVydGV4QnVmZmVyU2Vy
aWFsc1tpXSA9IGJ1ZmZlclN0b3JhZ2UgPyBidWZmZXJTdG9yYWdlLT5nZXRTZXJpYWwoKSA6IHZl
cnRleEJ1ZmZlci0+Z2V0U2VyaWFsKCk7Ci0gICAgICAgICAgICB2ZXJ0ZXhTdHJpZGVzW2ldID0g
YXR0cmlidXRlc1tpXS5zdHJpZGU7Ci0gICAgICAgICAgICB2ZXJ0ZXhPZmZzZXRzW2ldID0gYXR0
cmlidXRlc1tpXS5vZmZzZXQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBJRDNEMTFJbnB1dExh
eW91dCAqaW5wdXRMYXlvdXQgPSBOVUxMOwotCi0gICAgSW5wdXRMYXlvdXRNYXA6Oml0ZXJhdG9y
IGkgPSBtSW5wdXRMYXlvdXRNYXAuZmluZChpbEtleSk7Ci0gICAgaWYgKGkgIT0gbUlucHV0TGF5
b3V0TWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgaW5wdXRMYXlvdXQgPSBpLT5zZWNvbmQuaW5w
dXRMYXlvdXQ7Ci0gICAgICAgIGktPnNlY29uZC5sYXN0VXNlZFRpbWUgPSBtQ291bnRlcisrOwot
ICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBTaGFkZXJFeGVjdXRhYmxlMTEgKnNoYWRl
ciA9IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShwcm9ncmFtQmlu
YXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlKCkpOwotCi0gICAgICAgIEQzRDExX0lOUFVUX0VMRU1F
TlRfREVTQyBkZXNjc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaiA9IDA7IGogPCBpbEtleS5lbGVtZW50Q291bnQ7ICsraikKLSAgICAgICAgewot
ICAgICAgICAgICAgZGVzY3Nbal0gPSBpbEtleS5lbGVtZW50c1tqXS5kZXNjOwotICAgICAgICB9
Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVJbnB1dExheW91dChk
ZXNjcywgaWxLZXkuZWxlbWVudENvdW50LCBzaGFkZXItPmdldEZ1bmN0aW9uKCksIHNoYWRlci0+
Z2V0TGVuZ3RoKCksICZpbnB1dExheW91dCk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
LSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gY3JhdGUgaW5wdXQgbGF5b3V0
LCByZXN1bHQ6IDB4JTA4eCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gR0xfSU5WQUxJ
RF9PUEVSQVRJT047Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobUlucHV0TGF5b3V0TWFwLnNp
emUoKSA+PSBrTWF4SW5wdXRMYXlvdXRzKQotICAgICAgICB7Ci0gICAgICAgICAgICBUUkFDRSgi
T3ZlcmZsb3dlZCB0aGUgbGltaXQgb2YgJXUgaW5wdXQgbGF5b3V0cywgcmVtb3ZpbmcgdGhlIGxl
YXN0IHJlY2VudGx5IHVzZWQgIgotICAgICAgICAgICAgICAgICAgInRvIG1ha2Ugcm9vbS4iLCBr
TWF4SW5wdXRMYXlvdXRzKTsKLQotICAgICAgICAgICAgSW5wdXRMYXlvdXRNYXA6Oml0ZXJhdG9y
IGxlYXN0UmVjZW50bHlVc2VkID0gbUlucHV0TGF5b3V0TWFwLmJlZ2luKCk7Ci0gICAgICAgICAg
ICBmb3IgKElucHV0TGF5b3V0TWFwOjppdGVyYXRvciBpID0gbUlucHV0TGF5b3V0TWFwLmJlZ2lu
KCk7IGkgIT0gbUlucHV0TGF5b3V0TWFwLmVuZCgpOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGktPnNlY29uZC5sYXN0VXNlZFRpbWUgPCBsZWFzdFJlY2VudGx5VXNl
ZC0+c2Vjb25kLmxhc3RVc2VkVGltZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIGxlYXN0UmVjZW50bHlVc2VkID0gaTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmlucHV0TGF5b3V0
LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBtSW5wdXRMYXlvdXRNYXAuZXJhc2UobGVhc3RSZWNl
bnRseVVzZWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgSW5wdXRMYXlvdXRDb3VudGVyUGFpciBp
bnB1dENvdW50ZXJQYWlyOwotICAgICAgICBpbnB1dENvdW50ZXJQYWlyLmlucHV0TGF5b3V0ID0g
aW5wdXRMYXlvdXQ7Ci0gICAgICAgIGlucHV0Q291bnRlclBhaXIubGFzdFVzZWRUaW1lID0gbUNv
dW50ZXIrKzsKLQotICAgICAgICBtSW5wdXRMYXlvdXRNYXAuaW5zZXJ0KHN0ZDo6bWFrZV9wYWly
KGlsS2V5LCBpbnB1dENvdW50ZXJQYWlyKSk7Ci0gICAgfQotCi0gICAgaWYgKGlucHV0TGF5b3V0
ICE9IG1DdXJyZW50SUwpCi0gICAgewotICAgICAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRJbnB1
dExheW91dChpbnB1dExheW91dCk7Ci0gICAgICAgIG1DdXJyZW50SUwgPSBpbnB1dExheW91dDsK
LSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpNQVhfVkVSVEVY
X0FUVFJJQlM7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmICh2ZXJ0ZXhCdWZmZXJTZXJpYWxzW2ld
ICE9IG1DdXJyZW50QnVmZmVyc1tpXSB8fCB2ZXJ0ZXhTdHJpZGVzW2ldICE9IG1DdXJyZW50VmVy
dGV4U3RyaWRlc1tpXSB8fAotICAgICAgICAgICAgdmVydGV4T2Zmc2V0c1tpXSAhPSBtQ3VycmVu
dFZlcnRleE9mZnNldHNbaV0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0
LT5JQVNldFZlcnRleEJ1ZmZlcnMoaSwgMSwgJnZlcnRleEJ1ZmZlcnNbaV0sICZ2ZXJ0ZXhTdHJp
ZGVzW2ldLCAmdmVydGV4T2Zmc2V0c1tpXSk7Ci0gICAgICAgICAgICBtQ3VycmVudEJ1ZmZlcnNb
aV0gPSB2ZXJ0ZXhCdWZmZXJTZXJpYWxzW2ldOwotICAgICAgICAgICAgbUN1cnJlbnRWZXJ0ZXhT
dHJpZGVzW2ldID0gdmVydGV4U3RyaWRlc1tpXTsKLSAgICAgICAgICAgIG1DdXJyZW50VmVydGV4
T2Zmc2V0c1tpXSA9IHZlcnRleE9mZnNldHNbaV07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gR0xfTk9fRVJST1I7Ci19Ci0KLXN0ZDo6c2l6ZV90IElucHV0TGF5b3V0Q2FjaGU6Omhh
c2hJbnB1dExheW91dChjb25zdCBJbnB1dExheW91dEtleSAmaW5wdXRMYXlvdXQpCi17Ci0gICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZWVkID0gMHhERUFEQkVFRjsKLQotICAgIHN0ZDo6
c2l6ZV90IGhhc2ggPSAwOwotICAgIE11cm11ckhhc2gzX3g4Nl8zMihpbnB1dExheW91dC5iZWdp
bigpLCBpbnB1dExheW91dC5lbmQoKSAtIGlucHV0TGF5b3V0LmJlZ2luKCksIHNlZWQsICZoYXNo
KTsKLSAgICByZXR1cm4gaGFzaDsKLX0KLQotYm9vbCBJbnB1dExheW91dENhY2hlOjpjb21wYXJl
SW5wdXRMYXlvdXRzKGNvbnN0IElucHV0TGF5b3V0S2V5ICZhLCBjb25zdCBJbnB1dExheW91dEtl
eSAmYikKLXsKLSAgICBpZiAoYS5lbGVtZW50Q291bnQgIT0gYi5lbGVtZW50Q291bnQpCi0gICAg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0ZDo6ZXF1YWwo
YS5iZWdpbigpLCBhLmVuZCgpLCBiLmJlZ2luKCkpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0lucHV0TGF5b3V0Q2Fj
aGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5w
dXRMYXlvdXRDYWNoZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjFhOGVlYmNm
N2E2Y2E5OTBjYWI5MzgyNTU4ZjMzOTc4MTQ3YTAwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvSW5wdXRMYXlvdXRDYWNoZS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAs
MCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIElucHV0TGF5b3V0Q2FjaGUuaDogRGVmaW5lcyBJbnB1
dExheW91dENhY2hlLCBhIGNsYXNzIHRoYXQgYnVpbGRzIGFuZCBjYWNoZXMKLS8vIEQzRDExIGlu
cHV0IGxheW91dHMuCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0lOUFVUTEFZT1VUQ0FD
SEVfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX0lOUFVUTEFZT1VUQ0FDSEVfSF8KLQot
I2luY2x1ZGUgImxpYkdMRVN2Mi9Db25zdGFudHMuaCIKLSNpbmNsdWRlICJjb21tb24vYW5nbGV1
dGlscy5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLWNsYXNzIFByb2dyYW1CaW5hcnk7Ci19Ci0KLW5h
bWVzcGFjZSByeAotewotc3RydWN0IFRyYW5zbGF0ZWRBdHRyaWJ1dGU7Ci0KLWNsYXNzIElucHV0
TGF5b3V0Q2FjaGUKLXsKLSAgcHVibGljOgotICAgIElucHV0TGF5b3V0Q2FjaGUoKTsKLSAgICB2
aXJ0dWFsIH5JbnB1dExheW91dENhY2hlKCk7Ci0KLSAgICB2b2lkIGluaXRpYWxpemUoSUQzRDEx
RGV2aWNlICpkZXZpY2UsIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQpOwotICAgIHZvaWQg
Y2xlYXIoKTsKLSAgICB2b2lkIG1hcmtEaXJ0eSgpOwotCi0gICAgR0xlbnVtIGFwcGx5VmVydGV4
QnVmZmVycyhUcmFuc2xhdGVkQXR0cmlidXRlIGF0dHJpYnV0ZXNbZ2w6Ok1BWF9WRVJURVhfQVRU
UklCU10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oSW5wdXRMYXlvdXRDYWNoZSk7Ci0KLSAgICBzdHJ1Y3QgSW5wdXRMYXlvdXRFbGVtZW50Ci0g
ICAgewotICAgICAgICBEM0QxMV9JTlBVVF9FTEVNRU5UX0RFU0MgZGVzYzsKLSAgICAgICAgR0xl
bnVtIGdsc2xFbGVtZW50VHlwZTsKLSAgICB9OwotCi0gICAgc3RydWN0IElucHV0TGF5b3V0S2V5
Ci0gICAgewotICAgICAgICB1bnNpZ25lZCBpbnQgZWxlbWVudENvdW50OwotICAgICAgICBJbnB1
dExheW91dEVsZW1lbnQgZWxlbWVudHNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107Ci0KLSAgICAg
ICAgY29uc3QgY2hhciAqYmVnaW4oKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oJmVsZW1lbnRDb3VudCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBjb25zdCBjaGFyICplbmQoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oJmVsZW1lbnRzW2VsZW1l
bnRDb3VudF0pOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHN0cnVjdCBJbnB1dExheW91dENv
dW50ZXJQYWlyCi0gICAgewotICAgICAgICBJRDNEMTFJbnB1dExheW91dCAqaW5wdXRMYXlvdXQ7
Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBsYXN0VXNlZFRpbWU7Ci0gICAgfTsKLQotICAg
IElEM0QxMUlucHV0TGF5b3V0ICptQ3VycmVudElMOwotICAgIHVuc2lnbmVkIGludCBtQ3VycmVu
dEJ1ZmZlcnNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107Ci0gICAgVUlOVCBtQ3VycmVudFZlcnRl
eFN0cmlkZXNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107Ci0gICAgVUlOVCBtQ3VycmVudFZlcnRl
eE9mZnNldHNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107Ci0KLSAgICBzdGF0aWMgc3RkOjpzaXpl
X3QgaGFzaElucHV0TGF5b3V0KGNvbnN0IElucHV0TGF5b3V0S2V5ICZpbnB1dExheW91dCk7Ci0g
ICAgc3RhdGljIGJvb2wgY29tcGFyZUlucHV0TGF5b3V0cyhjb25zdCBJbnB1dExheW91dEtleSAm
YSwgY29uc3QgSW5wdXRMYXlvdXRLZXkgJmIpOwotCi0gICAgdHlwZWRlZiBzdGQ6OnNpemVfdCAo
KklucHV0TGF5b3V0SGFzaEZ1bmN0aW9uKShjb25zdCBJbnB1dExheW91dEtleSAmKTsKLSAgICB0
eXBlZGVmIGJvb2wgKCpJbnB1dExheW91dEVxdWFsaXR5RnVuY3Rpb24pKGNvbnN0IElucHV0TGF5
b3V0S2V5ICYsIGNvbnN0IElucHV0TGF5b3V0S2V5ICYpOwotICAgIHR5cGVkZWYgc3RkOjp1bm9y
ZGVyZWRfbWFwPElucHV0TGF5b3V0S2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IElucHV0TGF5b3V0Q291bnRlclBhaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SW5wdXRMYXlvdXRIYXNoRnVuY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SW5wdXRMYXlvdXRFcXVhbGl0eUZ1bmN0aW9uPiBJbnB1dExheW91dE1hcDsKLSAgICBJbnB1dExh
eW91dE1hcCBtSW5wdXRMYXlvdXRNYXA7Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50
IGtNYXhJbnB1dExheW91dHM7Ci0KLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgbUNvdW50ZXI7Ci0K
LSAgICBJRDNEMTFEZXZpY2UgKm1EZXZpY2U7Ci0gICAgSUQzRDExRGV2aWNlQ29udGV4dCAqbURl
dmljZUNvbnRleHQ7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfSU5Q
VVRMQVlPVVRDQUNIRV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9RdWVyeTExLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUXVlcnkxMS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDEzMjEwZmM5MjkxMzAzMDc2MjhhNGM5ZDFhZWVmZDQwMWQ5MjIwNDguLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9RdWVyeTExLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDEyMiArMCwwIEBACi0jaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKLS8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwotCi0vLyBRdWVyeTExLmNwcDogRGVmaW5lcyB0aGUgcng6OlF1ZXJ5MTEgY2xhc3Mgd2hpY2gg
aW1wbGVtZW50cyByeDo6UXVlcnlJbXBsLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L1F1ZXJ5MTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIxMS5oIgot
I2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0KLW5hbWVzcGFjZSByeAotewotCi1RdWVyeTEx
OjpRdWVyeTExKHJ4OjpSZW5kZXJlcjExICpyZW5kZXJlciwgR0xlbnVtIHR5cGUpIDogUXVlcnlJ
bXBsKHR5cGUpCi17Ci0gICAgbVJlbmRlcmVyID0gcmVuZGVyZXI7Ci0gICAgbVF1ZXJ5ID0gTlVM
TDsKLX0KLQotUXVlcnkxMTo6flF1ZXJ5MTEoKQotewotICAgIGlmIChtUXVlcnkpCi0gICAgewot
ICAgICAgICBtUXVlcnktPlJlbGVhc2UoKTsKLSAgICAgICAgbVF1ZXJ5ID0gTlVMTDsKLSAgICB9
Ci19Ci0KLXZvaWQgUXVlcnkxMTo6YmVnaW4oKQotewotICAgIGlmIChtUXVlcnkgPT0gTlVMTCkK
LSAgICB7Ci0gICAgICAgIEQzRDExX1FVRVJZX0RFU0MgcXVlcnlEZXNjOwotICAgICAgICBxdWVy
eURlc2MuUXVlcnkgPSBEM0QxMV9RVUVSWV9PQ0NMVVNJT047Ci0gICAgICAgIHF1ZXJ5RGVzYy5N
aXNjRmxhZ3MgPSAwOwotCi0gICAgICAgIGlmIChGQUlMRUQobVJlbmRlcmVyLT5nZXREZXZpY2Uo
KS0+Q3JlYXRlUXVlcnkoJnF1ZXJ5RGVzYywgJm1RdWVyeSkpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCktPkJlZ2luKG1RdWVyeSk7Ci19
Ci0KLXZvaWQgUXVlcnkxMTo6ZW5kKCkKLXsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAg
ewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9
Ci0KLSAgICBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKS0+RW5kKG1RdWVyeSk7Ci0KLSAg
ICBtU3RhdHVzID0gR0xfRkFMU0U7Ci0gICAgbVJlc3VsdCA9IEdMX0ZBTFNFOwotfQotCi1HTHVp
bnQgUXVlcnkxMTo6Z2V0UmVzdWx0KCkKLXsKLSAgICBpZiAobVF1ZXJ5ICE9IE5VTEwpCi0gICAg
ewotICAgICAgICB3aGlsZSAoIXRlc3RRdWVyeSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBT
bGVlcCgwKTsKLSAgICAgICAgICAgIC8vIGV4cGxpY2l0bHkgY2hlY2sgZm9yIGRldmljZSBsb3Nz
LCBzb21lIGRyaXZlcnMgc2VlbSB0byByZXR1cm4gU19GQUxTRQotICAgICAgICAgICAgLy8gaWYg
dGhlIGRldmljZSBpcyBsb3N0Ci0gICAgICAgICAgICBpZiAobVJlbmRlcmVyLT50ZXN0RGV2aWNl
TG9zdCh0cnVlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlksIDApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIG1SZXN1bHQ7Ci19Ci0KLUdMYm9vbGVhbiBRdWVyeTExOjppc1Jlc3Vs
dEF2YWlsYWJsZSgpCi17Ci0gICAgaWYgKG1RdWVyeSAhPSBOVUxMKQotICAgIHsKLSAgICAgICAg
dGVzdFF1ZXJ5KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1TdGF0dXM7Ci19Ci0KLUdMYm9vbGVh
biBRdWVyeTExOjp0ZXN0UXVlcnkoKQotewotICAgIGlmIChtUXVlcnkgIT0gTlVMTCAmJiBtU3Rh
dHVzICE9IEdMX1RSVUUpCi0gICAgewotICAgICAgICBVSU5UNjQgbnVtUGl4ZWxzID0gMDsKLSAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKS0+R2V0
RGF0YShtUXVlcnksICZudW1QaXhlbHMsIHNpemVvZihVSU5UNjQpLCAwKTsKLSAgICAgICAgaWYg
KHJlc3VsdCA9PSBTX09LKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU3RhdHVzID0gR0xfVFJV
RTsKLQotICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDoKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDoKLSAgICAgICAgICAg
ICAgICBtUmVzdWx0ID0gKG51bVBpeGVscyA+IDApID8gR0xfVFJVRSA6IEdMX0ZBTFNFOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZSBpZiAobVJlbmRlcmVyLT50ZXN0RGV2aWNlTG9zdCh0cnVlKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9UUlVFKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiBtU3RhdHVzOwotICAgIH0KLQotICAgIHJldHVybiBHTF9U
UlVFOyAvLyBwcmV2ZW50IGJsb2NraW5nIHdoZW4gcXVlcnkgaXMgbnVsbAotfQotCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1F1
ZXJ5MTEuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
UXVlcnkxMS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTAzZGU3N2NhMzI4NTVk
YmNkMTliMTNiYzQ0ZDk3ODM3OTRhNjc1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvUXVlcnkxMS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
LS8vCi0KLS8vIFF1ZXJ5MTEuaDogRGVmaW5lcyB0aGUgcng6OlF1ZXJ5MTEgY2xhc3Mgd2hpY2gg
aW1wbGVtZW50cyByeDo6UXVlcnlJbXBsLgotCi0jaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9R
VUVSWTExX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9RVUVSWTExX0hfCi0KLSNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUXVlcnlJbXBsLmgiCi0KLW5hbWVzcGFjZSByeAotewot
Y2xhc3MgUmVuZGVyZXIxMTsKLQotY2xhc3MgUXVlcnkxMSA6IHB1YmxpYyBRdWVyeUltcGwKLXsK
LSAgcHVibGljOgotICAgIFF1ZXJ5MTEocng6OlJlbmRlcmVyMTEgKnJlbmRlcmVyLCBHTGVudW0g
dHlwZSk7Ci0gICAgdmlydHVhbCB+UXVlcnkxMSgpOwotCi0gICAgdm9pZCBiZWdpbigpOwotICAg
IHZvaWQgZW5kKCk7Ci0gICAgR0x1aW50IGdldFJlc3VsdCgpOwotICAgIEdMYm9vbGVhbiBpc1Jl
c3VsdEF2YWlsYWJsZSgpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKFF1ZXJ5MTEpOwotCi0gICAgR0xib29sZWFuIHRlc3RRdWVyeSgpOwotCi0gICAgcng6OlJl
bmRlcmVyMTEgKm1SZW5kZXJlcjsKLSAgICBJRDNEMTFRdWVyeSAqbVF1ZXJ5OwotfTsKLQotfQot
Ci0jZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1FVRVJZMTFfSF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUXVlcnk5LmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUXVlcnk5LmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY2OTQyNjdkZDFlMTU5YzA5NTM4YmJi
Y2JlYTdmYWIwMDA5ZDVjMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1F1
ZXJ5OS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotI2luY2x1ZGUgInByZWNv
bXBpbGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gUXVlcnk5LmNwcDogRGVmaW5lcyB0aGUgcng6
OlF1ZXJ5OSBjbGFzcyB3aGljaCBpbXBsZW1lbnRzIHJ4OjpRdWVyeUltcGwuCi0KLQotI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9RdWVyeTkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWFp
bi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9yZW5kZXJlcjlfdXRpbHMuaCIKLSNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXI5LmgiCi0KLW5hbWVzcGFjZSByeAot
ewotCi1RdWVyeTk6OlF1ZXJ5OShyeDo6UmVuZGVyZXI5ICpyZW5kZXJlciwgR0xlbnVtIHR5cGUp
IDogUXVlcnlJbXBsKHR5cGUpCi17Ci0gICAgbVJlbmRlcmVyID0gcmVuZGVyZXI7Ci0gICAgbVF1
ZXJ5ID0gTlVMTDsKLX0KLQotUXVlcnk5Ojp+UXVlcnk5KCkKLXsKLSAgICBpZiAobVF1ZXJ5KQot
ICAgIHsKLSAgICAgICAgbVF1ZXJ5LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1RdWVyeSA9IE5VTEw7
Ci0gICAgfQotfQotCi12b2lkIFF1ZXJ5OTo6YmVnaW4oKQotewotICAgIGlmIChtUXVlcnkgPT0g
TlVMTCkKLSAgICB7Ci0gICAgICAgIGlmIChGQUlMRUQobVJlbmRlcmVyLT5nZXREZXZpY2UoKS0+
Q3JlYXRlUXVlcnkoRDNEUVVFUllUWVBFX09DQ0xVU0lPTiwgJm1RdWVyeSkpKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgSFJFU1VMVCByZXN1bHQgPSBtUXVlcnktPklzc3VlKEQzRElTU1VF
X0JFR0lOKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotfQotCi12b2lkIFF1ZXJ5
OTo6ZW5kKCkKLXsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICBIUkVTVUxU
IHJlc3VsdCA9IG1RdWVyeS0+SXNzdWUoRDNESVNTVUVfRU5EKTsKLSAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOwotCi0gICAgbVN0YXR1cyA9IEdMX0ZBTFNFOwotICAgIG1SZXN1bHQgPSBH
TF9GQUxTRTsKLX0KLQotR0x1aW50IFF1ZXJ5OTo6Z2V0UmVzdWx0KCkKLXsKLSAgICBpZiAobVF1
ZXJ5ICE9IE5VTEwpCi0gICAgewotICAgICAgICB3aGlsZSAoIXRlc3RRdWVyeSgpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBTbGVlcCgwKTsKLSAgICAgICAgICAgIC8vIGV4cGxpY2l0bHkgY2hl
Y2sgZm9yIGRldmljZSBsb3NzCi0gICAgICAgICAgICAvLyBzb21lIGRyaXZlcnMgc2VlbSB0byBy
ZXR1cm4gU19GQUxTRSBldmVuIGlmIHRoZSBkZXZpY2UgaXMgbG9zdAotICAgICAgICAgICAgLy8g
aW5zdGVhZCBvZiBEM0RFUlJfREVWSUNFTE9TVCBsaWtlIHRoZXkgc2hvdWxkCi0gICAgICAgICAg
ICBpZiAobVJlbmRlcmVyLT50ZXN0RGV2aWNlTG9zdCh0cnVlKSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIDApOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1SZXN1bHQ7Ci19Ci0K
LUdMYm9vbGVhbiBRdWVyeTk6OmlzUmVzdWx0QXZhaWxhYmxlKCkKLXsKLSAgICBpZiAobVF1ZXJ5
ICE9IE5VTEwpCi0gICAgewotICAgICAgICB0ZXN0UXVlcnkoKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gbVN0YXR1czsKLX0KLQotR0xib29sZWFuIFF1ZXJ5OTo6dGVzdFF1ZXJ5KCkKLXsKLSAgICBp
ZiAobVF1ZXJ5ICE9IE5VTEwgJiYgbVN0YXR1cyAhPSBHTF9UUlVFKQotICAgIHsKLSAgICAgICAg
RFdPUkQgbnVtUGl4ZWxzID0gMDsKLQotICAgICAgICBIUkVTVUxUIGhyZXMgPSBtUXVlcnktPkdl
dERhdGEoJm51bVBpeGVscywgc2l6ZW9mKERXT1JEKSwgRDNER0VUREFUQV9GTFVTSCk7Ci0gICAg
ICAgIGlmIChocmVzID09IFNfT0spCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1TdGF0dXMgPSAg
R0xfVFJVRTsKLQotICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDoKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDoKLSAgICAg
ICAgICAgICAgICBtUmVzdWx0ID0gKG51bVBpeGVscyA+IDApID8gR0xfVFJVRSA6IEdMX0ZBTFNF
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZSBpZiAoZDNkOTo6aXNEZXZpY2VMb3N0RXJyb3IoaHJlcykpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1SZW5kZXJlci0+bm90aWZ5RGV2aWNlTG9zdCgpOwotICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9UUlVFKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiBtU3RhdHVzOwotICAgIH0KLQotICAgIHJldHVybiBHTF9UUlVFOyAvLyBw
cmV2ZW50IGJsb2NraW5nIHdoZW4gcXVlcnkgaXMgbnVsbAotfQotCi19CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1F1ZXJ5OS5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9RdWVyeTkuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdlZWY4OTMzNmVmOGMzNDRhYTUxNjdiNGY0
MDIxYjEwNDFjMDcwYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1F1ZXJ5
OS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykg
MjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFF1
ZXJ5OS5oOiBEZWZpbmVzIHRoZSByeDo6UXVlcnk5IGNsYXNzIHdoaWNoIGltcGxlbWVudHMgcng6
OlF1ZXJ5SW1wbC4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfUVVFUlk5X0hfCi0jZGVm
aW5lIExJQkdMRVNWMl9SRU5ERVJFUl9RVUVSWTlfSF8KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9RdWVyeUltcGwuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci1jbGFzcyBSZW5kZXJlcjk7
Ci0KLWNsYXNzIFF1ZXJ5OSA6IHB1YmxpYyBRdWVyeUltcGwKLXsKLSAgcHVibGljOgotICAgIFF1
ZXJ5OShyeDo6UmVuZGVyZXI5ICpyZW5kZXJlciwgR0xlbnVtIHR5cGUpOwotICAgIHZpcnR1YWwg
flF1ZXJ5OSgpOwotCi0gICAgdm9pZCBiZWdpbigpOwotICAgIHZvaWQgZW5kKCk7Ci0gICAgR0x1
aW50IGdldFJlc3VsdCgpOwotICAgIEdMYm9vbGVhbiBpc1Jlc3VsdEF2YWlsYWJsZSgpOwotCi0g
IHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFF1ZXJ5OSk7Ci0KLSAgICBH
TGJvb2xlYW4gdGVzdFF1ZXJ5KCk7Ci0KLSAgICByeDo6UmVuZGVyZXI5ICptUmVuZGVyZXI7Ci0g
ICAgSURpcmVjdDNEUXVlcnk5ICptUXVlcnk7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVT
VjJfUkVOREVSRVJfUVVFUlk5X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclN0YXRlQ2FjaGUuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJTdGF0ZUNhY2hlLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjMxMTFhZjcyYmUwY2IyZDcyZmZhMGVj
YjdhZjQ1NjM3YTVkNjk0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1Jl
bmRlclN0YXRlQ2FjaGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDA2ICswLDAgQEAKLSNpbmNs
dWRlICJwcmVjb21waWxlZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gUmVuZGVyU3RhdGVD
YWNoZS5jcHA6IERlZmluZXMgcng6OlJlbmRlclN0YXRlQ2FjaGUsIGEgY2FjaGUgb2YgRGlyZWN0
M0QgcmVuZGVyCi0vLyBzdGF0ZSBvYmplY3RzLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL1JlbmRlclN0YXRlQ2FjaGUuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvcmVu
ZGVyZXIxMV91dGlscy5oIgotCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0jaW5jbHVkZSAi
dGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJtdXJIYXNoMy5oIgotCi1uYW1lc3BhY2UgcngKLXsK
LQotLy8gTVNETidzIGRvY3VtZW50YXRpb24gb2YgSUQzRDExRGV2aWNlOjpDcmVhdGVCbGVuZFN0
YXRlLCBJRDNEMTFEZXZpY2U6OkNyZWF0ZVJhc3Rlcml6ZXJTdGF0ZSwKLS8vIElEM0QxMURldmlj
ZTo6Q3JlYXRlRGVwdGhTdGVuY2lsU3RhdGUgYW5kIElEM0QxMURldmljZTo6Q3JlYXRlU2FtcGxl
clN0YXRlIGNsYWltcyB0aGUgbWF4aW11bQotLy8gbnVtYmVyIG9mIHVuaXF1ZSBzdGF0ZXMgb2Yg
ZWFjaCB0eXBlIGFuIGFwcGxpY2F0aW9uIGNhbiBjcmVhdGUgaXMgNDA5NgotY29uc3QgdW5zaWdu
ZWQgaW50IFJlbmRlclN0YXRlQ2FjaGU6OmtNYXhCbGVuZFN0YXRlcyA9IDQwOTY7Ci1jb25zdCB1
bnNpZ25lZCBpbnQgUmVuZGVyU3RhdGVDYWNoZTo6a01heFJhc3Rlcml6ZXJTdGF0ZXMgPSA0MDk2
OwotY29uc3QgdW5zaWduZWQgaW50IFJlbmRlclN0YXRlQ2FjaGU6OmtNYXhEZXB0aFN0ZW5jaWxT
dGF0ZXMgPSA0MDk2OwotY29uc3QgdW5zaWduZWQgaW50IFJlbmRlclN0YXRlQ2FjaGU6OmtNYXhT
YW1wbGVyU3RhdGVzID0gNDA5NjsKLQotUmVuZGVyU3RhdGVDYWNoZTo6UmVuZGVyU3RhdGVDYWNo
ZSgpIDogbURldmljZShOVUxMKSwgbUNvdW50ZXIoMCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtQmxlbmRTdGF0ZUNhY2hlKGtNYXhCbGVuZFN0YXRlcywgaGFzaEJs
ZW5kU3RhdGUsIGNvbXBhcmVCbGVuZFN0YXRlcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtUmFzdGVyaXplclN0YXRlQ2FjaGUoa01heFJhc3Rlcml6ZXJTdGF0ZXMs
IGhhc2hSYXN0ZXJpemVyU3RhdGUsIGNvbXBhcmVSYXN0ZXJpemVyU3RhdGVzKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlKGtN
YXhEZXB0aFN0ZW5jaWxTdGF0ZXMsIGhhc2hEZXB0aFN0ZW5jaWxTdGF0ZSwgY29tcGFyZURlcHRo
U3RlbmNpbFN0YXRlcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
U2FtcGxlclN0YXRlQ2FjaGUoa01heFNhbXBsZXJTdGF0ZXMsIGhhc2hTYW1wbGVyU3RhdGUsIGNv
bXBhcmVTYW1wbGVyU3RhdGVzKQotewotfQotCi1SZW5kZXJTdGF0ZUNhY2hlOjp+UmVuZGVyU3Rh
dGVDYWNoZSgpCi17Ci0gICAgY2xlYXIoKTsKLX0KLQotdm9pZCBSZW5kZXJTdGF0ZUNhY2hlOjpp
bml0aWFsaXplKElEM0QxMURldmljZSAqZGV2aWNlKQotewotICAgIGNsZWFyKCk7Ci0gICAgbURl
dmljZSA9IGRldmljZTsKLX0KLQotdm9pZCBSZW5kZXJTdGF0ZUNhY2hlOjpjbGVhcigpCi17Ci0g
ICAgZm9yIChCbGVuZFN0YXRlTWFwOjppdGVyYXRvciBpID0gbUJsZW5kU3RhdGVDYWNoZS5iZWdp
bigpOyBpICE9IG1CbGVuZFN0YXRlQ2FjaGUuZW5kKCk7IGkrKykKLSAgICB7Ci0gICAgICAgIGkt
PnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOwotICAgIH0KLSAgICBtQmxlbmRTdGF0ZUNhY2hlLmNs
ZWFyKCk7Ci0KLSAgICBmb3IgKFJhc3Rlcml6ZXJTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1SYXN0
ZXJpemVyU3RhdGVDYWNoZS5iZWdpbigpOyBpICE9IG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5lbmQo
KTsgaSsrKQotICAgIHsKLSAgICAgICAgaS0+c2Vjb25kLmZpcnN0LT5SZWxlYXNlKCk7Ci0gICAg
fQotICAgIG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5jbGVhcigpOwotCi0gICAgZm9yIChEZXB0aFN0
ZW5jaWxTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmJlZ2lu
KCk7IGkgIT0gbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuZW5kKCk7IGkrKykKLSAgICB7Ci0gICAg
ICAgIGktPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOwotICAgIH0KLSAgICBtRGVwdGhTdGVuY2ls
U3RhdGVDYWNoZS5jbGVhcigpOwotCi0gICAgZm9yIChTYW1wbGVyU3RhdGVNYXA6Oml0ZXJhdG9y
IGkgPSBtU2FtcGxlclN0YXRlQ2FjaGUuYmVnaW4oKTsgaSAhPSBtU2FtcGxlclN0YXRlQ2FjaGUu
ZW5kKCk7IGkrKykKLSAgICB7Ci0gICAgICAgIGktPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOwot
ICAgIH0KLSAgICBtU2FtcGxlclN0YXRlQ2FjaGUuY2xlYXIoKTsKLX0KLQotc3RkOjpzaXplX3Qg
UmVuZGVyU3RhdGVDYWNoZTo6aGFzaEJsZW5kU3RhdGUoY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJs
ZW5kU3RhdGUpCi17Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZWVkID0gMHhBQkNE
RUY5ODsKLQotICAgIHN0ZDo6c2l6ZV90IGhhc2ggPSAwOwotICAgIE11cm11ckhhc2gzX3g4Nl8z
MigmYmxlbmRTdGF0ZSwgc2l6ZW9mKGdsOjpCbGVuZFN0YXRlKSwgc2VlZCwgJmhhc2gpOwotICAg
IHJldHVybiBoYXNoOwotfQotCi1ib29sIFJlbmRlclN0YXRlQ2FjaGU6OmNvbXBhcmVCbGVuZFN0
YXRlcyhjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYSwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmIpCi17
Ci0gICAgcmV0dXJuIG1lbWNtcCgmYSwgJmIsIHNpemVvZihnbDo6QmxlbmRTdGF0ZSkpID09IDA7
Ci19Ci0KLUlEM0QxMUJsZW5kU3RhdGUgKlJlbmRlclN0YXRlQ2FjaGU6OmdldEJsZW5kU3RhdGUo
Y29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUpCi17Ci0gICAgaWYgKCFtRGV2aWNlKQot
ICAgIHsKLSAgICAgICAgRVJSKCJSZW5kZXJTdGF0ZUNhY2hlIGlzIG5vdCBpbml0aWFsaXplZC4i
KTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgQmxlbmRTdGF0ZU1hcDo6aXRl
cmF0b3IgaSA9IG1CbGVuZFN0YXRlQ2FjaGUuZmluZChibGVuZFN0YXRlKTsKLSAgICBpZiAoaSAh
PSBtQmxlbmRTdGF0ZUNhY2hlLmVuZCgpKQotICAgIHsKLSAgICAgICAgQmxlbmRTdGF0ZUNvdW50
ZXJQYWlyICZzdGF0ZSA9IGktPnNlY29uZDsKLSAgICAgICAgc3RhdGUuc2Vjb25kID0gbUNvdW50
ZXIrKzsKLSAgICAgICAgcmV0dXJuIHN0YXRlLmZpcnN0OwotICAgIH0KLSAgICBlbHNlCi0gICAg
ewotICAgICAgICBpZiAobUJsZW5kU3RhdGVDYWNoZS5zaXplKCkgPj0ga01heEJsZW5kU3RhdGVz
KQotICAgICAgICB7Ci0gICAgICAgICAgICBUUkFDRSgiT3ZlcmZsb3dlZCB0aGUgbGltaXQgb2Yg
JXUgYmxlbmQgc3RhdGVzLCByZW1vdmluZyB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCAiCi0gICAg
ICAgICAgICAgICAgICAidG8gbWFrZSByb29tLiIsIGtNYXhCbGVuZFN0YXRlcyk7Ci0KLSAgICAg
ICAgICAgIEJsZW5kU3RhdGVNYXA6Oml0ZXJhdG9yIGxlYXN0UmVjZW50bHlVc2VkID0gbUJsZW5k
U3RhdGVDYWNoZS5iZWdpbigpOwotICAgICAgICAgICAgZm9yIChCbGVuZFN0YXRlTWFwOjppdGVy
YXRvciBpID0gbUJsZW5kU3RhdGVDYWNoZS5iZWdpbigpOyBpICE9IG1CbGVuZFN0YXRlQ2FjaGUu
ZW5kKCk7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoaS0+c2Vjb25k
LnNlY29uZCA8IGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuc2Vjb25kKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQgPSBpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2Vk
LT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1CbGVuZFN0YXRlQ2FjaGUu
ZXJhc2UobGVhc3RSZWNlbnRseVVzZWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ3JlYXRl
IGEgbmV3IGJsZW5kIHN0YXRlIGFuZCBpbnNlcnQgaXQgaW50byB0aGUgY2FjaGUKLSAgICAgICAg
RDNEMTFfQkxFTkRfREVTQyBibGVuZERlc2MgPSB7IDAgfTsKLSAgICAgICAgYmxlbmREZXNjLkFs
cGhhVG9Db3ZlcmFnZUVuYWJsZSA9IGJsZW5kU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlOwot
ICAgICAgICBibGVuZERlc2MuSW5kZXBlbmRlbnRCbGVuZEVuYWJsZSA9IEZBTFNFOwotCi0gICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgRDNEMTFfU0lNVUxUQU5FT1VTX1JFTkRF
Ul9UQVJHRVRfQ09VTlQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgRDNEMTFfUkVOREVS
X1RBUkdFVF9CTEVORF9ERVNDICZydEJsZW5kID0gYmxlbmREZXNjLlJlbmRlclRhcmdldFtpXTsK
LQotICAgICAgICAgICAgcnRCbGVuZC5CbGVuZEVuYWJsZSA9IGJsZW5kU3RhdGUuYmxlbmQ7Ci0g
ICAgICAgICAgICBpZiAoYmxlbmRTdGF0ZS5ibGVuZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBydEJsZW5kLlNyY0JsZW5kID0gZ2xfZDNkMTE6OkNvbnZlcnRCbGVuZEZ1bmMoYmxl
bmRTdGF0ZS5zb3VyY2VCbGVuZFJHQiwgZmFsc2UpOwotICAgICAgICAgICAgICAgIHJ0QmxlbmQu
RGVzdEJsZW5kID0gZ2xfZDNkMTE6OkNvbnZlcnRCbGVuZEZ1bmMoYmxlbmRTdGF0ZS5kZXN0Qmxl
bmRSR0IsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICBydEJsZW5kLkJsZW5kT3AgPSBnbF9kM2Qx
MTo6Q29udmVydEJsZW5kT3AoYmxlbmRTdGF0ZS5ibGVuZEVxdWF0aW9uUkdCKTsKLQotICAgICAg
ICAgICAgICAgIHJ0QmxlbmQuU3JjQmxlbmRBbHBoYSA9IGdsX2QzZDExOjpDb252ZXJ0QmxlbmRG
dW5jKGJsZW5kU3RhdGUuc291cmNlQmxlbmRBbHBoYSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAg
cnRCbGVuZC5EZXN0QmxlbmRBbHBoYSA9IGdsX2QzZDExOjpDb252ZXJ0QmxlbmRGdW5jKGJsZW5k
U3RhdGUuZGVzdEJsZW5kQWxwaGEsIHRydWUpOwotICAgICAgICAgICAgICAgIHJ0QmxlbmQuQmxl
bmRPcEFscGhhID0gZ2xfZDNkMTE6OkNvbnZlcnRCbGVuZE9wKGJsZW5kU3RhdGUuYmxlbmRFcXVh
dGlvbkFscGhhKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcnRCbGVuZC5SZW5kZXJU
YXJnZXRXcml0ZU1hc2sgPSBnbF9kM2QxMTo6Q29udmVydENvbG9yTWFzayhibGVuZFN0YXRlLmNv
bG9yTWFza1JlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRTdGF0ZS5jb2xvck1hc2tHcmVlbiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYmxlbmRTdGF0ZS5jb2xvck1hc2tCbHVlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGVu
ZFN0YXRlLmNvbG9yTWFza0FscGhhKTsKLSAgICAgICAgfQotCi0gICAgICAgIElEM0QxMUJsZW5k
U3RhdGUgKmR4MTFCbGVuZFN0YXRlID0gTlVMTDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBt
RGV2aWNlLT5DcmVhdGVCbGVuZFN0YXRlKCZibGVuZERlc2MsICZkeDExQmxlbmRTdGF0ZSk7Ci0g
ICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSB8fCAhZHgxMUJsZW5kU3RhdGUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEVSUigiVW5hYmxlIHRvIGNyZWF0ZSBhIElEM0QxMUJsZW5kU3RhdGUsIEhS
RVNVTFQ6IDB4JVguIiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAg
ICB9Ci0KLSAgICAgICAgbUJsZW5kU3RhdGVDYWNoZS5pbnNlcnQoc3RkOjptYWtlX3BhaXIoYmxl
bmRTdGF0ZSwgc3RkOjptYWtlX3BhaXIoZHgxMUJsZW5kU3RhdGUsIG1Db3VudGVyKyspKSk7Ci0K
LSAgICAgICAgcmV0dXJuIGR4MTFCbGVuZFN0YXRlOwotICAgIH0KLX0KLQotc3RkOjpzaXplX3Qg
UmVuZGVyU3RhdGVDYWNoZTo6aGFzaFJhc3Rlcml6ZXJTdGF0ZShjb25zdCBSYXN0ZXJpemVyU3Rh
dGVLZXkgJnJhc3RlclN0YXRlKQotewotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2Vl
ZCA9IDB4QUJDREVGOTg7Ci0KLSAgICBzdGQ6OnNpemVfdCBoYXNoID0gMDsKLSAgICBNdXJtdXJI
YXNoM194ODZfMzIoJnJhc3RlclN0YXRlLCBzaXplb2YoUmFzdGVyaXplclN0YXRlS2V5KSwgc2Vl
ZCwgJmhhc2gpOwotICAgIHJldHVybiBoYXNoOwotfQotCi1ib29sIFJlbmRlclN0YXRlQ2FjaGU6
OmNvbXBhcmVSYXN0ZXJpemVyU3RhdGVzKGNvbnN0IFJhc3Rlcml6ZXJTdGF0ZUtleSAmYSwgY29u
c3QgUmFzdGVyaXplclN0YXRlS2V5ICZiKQotewotICAgIHJldHVybiBtZW1jbXAoJmEsICZiLCBz
aXplb2YoUmFzdGVyaXplclN0YXRlS2V5KSkgPT0gMDsKLX0KLQotSUQzRDExUmFzdGVyaXplclN0
YXRlICpSZW5kZXJTdGF0ZUNhY2hlOjpnZXRSYXN0ZXJpemVyU3RhdGUoY29uc3QgZ2w6OlJhc3Rl
cml6ZXJTdGF0ZSAmcmFzdGVyU3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNjaXNzb3JFbmFibGVkLCB1bnNpZ25l
ZCBpbnQgZGVwdGhTaXplKQotewotICAgIGlmICghbURldmljZSkKLSAgICB7Ci0gICAgICAgIEVS
UigiUmVuZGVyU3RhdGVDYWNoZSBpcyBub3QgaW5pdGlhbGl6ZWQuIik7Ci0gICAgICAgIHJldHVy
biBOVUxMOwotICAgIH0KLQotICAgIFJhc3Rlcml6ZXJTdGF0ZUtleSBrZXk7Ci0gICAga2V5LnJh
c3Rlcml6ZXJTdGF0ZSA9IHJhc3RlclN0YXRlOwotICAgIGtleS5zY2lzc29yRW5hYmxlZCA9IHNj
aXNzb3JFbmFibGVkOwotICAgIGtleS5kZXB0aFNpemUgPSBkZXB0aFNpemU7Ci0KLSAgICBSYXN0
ZXJpemVyU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtUmFzdGVyaXplclN0YXRlQ2FjaGUuZmluZChr
ZXkpOwotICAgIGlmIChpICE9IG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5lbmQoKSkKLSAgICB7Ci0g
ICAgICAgIFJhc3Rlcml6ZXJTdGF0ZUNvdW50ZXJQYWlyICZzdGF0ZSA9IGktPnNlY29uZDsKLSAg
ICAgICAgc3RhdGUuc2Vjb25kID0gbUNvdW50ZXIrKzsKLSAgICAgICAgcmV0dXJuIHN0YXRlLmZp
cnN0OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAobVJhc3Rlcml6ZXJTdGF0
ZUNhY2hlLnNpemUoKSA+PSBrTWF4UmFzdGVyaXplclN0YXRlcykKLSAgICAgICAgewotICAgICAg
ICAgICAgVFJBQ0UoIk92ZXJmbG93ZWQgdGhlIGxpbWl0IG9mICV1IHJhc3Rlcml6ZXIgc3RhdGVz
LCByZW1vdmluZyB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCAiCi0gICAgICAgICAgICAgICAgICAi
dG8gbWFrZSByb29tLiIsIGtNYXhSYXN0ZXJpemVyU3RhdGVzKTsKLQotICAgICAgICAgICAgUmFz
dGVyaXplclN0YXRlTWFwOjppdGVyYXRvciBsZWFzdFJlY2VudGx5VXNlZCA9IG1SYXN0ZXJpemVy
U3RhdGVDYWNoZS5iZWdpbigpOwotICAgICAgICAgICAgZm9yIChSYXN0ZXJpemVyU3RhdGVNYXA6
Oml0ZXJhdG9yIGkgPSBtUmFzdGVyaXplclN0YXRlQ2FjaGUuYmVnaW4oKTsgaSAhPSBtUmFzdGVy
aXplclN0YXRlQ2FjaGUuZW5kKCk7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBpZiAoaS0+c2Vjb25kLnNlY29uZCA8IGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuc2Vjb25k
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVz
ZWQgPSBpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxl
YXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1S
YXN0ZXJpemVyU3RhdGVDYWNoZS5lcmFzZShsZWFzdFJlY2VudGx5VXNlZCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBEM0QxMV9DVUxMX01PREUgY3VsbE1vZGUgPSBnbF9kM2QxMTo6Q29udmVydEN1
bGxNb2RlKHJhc3RlclN0YXRlLmN1bGxGYWNlLCByYXN0ZXJTdGF0ZS5jdWxsTW9kZSk7Ci0KLSAg
ICAgICAgLy8gRGlzYWJsZSBjdWxsaW5nIGlmIGRyYXdpbmcgcG9pbnRzCi0gICAgICAgIGlmIChy
YXN0ZXJTdGF0ZS5wb2ludERyYXdNb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjdWxsTW9k
ZSA9IEQzRDExX0NVTExfTk9ORTsKLSAgICAgICAgfQotCi0gICAgICAgIEQzRDExX1JBU1RFUkla
RVJfREVTQyByYXN0ZXJEZXNjOwotICAgICAgICByYXN0ZXJEZXNjLkZpbGxNb2RlID0gRDNEMTFf
RklMTF9TT0xJRDsKLSAgICAgICAgcmFzdGVyRGVzYy5DdWxsTW9kZSA9IGN1bGxNb2RlOwotICAg
ICAgICByYXN0ZXJEZXNjLkZyb250Q291bnRlckNsb2Nrd2lzZSA9IChyYXN0ZXJTdGF0ZS5mcm9u
dEZhY2UgPT0gR0xfQ0NXKSA/IEZBTFNFOiBUUlVFOwotICAgICAgICByYXN0ZXJEZXNjLkRlcHRo
QmlhcyA9IGxkZXhwKHJhc3RlclN0YXRlLnBvbHlnb25PZmZzZXRVbml0cywgLXN0YXRpY19jYXN0
PGludD4oZGVwdGhTaXplKSk7Ci0gICAgICAgIHJhc3RlckRlc2MuRGVwdGhCaWFzQ2xhbXAgPSAw
LjBmOyAvLyBNU0ROIGRvY3VtZW50YXRpb24gb2YgRGVwdGhCaWFzQ2xhbXAgaW1wbGllcyBhIHZh
bHVlIG9mIHplcm8gd2lsbCBwcmVmb3JtIG5vIGNsYW1waW5nLCBtdXN0IGJlIHRlc3RlZCB0aG91
Z2guCi0gICAgICAgIHJhc3RlckRlc2MuU2xvcGVTY2FsZWREZXB0aEJpYXMgPSByYXN0ZXJTdGF0
ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yOwotICAgICAgICByYXN0ZXJEZXNjLkRlcHRoQ2xpcEVuYWJs
ZSA9IFRSVUU7Ci0gICAgICAgIHJhc3RlckRlc2MuU2Npc3NvckVuYWJsZSA9IHNjaXNzb3JFbmFi
bGVkID8gVFJVRSA6IEZBTFNFOwotICAgICAgICByYXN0ZXJEZXNjLk11bHRpc2FtcGxlRW5hYmxl
ID0gcmFzdGVyU3RhdGUubXVsdGlTYW1wbGU7Ci0gICAgICAgIHJhc3RlckRlc2MuQW50aWFsaWFz
ZWRMaW5lRW5hYmxlID0gRkFMU0U7Ci0KLSAgICAgICAgSUQzRDExUmFzdGVyaXplclN0YXRlICpk
eDExUmFzdGVyaXplclN0YXRlID0gTlVMTDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2
aWNlLT5DcmVhdGVSYXN0ZXJpemVyU3RhdGUoJnJhc3RlckRlc2MsICZkeDExUmFzdGVyaXplclN0
YXRlKTsKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpIHx8ICFkeDExUmFzdGVyaXplclN0YXRl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIlVuYWJsZSB0byBjcmVhdGUgYSBJRDNEMTFS
YXN0ZXJpemVyU3RhdGUsIEhSRVNVTFQ6IDB4JVguIiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJl
dHVybiBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgbVJhc3Rlcml6ZXJTdGF0ZUNhY2hlLmlu
c2VydChzdGQ6Om1ha2VfcGFpcihrZXksIHN0ZDo6bWFrZV9wYWlyKGR4MTFSYXN0ZXJpemVyU3Rh
dGUsIG1Db3VudGVyKyspKSk7Ci0KLSAgICAgICAgcmV0dXJuIGR4MTFSYXN0ZXJpemVyU3RhdGU7
Ci0gICAgfQotfQotCi1zdGQ6OnNpemVfdCBSZW5kZXJTdGF0ZUNhY2hlOjpoYXNoRGVwdGhTdGVu
Y2lsU3RhdGUoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZkc1N0YXRlKQotewotICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2VlZCA9IDB4QUJDREVGOTg7Ci0KLSAgICBzdGQ6OnNp
emVfdCBoYXNoID0gMDsKLSAgICBNdXJtdXJIYXNoM194ODZfMzIoJmRzU3RhdGUsIHNpemVvZihn
bDo6RGVwdGhTdGVuY2lsU3RhdGUpLCBzZWVkLCAmaGFzaCk7Ci0gICAgcmV0dXJuIGhhc2g7Ci19
Ci0KLWJvb2wgUmVuZGVyU3RhdGVDYWNoZTo6Y29tcGFyZURlcHRoU3RlbmNpbFN0YXRlcyhjb25z
dCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmEsIGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAm
YikKLXsKLSAgICByZXR1cm4gbWVtY21wKCZhLCAmYiwgc2l6ZW9mKGdsOjpEZXB0aFN0ZW5jaWxT
dGF0ZSkpID09IDA7Ci19Ci0KLUlEM0QxMURlcHRoU3RlbmNpbFN0YXRlICpSZW5kZXJTdGF0ZUNh
Y2hlOjpnZXREZXB0aFN0ZW5jaWxTdGF0ZShjb25zdCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmRz
U3RhdGUpCi17Ci0gICAgaWYgKCFtRGV2aWNlKQotICAgIHsKLSAgICAgICAgRVJSKCJSZW5kZXJT
dGF0ZUNhY2hlIGlzIG5vdCBpbml0aWFsaXplZC4iKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0g
ICAgfQotCi0gICAgRGVwdGhTdGVuY2lsU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtRGVwdGhTdGVu
Y2lsU3RhdGVDYWNoZS5maW5kKGRzU3RhdGUpOwotICAgIGlmIChpICE9IG1EZXB0aFN0ZW5jaWxT
dGF0ZUNhY2hlLmVuZCgpKQotICAgIHsKLSAgICAgICAgRGVwdGhTdGVuY2lsU3RhdGVDb3VudGVy
UGFpciAmc3RhdGUgPSBpLT5zZWNvbmQ7Ci0gICAgICAgIHN0YXRlLnNlY29uZCA9IG1Db3VudGVy
Kys7Ci0gICAgICAgIHJldHVybiBzdGF0ZS5maXJzdDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsK
LSAgICAgICAgaWYgKG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLnNpemUoKSA+PSBrTWF4RGVwdGhT
dGVuY2lsU3RhdGVzKQotICAgICAgICB7Ci0gICAgICAgICAgICBUUkFDRSgiT3ZlcmZsb3dlZCB0
aGUgbGltaXQgb2YgJXUgZGVwdGggc3RlbmNpbCBzdGF0ZXMsIHJlbW92aW5nIHRoZSBsZWFzdCBy
ZWNlbnRseSB1c2VkICIKLSAgICAgICAgICAgICAgICAgICJ0byBtYWtlIHJvb20uIiwga01heERl
cHRoU3RlbmNpbFN0YXRlcyk7Ci0KLSAgICAgICAgICAgIERlcHRoU3RlbmNpbFN0YXRlTWFwOjpp
dGVyYXRvciBsZWFzdFJlY2VudGx5VXNlZCA9IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmJlZ2lu
KCk7Ci0gICAgICAgICAgICBmb3IgKERlcHRoU3RlbmNpbFN0YXRlTWFwOjppdGVyYXRvciBpID0g
bURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuYmVnaW4oKTsgaSAhPSBtRGVwdGhTdGVuY2lsU3RhdGVD
YWNoZS5lbmQoKTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChpLT5z
ZWNvbmQuc2Vjb25kIDwgbGVhc3RSZWNlbnRseVVzZWQtPnNlY29uZC5zZWNvbmQpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZCA9IGk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGVhc3RSZWNlbnRs
eVVzZWQtPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOwotICAgICAgICAgICAgbURlcHRoU3RlbmNp
bFN0YXRlQ2FjaGUuZXJhc2UobGVhc3RSZWNlbnRseVVzZWQpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgRDNEMTFfREVQVEhfU1RFTkNJTF9ERVNDIGRzRGVzYyA9IHsgMCB9OwotICAgICAgICBkc0Rl
c2MuRGVwdGhFbmFibGUgPSBkc1N0YXRlLmRlcHRoVGVzdCA/IFRSVUUgOiBGQUxTRTsKLSAgICAg
ICAgZHNEZXNjLkRlcHRoV3JpdGVNYXNrID0gZ2xfZDNkMTE6OkNvbnZlcnREZXB0aE1hc2soZHNT
dGF0ZS5kZXB0aE1hc2spOwotICAgICAgICBkc0Rlc2MuRGVwdGhGdW5jID0gZ2xfZDNkMTE6OkNv
bnZlcnRDb21wYXJpc29uKGRzU3RhdGUuZGVwdGhGdW5jKTsKLSAgICAgICAgZHNEZXNjLlN0ZW5j
aWxFbmFibGUgPSBkc1N0YXRlLnN0ZW5jaWxUZXN0ID8gVFJVRSA6IEZBTFNFOwotICAgICAgICBk
c0Rlc2MuU3RlbmNpbFJlYWRNYXNrID0gZ2xfZDNkMTE6OkNvbnZlcnRTdGVuY2lsTWFzayhkc1N0
YXRlLnN0ZW5jaWxNYXNrKTsKLSAgICAgICAgZHNEZXNjLlN0ZW5jaWxXcml0ZU1hc2sgPSBnbF9k
M2QxMTo6Q29udmVydFN0ZW5jaWxNYXNrKGRzU3RhdGUuc3RlbmNpbFdyaXRlbWFzayk7Ci0gICAg
ICAgIGRzRGVzYy5Gcm9udEZhY2UuU3RlbmNpbEZhaWxPcCA9IGdsX2QzZDExOjpDb252ZXJ0U3Rl
bmNpbE9wKGRzU3RhdGUuc3RlbmNpbEZhaWwpOwotICAgICAgICBkc0Rlc2MuRnJvbnRGYWNlLlN0
ZW5jaWxEZXB0aEZhaWxPcCA9IGdsX2QzZDExOjpDb252ZXJ0U3RlbmNpbE9wKGRzU3RhdGUuc3Rl
bmNpbFBhc3NEZXB0aEZhaWwpOwotICAgICAgICBkc0Rlc2MuRnJvbnRGYWNlLlN0ZW5jaWxQYXNz
T3AgPSBnbF9kM2QxMTo6Q29udmVydFN0ZW5jaWxPcChkc1N0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQ
YXNzKTsKLSAgICAgICAgZHNEZXNjLkZyb250RmFjZS5TdGVuY2lsRnVuYyA9IGdsX2QzZDExOjpD
b252ZXJ0Q29tcGFyaXNvbihkc1N0YXRlLnN0ZW5jaWxGdW5jKTsKLSAgICAgICAgZHNEZXNjLkJh
Y2tGYWNlLlN0ZW5jaWxGYWlsT3AgPSBnbF9kM2QxMTo6Q29udmVydFN0ZW5jaWxPcChkc1N0YXRl
LnN0ZW5jaWxCYWNrRmFpbCk7Ci0gICAgICAgIGRzRGVzYy5CYWNrRmFjZS5TdGVuY2lsRGVwdGhG
YWlsT3AgPSBnbF9kM2QxMTo6Q29udmVydFN0ZW5jaWxPcChkc1N0YXRlLnN0ZW5jaWxCYWNrUGFz
c0RlcHRoRmFpbCk7Ci0gICAgICAgIGRzRGVzYy5CYWNrRmFjZS5TdGVuY2lsUGFzc09wID0gZ2xf
ZDNkMTE6OkNvbnZlcnRTdGVuY2lsT3AoZHNTdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3Mp
OwotICAgICAgICBkc0Rlc2MuQmFja0ZhY2UuU3RlbmNpbEZ1bmMgPSBnbF9kM2QxMTo6Q29udmVy
dENvbXBhcmlzb24oZHNTdGF0ZS5zdGVuY2lsQmFja0Z1bmMpOwotCi0gICAgICAgIElEM0QxMURl
cHRoU3RlbmNpbFN0YXRlICpkeDExRGVwdGhTdGVuY2lsU3RhdGUgPSBOVUxMOwotICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFN0YXRlKCZkc0Rlc2Ms
ICZkeDExRGVwdGhTdGVuY2lsU3RhdGUpOwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkgfHwg
IWR4MTFEZXB0aFN0ZW5jaWxTdGF0ZSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJVbmFi
bGUgdG8gY3JlYXRlIGEgSUQzRDExRGVwdGhTdGVuY2lsU3RhdGUsIEhSRVNVTFQ6IDB4JVguIiwg
cmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAg
bURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGRzU3RhdGUsIHN0
ZDo6bWFrZV9wYWlyKGR4MTFEZXB0aFN0ZW5jaWxTdGF0ZSwgbUNvdW50ZXIrKykpKTsKLQotICAg
ICAgICByZXR1cm4gZHgxMURlcHRoU3RlbmNpbFN0YXRlOwotICAgIH0KLX0KLQotc3RkOjpzaXpl
X3QgUmVuZGVyU3RhdGVDYWNoZTo6aGFzaFNhbXBsZXJTdGF0ZShjb25zdCBnbDo6U2FtcGxlclN0
YXRlICZzYW1wbGVyU3RhdGUpCi17Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZWVk
ID0gMHhBQkNERUY5ODsKLQotICAgIHN0ZDo6c2l6ZV90IGhhc2ggPSAwOwotICAgIE11cm11ckhh
c2gzX3g4Nl8zMigmc2FtcGxlclN0YXRlLCBzaXplb2YoZ2w6OlNhbXBsZXJTdGF0ZSksIHNlZWQs
ICZoYXNoKTsKLSAgICByZXR1cm4gaGFzaDsKLX0KLQotYm9vbCBSZW5kZXJTdGF0ZUNhY2hlOjpj
b21wYXJlU2FtcGxlclN0YXRlcyhjb25zdCBnbDo6U2FtcGxlclN0YXRlICZhLCBjb25zdCBnbDo6
U2FtcGxlclN0YXRlICZiKQotewotICAgIHJldHVybiBtZW1jbXAoJmEsICZiLCBzaXplb2YoZ2w6
OlNhbXBsZXJTdGF0ZSkpID09IDA7Ci19Ci0KLUlEM0QxMVNhbXBsZXJTdGF0ZSAqUmVuZGVyU3Rh
dGVDYWNoZTo6Z2V0U2FtcGxlclN0YXRlKGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXJT
dGF0ZSkKLXsKLSAgICBpZiAoIW1EZXZpY2UpCi0gICAgewotICAgICAgICBFUlIoIlJlbmRlclN0
YXRlQ2FjaGUgaXMgbm90IGluaXRpYWxpemVkLiIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAg
ICB9Ci0KLSAgICBTYW1wbGVyU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtU2FtcGxlclN0YXRlQ2Fj
aGUuZmluZChzYW1wbGVyU3RhdGUpOwotICAgIGlmIChpICE9IG1TYW1wbGVyU3RhdGVDYWNoZS5l
bmQoKSkKLSAgICB7Ci0gICAgICAgIFNhbXBsZXJTdGF0ZUNvdW50ZXJQYWlyICZzdGF0ZSA9IGkt
PnNlY29uZDsKLSAgICAgICAgc3RhdGUuc2Vjb25kID0gbUNvdW50ZXIrKzsKLSAgICAgICAgcmV0
dXJuIHN0YXRlLmZpcnN0OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAobVNh
bXBsZXJTdGF0ZUNhY2hlLnNpemUoKSA+PSBrTWF4U2FtcGxlclN0YXRlcykKLSAgICAgICAgewot
ICAgICAgICAgICAgVFJBQ0UoIk92ZXJmbG93ZWQgdGhlIGxpbWl0IG9mICV1IHNhbXBsZXIgc3Rh
dGVzLCByZW1vdmluZyB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCAiCi0gICAgICAgICAgICAgICAg
ICAidG8gbWFrZSByb29tLiIsIGtNYXhTYW1wbGVyU3RhdGVzKTsKLQotICAgICAgICAgICAgU2Ft
cGxlclN0YXRlTWFwOjppdGVyYXRvciBsZWFzdFJlY2VudGx5VXNlZCA9IG1TYW1wbGVyU3RhdGVD
YWNoZS5iZWdpbigpOwotICAgICAgICAgICAgZm9yIChTYW1wbGVyU3RhdGVNYXA6Oml0ZXJhdG9y
IGkgPSBtU2FtcGxlclN0YXRlQ2FjaGUuYmVnaW4oKTsgaSAhPSBtU2FtcGxlclN0YXRlQ2FjaGUu
ZW5kKCk7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoaS0+c2Vjb25k
LnNlY29uZCA8IGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuc2Vjb25kKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQgPSBpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2Vk
LT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1TYW1wbGVyU3RhdGVDYWNo
ZS5lcmFzZShsZWFzdFJlY2VudGx5VXNlZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBEM0QxMV9T
QU1QTEVSX0RFU0Mgc2FtcGxlckRlc2M7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkZpbHRlciA9IGds
X2QzZDExOjpDb252ZXJ0RmlsdGVyKHNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIsIHNhbXBsZXJTdGF0
ZS5tYWdGaWx0ZXIsIHNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5KTsKLSAgICAgICAgc2FtcGxl
ckRlc2MuQWRkcmVzc1UgPSBnbF9kM2QxMTo6Q29udmVydFRleHR1cmVXcmFwKHNhbXBsZXJTdGF0
ZS53cmFwUyk7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkFkZHJlc3NWID0gZ2xfZDNkMTE6OkNvbnZl
cnRUZXh0dXJlV3JhcChzYW1wbGVyU3RhdGUud3JhcFQpOwotICAgICAgICBzYW1wbGVyRGVzYy5B
ZGRyZXNzVyA9IEQzRDExX1RFWFRVUkVfQUREUkVTU19DTEFNUDsKLSAgICAgICAgc2FtcGxlckRl
c2MuTWlwTE9EQmlhcyA9IHN0YXRpY19jYXN0PGZsb2F0PihzYW1wbGVyU3RhdGUubG9kT2Zmc2V0
KTsKLSAgICAgICAgc2FtcGxlckRlc2MuTWF4QW5pc290cm9weSA9IHNhbXBsZXJTdGF0ZS5tYXhB
bmlzb3Ryb3B5OwotICAgICAgICBzYW1wbGVyRGVzYy5Db21wYXJpc29uRnVuYyA9IEQzRDExX0NP
TVBBUklTT05fTkVWRVI7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzBdID0gMC4w
ZjsKLSAgICAgICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbMV0gPSAwLjBmOwotICAgICAgICBz
YW1wbGVyRGVzYy5Cb3JkZXJDb2xvclsyXSA9IDAuMGY7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkJv
cmRlckNvbG9yWzNdID0gMC4wZjsKLSAgICAgICAgc2FtcGxlckRlc2MuTWluTE9EID0gZ2xfZDNk
MTE6OkNvbnZlcnRNaW5MT0Qoc2FtcGxlclN0YXRlLm1pbkZpbHRlciwgc2FtcGxlclN0YXRlLmxv
ZE9mZnNldCk7Ci0gICAgICAgIHNhbXBsZXJEZXNjLk1heExPRCA9IGdsX2QzZDExOjpDb252ZXJ0
TWF4TE9EKHNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIsIHNhbXBsZXJTdGF0ZS5sb2RPZmZzZXQpOwot
Ci0gICAgICAgIElEM0QxMVNhbXBsZXJTdGF0ZSAqZHgxMVNhbXBsZXJTdGF0ZSA9IE5VTEw7Ci0g
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlU2FtcGxlclN0YXRlKCZzYW1w
bGVyRGVzYywgJmR4MTFTYW1wbGVyU3RhdGUpOwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkg
fHwgIWR4MTFTYW1wbGVyU3RhdGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiVW5hYmxl
IHRvIGNyZWF0ZSBhIElEM0QxMURlcHRoU3RlbmNpbFN0YXRlLCBIUkVTVUxUOiAweCVYLiIsIHJl
c3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIG1T
YW1wbGVyU3RhdGVDYWNoZS5pbnNlcnQoc3RkOjptYWtlX3BhaXIoc2FtcGxlclN0YXRlLCBzdGQ6
Om1ha2VfcGFpcihkeDExU2FtcGxlclN0YXRlLCBtQ291bnRlcisrKSkpOwotCi0gICAgICAgIHJl
dHVybiBkeDExU2FtcGxlclN0YXRlOwotICAgIH0KLX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvUmVuZGVyU3RhdGVDYWNoZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJTdGF0ZUNhY2hlLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGY4YjUxMTFkZTQ4ZjMyODgzMTRiZDUyNGEwN2U0MzcwNWQ5YmMzMjku
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJTdGF0ZUNhY2hlLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAx
Mi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8g
UmVuZGVyU3RhdGVDYWNoZS5oOiBEZWZpbmVzIHJ4OjpSZW5kZXJTdGF0ZUNhY2hlLCBhIGNhY2hl
IG9mIERpcmVjdDNEIHJlbmRlcgotLy8gc3RhdGUgb2JqZWN0cy4KLQotI2lmbmRlZiBMSUJHTEVT
VjJfUkVOREVSRVJfUkVOREVSU1RBVEVDQUNIRV9IXwotI2RlZmluZSBMSUJHTEVTVjJfUkVOREVS
RVJfUkVOREVSU1RBVEVDQUNIRV9IXwotCi0jaW5jbHVkZSAibGliR0xFU3YyL2FuZ2xldHlwZXMu
aCIKLSNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgotCi1uYW1lc3BhY2UgcngKLXsKLQot
Y2xhc3MgUmVuZGVyU3RhdGVDYWNoZQotewotICBwdWJsaWM6Ci0gICAgUmVuZGVyU3RhdGVDYWNo
ZSgpOwotICAgIHZpcnR1YWwgflJlbmRlclN0YXRlQ2FjaGUoKTsKLQotICAgIHZvaWQgaW5pdGlh
bGl6ZShJRDNEMTFEZXZpY2UgKmRldmljZSk7Ci0gICAgdm9pZCBjbGVhcigpOwotCi0gICAgLy8g
SW5jcmVtZW50cyByZWZjb3VudCBvbiB0aGUgcmV0dXJuZWQgYmxlbmQgc3RhdGUsIFJlbGVhc2Uo
KSBtdXN0IGJlIGNhbGxlZC4KLSAgICBJRDNEMTFCbGVuZFN0YXRlICpnZXRCbGVuZFN0YXRlKGNv
bnN0IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRlKTsKLSAgICBJRDNEMTFSYXN0ZXJpemVyU3Rh
dGUgKmdldFJhc3Rlcml6ZXJTdGF0ZShjb25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZyYXN0ZXJT
dGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IHNjaXNzb3JFbmFibGVkLCB1bnNpZ25lZCBpbnQgZGVwdGhTaXplKTsKLSAgICBJRDNEMTFEZXB0
aFN0ZW5jaWxTdGF0ZSAqZ2V0RGVwdGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6OkRlcHRoU3RlbmNp
bFN0YXRlICZkc1N0YXRlKTsKLSAgICBJRDNEMTFTYW1wbGVyU3RhdGUgKmdldFNhbXBsZXJTdGF0
ZShjb25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpOwotCi0gIHByaXZhdGU6Ci0g
ICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlclN0YXRlQ2FjaGUpOwotCi0gICAgdW5z
aWduZWQgbG9uZyBsb25nIG1Db3VudGVyOwotCi0gICAgLy8gQmxlbmQgc3RhdGUgY2FjaGUKLSAg
ICBzdGF0aWMgc3RkOjpzaXplX3QgaGFzaEJsZW5kU3RhdGUoY29uc3QgZ2w6OkJsZW5kU3RhdGUg
JmJsZW5kU3RhdGUpOwotICAgIHN0YXRpYyBib29sIGNvbXBhcmVCbGVuZFN0YXRlcyhjb25zdCBn
bDo6QmxlbmRTdGF0ZSAmYSwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmIpOwotICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBpbnQga01heEJsZW5kU3RhdGVzOwotCi0gICAgdHlwZWRlZiBzdGQ6OnNp
emVfdCAoKkJsZW5kU3RhdGVIYXNoRnVuY3Rpb24pKGNvbnN0IGdsOjpCbGVuZFN0YXRlICYpOwot
ICAgIHR5cGVkZWYgYm9vbCAoKkJsZW5kU3RhdGVFcXVhbGl0eUZ1bmN0aW9uKShjb25zdCBnbDo6
QmxlbmRTdGF0ZSAmLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmKTsKLSAgICB0eXBlZGVmIHN0ZDo6
cGFpcjxJRDNEMTFCbGVuZFN0YXRlKiwgdW5zaWduZWQgbG9uZyBsb25nPiBCbGVuZFN0YXRlQ291
bnRlclBhaXI7Ci0gICAgdHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8Z2w6OkJsZW5kU3RhdGUs
IEJsZW5kU3RhdGVDb3VudGVyUGFpciwgQmxlbmRTdGF0ZUhhc2hGdW5jdGlvbiwgQmxlbmRTdGF0
ZUVxdWFsaXR5RnVuY3Rpb24+IEJsZW5kU3RhdGVNYXA7Ci0gICAgQmxlbmRTdGF0ZU1hcCBtQmxl
bmRTdGF0ZUNhY2hlOwotCi0gICAgLy8gUmFzdGVyaXplciBzdGF0ZSBjYWNoZQotICAgIHN0cnVj
dCBSYXN0ZXJpemVyU3RhdGVLZXkKLSAgICB7Ci0gICAgICAgIGdsOjpSYXN0ZXJpemVyU3RhdGUg
cmFzdGVyaXplclN0YXRlOwotICAgICAgICBib29sIHNjaXNzb3JFbmFibGVkOwotICAgICAgICB1
bnNpZ25lZCBpbnQgZGVwdGhTaXplOwotICAgIH07Ci0gICAgc3RhdGljIHN0ZDo6c2l6ZV90IGhh
c2hSYXN0ZXJpemVyU3RhdGUoY29uc3QgUmFzdGVyaXplclN0YXRlS2V5ICZyYXN0ZXJTdGF0ZSk7
Ci0gICAgc3RhdGljIGJvb2wgY29tcGFyZVJhc3Rlcml6ZXJTdGF0ZXMoY29uc3QgUmFzdGVyaXpl
clN0YXRlS2V5ICZhLCBjb25zdCBSYXN0ZXJpemVyU3RhdGVLZXkgJmIpOwotICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBpbnQga01heFJhc3Rlcml6ZXJTdGF0ZXM7Ci0KLSAgICB0eXBlZGVmIHN0
ZDo6c2l6ZV90ICgqUmFzdGVyaXplclN0YXRlSGFzaEZ1bmN0aW9uKShjb25zdCBSYXN0ZXJpemVy
U3RhdGVLZXkgJik7Ci0gICAgdHlwZWRlZiBib29sICgqUmFzdGVyaXplclN0YXRlRXF1YWxpdHlG
dW5jdGlvbikoY29uc3QgUmFzdGVyaXplclN0YXRlS2V5ICYsIGNvbnN0IFJhc3Rlcml6ZXJTdGF0
ZUtleSAmKTsKLSAgICB0eXBlZGVmIHN0ZDo6cGFpcjxJRDNEMTFSYXN0ZXJpemVyU3RhdGUqLCB1
bnNpZ25lZCBsb25nIGxvbmc+IFJhc3Rlcml6ZXJTdGF0ZUNvdW50ZXJQYWlyOwotICAgIHR5cGVk
ZWYgc3RkOjp1bm9yZGVyZWRfbWFwPFJhc3Rlcml6ZXJTdGF0ZUtleSwgUmFzdGVyaXplclN0YXRl
Q291bnRlclBhaXIsIFJhc3Rlcml6ZXJTdGF0ZUhhc2hGdW5jdGlvbiwgUmFzdGVyaXplclN0YXRl
RXF1YWxpdHlGdW5jdGlvbj4gUmFzdGVyaXplclN0YXRlTWFwOwotICAgIFJhc3Rlcml6ZXJTdGF0
ZU1hcCBtUmFzdGVyaXplclN0YXRlQ2FjaGU7Ci0KLSAgICAvLyBEZXB0aCBzdGVuY2lsIHN0YXRl
IGNhY2hlCi0gICAgc3RhdGljIHN0ZDo6c2l6ZV90IGhhc2hEZXB0aFN0ZW5jaWxTdGF0ZShjb25z
dCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmRzU3RhdGUpOwotICAgIHN0YXRpYyBib29sIGNvbXBh
cmVEZXB0aFN0ZW5jaWxTdGF0ZXMoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZhLCBjb25z
dCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmIpOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBp
bnQga01heERlcHRoU3RlbmNpbFN0YXRlczsKLQotICAgIHR5cGVkZWYgc3RkOjpzaXplX3QgKCpE
ZXB0aFN0ZW5jaWxTdGF0ZUhhc2hGdW5jdGlvbikoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRl
ICYpOwotICAgIHR5cGVkZWYgYm9vbCAoKkRlcHRoU3RlbmNpbFN0YXRlRXF1YWxpdHlGdW5jdGlv
bikoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICYsIGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxT
dGF0ZSAmKTsKLSAgICB0eXBlZGVmIHN0ZDo6cGFpcjxJRDNEMTFEZXB0aFN0ZW5jaWxTdGF0ZSos
IHVuc2lnbmVkIGxvbmcgbG9uZz4gRGVwdGhTdGVuY2lsU3RhdGVDb3VudGVyUGFpcjsKLSAgICB0
eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxnbDo6RGVwdGhTdGVuY2lsU3RhdGUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRGVwdGhTdGVuY2lsU3RhdGVDb3VudGVyUGFpciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXB0aFN0ZW5jaWxTdGF0ZUhhc2hGdW5jdGlv
biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXB0aFN0ZW5jaWxTdGF0ZUVxdWFs
aXR5RnVuY3Rpb24+IERlcHRoU3RlbmNpbFN0YXRlTWFwOwotICAgIERlcHRoU3RlbmNpbFN0YXRl
TWFwIG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlOwotCi0gICAgLy8gU2FtcGxlIHN0YXRlIGNhY2hl
Ci0gICAgc3RhdGljIHN0ZDo6c2l6ZV90IGhhc2hTYW1wbGVyU3RhdGUoY29uc3QgZ2w6OlNhbXBs
ZXJTdGF0ZSAmc2FtcGxlclN0YXRlKTsKLSAgICBzdGF0aWMgYm9vbCBjb21wYXJlU2FtcGxlclN0
YXRlcyhjb25zdCBnbDo6U2FtcGxlclN0YXRlICZhLCBjb25zdCBnbDo6U2FtcGxlclN0YXRlICZi
KTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGtNYXhTYW1wbGVyU3RhdGVzOwotCi0g
ICAgdHlwZWRlZiBzdGQ6OnNpemVfdCAoKlNhbXBsZXJTdGF0ZUhhc2hGdW5jdGlvbikoY29uc3Qg
Z2w6OlNhbXBsZXJTdGF0ZSAmKTsKLSAgICB0eXBlZGVmIGJvb2wgKCpTYW1wbGVyU3RhdGVFcXVh
bGl0eUZ1bmN0aW9uKShjb25zdCBnbDo6U2FtcGxlclN0YXRlICYsIGNvbnN0IGdsOjpTYW1wbGVy
U3RhdGUgJik7Ci0gICAgdHlwZWRlZiBzdGQ6OnBhaXI8SUQzRDExU2FtcGxlclN0YXRlKiwgdW5z
aWduZWQgbG9uZyBsb25nPiBTYW1wbGVyU3RhdGVDb3VudGVyUGFpcjsKLSAgICB0eXBlZGVmIHN0
ZDo6dW5vcmRlcmVkX21hcDxnbDo6U2FtcGxlclN0YXRlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNhbXBsZXJTdGF0ZUNvdW50ZXJQYWlyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNhbXBsZXJTdGF0ZUhhc2hGdW5jdGlvbiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTYW1wbGVyU3RhdGVFcXVhbGl0eUZ1bmN0aW9uPiBTYW1wbGVyU3RhdGVNYXA7
Ci0gICAgU2FtcGxlclN0YXRlTWFwIG1TYW1wbGVyU3RhdGVDYWNoZTsKLQotICAgIElEM0QxMURl
dmljZSAqbURldmljZTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9S
RU5ERVJTVEFURUNBQ0hFX0hfClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJU
YXJnZXQxMS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL1JlbmRlclRhcmdldDExLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY2
N2NjNmZhNzgxYzc4MDQzNDdkNjAyN2QxMzk4NWMzOGMwZmRjZi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldDExLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDM1NSArMCwwIEBACi0jaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0v
LyBSZW5kZXJUYXJnZXQxMS5jcHA6IEltcGxlbWVudHMgYSBEWDExLXNwZWNpZmljIHdyYXBwZXIg
Zm9yIElEM0QxMVZpZXcgcG9pbnRlcnMKLS8vIHJldGFpbmVkIGJ5IFJlbmRlcmJ1ZmZlcnMuCi0K
LSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0MTEuaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIxMS5oIgotCi0jaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL3JlbmRlcmVyMTFfdXRpbHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5o
IgotCi1uYW1lc3BhY2UgcngKLXsKLQotc3RhdGljIHVuc2lnbmVkIGludCBnZXRSVFZTdWJyZXNv
dXJjZUluZGV4KElEM0QxMVRleHR1cmUyRCAqdGV4dHVyZSwgSUQzRDExUmVuZGVyVGFyZ2V0Vmll
dyAqdmlldykKLXsKLSAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOwot
ICAgIHZpZXctPkdldERlc2MoJnJ0dkRlc2MpOwotCi0gICAgRDNEMTFfVEVYVFVSRTJEX0RFU0Mg
dGV4RGVzYzsKLSAgICB0ZXh0dXJlLT5HZXREZXNjKCZ0ZXhEZXNjKTsKLQotICAgIHVuc2lnbmVk
IGludCBtaXBTbGljZSA9IDA7Ci0gICAgdW5zaWduZWQgaW50IGFycmF5U2xpY2UgPSAwOwotICAg
IHVuc2lnbmVkIGludCBtaXBMZXZlbHMgPSB0ZXhEZXNjLk1pcExldmVsczsKLQotICAgIHN3aXRj
aCAocnR2RGVzYy5WaWV3RGltZW5zaW9uKQotICAgIHsKLSAgICAgIGNhc2UgRDNEMTFfUlRWX0RJ
TUVOU0lPTl9URVhUVVJFMUQ6Ci0gICAgICAgIG1pcFNsaWNlID0gcnR2RGVzYy5UZXh0dXJlMUQu
TWlwU2xpY2U7Ci0gICAgICAgIGFycmF5U2xpY2UgPSAwOwotICAgICAgICBicmVhazsKLQotICAg
ICAgY2FzZSBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUxREFSUkFZOgotICAgICAgICBtaXBT
bGljZSA9IHJ0dkRlc2MuVGV4dHVyZTFEQXJyYXkuTWlwU2xpY2U7Ci0gICAgICAgIGFycmF5U2xp
Y2UgPSBydHZEZXNjLlRleHR1cmUxREFycmF5LkZpcnN0QXJyYXlTbGljZTsKLSAgICAgICAgYnJl
YWs7Ci0KLSAgICAgIGNhc2UgRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMkQ6Ci0gICAgICAg
IG1pcFNsaWNlID0gcnR2RGVzYy5UZXh0dXJlMkQuTWlwU2xpY2U7Ci0gICAgICAgIGFycmF5U2xp
Y2UgPSAwOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBEM0QxMV9SVFZfRElNRU5TSU9O
X1RFWFRVUkUyREFSUkFZOgotICAgICAgICBtaXBTbGljZSA9IHJ0dkRlc2MuVGV4dHVyZTJEQXJy
YXkuTWlwU2xpY2U7Ci0gICAgICAgIGFycmF5U2xpY2UgPSBydHZEZXNjLlRleHR1cmUyREFycmF5
LkZpcnN0QXJyYXlTbGljZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRDNEMTFfUlRW
X0RJTUVOU0lPTl9URVhUVVJFMkRNUzoKLSAgICAgICAgbWlwU2xpY2UgPSAwOwotICAgICAgICBh
cnJheVNsaWNlID0gMDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRDNEMTFfUlRWX0RJ
TUVOU0lPTl9URVhUVVJFMkRNU0FSUkFZOgotICAgICAgICBtaXBTbGljZSA9IDA7Ci0gICAgICAg
IGFycmF5U2xpY2UgPSBydHZEZXNjLlRleHR1cmUyRE1TQXJyYXkuRmlyc3RBcnJheVNsaWNlOwot
ICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUz
RDoKLSAgICAgICAgbWlwU2xpY2UgPSBydHZEZXNjLlRleHR1cmUzRC5NaXBTbGljZTsKLSAgICAg
ICAgYXJyYXlTbGljZSA9IDA7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEQzRDExX1JU
Vl9ESU1FTlNJT05fVU5LTk9XTjoKLSAgICAgIGNhc2UgRDNEMTFfUlRWX0RJTUVOU0lPTl9CVUZG
RVI6Ci0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQot
ICAgIHJldHVybiBEM0QxMUNhbGNTdWJyZXNvdXJjZShtaXBTbGljZSwgYXJyYXlTbGljZSwgbWlw
TGV2ZWxzKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBnZXREU1ZTdWJyZXNvdXJjZUluZGV4
KElEM0QxMVRleHR1cmUyRCAqdGV4dHVyZSwgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqdmlldykK
LXsKLSAgICBEM0QxMV9ERVBUSF9TVEVOQ0lMX1ZJRVdfREVTQyBkc3ZEZXNjOwotICAgIHZpZXct
PkdldERlc2MoJmRzdkRlc2MpOwotCi0gICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4RGVzYzsK
LSAgICB0ZXh0dXJlLT5HZXREZXNjKCZ0ZXhEZXNjKTsKLQotICAgIHVuc2lnbmVkIGludCBtaXBT
bGljZSA9IDA7Ci0gICAgdW5zaWduZWQgaW50IGFycmF5U2xpY2UgPSAwOwotICAgIHVuc2lnbmVk
IGludCBtaXBMZXZlbHMgPSB0ZXhEZXNjLk1pcExldmVsczsKLQotICAgIHN3aXRjaCAoZHN2RGVz
Yy5WaWV3RGltZW5zaW9uKQotICAgIHsKLSAgICAgIGNhc2UgRDNEMTFfRFNWX0RJTUVOU0lPTl9U
RVhUVVJFMUQ6Ci0gICAgICAgIG1pcFNsaWNlID0gZHN2RGVzYy5UZXh0dXJlMUQuTWlwU2xpY2U7
Ci0gICAgICAgIGFycmF5U2xpY2UgPSAwOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBE
M0QxMV9EU1ZfRElNRU5TSU9OX1RFWFRVUkUxREFSUkFZOgotICAgICAgICBtaXBTbGljZSA9IGRz
dkRlc2MuVGV4dHVyZTFEQXJyYXkuTWlwU2xpY2U7Ci0gICAgICAgIGFycmF5U2xpY2UgPSBkc3ZE
ZXNjLlRleHR1cmUxREFycmF5LkZpcnN0QXJyYXlTbGljZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgIGNhc2UgRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMkQ6Ci0gICAgICAgIG1pcFNsaWNl
ID0gZHN2RGVzYy5UZXh0dXJlMkQuTWlwU2xpY2U7Ci0gICAgICAgIGFycmF5U2xpY2UgPSAwOwot
ICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBEM0QxMV9EU1ZfRElNRU5TSU9OX1RFWFRVUkUy
REFSUkFZOgotICAgICAgICBtaXBTbGljZSA9IGRzdkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlwU2xp
Y2U7Ci0gICAgICAgIGFycmF5U2xpY2UgPSBkc3ZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJy
YXlTbGljZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRDNEMTFfRFNWX0RJTUVOU0lP
Tl9URVhUVVJFMkRNUzoKLSAgICAgICAgbWlwU2xpY2UgPSAwOwotICAgICAgICBhcnJheVNsaWNl
ID0gMDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRDNEMTFfRFNWX0RJTUVOU0lPTl9U
RVhUVVJFMkRNU0FSUkFZOgotICAgICAgICBtaXBTbGljZSA9IDA7Ci0gICAgICAgIGFycmF5U2xp
Y2UgPSBkc3ZEZXNjLlRleHR1cmUyRE1TQXJyYXkuRmlyc3RBcnJheVNsaWNlOwotICAgICAgICBi
cmVhazsKLQotICAgICAgY2FzZSBEM0QxMV9SVFZfRElNRU5TSU9OX1VOS05PV046Ci0gICAgICAg
IFVOSU1QTEVNRU5URUQoKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBE
M0QxMUNhbGNTdWJyZXNvdXJjZShtaXBTbGljZSwgYXJyYXlTbGljZSwgbWlwTGV2ZWxzKTsKLX0K
LQotUmVuZGVyVGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgSUQz
RDExUmVuZGVyVGFyZ2V0VmlldyAqcnR2LCBJRDNEMTFUZXh0dXJlMkQgKnRleCwgSUQzRDExU2hh
ZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewot
ICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKHJlbmRlcmVyKTsKLSAg
ICBtVGV4dHVyZSA9IHRleDsKLSAgICBtUmVuZGVyVGFyZ2V0ID0gcnR2OwotICAgIG1EZXB0aFN0
ZW5jaWwgPSBOVUxMOwotICAgIG1TaGFkZXJSZXNvdXJjZSA9IHNydjsKLSAgICBtU3VicmVzb3Vy
Y2VJbmRleCA9IDA7Ci0KLSAgICBpZiAobVJlbmRlclRhcmdldCAmJiBtVGV4dHVyZSkKLSAgICB7
Ci0gICAgICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIGRlc2M7Ci0gICAgICAgIG1S
ZW5kZXJUYXJnZXQtPkdldERlc2MoJmRlc2MpOwotCi0gICAgICAgIEQzRDExX1RFWFRVUkUyRF9E
RVNDIHRleERlc2M7Ci0gICAgICAgIG1UZXh0dXJlLT5HZXREZXNjKCZ0ZXhEZXNjKTsKLQotICAg
ICAgICBtU3VicmVzb3VyY2VJbmRleCA9IGdldFJUVlN1YnJlc291cmNlSW5kZXgobVRleHR1cmUs
IG1SZW5kZXJUYXJnZXQpOwotICAgICAgICBtV2lkdGggPSB3aWR0aDsKLSAgICAgICAgbUhlaWdo
dCA9IGhlaWdodDsKLSAgICAgICAgbVNhbXBsZXMgPSAodGV4RGVzYy5TYW1wbGVEZXNjLkNvdW50
ID4gMSkgPyB0ZXhEZXNjLlNhbXBsZURlc2MuQ291bnQgOiAwOwotCi0gICAgICAgIG1JbnRlcm5h
bEZvcm1hdCA9IGQzZDExX2dsOjpDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGRlc2MuRm9y
bWF0KTsKLSAgICAgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDExX2dsOjpDb252ZXJ0VGV4dHVyZUlu
dGVybmFsRm9ybWF0KGRlc2MuRm9ybWF0KTsKLSAgICB9Ci19Ci0KLVJlbmRlclRhcmdldDExOjpS
ZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIElEM0QxMURlcHRoU3RlbmNpbFZpZXcg
KmRzdiwgSUQzRDExVGV4dHVyZTJEICp0ZXgsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBtUmVuZGVyZXIgPSBSZW5k
ZXJlcjExOjptYWtlUmVuZGVyZXIxMShyZW5kZXJlcik7Ci0gICAgbVRleHR1cmUgPSB0ZXg7Ci0g
ICAgbVJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgbURlcHRoU3RlbmNpbCA9IGRzdjsKLSAgICBt
U2hhZGVyUmVzb3VyY2UgPSBzcnY7Ci0gICAgbVN1YnJlc291cmNlSW5kZXggPSAwOwotCi0gICAg
aWYgKG1EZXB0aFN0ZW5jaWwgJiYgbVRleHR1cmUpCi0gICAgewotICAgICAgICBEM0QxMV9ERVBU
SF9TVEVOQ0lMX1ZJRVdfREVTQyBkZXNjOwotICAgICAgICBtRGVwdGhTdGVuY2lsLT5HZXREZXNj
KCZkZXNjKTsKLQotICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyB0ZXhEZXNjOwotICAgICAg
ICBtVGV4dHVyZS0+R2V0RGVzYygmdGV4RGVzYyk7Ci0KLSAgICAgICAgbVN1YnJlc291cmNlSW5k
ZXggPSBnZXREU1ZTdWJyZXNvdXJjZUluZGV4KG1UZXh0dXJlLCBtRGVwdGhTdGVuY2lsKTsKLSAg
ICAgICAgbVdpZHRoID0gd2lkdGg7Ci0gICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAg
IG1TYW1wbGVzID0gKHRleERlc2MuU2FtcGxlRGVzYy5Db3VudCA+IDEpID8gdGV4RGVzYy5TYW1w
bGVEZXNjLkNvdW50IDogMDsKLQotICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBkM2QxMV9nbDo6
Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChkZXNjLkZvcm1hdCk7Ci0gICAgICAgIG1BY3R1
YWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChkZXNjLkZv
cm1hdCk7Ci0gICAgfQotfQotCi1SZW5kZXJUYXJnZXQxMTo6UmVuZGVyVGFyZ2V0MTEoUmVuZGVy
ZXIgKnJlbmRlcmVyLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xzaXplaSBzYW1wbGVzLCBib29sIGRlcHRoKQotewotICAgIG1SZW5kZXJlciA9IFJlbmRl
cmVyMTE6Om1ha2VSZW5kZXJlcjExKHJlbmRlcmVyKTsKLSAgICBtVGV4dHVyZSA9IE5VTEw7Ci0g
ICAgbVJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAg
bVNoYWRlclJlc291cmNlID0gTlVMTDsKLQotICAgIERYR0lfRk9STUFUIHJlcXVlc3RlZEZvcm1h
dCA9IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KGZvcm1hdCk7Ci0KLSAgICBp
bnQgc3VwcG9ydGVkU2FtcGxlcyA9IG1SZW5kZXJlci0+Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBs
ZXMocmVxdWVzdGVkRm9ybWF0LCBzYW1wbGVzKTsKLSAgICBpZiAoc3VwcG9ydGVkU2FtcGxlcyA8
IDApCi0gICAgewotICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApCi0gICAg
ewotICAgICAgICAvLyBDcmVhdGUgdGV4dHVyZSByZXNvdXJjZQotICAgICAgICBEM0QxMV9URVhU
VVJFMkRfREVTQyBkZXNjOwotICAgICAgICBkZXNjLldpZHRoID0gd2lkdGg7IAotICAgICAgICBk
ZXNjLkhlaWdodCA9IGhlaWdodDsKLSAgICAgICAgZGVzYy5NaXBMZXZlbHMgPSAxOwotICAgICAg
ICBkZXNjLkFycmF5U2l6ZSA9IDE7Ci0gICAgICAgIGRlc2MuRm9ybWF0ID0gcmVxdWVzdGVkRm9y
bWF0OwotICAgICAgICBkZXNjLlNhbXBsZURlc2MuQ291bnQgPSAoc3VwcG9ydGVkU2FtcGxlcyA9
PSAwKSA/IDEgOiBzdXBwb3J0ZWRTYW1wbGVzOwotICAgICAgICBkZXNjLlNhbXBsZURlc2MuUXVh
bGl0eSA9IDA7Ci0gICAgICAgIGRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOwotICAg
ICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKLSAgICAgICAgZGVzYy5NaXNjRmxhZ3MgPSAw
OwotICAgICAgICBkZXNjLkJpbmRGbGFncyA9IChkZXB0aCA/IEQzRDExX0JJTkRfREVQVEhfU1RF
TkNJTCA6IChEM0QxMV9CSU5EX1JFTkRFUl9UQVJHRVQgfCBEM0QxMV9CSU5EX1NIQURFUl9SRVNP
VVJDRSkpOwotCi0gICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXRE
ZXZpY2UoKTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUy
RCgmZGVzYywgTlVMTCwgJm1UZXh0dXJlKTsKLQotICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgIGlmIChkZXB0aCkKLSAgICAgICAgewotICAgICAg
ICAgICAgRDNEMTFfREVQVEhfU1RFTkNJTF9WSUVXX0RFU0MgZHN2RGVzYzsKLSAgICAgICAgICAg
IGRzdkRlc2MuRm9ybWF0ID0gcmVxdWVzdGVkRm9ybWF0OwotICAgICAgICAgICAgZHN2RGVzYy5W
aWV3RGltZW5zaW9uID0gKHN1cHBvcnRlZFNhbXBsZXMgPT0gMCkgPyBEM0QxMV9EU1ZfRElNRU5T
SU9OX1RFWFRVUkUyRCA6IEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTJETVM7Ci0gICAgICAg
ICAgICBkc3ZEZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IDA7Ci0gICAgICAgICAgICBkc3ZEZXNj
LkZsYWdzID0gMDsKLSAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVu
Y2lsVmlldyhtVGV4dHVyZSwgJmRzdkRlc2MsICZtRGVwdGhTdGVuY2lsKTsKLQotICAgICAgICAg
ICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgbVRleHR1cmUgPSBO
VUxMOwotICAgICAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFS
R0VUX1ZJRVdfREVTQyBydHZEZXNjOwotICAgICAgICAgICAgcnR2RGVzYy5Gb3JtYXQgPSByZXF1
ZXN0ZWRGb3JtYXQ7Ci0gICAgICAgICAgICBydHZEZXNjLlZpZXdEaW1lbnNpb24gPSAoc3VwcG9y
dGVkU2FtcGxlcyA9PSAwKSA/IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJEIDogRDNEMTFf
UlRWX0RJTUVOU0lPTl9URVhUVVJFMkRNUzsKLSAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJE
Lk1pcFNsaWNlID0gMDsKLSAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVy
VGFyZ2V0VmlldyhtVGV4dHVyZSwgJnJ0dkRlc2MsICZtUmVuZGVyVGFyZ2V0KTsKLQotICAgICAg
ICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgbVRleHR1cmUg
PSBOVUxMOwotICAgICAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgICAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0Vf
VklFV19ERVNDIHNydkRlc2M7Ci0gICAgICAgICAgICBzcnZEZXNjLkZvcm1hdCA9IHJlcXVlc3Rl
ZEZvcm1hdDsKLSAgICAgICAgICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IChzdXBwb3J0ZWRT
YW1wbGVzID09IDApID8gRDNEMTFfU1JWX0RJTUVOU0lPTl9URVhUVVJFMkQgOiBEM0QxMV9TUlZf
RElNRU5TSU9OX1RFWFRVUkUyRE1TOwotICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkQuTW9z
dERldGFpbGVkTWlwID0gMDsKLSAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJELk1pcExldmVs
cyA9IDE7Ci0gICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNl
VmlldyhtVGV4dHVyZSwgJnNydkRlc2MsICZtU2hhZGVyUmVzb3VyY2UpOwotCi0gICAgICAgICAg
ICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBtVGV4dHVyZSA9IE5V
TEw7Ci0gICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgICAgICAg
ICAgICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOwotICAgICAgICAgICAgICAgIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgbVdpZHRoID0gd2lkdGg7Ci0gICAgbUhlaWdodCA9IGhlaWdodDsKLSAgICBtSW50
ZXJuYWxGb3JtYXQgPSBmb3JtYXQ7Ci0gICAgbVNhbXBsZXMgPSBzdXBwb3J0ZWRTYW1wbGVzOwot
ICAgIG1BY3R1YWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1h
dChyZXF1ZXN0ZWRGb3JtYXQpOwotICAgIG1TdWJyZXNvdXJjZUluZGV4ID0gRDNEMTFDYWxjU3Vi
cmVzb3VyY2UoMCwgMCwgMSk7Ci19Ci0KLVJlbmRlclRhcmdldDExOjp+UmVuZGVyVGFyZ2V0MTEo
KQotewotICAgIGlmIChtVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1UZXh0dXJlLT5SZWxlYXNl
KCk7Ci0gICAgICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVJlbmRlclRh
cmdldCkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAg
bVJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1EZXB0aFN0ZW5jaWwpCi0g
ICAgewotICAgICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EZXB0aFN0
ZW5jaWwgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtU2hhZGVyUmVzb3VyY2UpCi0gICAgewot
ICAgICAgICBtU2hhZGVyUmVzb3VyY2UtPlJlbGVhc2UoKTsKLSAgICAgICAgbVNoYWRlclJlc291
cmNlID0gTlVMTDsKLSAgICB9Ci19Ci0KLVJlbmRlclRhcmdldDExICpSZW5kZXJUYXJnZXQxMTo6
bWFrZVJlbmRlclRhcmdldDExKFJlbmRlclRhcmdldCAqdGFyZ2V0KQotewotICAgIEFTU0VSVChI
QVNfRFlOQU1JQ19UWVBFKHJ4OjpSZW5kZXJUYXJnZXQxMSosIHRhcmdldCkpOwotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxyeDo6UmVuZGVyVGFyZ2V0MTEqPih0YXJnZXQpOwotfQotCi1JRDNEMTFU
ZXh0dXJlMkQgKlJlbmRlclRhcmdldDExOjpnZXRUZXh0dXJlKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbVRleHR1cmU7Ci19Ci0KLUlEM0QxMVJlbmRlclRhcmdldFZpZXcgKlJlbmRlclRhcmdldDEx
OjpnZXRSZW5kZXJUYXJnZXRWaWV3KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVJlbmRlclRhcmdl
dDsKLX0KLQotSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqUmVuZGVyVGFyZ2V0MTE6OmdldERlcHRo
U3RlbmNpbFZpZXcoKSBjb25zdAotewotICAgIHJldHVybiBtRGVwdGhTdGVuY2lsOwotfQotCi1J
RDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlJlbmRlclRhcmdldDExOjpnZXRTaGFkZXJSZXNvdXJj
ZVZpZXcoKSBjb25zdAotewotICAgIHJldHVybiBtU2hhZGVyUmVzb3VyY2U7Ci19Ci0KLXVuc2ln
bmVkIGludCBSZW5kZXJUYXJnZXQxMTo6Z2V0U3VicmVzb3VyY2VJbmRleCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1TdWJyZXNvdXJjZUluZGV4OwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldDExLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRh
cmdldDExLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ODI3ZjI2Mzk3MDcyOTQy
ODRhMmNjZDM0ODFjOTdiZWRlODliMDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9SZW5kZXJUYXJnZXQxMS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLS8vIFJlbmRlclRhcmdldDExLmg6IERlZmluZXMgYSBEWDExLXNwZWNpZmlj
IHdyYXBwZXIgZm9yIElEM0QxMVZpZXcgcG9pbnRlcnMKLS8vIHJldGFpbmVkIGJ5IFJlbmRlcmJ1
ZmZlcnMuCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUlRBUkdFVDExX0hfCi0j
ZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJUQVJHRVQxMV9IXwotCi0jaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldC5oIgotCi1uYW1lc3BhY2UgcngKLXsKLWNs
YXNzIFJlbmRlcmVyOwotY2xhc3MgUmVuZGVyZXIxMTsKLQotY2xhc3MgUmVuZGVyVGFyZ2V0MTEg
OiBwdWJsaWMgUmVuZGVyVGFyZ2V0Ci17Ci0gIHB1YmxpYzoKLSAgICBSZW5kZXJUYXJnZXQxMShS
ZW5kZXJlciAqcmVuZGVyZXIsIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0diwgSUQzRDExVGV4
dHVyZTJEICp0ZXgsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCk7Ci0gICAgUmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVy
LCBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpkc3YsIElEM0QxMVRleHR1cmUyRCAqdGV4LCBJRDNE
MTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
OwotICAgIFJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcywgYm9vbCBkZXB0
aCk7Ci0gICAgdmlydHVhbCB+UmVuZGVyVGFyZ2V0MTEoKTsKLQotICAgIHN0YXRpYyBSZW5kZXJU
YXJnZXQxMSAqbWFrZVJlbmRlclRhcmdldDExKFJlbmRlclRhcmdldCAqcmVuZGVyVGFyZ2V0KTsK
LQotICAgIElEM0QxMVRleHR1cmUyRCAqZ2V0VGV4dHVyZSgpIGNvbnN0OwotICAgIElEM0QxMVJl
bmRlclRhcmdldFZpZXcgKmdldFJlbmRlclRhcmdldFZpZXcoKSBjb25zdDsKLSAgICBJRDNEMTFE
ZXB0aFN0ZW5jaWxWaWV3ICpnZXREZXB0aFN0ZW5jaWxWaWV3KCkgY29uc3Q7Ci0gICAgSUQzRDEx
U2hhZGVyUmVzb3VyY2VWaWV3ICpnZXRTaGFkZXJSZXNvdXJjZVZpZXcoKSBjb25zdDsKLQotICAg
IHVuc2lnbmVkIGludCBnZXRTdWJyZXNvdXJjZUluZGV4KCkgY29uc3Q7Ci0KLSAgcHJpdmF0ZToK
LSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyVGFyZ2V0MTEpOwotCi0gICAgdW5z
aWduZWQgaW50IG1TdWJyZXNvdXJjZUluZGV4OwotICAgIElEM0QxMVRleHR1cmUyRCAqbVRleHR1
cmU7Ci0gICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqbVJlbmRlclRhcmdldDsKLSAgICBJRDNE
MTFEZXB0aFN0ZW5jaWxWaWV3ICptRGVwdGhTdGVuY2lsOwotICAgIElEM0QxMVNoYWRlclJlc291
cmNlVmlldyAqbVNoYWRlclJlc291cmNlOwotCi0gICAgUmVuZGVyZXIxMSAqbVJlbmRlcmVyOwot
fTsKLQotfQotCi0jZW5kaWYgTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUlRBUkdFVDExX0hfClwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQ5LmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0OS5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4NGM3MDkwNTk5YzkwZWMzMDc4OTY1ZmNh
OWUxYTA2MzIzYzc5OGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5k
ZXJUYXJnZXQ5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0jaW5jbHVkZSAi
cHJlY29tcGlsZWQuaCIKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBSZW5kZXJUYXJnZXQ5LmNwcDogSW1w
bGVtZW50cyBhIEQzRDktc3BlY2lmaWMgd3JhcHBlciBmb3IgSURpcmVjdDNEU3VyZmFjZTkKLS8v
IHBvaW50ZXJzIHJldGFpbmVkIGJ5IHJlbmRlcmJ1ZmZlcnMuCi0KLSNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0OS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9SZW5kZXJlcjkuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9yZW5kZXJlcjlf
dXRpbHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgotCi1uYW1lc3BhY2UgcngKLXsK
LQotUmVuZGVyVGFyZ2V0OTo6UmVuZGVyVGFyZ2V0OShSZW5kZXJlciAqcmVuZGVyZXIsIElEaXJl
Y3QzRFN1cmZhY2U5ICpzdXJmYWNlKQotewotICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyOTo6bWFr
ZVJlbmRlcmVyOShyZW5kZXJlcik7Ci0gICAgbVJlbmRlclRhcmdldCA9IHN1cmZhY2U7Ci0KLSAg
ICBpZiAobVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNj
cmlwdGlvbjsKLSAgICAgICAgbVJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzY3JpcHRpb24pOwot
Ci0gICAgICAgIG1XaWR0aCA9IGRlc2NyaXB0aW9uLldpZHRoOwotICAgICAgICBtSGVpZ2h0ID0g
ZGVzY3JpcHRpb24uSGVpZ2h0OwotICAgICAgICAKLSAgICAgICAgbUludGVybmFsRm9ybWF0ID0g
ZDNkOV9nbDo6R2V0RXF1aXZhbGVudEZvcm1hdChkZXNjcmlwdGlvbi5Gb3JtYXQpOwotICAgICAg
ICBtQWN0dWFsRm9ybWF0ID0gZDNkOV9nbDo6R2V0RXF1aXZhbGVudEZvcm1hdChkZXNjcmlwdGlv
bi5Gb3JtYXQpOwotICAgICAgICBtU2FtcGxlcyA9IGQzZDlfZ2w6OkdldFNhbXBsZXNGcm9tTXVs
dGlzYW1wbGVUeXBlKGRlc2NyaXB0aW9uLk11bHRpU2FtcGxlVHlwZSk7Ci0gICAgfQotfQotCi1S
ZW5kZXJUYXJnZXQ5OjpSZW5kZXJUYXJnZXQ5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcykKLXsK
LSAgICBtUmVuZGVyZXIgPSBSZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjkocmVuZGVyZXIpOwotICAg
IG1SZW5kZXJUYXJnZXQgPSBOVUxMOwotCi0gICAgRDNERk9STUFUIHJlcXVlc3RlZEZvcm1hdCA9
IGdsX2QzZDk6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoZm9ybWF0KTsKLSAgICBpbnQgc3Vw
cG9ydGVkU2FtcGxlcyA9IG1SZW5kZXJlci0+Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMocmVx
dWVzdGVkRm9ybWF0LCBzYW1wbGVzKTsKLQotICAgIGlmIChzdXBwb3J0ZWRTYW1wbGVzID09IC0x
KQotICAgIHsKLSAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotCi0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9IEQzREVSUl9JTlZBTElEQ0FM
TDsKLSAgICAKLSAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApCi0gICAgewotICAgICAg
ICBpZiAocmVxdWVzdGVkRm9ybWF0ID09IEQzREZNVF9EMjRTOCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmVzdWx0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKS0+Q3JlYXRlRGVwdGhTdGVuY2ls
U3VyZmFjZSh3aWR0aCwgaGVpZ2h0LCByZXF1ZXN0ZWRGb3JtYXQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGds
X2QzZDk6OkdldE11bHRpc2FtcGxlVHlwZUZyb21TYW1wbGVzKHN1cHBvcnRlZFNhbXBsZXMpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLCBGQUxTRSwgJm1SZW5kZXJUYXJnZXQsIE5VTEwpOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gbVJlbmRlcmVy
LT5nZXREZXZpY2UoKS0+Q3JlYXRlUmVuZGVyVGFyZ2V0KHdpZHRoLCBoZWlnaHQsIHJlcXVlc3Rl
ZEZvcm1hdCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6R2V0TXVsdGlzYW1wbGVUeXBlRnJvbVNhbXBsZXMo
c3VwcG9ydGVkU2FtcGxlcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgRkFMU0UsICZtUmVuZGVyVGFyZ2V0LCBOVUxM
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9N
RU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICB9Ci0KLSAg
ICBtV2lkdGggPSB3aWR0aDsKLSAgICBtSGVpZ2h0ID0gaGVpZ2h0OwotICAgIG1JbnRlcm5hbEZv
cm1hdCA9IGZvcm1hdDsKLSAgICBtU2FtcGxlcyA9IHN1cHBvcnRlZFNhbXBsZXM7Ci0gICAgbUFj
dHVhbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEVxdWl2YWxlbnRGb3JtYXQocmVxdWVzdGVkRm9ybWF0
KTsKLX0KLQotUmVuZGVyVGFyZ2V0OTo6flJlbmRlclRhcmdldDkoKQotewotICAgIGlmIChtUmVu
ZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAg
IH0KLX0KLQotUmVuZGVyVGFyZ2V0OSAqUmVuZGVyVGFyZ2V0OTo6bWFrZVJlbmRlclRhcmdldDko
UmVuZGVyVGFyZ2V0ICp0YXJnZXQpCi17Ci0gICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUocng6
OlJlbmRlclRhcmdldDkqLCB0YXJnZXQpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8cng6OlJl
bmRlclRhcmdldDkqPih0YXJnZXQpOwotfQotCi1JRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyVGFy
Z2V0OTo6Z2V0U3VyZmFjZSgpCi17Ci0gICAgLy8gQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBy
ZWxlYXNpbmcgdGhlIHJldHVybmVkIHN1cmZhY2UgcmVmZXJlbmNlLgotICAgIGlmIChtUmVuZGVy
VGFyZ2V0KQotICAgIHsKLSAgICAgICAgbVJlbmRlclRhcmdldC0+QWRkUmVmKCk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7Ci19Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL1JlbmRlclRhcmdldDkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0OS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBmYWY4YWQxYzZkMmQ2MjQyOTQwMGZlMzNjYjhjZGRlNzFmN2QzMjVlLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0OS5oCisrKyAvZGV2L251
bGwKQEAgLTEsNDAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQot
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFJlbmRlclRhcmdldDkuaDog
RGVmaW5lcyBhIEQzRDktc3BlY2lmaWMgd3JhcHBlciBmb3IgSURpcmVjdDNEU3VyZmFjZTkgcG9p
bnRlcnMKLS8vIHJldGFpbmVkIGJ5IFJlbmRlcmJ1ZmZlcnMuCi0KLSNpZm5kZWYgTElCR0xFU1Yy
X1JFTkRFUkVSX1JFTkRFUlRBUkdFVDlfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1JF
TkRFUlRBUkdFVDlfSF8KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJn
ZXQuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci1jbGFzcyBSZW5kZXJlcjsKLWNsYXNzIFJlbmRlcmVy
OTsKLQotY2xhc3MgUmVuZGVyVGFyZ2V0OSA6IHB1YmxpYyBSZW5kZXJUYXJnZXQKLXsKLSAgcHVi
bGljOgotICAgIFJlbmRlclRhcmdldDkoUmVuZGVyZXIgKnJlbmRlcmVyLCBJRGlyZWN0M0RTdXJm
YWNlOSAqc3VyZmFjZSk7Ci0gICAgUmVuZGVyVGFyZ2V0OShSZW5kZXJlciAqcmVuZGVyZXIsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBs
ZXMpOwotICAgIHZpcnR1YWwgflJlbmRlclRhcmdldDkoKTsKLQotICAgIHN0YXRpYyBSZW5kZXJU
YXJnZXQ5ICptYWtlUmVuZGVyVGFyZ2V0OShSZW5kZXJUYXJnZXQgKnJlbmRlclRhcmdldCk7Ci0g
ICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFN1cmZhY2UoKTsKLQotICBwcml2YXRlOgotICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJUYXJnZXQ5KTsKLQotICAgIElEaXJlY3QzRFN1
cmZhY2U5ICptUmVuZGVyVGFyZ2V0OwotCi0gICAgUmVuZGVyZXI5ICptUmVuZGVyZXI7Ci19Owot
Ci19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSVEFSR0VUOV9IXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9S
ZW5kZXJlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL1JlbmRlcmVyLmNwcAppbmRleCBlMGIzYWJjZjg3OTllYzJjNmMwOTU2NDY0ZDNkNWY5MWQ4
ODdkODZhLi40YmQ0ZGNmODI2N2U0NDJkZjFiMGE3ZGNhYzg5OWI1OWU5NTRkMTgwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRl
cmVyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL1JlbmRlcmVyLmNwcApAQCAtMTEsOCArMTEsOCBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9t
YWluLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKICNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVu
ZGVyZXI5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyMTEuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyZXIxMS5oIgogI2luY2x1ZGUgImxpYkdMRVN2
Mi91dGlsaXRpZXMuaCIKICNpbmNsdWRlICJ0aGlyZF9wYXJ0eS90cmFjZV9ldmVudC90cmFjZV9l
dmVudC5oIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL1JlbmRlcmVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgKaW5kZXggZTE4NjFmMDFlYjFkYWI5MDMyMzE5NWQx
OGYwY2NlOWJhYzJkMzJhMC4uNzI0NGEwYTNkNjExZjA5MTI4MWQ5NTY4ODYzNTdmZjBhYTljYzhl
YiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9SZW5kZXJlci5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvUmVuZGVyZXIuaApAQCAtMTE5LDcgKzExOSw3IEBAIGNsYXNzIFJlbmRlcmVy
CiAgICAgdmlydHVhbCB2b2lkIHNldFRleHR1cmUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBp
bmRleCwgZ2w6OlRleHR1cmUgKnRleHR1cmUpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRS
YXN0ZXJpemVyU3RhdGUoY29uc3QgZ2w6OlJhc3Rlcml6ZXJTdGF0ZSAmcmFzdGVyU3RhdGUpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0ZShjb25zdCBnbDo6QmxlbmRTdGF0ZSAm
YmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNvbG9yICZibGVuZENvbG9yLAorICAgIHZpcnR1YWwgdm9p
ZCBzZXRCbGVuZFN0YXRlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpC
bGVuZFN0YXRlICZibGVuZFN0YXRlLCBjb25zdCBnbDo6Q29sb3IgJmJsZW5kQ29sb3IsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZU1hc2spID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVwdGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6OkRlcHRoU3Rl
bmNpbFN0YXRlICZkZXB0aFN0ZW5jaWxTdGF0ZSwgaW50IHN0ZW5jaWxSZWYsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGVuY2lsQmFja1JlZiwgYm9vbCBmcm9u
dEZhY2VDQ1cpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIxMS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyMTEuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAxM2JhMzU1ZDU4MjJmMGZjOTdlZWQwM2Q3MjhhZTBkNzdlZDQ2ZTU3Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIxMS5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwzNTUxICswLDAgQEAKLSNpbmNsdWRlICJwcmVjb21waWxlZC5oIgotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgotLy8KLQotLy8gUmVuZGVyZXIxMS5jcHA6IEltcGxlbWVudHMgYSBiYWNrLWVu
ZCBzcGVjaWZpYyBjbGFzcyBmb3IgdGhlIEQzRDExIHJlbmRlcmVyLgotCi0jaW5jbHVkZSAibGli
R0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL0J1ZmZlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5
LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL1JlbmRlcmJ1ZmZlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJl
cjExLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldDExLmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL3JlbmRlcmVyMTFfdXRpbHMuaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvU2hhZGVyRXhlY3V0YWJsZTExLmgiCi0jaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL1N3YXBDaGFpbjExLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL0ltYWdlMTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4QnVmZmVy
MTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhCdWZmZXIxMS5oIgotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdlMTEuaCIKLSNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGF0YU1hbmFnZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvSW5kZXhEYXRhTWFuYWdlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9UZXh0dXJlU3RvcmFnZTExLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1F1
ZXJ5MTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvRmVuY2UxMS5oIgotCi0jaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2gxMXZz
LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Ro
cm91Z2hyZ2JhMTFwcy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2Nv
bXBpbGVkL3Bhc3N0aHJvdWdocmdiMTFwcy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdobHVtMTFwcy5oIgotI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdobHVtYWxwaGExMXBzLmgi
Ci0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9jbGVhcjEx
dnMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9jbGVh
cnNpbmdsZTExcHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21w
aWxlZC9jbGVhcm11bHRpcGxlMTFwcy5oIgotCi0jaW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIK
LQotI2lmZGVmIF9ERUJVRwotLy8gdGhpcyBmbGFnIGVuYWJsZXMgc3VwcHJlc3Npbmcgc29tZSBz
cHVyaW91cyB3YXJuaW5ncyB0aGF0IHBvcCB1cCBpbiBjZXJ0YWluIFdlYkdMIHNhbXBsZXMKLS8v
IGFuZCBjb25mb3JtYW5jZSB0ZXN0cy4gdG8gZW5hYmxlIGFsbCB3YXJuaW5ncywgcmVtb3ZlIHRo
aXMgZGVmaW5lLgotI2RlZmluZSBBTkdMRV9TVVBQUkVTU19EM0QxMV9IQVpBUkRfV0FSTklOR1Mg
MQotI2VuZGlmCi0KLW5hbWVzcGFjZSByeAotewotc3RhdGljIGNvbnN0IERYR0lfRk9STUFUIFJl
bmRlclRhcmdldEZvcm1hdHNbXSA9Ci0gICAgewotICAgICAgICBEWEdJX0ZPUk1BVF9COEc4UjhB
OF9VTk9STSwKLSAgICAgICAgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk0KLSAgICB9OwotCi1z
dGF0aWMgY29uc3QgRFhHSV9GT1JNQVQgRGVwdGhTdGVuY2lsRm9ybWF0c1tdID0KLSAgICB7Ci0g
ICAgICAgIERYR0lfRk9STUFUX1VOS05PV04sCi0gICAgICAgIERYR0lfRk9STUFUX0QyNF9VTk9S
TV9TOF9VSU5ULAotICAgICAgICBEWEdJX0ZPUk1BVF9EMTZfVU5PUk0KLSAgICB9OwotCi1lbnVt
Ci17Ci0gICAgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGX1NNNCA9IDE2Ci19OwotCi1SZW5k
ZXJlcjExOjpSZW5kZXJlcjExKGVnbDo6RGlzcGxheSAqZGlzcGxheSwgSERDIGhEYykgOiBSZW5k
ZXJlcihkaXNwbGF5KSwgbURjKGhEYykKLXsKLSAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBOVUxM
OwotICAgIG1JbmRleERhdGFNYW5hZ2VyID0gTlVMTDsKLQotICAgIG1MaW5lTG9vcElCID0gTlVM
TDsKLSAgICBtVHJpYW5nbGVGYW5JQiA9IE5VTEw7Ci0KLSAgICBtQ29weVJlc291cmNlc0luaXRp
YWxpemVkID0gZmFsc2U7Ci0gICAgbUNvcHlWQiA9IE5VTEw7Ci0gICAgbUNvcHlTYW1wbGVyID0g
TlVMTDsKLSAgICBtQ29weUlMID0gTlVMTDsKLSAgICBtQ29weVZTID0gTlVMTDsKLSAgICBtQ29w
eVJHQkFQUyA9IE5VTEw7Ci0gICAgbUNvcHlSR0JQUyA9IE5VTEw7Ci0gICAgbUNvcHlMdW1QUyA9
IE5VTEw7Ci0gICAgbUNvcHlMdW1BbHBoYVBTID0gTlVMTDsKLQotICAgIG1DbGVhclJlc291cmNl
c0luaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgbUNsZWFyVkIgPSBOVUxMOwotICAgIG1DbGVhcklM
ID0gTlVMTDsKLSAgICBtQ2xlYXJWUyA9IE5VTEw7Ci0gICAgbUNsZWFyU2luZ2xlUFMgPSBOVUxM
OwotICAgIG1DbGVhck11bHRpcGxlUFMgPSBOVUxMOwotICAgIG1DbGVhclNjaXNzb3JSUyA9IE5V
TEw7Ci0gICAgbUNsZWFyTm9TY2lzc29yUlMgPSBOVUxMOwotCi0gICAgbVN5bmNRdWVyeSA9IE5V
TEw7Ci0KLSAgICBtRDNkMTFNb2R1bGUgPSBOVUxMOwotICAgIG1EeGdpTW9kdWxlID0gTlVMTDsK
LQotICAgIG1EZXZpY2VMb3N0ID0gZmFsc2U7Ci0KLSAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9
IDA7Ci0KLSAgICBtRGV2aWNlID0gTlVMTDsKLSAgICBtRGV2aWNlQ29udGV4dCA9IE5VTEw7Ci0g
ICAgbUR4Z2lBZGFwdGVyID0gTlVMTDsKLSAgICBtRHhnaUZhY3RvcnkgPSBOVUxMOwotCi0gICAg
bURyaXZlckNvbnN0YW50QnVmZmVyVlMgPSBOVUxMOwotICAgIG1Ecml2ZXJDb25zdGFudEJ1ZmZl
clBTID0gTlVMTDsKLQotICAgIG1CR1JBVGV4dHVyZVN1cHBvcnQgPSBmYWxzZTsKLQotICAgIG1J
c0dlb21ldHJ5U2hhZGVyQWN0aXZlID0gZmFsc2U7Ci19Ci0KLVJlbmRlcmVyMTE6On5SZW5kZXJl
cjExKCkKLXsKLSAgICByZWxlYXNlKCk7Ci19Ci0KLVJlbmRlcmVyMTEgKlJlbmRlcmVyMTE6Om1h
a2VSZW5kZXJlcjExKFJlbmRlcmVyICpyZW5kZXJlcikKLXsKLSAgICBBU1NFUlQoSEFTX0RZTkFN
SUNfVFlQRShyeDo6UmVuZGVyZXIxMSosIHJlbmRlcmVyKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PHJ4OjpSZW5kZXJlcjExKj4ocmVuZGVyZXIpOwotfQotCi0jaWZuZGVmIF9fZDNkMTFfMV9o
X18KLSNkZWZpbmUgRDNEMTFfTUVTU0FHRV9JRF9ERVZJQ0VfRFJBV19SRU5ERVJUQVJHRVRWSUVX
X05PVF9TRVQgKChEM0QxMV9NRVNTQUdFX0lEKTMxNDYwODEpCi0jZW5kaWYKLQotRUdMaW50IFJl
bmRlcmVyMTE6OmluaXRpYWxpemUoKQotewotICAgIGlmICghaW5pdGlhbGl6ZUNvbXBpbGVyKCkp
Ci0gICAgewotICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsKLSAgICB9Ci0KLSAg
ICBtRHhnaU1vZHVsZSA9IExvYWRMaWJyYXJ5KFRFWFQoImR4Z2kuZGxsIikpOwotICAgIG1EM2Qx
MU1vZHVsZSA9IExvYWRMaWJyYXJ5KFRFWFQoImQzZDExLmRsbCIpKTsKLQotICAgIGlmIChtRDNk
MTFNb2R1bGUgPT0gTlVMTCB8fCBtRHhnaU1vZHVsZSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAg
RVJSKCJDb3VsZCBub3QgbG9hZCBEM0QxMSBvciBEWEdJIGxpYnJhcnkgLSBhYm9ydGluZyFcbiIp
OwotICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsKLSAgICB9Ci0KLSAgICAvLyBj
cmVhdGUgdGhlIEQzRDExIGRldmljZQotICAgIEFTU0VSVChtRGV2aWNlID09IE5VTEwpOwotICAg
IFBGTl9EM0QxMV9DUkVBVEVfREVWSUNFIEQzRDExQ3JlYXRlRGV2aWNlID0gKFBGTl9EM0QxMV9D
UkVBVEVfREVWSUNFKUdldFByb2NBZGRyZXNzKG1EM2QxMU1vZHVsZSwgIkQzRDExQ3JlYXRlRGV2
aWNlIik7Ci0KLSAgICBpZiAoRDNEMTFDcmVhdGVEZXZpY2UgPT0gTlVMTCkKLSAgICB7Ci0gICAg
ICAgIEVSUigiQ291bGQgbm90IHJldHJpZXZlIEQzRDExQ3JlYXRlRGV2aWNlIGFkZHJlc3MgLSBh
Ym9ydGluZyFcbiIpOwotICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsKLSAgICB9
Ci0KLSAgICBEM0RfRkVBVFVSRV9MRVZFTCBmZWF0dXJlTGV2ZWxzW10gPQotICAgIHsKLSAgICAg
ICAgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMCwKLSAgICAgICAgRDNEX0ZFQVRVUkVfTEVWRUxfMTBf
MSwKLSAgICAgICAgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMCwKLSAgICB9OwotCi0gICAgSFJFU1VM
VCByZXN1bHQgPSBTX09LOwotCi0jaWZkZWYgX0RFQlVHCi0gICAgcmVzdWx0ID0gRDNEMTFDcmVh
dGVEZXZpY2UoTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RfRFJJVkVS
X1RZUEVfSEFSRFdBUkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0QxMV9DUkVBVEVfREVWSUNFX0RFQlVHLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVMZXZlbHMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQXJyYXlTaXplKGZlYXR1cmVMZXZlbHMpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEQzRDExX1NES19WRVJTSU9OLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZtRGV2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZtRmVhdHVyZUxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtRGV2aWNl
Q29udGV4dCk7Ci0KLSAgICBpZiAoIW1EZXZpY2UgfHwgRkFJTEVEKHJlc3VsdCkpCi0gICAgewot
ICAgICAgICBFUlIoIkZhaWxlZCBjcmVhdGluZyBEZWJ1ZyBEM0QxMSBkZXZpY2UgLSBmYWxsaW5n
IGJhY2sgdG8gcmVsZWFzZSBydW50aW1lLlxuIik7Ci0gICAgfQotCi0gICAgaWYgKCFtRGV2aWNl
IHx8IEZBSUxFRChyZXN1bHQpKQotI2VuZGlmCi0gICAgewotICAgICAgICByZXN1bHQgPSBEM0Qx
MUNyZWF0ZURldmljZShOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
M0RfRFJJVkVSX1RZUEVfSEFSRFdBUkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVMZXZlbHMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFycmF5U2l6ZShmZWF0dXJlTGV2ZWxzKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEMTFfU0RLX1ZFUlNJT04sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZtRGV2aWNlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmbUZlYXR1cmVMZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJm1EZXZpY2VDb250ZXh0KTsKLQotICAgICAgICBpZiAoIW1EZXZpY2UgfHwgRkFJ
TEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0
ZSBEM0QxMSBkZXZpY2UgLSBhYm9ydGluZyFcbiIpOwotICAgICAgICAgICAgcmV0dXJuIEVHTF9O
T1RfSU5JVElBTElaRUQ7ICAgLy8gQ2xlYW51cCBkb25lIGJ5IGRlc3RydWN0b3IgdGhyb3VnaCBn
bERlc3Ryb3lSZW5kZXJlcgotICAgICAgICB9Ci0gICAgfQotCi0gICAgSURYR0lEZXZpY2UgKmR4
Z2lEZXZpY2UgPSBOVUxMOwotICAgIHJlc3VsdCA9IG1EZXZpY2UtPlF1ZXJ5SW50ZXJmYWNlKF9f
dXVpZG9mKElEWEdJRGV2aWNlKSwgKHZvaWQqKikmZHhnaURldmljZSk7Ci0KLSAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIoIkNvdWxkIG5vdCBxdWVyeSBEWEdJIGRl
dmljZSAtIGFib3J0aW5nIVxuIik7Ci0gICAgICAgIHJldHVybiBFR0xfTk9UX0lOSVRJQUxJWkVE
OwotICAgIH0KLQotICAgIHJlc3VsdCA9IGR4Z2lEZXZpY2UtPkdldFBhcmVudChfX3V1aWRvZihJ
RFhHSUFkYXB0ZXIpLCAodm9pZCoqKSZtRHhnaUFkYXB0ZXIpOwotCi0gICAgaWYgKEZBSUxFRChy
ZXN1bHQpKQotICAgIHsKLSAgICAgICAgRVJSKCJDb3VsZCBub3QgcmV0cmlldmUgRFhHSSBhZGFw
dGVyIC0gYWJvcnRpbmchXG4iKTsKLSAgICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7
Ci0gICAgfQotCi0gICAgZHhnaURldmljZS0+UmVsZWFzZSgpOwotCi0gICAgbUR4Z2lBZGFwdGVy
LT5HZXREZXNjKCZtQWRhcHRlckRlc2NyaXB0aW9uKTsKLSAgICBtZW1zZXQobURlc2NyaXB0aW9u
LCAwLCBzaXplb2YobURlc2NyaXB0aW9uKSk7Ci0gICAgd2NzdG9tYnMobURlc2NyaXB0aW9uLCBt
QWRhcHRlckRlc2NyaXB0aW9uLkRlc2NyaXB0aW9uLCBzaXplb2YobURlc2NyaXB0aW9uKSAtIDEp
OwotCi0gICAgcmVzdWx0ID0gbUR4Z2lBZGFwdGVyLT5HZXRQYXJlbnQoX191dWlkb2YoSURYR0lG
YWN0b3J5KSwgKHZvaWQqKikmbUR4Z2lGYWN0b3J5KTsKLQotICAgIGlmICghbUR4Z2lGYWN0b3J5
IHx8IEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRl
IERYR0kgZmFjdG9yeSAtIGFib3J0aW5nIVxuIik7Ci0gICAgICAgIHJldHVybiBFR0xfTk9UX0lO
SVRJQUxJWkVEOwotICAgIH0KLQotICAgIC8vIERpc2FibGUgc29tZSBzcHVyaW91cyBEM0QxMSBk
ZWJ1ZyB3YXJuaW5ncyB0byBwcmV2ZW50IHRoZW0gZnJvbSBmbG9vZGluZyB0aGUgb3V0cHV0IGxv
ZwotI2lmIGRlZmluZWQoQU5HTEVfU1VQUFJFU1NfRDNEMTFfSEFaQVJEX1dBUk5JTkdTKSAmJiBk
ZWZpbmVkKF9ERUJVRykKLSAgICBJRDNEMTFJbmZvUXVldWUgKmluZm9RdWV1ZTsKLSAgICByZXN1
bHQgPSBtRGV2aWNlLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRDNEMTFJbmZvUXVldWUpLCAg
KHZvaWQgKiopJmluZm9RdWV1ZSk7Ci0KLSAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAg
ewotICAgICAgICBEM0QxMV9NRVNTQUdFX0lEIGhpZGVNZXNzYWdlc1tdID0KLSAgICAgICAgewot
ICAgICAgICAgICAgRDNEMTFfTUVTU0FHRV9JRF9ERVZJQ0VfRFJBV19SRU5ERVJUQVJHRVRWSUVX
X05PVF9TRVQKLSAgICAgICAgfTsKLQotICAgICAgICBEM0QxMV9JTkZPX1FVRVVFX0ZJTFRFUiBm
aWx0ZXIgPSB7MH07Ci0gICAgICAgIGZpbHRlci5EZW55TGlzdC5OdW1JRHMgPSBBcnJheVNpemUo
aGlkZU1lc3NhZ2VzKTsKLSAgICAgICAgZmlsdGVyLkRlbnlMaXN0LnBJRExpc3QgPSBoaWRlTWVz
c2FnZXM7Ci0KLSAgICAgICAgaW5mb1F1ZXVlLT5BZGRTdG9yYWdlRmlsdGVyRW50cmllcygmZmls
dGVyKTsKLQotICAgICAgICBpbmZvUXVldWUtPlJlbGVhc2UoKTsKLSAgICB9Ci0jZW5kaWYKLQot
ICAgIHVuc2lnbmVkIGludCBtYXhTdXBwb3J0ZWRTYW1wbGVzID0gMDsKLSAgICB1bnNpZ25lZCBp
bnQgcnRGb3JtYXRDb3VudCA9IEFycmF5U2l6ZShSZW5kZXJUYXJnZXRGb3JtYXRzKTsKLSAgICB1
bnNpZ25lZCBpbnQgZHNGb3JtYXRDb3VudCA9IEFycmF5U2l6ZShEZXB0aFN0ZW5jaWxGb3JtYXRz
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHJ0Rm9ybWF0Q291bnQgKyBkc0Zv
cm1hdENvdW50OyArK2kpCi0gICAgewotICAgICAgICBEWEdJX0ZPUk1BVCBmb3JtYXQgPSAoaSA8
IHJ0Rm9ybWF0Q291bnQpID8gUmVuZGVyVGFyZ2V0Rm9ybWF0c1tpXSA6IERlcHRoU3RlbmNpbEZv
cm1hdHNbaSAtIHJ0Rm9ybWF0Q291bnRdOwotICAgICAgICBpZiAoZm9ybWF0ICE9IERYR0lfRk9S
TUFUX1VOS05PV04pCi0gICAgICAgIHsKLSAgICAgICAgICAgIFVJTlQgZm9ybWF0U3VwcG9ydDsK
LSAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNoZWNrRm9ybWF0U3VwcG9ydChmb3JtYXQs
ICZmb3JtYXRTdXBwb3J0KTsKLSAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSAmJiAo
Zm9ybWF0U3VwcG9ydCAmIEQzRDExX0ZPUk1BVF9TVVBQT1JUX01VTFRJU0FNUExFX1JFTkRFUlRB
UkdFVCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTXVsdGlzYW1wbGVTdXBwb3J0
SW5mbyBzdXBwb3J0SW5mbzsKLQotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGog
PSAxOyBqIDw9IEQzRDExX01BWF9NVUxUSVNBTVBMRV9TQU1QTEVfQ09VTlQ7IGorKykKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNoZWNr
TXVsdGlzYW1wbGVRdWFsaXR5TGV2ZWxzKGZvcm1hdCwgaiwgJnN1cHBvcnRJbmZvLnF1YWxpdHlM
ZXZlbHNbaiAtIDFdKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQp
ICYmIHN1cHBvcnRJbmZvLnF1YWxpdHlMZXZlbHNbaiAtIDFdID4gMCkKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbWF4U3VwcG9ydGVkU2FtcGxlcyA9IHN0
ZDo6bWF4KGosIG1heFN1cHBvcnRlZFNhbXBsZXMpOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgc3VwcG9ydEluZm8ucXVhbGl0eUxldmVsc1tqIC0gMV0gPSAwOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
bU11bHRpc2FtcGxlU3VwcG9ydE1hcC5pbnNlcnQoc3RkOjptYWtlX3BhaXIoZm9ybWF0LCBzdXBw
b3J0SW5mbykpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIG1NYXhTdXBw
b3J0ZWRTYW1wbGVzID0gbWF4U3VwcG9ydGVkU2FtcGxlczsKLQotICAgIGluaXRpYWxpemVEZXZp
Y2UoKTsKLQotICAgIC8vIEJHUkEgdGV4dHVyZSBzdXBwb3J0IGlzIG9wdGlvbmFsIGluIGZlYXR1
cmUgbGV2ZWxzIDEwIGFuZCAxMF8xCi0gICAgVUlOVCBmb3JtYXRTdXBwb3J0OwotICAgIHJlc3Vs
dCA9IG1EZXZpY2UtPkNoZWNrRm9ybWF0U3VwcG9ydChEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9S
TSwgJmZvcm1hdFN1cHBvcnQpOwotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAg
ICAgIEVSUigiRXJyb3IgY2hlY2tpbmcgQkdSQSBmb3JtYXQgc3VwcG9ydDogMHglMDhYIiwgcmVz
dWx0KTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgY29uc3QgaW50IGZsYWdzID0g
KEQzRDExX0ZPUk1BVF9TVVBQT1JUX1RFWFRVUkUyRCB8IEQzRDExX0ZPUk1BVF9TVVBQT1JUX1JF
TkRFUl9UQVJHRVQpOwotICAgICAgICBtQkdSQVRleHR1cmVTdXBwb3J0ID0gKGZvcm1hdFN1cHBv
cnQgJiBmbGFncykgPT0gZmxhZ3M7Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgZmxvYXRpbmcgcG9p
bnQgdGV4dHVyZSBzdXBwb3J0Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCByZXF1aXJl
ZFRleHR1cmVGbGFncyA9IEQzRDExX0ZPUk1BVF9TVVBQT1JUX1RFWFRVUkUyRCB8IEQzRDExX0ZP
Uk1BVF9TVVBQT1JUX1RFWFRVUkVDVUJFOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQg
cmVxdWlyZWRSZW5kZXJhYmxlRmxhZ3MgPSBEM0QxMV9GT1JNQVRfU1VQUE9SVF9SRU5ERVJfVEFS
R0VUOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcmVxdWlyZWRGaWx0ZXJGbGFncyA9
IEQzRDExX0ZPUk1BVF9TVVBQT1JUX1NIQURFUl9TQU1QTEU7Ci0KLSAgICBEWEdJX0ZPUk1BVCBm
bG9hdDE2Rm9ybWF0c1tdID0KLSAgICB7Ci0gICAgICAgIERYR0lfRk9STUFUX1IxNl9GTE9BVCwK
LSAgICAgICAgRFhHSV9GT1JNQVRfUjE2RzE2X0ZMT0FULAotICAgICAgICBEWEdJX0ZPUk1BVF9S
MTZHMTZCMTZBMTZfRkxPQVQsCi0gICAgfTsKLQotICAgIERYR0lfRk9STUFUIGZsb2F0MzJGb3Jt
YXRzW10gPQotICAgIHsKLSAgICAgICAgRFhHSV9GT1JNQVRfUjMyX0ZMT0FULAotICAgICAgICBE
WEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsCi0gICAgICAgIERYR0lfRk9STUFUX1IzMkczMkIzMkEz
Ml9GTE9BVCwKLSAgICB9OwotCi0gICAgbUZsb2F0MTZUZXh0dXJlU3VwcG9ydCA9IHRydWU7Ci0g
ICAgbUZsb2F0MTZGaWx0ZXJTdXBwb3J0ID0gdHJ1ZTsKLSAgICBtRmxvYXQxNlJlbmRlclN1cHBv
cnQgPSB0cnVlOwotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgQXJyYXlTaXplKGZs
b2F0MTZGb3JtYXRzKTsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKFNVQ0NFRURFRChtRGV2aWNl
LT5DaGVja0Zvcm1hdFN1cHBvcnQoZmxvYXQxNkZvcm1hdHNbaV0sICZmb3JtYXRTdXBwb3J0KSkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1GbG9hdDE2VGV4dHVyZVN1cHBvcnQgPSBtRmxvYXQx
NlRleHR1cmVTdXBwb3J0ICYmIChmb3JtYXRTdXBwb3J0ICYgcmVxdWlyZWRUZXh0dXJlRmxhZ3Mp
ID09IHJlcXVpcmVkVGV4dHVyZUZsYWdzOwotICAgICAgICAgICAgbUZsb2F0MTZGaWx0ZXJTdXBw
b3J0ID0gbUZsb2F0MTZGaWx0ZXJTdXBwb3J0ICYmIChmb3JtYXRTdXBwb3J0ICYgcmVxdWlyZWRG
aWx0ZXJGbGFncykgPT0gcmVxdWlyZWRGaWx0ZXJGbGFnczsKLSAgICAgICAgICAgIG1GbG9hdDE2
UmVuZGVyU3VwcG9ydCA9IG1GbG9hdDE2UmVuZGVyU3VwcG9ydCAmJiAoZm9ybWF0U3VwcG9ydCAm
IHJlcXVpcmVkUmVuZGVyYWJsZUZsYWdzKSA9PSByZXF1aXJlZFJlbmRlcmFibGVGbGFnczsKLSAg
ICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1GbG9hdDE2VGV4
dHVyZVN1cHBvcnQgPSBmYWxzZTsKLSAgICAgICAgICAgIG1GbG9hdDE2UmVuZGVyU3VwcG9ydCA9
IGZhbHNlOwotICAgICAgICAgICAgbUZsb2F0MTZGaWx0ZXJTdXBwb3J0ID0gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBtRmxvYXQzMlRleHR1cmVTdXBwb3J0ID0gdHJ1ZTsKLSAgICBt
RmxvYXQzMkZpbHRlclN1cHBvcnQgPSB0cnVlOwotICAgIG1GbG9hdDMyUmVuZGVyU3VwcG9ydCA9
IHRydWU7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUoZmxvYXQz
MkZvcm1hdHMpOyBpKyspCi0gICAgewotICAgICAgICBpZiAoU1VDQ0VFREVEKG1EZXZpY2UtPkNo
ZWNrRm9ybWF0U3VwcG9ydChmbG9hdDMyRm9ybWF0c1tpXSwgJmZvcm1hdFN1cHBvcnQpKSkKLSAg
ICAgICAgewotICAgICAgICAgICAgbUZsb2F0MzJUZXh0dXJlU3VwcG9ydCA9IG1GbG9hdDMyVGV4
dHVyZVN1cHBvcnQgJiYgKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZFRleHR1cmVGbGFncykgPT0g
cmVxdWlyZWRUZXh0dXJlRmxhZ3M7Ci0gICAgICAgICAgICBtRmxvYXQzMkZpbHRlclN1cHBvcnQg
PSBtRmxvYXQzMkZpbHRlclN1cHBvcnQgJiYgKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZEZpbHRl
ckZsYWdzKSA9PSByZXF1aXJlZEZpbHRlckZsYWdzOwotICAgICAgICAgICAgbUZsb2F0MzJSZW5k
ZXJTdXBwb3J0ID0gbUZsb2F0MzJSZW5kZXJTdXBwb3J0ICYmIChmb3JtYXRTdXBwb3J0ICYgcmVx
dWlyZWRSZW5kZXJhYmxlRmxhZ3MpID09IHJlcXVpcmVkUmVuZGVyYWJsZUZsYWdzOwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbUZsb2F0MzJUZXh0dXJl
U3VwcG9ydCA9IGZhbHNlOwotICAgICAgICAgICAgbUZsb2F0MzJGaWx0ZXJTdXBwb3J0ID0gZmFs
c2U7Ci0gICAgICAgICAgICBtRmxvYXQzMlJlbmRlclN1cHBvcnQgPSBmYWxzZTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIC8vIENoZWNrIGNvbXByZXNzZWQgdGV4dHVyZSBzdXBwb3J0Ci0gICAg
Y29uc3QgdW5zaWduZWQgaW50IHJlcXVpcmVkQ29tcHJlc3NlZFRleHR1cmVGbGFncyA9IEQzRDEx
X0ZPUk1BVF9TVVBQT1JUX1RFWFRVUkUyRDsKLQotICAgIGlmIChTVUNDRUVERUQobURldmljZS0+
Q2hlY2tGb3JtYXRTdXBwb3J0KERYR0lfRk9STUFUX0JDMV9VTk9STSwgJmZvcm1hdFN1cHBvcnQp
KSkKLSAgICB7Ci0gICAgICAgIG1EWFQxVGV4dHVyZVN1cHBvcnQgPSAoZm9ybWF0U3VwcG9ydCAm
IHJlcXVpcmVkQ29tcHJlc3NlZFRleHR1cmVGbGFncykgPT0gcmVxdWlyZWRDb21wcmVzc2VkVGV4
dHVyZUZsYWdzOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBtRFhUMVRleHR1cmVT
dXBwb3J0ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKFNVQ0NFRURFRChtRGV2aWNlLT5DaGVj
a0Zvcm1hdFN1cHBvcnQoRFhHSV9GT1JNQVRfQkMzX1VOT1JNLCAmZm9ybWF0U3VwcG9ydCkpKQot
ICAgIHsKLSAgICAgICAgbURYVDNUZXh0dXJlU3VwcG9ydCA9IChmb3JtYXRTdXBwb3J0ICYgcmVx
dWlyZWRDb21wcmVzc2VkVGV4dHVyZUZsYWdzKSA9PSByZXF1aXJlZENvbXByZXNzZWRUZXh0dXJl
RmxhZ3M7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG1EWFQzVGV4dHVyZVN1cHBv
cnQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoU1VDQ0VFREVEKG1EZXZpY2UtPkNoZWNrRm9y
bWF0U3VwcG9ydChEWEdJX0ZPUk1BVF9CQzVfVU5PUk0sICZmb3JtYXRTdXBwb3J0KSkpCi0gICAg
ewotICAgICAgICBtRFhUNVRleHR1cmVTdXBwb3J0ID0gKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJl
ZENvbXByZXNzZWRUZXh0dXJlRmxhZ3MpID09IHJlcXVpcmVkQ29tcHJlc3NlZFRleHR1cmVGbGFn
czsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgbURYVDVUZXh0dXJlU3VwcG9ydCA9
IGZhbHNlOwotICAgIH0KLQotICAgIC8vIENoZWNrIGRlcHRoIHRleHR1cmUgc3VwcG9ydAotICAg
IERYR0lfRk9STUFUIGRlcHRoVGV4dHVyZUZvcm1hdHNbXSA9Ci0gICAgewotICAgICAgICBEWEdJ
X0ZPUk1BVF9EMTZfVU5PUk0sCi0gICAgICAgIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5U
LAotICAgIH07Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHJlcXVpcmVkRGVwdGhU
ZXh0dXJlRmxhZ3MgPSBEM0QxMV9GT1JNQVRfU1VQUE9SVF9ERVBUSF9TVEVOQ0lMIHwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0Qx
MV9GT1JNQVRfU1VQUE9SVF9URVhUVVJFMkQ7Ci0KLSAgICBtRGVwdGhUZXh0dXJlU3VwcG9ydCA9
IHRydWU7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUoZGVwdGhU
ZXh0dXJlRm9ybWF0cyk7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmIChTVUNDRUVERUQobURldmlj
ZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KGRlcHRoVGV4dHVyZUZvcm1hdHNbaV0sICZmb3JtYXRTdXBw
b3J0KSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXB0aFRleHR1cmVTdXBwb3J0ID0gbURl
cHRoVGV4dHVyZVN1cHBvcnQgJiYgKChmb3JtYXRTdXBwb3J0ICYgcmVxdWlyZWREZXB0aFRleHR1
cmVGbGFncykgPT0gcmVxdWlyZWREZXB0aFRleHR1cmVGbGFncyk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGVwdGhUZXh0dXJlU3VwcG9ydCA9IGZh
bHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIEVHTF9TVUNDRVNTOwotfQotCi0v
LyBkbyBhbnkgb25lLXRpbWUgZGV2aWNlIGluaXRpYWxpemF0aW9uCi0vLyBOT1RFOiB0aGlzIGlz
IGFsc28gbmVlZGVkIGFmdGVyIGEgZGV2aWNlIGxvc3QvcmVzZXQKLS8vIHRvIHJlc2V0IHRoZSBz
Y2VuZSBzdGF0dXMgYW5kIGVuc3VyZSB0aGUgZGVmYXVsdCBzdGF0ZXMgYXJlIHJlc2V0Lgotdm9p
ZCBSZW5kZXJlcjExOjppbml0aWFsaXplRGV2aWNlKCkKLXsKLSAgICBtU3RhdGVDYWNoZS5pbml0
aWFsaXplKG1EZXZpY2UpOwotICAgIG1JbnB1dExheW91dENhY2hlLmluaXRpYWxpemUobURldmlj
ZSwgbURldmljZUNvbnRleHQpOwotCi0gICAgQVNTRVJUKCFtVmVydGV4RGF0YU1hbmFnZXIgJiYg
IW1JbmRleERhdGFNYW5hZ2VyKTsKLSAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBuZXcgVmVydGV4
RGF0YU1hbmFnZXIodGhpcyk7Ci0gICAgbUluZGV4RGF0YU1hbmFnZXIgPSBuZXcgSW5kZXhEYXRh
TWFuYWdlcih0aGlzKTsKLQotICAgIG1hcmtBbGxTdGF0ZURpcnR5KCk7Ci19Ci0KLWludCBSZW5k
ZXJlcjExOjpnZW5lcmF0ZUNvbmZpZ3MoQ29uZmlnRGVzYyAqKmNvbmZpZ0Rlc2NMaXN0KQotewot
ICAgIHVuc2lnbmVkIGludCBudW1SZW5kZXJGb3JtYXRzID0gQXJyYXlTaXplKFJlbmRlclRhcmdl
dEZvcm1hdHMpOwotICAgIHVuc2lnbmVkIGludCBudW1EZXB0aEZvcm1hdHMgPSBBcnJheVNpemUo
RGVwdGhTdGVuY2lsRm9ybWF0cyk7Ci0gICAgKCpjb25maWdEZXNjTGlzdCkgPSBuZXcgQ29uZmln
RGVzY1tudW1SZW5kZXJGb3JtYXRzICogbnVtRGVwdGhGb3JtYXRzXTsKLSAgICBpbnQgbnVtQ29u
ZmlncyA9IDA7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgZm9ybWF0SW5kZXggPSAwOyBm
b3JtYXRJbmRleCA8IG51bVJlbmRlckZvcm1hdHM7IGZvcm1hdEluZGV4KyspCi0gICAgewotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBkZXB0aFN0ZW5jaWxJbmRleCA9IDA7IGRlcHRoU3RlbmNp
bEluZGV4IDwgbnVtRGVwdGhGb3JtYXRzOyBkZXB0aFN0ZW5jaWxJbmRleCsrKQotICAgICAgICB7
Ci0gICAgICAgICAgICBEWEdJX0ZPUk1BVCByZW5kZXJUYXJnZXRGb3JtYXQgPSBSZW5kZXJUYXJn
ZXRGb3JtYXRzW2Zvcm1hdEluZGV4XTsKLQotICAgICAgICAgICAgVUlOVCBmb3JtYXRTdXBwb3J0
ID0gMDsKLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q2hlY2tGb3JtYXRT
dXBwb3J0KHJlbmRlclRhcmdldEZvcm1hdCwgJmZvcm1hdFN1cHBvcnQpOwotCi0gICAgICAgICAg
ICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkgJiYgKGZvcm1hdFN1cHBvcnQgJiBEM0QxMV9GT1JNQVRf
U1VQUE9SVF9SRU5ERVJfVEFSR0VUKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBE
WEdJX0ZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXQgPSBEZXB0aFN0ZW5jaWxGb3JtYXRzW2RlcHRo
U3RlbmNpbEluZGV4XTsKLQotICAgICAgICAgICAgICAgIGJvb2wgZGVwdGhTdGVuY2lsRm9ybWF0
T0sgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgaWYgKGRlcHRoU3RlbmNpbEZvcm1hdCAhPSBE
WEdJX0ZPUk1BVF9VTktOT1dOKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgVUlOVCBmb3JtYXRTdXBwb3J0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
bURldmljZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KGRlcHRoU3RlbmNpbEZvcm1hdCwgJmZvcm1hdFN1
cHBvcnQpOwotICAgICAgICAgICAgICAgICAgICBkZXB0aFN0ZW5jaWxGb3JtYXRPSyA9IFNVQ0NF
RURFRChyZXN1bHQpICYmIChmb3JtYXRTdXBwb3J0ICYgRDNEMTFfRk9STUFUX1NVUFBPUlRfREVQ
VEhfU1RFTkNJTCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGRl
cHRoU3RlbmNpbEZvcm1hdE9LKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgQ29uZmlnRGVzYyBuZXdDb25maWc7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5y
ZW5kZXJUYXJnZXRGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVydEJhY2tCdWZmZXJGb3JtYXQocmVu
ZGVyVGFyZ2V0Rm9ybWF0KTsKLSAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmRlcHRoU3Rl
bmNpbEZvcm1hdCA9IGQzZDExX2dsOjpDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KGRlcHRoU3Rl
bmNpbEZvcm1hdCk7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5tdWx0aVNhbXBsZSA9
IDA7ICAgICAvLyBGSVhNRTogZW51bWVyYXRlIG11bHRpLXNhbXBsaW5nCi0gICAgICAgICAgICAg
ICAgICAgIG5ld0NvbmZpZy5mYXN0Q29uZmlnID0gdHJ1ZTsgICAvLyBBc3N1bWUgYWxsIERYMTEg
Zm9ybWF0IGNvbnZlcnNpb25zIHRvIGJlIGZhc3QKLQotICAgICAgICAgICAgICAgICAgICAoKmNv
bmZpZ0Rlc2NMaXN0KVtudW1Db25maWdzKytdID0gbmV3Q29uZmlnOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBudW1Db25m
aWdzOwotfQotCi12b2lkIFJlbmRlcmVyMTE6OmRlbGV0ZUNvbmZpZ3MoQ29uZmlnRGVzYyAqY29u
ZmlnRGVzY0xpc3QpCi17Ci0gICAgZGVsZXRlIFtdIChjb25maWdEZXNjTGlzdCk7Ci19Ci0KLXZv
aWQgUmVuZGVyZXIxMTo6c3luYyhib29sIGJsb2NrKQotewotICAgIGlmIChibG9jaykKLSAgICB7
Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0OwotCi0gICAgICAgIGlmICghbVN5bmNRdWVyeSkKLSAg
ICAgICAgewotICAgICAgICAgICAgRDNEMTFfUVVFUllfREVTQyBxdWVyeURlc2M7Ci0gICAgICAg
ICAgICBxdWVyeURlc2MuUXVlcnkgPSBEM0QxMV9RVUVSWV9FVkVOVDsKLSAgICAgICAgICAgIHF1
ZXJ5RGVzYy5NaXNjRmxhZ3MgPSAwOwotCi0gICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5D
cmVhdGVRdWVyeSgmcXVlcnlEZXNjLCAmbVN5bmNRdWVyeSk7Ci0gICAgICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgbURldmljZUNvbnRleHQt
PkVuZChtU3luY1F1ZXJ5KTsKLSAgICAgICAgbURldmljZUNvbnRleHQtPkZsdXNoKCk7Ci0KLSAg
ICAgICAgZG8KLSAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZUNvbnRleHQt
PkdldERhdGEobVN5bmNRdWVyeSwgTlVMTCwgMCwgRDNEMTFfQVNZTkNfR0VUREFUQV9ET05PVEZM
VVNIKTsKLQotICAgICAgICAgICAgLy8gS2VlcCBwb2xsaW5nLCBidXQgYWxsb3cgb3RoZXIgdGhy
ZWFkcyB0byBkbyBzb21ldGhpbmcgdXNlZnVsIGZpcnN0Ci0gICAgICAgICAgICBTbGVlcCgwKTsK
LQotICAgICAgICAgICAgaWYgKHRlc3REZXZpY2VMb3N0KHRydWUpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICB3aGlsZSAocmVzdWx0ID09IFNfRkFMU0UpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAg
ICAgICBtRGV2aWNlQ29udGV4dC0+Rmx1c2goKTsKLSAgICB9Ci19Ci0KLVN3YXBDaGFpbiAqUmVu
ZGVyZXIxMTo6Y3JlYXRlU3dhcENoYWluKEhXTkQgd2luZG93LCBIQU5ETEUgc2hhcmVIYW5kbGUs
IEdMZW51bSBiYWNrQnVmZmVyRm9ybWF0LCBHTGVudW0gZGVwdGhCdWZmZXJGb3JtYXQpCi17Ci0g
ICAgcmV0dXJuIG5ldyByeDo6U3dhcENoYWluMTEodGhpcywgd2luZG93LCBzaGFyZUhhbmRsZSwg
YmFja0J1ZmZlckZvcm1hdCwgZGVwdGhCdWZmZXJGb3JtYXQpOwotfQotCi12b2lkIFJlbmRlcmVy
MTE6OnNldFNhbXBsZXJTdGF0ZShnbDo6U2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBjb25z
dCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gZ2w6
OlNBTVBMRVJfUElYRUwpCi0gICAgewotICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49
IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKLSAgICAgICAgewotICAgICAgICAgICAgRVJS
KCJQaXhlbCBzaGFkZXIgc2FtcGxlciBpbmRleCAlaSBpcyBub3QgdmFsaWQuIiwgaW5kZXgpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1Gb3JjZVNldFBp
eGVsU2FtcGxlclN0YXRlc1tpbmRleF0gfHwgbWVtY21wKCZzYW1wbGVyU3RhdGUsICZtQ3VyUGl4
ZWxTYW1wbGVyU3RhdGVzW2luZGV4XSwgc2l6ZW9mKGdsOjpTYW1wbGVyU3RhdGUpKSAhPSAwKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBJRDNEMTFTYW1wbGVyU3RhdGUgKmR4U2FtcGxlclN0YXRl
ID0gbVN0YXRlQ2FjaGUuZ2V0U2FtcGxlclN0YXRlKHNhbXBsZXJTdGF0ZSk7Ci0KLSAgICAgICAg
ICAgIGlmICghZHhTYW1wbGVyU3RhdGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
RVJSKCJOVUxMIHNhbXBsZXIgc3RhdGUgcmV0dXJuZWQgYnkgUmVuZGVyU3RhdGVDYWNoZTo6Z2V0
U2FtcGxlclN0YXRlLCBzZXR0aW5nIHRoZSBkZWZhdWx0IgotICAgICAgICAgICAgICAgICAgICAi
c2FtcGxlciBzdGF0ZSBmb3IgcGl4ZWwgc2hhZGVycyBhdCBzbG90ICVpLiIsIGluZGV4KTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgbURldmljZUNvbnRleHQtPlBTU2V0U2FtcGxlcnMo
aW5kZXgsIDEsICZkeFNhbXBsZXJTdGF0ZSk7Ci0KLSAgICAgICAgICAgIG1DdXJQaXhlbFNhbXBs
ZXJTdGF0ZXNbaW5kZXhdID0gc2FtcGxlclN0YXRlOwotICAgICAgICB9Ci0KLSAgICAgICAgbUZv
cmNlU2V0UGl4ZWxTYW1wbGVyU3RhdGVzW2luZGV4XSA9IGZhbHNlOwotICAgIH0KLSAgICBlbHNl
IGlmICh0eXBlID09IGdsOjpTQU1QTEVSX1ZFUlRFWCkKLSAgICB7Ci0gICAgICAgIGlmIChpbmRl
eCA8IDAgfHwgaW5kZXggPj0gKGludClnZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIlZlcnRleCBzaGFkZXIgc2FtcGxlciBpbmRleCAl
aSBpcyBub3QgdmFsaWQuIiwgaW5kZXgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKG1Gb3JjZVNldFZlcnRleFNhbXBsZXJTdGF0ZXNbaW5kZXhdIHx8IG1l
bWNtcCgmc2FtcGxlclN0YXRlLCAmbUN1clZlcnRleFNhbXBsZXJTdGF0ZXNbaW5kZXhdLCBzaXpl
b2YoZ2w6OlNhbXBsZXJTdGF0ZSkpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIElEM0Qx
MVNhbXBsZXJTdGF0ZSAqZHhTYW1wbGVyU3RhdGUgPSBtU3RhdGVDYWNoZS5nZXRTYW1wbGVyU3Rh
dGUoc2FtcGxlclN0YXRlKTsKLQotICAgICAgICAgICAgaWYgKCFkeFNhbXBsZXJTdGF0ZSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBFUlIoIk5VTEwgc2FtcGxlciBzdGF0ZSByZXR1
cm5lZCBieSBSZW5kZXJTdGF0ZUNhY2hlOjpnZXRTYW1wbGVyU3RhdGUsIHNldHRpbmcgdGhlIGRl
ZmF1bHQiCi0gICAgICAgICAgICAgICAgICAgICJzYW1wbGVyIHN0YXRlIGZvciB2ZXJ0ZXggc2hh
ZGVycyBhdCBzbG90ICVpLiIsIGluZGV4KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
bURldmljZUNvbnRleHQtPlZTU2V0U2FtcGxlcnMoaW5kZXgsIDEsICZkeFNhbXBsZXJTdGF0ZSk7
Ci0KLSAgICAgICAgICAgIG1DdXJWZXJ0ZXhTYW1wbGVyU3RhdGVzW2luZGV4XSA9IHNhbXBsZXJT
dGF0ZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1Gb3JjZVNldFZlcnRleFNhbXBsZXJTdGF0ZXNb
aW5kZXhdID0gZmFsc2U7Ci0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLX0KLQotdm9p
ZCBSZW5kZXJlcjExOjpzZXRUZXh0dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgs
IGdsOjpUZXh0dXJlICp0ZXh0dXJlKQotewotICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAq
dGV4dHVyZVNSViA9IE5VTEw7Ci0gICAgdW5zaWduZWQgaW50IHNlcmlhbCA9IDA7Ci0gICAgYm9v
bCBmb3JjZVNldFRleHR1cmUgPSBmYWxzZTsKLQotICAgIGlmICh0ZXh0dXJlKQotICAgIHsKLSAg
ICAgICAgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKnRleFN0b3JhZ2UgPSB0ZXh0dXJlLT5nZXRO
YXRpdmVUZXh0dXJlKCk7Ci0gICAgICAgIGlmICh0ZXhTdG9yYWdlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBUZXh0dXJlU3RvcmFnZTExICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFnZTExOjpt
YWtlVGV4dHVyZVN0b3JhZ2UxMSh0ZXhTdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0g
ICAgICAgICAgICB0ZXh0dXJlU1JWID0gc3RvcmFnZTExLT5nZXRTUlYoKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIElmIHdlIGdldCBOVUxMIGJhY2sgZnJvbSBnZXRTUlYgaGVyZSwgc29tZXRo
aW5nIHdlbnQgd3JvbmcgaW4gdGhlIHRleHR1cmUgY2xhc3MgYW5kIHdlJ3JlIHVuZXhwZWN0ZWRs
eQotICAgICAgICAvLyBtaXNzaW5nIHRoZSBzaGFkZXIgcmVzb3VyY2UgdmlldwotICAgICAgICBB
U1NFUlQodGV4dHVyZVNSViAhPSBOVUxMKTsKLQotICAgICAgICBzZXJpYWwgPSB0ZXh0dXJlLT5n
ZXRUZXh0dXJlU2VyaWFsKCk7Ci0gICAgICAgIGZvcmNlU2V0VGV4dHVyZSA9IHRleHR1cmUtPmhh
c0RpcnR5SW1hZ2VzKCk7Ci0gICAgfQotCi0gICAgaWYgKHR5cGUgPT0gZ2w6OlNBTVBMRVJfUElY
RUwpCi0gICAgewotICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGdsOjpNQVhfVEVY
VFVSRV9JTUFHRV9VTklUUykKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJQaXhlbCBzaGFk
ZXIgc2FtcGxlciBpbmRleCAlaSBpcyBub3QgdmFsaWQuIiwgaW5kZXgpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGZvcmNlU2V0VGV4dHVyZSB8fCBtQ3Vy
UGl4ZWxUZXh0dXJlU2VyaWFsc1tpbmRleF0gIT0gc2VyaWFsKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXJSZXNvdXJjZXMoaW5kZXgsIDEsICZ0ZXh0
dXJlU1JWKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1DdXJQaXhlbFRleHR1cmVTZXJpYWxzW2lu
ZGV4XSA9IHNlcmlhbDsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBnbDo6U0FNUExFUl9W
RVJURVgpCi0gICAgewotICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IChpbnQpZ2V0
TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJS
KCJWZXJ0ZXggc2hhZGVyIHNhbXBsZXIgaW5kZXggJWkgaXMgbm90IHZhbGlkLiIsIGluZGV4KTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChmb3JjZVNldFRl
eHR1cmUgfHwgbUN1clZlcnRleFRleHR1cmVTZXJpYWxzW2luZGV4XSAhPSBzZXJpYWwpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5WU1NldFNoYWRlclJlc291cmNlcyhp
bmRleCwgMSwgJnRleHR1cmVTUlYpOwotICAgICAgICB9Ci0KLSAgICAgICAgbUN1clZlcnRleFRl
eHR1cmVTZXJpYWxzW2luZGV4XSA9IHNlcmlhbDsKLSAgICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJM
RSgpOwotfQotCi12b2lkIFJlbmRlcmVyMTE6OnNldFJhc3Rlcml6ZXJTdGF0ZShjb25zdCBnbDo6
UmFzdGVyaXplclN0YXRlICZyYXN0ZXJTdGF0ZSkKLXsKLSAgICBpZiAobUZvcmNlU2V0UmFzdGVy
U3RhdGUgfHwgbWVtY21wKCZyYXN0ZXJTdGF0ZSwgJm1DdXJSYXN0ZXJTdGF0ZSwgc2l6ZW9mKGds
OjpSYXN0ZXJpemVyU3RhdGUpKSAhPSAwKQotICAgIHsKLSAgICAgICAgSUQzRDExUmFzdGVyaXpl
clN0YXRlICpkeFJhc3RlclN0YXRlID0gbVN0YXRlQ2FjaGUuZ2V0UmFzdGVyaXplclN0YXRlKHJh
c3RlclN0YXRlLCBtU2Npc3NvckVuYWJsZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ3VyRGVw
dGhTaXplKTsKLSAgICAgICAgaWYgKCFkeFJhc3RlclN0YXRlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBFUlIoIk5VTEwgcmFzdGVyaXplciBzdGF0ZSByZXR1cm5lZCBieSBSZW5kZXJTdGF0ZUNh
Y2hlOjpnZXRSYXN0ZXJpemVyU3RhdGUsIHNldHRpbmcgdGhlIGRlZmF1bHQiCi0gICAgICAgICAg
ICAgICAgInJhc3Rlcml6ZXIgc3RhdGUuIik7Ci0gICAgICAgIH0KLQotICAgICAgICBtRGV2aWNl
Q29udGV4dC0+UlNTZXRTdGF0ZShkeFJhc3RlclN0YXRlKTsKLQotICAgICAgICBtQ3VyUmFzdGVy
U3RhdGUgPSByYXN0ZXJTdGF0ZTsKLSAgICB9Ci0KLSAgICBtRm9yY2VTZXRSYXN0ZXJTdGF0ZSA9
IGZhbHNlOwotfQotCi12b2lkIFJlbmRlcmVyMTE6OnNldEJsZW5kU3RhdGUoY29uc3QgZ2w6OkJs
ZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xvciAmYmxlbmRDb2xvciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlTWFzaykKLXsKLSAg
ICBpZiAobUZvcmNlU2V0QmxlbmRTdGF0ZSB8fAotICAgICAgICBtZW1jbXAoJmJsZW5kU3RhdGUs
ICZtQ3VyQmxlbmRTdGF0ZSwgc2l6ZW9mKGdsOjpCbGVuZFN0YXRlKSkgIT0gMCB8fAotICAgICAg
ICBtZW1jbXAoJmJsZW5kQ29sb3IsICZtQ3VyQmxlbmRDb2xvciwgc2l6ZW9mKGdsOjpDb2xvcikp
ICE9IDAgfHwKLSAgICAgICAgc2FtcGxlTWFzayAhPSBtQ3VyU2FtcGxlTWFzaykKLSAgICB7Ci0g
ICAgICAgIElEM0QxMUJsZW5kU3RhdGUgKmR4QmxlbmRTdGF0ZSA9IG1TdGF0ZUNhY2hlLmdldEJs
ZW5kU3RhdGUoYmxlbmRTdGF0ZSk7Ci0gICAgICAgIGlmICghZHhCbGVuZFN0YXRlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBFUlIoIk5VTEwgYmxlbmQgc3RhdGUgcmV0dXJuZWQgYnkgUmVuZGVy
U3RhdGVDYWNoZTo6Z2V0QmxlbmRTdGF0ZSwgc2V0dGluZyB0aGUgZGVmYXVsdCAiCi0gICAgICAg
ICAgICAgICAgImJsZW5kIHN0YXRlLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgZmxvYXQgYmxl
bmRDb2xvcnNbNF0gPSB7MC4wZn07Ci0gICAgICAgIGlmIChibGVuZFN0YXRlLnNvdXJjZUJsZW5k
UkdCICE9IEdMX0NPTlNUQU5UX0FMUEhBICYmIGJsZW5kU3RhdGUuc291cmNlQmxlbmRSR0IgIT0g
R0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBICYmCi0gICAgICAgICAgICBibGVuZFN0YXRlLmRl
c3RCbGVuZFJHQiAhPSBHTF9DT05TVEFOVF9BTFBIQSAmJiBibGVuZFN0YXRlLmRlc3RCbGVuZFJH
QiAhPSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGJsZW5kQ29sb3JzWzBdID0gYmxlbmRDb2xvci5yZWQ7Ci0gICAgICAgICAgICBibGVuZENvbG9y
c1sxXSA9IGJsZW5kQ29sb3IuZ3JlZW47Ci0gICAgICAgICAgICBibGVuZENvbG9yc1syXSA9IGJs
ZW5kQ29sb3IuYmx1ZTsKLSAgICAgICAgICAgIGJsZW5kQ29sb3JzWzNdID0gYmxlbmRDb2xvci5h
bHBoYTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJs
ZW5kQ29sb3JzWzBdID0gYmxlbmRDb2xvci5hbHBoYTsKLSAgICAgICAgICAgIGJsZW5kQ29sb3Jz
WzFdID0gYmxlbmRDb2xvci5hbHBoYTsKLSAgICAgICAgICAgIGJsZW5kQ29sb3JzWzJdID0gYmxl
bmRDb2xvci5hbHBoYTsKLSAgICAgICAgICAgIGJsZW5kQ29sb3JzWzNdID0gYmxlbmRDb2xvci5h
bHBoYTsKLSAgICAgICAgfQotCi0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldEJsZW5kU3Rh
dGUoZHhCbGVuZFN0YXRlLCBibGVuZENvbG9ycywgc2FtcGxlTWFzayk7Ci0KLSAgICAgICAgbUN1
ckJsZW5kU3RhdGUgPSBibGVuZFN0YXRlOwotICAgICAgICBtQ3VyQmxlbmRDb2xvciA9IGJsZW5k
Q29sb3I7Ci0gICAgICAgIG1DdXJTYW1wbGVNYXNrID0gc2FtcGxlTWFzazsKLSAgICB9Ci0KLSAg
ICBtRm9yY2VTZXRCbGVuZFN0YXRlID0gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyZXIxMTo6c2V0
RGVwdGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZkZXB0aFN0ZW5j
aWxTdGF0ZSwgaW50IHN0ZW5jaWxSZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBzdGVuY2lsQmFja1JlZiwgYm9vbCBmcm9udEZhY2VDQ1cpCi17Ci0gICAgaWYg
KG1Gb3JjZVNldERlcHRoU3RlbmNpbFN0YXRlIHx8Ci0gICAgICAgIG1lbWNtcCgmZGVwdGhTdGVu
Y2lsU3RhdGUsICZtQ3VyRGVwdGhTdGVuY2lsU3RhdGUsIHNpemVvZihnbDo6RGVwdGhTdGVuY2ls
U3RhdGUpKSAhPSAwIHx8Ci0gICAgICAgIHN0ZW5jaWxSZWYgIT0gbUN1clN0ZW5jaWxSZWYgfHwg
c3RlbmNpbEJhY2tSZWYgIT0gbUN1clN0ZW5jaWxCYWNrUmVmKQotICAgIHsKLSAgICAgICAgaWYg
KGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sgIT0gZGVwdGhTdGVuY2lsU3RhdGUu
c3RlbmNpbEJhY2tXcml0ZW1hc2sgfHwKLSAgICAgICAgICAgIHN0ZW5jaWxSZWYgIT0gc3RlbmNp
bEJhY2tSZWYgfHwKLSAgICAgICAgICAgIGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxNYXNrICE9
IGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxCYWNrTWFzaykKLSAgICAgICAgewotICAgICAgICAg
ICAgRVJSKCJTZXBhcmF0ZSBmcm9udC9iYWNrIHN0ZW5jaWwgd3JpdGVtYXNrcywgcmVmZXJlbmNl
IHZhbHVlcywgb3Igc3RlbmNpbCBtYXNrIHZhbHVlcyBhcmUgIgotICAgICAgICAgICAgICAgICJp
bnZhbGlkIHVuZGVyIFdlYkdMLiIpOwotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLQotICAgICAgICBJRDNEMTFEZXB0aFN0ZW5j
aWxTdGF0ZSAqZHhEZXB0aFN0ZW5jaWxTdGF0ZSA9IG1TdGF0ZUNhY2hlLmdldERlcHRoU3RlbmNp
bFN0YXRlKGRlcHRoU3RlbmNpbFN0YXRlKTsKLSAgICAgICAgaWYgKCFkeERlcHRoU3RlbmNpbFN0
YXRlKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIk5VTEwgZGVwdGggc3RlbmNpbCBzdGF0
ZSByZXR1cm5lZCBieSBSZW5kZXJTdGF0ZUNhY2hlOjpnZXREZXB0aFN0ZW5jaWxTdGF0ZSwgIgot
ICAgICAgICAgICAgICAgICJzZXR0aW5nIHRoZSBkZWZhdWx0IGRlcHRoIHN0ZW5jaWwgc3RhdGUu
Iik7Ci0gICAgICAgIH0KLQotICAgICAgICBtRGV2aWNlQ29udGV4dC0+T01TZXREZXB0aFN0ZW5j
aWxTdGF0ZShkeERlcHRoU3RlbmNpbFN0YXRlLCBzdGF0aWNfY2FzdDxVSU5UPihzdGVuY2lsUmVm
KSk7Ci0KLSAgICAgICAgbUN1ckRlcHRoU3RlbmNpbFN0YXRlID0gZGVwdGhTdGVuY2lsU3RhdGU7
Ci0gICAgICAgIG1DdXJTdGVuY2lsUmVmID0gc3RlbmNpbFJlZjsKLSAgICAgICAgbUN1clN0ZW5j
aWxCYWNrUmVmID0gc3RlbmNpbEJhY2tSZWY7Ci0gICAgfQotCi0gICAgbUZvcmNlU2V0RGVwdGhT
dGVuY2lsU3RhdGUgPSBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJlcjExOjpzZXRTY2lzc29yUmVj
dGFuZ2xlKGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNjaXNzb3IsIGJvb2wgZW5hYmxlZCkKLXsKLSAg
ICBpZiAobUZvcmNlU2V0U2Npc3NvciB8fCBtZW1jbXAoJnNjaXNzb3IsICZtQ3VyU2Npc3Nvciwg
c2l6ZW9mKGdsOjpSZWN0YW5nbGUpKSAhPSAwIHx8Ci0gICAgICAgIGVuYWJsZWQgIT0gbVNjaXNz
b3JFbmFibGVkKQotICAgIHsKLSAgICAgICAgaWYgKGVuYWJsZWQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEQzRDExX1JFQ1QgcmVjdDsKLSAgICAgICAgICAgIHJlY3QubGVmdCA9IHN0ZDo6bWF4
KDAsIHNjaXNzb3IueCk7Ci0gICAgICAgICAgICByZWN0LnRvcCA9IHN0ZDo6bWF4KDAsIHNjaXNz
b3IueSk7Ci0gICAgICAgICAgICByZWN0LnJpZ2h0ID0gc2Npc3Nvci54ICsgc3RkOjptYXgoMCwg
c2Npc3Nvci53aWR0aCk7Ci0gICAgICAgICAgICByZWN0LmJvdHRvbSA9IHNjaXNzb3IueSArIHN0
ZDo6bWF4KDAsIHNjaXNzb3IuaGVpZ2h0KTsKLQotICAgICAgICAgICAgbURldmljZUNvbnRleHQt
PlJTU2V0U2Npc3NvclJlY3RzKDEsICZyZWN0KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChl
bmFibGVkICE9IG1TY2lzc29yRW5hYmxlZCkKLSAgICAgICAgewotICAgICAgICAgICAgbUZvcmNl
U2V0UmFzdGVyU3RhdGUgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgbUN1clNjaXNzb3Ig
PSBzY2lzc29yOwotICAgICAgICBtU2Npc3NvckVuYWJsZWQgPSBlbmFibGVkOwotICAgIH0KLQot
ICAgIG1Gb3JjZVNldFNjaXNzb3IgPSBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJlcjExOjpzZXRW
aWV3cG9ydChjb25zdCBnbDo6UmVjdGFuZ2xlICZ2aWV3cG9ydCwgZmxvYXQgek5lYXIsIGZsb2F0
IHpGYXIsIEdMZW51bSBkcmF3TW9kZSwgR0xlbnVtIGZyb250RmFjZSwgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgaWdub3JlVmlld3BvcnQpCi17Ci0gICAgZ2w6OlJlY3Rhbmds
ZSBhY3R1YWxWaWV3cG9ydCA9IHZpZXdwb3J0OwotICAgIGZsb2F0IGFjdHVhbFpOZWFyID0gZ2w6
OmNsYW1wMDEoek5lYXIpOwotICAgIGZsb2F0IGFjdHVhbFpGYXIgPSBnbDo6Y2xhbXAwMSh6RmFy
KTsKLSAgICBpZiAoaWdub3JlVmlld3BvcnQpCi0gICAgewotICAgICAgICBhY3R1YWxWaWV3cG9y
dC54ID0gMDsKLSAgICAgICAgYWN0dWFsVmlld3BvcnQueSA9IDA7Ci0gICAgICAgIGFjdHVhbFZp
ZXdwb3J0LndpZHRoID0gbVJlbmRlclRhcmdldERlc2Mud2lkdGg7Ci0gICAgICAgIGFjdHVhbFZp
ZXdwb3J0LmhlaWdodCA9IG1SZW5kZXJUYXJnZXREZXNjLmhlaWdodDsKLSAgICAgICAgYWN0dWFs
Wk5lYXIgPSAwLjBmOwotICAgICAgICBhY3R1YWxaRmFyID0gMS4wZjsKLSAgICB9Ci0KLSAgICAv
LyBHZXQgRDNEIHZpZXdwb3J0IGJvdW5kcywgd2hpY2ggZGVwZW5kcyBvbiB0aGUgZmVhdHVyZSBs
ZXZlbAotICAgIGNvbnN0IFJhbmdlJiB2aWV3cG9ydEJvdW5kcyA9IGdldFZpZXdwb3J0Qm91bmRz
KCk7Ci0KLSAgICAvLyBDbGFtcCB3aWR0aCBhbmQgaGVpZ2h0IGZpcnN0IHRvIHRoZSBnbCBtYXhp
bXVtLCB0aGVuIGNsYW1wIGZ1cnRoZXIgaWYgd2UgZXh0ZW5kIHBhc3QgdGhlIEQzRCBtYXhpbXVt
IGJvdW5kcwotICAgIEQzRDExX1ZJRVdQT1JUIGR4Vmlld3BvcnQ7Ci0gICAgZHhWaWV3cG9ydC5U
b3BMZWZ0WCA9IGdsOjpjbGFtcChhY3R1YWxWaWV3cG9ydC54LCB2aWV3cG9ydEJvdW5kcy5zdGFy
dCwgdmlld3BvcnRCb3VuZHMuZW5kKTsKLSAgICBkeFZpZXdwb3J0LlRvcExlZnRZID0gZ2w6OmNs
YW1wKGFjdHVhbFZpZXdwb3J0LnksIHZpZXdwb3J0Qm91bmRzLnN0YXJ0LCB2aWV3cG9ydEJvdW5k
cy5lbmQpOwotICAgIGR4Vmlld3BvcnQuV2lkdGggPSBnbDo6Y2xhbXAoYWN0dWFsVmlld3BvcnQu
d2lkdGgsIDAsIGdldE1heFZpZXdwb3J0RGltZW5zaW9uKCkpOwotICAgIGR4Vmlld3BvcnQuSGVp
Z2h0ID0gZ2w6OmNsYW1wKGFjdHVhbFZpZXdwb3J0LmhlaWdodCwgMCwgZ2V0TWF4Vmlld3BvcnRE
aW1lbnNpb24oKSk7Ci0gICAgZHhWaWV3cG9ydC5XaWR0aCA9IHN0ZDo6bWluKChpbnQpZHhWaWV3
cG9ydC5XaWR0aCwgdmlld3BvcnRCb3VuZHMuZW5kIC0gc3RhdGljX2Nhc3Q8aW50PihkeFZpZXdw
b3J0LlRvcExlZnRYKSk7Ci0gICAgZHhWaWV3cG9ydC5IZWlnaHQgPSBzdGQ6Om1pbigoaW50KWR4
Vmlld3BvcnQuSGVpZ2h0LCB2aWV3cG9ydEJvdW5kcy5lbmQgLSBzdGF0aWNfY2FzdDxpbnQ+KGR4
Vmlld3BvcnQuVG9wTGVmdFkpKTsKLSAgICBkeFZpZXdwb3J0Lk1pbkRlcHRoID0gYWN0dWFsWk5l
YXI7Ci0gICAgZHhWaWV3cG9ydC5NYXhEZXB0aCA9IGFjdHVhbFpGYXI7Ci0KLSAgICBpZiAoZHhW
aWV3cG9ydC5XaWR0aCA8PSAwIHx8IGR4Vmlld3BvcnQuSGVpZ2h0IDw9IDApCi0gICAgewotICAg
ICAgICByZXR1cm4gZmFsc2U7ICAgLy8gTm90aGluZyB0byByZW5kZXIKLSAgICB9Ci0KLSAgICBi
b29sIHZpZXdwb3J0Q2hhbmdlZCA9IG1Gb3JjZVNldFZpZXdwb3J0IHx8IG1lbWNtcCgmYWN0dWFs
Vmlld3BvcnQsICZtQ3VyVmlld3BvcnQsIHNpemVvZihnbDo6UmVjdGFuZ2xlKSkgIT0gMCB8fAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsWk5lYXIgIT0gbUN1ck5lYXIgfHwgYWN0
dWFsWkZhciAhPSBtQ3VyRmFyOwotCi0gICAgaWYgKHZpZXdwb3J0Q2hhbmdlZCkKLSAgICB7Ci0g
ICAgICAgIG1EZXZpY2VDb250ZXh0LT5SU1NldFZpZXdwb3J0cygxLCAmZHhWaWV3cG9ydCk7Ci0K
LSAgICAgICAgbUN1clZpZXdwb3J0ID0gYWN0dWFsVmlld3BvcnQ7Ci0gICAgICAgIG1DdXJOZWFy
ID0gYWN0dWFsWk5lYXI7Ci0gICAgICAgIG1DdXJGYXIgPSBhY3R1YWxaRmFyOwotCi0gICAgICAg
IG1QaXhlbENvbnN0YW50cy52aWV3Q29vcmRzWzBdID0gYWN0dWFsVmlld3BvcnQud2lkdGggICog
MC41ZjsKLSAgICAgICAgbVBpeGVsQ29uc3RhbnRzLnZpZXdDb29yZHNbMV0gPSBhY3R1YWxWaWV3
cG9ydC5oZWlnaHQgKiAwLjVmOwotICAgICAgICBtUGl4ZWxDb25zdGFudHMudmlld0Nvb3Jkc1sy
XSA9IGFjdHVhbFZpZXdwb3J0LnggKyAoYWN0dWFsVmlld3BvcnQud2lkdGggICogMC41Zik7Ci0g
ICAgICAgIG1QaXhlbENvbnN0YW50cy52aWV3Q29vcmRzWzNdID0gYWN0dWFsVmlld3BvcnQueSAr
IChhY3R1YWxWaWV3cG9ydC5oZWlnaHQgKiAwLjVmKTsKLQotICAgICAgICBtUGl4ZWxDb25zdGFu
dHMuZGVwdGhGcm9udFswXSA9IChhY3R1YWxaRmFyIC0gYWN0dWFsWk5lYXIpICogMC41ZjsKLSAg
ICAgICAgbVBpeGVsQ29uc3RhbnRzLmRlcHRoRnJvbnRbMV0gPSAoYWN0dWFsWk5lYXIgKyBhY3R1
YWxaRmFyKSAqIDAuNWY7Ci0KLSAgICAgICAgbVZlcnRleENvbnN0YW50cy5kZXB0aFJhbmdlWzBd
ID0gYWN0dWFsWk5lYXI7Ci0gICAgICAgIG1WZXJ0ZXhDb25zdGFudHMuZGVwdGhSYW5nZVsxXSA9
IGFjdHVhbFpGYXI7Ci0gICAgICAgIG1WZXJ0ZXhDb25zdGFudHMuZGVwdGhSYW5nZVsyXSA9IGFj
dHVhbFpGYXIgLSBhY3R1YWxaTmVhcjsKLQotICAgICAgICBtUGl4ZWxDb25zdGFudHMuZGVwdGhS
YW5nZVswXSA9IGFjdHVhbFpOZWFyOwotICAgICAgICBtUGl4ZWxDb25zdGFudHMuZGVwdGhSYW5n
ZVsxXSA9IGFjdHVhbFpGYXI7Ci0gICAgICAgIG1QaXhlbENvbnN0YW50cy5kZXB0aFJhbmdlWzJd
ID0gYWN0dWFsWkZhciAtIGFjdHVhbFpOZWFyOwotICAgIH0KLQotICAgIG1Gb3JjZVNldFZpZXdw
b3J0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUmVuZGVyZXIxMTo6YXBw
bHlQcmltaXRpdmVUeXBlKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50KQotewotICAgIEQzRDEx
X1BSSU1JVElWRV9UT1BPTE9HWSBwcmltaXRpdmVUb3BvbG9neSA9IEQzRF9QUklNSVRJVkVfVE9Q
T0xPR1lfVU5ERUZJTkVEOwotCi0gICAgR0xzaXplaSBtaW5Db3VudCA9IDA7Ci0KLSAgICBzd2l0
Y2ggKG1vZGUpCi0gICAgewotICAgICAgY2FzZSBHTF9QT0lOVFM6ICAgICAgICAgcHJpbWl0aXZl
VG9wb2xvZ3kgPSBEM0QxMV9QUklNSVRJVkVfVE9QT0xPR1lfUE9JTlRMSVNUOyAgIG1pbkNvdW50
ID0gMTsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xJTkVTOiAgICAgICAgICBwcmltaXRpdmVUb3Bv
bG9neSA9IEQzRF9QUklNSVRJVkVfVE9QT0xPR1lfTElORUxJU1Q7ICAgICAgbWluQ291bnQgPSAy
OyBicmVhazsKLSAgICAgIGNhc2UgR0xfTElORV9MT09QOiAgICAgIHByaW1pdGl2ZVRvcG9sb2d5
ID0gRDNEX1BSSU1JVElWRV9UT1BPTE9HWV9MSU5FU1RSSVA7ICAgICBtaW5Db3VudCA9IDI7IGJy
ZWFrOwotICAgICAgY2FzZSBHTF9MSU5FX1NUUklQOiAgICAgcHJpbWl0aXZlVG9wb2xvZ3kgPSBE
M0RfUFJJTUlUSVZFX1RPUE9MT0dZX0xJTkVTVFJJUDsgICAgIG1pbkNvdW50ID0gMjsgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX1RSSUFOR0xFUzogICAgICBwcmltaXRpdmVUb3BvbG9neSA9IEQzRF9Q
UklNSVRJVkVfVE9QT0xPR1lfVFJJQU5HTEVMSVNUOyAgbWluQ291bnQgPSAzOyBicmVhazsKLSAg
ICAgIGNhc2UgR0xfVFJJQU5HTEVfU1RSSVA6IHByaW1pdGl2ZVRvcG9sb2d5ID0gRDNEX1BSSU1J
VElWRV9UT1BPTE9HWV9UUklBTkdMRVNUUklQOyBtaW5Db3VudCA9IDM7IGJyZWFrOwotICAgICAg
ICAgIC8vIGVtdWxhdGUgZmFucyB2aWEgcmV3cml0aW5nIGluZGV4IGJ1ZmZlcgotICAgICAgY2Fz
ZSBHTF9UUklBTkdMRV9GQU46ICAgcHJpbWl0aXZlVG9wb2xvZ3kgPSBEM0RfUFJJTUlUSVZFX1RP
UE9MT0dZX1RSSUFOR0xFTElTVDsgIG1pbkNvdW50ID0gMzsgYnJlYWs7Ci0gICAgICBkZWZhdWx0
OgotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgZmFsc2UpOwotICAg
IH0KLQotICAgIGlmIChwcmltaXRpdmVUb3BvbG9neSAhPSBtQ3VycmVudFByaW1pdGl2ZVRvcG9s
b2d5KQotICAgIHsKLSAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0UHJpbWl0aXZlVG9wb2xv
Z3kocHJpbWl0aXZlVG9wb2xvZ3kpOwotICAgICAgICBtQ3VycmVudFByaW1pdGl2ZVRvcG9sb2d5
ID0gcHJpbWl0aXZlVG9wb2xvZ3k7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvdW50ID49IG1pbkNv
dW50OwotfQotCi1ib29sIFJlbmRlcmVyMTE6OmFwcGx5UmVuZGVyVGFyZ2V0KGdsOjpGcmFtZWJ1
ZmZlciAqZnJhbWVidWZmZXIpCi17Ci0gICAgLy8gR2V0IHRoZSBjb2xvciByZW5kZXIgYnVmZmVy
IGFuZCBzZXJpYWwKLSAgICAvLyBBbHNvIGV4dHJhY3QgdGhlIHJlbmRlciB0YXJnZXQgZGltZW5z
aW9ucyBhbmQgdmlldwotICAgIHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRXaWR0aCA9IDA7Ci0g
ICAgdW5zaWduZWQgaW50IHJlbmRlclRhcmdldEhlaWdodCA9IDA7Ci0gICAgR0xlbnVtIHJlbmRl
clRhcmdldEZvcm1hdCA9IDA7Ci0gICAgdW5zaWduZWQgaW50IHJlbmRlclRhcmdldFNlcmlhbHNb
Z2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlNdID0gezB9OwotICAgIElEM0QxMVJl
bmRlclRhcmdldFZpZXcqIGZyYW1lYnVmZmVyUlRWc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0RS
QVdfQlVGRkVSU10gPSB7TlVMTH07Ci0gICAgYm9vbCBtaXNzaW5nQ29sb3JSZW5kZXJUYXJnZXQg
PSB0cnVlOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gMDsgY29s
b3JBdHRhY2htZW50IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IGNvbG9y
QXR0YWNobWVudCsrKQotICAgIHsKLSAgICAgICAgY29uc3QgR0xlbnVtIGRyYXdCdWZmZXJTdGF0
ZSA9IGZyYW1lYnVmZmVyLT5nZXREcmF3QnVmZmVyU3RhdGUoY29sb3JBdHRhY2htZW50KTsKLQot
ICAgICAgICBpZiAoZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlwZShjb2xvckF0dGFjaG1l
bnQpICE9IEdMX05PTkUgJiYgZHJhd0J1ZmZlclN0YXRlICE9IEdMX05PTkUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIC8vIHRoZSBkcmF3IGJ1ZmZlciBtdXN0IGJlIGVpdGhlciAibm9uZSIsICJi
YWNrIiBmb3IgdGhlIGRlZmF1bHQgYnVmZmVyIG9yIHRoZSBzYW1lIGluZGV4IGFzIHRoaXMgY29s
b3IgKGluIG9yZGVyKQotICAgICAgICAgICAgQVNTRVJUKGRyYXdCdWZmZXJTdGF0ZSA9PSBHTF9C
QUNLIHx8IGRyYXdCdWZmZXJTdGF0ZSA9PSAoR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUICsgY29s
b3JBdHRhY2htZW50KSk7Ci0KLSAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVm
ZmVyID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKGNvbG9yQXR0YWNobWVudCk7Ci0KLSAg
ICAgICAgICAgIGlmICghY29sb3JidWZmZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAv
LyBjaGVjayBmb3IgemVyby1zaXplZCBkZWZhdWx0IGZyYW1lYnVmZmVyLCB3aGljaCBpcyBhIHNw
ZWNpYWwgY2FzZS4KLSAgICAgICAgICAgIC8vIGluIHRoaXMgY2FzZSB3ZSBkbyBub3Qgd2lzaCB0
byBtb2RpZnkgYW55IHN0YXRlIGFuZCBqdXN0IHNpbGVudGx5IHJldHVybiBmYWxzZS4KLSAgICAg
ICAgICAgIC8vIHRoaXMgd2lsbCBub3QgcmVwb3J0IGFueSBnbCBlcnJvciBidXQgd2lsbCBjYXVz
ZSB0aGUgY2FsbGluZyBtZXRob2QgdG8gcmV0dXJuLgotICAgICAgICAgICAgaWYgKGNvbG9yYnVm
ZmVyLT5nZXRXaWR0aCgpID09IDAgfHwgY29sb3JidWZmZXItPmdldEhlaWdodCgpID09IDApCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICByZW5kZXJUYXJnZXRTZXJpYWxzW2NvbG9yQXR0YWNobWVudF0gPSBj
b2xvcmJ1ZmZlci0+Z2V0U2VyaWFsKCk7Ci0KLSAgICAgICAgICAgIC8vIEV4dHJhY3QgdGhlIHJl
bmRlciB0YXJnZXQgZGltZW5zaW9ucyBhbmQgdmlldwotICAgICAgICAgICAgUmVuZGVyVGFyZ2V0
MTEgKnJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoY29s
b3JidWZmZXItPmdldFJlbmRlclRhcmdldCgpKTsKLSAgICAgICAgICAgIGlmICghcmVuZGVyVGFy
Z2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigicmVuZGVyIHRhcmdldCBw
b2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZnJhbWVidWZmZXJSVFZzW2NvbG9yQXR0
YWNobWVudF0gPSByZW5kZXJUYXJnZXQtPmdldFJlbmRlclRhcmdldFZpZXcoKTsKLSAgICAgICAg
ICAgIGlmICghZnJhbWVidWZmZXJSVFZzW2NvbG9yQXR0YWNobWVudF0pCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHZpZXcgcG9pbnRlciB1bmV4cGVj
dGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlmIChtaXNzaW5nQ29sb3JSZW5kZXJUYXJnZXQpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcmVuZGVyVGFyZ2V0V2lkdGggPSBjb2xvcmJ1ZmZlci0+
Z2V0V2lkdGgoKTsKLSAgICAgICAgICAgICAgICByZW5kZXJUYXJnZXRIZWlnaHQgPSBjb2xvcmJ1
ZmZlci0+Z2V0SGVpZ2h0KCk7Ci0gICAgICAgICAgICAgICAgcmVuZGVyVGFyZ2V0Rm9ybWF0ID0g
Y29sb3JidWZmZXItPmdldEFjdHVhbEZvcm1hdCgpOwotICAgICAgICAgICAgICAgIG1pc3NpbmdD
b2xvclJlbmRlclRhcmdldCA9IGZhbHNlOwotICAgICAgICAgICAgfQotCi0jaWZkZWYgX0RFQlVH
Ci0gICAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBEZWJ1ZyBTRVRTSEFERVJSRVNPVVJDRVNf
SEFaQVJEIEQzRDExIHdhcm5pbmdzCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB2ZXJ0
ZXhTZXJpYWxJbmRleCA9IDA7IHZlcnRleFNlcmlhbEluZGV4IDwgZ2w6OklNUExFTUVOVEFUSU9O
X01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgdmVydGV4U2VyaWFsSW5kZXgrKykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29sb3JidWZmZXItPmdldFRleHR1cmVT
ZXJpYWwoKSAhPSAwICYmIG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1t2ZXJ0ZXhTZXJpYWxJbmRl
eF0gPT0gY29sb3JidWZmZXItPmdldFRleHR1cmVTZXJpYWwoKSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHNldFRleHR1cmUoZ2w6OlNBTVBMRVJfVkVSVEVYLCB2ZXJ0
ZXhTZXJpYWxJbmRleCwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBwaXhlbFNlcmlhbEluZGV4ID0gMDsgcGl4
ZWxTZXJpYWxJbmRleCA8IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgcGl4ZWxTZXJpYWxJ
bmRleCsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlci0+
Z2V0VGV4dHVyZVNlcmlhbCgpICE9IDAgJiYgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbcGl4ZWxT
ZXJpYWxJbmRleF0gPT0gY29sb3JidWZmZXItPmdldFRleHR1cmVTZXJpYWwoKSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHNldFRleHR1cmUoZ2w6OlNBTVBMRVJfUElY
RUwsIHBpeGVsU2VyaWFsSW5kZXgsIE5VTEwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSNlbmRpZgotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gR2V0IHRoZSBkZXB0aCBz
dGVuY2lsIHJlbmRlciBidWZmZXIgYW5kIHNlcmlhbHMKLSAgICBnbDo6UmVuZGVyYnVmZmVyICpk
ZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIHVuc2lnbmVkIGludCBkZXB0aGJ1ZmZlclNlcmlhbCA9
IDA7Ci0gICAgdW5zaWduZWQgaW50IHN0ZW5jaWxidWZmZXJTZXJpYWwgPSAwOwotICAgIGlmIChm
cmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKLSAgICB7Ci0gICAg
ICAgIGRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOwotICAgICAg
ICBpZiAoIWRlcHRoU3RlbmNpbCkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJEZXB0aCBz
dGVuY2lsIHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7Ci0gICAgICAgICAgICBTYWZlUmVs
ZWFzZShmcmFtZWJ1ZmZlclJUVnMpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZGVwdGhidWZmZXJTZXJpYWwgPSBkZXB0aFN0ZW5jaWwtPmdldFNlcmlh
bCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlclR5
cGUoKSAhPSBHTF9OT05FKQotICAgIHsKLSAgICAgICAgZGVwdGhTdGVuY2lsID0gZnJhbWVidWZm
ZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKLSAgICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRs
eSBudWxsLiIpOwotICAgICAgICAgICAgU2FmZVJlbGVhc2UoZnJhbWVidWZmZXJSVFZzKTsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0ZW5jaWxidWZm
ZXJTZXJpYWwgPSBkZXB0aFN0ZW5jaWwtPmdldFNlcmlhbCgpOwotICAgIH0KLQotICAgIC8vIEV4
dHJhY3QgdGhlIGRlcHRoIHN0ZW5jaWwgc2l6ZXMgYW5kIHZpZXcKLSAgICB1bnNpZ25lZCBpbnQg
ZGVwdGhTaXplID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbFNpemUgPSAwOwotICAgIElE
M0QxMURlcHRoU3RlbmNpbFZpZXcqIGZyYW1lYnVmZmVyRFNWID0gTlVMTDsKLSAgICBpZiAoZGVw
dGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgUmVuZGVyVGFyZ2V0MTEgKmRlcHRoU3RlbmNpbFJl
bmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoZGVwdGhTdGVu
Y2lsLT5nZXREZXB0aFN0ZW5jaWwoKSk7Ci0gICAgICAgIGlmICghZGVwdGhTdGVuY2lsUmVuZGVy
VGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoInJlbmRlciB0YXJnZXQgcG9pbnRl
ciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgIFNhZmVSZWxlYXNlKGZyYW1lYnVm
ZmVyUlRWcyk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAg
ICBmcmFtZWJ1ZmZlckRTViA9IGRlcHRoU3RlbmNpbFJlbmRlclRhcmdldC0+Z2V0RGVwdGhTdGVu
Y2lsVmlldygpOwotICAgICAgICBpZiAoIWZyYW1lYnVmZmVyRFNWKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBFUlIoImRlcHRoIHN0ZW5jaWwgdmlldyBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxs
LiIpOwotICAgICAgICAgICAgU2FmZVJlbGVhc2UoZnJhbWVidWZmZXJSVFZzKTsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZXJlIGlzIG5v
IHJlbmRlciBidWZmZXIsIHRoZSB3aWR0aCwgaGVpZ2h0IGFuZCBmb3JtYXQgdmFsdWVzIGNvbWUg
ZnJvbQotICAgICAgICAvLyB0aGUgZGVwdGggc3RlbmNpbAotICAgICAgICBpZiAobWlzc2luZ0Nv
bG9yUmVuZGVyVGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZW5kZXJUYXJnZXRXaWR0
aCA9IGRlcHRoU3RlbmNpbC0+Z2V0V2lkdGgoKTsKLSAgICAgICAgICAgIHJlbmRlclRhcmdldEhl
aWdodCA9IGRlcHRoU3RlbmNpbC0+Z2V0SGVpZ2h0KCk7Ci0gICAgICAgICAgICByZW5kZXJUYXJn
ZXRGb3JtYXQgPSBkZXB0aFN0ZW5jaWwtPmdldEFjdHVhbEZvcm1hdCgpOwotICAgICAgICB9Ci0K
LSAgICAgICAgZGVwdGhTaXplID0gZGVwdGhTdGVuY2lsLT5nZXREZXB0aFNpemUoKTsKLSAgICAg
ICAgc3RlbmNpbFNpemUgPSBkZXB0aFN0ZW5jaWwtPmdldFN0ZW5jaWxTaXplKCk7Ci0gICAgfQot
Ci0gICAgLy8gQXBwbHkgdGhlIHJlbmRlciB0YXJnZXQgYW5kIGRlcHRoIHN0ZW5jaWwKLSAgICBp
ZiAoIW1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgfHwgIW1EZXB0aFN0ZW5jaWxJbml0aWFs
aXplZCB8fAotICAgICAgICBtZW1jbXAocmVuZGVyVGFyZ2V0U2VyaWFscywgbUFwcGxpZWRSZW5k
ZXJUYXJnZXRTZXJpYWxzLCBzaXplb2YocmVuZGVyVGFyZ2V0U2VyaWFscykpICE9IDAgfHwKLSAg
ICAgICAgZGVwdGhidWZmZXJTZXJpYWwgIT0gbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCB8fAot
ICAgICAgICBzdGVuY2lsYnVmZmVyU2VyaWFsICE9IG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlh
bCkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldFJlbmRlclRhcmdldHMoZ2V0
TWF4UmVuZGVyVGFyZ2V0cygpLCBmcmFtZWJ1ZmZlclJUVnMsIGZyYW1lYnVmZmVyRFNWKTsKLQot
ICAgICAgICBtUmVuZGVyVGFyZ2V0RGVzYy53aWR0aCA9IHJlbmRlclRhcmdldFdpZHRoOwotICAg
ICAgICBtUmVuZGVyVGFyZ2V0RGVzYy5oZWlnaHQgPSByZW5kZXJUYXJnZXRIZWlnaHQ7Ci0gICAg
ICAgIG1SZW5kZXJUYXJnZXREZXNjLmZvcm1hdCA9IHJlbmRlclRhcmdldEZvcm1hdDsKLSAgICAg
ICAgbUZvcmNlU2V0Vmlld3BvcnQgPSB0cnVlOwotICAgICAgICBtRm9yY2VTZXRTY2lzc29yID0g
dHJ1ZTsKLQotICAgICAgICBpZiAoIW1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCB8fCBkZXB0aFNp
emUgIT0gbUN1ckRlcHRoU2l6ZSkKLSAgICAgICAgewotICAgICAgICAgICAgbUN1ckRlcHRoU2l6
ZSA9IGRlcHRoU2l6ZTsKLSAgICAgICAgICAgIG1Gb3JjZVNldFJhc3RlclN0YXRlID0gdHJ1ZTsK
LSAgICAgICAgfQotCi0gICAgICAgIG1DdXJTdGVuY2lsU2l6ZSA9IHN0ZW5jaWxTaXplOwotCi0g
ICAgICAgIGZvciAodW5zaWduZWQgaW50IHJ0SW5kZXggPSAwOyBydEluZGV4IDwgZ2w6OklNUExF
TUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IHJ0SW5kZXgrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWxzW3J0SW5kZXhdID0gcmVuZGVyVGFyZ2V0
U2VyaWFsc1tydEluZGV4XTsKLSAgICAgICAgfQotICAgICAgICBtQXBwbGllZERlcHRoYnVmZmVy
U2VyaWFsID0gZGVwdGhidWZmZXJTZXJpYWw7Ci0gICAgICAgIG1BcHBsaWVkU3RlbmNpbGJ1ZmZl
clNlcmlhbCA9IHN0ZW5jaWxidWZmZXJTZXJpYWw7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXREZXNj
SW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgICAgICBtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgPSB0
cnVlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1HTGVudW0gUmVuZGVyZXIxMTo6
YXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGdsOjpW
ZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmlidXRlc1tdLCBHTGludCBmaXJzdCwgR0xzaXplaSBj
b3VudCwgR0xzaXplaSBpbnN0YW5jZXMpCi17Ci0gICAgVHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRy
aWJ1dGVzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdOwotICAgIEdMZW51bSBlcnIgPSBtVmVydGV4
RGF0YU1hbmFnZXItPnByZXBhcmVWZXJ0ZXhEYXRhKHZlcnRleEF0dHJpYnV0ZXMsIHByb2dyYW1C
aW5hcnksIGZpcnN0LCBjb3VudCwgYXR0cmlidXRlcywgaW5zdGFuY2VzKTsKLSAgICBpZiAoZXJy
ICE9IEdMX05PX0VSUk9SKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gbUlucHV0TGF5b3V0Q2FjaGUuYXBwbHlWZXJ0ZXhCdWZmZXJzKGF0dHJpYnV0ZXMs
IHByb2dyYW1CaW5hcnkpOwotfQotCi1HTGVudW0gUmVuZGVyZXIxMTo6YXBwbHlJbmRleEJ1ZmZl
cihjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwg
R0xzaXplaSBjb3VudCwgR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhE
YXRhICppbmRleEluZm8pCi17Ci0gICAgR0xlbnVtIGVyciA9IG1JbmRleERhdGFNYW5hZ2VyLT5w
cmVwYXJlSW5kZXhEYXRhKHR5cGUsIGNvdW50LCBlbGVtZW50QXJyYXlCdWZmZXIsIGluZGljZXMs
IGluZGV4SW5mbyk7Ci0KLSAgICBpZiAoZXJyID09IEdMX05PX0VSUk9SKQotICAgIHsKLSAgICAg
ICAgaWYgKGluZGV4SW5mby0+c3RvcmFnZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGlu
ZGV4SW5mby0+c2VyaWFsICE9IG1BcHBsaWVkU3RvcmFnZUlCU2VyaWFsIHx8IGluZGV4SW5mby0+
c3RhcnRPZmZzZXQgIT0gbUFwcGxpZWRJQk9mZnNldCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBCdWZmZXJTdG9yYWdlMTEgKnN0b3JhZ2UgPSBCdWZmZXJTdG9yYWdlMTE6Om1ha2VC
dWZmZXJTdG9yYWdlMTEoaW5kZXhJbmZvLT5zdG9yYWdlKTsKLSAgICAgICAgICAgICAgICBJbmRl
eEJ1ZmZlcjExKiBpbmRleEJ1ZmZlciA9IEluZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1ZmZlcjEx
KGluZGV4SW5mby0+aW5kZXhCdWZmZXIpOwotCi0gICAgICAgICAgICAgICAgbURldmljZUNvbnRl
eHQtPklBU2V0SW5kZXhCdWZmZXIoc3RvcmFnZS0+Z2V0QnVmZmVyKCksIGluZGV4QnVmZmVyLT5n
ZXRJbmRleEZvcm1hdCgpLCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0KTsKLQotICAgICAgICAgICAg
ICAgIG1BcHBsaWVkSUJTZXJpYWwgPSAwOwotICAgICAgICAgICAgICAgIG1BcHBsaWVkU3RvcmFn
ZUlCU2VyaWFsID0gc3RvcmFnZS0+Z2V0U2VyaWFsKCk7Ci0gICAgICAgICAgICAgICAgbUFwcGxp
ZWRJQk9mZnNldCA9IGluZGV4SW5mby0+c3RhcnRPZmZzZXQ7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaW5kZXhJbmZvLT5zZXJpYWwgIT0gbUFwcGxpZWRJQlNl
cmlhbCB8fCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0ICE9IG1BcHBsaWVkSUJPZmZzZXQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEluZGV4QnVmZmVyMTEqIGluZGV4QnVmZmVyID0gSW5kZXhCdWZm
ZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEoaW5kZXhJbmZvLT5pbmRleEJ1ZmZlcik7Ci0KLSAgICAg
ICAgICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldEluZGV4QnVmZmVyKGluZGV4QnVmZmVyLT5nZXRC
dWZmZXIoKSwgaW5kZXhCdWZmZXItPmdldEluZGV4Rm9ybWF0KCksIGluZGV4SW5mby0+c3RhcnRP
ZmZzZXQpOwotCi0gICAgICAgICAgICBtQXBwbGllZElCU2VyaWFsID0gaW5kZXhJbmZvLT5zZXJp
YWw7Ci0gICAgICAgICAgICBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbCA9IDA7Ci0gICAgICAgICAg
ICBtQXBwbGllZElCT2Zmc2V0ID0gaW5kZXhJbmZvLT5zdGFydE9mZnNldDsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiBlcnI7Ci19Ci0KLXZvaWQgUmVuZGVyZXIxMTo6ZHJhd0FycmF5
cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpCi17Ci0gICAg
aWYgKG1vZGUgPT0gR0xfTElORV9MT09QKQotICAgIHsKLSAgICAgICAgZHJhd0xpbmVMb29wKGNv
dW50LCBHTF9OT05FLCBOVUxMLCAwLCBOVUxMKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZSA9
PSBHTF9UUklBTkdMRV9GQU4pCi0gICAgewotICAgICAgICBkcmF3VHJpYW5nbGVGYW4oY291bnQs
IEdMX05PTkUsIE5VTEwsIDAsIE5VTEwsIGluc3RhbmNlcyk7Ci0gICAgfQotICAgIGVsc2UgaWYg
KGluc3RhbmNlcyA+IDApCi0gICAgewotICAgICAgICBtRGV2aWNlQ29udGV4dC0+RHJhd0luc3Rh
bmNlZChjb3VudCwgaW5zdGFuY2VzLCAwLCAwKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAg
ICAgICAgbURldmljZUNvbnRleHQtPkRyYXcoY291bnQsIDApOwotICAgIH0KLX0KLQotdm9pZCBS
ZW5kZXJlcjExOjpkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51
bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1
ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvLCBHTHNpemVpIGluc3Rh
bmNlcykKLXsKLSAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCi0gICAgewotICAgICAgICBk
cmF3TGluZUxvb3AoY291bnQsIHR5cGUsIGluZGljZXMsIGluZGV4SW5mby5taW5JbmRleCwgZWxl
bWVudEFycmF5QnVmZmVyKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZSA9PSBHTF9UUklBTkdM
RV9GQU4pCi0gICAgewotICAgICAgICBkcmF3VHJpYW5nbGVGYW4oY291bnQsIHR5cGUsIGluZGlj
ZXMsIGluZGV4SW5mby5taW5JbmRleCwgZWxlbWVudEFycmF5QnVmZmVyLCBpbnN0YW5jZXMpOwot
ICAgIH0KLSAgICBlbHNlIGlmIChpbnN0YW5jZXMgPiAwKQotICAgIHsKLSAgICAgICAgbURldmlj
ZUNvbnRleHQtPkRyYXdJbmRleGVkSW5zdGFuY2VkKGNvdW50LCBpbnN0YW5jZXMsIDAsIC1zdGF0
aWNfY2FzdDxpbnQ+KGluZGV4SW5mby5taW5JbmRleCksIDApOwotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgICBtRGV2aWNlQ29udGV4dC0+RHJhd0luZGV4ZWQoY291bnQsIDAsIC1zdGF0
aWNfY2FzdDxpbnQ+KGluZGV4SW5mby5taW5JbmRleCkpOwotICAgIH0KLX0KLQotdm9pZCBSZW5k
ZXJlcjExOjpkcmF3TGluZUxvb3AoR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdM
dm9pZCAqaW5kaWNlcywgaW50IG1pbkluZGV4LCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZm
ZXIpCi17Ci0gICAgLy8gR2V0IHRoZSByYXcgaW5kaWNlcyBmb3IgYW4gaW5kZXhlZCBkcmF3Ci0g
ICAgaWYgKHR5cGUgIT0gR0xfTk9ORSAmJiBlbGVtZW50QXJyYXlCdWZmZXIpCi0gICAgewotICAg
ICAgICBnbDo6QnVmZmVyICppbmRleEJ1ZmZlciA9IGVsZW1lbnRBcnJheUJ1ZmZlcjsKLSAgICAg
ICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGluZGV4QnVmZmVyLT5nZXRTdG9yYWdlKCk7Ci0g
ICAgICAgIGludHB0cl90IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZGlj
ZXMpOwotICAgICAgICBpbmRpY2VzID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KHN0b3Jh
Z2UtPmdldERhdGEoKSkgKyBvZmZzZXQ7Ci0gICAgfQotCi0gICAgaWYgKCFtTGluZUxvb3BJQikK
LSAgICB7Ci0gICAgICAgIG1MaW5lTG9vcElCID0gbmV3IFN0cmVhbWluZ0luZGV4QnVmZmVySW50
ZXJmYWNlKHRoaXMpOwotICAgICAgICBpZiAoIW1MaW5lTG9vcElCLT5yZXNlcnZlQnVmZmVyU3Bh
Y2UoSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwgR0xfVU5TSUdORURfSU5UKSkKLSAgICAgICAg
ewotICAgICAgICAgICAgZGVsZXRlIG1MaW5lTG9vcElCOwotICAgICAgICAgICAgbUxpbmVMb29w
SUIgPSBOVUxMOwotCi0gICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSAzMi1iaXQg
bG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKLSAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICAvLyBDaGVja2VkIGJ5IFJlbmRlcmVyMTE6OmFwcGx5UHJpbWl0aXZlVHlwZQotICAgIEFTU0VS
VChjb3VudCA+PSAwKTsKLQotICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGNvdW50
KSArIDEgPiAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSAvIHNpemVv
Zih1bnNpZ25lZCBpbnQpKSkKLSAgICB7Ci0gICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBh
IDMyLWJpdCBsb29waW5nIGluZGV4IGJ1ZmZlciBmb3IgR0xfTElORV9MT09QLCB0b28gbWFueSBp
bmRpY2VzIHJlcXVpcmVkLiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwotICAgIH0KLQotICAgIGNvbnN0IHVuc2lnbmVkIGludCBzcGFjZU5lZWRlZCA9IChz
dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGNvdW50KSArIDEpICogc2l6ZW9mKHVuc2lnbmVkIGlu
dCk7Ci0gICAgaWYgKCFtTGluZUxvb3BJQi0+cmVzZXJ2ZUJ1ZmZlclNwYWNlKHNwYWNlTmVlZGVk
LCBHTF9VTlNJR05FRF9JTlQpKQotICAgIHsKLSAgICAgICAgRVJSKCJDb3VsZCBub3QgcmVzZXJ2
ZSBlbm91Z2ggc3BhY2UgaW4gbG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4i
KTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0K
LSAgICB2b2lkKiBtYXBwZWRNZW1vcnkgPSBOVUxMOwotICAgIHVuc2lnbmVkIGludCBvZmZzZXQ7
Ci0gICAgaWYgKCFtTGluZUxvb3BJQi0+bWFwQnVmZmVyKHNwYWNlTmVlZGVkLCAmbWFwcGVkTWVt
b3J5LCAmb2Zmc2V0KSkKLSAgICB7Ci0gICAgICAgIEVSUigiQ291bGQgbm90IG1hcCBpbmRleCBi
dWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBpbnQgKmRhdGEgPSByZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkIGludCo+KG1hcHBlZE1lbW9yeSk7Ci0gICAgdW5zaWduZWQgaW50
IGluZGV4QnVmZmVyT2Zmc2V0ID0gb2Zmc2V0OwotCi0gICAgc3dpdGNoICh0eXBlKQotICAgIHsK
LSAgICAgIGNhc2UgR0xfTk9ORTogICAvLyBOb24taW5kZXhlZCBkcmF3Ci0gICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGF0YVtp
XSA9IGk7Ci0gICAgICAgIH0KLSAgICAgICAgZGF0YVtjb3VudF0gPSAwOwotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkYXRhW2ldID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpW2ldOwotICAgICAgICB9Ci0gICAgICAgIGRh
dGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpWzBdOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6Ci0gICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGF0YVtp
XSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNlcylbaV07Ci0gICAgICAgIH0K
LSAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGlj
ZXMpWzBdOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgotICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVtpXTsKLSAg
ICAgICAgfQotICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+
KGluZGljZXMpWzBdOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgfQotCi0gICAgaWYgKCFtTGluZUxvb3BJQi0+dW5tYXBCdWZmZXIoKSkKLSAgICB7
Ci0gICAgICAgIEVSUigiQ291bGQgbm90IHVubWFwIGluZGV4IGJ1ZmZlciBmb3IgR0xfTElORV9M
T09QLiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAg
IH0KLQotICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9IG1MaW5lTG9vcElCLT5nZXRTZXJpYWwo
KSB8fCBtQXBwbGllZElCT2Zmc2V0ICE9IGluZGV4QnVmZmVyT2Zmc2V0KQotICAgIHsKLSAgICAg
ICAgSW5kZXhCdWZmZXIxMSAqaW5kZXhCdWZmZXIgPSBJbmRleEJ1ZmZlcjExOjptYWtlSW5kZXhC
dWZmZXIxMShtTGluZUxvb3BJQi0+Z2V0SW5kZXhCdWZmZXIoKSk7Ci0KLSAgICAgICAgbURldmlj
ZUNvbnRleHQtPklBU2V0SW5kZXhCdWZmZXIoaW5kZXhCdWZmZXItPmdldEJ1ZmZlcigpLCBpbmRl
eEJ1ZmZlci0+Z2V0SW5kZXhGb3JtYXQoKSwgaW5kZXhCdWZmZXJPZmZzZXQpOwotICAgICAgICBt
QXBwbGllZElCU2VyaWFsID0gbUxpbmVMb29wSUItPmdldFNlcmlhbCgpOwotICAgICAgICBtQXBw
bGllZFN0b3JhZ2VJQlNlcmlhbCA9IDA7Ci0gICAgICAgIG1BcHBsaWVkSUJPZmZzZXQgPSBpbmRl
eEJ1ZmZlck9mZnNldDsKLSAgICB9Ci0KLSAgICBtRGV2aWNlQ29udGV4dC0+RHJhd0luZGV4ZWQo
Y291bnQgKyAxLCAwLCAtbWluSW5kZXgpOwotfQotCi12b2lkIFJlbmRlcmVyMTE6OmRyYXdUcmlh
bmdsZUZhbihHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2Vz
LCBpbnQgbWluSW5kZXgsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgaW50IGluc3Rh
bmNlcykKLXsKLSAgICAvLyBHZXQgdGhlIHJhdyBpbmRpY2VzIGZvciBhbiBpbmRleGVkIGRyYXcK
LSAgICBpZiAodHlwZSAhPSBHTF9OT05FICYmIGVsZW1lbnRBcnJheUJ1ZmZlcikKLSAgICB7Ci0g
ICAgICAgIGdsOjpCdWZmZXIgKmluZGV4QnVmZmVyID0gZWxlbWVudEFycmF5QnVmZmVyOwotICAg
ICAgICBCdWZmZXJTdG9yYWdlICpzdG9yYWdlID0gaW5kZXhCdWZmZXItPmdldFN0b3JhZ2UoKTsK
LSAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5k
aWNlcyk7Ci0gICAgICAgIGluZGljZXMgPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oc3Rv
cmFnZS0+Z2V0RGF0YSgpKSArIG9mZnNldDsKLSAgICB9Ci0KLSAgICBpZiAoIW1UcmlhbmdsZUZh
bklCKQotICAgIHsKLSAgICAgICAgbVRyaWFuZ2xlRmFuSUIgPSBuZXcgU3RyZWFtaW5nSW5kZXhC
dWZmZXJJbnRlcmZhY2UodGhpcyk7Ci0gICAgICAgIGlmICghbVRyaWFuZ2xlRmFuSUItPnJlc2Vy
dmVCdWZmZXJTcGFjZShJTklUSUFMX0lOREVYX0JVRkZFUl9TSVpFLCBHTF9VTlNJR05FRF9JTlQp
KQotICAgICAgICB7Ci0gICAgICAgICAgICBkZWxldGUgbVRyaWFuZ2xlRmFuSUI7Ci0gICAgICAg
ICAgICBtVHJpYW5nbGVGYW5JQiA9IE5VTEw7Ci0KLSAgICAgICAgICAgIEVSUigiQ291bGQgbm90
IGNyZWF0ZSBhIHNjcmF0Y2ggaW5kZXggYnVmZmVyIGZvciBHTF9UUklBTkdMRV9GQU4uIik7Ci0g
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgLy8gQ2hlY2tlZCBieSBSZW5kZXJlcjExOjphcHBseVByaW1pdGl2ZVR5
cGUKLSAgICBBU1NFUlQoY291bnQgPj0gMyk7Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbnVt
VHJpcyA9IGNvdW50IC0gMjsKLQotICAgIGlmIChudW1UcmlzID4gKHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLyAoc2l6ZW9mKHVuc2lnbmVkIGludCkgKiAzKSkpCi0g
ICAgewotICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSBzY3JhdGNoIGluZGV4IGJ1ZmZl
ciBmb3IgR0xfVFJJQU5HTEVfRkFOLCB0b28gbWFueSBpbmRpY2VzIHJlcXVpcmVkLiIpOwotICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAgIGNv
bnN0IHVuc2lnbmVkIGludCBzcGFjZU5lZWRlZCA9IChudW1UcmlzICogMykgKiBzaXplb2YodW5z
aWduZWQgaW50KTsKLSAgICBpZiAoIW1UcmlhbmdsZUZhbklCLT5yZXNlcnZlQnVmZmVyU3BhY2Uo
c3BhY2VOZWVkZWQsIEdMX1VOU0lHTkVEX0lOVCkpCi0gICAgewotICAgICAgICBFUlIoIkNvdWxk
IG5vdCByZXNlcnZlIGVub3VnaCBzcGFjZSBpbiBzY3JhdGNoIGluZGV4IGJ1ZmZlciBmb3IgR0xf
VFJJQU5HTEVfRkFOLiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgIH0KLQotICAgIHZvaWQqIG1hcHBlZE1lbW9yeSA9IE5VTEw7Ci0gICAgdW5zaWdu
ZWQgaW50IG9mZnNldDsKLSAgICBpZiAoIW1UcmlhbmdsZUZhbklCLT5tYXBCdWZmZXIoc3BhY2VO
ZWVkZWQsICZtYXBwZWRNZW1vcnksICZvZmZzZXQpKQotICAgIHsKLSAgICAgICAgRVJSKCJDb3Vs
ZCBub3QgbWFwIHNjcmF0Y2ggaW5kZXggYnVmZmVyIGZvciBHTF9UUklBTkdMRV9GQU4uIik7Ci0g
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotCi0gICAg
dW5zaWduZWQgaW50ICpkYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihtYXBw
ZWRNZW1vcnkpOwotICAgIHVuc2lnbmVkIGludCBpbmRleEJ1ZmZlck9mZnNldCA9IG9mZnNldDsK
LQotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX05PTkU6ICAgLy8gTm9u
LWluZGV4ZWQgZHJhdwotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVRy
aXM7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGF0YVtpKjMgKyAwXSA9IDA7Ci0gICAg
ICAgICAgICBkYXRhW2kqMyArIDFdID0gaSArIDE7Ci0gICAgICAgICAgICBkYXRhW2kqMyArIDJd
ID0gaSArIDI7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1VOU0lH
TkVEX0JZVEU6Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtVHJpczsg
aSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkYXRhW2kqMyArIDBdID0gc3RhdGljX2Nhc3Q8
Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpWzBdOwotICAgICAgICAgICAgZGF0YVtpKjMgKyAxXSA9
IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKVtpICsgMV07Ci0gICAgICAgICAg
ICBkYXRhW2kqMyArIDJdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpW2kg
KyAyXTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURf
U0hPUlQ6Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtVHJpczsgaSsr
KQotICAgICAgICB7Ci0gICAgICAgICAgICBkYXRhW2kqMyArIDBdID0gc3RhdGljX2Nhc3Q8Y29u
c3QgR0x1c2hvcnQqPihpbmRpY2VzKVswXTsKLSAgICAgICAgICAgIGRhdGFbaSozICsgMV0gPSBz
dGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpW2kgKyAxXTsKLSAgICAgICAgICAg
IGRhdGFbaSozICsgMl0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpW2kg
KyAyXTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURf
SU5UOgotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVRyaXM7IGkrKykK
LSAgICAgICAgewotICAgICAgICAgICAgZGF0YVtpKjMgKyAwXSA9IHN0YXRpY19jYXN0PGNvbnN0
IEdMdWludCo+KGluZGljZXMpWzBdOwotICAgICAgICAgICAgZGF0YVtpKjMgKyAxXSA9IHN0YXRp
Y19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMpW2kgKyAxXTsKLSAgICAgICAgICAgIGRhdGFb
aSozICsgMl0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVtpICsgMl07Ci0g
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwot
ICAgIH0KLQotICAgIGlmICghbVRyaWFuZ2xlRmFuSUItPnVubWFwQnVmZmVyKCkpCi0gICAgewot
ICAgICAgICBFUlIoIkNvdWxkIG5vdCB1bm1hcCBzY3JhdGNoIGluZGV4IGJ1ZmZlciBmb3IgR0xf
VFJJQU5HTEVfRkFOLiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgIH0KLQotICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9IG1UcmlhbmdsZUZhbklC
LT5nZXRTZXJpYWwoKSB8fCBtQXBwbGllZElCT2Zmc2V0ICE9IGluZGV4QnVmZmVyT2Zmc2V0KQot
ICAgIHsKLSAgICAgICAgSW5kZXhCdWZmZXIxMSAqaW5kZXhCdWZmZXIgPSBJbmRleEJ1ZmZlcjEx
OjptYWtlSW5kZXhCdWZmZXIxMShtVHJpYW5nbGVGYW5JQi0+Z2V0SW5kZXhCdWZmZXIoKSk7Ci0K
LSAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0SW5kZXhCdWZmZXIoaW5kZXhCdWZmZXItPmdl
dEJ1ZmZlcigpLCBpbmRleEJ1ZmZlci0+Z2V0SW5kZXhGb3JtYXQoKSwgaW5kZXhCdWZmZXJPZmZz
ZXQpOwotICAgICAgICBtQXBwbGllZElCU2VyaWFsID0gbVRyaWFuZ2xlRmFuSUItPmdldFNlcmlh
bCgpOwotICAgICAgICBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbCA9IDA7Ci0gICAgICAgIG1BcHBs
aWVkSUJPZmZzZXQgPSBpbmRleEJ1ZmZlck9mZnNldDsKLSAgICB9Ci0KLSAgICBpZiAoaW5zdGFu
Y2VzID4gMCkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5EcmF3SW5kZXhlZEluc3Rh
bmNlZChudW1UcmlzICogMywgaW5zdGFuY2VzLCAwLCAtbWluSW5kZXgsIDApOwotICAgIH0KLSAg
ICBlbHNlCi0gICAgewotICAgICAgICBtRGV2aWNlQ29udGV4dC0+RHJhd0luZGV4ZWQobnVtVHJp
cyAqIDMsIDAsIC1taW5JbmRleCk7Ci0gICAgfQotfQotCi12b2lkIFJlbmRlcmVyMTE6OmFwcGx5
U2hhZGVycyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSkKLXsKLSAgICB1bnNpZ25l
ZCBpbnQgcHJvZ3JhbUJpbmFyeVNlcmlhbCA9IHByb2dyYW1CaW5hcnktPmdldFNlcmlhbCgpOwot
ICAgIGNvbnN0IGJvb2wgdXBkYXRlUHJvZ3JhbVN0YXRlID0gKHByb2dyYW1CaW5hcnlTZXJpYWwg
IT0gbUFwcGxpZWRQcm9ncmFtQmluYXJ5U2VyaWFsKTsKLQotICAgIGlmICh1cGRhdGVQcm9ncmFt
U3RhdGUpCi0gICAgewotICAgICAgICBTaGFkZXJFeGVjdXRhYmxlICp2ZXJ0ZXhFeGUgPSBwcm9n
cmFtQmluYXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlKCk7Ci0gICAgICAgIFNoYWRlckV4ZWN1dGFi
bGUgKnBpeGVsRXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxFeGVjdXRhYmxlKCk7Ci0KLSAg
ICAgICAgSUQzRDExVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIgPSBOVUxMOwotICAgICAgICBp
ZiAodmVydGV4RXhlKSB2ZXJ0ZXhTaGFkZXIgPSBTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VTaGFk
ZXJFeGVjdXRhYmxlMTEodmVydGV4RXhlKS0+Z2V0VmVydGV4U2hhZGVyKCk7Ci0KLSAgICAgICAg
SUQzRDExUGl4ZWxTaGFkZXIgKnBpeGVsU2hhZGVyID0gTlVMTDsKLSAgICAgICAgaWYgKHBpeGVs
RXhlKSBwaXhlbFNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFi
bGUxMShwaXhlbEV4ZSktPmdldFBpeGVsU2hhZGVyKCk7Ci0KLSAgICAgICAgbURldmljZUNvbnRl
eHQtPlBTU2V0U2hhZGVyKHBpeGVsU2hhZGVyLCBOVUxMLCAwKTsKLSAgICAgICAgbURldmljZUNv
bnRleHQtPlZTU2V0U2hhZGVyKHZlcnRleFNoYWRlciwgTlVMTCwgMCk7Ci0KLSAgICAgICAgcHJv
Z3JhbUJpbmFyeS0+ZGlydHlBbGxVbmlmb3JtcygpOwotCi0gICAgICAgIG1BcHBsaWVkUHJvZ3Jh
bUJpbmFyeVNlcmlhbCA9IHByb2dyYW1CaW5hcnlTZXJpYWw7Ci0gICAgfQotCi0gICAgLy8gT25s
eSB1c2UgdGhlIGdlb21ldHJ5IHNoYWRlciBjdXJyZW50bHkgZm9yIHBvaW50IHNwcml0ZSBkcmF3
aW5nCi0gICAgY29uc3QgYm9vbCB1c2VzR2VvbWV0cnlTaGFkZXIgPSAocHJvZ3JhbUJpbmFyeS0+
dXNlc0dlb21ldHJ5U2hhZGVyKCkgJiYgbUN1clJhc3RlclN0YXRlLnBvaW50RHJhd01vZGUpOwot
Ci0gICAgaWYgKHVwZGF0ZVByb2dyYW1TdGF0ZSB8fCB1c2VzR2VvbWV0cnlTaGFkZXIgIT0gbUlz
R2VvbWV0cnlTaGFkZXJBY3RpdmUpCi0gICAgewotICAgICAgICBpZiAodXNlc0dlb21ldHJ5U2hh
ZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBTaGFkZXJFeGVjdXRhYmxlICpnZW9tZXRyeUV4
ZSA9IHByb2dyYW1CaW5hcnktPmdldEdlb21ldHJ5RXhlY3V0YWJsZSgpOwotICAgICAgICAgICAg
SUQzRDExR2VvbWV0cnlTaGFkZXIgKmdlb21ldHJ5U2hhZGVyID0gU2hhZGVyRXhlY3V0YWJsZTEx
OjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKGdlb21ldHJ5RXhlKS0+Z2V0R2VvbWV0cnlTaGFkZXIo
KTsKLSAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldFNoYWRlcihnZW9tZXRyeVNoYWRl
ciwgTlVMTCwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAg
ICAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIoTlVMTCwgTlVMTCwgMCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBtSXNHZW9tZXRyeVNoYWRlckFjdGl2ZSA9IHVzZXNHZW9tZXRyeVNoYWRl
cjsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyZXIxMTo6YXBwbHlVbmlmb3JtcyhnbDo6UHJvZ3Jh
bUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlVuaWZvcm1BcnJheSAqdW5pZm9ybUFycmF5KQot
ewotICAgIFNoYWRlckV4ZWN1dGFibGUxMSAqdmVydGV4RXhlY3V0YWJsZSA9IFNoYWRlckV4ZWN1
dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhF
eGVjdXRhYmxlKCkpOwotICAgIFNoYWRlckV4ZWN1dGFibGUxMSAqcGl4ZWxFeGVjdXRhYmxlID0g
U2hhZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKHByb2dyYW1CaW5hcnkt
PmdldFBpeGVsRXhlY3V0YWJsZSgpKTsKLQotICAgIHVuc2lnbmVkIGludCB0b3RhbFJlZ2lzdGVy
Q291bnRWUyA9IDA7Ci0gICAgdW5zaWduZWQgaW50IHRvdGFsUmVnaXN0ZXJDb3VudFBTID0gMDsK
LQotICAgIGJvb2wgdmVydGV4VW5pZm9ybXNEaXJ0eSA9IGZhbHNlOwotICAgIGJvb2wgcGl4ZWxV
bmlmb3Jtc0RpcnR5ID0gZmFsc2U7Ci0KLSAgICBmb3IgKGdsOjpVbmlmb3JtQXJyYXk6OmNvbnN0
X2l0ZXJhdG9yIHVuaWZvcm1faXRlcmF0b3IgPSB1bmlmb3JtQXJyYXktPmJlZ2luKCk7IHVuaWZv
cm1faXRlcmF0b3IgIT0gdW5pZm9ybUFycmF5LT5lbmQoKTsgdW5pZm9ybV9pdGVyYXRvcisrKQot
ICAgIHsKLSAgICAgICAgY29uc3QgZ2w6OlVuaWZvcm0gKnVuaWZvcm0gPSAqdW5pZm9ybV9pdGVy
YXRvcjsKLQotICAgICAgICBpZiAodW5pZm9ybS0+dnNSZWdpc3RlckluZGV4ID49IDApCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHRvdGFsUmVnaXN0ZXJDb3VudFZTICs9IHVuaWZvcm0tPnJlZ2lz
dGVyQ291bnQ7Ci0gICAgICAgICAgICB2ZXJ0ZXhVbmlmb3Jtc0RpcnR5ID0gdmVydGV4VW5pZm9y
bXNEaXJ0eSB8fCB1bmlmb3JtLT5kaXJ0eTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh1bmlm
b3JtLT5wc1JlZ2lzdGVySW5kZXggPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgdG90YWxS
ZWdpc3RlckNvdW50UFMgKz0gdW5pZm9ybS0+cmVnaXN0ZXJDb3VudDsKLSAgICAgICAgICAgIHBp
eGVsVW5pZm9ybXNEaXJ0eSA9IHBpeGVsVW5pZm9ybXNEaXJ0eSB8fCB1bmlmb3JtLT5kaXJ0eTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIElEM0QxMUJ1ZmZlciAqdmVydGV4Q29uc3RhbnRCdWZm
ZXIgPSB2ZXJ0ZXhFeGVjdXRhYmxlLT5nZXRDb25zdGFudEJ1ZmZlcihtRGV2aWNlLCB0b3RhbFJl
Z2lzdGVyQ291bnRWUyk7Ci0gICAgSUQzRDExQnVmZmVyICpwaXhlbENvbnN0YW50QnVmZmVyID0g
cGl4ZWxFeGVjdXRhYmxlLT5nZXRDb25zdGFudEJ1ZmZlcihtRGV2aWNlLCB0b3RhbFJlZ2lzdGVy
Q291bnRQUyk7Ci0KLSAgICBmbG9hdCAoKm1hcFZTKVs0XSA9IE5VTEw7Ci0gICAgZmxvYXQgKCpt
YXBQUylbNF0gPSBOVUxMOwotCi0gICAgaWYgKHRvdGFsUmVnaXN0ZXJDb3VudFZTID4gMCAmJiB2
ZXJ0ZXhVbmlmb3Jtc0RpcnR5KQotICAgIHsKLSAgICAgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09V
UkNFIG1hcCA9IHswfTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlQ29udGV4dC0+
TWFwKHZlcnRleENvbnN0YW50QnVmZmVyLCAwLCBEM0QxMV9NQVBfV1JJVEVfRElTQ0FSRCwgMCwg
Jm1hcCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIG1hcFZT
ID0gKGZsb2F0KCopWzRdKW1hcC5wRGF0YTsKLSAgICB9Ci0KLSAgICBpZiAodG90YWxSZWdpc3Rl
ckNvdW50UFMgPiAwICYmIHBpeGVsVW5pZm9ybXNEaXJ0eSkKLSAgICB7Ci0gICAgICAgIEQzRDEx
X01BUFBFRF9TVUJSRVNPVVJDRSBtYXAgPSB7MH07Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
bURldmljZUNvbnRleHQtPk1hcChwaXhlbENvbnN0YW50QnVmZmVyLCAwLCBEM0QxMV9NQVBfV1JJ
VEVfRElTQ0FSRCwgMCwgJm1hcCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7
Ci0gICAgICAgIG1hcFBTID0gKGZsb2F0KCopWzRdKW1hcC5wRGF0YTsKLSAgICB9Ci0KLSAgICBm
b3IgKGdsOjpVbmlmb3JtQXJyYXk6Oml0ZXJhdG9yIHVuaWZvcm1faXRlcmF0b3IgPSB1bmlmb3Jt
QXJyYXktPmJlZ2luKCk7IHVuaWZvcm1faXRlcmF0b3IgIT0gdW5pZm9ybUFycmF5LT5lbmQoKTsg
dW5pZm9ybV9pdGVyYXRvcisrKQotICAgIHsKLSAgICAgICAgZ2w6OlVuaWZvcm0gKnVuaWZvcm0g
PSAqdW5pZm9ybV9pdGVyYXRvcjsKLQotICAgICAgICBpZiAodW5pZm9ybS0+dHlwZSAhPSAgR0xf
U0FNUExFUl8yRCAmJiB1bmlmb3JtLT50eXBlICE9IEdMX1NBTVBMRVJfQ1VCRSkKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKHVuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleCA+PSAwICYmIG1hcFZT
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1lbWNweShtYXBWUyArIHVuaWZvcm0t
PnZzUmVnaXN0ZXJJbmRleCwgdW5pZm9ybS0+ZGF0YSwgdW5pZm9ybS0+cmVnaXN0ZXJDb3VudCAq
IHNpemVvZihmbG9hdFs0XSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodW5p
Zm9ybS0+cHNSZWdpc3RlckluZGV4ID49IDAgJiYgbWFwUFMpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgbWVtY3B5KG1hcFBTICsgdW5pZm9ybS0+cHNSZWdpc3RlckluZGV4LCB1bmlm
b3JtLT5kYXRhLCB1bmlmb3JtLT5yZWdpc3RlckNvdW50ICogc2l6ZW9mKGZsb2F0WzRdKSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB1bmlmb3JtLT5kaXJ0eSA9IGZhbHNl
OwotICAgIH0KLQotICAgIGlmIChtYXBWUykKLSAgICB7Ci0gICAgICAgIG1EZXZpY2VDb250ZXh0
LT5Vbm1hcCh2ZXJ0ZXhDb25zdGFudEJ1ZmZlciwgMCk7Ci0gICAgfQotCi0gICAgaWYgKG1hcFBT
KQotICAgIHsKLSAgICAgICAgbURldmljZUNvbnRleHQtPlVubWFwKHBpeGVsQ29uc3RhbnRCdWZm
ZXIsIDApOwotICAgIH0KLQotICAgIGlmIChtQ3VycmVudFZlcnRleENvbnN0YW50QnVmZmVyICE9
IHZlcnRleENvbnN0YW50QnVmZmVyKQotICAgIHsKLSAgICAgICAgbURldmljZUNvbnRleHQtPlZT
U2V0Q29uc3RhbnRCdWZmZXJzKDAsIDEsICZ2ZXJ0ZXhDb25zdGFudEJ1ZmZlcik7Ci0gICAgICAg
IG1DdXJyZW50VmVydGV4Q29uc3RhbnRCdWZmZXIgPSB2ZXJ0ZXhDb25zdGFudEJ1ZmZlcjsKLSAg
ICB9Ci0KLSAgICBpZiAobUN1cnJlbnRQaXhlbENvbnN0YW50QnVmZmVyICE9IHBpeGVsQ29uc3Rh
bnRCdWZmZXIpCi0gICAgewotICAgICAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRDb25zdGFudEJ1
ZmZlcnMoMCwgMSwgJnBpeGVsQ29uc3RhbnRCdWZmZXIpOwotICAgICAgICBtQ3VycmVudFBpeGVs
Q29uc3RhbnRCdWZmZXIgPSBwaXhlbENvbnN0YW50QnVmZmVyOwotICAgIH0KLQotICAgIC8vIERy
aXZlciB1bmlmb3JtcwotICAgIGlmICghbURyaXZlckNvbnN0YW50QnVmZmVyVlMpCi0gICAgewot
ICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uID0gezB9
OwotICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLkJ5dGVXaWR0aCA9IHNpemVvZihk
eF9WZXJ0ZXhDb25zdGFudHMpOwotICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLlVz
YWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKLSAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlw
dGlvbi5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX0NPTlNUQU5UX0JVRkZFUjsKLSAgICAgICAgY29u
c3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5DUFVBY2Nlc3NGbGFncyA9IDA7Ci0gICAgICAgIGNvbnN0
YW50QnVmZmVyRGVzY3JpcHRpb24uTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgY29uc3RhbnRCdWZm
ZXJEZXNjcmlwdGlvbi5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKLQotICAgICAgICBIUkVTVUxU
IHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlv
biwgTlVMTCwgJm1Ecml2ZXJDb25zdGFudEJ1ZmZlclZTKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChyZXN1bHQpKTsKLQotICAgICAgICBtRGV2aWNlQ29udGV4dC0+VlNTZXRDb25zdGFudEJ1
ZmZlcnMoMSwgMSwgJm1Ecml2ZXJDb25zdGFudEJ1ZmZlclZTKTsKLSAgICB9Ci0KLSAgICBpZiAo
IW1Ecml2ZXJDb25zdGFudEJ1ZmZlclBTKQotICAgIHsKLSAgICAgICAgRDNEMTFfQlVGRkVSX0RF
U0MgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbiA9IHswfTsKLSAgICAgICAgY29uc3RhbnRCdWZm
ZXJEZXNjcmlwdGlvbi5CeXRlV2lkdGggPSBzaXplb2YoZHhfUGl4ZWxDb25zdGFudHMpOwotICAg
ICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVM
VDsKLSAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5CaW5kRmxhZ3MgPSBEM0QxMV9C
SU5EX0NPTlNUQU5UX0JVRkZFUjsKLSAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5D
UFVBY2Nlc3NGbGFncyA9IDA7Ci0gICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uTWlz
Y0ZsYWdzID0gMDsKLSAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5TdHJ1Y3R1cmVC
eXRlU3RyaWRlID0gMDsKLQotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0
ZUJ1ZmZlcigmY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbiwgTlVMTCwgJm1Ecml2ZXJDb25zdGFu
dEJ1ZmZlclBTKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgICAg
ICBtRGV2aWNlQ29udGV4dC0+UFNTZXRDb25zdGFudEJ1ZmZlcnMoMSwgMSwgJm1Ecml2ZXJDb25z
dGFudEJ1ZmZlclBTKTsKLSAgICB9Ci0KLSAgICBpZiAobWVtY21wKCZtVmVydGV4Q29uc3RhbnRz
LCAmbUFwcGxpZWRWZXJ0ZXhDb25zdGFudHMsIHNpemVvZihkeF9WZXJ0ZXhDb25zdGFudHMpKSAh
PSAwKQotICAgIHsKLSAgICAgICAgbURldmljZUNvbnRleHQtPlVwZGF0ZVN1YnJlc291cmNlKG1E
cml2ZXJDb25zdGFudEJ1ZmZlclZTLCAwLCBOVUxMLCAmbVZlcnRleENvbnN0YW50cywgMTYsIDAp
OwotICAgICAgICBtZW1jcHkoJm1BcHBsaWVkVmVydGV4Q29uc3RhbnRzLCAmbVZlcnRleENvbnN0
YW50cywgc2l6ZW9mKGR4X1ZlcnRleENvbnN0YW50cykpOwotICAgIH0KLQotICAgIGlmIChtZW1j
bXAoJm1QaXhlbENvbnN0YW50cywgJm1BcHBsaWVkUGl4ZWxDb25zdGFudHMsIHNpemVvZihkeF9Q
aXhlbENvbnN0YW50cykpICE9IDApCi0gICAgewotICAgICAgICBtRGV2aWNlQ29udGV4dC0+VXBk
YXRlU3VicmVzb3VyY2UobURyaXZlckNvbnN0YW50QnVmZmVyUFMsIDAsIE5VTEwsICZtUGl4ZWxD
b25zdGFudHMsIDE2LCAwKTsKLSAgICAgICAgbWVtY3B5KCZtQXBwbGllZFBpeGVsQ29uc3RhbnRz
LCAmbVBpeGVsQ29uc3RhbnRzLCBzaXplb2YoZHhfUGl4ZWxDb25zdGFudHMpKTsKLSAgICB9Ci0K
LSAgICAvLyBuZWVkZWQgZm9yIHRoZSBwb2ludCBzcHJpdGUgZ2VvbWV0cnkgc2hhZGVyCi0gICAg
aWYgKG1DdXJyZW50R2VvbWV0cnlDb25zdGFudEJ1ZmZlciAhPSBtRHJpdmVyQ29uc3RhbnRCdWZm
ZXJQUykKLSAgICB7Ci0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldENvbnN0YW50QnVmZmVy
cygwLCAxLCAmbURyaXZlckNvbnN0YW50QnVmZmVyUFMpOwotICAgICAgICBtQ3VycmVudEdlb21l
dHJ5Q29uc3RhbnRCdWZmZXIgPSBtRHJpdmVyQ29uc3RhbnRCdWZmZXJQUzsKLSAgICB9Ci19Ci0K
LXZvaWQgUmVuZGVyZXIxMTo6Y2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyYW1ldGVycyAmY2xlYXJQ
YXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpCi17Ci0gICAgIGJvb2wgYWxwaGFV
bm1hc2tlZCA9IChnbDo6R2V0QWxwaGFTaXplKG1SZW5kZXJUYXJnZXREZXNjLmZvcm1hdCkgPT0g
MCkgfHwgY2xlYXJQYXJhbXMuY29sb3JNYXNrQWxwaGE7Ci0gICAgIGJvb2wgbmVlZE1hc2tlZENv
bG9yQ2xlYXIgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpICYmCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKGNsZWFyUGFyYW1zLmNvbG9yTWFza1Jl
ZCAmJiBjbGVhclBhcmFtcy5jb2xvck1hc2tHcmVlbiAmJgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tCbHVlICYmIGFscGhhVW5tYXNrZWQp
OwotCi0gICAgIHVuc2lnbmVkIGludCBzdGVuY2lsVW5tYXNrZWQgPSAweDA7Ci0gICAgIGlmIChm
cmFtZUJ1ZmZlci0+aGFzU3RlbmNpbCgpKQotICAgICB7Ci0gICAgICAgICB1bnNpZ25lZCBpbnQg
c3RlbmNpbFNpemUgPSBnbDo6R2V0U3RlbmNpbFNpemUoZnJhbWVCdWZmZXItPmdldFN0ZW5jaWxi
dWZmZXIoKS0+Z2V0QWN0dWFsRm9ybWF0KCkpOwotICAgICAgICAgc3RlbmNpbFVubWFza2VkID0g
KDB4MSA8PCBzdGVuY2lsU2l6ZSkgLSAxOwotICAgICB9Ci0gICAgIGJvb2wgbmVlZE1hc2tlZFN0
ZW5jaWxDbGVhciA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKSAm
JgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xlYXJQYXJhbXMuc3RlbmNp
bFdyaXRlTWFzayAmIHN0ZW5jaWxVbm1hc2tlZCkgIT0gc3RlbmNpbFVubWFza2VkOwotCi0gICAg
IGJvb2wgbmVlZFNjaXNzb3JlZENsZWFyID0gbVNjaXNzb3JFbmFibGVkICYmIChtQ3VyU2Npc3Nv
ci54ID4gMCB8fCBtQ3VyU2Npc3Nvci55ID4gMCB8fAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbUN1clNjaXNzb3IueCArIG1DdXJTY2lzc29yLndp
ZHRoIDwgbVJlbmRlclRhcmdldERlc2Mud2lkdGggfHwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1DdXJTY2lzc29yLnkgKyBtQ3VyU2Npc3Nvci5o
ZWlnaHQgPCBtUmVuZGVyVGFyZ2V0RGVzYy5oZWlnaHQpOwotCi0gICAgIGlmIChuZWVkTWFza2Vk
Q29sb3JDbGVhciB8fCBuZWVkTWFza2VkU3RlbmNpbENsZWFyIHx8IG5lZWRTY2lzc29yZWRDbGVh
cikKLSAgICAgewotICAgICAgICAgbWFza2VkQ2xlYXIoY2xlYXJQYXJhbXMsIGZyYW1lQnVmZmVy
LT51c2luZ0V4dGVuZGVkRHJhd0J1ZmZlcnMoKSk7Ci0gICAgIH0KLSAgICAgZWxzZQotICAgICB7
Ci0gICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpCi0g
ICAgICAgICB7Ci0gICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50
ID0gMDsgY29sb3JBdHRhY2htZW50IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZF
UlM7IGNvbG9yQXR0YWNobWVudCsrKQotICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
aWYgKGZyYW1lQnVmZmVyLT5pc0VuYWJsZWRDb2xvckF0dGFjaG1lbnQoY29sb3JBdHRhY2htZW50
KSkKLSAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1
ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0ID0gZnJhbWVCdWZmZXItPmdldENvbG9yYnVmZmVyKGNv
bG9yQXR0YWNobWVudCk7Ci0gICAgICAgICAgICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyT2Jq
ZWN0KQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgUmVu
ZGVyVGFyZ2V0MTEgKnJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFy
Z2V0MTEocmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUlIoInJlbmRlciB0YXJnZXQgcG9pbnRl
ciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmZyYW1lYnVmZmVyUlRWID0gcmVuZGVyVGFyZ2V0LT5n
ZXRSZW5kZXJUYXJnZXRWaWV3KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZyYW1l
YnVmZmVyUlRWKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEVSUigicmVuZGVyIHRhcmdldCB2aWV3IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51
bGwuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCBjbGVh
clZhbHVlc1s0XSA9IHsgY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLnJlZCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhclBhcmFt
cy5jb2xvckNsZWFyVmFsdWUuZ3JlZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLmJsdWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLmFscGhhIH07Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtRGV2aWNlQ29udGV4dC0+Q2xlYXJSZW5kZXJUYXJnZXRWaWV3KGZyYW1lYnVmZmVyUlRW
LCBjbGVhclZhbHVlcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFz
ayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQgfHwgY2xlYXJQYXJhbXMubWFzayAmIEdMX1NURU5DSUxf
QlVGRkVSX0JJVCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVu
ZGVyYnVmZmVyT2JqZWN0ID0gZnJhbWVCdWZmZXItPmdldERlcHRoT3JTdGVuY2lsYnVmZmVyKCk7
Ci0gICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyT2JqZWN0KQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIFJlbmRlclRhcmdldDExICpyZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQx
MTo6bWFrZVJlbmRlclRhcmdldDExKHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhTdGVuY2ls
KCkpOwotICAgICAgICAgICAgICAgIGlmICghcmVuZGVyVGFyZ2V0KQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHBvaW50ZXIgdW5leHBl
Y3RlZGx5IG51bGwuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpmcmFtZWJ1
ZmZlckRTViA9IHJlbmRlclRhcmdldC0+Z2V0RGVwdGhTdGVuY2lsVmlldygpOwotICAgICAgICAg
ICAgICAgIGlmICghZnJhbWVidWZmZXJEU1YpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBFUlIoImRlcHRoIHN0ZW5jaWwgdmlldyBwb2ludGVyIHVuZXhwZWN0ZWRseSBu
dWxsLiIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgVUlOVCBjbGVhckZsYWdzID0gMDsKLSAgICAgICAgICAgICAgICBp
ZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBjbGVhckZsYWdzIHw9IEQzRDExX0NMRUFSX0RFUFRI
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFz
ayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNsZWFyRmxhZ3MgfD0gRDNEMTFfQ0xFQVJfU1RFTkNJTDsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBmbG9hdCBkZXB0aENsZWFyID0gZ2w6OmNsYW1wMDEo
Y2xlYXJQYXJhbXMuZGVwdGhDbGVhclZhbHVlKTsKLSAgICAgICAgICAgICAgICBVSU5UOCBzdGVu
Y2lsQ2xlYXIgPSBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSAmIDB4MDAwMDAwRkY7Ci0K
LSAgICAgICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+Q2xlYXJEZXB0aFN0ZW5jaWxWaWV3KGZy
YW1lYnVmZmVyRFNWLCBjbGVhckZsYWdzLCBkZXB0aENsZWFyLCBzdGVuY2lsQ2xlYXIpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFJlbmRlcmVyMTE6Om1hc2tl
ZENsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBib29sIHVzaW5n
RXh0ZW5kZWREcmF3QnVmZmVycykKLXsKLSAgICBIUkVTVUxUIHJlc3VsdDsKLQotICAgIGlmICgh
bUNsZWFyUmVzb3VyY2VzSW5pdGlhbGl6ZWQpCi0gICAgewotICAgICAgICBBU1NFUlQoIW1DbGVh
clZCICYmICFtQ2xlYXJWUyAmJiAhbUNsZWFyU2luZ2xlUFMgJiYgIW1DbGVhck11bHRpcGxlUFMg
JiYgIW1DbGVhclNjaXNzb3JSUyAmJiAhbUNsZWFyTm9TY2lzc29yUlMpOwotCi0gICAgICAgIEQz
RDExX0JVRkZFUl9ERVNDIHZiRGVzYzsKLSAgICAgICAgdmJEZXNjLkJ5dGVXaWR0aCA9IHNpemVv
ZihkM2QxMTo6UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KSAqIDQ7Ci0gICAgICAgIHZiRGVzYy5V
c2FnZSA9IEQzRDExX1VTQUdFX0RZTkFNSUM7Ci0gICAgICAgIHZiRGVzYy5CaW5kRmxhZ3MgPSBE
M0QxMV9CSU5EX1ZFUlRFWF9CVUZGRVI7Ci0gICAgICAgIHZiRGVzYy5DUFVBY2Nlc3NGbGFncyA9
IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7Ci0gICAgICAgIHZiRGVzYy5NaXNjRmxhZ3MgPSAwOwot
ICAgICAgICB2YkRlc2MuU3RydWN0dXJlQnl0ZVN0cmlkZSA9IDA7Ci0KLSAgICAgICAgcmVzdWx0
ID0gbURldmljZS0+Q3JlYXRlQnVmZmVyKCZ2YkRlc2MsIE5VTEwsICZtQ2xlYXJWQik7Ci0gICAg
ICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05h
bWUobUNsZWFyVkIsICJSZW5kZXJlcjExIG1hc2tlZCBjbGVhciB2ZXJ0ZXggYnVmZmVyIik7Ci0K
LSAgICAgICAgRDNEMTFfSU5QVVRfRUxFTUVOVF9ERVNDIHF1YWRMYXlvdXRbXSA9Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIHsgIlBPU0lUSU9OIiwgMCwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZM
T0FULCAgICAwLCAgMCwgRDNEMTFfSU5QVVRfUEVSX1ZFUlRFWF9EQVRBLCAwIH0sCi0gICAgICAg
ICAgICB7ICJDT0xPUiIsICAgIDAsIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCwgMCwg
MTIsIEQzRDExX0lOUFVUX1BFUl9WRVJURVhfREFUQSwgMCB9LAotICAgICAgICB9OwotCi0gICAg
ICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUlucHV0TGF5b3V0KHF1YWRMYXlvdXQsIDIsIGdf
VlNfQ2xlYXIsIHNpemVvZihnX1ZTX0NsZWFyKSwgJm1DbGVhcklMKTsKLSAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ2xlYXJJ
TCwgIlJlbmRlcmVyMTEgbWFza2VkIGNsZWFyIGlucHV0IGxheW91dCIpOwotCi0gICAgICAgIHJl
c3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVZlcnRleFNoYWRlcihnX1ZTX0NsZWFyLCBzaXplb2YoZ19W
U19DbGVhciksIE5VTEwsICZtQ2xlYXJWUyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNsZWFyVlMsICJSZW5kZXJlcjEx
IG1hc2tlZCBjbGVhciB2ZXJ0ZXggc2hhZGVyIik7Ci0KLSAgICAgICAgcmVzdWx0ID0gbURldmlj
ZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19DbGVhclNpbmdsZSwgc2l6ZW9mKGdfUFNfQ2xlYXJT
aW5nbGUpLCBOVUxMLCAmbUNsZWFyU2luZ2xlUFMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhclNpbmdsZVBTLCAi
UmVuZGVyZXIxMSBtYXNrZWQgY2xlYXIgcGl4ZWwgc2hhZGVyICgxIFJUKSIpOwotCi0gICAgICAg
IHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdfUFNfQ2xlYXJNdWx0aXBsZSwg
c2l6ZW9mKGdfUFNfQ2xlYXJNdWx0aXBsZSksIE5VTEwsICZtQ2xlYXJNdWx0aXBsZVBTKTsKLSAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVn
TmFtZShtQ2xlYXJNdWx0aXBsZVBTLCAiUmVuZGVyZXIxMSBtYXNrZWQgY2xlYXIgcGl4ZWwgc2hh
ZGVyIChNUlQpIik7Ci0KLSAgICAgICAgRDNEMTFfUkFTVEVSSVpFUl9ERVNDIHJzU2Npc3NvckRl
c2M7Ci0gICAgICAgIHJzU2Npc3NvckRlc2MuRmlsbE1vZGUgPSBEM0QxMV9GSUxMX1NPTElEOwot
ICAgICAgICByc1NjaXNzb3JEZXNjLkN1bGxNb2RlID0gRDNEMTFfQ1VMTF9OT05FOwotICAgICAg
ICByc1NjaXNzb3JEZXNjLkZyb250Q291bnRlckNsb2Nrd2lzZSA9IEZBTFNFOwotICAgICAgICBy
c1NjaXNzb3JEZXNjLkRlcHRoQmlhcyA9IDA7Ci0gICAgICAgIHJzU2Npc3NvckRlc2MuRGVwdGhC
aWFzQ2xhbXAgPSAwLjBmOwotICAgICAgICByc1NjaXNzb3JEZXNjLlNsb3BlU2NhbGVkRGVwdGhC
aWFzID0gMC4wZjsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5EZXB0aENsaXBFbmFibGUgPSBGQUxT
RTsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5TY2lzc29yRW5hYmxlID0gVFJVRTsKLSAgICAgICAg
cnNTY2lzc29yRGVzYy5NdWx0aXNhbXBsZUVuYWJsZSA9IEZBTFNFOwotICAgICAgICByc1NjaXNz
b3JEZXNjLkFudGlhbGlhc2VkTGluZUVuYWJsZSA9IEZBTFNFOwotCi0gICAgICAgIHJlc3VsdCA9
IG1EZXZpY2UtPkNyZWF0ZVJhc3Rlcml6ZXJTdGF0ZSgmcnNTY2lzc29yRGVzYywgJm1DbGVhclNj
aXNzb3JSUyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQz
ZDExOjpTZXREZWJ1Z05hbWUobUNsZWFyU2Npc3NvclJTLCAiUmVuZGVyZXIxMSBtYXNrZWQgY2xl
YXIgc2Npc3NvciByYXN0ZXJpemVyIHN0YXRlIik7Ci0KLSAgICAgICAgRDNEMTFfUkFTVEVSSVpF
Ul9ERVNDIHJzTm9TY2lzc29yRGVzYzsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLkZpbGxNb2Rl
ID0gRDNEMTFfRklMTF9TT0xJRDsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLkN1bGxNb2RlID0g
RDNEMTFfQ1VMTF9OT05FOwotICAgICAgICByc05vU2Npc3NvckRlc2MuRnJvbnRDb3VudGVyQ2xv
Y2t3aXNlID0gRkFMU0U7Ci0gICAgICAgIHJzTm9TY2lzc29yRGVzYy5EZXB0aEJpYXMgPSAwOwot
ICAgICAgICByc05vU2Npc3NvckRlc2MuRGVwdGhCaWFzQ2xhbXAgPSAwLjBmOwotICAgICAgICBy
c05vU2Npc3NvckRlc2MuU2xvcGVTY2FsZWREZXB0aEJpYXMgPSAwLjBmOwotICAgICAgICByc05v
U2Npc3NvckRlc2MuRGVwdGhDbGlwRW5hYmxlID0gRkFMU0U7Ci0gICAgICAgIHJzTm9TY2lzc29y
RGVzYy5TY2lzc29yRW5hYmxlID0gRkFMU0U7Ci0gICAgICAgIHJzTm9TY2lzc29yRGVzYy5NdWx0
aXNhbXBsZUVuYWJsZSA9IEZBTFNFOwotICAgICAgICByc05vU2Npc3NvckRlc2MuQW50aWFsaWFz
ZWRMaW5lRW5hYmxlID0gRkFMU0U7Ci0KLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRl
UmFzdGVyaXplclN0YXRlKCZyc05vU2Npc3NvckRlc2MsICZtQ2xlYXJOb1NjaXNzb3JSUyk7Ci0g
ICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1
Z05hbWUobUNsZWFyTm9TY2lzc29yUlMsICJSZW5kZXJlcjExIG1hc2tlZCBjbGVhciBubyBzY2lz
c29yIHJhc3Rlcml6ZXIgc3RhdGUiKTsKLQotICAgICAgICBtQ2xlYXJSZXNvdXJjZXNJbml0aWFs
aXplZCA9IHRydWU7Ci0gICAgfQotCi0gICAgLy8gUHJlcGFyZSB0aGUgZGVwdGggc3RlbmNpbCBz
dGF0ZSB0byB3cml0ZSBkZXB0aCB2YWx1ZXMgaWYgdGhlIGRlcHRoIHNob3VsZCBiZSBjbGVhcmVk
Ci0gICAgLy8gYW5kIHN0ZW5jaWwgdmFsdWVzIGlmIHRoZSBzdGVuY2lsIHNob3VsZCBiZSBjbGVh
cmVkCi0gICAgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlIGdsRFNTdGF0ZTsKLSAgICBnbERTU3RhdGUu
ZGVwdGhUZXN0ID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUKSAhPSAw
OwotICAgIGdsRFNTdGF0ZS5kZXB0aEZ1bmMgPSBHTF9BTFdBWVM7Ci0gICAgZ2xEU1N0YXRlLmRl
cHRoTWFzayA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCkgIT0gMDsK
LSAgICBnbERTU3RhdGUuc3RlbmNpbFRlc3QgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX1NURU5D
SUxfQlVGRkVSX0JJVCkgIT0gMDsKLSAgICBnbERTU3RhdGUuc3RlbmNpbEZ1bmMgPSBHTF9BTFdB
WVM7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxNYXNrID0gMDsKLSAgICBnbERTU3RhdGUuc3RlbmNp
bEZhaWwgPSBHTF9SRVBMQUNFOwotICAgIGdsRFNTdGF0ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbCA9
IEdMX1JFUExBQ0U7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzID0gR0xfUkVQ
TEFDRTsKLSAgICBnbERTU3RhdGUuc3RlbmNpbFdyaXRlbWFzayA9IGNsZWFyUGFyYW1zLnN0ZW5j
aWxXcml0ZU1hc2s7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxCYWNrRnVuYyA9IEdMX0FMV0FZUzsK
LSAgICBnbERTU3RhdGUuc3RlbmNpbEJhY2tNYXNrID0gMDsKLSAgICBnbERTU3RhdGUuc3RlbmNp
bEJhY2tGYWlsID0gR0xfUkVQTEFDRTsKLSAgICBnbERTU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVw
dGhGYWlsID0gR0xfUkVQTEFDRTsKLSAgICBnbERTU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQ
YXNzID0gR0xfUkVQTEFDRTsKLSAgICBnbERTU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgPSBj
bGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrOwotCi0gICAgaW50IHN0ZW5jaWxDbGVhciA9IGNs
ZWFyUGFyYW1zLnN0ZW5jaWxDbGVhclZhbHVlICYgMHgwMDAwMDBGRjsKLQotICAgIElEM0QxMURl
cHRoU3RlbmNpbFN0YXRlICpkc1N0YXRlID0gbVN0YXRlQ2FjaGUuZ2V0RGVwdGhTdGVuY2lsU3Rh
dGUoZ2xEU1N0YXRlKTsKLQotICAgIC8vIFByZXBhcmUgdGhlIGJsZW5kIHN0YXRlIHRvIHVzZSBh
IHdyaXRlIG1hc2sgaWYgdGhlIGNvbG9yIGJ1ZmZlciBzaG91bGQgYmUgY2xlYXJlZAotICAgIGds
OjpCbGVuZFN0YXRlIGdsQmxlbmRTdGF0ZTsKLSAgICBnbEJsZW5kU3RhdGUuYmxlbmQgPSBmYWxz
ZTsKLSAgICBnbEJsZW5kU3RhdGUuc291cmNlQmxlbmRSR0IgPSBHTF9PTkU7Ci0gICAgZ2xCbGVu
ZFN0YXRlLmRlc3RCbGVuZFJHQiA9IEdMX1pFUk87Ci0gICAgZ2xCbGVuZFN0YXRlLnNvdXJjZUJs
ZW5kQWxwaGEgPSBHTF9PTkU7Ci0gICAgZ2xCbGVuZFN0YXRlLmRlc3RCbGVuZEFscGhhID0gR0xf
WkVSTzsKLSAgICBnbEJsZW5kU3RhdGUuYmxlbmRFcXVhdGlvblJHQiA9IEdMX0ZVTkNfQUREOwot
ICAgIGdsQmxlbmRTdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEgPSBHTF9GVU5DX0FERDsKLSAgICBn
bEJsZW5kU3RhdGUuY29sb3JNYXNrUmVkID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xPUl9C
VUZGRVJfQklUKSA/IGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCA6IGZhbHNlOwotICAgIGdsQmxl
bmRTdGF0ZS5jb2xvck1hc2tHcmVlbiA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVG
RkVSX0JJVCkgPyBjbGVhclBhcmFtcy5jb2xvck1hc2tHcmVlbiA6IGZhbHNlOwotICAgIGdsQmxl
bmRTdGF0ZS5jb2xvck1hc2tCbHVlID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xPUl9CVUZG
RVJfQklUKSA/IGNsZWFyUGFyYW1zLmNvbG9yTWFza0JsdWUgOiBmYWxzZTsKLSAgICBnbEJsZW5k
U3RhdGUuY29sb3JNYXNrQWxwaGEgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZF
Ul9CSVQpID8gY2xlYXJQYXJhbXMuY29sb3JNYXNrQWxwaGEgOiBmYWxzZTsKLSAgICBnbEJsZW5k
U3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlID0gZmFsc2U7Ci0gICAgZ2xCbGVuZFN0YXRlLmRp
dGhlciA9IGZhbHNlOwotCi0gICAgc3RhdGljIGNvbnN0IGZsb2F0IGJsZW5kRmFjdG9yc1s0XSA9
IHsgMS4wZiwgMS4wZiwgMS4wZiwgMS4wZiB9OwotICAgIHN0YXRpYyBjb25zdCBVSU5UIHNhbXBs
ZU1hc2sgPSAweEZGRkZGRkZGOwotCi0gICAgSUQzRDExQmxlbmRTdGF0ZSAqYmxlbmRTdGF0ZSA9
IG1TdGF0ZUNhY2hlLmdldEJsZW5kU3RhdGUoZ2xCbGVuZFN0YXRlKTsKLQotICAgIC8vIFNldCB0
aGUgdmVydGljZXMKLSAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7
Ci0gICAgcmVzdWx0ID0gbURldmljZUNvbnRleHQtPk1hcChtQ2xlYXJWQiwgMCwgRDNEMTFfTUFQ
X1dSSVRFX0RJU0NBUkQsIDAsICZtYXBwZWRSZXNvdXJjZSk7Ci0gICAgaWYgKEZBSUxFRChyZXN1
bHQpKQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gbWFwIG1hc2tlZCBjbGVhciB2ZXJ0
ZXggYnVmZmVyLCBIUkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBkM2QxMTo6UG9zaXRpb25EZXB0aENvbG9yVmVydGV4ICp2ZXJ0aWNlcyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8ZDNkMTE6OlBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCo+KG1hcHBlZFJl
c291cmNlLnBEYXRhKTsKLQotICAgIGZsb2F0IGRlcHRoQ2xlYXIgPSBnbDo6Y2xhbXAwMShjbGVh
clBhcmFtcy5kZXB0aENsZWFyVmFsdWUpOwotICAgIGQzZDExOjpTZXRQb3NpdGlvbkRlcHRoQ29s
b3JWZXJ0ZXgoJnZlcnRpY2VzWzBdLCAtMS4wZiwgIDEuMGYsIGRlcHRoQ2xlYXIsIGNsZWFyUGFy
YW1zLmNvbG9yQ2xlYXJWYWx1ZSk7Ci0gICAgZDNkMTE6OlNldFBvc2l0aW9uRGVwdGhDb2xvclZl
cnRleCgmdmVydGljZXNbMV0sIC0xLjBmLCAtMS4wZiwgZGVwdGhDbGVhciwgY2xlYXJQYXJhbXMu
Y29sb3JDbGVhclZhbHVlKTsKLSAgICBkM2QxMTo6U2V0UG9zaXRpb25EZXB0aENvbG9yVmVydGV4
KCZ2ZXJ0aWNlc1syXSwgIDEuMGYsICAxLjBmLCBkZXB0aENsZWFyLCBjbGVhclBhcmFtcy5jb2xv
ckNsZWFyVmFsdWUpOwotICAgIGQzZDExOjpTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgoJnZl
cnRpY2VzWzNdLCAgMS4wZiwgLTEuMGYsIGRlcHRoQ2xlYXIsIGNsZWFyUGFyYW1zLmNvbG9yQ2xl
YXJWYWx1ZSk7Ci0KLSAgICBtRGV2aWNlQ29udGV4dC0+VW5tYXAobUNsZWFyVkIsIDApOwotCi0g
ICAgLy8gQXBwbHkgc3RhdGUKLSAgICBtRGV2aWNlQ29udGV4dC0+T01TZXRCbGVuZFN0YXRlKGJs
ZW5kU3RhdGUsIGJsZW5kRmFjdG9ycywgc2FtcGxlTWFzayk7Ci0gICAgbURldmljZUNvbnRleHQt
Pk9NU2V0RGVwdGhTdGVuY2lsU3RhdGUoZHNTdGF0ZSwgc3RlbmNpbENsZWFyKTsKLSAgICBtRGV2
aWNlQ29udGV4dC0+UlNTZXRTdGF0ZShtU2Npc3NvckVuYWJsZWQgPyBtQ2xlYXJTY2lzc29yUlMg
OiBtQ2xlYXJOb1NjaXNzb3JSUyk7Ci0KLSAgICAvLyBBcHBseSBzaGFkZXJzCi0gICAgSUQzRDEx
UGl4ZWxTaGFkZXIgKnBpeGVsU2hhZGVyID0gdXNpbmdFeHRlbmRlZERyYXdCdWZmZXJzID8gbUNs
ZWFyTXVsdGlwbGVQUyA6IG1DbGVhclNpbmdsZVBTOwotCi0gICAgbURldmljZUNvbnRleHQtPklB
U2V0SW5wdXRMYXlvdXQobUNsZWFySUwpOwotICAgIG1EZXZpY2VDb250ZXh0LT5WU1NldFNoYWRl
cihtQ2xlYXJWUywgTlVMTCwgMCk7Ci0gICAgbURldmljZUNvbnRleHQtPlBTU2V0U2hhZGVyKHBp
eGVsU2hhZGVyLCBOVUxMLCAwKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIoTlVM
TCwgTlVMTCwgMCk7Ci0KLSAgICAvLyBBcHBseSB2ZXJ0ZXggYnVmZmVyCi0gICAgc3RhdGljIFVJ
TlQgc3RyaWRlID0gc2l6ZW9mKGQzZDExOjpQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgpOwotICAg
IHN0YXRpYyBVSU5UIHN0YXJ0SWR4ID0gMDsKLSAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRWZXJ0
ZXhCdWZmZXJzKDAsIDEsICZtQ2xlYXJWQiwgJnN0cmlkZSwgJnN0YXJ0SWR4KTsKLSAgICBtRGV2
aWNlQ29udGV4dC0+SUFTZXRQcmltaXRpdmVUb3BvbG9neShEM0RfUFJJTUlUSVZFX1RPUE9MT0dZ
X1RSSUFOR0xFU1RSSVApOwotCi0gICAgLy8gRHJhdyB0aGUgY2xlYXIgcXVhZAotICAgIG1EZXZp
Y2VDb250ZXh0LT5EcmF3KDQsIDApOwotCi0gICAgLy8gQ2xlYW4gdXAKLSAgICBtYXJrQWxsU3Rh
dGVEaXJ0eSgpOwotfQotCi12b2lkIFJlbmRlcmVyMTE6Om1hcmtBbGxTdGF0ZURpcnR5KCkKLXsK
LSAgICBmb3IgKHVuc2lnbmVkIGludCBydEluZGV4ID0gMDsgcnRJbmRleCA8IGdsOjpJTVBMRU1F
TlRBVElPTl9NQVhfRFJBV19CVUZGRVJTOyBydEluZGV4KyspCi0gICAgewotICAgICAgICBtQXBw
bGllZFJlbmRlclRhcmdldFNlcmlhbHNbcnRJbmRleF0gPSAwOwotICAgIH0KLSAgICBtQXBwbGll
ZERlcHRoYnVmZmVyU2VyaWFsID0gMDsKLSAgICBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwg
PSAwOwotICAgIG1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCA9IGZhbHNlOwotICAgIG1SZW5kZXJU
YXJnZXREZXNjSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Z2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgaSsrKQot
ICAgIHsKLSAgICAgICAgbUZvcmNlU2V0VmVydGV4U2FtcGxlclN0YXRlc1tpXSA9IHRydWU7Ci0g
ICAgICAgIG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1tpXSA9IDA7Ci0gICAgfQotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyBpKyspCi0gICAgewot
ICAgICAgICBtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0ZXNbaV0gPSB0cnVlOwotICAgICAgICBt
Q3VyUGl4ZWxUZXh0dXJlU2VyaWFsc1tpXSA9IDA7Ci0gICAgfQotCi0gICAgbUZvcmNlU2V0Qmxl
bmRTdGF0ZSA9IHRydWU7Ci0gICAgbUZvcmNlU2V0UmFzdGVyU3RhdGUgPSB0cnVlOwotICAgIG1G
b3JjZVNldERlcHRoU3RlbmNpbFN0YXRlID0gdHJ1ZTsKLSAgICBtRm9yY2VTZXRTY2lzc29yID0g
dHJ1ZTsKLSAgICBtRm9yY2VTZXRWaWV3cG9ydCA9IHRydWU7Ci0KLSAgICBtQXBwbGllZElCU2Vy
aWFsID0gMDsKLSAgICBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbCA9IDA7Ci0gICAgbUFwcGxpZWRJ
Qk9mZnNldCA9IDA7Ci0KLSAgICBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWwgPSAwOwotICAg
IG1lbXNldCgmbUFwcGxpZWRWZXJ0ZXhDb25zdGFudHMsIDAsIHNpemVvZihkeF9WZXJ0ZXhDb25z
dGFudHMpKTsKLSAgICBtZW1zZXQoJm1BcHBsaWVkUGl4ZWxDb25zdGFudHMsIDAsIHNpemVvZihk
eF9QaXhlbENvbnN0YW50cykpOwotCi0gICAgbUlucHV0TGF5b3V0Q2FjaGUubWFya0RpcnR5KCk7
Ci0KLSAgICBtQ3VycmVudFZlcnRleENvbnN0YW50QnVmZmVyID0gTlVMTDsKLSAgICBtQ3VycmVu
dFBpeGVsQ29uc3RhbnRCdWZmZXIgPSBOVUxMOwotICAgIG1DdXJyZW50R2VvbWV0cnlDb25zdGFu
dEJ1ZmZlciA9IE5VTEw7Ci0KLSAgICBtQ3VycmVudFByaW1pdGl2ZVRvcG9sb2d5ID0gRDNEX1BS
SU1JVElWRV9UT1BPTE9HWV9VTkRFRklORUQ7Ci19Ci0KLXZvaWQgUmVuZGVyZXIxMTo6cmVsZWFz
ZURldmljZVJlc291cmNlcygpCi17Ci0gICAgbVN0YXRlQ2FjaGUuY2xlYXIoKTsKLSAgICBtSW5w
dXRMYXlvdXRDYWNoZS5jbGVhcigpOwotCi0gICAgZGVsZXRlIG1WZXJ0ZXhEYXRhTWFuYWdlcjsK
LSAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBOVUxMOwotCi0gICAgZGVsZXRlIG1JbmRleERhdGFN
YW5hZ2VyOwotICAgIG1JbmRleERhdGFNYW5hZ2VyID0gTlVMTDsKLQotICAgIGRlbGV0ZSBtTGlu
ZUxvb3BJQjsKLSAgICBtTGluZUxvb3BJQiA9IE5VTEw7Ci0KLSAgICBkZWxldGUgbVRyaWFuZ2xl
RmFuSUI7Ci0gICAgbVRyaWFuZ2xlRmFuSUIgPSBOVUxMOwotCi0gICAgU2FmZVJlbGVhc2UobUNv
cHlWQik7Ci0gICAgU2FmZVJlbGVhc2UobUNvcHlTYW1wbGVyKTsKLSAgICBTYWZlUmVsZWFzZSht
Q29weUlMKTsKLSAgICBTYWZlUmVsZWFzZShtQ29weUlMKTsKLSAgICBTYWZlUmVsZWFzZShtQ29w
eVZTKTsKLSAgICBTYWZlUmVsZWFzZShtQ29weVJHQkFQUyk7Ci0gICAgU2FmZVJlbGVhc2UobUNv
cHlSR0JQUyk7Ci0gICAgU2FmZVJlbGVhc2UobUNvcHlMdW1QUyk7Ci0gICAgU2FmZVJlbGVhc2Uo
bUNvcHlMdW1BbHBoYVBTKTsKLQotICAgIG1Db3B5UmVzb3VyY2VzSW5pdGlhbGl6ZWQgPSBmYWxz
ZTsKLQotICAgIFNhZmVSZWxlYXNlKG1DbGVhclZCKTsKLSAgICBTYWZlUmVsZWFzZShtQ2xlYXJJ
TCk7Ci0gICAgU2FmZVJlbGVhc2UobUNsZWFyVlMpOwotICAgIFNhZmVSZWxlYXNlKG1DbGVhclNp
bmdsZVBTKTsKLSAgICBTYWZlUmVsZWFzZShtQ2xlYXJNdWx0aXBsZVBTKTsKLSAgICBTYWZlUmVs
ZWFzZShtQ2xlYXJTY2lzc29yUlMpOwotICAgIFNhZmVSZWxlYXNlKG1DbGVhck5vU2Npc3NvclJT
KTsKLQotICAgIG1DbGVhclJlc291cmNlc0luaXRpYWxpemVkID0gZmFsc2U7Ci0KLSAgICBTYWZl
UmVsZWFzZShtRHJpdmVyQ29uc3RhbnRCdWZmZXJWUyk7Ci0gICAgU2FmZVJlbGVhc2UobURyaXZl
ckNvbnN0YW50QnVmZmVyUFMpOwotICAgIFNhZmVSZWxlYXNlKG1TeW5jUXVlcnkpOwotfQotCi12
b2lkIFJlbmRlcmVyMTE6Om5vdGlmeURldmljZUxvc3QoKQotewotICAgIG1EZXZpY2VMb3N0ID0g
dHJ1ZTsKLSAgICBtRGlzcGxheS0+bm90aWZ5RGV2aWNlTG9zdCgpOwotfQotCi1ib29sIFJlbmRl
cmVyMTE6OmlzRGV2aWNlTG9zdCgpCi17Ci0gICAgcmV0dXJuIG1EZXZpY2VMb3N0OwotfQotCi0v
LyBzZXQgbm90aWZ5IHRvIHRydWUgdG8gYnJvYWRjYXN0IGEgbWVzc2FnZSB0byBhbGwgY29udGV4
dHMgb2YgdGhlIGRldmljZSBsb3NzCi1ib29sIFJlbmRlcmVyMTE6OnRlc3REZXZpY2VMb3N0KGJv
b2wgbm90aWZ5KQotewotICAgIGJvb2wgaXNMb3N0ID0gZmFsc2U7Ci0KLSAgICAvLyBHZXRSZW1v
dmVkUmVhc29uIGlzIHVzZWQgdG8gdGVzdCBpZiB0aGUgZGV2aWNlIGlzIHJlbW92ZWQKLSAgICBI
UkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkdldERldmljZVJlbW92ZWRSZWFzb24oKTsKLSAgICBp
c0xvc3QgPSBkM2QxMTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KTsKLQotICAgIGlmIChpc0xv
c3QpCi0gICAgewotICAgICAgICAvLyBMb2cgZXJyb3IgaWYgdGhpcyBpcyBhIG5ldyBkZXZpY2Ug
bG9zdCBldmVudAotICAgICAgICBpZiAobURldmljZUxvc3QgPT0gZmFsc2UpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEVSUigiVGhlIEQzRDExIGRldmljZSB3YXMgcmVtb3ZlZDogMHglMDhYIiwg
cmVzdWx0KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGVuc3VyZSB3ZSBub3RlIHRoZSBkZXZp
Y2UgbG9zcyAtLQotICAgICAgICAvLyB3ZSdsbCBwcm9iYWJseSBnZXQgdGhpcyBkb25lIGFnYWlu
IGJ5IG5vdGlmeURldmljZUxvc3QKLSAgICAgICAgLy8gYnV0IGJlc3QgdG8gcmVtZW1iZXIgaXQh
Ci0gICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCB3YW50IHRvIGNsZWFyIHRoZSBkZXZpY2Ug
bG9zcyBzdGF0dXMgaGVyZQotICAgICAgICAvLyAtLSB0aGlzIG5lZWRzIHRvIGJlIGRvbmUgYnkg
cmVzZXREZXZpY2UKLSAgICAgICAgbURldmljZUxvc3QgPSB0cnVlOwotICAgICAgICBpZiAobm90
aWZ5KQotICAgICAgICB7Ci0gICAgICAgICAgICBub3RpZnlEZXZpY2VMb3N0KCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gaXNMb3N0OwotfQotCi1ib29sIFJlbmRlcmVyMTE6OnRl
c3REZXZpY2VSZXNldHRhYmxlKCkKLXsKLSAgICAvLyBkZXRlcm1pbmUgaWYgdGhlIGRldmljZSBp
cyByZXNldHRhYmxlIGJ5IGNyZWF0aW5nIGEgZHVtbXkgZGV2aWNlCi0gICAgUEZOX0QzRDExX0NS
RUFURV9ERVZJQ0UgRDNEMTFDcmVhdGVEZXZpY2UgPSAoUEZOX0QzRDExX0NSRUFURV9ERVZJQ0Up
R2V0UHJvY0FkZHJlc3MobUQzZDExTW9kdWxlLCAiRDNEMTFDcmVhdGVEZXZpY2UiKTsKLQotICAg
IGlmIChEM0QxMUNyZWF0ZURldmljZSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIEQzRF9GRUFUVVJFX0xFVkVMIGZlYXR1cmVMZXZlbHNbXSA9Ci0g
ICAgewotICAgICAgICBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wLAotICAgICAgICBEM0RfRkVBVFVS
RV9MRVZFTF8xMF8xLAotICAgICAgICBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wLAotICAgIH07Ci0K
LSAgICBJRDNEMTFEZXZpY2UqIGR1bW15RGV2aWNlOwotICAgIEQzRF9GRUFUVVJFX0xFVkVMIGR1
bW15RmVhdHVyZUxldmVsOwotICAgIElEM0QxMURldmljZUNvbnRleHQqIGR1bW15Q29udGV4dDsK
LQotICAgIEhSRVNVTFQgcmVzdWx0ID0gRDNEMTFDcmVhdGVEZXZpY2UoTlVMTCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRF9EUklWRVJfVFlQRV9IQVJEV0FSRSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjaWYgZGVmaW5lZChfREVCVUcpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0QxMV9DUkVBVEVfREVWSUNFX0RFQlVH
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2Vsc2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAjZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZlYXR1cmVMZXZlbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBcnJheVNpemUoZmVhdHVyZUxldmVscyksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBEM0QxMV9TREtfVkVSU0lPTiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZkdW1teURldmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZkdW1teUZlYXR1cmVMZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZkdW1teUNvbnRleHQpOwotCi0gICAgaWYgKCFtRGV2aWNlIHx8IEZB
SUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IGR1bW15Q29udGV4dC0+UmVsZWFzZSgpOwotICAgIGR1bW15RGV2aWNlLT5SZWxlYXNlKCk7Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBSZW5kZXJlcjExOjpyZWxlYXNlKCkKLXsKLSAg
ICByZWxlYXNlRGV2aWNlUmVzb3VyY2VzKCk7Ci0KLSAgICBpZiAobUR4Z2lGYWN0b3J5KQotICAg
IHsKLSAgICAgICAgbUR4Z2lGYWN0b3J5LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EeGdpRmFjdG9y
eSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1EeGdpQWRhcHRlcikKLSAgICB7Ci0gICAgICAg
IG1EeGdpQWRhcHRlci0+UmVsZWFzZSgpOwotICAgICAgICBtRHhnaUFkYXB0ZXIgPSBOVUxMOwot
ICAgIH0KLQotICAgIGlmIChtRGV2aWNlQ29udGV4dCkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2VD
b250ZXh0LT5DbGVhclN0YXRlKCk7Ci0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5GbHVzaCgpOwot
ICAgICAgICBtRGV2aWNlQ29udGV4dC0+UmVsZWFzZSgpOwotICAgICAgICBtRGV2aWNlQ29udGV4
dCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1EZXZpY2UpCi0gICAgewotICAgICAgICBtRGV2
aWNlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EZXZpY2UgPSBOVUxMOwotICAgIH0KLQotICAgIGlm
IChtRDNkMTFNb2R1bGUpCi0gICAgewotICAgICAgICBGcmVlTGlicmFyeShtRDNkMTFNb2R1bGUp
OwotICAgICAgICBtRDNkMTFNb2R1bGUgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtRHhnaU1v
ZHVsZSkKLSAgICB7Ci0gICAgICAgIEZyZWVMaWJyYXJ5KG1EeGdpTW9kdWxlKTsKLSAgICAgICAg
bUR4Z2lNb2R1bGUgPSBOVUxMOwotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJlcjExOjpyZXNldERl
dmljZSgpCi17Ci0gICAgLy8gcmVjcmVhdGUgZXZlcnl0aGluZwotICAgIHJlbGVhc2UoKTsKLSAg
ICBFR0xpbnQgcmVzdWx0ID0gaW5pdGlhbGl6ZSgpOwotCi0gICAgaWYgKHJlc3VsdCAhPSBFR0xf
U1VDQ0VTUykKLSAgICB7Ci0gICAgICAgIEVSUigiQ291bGQgbm90IHJlaW5pdGlhbGl6ZSBEM0Qx
MSBkZXZpY2U6ICUwOFgiLCByZXN1bHQpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgbURldmljZUxvc3QgPSBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1EV09S
RCBSZW5kZXJlcjExOjpnZXRBZGFwdGVyVmVuZG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUFk
YXB0ZXJEZXNjcmlwdGlvbi5WZW5kb3JJZDsKLX0KLQotc3RkOjpzdHJpbmcgUmVuZGVyZXIxMTo6
Z2V0UmVuZGVyZXJEZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgc3RkOjpvc3RyaW5nc3RyZWFt
IHJlbmRlcmVyU3RyaW5nOwotCi0gICAgcmVuZGVyZXJTdHJpbmcgPDwgbURlc2NyaXB0aW9uOwot
ICAgIHJlbmRlcmVyU3RyaW5nIDw8ICIgRGlyZWN0M0QxMSI7Ci0KLSAgICByZW5kZXJlclN0cmlu
ZyA8PCAiIHZzXyIgPDwgZ2V0TWFqb3JTaGFkZXJNb2RlbCgpIDw8ICJfIiA8PCBnZXRNaW5vclNo
YWRlck1vZGVsKCk7Ci0gICAgcmVuZGVyZXJTdHJpbmcgPDwgIiBwc18iIDw8IGdldE1ham9yU2hh
ZGVyTW9kZWwoKSA8PCAiXyIgPDwgZ2V0TWlub3JTaGFkZXJNb2RlbCgpOwotCi0gICAgcmV0dXJu
IHJlbmRlcmVyU3RyaW5nLnN0cigpOwotfQotCi1HVUlEIFJlbmRlcmVyMTE6OmdldEFkYXB0ZXJJ
ZGVudGlmaWVyKCkgY29uc3QKLXsKLSAgICAvLyBVc2UgdGhlIGFkYXB0ZXIgTFVJRCBhcyBvdXIg
YWRhcHRlciBJRAotICAgIC8vIFRoaXMgbnVtYmVyIGlzIGxvY2FsIHRvIGEgbWFjaGluZSBpcyBv
bmx5IGd1YXJhbnRlZWQgdG8gYmUgdW5pcXVlIGJldHdlZW4gcmVzdGFydHMKLSAgICBNRVRBX0FT
U0VSVChzaXplb2YoTFVJRCkgPD0gc2l6ZW9mKEdVSUQpKTsKLSAgICBHVUlEIGFkYXB0ZXJJZCA9
IHswfTsKLSAgICBtZW1jcHkoJmFkYXB0ZXJJZCwgJm1BZGFwdGVyRGVzY3JpcHRpb24uQWRhcHRl
ckx1aWQsIHNpemVvZihMVUlEKSk7Ci0gICAgcmV0dXJuIGFkYXB0ZXJJZDsKLX0KLQotYm9vbCBS
ZW5kZXJlcjExOjpnZXRCR1JBVGV4dHVyZVN1cHBvcnQoKSBjb25zdAotewotICAgIHJldHVybiBt
QkdSQVRleHR1cmVTdXBwb3J0OwotfQotCi1ib29sIFJlbmRlcmVyMTE6OmdldERYVDFUZXh0dXJl
U3VwcG9ydCgpCi17Ci0gICAgcmV0dXJuIG1EWFQxVGV4dHVyZVN1cHBvcnQ7Ci19Ci0KLWJvb2wg
UmVuZGVyZXIxMTo6Z2V0RFhUM1RleHR1cmVTdXBwb3J0KCkKLXsKLSAgICByZXR1cm4gbURYVDNU
ZXh0dXJlU3VwcG9ydDsKLX0KLQotYm9vbCBSZW5kZXJlcjExOjpnZXREWFQ1VGV4dHVyZVN1cHBv
cnQoKQotewotICAgIHJldHVybiBtRFhUNVRleHR1cmVTdXBwb3J0OwotfQotCi1ib29sIFJlbmRl
cmVyMTE6OmdldERlcHRoVGV4dHVyZVN1cHBvcnQoKSBjb25zdAotewotICAgIHJldHVybiBtRGVw
dGhUZXh0dXJlU3VwcG9ydDsKLX0KLQotYm9vbCBSZW5kZXJlcjExOjpnZXRGbG9hdDMyVGV4dHVy
ZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKQotewotICAgICpyZW5k
ZXJhYmxlID0gbUZsb2F0MzJSZW5kZXJTdXBwb3J0OwotICAgICpmaWx0ZXJpbmcgPSBtRmxvYXQz
MkZpbHRlclN1cHBvcnQ7Ci0gICAgcmV0dXJuIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQ7Ci19Ci0K
LWJvb2wgUmVuZGVyZXIxMTo6Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmlu
ZywgYm9vbCAqcmVuZGVyYWJsZSkKLXsKLSAgICAqcmVuZGVyYWJsZSA9IG1GbG9hdDE2UmVuZGVy
U3VwcG9ydDsKLSAgICAqZmlsdGVyaW5nID0gbUZsb2F0MTZGaWx0ZXJTdXBwb3J0OwotICAgIHJl
dHVybiBtRmxvYXQxNlRleHR1cmVTdXBwb3J0OwotfQotCi1ib29sIFJlbmRlcmVyMTE6OmdldEx1
bWluYW5jZVRleHR1cmVTdXBwb3J0KCkKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
UmVuZGVyZXIxMTo6Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpCi17Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlcmVyMTE6OmdldFRleHR1cmVGaWx0ZXJBbmlzb3Ry
b3B5U3VwcG9ydCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWZsb2F0IFJlbmRl
cmVyMTE6OmdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1G
ZWF0dXJlTGV2ZWwpCi0gICAgewotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgot
ICAgICAgICByZXR1cm4gRDNEMTFfTUFYX01BWEFOSVNPVFJPUFk7Ci0gICAgICBjYXNlIEQzRF9G
RUFUVVJFX0xFVkVMXzEwXzE6Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6Ci0g
ICAgICAgIHJldHVybiBEM0QxMF9NQVhfTUFYQU5JU09UUk9QWTsKLSAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJl
cjExOjpnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVJh
bmdlIFJlbmRlcmVyMTE6OmdldFZpZXdwb3J0Qm91bmRzKCkgY29uc3QKLXsKLSAgICBzd2l0Y2gg
KG1GZWF0dXJlTGV2ZWwpCi0gICAgewotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8w
OgotICAgICAgICByZXR1cm4gUmFuZ2UoRDNEMTFfVklFV1BPUlRfQk9VTkRTX01JTiwgRDNEMTFf
VklFV1BPUlRfQk9VTkRTX01BWCk7Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6
Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6Ci0gICAgICAgIHJldHVybiBSYW5n
ZShEM0QxMF9WSUVXUE9SVF9CT1VORFNfTUlOLCBEM0QxMF9WSUVXUE9SVF9CT1VORFNfTUFYKTsK
LSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiBSYW5nZSgwLCAw
KTsKLSAgICB9Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJlcjExOjpnZXRNYXhWZXJ0ZXhUZXh0
dXJlSW1hZ2VVbml0cygpIGNvbnN0Ci17Ci0gICAgTUVUQV9BU1NFUlQoTUFYX1RFWFRVUkVfSU1B
R0VfVU5JVFNfVlRGX1NNNCA8PSBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJF
X0lNQUdFX1VOSVRTKTsKLSAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCi0gICAgewotICAgICAg
Y2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZF
TF8xMF8xOgotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgotICAgICAgICByZXR1
cm4gTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGX1NNNDsKLSAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotdW5zaWduZWQgaW50IFJl
bmRlcmVyMTE6OmdldE1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdAotewotICAg
IHJldHVybiBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKyBnZXRNYXhWZXJ0ZXhUZXh0dXJl
SW1hZ2VVbml0cygpOwotfQotCi11bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0UmVzZXJ2ZWRW
ZXJ0ZXhVbmlmb3JtVmVjdG9ycygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7ICAgLy8gRHJpdmVy
IHVuaWZvcm1zIGFyZSBzdG9yZWQgaW4gYSBzZXBhcmF0ZSBjb25zdGFudCBidWZmZXIKLX0KLQot
dW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldFJlc2VydmVkRnJhZ21lbnRVbmlmb3JtVmVjdG9y
cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7ICAgLy8gRHJpdmVyIHVuaWZvcm1zIGFyZSBzdG9y
ZWQgaW4gYSBzZXBhcmF0ZSBjb25zdGFudCBidWZmZXIKLX0KLQotdW5zaWduZWQgaW50IFJlbmRl
cmVyMTE6OmdldE1heFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29uc3QKLXsKLSAgICBNRVRBX0FT
U0VSVChNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SU19EM0QxMSA8PSBEM0QxMF9SRVFfQ09OU1RB
TlRfQlVGRkVSX0VMRU1FTlRfQ09VTlQpOwotICAgIEFTU0VSVChtRmVhdHVyZUxldmVsID49IEQz
RF9GRUFUVVJFX0xFVkVMXzEwXzApOwotICAgIHJldHVybiBNQVhfVkVSVEVYX1VOSUZPUk1fVkVD
VE9SU19EM0QxMTsKLX0KLQotdW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldE1heEZyYWdtZW50
VW5pZm9ybVZlY3RvcnMoKSBjb25zdAotewotICAgIE1FVEFfQVNTRVJUKE1BWF9GUkFHTUVOVF9V
TklGT1JNX1ZFQ1RPUlNfRDNEMTEgPD0gRDNEMTBfUkVRX0NPTlNUQU5UX0JVRkZFUl9FTEVNRU5U
X0NPVU5UKTsKLSAgICBBU1NFUlQobUZlYXR1cmVMZXZlbCA+PSBEM0RfRkVBVFVSRV9MRVZFTF8x
MF8wKTsKLSAgICByZXR1cm4gTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SU19EM0QxMTsKLX0K
LQotdW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldE1heFZhcnlpbmdWZWN0b3JzKCkgY29uc3QK
LXsKLSAgICBNRVRBX0FTU0VSVChnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZBUllJTkdfVkVDVE9S
UyA9PSBEM0QxMV9WU19PVVRQVVRfUkVHSVNURVJfQ09VTlQpOwotICAgIHN3aXRjaCAobUZlYXR1
cmVMZXZlbCkKLSAgICB7Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6Ci0gICAg
ICAgIHJldHVybiBEM0QxMV9WU19PVVRQVVRfUkVHSVNURVJfQ09VTlQ7Ci0gICAgICBjYXNlIEQz
RF9GRUFUVVJFX0xFVkVMXzEwXzE6Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6
Ci0gICAgICAgIHJldHVybiBEM0QxMF9WU19PVVRQVVRfUkVHSVNURVJfQ09VTlQ7Ci0gICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLWJv
b2wgUmVuZGVyZXIxMTo6Z2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25zdAotewotICAg
IHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKLSAgICB7Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xF
VkVMXzExXzA6Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6Ci0gICAgICBjYXNl
IEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQot
Ym9vbCBSZW5kZXJlcjExOjpnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKSBjb25zdAotewotICAg
IHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKLSAgICB7Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xF
VkVMXzExXzA6Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6Ci0gICAgICBjYXNl
IEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQot
Ym9vbCBSZW5kZXJlcjExOjpnZXRJbnN0YW5jaW5nU3VwcG9ydCgpIGNvbnN0Ci17Ci0gICAgc3dp
dGNoIChtRmVhdHVyZUxldmVsKQotICAgIHsKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxf
MTFfMDoKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKLSAgICAgIGNhc2UgRDNE
X0ZFQVRVUkVfTEVWRUxfMTBfMDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29s
IFJlbmRlcmVyMTE6OmdldFNoYXJlSGFuZGxlU3VwcG9ydCgpIGNvbnN0Ci17Ci0gICAgLy8gV2Ug
b25seSBjdXJyZW50bHkgc3VwcG9ydCBzaGFyZSBoYW5kbGVzIHdpdGggQkdSQSBzdXJmYWNlcywg
YmVjYXVzZQotICAgIC8vIGNocm9tZSBuZWVkcyBCR1JBLiBPbmNlIGNocm9tZSBmaXhlcyB0aGlz
LCB3ZSBzaG91bGQgYWx3YXlzIHN1cHBvcnQgdGhlbS4KLSAgICAvLyBQSVggZG9lc24ndCBzZWVt
IHRvIHN1cHBvcnQgdXNpbmcgc2hhcmUgaGFuZGxlcywgc28gZGlzYWJsZSB0aGVtLgotICAgIHJl
dHVybiBnZXRCR1JBVGV4dHVyZVN1cHBvcnQoKSAmJiAhZ2w6OnBlcmZBY3RpdmUoKTsKLX0KLQot
Ym9vbCBSZW5kZXJlcjExOjpnZXREZXJpdmF0aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0KCkgY29uc3QK
LXsKLSAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCi0gICAgewotICAgICAgY2FzZSBEM0RfRkVB
VFVSRV9MRVZFTF8xMV8wOgotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgotICAg
ICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci19Ci0KLWJvb2wgUmVuZGVyZXIxMTo6Z2V0UG9zdFN1YkJ1ZmZlclN1cHBvcnQoKSBjb25zdAot
ewotICAgIC8vIEQzRDExIGRvZXMgbm90IHN1cHBvcnQgcHJlc2VudCB3aXRoIGRpcnR5IHJlY3Rh
bmdsZXMgdW50aWwgRDNEMTEuMSBhbmQgRFhHSSAxLjIuCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1pbnQgUmVuZGVyZXIxMTo6Z2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNvbnN0Ci17Ci0gICAgc3dp
dGNoIChtRmVhdHVyZUxldmVsKQotICAgIHsKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxf
MTFfMDogcmV0dXJuIEQzRDExX1NIQURFUl9NQUpPUl9WRVJTSU9OOyAgIC8vIDUKLSAgICAgIGNh
c2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMTogcmV0dXJuIEQzRDEwXzFfU0hBREVSX01BSk9SX1ZF
UlNJT047IC8vIDQKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDogcmV0dXJuIEQz
RDEwX1NIQURFUl9NQUpPUl9WRVJTSU9OOyAgIC8vIDQKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1pbnQgUmVuZGVyZXIxMTo6Z2V0TWlu
b3JTaGFkZXJNb2RlbCgpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQotICAg
IHsKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDogcmV0dXJuIEQzRDExX1NIQURF
Ul9NSU5PUl9WRVJTSU9OOyAgIC8vIDAKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBf
MTogcmV0dXJuIEQzRDEwXzFfU0hBREVSX01JTk9SX1ZFUlNJT047IC8vIDEKLSAgICAgIGNhc2Ug
RDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDogcmV0dXJuIEQzRDEwX1NIQURFUl9NSU5PUl9WRVJTSU9O
OyAgIC8vIDAKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotfQotCi1mbG9hdCBSZW5kZXJlcjExOjpnZXRNYXhQb2ludFNpemUoKSBjb25zdAotewot
ICAgIC8vIGNob29zZSBhIHJlYXNvbmFibGUgbWF4aW11bS4gd2UgZW5mb3JjZSB0aGlzIGluIHRo
ZSBzaGFkZXIuCi0gICAgLy8gKG5iOiBvbiBhIFJhZGVvbiAyNjAweHQsIERYOSByZXBvcnRzIGEg
MjU2IG1heCBwb2ludCBzaXplKQotICAgIHJldHVybiAxMDI0LjBmOwotfQotCi1pbnQgUmVuZGVy
ZXIxMTo6Z2V0TWF4Vmlld3BvcnREaW1lbnNpb24oKSBjb25zdAotewotICAgIC8vIE1heGltdW0g
dmlld3BvcnQgc2l6ZSBtdXN0IGJlIGF0IGxlYXN0IGFzIGxhcmdlIGFzIHRoZSBsYXJnZXN0IHJl
bmRlciBidWZmZXIgKG9yIGxhcmdlcikuCi0gICAgLy8gSW4gb3VyIGNhc2UgcmV0dXJuIHRoZSBt
YXhpbXVtIHRleHR1cmUgc2l6ZSwgd2hpY2ggaXMgdGhlIG1heGltdW0gcmVuZGVyIGJ1ZmZlciBz
aXplLgotICAgIE1FVEFfQVNTRVJUKEQzRDExX1JFUV9URVhUVVJFMkRfVV9PUl9WX0RJTUVOU0lP
TiAqIDIgLSAxIDw9IEQzRDExX1ZJRVdQT1JUX0JPVU5EU19NQVgpOwotICAgIE1FVEFfQVNTRVJU
KEQzRDEwX1JFUV9URVhUVVJFMkRfVV9PUl9WX0RJTUVOU0lPTiAqIDIgLSAxIDw9IEQzRDEwX1ZJ
RVdQT1JUX0JPVU5EU19NQVgpOwotCi0gICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQotICAgIHsK
LSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDogCi0gICAgICAgIHJldHVybiBEM0Qx
MV9SRVFfVEVYVFVSRTJEX1VfT1JfVl9ESU1FTlNJT047ICAgLy8gMTYzODQKLSAgICAgIGNhc2Ug
RDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBf
MDogCi0gICAgICAgIHJldHVybiBEM0QxMF9SRVFfVEVYVFVSRTJEX1VfT1JfVl9ESU1FTlNJT047
ICAgLy8gODE5MgotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotfQotCi1pbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VGV4dHVyZVdpZHRo
KCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCi0gICAgewotICAgICAgY2Fz
ZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOiByZXR1cm4gRDNEMTFfUkVRX1RFWFRVUkUyRF9VX09S
X1ZfRElNRU5TSU9OOyAgIC8vIDE2Mzg0Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEw
XzE6Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6IHJldHVybiBEM0QxMF9SRVFf
VEVYVFVSRTJEX1VfT1JfVl9ESU1FTlNJT047ICAgLy8gODE5MgotICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLWludCBSZW5kZXJlcjExOjpn
ZXRNYXhUZXh0dXJlSGVpZ2h0KCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwp
Ci0gICAgewotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOiByZXR1cm4gRDNEMTFf
UkVRX1RFWFRVUkUyRF9VX09SX1ZfRElNRU5TSU9OOyAgIC8vIDE2Mzg0Ci0gICAgICBjYXNlIEQz
RF9GRUFUVVJFX0xFVkVMXzEwXzE6Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6
IHJldHVybiBEM0QxMF9SRVFfVEVYVFVSRTJEX1VfT1JfVl9ESU1FTlNJT047ICAgLy8gODE5Mgot
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0K
LWJvb2wgUmVuZGVyZXIxMTo6Z2V0MzJCaXRJbmRleFN1cHBvcnQoKSBjb25zdAotewotICAgIHN3
aXRjaCAobUZlYXR1cmVMZXZlbCkKLSAgICB7Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVM
XzExXzA6IAotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgotICAgICAgY2FzZSBE
M0RfRkVBVFVSRV9MRVZFTF8xMF8wOiByZXR1cm4gRDNEMTBfUkVRX0RSQVdJTkRFWEVEX0lOREVY
X0NPVU5UXzJfVE9fRVhQID49IDMyOyAgIC8vIHRydWUKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotaW50IFJlbmRlcmVyMTE6Omdl
dE1pblN3YXBJbnRlcnZhbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBSZW5k
ZXJlcjExOjpnZXRNYXhTd2FwSW50ZXJ2YWwoKSBjb25zdAotewotICAgIHJldHVybiA0OwotfQot
Ci1pbnQgUmVuZGVyZXIxMTo6Z2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1NYXhTdXBwb3J0ZWRTYW1wbGVzOwotfQotCi1pbnQgUmVuZGVyZXIxMTo6Z2V0TmVh
cmVzdFN1cHBvcnRlZFNhbXBsZXMoRFhHSV9GT1JNQVQgZm9ybWF0LCB1bnNpZ25lZCBpbnQgcmVx
dWVzdGVkKSBjb25zdAotewotICAgIGlmIChyZXF1ZXN0ZWQgPT0gMCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLQotICAgIE11bHRpc2FtcGxlU3VwcG9ydE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IG1NdWx0aXNhbXBsZVN1cHBvcnRNYXAuZmluZChmb3JtYXQpOwotICAgIGlm
IChpdGVyICE9IG1NdWx0aXNhbXBsZVN1cHBvcnRNYXAuZW5kKCkpCi0gICAgewotICAgICAgICBj
b25zdCBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvJiBpbmZvID0gaXRlci0+c2Vjb25kOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gcmVxdWVzdGVkIC0gMTsgaSA8IEQzRDExX01BWF9NVUxU
SVNBTVBMRV9TQU1QTEVfQ09VTlQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGlu
Zm8ucXVhbGl0eUxldmVsc1tpXSA+IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGkgKyAxOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0
dXJuIC0xOwotfQotCi11bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4UmVuZGVyVGFyZ2V0
cygpIGNvbnN0Ci17Ci0gICAgTUVUQV9BU1NFUlQoRDNEMTFfU0lNVUxUQU5FT1VTX1JFTkRFUl9U
QVJHRVRfQ09VTlQgPD0gZ2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlMpOwotICAg
IE1FVEFfQVNTRVJUKEQzRDEwX1NJTVVMVEFORU9VU19SRU5ERVJfVEFSR0VUX0NPVU5UIDw9IGds
OjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTKTsKLQotICAgIHN3aXRjaCAobUZlYXR1
cmVMZXZlbCkKLSAgICB7Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6Ci0gICAg
ICAgIHJldHVybiBEM0QxMV9TSU1VTFRBTkVPVVNfUkVOREVSX1RBUkdFVF9DT1VOVDsgIC8vIDgK
LSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKLSAgICAgIGNhc2UgRDNEX0ZFQVRV
UkVfTEVWRUxfMTBfMDoKLSAgICAgICAgcmV0dXJuIEQzRDEwX1NJTVVMVEFORU9VU19SRU5ERVJf
VEFSR0VUX0NPVU5UOyAgLy8gOAotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUo
KTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotfQotCi1ib29sIFJlbmRlcmVyMTE6OmNvcHlU
b1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpkZXN0LCBUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTJEICpzb3VyY2UpCi17Ci0gICAgaWYgKHNvdXJjZSAmJiBkZXN0KQotICAg
IHsKLSAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMV8yRCAqc291cmNlMTEgPSBUZXh0dXJlU3RvcmFn
ZTExXzJEOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yRChzb3VyY2UtPmdldFN0b3JhZ2VJbnN0YW5j
ZSgpKTsKLSAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMV8yRCAqZGVzdDExID0gVGV4dHVyZVN0b3Jh
Z2UxMV8yRDo6bWFrZVRleHR1cmVTdG9yYWdlMTFfMkQoZGVzdC0+Z2V0U3RvcmFnZUluc3RhbmNl
KCkpOwotCi0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5Db3B5UmVzb3VyY2UoZGVzdDExLT5nZXRC
YXNlVGV4dHVyZSgpLCBzb3VyY2UxMS0+Z2V0QmFzZVRleHR1cmUoKSk7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJlcjEx
Ojpjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpkZXN0LCBU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnNvdXJjZSkKLXsKLSAgICBpZiAoc291cmNlICYm
IGRlc3QpCi0gICAgewotICAgICAgICBUZXh0dXJlU3RvcmFnZTExX0N1YmUgKnNvdXJjZTExID0g
VGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKHNvdXJjZS0+
Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwotICAgICAgICBUZXh0dXJlU3RvcmFnZTExX0N1YmUgKmRl
c3QxMSA9IFRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlMTFfQ3ViZShk
ZXN0LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0KLSAgICAgICAgbURldmljZUNvbnRleHQtPkNv
cHlSZXNvdXJjZShkZXN0MTEtPmdldEJhc2VUZXh0dXJlKCksIHNvdXJjZTExLT5nZXRCYXNlVGV4
dHVyZSgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIFJlbmRlcmVyMTE6OmNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1l
YnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1h
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIEdMaW50IGxldmVsKQotewot
ICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gZnJhbWVidWZmZXItPmdldFJlYWRD
b2xvcmJ1ZmZlcigpOwotICAgIGlmICghY29sb3JidWZmZXIpCi0gICAgewotICAgICAgICBFUlIo
IkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgY29sb3IgYnVmZmVyIGZyb20gdGhlIGZyYW1lIGJ1ZmZl
ci4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7
Ci0gICAgfQotCi0gICAgUmVuZGVyVGFyZ2V0MTEgKnNvdXJjZVJlbmRlclRhcmdldCA9IFJlbmRl
clRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoY29sb3JidWZmZXItPmdldFJlbmRlclRhcmdl
dCgpKTsKLSAgICBpZiAoIXNvdXJjZVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIEVSUigi
RmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGZyYW1lIGJ1ZmZl
ci4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7
Ci0gICAgfQotCi0gICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzb3VyY2UgPSBzb3VyY2VS
ZW5kZXJUYXJnZXQtPmdldFNoYWRlclJlc291cmNlVmlldygpOwotICAgIGlmICghc291cmNlKQot
ICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQg
dmlldyBmcm9tIHRoZSByZW5kZXIgdGFyZ2V0LiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBUZXh0dXJlU3RvcmFnZTEx
XzJEICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFnZTExXzJEOjptYWtlVGV4dHVyZVN0b3JhZ2Ux
MV8yRChzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgaWYgKCFzdG9yYWdlMTEp
Ci0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgdGV4dHVyZSBzdG9y
YWdlIGZyb20gdGhlIGRlc3RpbmF0aW9uLiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBSZW5kZXJUYXJnZXQxMSAqZGVz
dFJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoc3RvcmFn
ZTExLT5nZXRSZW5kZXJUYXJnZXQobGV2ZWwpKTsKLSAgICBpZiAoIWRlc3RSZW5kZXJUYXJnZXQp
Ci0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdl
dCBmcm9tIHRoZSBkZXN0aW5hdGlvbiBzdG9yYWdlLiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBJRDNEMTFSZW5kZXJU
YXJnZXRWaWV3ICpkZXN0ID0gZGVzdFJlbmRlclRhcmdldC0+Z2V0UmVuZGVyVGFyZ2V0Vmlldygp
OwotICAgIGlmICghZGVzdCkKLSAgICB7Ci0gICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZl
IHRoZSByZW5kZXIgdGFyZ2V0IHZpZXcgZnJvbSB0aGUgZGVzdGluYXRpb24gcmVuZGVyIHRhcmdl
dC4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7
Ci0gICAgfQotCi0gICAgZ2w6OlJlY3RhbmdsZSBkZXN0UmVjdDsKLSAgICBkZXN0UmVjdC54ID0g
eG9mZnNldDsKLSAgICBkZXN0UmVjdC55ID0geW9mZnNldDsKLSAgICBkZXN0UmVjdC53aWR0aCA9
IHNvdXJjZVJlY3Qud2lkdGg7Ci0gICAgZGVzdFJlY3QuaGVpZ2h0ID0gc291cmNlUmVjdC5oZWln
aHQ7Ci0KLSAgICBib29sIHJldCA9IGNvcHlUZXh0dXJlKHNvdXJjZSwgc291cmNlUmVjdCwgc291
cmNlUmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBzb3VyY2VSZW5kZXJUYXJnZXQtPmdldEhlaWdo
dCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCwgZGVzdFJlY3QsIGRlc3RSZW5k
ZXJUYXJnZXQtPmdldFdpZHRoKCksIGRlc3RSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCBkZXN0
Rm9ybWF0KTsKLQotICAgIHJldHVybiByZXQ7Ci19Ci0KLWJvb2wgUmVuZGVyZXIxMTo6Y29weUlt
YWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNv
dXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJl
ICpzdG9yYWdlLCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkKLXsKLSAgICBnbDo6UmVuZGVy
YnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRSZWFkQ29sb3JidWZmZXIoKTsK
LSAgICBpZiAoIWNvbG9yYnVmZmVyKQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0
cmlldmUgdGhlIGNvbG9yIGJ1ZmZlciBmcm9tIHRoZSBmcmFtZSBidWZmZXIuIik7Ci0gICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAgIH0KLQotICAg
IFJlbmRlclRhcmdldDExICpzb3VyY2VSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFr
ZVJlbmRlclRhcmdldDExKGNvbG9yYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSk7Ci0gICAgaWYg
KCFzb3VyY2VSZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRy
aWV2ZSB0aGUgcmVuZGVyIHRhcmdldCBmcm9tIHRoZSBmcmFtZSBidWZmZXIuIik7Ci0gICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAgIH0KLQotICAg
IElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc291cmNlID0gc291cmNlUmVuZGVyVGFyZ2V0LT5n
ZXRTaGFkZXJSZXNvdXJjZVZpZXcoKTsKLSAgICBpZiAoIXNvdXJjZSkKLSAgICB7Ci0gICAgICAg
IEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0IHZpZXcgZnJvbSB0aGUg
cmVuZGVyIHRhcmdldC4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlICpzdG9yYWdl
MTEgPSBUZXh0dXJlU3RvcmFnZTExX0N1YmU6Om1ha2VUZXh0dXJlU3RvcmFnZTExX0N1YmUoc3Rv
cmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwotICAgIGlmICghc3RvcmFnZTExKQotICAgIHsK
LSAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHRleHR1cmUgc3RvcmFnZSBmcm9t
IHRoZSBkZXN0aW5hdGlvbi4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3RSZW5kZXJU
YXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKHN0b3JhZ2UxMS0+Z2V0
UmVuZGVyVGFyZ2V0KHRhcmdldCwgbGV2ZWwpKTsKLSAgICBpZiAoIWRlc3RSZW5kZXJUYXJnZXQp
Ci0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdl
dCBmcm9tIHRoZSBkZXN0aW5hdGlvbiBzdG9yYWdlLiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBJRDNEMTFSZW5kZXJU
YXJnZXRWaWV3ICpkZXN0ID0gZGVzdFJlbmRlclRhcmdldC0+Z2V0UmVuZGVyVGFyZ2V0Vmlldygp
OwotICAgIGlmICghZGVzdCkKLSAgICB7Ci0gICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZl
IHRoZSByZW5kZXIgdGFyZ2V0IHZpZXcgZnJvbSB0aGUgZGVzdGluYXRpb24gcmVuZGVyIHRhcmdl
dC4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7
Ci0gICAgfQotCi0gICAgZ2w6OlJlY3RhbmdsZSBkZXN0UmVjdDsKLSAgICBkZXN0UmVjdC54ID0g
eG9mZnNldDsKLSAgICBkZXN0UmVjdC55ID0geW9mZnNldDsKLSAgICBkZXN0UmVjdC53aWR0aCA9
IHNvdXJjZVJlY3Qud2lkdGg7Ci0gICAgZGVzdFJlY3QuaGVpZ2h0ID0gc291cmNlUmVjdC5oZWln
aHQ7Ci0KLSAgICBib29sIHJldCA9IGNvcHlUZXh0dXJlKHNvdXJjZSwgc291cmNlUmVjdCwgc291
cmNlUmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBzb3VyY2VSZW5kZXJUYXJnZXQtPmdldEhlaWdo
dCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCwgZGVzdFJlY3QsIGRlc3RSZW5k
ZXJUYXJnZXQtPmdldFdpZHRoKCksIGRlc3RSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCBkZXN0
Rm9ybWF0KTsKLQotICAgIHJldHVybiByZXQ7Ci19Ci0KLWJvb2wgUmVuZGVyZXIxMTo6Y29weVRl
eHR1cmUoSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzb3VyY2UsIGNvbnN0IGdsOjpSZWN0YW5n
bGUgJnNvdXJjZUFyZWEsIHVuc2lnbmVkIGludCBzb3VyY2VXaWR0aCwgdW5zaWduZWQgaW50IHNv
dXJjZUhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUQzRDExUmVuZGVyVGFy
Z2V0VmlldyAqZGVzdCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZGVzdEFyZWEsIHVuc2lnbmVkIGlu
dCBkZXN0V2lkdGgsIHVuc2lnbmVkIGludCBkZXN0SGVpZ2h0LCBHTGVudW0gZGVzdEZvcm1hdCkK
LXsKLSAgICBIUkVTVUxUIHJlc3VsdDsKLQotICAgIGlmICghbUNvcHlSZXNvdXJjZXNJbml0aWFs
aXplZCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghbUNvcHlWQiAmJiAhbUNvcHlTYW1wbGVyICYm
ICFtQ29weUlMICYmICFtQ29weVZTICYmICFtQ29weVJHQkFQUyAmJiAhbUNvcHlSR0JQUyAmJiAh
bUNvcHlMdW1QUyAmJiAhbUNvcHlMdW1BbHBoYVBTKTsKLQotICAgICAgICBEM0QxMV9CVUZGRVJf
REVTQyB2YkRlc2M7Ci0gICAgICAgIHZiRGVzYy5CeXRlV2lkdGggPSBzaXplb2YoZDNkMTE6OlBv
c2l0aW9uVGV4Q29vcmRWZXJ0ZXgpICogNDsKLSAgICAgICAgdmJEZXNjLlVzYWdlID0gRDNEMTFf
VVNBR0VfRFlOQU1JQzsKLSAgICAgICAgdmJEZXNjLkJpbmRGbGFncyA9IEQzRDExX0JJTkRfVkVS
VEVYX0JVRkZFUjsKLSAgICAgICAgdmJEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FD
Q0VTU19XUklURTsKLSAgICAgICAgdmJEZXNjLk1pc2NGbGFncyA9IDA7Ci0gICAgICAgIHZiRGVz
Yy5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5D
cmVhdGVCdWZmZXIoJnZiRGVzYywgTlVMTCwgJm1Db3B5VkIpOwotICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5VkIsICJS
ZW5kZXJlcjExIGNvcHkgdGV4dHVyZSB2ZXJ0ZXggYnVmZmVyIik7Ci0KLSAgICAgICAgRDNEMTFf
U0FNUExFUl9ERVNDIHNhbXBsZXJEZXNjOwotICAgICAgICBzYW1wbGVyRGVzYy5GaWx0ZXIgPSBE
M0QxMV9GSUxURVJfTUlOX01BR19NSVBfTElORUFSOwotICAgICAgICBzYW1wbGVyRGVzYy5BZGRy
ZXNzVSA9IEQzRDExX1RFWFRVUkVfQUREUkVTU19DTEFNUDsKLSAgICAgICAgc2FtcGxlckRlc2Mu
QWRkcmVzc1YgPSBEM0QxMV9URVhUVVJFX0FERFJFU1NfQ0xBTVA7Ci0gICAgICAgIHNhbXBsZXJE
ZXNjLkFkZHJlc3NXID0gRDNEMTFfVEVYVFVSRV9BRERSRVNTX0NMQU1QOwotICAgICAgICBzYW1w
bGVyRGVzYy5NaXBMT0RCaWFzID0gMC4wZjsKLSAgICAgICAgc2FtcGxlckRlc2MuTWF4QW5pc290
cm9weSA9IDA7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkNvbXBhcmlzb25GdW5jID0gRDNEMTFfQ09N
UEFSSVNPTl9ORVZFUjsKLSAgICAgICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbMF0gPSAwLjBm
OwotICAgICAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclsxXSA9IDAuMGY7Ci0gICAgICAgIHNh
bXBsZXJEZXNjLkJvcmRlckNvbG9yWzJdID0gMC4wZjsKLSAgICAgICAgc2FtcGxlckRlc2MuQm9y
ZGVyQ29sb3JbM10gPSAwLjBmOwotICAgICAgICBzYW1wbGVyRGVzYy5NaW5MT0QgPSAwLjBmOwot
ICAgICAgICBzYW1wbGVyRGVzYy5NYXhMT0QgPSAwLjBmOwotCi0gICAgICAgIHJlc3VsdCA9IG1E
ZXZpY2UtPkNyZWF0ZVNhbXBsZXJTdGF0ZSgmc2FtcGxlckRlc2MsICZtQ29weVNhbXBsZXIpOwot
ICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVi
dWdOYW1lKG1Db3B5U2FtcGxlciwgIlJlbmRlcmVyMTEgY29weSBzYW1wbGVyIik7Ci0KLSAgICAg
ICAgRDNEMTFfSU5QVVRfRUxFTUVOVF9ERVNDIHF1YWRMYXlvdXRbXSA9Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIHsgIlBPU0lUSU9OIiwgMCwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCAwLCAw
LCBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAgfSwKLSAgICAgICAgICAgIHsgIlRFWENP
T1JEIiwgMCwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCAwLCA4LCBEM0QxMV9JTlBVVF9QRVJf
VkVSVEVYX0RBVEEsIDAgfSwKLSAgICAgICAgfTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNl
LT5DcmVhdGVJbnB1dExheW91dChxdWFkTGF5b3V0LCAyLCBnX1ZTX1Bhc3N0aHJvdWdoLCBzaXpl
b2YoZ19WU19QYXNzdGhyb3VnaCksICZtQ29weUlMKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURF
RChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ29weUlMLCAiUmVuZGVy
ZXIxMSBjb3B5IHRleHR1cmUgaW5wdXQgbGF5b3V0Iik7Ci0KLSAgICAgICAgcmVzdWx0ID0gbURl
dmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKGdfVlNfUGFzc3Rocm91Z2gsIHNpemVvZihnX1ZTX1Bh
c3N0aHJvdWdoKSwgTlVMTCwgJm1Db3B5VlMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5VlMsICJSZW5kZXJlcjEx
IGNvcHkgdGV4dHVyZSB2ZXJ0ZXggc2hhZGVyIik7Ci0KLSAgICAgICAgcmVzdWx0ID0gbURldmlj
ZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19QYXNzdGhyb3VnaFJHQkEsIHNpemVvZihnX1BTX1Bh
c3N0aHJvdWdoUkdCQSksIE5VTEwsICZtQ29weVJHQkFQUyk7Ci0gICAgICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNvcHlSR0JBUFMs
ICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSBSR0JBIHBpeGVsIHNoYWRlciIpOwotCi0gICAgICAg
IHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdfUFNfUGFzc3Rocm91Z2hSR0Is
IHNpemVvZihnX1BTX1Bhc3N0aHJvdWdoUkdCKSwgTlVMTCwgJm1Db3B5UkdCUFMpOwotICAgICAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1l
KG1Db3B5UkdCUFMsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSBSR0IgcGl4ZWwgc2hhZGVyIik7
Ci0KLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19QYXNz
dGhyb3VnaEx1bSwgc2l6ZW9mKGdfUFNfUGFzc3Rocm91Z2hMdW0pLCBOVUxMLCAmbUNvcHlMdW1Q
Uyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpT
ZXREZWJ1Z05hbWUobUNvcHlMdW1QUywgIlJlbmRlcmVyMTEgY29weSB0ZXh0dXJlIGx1bWluYW5j
ZSBwaXhlbCBzaGFkZXIiKTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhl
bFNoYWRlcihnX1BTX1Bhc3N0aHJvdWdoTHVtQWxwaGEsIHNpemVvZihnX1BTX1Bhc3N0aHJvdWdo
THVtQWxwaGEpLCBOVUxMLCAmbUNvcHlMdW1BbHBoYVBTKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ29weUx1bUFscGhh
UFMsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSBsdW1pbmFuY2UgYWxwaGEgcGl4ZWwgc2hhZGVy
Iik7Ci0KLSAgICAgICAgbUNvcHlSZXNvdXJjZXNJbml0aWFsaXplZCA9IHRydWU7Ci0gICAgfQot
Ci0gICAgLy8gVmVyaWZ5IHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZWEgc2l6ZXMKLSAg
ICBpZiAoc291cmNlQXJlYS54IDwgMCB8fCBzb3VyY2VBcmVhLnggKyBzb3VyY2VBcmVhLndpZHRo
ID4gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VXaWR0aCkgfHwKLSAgICAgICAgc291cmNlQXJlYS55
IDwgMCB8fCBzb3VyY2VBcmVhLnkgKyBzb3VyY2VBcmVhLmhlaWdodCA+IHN0YXRpY19jYXN0PGlu
dD4oc291cmNlSGVpZ2h0KSB8fAotICAgICAgICBkZXN0QXJlYS54IDwgMCB8fCBkZXN0QXJlYS54
ICsgZGVzdEFyZWEud2lkdGggPiBzdGF0aWNfY2FzdDxpbnQ+KGRlc3RXaWR0aCkgfHwKLSAgICAg
ICAgZGVzdEFyZWEueSA8IDAgfHwgZGVzdEFyZWEueSArIGRlc3RBcmVhLmhlaWdodCA+IHN0YXRp
Y19jYXN0PGludD4oZGVzdEhlaWdodCkpCi0gICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfVkFMVUUsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICAvLyBTZXQgdmVydGljZXMK
LSAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7Ci0gICAgcmVzdWx0
ID0gbURldmljZUNvbnRleHQtPk1hcChtQ29weVZCLCAwLCBEM0QxMV9NQVBfV1JJVEVfRElTQ0FS
RCwgMCwgJm1hcHBlZFJlc291cmNlKTsKLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewot
ICAgICAgICBFUlIoIkZhaWxlZCB0byBtYXAgdmVydGV4IGJ1ZmZlciBmb3IgdGV4dHVyZSBjb3B5
LCBIUkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAgIH0KLQotICAgIGQzZDExOjpQb3NpdGlvblRleENv
b3JkVmVydGV4ICp2ZXJ0aWNlcyA9IHN0YXRpY19jYXN0PGQzZDExOjpQb3NpdGlvblRleENvb3Jk
VmVydGV4Kj4obWFwcGVkUmVzb3VyY2UucERhdGEpOwotCi0gICAgLy8gQ3JlYXRlIGEgcXVhZCBp
biBob21vZ2VuZW91cyBjb29yZGluYXRlcwotICAgIGZsb2F0IHgxID0gKGRlc3RBcmVhLnggLyBm
bG9hdChkZXN0V2lkdGgpKSAqIDIuMGYgLSAxLjBmOwotICAgIGZsb2F0IHkxID0gKChkZXN0SGVp
Z2h0IC0gZGVzdEFyZWEueSAtIGRlc3RBcmVhLmhlaWdodCkgLyBmbG9hdChkZXN0SGVpZ2h0KSkg
KiAyLjBmIC0gMS4wZjsKLSAgICBmbG9hdCB4MiA9ICgoZGVzdEFyZWEueCArIGRlc3RBcmVhLndp
ZHRoKSAvIGZsb2F0KGRlc3RXaWR0aCkpICogMi4wZiAtIDEuMGY7Ci0gICAgZmxvYXQgeTIgPSAo
KGRlc3RIZWlnaHQgLSBkZXN0QXJlYS55KSAvIGZsb2F0KGRlc3RIZWlnaHQpKSAqIDIuMGYgLSAx
LjBmOwotCi0gICAgZmxvYXQgdTEgPSBzb3VyY2VBcmVhLnggLyBmbG9hdChzb3VyY2VXaWR0aCk7
Ci0gICAgZmxvYXQgdjEgPSBzb3VyY2VBcmVhLnkgLyBmbG9hdChzb3VyY2VIZWlnaHQpOwotICAg
IGZsb2F0IHUyID0gKHNvdXJjZUFyZWEueCArIHNvdXJjZUFyZWEud2lkdGgpIC8gZmxvYXQoc291
cmNlV2lkdGgpOwotICAgIGZsb2F0IHYyID0gKHNvdXJjZUFyZWEueSArIHNvdXJjZUFyZWEuaGVp
Z2h0KSAvIGZsb2F0KHNvdXJjZUhlaWdodCk7Ci0KLSAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhD
b29yZFZlcnRleCgmdmVydGljZXNbMF0sIHgxLCB5MSwgdTEsIHYyKTsKLSAgICBkM2QxMTo6U2V0
UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNbMV0sIHgxLCB5MiwgdTEsIHYxKTsKLSAg
ICBkM2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNbMl0sIHgyLCB5MSwg
dTIsIHYyKTsKLSAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNb
M10sIHgyLCB5MiwgdTIsIHYxKTsKLQotICAgIG1EZXZpY2VDb250ZXh0LT5Vbm1hcChtQ29weVZC
LCAwKTsKLQotICAgIHN0YXRpYyBVSU5UIHN0cmlkZSA9IHNpemVvZihkM2QxMTo6UG9zaXRpb25U
ZXhDb29yZFZlcnRleCk7Ci0gICAgc3RhdGljIFVJTlQgc3RhcnRJZHggPSAwOwotICAgIG1EZXZp
Y2VDb250ZXh0LT5JQVNldFZlcnRleEJ1ZmZlcnMoMCwgMSwgJm1Db3B5VkIsICZzdHJpZGUsICZz
dGFydElkeCk7Ci0KLSAgICAvLyBBcHBseSBzdGF0ZQotICAgIG1EZXZpY2VDb250ZXh0LT5PTVNl
dEJsZW5kU3RhdGUoTlVMTCwgTlVMTCwgMHhGRkZGRkZGKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+
T01TZXREZXB0aFN0ZW5jaWxTdGF0ZShOVUxMLCAweEZGRkZGRkZGKTsKLSAgICBtRGV2aWNlQ29u
dGV4dC0+UlNTZXRTdGF0ZShOVUxMKTsKLQotICAgIC8vIEFwcGx5IHNoYWRlcnMKLSAgICBtRGV2
aWNlQ29udGV4dC0+SUFTZXRJbnB1dExheW91dChtQ29weUlMKTsKLSAgICBtRGV2aWNlQ29udGV4
dC0+SUFTZXRQcmltaXRpdmVUb3BvbG9neShEM0RfUFJJTUlUSVZFX1RPUE9MT0dZX1RSSUFOR0xF
U1RSSVApOwotICAgIG1EZXZpY2VDb250ZXh0LT5WU1NldFNoYWRlcihtQ29weVZTLCBOVUxMLCAw
KTsKLQotICAgIElEM0QxMVBpeGVsU2hhZGVyICpwcyA9IE5VTEw7Ci0gICAgc3dpdGNoKGRlc3RG
b3JtYXQpCi0gICAgewotICAgICAgY2FzZSBHTF9SR0JBOiAgICAgICAgICAgIHBzID0gbUNvcHlS
R0JBUFM7ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCOiAgICAgICAgICAgICBwcyA9IG1D
b3B5UkdCUFM7ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FMUEhBOiAgICAgICAgICAgcHMg
PSBtQ29weVJHQkFQUzsgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CR1JBX0VYVDogICAgICAg
IHBzID0gbUNvcHlSR0JBUFM7ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOiAg
ICAgICBwcyA9IG1Db3B5THVtUFM7ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5D
RV9BTFBIQTogcHMgPSBtQ29weUx1bUFscGhhUFM7IGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsgIHBzID0gTlVMTDsgICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBt
RGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIocHMsIE5VTEwsIDApOwotICAgIG1EZXZpY2VDb250
ZXh0LT5HU1NldFNoYWRlcihOVUxMLCBOVUxMLCAwKTsKLQotICAgIC8vIFVuc2V0IHRoZSBjdXJy
ZW50bHkgYm91bmQgc2hhZGVyIHJlc291cmNlIHRvIGF2b2lkIGNvbmZsaWN0cwotICAgIHN0YXRp
YyBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmNvbnN0IG51bGxTUlYgPSBOVUxMOwotICAgIG1E
ZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlclJlc291cmNlcygwLCAxLCAmbnVsbFNSVik7Ci0KLSAg
ICAvLyBBcHBseSByZW5kZXIgdGFyZ2V0Ci0gICAgc2V0T25lVGltZVJlbmRlclRhcmdldChkZXN0
KTsKLQotICAgIC8vIFNldCB0aGUgdmlld3BvcnQKLSAgICBEM0QxMV9WSUVXUE9SVCB2aWV3cG9y
dDsKLSAgICB2aWV3cG9ydC5Ub3BMZWZ0WCA9IDA7Ci0gICAgdmlld3BvcnQuVG9wTGVmdFkgPSAw
OwotICAgIHZpZXdwb3J0LldpZHRoID0gZGVzdFdpZHRoOwotICAgIHZpZXdwb3J0LkhlaWdodCA9
IGRlc3RIZWlnaHQ7Ci0gICAgdmlld3BvcnQuTWluRGVwdGggPSAwLjBmOwotICAgIHZpZXdwb3J0
Lk1heERlcHRoID0gMS4wZjsKLSAgICBtRGV2aWNlQ29udGV4dC0+UlNTZXRWaWV3cG9ydHMoMSwg
JnZpZXdwb3J0KTsKLQotICAgIC8vIEFwcGx5IHRleHR1cmVzCi0gICAgbURldmljZUNvbnRleHQt
PlBTU2V0U2hhZGVyUmVzb3VyY2VzKDAsIDEsICZzb3VyY2UpOwotICAgIG1EZXZpY2VDb250ZXh0
LT5QU1NldFNhbXBsZXJzKDAsIDEsICZtQ29weVNhbXBsZXIpOwotCi0gICAgLy8gRHJhdyB0aGUg
cXVhZAotICAgIG1EZXZpY2VDb250ZXh0LT5EcmF3KDQsIDApOwotCi0gICAgLy8gVW5iaW5kIHRl
eHR1cmVzIGFuZCByZW5kZXIgdGFyZ2V0cyBhbmQgdmVydGV4IGJ1ZmZlcgotICAgIG1EZXZpY2VD
b250ZXh0LT5QU1NldFNoYWRlclJlc291cmNlcygwLCAxLCAmbnVsbFNSVik7Ci0KLSAgICB1bmFw
cGx5UmVuZGVyVGFyZ2V0cygpOwotCi0gICAgVUlOVCB6ZXJvID0gMDsKLSAgICBJRDNEMTFCdWZm
ZXIgKmNvbnN0IG51bGxCdWZmZXIgPSBOVUxMOwotICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldFZl
cnRleEJ1ZmZlcnMoMCwgMSwgJm51bGxCdWZmZXIsICZ6ZXJvLCAmemVybyk7Ci0KLSAgICBtYXJr
QWxsU3RhdGVEaXJ0eSgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVyZXIx
MTo6dW5hcHBseVJlbmRlclRhcmdldHMoKQotewotICAgIHNldE9uZVRpbWVSZW5kZXJUYXJnZXQo
TlVMTCk7Ci19Ci0KLXZvaWQgUmVuZGVyZXIxMTo6c2V0T25lVGltZVJlbmRlclRhcmdldChJRDNE
MTFSZW5kZXJUYXJnZXRWaWV3ICpyZW5kZXJUYXJnZXRWaWV3KQotewotICAgIElEM0QxMVJlbmRl
clRhcmdldFZpZXcgKnJ0dkFycmF5W2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJT
XSA9IHtOVUxMfTsKLQotICAgIHJ0dkFycmF5WzBdID0gcmVuZGVyVGFyZ2V0VmlldzsKLQotICAg
IG1EZXZpY2VDb250ZXh0LT5PTVNldFJlbmRlclRhcmdldHMoZ2V0TWF4UmVuZGVyVGFyZ2V0cygp
LCBydHZBcnJheSwgTlVMTCk7Ci0KLSAgICAvLyBEbyBub3QgcHJlc2VydmUgdGhlIHNlcmlhbCBm
b3IgdGhpcyBvbmUtdGltZS11c2UgcmVuZGVyIHRhcmdldAotICAgIGZvciAodW5zaWduZWQgaW50
IHJ0SW5kZXggPSAwOyBydEluZGV4IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZF
UlM7IHJ0SW5kZXgrKykKLSAgICB7Ci0gICAgICAgIG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFs
c1tydEluZGV4XSA9IDA7Ci0gICAgfQotfQotCi1SZW5kZXJUYXJnZXQgKlJlbmRlcmVyMTE6OmNy
ZWF0ZVJlbmRlclRhcmdldChTd2FwQ2hhaW4gKnN3YXBDaGFpbiwgYm9vbCBkZXB0aCkKLXsKLSAg
ICBTd2FwQ2hhaW4xMSAqc3dhcENoYWluMTEgPSBTd2FwQ2hhaW4xMTo6bWFrZVN3YXBDaGFpbjEx
KHN3YXBDaGFpbik7Ci0gICAgUmVuZGVyVGFyZ2V0MTEgKnJlbmRlclRhcmdldCA9IE5VTEw7Ci0K
LSAgICBpZiAoZGVwdGgpCi0gICAgewotICAgICAgICAvLyBOb3RlOiBkZXB0aCBzdGVuY2lsIG1h
eSBiZSBOVUxMIGZvciAwIHNpemVkIHN1cmZhY2VzCi0gICAgICAgIHJlbmRlclRhcmdldCA9IG5l
dyBSZW5kZXJUYXJnZXQxMSh0aGlzLCBzd2FwQ2hhaW4xMS0+Z2V0RGVwdGhTdGVuY2lsKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwQ2hhaW4xMS0+Z2V0
RGVwdGhTdGVuY2lsVGV4dHVyZSgpLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldFdpZHRoKCksIHN3YXBDaGFpbjExLT5nZXRI
ZWlnaHQoKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIC8vIE5vdGU6IHJlbmRl
ciB0YXJnZXQgbWF5IGJlIE5VTEwgZm9yIDAgc2l6ZWQgc3VyZmFjZXMKLSAgICAgICAgcmVuZGVy
VGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldDExKHRoaXMsIHN3YXBDaGFpbjExLT5nZXRSZW5kZXJU
YXJnZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBD
aGFpbjExLT5nZXRPZmZzY3JlZW5UZXh0dXJlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzd2FwQ2hhaW4xMS0+Z2V0UmVuZGVyVGFyZ2V0U2hhZGVyUmVzb3Vy
Y2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBDaGFp
bjExLT5nZXRXaWR0aCgpLCBzd2FwQ2hhaW4xMS0+Z2V0SGVpZ2h0KCkpOwotICAgIH0KLSAgICBy
ZXR1cm4gcmVuZGVyVGFyZ2V0OwotfQotCi1SZW5kZXJUYXJnZXQgKlJlbmRlcmVyMTE6OmNyZWF0
ZVJlbmRlclRhcmdldChpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6
ZWkgc2FtcGxlcywgYm9vbCBkZXB0aCkKLXsKLSAgICBSZW5kZXJUYXJnZXQxMSAqcmVuZGVyVGFy
Z2V0ID0gbmV3IFJlbmRlclRhcmdldDExKHRoaXMsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgc2Ft
cGxlcywgZGVwdGgpOwotICAgIHJldHVybiByZW5kZXJUYXJnZXQ7Ci19Ci0KLVNoYWRlckV4ZWN1
dGFibGUgKlJlbmRlcmVyMTE6OmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBz
aXplX3QgbGVuZ3RoLCByeDo6U2hhZGVyVHlwZSB0eXBlKQotewotICAgIFNoYWRlckV4ZWN1dGFi
bGUxMSAqZXhlY3V0YWJsZSA9IE5VTEw7Ci0KLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAg
ICAgY2FzZSByeDo6U0hBREVSX1ZFUlRFWDoKLSAgICAgICAgewotICAgICAgICAgICAgSUQzRDEx
VmVydGV4U2hhZGVyICp2c2hhZGVyID0gTlVMTDsKLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gbURldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKGZ1bmN0aW9uLCBsZW5ndGgsIE5VTEwsICZ2
c2hhZGVyKTsKLSAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAg
ICAgICAgIGlmICh2c2hhZGVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGV4ZWN1
dGFibGUgPSBuZXcgU2hhZGVyRXhlY3V0YWJsZTExKGZ1bmN0aW9uLCBsZW5ndGgsIHZzaGFkZXIp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBy
eDo6U0hBREVSX1BJWEVMOgotICAgICAgICB7Ci0gICAgICAgICAgICBJRDNEMTFQaXhlbFNoYWRl
ciAqcHNoYWRlciA9IE5VTEw7Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2Ut
PkNyZWF0ZVBpeGVsU2hhZGVyKGZ1bmN0aW9uLCBsZW5ndGgsIE5VTEwsICZwc2hhZGVyKTsKLSAg
ICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAgICAgIGlmIChw
c2hhZGVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBuZXcg
U2hhZGVyRXhlY3V0YWJsZTExKGZ1bmN0aW9uLCBsZW5ndGgsIHBzaGFkZXIpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSByeDo6U0hBREVSX0dF
T01FVFJZOgotICAgICAgICB7Ci0gICAgICAgICAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZ3No
YWRlciA9IE5VTEw7Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0
ZUdlb21ldHJ5U2hhZGVyKGZ1bmN0aW9uLCBsZW5ndGgsIE5VTEwsICZnc2hhZGVyKTsKLSAgICAg
ICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAgICAgIGlmIChnc2hh
ZGVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBuZXcgU2hh
ZGVyRXhlY3V0YWJsZTExKGZ1bmN0aW9uLCBsZW5ndGgsIGdzaGFkZXIpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5S
RUFDSEFCTEUoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIGV4ZWN1dGFi
bGU7Ci19Ci0KLVNoYWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyMTE6OmNvbXBpbGVUb0V4ZWN1dGFi
bGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRlckhMU0wsIHJ4OjpTaGFk
ZXJUeXBlIHR5cGUsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91bmQpCi17Ci0gICAgY29uc3Qg
Y2hhciAqcHJvZmlsZSA9IE5VTEw7Ci0KLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAg
Y2FzZSByeDo6U0hBREVSX1ZFUlRFWDoKLSAgICAgICAgcHJvZmlsZSA9ICJ2c180XzAiOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2Ugcng6OlNIQURFUl9QSVhFTDoKLSAgICAgICAgcHJvZmls
ZSA9ICJwc180XzAiOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ugcng6OlNIQURFUl9HRU9N
RVRSWToKLSAgICAgICAgcHJvZmlsZSA9ICJnc180XzAiOwotICAgICAgICBicmVhazsKLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwot
ICAgIH0KLQotICAgIElEM0RCbG9iICpiaW5hcnkgPSAoSUQzREJsb2IqKWNvbXBpbGVUb0JpbmFy
eShpbmZvTG9nLCBzaGFkZXJITFNMLCBwcm9maWxlLCBEM0RDT01QSUxFX09QVElNSVpBVElPTl9M
RVZFTDAsIGZhbHNlKTsKLSAgICBpZiAoIWJpbmFyeSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0K
LSAgICBTaGFkZXJFeGVjdXRhYmxlICpleGVjdXRhYmxlID0gbG9hZEV4ZWN1dGFibGUoKERXT1JE
ICopYmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksIGJpbmFyeS0+R2V0QnVmZmVyU2l6ZSgpLCB0
eXBlKTsKLSAgICBiaW5hcnktPlJlbGVhc2UoKTsKLQotICAgIHJldHVybiBleGVjdXRhYmxlOwot
fQotCi1WZXJ0ZXhCdWZmZXIgKlJlbmRlcmVyMTE6OmNyZWF0ZVZlcnRleEJ1ZmZlcigpCi17Ci0g
ICAgcmV0dXJuIG5ldyBWZXJ0ZXhCdWZmZXIxMSh0aGlzKTsKLX0KLQotSW5kZXhCdWZmZXIgKlJl
bmRlcmVyMTE6OmNyZWF0ZUluZGV4QnVmZmVyKCkKLXsKLSAgICByZXR1cm4gbmV3IEluZGV4QnVm
ZmVyMTEodGhpcyk7Ci19Ci0KLUJ1ZmZlclN0b3JhZ2UgKlJlbmRlcmVyMTE6OmNyZWF0ZUJ1ZmZl
clN0b3JhZ2UoKQotewotICAgIHJldHVybiBuZXcgQnVmZmVyU3RvcmFnZTExKHRoaXMpOwotfQot
Ci1RdWVyeUltcGwgKlJlbmRlcmVyMTE6OmNyZWF0ZVF1ZXJ5KEdMZW51bSB0eXBlKQotewotICAg
IHJldHVybiBuZXcgUXVlcnkxMSh0aGlzLCB0eXBlKTsKLX0KLQotRmVuY2VJbXBsICpSZW5kZXJl
cjExOjpjcmVhdGVGZW5jZSgpCi17Ci0gICAgcmV0dXJuIG5ldyBGZW5jZTExKHRoaXMpOwotfQot
Ci1ib29sIFJlbmRlcmVyMTE6OmdldFJlbmRlclRhcmdldFJlc291cmNlKGdsOjpSZW5kZXJidWZm
ZXIgKmNvbG9yYnVmZmVyLCB1bnNpZ25lZCBpbnQgKnN1YnJlc291cmNlSW5kZXgsIElEM0QxMVRl
eHR1cmUyRCAqKnJlc291cmNlKQotewotICAgIEFTU0VSVChjb2xvcmJ1ZmZlciAhPSBOVUxMKTsK
LQotICAgIFJlbmRlclRhcmdldDExICpyZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFr
ZVJlbmRlclRhcmdldDExKGNvbG9yYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSk7Ci0gICAgaWYg
KHJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgICpzdWJyZXNvdXJjZUluZGV4ID0gcmVuZGVy
VGFyZ2V0LT5nZXRTdWJyZXNvdXJjZUluZGV4KCk7Ci0KLSAgICAgICAgSUQzRDExUmVuZGVyVGFy
Z2V0VmlldyAqY29sb3JCdWZmZXJSVFYgPSByZW5kZXJUYXJnZXQtPmdldFJlbmRlclRhcmdldFZp
ZXcoKTsKLSAgICAgICAgaWYgKGNvbG9yQnVmZmVyUlRWKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBJRDNEMTFSZXNvdXJjZSAqdGV4dHVyZVJlc291cmNlID0gTlVMTDsKLSAgICAgICAgICAgIGNv
bG9yQnVmZmVyUlRWLT5HZXRSZXNvdXJjZSgmdGV4dHVyZVJlc291cmNlKTsKLQotICAgICAgICAg
ICAgaWYgKHRleHR1cmVSZXNvdXJjZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IHRleHR1cmVSZXNvdXJjZS0+UXVlcnlJbnRlcmZhY2UoSUlEX0lEM0Qx
MVRleHR1cmUyRCwgKHZvaWQqKilyZXNvdXJjZSk7Ci0gICAgICAgICAgICAgICAgdGV4dHVyZVJl
c291cmNlLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3Vs
dCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gZXh0cmFjdCB0aGUgSUQzRDEx
VGV4dHVyZTJEIGZyb20gdGhlIHJlbmRlciB0YXJnZXQgcmVzb3VyY2UsICIKLSAgICAgICAgICAg
ICAgICAgICAgICAgICJIUkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIFJlbmRlcmVyMTE6OmJsaXRSZWN0KGdsOjpGcmFtZWJ1ZmZlciAqcmVhZFRhcmdl
dCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGdsOjpGcmFtZWJ1ZmZlciAqZHJhd1Rh
cmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0RGVwdGhTdGVuY2lsKQotewot
ICAgIGlmIChibGl0UmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZl
ciAqcmVhZEJ1ZmZlciA9IHJlYWRUYXJnZXQtPmdldFJlYWRDb2xvcmJ1ZmZlcigpOwotCi0gICAg
ICAgIGlmICghcmVhZEJ1ZmZlcikKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJGYWlsZWQg
dG8gcmV0cmlldmUgdGhlIHJlYWQgYnVmZmVyIGZyb20gdGhlIHJlYWQgZnJhbWVidWZmZXIuIik7
Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsK
LSAgICAgICAgfQotCi0gICAgICAgIFJlbmRlclRhcmdldCAqcmVhZFJlbmRlclRhcmdldCA9IHJl
YWRCdWZmZXItPmdldFJlbmRlclRhcmdldCgpOwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaW50
IGNvbG9yQXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNobWVudCA8IGdsOjpJTVBMRU1FTlRBVElP
Tl9NQVhfRFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKGRyYXdUYXJnZXQtPmlzRW5hYmxlZENvbG9yQXR0YWNobWVudChjb2xvckF0dGFj
aG1lbnQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIg
KmRyYXdCdWZmZXIgPSBkcmF3VGFyZ2V0LT5nZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQp
OwotCi0gICAgICAgICAgICAgICAgaWYgKCFkcmF3QnVmZmVyKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIGRyYXcgYnVm
ZmVyIGZyb20gdGhlIGRyYXcgZnJhbWVidWZmZXIuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIFJlbmRlclRhcmdldCAqZHJhd1JlbmRlclRhcmdldCA9IGRy
YXdCdWZmZXItPmdldFJlbmRlclRhcmdldCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFibGl0
UmVuZGVyYnVmZmVyUmVjdChyZWFkUmVjdCwgZHJhd1JlY3QsIHJlYWRSZW5kZXJUYXJnZXQsIGRy
YXdSZW5kZXJUYXJnZXQsIGZhbHNlKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoYmxpdERlcHRoU3RlbmNpbCkKLSAgICB7Ci0gICAg
ICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlYWRCdWZmZXIgPSByZWFkVGFyZ2V0LT5nZXREZXB0aE9y
U3RlbmNpbGJ1ZmZlcigpOwotICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpkcmF3QnVmZmVyID0g
ZHJhd1RhcmdldC0+Z2V0RGVwdGhPclN0ZW5jaWxidWZmZXIoKTsKLQotICAgICAgICBpZiAoIXJl
YWRCdWZmZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZl
IHRoZSByZWFkIGRlcHRoLXN0ZW5jaWwgYnVmZmVyIGZyb20gdGhlIHJlYWQgZnJhbWVidWZmZXIu
Iik7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNl
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghZHJhd0J1ZmZlcikKLSAgICAgICAgewotICAg
ICAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIGRyYXcgZGVwdGgtc3RlbmNpbCBi
dWZmZXIgZnJvbSB0aGUgZHJhdyBmcmFtZWJ1ZmZlci4iKTsKLSAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAg
UmVuZGVyVGFyZ2V0ICpyZWFkUmVuZGVyVGFyZ2V0ID0gcmVhZEJ1ZmZlci0+Z2V0RGVwdGhTdGVu
Y2lsKCk7Ci0gICAgICAgIFJlbmRlclRhcmdldCAqZHJhd1JlbmRlclRhcmdldCA9IGRyYXdCdWZm
ZXItPmdldERlcHRoU3RlbmNpbCgpOwotCi0gICAgICAgIGlmICghYmxpdFJlbmRlcmJ1ZmZlclJl
Y3QocmVhZFJlY3QsIGRyYXdSZWN0LCByZWFkUmVuZGVyVGFyZ2V0LCBkcmF3UmVuZGVyVGFyZ2V0
LCB0cnVlKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVyZXIxMTo6cmVhZFBp
eGVscyhnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBHTGludCB4LCBHTGludCB5LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBvdXRwdXRQaXRjaCwgYm9vbCBwYWNr
UmV2ZXJzZVJvd09yZGVyLCBHTGludCBwYWNrQWxpZ25tZW50LCB2b2lkKiBwaXhlbHMpCi17Ci0g
ICAgSUQzRDExVGV4dHVyZTJEICpjb2xvckJ1ZmZlclRleHR1cmUgPSBOVUxMOwotICAgIHVuc2ln
bmVkIGludCBzdWJyZXNvdXJjZUluZGV4ID0gMDsKLQotICAgIGdsOjpSZW5kZXJidWZmZXIgKmNv
bG9yYnVmZmVyID0gZnJhbWVidWZmZXItPmdldFJlYWRDb2xvcmJ1ZmZlcigpOwotCi0gICAgaWYg
KGNvbG9yYnVmZmVyICYmIGdldFJlbmRlclRhcmdldFJlc291cmNlKGNvbG9yYnVmZmVyLCAmc3Vi
cmVzb3VyY2VJbmRleCwgJmNvbG9yQnVmZmVyVGV4dHVyZSkpCi0gICAgewotICAgICAgICBnbDo6
UmVjdGFuZ2xlIGFyZWE7Ci0gICAgICAgIGFyZWEueCA9IHg7Ci0gICAgICAgIGFyZWEueSA9IHk7
Ci0gICAgICAgIGFyZWEud2lkdGggPSB3aWR0aDsKLSAgICAgICAgYXJlYS5oZWlnaHQgPSBoZWln
aHQ7Ci0KLSAgICAgICAgcmVhZFRleHR1cmVEYXRhKGNvbG9yQnVmZmVyVGV4dHVyZSwgc3VicmVz
b3VyY2VJbmRleCwgYXJlYSwgZm9ybWF0LCB0eXBlLCBvdXRwdXRQaXRjaCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHBhY2tSZXZlcnNlUm93T3JkZXIsIHBhY2tBbGlnbm1lbnQsIHBpeGVscyk7
Ci0KLSAgICAgICAgY29sb3JCdWZmZXJUZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIGNvbG9y
QnVmZmVyVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQotfQotCi1JbWFnZSAqUmVuZGVyZXIxMTo6Y3Jl
YXRlSW1hZ2UoKQotewotICAgIHJldHVybiBuZXcgSW1hZ2UxMSgpOwotfQotCi12b2lkIFJlbmRl
cmVyMTE6OmdlbmVyYXRlTWlwbWFwKEltYWdlICpkZXN0LCBJbWFnZSAqc3JjKQotewotICAgIElt
YWdlMTEgKmRlc3QxMSA9IEltYWdlMTE6Om1ha2VJbWFnZTExKGRlc3QpOwotICAgIEltYWdlMTEg
KnNyYzExID0gSW1hZ2UxMTo6bWFrZUltYWdlMTEoc3JjKTsKLSAgICBJbWFnZTExOjpnZW5lcmF0
ZU1pcG1hcChkZXN0MTEsIHNyYzExKTsKLX0KLQotVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyMTE6
OmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoU3dhcENoYWluICpzd2FwQ2hhaW4pCi17Ci0gICAgU3dh
cENoYWluMTEgKnN3YXBDaGFpbjExID0gU3dhcENoYWluMTE6Om1ha2VTd2FwQ2hhaW4xMShzd2Fw
Q2hhaW4pOwotICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2UxMV8yRCh0aGlzLCBzd2FwQ2hh
aW4xMSk7Ci19Ci0KLVRleHR1cmVTdG9yYWdlICpSZW5kZXJlcjExOjpjcmVhdGVUZXh0dXJlU3Rv
cmFnZTJEKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBi
b29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0g
ICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTExXzJEKHRoaXMsIGxldmVscywgaW50ZXJuYWxm
b3JtYXQsIHVzYWdlLCBmb3JjZVJlbmRlcmFibGUsIHdpZHRoLCBoZWlnaHQpOwotfQotCi1UZXh0
dXJlU3RvcmFnZSAqUmVuZGVyZXIxMTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKGludCBsZXZl
bHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVy
YWJsZSwgaW50IHNpemUpCi17Ci0gICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTExX0N1YmUo
dGhpcywgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSwgc2l6
ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldEZhc3RQaXhlbENvcHlTaXpl
KERYR0lfRk9STUFUIHNvdXJjZUZvcm1hdCwgR0xlbnVtIGRlc3RGb3JtYXQsIEdMZW51bSBkZXN0
VHlwZSkKLXsKLSAgICBpZiAoc291cmNlRm9ybWF0ID09IERYR0lfRk9STUFUX0E4X1VOT1JNICYm
Ci0gICAgICAgIGRlc3RGb3JtYXQgICA9PSBHTF9BTFBIQSAmJgotICAgICAgICBkZXN0VHlwZSAg
ICAgPT0gR0xfVU5TSUdORURfQllURSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0K
LSAgICBlbHNlIGlmIChzb3VyY2VGb3JtYXQgPT0gRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk0g
JiYKLSAgICAgICAgICAgICBkZXN0Rm9ybWF0ICAgPT0gR0xfUkdCQSAmJgotICAgICAgICAgICAg
IGRlc3RUeXBlICAgICA9PSBHTF9VTlNJR05FRF9CWVRFKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IDQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNvdXJjZUZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9COEc4
UjhBOF9VTk9STSAmJgotICAgICAgICAgICAgIGRlc3RGb3JtYXQgICA9PSBHTF9CR1JBX0VYVCAm
JgotICAgICAgICAgICAgIGRlc3RUeXBlICAgICA9PSBHTF9VTlNJR05FRF9CWVRFKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNvdXJjZUZvcm1hdCA9PSBE
WEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQgJiYKLSAgICAgICAgICAgICBkZXN0Rm9ybWF0
ICAgPT0gR0xfUkdCQSAmJgotICAgICAgICAgICAgIGRlc3RUeXBlICAgICA9PSBHTF9IQUxGX0ZM
T0FUX09FUykKLSAgICB7Ci0gICAgICAgIHJldHVybiA4OwotICAgIH0KLSAgICBlbHNlIGlmIChz
b3VyY2VGb3JtYXQgPT0gRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FUICYmCi0gICAgICAgICAg
ICAgZGVzdEZvcm1hdCAgID09IEdMX1JHQiAmJgotICAgICAgICAgICAgIGRlc3RUeXBlICAgICA9
PSBHTF9GTE9BVCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAxMjsKLSAgICB9Ci0gICAgZWxzZSBp
ZiAoc291cmNlRm9ybWF0ID09IERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCAmJgotICAg
ICAgICAgICAgIGRlc3RGb3JtYXQgICA9PSBHTF9SR0JBICYmCi0gICAgICAgICAgICAgZGVzdFR5
cGUgICAgID09IEdMX0ZMT0FUKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDE2OwotICAgIH0KLSAg
ICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgdm9pZCByZWFkUGl4ZWxDb2xvcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBEWEdJX0ZP
Uk1BVCBmb3JtYXQsIHVuc2lnbmVkIGludCB4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCB5LCBpbnQgaW5wdXRQaXRjaCwgZ2w6OkNvbG9yICpvdXRDb2xv
cikKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X1I4RzhCOEE4X1VOT1JNOgotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmdi
YSA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KGRhdGEgKyA0ICogeCAr
IHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgIChyZ2JhICYg
MHgwMDAwMDBGRikgKiAoMS4wZiAvIDB4MDAwMDAwRkYpOwotICAgICAgICAgICAgb3V0Q29sb3It
PmdyZWVuID0gKHJnYmEgJiAweDAwMDBGRjAwKSAqICgxLjBmIC8gMHgwMDAwRkYwMCk7Ci0gICAg
ICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAocmdiYSAmIDB4MDBGRjAwMDApICogKDEuMGYgLyAw
eDAwRkYwMDAwKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IChyZ2JhICYgMHhGRjAw
MDAwMCkgKiAoMS4wZiAvIDB4RkYwMDAwMDApOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0E4X1VOT1JNOgotICAgICAgICB7Ci0gICAgICAgICAg
ICBvdXRDb2xvci0+cmVkID0gICAwLjBmOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0g
MC4wZjsKLSAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gIDAuMGY7Ci0gICAgICAgICAgICBv
dXRDb2xvci0+YWxwaGEgPSAqKGRhdGEgKyB4ICsgeSAqIGlucHV0UGl0Y2gpIC8gMjU1LjBmOwot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkcz
MkIzMkEzMl9GTE9BVDoKLSAgICAgICAgewotICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAg
KihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDE2ICogeCArIHkgKiBpbnB1
dFBpdGNoKSArIDApOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gKihyZWludGVycHJl
dF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDE2ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDEp
OwotICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAgKihyZWludGVycHJldF9jYXN0PGNvbnN0
IGZsb2F0Kj4oZGF0YSArIDE2ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDIpOwotICAgICAgICAg
ICAgb3V0Q29sb3ItPmFscGhhID0gKihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0
YSArIDE2ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDMpOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVDoKLSAgICAgICAg
ewotICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAgKihyZWludGVycHJldF9jYXN0PGNvbnN0
IGZsb2F0Kj4oZGF0YSArIDEyICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDApOwotICAgICAgICAg
ICAgb3V0Q29sb3ItPmdyZWVuID0gKihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0
YSArIDEyICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDEpOwotICAgICAgICAgICAgb3V0Q29sb3It
PmJsdWUgPSAgKihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDEyICogeCAr
IHkgKiBpbnB1dFBpdGNoKSArIDIpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gMS4w
ZjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
MTZHMTZCMTZBMTZfRkxPQVQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG91dENvbG9yLT5yZWQg
PSAgIGdsOjpmbG9hdDE2VG9GbG9hdDMyKCoocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25l
ZCBzaG9ydCo+KGRhdGEgKyA4ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDApKTsKLSAgICAgICAg
ICAgIG91dENvbG9yLT5ncmVlbiA9IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCoocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyA4ICogeCArIHkgKiBpbnB1dFBpdGNo
KSArIDEpKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gIGdsOjpmbG9hdDE2VG9GbG9h
dDMyKCoocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyA4ICog
eCArIHkgKiBpbnB1dFBpdGNoKSArIDIpKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9
IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCoocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBz
aG9ydCo+KGRhdGEgKyA4ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDMpKTsKLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STToK
LSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IGJncmEgPSAqcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihkYXRhICsgNCAqIHggKyB5ICogaW5wdXRQaXRjaCk7
Ci0gICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICAoYmdyYSAmIDB4MDBGRjAwMDApICogKDEu
MGYgLyAweDAwRkYwMDAwKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gIChiZ3JhICYg
MHgwMDAwMDBGRikgKiAoMS4wZiAvIDB4MDAwMDAwRkYpOwotICAgICAgICAgICAgb3V0Q29sb3It
PmdyZWVuID0gKGJncmEgJiAweDAwMDBGRjAwKSAqICgxLjBmIC8gMHgwMDAwRkYwMCk7Ci0gICAg
ICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAoYmdyYSAmIDB4RkYwMDAwMDApICogKDEuMGYgLyAw
eEZGMDAwMDAwKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SOF9VTk9STToKLSAgICAgICAgewotICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9
ICAgKihkYXRhICsgeCArIHkgKiBpbnB1dFBpdGNoKSAvIDI1NS4wZjsKLSAgICAgICAgICAgIG91
dENvbG9yLT5ncmVlbiA9IDAuMGY7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAwLjBm
OwotICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gMS4wZjsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNOgotICAgICAgICB7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZyA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0
IHVuc2lnbmVkIHNob3J0Kj4oZGF0YSArIDIgKiB4ICsgeSAqIGlucHV0UGl0Y2gpOwotCi0gICAg
ICAgICAgICBvdXRDb2xvci0+cmVkID0gICAocmcgJiAweEZGMDApICogKDEuMGYgLyAweEZGMDAp
OwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gKHJnICYgMHgwMEZGKSAqICgxLjBmIC8g
MHgwMEZGKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gIDAuMGY7Ci0gICAgICAgICAg
ICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0g
ICAgICBjYXNlIERYR0lfRk9STUFUX1IxNl9GTE9BVDoKLSAgICAgICAgewotICAgICAgICAgICAg
b3V0Q29sb3ItPnJlZCA9ICAgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKnJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgMiAqIHggKyB5ICogaW5wdXRQaXRjaCkpOwot
ICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gMC4wZjsKLSAgICAgICAgICAgIG91dENvbG9y
LT5ibHVlID0gIDAuMGY7Ci0gICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9G
TE9BVDoKLSAgICAgICAgewotICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAgZ2w6OmZsb2F0
MTZUb0Zsb2F0MzIoKihyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oZGF0
YSArIDQgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMCkpOwotICAgICAgICAgICAgb3V0Q29sb3It
PmdyZWVuID0gZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKihyZWludGVycHJldF9jYXN0PGNvbnN0IHVu
c2lnbmVkIHNob3J0Kj4oZGF0YSArIDQgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMSkpOwotICAg
ICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAgMC4wZjsKLSAgICAgICAgICAgIG91dENvbG9yLT5h
bHBoYSA9IDEuMGY7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIEVSUigiUmVhZFBpeGVsQ29sb3Igbm90IGltcGxlbWVudGVkIGZvciBEWEdJIGZv
cm1hdCAldS4iLCBmb3JtYXQpOwotICAgICAgICBVTklNUExFTUVOVEVEKCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdyaXRlUGl4ZWxDb2xvcihjb25z
dCBnbDo6Q29sb3IgJmNvbG9yLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgdW5zaWduZWQg
aW50IHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB5
LCBpbnQgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dERhdGEpCi17Ci0gICAgdW5zaWduZWQgY2hhciog
Ynl0ZURhdGEgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXREYXRhKTsKLSAg
ICB1bnNpZ25lZCBzaG9ydCogc2hvcnREYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBz
aG9ydCo+KG91dERhdGEpOwotCi0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2Fz
ZSBHTF9SR0JBOgotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBj
YXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBv
dXRwdXRQaXRjaCArIDBdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3Iu
cmVkICAgKyAwLjVmKTsKLSAgICAgICAgICAgIGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1dFBp
dGNoICsgMV0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5ncmVlbiAr
IDAuNWYpOwotICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAy
XSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLmJsdWUgICsgMC41Zik7
Ci0gICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDNdID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuYWxwaGEgKyAwLjVmKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEVSUigiV3Jp
dGVQaXhlbENvbG9yIG5vdCBpbXBsZW1lbnRlZCBmb3IgZm9ybWF0IEdMX1JHQkEgYW5kIHR5cGUg
MHglWC4iLCB0eXBlKTsKLSAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEdMX0JHUkFf
RVhUOgotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQ
aXRjaCArIDBdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuYmx1ZSAg
KyAwLjVmKTsKLSAgICAgICAgICAgIGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsg
MV0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5ncmVlbiArIDAuNWYp
OwotICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAyXSA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLnJlZCAgICsgMC41Zik7Ci0gICAg
ICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDNdID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuYWxwaGEgKyAwLjVmKTsKLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9F
WFQ6Ci0gICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIGRlc2t0b3AgR0wgc3BlYyBpbiB0
aGUgIlRyYW5zZmVyIG9mIFBpeGVsIFJlY3RhbmdsZXMiIHNlY3Rpb24KLSAgICAgICAgICAgIC8v
IHRoaXMgdHlwZSBpcyBwYWNrZWQgYXMgZm9sbG93czoKLSAgICAgICAgICAgIC8vICAgMTUgICAx
NCAgIDEzICAgMTIgICAxMSAgIDEwICAgIDkgICAgOCAgICA3ICAgIDYgICAgNSAgICA0ICAgIDMg
ICAgMiAgICAxICAgIDAKLSAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
ICAgICAgICAgICAgLy8gfCAgICAgICA0dGggICAgICAgICB8ICAgICAgICAzcmQgICAgICAgICB8
ICAgICAgICAybmQgICAgICAgIHwgICAxc3QgY29tcG9uZW50ICAgfAotICAgICAgICAgICAgLy8g
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAvLyBpbiB0aGUgY2FzZSBvZiBC
R1JBX0VYVCwgQiBpcyB0aGUgZmlyc3QgY29tcG9uZW50LCBHIHRoZSBzZWNvbmQsIGFuZCBzbyBm
b3J0aC4KLSAgICAgICAgICAgIHNob3J0RGF0YVt4ICsgeSAqIG91dHB1dFBpdGNoIC8gc2l6ZW9m
KHVuc2lnbmVkIHNob3J0KV0gPQotICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBzaG9ydD4oMTUgKiBjb2xvci5hbHBoYSArIDAuNWYpIDw8IDEyKSB8Ci0gICAgICAgICAgICAg
ICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigxNSAqIGNvbG9yLnJlZCAgICsgMC41Zikg
PDwgIDgpIHwKLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDE1
ICogY29sb3IuZ3JlZW4gKyAwLjVmKSA8PCAgNCkgfAotICAgICAgICAgICAgICAgIChzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBzaG9ydD4oMTUgKiBjb2xvci5ibHVlICArIDAuNWYpIDw8ICAwKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF8xXzVf
NV81X1JFVl9FWFQ6Ci0gICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIGRlc2t0b3AgR0wg
c3BlYyBpbiB0aGUgIlRyYW5zZmVyIG9mIFBpeGVsIFJlY3RhbmdsZXMiIHNlY3Rpb24KLSAgICAg
ICAgICAgIC8vIHRoaXMgdHlwZSBpcyBwYWNrZWQgYXMgZm9sbG93czoKLSAgICAgICAgICAgIC8v
ICAgMTUgICAxNCAgIDEzICAgMTIgICAxMSAgIDEwICAgIDkgICAgOCAgICA3ICAgIDYgICAgNSAg
ICA0ICAgIDMgICAgMiAgICAxICAgIDAKLSAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotICAgICAgICAgICAgLy8gfCA0dGggfCAgICAgICAgICAzcmQgICAgICAgICAgIHwg
ICAgICAgICAgIDJuZCAgICAgICAgICB8ICAgICAgMXN0IGNvbXBvbmVudCAgICAgfAotICAgICAg
ICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAvLyBpbiB0aGUg
Y2FzZSBvZiBCR1JBX0VYVCwgQiBpcyB0aGUgZmlyc3QgY29tcG9uZW50LCBHIHRoZSBzZWNvbmQs
IGFuZCBzbyBmb3J0aC4KLSAgICAgICAgICAgIHNob3J0RGF0YVt4ICsgeSAqIG91dHB1dFBpdGNo
IC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KV0gPQotICAgICAgICAgICAgICAgIChzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBzaG9ydD4oICAgICBjb2xvci5hbHBoYSArIDAuNWYpIDw8IDE1KSB8Ci0gICAg
ICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigzMSAqIGNvbG9yLnJlZCAg
ICsgMC41ZikgPDwgMTApIHwKLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQg
c2hvcnQ+KDMxICogY29sb3IuZ3JlZW4gKyAwLjVmKSA8PCAgNSkgfAotICAgICAgICAgICAgICAg
IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMzEgKiBjb2xvci5ibHVlICArIDAuNWYpIDw8
ICAwKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIEVSUigiV3JpdGVQaXhlbENvbG9yIG5vdCBpbXBsZW1lbnRlZCBmb3IgZm9ybWF0IEdMX0JH
UkFfRVhUIGFuZCB0eXBlIDB4JVguIiwgdHlwZSk7Ci0gICAgICAgICAgICBVTklNUExFTUVOVEVE
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAg
ICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgewotICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAgICAgICBzaG9ydERhdGFb
eCArIHkgKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0KLSAgICAgICAg
ICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDMxICogY29sb3IuYmx1ZSAgKyAw
LjVmKSA8PCAgMCkgfAotICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9y
dD4oNjMgKiBjb2xvci5ncmVlbiArIDAuNWYpIDw8ICA1KSB8Ci0gICAgICAgICAgICAgICAgKHN0
YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigzMSAqIGNvbG9yLnJlZCAgICsgMC41ZikgPDwgMTEp
OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6
Ci0gICAgICAgICAgICBieXRlRGF0YVszICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDBdID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IucmVkICsgICAwLjVmKTsKLSAgICAg
ICAgICAgIGJ5dGVEYXRhWzMgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMV0gPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5ncmVlbiArIDAuNWYpOwotICAgICAgICAgICAg
Ynl0ZURhdGFbMyAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAyXSA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXI+KDI1NSAqIGNvbG9yLmJsdWUgKyAgMC41Zik7Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBFUlIoIldyaXRlUGl4ZWxDb2xvciBu
b3QgaW1wbGVtZW50ZWQgZm9yIGZvcm1hdCBHTF9SR0IgYW5kIHR5cGUgMHglWC4iLCB0eXBlKTsK
LSAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICBFUlIoIldyaXRl
UGl4ZWxDb2xvciBub3QgaW1wbGVtZW50ZWQgZm9yIGZvcm1hdCAweCVYLiIsIGZvcm1hdCk7Ci0g
ICAgICAgIFVOSU1QTEVNRU5URUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lk
IFJlbmRlcmVyMTE6OnJlYWRUZXh0dXJlRGF0YShJRDNEMTFUZXh0dXJlMkQgKnRleHR1cmUsIHVu
c2lnbmVkIGludCBzdWJSZXNvdXJjZSwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmYXJlYSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBH
THNpemVpIG91dHB1dFBpdGNoLCBib29sIHBhY2tSZXZlcnNlUm93T3JkZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCBwYWNrQWxpZ25tZW50LCB2b2lkICpwaXhlbHMp
Ci17Ci0gICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4dHVyZURlc2M7Ci0gICAgdGV4dHVyZS0+
R2V0RGVzYygmdGV4dHVyZURlc2MpOwotCi0gICAgRDNEMTFfVEVYVFVSRTJEX0RFU0Mgc3RhZ2lu
Z0Rlc2M7Ci0gICAgc3RhZ2luZ0Rlc2MuV2lkdGggPSBhcmVhLndpZHRoOwotICAgIHN0YWdpbmdE
ZXNjLkhlaWdodCA9IGFyZWEuaGVpZ2h0OwotICAgIHN0YWdpbmdEZXNjLk1pcExldmVscyA9IDE7
Ci0gICAgc3RhZ2luZ0Rlc2MuQXJyYXlTaXplID0gMTsKLSAgICBzdGFnaW5nRGVzYy5Gb3JtYXQg
PSB0ZXh0dXJlRGVzYy5Gb3JtYXQ7Ci0gICAgc3RhZ2luZ0Rlc2MuU2FtcGxlRGVzYy5Db3VudCA9
IDE7Ci0gICAgc3RhZ2luZ0Rlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKLSAgICBzdGFnaW5n
RGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX1NUQUdJTkc7Ci0gICAgc3RhZ2luZ0Rlc2MuQmluZEZs
YWdzID0gMDsKLSAgICBzdGFnaW5nRGVzYy5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NF
U1NfUkVBRDsKLSAgICBzdGFnaW5nRGVzYy5NaXNjRmxhZ3MgPSAwOwotCi0gICAgSUQzRDExVGV4
dHVyZTJEKiBzdGFnaW5nVGV4ID0gTlVMTDsKLSAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2Ut
PkNyZWF0ZVRleHR1cmUyRCgmc3RhZ2luZ0Rlc2MsIE5VTEwsICZzdGFnaW5nVGV4KTsKLSAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byBjcmVhdGUg
c3RhZ2luZyB0ZXh0dXJlIGZvciByZWFkUGl4ZWxzLCBIUkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJRDNEMTFUZXh0dXJlMkQqIHNyY1RleCA9
IE5VTEw7Ci0gICAgaWYgKHRleHR1cmVEZXNjLlNhbXBsZURlc2MuQ291bnQgPiAxKQotICAgIHsK
LSAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgcmVzb2x2ZURlc2M7Ci0gICAgICAgIHJlc29s
dmVEZXNjLldpZHRoID0gdGV4dHVyZURlc2MuV2lkdGg7Ci0gICAgICAgIHJlc29sdmVEZXNjLkhl
aWdodCA9IHRleHR1cmVEZXNjLkhlaWdodDsKLSAgICAgICAgcmVzb2x2ZURlc2MuTWlwTGV2ZWxz
ID0gMTsKLSAgICAgICAgcmVzb2x2ZURlc2MuQXJyYXlTaXplID0gMTsKLSAgICAgICAgcmVzb2x2
ZURlc2MuRm9ybWF0ID0gdGV4dHVyZURlc2MuRm9ybWF0OwotICAgICAgICByZXNvbHZlRGVzYy5T
YW1wbGVEZXNjLkNvdW50ID0gMTsKLSAgICAgICAgcmVzb2x2ZURlc2MuU2FtcGxlRGVzYy5RdWFs
aXR5ID0gMDsKLSAgICAgICAgcmVzb2x2ZURlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxU
OwotICAgICAgICByZXNvbHZlRGVzYy5CaW5kRmxhZ3MgPSAwOwotICAgICAgICByZXNvbHZlRGVz
Yy5DUFVBY2Nlc3NGbGFncyA9IDA7Ci0gICAgICAgIHJlc29sdmVEZXNjLk1pc2NGbGFncyA9IDA7
Ci0KLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZyZXNvbHZlRGVz
YywgTlVMTCwgJnNyY1RleCk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAg
ewotICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gY3JlYXRlIHJlc29sdmUgdGV4dHVyZSBmb3Ig
cmVhZFBpeGVscywgSFJFU1VMVDogMHglWC4iLCByZXN1bHQpOwotICAgICAgICAgICAgc3RhZ2lu
Z1RleC0+UmVsZWFzZSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgbURldmljZUNvbnRleHQtPlJlc29sdmVTdWJyZXNvdXJjZShzcmNUZXgsIDAsIHRleHR1cmUs
IHN1YlJlc291cmNlLCB0ZXh0dXJlRGVzYy5Gb3JtYXQpOwotICAgICAgICBzdWJSZXNvdXJjZSA9
IDA7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHNyY1RleCA9IHRleHR1cmU7Ci0g
ICAgICAgIHNyY1RleC0+QWRkUmVmKCk7Ci0gICAgfQotCi0gICAgRDNEMTFfQk9YIHNyY0JveDsK
LSAgICBzcmNCb3gubGVmdCA9IGFyZWEueDsKLSAgICBzcmNCb3gucmlnaHQgPSBhcmVhLnggKyBh
cmVhLndpZHRoOwotICAgIHNyY0JveC50b3AgPSBhcmVhLnk7Ci0gICAgc3JjQm94LmJvdHRvbSA9
IGFyZWEueSArIGFyZWEuaGVpZ2h0OwotICAgIHNyY0JveC5mcm9udCA9IDA7Ci0gICAgc3JjQm94
LmJhY2sgPSAxOwotCi0gICAgbURldmljZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihz
dGFnaW5nVGV4LCAwLCAwLCAwLCAwLCBzcmNUZXgsIHN1YlJlc291cmNlLCAmc3JjQm94KTsKLQot
ICAgIHNyY1RleC0+UmVsZWFzZSgpOwotICAgIHNyY1RleCA9IE5VTEw7Ci0KLSAgICBEM0QxMV9N
QVBQRURfU1VCUkVTT1VSQ0UgbWFwcGluZzsKLSAgICBtRGV2aWNlQ29udGV4dC0+TWFwKHN0YWdp
bmdUZXgsIDAsIEQzRDExX01BUF9SRUFELCAwLCAmbWFwcGluZyk7Ci0KLSAgICB1bnNpZ25lZCBj
aGFyICpzb3VyY2U7Ci0gICAgaW50IGlucHV0UGl0Y2g7Ci0gICAgaWYgKHBhY2tSZXZlcnNlUm93
T3JkZXIpCi0gICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4obWFwcGluZy5wRGF0YSkgKyBtYXBwaW5nLlJvd1BpdGNoICogKGFyZWEuaGVpZ2h0IC0gMSk7
Ci0gICAgICAgIGlucHV0UGl0Y2ggPSAtc3RhdGljX2Nhc3Q8aW50PihtYXBwaW5nLlJvd1BpdGNo
KTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcio+KG1hcHBpbmcucERhdGEpOwotICAgICAgICBpbnB1dFBpdGNoID0gc3Rh
dGljX2Nhc3Q8aW50PihtYXBwaW5nLlJvd1BpdGNoKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBp
bnQgZmFzdFBpeGVsU2l6ZSA9IGdldEZhc3RQaXhlbENvcHlTaXplKHRleHR1cmVEZXNjLkZvcm1h
dCwgZm9ybWF0LCB0eXBlKTsKLSAgICBpZiAoZmFzdFBpeGVsU2l6ZSAhPSAwKQotICAgIHsKLSAg
ICAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihw
aXhlbHMpOwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGFyZWEuaGVpZ2h0OyBqKyspCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1lbWNweShkZXN0ICsgaiAqIG91dHB1dFBpdGNoLCBzb3Vy
Y2UgKyBqICogaW5wdXRQaXRjaCwgYXJlYS53aWR0aCAqIGZhc3RQaXhlbFNpemUpOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHRleHR1cmVEZXNjLkZvcm1hdCA9PSBEWEdJX0ZPUk1B
VF9COEc4UjhBOF9VTk9STSAmJgotICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9SR0JBICYmCi0g
ICAgICAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQotICAgIHsKLSAgICAgICAgLy8g
RmFzdCBwYXRoIGZvciBzd2FwcGluZyByZWQgd2l0aCBibHVlCi0gICAgICAgIHVuc2lnbmVkIGNo
YXIgKmRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxzKTsKLQotICAgICAg
ICBmb3IgKGludCBqID0gMDsgaiA8IGFyZWEuaGVpZ2h0OyBqKyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJlYS53aWR0aDsgaSsrKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdiID0gKih1bnNpZ25lZCBpbnQqKShz
b3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgICAgICAgICAqKHVuc2ln
bmVkIGludCopKGRlc3QgKyA0ICogaSArIGogKiBvdXRwdXRQaXRjaCkgPQotICAgICAgICAgICAg
ICAgICAgICAoYXJnYiAmIDB4RkYwMEZGMDApIHwgICAgICAgLy8gS2VlcCBhbHBoYSBhbmQgZ3Jl
ZW4KLSAgICAgICAgICAgICAgICAgICAgKGFyZ2IgJiAweDAwRkYwMDAwKSA+PiAxNiB8IC8vIE1v
dmUgcmVkIHRvIGJsdWUKLSAgICAgICAgICAgICAgICAgICAgKGFyZ2IgJiAweDAwMDAwMEZGKSA8
PCAxNjsgIC8vIE1vdmUgYmx1ZSB0byByZWQKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBnbDo6Q29sb3IgcGl4ZWxDb2xvcjsKLSAgICAg
ICAgZm9yIChpbnQgaiA9IDA7IGogPCBhcmVhLmhlaWdodDsgaisrKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZWEud2lkdGg7IGkrKykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICByZWFkUGl4ZWxDb2xvcihzb3VyY2UsIHRleHR1cmVEZXNjLkZv
cm1hdCwgaSwgaiwgaW5wdXRQaXRjaCwgJnBpeGVsQ29sb3IpOwotICAgICAgICAgICAgICAgIHdy
aXRlUGl4ZWxDb2xvcihwaXhlbENvbG9yLCBmb3JtYXQsIHR5cGUsIGksIGosIG91dHB1dFBpdGNo
LCBwaXhlbHMpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgbURldmlj
ZUNvbnRleHQtPlVubWFwKHN0YWdpbmdUZXgsIDApOwotCi0gICAgc3RhZ2luZ1RleC0+UmVsZWFz
ZSgpOwotICAgIHN0YWdpbmdUZXggPSBOVUxMOwotfQotCi1ib29sIFJlbmRlcmVyMTE6OmJsaXRS
ZW5kZXJidWZmZXJSZWN0KGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRSZWN0LCBjb25zdCBnbDo6
UmVjdGFuZ2xlICZkcmF3UmVjdCwgUmVuZGVyVGFyZ2V0ICpyZWFkUmVuZGVyVGFyZ2V0LCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyVGFyZ2V0ICpkcmF3UmVu
ZGVyVGFyZ2V0LCBib29sIHdob2xlQnVmZmVyQ29weSkKLXsKLSAgICBBU1NFUlQocmVhZFJlY3Qu
d2lkdGggPT0gZHJhd1JlY3Qud2lkdGggJiYgcmVhZFJlY3QuaGVpZ2h0ID09IGRyYXdSZWN0Lmhl
aWdodCk7Ci0KLSAgICBSZW5kZXJUYXJnZXQxMSAqZHJhd1JlbmRlclRhcmdldDExID0gUmVuZGVy
VGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShkcmF3UmVuZGVyVGFyZ2V0KTsKLSAgICBpZiAo
IWRyYXdSZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2
ZSB0aGUgZHJhdyByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGRyYXcgZnJhbWVidWZmZXIuIik7Ci0g
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAgIH0K
LQotICAgIElEM0QxMVRleHR1cmUyRCAqZHJhd1RleHR1cmUgPSBkcmF3UmVuZGVyVGFyZ2V0MTEt
PmdldFRleHR1cmUoKTsKLSAgICB1bnNpZ25lZCBpbnQgZHJhd1N1YnJlc291cmNlID0gZHJhd1Jl
bmRlclRhcmdldDExLT5nZXRTdWJyZXNvdXJjZUluZGV4KCk7Ci0KLSAgICBSZW5kZXJUYXJnZXQx
MSAqcmVhZFJlbmRlclRhcmdldDExID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQx
MShyZWFkUmVuZGVyVGFyZ2V0KTsKLSAgICBpZiAoIXJlYWRSZW5kZXJUYXJnZXQpCi0gICAgewot
ICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVhZCByZW5kZXIgdGFyZ2V0IGZy
b20gdGhlIHJlYWQgZnJhbWVidWZmZXIuIik7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAgIH0KLQotICAgIElEM0QxMVRleHR1cmUyRCAqcmVh
ZFRleHR1cmUgPSBOVUxMOwotICAgIHVuc2lnbmVkIGludCByZWFkU3VicmVzb3VyY2UgPSAwOwot
ICAgIGlmIChyZWFkUmVuZGVyVGFyZ2V0LT5nZXRTYW1wbGVzKCkgPiAwKQotICAgIHsKLSAgICAg
ICAgcmVhZFRleHR1cmUgPSByZXNvbHZlTXVsdGlzYW1wbGVkVGV4dHVyZShyZWFkUmVuZGVyVGFy
Z2V0MTEtPmdldFRleHR1cmUoKSwgcmVhZFJlbmRlclRhcmdldDExLT5nZXRTdWJyZXNvdXJjZUlu
ZGV4KCkpOwotICAgICAgICByZWFkU3VicmVzb3VyY2UgPSAwOwotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgICByZWFkVGV4dHVyZSA9IHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0VGV4dHVy
ZSgpOwotICAgICAgICByZWFkVGV4dHVyZS0+QWRkUmVmKCk7Ci0gICAgICAgIHJlYWRTdWJyZXNv
dXJjZSA9IHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0U3VicmVzb3VyY2VJbmRleCgpOwotICAgIH0K
LQotICAgIGlmICghcmVhZFRleHR1cmUpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byBy
ZXRyaWV2ZSB0aGUgcmVhZCByZW5kZXIgdGFyZ2V0IHZpZXcgZnJvbSB0aGUgcmVhZCByZW5kZXIg
dGFyZ2V0LiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZh
bHNlKTsKLSAgICB9Ci0KLSAgICBEM0QxMV9CT1ggcmVhZEJveDsKLSAgICByZWFkQm94LmxlZnQg
PSByZWFkUmVjdC54OwotICAgIHJlYWRCb3gucmlnaHQgPSByZWFkUmVjdC54ICsgcmVhZFJlY3Qu
d2lkdGg7Ci0gICAgcmVhZEJveC50b3AgPSByZWFkUmVjdC55OwotICAgIHJlYWRCb3guYm90dG9t
ID0gcmVhZFJlY3QueSArIHJlYWRSZWN0LmhlaWdodDsKLSAgICByZWFkQm94LmZyb250ID0gMDsK
LSAgICByZWFkQm94LmJhY2sgPSAxOwotCi0gICAgLy8gRDNEMTEgbmVlZHMgZGVwdGgtc3RlbmNp
bCBDb3B5U3VicmVzb3VyY2VSZWdpb25zIHRvIGhhdmUgYSBOVUxMIHBTcmNCb3gKLSAgICAvLyBX
ZSBhbHNvIHJlcXVpcmUgY29tcGxldGUgZnJhbWVidWZmZXIgY29waWVzIGZvciBkZXB0aC1zdGVu
Y2lsIGJsaXQuCi0gICAgRDNEMTFfQk9YICpwU3JjQm94ID0gd2hvbGVCdWZmZXJDb3B5ID8gTlVM
TCA6ICZyZWFkQm94OwotCi0gICAgbURldmljZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lv
bihkcmF3VGV4dHVyZSwgZHJhd1N1YnJlc291cmNlLCBkcmF3UmVjdC54LCBkcmF3UmVjdC55LCAw
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZFRleHR1cmUs
IHJlYWRTdWJyZXNvdXJjZSwgcFNyY0JveCk7Ci0KLSAgICBTYWZlUmVsZWFzZShyZWFkVGV4dHVy
ZSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotSUQzRDExVGV4dHVyZTJEICpSZW5kZXJlcjEx
OjpyZXNvbHZlTXVsdGlzYW1wbGVkVGV4dHVyZShJRDNEMTFUZXh0dXJlMkQgKnNvdXJjZSwgdW5z
aWduZWQgaW50IHN1YnJlc291cmNlKQotewotICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleHR1
cmVEZXNjOwotICAgIHNvdXJjZS0+R2V0RGVzYygmdGV4dHVyZURlc2MpOwotCi0gICAgaWYgKHRl
eHR1cmVEZXNjLlNhbXBsZURlc2MuQ291bnQgPiAxKQotICAgIHsKLSAgICAgICAgRDNEMTFfVEVY
VFVSRTJEX0RFU0MgcmVzb2x2ZURlc2M7Ci0gICAgICAgIHJlc29sdmVEZXNjLldpZHRoID0gdGV4
dHVyZURlc2MuV2lkdGg7Ci0gICAgICAgIHJlc29sdmVEZXNjLkhlaWdodCA9IHRleHR1cmVEZXNj
LkhlaWdodDsKLSAgICAgICAgcmVzb2x2ZURlc2MuTWlwTGV2ZWxzID0gMTsKLSAgICAgICAgcmVz
b2x2ZURlc2MuQXJyYXlTaXplID0gMTsKLSAgICAgICAgcmVzb2x2ZURlc2MuRm9ybWF0ID0gdGV4
dHVyZURlc2MuRm9ybWF0OwotICAgICAgICByZXNvbHZlRGVzYy5TYW1wbGVEZXNjLkNvdW50ID0g
MTsKLSAgICAgICAgcmVzb2x2ZURlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKLSAgICAgICAg
cmVzb2x2ZURlc2MuVXNhZ2UgPSB0ZXh0dXJlRGVzYy5Vc2FnZTsKLSAgICAgICAgcmVzb2x2ZURl
c2MuQmluZEZsYWdzID0gdGV4dHVyZURlc2MuQmluZEZsYWdzOwotICAgICAgICByZXNvbHZlRGVz
Yy5DUFVBY2Nlc3NGbGFncyA9IDA7Ci0gICAgICAgIHJlc29sdmVEZXNjLk1pc2NGbGFncyA9IDA7
Ci0KLSAgICAgICAgSUQzRDExVGV4dHVyZTJEICpyZXNvbHZlVGV4dHVyZSA9IE5VTEw7Ci0gICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZyZXNvbHZlRGVz
YywgTlVMTCwgJnJlc29sdmVUZXh0dXJlKTsKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBjcmVhdGUgYSBtdWx0aXNhbXBs
ZSByZXNvbHZlIHRleHR1cmUsIEhSRVNVTFQ6IDB4JVguIiwgcmVzdWx0KTsKLSAgICAgICAgICAg
IHJldHVybiBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgbURldmljZUNvbnRleHQtPlJlc29s
dmVTdWJyZXNvdXJjZShyZXNvbHZlVGV4dHVyZSwgMCwgc291cmNlLCBzdWJyZXNvdXJjZSwgdGV4
dHVyZURlc2MuRm9ybWF0KTsKLSAgICAgICAgcmV0dXJuIHJlc29sdmVUZXh0dXJlOwotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICBzb3VyY2UtPkFkZFJlZigpOwotICAgICAgICByZXR1
cm4gc291cmNlOwotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJlcjExOjpnZXRMVUlEKExVSUQgKmFk
YXB0ZXJMdWlkKSBjb25zdAotewotICAgIGFkYXB0ZXJMdWlkLT5IaWdoUGFydCA9IDA7Ci0gICAg
YWRhcHRlckx1aWQtPkxvd1BhcnQgPSAwOwotCi0gICAgaWYgKCFtRHhnaUFkYXB0ZXIpCi0gICAg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgRFhHSV9BREFQVEVSX0RFU0Mg
YWRhcHRlckRlc2M7Ci0gICAgaWYgKEZBSUxFRChtRHhnaUFkYXB0ZXItPkdldERlc2MoJmFkYXB0
ZXJEZXNjKSkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgKmFk
YXB0ZXJMdWlkID0gYWRhcHRlckRlc2MuQWRhcHRlckx1aWQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvUmVuZGVyZXIxMS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9SZW5kZXJlcjExLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGI4NmY0ODVmNDBjNThjOTQwZGM5YTNlNGFmYzU4MjViNGUyOWU4YmYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlcjExLmgKKysrIC9kZXYvbnVsbApAQCAtMSwz
NTggKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gUmVuZGVyZXIxMS5oOiBEZWZpbmVz
IGEgYmFjay1lbmQgc3BlY2lmaWMgY2xhc3MgZm9yIHRoZSBEM0QxMSByZW5kZXJlci4KLQotI2lm
bmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSRVIxMV9IXwotI2RlZmluZSBMSUJHTEVTVjJf
UkVOREVSRVJfUkVOREVSRVIxMV9IXwotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIK
LSNpbmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9t
YXRodXRpbC5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclN0YXRlQ2FjaGUuaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvSW5wdXRMYXlvdXRDYWNoZS5oIgotI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQuaCIKLQotbmFtZXNwYWNlIGdsCi17Ci1jbGFzcyBS
ZW5kZXJidWZmZXI7Ci19Ci0KLW5hbWVzcGFjZSByeAotewotCi1jbGFzcyBWZXJ0ZXhEYXRhTWFu
YWdlcjsKLWNsYXNzIEluZGV4RGF0YU1hbmFnZXI7Ci1jbGFzcyBTdHJlYW1pbmdJbmRleEJ1ZmZl
ckludGVyZmFjZTsKLQotZW51bQotewotICAgIE1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTX0Qz
RDExID0gMTAyNCwKLSAgICBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTX0QzRDExID0gMTAy
NAotfTsKLQotY2xhc3MgUmVuZGVyZXIxMSA6IHB1YmxpYyBSZW5kZXJlcgotewotICBwdWJsaWM6
Ci0gICAgUmVuZGVyZXIxMShlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIEhEQyBoRGMpOwotICAgIHZp
cnR1YWwgflJlbmRlcmVyMTEoKTsKLQotICAgIHN0YXRpYyBSZW5kZXJlcjExICptYWtlUmVuZGVy
ZXIxMShSZW5kZXJlciAqcmVuZGVyZXIpOwotCi0gICAgdmlydHVhbCBFR0xpbnQgaW5pdGlhbGl6
ZSgpOwotICAgIHZpcnR1YWwgYm9vbCByZXNldERldmljZSgpOwotCi0gICAgdmlydHVhbCBpbnQg
Z2VuZXJhdGVDb25maWdzKENvbmZpZ0Rlc2MgKipjb25maWdEZXNjTGlzdCk7Ci0gICAgdmlydHVh
bCB2b2lkIGRlbGV0ZUNvbmZpZ3MoQ29uZmlnRGVzYyAqY29uZmlnRGVzY0xpc3QpOwotCi0gICAg
dmlydHVhbCB2b2lkIHN5bmMoYm9vbCBibG9jayk7Ci0KLSAgICB2aXJ0dWFsIFN3YXBDaGFpbiAq
Y3JlYXRlU3dhcENoYWluKEhXTkQgd2luZG93LCBIQU5ETEUgc2hhcmVIYW5kbGUsIEdMZW51bSBi
YWNrQnVmZmVyRm9ybWF0LCBHTGVudW0gZGVwdGhCdWZmZXJGb3JtYXQpOwotCi0gICAgdmlydHVh
bCB2b2lkIHNldFNhbXBsZXJTdGF0ZShnbDo6U2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBj
b25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4
dHVyZShnbDo6U2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBnbDo6VGV4dHVyZSAqdGV4dHVy
ZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmFzdGVyaXplclN0YXRlKGNvbnN0IGdsOjpSYXN0
ZXJpemVyU3RhdGUgJnJhc3RlclN0YXRlKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0
ZShjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNvbG9yICZibGVu
ZENvbG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1w
bGVNYXNrKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RGVwdGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6
OkRlcHRoU3RlbmNpbFN0YXRlICZkZXB0aFN0ZW5jaWxTdGF0ZSwgaW50IHN0ZW5jaWxSZWYsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGVuY2lsQmFja1JlZiwg
Ym9vbCBmcm9udEZhY2VDQ1cpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldFNjaXNzb3JSZWN0YW5n
bGUoY29uc3QgZ2w6OlJlY3RhbmdsZSAmc2Npc3NvciwgYm9vbCBlbmFibGVkKTsKLSAgICB2aXJ0
dWFsIGJvb2wgc2V0Vmlld3BvcnQoY29uc3QgZ2w6OlJlY3RhbmdsZSAmdmlld3BvcnQsIGZsb2F0
IHpOZWFyLCBmbG9hdCB6RmFyLCBHTGVudW0gZHJhd01vZGUsIEdMZW51bSBmcm9udEZhY2UsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaWdub3JlVmlld3BvcnQpOwotCi0gICAg
dmlydHVhbCBib29sIGFwcGx5UHJpbWl0aXZlVHlwZShHTGVudW0gbW9kZSwgR0xzaXplaSBjb3Vu
dCk7Ci0gICAgdmlydHVhbCBib29sIGFwcGx5UmVuZGVyVGFyZ2V0KGdsOjpGcmFtZWJ1ZmZlciAq
ZnJhbWVCdWZmZXIpOwotICAgIHZpcnR1YWwgdm9pZCBhcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1C
aW5hcnkgKnByb2dyYW1CaW5hcnkpOwotICAgIHZpcnR1YWwgdm9pZCBhcHBseVVuaWZvcm1zKGds
OjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBnbDo6VW5pZm9ybUFycmF5ICp1bmlmb3Jt
QXJyYXkpOwotICAgIHZpcnR1YWwgR0xlbnVtIGFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0
ZXNbXSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKLSAg
ICB2aXJ0dWFsIEdMZW51bSBhcHBseUluZGV4QnVmZmVyKGNvbnN0IEdMdm9pZCAqaW5kaWNlcywg
Z2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyLCBHTHNpemVpIGNvdW50LCBHTGVudW0gbW9k
ZSwgR0xlbnVtIHR5cGUsIFRyYW5zbGF0ZWRJbmRleERhdGEgKmluZGV4SW5mbyk7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xzaXpl
aSBpbnN0YW5jZXMpOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUs
IEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpC
dWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5k
ZXhJbmZvLCBHTHNpemVpIGluc3RhbmNlcyk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoY29u
c3QgZ2w6OkNsZWFyUGFyYW1ldGVycyAmY2xlYXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJh
bWVCdWZmZXIpOwotCi0gICAgdmlydHVhbCB2b2lkIG1hcmtBbGxTdGF0ZURpcnR5KCk7Ci0KLSAg
ICAvLyBsb3N0IGRldmljZQotICAgIHZvaWQgbm90aWZ5RGV2aWNlTG9zdCgpOwotICAgIHZpcnR1
YWwgYm9vbCBpc0RldmljZUxvc3QoKTsKLSAgICB2aXJ0dWFsIGJvb2wgdGVzdERldmljZUxvc3Qo
Ym9vbCBub3RpZnkpOwotICAgIHZpcnR1YWwgYm9vbCB0ZXN0RGV2aWNlUmVzZXR0YWJsZSgpOwot
Ci0gICAgLy8gUmVuZGVyZXIgY2FwYWJpbGl0aWVzCi0gICAgdmlydHVhbCBEV09SRCBnZXRBZGFw
dGVyVmVuZG9yKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBzdGQ6OnN0cmluZyBnZXRSZW5kZXJlckRl
c2NyaXB0aW9uKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHVUlEIGdldEFkYXB0ZXJJZGVudGlmaWVy
KCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0QkdSQVRleHR1cmVTdXBwb3J0KCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBib29sIGdldERYVDFUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1
YWwgYm9vbCBnZXREWFQzVGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhU
NVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldEV2ZW50UXVlcnlTdXBwb3J0
KCk7Ci0gICAgdmlydHVhbCBib29sIGdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydChib29sICpmaWx0
ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4
dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKTsKLSAgICB2aXJ0
dWFsIGJvb2wgZ2V0THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wg
Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1YWwgdW5zaWduZWQg
aW50IGdldE1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1
bnNpZ25lZCBpbnQgZ2V0TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0OwotICAg
IHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlc2VydmVkVmVydGV4VW5pZm9ybVZlY3RvcnMoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9y
bVZlY3RvcnMoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhV
bmlmb3JtVmVjdG9ycygpIGNvbnN0OwotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heEZy
YWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBn
ZXRNYXhWYXJ5aW5nVmVjdG9ycygpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBnZXROb25Qb3dl
cjJUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBnZXREZXB0aFRleHR1
cmVTdXBwb3J0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdldE9jY2x1c2lvblF1ZXJ5U3Vw
cG9ydCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBnZXRJbnN0YW5jaW5nU3VwcG9ydCgpIGNv
bnN0OwotICAgIHZpcnR1YWwgYm9vbCBnZXRUZXh0dXJlRmlsdGVyQW5pc290cm9weVN1cHBvcnQo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGZsb2F0IGdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBib29sIGdldFNoYXJlSGFuZGxlU3VwcG9ydCgpIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBnZXREZXJpdmF0aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0KCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBib29sIGdldFBvc3RTdWJCdWZmZXJTdXBwb3J0KCkgY29uc3Q7Ci0KLSAgICB2
aXJ0dWFsIGludCBnZXRNYWpvclNoYWRlck1vZGVsKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBmbG9h
dCBnZXRNYXhQb2ludFNpemUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBnZXRNYXhWaWV3cG9y
dERpbWVuc2lvbigpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1cmVXaWR0aCgp
IGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1cmVIZWlnaHQoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGJvb2wgZ2V0MzJCaXRJbmRleFN1cHBvcnQoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGludCBnZXRNaW5Td2FwSW50ZXJ2YWwoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBnZXRNYXhT
d2FwSW50ZXJ2YWwoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRNYXhTdXBwb3J0
ZWRTYW1wbGVzKCkgY29uc3Q7Ci0gICAgaW50IGdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKERY
R0lfRk9STUFUIGZvcm1hdCwgdW5zaWduZWQgaW50IHJlcXVlc3RlZCkgY29uc3Q7Ci0KLSAgICB2
aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhSZW5kZXJUYXJnZXRzKCkgY29uc3Q7Ci0KLSAgICAv
LyBQaXhlbCBvcGVyYXRpb25zCi0gICAgdmlydHVhbCBib29sIGNvcHlUb1JlbmRlclRhcmdldChU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJE
ICpzb3VyY2UpOwotICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2VDdWJlICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnNv
dXJjZSk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJh
bWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9y
bWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpOwot
ICAgIHZpcnR1YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwg
Y29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsKTsKLQotICAgIGJvb2wgY29weVRleHR1cmUoSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpz
b3VyY2UsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZUFyZWEsIHVuc2lnbmVkIGludCBzb3Vy
Y2VXaWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
IElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmRlc3QsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRlc3RB
cmVhLCB1bnNpZ25lZCBpbnQgZGVzdFdpZHRoLCB1bnNpZ25lZCBpbnQgZGVzdEhlaWdodCwgR0xl
bnVtIGRlc3RGb3JtYXQpOwotCi0gICAgdmlydHVhbCBib29sIGJsaXRSZWN0KGdsOjpGcmFtZWJ1
ZmZlciAqcmVhZFRhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGdsOjpGcmFt
ZWJ1ZmZlciAqZHJhd1RhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0RGVw
dGhTdGVuY2lsKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVhZFBpeGVscyhnbDo6RnJhbWVidWZmZXIg
KmZyYW1lYnVmZmVyLCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xzaXplaSBvdXRwdXRQaXRjaCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLCBHTGlu
dCBwYWNrQWxpZ25tZW50LCB2b2lkKiBwaXhlbHMpOwotCi0gICAgLy8gUmVuZGVyVGFyZ2V0IGNy
ZWF0aW9uCi0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRlclRhcmdldChTd2Fw
Q2hhaW4gKnN3YXBDaGFpbiwgYm9vbCBkZXB0aCk7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQg
KmNyZWF0ZVJlbmRlclRhcmdldChpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMc2l6ZWkgc2FtcGxlcywgYm9vbCBkZXB0aCk7Ci0KLSAgICAvLyBTaGFkZXIgb3BlcmF0aW9u
cwotICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqbG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9p
ZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUpOwotICAgIHZp
cnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqY29tcGlsZVRvRXhlY3V0YWJsZShnbDo6SW5mb0xvZyAm
aW5mb0xvZywgY29uc3QgY2hhciAqc2hhZGVySExTTCwgcng6OlNoYWRlclR5cGUgdHlwZSwgRDNE
V29ya2Fyb3VuZFR5cGUgd29ya2Fyb3VuZCk7Ci0KLSAgICAvLyBJbWFnZSBvcGVyYXRpb25zCi0g
ICAgdmlydHVhbCBJbWFnZSAqY3JlYXRlSW1hZ2UoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJh
dGVNaXBtYXAoSW1hZ2UgKmRlc3QsIEltYWdlICpzb3VyY2UpOwotICAgIHZpcnR1YWwgVGV4dHVy
ZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoU3dhcENoYWluICpzd2FwQ2hhaW4pOwot
ICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoaW50IGxl
dmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5k
ZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgdmlydHVhbCBUZXh0
dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKGludCBsZXZlbHMsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNp
emUpOwotCi0gICAgLy8gQnVmZmVyIGNyZWF0aW9uCi0gICAgdmlydHVhbCBWZXJ0ZXhCdWZmZXIg
KmNyZWF0ZVZlcnRleEJ1ZmZlcigpOwotICAgIHZpcnR1YWwgSW5kZXhCdWZmZXIgKmNyZWF0ZUlu
ZGV4QnVmZmVyKCk7Ci0gICAgdmlydHVhbCBCdWZmZXJTdG9yYWdlICpjcmVhdGVCdWZmZXJTdG9y
YWdlKCk7Ci0KLSAgICAvLyBRdWVyeSBhbmQgRmVuY2UgY3JlYXRpb24KLSAgICB2aXJ0dWFsIFF1
ZXJ5SW1wbCAqY3JlYXRlUXVlcnkoR0xlbnVtIHR5cGUpOwotICAgIHZpcnR1YWwgRmVuY2VJbXBs
ICpjcmVhdGVGZW5jZSgpOwotCi0gICAgLy8gRDNEMTEtcmVuZGVyZXIgc3BlY2lmaWMgbWV0aG9k
cwotICAgIElEM0QxMURldmljZSAqZ2V0RGV2aWNlKCkgeyByZXR1cm4gbURldmljZTsgfQotICAg
IElEM0QxMURldmljZUNvbnRleHQgKmdldERldmljZUNvbnRleHQoKSB7IHJldHVybiBtRGV2aWNl
Q29udGV4dDsgfTsKLSAgICBJRFhHSUZhY3RvcnkgKmdldER4Z2lGYWN0b3J5KCkgeyByZXR1cm4g
bUR4Z2lGYWN0b3J5OyB9OwotCi0gICAgYm9vbCBnZXRSZW5kZXJUYXJnZXRSZXNvdXJjZShnbDo6
UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciwgdW5zaWduZWQgaW50ICpzdWJyZXNvdXJjZUluZGV4
LCBJRDNEMTFUZXh0dXJlMkQgKipyZXNvdXJjZSk7Ci0gICAgdm9pZCB1bmFwcGx5UmVuZGVyVGFy
Z2V0cygpOwotICAgIHZvaWQgc2V0T25lVGltZVJlbmRlclRhcmdldChJRDNEMTFSZW5kZXJUYXJn
ZXRWaWV3ICpyZW5kZXJUYXJnZXRWaWV3KTsKLQotICAgIHZpcnR1YWwgYm9vbCBnZXRMVUlEKExV
SUQgKmFkYXB0ZXJMdWlkKSBjb25zdDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihSZW5kZXJlcjExKTsKLQotICAgIHZvaWQgZHJhd0xpbmVMb29wKEdMc2l6ZWkg
Y291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGludCBtaW5JbmRleCwg
Z2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyKTsKLSAgICB2b2lkIGRyYXdUcmlhbmdsZUZh
bihHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBpbnQg
bWluSW5kZXgsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgaW50IGluc3RhbmNlcyk7
Ci0KLSAgICB2b2lkIHJlYWRUZXh0dXJlRGF0YShJRDNEMTFUZXh0dXJlMkQgKnRleHR1cmUsIHVu
c2lnbmVkIGludCBzdWJSZXNvdXJjZSwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmYXJlYSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xzaXplaSBv
dXRwdXRQaXRjaCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMaW50IHBhY2tBbGlnbm1lbnQsIHZvaWQgKnBpeGVscyk7Ci0KLSAgICB2b2lkIG1h
c2tlZENsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBib29sIHVz
aW5nRXh0ZW5kZWREcmF3QnVmZmVycyk7Ci0gICAgcng6OlJhbmdlIGdldFZpZXdwb3J0Qm91bmRz
KCkgY29uc3Q7Ci0KLSAgICBib29sIGJsaXRSZW5kZXJidWZmZXJSZWN0KGNvbnN0IGdsOjpSZWN0
YW5nbGUgJnJlYWRSZWN0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkcmF3UmVjdCwgUmVuZGVyVGFy
Z2V0ICpyZWFkUmVuZGVyVGFyZ2V0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl
bmRlclRhcmdldCAqZHJhd1JlbmRlclRhcmdldCwgYm9vbCB3aG9sZUJ1ZmZlckNvcHkpOwotICAg
IElEM0QxMVRleHR1cmUyRCAqcmVzb2x2ZU11bHRpc2FtcGxlZFRleHR1cmUoSUQzRDExVGV4dHVy
ZTJEICpzb3VyY2UsIHVuc2lnbmVkIGludCBzdWJyZXNvdXJjZSk7Ci0KLSAgICBITU9EVUxFIG1E
M2QxMU1vZHVsZTsKLSAgICBITU9EVUxFIG1EeGdpTW9kdWxlOwotICAgIEhEQyBtRGM7Ci0KLSAg
ICBib29sIG1EZXZpY2VMb3N0OwotCi0gICAgdm9pZCBpbml0aWFsaXplRGV2aWNlKCk7Ci0gICAg
dm9pZCByZWxlYXNlRGV2aWNlUmVzb3VyY2VzKCk7Ci0gICAgaW50IGdldE1pbm9yU2hhZGVyTW9k
ZWwoKSBjb25zdDsKLSAgICB2b2lkIHJlbGVhc2UoKTsKLQotICAgIFJlbmRlclN0YXRlQ2FjaGUg
bVN0YXRlQ2FjaGU7Ci0KLSAgICAvLyBTdXBwb3J0IGZsYWdzCi0gICAgYm9vbCBtRmxvYXQxNlRl
eHR1cmVTdXBwb3J0OwotICAgIGJvb2wgbUZsb2F0MTZGaWx0ZXJTdXBwb3J0OwotICAgIGJvb2wg
bUZsb2F0MTZSZW5kZXJTdXBwb3J0OwotCi0gICAgYm9vbCBtRmxvYXQzMlRleHR1cmVTdXBwb3J0
OwotICAgIGJvb2wgbUZsb2F0MzJGaWx0ZXJTdXBwb3J0OwotICAgIGJvb2wgbUZsb2F0MzJSZW5k
ZXJTdXBwb3J0OwotCi0gICAgYm9vbCBtRFhUMVRleHR1cmVTdXBwb3J0OwotICAgIGJvb2wgbURY
VDNUZXh0dXJlU3VwcG9ydDsKLSAgICBib29sIG1EWFQ1VGV4dHVyZVN1cHBvcnQ7Ci0KLSAgICBi
b29sIG1EZXB0aFRleHR1cmVTdXBwb3J0OwotCi0gICAgLy8gTXVsdGlzYW1wbGUgZm9ybWF0IHN1
cHBvcnQKLSAgICBzdHJ1Y3QgTXVsdGlzYW1wbGVTdXBwb3J0SW5mbwotICAgIHsKLSAgICAgICAg
dW5zaWduZWQgaW50IHF1YWxpdHlMZXZlbHNbRDNEMTFfTUFYX01VTFRJU0FNUExFX1NBTVBMRV9D
T1VOVF07Ci0gICAgfTsKLQotICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPERYR0lfRk9S
TUFULCBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvLCBzdGQ6Omhhc2g8aW50PiA+IE11bHRpc2FtcGxl
U3VwcG9ydE1hcDsKLSAgICBNdWx0aXNhbXBsZVN1cHBvcnRNYXAgbU11bHRpc2FtcGxlU3VwcG9y
dE1hcDsKLQotICAgIHVuc2lnbmVkIGludCBtTWF4U3VwcG9ydGVkU2FtcGxlczsKLQotICAgIC8v
IGN1cnJlbnQgcmVuZGVyIHRhcmdldCBzdGF0ZXMKLSAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRS
ZW5kZXJUYXJnZXRTZXJpYWxzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTXTsK
LSAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbDsKLSAgICB1bnNpZ25l
ZCBpbnQgbUFwcGxpZWRTdGVuY2lsYnVmZmVyU2VyaWFsOwotICAgIGJvb2wgbURlcHRoU3RlbmNp
bEluaXRpYWxpemVkOwotICAgIGJvb2wgbVJlbmRlclRhcmdldERlc2NJbml0aWFsaXplZDsKLSAg
ICByeDo6UmVuZGVyVGFyZ2V0OjpEZXNjIG1SZW5kZXJUYXJnZXREZXNjOwotICAgIHVuc2lnbmVk
IGludCBtQ3VyRGVwdGhTaXplOwotICAgIHVuc2lnbmVkIGludCBtQ3VyU3RlbmNpbFNpemU7Ci0K
LSAgICAvLyBDdXJyZW50bHkgYXBwbGllZCBzYW1wbGVyIHN0YXRlcwotICAgIGJvb2wgbUZvcmNl
U2V0VmVydGV4U2FtcGxlclN0YXRlc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhU
VVJFX0lNQUdFX1VOSVRTXTsKLSAgICBnbDo6U2FtcGxlclN0YXRlIG1DdXJWZXJ0ZXhTYW1wbGVy
U3RhdGVzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNd
OwotCi0gICAgYm9vbCBtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0ZXNbZ2w6Ok1BWF9URVhUVVJF
X0lNQUdFX1VOSVRTXTsKLSAgICBnbDo6U2FtcGxlclN0YXRlIG1DdXJQaXhlbFNhbXBsZXJTdGF0
ZXNbZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKLQotICAgIC8vIEN1cnJlbnRseSBhcHBs
aWVkIHRleHR1cmVzCi0gICAgdW5zaWduZWQgaW50IG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1tn
bDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKLSAgICB1
bnNpZ25lZCBpbnQgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbZ2w6Ok1BWF9URVhUVVJFX0lNQUdF
X1VOSVRTXTsKLQotICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIGJsZW5kIHN0YXRlCi0gICAgYm9v
bCBtRm9yY2VTZXRCbGVuZFN0YXRlOwotICAgIGdsOjpCbGVuZFN0YXRlIG1DdXJCbGVuZFN0YXRl
OwotICAgIGdsOjpDb2xvciBtQ3VyQmxlbmRDb2xvcjsKLSAgICB1bnNpZ25lZCBpbnQgbUN1clNh
bXBsZU1hc2s7Ci0KLSAgICAvLyBDdXJyZW50bHkgYXBwbGllZCByYXN0ZXJpemVyIHN0YXRlCi0g
ICAgYm9vbCBtRm9yY2VTZXRSYXN0ZXJTdGF0ZTsKLSAgICBnbDo6UmFzdGVyaXplclN0YXRlIG1D
dXJSYXN0ZXJTdGF0ZTsKLQotICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIGRlcHRoIHN0ZW5jaWwg
c3RhdGUKLSAgICBib29sIG1Gb3JjZVNldERlcHRoU3RlbmNpbFN0YXRlOwotICAgIGdsOjpEZXB0
aFN0ZW5jaWxTdGF0ZSBtQ3VyRGVwdGhTdGVuY2lsU3RhdGU7Ci0gICAgaW50IG1DdXJTdGVuY2ls
UmVmOwotICAgIGludCBtQ3VyU3RlbmNpbEJhY2tSZWY7Ci0KLSAgICAvLyBDdXJyZW50bHkgYXBw
bGllZCBzY2lzc29yIHJlY3RhbmdsZQotICAgIGJvb2wgbUZvcmNlU2V0U2Npc3NvcjsKLSAgICBi
b29sIG1TY2lzc29yRW5hYmxlZDsKLSAgICBnbDo6UmVjdGFuZ2xlIG1DdXJTY2lzc29yOwotCi0g
ICAgLy8gQ3VycmVudGx5IGFwcGxpZWQgdmlld3BvcnQKLSAgICBib29sIG1Gb3JjZVNldFZpZXdw
b3J0OwotICAgIGdsOjpSZWN0YW5nbGUgbUN1clZpZXdwb3J0OwotICAgIGZsb2F0IG1DdXJOZWFy
OwotICAgIGZsb2F0IG1DdXJGYXI7Ci0KLSAgICAvLyBDdXJyZW50bHkgYXBwbGllZCBwcmltaXRp
dmUgdG9wb2xvZ3kKLSAgICBEM0QxMV9QUklNSVRJVkVfVE9QT0xPR1kgbUN1cnJlbnRQcmltaXRp
dmVUb3BvbG9neTsKLQotICAgIHVuc2lnbmVkIGludCBtQXBwbGllZElCU2VyaWFsOwotICAgIHVu
c2lnbmVkIGludCBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbDsKLSAgICB1bnNpZ25lZCBpbnQgbUFw
cGxpZWRJQk9mZnNldDsKLQotICAgIHVuc2lnbmVkIGludCBtQXBwbGllZFByb2dyYW1CaW5hcnlT
ZXJpYWw7Ci0gICAgYm9vbCBtSXNHZW9tZXRyeVNoYWRlckFjdGl2ZTsKLQotICAgIGR4X1ZlcnRl
eENvbnN0YW50cyBtVmVydGV4Q29uc3RhbnRzOwotICAgIGR4X1ZlcnRleENvbnN0YW50cyBtQXBw
bGllZFZlcnRleENvbnN0YW50czsKLSAgICBJRDNEMTFCdWZmZXIgKm1Ecml2ZXJDb25zdGFudEJ1
ZmZlclZTOwotICAgIElEM0QxMUJ1ZmZlciAqbUN1cnJlbnRWZXJ0ZXhDb25zdGFudEJ1ZmZlcjsK
LQotICAgIGR4X1BpeGVsQ29uc3RhbnRzIG1QaXhlbENvbnN0YW50czsKLSAgICBkeF9QaXhlbENv
bnN0YW50cyBtQXBwbGllZFBpeGVsQ29uc3RhbnRzOwotICAgIElEM0QxMUJ1ZmZlciAqbURyaXZl
ckNvbnN0YW50QnVmZmVyUFM7Ci0gICAgSUQzRDExQnVmZmVyICptQ3VycmVudFBpeGVsQ29uc3Rh
bnRCdWZmZXI7Ci0KLSAgICBJRDNEMTFCdWZmZXIgKm1DdXJyZW50R2VvbWV0cnlDb25zdGFudEJ1
ZmZlcjsKLQotICAgIC8vIFZlcnRleCwgaW5kZXggYW5kIGlucHV0IGxheW91dHMKLSAgICBWZXJ0
ZXhEYXRhTWFuYWdlciAqbVZlcnRleERhdGFNYW5hZ2VyOwotICAgIEluZGV4RGF0YU1hbmFnZXIg
Km1JbmRleERhdGFNYW5hZ2VyOwotICAgIElucHV0TGF5b3V0Q2FjaGUgbUlucHV0TGF5b3V0Q2Fj
aGU7Ci0KLSAgICBTdHJlYW1pbmdJbmRleEJ1ZmZlckludGVyZmFjZSAqbUxpbmVMb29wSUI7Ci0g
ICAgU3RyZWFtaW5nSW5kZXhCdWZmZXJJbnRlcmZhY2UgKm1UcmlhbmdsZUZhbklCOwotCi0gICAg
Ly8gVGV4dHVyZSBjb3B5IHJlc291cmNlcwotICAgIGJvb2wgbUNvcHlSZXNvdXJjZXNJbml0aWFs
aXplZDsKLSAgICBJRDNEMTFCdWZmZXIgKm1Db3B5VkI7Ci0gICAgSUQzRDExU2FtcGxlclN0YXRl
ICptQ29weVNhbXBsZXI7Ci0gICAgSUQzRDExSW5wdXRMYXlvdXQgKm1Db3B5SUw7Ci0gICAgSUQz
RDExVmVydGV4U2hhZGVyICptQ29weVZTOwotICAgIElEM0QxMVBpeGVsU2hhZGVyICptQ29weVJH
QkFQUzsKLSAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUNvcHlSR0JQUzsKLSAgICBJRDNEMTFQaXhl
bFNoYWRlciAqbUNvcHlMdW1QUzsKLSAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUNvcHlMdW1BbHBo
YVBTOwotCi0gICAgLy8gTWFza2VkIGNsZWFyIHJlc291cmNlcwotICAgIGJvb2wgbUNsZWFyUmVz
b3VyY2VzSW5pdGlhbGl6ZWQ7Ci0gICAgSUQzRDExQnVmZmVyICptQ2xlYXJWQjsKLSAgICBJRDNE
MTFJbnB1dExheW91dCAqbUNsZWFySUw7Ci0gICAgSUQzRDExVmVydGV4U2hhZGVyICptQ2xlYXJW
UzsKLSAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUNsZWFyU2luZ2xlUFM7Ci0gICAgSUQzRDExUGl4
ZWxTaGFkZXIgKm1DbGVhck11bHRpcGxlUFM7Ci0gICAgSUQzRDExUmFzdGVyaXplclN0YXRlICpt
Q2xlYXJTY2lzc29yUlM7Ci0gICAgSUQzRDExUmFzdGVyaXplclN0YXRlICptQ2xlYXJOb1NjaXNz
b3JSUzsKLQotICAgIC8vIFN5bmMgcXVlcnkKLSAgICBJRDNEMTFRdWVyeSAqbVN5bmNRdWVyeTsK
LQotICAgIElEM0QxMURldmljZSAqbURldmljZTsKLSAgICBEM0RfRkVBVFVSRV9MRVZFTCBtRmVh
dHVyZUxldmVsOwotICAgIElEM0QxMURldmljZUNvbnRleHQgKm1EZXZpY2VDb250ZXh0OwotICAg
IElEWEdJQWRhcHRlciAqbUR4Z2lBZGFwdGVyOwotICAgIERYR0lfQURBUFRFUl9ERVNDIG1BZGFw
dGVyRGVzY3JpcHRpb247Ci0gICAgY2hhciBtRGVzY3JpcHRpb25bMTI4XTsKLSAgICBJRFhHSUZh
Y3RvcnkgKm1EeGdpRmFjdG9yeTsKLQotICAgIC8vIENhY2hlZCBkZXZpY2UgY2FwcwotICAgIGJv
b2wgbUJHUkFUZXh0dXJlU3VwcG9ydDsKLX07Ci0KLX0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVO
REVSRVJfUkVOREVSRVIxMV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlcjkuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlcjkuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBlODlmOGJkZGM4ZDZjZmViMTI4YTQzM2VkMGY3ZTE0ZWZlOGQzMTE5
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXI5LmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDMyNjQgKzAsMCBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0vLwotCi0vLyBSZW5kZXJlcjkuY3BwOiBJbXBsZW1lbnRzIGEgYmFjay1l
bmQgc3BlY2lmaWMgY2xhc3MgZm9yIHRoZSBEM0Q5IHJlbmRlcmVyLgotCi0jaW5jbHVkZSAibGli
R0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL1RleHR1cmUuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIK
LSNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L1Byb2dyYW1CaW5hcnkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhEYXRh
TWFuYWdlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlcjkuaCIKLSNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXI5X3V0aWxzLmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckV4ZWN1dGFibGU5LmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL1N3YXBDaGFpbjkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
VGV4dHVyZVN0b3JhZ2U5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlOS5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9CbGl0LmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldDkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvVmVydGV4QnVmZmVyOS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1
ZmZlcjkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZTkuaCIK
LSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUXVlcnk5LmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL0ZlbmNlOS5oIgotCi0jaW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIKLQot
I2luY2x1ZGUgInRoaXJkX3BhcnR5L3RyYWNlX2V2ZW50L3RyYWNlX2V2ZW50LmgiCi0KLS8vIENh
biBhbHNvIGJlIGVuYWJsZWQgYnkgZGVmaW5pbmcgRk9SQ0VfUkVGX1JBU1QgaW4gdGhlIHByb2pl
Y3QncyBwcmVkZWZpbmVkIG1hY3JvcwotI2RlZmluZSBSRUZfUkFTVCAwCi0KLS8vIFRoZSAiRGVi
dWcgVGhpcyBQaXhlbC4uLiIgZmVhdHVyZSBpbiBQSVggb2Z0ZW4gZmFpbHMgd2hlbiB1c2luZyB0
aGUKLS8vIEQzRDlFeCBpbnRlcmZhY2VzLiAgSW4gb3JkZXIgdG8gZ2V0IGRlYnVnIHBpeGVsIHRv
IHdvcmsgb24gYSBWaXN0YS9XaW4gNwotLy8gbWFjaGluZSwgZGVmaW5lICJBTkdMRV9FTkFCTEVf
RDNEOUVYPTAiIGluIHlvdXIgcHJvamVjdCBmaWxlLgotI2lmICFkZWZpbmVkKEFOR0xFX0VOQUJM
RV9EM0Q5RVgpCi0vLyBFbmFibGVzIHVzZSBvZiB0aGUgSURpcmVjdDNEOUV4IGludGVyZmFjZSwg
d2hlbiBhdmFpbGFibGUKLSNkZWZpbmUgQU5HTEVfRU5BQkxFX0QzRDlFWCAxCi0jZW5kaWYgLy8g
IWRlZmluZWQoQU5HTEVfRU5BQkxFX0QzRDlFWCkKLQotbmFtZXNwYWNlIHJ4Ci17Ci1zdGF0aWMg
Y29uc3QgRDNERk9STUFUIFJlbmRlclRhcmdldEZvcm1hdHNbXSA9Ci0gICAgewotICAgICAgICBE
M0RGTVRfQTFSNUc1QjUsCi0gICAgLy8gIEQzREZNVF9BMlIxMEcxMEIxMCwgICAvLyBUaGUgY29s
b3JfcmFtcCBjb25mb3JtYW5jZSB0ZXN0IHVzZXMgUmVhZFBpeGVscyB3aXRoIFVOU0lHTkVEX0JZ
VEUgY2F1c2luZyBpdCB0byB0aGluayB0aGF0IHJlbmRlcmluZyBza2lwcGVkIGEgY29sb3VyIHZh
bHVlLgotICAgICAgICBEM0RGTVRfQThSOEc4QjgsCi0gICAgICAgIEQzREZNVF9SNUc2QjUsCi0g
ICAgLy8gIEQzREZNVF9YMVI1RzVCNSwgICAgICAvLyBIYXMgbm8gY29tcGF0aWJsZSBPcGVuR0wg
RVMgcmVuZGVyYnVmZmVyIGZvcm1hdAotICAgICAgICBEM0RGTVRfWDhSOEc4QjgKLSAgICB9Owot
Ci1zdGF0aWMgY29uc3QgRDNERk9STUFUIERlcHRoU3RlbmNpbEZvcm1hdHNbXSA9Ci0gICAgewot
ICAgICAgICBEM0RGTVRfVU5LTk9XTiwKLSAgICAvLyAgRDNERk1UX0QxNl9MT0NLQUJMRSwKLSAg
ICAgICAgRDNERk1UX0QzMiwKLSAgICAvLyAgRDNERk1UX0QxNVMxLAotICAgICAgICBEM0RGTVRf
RDI0UzgsCi0gICAgICAgIEQzREZNVF9EMjRYOCwKLSAgICAvLyAgRDNERk1UX0QyNFg0UzQsCi0g
ICAgICAgIEQzREZNVF9EMTYsCi0gICAgLy8gIEQzREZNVF9EMzJGX0xPQ0tBQkxFLAotICAgIC8v
ICBEM0RGTVRfRDI0RlM4Ci0gICAgfTsKLQotZW51bQotewotICAgIE1BWF9WRVJURVhfQ09OU1RB
TlRfVkVDVE9SU19EM0Q5ID0gMjU2LAotICAgIE1BWF9QSVhFTF9DT05TVEFOVF9WRUNUT1JTX1NN
MiA9IDMyLAotICAgIE1BWF9QSVhFTF9DT05TVEFOVF9WRUNUT1JTX1NNMyA9IDIyNCwKLSAgICBN
QVhfVkFSWUlOR19WRUNUT1JTX1NNMiA9IDgsCi0gICAgTUFYX1ZBUllJTkdfVkVDVE9SU19TTTMg
PSAxMCwKLQotICAgIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl9TTTMgPSA0Ci19OwotCi1S
ZW5kZXJlcjk6OlJlbmRlcmVyOShlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIEhEQyBoRGMsIGJvb2wg
c29mdHdhcmVEZXZpY2UpIDogUmVuZGVyZXIoZGlzcGxheSksIG1EYyhoRGMpLCBtU29mdHdhcmVE
ZXZpY2Uoc29mdHdhcmVEZXZpY2UpCi17Ci0gICAgbUQzZDlNb2R1bGUgPSBOVUxMOwotCi0gICAg
bUQzZDkgPSBOVUxMOwotICAgIG1EM2Q5RXggPSBOVUxMOwotICAgIG1EZXZpY2UgPSBOVUxMOwot
ICAgIG1EZXZpY2VFeCA9IE5VTEw7Ci0gICAgbURldmljZVdpbmRvdyA9IE5VTEw7Ci0gICAgbUJs
aXQgPSBOVUxMOwotCi0gICAgbUFkYXB0ZXIgPSBEM0RBREFQVEVSX0RFRkFVTFQ7Ci0KLSAgICAj
aWYgUkVGX1JBU1QgPT0gMSB8fCBkZWZpbmVkKEZPUkNFX1JFRl9SQVNUKQotICAgICAgICBtRGV2
aWNlVHlwZSA9IEQzRERFVlRZUEVfUkVGOwotICAgICNlbHNlCi0gICAgICAgIG1EZXZpY2VUeXBl
ID0gRDNEREVWVFlQRV9IQUw7Ci0gICAgI2VuZGlmCi0KLSAgICBtRGV2aWNlTG9zdCA9IGZhbHNl
OwotCi0gICAgbU1heFN1cHBvcnRlZFNhbXBsZXMgPSAwOwotCi0gICAgbU1hc2tlZENsZWFyU2F2
ZWRTdGF0ZSA9IE5VTEw7Ci0KLSAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBOVUxMOwotICAgIG1J
bmRleERhdGFNYW5hZ2VyID0gTlVMTDsKLSAgICBtTGluZUxvb3BJQiA9IE5VTEw7Ci0KLSAgICBt
TWF4TnVsbENvbG9yYnVmZmVyTFJVID0gMDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9O
VUxMX0NPTE9SQlVGRkVSX0NBQ0hFX0VOVFJJRVM7IGkrKykKLSAgICB7Ci0gICAgICAgIG1OdWxs
Q29sb3JidWZmZXJDYWNoZVtpXS5scnVDb3VudCA9IDA7Ci0gICAgICAgIG1OdWxsQ29sb3JidWZm
ZXJDYWNoZVtpXS53aWR0aCA9IDA7Ci0gICAgICAgIG1OdWxsQ29sb3JidWZmZXJDYWNoZVtpXS5o
ZWlnaHQgPSAwOwotICAgICAgICBtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0uYnVmZmVyID0gTlVM
TDsKLSAgICB9Ci19Ci0KLVJlbmRlcmVyOTo6flJlbmRlcmVyOSgpCi17Ci0gICAgcmVsZWFzZURl
dmljZVJlc291cmNlcygpOwotCi0gICAgaWYgKG1EZXZpY2UpCi0gICAgewotICAgICAgICAvLyBJ
ZiB0aGUgZGV2aWNlIGlzIGxvc3QsIHJlc2V0IGl0IGZpcnN0IHRvIHByZXZlbnQgbGVhdmluZyB0
aGUgZHJpdmVyIGluIGFuIHVuc3RhYmxlIHN0YXRlCi0gICAgICAgIGlmICh0ZXN0RGV2aWNlTG9z
dChmYWxzZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc2V0RGV2aWNlKCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBtRGV2aWNlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EZXZpY2UgPSBOVUxM
OwotICAgIH0KLQotICAgIGlmIChtRGV2aWNlRXgpCi0gICAgewotICAgICAgICBtRGV2aWNlRXgt
PlJlbGVhc2UoKTsKLSAgICAgICAgbURldmljZUV4ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAo
bUQzZDkpCi0gICAgewotICAgICAgICBtRDNkOS0+UmVsZWFzZSgpOwotICAgICAgICBtRDNkOSA9
IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1EZXZpY2VXaW5kb3cpCi0gICAgewotICAgICAgICBE
ZXN0cm95V2luZG93KG1EZXZpY2VXaW5kb3cpOwotICAgICAgICBtRGV2aWNlV2luZG93ID0gTlVM
TDsKLSAgICB9Ci0KLSAgICBpZiAobUQzZDlFeCkKLSAgICB7Ci0gICAgICAgIG1EM2Q5RXgtPlJl
bGVhc2UoKTsKLSAgICAgICAgbUQzZDlFeCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1EM2Q5
TW9kdWxlKQotICAgIHsKLSAgICAgICAgbUQzZDlNb2R1bGUgPSBOVUxMOwotICAgIH0KLQotICAg
IHdoaWxlICghbU11bHRpU2FtcGxlU3VwcG9ydC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgZGVs
ZXRlIFtdIG1NdWx0aVNhbXBsZVN1cHBvcnQuYmVnaW4oKS0+c2Vjb25kOwotICAgICAgICBtTXVs
dGlTYW1wbGVTdXBwb3J0LmVyYXNlKG1NdWx0aVNhbXBsZVN1cHBvcnQuYmVnaW4oKSk7Ci0gICAg
fQotfQotCi1SZW5kZXJlcjkgKlJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShSZW5kZXJlciAqcmVu
ZGVyZXIpCi17Ci0gICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUocng6OlJlbmRlcmVyOSosIHJl
bmRlcmVyKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHJ4OjpSZW5kZXJlcjkqPihyZW5kZXJl
cik7Ci19Ci0KLUVHTGludCBSZW5kZXJlcjk6OmluaXRpYWxpemUoKQotewotICAgIGlmICghaW5p
dGlhbGl6ZUNvbXBpbGVyKCkpCi0gICAgewotICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFM
SVpFRDsKLSAgICB9Ci0KLSAgICBpZiAobVNvZnR3YXJlRGV2aWNlKQotICAgIHsKLSAgICAgICAg
VFJBQ0VfRVZFTlQwKCJncHUiLCAiR2V0TW9kdWxlSGFuZGxlX3N3aWZ0c2hhZGVyIik7Ci0gICAg
ICAgIG1EM2Q5TW9kdWxlID0gR2V0TW9kdWxlSGFuZGxlKFRFWFQoInN3aWZ0c2hhZGVyX2QzZDku
ZGxsIikpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBUUkFDRV9FVkVOVDAoImdw
dSIsICJHZXRNb2R1bGVIYW5kbGVfZDNkOSIpOwotICAgICAgICBtRDNkOU1vZHVsZSA9IEdldE1v
ZHVsZUhhbmRsZShURVhUKCJkM2Q5LmRsbCIpKTsKLSAgICB9Ci0KLSAgICBpZiAobUQzZDlNb2R1
bGUgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIEVSUigiTm8gRDNEOSBtb2R1bGUgZm91bmQgLSBh
Ym9ydGluZyFcbiIpOwotICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsKLSAgICB9
Ci0KLSAgICB0eXBlZGVmIEhSRVNVTFQgKFdJTkFQSSAqRGlyZWN0M0RDcmVhdGU5RXhGdW5jKShV
SU5ULCBJRGlyZWN0M0Q5RXgqKik7Ci0gICAgRGlyZWN0M0RDcmVhdGU5RXhGdW5jIERpcmVjdDNE
Q3JlYXRlOUV4UHRyID0gcmVpbnRlcnByZXRfY2FzdDxEaXJlY3QzRENyZWF0ZTlFeEZ1bmM+KEdl
dFByb2NBZGRyZXNzKG1EM2Q5TW9kdWxlLCAiRGlyZWN0M0RDcmVhdGU5RXgiKSk7Ci0KLSAgICAv
LyBVc2UgRGlyZWN0M0Q5RXggaWYgYXZhaWxhYmxlLiBBbW9uZyBvdGhlciB0aGluZ3MsIHRoaXMg
dmVyc2lvbiBpcyBsZXNzCi0gICAgLy8gaW5jbGluZWQgdG8gcmVwb3J0IGEgbG9zdCBjb250ZXh0
LCBmb3IgZXhhbXBsZSB3aGVuIHRoZSB1c2VyIHN3aXRjaGVzCi0gICAgLy8gZGVza3RvcC4gRGly
ZWN0M0Q5RXggaXMgYXZhaWxhYmxlIGluIFdpbmRvd3MgVmlzdGEgYW5kIGxhdGVyIGlmIHN1aXRh
YmxlIGRyaXZlcnMgYXJlIGF2YWlsYWJsZS4KLSAgICBpZiAoQU5HTEVfRU5BQkxFX0QzRDlFWCAm
JiBEaXJlY3QzRENyZWF0ZTlFeFB0ciAmJiBTVUNDRUVERUQoRGlyZWN0M0RDcmVhdGU5RXhQdHIo
RDNEX1NES19WRVJTSU9OLCAmbUQzZDlFeCkpKQotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQw
KCJncHUiLCAiRDNkOUV4X1F1ZXJ5SW50ZXJmYWNlIik7Ci0gICAgICAgIEFTU0VSVChtRDNkOUV4
KTsKLSAgICAgICAgbUQzZDlFeC0+UXVlcnlJbnRlcmZhY2UoSUlEX0lEaXJlY3QzRDksIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbUQzZDkpKTsKLSAgICAgICAgQVNTRVJUKG1EM2Q5KTsKLSAg
ICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiRGlyZWN0
M0RDcmVhdGU5Iik7Ci0gICAgICAgIG1EM2Q5ID0gRGlyZWN0M0RDcmVhdGU5KEQzRF9TREtfVkVS
U0lPTik7Ci0gICAgfQotCi0gICAgaWYgKCFtRDNkOSkKLSAgICB7Ci0gICAgICAgIEVSUigiQ291
bGQgbm90IGNyZWF0ZSBEM0Q5IGRldmljZSAtIGFib3J0aW5nIVxuIik7Ci0gICAgICAgIHJldHVy
biBFR0xfTk9UX0lOSVRJQUxJWkVEOwotICAgIH0KLQotICAgIGlmIChtRGMgIT0gTlVMTCkKLSAg
ICB7Ci0gICAgLy8gIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRTogRGV0ZXJtaW5lIHdoaWNo
IGFkYXB0ZXIgaW5kZXggdGhlIGRldmljZSBjb250ZXh0IGNvcnJlc3BvbmRzIHRvCi0gICAgfQot
Ci0gICAgSFJFU1VMVCByZXN1bHQ7Ci0KLSAgICAvLyBHaXZlIHVwIG9uIGdldHRpbmcgZGV2aWNl
IGNhcHMgYWZ0ZXIgYWJvdXQgb25lIHNlY29uZC4KLSAgICB7Ci0gICAgICAgIFRSQUNFX0VWRU5U
MCgiZ3B1IiwgIkdldERldmljZUNhcHMiKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAx
MDsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBtRDNkOS0+R2V0RGV2aWNl
Q2FwcyhtQWRhcHRlciwgbURldmljZVR5cGUsICZtRGV2aWNlQ2Fwcyk7Ci0gICAgICAgICAgICBp
ZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChyZXN1bHQgPT0gRDNERVJS
X05PVEFWQUlMQUJMRSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTbGVlcCgxMDAp
OyAgIC8vIEdpdmUgdGhlIGRyaXZlciBzb21lIHRpbWUgdG8gaW5pdGlhbGl6ZS9yZWNvdmVyCi0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChGQUlMRUQocmVzdWx0KSkgICAvLyBE
M0RFUlJfT1VUT0ZWSURFT01FTU9SWSwgRV9PVVRPRk1FTU9SWSwgRDNERVJSX0lOVkFMSURERVZJ
Q0UsIG9yIGFub3RoZXIgZXJyb3Igd2UgY2FuJ3QgcmVjb3ZlciBmcm9tCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgRVJSKCJmYWlsZWQgdG8gZ2V0IGRldmljZSBjYXBzICgweCV4KVxu
IiwgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtRGV2aWNlQ2Fwcy5Q
aXhlbFNoYWRlclZlcnNpb24gPCBEM0RQU19WRVJTSU9OKDIsIDApKQotICAgIHsKLSAgICAgICAg
RVJSKCJSZW5kZXJlciBkb2VzIG5vdCBzdXBwb3J0IFBTIDIuMC4gYWJvcnRpbmchXG4iKTsKLSAg
ICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7Ci0gICAgfQotCi0gICAgLy8gV2hlbiBE
aXJlY3RYOSBpcyBydW5uaW5nIHdpdGggYW4gb2xkZXIgRGlyZWN0WDggZHJpdmVyLCBhIFN0cmV0
Y2hSZWN0IGZyb20gYSByZWd1bGFyIHRleHR1cmUgdG8gYSByZW5kZXIgdGFyZ2V0IHRleHR1cmUg
aXMgbm90IHN1cHBvcnRlZC4KLSAgICAvLyBUaGlzIGlzIHJlcXVpcmVkIGJ5IFRleHR1cmUyRDo6
Y29udmVydFRvUmVuZGVyVGFyZ2V0LgotICAgIGlmICgobURldmljZUNhcHMuRGV2Q2FwczIgJiBE
M0RERVZDQVBTMl9DQU5fU1RSRVRDSFJFQ1RfRlJPTV9URVhUVVJFUykgPT0gMCkKLSAgICB7Ci0g
ICAgICAgIEVSUigiUmVuZGVyZXIgZG9lcyBub3Qgc3VwcG9ydCBzdHJldGN0cmVjdCBmcm9tIHRl
eHR1cmVzIVxuIik7Ci0gICAgICAgIHJldHVybiBFR0xfTk9UX0lOSVRJQUxJWkVEOwotICAgIH0K
LQotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiR2V0QWRhcHRlcklkZW50aWZp
ZXIiKTsKLSAgICAgICAgbUQzZDktPkdldEFkYXB0ZXJJZGVudGlmaWVyKG1BZGFwdGVyLCAwLCAm
bUFkYXB0ZXJJZGVudGlmaWVyKTsKLSAgICB9Ci0KLSAgICAvLyBBVEkgY2FyZHMgb24gWFAgaGF2
ZSBwcm9ibGVtcyB3aXRoIG5vbi1wb3dlci1vZi10d28gdGV4dHVyZXMuCi0gICAgbVN1cHBvcnRz
Tm9uUG93ZXIyVGV4dHVyZXMgPSAhKG1EZXZpY2VDYXBzLlRleHR1cmVDYXBzICYgRDNEUFRFWFRV
UkVDQVBTX1BPVzIpICYmCi0gICAgICAgICEobURldmljZUNhcHMuVGV4dHVyZUNhcHMgJiBEM0RQ
VEVYVFVSRUNBUFNfQ1VCRU1BUF9QT1cyKSAmJgotICAgICAgICAhKG1EZXZpY2VDYXBzLlRleHR1
cmVDYXBzICYgRDNEUFRFWFRVUkVDQVBTX05PTlBPVzJDT05ESVRJT05BTCkgJiYKLSAgICAgICAg
IShnZXRDb21wYXJhYmxlT1NWZXJzaW9uKCkgPCB2ZXJzaW9uV2luZG93c1Zpc3RhICYmIG1BZGFw
dGVySWRlbnRpZmllci5WZW5kb3JJZCA9PSBWRU5ET1JfSURfQU1EKTsKLQotICAgIC8vIE11c3Qg
c3VwcG9ydCBhIG1pbmltdW0gb2YgMjoxIGFuaXNvdHJvcHkgZm9yIG1heCBhbmlzb3Ryb3B5IHRv
IGJlIGNvbnNpZGVyZWQgc3VwcG9ydGVkLCBwZXIgdGhlIHNwZWMKLSAgICBtU3VwcG9ydHNUZXh0
dXJlRmlsdGVyQW5pc290cm9weSA9ICgobURldmljZUNhcHMuUmFzdGVyQ2FwcyAmIEQzRFBSQVNU
RVJDQVBTX0FOSVNPVFJPUFkpICYmIChtRGV2aWNlQ2Fwcy5NYXhBbmlzb3Ryb3B5ID49IDIpKTsK
LQotICAgIG1NaW5Td2FwSW50ZXJ2YWwgPSA0OwotICAgIG1NYXhTd2FwSW50ZXJ2YWwgPSAwOwot
Ci0gICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRf
SU5URVJWQUxfSU1NRURJQVRFKQotICAgIHsKLSAgICAgICAgbU1pblN3YXBJbnRlcnZhbCA9IHN0
ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDApOwotICAgICAgICBtTWF4U3dhcEludGVydmFsID0g
c3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgMCk7Ci0gICAgfQotICAgIGlmIChtRGV2aWNlQ2Fw
cy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX09ORSkKLSAgICB7
Ci0gICAgICAgIG1NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dhcEludGVydmFsLCAx
KTsKLSAgICAgICAgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2YWws
IDEpOwotICAgIH0KLSAgICBpZiAobURldmljZUNhcHMuUHJlc2VudGF0aW9uSW50ZXJ2YWxzICYg
RDNEUFJFU0VOVF9JTlRFUlZBTF9UV08pCi0gICAgewotICAgICAgICBtTWluU3dhcEludGVydmFs
ID0gc3RkOjptaW4obU1pblN3YXBJbnRlcnZhbCwgMik7Ci0gICAgICAgIG1NYXhTd2FwSW50ZXJ2
YWwgPSBzdGQ6Om1heChtTWF4U3dhcEludGVydmFsLCAyKTsKLSAgICB9Ci0gICAgaWYgKG1EZXZp
Y2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfVEhSRUUp
Ci0gICAgewotICAgICAgICBtTWluU3dhcEludGVydmFsID0gc3RkOjptaW4obU1pblN3YXBJbnRl
cnZhbCwgMyk7Ci0gICAgICAgIG1NYXhTd2FwSW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4U3dhcElu
dGVydmFsLCAzKTsKLSAgICB9Ci0gICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlvbkludGVy
dmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfRk9VUikKLSAgICB7Ci0gICAgICAgIG1NaW5Td2Fw
SW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dhcEludGVydmFsLCA0KTsKLSAgICAgICAgbU1heFN3
YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2YWwsIDQpOwotICAgIH0KLQotICAg
IGludCBtYXggPSAwOwotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiZ2V0TXVs
dGlTYW1wbGVTdXBwb3J0Iik7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
QXJyYXlTaXplKFJlbmRlclRhcmdldEZvcm1hdHMpOyArK2kpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGJvb2wgKm11bHRpc2FtcGxlQXJyYXkgPSBuZXcgYm9vbFtEM0RNVUxUSVNBTVBMRV8xNl9T
QU1QTEVTICsgMV07Ci0gICAgICAgICAgICBnZXRNdWx0aVNhbXBsZVN1cHBvcnQoUmVuZGVyVGFy
Z2V0Rm9ybWF0c1tpXSwgbXVsdGlzYW1wbGVBcnJheSk7Ci0gICAgICAgICAgICBtTXVsdGlTYW1w
bGVTdXBwb3J0W1JlbmRlclRhcmdldEZvcm1hdHNbaV1dID0gbXVsdGlzYW1wbGVBcnJheTsKLQot
ICAgICAgICAgICAgZm9yIChpbnQgaiA9IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7IGogPj0g
MDsgLS1qKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtdWx0aXNhbXBsZUFy
cmF5W2pdICYmIGogIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUgJiYgaiA+IG1heCkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1heCA9IGo7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgewotICAgICAg
ICBUUkFDRV9FVkVOVDAoImdwdSIsICJnZXRNdWx0aVNhbXBsZVN1cHBvcnQyIik7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgQXJyYXlTaXplKERlcHRoU3RlbmNpbEZvcm1h
dHMpOyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChEZXB0aFN0ZW5jaWxGb3JtYXRz
W2ldID09IEQzREZNVF9VTktOT1dOKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgICAgICBib29sICptdWx0aXNhbXBsZUFycmF5ID0gbmV3IGJvb2xbRDNETVVMVElTQU1QTEVf
MTZfU0FNUExFUyArIDFdOwotICAgICAgICAgICAgZ2V0TXVsdGlTYW1wbGVTdXBwb3J0KERlcHRo
U3RlbmNpbEZvcm1hdHNbaV0sIG11bHRpc2FtcGxlQXJyYXkpOwotICAgICAgICAgICAgbU11bHRp
U2FtcGxlU3VwcG9ydFtEZXB0aFN0ZW5jaWxGb3JtYXRzW2ldXSA9IG11bHRpc2FtcGxlQXJyYXk7
Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGogPSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTOyBq
ID49IDA7IC0taikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobXVsdGlzYW1w
bGVBcnJheVtqXSAmJiBqICE9IEQzRE1VTFRJU0FNUExFX05PTk1BU0tBQkxFICYmIGogPiBtYXgp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtYXggPSBqOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIG1NYXhT
dXBwb3J0ZWRTYW1wbGVzID0gbWF4OwotCi0gICAgc3RhdGljIGNvbnN0IFRDSEFSIHdpbmRvd05h
bWVbXSA9IFRFWFQoIkFuZ2xlSGlkZGVuV2luZG93Iik7Ci0gICAgc3RhdGljIGNvbnN0IFRDSEFS
IGNsYXNzTmFtZVtdID0gVEVYVCgiU1RBVElDIik7Ci0KLSAgICB7Ci0gICAgICAgIFRSQUNFX0VW
RU5UMCgiZ3B1IiwgIkNyZWF0ZVdpbmRvd0V4Iik7Ci0gICAgICAgIG1EZXZpY2VXaW5kb3cgPSBD
cmVhdGVXaW5kb3dFeChXU19FWF9OT0FDVElWQVRFLCBjbGFzc05hbWUsIHdpbmRvd05hbWUsIFdT
X0RJU0FCTEVEIHwgV1NfUE9QVVAsIDAsIDAsIDEsIDEsIEhXTkRfTUVTU0FHRSwgTlVMTCwgR2V0
TW9kdWxlSGFuZGxlKE5VTEwpLCBOVUxMKTsKLSAgICB9Ci0KLSAgICBEM0RQUkVTRU5UX1BBUkFN
RVRFUlMgcHJlc2VudFBhcmFtZXRlcnMgPSBnZXREZWZhdWx0UHJlc2VudFBhcmFtZXRlcnMoKTsK
LSAgICBEV09SRCBiZWhhdmlvckZsYWdzID0gRDNEQ1JFQVRFX0ZQVV9QUkVTRVJWRSB8IEQzRENS
RUFURV9OT1dJTkRPV0NIQU5HRVM7Ci0KLSAgICB7Ci0gICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1
IiwgIkQzZDlfQ3JlYXRlRGV2aWNlIik7Ci0gICAgICAgIHJlc3VsdCA9IG1EM2Q5LT5DcmVhdGVE
ZXZpY2UobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBtRGV2aWNlV2luZG93LCBiZWhhdmlvckZsYWdz
IHwgRDNEQ1JFQVRFX0hBUkRXQVJFX1ZFUlRFWFBST0NFU1NJTkcgfCBEM0RDUkVBVEVfUFVSRURF
VklDRSwgJnByZXNlbnRQYXJhbWV0ZXJzLCAmbURldmljZSk7Ci0gICAgfQotICAgIGlmIChyZXN1
bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkg
fHwgcmVzdWx0ID09IEQzREVSUl9ERVZJQ0VMT1NUKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEVH
TF9CQURfQUxMT0M7Ci0gICAgfQotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAg
ICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiRDNkOV9DcmVhdGVEZXZpY2UyIik7Ci0gICAgICAg
IHJlc3VsdCA9IG1EM2Q5LT5DcmVhdGVEZXZpY2UobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBtRGV2
aWNlV2luZG93LCBiZWhhdmlvckZsYWdzIHwgRDNEQ1JFQVRFX1NPRlRXQVJFX1ZFUlRFWFBST0NF
U1NJTkcsICZwcmVzZW50UGFyYW1ldGVycywgJm1EZXZpY2UpOwotCi0gICAgICAgIGlmIChGQUlM
RUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RF
UlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQg
PT0gRDNERVJSX05PVEFWQUlMQUJMRSB8fCByZXN1bHQgPT0gRDNERVJSX0RFVklDRUxPU1QpOwot
ICAgICAgICAgICAgcmV0dXJuIEVHTF9CQURfQUxMT0M7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAobUQzZDlFeCkKLSAgICB7Ci0gICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgIm1EZXZp
Y2VfUXVlcnlJbnRlcmZhY2UiKTsKLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+UXVlcnlJbnRl
cmZhY2UoSUlEX0lEaXJlY3QzRERldmljZTlFeCwgKHZvaWQqKikgJm1EZXZpY2VFeCk7Ci0gICAg
ICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgfQotCi0gICAgewotICAgICAgICBU
UkFDRV9FVkVOVDAoImdwdSIsICJTaGFkZXJDYWNoZSBpbml0aWFsaXplIik7Ci0gICAgICAgIG1W
ZXJ0ZXhTaGFkZXJDYWNoZS5pbml0aWFsaXplKG1EZXZpY2UpOwotICAgICAgICBtUGl4ZWxTaGFk
ZXJDYWNoZS5pbml0aWFsaXplKG1EZXZpY2UpOwotICAgIH0KLQotICAgIC8vIENoZWNrIG9jY2x1
c2lvbiBxdWVyeSBzdXBwb3J0Ci0gICAgSURpcmVjdDNEUXVlcnk5ICpvY2NsdXNpb25RdWVyeSA9
IE5VTEw7Ci0gICAgewotICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJkZXZpY2VfQ3JlYXRl
UXVlcnkiKTsKLSAgICAgICAgaWYgKFNVQ0NFRURFRChtRGV2aWNlLT5DcmVhdGVRdWVyeShEM0RR
VUVSWVRZUEVfT0NDTFVTSU9OLCAmb2NjbHVzaW9uUXVlcnkpKSAmJiBvY2NsdXNpb25RdWVyeSkK
LSAgICAgICAgewotICAgICAgICAgICAgb2NjbHVzaW9uUXVlcnktPlJlbGVhc2UoKTsKLSAgICAg
ICAgICAgIG1PY2NsdXNpb25RdWVyeVN1cHBvcnQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbU9jY2x1c2lvblF1ZXJ5U3VwcG9ydCA9IGZh
bHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgZXZlbnQgcXVlcnkgc3VwcG9y
dAotICAgIElEaXJlY3QzRFF1ZXJ5OSAqZXZlbnRRdWVyeSA9IE5VTEw7Ci0gICAgewotICAgICAg
ICBUUkFDRV9FVkVOVDAoImdwdSIsICJkZXZpY2VfQ3JlYXRlUXVlcnkyIik7Ci0gICAgICAgIGlm
IChTVUNDRUVERUQobURldmljZS0+Q3JlYXRlUXVlcnkoRDNEUVVFUllUWVBFX0VWRU5ULCAmZXZl
bnRRdWVyeSkpICYmIGV2ZW50UXVlcnkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGV2ZW50UXVl
cnktPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1FdmVudFF1ZXJ5U3VwcG9ydCA9IHRydWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRXZlbnRRdWVy
eVN1cHBvcnQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEQzRERJU1BMQVlNT0RF
IGN1cnJlbnREaXNwbGF5TW9kZTsKLSAgICBtRDNkOS0+R2V0QWRhcHRlckRpc3BsYXlNb2RlKG1B
ZGFwdGVyLCAmY3VycmVudERpc3BsYXlNb2RlKTsKLQotICAgIC8vIENoZWNrIHZlcnRleCB0ZXh0
dXJlIHN1cHBvcnQKLSAgICAvLyBPbmx5IERpcmVjdDNEIDEwIHJlYWR5IGRldmljZXMgc3VwcG9y
dCBhbGwgdGhlIG5lY2Vzc2FyeSB2ZXJ0ZXggdGV4dHVyZSBmb3JtYXRzLgotICAgIC8vIFdlIHRl
c3QgdGhpcyB1c2luZyBEM0Q5IGJ5IGNoZWNraW5nIHN1cHBvcnQgZm9yIHRoZSBSMTZGIGZvcm1h
dC4KLSAgICBtVmVydGV4VGV4dHVyZVN1cHBvcnQgPSBtRGV2aWNlQ2Fwcy5QaXhlbFNoYWRlclZl
cnNpb24gPj0gRDNEUFNfVkVSU0lPTigzLCAwKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VU
eXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEVVNBR0VfUVVFUllfVkVS
VEVYVEVYVFVSRSwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX1IxNkYpKTsKLQotICAgIC8vIENo
ZWNrIGRlcHRoIHRleHR1cmUgc3VwcG9ydAotICAgIC8vIHdlIHVzZSBJTlRaIGZvciBkZXB0aCB0
ZXh0dXJlcyBpbiBEaXJlY3QzRDkKLSAgICAvLyB3ZSBhbHNvIHdhbnQgTlVMTCB0ZXh0dXJlIHN1
cHBvcnQgdG8gZW5zdXJlIHRoZSB3ZSBjYW4gbWFrZSBkZXB0aC1vbmx5IEZCT3MKLSAgICAvLyBz
ZWUgaHR0cDovL2FyYXMtcC5pbmZvL3RleHRzL0QzRDlHUFVIYWNrcy5odG1sCi0gICAgbURlcHRo
VGV4dHVyZVN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFw
dGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEVVNB
R0VfREVQVEhTVEVOQ0lMLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfSU5UWikpICYmCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0
KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RDNEVVNBR0VfUkVOREVSVEFSR0VULCBEM0RSVFlQRV9TVVJGQUNFLCBEM0RGTVRfTlVMTCkpOwot
Ci0gICAgLy8gQ2hlY2sgMzIgYml0IGZsb2F0aW5nIHBvaW50IHRleHR1cmUgc3VwcG9ydAotICAg
IG1GbG9hdDMyRmlsdGVyU3VwcG9ydCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3Jt
YXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RV
U0FHRV9RVUVSWV9GSUxURVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfQTMyQjMy
RzMyUjMyRikpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1EM2Q5
LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5
TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1FVRVJZX0ZJTFRFUiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX0NVQkVU
RVhUVVJFLCBEM0RGTVRfQTMyQjMyRzMyUjMyRikpOwotCi0gICAgbUZsb2F0MzJSZW5kZXJTdXBw
b3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmlj
ZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9BMzJCMzJHMzJSMzJGKSkgJiYKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0
KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNB
R0VfUkVOREVSVEFSR0VULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfQ1VCRVRFWFRVUkUsIEQzREZNVF9BMzJC
MzJHMzJSMzJGKSk7Ci0KLSAgICBpZiAoIW1GbG9hdDMyRmlsdGVyU3VwcG9ydCAmJiAhbUZsb2F0
MzJSZW5kZXJTdXBwb3J0KQotICAgIHsKLSAgICAgICAgbUZsb2F0MzJUZXh0dXJlU3VwcG9ydCA9
IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBl
LCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9URVhU
VVJFLCBEM0RGTVRfQTMyQjMyRzMyUjMyRikpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2
aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZ
UEVfQ1VCRVRFWFRVUkUsIEQzREZNVF9BMzJCMzJHMzJSMzJGKSk7Ci0gICAgfQotICAgIGVsc2UK
LSAgICB7Ci0gICAgICAgIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQgPSB0cnVlOwotICAgIH0KLQot
ICAgIC8vIENoZWNrIDE2IGJpdCBmbG9hdGluZyBwb2ludCB0ZXh0dXJlIHN1cHBvcnQKLSAgICBt
RmxvYXQxNkZpbHRlclN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0
KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNB
R0VfUVVFUllfRklMVEVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0ExNkIxNkcx
NlIxNkYpKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+
Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1v
ZGUuRm9ybWF0LCBEM0RVU0FHRV9RVUVSWV9GSUxURVIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9DVUJFVEVY
VFVSRSwgRDNERk1UX0ExNkIxNkcxNlIxNkYpKTsKLQotICAgIG1GbG9hdDE2UmVuZGVyU3VwcG9y
dCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VU
eXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfQTE2QjE2RzE2UjE2RikpICYmCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdCht
QWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdF
X1JFTkRFUlRBUkdFVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX0NVQkVURVhUVVJFLCBEM0RGTVRfQTE2QjE2
RzE2UjE2RikpOwotCi0gICAgaWYgKCFtRmxvYXQxNkZpbHRlclN1cHBvcnQgJiYgIW1GbG9hdDE2
UmVuZGVyU3VwcG9ydCkKLSAgICB7Ci0gICAgICAgIG1GbG9hdDE2VGV4dHVyZVN1cHBvcnQgPSBT
VUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwg
Y3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfVEVYVFVS
RSwgRDNERk1UX0ExNkIxNkcxNlIxNkYpKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmlj
ZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBF
X0NVQkVURVhUVVJFLCBEM0RGTVRfQTE2QjE2RzE2UjE2RikpOwotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgICBtRmxvYXQxNlRleHR1cmVTdXBwb3J0ID0gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICAvLyBDaGVjayBEWFQgdGV4dHVyZSBzdXBwb3J0Ci0gICAgbURYVDFUZXh0dXJlU3VwcG9ydCA9
IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBl
LCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRf
RFhUMSkpOwotICAgIG1EWFQzVGV4dHVyZVN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNr
RGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZv
cm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0RYVDMpKTsKLSAgICBtRFhUNVRleHR1
cmVTdXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwg
bURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsIEQzRFJUWVBFX1RFWFRV
UkUsIEQzREZNVF9EWFQ1KSk7Ci0KLSAgICAvLyBDaGVjayBsdW1pbmFuY2VbYWxwaGFdIHRleHR1
cmUgc3VwcG9ydAotICAgIG1MdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCA9IFNVQ0NFRURFRChtRDNk
OS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxh
eU1vZGUuRm9ybWF0LCAwLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfTDgpKTsKLSAgICBtTHVt
aW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VG
b3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAw
LCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfQThMOCkpOwotCi0gICAgaW5pdGlhbGl6ZURldmlj
ZSgpOwotCi0gICAgcmV0dXJuIEVHTF9TVUNDRVNTOwotfQotCi0vLyBkbyBhbnkgb25lLXRpbWUg
ZGV2aWNlIGluaXRpYWxpemF0aW9uCi0vLyBOT1RFOiB0aGlzIGlzIGFsc28gbmVlZGVkIGFmdGVy
IGEgZGV2aWNlIGxvc3QvcmVzZXQKLS8vIHRvIHJlc2V0IHRoZSBzY2VuZSBzdGF0dXMgYW5kIGVu
c3VyZSB0aGUgZGVmYXVsdCBzdGF0ZXMgYXJlIHJlc2V0Lgotdm9pZCBSZW5kZXJlcjk6OmluaXRp
YWxpemVEZXZpY2UoKQotewotICAgIC8vIFBlcm1hbmVudCBub24tZGVmYXVsdCBzdGF0ZXMKLSAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19QT0lOVFNQUklURUVOQUJMRSwgVFJVRSk7
Ci0gICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfTEFTVFBJWEVMLCBGQUxTRSk7Ci0K
LSAgICBpZiAobURldmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJzaW9uID49IEQzRFBTX1ZFUlNJT04o
MywgMCkpCi0gICAgewotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19QT0lO
VFNJWkVfTUFYLCAoRFdPUkQmKW1EZXZpY2VDYXBzLk1heFBvaW50U2l6ZSk7Ci0gICAgfQotICAg
IGVsc2UKLSAgICB7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1BPSU5U
U0laRV9NQVgsIDB4M0Y4MDAwMDApOyAgIC8vIDEuMGYKLSAgICB9Ci0KLSAgICBtYXJrQWxsU3Rh
dGVEaXJ0eSgpOwotCi0gICAgbVNjZW5lU3RhcnRlZCA9IGZhbHNlOwotCi0gICAgQVNTRVJUKCFt
QmxpdCAmJiAhbVZlcnRleERhdGFNYW5hZ2VyICYmICFtSW5kZXhEYXRhTWFuYWdlcik7Ci0gICAg
bUJsaXQgPSBuZXcgQmxpdCh0aGlzKTsKLSAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBuZXcgcng6
OlZlcnRleERhdGFNYW5hZ2VyKHRoaXMpOwotICAgIG1JbmRleERhdGFNYW5hZ2VyID0gbmV3IHJ4
OjpJbmRleERhdGFNYW5hZ2VyKHRoaXMpOwotfQotCi1EM0RQUkVTRU5UX1BBUkFNRVRFUlMgUmVu
ZGVyZXI5OjpnZXREZWZhdWx0UHJlc2VudFBhcmFtZXRlcnMoKQotewotICAgIEQzRFBSRVNFTlRf
UEFSQU1FVEVSUyBwcmVzZW50UGFyYW1ldGVycyA9IHswfTsKLQotICAgIC8vIFRoZSBkZWZhdWx0
IHN3YXAgY2hhaW4gaXMgbmV2ZXIgYWN0dWFsbHkgdXNlZC4gU3VyZmFjZSB3aWxsIGNyZWF0ZSBh
IG5ldyBzd2FwIGNoYWluIHdpdGggdGhlIHByb3BlciBwYXJhbWV0ZXJzLgotICAgIHByZXNlbnRQ
YXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQgPSBEM0RGTVRfVU5LTk9XTjsKLSAgICBw
cmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyQ291bnQgPSAxOwotICAgIHByZXNlbnRQYXJhbWV0
ZXJzLkJhY2tCdWZmZXJGb3JtYXQgPSBEM0RGTVRfVU5LTk9XTjsKLSAgICBwcmVzZW50UGFyYW1l
dGVycy5CYWNrQnVmZmVyV2lkdGggPSAxOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZm
ZXJIZWlnaHQgPSAxOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkVuYWJsZUF1dG9EZXB0aFN0ZW5j
aWwgPSBGQUxTRTsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5GbGFncyA9IDA7Ci0gICAgcHJlc2Vu
dFBhcmFtZXRlcnMuaERldmljZVdpbmRvdyA9IG1EZXZpY2VXaW5kb3c7Ci0gICAgcHJlc2VudFBh
cmFtZXRlcnMuTXVsdGlTYW1wbGVRdWFsaXR5ID0gMDsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5N
dWx0aVNhbXBsZVR5cGUgPSBEM0RNVUxUSVNBTVBMRV9OT05FOwotICAgIHByZXNlbnRQYXJhbWV0
ZXJzLlByZXNlbnRhdGlvbkludGVydmFsID0gRDNEUFJFU0VOVF9JTlRFUlZBTF9ERUZBVUxUOwot
ICAgIHByZXNlbnRQYXJhbWV0ZXJzLlN3YXBFZmZlY3QgPSBEM0RTV0FQRUZGRUNUX0RJU0NBUkQ7
Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuV2luZG93ZWQgPSBUUlVFOwotCi0gICAgcmV0dXJuIHBy
ZXNlbnRQYXJhbWV0ZXJzOwotfQotCi1pbnQgUmVuZGVyZXI5OjpnZW5lcmF0ZUNvbmZpZ3MoQ29u
ZmlnRGVzYyAqKmNvbmZpZ0Rlc2NMaXN0KQotewotICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnRE
aXNwbGF5TW9kZTsKLSAgICBtRDNkOS0+R2V0QWRhcHRlckRpc3BsYXlNb2RlKG1BZGFwdGVyLCAm
Y3VycmVudERpc3BsYXlNb2RlKTsKLQotICAgIHVuc2lnbmVkIGludCBudW1SZW5kZXJGb3JtYXRz
ID0gQXJyYXlTaXplKFJlbmRlclRhcmdldEZvcm1hdHMpOwotICAgIHVuc2lnbmVkIGludCBudW1E
ZXB0aEZvcm1hdHMgPSBBcnJheVNpemUoRGVwdGhTdGVuY2lsRm9ybWF0cyk7Ci0gICAgKCpjb25m
aWdEZXNjTGlzdCkgPSBuZXcgQ29uZmlnRGVzY1tudW1SZW5kZXJGb3JtYXRzICogbnVtRGVwdGhG
b3JtYXRzXTsKLSAgICBpbnQgbnVtQ29uZmlncyA9IDA7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGlu
dCBmb3JtYXRJbmRleCA9IDA7IGZvcm1hdEluZGV4IDwgbnVtUmVuZGVyRm9ybWF0czsgZm9ybWF0
SW5kZXgrKykKLSAgICB7Ci0gICAgICAgIEQzREZPUk1BVCByZW5kZXJUYXJnZXRGb3JtYXQgPSBS
ZW5kZXJUYXJnZXRGb3JtYXRzW2Zvcm1hdEluZGV4XTsKLQotICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJl
bnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgRDNEUlRZUEVfU1VS
RkFDRSwgcmVuZGVyVGFyZ2V0Rm9ybWF0KTsKLQotICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3Vs
dCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGRlcHRoU3RlbmNp
bEluZGV4ID0gMDsgZGVwdGhTdGVuY2lsSW5kZXggPCBudW1EZXB0aEZvcm1hdHM7IGRlcHRoU3Rl
bmNpbEluZGV4KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRDNERk9STUFUIGRl
cHRoU3RlbmNpbEZvcm1hdCA9IERlcHRoU3RlbmNpbEZvcm1hdHNbZGVwdGhTdGVuY2lsSW5kZXhd
OwotICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gRDNEX09LOwotCi0gICAgICAgICAg
ICAgICAgaWYoZGVwdGhTdGVuY2lsRm9ybWF0ICE9IEQzREZNVF9VTktOT1dOKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbUQzZDktPkNoZWNrRGV2aWNl
Rm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwg
RDNEVVNBR0VfREVQVEhTVEVOQ0lMLCBEM0RSVFlQRV9TVVJGQUNFLCBkZXB0aFN0ZW5jaWxGb3Jt
YXQpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQo
cmVzdWx0KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmKGRlcHRo
U3RlbmNpbEZvcm1hdCAhPSBEM0RGTVRfVU5LTk9XTikKLSAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbUQzZDktPkNoZWNrRGVwdGhTdGVuY2ls
TWF0Y2gobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBy
ZW5kZXJUYXJnZXRGb3JtYXQsIGRlcHRoU3RlbmNpbEZvcm1hdCk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ0Rlc2MgbmV3
Q29uZmlnOwotICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLnJlbmRlclRhcmdldEZv
cm1hdCA9IGQzZDlfZ2w6OkNvbnZlcnRCYWNrQnVmZmVyRm9ybWF0KHJlbmRlclRhcmdldEZvcm1h
dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcuZGVwdGhTdGVuY2lsRm9ybWF0
ID0gZDNkOV9nbDo6Q29udmVydERlcHRoU3RlbmNpbEZvcm1hdChkZXB0aFN0ZW5jaWxGb3JtYXQp
OwotICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLm11bHRpU2FtcGxlID0gMDsgLy8g
RklYTUU6IGVudW1lcmF0ZSBtdWx0aS1zYW1wbGluZwotICAgICAgICAgICAgICAgICAgICAgICAg
bmV3Q29uZmlnLmZhc3RDb25maWcgPSAoY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCA9PSByZW5k
ZXJUYXJnZXRGb3JtYXQpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAoKmNvbmZpZ0Rlc2NM
aXN0KVtudW1Db25maWdzKytdID0gbmV3Q29uZmlnOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAg
cmV0dXJuIG51bUNvbmZpZ3M7Ci19Ci0KLXZvaWQgUmVuZGVyZXI5OjpkZWxldGVDb25maWdzKENv
bmZpZ0Rlc2MgKmNvbmZpZ0Rlc2NMaXN0KQotewotICAgIGRlbGV0ZSBbXSAoY29uZmlnRGVzY0xp
c3QpOwotfQotCi12b2lkIFJlbmRlcmVyOTo6c3RhcnRTY2VuZSgpCi17Ci0gICAgaWYgKCFtU2Nl
bmVTdGFydGVkKQotICAgIHsKLSAgICAgICAgbG9uZyByZXN1bHQgPSBtRGV2aWNlLT5CZWdpblNj
ZW5lKCk7Ci0gICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkgewotICAgICAgICAgICAgLy8g
VGhpcyBpcyBkZWZlbnNpdmUgY2hlY2tpbmcgYWdhaW5zdCB0aGUgZGV2aWNlIGJlaW5nCi0gICAg
ICAgICAgICAvLyBsb3N0IGF0IHVuZXhwZWN0ZWQgdGltZXMuCi0gICAgICAgICAgICBtU2NlbmVT
dGFydGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJlcjk6OmVu
ZFNjZW5lKCkKLXsKLSAgICBpZiAobVNjZW5lU3RhcnRlZCkKLSAgICB7Ci0gICAgICAgIC8vIEVu
ZFNjZW5lIGNhbiBmYWlsIGlmIHRoZSBkZXZpY2Ugd2FzIGxvc3QsIGZvciBleGFtcGxlIGR1ZQot
ICAgICAgICAvLyB0byBhIFREUiBkdXJpbmcgYSBkcmF3IGNhbGwuCi0gICAgICAgIG1EZXZpY2Ut
PkVuZFNjZW5lKCk7Ci0gICAgICAgIG1TY2VuZVN0YXJ0ZWQgPSBmYWxzZTsKLSAgICB9Ci19Ci0K
LXZvaWQgUmVuZGVyZXI5OjpzeW5jKGJvb2wgYmxvY2spCi17Ci0gICAgSFJFU1VMVCByZXN1bHQ7
Ci0KLSAgICBJRGlyZWN0M0RRdWVyeTkqIHF1ZXJ5ID0gYWxsb2NhdGVFdmVudFF1ZXJ5KCk7Ci0g
ICAgaWYgKCFxdWVyeSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICByZXN1
bHQgPSBxdWVyeS0+SXNzdWUoRDNESVNTVUVfRU5EKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOwotCi0gICAgZG8KLSAgICB7Ci0gICAgICAgIHJlc3VsdCA9IHF1ZXJ5LT5HZXREYXRh
KE5VTEwsIDAsIEQzREdFVERBVEFfRkxVU0gpOwotCi0gICAgICAgIGlmKGJsb2NrICYmIHJlc3Vs
dCA9PSBTX0ZBTFNFKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBLZWVwIHBvbGxpbmcsIGJ1
dCBhbGxvdyBvdGhlciB0aHJlYWRzIHRvIGRvIHNvbWV0aGluZyB1c2VmdWwgZmlyc3QKLSAgICAg
ICAgICAgIFNsZWVwKDApOwotICAgICAgICAgICAgLy8gZXhwbGljaXRseSBjaGVjayBmb3IgZGV2
aWNlIGxvc3MKLSAgICAgICAgICAgIC8vIHNvbWUgZHJpdmVycyBzZWVtIHRvIHJldHVybiBTX0ZB
TFNFIGV2ZW4gaWYgdGhlIGRldmljZSBpcyBsb3N0Ci0gICAgICAgICAgICAvLyBpbnN0ZWFkIG9m
IEQzREVSUl9ERVZJQ0VMT1NUIGxpa2UgdGhleSBzaG91bGQKLSAgICAgICAgICAgIGlmICh0ZXN0
RGV2aWNlTG9zdChmYWxzZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0
ID0gRDNERVJSX0RFVklDRUxPU1Q7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgd2hpbGUoYmxvY2sgJiYgcmVzdWx0ID09IFNfRkFMU0UpOwotCi0gICAgZnJlZUV2ZW50UXVl
cnkocXVlcnkpOwotCi0gICAgaWYgKGQzZDk6OmlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCi0g
ICAgewotICAgICAgICBub3RpZnlEZXZpY2VMb3N0KCk7Ci0gICAgfQotfQotCi1Td2FwQ2hhaW4g
KlJlbmRlcmVyOTo6Y3JlYXRlU3dhcENoYWluKEhXTkQgd2luZG93LCBIQU5ETEUgc2hhcmVIYW5k
bGUsIEdMZW51bSBiYWNrQnVmZmVyRm9ybWF0LCBHTGVudW0gZGVwdGhCdWZmZXJGb3JtYXQpCi17
Ci0gICAgcmV0dXJuIG5ldyByeDo6U3dhcENoYWluOSh0aGlzLCB3aW5kb3csIHNoYXJlSGFuZGxl
LCBiYWNrQnVmZmVyRm9ybWF0LCBkZXB0aEJ1ZmZlckZvcm1hdCk7Ci19Ci0KLUlEaXJlY3QzRFF1
ZXJ5OSogUmVuZGVyZXI5OjphbGxvY2F0ZUV2ZW50UXVlcnkoKQotewotICAgIElEaXJlY3QzRFF1
ZXJ5OSAqcXVlcnkgPSBOVUxMOwotCi0gICAgaWYgKG1FdmVudFF1ZXJ5UG9vbC5lbXB0eSgpKQot
ICAgIHsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVRdWVyeShEM0RR
VUVSWVRZUEVfRVZFTlQsICZxdWVyeSk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHF1ZXJ5ID0gbUV2ZW50UXVlcnlQ
b29sLmJhY2soKTsKLSAgICAgICAgbUV2ZW50UXVlcnlQb29sLnBvcF9iYWNrKCk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHF1ZXJ5OwotfQotCi12b2lkIFJlbmRlcmVyOTo6ZnJlZUV2ZW50UXVlcnko
SURpcmVjdDNEUXVlcnk5KiBxdWVyeSkKLXsKLSAgICBpZiAobUV2ZW50UXVlcnlQb29sLnNpemUo
KSA+IDEwMDApCi0gICAgewotICAgICAgICBxdWVyeS0+UmVsZWFzZSgpOwotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICBtRXZlbnRRdWVyeVBvb2wucHVzaF9iYWNrKHF1ZXJ5KTsKLSAg
ICB9Ci19Ci0KLUlEaXJlY3QzRFZlcnRleFNoYWRlcjkgKlJlbmRlcmVyOTo6Y3JlYXRlVmVydGV4
U2hhZGVyKGNvbnN0IERXT1JEICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCkKLXsKLSAgICByZXR1
cm4gbVZlcnRleFNoYWRlckNhY2hlLmNyZWF0ZShmdW5jdGlvbiwgbGVuZ3RoKTsKLX0KLQotSURp
cmVjdDNEUGl4ZWxTaGFkZXI5ICpSZW5kZXJlcjk6OmNyZWF0ZVBpeGVsU2hhZGVyKGNvbnN0IERX
T1JEICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCkKLXsKLSAgICByZXR1cm4gbVBpeGVsU2hhZGVy
Q2FjaGUuY3JlYXRlKGZ1bmN0aW9uLCBsZW5ndGgpOwotfQotCi1IUkVTVUxUIFJlbmRlcmVyOTo6
Y3JlYXRlVmVydGV4QnVmZmVyKFVJTlQgTGVuZ3RoLCBEV09SRCBVc2FnZSwgSURpcmVjdDNEVmVy
dGV4QnVmZmVyOSAqKnBwVmVydGV4QnVmZmVyKQotewotICAgIEQzRFBPT0wgUG9vbCA9IGdldEJ1
ZmZlclBvb2woVXNhZ2UpOwotICAgIHJldHVybiBtRGV2aWNlLT5DcmVhdGVWZXJ0ZXhCdWZmZXIo
TGVuZ3RoLCBVc2FnZSwgMCwgUG9vbCwgcHBWZXJ0ZXhCdWZmZXIsIE5VTEwpOwotfQotCi1WZXJ0
ZXhCdWZmZXIgKlJlbmRlcmVyOTo6Y3JlYXRlVmVydGV4QnVmZmVyKCkKLXsKLSAgICByZXR1cm4g
bmV3IFZlcnRleEJ1ZmZlcjkodGhpcyk7Ci19Ci0KLUhSRVNVTFQgUmVuZGVyZXI5OjpjcmVhdGVJ
bmRleEJ1ZmZlcihVSU5UIExlbmd0aCwgRFdPUkQgVXNhZ2UsIEQzREZPUk1BVCBGb3JtYXQsIElE
aXJlY3QzREluZGV4QnVmZmVyOSAqKnBwSW5kZXhCdWZmZXIpCi17Ci0gICAgRDNEUE9PTCBQb29s
ID0gZ2V0QnVmZmVyUG9vbChVc2FnZSk7Ci0gICAgcmV0dXJuIG1EZXZpY2UtPkNyZWF0ZUluZGV4
QnVmZmVyKExlbmd0aCwgVXNhZ2UsIEZvcm1hdCwgUG9vbCwgcHBJbmRleEJ1ZmZlciwgTlVMTCk7
Ci19Ci0KLUluZGV4QnVmZmVyICpSZW5kZXJlcjk6OmNyZWF0ZUluZGV4QnVmZmVyKCkKLXsKLSAg
ICByZXR1cm4gbmV3IEluZGV4QnVmZmVyOSh0aGlzKTsKLX0KLQotQnVmZmVyU3RvcmFnZSAqUmVu
ZGVyZXI5OjpjcmVhdGVCdWZmZXJTdG9yYWdlKCkKLXsKLSAgICByZXR1cm4gbmV3IEJ1ZmZlclN0
b3JhZ2U5KCk7Ci19Ci0KLVF1ZXJ5SW1wbCAqUmVuZGVyZXI5OjpjcmVhdGVRdWVyeShHTGVudW0g
dHlwZSkKLXsKLSAgICByZXR1cm4gbmV3IFF1ZXJ5OSh0aGlzLCB0eXBlKTsKLX0KLQotRmVuY2VJ
bXBsICpSZW5kZXJlcjk6OmNyZWF0ZUZlbmNlKCkKLXsKLSAgICByZXR1cm4gbmV3IEZlbmNlOSh0
aGlzKTsKLX0KLQotdm9pZCBSZW5kZXJlcjk6OnNldFNhbXBsZXJTdGF0ZShnbDo6U2FtcGxlclR5
cGUgdHlwZSwgaW50IGluZGV4LCBjb25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUp
Ci17Ci0gICAgYm9vbCAqZm9yY2VTZXRTYW1wbGVycyA9ICh0eXBlID09IGdsOjpTQU1QTEVSX1BJ
WEVMKSA/IG1Gb3JjZVNldFBpeGVsU2FtcGxlclN0YXRlcyA6IG1Gb3JjZVNldFZlcnRleFNhbXBs
ZXJTdGF0ZXM7Ci0gICAgZ2w6OlNhbXBsZXJTdGF0ZSAqYXBwbGllZFNhbXBsZXJzID0gKHR5cGUg
PT0gZ2w6OlNBTVBMRVJfUElYRUwpID8gbUN1clBpeGVsU2FtcGxlclN0YXRlczogbUN1clZlcnRl
eFNhbXBsZXJTdGF0ZXM7Ci0KLSAgICBpZiAoZm9yY2VTZXRTYW1wbGVyc1tpbmRleF0gfHwgbWVt
Y21wKCZzYW1wbGVyU3RhdGUsICZhcHBsaWVkU2FtcGxlcnNbaW5kZXhdLCBzaXplb2YoZ2w6OlNh
bXBsZXJTdGF0ZSkpICE9IDApCi0gICAgewotICAgICAgICBpbnQgZDNkU2FtcGxlck9mZnNldCA9
ICh0eXBlID09IGdsOjpTQU1QTEVSX1BJWEVMKSA/IDAgOiBEM0RWRVJURVhURVhUVVJFU0FNUExF
UjA7Ci0gICAgICAgIGludCBkM2RTYW1wbGVyID0gaW5kZXggKyBkM2RTYW1wbGVyT2Zmc2V0Owot
Ci0gICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX0FE
RFJFU1NVLCBnbF9kM2Q5OjpDb252ZXJ0VGV4dHVyZVdyYXAoc2FtcGxlclN0YXRlLndyYXBTKSk7
Ci0gICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX0FE
RFJFU1NWLCBnbF9kM2Q5OjpDb252ZXJ0VGV4dHVyZVdyYXAoc2FtcGxlclN0YXRlLndyYXBUKSk7
Ci0KLSAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBf
TUFHRklMVEVSLCBnbF9kM2Q5OjpDb252ZXJ0TWFnRmlsdGVyKHNhbXBsZXJTdGF0ZS5tYWdGaWx0
ZXIsIHNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5KSk7Ci0gICAgICAgIEQzRFRFWFRVUkVGSUxU
RVJUWVBFIGQzZE1pbkZpbHRlciwgZDNkTWlwRmlsdGVyOwotICAgICAgICBnbF9kM2Q5OjpDb252
ZXJ0TWluRmlsdGVyKHNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIsICZkM2RNaW5GaWx0ZXIsICZkM2RN
aXBGaWx0ZXIsIHNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5KTsKLSAgICAgICAgbURldmljZS0+
U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUlORklMVEVSLCBkM2RNaW5GaWx0
ZXIpOwotICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FN
UF9NSVBGSUxURVIsIGQzZE1pcEZpbHRlcik7Ci0gICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJT
dGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01BWE1JUExFVkVMLCBzYW1wbGVyU3RhdGUubG9kT2Zm
c2V0KTsKLSAgICAgICAgaWYgKG1TdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwg
RDNEU0FNUF9NQVhBTklTT1RST1BZLCAoRFdPUkQpc2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHkp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yY2VTZXRTYW1wbGVyc1tpbmRleF0gPSBmYWxz
ZTsKLSAgICBhcHBsaWVkU2FtcGxlcnNbaW5kZXhdID0gc2FtcGxlclN0YXRlOwotfQotCi12b2lk
IFJlbmRlcmVyOTo6c2V0VGV4dHVyZShnbDo6U2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBn
bDo6VGV4dHVyZSAqdGV4dHVyZSkKLXsKLSAgICBpbnQgZDNkU2FtcGxlck9mZnNldCA9ICh0eXBl
ID09IGdsOjpTQU1QTEVSX1BJWEVMKSA/IDAgOiBEM0RWRVJURVhURVhUVVJFU0FNUExFUjA7Ci0g
ICAgaW50IGQzZFNhbXBsZXIgPSBpbmRleCArIGQzZFNhbXBsZXJPZmZzZXQ7Ci0gICAgSURpcmVj
dDNEQmFzZVRleHR1cmU5ICpkM2RUZXh0dXJlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBpbnQgc2Vy
aWFsID0gMDsKLSAgICBib29sIGZvcmNlU2V0VGV4dHVyZSA9IGZhbHNlOwotCi0gICAgdW5zaWdu
ZWQgaW50ICphcHBsaWVkU2VyaWFscyA9ICh0eXBlID09IGdsOjpTQU1QTEVSX1BJWEVMKSA/IG1D
dXJQaXhlbFRleHR1cmVTZXJpYWxzIDogbUN1clZlcnRleFRleHR1cmVTZXJpYWxzOwotCi0gICAg
aWYgKHRleHR1cmUpCi0gICAgewotICAgICAgICBUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqdGV4
U3RvcmFnZSA9IHRleHR1cmUtPmdldE5hdGl2ZVRleHR1cmUoKTsKLSAgICAgICAgaWYgKHRleFN0
b3JhZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFRleHR1cmVTdG9yYWdlOSAqc3RvcmFnZTkg
PSBUZXh0dXJlU3RvcmFnZTk6Om1ha2VUZXh0dXJlU3RvcmFnZTkodGV4U3RvcmFnZS0+Z2V0U3Rv
cmFnZUluc3RhbmNlKCkpOwotICAgICAgICAgICAgZDNkVGV4dHVyZSA9IHN0b3JhZ2U5LT5nZXRC
YXNlVGV4dHVyZSgpOwotICAgICAgICB9Ci0gICAgICAgIC8vIElmIHdlIGdldCBOVUxMIGJhY2sg
ZnJvbSBnZXRCYXNlVGV4dHVyZSBoZXJlLCBzb21ldGhpbmcgd2VudCB3cm9uZwotICAgICAgICAv
LyBpbiB0aGUgdGV4dHVyZSBjbGFzcyBhbmQgd2UncmUgdW5leHBlY3RlZGx5IG1pc3NpbmcgdGhl
IGQzZCB0ZXh0dXJlCi0gICAgICAgIEFTU0VSVChkM2RUZXh0dXJlICE9IE5VTEwpOwotCi0gICAg
ICAgIHNlcmlhbCA9IHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKTsKLSAgICAgICAgZm9yY2VT
ZXRUZXh0dXJlID0gdGV4dHVyZS0+aGFzRGlydHlJbWFnZXMoKTsKLSAgICB9Ci0KLSAgICBpZiAo
Zm9yY2VTZXRUZXh0dXJlIHx8IGFwcGxpZWRTZXJpYWxzW2luZGV4XSAhPSBzZXJpYWwpCi0gICAg
ewotICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlKGQzZFNhbXBsZXIsIGQzZFRleHR1cmUpOwot
ICAgIH0KLQotICAgIGFwcGxpZWRTZXJpYWxzW2luZGV4XSA9IHNlcmlhbDsKLX0KLQotdm9pZCBS
ZW5kZXJlcjk6OnNldFJhc3Rlcml6ZXJTdGF0ZShjb25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZy
YXN0ZXJTdGF0ZSkKLXsKLSAgICBib29sIHJhc3RlclN0YXRlQ2hhbmdlZCA9IG1Gb3JjZVNldFJh
c3RlclN0YXRlIHx8IG1lbWNtcCgmcmFzdGVyU3RhdGUsICZtQ3VyUmFzdGVyU3RhdGUsIHNpemVv
ZihnbDo6UmFzdGVyaXplclN0YXRlKSkgIT0gMDsKLQotICAgIGlmIChyYXN0ZXJTdGF0ZUNoYW5n
ZWQpCi0gICAgewotICAgICAgICAvLyBTZXQgdGhlIGN1bGwgbW9kZQotICAgICAgICBpZiAocmFz
dGVyU3RhdGUuY3VsbEZhY2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBnbF9kM2Q5OjpDb252ZXJ0Q3VsbE1vZGUocmFzdGVy
U3RhdGUuY3VsbE1vZGUsIHJhc3RlclN0YXRlLmZyb250RmFjZSkpOwotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfQ1VMTE1PREUsIEQzRENVTExfTk9ORSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
cmFzdGVyU3RhdGUucG9seWdvbk9mZnNldEZpbGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChtQ3VyRGVwdGhTaXplID4gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TTE9QRVNDQUxFREVQVEhCSUFTLCAqKERXT1JEKikm
cmFzdGVyU3RhdGUucG9seWdvbk9mZnNldEZhY3Rvcik7Ci0KLSAgICAgICAgICAgICAgICBmbG9h
dCBkZXB0aEJpYXMgPSBsZGV4cChyYXN0ZXJTdGF0ZS5wb2x5Z29uT2Zmc2V0VW5pdHMsIC1zdGF0
aWNfY2FzdDxpbnQ+KG1DdXJEZXB0aFNpemUpKTsKLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19ERVBUSEJJQVMsICooRFdPUkQqKSZkZXB0aEJpYXMpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0xPUEVTQ0FMRURFUFRIQklBUywgMCk7
Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ERVBUSEJJQVMsIDAp
OwotICAgICAgICB9Ci0KLSAgICAgICAgbUN1clJhc3RlclN0YXRlID0gcmFzdGVyU3RhdGU7Ci0g
ICAgfQotCi0gICAgbUZvcmNlU2V0UmFzdGVyU3RhdGUgPSBmYWxzZTsKLX0KLQotdm9pZCBSZW5k
ZXJlcjk6OnNldEJsZW5kU3RhdGUoY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNv
bnN0IGdsOjpDb2xvciAmYmxlbmRDb2xvciwgdW5zaWduZWQgaW50IHNhbXBsZU1hc2spCi17Ci0g
ICAgYm9vbCBibGVuZFN0YXRlQ2hhbmdlZCA9IG1Gb3JjZVNldEJsZW5kU3RhdGUgfHwgbWVtY21w
KCZibGVuZFN0YXRlLCAmbUN1ckJsZW5kU3RhdGUsIHNpemVvZihnbDo6QmxlbmRTdGF0ZSkpICE9
IDA7Ci0gICAgYm9vbCBibGVuZENvbG9yQ2hhbmdlZCA9IG1Gb3JjZVNldEJsZW5kU3RhdGUgfHwg
bWVtY21wKCZibGVuZENvbG9yLCAmbUN1ckJsZW5kQ29sb3IsIHNpemVvZihnbDo6Q29sb3IpKSAh
PSAwOwotICAgIGJvb2wgc2FtcGxlTWFza0NoYW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0YXRlIHx8
IHNhbXBsZU1hc2sgIT0gbUN1clNhbXBsZU1hc2s7Ci0KLSAgICBpZiAoYmxlbmRTdGF0ZUNoYW5n
ZWQgfHwgYmxlbmRDb2xvckNoYW5nZWQpCi0gICAgewotICAgICAgICBpZiAoYmxlbmRTdGF0ZS5i
bGVuZCkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7Ci0KLSAgICAgICAgICAgIGlmIChibGVuZFN0YXRl
LnNvdXJjZUJsZW5kUkdCICE9IEdMX0NPTlNUQU5UX0FMUEhBICYmIGJsZW5kU3RhdGUuc291cmNl
QmxlbmRSR0IgIT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBICYmCi0gICAgICAgICAgICAg
ICAgYmxlbmRTdGF0ZS5kZXN0QmxlbmRSR0IgIT0gR0xfQ09OU1RBTlRfQUxQSEEgJiYgYmxlbmRT
dGF0ZS5kZXN0QmxlbmRSR0IgIT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JM
RU5ERkFDVE9SLCBnbF9kM2Q5OjpDb252ZXJ0Q29sb3IoYmxlbmRDb2xvcikpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JMRU5ERkFDVE9SLCBEM0RDT0xPUl9SR0JBKGds
Ojp1bm9ybTw4PihibGVuZENvbG9yLmFscGhhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08
OD4oYmxlbmRDb2xvci5hbHBoYSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGJsZW5k
Q29sb3IuYWxwaGEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4PihibGVuZENvbG9yLmFs
cGhhKSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19TUkNCTEVORCwgZ2xfZDNkOTo6Q29udmVydEJsZW5kRnVuYyhibGVuZFN0YXRl
LnNvdXJjZUJsZW5kUkdCKSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19ERVNUQkxFTkQsIGdsX2QzZDk6OkNvbnZlcnRCbGVuZEZ1bmMoYmxlbmRTdGF0ZS5kZXN0
QmxlbmRSR0IpKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JM
RU5ET1AsIGdsX2QzZDk6OkNvbnZlcnRCbGVuZE9wKGJsZW5kU3RhdGUuYmxlbmRFcXVhdGlvblJH
QikpOwotCi0gICAgICAgICAgICBpZiAoYmxlbmRTdGF0ZS5zb3VyY2VCbGVuZFJHQiAhPSBibGVu
ZFN0YXRlLnNvdXJjZUJsZW5kQWxwaGEgfHwKLSAgICAgICAgICAgICAgICBibGVuZFN0YXRlLmRl
c3RCbGVuZFJHQiAhPSBibGVuZFN0YXRlLmRlc3RCbGVuZEFscGhhIHx8Ci0gICAgICAgICAgICAg
ICAgYmxlbmRTdGF0ZS5ibGVuZEVxdWF0aW9uUkdCICE9IGJsZW5kU3RhdGUuYmxlbmRFcXVhdGlv
bkFscGhhKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX1NFUEFSQVRFQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7Ci0KLSAgICAgICAg
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TUkNCTEVOREFMUEhBLCBnbF9k
M2Q5OjpDb252ZXJ0QmxlbmRGdW5jKGJsZW5kU3RhdGUuc291cmNlQmxlbmRBbHBoYSkpOwotICAg
ICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RFU1RCTEVOREFMUEhB
LCBnbF9kM2Q5OjpDb252ZXJ0QmxlbmRGdW5jKGJsZW5kU3RhdGUuZGVzdEJsZW5kQWxwaGEpKTsK
LSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVORE9QQUxQ
SEEsIGdsX2QzZDk6OkNvbnZlcnRCbGVuZE9wKGJsZW5kU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhh
KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJM
RU5ERU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19B
TFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYmxlbmRT
dGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEZJWE1F
KCJTYW1wbGUgYWxwaGEgdG8gY292ZXJhZ2UgaXMgdW5pbXBsZW1lbnRlZC4iKTsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vIFNldCB0aGUgY29sb3IgbWFzawotICAgICAgICBib29sIHplcm9Db2xv
ck1hc2tBbGxvd2VkID0gZ2V0QWRhcHRlclZlbmRvcigpICE9IFZFTkRPUl9JRF9BTUQ7Ci0gICAg
ICAgIC8vIEFwcGFyZW50bHkgc29tZSBBVEkgY2FyZHMgaGF2ZSBhIGJ1ZyB3aGVyZSBhIGRyYXcg
d2l0aCBhIHplcm8gY29sb3IKLSAgICAgICAgLy8gd3JpdGUgbWFzayBjYW4gY2F1c2UgbGF0ZXIg
ZHJhd3MgdG8gaGF2ZSBpbmNvcnJlY3QgcmVzdWx0cy4gSW5zdGVhZCwKLSAgICAgICAgLy8gc2V0
IGEgbm9uemVybyBjb2xvciB3cml0ZSBtYXNrIGJ1dCBtb2RpZnkgdGhlIGJsZW5kIHN0YXRlIHNv
IHRoYXQgbm8KLSAgICAgICAgLy8gZHJhd2luZyBpcyBkb25lLgotICAgICAgICAvLyBodHRwOi8v
Y29kZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0L2lzc3Vlcy9kZXRhaWw/aWQ9MTY5Ci0KLSAg
ICAgICAgRFdPUkQgY29sb3JNYXNrID0gZ2xfZDNkOTo6Q29udmVydENvbG9yTWFzayhibGVuZFN0
YXRlLmNvbG9yTWFza1JlZCwgYmxlbmRTdGF0ZS5jb2xvck1hc2tHcmVlbiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGVuZFN0YXRlLmNvbG9y
TWFza0JsdWUsIGJsZW5kU3RhdGUuY29sb3JNYXNrQWxwaGEpOwotICAgICAgICBpZiAoY29sb3JN
YXNrID09IDAgJiYgIXplcm9Db2xvck1hc2tBbGxvd2VkKQotICAgICAgICB7Ci0gICAgICAgICAg
ICAvLyBFbmFibGUgZ3JlZW4gY2hhbm5lbCwgYnV0IHNldCBibGVuZGluZyBzbyBub3RoaW5nIHdp
bGwgYmUgZHJhd24uCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19D
T0xPUldSSVRFRU5BQkxFLCBEM0RDT0xPUldSSVRFRU5BQkxFX0dSRUVOKTsKLSAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOwot
Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TUkNCTEVORCwgRDNE
QkxFTkRfWkVSTyk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19E
RVNUQkxFTkQsIEQzREJMRU5EX09ORSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19CTEVORE9QLCBEM0RCTEVORE9QX0FERCk7Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19DT0xPUldSSVRFRU5BQkxFLCBjb2xvck1hc2spOwotICAgICAgICB9Ci0KLSAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfRElUSEVSRU5BQkxFLCBibGVuZFN0YXRlLmRpdGhl
ciA/IFRSVUUgOiBGQUxTRSk7Ci0KLSAgICAgICAgbUN1ckJsZW5kU3RhdGUgPSBibGVuZFN0YXRl
OwotICAgICAgICBtQ3VyQmxlbmRDb2xvciA9IGJsZW5kQ29sb3I7Ci0gICAgfQotCi0gICAgaWYg
KHNhbXBsZU1hc2tDaGFuZ2VkKQotICAgIHsKLSAgICAgICAgLy8gU2V0IHRoZSBtdWx0aXNhbXBs
ZSBtYXNrCi0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExF
QU5USUFMSUFTLCBUUlVFKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
TVVMVElTQU1QTEVNQVNLLCBzdGF0aWNfY2FzdDxEV09SRD4oc2FtcGxlTWFzaykpOwotCi0gICAg
ICAgIG1DdXJTYW1wbGVNYXNrID0gc2FtcGxlTWFzazsKLSAgICB9Ci0KLSAgICBtRm9yY2VTZXRC
bGVuZFN0YXRlID0gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyZXI5OjpzZXREZXB0aFN0ZW5jaWxT
dGF0ZShjb25zdCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmRlcHRoU3RlbmNpbFN0YXRlLCBpbnQg
c3RlbmNpbFJlZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3Rl
bmNpbEJhY2tSZWYsIGJvb2wgZnJvbnRGYWNlQ0NXKQotewotICAgIGJvb2wgZGVwdGhTdGVuY2ls
U3RhdGVDaGFuZ2VkID0gbUZvcmNlU2V0RGVwdGhTdGVuY2lsU3RhdGUgfHwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNtcCgmZGVwdGhTdGVuY2lsU3RhdGUsICZtQ3Vy
RGVwdGhTdGVuY2lsU3RhdGUsIHNpemVvZihnbDo6RGVwdGhTdGVuY2lsU3RhdGUpKSAhPSAwOwot
ICAgIGJvb2wgc3RlbmNpbFJlZkNoYW5nZWQgPSBtRm9yY2VTZXREZXB0aFN0ZW5jaWxTdGF0ZSB8
fCBzdGVuY2lsUmVmICE9IG1DdXJTdGVuY2lsUmVmIHx8Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZW5jaWxCYWNrUmVmICE9IG1DdXJTdGVuY2lsQmFja1JlZjsKLSAgICBib29sIGZy
b250RmFjZUNDV0NoYW5nZWQgPSBtRm9yY2VTZXREZXB0aFN0ZW5jaWxTdGF0ZSB8fCBmcm9udEZh
Y2VDQ1cgIT0gbUN1ckZyb250RmFjZUNDVzsKLQotICAgIGlmIChkZXB0aFN0ZW5jaWxTdGF0ZUNo
YW5nZWQpCi0gICAgewotICAgICAgICBpZiAoZGVwdGhTdGVuY2lsU3RhdGUuZGVwdGhUZXN0KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5B
QkxFLCBEM0RaQl9UUlVFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX1pGVU5DLCBnbF9kM2Q5OjpDb252ZXJ0Q29tcGFyaXNvbihkZXB0aFN0ZW5jaWxTdGF0ZS5k
ZXB0aEZ1bmMpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEQzRFpCX0ZBTFNFKTsK
LSAgICAgICAgfQotCi0gICAgICAgIG1DdXJEZXB0aFN0ZW5jaWxTdGF0ZSA9IGRlcHRoU3RlbmNp
bFN0YXRlOwotICAgIH0KLQotICAgIGlmIChkZXB0aFN0ZW5jaWxTdGF0ZUNoYW5nZWQgfHwgc3Rl
bmNpbFJlZkNoYW5nZWQgfHwgZnJvbnRGYWNlQ0NXQ2hhbmdlZCkKLSAgICB7Ci0gICAgICAgIGlm
IChkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsVGVzdCAmJiBtQ3VyU3RlbmNpbFNpemUgPiAwKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVO
Q0lMRU5BQkxFLCBUUlVFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX1RXT1NJREVEU1RFTkNJTE1PREUsIFRSVUUpOwotCi0gICAgICAgICAgICAvLyBGSVhNRTog
VW5zdXBwb3J0ZWQgYnkgRDNEOQotICAgICAgICAgICAgY29uc3QgRDNEUkVOREVSU1RBVEVUWVBF
IEQzRFJTX0NDV19TVEVOQ0lMUkVGID0gRDNEUlNfU1RFTkNJTFJFRjsKLSAgICAgICAgICAgIGNv
bnN0IEQzRFJFTkRFUlNUQVRFVFlQRSBEM0RSU19DQ1dfU1RFTkNJTE1BU0sgPSBEM0RSU19TVEVO
Q0lMTUFTSzsKLSAgICAgICAgICAgIGNvbnN0IEQzRFJFTkRFUlNUQVRFVFlQRSBEM0RSU19DQ1df
U1RFTkNJTFdSSVRFTUFTSyA9IEQzRFJTX1NURU5DSUxXUklURU1BU0s7Ci0gICAgICAgICAgICBp
ZiAoZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbFdyaXRlbWFzayAhPSBkZXB0aFN0ZW5jaWxTdGF0
ZS5zdGVuY2lsQmFja1dyaXRlbWFzayB8fAotICAgICAgICAgICAgICAgIHN0ZW5jaWxSZWYgIT0g
c3RlbmNpbEJhY2tSZWYgfHwKLSAgICAgICAgICAgICAgICBkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVu
Y2lsTWFzayAhPSBkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsQmFja01hc2spCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgRVJSKCJTZXBhcmF0ZSBmcm9udC9iYWNrIHN0ZW5jaWwgd3Jp
dGVtYXNrcywgcmVmZXJlbmNlIHZhbHVlcywgb3Igc3RlbmNpbCBtYXNrIHZhbHVlcyBhcmUgaW52
YWxpZCB1bmRlciBXZWJHTC4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gZ2V0
IHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIHN0ZW5jaWwgcmVmCi0gICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgbWF4U3RlbmNpbCA9ICgxIDw8IG1DdXJTdGVuY2lsU2l6ZSkgLSAxOwotCi0gICAgICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShmcm9udEZhY2VDQ1cgPyBEM0RSU19TVEVOQ0lM
V1JJVEVNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxXUklURU1BU0ssCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsV3JpdGVtYXNrKTsK
LSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGZyb250RmFjZUNDVyA/IEQzRFJT
X1NURU5DSUxGVU5DIDogRDNEUlNfQ0NXX1NURU5DSUxGVU5DLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6Q29udmVydENvbXBhcmlzb24oZGVwdGhTdGVuY2ls
U3RhdGUuc3RlbmNpbEZ1bmMpKTsKLQotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoZnJvbnRGYWNlQ0NXID8gRDNEUlNfU1RFTkNJTFJFRiA6IEQzRFJTX0NDV19TVEVOQ0lMUkVG
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0ZW5jaWxSZWYgPCAoaW50
KW1heFN0ZW5jaWwpID8gc3RlbmNpbFJlZiA6IG1heFN0ZW5jaWwpOwotICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoZnJvbnRGYWNlQ0NXID8gRDNEUlNfU1RFTkNJTE1BU0sgOiBE
M0RSU19DQ1dfU1RFTkNJTE1BU0ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsTWFzayk7Ci0KLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKGZyb250RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxGQUlMIDogRDNEUlNf
Q0NXX1NURU5DSUxGQUlMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xf
ZDNkOTo6Q29udmVydFN0ZW5jaWxPcChkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsRmFpbCkpOwot
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoZnJvbnRGYWNlQ0NXID8gRDNEUlNf
U1RFTkNJTFpGQUlMIDogRDNEUlNfQ0NXX1NURU5DSUxaRkFJTCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRTdGVuY2lsT3AoZGVwdGhTdGVuY2ls
U3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwpKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKGZyb250RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxQQVNTIDogRDNEUlNfQ0NXX1NU
RU5DSUxQQVNTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6
Q29udmVydFN0ZW5jaWxPcChkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsUGFzc0RlcHRoUGFzcykp
OwotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZSghZnJvbnRGYWNlQ0NXID8g
RDNEUlNfU1RFTkNJTFdSSVRFTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMV1JJVEVNQVNLLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNp
bEJhY2tXcml0ZW1hc2spOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoIWZy
b250RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxGVU5DIDogRDNEUlNfQ0NXX1NURU5DSUxGVU5DLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6Q29udmVydENvbXBh
cmlzb24oZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbEJhY2tGdW5jKSk7Ci0KLSAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKCFmcm9udEZhY2VDQ1cgPyBEM0RSU19TVEVOQ0lMUkVG
IDogRDNEUlNfQ0NXX1NURU5DSUxSRUYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoc3RlbmNpbEJhY2tSZWYgPCAoaW50KW1heFN0ZW5jaWwpID8gc3RlbmNpbEJhY2tSZWYg
OiBtYXhTdGVuY2lsKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKCFmcm9u
dEZhY2VDQ1cgPyBEM0RSU19TVEVOQ0lMTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMTUFTSywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5j
aWxCYWNrTWFzayk7Ci0KLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKCFmcm9u
dEZhY2VDQ1cgPyBEM0RSU19TVEVOQ0lMRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMRkFJTCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRTdGVuY2ls
T3AoZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbEJhY2tGYWlsKSk7Ci0gICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZSghZnJvbnRGYWNlQ0NXID8gRDNEUlNfU1RFTkNJTFpGQUlMIDog
RDNEUlNfQ0NXX1NURU5DSUxaRkFJTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsX2QzZDk6OkNvbnZlcnRTdGVuY2lsT3AoZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbEJh
Y2tQYXNzRGVwdGhGYWlsKSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZSgh
ZnJvbnRGYWNlQ0NXID8gRDNEUlNfU1RFTkNJTFBBU1MgOiBEM0RSU19DQ1dfU1RFTkNJTFBBU1Ms
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9kM2Q5OjpDb252ZXJ0U3Rl
bmNpbE9wKGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcykpOwotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRFRU5BQkxFLCBkZXB0aFN0
ZW5jaWxTdGF0ZS5kZXB0aE1hc2sgPyBUUlVFIDogRkFMU0UpOwotCi0gICAgICAgIG1DdXJTdGVu
Y2lsUmVmID0gc3RlbmNpbFJlZjsKLSAgICAgICAgbUN1clN0ZW5jaWxCYWNrUmVmID0gc3RlbmNp
bEJhY2tSZWY7Ci0gICAgICAgIG1DdXJGcm9udEZhY2VDQ1cgPSBmcm9udEZhY2VDQ1c7Ci0gICAg
fQotCi0gICAgbUZvcmNlU2V0RGVwdGhTdGVuY2lsU3RhdGUgPSBmYWxzZTsKLX0KLQotdm9pZCBS
ZW5kZXJlcjk6OnNldFNjaXNzb3JSZWN0YW5nbGUoY29uc3QgZ2w6OlJlY3RhbmdsZSAmc2Npc3Nv
ciwgYm9vbCBlbmFibGVkKQotewotICAgIGJvb2wgc2Npc3NvckNoYW5nZWQgPSBtRm9yY2VTZXRT
Y2lzc29yIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNtcCgmc2Npc3NvciwgJm1D
dXJTY2lzc29yLCBzaXplb2YoZ2w6OlJlY3RhbmdsZSkpICE9IDAgfHwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgZW5hYmxlZCAhPSBtU2Npc3NvckVuYWJsZWQ7Ci0KLSAgICBpZiAoc2Npc3Nv
ckNoYW5nZWQpCi0gICAgewotICAgICAgICBpZiAoZW5hYmxlZCkKLSAgICAgICAgewotICAgICAg
ICAgICAgUkVDVCByZWN0OwotICAgICAgICAgICAgcmVjdC5sZWZ0ID0gZ2w6OmNsYW1wKHNjaXNz
b3IueCwgMCwgc3RhdGljX2Nhc3Q8aW50PihtUmVuZGVyVGFyZ2V0RGVzYy53aWR0aCkpOwotICAg
ICAgICAgICAgcmVjdC50b3AgPSBnbDo6Y2xhbXAoc2Npc3Nvci55LCAwLCBzdGF0aWNfY2FzdDxp
bnQ+KG1SZW5kZXJUYXJnZXREZXNjLmhlaWdodCkpOwotICAgICAgICAgICAgcmVjdC5yaWdodCA9
IGdsOjpjbGFtcChzY2lzc29yLnggKyBzY2lzc29yLndpZHRoLCAwLCBzdGF0aWNfY2FzdDxpbnQ+
KG1SZW5kZXJUYXJnZXREZXNjLndpZHRoKSk7Ci0gICAgICAgICAgICByZWN0LmJvdHRvbSA9IGds
OjpjbGFtcChzY2lzc29yLnkgKyBzY2lzc29yLmhlaWdodCwgMCwgc3RhdGljX2Nhc3Q8aW50Piht
UmVuZGVyVGFyZ2V0RGVzYy5oZWlnaHQpKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFNjaXNz
b3JSZWN0KCZyZWN0KTsKLSAgICAgICAgfQotCi0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1NDSVNTT1JURVNURU5BQkxFLCBlbmFibGVkID8gVFJVRSA6IEZBTFNFKTsKLQot
ICAgICAgICBtU2Npc3NvckVuYWJsZWQgPSBlbmFibGVkOwotICAgICAgICBtQ3VyU2Npc3NvciA9
IHNjaXNzb3I7Ci0gICAgfQotCi0gICAgbUZvcmNlU2V0U2Npc3NvciA9IGZhbHNlOwotfQotCi1i
b29sIFJlbmRlcmVyOTo6c2V0Vmlld3BvcnQoY29uc3QgZ2w6OlJlY3RhbmdsZSAmdmlld3BvcnQs
IGZsb2F0IHpOZWFyLCBmbG9hdCB6RmFyLCBHTGVudW0gZHJhd01vZGUsIEdMZW51bSBmcm9udEZh
Y2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpZ25vcmVWaWV3cG9ydCkKLXsK
LSAgICBnbDo6UmVjdGFuZ2xlIGFjdHVhbFZpZXdwb3J0ID0gdmlld3BvcnQ7Ci0gICAgZmxvYXQg
YWN0dWFsWk5lYXIgPSBnbDo6Y2xhbXAwMSh6TmVhcik7Ci0gICAgZmxvYXQgYWN0dWFsWkZhciA9
IGdsOjpjbGFtcDAxKHpGYXIpOwotICAgIGlmIChpZ25vcmVWaWV3cG9ydCkKLSAgICB7Ci0gICAg
ICAgIGFjdHVhbFZpZXdwb3J0LnggPSAwOwotICAgICAgICBhY3R1YWxWaWV3cG9ydC55ID0gMDsK
LSAgICAgICAgYWN0dWFsVmlld3BvcnQud2lkdGggPSBtUmVuZGVyVGFyZ2V0RGVzYy53aWR0aDsK
LSAgICAgICAgYWN0dWFsVmlld3BvcnQuaGVpZ2h0ID0gbVJlbmRlclRhcmdldERlc2MuaGVpZ2h0
OwotICAgICAgICBhY3R1YWxaTmVhciA9IDAuMGY7Ci0gICAgICAgIGFjdHVhbFpGYXIgPSAxLjBm
OwotICAgIH0KLQotICAgIEQzRFZJRVdQT1JUOSBkeFZpZXdwb3J0OwotICAgIGR4Vmlld3BvcnQu
WCA9IGdsOjpjbGFtcChhY3R1YWxWaWV3cG9ydC54LCAwLCBzdGF0aWNfY2FzdDxpbnQ+KG1SZW5k
ZXJUYXJnZXREZXNjLndpZHRoKSk7Ci0gICAgZHhWaWV3cG9ydC5ZID0gZ2w6OmNsYW1wKGFjdHVh
bFZpZXdwb3J0LnksIDAsIHN0YXRpY19jYXN0PGludD4obVJlbmRlclRhcmdldERlc2MuaGVpZ2h0
KSk7Ci0gICAgZHhWaWV3cG9ydC5XaWR0aCA9IGdsOjpjbGFtcChhY3R1YWxWaWV3cG9ydC53aWR0
aCwgMCwgc3RhdGljX2Nhc3Q8aW50PihtUmVuZGVyVGFyZ2V0RGVzYy53aWR0aCkgLSBzdGF0aWNf
Y2FzdDxpbnQ+KGR4Vmlld3BvcnQuWCkpOwotICAgIGR4Vmlld3BvcnQuSGVpZ2h0ID0gZ2w6OmNs
YW1wKGFjdHVhbFZpZXdwb3J0LmhlaWdodCwgMCwgc3RhdGljX2Nhc3Q8aW50PihtUmVuZGVyVGFy
Z2V0RGVzYy5oZWlnaHQpIC0gc3RhdGljX2Nhc3Q8aW50PihkeFZpZXdwb3J0LlkpKTsKLSAgICBk
eFZpZXdwb3J0Lk1pblogPSBhY3R1YWxaTmVhcjsKLSAgICBkeFZpZXdwb3J0Lk1heFogPSBhY3R1
YWxaRmFyOwotCi0gICAgaWYgKGR4Vmlld3BvcnQuV2lkdGggPD0gMCB8fCBkeFZpZXdwb3J0Lkhl
aWdodCA8PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIE5vdGhpbmcgdG8g
cmVuZGVyCi0gICAgfQotCi0gICAgZmxvYXQgZGVwdGhGcm9udCA9ICFnbDo6SXNUcmlhbmdsZU1v
ZGUoZHJhd01vZGUpID8gMC4wZiA6IChmcm9udEZhY2UgPT0gR0xfQ0NXID8gMS4wZiA6IC0xLjBm
KTsKLQotICAgIGJvb2wgdmlld3BvcnRDaGFuZ2VkID0gbUZvcmNlU2V0Vmlld3BvcnQgfHwgbWVt
Y21wKCZhY3R1YWxWaWV3cG9ydCwgJm1DdXJWaWV3cG9ydCwgc2l6ZW9mKGdsOjpSZWN0YW5nbGUp
KSAhPSAwIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxaTmVhciAhPSBtQ3Vy
TmVhciB8fCBhY3R1YWxaRmFyICE9IG1DdXJGYXIgfHwgbUN1ckRlcHRoRnJvbnQgIT0gZGVwdGhG
cm9udDsKLSAgICBpZiAodmlld3BvcnRDaGFuZ2VkKQotICAgIHsKLSAgICAgICAgbURldmljZS0+
U2V0Vmlld3BvcnQoJmR4Vmlld3BvcnQpOwotCi0gICAgICAgIG1DdXJWaWV3cG9ydCA9IGFjdHVh
bFZpZXdwb3J0OwotICAgICAgICBtQ3VyTmVhciA9IGFjdHVhbFpOZWFyOwotICAgICAgICBtQ3Vy
RmFyID0gYWN0dWFsWkZhcjsKLSAgICAgICAgbUN1ckRlcHRoRnJvbnQgPSBkZXB0aEZyb250Owot
Ci0gICAgICAgIGR4X1ZlcnRleENvbnN0YW50cyB2YyA9IHswfTsKLSAgICAgICAgZHhfUGl4ZWxD
b25zdGFudHMgcGMgPSB7MH07Ci0KLSAgICAgICAgdmMudmlld0FkanVzdFswXSA9IChmbG9hdCko
KGFjdHVhbFZpZXdwb3J0LndpZHRoIC0gKGludClkeFZpZXdwb3J0LldpZHRoKSArIDIgKiAoYWN0
dWFsVmlld3BvcnQueCAtIChpbnQpZHhWaWV3cG9ydC5YKSAtIDEpIC8gZHhWaWV3cG9ydC5XaWR0
aDsKLSAgICAgICAgdmMudmlld0FkanVzdFsxXSA9IChmbG9hdCkoKGFjdHVhbFZpZXdwb3J0Lmhl
aWdodCAtIChpbnQpZHhWaWV3cG9ydC5IZWlnaHQpICsgMiAqIChhY3R1YWxWaWV3cG9ydC55IC0g
KGludClkeFZpZXdwb3J0LlkpIC0gMSkgLyBkeFZpZXdwb3J0LkhlaWdodDsKLSAgICAgICAgdmMu
dmlld0FkanVzdFsyXSA9IChmbG9hdClhY3R1YWxWaWV3cG9ydC53aWR0aCAvIGR4Vmlld3BvcnQu
V2lkdGg7Ci0gICAgICAgIHZjLnZpZXdBZGp1c3RbM10gPSAoZmxvYXQpYWN0dWFsVmlld3BvcnQu
aGVpZ2h0IC8gZHhWaWV3cG9ydC5IZWlnaHQ7Ci0KLSAgICAgICAgcGMudmlld0Nvb3Jkc1swXSA9
IGFjdHVhbFZpZXdwb3J0LndpZHRoICAqIDAuNWY7Ci0gICAgICAgIHBjLnZpZXdDb29yZHNbMV0g
PSBhY3R1YWxWaWV3cG9ydC5oZWlnaHQgKiAwLjVmOwotICAgICAgICBwYy52aWV3Q29vcmRzWzJd
ID0gYWN0dWFsVmlld3BvcnQueCArIChhY3R1YWxWaWV3cG9ydC53aWR0aCAgKiAwLjVmKTsKLSAg
ICAgICAgcGMudmlld0Nvb3Jkc1szXSA9IGFjdHVhbFZpZXdwb3J0LnkgKyAoYWN0dWFsVmlld3Bv
cnQuaGVpZ2h0ICogMC41Zik7Ci0KLSAgICAgICAgcGMuZGVwdGhGcm9udFswXSA9IChhY3R1YWxa
RmFyIC0gYWN0dWFsWk5lYXIpICogMC41ZjsKLSAgICAgICAgcGMuZGVwdGhGcm9udFsxXSA9IChh
Y3R1YWxaTmVhciArIGFjdHVhbFpGYXIpICogMC41ZjsKLSAgICAgICAgcGMuZGVwdGhGcm9udFsy
XSA9IGRlcHRoRnJvbnQ7Ci0KLSAgICAgICAgdmMuZGVwdGhSYW5nZVswXSA9IGFjdHVhbFpOZWFy
OwotICAgICAgICB2Yy5kZXB0aFJhbmdlWzFdID0gYWN0dWFsWkZhcjsKLSAgICAgICAgdmMuZGVw
dGhSYW5nZVsyXSA9IGFjdHVhbFpGYXIgLSBhY3R1YWxaTmVhcjsKLQotICAgICAgICBwYy5kZXB0
aFJhbmdlWzBdID0gYWN0dWFsWk5lYXI7Ci0gICAgICAgIHBjLmRlcHRoUmFuZ2VbMV0gPSBhY3R1
YWxaRmFyOwotICAgICAgICBwYy5kZXB0aFJhbmdlWzJdID0gYWN0dWFsWkZhciAtIGFjdHVhbFpO
ZWFyOwotCi0gICAgICAgIGlmIChtZW1jbXAoJnZjLCAmbVZlcnRleENvbnN0YW50cywgc2l6ZW9m
KGR4X1ZlcnRleENvbnN0YW50cykpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1WZXJ0
ZXhDb25zdGFudHMgPSB2YzsKLSAgICAgICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1lbWNtcCgmcGMsICZtUGl4ZWxDb25zdGFudHMsIHNp
emVvZihkeF9QaXhlbENvbnN0YW50cykpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1Q
aXhlbENvbnN0YW50cyA9IHBjOwotICAgICAgICAgICAgbUR4VW5pZm9ybXNEaXJ0eSA9IHRydWU7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtRm9yY2VTZXRWaWV3cG9ydCA9IGZhbHNlOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIFJlbmRlcmVyOTo6YXBwbHlQcmltaXRpdmVUeXBlKEdM
ZW51bSBtb2RlLCBHTHNpemVpIGNvdW50KQotewotICAgIHN3aXRjaCAobW9kZSkKLSAgICB7Ci0g
ICAgICBjYXNlIEdMX1BPSU5UUzoKLSAgICAgICAgbVByaW1pdGl2ZVR5cGUgPSBEM0RQVF9QT0lO
VExJU1Q7Ci0gICAgICAgIG1QcmltaXRpdmVDb3VudCA9IGNvdW50OwotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfTElORVM6Ci0gICAgICAgIG1QcmltaXRpdmVUeXBlID0gRDNEUFRfTElO
RUxJU1Q7Ci0gICAgICAgIG1QcmltaXRpdmVDb3VudCA9IGNvdW50IC8gMjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX0xJTkVfTE9PUDoKLSAgICAgICAgbVByaW1pdGl2ZVR5cGUgPSBE
M0RQVF9MSU5FU1RSSVA7Ci0gICAgICAgIG1QcmltaXRpdmVDb3VudCA9IGNvdW50IC0gMTsgICAv
LyBEM0QgZG9lc24ndCBzdXBwb3J0IGxpbmUgbG9vcHMsIHNvIHdlIGRyYXcgdGhlIGxhc3QgbGlu
ZSBzZXBhcmF0ZWx5Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MSU5FX1NUUklQOgot
ICAgICAgICBtUHJpbWl0aXZlVHlwZSA9IEQzRFBUX0xJTkVTVFJJUDsKLSAgICAgICAgbVByaW1p
dGl2ZUNvdW50ID0gY291bnQgLSAxOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVFJJ
QU5HTEVTOgotICAgICAgICBtUHJpbWl0aXZlVHlwZSA9IEQzRFBUX1RSSUFOR0xFTElTVDsKLSAg
ICAgICAgbVByaW1pdGl2ZUNvdW50ID0gY291bnQgLyAzOwotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfVFJJQU5HTEVfU1RSSVA6Ci0gICAgICAgIG1QcmltaXRpdmVUeXBlID0gRDNEUFRf
VFJJQU5HTEVTVFJJUDsKLSAgICAgICAgbVByaW1pdGl2ZUNvdW50ID0gY291bnQgLSAyOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVFJJQU5HTEVfRkFOOgotICAgICAgICBtUHJpbWl0
aXZlVHlwZSA9IEQzRFBUX1RSSUFOR0xFRkFOOwotICAgICAgICBtUHJpbWl0aXZlQ291bnQgPSBj
b3VudCAtIDI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0sIGZhbHNlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
bVByaW1pdGl2ZUNvdW50ID4gMDsKLX0KLQotCi1nbDo6UmVuZGVyYnVmZmVyICpSZW5kZXJlcjk6
OmdldE51bGxDb2xvcmJ1ZmZlcihnbDo6UmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlcikKLXsKLSAg
ICBpZiAoIWRlcHRoYnVmZmVyKQotICAgIHsKLSAgICAgICAgRVJSKCJVbmV4cGVjdGVkIG51bGwg
ZGVwdGhidWZmZXIgZm9yIGRlcHRoLW9ubHkgRkJPLiIpOwotICAgICAgICByZXR1cm4gTlVMTDsK
LSAgICB9Ci0KLSAgICBHTHNpemVpIHdpZHRoICA9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpOwot
ICAgIEdMc2l6ZWkgaGVpZ2h0ID0gZGVwdGhidWZmZXItPmdldEhlaWdodCgpOwotCi0gICAgLy8g
c2VhcmNoIGNhY2hlZCBudWxsY29sb3JidWZmZXJzCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBO
VU1fTlVMTF9DT0xPUkJVRkZFUl9DQUNIRV9FTlRSSUVTOyBpKyspCi0gICAgewotICAgICAgICBp
ZiAobU51bGxDb2xvcmJ1ZmZlckNhY2hlW2ldLmJ1ZmZlciAhPSBOVUxMICYmCi0gICAgICAgICAg
ICBtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0ud2lkdGggPT0gd2lkdGggJiYKLSAgICAgICAgICAg
IG1OdWxsQ29sb3JidWZmZXJDYWNoZVtpXS5oZWlnaHQgPT0gaGVpZ2h0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0ubHJ1Q291bnQgPSArK21NYXhOdWxs
Q29sb3JidWZmZXJMUlU7Ci0gICAgICAgICAgICByZXR1cm4gbU51bGxDb2xvcmJ1ZmZlckNhY2hl
W2ldLmJ1ZmZlcjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGdsOjpSZW5kZXJidWZmZXIgKm51
bGxidWZmZXIgPSBuZXcgZ2w6OlJlbmRlcmJ1ZmZlcih0aGlzLCAwLCBuZXcgZ2w6OkNvbG9yYnVm
ZmVyKHRoaXMsIHdpZHRoLCBoZWlnaHQsIEdMX05PTkUsIDApKTsKLQotICAgIC8vIGFkZCBudWxs
YnVmZmVyIHRvIHRoZSBjYWNoZQotICAgIE51bGxDb2xvcmJ1ZmZlckNhY2hlRW50cnkgKm9sZGVz
dCA9ICZtTnVsbENvbG9yYnVmZmVyQ2FjaGVbMF07Ci0gICAgZm9yIChpbnQgaSA9IDE7IGkgPCBO
VU1fTlVMTF9DT0xPUkJVRkZFUl9DQUNIRV9FTlRSSUVTOyBpKyspCi0gICAgewotICAgICAgICBp
ZiAobU51bGxDb2xvcmJ1ZmZlckNhY2hlW2ldLmxydUNvdW50IDwgb2xkZXN0LT5scnVDb3VudCkK
LSAgICAgICAgewotICAgICAgICAgICAgb2xkZXN0ID0gJm1OdWxsQ29sb3JidWZmZXJDYWNoZVtp
XTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGRlbGV0ZSBvbGRlc3QtPmJ1ZmZlcjsKLSAgICBv
bGRlc3QtPmJ1ZmZlciA9IG51bGxidWZmZXI7Ci0gICAgb2xkZXN0LT5scnVDb3VudCA9ICsrbU1h
eE51bGxDb2xvcmJ1ZmZlckxSVTsKLSAgICBvbGRlc3QtPndpZHRoID0gd2lkdGg7Ci0gICAgb2xk
ZXN0LT5oZWlnaHQgPSBoZWlnaHQ7Ci0KLSAgICByZXR1cm4gbnVsbGJ1ZmZlcjsKLX0KLQotYm9v
bCBSZW5kZXJlcjk6OmFwcGx5UmVuZGVyVGFyZ2V0KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZm
ZXIpCi17Ci0gICAgLy8gaWYgdGhlcmUgaXMgbm8gY29sb3IgYXR0YWNobWVudCB3ZSBtdXN0IHN5
bnRoZXNpemUgYSBOVUxMIGNvbG9yYXR0YWNobWVudAotICAgIC8vIHRvIGtlZXAgdGhlIEQzRCBy
dW50aW1lIGhhcHB5LiAgVGhpcyBzaG91bGQgb25seSBiZSBwb3NzaWJsZSBpZiBkZXB0aCB0ZXh0
dXJpbmcuCi0gICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0ID0gTlVMTDsK
LSAgICBpZiAoZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlwZSgwKSAhPSBHTF9OT05FKQot
ICAgIHsKLSAgICAgICAgcmVuZGVyYnVmZmVyT2JqZWN0ID0gZnJhbWVidWZmZXItPmdldENvbG9y
YnVmZmVyKDApOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZW5kZXJidWZmZXJP
YmplY3QgPSBnZXROdWxsQ29sb3JidWZmZXIoZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCkp
OwotICAgIH0KLSAgICBpZiAoIXJlbmRlcmJ1ZmZlck9iamVjdCkKLSAgICB7Ci0gICAgICAgIEVS
UigidW5hYmxlIHRvIGxvY2F0ZSByZW5kZXJidWZmZXIgZm9yIEZCTy4iKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wgcmVuZGVyVGFyZ2V0Q2hhbmdlZCA9IGZhbHNl
OwotICAgIHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRTZXJpYWwgPSByZW5kZXJidWZmZXJPYmpl
Y3QtPmdldFNlcmlhbCgpOwotICAgIGlmIChyZW5kZXJUYXJnZXRTZXJpYWwgIT0gbUFwcGxpZWRS
ZW5kZXJUYXJnZXRTZXJpYWwpCi0gICAgewotICAgICAgICAvLyBBcHBseSB0aGUgcmVuZGVyIHRh
cmdldCBvbiB0aGUgZGV2aWNlCi0gICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJn
ZXRTdXJmYWNlID0gTlVMTDsKLQotICAgICAgICBSZW5kZXJUYXJnZXQgKnJlbmRlclRhcmdldCA9
IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIGlmIChyZW5k
ZXJUYXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlbmRlclRhcmdldFN1cmZhY2UgPSBS
ZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShyZW5kZXJUYXJnZXQpLT5nZXRTdXJmYWNl
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXJlbmRlclRhcmdldFN1cmZhY2UpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEVSUigicmVuZGVyIHRhcmdldCBwb2ludGVyIHVuZXhwZWN0ZWRs
eSBudWxsLiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIENvbnRleHQgbXVzdCBi
ZSBsb3N0Ci0gICAgICAgIH0KLQotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwg
cmVuZGVyVGFyZ2V0U3VyZmFjZSk7Ci0gICAgICAgIHJlbmRlclRhcmdldFN1cmZhY2UtPlJlbGVh
c2UoKTsKLQotICAgICAgICBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbCA9IHJlbmRlclRhcmdl
dFNlcmlhbDsKLSAgICAgICAgcmVuZGVyVGFyZ2V0Q2hhbmdlZCA9IHRydWU7Ci0gICAgfQotCi0g
ICAgZ2w6OlJlbmRlcmJ1ZmZlciAqZGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICB1bnNpZ25lZCBp
bnQgZGVwdGhidWZmZXJTZXJpYWwgPSAwOwotICAgIHVuc2lnbmVkIGludCBzdGVuY2lsYnVmZmVy
U2VyaWFsID0gMDsKLSAgICBpZiAoZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyVHlwZSgpICE9
IEdMX05PTkUpCi0gICAgewotICAgICAgICBkZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZlci0+Z2V0
RGVwdGhidWZmZXIoKTsKLSAgICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIp
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVwdGhi
dWZmZXJTZXJpYWwgPSBkZXB0aFN0ZW5jaWwtPmdldFNlcmlhbCgpOwotICAgIH0KLSAgICBlbHNl
IGlmIChmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQotICAg
IHsKLSAgICAgICAgZGVwdGhTdGVuY2lsID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIo
KTsKLSAgICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVS
UigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RlbmNpbGJ1ZmZlclNlcmlh
bCA9IGRlcHRoU3RlbmNpbC0+Z2V0U2VyaWFsKCk7Ci0gICAgfQotCi0gICAgaWYgKGRlcHRoYnVm
ZmVyU2VyaWFsICE9IG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWwgfHwKLSAgICAgICAgc3RlbmNp
bGJ1ZmZlclNlcmlhbCAhPSBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwgfHwKLSAgICAgICAg
IW1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBk
ZXB0aFNpemUgPSAwOwotICAgICAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbFNpemUgPSAwOwotCi0g
ICAgICAgIC8vIEFwcGx5IHRoZSBkZXB0aCBzdGVuY2lsIG9uIHRoZSBkZXZpY2UKLSAgICAgICAg
aWYgKGRlcHRoU3RlbmNpbCkKLSAgICAgICAgewotICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKmRlcHRoU3RlbmNpbFN1cmZhY2UgPSBOVUxMOwotICAgICAgICAgICAgUmVuZGVyVGFyZ2V0
ICpkZXB0aFN0ZW5jaWxSZW5kZXJUYXJnZXQgPSBkZXB0aFN0ZW5jaWwtPmdldERlcHRoU3RlbmNp
bCgpOwotCi0gICAgICAgICAgICBpZiAoZGVwdGhTdGVuY2lsUmVuZGVyVGFyZ2V0KQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGRlcHRoU3RlbmNpbFN1cmZhY2UgPSBSZW5kZXJUYXJn
ZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShkZXB0aFN0ZW5jaWxSZW5kZXJUYXJnZXQpLT5nZXRTdXJm
YWNlKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghZGVwdGhTdGVuY2lsU3Vy
ZmFjZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBFUlIoImRlcHRoIHN0ZW5jaWwg
cG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7ICAgLy8gQ29udGV4dCBtdXN0IGJlIGxvc3QKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgbURldmljZS0+U2V0RGVwdGhTdGVuY2lsU3VyZmFjZShkZXB0aFN0ZW5jaWxTdXJmYWNlKTsK
LSAgICAgICAgICAgIGRlcHRoU3RlbmNpbFN1cmZhY2UtPlJlbGVhc2UoKTsKLQotICAgICAgICAg
ICAgZGVwdGhTaXplID0gZGVwdGhTdGVuY2lsLT5nZXREZXB0aFNpemUoKTsKLSAgICAgICAgICAg
IHN0ZW5jaWxTaXplID0gZGVwdGhTdGVuY2lsLT5nZXRTdGVuY2lsU2l6ZSgpOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0RGVwdGhT
dGVuY2lsU3VyZmFjZShOVUxMKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghbURlcHRoU3Rl
bmNpbEluaXRpYWxpemVkIHx8IGRlcHRoU2l6ZSAhPSBtQ3VyRGVwdGhTaXplKQotICAgICAgICB7
Ci0gICAgICAgICAgICBtQ3VyRGVwdGhTaXplID0gZGVwdGhTaXplOwotICAgICAgICAgICAgbUZv
cmNlU2V0UmFzdGVyU3RhdGUgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtRGVw
dGhTdGVuY2lsSW5pdGlhbGl6ZWQgfHwgc3RlbmNpbFNpemUgIT0gbUN1clN0ZW5jaWxTaXplKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtQ3VyU3RlbmNpbFNpemUgPSBzdGVuY2lsU2l6ZTsKLSAg
ICAgICAgICAgIG1Gb3JjZVNldERlcHRoU3RlbmNpbFN0YXRlID0gdHJ1ZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWwgPSBkZXB0aGJ1ZmZlclNlcmlhbDsK
LSAgICAgICAgbUFwcGxpZWRTdGVuY2lsYnVmZmVyU2VyaWFsID0gc3RlbmNpbGJ1ZmZlclNlcmlh
bDsKLSAgICAgICAgbURlcHRoU3RlbmNpbEluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICBpZiAocmVuZGVyVGFyZ2V0Q2hhbmdlZCB8fCAhbVJlbmRlclRhcmdldERlc2NJbml0aWFsaXpl
ZCkKLSAgICB7Ci0gICAgICAgIG1Gb3JjZVNldFNjaXNzb3IgPSB0cnVlOwotICAgICAgICBtRm9y
Y2VTZXRWaWV3cG9ydCA9IHRydWU7Ci0KLSAgICAgICAgbVJlbmRlclRhcmdldERlc2Mud2lkdGgg
PSByZW5kZXJidWZmZXJPYmplY3QtPmdldFdpZHRoKCk7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXRE
ZXNjLmhlaWdodCA9IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0SGVpZ2h0KCk7Ci0gICAgICAgIG1S
ZW5kZXJUYXJnZXREZXNjLmZvcm1hdCA9IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0QWN0dWFsRm9y
bWF0KCk7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1HTGVudW0gUmVuZGVyZXI5OjphcHBseVZlcnRl
eEJ1ZmZlcihnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlZlcnRleEF0dHJp
YnV0ZSB2ZXJ0ZXhBdHRyaWJ1dGVzW10sIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNp
emVpIGluc3RhbmNlcykKLXsKLSAgICBUcmFuc2xhdGVkQXR0cmlidXRlIGF0dHJpYnV0ZXNbZ2w6
Ok1BWF9WRVJURVhfQVRUUklCU107Ci0gICAgR0xlbnVtIGVyciA9IG1WZXJ0ZXhEYXRhTWFuYWdl
ci0+cHJlcGFyZVZlcnRleERhdGEodmVydGV4QXR0cmlidXRlcywgcHJvZ3JhbUJpbmFyeSwgZmly
c3QsIGNvdW50LCBhdHRyaWJ1dGVzLCBpbnN0YW5jZXMpOwotICAgIGlmIChlcnIgIT0gR0xfTk9f
RVJST1IpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLSAgICAKLSAgICByZXR1
cm4gbVZlcnRleERlY2xhcmF0aW9uQ2FjaGUuYXBwbHlEZWNsYXJhdGlvbihtRGV2aWNlLCBhdHRy
aWJ1dGVzLCBwcm9ncmFtQmluYXJ5LCBpbnN0YW5jZXMsICZtUmVwZWF0RHJhdyk7Ci19Ci0KLS8v
IEFwcGxpZXMgdGhlIGluZGljZXMgYW5kIGVsZW1lbnQgYXJyYXkgYmluZGluZ3MgdG8gdGhlIERp
cmVjdDNEIDkgZGV2aWNlCi1HTGVudW0gUmVuZGVyZXI5OjphcHBseUluZGV4QnVmZmVyKGNvbnN0
IEdMdm9pZCAqaW5kaWNlcywgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyLCBHTHNpemVp
IGNvdW50LCBHTGVudW0gbW9kZSwgR0xlbnVtIHR5cGUsIFRyYW5zbGF0ZWRJbmRleERhdGEgKmlu
ZGV4SW5mbykKLXsKLSAgICBHTGVudW0gZXJyID0gbUluZGV4RGF0YU1hbmFnZXItPnByZXBhcmVJ
bmRleERhdGEodHlwZSwgY291bnQsIGVsZW1lbnRBcnJheUJ1ZmZlciwgaW5kaWNlcywgaW5kZXhJ
bmZvKTsKLQotICAgIGlmIChlcnIgPT0gR0xfTk9fRVJST1IpCi0gICAgewotICAgICAgICAvLyBE
aXJlY3RseSBiaW5kaW5nIHRoZSBzdG9yYWdlIGJ1ZmZlciBpcyBub3Qgc3VwcG9ydGVkIGZvciBk
M2Q5Ci0gICAgICAgIEFTU0VSVChpbmRleEluZm8tPnN0b3JhZ2UgPT0gTlVMTCk7Ci0KLSAgICAg
ICAgaWYgKGluZGV4SW5mby0+c2VyaWFsICE9IG1BcHBsaWVkSUJTZXJpYWwpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEluZGV4QnVmZmVyOSogaW5kZXhCdWZmZXIgPSBJbmRleEJ1ZmZlcjk6Om1h
a2VJbmRleEJ1ZmZlcjkoaW5kZXhJbmZvLT5pbmRleEJ1ZmZlcik7Ci0KLSAgICAgICAgICAgIG1E
ZXZpY2UtPlNldEluZGljZXMoaW5kZXhCdWZmZXItPmdldEJ1ZmZlcigpKTsKLSAgICAgICAgICAg
IG1BcHBsaWVkSUJTZXJpYWwgPSBpbmRleEluZm8tPnNlcmlhbDsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHJldHVybiBlcnI7Ci19Ci0KLXZvaWQgUmVuZGVyZXI5OjpkcmF3QXJyYXlzKEdMZW51
bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcykKLXsKLSAgICBzdGFydFNj
ZW5lKCk7Ci0gICAgICAgIAotICAgIGlmIChtb2RlID09IEdMX0xJTkVfTE9PUCkKLSAgICB7Ci0g
ICAgICAgIGRyYXdMaW5lTG9vcChjb3VudCwgR0xfTk9ORSwgTlVMTCwgMCwgTlVMTCk7Ci0gICAg
fQotICAgIGVsc2UgaWYgKGluc3RhbmNlcyA+IDApCi0gICAgewotICAgICAgICBTdGF0aWNJbmRl
eEJ1ZmZlckludGVyZmFjZSAqY291bnRpbmdJQiA9IG1JbmRleERhdGFNYW5hZ2VyLT5nZXRDb3Vu
dGluZ0luZGljZXMoY291bnQpOwotICAgICAgICBpZiAoY291bnRpbmdJQikKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKG1BcHBsaWVkSUJTZXJpYWwgIT0gY291bnRpbmdJQi0+Z2V0U2VyaWFs
KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSW5kZXhCdWZmZXI5ICppbmRleEJ1
ZmZlciA9IEluZGV4QnVmZmVyOTo6bWFrZUluZGV4QnVmZmVyOShjb3VudGluZ0lCLT5nZXRJbmRl
eEJ1ZmZlcigpKTsKLQotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldEluZGljZXMoaW5kZXhC
dWZmZXItPmdldEJ1ZmZlcigpKTsKLSAgICAgICAgICAgICAgICBtQXBwbGllZElCU2VyaWFsID0g
Y291bnRpbmdJQi0+Z2V0U2VyaWFsKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbVJlcGVhdERyYXc7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBtRGV2aWNlLT5EcmF3SW5kZXhlZFByaW1pdGl2ZShtUHJpbWl0aXZlVHlwZSwg
MCwgMCwgY291bnQsIDAsIG1QcmltaXRpdmVDb3VudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBj
cmVhdGUgYSBjb3VudGluZyBpbmRleCBidWZmZXIgZm9yIGdsRHJhd0FycmF5c0luc3RhbmNlZC4i
KTsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgZWxzZSAgIC8vIFJlZ3VsYXIgY2FzZQotICAgIHsKLSAgICAgICAg
bURldmljZS0+RHJhd1ByaW1pdGl2ZShtUHJpbWl0aXZlVHlwZSwgMCwgbVByaW1pdGl2ZUNvdW50
KTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyZXI5OjpkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUs
IEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpC
dWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5k
ZXhJbmZvLCBHTHNpemVpIC8qaW5zdGFuY2VzKi8pCi17Ci0gICAgc3RhcnRTY2VuZSgpOwotCi0g
ICAgaWYgKG1vZGUgPT0gR0xfUE9JTlRTKQotICAgIHsKLSAgICAgICAgZHJhd0luZGV4ZWRQb2lu
dHMoY291bnQsIHR5cGUsIGluZGljZXMsIGVsZW1lbnRBcnJheUJ1ZmZlcik7Ci0gICAgfQotICAg
IGVsc2UgaWYgKG1vZGUgPT0gR0xfTElORV9MT09QKQotICAgIHsKLSAgICAgICAgZHJhd0xpbmVM
b29wKGNvdW50LCB0eXBlLCBpbmRpY2VzLCBpbmRleEluZm8ubWluSW5kZXgsIGVsZW1lbnRBcnJh
eUJ1ZmZlcik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbVJlcGVhdERyYXc7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgR0xzaXplaSB2
ZXJ0ZXhDb3VudCA9IGluZGV4SW5mby5tYXhJbmRleCAtIGluZGV4SW5mby5taW5JbmRleCArIDE7
Ci0gICAgICAgICAgICBtRGV2aWNlLT5EcmF3SW5kZXhlZFByaW1pdGl2ZShtUHJpbWl0aXZlVHlw
ZSwgLShJTlQpaW5kZXhJbmZvLm1pbkluZGV4LCBpbmRleEluZm8ubWluSW5kZXgsIHZlcnRleENv
dW50LCBpbmRleEluZm8uc3RhcnRJbmRleCwgbVByaW1pdGl2ZUNvdW50KTsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQotdm9pZCBSZW5kZXJlcjk6OmRyYXdMaW5lTG9vcChHTHNpemVpIGNvdW50LCBH
TGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBpbnQgbWluSW5kZXgsIGdsOjpCdWZm
ZXIgKmVsZW1lbnRBcnJheUJ1ZmZlcikKLXsKLSAgICAvLyBHZXQgdGhlIHJhdyBpbmRpY2VzIGZv
ciBhbiBpbmRleGVkIGRyYXcKLSAgICBpZiAodHlwZSAhPSBHTF9OT05FICYmIGVsZW1lbnRBcnJh
eUJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIGdsOjpCdWZmZXIgKmluZGV4QnVmZmVyID0gZWxlbWVu
dEFycmF5QnVmZmVyOwotICAgICAgICBCdWZmZXJTdG9yYWdlICpzdG9yYWdlID0gaW5kZXhCdWZm
ZXItPmdldFN0b3JhZ2UoKTsKLSAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gcmVpbnRlcnByZXRf
Y2FzdDxpbnRwdHJfdD4oaW5kaWNlcyk7Ci0gICAgICAgIGluZGljZXMgPSBzdGF0aWNfY2FzdDxj
b25zdCBHTHVieXRlKj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSArIG9mZnNldDsKLSAgICB9Ci0KLSAg
ICB1bnNpZ25lZCBpbnQgc3RhcnRJbmRleCA9IDA7Ci0KLSAgICBpZiAoZ2V0MzJCaXRJbmRleFN1
cHBvcnQoKSkKLSAgICB7Ci0gICAgICAgIGlmICghbUxpbmVMb29wSUIpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1MaW5lTG9vcElCID0gbmV3IFN0cmVhbWluZ0luZGV4QnVmZmVySW50ZXJmYWNl
KHRoaXMpOwotICAgICAgICAgICAgaWYgKCFtTGluZUxvb3BJQi0+cmVzZXJ2ZUJ1ZmZlclNwYWNl
KElOSVRJQUxfSU5ERVhfQlVGRkVSX1NJWkUsIEdMX1VOU0lHTkVEX0lOVCkpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIG1MaW5lTG9vcElCOwotICAgICAgICAgICAgICAg
IG1MaW5lTG9vcElCID0gTlVMTDsKLQotICAgICAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNy
ZWF0ZSBhIDMyLWJpdCBsb29waW5nIGluZGV4IGJ1ZmZlciBmb3IgR0xfTElORV9MT09QLiIpOwot
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQg
aW50Pihjb3VudCkgKyAxID4gKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4
KCkgLyBzaXplb2YodW5zaWduZWQgaW50KSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigi
Q291bGQgbm90IGNyZWF0ZSBhIDMyLWJpdCBsb29waW5nIGluZGV4IGJ1ZmZlciBmb3IgR0xfTElO
RV9MT09QLCB0b28gbWFueSBpbmRpY2VzIHJlcXVpcmVkLiIpOwotICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENo
ZWNrZWQgYnkgUmVuZGVyZXI5OjphcHBseVByaW1pdGl2ZVR5cGUKLSAgICAgICAgQVNTRVJUKGNv
dW50ID49IDApOwotCi0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBzcGFjZU5lZWRlZCA9IChz
dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGNvdW50KSArIDEpICogc2l6ZW9mKHVuc2lnbmVkIGlu
dCk7Ci0gICAgICAgIGlmICghbUxpbmVMb29wSUItPnJlc2VydmVCdWZmZXJTcGFjZShzcGFjZU5l
ZWRlZCwgR0xfVU5TSUdORURfSU5UKSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJDb3Vs
ZCBub3QgcmVzZXJ2ZSBlbm91Z2ggc3BhY2UgaW4gbG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdM
X0xJTkVfTE9PUC4iKTsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkKiBtYXBwZWRNZW1vcnkgPSBOVUxMOwot
ICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMDsKLSAgICAgICAgaWYgKCFtTGluZUxvb3BJ
Qi0+bWFwQnVmZmVyKHNwYWNlTmVlZGVkLCAmbWFwcGVkTWVtb3J5LCAmb2Zmc2V0KSkKLSAgICAg
ICAgewotICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgbWFwIGluZGV4IGJ1ZmZlciBmb3IgR0xf
TElORV9MT09QLiIpOwotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXJ0SW5kZXggPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBpbnQ+KG9mZnNldCkgLyA0OwotICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgPSByZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KG1hcHBlZE1lbW9yeSk7Ci0KLSAgICAgICAgc3dp
dGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9OT05FOiAgIC8vIE5vbi1p
bmRleGVkIGRyYXcKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkYXRhW2ldID0gaTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGRhdGFbY291bnRdID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkYXRhW2ld
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpW2ldOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4o
aW5kaWNlcylbMF07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX1NIT1JUOgotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25z
dCBHTHVzaG9ydCo+KGluZGljZXMpW2ldOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGF0
YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpWzBdOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6Ci0gICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMp
W2ldOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2Fz
dDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVswXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW1M
aW5lTG9vcElCLT51bm1hcEJ1ZmZlcigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkNv
dWxkIG5vdCB1bm1hcCBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKLSAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKCFtTGluZUxvb3BJQikKLSAgICAgICAgewot
ICAgICAgICAgICAgbUxpbmVMb29wSUIgPSBuZXcgU3RyZWFtaW5nSW5kZXhCdWZmZXJJbnRlcmZh
Y2UodGhpcyk7Ci0gICAgICAgICAgICBpZiAoIW1MaW5lTG9vcElCLT5yZXNlcnZlQnVmZmVyU3Bh
Y2UoSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwgR0xfVU5TSUdORURfU0hPUlQpKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGRlbGV0ZSBtTGluZUxvb3BJQjsKLSAgICAgICAgICAg
ICAgICBtTGluZUxvb3BJQiA9IE5VTEw7Ci0KLSAgICAgICAgICAgICAgICBFUlIoIkNvdWxkIG5v
dCBjcmVhdGUgYSAxNi1iaXQgbG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4i
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2hlY2tlZCBieSBSZW5kZXJl
cjk6OmFwcGx5UHJpbWl0aXZlVHlwZQotICAgICAgICBBU1NFUlQoY291bnQgPj0gMCk7Ci0KLSAg
ICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oY291bnQpICsgMSA+IChzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0Pjo6bWF4KCkgLyBzaXplb2YodW5zaWduZWQgc2hv
cnQpKSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGEgMTYt
Yml0IGxvb3BpbmcgaW5kZXggYnVmZmVyIGZvciBHTF9MSU5FX0xPT1AsIHRvbyBtYW55IGluZGlj
ZXMgcmVxdWlyZWQuIik7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHNwYWNlTmVl
ZGVkID0gKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oY291bnQpICsgMSkgKiBzaXplb2YodW5z
aWduZWQgc2hvcnQpOwotICAgICAgICBpZiAoIW1MaW5lTG9vcElCLT5yZXNlcnZlQnVmZmVyU3Bh
Y2Uoc3BhY2VOZWVkZWQsIEdMX1VOU0lHTkVEX1NIT1JUKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgRVJSKCJDb3VsZCBub3QgcmVzZXJ2ZSBlbm91Z2ggc3BhY2UgaW4gbG9vcGluZyBpbmRleCBi
dWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkKiBtYXBwZWRNZW1v
cnkgPSBOVUxMOwotICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0OwotICAgICAgICBpZiAobUxp
bmVMb29wSUItPm1hcEJ1ZmZlcihzcGFjZU5lZWRlZCwgJm1hcHBlZE1lbW9yeSwgJm9mZnNldCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiQ291bGQgbm90IG1hcCBpbmRleCBidWZmZXIg
Zm9yIEdMX0xJTkVfTE9PUC4iKTsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGFydEluZGV4ID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgaW50PihvZmZzZXQpIC8gMjsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgKmRh
dGEgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4obWFwcGVkTWVtb3J5KTsKLQot
ICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX05PTkU6
ICAgLy8gTm9uLWluZGV4ZWQgZHJhdwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZGF0YVtjb3VudF0gPSAwOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oaW5kaWNlcylbaV07Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNvbnN0
IEdMdWJ5dGUqPihpbmRpY2VzKVswXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNh
c2UgR0xfVU5TSUdORURfU0hPUlQ6Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRp
Y19jYXN0PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNlcylbaV07Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNl
cylbMF07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lO
VDoKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1aW50
Kj4oaW5kaWNlcylbaV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkYXRhW2NvdW50XSA9
IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMpWzBdOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmICghbUxpbmVMb29wSUItPnVubWFwQnVmZmVyKCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEVSUigiQ291bGQgbm90IHVubWFwIGluZGV4IGJ1ZmZlciBmb3IgR0xfTElORV9MT09QLiIp
OwotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9IG1MaW5lTG9vcElCLT5n
ZXRTZXJpYWwoKSkKLSAgICB7Ci0gICAgICAgIEluZGV4QnVmZmVyOSAqaW5kZXhCdWZmZXIgPSBJ
bmRleEJ1ZmZlcjk6Om1ha2VJbmRleEJ1ZmZlcjkobUxpbmVMb29wSUItPmdldEluZGV4QnVmZmVy
KCkpOwotCi0gICAgICAgIG1EZXZpY2UtPlNldEluZGljZXMoaW5kZXhCdWZmZXItPmdldEJ1ZmZl
cigpKTsKLSAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IG1MaW5lTG9vcElCLT5nZXRTZXJpYWwo
KTsKLSAgICB9Ci0KLSAgICBtRGV2aWNlLT5EcmF3SW5kZXhlZFByaW1pdGl2ZShEM0RQVF9MSU5F
U1RSSVAsIC1taW5JbmRleCwgbWluSW5kZXgsIGNvdW50LCBzdGFydEluZGV4LCBjb3VudCk7Ci19
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RhdGljIHZvaWQgZHJhd1BvaW50cyhJRGlyZWN0
M0REZXZpY2U5KiBkZXZpY2UsIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcykK
LXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB1
bnNpZ25lZCBpbnQgaW5kZXhWYWx1ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oc3RhdGlj
X2Nhc3Q8Y29uc3QgVCo+KGluZGljZXMpW2ldKTsKLSAgICAgICAgZGV2aWNlLT5EcmF3UHJpbWl0
aXZlKEQzRFBUX1BPSU5UTElTVCwgaW5kZXhWYWx1ZSwgMSk7Ci0gICAgfQotfQotCi12b2lkIFJl
bmRlcmVyOTo6ZHJhd0luZGV4ZWRQb2ludHMoR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNv
bnN0IEdMdm9pZCAqaW5kaWNlcywgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyKQotewot
ICAgIC8vIERyYXdpbmcgaW5kZXggcG9pbnQgbGlzdHMgaXMgdW5zdXBwb3J0ZWQgaW4gZDNkOSwg
ZmFsbCBiYWNrIHRvIGEgcmVndWxhciBEcmF3UHJpbWl0aXZlIGNhbGwKLSAgICAvLyBmb3IgZWFj
aCBpbmRpdmlkdWFsIHBvaW50LiBUaGlzIGNhbGwgaXMgbm90IGV4cGVjdGVkIHRvIGhhcHBlbiBv
ZnRlbi4KLQotICAgIGlmIChlbGVtZW50QXJyYXlCdWZmZXIpCi0gICAgewotICAgICAgICBCdWZm
ZXJTdG9yYWdlICpzdG9yYWdlID0gZWxlbWVudEFycmF5QnVmZmVyLT5nZXRTdG9yYWdlKCk7Ci0g
ICAgICAgIGludHB0cl90IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZGlj
ZXMpOwotICAgICAgICBpbmRpY2VzID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KHN0b3Jh
Z2UtPmdldERhdGEoKSkgKyBvZmZzZXQ7Ci0gICAgfQotCi0gICAgc3dpdGNoICh0eXBlKQotICAg
IHsKLSAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOiAgZHJhd1BvaW50czxHTHVieXRlPiht
RGV2aWNlLCBjb3VudCwgaW5kaWNlcyk7ICBicmVhazsKLSAgICAgICAgY2FzZSBHTF9VTlNJR05F
RF9TSE9SVDogZHJhd1BvaW50czxHTHVzaG9ydD4obURldmljZSwgY291bnQsIGluZGljZXMpOyBi
cmVhazsKLSAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6ICAgZHJhd1BvaW50czxHTHVpbnQ+
KG1EZXZpY2UsIGNvdW50LCBpbmRpY2VzKTsgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyZXI5OjphcHBseVNoYWRlcnMoZ2w6
OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpCi17Ci0gICAgdW5zaWduZWQgaW50IHByb2dy
YW1CaW5hcnlTZXJpYWwgPSBwcm9ncmFtQmluYXJ5LT5nZXRTZXJpYWwoKTsKLSAgICBpZiAocHJv
Z3JhbUJpbmFyeVNlcmlhbCAhPSBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWwpCi0gICAgewot
ICAgICAgICBTaGFkZXJFeGVjdXRhYmxlICp2ZXJ0ZXhFeGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRW
ZXJ0ZXhFeGVjdXRhYmxlKCk7Ci0gICAgICAgIFNoYWRlckV4ZWN1dGFibGUgKnBpeGVsRXhlID0g
cHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxFeGVjdXRhYmxlKCk7Ci0KLSAgICAgICAgSURpcmVjdDNE
VmVydGV4U2hhZGVyOSAqdmVydGV4U2hhZGVyID0gTlVMTDsKLSAgICAgICAgaWYgKHZlcnRleEV4
ZSkgdmVydGV4U2hhZGVyID0gU2hhZGVyRXhlY3V0YWJsZTk6Om1ha2VTaGFkZXJFeGVjdXRhYmxl
OSh2ZXJ0ZXhFeGUpLT5nZXRWZXJ0ZXhTaGFkZXIoKTsKLQotICAgICAgICBJRGlyZWN0M0RQaXhl
bFNoYWRlcjkgKnBpeGVsU2hhZGVyID0gTlVMTDsKLSAgICAgICAgaWYgKHBpeGVsRXhlKSBwaXhl
bFNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGU5OjptYWtlU2hhZGVyRXhlY3V0YWJsZTkocGl4ZWxF
eGUpLT5nZXRQaXhlbFNoYWRlcigpOwotCi0gICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVy
KHBpeGVsU2hhZGVyKTsKLSAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyKHZlcnRleFNo
YWRlcik7Ci0gICAgICAgIHByb2dyYW1CaW5hcnktPmRpcnR5QWxsVW5pZm9ybXMoKTsKLSAgICAg
ICAgbUR4VW5pZm9ybXNEaXJ0eSA9IHRydWU7Ci0KLSAgICAgICAgbUFwcGxpZWRQcm9ncmFtQmlu
YXJ5U2VyaWFsID0gcHJvZ3JhbUJpbmFyeVNlcmlhbDsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVy
ZXI5OjphcHBseVVuaWZvcm1zKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBnbDo6
VW5pZm9ybUFycmF5ICp1bmlmb3JtQXJyYXkpCi17Ci0gICAgZm9yIChzdGQ6OnZlY3RvcjxnbDo6
VW5pZm9ybSo+Ojpjb25zdF9pdGVyYXRvciB1YiA9IHVuaWZvcm1BcnJheS0+YmVnaW4oKSwgdWUg
PSB1bmlmb3JtQXJyYXktPmVuZCgpOyB1YiAhPSB1ZTsgKyt1YikKLSAgICB7Ci0gICAgICAgIGds
OjpVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gKnViOwotCi0gICAgICAgIGlmICh0YXJnZXRVbmlm
b3JtLT5kaXJ0eSkKLSAgICAgICAgewotICAgICAgICAgICAgR0xmbG9hdCAqZiA9IChHTGZsb2F0
Kil0YXJnZXRVbmlmb3JtLT5kYXRhOwotICAgICAgICAgICAgR0xpbnQgKmkgPSAoR0xpbnQqKXRh
cmdldFVuaWZvcm0tPmRhdGE7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+
dHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgot
ICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRVJfQ1VCRToKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MOgotICAgICAgICAgICAgICBjYXNlIEdMX0JP
T0xfVkVDMjoKLSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfQk9PTF9WRUM0OgotICAgICAgICAgICAgICAgIGFwcGx5VW5pZm9ybW5idih0YXJn
ZXRVbmlmb3JtLCBpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9GTE9BVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgotICAgICAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVD
NDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKLSAgICAg
ICAgICAgICAgICBhcHBseVVuaWZvcm1uZnYodGFyZ2V0VW5pZm9ybSwgZik7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UOgotICAgICAgICAgICAgICBj
YXNlIEdMX0lOVF9WRUMyOgotICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMzOgotICAgICAg
ICAgICAgICBjYXNlIEdMX0lOVF9WRUM0OgotICAgICAgICAgICAgICAgIGFwcGx5VW5pZm9ybW5p
dih0YXJnZXRVbmlmb3JtLCBpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IGZhbHNlOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgLy8gRHJpdmVyIHVuaWZvcm1zCi0gICAgaWYgKG1EeFVuaWZvcm1zRGly
dHkpCi0gICAgewotICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYoMCwg
KGZsb2F0KikmbVZlcnRleENvbnN0YW50cywgc2l6ZW9mKGR4X1ZlcnRleENvbnN0YW50cykgLyBz
aXplb2YoZmxvYXRbNF0pKTsKLSAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFu
dEYoMCwgKGZsb2F0KikmbVBpeGVsQ29uc3RhbnRzLCBzaXplb2YoZHhfUGl4ZWxDb25zdGFudHMp
IC8gc2l6ZW9mKGZsb2F0WzRdKSk7Ci0gICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSBmYWxzZTsK
LSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyZXI5OjphcHBseVVuaWZvcm1uZnYoZ2w6OlVuaWZvcm0g
KnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMZmxvYXQgKnYpCi17Ci0gICAgaWYgKHRhcmdldFVuaWZv
cm0tPnBzUmVnaXN0ZXJJbmRleCA+PSAwKQotICAgIHsKLSAgICAgICAgbURldmljZS0+U2V0UGl4
ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHNSZWdpc3RlckluZGV4LCB2LCB0YXJn
ZXRVbmlmb3JtLT5yZWdpc3RlckNvdW50KTsKLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9y
bS0+dnNSZWdpc3RlckluZGV4ID49IDApCi0gICAgewotICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0
ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnNSZWdpc3RlckluZGV4LCB2LCB0YXJn
ZXRVbmlmb3JtLT5yZWdpc3RlckNvdW50KTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyZXI5Ojph
cHBseVVuaWZvcm1uaXYoZ2w6OlVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMaW50ICp2
KQotewotICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT5yZWdpc3RlckNvdW50IDw9IE1BWF9WRVJU
RVhfQ09OU1RBTlRfVkVDVE9SU19EM0Q5KTsKLSAgICBHTGZsb2F0IHZlY3RvcltNQVhfVkVSVEVY
X0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOV1bNF07Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IHRhcmdldFVuaWZvcm0tPnJlZ2lzdGVyQ291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAg
IHZlY3RvcltpXVswXSA9IChHTGZsb2F0KXZbNCAqIGkgKyAwXTsKLSAgICAgICAgdmVjdG9yW2ld
WzFdID0gKEdMZmxvYXQpdls0ICogaSArIDFdOwotICAgICAgICB2ZWN0b3JbaV1bMl0gPSAoR0xm
bG9hdCl2WzQgKiBpICsgMl07Ci0gICAgICAgIHZlY3RvcltpXVszXSA9IChHTGZsb2F0KXZbNCAq
IGkgKyAzXTsKLSAgICB9Ci0KLSAgICBhcHBseVVuaWZvcm1uZnYodGFyZ2V0VW5pZm9ybSwgKEdM
ZmxvYXQqKXZlY3Rvcik7Ci19Ci0KLXZvaWQgUmVuZGVyZXI5OjphcHBseVVuaWZvcm1uYnYoZ2w6
OlVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMaW50ICp2KQotewotICAgIEFTU0VSVCh0
YXJnZXRVbmlmb3JtLT5yZWdpc3RlckNvdW50IDw9IE1BWF9WRVJURVhfQ09OU1RBTlRfVkVDVE9S
U19EM0Q5KTsKLSAgICBHTGZsb2F0IHZlY3RvcltNQVhfVkVSVEVYX0NPTlNUQU5UX1ZFQ1RPUlNf
RDNEOV1bNF07Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHRhcmdldFVuaWZv
cm0tPnJlZ2lzdGVyQ291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHZlY3RvcltpXVswXSA9ICh2
WzQgKiBpICsgMF0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7Ci0gICAgICAgIHZlY3Rvcltp
XVsxXSA9ICh2WzQgKiBpICsgMV0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7Ci0gICAgICAg
IHZlY3RvcltpXVsyXSA9ICh2WzQgKiBpICsgMl0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7
Ci0gICAgICAgIHZlY3RvcltpXVszXSA9ICh2WzQgKiBpICsgM10gPT0gR0xfRkFMU0UpID8gMC4w
ZiA6IDEuMGY7Ci0gICAgfQotCi0gICAgYXBwbHlVbmlmb3JtbmZ2KHRhcmdldFVuaWZvcm0sIChH
TGZsb2F0Kil2ZWN0b3IpOwotfQotCi12b2lkIFJlbmRlcmVyOTo6Y2xlYXIoY29uc3QgZ2w6OkNs
ZWFyUGFyYW1ldGVycyAmY2xlYXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIp
Ci17Ci0gICAgRDNEQ09MT1IgY29sb3IgPSBEM0RDT0xPUl9BUkdCKGdsOjp1bm9ybTw4PihjbGVh
clBhcmFtcy5jb2xvckNsZWFyVmFsdWUuYWxwaGEpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnbDo6dW5vcm08OD4oY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLnJlZCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4PihjbGVhclBh
cmFtcy5jb2xvckNsZWFyVmFsdWUuZ3JlZW4pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbDo6dW5vcm08OD4oY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLmJsdWUpKTsK
LSAgICBmbG9hdCBkZXB0aCA9IGdsOjpjbGFtcDAxKGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1
ZSk7Ci0gICAgaW50IHN0ZW5jaWwgPSBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSAmIDB4
MDAwMDAwRkY7Ci0KLSAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbFVubWFza2VkID0gMHgwOwotICAg
IGlmICgoY2xlYXJQYXJhbXMubWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkgJiYgZnJhbWVC
dWZmZXItPmhhc1N0ZW5jaWwoKSkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzdGVuY2ls
U2l6ZSA9IGdsOjpHZXRTdGVuY2lsU2l6ZShmcmFtZUJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigp
LT5nZXRBY3R1YWxGb3JtYXQoKSk7Ci0gICAgICAgIHN0ZW5jaWxVbm1hc2tlZCA9ICgweDEgPDwg
c3RlbmNpbFNpemUpIC0gMTsKLSAgICB9Ci0KLSAgICBib29sIGFscGhhVW5tYXNrZWQgPSAoZ2w6
OkdldEFscGhhU2l6ZShtUmVuZGVyVGFyZ2V0RGVzYy5mb3JtYXQpID09IDApIHx8IGNsZWFyUGFy
YW1zLmNvbG9yTWFza0FscGhhOwotCi0gICAgY29uc3QgYm9vbCBuZWVkTWFza2VkU3RlbmNpbENs
ZWFyID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpICYmCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsZWFyUGFyYW1zLnN0ZW5jaWxX
cml0ZU1hc2sgJiBzdGVuY2lsVW5tYXNrZWQpICE9IHN0ZW5jaWxVbm1hc2tlZDsKLSAgICBjb25z
dCBib29sIG5lZWRNYXNrZWRDb2xvckNsZWFyID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xP
Ul9CVUZGRVJfQklUKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAh
KGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCAmJiBjbGVhclBhcmFtcy5jb2xvck1hc2tHcmVlbiAm
JgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyUGFyYW1zLmNv
bG9yTWFza0JsdWUgJiYgYWxwaGFVbm1hc2tlZCk7Ci0KLSAgICBpZiAobmVlZE1hc2tlZENvbG9y
Q2xlYXIgfHwgbmVlZE1hc2tlZFN0ZW5jaWxDbGVhcikKLSAgICB7Ci0gICAgICAgIC8vIFN0YXRl
IHdoaWNoIGlzIGFsdGVyZWQgaW4gYWxsIHBhdGhzIGZyb20gdGhpcyBwb2ludCB0byB0aGUgY2xl
YXIgY2FsbCBpcyBzYXZlZC4KLSAgICAgICAgLy8gU3RhdGUgd2hpY2ggaXMgYWx0ZXJlZCBpbiBv
bmx5IHNvbWUgcGF0aHMgd2lsbCBiZSBmbGFnZ2VkIGRpcnR5IGluIHRoZSBjYXNlIHRoYXQKLSAg
ICAgICAgLy8gIHRoYXQgcGF0aCBpcyB0YWtlbi4KLSAgICAgICAgSFJFU1VMVCBocjsKLSAgICAg
ICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgPT0gTlVMTCkKLSAgICAgICAgewotICAgICAg
ICAgICAgaHIgPSBtRGV2aWNlLT5CZWdpblN0YXRlQmxvY2soKTsKLSAgICAgICAgICAgIEFTU0VS
VChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IGhyID09
IEVfT1VUT0ZNRU1PUlkpOwotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19aV1JJVEVFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX1pGVU5DLCBEM0RDTVBfQUxXQVlTKTsKLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOwotICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfRklMTE1PREUsIEQzREZJTExfU09M
SUQpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFURVNU
RU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOwotICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgMCk7Ci0gICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBGQUxTRSk7Ci0gICAg
ICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsKLSAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFZlcnRleFNoYWRlcihOVUxMKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldEZWRihE
M0RGVkZfWFlaUkhXIHwgRDNERlZGX0RJRkZVU0UpOwotICAgICAgICAgICAgbURldmljZS0+U2V0
U3RyZWFtU291cmNlKDAsIE5VTEwsIDAsIDApOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsKLSAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUk9QLCBEM0RU
T1BfU0VMRUNUQVJHMSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0
ZSgwLCBEM0RUU1NfQ09MT1JBUkcxLCBEM0RUQV9URkFDVE9SKTsKLSAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19BTFBIQU9QLCBEM0RUT1BfU0VMRUNU
QVJHMSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RU
U1NfQUxQSEFBUkcxLCBEM0RUQV9URkFDVE9SKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX1RFWFRVUkVGQUNUT1IsIGNvbG9yKTsKLSAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExFTUFTSywgMHhGRkZGRkZGRik7Ci0K
LSAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBp
KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+U2V0U3RyZWFtU291
cmNlRnJlcShpLCAxKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaHIgPSBtRGV2aWNl
LT5FbmRTdGF0ZUJsb2NrKCZtTWFza2VkQ2xlYXJTYXZlZFN0YXRlKTsKLSAgICAgICAgICAgIEFT
U0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IGhy
ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKG1NYXNrZWRD
bGVhclNhdmVkU3RhdGUgIT0gTlVMTCk7Ci0KLSAgICAgICAgaWYgKG1NYXNrZWRDbGVhclNhdmVk
U3RhdGUgIT0gTlVMTCkKLSAgICAgICAgewotICAgICAgICAgICAgaHIgPSBtTWFza2VkQ2xlYXJT
YXZlZFN0YXRlLT5DYXB0dXJlKCk7Ci0gICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJ
VEVFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
WkZVTkMsIEQzRENNUF9BTFdBWVMpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19aRU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7Ci0gICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0UpOwotICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7Ci0gICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NMSVBQTEFORUVOQUJMRSwgMCk7Ci0K
LSAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldS
SVRFRU5BQkxFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6
Q29udmVydENvbG9yTWFzayhjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyUGFy
YW1zLmNvbG9yTWFza0dyZWVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tCbHVlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjbGVhclBhcmFtcy5jb2xvck1hc2tBbHBoYSkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09M
T1JXUklURUVOQUJMRSwgMCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3RlbmNpbFVubWFz
a2VkICE9IDB4MCAmJiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NU
RU5DSUxFTkFCTEUsIFRSVUUpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfVFdPU0lERURTVEVOQ0lMTU9ERSwgRkFMU0UpOwotICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEZVTkMsIEQzRENNUF9BTFdBWVMpOwotICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFJFRiwgc3RlbmNpbCk7
Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMV1JJVEVN
QVNLLCBjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrKTsKLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxGQUlMLCBEM0RTVEVOQ0lMT1BfUkVQTEFDRSk7
Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMWkZBSUws
IEQzRFNURU5DSUxPUF9SRVBMQUNFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1NURU5DSUxQQVNTLCBEM0RTVEVOQ0lMT1BfUkVQTEFDRSk7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBt
RGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsKLSAgICAgICAgbURldmljZS0+U2V0VmVydGV4
U2hhZGVyKE5VTEwpOwotICAgICAgICBtRGV2aWNlLT5TZXRGVkYoRDNERlZGX1hZWlJIVyk7Ci0g
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NFUEFSQVRFQUxQSEFCTEVOREVO
QUJMRSwgVFJVRSk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQz
RFRTU19DT0xPUk9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFRl
eHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUkFSRzEsIEQzRFRBX1RGQUNUT1IpOwotICAg
ICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQUxQSEFPUCwgRDNE
VE9QX1NFTEVDVEFSRzEpOwotICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgw
LCBEM0RUU1NfQUxQSEFBUkcxLCBEM0RUQV9URkFDVE9SKTsKLSAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfVEVYVFVSRUZBQ1RPUiwgY29sb3IpOwotICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRU1BU0ssIDB4RkZGRkZGRkYpOwotCi0g
ICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoaSwgMSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBmbG9hdCBxdWFkWzRdWzRdOyAgIC8vIEEgcXVhZHJpbGF0
ZXJhbCBjb3ZlcmluZyB0aGUgdGFyZ2V0LCBhbGlnbmVkIHRvIG1hdGNoIHRoZSBlZGdlcwotICAg
ICAgICBxdWFkWzBdWzBdID0gLTAuNWY7Ci0gICAgICAgIHF1YWRbMF1bMV0gPSBtUmVuZGVyVGFy
Z2V0RGVzYy5oZWlnaHQgLSAwLjVmOwotICAgICAgICBxdWFkWzBdWzJdID0gMC4wZjsKLSAgICAg
ICAgcXVhZFswXVszXSA9IDEuMGY7Ci0KLSAgICAgICAgcXVhZFsxXVswXSA9IG1SZW5kZXJUYXJn
ZXREZXNjLndpZHRoIC0gMC41ZjsKLSAgICAgICAgcXVhZFsxXVsxXSA9IG1SZW5kZXJUYXJnZXRE
ZXNjLmhlaWdodCAtIDAuNWY7Ci0gICAgICAgIHF1YWRbMV1bMl0gPSAwLjBmOwotICAgICAgICBx
dWFkWzFdWzNdID0gMS4wZjsKLQotICAgICAgICBxdWFkWzJdWzBdID0gLTAuNWY7Ci0gICAgICAg
IHF1YWRbMl1bMV0gPSAtMC41ZjsKLSAgICAgICAgcXVhZFsyXVsyXSA9IDAuMGY7Ci0gICAgICAg
IHF1YWRbMl1bM10gPSAxLjBmOwotCi0gICAgICAgIHF1YWRbM11bMF0gPSBtUmVuZGVyVGFyZ2V0
RGVzYy53aWR0aCAtIDAuNWY7Ci0gICAgICAgIHF1YWRbM11bMV0gPSAtMC41ZjsKLSAgICAgICAg
cXVhZFszXVsyXSA9IDAuMGY7Ci0gICAgICAgIHF1YWRbM11bM10gPSAxLjBmOwotCi0gICAgICAg
IHN0YXJ0U2NlbmUoKTsKLSAgICAgICAgbURldmljZS0+RHJhd1ByaW1pdGl2ZVVQKEQzRFBUX1RS
SUFOR0xFU1RSSVAsIDIsIHF1YWQsIHNpemVvZihmbG9hdFs0XSkpOwotCi0gICAgICAgIGlmIChj
bGVhclBhcmFtcy5tYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCkKLSAgICAgICAgewotICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgVFJVRSk7Ci0gICAg
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIFRSVUUp
OwotICAgICAgICAgICAgbURldmljZS0+Q2xlYXIoMCwgTlVMTCwgRDNEQ0xFQVJfWkJVRkZFUiwg
Y29sb3IsIGRlcHRoLCBzdGVuY2lsKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtTWFza2Vk
Q2xlYXJTYXZlZFN0YXRlICE9IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1NYXNrZWRD
bGVhclNhdmVkU3RhdGUtPkFwcGx5KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAo
Y2xlYXJQYXJhbXMubWFzaykKLSAgICB7Ci0gICAgICAgIERXT1JEIGR4Q2xlYXJGbGFncyA9IDA7
Ci0gICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkKLSAg
ICAgICAgewotICAgICAgICAgICAgZHhDbGVhckZsYWdzIHw9IEQzRENMRUFSX1RBUkdFVDsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0RFUFRIX0JVRkZFUl9C
SVQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGR4Q2xlYXJGbGFncyB8PSBEM0RDTEVBUl9aQlVG
RkVSOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfU1RFTkNJ
TF9CVUZGRVJfQklUKQotICAgICAgICB7Ci0gICAgICAgICAgICBkeENsZWFyRmxhZ3MgfD0gRDNE
Q0xFQVJfU1RFTkNJTDsKLSAgICAgICAgfQotCi0gICAgICAgIG1EZXZpY2UtPkNsZWFyKDAsIE5V
TEwsIGR4Q2xlYXJGbGFncywgY29sb3IsIGRlcHRoLCBzdGVuY2lsKTsKLSAgICB9Ci19Ci0KLXZv
aWQgUmVuZGVyZXI5OjptYXJrQWxsU3RhdGVEaXJ0eSgpCi17Ci0gICAgbUFwcGxpZWRSZW5kZXJU
YXJnZXRTZXJpYWwgPSAwOwotICAgIG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWwgPSAwOwotICAg
IG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCA9IDA7Ci0gICAgbURlcHRoU3RlbmNpbEluaXRp
YWxpemVkID0gZmFsc2U7Ci0gICAgbVJlbmRlclRhcmdldERlc2NJbml0aWFsaXplZCA9IGZhbHNl
OwotCi0gICAgbUZvcmNlU2V0RGVwdGhTdGVuY2lsU3RhdGUgPSB0cnVlOwotICAgIG1Gb3JjZVNl
dFJhc3RlclN0YXRlID0gdHJ1ZTsKLSAgICBtRm9yY2VTZXRTY2lzc29yID0gdHJ1ZTsKLSAgICBt
Rm9yY2VTZXRWaWV3cG9ydCA9IHRydWU7Ci0gICAgbUZvcmNlU2V0QmxlbmRTdGF0ZSA9IHRydWU7
Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9N
QVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IGkrKykKLSAgICB7Ci0gICAgICAgIG1Gb3Jj
ZVNldFZlcnRleFNhbXBsZXJTdGF0ZXNbaV0gPSB0cnVlOwotICAgICAgICBtQ3VyVmVydGV4VGV4
dHVyZVNlcmlhbHNbaV0gPSAwOwotICAgIH0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgaSsrKQotICAgIHsKLSAgICAgICAgbUZv
cmNlU2V0UGl4ZWxTYW1wbGVyU3RhdGVzW2ldID0gdHJ1ZTsKLSAgICAgICAgbUN1clBpeGVsVGV4
dHVyZVNlcmlhbHNbaV0gPSAwOwotICAgIH0KLQotICAgIG1BcHBsaWVkSUJTZXJpYWwgPSAwOwot
ICAgIG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbCA9IDA7Ci0gICAgbUR4VW5pZm9ybXNEaXJ0
eSA9IHRydWU7Ci0KLSAgICBtVmVydGV4RGVjbGFyYXRpb25DYWNoZS5tYXJrU3RhdGVEaXJ0eSgp
OwotfQotCi12b2lkIFJlbmRlcmVyOTo6cmVsZWFzZURldmljZVJlc291cmNlcygpCi17Ci0gICAg
d2hpbGUgKCFtRXZlbnRRdWVyeVBvb2wuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIG1FdmVudFF1
ZXJ5UG9vbC5iYWNrKCktPlJlbGVhc2UoKTsKLSAgICAgICAgbUV2ZW50UXVlcnlQb29sLnBvcF9i
YWNrKCk7Ci0gICAgfQotCi0gICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUpCi0gICAgewot
ICAgICAgICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1NYXNr
ZWRDbGVhclNhdmVkU3RhdGUgPSBOVUxMOwotICAgIH0KLQotICAgIG1WZXJ0ZXhTaGFkZXJDYWNo
ZS5jbGVhcigpOwotICAgIG1QaXhlbFNoYWRlckNhY2hlLmNsZWFyKCk7Ci0KLSAgICBkZWxldGUg
bUJsaXQ7Ci0gICAgbUJsaXQgPSBOVUxMOwotCi0gICAgZGVsZXRlIG1WZXJ0ZXhEYXRhTWFuYWdl
cjsKLSAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBOVUxMOwotCi0gICAgZGVsZXRlIG1JbmRleERh
dGFNYW5hZ2VyOwotICAgIG1JbmRleERhdGFNYW5hZ2VyID0gTlVMTDsKLQotICAgIGRlbGV0ZSBt
TGluZUxvb3BJQjsKLSAgICBtTGluZUxvb3BJQiA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IE5VTV9OVUxMX0NPTE9SQlVGRkVSX0NBQ0hFX0VOVFJJRVM7IGkrKykKLSAgICB7Ci0g
ICAgICAgIGRlbGV0ZSBtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0uYnVmZmVyOwotICAgICAgICBt
TnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0uYnVmZmVyID0gTlVMTDsKLSAgICB9Ci0KLX0KLQotCi12
b2lkIFJlbmRlcmVyOTo6bm90aWZ5RGV2aWNlTG9zdCgpCi17Ci0gICAgbURldmljZUxvc3QgPSB0
cnVlOwotICAgIG1EaXNwbGF5LT5ub3RpZnlEZXZpY2VMb3N0KCk7Ci19Ci0KLWJvb2wgUmVuZGVy
ZXI5Ojppc0RldmljZUxvc3QoKQotewotICAgIHJldHVybiBtRGV2aWNlTG9zdDsKLX0KLQotLy8g
c2V0IG5vdGlmeSB0byB0cnVlIHRvIGJyb2FkY2FzdCBhIG1lc3NhZ2UgdG8gYWxsIGNvbnRleHRz
IG9mIHRoZSBkZXZpY2UgbG9zcwotYm9vbCBSZW5kZXJlcjk6OnRlc3REZXZpY2VMb3N0KGJvb2wg
bm90aWZ5KQotewotICAgIEhSRVNVTFQgc3RhdHVzID0gU19PSzsKLQotICAgIGlmIChtRGV2aWNl
RXgpCi0gICAgewotICAgICAgICBzdGF0dXMgPSBtRGV2aWNlRXgtPkNoZWNrRGV2aWNlU3RhdGUo
TlVMTCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1EZXZpY2UpCi0gICAgewotICAgICAgICBzdGF0
dXMgPSBtRGV2aWNlLT5UZXN0Q29vcGVyYXRpdmVMZXZlbCgpOwotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgICAvLyBObyBkZXZpY2UgeWV0LCBzbyBubyByZXNldCByZXF1aXJlZAotICAg
IH0KLQotICAgIGJvb2wgaXNMb3N0ID0gRkFJTEVEKHN0YXR1cykgfHwgZDNkOTo6aXNEZXZpY2VM
b3N0RXJyb3Ioc3RhdHVzKTsKLQotICAgIGlmIChpc0xvc3QpCi0gICAgewotICAgICAgICAvLyBl
bnN1cmUgd2Ugbm90ZSB0aGUgZGV2aWNlIGxvc3MgLS0KLSAgICAgICAgLy8gd2UnbGwgcHJvYmFi
bHkgZ2V0IHRoaXMgZG9uZSBhZ2FpbiBieSBub3RpZnlEZXZpY2VMb3N0Ci0gICAgICAgIC8vIGJ1
dCBiZXN0IHRvIHJlbWVtYmVyIGl0IQotICAgICAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3Qgd2Fu
dCB0byBjbGVhciB0aGUgZGV2aWNlIGxvc3Mgc3RhdHVzIGhlcmUKLSAgICAgICAgLy8gLS0gdGhp
cyBuZWVkcyB0byBiZSBkb25lIGJ5IHJlc2V0RGV2aWNlCi0gICAgICAgIG1EZXZpY2VMb3N0ID0g
dHJ1ZTsKLSAgICAgICAgaWYgKG5vdGlmeSkKLSAgICAgICAgewotICAgICAgICAgICAgbm90aWZ5
RGV2aWNlTG9zdCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGlzTG9zdDsKLX0K
LQotYm9vbCBSZW5kZXJlcjk6OnRlc3REZXZpY2VSZXNldHRhYmxlKCkKLXsKLSAgICBIUkVTVUxU
IHN0YXR1cyA9IEQzRF9PSzsKLQotICAgIGlmIChtRGV2aWNlRXgpCi0gICAgewotICAgICAgICBz
dGF0dXMgPSBtRGV2aWNlRXgtPkNoZWNrRGV2aWNlU3RhdGUoTlVMTCk7Ci0gICAgfQotICAgIGVs
c2UgaWYgKG1EZXZpY2UpCi0gICAgewotICAgICAgICBzdGF0dXMgPSBtRGV2aWNlLT5UZXN0Q29v
cGVyYXRpdmVMZXZlbCgpOwotICAgIH0KLQotICAgIC8vIE9uIEQzRDlFeCwgREVWSUNFTE9TVCBy
ZXByZXNlbnRzIGEgaHVuZyBkZXZpY2UgdGhhdCBuZWVkcyB0byBiZSByZXN0YXJ0ZWQKLSAgICAv
LyBERVZJQ0VSRU1PVkVEIGluZGljYXRlcyB0aGUgZGV2aWNlIGhhcyBiZWVuIHN0b3BwZWQgYW5k
IG11c3QgYmUgcmVjcmVhdGVkCi0gICAgc3dpdGNoIChzdGF0dXMpCi0gICAgewotICAgICAgY2Fz
ZSBEM0RFUlJfREVWSUNFTk9UUkVTRVQ6Ci0gICAgICBjYXNlIEQzREVSUl9ERVZJQ0VIVU5HOgot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGNhc2UgRDNERVJSX0RFVklDRUxPU1Q6Ci0gICAg
ICAgIHJldHVybiAobURldmljZUV4ICE9IE5VTEwpOwotICAgICAgY2FzZSBEM0RFUlJfREVWSUNF
UkVNT1ZFRDoKLSAgICAgICAgVU5JTVBMRU1FTlRFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29s
IFJlbmRlcmVyOTo6cmVzZXREZXZpY2UoKQotewotICAgIHJlbGVhc2VEZXZpY2VSZXNvdXJjZXMo
KTsKLQotICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50UGFyYW1ldGVycyA9IGdldERl
ZmF1bHRQcmVzZW50UGFyYW1ldGVycygpOwotCi0gICAgSFJFU1VMVCByZXN1bHQgPSBEM0RfT0s7
Ci0gICAgYm9vbCBsb3N0ID0gdGVzdERldmljZUxvc3QoZmFsc2UpOwotICAgIGludCBhdHRlbXB0
cyA9IDM7Ci0KLSAgICB3aGlsZSAobG9zdCAmJiBhdHRlbXB0cyA+IDApCi0gICAgewotICAgICAg
ICBpZiAobURldmljZUV4KQotICAgICAgICB7Ci0gICAgICAgICAgICBTbGVlcCg1MDApOyAgIC8v
IEdpdmUgdGhlIGdyYXBoaWNzIGRyaXZlciBzb21lIENQVSB0aW1lCi0gICAgICAgICAgICByZXN1
bHQgPSBtRGV2aWNlRXgtPlJlc2V0RXgoJnByZXNlbnRQYXJhbWV0ZXJzLCBOVUxMKTsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZp
Y2UtPlRlc3RDb29wZXJhdGl2ZUxldmVsKCk7Ci0gICAgICAgICAgICB3aGlsZSAocmVzdWx0ID09
IEQzREVSUl9ERVZJQ0VMT1NUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNsZWVw
KDEwMCk7ICAgLy8gR2l2ZSB0aGUgZ3JhcGhpY3MgZHJpdmVyIHNvbWUgQ1BVIHRpbWUKLSAgICAg
ICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5UZXN0Q29vcGVyYXRpdmVMZXZlbCgpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9ERVZJQ0VOT1RS
RVNFVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5S
ZXNldCgmcHJlc2VudFBhcmFtZXRlcnMpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgbG9zdCA9IHRlc3REZXZpY2VMb3N0KGZhbHNlKTsKLSAgICAgICAgYXR0ZW1wdHMgLS07
Ci0gICAgfQotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgRVJSKCJS
ZXNldC9SZXNldEV4IGZhaWxlZCBtdWx0aXBsZSB0aW1lczogMHglMDhYIiwgcmVzdWx0KTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIHJlc2V0IGRldmljZSBkZWZhdWx0
cwotICAgIGluaXRpYWxpemVEZXZpY2UoKTsKLSAgICBtRGV2aWNlTG9zdCA9IGZhbHNlOwotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLURXT1JEIFJlbmRlcmVyOTo6Z2V0QWRhcHRlclZlbmRvcigp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1BZGFwdGVySWRlbnRpZmllci5WZW5kb3JJZDsKLX0KLQot
c3RkOjpzdHJpbmcgUmVuZGVyZXI5OjpnZXRSZW5kZXJlckRlc2NyaXB0aW9uKCkgY29uc3QKLXsK
LSAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gcmVuZGVyZXJTdHJpbmc7Ci0KLSAgICByZW5kZXJlclN0
cmluZyA8PCBtQWRhcHRlcklkZW50aWZpZXIuRGVzY3JpcHRpb247Ci0gICAgaWYgKGdldFNoYXJl
SGFuZGxlU3VwcG9ydCgpKQotICAgIHsKLSAgICAgICAgcmVuZGVyZXJTdHJpbmcgPDwgIiBEaXJl
Y3QzRDlFeCI7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJlbmRlcmVyU3RyaW5n
IDw8ICIgRGlyZWN0M0Q5IjsKLSAgICB9Ci0KLSAgICByZW5kZXJlclN0cmluZyA8PCAiIHZzXyIg
PDwgRDNEU0hBREVSX1ZFUlNJT05fTUFKT1IobURldmljZUNhcHMuVmVydGV4U2hhZGVyVmVyc2lv
bikgPDwgIl8iIDw8IEQzRFNIQURFUl9WRVJTSU9OX01JTk9SKG1EZXZpY2VDYXBzLlZlcnRleFNo
YWRlclZlcnNpb24pOwotICAgIHJlbmRlcmVyU3RyaW5nIDw8ICIgcHNfIiA8PCBEM0RTSEFERVJf
VkVSU0lPTl9NQUpPUihtRGV2aWNlQ2Fwcy5QaXhlbFNoYWRlclZlcnNpb24pIDw8ICJfIiA8PCBE
M0RTSEFERVJfVkVSU0lPTl9NSU5PUihtRGV2aWNlQ2Fwcy5QaXhlbFNoYWRlclZlcnNpb24pOwot
Ci0gICAgcmV0dXJuIHJlbmRlcmVyU3RyaW5nLnN0cigpOwotfQotCi1HVUlEIFJlbmRlcmVyOTo6
Z2V0QWRhcHRlcklkZW50aWZpZXIoKSBjb25zdAotewotICAgIHJldHVybiBtQWRhcHRlcklkZW50
aWZpZXIuRGV2aWNlSWRlbnRpZmllcjsKLX0KLQotdm9pZCBSZW5kZXJlcjk6OmdldE11bHRpU2Ft
cGxlU3VwcG9ydChEM0RGT1JNQVQgZm9ybWF0LCBib29sICptdWx0aVNhbXBsZUFycmF5KQotewot
ICAgIGZvciAoaW50IG11bHRpU2FtcGxlSW5kZXggPSAwOyBtdWx0aVNhbXBsZUluZGV4IDw9IEQz
RE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7IG11bHRpU2FtcGxlSW5kZXgrKykKLSAgICB7Ci0gICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQzZDktPkNoZWNrRGV2aWNlTXVsdGlTYW1wbGVUeXBlKG1B
ZGFwdGVyLCBtRGV2aWNlVHlwZSwgZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLCAoRDNETVVMVElTQU1QTEVfVFlQ
RSltdWx0aVNhbXBsZUluZGV4LCBOVUxMKTsKLQotICAgICAgICBtdWx0aVNhbXBsZUFycmF5W211
bHRpU2FtcGxlSW5kZXhdID0gU1VDQ0VFREVEKHJlc3VsdCk7Ci0gICAgfQotfQotCi1ib29sIFJl
bmRlcmVyOTo6Z2V0QkdSQVRleHR1cmVTdXBwb3J0KCkgY29uc3QKLXsKLSAgICAvLyBEaXJlY3RY
IDkgYWx3YXlzIHN1cHBvcnRzIEJHUkEKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBSZW5k
ZXJlcjk6OmdldERYVDFUZXh0dXJlU3VwcG9ydCgpCi17Ci0gICAgcmV0dXJuIG1EWFQxVGV4dHVy
ZVN1cHBvcnQ7Ci19Ci0KLWJvb2wgUmVuZGVyZXI5OjpnZXREWFQzVGV4dHVyZVN1cHBvcnQoKQot
ewotICAgIHJldHVybiBtRFhUM1RleHR1cmVTdXBwb3J0OwotfQotCi1ib29sIFJlbmRlcmVyOTo6
Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCkKLXsKLSAgICByZXR1cm4gbURYVDVUZXh0dXJlU3VwcG9y
dDsKLX0KLQotYm9vbCBSZW5kZXJlcjk6OmdldERlcHRoVGV4dHVyZVN1cHBvcnQoKSBjb25zdAot
ewotICAgIHJldHVybiBtRGVwdGhUZXh0dXJlU3VwcG9ydDsKLX0KLQotYm9vbCBSZW5kZXJlcjk6
OmdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFi
bGUpCi17Ci0gICAgKmZpbHRlcmluZyA9IG1GbG9hdDMyRmlsdGVyU3VwcG9ydDsKLSAgICAqcmVu
ZGVyYWJsZSA9IG1GbG9hdDMyUmVuZGVyU3VwcG9ydDsKLSAgICByZXR1cm4gbUZsb2F0MzJUZXh0
dXJlU3VwcG9ydDsKLX0KLQotYm9vbCBSZW5kZXJlcjk6OmdldEZsb2F0MTZUZXh0dXJlU3VwcG9y
dChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpCi17Ci0gICAgKmZpbHRlcmluZyA9
IG1GbG9hdDE2RmlsdGVyU3VwcG9ydDsKLSAgICAqcmVuZGVyYWJsZSA9IG1GbG9hdDE2UmVuZGVy
U3VwcG9ydDsKLSAgICByZXR1cm4gbUZsb2F0MTZUZXh0dXJlU3VwcG9ydDsKLX0KLQotYm9vbCBS
ZW5kZXJlcjk6OmdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCkKLXsKLSAgICByZXR1cm4gbUx1
bWluYW5jZVRleHR1cmVTdXBwb3J0OwotfQotCi1ib29sIFJlbmRlcmVyOTo6Z2V0THVtaW5hbmNl
QWxwaGFUZXh0dXJlU3VwcG9ydCgpCi17Ci0gICAgcmV0dXJuIG1MdW1pbmFuY2VBbHBoYVRleHR1
cmVTdXBwb3J0OwotfQotCi1ib29sIFJlbmRlcmVyOTo6Z2V0VGV4dHVyZUZpbHRlckFuaXNvdHJv
cHlTdXBwb3J0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzVGV4dHVyZUZpbHRlckFu
aXNvdHJvcHk7Ci19Ci0KLWZsb2F0IFJlbmRlcmVyOTo6Z2V0VGV4dHVyZU1heEFuaXNvdHJvcHko
KSBjb25zdAotewotICAgIGlmIChtU3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obURldmljZUNhcHMuTWF4QW5p
c290cm9weSk7Ci0gICAgfQotICAgIHJldHVybiAxLjBmOwotfQotCi1ib29sIFJlbmRlcmVyOTo6
Z2V0RXZlbnRRdWVyeVN1cHBvcnQoKQotewotICAgIHJldHVybiBtRXZlbnRRdWVyeVN1cHBvcnQ7
Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldE1heFZlcnRleFRleHR1cmVJbWFnZVVu
aXRzKCkgY29uc3QKLXsKLSAgICBNRVRBX0FTU0VSVChNQVhfVEVYVFVSRV9JTUFHRV9VTklUU19W
VEZfU00zIDw9IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5J
VFMpOwotICAgIHJldHVybiBtVmVydGV4VGV4dHVyZVN1cHBvcnQgPyBNQVhfVEVYVFVSRV9JTUFH
RV9VTklUU19WVEZfU00zIDogMDsKLX0KLQotdW5zaWduZWQgaW50IFJlbmRlcmVyOTo6Z2V0TWF4
Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdsOjpNQVhf
VEVYVFVSRV9JTUFHRV9VTklUUyArIGdldE1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCk7Ci19
Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldFJlc2VydmVkVmVydGV4VW5pZm9ybVZlY3Rv
cnMoKSBjb25zdAotewotICAgIHJldHVybiAyOyAgIC8vIGR4X1ZpZXdBZGp1c3QgYW5kIGR4X0Rl
cHRoUmFuZ2UuCi19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldFJlc2VydmVkRnJhZ21l
bnRVbmlmb3JtVmVjdG9ycygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDM7ICAgLy8gZHhfVmlld0Nv
b3JkcywgZHhfRGVwdGhGcm9udCBhbmQgZHhfRGVwdGhSYW5nZS4KLX0KLQotdW5zaWduZWQgaW50
IFJlbmRlcmVyOTo6Z2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKSBjb25zdAotewotICAgIHJl
dHVybiBNQVhfVkVSVEVYX0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOSAtIGdldFJlc2VydmVkVmVydGV4
VW5pZm9ybVZlY3RvcnMoKTsKLX0KLQotdW5zaWduZWQgaW50IFJlbmRlcmVyOTo6Z2V0TWF4RnJh
Z21lbnRVbmlmb3JtVmVjdG9ycygpIGNvbnN0Ci17Ci0gICAgY29uc3QgaW50IG1heFBpeGVsQ29u
c3RhbnRWZWN0b3JzID0gKGdldE1ham9yU2hhZGVyTW9kZWwoKSA+PSAzKSA/IE1BWF9QSVhFTF9D
T05TVEFOVF9WRUNUT1JTX1NNMyA6IE1BWF9QSVhFTF9DT05TVEFOVF9WRUNUT1JTX1NNMjsKLQot
ICAgIHJldHVybiBtYXhQaXhlbENvbnN0YW50VmVjdG9ycyAtIGdldFJlc2VydmVkRnJhZ21lbnRV
bmlmb3JtVmVjdG9ycygpOwotfQotCi11bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRNYXhWYXJ5
aW5nVmVjdG9ycygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChnZXRNYWpvclNoYWRlck1vZGVsKCkg
Pj0gMykgPyBNQVhfVkFSWUlOR19WRUNUT1JTX1NNMyA6IE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00y
OwotfQotCi1ib29sIFJlbmRlcmVyOTo6Z2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25z
dAotewotICAgIHJldHVybiBtU3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlczsKLX0KLQotYm9vbCBS
ZW5kZXJlcjk6OmdldE9jY2x1c2lvblF1ZXJ5U3VwcG9ydCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1PY2NsdXNpb25RdWVyeVN1cHBvcnQ7Ci19Ci0KLWJvb2wgUmVuZGVyZXI5OjpnZXRJbnN0YW5j
aW5nU3VwcG9ydCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVy
VmVyc2lvbiA+PSBEM0RQU19WRVJTSU9OKDMsIDApOwotfQotCi1ib29sIFJlbmRlcmVyOTo6Z2V0
U2hhcmVIYW5kbGVTdXBwb3J0KCkgY29uc3QKLXsKLSAgICAvLyBQSVggZG9lc24ndCBzZWVtIHRv
IHN1cHBvcnQgdXNpbmcgc2hhcmUgaGFuZGxlcywgc28gZGlzYWJsZSB0aGVtLgotICAgIHJldHVy
biAobUQzZDlFeCAhPSBOVUxMKSAmJiAhZ2w6OnBlcmZBY3RpdmUoKTsKLX0KLQotYm9vbCBSZW5k
ZXJlcjk6OmdldERlcml2YXRpdmVJbnN0cnVjdGlvblN1cHBvcnQoKSBjb25zdAotewotICAgIHJl
dHVybiAobURldmljZUNhcHMuUFMyMENhcHMuQ2FwcyAmIEQzRFBTMjBDQVBTX0dSQURJRU5USU5T
VFJVQ1RJT05TKSAhPSAwOwotfQotCi1ib29sIFJlbmRlcmVyOTo6Z2V0UG9zdFN1YkJ1ZmZlclN1
cHBvcnQoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi1pbnQgUmVuZGVyZXI5Ojpn
ZXRNYWpvclNoYWRlck1vZGVsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gRDNEU0hBREVSX1ZFUlNJ
T05fTUFKT1IobURldmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJzaW9uKTsKLX0KLQotZmxvYXQgUmVu
ZGVyZXI5OjpnZXRNYXhQb2ludFNpemUoKSBjb25zdAotewotICAgIC8vIFBvaW50IHNpemUgY2xh
bXBlZCBhdCAxLjBmIGZvciBTTTIKLSAgICByZXR1cm4gZ2V0TWFqb3JTaGFkZXJNb2RlbCgpID09
IDMgPyBtRGV2aWNlQ2Fwcy5NYXhQb2ludFNpemUgOiAxLjBmOwotfQotCi1pbnQgUmVuZGVyZXI5
OjpnZXRNYXhWaWV3cG9ydERpbWVuc2lvbigpIGNvbnN0Ci17Ci0gICAgaW50IG1heFRleHR1cmVE
aW1lbnNpb24gPSBzdGQ6Om1pbihzdGQ6Om1pbihnZXRNYXhUZXh0dXJlV2lkdGgoKSwgZ2V0TWF4
VGV4dHVyZUhlaWdodCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX1NJWkUpOwotICAgIHJldHVybiBt
YXhUZXh0dXJlRGltZW5zaW9uOwotfQotCi1pbnQgUmVuZGVyZXI5OjpnZXRNYXhUZXh0dXJlV2lk
dGgoKSBjb25zdAotewotICAgIHJldHVybiAoaW50KW1EZXZpY2VDYXBzLk1heFRleHR1cmVXaWR0
aDsKLX0KLQotaW50IFJlbmRlcmVyOTo6Z2V0TWF4VGV4dHVyZUhlaWdodCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIChpbnQpbURldmljZUNhcHMuTWF4VGV4dHVyZUhlaWdodDsKLX0KLQotYm9vbCBS
ZW5kZXJlcjk6OmdldDMyQml0SW5kZXhTdXBwb3J0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbURl
dmljZUNhcHMuTWF4VmVydGV4SW5kZXggPj0gKDEgPDwgMTYpOwotfQotCi1EV09SRCBSZW5kZXJl
cjk6OmdldENhcHNEZWNsVHlwZXMoKSBjb25zdAotewotICAgIHJldHVybiBtRGV2aWNlQ2Fwcy5E
ZWNsVHlwZXM7Ci19Ci0KLWludCBSZW5kZXJlcjk6OmdldE1pblN3YXBJbnRlcnZhbCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1NaW5Td2FwSW50ZXJ2YWw7Ci19Ci0KLWludCBSZW5kZXJlcjk6Omdl
dE1heFN3YXBJbnRlcnZhbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1NYXhTd2FwSW50ZXJ2YWw7
Ci19Ci0KLWludCBSZW5kZXJlcjk6OmdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSBjb25zdAotewot
ICAgIHJldHVybiBtTWF4U3VwcG9ydGVkU2FtcGxlczsKLX0KLQotaW50IFJlbmRlcmVyOTo6Z2V0
TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMoRDNERk9STUFUIGZvcm1hdCwgaW50IHJlcXVlc3RlZCkg
Y29uc3QKLXsKLSAgICBpZiAocmVxdWVzdGVkID09IDApCi0gICAgewotICAgICAgICByZXR1cm4g
cmVxdWVzdGVkOwotICAgIH0KLQotICAgIHN0ZDo6bWFwPEQzREZPUk1BVCwgYm9vbCAqPjo6Y29u
c3RfaXRlcmF0b3IgaXRyID0gbU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7Ci0gICAg
aWYgKGl0ciA9PSBtTXVsdGlTYW1wbGVTdXBwb3J0LmVuZCgpKQotICAgIHsKLSAgICAgICAgaWYg
KGZvcm1hdCA9PSBEM0RGTVRfVU5LTk9XTikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IHJlcXVlc3RlZDsgaSA8PSBE
M0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTOyArK2kpCi0gICAgewotICAgICAgICBpZiAoaXRyLT5z
ZWNvbmRbaV0gJiYgaSAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7
Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldE1heFJlbmRlclRhcmdldHMoKSBjb25z
dAotewotICAgIC8vIHdlIGRvIG5vdCBzdXBwb3J0IE1SVCBpbiBkM2Q5Ci0gICAgcmV0dXJuIDE7
Ci19Ci0KLUQzREZPUk1BVCBSZW5kZXJlcjk6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQo
R0xpbnQgaW50ZXJuYWxmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKLSAg
ICB7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgY2FzZSBHTF9ERVBU
SF9DT01QT05FTlQzMl9PRVM6Ci0gICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgot
ICAgICAgICByZXR1cm4gRDNERk1UX0lOVFo7Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdC
X1MzVENfRFhUMV9FWFQ6Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFf
RVhUOgotICAgICAgICByZXR1cm4gRDNERk1UX0RYVDE7Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNT
RURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6Ci0gICAgICAgIHJldHVybiBEM0RGTVRfRFhUMzsKLSAg
ICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKLSAgICAgICAgcmV0
dXJuIEQzREZNVF9EWFQ1OwotICAgICAgY2FzZSBHTF9SR0JBMzJGX0VYVDoKLSAgICAgIGNhc2Ug
R0xfUkdCMzJGX0VYVDoKLSAgICAgIGNhc2UgR0xfQUxQSEEzMkZfRVhUOgotICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0UzMkZfRVhUOgotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhU
OgotICAgICAgICByZXR1cm4gRDNERk1UX0EzMkIzMkczMlIzMkY7Ci0gICAgICBjYXNlIEdMX1JH
QkExNkZfRVhUOgotICAgICAgY2FzZSBHTF9SR0IxNkZfRVhUOgotICAgICAgY2FzZSBHTF9BTFBI
QTE2Rl9FWFQ6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6Ci0gICAgICBjYXNlIEdM
X0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6Ci0gICAgICAgIHJldHVybiBEM0RGTVRfQTE2QjE2RzE2
UjE2RjsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOF9FWFQ6Ci0gICAgICAgIGlmIChnZXRMdW1p
bmFuY2VUZXh0dXJlU3VwcG9ydCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRDNE
Rk1UX0w4OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFO
Q0U4X0FMUEhBOF9FWFQ6Ci0gICAgICAgIGlmIChnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBw
b3J0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBEM0RGTVRfQThMODsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6Ci0gICAgICBjYXNl
IEdMX1JHQjU2NToKLSAgICAgICAgcmV0dXJuIEQzREZNVF9YOFI4RzhCODsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gRDNERk1UX0E4UjhHOEI4OwotfQotCi1ib29sIFJlbmRlcmVyOTo6Y29weVRvUmVu
ZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKmRlc3QsIFRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlMkQgKnNvdXJjZSkKLXsKLSAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotCi0gICAg
aWYgKHNvdXJjZSAmJiBkZXN0KQotICAgIHsKLSAgICAgICAgVGV4dHVyZVN0b3JhZ2U5XzJEICpz
b3VyY2U5ID0gVGV4dHVyZVN0b3JhZ2U5XzJEOjptYWtlVGV4dHVyZVN0b3JhZ2U5XzJEKHNvdXJj
ZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwotICAgICAgICBUZXh0dXJlU3RvcmFnZTlfMkQgKmRl
c3Q5ID0gVGV4dHVyZVN0b3JhZ2U5XzJEOjptYWtlVGV4dHVyZVN0b3JhZ2U5XzJEKGRlc3QtPmdl
dFN0b3JhZ2VJbnN0YW5jZSgpKTsKLQotICAgICAgICBpbnQgbGV2ZWxzID0gc291cmNlOS0+bGV2
ZWxDb3VudCgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxldmVsczsgKytpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3JjU3VyZiA9IHNvdXJjZTkt
PmdldFN1cmZhY2VMZXZlbChpLCBmYWxzZSk7Ci0gICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqZHN0U3VyZiA9IGRlc3Q5LT5nZXRTdXJmYWNlTGV2ZWwoaSwgZmFsc2UpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICByZXN1bHQgPSBjb3B5VG9SZW5kZXJUYXJnZXQoZHN0U3VyZiwgc3Jj
U3VyZiwgc291cmNlOS0+aXNNYW5hZ2VkKCkpOwotCi0gICAgICAgICAgICBpZiAoc3JjU3VyZikg
c3JjU3VyZi0+UmVsZWFzZSgpOwotICAgICAgICAgICAgaWYgKGRzdFN1cmYpIGRzdFN1cmYtPlJl
bGVhc2UoKTsKLQotICAgICAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
Ym9vbCBSZW5kZXJlcjk6OmNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZUN1YmUgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc291cmNlKQotewotICAg
IGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0KLSAgICBpZiAoc291cmNlICYmIGRlc3QpCi0gICAgewot
ICAgICAgICBUZXh0dXJlU3RvcmFnZTlfQ3ViZSAqc291cmNlOSA9IFRleHR1cmVTdG9yYWdlOV9D
dWJlOjptYWtlVGV4dHVyZVN0b3JhZ2U5X0N1YmUoc291cmNlLT5nZXRTdG9yYWdlSW5zdGFuY2Uo
KSk7Ci0gICAgICAgIFRleHR1cmVTdG9yYWdlOV9DdWJlICpkZXN0OSA9IFRleHR1cmVTdG9yYWdl
OV9DdWJlOjptYWtlVGV4dHVyZVN0b3JhZ2U5X0N1YmUoZGVzdC0+Z2V0U3RvcmFnZUluc3RhbmNl
KCkpOwotICAgICAgICBpbnQgbGV2ZWxzID0gc291cmNlOS0+bGV2ZWxDb3VudCgpOwotICAgICAg
ICBmb3IgKGludCBmID0gMDsgZiA8IDY7IGYrKykKLSAgICAgICAgewotICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBsZXZlbHM7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3JjU3VyZiA9IHNvdXJjZTktPmdldEN1YmVNYXBTdXJm
YWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGYsIGksIGZhbHNlKTsKLSAgICAg
ICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZHN0U3VyZiA9IGRlc3Q5LT5nZXRDdWJlTWFw
U3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmLCBpLCB0cnVlKTsKLQot
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvcHlUb1JlbmRlclRhcmdldChkc3RTdXJmLCBzcmNT
dXJmLCBzb3VyY2U5LT5pc01hbmFnZWQoKSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc3JjU3Vy
Zikgc3JjU3VyZi0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIGlmIChkc3RTdXJmKSBkc3RT
dXJmLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotRDNEUE9PTCBSZW5kZXJlcjk6OmdldEJ1ZmZl
clBvb2woRFdPUkQgdXNhZ2UpIGNvbnN0Ci17Ci0gICAgaWYgKG1EM2Q5RXggIT0gTlVMTCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBEM0RQT09MX0RFRkFVTFQ7Ci0gICAgfQotICAgIGVsc2UKLSAg
ICB7Ci0gICAgICAgIGlmICghKHVzYWdlICYgRDNEVVNBR0VfRFlOQU1JQykpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBEM0RQT09MX01BTkFHRUQ7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gRDNEUE9PTF9ERUZBVUxUOwotfQotCi1ib29sIFJlbmRlcmVyOTo6Y29weUlt
YWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNv
dXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpz
dG9yYWdlLCBHTGludCBsZXZlbCkKLXsKLSAgICBSRUNUIHJlY3Q7Ci0gICAgcmVjdC5sZWZ0ID0g
c291cmNlUmVjdC54OwotICAgIHJlY3QudG9wID0gc291cmNlUmVjdC55OwotICAgIHJlY3Qucmln
aHQgPSBzb3VyY2VSZWN0LnggKyBzb3VyY2VSZWN0LndpZHRoOwotICAgIHJlY3QuYm90dG9tID0g
c291cmNlUmVjdC55ICsgc291cmNlUmVjdC5oZWlnaHQ7Ci0KLSAgICByZXR1cm4gbUJsaXQtPmNv
cHkoZnJhbWVidWZmZXIsIHJlY3QsIGRlc3RGb3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQsIHN0b3Jh
Z2UsIGxldmVsKTsKLX0KLQotYm9vbCBSZW5kZXJlcjk6OmNvcHlJbWFnZShnbDo6RnJhbWVidWZm
ZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0g
ZGVzdEZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCkKLXsKLSAgICBSRUNUIHJlY3Q7Ci0gICAgcmVjdC5sZWZ0ID0g
c291cmNlUmVjdC54OwotICAgIHJlY3QudG9wID0gc291cmNlUmVjdC55OwotICAgIHJlY3Qucmln
aHQgPSBzb3VyY2VSZWN0LnggKyBzb3VyY2VSZWN0LndpZHRoOwotICAgIHJlY3QuYm90dG9tID0g
c291cmNlUmVjdC55ICsgc291cmNlUmVjdC5oZWlnaHQ7Ci0KLSAgICByZXR1cm4gbUJsaXQtPmNv
cHkoZnJhbWVidWZmZXIsIHJlY3QsIGRlc3RGb3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQsIHN0b3Jh
Z2UsIHRhcmdldCwgbGV2ZWwpOwotfQotCi1ib29sIFJlbmRlcmVyOTo6YmxpdFJlY3QoZ2w6OkZy
YW1lYnVmZmVyICpyZWFkRnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRSZWN0
LCBnbDo6RnJhbWVidWZmZXIgKmRyYXdGcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAm
ZHJhd1JlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0
LCBib29sIGJsaXREZXB0aFN0ZW5jaWwpCi17Ci0gICAgZW5kU2NlbmUoKTsKLQotICAgIGlmIChi
bGl0UmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVhZEJ1
ZmZlciA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoMCk7Ci0gICAgICAgIGdsOjpS
ZW5kZXJidWZmZXIgKmRyYXdCdWZmZXIgPSBkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVy
KDApOwotICAgICAgICBSZW5kZXJUYXJnZXQ5ICpyZWFkUmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAg
ICAgICAgUmVuZGVyVGFyZ2V0OSAqZHJhd1JlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgICAgIElE
aXJlY3QzRFN1cmZhY2U5KiByZWFkU3VyZmFjZSA9IE5VTEw7Ci0gICAgICAgIElEaXJlY3QzRFN1
cmZhY2U5KiBkcmF3U3VyZmFjZSA9IE5VTEw7Ci0KLSAgICAgICAgaWYgKHJlYWRCdWZmZXIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJlYWRSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQ5Ojpt
YWtlUmVuZGVyVGFyZ2V0OShyZWFkQnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSk7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKGRyYXdCdWZmZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRyYXdS
ZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShkcmF3QnVmZmVy
LT5nZXRSZW5kZXJUYXJnZXQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVhZFJlbmRl
clRhcmdldCkKLSAgICAgICAgewotICAgICAgICAgICAgcmVhZFN1cmZhY2UgPSByZWFkUmVuZGVy
VGFyZ2V0LT5nZXRTdXJmYWNlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGRyYXdSZW5kZXJU
YXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRyYXdTdXJmYWNlID0gZHJhd1JlbmRlclRh
cmdldC0+Z2V0U3VyZmFjZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFyZWFkU3VyZmFj
ZSB8fCAhZHJhd1N1cmZhY2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiRmFpbGVkIHRv
IHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOwotICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBSRUNU
IHNyY1JlY3Q7Ci0gICAgICAgIHNyY1JlY3QubGVmdCA9IHJlYWRSZWN0Lng7Ci0gICAgICAgIHNy
Y1JlY3QucmlnaHQgPSByZWFkUmVjdC54ICsgcmVhZFJlY3Qud2lkdGg7Ci0gICAgICAgIHNyY1Jl
Y3QudG9wID0gcmVhZFJlY3QueTsKLSAgICAgICAgc3JjUmVjdC5ib3R0b20gPSByZWFkUmVjdC55
ICsgcmVhZFJlY3QuaGVpZ2h0OwotCi0gICAgICAgIFJFQ1QgZHN0UmVjdDsKLSAgICAgICAgZHN0
UmVjdC5sZWZ0ID0gZHJhd1JlY3QueDsKLSAgICAgICAgZHN0UmVjdC5yaWdodCA9IGRyYXdSZWN0
LnggKyBkcmF3UmVjdC53aWR0aDsKLSAgICAgICAgZHN0UmVjdC50b3AgPSBkcmF3UmVjdC55Owot
ICAgICAgICBkc3RSZWN0LmJvdHRvbSA9IGRyYXdSZWN0LnkgKyBkcmF3UmVjdC5oZWlnaHQ7Ci0K
LSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5TdHJldGNoUmVjdChyZWFkU3VyZmFj
ZSwgJnNyY1JlY3QsIGRyYXdTdXJmYWNlLCAmZHN0UmVjdCwgRDNEVEVYRl9OT05FKTsKLQotICAg
ICAgICByZWFkU3VyZmFjZS0+UmVsZWFzZSgpOwotICAgICAgICBkcmF3U3VyZmFjZS0+UmVsZWFz
ZSgpOwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAg
ICAgRVJSKCJCbGl0RnJhbWVidWZmZXJBTkdMRSBmYWlsZWQ6IFN0cmV0Y2hSZWN0IHJldHVybmVk
ICV4LiIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAoYmxpdERlcHRoU3RlbmNpbCkKLSAgICB7Ci0gICAgICAgIGdsOjpSZW5k
ZXJidWZmZXIgKnJlYWRCdWZmZXIgPSByZWFkRnJhbWVidWZmZXItPmdldERlcHRoT3JTdGVuY2ls
YnVmZmVyKCk7Ci0gICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmRyYXdCdWZmZXIgPSBkcmF3RnJh
bWVidWZmZXItPmdldERlcHRoT3JTdGVuY2lsYnVmZmVyKCk7Ci0gICAgICAgIFJlbmRlclRhcmdl
dDkgKnJlYWREZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgICAgICBSZW5kZXJUYXJnZXQ5ICpkcmF3
RGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkqIHJlYWRTdXJm
YWNlID0gTlVMTDsKLSAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkqIGRyYXdTdXJmYWNlID0gTlVM
TDsKLQotICAgICAgICBpZiAocmVhZEJ1ZmZlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmVh
ZERlcHRoU3RlbmNpbCA9IFJlbmRlclRhcmdldDk6Om1ha2VSZW5kZXJUYXJnZXQ5KHJlYWRCdWZm
ZXItPmdldERlcHRoU3RlbmNpbCgpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZHJhd0J1ZmZl
cikKLSAgICAgICAgewotICAgICAgICAgICAgZHJhd0RlcHRoU3RlbmNpbCA9IFJlbmRlclRhcmdl
dDk6Om1ha2VSZW5kZXJUYXJnZXQ5KGRyYXdCdWZmZXItPmdldERlcHRoU3RlbmNpbCgpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChyZWFkRGVwdGhTdGVuY2lsKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZWFkU3VyZmFjZSA9IHJlYWREZXB0aFN0ZW5jaWwtPmdldFN1cmZhY2UoKTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoZHJhd0RlcHRoU3RlbmNpbCkKLSAgICAgICAgewotICAgICAg
ICAgICAgZHJhd1N1cmZhY2UgPSBkcmF3RGVwdGhTdGVuY2lsLT5nZXRTdXJmYWNlKCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoIXJlYWRTdXJmYWNlIHx8ICFkcmF3U3VyZmFjZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJn
ZXQuIik7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZh
bHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+U3Ry
ZXRjaFJlY3QocmVhZFN1cmZhY2UsIE5VTEwsIGRyYXdTdXJmYWNlLCBOVUxMLCBEM0RURVhGX05P
TkUpOwotCi0gICAgICAgIHJlYWRTdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgICAgIGRyYXdTdXJm
YWNlLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBFUlIoIkJsaXRGcmFtZWJ1ZmZlckFOR0xFIGZhaWxlZDogU3RyZXRjaFJl
Y3QgcmV0dXJuZWQgJXguIiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFJlbmRlcmVyOTo6
cmVhZFBpeGVscyhnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBHTGludCB4LCBHTGludCB5
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBvdXRwdXRQaXRjaCwgYm9v
bCBwYWNrUmV2ZXJzZVJvd09yZGVyLCBHTGludCBwYWNrQWxpZ25tZW50LCB2b2lkKiBwaXhlbHMp
Ci17Ci0gICAgUmVuZGVyVGFyZ2V0OSAqcmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqc3VyZmFjZSA9IE5VTEw7Ci0gICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3Ji
dWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoMCk7Ci0KLSAgICBpZiAoY29sb3Ji
dWZmZXIpCi0gICAgewotICAgICAgICByZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQ5OjptYWtl
UmVuZGVyVGFyZ2V0OShjb2xvcmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOwotICAgIH0KLSAg
ICAKLSAgICBpZiAocmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgc3VyZmFjZSA9IHJlbmRl
clRhcmdldC0+Z2V0U3VyZmFjZSgpOwotICAgIH0KLQotICAgIGlmICghc3VyZmFjZSkKLSAgICB7
Ci0gICAgICAgIC8vIGNvbnRleHQgbXVzdCBiZSBsb3N0Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKLSAgICBzdXJmYWNlLT5HZXREZXNjKCZkZXNj
KTsKLQotICAgIGlmIChkZXNjLk11bHRpU2FtcGxlVHlwZSAhPSBEM0RNVUxUSVNBTVBMRV9OT05F
KQotICAgIHsKLSAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FOiBSZXF1aXJlcyBy
ZXNvbHZlIHVzaW5nIFN0cmV0Y2hSZWN0IGludG8gbm9uLW11bHRpc2FtcGxlZCByZW5kZXIgdGFy
Z2V0Ci0gICAgICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICBIUkVTVUxUIHJlc3VsdDsKLSAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqc3lzdGVtU3VyZmFjZSA9IE5VTEw7Ci0gICAgYm9vbCBkaXJlY3RU
b1BpeGVscyA9ICFwYWNrUmV2ZXJzZVJvd09yZGVyICYmIHBhY2tBbGlnbm1lbnQgPD0gNCAmJiBn
ZXRTaGFyZUhhbmRsZVN1cHBvcnQoKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICB4ID09
IDAgJiYgeSA9PSAwICYmIFVJTlQod2lkdGgpID09IGRlc2MuV2lkdGggJiYgVUlOVChoZWlnaHQp
ID09IGRlc2MuSGVpZ2h0ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MuRm9ybWF0
ID09IEQzREZNVF9BOFI4RzhCOCAmJiBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYgdHlwZSA9PSBH
TF9VTlNJR05FRF9CWVRFOwotICAgIGlmIChkaXJlY3RUb1BpeGVscykKLSAgICB7Ci0gICAgICAg
IC8vIFVzZSB0aGUgcGl4ZWxzIHB0ciBhcyBhIHNoYXJlZCBoYW5kbGUgdG8gd3JpdGUgZGlyZWN0
bHkgaW50byBjbGllbnQncyBtZW1vcnkKLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRl
T2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBkZXNjLkZvcm1h
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEQzRFBPT0xfU1lTVEVNTUVNLCAmc3lzdGVtU3VyZmFjZSwgJnBpeGVscyk7Ci0gICAgICAgIGlm
IChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gVHJ5IGFnYWluIHdp
dGhvdXQgdGhlIHNoYXJlZCBoYW5kbGUKLSAgICAgICAgICAgIGRpcmVjdFRvUGl4ZWxzID0gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWRpcmVjdFRvUGl4ZWxzKQotICAgIHsK
LSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRl
c2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBkZXNjLkZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFBPT0xfU1lTVEVNTUVNLCAmc3lz
dGVtU3VyZmFjZSwgTlVMTCk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAg
ewotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8
fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgICAgICBzdXJmYWNlLT5SZWxlYXNl
KCk7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gbURldmljZS0+R2V0UmVuZGVyVGFyZ2V0RGF0
YShzdXJmYWNlLCBzeXN0ZW1TdXJmYWNlKTsKLSAgICBzdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAg
c3VyZmFjZSA9IE5VTEw7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAg
ICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgLy8gSXQgdHVybnMgb3V0IHRo
YXQgRDNEIHdpbGwgc29tZXRpbWVzIHByb2R1Y2UgbW9yZSBlcnJvcgotICAgICAgICAvLyBjb2Rl
cyB0aGFuIHRob3NlIGRvY3VtZW50ZWQuCi0gICAgICAgIGlmIChkM2Q5Ojppc0RldmljZUxvc3RF
cnJvcihyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBub3RpZnlEZXZpY2VMb3N0KCk7
Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgfQotCi0gICAgaWYgKGRpcmVj
dFRvUGl4ZWxzKQotICAgIHsKLSAgICAgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUkVDVCByZWN0OwotICAgIHJlY3QubGVmdCA9IGds
OjpjbGFtcCh4LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVzYy5XaWR0aCkpOwotICAgIHJlY3Qu
dG9wID0gZ2w6OmNsYW1wKHksIDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNjLkhlaWdodCkpOwot
ICAgIHJlY3QucmlnaHQgPSBnbDo6Y2xhbXAoeCArIHdpZHRoLCAwTCwgc3RhdGljX2Nhc3Q8TE9O
Rz4oZGVzYy5XaWR0aCkpOwotICAgIHJlY3QuYm90dG9tID0gZ2w6OmNsYW1wKHkgKyBoZWlnaHQs
IDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNjLkhlaWdodCkpOwotCi0gICAgRDNETE9DS0VEX1JF
Q1QgbG9jazsKLSAgICByZXN1bHQgPSBzeXN0ZW1TdXJmYWNlLT5Mb2NrUmVjdCgmbG9jaywgJnJl
Y3QsIEQzRExPQ0tfUkVBRE9OTFkpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsK
LSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgp
OwotCi0gICAgICAgIHJldHVybjsgICAvLyBObyBzZW5zaWJsZSBlcnJvciB0byBnZW5lcmF0ZQot
ICAgIH0KLQotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSAodW5zaWduZWQgY2hhciopcGl4ZWxz
OwotICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0MTYgPSAodW5zaWduZWQgc2hvcnQqKXBpeGVsczsK
LQotICAgIHVuc2lnbmVkIGNoYXIgKnNvdXJjZTsKLSAgICBpbnQgaW5wdXRQaXRjaDsKLSAgICBp
ZiAocGFja1JldmVyc2VSb3dPcmRlcikKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9ICgodW5zaWdu
ZWQgY2hhciopbG9jay5wQml0cykgKyBsb2NrLlBpdGNoICogKHJlY3QuYm90dG9tIC0gcmVjdC50
b3AgLSAxKTsKLSAgICAgICAgaW5wdXRQaXRjaCA9IC1sb2NrLlBpdGNoOwotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICBzb3VyY2UgPSAodW5zaWduZWQgY2hhciopbG9jay5wQml0czsK
LSAgICAgICAgaW5wdXRQaXRjaCA9IGxvY2suUGl0Y2g7Ci0gICAgfQotCi0gICAgdW5zaWduZWQg
aW50IGZhc3RQaXhlbFNpemUgPSAwOwotCi0gICAgaWYgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9B
OFI4RzhCOCAmJgotICAgICAgICBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYKLSAgICAgICAgdHlw
ZSA9PSBHTF9VTlNJR05FRF9CWVRFKQotICAgIHsKLSAgICAgICAgZmFzdFBpeGVsU2l6ZSA9IDQ7
Ci0gICAgfQotICAgIGVsc2UgaWYgKChkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQTRSNEc0QjQgJiYK
LSAgICAgICAgICAgICBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYKLSAgICAgICAgICAgICB0eXBl
ID09IEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVCkgfHwKLSAgICAgICAgICAgICAo
ZGVzYy5Gb3JtYXQgPT0gRDNERk1UX0ExUjVHNUI1ICYmCi0gICAgICAgICAgICAgZm9ybWF0ID09
IEdMX0JHUkFfRVhUICYmCi0gICAgICAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9TSE9SVF8x
XzVfNV81X1JFVl9FWFQpKQotICAgIHsKLSAgICAgICAgZmFzdFBpeGVsU2l6ZSA9IDI7Ci0gICAg
fQotICAgIGVsc2UgaWYgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BMTZCMTZHMTZSMTZGICYmCi0g
ICAgICAgICAgICAgZm9ybWF0ID09IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICB0eXBlID09IEdM
X0hBTEZfRkxPQVRfT0VTKQotICAgIHsKLSAgICAgICAgZmFzdFBpeGVsU2l6ZSA9IDg7Ci0gICAg
fQotICAgIGVsc2UgaWYgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BMzJCMzJHMzJSMzJGICYmCi0g
ICAgICAgICAgICAgZm9ybWF0ID09IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICB0eXBlID09IEdM
X0ZMT0FUKQotICAgIHsKLSAgICAgICAgZmFzdFBpeGVsU2l6ZSA9IDE2OwotICAgIH0KLQotICAg
IGZvciAoaW50IGogPSAwOyBqIDwgcmVjdC5ib3R0b20gLSByZWN0LnRvcDsgaisrKQotICAgIHsK
LSAgICAgICAgaWYgKGZhc3RQaXhlbFNpemUgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAg
Ly8gRmFzdCBwYXRoIGZvciBmb3JtYXRzIHdoaWNoIHJlcXVpcmUgbm8gdHJhbnNsYXRpb246Ci0g
ICAgICAgICAgICAvLyBEM0RGTVRfQThSOEc4QjggdG8gQkdSQS9VTlNJR05FRF9CWVRFCi0gICAg
ICAgICAgICAvLyBEM0RGTVRfQTRSNEc0QjQgdG8gQkdSQS9VTlNJR05FRF9TSE9SVF80XzRfNF80
X1JFVl9FWFQKLSAgICAgICAgICAgIC8vIEQzREZNVF9BMVI1RzVCNSB0byBCR1JBL1VOU0lHTkVE
X1NIT1JUXzFfNV81XzVfUkVWX0VYVAotICAgICAgICAgICAgLy8gRDNERk1UX0ExNkIxNkcxNlIx
NkYgdG8gUkdCQS9IQUxGX0ZMT0FUX09FUwotICAgICAgICAgICAgLy8gRDNERk1UX0EzMkIzMkcz
MlIzMkYgdG8gUkdCQS9GTE9BVAotICAgICAgICAgICAgLy8gCi0gICAgICAgICAgICAvLyBOb3Rl
IHRoYXQgYnVmZmVycyB3aXRoIG5vIGFscGhhIGdvIHRocm91Z2ggdGhlIHNsb3cgcGF0aCBiZWxv
dy4KLSAgICAgICAgICAgIG1lbWNweShkZXN0ICsgaiAqIG91dHB1dFBpdGNoLAotICAgICAgICAg
ICAgICAgICAgIHNvdXJjZSArIGogKiBpbnB1dFBpdGNoLAotICAgICAgICAgICAgICAgICAgIChy
ZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0KSAqIGZhc3RQaXhlbFNpemUpOwotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoZGVzYy5Gb3JtYXQgPT0gRDNERk1U
X0E4UjhHOEI4ICYmCi0gICAgICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9SR0JBICYmCi0gICAg
ICAgICAgICAgICAgIHR5cGUgPT0gR0xfVU5TSUdORURfQllURSkKLSAgICAgICAgewotICAgICAg
ICAgICAgLy8gRmFzdCBwYXRoIGZvciBzd2FwcGluZyByZWQgd2l0aCBibHVlCi0gICAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3QucmlnaHQgLSByZWN0LmxlZnQ7IGkrKykKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQg
aW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7Ci0gICAgICAgICAgICAgICAg
Kih1bnNpZ25lZCBpbnQqKShkZXN0ICsgNCAqIGkgKyBqICogb3V0cHV0UGl0Y2gpID0KLSAgICAg
ICAgICAgICAgICAgICAgKGFyZ2IgJiAweEZGMDBGRjAwKSB8ICAgICAgIC8vIEtlZXAgYWxwaGEg
YW5kIGdyZWVuCi0gICAgICAgICAgICAgICAgICAgIChhcmdiICYgMHgwMEZGMDAwMCkgPj4gMTYg
fCAvLyBNb3ZlIHJlZCB0byBibHVlCi0gICAgICAgICAgICAgICAgICAgIChhcmdiICYgMHgwMDAw
MDBGRikgPDwgMTY7ICAvLyBNb3ZlIGJsdWUgdG8gcmVkCi0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
cmVjdC5yaWdodCAtIHJlY3QubGVmdDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBmbG9h
dCByOwotICAgICAgICAgICAgZmxvYXQgZzsKLSAgICAgICAgICAgIGZsb2F0IGI7Ci0gICAgICAg
ICAgICBmbG9hdCBhOwotCi0gICAgICAgICAgICBzd2l0Y2ggKGRlc2MuRm9ybWF0KQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6Ci0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2IgPSAqKHVuc2lnbmVk
IHNob3J0Kikoc291cmNlICsgMiAqIGkgKyBqICogaW5wdXRQaXRjaCk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgYSA9IDEuMGY7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAocmdiICYgMHgwMDFG
KSAqICgxLjBmIC8gMHgwMDFGKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IChyZ2IgJiAweDA3
RTApICogKDEuMGYgLyAweDA3RTApOwotICAgICAgICAgICAgICAgICAgICByID0gKHJnYiAmIDB4
RjgwMCkgKiAoMS4wZiAvIDB4RjgwMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGFyZ2IgPSAqKHVu
c2lnbmVkIHNob3J0Kikoc291cmNlICsgMiAqIGkgKyBqICogaW5wdXRQaXRjaCk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgYSA9IChhcmdiICYgMHg4MDAwKSA/IDEuMGYgOiAwLjBmOwotICAgICAg
ICAgICAgICAgICAgICBiID0gKGFyZ2IgJiAweDAwMUYpICogKDEuMGYgLyAweDAwMUYpOwotICAg
ICAgICAgICAgICAgICAgICBnID0gKGFyZ2IgJiAweDAzRTApICogKDEuMGYgLyAweDAzRTApOwot
ICAgICAgICAgICAgICAgICAgICByID0gKGFyZ2IgJiAweDdDMDApICogKDEuMGYgLyAweDdDMDAp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAq
IGkgKyBqICogaW5wdXRQaXRjaCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYSA9IChhcmdiICYg
MHhGRjAwMDAwMCkgKiAoMS4wZiAvIDB4RkYwMDAwMDApOwotICAgICAgICAgICAgICAgICAgICBi
ID0gKGFyZ2IgJiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBGRik7Ci0gICAgICAgICAg
ICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAweDAwMDBGRjAwKTsK
LSAgICAgICAgICAgICAgICAgICAgciA9IChhcmdiICYgMHgwMEZGMDAwMCkgKiAoMS4wZiAvIDB4
MDBGRjAwMDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgeHJnYiA9ICoodW5zaWduZWQgaW50Kikoc291
cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYSA9
IDEuMGY7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAoeHJnYiAmIDB4MDAwMDAwRkYpICogKDEu
MGYgLyAweDAwMDAwMEZGKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9ICh4cmdiICYgMHgwMDAw
RkYwMCkgKiAoMS4wZiAvIDB4MDAwMEZGMDApOwotICAgICAgICAgICAgICAgICAgICByID0gKHhy
Z2IgJiAweDAwRkYwMDAwKSAqICgxLjBmIC8gMHgwMEZGMDAwMCk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMlIx
MEcxMEIxMDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCBhcmdiID0gKih1bnNpZ25lZCBpbnQqKShzb3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBp
dGNoKTsKLQotICAgICAgICAgICAgICAgICAgICBhID0gKGFyZ2IgJiAweEMwMDAwMDAwKSAqICgx
LjBmIC8gMHhDMDAwMDAwMCk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAw
MDAzRkYpICogKDEuMGYgLyAweDAwMDAwM0ZGKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IChh
cmdiICYgMHgwMDBGRkMwMCkgKiAoMS4wZiAvIDB4MDAwRkZDMDApOwotICAgICAgICAgICAgICAg
ICAgICByID0gKGFyZ2IgJiAweDNGRjAwMDAwKSAqICgxLjBmIC8gMHgzRkYwMDAwMCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEQzREZNVF9BMzJCMzJHMzJSMzJGOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gZmxvYXQgZm9ybWF0cyBpbiBEM0QgYXJlIHN0b3JlZCByZ2JhLCByYXRoZXIgdGhh
biB0aGUgb3RoZXIgd2F5IHJvdW5kCi0gICAgICAgICAgICAgICAgICAgIHIgPSAqKChmbG9hdCop
KHNvdXJjZSArIDE2ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDApOwotICAgICAgICAgICAgICAg
ICAgICBnID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAx
KTsKLSAgICAgICAgICAgICAgICAgICAgYiA9ICooKGZsb2F0Kikoc291cmNlICsgMTYgKiBpICsg
aiAqIGlucHV0UGl0Y2gpICsgMik7Ci0gICAgICAgICAgICAgICAgICAgIGEgPSAqKChmbG9hdCop
KHNvdXJjZSArIDE2ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDMpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTE2
QjE2RzE2UjE2RjoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGZs
b2F0IGZvcm1hdHMgaW4gRDNEIGFyZSBzdG9yZWQgcmdiYSwgcmF0aGVyIHRoYW4gdGhlIG90aGVy
IHdheSByb3VuZAotICAgICAgICAgICAgICAgICAgICByID0gZ2w6OmZsb2F0MTZUb0Zsb2F0MzIo
KigodW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyA4ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDAp
KTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCooKHVuc2ln
bmVkIHNob3J0Kikoc291cmNlICsgOCAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAxKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGIgPSBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKCh1bnNpZ25lZCBzaG9y
dCopKHNvdXJjZSArIDggKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMikpOwotICAgICAgICAgICAg
ICAgICAgICBhID0gZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKigodW5zaWduZWQgc2hvcnQqKShzb3Vy
Y2UgKyA4ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDMpKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAgICAgICAgICAgICAgVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNl
IEdMX1JHQkE6Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDBdID0gKHVuc2lnbmVkIGNo
YXIpKDI1NSAqIHIgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGog
KiBvdXRwdXRQaXRjaCArIDFdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGcgKyAwLjVmKTsKLSAg
ICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDJdID0gKHVu
c2lnbmVkIGNoYXIpKDI1NSAqIGIgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFs0
ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDNdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGEgKyAw
LjVmKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgICAgICAgICBz
d2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBH
TF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91
dHB1dFBpdGNoICsgMF0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYiArIDAuNWYpOwotICAgICAg
ICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMV0gPSAodW5zaWdu
ZWQgY2hhcikoMjU1ICogZyArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBp
ICsgaiAqIG91dHB1dFBpdGNoICsgMl0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogciArIDAuNWYp
OwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgM10g
PSAodW5zaWduZWQgY2hhcikoMjU1ICogYSArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9S
RVZfRVhUOgotICAgICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIGRlc2t0b3Ag
R0wgc3BlYyBpbiB0aGUgIlRyYW5zZmVyIG9mIFBpeGVsIFJlY3RhbmdsZXMiIHNlY3Rpb24KLSAg
ICAgICAgICAgICAgICAgICAgLy8gdGhpcyB0eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOgotICAg
ICAgICAgICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAg
IDggICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAgMSAgICAwCi0gICAgICAgICAgICAg
ICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAv
LyB8ICAgICAgIDR0aCAgICAgICAgIHwgICAgICAgIDNyZCAgICAgICAgIHwgICAgICAgIDJuZCAg
ICAgICAgfCAgIDFzdCBjb21wb25lbnQgICB8Ci0gICAgICAgICAgICAgICAgICAgIC8vICAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgY2FzZSBv
ZiBCR1JBX0VYVCwgQiBpcyB0aGUgZmlyc3QgY29tcG9uZW50LCBHIHRoZSBzZWNvbmQsIGFuZCBz
byBmb3J0aC4KLSAgICAgICAgICAgICAgICAgICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2gg
LyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVu
c2lnbmVkIHNob3J0KSgxNSAqIGEgKyAwLjVmKSA8PCAxMil8Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIHIgKyAwLjVmKSA8PCA4KSB8Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIGcgKyAwLjVmKSA8PCA0KSB8Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIGIgKyAwLjVmKSA8
PCAwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVDoKLSAgICAgICAgICAgICAgICAgICAg
Ly8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhlICJUcmFuc2ZlciBvZiBQ
aXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgdHlw
ZSBpcyBwYWNrZWQgYXMgZm9sbG93czoKLSAgICAgICAgICAgICAgICAgICAgLy8gICAxNSAgIDE0
ICAgMTMgICAxMiAgIDExICAgMTAgICAgOSAgICA4ICAgIDcgICAgNiAgICA1ICAgIDQgICAgMyAg
ICAyICAgIDEgICAgMAotICAgICAgICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLSAgICAgICAgICAgICAgICAgICAgLy8gfCA0dGggfCAgICAgICAgICAzcmQgICAgICAg
ICAgIHwgICAgICAgICAgIDJuZCAgICAgICAgICB8ICAgICAgMXN0IGNvbXBvbmVudCAgICAgfAot
ICAgICAgICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAg
ICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgQkdSQV9FWFQsIEIgaXMgdGhlIGZpcnN0IGNv
bXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28gZm9ydGguCi0gICAgICAgICAgICAgICAgICAg
IGRlc3QxNltpICsgaiAqIG91dHB1dFBpdGNoIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KV0gPQot
ICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoICAgICBhICsgMC41Zikg
PDwgMTUpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICog
ciArIDAuNWYpIDw8IDEwKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNo
b3J0KSgzMSAqIGcgKyAwLjVmKSA8PCA1KSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVu
c2lnbmVkIHNob3J0KSgzMSAqIGIgKyAwLjVmKSA8PCAwKTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9SR0I6Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAg
ICAgICAgICAgICAgIGRlc3QxNltpICsgaiAqIG91dHB1dFBpdGNoIC8gc2l6ZW9mKHVuc2lnbmVk
IHNob3J0KV0gPSAKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMx
ICogYiArIDAuNWYpIDw8IDApIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQg
c2hvcnQpKDYzICogZyArIDAuNWYpIDw8IDUpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgo
dW5zaWduZWQgc2hvcnQpKDMxICogciArIDAuNWYpIDw8IDExKTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RbMyAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAwXSA9ICh1bnNp
Z25lZCBjaGFyKSgyNTUgKiByICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbMyAq
IGkgKyBqICogb3V0cHV0UGl0Y2ggKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBnICsgMC41
Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbMyAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAy
XSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBiICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBzeXN0ZW1TdXJmYWNlLT5VbmxvY2tSZWN0KCk7Ci0KLSAgICBzeXN0ZW1TdXJmYWNlLT5SZWxl
YXNlKCk7Ci19Ci0KLVJlbmRlclRhcmdldCAqUmVuZGVyZXI5OjpjcmVhdGVSZW5kZXJUYXJnZXQo
U3dhcENoYWluICpzd2FwQ2hhaW4sIGJvb2wgZGVwdGgpCi17Ci0gICAgU3dhcENoYWluOSAqc3dh
cENoYWluOSA9IFN3YXBDaGFpbjk6Om1ha2VTd2FwQ2hhaW45KHN3YXBDaGFpbik7Ci0gICAgSURp
cmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOwotICAgIGlmIChkZXB0aCkKLSAgICB7Ci0g
ICAgICAgIHN1cmZhY2UgPSBzd2FwQ2hhaW45LT5nZXREZXB0aFN0ZW5jaWwoKTsKLSAgICB9Ci0g
ICAgZWxzZQotICAgIHsKLSAgICAgICAgc3VyZmFjZSA9IHN3YXBDaGFpbjktPmdldFJlbmRlclRh
cmdldCgpOwotICAgIH0KLQotICAgIFJlbmRlclRhcmdldDkgKnJlbmRlclRhcmdldCA9IG5ldyBS
ZW5kZXJUYXJnZXQ5KHRoaXMsIHN1cmZhY2UpOwotCi0gICAgcmV0dXJuIHJlbmRlclRhcmdldDsK
LX0KLQotUmVuZGVyVGFyZ2V0ICpSZW5kZXJlcjk6OmNyZWF0ZVJlbmRlclRhcmdldChpbnQgd2lk
dGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcywgYm9vbCBkZXB0
aCkKLXsKLSAgICBSZW5kZXJUYXJnZXQ5ICpyZW5kZXJUYXJnZXQgPSBuZXcgUmVuZGVyVGFyZ2V0
OSh0aGlzLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHNhbXBsZXMpOwotICAgIHJldHVybiByZW5k
ZXJUYXJnZXQ7Ci19Ci0KLVNoYWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyOTo6bG9hZEV4ZWN1dGFi
bGUoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5
cGUpCi17Ci0gICAgU2hhZGVyRXhlY3V0YWJsZTkgKmV4ZWN1dGFibGUgPSBOVUxMOwotCi0gICAg
c3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2Ugcng6OlNIQURFUl9WRVJURVg6Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKnZzaGFkZXIgPSBjcmVh
dGVWZXJ0ZXhTaGFkZXIoKERXT1JEKilmdW5jdGlvbiwgbGVuZ3RoKTsKLSAgICAgICAgICAgIGlm
ICh2c2hhZGVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBu
ZXcgU2hhZGVyRXhlY3V0YWJsZTkoZnVuY3Rpb24sIGxlbmd0aCwgdnNoYWRlcik7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIHJ4OjpTSEFERVJf
UElYRUw6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqcHNo
YWRlciA9IGNyZWF0ZVBpeGVsU2hhZGVyKChEV09SRCopZnVuY3Rpb24sIGxlbmd0aCk7Ci0gICAg
ICAgICAgICBpZiAocHNoYWRlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBleGVj
dXRhYmxlID0gbmV3IFNoYWRlckV4ZWN1dGFibGU5KGZ1bmN0aW9uLCBsZW5ndGgsIHBzaGFkZXIp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVs
dDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGV4ZWN1dGFibGU7Ci19Ci0KLVNoYWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyOTo6Y29t
cGlsZVRvRXhlY3V0YWJsZShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqc2hhZGVy
SExTTCwgcng6OlNoYWRlclR5cGUgdHlwZSwgRDNEV29ya2Fyb3VuZFR5cGUgd29ya2Fyb3VuZCkK
LXsKLSAgICBjb25zdCBjaGFyICpwcm9maWxlID0gTlVMTDsKLQotICAgIHN3aXRjaCAodHlwZSkK
LSAgICB7Ci0gICAgICBjYXNlIHJ4OjpTSEFERVJfVkVSVEVYOgotICAgICAgICBwcm9maWxlID0g
Z2V0TWFqb3JTaGFkZXJNb2RlbCgpID49IDMgPyAidnNfM18wIiA6ICJ2c18yXzAiOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2Ugcng6OlNIQURFUl9QSVhFTDoKLSAgICAgICAgcHJvZmlsZSA9
IGdldE1ham9yU2hhZGVyTW9kZWwoKSA+PSAzID8gInBzXzNfMCIgOiAicHNfMl8wIjsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICAvLyBBTkdMRSBpc3N1ZSA0ODY6Ci0gICAgLy8g
V29yay1hcm91bmQgYSBEM0Q5IGNvbXBpbGVyIGJ1ZyB0aGF0IHByZXNlbnRzIGl0c2VsZiB3aGVu
IHVzaW5nIGNvbmRpdGlvbmFsIGRpc2NhcmQsIGJ5IGRpc2FibGluZyBvcHRpbWl6YXRpb24KLSAg
ICBVSU5UIG9wdGltaXphdGlvbkZsYWdzID0gKHdvcmthcm91bmQgPT0gQU5HTEVfRDNEX1dPUktB
Uk9VTkRfU00zX09QVElNSVpFUiA/IEQzRENPTVBJTEVfU0tJUF9PUFRJTUlaQVRJT04gOiBBTkdM
RV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTCk7Ci0KLSAgICBJRDNEQmxvYiAqYmluYXJ5ID0g
KElEM0RCbG9iKiljb21waWxlVG9CaW5hcnkoaW5mb0xvZywgc2hhZGVySExTTCwgcHJvZmlsZSwg
b3B0aW1pemF0aW9uRmxhZ3MsIHRydWUpOwotICAgIGlmICghYmluYXJ5KQotICAgICAgICByZXR1
cm4gTlVMTDsKLQotICAgIFNoYWRlckV4ZWN1dGFibGUgKmV4ZWN1dGFibGUgPSBsb2FkRXhlY3V0
YWJsZShiaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgYmluYXJ5LT5HZXRCdWZmZXJTaXplKCks
IHR5cGUpOwotICAgIGJpbmFyeS0+UmVsZWFzZSgpOwotCi0gICAgcmV0dXJuIGV4ZWN1dGFibGU7
Ci19Ci0KLWJvb2wgUmVuZGVyZXI5Ojpib3hGaWx0ZXIoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJj
ZSwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpCi17Ci0gICAgcmV0dXJuIG1CbGl0LT5ib3hGaWx0
ZXIoc291cmNlLCBkZXN0KTsKLX0KLQotRDNEUE9PTCBSZW5kZXJlcjk6OmdldFRleHR1cmVQb29s
KERXT1JEIHVzYWdlKSBjb25zdAotewotICAgIGlmIChtRDNkOUV4ICE9IE5VTEwpCi0gICAgewot
ICAgICAgICByZXR1cm4gRDNEUE9PTF9ERUZBVUxUOwotICAgIH0KLSAgICBlbHNlCi0gICAgewot
ICAgICAgICBpZiAoISh1c2FnZSAmIChEM0RVU0FHRV9ERVBUSFNURU5DSUwgfCBEM0RVU0FHRV9S
RU5ERVJUQVJHRVQpKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEQzRFBPT0xfTUFO
QUdFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBEM0RQT09MX0RFRkFVTFQ7Ci19
Ci0KLWJvb2wgUmVuZGVyZXI5Ojpjb3B5VG9SZW5kZXJUYXJnZXQoSURpcmVjdDNEU3VyZmFjZTkg
KmRlc3QsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGJvb2wgZnJvbU1hbmFnZWQpCi17Ci0g
ICAgaWYgKHNvdXJjZSAmJiBkZXN0KQotICAgIHsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBE
M0RFUlJfT1VUT0ZWSURFT01FTU9SWTsKLQotICAgICAgICBpZiAoZnJvbU1hbmFnZWQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOwotICAgICAgICAgICAgc291
cmNlLT5HZXREZXNjKCZkZXNjKTsKLQotICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1
cmYgPSAwOwotICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxh
aW5TdXJmYWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBkZXNjLkZvcm1hdCwgRDNEUE9PTF9T
WVNURU1NRU0sICZzdXJmLCBOVUxMKTsKLQotICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1
bHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEltYWdlOTo6Y29weUxvY2thYmxl
U3VyZmFjZXMoc3VyZiwgc291cmNlKTsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNl
LT5VcGRhdGVTdXJmYWNlKHN1cmYsIE5VTEwsIGRlc3QsIE5VTEwpOwotICAgICAgICAgICAgICAg
IHN1cmYtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNl
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGVuZFNjZW5lKCk7Ci0gICAgICAgICAgICByZXN1bHQg
PSBtRGV2aWNlLT5TdHJldGNoUmVjdChzb3VyY2UsIE5VTEwsIGRlc3QsIE5VTEwsIEQzRFRFWEZf
Tk9ORSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkg
fHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUltYWdlICpSZW5kZXJl
cjk6OmNyZWF0ZUltYWdlKCkKLXsKLSAgICByZXR1cm4gbmV3IEltYWdlOSgpOwotfQotCi12b2lk
IFJlbmRlcmVyOTo6Z2VuZXJhdGVNaXBtYXAoSW1hZ2UgKmRlc3QsIEltYWdlICpzcmMpCi17Ci0g
ICAgSW1hZ2U5ICpzcmM5ID0gSW1hZ2U5OjptYWtlSW1hZ2U5KHNyYyk7Ci0gICAgSW1hZ2U5ICpk
c3Q5ID0gSW1hZ2U5OjptYWtlSW1hZ2U5KGRlc3QpOwotICAgIEltYWdlOTo6Z2VuZXJhdGVNaXBt
YXAoZHN0OSwgc3JjOSk7Ci19Ci0KLVRleHR1cmVTdG9yYWdlICpSZW5kZXJlcjk6OmNyZWF0ZVRl
eHR1cmVTdG9yYWdlMkQoU3dhcENoYWluICpzd2FwQ2hhaW4pCi17Ci0gICAgU3dhcENoYWluOSAq
c3dhcENoYWluOSA9IFN3YXBDaGFpbjk6Om1ha2VTd2FwQ2hhaW45KHN3YXBDaGFpbik7Ci0gICAg
cmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTlfMkQodGhpcywgc3dhcENoYWluOSk7Ci19Ci0KLVRl
eHR1cmVTdG9yYWdlICpSZW5kZXJlcjk6OmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVs
cywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJh
YmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICByZXR1cm4gbmV3IFRl
eHR1cmVTdG9yYWdlOV8yRCh0aGlzLCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB1c2FnZSwgZm9y
Y2VSZW5kZXJhYmxlLCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotVGV4dHVyZVN0b3JhZ2UgKlJlbmRl
cmVyOTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpCi17
Ci0gICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTlfQ3ViZSh0aGlzLCBsZXZlbHMsIGludGVy
bmFsZm9ybWF0LCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlLCBzaXplKTsKLX0KLQotYm9vbCBSZW5k
ZXJlcjk6OmdldExVSUQoTFVJRCAqYWRhcHRlckx1aWQpIGNvbnN0Ci17Ci0gICAgYWRhcHRlckx1
aWQtPkhpZ2hQYXJ0ID0gMDsKLSAgICBhZGFwdGVyTHVpZC0+TG93UGFydCA9IDA7Ci0KLSAgICBp
ZiAobUQzZDlFeCkKLSAgICB7Ci0gICAgICAgIG1EM2Q5RXgtPkdldEFkYXB0ZXJMVUlEKG1BZGFw
dGVyLCBhZGFwdGVyTHVpZCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlcjkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXI5LmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGFmYzJkYzFkNTNlNGMwMzg0ZThjYmY5MDUwMmIwM2YwNjE3MjgxODIuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlcjkuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDM1MCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBSZW5kZXJlcjku
aDogRGVmaW5lcyBhIGJhY2stZW5kIHNwZWNpZmljIGNsYXNzIGZvciB0aGUgRDNEOSByZW5kZXJl
ci4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSRVI5X0hfCi0jZGVmaW5lIExJ
QkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjlfSF8KLQotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0
aWxzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL1NoYWRlckNhY2hlLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L1ZlcnRleERlY2xhcmF0aW9uQ2FjaGUuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
UmVuZGVyZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0Lmgi
Ci0KLW5hbWVzcGFjZSBnbAotewotY2xhc3MgUmVuZGVyYnVmZmVyOwotfQotCi1uYW1lc3BhY2Ug
cngKLXsKLWNsYXNzIFZlcnRleERhdGFNYW5hZ2VyOwotY2xhc3MgSW5kZXhEYXRhTWFuYWdlcjsK
LWNsYXNzIFN0cmVhbWluZ0luZGV4QnVmZmVySW50ZXJmYWNlOwotc3RydWN0IFRyYW5zbGF0ZWRB
dHRyaWJ1dGU7Ci0KLWNsYXNzIFJlbmRlcmVyOSA6IHB1YmxpYyBSZW5kZXJlcgotewotICBwdWJs
aWM6Ci0gICAgUmVuZGVyZXI5KGVnbDo6RGlzcGxheSAqZGlzcGxheSwgSERDIGhEYywgYm9vbCBz
b2Z0d2FyZURldmljZSk7Ci0gICAgdmlydHVhbCB+UmVuZGVyZXI5KCk7Ci0KLSAgICBzdGF0aWMg
UmVuZGVyZXI5ICptYWtlUmVuZGVyZXI5KFJlbmRlcmVyICpyZW5kZXJlcik7Ci0KLSAgICB2aXJ0
dWFsIEVHTGludCBpbml0aWFsaXplKCk7Ci0gICAgdmlydHVhbCBib29sIHJlc2V0RGV2aWNlKCk7
Ci0KLSAgICB2aXJ0dWFsIGludCBnZW5lcmF0ZUNvbmZpZ3MoQ29uZmlnRGVzYyAqKmNvbmZpZ0Rl
c2NMaXN0KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQ29uZmlncyhDb25maWdEZXNjICpjb25m
aWdEZXNjTGlzdCk7Ci0KLSAgICB2b2lkIHN0YXJ0U2NlbmUoKTsKLSAgICB2b2lkIGVuZFNjZW5l
KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3luYyhib29sIGJsb2NrKTsKLQotICAgIHZpcnR1YWwg
U3dhcENoYWluICpjcmVhdGVTd2FwQ2hhaW4oSFdORCB3aW5kb3csIEhBTkRMRSBzaGFyZUhhbmRs
ZSwgR0xlbnVtIGJhY2tCdWZmZXJGb3JtYXQsIEdMZW51bSBkZXB0aEJ1ZmZlckZvcm1hdCk7Ci0K
LSAgICBJRGlyZWN0M0RRdWVyeTkqIGFsbG9jYXRlRXZlbnRRdWVyeSgpOwotICAgIHZvaWQgZnJl
ZUV2ZW50UXVlcnkoSURpcmVjdDNEUXVlcnk5KiBxdWVyeSk7Ci0KLSAgICAvLyByZXNvdXJjZSBj
cmVhdGlvbgotICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKmNyZWF0ZVZlcnRleFNoYWRlcihj
b25zdCBEV09SRCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgpOwotICAgIElEaXJlY3QzRFBpeGVs
U2hhZGVyOSAqY3JlYXRlUGl4ZWxTaGFkZXIoY29uc3QgRFdPUkQgKmZ1bmN0aW9uLCBzaXplX3Qg
bGVuZ3RoKTsKLSAgICBIUkVTVUxUIGNyZWF0ZVZlcnRleEJ1ZmZlcihVSU5UIExlbmd0aCwgRFdP
UkQgVXNhZ2UsIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKipwcFZlcnRleEJ1ZmZlcik7Ci0gICAg
SFJFU1VMVCBjcmVhdGVJbmRleEJ1ZmZlcihVSU5UIExlbmd0aCwgRFdPUkQgVXNhZ2UsIEQzREZP
Uk1BVCBGb3JtYXQsIElEaXJlY3QzREluZGV4QnVmZmVyOSAqKnBwSW5kZXhCdWZmZXIpOwotI2lm
IDAKLSAgICB2b2lkICpjcmVhdGVUZXh0dXJlMkQoKTsKLSAgICB2b2lkICpjcmVhdGVUZXh0dXJl
Q3ViZSgpOwotICAgIHZvaWQgKmNyZWF0ZVF1ZXJ5KCk7Ci0gICAgdm9pZCAqY3JlYXRlSW5kZXhC
dWZmZXIoKTsKLSAgICB2b2lkICpjcmVhdGVWZXJ0ZXhidWZmZXIoKTsKLQotICAgIC8vIHN0YXRl
IHNldHVwCi0gICAgdm9pZCBhcHBseVNoYWRlcnMoKTsKLSAgICB2b2lkIGFwcGx5Q29uc3RhbnRz
KCk7Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2FtcGxlclN0YXRlKGdsOjpTYW1wbGVy
VHlwZSB0eXBlLCBpbnQgaW5kZXgsIGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXIpOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5k
ZXgsIGdsOjpUZXh0dXJlICp0ZXh0dXJlKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRSYXN0ZXJp
emVyU3RhdGUoY29uc3QgZ2w6OlJhc3Rlcml6ZXJTdGF0ZSAmcmFzdGVyU3RhdGUpOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRCbGVuZFN0YXRlKGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRl
LCBjb25zdCBnbDo6Q29sb3IgJmJsZW5kQ29sb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IHNhbXBsZU1hc2spOwotICAgIHZpcnR1YWwgdm9pZCBzZXREZXB0
aFN0ZW5jaWxTdGF0ZShjb25zdCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmRlcHRoU3RlbmNpbFN0
YXRlLCBpbnQgc3RlbmNpbFJlZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IHN0ZW5jaWxCYWNrUmVmLCBib29sIGZyb250RmFjZUNDVyk7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgc2V0U2Npc3NvclJlY3RhbmdsZShjb25zdCBnbDo6UmVjdGFuZ2xlICZzY2lzc29yLCBi
b29sIGVuYWJsZWQpOwotICAgIHZpcnR1YWwgYm9vbCBzZXRWaWV3cG9ydChjb25zdCBnbDo6UmVj
dGFuZ2xlICZ2aWV3cG9ydCwgZmxvYXQgek5lYXIsIGZsb2F0IHpGYXIsIEdMZW51bSBkcmF3TW9k
ZSwgR0xlbnVtIGZyb250RmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBp
Z25vcmVWaWV3cG9ydCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZW5kZXJUYXJnZXQoZ2w6
OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcik7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5U2hhZGVy
cyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSk7Ci0gICAgdmlydHVhbCB2b2lkIGFw
cGx5VW5pZm9ybXMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGdsOjpVbmlmb3Jt
QXJyYXkgKnVuaWZvcm1BcnJheSk7Ci0gICAgdmlydHVhbCBib29sIGFwcGx5UHJpbWl0aXZlVHlw
ZShHTGVudW0gcHJpbWl0aXZlVHlwZSwgR0xzaXplaSBlbGVtZW50Q291bnQpOwotICAgIHZpcnR1
YWwgR0xlbnVtIGFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5LCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0ZXNbXSwgR0xpbnQgZmlyc3Qs
IEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKLSAgICB2aXJ0dWFsIEdMZW51bSBh
cHBseUluZGV4QnVmZmVyKGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgZ2w6OkJ1ZmZlciAqZWxlbWVu
dEFycmF5QnVmZmVyLCBHTHNpemVpIGNvdW50LCBHTGVudW0gbW9kZSwgR0xlbnVtIHR5cGUsIFRy
YW5zbGF0ZWRJbmRleERhdGEgKmluZGV4SW5mbyk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0Fy
cmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpOwotICAg
IHZpcnR1YWwgdm9pZCBkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdM
ZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJh
eUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvLCBHTHNpemVpIGlu
c3RhbmNlcyk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyYW1l
dGVycyAmY2xlYXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpOwotCi0gICAg
dmlydHVhbCB2b2lkIG1hcmtBbGxTdGF0ZURpcnR5KCk7Ci0KLSAgICAvLyBsb3N0IGRldmljZQot
ICAgIHZvaWQgbm90aWZ5RGV2aWNlTG9zdCgpOwotICAgIHZpcnR1YWwgYm9vbCBpc0RldmljZUxv
c3QoKTsKLSAgICB2aXJ0dWFsIGJvb2wgdGVzdERldmljZUxvc3QoYm9vbCBub3RpZnkpOwotICAg
IHZpcnR1YWwgYm9vbCB0ZXN0RGV2aWNlUmVzZXR0YWJsZSgpOwotCi0gICAgLy8gUmVuZGVyZXIg
Y2FwYWJpbGl0aWVzCi0gICAgSURpcmVjdDNERGV2aWNlOSAqZ2V0RGV2aWNlKCkgeyByZXR1cm4g
bURldmljZTsgfQotICAgIHZpcnR1YWwgRFdPUkQgZ2V0QWRhcHRlclZlbmRvcigpIGNvbnN0Owot
ICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgZ2V0UmVuZGVyZXJEZXNjcmlwdGlvbigpIGNvbnN0Owot
ICAgIHZpcnR1YWwgR1VJRCBnZXRBZGFwdGVySWRlbnRpZmllcigpIGNvbnN0OwotCi0gICAgdmly
dHVhbCBib29sIGdldEJHUkFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9v
bCBnZXREWFQxVGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUM1RleHR1
cmVTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldERYVDVUZXh0dXJlU3VwcG9ydCgpOwot
ICAgIHZpcnR1YWwgYm9vbCBnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpOwotICAgIHZpcnR1YWwgYm9v
bCBnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJh
YmxlKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KGJvb2wgKmZp
bHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSk7Ci0gICAgdmlydHVhbCBib29sIGdldEx1bWluYW5j
ZVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZUFscGhhVGV4
dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhUZXh0
dXJlSW1hZ2VVbml0cygpIGNvbnN0OwotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heENv
bWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGlu
dCBnZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1
bnNpZ25lZCBpbnQgZ2V0UmVzZXJ2ZWRGcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhGcmFnbWVudFVuaWZvcm1WZWN0b3Jz
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmFyeWluZ1ZlY3RvcnMo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgYm9vbCBnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIGJvb2wgZ2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJv
b2wgZ2V0VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBmbG9hdCBnZXRUZXh0dXJlTWF4QW5pc290cm9weSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9v
bCBnZXRTaGFyZUhhbmRsZVN1cHBvcnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVy
aXZhdGl2ZUluc3RydWN0aW9uU3VwcG9ydCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBnZXRQ
b3N0U3ViQnVmZmVyU3VwcG9ydCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBpbnQgZ2V0TWFqb3JT
aGFkZXJNb2RlbCgpIGNvbnN0OwotICAgIHZpcnR1YWwgZmxvYXQgZ2V0TWF4UG9pbnRTaXplKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgZ2V0TWF4Vmlld3BvcnREaW1lbnNpb24oKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGludCBnZXRNYXhUZXh0dXJlV2lkdGgoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGludCBnZXRNYXhUZXh0dXJlSGVpZ2h0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdldDMy
Qml0SW5kZXhTdXBwb3J0KCkgY29uc3Q7Ci0gICAgRFdPUkQgZ2V0Q2Fwc0RlY2xUeXBlcygpIGNv
bnN0OwotICAgIHZpcnR1YWwgaW50IGdldE1pblN3YXBJbnRlcnZhbCgpIGNvbnN0OwotICAgIHZp
cnR1YWwgaW50IGdldE1heFN3YXBJbnRlcnZhbCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBHTHNp
emVpIGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSBjb25zdDsKLSAgICBpbnQgZ2V0TmVhcmVzdFN1
cHBvcnRlZFNhbXBsZXMoRDNERk9STUFUIGZvcm1hdCwgaW50IHJlcXVlc3RlZCkgY29uc3Q7Ci0g
ICAgCi0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4UmVuZGVyVGFyZ2V0cygpIGNvbnN0
OwotCi0gICAgRDNERk9STUFUIENvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoR0xpbnQgaW50
ZXJuYWxmb3JtYXQpOwotCi0gICAgLy8gUGl4ZWwgb3BlcmF0aW9ucwotICAgIHZpcnR1YWwgYm9v
bCBjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqZGVzdCwgVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc291cmNlKTsKLSAgICB2aXJ0dWFsIGJvb2wgY29weVRv
UmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqZGVzdCwgVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2VDdWJlICpzb3VyY2UpOwotCi0gICAgdmlydHVhbCBib29sIGNvcHlJbWFn
ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3Vy
Y2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0
b3JhZ2UsIEdMaW50IGxldmVsKTsKLSAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdlKGdsOjpGcmFt
ZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdM
ZW51bSBkZXN0Rm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYmxpdFJlY3Qo
Z2w6OkZyYW1lYnVmZmVyICpyZWFkVGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFkUmVj
dCwgZ2w6OkZyYW1lYnVmZmVyICpkcmF3VGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkcmF3
UmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0LCBi
b29sIGJsaXREZXB0aFN0ZW5jaWwpOwotICAgIHZpcnR1YWwgdm9pZCByZWFkUGl4ZWxzKGdsOjpG
cmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTHNpemVpIG91dHB1dFBpdGNoLCBib29sIHBhY2tSZXZlcnNlUm93
T3JkZXIsIEdMaW50IHBhY2tBbGlnbm1lbnQsIHZvaWQqIHBpeGVscyk7Ci0KLSAgICAvLyBSZW5k
ZXJUYXJnZXQgY3JlYXRpb24KLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqY3JlYXRlUmVuZGVy
VGFyZ2V0KFN3YXBDaGFpbiAqc3dhcENoYWluLCBib29sIGRlcHRoKTsKLSAgICB2aXJ0dWFsIFJl
bmRlclRhcmdldCAqY3JlYXRlUmVuZGVyVGFyZ2V0KGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xl
bnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzLCBib29sIGRlcHRoKTsKLQotICAgIC8vIFNoYWRl
ciBvcGVyYXRpb25zCi0gICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpsb2FkRXhlY3V0YWJs
ZShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgcng6OlNoYWRlclR5cGUgdHlw
ZSk7Ci0gICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpjb21waWxlVG9FeGVjdXRhYmxlKGds
OjpJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpzaGFkZXJITFNMLCByeDo6U2hhZGVyVHlw
ZSB0eXBlLCBEM0RXb3JrYXJvdW5kVHlwZSB3b3JrYXJvdW5kKTsKLQotICAgIC8vIEltYWdlIG9w
ZXJhdGlvbnMKLSAgICB2aXJ0dWFsIEltYWdlICpjcmVhdGVJbWFnZSgpOwotICAgIHZpcnR1YWwg
dm9pZCBnZW5lcmF0ZU1pcG1hcChJbWFnZSAqZGVzdCwgSW1hZ2UgKnNvdXJjZSk7Ci0gICAgdmly
dHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChTd2FwQ2hhaW4gKnN3
YXBDaGFpbik7Ci0gICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3Jh
Z2UyRChpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9v
bCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICB2
aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUoaW50IGxldmVs
cywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJh
YmxlLCBpbnQgc2l6ZSk7Ci0KLSAgICAvLyBCdWZmZXIgY3JlYXRpb24KLSAgICB2aXJ0dWFsIFZl
cnRleEJ1ZmZlciAqY3JlYXRlVmVydGV4QnVmZmVyKCk7Ci0gICAgdmlydHVhbCBJbmRleEJ1ZmZl
ciAqY3JlYXRlSW5kZXhCdWZmZXIoKTsKLSAgICB2aXJ0dWFsIEJ1ZmZlclN0b3JhZ2UgKmNyZWF0
ZUJ1ZmZlclN0b3JhZ2UoKTsKLQotICAgIC8vIFF1ZXJ5IGFuZCBGZW5jZSBjcmVhdGlvbgotICAg
IHZpcnR1YWwgUXVlcnlJbXBsICpjcmVhdGVRdWVyeShHTGVudW0gdHlwZSk7Ci0gICAgdmlydHVh
bCBGZW5jZUltcGwgKmNyZWF0ZUZlbmNlKCk7Ci0KLSAgICAvLyBEM0Q5LXJlbmRlcmVyIHNwZWNp
ZmljIG1ldGhvZHMKLSAgICBib29sIGJveEZpbHRlcihJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNl
LCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCk7Ci0KLSAgICBEM0RQT09MIGdldFRleHR1cmVQb29s
KERXT1JEIHVzYWdlKSBjb25zdDsKLQotICAgIHZpcnR1YWwgYm9vbCBnZXRMVUlEKExVSUQgKmFk
YXB0ZXJMdWlkKSBjb25zdDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihSZW5kZXJlcjkpOwotCi0gICAgdm9pZCBhcHBseVVuaWZvcm1uZnYoZ2w6OlVuaWZvcm0g
KnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMZmxvYXQgKnYpOwotICAgIHZvaWQgYXBwbHlVbmlmb3Jt
bml2KGdsOjpVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGludCAqdik7Ci0gICAgdm9p
ZCBhcHBseVVuaWZvcm1uYnYoZ2w6OlVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMaW50
ICp2KTsKLQotICAgIHZvaWQgZHJhd0xpbmVMb29wKEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBl
LCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGludCBtaW5JbmRleCwgZ2w6OkJ1ZmZlciAqZWxlbWVu
dEFycmF5QnVmZmVyKTsKLSAgICB2b2lkIGRyYXdJbmRleGVkUG9pbnRzKEdMc2l6ZWkgY291bnQs
IEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRB
cnJheUJ1ZmZlcik7Ci0KLSAgICB2b2lkIGdldE11bHRpU2FtcGxlU3VwcG9ydChEM0RGT1JNQVQg
Zm9ybWF0LCBib29sICptdWx0aVNhbXBsZUFycmF5KTsKLSAgICBib29sIGNvcHlUb1JlbmRlclRh
cmdldChJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwg
Ym9vbCBmcm9tTWFuYWdlZCk7Ci0gICAgZ2w6OlJlbmRlcmJ1ZmZlciAqZ2V0TnVsbENvbG9yYnVm
ZmVyKGdsOjpSZW5kZXJidWZmZXIgKmRlcHRoYnVmZmVyKTsKLQotICAgIEQzRFBPT0wgZ2V0QnVm
ZmVyUG9vbChEV09SRCB1c2FnZSkgY29uc3Q7Ci0KLSAgICBITU9EVUxFIG1EM2Q5TW9kdWxlOwot
ICAgIEhEQyBtRGM7Ci0KLSAgICB2b2lkIGluaXRpYWxpemVEZXZpY2UoKTsKLSAgICBEM0RQUkVT
RU5UX1BBUkFNRVRFUlMgZ2V0RGVmYXVsdFByZXNlbnRQYXJhbWV0ZXJzKCk7Ci0gICAgdm9pZCBy
ZWxlYXNlRGV2aWNlUmVzb3VyY2VzKCk7Ci0KLSAgICBVSU5UIG1BZGFwdGVyOwotICAgIEQzRERF
VlRZUEUgbURldmljZVR5cGU7Ci0gICAgYm9vbCBtU29mdHdhcmVEZXZpY2U7ICAgLy8gRklYTUU6
IERlcHJlY2F0ZQotICAgIElEaXJlY3QzRDkgKm1EM2Q5OyAgLy8gQWx3YXlzIHZhbGlkIGFmdGVy
IHN1Y2Nlc3NmdWwgaW5pdGlhbGl6YXRpb24uCi0gICAgSURpcmVjdDNEOUV4ICptRDNkOUV4OyAg
Ly8gTWlnaHQgYmUgbnVsbCBpZiBEM0Q5RXggaXMgbm90IHN1cHBvcnRlZC4KLSAgICBJRGlyZWN0
M0REZXZpY2U5ICptRGV2aWNlOwotICAgIElEaXJlY3QzRERldmljZTlFeCAqbURldmljZUV4OyAg
Ly8gTWlnaHQgYmUgbnVsbCBpZiBEM0Q5RXggaXMgbm90IHN1cHBvcnRlZC4KLQotICAgIEJsaXQg
Km1CbGl0OwotCi0gICAgSFdORCBtRGV2aWNlV2luZG93OwotCi0gICAgYm9vbCBtRGV2aWNlTG9z
dDsKLSAgICBEM0RDQVBTOSBtRGV2aWNlQ2FwczsKLSAgICBEM0RBREFQVEVSX0lERU5USUZJRVI5
IG1BZGFwdGVySWRlbnRpZmllcjsKLQotICAgIEQzRFBSSU1JVElWRVRZUEUgbVByaW1pdGl2ZVR5
cGU7Ci0gICAgaW50IG1QcmltaXRpdmVDb3VudDsKLSAgICBHTHNpemVpIG1SZXBlYXREcmF3Owot
Ci0gICAgYm9vbCBtU2NlbmVTdGFydGVkOwotICAgIGJvb2wgbVN1cHBvcnRzTm9uUG93ZXIyVGV4
dHVyZXM7Ci0gICAgYm9vbCBtU3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weTsKLSAgICBp
bnQgbU1pblN3YXBJbnRlcnZhbDsKLSAgICBpbnQgbU1heFN3YXBJbnRlcnZhbDsKLQotICAgIGJv
b2wgbU9jY2x1c2lvblF1ZXJ5U3VwcG9ydDsKLSAgICBib29sIG1FdmVudFF1ZXJ5U3VwcG9ydDsK
LSAgICBib29sIG1WZXJ0ZXhUZXh0dXJlU3VwcG9ydDsKLQotICAgIGJvb2wgbURlcHRoVGV4dHVy
ZVN1cHBvcnQ7Ci0KLSAgICBib29sIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQ7Ci0gICAgYm9vbCBt
RmxvYXQzMkZpbHRlclN1cHBvcnQ7Ci0gICAgYm9vbCBtRmxvYXQzMlJlbmRlclN1cHBvcnQ7Ci0K
LSAgICBib29sIG1GbG9hdDE2VGV4dHVyZVN1cHBvcnQ7Ci0gICAgYm9vbCBtRmxvYXQxNkZpbHRl
clN1cHBvcnQ7Ci0gICAgYm9vbCBtRmxvYXQxNlJlbmRlclN1cHBvcnQ7Ci0KLSAgICBib29sIG1E
WFQxVGV4dHVyZVN1cHBvcnQ7Ci0gICAgYm9vbCBtRFhUM1RleHR1cmVTdXBwb3J0OwotICAgIGJv
b2wgbURYVDVUZXh0dXJlU3VwcG9ydDsKLQotICAgIGJvb2wgbUx1bWluYW5jZVRleHR1cmVTdXBw
b3J0OwotICAgIGJvb2wgbUx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQ7Ci0KLSAgICBzdGQ6
Om1hcDxEM0RGT1JNQVQsIGJvb2wgKj4gbU11bHRpU2FtcGxlU3VwcG9ydDsKLSAgICBHTHNpemVp
IG1NYXhTdXBwb3J0ZWRTYW1wbGVzOwotCi0gICAgLy8gY3VycmVudCByZW5kZXIgdGFyZ2V0IHN0
YXRlcwotICAgIHVuc2lnbmVkIGludCBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbDsKLSAgICB1
bnNpZ25lZCBpbnQgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbDsKLSAgICB1bnNpZ25lZCBpbnQg
bUFwcGxpZWRTdGVuY2lsYnVmZmVyU2VyaWFsOwotICAgIGJvb2wgbURlcHRoU3RlbmNpbEluaXRp
YWxpemVkOwotICAgIGJvb2wgbVJlbmRlclRhcmdldERlc2NJbml0aWFsaXplZDsKLSAgICByeDo6
UmVuZGVyVGFyZ2V0OjpEZXNjIG1SZW5kZXJUYXJnZXREZXNjOwotICAgIHVuc2lnbmVkIGludCBt
Q3VyU3RlbmNpbFNpemU7Ci0gICAgdW5zaWduZWQgaW50IG1DdXJEZXB0aFNpemU7Ci0KLSAgICBJ
RGlyZWN0M0RTdGF0ZUJsb2NrOSAqbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZTsKLQotICAgIC8vIHBy
ZXZpb3VzbHkgc2V0IHJlbmRlciBzdGF0ZXMKLSAgICBib29sIG1Gb3JjZVNldERlcHRoU3RlbmNp
bFN0YXRlOwotICAgIGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSBtQ3VyRGVwdGhTdGVuY2lsU3RhdGU7
Ci0gICAgaW50IG1DdXJTdGVuY2lsUmVmOwotICAgIGludCBtQ3VyU3RlbmNpbEJhY2tSZWY7Ci0g
ICAgYm9vbCBtQ3VyRnJvbnRGYWNlQ0NXOwotCi0gICAgYm9vbCBtRm9yY2VTZXRSYXN0ZXJTdGF0
ZTsKLSAgICBnbDo6UmFzdGVyaXplclN0YXRlIG1DdXJSYXN0ZXJTdGF0ZTsKLQotICAgIGJvb2wg
bUZvcmNlU2V0U2Npc3NvcjsKLSAgICBnbDo6UmVjdGFuZ2xlIG1DdXJTY2lzc29yOwotICAgIGJv
b2wgbVNjaXNzb3JFbmFibGVkOwotCi0gICAgYm9vbCBtRm9yY2VTZXRWaWV3cG9ydDsKLSAgICBn
bDo6UmVjdGFuZ2xlIG1DdXJWaWV3cG9ydDsKLSAgICBmbG9hdCBtQ3VyTmVhcjsKLSAgICBmbG9h
dCBtQ3VyRmFyOwotICAgIGZsb2F0IG1DdXJEZXB0aEZyb250OwotCi0gICAgYm9vbCBtRm9yY2VT
ZXRCbGVuZFN0YXRlOwotICAgIGdsOjpCbGVuZFN0YXRlIG1DdXJCbGVuZFN0YXRlOwotICAgIGds
OjpDb2xvciBtQ3VyQmxlbmRDb2xvcjsKLSAgICBHTHVpbnQgbUN1clNhbXBsZU1hc2s7Ci0KLSAg
ICAvLyBDdXJyZW50bHkgYXBwbGllZCBzYW1wbGVyIHN0YXRlcwotICAgIGJvb2wgbUZvcmNlU2V0
VmVydGV4U2FtcGxlclN0YXRlc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJF
X0lNQUdFX1VOSVRTXTsKLSAgICBnbDo6U2FtcGxlclN0YXRlIG1DdXJWZXJ0ZXhTYW1wbGVyU3Rh
dGVzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOwot
Ci0gICAgYm9vbCBtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0ZXNbZ2w6Ok1BWF9URVhUVVJFX0lN
QUdFX1VOSVRTXTsKLSAgICBnbDo6U2FtcGxlclN0YXRlIG1DdXJQaXhlbFNhbXBsZXJTdGF0ZXNb
Z2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKLQotICAgIC8vIEN1cnJlbnRseSBhcHBsaWVk
IHRleHR1cmVzCi0gICAgdW5zaWduZWQgaW50IG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1tnbDo6
SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKLSAgICB1bnNp
Z25lZCBpbnQgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VO
SVRTXTsKLQotICAgIHVuc2lnbmVkIGludCBtQXBwbGllZElCU2VyaWFsOwotICAgIHVuc2lnbmVk
IGludCBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWw7Ci0gICAgCi0gICAgcng6OmR4X1ZlcnRl
eENvbnN0YW50cyBtVmVydGV4Q29uc3RhbnRzOwotICAgIHJ4OjpkeF9QaXhlbENvbnN0YW50cyBt
UGl4ZWxDb25zdGFudHM7Ci0gICAgYm9vbCBtRHhVbmlmb3Jtc0RpcnR5OwotCi0gICAgLy8gQSBw
b29sIG9mIGV2ZW50IHF1ZXJpZXMgdGhhdCBhcmUgY3VycmVudGx5IHVudXNlZC4KLSAgICBzdGQ6
OnZlY3RvcjxJRGlyZWN0M0RRdWVyeTkqPiBtRXZlbnRRdWVyeVBvb2w7Ci0gICAgVmVydGV4U2hh
ZGVyQ2FjaGUgbVZlcnRleFNoYWRlckNhY2hlOwotICAgIFBpeGVsU2hhZGVyQ2FjaGUgbVBpeGVs
U2hhZGVyQ2FjaGU7Ci0KLSAgICBWZXJ0ZXhEYXRhTWFuYWdlciAqbVZlcnRleERhdGFNYW5hZ2Vy
OwotICAgIFZlcnRleERlY2xhcmF0aW9uQ2FjaGUgbVZlcnRleERlY2xhcmF0aW9uQ2FjaGU7Ci0K
LSAgICBJbmRleERhdGFNYW5hZ2VyICptSW5kZXhEYXRhTWFuYWdlcjsKLSAgICBTdHJlYW1pbmdJ
bmRleEJ1ZmZlckludGVyZmFjZSAqbUxpbmVMb29wSUI7Ci0KLSAgICBlbnVtIHsgTlVNX05VTExf
Q09MT1JCVUZGRVJfQ0FDSEVfRU5UUklFUyA9IDEyIH07Ci0gICAgc3RydWN0IE51bGxDb2xvcmJ1
ZmZlckNhY2hlRW50cnkKLSAgICB7Ci0gICAgICAgIFVJTlQgbHJ1Q291bnQ7Ci0gICAgICAgIGlu
dCB3aWR0aDsKLSAgICAgICAgaW50IGhlaWdodDsKLSAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAq
YnVmZmVyOwotICAgIH0gbU51bGxDb2xvcmJ1ZmZlckNhY2hlW05VTV9OVUxMX0NPTE9SQlVGRkVS
X0NBQ0hFX0VOVFJJRVNdOwotICAgIFVJTlQgbU1heE51bGxDb2xvcmJ1ZmZlckxSVTsKLQotfTsK
LQotfQotI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjlfSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvU2hhZGVy
RXhlY3V0YWJsZTExLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvU2hhZGVyRXhlY3V0YWJsZTExLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZTFlYjU2MDMzNDgzZmZiMDkwMjI5MGU1OTY4NmRkNGMwZDhiMjBjMi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckV4ZWN1dGFibGUxMS5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwotCi0vLyBTaGFkZXJFeGVjdXRhYmxlMTEuY3BwOiBJbXBsZW1lbnRzIGEg
RDNEMTEtc3BlY2lmaWMgY2xhc3MgdG8gY29udGFpbiBzaGFkZXIKLS8vIGV4ZWN1dGFibGUgaW1w
bGVtZW50YXRpb24gZGV0YWlscy4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9TaGFk
ZXJFeGVjdXRhYmxlMTEuaCIKLQotI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgotCi1uYW1lc3Bh
Y2UgcngKLXsKLQotU2hhZGVyRXhlY3V0YWJsZTExOjpTaGFkZXJFeGVjdXRhYmxlMTEoY29uc3Qg
dm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIElEM0QxMVBpeGVsU2hhZGVyICpleGVjdXRh
YmxlKQotICAgIDogU2hhZGVyRXhlY3V0YWJsZShmdW5jdGlvbiwgbGVuZ3RoKQotewotICAgIG1Q
aXhlbEV4ZWN1dGFibGUgPSBleGVjdXRhYmxlOwotICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVM
TDsKLSAgICBtR2VvbWV0cnlFeGVjdXRhYmxlID0gTlVMTDsKLQotICAgIG1Db25zdGFudEJ1ZmZl
ciA9IE5VTEw7Ci19Ci0KLVNoYWRlckV4ZWN1dGFibGUxMTo6U2hhZGVyRXhlY3V0YWJsZTExKGNv
bnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFWZXJ0ZXhTaGFkZXIgKmV4
ZWN1dGFibGUpCi0gICAgOiBTaGFkZXJFeGVjdXRhYmxlKGZ1bmN0aW9uLCBsZW5ndGgpCi17Ci0g
ICAgbVZlcnRleEV4ZWN1dGFibGUgPSBleGVjdXRhYmxlOwotICAgIG1QaXhlbEV4ZWN1dGFibGUg
PSBOVUxMOwotICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBOVUxMOwotCi0gICAgbUNvbnN0YW50
QnVmZmVyID0gTlVMTDsKLX0KLQotU2hhZGVyRXhlY3V0YWJsZTExOjpTaGFkZXJFeGVjdXRhYmxl
MTEoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIElEM0QxMUdlb21ldHJ5U2hh
ZGVyICpleGVjdXRhYmxlKQotICAgIDogU2hhZGVyRXhlY3V0YWJsZShmdW5jdGlvbiwgbGVuZ3Ro
KQotewotICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBleGVjdXRhYmxlOwotICAgIG1WZXJ0ZXhF
eGVjdXRhYmxlID0gTlVMTDsKLSAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKLQotICAgIG1D
b25zdGFudEJ1ZmZlciA9IE5VTEw7Ci19Ci0KLVNoYWRlckV4ZWN1dGFibGUxMTo6flNoYWRlckV4
ZWN1dGFibGUxMSgpCi17Ci0gICAgaWYgKG1WZXJ0ZXhFeGVjdXRhYmxlKQotICAgIHsKLSAgICAg
ICAgbVZlcnRleEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKLSAgICB9Ci0gICAgaWYgKG1QaXhlbEV4
ZWN1dGFibGUpCi0gICAgewotICAgICAgICBtUGl4ZWxFeGVjdXRhYmxlLT5SZWxlYXNlKCk7Ci0g
ICAgfQotICAgIGlmIChtR2VvbWV0cnlFeGVjdXRhYmxlKQotICAgIHsKLSAgICAgICAgbUdlb21l
dHJ5RXhlY3V0YWJsZS0+UmVsZWFzZSgpOwotICAgIH0KLSAgICAKLSAgICBpZiAobUNvbnN0YW50
QnVmZmVyKQotICAgIHsKLSAgICAgICAgbUNvbnN0YW50QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAg
fQotfQotCi1TaGFkZXJFeGVjdXRhYmxlMTEgKlNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRl
ckV4ZWN1dGFibGUxMShTaGFkZXJFeGVjdXRhYmxlICpleGVjdXRhYmxlKQotewotICAgIEFTU0VS
VChIQVNfRFlOQU1JQ19UWVBFKFNoYWRlckV4ZWN1dGFibGUxMSosIGV4ZWN1dGFibGUpKTsKLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8U2hhZGVyRXhlY3V0YWJsZTExKj4oZXhlY3V0YWJsZSk7Ci19
Ci0KLUlEM0QxMVZlcnRleFNoYWRlciAqU2hhZGVyRXhlY3V0YWJsZTExOjpnZXRWZXJ0ZXhTaGFk
ZXIoKSBjb25zdAotewotICAgIHJldHVybiBtVmVydGV4RXhlY3V0YWJsZTsKLX0KLQotSUQzRDEx
UGl4ZWxTaGFkZXIgKlNoYWRlckV4ZWN1dGFibGUxMTo6Z2V0UGl4ZWxTaGFkZXIoKSBjb25zdAot
ewotICAgIHJldHVybiBtUGl4ZWxFeGVjdXRhYmxlOwotfQotCi1JRDNEMTFHZW9tZXRyeVNoYWRl
ciAqU2hhZGVyRXhlY3V0YWJsZTExOjpnZXRHZW9tZXRyeVNoYWRlcigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1HZW9tZXRyeUV4ZWN1dGFibGU7Ci19Ci0KLUlEM0QxMUJ1ZmZlciAqU2hhZGVyRXhl
Y3V0YWJsZTExOjpnZXRDb25zdGFudEJ1ZmZlcihJRDNEMTFEZXZpY2UgKmRldmljZSwgdW5zaWdu
ZWQgaW50IHJlZ2lzdGVyQ291bnQpCi17Ci0gICAgaWYgKCFtQ29uc3RhbnRCdWZmZXIgJiYgcmVn
aXN0ZXJDb3VudCA+IDApCi0gICAgewotICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyBjb25zdGFu
dEJ1ZmZlckRlc2NyaXB0aW9uID0gezB9OwotICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0
aW9uLkJ5dGVXaWR0aCA9IHJlZ2lzdGVyQ291bnQgKiBzaXplb2YoZmxvYXRbNF0pOwotICAgICAg
ICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLlVzYWdlID0gRDNEMTFfVVNBR0VfRFlOQU1JQzsK
LSAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5E
X0NPTlNUQU5UX0JVRkZFUjsKLSAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5DUFVB
Y2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7Ci0gICAgICAgIGNvbnN0YW50QnVm
ZmVyRGVzY3JpcHRpb24uTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNj
cmlwdGlvbi5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKLQotICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLCBOVUxM
LCAmbUNvbnN0YW50QnVmZmVyKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gbUNvbnN0YW50QnVmZmVyOwotfQotCi19ClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlMTEuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvU2hhZGVyRXhlY3V0YWJsZTExLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZWMxY2Y3ZDJjZGFlYmE0NGQ0YTViODU1Nzlk
MTgyOTdhNDFmYWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJF
eGVjdXRhYmxlMTEuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCi0KLS8vIFNoYWRlckV4ZWN1dGFibGUxMS5oOiBEZWZpbmVzIGEgRDNEMTEtc3BlY2lm
aWMgY2xhc3MgdG8gY29udGFpbiBzaGFkZXIKLS8vIGV4ZWN1dGFibGUgaW1wbGVtZW50YXRpb24g
ZGV0YWlscy4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfU0hBREVSRVhFQ1VUQUJMRTEx
X0hfCi0jZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9TSEFERVJFWEVDVVRBQkxFMTFfSF8KLQot
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlLmgiCi0KLW5hbWVz
cGFjZSByeAotewotCi1jbGFzcyBTaGFkZXJFeGVjdXRhYmxlMTEgOiBwdWJsaWMgU2hhZGVyRXhl
Y3V0YWJsZQotewotICBwdWJsaWM6Ci0gICAgU2hhZGVyRXhlY3V0YWJsZTExKGNvbnN0IHZvaWQg
KmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFQaXhlbFNoYWRlciAqZXhlY3V0YWJsZSk7
Ci0gICAgU2hhZGVyRXhlY3V0YWJsZTExKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVu
Z3RoLCBJRDNEMTFWZXJ0ZXhTaGFkZXIgKmV4ZWN1dGFibGUpOwotICAgIFNoYWRlckV4ZWN1dGFi
bGUxMShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSUQzRDExR2VvbWV0cnlT
aGFkZXIgKmV4ZWN1dGFibGUpOwotCi0gICAgdmlydHVhbCB+U2hhZGVyRXhlY3V0YWJsZTExKCk7
Ci0KLSAgICBzdGF0aWMgU2hhZGVyRXhlY3V0YWJsZTExICptYWtlU2hhZGVyRXhlY3V0YWJsZTEx
KFNoYWRlckV4ZWN1dGFibGUgKmV4ZWN1dGFibGUpOwotCi0gICAgSUQzRDExUGl4ZWxTaGFkZXIg
KmdldFBpeGVsU2hhZGVyKCkgY29uc3Q7Ci0gICAgSUQzRDExVmVydGV4U2hhZGVyICpnZXRWZXJ0
ZXhTaGFkZXIoKSBjb25zdDsKLSAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZ2V0R2VvbWV0cnlT
aGFkZXIoKSBjb25zdDsKLQotICAgIElEM0QxMUJ1ZmZlciAqZ2V0Q29uc3RhbnRCdWZmZXIoSUQz
RDExRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGludCByZWdpc3RlckNvdW50KTsKLQotICBwcml2
YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTaGFkZXJFeGVjdXRhYmxlMTEpOwot
Ci0gICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1QaXhlbEV4ZWN1dGFibGU7Ci0gICAgSUQzRDExVmVy
dGV4U2hhZGVyICptVmVydGV4RXhlY3V0YWJsZTsKLSAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAq
bUdlb21ldHJ5RXhlY3V0YWJsZTsKLQotICAgIElEM0QxMUJ1ZmZlciAqbUNvbnN0YW50QnVmZmVy
OwotfTsKLQotfQotCi0jZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1NIQURFUkVYRUNVVEFC
TEUxMV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlOS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckV4ZWN1dGFibGU5LmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggOTg4NjhhM2ZiZjM4YTUzZmY0OWE4NzU5MTY4ZWU5MmU0NTcw
YTk4MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckV4ZWN1dGFi
bGU5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLSNpbmNsdWRlICJwcmVjb21w
aWxlZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gU2hhZGVyRXhlY3V0YWJsZTkuY3BwOiBJ
bXBsZW1lbnRzIGEgRDNEOS1zcGVjaWZpYyBjbGFzcyB0byBjb250YWluIHNoYWRlcgotLy8gZXhl
Y3V0YWJsZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL1NoYWRlckV4ZWN1dGFibGU5LmgiCi0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIK
LQotbmFtZXNwYWNlIHJ4Ci17Ci0KLVNoYWRlckV4ZWN1dGFibGU5OjpTaGFkZXJFeGVjdXRhYmxl
OShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSURpcmVjdDNEUGl4ZWxTaGFk
ZXI5ICpleGVjdXRhYmxlKQotICAgIDogU2hhZGVyRXhlY3V0YWJsZShmdW5jdGlvbiwgbGVuZ3Ro
KQotewotICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBleGVjdXRhYmxlOwotICAgIG1WZXJ0ZXhFeGVj
dXRhYmxlID0gTlVMTDsKLX0KLQotU2hhZGVyRXhlY3V0YWJsZTk6OlNoYWRlckV4ZWN1dGFibGU5
KGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRGlyZWN0M0RWZXJ0ZXhTaGFk
ZXI5ICpleGVjdXRhYmxlKQotICAgIDogU2hhZGVyRXhlY3V0YWJsZShmdW5jdGlvbiwgbGVuZ3Ro
KQotewotICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gZXhlY3V0YWJsZTsKLSAgICBtUGl4ZWxFeGVj
dXRhYmxlID0gTlVMTDsKLX0KLQotU2hhZGVyRXhlY3V0YWJsZTk6On5TaGFkZXJFeGVjdXRhYmxl
OSgpCi17Ci0gICAgaWYgKG1WZXJ0ZXhFeGVjdXRhYmxlKQotICAgIHsKLSAgICAgICAgbVZlcnRl
eEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKLSAgICB9Ci0gICAgaWYgKG1QaXhlbEV4ZWN1dGFibGUp
Ci0gICAgewotICAgICAgICBtUGl4ZWxFeGVjdXRhYmxlLT5SZWxlYXNlKCk7Ci0gICAgfQotfQot
Ci1TaGFkZXJFeGVjdXRhYmxlOSAqU2hhZGVyRXhlY3V0YWJsZTk6Om1ha2VTaGFkZXJFeGVjdXRh
YmxlOShTaGFkZXJFeGVjdXRhYmxlICpleGVjdXRhYmxlKQotewotICAgIEFTU0VSVChIQVNfRFlO
QU1JQ19UWVBFKFNoYWRlckV4ZWN1dGFibGU5KiwgZXhlY3V0YWJsZSkpOwotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxTaGFkZXJFeGVjdXRhYmxlOSo+KGV4ZWN1dGFibGUpOwotfQotCi1JRGlyZWN0
M0RWZXJ0ZXhTaGFkZXI5ICpTaGFkZXJFeGVjdXRhYmxlOTo6Z2V0VmVydGV4U2hhZGVyKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbVZlcnRleEV4ZWN1dGFibGU7Ci19Ci0KLUlEaXJlY3QzRFBpeGVs
U2hhZGVyOSAqU2hhZGVyRXhlY3V0YWJsZTk6OmdldFBpeGVsU2hhZGVyKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbVBpeGVsRXhlY3V0YWJsZTsKLX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvU2hhZGVyRXhlY3V0YWJsZTkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvU2hhZGVyRXhlY3V0YWJsZTkuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZmExZTZjMjg0NGE5OGJhNDI2OGYwZGRmMmI0OTRhMzZkMjc2YzViZi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckV4ZWN1dGFibGU5LmgK
KysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEy
LTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBT
aGFkZXJFeGVjdXRhYmxlOS5oOiBEZWZpbmVzIGEgRDNEOS1zcGVjaWZpYyBjbGFzcyB0byBjb250
YWluIHNoYWRlcgotLy8gZXhlY3V0YWJsZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgotCi0jaWZu
ZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9TSEFERVJFWEVDVVRBQkxFOV9IXwotI2RlZmluZSBMSUJH
TEVTVjJfUkVOREVSRVJfU0hBREVSRVhFQ1VUQUJMRTlfSF8KLQotI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlLmgiCi0KLW5hbWVzcGFjZSByeAotewotCi1jbGFz
cyBTaGFkZXJFeGVjdXRhYmxlOSA6IHB1YmxpYyBTaGFkZXJFeGVjdXRhYmxlCi17Ci0gIHB1Ymxp
YzoKLSAgICBTaGFkZXJFeGVjdXRhYmxlOShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxl
bmd0aCwgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpleGVjdXRhYmxlKTsKLSAgICBTaGFkZXJFeGVj
dXRhYmxlOShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSURpcmVjdDNEVmVy
dGV4U2hhZGVyOSAqZXhlY3V0YWJsZSk7Ci0gICAgdmlydHVhbCB+U2hhZGVyRXhlY3V0YWJsZTko
KTsKLQotICAgIHN0YXRpYyBTaGFkZXJFeGVjdXRhYmxlOSAqbWFrZVNoYWRlckV4ZWN1dGFibGU5
KFNoYWRlckV4ZWN1dGFibGUgKmV4ZWN1dGFibGUpOwotCi0gICAgSURpcmVjdDNEUGl4ZWxTaGFk
ZXI5ICpnZXRQaXhlbFNoYWRlcigpIGNvbnN0OwotICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkg
KmdldFZlcnRleFNoYWRlcigpIGNvbnN0OwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKFNoYWRlckV4ZWN1dGFibGU5KTsKLQotICAgIElEaXJlY3QzRFBpeGVsU2hh
ZGVyOSAqbVBpeGVsRXhlY3V0YWJsZTsKLSAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICptVmVy
dGV4RXhlY3V0YWJsZTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9T
SEFERVJFWEVDVVRBQkxFOV9IXwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvU3dhcENo
YWluMTEuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9Td2FwQ2hhaW4xMS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMmNmZTQz
MGRkZDlhYWViZGMxYzliMzZiNGM1ZWMxZmQzNzNmZDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9Td2FwQ2hhaW4xMS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3NzUgKzAs
MCBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEy
LTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBT
d2FwQ2hhaW4xMS5jcHA6IEltcGxlbWVudHMgYSBiYWNrLWVuZCBzcGVjaWZpYyBjbGFzcyBmb3Ig
dGhlIEQzRDExIHN3YXAgY2hhaW4uCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvU3dh
cENoYWluMTEuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9yZW5kZXJlcjExX3V0
aWxzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyMTEuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaDExdnMu
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9wYXNzdGhy
b3VnaHJnYmExMXBzLmgiCi0KLW5hbWVzcGFjZSByeAotewotCi1Td2FwQ2hhaW4xMTo6U3dhcENo
YWluMTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIsIEhXTkQgd2luZG93LCBIQU5ETEUgc2hhcmVIYW5k
bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGJhY2tCdWZmZXJGb3JtYXQsIEdM
ZW51bSBkZXB0aEJ1ZmZlckZvcm1hdCkKLSAgICA6IG1SZW5kZXJlcihyZW5kZXJlciksIFN3YXBD
aGFpbih3aW5kb3csIHNoYXJlSGFuZGxlLCBiYWNrQnVmZmVyRm9ybWF0LCBkZXB0aEJ1ZmZlckZv
cm1hdCkKLXsKLSAgICBtU3dhcENoYWluID0gTlVMTDsKLSAgICBtQmFja0J1ZmZlclRleHR1cmUg
PSBOVUxMOwotICAgIG1CYWNrQnVmZmVyUlRWaWV3ID0gTlVMTDsKLSAgICBtT2Zmc2NyZWVuVGV4
dHVyZSA9IE5VTEw7Ci0gICAgbU9mZnNjcmVlblJUVmlldyA9IE5VTEw7Ci0gICAgbU9mZnNjcmVl
blNSVmlldyA9IE5VTEw7Ci0gICAgbURlcHRoU3RlbmNpbFRleHR1cmUgPSBOVUxMOwotICAgIG1E
ZXB0aFN0ZW5jaWxEU1ZpZXcgPSBOVUxMOwotICAgIG1RdWFkVkIgPSBOVUxMOwotICAgIG1QYXNz
VGhyb3VnaFNhbXBsZXIgPSBOVUxMOwotICAgIG1QYXNzVGhyb3VnaElMID0gTlVMTDsKLSAgICBt
UGFzc1Rocm91Z2hWUyA9IE5VTEw7Ci0gICAgbVBhc3NUaHJvdWdoUFMgPSBOVUxMOwotICAgIG1X
aWR0aCA9IC0xOwotICAgIG1IZWlnaHQgPSAtMTsKLSAgICBtU3dhcEludGVydmFsID0gMDsKLSAg
ICBtQXBwQ3JlYXRlZFNoYXJlSGFuZGxlID0gbVNoYXJlSGFuZGxlICE9IE5VTEw7Ci0gICAgbVBh
c3NUaHJvdWdoUmVzb3VyY2VzSW5pdCA9IGZhbHNlOwotfQotCi1Td2FwQ2hhaW4xMTo6flN3YXBD
aGFpbjExKCkKLXsKLSAgICByZWxlYXNlKCk7Ci19Ci0KLXZvaWQgU3dhcENoYWluMTE6OnJlbGVh
c2UoKQotewotICAgIGlmIChtU3dhcENoYWluKQotICAgIHsKLSAgICAgICAgbVN3YXBDaGFpbi0+
UmVsZWFzZSgpOwotICAgICAgICBtU3dhcENoYWluID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAo
bUJhY2tCdWZmZXJUZXh0dXJlKQotICAgIHsKLSAgICAgICAgbUJhY2tCdWZmZXJUZXh0dXJlLT5S
ZWxlYXNlKCk7Ci0gICAgICAgIG1CYWNrQnVmZmVyVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQotCi0g
ICAgaWYgKG1CYWNrQnVmZmVyUlRWaWV3KQotICAgIHsKLSAgICAgICAgbUJhY2tCdWZmZXJSVFZp
ZXctPlJlbGVhc2UoKTsKLSAgICAgICAgbUJhY2tCdWZmZXJSVFZpZXcgPSBOVUxMOwotICAgIH0K
LQotICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1PZmZzY3JlZW5U
ZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsKLSAg
ICB9Ci0KLSAgICBpZiAobU9mZnNjcmVlblJUVmlldykKLSAgICB7Ci0gICAgICAgIG1PZmZzY3Jl
ZW5SVFZpZXctPlJlbGVhc2UoKTsKLSAgICAgICAgbU9mZnNjcmVlblJUVmlldyA9IE5VTEw7Ci0g
ICAgfQotCi0gICAgaWYgKG1PZmZzY3JlZW5TUlZpZXcpCi0gICAgewotICAgICAgICBtT2Zmc2Ny
ZWVuU1JWaWV3LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1PZmZzY3JlZW5TUlZpZXcgPSBOVUxMOwot
ICAgIH0KLQotICAgIGlmIChtRGVwdGhTdGVuY2lsVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1E
ZXB0aFN0ZW5jaWxUZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxUZXh0
dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobURlcHRoU3RlbmNpbERTVmlldykKLSAgICB7
Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxEU1ZpZXctPlJlbGVhc2UoKTsKLSAgICAgICAgbURlcHRo
U3RlbmNpbERTVmlldyA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1RdWFkVkIpCi0gICAgewot
ICAgICAgICBtUXVhZFZCLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1RdWFkVkIgPSBOVUxMOwotICAg
IH0KLQotICAgIGlmIChtUGFzc1Rocm91Z2hTYW1wbGVyKQotICAgIHsKLSAgICAgICAgbVBhc3NU
aHJvdWdoU2FtcGxlci0+UmVsZWFzZSgpOwotICAgICAgICBtUGFzc1Rocm91Z2hTYW1wbGVyID0g
TlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVBhc3NUaHJvdWdoSUwpCi0gICAgewotICAgICAgICBt
UGFzc1Rocm91Z2hJTC0+UmVsZWFzZSgpOwotICAgICAgICBtUGFzc1Rocm91Z2hJTCA9IE5VTEw7
Ci0gICAgfQotCi0gICAgaWYgKG1QYXNzVGhyb3VnaFZTKQotICAgIHsKLSAgICAgICAgbVBhc3NU
aHJvdWdoVlMtPlJlbGVhc2UoKTsKLSAgICAgICAgbVBhc3NUaHJvdWdoVlMgPSBOVUxMOwotICAg
IH0KLQotICAgIGlmIChtUGFzc1Rocm91Z2hQUykKLSAgICB7Ci0gICAgICAgIG1QYXNzVGhyb3Vn
aFBTLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1QYXNzVGhyb3VnaFBTID0gTlVMTDsKLSAgICB9Ci0K
LSAgICBpZiAoIW1BcHBDcmVhdGVkU2hhcmVIYW5kbGUpCi0gICAgewotICAgICAgICBtU2hhcmVI
YW5kbGUgPSBOVUxMOwotICAgIH0KLX0KLQotdm9pZCBTd2FwQ2hhaW4xMTo6cmVsZWFzZU9mZnNj
cmVlblRleHR1cmUoKQotewotICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkKLSAgICB7Ci0gICAg
ICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1PZmZzY3JlZW5UZXh0
dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobU9mZnNjcmVlblJUVmlldykKLSAgICB7Ci0g
ICAgICAgIG1PZmZzY3JlZW5SVFZpZXctPlJlbGVhc2UoKTsKLSAgICAgICAgbU9mZnNjcmVlblJU
VmlldyA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1PZmZzY3JlZW5TUlZpZXcpCi0gICAgewot
ICAgICAgICBtT2Zmc2NyZWVuU1JWaWV3LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1PZmZzY3JlZW5T
UlZpZXcgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtRGVwdGhTdGVuY2lsVGV4dHVyZSkKLSAg
ICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxUZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1E
ZXB0aFN0ZW5jaWxUZXh0dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobURlcHRoU3RlbmNp
bERTVmlldykKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxEU1ZpZXctPlJlbGVhc2UoKTsK
LSAgICAgICAgbURlcHRoU3RlbmNpbERTVmlldyA9IE5VTEw7Ci0gICAgfQotfQotCi1FR0xpbnQg
U3dhcENoYWluMTE6OnJlc2V0T2Zmc2NyZWVuVGV4dHVyZShpbnQgYmFja2J1ZmZlcldpZHRoLCBp
bnQgYmFja2J1ZmZlckhlaWdodCkKLXsKLSAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5k
ZXJlci0+Z2V0RGV2aWNlKCk7Ci0KLSAgICBBU1NFUlQoZGV2aWNlICE9IE5VTEwpOwotCi0gICAg
Ly8gRDNEMTEgZG9lcyBub3QgYWxsb3cgemVybyBzaXplIHRleHR1cmVzCi0gICAgQVNTRVJUKGJh
Y2tidWZmZXJXaWR0aCA+PSAxKTsKLSAgICBBU1NFUlQoYmFja2J1ZmZlckhlaWdodCA+PSAxKTsK
LQotICAgIC8vIFByZXNlcnZlIHRoZSByZW5kZXIgdGFyZ2V0IGNvbnRlbnQKLSAgICBJRDNEMTFU
ZXh0dXJlMkQgKnByZXZpb3VzT2Zmc2NyZWVuVGV4dHVyZSA9IG1PZmZzY3JlZW5UZXh0dXJlOwot
ICAgIGlmIChwcmV2aW91c09mZnNjcmVlblRleHR1cmUpCi0gICAgewotICAgICAgICBwcmV2aW91
c09mZnNjcmVlblRleHR1cmUtPkFkZFJlZigpOwotICAgIH0KLSAgICBjb25zdCBpbnQgcHJldmlv
dXNXaWR0aCA9IG1XaWR0aDsKLSAgICBjb25zdCBpbnQgcHJldmlvdXNIZWlnaHQgPSBtSGVpZ2h0
OwotCi0gICAgcmVsZWFzZU9mZnNjcmVlblRleHR1cmUoKTsKLQotICAgIC8vIElmIHRoZSBhcHAg
cGFzc2VkIGluIGEgc2hhcmUgaGFuZGxlLCBvcGVuIHRoZSByZXNvdXJjZQotICAgIC8vIFNlZSBF
R0xfQU5HTEVfZDNkX3NoYXJlX2hhbmRsZV9jbGllbnRfYnVmZmVyCi0gICAgaWYgKG1BcHBDcmVh
dGVkU2hhcmVIYW5kbGUpCi0gICAgewotICAgICAgICBJRDNEMTFSZXNvdXJjZSAqdGVtcFJlc291
cmNlMTE7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5PcGVuU2hhcmVkUmVzb3Vy
Y2UobVNoYXJlSGFuZGxlLCBfX3V1aWRvZihJRDNEMTFSZXNvdXJjZSksICh2b2lkKiopJnRlbXBS
ZXNvdXJjZTExKTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEVSUigiRmFpbGVkIHRvIG9wZW4gdGhlIHN3YXAgY2hhaW4gcGJ1ZmZlciBzaGFy
ZSBoYW5kbGU6ICUwOGxYIiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJlbGVhc2UoKTsKLSAgICAg
ICAgICAgIHJldHVybiBFR0xfQkFEX1BBUkFNRVRFUjsKLSAgICAgICAgfQotCi0gICAgICAgIHJl
c3VsdCA9IHRlbXBSZXNvdXJjZTExLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRDNEMTFUZXh0
dXJlMkQpLCAodm9pZCoqKSZtT2Zmc2NyZWVuVGV4dHVyZSk7Ci0gICAgICAgIHRlbXBSZXNvdXJj
ZTExLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBxdWVyeSB0ZXh0dXJlMmQgaW50ZXJmYWNlIGlu
IHBidWZmZXIgc2hhcmUgaGFuZGxlOiAlMDhsWCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZWxl
YXNlKCk7Ci0gICAgICAgICAgICByZXR1cm4gRUdMX0JBRF9QQVJBTUVURVI7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBWYWxpZGF0ZSBvZmZzY3JlZW4gdGV4dHVyZSBwYXJhbWV0ZXJzCi0gICAg
ICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIG9mZnNjcmVlblRleHR1cmVEZXNjID0gezB9OwotICAg
ICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+R2V0RGVzYygmb2Zmc2NyZWVuVGV4dHVyZURlc2MpOwot
Ci0gICAgICAgIGlmIChvZmZzY3JlZW5UZXh0dXJlRGVzYy5XaWR0aCAhPSAoVUlOVCliYWNrYnVm
ZmVyV2lkdGgKLSAgICAgICAgICAgIHx8IG9mZnNjcmVlblRleHR1cmVEZXNjLkhlaWdodCAhPSAo
VUlOVCliYWNrYnVmZmVySGVpZ2h0Ci0gICAgICAgICAgICB8fCBvZmZzY3JlZW5UZXh0dXJlRGVz
Yy5Gb3JtYXQgIT0gZ2xfZDNkMTE6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobUJhY2tCdWZm
ZXJGb3JtYXQpCi0gICAgICAgICAgICB8fCBvZmZzY3JlZW5UZXh0dXJlRGVzYy5NaXBMZXZlbHMg
IT0gMQotICAgICAgICAgICAgfHwgb2Zmc2NyZWVuVGV4dHVyZURlc2MuQXJyYXlTaXplICE9IDEp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiSW52YWxpZCB0ZXh0dXJlIHBhcmFtZXRlcnMg
aW4gdGhlIHNoYXJlZCBvZmZzY3JlZW4gdGV4dHVyZSBwYnVmZmVyIik7Ci0gICAgICAgICAgICBy
ZWxlYXNlKCk7Ci0gICAgICAgICAgICByZXR1cm4gRUdMX0JBRF9QQVJBTUVURVI7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgY29uc3QgYm9vbCB1c2VTaGFyZWRS
ZXNvdXJjZSA9ICFtV2luZG93ICYmIG1SZW5kZXJlci0+Z2V0U2hhcmVIYW5kbGVTdXBwb3J0KCk7
Ci0KLSAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0Mgb2Zmc2NyZWVuVGV4dHVyZURlc2MgPSB7
MH07Ci0gICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLldpZHRoID0gYmFja2J1ZmZlcldpZHRo
OwotICAgICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5IZWlnaHQgPSBiYWNrYnVmZmVySGVpZ2h0
OwotICAgICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5Gb3JtYXQgPSBnbF9kM2QxMTo6Q29udmVy
dFJlbmRlcmJ1ZmZlckZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCk7Ci0gICAgICAgIG9mZnNjcmVl
blRleHR1cmVEZXNjLk1pcExldmVscyA9IDE7Ci0gICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNj
LkFycmF5U2l6ZSA9IDE7Ci0gICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLlNhbXBsZURlc2Mu
Q291bnQgPSAxOwotICAgICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5TYW1wbGVEZXNjLlF1YWxp
dHkgPSAwOwotICAgICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdF
X0RFRkFVTFQ7Ci0gICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLkJpbmRGbGFncyA9IEQzRDEx
X0JJTkRfUkVOREVSX1RBUkdFVCB8IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFOwotICAgICAg
ICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7Ci0gICAgICAgIG9mZnNj
cmVlblRleHR1cmVEZXNjLk1pc2NGbGFncyA9IHVzZVNoYXJlZFJlc291cmNlID8gRDNEMTFfUkVT
T1VSQ0VfTUlTQ19TSEFSRUQgOiAwOwotCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVUZXh0dXJlMkQoJm9mZnNjcmVlblRleHR1cmVEZXNjLCBOVUxMLCAmbU9mZnNjcmVl
blRleHR1cmUpOwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAg
ICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG9mZnNjcmVlbiB0ZXh0dXJlOiAlMDhsWCIs
IHJlc3VsdCk7Ci0gICAgICAgICAgICByZWxlYXNlKCk7Ci0KLSAgICAgICAgICAgIGlmIChkM2Qx
MTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gRUdMX0NPTlRFWFRfTE9TVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gRUdMX0JBRF9BTExP
QzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05h
bWUobU9mZnNjcmVlblRleHR1cmUsICJPZmZzY3JlZW4gdGV4dHVyZSIpOwotCi0gICAgICAgIC8v
IEVHTF9BTkdMRV9zdXJmYWNlX2QzZF90ZXh0dXJlXzJkX3NoYXJlX2hhbmRsZSByZXF1aXJlcyB0
aGF0IHdlIHN0b3JlIGEgc2hhcmUgaGFuZGxlIGZvciB0aGUgY2xpZW50Ci0gICAgICAgIGlmICh1
c2VTaGFyZWRSZXNvdXJjZSkKLSAgICAgICAgewotICAgICAgICAgICAgSURYR0lSZXNvdXJjZSAq
b2Zmc2NyZWVuVGV4dHVyZVJlc291cmNlID0gTlVMTDsKLSAgICAgICAgICAgIHJlc3VsdCA9IG1P
ZmZzY3JlZW5UZXh0dXJlLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRFhHSVJlc291cmNlKSwg
KHZvaWQqKikmb2Zmc2NyZWVuVGV4dHVyZVJlc291cmNlKTsKLQotICAgICAgICAgICAgLy8gRmFs
bCBiYWNrIHRvIG5vIHNoYXJlIGhhbmRsZSBvbiBmYWlsdXJlCi0gICAgICAgICAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRVJSKCJDb3VsZCBu
b3QgcXVlcnkgb2Zmc2NyZWVuIHRleHR1cmUgcmVzb3VyY2U6ICUwOGxYIiwgcmVzdWx0KTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXN1bHQgPSBvZmZzY3JlZW5UZXh0dXJlUmVzb3VyY2UtPkdldFNoYXJlZEhhbmRsZSgm
bVNoYXJlSGFuZGxlKTsKLSAgICAgICAgICAgICAgICBvZmZzY3JlZW5UZXh0dXJlUmVzb3VyY2Ut
PlJlbGVhc2UoKTsKLQotICAgICAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1TaGFyZUhhbmRsZSA9IE5VTEw7Ci0g
ICAgICAgICAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGdldCBvZmZzY3JlZW4gdGV4dHVyZSBz
aGFyZWQgaGFuZGxlOiAlMDhsWCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgICAgICAKLSAgICBIUkVTVUxUIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0VmlldyhtT2Zmc2NyZWVuVGV4dHVyZSwgTlVMTCwg
Jm1PZmZzY3JlZW5SVFZpZXcpOwotCi0gICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAg
ICBkM2QxMTo6U2V0RGVidWdOYW1lKG1PZmZzY3JlZW5SVFZpZXcsICJPZmZzY3JlZW4gcmVuZGVy
IHRhcmdldCIpOwotCi0gICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZp
ZXcobU9mZnNjcmVlblRleHR1cmUsIE5VTEwsICZtT2Zmc2NyZWVuU1JWaWV3KTsKLSAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobU9mZnNjcmVl
blNSVmlldywgIk9mZnNjcmVlbiBzaGFkZXIgcmVzb3VyY2UiKTsKLQotICAgIGlmIChtRGVwdGhC
dWZmZXJGb3JtYXQgIT0gR0xfTk9ORSkKLSAgICB7Ci0gICAgICAgIEQzRDExX1RFWFRVUkUyRF9E
RVNDIGRlcHRoU3RlbmNpbERlc2MgPSB7MH07Ci0gICAgICAgIGRlcHRoU3RlbmNpbERlc2MuV2lk
dGggPSBiYWNrYnVmZmVyV2lkdGg7Ci0gICAgICAgIGRlcHRoU3RlbmNpbERlc2MuSGVpZ2h0ID0g
YmFja2J1ZmZlckhlaWdodDsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5Gb3JtYXQgPSBnbF9k
M2QxMTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtRGVwdGhCdWZmZXJGb3JtYXQpOwotICAg
ICAgICBkZXB0aFN0ZW5jaWxEZXNjLk1pcExldmVscyA9IDE7Ci0gICAgICAgIGRlcHRoU3RlbmNp
bERlc2MuQXJyYXlTaXplID0gMTsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5TYW1wbGVEZXNj
LkNvdW50ID0gMTsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkg
PSAwOwotICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVM
VDsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX0RFUFRI
X1NURU5DSUw7Ci0gICAgICAgIGRlcHRoU3RlbmNpbERlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOwot
ICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLk1pc2NGbGFncyA9IDA7Ci0KLSAgICAgICAgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRlcHRoU3RlbmNpbERlc2MsIE5VTEwsICZtRGVw
dGhTdGVuY2lsVGV4dHVyZSk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAg
ewotICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGRlcHRoc3RlbmNpbCBzdXJmYWNl
IGZvciBuZXcgc3dhcCBjaGFpbjogMHglMDhYIiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJlbGVh
c2UoKTsKLQotICAgICAgICAgICAgaWYgKGQzZDExOjppc0RldmljZUxvc3RFcnJvcihyZXN1bHQp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBFR0xfQ09OVEVYVF9MT1NU
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBFR0xfQkFEX0FMTE9DOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobURlcHRoU3RlbmNpbFRleHR1cmUsICJEZXB0
aCBzdGVuY2lsIHRleHR1cmUiKTsKLQotICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURl
cHRoU3RlbmNpbFZpZXcobURlcHRoU3RlbmNpbFRleHR1cmUsIE5VTEwsICZtRGVwdGhTdGVuY2ls
RFNWaWV3KTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNk
MTE6OlNldERlYnVnTmFtZShtRGVwdGhTdGVuY2lsRFNWaWV3LCAiRGVwdGggc3RlbmNpbCB2aWV3
Iik7Ci0gICAgfQotCi0gICAgbVdpZHRoID0gYmFja2J1ZmZlcldpZHRoOwotICAgIG1IZWlnaHQg
PSBiYWNrYnVmZmVySGVpZ2h0OwotCi0gICAgaWYgKHByZXZpb3VzT2Zmc2NyZWVuVGV4dHVyZSAh
PSBOVUxMKQotICAgIHsKLSAgICAgICAgRDNEMTFfQk9YIHNvdXJjZUJveCA9IHswfTsKLSAgICAg
ICAgc291cmNlQm94LmxlZnQgPSAwOwotICAgICAgICBzb3VyY2VCb3gucmlnaHQgPSBzdGQ6Om1p
bihwcmV2aW91c1dpZHRoLCBtV2lkdGgpOwotICAgICAgICBzb3VyY2VCb3gudG9wID0gc3RkOjpt
YXgocHJldmlvdXNIZWlnaHQgLSBtSGVpZ2h0LCAwKTsKLSAgICAgICAgc291cmNlQm94LmJvdHRv
bSA9IHByZXZpb3VzSGVpZ2h0OwotICAgICAgICBzb3VyY2VCb3guZnJvbnQgPSAwOwotICAgICAg
ICBzb3VyY2VCb3guYmFjayA9IDE7Ci0KLSAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqZGV2
aWNlQ29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotICAgICAgICBjb25z
dCBpbnQgeW9mZnNldCA9IHN0ZDo6bWF4KG1IZWlnaHQgLSBwcmV2aW91c0hlaWdodCwgMCk7Ci0g
ICAgICAgIGRldmljZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihtT2Zmc2NyZWVuVGV4
dHVyZSwgMCwgMCwgeW9mZnNldCwgMCwgcHJldmlvdXNPZmZzY3JlZW5UZXh0dXJlLCAwLCAmc291
cmNlQm94KTsKLQotICAgICAgICBwcmV2aW91c09mZnNjcmVlblRleHR1cmUtPlJlbGVhc2UoKTsK
LQotICAgICAgICBpZiAobVN3YXBDaGFpbikKLSAgICAgICAgewotICAgICAgICAgICAgc3dhcFJl
Y3QoMCwgMCwgbVdpZHRoLCBtSGVpZ2h0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biBFR0xfU1VDQ0VTUzsKLX0KLQotRUdMaW50IFN3YXBDaGFpbjExOjpyZXNpemUoRUdMaW50IGJh
Y2tidWZmZXJXaWR0aCwgRUdMaW50IGJhY2tidWZmZXJIZWlnaHQpCi17Ci0gICAgSUQzRDExRGV2
aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0gICAgaWYgKGRldmljZSA9
PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEVHTF9CQURfQUNDRVNTOwotICAgIH0KLQot
ICAgIC8vIENhbiBvbmx5IGNhbGwgcmVzaXplIGlmIHdlIGhhdmUgYWxyZWFkeSBjcmVhdGVkIG91
ciBzd2FwIGJ1ZmZlciBhbmQgcmVzb3VyY2VzCi0gICAgQVNTRVJUKG1Td2FwQ2hhaW4gJiYgbUJh
Y2tCdWZmZXJUZXh0dXJlICYmIG1CYWNrQnVmZmVyUlRWaWV3KTsKLQotICAgIGlmIChtQmFja0J1
ZmZlclRleHR1cmUpCi0gICAgewotICAgICAgICBtQmFja0J1ZmZlclRleHR1cmUtPlJlbGVhc2Uo
KTsKLSAgICAgICAgbUJhY2tCdWZmZXJUZXh0dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAo
bUJhY2tCdWZmZXJSVFZpZXcpCi0gICAgewotICAgICAgICBtQmFja0J1ZmZlclJUVmlldy0+UmVs
ZWFzZSgpOwotICAgICAgICBtQmFja0J1ZmZlclJUVmlldyA9IE5VTEw7Ci0gICAgfQotCi0gICAg
Ly8gUmVzaXplIHN3YXAgY2hhaW4KLSAgICBEWEdJX0ZPUk1BVCBiYWNrYnVmZmVyRFhHSUZvcm1h
dCA9IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0
KTsKLSAgICBIUkVTVUxUIHJlc3VsdCA9IG1Td2FwQ2hhaW4tPlJlc2l6ZUJ1ZmZlcnMoMiwgYmFj
a2J1ZmZlcldpZHRoLCBiYWNrYnVmZmVySGVpZ2h0LCBiYWNrYnVmZmVyRFhHSUZvcm1hdCwgMCk7
Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIoIkVycm9yIHJl
c2l6aW5nIHN3YXAgY2hhaW4gYnVmZmVyczogMHglMDhYIiwgcmVzdWx0KTsKLSAgICAgICAgcmVs
ZWFzZSgpOwotCi0gICAgICAgIGlmIChkM2QxMTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEVHTF9DT05URVhUX0xPU1Q7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRUdMX0JBRF9B
TExPQzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlc3VsdCA9IG1Td2FwQ2hhaW4tPkdldEJ1
ZmZlcigwLCBfX3V1aWRvZihJRDNEMTFUZXh0dXJlMkQpLCAoTFBWT0lEKikmbUJhY2tCdWZmZXJU
ZXh0dXJlKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIGlmIChTVUNDRUVE
RUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUJhY2tCdWZm
ZXJUZXh0dXJlLCAiQmFjayBidWZmZXIgdGV4dHVyZSIpOwotICAgIH0KLQotICAgIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0VmlldyhtQmFja0J1ZmZlclRleHR1cmUsIE5VTEws
ICZtQmFja0J1ZmZlclJUVmlldyk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAg
ICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBkM2QxMTo6U2V0RGVidWdO
YW1lKG1CYWNrQnVmZmVyUlRWaWV3LCAiQmFjayBidWZmZXIgcmVuZGVyIHRhcmdldCIpOwotICAg
IH0KLQotICAgIHJldHVybiByZXNldE9mZnNjcmVlblRleHR1cmUoYmFja2J1ZmZlcldpZHRoLCBi
YWNrYnVmZmVySGVpZ2h0KTsKLX0KLQotRUdMaW50IFN3YXBDaGFpbjExOjpyZXNldChpbnQgYmFj
a2J1ZmZlcldpZHRoLCBpbnQgYmFja2J1ZmZlckhlaWdodCwgRUdMaW50IHN3YXBJbnRlcnZhbCkK
LXsKLSAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0K
LSAgICBpZiAoZGV2aWNlID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gRUdMX0JBRF9B
Q0NFU1M7Ci0gICAgfQotCi0gICAgLy8gUmVsZWFzZSBzcGVjaWZpYyByZXNvdXJjZXMgdG8gZnJl
ZSB1cCBtZW1vcnkgZm9yIHRoZSBuZXcgcmVuZGVyIHRhcmdldCwgd2hpbGUgdGhlCi0gICAgLy8g
b2xkIHJlbmRlciB0YXJnZXQgc3RpbGwgZXhpc3RzIGZvciB0aGUgcHVycG9zZSBvZiBwcmVzZXJ2
aW5nIGl0cyBjb250ZW50cy4KLSAgICBpZiAobVN3YXBDaGFpbikKLSAgICB7Ci0gICAgICAgIG1T
d2FwQ2hhaW4tPlJlbGVhc2UoKTsKLSAgICAgICAgbVN3YXBDaGFpbiA9IE5VTEw7Ci0gICAgfQot
Ci0gICAgaWYgKG1CYWNrQnVmZmVyVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1CYWNrQnVmZmVy
VGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICBtQmFja0J1ZmZlclRleHR1cmUgPSBOVUxMOwot
ICAgIH0KLQotICAgIGlmIChtQmFja0J1ZmZlclJUVmlldykKLSAgICB7Ci0gICAgICAgIG1CYWNr
QnVmZmVyUlRWaWV3LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1CYWNrQnVmZmVyUlRWaWV3ID0gTlVM
TDsKLSAgICB9Ci0KLSAgICBtU3dhcEludGVydmFsID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50
Pihzd2FwSW50ZXJ2YWwpOwotICAgIGlmIChtU3dhcEludGVydmFsID4gNCkKLSAgICB7Ci0gICAg
ICAgIC8vIElEWEdJU3dhcENoYWluOjpQcmVzZW50IGRvY3VtZW50YXRpb24gc3RhdGVzIHRoYXQg
dmFsaWQgc3luYyBpbnRlcnZhbHMgYXJlIGluIHRoZSBbMCw0XSByYW5nZQotICAgICAgICByZXR1
cm4gRUdMX0JBRF9QQVJBTUVURVI7Ci0gICAgfQotCi0gICAgLy8gRUdMIGFsbG93cyBjcmVhdGlu
ZyBhIHN1cmZhY2Ugd2l0aCAweDAgZGltZW5zaW9uLCBob3dldmVyLCBEWEdJIGRvZXMgbm90IGxp
a2UgMHgwIHN3YXBjaGFpbnMKLSAgICBpZiAoYmFja2J1ZmZlcldpZHRoIDwgMSB8fCBiYWNrYnVm
ZmVySGVpZ2h0IDwgMSkKLSAgICB7Ci0gICAgICAgIHJlbGVhc2VPZmZzY3JlZW5UZXh0dXJlKCk7
Ci0gICAgICAgIHJldHVybiBFR0xfU1VDQ0VTUzsKLSAgICB9Ci0KLSAgICBpZiAobVdpbmRvdykK
LSAgICB7Ci0gICAgICAgIElEWEdJRmFjdG9yeSAqZmFjdG9yeSA9IG1SZW5kZXJlci0+Z2V0RHhn
aUZhY3RvcnkoKTsKLQotICAgICAgICBEWEdJX1NXQVBfQ0hBSU5fREVTQyBzd2FwQ2hhaW5EZXNj
ID0gezB9OwotICAgICAgICBzd2FwQ2hhaW5EZXNjLkJ1ZmZlckNvdW50ID0gMjsKLSAgICAgICAg
c3dhcENoYWluRGVzYy5CdWZmZXJEZXNjLkZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVy
YnVmZmVyRm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0KTsKLSAgICAgICAgc3dhcENoYWluRGVzYy5C
dWZmZXJEZXNjLldpZHRoID0gYmFja2J1ZmZlcldpZHRoOwotICAgICAgICBzd2FwQ2hhaW5EZXNj
LkJ1ZmZlckRlc2MuSGVpZ2h0ID0gYmFja2J1ZmZlckhlaWdodDsKLSAgICAgICAgc3dhcENoYWlu
RGVzYy5CdWZmZXJEZXNjLlNjYWxpbmcgPSBEWEdJX01PREVfU0NBTElOR19VTlNQRUNJRklFRDsK
LSAgICAgICAgc3dhcENoYWluRGVzYy5CdWZmZXJEZXNjLlNjYW5saW5lT3JkZXJpbmcgPSBEWEdJ
X01PREVfU0NBTkxJTkVfT1JERVJfVU5TUEVDSUZJRUQ7Ci0gICAgICAgIHN3YXBDaGFpbkRlc2Mu
QnVmZmVyRGVzYy5SZWZyZXNoUmF0ZS5OdW1lcmF0b3IgPSAwOwotICAgICAgICBzd2FwQ2hhaW5E
ZXNjLkJ1ZmZlckRlc2MuUmVmcmVzaFJhdGUuRGVub21pbmF0b3IgPSAxOwotICAgICAgICBzd2Fw
Q2hhaW5EZXNjLkJ1ZmZlclVzYWdlID0gRFhHSV9VU0FHRV9SRU5ERVJfVEFSR0VUX09VVFBVVDsK
LSAgICAgICAgc3dhcENoYWluRGVzYy5GbGFncyA9IDA7Ci0gICAgICAgIHN3YXBDaGFpbkRlc2Mu
T3V0cHV0V2luZG93ID0gbVdpbmRvdzsKLSAgICAgICAgc3dhcENoYWluRGVzYy5TYW1wbGVEZXNj
LkNvdW50ID0gMTsKLSAgICAgICAgc3dhcENoYWluRGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAw
OwotICAgICAgICBzd2FwQ2hhaW5EZXNjLldpbmRvd2VkID0gVFJVRTsKLQotICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IGZhY3RvcnktPkNyZWF0ZVN3YXBDaGFpbihkZXZpY2UsICZzd2FwQ2hhaW5E
ZXNjLCAmbVN3YXBDaGFpbik7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYWRkaXRpb25hbCBzd2FwIGNo
YWlucyBvciBvZmZzY3JlZW4gc3VyZmFjZXM6ICUwOGxYIiwgcmVzdWx0KTsKLSAgICAgICAgICAg
IHJlbGVhc2UoKTsKLQotICAgICAgICAgICAgaWYgKGQzZDExOjppc0RldmljZUxvc3RFcnJvcihy
ZXN1bHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBFR0xfQ09OVEVY
VF9MT1NUOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIC8vIFdlIGNhbm5vdCBjcmVhdGUgYSBzd2FwIGNoYWluIGZvciBhbiBI
V05EIHRoYXQgaXMgb3duZWQgYnkgYSBkaWZmZXJlbnQgcHJvY2VzcyBvbiBzb21lIHZlcnNpb25z
IG9mCi0gICAgICAgICAgICAgICAgLy8gd2luZG93cwotICAgICAgICAgICAgICAgIERXT1JEIGN1
cnJlbnRQcm9jZXNzSWQgPSBHZXRDdXJyZW50UHJvY2Vzc0lkKCk7Ci0gICAgICAgICAgICAgICAg
RFdPUkQgd25kUHJvY2Vzc0lkOwotICAgICAgICAgICAgICAgIEdldFdpbmRvd1RocmVhZFByb2Nl
c3NJZChtV2luZG93LCAmd25kUHJvY2Vzc0lkKTsKLQotICAgICAgICAgICAgICAgIGlmIChjdXJy
ZW50UHJvY2Vzc0lkICE9IHduZFByb2Nlc3NJZCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBzd2FwIGNoYWluLCB3aW5kb3cgb3du
ZWQgYnkgZGlmZmVyZW50IHByb2Nlc3MiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVH
TF9CQURfTkFUSVZFX1dJTkRPVzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVHTF9C
QURfQUxMT0M7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgcmVzdWx0ID0gbVN3YXBDaGFpbi0+R2V0QnVmZmVyKDAsIF9fdXVpZG9mKElEM0Qx
MVRleHR1cmUyRCksIChMUFZPSUQqKSZtQmFja0J1ZmZlclRleHR1cmUpOwotICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1CYWNr
QnVmZmVyVGV4dHVyZSwgIkJhY2sgYnVmZmVyIHRleHR1cmUiKTsKLQotICAgICAgICByZXN1bHQg
PSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobUJhY2tCdWZmZXJUZXh0dXJlLCBOVUxM
LCAmbUJhY2tCdWZmZXJSVFZpZXcpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkp
OwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1CYWNrQnVmZmVyUlRWaWV3LCAiQmFjayBi
dWZmZXIgcmVuZGVyIHRhcmdldCIpOwotICAgIH0KLQotICAgIC8vIElmIHdlIGFyZSByZXNpemlu
ZyB0aGUgc3dhcCBjaGFpbiwgd2UgZG9uJ3Qgd2lzaCB0byByZWNyZWF0ZSBhbGwgdGhlIHN0YXRp
YyByZXNvdXJjZXMKLSAgICBpZiAoIW1QYXNzVGhyb3VnaFJlc291cmNlc0luaXQpCi0gICAgewot
ICAgICAgICBtUGFzc1Rocm91Z2hSZXNvdXJjZXNJbml0ID0gdHJ1ZTsKLSAgICAgICAgaW5pdFBh
c3NUaHJvdWdoUmVzb3VyY2VzKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc2V0T2Zmc2NyZWVu
VGV4dHVyZShiYWNrYnVmZmVyV2lkdGgsIGJhY2tidWZmZXJIZWlnaHQpOwotfQotCi12b2lkIFN3
YXBDaGFpbjExOjppbml0UGFzc1Rocm91Z2hSZXNvdXJjZXMoKQotewotICAgIElEM0QxMURldmlj
ZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLQotICAgIEFTU0VSVChkZXZpY2Ug
IT0gTlVMTCk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgb3VyIHJlc291cmNlcyBhcmUgYWxsIG5vdCBh
bGxvY2F0ZWQsIHdoZW4gd2UgY3JlYXRlCi0gICAgQVNTRVJUKG1RdWFkVkIgPT0gTlVMTCAmJiBt
UGFzc1Rocm91Z2hTYW1wbGVyID09IE5VTEwpOwotICAgIEFTU0VSVChtUGFzc1Rocm91Z2hJTCA9
PSBOVUxMICYmIG1QYXNzVGhyb3VnaFZTID09IE5VTEwgJiYgbVBhc3NUaHJvdWdoUFMgPT0gTlVM
TCk7Ci0KLSAgICBEM0QxMV9CVUZGRVJfREVTQyB2YkRlc2M7Ci0gICAgdmJEZXNjLkJ5dGVXaWR0
aCA9IHNpemVvZihkM2QxMTo6UG9zaXRpb25UZXhDb29yZFZlcnRleCkgKiA0OwotICAgIHZiRGVz
Yy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZTkFNSUM7Ci0gICAgdmJEZXNjLkJpbmRGbGFncyA9IEQz
RDExX0JJTkRfVkVSVEVYX0JVRkZFUjsKLSAgICB2YkRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSBEM0Qx
MV9DUFVfQUNDRVNTX1dSSVRFOwotICAgIHZiRGVzYy5NaXNjRmxhZ3MgPSAwOwotICAgIHZiRGVz
Yy5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKLQotICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVCdWZmZXIoJnZiRGVzYywgTlVMTCwgJm1RdWFkVkIpOwotICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7Ci0gICAgZDNkMTE6OlNldERlYnVnTmFtZShtUXVhZFZCLCAiU3dhcCBj
aGFpbiBxdWFkIHZlcnRleCBidWZmZXIiKTsKLQotICAgIEQzRDExX1NBTVBMRVJfREVTQyBzYW1w
bGVyRGVzYzsKLSAgICBzYW1wbGVyRGVzYy5GaWx0ZXIgPSBEM0QxMV9GSUxURVJfTUlOX01BR19N
SVBfUE9JTlQ7Ci0gICAgc2FtcGxlckRlc2MuQWRkcmVzc1UgPSBEM0QxMV9URVhUVVJFX0FERFJF
U1NfQ0xBTVA7Ci0gICAgc2FtcGxlckRlc2MuQWRkcmVzc1YgPSBEM0QxMV9URVhUVVJFX0FERFJF
U1NfQ0xBTVA7Ci0gICAgc2FtcGxlckRlc2MuQWRkcmVzc1cgPSBEM0QxMV9URVhUVVJFX0FERFJF
U1NfQ0xBTVA7Ci0gICAgc2FtcGxlckRlc2MuTWlwTE9EQmlhcyA9IDAuMGY7Ci0gICAgc2FtcGxl
ckRlc2MuTWF4QW5pc290cm9weSA9IDA7Ci0gICAgc2FtcGxlckRlc2MuQ29tcGFyaXNvbkZ1bmMg
PSBEM0QxMV9DT01QQVJJU09OX05FVkVSOwotICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzBd
ID0gMC4wZjsKLSAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclsxXSA9IDAuMGY7Ci0gICAgc2Ft
cGxlckRlc2MuQm9yZGVyQ29sb3JbMl0gPSAwLjBmOwotICAgIHNhbXBsZXJEZXNjLkJvcmRlckNv
bG9yWzNdID0gMC4wZjsKLSAgICBzYW1wbGVyRGVzYy5NaW5MT0QgPSAwOwotICAgIHNhbXBsZXJE
ZXNjLk1heExPRCA9IEQzRDExX0ZMT0FUMzJfTUFYOwotCi0gICAgcmVzdWx0ID0gZGV2aWNlLT5D
cmVhdGVTYW1wbGVyU3RhdGUoJnNhbXBsZXJEZXNjLCAmbVBhc3NUaHJvdWdoU2FtcGxlcik7Ci0g
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Q
YXNzVGhyb3VnaFNhbXBsZXIsICJTd2FwIGNoYWluIHBhc3MgdGhyb3VnaCBzYW1wbGVyIik7Ci0K
LSAgICBEM0QxMV9JTlBVVF9FTEVNRU5UX0RFU0MgcXVhZExheW91dFtdID0KLSAgICB7Ci0gICAg
ICAgIHsgIlBPU0lUSU9OIiwgMCwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCAwLCAwLCBEM0Qx
MV9JTlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAgfSwKLSAgICAgICAgeyAiVEVYQ09PUkQiLCAwLCBE
WEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDAsIDgsIEQzRDExX0lOUFVUX1BFUl9WRVJURVhfREFU
QSwgMCB9LAotICAgIH07Ci0KLSAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUlucHV0TGF5b3V0
KHF1YWRMYXlvdXQsIDIsIGdfVlNfUGFzc3Rocm91Z2gsIHNpemVvZihnX1ZTX1Bhc3N0aHJvdWdo
KSwgJm1QYXNzVGhyb3VnaElMKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAg
IGQzZDExOjpTZXREZWJ1Z05hbWUobVBhc3NUaHJvdWdoSUwsICJTd2FwIGNoYWluIHBhc3MgdGhy
b3VnaCBsYXlvdXQiKTsKLQotICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVy
KGdfVlNfUGFzc3Rocm91Z2gsIHNpemVvZihnX1ZTX1Bhc3N0aHJvdWdoKSwgTlVMTCwgJm1QYXNz
VGhyb3VnaFZTKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIGQzZDExOjpT
ZXREZWJ1Z05hbWUobVBhc3NUaHJvdWdoVlMsICJTd2FwIGNoYWluIHBhc3MgdGhyb3VnaCB2ZXJ0
ZXggc2hhZGVyIik7Ci0KLSAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdf
UFNfUGFzc3Rocm91Z2hSR0JBLCBzaXplb2YoZ19QU19QYXNzdGhyb3VnaFJHQkEpLCBOVUxMLCAm
bVBhc3NUaHJvdWdoUFMpOwotICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgZDNk
MTE6OlNldERlYnVnTmFtZShtUGFzc1Rocm91Z2hQUywgIlN3YXAgY2hhaW4gcGFzcyB0aHJvdWdo
IHBpeGVsIHNoYWRlciIpOwotfQotCi0vLyBwYXJhbWV0ZXJzIHNob3VsZCBiZSB2YWxpZGF0ZWQv
Y2xhbXBlZCBieSBjYWxsZXIKLUVHTGludCBTd2FwQ2hhaW4xMTo6c3dhcFJlY3QoRUdMaW50IHgs
IEVHTGludCB5LCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQpCi17Ci0gICAgaWYgKCFtU3dh
cENoYWluKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEVHTF9TVUNDRVNTOwotICAgIH0KLQotICAg
IElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLSAgICBJRDNE
MTFEZXZpY2VDb250ZXh0ICpkZXZpY2VDb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250
ZXh0KCk7Ci0KLSAgICAvLyBTZXQgdmVydGljZXMKLSAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VS
Q0UgbWFwcGVkUmVzb3VyY2U7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2VDb250ZXh0LT5N
YXAobVF1YWRWQiwgMCwgRDNEMTFfTUFQX1dSSVRFX0RJU0NBUkQsIDAsICZtYXBwZWRSZXNvdXJj
ZSk7Ci0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEVHTF9C
QURfQUNDRVNTOwotICAgIH0KLQotICAgIGQzZDExOjpQb3NpdGlvblRleENvb3JkVmVydGV4ICp2
ZXJ0aWNlcyA9IHN0YXRpY19jYXN0PGQzZDExOjpQb3NpdGlvblRleENvb3JkVmVydGV4Kj4obWFw
cGVkUmVzb3VyY2UucERhdGEpOwotCi0gICAgLy8gQ3JlYXRlIGEgcXVhZCBpbiBob21vZ2VuZW91
cyBjb29yZGluYXRlcwotICAgIGZsb2F0IHgxID0gKHggLyBmbG9hdChtV2lkdGgpKSAqIDIuMGYg
LSAxLjBmOwotICAgIGZsb2F0IHkxID0gKHkgLyBmbG9hdChtSGVpZ2h0KSkgKiAyLjBmIC0gMS4w
ZjsKLSAgICBmbG9hdCB4MiA9ICgoeCArIHdpZHRoKSAvIGZsb2F0KG1XaWR0aCkpICogMi4wZiAt
IDEuMGY7Ci0gICAgZmxvYXQgeTIgPSAoKHkgKyBoZWlnaHQpIC8gZmxvYXQobUhlaWdodCkpICog
Mi4wZiAtIDEuMGY7Ci0KLSAgICBmbG9hdCB1MSA9IHggLyBmbG9hdChtV2lkdGgpOwotICAgIGZs
b2F0IHYxID0geSAvIGZsb2F0KG1IZWlnaHQpOwotICAgIGZsb2F0IHUyID0gKHggKyB3aWR0aCkg
LyBmbG9hdChtV2lkdGgpOwotICAgIGZsb2F0IHYyID0gKHkgKyBoZWlnaHQpIC8gZmxvYXQobUhl
aWdodCk7Ci0KLSAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNb
MF0sIHgxLCB5MSwgdTEsIHYxKTsKLSAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRl
eCgmdmVydGljZXNbMV0sIHgxLCB5MiwgdTEsIHYyKTsKLSAgICBkM2QxMTo6U2V0UG9zaXRpb25U
ZXhDb29yZFZlcnRleCgmdmVydGljZXNbMl0sIHgyLCB5MSwgdTIsIHYxKTsKLSAgICBkM2QxMTo6
U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNbM10sIHgyLCB5MiwgdTIsIHYyKTsK
LQotICAgIGRldmljZUNvbnRleHQtPlVubWFwKG1RdWFkVkIsIDApOwotCi0gICAgc3RhdGljIFVJ
TlQgc3RyaWRlID0gc2l6ZW9mKGQzZDExOjpQb3NpdGlvblRleENvb3JkVmVydGV4KTsKLSAgICBz
dGF0aWMgVUlOVCBzdGFydElkeCA9IDA7Ci0gICAgZGV2aWNlQ29udGV4dC0+SUFTZXRWZXJ0ZXhC
dWZmZXJzKDAsIDEsICZtUXVhZFZCLCAmc3RyaWRlLCAmc3RhcnRJZHgpOwotCi0gICAgLy8gQXBw
bHkgc3RhdGUKLSAgICBkZXZpY2VDb250ZXh0LT5PTVNldERlcHRoU3RlbmNpbFN0YXRlKE5VTEws
IDB4RkZGRkZGRkYpOwotCi0gICAgc3RhdGljIGNvbnN0IGZsb2F0IGJsZW5kRmFjdG9yWzRdID0g
eyAxLjBmLCAxLjBmLCAxLjBmLCAxLjBmIH07Ci0gICAgZGV2aWNlQ29udGV4dC0+T01TZXRCbGVu
ZFN0YXRlKE5VTEwsIGJsZW5kRmFjdG9yLCAweEZGRkZGRkYpOwotCi0gICAgZGV2aWNlQ29udGV4
dC0+UlNTZXRTdGF0ZShOVUxMKTsKLQotICAgIC8vIEFwcGx5IHNoYWRlcnMKLSAgICBkZXZpY2VD
b250ZXh0LT5JQVNldElucHV0TGF5b3V0KG1QYXNzVGhyb3VnaElMKTsKLSAgICBkZXZpY2VDb250
ZXh0LT5JQVNldFByaW1pdGl2ZVRvcG9sb2d5KEQzRF9QUklNSVRJVkVfVE9QT0xPR1lfVFJJQU5H
TEVTVFJJUCk7Ci0gICAgZGV2aWNlQ29udGV4dC0+VlNTZXRTaGFkZXIobVBhc3NUaHJvdWdoVlMs
IE5VTEwsIDApOwotICAgIGRldmljZUNvbnRleHQtPlBTU2V0U2hhZGVyKG1QYXNzVGhyb3VnaFBT
LCBOVUxMLCAwKTsKLSAgICBkZXZpY2VDb250ZXh0LT5HU1NldFNoYWRlcihOVUxMLCBOVUxMLCAw
KTsKLQotICAgIC8vIEFwcGx5IHJlbmRlciB0YXJnZXRzCi0gICAgbVJlbmRlcmVyLT5zZXRPbmVU
aW1lUmVuZGVyVGFyZ2V0KG1CYWNrQnVmZmVyUlRWaWV3KTsKLQotICAgIC8vIFNldCB0aGUgdmll
d3BvcnQKLSAgICBEM0QxMV9WSUVXUE9SVCB2aWV3cG9ydDsKLSAgICB2aWV3cG9ydC5Ub3BMZWZ0
WCA9IDA7Ci0gICAgdmlld3BvcnQuVG9wTGVmdFkgPSAwOwotICAgIHZpZXdwb3J0LldpZHRoID0g
bVdpZHRoOwotICAgIHZpZXdwb3J0LkhlaWdodCA9IG1IZWlnaHQ7Ci0gICAgdmlld3BvcnQuTWlu
RGVwdGggPSAwLjBmOwotICAgIHZpZXdwb3J0Lk1heERlcHRoID0gMS4wZjsKLSAgICBkZXZpY2VD
b250ZXh0LT5SU1NldFZpZXdwb3J0cygxLCAmdmlld3BvcnQpOwotCi0gICAgLy8gQXBwbHkgdGV4
dHVyZXMKLSAgICBkZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlclJlc291cmNlcygwLCAxLCAmbU9m
ZnNjcmVlblNSVmlldyk7Ci0gICAgZGV2aWNlQ29udGV4dC0+UFNTZXRTYW1wbGVycygwLCAxLCAm
bVBhc3NUaHJvdWdoU2FtcGxlcik7Ci0KLSAgICAvLyBEcmF3Ci0gICAgZGV2aWNlQ29udGV4dC0+
RHJhdyg0LCAwKTsKLQotI2lmIEFOR0xFX0ZPUkNFX1ZTWU5DX09GRgotICAgIHJlc3VsdCA9IG1T
d2FwQ2hhaW4tPlByZXNlbnQoMCwgMCk7Ci0jZWxzZQotICAgIHJlc3VsdCA9IG1Td2FwQ2hhaW4t
PlByZXNlbnQobVN3YXBJbnRlcnZhbCwgMCk7Ci0jZW5kaWYKLQotICAgIGlmIChyZXN1bHQgPT0g
RFhHSV9FUlJPUl9ERVZJQ0VfUkVNT1ZFRCkKLSAgICB7Ci0gICAgICAgIEhSRVNVTFQgcmVtb3Zl
ZFJlYXNvbiA9IGRldmljZS0+R2V0RGV2aWNlUmVtb3ZlZFJlYXNvbigpOwotICAgICAgICBFUlIo
IlByZXNlbnQgZmFpbGVkOiB0aGUgRDNEMTEgZGV2aWNlIHdhcyByZW1vdmVkOiAweCUwOFgiLCBy
ZW1vdmVkUmVhc29uKTsKLSAgICAgICAgcmV0dXJuIEVHTF9DT05URVhUX0xPU1Q7Ci0gICAgfQot
ICAgIGVsc2UgaWYgKHJlc3VsdCA9PSBEWEdJX0VSUk9SX0RFVklDRV9SRVNFVCkKLSAgICB7Ci0g
ICAgICAgIEVSUigiUHJlc2VudCBmYWlsZWQ6IHRoZSBEM0QxMSBkZXZpY2Ugd2FzIHJlc2V0IGZy
b20gYSBiYWQgY29tbWFuZC4iKTsKLSAgICAgICAgcmV0dXJuIEVHTF9DT05URVhUX0xPU1Q7Ci0g
ICAgfQotICAgIGVsc2UgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgRVJSKCJQ
cmVzZW50IGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgMHglMDhYIiwgcmVzdWx0KTsKLSAgICB9Ci0K
LSAgICAvLyBVbmJpbmQKLSAgICBzdGF0aWMgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpjb25z
dCBudWxsU1JWID0gTlVMTDsKLSAgICBkZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlclJlc291cmNl
cygwLCAxLCAmbnVsbFNSVik7Ci0KLSAgICBtUmVuZGVyZXItPnVuYXBwbHlSZW5kZXJUYXJnZXRz
KCk7Ci0gICAgbVJlbmRlcmVyLT5tYXJrQWxsU3RhdGVEaXJ0eSgpOwotCi0gICAgcmV0dXJuIEVH
TF9TVUNDRVNTOwotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHRleHR1cmUuCi0vLyBj
YWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHRleHR1cmUKLUlEM0QxMVRleHR1cmUy
RCAqU3dhcENoYWluMTE6OmdldE9mZnNjcmVlblRleHR1cmUoKQotewotICAgIGlmIChtT2Zmc2Ny
ZWVuVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5BZGRSZWYoKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gbU9mZnNjcmVlblRleHR1cmU7Ci19Ci0KLS8vIEluY3JlbWVu
dHMgcmVmY291bnQgb24gdmlldy4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJu
ZWQgdmlldwotSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqU3dhcENoYWluMTE6OmdldFJlbmRlclRh
cmdldCgpCi17Ci0gICAgaWYgKG1PZmZzY3JlZW5SVFZpZXcpCi0gICAgewotICAgICAgICBtT2Zm
c2NyZWVuUlRWaWV3LT5BZGRSZWYoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbU9mZnNjcmVlblJU
VmlldzsKLX0KLQotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiB2aWV3LgotLy8gY2FsbGVyIG11
c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCB2aWV3Ci1JRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcg
KlN3YXBDaGFpbjExOjpnZXRSZW5kZXJUYXJnZXRTaGFkZXJSZXNvdXJjZSgpCi17Ci0gICAgaWYg
KG1PZmZzY3JlZW5TUlZpZXcpCi0gICAgewotICAgICAgICBtT2Zmc2NyZWVuU1JWaWV3LT5BZGRS
ZWYoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbU9mZnNjcmVlblNSVmlldzsKLX0KLQotLy8gSW5j
cmVtZW50cyByZWZjb3VudCBvbiB2aWV3LgotLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSBy
ZXR1cm5lZCB2aWV3Ci1JRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpTd2FwQ2hhaW4xMTo6Z2V0RGVw
dGhTdGVuY2lsKCkKLXsKLSAgICBpZiAobURlcHRoU3RlbmNpbERTVmlldykKLSAgICB7Ci0gICAg
ICAgIG1EZXB0aFN0ZW5jaWxEU1ZpZXctPkFkZFJlZigpOwotICAgIH0KLQotICAgIHJldHVybiBt
RGVwdGhTdGVuY2lsRFNWaWV3OwotfQotCi1JRDNEMTFUZXh0dXJlMkQgKlN3YXBDaGFpbjExOjpn
ZXREZXB0aFN0ZW5jaWxUZXh0dXJlKCkKLXsKLSAgICBpZiAobURlcHRoU3RlbmNpbFRleHR1cmUp
Ci0gICAgewotICAgICAgICBtRGVwdGhTdGVuY2lsVGV4dHVyZS0+QWRkUmVmKCk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWxUZXh0dXJlOwotfQotCi1Td2FwQ2hhaW4xMSAqU3dh
cENoYWluMTE6Om1ha2VTd2FwQ2hhaW4xMShTd2FwQ2hhaW4gKnN3YXBDaGFpbikKLXsKLSAgICBB
U1NFUlQoSEFTX0RZTkFNSUNfVFlQRShyeDo6U3dhcENoYWluMTEqLCBzd2FwQ2hhaW4pKTsKLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8cng6OlN3YXBDaGFpbjExKj4oc3dhcENoYWluKTsKLX0KLQot
dm9pZCBTd2FwQ2hhaW4xMTo6cmVjcmVhdGUoKQotewotICAgIC8vIHBvc3NpYmx5IHNob3VsZCB1
c2UgdGhpcyBtZXRob2QgaW5zdGVhZCBvZiByZXNldAotfQotCi19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1N3YXBDaGFpbjExLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1N3YXBDaGFp
bjExLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwMDEwNDYwMmUzNWIwYmNiYTEx
MDM5YTE2ZWJmYzYxMTE2MWVmNjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9Td2FwQ2hhaW4xMS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
LS8vCi0KLS8vIFN3YXBDaGFpbjExLmg6IERlZmluZXMgYSBiYWNrLWVuZCBzcGVjaWZpYyBjbGFz
cyBmb3IgdGhlIEQzRDExIHN3YXAgY2hhaW4uCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVS
X1NXQVBDSEFJTjExX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9TV0FQQ0hBSU4xMV9I
XwotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvU3dhcENoYWluLmgiCi0KLW5hbWVzcGFjZSByeAotewotY2xhc3MgUmVuZGVyZXIx
MTsKLQotY2xhc3MgU3dhcENoYWluMTEgOiBwdWJsaWMgU3dhcENoYWluCi17Ci0gIHB1YmxpYzoK
LSAgICBTd2FwQ2hhaW4xMShSZW5kZXJlcjExICpyZW5kZXJlciwgSFdORCB3aW5kb3csIEhBTkRM
RSBzaGFyZUhhbmRsZSwKLSAgICAgICAgICAgICAgICBHTGVudW0gYmFja0J1ZmZlckZvcm1hdCwg
R0xlbnVtIGRlcHRoQnVmZmVyRm9ybWF0KTsKLSAgICB2aXJ0dWFsIH5Td2FwQ2hhaW4xMSgpOwot
Ci0gICAgRUdMaW50IHJlc2l6ZShFR0xpbnQgYmFja2J1ZmZlcldpZHRoLCBFR0xpbnQgYmFja2J1
ZmZlckhlaWdodCk7Ci0gICAgdmlydHVhbCBFR0xpbnQgcmVzZXQoRUdMaW50IGJhY2tidWZmZXJX
aWR0aCwgRUdMaW50IGJhY2tidWZmZXJIZWlnaHQsIEVHTGludCBzd2FwSW50ZXJ2YWwpOwotICAg
IHZpcnR1YWwgRUdMaW50IHN3YXBSZWN0KEVHTGludCB4LCBFR0xpbnQgeSwgRUdMaW50IHdpZHRo
LCBFR0xpbnQgaGVpZ2h0KTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjcmVhdGUoKTsKLQotICAgIHZp
cnR1YWwgSUQzRDExVGV4dHVyZTJEICpnZXRPZmZzY3JlZW5UZXh0dXJlKCk7Ci0gICAgdmlydHVh
bCBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpnZXRSZW5kZXJUYXJnZXQoKTsKLSAgICB2aXJ0dWFs
IElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0UmVuZGVyVGFyZ2V0U2hhZGVyUmVzb3VyY2Uo
KTsKLQotICAgIHZpcnR1YWwgSUQzRDExVGV4dHVyZTJEICpnZXREZXB0aFN0ZW5jaWxUZXh0dXJl
KCk7Ci0gICAgdmlydHVhbCBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpnZXREZXB0aFN0ZW5jaWwo
KTsKLQotICAgIEVHTGludCBnZXRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1XaWR0aDsgfQotICAg
IEVHTGludCBnZXRIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtSGVpZ2h0OyB9Ci0KLSAgICBzdGF0
aWMgU3dhcENoYWluMTEgKm1ha2VTd2FwQ2hhaW4xMShTd2FwQ2hhaW4gKnN3YXBDaGFpbik7Ci0K
LSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU3dhcENoYWluMTEpOwot
Ci0gICAgdm9pZCByZWxlYXNlKCk7Ci0gICAgdm9pZCBpbml0UGFzc1Rocm91Z2hSZXNvdXJjZXMo
KTsKLSAgICB2b2lkIHJlbGVhc2VPZmZzY3JlZW5UZXh0dXJlKCk7Ci0gICAgRUdMaW50IHJlc2V0
T2Zmc2NyZWVuVGV4dHVyZShpbnQgYmFja2J1ZmZlcldpZHRoLCBpbnQgYmFja2J1ZmZlckhlaWdo
dCk7Ci0KLSAgICBSZW5kZXJlcjExICptUmVuZGVyZXI7Ci0gICAgRUdMaW50IG1IZWlnaHQ7Ci0g
ICAgRUdMaW50IG1XaWR0aDsKLSAgICBib29sIG1BcHBDcmVhdGVkU2hhcmVIYW5kbGU7Ci0gICAg
dW5zaWduZWQgaW50IG1Td2FwSW50ZXJ2YWw7Ci0gICAgYm9vbCBtUGFzc1Rocm91Z2hSZXNvdXJj
ZXNJbml0OwotCi0gICAgSURYR0lTd2FwQ2hhaW4gKm1Td2FwQ2hhaW47Ci0KLSAgICBJRDNEMTFU
ZXh0dXJlMkQgKm1CYWNrQnVmZmVyVGV4dHVyZTsKLSAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3
ICptQmFja0J1ZmZlclJUVmlldzsKLQotICAgIElEM0QxMVRleHR1cmUyRCAqbU9mZnNjcmVlblRl
eHR1cmU7Ci0gICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqbU9mZnNjcmVlblJUVmlldzsKLSAg
ICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKm1PZmZzY3JlZW5TUlZpZXc7Ci0KLSAgICBJRDNE
MTFUZXh0dXJlMkQgKm1EZXB0aFN0ZW5jaWxUZXh0dXJlOwotICAgIElEM0QxMURlcHRoU3RlbmNp
bFZpZXcgKm1EZXB0aFN0ZW5jaWxEU1ZpZXc7Ci0KLSAgICBJRDNEMTFCdWZmZXIgKm1RdWFkVkI7
Ci0gICAgSUQzRDExU2FtcGxlclN0YXRlICptUGFzc1Rocm91Z2hTYW1wbGVyOwotICAgIElEM0Qx
MUlucHV0TGF5b3V0ICptUGFzc1Rocm91Z2hJTDsKLSAgICBJRDNEMTFWZXJ0ZXhTaGFkZXIgKm1Q
YXNzVGhyb3VnaFZTOwotICAgIElEM0QxMVBpeGVsU2hhZGVyICptUGFzc1Rocm91Z2hQUzsKLX07
Ci0KLX0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfU1dBUENIQUlOMTFfSF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvU3dh
cENoYWluOS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL1N3YXBDaGFpbjkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTdjZTFj
YjAzNWI2MDNlZjYxYzQ5MTYxYzM5ZDA0MDEwZmM0MDEzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvU3dhcENoYWluOS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MzggKzAs
MCBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEy
LTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBT
d2FwQ2hhaW45LmNwcDogSW1wbGVtZW50cyBhIGJhY2stZW5kIHNwZWNpZmljIGNsYXNzIGZvciB0
aGUgRDNEOSBzd2FwIGNoYWluLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1N3YXBD
aGFpbjkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXI5X3V0aWxzLmgi
Ci0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyOS5oIgotCi1uYW1lc3BhY2Ug
cngKLXsKLQotU3dhcENoYWluOTo6U3dhcENoYWluOShSZW5kZXJlcjkgKnJlbmRlcmVyLCBIV05E
IHdpbmRvdywgSEFORExFIHNoYXJlSGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICBHTGVu
dW0gYmFja0J1ZmZlckZvcm1hdCwgR0xlbnVtIGRlcHRoQnVmZmVyRm9ybWF0KQotICAgIDogbVJl
bmRlcmVyKHJlbmRlcmVyKSwgU3dhcENoYWluKHdpbmRvdywgc2hhcmVIYW5kbGUsIGJhY2tCdWZm
ZXJGb3JtYXQsIGRlcHRoQnVmZmVyRm9ybWF0KQotewotICAgIG1Td2FwQ2hhaW4gPSBOVUxMOwot
ICAgIG1CYWNrQnVmZmVyID0gTlVMTDsKLSAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICBt
UmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICBtT2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7Ci0gICAg
bVdpZHRoID0gLTE7Ci0gICAgbUhlaWdodCA9IC0xOwotICAgIG1Td2FwSW50ZXJ2YWwgPSAtMTsK
LX0KLQotU3dhcENoYWluOTo6flN3YXBDaGFpbjkoKQotewotICAgIHJlbGVhc2UoKTsKLX0KLQot
dm9pZCBTd2FwQ2hhaW45OjpyZWxlYXNlKCkKLXsKLSAgICBpZiAobVN3YXBDaGFpbikKLSAgICB7
Ci0gICAgICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsKLSAgICAgICAgbVN3YXBDaGFpbiA9IE5V
TEw7Ci0gICAgfQotCi0gICAgaWYgKG1CYWNrQnVmZmVyKQotICAgIHsKLSAgICAgICAgbUJhY2tC
dWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJhY2tCdWZmZXIgPSBOVUxMOwotICAgIH0KLQot
ICAgIGlmIChtRGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbURlcHRoU3RlbmNpbC0+UmVs
ZWFzZSgpOwotICAgICAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAo
bVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsK
LSAgICAgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1PZmZzY3Jl
ZW5UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUtPlJlbGVhc2UoKTsK
LSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtV2lu
ZG93KQotICAgICAgICBtU2hhcmVIYW5kbGUgPSBOVUxMOwotfQotCi1zdGF0aWMgRFdPUkQgY29u
dmVydEludGVydmFsKEVHTGludCBpbnRlcnZhbCkKLXsKLSNpZiBBTkdMRV9GT1JDRV9WU1lOQ19P
RkYKLSAgICByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9JTU1FRElBVEU7Ci0jZWxzZQotICAg
IHN3aXRjaChpbnRlcnZhbCkKLSAgICB7Ci0gICAgICBjYXNlIDA6IHJldHVybiBEM0RQUkVTRU5U
X0lOVEVSVkFMX0lNTUVESUFURTsKLSAgICAgIGNhc2UgMTogcmV0dXJuIEQzRFBSRVNFTlRfSU5U
RVJWQUxfT05FOwotICAgICAgY2FzZSAyOiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9UV087
Ci0gICAgICBjYXNlIDM6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX1RIUkVFOwotICAgICAg
Y2FzZSA0OiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9GT1VSOwotICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9E
RUZBVUxUOwotI2VuZGlmCi19Ci0KLUVHTGludCBTd2FwQ2hhaW45OjpyZXNpemUoaW50IGJhY2ti
dWZmZXJXaWR0aCwgaW50IGJhY2tidWZmZXJIZWlnaHQpCi17Ci0gICAgLy8gRDNEOSBkb2VzIG5v
dCBzdXBwb3J0IHJlc2l6aW5nIHN3YXAgY2hhaW5zIHdpdGhvdXQgcmVjcmVhdGluZyB0aGVtCi0g
ICAgcmV0dXJuIHJlc2V0KGJhY2tidWZmZXJXaWR0aCwgYmFja2J1ZmZlckhlaWdodCwgbVN3YXBJ
bnRlcnZhbCk7Ci19Ci0KLUVHTGludCBTd2FwQ2hhaW45OjpyZXNldChpbnQgYmFja2J1ZmZlcldp
ZHRoLCBpbnQgYmFja2J1ZmZlckhlaWdodCwgRUdMaW50IHN3YXBJbnRlcnZhbCkKLXsKLSAgICBJ
RGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0gICAg
aWYgKGRldmljZSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEVHTF9CQURfQUNDRVNT
OwotICAgIH0KLQotICAgIC8vIEV2aWN0IGFsbCBub24tcmVuZGVyIHRhcmdldCB0ZXh0dXJlcyB0
byBzeXN0ZW0gbWVtb3J5IGFuZCByZWxlYXNlIGFsbCByZXNvdXJjZXMKLSAgICAvLyBiZWZvcmUg
cmVhbGxvY2F0aW5nIHRoZW0gdG8gZnJlZSB1cCBhcyBtdWNoIHZpZGVvIG1lbW9yeSBhcyBwb3Nz
aWJsZS4KLSAgICBkZXZpY2UtPkV2aWN0TWFuYWdlZFJlc291cmNlcygpOwotCi0gICAgSFJFU1VM
VCByZXN1bHQ7Ci0KLSAgICAvLyBSZWxlYXNlIHNwZWNpZmljIHJlc291cmNlcyB0byBmcmVlIHVw
IG1lbW9yeSBmb3IgdGhlIG5ldyByZW5kZXIgdGFyZ2V0LCB3aGlsZSB0aGUKLSAgICAvLyBvbGQg
cmVuZGVyIHRhcmdldCBzdGlsbCBleGlzdHMgZm9yIHRoZSBwdXJwb3NlIG9mIHByZXNlcnZpbmcg
aXRzIGNvbnRlbnRzLgotICAgIGlmIChtU3dhcENoYWluKQotICAgIHsKLSAgICAgICAgbVN3YXBD
aGFpbi0+UmVsZWFzZSgpOwotICAgICAgICBtU3dhcENoYWluID0gTlVMTDsKLSAgICB9Ci0KLSAg
ICBpZiAobUJhY2tCdWZmZXIpCi0gICAgewotICAgICAgICBtQmFja0J1ZmZlci0+UmVsZWFzZSgp
OwotICAgICAgICBtQmFja0J1ZmZlciA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1PZmZzY3Jl
ZW5UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUtPlJlbGVhc2UoKTsK
LSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtRGVw
dGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbURlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOwotICAg
ICAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICB9Ci0KLSAgICBIQU5ETEUgKnBTaGFyZUhh
bmRsZSA9IE5VTEw7Ci0gICAgaWYgKCFtV2luZG93ICYmIG1SZW5kZXJlci0+Z2V0U2hhcmVIYW5k
bGVTdXBwb3J0KCkpCi0gICAgewotICAgICAgICBwU2hhcmVIYW5kbGUgPSAmbVNoYXJlSGFuZGxl
OwotICAgIH0KLQotICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZShiYWNrYnVmZmVy
V2lkdGgsIGJhY2tidWZmZXJIZWlnaHQsIDEsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6Q29udmVydFJlbmRlcmJ1ZmZl
ckZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCksIEQzRFBPT0xfREVGQVVMVCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJm1PZmZzY3JlZW5UZXh0dXJlLCBwU2hhcmVIYW5kbGUp
OwotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEVSUigiQ291bGQgbm90
IGNyZWF0ZSBvZmZzY3JlZW4gdGV4dHVyZTogJTA4bFgiLCByZXN1bHQpOwotICAgICAgICByZWxl
YXNlKCk7Ci0KLSAgICAgICAgaWYgKGQzZDk6OmlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFR0xfQ09OVEVYVF9MT1NUOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEVHTF9CQURfQUxM
T0M7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqb2xkUmVuZGVy
VGFyZ2V0ID0gbVJlbmRlclRhcmdldDsKLQotICAgIHJlc3VsdCA9IG1PZmZzY3JlZW5UZXh0dXJl
LT5HZXRTdXJmYWNlTGV2ZWwoMCwgJm1SZW5kZXJUYXJnZXQpOwotICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7Ci0KLSAgICBpZiAob2xkUmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAg
UkVDVCByZWN0ID0KLSAgICAgICAgewotICAgICAgICAgICAgMCwgMCwKLSAgICAgICAgICAgIG1X
aWR0aCwgbUhlaWdodAotICAgICAgICB9OwotCi0gICAgICAgIGlmIChyZWN0LnJpZ2h0ID4gc3Rh
dGljX2Nhc3Q8TE9ORz4oYmFja2J1ZmZlcldpZHRoKSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmVjdC5yaWdodCA9IGJhY2tidWZmZXJXaWR0aDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChy
ZWN0LmJvdHRvbSA+IHN0YXRpY19jYXN0PExPTkc+KGJhY2tidWZmZXJIZWlnaHQpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZWN0LmJvdHRvbSA9IGJhY2tidWZmZXJIZWlnaHQ7Ci0gICAgICAg
IH0KLQotICAgICAgICBtUmVuZGVyZXItPmVuZFNjZW5lKCk7Ci0KLSAgICAgICAgcmVzdWx0ID0g
ZGV2aWNlLT5TdHJldGNoUmVjdChvbGRSZW5kZXJUYXJnZXQsICZyZWN0LCBtUmVuZGVyVGFyZ2V0
LCAmcmVjdCwgRDNEVEVYRl9OT05FKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKLQotICAgICAgICBvbGRSZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBp
ZiAobVdpbmRvdykKLSAgICB7Ci0gICAgICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50
UGFyYW1ldGVycyA9IHswfTsKLSAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQXV0b0RlcHRoU3Rl
bmNpbEZvcm1hdCA9IGdsX2QzZDk6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobURlcHRoQnVm
ZmVyRm9ybWF0KTsKLSAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckNvdW50ID0g
MTsKLSAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1hdCA9IGdsX2QzZDk6
OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQpOwotICAgICAgICBw
cmVzZW50UGFyYW1ldGVycy5FbmFibGVBdXRvRGVwdGhTdGVuY2lsID0gRkFMU0U7Ci0gICAgICAg
IHByZXNlbnRQYXJhbWV0ZXJzLkZsYWdzID0gMDsKLSAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMu
aERldmljZVdpbmRvdyA9IG1XaW5kb3c7Ci0gICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRp
U2FtcGxlUXVhbGl0eSA9IDA7ICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFVuaW1wbGVtZW50
ZWQKLSAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVUeXBlID0gRDNETVVMVElT
QU1QTEVfTk9ORTsgICAvLyBGSVhNRTogVW5pbXBsZW1lbnRlZAotICAgICAgICBwcmVzZW50UGFy
YW1ldGVycy5QcmVzZW50YXRpb25JbnRlcnZhbCA9IGNvbnZlcnRJbnRlcnZhbChzd2FwSW50ZXJ2
YWwpOwotICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5Td2FwRWZmZWN0ID0gRDNEU1dBUEVGRkVD
VF9ESVNDQVJEOwotICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5XaW5kb3dlZCA9IFRSVUU7Ci0g
ICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCA9IGJhY2tidWZmZXJXaWR0
aDsKLSAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCA9IGJhY2tidWZm
ZXJIZWlnaHQ7Ci0KLSAgICAgICAgLy8gaHR0cDovL2NyYnVnLmNvbS8xNDAyMzkKLSAgICAgICAg
Ly8gaHR0cDovL2NyYnVnLmNvbS8xNDM0MzQKLSAgICAgICAgLy8KLSAgICAgICAgLy8gU29tZSBB
TUQvSW50ZWwgc3dpdGNoYWJsZSBzeXN0ZW1zIC8gZHJpdmVycyBhcHBlYXIgdG8gcm91bmQgc3dh
cCBjaGFpbiBzdXJmYWNlcyB0byBhIG11bHRpcGxlIG9mIDY0IHBpeGVscyBpbiB3aWR0aAotICAg
ICAgICAvLyB3aGVuIHVzaW5nIHRoZSBpbnRlZ3JhdGVkIEludGVsLiBUaGlzIHJvdW5kcyB0aGUg
d2lkdGggdXAgcmF0aGVyIHRoYW4gZG93bi4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gU29tZSBu
b24tc3dpdGNoYWJsZSBBTUQgR1BVcyAvIGRyaXZlcnMgZG8gbm90IHJlc3BlY3QgdGhlIHNvdXJj
ZSByZWN0YW5nbGUgdG8gUHJlc2VudC4gVGhlcmVmb3JlLCB3aGVuIHRoZSB2ZW5kb3IgSUQKLSAg
ICAgICAgLy8gaXMgbm90IEludGVsLCB0aGUgYmFjayBidWZmZXIgd2lkdGggbXVzdCBiZSBleGFj
dGx5IHRoZSBzYW1lIHdpZHRoIGFzIHRoZSB3aW5kb3cgb3IgaG9yaXpvbnRhbCBzY2FsaW5nIHdp
bGwgb2NjdXIuCi0gICAgICAgIGlmIChtUmVuZGVyZXItPmdldEFkYXB0ZXJWZW5kb3IoKSA9PSBW
RU5ET1JfSURfSU5URUwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJz
LkJhY2tCdWZmZXJXaWR0aCA9IChwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGggKyA2
MykgLyA2NCAqIDY0OwotICAgICAgICB9Ci0KLSAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVh
dGVBZGRpdGlvbmFsU3dhcENoYWluKCZwcmVzZW50UGFyYW1ldGVycywgJm1Td2FwQ2hhaW4pOwot
Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNT
RVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRP
Rk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0lOVkFMSURDQUxMIHx8IHJlc3VsdCA9PSBEM0RF
UlJfREVWSUNFTE9TVCk7Ci0KLSAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBhZGRp
dGlvbmFsIHN3YXAgY2hhaW5zIG9yIG9mZnNjcmVlbiBzdXJmYWNlczogJTA4bFgiLCByZXN1bHQp
OwotICAgICAgICAgICAgcmVsZWFzZSgpOwotCi0gICAgICAgICAgICBpZiAoZDNkOTo6aXNEZXZp
Y2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gRUdMX0NPTlRFWFRfTE9TVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gRUdMX0JBRF9BTExPQzsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJlc3VsdCA9IG1Td2FwQ2hhaW4tPkdldEJh
Y2tCdWZmZXIoMCwgRDNEQkFDS0JVRkZFUl9UWVBFX01PTk8sICZtQmFja0J1ZmZlcik7Ci0gICAg
ICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIEludmFsaWRhdGVSZWN0KG1X
aW5kb3csIE5VTEwsIEZBTFNFKTsKLSAgICB9Ci0KLSAgICBpZiAobURlcHRoQnVmZmVyRm9ybWF0
ICE9IEdMX05PTkUpCi0gICAgewotICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURlcHRo
U3RlbmNpbFN1cmZhY2UoYmFja2J1ZmZlcldpZHRoLCBiYWNrYnVmZmVySGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6Q29u
dmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtRGVwdGhCdWZmZXJGb3JtYXQpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNETVVMVElTQU1QTEVfTk9O
RSwgMCwgRkFMU0UsICZtRGVwdGhTdGVuY2lsLCBOVUxMKTsKLQotICAgICAgICBpZiAoRkFJTEVE
KHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJS
X09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcmVzdWx0ID09
IEQzREVSUl9JTlZBTElEQ0FMTCk7Ci0KLSAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0
ZSBkZXB0aHN0ZW5jaWwgc3VyZmFjZSBmb3IgbmV3IHN3YXAgY2hhaW46IDB4JTA4WCIsIHJlc3Vs
dCk7Ci0gICAgICAgICAgICByZWxlYXNlKCk7Ci0KLSAgICAgICAgICAgIGlmIChkM2Q5Ojppc0Rl
dmljZUxvc3RFcnJvcihyZXN1bHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiBFR0xfQ09OVEVYVF9MT1NUOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBFR0xfQkFEX0FMTE9DOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgbVdpZHRoID0gYmFja2J1ZmZlcldp
ZHRoOwotICAgIG1IZWlnaHQgPSBiYWNrYnVmZmVySGVpZ2h0OwotICAgIG1Td2FwSW50ZXJ2YWwg
PSBzd2FwSW50ZXJ2YWw7Ci0KLSAgICByZXR1cm4gRUdMX1NVQ0NFU1M7Ci19Ci0KLS8vIHBhcmFt
ZXRlcnMgc2hvdWxkIGJlIHZhbGlkYXRlZC9jbGFtcGVkIGJ5IGNhbGxlcgotRUdMaW50IFN3YXBD
aGFpbjk6OnN3YXBSZWN0KEVHTGludCB4LCBFR0xpbnQgeSwgRUdMaW50IHdpZHRoLCBFR0xpbnQg
aGVpZ2h0KQotewotICAgIGlmICghbVN3YXBDaGFpbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBF
R0xfU1VDQ0VTUzsKLSAgICB9Ci0KLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVu
ZGVyZXItPmdldERldmljZSgpOwotCi0gICAgLy8gRGlzYWJsZSBhbGwgcGlwZWxpbmUgb3BlcmF0
aW9ucwotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRDNEWkJfRkFM
U0UpOwotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfRklMTE1PREUsIEQzREZJTExf
U09MSUQpOwotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFURVNURU5BQkxF
LCBGQUxTRSk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5B
QkxFLCBGQUxTRSk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwg
RDNEQ1VMTF9OT05FKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxF
TkFCTEUsIEZBTFNFKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NMSVBQTEFO
RUVOQUJMRSwgMCk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRF
RU5BQkxFLCBEM0RDT0xPUldSSVRFRU5BQkxFX0FMUEhBIHwgRDNEQ09MT1JXUklURUVOQUJMRV9C
TFVFIHwgRDNEQ09MT1JXUklURUVOQUJMRV9HUkVFTiB8IEQzRENPTE9SV1JJVEVFTkFCTEVfUkVE
KTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NSR0JXUklURUVOQUJMRSwgRkFM
U0UpOwotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NPUlRFU1RFTkFCTEUs
IEZBTFNFKTsKLSAgICBkZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5VTEwpOwotICAgIGRldmljZS0+
U2V0VmVydGV4U2hhZGVyKE5VTEwpOwotCi0gICAgZGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwg
bUJhY2tCdWZmZXIpOwotICAgIGRldmljZS0+U2V0RGVwdGhTdGVuY2lsU3VyZmFjZShOVUxMKTsK
LQotICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCBtT2Zmc2NyZWVuVGV4dHVyZSk7Ci0gICAgZGV2
aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JPUCwgRDNEVE9QX1NFTEVD
VEFSRzEpOwotICAgIGRldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9S
QVJHMSwgRDNEVEFfVEVYVFVSRSk7Ci0gICAgZGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgx
LCBEM0RUU1NfQ09MT1JPUCwgRDNEVE9QX0RJU0FCTEUpOwotICAgIGRldmljZS0+U2V0U2FtcGxl
clN0YXRlKDAsIEQzRFNBTVBfTUFHRklMVEVSLCBEM0RURVhGX1BPSU5UKTsKLSAgICBkZXZpY2Ut
PlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01JTkZJTFRFUiwgRDNEVEVYRl9QT0lOVCk7Ci0g
ICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9BRERSRVNTVSwgRDNEVEFERFJF
U1NfQ0xBTVApOwotICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfQUREUkVT
U1YsIEQzRFRBRERSRVNTX0NMQU1QKTsKLSAgICBkZXZpY2UtPlNldEZWRihEM0RGVkZfWFlaUkhX
IHwgRDNERlZGX1RFWDEpOwotCi0gICAgRDNEVklFV1BPUlQ5IHZpZXdwb3J0ID0gezAsIDAsIG1X
aWR0aCwgbUhlaWdodCwgMC4wZiwgMS4wZn07Ci0gICAgZGV2aWNlLT5TZXRWaWV3cG9ydCgmdmll
d3BvcnQpOwotCi0gICAgZmxvYXQgeDEgPSB4IC0gMC41ZjsKLSAgICBmbG9hdCB5MSA9IChtSGVp
Z2h0IC0geSAtIGhlaWdodCkgLSAwLjVmOwotICAgIGZsb2F0IHgyID0gKHggKyB3aWR0aCkgLSAw
LjVmOwotICAgIGZsb2F0IHkyID0gKG1IZWlnaHQgLSB5KSAtIDAuNWY7Ci0KLSAgICBmbG9hdCB1
MSA9IHggLyBmbG9hdChtV2lkdGgpOwotICAgIGZsb2F0IHYxID0geSAvIGZsb2F0KG1IZWlnaHQp
OwotICAgIGZsb2F0IHUyID0gKHggKyB3aWR0aCkgLyBmbG9hdChtV2lkdGgpOwotICAgIGZsb2F0
IHYyID0gKHkgKyBoZWlnaHQpIC8gZmxvYXQobUhlaWdodCk7Ci0KLSAgICBmbG9hdCBxdWFkWzRd
WzZdID0ge3t4MSwgeTEsIDAuMGYsIDEuMGYsIHUxLCB2Mn0sCi0gICAgICAgICAgICAgICAgICAg
ICAgICB7eDIsIHkxLCAwLjBmLCAxLjBmLCB1MiwgdjJ9LAotICAgICAgICAgICAgICAgICAgICAg
ICAge3gyLCB5MiwgMC4wZiwgMS4wZiwgdTIsIHYxfSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IHt4MSwgeTIsIDAuMGYsIDEuMGYsIHUxLCB2MX19OyAgIC8vIHgsIHksIHosIHJodywgdSwgdgot
Ci0gICAgbVJlbmRlcmVyLT5zdGFydFNjZW5lKCk7Ci0gICAgZGV2aWNlLT5EcmF3UHJpbWl0aXZl
VVAoRDNEUFRfVFJJQU5HTEVGQU4sIDIsIHF1YWQsIDYgKiBzaXplb2YoZmxvYXQpKTsKLSAgICBt
UmVuZGVyZXItPmVuZFNjZW5lKCk7Ci0KLSAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwgTlVMTCk7
Ci0KLSAgICBSRUNUIHJlY3QgPQotICAgIHsKLSAgICAgICAgeCwgbUhlaWdodCAtIHkgLSBoZWln
aHQsCi0gICAgICAgIHggKyB3aWR0aCwgbUhlaWdodCAtIHkKLSAgICB9OwotCi0gICAgSFJFU1VM
VCByZXN1bHQgPSBtU3dhcENoYWluLT5QcmVzZW50KCZyZWN0LCAmcmVjdCwgTlVMTCwgTlVMTCwg
MCk7Ci0KLSAgICBtUmVuZGVyZXItPm1hcmtBbGxTdGF0ZURpcnR5KCk7Ci0KLSAgICBpZiAoZDNk
OTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBFR0xf
Q09OVEVYVF9MT1NUOwotICAgIH0KLQotICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcmVzdWx0ID09IEQzREVSUl9E
UklWRVJJTlRFUk5BTEVSUk9SKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEVHTF9CQURfQUxMT0M7
Ci0gICAgfQotCi0gICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgIHJldHVybiBF
R0xfU1VDQ0VTUzsKLX0KLQotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgotLy8g
Y2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCi1JRGlyZWN0M0RTdXJm
YWNlOSAqU3dhcENoYWluOTo6Z2V0UmVuZGVyVGFyZ2V0KCkKLXsKLSAgICBpZiAobVJlbmRlclRh
cmdldCkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXQtPkFkZFJlZigpOwotICAgIH0KLQot
ICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OwotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9u
IHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UK
LUlEaXJlY3QzRFN1cmZhY2U5ICpTd2FwQ2hhaW45OjpnZXREZXB0aFN0ZW5jaWwoKQotewotICAg
IGlmIChtRGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbURlcHRoU3RlbmNpbC0+QWRkUmVm
KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7Ci19Ci0KLS8vIEluY3JlbWVu
dHMgcmVmY291bnQgb24gdGV4dHVyZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0
dXJuZWQgdGV4dHVyZQotSURpcmVjdDNEVGV4dHVyZTkgKlN3YXBDaGFpbjk6OmdldE9mZnNjcmVl
blRleHR1cmUoKQotewotICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkKLSAgICB7Ci0gICAgICAg
IG1PZmZzY3JlZW5UZXh0dXJlLT5BZGRSZWYoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbU9mZnNj
cmVlblRleHR1cmU7Ci19Ci0KLVN3YXBDaGFpbjkgKlN3YXBDaGFpbjk6Om1ha2VTd2FwQ2hhaW45
KFN3YXBDaGFpbiAqc3dhcENoYWluKQotewotICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKHJ4
OjpTd2FwQ2hhaW45Kiwgc3dhcENoYWluKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHJ4OjpT
d2FwQ2hhaW45Kj4oc3dhcENoYWluKTsKLX0KLQotdm9pZCBTd2FwQ2hhaW45OjpyZWNyZWF0ZSgp
Ci17Ci0gICAgaWYgKCFtU3dhcENoYWluKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7
Ci0gICAgaWYgKGRldmljZSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50UGFyYW1ldGVyczsKLSAgICBIUkVT
VUxUIHJlc3VsdCA9IG1Td2FwQ2hhaW4tPkdldFByZXNlbnRQYXJhbWV0ZXJzKCZwcmVzZW50UGFy
YW1ldGVycyk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgIElEaXJlY3Qz
RFN3YXBDaGFpbjkqIG5ld1N3YXBDaGFpbiA9IE5VTEw7Ci0gICAgcmVzdWx0ID0gZGV2aWNlLT5D
cmVhdGVBZGRpdGlvbmFsU3dhcENoYWluKCZwcmVzZW50UGFyYW1ldGVycywgJm5ld1N3YXBDaGFp
bik7Ci0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsKLSAgICBtU3dhcENoYWluID0gbmV3U3dh
cENoYWluOwotCi0gICAgbUJhY2tCdWZmZXItPlJlbGVhc2UoKTsKLSAgICByZXN1bHQgPSBtU3dh
cENoYWluLT5HZXRCYWNrQnVmZmVyKDAsIEQzREJBQ0tCVUZGRVJfVFlQRV9NT05PLCAmbUJhY2tC
dWZmZXIpOwotICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci19Ci0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvU3dhcENo
YWluOS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9T
d2FwQ2hhaW45LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2YTYyYmQ4NmY2YTY1
YjdkZDhiN2JkNDIyMDc2NDE0ZjQ5MGQ0NWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9Td2FwQ2hhaW45LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLQotLy8gU3dhcENoYWluOS5oOiBEZWZpbmVzIGEgYmFjay1lbmQgc3BlY2lmaWMg
Y2xhc3MgZm9yIHRoZSBEM0Q5IHN3YXAgY2hhaW4uCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JFTkRF
UkVSX1NXQVBDSEFJTjlfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1NXQVBDSEFJTjlf
SF8KLQotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL1N3YXBDaGFpbi5oIgotCi1uYW1lc3BhY2UgcngKLXsKLWNsYXNzIFJlbmRlcmVy
OTsKLQotY2xhc3MgU3dhcENoYWluOSA6IHB1YmxpYyBTd2FwQ2hhaW4KLXsKLSAgcHVibGljOgot
ICAgIFN3YXBDaGFpbjkoUmVuZGVyZXI5ICpyZW5kZXJlciwgSFdORCB3aW5kb3csIEhBTkRMRSBz
aGFyZUhhbmRsZSwKLSAgICAgICAgICAgICAgIEdMZW51bSBiYWNrQnVmZmVyRm9ybWF0LCBHTGVu
dW0gZGVwdGhCdWZmZXJGb3JtYXQpOwotICAgIHZpcnR1YWwgflN3YXBDaGFpbjkoKTsKLQotICAg
IEVHTGludCByZXNpemUoRUdMaW50IGJhY2tidWZmZXJXaWR0aCwgRUdMaW50IGJhY2tidWZmZXJI
ZWlnaHQpOwotICAgIHZpcnR1YWwgRUdMaW50IHJlc2V0KEVHTGludCBiYWNrYnVmZmVyV2lkdGgs
IEVHTGludCBiYWNrYnVmZmVySGVpZ2h0LCBFR0xpbnQgc3dhcEludGVydmFsKTsKLSAgICB2aXJ0
dWFsIEVHTGludCBzd2FwUmVjdChFR0xpbnQgeCwgRUdMaW50IHksIEVHTGludCB3aWR0aCwgRUdM
aW50IGhlaWdodCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlY3JlYXRlKCk7Ci0KLSAgICB2aXJ0dWFs
IElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoKTsKLSAgICB2aXJ0dWFsIElEaXJl
Y3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5jaWwoKTsKLSAgICB2aXJ0dWFsIElEaXJlY3QzRFRl
eHR1cmU5ICpnZXRPZmZzY3JlZW5UZXh0dXJlKCk7Ci0KLSAgICBzdGF0aWMgU3dhcENoYWluOSAq
bWFrZVN3YXBDaGFpbjkoU3dhcENoYWluICpzd2FwQ2hhaW4pOwotCi0gIHByaXZhdGU6Ci0gICAg
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFN3YXBDaGFpbjkpOwotCi0gICAgdm9pZCByZWxlYXNl
KCk7Ci0KLSAgICBSZW5kZXJlcjkgKm1SZW5kZXJlcjsKLSAgICBFR0xpbnQgbUhlaWdodDsKLSAg
ICBFR0xpbnQgbVdpZHRoOwotICAgIEVHTGludCBtU3dhcEludGVydmFsOwotCi0gICAgSURpcmVj
dDNEU3dhcENoYWluOSAqbVN3YXBDaGFpbjsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbUJhY2tC
dWZmZXI7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKm1SZW5kZXJUYXJnZXQ7Ci0gICAgSURpcmVj
dDNEU3VyZmFjZTkgKm1EZXB0aFN0ZW5jaWw7Ci0gICAgSURpcmVjdDNEVGV4dHVyZTkqIG1PZmZz
Y3JlZW5UZXh0dXJlOwotfTsKLQotfQotI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9TV0FQ
Q0hBSU45X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlMTEuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZTExLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNDE1MTVlZDc2OTYyNDk1OThlNTMzNDM0OTYwYTMyMjFhYjRm
MjM1Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdl
MTEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjY3ICswLDAgQEAKLSNpbmNsdWRlICJwcmVjb21w
aWxlZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRleHR1cmVTdG9yYWdlMTEuY3BwOiBJbXBsZW1l
bnRzIHRoZSBhYnN0cmFjdCByeDo6VGV4dHVyZVN0b3JhZ2UxMSBjbGFzcyBhbmQgaXRzIGNvbmNy
ZXRlIGRlcml2ZWQKLS8vIGNsYXNzZXMgVGV4dHVyZVN0b3JhZ2UxMV8yRCBhbmQgVGV4dHVyZVN0
b3JhZ2UxMV9DdWJlLCB3aGljaCBhY3QgYXMgdGhlIGludGVyZmFjZSB0byB0aGUgRDNEMTEgdGV4
dHVyZS4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZTExLmgi
Ci0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIxMS5oIgotI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQxMS5oIgotI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9Td2FwQ2hhaW4xMS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9y
ZW5kZXJlcjExX3V0aWxzLmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLVRleHR1cmVT
dG9yYWdlMTE6OlRleHR1cmVTdG9yYWdlMTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBVSU5UIGJpbmRG
bGFncykKLSAgICA6IG1CaW5kRmxhZ3MoYmluZEZsYWdzKSwKLSAgICAgIG1Mb2RPZmZzZXQoMCks
Ci0gICAgICBtTWlwTGV2ZWxzKDApLAotICAgICAgbVRleHR1cmUoTlVMTCksCi0gICAgICBtVGV4
dHVyZUZvcm1hdChEWEdJX0ZPUk1BVF9VTktOT1dOKSwKLSAgICAgIG1TaGFkZXJSZXNvdXJjZUZv
cm1hdChEWEdJX0ZPUk1BVF9VTktOT1dOKSwKLSAgICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQoRFhH
SV9GT1JNQVRfVU5LTk9XTiksCi0gICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFU
X1VOS05PV04pLAotICAgICAgbVNSVihOVUxMKSwKLSAgICAgIG1UZXh0dXJlV2lkdGgoMCksCi0g
ICAgICBtVGV4dHVyZUhlaWdodCgwKQotewotICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyMTE6Om1h
a2VSZW5kZXJlcjExKHJlbmRlcmVyKTsKLX0KLQotVGV4dHVyZVN0b3JhZ2UxMTo6flRleHR1cmVT
dG9yYWdlMTEoKQotewotfQotCi1UZXh0dXJlU3RvcmFnZTExICpUZXh0dXJlU3RvcmFnZTExOjpt
YWtlVGV4dHVyZVN0b3JhZ2UxMShUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSkKLXsKLSAgICBBU1NF
UlQoSEFTX0RZTkFNSUNfVFlQRShUZXh0dXJlU3RvcmFnZTExKiwgc3RvcmFnZSkpOwotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlU3RvcmFnZTExKj4oc3RvcmFnZSk7Ci19Ci0KLURXT1JE
IFRleHR1cmVTdG9yYWdlMTE6OkdldFRleHR1cmVCaW5kRmxhZ3MoRFhHSV9GT1JNQVQgZm9ybWF0
LCBHTGVudW0gZ2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUpCi17Ci0gICAgVUlOVCBiaW5k
RmxhZ3MgPSBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRTsKLSAgICAKLSAgICBpZiAoZDNkMTE6
OklzRGVwdGhTdGVuY2lsRm9ybWF0KGZvcm1hdCkpCi0gICAgewotICAgICAgICBiaW5kRmxhZ3Mg
fD0gRDNEMTFfQklORF9ERVBUSF9TVEVOQ0lMOwotICAgIH0KLSAgICBlbHNlIGlmKGZvcmNlUmVu
ZGVyYWJsZSB8fCAoVGV4dHVyZVN0b3JhZ2UxMTo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShm
b3JtYXQpICYmIChnbHVzYWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpKSkK
LSAgICB7Ci0gICAgICAgIGJpbmRGbGFncyB8PSBEM0QxMV9CSU5EX1JFTkRFUl9UQVJHRVQ7Ci0g
ICAgfQotICAgIHJldHVybiBiaW5kRmxhZ3M7Ci19Ci0KLWJvb2wgVGV4dHVyZVN0b3JhZ2UxMTo6
SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEWEdJX0ZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dp
dGNoKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9BOF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjMyRzMyQjMyQTMyX0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZB
MTZfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SOF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9V
Tk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X0ZMT0FUOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SMTZHMTZfRkxPQVQ6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9CQzFfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STTog
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjMyRzMyQjMyX0ZMT0FUOiAvLyBub3QgcmVuZGVyYWJsZSBvbiBhbGwgZGV2aWNlcwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1VSU5UIFRleHR1cmVTdG9yYWdl
MTE6OmdldEJpbmRGbGFncygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1CaW5kRmxhZ3M7Ci19Ci0K
LUlEM0QxMVRleHR1cmUyRCAqVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0QmFzZVRleHR1cmUoKSBjb25z
dAotewotICAgIHJldHVybiBtVGV4dHVyZTsKLX0KLQotaW50IFRleHR1cmVTdG9yYWdlMTE6Omdl
dExvZE9mZnNldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1Mb2RPZmZzZXQ7Ci19Ci0KLWJvb2wg
VGV4dHVyZVN0b3JhZ2UxMTo6aXNSZW5kZXJUYXJnZXQoKSBjb25zdAotewotICAgIHJldHVybiAo
bUJpbmRGbGFncyAmIChEM0QxMV9CSU5EX1JFTkRFUl9UQVJHRVQgfCBEM0QxMV9CSU5EX0RFUFRI
X1NURU5DSUwpKSAhPSAwOwotfQotICAgIAotYm9vbCBUZXh0dXJlU3RvcmFnZTExOjppc01hbmFn
ZWQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotaW50IFRleHR1cmVTdG9yYWdl
MTE6OmxldmVsQ291bnQoKQotewotICAgIGludCBsZXZlbHMgPSAwOwotICAgIGlmIChnZXRCYXNl
VGV4dHVyZSgpKQotICAgIHsKLSAgICAgICAgbGV2ZWxzID0gbU1pcExldmVscyAtIGdldExvZE9m
ZnNldCgpOwotICAgIH0KLSAgICByZXR1cm4gbGV2ZWxzOwotfQotCi1VSU5UIFRleHR1cmVTdG9y
YWdlMTE6OmdldFN1YnJlc291cmNlSW5kZXgoaW50IGxldmVsLCBpbnQgZmFjZUluZGV4KQotewot
ICAgIFVJTlQgaW5kZXggPSAwOwotICAgIGlmIChnZXRCYXNlVGV4dHVyZSgpKQotICAgIHsKLSAg
ICAgICAgaW5kZXggPSBEM0QxMUNhbGNTdWJyZXNvdXJjZShsZXZlbCwgZmFjZUluZGV4LCBtTWlw
TGV2ZWxzKTsKLSAgICB9Ci0gICAgcmV0dXJuIGluZGV4OwotfQotCi1ib29sIFRleHR1cmVTdG9y
YWdlMTE6OnVwZGF0ZVN1YnJlc291cmNlTGV2ZWwoSUQzRDExVGV4dHVyZTJEICpzcmNUZXh0dXJl
LCB1bnNpZ25lZCBpbnQgc291cmNlU3VicmVzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxldmVsLCBpbnQgZmFjZSwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBpZiAoc3JjVGV4
dHVyZSkKLSAgICB7Ci0gICAgICAgIC8vIFJvdW5kIHVwIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IHRv
IHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIGRpbWVuc2lvbiBhbGlnbm1lbnQKLSAgICAgICAgdW5z
aWduZWQgaW50IGRpbWVuc2lvbkFsaWdubWVudCA9IGQzZDExOjpHZXRUZXh0dXJlRm9ybWF0RGlt
ZW5zaW9uQWxpZ25tZW50KG1UZXh0dXJlRm9ybWF0KTsKLSAgICAgICAgd2lkdGggPSB3aWR0aCAr
IGRpbWVuc2lvbkFsaWdubWVudCAtIDEgLSAod2lkdGggLSAxKSAlIGRpbWVuc2lvbkFsaWdubWVu
dDsKLSAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0ICsgZGltZW5zaW9uQWxpZ25tZW50IC0gMSAtICho
ZWlnaHQgLSAxKSAlIGRpbWVuc2lvbkFsaWdubWVudDsKLQotICAgICAgICBEM0QxMV9CT1ggc3Jj
Qm94OwotICAgICAgICBzcmNCb3gubGVmdCA9IHhvZmZzZXQ7Ci0gICAgICAgIHNyY0JveC50b3Ag
PSB5b2Zmc2V0OwotICAgICAgICBzcmNCb3gucmlnaHQgPSB4b2Zmc2V0ICsgd2lkdGg7Ci0gICAg
ICAgIHNyY0JveC5ib3R0b20gPSB5b2Zmc2V0ICsgaGVpZ2h0OwotICAgICAgICBzcmNCb3guZnJv
bnQgPSAwOwotICAgICAgICBzcmNCb3guYmFjayA9IDE7Ci0KLSAgICAgICAgSUQzRDExRGV2aWNl
Q29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotICAgICAg
ICAKLSAgICAgICAgQVNTRVJUKGdldEJhc2VUZXh0dXJlKCkpOwotICAgICAgICBjb250ZXh0LT5D
b3B5U3VicmVzb3VyY2VSZWdpb24oZ2V0QmFzZVRleHR1cmUoKSwgZ2V0U3VicmVzb3VyY2VJbmRl
eChsZXZlbCArIG1Mb2RPZmZzZXQsIGZhY2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeG9mZnNldCwgeW9mZnNldCwgMCwgc3JjVGV4dHVyZSwgc291cmNlU3VicmVz
b3VyY2UsICZzcmNCb3gpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLXZvaWQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2VuZXJhdGVNaXBtYXBMYXll
cihSZW5kZXJUYXJnZXQxMSAqc291cmNlLCBSZW5kZXJUYXJnZXQxMSAqZGVzdCkKLXsKLSAgICBp
ZiAoc291cmNlICYmIGRlc3QpCi0gICAgewotICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZp
ZXcgKnNvdXJjZVNSViA9IHNvdXJjZS0+Z2V0U2hhZGVyUmVzb3VyY2VWaWV3KCk7Ci0gICAgICAg
IElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmRlc3RSVFYgPSBkZXN0LT5nZXRSZW5kZXJUYXJnZXRW
aWV3KCk7Ci0KLSAgICAgICAgaWYgKHNvdXJjZVNSViAmJiBkZXN0UlRWKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBnbDo6UmVjdGFuZ2xlIHNvdXJjZUFyZWE7Ci0gICAgICAgICAgICBzb3VyY2VB
cmVhLnggPSAwOwotICAgICAgICAgICAgc291cmNlQXJlYS55ID0gMDsKLSAgICAgICAgICAgIHNv
dXJjZUFyZWEud2lkdGggPSBzb3VyY2UtPmdldFdpZHRoKCk7Ci0gICAgICAgICAgICBzb3VyY2VB
cmVhLmhlaWdodCA9IHNvdXJjZS0+Z2V0SGVpZ2h0KCk7Ci0KLSAgICAgICAgICAgIGdsOjpSZWN0
YW5nbGUgZGVzdEFyZWE7Ci0gICAgICAgICAgICBkZXN0QXJlYS54ID0gMDsKLSAgICAgICAgICAg
IGRlc3RBcmVhLnkgPSAwOwotICAgICAgICAgICAgZGVzdEFyZWEud2lkdGggPSBkZXN0LT5nZXRX
aWR0aCgpOwotICAgICAgICAgICAgZGVzdEFyZWEuaGVpZ2h0ID0gZGVzdC0+Z2V0SGVpZ2h0KCk7
Ci0KLSAgICAgICAgICAgIG1SZW5kZXJlci0+Y29weVRleHR1cmUoc291cmNlU1JWLCBzb3VyY2VB
cmVhLCBzb3VyY2UtPmdldFdpZHRoKCksIHNvdXJjZS0+Z2V0SGVpZ2h0KCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSVFYsIGRlc3RBcmVhLCBkZXN0LT5nZXRXaWR0
aCgpLCBkZXN0LT5nZXRIZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xfUkdCQSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVRleHR1cmVTdG9yYWdlMTFfMkQ6
OlRleHR1cmVTdG9yYWdlMTFfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBTd2FwQ2hhaW4xMSAqc3dh
cGNoYWluKQotICAgIDogVGV4dHVyZVN0b3JhZ2UxMShyZW5kZXJlciwgRDNEMTFfQklORF9SRU5E
RVJfVEFSR0VUIHwgRDNEMTFfQklORF9TSEFERVJfUkVTT1VSQ0UpCi17Ci0gICAgbVRleHR1cmUg
PSBzd2FwY2hhaW4tPmdldE9mZnNjcmVlblRleHR1cmUoKTsKLSAgICBtU1JWID0gc3dhcGNoYWlu
LT5nZXRSZW5kZXJUYXJnZXRTaGFkZXJSZXNvdXJjZSgpOwotCi0gICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKysp
Ci0gICAgewotICAgICAgICBtUmVuZGVyVGFyZ2V0W2ldID0gTlVMTDsKLSAgICB9Ci0KLSAgICBE
M0QxMV9URVhUVVJFMkRfREVTQyB0ZXhEZXNjOwotICAgIG1UZXh0dXJlLT5HZXREZXNjKCZ0ZXhE
ZXNjKTsKLSAgICBtTWlwTGV2ZWxzID0gdGV4RGVzYy5NaXBMZXZlbHM7Ci0gICAgbVRleHR1cmVG
b3JtYXQgPSB0ZXhEZXNjLkZvcm1hdDsKLSAgICBtVGV4dHVyZVdpZHRoID0gdGV4RGVzYy5XaWR0
aDsKLSAgICBtVGV4dHVyZUhlaWdodCA9IHRleERlc2MuSGVpZ2h0OwotCi0gICAgRDNEMTFfU0hB
REVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOwotICAgIG1TUlYtPkdldERlc2MoJnNydkRl
c2MpOwotICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IHNydkRlc2MuRm9ybWF0OwotCi0gICAg
SUQzRDExUmVuZGVyVGFyZ2V0Vmlldyogb2Zmc2NyZWVuUlRWID0gc3dhcGNoYWluLT5nZXRSZW5k
ZXJUYXJnZXQoKTsKLSAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOwot
ICAgIG9mZnNjcmVlblJUVi0+R2V0RGVzYygmcnR2RGVzYyk7Ci0gICAgbVJlbmRlclRhcmdldEZv
cm1hdCA9IHJ0dkRlc2MuRm9ybWF0OwotICAgIG9mZnNjcmVlblJUVi0+UmVsZWFzZSgpOwotCi0g
ICAgbURlcHRoU3RlbmNpbEZvcm1hdCA9IERYR0lfRk9STUFUX1VOS05PV047Ci19Ci0KLVRleHR1
cmVTdG9yYWdlMTFfMkQ6OlRleHR1cmVTdG9yYWdlMTFfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBp
bnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3Jj
ZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotICAgIDogVGV4dHVy
ZVN0b3JhZ2UxMShyZW5kZXJlciwgR2V0VGV4dHVyZUJpbmRGbGFncyhnbF9kM2QxMTo6Q29udmVy
dFRleHR1cmVGb3JtYXQoaW50ZXJuYWxmb3JtYXQpLCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlKSkK
LXsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXRbaV0g
PSBOVUxMOwotICAgIH0KLQotICAgIERYR0lfRk9STUFUIGNvbnZlcnRlZEZvcm1hdCA9IGdsX2Qz
ZDExOjpDb252ZXJ0VGV4dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgaWYgKGQzZDEx
OjpJc0RlcHRoU3RlbmNpbEZvcm1hdChjb252ZXJ0ZWRGb3JtYXQpKQotICAgIHsKLSAgICAgICAg
bVRleHR1cmVGb3JtYXQgPSBkM2QxMTo6R2V0RGVwdGhUZXh0dXJlRm9ybWF0KGNvbnZlcnRlZEZv
cm1hdCk7Ci0gICAgICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IGQzZDExOjpHZXREZXB0aFNo
YWRlclJlc291cmNlRm9ybWF0KGNvbnZlcnRlZEZvcm1hdCk7Ci0gICAgICAgIG1EZXB0aFN0ZW5j
aWxGb3JtYXQgPSBjb252ZXJ0ZWRGb3JtYXQ7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQg
PSBEWEdJX0ZPUk1BVF9VTktOT1dOOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBt
VGV4dHVyZUZvcm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKLSAgICAgICAgbVNoYWRlclJlc291cmNl
Rm9ybWF0ID0gY29udmVydGVkRm9ybWF0OwotICAgICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0ID0g
RFhHSV9GT1JNQVRfVU5LTk9XTjsKLSAgICAgICAgbVJlbmRlclRhcmdldEZvcm1hdCA9IGNvbnZl
cnRlZEZvcm1hdDsKLSAgICB9Ci0KLSAgICAvLyBpZiB0aGUgd2lkdGggb3IgaGVpZ2h0IGlzIG5v
dCBwb3NpdGl2ZSB0aGlzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGluY29tcGxldGUgdGV4dHVy
ZQotICAgIC8vIHdlIGhhbmRsZSB0aGF0IGhlcmUgYnkgc2tpcHBpbmcgdGhlIGQzZCB0ZXh0dXJl
IGNyZWF0aW9uCi0gICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKQotICAgIHsKLSAgICAg
ICAgLy8gYWRqdXN0IHNpemUgaWYgbmVlZGVkIGZvciBjb21wcmVzc2VkIHRleHR1cmVzCi0gICAg
ICAgIGdsOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBnbDo6SXNDb21wcmVzc2VkKGludGVybmFsZm9y
bWF0KSwgJndpZHRoLCAmaGVpZ2h0LCAmbUxvZE9mZnNldCk7Ci0KLSAgICAgICAgSUQzRDExRGV2
aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0gICAgICAgIEQzRDExX1RF
WFRVUkUyRF9ERVNDIGRlc2M7Ci0gICAgICAgIGRlc2MuV2lkdGggPSB3aWR0aDsgICAgICAvLyBD
b21wcmVzc2VkIHRleHR1cmUgc2l6ZSBjb25zdHJhaW50cz8KLSAgICAgICAgZGVzYy5IZWlnaHQg
PSBoZWlnaHQ7Ci0gICAgICAgIGRlc2MuTWlwTGV2ZWxzID0gKGxldmVscyA+IDApID8gbGV2ZWxz
ICsgbUxvZE9mZnNldCA6IDA7Ci0gICAgICAgIGRlc2MuQXJyYXlTaXplID0gMTsKLSAgICAgICAg
ZGVzYy5Gb3JtYXQgPSBtVGV4dHVyZUZvcm1hdDsKLSAgICAgICAgZGVzYy5TYW1wbGVEZXNjLkNv
dW50ID0gMTsKLSAgICAgICAgZGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOwotICAgICAgICBk
ZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKLSAgICAgICAgZGVzYy5CaW5kRmxhZ3Mg
PSBnZXRCaW5kRmxhZ3MoKTsKLSAgICAgICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7Ci0gICAg
ICAgIGRlc2MuTWlzY0ZsYWdzID0gMDsKLQotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXNjLCBOVUxMLCAmbVRleHR1cmUpOwotCi0gICAgICAgIC8v
IHRoaXMgY2FuIGhhcHBlbiBmcm9tIHdpbmRvd3MgVERSCi0gICAgICAgIGlmIChkM2QxMTo6aXNE
ZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgbVJlbmRlcmVy
LT5ub3RpZnlEZXZpY2VMb3N0KCk7Ci0gICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAg
ICAgICAgICBFUlIoIkNyZWF0aW5nIGltYWdlIGZhaWxlZC4iKTsKLSAgICAgICAgICAgIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1UZXh0dXJlLT5HZXREZXNjKCZkZXNjKTsKLSAgICAgICAgICAgIG1N
aXBMZXZlbHMgPSBkZXNjLk1pcExldmVsczsKLSAgICAgICAgICAgIG1UZXh0dXJlV2lkdGggPSBk
ZXNjLldpZHRoOwotICAgICAgICAgICAgbVRleHR1cmVIZWlnaHQgPSBkZXNjLkhlaWdodDsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotVGV4dHVyZVN0b3JhZ2UxMV8yRDo6flRleHR1cmVTdG9yYWdl
MTFfMkQoKQotewotICAgIGlmIChtVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1UZXh0dXJlLT5S
ZWxlYXNlKCk7Ci0gICAgICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVNS
VikKLSAgICB7Ci0gICAgICAgIG1TUlYtPlJlbGVhc2UoKTsKLSAgICAgICAgbVNSViA9IE5VTEw7
Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5U
QVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCi0gICAgewotICAgICAgICBkZWxldGUgbVJl
bmRlclRhcmdldFtpXTsKLSAgICAgICAgbVJlbmRlclRhcmdldFtpXSA9IE5VTEw7Ci0gICAgfQot
fQotCi1UZXh0dXJlU3RvcmFnZTExXzJEICpUZXh0dXJlU3RvcmFnZTExXzJEOjptYWtlVGV4dHVy
ZVN0b3JhZ2UxMV8yRChUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSkKLXsKLSAgICBBU1NFUlQoSEFT
X0RZTkFNSUNfVFlQRShUZXh0dXJlU3RvcmFnZTExXzJEKiwgc3RvcmFnZSkpOwotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxUZXh0dXJlU3RvcmFnZTExXzJEKj4oc3RvcmFnZSk7Ci19Ci0KLVJlbmRl
clRhcmdldCAqVGV4dHVyZVN0b3JhZ2UxMV8yRDo6Z2V0UmVuZGVyVGFyZ2V0KGludCBsZXZlbCkK
LXsKLSAgICBpZiAobGV2ZWwgPj0gMCAmJiBsZXZlbCA8IHN0YXRpY19jYXN0PGludD4obU1pcExl
dmVscykpCi0gICAgewotICAgICAgICBpZiAoIW1SZW5kZXJUYXJnZXRbbGV2ZWxdKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2
aWNlKCk7Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdDsKLQotICAgICAgICAgICAgRDNEMTFf
U0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOwotICAgICAgICAgICAgc3J2RGVzYy5G
b3JtYXQgPSBtU2hhZGVyUmVzb3VyY2VGb3JtYXQ7Ci0gICAgICAgICAgICBzcnZEZXNjLlZpZXdE
aW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyRDsKLSAgICAgICAgICAgIHNy
dkRlc2MuVGV4dHVyZTJELk1vc3REZXRhaWxlZE1pcCA9IGxldmVsOwotICAgICAgICAgICAgc3J2
RGVzYy5UZXh0dXJlMkQuTWlwTGV2ZWxzID0gMTsKLQotICAgICAgICAgICAgSUQzRDExU2hhZGVy
UmVzb3VyY2VWaWV3ICpzcnY7Ci0gICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNo
YWRlclJlc291cmNlVmlldyhtVGV4dHVyZSwgJnNydkRlc2MsICZzcnYpOwotCi0gICAgICAgICAg
ICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5k
ZXJUYXJnZXQqPihOVUxMKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgICAgICBpZiAobVJlbmRlclRhcmdldEZvcm1hdCAh
PSBEWEdJX0ZPUk1BVF9VTktOT1dOKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEQz
RDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7Ci0gICAgICAgICAgICAgICAgcnR2
RGVzYy5Gb3JtYXQgPSBtUmVuZGVyVGFyZ2V0Rm9ybWF0OwotICAgICAgICAgICAgICAgIHJ0dkRl
c2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJEOwotICAgICAg
ICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJELk1pcFNsaWNlID0gbGV2ZWw7Ci0KLSAgICAgICAg
ICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpydHY7Ci0gICAgICAgICAgICAgICAgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1UZXh0dXJlLCAmcnR2RGVzYywg
JnJ0dik7Ci0KLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzcnYtPlJlbGVhc2UoKTsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0
aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihOVUxMKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAgICAgICAgICAv
LyBSZW5kZXJUYXJnZXQxMSBleHBlY3RzIHRvIGJlIHRoZSBvd25lciBvZiB0aGUgcmVzb3VyY2Vz
IGl0IGlzIGdpdmVuIGJ1dCBUZXh0dXJlU3RvcmFnZTExCi0gICAgICAgICAgICAgICAgLy8gYWxz
byBuZWVkcyB0byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0dXJlLgotICAgICAgICAgICAg
ICAgIG1UZXh0dXJlLT5BZGRSZWYoKTsKLQotICAgICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRb
bGV2ZWxdID0gbmV3IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwgcnR2LCBtVGV4dHVyZSwgc3J2
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6bWF4KG1UZXh0dXJlV2lkdGggPj4gbGV2ZWwsIDFVKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4
dHVyZUhlaWdodCA+PiBsZXZlbCwgMVUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UgaWYgKG1EZXB0aFN0ZW5jaWxGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBEM0QxMV9ERVBUSF9TVEVOQ0lMX1ZJRVdfREVTQyBk
c3ZEZXNjOwotICAgICAgICAgICAgICAgIGRzdkRlc2MuRm9ybWF0ID0gbURlcHRoU3RlbmNpbEZv
cm1hdDsKLSAgICAgICAgICAgICAgICBkc3ZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9EU1Zf
RElNRU5TSU9OX1RFWFRVUkUyRDsKLSAgICAgICAgICAgICAgICBkc3ZEZXNjLlRleHR1cmUyRC5N
aXBTbGljZSA9IGxldmVsOwotICAgICAgICAgICAgICAgIGRzdkRlc2MuRmxhZ3MgPSAwOwotCi0g
ICAgICAgICAgICAgICAgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZHN2OwotICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsVmlldyhtVGV4dHVyZSwgJmRz
dkRlc2MsICZkc3YpOwotCi0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVN
T1JZKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3J2LT5SZWxlYXNl
KCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgICAg
ICAgICAgLy8gUmVuZGVyVGFyZ2V0MTEgZXhwZWN0cyB0byBiZSB0aGUgb3duZXIgb2YgdGhlIHJl
c291cmNlcyBpdCBpcyBnaXZlbiBidXQgVGV4dHVyZVN0b3JhZ2UxMQotICAgICAgICAgICAgICAg
IC8vIGFsc28gbmVlZHMgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgdGV4dHVyZS4KLSAgICAg
ICAgICAgICAgICBtVGV4dHVyZS0+QWRkUmVmKCk7Ci0KLSAgICAgICAgICAgICAgICBtUmVuZGVy
VGFyZ2V0W2xldmVsXSA9IG5ldyBSZW5kZXJUYXJnZXQxMShtUmVuZGVyZXIsIGRzdiwgbVRleHR1
cmUsIHNydiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVyZVdpZHRoID4+IGxldmVsLCAxVSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpt
YXgobVRleHR1cmVIZWlnaHQgPj4gbGV2ZWwsIDFVKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0
W2xldmVsXTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0g
ICAgfQotfQotCi1JRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlRleHR1cmVTdG9yYWdlMTFfMkQ6
OmdldFNSVigpCi17Ci0gICAgaWYgKCFtU1JWKQotICAgIHsKLSAgICAgICAgSUQzRDExRGV2aWNl
ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0gICAgICAgIEQzRDExX1NIQURF
Ul9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKLSAgICAgICAgc3J2RGVzYy5Gb3JtYXQgPSBt
U2hhZGVyUmVzb3VyY2VGb3JtYXQ7Ci0gICAgICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQz
RDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTJEOwotICAgICAgICBzcnZEZXNjLlRleHR1cmUyRC5N
aXBMZXZlbHMgPSAobU1pcExldmVscyA9PSAwID8gLTEgOiBtTWlwTGV2ZWxzKTsKLSAgICAgICAg
c3J2RGVzYy5UZXh0dXJlMkQuTW9zdERldGFpbGVkTWlwID0gMDsKLQotICAgICAgICBIUkVTVUxU
IHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KG1UZXh0dXJlLCAmc3J2
RGVzYywgJm1TUlYpOwotCi0gICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBz
dGF0aWNfY2FzdDxJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcqPihOVUxMKSk7Ci0gICAgICAgIH0K
LSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
bVNSVjsKLX0KLQotdm9pZCBUZXh0dXJlU3RvcmFnZTExXzJEOjpnZW5lcmF0ZU1pcG1hcChpbnQg
bGV2ZWwpCi17Ci0gICAgUmVuZGVyVGFyZ2V0MTEgKnNvdXJjZSA9IFJlbmRlclRhcmdldDExOjpt
YWtlUmVuZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFyZ2V0KGxldmVsIC0gMSkpOwotICAgIFJlbmRl
clRhcmdldDExICpkZXN0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShnZXRS
ZW5kZXJUYXJnZXQobGV2ZWwpKTsKLQotICAgIGdlbmVyYXRlTWlwbWFwTGF5ZXIoc291cmNlLCBk
ZXN0KTsKLX0KLQotVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpUZXh0dXJlU3RvcmFnZTExX0N1YmUo
UmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdM
ZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKQotICAgIDogVGV4dHVy
ZVN0b3JhZ2UxMShyZW5kZXJlciwgR2V0VGV4dHVyZUJpbmRGbGFncyhnbF9kM2QxMTo6Q29udmVy
dFRleHR1cmVGb3JtYXQoaW50ZXJuYWxmb3JtYXQpLCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlKSkK
LXsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IDY7IGkrKykKLSAgICB7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9U
RVhUVVJFX0xFVkVMUzsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtUmVuZGVyVGFyZ2V0
W2ldW2pdID0gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIERYR0lfRk9STUFUIGNvbnZl
cnRlZEZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0VGV4dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1h
dCk7Ci0gICAgaWYgKGQzZDExOjpJc0RlcHRoU3RlbmNpbEZvcm1hdChjb252ZXJ0ZWRGb3JtYXQp
KQotICAgIHsKLSAgICAgICAgbVRleHR1cmVGb3JtYXQgPSBkM2QxMTo6R2V0RGVwdGhUZXh0dXJl
Rm9ybWF0KGNvbnZlcnRlZEZvcm1hdCk7Ci0gICAgICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9
IGQzZDExOjpHZXREZXB0aFNoYWRlclJlc291cmNlRm9ybWF0KGNvbnZlcnRlZEZvcm1hdCk7Ci0g
ICAgICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBjb252ZXJ0ZWRGb3JtYXQ7Ci0gICAgICAgIG1S
ZW5kZXJUYXJnZXRGb3JtYXQgPSBEWEdJX0ZPUk1BVF9VTktOT1dOOwotICAgIH0KLSAgICBlbHNl
Ci0gICAgewotICAgICAgICBtVGV4dHVyZUZvcm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKLSAgICAg
ICAgbVNoYWRlclJlc291cmNlRm9ybWF0ID0gY29udmVydGVkRm9ybWF0OwotICAgICAgICBtRGVw
dGhTdGVuY2lsRm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5LTk9XTjsKLSAgICAgICAgbVJlbmRlclRh
cmdldEZvcm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKLSAgICB9Ci0KLSAgICAvLyBpZiB0aGUgc2l6
ZSBpcyBub3QgcG9zaXRpdmUgdGhpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBsZXRl
IHRleHR1cmUKLSAgICAvLyB3ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBkM2Qg
dGV4dHVyZSBjcmVhdGlvbgotICAgIGlmIChzaXplID4gMCkKLSAgICB7Ci0gICAgICAgIC8vIGFk
anVzdCBzaXplIGlmIG5lZWRlZCBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlcwotICAgICAgICBpbnQg
aGVpZ2h0ID0gc2l6ZTsKLSAgICAgICAgZ2w6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIGdsOjpJc0Nv
bXByZXNzZWQoaW50ZXJuYWxmb3JtYXQpLCAmc2l6ZSwgJmhlaWdodCwgJm1Mb2RPZmZzZXQpOwot
Ci0gICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsK
LQotICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXNjOwotICAgICAgICBkZXNjLldpZHRo
ID0gc2l6ZTsKLSAgICAgICAgZGVzYy5IZWlnaHQgPSBzaXplOwotICAgICAgICBkZXNjLk1pcExl
dmVscyA9IChsZXZlbHMgPiAwKSA/IGxldmVscyArIG1Mb2RPZmZzZXQgOiAwOwotICAgICAgICBk
ZXNjLkFycmF5U2l6ZSA9IDY7Ci0gICAgICAgIGRlc2MuRm9ybWF0ID0gbVRleHR1cmVGb3JtYXQ7
Ci0gICAgICAgIGRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7Ci0gICAgICAgIGRlc2MuU2FtcGxl
RGVzYy5RdWFsaXR5ID0gMDsKLSAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFV
TFQ7Ci0gICAgICAgIGRlc2MuQmluZEZsYWdzID0gZ2V0QmluZEZsYWdzKCk7Ci0gICAgICAgIGRl
c2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOwotICAgICAgICBkZXNjLk1pc2NGbGFncyA9IEQzRDExX1JF
U09VUkNFX01JU0NfVEVYVFVSRUNVQkU7Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZp
Y2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJm1UZXh0dXJlKTsKLQotICAgICAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQg
PT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgICAgICBFUlIoIkNyZWF0aW5nIGltYWdlIGZhaWxl
ZC4iKTsKLSAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAg
fQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1UZXh0dXJlLT5HZXREZXNj
KCZkZXNjKTsKLSAgICAgICAgICAgIG1NaXBMZXZlbHMgPSBkZXNjLk1pcExldmVsczsKLSAgICAg
ICAgICAgIG1UZXh0dXJlV2lkdGggPSBkZXNjLldpZHRoOwotICAgICAgICAgICAgbVRleHR1cmVI
ZWlnaHQgPSBkZXNjLkhlaWdodDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotVGV4dHVyZVN0b3Jh
Z2UxMV9DdWJlOjp+VGV4dHVyZVN0b3JhZ2UxMV9DdWJlKCkKLXsKLSAgICBpZiAobVRleHR1cmUp
Ci0gICAgewotICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICBtVGV4dHVyZSA9
IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1TUlYpCi0gICAgewotICAgICAgICBtU1JWLT5SZWxl
YXNlKCk7Ci0gICAgICAgIG1TUlYgPSBOVUxMOwotICAgIH0KLQotICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgNjsgaSsrKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aiA9IDA7IGogPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBqKyspCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGRlbGV0ZSBtUmVuZGVyVGFyZ2V0W2ldW2pdOwotICAgICAg
ICAgICAgbVJlbmRlclRhcmdldFtpXVtqXSA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LVRleHR1cmVTdG9yYWdlMTFfQ3ViZSAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjptYWtlVGV4dHVy
ZVN0b3JhZ2UxMV9DdWJlKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKQotewotICAgIEFTU0VSVChI
QVNfRFlOQU1JQ19UWVBFKFRleHR1cmVTdG9yYWdlMTFfQ3ViZSosIHN0b3JhZ2UpKTsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZVN0b3JhZ2UxMV9DdWJlKj4oc3RvcmFnZSk7Ci19Ci0K
LVJlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXRSZW5kZXJUYXJnZXQoR0xl
bnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgZmFjZUlkeCA9
IGdsOjpUZXh0dXJlQ3ViZU1hcDo6ZmFjZUluZGV4KGZhY2VUYXJnZXQpOwotICAgIGlmIChsZXZl
bCA+PSAwICYmIGxldmVsIDwgc3RhdGljX2Nhc3Q8aW50PihtTWlwTGV2ZWxzKSkKLSAgICB7Ci0g
ICAgICAgIGlmICghbVJlbmRlclRhcmdldFtmYWNlSWR4XVtsZXZlbF0pCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsK
LSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0OwotCi0gICAgICAgICAgICBEM0QxMV9TSEFERVJf
UkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7Ci0gICAgICAgICAgICBzcnZEZXNjLkZvcm1hdCA9
IG1TaGFkZXJSZXNvdXJjZUZvcm1hdDsKLSAgICAgICAgICAgIHNydkRlc2MuVmlld0RpbWVuc2lv
biA9IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTJEQVJSQVk7IC8vIFdpbGwgYmUgdXNlZCB3
aXRoIFRleHR1cmUyRCBzYW1wbGVyLCBub3QgVGV4dHVyZUN1YmUKLSAgICAgICAgICAgIHNydkRl
c2MuVGV4dHVyZTJEQXJyYXkuTW9zdERldGFpbGVkTWlwID0gbGV2ZWw7Ci0gICAgICAgICAgICBz
cnZEZXNjLlRleHR1cmUyREFycmF5Lk1pcExldmVscyA9IDE7Ci0gICAgICAgICAgICBzcnZEZXNj
LlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9IGZhY2VJZHg7Ci0gICAgICAgICAgICBz
cnZEZXNjLlRleHR1cmUyREFycmF5LkFycmF5U2l6ZSA9IDE7Ci0KLSAgICAgICAgICAgIElEM0Qx
MVNoYWRlclJlc291cmNlVmlldyAqc3J2OwotICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5D
cmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcobVRleHR1cmUsICZzcnZEZXNjLCAmc3J2KTsKLQotICAg
ICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nh
c3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgICAgICAgICAgaWYgKG1SZW5kZXJUYXJnZXRG
b3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOwotICAgICAgICAgICAg
ICAgIHJ0dkRlc2MuRm9ybWF0ID0gbVJlbmRlclRhcmdldEZvcm1hdDsKLSAgICAgICAgICAgICAg
ICBydHZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyREFS
UkFZOwotICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlwU2xpY2UgPSBs
ZXZlbDsKLSAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlT
bGljZSA9IGZhY2VJZHg7Ci0gICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlMkRBcnJheS5B
cnJheVNpemUgPSAxOwotCi0gICAgICAgICAgICAgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAq
cnR2OwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0
VmlldyhtVGV4dHVyZSwgJnJ0dkRlc2MsICZydHYpOwotCi0gICAgICAgICAgICAgICAgaWYgKHJl
c3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgc3J2LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOwotCi0gICAgICAgICAgICAgICAgLy8gUmVuZGVyVGFyZ2V0MTEgZXhwZWN0cyB0byBiZSB0
aGUgb3duZXIgb2YgdGhlIHJlc291cmNlcyBpdCBpcyBnaXZlbiBidXQgVGV4dHVyZVN0b3JhZ2Ux
MQotICAgICAgICAgICAgICAgIC8vIGFsc28gbmVlZHMgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0
aGUgdGV4dHVyZS4KLSAgICAgICAgICAgICAgICBtVGV4dHVyZS0+QWRkUmVmKCk7Ci0KLSAgICAg
ICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2ZhY2VJZHhdW2xldmVsXSA9IG5ldyBSZW5kZXJUYXJn
ZXQxMShtUmVuZGVyZXIsIHJ0diwgbVRleHR1cmUsIHNydiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heCht
VGV4dHVyZVdpZHRoID4+IGxldmVsLCAxVSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobVRleHR1cmVI
ZWlnaHQgPj4gbGV2ZWwsIDFVKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlm
IChtRGVwdGhTdGVuY2lsRm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgRDNEMTFfREVQVEhfU1RFTkNJTF9WSUVXX0RFU0MgZHN2RGVz
YzsKLSAgICAgICAgICAgICAgICBkc3ZEZXNjLkZvcm1hdCA9IG1SZW5kZXJUYXJnZXRGb3JtYXQ7
Ci0gICAgICAgICAgICAgICAgZHN2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfRFNWX0RJTUVO
U0lPTl9URVhUVVJFMkRBUlJBWTsKLSAgICAgICAgICAgICAgICBkc3ZEZXNjLlRleHR1cmUyREFy
cmF5Lk1pcFNsaWNlID0gbGV2ZWw7Ci0gICAgICAgICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkRB
cnJheS5GaXJzdEFycmF5U2xpY2UgPSBmYWNlSWR4OwotICAgICAgICAgICAgICAgIGRzdkRlc2Mu
VGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0gMTsKLQotICAgICAgICAgICAgICAgIElEM0QxMURl
cHRoU3RlbmNpbFZpZXcgKmRzdjsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZURlcHRoU3RlbmNpbFZpZXcobVRleHR1cmUsICZkc3ZEZXNjLCAmZHN2KTsKLQotICAgICAg
ICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHNydi0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PFJlbmRlclRh
cmdldCo+KE5VTEwpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdldDEx
IGV4cGVjdHMgdG8gYmUgdGhlIG93bmVyIG9mIHRoZSByZXNvdXJjZXMgaXQgaXMgZ2l2ZW4gYnV0
IFRleHR1cmVTdG9yYWdlMTEKLSAgICAgICAgICAgICAgICAvLyBhbHNvIG5lZWRzIHRvIGtlZXAg
YSByZWZlcmVuY2UgdG8gdGhlIHRleHR1cmUuCi0gICAgICAgICAgICAgICAgbVRleHR1cmUtPkFk
ZFJlZigpOwotCi0gICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldFtmYWNlSWR4XVtsZXZlbF0g
PSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJlbmRlcmVyLCBkc3YsIG1UZXh0dXJlLCBzcnYsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RkOjptYXgobVRleHR1cmVXaWR0aCA+PiBsZXZlbCwgMVUpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ZDo6bWF4KG1UZXh0dXJlSGVpZ2h0ID4+IGxldmVsLCAxVSkpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbVJlbmRlclRh
cmdldFtmYWNlSWR4XVtsZXZlbF07Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBOVUxMOwotICAgIH0KLX0KLQotSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJl
U3RvcmFnZTExX0N1YmU6OmdldFNSVigpCi17Ci0gICAgaWYgKCFtU1JWKQotICAgIHsKLSAgICAg
ICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0gICAg
ICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKLSAgICAgICAgc3J2
RGVzYy5Gb3JtYXQgPSBtU2hhZGVyUmVzb3VyY2VGb3JtYXQ7Ci0gICAgICAgIHNydkRlc2MuVmll
d0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRUNVQkU7Ci0gICAgICAgIHNy
dkRlc2MuVGV4dHVyZUN1YmUuTWlwTGV2ZWxzID0gKG1NaXBMZXZlbHMgPT0gMCA/IC0xIDogbU1p
cExldmVscyk7Ci0gICAgICAgIHNydkRlc2MuVGV4dHVyZUN1YmUuTW9zdERldGFpbGVkTWlwID0g
MDsKLQotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3Vy
Y2VWaWV3KG1UZXh0dXJlLCAmc3J2RGVzYywgJm1TUlYpOwotCi0gICAgICAgIGlmIChyZXN1bHQg
PT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcq
PihOVUxMKSk7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gbVNSVjsKLX0KLQotdm9pZCBUZXh0dXJlU3RvcmFnZTExX0N1
YmU6OmdlbmVyYXRlTWlwbWFwKGludCBmYWNlLCBpbnQgbGV2ZWwpCi17Ci0gICAgUmVuZGVyVGFy
Z2V0MTEgKnNvdXJjZSA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoZ2V0UmVu
ZGVyVGFyZ2V0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsIC0g
MSkpOwotICAgIFJlbmRlclRhcmdldDExICpkZXN0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5k
ZXJUYXJnZXQxMShnZXRSZW5kZXJUYXJnZXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
ICsgZmFjZSwgbGV2ZWwpKTsKLQotICAgIGdlbmVyYXRlTWlwbWFwTGF5ZXIoc291cmNlLCBkZXN0
KTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZTExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlMTEuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggM2M1ZGVkMDViODg5NzY5N2QzOTM2ZDA1MDk3ZGY0ZGU5OGI3OWJj
ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlMTEu
aAorKysgL2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAy
MDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVGV4
dHVyZVN0b3JhZ2UxMS5oOiBEZWZpbmVzIHRoZSBhYnN0cmFjdCByeDo6VGV4dHVyZVN0b3JhZ2Ux
MSBjbGFzcyBhbmQgaXRzIGNvbmNyZXRlIGRlcml2ZWQKLS8vIGNsYXNzZXMgVGV4dHVyZVN0b3Jh
Z2UxMV8yRCBhbmQgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlLCB3aGljaCBhY3QgYXMgdGhlIGludGVy
ZmFjZSB0byB0aGUgRDNEMTEgdGV4dHVyZS4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJf
VEVYVFVSRVNUT1JBR0UxMV9IXwotI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfVEVYVFVSRVNU
T1JBR0UxMV9IXwotCi0jaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKLSNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0b3JhZ2UuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci1j
bGFzcyBSZW5kZXJUYXJnZXQ7Ci1jbGFzcyBSZW5kZXJUYXJnZXQxMTsKLWNsYXNzIFJlbmRlcmVy
OwotY2xhc3MgUmVuZGVyZXIxMTsKLWNsYXNzIFN3YXBDaGFpbjExOwotCi1jbGFzcyBUZXh0dXJl
U3RvcmFnZTExIDogcHVibGljIFRleHR1cmVTdG9yYWdlCi17Ci0gIHB1YmxpYzoKLSAgICBUZXh0
dXJlU3RvcmFnZTExKFJlbmRlcmVyICpyZW5kZXJlciwgVUlOVCBiaW5kRmxhZ3MpOwotICAgIHZp
cnR1YWwgflRleHR1cmVTdG9yYWdlMTEoKTsKLQotICAgIHN0YXRpYyBUZXh0dXJlU3RvcmFnZTEx
ICptYWtlVGV4dHVyZVN0b3JhZ2UxMShUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSk7Ci0KLSAgICBz
dGF0aWMgRFdPUkQgR2V0VGV4dHVyZUJpbmRGbGFncyhEWEdJX0ZPUk1BVCBkM2RmbXQsIEdMZW51
bSBnbHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSk7Ci0gICAgc3RhdGljIGJvb2wgSXNUZXh0
dXJlRm9ybWF0UmVuZGVyYWJsZShEWEdJX0ZPUk1BVCBmb3JtYXQpOwotCi0gICAgVUlOVCBnZXRC
aW5kRmxhZ3MoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgSUQzRDExVGV4dHVyZTJEICpnZXRCYXNl
VGV4dHVyZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpn
ZXRTUlYoKSA9IDA7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgp
IHsgcmV0dXJuIGdldFJlbmRlclRhcmdldCgwKTsgfQotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0
ICpnZXRSZW5kZXJUYXJnZXQoaW50IGxldmVsKSB7IHJldHVybiBOVUxMOyB9Ci0gICAgdmlydHVh
bCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVudW0gZmFjZVRhcmdldCkgeyByZXR1
cm4gZ2V0UmVuZGVyVGFyZ2V0KGZhY2VUYXJnZXQsIDApOyB9Ci0gICAgdmlydHVhbCBSZW5kZXJU
YXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsKSB7IHJl
dHVybiBOVUxMOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVs
KSB7fTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZl
bCkge307Ci0KLSAgICB2aXJ0dWFsIGludCBnZXRMb2RPZmZzZXQoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGJvb2wgaXNSZW5kZXJUYXJnZXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNNYW5h
Z2VkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgbGV2ZWxDb3VudCgpOwotICAgIFVJTlQgZ2V0
U3VicmVzb3VyY2VJbmRleChpbnQgbGV2ZWwsIGludCBmYWNlVGFyZ2V0KTsKLQotICAgIGJvb2wg
dXBkYXRlU3VicmVzb3VyY2VMZXZlbChJRDNEMTFUZXh0dXJlMkQgKnRleHR1cmUsIHVuc2lnbmVk
IGludCBzb3VyY2VTdWJyZXNvdXJjZSwgaW50IGxldmVsLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgZmFjZVRhcmdldCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotCi0gIHByb3RlY3RlZDoKLSAgICB2b2lk
IGdlbmVyYXRlTWlwbWFwTGF5ZXIoUmVuZGVyVGFyZ2V0MTEgKnNvdXJjZSwgUmVuZGVyVGFyZ2V0
MTEgKmRlc3QpOwotCi0gICAgUmVuZGVyZXIxMSAqbVJlbmRlcmVyOwotICAgIGludCBtTG9kT2Zm
c2V0OwotICAgIHVuc2lnbmVkIGludCBtTWlwTGV2ZWxzOwotCi0gICAgSUQzRDExVGV4dHVyZTJE
ICptVGV4dHVyZTsKLSAgICBEWEdJX0ZPUk1BVCBtVGV4dHVyZUZvcm1hdDsKLSAgICBEWEdJX0ZP
Uk1BVCBtU2hhZGVyUmVzb3VyY2VGb3JtYXQ7Ci0gICAgRFhHSV9GT1JNQVQgbVJlbmRlclRhcmdl
dEZvcm1hdDsKLSAgICBEWEdJX0ZPUk1BVCBtRGVwdGhTdGVuY2lsRm9ybWF0OwotICAgIHVuc2ln
bmVkIGludCBtVGV4dHVyZVdpZHRoOwotICAgIHVuc2lnbmVkIGludCBtVGV4dHVyZUhlaWdodDsK
LQotICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqbVNSVjsKLQotICBwcml2YXRlOgotICAg
IERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZTExKTsKLQotICAgIGNvbnN0
IFVJTlQgbUJpbmRGbGFnczsKLX07Ci0KLWNsYXNzIFRleHR1cmVTdG9yYWdlMTFfMkQgOiBwdWJs
aWMgVGV4dHVyZVN0b3JhZ2UxMQotewotICBwdWJsaWM6Ci0gICAgVGV4dHVyZVN0b3JhZ2UxMV8y
RChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBDaGFpbjExICpzd2FwY2hhaW4pOwotICAgIFRleHR1
cmVTdG9yYWdlMTFfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTExXzJE
KCk7Ci0KLSAgICBzdGF0aWMgVGV4dHVyZVN0b3JhZ2UxMV8yRCAqbWFrZVRleHR1cmVTdG9yYWdl
MTFfMkQoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpOwotCi0gICAgdmlydHVhbCBJRDNEMTFTaGFk
ZXJSZXNvdXJjZVZpZXcgKmdldFNSVigpOwotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRS
ZW5kZXJUYXJnZXQoaW50IGxldmVsKTsKLQotICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1h
cChpbnQgbGV2ZWwpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KFRleHR1cmVTdG9yYWdlMTFfMkQpOwotCi0gICAgUmVuZGVyVGFyZ2V0MTEgKm1SZW5kZXJUYXJn
ZXRbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107Ci19OwotCi1jbGFzcyBU
ZXh0dXJlU3RvcmFnZTExX0N1YmUgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UxMQotewotICBwdWJs
aWM6Ci0gICAgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxl
dmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5k
ZXJhYmxlLCBpbnQgc2l6ZSk7Ci0gICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2UxMV9DdWJlKCk7
Ci0KLSAgICBzdGF0aWMgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlICptYWtlVGV4dHVyZVN0b3JhZ2Ux
MV9DdWJlKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKTsKLQotICAgIHZpcnR1YWwgSUQzRDExU2hh
ZGVyUmVzb3VyY2VWaWV3ICpnZXRTUlYoKTsKLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0
UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpOwotCi0gICAgdmlydHVh
bCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBmYWNlLCBpbnQgbGV2ZWwpOwotCi0gIHByaXZhdGU6
Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlMTFfQ3ViZSk7Ci0K
LSAgICBSZW5kZXJUYXJnZXQxMSAqbVJlbmRlclRhcmdldFs2XVtnbDo6SU1QTEVNRU5UQVRJT05f
TUFYX1RFWFRVUkVfTEVWRUxTXTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5E
RVJFUl9URVhUVVJFU1RPUkFHRTExX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlOS5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlOS5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhYTc0YTdjYmExYjQzNzA4ZTMwYTNh
ZjllNzVhNzEwYjk3ODY0YTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9U
ZXh0dXJlU3RvcmFnZTkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLSNpbmNs
dWRlICJwcmVjb21waWxlZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQot
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRleHR1cmVTdG9yYWdlOS5j
cHA6IEltcGxlbWVudHMgdGhlIGFic3RyYWN0IHJ4OjpUZXh0dXJlU3RvcmFnZTkgY2xhc3MgYW5k
IGl0cyBjb25jcmV0ZSBkZXJpdmVkCi0vLyBjbGFzc2VzIFRleHR1cmVTdG9yYWdlOV8yRCBhbmQg
VGV4dHVyZVN0b3JhZ2U5X0N1YmUsIHdoaWNoIGFjdCBhcyB0aGUgaW50ZXJmYWNlIHRvIHRoZQot
Ly8gRDNEOSB0ZXh0dXJlLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXI5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL1RleHR1cmVTdG9yYWdlOS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9T
d2FwQ2hhaW45LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldDku
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXI5X3V0aWxzLmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci1UZXh0dXJlU3Rv
cmFnZTk6OlRleHR1cmVTdG9yYWdlOShSZW5kZXJlciAqcmVuZGVyZXIsIERXT1JEIHVzYWdlKQot
ICAgIDogbUxvZE9mZnNldCgwKSwKLSAgICAgIG1SZW5kZXJlcihSZW5kZXJlcjk6Om1ha2VSZW5k
ZXJlcjkocmVuZGVyZXIpKSwKLSAgICAgIG1EM0RVc2FnZSh1c2FnZSksCi0gICAgICBtRDNEUG9v
bChtUmVuZGVyZXItPmdldFRleHR1cmVQb29sKHVzYWdlKSkKLXsKLX0KLQotVGV4dHVyZVN0b3Jh
Z2U5Ojp+VGV4dHVyZVN0b3JhZ2U5KCkKLXsKLX0KLQotVGV4dHVyZVN0b3JhZ2U5ICpUZXh0dXJl
U3RvcmFnZTk6Om1ha2VUZXh0dXJlU3RvcmFnZTkoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpCi17
Ci0gICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoVGV4dHVyZVN0b3JhZ2U5Kiwgc3RvcmFnZSkp
OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlU3RvcmFnZTkqPihzdG9yYWdlKTsKLX0K
LQotRFdPUkQgVGV4dHVyZVN0b3JhZ2U5OjpHZXRUZXh0dXJlVXNhZ2UoRDNERk9STUFUIGQzZGZt
dCwgR0xlbnVtIGdsdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlKQotewotICAgIERXT1JEIGQz
ZHVzYWdlID0gMDsKLQotICAgIGlmIChkM2RmbXQgPT0gRDNERk1UX0lOVFopCi0gICAgewotICAg
ICAgICBkM2R1c2FnZSB8PSBEM0RVU0FHRV9ERVBUSFNURU5DSUw7Ci0gICAgfQotICAgIGVsc2Ug
aWYoZm9yY2VSZW5kZXJhYmxlIHx8IChUZXh0dXJlU3RvcmFnZTk6OklzVGV4dHVyZUZvcm1hdFJl
bmRlcmFibGUoZDNkZm10KSAmJiAoZ2x1c2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X0FOR0xFKSkpCi0gICAgewotICAgICAgICBkM2R1c2FnZSB8PSBEM0RVU0FHRV9SRU5ERVJUQVJH
RVQ7Ci0gICAgfQotICAgIHJldHVybiBkM2R1c2FnZTsKLX0KLQotYm9vbCBUZXh0dXJlU3RvcmFn
ZTk6OklzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoRDNERk9STUFUIGZvcm1hdCkKLXsKLSAgICBp
ZiAoZm9ybWF0ID09IEQzREZNVF9JTlRaKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotICAgIHN3aXRjaChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfTDg6Ci0g
ICAgICBjYXNlIEQzREZNVF9BOEw4OgotICAgICAgY2FzZSBEM0RGTVRfRFhUMToKLSAgICAgIGNh
c2UgRDNERk1UX0RYVDM6Ci0gICAgICBjYXNlIEQzREZNVF9EWFQ1OgotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgIGNhc2UgRDNERk1UX1g4
UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKLSAgICAgIGNhc2UgRDNE
Rk1UX0EzMkIzMkczMlIzMkY6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWJvb2wgVGV4dHVyZVN0b3JhZ2U5Ojppc1JlbmRlclRhcmdldCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIChtRDNEVXNhZ2UgJiAoRDNEVVNBR0VfUkVOREVSVEFSR0VUIHwgRDNEVVNBR0VfREVQVEhT
VEVOQ0lMKSkgIT0gMDsKLX0KLQotYm9vbCBUZXh0dXJlU3RvcmFnZTk6OmlzTWFuYWdlZCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIChtRDNEUG9vbCA9PSBEM0RQT09MX01BTkFHRUQpOwotfQotCi1E
M0RQT09MIFRleHR1cmVTdG9yYWdlOTo6Z2V0UG9vbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1E
M0RQb29sOwotfQotCi1EV09SRCBUZXh0dXJlU3RvcmFnZTk6OmdldFVzYWdlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbUQzRFVzYWdlOwotfQotCi1pbnQgVGV4dHVyZVN0b3JhZ2U5OjpnZXRMb2RP
ZmZzZXQoKSBjb25zdAotewotICAgIHJldHVybiBtTG9kT2Zmc2V0OwotfQotCi1pbnQgVGV4dHVy
ZVN0b3JhZ2U5OjpsZXZlbENvdW50KCkKLXsKLSAgICByZXR1cm4gZ2V0QmFzZVRleHR1cmUoKSA/
IGdldEJhc2VUZXh0dXJlKCktPkdldExldmVsQ291bnQoKSAtIGdldExvZE9mZnNldCgpIDogMDsK
LX0KLQotVGV4dHVyZVN0b3JhZ2U5XzJEOjpUZXh0dXJlU3RvcmFnZTlfMkQoUmVuZGVyZXIgKnJl
bmRlcmVyLCBTd2FwQ2hhaW45ICpzd2FwY2hhaW4pIDogVGV4dHVyZVN0b3JhZ2U5KHJlbmRlcmVy
LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQpCi17Ci0gICAgSURpcmVjdDNEVGV4dHVyZTkgKnN1cmZh
Y2VUZXh0dXJlID0gc3dhcGNoYWluLT5nZXRPZmZzY3JlZW5UZXh0dXJlKCk7Ci0gICAgbVRleHR1
cmUgPSBzdXJmYWNlVGV4dHVyZTsKLSAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKLQotICAgIGlu
aXRpYWxpemVSZW5kZXJUYXJnZXQoKTsKLX0KLQotVGV4dHVyZVN0b3JhZ2U5XzJEOjpUZXh0dXJl
U3RvcmFnZTlfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KQotICAgIDogVGV4dHVyZVN0b3JhZ2U5KHJlbmRlcmVyLCBHZXRU
ZXh0dXJlVXNhZ2UoUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5KHJlbmRlcmVyKS0+Q29udmVydFRl
eHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCksIHVzYWdlLCBmb3JjZVJlbmRlcmFi
bGUpKQotewotICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsK
LSAgICAvLyBpZiB0aGUgd2lkdGggb3IgaGVpZ2h0IGlzIG5vdCBwb3NpdGl2ZSB0aGlzIHNob3Vs
ZCBiZSB0cmVhdGVkIGFzIGFuIGluY29tcGxldGUgdGV4dHVyZQotICAgIC8vIHdlIGhhbmRsZSB0
aGF0IGhlcmUgYnkgc2tpcHBpbmcgdGhlIGQzZCB0ZXh0dXJlIGNyZWF0aW9uCi0gICAgaWYgKHdp
ZHRoID4gMCAmJiBoZWlnaHQgPiAwKQotICAgIHsKLSAgICAgICAgSURpcmVjdDNERGV2aWNlOSAq
ZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLSAgICAgICAgZ2w6Ok1ha2VWYWxpZFNp
emUoZmFsc2UsIGdsOjpJc0NvbXByZXNzZWQoaW50ZXJuYWxmb3JtYXQpLCAmd2lkdGgsICZoZWln
aHQsICZtTG9kT2Zmc2V0KTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZVRleHR1cmUod2lkdGgsIGhlaWdodCwgbGV2ZWxzID8gbGV2ZWxzICsgbUxvZE9mZnNldCA6IDAs
IGdldFVzYWdlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1SZW5kZXJlci0+Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1h
dCksIGdldFBvb2woKSwgJm1UZXh0dXJlLCBOVUxMKTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09V
VE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICAgICAg
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaW5p
dGlhbGl6ZVJlbmRlclRhcmdldCgpOwotfQotCi1UZXh0dXJlU3RvcmFnZTlfMkQ6On5UZXh0dXJl
U3RvcmFnZTlfMkQoKQotewotICAgIGlmIChtVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1UZXh0
dXJlLT5SZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgZGVsZXRlIG1SZW5kZXJUYXJnZXQ7Ci19Ci0K
LVRleHR1cmVTdG9yYWdlOV8yRCAqVGV4dHVyZVN0b3JhZ2U5XzJEOjptYWtlVGV4dHVyZVN0b3Jh
Z2U5XzJEKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKQotewotICAgIEFTU0VSVChIQVNfRFlOQU1J
Q19UWVBFKFRleHR1cmVTdG9yYWdlOV8yRCosIHN0b3JhZ2UpKTsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VGV4dHVyZVN0b3JhZ2U5XzJEKj4oc3RvcmFnZSk7Ci19Ci0KLS8vIEluY3JlbWVudHMg
cmVmY291bnQgb24gc3VyZmFjZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJu
ZWQgc3VyZmFjZQotSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVTdG9yYWdlOV8yRDo6Z2V0U3Vy
ZmFjZUxldmVsKGludCBsZXZlbCwgYm9vbCBkaXJ0eSkKLXsKLSAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqc3VyZmFjZSA9IE5VTEw7Ci0KLSAgICBpZiAobVRleHR1cmUpCi0gICAgewotICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWwgKyBtTG9kT2Zm
c2V0LCAmc3VyZmFjZSk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAg
ICAgICAgLy8gV2l0aCBtYW5hZ2VkIHRleHR1cmVzIHRoZSBkcml2ZXIgbmVlZHMgdG8gYmUgaW5m
b3JtZWQgb2YgdXBkYXRlcyB0byB0aGUgbG93ZXIgbWlwbWFwIGxldmVscwotICAgICAgICBpZiAo
bGV2ZWwgKyBtTG9kT2Zmc2V0ICE9IDAgJiYgaXNNYW5hZ2VkKCkgJiYgZGlydHkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1UZXh0dXJlLT5BZGREaXJ0eVJlY3QoTlVMTCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gc3VyZmFjZTsKLX0KLQotUmVuZGVyVGFyZ2V0ICpUZXh0dXJl
U3RvcmFnZTlfMkQ6OmdldFJlbmRlclRhcmdldCgpCi17Ci0gICAgcmV0dXJuIG1SZW5kZXJUYXJn
ZXQ7Ci19Ci0KLXZvaWQgVGV4dHVyZVN0b3JhZ2U5XzJEOjpnZW5lcmF0ZU1pcG1hcChpbnQgbGV2
ZWwpCi17Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnVwcGVyID0gZ2V0U3VyZmFjZUxldmVsKGxl
dmVsIC0gMSwgZmFsc2UpOwotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpsb3dlciA9IGdldFN1cmZh
Y2VMZXZlbChsZXZlbCwgdHJ1ZSk7Ci0KLSAgICBpZiAodXBwZXIgIT0gTlVMTCAmJiBsb3dlciAh
PSBOVUxMKQotICAgIHsKLSAgICAgICAgbVJlbmRlcmVyLT5ib3hGaWx0ZXIodXBwZXIsIGxvd2Vy
KTsKLSAgICB9Ci0KLSAgICBpZiAodXBwZXIgIT0gTlVMTCkgdXBwZXItPlJlbGVhc2UoKTsKLSAg
ICBpZiAobG93ZXIgIT0gTlVMTCkgbG93ZXItPlJlbGVhc2UoKTsKLX0KLQotSURpcmVjdDNEQmFz
ZVRleHR1cmU5ICpUZXh0dXJlU3RvcmFnZTlfMkQ6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbVRleHR1cmU7Ci19Ci0KLXZvaWQgVGV4dHVyZVN0b3JhZ2U5XzJEOjppbml0
aWFsaXplUmVuZGVyVGFyZ2V0KCkKLXsKLSAgICBBU1NFUlQobVJlbmRlclRhcmdldCA9PSBOVUxM
KTsKLQotICAgIGlmIChtVGV4dHVyZSAhPSBOVUxMICYmIGlzUmVuZGVyVGFyZ2V0KCkpCi0gICAg
ewotICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IGdldFN1cmZhY2VMZXZlbCgw
LCBmYWxzZSk7Ci0KLSAgICAgICAgbVJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQ5KG1S
ZW5kZXJlciwgc3VyZmFjZSk7Ci0gICAgfQotfQotCi1UZXh0dXJlU3RvcmFnZTlfQ3ViZTo6VGV4
dHVyZVN0b3JhZ2U5X0N1YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIGludCBz
aXplKQotICAgIDogVGV4dHVyZVN0b3JhZ2U5KHJlbmRlcmVyLCBHZXRUZXh0dXJlVXNhZ2UoUmVu
ZGVyZXI5OjptYWtlUmVuZGVyZXI5KHJlbmRlcmVyKS0+Q29udmVydFRleHR1cmVJbnRlcm5hbEZv
cm1hdChpbnRlcm5hbGZvcm1hdCksIHVzYWdlLCBmb3JjZVJlbmRlcmFibGUpKQotewotICAgIG1U
ZXh0dXJlID0gTlVMTDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7ICsraSkKLSAgICB7Ci0g
ICAgICAgIG1SZW5kZXJUYXJnZXRbaV0gPSBOVUxMOwotICAgIH0KLQotICAgIC8vIGlmIHRoZSBz
aXplIGlzIG5vdCBwb3NpdGl2ZSB0aGlzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGluY29tcGxl
dGUgdGV4dHVyZQotICAgIC8vIHdlIGhhbmRsZSB0aGF0IGhlcmUgYnkgc2tpcHBpbmcgdGhlIGQz
ZCB0ZXh0dXJlIGNyZWF0aW9uCi0gICAgaWYgKHNpemUgPiAwKQotICAgIHsKLSAgICAgICAgSURp
cmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLSAgICAgICAg
aW50IGhlaWdodCA9IHNpemU7Ci0gICAgICAgIGdsOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBnbDo6
SXNDb21wcmVzc2VkKGludGVybmFsZm9ybWF0KSwgJnNpemUsICZoZWlnaHQsICZtTG9kT2Zmc2V0
KTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUN1YmVUZXh0dXJlKHNp
emUsIGxldmVscyA/IGxldmVscyArIG1Mb2RPZmZzZXQgOiAwLCBnZXRVc2FnZSgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJlbmRlcmVyLT5D
b252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0KSwgZ2V0UG9vbCgpLCAm
bVRleHR1cmUsIE5VTEwpOwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAg
ewotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8
fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpbml0aWFsaXplUmVuZGVyVGFy
Z2V0KCk7Ci19Ci0KLVRleHR1cmVTdG9yYWdlOV9DdWJlOjp+VGV4dHVyZVN0b3JhZ2U5X0N1YmUo
KQotewotICAgIGlmIChtVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1UZXh0dXJlLT5SZWxlYXNl
KCk7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyArK2kpCi0gICAgewotICAg
ICAgICBkZWxldGUgbVJlbmRlclRhcmdldFtpXTsKLSAgICB9Ci19Ci0KLVRleHR1cmVTdG9yYWdl
OV9DdWJlICpUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlOV9DdWJlKFRl
eHR1cmVTdG9yYWdlICpzdG9yYWdlKQotewotICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKFRl
eHR1cmVTdG9yYWdlOV9DdWJlKiwgc3RvcmFnZSkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
ZXh0dXJlU3RvcmFnZTlfQ3ViZSo+KHN0b3JhZ2UpOwotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNv
dW50IG9uIHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1
cmZhY2UKLUlEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6Z2V0Q3ViZU1h
cFN1cmZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCwgYm9vbCBkaXJ0eSkKLXsKLSAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IE5VTEw7Ci0KLSAgICBpZiAobVRleHR1cmUp
Ci0gICAgewotICAgICAgICBEM0RDVUJFTUFQX0ZBQ0VTIGZhY2UgPSBnbF9kM2Q5OjpDb252ZXJ0
Q3ViZUZhY2UoZmFjZVRhcmdldCk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVRleHR1cmUt
PkdldEN1YmVNYXBTdXJmYWNlKGZhY2UsIGxldmVsICsgbUxvZE9mZnNldCwgJnN1cmZhY2UpOwot
ICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgIC8vIFdpdGggbWFu
YWdlZCB0ZXh0dXJlcyB0aGUgZHJpdmVyIG5lZWRzIHRvIGJlIGluZm9ybWVkIG9mIHVwZGF0ZXMg
dG8gdGhlIGxvd2VyIG1pcG1hcCBsZXZlbHMKLSAgICAgICAgaWYgKGxldmVsICE9IDAgJiYgaXNN
YW5hZ2VkKCkgJiYgZGlydHkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1UZXh0dXJlLT5BZGRE
aXJ0eVJlY3QoZmFjZSwgTlVMTCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gc3Vy
ZmFjZTsKLX0KLQotUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6Z2V0UmVuZGVy
VGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0KQotewotICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0W2ds
OjpUZXh0dXJlQ3ViZU1hcDo6ZmFjZUluZGV4KGZhY2VUYXJnZXQpXTsKLX0KLQotdm9pZCBUZXh0
dXJlU3RvcmFnZTlfQ3ViZTo6Z2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCkKLXsK
LSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqdXBwZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShHTF9URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCAtIDEsIGZhbHNlKTsKLSAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqbG93ZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCwgdHJ1ZSk7Ci0KLSAgICBpZiAodXBwZXIg
IT0gTlVMTCAmJiBsb3dlciAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgbVJlbmRlcmVyLT5ib3hG
aWx0ZXIodXBwZXIsIGxvd2VyKTsKLSAgICB9Ci0KLSAgICBpZiAodXBwZXIgIT0gTlVMTCkgdXBw
ZXItPlJlbGVhc2UoKTsKLSAgICBpZiAobG93ZXIgIT0gTlVMTCkgbG93ZXItPlJlbGVhc2UoKTsK
LX0KLQotSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6Z2V0QmFz
ZVRleHR1cmUoKSBjb25zdAotewotICAgIHJldHVybiBtVGV4dHVyZTsKLX0KLQotdm9pZCBUZXh0
dXJlU3RvcmFnZTlfQ3ViZTo6aW5pdGlhbGl6ZVJlbmRlclRhcmdldCgpCi17Ci0gICAgaWYgKG1U
ZXh0dXJlICE9IE5VTEwgJiYgaXNSZW5kZXJUYXJnZXQoKSkKLSAgICB7Ci0gICAgICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gTlVMTDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IDY7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1SZW5kZXJUYXJnZXRb
aV0gPT0gTlVMTCk7Ci0KLSAgICAgICAgICAgIHN1cmZhY2UgPSBnZXRDdWJlTWFwU3VyZmFjZShH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBpLCAwLCBmYWxzZSk7Ci0KLSAgICAgICAg
ICAgIG1SZW5kZXJUYXJnZXRbaV0gPSBuZXcgUmVuZGVyVGFyZ2V0OShtUmVuZGVyZXIsIHN1cmZh
Y2UpOwotICAgICAgICB9Ci0gICAgfQotfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9UZXh0dXJlU3RvcmFnZTkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0b3JhZ2U5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDg2ZjU1MWExMzE1ZGE0NTM3MTNmYTE5NmQ3NzI4ZjcyNTdlMmJkODYuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZTkuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDEwOSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVGV4dHVyZVN0b3JhZ2U5
Lmg6IERlZmluZXMgdGhlIGFic3RyYWN0IHJ4OjpUZXh0dXJlU3RvcmFnZTkgY2xhc3MgYW5kIGl0
cyBjb25jcmV0ZSBkZXJpdmVkCi0vLyBjbGFzc2VzIFRleHR1cmVTdG9yYWdlOV8yRCBhbmQgVGV4
dHVyZVN0b3JhZ2U5X0N1YmUsIHdoaWNoIGFjdCBhcyB0aGUgaW50ZXJmYWNlIHRvIHRoZQotLy8g
RDNEOSB0ZXh0dXJlLgotCi0jaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9URVhUVVJFU1RPUkFH
RTlfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1RFWFRVUkVTVE9SQUdFOV9IXwotCi0j
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlLmgiCi0jaW5jbHVkZSAi
Y29tbW9uL2RlYnVnLmgiCi0KLW5hbWVzcGFjZSByeAotewotY2xhc3MgUmVuZGVyZXI5OwotY2xh
c3MgU3dhcENoYWluOTsKLWNsYXNzIFJlbmRlclRhcmdldDsKLWNsYXNzIFJlbmRlclRhcmdldDk7
Ci1jbGFzcyBCbGl0OwotCi1jbGFzcyBUZXh0dXJlU3RvcmFnZTkgOiBwdWJsaWMgVGV4dHVyZVN0
b3JhZ2UKLXsKLSAgcHVibGljOgotICAgIFRleHR1cmVTdG9yYWdlOShSZW5kZXJlciAqcmVuZGVy
ZXIsIERXT1JEIHVzYWdlKTsKLSAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTkoKTsKLQotICAg
IHN0YXRpYyBUZXh0dXJlU3RvcmFnZTkgKm1ha2VUZXh0dXJlU3RvcmFnZTkoVGV4dHVyZVN0b3Jh
Z2UgKnN0b3JhZ2UpOwotCi0gICAgc3RhdGljIERXT1JEIEdldFRleHR1cmVVc2FnZShEM0RGT1JN
QVQgZDNkZm10LCBHTGVudW0gZ2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUpOwotICAgIHN0
YXRpYyBib29sIElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoRDNERk9STUFUIGZvcm1hdCk7Ci0K
LSAgICBEM0RQT09MIGdldFBvb2woKSBjb25zdDsKLSAgICBEV09SRCBnZXRVc2FnZSgpIGNvbnN0
OwotCi0gICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkg
Y29uc3QgPSAwOwotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoKSB7
IHJldHVybiBOVUxMOyB9Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdl
dChHTGVudW0gZmFjZVRhcmdldCkgeyByZXR1cm4gTlVMTDsgfQotICAgIHZpcnR1YWwgdm9pZCBn
ZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpIHt9OwotICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1p
cG1hcChpbnQgZmFjZSwgaW50IGxldmVsKSB7fTsKLQotICAgIHZpcnR1YWwgaW50IGdldExvZE9m
ZnNldCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlclRhcmdldCgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgYm9vbCBpc01hbmFnZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBsZXZl
bENvdW50KCk7Ci0KLSAgcHJvdGVjdGVkOgotICAgIGludCBtTG9kT2Zmc2V0OwotICAgIFJlbmRl
cmVyOSAqbVJlbmRlcmVyOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKFRleHR1cmVTdG9yYWdlOSk7Ci0KLSAgICBjb25zdCBEV09SRCBtRDNEVXNhZ2U7Ci0gICAg
Y29uc3QgRDNEUE9PTCBtRDNEUG9vbDsKLX07Ci0KLWNsYXNzIFRleHR1cmVTdG9yYWdlOV8yRCA6
IHB1YmxpYyBUZXh0dXJlU3RvcmFnZTkKLXsKLSAgcHVibGljOgotICAgIFRleHR1cmVTdG9yYWdl
OV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBDaGFpbjkgKnN3YXBjaGFpbik7Ci0gICAgVGV4
dHVyZVN0b3JhZ2U5XzJEKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2U5XzJE
KCk7Ci0KLSAgICBzdGF0aWMgVGV4dHVyZVN0b3JhZ2U5XzJEICptYWtlVGV4dHVyZVN0b3JhZ2U5
XzJEKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKTsKLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpn
ZXRTdXJmYWNlTGV2ZWwoaW50IGxldmVsLCBib29sIGRpcnR5KTsKLSAgICB2aXJ0dWFsIFJlbmRl
clRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KCk7Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4
dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGdlbmVyYXRl
TWlwbWFwKGludCBsZXZlbCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9B
U1NJR04oVGV4dHVyZVN0b3JhZ2U5XzJEKTsKLQotICAgIHZvaWQgaW5pdGlhbGl6ZVJlbmRlclRh
cmdldCgpOwotCi0gICAgSURpcmVjdDNEVGV4dHVyZTkgKm1UZXh0dXJlOwotICAgIFJlbmRlclRh
cmdldDkgKm1SZW5kZXJUYXJnZXQ7Ci19OwotCi1jbGFzcyBUZXh0dXJlU3RvcmFnZTlfQ3ViZSA6
IHB1YmxpYyBUZXh0dXJlU3RvcmFnZTkKLXsKLSAgcHVibGljOgotICAgIFRleHR1cmVTdG9yYWdl
OV9DdWJlKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9y
bWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBpbnQgc2l6ZSk7Ci0gICAg
dmlydHVhbCB+VGV4dHVyZVN0b3JhZ2U5X0N1YmUoKTsKLQotICAgIHN0YXRpYyBUZXh0dXJlU3Rv
cmFnZTlfQ3ViZSAqbWFrZVRleHR1cmVTdG9yYWdlOV9DdWJlKFRleHR1cmVTdG9yYWdlICpzdG9y
YWdlKTsKLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRDdWJlTWFwU3VyZmFjZShHTGVudW0g
ZmFjZVRhcmdldCwgaW50IGxldmVsLCBib29sIGRpcnR5KTsKLSAgICB2aXJ0dWFsIFJlbmRlclRh
cmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0KTsKLSAgICB2aXJ0dWFsIElE
aXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCk7Ci0KLSAgcHJpdmF0ZToK
LSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2U5X0N1YmUpOwotCi0g
ICAgdm9pZCBpbml0aWFsaXplUmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBJRGlyZWN0M0RDdWJlVGV4
dHVyZTkgKm1UZXh0dXJlOwotICAgIFJlbmRlclRhcmdldDkgKm1SZW5kZXJUYXJnZXRbNl07Ci19
OwotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfVEVYVFVSRVNUT1JBR0U5X0hf
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvVmVydGV4QnVmZmVyMTEuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXIxMS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDUyMWRhODBjM2Q3ZTlmNzdiZjI2YjEzMTU0ODlmODliMjZhY2IyZDQuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXIxMS5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw0NDAgKzAsMCBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLQotLy8gVmVydGV4QnVmZmVyMTEuY3BwOiBEZWZpbmVzIHRoZSBEM0QxMSBWZXJ0
ZXhCdWZmZXIgaW1wbGVtZW50YXRpb24uCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
VmVydGV4QnVmZmVyMTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3Rv
cmFnZS5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgotI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9SZW5kZXJlcjExLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQu
aCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLVZlcnRleEJ1ZmZlcjExOjpWZXJ0ZXhCdWZmZXIxMShy
eDo6UmVuZGVyZXIxMSAqY29uc3QgcmVuZGVyZXIpIDogbVJlbmRlcmVyKHJlbmRlcmVyKQotewot
ICAgIG1CdWZmZXIgPSBOVUxMOwotICAgIG1CdWZmZXJTaXplID0gMDsKLSAgICBtRHluYW1pY1Vz
YWdlID0gZmFsc2U7Ci19Ci0KLVZlcnRleEJ1ZmZlcjExOjp+VmVydGV4QnVmZmVyMTEoKQotewot
ICAgIGlmIChtQnVmZmVyKQotICAgIHsKLSAgICAgICAgbUJ1ZmZlci0+UmVsZWFzZSgpOwotICAg
ICAgICBtQnVmZmVyID0gTlVMTDsKLSAgICB9Ci19Ci0KLWJvb2wgVmVydGV4QnVmZmVyMTE6Omlu
aXRpYWxpemUodW5zaWduZWQgaW50IHNpemUsIGJvb2wgZHluYW1pY1VzYWdlKQotewotICAgIGlm
IChtQnVmZmVyKQotICAgIHsKLSAgICAgICAgbUJ1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBt
QnVmZmVyID0gTlVMTDsKLSAgICB9Ci0KLSAgICB1cGRhdGVTZXJpYWwoKTsKLQotICAgIGlmIChz
aXplID4gMCkKLSAgICB7Ci0gICAgICAgIElEM0QxMURldmljZSogZHhEZXZpY2UgPSBtUmVuZGVy
ZXItPmdldERldmljZSgpOwotCi0gICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIGJ1ZmZlckRlc2M7
Ci0gICAgICAgIGJ1ZmZlckRlc2MuQnl0ZVdpZHRoID0gc2l6ZTsKLSAgICAgICAgYnVmZmVyRGVz
Yy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZTkFNSUM7Ci0gICAgICAgIGJ1ZmZlckRlc2MuQmluZEZs
YWdzID0gRDNEMTFfQklORF9WRVJURVhfQlVGRkVSOwotICAgICAgICBidWZmZXJEZXNjLkNQVUFj
Y2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsKLSAgICAgICAgYnVmZmVyRGVzYy5N
aXNjRmxhZ3MgPSAwOwotICAgICAgICBidWZmZXJEZXNjLlN0cnVjdHVyZUJ5dGVTdHJpZGUgPSAw
OwotCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZHhEZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmYnVm
ZmVyRGVzYywgTlVMTCwgJm1CdWZmZXIpOwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIG1CdWZmZXJTaXplID0gc2l6ZTsKLSAgICBtRHluYW1pY1VzYWdlID0gZHluYW1pY1VzYWdl
OwotICAgIHJldHVybiB0cnVlOwotfQotCi1WZXJ0ZXhCdWZmZXIxMSAqVmVydGV4QnVmZmVyMTE6
Om1ha2VWZXJ0ZXhCdWZmZXIxMShWZXJ0ZXhCdWZmZXIgKnZldGV4QnVmZmVyKQotewotICAgIEFT
U0VSVChIQVNfRFlOQU1JQ19UWVBFKFZlcnRleEJ1ZmZlcjExKiwgdmV0ZXhCdWZmZXIpKTsKLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8VmVydGV4QnVmZmVyMTEqPih2ZXRleEJ1ZmZlcik7Ci19Ci0K
LWJvb2wgVmVydGV4QnVmZmVyMTE6OnN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVy
dGV4QXR0cmlidXRlICZhdHRyaWIsIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgaW5zdGFuY2VzLCB1
bnNpZ25lZCBpbnQgb2Zmc2V0KQotewotICAgIGlmIChtQnVmZmVyKQotICAgIHsKLSAgICAgICAg
Z2w6OkJ1ZmZlciAqYnVmZmVyID0gYXR0cmliLm1Cb3VuZEJ1ZmZlci5nZXQoKTsKLQotICAgICAg
ICBpbnQgaW5wdXRTdHJpZGUgPSBhdHRyaWIuc3RyaWRlKCk7Ci0gICAgICAgIGNvbnN0IFZlcnRl
eENvbnZlcnRlciAmY29udmVydGVyID0gZ2V0VmVydGV4Q29udmVyc2lvbihhdHRyaWIpOwotCi0g
ICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmR4Q29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2
aWNlQ29udGV4dCgpOwotCi0gICAgICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRS
ZXNvdXJjZTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkeENvbnRleHQtPk1hcChtQnVmZmVy
LCAwLCBEM0QxMV9NQVBfV1JJVEVfTk9fT1ZFUldSSVRFLCAwLCAmbWFwcGVkUmVzb3VyY2UpOwot
ICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigi
VmVydGV4IGJ1ZmZlciBtYXAgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGNoYXIqIG91dHB1
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1hcHBlZFJlc291cmNlLnBEYXRhKSArIG9mZnNl
dDsKLQotICAgICAgICBjb25zdCBjaGFyICppbnB1dCA9IE5VTEw7Ci0gICAgICAgIGlmIChidWZm
ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2UgKnN0b3JhZ2UgPSBidWZm
ZXItPmdldFN0b3JhZ2UoKTsKLSAgICAgICAgICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
Y2hhcio+KHN0b3JhZ2UtPmdldERhdGEoKSkgKyBzdGF0aWNfY2FzdDxpbnQ+KGF0dHJpYi5tT2Zm
c2V0KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlu
cHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGF0dHJpYi5tUG9pbnRlcik7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoaW5zdGFuY2VzID09IDAgfHwgYXR0cmliLm1EaXZpc29yID09IDAp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlucHV0ICs9IGlucHV0U3RyaWRlICogc3RhcnQ7Ci0g
ICAgICAgIH0KLQotICAgICAgICBjb252ZXJ0ZXIuY29udmVyc2lvbkZ1bmMoaW5wdXQsIGlucHV0
U3RyaWRlLCBjb3VudCwgb3V0cHV0KTsKLQotICAgICAgICBkeENvbnRleHQtPlVubWFwKG1CdWZm
ZXIsIDApOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewot
ICAgICAgICBFUlIoIlZlcnRleCBidWZmZXIgbm90IGluaXRpYWxpemVkLiIpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFZlcnRleEJ1ZmZlcjExOjpzdG9yZVJhd0Rh
dGEoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBvZmZz
ZXQpCi17Ci0gICAgaWYgKG1CdWZmZXIpCi0gICAgewotICAgICAgICBJRDNEMTFEZXZpY2VDb250
ZXh0ICpkeENvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKLQotICAgICAg
ICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7Ci0gICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gZHhDb250ZXh0LT5NYXAobUJ1ZmZlciwgMCwgRDNEMTFfTUFQX1dSSVRFX05P
X09WRVJXUklURSwgMCwgJm1hcHBlZFJlc291cmNlKTsKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1
bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIlZlcnRleCBidWZmZXIgbWFwIGZhaWxl
ZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLQotICAgICAgICBjaGFyKiBidWZmZXJEYXRhID0gc3RhdGljX2Nhc3Q8Y2hh
cio+KG1hcHBlZFJlc291cmNlLnBEYXRhKTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlckRhdGEgKyBv
ZmZzZXQsIGRhdGEsIHNpemUpOwotCi0gICAgICAgIGR4Q29udGV4dC0+VW5tYXAobUJ1ZmZlciwg
MCk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAg
ICAgIEVSUigiVmVydGV4IGJ1ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgVmVydGV4QnVmZmVyMTE6OmdldFNwYWNlUmVxdWly
ZWQoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTHNpemVpIGNvdW50LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlcywgdW5z
aWduZWQgaW50ICpvdXRTcGFjZVJlcXVpcmVkKSBjb25zdAotewotICAgIHVuc2lnbmVkIGludCBl
bGVtZW50U2l6ZSA9IGdldFZlcnRleENvbnZlcnNpb24oYXR0cmliKS5vdXRwdXRFbGVtZW50U2l6
ZTsKLQotICAgIHVuc2lnbmVkIGludCBlbGVtZW50Q291bnQgPSAwOwotICAgIGlmIChpbnN0YW5j
ZXMgPT0gMCB8fCBhdHRyaWIubURpdmlzb3IgPT0gMCkKLSAgICB7Ci0gICAgICAgIGVsZW1lbnRD
b3VudCA9IGNvdW50OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgaW50PihpbnN0YW5jZXMpIDwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZCBpbnQ+OjptYXgoKSAtIChhdHRyaWIubURpdmlzb3IgLSAxKSkKLSAgICAgICAgewotICAg
ICAgICAgICAgLy8gUm91bmQgdXAKLSAgICAgICAgICAgIGVsZW1lbnRDb3VudCA9IChzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBpbnQ+KGluc3RhbmNlcykgKyAoYXR0cmliLm1EaXZpc29yIC0gMSkpIC8g
YXR0cmliLm1EaXZpc29yOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAg
ICAgICAgICAgZWxlbWVudENvdW50ID0gaW5zdGFuY2VzIC8gYXR0cmliLm1EaXZpc29yOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGVsZW1lbnRTaXplIDw9IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLyBlbGVtZW50Q291bnQpCi0gICAgewotICAgICAgICBp
ZiAob3V0U3BhY2VSZXF1aXJlZCkKLSAgICAgICAgewotICAgICAgICAgICAgKm91dFNwYWNlUmVx
dWlyZWQgPSBlbGVtZW50U2l6ZSAqIGVsZW1lbnRDb3VudDsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLX0KLQotYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6cmVxdWlyZXNDb252ZXJzaW9uKGNv
bnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QKLXsKLSAgICByZXR1cm4gIWdl
dFZlcnRleENvbnZlcnNpb24oYXR0cmliKS5pZGVudGl0eTsKLX0KLQotdW5zaWduZWQgaW50IFZl
cnRleEJ1ZmZlcjExOjpnZXRCdWZmZXJTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUJ1ZmZl
clNpemU7Ci19Ci0KLWJvb2wgVmVydGV4QnVmZmVyMTE6OnNldEJ1ZmZlclNpemUodW5zaWduZWQg
aW50IHNpemUpCi17Ci0gICAgaWYgKHNpemUgPiBtQnVmZmVyU2l6ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBpbml0aWFsaXplKHNpemUsIG1EeW5hbWljVXNhZ2UpOwotICAgIH0KLSAgICBlbHNl
Ci0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgVmVydGV4QnVm
ZmVyMTE6OmRpc2NhcmQoKQotewotICAgIGlmIChtQnVmZmVyKQotICAgIHsKLSAgICAgICAgSUQz
RDExRGV2aWNlQ29udGV4dCAqZHhDb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0
KCk7Ci0KLSAgICAgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwot
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGR4Q29udGV4dC0+TWFwKG1CdWZmZXIsIDAsIEQzRDEx
X01BUF9XUklURV9ESVNDQVJELCAwLCAmbWFwcGVkUmVzb3VyY2UpOwotICAgICAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiVmVydGV4IGJ1ZmZlciBt
YXAgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGR4Q29udGV4dC0+VW5tYXAobUJ1ZmZlciwg
MCk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAg
ICAgIEVSUigiVmVydGV4IGJ1ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci19Ci0KLXVuc2lnbmVkIGludCBWZXJ0ZXhCdWZmZXIxMTo6Z2V0VmVy
dGV4U2l6ZShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGdldFZlcnRleENvbnZlcnNpb24oYXR0cmliKS5vdXRwdXRFbGVtZW50U2l6ZTsKLX0K
LQotRFhHSV9GT1JNQVQgVmVydGV4QnVmZmVyMTE6OmdldERYR0lGb3JtYXQoY29uc3QgZ2w6OlZl
cnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdAotewotICAgIHJldHVybiBnZXRWZXJ0ZXhDb252
ZXJzaW9uKGF0dHJpYikuZHhnaUZvcm1hdDsKLX0KLQotSUQzRDExQnVmZmVyICpWZXJ0ZXhCdWZm
ZXIxMTo6Z2V0QnVmZmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUJ1ZmZlcjsKLX0KLQotdGVt
cGxhdGUgPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGludCBjb21wb25lbnRDb3VudCwgYm9vbCB3aWRl
biwgYm9vbCBub3JtYWxpemVkPgotc3RhdGljIHZvaWQgY29weVZlcnRleERhdGEoY29uc3Qgdm9p
ZCAqaW5wdXQsIHVuc2lnbmVkIGludCBzdHJpZGUsIHVuc2lnbmVkIGludCBjb3VudCwgdm9pZCAq
b3V0cHV0KQotewotICAgIHVuc2lnbmVkIGludCBhdHRyaWJTaXplID0gc2l6ZW9mKFQpICogY29t
cG9uZW50Q291bnQ7Ci0KLSAgICBpZiAoYXR0cmliU2l6ZSA9PSBzdHJpZGUgJiYgIXdpZGVuKQot
ICAgIHsKLSAgICAgICAgbWVtY3B5KG91dHB1dCwgaW5wdXQsIGNvdW50ICogYXR0cmliU2l6ZSk7
Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBvdXRwdXRTdHJp
ZGUgPSB3aWRlbiA/IDQgOiBjb21wb25lbnRDb3VudDsKLSAgICAgICAgVCBkZWZhdWx0VmFsID0g
bm9ybWFsaXplZCA/IHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCgpIDogVCgxKTsKLQotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGNvbnN0IFQgKm9mZnNldElucHV0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBUKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaW5wdXQpICsgaSAqIHN0cmlkZSk7
Ci0gICAgICAgICAgICBUICpvZmZzZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PFQqPihvdXRw
dXQpICsgaSAqIG91dHB1dFN0cmlkZTsKLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aiA9IDA7IGogPCBjb21wb25lbnRDb3VudDsgaisrKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG9mZnNldE91dHB1dFtqXSA9IG9mZnNldElucHV0W2pdOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBpZiAod2lkZW4pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
b2Zmc2V0T3V0cHV0WzNdID0gZGVmYXVsdFZhbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLX0KLQotdGVtcGxhdGUgPHVuc2lnbmVkIGludCBjb21wb25lbnRDb3VudD4KLXN0YXRp
YyB2b2lkIGNvcHlGaXhlZFZlcnRleERhdGEoY29uc3Qgdm9pZCogaW5wdXQsIHVuc2lnbmVkIGlu
dCBzdHJpZGUsIHVuc2lnbmVkIGludCBjb3VudCwgdm9pZCogb3V0cHV0KQotewotICAgIHN0YXRp
YyBjb25zdCBmbG9hdCBkaXZpc29yID0gMS4wZiAvICgxIDw8IDE2KTsKLQotICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIGNvbnN0IEdM
Zml4ZWQqIG9mZnNldElucHV0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBHTGZpeGVkKj4ocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaW5wdXQpICsgc3RyaWRlICogaSk7Ci0gICAgICAg
IGZsb2F0KiBvZmZzZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4ob3V0cHV0KSAr
IGkgKiBjb21wb25lbnRDb3VudDsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsg
aiA8IGNvbXBvbmVudENvdW50OyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIG9mZnNldE91
dHB1dFtqXSA9IHN0YXRpY19jYXN0PGZsb2F0PihvZmZzZXRJbnB1dFtqXSkgKiBkaXZpc29yOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW50
IGNvbXBvbmVudENvdW50LCBib29sIG5vcm1hbGl6ZWQ+Ci1zdGF0aWMgdm9pZCBjb3B5VG9GbG9h
dFZlcnRleERhdGEoY29uc3Qgdm9pZCogaW5wdXQsIHVuc2lnbmVkIGludCBzdHJpZGUsIHVuc2ln
bmVkIGludCBjb3VudCwgdm9pZCogb3V0cHV0KQotewotICAgIHR5cGVkZWYgc3RkOjpudW1lcmlj
X2xpbWl0czxUPiBOTDsKLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKLSAgICB7Ci0gICAgICAgIGNvbnN0IFQgKm9mZnNldElucHV0ID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBUKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaW5wdXQpICsgc3Ry
aWRlICogaSk7Ci0gICAgICAgIGZsb2F0ICpvZmZzZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0
PGZsb2F0Kj4ob3V0cHV0KSArIGkgKiBjb21wb25lbnRDb3VudDsKLQotICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBqID0gMDsgaiA8IGNvbXBvbmVudENvdW50OyBqKyspCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChub3JtYWxpemVkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGlmIChOTDo6aXNfc2lnbmVkKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZmxvYXQgZGl2aXNvciA9IDEuMGYgLyAoMiAqIHN0YXRpY19jYXN0PGZsb2F0PihO
TDo6bWF4KCkpICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgIG9mZnNldE91dHB1dFtqXSA9ICgy
ICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KG9mZnNldElucHV0W2pdKSArIDEpICogZGl2aXNvcjsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0T3V0cHV0W2pdID0gIHN0YXRpY19jYXN0PGZsb2F0
PihvZmZzZXRJbnB1dFtqXSkgLyBOTDo6bWF4KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IG9mZnNldE91dHB1dFtqXSA9ICBzdGF0aWNfY2FzdDxmbG9hdD4ob2Zmc2V0SW5wdXRbal0pOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1jb25zdCBWZXJ0ZXhCdWZmZXIx
MTo6VmVydGV4Q29udmVydGVyIFZlcnRleEJ1ZmZlcjExOjptUG9zc2libGVUcmFuc2xhdGlvbnNb
TlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVNdWzJdWzRdID0KLXsKLSAgICB7IC8vIEdMX0JZVEUK
LSAgICAgICAgeyAvLyB1bm5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVy
dGV4RGF0YTxHTGJ5dGUsIDEsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMl9GTE9BVCwg
NCB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMYnl0ZSwgMiwgZmFs
c2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCA4IH0sCi0gICAgICAgICAgICB7
ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xieXRlLCAzLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZP
Uk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZl
cnRleERhdGE8R0xieXRlLCA0LCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJB
MzJfRkxPQVQsIDE2IH0sCi0gICAgICAgIH0sCi0gICAgICAgIHsgLy8gbm9ybWFsaXplZAotICAg
ICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xieXRlLCAxLCBmYWxzZSwgdHJ1ZT4sIHRydWUs
IERYR0lfRk9STUFUX1I4X1NOT1JNLCAxIH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0
YTxHTGJ5dGUsIDIsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjhHOF9TTk9STSwg
MiB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xieXRlLCAzLCB0cnVlLCB0cnVl
PiwgZmFsc2UsIERYR0lfRk9STUFUX1I4RzhCOEE4X1NOT1JNLCA0IH0sCi0gICAgICAgICAgICB7
ICZjb3B5VmVydGV4RGF0YTxHTGJ5dGUsIDQsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JN
QVRfUjhHOEI4QThfU05PUk0sIDQgfSwKLSAgICAgICAgfSwKLSAgICB9LAotICAgIHsgLy8gR0xf
VU5TSUdORURfQllURQotICAgICAgICB7IC8vIHVubm9ybWFsaXplZAotICAgICAgICAgICAgeyAm
Y29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDEsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9S
TUFUX1IzMl9GTE9BVCwgNCB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRh
PEdMdWJ5dGUsIDIsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgOCB9
LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDMsIGZhbHNl
PiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAg
IHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVieXRlLCA0LCBmYWxzZT4sIGZhbHNlLCBEWEdJ
X0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsIDE2IH0sCi0gICAgICAgIH0sCi0gICAgICAgIHsg
Ly8gbm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1Ynl0ZSwgMSwg
ZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SOF9VTk9STSwgMSB9LAotICAgICAgICAg
ICAgeyAmY29weVZlcnRleERhdGE8R0x1Ynl0ZSwgMiwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJ
X0ZPUk1BVF9SOEc4X1VOT1JNLCAyIH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxH
THVieXRlLCAzLCB0cnVlLCB0cnVlPiwgZmFsc2UsIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JN
LCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHVieXRlLCA0LCBmYWxzZSwg
dHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNLCA0IH0sCi0gICAgICAgIH0s
Ci0gICAgfSwKLSAgICB7IC8vIEdMX1NIT1JUCi0gICAgICAgIHsgLy8gdW5ub3JtYWxpemVkCi0g
ICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xzaG9ydCwgMSwgZmFsc2U+LCBm
YWxzZSwgRFhHSV9GT1JNQVRfUjMyX0ZMT0FULCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9G
bG9hdFZlcnRleERhdGE8R0xzaG9ydCwgMiwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMy
RzMyX0ZMT0FULCA4IH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xz
aG9ydCwgMywgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAxMiB9
LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMc2hvcnQsIDQsIGZhbHNl
PiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCwgMTYgfSwKLSAgICAgICAg
fSwKLSAgICAgICAgeyAvLyBub3JtYWxpemVkCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0
YTxHTHNob3J0LCAxLCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1IxNl9TTk9STSwg
MiB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xzaG9ydCwgMiwgZmFsc2UsIHRy
dWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMTZHMTZfU05PUk0sIDQgfSwKLSAgICAgICAgICAgIHsg
JmNvcHlWZXJ0ZXhEYXRhPEdMc2hvcnQsIDMsIHRydWUsIHRydWU+LCBmYWxzZSwgRFhHSV9GT1JN
QVRfUjE2RzE2QjE2QTE2X1NOT1JNLCA4IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0
YTxHTHNob3J0LCA0LCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1IxNkcxNkIxNkEx
Nl9TTk9STSwgOCB9LAotICAgICAgICB9LAotICAgIH0sCi0gICAgeyAvLyBHTF9VTlNJR05FRF9T
SE9SVAotICAgICAgICB7IC8vIHVubm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29weVRvRmxv
YXRWZXJ0ZXhEYXRhPEdMdXNob3J0LCAxLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJf
RkxPQVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVzaG9y
dCwgMiwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCA4IH0sCi0gICAg
ICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0x1c2hvcnQsIDMsIGZhbHNlPiwgZmFs
c2UsIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsgJmNv
cHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVzaG9ydCwgNCwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JN
QVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAgICAgICB9LAotICAgICAgICB7IC8vIG5v
cm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdXNob3J0LCAxLCBmYWxz
ZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1IxNl9VTk9STSwgMiB9LAotICAgICAgICAgICAg
eyAmY29weVZlcnRleERhdGE8R0x1c2hvcnQsIDIsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9G
T1JNQVRfUjE2RzE2X1VOT1JNLCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxH
THVzaG9ydCwgMywgdHJ1ZSwgdHJ1ZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZf
VU5PUk0sIDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdXNob3J0LCA0LCBm
YWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9VTk9STSwgOCB9LAot
ICAgICAgICB9LAotICAgIH0sCi0gICAgeyAvLyBHTF9GSVhFRAotICAgICAgICB7IC8vIHVubm9y
bWFsaXplZAotICAgICAgICAgICAgeyAmY29weUZpeGVkVmVydGV4RGF0YTwxPiwgZmFsc2UsIERY
R0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9LAotICAgICAgICAgICAgeyAmY29weUZpeGVkVmVydGV4
RGF0YTwyPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAotICAgICAgICAg
ICAgeyAmY29weUZpeGVkVmVydGV4RGF0YTwzPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIz
Ml9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8ND4sIGZh
bHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsIDE2IH0sCi0gICAgICAgIH0sCi0g
ICAgICAgIHsgLy8gbm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29weUZpeGVkVmVydGV4RGF0
YTwxPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9LAotICAgICAgICAgICAgeyAm
Y29weUZpeGVkVmVydGV4RGF0YTwyPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwg
OCB9LAotICAgICAgICAgICAgeyAmY29weUZpeGVkVmVydGV4RGF0YTwzPiwgZmFsc2UsIERYR0lf
Rk9STUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZl
cnRleERhdGE8ND4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsIDE2IH0s
Ci0gICAgICAgIH0sCi0gICAgfSwKLSAgICB7IC8vIEdMX0ZMT0FUCi0gICAgICAgIHsgLy8gdW5u
b3JtYWxpemVkCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCAxLCBmYWxz
ZSwgZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAg
IHsgJmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDIsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lf
Rk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8
R0xmbG9hdCwgMywgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZM
T0FULCAxMiB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xmbG9hdCwgNCwgZmFs
c2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAot
ICAgICAgICB9LAotICAgICAgICB7IC8vIG5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlW
ZXJ0ZXhEYXRhPEdMZmxvYXQsIDEsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lfRk9STUFUX1Iz
Ml9GTE9BVCwgNCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xmbG9hdCwgMiwg
ZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCA4IH0sCi0gICAg
ICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCAzLCBmYWxzZSwgZmFsc2U+LCB0cnVl
LCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0sCi0gICAgICAgICAgICB7ICZjb3B5
VmVydGV4RGF0YTxHTGZsb2F0LCA0LCBmYWxzZSwgZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9S
MzJHMzJCMzJBMzJfRkxPQVQsIDE2IH0sCi0gICAgICAgIH0sCi0gICAgfSwKLX07Ci0KLWNvbnN0
IFZlcnRleEJ1ZmZlcjExOjpWZXJ0ZXhDb252ZXJ0ZXIgJlZlcnRleEJ1ZmZlcjExOjpnZXRWZXJ0
ZXhDb252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSkKLXsKLSAg
ICB1bnNpZ25lZCBpbnQgdHlwZUluZGV4ID0gMDsKLSAgICBzd2l0Y2ggKGF0dHJpYnV0ZS5tVHlw
ZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0JZVEU6ICAgICAgICAgICAgIHR5cGVJbmRleCA9IDA7
IGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOiAgICB0eXBlSW5kZXggPSAxOyBi
cmVhazsKLSAgICAgIGNhc2UgR0xfU0hPUlQ6ICAgICAgICAgICAgdHlwZUluZGV4ID0gMjsgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOiAgIHR5cGVJbmRleCA9IDM7IGJyZWFr
OwotICAgICAgY2FzZSBHTF9GSVhFRDogICAgICAgICAgICB0eXBlSW5kZXggPSA0OyBicmVhazsK
LSAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgICAgICAgdHlwZUluZGV4ID0gNTsgYnJlYWs7Ci0g
ICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7IGJyZWFrOwotICAg
IH0KLQotICAgIHJldHVybiBtUG9zc2libGVUcmFuc2xhdGlvbnNbdHlwZUluZGV4XVthdHRyaWJ1
dGUubU5vcm1hbGl6ZWQgPyAxIDogMF1bYXR0cmlidXRlLm1TaXplIC0gMV07Ci19Ci0KLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
VmVydGV4QnVmZmVyMTEuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvVmVydGV4QnVmZmVyMTEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZWNlYjQyNmU4MmQ0MmI1NTY2NmM1NzljM2ZlZTFmZTJhYjdiYTgwMS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlcjExLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw3NCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVmVydGV4QnVmZmVyMTEuaDogRGVmaW5l
cyB0aGUgRDNEMTEgVmVydGV4QnVmZmVyIGltcGxlbWVudGF0aW9uLgotCi0jaWZuZGVmIExJQkdM
RVNWMl9SRU5ERVJFUl9WRVJURVhCVUZGRVIxMV9IXwotI2RlZmluZSBMSUJHTEVTVjJfUkVOREVS
RVJfVkVSVEVYQlVGRkVSMTFfSF8KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0
ZXhCdWZmZXIuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci1jbGFzcyBSZW5kZXJlcjExOwotCi1jbGFz
cyBWZXJ0ZXhCdWZmZXIxMSA6IHB1YmxpYyBWZXJ0ZXhCdWZmZXIKLXsKLSAgcHVibGljOgotICAg
IGV4cGxpY2l0IFZlcnRleEJ1ZmZlcjExKHJ4OjpSZW5kZXJlcjExICpjb25zdCByZW5kZXJlcik7
Ci0gICAgdmlydHVhbCB+VmVydGV4QnVmZmVyMTEoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBpbml0
aWFsaXplKHVuc2lnbmVkIGludCBzaXplLCBib29sIGR5bmFtaWNVc2FnZSk7Ci0KLSAgICBzdGF0
aWMgVmVydGV4QnVmZmVyMTEgKm1ha2VWZXJ0ZXhCdWZmZXIxMShWZXJ0ZXhCdWZmZXIgKnZldGV4
QnVmZmVyKTsKLQotICAgIHZpcnR1YWwgYm9vbCBzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3Qg
Z2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwg
R0xzaXplaSBpbnN0YW5jZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKLSAgICB2aXJ0dWFsIGJvb2wgc3RvcmVSYXdEYXRhKGNv
bnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsK
LQotICAgIHZpcnR1YWwgYm9vbCBnZXRTcGFjZVJlcXVpcmVkKGNvbnN0IGdsOjpWZXJ0ZXhBdHRy
aWJ1dGUgJmF0dHJpYiwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTcGFjZVJlcXVpcmVk
KSBjb25zdDsKLQotICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0NvbnZlcnNpb24oY29uc3QgZ2w6
OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQg
aW50IGdldEJ1ZmZlclNpemUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgc2V0QnVmZmVyU2l6
ZSh1bnNpZ25lZCBpbnQgc2l6ZSk7Ci0gICAgdmlydHVhbCBib29sIGRpc2NhcmQoKTsKLQotICAg
IHVuc2lnbmVkIGludCBnZXRWZXJ0ZXhTaXplKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0
dHJpYikgY29uc3Q7Ci0gICAgRFhHSV9GT1JNQVQgZ2V0RFhHSUZvcm1hdChjb25zdCBnbDo6VmVy
dGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0OwotCi0gICAgSUQzRDExQnVmZmVyICpnZXRCdWZm
ZXIoKSBjb25zdDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihW
ZXJ0ZXhCdWZmZXIxMSk7Ci0KLSAgICByeDo6UmVuZGVyZXIxMSAqY29uc3QgbVJlbmRlcmVyOwot
Ci0gICAgSUQzRDExQnVmZmVyICptQnVmZmVyOwotICAgIHVuc2lnbmVkIGludCBtQnVmZmVyU2l6
ZTsKLSAgICBib29sIG1EeW5hbWljVXNhZ2U7Ci0KLSAgICB0eXBlZGVmIHZvaWQgKCpWZXJ0ZXhD
b252ZXJzaW9uRnVuY3Rpb24pKGNvbnN0IHZvaWQgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBp
bnQsIHZvaWQgKik7Ci0gICAgc3RydWN0IFZlcnRleENvbnZlcnRlcgotICAgIHsKLSAgICAgICAg
VmVydGV4Q29udmVyc2lvbkZ1bmN0aW9uIGNvbnZlcnNpb25GdW5jOwotICAgICAgICBib29sIGlk
ZW50aXR5OwotICAgICAgICBEWEdJX0ZPUk1BVCBkeGdpRm9ybWF0OwotICAgICAgICB1bnNpZ25l
ZCBpbnQgb3V0cHV0RWxlbWVudFNpemU7Ci0gICAgfTsKLQotICAgIGVudW0geyBOVU1fR0xfVkVS
VEVYX0FUVFJJQl9UWVBFUyA9IDYgfTsKLQotICAgIC8vIFRoaXMgdGFibGUgaXMgdXNlZCB0byBn
ZW5lcmF0ZSBtQXR0cmlidXRlVHlwZXMuCi0gICAgc3RhdGljIGNvbnN0IFZlcnRleENvbnZlcnRl
ciBtUG9zc2libGVUcmFuc2xhdGlvbnNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVNdWzJdWzRd
OyAvLyBbR0wgdHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXplZF1b
c2l6ZSAtIDFdCi0KLSAgICBzdGF0aWMgY29uc3QgVmVydGV4Q29udmVydGVyICZnZXRWZXJ0ZXhD
b252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSk7Ci19OwotCi19
Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfVkVSVEVYQlVGRkVSMTFfSF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVmVy
dGV4QnVmZmVyOS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL1ZlcnRleEJ1ZmZlcjkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1
YTc5MmI5N2YyNTRhNmI0ZjgwN2E5MTliZjY4N2JhZGIyZDM2YzM5Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4QnVmZmVyOS5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw1MzAgKzAsMCBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwotCi0vLyBWZXJ0ZXhCdWZmZXI5LmNwcDogRGVmaW5lcyB0aGUgRDNEOSBWZXJ0ZXhCdWZmZXIg
aW1wbGVtZW50YXRpb24uCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4QnVm
ZmVyOS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci92ZXJ0ZXhjb252ZXJzaW9uLmgi
Ci0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvQ29udGV4dC5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5k
ZXJlcjkuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKLQotbmFtZXNwYWNlIHJ4
Ci17Ci0KLWJvb2wgVmVydGV4QnVmZmVyOTo6bVRyYW5zbGF0aW9uc0luaXRpYWxpemVkID0gZmFs
c2U7Ci1WZXJ0ZXhCdWZmZXI5OjpGb3JtYXRDb252ZXJ0ZXIgVmVydGV4QnVmZmVyOTo6bUZvcm1h
dENvbnZlcnRlcnNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVNdWzJdWzRdOwotCi1WZXJ0ZXhC
dWZmZXI5OjpWZXJ0ZXhCdWZmZXI5KHJ4OjpSZW5kZXJlcjkgKmNvbnN0IHJlbmRlcmVyKSA6IG1S
ZW5kZXJlcihyZW5kZXJlcikKLXsKLSAgICBtVmVydGV4QnVmZmVyID0gTlVMTDsKLSAgICBtQnVm
ZmVyU2l6ZSA9IDA7Ci0gICAgbUR5bmFtaWNVc2FnZSA9IGZhbHNlOwotCi0gICAgaWYgKCFtVHJh
bnNsYXRpb25zSW5pdGlhbGl6ZWQpCi0gICAgewotICAgICAgICBpbml0aWFsaXplVHJhbnNsYXRp
b25zKHJlbmRlcmVyLT5nZXRDYXBzRGVjbFR5cGVzKCkpOwotICAgICAgICBtVHJhbnNsYXRpb25z
SW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KLX0KLQotVmVydGV4QnVmZmVyOTo6flZlcnRleEJ1
ZmZlcjkoKQotewotICAgIGlmIChtVmVydGV4QnVmZmVyKQotICAgIHsKLSAgICAgICAgbVZlcnRl
eEJ1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtVmVydGV4QnVmZmVyID0gTlVMTDsKLSAgICB9
Ci19Ci0KLWJvb2wgVmVydGV4QnVmZmVyOTo6aW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgc2l6ZSwg
Ym9vbCBkeW5hbWljVXNhZ2UpCi17Ci0gICAgaWYgKG1WZXJ0ZXhCdWZmZXIpCi0gICAgewotICAg
ICAgICBtVmVydGV4QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1WZXJ0ZXhCdWZmZXIgPSBO
VUxMOwotICAgIH0KLQotICAgIHVwZGF0ZVNlcmlhbCgpOwotCi0gICAgaWYgKHNpemUgPiAwKQot
ICAgIHsKLSAgICAgICAgRFdPUkQgZmxhZ3MgPSBEM0RVU0FHRV9XUklURU9OTFk7Ci0gICAgICAg
IGlmIChkeW5hbWljVXNhZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZsYWdzIHw9IEQzRFVT
QUdFX0RZTkFNSUM7Ci0gICAgICAgIH0KLQotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1SZW5k
ZXJlci0+Y3JlYXRlVmVydGV4QnVmZmVyKHNpemUsIGZsYWdzLCAmbVZlcnRleEJ1ZmZlcik7Ci0K
LSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIo
Ik91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBhIHZlcnRleCBidWZmZXIgb2Ygc2l6ZSAlbHUuIiwg
c2l6ZSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBtQnVmZmVyU2l6ZSA9IHNpemU7Ci0gICAgbUR5bmFtaWNVc2FnZSA9IGR5bmFtaWNVc2FnZTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotVmVydGV4QnVmZmVyOSAqVmVydGV4QnVmZmVyOTo6bWFr
ZVZlcnRleEJ1ZmZlcjkoVmVydGV4QnVmZmVyICp2ZXJ0ZXhCdWZmZXIpCi17Ci0gICAgQVNTRVJU
KEhBU19EWU5BTUlDX1RZUEUoVmVydGV4QnVmZmVyOSosIHZlcnRleEJ1ZmZlcikpOwotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxWZXJ0ZXhCdWZmZXI5Kj4odmVydGV4QnVmZmVyKTsKLX0KLQotYm9v
bCBWZXJ0ZXhCdWZmZXI5OjpzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0
dHJpYnV0ZSAmYXR0cmliLCBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNp
Z25lZCBpbnQgb2Zmc2V0KQotewotICAgIGlmIChtVmVydGV4QnVmZmVyKQotICAgIHsKLSAgICAg
ICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gYXR0cmliLm1Cb3VuZEJ1ZmZlci5nZXQoKTsKLQotICAg
ICAgICBpbnQgaW5wdXRTdHJpZGUgPSBhdHRyaWIuc3RyaWRlKCk7Ci0gICAgICAgIGludCBlbGVt
ZW50U2l6ZSA9IGF0dHJpYi50eXBlU2l6ZSgpOwotICAgICAgICBjb25zdCBGb3JtYXRDb252ZXJ0
ZXIgJmNvbnZlcnRlciA9IGZvcm1hdENvbnZlcnRlcihhdHRyaWIpOwotCi0gICAgICAgIERXT1JE
IGxvY2tGbGFncyA9IG1EeW5hbWljVXNhZ2UgPyBEM0RMT0NLX05PT1ZFUldSSVRFIDogMDsKLQot
ICAgICAgICB2b2lkICptYXBQdHIgPSBOVUxMOwotCi0gICAgICAgIHVuc2lnbmVkIGludCBtYXBT
aXplOwotICAgICAgICBpZiAoIXNwYWNlUmVxdWlyZWQoYXR0cmliLCBjb3VudCwgaW5zdGFuY2Vz
LCAmbWFwU2l6ZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVZlcnRleEJ1ZmZlci0+TG9jayhvZmZz
ZXQsIG1hcFNpemUsICZtYXBQdHIsIGxvY2tGbGFncyk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChy
ZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkxvY2sgZmFpbGVkIHdpdGggZXJy
b3IgMHglMDh4IiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotCi0gICAgICAgIGNvbnN0IGNoYXIgKmlucHV0ID0gTlVMTDsKLSAgICAgICAgaWYgKGJ1ZmZl
cikKLSAgICAgICAgewotICAgICAgICAgICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGJ1ZmZl
ci0+Z2V0U3RvcmFnZSgpOwotICAgICAgICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBj
aGFyKj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSArIHN0YXRpY19jYXN0PGludD4oYXR0cmliLm1PZmZz
ZXQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgaW5w
dXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYXR0cmliLm1Qb2ludGVyKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBhdHRyaWIubURpdmlzb3IgPT0gMCkK
LSAgICAgICAgewotICAgICAgICAgICAgaW5wdXQgKz0gaW5wdXRTdHJpZGUgKiBzdGFydDsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChjb252ZXJ0ZXIuaWRlbnRpdHkgJiYgaW5wdXRTdHJpZGUg
PT0gZWxlbWVudFNpemUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1lbWNweShtYXBQdHIsIGlu
cHV0LCBjb3VudCAqIGlucHV0U3RyaWRlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGNvbnZlcnRlci5jb252ZXJ0QXJyYXkoaW5wdXQsIGlucHV0U3Ry
aWRlLCBjb3VudCwgbWFwUHRyKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1WZXJ0ZXhCdWZmZXIt
PlVubG9jaygpOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAg
ewotICAgICAgICBFUlIoIlZlcnRleCBidWZmZXIgbm90IGluaXRpYWxpemVkLiIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFZlcnRleEJ1ZmZlcjk6OnN0b3JlUmF3
RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9m
ZnNldCkKLXsKLSAgICBpZiAobVZlcnRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIERXT1JEIGxv
Y2tGbGFncyA9IG1EeW5hbWljVXNhZ2UgPyBEM0RMT0NLX05PT1ZFUldSSVRFIDogMDsKLQotICAg
ICAgICB2b2lkICptYXBQdHIgPSBOVUxMOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1WZXJ0
ZXhCdWZmZXItPkxvY2sob2Zmc2V0LCBzaXplLCAmbWFwUHRyLCBsb2NrRmxhZ3MpOwotCi0gICAg
ICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJMb2Nr
IGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBtZW1jcHkobWFwUHRyLCBkYXRhLCBzaXplKTsK
LQotICAgICAgICBtVmVydGV4QnVmZmVyLT5VbmxvY2soKTsKLQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgRVJSKCJWZXJ0ZXggYnVmZmVyIG5v
dCBpbml0aWFsaXplZC4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9v
bCBWZXJ0ZXhCdWZmZXI5OjpnZXRTcGFjZVJlcXVpcmVkKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1
dGUgJmF0dHJpYiwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTcGFjZVJlcXVpcmVk
KSBjb25zdAotewotICAgIHJldHVybiBzcGFjZVJlcXVpcmVkKGF0dHJpYiwgY291bnQsIGluc3Rh
bmNlcywgb3V0U3BhY2VSZXF1aXJlZCk7Ci19Ci0KLWJvb2wgVmVydGV4QnVmZmVyOTo6cmVxdWly
ZXNDb252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QKLXsK
LSAgICByZXR1cm4gIWZvcm1hdENvbnZlcnRlcihhdHRyaWIpLmlkZW50aXR5OwotfQotCi11bnNp
Z25lZCBpbnQgVmVydGV4QnVmZmVyOTo6Z2V0VmVydGV4U2l6ZShjb25zdCBnbDo6VmVydGV4QXR0
cmlidXRlICZhdHRyaWIpIGNvbnN0Ci17Ci0gICAgdW5zaWduZWQgaW50IHNwYWNlUmVxdWlyZWQ7
Ci0gICAgcmV0dXJuIGdldFNwYWNlUmVxdWlyZWQoYXR0cmliLCAxLCAwLCAmc3BhY2VSZXF1aXJl
ZCkgPyBzcGFjZVJlcXVpcmVkIDogMDsKLX0KLQotRDNEREVDTFRZUEUgVmVydGV4QnVmZmVyOTo6
Z2V0RGVjbFR5cGUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdAotewot
ICAgIHJldHVybiBmb3JtYXRDb252ZXJ0ZXIoYXR0cmliKS5kM2REZWNsVHlwZTsKLX0KLQotdW5z
aWduZWQgaW50IFZlcnRleEJ1ZmZlcjk6OmdldEJ1ZmZlclNpemUoKSBjb25zdAotewotICAgIHJl
dHVybiBtQnVmZmVyU2l6ZTsKLX0KLQotYm9vbCBWZXJ0ZXhCdWZmZXI5OjpzZXRCdWZmZXJTaXpl
KHVuc2lnbmVkIGludCBzaXplKQotewotICAgIGlmIChzaXplID4gbUJ1ZmZlclNpemUpCi0gICAg
ewotICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZShzaXplLCBtRHluYW1pY1VzYWdlKTsKLSAgICB9
Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfQotCi1ib29s
IFZlcnRleEJ1ZmZlcjk6OmRpc2NhcmQoKQotewotICAgIGlmIChtVmVydGV4QnVmZmVyKQotICAg
IHsKLSAgICAgICAgdm9pZCAqZHVtbXk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0OwotCi0gICAg
ICAgIHJlc3VsdCA9IG1WZXJ0ZXhCdWZmZXItPkxvY2soMCwgMSwgJmR1bW15LCBEM0RMT0NLX0RJ
U0NBUkQpOwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEVSUigiRGlzY2FyZCBsb2NrIGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHQg
PSBtVmVydGV4QnVmZmVyLT5VbmxvY2soKTsKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkRpc2NhcmQgdW5sb2NrIGZhaWxlZCB3aXRoIGVy
cm9yIDB4JTA4eCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAg
ICAgRVJSKCJWZXJ0ZXggYnVmZmVyIG5vdCBpbml0aWFsaXplZC4iKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLX0KLQotSURpcmVjdDNEVmVydGV4QnVmZmVyOSAqIFZlcnRleEJ1ZmZl
cjk6OmdldEJ1ZmZlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1WZXJ0ZXhCdWZmZXI7Ci19Ci0K
LS8vIE1hcHBpbmcgZnJvbSBPcGVuR0wtRVMgdmVydGV4IGF0dHJpYiB0eXBlIHRvIEQzRCBkZWNs
IHR5cGU6Ci0vLwotLy8gQllURSAgICAgICAgICAgICAgICAgU0hPUlQgKENhc3QpCi0vLyBCWVRF
LW5vcm0gICAgICAgICAgICBGTE9BVCAoTm9ybWFsaXplKSAoY2FuJ3QgYmUgZXhhY3RseSByZXBy
ZXNlbnRlZCBhcyBTSE9SVC1ub3JtKQotLy8gVU5TSUdORURfQllURSAgICAgICAgVUJZVEU0IChJ
ZGVudGl0eSkgb3IgU0hPUlQgKENhc3QpCi0vLyBVTlNJR05FRF9CWVRFLW5vcm0gICBVQllURTRO
IChJZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1hbGl6ZSkKLS8vIFNIT1JUICAgICAgICAgICAgICAg
IFNIT1JUIChJZGVudGl0eSkKLS8vIFNIT1JULW5vcm0gICAgICAgICAgIFNIT1JULW5vcm0gKElk
ZW50aXR5KSBvciBGTE9BVCAoTm9ybWFsaXplKQotLy8gVU5TSUdORURfU0hPUlQgICAgICAgRkxP
QVQgKENhc3QpCi0vLyBVTlNJR05FRF9TSE9SVC1ub3JtICBVU0hPUlQtbm9ybSAoSWRlbnRpdHkp
IG9yIEZMT0FUIChOb3JtYWxpemUpCi0vLyBGSVhFRCAobm90IGluIFdlYkdMKSBGTE9BVCAoRml4
ZWRUb0Zsb2F0KQotLy8gRkxPQVQgICAgICAgICAgICAgICAgRkxPQVQgKElkZW50aXR5KQotCi0v
LyBHTFRvQ1R5cGUgbWFwcyBmcm9tIEdMIHR5cGUgKGFzIEdMZW51bSkgdG8gdGhlIEMgdHlwZWRl
Zi4KLXRlbXBsYXRlIDxHTGVudW0gR0xUeXBlPiBzdHJ1Y3QgR0xUb0NUeXBlIHsgfTsKLQotdGVt
cGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9CWVRFPiAgICAgICAgICAgeyB0eXBlZGVmIEdM
Ynl0ZSB0eXBlOyAgICAgIH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX1VOU0lH
TkVEX0JZVEU+ICB7IHR5cGVkZWYgR0x1Ynl0ZSB0eXBlOyAgICAgfTsKLXRlbXBsYXRlIDw+IHN0
cnVjdCBHTFRvQ1R5cGU8R0xfU0hPUlQ+ICAgICAgICAgIHsgdHlwZWRlZiBHTHNob3J0IHR5cGU7
ICAgICB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9VTlNJR05FRF9TSE9SVD4g
eyB0eXBlZGVmIEdMdXNob3J0IHR5cGU7ICAgIH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NU
eXBlPEdMX0ZJWEVEPiAgICAgICAgICB7IHR5cGVkZWYgR0x1aW50IHR5cGU7ICAgICAgfTsKLXRl
bXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfRkxPQVQ+ICAgICAgICAgIHsgdHlwZWRlZiBH
TGZsb2F0IHR5cGU7ICAgICB9OwotCi0vLyBUaGlzIGRpZmZlcnMgZnJvbSBEM0RERUNMVFlQRSBp
biB0aGF0IGl0IGlzIHVuc2l6ZWQuIChTaXplIGV4cGFuc2lvbiBpcyBhcHBsaWVkIGxhc3QuKQot
ZW51bSBEM0RWZXJ0ZXhUeXBlCi17Ci0gICAgRDNEVlRfRkxPQVQsCi0gICAgRDNEVlRfU0hPUlQs
Ci0gICAgRDNEVlRfU0hPUlRfTk9STSwKLSAgICBEM0RWVF9VQllURSwKLSAgICBEM0RWVF9VQllU
RV9OT1JNLAotICAgIEQzRFZUX1VTSE9SVF9OT1JNCi19OwotCi0vLyBEM0RUb0NUeXBlIG1hcHMg
ZnJvbSBEM0QgdmVydGV4IHR5cGUgKGFzIGVudW0gRDNEVmVydGV4VHlwZSkgdG8gdGhlIGNvcnJl
c3BvbmRpbmcgQyB0eXBlLgotdGVtcGxhdGUgPHVuc2lnbmVkIGludCBEM0RUeXBlPiBzdHJ1Y3Qg
RDNEVG9DVHlwZSB7IH07Ci0KLXRlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX0ZM
T0FUPiB7IHR5cGVkZWYgZmxvYXQgdHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NU
eXBlPEQzRFZUX1NIT1JUPiB7IHR5cGVkZWYgc2hvcnQgdHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0
cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1NIT1JUX05PUk0+IHsgdHlwZWRlZiBzaG9ydCB0eXBlOyB9
OwotdGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfVUJZVEU+IHsgdHlwZWRlZiB1
bnNpZ25lZCBjaGFyIHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RW
VF9VQllURV9OT1JNPiB7IHR5cGVkZWYgdW5zaWduZWQgY2hhciB0eXBlOyB9OwotdGVtcGxhdGUg
PD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfVVNIT1JUX05PUk0+IHsgdHlwZWRlZiB1bnNpZ25l
ZCBzaG9ydCB0eXBlOyB9OwotCi0vLyBFbmNvZGUgdGhlIHR5cGUvc2l6ZSBjb21iaW5hdGlvbnMg
dGhhdCBEM0QgcGVybWl0cy4gRm9yIGVhY2ggdHlwZS9zaXplIGl0IGV4cGFuZHMgdG8gYSB3aWRl
bmVyIHRoYXQgd2lsbCBwcm92aWRlIHRoZSBhcHByb3ByaWF0ZSBmaW5hbCBzaXplLgotdGVtcGxh
dGUgPHVuc2lnbmVkIGludCB0eXBlLCBpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZSB7IH07Ci0K
LXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9GTE9BVCwgc2l6ZT4g
ICAgICAgICAgOiBOb1dpZGVuPHNpemU+IHsgfTsKLXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0
IFdpZGVuUnVsZTxEM0RWVF9TSE9SVCwgc2l6ZT4gICAgICAgICAgOiBXaWRlblRvRXZlbjxzaXpl
PiB7IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfU0hPUlRf
Tk9STSwgc2l6ZT4gICAgIDogV2lkZW5Ub0V2ZW48c2l6ZT4geyB9OwotdGVtcGxhdGUgPGludCBz
aXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1VCWVRFLCBzaXplPiAgICAgICAgICA6IFdpZGVu
VG9Gb3VyPHNpemU+IHsgfTsKLXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxE
M0RWVF9VQllURV9OT1JNLCBzaXplPiAgICAgOiBXaWRlblRvRm91cjxzaXplPiB7IH07Ci10ZW1w
bGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfVVNIT1JUX05PUk0sIHNpemU+
ICAgIDogV2lkZW5Ub0V2ZW48c2l6ZT4geyB9OwotCi0vLyBWZXJ0ZXhUeXBlRmxhZ3MgZW5jb2Rl
cyB0aGUgRDNEQ0FQUzk6OkRlY2xUeXBlIGZsYWcgYW5kIHZlcnRleCBkZWNsYXJhdGlvbiBmbGFn
IGZvciBlYWNoIEQzRCB2ZXJ0ZXggdHlwZSAmIHNpemUgY29tYmluYXRpb24uCi10ZW1wbGF0ZSA8
dW5zaWduZWQgaW50IGQzZHR5cGUsIGludCBzaXplPiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzIHsg
fTsKLQotdGVtcGxhdGUgPHVuc2lnbmVkIGludCBfY2FwZmxhZywgdW5zaWduZWQgaW50IF9kZWNs
ZmxhZz4KLXN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXIKLXsKLSAgICBlbnVtIHsgY2FwZmxh
ZyA9IF9jYXBmbGFnIH07Ci0gICAgZW51bSB7IGRlY2xmbGFnID0gX2RlY2xmbGFnIH07Ci19Owot
Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FULCAxPiA6IFZl
cnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9GTE9BVDE+IHsgfTsKLXRlbXBsYXRl
IDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfRkxPQVQsIDI+IDogVmVydGV4VHlwZUZs
YWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FUMj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0
IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwgMz4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8
MCwgRDNEREVDTFRZUEVfRkxPQVQzPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlw
ZUZsYWdzPEQzRFZUX0ZMT0FULCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNM
VFlQRV9GTE9BVDQ+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNE
VlRfU0hPUlQsIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX1NIT1JU
Mj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVCwg
ND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfU0hPUlQ0PiB7IH07Ci10
ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JUX05PUk0sIDI+IDog
VmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19TSE9SVDJOLCBEM0RERUNMVFlQRV9TSE9S
VDJOPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JU
X05PUk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19TSE9SVDROLCBEM0RE
RUNMVFlQRV9TSE9SVDROPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdz
PEQzRFZUX1VCWVRFLCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfVUJZVEU0
LCBEM0RERUNMVFlQRV9VQllURTQ+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBl
RmxhZ3M8RDNEVlRfVUJZVEVfTk9STSwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRD
QVBTX1VCWVRFNE4sIEQzRERFQ0xUWVBFX1VCWVRFNE4+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVj
dCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVVNIT1JUX05PUk0sIDI+IDogVmVydGV4VHlwZUZsYWdz
SGVscGVyPEQzRERUQ0FQU19VU0hPUlQyTiwgRDNEREVDTFRZUEVfVVNIT1JUMk4+IHsgfTsKLXRl
bXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVVNIT1JUX05PUk0sIDQ+IDog
VmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VU0hPUlQ0TiwgRDNEREVDTFRZUEVfVVNI
T1JUNE4+IHsgfTsKLQotCi0vLyBWZXJ0ZXhUeXBlTWFwcGluZyBtYXBzIEdMIHR5cGUgJiBub3Jt
YWxpemVkIGZsYWcgdG8gcHJlZmVycmVkIGFuZCBmYWxsYmFjayBEM0QgdmVydGV4IHR5cGVzIChh
cyBEM0RWZXJ0ZXhUeXBlIGVudW1zKS4KLXRlbXBsYXRlIDxHTGVudW0gR0x0eXBlLCBib29sIG5v
cm1hbGl6ZWQ+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZyB7IH07Ci0KLXRlbXBsYXRlIDxEM0RW
ZXJ0ZXhUeXBlIFByZWZlcnJlZCwgRDNEVmVydGV4VHlwZSBGYWxsYmFjayA9IFByZWZlcnJlZD4K
LXN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2UKLXsKLSAgICBlbnVtIHsgcHJlZmVycmVkID0g
UHJlZmVycmVkIH07Ci0gICAgZW51bSB7IGZhbGxiYWNrID0gRmFsbGJhY2sgfTsKLX07Ci0KLXRl
bXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9CWVRFLCBmYWxzZT4gICAgICAg
ICAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9TSE9SVD4geyB9
OyAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FzdAotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRl
eFR5cGVNYXBwaW5nPEdMX0JZVEUsIHRydWU+ICAgICAgICAgICAgICAgICAgICAgICAgIDogVmVy
dGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgICAgICAgICAgICAg
ICAvLyBOb3JtYWxpemUKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9V
TlNJR05FRF9CWVRFLCBmYWxzZT4gICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFz
ZTxEM0RWVF9VQllURSwgRDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgLy8gSWRlbnRpdHksIENh
c3QKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9CWVRF
LCB0cnVlPiAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9VQllU
RV9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAgICAgLy8gSWRlbnRpdHksIE5vcm1hbGl6ZQotdGVt
cGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1NIT1JULCBmYWxzZT4gICAgICAg
ICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1NIT1JUPiB7IH07
ICAgICAgICAgICAgICAgICAgICAgICAvLyBJZGVudGl0eQotdGVtcGxhdGUgPD4gc3RydWN0IFZl
cnRleFR5cGVNYXBwaW5nPEdMX1NIT1JULCB0cnVlPiAgICAgICAgICAgICAgICAgICAgICAgIDog
VmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1NIT1JUX05PUk0sIEQzRFZUX0ZMT0FUPiB7IH07
ICAgICAvLyBDYXN0LCBOb3JtYWxpemUKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFw
cGluZzxHTF9VTlNJR05FRF9TSE9SVCwgZmFsc2U+ICAgICAgICAgICAgICA6IFZlcnRleFR5cGVN
YXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2Fz
dAotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1VOU0lHTkVEX1NIT1JU
LCB0cnVlPiAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1VTSE9S
VF9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAgICAvLyBDYXN0LCBOb3JtYWxpemUKLXRlbXBsYXRl
IDxib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9GSVhFRCwgbm9y
bWFsaXplZD4gICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4geyB9OyAgICAg
ICAgICAgICAgICAgICAgICAgLy8gRml4ZWRUb0Zsb2F0Ci10ZW1wbGF0ZSA8Ym9vbCBub3JtYWxp
emVkPiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfRkxPQVQsIG5vcm1hbGl6ZWQ+ICAgOiBW
ZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgICAgICAgICAg
ICAgIC8vIElkZW50aXR5Ci0KLQotLy8gR2l2ZW4gYSBHTCB0eXBlICYgbm9ybSBmbGFnIGFuZCBh
IEQzRCB0eXBlLCBDb252ZXJzaW9uUnVsZSBwcm92aWRlcyB0aGUgdHlwZSBjb252ZXJzaW9uIHJ1
bGUgKENhc3QsIE5vcm1hbGl6ZSwgSWRlbnRpdHksIEZpeGVkVG9GbG9hdCkuCi0vLyBUaGUgY29u
dmVyc2lvbiBydWxlcyB0aGVtc2VsdmVzIGFyZSBkZWZpbmVkIGluIHZlcnRleGNvbnZlcnNpb24u
aC4KLQotLy8gQWxtb3N0IGFsbCBjYXNlcyBhcmUgY292ZXJlZCBieSBDYXN0IChpbmNsdWRpbmcg
dGhvc2UgdGhhdCBhcmUgYWN0dWFsbHkgSWRlbnRpdHkgc2luY2UgQ2FzdDxULFQ+IGtub3dzIGl0
J3MgYW4gaWRlbnRpdHkgbWFwcGluZykuCi10ZW1wbGF0ZSA8R0xlbnVtIGZyb21UeXBlLCBib29s
IG5vcm1hbGl6ZWQsIHVuc2lnbmVkIGludCB0b1R5cGU+Ci1zdHJ1Y3QgQ29udmVyc2lvblJ1bGUg
OiBDYXN0PHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5cGUsIHR5cGVuYW1lIEQzRFRv
Q1R5cGU8dG9UeXBlPjo6dHlwZT4geyB9OwotCi0vLyBBbGwgY29udmVyc2lvbnMgZnJvbSBub3Jt
YWxpemVkIHR5cGVzIHRvIGZsb2F0IHVzZSB0aGUgTm9ybWFsaXplIG9wZXJhdG9yLgotdGVtcGxh
dGUgPEdMZW51bSBmcm9tVHlwZT4gc3RydWN0IENvbnZlcnNpb25SdWxlPGZyb21UeXBlLCB0cnVl
LCBEM0RWVF9GTE9BVD4gOiBOb3JtYWxpemU8dHlwZW5hbWUgR0xUb0NUeXBlPGZyb21UeXBlPjo6
dHlwZT4geyB9OwotCi0vLyBVc2UgYSBmdWxsIHNwZWNpYWxpemF0aW9uIGZvciB0aGlzIHNvIHRo
YXQgaXQgcHJlZmVyZW50aWFsbHkgbWF0Y2hlcyBhaGVhZCBvZiB0aGUgZ2VuZXJpYyBub3JtYWxp
emUtdG8tZmxvYXQgcnVsZXMuCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xf
RklYRUQsIHRydWUsIEQzRFZUX0ZMT0FUPiAgOiBGaXhlZFRvRmxvYXQ8R0xpbnQsIDE2PiB7IH07
Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklYRUQsIGZhbHNlLCBEM0RW
VF9GTE9BVD4gOiBGaXhlZFRvRmxvYXQ8R0xpbnQsIDE2PiB7IH07Ci0KLS8vIEEgMi1zdGFnZSBj
b25zdHJ1Y3Rpb24gaXMgdXNlZCBmb3IgRGVmYXVsdFZlcnRleFZhbHVlcyBiZWNhdXNlIGZsb2F0
IG11c3QgdXNlIFNpbXBsZURlZmF1bHRWYWx1ZXMgKGkuZS4gMC8xKQotLy8gd2hldGhlciBpdCBp
cyBub3JtYWxpemVkIG9yIG5vdC4KLXRlbXBsYXRlIDxjbGFzcyBULCBib29sIG5vcm1hbGl6ZWQ+
IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyIHsgfTsKLQotdGVtcGxhdGUgPGNsYXNz
IFQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyPFQsIHRydWU+ICA6IE5vcm1hbGl6
ZWREZWZhdWx0VmFsdWVzPFQ+IHsgfTsKLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgRGVmYXVs
dFZlcnRleFZhbHVlc1N0YWdlMjxULCBmYWxzZT4gOiBTaW1wbGVEZWZhdWx0VmFsdWVzPFQ+IHsg
fTsKLQotLy8gV29yayBvdXQgdGhlIGRlZmF1bHQgdmFsdWUgcnVsZSBmb3IgYSBEM0QgdHlwZSAo
ZXhwcmVzc2VkIGFzIHRoZSBDIHR5cGUpIGFuZAotdGVtcGxhdGUgPGNsYXNzIFQsIGJvb2wgbm9y
bWFsaXplZD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXMgOiBEZWZhdWx0VmVydGV4VmFsdWVz
U3RhZ2UyPFQsIG5vcm1hbGl6ZWQ+IHsgfTsKLXRlbXBsYXRlIDxib29sIG5vcm1hbGl6ZWQ+IHN0
cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzPGZsb2F0LCBub3JtYWxpemVkPiA6IFNpbXBsZURlZmF1
bHRWYWx1ZXM8ZmxvYXQ+IHsgfTsKLQotLy8gUG9saWN5IHJ1bGVzIGZvciB1c2Ugd2l0aCBDb252
ZXJ0ZXIsIHRvIGNob29zZSB3aGV0aGVyIHRvIHVzZSB0aGUgcHJlZmVycmVkIG9yIGZhbGxiYWNr
IGNvbnZlcnNpb24uCi0vLyBUaGUgZmFsbGJhY2sgY29udmVyc2lvbiBwcm9kdWNlcyBhbiBvdXRw
dXQgdGhhdCBhbGwgRDNEOSBkZXZpY2VzIG11c3Qgc3VwcG9ydC4KLXRlbXBsYXRlIDxjbGFzcyBU
PiBzdHJ1Y3QgVXNlUHJlZmVycmVkIHsgZW51bSB7IHR5cGUgPSBUOjpwcmVmZXJyZWQgfTsgfTsK
LXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgVXNlRmFsbGJhY2sgeyBlbnVtIHsgdHlwZSA9IFQ6
OmZhbGxiYWNrIH07IH07Ci0KLS8vIENvbnZlcnRlciB0aWVzIGl0IGFsbCB0b2dldGhlci4gR2l2
ZW4gYW4gT3BlbkdMIHR5cGUvbm9ybS9zaXplIGFuZCBjaG9pY2Ugb2YgcHJlZmVycmVkL2ZhbGxi
YWNrIGNvbnZlcnNpb24sCi0vLyBpdCBwcm92aWRlcyBhbGwgdGhlIG1lbWJlcnMgb2YgdGhlIGFw
cHJvcHJpYXRlIFZlcnRleERhdGFDb252ZXJ0ZXIsIHRoZSBEM0RDQVBTOTo6RGVjbFR5cGVzIGZs
YWcgaW4gY2FwIGZsYWcKLS8vIGFuZCB0aGUgRDNEREVDTFRZUEUgbWVtYmVyIG5lZWRlZCBmb3Ig
dGhlIHZlcnRleCBkZWNsYXJhdGlvbiBpbiBkZWNsZmxhZy4KLXRlbXBsYXRlIDxHTGVudW0gZnJv
bVR5cGUsIGJvb2wgbm9ybWFsaXplZCwgaW50IHNpemUsIHRlbXBsYXRlIDxjbGFzcyBUPiBjbGFz
cyBQcmVmZXJlbmNlUnVsZT4KLXN0cnVjdCBDb252ZXJ0ZXIKLSAgICA6IFZlcnRleERhdGFDb252
ZXJ0ZXI8dHlwZW5hbWUgR0xUb0NUeXBlPGZyb21UeXBlPjo6dHlwZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgV2lkZW5SdWxlPFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBlTWFwcGluZzxm
cm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6dHlwZSwgc2l6ZT4sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIENvbnZlcnNpb25SdWxlPGZyb21UeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBub3JtYWxpemVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQcmVmZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUs
IG5vcm1hbGl6ZWQ+ID46OnR5cGU+LAotICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0
VmVydGV4VmFsdWVzPHR5cGVuYW1lIEQzRFRvQ1R5cGU8UHJlZmVyZW5jZVJ1bGU8IFZlcnRleFR5
cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBlPjo6dHlwZSwgbm9ybWFsaXpl
ZCA+ID4KLXsKLXByaXZhdGU6Ci0gICAgZW51bSB7IGQzZHR5cGUgPSBQcmVmZXJlbmNlUnVsZTwg
VmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6ZWQ+ID46OnR5cGUgfTsKLSAgICBl
bnVtIHsgZDNkc2l6ZSA9IFdpZGVuUnVsZTxkM2R0eXBlLCBzaXplPjo6ZmluYWxXaWR0aCB9Owot
Ci1wdWJsaWM6Ci0gICAgZW51bSB7IGNhcGZsYWcgPSBWZXJ0ZXhUeXBlRmxhZ3M8ZDNkdHlwZSwg
ZDNkc2l6ZT46OmNhcGZsYWcgfTsKLSAgICBlbnVtIHsgZGVjbGZsYWcgPSBWZXJ0ZXhUeXBlRmxh
Z3M8ZDNkdHlwZSwgZDNkc2l6ZT46OmRlY2xmbGFnIH07Ci19OwotCi0vLyBJbml0aWFsaXplIGEg
VHJhbnNsYXRpb25JbmZvCi0jZGVmaW5lIFRSQU5TTEFUSU9OKHR5cGUsIG5vcm0sIHNpemUsIHBy
ZWZlcnJlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBw
cmVmZXJyZWQ+OjppZGVudGl0eSwgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
IENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQ+OjpmaW5hbFNpemUsICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXpl
LCBwcmVmZXJyZWQ+Ojpjb252ZXJ0QXJyYXksICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgIHN0YXRpY19jYXN0PEQzRERFQ0xUWVBFPihDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwg
cHJlZmVycmVkPjo6ZGVjbGZsYWcpICBcCi0gICAgfQotCi0jZGVmaW5lIFRSQU5TTEFUSU9OX0ZP
Ul9UWVBFX05PUk1fU0laRSh0eXBlLCBub3JtLCBzaXplKSAgICBcCi0gICAgeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIENv
bnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBVc2VQcmVmZXJyZWQ+OjpjYXBmbGFnLCBcCi0gICAg
ICAgIFRSQU5TTEFUSU9OKHR5cGUsIG5vcm0sIHNpemUsIFVzZVByZWZlcnJlZCksICAgICAgICBc
Ci0gICAgICAgIFRSQU5TTEFUSU9OKHR5cGUsIG5vcm0sIHNpemUsIFVzZUZhbGxiYWNrKSAgICAg
ICAgICBcCi0gICAgfQotCi0jZGVmaW5lIFRSQU5TTEFUSU9OU19GT1JfVFlQRSh0eXBlKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHsgVFJBTlNMQVRJT05fRk9S
X1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAxKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9S
TV9TSVpFKHR5cGUsIGZhbHNlLCAyKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5
cGUsIGZhbHNlLCAzKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNl
LCA0KSB9LCBcCi0gICAgICAgIHsgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUs
IHRydWUsIDEpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgdHJ1ZSwgMiks
IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCB0cnVlLCAzKSwgVFJBTlNMQVRJ
T05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRydWUsIDQpIH0sICAgICBcCi0gICAgfQotCi0j
ZGVmaW5lIFRSQU5TTEFUSU9OU19GT1JfVFlQRV9OT19OT1JNKHR5cGUpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgIHsgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5
cGUsIGZhbHNlLCAxKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNl
LCAyKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAzKSwgVFJB
TlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCA0KSB9LCBcCi0gICAgICAg
IHsgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAxKSwgVFJBTlNM
QVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAyKSwgVFJBTlNMQVRJT05fRk9S
X1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAzKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9S
TV9TSVpFKHR5cGUsIGZhbHNlLCA0KSB9LCBcCi0gICAgfQotCi1jb25zdCBWZXJ0ZXhCdWZmZXI5
OjpUcmFuc2xhdGlvbkRlc2NyaXB0aW9uIFZlcnRleEJ1ZmZlcjk6Om1Qb3NzaWJsZVRyYW5zbGF0
aW9uc1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFU11bMl1bNF0gPSAvLyBbR0wgdHlwZXMgYXMg
ZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXplZF1bc2l6ZS0xXQotewotICAgIFRS
QU5TTEFUSU9OU19GT1JfVFlQRShHTF9CWVRFKSwKLSAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUo
R0xfVU5TSUdORURfQllURSksCi0gICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKEdMX1NIT1JUKSwK
LSAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xfVU5TSUdORURfU0hPUlQpLAotICAgIFRSQU5T
TEFUSU9OU19GT1JfVFlQRV9OT19OT1JNKEdMX0ZJWEVEKSwKLSAgICBUUkFOU0xBVElPTlNfRk9S
X1RZUEVfTk9fTk9STShHTF9GTE9BVCkKLX07Ci0KLXZvaWQgVmVydGV4QnVmZmVyOTo6aW5pdGlh
bGl6ZVRyYW5zbGF0aW9ucyhEV09SRCBkZWNsVHlwZXMpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFUzsgaSsrKQotICAgIHsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCAyOyBqKyspCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGsgPSAwOyBrIDwgNDsgaysrKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGlmIChtUG9zc2libGVUcmFuc2xhdGlvbnNbaV1bal1ba10u
Y2Fwc0ZsYWcgPT0gMCB8fCAoZGVjbFR5cGVzICYgbVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pd
W2tdLmNhcHNGbGFnKSAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgbUZvcm1hdENvbnZlcnRlcnNbaV1bal1ba10gPSBtUG9zc2libGVUcmFuc2xhdGlvbnNbaV1b
al1ba10ucHJlZmVycmVkQ29udmVyc2lvbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbUZvcm1h
dENvbnZlcnRlcnNbaV1bal1ba10gPSBtUG9zc2libGVUcmFuc2xhdGlvbnNbaV1bal1ba10uZmFs
bGJhY2tDb252ZXJzaW9uOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLX0KLQotdW5zaWduZWQgaW50IFZlcnRleEJ1ZmZlcjk6OnR5cGVJbmRleChH
TGVudW0gdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9C
WVRFOiByZXR1cm4gMDsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURTogcmV0dXJuIDE7Ci0g
ICAgICBjYXNlIEdMX1NIT1JUOiByZXR1cm4gMjsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hP
UlQ6IHJldHVybiAzOwotICAgICAgY2FzZSBHTF9GSVhFRDogcmV0dXJuIDQ7Ci0gICAgICBjYXNl
IEdMX0ZMT0FUOiByZXR1cm4gNTsKLQotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgcmV0
dXJuIDU7Ci0gICAgfQotfQotCi1jb25zdCBWZXJ0ZXhCdWZmZXI5OjpGb3JtYXRDb252ZXJ0ZXIg
JlZlcnRleEJ1ZmZlcjk6OmZvcm1hdENvbnZlcnRlcihjb25zdCBnbDo6VmVydGV4QXR0cmlidXRl
ICZhdHRyaWJ1dGUpCi17Ci0gICAgcmV0dXJuIG1Gb3JtYXRDb252ZXJ0ZXJzW3R5cGVJbmRleChh
dHRyaWJ1dGUubVR5cGUpXVthdHRyaWJ1dGUubU5vcm1hbGl6ZWRdW2F0dHJpYnV0ZS5tU2l6ZSAt
IDFdOwotfQotCi1ib29sIFZlcnRleEJ1ZmZlcjk6OnNwYWNlUmVxdWlyZWQoY29uc3QgZ2w6OlZl
cnRleEF0dHJpYnV0ZSAmYXR0cmliLCBzdGQ6OnNpemVfdCBjb3VudCwgR0xzaXplaSBpbnN0YW5j
ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRT
cGFjZVJlcXVpcmVkKQotewotICAgIHVuc2lnbmVkIGludCBlbGVtZW50U2l6ZSA9IGZvcm1hdENv
bnZlcnRlcihhdHRyaWIpLm91dHB1dEVsZW1lbnRTaXplOwotCi0gICAgaWYgKGF0dHJpYi5tQXJy
YXlFbmFibGVkKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgaW50IGVsZW1lbnRDb3VudCA9IDA7
Ci0gICAgICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBhdHRyaWIubURpdmlzb3IgPT0gMCkKLSAg
ICAgICAgewotICAgICAgICAgICAgZWxlbWVudENvdW50ID0gY291bnQ7Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgaW50PihpbnN0YW5jZXMpIDwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+Ojpt
YXgoKSAtIChhdHRyaWIubURpdmlzb3IgLSAxKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAvLyBSb3VuZCB1cAotICAgICAgICAgICAgICAgIGVsZW1lbnRDb3VudCA9IChzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBpbnQ+KGluc3RhbmNlcykgKyAoYXR0cmliLm1EaXZpc29yIC0gMSkpIC8g
YXR0cmliLm1EaXZpc29yOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGVsZW1lbnRDb3VudCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGludD4oaW5zdGFuY2VzKSAvIGF0dHJpYi5tRGl2aXNvcjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChlbGVtZW50U2l6ZSA8PSBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkIGludD46Om1heCgpIC8gZWxlbWVudENvdW50KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAob3V0U3BhY2VSZXF1aXJlZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAqb3V0U3BhY2VSZXF1aXJlZCA9IGVsZW1lbnRTaXplICogZWxlbWVudENvdW50OwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGVsZW1lbnRTaXpl
ID0gNDsKLSAgICAgICAgaWYgKG91dFNwYWNlUmVxdWlyZWQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgICpvdXRTcGFjZVJlcXVpcmVkID0gZWxlbWVudFNpemUgKiA0OwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXI5LmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlcjku
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY4ODExN2JkYTI1MGVjOTExNzA2N2I4
YTY4YTg0NGQ2NDBlMzBiMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1Zl
cnRleEJ1ZmZlcjkuaAorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCi0KLS8vIFZlcnRleEJ1ZmZlcjkuaDogRGVmaW5lcyB0aGUgRDNEOSBWZXJ0ZXhCdWZm
ZXIgaW1wbGVtZW50YXRpb24uCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX1ZFUlRFWEJV
RkZFUjlfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1ZFUlRFWEJVRkZFUjlfSF8KLQot
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXIuaCIKLQotbmFtZXNwYWNl
IHJ4Ci17Ci1jbGFzcyBSZW5kZXJlcjk7Ci0KLWNsYXNzIFZlcnRleEJ1ZmZlcjkgOiBwdWJsaWMg
VmVydGV4QnVmZmVyCi17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBWZXJ0ZXhCdWZmZXI5KHJ4
OjpSZW5kZXJlcjkgKmNvbnN0IHJlbmRlcmVyKTsKLSAgICB2aXJ0dWFsIH5WZXJ0ZXhCdWZmZXI5
KCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgc2l6ZSwgYm9v
bCBkeW5hbWljVXNhZ2UpOwotCi0gICAgc3RhdGljIFZlcnRleEJ1ZmZlcjkgKm1ha2VWZXJ0ZXhC
dWZmZXI5KFZlcnRleEJ1ZmZlciAqdmVydGV4QnVmZmVyKTsKLQotICAgIHZpcnR1YWwgYm9vbCBz
dG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBH
TGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKLSAgICB2
aXJ0dWFsIGJvb2wgc3RvcmVSYXdEYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGludCBz
aXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKLQotICAgIHZpcnR1YWwgYm9vbCBnZXRTcGFjZVJl
cXVpcmVkKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xzaXplaSBjb3VudCwg
R0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCAqb3V0U3BhY2VSZXF1aXJlZCkgY29uc3Q7
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNDb252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhB
dHRyaWJ1dGUgJmF0dHJpYikgY29uc3Q7Ci0KLSAgICB1bnNpZ25lZCBpbnQgZ2V0VmVydGV4U2l6
ZShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0OwotICAgIEQzRERFQ0xU
WVBFIGdldERlY2xUeXBlKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3Q7
Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRCdWZmZXJTaXplKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBib29sIHNldEJ1ZmZlclNpemUodW5zaWduZWQgaW50IHNpemUpOwotICAgIHZpcnR1
YWwgYm9vbCBkaXNjYXJkKCk7Ci0KLSAgICBJRGlyZWN0M0RWZXJ0ZXhCdWZmZXI5ICpnZXRCdWZm
ZXIoKSBjb25zdDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihW
ZXJ0ZXhCdWZmZXI5KTsKLQotICAgIHJ4OjpSZW5kZXJlcjkgKmNvbnN0IG1SZW5kZXJlcjsKLQot
ICAgIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKm1WZXJ0ZXhCdWZmZXI7Ci0gICAgdW5zaWduZWQg
aW50IG1CdWZmZXJTaXplOwotICAgIGJvb2wgbUR5bmFtaWNVc2FnZTsKLQotICAgIC8vIEF0dHJp
YnV0ZSBmb3JtYXQgY29udmVyc2lvbgotICAgIGVudW0geyBOVU1fR0xfVkVSVEVYX0FUVFJJQl9U
WVBFUyA9IDYgfTsKLQotICAgIHN0cnVjdCBGb3JtYXRDb252ZXJ0ZXIKLSAgICB7Ci0gICAgICAg
IGJvb2wgaWRlbnRpdHk7Ci0gICAgICAgIHN0ZDo6c2l6ZV90IG91dHB1dEVsZW1lbnRTaXplOwot
ICAgICAgICB2b2lkICgqY29udmVydEFycmF5KShjb25zdCB2b2lkICppbiwgc3RkOjpzaXplX3Qg
c3RyaWRlLCBzdGQ6OnNpemVfdCBuLCB2b2lkICpvdXQpOwotICAgICAgICBEM0RERUNMVFlQRSBk
M2REZWNsVHlwZTsKLSAgICB9OwotCi0gICAgc3RhdGljIGJvb2wgbVRyYW5zbGF0aW9uc0luaXRp
YWxpemVkOwotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVUcmFuc2xhdGlvbnMoRFdPUkQgZGVj
bFR5cGVzKTsKLQotICAgIC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRleCgp
XVtub3JtYWxpemVkXVtzaXplIC0gMV0KLSAgICBzdGF0aWMgRm9ybWF0Q29udmVydGVyIG1Gb3Jt
YXRDb252ZXJ0ZXJzW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsKLQotICAgIHN0
cnVjdCBUcmFuc2xhdGlvbkRlc2NyaXB0aW9uCi0gICAgewotICAgICAgICBEV09SRCBjYXBzRmxh
ZzsKLSAgICAgICAgRm9ybWF0Q29udmVydGVyIHByZWZlcnJlZENvbnZlcnNpb247Ci0gICAgICAg
IEZvcm1hdENvbnZlcnRlciBmYWxsYmFja0NvbnZlcnNpb247Ci0gICAgfTsKLQotICAgIC8vIFRo
aXMgdGFibGUgaXMgdXNlZCB0byBnZW5lcmF0ZSBtRm9ybWF0Q29udmVydGVycy4KLSAgICAvLyBb
R0wgdHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXplZF1bc2l6ZSAt
IDFdCi0gICAgc3RhdGljIGNvbnN0IFRyYW5zbGF0aW9uRGVzY3JpcHRpb24gbVBvc3NpYmxlVHJh
bnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsKLQotICAgIHN0YXRp
YyB1bnNpZ25lZCBpbnQgdHlwZUluZGV4KEdMZW51bSB0eXBlKTsKLSAgICBzdGF0aWMgY29uc3Qg
Rm9ybWF0Q29udmVydGVyICZmb3JtYXRDb252ZXJ0ZXIoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0
ZSAmYXR0cmlidXRlKTsKLQotICAgIHN0YXRpYyBib29sIHNwYWNlUmVxdWlyZWQoY29uc3QgZ2w6
OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBzdGQ6OnNpemVfdCBjb3VudCwgR0xzaXplaSBpbnN0
YW5jZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm91dFNw
YWNlUmVxdWlyZWQpOwotfTsKLQotfQotCi0jZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1ZF
UlRFWEJVRkZFUjlfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGVjbGFyYXRpb25DYWNoZS5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERlY2xhcmF0aW9uQ2Fj
aGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjgzYTY0NzZlYmNjNmJiOGQ2
MTU1ZGU1NmJiMjYwMzYzMWQ5ZGY3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvVmVydGV4RGVjbGFyYXRpb25DYWNoZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMTcgKzAs
MCBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVmVydGV4
RGVjbGFyYXRpb25DYWNoZS5jcHA6IEltcGxlbWVudHMgYSBoZWxwZXIgY2xhc3MgdG8gY29uc3Ry
dWN0IGFuZCBjYWNoZSB2ZXJ0ZXggZGVjbGFyYXRpb25zLgotCi0jaW5jbHVkZSAibGliR0xFU3Yy
L1Byb2dyYW1CaW5hcnkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXI5LmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL1ZlcnRleERlY2xhcmF0aW9uQ2FjaGUuaCIKLQotbmFtZXNwYWNlIHJ4Ci17
Ci0KLVZlcnRleERlY2xhcmF0aW9uQ2FjaGU6OlZlcnRleERlY2xhcmF0aW9uQ2FjaGUoKSA6IG1N
YXhMcnUoMCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9WRVJURVhfREVDTF9DQUNI
RV9FTlRSSUVTOyBpKyspCi0gICAgewotICAgICAgICBtVmVydGV4RGVjbENhY2hlW2ldLnZlcnRl
eERlY2xhcmF0aW9uID0gTlVMTDsKLSAgICAgICAgbVZlcnRleERlY2xDYWNoZVtpXS5scnVDb3Vu
dCA9IDA7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9B
VFRSSUJTOyBpKyspCi0gICAgewotICAgICAgICBtQXBwbGllZFZCc1tpXS5zZXJpYWwgPSAwOwot
ICAgIH0KLQotICAgIG1MYXN0U2V0VkRlY2wgPSBOVUxMOwotICAgIG1JbnN0YW5jaW5nRW5hYmxl
ZCA9IHRydWU7Ci19Ci0KLVZlcnRleERlY2xhcmF0aW9uQ2FjaGU6On5WZXJ0ZXhEZWNsYXJhdGlv
bkNhY2hlKCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9WRVJURVhfREVDTF9DQUNI
RV9FTlRSSUVTOyBpKyspCi0gICAgewotICAgICAgICBpZiAobVZlcnRleERlY2xDYWNoZVtpXS52
ZXJ0ZXhEZWNsYXJhdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgbVZlcnRleERlY2xDYWNo
ZVtpXS52ZXJ0ZXhEZWNsYXJhdGlvbi0+UmVsZWFzZSgpOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci1HTGVudW0gVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6YXBwbHlEZWNsYXJhdGlvbihJRGlyZWN0
M0REZXZpY2U5ICpkZXZpY2UsIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0cmlidXRlc1tdLCBnbDo6
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgR0xzaXplaSBpbnN0YW5jZXMsIEdMc2l6ZWkg
KnJlcGVhdERyYXcpCi17Ci0gICAgKnJlcGVhdERyYXcgPSAxOwotCi0gICAgaW50IGluZGV4ZWRB
dHRyaWJ1dGUgPSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOwotICAgIGludCBpbnN0YW5jZWRBdHRy
aWJ1dGUgPSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOwotCi0gICAgaWYgKGluc3RhbmNlcyA+IDAp
Ci0gICAgewotICAgICAgICAvLyBGaW5kIGFuIGluZGV4ZWQgYXR0cmlidXRlIHRvIGJlIG1hcHBl
ZCB0byBEM0Qgc3RyZWFtIDAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZF
UlRFWF9BVFRSSUJTOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVz
W2ldLmFjdGl2ZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoaW5kZXhlZEF0
dHJpYnV0ZSA9PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTICYmIGF0dHJpYnV0ZXNbaV0uZGl2aXNv
ciA9PSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW5kZXhlZEF0
dHJpYnV0ZSA9IGk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYg
KGluc3RhbmNlZEF0dHJpYnV0ZSA9PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTICYmIGF0dHJpYnV0
ZXNbaV0uZGl2aXNvciAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgaW5zdGFuY2VkQXR0cmlidXRlID0gaTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgaWYgKGluZGV4ZWRBdHRyaWJ1dGUgIT0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUyAmJiBp
bnN0YW5jZWRBdHRyaWJ1dGUgIT0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7ICAgLy8gRm91bmQgYm90aCBhbiBpbmRleGVkIGFuZCBpbnN0YW5jZWQg
YXR0cmlidXRlCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaW5kZXhl
ZEF0dHJpYnV0ZSA9PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBEM0RWRVJURVhFTEVNRU5UOSBlbGVtZW50c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTICsgMV07
Ci0gICAgRDNEVkVSVEVYRUxFTUVOVDkgKmVsZW1lbnQgPSAmZWxlbWVudHNbMF07Ci0KLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICB7Ci0g
ICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmFjdGl2ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
Ly8gRGlyZWN0bHkgYmluZGluZyB0aGUgc3RvcmFnZSBidWZmZXIgaXMgbm90IHN1cHBvcnRlZCBm
b3IgZDNkOQotICAgICAgICAgICAgQVNTRVJUKGF0dHJpYnV0ZXNbaV0uc3RvcmFnZSA9PSBOVUxM
KTsKLQotICAgICAgICAgICAgaW50IHN0cmVhbSA9IGk7Ci0KLSAgICAgICAgICAgIGlmIChpbnN0
YW5jZXMgPiAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIER1ZSB0byBhIGJ1
ZyBvbiBBVEkgY2FyZHMgd2UgY2FuJ3QgZW5hYmxlIGluc3RhbmNpbmcgd2hlbiBub25lIG9mIHRo
ZSBhdHRyaWJ1dGVzIGFyZSBpbnN0YW5jZWQuCi0gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNl
ZEF0dHJpYnV0ZSA9PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgKnJlcGVhdERyYXcgPSBpbnN0YW5jZXM7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChpID09IGluZGV4ZWRBdHRyaWJ1dGUpCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9IDA7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaSA9PSAwKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSBpbmRleGVkQXR0
cmlidXRlOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgVUlO
VCBmcmVxdWVuY3kgPSAxOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGF0dHJpYnV0ZXNbaV0uZGl2aXNvciA9PSAwKQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcmVxdWVuY3kgPSBEM0RTVFJFQU1TT1VSQ0VfSU5E
RVhFRERBVEEgfCBpbnN0YW5jZXM7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBmcmVxdWVuY3kgPSBEM0RTVFJFQU1TT1VSQ0VfSU5TVEFOQ0VEQVRBIHwgYXR0cmlidXRl
c1tpXS5kaXZpc29yOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoc3RyZWFt
LCBmcmVxdWVuY3kpOwotICAgICAgICAgICAgICAgICAgICBtSW5zdGFuY2luZ0VuYWJsZWQgPSB0
cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgVmVy
dGV4QnVmZmVyOSAqdmVydGV4QnVmZmVyID0gVmVydGV4QnVmZmVyOTo6bWFrZVZlcnRleEJ1ZmZl
cjkoYXR0cmlidXRlc1tpXS52ZXJ0ZXhCdWZmZXIpOwotCi0gICAgICAgICAgICBpZiAobUFwcGxp
ZWRWQnNbc3RyZWFtXS5zZXJpYWwgIT0gYXR0cmlidXRlc1tpXS5zZXJpYWwgfHwKLSAgICAgICAg
ICAgICAgICBtQXBwbGllZFZCc1tzdHJlYW1dLnN0cmlkZSAhPSBhdHRyaWJ1dGVzW2ldLnN0cmlk
ZSB8fAotICAgICAgICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVhbV0ub2Zmc2V0ICE9IGF0dHJp
YnV0ZXNbaV0ub2Zmc2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRldmljZS0+
U2V0U3RyZWFtU291cmNlKHN0cmVhbSwgdmVydGV4QnVmZmVyLT5nZXRCdWZmZXIoKSwgYXR0cmli
dXRlc1tpXS5vZmZzZXQsIGF0dHJpYnV0ZXNbaV0uc3RyaWRlKTsKLSAgICAgICAgICAgICAgICBt
QXBwbGllZFZCc1tzdHJlYW1dLnNlcmlhbCA9IGF0dHJpYnV0ZXNbaV0uc2VyaWFsOwotICAgICAg
ICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVhbV0uc3RyaWRlID0gYXR0cmlidXRlc1tpXS5zdHJp
ZGU7Ci0gICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5vZmZzZXQgPSBhdHRyaWJ1
dGVzW2ldLm9mZnNldDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZWxlbWVudC0+U3Ry
ZWFtID0gc3RyZWFtOwotICAgICAgICAgICAgZWxlbWVudC0+T2Zmc2V0ID0gMDsKLSAgICAgICAg
ICAgIGVsZW1lbnQtPlR5cGUgPSBhdHRyaWJ1dGVzW2ldLmF0dHJpYnV0ZS0+bUFycmF5RW5hYmxl
ZCA/IHZlcnRleEJ1ZmZlci0+Z2V0RGVjbFR5cGUoKmF0dHJpYnV0ZXNbaV0uYXR0cmlidXRlKSA6
IEQzRERFQ0xUWVBFX0ZMT0FUNDsKLSAgICAgICAgICAgIGVsZW1lbnQtPk1ldGhvZCA9IEQzRERF
Q0xNRVRIT0RfREVGQVVMVDsKLSAgICAgICAgICAgIGVsZW1lbnQtPlVzYWdlID0gRDNEREVDTFVT
QUdFX1RFWENPT1JEOwotICAgICAgICAgICAgZWxlbWVudC0+VXNhZ2VJbmRleCA9IHByb2dyYW1C
aW5hcnktPmdldFNlbWFudGljSW5kZXgoaSk7Ci0gICAgICAgICAgICBlbGVtZW50Kys7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoaW5zdGFuY2VzID09IDAgfHwgaW5zdGFuY2VkQXR0cmli
dXRlID09IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgewotICAgICAgICBpZiAobUluc3Rh
bmNpbmdFbmFibGVkKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoaSwgMSk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIG1JbnN0YW5jaW5nRW5hYmxlZCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgc3RhdGljIGNvbnN0IEQzRFZFUlRFWEVMRU1FTlQ5IGVuZCA9IEQzRERFQ0xfRU5E
KCk7Ci0gICAgKihlbGVtZW50KyspID0gZW5kOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBO
VU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUzsgaSsrKQotICAgIHsKLSAgICAgICAgVmVydGV4
RGVjbENhY2hlRW50cnkgKmVudHJ5ID0gJm1WZXJ0ZXhEZWNsQ2FjaGVbaV07Ci0gICAgICAgIGlm
IChtZW1jbXAoZW50cnktPmNhY2hlZEVsZW1lbnRzLCBlbGVtZW50cywgKGVsZW1lbnQgLSBlbGVt
ZW50cykgKiBzaXplb2YoRDNEVkVSVEVYRUxFTUVOVDkpKSA9PSAwICYmIGVudHJ5LT52ZXJ0ZXhE
ZWNsYXJhdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgZW50cnktPmxydUNvdW50ID0gKytt
TWF4THJ1OwotICAgICAgICAgICAgaWYoZW50cnktPnZlcnRleERlY2xhcmF0aW9uICE9IG1MYXN0
U2V0VkRlY2wpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRWZXJ0
ZXhEZWNsYXJhdGlvbihlbnRyeS0+dmVydGV4RGVjbGFyYXRpb24pOwotICAgICAgICAgICAgICAg
IG1MYXN0U2V0VkRlY2wgPSBlbnRyeS0+dmVydGV4RGVjbGFyYXRpb247Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIHJldHVybiBHTF9OT19FUlJPUjsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIFZlcnRleERlY2xDYWNoZUVudHJ5ICpsYXN0Q2FjaGUgPSBtVmVydGV4RGVjbENhY2hlOwot
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUzsg
aSsrKQotICAgIHsKLSAgICAgICAgaWYgKG1WZXJ0ZXhEZWNsQ2FjaGVbaV0ubHJ1Q291bnQgPCBs
YXN0Q2FjaGUtPmxydUNvdW50KQotICAgICAgICB7Ci0gICAgICAgICAgICBsYXN0Q2FjaGUgPSAm
bVZlcnRleERlY2xDYWNoZVtpXTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChsYXN0Q2Fj
aGUtPnZlcnRleERlY2xhcmF0aW9uICE9IE5VTEwpCi0gICAgewotICAgICAgICBsYXN0Q2FjaGUt
PnZlcnRleERlY2xhcmF0aW9uLT5SZWxlYXNlKCk7Ci0gICAgICAgIGxhc3RDYWNoZS0+dmVydGV4
RGVjbGFyYXRpb24gPSBOVUxMOwotICAgICAgICAvLyBtTGFzdFNldFZEZWNsIGlzIHNldCB0byB0
aGUgcmVwbGFjZW1lbnQsIHNvIHdlIGRvbid0IGhhdmUgdG8gd29ycnkKLSAgICAgICAgLy8gYWJv
dXQgaXQuCi0gICAgfQotCi0gICAgbWVtY3B5KGxhc3RDYWNoZS0+Y2FjaGVkRWxlbWVudHMsIGVs
ZW1lbnRzLCAoZWxlbWVudCAtIGVsZW1lbnRzKSAqIHNpemVvZihEM0RWRVJURVhFTEVNRU5UOSkp
OwotICAgIGRldmljZS0+Q3JlYXRlVmVydGV4RGVjbGFyYXRpb24oZWxlbWVudHMsICZsYXN0Q2Fj
aGUtPnZlcnRleERlY2xhcmF0aW9uKTsKLSAgICBkZXZpY2UtPlNldFZlcnRleERlY2xhcmF0aW9u
KGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24pOwotICAgIG1MYXN0U2V0VkRlY2wgPSBsYXN0
Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uOwotICAgIGxhc3RDYWNoZS0+bHJ1Q291bnQgPSArK21N
YXhMcnU7Ci0KLSAgICByZXR1cm4gR0xfTk9fRVJST1I7Ci19Ci0KLXZvaWQgVmVydGV4RGVjbGFy
YXRpb25DYWNoZTo6bWFya1N0YXRlRGlydHkoKQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Z2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAgICAgICAgbUFwcGxpZWRWQnNb
aV0uc2VyaWFsID0gMDsKLSAgICB9Ci0KLSAgICBtTGFzdFNldFZEZWNsID0gTlVMTDsKLSAgICBt
SW5zdGFuY2luZ0VuYWJsZWQgPSB0cnVlOyAgIC8vIEZvcmNlcyBpdCB0byBiZSBkaXNhYmxlZCB3
aGVuIG5vdCB1c2VkCi19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGVjbGFyYXRpb25DYWNoZS5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhEZWNsYXJhdGlv
bkNhY2hlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmYzAyNGE5YmFiNDhiMTlj
MDZhYjk3NTcwZThiNWQ1NDg3MTMxODcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCww
IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotLy8KLQotLy8gVmVydGV4RGVjbGFyYXRpb25DYWNoZS5oOiBEZWZpbmVz
IGEgaGVscGVyIGNsYXNzIHRvIGNvbnN0cnVjdCBhbmQgY2FjaGUgdmVydGV4IGRlY2xhcmF0aW9u
cy4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfVkVSVEVYREVDTEFSQVRJT05DQUNIRV9I
XwotI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfVkVSVEVYREVDTEFSQVRJT05DQUNIRV9IXwot
Ci0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERhdGFNYW5hZ2VyLmgiCi0KLW5h
bWVzcGFjZSBnbAotewotY2xhc3MgVmVydGV4RGF0YU1hbmFnZXI7Ci19Ci0KLW5hbWVzcGFjZSBy
eAotewotCi1jbGFzcyBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlCi17Ci0gIHB1YmxpYzoKLSAgICBW
ZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKCk7Ci0gICAgflZlcnRleERlY2xhcmF0aW9uQ2FjaGUoKTsK
LQotICAgIEdMZW51bSBhcHBseURlY2xhcmF0aW9uKElEaXJlY3QzRERldmljZTkgKmRldmljZSwg
VHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW10sIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5LCBHTHNpemVpIGluc3RhbmNlcywgR0xzaXplaSAqcmVwZWF0RHJhdyk7Ci0KLSAg
ICB2b2lkIG1hcmtTdGF0ZURpcnR5KCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBVSU5UIG1NYXhMcnU7
Ci0KLSAgICBlbnVtIHsgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVMgPSAzMiB9OwotCi0g
ICAgc3RydWN0IFZCRGF0YQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgaW50IHNlcmlhbDsKLSAg
ICAgICAgdW5zaWduZWQgaW50IHN0cmlkZTsKLSAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldDsK
LSAgICB9OwotCi0gICAgVkJEYXRhIG1BcHBsaWVkVkJzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNd
OwotICAgIElEaXJlY3QzRFZlcnRleERlY2xhcmF0aW9uOSAqbUxhc3RTZXRWRGVjbDsKLSAgICBi
b29sIG1JbnN0YW5jaW5nRW5hYmxlZDsKLQotICAgIHN0cnVjdCBWZXJ0ZXhEZWNsQ2FjaGVFbnRy
eQotICAgIHsKLSAgICAgICAgRDNEVkVSVEVYRUxFTUVOVDkgY2FjaGVkRWxlbWVudHNbZ2w6Ok1B
WF9WRVJURVhfQVRUUklCUyArIDFdOwotICAgICAgICBVSU5UIGxydUNvdW50OwotICAgICAgICBJ
RGlyZWN0M0RWZXJ0ZXhEZWNsYXJhdGlvbjkgKnZlcnRleERlY2xhcmF0aW9uOwotICAgIH0gbVZl
cnRleERlY2xDYWNoZVtOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFU107Ci19OwotCi19Ci0K
LSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfVkVSVEVYREVDTEFSQVRJT05DQUNIRV9IXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9CdWZmZXJTdG9yYWdlMTEuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9CdWZmZXJTdG9yYWdlMTEuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjMxZDViOGI4ODY4ZWNiOGY4ZTdmNjI2MWQwZTI5MWMwZDUxZmM1YjkKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L0J1ZmZlclN0b3JhZ2UxMS5jcHAKQEAgLTAsMCArMSwzNjYgQEAKKyNpbmNsdWRlICJwcmVjb21w
aWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIEJ1ZmZlclN0b3JhZ2UxMS5jcHAgRGVmaW5lcyB0
aGUgQnVmZmVyU3RvcmFnZTExIGNsYXNzLgorCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL0J1ZmZlclN0b3JhZ2UxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKKworbmFtZXNw
YWNlIHJ4Cit7CisKK0J1ZmZlclN0b3JhZ2UxMTo6QnVmZmVyU3RvcmFnZTExKFJlbmRlcmVyMTEg
KnJlbmRlcmVyKQoreworICAgIG1SZW5kZXJlciA9IHJlbmRlcmVyOworCisgICAgbVN0YWdpbmdC
dWZmZXIgPSBOVUxMOworICAgIG1TdGFnaW5nQnVmZmVyU2l6ZSA9IDA7CisKKyAgICBtU2l6ZSA9
IDA7CisKKyAgICBtUmVzb2x2ZWREYXRhID0gTlVMTDsKKyAgICBtUmVzb2x2ZWREYXRhU2l6ZSA9
IDA7CisgICAgbVJlc29sdmVkRGF0YVZhbGlkID0gZmFsc2U7CisKKyAgICBtUmVhZFVzYWdlQ291
bnQgPSAwOworICAgIG1Xcml0ZVVzYWdlQ291bnQgPSAwOworfQorCitCdWZmZXJTdG9yYWdlMTE6
On5CdWZmZXJTdG9yYWdlMTEoKQoreworICAgIFNhZmVSZWxlYXNlKG1TdGFnaW5nQnVmZmVyKTsK
KworICAgIGlmIChtUmVzb2x2ZWREYXRhKQorICAgIHsKKyAgICAgICAgZnJlZShtUmVzb2x2ZWRE
YXRhKTsKKyAgICAgICAgbVJlc29sdmVkRGF0YSA9IE5VTEw7CisgICAgfQorCisgICAgZm9yIChh
dXRvIGl0ID0gbURpcmVjdEJ1ZmZlcnMuYmVnaW4oKTsgaXQgIT0gbURpcmVjdEJ1ZmZlcnMuZW5k
KCk7IGl0KyspCisgICAgeworICAgICAgICBTYWZlRGVsZXRlKGl0LT5zZWNvbmQpOworICAgIH0K
K30KKworQnVmZmVyU3RvcmFnZTExICpCdWZmZXJTdG9yYWdlMTE6Om1ha2VCdWZmZXJTdG9yYWdl
MTEoQnVmZmVyU3RvcmFnZSAqYnVmZmVyU3RvcmFnZSkKK3sKKyAgICBBU1NFUlQoSEFTX0RZTkFN
SUNfVFlQRShCdWZmZXJTdG9yYWdlMTEqLCBidWZmZXJTdG9yYWdlKSk7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEJ1ZmZlclN0b3JhZ2UxMSo+KGJ1ZmZlclN0b3JhZ2UpOworfQorCit2b2lkICpC
dWZmZXJTdG9yYWdlMTE6OmdldERhdGEoKQoreworICAgIEFTU0VSVChtU3RhZ2luZ0J1ZmZlcik7
CisKKyAgICBpZiAoIW1SZXNvbHZlZERhdGFWYWxpZCkKKyAgICB7CisgICAgICAgIElEM0QxMURl
dmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICAgICAgSUQzRDExRGV2
aWNlQ29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworICAg
ICAgICBIUkVTVUxUIHJlc3VsdDsKKworICAgICAgICBpZiAoIW1SZXNvbHZlZERhdGEgfHwgbVJl
c29sdmVkRGF0YVNpemUgPCBtU3RhZ2luZ0J1ZmZlclNpemUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGZyZWUobVJlc29sdmVkRGF0YSk7CisgICAgICAgICAgICBtUmVzb2x2ZWREYXRhID0gbWFs
bG9jKG1TaXplKTsKKyAgICAgICAgICAgIG1SZXNvbHZlZERhdGFTaXplID0gbVNpemU7CisgICAg
ICAgIH0KKworICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7
CisgICAgICAgIHJlc3VsdCA9IGNvbnRleHQtPk1hcChtU3RhZ2luZ0J1ZmZlciwgMCwgRDNEMTFf
TUFQX1JFQUQsIDAsICZtYXBwZWRSZXNvdXJjZSk7CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZLCAodm9pZCopTlVMTCk7CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHkobVJlc29sdmVk
RGF0YSwgbWFwcGVkUmVzb3VyY2UucERhdGEsIG1TaXplKTsKKworICAgICAgICBjb250ZXh0LT5V
bm1hcChtU3RhZ2luZ0J1ZmZlciwgMCk7CisKKyAgICAgICAgbVJlc29sdmVkRGF0YVZhbGlkID0g
dHJ1ZTsKKyAgICB9CisKKyAgICBtUmVhZFVzYWdlQ291bnQgPSAwOworCisgICAgcmV0dXJuIG1S
ZXNvbHZlZERhdGE7Cit9CisKK3ZvaWQgQnVmZmVyU3RvcmFnZTExOjpzZXREYXRhKGNvbnN0IHZv
aWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworICAg
IElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBJRDNE
MTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7
CisgICAgSFJFU1VMVCByZXN1bHQ7CisKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgcmVxdWlyZWRT
dGFnaW5nQnVmZmVyU2l6ZSA9IHNpemUgKyBvZmZzZXQ7CisgICAgY29uc3QgYm9vbCBjcmVhdGVT
dGFnaW5nQnVmZmVyID0gIW1TdGFnaW5nQnVmZmVyIHx8IG1TdGFnaW5nQnVmZmVyU2l6ZSA8IHJl
cXVpcmVkU3RhZ2luZ0J1ZmZlclNpemU7CisKKyAgICBpZiAoY3JlYXRlU3RhZ2luZ0J1ZmZlcikK
KyAgICB7CisgICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIGJ1ZmZlckRlc2M7CisgICAgICAgIGJ1
ZmZlckRlc2MuQnl0ZVdpZHRoID0gcmVxdWlyZWRTdGFnaW5nQnVmZmVyU2l6ZTsKKyAgICAgICAg
YnVmZmVyRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX1NUQUdJTkc7CisgICAgICAgIGJ1ZmZlckRl
c2MuQmluZEZsYWdzID0gMDsKKyAgICAgICAgYnVmZmVyRGVzYy5DUFVBY2Nlc3NGbGFncyA9IEQz
RDExX0NQVV9BQ0NFU1NfUkVBRCB8IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7CisgICAgICAgIGJ1
ZmZlckRlc2MuTWlzY0ZsYWdzID0gMDsKKyAgICAgICAgYnVmZmVyRGVzYy5TdHJ1Y3R1cmVCeXRl
U3RyaWRlID0gMDsKKworICAgICAgICBIUkVTVUxUIHJlc3VsdDsKKyAgICAgICAgSUQzRDExRGV2
aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworICAgICAgICBJRDNEMTFEZXZp
Y2VDb250ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisgICAg
ICAgIElEM0QxMUJ1ZmZlciAqbmV3U3RhZ2luZ0J1ZmZlcjsKKworICAgICAgICBpZiAoZGF0YSAm
JiBvZmZzZXQgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgRDNEMTFfU1VCUkVTT1VSQ0Vf
REFUQSBpbml0aWFsRGF0YTsKKyAgICAgICAgICAgIGluaXRpYWxEYXRhLnBTeXNNZW0gPSBkYXRh
OworICAgICAgICAgICAgaW5pdGlhbERhdGEuU3lzTWVtUGl0Y2ggPSByZXF1aXJlZFN0YWdpbmdC
dWZmZXJTaXplOworICAgICAgICAgICAgaW5pdGlhbERhdGEuU3lzTWVtU2xpY2VQaXRjaCA9IDA7
CisKKyAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJEZXNj
LCAmaW5pdGlhbERhdGEsICZuZXdTdGFnaW5nQnVmZmVyKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVy
KCZidWZmZXJEZXNjLCBOVUxMLCAmbmV3U3RhZ2luZ0J1ZmZlcik7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TdGFnaW5n
QnVmZmVyU2l6ZSA9IDA7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgICAgICB9CisKKyAgICAgICAgbVN0YWdpbmdCdWZmZXJTaXplID0gcmVxdWly
ZWRTdGFnaW5nQnVmZmVyU2l6ZTsKKworICAgICAgICBpZiAobVN0YWdpbmdCdWZmZXIgJiYgb2Zm
c2V0ID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gSWYgb2Zmc2V0IGlzIGdyZWF0ZXIg
dGhhbiB6ZXJvIGFuZCB0aGUgYnVmZmVyIGlzIG5vbi1udWxsLCBuZWVkIHRvIHByZXNlcnZlIHRo
ZSBkYXRhIGZyb20KKyAgICAgICAgICAgIC8vIHRoZSBvbGQgYnVmZmVyIHVwIHRvIG9mZnNldAor
ICAgICAgICAgICAgRDNEMTFfQk9YIHNyY0JveDsKKyAgICAgICAgICAgIHNyY0JveC5sZWZ0ID0g
MDsKKyAgICAgICAgICAgIHNyY0JveC5yaWdodCA9IHN0ZDo6bWluKG9mZnNldCwgcmVxdWlyZWRT
dGFnaW5nQnVmZmVyU2l6ZSk7CisgICAgICAgICAgICBzcmNCb3gudG9wID0gMDsKKyAgICAgICAg
ICAgIHNyY0JveC5ib3R0b20gPSAxOworICAgICAgICAgICAgc3JjQm94LmZyb250ID0gMDsKKyAg
ICAgICAgICAgIHNyY0JveC5iYWNrID0gMTsKKworICAgICAgICAgICAgY29udGV4dC0+Q29weVN1
YnJlc291cmNlUmVnaW9uKG5ld1N0YWdpbmdCdWZmZXIsIDAsIDAsIDAsIDAsIG1TdGFnaW5nQnVm
ZmVyLCAwLCAmc3JjQm94KTsKKyAgICAgICAgfQorCisgICAgICAgIFNhZmVSZWxlYXNlKG1TdGFn
aW5nQnVmZmVyKTsKKyAgICAgICAgbVN0YWdpbmdCdWZmZXIgPSBuZXdTdGFnaW5nQnVmZmVyOwor
ICAgIH0KKworICAgIGlmIChkYXRhICYmIChvZmZzZXQgIT0gMCB8fCAhY3JlYXRlU3RhZ2luZ0J1
ZmZlcikpCisgICAgeworICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVz
b3VyY2U7CisgICAgICAgIHJlc3VsdCA9IGNvbnRleHQtPk1hcChtU3RhZ2luZ0J1ZmZlciwgMCwg
RDNEMTFfTUFQX1dSSVRFLCAwLCAmbWFwcGVkUmVzb3VyY2UpOworICAgICAgICBpZiAoRkFJTEVE
KHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBjaGFyICpvZmZzZXRC
dWZmZXJQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyICo+KG1hcHBlZFJl
c291cmNlLnBEYXRhKSArIG9mZnNldDsKKyAgICAgICAgbWVtY3B5KG9mZnNldEJ1ZmZlclBvaW50
ZXIsIGRhdGEsIHNpemUpOworCisgICAgICAgIGNvbnRleHQtPlVubWFwKG1TdGFnaW5nQnVmZmVy
LCAwKTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8gaXQgPSBtRGlyZWN0QnVmZmVycy5iZWdpbigp
OyBpdCAhPSBtRGlyZWN0QnVmZmVycy5lbmQoKTsgaXQrKykKKyAgICB7CisgICAgICAgIGl0LT5z
ZWNvbmQtPm1hcmtEaXJ0eSgpOworICAgIH0KKworICAgIG1TaXplID0gc3RkOjptYXgobVNpemUs
IHJlcXVpcmVkU3RhZ2luZ0J1ZmZlclNpemUpOworICAgIG1Xcml0ZVVzYWdlQ291bnQgPSAwOwor
CisgICAgbVJlc29sdmVkRGF0YVZhbGlkID0gZmFsc2U7Cit9CisKK3ZvaWQgQnVmZmVyU3RvcmFn
ZTExOjpjb3B5RGF0YShCdWZmZXJTdG9yYWdlKiBzb3VyY2VTdG9yYWdlLCB1bnNpZ25lZCBpbnQg
c2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNl
T2Zmc2V0LCB1bnNpZ25lZCBpbnQgZGVzdE9mZnNldCkKK3sKKyAgICBCdWZmZXJTdG9yYWdlMTEq
IHNvdXJjZSA9IG1ha2VCdWZmZXJTdG9yYWdlMTEoc291cmNlU3RvcmFnZSk7CisgICAgaWYgKHNv
dXJjZSkKKyAgICB7CisgICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQgPSBtUmVu
ZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKKworICAgICAgICBEM0QxMV9CT1ggc3JjQm94Owor
ICAgICAgICBzcmNCb3gubGVmdCA9IHNvdXJjZU9mZnNldDsKKyAgICAgICAgc3JjQm94LnJpZ2h0
ID0gc291cmNlT2Zmc2V0ICsgc2l6ZTsKKyAgICAgICAgc3JjQm94LnRvcCA9IDA7CisgICAgICAg
IHNyY0JveC5ib3R0b20gPSAxOworICAgICAgICBzcmNCb3guZnJvbnQgPSAwOworICAgICAgICBz
cmNCb3guYmFjayA9IDE7CisKKyAgICAgICAgQVNTRVJUKG1TdGFnaW5nQnVmZmVyICYmIHNvdXJj
ZS0+bVN0YWdpbmdCdWZmZXIpOworICAgICAgICBjb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdp
b24obVN0YWdpbmdCdWZmZXIsIDAsIGRlc3RPZmZzZXQsIDAsIDAsIHNvdXJjZS0+bVN0YWdpbmdC
dWZmZXIsIDAsICZzcmNCb3gpOworICAgIH0KK30KKwordm9pZCBCdWZmZXJTdG9yYWdlMTE6OmNs
ZWFyKCkKK3sKKyAgICBtUmVzb2x2ZWREYXRhVmFsaWQgPSBmYWxzZTsKKyAgICBtU2l6ZSA9IDA7
Cit9CisKK3Vuc2lnbmVkIGludCBCdWZmZXJTdG9yYWdlMTE6OmdldFNpemUoKSBjb25zdAorewor
ICAgIHJldHVybiBtU2l6ZTsKK30KKworYm9vbCBCdWZmZXJTdG9yYWdlMTE6OnN1cHBvcnRzRGly
ZWN0QmluZGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQnVmZmVy
U3RvcmFnZTExOjptYXJrQnVmZmVyVXNhZ2UoKQoreworICAgIG1SZWFkVXNhZ2VDb3VudCsrOwor
ICAgIG1Xcml0ZVVzYWdlQ291bnQrKzsKKworICAgIGNvbnN0IHVuc2lnbmVkIGludCB1c2FnZUxp
bWl0ID0gNTsKKworICAgIGlmIChtUmVhZFVzYWdlQ291bnQgPiB1c2FnZUxpbWl0ICYmIG1SZXNv
bHZlZERhdGEpCisgICAgeworICAgICAgICBmcmVlKG1SZXNvbHZlZERhdGEpOworICAgICAgICBt
UmVzb2x2ZWREYXRhID0gTlVMTDsKKyAgICAgICAgbVJlc29sdmVkRGF0YVNpemUgPSAwOworICAg
ICAgICBtUmVzb2x2ZWREYXRhVmFsaWQgPSBmYWxzZTsKKyAgICB9Cit9CisKK0lEM0QxMUJ1ZmZl
ciAqQnVmZmVyU3RvcmFnZTExOjpnZXRCdWZmZXIoQnVmZmVyVXNhZ2UgdXNhZ2UpCit7CisgICAg
bWFya0J1ZmZlclVzYWdlKCk7CisKKyAgICBEaXJlY3RCdWZmZXJTdG9yYWdlMTEgKmRpcmVjdEJ1
ZmZlciA9IE5VTEw7CisKKyAgICBhdXRvIGRpcmVjdEJ1ZmZlckl0ID0gbURpcmVjdEJ1ZmZlcnMu
ZmluZCh1c2FnZSk7CisgICAgaWYgKGRpcmVjdEJ1ZmZlckl0ICE9IG1EaXJlY3RCdWZmZXJzLmVu
ZCgpKQorICAgIHsKKyAgICAgICAgZGlyZWN0QnVmZmVyID0gZGlyZWN0QnVmZmVySXQtPnNlY29u
ZDsKKyAgICB9CisKKyAgICBpZiAoZGlyZWN0QnVmZmVyKQorICAgIHsKKyAgICAgICAgaWYgKGRp
cmVjdEJ1ZmZlci0+aXNEaXJ0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBpZiB1cGRh
dGVGcm9tU3RhZ2luZ0J1ZmZlciByZXR1cm5zIHRydWUsIHRoZSBEM0QgYnVmZmVyIGhhcyBiZWVu
IHJlY3JlYXRlZAorICAgICAgICAgICAgLy8gYW5kIHdlIHNob3VsZCB1cGRhdGUgb3VyIHNlcmlh
bAorICAgICAgICAgICAgaWYgKGRpcmVjdEJ1ZmZlci0+dXBkYXRlRnJvbVN0YWdpbmdCdWZmZXIo
bVN0YWdpbmdCdWZmZXIsIG1TaXplLCAwKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICB1cGRhdGVTZXJpYWwoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICAvLyBidWZmZXIgaXMgbm90IGFsbG9jYXRlZCwgY3JlYXRlIGl0
CisgICAgICAgIGRpcmVjdEJ1ZmZlciA9IG5ldyBEaXJlY3RCdWZmZXJTdG9yYWdlMTEobVJlbmRl
cmVyLCB1c2FnZSk7CisgICAgICAgIGRpcmVjdEJ1ZmZlci0+dXBkYXRlRnJvbVN0YWdpbmdCdWZm
ZXIobVN0YWdpbmdCdWZmZXIsIG1TaXplLCAwKTsKKworICAgICAgICBtRGlyZWN0QnVmZmVycy5p
bnNlcnQoc3RkOjptYWtlX3BhaXIodXNhZ2UsIGRpcmVjdEJ1ZmZlcikpOworICAgICAgICB1cGRh
dGVTZXJpYWwoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZGlyZWN0QnVmZmVyLT5nZXREM0RCdWZm
ZXIoKTsKK30KKworRGlyZWN0QnVmZmVyU3RvcmFnZTExOjpEaXJlY3RCdWZmZXJTdG9yYWdlMTEo
UmVuZGVyZXIxMSAqcmVuZGVyZXIsIEJ1ZmZlclVzYWdlIHVzYWdlKQorICAgIDogbVJlbmRlcmVy
KHJlbmRlcmVyKSwKKyAgICAgIG1Vc2FnZSh1c2FnZSksCisgICAgICBtRGlyZWN0QnVmZmVyKE5V
TEwpLAorICAgICAgbUJ1ZmZlclNpemUoMCksCisgICAgICBtRGlydHkoZmFsc2UpCit7Cit9CisK
K0RpcmVjdEJ1ZmZlclN0b3JhZ2UxMTo6fkRpcmVjdEJ1ZmZlclN0b3JhZ2UxMSgpCit7CisgICAg
U2FmZVJlbGVhc2UobURpcmVjdEJ1ZmZlcik7Cit9CisKK0J1ZmZlclVzYWdlIERpcmVjdEJ1ZmZl
clN0b3JhZ2UxMTo6Z2V0VXNhZ2UoKSBjb25zdAoreworICAgIHJldHVybiBtVXNhZ2U7Cit9CisK
Ky8vIFJldHVybnMgdHJ1ZSBpZiBpdCByZWNyZWF0ZXMgdGhlIGRpcmVjdCBidWZmZXIKK2Jvb2wg
RGlyZWN0QnVmZmVyU3RvcmFnZTExOjp1cGRhdGVGcm9tU3RhZ2luZ0J1ZmZlcihJRDNEMTFCdWZm
ZXIgKnN0YWdpbmdCdWZmZXIsIHNpemVfdCBzaXplLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIElE
M0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBJRDNEMTFE
ZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisK
KyAgICAvLyB1bnVzZWQgZm9yIG5vdworICAgIEFTU0VSVChvZmZzZXQgPT0gMCk7CisKKyAgICB1
bnNpZ25lZCBpbnQgcmVxdWlyZWRCdWZmZXJTaXplID0gc2l6ZSArIG9mZnNldDsKKyAgICBib29s
IGNyZWF0ZUJ1ZmZlciA9ICFtRGlyZWN0QnVmZmVyIHx8IG1CdWZmZXJTaXplIDwgcmVxdWlyZWRC
dWZmZXJTaXplOworCisgICAgLy8gKFJlKWluaXRpYWxpemUgRDNEIGJ1ZmZlciBpZiBuZWVkZWQK
KyAgICBpZiAoY3JlYXRlQnVmZmVyKQorICAgIHsKKyAgICAgICAgRDNEMTFfQlVGRkVSX0RFU0Mg
YnVmZmVyRGVzYzsKKyAgICAgICAgZmlsbEJ1ZmZlckRlc2MoJmJ1ZmZlckRlc2MsIG1SZW5kZXJl
ciwgbVVzYWdlLCByZXF1aXJlZEJ1ZmZlclNpemUpOworCisgICAgICAgIElEM0QxMUJ1ZmZlciAq
bmV3QnVmZmVyOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVy
KCZidWZmZXJEZXNjLCBOVUxMLCAmbmV3QnVmZmVyKTsKKworICAgICAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgLy8gTm8gbG9uZ2VyIG5lZWQg
dGhlIG9sZCBidWZmZXIKKyAgICAgICAgU2FmZVJlbGVhc2UobURpcmVjdEJ1ZmZlcik7CisgICAg
ICAgIG1EaXJlY3RCdWZmZXIgPSBuZXdCdWZmZXI7CisKKyAgICAgICAgbUJ1ZmZlclNpemUgPSBi
dWZmZXJEZXNjLkJ5dGVXaWR0aDsKKyAgICB9CisKKyAgICAvLyBDb3B5IGRhdGEgdmlhIHN0YWdp
bmcgYnVmZmVyCisgICAgRDNEMTFfQk9YIHNyY0JveDsKKyAgICBzcmNCb3gubGVmdCA9IDA7Cisg
ICAgc3JjQm94LnJpZ2h0ID0gc2l6ZTsKKyAgICBzcmNCb3gudG9wID0gMDsKKyAgICBzcmNCb3gu
Ym90dG9tID0gMTsKKyAgICBzcmNCb3guZnJvbnQgPSAwOworICAgIHNyY0JveC5iYWNrID0gMTsK
KworICAgIGNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihtRGlyZWN0QnVmZmVyLCAwLCBv
ZmZzZXQsIDAsIDAsIHN0YWdpbmdCdWZmZXIsIDAsICZzcmNCb3gpOworCisgICAgbURpcnR5ID0g
ZmFsc2U7CisKKyAgICByZXR1cm4gY3JlYXRlQnVmZmVyOworfQorCit2b2lkIERpcmVjdEJ1ZmZl
clN0b3JhZ2UxMTo6ZmlsbEJ1ZmZlckRlc2MoRDNEMTFfQlVGRkVSX0RFU0MqIGJ1ZmZlckRlc2Ms
IFJlbmRlcmVyICpyZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2UsIHVuc2lnbmVkIGludCBidWZm
ZXJTaXplKQoreworICAgIGJ1ZmZlckRlc2MtPkJ5dGVXaWR0aCA9IGJ1ZmZlclNpemU7CisgICAg
YnVmZmVyRGVzYy0+TWlzY0ZsYWdzID0gMDsKKyAgICBidWZmZXJEZXNjLT5TdHJ1Y3R1cmVCeXRl
U3RyaWRlID0gMDsKKworICAgIHN3aXRjaCAodXNhZ2UpCisgICAgeworICAgICAgY2FzZSBCVUZG
RVJfVVNBR0VfVkVSVEVYOgorICAgICAgICBidWZmZXJEZXNjLT5Vc2FnZSA9IEQzRDExX1VTQUdF
X0RFRkFVTFQ7CisgICAgICAgIGJ1ZmZlckRlc2MtPkJpbmRGbGFncyA9IEQzRDExX0JJTkRfVkVS
VEVYX0JVRkZFUjsKKyAgICAgICAgYnVmZmVyRGVzYy0+Q1BVQWNjZXNzRmxhZ3MgPSAwOworICAg
ICAgICBicmVhazsKKworICAgICAgY2FzZSBCVUZGRVJfVVNBR0VfSU5ERVg6CisgICAgICAgIGJ1
ZmZlckRlc2MtPlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKKyAgICAgICAgYnVmZmVyRGVz
Yy0+QmluZEZsYWdzID0gRDNEMTFfQklORF9JTkRFWF9CVUZGRVI7CisgICAgICAgIGJ1ZmZlckRl
c2MtPkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9CdWZmZXJTdG9y
YWdlMTEuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkMTEvQnVmZmVyU3RvcmFnZTExLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTZhZmFmZTFiNDQ3ZTc3YTFkMmE2
ZTI2NTk1ZmM3NjIyZDYwNmRiMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvQnVmZmVyU3RvcmFnZTExLmgKQEAg
LTAsMCArMSw5MiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIEJ1ZmZlclN0b3JhZ2UxMS5oIERlZmlu
ZXMgdGhlIEJ1ZmZlclN0b3JhZ2UxMSBjbGFzcy4KKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVS
RVJfQlVGRkVSU1RPUkFHRTExX0hfCisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9CVUZGRVJT
VE9SQUdFMTFfSF8KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdl
LmgiCisKK25hbWVzcGFjZSByeAoreworY2xhc3MgUmVuZGVyZXI7CitjbGFzcyBSZW5kZXJlcjEx
OworY2xhc3MgRGlyZWN0QnVmZmVyU3RvcmFnZTExOworCitlbnVtIEJ1ZmZlclVzYWdlCit7Cisg
ICAgQlVGRkVSX1VTQUdFX1ZFUlRFWCwKKyAgICBCVUZGRVJfVVNBR0VfSU5ERVgsCit9OworCitj
bGFzcyBCdWZmZXJTdG9yYWdlMTEgOiBwdWJsaWMgQnVmZmVyU3RvcmFnZQoreworICBwdWJsaWM6
CisgICAgZXhwbGljaXQgQnVmZmVyU3RvcmFnZTExKFJlbmRlcmVyMTEgKnJlbmRlcmVyKTsKKyAg
ICB2aXJ0dWFsIH5CdWZmZXJTdG9yYWdlMTEoKTsKKworICAgIHN0YXRpYyBCdWZmZXJTdG9yYWdl
MTEgKm1ha2VCdWZmZXJTdG9yYWdlMTEoQnVmZmVyU3RvcmFnZSAqYnVmZmVyU3RvcmFnZSk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgKmdldERhdGEoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShj
b25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNldCk7
CisgICAgdmlydHVhbCB2b2lkIGNvcHlEYXRhKEJ1ZmZlclN0b3JhZ2UqIHNvdXJjZVN0b3JhZ2Us
IHVuc2lnbmVkIGludCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgc291cmNlT2Zmc2V0LCB1bnNpZ25lZCBpbnQgZGVzdE9mZnNldCk7CisgICAgdmlydHVhbCB2
b2lkIGNsZWFyKCk7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2l6ZSgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0RpcmVjdEJpbmRpbmcoKSBjb25zdDsKKworICAgIElE
M0QxMUJ1ZmZlciAqZ2V0QnVmZmVyKEJ1ZmZlclVzYWdlIHVzYWdlKTsKKworICBwcml2YXRlOgor
ICAgIFJlbmRlcmVyMTEgKm1SZW5kZXJlcjsKKworICAgIElEM0QxMUJ1ZmZlciAqbVN0YWdpbmdC
dWZmZXI7CisgICAgdW5zaWduZWQgaW50IG1TdGFnaW5nQnVmZmVyU2l6ZTsKKworICAgIHN0ZDo6
bWFwPEJ1ZmZlclVzYWdlLCBEaXJlY3RCdWZmZXJTdG9yYWdlMTEqPiBtRGlyZWN0QnVmZmVyczsK
KworICAgIHVuc2lnbmVkIGludCBtU2l6ZTsKKworICAgIHZvaWQgKm1SZXNvbHZlZERhdGE7Cisg
ICAgdW5zaWduZWQgaW50IG1SZXNvbHZlZERhdGFTaXplOworICAgIGJvb2wgbVJlc29sdmVkRGF0
YVZhbGlkOworCisgICAgdW5zaWduZWQgaW50IG1SZWFkVXNhZ2VDb3VudDsKKyAgICB1bnNpZ25l
ZCBpbnQgbVdyaXRlVXNhZ2VDb3VudDsKKworICAgIHZvaWQgbWFya0J1ZmZlclVzYWdlKCk7Cit9
OworCisvLyBFYWNoIGluc3RhbmNlIG9mIEJ1ZmZlclN0b3JhZ2VEM0RCdWZmZXIxMSBpcyBzcGVj
aWFsaXplZCBmb3IgYSBjbGFzcyBvZiBEM0QgYmluZGluZyBwb2ludHMKKy8vIC0gdmVydGV4IGJ1
ZmZlcnMKKy8vIC0gaW5kZXggYnVmZmVycworY2xhc3MgRGlyZWN0QnVmZmVyU3RvcmFnZTExCit7
CisgIHB1YmxpYzoKKyAgICBEaXJlY3RCdWZmZXJTdG9yYWdlMTEoUmVuZGVyZXIxMSAqcmVuZGVy
ZXIsIEJ1ZmZlclVzYWdlIHVzYWdlKTsKKyAgICB+RGlyZWN0QnVmZmVyU3RvcmFnZTExKCk7CisK
KyAgICBCdWZmZXJVc2FnZSBnZXRVc2FnZSgpIGNvbnN0OworICAgIGJvb2wgdXBkYXRlRnJvbVN0
YWdpbmdCdWZmZXIoSUQzRDExQnVmZmVyICpzdGFnaW5nQnVmZmVyLCBzaXplX3Qgc2l6ZSwgc2l6
ZV90IG9mZnNldCk7CisKKyAgICBJRDNEMTFCdWZmZXIgKmdldEQzREJ1ZmZlcigpIHsgcmV0dXJu
IG1EaXJlY3RCdWZmZXI7IH0KKyAgICBib29sIGlzRGlydHkoKSBjb25zdCB7IHJldHVybiBtRGly
dHk7IH0KKyAgICB2b2lkIG1hcmtEaXJ0eSgpIHsgbURpcnR5ID0gdHJ1ZTsgfQorCisgIHByaXZh
dGU6CisgICAgUmVuZGVyZXIxMSAqbVJlbmRlcmVyOworICAgIGNvbnN0IEJ1ZmZlclVzYWdlIG1V
c2FnZTsKKyAgICBJRDNEMTFCdWZmZXIgKm1EaXJlY3RCdWZmZXI7CisgICAgc2l6ZV90IG1CdWZm
ZXJTaXplOworICAgIGJvb2wgbURpcnR5OworCisgICAgc3RhdGljIHZvaWQgZmlsbEJ1ZmZlckRl
c2MoRDNEMTFfQlVGRkVSX0RFU0MqIGJ1ZmZlckRlc2MsIFJlbmRlcmVyICpyZW5kZXJlciwgQnVm
ZmVyVXNhZ2UgdXNhZ2UsIHVuc2lnbmVkIGludCBidWZmZXJTaXplKTsKK307CisKK30KKworI2Vu
ZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9CVUZGRVJTVE9SQUdFMTFfSF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvRmVu
Y2UxMS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL0ZlbmNlMTEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJhN2Q0ZDQzZWYzYTdlZGU5NWZkZmZlNGE0
NGM0MjE0OWM1OWY5NjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ZlbmNlMTEuY3BwCkBAIC0wLDAgKzEsMTM0
IEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBGZW5jZTEx
LmNwcDogRGVmaW5lcyB0aGUgcng6OkZlbmNlMTEgY2xhc3Mgd2hpY2ggaW1wbGVtZW50cyByeDo6
RmVuY2VJbXBsLgorCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ZlbmNlMTEu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9SZW5kZXJlcjExLmgiCisKK25hbWVzcGFjZSByeAoreworCitGZW5jZTExOjpG
ZW5jZTExKHJ4OjpSZW5kZXJlcjExICpyZW5kZXJlcikKK3sKKyAgICBtUmVuZGVyZXIgPSByZW5k
ZXJlcjsKKyAgICBtUXVlcnkgPSBOVUxMOworfQorCitGZW5jZTExOjp+RmVuY2UxMSgpCit7Cisg
ICAgaWYgKG1RdWVyeSkKKyAgICB7CisgICAgICAgIG1RdWVyeS0+UmVsZWFzZSgpOworICAgICAg
ICBtUXVlcnkgPSBOVUxMOworICAgIH0KK30KKworR0xib29sZWFuIEZlbmNlMTE6OmlzRmVuY2Uo
KQoreworICAgIC8vIEdMX05WX2ZlbmNlIHNwZWM6CisgICAgLy8gQSBuYW1lIHJldHVybmVkIGJ5
IEdlbkZlbmNlc05WLCBidXQgbm90IHlldCBzZXQgdmlhIFNldEZlbmNlTlYsIGlzIG5vdCB0aGUg
bmFtZSBvZiBhbiBleGlzdGluZyBmZW5jZS4KKyAgICByZXR1cm4gbVF1ZXJ5ICE9IE5VTEw7Cit9
CisKK3ZvaWQgRmVuY2UxMTo6c2V0RmVuY2UoR0xlbnVtIGNvbmRpdGlvbikKK3sKKyAgICBpZiAo
IW1RdWVyeSkKKyAgICB7CisgICAgICAgIEQzRDExX1FVRVJZX0RFU0MgcXVlcnlEZXNjOworICAg
ICAgICBxdWVyeURlc2MuUXVlcnkgPSBEM0QxMV9RVUVSWV9FVkVOVDsKKyAgICAgICAgcXVlcnlE
ZXNjLk1pc2NGbGFncyA9IDA7CisKKyAgICAgICAgaWYgKEZBSUxFRChtUmVuZGVyZXItPmdldERl
dmljZSgpLT5DcmVhdGVRdWVyeSgmcXVlcnlEZXNjLCAmbVF1ZXJ5KSkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKS0+RW5kKG1RdWVyeSk7
CisKKyAgICBzZXRDb25kaXRpb24oY29uZGl0aW9uKTsKKyAgICBzZXRTdGF0dXMoR0xfRkFMU0Up
OworfQorCitHTGJvb2xlYW4gRmVuY2UxMTo6dGVzdEZlbmNlKCkKK3sKKyAgICBpZiAobVF1ZXJ5
ID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OLCBHTF9UUlVFKTsKKyAgICB9CisKKyAgICBIUkVTVUxUIHJlc3VsdCA9IG1SZW5kZXJl
ci0+Z2V0RGV2aWNlQ29udGV4dCgpLT5HZXREYXRhKG1RdWVyeSwgTlVMTCwgMCwgMCk7CisKKyAg
ICBpZiAobVJlbmRlcmVyLT5pc0RldmljZUxvc3QoKSkKKyAgICB7CisgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9UUlVFKTsKKyAgICB9CisKKyAgICBBU1NFUlQo
cmVzdWx0ID09IFNfT0sgfHwgcmVzdWx0ID09IFNfRkFMU0UpOworICAgIHNldFN0YXR1cyhyZXN1
bHQgPT0gU19PSyk7CisgICAgcmV0dXJuIGdldFN0YXR1cygpOworfQorCit2b2lkIEZlbmNlMTE6
OmZpbmlzaEZlbmNlKCkKK3sKKyAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCisgICAgeworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICB9CisKKyAgICB3
aGlsZSAoIXRlc3RGZW5jZSgpKQorICAgIHsKKyAgICAgICAgU2xlZXAoMCk7CisgICAgfQorfQor
Cit2b2lkIEZlbmNlMTE6OmdldEZlbmNlaXYoR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKQor
eworICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgIH0KKworICAgIHN3aXRjaCAocG5hbWUpCisg
ICAgeworICAgICAgY2FzZSBHTF9GRU5DRV9TVEFUVVNfTlY6CisgICAgICAgIHsKKyAgICAgICAg
ICAgIC8vIEdMX05WX2ZlbmNlIHNwZWM6CisgICAgICAgICAgICAvLyBPbmNlIHRoZSBzdGF0dXMg
b2YgYSBmZW5jZSBoYXMgYmVlbiBmaW5pc2hlZCAodmlhIEZpbmlzaEZlbmNlTlYpIG9yIHRlc3Rl
ZCBhbmQgdGhlIHJldHVybmVkIHN0YXR1cyBpcyBUUlVFICh2aWEgZWl0aGVyIFRlc3RGZW5jZU5W
CisgICAgICAgICAgICAvLyBvciBHZXRGZW5jZWl2TlYgcXVlcnlpbmcgdGhlIEZFTkNFX1NUQVRV
U19OViksIHRoZSBzdGF0dXMgcmVtYWlucyBUUlVFIHVudGlsIHRoZSBuZXh0IFNldEZlbmNlTlYg
b2YgdGhlIGZlbmNlLgorICAgICAgICAgICAgaWYgKGdldFN0YXR1cygpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9IEdMX1RSVUU7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1S
ZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpLT5HZXREYXRhKG1RdWVyeSwgTlVMTCwgMCwgRDNE
MTFfQVNZTkNfR0VUREFUQV9ET05PVEZMVVNIKTsKKworICAgICAgICAgICAgaWYgKG1SZW5kZXJl
ci0+aXNEZXZpY2VMb3N0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGFyYW1z
WzBdID0gR0xfVFJVRTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09
IFNfT0sgfHwgcmVzdWx0ID09IFNfRkFMU0UpOworICAgICAgICAgICAgc2V0U3RhdHVzKHJlc3Vs
dCA9PSBTX09LKTsKKyAgICAgICAgICAgIHBhcmFtc1swXSA9IGdldFN0YXR1cygpOworCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgY2FzZSBHTF9GRU5DRV9DT05ESVRJT05f
TlY6CisgICAgICAgIHBhcmFtc1swXSA9IGdldENvbmRpdGlvbigpOworICAgICAgICBicmVhazsK
KyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ZlbmNlMTEuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvRmVuY2Ux
MS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmE1Mzk4YmNhMTQ5MDA2NDdiMDNkZjI3YTEwMTkxZDkwNjkxOTExMTIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL0ZlbmNlMTEuaApAQCAtMCwwICsxLDM5IEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworLy8gRmVuY2UxMS5oOiBEZWZpbmVzIHRoZSByeDo6RmVuY2UxMSBjbGFzcyB3aGljaCBpbXBs
ZW1lbnRzIHJ4OjpGZW5jZUltcGwuCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0ZlbmNl
MTFfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX0ZlbmNlMTFfSF8KKworI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZUltcGwuaCIKKworbmFtZXNwYWNlIHJ4Cit7CitjbGFz
cyBSZW5kZXJlcjExOworCitjbGFzcyBGZW5jZTExIDogcHVibGljIEZlbmNlSW1wbAoreworICBw
dWJsaWM6CisgICAgZXhwbGljaXQgRmVuY2UxMShyeDo6UmVuZGVyZXIxMSAqcmVuZGVyZXIpOwor
ICAgIHZpcnR1YWwgfkZlbmNlMTEoKTsKKworICAgIEdMYm9vbGVhbiBpc0ZlbmNlKCk7CisgICAg
dm9pZCBzZXRGZW5jZShHTGVudW0gY29uZGl0aW9uKTsKKyAgICBHTGJvb2xlYW4gdGVzdEZlbmNl
KCk7CisgICAgdm9pZCBmaW5pc2hGZW5jZSgpOworICAgIHZvaWQgZ2V0RmVuY2VpdihHTGVudW0g
cG5hbWUsIEdMaW50ICpwYXJhbXMpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKEZlbmNlMTEpOworCisgICAgcng6OlJlbmRlcmVyMTEgKm1SZW5kZXJlcjsKKyAg
ICBJRDNEMTFRdWVyeSAqbVF1ZXJ5OworfTsKKworfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1JF
TkRFUkVSX0ZFTkNFMTFfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW1hZ2UxMS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ltYWdlMTEuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjJiMDdiOWQxODI4YThiMzE2Y2U4ZGViMzRhNTY0ZDM0OWNiM2I4ZGMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDExL0ltYWdlMTEuY3BwCkBAIC0wLDAgKzEsNDk1IEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQu
aCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisvLyBJbWFnZTExLmg6IEltcGxlbWVudHMgdGhlIHJ4OjpJbWFn
ZTExIGNsYXNzLCB3aGljaCBhY3RzIGFzIHRoZSBpbnRlcmZhY2UgdG8KKy8vIHRoZSBhY3R1YWwg
dW5kZXJseWluZyByZXNvdXJjZXMgb2YgYSBUZXh0dXJlCisKKyNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvUmVuZGVyZXIxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9JbWFnZTExLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1Rl
eHR1cmVTdG9yYWdlMTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIv
bWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9nZW5lcmF0ZW1pcC5oIgorCituYW1lc3BhY2UgcngKK3sKKworSW1hZ2Ux
MTo6SW1hZ2UxMSgpCit7CisgICAgbVN0YWdpbmdUZXh0dXJlID0gTlVMTDsKKyAgICBtUmVuZGVy
ZXIgPSBOVUxMOworICAgIG1EWEdJRm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5LTk9XTjsKK30KKwor
SW1hZ2UxMTo6fkltYWdlMTEoKQoreworICAgIGlmIChtU3RhZ2luZ1RleHR1cmUpCisgICAgewor
ICAgICAgICBtU3RhZ2luZ1RleHR1cmUtPlJlbGVhc2UoKTsKKyAgICB9Cit9CisKK0ltYWdlMTEg
KkltYWdlMTE6Om1ha2VJbWFnZTExKEltYWdlICppbWcpCit7CisgICAgQVNTRVJUKEhBU19EWU5B
TUlDX1RZUEUocng6OkltYWdlMTEqLCBpbWcpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8cng6
OkltYWdlMTEqPihpbWcpOworfQorCit2b2lkIEltYWdlMTE6OmdlbmVyYXRlTWlwbWFwKEltYWdl
MTEgKmRlc3QsIEltYWdlMTEgKnNyYykKK3sKKyAgICBBU1NFUlQoc3JjLT5nZXREWEdJRm9ybWF0
KCkgPT0gZGVzdC0+Z2V0RFhHSUZvcm1hdCgpKTsKKyAgICBBU1NFUlQoc3JjLT5nZXRXaWR0aCgp
ID09IDEgfHwgc3JjLT5nZXRXaWR0aCgpIC8gMiA9PSBkZXN0LT5nZXRXaWR0aCgpKTsKKyAgICBB
U1NFUlQoc3JjLT5nZXRIZWlnaHQoKSA9PSAxIHx8IHNyYy0+Z2V0SGVpZ2h0KCkgLyAyID09IGRl
c3QtPmdldEhlaWdodCgpKTsKKworICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBkZXN0TWFw
cGVkLCBzcmNNYXBwZWQ7CisgICAgZGVzdC0+bWFwKEQzRDExX01BUF9XUklURSwgJmRlc3RNYXBw
ZWQpOworICAgIHNyYy0+bWFwKEQzRDExX01BUF9SRUFELCAmc3JjTWFwcGVkKTsKKworICAgIGNv
bnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVu
c2lnbmVkIGNoYXIqPihzcmNNYXBwZWQucERhdGEpOworICAgIHVuc2lnbmVkIGNoYXIgKmRlc3RE
YXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZGVzdE1hcHBlZC5wRGF0YSk7
CisKKyAgICBpZiAoc291cmNlRGF0YSAmJiBkZXN0RGF0YSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAoc3JjLT5nZXREWEdJRm9ybWF0KCkpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIERYR0lf
Rk9STUFUX1I4RzhCOEE4X1VOT1JNOgorICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4
QThfVU5PUk06CisgICAgICAgICAgICBHZW5lcmF0ZU1pcDxSOEc4QjhBOD4oc3JjLT5nZXRXaWR0
aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRl
c3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQThfVU5PUk06CisgICAgICAgICAgICBHZW5lcmF0ZU1pcDxB
OD4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBw
ZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVU5PUk06CisgICAgICAgICAg
ICBHZW5lcmF0ZU1pcDxSOD4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3Vy
Y2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMy
QjMyQTMyX0ZMT0FUOgorICAgICAgICAgICAgR2VuZXJhdGVNaXA8QTMyQjMyRzMyUjMyRj4oc3Jj
LT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93
UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FUOgorICAgICAgICAg
ICAgR2VuZXJhdGVNaXA8UjMyRzMyQjMyRj4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdo
dCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVk
LlJvd1BpdGNoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjE2RzE2QjE2QTE2X0ZMT0FUOgorICAgICAgICAgICAgR2VuZXJhdGVNaXA8QTE2QjE2RzE2
UjE2Rj4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRhLCBzcmNN
YXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9VTk9STToKKyAgICAg
ICAgICAgIEdlbmVyYXRlTWlwPFI4Rzg+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQo
KSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5S
b3dQaXRjaCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIERYR0lfRk9STUFU
X1IxNl9GTE9BVDoKKyAgICAgICAgICAgIEdlbmVyYXRlTWlwPFIxNkY+KHNyYy0+Z2V0V2lkdGgo
KSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0
RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9GTE9BVDoKKyAgICAgICAgICAgIEdlbmVyYXRlTWlw
PFIxNkcxNkY+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwg
c3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMl9GTE9BVDoKKyAg
ICAgICAgICAgIEdlbmVyYXRlTWlwPFIzMkY+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWln
aHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBl
ZC5Sb3dQaXRjaCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIERYR0lfRk9S
TUFUX1IzMkczMl9GTE9BVDoKKyAgICAgICAgICAgIEdlbmVyYXRlTWlwPFIzMkczMkY+KHNyYy0+
Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1Bp
dGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVzdC0+dW5tYXAoKTsKKyAgICAgICAg
c3JjLT51bm1hcCgpOworICAgIH0KKworICAgIGRlc3QtPm1hcmtEaXJ0eSgpOworfQorCitzdGF0
aWMgYm9vbCBGb3JtYXRSZXF1aXJlc0luaXRpYWxpemF0aW9uKERYR0lfRk9STUFUIGR4Z2lGb3Jt
YXQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCkKK3sKKyAgICByZXR1cm4gKGR4Z2lGb3JtYXQgPT0g
RFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk0gJiYgZ2w6OkdldEFscGhhU2l6ZShpbnRlcm5hbEZv
cm1hdCkgPT0gMCkgfHwKKyAgICAgICAgICAgKGR4Z2lGb3JtYXQgPT0gRFhHSV9GT1JNQVRfUjMy
RzMyQjMyQTMyX0ZMT0FUICYmIGdsOjpHZXRBbHBoYVNpemUoaW50ZXJuYWxGb3JtYXQpID09IDAp
OworfQorCitib29sIEltYWdlMTE6OmlzRGlydHkoKSBjb25zdAoreworICAgIHJldHVybiAoKG1T
dGFnaW5nVGV4dHVyZSB8fCBGb3JtYXRSZXF1aXJlc0luaXRpYWxpemF0aW9uKG1EWEdJRm9ybWF0
LCBtSW50ZXJuYWxGb3JtYXQpKSAmJiBtRGlydHkpOworfQorCitib29sIEltYWdlMTE6OnVwZGF0
ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCkKK3sKKyAgICBUZXh0dXJlU3RvcmFnZTExXzJEICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFn
ZTExXzJEOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yRChzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFu
Y2UoKSk7CisgICAgcmV0dXJuIHN0b3JhZ2UxMS0+dXBkYXRlU3VicmVzb3VyY2VMZXZlbChnZXRT
dGFnaW5nVGV4dHVyZSgpLCBnZXRTdGFnaW5nU3VicmVzb3VyY2UoKSwgbGV2ZWwsIDAsIHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOworfQorCitib29sIEltYWdlMTE6OnVwZGF0ZVN1
cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCkKK3sKKyAgICBUZXh0dXJlU3RvcmFnZTExX0N1YmUgKnN0b3JhZ2UxMSA9IFRl
eHR1cmVTdG9yYWdlMTFfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlMTFfQ3ViZShzdG9yYWdlLT5n
ZXRTdG9yYWdlSW5zdGFuY2UoKSk7CisgICAgcmV0dXJuIHN0b3JhZ2UxMS0+dXBkYXRlU3VicmVz
b3VyY2VMZXZlbChnZXRTdGFnaW5nVGV4dHVyZSgpLCBnZXRTdGFnaW5nU3VicmVzb3VyY2UoKSwg
bGV2ZWwsIGZhY2UsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOworfQorCitib29s
IEltYWdlMTE6OnJlZGVmaW5lKFJlbmRlcmVyICpyZW5kZXJlciwgR0xpbnQgaW50ZXJuYWxmb3Jt
YXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBib29sIGZvcmNlUmVsZWFzZSkKK3sK
KyAgICBpZiAobVdpZHRoICE9IHdpZHRoIHx8CisgICAgICAgIG1IZWlnaHQgIT0gaGVpZ2h0IHx8
CisgICAgICAgIG1JbnRlcm5hbEZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCB8fAorICAgICAgICBm
b3JjZVJlbGVhc2UpCisgICAgeworICAgICAgICBtUmVuZGVyZXIgPSBSZW5kZXJlcjExOjptYWtl
UmVuZGVyZXIxMShyZW5kZXJlcik7CisKKyAgICAgICAgbVdpZHRoID0gd2lkdGg7CisgICAgICAg
IG1IZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGludGVybmFsZm9y
bWF0OworICAgICAgICAvLyBjb21wdXRlIHRoZSBkM2QgZm9ybWF0IHRoYXQgd2lsbCBiZSB1c2Vk
CisgICAgICAgIG1EWEdJRm9ybWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlRm9ybWF0KGlu
dGVybmFsZm9ybWF0KTsKKyAgICAgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDExX2dsOjpDb252ZXJ0
VGV4dHVyZUludGVybmFsRm9ybWF0KG1EWEdJRm9ybWF0KTsKKworICAgICAgICBpZiAobVN0YWdp
bmdUZXh0dXJlKQorICAgICAgICB7CisgICAgICAgICAgICBtU3RhZ2luZ1RleHR1cmUtPlJlbGVh
c2UoKTsKKyAgICAgICAgICAgIG1TdGFnaW5nVGV4dHVyZSA9IE5VTEw7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBJbWFnZTExOjppc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdAoreworICAgIHJl
dHVybiBUZXh0dXJlU3RvcmFnZTExOjpJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKG1EWEdJRm9y
bWF0KTsKK30KKworRFhHSV9GT1JNQVQgSW1hZ2UxMTo6Z2V0RFhHSUZvcm1hdCgpIGNvbnN0Cit7
CisgICAgLy8gdGhpcyBzaG91bGQgb25seSBoYXBwZW4gaWYgdGhlIGltYWdlIGhhc24ndCBiZWVu
IHJlZGVmaW5lZCBmaXJzdAorICAgIC8vIHdoaWNoIHdvdWxkIGJlIGEgYnVnIGJ5IHRoZSBjYWxs
ZXIKKyAgICBBU1NFUlQobURYR0lGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTik7CisKKyAg
ICByZXR1cm4gbURYR0lGb3JtYXQ7Cit9CisKKy8vIFN0b3JlIHRoZSBwaXhlbCByZWN0YW5nbGUg
ZGVzaWduYXRlZCBieSB4b2Zmc2V0LHlvZmZzZXQsd2lkdGgsaGVpZ2h0IHdpdGggcGl4ZWxzIHN0
b3JlZCBhcyBmb3JtYXQvdHlwZSBhdCBpbnB1dAorLy8gaW50byB0aGUgdGFyZ2V0IHBpeGVsIHJl
Y3RhbmdsZS4KK3ZvaWQgSW1hZ2UxMTo6bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAg
ICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQpCit7CisgICAgRDNE
MTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZEltYWdlOworICAgIEhSRVNVTFQgcmVzdWx0ID0g
bWFwKEQzRDExX01BUF9XUklURSwgJm1hcHBlZEltYWdlKTsKKyAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCisgICAgeworICAgICAgICBFUlIoIkNvdWxkIG5vdCBtYXAgaW1hZ2UgZm9yIGxvYWRpbmcu
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgR0xzaXplaSBpbnB1dFBpdGNo
ID0gZ2w6OkNvbXB1dGVQaXRjaCh3aWR0aCwgbUludGVybmFsRm9ybWF0LCB1bnBhY2tBbGlnbm1l
bnQpOworICAgIHNpemVfdCBwaXhlbFNpemUgPSBkM2QxMTo6Q29tcHV0ZVBpeGVsU2l6ZUJpdHMo
bURYR0lGb3JtYXQpIC8gODsKKyAgICB2b2lkKiBvZmZzZXRNYXBwZWREYXRhID0gKHZvaWQqKSgo
QllURSAqKW1hcHBlZEltYWdlLnBEYXRhICsgKHlvZmZzZXQgKiBtYXBwZWRJbWFnZS5Sb3dQaXRj
aCArIHhvZmZzZXQgKiBwaXhlbFNpemUpKTsKKworICAgIHN3aXRjaCAobUludGVybmFsRm9ybWF0
KQorICAgIHsKKyAgICAgIGNhc2UgR0xfQUxQSEE4X0VYVDoKKyAgICAgICAgbG9hZEFscGhhRGF0
YVRvTmF0aXZlKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5S
b3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0U4X0VYVDoKKyAgICAgICAgbG9hZEx1bWluYW5jZURhdGFUb05hdGl2ZU9yQkdS
QSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gs
IG9mZnNldE1hcHBlZERhdGEsIGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X0FMUEhBMzJGX0VYVDoKKyAgICAgICAgbG9hZEFscGhhRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFw
cGVkRGF0YSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UzMkZfRVhU
OgorICAgICAgICBsb2FkTHVtaW5hbmNlRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9BTFBIQTE2Rl9FWFQ6CisgICAgICAgIGxv
YWRBbHBoYUhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6CisgICAgICAgIGxvYWRMdW1pbmFu
Y2VIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBt
YXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQ6CisgICAgICAgIGxvYWRMdW1pbmFu
Y2VBbHBoYURhdGFUb05hdGl2ZU9yQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1
dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEsIGZhbHNlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQ6CisgICAgICAg
IGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBp
dGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOworICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVDoKKyAgICAg
ICAgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBp
bnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEp
OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUkdCOF9PRVM6CisgICAgICAgIGxvYWRS
R0JVQnl0ZURhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBl
ZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX1JHQjU2NToKKyAgICAgICAgbG9hZFJHQjU2NURhdGFUb1JHQkEod2lkdGgsIGhl
aWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBw
ZWREYXRhKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JHQkE4X09FUzoKKyAgICAg
ICAgbG9hZFJHQkFVQnl0ZURhdGFUb05hdGl2ZSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOworICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfUkdCQTQ6CisgICAgICAgIGxvYWRSR0JBNDQ0NERhdGFUb1JH
QkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNo
LCBvZmZzZXRNYXBwZWREYXRhKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JHQjVf
QTE6CisgICAgICAgIGxvYWRSR0JBNTU1MURhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JHUkE4X0VYVDoKKyAgICAgICAgbG9hZEJHUkFE
YXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5S
b3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9SR0IzMkZfRVhUOgorICAgICAgICBsb2FkUkdCRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWln
aHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVk
RGF0YSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9SR0IxNkZfRVhUOgorICAgICAg
ICBsb2FkUkdCSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOworICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfUkdCQTMyRl9FWFQ6CisgICAgICAgIGxvYWRSR0JBRmxvYXRE
YXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5S
b3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9SR0JBMTZGX0VYVDoKKyAgICAgICAgbG9hZFJHQkFIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRo
LCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0
TWFwcGVkRGF0YSk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsgCisgICAgfQorCisgICAgdW5tYXAoKTsKK30KKwordm9pZCBJbWFnZTExOjpsb2FkQ29tcHJl
c3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQg
KmlucHV0KQoreworICAgIEFTU0VSVCh4b2Zmc2V0ICUgNCA9PSAwKTsKKyAgICBBU1NFUlQoeW9m
ZnNldCAlIDQgPT0gMCk7CisKKyAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkSW1h
Z2U7CisgICAgSFJFU1VMVCByZXN1bHQgPSBtYXAoRDNEMTFfTUFQX1dSSVRFLCAmbWFwcGVkSW1h
Z2UpOworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEVSUigiQ291bGQg
bm90IG1hcCBpbWFnZSBmb3IgbG9hZGluZy4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIC8vIFNpemUgY29tcHV0YXRpb24gYXNzdW1lcyBhIDR4NCBibG9jayBjb21wcmVzc2VkIHRl
eHR1cmUgZm9ybWF0CisgICAgc2l6ZV90IGJsb2NrU2l6ZSA9IGQzZDExOjpDb21wdXRlQmxvY2tT
aXplQml0cyhtRFhHSUZvcm1hdCkgLyA4OworICAgIHZvaWQqIG9mZnNldE1hcHBlZERhdGEgPSAo
dm9pZCopKChCWVRFICopbWFwcGVkSW1hZ2UucERhdGEgKyAoKHlvZmZzZXQgLyA0KSAqIG1hcHBl
ZEltYWdlLlJvd1BpdGNoICsgKHhvZmZzZXQgLyA0KSAqIGJsb2NrU2l6ZSkpOworCisgICAgR0xz
aXplaSBpbnB1dFNpemUgPSBnbDo6Q29tcHV0ZUNvbXByZXNzZWRTaXplKHdpZHRoLCBoZWlnaHQs
IG1JbnRlcm5hbEZvcm1hdCk7CisgICAgR0xzaXplaSBpbnB1dFBpdGNoID0gZ2w6OkNvbXB1dGVD
b21wcmVzc2VkUGl0Y2god2lkdGgsIG1JbnRlcm5hbEZvcm1hdCk7CisgICAgaW50IHJvd3MgPSBp
bnB1dFNpemUgLyBpbnB1dFBpdGNoOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgKytp
KQorICAgIHsKKyAgICAgICAgbWVtY3B5KCh2b2lkKikoKEJZVEUqKW9mZnNldE1hcHBlZERhdGEg
KyBpICogbWFwcGVkSW1hZ2UuUm93UGl0Y2gpLCAodm9pZCopKChCWVRFKilpbnB1dCArIGkgKiBp
bnB1dFBpdGNoKSwgaW5wdXRQaXRjaCk7CisgICAgfQorCisgICAgdW5tYXAoKTsKK30KKwordm9p
ZCBJbWFnZTExOjpjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdM
aW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBnbDo6RnJhbWVidWZmZXIgKnNv
dXJjZSkKK3sKKyAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IHNvdXJjZS0+Z2V0
UmVhZENvbG9yYnVmZmVyKCk7CisKKyAgICBpZiAoY29sb3JidWZmZXIgJiYgY29sb3JidWZmZXIt
PmdldEFjdHVhbEZvcm1hdCgpID09IChHTHVpbnQpbUFjdHVhbEZvcm1hdCkKKyAgICB7CisgICAg
ICAgIC8vIE5vIGNvbnZlcnNpb24gbmVlZGVkLS0gdXNlIGNvcHliYWNrIGZhc3RwYXRoCisgICAg
ICAgIElEM0QxMVRleHR1cmUyRCAqY29sb3JCdWZmZXJUZXh0dXJlID0gTlVMTDsKKyAgICAgICAg
dW5zaWduZWQgaW50IHN1YnJlc291cmNlSW5kZXggPSAwOworCisgICAgICAgIGlmIChtUmVuZGVy
ZXItPmdldFJlbmRlclRhcmdldFJlc291cmNlKGNvbG9yYnVmZmVyLCAmc3VicmVzb3VyY2VJbmRl
eCwgJmNvbG9yQnVmZmVyVGV4dHVyZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEQzRDExX1RF
WFRVUkUyRF9ERVNDIHRleHR1cmVEZXNjOworICAgICAgICAgICAgY29sb3JCdWZmZXJUZXh0dXJl
LT5HZXREZXNjKCZ0ZXh0dXJlRGVzYyk7CisKKyAgICAgICAgICAgIElEM0QxMURldmljZSAqZGV2
aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICAgICAgICAgIElEM0QxMURldmljZUNv
bnRleHQgKmRldmljZUNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKKwor
ICAgICAgICAgICAgSUQzRDExVGV4dHVyZTJEKiBzcmNUZXggPSBOVUxMOworICAgICAgICAgICAg
aWYgKHRleHR1cmVEZXNjLlNhbXBsZURlc2MuQ291bnQgPiAxKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHJlc29sdmVEZXNjOworICAgICAgICAg
ICAgICAgIHJlc29sdmVEZXNjLldpZHRoID0gdGV4dHVyZURlc2MuV2lkdGg7CisgICAgICAgICAg
ICAgICAgcmVzb2x2ZURlc2MuSGVpZ2h0ID0gdGV4dHVyZURlc2MuSGVpZ2h0OworICAgICAgICAg
ICAgICAgIHJlc29sdmVEZXNjLk1pcExldmVscyA9IDE7CisgICAgICAgICAgICAgICAgcmVzb2x2
ZURlc2MuQXJyYXlTaXplID0gMTsKKyAgICAgICAgICAgICAgICByZXNvbHZlRGVzYy5Gb3JtYXQg
PSB0ZXh0dXJlRGVzYy5Gb3JtYXQ7CisgICAgICAgICAgICAgICAgcmVzb2x2ZURlc2MuU2FtcGxl
RGVzYy5Db3VudCA9IDE7CisgICAgICAgICAgICAgICAgcmVzb2x2ZURlc2MuU2FtcGxlRGVzYy5R
dWFsaXR5ID0gMDsKKyAgICAgICAgICAgICAgICByZXNvbHZlRGVzYy5Vc2FnZSA9IEQzRDExX1VT
QUdFX0RFRkFVTFQ7CisgICAgICAgICAgICAgICAgcmVzb2x2ZURlc2MuQmluZEZsYWdzID0gMDsK
KyAgICAgICAgICAgICAgICByZXNvbHZlRGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7CisgICAgICAg
ICAgICAgICAgcmVzb2x2ZURlc2MuTWlzY0ZsYWdzID0gMDsKKworICAgICAgICAgICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJnJlc29sdmVEZXNjLCBOVUxM
LCAmc3JjVGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBjcmVhdGUgcmVz
b2x2ZSB0ZXh0dXJlIGZvciBJbWFnZTExOjpjb3B5LCBIUkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBkZXZpY2VDb250ZXh0LT5SZXNvbHZlU3VicmVzb3VyY2Uoc3JjVGV4LCAwLCBj
b2xvckJ1ZmZlclRleHR1cmUsIHN1YnJlc291cmNlSW5kZXgsIHRleHR1cmVEZXNjLkZvcm1hdCk7
CisgICAgICAgICAgICAgICAgc3VicmVzb3VyY2VJbmRleCA9IDA7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3JjVGV4ID0g
Y29sb3JCdWZmZXJUZXh0dXJlOworICAgICAgICAgICAgICAgIHNyY1RleC0+QWRkUmVmKCk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEQzRDExX0JPWCBzcmNCb3g7CisgICAgICAgICAg
ICBzcmNCb3gubGVmdCA9IHg7CisgICAgICAgICAgICBzcmNCb3gucmlnaHQgPSB4ICsgd2lkdGg7
CisgICAgICAgICAgICBzcmNCb3gudG9wID0geTsKKyAgICAgICAgICAgIHNyY0JveC5ib3R0b20g
PSB5ICsgaGVpZ2h0OworICAgICAgICAgICAgc3JjQm94LmZyb250ID0gMDsKKyAgICAgICAgICAg
IHNyY0JveC5iYWNrID0gMTsKKworICAgICAgICAgICAgZGV2aWNlQ29udGV4dC0+Q29weVN1YnJl
c291cmNlUmVnaW9uKG1TdGFnaW5nVGV4dHVyZSwgMCwgeG9mZnNldCwgeW9mZnNldCwgMCwgc3Jj
VGV4LCBzdWJyZXNvdXJjZUluZGV4LCAmc3JjQm94KTsKKworICAgICAgICAgICAgc3JjVGV4LT5S
ZWxlYXNlKCk7CisgICAgICAgICAgICBjb2xvckJ1ZmZlclRleHR1cmUtPlJlbGVhc2UoKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBUaGlzIGZvcm1hdCBy
ZXF1aXJlcyBjb252ZXJzaW9uLCBzbyB3ZSBtdXN0IGNvcHkgdGhlIHRleHR1cmUgdG8gc3RhZ2lu
ZyBhbmQgbWFudWFsbHkgY29udmVydCB2aWEgcmVhZFBpeGVscworICAgICAgICBEM0QxMV9NQVBQ
RURfU1VCUkVTT1VSQ0UgbWFwcGVkSW1hZ2U7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbWFw
KEQzRDExX01BUF9XUklURSwgJm1hcHBlZEltYWdlKTsKKworICAgICAgICAvLyBkZXRlcm1pbmUg
dGhlIG9mZnNldCBjb29yZGluYXRlIGludG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlcgorICAgICAg
ICBHTHNpemVpIHJvd09mZnNldCA9IGdsOjpDb21wdXRlUGl4ZWxTaXplKG1BY3R1YWxGb3JtYXQp
ICogeG9mZnNldDsKKyAgICAgICAgdm9pZCAqZGF0YU9mZnNldCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihtYXBwZWRJbWFnZS5wRGF0YSkgKyBtYXBwZWRJbWFnZS5Sb3dQaXRjaCAqIHlv
ZmZzZXQgKyByb3dPZmZzZXQ7CisKKyAgICAgICAgbVJlbmRlcmVyLT5yZWFkUGl4ZWxzKHNvdXJj
ZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZ2w6OkV4dHJhY3RGb3JtYXQobUludGVybmFsRm9ybWF0
KSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RXh0cmFjdFR5cGUobUludGVy
bmFsRm9ybWF0KSwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIGZhbHNlLCA0LCBkYXRhT2Zmc2V0KTsK
KworICAgICAgICB1bm1hcCgpOworICAgIH0KK30KKworSUQzRDExVGV4dHVyZTJEICpJbWFnZTEx
OjpnZXRTdGFnaW5nVGV4dHVyZSgpCit7CisgICAgY3JlYXRlU3RhZ2luZ1RleHR1cmUoKTsKKwor
ICAgIHJldHVybiBtU3RhZ2luZ1RleHR1cmU7Cit9CisKK3Vuc2lnbmVkIGludCBJbWFnZTExOjpn
ZXRTdGFnaW5nU3VicmVzb3VyY2UoKQoreworICAgIGNyZWF0ZVN0YWdpbmdUZXh0dXJlKCk7CisK
KyAgICByZXR1cm4gbVN0YWdpbmdTdWJyZXNvdXJjZTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IFQsIHNpemVfdCBOPgorc3RhdGljIHZvaWQgc2V0RGVmYXVsdERhdGEoSUQzRDExRGV2aWNlQ29u
dGV4dCAqZGV2aWNlQ29udGV4dCwgSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCBVSU5UIHN1YnJl
c291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIGNvbnN0IFQgKCZkZWZhdWx0RGF0YSlbTl0pCit7CisgICAgRDNEMTFfTUFQUEVE
X1NVQlJFU09VUkNFIG1hcDsKKyAgICBkZXZpY2VDb250ZXh0LT5NYXAodGV4dHVyZSwgc3VicmVz
b3VyY2UsIEQzRDExX01BUF9XUklURSwgMCwgJm1hcCk7CisKKyAgICB1bnNpZ25lZCBjaGFyKiBw
dHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihtYXAucERhdGEpOworICAgIHNp
emVfdCBwaXhlbFNpemUgPSBzaXplb2YoVCkgKiBOOworCisgICAgZm9yIChHTHNpemVpIHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBmb3IgKEdMc2l6ZWkgeCA9IDA7IHgg
PCB3aWR0aDsgeCsrKQorICAgICAgICB7CisgICAgICAgICAgICBtZW1jcHkocHRyICsgKHkgKiBt
YXAuUm93UGl0Y2gpICsgKHggKiBwaXhlbFNpemUpLCBkZWZhdWx0RGF0YSwgcGl4ZWxTaXplKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGRldmljZUNvbnRleHQtPlVubWFwKHRleHR1cmUsIHN1
YnJlc291cmNlKTsKK30KKwordm9pZCBJbWFnZTExOjpjcmVhdGVTdGFnaW5nVGV4dHVyZSgpCit7
CisgICAgaWYgKG1TdGFnaW5nVGV4dHVyZSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBJRDNEMTFUZXh0dXJlMkQgKm5ld1RleHR1cmUgPSBOVUxMOworICAgIGludCBsb2RP
ZmZzZXQgPSAxOworICAgIGNvbnN0IERYR0lfRk9STUFUIGR4Z2lGb3JtYXQgPSBnZXREWEdJRm9y
bWF0KCk7CisgICAgQVNTRVJUKCFkM2QxMTo6SXNEZXB0aFN0ZW5jaWxGb3JtYXQoZHhnaUZvcm1h
dCkpOyAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgZm9yIGRlcHRoIHRleHR1cmVzCisKKyAg
ICBpZiAobVdpZHRoICE9IDAgJiYgbUhlaWdodCAhPSAwKQorICAgIHsKKyAgICAgICAgR0xzaXpl
aSB3aWR0aCA9IG1XaWR0aDsKKyAgICAgICAgR0xzaXplaSBoZWlnaHQgPSBtSGVpZ2h0OworCisg
ICAgICAgIC8vIGFkanVzdCBzaXplIGlmIG5lZWRlZCBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlcwor
ICAgICAgICBnbDo6TWFrZVZhbGlkU2l6ZShmYWxzZSwgZDNkMTE6OklzQ29tcHJlc3NlZChkeGdp
Rm9ybWF0KSwgJndpZHRoLCAmaGVpZ2h0LCAmbG9kT2Zmc2V0KTsKKyAgICAgICAgSUQzRDExRGV2
aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgIEQzRDExX1RF
WFRVUkUyRF9ERVNDIGRlc2M7CisgICAgICAgIGRlc2MuV2lkdGggPSB3aWR0aDsKKyAgICAgICAg
ZGVzYy5IZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIGRlc2MuTWlwTGV2ZWxzID0gbG9kT2Zmc2V0
ICsgMTsKKyAgICAgICAgZGVzYy5BcnJheVNpemUgPSAxOworICAgICAgICBkZXNjLkZvcm1hdCA9
IGR4Z2lGb3JtYXQ7CisgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAg
IGRlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKKyAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDEx
X1VTQUdFX1NUQUdJTkc7CisgICAgICAgIGRlc2MuQmluZEZsYWdzID0gMDsKKyAgICAgICAgZGVz
Yy5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfUkVBRCB8IEQzRDExX0NQVV9BQ0NF
U1NfV1JJVEU7CisgICAgICAgIGRlc2MuTWlzY0ZsYWdzID0gMDsKKworICAgICAgICBIUkVTVUxU
IHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXNjLCBOVUxMLCAmbmV3VGV4dHVy
ZSk7CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAg
ICBBU1NFUlQocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgRVJSKCJDcmVh
dGluZyBpbWFnZSBmYWlsZWQuIik7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgfQorCisgICAgbVN0YWdpbmdUZXh0dXJlID0g
bmV3VGV4dHVyZTsKKyAgICBtU3RhZ2luZ1N1YnJlc291cmNlID0gRDNEMTFDYWxjU3VicmVzb3Vy
Y2UobG9kT2Zmc2V0LCAwLCBsb2RPZmZzZXQgKyAxKTsKKyAgICBtRGlydHkgPSBmYWxzZTsKKwor
ICAgIGlmIChtRFhHSUZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSAmJiBnbDo6
R2V0QWxwaGFTaXplKG1JbnRlcm5hbEZvcm1hdCkgPT0gMCkKKyAgICB7CisgICAgICAgIHVuc2ln
bmVkIGNoYXIgZGVmYXVsdFBpeGVsWzRdID0geyAwLCAwLCAwLCAyNTUgfTsKKyAgICAgICAgc2V0
RGVmYXVsdERhdGEobVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCksIG1TdGFnaW5nVGV4dHVy
ZSwgbVN0YWdpbmdTdWJyZXNvdXJjZSwgbVdpZHRoLCBtSGVpZ2h0LCBkZWZhdWx0UGl4ZWwpOwor
ICAgIH0KKyAgICBlbHNlIGlmIChtRFhHSUZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJB
MzJfRkxPQVQgJiYgZ2w6OkdldEFscGhhU2l6ZShtSW50ZXJuYWxGb3JtYXQpID09IDApCisgICAg
eworICAgICAgICBmbG9hdCBkZWZhdWx0UGl4ZWxbNF0gPSB7IDAuMGYsIDAuMGYsIDAuMGYsIDEu
MGYgfTsKKyAgICAgICAgc2V0RGVmYXVsdERhdGEobVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0
KCksIG1TdGFnaW5nVGV4dHVyZSwgbVN0YWdpbmdTdWJyZXNvdXJjZSwgbVdpZHRoLCBtSGVpZ2h0
LCBkZWZhdWx0UGl4ZWwpOworICAgIH0KK30KKworSFJFU1VMVCBJbWFnZTExOjptYXAoRDNEMTFf
TUFQIG1hcFR5cGUsIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSAqbWFwKQoreworICAgIGNyZWF0
ZVN0YWdpbmdUZXh0dXJlKCk7CisKKyAgICBIUkVTVUxUIHJlc3VsdCA9IEVfRkFJTDsKKworICAg
IGlmIChtU3RhZ2luZ1RleHR1cmUpCisgICAgeworICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0
ICpkZXZpY2VDb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisgICAgICAg
IHJlc3VsdCA9IGRldmljZUNvbnRleHQtPk1hcChtU3RhZ2luZ1RleHR1cmUsIG1TdGFnaW5nU3Vi
cmVzb3VyY2UsIG1hcFR5cGUsIDAsIG1hcCk7CisKKyAgICAgICAgLy8gdGhpcyBjYW4gZmFpbCBp
ZiB0aGUgZGV2aWNlIGlzIHJlbW92ZWQgKGZyb20gVERSKQorICAgICAgICBpZiAoZDNkMTE6Omlz
RGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1SZW5kZXJl
ci0+bm90aWZ5RGV2aWNlTG9zdCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKFNVQ0NF
RURFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBtRGlydHkgPSB0cnVlOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBJbWFnZTExOjp1
bm1hcCgpCit7CisgICAgaWYgKG1TdGFnaW5nVGV4dHVyZSkKKyAgICB7CisgICAgICAgIElEM0Qx
MURldmljZUNvbnRleHQgKmRldmljZUNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRl
eHQoKTsKKyAgICAgICAgZGV2aWNlQ29udGV4dC0+VW5tYXAobVN0YWdpbmdUZXh0dXJlLCBtU3Rh
Z2luZ1N1YnJlc291cmNlKTsKKyAgICB9Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW1hZ2UxMS5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbWFnZTEx
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMTFhNjQ5MmRjODYzYTkxNjQxOWI1YmNkMTY0Y2E3ZDdiYjVkOTVkYgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvSW1hZ2UxMS5oCkBAIC0wLDAgKzEsNzYgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisvLyBJbWFnZTExLmg6IERlZmluZXMgdGhlIHJ4OjpJbWFnZTExIGNsYXNzLCB3aGljaCBhY3Rz
IGFzIHRoZSBpbnRlcmZhY2UgdG8KKy8vIHRoZSBhY3R1YWwgdW5kZXJseWluZyByZXNvdXJjZXMg
b2YgYSBUZXh0dXJlCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0lNQUdFMTFfSF8KKyNk
ZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX0lNQUdFMTFfSF8KKworI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9JbWFnZS5oIgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKK25hbWVz
cGFjZSBnbAoreworY2xhc3MgRnJhbWVidWZmZXI7Cit9CisKK25hbWVzcGFjZSByeAoreworY2xh
c3MgUmVuZGVyZXI7CitjbGFzcyBSZW5kZXJlcjExOworY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UyRDsKK2NsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTsKKworY2xhc3MgSW1h
Z2UxMSA6IHB1YmxpYyBJbWFnZQoreworICBwdWJsaWM6CisgICAgSW1hZ2UxMSgpOworICAgIHZp
cnR1YWwgfkltYWdlMTEoKTsKKworICAgIHN0YXRpYyBJbWFnZTExICptYWtlSW1hZ2UxMShJbWFn
ZSAqaW1nKTsKKworICAgIHN0YXRpYyB2b2lkIGdlbmVyYXRlTWlwbWFwKEltYWdlMTEgKmRlc3Qs
IEltYWdlMTEgKnNyYyk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNEaXJ0eSgpIGNvbnN0OworCisg
ICAgdmlydHVhbCBib29sIHVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAq
c3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAgdmlydHVhbCBib29sIHVwZGF0ZVN1cmZhY2Uo
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgcmVkZWZpbmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBH
TGludCBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGJvb2wg
Zm9yY2VSZWxlYXNlKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlcmFibGVGb3JtYXQoKSBj
b25zdDsKKyAgICBEWEdJX0ZPUk1BVCBnZXREWEdJRm9ybWF0KCkgY29uc3Q7CisgICAgCisgICAg
dmlydHVhbCB2b2lkIGxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNr
QWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCk7CisgICAgdmlydHVhbCB2b2lkIGxvYWRDb21w
cmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHZvaWQgKmlucHV0KTsKKworICAgIHZpcnR1YWwgdm9pZCBjb3B5KEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSk7CisKKyAgcHJvdGVjdGVkOgorICAgIEhSRVNV
TFQgbWFwKEQzRDExX01BUCBtYXBUeXBlLCBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgKm1hcCk7
CisgICAgdm9pZCB1bm1hcCgpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRf
QVNTSUdOKEltYWdlMTEpOworCisgICAgSUQzRDExVGV4dHVyZTJEICpnZXRTdGFnaW5nVGV4dHVy
ZSgpOworICAgIHVuc2lnbmVkIGludCBnZXRTdGFnaW5nU3VicmVzb3VyY2UoKTsKKyAgICB2b2lk
IGNyZWF0ZVN0YWdpbmdUZXh0dXJlKCk7CisKKyAgICBSZW5kZXJlcjExICptUmVuZGVyZXI7CisK
KyAgICBEWEdJX0ZPUk1BVCBtRFhHSUZvcm1hdDsKKyAgICBJRDNEMTFUZXh0dXJlMkQgKm1TdGFn
aW5nVGV4dHVyZTsKKyAgICB1bnNpZ25lZCBpbnQgbVN0YWdpbmdTdWJyZXNvdXJjZTsKK307CisK
K30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9JTUFHRTExX0hfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0lu
ZGV4QnVmZmVyMTEuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9JbmRleEJ1ZmZlcjExLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NGY5OTc2ZDQzZDFk
YjRjYTQwMDJkNDc1YjlmNjE1NDRiZmMzMjA3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbmRleEJ1ZmZlcjEx
LmNwcApAQCAtMCwwICsxLDE4MyBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworLy8gSW5kZXhCdWZmZXIxMS5jcHA6IERlZmluZXMgdGhlIEQzRDExIEluZGV4QnVm
ZmVyIGltcGxlbWVudGF0aW9uLgorCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L0luZGV4QnVmZmVyMTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVu
ZGVyZXIxMS5oIgorCituYW1lc3BhY2UgcngKK3sKKworSW5kZXhCdWZmZXIxMTo6SW5kZXhCdWZm
ZXIxMShSZW5kZXJlcjExICpjb25zdCByZW5kZXJlcikgOiBtUmVuZGVyZXIocmVuZGVyZXIpCit7
CisgICAgbUJ1ZmZlciA9IE5VTEw7CisgICAgbUJ1ZmZlclNpemUgPSAwOworICAgIG1EeW5hbWlj
VXNhZ2UgPSBmYWxzZTsKK30KKworSW5kZXhCdWZmZXIxMTo6fkluZGV4QnVmZmVyMTEoKQorewor
ICAgIGlmIChtQnVmZmVyKQorICAgIHsKKyAgICAgICAgbUJ1ZmZlci0+UmVsZWFzZSgpOworICAg
ICAgICBtQnVmZmVyID0gTlVMTDsKKyAgICB9Cit9CisKK2Jvb2wgSW5kZXhCdWZmZXIxMTo6aW5p
dGlhbGl6ZSh1bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSwgR0xlbnVtIGluZGV4VHlwZSwgYm9vbCBk
eW5hbWljKQoreworICAgIGlmIChtQnVmZmVyKQorICAgIHsKKyAgICAgICAgbUJ1ZmZlci0+UmVs
ZWFzZSgpOworICAgICAgICBtQnVmZmVyID0gTlVMTDsKKyAgICB9CisKKyAgICB1cGRhdGVTZXJp
YWwoKTsKKworICAgIGlmIChidWZmZXJTaXplID4gMCkKKyAgICB7CisgICAgICAgIElEM0QxMURl
dmljZSogZHhEZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgIEQzRDEx
X0JVRkZFUl9ERVNDIGJ1ZmZlckRlc2M7CisgICAgICAgIGJ1ZmZlckRlc2MuQnl0ZVdpZHRoID0g
YnVmZmVyU2l6ZTsKKyAgICAgICAgYnVmZmVyRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZTkFN
SUM7CisgICAgICAgIGJ1ZmZlckRlc2MuQmluZEZsYWdzID0gRDNEMTFfQklORF9JTkRFWF9CVUZG
RVI7CisgICAgICAgIGJ1ZmZlckRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUNDRVNT
X1dSSVRFOworICAgICAgICBidWZmZXJEZXNjLk1pc2NGbGFncyA9IDA7CisgICAgICAgIGJ1ZmZl
ckRlc2MuU3RydWN0dXJlQnl0ZVN0cmlkZSA9IDA7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQg
PSBkeERldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJEZXNjLCBOVUxMLCAmbUJ1ZmZlcik7Cisg
ICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgbUJ1ZmZlclNpemUgPSBidWZmZXJTaXpl
OworICAgIG1JbmRleFR5cGUgPSBpbmRleFR5cGU7CisgICAgbUR5bmFtaWNVc2FnZSA9IGR5bmFt
aWM7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworSW5kZXhCdWZmZXIxMSAqSW5kZXhCdWZmZXIx
MTo6bWFrZUluZGV4QnVmZmVyMTEoSW5kZXhCdWZmZXIgKmluZGV4QnVmZmVyKQoreworICAgIEFT
U0VSVChIQVNfRFlOQU1JQ19UWVBFKEluZGV4QnVmZmVyMTEqLCBpbmRleEJ1ZmZlcikpOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxJbmRleEJ1ZmZlcjExKj4oaW5kZXhCdWZmZXIpOworfQorCiti
b29sIEluZGV4QnVmZmVyMTE6Om1hcEJ1ZmZlcih1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25l
ZCBpbnQgc2l6ZSwgdm9pZCoqIG91dE1hcHBlZE1lbW9yeSkKK3sKKyAgICBpZiAobUJ1ZmZlcikK
KyAgICB7CisgICAgICAgIC8vIENoZWNrIGZvciBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgb3V0LW91
dC1ib3VuZHMgbWFwIHJlcXVlc3RzCisgICAgICAgIGlmIChvZmZzZXQgKyBzaXplIDwgb2Zmc2V0
IHx8IG9mZnNldCArIHNpemUgPiBtQnVmZmVyU2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
RVJSKCJJbmRleCBidWZmZXIgbWFwIHJhbmdlIGlzIG5vdCBpbnNpZGUgdGhlIGJ1ZmZlci4iKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIElEM0QxMURl
dmljZUNvbnRleHQgKmR4Q29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwor
CisgICAgICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJjZTsKKyAgICAg
ICAgSFJFU1VMVCByZXN1bHQgPSBkeENvbnRleHQtPk1hcChtQnVmZmVyLCAwLCBEM0QxMV9NQVBf
V1JJVEVfTk9fT1ZFUldSSVRFLCAwLCAmbWFwcGVkUmVzb3VyY2UpOworICAgICAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiSW5kZXggYnVmZmVyIG1h
cCBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgiLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgKm91dE1hcHBlZE1lbW9yeSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KG1hcHBlZFJlc291cmNlLnBEYXRhKSArIG9mZnNldDsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEVSUigiSW5kZXgg
YnVmZmVyIG5vdCBpbml0aWFsaXplZC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworYm9vbCBJbmRleEJ1ZmZlcjExOjp1bm1hcEJ1ZmZlcigpCit7CisgICAgaWYgKG1CdWZm
ZXIpCisgICAgeworICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpkeENvbnRleHQgPSBtUmVu
ZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKKyAgICAgICAgZHhDb250ZXh0LT5Vbm1hcChtQnVm
ZmVyLCAwKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIEVSUigiSW5kZXggYnVmZmVyIG5vdCBpbml0aWFsaXplZC4iKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KK30KKworR0xlbnVtIEluZGV4QnVmZmVyMTE6OmdldEluZGV4VHlw
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1JbmRleFR5cGU7Cit9CisKK3Vuc2lnbmVkIGludCBJ
bmRleEJ1ZmZlcjExOjpnZXRCdWZmZXJTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUJ1ZmZl
clNpemU7Cit9CisKK2Jvb2wgSW5kZXhCdWZmZXIxMTo6c2V0U2l6ZSh1bnNpZ25lZCBpbnQgYnVm
ZmVyU2l6ZSwgR0xlbnVtIGluZGV4VHlwZSkKK3sKKyAgICBpZiAoYnVmZmVyU2l6ZSA+IG1CdWZm
ZXJTaXplIHx8IGluZGV4VHlwZSAhPSBtSW5kZXhUeXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGluaXRpYWxpemUoYnVmZmVyU2l6ZSwgaW5kZXhUeXBlLCBtRHluYW1pY1VzYWdlKTsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQorCitib29s
IEluZGV4QnVmZmVyMTE6OmRpc2NhcmQoKQoreworICAgIGlmIChtQnVmZmVyKQorICAgIHsKKyAg
ICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqZHhDb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZp
Y2VDb250ZXh0KCk7CisKKyAgICAgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJl
c291cmNlOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGR4Q29udGV4dC0+TWFwKG1CdWZmZXIs
IDAsIEQzRDExX01BUF9XUklURV9ESVNDQVJELCAwLCAmbWFwcGVkUmVzb3VyY2UpOworICAgICAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiSW5kZXgg
YnVmZmVyIG1hcCBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgiLCByZXN1bHQpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgZHhDb250ZXh0LT5Vbm1hcCht
QnVmZmVyLCAwKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgRVJSKCJJbmRleCBidWZmZXIgbm90IGluaXRpYWxpemVkLiIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitEWEdJX0ZPUk1BVCBJbmRleEJ1ZmZlcjExOjpn
ZXRJbmRleEZvcm1hdCgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtSW5kZXhUeXBlKQorICAgIHsK
KyAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURTogICAgcmV0dXJuIERYR0lfRk9STUFUX1IxNl9V
SU5UOworICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDogICByZXR1cm4gRFhHSV9GT1JNQVRf
UjE2X1VJTlQ7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDogICAgIHJldHVybiBEWEdJX0ZP
Uk1BVF9SMzJfVUlOVDsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgcmV0dXJuIERY
R0lfRk9STUFUX1VOS05PV047CisgICAgfQorfQorCitJRDNEMTFCdWZmZXIgKkluZGV4QnVmZmVy
MTE6OmdldEJ1ZmZlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1CdWZmZXI7Cit9CisKK30KXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0luZGV4QnVmZmVyMTEuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5kZXhCdWZm
ZXIxMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjM5YTYxOTQ2YWQ2ZWY4OTJjNGNhNjZiNjA3ZTY1OWEzNWNjMDlk
ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL0luZGV4QnVmZmVyMTEuaApAQCAtMCwwICsxLDUzIEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworLy8gSW5kZXhCdWZmZXIxMS5oOiBEZWZpbmVzIHRoZSBEM0QxMSBJbmRleEJ1
ZmZlciBpbXBsZW1lbnRhdGlvbi4KKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfSU5ERVhC
VUZGRVIxMV9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfSU5ERVhCVUZGRVIxMV9IXwor
CisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0luZGV4QnVmZmVyLmgiCisKK25hbWVzcGFj
ZSByeAoreworY2xhc3MgUmVuZGVyZXIxMTsKKworY2xhc3MgSW5kZXhCdWZmZXIxMSA6IHB1Ymxp
YyBJbmRleEJ1ZmZlcgoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgSW5kZXhCdWZmZXIxMShS
ZW5kZXJlcjExICpjb25zdCByZW5kZXJlcik7CisgICAgdmlydHVhbCB+SW5kZXhCdWZmZXIxMSgp
OworCisgICAgdmlydHVhbCBib29sIGluaXRpYWxpemUodW5zaWduZWQgaW50IGJ1ZmZlclNpemUs
IEdMZW51bSBpbmRleFR5cGUsIGJvb2wgZHluYW1pYyk7CisKKyAgICBzdGF0aWMgSW5kZXhCdWZm
ZXIxMSAqbWFrZUluZGV4QnVmZmVyMTEoSW5kZXhCdWZmZXIgKmluZGV4QnVmZmVyKTsKKworICAg
IHZpcnR1YWwgYm9vbCBtYXBCdWZmZXIodW5zaWduZWQgaW50IG9mZnNldCwgdW5zaWduZWQgaW50
IHNpemUsIHZvaWQqKiBvdXRNYXBwZWRNZW1vcnkpOworICAgIHZpcnR1YWwgYm9vbCB1bm1hcEJ1
ZmZlcigpOworCisgICAgdmlydHVhbCBHTGVudW0gZ2V0SW5kZXhUeXBlKCkgY29uc3Q7CisgICAg
dmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0QnVmZmVyU2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwg
Ym9vbCBzZXRTaXplKHVuc2lnbmVkIGludCBidWZmZXJTaXplLCBHTGVudW0gaW5kZXhUeXBlKTsK
KworICAgIHZpcnR1YWwgYm9vbCBkaXNjYXJkKCk7CisKKyAgICBEWEdJX0ZPUk1BVCBnZXRJbmRl
eEZvcm1hdCgpIGNvbnN0OworICAgIElEM0QxMUJ1ZmZlciAqZ2V0QnVmZmVyKCkgY29uc3Q7CisK
KyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oSW5kZXhCdWZmZXIxMSk7
CisKKyAgICByeDo6UmVuZGVyZXIxMSAqY29uc3QgbVJlbmRlcmVyOworCisgICAgSUQzRDExQnVm
ZmVyICptQnVmZmVyOworICAgIHVuc2lnbmVkIGludCBtQnVmZmVyU2l6ZTsKKyAgICBHTGVudW0g
bUluZGV4VHlwZTsKKyAgICBib29sIG1EeW5hbWljVXNhZ2U7Cit9OworCit9CisKKyNlbmRpZiAv
LyBMSUJHTEVTVjJfUkVOREVSRVJfSU5ERVhCVUZGRVIxMV9IXwpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkMTEvSW5wdXRMYXlvdXRDYWNoZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjM0MThlODk0MmM4ODVkYjdjZjIyZjE2NjcxZThiYWViMzBhMGUyNTkKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuY3BwCkBAIC0wLDAgKzEsMjEzIEBACisjaW5j
bHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBJbnB1dExheW91dENhY2hl
LmNwcDogRGVmaW5lcyBJbnB1dExheW91dENhY2hlLCBhIGNsYXNzIHRoYXQgYnVpbGRzIGFuZCBj
YWNoZXMKKy8vIEQzRDExIGlucHV0IGxheW91dHMuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvSW5wdXRMYXlvdXRDYWNoZS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9WZXJ0ZXhCdWZmZXIxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9CdWZmZXJTdG9yYWdlMTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
ZDNkMTEvU2hhZGVyRXhlY3V0YWJsZTExLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1C
aW5hcnkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9WZXJ0ZXhEYXRhTWFuYWdlci5oIgorCisjaW5jbHVkZSAidGhpcmRfcGFy
dHkvbXVybXVyaGFzaC9NdXJtdXJIYXNoMy5oIgorCituYW1lc3BhY2UgcngKK3sKKworY29uc3Qg
dW5zaWduZWQgaW50IElucHV0TGF5b3V0Q2FjaGU6OmtNYXhJbnB1dExheW91dHMgPSAxMDI0Owor
CitJbnB1dExheW91dENhY2hlOjpJbnB1dExheW91dENhY2hlKCkgOiBtSW5wdXRMYXlvdXRNYXAo
a01heElucHV0TGF5b3V0cywgaGFzaElucHV0TGF5b3V0LCBjb21wYXJlSW5wdXRMYXlvdXRzKQor
eworICAgIG1Db3VudGVyID0gMDsKKyAgICBtRGV2aWNlID0gTlVMTDsKKyAgICBtRGV2aWNlQ29u
dGV4dCA9IE5VTEw7CisgICAgbUN1cnJlbnRJTCA9IE5VTEw7CisgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgeworICAgICAg
ICBtQ3VycmVudEJ1ZmZlcnNbaV0gPSAtMTsKKyAgICAgICAgbUN1cnJlbnRWZXJ0ZXhTdHJpZGVz
W2ldID0gLTE7CisgICAgICAgIG1DdXJyZW50VmVydGV4T2Zmc2V0c1tpXSA9IC0xOworICAgIH0K
K30KKworSW5wdXRMYXlvdXRDYWNoZTo6fklucHV0TGF5b3V0Q2FjaGUoKQoreworICAgIGNsZWFy
KCk7Cit9CisKK3ZvaWQgSW5wdXRMYXlvdXRDYWNoZTo6aW5pdGlhbGl6ZShJRDNEMTFEZXZpY2Ug
KmRldmljZSwgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCkKK3sKKyAgICBjbGVhcigpOwor
ICAgIG1EZXZpY2UgPSBkZXZpY2U7CisgICAgbURldmljZUNvbnRleHQgPSBjb250ZXh0OworfQor
Cit2b2lkIElucHV0TGF5b3V0Q2FjaGU6OmNsZWFyKCkKK3sKKyAgICBmb3IgKElucHV0TGF5b3V0
TWFwOjppdGVyYXRvciBpID0gbUlucHV0TGF5b3V0TWFwLmJlZ2luKCk7IGkgIT0gbUlucHV0TGF5
b3V0TWFwLmVuZCgpOyBpKyspCisgICAgeworICAgICAgICBpLT5zZWNvbmQuaW5wdXRMYXlvdXQt
PlJlbGVhc2UoKTsKKyAgICB9CisgICAgbUlucHV0TGF5b3V0TWFwLmNsZWFyKCk7CisgICAgbWFy
a0RpcnR5KCk7Cit9CisKK3ZvaWQgSW5wdXRMYXlvdXRDYWNoZTo6bWFya0RpcnR5KCkKK3sKKyAg
ICBtQ3VycmVudElMID0gTlVMTDsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGds
OjpNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKKyAgICB7CisgICAgICAgIG1DdXJyZW50QnVmZmVy
c1tpXSA9IC0xOworICAgICAgICBtQ3VycmVudFZlcnRleFN0cmlkZXNbaV0gPSAtMTsKKyAgICAg
ICAgbUN1cnJlbnRWZXJ0ZXhPZmZzZXRzW2ldID0gLTE7CisgICAgfQorfQorCitHTGVudW0gSW5w
dXRMYXlvdXRDYWNoZTo6YXBwbHlWZXJ0ZXhCdWZmZXJzKFRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0
cmlidXRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpCit7
CisgICAgaW50IHNvcnRlZFNlbWFudGljSW5kaWNlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsK
KyAgICBwcm9ncmFtQmluYXJ5LT5zb3J0QXR0cmlidXRlc0J5TGF5b3V0KGF0dHJpYnV0ZXMsIHNv
cnRlZFNlbWFudGljSW5kaWNlcyk7CisKKyAgICBpZiAoIW1EZXZpY2UgfHwgIW1EZXZpY2VDb250
ZXh0KQorICAgIHsKKyAgICAgICAgRVJSKCJJbnB1dExheW91dENhY2hlIGlzIG5vdCBpbml0aWFs
aXplZC4iKTsKKyAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOworICAgIH0KKwor
ICAgIElucHV0TGF5b3V0S2V5IGlsS2V5ID0geyAwIH07CisKKyAgICBJRDNEMTFCdWZmZXIgKnZl
cnRleEJ1ZmZlcnNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10gPSB7IE5VTEwgfTsKKyAgICB1bnNp
Z25lZCBpbnQgdmVydGV4QnVmZmVyU2VyaWFsc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSA9IHsg
MCB9OworICAgIFVJTlQgdmVydGV4U3RyaWRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSA9IHsg
MCB9OworICAgIFVJTlQgdmVydGV4T2Zmc2V0c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSA9IHsg
MCB9OworCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHNlbWFudGljTmFtZSA9ICJURVhDT09SRCI7
CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJ
QlM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmFjdGl2ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgVmVydGV4QnVmZmVyMTEgKnZlcnRleEJ1ZmZlciA9IFZlcnRleEJ1
ZmZlcjExOjptYWtlVmVydGV4QnVmZmVyMTEoYXR0cmlidXRlc1tpXS52ZXJ0ZXhCdWZmZXIpOwor
ICAgICAgICAgICAgQnVmZmVyU3RvcmFnZTExICpidWZmZXJTdG9yYWdlID0gYXR0cmlidXRlc1tp
XS5zdG9yYWdlID8gQnVmZmVyU3RvcmFnZTExOjptYWtlQnVmZmVyU3RvcmFnZTExKGF0dHJpYnV0
ZXNbaV0uc3RvcmFnZSkgOiBOVUxMOworCisgICAgICAgICAgICBEM0QxMV9JTlBVVF9DTEFTU0lG
SUNBVElPTiBpbnB1dENsYXNzID0gYXR0cmlidXRlc1tpXS5kaXZpc29yID4gMCA/IEQzRDExX0lO
UFVUX1BFUl9JTlNUQU5DRV9EQVRBIDogRDNEMTFfSU5QVVRfUEVSX1ZFUlRFWF9EQVRBOworCisg
ICAgICAgICAgICAvLyBSZWNvcmQgdGhlIHR5cGUgb2YgdGhlIGFzc29jaWF0ZWQgdmVydGV4IHNo
YWRlciB2ZWN0b3IgaW4gb3VyIGtleQorICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHByZXZlbnQg
bWlzbWF0Y2hlZCB2ZXJ0ZXggc2hhZGVycyBmcm9tIHVzaW5nIHRoZSBzYW1lIGlucHV0IGxheW91
dAorICAgICAgICAgICAgR0xpbnQgYXR0cmlidXRlU2l6ZTsKKyAgICAgICAgICAgIHByb2dyYW1C
aW5hcnktPmdldEFjdGl2ZUF0dHJpYnV0ZShpbEtleS5lbGVtZW50Q291bnQsIDAsIE5VTEwsICZh
dHRyaWJ1dGVTaXplLCAmaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5nbHNsRWxl
bWVudFR5cGUsIE5VTEwpOworCisgICAgICAgICAgICBpbEtleS5lbGVtZW50c1tpbEtleS5lbGVt
ZW50Q291bnRdLmRlc2MuU2VtYW50aWNOYW1lID0gc2VtYW50aWNOYW1lOworICAgICAgICAgICAg
aWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5kZXNjLlNlbWFudGljSW5kZXggPSBz
b3J0ZWRTZW1hbnRpY0luZGljZXNbaV07CisgICAgICAgICAgICBpbEtleS5lbGVtZW50c1tpbEtl
eS5lbGVtZW50Q291bnRdLmRlc2MuRm9ybWF0ID0gYXR0cmlidXRlc1tpXS5hdHRyaWJ1dGUtPm1B
cnJheUVuYWJsZWQgPyB2ZXJ0ZXhCdWZmZXItPmdldERYR0lGb3JtYXQoKmF0dHJpYnV0ZXNbaV0u
YXR0cmlidXRlKSA6IERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDsKKyAgICAgICAgICAg
IGlsS2V5LmVsZW1lbnRzW2lsS2V5LmVsZW1lbnRDb3VudF0uZGVzYy5JbnB1dFNsb3QgPSBpOwor
ICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5kZXNjLkFsaWdu
ZWRCeXRlT2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIGlsS2V5LmVsZW1lbnRzW2lsS2V5LmVsZW1l
bnRDb3VudF0uZGVzYy5JbnB1dFNsb3RDbGFzcyA9IGlucHV0Q2xhc3M7CisgICAgICAgICAgICBp
bEtleS5lbGVtZW50c1tpbEtleS5lbGVtZW50Q291bnRdLmRlc2MuSW5zdGFuY2VEYXRhU3RlcFJh
dGUgPSBhdHRyaWJ1dGVzW2ldLmRpdmlzb3I7CisgICAgICAgICAgICBpbEtleS5lbGVtZW50Q291
bnQrKzsKKworICAgICAgICAgICAgdmVydGV4QnVmZmVyc1tpXSA9IGJ1ZmZlclN0b3JhZ2UgPyBi
dWZmZXJTdG9yYWdlLT5nZXRCdWZmZXIoQlVGRkVSX1VTQUdFX1ZFUlRFWCkgOiB2ZXJ0ZXhCdWZm
ZXItPmdldEJ1ZmZlcigpOworICAgICAgICAgICAgdmVydGV4QnVmZmVyU2VyaWFsc1tpXSA9IGJ1
ZmZlclN0b3JhZ2UgPyBidWZmZXJTdG9yYWdlLT5nZXRTZXJpYWwoKSA6IHZlcnRleEJ1ZmZlci0+
Z2V0U2VyaWFsKCk7CisgICAgICAgICAgICB2ZXJ0ZXhTdHJpZGVzW2ldID0gYXR0cmlidXRlc1tp
XS5zdHJpZGU7CisgICAgICAgICAgICB2ZXJ0ZXhPZmZzZXRzW2ldID0gYXR0cmlidXRlc1tpXS5v
ZmZzZXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBJRDNEMTFJbnB1dExheW91dCAqaW5wdXRM
YXlvdXQgPSBOVUxMOworCisgICAgSW5wdXRMYXlvdXRNYXA6Oml0ZXJhdG9yIGkgPSBtSW5wdXRM
YXlvdXRNYXAuZmluZChpbEtleSk7CisgICAgaWYgKGkgIT0gbUlucHV0TGF5b3V0TWFwLmVuZCgp
KQorICAgIHsKKyAgICAgICAgaW5wdXRMYXlvdXQgPSBpLT5zZWNvbmQuaW5wdXRMYXlvdXQ7Cisg
ICAgICAgIGktPnNlY29uZC5sYXN0VXNlZFRpbWUgPSBtQ291bnRlcisrOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBTaGFkZXJFeGVjdXRhYmxlMTEgKnNoYWRlciA9IFNoYWRlckV4
ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0
ZXhFeGVjdXRhYmxlKCkpOworCisgICAgICAgIEQzRDExX0lOUFVUX0VMRU1FTlRfREVTQyBkZXNj
c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9
IDA7IGogPCBpbEtleS5lbGVtZW50Q291bnQ7ICsraikKKyAgICAgICAgeworICAgICAgICAgICAg
ZGVzY3Nbal0gPSBpbEtleS5lbGVtZW50c1tqXS5kZXNjOworICAgICAgICB9CisKKyAgICAgICAg
SFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVJbnB1dExheW91dChkZXNjcywgaWxLZXku
ZWxlbWVudENvdW50LCBzaGFkZXItPmdldEZ1bmN0aW9uKCksIHNoYWRlci0+Z2V0TGVuZ3RoKCks
ICZpbnB1dExheW91dCk7CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgewor
ICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gY3JhdGUgaW5wdXQgbGF5b3V0LCByZXN1bHQ6IDB4
JTA4eCIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047
CisgICAgICAgIH0KKworICAgICAgICBpZiAobUlucHV0TGF5b3V0TWFwLnNpemUoKSA+PSBrTWF4
SW5wdXRMYXlvdXRzKQorICAgICAgICB7CisgICAgICAgICAgICBUUkFDRSgiT3ZlcmZsb3dlZCB0
aGUgbGltaXQgb2YgJXUgaW5wdXQgbGF5b3V0cywgcmVtb3ZpbmcgdGhlIGxlYXN0IHJlY2VudGx5
IHVzZWQgIgorICAgICAgICAgICAgICAgICAgInRvIG1ha2Ugcm9vbS4iLCBrTWF4SW5wdXRMYXlv
dXRzKTsKKworICAgICAgICAgICAgSW5wdXRMYXlvdXRNYXA6Oml0ZXJhdG9yIGxlYXN0UmVjZW50
bHlVc2VkID0gbUlucHV0TGF5b3V0TWFwLmJlZ2luKCk7CisgICAgICAgICAgICBmb3IgKElucHV0
TGF5b3V0TWFwOjppdGVyYXRvciBpID0gbUlucHV0TGF5b3V0TWFwLmJlZ2luKCk7IGkgIT0gbUlu
cHV0TGF5b3V0TWFwLmVuZCgpOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aWYgKGktPnNlY29uZC5sYXN0VXNlZFRpbWUgPCBsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmxh
c3RVc2VkVGltZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGxlYXN0
UmVjZW50bHlVc2VkID0gaTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmlucHV0TGF5b3V0LT5SZWxlYXNlKCk7
CisgICAgICAgICAgICBtSW5wdXRMYXlvdXRNYXAuZXJhc2UobGVhc3RSZWNlbnRseVVzZWQpOwor
ICAgICAgICB9CisKKyAgICAgICAgSW5wdXRMYXlvdXRDb3VudGVyUGFpciBpbnB1dENvdW50ZXJQ
YWlyOworICAgICAgICBpbnB1dENvdW50ZXJQYWlyLmlucHV0TGF5b3V0ID0gaW5wdXRMYXlvdXQ7
CisgICAgICAgIGlucHV0Q291bnRlclBhaXIubGFzdFVzZWRUaW1lID0gbUNvdW50ZXIrKzsKKwor
ICAgICAgICBtSW5wdXRMYXlvdXRNYXAuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGlsS2V5LCBpbnB1
dENvdW50ZXJQYWlyKSk7CisgICAgfQorCisgICAgaWYgKGlucHV0TGF5b3V0ICE9IG1DdXJyZW50
SUwpCisgICAgeworICAgICAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRJbnB1dExheW91dChpbnB1
dExheW91dCk7CisgICAgICAgIG1DdXJyZW50SUwgPSBpbnB1dExheW91dDsKKyAgICB9CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGkr
KykKKyAgICB7CisgICAgICAgIGlmICh2ZXJ0ZXhCdWZmZXJTZXJpYWxzW2ldICE9IG1DdXJyZW50
QnVmZmVyc1tpXSB8fCB2ZXJ0ZXhTdHJpZGVzW2ldICE9IG1DdXJyZW50VmVydGV4U3RyaWRlc1tp
XSB8fAorICAgICAgICAgICAgdmVydGV4T2Zmc2V0c1tpXSAhPSBtQ3VycmVudFZlcnRleE9mZnNl
dHNbaV0pCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldFZlcnRl
eEJ1ZmZlcnMoaSwgMSwgJnZlcnRleEJ1ZmZlcnNbaV0sICZ2ZXJ0ZXhTdHJpZGVzW2ldLCAmdmVy
dGV4T2Zmc2V0c1tpXSk7CisgICAgICAgICAgICBtQ3VycmVudEJ1ZmZlcnNbaV0gPSB2ZXJ0ZXhC
dWZmZXJTZXJpYWxzW2ldOworICAgICAgICAgICAgbUN1cnJlbnRWZXJ0ZXhTdHJpZGVzW2ldID0g
dmVydGV4U3RyaWRlc1tpXTsKKyAgICAgICAgICAgIG1DdXJyZW50VmVydGV4T2Zmc2V0c1tpXSA9
IHZlcnRleE9mZnNldHNbaV07CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gR0xfTk9f
RVJST1I7Cit9CisKK3N0ZDo6c2l6ZV90IElucHV0TGF5b3V0Q2FjaGU6Omhhc2hJbnB1dExheW91
dChjb25zdCBJbnB1dExheW91dEtleSAmaW5wdXRMYXlvdXQpCit7CisgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGludCBzZWVkID0gMHhERUFEQkVFRjsKKworICAgIHN0ZDo6c2l6ZV90IGhhc2gg
PSAwOworICAgIE11cm11ckhhc2gzX3g4Nl8zMihpbnB1dExheW91dC5iZWdpbigpLCBpbnB1dExh
eW91dC5lbmQoKSAtIGlucHV0TGF5b3V0LmJlZ2luKCksIHNlZWQsICZoYXNoKTsKKyAgICByZXR1
cm4gaGFzaDsKK30KKworYm9vbCBJbnB1dExheW91dENhY2hlOjpjb21wYXJlSW5wdXRMYXlvdXRz
KGNvbnN0IElucHV0TGF5b3V0S2V5ICZhLCBjb25zdCBJbnB1dExheW91dEtleSAmYikKK3sKKyAg
ICBpZiAoYS5lbGVtZW50Q291bnQgIT0gYi5lbGVtZW50Q291bnQpCisgICAgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHN0ZDo6ZXF1YWwoYS5iZWdpbigpLCBh
LmVuZCgpLCBiLmJlZ2luKCkpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5w
dXRMYXlvdXRDYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiMWE4ZWViY2Y3YTZjYTk5MGNhYjkzODI1NThm
MzM5NzgxNDdhMDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuaApAQCAtMCwwICsx
LDk1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gSW5wdXRMYXlvdXRDYWNoZS5oOiBEZWZpbmVzIElu
cHV0TGF5b3V0Q2FjaGUsIGEgY2xhc3MgdGhhdCBidWlsZHMgYW5kIGNhY2hlcworLy8gRDNEMTEg
aW5wdXQgbGF5b3V0cy4KKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfSU5QVVRMQVlPVVRD
QUNIRV9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfSU5QVVRMQVlPVVRDQUNIRV9IXwor
CisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnN0YW50cy5oIgorI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCisKK25hbWVzcGFjZSBnbAoreworY2xhc3MgUHJvZ3JhbUJpbmFyeTsKK30KKwor
bmFtZXNwYWNlIHJ4Cit7CitzdHJ1Y3QgVHJhbnNsYXRlZEF0dHJpYnV0ZTsKKworY2xhc3MgSW5w
dXRMYXlvdXRDYWNoZQoreworICBwdWJsaWM6CisgICAgSW5wdXRMYXlvdXRDYWNoZSgpOworICAg
IHZpcnR1YWwgfklucHV0TGF5b3V0Q2FjaGUoKTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZShJRDNE
MTFEZXZpY2UgKmRldmljZSwgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCk7CisgICAgdm9p
ZCBjbGVhcigpOworICAgIHZvaWQgbWFya0RpcnR5KCk7CisKKyAgICBHTGVudW0gYXBwbHlWZXJ0
ZXhCdWZmZXJzKFRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0cmlidXRlc1tnbDo6TUFYX1ZFUlRFWF9B
VFRSSUJTXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5
ICpwcm9ncmFtQmluYXJ5KTsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihJbnB1dExheW91dENhY2hlKTsKKworICAgIHN0cnVjdCBJbnB1dExheW91dEVsZW1lbnQK
KyAgICB7CisgICAgICAgIEQzRDExX0lOUFVUX0VMRU1FTlRfREVTQyBkZXNjOworICAgICAgICBH
TGVudW0gZ2xzbEVsZW1lbnRUeXBlOworICAgIH07CisKKyAgICBzdHJ1Y3QgSW5wdXRMYXlvdXRL
ZXkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBlbGVtZW50Q291bnQ7CisgICAgICAgIElu
cHV0TGF5b3V0RWxlbWVudCBlbGVtZW50c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKworICAg
ICAgICBjb25zdCBjaGFyICpiZWdpbigpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigmZWxlbWVudENvdW50KTsKKyAgICAg
ICAgfQorCisgICAgICAgIGNvbnN0IGNoYXIgKmVuZCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigmZWxlbWVudHNbZWxl
bWVudENvdW50XSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgc3RydWN0IElucHV0TGF5b3V0
Q291bnRlclBhaXIKKyAgICB7CisgICAgICAgIElEM0QxMUlucHV0TGF5b3V0ICppbnB1dExheW91
dDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGxhc3RVc2VkVGltZTsKKyAgICB9OworCisg
ICAgSUQzRDExSW5wdXRMYXlvdXQgKm1DdXJyZW50SUw7CisgICAgdW5zaWduZWQgaW50IG1DdXJy
ZW50QnVmZmVyc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICBVSU5UIG1DdXJyZW50VmVy
dGV4U3RyaWRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICBVSU5UIG1DdXJyZW50VmVy
dGV4T2Zmc2V0c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKworICAgIHN0YXRpYyBzdGQ6OnNp
emVfdCBoYXNoSW5wdXRMYXlvdXQoY29uc3QgSW5wdXRMYXlvdXRLZXkgJmlucHV0TGF5b3V0KTsK
KyAgICBzdGF0aWMgYm9vbCBjb21wYXJlSW5wdXRMYXlvdXRzKGNvbnN0IElucHV0TGF5b3V0S2V5
ICZhLCBjb25zdCBJbnB1dExheW91dEtleSAmYik7CisKKyAgICB0eXBlZGVmIHN0ZDo6c2l6ZV90
ICgqSW5wdXRMYXlvdXRIYXNoRnVuY3Rpb24pKGNvbnN0IElucHV0TGF5b3V0S2V5ICYpOworICAg
IHR5cGVkZWYgYm9vbCAoKklucHV0TGF5b3V0RXF1YWxpdHlGdW5jdGlvbikoY29uc3QgSW5wdXRM
YXlvdXRLZXkgJiwgY29uc3QgSW5wdXRMYXlvdXRLZXkgJik7CisgICAgdHlwZWRlZiBzdGQ6OnVu
b3JkZXJlZF9tYXA8SW5wdXRMYXlvdXRLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSW5wdXRMYXlvdXRDb3VudGVyUGFpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJbnB1dExheW91dEhhc2hGdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJbnB1dExheW91dEVxdWFsaXR5RnVuY3Rpb24+IElucHV0TGF5b3V0TWFwOworICAgIElucHV0
TGF5b3V0TWFwIG1JbnB1dExheW91dE1hcDsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBp
bnQga01heElucHV0TGF5b3V0czsKKworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBtQ291bnRlcjsK
KworICAgIElEM0QxMURldmljZSAqbURldmljZTsKKyAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpt
RGV2aWNlQ29udGV4dDsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9J
TlBVVExBWU9VVENBQ0hFX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1F1ZXJ5MTEuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9RdWVyeTExLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4yNGMwMzMwYTFlMmMyYTQ3OTE0YzM3OWZjNzM1OTE5MTU3NDJhMjMxCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9RdWVyeTExLmNwcApAQCAtMCwwICsxLDEyMiBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVk
LmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworLy8gUXVlcnkxMS5jcHA6IERlZmluZXMgdGhlIHJ4OjpRdWVy
eTExIGNsYXNzIHdoaWNoIGltcGxlbWVudHMgcng6OlF1ZXJ5SW1wbC4KKworI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9RdWVyeTExLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgor
CituYW1lc3BhY2UgcngKK3sKKworUXVlcnkxMTo6UXVlcnkxMShyeDo6UmVuZGVyZXIxMSAqcmVu
ZGVyZXIsIEdMZW51bSB0eXBlKSA6IFF1ZXJ5SW1wbCh0eXBlKQoreworICAgIG1SZW5kZXJlciA9
IHJlbmRlcmVyOworICAgIG1RdWVyeSA9IE5VTEw7Cit9CisKK1F1ZXJ5MTE6On5RdWVyeTExKCkK
K3sKKyAgICBpZiAobVF1ZXJ5KQorICAgIHsKKyAgICAgICAgbVF1ZXJ5LT5SZWxlYXNlKCk7Cisg
ICAgICAgIG1RdWVyeSA9IE5VTEw7CisgICAgfQorfQorCit2b2lkIFF1ZXJ5MTE6OmJlZ2luKCkK
K3sKKyAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCisgICAgeworICAgICAgICBEM0QxMV9RVUVSWV9E
RVNDIHF1ZXJ5RGVzYzsKKyAgICAgICAgcXVlcnlEZXNjLlF1ZXJ5ID0gRDNEMTFfUVVFUllfT0ND
TFVTSU9OOworICAgICAgICBxdWVyeURlc2MuTWlzY0ZsYWdzID0gMDsKKworICAgICAgICBpZiAo
RkFJTEVEKG1SZW5kZXJlci0+Z2V0RGV2aWNlKCktPkNyZWF0ZVF1ZXJ5KCZxdWVyeURlc2MsICZt
UXVlcnkpKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1SZW5kZXJlci0+Z2V0RGV2aWNl
Q29udGV4dCgpLT5CZWdpbihtUXVlcnkpOworfQorCit2b2lkIFF1ZXJ5MTE6OmVuZCgpCit7Cisg
ICAgaWYgKG1RdWVyeSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgfQorCisgICAgbVJlbmRlcmVyLT5nZXREZXZpY2VD
b250ZXh0KCktPkVuZChtUXVlcnkpOworCisgICAgbVN0YXR1cyA9IEdMX0ZBTFNFOworICAgIG1S
ZXN1bHQgPSBHTF9GQUxTRTsKK30KKworR0x1aW50IFF1ZXJ5MTE6OmdldFJlc3VsdCgpCit7Cisg
ICAgaWYgKG1RdWVyeSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgd2hpbGUgKCF0ZXN0UXVlcnko
KSkKKyAgICAgICAgeworICAgICAgICAgICAgU2xlZXAoMCk7CisgICAgICAgICAgICAvLyBleHBs
aWNpdGx5IGNoZWNrIGZvciBkZXZpY2UgbG9zcywgc29tZSBkcml2ZXJzIHNlZW0gdG8gcmV0dXJu
IFNfRkFMU0UKKyAgICAgICAgICAgIC8vIGlmIHRoZSBkZXZpY2UgaXMgbG9zdAorICAgICAgICAg
ICAgaWYgKG1SZW5kZXJlci0+dGVzdERldmljZUxvc3QodHJ1ZSkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAwKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBtUmVzdWx0OworfQor
CitHTGJvb2xlYW4gUXVlcnkxMTo6aXNSZXN1bHRBdmFpbGFibGUoKQoreworICAgIGlmIChtUXVl
cnkgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIHRlc3RRdWVyeSgpOworICAgIH0KKworICAgIHJl
dHVybiBtU3RhdHVzOworfQorCitHTGJvb2xlYW4gUXVlcnkxMTo6dGVzdFF1ZXJ5KCkKK3sKKyAg
ICBpZiAobVF1ZXJ5ICE9IE5VTEwgJiYgbVN0YXR1cyAhPSBHTF9UUlVFKQorICAgIHsKKyAgICAg
ICAgVUlOVDY0IG51bVBpeGVscyA9IDA7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVJlbmRl
cmVyLT5nZXREZXZpY2VDb250ZXh0KCktPkdldERhdGEobVF1ZXJ5LCAmbnVtUGl4ZWxzLCBzaXpl
b2YoVUlOVDY0KSwgMCk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gU19PSykKKyAgICAgICAgewor
ICAgICAgICAgICAgbVN0YXR1cyA9IEdMX1RSVUU7CisKKyAgICAgICAgICAgIHN3aXRjaCAoZ2V0
VHlwZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVT
X1BBU1NFRF9FWFQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NP
TlNFUlZBVElWRV9FWFQ6CisgICAgICAgICAgICAgICAgbVJlc3VsdCA9IChudW1QaXhlbHMgPiAw
KSA/IEdMX1RSVUUgOiBHTF9GQUxTRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG1SZW5kZXJlci0+dGVzdERldmljZUxv
c3QodHJ1ZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSwgR0xfVFJVRSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbVN0YXR1
czsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfVFJVRTsgLy8gcHJldmVudCBibG9ja2luZyB3aGVu
IHF1ZXJ5IGlzIG51bGwKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9RdWVyeTExLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1F1ZXJ5MTEuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wYTAzZGU3N2NhMzI4NTVkYmNkMTliMTNiYzQ0ZDk3ODM3OTRhNjc1Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9RdWVyeTExLmgKQEAgLTAsMCArMSw0MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAx
MyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFF1ZXJ5
MTEuaDogRGVmaW5lcyB0aGUgcng6OlF1ZXJ5MTEgY2xhc3Mgd2hpY2ggaW1wbGVtZW50cyByeDo6
UXVlcnlJbXBsLgorCisjaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9RVUVSWTExX0hfCisjZGVm
aW5lIExJQkdMRVNWMl9SRU5ERVJFUl9RVUVSWTExX0hfCisKKyNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvUXVlcnlJbXBsLmgiCisKK25hbWVzcGFjZSByeAoreworY2xhc3MgUmVuZGVyZXIx
MTsKKworY2xhc3MgUXVlcnkxMSA6IHB1YmxpYyBRdWVyeUltcGwKK3sKKyAgcHVibGljOgorICAg
IFF1ZXJ5MTEocng6OlJlbmRlcmVyMTEgKnJlbmRlcmVyLCBHTGVudW0gdHlwZSk7CisgICAgdmly
dHVhbCB+UXVlcnkxMSgpOworCisgICAgdm9pZCBiZWdpbigpOworICAgIHZvaWQgZW5kKCk7Cisg
ICAgR0x1aW50IGdldFJlc3VsdCgpOworICAgIEdMYm9vbGVhbiBpc1Jlc3VsdEF2YWlsYWJsZSgp
OworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFF1ZXJ5MTEpOwor
CisgICAgR0xib29sZWFuIHRlc3RRdWVyeSgpOworCisgICAgcng6OlJlbmRlcmVyMTEgKm1SZW5k
ZXJlcjsKKyAgICBJRDNEMTFRdWVyeSAqbVF1ZXJ5OworfTsKKworfQorCisjZW5kaWYgLy8gTElC
R0xFU1YyX1JFTkRFUkVSX1FVRVJZMTFfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyU3RhdGVDYWNoZS5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1Jl
bmRlclN0YXRlQ2FjaGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAwNDdlMDRlODE4MGFmOWYxYzJjMzE0MGE3
YjAzMmIzMmVhMjUwMDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclN0YXRlQ2FjaGUuY3BwCkBAIC0w
LDAgKzEsNDM4IEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKy8vIFJlbmRlclN0YXRlQ2FjaGUuY3BwOiBEZWZpbmVzIHJ4OjpSZW5kZXJTdGF0ZUNhY2hl
LCBhIGNhY2hlIG9mIERpcmVjdDNEIHJlbmRlcgorLy8gc3RhdGUgb2JqZWN0cy4KKworI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaCIKKworI2luY2x1
ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJi
dWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiY29t
bW9uL2RlYnVnLmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJtdXJIYXNo
My5oIgorCituYW1lc3BhY2UgcngKK3sKKworLy8gTVNETidzIGRvY3VtZW50YXRpb24gb2YgSUQz
RDExRGV2aWNlOjpDcmVhdGVCbGVuZFN0YXRlLCBJRDNEMTFEZXZpY2U6OkNyZWF0ZVJhc3Rlcml6
ZXJTdGF0ZSwKKy8vIElEM0QxMURldmljZTo6Q3JlYXRlRGVwdGhTdGVuY2lsU3RhdGUgYW5kIElE
M0QxMURldmljZTo6Q3JlYXRlU2FtcGxlclN0YXRlIGNsYWltcyB0aGUgbWF4aW11bQorLy8gbnVt
YmVyIG9mIHVuaXF1ZSBzdGF0ZXMgb2YgZWFjaCB0eXBlIGFuIGFwcGxpY2F0aW9uIGNhbiBjcmVh
dGUgaXMgNDA5NgorY29uc3QgdW5zaWduZWQgaW50IFJlbmRlclN0YXRlQ2FjaGU6OmtNYXhCbGVu
ZFN0YXRlcyA9IDQwOTY7Citjb25zdCB1bnNpZ25lZCBpbnQgUmVuZGVyU3RhdGVDYWNoZTo6a01h
eFJhc3Rlcml6ZXJTdGF0ZXMgPSA0MDk2OworY29uc3QgdW5zaWduZWQgaW50IFJlbmRlclN0YXRl
Q2FjaGU6OmtNYXhEZXB0aFN0ZW5jaWxTdGF0ZXMgPSA0MDk2OworY29uc3QgdW5zaWduZWQgaW50
IFJlbmRlclN0YXRlQ2FjaGU6OmtNYXhTYW1wbGVyU3RhdGVzID0gNDA5NjsKKworUmVuZGVyU3Rh
dGVDYWNoZTo6UmVuZGVyU3RhdGVDYWNoZSgpIDogbURldmljZShOVUxMKSwgbUNvdW50ZXIoMCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQmxlbmRTdGF0ZUNhY2hl
KGtNYXhCbGVuZFN0YXRlcywgaGFzaEJsZW5kU3RhdGUsIGNvbXBhcmVCbGVuZFN0YXRlcyksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUmFzdGVyaXplclN0YXRlQ2Fj
aGUoa01heFJhc3Rlcml6ZXJTdGF0ZXMsIGhhc2hSYXN0ZXJpemVyU3RhdGUsIGNvbXBhcmVSYXN0
ZXJpemVyU3RhdGVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1E
ZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlKGtNYXhEZXB0aFN0ZW5jaWxTdGF0ZXMsIGhhc2hEZXB0aFN0
ZW5jaWxTdGF0ZSwgY29tcGFyZURlcHRoU3RlbmNpbFN0YXRlcyksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtU2FtcGxlclN0YXRlQ2FjaGUoa01heFNhbXBsZXJTdGF0
ZXMsIGhhc2hTYW1wbGVyU3RhdGUsIGNvbXBhcmVTYW1wbGVyU3RhdGVzKQoreworfQorCitSZW5k
ZXJTdGF0ZUNhY2hlOjp+UmVuZGVyU3RhdGVDYWNoZSgpCit7CisgICAgY2xlYXIoKTsKK30KKwor
dm9pZCBSZW5kZXJTdGF0ZUNhY2hlOjppbml0aWFsaXplKElEM0QxMURldmljZSAqZGV2aWNlKQor
eworICAgIGNsZWFyKCk7CisgICAgbURldmljZSA9IGRldmljZTsKK30KKwordm9pZCBSZW5kZXJT
dGF0ZUNhY2hlOjpjbGVhcigpCit7CisgICAgZm9yIChCbGVuZFN0YXRlTWFwOjppdGVyYXRvciBp
ID0gbUJsZW5kU3RhdGVDYWNoZS5iZWdpbigpOyBpICE9IG1CbGVuZFN0YXRlQ2FjaGUuZW5kKCk7
IGkrKykKKyAgICB7CisgICAgICAgIGktPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOworICAgIH0K
KyAgICBtQmxlbmRTdGF0ZUNhY2hlLmNsZWFyKCk7CisKKyAgICBmb3IgKFJhc3Rlcml6ZXJTdGF0
ZU1hcDo6aXRlcmF0b3IgaSA9IG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5iZWdpbigpOyBpICE9IG1S
YXN0ZXJpemVyU3RhdGVDYWNoZS5lbmQoKTsgaSsrKQorICAgIHsKKyAgICAgICAgaS0+c2Vjb25k
LmZpcnN0LT5SZWxlYXNlKCk7CisgICAgfQorICAgIG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5jbGVh
cigpOworCisgICAgZm9yIChEZXB0aFN0ZW5jaWxTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1EZXB0
aFN0ZW5jaWxTdGF0ZUNhY2hlLmJlZ2luKCk7IGkgIT0gbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUu
ZW5kKCk7IGkrKykKKyAgICB7CisgICAgICAgIGktPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOwor
ICAgIH0KKyAgICBtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5jbGVhcigpOworCisgICAgZm9yIChT
YW1wbGVyU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtU2FtcGxlclN0YXRlQ2FjaGUuYmVnaW4oKTsg
aSAhPSBtU2FtcGxlclN0YXRlQ2FjaGUuZW5kKCk7IGkrKykKKyAgICB7CisgICAgICAgIGktPnNl
Y29uZC5maXJzdC0+UmVsZWFzZSgpOworICAgIH0KKyAgICBtU2FtcGxlclN0YXRlQ2FjaGUuY2xl
YXIoKTsKK30KKworc3RkOjpzaXplX3QgUmVuZGVyU3RhdGVDYWNoZTo6aGFzaEJsZW5kU3RhdGUo
Y29uc3QgQmxlbmRTdGF0ZUtleSAmYmxlbmRTdGF0ZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgaW50IHNlZWQgPSAweEFCQ0RFRjk4OworCisgICAgc3RkOjpzaXplX3QgaGFzaCA9IDA7
CisgICAgTXVybXVySGFzaDNfeDg2XzMyKCZibGVuZFN0YXRlLCBzaXplb2YoQmxlbmRTdGF0ZUtl
eSksIHNlZWQsICZoYXNoKTsKKyAgICByZXR1cm4gaGFzaDsKK30KKworYm9vbCBSZW5kZXJTdGF0
ZUNhY2hlOjpjb21wYXJlQmxlbmRTdGF0ZXMoY29uc3QgQmxlbmRTdGF0ZUtleSAmYSwgY29uc3Qg
QmxlbmRTdGF0ZUtleSAmYikKK3sKKyAgICByZXR1cm4gbWVtY21wKCZhLCAmYiwgc2l6ZW9mKGds
OjpCbGVuZFN0YXRlKSkgPT0gMDsKK30KKworSUQzRDExQmxlbmRTdGF0ZSAqUmVuZGVyU3RhdGVD
YWNoZTo6Z2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBn
bDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSkKK3sKKyAgICBpZiAoIW1EZXZpY2UpCisgICAgewor
ICAgICAgICBFUlIoIlJlbmRlclN0YXRlQ2FjaGUgaXMgbm90IGluaXRpYWxpemVkLiIpOworICAg
ICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBib29sIG1ydCA9IGZhbHNlOworCisgICAg
QmxlbmRTdGF0ZUtleSBrZXkgPSB7IDAgfTsKKyAgICBrZXkuYmxlbmRTdGF0ZSA9IGJsZW5kU3Rh
dGU7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBEM0QxMV9TSU1VTFRBTkVPVVNf
UkVOREVSX1RBUkdFVF9DT1VOVDsgaSsrKQorICAgIHsKKyAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZl
ciAqcmVuZGVyQnVmZmVyID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKGkpOworICAgICAg
ICBpZiAocmVuZGVyQnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaSA+IDApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbXJ0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgR0xlbnVtIGludGVybmFsRm9ybWF0ID0gcmVuZGVyQnVmZmVyLT5nZXRJ
bnRlcm5hbEZvcm1hdCgpOworICAgICAgICAgICAga2V5LnJ0Q2hhbm5lbHNbaV1bMF0gPSBnbDo6
R2V0UmVkU2l6ZShpbnRlcm5hbEZvcm1hdCkgPiAwOworICAgICAgICAgICAga2V5LnJ0Q2hhbm5l
bHNbaV1bMV0gPSBnbDo6R2V0R3JlZW5TaXplKGludGVybmFsRm9ybWF0KSA+IDA7CisgICAgICAg
ICAgICBrZXkucnRDaGFubmVsc1tpXVsyXSA9IGdsOjpHZXRCbHVlU2l6ZShpbnRlcm5hbEZvcm1h
dCkgPiAwOzsKKyAgICAgICAgICAgIGtleS5ydENoYW5uZWxzW2ldWzNdID0gZ2w6OkdldEFscGhh
U2l6ZShpbnRlcm5hbEZvcm1hdCkgPiAwOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAga2V5LnJ0Q2hhbm5lbHNbaV1bMF0gPSBmYWxzZTsKKyAgICAgICAg
ICAgIGtleS5ydENoYW5uZWxzW2ldWzFdID0gZmFsc2U7CisgICAgICAgICAgICBrZXkucnRDaGFu
bmVsc1tpXVsyXSA9IGZhbHNlOworICAgICAgICAgICAga2V5LnJ0Q2hhbm5lbHNbaV1bM10gPSBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEJsZW5kU3RhdGVNYXA6Oml0ZXJhdG9yIGkg
PSBtQmxlbmRTdGF0ZUNhY2hlLmZpbmQoa2V5KTsKKyAgICBpZiAoaSAhPSBtQmxlbmRTdGF0ZUNh
Y2hlLmVuZCgpKQorICAgIHsKKyAgICAgICAgQmxlbmRTdGF0ZUNvdW50ZXJQYWlyICZzdGF0ZSA9
IGktPnNlY29uZDsKKyAgICAgICAgc3RhdGUuc2Vjb25kID0gbUNvdW50ZXIrKzsKKyAgICAgICAg
cmV0dXJuIHN0YXRlLmZpcnN0OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAo
bUJsZW5kU3RhdGVDYWNoZS5zaXplKCkgPj0ga01heEJsZW5kU3RhdGVzKQorICAgICAgICB7Cisg
ICAgICAgICAgICBUUkFDRSgiT3ZlcmZsb3dlZCB0aGUgbGltaXQgb2YgJXUgYmxlbmQgc3RhdGVz
LCByZW1vdmluZyB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCAiCisgICAgICAgICAgICAgICAgICAi
dG8gbWFrZSByb29tLiIsIGtNYXhCbGVuZFN0YXRlcyk7CisKKyAgICAgICAgICAgIEJsZW5kU3Rh
dGVNYXA6Oml0ZXJhdG9yIGxlYXN0UmVjZW50bHlVc2VkID0gbUJsZW5kU3RhdGVDYWNoZS5iZWdp
bigpOworICAgICAgICAgICAgZm9yIChCbGVuZFN0YXRlTWFwOjppdGVyYXRvciBpID0gbUJsZW5k
U3RhdGVDYWNoZS5iZWdpbigpOyBpICE9IG1CbGVuZFN0YXRlQ2FjaGUuZW5kKCk7IGkrKykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaS0+c2Vjb25kLnNlY29uZCA8IGxlYXN0
UmVjZW50bHlVc2VkLT5zZWNvbmQuc2Vjb25kKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQgPSBpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuZmlyc3Qt
PlJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1CbGVuZFN0YXRlQ2FjaGUuZXJhc2UobGVhc3RSZWNl
bnRseVVzZWQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IGJsZW5kIHN0
YXRlIGFuZCBpbnNlcnQgaXQgaW50byB0aGUgY2FjaGUKKyAgICAgICAgRDNEMTFfQkxFTkRfREVT
QyBibGVuZERlc2MgPSB7IDAgfTsKKyAgICAgICAgYmxlbmREZXNjLkFscGhhVG9Db3ZlcmFnZUVu
YWJsZSA9IGJsZW5kU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlOworICAgICAgICBibGVuZERl
c2MuSW5kZXBlbmRlbnRCbGVuZEVuYWJsZSA9IG1ydCA/IFRSVUUgOiBGQUxTRTsKKworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEQzRDExX1NJTVVMVEFORU9VU19SRU5ERVJf
VEFSR0VUX0NPVU5UOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIEQzRDExX1JFTkRFUl9U
QVJHRVRfQkxFTkRfREVTQyAmcnRCbGVuZCA9IGJsZW5kRGVzYy5SZW5kZXJUYXJnZXRbaV07CisK
KyAgICAgICAgICAgIHJ0QmxlbmQuQmxlbmRFbmFibGUgPSBibGVuZFN0YXRlLmJsZW5kOworICAg
ICAgICAgICAgaWYgKGJsZW5kU3RhdGUuYmxlbmQpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcnRCbGVuZC5TcmNCbGVuZCA9IGdsX2QzZDExOjpDb252ZXJ0QmxlbmRGdW5jKGJsZW5k
U3RhdGUuc291cmNlQmxlbmRSR0IsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBydEJsZW5kLkRl
c3RCbGVuZCA9IGdsX2QzZDExOjpDb252ZXJ0QmxlbmRGdW5jKGJsZW5kU3RhdGUuZGVzdEJsZW5k
UkdCLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgcnRCbGVuZC5CbGVuZE9wID0gZ2xfZDNkMTE6
OkNvbnZlcnRCbGVuZE9wKGJsZW5kU3RhdGUuYmxlbmRFcXVhdGlvblJHQik7CisKKyAgICAgICAg
ICAgICAgICBydEJsZW5kLlNyY0JsZW5kQWxwaGEgPSBnbF9kM2QxMTo6Q29udmVydEJsZW5kRnVu
YyhibGVuZFN0YXRlLnNvdXJjZUJsZW5kQWxwaGEsIHRydWUpOworICAgICAgICAgICAgICAgIHJ0
QmxlbmQuRGVzdEJsZW5kQWxwaGEgPSBnbF9kM2QxMTo6Q29udmVydEJsZW5kRnVuYyhibGVuZFN0
YXRlLmRlc3RCbGVuZEFscGhhLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBydEJsZW5kLkJsZW5k
T3BBbHBoYSA9IGdsX2QzZDExOjpDb252ZXJ0QmxlbmRPcChibGVuZFN0YXRlLmJsZW5kRXF1YXRp
b25BbHBoYSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJ0QmxlbmQuUmVuZGVyVGFy
Z2V0V3JpdGVNYXNrID0gZ2xfZDNkMTE6OkNvbnZlcnRDb2xvck1hc2soa2V5LnJ0Q2hhbm5lbHNb
aV1bMF0gJiYgYmxlbmRTdGF0ZS5jb2xvck1hc2tSZWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleS5ydENo
YW5uZWxzW2ldWzFdICYmIGJsZW5kU3RhdGUuY29sb3JNYXNrR3JlZW4sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGtleS5ydENoYW5uZWxzW2ldWzJdICYmIGJsZW5kU3RhdGUuY29sb3JNYXNrQmx1ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAga2V5LnJ0Q2hhbm5lbHNbaV1bM10gJiYgYmxlbmRTdGF0ZS5jb2xvck1hc2tBbHBo
YSk7CisgICAgICAgIH0KKworICAgICAgICBJRDNEMTFCbGVuZFN0YXRlICpkeDExQmxlbmRTdGF0
ZSA9IE5VTEw7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlQmxlbmRT
dGF0ZSgmYmxlbmREZXNjLCAmZHgxMUJsZW5kU3RhdGUpOworICAgICAgICBpZiAoRkFJTEVEKHJl
c3VsdCkgfHwgIWR4MTFCbGVuZFN0YXRlKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIlVu
YWJsZSB0byBjcmVhdGUgYSBJRDNEMTFCbGVuZFN0YXRlLCBIUkVTVUxUOiAweCVYLiIsIHJlc3Vs
dCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIG1CbGVu
ZFN0YXRlQ2FjaGUuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGtleSwgc3RkOjptYWtlX3BhaXIoZHgx
MUJsZW5kU3RhdGUsIG1Db3VudGVyKyspKSk7CisKKyAgICAgICAgcmV0dXJuIGR4MTFCbGVuZFN0
YXRlOworICAgIH0KK30KKworc3RkOjpzaXplX3QgUmVuZGVyU3RhdGVDYWNoZTo6aGFzaFJhc3Rl
cml6ZXJTdGF0ZShjb25zdCBSYXN0ZXJpemVyU3RhdGVLZXkgJnJhc3RlclN0YXRlKQoreworICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2VlZCA9IDB4QUJDREVGOTg7CisKKyAgICBzdGQ6
OnNpemVfdCBoYXNoID0gMDsKKyAgICBNdXJtdXJIYXNoM194ODZfMzIoJnJhc3RlclN0YXRlLCBz
aXplb2YoUmFzdGVyaXplclN0YXRlS2V5KSwgc2VlZCwgJmhhc2gpOworICAgIHJldHVybiBoYXNo
OworfQorCitib29sIFJlbmRlclN0YXRlQ2FjaGU6OmNvbXBhcmVSYXN0ZXJpemVyU3RhdGVzKGNv
bnN0IFJhc3Rlcml6ZXJTdGF0ZUtleSAmYSwgY29uc3QgUmFzdGVyaXplclN0YXRlS2V5ICZiKQor
eworICAgIHJldHVybiBtZW1jbXAoJmEsICZiLCBzaXplb2YoUmFzdGVyaXplclN0YXRlS2V5KSkg
PT0gMDsKK30KKworSUQzRDExUmFzdGVyaXplclN0YXRlICpSZW5kZXJTdGF0ZUNhY2hlOjpnZXRS
YXN0ZXJpemVyU3RhdGUoY29uc3QgZ2w6OlJhc3Rlcml6ZXJTdGF0ZSAmcmFzdGVyU3RhdGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIHNjaXNzb3JFbmFibGVkLCB1bnNpZ25lZCBpbnQgZGVwdGhTaXplKQoreworICAgIGlm
ICghbURldmljZSkKKyAgICB7CisgICAgICAgIEVSUigiUmVuZGVyU3RhdGVDYWNoZSBpcyBub3Qg
aW5pdGlhbGl6ZWQuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIFJhc3Rl
cml6ZXJTdGF0ZUtleSBrZXk7CisgICAga2V5LnJhc3Rlcml6ZXJTdGF0ZSA9IHJhc3RlclN0YXRl
OworICAgIGtleS5zY2lzc29yRW5hYmxlZCA9IHNjaXNzb3JFbmFibGVkOworICAgIGtleS5kZXB0
aFNpemUgPSBkZXB0aFNpemU7CisKKyAgICBSYXN0ZXJpemVyU3RhdGVNYXA6Oml0ZXJhdG9yIGkg
PSBtUmFzdGVyaXplclN0YXRlQ2FjaGUuZmluZChrZXkpOworICAgIGlmIChpICE9IG1SYXN0ZXJp
emVyU3RhdGVDYWNoZS5lbmQoKSkKKyAgICB7CisgICAgICAgIFJhc3Rlcml6ZXJTdGF0ZUNvdW50
ZXJQYWlyICZzdGF0ZSA9IGktPnNlY29uZDsKKyAgICAgICAgc3RhdGUuc2Vjb25kID0gbUNvdW50
ZXIrKzsKKyAgICAgICAgcmV0dXJuIHN0YXRlLmZpcnN0OworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICBpZiAobVJhc3Rlcml6ZXJTdGF0ZUNhY2hlLnNpemUoKSA+PSBrTWF4UmFzdGVy
aXplclN0YXRlcykKKyAgICAgICAgeworICAgICAgICAgICAgVFJBQ0UoIk92ZXJmbG93ZWQgdGhl
IGxpbWl0IG9mICV1IHJhc3Rlcml6ZXIgc3RhdGVzLCByZW1vdmluZyB0aGUgbGVhc3QgcmVjZW50
bHkgdXNlZCAiCisgICAgICAgICAgICAgICAgICAidG8gbWFrZSByb29tLiIsIGtNYXhSYXN0ZXJp
emVyU3RhdGVzKTsKKworICAgICAgICAgICAgUmFzdGVyaXplclN0YXRlTWFwOjppdGVyYXRvciBs
ZWFzdFJlY2VudGx5VXNlZCA9IG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5iZWdpbigpOworICAgICAg
ICAgICAgZm9yIChSYXN0ZXJpemVyU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtUmFzdGVyaXplclN0
YXRlQ2FjaGUuYmVnaW4oKTsgaSAhPSBtUmFzdGVyaXplclN0YXRlQ2FjaGUuZW5kKCk7IGkrKykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaS0+c2Vjb25kLnNlY29uZCA8IGxl
YXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuc2Vjb25kKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQgPSBpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuZmly
c3QtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5lcmFzZShs
ZWFzdFJlY2VudGx5VXNlZCk7CisgICAgICAgIH0KKworICAgICAgICBEM0QxMV9DVUxMX01PREUg
Y3VsbE1vZGUgPSBnbF9kM2QxMTo6Q29udmVydEN1bGxNb2RlKHJhc3RlclN0YXRlLmN1bGxGYWNl
LCByYXN0ZXJTdGF0ZS5jdWxsTW9kZSk7CisKKyAgICAgICAgLy8gRGlzYWJsZSBjdWxsaW5nIGlm
IGRyYXdpbmcgcG9pbnRzCisgICAgICAgIGlmIChyYXN0ZXJTdGF0ZS5wb2ludERyYXdNb2RlKQor
ICAgICAgICB7CisgICAgICAgICAgICBjdWxsTW9kZSA9IEQzRDExX0NVTExfTk9ORTsKKyAgICAg
ICAgfQorCisgICAgICAgIEQzRDExX1JBU1RFUklaRVJfREVTQyByYXN0ZXJEZXNjOworICAgICAg
ICByYXN0ZXJEZXNjLkZpbGxNb2RlID0gRDNEMTFfRklMTF9TT0xJRDsKKyAgICAgICAgcmFzdGVy
RGVzYy5DdWxsTW9kZSA9IGN1bGxNb2RlOworICAgICAgICByYXN0ZXJEZXNjLkZyb250Q291bnRl
ckNsb2Nrd2lzZSA9IChyYXN0ZXJTdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXKSA/IEZBTFNFOiBU
UlVFOworICAgICAgICByYXN0ZXJEZXNjLkRlcHRoQmlhcyA9IGxkZXhwKHJhc3RlclN0YXRlLnBv
bHlnb25PZmZzZXRVbml0cywgLXN0YXRpY19jYXN0PGludD4oZGVwdGhTaXplKSk7CisgICAgICAg
IHJhc3RlckRlc2MuRGVwdGhCaWFzQ2xhbXAgPSAwLjBmOyAvLyBNU0ROIGRvY3VtZW50YXRpb24g
b2YgRGVwdGhCaWFzQ2xhbXAgaW1wbGllcyBhIHZhbHVlIG9mIHplcm8gd2lsbCBwcmVmb3JtIG5v
IGNsYW1waW5nLCBtdXN0IGJlIHRlc3RlZCB0aG91Z2guCisgICAgICAgIHJhc3RlckRlc2MuU2xv
cGVTY2FsZWREZXB0aEJpYXMgPSByYXN0ZXJTdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yOworICAg
ICAgICByYXN0ZXJEZXNjLkRlcHRoQ2xpcEVuYWJsZSA9IFRSVUU7CisgICAgICAgIHJhc3RlckRl
c2MuU2Npc3NvckVuYWJsZSA9IHNjaXNzb3JFbmFibGVkID8gVFJVRSA6IEZBTFNFOworICAgICAg
ICByYXN0ZXJEZXNjLk11bHRpc2FtcGxlRW5hYmxlID0gcmFzdGVyU3RhdGUubXVsdGlTYW1wbGU7
CisgICAgICAgIHJhc3RlckRlc2MuQW50aWFsaWFzZWRMaW5lRW5hYmxlID0gRkFMU0U7CisKKyAg
ICAgICAgSUQzRDExUmFzdGVyaXplclN0YXRlICpkeDExUmFzdGVyaXplclN0YXRlID0gTlVMTDsK
KyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVSYXN0ZXJpemVyU3RhdGUo
JnJhc3RlckRlc2MsICZkeDExUmFzdGVyaXplclN0YXRlKTsKKyAgICAgICAgaWYgKEZBSUxFRChy
ZXN1bHQpIHx8ICFkeDExUmFzdGVyaXplclN0YXRlKQorICAgICAgICB7CisgICAgICAgICAgICBF
UlIoIlVuYWJsZSB0byBjcmVhdGUgYSBJRDNEMTFSYXN0ZXJpemVyU3RhdGUsIEhSRVNVTFQ6IDB4
JVguIiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAg
ICAgICAgbVJhc3Rlcml6ZXJTdGF0ZUNhY2hlLmluc2VydChzdGQ6Om1ha2VfcGFpcihrZXksIHN0
ZDo6bWFrZV9wYWlyKGR4MTFSYXN0ZXJpemVyU3RhdGUsIG1Db3VudGVyKyspKSk7CisKKyAgICAg
ICAgcmV0dXJuIGR4MTFSYXN0ZXJpemVyU3RhdGU7CisgICAgfQorfQorCitzdGQ6OnNpemVfdCBS
ZW5kZXJTdGF0ZUNhY2hlOjpoYXNoRGVwdGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6OkRlcHRoU3Rl
bmNpbFN0YXRlICZkc1N0YXRlKQoreworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2Vl
ZCA9IDB4QUJDREVGOTg7CisKKyAgICBzdGQ6OnNpemVfdCBoYXNoID0gMDsKKyAgICBNdXJtdXJI
YXNoM194ODZfMzIoJmRzU3RhdGUsIHNpemVvZihnbDo6RGVwdGhTdGVuY2lsU3RhdGUpLCBzZWVk
LCAmaGFzaCk7CisgICAgcmV0dXJuIGhhc2g7Cit9CisKK2Jvb2wgUmVuZGVyU3RhdGVDYWNoZTo6
Y29tcGFyZURlcHRoU3RlbmNpbFN0YXRlcyhjb25zdCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmEs
IGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmYikKK3sKKyAgICByZXR1cm4gbWVtY21wKCZh
LCAmYiwgc2l6ZW9mKGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSkpID09IDA7Cit9CisKK0lEM0QxMURl
cHRoU3RlbmNpbFN0YXRlICpSZW5kZXJTdGF0ZUNhY2hlOjpnZXREZXB0aFN0ZW5jaWxTdGF0ZShj
b25zdCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmRzU3RhdGUpCit7CisgICAgaWYgKCFtRGV2aWNl
KQorICAgIHsKKyAgICAgICAgRVJSKCJSZW5kZXJTdGF0ZUNhY2hlIGlzIG5vdCBpbml0aWFsaXpl
ZC4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgRGVwdGhTdGVuY2lsU3Rh
dGVNYXA6Oml0ZXJhdG9yIGkgPSBtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5maW5kKGRzU3RhdGUp
OworICAgIGlmIChpICE9IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmVuZCgpKQorICAgIHsKKyAg
ICAgICAgRGVwdGhTdGVuY2lsU3RhdGVDb3VudGVyUGFpciAmc3RhdGUgPSBpLT5zZWNvbmQ7Cisg
ICAgICAgIHN0YXRlLnNlY29uZCA9IG1Db3VudGVyKys7CisgICAgICAgIHJldHVybiBzdGF0ZS5m
aXJzdDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKG1EZXB0aFN0ZW5jaWxT
dGF0ZUNhY2hlLnNpemUoKSA+PSBrTWF4RGVwdGhTdGVuY2lsU3RhdGVzKQorICAgICAgICB7Cisg
ICAgICAgICAgICBUUkFDRSgiT3ZlcmZsb3dlZCB0aGUgbGltaXQgb2YgJXUgZGVwdGggc3RlbmNp
bCBzdGF0ZXMsIHJlbW92aW5nIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkICIKKyAgICAgICAgICAg
ICAgICAgICJ0byBtYWtlIHJvb20uIiwga01heERlcHRoU3RlbmNpbFN0YXRlcyk7CisKKyAgICAg
ICAgICAgIERlcHRoU3RlbmNpbFN0YXRlTWFwOjppdGVyYXRvciBsZWFzdFJlY2VudGx5VXNlZCA9
IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmJlZ2luKCk7CisgICAgICAgICAgICBmb3IgKERlcHRo
U3RlbmNpbFN0YXRlTWFwOjppdGVyYXRvciBpID0gbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuYmVn
aW4oKTsgaSAhPSBtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5lbmQoKTsgaSsrKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGlmIChpLT5zZWNvbmQuc2Vjb25kIDwgbGVhc3RSZWNlbnRs
eVVzZWQtPnNlY29uZC5zZWNvbmQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBsZWFzdFJlY2VudGx5VXNlZCA9IGk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQtPnNlY29uZC5maXJzdC0+UmVsZWFz
ZSgpOworICAgICAgICAgICAgbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuZXJhc2UobGVhc3RSZWNl
bnRseVVzZWQpOworICAgICAgICB9CisKKyAgICAgICAgRDNEMTFfREVQVEhfU1RFTkNJTF9ERVND
IGRzRGVzYyA9IHsgMCB9OworICAgICAgICBkc0Rlc2MuRGVwdGhFbmFibGUgPSBkc1N0YXRlLmRl
cHRoVGVzdCA/IFRSVUUgOiBGQUxTRTsKKyAgICAgICAgZHNEZXNjLkRlcHRoV3JpdGVNYXNrID0g
Z2xfZDNkMTE6OkNvbnZlcnREZXB0aE1hc2soZHNTdGF0ZS5kZXB0aE1hc2spOworICAgICAgICBk
c0Rlc2MuRGVwdGhGdW5jID0gZ2xfZDNkMTE6OkNvbnZlcnRDb21wYXJpc29uKGRzU3RhdGUuZGVw
dGhGdW5jKTsKKyAgICAgICAgZHNEZXNjLlN0ZW5jaWxFbmFibGUgPSBkc1N0YXRlLnN0ZW5jaWxU
ZXN0ID8gVFJVRSA6IEZBTFNFOworICAgICAgICBkc0Rlc2MuU3RlbmNpbFJlYWRNYXNrID0gZ2xf
ZDNkMTE6OkNvbnZlcnRTdGVuY2lsTWFzayhkc1N0YXRlLnN0ZW5jaWxNYXNrKTsKKyAgICAgICAg
ZHNEZXNjLlN0ZW5jaWxXcml0ZU1hc2sgPSBnbF9kM2QxMTo6Q29udmVydFN0ZW5jaWxNYXNrKGRz
U3RhdGUuc3RlbmNpbFdyaXRlbWFzayk7CisgICAgICAgIGRzRGVzYy5Gcm9udEZhY2UuU3RlbmNp
bEZhaWxPcCA9IGdsX2QzZDExOjpDb252ZXJ0U3RlbmNpbE9wKGRzU3RhdGUuc3RlbmNpbEZhaWwp
OworICAgICAgICBkc0Rlc2MuRnJvbnRGYWNlLlN0ZW5jaWxEZXB0aEZhaWxPcCA9IGdsX2QzZDEx
OjpDb252ZXJ0U3RlbmNpbE9wKGRzU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwpOworICAgICAg
ICBkc0Rlc2MuRnJvbnRGYWNlLlN0ZW5jaWxQYXNzT3AgPSBnbF9kM2QxMTo6Q29udmVydFN0ZW5j
aWxPcChkc1N0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzKTsKKyAgICAgICAgZHNEZXNjLkZyb250
RmFjZS5TdGVuY2lsRnVuYyA9IGdsX2QzZDExOjpDb252ZXJ0Q29tcGFyaXNvbihkc1N0YXRlLnN0
ZW5jaWxGdW5jKTsKKyAgICAgICAgZHNEZXNjLkJhY2tGYWNlLlN0ZW5jaWxGYWlsT3AgPSBnbF9k
M2QxMTo6Q29udmVydFN0ZW5jaWxPcChkc1N0YXRlLnN0ZW5jaWxCYWNrRmFpbCk7CisgICAgICAg
IGRzRGVzYy5CYWNrRmFjZS5TdGVuY2lsRGVwdGhGYWlsT3AgPSBnbF9kM2QxMTo6Q29udmVydFN0
ZW5jaWxPcChkc1N0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCk7CisgICAgICAgIGRzRGVz
Yy5CYWNrRmFjZS5TdGVuY2lsUGFzc09wID0gZ2xfZDNkMTE6OkNvbnZlcnRTdGVuY2lsT3AoZHNT
dGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MpOworICAgICAgICBkc0Rlc2MuQmFja0ZhY2Uu
U3RlbmNpbEZ1bmMgPSBnbF9kM2QxMTo6Q29udmVydENvbXBhcmlzb24oZHNTdGF0ZS5zdGVuY2ls
QmFja0Z1bmMpOworCisgICAgICAgIElEM0QxMURlcHRoU3RlbmNpbFN0YXRlICpkeDExRGVwdGhT
dGVuY2lsU3RhdGUgPSBOVUxMOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNy
ZWF0ZURlcHRoU3RlbmNpbFN0YXRlKCZkc0Rlc2MsICZkeDExRGVwdGhTdGVuY2lsU3RhdGUpOwor
ICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkgfHwgIWR4MTFEZXB0aFN0ZW5jaWxTdGF0ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgRVJSKCJVbmFibGUgdG8gY3JlYXRlIGEgSUQzRDExRGVwdGhT
dGVuY2lsU3RhdGUsIEhSRVNVTFQ6IDB4JVguIiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVy
biBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuaW5z
ZXJ0KHN0ZDo6bWFrZV9wYWlyKGRzU3RhdGUsIHN0ZDo6bWFrZV9wYWlyKGR4MTFEZXB0aFN0ZW5j
aWxTdGF0ZSwgbUNvdW50ZXIrKykpKTsKKworICAgICAgICByZXR1cm4gZHgxMURlcHRoU3RlbmNp
bFN0YXRlOworICAgIH0KK30KKworc3RkOjpzaXplX3QgUmVuZGVyU3RhdGVDYWNoZTo6aGFzaFNh
bXBsZXJTdGF0ZShjb25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpCit7CisgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZWVkID0gMHhBQkNERUY5ODsKKworICAgIHN0ZDo6
c2l6ZV90IGhhc2ggPSAwOworICAgIE11cm11ckhhc2gzX3g4Nl8zMigmc2FtcGxlclN0YXRlLCBz
aXplb2YoZ2w6OlNhbXBsZXJTdGF0ZSksIHNlZWQsICZoYXNoKTsKKyAgICByZXR1cm4gaGFzaDsK
K30KKworYm9vbCBSZW5kZXJTdGF0ZUNhY2hlOjpjb21wYXJlU2FtcGxlclN0YXRlcyhjb25zdCBn
bDo6U2FtcGxlclN0YXRlICZhLCBjb25zdCBnbDo6U2FtcGxlclN0YXRlICZiKQoreworICAgIHJl
dHVybiBtZW1jbXAoJmEsICZiLCBzaXplb2YoZ2w6OlNhbXBsZXJTdGF0ZSkpID09IDA7Cit9CisK
K0lEM0QxMVNhbXBsZXJTdGF0ZSAqUmVuZGVyU3RhdGVDYWNoZTo6Z2V0U2FtcGxlclN0YXRlKGNv
bnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkKK3sKKyAgICBpZiAoIW1EZXZpY2Up
CisgICAgeworICAgICAgICBFUlIoIlJlbmRlclN0YXRlQ2FjaGUgaXMgbm90IGluaXRpYWxpemVk
LiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBTYW1wbGVyU3RhdGVNYXA6
Oml0ZXJhdG9yIGkgPSBtU2FtcGxlclN0YXRlQ2FjaGUuZmluZChzYW1wbGVyU3RhdGUpOworICAg
IGlmIChpICE9IG1TYW1wbGVyU3RhdGVDYWNoZS5lbmQoKSkKKyAgICB7CisgICAgICAgIFNhbXBs
ZXJTdGF0ZUNvdW50ZXJQYWlyICZzdGF0ZSA9IGktPnNlY29uZDsKKyAgICAgICAgc3RhdGUuc2Vj
b25kID0gbUNvdW50ZXIrKzsKKyAgICAgICAgcmV0dXJuIHN0YXRlLmZpcnN0OworICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICBpZiAobVNhbXBsZXJTdGF0ZUNhY2hlLnNpemUoKSA+PSBr
TWF4U2FtcGxlclN0YXRlcykKKyAgICAgICAgeworICAgICAgICAgICAgVFJBQ0UoIk92ZXJmbG93
ZWQgdGhlIGxpbWl0IG9mICV1IHNhbXBsZXIgc3RhdGVzLCByZW1vdmluZyB0aGUgbGVhc3QgcmVj
ZW50bHkgdXNlZCAiCisgICAgICAgICAgICAgICAgICAidG8gbWFrZSByb29tLiIsIGtNYXhTYW1w
bGVyU3RhdGVzKTsKKworICAgICAgICAgICAgU2FtcGxlclN0YXRlTWFwOjppdGVyYXRvciBsZWFz
dFJlY2VudGx5VXNlZCA9IG1TYW1wbGVyU3RhdGVDYWNoZS5iZWdpbigpOworICAgICAgICAgICAg
Zm9yIChTYW1wbGVyU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtU2FtcGxlclN0YXRlQ2FjaGUuYmVn
aW4oKTsgaSAhPSBtU2FtcGxlclN0YXRlQ2FjaGUuZW5kKCk7IGkrKykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBpZiAoaS0+c2Vjb25kLnNlY29uZCA8IGxlYXN0UmVjZW50bHlVc2Vk
LT5zZWNvbmQuc2Vjb25kKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
bGVhc3RSZWNlbnRseVVzZWQgPSBpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsK
KyAgICAgICAgICAgIG1TYW1wbGVyU3RhdGVDYWNoZS5lcmFzZShsZWFzdFJlY2VudGx5VXNlZCk7
CisgICAgICAgIH0KKworICAgICAgICBEM0QxMV9TQU1QTEVSX0RFU0Mgc2FtcGxlckRlc2M7Cisg
ICAgICAgIHNhbXBsZXJEZXNjLkZpbHRlciA9IGdsX2QzZDExOjpDb252ZXJ0RmlsdGVyKHNhbXBs
ZXJTdGF0ZS5taW5GaWx0ZXIsIHNhbXBsZXJTdGF0ZS5tYWdGaWx0ZXIsIHNhbXBsZXJTdGF0ZS5t
YXhBbmlzb3Ryb3B5KTsKKyAgICAgICAgc2FtcGxlckRlc2MuQWRkcmVzc1UgPSBnbF9kM2QxMTo6
Q29udmVydFRleHR1cmVXcmFwKHNhbXBsZXJTdGF0ZS53cmFwUyk7CisgICAgICAgIHNhbXBsZXJE
ZXNjLkFkZHJlc3NWID0gZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlV3JhcChzYW1wbGVyU3RhdGUu
d3JhcFQpOworICAgICAgICBzYW1wbGVyRGVzYy5BZGRyZXNzVyA9IEQzRDExX1RFWFRVUkVfQURE
UkVTU19DTEFNUDsKKyAgICAgICAgc2FtcGxlckRlc2MuTWlwTE9EQmlhcyA9IHN0YXRpY19jYXN0
PGZsb2F0PihzYW1wbGVyU3RhdGUubG9kT2Zmc2V0KTsKKyAgICAgICAgc2FtcGxlckRlc2MuTWF4
QW5pc290cm9weSA9IHNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5OworICAgICAgICBzYW1wbGVy
RGVzYy5Db21wYXJpc29uRnVuYyA9IEQzRDExX0NPTVBBUklTT05fTkVWRVI7CisgICAgICAgIHNh
bXBsZXJEZXNjLkJvcmRlckNvbG9yWzBdID0gMC4wZjsKKyAgICAgICAgc2FtcGxlckRlc2MuQm9y
ZGVyQ29sb3JbMV0gPSAwLjBmOworICAgICAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclsyXSA9
IDAuMGY7CisgICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzNdID0gMC4wZjsKKyAgICAg
ICAgc2FtcGxlckRlc2MuTWluTE9EID0gZ2xfZDNkMTE6OkNvbnZlcnRNaW5MT0Qoc2FtcGxlclN0
YXRlLm1pbkZpbHRlciwgc2FtcGxlclN0YXRlLmxvZE9mZnNldCk7CisgICAgICAgIHNhbXBsZXJE
ZXNjLk1heExPRCA9IGdsX2QzZDExOjpDb252ZXJ0TWF4TE9EKHNhbXBsZXJTdGF0ZS5taW5GaWx0
ZXIsIHNhbXBsZXJTdGF0ZS5sb2RPZmZzZXQpOworCisgICAgICAgIElEM0QxMVNhbXBsZXJTdGF0
ZSAqZHgxMVNhbXBsZXJTdGF0ZSA9IE5VTEw7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURl
dmljZS0+Q3JlYXRlU2FtcGxlclN0YXRlKCZzYW1wbGVyRGVzYywgJmR4MTFTYW1wbGVyU3RhdGUp
OworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkgfHwgIWR4MTFTYW1wbGVyU3RhdGUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEVSUigiVW5hYmxlIHRvIGNyZWF0ZSBhIElEM0QxMURlcHRoU3Rl
bmNpbFN0YXRlLCBIUkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4g
TlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIG1TYW1wbGVyU3RhdGVDYWNoZS5pbnNlcnQoc3Rk
OjptYWtlX3BhaXIoc2FtcGxlclN0YXRlLCBzdGQ6Om1ha2VfcGFpcihkeDExU2FtcGxlclN0YXRl
LCBtQ291bnRlcisrKSkpOworCisgICAgICAgIHJldHVybiBkeDExU2FtcGxlclN0YXRlOworICAg
IH0KK30KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyU3Rh
dGVDYWNoZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjRiODcxYTRiZDg1NzExNGFi
OGE3MGMwYzc1ODk1ZDBlMjEwODM2OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyU3RhdGVDYWNoZS5o
CkBAIC0wLDAgKzEsMTExIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBSZW5kZXJTdGF0ZUNh
Y2hlLmg6IERlZmluZXMgcng6OlJlbmRlclN0YXRlQ2FjaGUsIGEgY2FjaGUgb2YgRGlyZWN0M0Qg
cmVuZGVyCisvLyBzdGF0ZSBvYmplY3RzLgorCisjaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9S
RU5ERVJTVEFURUNBQ0hFX0hfCisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJTVEFU
RUNBQ0hFX0hfCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgorI2luY2x1ZGUg
ImNvbW1vbi9hbmdsZXV0aWxzLmgiCisKK25hbWVzcGFjZSBnbAoreworY2xhc3MgRnJhbWVidWZm
ZXI7Cit9CisKK25hbWVzcGFjZSByeAoreworCitjbGFzcyBSZW5kZXJTdGF0ZUNhY2hlCit7Cisg
IHB1YmxpYzoKKyAgICBSZW5kZXJTdGF0ZUNhY2hlKCk7CisgICAgdmlydHVhbCB+UmVuZGVyU3Rh
dGVDYWNoZSgpOworCisgICAgdm9pZCBpbml0aWFsaXplKElEM0QxMURldmljZSAqZGV2aWNlKTsK
KyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICAvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHRoZSBy
ZXR1cm5lZCBibGVuZCBzdGF0ZSwgUmVsZWFzZSgpIG11c3QgYmUgY2FsbGVkLgorICAgIElEM0Qx
MUJsZW5kU3RhdGUgKmdldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwg
Y29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUpOworICAgIElEM0QxMVJhc3Rlcml6ZXJT
dGF0ZSAqZ2V0UmFzdGVyaXplclN0YXRlKGNvbnN0IGdsOjpSYXN0ZXJpemVyU3RhdGUgJnJhc3Rl
clN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgc2Npc3NvckVuYWJsZWQsIHVuc2lnbmVkIGludCBkZXB0aFNpemUpOworICAgIElEM0QxMURl
cHRoU3RlbmNpbFN0YXRlICpnZXREZXB0aFN0ZW5jaWxTdGF0ZShjb25zdCBnbDo6RGVwdGhTdGVu
Y2lsU3RhdGUgJmRzU3RhdGUpOworICAgIElEM0QxMVNhbXBsZXJTdGF0ZSAqZ2V0U2FtcGxlclN0
YXRlKGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSk7CisKKyAgcHJpdmF0ZToK
KyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyU3RhdGVDYWNoZSk7CisKKyAgICB1
bnNpZ25lZCBsb25nIGxvbmcgbUNvdW50ZXI7CisKKyAgICAvLyBCbGVuZCBzdGF0ZSBjYWNoZQor
ICAgIHN0cnVjdCBCbGVuZFN0YXRlS2V5CisgICAgeworICAgICAgICBnbDo6QmxlbmRTdGF0ZSBi
bGVuZFN0YXRlOworICAgICAgICBib29sIHJ0Q2hhbm5lbHNbRDNEMTFfU0lNVUxUQU5FT1VTX1JF
TkRFUl9UQVJHRVRfQ09VTlRdWzRdOworICAgIH07CisgICAgc3RhdGljIHN0ZDo6c2l6ZV90IGhh
c2hCbGVuZFN0YXRlKGNvbnN0IEJsZW5kU3RhdGVLZXkgJmJsZW5kU3RhdGUpOworICAgIHN0YXRp
YyBib29sIGNvbXBhcmVCbGVuZFN0YXRlcyhjb25zdCBCbGVuZFN0YXRlS2V5ICZhLCBjb25zdCBC
bGVuZFN0YXRlS2V5ICZiKTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGtNYXhCbGVu
ZFN0YXRlczsKKworICAgIHR5cGVkZWYgc3RkOjpzaXplX3QgKCpCbGVuZFN0YXRlSGFzaEZ1bmN0
aW9uKShjb25zdCBCbGVuZFN0YXRlS2V5ICYpOworICAgIHR5cGVkZWYgYm9vbCAoKkJsZW5kU3Rh
dGVFcXVhbGl0eUZ1bmN0aW9uKShjb25zdCBCbGVuZFN0YXRlS2V5ICYsIGNvbnN0IEJsZW5kU3Rh
dGVLZXkgJik7CisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8SUQzRDExQmxlbmRTdGF0ZSosIHVuc2ln
bmVkIGxvbmcgbG9uZz4gQmxlbmRTdGF0ZUNvdW50ZXJQYWlyOworICAgIHR5cGVkZWYgc3RkOjp1
bm9yZGVyZWRfbWFwPEJsZW5kU3RhdGVLZXksIEJsZW5kU3RhdGVDb3VudGVyUGFpciwgQmxlbmRT
dGF0ZUhhc2hGdW5jdGlvbiwgQmxlbmRTdGF0ZUVxdWFsaXR5RnVuY3Rpb24+IEJsZW5kU3RhdGVN
YXA7CisgICAgQmxlbmRTdGF0ZU1hcCBtQmxlbmRTdGF0ZUNhY2hlOworCisgICAgLy8gUmFzdGVy
aXplciBzdGF0ZSBjYWNoZQorICAgIHN0cnVjdCBSYXN0ZXJpemVyU3RhdGVLZXkKKyAgICB7Cisg
ICAgICAgIGdsOjpSYXN0ZXJpemVyU3RhdGUgcmFzdGVyaXplclN0YXRlOworICAgICAgICBib29s
IHNjaXNzb3JFbmFibGVkOworICAgICAgICB1bnNpZ25lZCBpbnQgZGVwdGhTaXplOworICAgIH07
CisgICAgc3RhdGljIHN0ZDo6c2l6ZV90IGhhc2hSYXN0ZXJpemVyU3RhdGUoY29uc3QgUmFzdGVy
aXplclN0YXRlS2V5ICZyYXN0ZXJTdGF0ZSk7CisgICAgc3RhdGljIGJvb2wgY29tcGFyZVJhc3Rl
cml6ZXJTdGF0ZXMoY29uc3QgUmFzdGVyaXplclN0YXRlS2V5ICZhLCBjb25zdCBSYXN0ZXJpemVy
U3RhdGVLZXkgJmIpOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQga01heFJhc3Rlcml6
ZXJTdGF0ZXM7CisKKyAgICB0eXBlZGVmIHN0ZDo6c2l6ZV90ICgqUmFzdGVyaXplclN0YXRlSGFz
aEZ1bmN0aW9uKShjb25zdCBSYXN0ZXJpemVyU3RhdGVLZXkgJik7CisgICAgdHlwZWRlZiBib29s
ICgqUmFzdGVyaXplclN0YXRlRXF1YWxpdHlGdW5jdGlvbikoY29uc3QgUmFzdGVyaXplclN0YXRl
S2V5ICYsIGNvbnN0IFJhc3Rlcml6ZXJTdGF0ZUtleSAmKTsKKyAgICB0eXBlZGVmIHN0ZDo6cGFp
cjxJRDNEMTFSYXN0ZXJpemVyU3RhdGUqLCB1bnNpZ25lZCBsb25nIGxvbmc+IFJhc3Rlcml6ZXJT
dGF0ZUNvdW50ZXJQYWlyOworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPFJhc3Rlcml6
ZXJTdGF0ZUtleSwgUmFzdGVyaXplclN0YXRlQ291bnRlclBhaXIsIFJhc3Rlcml6ZXJTdGF0ZUhh
c2hGdW5jdGlvbiwgUmFzdGVyaXplclN0YXRlRXF1YWxpdHlGdW5jdGlvbj4gUmFzdGVyaXplclN0
YXRlTWFwOworICAgIFJhc3Rlcml6ZXJTdGF0ZU1hcCBtUmFzdGVyaXplclN0YXRlQ2FjaGU7CisK
KyAgICAvLyBEZXB0aCBzdGVuY2lsIHN0YXRlIGNhY2hlCisgICAgc3RhdGljIHN0ZDo6c2l6ZV90
IGhhc2hEZXB0aFN0ZW5jaWxTdGF0ZShjb25zdCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmRzU3Rh
dGUpOworICAgIHN0YXRpYyBib29sIGNvbXBhcmVEZXB0aFN0ZW5jaWxTdGF0ZXMoY29uc3QgZ2w6
OkRlcHRoU3RlbmNpbFN0YXRlICZhLCBjb25zdCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmIpOwor
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQga01heERlcHRoU3RlbmNpbFN0YXRlczsKKwor
ICAgIHR5cGVkZWYgc3RkOjpzaXplX3QgKCpEZXB0aFN0ZW5jaWxTdGF0ZUhhc2hGdW5jdGlvbiko
Y29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICYpOworICAgIHR5cGVkZWYgYm9vbCAoKkRlcHRo
U3RlbmNpbFN0YXRlRXF1YWxpdHlGdW5jdGlvbikoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRl
ICYsIGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmKTsKKyAgICB0eXBlZGVmIHN0ZDo6cGFp
cjxJRDNEMTFEZXB0aFN0ZW5jaWxTdGF0ZSosIHVuc2lnbmVkIGxvbmcgbG9uZz4gRGVwdGhTdGVu
Y2lsU3RhdGVDb3VudGVyUGFpcjsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxnbDo6
RGVwdGhTdGVuY2lsU3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwdGhT
dGVuY2lsU3RhdGVDb3VudGVyUGFpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
ZXB0aFN0ZW5jaWxTdGF0ZUhhc2hGdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBEZXB0aFN0ZW5jaWxTdGF0ZUVxdWFsaXR5RnVuY3Rpb24+IERlcHRoU3RlbmNpbFN0YXRl
TWFwOworICAgIERlcHRoU3RlbmNpbFN0YXRlTWFwIG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlOwor
CisgICAgLy8gU2FtcGxlIHN0YXRlIGNhY2hlCisgICAgc3RhdGljIHN0ZDo6c2l6ZV90IGhhc2hT
YW1wbGVyU3RhdGUoY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKTsKKyAgICBz
dGF0aWMgYm9vbCBjb21wYXJlU2FtcGxlclN0YXRlcyhjb25zdCBnbDo6U2FtcGxlclN0YXRlICZh
LCBjb25zdCBnbDo6U2FtcGxlclN0YXRlICZiKTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
aW50IGtNYXhTYW1wbGVyU3RhdGVzOworCisgICAgdHlwZWRlZiBzdGQ6OnNpemVfdCAoKlNhbXBs
ZXJTdGF0ZUhhc2hGdW5jdGlvbikoY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmKTsKKyAgICB0eXBl
ZGVmIGJvb2wgKCpTYW1wbGVyU3RhdGVFcXVhbGl0eUZ1bmN0aW9uKShjb25zdCBnbDo6U2FtcGxl
clN0YXRlICYsIGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJik7CisgICAgdHlwZWRlZiBzdGQ6OnBh
aXI8SUQzRDExU2FtcGxlclN0YXRlKiwgdW5zaWduZWQgbG9uZyBsb25nPiBTYW1wbGVyU3RhdGVD
b3VudGVyUGFpcjsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxnbDo6U2FtcGxlclN0
YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhbXBsZXJTdGF0ZUNvdW50ZXJQ
YWlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhbXBsZXJTdGF0ZUhhc2hGdW5j
dGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYW1wbGVyU3RhdGVFcXVhbGl0
eUZ1bmN0aW9uPiBTYW1wbGVyU3RhdGVNYXA7CisgICAgU2FtcGxlclN0YXRlTWFwIG1TYW1wbGVy
U3RhdGVDYWNoZTsKKworICAgIElEM0QxMURldmljZSAqbURldmljZTsKK307CisKK30KKworI2Vu
ZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJTVEFURUNBQ0hFX0hfClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJUYXJnZXQxMS5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclRhcmdldDEx
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4zNzA3MDk3YWE0NTQ0OThhMDYwMDRlZDg1NTgyZWE5M2E5OGM2NWVm
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJUYXJnZXQxMS5jcHAKQEAgLTAsMCArMSwzNTUgQEAKKyNp
bmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFJlbmRlclRhcmdldDEx
LmNwcDogSW1wbGVtZW50cyBhIERYMTEtc3BlY2lmaWMgd3JhcHBlciBmb3IgSUQzRDExVmlldyBw
b2ludGVycworLy8gcmV0YWluZWQgYnkgUmVuZGVyYnVmZmVycy4KKworI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJUYXJnZXQxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWlu
LmgiCisKK25hbWVzcGFjZSByeAoreworCitzdGF0aWMgdW5zaWduZWQgaW50IGdldFJUVlN1YnJl
c291cmNlSW5kZXgoSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCBJRDNEMTFSZW5kZXJUYXJnZXRW
aWV3ICp2aWV3KQoreworICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7
CisgICAgdmlldy0+R2V0RGVzYygmcnR2RGVzYyk7CisKKyAgICBEM0QxMV9URVhUVVJFMkRfREVT
QyB0ZXhEZXNjOworICAgIHRleHR1cmUtPkdldERlc2MoJnRleERlc2MpOworCisgICAgdW5zaWdu
ZWQgaW50IG1pcFNsaWNlID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgYXJyYXlTbGljZSA9IDA7Cisg
ICAgdW5zaWduZWQgaW50IG1pcExldmVscyA9IHRleERlc2MuTWlwTGV2ZWxzOworCisgICAgc3dp
dGNoIChydHZEZXNjLlZpZXdEaW1lbnNpb24pCisgICAgeworICAgICAgY2FzZSBEM0QxMV9SVFZf
RElNRU5TSU9OX1RFWFRVUkUxRDoKKyAgICAgICAgbWlwU2xpY2UgPSBydHZEZXNjLlRleHR1cmUx
RC5NaXBTbGljZTsKKyAgICAgICAgYXJyYXlTbGljZSA9IDA7CisgICAgICAgIGJyZWFrOworCisg
ICAgICBjYXNlIEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTFEQVJSQVk6CisgICAgICAgIG1p
cFNsaWNlID0gcnR2RGVzYy5UZXh0dXJlMURBcnJheS5NaXBTbGljZTsKKyAgICAgICAgYXJyYXlT
bGljZSA9IHJ0dkRlc2MuVGV4dHVyZTFEQXJyYXkuRmlyc3RBcnJheVNsaWNlOworICAgICAgICBi
cmVhazsKKworICAgICAgY2FzZSBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyRDoKKyAgICAg
ICAgbWlwU2xpY2UgPSBydHZEZXNjLlRleHR1cmUyRC5NaXBTbGljZTsKKyAgICAgICAgYXJyYXlT
bGljZSA9IDA7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEQzRDExX1JUVl9ESU1FTlNJ
T05fVEVYVFVSRTJEQVJSQVk6CisgICAgICAgIG1pcFNsaWNlID0gcnR2RGVzYy5UZXh0dXJlMkRB
cnJheS5NaXBTbGljZTsKKyAgICAgICAgYXJyYXlTbGljZSA9IHJ0dkRlc2MuVGV4dHVyZTJEQXJy
YXkuRmlyc3RBcnJheVNsaWNlOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBEM0QxMV9S
VFZfRElNRU5TSU9OX1RFWFRVUkUyRE1TOgorICAgICAgICBtaXBTbGljZSA9IDA7CisgICAgICAg
IGFycmF5U2xpY2UgPSAwOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBEM0QxMV9SVFZf
RElNRU5TSU9OX1RFWFRVUkUyRE1TQVJSQVk6CisgICAgICAgIG1pcFNsaWNlID0gMDsKKyAgICAg
ICAgYXJyYXlTbGljZSA9IHJ0dkRlc2MuVGV4dHVyZTJETVNBcnJheS5GaXJzdEFycmF5U2xpY2U7
CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVS
RTNEOgorICAgICAgICBtaXBTbGljZSA9IHJ0dkRlc2MuVGV4dHVyZTNELk1pcFNsaWNlOworICAg
ICAgICBhcnJheVNsaWNlID0gMDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRDNEMTFf
UlRWX0RJTUVOU0lPTl9VTktOT1dOOgorICAgICAgY2FzZSBEM0QxMV9SVFZfRElNRU5TSU9OX0JV
RkZFUjoKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAgICBicmVhazsKKworICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgcmV0dXJuIEQzRDExQ2FsY1N1YnJlc291cmNlKG1pcFNsaWNlLCBhcnJheVNsaWNlLCBt
aXBMZXZlbHMpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGdldERTVlN1YnJlc291cmNlSW5k
ZXgoSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICp2aWV3
KQoreworICAgIEQzRDExX0RFUFRIX1NURU5DSUxfVklFV19ERVNDIGRzdkRlc2M7CisgICAgdmll
dy0+R2V0RGVzYygmZHN2RGVzYyk7CisKKyAgICBEM0QxMV9URVhUVVJFMkRfREVTQyB0ZXhEZXNj
OworICAgIHRleHR1cmUtPkdldERlc2MoJnRleERlc2MpOworCisgICAgdW5zaWduZWQgaW50IG1p
cFNsaWNlID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgYXJyYXlTbGljZSA9IDA7CisgICAgdW5zaWdu
ZWQgaW50IG1pcExldmVscyA9IHRleERlc2MuTWlwTGV2ZWxzOworCisgICAgc3dpdGNoIChkc3ZE
ZXNjLlZpZXdEaW1lbnNpb24pCisgICAgeworICAgICAgY2FzZSBEM0QxMV9EU1ZfRElNRU5TSU9O
X1RFWFRVUkUxRDoKKyAgICAgICAgbWlwU2xpY2UgPSBkc3ZEZXNjLlRleHR1cmUxRC5NaXBTbGlj
ZTsKKyAgICAgICAgYXJyYXlTbGljZSA9IDA7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNl
IEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTFEQVJSQVk6CisgICAgICAgIG1pcFNsaWNlID0g
ZHN2RGVzYy5UZXh0dXJlMURBcnJheS5NaXBTbGljZTsKKyAgICAgICAgYXJyYXlTbGljZSA9IGRz
dkRlc2MuVGV4dHVyZTFEQXJyYXkuRmlyc3RBcnJheVNsaWNlOworICAgICAgICBicmVhazsKKwor
ICAgICAgY2FzZSBEM0QxMV9EU1ZfRElNRU5TSU9OX1RFWFRVUkUyRDoKKyAgICAgICAgbWlwU2xp
Y2UgPSBkc3ZEZXNjLlRleHR1cmUyRC5NaXBTbGljZTsKKyAgICAgICAgYXJyYXlTbGljZSA9IDA7
CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVS
RTJEQVJSQVk6CisgICAgICAgIG1pcFNsaWNlID0gZHN2RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBT
bGljZTsKKyAgICAgICAgYXJyYXlTbGljZSA9IGRzdkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RB
cnJheVNsaWNlOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBEM0QxMV9EU1ZfRElNRU5T
SU9OX1RFWFRVUkUyRE1TOgorICAgICAgICBtaXBTbGljZSA9IDA7CisgICAgICAgIGFycmF5U2xp
Y2UgPSAwOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBEM0QxMV9EU1ZfRElNRU5TSU9O
X1RFWFRVUkUyRE1TQVJSQVk6CisgICAgICAgIG1pcFNsaWNlID0gMDsKKyAgICAgICAgYXJyYXlT
bGljZSA9IGRzdkRlc2MuVGV4dHVyZTJETVNBcnJheS5GaXJzdEFycmF5U2xpY2U7CisgICAgICAg
IGJyZWFrOworCisgICAgICBjYXNlIEQzRDExX1JUVl9ESU1FTlNJT05fVU5LTk9XTjoKKyAgICAg
ICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJu
IEQzRDExQ2FsY1N1YnJlc291cmNlKG1pcFNsaWNlLCBhcnJheVNsaWNlLCBtaXBMZXZlbHMpOwor
fQorCitSZW5kZXJUYXJnZXQxMTo6UmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBJ
RDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpydHYsIElEM0QxMVRleHR1cmUyRCAqdGV4LCBJRDNEMTFT
aGFkZXJSZXNvdXJjZVZpZXcgKnNydiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7
CisgICAgbVJlbmRlcmVyID0gUmVuZGVyZXIxMTo6bWFrZVJlbmRlcmVyMTEocmVuZGVyZXIpOwor
ICAgIG1UZXh0dXJlID0gdGV4OworICAgIG1SZW5kZXJUYXJnZXQgPSBydHY7CisgICAgbURlcHRo
U3RlbmNpbCA9IE5VTEw7CisgICAgbVNoYWRlclJlc291cmNlID0gc3J2OworICAgIG1TdWJyZXNv
dXJjZUluZGV4ID0gMDsKKworICAgIGlmIChtUmVuZGVyVGFyZ2V0ICYmIG1UZXh0dXJlKQorICAg
IHsKKyAgICAgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgZGVzYzsKKyAgICAgICAg
bVJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzYyk7CisKKyAgICAgICAgRDNEMTFfVEVYVFVSRTJE
X0RFU0MgdGV4RGVzYzsKKyAgICAgICAgbVRleHR1cmUtPkdldERlc2MoJnRleERlc2MpOworCisg
ICAgICAgIG1TdWJyZXNvdXJjZUluZGV4ID0gZ2V0UlRWU3VicmVzb3VyY2VJbmRleChtVGV4dHVy
ZSwgbVJlbmRlclRhcmdldCk7CisgICAgICAgIG1XaWR0aCA9IHdpZHRoOworICAgICAgICBtSGVp
Z2h0ID0gaGVpZ2h0OworICAgICAgICBtU2FtcGxlcyA9ICh0ZXhEZXNjLlNhbXBsZURlc2MuQ291
bnQgPiAxKSA/IHRleERlc2MuU2FtcGxlRGVzYy5Db3VudCA6IDA7CisKKyAgICAgICAgbUludGVy
bmFsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoZGVzYy5G
b3JtYXQpOworICAgICAgICBtQWN0dWFsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRUZXh0dXJl
SW50ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQpOworICAgIH0KK30KKworUmVuZGVyVGFyZ2V0MTE6
OlJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgSUQzRDExRGVwdGhTdGVuY2lsVmll
dyAqZHN2LCBJRDNEMTFUZXh0dXJlMkQgKnRleCwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpz
cnYsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIG1SZW5kZXJlciA9IFJl
bmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKHJlbmRlcmVyKTsKKyAgICBtVGV4dHVyZSA9IHRleDsK
KyAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICBtRGVwdGhTdGVuY2lsID0gZHN2OworICAg
IG1TaGFkZXJSZXNvdXJjZSA9IHNydjsKKyAgICBtU3VicmVzb3VyY2VJbmRleCA9IDA7CisKKyAg
ICBpZiAobURlcHRoU3RlbmNpbCAmJiBtVGV4dHVyZSkKKyAgICB7CisgICAgICAgIEQzRDExX0RF
UFRIX1NURU5DSUxfVklFV19ERVNDIGRlc2M7CisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPkdldERl
c2MoJmRlc2MpOworCisgICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleERlc2M7CisgICAg
ICAgIG1UZXh0dXJlLT5HZXREZXNjKCZ0ZXhEZXNjKTsKKworICAgICAgICBtU3VicmVzb3VyY2VJ
bmRleCA9IGdldERTVlN1YnJlc291cmNlSW5kZXgobVRleHR1cmUsIG1EZXB0aFN0ZW5jaWwpOwor
ICAgICAgICBtV2lkdGggPSB3aWR0aDsKKyAgICAgICAgbUhlaWdodCA9IGhlaWdodDsKKyAgICAg
ICAgbVNhbXBsZXMgPSAodGV4RGVzYy5TYW1wbGVEZXNjLkNvdW50ID4gMSkgPyB0ZXhEZXNjLlNh
bXBsZURlc2MuQ291bnQgOiAwOworCisgICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGQzZDExX2ds
OjpDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGRlc2MuRm9ybWF0KTsKKyAgICAgICAgbUFj
dHVhbEZvcm1hdCA9IGQzZDExX2dsOjpDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGRlc2Mu
Rm9ybWF0KTsKKyAgICB9Cit9CisKK1JlbmRlclRhcmdldDExOjpSZW5kZXJUYXJnZXQxMShSZW5k
ZXJlciAqcmVuZGVyZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBHTHNpemVpIHNhbXBsZXMsIGJvb2wgZGVwdGgpCit7CisgICAgbVJlbmRlcmVyID0gUmVu
ZGVyZXIxMTo6bWFrZVJlbmRlcmVyMTEocmVuZGVyZXIpOworICAgIG1UZXh0dXJlID0gTlVMTDsK
KyAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKKyAg
ICBtU2hhZGVyUmVzb3VyY2UgPSBOVUxMOworCisgICAgRFhHSV9GT1JNQVQgcmVxdWVzdGVkRm9y
bWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoZm9ybWF0KTsKKworICAg
IGludCBzdXBwb3J0ZWRTYW1wbGVzID0gbVJlbmRlcmVyLT5nZXROZWFyZXN0U3VwcG9ydGVkU2Ft
cGxlcyhyZXF1ZXN0ZWRGb3JtYXQsIHNhbXBsZXMpOworICAgIGlmIChzdXBwb3J0ZWRTYW1wbGVz
IDwgMCkKKyAgICB7CisgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkKKyAg
ICB7CisgICAgICAgIC8vIENyZWF0ZSB0ZXh0dXJlIHJlc291cmNlCisgICAgICAgIEQzRDExX1RF
WFRVUkUyRF9ERVNDIGRlc2M7CisgICAgICAgIGRlc2MuV2lkdGggPSB3aWR0aDsgCisgICAgICAg
IGRlc2MuSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICBkZXNjLk1pcExldmVscyA9IDE7CisgICAg
ICAgIGRlc2MuQXJyYXlTaXplID0gMTsKKyAgICAgICAgZGVzYy5Gb3JtYXQgPSByZXF1ZXN0ZWRG
b3JtYXQ7CisgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IChzdXBwb3J0ZWRTYW1wbGVz
ID09IDApID8gMSA6IHN1cHBvcnRlZFNhbXBsZXM7CisgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5R
dWFsaXR5ID0gMDsKKyAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7Cisg
ICAgICAgIGRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOworICAgICAgICBkZXNjLk1pc2NGbGFncyA9
IDA7CisgICAgICAgIGRlc2MuQmluZEZsYWdzID0gKGRlcHRoID8gRDNEMTFfQklORF9ERVBUSF9T
VEVOQ0lMIDogKEQzRDExX0JJTkRfUkVOREVSX1RBUkdFVCB8IEQzRDExX0JJTkRfU0hBREVSX1JF
U09VUkNFKSk7CisKKyAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdl
dERldmljZSgpOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVy
ZTJEKCZkZXNjLCBOVUxMLCAmbVRleHR1cmUpOworCisgICAgICAgIGlmIChyZXN1bHQgPT0gRV9P
VVRPRk1FTU9SWSkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgaWYgKGRlcHRoKQorICAgICAgICB7CisgICAg
ICAgICAgICBEM0QxMV9ERVBUSF9TVEVOQ0lMX1ZJRVdfREVTQyBkc3ZEZXNjOworICAgICAgICAg
ICAgZHN2RGVzYy5Gb3JtYXQgPSByZXF1ZXN0ZWRGb3JtYXQ7CisgICAgICAgICAgICBkc3ZEZXNj
LlZpZXdEaW1lbnNpb24gPSAoc3VwcG9ydGVkU2FtcGxlcyA9PSAwKSA/IEQzRDExX0RTVl9ESU1F
TlNJT05fVEVYVFVSRTJEIDogRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMkRNUzsKKyAgICAg
ICAgICAgIGRzdkRlc2MuVGV4dHVyZTJELk1pcFNsaWNlID0gMDsKKyAgICAgICAgICAgIGRzdkRl
c2MuRmxhZ3MgPSAwOworICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0
ZW5jaWxWaWV3KG1UZXh0dXJlLCAmZHN2RGVzYywgJm1EZXB0aFN0ZW5jaWwpOworCisgICAgICAg
ICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICBtVGV4dHVyZSA9
IE5VTEw7CisgICAgICAgICAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEQzRDExX1JFTkRFUl9U
QVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CisgICAgICAgICAgICBydHZEZXNjLkZvcm1hdCA9IHJl
cXVlc3RlZEZvcm1hdDsKKyAgICAgICAgICAgIHJ0dkRlc2MuVmlld0RpbWVuc2lvbiA9IChzdXBw
b3J0ZWRTYW1wbGVzID09IDApID8gRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMkQgOiBEM0Qx
MV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyRE1TOworICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJl
MkQuTWlwU2xpY2UgPSAwOworICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5k
ZXJUYXJnZXRWaWV3KG1UZXh0dXJlLCAmcnR2RGVzYywgJm1SZW5kZXJUYXJnZXQpOworCisgICAg
ICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICBtVGV4dHVy
ZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VS
VChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgICAgIEQzRDExX1NIQURFUl9SRVNPVVJD
RV9WSUVXX0RFU0Mgc3J2RGVzYzsKKyAgICAgICAgICAgIHNydkRlc2MuRm9ybWF0ID0gcmVxdWVz
dGVkRm9ybWF0OworICAgICAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gKHN1cHBvcnRl
ZFNhbXBsZXMgPT0gMCkgPyBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyRCA6IEQzRDExX1NS
Vl9ESU1FTlNJT05fVEVYVFVSRTJETVM7CisgICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyRC5N
b3N0RGV0YWlsZWRNaXAgPSAwOworICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkQuTWlwTGV2
ZWxzID0gMTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3Vy
Y2VWaWV3KG1UZXh0dXJlLCAmc3J2RGVzYywgJm1TaGFkZXJSZXNvdXJjZSk7CisKKyAgICAgICAg
ICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgIG1UZXh0dXJlID0g
TlVMTDsKKyAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7CisgICAgICAg
ICAgICAgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7CisgICAgICAgICAgICAgICAgZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBtV2lkdGggPSB3aWR0aDsKKyAgICBtSGVpZ2h0ID0gaGVpZ2h0OworICAgIG1J
bnRlcm5hbEZvcm1hdCA9IGZvcm1hdDsKKyAgICBtU2FtcGxlcyA9IHN1cHBvcnRlZFNhbXBsZXM7
CisgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDExX2dsOjpDb252ZXJ0VGV4dHVyZUludGVybmFsRm9y
bWF0KHJlcXVlc3RlZEZvcm1hdCk7CisgICAgbVN1YnJlc291cmNlSW5kZXggPSBEM0QxMUNhbGNT
dWJyZXNvdXJjZSgwLCAwLCAxKTsKK30KKworUmVuZGVyVGFyZ2V0MTE6On5SZW5kZXJUYXJnZXQx
MSgpCit7CisgICAgaWYgKG1UZXh0dXJlKQorICAgIHsKKyAgICAgICAgbVRleHR1cmUtPlJlbGVh
c2UoKTsKKyAgICAgICAgbVRleHR1cmUgPSBOVUxMOworICAgIH0KKworICAgIGlmIChtUmVuZGVy
VGFyZ2V0KQorICAgIHsKKyAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworICAgICAg
ICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAobURlcHRoU3RlbmNpbCkK
KyAgICB7CisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKKyAgICAgICAgbURlcHRo
U3RlbmNpbCA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKG1TaGFkZXJSZXNvdXJjZSkKKyAgICB7
CisgICAgICAgIG1TaGFkZXJSZXNvdXJjZS0+UmVsZWFzZSgpOworICAgICAgICBtU2hhZGVyUmVz
b3VyY2UgPSBOVUxMOworICAgIH0KK30KKworUmVuZGVyVGFyZ2V0MTEgKlJlbmRlclRhcmdldDEx
OjptYWtlUmVuZGVyVGFyZ2V0MTEoUmVuZGVyVGFyZ2V0ICp0YXJnZXQpCit7CisgICAgQVNTRVJU
KEhBU19EWU5BTUlDX1RZUEUocng6OlJlbmRlclRhcmdldDExKiwgdGFyZ2V0KSk7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PHJ4OjpSZW5kZXJUYXJnZXQxMSo+KHRhcmdldCk7Cit9CisKK0lEM0Qx
MVRleHR1cmUyRCAqUmVuZGVyVGFyZ2V0MTE6OmdldFRleHR1cmUoKSBjb25zdAoreworICAgIHJl
dHVybiBtVGV4dHVyZTsKK30KKworSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqUmVuZGVyVGFyZ2V0
MTE6OmdldFJlbmRlclRhcmdldFZpZXcoKSBjb25zdAoreworICAgIHJldHVybiBtUmVuZGVyVGFy
Z2V0OworfQorCitJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpSZW5kZXJUYXJnZXQxMTo6Z2V0RGVw
dGhTdGVuY2lsVmlldygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7Cit9CisK
K0lEM0QxMVNoYWRlclJlc291cmNlVmlldyAqUmVuZGVyVGFyZ2V0MTE6OmdldFNoYWRlclJlc291
cmNlVmlldygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TaGFkZXJSZXNvdXJjZTsKK30KKwordW5z
aWduZWQgaW50IFJlbmRlclRhcmdldDExOjpnZXRTdWJyZXNvdXJjZUluZGV4KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbVN1YnJlc291cmNlSW5kZXg7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFy
Z2V0MTEuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkMTEvUmVuZGVyVGFyZ2V0MTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NzgyN2YyNjM5NzA3Mjk0Mjg0YTJj
Y2QzNDgxYzk3YmVkZTg5YjA3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJUYXJnZXQxMS5oCkBAIC0w
LDAgKzEsNTEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBSZW5kZXJUYXJnZXQxMS5oOiBEZWZpbmVz
IGEgRFgxMS1zcGVjaWZpYyB3cmFwcGVyIGZvciBJRDNEMTFWaWV3IHBvaW50ZXJzCisvLyByZXRh
aW5lZCBieSBSZW5kZXJidWZmZXJzLgorCisjaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5E
RVJUQVJHRVQxMV9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSVEFSR0VUMTFf
SF8KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQuaCIKKworbmFt
ZXNwYWNlIHJ4Cit7CitjbGFzcyBSZW5kZXJlcjsKK2NsYXNzIFJlbmRlcmVyMTE7CisKK2NsYXNz
IFJlbmRlclRhcmdldDExIDogcHVibGljIFJlbmRlclRhcmdldAoreworICBwdWJsaWM6CisgICAg
UmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3
ICpydHYsIElEM0QxMVRleHR1cmUyRCAqdGV4LCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNy
diwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAgIFJlbmRlclRhcmdldDExKFJl
bmRlcmVyICpyZW5kZXJlciwgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZHN2LCBJRDNEMTFUZXh0
dXJlMkQgKnRleCwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICBSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNh
bXBsZXMsIGJvb2wgZGVwdGgpOworICAgIHZpcnR1YWwgflJlbmRlclRhcmdldDExKCk7CisKKyAg
ICBzdGF0aWMgUmVuZGVyVGFyZ2V0MTEgKm1ha2VSZW5kZXJUYXJnZXQxMShSZW5kZXJUYXJnZXQg
KnJlbmRlclRhcmdldCk7CisKKyAgICBJRDNEMTFUZXh0dXJlMkQgKmdldFRleHR1cmUoKSBjb25z
dDsKKyAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpnZXRSZW5kZXJUYXJnZXRWaWV3KCkgY29u
c3Q7CisgICAgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZ2V0RGVwdGhTdGVuY2lsVmlldygpIGNv
bnN0OworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0U2hhZGVyUmVzb3VyY2VWaWV3
KCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBpbnQgZ2V0U3VicmVzb3VyY2VJbmRleCgpIGNvbnN0
OworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlclRhcmdl
dDExKTsKKworICAgIHVuc2lnbmVkIGludCBtU3VicmVzb3VyY2VJbmRleDsKKyAgICBJRDNEMTFU
ZXh0dXJlMkQgKm1UZXh0dXJlOworICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKm1SZW5kZXJU
YXJnZXQ7CisgICAgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqbURlcHRoU3RlbmNpbDsKKyAgICBJ
RDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKm1TaGFkZXJSZXNvdXJjZTsKKworICAgIFJlbmRlcmVy
MTEgKm1SZW5kZXJlcjsKK307CisKK30KKworI2VuZGlmIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5E
RVJUQVJHRVQxMV9IXwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVy
ZXIxMS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL1JlbmRlcmVyMTEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcyMmYwYzVhNDU1M2Q4MDUzMGFkN2Vk
OWI4YjU3NDU4NTVlNWUyMDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuY3BwCkBAIC0wLDAg
KzEsMzYyMyBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisvLyBSZW5kZXJlcjExLmNwcDogSW1wbGVtZW50cyBhIGJhY2stZW5kIHNwZWNpZmljIGNsYXNz
IGZvciB0aGUgRDNEMTEgcmVuZGVyZXIuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgor
I2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQnVm
ZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVy
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFyZ2V0MTEuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dhcENoYWluMTEuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW1hZ2UxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9WZXJ0ZXhCdWZmZXIxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9JbmRleEJ1ZmZlcjExLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL0J1ZmZlclN0b3JhZ2UxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9W
ZXJ0ZXhEYXRhTWFuYWdlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbmRleERh
dGFNYW5hZ2VyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1RleHR1cmVT
dG9yYWdlMTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUXVlcnkxMS5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9GZW5jZTExLmgiCisKKyNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3Vn
aDExdnMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21w
aWxlZC9wYXNzdGhyb3VnaHJnYmExMXBzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2IxMXBzLmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hsdW0x
MXBzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGls
ZWQvcGFzc3Rocm91Z2hsdW1hbHBoYTExcHMuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyMTF2cy5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyc2luZ2xlMTFwcy5oIgor
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFy
bXVsdGlwbGUxMXBzLmgiCisKKyNpbmNsdWRlICJsaWJFR0wvRGlzcGxheS5oIgorCisvLyBFbmFi
bGUgQU5HTEVfU0tJUF9EWEdJXzFfMl9DSEVDSyBpZiB0aGVyZSBpcyBub3QgYSBwb3NzaWJpbGl0
eSBvZiB1c2luZyBjcm9zcy1wcm9jZXNzCisvLyBIV05EcyBvciB0aGUgV2luZG93cyA3IFBsYXRm
b3JtIFVwZGF0ZSAoS0IyNjcwODM4KSBpcyBleHBlY3RlZCB0byBiZSBpbnN0YWxsZWQuCisjaWZu
ZGVmIEFOR0xFX1NLSVBfRFhHSV8xXzJfQ0hFQ0sKKyNkZWZpbmUgQU5HTEVfU0tJUF9EWEdJXzFf
Ml9DSEVDSyAwCisjZW5kaWYKKworI2lmZGVmIF9ERUJVRworLy8gdGhpcyBmbGFnIGVuYWJsZXMg
c3VwcHJlc3Npbmcgc29tZSBzcHVyaW91cyB3YXJuaW5ncyB0aGF0IHBvcCB1cCBpbiBjZXJ0YWlu
IFdlYkdMIHNhbXBsZXMKKy8vIGFuZCBjb25mb3JtYW5jZSB0ZXN0cy4gdG8gZW5hYmxlIGFsbCB3
YXJuaW5ncywgcmVtb3ZlIHRoaXMgZGVmaW5lLgorI2RlZmluZSBBTkdMRV9TVVBQUkVTU19EM0Qx
MV9IQVpBUkRfV0FSTklOR1MgMQorI2VuZGlmCisKK25hbWVzcGFjZSByeAoreworc3RhdGljIGNv
bnN0IERYR0lfRk9STUFUIFJlbmRlclRhcmdldEZvcm1hdHNbXSA9CisgICAgeworICAgICAgICBE
WEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STSwKKyAgICAgICAgRFhHSV9GT1JNQVRfUjhHOEI4QThf
VU5PUk0KKyAgICB9OworCitzdGF0aWMgY29uc3QgRFhHSV9GT1JNQVQgRGVwdGhTdGVuY2lsRm9y
bWF0c1tdID0KKyAgICB7CisgICAgICAgIERYR0lfRk9STUFUX1VOS05PV04sCisgICAgICAgIERY
R0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5ULAorICAgICAgICBEWEdJX0ZPUk1BVF9EMTZfVU5P
Uk0KKyAgICB9OworCitlbnVtCit7CisgICAgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGX1NN
NCA9IDE2Cit9OworCitSZW5kZXJlcjExOjpSZW5kZXJlcjExKGVnbDo6RGlzcGxheSAqZGlzcGxh
eSwgSERDIGhEYykgOiBSZW5kZXJlcihkaXNwbGF5KSwgbURjKGhEYykKK3sKKyAgICBtVmVydGV4
RGF0YU1hbmFnZXIgPSBOVUxMOworICAgIG1JbmRleERhdGFNYW5hZ2VyID0gTlVMTDsKKworICAg
IG1MaW5lTG9vcElCID0gTlVMTDsKKyAgICBtVHJpYW5nbGVGYW5JQiA9IE5VTEw7CisKKyAgICBt
Q29weVJlc291cmNlc0luaXRpYWxpemVkID0gZmFsc2U7CisgICAgbUNvcHlWQiA9IE5VTEw7Cisg
ICAgbUNvcHlTYW1wbGVyID0gTlVMTDsKKyAgICBtQ29weUlMID0gTlVMTDsKKyAgICBtQ29weVZT
ID0gTlVMTDsKKyAgICBtQ29weVJHQkFQUyA9IE5VTEw7CisgICAgbUNvcHlSR0JQUyA9IE5VTEw7
CisgICAgbUNvcHlMdW1QUyA9IE5VTEw7CisgICAgbUNvcHlMdW1BbHBoYVBTID0gTlVMTDsKKwor
ICAgIG1DbGVhclJlc291cmNlc0luaXRpYWxpemVkID0gZmFsc2U7CisgICAgbUNsZWFyVkIgPSBO
VUxMOworICAgIG1DbGVhcklMID0gTlVMTDsKKyAgICBtQ2xlYXJWUyA9IE5VTEw7CisgICAgbUNs
ZWFyU2luZ2xlUFMgPSBOVUxMOworICAgIG1DbGVhck11bHRpcGxlUFMgPSBOVUxMOworICAgIG1D
bGVhclNjaXNzb3JSUyA9IE5VTEw7CisgICAgbUNsZWFyTm9TY2lzc29yUlMgPSBOVUxMOworCisg
ICAgbVN5bmNRdWVyeSA9IE5VTEw7CisKKyAgICBtRDNkMTFNb2R1bGUgPSBOVUxMOworICAgIG1E
eGdpTW9kdWxlID0gTlVMTDsKKworICAgIG1EZXZpY2VMb3N0ID0gZmFsc2U7CisKKyAgICBtTWF4
U3VwcG9ydGVkU2FtcGxlcyA9IDA7CisKKyAgICBtRGV2aWNlID0gTlVMTDsKKyAgICBtRGV2aWNl
Q29udGV4dCA9IE5VTEw7CisgICAgbUR4Z2lBZGFwdGVyID0gTlVMTDsKKyAgICBtRHhnaUZhY3Rv
cnkgPSBOVUxMOworCisgICAgbURyaXZlckNvbnN0YW50QnVmZmVyVlMgPSBOVUxMOworICAgIG1E
cml2ZXJDb25zdGFudEJ1ZmZlclBTID0gTlVMTDsKKworICAgIG1CR1JBVGV4dHVyZVN1cHBvcnQg
PSBmYWxzZTsKKworICAgIG1Jc0dlb21ldHJ5U2hhZGVyQWN0aXZlID0gZmFsc2U7Cit9CisKK1Jl
bmRlcmVyMTE6On5SZW5kZXJlcjExKCkKK3sKKyAgICByZWxlYXNlKCk7Cit9CisKK1JlbmRlcmVy
MTEgKlJlbmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKFJlbmRlcmVyICpyZW5kZXJlcikKK3sKKyAg
ICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShyeDo6UmVuZGVyZXIxMSosIHJlbmRlcmVyKSk7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHJ4OjpSZW5kZXJlcjExKj4ocmVuZGVyZXIpOworfQorCisj
aWZuZGVmIF9fZDNkMTFfMV9oX18KKyNkZWZpbmUgRDNEMTFfTUVTU0FHRV9JRF9ERVZJQ0VfRFJB
V19SRU5ERVJUQVJHRVRWSUVXX05PVF9TRVQgKChEM0QxMV9NRVNTQUdFX0lEKTMxNDYwODEpCisj
ZW5kaWYKKworRUdMaW50IFJlbmRlcmVyMTE6OmluaXRpYWxpemUoKQoreworICAgIGlmICghaW5p
dGlhbGl6ZUNvbXBpbGVyKCkpCisgICAgeworICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFM
SVpFRDsKKyAgICB9CisKKyAgICBtRHhnaU1vZHVsZSA9IExvYWRMaWJyYXJ5KFRFWFQoImR4Z2ku
ZGxsIikpOworICAgIG1EM2QxMU1vZHVsZSA9IExvYWRMaWJyYXJ5KFRFWFQoImQzZDExLmRsbCIp
KTsKKworICAgIGlmIChtRDNkMTFNb2R1bGUgPT0gTlVMTCB8fCBtRHhnaU1vZHVsZSA9PSBOVUxM
KQorICAgIHsKKyAgICAgICAgRVJSKCJDb3VsZCBub3QgbG9hZCBEM0QxMSBvciBEWEdJIGxpYnJh
cnkgLSBhYm9ydGluZyFcbiIpOworICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsK
KyAgICB9CisKKyAgICAvLyBjcmVhdGUgdGhlIEQzRDExIGRldmljZQorICAgIEFTU0VSVChtRGV2
aWNlID09IE5VTEwpOworICAgIFBGTl9EM0QxMV9DUkVBVEVfREVWSUNFIEQzRDExQ3JlYXRlRGV2
aWNlID0gKFBGTl9EM0QxMV9DUkVBVEVfREVWSUNFKUdldFByb2NBZGRyZXNzKG1EM2QxMU1vZHVs
ZSwgIkQzRDExQ3JlYXRlRGV2aWNlIik7CisKKyAgICBpZiAoRDNEMTFDcmVhdGVEZXZpY2UgPT0g
TlVMTCkKKyAgICB7CisgICAgICAgIEVSUigiQ291bGQgbm90IHJldHJpZXZlIEQzRDExQ3JlYXRl
RGV2aWNlIGFkZHJlc3MgLSBhYm9ydGluZyFcbiIpOworICAgICAgICByZXR1cm4gRUdMX05PVF9J
TklUSUFMSVpFRDsKKyAgICB9CisKKyAgICBEM0RfRkVBVFVSRV9MRVZFTCBmZWF0dXJlTGV2ZWxz
W10gPQorICAgIHsKKyAgICAgICAgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMCwKKyAgICAgICAgRDNE
X0ZFQVRVUkVfTEVWRUxfMTBfMSwKKyAgICAgICAgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMCwKKyAg
ICB9OworCisgICAgSFJFU1VMVCByZXN1bHQgPSBTX09LOworCisjaWZkZWYgX0RFQlVHCisgICAg
cmVzdWx0ID0gRDNEMTFDcmVhdGVEZXZpY2UoTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBEM0RfRFJJVkVSX1RZUEVfSEFSRFdBUkUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0QxMV9DUkVB
VEVfREVWSUNFX0RFQlVHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVM
ZXZlbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlTaXplKGZlYXR1cmVM
ZXZlbHMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRDExX1NES19WRVJTSU9O
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtRGV2aWNlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZtRmVhdHVyZUxldmVsLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZtRGV2aWNlQ29udGV4dCk7CisKKyAgICBpZiAoIW1EZXZpY2UgfHwgRkFJTEVE
KHJlc3VsdCkpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCBjcmVhdGluZyBEZWJ1ZyBEM0Qx
MSBkZXZpY2UgLSBmYWxsaW5nIGJhY2sgdG8gcmVsZWFzZSBydW50aW1lLlxuIik7CisgICAgfQor
CisgICAgaWYgKCFtRGV2aWNlIHx8IEZBSUxFRChyZXN1bHQpKQorI2VuZGlmCisgICAgeworICAg
ICAgICByZXN1bHQgPSBEM0QxMUNyZWF0ZURldmljZShOVUxMLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBEM0RfRFJJVkVSX1RZUEVfSEFSRFdBUkUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVMZXZl
bHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5U2l6ZShmZWF0dXJl
TGV2ZWxzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEMTFfU0RLX1ZF
UlNJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtRGV2aWNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbUZlYXR1cmVMZXZlbCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1EZXZpY2VDb250ZXh0KTsKKworICAgICAgICBp
ZiAoIW1EZXZpY2UgfHwgRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVS
UigiQ291bGQgbm90IGNyZWF0ZSBEM0QxMSBkZXZpY2UgLSBhYm9ydGluZyFcbiIpOworICAgICAg
ICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7ICAgLy8gQ2xlYW51cCBkb25lIGJ5IGRl
c3RydWN0b3IgdGhyb3VnaCBnbERlc3Ryb3lSZW5kZXJlcgorICAgICAgICB9CisgICAgfQorCisj
aWYgIUFOR0xFX1NLSVBfRFhHSV8xXzJfQ0hFQ0sKKyAgICAvLyBJbiBvcmRlciB0byBjcmVhdGUg
YSBzd2FwIGNoYWluIGZvciBhbiBIV05EIG93bmVkIGJ5IGFub3RoZXIgcHJvY2VzcywgRFhHSSAx
LjIgaXMgcmVxdWlyZWQuCisgICAgLy8gVGhlIGVhc2llc3Qgd2F5IHRvIGNoZWNrIGlzIHRvIHF1
ZXJ5IGZvciBhIElEWEdJRGV2aWNlMi4KKyAgICBib29sIHJlcXVpcmVEWEdJMV8yID0gZmFsc2U7
CisgICAgSFdORCBod25kID0gV2luZG93RnJvbURDKG1EYyk7CisgICAgaWYgKGh3bmQpCisgICAg
eworICAgICAgICBEV09SRCBjdXJyZW50UHJvY2Vzc0lkID0gR2V0Q3VycmVudFByb2Nlc3NJZCgp
OworICAgICAgICBEV09SRCB3bmRQcm9jZXNzSWQ7CisgICAgICAgIEdldFdpbmRvd1RocmVhZFBy
b2Nlc3NJZChod25kLCAmd25kUHJvY2Vzc0lkKTsKKyAgICAgICAgcmVxdWlyZURYR0kxXzIgPSAo
Y3VycmVudFByb2Nlc3NJZCAhPSB3bmRQcm9jZXNzSWQpOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICByZXF1aXJlRFhHSTFfMiA9IHRydWU7CisgICAgfQorCisgICAgaWYgKHJlcXVp
cmVEWEdJMV8yKQorICAgIHsKKyAgICAgICAgSURYR0lEZXZpY2UyICpkeGdpRGV2aWNlMiA9IE5V
TEw7CisgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElE
WEdJRGV2aWNlMiksICh2b2lkKiopJmR4Z2lEZXZpY2UyKTsKKyAgICAgICAgaWYgKEZBSUxFRChy
ZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkRYR0kgMS4yIHJlcXVpcmVkIHRv
IHByZXNlbnQgdG8gSFdORHMgb3duZWQgYnkgYW5vdGhlciBwcm9jZXNzLlxuIik7CisgICAgICAg
ICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsKKyAgICAgICAgfQorICAgICAgICBTYWZl
UmVsZWFzZShkeGdpRGV2aWNlMik7CisgICAgfQorI2VuZGlmCisKKyAgICBJRFhHSURldmljZSAq
ZHhnaURldmljZSA9IE5VTEw7CisgICAgcmVzdWx0ID0gbURldmljZS0+UXVlcnlJbnRlcmZhY2Uo
X191dWlkb2YoSURYR0lEZXZpY2UpLCAodm9pZCoqKSZkeGdpRGV2aWNlKTsKKworICAgIGlmIChG
QUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEVSUigiQ291bGQgbm90IHF1ZXJ5IERYR0kg
ZGV2aWNlIC0gYWJvcnRpbmchXG4iKTsKKyAgICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElBTEla
RUQ7CisgICAgfQorCisgICAgcmVzdWx0ID0gZHhnaURldmljZS0+R2V0UGFyZW50KF9fdXVpZG9m
KElEWEdJQWRhcHRlciksICh2b2lkKiopJm1EeGdpQWRhcHRlcik7CisKKyAgICBpZiAoRkFJTEVE
KHJlc3VsdCkpCisgICAgeworICAgICAgICBFUlIoIkNvdWxkIG5vdCByZXRyaWV2ZSBEWEdJIGFk
YXB0ZXIgLSBhYm9ydGluZyFcbiIpOworICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpF
RDsKKyAgICB9CisKKyAgICBkeGdpRGV2aWNlLT5SZWxlYXNlKCk7CisKKyAgICBtRHhnaUFkYXB0
ZXItPkdldERlc2MoJm1BZGFwdGVyRGVzY3JpcHRpb24pOworICAgIG1lbXNldChtRGVzY3JpcHRp
b24sIDAsIHNpemVvZihtRGVzY3JpcHRpb24pKTsKKyAgICB3Y3N0b21icyhtRGVzY3JpcHRpb24s
IG1BZGFwdGVyRGVzY3JpcHRpb24uRGVzY3JpcHRpb24sIHNpemVvZihtRGVzY3JpcHRpb24pIC0g
MSk7CisKKyAgICByZXN1bHQgPSBtRHhnaUFkYXB0ZXItPkdldFBhcmVudChfX3V1aWRvZihJRFhH
SUZhY3RvcnkpLCAodm9pZCoqKSZtRHhnaUZhY3RvcnkpOworCisgICAgaWYgKCFtRHhnaUZhY3Rv
cnkgfHwgRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVh
dGUgRFhHSSBmYWN0b3J5IC0gYWJvcnRpbmchXG4iKTsKKyAgICAgICAgcmV0dXJuIEVHTF9OT1Rf
SU5JVElBTElaRUQ7CisgICAgfQorCisgICAgLy8gRGlzYWJsZSBzb21lIHNwdXJpb3VzIEQzRDEx
IGRlYnVnIHdhcm5pbmdzIHRvIHByZXZlbnQgdGhlbSBmcm9tIGZsb29kaW5nIHRoZSBvdXRwdXQg
bG9nCisjaWYgZGVmaW5lZChBTkdMRV9TVVBQUkVTU19EM0QxMV9IQVpBUkRfV0FSTklOR1MpICYm
IGRlZmluZWQoX0RFQlVHKQorICAgIElEM0QxMUluZm9RdWV1ZSAqaW5mb1F1ZXVlOworICAgIHJl
c3VsdCA9IG1EZXZpY2UtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEM0QxMUluZm9RdWV1ZSks
ICAodm9pZCAqKikmaW5mb1F1ZXVlKTsKKworICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAg
ICB7CisgICAgICAgIEQzRDExX01FU1NBR0VfSUQgaGlkZU1lc3NhZ2VzW10gPQorICAgICAgICB7
CisgICAgICAgICAgICBEM0QxMV9NRVNTQUdFX0lEX0RFVklDRV9EUkFXX1JFTkRFUlRBUkdFVFZJ
RVdfTk9UX1NFVAorICAgICAgICB9OworCisgICAgICAgIEQzRDExX0lORk9fUVVFVUVfRklMVEVS
IGZpbHRlciA9IHswfTsKKyAgICAgICAgZmlsdGVyLkRlbnlMaXN0Lk51bUlEcyA9IEFycmF5U2l6
ZShoaWRlTWVzc2FnZXMpOworICAgICAgICBmaWx0ZXIuRGVueUxpc3QucElETGlzdCA9IGhpZGVN
ZXNzYWdlczsKKworICAgICAgICBpbmZvUXVldWUtPkFkZFN0b3JhZ2VGaWx0ZXJFbnRyaWVzKCZm
aWx0ZXIpOworCisgICAgICAgIGluZm9RdWV1ZS0+UmVsZWFzZSgpOworICAgIH0KKyNlbmRpZgor
CisgICAgdW5zaWduZWQgaW50IG1heFN1cHBvcnRlZFNhbXBsZXMgPSAwOworICAgIHVuc2lnbmVk
IGludCBydEZvcm1hdENvdW50ID0gQXJyYXlTaXplKFJlbmRlclRhcmdldEZvcm1hdHMpOworICAg
IHVuc2lnbmVkIGludCBkc0Zvcm1hdENvdW50ID0gQXJyYXlTaXplKERlcHRoU3RlbmNpbEZvcm1h
dHMpOworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcnRGb3JtYXRDb3VudCArIGRz
Rm9ybWF0Q291bnQ7ICsraSkKKyAgICB7CisgICAgICAgIERYR0lfRk9STUFUIGZvcm1hdCA9IChp
IDwgcnRGb3JtYXRDb3VudCkgPyBSZW5kZXJUYXJnZXRGb3JtYXRzW2ldIDogRGVwdGhTdGVuY2ls
Rm9ybWF0c1tpIC0gcnRGb3JtYXRDb3VudF07CisgICAgICAgIGlmIChmb3JtYXQgIT0gRFhHSV9G
T1JNQVRfVU5LTk9XTikKKyAgICAgICAgeworICAgICAgICAgICAgVUlOVCBmb3JtYXRTdXBwb3J0
OworICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KGZvcm1h
dCwgJmZvcm1hdFN1cHBvcnQpOworICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpICYm
IChmb3JtYXRTdXBwb3J0ICYgRDNEMTFfRk9STUFUX1NVUFBPUlRfTVVMVElTQU1QTEVfUkVOREVS
VEFSR0VUKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNdWx0aXNhbXBsZVN1cHBv
cnRJbmZvIHN1cHBvcnRJbmZvOworCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aiA9IDE7IGogPD0gRDNEMTFfTUFYX01VTFRJU0FNUExFX1NBTVBMRV9DT1VOVDsgaisrKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q2hl
Y2tNdWx0aXNhbXBsZVF1YWxpdHlMZXZlbHMoZm9ybWF0LCBqLCAmc3VwcG9ydEluZm8ucXVhbGl0
eUxldmVsc1tqIC0gMV0pOworICAgICAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3Vs
dCkgJiYgc3VwcG9ydEluZm8ucXVhbGl0eUxldmVsc1tqIC0gMV0gPiAwKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXhTdXBwb3J0ZWRTYW1wbGVzID0g
c3RkOjptYXgoaiwgbWF4U3VwcG9ydGVkU2FtcGxlcyk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzdXBwb3J0SW5mby5xdWFsaXR5TGV2ZWxzW2ogLSAxXSA9IDA7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBtTXVsdGlzYW1wbGVTdXBwb3J0TWFwLmluc2VydChzdGQ6Om1ha2VfcGFpcihmb3JtYXQsIHN1
cHBvcnRJbmZvKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgbU1heFN1
cHBvcnRlZFNhbXBsZXMgPSBtYXhTdXBwb3J0ZWRTYW1wbGVzOworCisgICAgaW5pdGlhbGl6ZURl
dmljZSgpOworCisgICAgLy8gQkdSQSB0ZXh0dXJlIHN1cHBvcnQgaXMgb3B0aW9uYWwgaW4gZmVh
dHVyZSBsZXZlbHMgMTAgYW5kIDEwXzEKKyAgICBVSU5UIGZvcm1hdFN1cHBvcnQ7CisgICAgcmVz
dWx0ID0gbURldmljZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KERYR0lfRk9STUFUX0I4RzhSOEE4X1VO
T1JNLCAmZm9ybWF0U3VwcG9ydCk7CisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAg
ICAgICAgRVJSKCJFcnJvciBjaGVja2luZyBCR1JBIGZvcm1hdCBzdXBwb3J0OiAweCUwOFgiLCBy
ZXN1bHQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjb25zdCBpbnQgZmxhZ3Mg
PSAoRDNEMTFfRk9STUFUX1NVUFBPUlRfVEVYVFVSRTJEIHwgRDNEMTFfRk9STUFUX1NVUFBPUlRf
UkVOREVSX1RBUkdFVCk7CisgICAgICAgIG1CR1JBVGV4dHVyZVN1cHBvcnQgPSAoZm9ybWF0U3Vw
cG9ydCAmIGZsYWdzKSA9PSBmbGFnczsKKyAgICB9CisKKyAgICAvLyBDaGVjayBmbG9hdGluZyBw
b2ludCB0ZXh0dXJlIHN1cHBvcnQKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHJlcXVp
cmVkVGV4dHVyZUZsYWdzID0gRDNEMTFfRk9STUFUX1NVUFBPUlRfVEVYVFVSRTJEIHwgRDNEMTFf
Rk9STUFUX1NVUFBPUlRfVEVYVFVSRUNVQkU7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGlu
dCByZXF1aXJlZFJlbmRlcmFibGVGbGFncyA9IEQzRDExX0ZPUk1BVF9TVVBQT1JUX1JFTkRFUl9U
QVJHRVQ7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCByZXF1aXJlZEZpbHRlckZsYWdz
ID0gRDNEMTFfRk9STUFUX1NVUFBPUlRfU0hBREVSX1NBTVBMRTsKKworICAgIERYR0lfRk9STUFU
IGZsb2F0MTZGb3JtYXRzW10gPQorICAgIHsKKyAgICAgICAgRFhHSV9GT1JNQVRfUjE2X0ZMT0FU
LAorICAgICAgICBEWEdJX0ZPUk1BVF9SMTZHMTZfRkxPQVQsCisgICAgICAgIERYR0lfRk9STUFU
X1IxNkcxNkIxNkExNl9GTE9BVCwKKyAgICB9OworCisgICAgRFhHSV9GT1JNQVQgZmxvYXQzMkZv
cm1hdHNbXSA9CisgICAgeworICAgICAgICBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsCisgICAgICAg
IERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwKKyAgICAgICAgRFhHSV9GT1JNQVRfUjMyRzMyQjMy
QTMyX0ZMT0FULAorICAgIH07CisKKyAgICBtRmxvYXQxNlRleHR1cmVTdXBwb3J0ID0gdHJ1ZTsK
KyAgICBtRmxvYXQxNkZpbHRlclN1cHBvcnQgPSB0cnVlOworICAgIG1GbG9hdDE2UmVuZGVyU3Vw
cG9ydCA9IHRydWU7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUo
ZmxvYXQxNkZvcm1hdHMpOyBpKyspCisgICAgeworICAgICAgICBpZiAoU1VDQ0VFREVEKG1EZXZp
Y2UtPkNoZWNrRm9ybWF0U3VwcG9ydChmbG9hdDE2Rm9ybWF0c1tpXSwgJmZvcm1hdFN1cHBvcnQp
KSkKKyAgICAgICAgeworICAgICAgICAgICAgbUZsb2F0MTZUZXh0dXJlU3VwcG9ydCA9IG1GbG9h
dDE2VGV4dHVyZVN1cHBvcnQgJiYgKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZFRleHR1cmVGbGFn
cykgPT0gcmVxdWlyZWRUZXh0dXJlRmxhZ3M7CisgICAgICAgICAgICBtRmxvYXQxNkZpbHRlclN1
cHBvcnQgPSBtRmxvYXQxNkZpbHRlclN1cHBvcnQgJiYgKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJl
ZEZpbHRlckZsYWdzKSA9PSByZXF1aXJlZEZpbHRlckZsYWdzOworICAgICAgICAgICAgbUZsb2F0
MTZSZW5kZXJTdXBwb3J0ID0gbUZsb2F0MTZSZW5kZXJTdXBwb3J0ICYmIChmb3JtYXRTdXBwb3J0
ICYgcmVxdWlyZWRSZW5kZXJhYmxlRmxhZ3MpID09IHJlcXVpcmVkUmVuZGVyYWJsZUZsYWdzOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbUZsb2F0MTZU
ZXh0dXJlU3VwcG9ydCA9IGZhbHNlOworICAgICAgICAgICAgbUZsb2F0MTZSZW5kZXJTdXBwb3J0
ID0gZmFsc2U7CisgICAgICAgICAgICBtRmxvYXQxNkZpbHRlclN1cHBvcnQgPSBmYWxzZTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQgPSB0cnVlOworICAg
IG1GbG9hdDMyRmlsdGVyU3VwcG9ydCA9IHRydWU7CisgICAgbUZsb2F0MzJSZW5kZXJTdXBwb3J0
ID0gdHJ1ZTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShmbG9h
dDMyRm9ybWF0cyk7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChTVUNDRUVERUQobURldmljZS0+
Q2hlY2tGb3JtYXRTdXBwb3J0KGZsb2F0MzJGb3JtYXRzW2ldLCAmZm9ybWF0U3VwcG9ydCkpKQor
ICAgICAgICB7CisgICAgICAgICAgICBtRmxvYXQzMlRleHR1cmVTdXBwb3J0ID0gbUZsb2F0MzJU
ZXh0dXJlU3VwcG9ydCAmJiAoZm9ybWF0U3VwcG9ydCAmIHJlcXVpcmVkVGV4dHVyZUZsYWdzKSA9
PSByZXF1aXJlZFRleHR1cmVGbGFnczsKKyAgICAgICAgICAgIG1GbG9hdDMyRmlsdGVyU3VwcG9y
dCA9IG1GbG9hdDMyRmlsdGVyU3VwcG9ydCAmJiAoZm9ybWF0U3VwcG9ydCAmIHJlcXVpcmVkRmls
dGVyRmxhZ3MpID09IHJlcXVpcmVkRmlsdGVyRmxhZ3M7CisgICAgICAgICAgICBtRmxvYXQzMlJl
bmRlclN1cHBvcnQgPSBtRmxvYXQzMlJlbmRlclN1cHBvcnQgJiYgKGZvcm1hdFN1cHBvcnQgJiBy
ZXF1aXJlZFJlbmRlcmFibGVGbGFncykgPT0gcmVxdWlyZWRSZW5kZXJhYmxlRmxhZ3M7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtRmxvYXQzMlRleHR1
cmVTdXBwb3J0ID0gZmFsc2U7CisgICAgICAgICAgICBtRmxvYXQzMkZpbHRlclN1cHBvcnQgPSBm
YWxzZTsKKyAgICAgICAgICAgIG1GbG9hdDMyUmVuZGVyU3VwcG9ydCA9IGZhbHNlOworICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gQ2hlY2sgY29tcHJlc3NlZCB0ZXh0dXJlIHN1cHBvcnQKKyAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgcmVxdWlyZWRDb21wcmVzc2VkVGV4dHVyZUZsYWdzID0gRDNE
MTFfRk9STUFUX1NVUFBPUlRfVEVYVFVSRTJEOworCisgICAgaWYgKFNVQ0NFRURFRChtRGV2aWNl
LT5DaGVja0Zvcm1hdFN1cHBvcnQoRFhHSV9GT1JNQVRfQkMxX1VOT1JNLCAmZm9ybWF0U3VwcG9y
dCkpKQorICAgIHsKKyAgICAgICAgbURYVDFUZXh0dXJlU3VwcG9ydCA9IChmb3JtYXRTdXBwb3J0
ICYgcmVxdWlyZWRDb21wcmVzc2VkVGV4dHVyZUZsYWdzKSA9PSByZXF1aXJlZENvbXByZXNzZWRU
ZXh0dXJlRmxhZ3M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1EWFQxVGV4dHVy
ZVN1cHBvcnQgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoU1VDQ0VFREVEKG1EZXZpY2UtPkNo
ZWNrRm9ybWF0U3VwcG9ydChEWEdJX0ZPUk1BVF9CQzNfVU5PUk0sICZmb3JtYXRTdXBwb3J0KSkp
CisgICAgeworICAgICAgICBtRFhUM1RleHR1cmVTdXBwb3J0ID0gKGZvcm1hdFN1cHBvcnQgJiBy
ZXF1aXJlZENvbXByZXNzZWRUZXh0dXJlRmxhZ3MpID09IHJlcXVpcmVkQ29tcHJlc3NlZFRleHR1
cmVGbGFnczsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbURYVDNUZXh0dXJlU3Vw
cG9ydCA9IGZhbHNlOworICAgIH0KKworICAgIGlmIChTVUNDRUVERUQobURldmljZS0+Q2hlY2tG
b3JtYXRTdXBwb3J0KERYR0lfRk9STUFUX0JDNV9VTk9STSwgJmZvcm1hdFN1cHBvcnQpKSkKKyAg
ICB7CisgICAgICAgIG1EWFQ1VGV4dHVyZVN1cHBvcnQgPSAoZm9ybWF0U3VwcG9ydCAmIHJlcXVp
cmVkQ29tcHJlc3NlZFRleHR1cmVGbGFncykgPT0gcmVxdWlyZWRDb21wcmVzc2VkVGV4dHVyZUZs
YWdzOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRFhUNVRleHR1cmVTdXBwb3J0
ID0gZmFsc2U7CisgICAgfQorCisgICAgLy8gQ2hlY2sgZGVwdGggdGV4dHVyZSBzdXBwb3J0Cisg
ICAgRFhHSV9GT1JNQVQgZGVwdGhUZXh0dXJlRm9ybWF0c1tdID0KKyAgICB7CisgICAgICAgIERY
R0lfRk9STUFUX0QxNl9VTk9STSwKKyAgICAgICAgRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJ
TlQsCisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcmVxdWlyZWREZXB0
aFRleHR1cmVGbGFncyA9IEQzRDExX0ZPUk1BVF9TVVBQT1JUX0RFUFRIX1NURU5DSUwgfAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQz
RDExX0ZPUk1BVF9TVVBQT1JUX1RFWFRVUkUyRDsKKworICAgIG1EZXB0aFRleHR1cmVTdXBwb3J0
ID0gdHJ1ZTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShkZXB0
aFRleHR1cmVGb3JtYXRzKTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKFNVQ0NFRURFRChtRGV2
aWNlLT5DaGVja0Zvcm1hdFN1cHBvcnQoZGVwdGhUZXh0dXJlRm9ybWF0c1tpXSwgJmZvcm1hdFN1
cHBvcnQpKSkKKyAgICAgICAgeworICAgICAgICAgICAgbURlcHRoVGV4dHVyZVN1cHBvcnQgPSBt
RGVwdGhUZXh0dXJlU3VwcG9ydCAmJiAoKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZERlcHRoVGV4
dHVyZUZsYWdzKSA9PSByZXF1aXJlZERlcHRoVGV4dHVyZUZsYWdzKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXB0aFRleHR1cmVTdXBwb3J0ID0g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gRUdMX1NVQ0NFU1M7Cit9CisK
Ky8vIGRvIGFueSBvbmUtdGltZSBkZXZpY2UgaW5pdGlhbGl6YXRpb24KKy8vIE5PVEU6IHRoaXMg
aXMgYWxzbyBuZWVkZWQgYWZ0ZXIgYSBkZXZpY2UgbG9zdC9yZXNldAorLy8gdG8gcmVzZXQgdGhl
IHNjZW5lIHN0YXR1cyBhbmQgZW5zdXJlIHRoZSBkZWZhdWx0IHN0YXRlcyBhcmUgcmVzZXQuCit2
b2lkIFJlbmRlcmVyMTE6OmluaXRpYWxpemVEZXZpY2UoKQoreworICAgIG1TdGF0ZUNhY2hlLmlu
aXRpYWxpemUobURldmljZSk7CisgICAgbUlucHV0TGF5b3V0Q2FjaGUuaW5pdGlhbGl6ZShtRGV2
aWNlLCBtRGV2aWNlQ29udGV4dCk7CisKKyAgICBBU1NFUlQoIW1WZXJ0ZXhEYXRhTWFuYWdlciAm
JiAhbUluZGV4RGF0YU1hbmFnZXIpOworICAgIG1WZXJ0ZXhEYXRhTWFuYWdlciA9IG5ldyBWZXJ0
ZXhEYXRhTWFuYWdlcih0aGlzKTsKKyAgICBtSW5kZXhEYXRhTWFuYWdlciA9IG5ldyBJbmRleERh
dGFNYW5hZ2VyKHRoaXMpOworCisgICAgbWFya0FsbFN0YXRlRGlydHkoKTsKK30KKworaW50IFJl
bmRlcmVyMTE6OmdlbmVyYXRlQ29uZmlncyhDb25maWdEZXNjICoqY29uZmlnRGVzY0xpc3QpCit7
CisgICAgdW5zaWduZWQgaW50IG51bVJlbmRlckZvcm1hdHMgPSBBcnJheVNpemUoUmVuZGVyVGFy
Z2V0Rm9ybWF0cyk7CisgICAgdW5zaWduZWQgaW50IG51bURlcHRoRm9ybWF0cyA9IEFycmF5U2l6
ZShEZXB0aFN0ZW5jaWxGb3JtYXRzKTsKKyAgICAoKmNvbmZpZ0Rlc2NMaXN0KSA9IG5ldyBDb25m
aWdEZXNjW251bVJlbmRlckZvcm1hdHMgKiBudW1EZXB0aEZvcm1hdHNdOworICAgIGludCBudW1D
b25maWdzID0gMDsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGludCBmb3JtYXRJbmRleCA9IDA7
IGZvcm1hdEluZGV4IDwgbnVtUmVuZGVyRm9ybWF0czsgZm9ybWF0SW5kZXgrKykKKyAgICB7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGRlcHRoU3RlbmNpbEluZGV4ID0gMDsgZGVwdGhTdGVu
Y2lsSW5kZXggPCBudW1EZXB0aEZvcm1hdHM7IGRlcHRoU3RlbmNpbEluZGV4KyspCisgICAgICAg
IHsKKyAgICAgICAgICAgIERYR0lfRk9STUFUIHJlbmRlclRhcmdldEZvcm1hdCA9IFJlbmRlclRh
cmdldEZvcm1hdHNbZm9ybWF0SW5kZXhdOworCisgICAgICAgICAgICBVSU5UIGZvcm1hdFN1cHBv
cnQgPSAwOworICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DaGVja0Zvcm1h
dFN1cHBvcnQocmVuZGVyVGFyZ2V0Rm9ybWF0LCAmZm9ybWF0U3VwcG9ydCk7CisKKyAgICAgICAg
ICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSAmJiAoZm9ybWF0U3VwcG9ydCAmIEQzRDExX0ZPUk1B
VF9TVVBQT1JUX1JFTkRFUl9UQVJHRVQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IERYR0lfRk9STUFUIGRlcHRoU3RlbmNpbEZvcm1hdCA9IERlcHRoU3RlbmNpbEZvcm1hdHNbZGVw
dGhTdGVuY2lsSW5kZXhdOworCisgICAgICAgICAgICAgICAgYm9vbCBkZXB0aFN0ZW5jaWxGb3Jt
YXRPSyA9IHRydWU7CisKKyAgICAgICAgICAgICAgICBpZiAoZGVwdGhTdGVuY2lsRm9ybWF0ICE9
IERYR0lfRk9STUFUX1VOS05PV04pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBVSU5UIGZvcm1hdFN1cHBvcnQgPSAwOworICAgICAgICAgICAgICAgICAgICByZXN1bHQg
PSBtRGV2aWNlLT5DaGVja0Zvcm1hdFN1cHBvcnQoZGVwdGhTdGVuY2lsRm9ybWF0LCAmZm9ybWF0
U3VwcG9ydCk7CisgICAgICAgICAgICAgICAgICAgIGRlcHRoU3RlbmNpbEZvcm1hdE9LID0gU1VD
Q0VFREVEKHJlc3VsdCkgJiYgKGZvcm1hdFN1cHBvcnQgJiBEM0QxMV9GT1JNQVRfU1VQUE9SVF9E
RVBUSF9TVEVOQ0lMKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAo
ZGVwdGhTdGVuY2lsRm9ybWF0T0spCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBDb25maWdEZXNjIG5ld0NvbmZpZzsKKyAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmln
LnJlbmRlclRhcmdldEZvcm1hdCA9IGQzZDExX2dsOjpDb252ZXJ0QmFja0J1ZmZlckZvcm1hdChy
ZW5kZXJUYXJnZXRGb3JtYXQpOworICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcuZGVwdGhT
dGVuY2lsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnREZXB0aFN0ZW5jaWxGb3JtYXQoZGVwdGhT
dGVuY2lsRm9ybWF0KTsKKyAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLm11bHRpU2FtcGxl
ID0gMDsgICAgIC8vIEZJWE1FOiBlbnVtZXJhdGUgbXVsdGktc2FtcGxpbmcKKyAgICAgICAgICAg
ICAgICAgICAgbmV3Q29uZmlnLmZhc3RDb25maWcgPSB0cnVlOyAgIC8vIEFzc3VtZSBhbGwgRFgx
MSBmb3JtYXQgY29udmVyc2lvbnMgdG8gYmUgZmFzdAorCisgICAgICAgICAgICAgICAgICAgICgq
Y29uZmlnRGVzY0xpc3QpW251bUNvbmZpZ3MrK10gPSBuZXdDb25maWc7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG51bUNv
bmZpZ3M7Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6ZGVsZXRlQ29uZmlncyhDb25maWdEZXNjICpj
b25maWdEZXNjTGlzdCkKK3sKKyAgICBkZWxldGUgW10gKGNvbmZpZ0Rlc2NMaXN0KTsKK30KKwor
dm9pZCBSZW5kZXJlcjExOjpzeW5jKGJvb2wgYmxvY2spCit7CisgICAgaWYgKGJsb2NrKQorICAg
IHsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQ7CisKKyAgICAgICAgaWYgKCFtU3luY1F1ZXJ5KQor
ICAgICAgICB7CisgICAgICAgICAgICBEM0QxMV9RVUVSWV9ERVNDIHF1ZXJ5RGVzYzsKKyAgICAg
ICAgICAgIHF1ZXJ5RGVzYy5RdWVyeSA9IEQzRDExX1FVRVJZX0VWRU5UOworICAgICAgICAgICAg
cXVlcnlEZXNjLk1pc2NGbGFncyA9IDA7CisKKyAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2Ut
PkNyZWF0ZVF1ZXJ5KCZxdWVyeURlc2MsICZtU3luY1F1ZXJ5KTsKKyAgICAgICAgICAgIEFTU0VS
VChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIH0KKworICAgICAgICBtRGV2aWNlQ29udGV4
dC0+RW5kKG1TeW5jUXVlcnkpOworICAgICAgICBtRGV2aWNlQ29udGV4dC0+Rmx1c2goKTsKKwor
ICAgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlQ29udGV4
dC0+R2V0RGF0YShtU3luY1F1ZXJ5LCBOVUxMLCAwLCBEM0QxMV9BU1lOQ19HRVREQVRBX0RPTk9U
RkxVU0gpOworCisgICAgICAgICAgICAvLyBLZWVwIHBvbGxpbmcsIGJ1dCBhbGxvdyBvdGhlciB0
aHJlYWRzIHRvIGRvIHNvbWV0aGluZyB1c2VmdWwgZmlyc3QKKyAgICAgICAgICAgIFNsZWVwKDAp
OworCisgICAgICAgICAgICBpZiAodGVzdERldmljZUxvc3QodHJ1ZSkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHdoaWxlIChyZXN1bHQgPT0gU19GQUxTRSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIG1EZXZpY2VDb250ZXh0LT5GbHVzaCgpOworICAgIH0KK30KKworU3dhcENoYWluICpS
ZW5kZXJlcjExOjpjcmVhdGVTd2FwQ2hhaW4oSFdORCB3aW5kb3csIEhBTkRMRSBzaGFyZUhhbmRs
ZSwgR0xlbnVtIGJhY2tCdWZmZXJGb3JtYXQsIEdMZW51bSBkZXB0aEJ1ZmZlckZvcm1hdCkKK3sK
KyAgICByZXR1cm4gbmV3IHJ4OjpTd2FwQ2hhaW4xMSh0aGlzLCB3aW5kb3csIHNoYXJlSGFuZGxl
LCBiYWNrQnVmZmVyRm9ybWF0LCBkZXB0aEJ1ZmZlckZvcm1hdCk7Cit9CisKK3ZvaWQgUmVuZGVy
ZXIxMTo6c2V0U2FtcGxlclN0YXRlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGNv
bnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkKK3sKKyAgICBpZiAodHlwZSA9PSBn
bDo6U0FNUExFUl9QSVhFTCkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXgg
Pj0gZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKQorICAgICAgICB7CisgICAgICAgICAgICBF
UlIoIlBpeGVsIHNoYWRlciBzYW1wbGVyIGluZGV4ICVpIGlzIG5vdCB2YWxpZC4iLCBpbmRleCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAobUZvcmNlU2V0
UGl4ZWxTYW1wbGVyU3RhdGVzW2luZGV4XSB8fCBtZW1jbXAoJnNhbXBsZXJTdGF0ZSwgJm1DdXJQ
aXhlbFNhbXBsZXJTdGF0ZXNbaW5kZXhdLCBzaXplb2YoZ2w6OlNhbXBsZXJTdGF0ZSkpICE9IDAp
CisgICAgICAgIHsKKyAgICAgICAgICAgIElEM0QxMVNhbXBsZXJTdGF0ZSAqZHhTYW1wbGVyU3Rh
dGUgPSBtU3RhdGVDYWNoZS5nZXRTYW1wbGVyU3RhdGUoc2FtcGxlclN0YXRlKTsKKworICAgICAg
ICAgICAgaWYgKCFkeFNhbXBsZXJTdGF0ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBFUlIoIk5VTEwgc2FtcGxlciBzdGF0ZSByZXR1cm5lZCBieSBSZW5kZXJTdGF0ZUNhY2hlOjpn
ZXRTYW1wbGVyU3RhdGUsIHNldHRpbmcgdGhlIGRlZmF1bHQiCisgICAgICAgICAgICAgICAgICAg
ICJzYW1wbGVyIHN0YXRlIGZvciBwaXhlbCBzaGFkZXJzIGF0IHNsb3QgJWkuIiwgaW5kZXgpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTYW1wbGVy
cyhpbmRleCwgMSwgJmR4U2FtcGxlclN0YXRlKTsKKworICAgICAgICAgICAgbUN1clBpeGVsU2Ft
cGxlclN0YXRlc1tpbmRleF0gPSBzYW1wbGVyU3RhdGU7CisgICAgICAgIH0KKworICAgICAgICBt
Rm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0ZXNbaW5kZXhdID0gZmFsc2U7CisgICAgfQorICAgIGVs
c2UgaWYgKHR5cGUgPT0gZ2w6OlNBTVBMRVJfVkVSVEVYKQorICAgIHsKKyAgICAgICAgaWYgKGlu
ZGV4IDwgMCB8fCBpbmRleCA+PSAoaW50KWdldE1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiVmVydGV4IHNoYWRlciBzYW1wbGVyIGluZGV4
ICVpIGlzIG5vdCB2YWxpZC4iLCBpbmRleCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpZiAobUZvcmNlU2V0VmVydGV4U2FtcGxlclN0YXRlc1tpbmRleF0gfHwg
bWVtY21wKCZzYW1wbGVyU3RhdGUsICZtQ3VyVmVydGV4U2FtcGxlclN0YXRlc1tpbmRleF0sIHNp
emVvZihnbDo6U2FtcGxlclN0YXRlKSkgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgSUQz
RDExU2FtcGxlclN0YXRlICpkeFNhbXBsZXJTdGF0ZSA9IG1TdGF0ZUNhY2hlLmdldFNhbXBsZXJT
dGF0ZShzYW1wbGVyU3RhdGUpOworCisgICAgICAgICAgICBpZiAoIWR4U2FtcGxlclN0YXRlKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEVSUigiTlVMTCBzYW1wbGVyIHN0YXRlIHJl
dHVybmVkIGJ5IFJlbmRlclN0YXRlQ2FjaGU6OmdldFNhbXBsZXJTdGF0ZSwgc2V0dGluZyB0aGUg
ZGVmYXVsdCIKKyAgICAgICAgICAgICAgICAgICAgInNhbXBsZXIgc3RhdGUgZm9yIHZlcnRleCBz
aGFkZXJzIGF0IHNsb3QgJWkuIiwgaW5kZXgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBtRGV2aWNlQ29udGV4dC0+VlNTZXRTYW1wbGVycyhpbmRleCwgMSwgJmR4U2FtcGxlclN0YXRl
KTsKKworICAgICAgICAgICAgbUN1clZlcnRleFNhbXBsZXJTdGF0ZXNbaW5kZXhdID0gc2FtcGxl
clN0YXRlOworICAgICAgICB9CisKKyAgICAgICAgbUZvcmNlU2V0VmVydGV4U2FtcGxlclN0YXRl
c1tpbmRleF0gPSBmYWxzZTsKKyAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworfQorCit2
b2lkIFJlbmRlcmVyMTE6OnNldFRleHR1cmUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRl
eCwgZ2w6OlRleHR1cmUgKnRleHR1cmUpCit7CisgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3
ICp0ZXh0dXJlU1JWID0gTlVMTDsKKyAgICB1bnNpZ25lZCBpbnQgc2VyaWFsID0gMDsKKyAgICBi
b29sIGZvcmNlU2V0VGV4dHVyZSA9IGZhbHNlOworCisgICAgaWYgKHRleHR1cmUpCisgICAgewor
ICAgICAgICBUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqdGV4U3RvcmFnZSA9IHRleHR1cmUtPmdl
dE5hdGl2ZVRleHR1cmUoKTsKKyAgICAgICAgaWYgKHRleFN0b3JhZ2UpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIFRleHR1cmVTdG9yYWdlMTEgKnN0b3JhZ2UxMSA9IFRleHR1cmVTdG9yYWdlMTE6
Om1ha2VUZXh0dXJlU3RvcmFnZTExKHRleFN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsK
KyAgICAgICAgICAgIHRleHR1cmVTUlYgPSBzdG9yYWdlMTEtPmdldFNSVigpOworICAgICAgICB9
CisKKyAgICAgICAgLy8gSWYgd2UgZ2V0IE5VTEwgYmFjayBmcm9tIGdldFNSViBoZXJlLCBzb21l
dGhpbmcgd2VudCB3cm9uZyBpbiB0aGUgdGV4dHVyZSBjbGFzcyBhbmQgd2UncmUgdW5leHBlY3Rl
ZGx5CisgICAgICAgIC8vIG1pc3NpbmcgdGhlIHNoYWRlciByZXNvdXJjZSB2aWV3CisgICAgICAg
IEFTU0VSVCh0ZXh0dXJlU1JWICE9IE5VTEwpOworCisgICAgICAgIHNlcmlhbCA9IHRleHR1cmUt
PmdldFRleHR1cmVTZXJpYWwoKTsKKyAgICAgICAgZm9yY2VTZXRUZXh0dXJlID0gdGV4dHVyZS0+
aGFzRGlydHlJbWFnZXMoKTsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSBnbDo6U0FNUExFUl9Q
SVhFTCkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gZ2w6Ok1BWF9U
RVhUVVJFX0lNQUdFX1VOSVRTKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIlBpeGVsIHNo
YWRlciBzYW1wbGVyIGluZGV4ICVpIGlzIG5vdCB2YWxpZC4iLCBpbmRleCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoZm9yY2VTZXRUZXh0dXJlIHx8IG1D
dXJQaXhlbFRleHR1cmVTZXJpYWxzW2luZGV4XSAhPSBzZXJpYWwpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlclJlc291cmNlcyhpbmRleCwgMSwgJnRl
eHR1cmVTUlYpOworICAgICAgICB9CisKKyAgICAgICAgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNb
aW5kZXhdID0gc2VyaWFsOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlID09IGdsOjpTQU1QTEVS
X1ZFUlRFWCkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gKGludCln
ZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpKQorICAgICAgICB7CisgICAgICAgICAgICBF
UlIoIlZlcnRleCBzaGFkZXIgc2FtcGxlciBpbmRleCAlaSBpcyBub3QgdmFsaWQuIiwgaW5kZXgp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZvcmNlU2V0
VGV4dHVyZSB8fCBtQ3VyVmVydGV4VGV4dHVyZVNlcmlhbHNbaW5kZXhdICE9IHNlcmlhbCkKKyAg
ICAgICAgeworICAgICAgICAgICAgbURldmljZUNvbnRleHQtPlZTU2V0U2hhZGVyUmVzb3VyY2Vz
KGluZGV4LCAxLCAmdGV4dHVyZVNSVik7CisgICAgICAgIH0KKworICAgICAgICBtQ3VyVmVydGV4
VGV4dHVyZVNlcmlhbHNbaW5kZXhdID0gc2VyaWFsOworICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6c2V0UmFzdGVyaXplclN0YXRlKGNvbnN0IGds
OjpSYXN0ZXJpemVyU3RhdGUgJnJhc3RlclN0YXRlKQoreworICAgIGlmIChtRm9yY2VTZXRSYXN0
ZXJTdGF0ZSB8fCBtZW1jbXAoJnJhc3RlclN0YXRlLCAmbUN1clJhc3RlclN0YXRlLCBzaXplb2Yo
Z2w6OlJhc3Rlcml6ZXJTdGF0ZSkpICE9IDApCisgICAgeworICAgICAgICBJRDNEMTFSYXN0ZXJp
emVyU3RhdGUgKmR4UmFzdGVyU3RhdGUgPSBtU3RhdGVDYWNoZS5nZXRSYXN0ZXJpemVyU3RhdGUo
cmFzdGVyU3RhdGUsIG1TY2lzc29yRW5hYmxlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1DdXJE
ZXB0aFNpemUpOworICAgICAgICBpZiAoIWR4UmFzdGVyU3RhdGUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEVSUigiTlVMTCByYXN0ZXJpemVyIHN0YXRlIHJldHVybmVkIGJ5IFJlbmRlclN0YXRl
Q2FjaGU6OmdldFJhc3Rlcml6ZXJTdGF0ZSwgc2V0dGluZyB0aGUgZGVmYXVsdCIKKyAgICAgICAg
ICAgICAgICAicmFzdGVyaXplciBzdGF0ZS4iKTsKKyAgICAgICAgfQorCisgICAgICAgIG1EZXZp
Y2VDb250ZXh0LT5SU1NldFN0YXRlKGR4UmFzdGVyU3RhdGUpOworCisgICAgICAgIG1DdXJSYXN0
ZXJTdGF0ZSA9IHJhc3RlclN0YXRlOworICAgIH0KKworICAgIG1Gb3JjZVNldFJhc3RlclN0YXRl
ID0gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6c2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVi
dWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29u
c3QgZ2w6OkNvbG9yICZibGVuZENvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGludCBzYW1wbGVNYXNrKQoreworICAgIGlmIChtRm9yY2VTZXRCbGVuZFN0YXRl
IHx8CisgICAgICAgIG1lbWNtcCgmYmxlbmRTdGF0ZSwgJm1DdXJCbGVuZFN0YXRlLCBzaXplb2Yo
Z2w6OkJsZW5kU3RhdGUpKSAhPSAwIHx8CisgICAgICAgIG1lbWNtcCgmYmxlbmRDb2xvciwgJm1D
dXJCbGVuZENvbG9yLCBzaXplb2YoZ2w6OkNvbG9yKSkgIT0gMCB8fAorICAgICAgICBzYW1wbGVN
YXNrICE9IG1DdXJTYW1wbGVNYXNrKQorICAgIHsKKyAgICAgICAgSUQzRDExQmxlbmRTdGF0ZSAq
ZHhCbGVuZFN0YXRlID0gbVN0YXRlQ2FjaGUuZ2V0QmxlbmRTdGF0ZShmcmFtZWJ1ZmZlciwgYmxl
bmRTdGF0ZSk7CisgICAgICAgIGlmICghZHhCbGVuZFN0YXRlKQorICAgICAgICB7CisgICAgICAg
ICAgICBFUlIoIk5VTEwgYmxlbmQgc3RhdGUgcmV0dXJuZWQgYnkgUmVuZGVyU3RhdGVDYWNoZTo6
Z2V0QmxlbmRTdGF0ZSwgc2V0dGluZyB0aGUgZGVmYXVsdCAiCisgICAgICAgICAgICAgICAgImJs
ZW5kIHN0YXRlLiIpOworICAgICAgICB9CisKKyAgICAgICAgZmxvYXQgYmxlbmRDb2xvcnNbNF0g
PSB7MC4wZn07CisgICAgICAgIGlmIChibGVuZFN0YXRlLnNvdXJjZUJsZW5kUkdCICE9IEdMX0NP
TlNUQU5UX0FMUEhBICYmIGJsZW5kU3RhdGUuc291cmNlQmxlbmRSR0IgIT0gR0xfT05FX01JTlVT
X0NPTlNUQU5UX0FMUEhBICYmCisgICAgICAgICAgICBibGVuZFN0YXRlLmRlc3RCbGVuZFJHQiAh
PSBHTF9DT05TVEFOVF9BTFBIQSAmJiBibGVuZFN0YXRlLmRlc3RCbGVuZFJHQiAhPSBHTF9PTkVf
TUlOVVNfQ09OU1RBTlRfQUxQSEEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJsZW5kQ29sb3Jz
WzBdID0gYmxlbmRDb2xvci5yZWQ7CisgICAgICAgICAgICBibGVuZENvbG9yc1sxXSA9IGJsZW5k
Q29sb3IuZ3JlZW47CisgICAgICAgICAgICBibGVuZENvbG9yc1syXSA9IGJsZW5kQ29sb3IuYmx1
ZTsKKyAgICAgICAgICAgIGJsZW5kQ29sb3JzWzNdID0gYmxlbmRDb2xvci5hbHBoYTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGJsZW5kQ29sb3JzWzBd
ID0gYmxlbmRDb2xvci5hbHBoYTsKKyAgICAgICAgICAgIGJsZW5kQ29sb3JzWzFdID0gYmxlbmRD
b2xvci5hbHBoYTsKKyAgICAgICAgICAgIGJsZW5kQ29sb3JzWzJdID0gYmxlbmRDb2xvci5hbHBo
YTsKKyAgICAgICAgICAgIGJsZW5kQ29sb3JzWzNdID0gYmxlbmRDb2xvci5hbHBoYTsKKyAgICAg
ICAgfQorCisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldEJsZW5kU3RhdGUoZHhCbGVuZFN0
YXRlLCBibGVuZENvbG9ycywgc2FtcGxlTWFzayk7CisKKyAgICAgICAgbUN1ckJsZW5kU3RhdGUg
PSBibGVuZFN0YXRlOworICAgICAgICBtQ3VyQmxlbmRDb2xvciA9IGJsZW5kQ29sb3I7CisgICAg
ICAgIG1DdXJTYW1wbGVNYXNrID0gc2FtcGxlTWFzazsKKyAgICB9CisKKyAgICBtRm9yY2VTZXRC
bGVuZFN0YXRlID0gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6c2V0RGVwdGhTdGVuY2ls
U3RhdGUoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZkZXB0aFN0ZW5jaWxTdGF0ZSwgaW50
IHN0ZW5jaWxSZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBz
dGVuY2lsQmFja1JlZiwgYm9vbCBmcm9udEZhY2VDQ1cpCit7CisgICAgaWYgKG1Gb3JjZVNldERl
cHRoU3RlbmNpbFN0YXRlIHx8CisgICAgICAgIG1lbWNtcCgmZGVwdGhTdGVuY2lsU3RhdGUsICZt
Q3VyRGVwdGhTdGVuY2lsU3RhdGUsIHNpemVvZihnbDo6RGVwdGhTdGVuY2lsU3RhdGUpKSAhPSAw
IHx8CisgICAgICAgIHN0ZW5jaWxSZWYgIT0gbUN1clN0ZW5jaWxSZWYgfHwgc3RlbmNpbEJhY2tS
ZWYgIT0gbUN1clN0ZW5jaWxCYWNrUmVmKQorICAgIHsKKyAgICAgICAgaWYgKGRlcHRoU3RlbmNp
bFN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sgIT0gZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbEJhY2tX
cml0ZW1hc2sgfHwKKyAgICAgICAgICAgIHN0ZW5jaWxSZWYgIT0gc3RlbmNpbEJhY2tSZWYgfHwK
KyAgICAgICAgICAgIGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxNYXNrICE9IGRlcHRoU3RlbmNp
bFN0YXRlLnN0ZW5jaWxCYWNrTWFzaykKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJTZXBh
cmF0ZSBmcm9udC9iYWNrIHN0ZW5jaWwgd3JpdGVtYXNrcywgcmVmZXJlbmNlIHZhbHVlcywgb3Ig
c3RlbmNpbCBtYXNrIHZhbHVlcyBhcmUgIgorICAgICAgICAgICAgICAgICJpbnZhbGlkIHVuZGVy
IFdlYkdMLiIpOworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgIH0KKworICAgICAgICBJRDNEMTFEZXB0aFN0ZW5jaWxTdGF0ZSAqZHhE
ZXB0aFN0ZW5jaWxTdGF0ZSA9IG1TdGF0ZUNhY2hlLmdldERlcHRoU3RlbmNpbFN0YXRlKGRlcHRo
U3RlbmNpbFN0YXRlKTsKKyAgICAgICAgaWYgKCFkeERlcHRoU3RlbmNpbFN0YXRlKQorICAgICAg
ICB7CisgICAgICAgICAgICBFUlIoIk5VTEwgZGVwdGggc3RlbmNpbCBzdGF0ZSByZXR1cm5lZCBi
eSBSZW5kZXJTdGF0ZUNhY2hlOjpnZXREZXB0aFN0ZW5jaWxTdGF0ZSwgIgorICAgICAgICAgICAg
ICAgICJzZXR0aW5nIHRoZSBkZWZhdWx0IGRlcHRoIHN0ZW5jaWwgc3RhdGUuIik7CisgICAgICAg
IH0KKworICAgICAgICBtRGV2aWNlQ29udGV4dC0+T01TZXREZXB0aFN0ZW5jaWxTdGF0ZShkeERl
cHRoU3RlbmNpbFN0YXRlLCBzdGF0aWNfY2FzdDxVSU5UPihzdGVuY2lsUmVmKSk7CisKKyAgICAg
ICAgbUN1ckRlcHRoU3RlbmNpbFN0YXRlID0gZGVwdGhTdGVuY2lsU3RhdGU7CisgICAgICAgIG1D
dXJTdGVuY2lsUmVmID0gc3RlbmNpbFJlZjsKKyAgICAgICAgbUN1clN0ZW5jaWxCYWNrUmVmID0g
c3RlbmNpbEJhY2tSZWY7CisgICAgfQorCisgICAgbUZvcmNlU2V0RGVwdGhTdGVuY2lsU3RhdGUg
PSBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJlcjExOjpzZXRTY2lzc29yUmVjdGFuZ2xlKGNvbnN0
IGdsOjpSZWN0YW5nbGUgJnNjaXNzb3IsIGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAobUZvcmNl
U2V0U2Npc3NvciB8fCBtZW1jbXAoJnNjaXNzb3IsICZtQ3VyU2Npc3Nvciwgc2l6ZW9mKGdsOjpS
ZWN0YW5nbGUpKSAhPSAwIHx8CisgICAgICAgIGVuYWJsZWQgIT0gbVNjaXNzb3JFbmFibGVkKQor
ICAgIHsKKyAgICAgICAgaWYgKGVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEQzRDEx
X1JFQ1QgcmVjdDsKKyAgICAgICAgICAgIHJlY3QubGVmdCA9IHN0ZDo6bWF4KDAsIHNjaXNzb3Iu
eCk7CisgICAgICAgICAgICByZWN0LnRvcCA9IHN0ZDo6bWF4KDAsIHNjaXNzb3IueSk7CisgICAg
ICAgICAgICByZWN0LnJpZ2h0ID0gc2Npc3Nvci54ICsgc3RkOjptYXgoMCwgc2Npc3Nvci53aWR0
aCk7CisgICAgICAgICAgICByZWN0LmJvdHRvbSA9IHNjaXNzb3IueSArIHN0ZDo6bWF4KDAsIHNj
aXNzb3IuaGVpZ2h0KTsKKworICAgICAgICAgICAgbURldmljZUNvbnRleHQtPlJTU2V0U2Npc3Nv
clJlY3RzKDEsICZyZWN0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlbmFibGVkICE9IG1T
Y2lzc29yRW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAgbUZvcmNlU2V0UmFzdGVyU3Rh
dGUgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgbUN1clNjaXNzb3IgPSBzY2lzc29yOwor
ICAgICAgICBtU2Npc3NvckVuYWJsZWQgPSBlbmFibGVkOworICAgIH0KKworICAgIG1Gb3JjZVNl
dFNjaXNzb3IgPSBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJlcjExOjpzZXRWaWV3cG9ydChjb25z
dCBnbDo6UmVjdGFuZ2xlICZ2aWV3cG9ydCwgZmxvYXQgek5lYXIsIGZsb2F0IHpGYXIsIEdMZW51
bSBkcmF3TW9kZSwgR0xlbnVtIGZyb250RmFjZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgaWdub3JlVmlld3BvcnQpCit7CisgICAgZ2w6OlJlY3RhbmdsZSBhY3R1YWxWaWV3
cG9ydCA9IHZpZXdwb3J0OworICAgIGZsb2F0IGFjdHVhbFpOZWFyID0gZ2w6OmNsYW1wMDEoek5l
YXIpOworICAgIGZsb2F0IGFjdHVhbFpGYXIgPSBnbDo6Y2xhbXAwMSh6RmFyKTsKKyAgICBpZiAo
aWdub3JlVmlld3BvcnQpCisgICAgeworICAgICAgICBhY3R1YWxWaWV3cG9ydC54ID0gMDsKKyAg
ICAgICAgYWN0dWFsVmlld3BvcnQueSA9IDA7CisgICAgICAgIGFjdHVhbFZpZXdwb3J0LndpZHRo
ID0gbVJlbmRlclRhcmdldERlc2Mud2lkdGg7CisgICAgICAgIGFjdHVhbFZpZXdwb3J0LmhlaWdo
dCA9IG1SZW5kZXJUYXJnZXREZXNjLmhlaWdodDsKKyAgICAgICAgYWN0dWFsWk5lYXIgPSAwLjBm
OworICAgICAgICBhY3R1YWxaRmFyID0gMS4wZjsKKyAgICB9CisKKyAgICAvLyBHZXQgRDNEIHZp
ZXdwb3J0IGJvdW5kcywgd2hpY2ggZGVwZW5kcyBvbiB0aGUgZmVhdHVyZSBsZXZlbAorICAgIGNv
bnN0IFJhbmdlJiB2aWV3cG9ydEJvdW5kcyA9IGdldFZpZXdwb3J0Qm91bmRzKCk7CisKKyAgICAv
LyBDbGFtcCB3aWR0aCBhbmQgaGVpZ2h0IGZpcnN0IHRvIHRoZSBnbCBtYXhpbXVtLCB0aGVuIGNs
YW1wIGZ1cnRoZXIgaWYgd2UgZXh0ZW5kIHBhc3QgdGhlIEQzRCBtYXhpbXVtIGJvdW5kcworICAg
IEQzRDExX1ZJRVdQT1JUIGR4Vmlld3BvcnQ7CisgICAgZHhWaWV3cG9ydC5Ub3BMZWZ0WCA9IGds
OjpjbGFtcChhY3R1YWxWaWV3cG9ydC54LCB2aWV3cG9ydEJvdW5kcy5zdGFydCwgdmlld3BvcnRC
b3VuZHMuZW5kKTsKKyAgICBkeFZpZXdwb3J0LlRvcExlZnRZID0gZ2w6OmNsYW1wKGFjdHVhbFZp
ZXdwb3J0LnksIHZpZXdwb3J0Qm91bmRzLnN0YXJ0LCB2aWV3cG9ydEJvdW5kcy5lbmQpOworICAg
IGR4Vmlld3BvcnQuV2lkdGggPSBnbDo6Y2xhbXAoYWN0dWFsVmlld3BvcnQud2lkdGgsIDAsIGdl
dE1heFZpZXdwb3J0RGltZW5zaW9uKCkpOworICAgIGR4Vmlld3BvcnQuSGVpZ2h0ID0gZ2w6OmNs
YW1wKGFjdHVhbFZpZXdwb3J0LmhlaWdodCwgMCwgZ2V0TWF4Vmlld3BvcnREaW1lbnNpb24oKSk7
CisgICAgZHhWaWV3cG9ydC5XaWR0aCA9IHN0ZDo6bWluKChpbnQpZHhWaWV3cG9ydC5XaWR0aCwg
dmlld3BvcnRCb3VuZHMuZW5kIC0gc3RhdGljX2Nhc3Q8aW50PihkeFZpZXdwb3J0LlRvcExlZnRY
KSk7CisgICAgZHhWaWV3cG9ydC5IZWlnaHQgPSBzdGQ6Om1pbigoaW50KWR4Vmlld3BvcnQuSGVp
Z2h0LCB2aWV3cG9ydEJvdW5kcy5lbmQgLSBzdGF0aWNfY2FzdDxpbnQ+KGR4Vmlld3BvcnQuVG9w
TGVmdFkpKTsKKyAgICBkeFZpZXdwb3J0Lk1pbkRlcHRoID0gYWN0dWFsWk5lYXI7CisgICAgZHhW
aWV3cG9ydC5NYXhEZXB0aCA9IGFjdHVhbFpGYXI7CisKKyAgICBpZiAoZHhWaWV3cG9ydC5XaWR0
aCA8PSAwIHx8IGR4Vmlld3BvcnQuSGVpZ2h0IDw9IDApCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7ICAgLy8gTm90aGluZyB0byByZW5kZXIKKyAgICB9CisKKyAgICBib29sIHZpZXdwb3J0
Q2hhbmdlZCA9IG1Gb3JjZVNldFZpZXdwb3J0IHx8IG1lbWNtcCgmYWN0dWFsVmlld3BvcnQsICZt
Q3VyVmlld3BvcnQsIHNpemVvZihnbDo6UmVjdGFuZ2xlKSkgIT0gMCB8fAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWN0dWFsWk5lYXIgIT0gbUN1ck5lYXIgfHwgYWN0dWFsWkZhciAhPSBt
Q3VyRmFyOworCisgICAgaWYgKHZpZXdwb3J0Q2hhbmdlZCkKKyAgICB7CisgICAgICAgIG1EZXZp
Y2VDb250ZXh0LT5SU1NldFZpZXdwb3J0cygxLCAmZHhWaWV3cG9ydCk7CisKKyAgICAgICAgbUN1
clZpZXdwb3J0ID0gYWN0dWFsVmlld3BvcnQ7CisgICAgICAgIG1DdXJOZWFyID0gYWN0dWFsWk5l
YXI7CisgICAgICAgIG1DdXJGYXIgPSBhY3R1YWxaRmFyOworCisgICAgICAgIG1QaXhlbENvbnN0
YW50cy52aWV3Q29vcmRzWzBdID0gYWN0dWFsVmlld3BvcnQud2lkdGggICogMC41ZjsKKyAgICAg
ICAgbVBpeGVsQ29uc3RhbnRzLnZpZXdDb29yZHNbMV0gPSBhY3R1YWxWaWV3cG9ydC5oZWlnaHQg
KiAwLjVmOworICAgICAgICBtUGl4ZWxDb25zdGFudHMudmlld0Nvb3Jkc1syXSA9IGFjdHVhbFZp
ZXdwb3J0LnggKyAoYWN0dWFsVmlld3BvcnQud2lkdGggICogMC41Zik7CisgICAgICAgIG1QaXhl
bENvbnN0YW50cy52aWV3Q29vcmRzWzNdID0gYWN0dWFsVmlld3BvcnQueSArIChhY3R1YWxWaWV3
cG9ydC5oZWlnaHQgKiAwLjVmKTsKKworICAgICAgICBtUGl4ZWxDb25zdGFudHMuZGVwdGhGcm9u
dFswXSA9IChhY3R1YWxaRmFyIC0gYWN0dWFsWk5lYXIpICogMC41ZjsKKyAgICAgICAgbVBpeGVs
Q29uc3RhbnRzLmRlcHRoRnJvbnRbMV0gPSAoYWN0dWFsWk5lYXIgKyBhY3R1YWxaRmFyKSAqIDAu
NWY7CisKKyAgICAgICAgbVZlcnRleENvbnN0YW50cy5kZXB0aFJhbmdlWzBdID0gYWN0dWFsWk5l
YXI7CisgICAgICAgIG1WZXJ0ZXhDb25zdGFudHMuZGVwdGhSYW5nZVsxXSA9IGFjdHVhbFpGYXI7
CisgICAgICAgIG1WZXJ0ZXhDb25zdGFudHMuZGVwdGhSYW5nZVsyXSA9IGFjdHVhbFpGYXIgLSBh
Y3R1YWxaTmVhcjsKKworICAgICAgICBtUGl4ZWxDb25zdGFudHMuZGVwdGhSYW5nZVswXSA9IGFj
dHVhbFpOZWFyOworICAgICAgICBtUGl4ZWxDb25zdGFudHMuZGVwdGhSYW5nZVsxXSA9IGFjdHVh
bFpGYXI7CisgICAgICAgIG1QaXhlbENvbnN0YW50cy5kZXB0aFJhbmdlWzJdID0gYWN0dWFsWkZh
ciAtIGFjdHVhbFpOZWFyOworICAgIH0KKworICAgIG1Gb3JjZVNldFZpZXdwb3J0ID0gZmFsc2U7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6YXBwbHlQcmltaXRpdmVU
eXBlKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50KQoreworICAgIEQzRDExX1BSSU1JVElWRV9U
T1BPTE9HWSBwcmltaXRpdmVUb3BvbG9neSA9IEQzRF9QUklNSVRJVkVfVE9QT0xPR1lfVU5ERUZJ
TkVEOworCisgICAgR0xzaXplaSBtaW5Db3VudCA9IDA7CisKKyAgICBzd2l0Y2ggKG1vZGUpCisg
ICAgeworICAgICAgY2FzZSBHTF9QT0lOVFM6ICAgICAgICAgcHJpbWl0aXZlVG9wb2xvZ3kgPSBE
M0QxMV9QUklNSVRJVkVfVE9QT0xPR1lfUE9JTlRMSVNUOyAgIG1pbkNvdW50ID0gMTsgYnJlYWs7
CisgICAgICBjYXNlIEdMX0xJTkVTOiAgICAgICAgICBwcmltaXRpdmVUb3BvbG9neSA9IEQzRF9Q
UklNSVRJVkVfVE9QT0xPR1lfTElORUxJU1Q7ICAgICAgbWluQ291bnQgPSAyOyBicmVhazsKKyAg
ICAgIGNhc2UgR0xfTElORV9MT09QOiAgICAgIHByaW1pdGl2ZVRvcG9sb2d5ID0gRDNEX1BSSU1J
VElWRV9UT1BPTE9HWV9MSU5FU1RSSVA7ICAgICBtaW5Db3VudCA9IDI7IGJyZWFrOworICAgICAg
Y2FzZSBHTF9MSU5FX1NUUklQOiAgICAgcHJpbWl0aXZlVG9wb2xvZ3kgPSBEM0RfUFJJTUlUSVZF
X1RPUE9MT0dZX0xJTkVTVFJJUDsgICAgIG1pbkNvdW50ID0gMjsgYnJlYWs7CisgICAgICBjYXNl
IEdMX1RSSUFOR0xFUzogICAgICBwcmltaXRpdmVUb3BvbG9neSA9IEQzRF9QUklNSVRJVkVfVE9Q
T0xPR1lfVFJJQU5HTEVMSVNUOyAgbWluQ291bnQgPSAzOyBicmVhazsKKyAgICAgIGNhc2UgR0xf
VFJJQU5HTEVfU1RSSVA6IHByaW1pdGl2ZVRvcG9sb2d5ID0gRDNEX1BSSU1JVElWRV9UT1BPTE9H
WV9UUklBTkdMRVNUUklQOyBtaW5Db3VudCA9IDM7IGJyZWFrOworICAgICAgICAgIC8vIGVtdWxh
dGUgZmFucyB2aWEgcmV3cml0aW5nIGluZGV4IGJ1ZmZlcgorICAgICAgY2FzZSBHTF9UUklBTkdM
RV9GQU46ICAgcHJpbWl0aXZlVG9wb2xvZ3kgPSBEM0RfUFJJTUlUSVZFX1RPUE9MT0dZX1RSSUFO
R0xFTElTVDsgIG1pbkNvdW50ID0gMzsgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgZmFsc2UpOworICAgIH0KKworICAgIGlm
IChwcmltaXRpdmVUb3BvbG9neSAhPSBtQ3VycmVudFByaW1pdGl2ZVRvcG9sb2d5KQorICAgIHsK
KyAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0UHJpbWl0aXZlVG9wb2xvZ3kocHJpbWl0aXZl
VG9wb2xvZ3kpOworICAgICAgICBtQ3VycmVudFByaW1pdGl2ZVRvcG9sb2d5ID0gcHJpbWl0aXZl
VG9wb2xvZ3k7CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50ID49IG1pbkNvdW50OworfQorCiti
b29sIFJlbmRlcmVyMTE6OmFwcGx5UmVuZGVyVGFyZ2V0KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIpCit7CisgICAgLy8gR2V0IHRoZSBjb2xvciByZW5kZXIgYnVmZmVyIGFuZCBzZXJpYWwK
KyAgICAvLyBBbHNvIGV4dHJhY3QgdGhlIHJlbmRlciB0YXJnZXQgZGltZW5zaW9ucyBhbmQgdmll
dworICAgIHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRXaWR0aCA9IDA7CisgICAgdW5zaWduZWQg
aW50IHJlbmRlclRhcmdldEhlaWdodCA9IDA7CisgICAgR0xlbnVtIHJlbmRlclRhcmdldEZvcm1h
dCA9IDA7CisgICAgdW5zaWduZWQgaW50IHJlbmRlclRhcmdldFNlcmlhbHNbZ2w6OklNUExFTUVO
VEFUSU9OX01BWF9EUkFXX0JVRkZFUlNdID0gezB9OworICAgIElEM0QxMVJlbmRlclRhcmdldFZp
ZXcqIGZyYW1lYnVmZmVyUlRWc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSU10g
PSB7TlVMTH07CisgICAgYm9vbCBtaXNzaW5nQ29sb3JSZW5kZXJUYXJnZXQgPSB0cnVlOworCisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gMDsgY29sb3JBdHRhY2htZW50
IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsr
KQorICAgIHsKKyAgICAgICAgY29uc3QgR0xlbnVtIGRyYXdCdWZmZXJTdGF0ZSA9IGZyYW1lYnVm
ZmVyLT5nZXREcmF3QnVmZmVyU3RhdGUoY29sb3JBdHRhY2htZW50KTsKKworICAgICAgICBpZiAo
ZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlwZShjb2xvckF0dGFjaG1lbnQpICE9IEdMX05P
TkUgJiYgZHJhd0J1ZmZlclN0YXRlICE9IEdMX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IC8vIHRoZSBkcmF3IGJ1ZmZlciBtdXN0IGJlIGVpdGhlciAibm9uZSIsICJiYWNrIiBmb3IgdGhl
IGRlZmF1bHQgYnVmZmVyIG9yIHRoZSBzYW1lIGluZGV4IGFzIHRoaXMgY29sb3IgKGluIG9yZGVy
KQorICAgICAgICAgICAgQVNTRVJUKGRyYXdCdWZmZXJTdGF0ZSA9PSBHTF9CQUNLIHx8IGRyYXdC
dWZmZXJTdGF0ZSA9PSAoR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUICsgY29sb3JBdHRhY2htZW50
KSk7CisKKyAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gZnJhbWVi
dWZmZXItPmdldENvbG9yYnVmZmVyKGNvbG9yQXR0YWNobWVudCk7CisKKyAgICAgICAgICAgIGlm
ICghY29sb3JidWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRVJSKCJyZW5k
ZXIgdGFyZ2V0IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBjaGVjayBmb3Ig
emVyby1zaXplZCBkZWZhdWx0IGZyYW1lYnVmZmVyLCB3aGljaCBpcyBhIHNwZWNpYWwgY2FzZS4K
KyAgICAgICAgICAgIC8vIGluIHRoaXMgY2FzZSB3ZSBkbyBub3Qgd2lzaCB0byBtb2RpZnkgYW55
IHN0YXRlIGFuZCBqdXN0IHNpbGVudGx5IHJldHVybiBmYWxzZS4KKyAgICAgICAgICAgIC8vIHRo
aXMgd2lsbCBub3QgcmVwb3J0IGFueSBnbCBlcnJvciBidXQgd2lsbCBjYXVzZSB0aGUgY2FsbGlu
ZyBtZXRob2QgdG8gcmV0dXJuLgorICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyLT5nZXRXaWR0
aCgpID09IDAgfHwgY29sb3JidWZmZXItPmdldEhlaWdodCgpID09IDApCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICByZW5kZXJUYXJnZXRTZXJpYWxzW2NvbG9yQXR0YWNobWVudF0gPSBjb2xvcmJ1ZmZlci0+
Z2V0U2VyaWFsKCk7CisKKyAgICAgICAgICAgIC8vIEV4dHJhY3QgdGhlIHJlbmRlciB0YXJnZXQg
ZGltZW5zaW9ucyBhbmQgdmlldworICAgICAgICAgICAgUmVuZGVyVGFyZ2V0MTEgKnJlbmRlclRh
cmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoY29sb3JidWZmZXItPmdl
dFJlbmRlclRhcmdldCgpKTsKKyAgICAgICAgICAgIGlmICghcmVuZGVyVGFyZ2V0KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIEVSUigicmVuZGVyIHRhcmdldCBwb2ludGVyIHVuZXhw
ZWN0ZWRseSBudWxsLiIpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgZnJhbWVidWZmZXJSVFZzW2NvbG9yQXR0YWNobWVudF0gPSBy
ZW5kZXJUYXJnZXQtPmdldFJlbmRlclRhcmdldFZpZXcoKTsKKyAgICAgICAgICAgIGlmICghZnJh
bWVidWZmZXJSVFZzW2NvbG9yQXR0YWNobWVudF0pCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHZpZXcgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4i
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChtaXNzaW5nQ29sb3JSZW5kZXJUYXJnZXQpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmVuZGVyVGFyZ2V0V2lkdGggPSBjb2xvcmJ1ZmZlci0+Z2V0V2lkdGgoKTsK
KyAgICAgICAgICAgICAgICByZW5kZXJUYXJnZXRIZWlnaHQgPSBjb2xvcmJ1ZmZlci0+Z2V0SGVp
Z2h0KCk7CisgICAgICAgICAgICAgICAgcmVuZGVyVGFyZ2V0Rm9ybWF0ID0gY29sb3JidWZmZXIt
PmdldEFjdHVhbEZvcm1hdCgpOworICAgICAgICAgICAgICAgIG1pc3NpbmdDb2xvclJlbmRlclRh
cmdldCA9IGZhbHNlOworICAgICAgICAgICAgfQorCisjaWZkZWYgX0RFQlVHCisgICAgICAgICAg
ICAvLyBXb3JrYXJvdW5kIGZvciBEZWJ1ZyBTRVRTSEFERVJSRVNPVVJDRVNfSEFaQVJEIEQzRDEx
IHdhcm5pbmdzCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB2ZXJ0ZXhTZXJpYWxJbmRl
eCA9IDA7IHZlcnRleFNlcmlhbEluZGV4IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhf
VEVYVFVSRV9JTUFHRV9VTklUUzsgdmVydGV4U2VyaWFsSW5kZXgrKykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBpZiAoY29sb3JidWZmZXItPmdldFRleHR1cmVTZXJpYWwoKSAhPSAw
ICYmIG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1t2ZXJ0ZXhTZXJpYWxJbmRleF0gPT0gY29sb3Ji
dWZmZXItPmdldFRleHR1cmVTZXJpYWwoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHNldFRleHR1cmUoZ2w6OlNBTVBMRVJfVkVSVEVYLCB2ZXJ0ZXhTZXJpYWxJbmRl
eCwgTlVMTCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBwaXhlbFNlcmlhbEluZGV4ID0gMDsgcGl4ZWxTZXJpYWxJbmRl
eCA8IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgcGl4ZWxTZXJpYWxJbmRleCsrKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlci0+Z2V0VGV4dHVyZVNl
cmlhbCgpICE9IDAgJiYgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbcGl4ZWxTZXJpYWxJbmRleF0g
PT0gY29sb3JidWZmZXItPmdldFRleHR1cmVTZXJpYWwoKSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHNldFRleHR1cmUoZ2w6OlNBTVBMRVJfUElYRUwsIHBpeGVsU2Vy
aWFsSW5kZXgsIE5VTEwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyNlbmRp
ZgorICAgICAgICB9CisgICAgfQorCisgICAgLy8gR2V0IHRoZSBkZXB0aCBzdGVuY2lsIHJlbmRl
ciBidWZmZXIgYW5kIHNlcmlhbHMKKyAgICBnbDo6UmVuZGVyYnVmZmVyICpkZXB0aFN0ZW5jaWwg
PSBOVUxMOworICAgIHVuc2lnbmVkIGludCBkZXB0aGJ1ZmZlclNlcmlhbCA9IDA7CisgICAgdW5z
aWduZWQgaW50IHN0ZW5jaWxidWZmZXJTZXJpYWwgPSAwOworICAgIGlmIChmcmFtZWJ1ZmZlci0+
Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKKyAgICB7CisgICAgICAgIGRlcHRoU3Rl
bmNpbCA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOworICAgICAgICBpZiAoIWRlcHRo
U3RlbmNpbCkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJEZXB0aCBzdGVuY2lsIHBvaW50
ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7CisgICAgICAgICAgICBTYWZlUmVsZWFzZShmcmFtZWJ1
ZmZlclJUVnMpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAg
ICAgZGVwdGhidWZmZXJTZXJpYWwgPSBkZXB0aFN0ZW5jaWwtPmdldFNlcmlhbCgpOworICAgIH0K
KyAgICBlbHNlIGlmIChmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKSAhPSBHTF9O
T05FKQorICAgIHsKKyAgICAgICAgZGVwdGhTdGVuY2lsID0gZnJhbWVidWZmZXItPmdldFN0ZW5j
aWxidWZmZXIoKTsKKyAgICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwor
ICAgICAgICAgICAgU2FmZVJlbGVhc2UoZnJhbWVidWZmZXJSVFZzKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHN0ZW5jaWxidWZmZXJTZXJpYWwgPSBk
ZXB0aFN0ZW5jaWwtPmdldFNlcmlhbCgpOworICAgIH0KKworICAgIC8vIEV4dHJhY3QgdGhlIGRl
cHRoIHN0ZW5jaWwgc2l6ZXMgYW5kIHZpZXcKKyAgICB1bnNpZ25lZCBpbnQgZGVwdGhTaXplID0g
MDsKKyAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbFNpemUgPSAwOworICAgIElEM0QxMURlcHRoU3Rl
bmNpbFZpZXcqIGZyYW1lYnVmZmVyRFNWID0gTlVMTDsKKyAgICBpZiAoZGVwdGhTdGVuY2lsKQor
ICAgIHsKKyAgICAgICAgUmVuZGVyVGFyZ2V0MTEgKmRlcHRoU3RlbmNpbFJlbmRlclRhcmdldCA9
IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoZGVwdGhTdGVuY2lsLT5nZXREZXB0
aFN0ZW5jaWwoKSk7CisgICAgICAgIGlmICghZGVwdGhTdGVuY2lsUmVuZGVyVGFyZ2V0KQorICAg
ICAgICB7CisgICAgICAgICAgICBFUlIoInJlbmRlciB0YXJnZXQgcG9pbnRlciB1bmV4cGVjdGVk
bHkgbnVsbC4iKTsKKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKGZyYW1lYnVmZmVyUlRWcyk7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBmcmFtZWJ1ZmZl
ckRTViA9IGRlcHRoU3RlbmNpbFJlbmRlclRhcmdldC0+Z2V0RGVwdGhTdGVuY2lsVmlldygpOwor
ICAgICAgICBpZiAoIWZyYW1lYnVmZmVyRFNWKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIo
ImRlcHRoIHN0ZW5jaWwgdmlldyBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOworICAgICAg
ICAgICAgU2FmZVJlbGVhc2UoZnJhbWVidWZmZXJSVFZzKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIHJlbmRlciBidWZm
ZXIsIHRoZSB3aWR0aCwgaGVpZ2h0IGFuZCBmb3JtYXQgdmFsdWVzIGNvbWUgZnJvbQorICAgICAg
ICAvLyB0aGUgZGVwdGggc3RlbmNpbAorICAgICAgICBpZiAobWlzc2luZ0NvbG9yUmVuZGVyVGFy
Z2V0KQorICAgICAgICB7CisgICAgICAgICAgICByZW5kZXJUYXJnZXRXaWR0aCA9IGRlcHRoU3Rl
bmNpbC0+Z2V0V2lkdGgoKTsKKyAgICAgICAgICAgIHJlbmRlclRhcmdldEhlaWdodCA9IGRlcHRo
U3RlbmNpbC0+Z2V0SGVpZ2h0KCk7CisgICAgICAgICAgICByZW5kZXJUYXJnZXRGb3JtYXQgPSBk
ZXB0aFN0ZW5jaWwtPmdldEFjdHVhbEZvcm1hdCgpOworICAgICAgICB9CisKKyAgICAgICAgZGVw
dGhTaXplID0gZGVwdGhTdGVuY2lsLT5nZXREZXB0aFNpemUoKTsKKyAgICAgICAgc3RlbmNpbFNp
emUgPSBkZXB0aFN0ZW5jaWwtPmdldFN0ZW5jaWxTaXplKCk7CisgICAgfQorCisgICAgLy8gQXBw
bHkgdGhlIHJlbmRlciB0YXJnZXQgYW5kIGRlcHRoIHN0ZW5jaWwKKyAgICBpZiAoIW1SZW5kZXJU
YXJnZXREZXNjSW5pdGlhbGl6ZWQgfHwgIW1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCB8fAorICAg
ICAgICBtZW1jbXAocmVuZGVyVGFyZ2V0U2VyaWFscywgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJp
YWxzLCBzaXplb2YocmVuZGVyVGFyZ2V0U2VyaWFscykpICE9IDAgfHwKKyAgICAgICAgZGVwdGhi
dWZmZXJTZXJpYWwgIT0gbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCB8fAorICAgICAgICBzdGVu
Y2lsYnVmZmVyU2VyaWFsICE9IG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCkKKyAgICB7Cisg
ICAgICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldFJlbmRlclRhcmdldHMoZ2V0TWF4UmVuZGVyVGFy
Z2V0cygpLCBmcmFtZWJ1ZmZlclJUVnMsIGZyYW1lYnVmZmVyRFNWKTsKKworICAgICAgICBtUmVu
ZGVyVGFyZ2V0RGVzYy53aWR0aCA9IHJlbmRlclRhcmdldFdpZHRoOworICAgICAgICBtUmVuZGVy
VGFyZ2V0RGVzYy5oZWlnaHQgPSByZW5kZXJUYXJnZXRIZWlnaHQ7CisgICAgICAgIG1SZW5kZXJU
YXJnZXREZXNjLmZvcm1hdCA9IHJlbmRlclRhcmdldEZvcm1hdDsKKyAgICAgICAgbUZvcmNlU2V0
Vmlld3BvcnQgPSB0cnVlOworICAgICAgICBtRm9yY2VTZXRTY2lzc29yID0gdHJ1ZTsKKworICAg
ICAgICBpZiAoIW1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCB8fCBkZXB0aFNpemUgIT0gbUN1ckRl
cHRoU2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbUN1ckRlcHRoU2l6ZSA9IGRlcHRoU2l6
ZTsKKyAgICAgICAgICAgIG1Gb3JjZVNldFJhc3RlclN0YXRlID0gdHJ1ZTsKKyAgICAgICAgfQor
CisgICAgICAgIG1DdXJTdGVuY2lsU2l6ZSA9IHN0ZW5jaWxTaXplOworCisgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IHJ0SW5kZXggPSAwOyBydEluZGV4IDwgZ2w6OklNUExFTUVOVEFUSU9OX01B
WF9EUkFXX0JVRkZFUlM7IHJ0SW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgbUFwcGxp
ZWRSZW5kZXJUYXJnZXRTZXJpYWxzW3J0SW5kZXhdID0gcmVuZGVyVGFyZ2V0U2VyaWFsc1tydElu
ZGV4XTsKKyAgICAgICAgfQorICAgICAgICBtQXBwbGllZERlcHRoYnVmZmVyU2VyaWFsID0gZGVw
dGhidWZmZXJTZXJpYWw7CisgICAgICAgIG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCA9IHN0
ZW5jaWxidWZmZXJTZXJpYWw7CisgICAgICAgIG1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQg
PSB0cnVlOworICAgICAgICBtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitHTGVudW0gUmVuZGVyZXIxMTo6YXBwbHlWZXJ0ZXhC
dWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGdsOjpWZXJ0ZXhBdHRyaWJ1
dGUgdmVydGV4QXR0cmlidXRlc1tdLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXpl
aSBpbnN0YW5jZXMpCit7CisgICAgVHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW2dsOjpN
QVhfVkVSVEVYX0FUVFJJQlNdOworICAgIEdMZW51bSBlcnIgPSBtVmVydGV4RGF0YU1hbmFnZXIt
PnByZXBhcmVWZXJ0ZXhEYXRhKHZlcnRleEF0dHJpYnV0ZXMsIHByb2dyYW1CaW5hcnksIGZpcnN0
LCBjb3VudCwgYXR0cmlidXRlcywgaW5zdGFuY2VzKTsKKyAgICBpZiAoZXJyICE9IEdMX05PX0VS
Uk9SKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICByZXR1cm4gbUlu
cHV0TGF5b3V0Q2FjaGUuYXBwbHlWZXJ0ZXhCdWZmZXJzKGF0dHJpYnV0ZXMsIHByb2dyYW1CaW5h
cnkpOworfQorCitHTGVudW0gUmVuZGVyZXIxMTo6YXBwbHlJbmRleEJ1ZmZlcihjb25zdCBHTHZv
aWQgKmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgR0xzaXplaSBjb3Vu
dCwgR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleElu
Zm8pCit7CisgICAgR0xlbnVtIGVyciA9IG1JbmRleERhdGFNYW5hZ2VyLT5wcmVwYXJlSW5kZXhE
YXRhKHR5cGUsIGNvdW50LCBlbGVtZW50QXJyYXlCdWZmZXIsIGluZGljZXMsIGluZGV4SW5mbyk7
CisKKyAgICBpZiAoZXJyID09IEdMX05PX0VSUk9SKQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4
SW5mby0+c3RvcmFnZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGluZGV4SW5mby0+c2Vy
aWFsICE9IG1BcHBsaWVkU3RvcmFnZUlCU2VyaWFsIHx8IGluZGV4SW5mby0+c3RhcnRPZmZzZXQg
IT0gbUFwcGxpZWRJQk9mZnNldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBCdWZm
ZXJTdG9yYWdlMTEgKnN0b3JhZ2UgPSBCdWZmZXJTdG9yYWdlMTE6Om1ha2VCdWZmZXJTdG9yYWdl
MTEoaW5kZXhJbmZvLT5zdG9yYWdlKTsKKyAgICAgICAgICAgICAgICBJbmRleEJ1ZmZlcjExKiBp
bmRleEJ1ZmZlciA9IEluZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1ZmZlcjExKGluZGV4SW5mby0+
aW5kZXhCdWZmZXIpOworCisgICAgICAgICAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0SW5k
ZXhCdWZmZXIoc3RvcmFnZS0+Z2V0QnVmZmVyKEJVRkZFUl9VU0FHRV9JTkRFWCksIGluZGV4QnVm
ZmVyLT5nZXRJbmRleEZvcm1hdCgpLCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0KTsKKworICAgICAg
ICAgICAgICAgIG1BcHBsaWVkSUJTZXJpYWwgPSAwOworICAgICAgICAgICAgICAgIG1BcHBsaWVk
U3RvcmFnZUlCU2VyaWFsID0gc3RvcmFnZS0+Z2V0U2VyaWFsKCk7CisgICAgICAgICAgICAgICAg
bUFwcGxpZWRJQk9mZnNldCA9IGluZGV4SW5mby0+c3RhcnRPZmZzZXQ7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaW5kZXhJbmZvLT5zZXJpYWwgIT0gbUFwcGxp
ZWRJQlNlcmlhbCB8fCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0ICE9IG1BcHBsaWVkSUJPZmZzZXQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEluZGV4QnVmZmVyMTEqIGluZGV4QnVmZmVyID0gSW5k
ZXhCdWZmZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEoaW5kZXhJbmZvLT5pbmRleEJ1ZmZlcik7CisK
KyAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldEluZGV4QnVmZmVyKGluZGV4QnVmZmVy
LT5nZXRCdWZmZXIoKSwgaW5kZXhCdWZmZXItPmdldEluZGV4Rm9ybWF0KCksIGluZGV4SW5mby0+
c3RhcnRPZmZzZXQpOworCisgICAgICAgICAgICBtQXBwbGllZElCU2VyaWFsID0gaW5kZXhJbmZv
LT5zZXJpYWw7CisgICAgICAgICAgICBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbCA9IDA7CisgICAg
ICAgICAgICBtQXBwbGllZElCT2Zmc2V0ID0gaW5kZXhJbmZvLT5zdGFydE9mZnNldDsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiBlcnI7Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6ZHJh
d0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpCit7
CisgICAgaWYgKG1vZGUgPT0gR0xfTElORV9MT09QKQorICAgIHsKKyAgICAgICAgZHJhd0xpbmVM
b29wKGNvdW50LCBHTF9OT05FLCBOVUxMLCAwLCBOVUxMKTsKKyAgICB9CisgICAgZWxzZSBpZiAo
bW9kZSA9PSBHTF9UUklBTkdMRV9GQU4pCisgICAgeworICAgICAgICBkcmF3VHJpYW5nbGVGYW4o
Y291bnQsIEdMX05PTkUsIE5VTEwsIDAsIE5VTEwsIGluc3RhbmNlcyk7CisgICAgfQorICAgIGVs
c2UgaWYgKGluc3RhbmNlcyA+IDApCisgICAgeworICAgICAgICBtRGV2aWNlQ29udGV4dC0+RHJh
d0luc3RhbmNlZChjb3VudCwgaW5zdGFuY2VzLCAwLCAwKTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgbURldmljZUNvbnRleHQtPkRyYXcoY291bnQsIDApOworICAgIH0KK30KKwor
dm9pZCBSZW5kZXJlcjExOjpkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQs
IEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRB
cnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvLCBHTHNpemVp
IGluc3RhbmNlcykKK3sKKyAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCisgICAgeworICAg
ICAgICBkcmF3TGluZUxvb3AoY291bnQsIHR5cGUsIGluZGljZXMsIGluZGV4SW5mby5taW5JbmRl
eCwgZWxlbWVudEFycmF5QnVmZmVyKTsKKyAgICB9CisgICAgZWxzZSBpZiAobW9kZSA9PSBHTF9U
UklBTkdMRV9GQU4pCisgICAgeworICAgICAgICBkcmF3VHJpYW5nbGVGYW4oY291bnQsIHR5cGUs
IGluZGljZXMsIGluZGV4SW5mby5taW5JbmRleCwgZWxlbWVudEFycmF5QnVmZmVyLCBpbnN0YW5j
ZXMpOworICAgIH0KKyAgICBlbHNlIGlmIChpbnN0YW5jZXMgPiAwKQorICAgIHsKKyAgICAgICAg
bURldmljZUNvbnRleHQtPkRyYXdJbmRleGVkSW5zdGFuY2VkKGNvdW50LCBpbnN0YW5jZXMsIDAs
IC1zdGF0aWNfY2FzdDxpbnQ+KGluZGV4SW5mby5taW5JbmRleCksIDApOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBtRGV2aWNlQ29udGV4dC0+RHJhd0luZGV4ZWQoY291bnQsIDAs
IC1zdGF0aWNfY2FzdDxpbnQ+KGluZGV4SW5mby5taW5JbmRleCkpOworICAgIH0KK30KKwordm9p
ZCBSZW5kZXJlcjExOjpkcmF3TGluZUxvb3AoR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNv
bnN0IEdMdm9pZCAqaW5kaWNlcywgaW50IG1pbkluZGV4LCBnbDo6QnVmZmVyICplbGVtZW50QXJy
YXlCdWZmZXIpCit7CisgICAgLy8gR2V0IHRoZSByYXcgaW5kaWNlcyBmb3IgYW4gaW5kZXhlZCBk
cmF3CisgICAgaWYgKHR5cGUgIT0gR0xfTk9ORSAmJiBlbGVtZW50QXJyYXlCdWZmZXIpCisgICAg
eworICAgICAgICBnbDo6QnVmZmVyICppbmRleEJ1ZmZlciA9IGVsZW1lbnRBcnJheUJ1ZmZlcjsK
KyAgICAgICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGluZGV4QnVmZmVyLT5nZXRTdG9yYWdl
KCk7CisgICAgICAgIGludHB0cl90IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+
KGluZGljZXMpOworICAgICAgICBpbmRpY2VzID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+
KHN0b3JhZ2UtPmdldERhdGEoKSkgKyBvZmZzZXQ7CisgICAgfQorCisgICAgaWYgKCFtTGluZUxv
b3BJQikKKyAgICB7CisgICAgICAgIG1MaW5lTG9vcElCID0gbmV3IFN0cmVhbWluZ0luZGV4QnVm
ZmVySW50ZXJmYWNlKHRoaXMpOworICAgICAgICBpZiAoIW1MaW5lTG9vcElCLT5yZXNlcnZlQnVm
ZmVyU3BhY2UoSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwgR0xfVU5TSUdORURfSU5UKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgZGVsZXRlIG1MaW5lTG9vcElCOworICAgICAgICAgICAgbUxp
bmVMb29wSUIgPSBOVUxMOworCisgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSAz
Mi1iaXQgbG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKKyAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBDaGVja2VkIGJ5IFJlbmRlcmVyMTE6OmFwcGx5UHJpbWl0aXZlVHlwZQorICAg
IEFTU0VSVChjb3VudCA+PSAwKTsKKworICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+
KGNvdW50KSArIDEgPiAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSAv
IHNpemVvZih1bnNpZ25lZCBpbnQpKSkKKyAgICB7CisgICAgICAgIEVSUigiQ291bGQgbm90IGNy
ZWF0ZSBhIDMyLWJpdCBsb29waW5nIGluZGV4IGJ1ZmZlciBmb3IgR0xfTElORV9MT09QLCB0b28g
bWFueSBpbmRpY2VzIHJlcXVpcmVkLiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KKworICAgIGNvbnN0IHVuc2lnbmVkIGludCBzcGFjZU5lZWRl
ZCA9IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGNvdW50KSArIDEpICogc2l6ZW9mKHVuc2ln
bmVkIGludCk7CisgICAgaWYgKCFtTGluZUxvb3BJQi0+cmVzZXJ2ZUJ1ZmZlclNwYWNlKHNwYWNl
TmVlZGVkLCBHTF9VTlNJR05FRF9JTlQpKQorICAgIHsKKyAgICAgICAgRVJSKCJDb3VsZCBub3Qg
cmVzZXJ2ZSBlbm91Z2ggc3BhY2UgaW4gbG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVf
TE9PUC4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9CisKKyAgICB2b2lkKiBtYXBwZWRNZW1vcnkgPSBOVUxMOworICAgIHVuc2lnbmVkIGludCBv
ZmZzZXQ7CisgICAgaWYgKCFtTGluZUxvb3BJQi0+bWFwQnVmZmVyKHNwYWNlTmVlZGVkLCAmbWFw
cGVkTWVtb3J5LCAmb2Zmc2V0KSkKKyAgICB7CisgICAgICAgIEVSUigiQ291bGQgbm90IG1hcCBp
bmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBpbnQgKmRhdGEgPSBy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KG1hcHBlZE1lbW9yeSk7CisgICAgdW5zaWdu
ZWQgaW50IGluZGV4QnVmZmVyT2Zmc2V0ID0gb2Zmc2V0OworCisgICAgc3dpdGNoICh0eXBlKQor
ICAgIHsKKyAgICAgIGNhc2UgR0xfTk9ORTogICAvLyBOb24taW5kZXhlZCBkcmF3CisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAg
ZGF0YVtpXSA9IGk7CisgICAgICAgIH0KKyAgICAgICAgZGF0YVtjb3VudF0gPSAwOworICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBkYXRhW2ldID0g
c3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpW2ldOworICAgICAgICB9CisgICAg
ICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpWzBd
OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6CisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAg
ZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNlcylbaV07CisgICAg
ICAgIH0KKyAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+
KGluZGljZXMpWzBdOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5U
OgorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVtp
XTsKKyAgICAgICAgfQorICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNvbnN0IEdM
dWludCo+KGluZGljZXMpWzBdOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgfQorCisgICAgaWYgKCFtTGluZUxvb3BJQi0+dW5tYXBCdWZmZXIoKSkK
KyAgICB7CisgICAgICAgIEVSUigiQ291bGQgbm90IHVubWFwIGluZGV4IGJ1ZmZlciBmb3IgR0xf
TElORV9MT09QLiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KKworICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9IG1MaW5lTG9vcElCLT5nZXRT
ZXJpYWwoKSB8fCBtQXBwbGllZElCT2Zmc2V0ICE9IGluZGV4QnVmZmVyT2Zmc2V0KQorICAgIHsK
KyAgICAgICAgSW5kZXhCdWZmZXIxMSAqaW5kZXhCdWZmZXIgPSBJbmRleEJ1ZmZlcjExOjptYWtl
SW5kZXhCdWZmZXIxMShtTGluZUxvb3BJQi0+Z2V0SW5kZXhCdWZmZXIoKSk7CisKKyAgICAgICAg
bURldmljZUNvbnRleHQtPklBU2V0SW5kZXhCdWZmZXIoaW5kZXhCdWZmZXItPmdldEJ1ZmZlcigp
LCBpbmRleEJ1ZmZlci0+Z2V0SW5kZXhGb3JtYXQoKSwgaW5kZXhCdWZmZXJPZmZzZXQpOworICAg
ICAgICBtQXBwbGllZElCU2VyaWFsID0gbUxpbmVMb29wSUItPmdldFNlcmlhbCgpOworICAgICAg
ICBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbCA9IDA7CisgICAgICAgIG1BcHBsaWVkSUJPZmZzZXQg
PSBpbmRleEJ1ZmZlck9mZnNldDsKKyAgICB9CisKKyAgICBtRGV2aWNlQ29udGV4dC0+RHJhd0lu
ZGV4ZWQoY291bnQgKyAxLCAwLCAtbWluSW5kZXgpOworfQorCit2b2lkIFJlbmRlcmVyMTE6OmRy
YXdUcmlhbmdsZUZhbihHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICpp
bmRpY2VzLCBpbnQgbWluSW5kZXgsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgaW50
IGluc3RhbmNlcykKK3sKKyAgICAvLyBHZXQgdGhlIHJhdyBpbmRpY2VzIGZvciBhbiBpbmRleGVk
IGRyYXcKKyAgICBpZiAodHlwZSAhPSBHTF9OT05FICYmIGVsZW1lbnRBcnJheUJ1ZmZlcikKKyAg
ICB7CisgICAgICAgIGdsOjpCdWZmZXIgKmluZGV4QnVmZmVyID0gZWxlbWVudEFycmF5QnVmZmVy
OworICAgICAgICBCdWZmZXJTdG9yYWdlICpzdG9yYWdlID0gaW5kZXhCdWZmZXItPmdldFN0b3Jh
Z2UoKTsKKyAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4oaW5kaWNlcyk7CisgICAgICAgIGluZGljZXMgPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRl
Kj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSArIG9mZnNldDsKKyAgICB9CisKKyAgICBpZiAoIW1Ucmlh
bmdsZUZhbklCKQorICAgIHsKKyAgICAgICAgbVRyaWFuZ2xlRmFuSUIgPSBuZXcgU3RyZWFtaW5n
SW5kZXhCdWZmZXJJbnRlcmZhY2UodGhpcyk7CisgICAgICAgIGlmICghbVRyaWFuZ2xlRmFuSUIt
PnJlc2VydmVCdWZmZXJTcGFjZShJTklUSUFMX0lOREVYX0JVRkZFUl9TSVpFLCBHTF9VTlNJR05F
RF9JTlQpKQorICAgICAgICB7CisgICAgICAgICAgICBkZWxldGUgbVRyaWFuZ2xlRmFuSUI7Cisg
ICAgICAgICAgICBtVHJpYW5nbGVGYW5JQiA9IE5VTEw7CisKKyAgICAgICAgICAgIEVSUigiQ291
bGQgbm90IGNyZWF0ZSBhIHNjcmF0Y2ggaW5kZXggYnVmZmVyIGZvciBHTF9UUklBTkdMRV9GQU4u
Iik7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gQ2hlY2tlZCBieSBSZW5kZXJlcjExOjphcHBseVByaW1p
dGl2ZVR5cGUKKyAgICBBU1NFUlQoY291bnQgPj0gMyk7CisKKyAgICBjb25zdCB1bnNpZ25lZCBp
bnQgbnVtVHJpcyA9IGNvdW50IC0gMjsKKworICAgIGlmIChudW1UcmlzID4gKHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLyAoc2l6ZW9mKHVuc2lnbmVkIGludCkgKiAz
KSkpCisgICAgeworICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSBzY3JhdGNoIGluZGV4
IGJ1ZmZlciBmb3IgR0xfVFJJQU5HTEVfRkFOLCB0b28gbWFueSBpbmRpY2VzIHJlcXVpcmVkLiIp
OworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KKwor
ICAgIGNvbnN0IHVuc2lnbmVkIGludCBzcGFjZU5lZWRlZCA9IChudW1UcmlzICogMykgKiBzaXpl
b2YodW5zaWduZWQgaW50KTsKKyAgICBpZiAoIW1UcmlhbmdsZUZhbklCLT5yZXNlcnZlQnVmZmVy
U3BhY2Uoc3BhY2VOZWVkZWQsIEdMX1VOU0lHTkVEX0lOVCkpCisgICAgeworICAgICAgICBFUlIo
IkNvdWxkIG5vdCByZXNlcnZlIGVub3VnaCBzcGFjZSBpbiBzY3JhdGNoIGluZGV4IGJ1ZmZlciBm
b3IgR0xfVFJJQU5HTEVfRkFOLiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KKworICAgIHZvaWQqIG1hcHBlZE1lbW9yeSA9IE5VTEw7CisgICAg
dW5zaWduZWQgaW50IG9mZnNldDsKKyAgICBpZiAoIW1UcmlhbmdsZUZhbklCLT5tYXBCdWZmZXIo
c3BhY2VOZWVkZWQsICZtYXBwZWRNZW1vcnksICZvZmZzZXQpKQorICAgIHsKKyAgICAgICAgRVJS
KCJDb3VsZCBub3QgbWFwIHNjcmF0Y2ggaW5kZXggYnVmZmVyIGZvciBHTF9UUklBTkdMRV9GQU4u
Iik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
CisgICAgdW5zaWduZWQgaW50ICpkYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQq
PihtYXBwZWRNZW1vcnkpOworICAgIHVuc2lnbmVkIGludCBpbmRleEJ1ZmZlck9mZnNldCA9IG9m
ZnNldDsKKworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX05PTkU6ICAg
Ly8gTm9uLWluZGV4ZWQgZHJhdworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IG51bVRyaXM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgZGF0YVtpKjMgKyAwXSA9IDA7
CisgICAgICAgICAgICBkYXRhW2kqMyArIDFdID0gaSArIDE7CisgICAgICAgICAgICBkYXRhW2kq
MyArIDJdID0gaSArIDI7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0JZVEU6CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVt
VHJpczsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBkYXRhW2kqMyArIDBdID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpWzBdOworICAgICAgICAgICAgZGF0YVtpKjMg
KyAxXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKVtpICsgMV07CisgICAg
ICAgICAgICBkYXRhW2kqMyArIDJdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGlj
ZXMpW2kgKyAyXTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlQ6CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtVHJp
czsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBkYXRhW2kqMyArIDBdID0gc3RhdGljX2Nh
c3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVswXTsKKyAgICAgICAgICAgIGRhdGFbaSozICsg
MV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpW2kgKyAxXTsKKyAgICAg
ICAgICAgIGRhdGFbaSozICsgMl0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGlj
ZXMpW2kgKyAyXTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5T
SUdORURfSU5UOgorICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVRyaXM7
IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgZGF0YVtpKjMgKyAwXSA9IHN0YXRpY19jYXN0
PGNvbnN0IEdMdWludCo+KGluZGljZXMpWzBdOworICAgICAgICAgICAgZGF0YVtpKjMgKyAxXSA9
IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMpW2kgKyAxXTsKKyAgICAgICAgICAg
IGRhdGFbaSozICsgMl0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVtpICsg
Ml07CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOworICAgIH0KKworICAgIGlmICghbVRyaWFuZ2xlRmFuSUItPnVubWFwQnVmZmVyKCkpCisg
ICAgeworICAgICAgICBFUlIoIkNvdWxkIG5vdCB1bm1hcCBzY3JhdGNoIGluZGV4IGJ1ZmZlciBm
b3IgR0xfVFJJQU5HTEVfRkFOLiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KKworICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9IG1Ucmlhbmds
ZUZhbklCLT5nZXRTZXJpYWwoKSB8fCBtQXBwbGllZElCT2Zmc2V0ICE9IGluZGV4QnVmZmVyT2Zm
c2V0KQorICAgIHsKKyAgICAgICAgSW5kZXhCdWZmZXIxMSAqaW5kZXhCdWZmZXIgPSBJbmRleEJ1
ZmZlcjExOjptYWtlSW5kZXhCdWZmZXIxMShtVHJpYW5nbGVGYW5JQi0+Z2V0SW5kZXhCdWZmZXIo
KSk7CisKKyAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0SW5kZXhCdWZmZXIoaW5kZXhCdWZm
ZXItPmdldEJ1ZmZlcigpLCBpbmRleEJ1ZmZlci0+Z2V0SW5kZXhGb3JtYXQoKSwgaW5kZXhCdWZm
ZXJPZmZzZXQpOworICAgICAgICBtQXBwbGllZElCU2VyaWFsID0gbVRyaWFuZ2xlRmFuSUItPmdl
dFNlcmlhbCgpOworICAgICAgICBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbCA9IDA7CisgICAgICAg
IG1BcHBsaWVkSUJPZmZzZXQgPSBpbmRleEJ1ZmZlck9mZnNldDsKKyAgICB9CisKKyAgICBpZiAo
aW5zdGFuY2VzID4gMCkKKyAgICB7CisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5EcmF3SW5kZXhl
ZEluc3RhbmNlZChudW1UcmlzICogMywgaW5zdGFuY2VzLCAwLCAtbWluSW5kZXgsIDApOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRGV2aWNlQ29udGV4dC0+RHJhd0luZGV4ZWQo
bnVtVHJpcyAqIDMsIDAsIC1taW5JbmRleCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlcmVyMTE6
OmFwcGx5U2hhZGVycyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSkKK3sKKyAgICB1
bnNpZ25lZCBpbnQgcHJvZ3JhbUJpbmFyeVNlcmlhbCA9IHByb2dyYW1CaW5hcnktPmdldFNlcmlh
bCgpOworICAgIGNvbnN0IGJvb2wgdXBkYXRlUHJvZ3JhbVN0YXRlID0gKHByb2dyYW1CaW5hcnlT
ZXJpYWwgIT0gbUFwcGxpZWRQcm9ncmFtQmluYXJ5U2VyaWFsKTsKKworICAgIGlmICh1cGRhdGVQ
cm9ncmFtU3RhdGUpCisgICAgeworICAgICAgICBTaGFkZXJFeGVjdXRhYmxlICp2ZXJ0ZXhFeGUg
PSBwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlKCk7CisgICAgICAgIFNoYWRlckV4
ZWN1dGFibGUgKnBpeGVsRXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxFeGVjdXRhYmxlKCk7
CisKKyAgICAgICAgSUQzRDExVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIgPSBOVUxMOworICAg
ICAgICBpZiAodmVydGV4RXhlKSB2ZXJ0ZXhTaGFkZXIgPSBTaGFkZXJFeGVjdXRhYmxlMTE6Om1h
a2VTaGFkZXJFeGVjdXRhYmxlMTEodmVydGV4RXhlKS0+Z2V0VmVydGV4U2hhZGVyKCk7CisKKyAg
ICAgICAgSUQzRDExUGl4ZWxTaGFkZXIgKnBpeGVsU2hhZGVyID0gTlVMTDsKKyAgICAgICAgaWYg
KHBpeGVsRXhlKSBwaXhlbFNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4
ZWN1dGFibGUxMShwaXhlbEV4ZSktPmdldFBpeGVsU2hhZGVyKCk7CisKKyAgICAgICAgbURldmlj
ZUNvbnRleHQtPlBTU2V0U2hhZGVyKHBpeGVsU2hhZGVyLCBOVUxMLCAwKTsKKyAgICAgICAgbURl
dmljZUNvbnRleHQtPlZTU2V0U2hhZGVyKHZlcnRleFNoYWRlciwgTlVMTCwgMCk7CisKKyAgICAg
ICAgcHJvZ3JhbUJpbmFyeS0+ZGlydHlBbGxVbmlmb3JtcygpOworCisgICAgICAgIG1BcHBsaWVk
UHJvZ3JhbUJpbmFyeVNlcmlhbCA9IHByb2dyYW1CaW5hcnlTZXJpYWw7CisgICAgfQorCisgICAg
Ly8gT25seSB1c2UgdGhlIGdlb21ldHJ5IHNoYWRlciBjdXJyZW50bHkgZm9yIHBvaW50IHNwcml0
ZSBkcmF3aW5nCisgICAgY29uc3QgYm9vbCB1c2VzR2VvbWV0cnlTaGFkZXIgPSAocHJvZ3JhbUJp
bmFyeS0+dXNlc0dlb21ldHJ5U2hhZGVyKCkgJiYgbUN1clJhc3RlclN0YXRlLnBvaW50RHJhd01v
ZGUpOworCisgICAgaWYgKHVwZGF0ZVByb2dyYW1TdGF0ZSB8fCB1c2VzR2VvbWV0cnlTaGFkZXIg
IT0gbUlzR2VvbWV0cnlTaGFkZXJBY3RpdmUpCisgICAgeworICAgICAgICBpZiAodXNlc0dlb21l
dHJ5U2hhZGVyKQorICAgICAgICB7CisgICAgICAgICAgICBTaGFkZXJFeGVjdXRhYmxlICpnZW9t
ZXRyeUV4ZSA9IHByb2dyYW1CaW5hcnktPmdldEdlb21ldHJ5RXhlY3V0YWJsZSgpOworICAgICAg
ICAgICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmdlb21ldHJ5U2hhZGVyID0gU2hhZGVyRXhlY3V0
YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKGdlb21ldHJ5RXhlKS0+Z2V0R2VvbWV0cnlT
aGFkZXIoKTsKKyAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldFNoYWRlcihnZW9tZXRy
eVNoYWRlciwgTlVMTCwgMCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIoTlVMTCwgTlVMTCwgMCk7Cisg
ICAgICAgIH0KKworICAgICAgICBtSXNHZW9tZXRyeVNoYWRlckFjdGl2ZSA9IHVzZXNHZW9tZXRy
eVNoYWRlcjsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6YXBwbHlVbmlmb3JtcyhnbDo6
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlVuaWZvcm1BcnJheSAqdW5pZm9ybUFy
cmF5KQoreworICAgIFNoYWRlckV4ZWN1dGFibGUxMSAqdmVydGV4RXhlY3V0YWJsZSA9IFNoYWRl
ckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShwcm9ncmFtQmluYXJ5LT5nZXRW
ZXJ0ZXhFeGVjdXRhYmxlKCkpOworICAgIFNoYWRlckV4ZWN1dGFibGUxMSAqcGl4ZWxFeGVjdXRh
YmxlID0gU2hhZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKHByb2dyYW1C
aW5hcnktPmdldFBpeGVsRXhlY3V0YWJsZSgpKTsKKworICAgIHVuc2lnbmVkIGludCB0b3RhbFJl
Z2lzdGVyQ291bnRWUyA9IDA7CisgICAgdW5zaWduZWQgaW50IHRvdGFsUmVnaXN0ZXJDb3VudFBT
ID0gMDsKKworICAgIGJvb2wgdmVydGV4VW5pZm9ybXNEaXJ0eSA9IGZhbHNlOworICAgIGJvb2wg
cGl4ZWxVbmlmb3Jtc0RpcnR5ID0gZmFsc2U7CisKKyAgICBmb3IgKGdsOjpVbmlmb3JtQXJyYXk6
OmNvbnN0X2l0ZXJhdG9yIHVuaWZvcm1faXRlcmF0b3IgPSB1bmlmb3JtQXJyYXktPmJlZ2luKCk7
IHVuaWZvcm1faXRlcmF0b3IgIT0gdW5pZm9ybUFycmF5LT5lbmQoKTsgdW5pZm9ybV9pdGVyYXRv
cisrKQorICAgIHsKKyAgICAgICAgY29uc3QgZ2w6OlVuaWZvcm0gKnVuaWZvcm0gPSAqdW5pZm9y
bV9pdGVyYXRvcjsKKworICAgICAgICBpZiAodW5pZm9ybS0+dnNSZWdpc3RlckluZGV4ID49IDAp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHRvdGFsUmVnaXN0ZXJDb3VudFZTICs9IHVuaWZvcm0t
PnJlZ2lzdGVyQ291bnQ7CisgICAgICAgICAgICB2ZXJ0ZXhVbmlmb3Jtc0RpcnR5ID0gdmVydGV4
VW5pZm9ybXNEaXJ0eSB8fCB1bmlmb3JtLT5kaXJ0eTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICh1bmlmb3JtLT5wc1JlZ2lzdGVySW5kZXggPj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAg
dG90YWxSZWdpc3RlckNvdW50UFMgKz0gdW5pZm9ybS0+cmVnaXN0ZXJDb3VudDsKKyAgICAgICAg
ICAgIHBpeGVsVW5pZm9ybXNEaXJ0eSA9IHBpeGVsVW5pZm9ybXNEaXJ0eSB8fCB1bmlmb3JtLT5k
aXJ0eTsKKyAgICAgICAgfQorICAgIH0KKworICAgIElEM0QxMUJ1ZmZlciAqdmVydGV4Q29uc3Rh
bnRCdWZmZXIgPSB2ZXJ0ZXhFeGVjdXRhYmxlLT5nZXRDb25zdGFudEJ1ZmZlcihtRGV2aWNlLCB0
b3RhbFJlZ2lzdGVyQ291bnRWUyk7CisgICAgSUQzRDExQnVmZmVyICpwaXhlbENvbnN0YW50QnVm
ZmVyID0gcGl4ZWxFeGVjdXRhYmxlLT5nZXRDb25zdGFudEJ1ZmZlcihtRGV2aWNlLCB0b3RhbFJl
Z2lzdGVyQ291bnRQUyk7CisKKyAgICBmbG9hdCAoKm1hcFZTKVs0XSA9IE5VTEw7CisgICAgZmxv
YXQgKCptYXBQUylbNF0gPSBOVUxMOworCisgICAgaWYgKHRvdGFsUmVnaXN0ZXJDb3VudFZTID4g
MCAmJiB2ZXJ0ZXhVbmlmb3Jtc0RpcnR5KQorICAgIHsKKyAgICAgICAgRDNEMTFfTUFQUEVEX1NV
QlJFU09VUkNFIG1hcCA9IHswfTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlQ29u
dGV4dC0+TWFwKHZlcnRleENvbnN0YW50QnVmZmVyLCAwLCBEM0QxMV9NQVBfV1JJVEVfRElTQ0FS
RCwgMCwgJm1hcCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAg
IG1hcFZTID0gKGZsb2F0KCopWzRdKW1hcC5wRGF0YTsKKyAgICB9CisKKyAgICBpZiAodG90YWxS
ZWdpc3RlckNvdW50UFMgPiAwICYmIHBpeGVsVW5pZm9ybXNEaXJ0eSkKKyAgICB7CisgICAgICAg
IEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXAgPSB7MH07CisgICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gbURldmljZUNvbnRleHQtPk1hcChwaXhlbENvbnN0YW50QnVmZmVyLCAwLCBEM0QxMV9N
QVBfV1JJVEVfRElTQ0FSRCwgMCwgJm1hcCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CisgICAgICAgIG1hcFBTID0gKGZsb2F0KCopWzRdKW1hcC5wRGF0YTsKKyAgICB9CisK
KyAgICBmb3IgKGdsOjpVbmlmb3JtQXJyYXk6Oml0ZXJhdG9yIHVuaWZvcm1faXRlcmF0b3IgPSB1
bmlmb3JtQXJyYXktPmJlZ2luKCk7IHVuaWZvcm1faXRlcmF0b3IgIT0gdW5pZm9ybUFycmF5LT5l
bmQoKTsgdW5pZm9ybV9pdGVyYXRvcisrKQorICAgIHsKKyAgICAgICAgZ2w6OlVuaWZvcm0gKnVu
aWZvcm0gPSAqdW5pZm9ybV9pdGVyYXRvcjsKKworICAgICAgICBpZiAodW5pZm9ybS0+dHlwZSAh
PSAgR0xfU0FNUExFUl8yRCAmJiB1bmlmb3JtLT50eXBlICE9IEdMX1NBTVBMRVJfQ1VCRSkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKHVuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleCA+PSAwICYm
IG1hcFZTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1lbWNweShtYXBWUyArIHVu
aWZvcm0tPnZzUmVnaXN0ZXJJbmRleCwgdW5pZm9ybS0+ZGF0YSwgdW5pZm9ybS0+cmVnaXN0ZXJD
b3VudCAqIHNpemVvZihmbG9hdFs0XSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAodW5pZm9ybS0+cHNSZWdpc3RlckluZGV4ID49IDAgJiYgbWFwUFMpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgbWVtY3B5KG1hcFBTICsgdW5pZm9ybS0+cHNSZWdpc3RlckluZGV4
LCB1bmlmb3JtLT5kYXRhLCB1bmlmb3JtLT5yZWdpc3RlckNvdW50ICogc2l6ZW9mKGZsb2F0WzRd
KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB1bmlmb3JtLT5kaXJ0eSA9
IGZhbHNlOworICAgIH0KKworICAgIGlmIChtYXBWUykKKyAgICB7CisgICAgICAgIG1EZXZpY2VD
b250ZXh0LT5Vbm1hcCh2ZXJ0ZXhDb25zdGFudEJ1ZmZlciwgMCk7CisgICAgfQorCisgICAgaWYg
KG1hcFBTKQorICAgIHsKKyAgICAgICAgbURldmljZUNvbnRleHQtPlVubWFwKHBpeGVsQ29uc3Rh
bnRCdWZmZXIsIDApOworICAgIH0KKworICAgIGlmIChtQ3VycmVudFZlcnRleENvbnN0YW50QnVm
ZmVyICE9IHZlcnRleENvbnN0YW50QnVmZmVyKQorICAgIHsKKyAgICAgICAgbURldmljZUNvbnRl
eHQtPlZTU2V0Q29uc3RhbnRCdWZmZXJzKDAsIDEsICZ2ZXJ0ZXhDb25zdGFudEJ1ZmZlcik7Cisg
ICAgICAgIG1DdXJyZW50VmVydGV4Q29uc3RhbnRCdWZmZXIgPSB2ZXJ0ZXhDb25zdGFudEJ1ZmZl
cjsKKyAgICB9CisKKyAgICBpZiAobUN1cnJlbnRQaXhlbENvbnN0YW50QnVmZmVyICE9IHBpeGVs
Q29uc3RhbnRCdWZmZXIpCisgICAgeworICAgICAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRDb25z
dGFudEJ1ZmZlcnMoMCwgMSwgJnBpeGVsQ29uc3RhbnRCdWZmZXIpOworICAgICAgICBtQ3VycmVu
dFBpeGVsQ29uc3RhbnRCdWZmZXIgPSBwaXhlbENvbnN0YW50QnVmZmVyOworICAgIH0KKworICAg
IC8vIERyaXZlciB1bmlmb3JtcworICAgIGlmICghbURyaXZlckNvbnN0YW50QnVmZmVyVlMpCisg
ICAgeworICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9u
ID0gezB9OworICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLkJ5dGVXaWR0aCA9IHNp
emVvZihkeF9WZXJ0ZXhDb25zdGFudHMpOworICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0
aW9uLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKKyAgICAgICAgY29uc3RhbnRCdWZmZXJE
ZXNjcmlwdGlvbi5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX0NPTlNUQU5UX0JVRkZFUjsKKyAgICAg
ICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5DUFVBY2Nlc3NGbGFncyA9IDA7CisgICAgICAg
IGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uTWlzY0ZsYWdzID0gMDsKKyAgICAgICAgY29uc3Rh
bnRCdWZmZXJEZXNjcmlwdGlvbi5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKKworICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmY29uc3RhbnRCdWZmZXJEZXNj
cmlwdGlvbiwgTlVMTCwgJm1Ecml2ZXJDb25zdGFudEJ1ZmZlclZTKTsKKyAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICBtRGV2aWNlQ29udGV4dC0+VlNTZXRDb25z
dGFudEJ1ZmZlcnMoMSwgMSwgJm1Ecml2ZXJDb25zdGFudEJ1ZmZlclZTKTsKKyAgICB9CisKKyAg
ICBpZiAoIW1Ecml2ZXJDb25zdGFudEJ1ZmZlclBTKQorICAgIHsKKyAgICAgICAgRDNEMTFfQlVG
RkVSX0RFU0MgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbiA9IHswfTsKKyAgICAgICAgY29uc3Rh
bnRCdWZmZXJEZXNjcmlwdGlvbi5CeXRlV2lkdGggPSBzaXplb2YoZHhfUGl4ZWxDb25zdGFudHMp
OworICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLlVzYWdlID0gRDNEMTFfVVNBR0Vf
REVGQVVMVDsKKyAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5CaW5kRmxhZ3MgPSBE
M0QxMV9CSU5EX0NPTlNUQU5UX0JVRkZFUjsKKyAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlw
dGlvbi5DUFVBY2Nlc3NGbGFncyA9IDA7CisgICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRp
b24uTWlzY0ZsYWdzID0gMDsKKyAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5TdHJ1
Y3R1cmVCeXRlU3RyaWRlID0gMDsKKworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2Ut
PkNyZWF0ZUJ1ZmZlcigmY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbiwgTlVMTCwgJm1Ecml2ZXJD
b25zdGFudEJ1ZmZlclBTKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKwor
ICAgICAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRDb25zdGFudEJ1ZmZlcnMoMSwgMSwgJm1Ecml2
ZXJDb25zdGFudEJ1ZmZlclBTKTsKKyAgICB9CisKKyAgICBpZiAobWVtY21wKCZtVmVydGV4Q29u
c3RhbnRzLCAmbUFwcGxpZWRWZXJ0ZXhDb25zdGFudHMsIHNpemVvZihkeF9WZXJ0ZXhDb25zdGFu
dHMpKSAhPSAwKQorICAgIHsKKyAgICAgICAgbURldmljZUNvbnRleHQtPlVwZGF0ZVN1YnJlc291
cmNlKG1Ecml2ZXJDb25zdGFudEJ1ZmZlclZTLCAwLCBOVUxMLCAmbVZlcnRleENvbnN0YW50cywg
MTYsIDApOworICAgICAgICBtZW1jcHkoJm1BcHBsaWVkVmVydGV4Q29uc3RhbnRzLCAmbVZlcnRl
eENvbnN0YW50cywgc2l6ZW9mKGR4X1ZlcnRleENvbnN0YW50cykpOworICAgIH0KKworICAgIGlm
IChtZW1jbXAoJm1QaXhlbENvbnN0YW50cywgJm1BcHBsaWVkUGl4ZWxDb25zdGFudHMsIHNpemVv
ZihkeF9QaXhlbENvbnN0YW50cykpICE9IDApCisgICAgeworICAgICAgICBtRGV2aWNlQ29udGV4
dC0+VXBkYXRlU3VicmVzb3VyY2UobURyaXZlckNvbnN0YW50QnVmZmVyUFMsIDAsIE5VTEwsICZt
UGl4ZWxDb25zdGFudHMsIDE2LCAwKTsKKyAgICAgICAgbWVtY3B5KCZtQXBwbGllZFBpeGVsQ29u
c3RhbnRzLCAmbVBpeGVsQ29uc3RhbnRzLCBzaXplb2YoZHhfUGl4ZWxDb25zdGFudHMpKTsKKyAg
ICB9CisKKyAgICAvLyBuZWVkZWQgZm9yIHRoZSBwb2ludCBzcHJpdGUgZ2VvbWV0cnkgc2hhZGVy
CisgICAgaWYgKG1DdXJyZW50R2VvbWV0cnlDb25zdGFudEJ1ZmZlciAhPSBtRHJpdmVyQ29uc3Rh
bnRCdWZmZXJQUykKKyAgICB7CisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldENvbnN0YW50
QnVmZmVycygwLCAxLCAmbURyaXZlckNvbnN0YW50QnVmZmVyUFMpOworICAgICAgICBtQ3VycmVu
dEdlb21ldHJ5Q29uc3RhbnRCdWZmZXIgPSBtRHJpdmVyQ29uc3RhbnRCdWZmZXJQUzsKKyAgICB9
Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6Y2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyYW1ldGVycyAm
Y2xlYXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpCit7CisgICAgIGdsOjpS
ZW5kZXJidWZmZXIgKmZpcnN0UmVuZGVyYnVmZmVyID0gZnJhbWVCdWZmZXItPmdldEZpcnN0Q29s
b3JidWZmZXIoKTsKKyAgICAgR0xlbnVtIGludGVybmFsRm9ybWF0ID0gZmlyc3RSZW5kZXJidWZm
ZXIgPyBmaXJzdFJlbmRlcmJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSA6IEdMX05PTkU7CisK
KyAgICAgYm9vbCBuZWVkTWFza2VkQ29sb3JDbGVhciA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xf
Q09MT1JfQlVGRkVSX0JJVCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgo
IWNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCAmJiBnbDo6R2V0UmVkU2l6ZShpbnRlcm5hbEZvcm1h
dCkgPiAwKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghY2xlYXJQYXJh
bXMuY29sb3JNYXNrR3JlZW4gJiYgZ2w6OkdldEdyZWVuU2l6ZShpbnRlcm5hbEZvcm1hdCkgPiAw
KSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghY2xlYXJQYXJhbXMuY29s
b3JNYXNrQmx1ZSAmJiBnbDo6R2V0Qmx1ZVNpemUoaW50ZXJuYWxGb3JtYXQpID4gMCkgfHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIWNsZWFyUGFyYW1zLmNvbG9yTWFza0Fs
cGhhICYmIGdsOjpHZXRBbHBoYVNpemUoaW50ZXJuYWxGb3JtYXQpID4gMCkpOworCisgICAgIHVu
c2lnbmVkIGludCBzdGVuY2lsVW5tYXNrZWQgPSAweDA7CisgICAgIGlmIChmcmFtZUJ1ZmZlci0+
aGFzU3RlbmNpbCgpKQorICAgICB7CisgICAgICAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbFNpemUg
PSBnbDo6R2V0U3RlbmNpbFNpemUoZnJhbWVCdWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0
QWN0dWFsRm9ybWF0KCkpOworICAgICAgICAgc3RlbmNpbFVubWFza2VkID0gKDB4MSA8PCBzdGVu
Y2lsU2l6ZSkgLSAxOworICAgICB9CisgICAgIGJvb2wgbmVlZE1hc2tlZFN0ZW5jaWxDbGVhciA9
IChjbGVhclBhcmFtcy5tYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKSAmJgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xlYXJQYXJhbXMuc3RlbmNpbFdyaXRlTWFzayAm
IHN0ZW5jaWxVbm1hc2tlZCkgIT0gc3RlbmNpbFVubWFza2VkOworCisgICAgIGJvb2wgbmVlZFNj
aXNzb3JlZENsZWFyID0gbVNjaXNzb3JFbmFibGVkICYmIChtQ3VyU2Npc3Nvci54ID4gMCB8fCBt
Q3VyU2Npc3Nvci55ID4gMCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbUN1clNjaXNzb3IueCArIG1DdXJTY2lzc29yLndpZHRoIDwgbVJlbmRl
clRhcmdldERlc2Mud2lkdGggfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1DdXJTY2lzc29yLnkgKyBtQ3VyU2Npc3Nvci5oZWlnaHQgPCBtUmVu
ZGVyVGFyZ2V0RGVzYy5oZWlnaHQpOworCisgICAgIGlmIChuZWVkTWFza2VkQ29sb3JDbGVhciB8
fCBuZWVkTWFza2VkU3RlbmNpbENsZWFyIHx8IG5lZWRTY2lzc29yZWRDbGVhcikKKyAgICAgewor
ICAgICAgICAgbWFza2VkQ2xlYXIoY2xlYXJQYXJhbXMsIGZyYW1lQnVmZmVyKTsKKyAgICAgfQor
ICAgICBlbHNlCisgICAgIHsKKyAgICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09M
T1JfQlVGRkVSX0JJVCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBjb2xvckF0dGFjaG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQgPCBnbDo6SU1QTEVNRU5UQVRJ
T05fTUFYX0RSQVdfQlVGRkVSUzsgY29sb3JBdHRhY2htZW50KyspCisgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICBpZiAoZnJhbWVCdWZmZXItPmlzRW5hYmxlZENvbG9yQXR0YWNobWVu
dChjb2xvckF0dGFjaG1lbnQpKQorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXJPYmplY3QgPSBmcmFtZUJ1ZmZlci0+
Z2V0Q29sb3JidWZmZXIoY29sb3JBdHRhY2htZW50KTsKKyAgICAgICAgICAgICAgICAgICAgIGlm
IChyZW5kZXJidWZmZXJPYmplY3QpCisgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBSZW5kZXJUYXJnZXQxMSAqcmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0
MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShyZW5kZXJidWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdl
dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVuZGVyVGFyZ2V0KQorICAgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVSUigicmVu
ZGVyIHRhcmdldCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZnJhbWVidWZmZXJSVFYg
PSByZW5kZXJUYXJnZXQtPmdldFJlbmRlclRhcmdldFZpZXcoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghZnJhbWVidWZmZXJSVFYpCisgICAgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHZpZXcgcG9pbnRl
ciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IEdMZW51bSBmb3JtYXQgPSByZW5kZXJidWZmZXJPYmplY3QtPmdldEludGVybmFsRm9ybWF0KCk7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGNsZWFyVmFsdWVzWzRdID0g
eyAoZ2w6OkdldFJlZFNpemUoZm9ybWF0KSA+IDApICAgPyBjbGVhclBhcmFtcy5jb2xvckNsZWFy
VmFsdWUucmVkICAgOiAwLjBmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChnbDo6R2V0R3JlZW5TaXplKGZvcm1hdCkgPiAwKSA/IGNsZWFy
UGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5ncmVlbiA6IDAuMGYsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdsOjpHZXRCbHVlU2l6ZShmb3Jt
YXQpID4gMCkgID8gY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLmJsdWUgIDogMC4wZiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2w6
OkdldEFscGhhU2l6ZShmb3JtYXQpID4gMCkgPyBjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUu
YWxwaGEgOiAxLjBmIH07CisgICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+
Q2xlYXJSZW5kZXJUYXJnZXRWaWV3KGZyYW1lYnVmZmVyUlRWLCBjbGVhclZhbHVlcyk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0RFUFRIX0JVRkZFUl9C
SVQgfHwgY2xlYXJQYXJhbXMubWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkKKyAgICAgICAg
eworICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0ID0gZnJh
bWVCdWZmZXItPmdldERlcHRoT3JTdGVuY2lsYnVmZmVyKCk7CisgICAgICAgICAgICBpZiAocmVu
ZGVyYnVmZmVyT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFJlbmRlclRh
cmdldDExICpyZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDEx
KHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhTdGVuY2lsKCkpOworICAgICAgICAgICAgICAg
IGlmICghcmVuZGVyVGFyZ2V0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpmcmFtZWJ1ZmZlckRTViA9IHJlbmRlclRhcmdl
dC0+Z2V0RGVwdGhTdGVuY2lsVmlldygpOworICAgICAgICAgICAgICAgIGlmICghZnJhbWVidWZm
ZXJEU1YpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBFUlIoImRlcHRo
IHN0ZW5jaWwgdmlldyBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgVUlO
VCBjbGVhckZsYWdzID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAm
IEdMX0RFUFRIX0JVRkZFUl9CSVQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBjbGVhckZsYWdzIHw9IEQzRDExX0NMRUFSX0RFUFRIOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX1NURU5DSUxfQlVGRkVS
X0JJVCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNsZWFyRmxhZ3Mg
fD0gRDNEMTFfQ0xFQVJfU1RFTkNJTDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBmbG9hdCBkZXB0aENsZWFyID0gZ2w6OmNsYW1wMDEoY2xlYXJQYXJhbXMuZGVwdGhDbGVh
clZhbHVlKTsKKyAgICAgICAgICAgICAgICBVSU5UOCBzdGVuY2lsQ2xlYXIgPSBjbGVhclBhcmFt
cy5zdGVuY2lsQ2xlYXJWYWx1ZSAmIDB4MDAwMDAwRkY7CisKKyAgICAgICAgICAgICAgICBtRGV2
aWNlQ29udGV4dC0+Q2xlYXJEZXB0aFN0ZW5jaWxWaWV3KGZyYW1lYnVmZmVyRFNWLCBjbGVhckZs
YWdzLCBkZXB0aENsZWFyLCBzdGVuY2lsQ2xlYXIpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorfQorCit2b2lkIFJlbmRlcmVyMTE6Om1hc2tlZENsZWFyKGNvbnN0IGdsOjpDbGVh
clBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKQor
eworICAgIEhSRVNVTFQgcmVzdWx0OworCisgICAgaWYgKCFtQ2xlYXJSZXNvdXJjZXNJbml0aWFs
aXplZCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbUNsZWFyVkIgJiYgIW1DbGVhclZTICYmICFt
Q2xlYXJTaW5nbGVQUyAmJiAhbUNsZWFyTXVsdGlwbGVQUyAmJiAhbUNsZWFyU2Npc3NvclJTICYm
ICFtQ2xlYXJOb1NjaXNzb3JSUyk7CisKKyAgICAgICAgRDNEMTFfQlVGRkVSX0RFU0MgdmJEZXNj
OworICAgICAgICB2YkRlc2MuQnl0ZVdpZHRoID0gc2l6ZW9mKGQzZDExOjpQb3NpdGlvbkRlcHRo
Q29sb3JWZXJ0ZXgpICogNDsKKyAgICAgICAgdmJEZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfRFlO
QU1JQzsKKyAgICAgICAgdmJEZXNjLkJpbmRGbGFncyA9IEQzRDExX0JJTkRfVkVSVEVYX0JVRkZF
UjsKKyAgICAgICAgdmJEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19XUklU
RTsKKyAgICAgICAgdmJEZXNjLk1pc2NGbGFncyA9IDA7CisgICAgICAgIHZiRGVzYy5TdHJ1Y3R1
cmVCeXRlU3RyaWRlID0gMDsKKworICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVCdWZm
ZXIoJnZiRGVzYywgTlVMTCwgJm1DbGVhclZCKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKKyAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ2xlYXJWQiwgIlJlbmRlcmVy
MTEgbWFza2VkIGNsZWFyIHZlcnRleCBidWZmZXIiKTsKKworICAgICAgICBEM0QxMV9JTlBVVF9F
TEVNRU5UX0RFU0MgcXVhZExheW91dFtdID0KKyAgICAgICAgeworICAgICAgICAgICAgeyAiUE9T
SVRJT04iLCAwLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsICAgIDAsICAwLCBEM0QxMV9J
TlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAgfSwKKyAgICAgICAgICAgIHsgIkNPTE9SIiwgICAgMCwg
RFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAwLCAxMiwgRDNEMTFfSU5QVVRfUEVSX1ZF
UlRFWF9EQVRBLCAwIH0sCisgICAgICAgIH07CisKKyAgICAgICAgcmVzdWx0ID0gbURldmljZS0+
Q3JlYXRlSW5wdXRMYXlvdXQocXVhZExheW91dCwgMiwgZ19WU19DbGVhciwgc2l6ZW9mKGdfVlNf
Q2xlYXIpLCAmbUNsZWFySUwpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwor
ICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhcklMLCAiUmVuZGVyZXIxMSBtYXNrZWQg
Y2xlYXIgaW5wdXQgbGF5b3V0Iik7CisKKyAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRl
VmVydGV4U2hhZGVyKGdfVlNfQ2xlYXIsIHNpemVvZihnX1ZTX0NsZWFyKSwgTlVMTCwgJm1DbGVh
clZTKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgZDNkMTE6
OlNldERlYnVnTmFtZShtQ2xlYXJWUywgIlJlbmRlcmVyMTEgbWFza2VkIGNsZWFyIHZlcnRleCBz
aGFkZXIiKTsKKworICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihn
X1BTX0NsZWFyU2luZ2xlLCBzaXplb2YoZ19QU19DbGVhclNpbmdsZSksIE5VTEwsICZtQ2xlYXJT
aW5nbGVQUyk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIGQz
ZDExOjpTZXREZWJ1Z05hbWUobUNsZWFyU2luZ2xlUFMsICJSZW5kZXJlcjExIG1hc2tlZCBjbGVh
ciBwaXhlbCBzaGFkZXIgKDEgUlQpIik7CisKKyAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3Jl
YXRlUGl4ZWxTaGFkZXIoZ19QU19DbGVhck11bHRpcGxlLCBzaXplb2YoZ19QU19DbGVhck11bHRp
cGxlKSwgTlVMTCwgJm1DbGVhck11bHRpcGxlUFMpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOworICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhck11bHRpcGxlUFMs
ICJSZW5kZXJlcjExIG1hc2tlZCBjbGVhciBwaXhlbCBzaGFkZXIgKE1SVCkiKTsKKworICAgICAg
ICBEM0QxMV9SQVNURVJJWkVSX0RFU0MgcnNTY2lzc29yRGVzYzsKKyAgICAgICAgcnNTY2lzc29y
RGVzYy5GaWxsTW9kZSA9IEQzRDExX0ZJTExfU09MSUQ7CisgICAgICAgIHJzU2Npc3NvckRlc2Mu
Q3VsbE1vZGUgPSBEM0QxMV9DVUxMX05PTkU7CisgICAgICAgIHJzU2Npc3NvckRlc2MuRnJvbnRD
b3VudGVyQ2xvY2t3aXNlID0gRkFMU0U7CisgICAgICAgIHJzU2Npc3NvckRlc2MuRGVwdGhCaWFz
ID0gMDsKKyAgICAgICAgcnNTY2lzc29yRGVzYy5EZXB0aEJpYXNDbGFtcCA9IDAuMGY7CisgICAg
ICAgIHJzU2Npc3NvckRlc2MuU2xvcGVTY2FsZWREZXB0aEJpYXMgPSAwLjBmOworICAgICAgICBy
c1NjaXNzb3JEZXNjLkRlcHRoQ2xpcEVuYWJsZSA9IEZBTFNFOworICAgICAgICByc1NjaXNzb3JE
ZXNjLlNjaXNzb3JFbmFibGUgPSBUUlVFOworICAgICAgICByc1NjaXNzb3JEZXNjLk11bHRpc2Ft
cGxlRW5hYmxlID0gRkFMU0U7CisgICAgICAgIHJzU2Npc3NvckRlc2MuQW50aWFsaWFzZWRMaW5l
RW5hYmxlID0gRkFMU0U7CisKKyAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUmFzdGVy
aXplclN0YXRlKCZyc1NjaXNzb3JEZXNjLCAmbUNsZWFyU2Npc3NvclJTKTsKKyAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ2xl
YXJTY2lzc29yUlMsICJSZW5kZXJlcjExIG1hc2tlZCBjbGVhciBzY2lzc29yIHJhc3Rlcml6ZXIg
c3RhdGUiKTsKKworICAgICAgICBEM0QxMV9SQVNURVJJWkVSX0RFU0MgcnNOb1NjaXNzb3JEZXNj
OworICAgICAgICByc05vU2Npc3NvckRlc2MuRmlsbE1vZGUgPSBEM0QxMV9GSUxMX1NPTElEOwor
ICAgICAgICByc05vU2Npc3NvckRlc2MuQ3VsbE1vZGUgPSBEM0QxMV9DVUxMX05PTkU7CisgICAg
ICAgIHJzTm9TY2lzc29yRGVzYy5Gcm9udENvdW50ZXJDbG9ja3dpc2UgPSBGQUxTRTsKKyAgICAg
ICAgcnNOb1NjaXNzb3JEZXNjLkRlcHRoQmlhcyA9IDA7CisgICAgICAgIHJzTm9TY2lzc29yRGVz
Yy5EZXB0aEJpYXNDbGFtcCA9IDAuMGY7CisgICAgICAgIHJzTm9TY2lzc29yRGVzYy5TbG9wZVNj
YWxlZERlcHRoQmlhcyA9IDAuMGY7CisgICAgICAgIHJzTm9TY2lzc29yRGVzYy5EZXB0aENsaXBF
bmFibGUgPSBGQUxTRTsKKyAgICAgICAgcnNOb1NjaXNzb3JEZXNjLlNjaXNzb3JFbmFibGUgPSBG
QUxTRTsKKyAgICAgICAgcnNOb1NjaXNzb3JEZXNjLk11bHRpc2FtcGxlRW5hYmxlID0gRkFMU0U7
CisgICAgICAgIHJzTm9TY2lzc29yRGVzYy5BbnRpYWxpYXNlZExpbmVFbmFibGUgPSBGQUxTRTsK
KworICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVSYXN0ZXJpemVyU3RhdGUoJnJzTm9T
Y2lzc29yRGVzYywgJm1DbGVhck5vU2Npc3NvclJTKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURF
RChyZXN1bHQpKTsKKyAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ2xlYXJOb1NjaXNzb3JS
UywgIlJlbmRlcmVyMTEgbWFza2VkIGNsZWFyIG5vIHNjaXNzb3IgcmFzdGVyaXplciBzdGF0ZSIp
OworCisgICAgICAgIG1DbGVhclJlc291cmNlc0luaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9CisK
KyAgICAvLyBQcmVwYXJlIHRoZSBkZXB0aCBzdGVuY2lsIHN0YXRlIHRvIHdyaXRlIGRlcHRoIHZh
bHVlcyBpZiB0aGUgZGVwdGggc2hvdWxkIGJlIGNsZWFyZWQKKyAgICAvLyBhbmQgc3RlbmNpbCB2
YWx1ZXMgaWYgdGhlIHN0ZW5jaWwgc2hvdWxkIGJlIGNsZWFyZWQKKyAgICBnbDo6RGVwdGhTdGVu
Y2lsU3RhdGUgZ2xEU1N0YXRlOworICAgIGdsRFNTdGF0ZS5kZXB0aFRlc3QgPSAoY2xlYXJQYXJh
bXMubWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpICE9IDA7CisgICAgZ2xEU1N0YXRlLmRlcHRo
RnVuYyA9IEdMX0FMV0FZUzsKKyAgICBnbERTU3RhdGUuZGVwdGhNYXNrID0gKGNsZWFyUGFyYW1z
Lm1hc2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUKSAhPSAwOworICAgIGdsRFNTdGF0ZS5zdGVuY2ls
VGVzdCA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKSAhPSAwOwor
ICAgIGdsRFNTdGF0ZS5zdGVuY2lsRnVuYyA9IEdMX0FMV0FZUzsKKyAgICBnbERTU3RhdGUuc3Rl
bmNpbE1hc2sgPSAwOworICAgIGdsRFNTdGF0ZS5zdGVuY2lsRmFpbCA9IEdMX1JFUExBQ0U7Cisg
ICAgZ2xEU1N0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsID0gR0xfUkVQTEFDRTsKKyAgICBnbERT
U3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MgPSBHTF9SRVBMQUNFOworICAgIGdsRFNTdGF0ZS5z
dGVuY2lsV3JpdGVtYXNrID0gY2xlYXJQYXJhbXMuc3RlbmNpbFdyaXRlTWFzazsKKyAgICBnbERT
U3RhdGUuc3RlbmNpbEJhY2tGdW5jID0gR0xfQUxXQVlTOworICAgIGdsRFNTdGF0ZS5zdGVuY2ls
QmFja01hc2sgPSAwOworICAgIGdsRFNTdGF0ZS5zdGVuY2lsQmFja0ZhaWwgPSBHTF9SRVBMQUNF
OworICAgIGdsRFNTdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwgPSBHTF9SRVBMQUNFOwor
ICAgIGdsRFNTdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MgPSBHTF9SRVBMQUNFOworICAg
IGdsRFNTdGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzayA9IGNsZWFyUGFyYW1zLnN0ZW5jaWxXcml0
ZU1hc2s7CisKKyAgICBpbnQgc3RlbmNpbENsZWFyID0gY2xlYXJQYXJhbXMuc3RlbmNpbENsZWFy
VmFsdWUgJiAweDAwMDAwMEZGOworCisgICAgSUQzRDExRGVwdGhTdGVuY2lsU3RhdGUgKmRzU3Rh
dGUgPSBtU3RhdGVDYWNoZS5nZXREZXB0aFN0ZW5jaWxTdGF0ZShnbERTU3RhdGUpOworCisgICAg
Ly8gUHJlcGFyZSB0aGUgYmxlbmQgc3RhdGUgdG8gdXNlIGEgd3JpdGUgbWFzayBpZiB0aGUgY29s
b3IgYnVmZmVyIHNob3VsZCBiZSBjbGVhcmVkCisgICAgZ2w6OkJsZW5kU3RhdGUgZ2xCbGVuZFN0
YXRlOworICAgIGdsQmxlbmRTdGF0ZS5ibGVuZCA9IGZhbHNlOworICAgIGdsQmxlbmRTdGF0ZS5z
b3VyY2VCbGVuZFJHQiA9IEdMX09ORTsKKyAgICBnbEJsZW5kU3RhdGUuZGVzdEJsZW5kUkdCID0g
R0xfWkVSTzsKKyAgICBnbEJsZW5kU3RhdGUuc291cmNlQmxlbmRBbHBoYSA9IEdMX09ORTsKKyAg
ICBnbEJsZW5kU3RhdGUuZGVzdEJsZW5kQWxwaGEgPSBHTF9aRVJPOworICAgIGdsQmxlbmRTdGF0
ZS5ibGVuZEVxdWF0aW9uUkdCID0gR0xfRlVOQ19BREQ7CisgICAgZ2xCbGVuZFN0YXRlLmJsZW5k
RXF1YXRpb25BbHBoYSA9IEdMX0ZVTkNfQUREOworICAgIGdsQmxlbmRTdGF0ZS5jb2xvck1hc2tS
ZWQgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpID8gY2xlYXJQYXJh
bXMuY29sb3JNYXNrUmVkIDogZmFsc2U7CisgICAgZ2xCbGVuZFN0YXRlLmNvbG9yTWFza0dyZWVu
ID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSA/IGNsZWFyUGFyYW1z
LmNvbG9yTWFza0dyZWVuIDogZmFsc2U7CisgICAgZ2xCbGVuZFN0YXRlLmNvbG9yTWFza0JsdWUg
PSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpID8gY2xlYXJQYXJhbXMu
Y29sb3JNYXNrQmx1ZSA6IGZhbHNlOworICAgIGdsQmxlbmRTdGF0ZS5jb2xvck1hc2tBbHBoYSA9
IChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkgPyBjbGVhclBhcmFtcy5j
b2xvck1hc2tBbHBoYSA6IGZhbHNlOworICAgIGdsQmxlbmRTdGF0ZS5zYW1wbGVBbHBoYVRvQ292
ZXJhZ2UgPSBmYWxzZTsKKyAgICBnbEJsZW5kU3RhdGUuZGl0aGVyID0gZmFsc2U7CisKKyAgICBz
dGF0aWMgY29uc3QgZmxvYXQgYmxlbmRGYWN0b3JzWzRdID0geyAxLjBmLCAxLjBmLCAxLjBmLCAx
LjBmIH07CisgICAgc3RhdGljIGNvbnN0IFVJTlQgc2FtcGxlTWFzayA9IDB4RkZGRkZGRkY7CisK
KyAgICBJRDNEMTFCbGVuZFN0YXRlICpibGVuZFN0YXRlID0gbVN0YXRlQ2FjaGUuZ2V0QmxlbmRT
dGF0ZShmcmFtZUJ1ZmZlciwgZ2xCbGVuZFN0YXRlKTsKKworICAgIC8vIFNldCB0aGUgdmVydGlj
ZXMKKyAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7CisgICAgcmVz
dWx0ID0gbURldmljZUNvbnRleHQtPk1hcChtQ2xlYXJWQiwgMCwgRDNEMTFfTUFQX1dSSVRFX0RJ
U0NBUkQsIDAsICZtYXBwZWRSZXNvdXJjZSk7CisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAg
IHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gbWFwIG1hc2tlZCBjbGVhciB2ZXJ0ZXggYnVmZmVy
LCBIUkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBkM2QxMTo6UG9zaXRpb25EZXB0aENvbG9yVmVydGV4ICp2ZXJ0aWNlcyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8ZDNkMTE6OlBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCo+KG1hcHBlZFJlc291cmNlLnBE
YXRhKTsKKworICAgIGZsb2F0IGRlcHRoQ2xlYXIgPSBnbDo6Y2xhbXAwMShjbGVhclBhcmFtcy5k
ZXB0aENsZWFyVmFsdWUpOworICAgIGQzZDExOjpTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgo
JnZlcnRpY2VzWzBdLCAtMS4wZiwgIDEuMGYsIGRlcHRoQ2xlYXIsIGNsZWFyUGFyYW1zLmNvbG9y
Q2xlYXJWYWx1ZSk7CisgICAgZDNkMTE6OlNldFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCgmdmVy
dGljZXNbMV0sIC0xLjBmLCAtMS4wZiwgZGVwdGhDbGVhciwgY2xlYXJQYXJhbXMuY29sb3JDbGVh
clZhbHVlKTsKKyAgICBkM2QxMTo6U2V0UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KCZ2ZXJ0aWNl
c1syXSwgIDEuMGYsICAxLjBmLCBkZXB0aENsZWFyLCBjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFs
dWUpOworICAgIGQzZDExOjpTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgoJnZlcnRpY2VzWzNd
LCAgMS4wZiwgLTEuMGYsIGRlcHRoQ2xlYXIsIGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZSk7
CisKKyAgICBtRGV2aWNlQ29udGV4dC0+VW5tYXAobUNsZWFyVkIsIDApOworCisgICAgLy8gQXBw
bHkgc3RhdGUKKyAgICBtRGV2aWNlQ29udGV4dC0+T01TZXRCbGVuZFN0YXRlKGJsZW5kU3RhdGUs
IGJsZW5kRmFjdG9ycywgc2FtcGxlTWFzayk7CisgICAgbURldmljZUNvbnRleHQtPk9NU2V0RGVw
dGhTdGVuY2lsU3RhdGUoZHNTdGF0ZSwgc3RlbmNpbENsZWFyKTsKKyAgICBtRGV2aWNlQ29udGV4
dC0+UlNTZXRTdGF0ZShtU2Npc3NvckVuYWJsZWQgPyBtQ2xlYXJTY2lzc29yUlMgOiBtQ2xlYXJO
b1NjaXNzb3JSUyk7CisKKyAgICAvLyBBcHBseSBzaGFkZXJzCisgICAgSUQzRDExUGl4ZWxTaGFk
ZXIgKnBpeGVsU2hhZGVyID0gZnJhbWVCdWZmZXItPnVzaW5nRXh0ZW5kZWREcmF3QnVmZmVycygp
ID8gbUNsZWFyTXVsdGlwbGVQUyA6IG1DbGVhclNpbmdsZVBTOworCisgICAgbURldmljZUNvbnRl
eHQtPklBU2V0SW5wdXRMYXlvdXQobUNsZWFySUwpOworICAgIG1EZXZpY2VDb250ZXh0LT5WU1Nl
dFNoYWRlcihtQ2xlYXJWUywgTlVMTCwgMCk7CisgICAgbURldmljZUNvbnRleHQtPlBTU2V0U2hh
ZGVyKHBpeGVsU2hhZGVyLCBOVUxMLCAwKTsKKyAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFk
ZXIoTlVMTCwgTlVMTCwgMCk7CisKKyAgICAvLyBBcHBseSB2ZXJ0ZXggYnVmZmVyCisgICAgc3Rh
dGljIFVJTlQgc3RyaWRlID0gc2l6ZW9mKGQzZDExOjpQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgp
OworICAgIHN0YXRpYyBVSU5UIHN0YXJ0SWR4ID0gMDsKKyAgICBtRGV2aWNlQ29udGV4dC0+SUFT
ZXRWZXJ0ZXhCdWZmZXJzKDAsIDEsICZtQ2xlYXJWQiwgJnN0cmlkZSwgJnN0YXJ0SWR4KTsKKyAg
ICBtRGV2aWNlQ29udGV4dC0+SUFTZXRQcmltaXRpdmVUb3BvbG9neShEM0RfUFJJTUlUSVZFX1RP
UE9MT0dZX1RSSUFOR0xFU1RSSVApOworCisgICAgLy8gRHJhdyB0aGUgY2xlYXIgcXVhZAorICAg
IG1EZXZpY2VDb250ZXh0LT5EcmF3KDQsIDApOworCisgICAgLy8gQ2xlYW4gdXAKKyAgICBtYXJr
QWxsU3RhdGVEaXJ0eSgpOworfQorCit2b2lkIFJlbmRlcmVyMTE6Om1hcmtBbGxTdGF0ZURpcnR5
KCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGludCBydEluZGV4ID0gMDsgcnRJbmRleCA8IGdsOjpJ
TVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTOyBydEluZGV4KyspCisgICAgeworICAgICAg
ICBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbHNbcnRJbmRleF0gPSAwOworICAgIH0KKyAgICBt
QXBwbGllZERlcHRoYnVmZmVyU2VyaWFsID0gMDsKKyAgICBtQXBwbGllZFN0ZW5jaWxidWZmZXJT
ZXJpYWwgPSAwOworICAgIG1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCA9IGZhbHNlOworICAgIG1S
ZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzsg
aSsrKQorICAgIHsKKyAgICAgICAgbUZvcmNlU2V0VmVydGV4U2FtcGxlclN0YXRlc1tpXSA9IHRy
dWU7CisgICAgICAgIG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1tpXSA9IDA7CisgICAgfQorICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyBpKyspCisg
ICAgeworICAgICAgICBtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0ZXNbaV0gPSB0cnVlOworICAg
ICAgICBtQ3VyUGl4ZWxUZXh0dXJlU2VyaWFsc1tpXSA9IDA7CisgICAgfQorCisgICAgbUZvcmNl
U2V0QmxlbmRTdGF0ZSA9IHRydWU7CisgICAgbUZvcmNlU2V0UmFzdGVyU3RhdGUgPSB0cnVlOwor
ICAgIG1Gb3JjZVNldERlcHRoU3RlbmNpbFN0YXRlID0gdHJ1ZTsKKyAgICBtRm9yY2VTZXRTY2lz
c29yID0gdHJ1ZTsKKyAgICBtRm9yY2VTZXRWaWV3cG9ydCA9IHRydWU7CisKKyAgICBtQXBwbGll
ZElCU2VyaWFsID0gMDsKKyAgICBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbCA9IDA7CisgICAgbUFw
cGxpZWRJQk9mZnNldCA9IDA7CisKKyAgICBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWwgPSAw
OworICAgIG1lbXNldCgmbUFwcGxpZWRWZXJ0ZXhDb25zdGFudHMsIDAsIHNpemVvZihkeF9WZXJ0
ZXhDb25zdGFudHMpKTsKKyAgICBtZW1zZXQoJm1BcHBsaWVkUGl4ZWxDb25zdGFudHMsIDAsIHNp
emVvZihkeF9QaXhlbENvbnN0YW50cykpOworCisgICAgbUlucHV0TGF5b3V0Q2FjaGUubWFya0Rp
cnR5KCk7CisKKyAgICBtQ3VycmVudFZlcnRleENvbnN0YW50QnVmZmVyID0gTlVMTDsKKyAgICBt
Q3VycmVudFBpeGVsQ29uc3RhbnRCdWZmZXIgPSBOVUxMOworICAgIG1DdXJyZW50R2VvbWV0cnlD
b25zdGFudEJ1ZmZlciA9IE5VTEw7CisKKyAgICBtQ3VycmVudFByaW1pdGl2ZVRvcG9sb2d5ID0g
RDNEX1BSSU1JVElWRV9UT1BPTE9HWV9VTkRFRklORUQ7Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6
cmVsZWFzZURldmljZVJlc291cmNlcygpCit7CisgICAgbVN0YXRlQ2FjaGUuY2xlYXIoKTsKKyAg
ICBtSW5wdXRMYXlvdXRDYWNoZS5jbGVhcigpOworCisgICAgZGVsZXRlIG1WZXJ0ZXhEYXRhTWFu
YWdlcjsKKyAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBOVUxMOworCisgICAgZGVsZXRlIG1JbmRl
eERhdGFNYW5hZ2VyOworICAgIG1JbmRleERhdGFNYW5hZ2VyID0gTlVMTDsKKworICAgIGRlbGV0
ZSBtTGluZUxvb3BJQjsKKyAgICBtTGluZUxvb3BJQiA9IE5VTEw7CisKKyAgICBkZWxldGUgbVRy
aWFuZ2xlRmFuSUI7CisgICAgbVRyaWFuZ2xlRmFuSUIgPSBOVUxMOworCisgICAgU2FmZVJlbGVh
c2UobUNvcHlWQik7CisgICAgU2FmZVJlbGVhc2UobUNvcHlTYW1wbGVyKTsKKyAgICBTYWZlUmVs
ZWFzZShtQ29weUlMKTsKKyAgICBTYWZlUmVsZWFzZShtQ29weUlMKTsKKyAgICBTYWZlUmVsZWFz
ZShtQ29weVZTKTsKKyAgICBTYWZlUmVsZWFzZShtQ29weVJHQkFQUyk7CisgICAgU2FmZVJlbGVh
c2UobUNvcHlSR0JQUyk7CisgICAgU2FmZVJlbGVhc2UobUNvcHlMdW1QUyk7CisgICAgU2FmZVJl
bGVhc2UobUNvcHlMdW1BbHBoYVBTKTsKKworICAgIG1Db3B5UmVzb3VyY2VzSW5pdGlhbGl6ZWQg
PSBmYWxzZTsKKworICAgIFNhZmVSZWxlYXNlKG1DbGVhclZCKTsKKyAgICBTYWZlUmVsZWFzZSht
Q2xlYXJJTCk7CisgICAgU2FmZVJlbGVhc2UobUNsZWFyVlMpOworICAgIFNhZmVSZWxlYXNlKG1D
bGVhclNpbmdsZVBTKTsKKyAgICBTYWZlUmVsZWFzZShtQ2xlYXJNdWx0aXBsZVBTKTsKKyAgICBT
YWZlUmVsZWFzZShtQ2xlYXJTY2lzc29yUlMpOworICAgIFNhZmVSZWxlYXNlKG1DbGVhck5vU2Np
c3NvclJTKTsKKworICAgIG1DbGVhclJlc291cmNlc0luaXRpYWxpemVkID0gZmFsc2U7CisKKyAg
ICBTYWZlUmVsZWFzZShtRHJpdmVyQ29uc3RhbnRCdWZmZXJWUyk7CisgICAgU2FmZVJlbGVhc2Uo
bURyaXZlckNvbnN0YW50QnVmZmVyUFMpOworICAgIFNhZmVSZWxlYXNlKG1TeW5jUXVlcnkpOwor
fQorCit2b2lkIFJlbmRlcmVyMTE6Om5vdGlmeURldmljZUxvc3QoKQoreworICAgIG1EZXZpY2VM
b3N0ID0gdHJ1ZTsKKyAgICBtRGlzcGxheS0+bm90aWZ5RGV2aWNlTG9zdCgpOworfQorCitib29s
IFJlbmRlcmVyMTE6OmlzRGV2aWNlTG9zdCgpCit7CisgICAgcmV0dXJuIG1EZXZpY2VMb3N0Owor
fQorCisvLyBzZXQgbm90aWZ5IHRvIHRydWUgdG8gYnJvYWRjYXN0IGEgbWVzc2FnZSB0byBhbGwg
Y29udGV4dHMgb2YgdGhlIGRldmljZSBsb3NzCitib29sIFJlbmRlcmVyMTE6OnRlc3REZXZpY2VM
b3N0KGJvb2wgbm90aWZ5KQoreworICAgIGJvb2wgaXNMb3N0ID0gZmFsc2U7CisKKyAgICAvLyBH
ZXRSZW1vdmVkUmVhc29uIGlzIHVzZWQgdG8gdGVzdCBpZiB0aGUgZGV2aWNlIGlzIHJlbW92ZWQK
KyAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkdldERldmljZVJlbW92ZWRSZWFzb24oKTsK
KyAgICBpc0xvc3QgPSBkM2QxMTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KTsKKworICAgIGlm
IChpc0xvc3QpCisgICAgeworICAgICAgICAvLyBMb2cgZXJyb3IgaWYgdGhpcyBpcyBhIG5ldyBk
ZXZpY2UgbG9zdCBldmVudAorICAgICAgICBpZiAobURldmljZUxvc3QgPT0gZmFsc2UpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEVSUigiVGhlIEQzRDExIGRldmljZSB3YXMgcmVtb3ZlZDogMHgl
MDhYIiwgcmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGVuc3VyZSB3ZSBub3RlIHRo
ZSBkZXZpY2UgbG9zcyAtLQorICAgICAgICAvLyB3ZSdsbCBwcm9iYWJseSBnZXQgdGhpcyBkb25l
IGFnYWluIGJ5IG5vdGlmeURldmljZUxvc3QKKyAgICAgICAgLy8gYnV0IGJlc3QgdG8gcmVtZW1i
ZXIgaXQhCisgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCB3YW50IHRvIGNsZWFyIHRoZSBk
ZXZpY2UgbG9zcyBzdGF0dXMgaGVyZQorICAgICAgICAvLyAtLSB0aGlzIG5lZWRzIHRvIGJlIGRv
bmUgYnkgcmVzZXREZXZpY2UKKyAgICAgICAgbURldmljZUxvc3QgPSB0cnVlOworICAgICAgICBp
ZiAobm90aWZ5KQorICAgICAgICB7CisgICAgICAgICAgICBub3RpZnlEZXZpY2VMb3N0KCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gaXNMb3N0OworfQorCitib29sIFJlbmRlcmVy
MTE6OnRlc3REZXZpY2VSZXNldHRhYmxlKCkKK3sKKyAgICAvLyBkZXRlcm1pbmUgaWYgdGhlIGRl
dmljZSBpcyByZXNldHRhYmxlIGJ5IGNyZWF0aW5nIGEgZHVtbXkgZGV2aWNlCisgICAgUEZOX0Qz
RDExX0NSRUFURV9ERVZJQ0UgRDNEMTFDcmVhdGVEZXZpY2UgPSAoUEZOX0QzRDExX0NSRUFURV9E
RVZJQ0UpR2V0UHJvY0FkZHJlc3MobUQzZDExTW9kdWxlLCAiRDNEMTFDcmVhdGVEZXZpY2UiKTsK
KworICAgIGlmIChEM0QxMUNyZWF0ZURldmljZSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIEQzRF9GRUFUVVJFX0xFVkVMIGZlYXR1cmVMZXZlbHNb
XSA9CisgICAgeworICAgICAgICBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wLAorICAgICAgICBEM0Rf
RkVBVFVSRV9MRVZFTF8xMF8xLAorICAgICAgICBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wLAorICAg
IH07CisKKyAgICBJRDNEMTFEZXZpY2UqIGR1bW15RGV2aWNlOworICAgIEQzRF9GRUFUVVJFX0xF
VkVMIGR1bW15RmVhdHVyZUxldmVsOworICAgIElEM0QxMURldmljZUNvbnRleHQqIGR1bW15Q29u
dGV4dDsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gRDNEMTFDcmVhdGVEZXZpY2UoTlVMTCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRF9EUklWRVJfVFlQRV9IQVJE
V0FSRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjaWYgZGVmaW5lZChfREVCVUcpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0QxMV9DUkVBVEVfREVWSUNF
X0RFQlVHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2Vsc2UKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZlYXR1cmVMZXZlbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBcnJheVNpemUoZmVhdHVyZUxldmVscyksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBEM0QxMV9TREtfVkVSU0lPTiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZkdW1teURldmljZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZkdW1teUZlYXR1cmVMZXZlbCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZkdW1teUNvbnRleHQpOworCisgICAgaWYgKCFtRGV2aWNl
IHx8IEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGR1bW15Q29udGV4dC0+UmVsZWFzZSgpOworICAgIGR1bW15RGV2aWNlLT5SZWxlYXNl
KCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJlcjExOjpyZWxlYXNlKCkK
K3sKKyAgICByZWxlYXNlRGV2aWNlUmVzb3VyY2VzKCk7CisKKyAgICBpZiAobUR4Z2lGYWN0b3J5
KQorICAgIHsKKyAgICAgICAgbUR4Z2lGYWN0b3J5LT5SZWxlYXNlKCk7CisgICAgICAgIG1EeGdp
RmFjdG9yeSA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKG1EeGdpQWRhcHRlcikKKyAgICB7Cisg
ICAgICAgIG1EeGdpQWRhcHRlci0+UmVsZWFzZSgpOworICAgICAgICBtRHhnaUFkYXB0ZXIgPSBO
VUxMOworICAgIH0KKworICAgIGlmIChtRGV2aWNlQ29udGV4dCkKKyAgICB7CisgICAgICAgIG1E
ZXZpY2VDb250ZXh0LT5DbGVhclN0YXRlKCk7CisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5GbHVz
aCgpOworICAgICAgICBtRGV2aWNlQ29udGV4dC0+UmVsZWFzZSgpOworICAgICAgICBtRGV2aWNl
Q29udGV4dCA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKG1EZXZpY2UpCisgICAgeworICAgICAg
ICBtRGV2aWNlLT5SZWxlYXNlKCk7CisgICAgICAgIG1EZXZpY2UgPSBOVUxMOworICAgIH0KKwor
ICAgIGlmIChtRDNkMTFNb2R1bGUpCisgICAgeworICAgICAgICBGcmVlTGlicmFyeShtRDNkMTFN
b2R1bGUpOworICAgICAgICBtRDNkMTFNb2R1bGUgPSBOVUxMOworICAgIH0KKworICAgIGlmICht
RHhnaU1vZHVsZSkKKyAgICB7CisgICAgICAgIEZyZWVMaWJyYXJ5KG1EeGdpTW9kdWxlKTsKKyAg
ICAgICAgbUR4Z2lNb2R1bGUgPSBOVUxMOworICAgIH0KK30KKworYm9vbCBSZW5kZXJlcjExOjpy
ZXNldERldmljZSgpCit7CisgICAgLy8gcmVjcmVhdGUgZXZlcnl0aGluZworICAgIHJlbGVhc2Uo
KTsKKyAgICBFR0xpbnQgcmVzdWx0ID0gaW5pdGlhbGl6ZSgpOworCisgICAgaWYgKHJlc3VsdCAh
PSBFR0xfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIEVSUigiQ291bGQgbm90IHJlaW5pdGlhbGl6
ZSBEM0QxMSBkZXZpY2U6ICUwOFgiLCByZXN1bHQpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgbURldmljZUxvc3QgPSBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQor
CitEV09SRCBSZW5kZXJlcjExOjpnZXRBZGFwdGVyVmVuZG9yKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbUFkYXB0ZXJEZXNjcmlwdGlvbi5WZW5kb3JJZDsKK30KKworc3RkOjpzdHJpbmcgUmVuZGVy
ZXIxMTo6Z2V0UmVuZGVyZXJEZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgc3RkOjpvc3RyaW5n
c3RyZWFtIHJlbmRlcmVyU3RyaW5nOworCisgICAgcmVuZGVyZXJTdHJpbmcgPDwgbURlc2NyaXB0
aW9uOworICAgIHJlbmRlcmVyU3RyaW5nIDw8ICIgRGlyZWN0M0QxMSI7CisKKyAgICByZW5kZXJl
clN0cmluZyA8PCAiIHZzXyIgPDwgZ2V0TWFqb3JTaGFkZXJNb2RlbCgpIDw8ICJfIiA8PCBnZXRN
aW5vclNoYWRlck1vZGVsKCk7CisgICAgcmVuZGVyZXJTdHJpbmcgPDwgIiBwc18iIDw8IGdldE1h
am9yU2hhZGVyTW9kZWwoKSA8PCAiXyIgPDwgZ2V0TWlub3JTaGFkZXJNb2RlbCgpOworCisgICAg
cmV0dXJuIHJlbmRlcmVyU3RyaW5nLnN0cigpOworfQorCitHVUlEIFJlbmRlcmVyMTE6OmdldEFk
YXB0ZXJJZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICAvLyBVc2UgdGhlIGFkYXB0ZXIgTFVJRCBh
cyBvdXIgYWRhcHRlciBJRAorICAgIC8vIFRoaXMgbnVtYmVyIGlzIGxvY2FsIHRvIGEgbWFjaGlu
ZSBpcyBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgdW5pcXVlIGJldHdlZW4gcmVzdGFydHMKKyAgICBN
RVRBX0FTU0VSVChzaXplb2YoTFVJRCkgPD0gc2l6ZW9mKEdVSUQpKTsKKyAgICBHVUlEIGFkYXB0
ZXJJZCA9IHswfTsKKyAgICBtZW1jcHkoJmFkYXB0ZXJJZCwgJm1BZGFwdGVyRGVzY3JpcHRpb24u
QWRhcHRlckx1aWQsIHNpemVvZihMVUlEKSk7CisgICAgcmV0dXJuIGFkYXB0ZXJJZDsKK30KKwor
Ym9vbCBSZW5kZXJlcjExOjpnZXRCR1JBVGV4dHVyZVN1cHBvcnQoKSBjb25zdAoreworICAgIHJl
dHVybiBtQkdSQVRleHR1cmVTdXBwb3J0OworfQorCitib29sIFJlbmRlcmVyMTE6OmdldERYVDFU
ZXh0dXJlU3VwcG9ydCgpCit7CisgICAgcmV0dXJuIG1EWFQxVGV4dHVyZVN1cHBvcnQ7Cit9CisK
K2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RFhUM1RleHR1cmVTdXBwb3J0KCkKK3sKKyAgICByZXR1cm4g
bURYVDNUZXh0dXJlU3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjExOjpnZXREWFQ1VGV4dHVy
ZVN1cHBvcnQoKQoreworICAgIHJldHVybiBtRFhUNVRleHR1cmVTdXBwb3J0OworfQorCitib29s
IFJlbmRlcmVyMTE6OmdldERlcHRoVGV4dHVyZVN1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVy
biBtRGVwdGhUZXh0dXJlU3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjExOjpnZXRGbG9hdDMy
VGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKQoreworICAg
ICpyZW5kZXJhYmxlID0gbUZsb2F0MzJSZW5kZXJTdXBwb3J0OworICAgICpmaWx0ZXJpbmcgPSBt
RmxvYXQzMkZpbHRlclN1cHBvcnQ7CisgICAgcmV0dXJuIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQ7
Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KGJvb2wgKmZp
bHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSkKK3sKKyAgICAqcmVuZGVyYWJsZSA9IG1GbG9hdDE2
UmVuZGVyU3VwcG9ydDsKKyAgICAqZmlsdGVyaW5nID0gbUZsb2F0MTZGaWx0ZXJTdXBwb3J0Owor
ICAgIHJldHVybiBtRmxvYXQxNlRleHR1cmVTdXBwb3J0OworfQorCitib29sIFJlbmRlcmVyMTE6
OmdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgUmVuZGVyZXIxMTo6Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpCit7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlcmVyMTE6OmdldFRleHR1cmVGaWx0ZXJB
bmlzb3Ryb3B5U3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Zsb2F0
IFJlbmRlcmVyMTE6OmdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkgY29uc3QKK3sKKyAgICBzd2l0
Y2ggKG1GZWF0dXJlTGV2ZWwpCisgICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8x
MV8wOgorICAgICAgICByZXR1cm4gRDNEMTFfTUFYX01BWEFOSVNPVFJPUFk7CisgICAgICBjYXNl
IEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEw
XzA6CisgICAgICAgIHJldHVybiBEM0QxMF9NQVhfTUFYQU5JU09UUk9QWTsKKyAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworYm9vbCBS
ZW5kZXJlcjExOjpnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpCit7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK1JhbmdlIFJlbmRlcmVyMTE6OmdldFZpZXdwb3J0Qm91bmRzKCkgY29uc3QKK3sKKyAgICBz
d2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCisgICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZF
TF8xMV8wOgorICAgICAgICByZXR1cm4gUmFuZ2UoRDNEMTFfVklFV1BPUlRfQk9VTkRTX01JTiwg
RDNEMTFfVklFV1BPUlRfQk9VTkRTX01BWCk7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVM
XzEwXzE6CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6CisgICAgICAgIHJldHVy
biBSYW5nZShEM0QxMF9WSUVXUE9SVF9CT1VORFNfTUlOLCBEM0QxMF9WSUVXUE9SVF9CT1VORFNf
TUFYKTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBSYW5n
ZSgwLCAwKTsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjExOjpnZXRNYXhWZXJ0
ZXhUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0Cit7CisgICAgTUVUQV9BU1NFUlQoTUFYX1RFWFRV
UkVfSU1BR0VfVU5JVFNfVlRGX1NNNCA8PSBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9U
RVhUVVJFX0lNQUdFX1VOSVRTKTsKKyAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCisgICAgewor
ICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgorICAgICAgY2FzZSBEM0RfRkVBVFVS
RV9MRVZFTF8xMF8xOgorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgorICAgICAg
ICByZXR1cm4gTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGX1NNNDsKKyAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwordW5zaWduZWQg
aW50IFJlbmRlcmVyMTE6OmdldE1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdAor
eworICAgIHJldHVybiBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKyBnZXRNYXhWZXJ0ZXhU
ZXh0dXJlSW1hZ2VVbml0cygpOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0UmVz
ZXJ2ZWRWZXJ0ZXhVbmlmb3JtVmVjdG9ycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7ICAgLy8g
RHJpdmVyIHVuaWZvcm1zIGFyZSBzdG9yZWQgaW4gYSBzZXBhcmF0ZSBjb25zdGFudCBidWZmZXIK
K30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldFJlc2VydmVkRnJhZ21lbnRVbmlmb3Jt
VmVjdG9ycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7ICAgLy8gRHJpdmVyIHVuaWZvcm1zIGFy
ZSBzdG9yZWQgaW4gYSBzZXBhcmF0ZSBjb25zdGFudCBidWZmZXIKK30KKwordW5zaWduZWQgaW50
IFJlbmRlcmVyMTE6OmdldE1heFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29uc3QKK3sKKyAgICBN
RVRBX0FTU0VSVChNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SU19EM0QxMSA8PSBEM0QxMF9SRVFf
Q09OU1RBTlRfQlVGRkVSX0VMRU1FTlRfQ09VTlQpOworICAgIEFTU0VSVChtRmVhdHVyZUxldmVs
ID49IEQzRF9GRUFUVVJFX0xFVkVMXzEwXzApOworICAgIHJldHVybiBNQVhfVkVSVEVYX1VOSUZP
Uk1fVkVDVE9SU19EM0QxMTsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldE1heEZy
YWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdAoreworICAgIE1FVEFfQVNTRVJUKE1BWF9GUkFH
TUVOVF9VTklGT1JNX1ZFQ1RPUlNfRDNEMTEgPD0gRDNEMTBfUkVRX0NPTlNUQU5UX0JVRkZFUl9F
TEVNRU5UX0NPVU5UKTsKKyAgICBBU1NFUlQobUZlYXR1cmVMZXZlbCA+PSBEM0RfRkVBVFVSRV9M
RVZFTF8xMF8wKTsKKyAgICByZXR1cm4gTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SU19EM0Qx
MTsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldE1heFZhcnlpbmdWZWN0b3JzKCkg
Y29uc3QKK3sKKyAgICBNRVRBX0FTU0VSVChnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZBUllJTkdf
VkVDVE9SUyA9PSBEM0QxMV9WU19PVVRQVVRfUkVHSVNURVJfQ09VTlQpOworICAgIHN3aXRjaCAo
bUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6
CisgICAgICAgIHJldHVybiBEM0QxMV9WU19PVVRQVVRfUkVHSVNURVJfQ09VTlQ7CisgICAgICBj
YXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVM
XzEwXzA6CisgICAgICAgIHJldHVybiBEM0QxMF9WU19PVVRQVVRfUkVHSVNURVJfQ09VTlQ7Cisg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9
CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25zdAor
eworICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFU
VVJFX0xFVkVMXzExXzA6CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAg
ICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6CisgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworYm9vbCBSZW5kZXJlcjExOjpnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKSBjb25zdAor
eworICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFU
VVJFX0xFVkVMXzExXzA6CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAg
ICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6CisgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworYm9vbCBSZW5kZXJlcjExOjpnZXRJbnN0YW5jaW5nU3VwcG9ydCgpIGNvbnN0Cit7Cisg
ICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVf
TEVWRUxfMTFfMDoKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAgICAgIGNh
c2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQor
Citib29sIFJlbmRlcmVyMTE6OmdldFNoYXJlSGFuZGxlU3VwcG9ydCgpIGNvbnN0Cit7CisgICAg
Ly8gV2Ugb25seSBjdXJyZW50bHkgc3VwcG9ydCBzaGFyZSBoYW5kbGVzIHdpdGggQkdSQSBzdXJm
YWNlcywgYmVjYXVzZQorICAgIC8vIGNocm9tZSBuZWVkcyBCR1JBLiBPbmNlIGNocm9tZSBmaXhl
cyB0aGlzLCB3ZSBzaG91bGQgYWx3YXlzIHN1cHBvcnQgdGhlbS4KKyAgICAvLyBQSVggZG9lc24n
dCBzZWVtIHRvIHN1cHBvcnQgdXNpbmcgc2hhcmUgaGFuZGxlcywgc28gZGlzYWJsZSB0aGVtLgor
ICAgIHJldHVybiBnZXRCR1JBVGV4dHVyZVN1cHBvcnQoKSAmJiAhZ2w6OnBlcmZBY3RpdmUoKTsK
K30KKworYm9vbCBSZW5kZXJlcjExOjpnZXREZXJpdmF0aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0KCkg
Y29uc3QKK3sKKyAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCisgICAgeworICAgICAgY2FzZSBE
M0RfRkVBVFVSRV9MRVZFTF8xMV8wOgorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8x
OgorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0UG9zdFN1YkJ1ZmZlclN1cHBvcnQoKSBj
b25zdAoreworICAgIC8vIEQzRDExIGRvZXMgbm90IHN1cHBvcnQgcHJlc2VudCB3aXRoIGRpcnR5
IHJlY3RhbmdsZXMgdW50aWwgRDNEMTEuMSBhbmQgRFhHSSAxLjIuCisgICAgcmV0dXJuIGZhbHNl
OworfQorCitpbnQgUmVuZGVyZXIxMTo6Z2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNvbnN0Cit7Cisg
ICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVf
TEVWRUxfMTFfMDogcmV0dXJuIEQzRDExX1NIQURFUl9NQUpPUl9WRVJTSU9OOyAgIC8vIDUKKyAg
ICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMTogcmV0dXJuIEQzRDEwXzFfU0hBREVSX01B
Sk9SX1ZFUlNJT047IC8vIDQKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDogcmV0
dXJuIEQzRDEwX1NIQURFUl9NQUpPUl9WRVJTSU9OOyAgIC8vIDQKKyAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7ICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitpbnQgUmVuZGVyZXIxMTo6
Z2V0TWlub3JTaGFkZXJNb2RlbCgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVs
KQorICAgIHsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDogcmV0dXJuIEQzRDEx
X1NIQURFUl9NSU5PUl9WRVJTSU9OOyAgIC8vIDAKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVW
RUxfMTBfMTogcmV0dXJuIEQzRDEwXzFfU0hBREVSX01JTk9SX1ZFUlNJT047IC8vIDEKKyAgICAg
IGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDogcmV0dXJuIEQzRDEwX1NIQURFUl9NSU5PUl9W
RVJTSU9OOyAgIC8vIDAKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgcmV0dXJu
IDA7CisgICAgfQorfQorCitmbG9hdCBSZW5kZXJlcjExOjpnZXRNYXhQb2ludFNpemUoKSBjb25z
dAoreworICAgIC8vIGNob29zZSBhIHJlYXNvbmFibGUgbWF4aW11bS4gd2UgZW5mb3JjZSB0aGlz
IGluIHRoZSBzaGFkZXIuCisgICAgLy8gKG5iOiBvbiBhIFJhZGVvbiAyNjAweHQsIERYOSByZXBv
cnRzIGEgMjU2IG1heCBwb2ludCBzaXplKQorICAgIHJldHVybiAxMDI0LjBmOworfQorCitpbnQg
UmVuZGVyZXIxMTo6Z2V0TWF4Vmlld3BvcnREaW1lbnNpb24oKSBjb25zdAoreworICAgIC8vIE1h
eGltdW0gdmlld3BvcnQgc2l6ZSBtdXN0IGJlIGF0IGxlYXN0IGFzIGxhcmdlIGFzIHRoZSBsYXJn
ZXN0IHJlbmRlciBidWZmZXIgKG9yIGxhcmdlcikuCisgICAgLy8gSW4gb3VyIGNhc2UgcmV0dXJu
IHRoZSBtYXhpbXVtIHRleHR1cmUgc2l6ZSwgd2hpY2ggaXMgdGhlIG1heGltdW0gcmVuZGVyIGJ1
ZmZlciBzaXplLgorICAgIE1FVEFfQVNTRVJUKEQzRDExX1JFUV9URVhUVVJFMkRfVV9PUl9WX0RJ
TUVOU0lPTiAqIDIgLSAxIDw9IEQzRDExX1ZJRVdQT1JUX0JPVU5EU19NQVgpOworICAgIE1FVEFf
QVNTRVJUKEQzRDEwX1JFUV9URVhUVVJFMkRfVV9PUl9WX0RJTUVOU0lPTiAqIDIgLSAxIDw9IEQz
RDEwX1ZJRVdQT1JUX0JPVU5EU19NQVgpOworCisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQor
ICAgIHsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDogCisgICAgICAgIHJldHVy
biBEM0QxMV9SRVFfVEVYVFVSRTJEX1VfT1JfVl9ESU1FTlNJT047ICAgLy8gMTYzODQKKyAgICAg
IGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVW
RUxfMTBfMDogCisgICAgICAgIHJldHVybiBEM0QxMF9SRVFfVEVYVFVSRTJEX1VfT1JfVl9ESU1F
TlNJT047ICAgLy8gODE5MgorICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VGV4dHVy
ZVdpZHRoKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCisgICAgeworICAg
ICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOiByZXR1cm4gRDNEMTFfUkVRX1RFWFRVUkUy
RF9VX09SX1ZfRElNRU5TSU9OOyAgIC8vIDE2Mzg0CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xF
VkVMXzEwXzE6CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6IHJldHVybiBEM0Qx
MF9SRVFfVEVYVFVSRTJEX1VfT1JfVl9ESU1FTlNJT047ICAgLy8gODE5MgorICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK2ludCBSZW5kZXJl
cjExOjpnZXRNYXhUZXh0dXJlSGVpZ2h0KCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1GZWF0dXJl
TGV2ZWwpCisgICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOiByZXR1cm4g
RDNEMTFfUkVRX1RFWFRVUkUyRF9VX09SX1ZfRElNRU5TSU9OOyAgIC8vIDE2Mzg0CisgICAgICBj
YXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVM
XzEwXzA6IHJldHVybiBEM0QxMF9SRVFfVEVYVFVSRTJEX1VfT1JfVl9ESU1FTlNJT047ICAgLy8g
ODE5MgorICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICByZXR1cm4gMDsKKyAgICB9
Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0MzJCaXRJbmRleFN1cHBvcnQoKSBjb25zdAorewor
ICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJF
X0xFVkVMXzExXzA6IAorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgorICAgICAg
Y2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOiByZXR1cm4gRDNEMTBfUkVRX0RSQVdJTkRFWEVE
X0lOREVYX0NPVU5UXzJfVE9fRVhQID49IDMyOyAgIC8vIHRydWUKKyAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW50IFJlbmRlcmVy
MTE6OmdldE1pblN3YXBJbnRlcnZhbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK2lu
dCBSZW5kZXJlcjExOjpnZXRNYXhTd2FwSW50ZXJ2YWwoKSBjb25zdAoreworICAgIHJldHVybiA0
OworfQorCitpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1NYXhTdXBwb3J0ZWRTYW1wbGVzOworfQorCitpbnQgUmVuZGVyZXIxMTo6
Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMoRFhHSV9GT1JNQVQgZm9ybWF0LCB1bnNpZ25lZCBp
bnQgcmVxdWVzdGVkKSBjb25zdAoreworICAgIGlmIChyZXF1ZXN0ZWQgPT0gMCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIE11bHRpc2FtcGxlU3VwcG9ydE1hcDo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IG1NdWx0aXNhbXBsZVN1cHBvcnRNYXAuZmluZChmb3JtYXQpOwor
ICAgIGlmIChpdGVyICE9IG1NdWx0aXNhbXBsZVN1cHBvcnRNYXAuZW5kKCkpCisgICAgeworICAg
ICAgICBjb25zdCBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvJiBpbmZvID0gaXRlci0+c2Vjb25kOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gcmVxdWVzdGVkIC0gMTsgaSA8IEQzRDExX01B
WF9NVUxUSVNBTVBMRV9TQU1QTEVfQ09VTlQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGluZm8ucXVhbGl0eUxldmVsc1tpXSA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGkgKyAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIC0xOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4UmVuZGVy
VGFyZ2V0cygpIGNvbnN0Cit7CisgICAgTUVUQV9BU1NFUlQoRDNEMTFfU0lNVUxUQU5FT1VTX1JF
TkRFUl9UQVJHRVRfQ09VTlQgPD0gZ2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlMp
OworICAgIE1FVEFfQVNTRVJUKEQzRDEwX1NJTVVMVEFORU9VU19SRU5ERVJfVEFSR0VUX0NPVU5U
IDw9IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTKTsKKworICAgIHN3aXRjaCAo
bUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6
CisgICAgICAgIHJldHVybiBEM0QxMV9TSU1VTFRBTkVPVVNfUkVOREVSX1RBUkdFVF9DT1VOVDsg
IC8vIDgKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAgICAgIGNhc2UgRDNE
X0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAgICAgICAgLy8gRmVhdHVyZSBsZXZlbCAxMC4wIGFuZCAx
MC4xIGNhcmRzIHBlcmZvcm0gdmVyeSBwb29ybHkgd2hlbiB0aGUgcGl4ZWwgc2hhZGVyCisgICAg
ICAgIC8vIG91dHB1dHMgdG8gbXVsdGlwbGUgUlRzIHRoYXQgYXJlIG5vdCBib3VuZC4KKyAgICAg
ICAgLy8gVE9ETzogUmVtb3ZlIHBpeGVsIHNoYWRlciBvdXRwdXRzIGZvciByZW5kZXIgdGFyZ2V0
cyB0aGF0IGFyZSBub3QgYm91bmQuCisgICAgICAgIHJldHVybiAxOworICAgICAgZGVmYXVsdDoK
KyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorfQorCiti
b29sIFJlbmRlcmVyMTE6OmNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTJEICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzb3VyY2UpCit7CisgICAgaWYg
KHNvdXJjZSAmJiBkZXN0KQorICAgIHsKKyAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMV8yRCAqc291
cmNlMTEgPSBUZXh0dXJlU3RvcmFnZTExXzJEOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yRChzb3Vy
Y2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMV8yRCAq
ZGVzdDExID0gVGV4dHVyZVN0b3JhZ2UxMV8yRDo6bWFrZVRleHR1cmVTdG9yYWdlMTFfMkQoZGVz
dC0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworCisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5Db3B5
UmVzb3VyY2UoZGVzdDExLT5nZXRCYXNlVGV4dHVyZSgpLCBzb3VyY2UxMS0+Z2V0QmFzZVRleHR1
cmUoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBSZW5kZXJlcjExOjpjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2VDdWJlICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnNvdXJjZSkK
K3sKKyAgICBpZiAoc291cmNlICYmIGRlc3QpCisgICAgeworICAgICAgICBUZXh0dXJlU3RvcmFn
ZTExX0N1YmUgKnNvdXJjZTExID0gVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjptYWtlVGV4dHVyZVN0
b3JhZ2UxMV9DdWJlKHNvdXJjZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAgICAgICBUZXh0
dXJlU3RvcmFnZTExX0N1YmUgKmRlc3QxMSA9IFRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6bWFrZVRl
eHR1cmVTdG9yYWdlMTFfQ3ViZShkZXN0LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CisKKyAgICAg
ICAgbURldmljZUNvbnRleHQtPkNvcHlSZXNvdXJjZShkZXN0MTEtPmdldEJhc2VUZXh0dXJlKCks
IHNvdXJjZTExLT5nZXRCYXNlVGV4dHVyZSgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlcmVyMTE6OmNvcHlJbWFnZShn
bDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VS
ZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3Jh
Z2UsIEdMaW50IGxldmVsKQoreworICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0g
ZnJhbWVidWZmZXItPmdldFJlYWRDb2xvcmJ1ZmZlcigpOworICAgIGlmICghY29sb3JidWZmZXIp
CisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgY29sb3IgYnVmZmVy
IGZyb20gdGhlIGZyYW1lIGJ1ZmZlci4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisgICAgUmVuZGVyVGFyZ2V0MTEgKnNvdXJj
ZVJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoY29sb3Ji
dWZmZXItPmdldFJlbmRlclRhcmdldCgpKTsKKyAgICBpZiAoIXNvdXJjZVJlbmRlclRhcmdldCkK
KyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0
IGZyb20gdGhlIGZyYW1lIGJ1ZmZlci4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VW
aWV3ICpzb3VyY2UgPSBzb3VyY2VSZW5kZXJUYXJnZXQtPmdldFNoYWRlclJlc291cmNlVmlldygp
OworICAgIGlmICghc291cmNlKQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmll
dmUgdGhlIHJlbmRlciB0YXJnZXQgdmlldyBmcm9tIHRoZSByZW5kZXIgdGFyZ2V0LiIpOworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CisK
KyAgICBUZXh0dXJlU3RvcmFnZTExXzJEICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFnZTExXzJE
OjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yRChzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7
CisgICAgaWYgKCFzdG9yYWdlMTEpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRy
aWV2ZSB0aGUgdGV4dHVyZSBzdG9yYWdlIGZyb20gdGhlIGRlc3RpbmF0aW9uLiIpOworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CisKKyAg
ICBSZW5kZXJUYXJnZXQxMSAqZGVzdFJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtl
UmVuZGVyVGFyZ2V0MTEoc3RvcmFnZTExLT5nZXRSZW5kZXJUYXJnZXQobGV2ZWwpKTsKKyAgICBp
ZiAoIWRlc3RSZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRy
aWV2ZSB0aGUgcmVuZGVyIHRhcmdldCBmcm9tIHRoZSBkZXN0aW5hdGlvbiBzdG9yYWdlLiIpOwor
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9
CisKKyAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpkZXN0ID0gZGVzdFJlbmRlclRhcmdldC0+
Z2V0UmVuZGVyVGFyZ2V0VmlldygpOworICAgIGlmICghZGVzdCkKKyAgICB7CisgICAgICAgIEVS
UigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0IHZpZXcgZnJvbSB0aGUgZGVz
dGluYXRpb24gcmVuZGVyIHRhcmdldC4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisgICAgZ2w6OlJlY3RhbmdsZSBkZXN0UmVj
dDsKKyAgICBkZXN0UmVjdC54ID0geG9mZnNldDsKKyAgICBkZXN0UmVjdC55ID0geW9mZnNldDsK
KyAgICBkZXN0UmVjdC53aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGg7CisgICAgZGVzdFJlY3QuaGVp
Z2h0ID0gc291cmNlUmVjdC5oZWlnaHQ7CisKKyAgICBib29sIHJldCA9IGNvcHlUZXh0dXJlKHNv
dXJjZSwgc291cmNlUmVjdCwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBzb3VyY2VS
ZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dCwgZGVzdFJlY3QsIGRlc3RSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIGRlc3RSZW5kZXJUYXJn
ZXQtPmdldEhlaWdodCgpLCBkZXN0Rm9ybWF0KTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK2Jv
b2wgUmVuZGVyZXIxMTo6Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNv
bnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCkKK3sKKyAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5n
ZXRSZWFkQ29sb3JidWZmZXIoKTsKKyAgICBpZiAoIWNvbG9yYnVmZmVyKQorICAgIHsKKyAgICAg
ICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIGNvbG9yIGJ1ZmZlciBmcm9tIHRoZSBmcmFt
ZSBidWZmZXIuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
ZmFsc2UpOworICAgIH0KKworICAgIFJlbmRlclRhcmdldDExICpzb3VyY2VSZW5kZXJUYXJnZXQg
PSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGNvbG9yYnVmZmVyLT5nZXRSZW5k
ZXJUYXJnZXQoKSk7CisgICAgaWYgKCFzb3VyY2VSZW5kZXJUYXJnZXQpCisgICAgeworICAgICAg
ICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCBmcm9tIHRoZSBmcmFt
ZSBidWZmZXIuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
ZmFsc2UpOworICAgIH0KKworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc291cmNlID0g
c291cmNlUmVuZGVyVGFyZ2V0LT5nZXRTaGFkZXJSZXNvdXJjZVZpZXcoKTsKKyAgICBpZiAoIXNv
dXJjZSkKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIg
dGFyZ2V0IHZpZXcgZnJvbSB0aGUgcmVuZGVyIHRhcmdldC4iKTsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisgICAgVGV4dHVyZVN0
b3JhZ2UxMV9DdWJlICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFnZTExX0N1YmU6Om1ha2VUZXh0
dXJlU3RvcmFnZTExX0N1YmUoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAgIGlm
ICghc3RvcmFnZTExKQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhl
IHRleHR1cmUgc3RvcmFnZSBmcm9tIHRoZSBkZXN0aW5hdGlvbi4iKTsKKyAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisgICAgUmVuZGVy
VGFyZ2V0MTEgKmRlc3RSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRh
cmdldDExKHN0b3JhZ2UxMS0+Z2V0UmVuZGVyVGFyZ2V0KHRhcmdldCwgbGV2ZWwpKTsKKyAgICBp
ZiAoIWRlc3RSZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRy
aWV2ZSB0aGUgcmVuZGVyIHRhcmdldCBmcm9tIHRoZSBkZXN0aW5hdGlvbiBzdG9yYWdlLiIpOwor
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9
CisKKyAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpkZXN0ID0gZGVzdFJlbmRlclRhcmdldC0+
Z2V0UmVuZGVyVGFyZ2V0VmlldygpOworICAgIGlmICghZGVzdCkKKyAgICB7CisgICAgICAgIEVS
UigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0IHZpZXcgZnJvbSB0aGUgZGVz
dGluYXRpb24gcmVuZGVyIHRhcmdldC4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisgICAgZ2w6OlJlY3RhbmdsZSBkZXN0UmVj
dDsKKyAgICBkZXN0UmVjdC54ID0geG9mZnNldDsKKyAgICBkZXN0UmVjdC55ID0geW9mZnNldDsK
KyAgICBkZXN0UmVjdC53aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGg7CisgICAgZGVzdFJlY3QuaGVp
Z2h0ID0gc291cmNlUmVjdC5oZWlnaHQ7CisKKyAgICBib29sIHJldCA9IGNvcHlUZXh0dXJlKHNv
dXJjZSwgc291cmNlUmVjdCwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBzb3VyY2VS
ZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dCwgZGVzdFJlY3QsIGRlc3RSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIGRlc3RSZW5kZXJUYXJn
ZXQtPmdldEhlaWdodCgpLCBkZXN0Rm9ybWF0KTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK2Jv
b2wgUmVuZGVyZXIxMTo6Y29weVRleHR1cmUoSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzb3Vy
Y2UsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZUFyZWEsIHVuc2lnbmVkIGludCBzb3VyY2VX
aWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZGVzdCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAm
ZGVzdEFyZWEsIHVuc2lnbmVkIGludCBkZXN0V2lkdGgsIHVuc2lnbmVkIGludCBkZXN0SGVpZ2h0
LCBHTGVudW0gZGVzdEZvcm1hdCkKK3sKKyAgICBIUkVTVUxUIHJlc3VsdDsKKworICAgIGlmICgh
bUNvcHlSZXNvdXJjZXNJbml0aWFsaXplZCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbUNvcHlW
QiAmJiAhbUNvcHlTYW1wbGVyICYmICFtQ29weUlMICYmICFtQ29weVZTICYmICFtQ29weVJHQkFQ
UyAmJiAhbUNvcHlSR0JQUyAmJiAhbUNvcHlMdW1QUyAmJiAhbUNvcHlMdW1BbHBoYVBTKTsKKwor
ICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyB2YkRlc2M7CisgICAgICAgIHZiRGVzYy5CeXRlV2lk
dGggPSBzaXplb2YoZDNkMTE6OlBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgpICogNDsKKyAgICAgICAg
dmJEZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfRFlOQU1JQzsKKyAgICAgICAgdmJEZXNjLkJpbmRG
bGFncyA9IEQzRDExX0JJTkRfVkVSVEVYX0JVRkZFUjsKKyAgICAgICAgdmJEZXNjLkNQVUFjY2Vz
c0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsKKyAgICAgICAgdmJEZXNjLk1pc2NGbGFn
cyA9IDA7CisgICAgICAgIHZiRGVzYy5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKKworICAgICAg
ICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVCdWZmZXIoJnZiRGVzYywgTlVMTCwgJm1Db3B5VkIp
OworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICBkM2QxMTo6U2V0
RGVidWdOYW1lKG1Db3B5VkIsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSB2ZXJ0ZXggYnVmZmVy
Iik7CisKKyAgICAgICAgRDNEMTFfU0FNUExFUl9ERVNDIHNhbXBsZXJEZXNjOworICAgICAgICBz
YW1wbGVyRGVzYy5GaWx0ZXIgPSBEM0QxMV9GSUxURVJfTUlOX01BR19NSVBfTElORUFSOworICAg
ICAgICBzYW1wbGVyRGVzYy5BZGRyZXNzVSA9IEQzRDExX1RFWFRVUkVfQUREUkVTU19DTEFNUDsK
KyAgICAgICAgc2FtcGxlckRlc2MuQWRkcmVzc1YgPSBEM0QxMV9URVhUVVJFX0FERFJFU1NfQ0xB
TVA7CisgICAgICAgIHNhbXBsZXJEZXNjLkFkZHJlc3NXID0gRDNEMTFfVEVYVFVSRV9BRERSRVNT
X0NMQU1QOworICAgICAgICBzYW1wbGVyRGVzYy5NaXBMT0RCaWFzID0gMC4wZjsKKyAgICAgICAg
c2FtcGxlckRlc2MuTWF4QW5pc290cm9weSA9IDA7CisgICAgICAgIHNhbXBsZXJEZXNjLkNvbXBh
cmlzb25GdW5jID0gRDNEMTFfQ09NUEFSSVNPTl9ORVZFUjsKKyAgICAgICAgc2FtcGxlckRlc2Mu
Qm9yZGVyQ29sb3JbMF0gPSAwLjBmOworICAgICAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclsx
XSA9IDAuMGY7CisgICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzJdID0gMC4wZjsKKyAg
ICAgICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbM10gPSAwLjBmOworICAgICAgICBzYW1wbGVy
RGVzYy5NaW5MT0QgPSAwLjBmOworICAgICAgICBzYW1wbGVyRGVzYy5NYXhMT0QgPSAwLjBmOwor
CisgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVNhbXBsZXJTdGF0ZSgmc2FtcGxlckRl
c2MsICZtQ29weVNhbXBsZXIpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwor
ICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5U2FtcGxlciwgIlJlbmRlcmVyMTEgY29w
eSBzYW1wbGVyIik7CisKKyAgICAgICAgRDNEMTFfSU5QVVRfRUxFTUVOVF9ERVNDIHF1YWRMYXlv
dXRbXSA9CisgICAgICAgIHsKKyAgICAgICAgICAgIHsgIlBPU0lUSU9OIiwgMCwgRFhHSV9GT1JN
QVRfUjMyRzMyX0ZMT0FULCAwLCAwLCBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAgfSwK
KyAgICAgICAgICAgIHsgIlRFWENPT1JEIiwgMCwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCAw
LCA4LCBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAgfSwKKyAgICAgICAgfTsKKworICAg
ICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVJbnB1dExheW91dChxdWFkTGF5b3V0LCAyLCBn
X1ZTX1Bhc3N0aHJvdWdoLCBzaXplb2YoZ19WU19QYXNzdGhyb3VnaCksICZtQ29weUlMKTsKKyAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgZDNkMTE6OlNldERlYnVn
TmFtZShtQ29weUlMLCAiUmVuZGVyZXIxMSBjb3B5IHRleHR1cmUgaW5wdXQgbGF5b3V0Iik7CisK
KyAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKGdfVlNfUGFzc3Ro
cm91Z2gsIHNpemVvZihnX1ZTX1Bhc3N0aHJvdWdoKSwgTlVMTCwgJm1Db3B5VlMpOworICAgICAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1l
KG1Db3B5VlMsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSB2ZXJ0ZXggc2hhZGVyIik7CisKKyAg
ICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19QYXNzdGhyb3Vn
aFJHQkEsIHNpemVvZihnX1BTX1Bhc3N0aHJvdWdoUkdCQSksIE5VTEwsICZtQ29weVJHQkFQUyk7
CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIGQzZDExOjpTZXRE
ZWJ1Z05hbWUobUNvcHlSR0JBUFMsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSBSR0JBIHBpeGVs
IHNoYWRlciIpOworCisgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVy
KGdfUFNfUGFzc3Rocm91Z2hSR0IsIHNpemVvZihnX1BTX1Bhc3N0aHJvdWdoUkdCKSwgTlVMTCwg
Jm1Db3B5UkdCUFMpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAg
ICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5UkdCUFMsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVy
ZSBSR0IgcGl4ZWwgc2hhZGVyIik7CisKKyAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRl
UGl4ZWxTaGFkZXIoZ19QU19QYXNzdGhyb3VnaEx1bSwgc2l6ZW9mKGdfUFNfUGFzc3Rocm91Z2hM
dW0pLCBOVUxMLCAmbUNvcHlMdW1QUyk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7CisgICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNvcHlMdW1QUywgIlJlbmRlcmVyMTEg
Y29weSB0ZXh0dXJlIGx1bWluYW5jZSBwaXhlbCBzaGFkZXIiKTsKKworICAgICAgICByZXN1bHQg
PSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihnX1BTX1Bhc3N0aHJvdWdoTHVtQWxwaGEsIHNp
emVvZihnX1BTX1Bhc3N0aHJvdWdoTHVtQWxwaGEpLCBOVUxMLCAmbUNvcHlMdW1BbHBoYVBTKTsK
KyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgZDNkMTE6OlNldERl
YnVnTmFtZShtQ29weUx1bUFscGhhUFMsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSBsdW1pbmFu
Y2UgYWxwaGEgcGl4ZWwgc2hhZGVyIik7CisKKyAgICAgICAgbUNvcHlSZXNvdXJjZXNJbml0aWFs
aXplZCA9IHRydWU7CisgICAgfQorCisgICAgLy8gVmVyaWZ5IHRoZSBzb3VyY2UgYW5kIGRlc3Rp
bmF0aW9uIGFyZWEgc2l6ZXMKKyAgICBpZiAoc291cmNlQXJlYS54IDwgMCB8fCBzb3VyY2VBcmVh
LnggKyBzb3VyY2VBcmVhLndpZHRoID4gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VXaWR0aCkgfHwK
KyAgICAgICAgc291cmNlQXJlYS55IDwgMCB8fCBzb3VyY2VBcmVhLnkgKyBzb3VyY2VBcmVhLmhl
aWdodCA+IHN0YXRpY19jYXN0PGludD4oc291cmNlSGVpZ2h0KSB8fAorICAgICAgICBkZXN0QXJl
YS54IDwgMCB8fCBkZXN0QXJlYS54ICsgZGVzdEFyZWEud2lkdGggPiBzdGF0aWNfY2FzdDxpbnQ+
KGRlc3RXaWR0aCkgfHwKKyAgICAgICAgZGVzdEFyZWEueSA8IDAgfHwgZGVzdEFyZWEueSArIGRl
c3RBcmVhLmhlaWdodCA+IHN0YXRpY19jYXN0PGludD4oZGVzdEhlaWdodCkpCisgICAgeworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUsIGZhbHNlKTsKKyAgICB9CisK
KyAgICAvLyBTZXQgdmVydGljZXMKKyAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVk
UmVzb3VyY2U7CisgICAgcmVzdWx0ID0gbURldmljZUNvbnRleHQtPk1hcChtQ29weVZCLCAwLCBE
M0QxMV9NQVBfV1JJVEVfRElTQ0FSRCwgMCwgJm1hcHBlZFJlc291cmNlKTsKKyAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byBtYXAgdmVydGV4IGJ1
ZmZlciBmb3IgdGV4dHVyZSBjb3B5LCBIUkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7CisgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgIH0KKworICAg
IGQzZDExOjpQb3NpdGlvblRleENvb3JkVmVydGV4ICp2ZXJ0aWNlcyA9IHN0YXRpY19jYXN0PGQz
ZDExOjpQb3NpdGlvblRleENvb3JkVmVydGV4Kj4obWFwcGVkUmVzb3VyY2UucERhdGEpOworCisg
ICAgLy8gQ3JlYXRlIGEgcXVhZCBpbiBob21vZ2VuZW91cyBjb29yZGluYXRlcworICAgIGZsb2F0
IHgxID0gKGRlc3RBcmVhLnggLyBmbG9hdChkZXN0V2lkdGgpKSAqIDIuMGYgLSAxLjBmOworICAg
IGZsb2F0IHkxID0gKChkZXN0SGVpZ2h0IC0gZGVzdEFyZWEueSAtIGRlc3RBcmVhLmhlaWdodCkg
LyBmbG9hdChkZXN0SGVpZ2h0KSkgKiAyLjBmIC0gMS4wZjsKKyAgICBmbG9hdCB4MiA9ICgoZGVz
dEFyZWEueCArIGRlc3RBcmVhLndpZHRoKSAvIGZsb2F0KGRlc3RXaWR0aCkpICogMi4wZiAtIDEu
MGY7CisgICAgZmxvYXQgeTIgPSAoKGRlc3RIZWlnaHQgLSBkZXN0QXJlYS55KSAvIGZsb2F0KGRl
c3RIZWlnaHQpKSAqIDIuMGYgLSAxLjBmOworCisgICAgZmxvYXQgdTEgPSBzb3VyY2VBcmVhLngg
LyBmbG9hdChzb3VyY2VXaWR0aCk7CisgICAgZmxvYXQgdjEgPSBzb3VyY2VBcmVhLnkgLyBmbG9h
dChzb3VyY2VIZWlnaHQpOworICAgIGZsb2F0IHUyID0gKHNvdXJjZUFyZWEueCArIHNvdXJjZUFy
ZWEud2lkdGgpIC8gZmxvYXQoc291cmNlV2lkdGgpOworICAgIGZsb2F0IHYyID0gKHNvdXJjZUFy
ZWEueSArIHNvdXJjZUFyZWEuaGVpZ2h0KSAvIGZsb2F0KHNvdXJjZUhlaWdodCk7CisKKyAgICBk
M2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNbMF0sIHgxLCB5MSwgdTEs
IHYyKTsKKyAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNbMV0s
IHgxLCB5MiwgdTEsIHYxKTsKKyAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgm
dmVydGljZXNbMl0sIHgyLCB5MSwgdTIsIHYyKTsKKyAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhD
b29yZFZlcnRleCgmdmVydGljZXNbM10sIHgyLCB5MiwgdTIsIHYxKTsKKworICAgIG1EZXZpY2VD
b250ZXh0LT5Vbm1hcChtQ29weVZCLCAwKTsKKworICAgIHN0YXRpYyBVSU5UIHN0cmlkZSA9IHNp
emVvZihkM2QxMTo6UG9zaXRpb25UZXhDb29yZFZlcnRleCk7CisgICAgc3RhdGljIFVJTlQgc3Rh
cnRJZHggPSAwOworICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldFZlcnRleEJ1ZmZlcnMoMCwgMSwg
Jm1Db3B5VkIsICZzdHJpZGUsICZzdGFydElkeCk7CisKKyAgICAvLyBBcHBseSBzdGF0ZQorICAg
IG1EZXZpY2VDb250ZXh0LT5PTVNldEJsZW5kU3RhdGUoTlVMTCwgTlVMTCwgMHhGRkZGRkZGKTsK
KyAgICBtRGV2aWNlQ29udGV4dC0+T01TZXREZXB0aFN0ZW5jaWxTdGF0ZShOVUxMLCAweEZGRkZG
RkZGKTsKKyAgICBtRGV2aWNlQ29udGV4dC0+UlNTZXRTdGF0ZShOVUxMKTsKKworICAgIC8vIEFw
cGx5IHNoYWRlcnMKKyAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRJbnB1dExheW91dChtQ29weUlM
KTsKKyAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRQcmltaXRpdmVUb3BvbG9neShEM0RfUFJJTUlU
SVZFX1RPUE9MT0dZX1RSSUFOR0xFU1RSSVApOworICAgIG1EZXZpY2VDb250ZXh0LT5WU1NldFNo
YWRlcihtQ29weVZTLCBOVUxMLCAwKTsKKworICAgIElEM0QxMVBpeGVsU2hhZGVyICpwcyA9IE5V
TEw7CisgICAgc3dpdGNoKGRlc3RGb3JtYXQpCisgICAgeworICAgICAgY2FzZSBHTF9SR0JBOiAg
ICAgICAgICAgIHBzID0gbUNvcHlSR0JBUFM7ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUkdC
OiAgICAgICAgICAgICBwcyA9IG1Db3B5UkdCUFM7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X0FMUEhBOiAgICAgICAgICAgcHMgPSBtQ29weVJHQkFQUzsgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9CR1JBX0VYVDogICAgICAgIHBzID0gbUNvcHlSR0JBUFM7ICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfTFVNSU5BTkNFOiAgICAgICBwcyA9IG1Db3B5THVtUFM7ICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTogcHMgPSBtQ29weUx1bUFscGhhUFM7IGJyZWFr
OworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgIHBzID0gTlVMTDsgICAgICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIocHMsIE5VTEws
IDApOworICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldFNoYWRlcihOVUxMLCBOVUxMLCAwKTsKKwor
ICAgIC8vIFVuc2V0IHRoZSBjdXJyZW50bHkgYm91bmQgc2hhZGVyIHJlc291cmNlIHRvIGF2b2lk
IGNvbmZsaWN0cworICAgIHN0YXRpYyBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmNvbnN0IG51
bGxTUlYgPSBOVUxMOworICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlclJlc291cmNlcygw
LCAxLCAmbnVsbFNSVik7CisKKyAgICAvLyBBcHBseSByZW5kZXIgdGFyZ2V0CisgICAgc2V0T25l
VGltZVJlbmRlclRhcmdldChkZXN0KTsKKworICAgIC8vIFNldCB0aGUgdmlld3BvcnQKKyAgICBE
M0QxMV9WSUVXUE9SVCB2aWV3cG9ydDsKKyAgICB2aWV3cG9ydC5Ub3BMZWZ0WCA9IDA7CisgICAg
dmlld3BvcnQuVG9wTGVmdFkgPSAwOworICAgIHZpZXdwb3J0LldpZHRoID0gZGVzdFdpZHRoOwor
ICAgIHZpZXdwb3J0LkhlaWdodCA9IGRlc3RIZWlnaHQ7CisgICAgdmlld3BvcnQuTWluRGVwdGgg
PSAwLjBmOworICAgIHZpZXdwb3J0Lk1heERlcHRoID0gMS4wZjsKKyAgICBtRGV2aWNlQ29udGV4
dC0+UlNTZXRWaWV3cG9ydHMoMSwgJnZpZXdwb3J0KTsKKworICAgIC8vIEFwcGx5IHRleHR1cmVz
CisgICAgbURldmljZUNvbnRleHQtPlBTU2V0U2hhZGVyUmVzb3VyY2VzKDAsIDEsICZzb3VyY2Up
OworICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNhbXBsZXJzKDAsIDEsICZtQ29weVNhbXBsZXIp
OworCisgICAgLy8gRHJhdyB0aGUgcXVhZAorICAgIG1EZXZpY2VDb250ZXh0LT5EcmF3KDQsIDAp
OworCisgICAgLy8gVW5iaW5kIHRleHR1cmVzIGFuZCByZW5kZXIgdGFyZ2V0cyBhbmQgdmVydGV4
IGJ1ZmZlcgorICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlclJlc291cmNlcygwLCAxLCAm
bnVsbFNSVik7CisKKyAgICB1bmFwcGx5UmVuZGVyVGFyZ2V0cygpOworCisgICAgVUlOVCB6ZXJv
ID0gMDsKKyAgICBJRDNEMTFCdWZmZXIgKmNvbnN0IG51bGxCdWZmZXIgPSBOVUxMOworICAgIG1E
ZXZpY2VDb250ZXh0LT5JQVNldFZlcnRleEJ1ZmZlcnMoMCwgMSwgJm51bGxCdWZmZXIsICZ6ZXJv
LCAmemVybyk7CisKKyAgICBtYXJrQWxsU3RhdGVEaXJ0eSgpOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6dW5hcHBseVJlbmRlclRhcmdldHMoKQoreworICAgIHNl
dE9uZVRpbWVSZW5kZXJUYXJnZXQoTlVMTCk7Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6c2V0T25l
VGltZVJlbmRlclRhcmdldChJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpyZW5kZXJUYXJnZXRWaWV3
KQoreworICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0dkFycmF5W2dsOjpJTVBMRU1FTlRB
VElPTl9NQVhfRFJBV19CVUZGRVJTXSA9IHtOVUxMfTsKKworICAgIHJ0dkFycmF5WzBdID0gcmVu
ZGVyVGFyZ2V0VmlldzsKKworICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldFJlbmRlclRhcmdldHMo
Z2V0TWF4UmVuZGVyVGFyZ2V0cygpLCBydHZBcnJheSwgTlVMTCk7CisKKyAgICAvLyBEbyBub3Qg
cHJlc2VydmUgdGhlIHNlcmlhbCBmb3IgdGhpcyBvbmUtdGltZS11c2UgcmVuZGVyIHRhcmdldAor
ICAgIGZvciAodW5zaWduZWQgaW50IHJ0SW5kZXggPSAwOyBydEluZGV4IDwgZ2w6OklNUExFTUVO
VEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IHJ0SW5kZXgrKykKKyAgICB7CisgICAgICAgIG1BcHBs
aWVkUmVuZGVyVGFyZ2V0U2VyaWFsc1tydEluZGV4XSA9IDA7CisgICAgfQorfQorCitSZW5kZXJU
YXJnZXQgKlJlbmRlcmVyMTE6OmNyZWF0ZVJlbmRlclRhcmdldChTd2FwQ2hhaW4gKnN3YXBDaGFp
biwgYm9vbCBkZXB0aCkKK3sKKyAgICBTd2FwQ2hhaW4xMSAqc3dhcENoYWluMTEgPSBTd2FwQ2hh
aW4xMTo6bWFrZVN3YXBDaGFpbjExKHN3YXBDaGFpbik7CisgICAgUmVuZGVyVGFyZ2V0MTEgKnJl
bmRlclRhcmdldCA9IE5VTEw7CisKKyAgICBpZiAoZGVwdGgpCisgICAgeworICAgICAgICAvLyBO
b3RlOiBkZXB0aCBzdGVuY2lsIG1heSBiZSBOVUxMIGZvciAwIHNpemVkIHN1cmZhY2VzCisgICAg
ICAgIHJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQxMSh0aGlzLCBzd2FwQ2hhaW4xMS0+
Z2V0RGVwdGhTdGVuY2lsKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzd2FwQ2hhaW4xMS0+Z2V0RGVwdGhTdGVuY2lsVGV4dHVyZSgpLCBOVUxMLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldFdpZHRo
KCksIHN3YXBDaGFpbjExLT5nZXRIZWlnaHQoKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIC8vIE5vdGU6IHJlbmRlciB0YXJnZXQgbWF5IGJlIE5VTEwgZm9yIDAgc2l6ZWQgc3Vy
ZmFjZXMKKyAgICAgICAgcmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldDExKHRoaXMsIHN3
YXBDaGFpbjExLT5nZXRSZW5kZXJUYXJnZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN3YXBDaGFpbjExLT5nZXRPZmZzY3JlZW5UZXh0dXJlKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwQ2hhaW4xMS0+Z2V0UmVu
ZGVyVGFyZ2V0U2hhZGVyUmVzb3VyY2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN3YXBDaGFpbjExLT5nZXRXaWR0aCgpLCBzd2FwQ2hhaW4xMS0+Z2V0SGVp
Z2h0KCkpOworICAgIH0KKyAgICByZXR1cm4gcmVuZGVyVGFyZ2V0OworfQorCitSZW5kZXJUYXJn
ZXQgKlJlbmRlcmVyMTE6OmNyZWF0ZVJlbmRlclRhcmdldChpbnQgd2lkdGgsIGludCBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcywgYm9vbCBkZXB0aCkKK3sKKyAgICBSZW5k
ZXJUYXJnZXQxMSAqcmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldDExKHRoaXMsIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgc2FtcGxlcywgZGVwdGgpOworICAgIHJldHVybiByZW5kZXJUYXJn
ZXQ7Cit9CisKK1NoYWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyMTE6OmxvYWRFeGVjdXRhYmxlKGNv
bnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCByeDo6U2hhZGVyVHlwZSB0eXBlKQor
eworICAgIFNoYWRlckV4ZWN1dGFibGUxMSAqZXhlY3V0YWJsZSA9IE5VTEw7CisKKyAgICBzd2l0
Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSByeDo6U0hBREVSX1ZFUlRFWDoKKyAgICAgICAg
eworICAgICAgICAgICAgSUQzRDExVmVydGV4U2hhZGVyICp2c2hhZGVyID0gTlVMTDsKKyAgICAg
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKGZ1bmN0
aW9uLCBsZW5ndGgsIE5VTEwsICZ2c2hhZGVyKTsKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7CisKKyAgICAgICAgICAgIGlmICh2c2hhZGVyKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBuZXcgU2hhZGVyRXhlY3V0YWJsZTExKGZ1bmN0
aW9uLCBsZW5ndGgsIHZzaGFkZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSByeDo6U0hBREVSX1BJWEVMOgorICAgICAgICB7CisgICAgICAg
ICAgICBJRDNEMTFQaXhlbFNoYWRlciAqcHNoYWRlciA9IE5VTEw7CisgICAgICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGZ1bmN0aW9uLCBsZW5ndGgs
IE5VTEwsICZwc2hhZGVyKTsKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7
CisKKyAgICAgICAgICAgIGlmIChwc2hhZGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGV4ZWN1dGFibGUgPSBuZXcgU2hhZGVyRXhlY3V0YWJsZTExKGZ1bmN0aW9uLCBsZW5ndGgs
IHBzaGFkZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSByeDo6U0hBREVSX0dFT01FVFJZOgorICAgICAgICB7CisgICAgICAgICAgICBJRDNE
MTFHZW9tZXRyeVNoYWRlciAqZ3NoYWRlciA9IE5VTEw7CisgICAgICAgICAgICBIUkVTVUxUIHJl
c3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUdlb21ldHJ5U2hhZGVyKGZ1bmN0aW9uLCBsZW5ndGgsIE5V
TEwsICZnc2hhZGVyKTsKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisK
KyAgICAgICAgICAgIGlmIChnc2hhZGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGV4ZWN1dGFibGUgPSBuZXcgU2hhZGVyRXhlY3V0YWJsZTExKGZ1bmN0aW9uLCBsZW5ndGgsIGdz
aGFkZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgcmV0dXJuIGV4ZWN1dGFibGU7Cit9CisKK1NoYWRlckV4ZWN1dGFibGUgKlJlbmRlcmVy
MTE6OmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIg
KnNoYWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsIEQzRFdvcmthcm91bmRUeXBlIHdvcmth
cm91bmQpCit7CisgICAgY29uc3QgY2hhciAqcHJvZmlsZSA9IE5VTEw7CisKKyAgICBzd2l0Y2gg
KHR5cGUpCisgICAgeworICAgICAgY2FzZSByeDo6U0hBREVSX1ZFUlRFWDoKKyAgICAgICAgcHJv
ZmlsZSA9ICJ2c180XzAiOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ugcng6OlNIQURFUl9Q
SVhFTDoKKyAgICAgICAgcHJvZmlsZSA9ICJwc180XzAiOworICAgICAgICBicmVhazsKKyAgICAg
IGNhc2Ugcng6OlNIQURFUl9HRU9NRVRSWToKKyAgICAgICAgcHJvZmlsZSA9ICJnc180XzAiOwor
ICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIElEM0RCbG9iICpiaW5hcnkgPSAoSUQz
REJsb2IqKWNvbXBpbGVUb0JpbmFyeShpbmZvTG9nLCBzaGFkZXJITFNMLCBwcm9maWxlLCBEM0RD
T01QSUxFX09QVElNSVpBVElPTl9MRVZFTDAsIGZhbHNlKTsKKyAgICBpZiAoIWJpbmFyeSkKKyAg
ICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBTaGFkZXJFeGVjdXRhYmxlICpleGVjdXRhYmxlID0g
bG9hZEV4ZWN1dGFibGUoKERXT1JEICopYmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksIGJpbmFy
eS0+R2V0QnVmZmVyU2l6ZSgpLCB0eXBlKTsKKyAgICBiaW5hcnktPlJlbGVhc2UoKTsKKworICAg
IHJldHVybiBleGVjdXRhYmxlOworfQorCitWZXJ0ZXhCdWZmZXIgKlJlbmRlcmVyMTE6OmNyZWF0
ZVZlcnRleEJ1ZmZlcigpCit7CisgICAgcmV0dXJuIG5ldyBWZXJ0ZXhCdWZmZXIxMSh0aGlzKTsK
K30KKworSW5kZXhCdWZmZXIgKlJlbmRlcmVyMTE6OmNyZWF0ZUluZGV4QnVmZmVyKCkKK3sKKyAg
ICByZXR1cm4gbmV3IEluZGV4QnVmZmVyMTEodGhpcyk7Cit9CisKK0J1ZmZlclN0b3JhZ2UgKlJl
bmRlcmVyMTE6OmNyZWF0ZUJ1ZmZlclN0b3JhZ2UoKQoreworICAgIHJldHVybiBuZXcgQnVmZmVy
U3RvcmFnZTExKHRoaXMpOworfQorCitRdWVyeUltcGwgKlJlbmRlcmVyMTE6OmNyZWF0ZVF1ZXJ5
KEdMZW51bSB0eXBlKQoreworICAgIHJldHVybiBuZXcgUXVlcnkxMSh0aGlzLCB0eXBlKTsKK30K
KworRmVuY2VJbXBsICpSZW5kZXJlcjExOjpjcmVhdGVGZW5jZSgpCit7CisgICAgcmV0dXJuIG5l
dyBGZW5jZTExKHRoaXMpOworfQorCitib29sIFJlbmRlcmVyMTE6OmdldFJlbmRlclRhcmdldFJl
c291cmNlKGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyLCB1bnNpZ25lZCBpbnQgKnN1YnJl
c291cmNlSW5kZXgsIElEM0QxMVRleHR1cmUyRCAqKnJlc291cmNlKQoreworICAgIEFTU0VSVChj
b2xvcmJ1ZmZlciAhPSBOVUxMKTsKKworICAgIFJlbmRlclRhcmdldDExICpyZW5kZXJUYXJnZXQg
PSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGNvbG9yYnVmZmVyLT5nZXRSZW5k
ZXJUYXJnZXQoKSk7CisgICAgaWYgKHJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgICpzdWJy
ZXNvdXJjZUluZGV4ID0gcmVuZGVyVGFyZ2V0LT5nZXRTdWJyZXNvdXJjZUluZGV4KCk7CisKKyAg
ICAgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqY29sb3JCdWZmZXJSVFYgPSByZW5kZXJUYXJn
ZXQtPmdldFJlbmRlclRhcmdldFZpZXcoKTsKKyAgICAgICAgaWYgKGNvbG9yQnVmZmVyUlRWKQor
ICAgICAgICB7CisgICAgICAgICAgICBJRDNEMTFSZXNvdXJjZSAqdGV4dHVyZVJlc291cmNlID0g
TlVMTDsKKyAgICAgICAgICAgIGNvbG9yQnVmZmVyUlRWLT5HZXRSZXNvdXJjZSgmdGV4dHVyZVJl
c291cmNlKTsKKworICAgICAgICAgICAgaWYgKHRleHR1cmVSZXNvdXJjZSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IHRleHR1cmVSZXNvdXJjZS0+UXVl
cnlJbnRlcmZhY2UoSUlEX0lEM0QxMVRleHR1cmUyRCwgKHZvaWQqKilyZXNvdXJjZSk7CisgICAg
ICAgICAgICAgICAgdGV4dHVyZVJlc291cmNlLT5SZWxlYXNlKCk7CisKKyAgICAgICAgICAgICAg
ICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRVJSKCJGYWlsZWQg
dG8gZXh0cmFjdCB0aGUgSUQzRDExVGV4dHVyZTJEIGZyb20gdGhlIHJlbmRlciB0YXJnZXQgcmVz
b3VyY2UsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJIUkVTVUxUOiAweCVYLiIsIHJlc3Vs
dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlcmVyMTE6OmJsaXRSZWN0KGdsOjpG
cmFtZWJ1ZmZlciAqcmVhZFRhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGds
OjpGcmFtZWJ1ZmZlciAqZHJhd1RhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1JlY3Qs
CisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBi
bGl0RGVwdGhTdGVuY2lsKQoreworICAgIGlmIChibGl0UmVuZGVyVGFyZ2V0KQorICAgIHsKKyAg
ICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVhZEJ1ZmZlciA9IHJlYWRUYXJnZXQtPmdldFJlYWRD
b2xvcmJ1ZmZlcigpOworCisgICAgICAgIGlmICghcmVhZEJ1ZmZlcikKKyAgICAgICAgeworICAg
ICAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlYWQgYnVmZmVyIGZyb20gdGhl
IHJlYWQgZnJhbWVidWZmZXIuIik7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlbmRlclRhcmdldCAq
cmVhZFJlbmRlclRhcmdldCA9IHJlYWRCdWZmZXItPmdldFJlbmRlclRhcmdldCgpOworCisgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNobWVu
dCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQr
KykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGRyYXdUYXJnZXQtPmlzRW5hYmxlZENvbG9y
QXR0YWNobWVudChjb2xvckF0dGFjaG1lbnQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGdsOjpSZW5kZXJidWZmZXIgKmRyYXdCdWZmZXIgPSBkcmF3VGFyZ2V0LT5nZXRDb2xvcmJ1
ZmZlcihjb2xvckF0dGFjaG1lbnQpOworCisgICAgICAgICAgICAgICAgaWYgKCFkcmF3QnVmZmVy
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8g
cmV0cmlldmUgdGhlIGRyYXcgYnVmZmVyIGZyb20gdGhlIGRyYXcgZnJhbWVidWZmZXIuIik7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFs
c2UpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIFJlbmRlclRhcmdldCAq
ZHJhd1JlbmRlclRhcmdldCA9IGRyYXdCdWZmZXItPmdldFJlbmRlclRhcmdldCgpOworCisgICAg
ICAgICAgICAgICAgaWYgKCFibGl0UmVuZGVyYnVmZmVyUmVjdChyZWFkUmVjdCwgZHJhd1JlY3Qs
IHJlYWRSZW5kZXJUYXJnZXQsIGRyYXdSZW5kZXJUYXJnZXQsIGZhbHNlKSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYmxpdERlcHRo
U3RlbmNpbCkKKyAgICB7CisgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlYWRCdWZmZXIgPSBy
ZWFkVGFyZ2V0LT5nZXREZXB0aE9yU3RlbmNpbGJ1ZmZlcigpOworICAgICAgICBnbDo6UmVuZGVy
YnVmZmVyICpkcmF3QnVmZmVyID0gZHJhd1RhcmdldC0+Z2V0RGVwdGhPclN0ZW5jaWxidWZmZXIo
KTsKKworICAgICAgICBpZiAoIXJlYWRCdWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVS
UigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZWFkIGRlcHRoLXN0ZW5jaWwgYnVmZmVyIGZyb20g
dGhlIHJlYWQgZnJhbWVidWZmZXIuIik7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghZHJhd0J1
ZmZlcikKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhl
IGRyYXcgZGVwdGgtc3RlbmNpbCBidWZmZXIgZnJvbSB0aGUgZHJhdyBmcmFtZWJ1ZmZlci4iKTsK
KyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwor
ICAgICAgICB9CisKKyAgICAgICAgUmVuZGVyVGFyZ2V0ICpyZWFkUmVuZGVyVGFyZ2V0ID0gcmVh
ZEJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7CisgICAgICAgIFJlbmRlclRhcmdldCAqZHJhd1Jl
bmRlclRhcmdldCA9IGRyYXdCdWZmZXItPmdldERlcHRoU3RlbmNpbCgpOworCisgICAgICAgIGlm
ICghYmxpdFJlbmRlcmJ1ZmZlclJlY3QocmVhZFJlY3QsIGRyYXdSZWN0LCByZWFkUmVuZGVyVGFy
Z2V0LCBkcmF3UmVuZGVyVGFyZ2V0LCB0cnVlKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgUmVuZGVyZXIxMTo6cmVhZFBpeGVscyhnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBv
dXRwdXRQaXRjaCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLCBHTGludCBwYWNrQWxpZ25tZW50
LCB2b2lkKiBwaXhlbHMpCit7CisgICAgSUQzRDExVGV4dHVyZTJEICpjb2xvckJ1ZmZlclRleHR1
cmUgPSBOVUxMOworICAgIHVuc2lnbmVkIGludCBzdWJyZXNvdXJjZUluZGV4ID0gMDsKKworICAg
IGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gZnJhbWVidWZmZXItPmdldFJlYWRDb2xv
cmJ1ZmZlcigpOworCisgICAgaWYgKGNvbG9yYnVmZmVyICYmIGdldFJlbmRlclRhcmdldFJlc291
cmNlKGNvbG9yYnVmZmVyLCAmc3VicmVzb3VyY2VJbmRleCwgJmNvbG9yQnVmZmVyVGV4dHVyZSkp
CisgICAgeworICAgICAgICBnbDo6UmVjdGFuZ2xlIGFyZWE7CisgICAgICAgIGFyZWEueCA9IHg7
CisgICAgICAgIGFyZWEueSA9IHk7CisgICAgICAgIGFyZWEud2lkdGggPSB3aWR0aDsKKyAgICAg
ICAgYXJlYS5oZWlnaHQgPSBoZWlnaHQ7CisKKyAgICAgICAgcmVhZFRleHR1cmVEYXRhKGNvbG9y
QnVmZmVyVGV4dHVyZSwgc3VicmVzb3VyY2VJbmRleCwgYXJlYSwgY29sb3JidWZmZXItPmdldEFj
dHVhbEZvcm1hdCgpLCBmb3JtYXQsIHR5cGUsIG91dHB1dFBpdGNoLAorICAgICAgICAgICAgICAg
ICAgICAgICAgcGFja1JldmVyc2VSb3dPcmRlciwgcGFja0FsaWdubWVudCwgcGl4ZWxzKTsKKwor
ICAgICAgICBjb2xvckJ1ZmZlclRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgY29sb3JCdWZm
ZXJUZXh0dXJlID0gTlVMTDsKKyAgICB9Cit9CisKK0ltYWdlICpSZW5kZXJlcjExOjpjcmVhdGVJ
bWFnZSgpCit7CisgICAgcmV0dXJuIG5ldyBJbWFnZTExKCk7Cit9CisKK3ZvaWQgUmVuZGVyZXIx
MTo6Z2VuZXJhdGVNaXBtYXAoSW1hZ2UgKmRlc3QsIEltYWdlICpzcmMpCit7CisgICAgSW1hZ2Ux
MSAqZGVzdDExID0gSW1hZ2UxMTo6bWFrZUltYWdlMTEoZGVzdCk7CisgICAgSW1hZ2UxMSAqc3Jj
MTEgPSBJbWFnZTExOjptYWtlSW1hZ2UxMShzcmMpOworICAgIEltYWdlMTE6OmdlbmVyYXRlTWlw
bWFwKGRlc3QxMSwgc3JjMTEpOworfQorCitUZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXIxMTo6Y3Jl
YXRlVGV4dHVyZVN0b3JhZ2UyRChTd2FwQ2hhaW4gKnN3YXBDaGFpbikKK3sKKyAgICBTd2FwQ2hh
aW4xMSAqc3dhcENoYWluMTEgPSBTd2FwQ2hhaW4xMTo6bWFrZVN3YXBDaGFpbjExKHN3YXBDaGFp
bik7CisgICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTExXzJEKHRoaXMsIHN3YXBDaGFpbjEx
KTsKK30KKworVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyMTE6OmNyZWF0ZVRleHR1cmVTdG9yYWdl
MkQoaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wg
Zm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBy
ZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlMTFfMkQodGhpcywgbGV2ZWxzLCBpbnRlcm5hbGZvcm1h
dCwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK1RleHR1cmVT
dG9yYWdlICpSZW5kZXJlcjExOjpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUoaW50IGxldmVscywg
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxl
LCBpbnQgc2l6ZSkKK3sKKyAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlMTFfQ3ViZSh0aGlz
LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlLCBzaXplKTsK
K30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0RmFzdFBpeGVsQ29weVNpemUoRFhH
SV9GT1JNQVQgc291cmNlRm9ybWF0LCBHTGVudW0gc291cmNlR0xGb3JtYXQsIEdMZW51bSBkZXN0
Rm9ybWF0LCBHTGVudW0gZGVzdFR5cGUpCit7CisgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBEWEdJ
X0ZPUk1BVF9BOF9VTk9STSAmJgorICAgICAgICBkZXN0Rm9ybWF0ICAgPT0gR0xfQUxQSEEgJiYK
KyAgICAgICAgZGVzdFR5cGUgICAgID09IEdMX1VOU0lHTkVEX0JZVEUpCisgICAgeworICAgICAg
ICByZXR1cm4gMTsKKyAgICB9CisgICAgZWxzZSBpZiAoc291cmNlRm9ybWF0ICAgPT0gRFhHSV9G
T1JNQVRfUjhHOEI4QThfVU5PUk0gJiYKKyAgICAgICAgICAgICBzb3VyY2VHTEZvcm1hdCA9PSBH
TF9SR0JBOF9PRVMgJiYKKyAgICAgICAgICAgICBkZXN0Rm9ybWF0ICAgICA9PSBHTF9SR0JBICYm
CisgICAgICAgICAgICAgZGVzdFR5cGUgICAgICAgPT0gR0xfVU5TSUdORURfQllURSkKKyAgICB7
CisgICAgICAgIHJldHVybiA0OworICAgIH0KKyAgICBlbHNlIGlmIChzb3VyY2VGb3JtYXQgPT0g
RFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk0gJiYKKyAgICAgICAgICAgICBkZXN0Rm9ybWF0ICAg
PT0gR0xfQkdSQV9FWFQgJiYKKyAgICAgICAgICAgICBkZXN0VHlwZSAgICAgPT0gR0xfVU5TSUdO
RURfQllURSkKKyAgICB7CisgICAgICAgIHJldHVybiA0OworICAgIH0KKyAgICBlbHNlIGlmIChz
b3VyY2VGb3JtYXQgICA9PSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQgJiYKKyAgICAg
ICAgICAgICBzb3VyY2VHTEZvcm1hdCA9PSBHTF9SR0JBMTZGX0VYVCAmJgorICAgICAgICAgICAg
IGRlc3RGb3JtYXQgICAgID09IEdMX1JHQkEgJiYKKyAgICAgICAgICAgICBkZXN0VHlwZSAgICAg
ICA9PSBHTF9IQUxGX0ZMT0FUX09FUykKKyAgICB7CisgICAgICAgIHJldHVybiA4OworICAgIH0K
KyAgICBlbHNlIGlmIChzb3VyY2VGb3JtYXQgPT0gRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FU
ICYmCisgICAgICAgICAgICAgZGVzdEZvcm1hdCAgID09IEdMX1JHQiAmJgorICAgICAgICAgICAg
IGRlc3RUeXBlICAgICA9PSBHTF9GTE9BVCkKKyAgICB7CisgICAgICAgIHJldHVybiAxMjsKKyAg
ICB9CisgICAgZWxzZSBpZiAoc291cmNlRm9ybWF0ICAgPT0gRFhHSV9GT1JNQVRfUjMyRzMyQjMy
QTMyX0ZMT0FUICYmCisgICAgICAgICAgICAgc291cmNlR0xGb3JtYXQgPT0gR0xfUkdCQTMyRl9F
WFQgJiYKKyAgICAgICAgICAgICBkZXN0Rm9ybWF0ICAgICA9PSBHTF9SR0JBICYmCisgICAgICAg
ICAgICAgZGVzdFR5cGUgICAgICAgPT0gR0xfRkxPQVQpCisgICAgeworICAgICAgICByZXR1cm4g
MTY7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30K
Kworc3RhdGljIGlubGluZSB2b2lkIHJlYWRQaXhlbENvbG9yKGNvbnN0IHVuc2lnbmVkIGNoYXIg
KmRhdGEsIERYR0lfRk9STUFUIGZvcm1hdCwgR0xlbnVtIGdsRm9ybWF0LCB1bnNpZ25lZCBpbnQg
eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgeSwgaW50
IGlucHV0UGl0Y2gsIGdsOjpDb2xvciAqb3V0Q29sb3IpCit7CisgICAgc3dpdGNoIChmb3JtYXQp
CisgICAgeworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STToKKyAgICAgICAg
eworICAgICAgICAgICAgdW5zaWduZWQgaW50IHJnYmEgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1bnNpZ25lZCBpbnQqPihkYXRhICsgNCAqIHggKyB5ICogaW5wdXRQaXRjaCk7CisgICAgICAg
ICAgICBvdXRDb2xvci0+cmVkID0gICAocmdiYSAmIDB4MDAwMDAwRkYpICogKDEuMGYgLyAweDAw
MDAwMEZGKTsKKyAgICAgICAgICAgIG91dENvbG9yLT5ncmVlbiA9IChyZ2JhICYgMHgwMDAwRkYw
MCkgKiAoMS4wZiAvIDB4MDAwMEZGMDApOworICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAg
KHJnYmEgJiAweDAwRkYwMDAwKSAqICgxLjBmIC8gMHgwMEZGMDAwMCk7CisKKyAgICAgICAgICAg
IGlmIChnbDo6R2V0QWxwaGFTaXplKGdsRm9ybWF0KSA+IDApCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gKHJnYmEgJiAweEZGMDAwMDAwKSAqICgxLjBm
IC8gMHhGRjAwMDAwMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gMS4wZjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9BOF9VTk9STToKKyAgICAgICAgeworICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAgMC4w
ZjsKKyAgICAgICAgICAgIG91dENvbG9yLT5ncmVlbiA9IDAuMGY7CisgICAgICAgICAgICBvdXRD
b2xvci0+Ymx1ZSA9ICAwLjBmOworICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gKihkYXRh
ICsgeCArIHkgKiBpbnB1dFBpdGNoKSAvIDI1NS4wZjsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQ6CisgICAgICAg
IHsKKyAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgICoocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBmbG9hdCo+KGRhdGEgKyAxNiAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAwKTsKKyAgICAgICAg
ICAgIG91dENvbG9yLT5ncmVlbiA9ICoocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KGRh
dGEgKyAxNiAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAxKTsKKyAgICAgICAgICAgIG91dENvbG9y
LT5ibHVlID0gICoocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KGRhdGEgKyAxNiAqIHgg
KyB5ICogaW5wdXRQaXRjaCkgKyAyKTsKKworICAgICAgICAgICAgaWYgKGdsOjpHZXRBbHBoYVNp
emUoZ2xGb3JtYXQpID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRDb2xv
ci0+YWxwaGEgPSAqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhICsgMTYgKiB4
ICsgeSAqIGlucHV0UGl0Y2gpICsgMyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gMS4wZjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIG91dENv
bG9yLT5yZWQgPSAgICoocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KGRhdGEgKyAxMiAq
IHggKyB5ICogaW5wdXRQaXRjaCkgKyAwKTsKKyAgICAgICAgICAgIG91dENvbG9yLT5ncmVlbiA9
ICoocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KGRhdGEgKyAxMiAqIHggKyB5ICogaW5w
dXRQaXRjaCkgKyAxKTsKKyAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gICoocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBmbG9hdCo+KGRhdGEgKyAxMiAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAy
KTsKKyAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IDEuMGY7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X0ZMT0FUOgor
ICAgICAgICB7CisgICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICBnbDo6ZmxvYXQxNlRvRmxv
YXQzMigqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgOCAq
IHggKyB5ICogaW5wdXRQaXRjaCkgKyAwKSk7CisgICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4g
PSBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQg
c2hvcnQqPihkYXRhICsgOCAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAxKSk7CisgICAgICAgICAg
ICBvdXRDb2xvci0+Ymx1ZSA9ICBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgOCAqIHggKyB5ICogaW5wdXRQaXRjaCkg
KyAyKSk7CisKKyAgICAgICAgICAgIGlmIChnbDo6R2V0QWxwaGFTaXplKGdsRm9ybWF0KSA+IDAp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gZ2w6OmZs
b2F0MTZUb0Zsb2F0MzIoKihyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4o
ZGF0YSArIDggKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMykpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dENvbG9yLT5h
bHBoYSA9IDEuMGY7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisK
KyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06CisgICAgICAgIHsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBiZ3JhID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgaW50Kj4oZGF0YSArIDQgKiB4ICsgeSAqIGlucHV0UGl0Y2gpOworICAgICAgICAgICAgb3V0
Q29sb3ItPnJlZCA9ICAgKGJncmEgJiAweDAwRkYwMDAwKSAqICgxLjBmIC8gMHgwMEZGMDAwMCk7
CisgICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAoYmdyYSAmIDB4MDAwMDAwRkYpICogKDEu
MGYgLyAweDAwMDAwMEZGKTsKKyAgICAgICAgICAgIG91dENvbG9yLT5ncmVlbiA9IChiZ3JhICYg
MHgwMDAwRkYwMCkgKiAoMS4wZiAvIDB4MDAwMEZGMDApOworICAgICAgICAgICAgb3V0Q29sb3It
PmFscGhhID0gKGJncmEgJiAweEZGMDAwMDAwKSAqICgxLjBmIC8gMHhGRjAwMDAwMCk7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVU5PUk06
CisgICAgICAgIHsKKyAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgICooZGF0YSArIHggKyB5
ICogaW5wdXRQaXRjaCkgLyAyNTUuMGY7CisgICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAw
LjBmOworICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAgMC4wZjsKKyAgICAgICAgICAgIG91
dENvbG9yLT5hbHBoYSA9IDEuMGY7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9VTk9STToKKyAgICAgICAgeworICAgICAgICAgICAgdW5z
aWduZWQgc2hvcnQgcmcgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+
KGRhdGEgKyAyICogeCArIHkgKiBpbnB1dFBpdGNoKTsKKworICAgICAgICAgICAgb3V0Q29sb3It
PnJlZCA9ICAgKHJnICYgMHhGRjAwKSAqICgxLjBmIC8gMHhGRjAwKTsKKyAgICAgICAgICAgIG91
dENvbG9yLT5ncmVlbiA9IChyZyAmIDB4MDBGRikgKiAoMS4wZiAvIDB4MDBGRik7CisgICAgICAg
ICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAwLjBmOworICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhh
ID0gMS4wZjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SMTZfRkxPQVQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAg
IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNo
b3J0Kj4oZGF0YSArIDIgKiB4ICsgeSAqIGlucHV0UGl0Y2gpKTsKKyAgICAgICAgICAgIG91dENv
bG9yLT5ncmVlbiA9IDAuMGY7CisgICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAwLjBmOwor
ICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gMS4wZjsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfRkxPQVQ6CisgICAgICAgIHsK
KyAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgIGdsOjpmbG9hdDE2VG9GbG9hdDMyKCoocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyA0ICogeCArIHkgKiBp
bnB1dFBpdGNoKSArIDApKTsKKyAgICAgICAgICAgIG91dENvbG9yLT5ncmVlbiA9IGdsOjpmbG9h
dDE2VG9GbG9hdDMyKCoocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRh
dGEgKyA0ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDEpKTsKKyAgICAgICAgICAgIG91dENvbG9y
LT5ibHVlID0gIDAuMGY7CisgICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBFUlIoIlJl
YWRQaXhlbENvbG9yIG5vdCBpbXBsZW1lbnRlZCBmb3IgRFhHSSBmb3JtYXQgJXUuIiwgZm9ybWF0
KTsKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisK
K3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZVBpeGVsQ29sb3IoY29uc3QgZ2w6OkNvbG9yICZjb2xv
ciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCB4LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgeSwgaW50IG91dHB1dFBpdGNo
LCB2b2lkICpvdXREYXRhKQoreworICAgIHVuc2lnbmVkIGNoYXIqIGJ5dGVEYXRhID0gcmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0RGF0YSk7CisgICAgdW5zaWduZWQgc2hvcnQq
IHNob3J0RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihvdXREYXRhKTsK
KworICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgR0xfUkdCQToKKyAgICAg
ICAgc3dpdGNoICh0eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9C
WVRFOgorICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAwXSA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLnJlZCAgICsgMC41Zik7Cisg
ICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDFdID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuZ3JlZW4gKyAwLjVmKTsKKyAgICAgICAg
ICAgIGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMl0gPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5ibHVlICArIDAuNWYpOworICAgICAgICAgICAgYnl0
ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAzXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KDI1NSAqIGNvbG9yLmFscGhhICsgMC41Zik7CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBFUlIoIldyaXRlUGl4ZWxDb2xvciBub3Qg
aW1wbGVtZW50ZWQgZm9yIGZvcm1hdCBHTF9SR0JBIGFuZCB0eXBlIDB4JVguIiwgdHlwZSk7Cisg
ICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKKyAgICAgICAgc3dp
dGNoICh0eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgor
ICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAwXSA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLmJsdWUgICsgMC41Zik7CisgICAgICAg
ICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDFdID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuZ3JlZW4gKyAwLjVmKTsKKyAgICAgICAgICAgIGJ5
dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMl0gPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyPigyNTUgKiBjb2xvci5yZWQgICArIDAuNWYpOworICAgICAgICAgICAgYnl0ZURhdGFb
NCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAzXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+
KDI1NSAqIGNvbG9yLmFscGhhICsgMC41Zik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhUOgorICAgICAgICAgICAg
Ly8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhlICJUcmFuc2ZlciBvZiBQ
aXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCisgICAgICAgICAgICAvLyB0aGlzIHR5cGUgaXMgcGFj
a2VkIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAgIDEyICAgMTEg
ICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAgMSAgICAwCisg
ICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgIC8vIHwg
ICAgICAgNHRoICAgICAgICAgfCAgICAgICAgM3JkICAgICAgICAgfCAgICAgICAgMm5kICAgICAg
ICB8ICAgMXN0IGNvbXBvbmVudCAgIHwKKyAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgQkdSQV9FWFQsIEIgaXMgdGhl
IGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28gZm9ydGguCisgICAgICAgICAg
ICBzaG9ydERhdGFbeCArIHkgKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCld
ID0KKyAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDE1ICogY29s
b3IuYWxwaGEgKyAwLjVmKSA8PCAxMikgfAorICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1
bnNpZ25lZCBzaG9ydD4oMTUgKiBjb2xvci5yZWQgICArIDAuNWYpIDw8ICA4KSB8CisgICAgICAg
ICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigxNSAqIGNvbG9yLmdyZWVuICsg
MC41ZikgPDwgIDQpIHwKKyAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hv
cnQ+KDE1ICogY29sb3IuYmx1ZSAgKyAwLjVmKSA8PCAgMCk7CisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUOgorICAg
ICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhlICJUcmFu
c2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCisgICAgICAgICAgICAvLyB0aGlzIHR5
cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAg
IDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAg
MSAgICAwCisgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAg
ICAgIC8vIHwgNHRoIHwgICAgICAgICAgM3JkICAgICAgICAgICB8ICAgICAgICAgICAybmQgICAg
ICAgICAgfCAgICAgIDFzdCBjb21wb25lbnQgICAgIHwKKyAgICAgICAgICAgIC8vICAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgQkdSQV9FWFQs
IEIgaXMgdGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28gZm9ydGguCisg
ICAgICAgICAgICBzaG9ydERhdGFbeCArIHkgKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25l
ZCBzaG9ydCldID0KKyAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+
KCAgICAgY29sb3IuYWxwaGEgKyAwLjVmKSA8PCAxNSkgfAorICAgICAgICAgICAgICAgIChzdGF0
aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMzEgKiBjb2xvci5yZWQgICArIDAuNWYpIDw8IDEwKSB8
CisgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigzMSAqIGNvbG9y
LmdyZWVuICsgMC41ZikgPDwgIDUpIHwKKyAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5z
aWduZWQgc2hvcnQ+KDMxICogY29sb3IuYmx1ZSAgKyAwLjVmKSA8PCAgMCk7CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBFUlIoIldyaXRlUGl4
ZWxDb2xvciBub3QgaW1wbGVtZW50ZWQgZm9yIGZvcm1hdCBHTF9CR1JBX0VYVCBhbmQgdHlwZSAw
eCVYLiIsIHR5cGUpOworICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgR0xfUkdCOgor
ICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX1NIT1JUXzVfNl81OgorICAgICAgICAgICAgc2hvcnREYXRhW3ggKyB5ICogb3V0cHV0UGl0
Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9CisgICAgICAgICAgICAgICAgKHN0YXRpY19j
YXN0PHVuc2lnbmVkIHNob3J0PigzMSAqIGNvbG9yLmJsdWUgICsgMC41ZikgPDwgIDApIHwKKyAg
ICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDYzICogY29sb3IuZ3Jl
ZW4gKyAwLjVmKSA8PCAgNSkgfAorICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBzaG9ydD4oMzEgKiBjb2xvci5yZWQgICArIDAuNWYpIDw8IDExKTsKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICAgICAgYnl0
ZURhdGFbMyAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAwXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KDI1NSAqIGNvbG9yLnJlZCArICAgMC41Zik7CisgICAgICAgICAgICBieXRlRGF0YVsz
ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDFdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4o
MjU1ICogY29sb3IuZ3JlZW4gKyAwLjVmKTsKKyAgICAgICAgICAgIGJ5dGVEYXRhWzMgKiB4ICsg
eSAqIG91dHB1dFBpdGNoICsgMl0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBj
b2xvci5ibHVlICsgIDAuNWYpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgRVJSKCJXcml0ZVBpeGVsQ29sb3Igbm90IGltcGxlbWVudGVkIGZv
ciBmb3JtYXQgR0xfUkdCIGFuZCB0eXBlIDB4JVguIiwgdHlwZSk7CisgICAgICAgICAgICBVTklN
UExFTUVOVEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgRVJSKCJXcml0ZVBpeGVsQ29sb3Igbm90IGlt
cGxlbWVudGVkIGZvciBmb3JtYXQgMHglWC4iLCBmb3JtYXQpOworICAgICAgICBVTklNUExFTUVO
VEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBSZW5kZXJlcjExOjpyZWFk
VGV4dHVyZURhdGEoSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCB1bnNpZ25lZCBpbnQgc3ViUmVz
b3VyY2UsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmFyZWEsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTGVudW0gc291cmNlRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwgR0xzaXplaSBvdXRwdXRQaXRjaCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgcGFja0FsaWdubWVudCwgdm9pZCAqcGl4
ZWxzKQoreworICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleHR1cmVEZXNjOworICAgIHRleHR1
cmUtPkdldERlc2MoJnRleHR1cmVEZXNjKTsKKworICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHN0
YWdpbmdEZXNjOworICAgIHN0YWdpbmdEZXNjLldpZHRoID0gYXJlYS53aWR0aDsKKyAgICBzdGFn
aW5nRGVzYy5IZWlnaHQgPSBhcmVhLmhlaWdodDsKKyAgICBzdGFnaW5nRGVzYy5NaXBMZXZlbHMg
PSAxOworICAgIHN0YWdpbmdEZXNjLkFycmF5U2l6ZSA9IDE7CisgICAgc3RhZ2luZ0Rlc2MuRm9y
bWF0ID0gdGV4dHVyZURlc2MuRm9ybWF0OworICAgIHN0YWdpbmdEZXNjLlNhbXBsZURlc2MuQ291
bnQgPSAxOworICAgIHN0YWdpbmdEZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7CisgICAgc3Rh
Z2luZ0Rlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9TVEFHSU5HOworICAgIHN0YWdpbmdEZXNjLkJp
bmRGbGFncyA9IDA7CisgICAgc3RhZ2luZ0Rlc2MuQ1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9DUFVf
QUNDRVNTX1JFQUQ7CisgICAgc3RhZ2luZ0Rlc2MuTWlzY0ZsYWdzID0gMDsKKworICAgIElEM0Qx
MVRleHR1cmUyRCogc3RhZ2luZ1RleCA9IE5VTEw7CisgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2
aWNlLT5DcmVhdGVUZXh0dXJlMkQoJnN0YWdpbmdEZXNjLCBOVUxMLCAmc3RhZ2luZ1RleCk7Cisg
ICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gY3Jl
YXRlIHN0YWdpbmcgdGV4dHVyZSBmb3IgcmVhZFBpeGVscywgSFJFU1VMVDogMHglWC4iLCByZXN1
bHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSUQzRDExVGV4dHVyZTJEKiBzcmNU
ZXggPSBOVUxMOworICAgIGlmICh0ZXh0dXJlRGVzYy5TYW1wbGVEZXNjLkNvdW50ID4gMSkKKyAg
ICB7CisgICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHJlc29sdmVEZXNjOworICAgICAgICBy
ZXNvbHZlRGVzYy5XaWR0aCA9IHRleHR1cmVEZXNjLldpZHRoOworICAgICAgICByZXNvbHZlRGVz
Yy5IZWlnaHQgPSB0ZXh0dXJlRGVzYy5IZWlnaHQ7CisgICAgICAgIHJlc29sdmVEZXNjLk1pcExl
dmVscyA9IDE7CisgICAgICAgIHJlc29sdmVEZXNjLkFycmF5U2l6ZSA9IDE7CisgICAgICAgIHJl
c29sdmVEZXNjLkZvcm1hdCA9IHRleHR1cmVEZXNjLkZvcm1hdDsKKyAgICAgICAgcmVzb2x2ZURl
c2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAgIHJlc29sdmVEZXNjLlNhbXBsZURlc2Mu
UXVhbGl0eSA9IDA7CisgICAgICAgIHJlc29sdmVEZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfREVG
QVVMVDsKKyAgICAgICAgcmVzb2x2ZURlc2MuQmluZEZsYWdzID0gMDsKKyAgICAgICAgcmVzb2x2
ZURlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOworICAgICAgICByZXNvbHZlRGVzYy5NaXNjRmxhZ3Mg
PSAwOworCisgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmcmVzb2x2
ZURlc2MsIE5VTEwsICZzcmNUZXgpOworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIGNyZWF0ZSByZXNvbHZlIHRleHR1cmUg
Zm9yIHJlYWRQaXhlbHMsIEhSRVNVTFQ6IDB4JVguIiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHN0
YWdpbmdUZXgtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIG1EZXZpY2VDb250ZXh0LT5SZXNvbHZlU3VicmVzb3VyY2Uoc3JjVGV4LCAwLCB0ZXh0
dXJlLCBzdWJSZXNvdXJjZSwgdGV4dHVyZURlc2MuRm9ybWF0KTsKKyAgICAgICAgc3ViUmVzb3Vy
Y2UgPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzcmNUZXggPSB0ZXh0dXJl
OworICAgICAgICBzcmNUZXgtPkFkZFJlZigpOworICAgIH0KKworICAgIEQzRDExX0JPWCBzcmNC
b3g7CisgICAgc3JjQm94LmxlZnQgPSBhcmVhLng7CisgICAgc3JjQm94LnJpZ2h0ID0gYXJlYS54
ICsgYXJlYS53aWR0aDsKKyAgICBzcmNCb3gudG9wID0gYXJlYS55OworICAgIHNyY0JveC5ib3R0
b20gPSBhcmVhLnkgKyBhcmVhLmhlaWdodDsKKyAgICBzcmNCb3guZnJvbnQgPSAwOworICAgIHNy
Y0JveC5iYWNrID0gMTsKKworICAgIG1EZXZpY2VDb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdp
b24oc3RhZ2luZ1RleCwgMCwgMCwgMCwgMCwgc3JjVGV4LCBzdWJSZXNvdXJjZSwgJnNyY0JveCk7
CisKKyAgICBzcmNUZXgtPlJlbGVhc2UoKTsKKyAgICBzcmNUZXggPSBOVUxMOworCisgICAgRDNE
MTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBpbmc7CisgICAgbURldmljZUNvbnRleHQtPk1hcChz
dGFnaW5nVGV4LCAwLCBEM0QxMV9NQVBfUkVBRCwgMCwgJm1hcHBpbmcpOworCisgICAgdW5zaWdu
ZWQgY2hhciAqc291cmNlOworICAgIGludCBpbnB1dFBpdGNoOworICAgIGlmIChwYWNrUmV2ZXJz
ZVJvd09yZGVyKQorICAgIHsKKyAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcio+KG1hcHBpbmcucERhdGEpICsgbWFwcGluZy5Sb3dQaXRjaCAqIChhcmVhLmhlaWdodCAt
IDEpOworICAgICAgICBpbnB1dFBpdGNoID0gLXN0YXRpY19jYXN0PGludD4obWFwcGluZy5Sb3dQ
aXRjaCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNvdXJjZSA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXIqPihtYXBwaW5nLnBEYXRhKTsKKyAgICAgICAgaW5wdXRQaXRjaCA9
IHN0YXRpY19jYXN0PGludD4obWFwcGluZy5Sb3dQaXRjaCk7CisgICAgfQorCisgICAgdW5zaWdu
ZWQgaW50IGZhc3RQaXhlbFNpemUgPSBnZXRGYXN0UGl4ZWxDb3B5U2l6ZSh0ZXh0dXJlRGVzYy5G
b3JtYXQsIHNvdXJjZUZvcm1hdCwgZm9ybWF0LCB0eXBlKTsKKyAgICBpZiAoZmFzdFBpeGVsU2l6
ZSAhPSAwKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihwaXhlbHMpOworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGFy
ZWEuaGVpZ2h0OyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbWNweShkZXN0ICsgaiAq
IG91dHB1dFBpdGNoLCBzb3VyY2UgKyBqICogaW5wdXRQaXRjaCwgYXJlYS53aWR0aCAqIGZhc3RQ
aXhlbFNpemUpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKHRleHR1cmVEZXNjLkZv
cm1hdCA9PSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STSAmJgorICAgICAgICAgICAgIGZvcm1h
dCA9PSBHTF9SR0JBICYmCisgICAgICAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQor
ICAgIHsKKyAgICAgICAgLy8gRmFzdCBwYXRoIGZvciBzd2FwcGluZyByZWQgd2l0aCBibHVlCisg
ICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
cGl4ZWxzKTsKKworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGFyZWEuaGVpZ2h0OyBqKysp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJlYS53aWR0aDsg
aSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdiID0g
Kih1bnNpZ25lZCBpbnQqKShzb3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBpdGNoKTsKKyAgICAg
ICAgICAgICAgICAqKHVuc2lnbmVkIGludCopKGRlc3QgKyA0ICogaSArIGogKiBvdXRwdXRQaXRj
aCkgPQorICAgICAgICAgICAgICAgICAgICAoYXJnYiAmIDB4RkYwMEZGMDApIHwgICAgICAgLy8g
S2VlcCBhbHBoYSBhbmQgZ3JlZW4KKyAgICAgICAgICAgICAgICAgICAgKGFyZ2IgJiAweDAwRkYw
MDAwKSA+PiAxNiB8IC8vIE1vdmUgcmVkIHRvIGJsdWUKKyAgICAgICAgICAgICAgICAgICAgKGFy
Z2IgJiAweDAwMDAwMEZGKSA8PCAxNjsgIC8vIE1vdmUgYmx1ZSB0byByZWQKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBnbDo6Q29sb3Ig
cGl4ZWxDb2xvcjsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBhcmVhLmhlaWdodDsgaisr
KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZWEud2lkdGg7
IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZWFkUGl4ZWxDb2xvcihzb3Vy
Y2UsIHRleHR1cmVEZXNjLkZvcm1hdCwgc291cmNlRm9ybWF0LCBpLCBqLCBpbnB1dFBpdGNoLCAm
cGl4ZWxDb2xvcik7CisgICAgICAgICAgICAgICAgd3JpdGVQaXhlbENvbG9yKHBpeGVsQ29sb3Is
IGZvcm1hdCwgdHlwZSwgaSwgaiwgb3V0cHV0UGl0Y2gsIHBpeGVscyk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtRGV2aWNlQ29udGV4dC0+VW5tYXAoc3RhZ2luZ1Rl
eCwgMCk7CisKKyAgICBzdGFnaW5nVGV4LT5SZWxlYXNlKCk7CisgICAgc3RhZ2luZ1RleCA9IE5V
TEw7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6YmxpdFJlbmRlcmJ1ZmZlclJlY3QoY29uc3QgZ2w6
OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRyYXdSZWN0LCBSZW5k
ZXJUYXJnZXQgKnJlYWRSZW5kZXJUYXJnZXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBSZW5kZXJUYXJnZXQgKmRyYXdSZW5kZXJUYXJnZXQsIGJvb2wgd2hvbGVCdWZm
ZXJDb3B5KQoreworICAgIEFTU0VSVChyZWFkUmVjdC53aWR0aCA9PSBkcmF3UmVjdC53aWR0aCAm
JiByZWFkUmVjdC5oZWlnaHQgPT0gZHJhd1JlY3QuaGVpZ2h0KTsKKworICAgIFJlbmRlclRhcmdl
dDExICpkcmF3UmVuZGVyVGFyZ2V0MTEgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdl
dDExKGRyYXdSZW5kZXJUYXJnZXQpOworICAgIGlmICghZHJhd1JlbmRlclRhcmdldCkKKyAgICB7
CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSBkcmF3IHJlbmRlciB0YXJnZXQg
ZnJvbSB0aGUgZHJhdyBmcmFtZWJ1ZmZlci4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisgICAgSUQzRDExVGV4dHVyZTJEICpk
cmF3VGV4dHVyZSA9IGRyYXdSZW5kZXJUYXJnZXQxMS0+Z2V0VGV4dHVyZSgpOworICAgIHVuc2ln
bmVkIGludCBkcmF3U3VicmVzb3VyY2UgPSBkcmF3UmVuZGVyVGFyZ2V0MTEtPmdldFN1YnJlc291
cmNlSW5kZXgoKTsKKworICAgIFJlbmRlclRhcmdldDExICpyZWFkUmVuZGVyVGFyZ2V0MTEgPSBS
ZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKHJlYWRSZW5kZXJUYXJnZXQpOworICAg
IGlmICghcmVhZFJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJl
dHJpZXZlIHRoZSByZWFkIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgcmVhZCBmcmFtZWJ1ZmZlci4i
KTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7Cisg
ICAgfQorCisgICAgSUQzRDExVGV4dHVyZTJEICpyZWFkVGV4dHVyZSA9IE5VTEw7CisgICAgdW5z
aWduZWQgaW50IHJlYWRTdWJyZXNvdXJjZSA9IDA7CisgICAgaWYgKHJlYWRSZW5kZXJUYXJnZXQt
PmdldFNhbXBsZXMoKSA+IDApCisgICAgeworICAgICAgICByZWFkVGV4dHVyZSA9IHJlc29sdmVN
dWx0aXNhbXBsZWRUZXh0dXJlKHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0VGV4dHVyZSgpLCByZWFk
UmVuZGVyVGFyZ2V0MTEtPmdldFN1YnJlc291cmNlSW5kZXgoKSk7CisgICAgICAgIHJlYWRTdWJy
ZXNvdXJjZSA9IDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJlYWRUZXh0dXJl
ID0gcmVhZFJlbmRlclRhcmdldDExLT5nZXRUZXh0dXJlKCk7CisgICAgICAgIHJlYWRUZXh0dXJl
LT5BZGRSZWYoKTsKKyAgICAgICAgcmVhZFN1YnJlc291cmNlID0gcmVhZFJlbmRlclRhcmdldDEx
LT5nZXRTdWJyZXNvdXJjZUluZGV4KCk7CisgICAgfQorCisgICAgaWYgKCFyZWFkVGV4dHVyZSkK
KyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZWFkIHJlbmRlciB0
YXJnZXQgdmlldyBmcm9tIHRoZSByZWFkIHJlbmRlciB0YXJnZXQuIik7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgIH0KKworICAgIEQzRDEx
X0JPWCByZWFkQm94OworICAgIHJlYWRCb3gubGVmdCA9IHJlYWRSZWN0Lng7CisgICAgcmVhZEJv
eC5yaWdodCA9IHJlYWRSZWN0LnggKyByZWFkUmVjdC53aWR0aDsKKyAgICByZWFkQm94LnRvcCA9
IHJlYWRSZWN0Lnk7CisgICAgcmVhZEJveC5ib3R0b20gPSByZWFkUmVjdC55ICsgcmVhZFJlY3Qu
aGVpZ2h0OworICAgIHJlYWRCb3guZnJvbnQgPSAwOworICAgIHJlYWRCb3guYmFjayA9IDE7CisK
KyAgICAvLyBEM0QxMSBuZWVkcyBkZXB0aC1zdGVuY2lsIENvcHlTdWJyZXNvdXJjZVJlZ2lvbnMg
dG8gaGF2ZSBhIE5VTEwgcFNyY0JveAorICAgIC8vIFdlIGFsc28gcmVxdWlyZSBjb21wbGV0ZSBm
cmFtZWJ1ZmZlciBjb3BpZXMgZm9yIGRlcHRoLXN0ZW5jaWwgYmxpdC4KKyAgICBEM0QxMV9CT1gg
KnBTcmNCb3ggPSB3aG9sZUJ1ZmZlckNvcHkgPyBOVUxMIDogJnJlYWRCb3g7CisKKyAgICBtRGV2
aWNlQ29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKGRyYXdUZXh0dXJlLCBkcmF3U3VicmVz
b3VyY2UsIGRyYXdSZWN0LngsIGRyYXdSZWN0LnksIDAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZWFkVGV4dHVyZSwgcmVhZFN1YnJlc291cmNlLCBwU3JjQm94
KTsKKworICAgIFNhZmVSZWxlYXNlKHJlYWRUZXh0dXJlKTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCitJRDNEMTFUZXh0dXJlMkQgKlJlbmRlcmVyMTE6OnJlc29sdmVNdWx0aXNhbXBsZWRUZXh0
dXJlKElEM0QxMVRleHR1cmUyRCAqc291cmNlLCB1bnNpZ25lZCBpbnQgc3VicmVzb3VyY2UpCit7
CisgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4dHVyZURlc2M7CisgICAgc291cmNlLT5HZXRE
ZXNjKCZ0ZXh0dXJlRGVzYyk7CisKKyAgICBpZiAodGV4dHVyZURlc2MuU2FtcGxlRGVzYy5Db3Vu
dCA+IDEpCisgICAgeworICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyByZXNvbHZlRGVzYzsK
KyAgICAgICAgcmVzb2x2ZURlc2MuV2lkdGggPSB0ZXh0dXJlRGVzYy5XaWR0aDsKKyAgICAgICAg
cmVzb2x2ZURlc2MuSGVpZ2h0ID0gdGV4dHVyZURlc2MuSGVpZ2h0OworICAgICAgICByZXNvbHZl
RGVzYy5NaXBMZXZlbHMgPSAxOworICAgICAgICByZXNvbHZlRGVzYy5BcnJheVNpemUgPSAxOwor
ICAgICAgICByZXNvbHZlRGVzYy5Gb3JtYXQgPSB0ZXh0dXJlRGVzYy5Gb3JtYXQ7CisgICAgICAg
IHJlc29sdmVEZXNjLlNhbXBsZURlc2MuQ291bnQgPSAxOworICAgICAgICByZXNvbHZlRGVzYy5T
YW1wbGVEZXNjLlF1YWxpdHkgPSAwOworICAgICAgICByZXNvbHZlRGVzYy5Vc2FnZSA9IHRleHR1
cmVEZXNjLlVzYWdlOworICAgICAgICByZXNvbHZlRGVzYy5CaW5kRmxhZ3MgPSB0ZXh0dXJlRGVz
Yy5CaW5kRmxhZ3M7CisgICAgICAgIHJlc29sdmVEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAg
ICAgICAgcmVzb2x2ZURlc2MuTWlzY0ZsYWdzID0gMDsKKworICAgICAgICBJRDNEMTFUZXh0dXJl
MkQgKnJlc29sdmVUZXh0dXJlID0gTlVMTDsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2
aWNlLT5DcmVhdGVUZXh0dXJlMkQoJnJlc29sdmVEZXNjLCBOVUxMLCAmcmVzb2x2ZVRleHR1cmUp
OworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVS
UigiRmFpbGVkIHRvIGNyZWF0ZSBhIG11bHRpc2FtcGxlIHJlc29sdmUgdGV4dHVyZSwgSFJFU1VM
VDogMHglWC4iLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0K
KworICAgICAgICBtRGV2aWNlQ29udGV4dC0+UmVzb2x2ZVN1YnJlc291cmNlKHJlc29sdmVUZXh0
dXJlLCAwLCBzb3VyY2UsIHN1YnJlc291cmNlLCB0ZXh0dXJlRGVzYy5Gb3JtYXQpOworICAgICAg
ICByZXR1cm4gcmVzb2x2ZVRleHR1cmU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IHNvdXJjZS0+QWRkUmVmKCk7CisgICAgICAgIHJldHVybiBzb3VyY2U7CisgICAgfQorfQorCiti
b29sIFJlbmRlcmVyMTE6OmdldExVSUQoTFVJRCAqYWRhcHRlckx1aWQpIGNvbnN0Cit7CisgICAg
YWRhcHRlckx1aWQtPkhpZ2hQYXJ0ID0gMDsKKyAgICBhZGFwdGVyTHVpZC0+TG93UGFydCA9IDA7
CisKKyAgICBpZiAoIW1EeGdpQWRhcHRlcikKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBEWEdJX0FEQVBURVJfREVTQyBhZGFwdGVyRGVzYzsKKyAgICBpZiAoRkFJ
TEVEKG1EeGdpQWRhcHRlci0+R2V0RGVzYygmYWRhcHRlckRlc2MpKSkKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAqYWRhcHRlckx1aWQgPSBhZGFwdGVyRGVzYy5B
ZGFwdGVyTHVpZDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjEx
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L1JlbmRlcmVyMTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYjY3NjBiOTE3OTI5NWM0Y2Q3ZTEyYmQ4OTVkOTM4
MzI4MzhjYmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgKQEAgLTAsMCArMSwzNTggQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFJlbmRlcmVyMTEuaDogRGVmaW5lcyBhIGJhY2stZW5k
IHNwZWNpZmljIGNsYXNzIGZvciB0aGUgRDNEMTEgcmVuZGVyZXIuCisKKyNpZm5kZWYgTElCR0xF
U1YyX1JFTkRFUkVSX1JFTkRFUkVSMTFfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1JF
TkRFUkVSMTFfSF8KKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIK
KworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0LmgiCisKK25hbWVzcGFjZSBnbAoreworY2xhc3Mg
UmVuZGVyYnVmZmVyOworfQorCituYW1lc3BhY2UgcngKK3sKKworY2xhc3MgVmVydGV4RGF0YU1h
bmFnZXI7CitjbGFzcyBJbmRleERhdGFNYW5hZ2VyOworY2xhc3MgU3RyZWFtaW5nSW5kZXhCdWZm
ZXJJbnRlcmZhY2U7CisKK2VudW0KK3sKKyAgICBNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SU19E
M0QxMSA9IDEwMjQsCisgICAgTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SU19EM0QxMSA9IDEw
MjQKK307CisKK2NsYXNzIFJlbmRlcmVyMTEgOiBwdWJsaWMgUmVuZGVyZXIKK3sKKyAgcHVibGlj
OgorICAgIFJlbmRlcmVyMTEoZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBIREMgaERjKTsKKyAgICB2
aXJ0dWFsIH5SZW5kZXJlcjExKCk7CisKKyAgICBzdGF0aWMgUmVuZGVyZXIxMSAqbWFrZVJlbmRl
cmVyMTEoUmVuZGVyZXIgKnJlbmRlcmVyKTsKKworICAgIHZpcnR1YWwgRUdMaW50IGluaXRpYWxp
emUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVzZXREZXZpY2UoKTsKKworICAgIHZpcnR1YWwgaW50
IGdlbmVyYXRlQ29uZmlncyhDb25maWdEZXNjICoqY29uZmlnRGVzY0xpc3QpOworICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVDb25maWdzKENvbmZpZ0Rlc2MgKmNvbmZpZ0Rlc2NMaXN0KTsKKworICAg
IHZpcnR1YWwgdm9pZCBzeW5jKGJvb2wgYmxvY2spOworCisgICAgdmlydHVhbCBTd2FwQ2hhaW4g
KmNyZWF0ZVN3YXBDaGFpbihIV05EIHdpbmRvdywgSEFORExFIHNoYXJlSGFuZGxlLCBHTGVudW0g
YmFja0J1ZmZlckZvcm1hdCwgR0xlbnVtIGRlcHRoQnVmZmVyRm9ybWF0KTsKKworICAgIHZpcnR1
YWwgdm9pZCBzZXRTYW1wbGVyU3RhdGUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRleCwg
Y29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmc2FtcGxlcik7CisgICAgdmlydHVhbCB2b2lkIHNldFRl
eHR1cmUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRleCwgZ2w6OlRleHR1cmUgKnRleHR1
cmUpOworCisgICAgdmlydHVhbCB2b2lkIHNldFJhc3Rlcml6ZXJTdGF0ZShjb25zdCBnbDo6UmFz
dGVyaXplclN0YXRlICZyYXN0ZXJTdGF0ZSk7CisgICAgdmlydHVhbCB2b2lkIHNldEJsZW5kU3Rh
dGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJs
ZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xvciAmYmxlbmRDb2xvciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlTWFzayk7CisgICAgdmlydHVhbCB2b2lk
IHNldERlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmZGVwdGhT
dGVuY2lsU3RhdGUsIGludCBzdGVuY2lsUmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgc3RlbmNpbEJhY2tSZWYsIGJvb2wgZnJvbnRGYWNlQ0NXKTsKKworICAg
IHZpcnR1YWwgdm9pZCBzZXRTY2lzc29yUmVjdGFuZ2xlKGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNj
aXNzb3IsIGJvb2wgZW5hYmxlZCk7CisgICAgdmlydHVhbCBib29sIHNldFZpZXdwb3J0KGNvbnN0
IGdsOjpSZWN0YW5nbGUgJnZpZXdwb3J0LCBmbG9hdCB6TmVhciwgZmxvYXQgekZhciwgR0xlbnVt
IGRyYXdNb2RlLCBHTGVudW0gZnJvbnRGYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGlnbm9yZVZpZXdwb3J0KTsKKworICAgIHZpcnR1YWwgYm9vbCBhcHBseVByaW1pdGl2
ZVR5cGUoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQpOworICAgIHZpcnR1YWwgYm9vbCBhcHBs
eVJlbmRlclRhcmdldChnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKTsKKyAgICB2aXJ0dWFs
IHZvaWQgYXBwbHlTaGFkZXJzKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHlVbmlmb3JtcyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSwgZ2w6OlVuaWZvcm1BcnJheSAqdW5pZm9ybUFycmF5KTsKKyAgICB2aXJ0dWFsIEdMZW51
bSBhcHBseVZlcnRleEJ1ZmZlcihnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6
OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0ZXhBdHRyaWJ1dGVzW10sIEdMaW50IGZpcnN0LCBHTHNpemVp
IGNvdW50LCBHTHNpemVpIGluc3RhbmNlcyk7CisgICAgdmlydHVhbCBHTGVudW0gYXBwbHlJbmRl
eEJ1ZmZlcihjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1
ZmZlciwgR0xzaXplaSBjb3VudCwgR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVk
SW5kZXhEYXRhICppbmRleEluZm8pOworCisgICAgdmlydHVhbCB2b2lkIGRyYXdBcnJheXMoR0xl
bnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlw
ZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIs
IGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMp
OworCisgICAgdmlydHVhbCB2b2lkIGNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNs
ZWFyUGFyYW1zLCBnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKTsKKworICAgIHZpcnR1YWwg
dm9pZCBtYXJrQWxsU3RhdGVEaXJ0eSgpOworCisgICAgLy8gbG9zdCBkZXZpY2UKKyAgICB2b2lk
IG5vdGlmeURldmljZUxvc3QoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNEZXZpY2VMb3N0KCk7Cisg
ICAgdmlydHVhbCBib29sIHRlc3REZXZpY2VMb3N0KGJvb2wgbm90aWZ5KTsKKyAgICB2aXJ0dWFs
IGJvb2wgdGVzdERldmljZVJlc2V0dGFibGUoKTsKKworICAgIC8vIFJlbmRlcmVyIGNhcGFiaWxp
dGllcworICAgIHZpcnR1YWwgRFdPUkQgZ2V0QWRhcHRlclZlbmRvcigpIGNvbnN0OworICAgIHZp
cnR1YWwgc3RkOjpzdHJpbmcgZ2V0UmVuZGVyZXJEZXNjcmlwdGlvbigpIGNvbnN0OworICAgIHZp
cnR1YWwgR1VJRCBnZXRBZGFwdGVySWRlbnRpZmllcigpIGNvbnN0OworCisgICAgdmlydHVhbCBi
b29sIGdldEJHUkFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRE
WFQxVGV4dHVyZVN1cHBvcnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUM1RleHR1cmVTdXBw
b3J0KCk7CisgICAgdmlydHVhbCBib29sIGdldERYVDVUZXh0dXJlU3VwcG9ydCgpOworICAgIHZp
cnR1YWwgYm9vbCBnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpOworICAgIHZpcnR1YWwgYm9vbCBnZXRG
bG9hdDMyVGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKTsK
KyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmlu
ZywgYm9vbCAqcmVuZGVyYWJsZSk7CisgICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZVRleHR1
cmVTdXBwb3J0KCk7CisgICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1
cHBvcnQoKTsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhUZXh0dXJlSW1h
Z2VVbml0cygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heENvbWJpbmVk
VGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRS
ZXNlcnZlZFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25l
ZCBpbnQgZ2V0UmVzZXJ2ZWRGcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgY29uc3Q7CisgICAgdmly
dHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgY29u
c3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmFyeWluZ1ZlY3RvcnMoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGJvb2wgZ2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0
VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9h
dCBnZXRUZXh0dXJlTWF4QW5pc290cm9weSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRT
aGFyZUhhbmRsZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVyaXZhdGl2
ZUluc3RydWN0aW9uU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRQb3N0U3Vi
QnVmZmVyU3VwcG9ydCgpIGNvbnN0OworCisgICAgdmlydHVhbCBpbnQgZ2V0TWFqb3JTaGFkZXJN
b2RlbCgpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgZ2V0TWF4UG9pbnRTaXplKCkgY29uc3Q7
CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4Vmlld3BvcnREaW1lbnNpb24oKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGludCBnZXRNYXhUZXh0dXJlV2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBn
ZXRNYXhUZXh0dXJlSGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldDMyQml0SW5k
ZXhTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWluU3dhcEludGVydmFsKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4U3dhcEludGVydmFsKCkgY29uc3Q7CisKKyAg
ICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpIGNvbnN0OworICAgIGlu
dCBnZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhEWEdJX0ZPUk1BVCBmb3JtYXQsIHVuc2lnbmVk
IGludCByZXF1ZXN0ZWQpIGNvbnN0OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4
UmVuZGVyVGFyZ2V0cygpIGNvbnN0OworCisgICAgLy8gUGl4ZWwgb3BlcmF0aW9ucworICAgIHZp
cnR1YWwgYm9vbCBjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAq
ZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc291cmNlKTsKKyAgICB2aXJ0dWFsIGJv
b2wgY29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqZGVzdCwg
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzb3VyY2UpOworCisgICAgdmlydHVhbCBib29s
IGNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFu
Z2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlMkQgKnN0b3JhZ2UsIEdMaW50IGxldmVsKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdl
KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJj
ZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpz
dG9yYWdlLCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCk7CisKKyAgICBib29sIGNvcHlUZXh0
dXJlKElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc291cmNlLCBjb25zdCBnbDo6UmVjdGFuZ2xl
ICZzb3VyY2VBcmVhLCB1bnNpZ25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3Vy
Y2VIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpk
ZXN0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkZXN0QXJlYSwgdW5zaWduZWQgaW50IGRlc3RXaWR0
aCwgdW5zaWduZWQgaW50IGRlc3RIZWlnaHQsIEdMZW51bSBkZXN0Rm9ybWF0KTsKKworICAgIHZp
cnR1YWwgYm9vbCBibGl0UmVjdChnbDo6RnJhbWVidWZmZXIgKnJlYWRUYXJnZXQsIGNvbnN0IGds
OjpSZWN0YW5nbGUgJnJlYWRSZWN0LCBnbDo6RnJhbWVidWZmZXIgKmRyYXdUYXJnZXQsIGNvbnN0
IGdsOjpSZWN0YW5nbGUgJmRyYXdSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERlcHRoU3RlbmNpbCk7CisgICAgdmlydHVhbCB2
b2lkIHJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2gs
IGJvb2wgcGFja1JldmVyc2VSb3dPcmRlciwgR0xpbnQgcGFja0FsaWdubWVudCwgdm9pZCogcGl4
ZWxzKTsKKworICAgIC8vIFJlbmRlclRhcmdldCBjcmVhdGlvbgorICAgIHZpcnR1YWwgUmVuZGVy
VGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJnZXQoU3dhcENoYWluICpzd2FwQ2hhaW4sIGJvb2wgZGVw
dGgpOworICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJnZXQoaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMsIGJvb2wgZGVw
dGgpOworCisgICAgLy8gU2hhZGVyIG9wZXJhdGlvbnMKKyAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1
dGFibGUgKmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3Ro
LCByeDo6U2hhZGVyVHlwZSB0eXBlKTsKKyAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1dGFibGUgKmNv
bXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRl
ckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91bmQp
OworCisgICAgLy8gSW1hZ2Ugb3BlcmF0aW9ucworICAgIHZpcnR1YWwgSW1hZ2UgKmNyZWF0ZUlt
YWdlKCk7CisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKEltYWdlICpkZXN0LCBJbWFn
ZSAqc291cmNlKTsKKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3Rv
cmFnZTJEKFN3YXBDaGFpbiAqc3dhcENoYWluKTsKKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdl
ICpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVT
dG9yYWdlQ3ViZShpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2Fn
ZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKTsKKworICAgIC8vIEJ1ZmZlciBjcmVh
dGlvbgorICAgIHZpcnR1YWwgVmVydGV4QnVmZmVyICpjcmVhdGVWZXJ0ZXhCdWZmZXIoKTsKKyAg
ICB2aXJ0dWFsIEluZGV4QnVmZmVyICpjcmVhdGVJbmRleEJ1ZmZlcigpOworICAgIHZpcnR1YWwg
QnVmZmVyU3RvcmFnZSAqY3JlYXRlQnVmZmVyU3RvcmFnZSgpOworCisgICAgLy8gUXVlcnkgYW5k
IEZlbmNlIGNyZWF0aW9uCisgICAgdmlydHVhbCBRdWVyeUltcGwgKmNyZWF0ZVF1ZXJ5KEdMZW51
bSB0eXBlKTsKKyAgICB2aXJ0dWFsIEZlbmNlSW1wbCAqY3JlYXRlRmVuY2UoKTsKKworICAgIC8v
IEQzRDExLXJlbmRlcmVyIHNwZWNpZmljIG1ldGhvZHMKKyAgICBJRDNEMTFEZXZpY2UgKmdldERl
dmljZSgpIHsgcmV0dXJuIG1EZXZpY2U7IH0KKyAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpnZXRE
ZXZpY2VDb250ZXh0KCkgeyByZXR1cm4gbURldmljZUNvbnRleHQ7IH07CisgICAgSURYR0lGYWN0
b3J5ICpnZXREeGdpRmFjdG9yeSgpIHsgcmV0dXJuIG1EeGdpRmFjdG9yeTsgfTsKKworICAgIGJv
b2wgZ2V0UmVuZGVyVGFyZ2V0UmVzb3VyY2UoZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIs
IHVuc2lnbmVkIGludCAqc3VicmVzb3VyY2VJbmRleCwgSUQzRDExVGV4dHVyZTJEICoqcmVzb3Vy
Y2UpOworICAgIHZvaWQgdW5hcHBseVJlbmRlclRhcmdldHMoKTsKKyAgICB2b2lkIHNldE9uZVRp
bWVSZW5kZXJUYXJnZXQoSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqcmVuZGVyVGFyZ2V0Vmlldyk7
CisKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0TFVJRChMVUlEICphZGFwdGVyTHVpZCkgY29uc3Q7CisK
KyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyZXIxMSk7CisK
KyAgICB2b2lkIGRyYXdMaW5lTG9vcChHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3Qg
R0x2b2lkICppbmRpY2VzLCBpbnQgbWluSW5kZXgsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1
ZmZlcik7CisgICAgdm9pZCBkcmF3VHJpYW5nbGVGYW4oR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5
cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgaW50IG1pbkluZGV4LCBnbDo6QnVmZmVyICplbGVt
ZW50QXJyYXlCdWZmZXIsIGludCBpbnN0YW5jZXMpOworCisgICAgdm9pZCByZWFkVGV4dHVyZURh
dGEoSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCB1bnNpZ25lZCBpbnQgc3ViUmVzb3VyY2UsIGNv
bnN0IGdsOjpSZWN0YW5nbGUgJmFyZWEsCisgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVt
IHNvdXJjZUZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgb3V0cHV0
UGl0Y2gsIGJvb2wgcGFja1JldmVyc2VSb3dPcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBHTGludCBwYWNrQWxpZ25tZW50LCB2b2lkICpwaXhlbHMpOworCisgICAgdm9pZCBtYXNrZWRD
bGVhcihjb25zdCBnbDo6Q2xlYXJQYXJhbWV0ZXJzICZjbGVhclBhcmFtcywgZ2w6OkZyYW1lYnVm
ZmVyICpmcmFtZUJ1ZmZlcik7CisgICAgcng6OlJhbmdlIGdldFZpZXdwb3J0Qm91bmRzKCkgY29u
c3Q7CisKKyAgICBib29sIGJsaXRSZW5kZXJidWZmZXJSZWN0KGNvbnN0IGdsOjpSZWN0YW5nbGUg
JnJlYWRSZWN0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkcmF3UmVjdCwgUmVuZGVyVGFyZ2V0ICpy
ZWFkUmVuZGVyVGFyZ2V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclRh
cmdldCAqZHJhd1JlbmRlclRhcmdldCwgYm9vbCB3aG9sZUJ1ZmZlckNvcHkpOworICAgIElEM0Qx
MVRleHR1cmUyRCAqcmVzb2x2ZU11bHRpc2FtcGxlZFRleHR1cmUoSUQzRDExVGV4dHVyZTJEICpz
b3VyY2UsIHVuc2lnbmVkIGludCBzdWJyZXNvdXJjZSk7CisKKyAgICBITU9EVUxFIG1EM2QxMU1v
ZHVsZTsKKyAgICBITU9EVUxFIG1EeGdpTW9kdWxlOworICAgIEhEQyBtRGM7CisKKyAgICBib29s
IG1EZXZpY2VMb3N0OworCisgICAgdm9pZCBpbml0aWFsaXplRGV2aWNlKCk7CisgICAgdm9pZCBy
ZWxlYXNlRGV2aWNlUmVzb3VyY2VzKCk7CisgICAgaW50IGdldE1pbm9yU2hhZGVyTW9kZWwoKSBj
b25zdDsKKyAgICB2b2lkIHJlbGVhc2UoKTsKKworICAgIFJlbmRlclN0YXRlQ2FjaGUgbVN0YXRl
Q2FjaGU7CisKKyAgICAvLyBTdXBwb3J0IGZsYWdzCisgICAgYm9vbCBtRmxvYXQxNlRleHR1cmVT
dXBwb3J0OworICAgIGJvb2wgbUZsb2F0MTZGaWx0ZXJTdXBwb3J0OworICAgIGJvb2wgbUZsb2F0
MTZSZW5kZXJTdXBwb3J0OworCisgICAgYm9vbCBtRmxvYXQzMlRleHR1cmVTdXBwb3J0OworICAg
IGJvb2wgbUZsb2F0MzJGaWx0ZXJTdXBwb3J0OworICAgIGJvb2wgbUZsb2F0MzJSZW5kZXJTdXBw
b3J0OworCisgICAgYm9vbCBtRFhUMVRleHR1cmVTdXBwb3J0OworICAgIGJvb2wgbURYVDNUZXh0
dXJlU3VwcG9ydDsKKyAgICBib29sIG1EWFQ1VGV4dHVyZVN1cHBvcnQ7CisKKyAgICBib29sIG1E
ZXB0aFRleHR1cmVTdXBwb3J0OworCisgICAgLy8gTXVsdGlzYW1wbGUgZm9ybWF0IHN1cHBvcnQK
KyAgICBzdHJ1Y3QgTXVsdGlzYW1wbGVTdXBwb3J0SW5mbworICAgIHsKKyAgICAgICAgdW5zaWdu
ZWQgaW50IHF1YWxpdHlMZXZlbHNbRDNEMTFfTUFYX01VTFRJU0FNUExFX1NBTVBMRV9DT1VOVF07
CisgICAgfTsKKworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPERYR0lfRk9STUFULCBN
dWx0aXNhbXBsZVN1cHBvcnRJbmZvLCBzdGQ6Omhhc2g8aW50PiA+IE11bHRpc2FtcGxlU3VwcG9y
dE1hcDsKKyAgICBNdWx0aXNhbXBsZVN1cHBvcnRNYXAgbU11bHRpc2FtcGxlU3VwcG9ydE1hcDsK
KworICAgIHVuc2lnbmVkIGludCBtTWF4U3VwcG9ydGVkU2FtcGxlczsKKworICAgIC8vIGN1cnJl
bnQgcmVuZGVyIHRhcmdldCBzdGF0ZXMKKyAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRSZW5kZXJU
YXJnZXRTZXJpYWxzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTXTsKKyAgICB1
bnNpZ25lZCBpbnQgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbDsKKyAgICB1bnNpZ25lZCBpbnQg
bUFwcGxpZWRTdGVuY2lsYnVmZmVyU2VyaWFsOworICAgIGJvb2wgbURlcHRoU3RlbmNpbEluaXRp
YWxpemVkOworICAgIGJvb2wgbVJlbmRlclRhcmdldERlc2NJbml0aWFsaXplZDsKKyAgICByeDo6
UmVuZGVyVGFyZ2V0OjpEZXNjIG1SZW5kZXJUYXJnZXREZXNjOworICAgIHVuc2lnbmVkIGludCBt
Q3VyRGVwdGhTaXplOworICAgIHVuc2lnbmVkIGludCBtQ3VyU3RlbmNpbFNpemU7CisKKyAgICAv
LyBDdXJyZW50bHkgYXBwbGllZCBzYW1wbGVyIHN0YXRlcworICAgIGJvb2wgbUZvcmNlU2V0VmVy
dGV4U2FtcGxlclN0YXRlc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lN
QUdFX1VOSVRTXTsKKyAgICBnbDo6U2FtcGxlclN0YXRlIG1DdXJWZXJ0ZXhTYW1wbGVyU3RhdGVz
W2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOworCisg
ICAgYm9vbCBtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0ZXNbZ2w6Ok1BWF9URVhUVVJFX0lNQUdF
X1VOSVRTXTsKKyAgICBnbDo6U2FtcGxlclN0YXRlIG1DdXJQaXhlbFNhbXBsZXJTdGF0ZXNbZ2w6
Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKKworICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIHRl
eHR1cmVzCisgICAgdW5zaWduZWQgaW50IG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1tnbDo6SU1Q
TEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKKyAgICB1bnNpZ25l
ZCBpbnQgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRT
XTsKKworICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIGJsZW5kIHN0YXRlCisgICAgYm9vbCBtRm9y
Y2VTZXRCbGVuZFN0YXRlOworICAgIGdsOjpCbGVuZFN0YXRlIG1DdXJCbGVuZFN0YXRlOworICAg
IGdsOjpDb2xvciBtQ3VyQmxlbmRDb2xvcjsKKyAgICB1bnNpZ25lZCBpbnQgbUN1clNhbXBsZU1h
c2s7CisKKyAgICAvLyBDdXJyZW50bHkgYXBwbGllZCByYXN0ZXJpemVyIHN0YXRlCisgICAgYm9v
bCBtRm9yY2VTZXRSYXN0ZXJTdGF0ZTsKKyAgICBnbDo6UmFzdGVyaXplclN0YXRlIG1DdXJSYXN0
ZXJTdGF0ZTsKKworICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIGRlcHRoIHN0ZW5jaWwgc3RhdGUK
KyAgICBib29sIG1Gb3JjZVNldERlcHRoU3RlbmNpbFN0YXRlOworICAgIGdsOjpEZXB0aFN0ZW5j
aWxTdGF0ZSBtQ3VyRGVwdGhTdGVuY2lsU3RhdGU7CisgICAgaW50IG1DdXJTdGVuY2lsUmVmOwor
ICAgIGludCBtQ3VyU3RlbmNpbEJhY2tSZWY7CisKKyAgICAvLyBDdXJyZW50bHkgYXBwbGllZCBz
Y2lzc29yIHJlY3RhbmdsZQorICAgIGJvb2wgbUZvcmNlU2V0U2Npc3NvcjsKKyAgICBib29sIG1T
Y2lzc29yRW5hYmxlZDsKKyAgICBnbDo6UmVjdGFuZ2xlIG1DdXJTY2lzc29yOworCisgICAgLy8g
Q3VycmVudGx5IGFwcGxpZWQgdmlld3BvcnQKKyAgICBib29sIG1Gb3JjZVNldFZpZXdwb3J0Owor
ICAgIGdsOjpSZWN0YW5nbGUgbUN1clZpZXdwb3J0OworICAgIGZsb2F0IG1DdXJOZWFyOworICAg
IGZsb2F0IG1DdXJGYXI7CisKKyAgICAvLyBDdXJyZW50bHkgYXBwbGllZCBwcmltaXRpdmUgdG9w
b2xvZ3kKKyAgICBEM0QxMV9QUklNSVRJVkVfVE9QT0xPR1kgbUN1cnJlbnRQcmltaXRpdmVUb3Bv
bG9neTsKKworICAgIHVuc2lnbmVkIGludCBtQXBwbGllZElCU2VyaWFsOworICAgIHVuc2lnbmVk
IGludCBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbDsKKyAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRJ
Qk9mZnNldDsKKworICAgIHVuc2lnbmVkIGludCBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWw7
CisgICAgYm9vbCBtSXNHZW9tZXRyeVNoYWRlckFjdGl2ZTsKKworICAgIGR4X1ZlcnRleENvbnN0
YW50cyBtVmVydGV4Q29uc3RhbnRzOworICAgIGR4X1ZlcnRleENvbnN0YW50cyBtQXBwbGllZFZl
cnRleENvbnN0YW50czsKKyAgICBJRDNEMTFCdWZmZXIgKm1Ecml2ZXJDb25zdGFudEJ1ZmZlclZT
OworICAgIElEM0QxMUJ1ZmZlciAqbUN1cnJlbnRWZXJ0ZXhDb25zdGFudEJ1ZmZlcjsKKworICAg
IGR4X1BpeGVsQ29uc3RhbnRzIG1QaXhlbENvbnN0YW50czsKKyAgICBkeF9QaXhlbENvbnN0YW50
cyBtQXBwbGllZFBpeGVsQ29uc3RhbnRzOworICAgIElEM0QxMUJ1ZmZlciAqbURyaXZlckNvbnN0
YW50QnVmZmVyUFM7CisgICAgSUQzRDExQnVmZmVyICptQ3VycmVudFBpeGVsQ29uc3RhbnRCdWZm
ZXI7CisKKyAgICBJRDNEMTFCdWZmZXIgKm1DdXJyZW50R2VvbWV0cnlDb25zdGFudEJ1ZmZlcjsK
KworICAgIC8vIFZlcnRleCwgaW5kZXggYW5kIGlucHV0IGxheW91dHMKKyAgICBWZXJ0ZXhEYXRh
TWFuYWdlciAqbVZlcnRleERhdGFNYW5hZ2VyOworICAgIEluZGV4RGF0YU1hbmFnZXIgKm1JbmRl
eERhdGFNYW5hZ2VyOworICAgIElucHV0TGF5b3V0Q2FjaGUgbUlucHV0TGF5b3V0Q2FjaGU7CisK
KyAgICBTdHJlYW1pbmdJbmRleEJ1ZmZlckludGVyZmFjZSAqbUxpbmVMb29wSUI7CisgICAgU3Ry
ZWFtaW5nSW5kZXhCdWZmZXJJbnRlcmZhY2UgKm1UcmlhbmdsZUZhbklCOworCisgICAgLy8gVGV4
dHVyZSBjb3B5IHJlc291cmNlcworICAgIGJvb2wgbUNvcHlSZXNvdXJjZXNJbml0aWFsaXplZDsK
KyAgICBJRDNEMTFCdWZmZXIgKm1Db3B5VkI7CisgICAgSUQzRDExU2FtcGxlclN0YXRlICptQ29w
eVNhbXBsZXI7CisgICAgSUQzRDExSW5wdXRMYXlvdXQgKm1Db3B5SUw7CisgICAgSUQzRDExVmVy
dGV4U2hhZGVyICptQ29weVZTOworICAgIElEM0QxMVBpeGVsU2hhZGVyICptQ29weVJHQkFQUzsK
KyAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUNvcHlSR0JQUzsKKyAgICBJRDNEMTFQaXhlbFNoYWRl
ciAqbUNvcHlMdW1QUzsKKyAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUNvcHlMdW1BbHBoYVBTOwor
CisgICAgLy8gTWFza2VkIGNsZWFyIHJlc291cmNlcworICAgIGJvb2wgbUNsZWFyUmVzb3VyY2Vz
SW5pdGlhbGl6ZWQ7CisgICAgSUQzRDExQnVmZmVyICptQ2xlYXJWQjsKKyAgICBJRDNEMTFJbnB1
dExheW91dCAqbUNsZWFySUw7CisgICAgSUQzRDExVmVydGV4U2hhZGVyICptQ2xlYXJWUzsKKyAg
ICBJRDNEMTFQaXhlbFNoYWRlciAqbUNsZWFyU2luZ2xlUFM7CisgICAgSUQzRDExUGl4ZWxTaGFk
ZXIgKm1DbGVhck11bHRpcGxlUFM7CisgICAgSUQzRDExUmFzdGVyaXplclN0YXRlICptQ2xlYXJT
Y2lzc29yUlM7CisgICAgSUQzRDExUmFzdGVyaXplclN0YXRlICptQ2xlYXJOb1NjaXNzb3JSUzsK
KworICAgIC8vIFN5bmMgcXVlcnkKKyAgICBJRDNEMTFRdWVyeSAqbVN5bmNRdWVyeTsKKworICAg
IElEM0QxMURldmljZSAqbURldmljZTsKKyAgICBEM0RfRkVBVFVSRV9MRVZFTCBtRmVhdHVyZUxl
dmVsOworICAgIElEM0QxMURldmljZUNvbnRleHQgKm1EZXZpY2VDb250ZXh0OworICAgIElEWEdJ
QWRhcHRlciAqbUR4Z2lBZGFwdGVyOworICAgIERYR0lfQURBUFRFUl9ERVNDIG1BZGFwdGVyRGVz
Y3JpcHRpb247CisgICAgY2hhciBtRGVzY3JpcHRpb25bMTI4XTsKKyAgICBJRFhHSUZhY3Rvcnkg
Km1EeGdpRmFjdG9yeTsKKworICAgIC8vIENhY2hlZCBkZXZpY2UgY2FwcworICAgIGJvb2wgbUJH
UkFUZXh0dXJlU3VwcG9ydDsKK307CisKK30KKyNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJf
UkVOREVSRVIxMV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRh
YmxlMTEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJlNDU1ZTNhZjVlM2IzNWYwMDhmMDE5MDgxZGFhNmUyNzA3
ZjIwNmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1dGFibGUxMS5jcHAKQEAgLTAsMCArMSwx
MDkgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAx
Mi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8g
U2hhZGVyRXhlY3V0YWJsZTExLmNwcDogSW1wbGVtZW50cyBhIEQzRDExLXNwZWNpZmljIGNsYXNz
IHRvIGNvbnRhaW4gc2hhZGVyCisvLyBleGVjdXRhYmxlIGltcGxlbWVudGF0aW9uIGRldGFpbHMu
CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU2hhZGVyRXhlY3V0YWJsZTEx
LmgiCisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKworbmFtZXNwYWNlIHJ4Cit7CisKK1No
YWRlckV4ZWN1dGFibGUxMTo6U2hhZGVyRXhlY3V0YWJsZTExKGNvbnN0IHZvaWQgKmZ1bmN0aW9u
LCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFQaXhlbFNoYWRlciAqZXhlY3V0YWJsZSkKKyAgICA6IFNo
YWRlckV4ZWN1dGFibGUoZnVuY3Rpb24sIGxlbmd0aCkKK3sKKyAgICBtUGl4ZWxFeGVjdXRhYmxl
ID0gZXhlY3V0YWJsZTsKKyAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7CisgICAgbUdlb21l
dHJ5RXhlY3V0YWJsZSA9IE5VTEw7CisKKyAgICBtQ29uc3RhbnRCdWZmZXIgPSBOVUxMOworfQor
CitTaGFkZXJFeGVjdXRhYmxlMTE6OlNoYWRlckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5j
dGlvbiwgc2l6ZV90IGxlbmd0aCwgSUQzRDExVmVydGV4U2hhZGVyICpleGVjdXRhYmxlKQorICAg
IDogU2hhZGVyRXhlY3V0YWJsZShmdW5jdGlvbiwgbGVuZ3RoKQoreworICAgIG1WZXJ0ZXhFeGVj
dXRhYmxlID0gZXhlY3V0YWJsZTsKKyAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKKyAgICBt
R2VvbWV0cnlFeGVjdXRhYmxlID0gTlVMTDsKKworICAgIG1Db25zdGFudEJ1ZmZlciA9IE5VTEw7
Cit9CisKK1NoYWRlckV4ZWN1dGFibGUxMTo6U2hhZGVyRXhlY3V0YWJsZTExKGNvbnN0IHZvaWQg
KmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZXhlY3V0YWJs
ZSkKKyAgICA6IFNoYWRlckV4ZWN1dGFibGUoZnVuY3Rpb24sIGxlbmd0aCkKK3sKKyAgICBtR2Vv
bWV0cnlFeGVjdXRhYmxlID0gZXhlY3V0YWJsZTsKKyAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5V
TEw7CisgICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7CisKKyAgICBtQ29uc3RhbnRCdWZmZXIg
PSBOVUxMOworfQorCitTaGFkZXJFeGVjdXRhYmxlMTE6On5TaGFkZXJFeGVjdXRhYmxlMTEoKQor
eworICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSkKKyAgICB7CisgICAgICAgIG1WZXJ0ZXhFeGVj
dXRhYmxlLT5SZWxlYXNlKCk7CisgICAgfQorICAgIGlmIChtUGl4ZWxFeGVjdXRhYmxlKQorICAg
IHsKKyAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFzZSgpOworICAgIH0KKyAgICBpZiAo
bUdlb21ldHJ5RXhlY3V0YWJsZSkKKyAgICB7CisgICAgICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUt
PlJlbGVhc2UoKTsKKyAgICB9CisgICAgCisgICAgaWYgKG1Db25zdGFudEJ1ZmZlcikKKyAgICB7
CisgICAgICAgIG1Db25zdGFudEJ1ZmZlci0+UmVsZWFzZSgpOworICAgIH0KK30KKworU2hhZGVy
RXhlY3V0YWJsZTExICpTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VTaGFkZXJFeGVjdXRhYmxlMTEo
U2hhZGVyRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSkKK3sKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNf
VFlQRShTaGFkZXJFeGVjdXRhYmxlMTEqLCBleGVjdXRhYmxlKSk7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFNoYWRlckV4ZWN1dGFibGUxMSo+KGV4ZWN1dGFibGUpOworfQorCitJRDNEMTFWZXJ0
ZXhTaGFkZXIgKlNoYWRlckV4ZWN1dGFibGUxMTo6Z2V0VmVydGV4U2hhZGVyKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbVZlcnRleEV4ZWN1dGFibGU7Cit9CisKK0lEM0QxMVBpeGVsU2hhZGVyICpT
aGFkZXJFeGVjdXRhYmxlMTE6OmdldFBpeGVsU2hhZGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bVBpeGVsRXhlY3V0YWJsZTsKK30KKworSUQzRDExR2VvbWV0cnlTaGFkZXIgKlNoYWRlckV4ZWN1
dGFibGUxMTo6Z2V0R2VvbWV0cnlTaGFkZXIoKSBjb25zdAoreworICAgIHJldHVybiBtR2VvbWV0
cnlFeGVjdXRhYmxlOworfQorCitJRDNEMTFCdWZmZXIgKlNoYWRlckV4ZWN1dGFibGUxMTo6Z2V0
Q29uc3RhbnRCdWZmZXIoSUQzRDExRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGludCByZWdpc3Rl
ckNvdW50KQoreworICAgIGlmICghbUNvbnN0YW50QnVmZmVyICYmIHJlZ2lzdGVyQ291bnQgPiAw
KQorICAgIHsKKyAgICAgICAgRDNEMTFfQlVGRkVSX0RFU0MgY29uc3RhbnRCdWZmZXJEZXNjcmlw
dGlvbiA9IHswfTsKKyAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5CeXRlV2lkdGgg
PSByZWdpc3RlckNvdW50ICogc2l6ZW9mKGZsb2F0WzRdKTsKKyAgICAgICAgY29uc3RhbnRCdWZm
ZXJEZXNjcmlwdGlvbi5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZTkFNSUM7CisgICAgICAgIGNvbnN0
YW50QnVmZmVyRGVzY3JpcHRpb24uQmluZEZsYWdzID0gRDNEMTFfQklORF9DT05TVEFOVF9CVUZG
RVI7CisgICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uQ1BVQWNjZXNzRmxhZ3MgPSBE
M0QxMV9DUFVfQUNDRVNTX1dSSVRFOworICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9u
Lk1pc2NGbGFncyA9IDA7CisgICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uU3RydWN0
dXJlQnl0ZVN0cmlkZSA9IDA7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZUJ1ZmZlcigmY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbiwgTlVMTCwgJm1Db25zdGFudEJ1
ZmZlcik7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgfQorCisgICAg
cmV0dXJuIG1Db25zdGFudEJ1ZmZlcjsKK30KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvU2hhZGVyRXhlY3V0YWJsZTExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1dGFibGUxMS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmM2ZWMxY2Y3ZDJjZGFlYmE0NGQ0YTViODU1NzlkMTgyOTdhNDFmYWQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL1NoYWRlckV4ZWN1dGFibGUxMS5oCkBAIC0wLDAgKzEsNDcgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKy8vIFNoYWRlckV4ZWN1dGFibGUxMS5oOiBEZWZpbmVzIGEgRDNEMTEtc3BlY2lm
aWMgY2xhc3MgdG8gY29udGFpbiBzaGFkZXIKKy8vIGV4ZWN1dGFibGUgaW1wbGVtZW50YXRpb24g
ZGV0YWlscy4KKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfU0hBREVSRVhFQ1VUQUJMRTEx
X0hfCisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9TSEFERVJFWEVDVVRBQkxFMTFfSF8KKwor
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlLmgiCisKK25hbWVz
cGFjZSByeAoreworCitjbGFzcyBTaGFkZXJFeGVjdXRhYmxlMTEgOiBwdWJsaWMgU2hhZGVyRXhl
Y3V0YWJsZQoreworICBwdWJsaWM6CisgICAgU2hhZGVyRXhlY3V0YWJsZTExKGNvbnN0IHZvaWQg
KmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFQaXhlbFNoYWRlciAqZXhlY3V0YWJsZSk7
CisgICAgU2hhZGVyRXhlY3V0YWJsZTExKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVu
Z3RoLCBJRDNEMTFWZXJ0ZXhTaGFkZXIgKmV4ZWN1dGFibGUpOworICAgIFNoYWRlckV4ZWN1dGFi
bGUxMShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSUQzRDExR2VvbWV0cnlT
aGFkZXIgKmV4ZWN1dGFibGUpOworCisgICAgdmlydHVhbCB+U2hhZGVyRXhlY3V0YWJsZTExKCk7
CisKKyAgICBzdGF0aWMgU2hhZGVyRXhlY3V0YWJsZTExICptYWtlU2hhZGVyRXhlY3V0YWJsZTEx
KFNoYWRlckV4ZWN1dGFibGUgKmV4ZWN1dGFibGUpOworCisgICAgSUQzRDExUGl4ZWxTaGFkZXIg
KmdldFBpeGVsU2hhZGVyKCkgY29uc3Q7CisgICAgSUQzRDExVmVydGV4U2hhZGVyICpnZXRWZXJ0
ZXhTaGFkZXIoKSBjb25zdDsKKyAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZ2V0R2VvbWV0cnlT
aGFkZXIoKSBjb25zdDsKKworICAgIElEM0QxMUJ1ZmZlciAqZ2V0Q29uc3RhbnRCdWZmZXIoSUQz
RDExRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGludCByZWdpc3RlckNvdW50KTsKKworICBwcml2
YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTaGFkZXJFeGVjdXRhYmxlMTEpOwor
CisgICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1QaXhlbEV4ZWN1dGFibGU7CisgICAgSUQzRDExVmVy
dGV4U2hhZGVyICptVmVydGV4RXhlY3V0YWJsZTsKKyAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAq
bUdlb21ldHJ5RXhlY3V0YWJsZTsKKworICAgIElEM0QxMUJ1ZmZlciAqbUNvbnN0YW50QnVmZmVy
OworfTsKKworfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1NIQURFUkVYRUNVVEFC
TEUxMV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9Td2FwQ2hhaW4xMS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFpbjExLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4yNjlkNDUxNjY4ZmQwMDA2YzQ2MmY4YTVlMGNjMDE0NmY3MDhhZmIxCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9Td2FwQ2hhaW4xMS5jcHAKQEAgLTAsMCArMSw2NTcgQEAKKyNpbmNsdWRlICJwcmVjb21waWxl
ZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gU3dhcENoYWluMTEuY3BwOiBJbXBsZW1lbnRz
IGEgYmFjay1lbmQgc3BlY2lmaWMgY2xhc3MgZm9yIHRoZSBEM0QxMSBzd2FwIGNoYWluLgorCisj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFpbjExLmgiCisKKyNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgiCisKKyNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaDExdnMu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9w
YXNzdGhyb3VnaHJnYmExMXBzLmgiCisKK25hbWVzcGFjZSByeAoreworCitTd2FwQ2hhaW4xMTo6
U3dhcENoYWluMTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIsIEhXTkQgd2luZG93LCBIQU5ETEUgc2hh
cmVIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGJhY2tCdWZmZXJGb3Jt
YXQsIEdMZW51bSBkZXB0aEJ1ZmZlckZvcm1hdCkKKyAgICA6IG1SZW5kZXJlcihyZW5kZXJlciks
IFN3YXBDaGFpbih3aW5kb3csIHNoYXJlSGFuZGxlLCBiYWNrQnVmZmVyRm9ybWF0LCBkZXB0aEJ1
ZmZlckZvcm1hdCkKK3sKKyAgICBtU3dhcENoYWluID0gTlVMTDsKKyAgICBtQmFja0J1ZmZlclRl
eHR1cmUgPSBOVUxMOworICAgIG1CYWNrQnVmZmVyUlRWaWV3ID0gTlVMTDsKKyAgICBtT2Zmc2Ny
ZWVuVGV4dHVyZSA9IE5VTEw7CisgICAgbU9mZnNjcmVlblJUVmlldyA9IE5VTEw7CisgICAgbU9m
ZnNjcmVlblNSVmlldyA9IE5VTEw7CisgICAgbURlcHRoU3RlbmNpbFRleHR1cmUgPSBOVUxMOwor
ICAgIG1EZXB0aFN0ZW5jaWxEU1ZpZXcgPSBOVUxMOworICAgIG1RdWFkVkIgPSBOVUxMOworICAg
IG1QYXNzVGhyb3VnaFNhbXBsZXIgPSBOVUxMOworICAgIG1QYXNzVGhyb3VnaElMID0gTlVMTDsK
KyAgICBtUGFzc1Rocm91Z2hWUyA9IE5VTEw7CisgICAgbVBhc3NUaHJvdWdoUFMgPSBOVUxMOwor
ICAgIG1XaWR0aCA9IC0xOworICAgIG1IZWlnaHQgPSAtMTsKKyAgICBtU3dhcEludGVydmFsID0g
MDsKKyAgICBtQXBwQ3JlYXRlZFNoYXJlSGFuZGxlID0gbVNoYXJlSGFuZGxlICE9IE5VTEw7Cisg
ICAgbVBhc3NUaHJvdWdoUmVzb3VyY2VzSW5pdCA9IGZhbHNlOworfQorCitTd2FwQ2hhaW4xMTo6
flN3YXBDaGFpbjExKCkKK3sKKyAgICByZWxlYXNlKCk7Cit9CisKK3ZvaWQgU3dhcENoYWluMTE6
OnJlbGVhc2UoKQoreworICAgIFNhZmVSZWxlYXNlKG1Td2FwQ2hhaW4pOworICAgIFNhZmVSZWxl
YXNlKG1CYWNrQnVmZmVyVGV4dHVyZSk7CisgICAgU2FmZVJlbGVhc2UobUJhY2tCdWZmZXJSVFZp
ZXcpOworICAgIFNhZmVSZWxlYXNlKG1PZmZzY3JlZW5UZXh0dXJlKTsKKyAgICBTYWZlUmVsZWFz
ZShtT2Zmc2NyZWVuUlRWaWV3KTsKKyAgICBTYWZlUmVsZWFzZShtT2Zmc2NyZWVuU1JWaWV3KTsK
KyAgICBTYWZlUmVsZWFzZShtRGVwdGhTdGVuY2lsVGV4dHVyZSk7CisgICAgU2FmZVJlbGVhc2Uo
bURlcHRoU3RlbmNpbERTVmlldyk7CisgICAgU2FmZVJlbGVhc2UobVF1YWRWQik7CisgICAgU2Fm
ZVJlbGVhc2UobVBhc3NUaHJvdWdoU2FtcGxlcik7CisgICAgU2FmZVJlbGVhc2UobVBhc3NUaHJv
dWdoSUwpOworICAgIFNhZmVSZWxlYXNlKG1QYXNzVGhyb3VnaFZTKTsKKyAgICBTYWZlUmVsZWFz
ZShtUGFzc1Rocm91Z2hQUyk7CisKKyAgICBpZiAoIW1BcHBDcmVhdGVkU2hhcmVIYW5kbGUpCisg
ICAgeworICAgICAgICBtU2hhcmVIYW5kbGUgPSBOVUxMOworICAgIH0KK30KKwordm9pZCBTd2Fw
Q2hhaW4xMTo6cmVsZWFzZU9mZnNjcmVlblRleHR1cmUoKQoreworICAgIFNhZmVSZWxlYXNlKG1P
ZmZzY3JlZW5UZXh0dXJlKTsKKyAgICBTYWZlUmVsZWFzZShtT2Zmc2NyZWVuUlRWaWV3KTsKKyAg
ICBTYWZlUmVsZWFzZShtT2Zmc2NyZWVuU1JWaWV3KTsKKyAgICBTYWZlUmVsZWFzZShtRGVwdGhT
dGVuY2lsVGV4dHVyZSk7CisgICAgU2FmZVJlbGVhc2UobURlcHRoU3RlbmNpbERTVmlldyk7Cit9
CisKK0VHTGludCBTd2FwQ2hhaW4xMTo6cmVzZXRPZmZzY3JlZW5UZXh0dXJlKGludCBiYWNrYnVm
ZmVyV2lkdGgsIGludCBiYWNrYnVmZmVySGVpZ2h0KQoreworICAgIElEM0QxMURldmljZSAqZGV2
aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgIEFTU0VSVChkZXZpY2UgIT0gTlVM
TCk7CisKKyAgICAvLyBEM0QxMSBkb2VzIG5vdCBhbGxvdyB6ZXJvIHNpemUgdGV4dHVyZXMKKyAg
ICBBU1NFUlQoYmFja2J1ZmZlcldpZHRoID49IDEpOworICAgIEFTU0VSVChiYWNrYnVmZmVySGVp
Z2h0ID49IDEpOworCisgICAgLy8gUHJlc2VydmUgdGhlIHJlbmRlciB0YXJnZXQgY29udGVudAor
ICAgIElEM0QxMVRleHR1cmUyRCAqcHJldmlvdXNPZmZzY3JlZW5UZXh0dXJlID0gbU9mZnNjcmVl
blRleHR1cmU7CisgICAgaWYgKHByZXZpb3VzT2Zmc2NyZWVuVGV4dHVyZSkKKyAgICB7CisgICAg
ICAgIHByZXZpb3VzT2Zmc2NyZWVuVGV4dHVyZS0+QWRkUmVmKCk7CisgICAgfQorICAgIGNvbnN0
IGludCBwcmV2aW91c1dpZHRoID0gbVdpZHRoOworICAgIGNvbnN0IGludCBwcmV2aW91c0hlaWdo
dCA9IG1IZWlnaHQ7CisKKyAgICByZWxlYXNlT2Zmc2NyZWVuVGV4dHVyZSgpOworCisgICAgLy8g
SWYgdGhlIGFwcCBwYXNzZWQgaW4gYSBzaGFyZSBoYW5kbGUsIG9wZW4gdGhlIHJlc291cmNlCisg
ICAgLy8gU2VlIEVHTF9BTkdMRV9kM2Rfc2hhcmVfaGFuZGxlX2NsaWVudF9idWZmZXIKKyAgICBp
ZiAobUFwcENyZWF0ZWRTaGFyZUhhbmRsZSkKKyAgICB7CisgICAgICAgIElEM0QxMVJlc291cmNl
ICp0ZW1wUmVzb3VyY2UxMTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPk9wZW5T
aGFyZWRSZXNvdXJjZShtU2hhcmVIYW5kbGUsIF9fdXVpZG9mKElEM0QxMVJlc291cmNlKSwgKHZv
aWQqKikmdGVtcFJlc291cmNlMTEpOworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAg
ICAgICAgeworICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gb3BlbiB0aGUgc3dhcCBjaGFpbiBw
YnVmZmVyIHNoYXJlIGhhbmRsZTogJTA4bFgiLCByZXN1bHQpOworICAgICAgICAgICAgcmVsZWFz
ZSgpOworICAgICAgICAgICAgcmV0dXJuIEVHTF9CQURfUEFSQU1FVEVSOworICAgICAgICB9CisK
KyAgICAgICAgcmVzdWx0ID0gdGVtcFJlc291cmNlMTEtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9m
KElEM0QxMVRleHR1cmUyRCksICh2b2lkKiopJm1PZmZzY3JlZW5UZXh0dXJlKTsKKyAgICAgICAg
dGVtcFJlc291cmNlMTEtPlJlbGVhc2UoKTsKKworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIHF1ZXJ5IHRleHR1cmUyZCBp
bnRlcmZhY2UgaW4gcGJ1ZmZlciBzaGFyZSBoYW5kbGU6ICUwOGxYIiwgcmVzdWx0KTsKKyAgICAg
ICAgICAgIHJlbGVhc2UoKTsKKyAgICAgICAgICAgIHJldHVybiBFR0xfQkFEX1BBUkFNRVRFUjsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIFZhbGlkYXRlIG9mZnNjcmVlbiB0ZXh0dXJlIHBhcmFt
ZXRlcnMKKyAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0Mgb2Zmc2NyZWVuVGV4dHVyZURlc2Mg
PSB7MH07CisgICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5HZXREZXNjKCZvZmZzY3JlZW5UZXh0
dXJlRGVzYyk7CisKKyAgICAgICAgaWYgKG9mZnNjcmVlblRleHR1cmVEZXNjLldpZHRoICE9IChV
SU5UKWJhY2tidWZmZXJXaWR0aAorICAgICAgICAgICAgfHwgb2Zmc2NyZWVuVGV4dHVyZURlc2Mu
SGVpZ2h0ICE9IChVSU5UKWJhY2tidWZmZXJIZWlnaHQKKyAgICAgICAgICAgIHx8IG9mZnNjcmVl
blRleHR1cmVEZXNjLkZvcm1hdCAhPSBnbF9kM2QxMTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1h
dChtQmFja0J1ZmZlckZvcm1hdCkKKyAgICAgICAgICAgIHx8IG9mZnNjcmVlblRleHR1cmVEZXNj
Lk1pcExldmVscyAhPSAxCisgICAgICAgICAgICB8fCBvZmZzY3JlZW5UZXh0dXJlRGVzYy5BcnJh
eVNpemUgIT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJJbnZhbGlkIHRleHR1cmUg
cGFyYW1ldGVycyBpbiB0aGUgc2hhcmVkIG9mZnNjcmVlbiB0ZXh0dXJlIHBidWZmZXIiKTsKKyAg
ICAgICAgICAgIHJlbGVhc2UoKTsKKyAgICAgICAgICAgIHJldHVybiBFR0xfQkFEX1BBUkFNRVRF
UjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjb25zdCBib29s
IHVzZVNoYXJlZFJlc291cmNlID0gIW1XaW5kb3cgJiYgbVJlbmRlcmVyLT5nZXRTaGFyZUhhbmRs
ZVN1cHBvcnQoKTsKKworICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBvZmZzY3JlZW5UZXh0
dXJlRGVzYyA9IHswfTsKKyAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuV2lkdGggPSBiYWNr
YnVmZmVyV2lkdGg7CisgICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLkhlaWdodCA9IGJhY2ti
dWZmZXJIZWlnaHQ7CisgICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLkZvcm1hdCA9IGdsX2Qz
ZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0KTsKKyAgICAg
ICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuTWlwTGV2ZWxzID0gMTsKKyAgICAgICAgb2Zmc2NyZWVu
VGV4dHVyZURlc2MuQXJyYXlTaXplID0gMTsKKyAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2Mu
U2FtcGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLlNhbXBs
ZURlc2MuUXVhbGl0eSA9IDA7CisgICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLlVzYWdlID0g
RDNEMTFfVVNBR0VfREVGQVVMVDsKKyAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuQmluZEZs
YWdzID0gRDNEMTFfQklORF9SRU5ERVJfVEFSR0VUIHwgRDNEMTFfQklORF9TSEFERVJfUkVTT1VS
Q0U7CisgICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAg
ICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuTWlzY0ZsYWdzID0gdXNlU2hhcmVkUmVzb3VyY2Ug
PyBEM0QxMV9SRVNPVVJDRV9NSVNDX1NIQVJFRCA6IDA7CisKKyAgICAgICAgSFJFU1VMVCByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmb2Zmc2NyZWVuVGV4dHVyZURlc2MsIE5VTEws
ICZtT2Zmc2NyZWVuVGV4dHVyZSk7CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAg
ICAgICB7CisgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgb2Zmc2NyZWVuIHRleHR1
cmU6ICUwOGxYIiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJlbGVhc2UoKTsKKworICAgICAgICAg
ICAgaWYgKGQzZDExOjppc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBFR0xfQ09OVEVYVF9MT1NUOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBF
R0xfQkFEX0FMTE9DOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZDNkMTE6
OlNldERlYnVnTmFtZShtT2Zmc2NyZWVuVGV4dHVyZSwgIk9mZnNjcmVlbiB0ZXh0dXJlIik7CisK
KyAgICAgICAgLy8gRUdMX0FOR0xFX3N1cmZhY2VfZDNkX3RleHR1cmVfMmRfc2hhcmVfaGFuZGxl
IHJlcXVpcmVzIHRoYXQgd2Ugc3RvcmUgYSBzaGFyZSBoYW5kbGUgZm9yIHRoZSBjbGllbnQKKyAg
ICAgICAgaWYgKHVzZVNoYXJlZFJlc291cmNlKQorICAgICAgICB7CisgICAgICAgICAgICBJRFhH
SVJlc291cmNlICpvZmZzY3JlZW5UZXh0dXJlUmVzb3VyY2UgPSBOVUxMOworICAgICAgICAgICAg
cmVzdWx0ID0gbU9mZnNjcmVlblRleHR1cmUtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEWEdJ
UmVzb3VyY2UpLCAodm9pZCoqKSZvZmZzY3JlZW5UZXh0dXJlUmVzb3VyY2UpOworCisgICAgICAg
ICAgICAvLyBGYWxsIGJhY2sgdG8gbm8gc2hhcmUgaGFuZGxlIG9uIGZhaWx1cmUKKyAgICAgICAg
ICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBF
UlIoIkNvdWxkIG5vdCBxdWVyeSBvZmZzY3JlZW4gdGV4dHVyZSByZXNvdXJjZTogJTA4bFgiLCBy
ZXN1bHQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IG9mZnNjcmVlblRleHR1cmVSZXNvdXJjZS0+R2V0U2hh
cmVkSGFuZGxlKCZtU2hhcmVIYW5kbGUpOworICAgICAgICAgICAgICAgIG9mZnNjcmVlblRleHR1
cmVSZXNvdXJjZS0+UmVsZWFzZSgpOworCisgICAgICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1
bHQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbVNoYXJlSGFuZGxl
ID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgZ2V0IG9mZnNjcmVl
biB0ZXh0dXJlIHNoYXJlZCBoYW5kbGU6ICUwOGxYIiwgcmVzdWx0KTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgICAgIAorICAgIEhSRVNV
TFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1PZmZzY3JlZW5UZXh0
dXJlLCBOVUxMLCAmbU9mZnNjcmVlblJUVmlldyk7CisKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOworICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobU9mZnNjcmVlblJUVmlldywgIk9mZnNj
cmVlbiByZW5kZXIgdGFyZ2V0Iik7CisKKyAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRl
clJlc291cmNlVmlldyhtT2Zmc2NyZWVuVGV4dHVyZSwgTlVMTCwgJm1PZmZzY3JlZW5TUlZpZXcp
OworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgZDNkMTE6OlNldERlYnVnTmFt
ZShtT2Zmc2NyZWVuU1JWaWV3LCAiT2Zmc2NyZWVuIHNoYWRlciByZXNvdXJjZSIpOworCisgICAg
aWYgKG1EZXB0aEJ1ZmZlckZvcm1hdCAhPSBHTF9OT05FKQorICAgIHsKKyAgICAgICAgRDNEMTFf
VEVYVFVSRTJEX0RFU0MgZGVwdGhTdGVuY2lsRGVzYyA9IHswfTsKKyAgICAgICAgZGVwdGhTdGVu
Y2lsRGVzYy5XaWR0aCA9IGJhY2tidWZmZXJXaWR0aDsKKyAgICAgICAgZGVwdGhTdGVuY2lsRGVz
Yy5IZWlnaHQgPSBiYWNrYnVmZmVySGVpZ2h0OworICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLkZv
cm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1EZXB0aEJ1ZmZlckZv
cm1hdCk7CisgICAgICAgIGRlcHRoU3RlbmNpbERlc2MuTWlwTGV2ZWxzID0gMTsKKyAgICAgICAg
ZGVwdGhTdGVuY2lsRGVzYy5BcnJheVNpemUgPSAxOworICAgICAgICBkZXB0aFN0ZW5jaWxEZXNj
LlNhbXBsZURlc2MuQ291bnQgPSAxOworICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLlNhbXBsZURl
c2MuUXVhbGl0eSA9IDA7CisgICAgICAgIGRlcHRoU3RlbmNpbERlc2MuVXNhZ2UgPSBEM0QxMV9V
U0FHRV9ERUZBVUxUOworICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLkJpbmRGbGFncyA9IEQzRDEx
X0JJTkRfREVQVEhfU1RFTkNJTDsKKyAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5DUFVBY2Nlc3NG
bGFncyA9IDA7CisgICAgICAgIGRlcHRoU3RlbmNpbERlc2MuTWlzY0ZsYWdzID0gMDsKKworICAg
ICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVwdGhTdGVuY2lsRGVzYywg
TlVMTCwgJm1EZXB0aFN0ZW5jaWxUZXh0dXJlKTsKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQp
KQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgZGVwdGhzdGVu
Y2lsIHN1cmZhY2UgZm9yIG5ldyBzd2FwIGNoYWluOiAweCUwOFgiLCByZXN1bHQpOworICAgICAg
ICAgICAgcmVsZWFzZSgpOworCisgICAgICAgICAgICBpZiAoZDNkMTE6OmlzRGV2aWNlTG9zdEVy
cm9yKHJlc3VsdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEVHTF9D
T05URVhUX0xPU1Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEVHTF9CQURfQUxMT0M7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtRGVwdGhTdGVuY2lsVGV4
dHVyZSwgIkRlcHRoIHN0ZW5jaWwgdGV4dHVyZSIpOworCisgICAgICAgIHJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlRGVwdGhTdGVuY2lsVmlldyhtRGVwdGhTdGVuY2lsVGV4dHVyZSwgTlVMTCwgJm1E
ZXB0aFN0ZW5jaWxEU1ZpZXcpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwor
ICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1EZXB0aFN0ZW5jaWxEU1ZpZXcsICJEZXB0aCBz
dGVuY2lsIHZpZXciKTsKKyAgICB9CisKKyAgICBtV2lkdGggPSBiYWNrYnVmZmVyV2lkdGg7Cisg
ICAgbUhlaWdodCA9IGJhY2tidWZmZXJIZWlnaHQ7CisKKyAgICBpZiAocHJldmlvdXNPZmZzY3Jl
ZW5UZXh0dXJlICE9IE5VTEwpCisgICAgeworICAgICAgICBEM0QxMV9CT1ggc291cmNlQm94ID0g
ezB9OworICAgICAgICBzb3VyY2VCb3gubGVmdCA9IDA7CisgICAgICAgIHNvdXJjZUJveC5yaWdo
dCA9IHN0ZDo6bWluKHByZXZpb3VzV2lkdGgsIG1XaWR0aCk7CisgICAgICAgIHNvdXJjZUJveC50
b3AgPSBzdGQ6Om1heChwcmV2aW91c0hlaWdodCAtIG1IZWlnaHQsIDApOworICAgICAgICBzb3Vy
Y2VCb3guYm90dG9tID0gcHJldmlvdXNIZWlnaHQ7CisgICAgICAgIHNvdXJjZUJveC5mcm9udCA9
IDA7CisgICAgICAgIHNvdXJjZUJveC5iYWNrID0gMTsKKworICAgICAgICBJRDNEMTFEZXZpY2VD
b250ZXh0ICpkZXZpY2VDb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7Cisg
ICAgICAgIGNvbnN0IGludCB5b2Zmc2V0ID0gc3RkOjptYXgobUhlaWdodCAtIHByZXZpb3VzSGVp
Z2h0LCAwKTsKKyAgICAgICAgZGV2aWNlQ29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKG1P
ZmZzY3JlZW5UZXh0dXJlLCAwLCAwLCB5b2Zmc2V0LCAwLCBwcmV2aW91c09mZnNjcmVlblRleHR1
cmUsIDAsICZzb3VyY2VCb3gpOworCisgICAgICAgIHByZXZpb3VzT2Zmc2NyZWVuVGV4dHVyZS0+
UmVsZWFzZSgpOworCisgICAgICAgIGlmIChtU3dhcENoYWluKQorICAgICAgICB7CisgICAgICAg
ICAgICBzd2FwUmVjdCgwLCAwLCBtV2lkdGgsIG1IZWlnaHQpOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIEVHTF9TVUNDRVNTOworfQorCitFR0xpbnQgU3dhcENoYWluMTE6OnJlc2l6
ZShFR0xpbnQgYmFja2J1ZmZlcldpZHRoLCBFR0xpbnQgYmFja2J1ZmZlckhlaWdodCkKK3sKKyAg
ICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICBp
ZiAoZGV2aWNlID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4gRUdMX0JBRF9BQ0NFU1M7
CisgICAgfQorCisgICAgLy8gRUdMIGFsbG93cyBjcmVhdGluZyBhIHN1cmZhY2Ugd2l0aCAweDAg
ZGltZW5zaW9uLCBob3dldmVyLCBEWEdJIGRvZXMgbm90IGxpa2UgMHgwIHN3YXBjaGFpbnMKKyAg
ICBpZiAoYmFja2J1ZmZlcldpZHRoIDwgMSB8fCBiYWNrYnVmZmVySGVpZ2h0IDwgMSkKKyAgICB7
CisgICAgICAgIHJldHVybiBFR0xfU1VDQ0VTUzsKKyAgICB9CisKKyAgICAvLyBDYW4gb25seSBj
YWxsIHJlc2l6ZSBpZiB3ZSBoYXZlIGFscmVhZHkgY3JlYXRlZCBvdXIgc3dhcCBidWZmZXIgYW5k
IHJlc291cmNlcworICAgIEFTU0VSVChtU3dhcENoYWluICYmIG1CYWNrQnVmZmVyVGV4dHVyZSAm
JiBtQmFja0J1ZmZlclJUVmlldyk7CisKKyAgICBTYWZlUmVsZWFzZShtQmFja0J1ZmZlclRleHR1
cmUpOworICAgIFNhZmVSZWxlYXNlKG1CYWNrQnVmZmVyUlRWaWV3KTsKKworICAgIC8vIFJlc2l6
ZSBzd2FwIGNoYWluCisgICAgRFhHSV9GT1JNQVQgYmFja2J1ZmZlckRYR0lGb3JtYXQgPSBnbF9k
M2QxMTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCk7CisgICAg
SFJFU1VMVCByZXN1bHQgPSBtU3dhcENoYWluLT5SZXNpemVCdWZmZXJzKDIsIGJhY2tidWZmZXJX
aWR0aCwgYmFja2J1ZmZlckhlaWdodCwgYmFja2J1ZmZlckRYR0lGb3JtYXQsIDApOworCisgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJFcnJvciByZXNpemluZyBz
d2FwIGNoYWluIGJ1ZmZlcnM6IDB4JTA4WCIsIHJlc3VsdCk7CisgICAgICAgIHJlbGVhc2UoKTsK
KworICAgICAgICBpZiAoZDNkMTE6OmlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBFR0xfQ09OVEVYVF9MT1NUOworICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9CQURfQUxMT0M7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXN1bHQgPSBtU3dhcENoYWluLT5HZXRCdWZmZXIoMCwg
X191dWlkb2YoSUQzRDExVGV4dHVyZTJEKSwgKExQVk9JRCopJm1CYWNrQnVmZmVyVGV4dHVyZSk7
CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICBpZiAoU1VDQ0VFREVEKHJlc3Vs
dCkpCisgICAgeworICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1CYWNrQnVmZmVyVGV4dHVy
ZSwgIkJhY2sgYnVmZmVyIHRleHR1cmUiKTsKKyAgICB9CisKKyAgICByZXN1bHQgPSBkZXZpY2Ut
PkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobUJhY2tCdWZmZXJUZXh0dXJlLCBOVUxMLCAmbUJhY2tC
dWZmZXJSVFZpZXcpOworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgaWYgKFNV
Q0NFRURFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQmFj
a0J1ZmZlclJUVmlldywgIkJhY2sgYnVmZmVyIHJlbmRlciB0YXJnZXQiKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gcmVzZXRPZmZzY3JlZW5UZXh0dXJlKGJhY2tidWZmZXJXaWR0aCwgYmFja2J1ZmZl
ckhlaWdodCk7Cit9CisKK0VHTGludCBTd2FwQ2hhaW4xMTo6cmVzZXQoaW50IGJhY2tidWZmZXJX
aWR0aCwgaW50IGJhY2tidWZmZXJIZWlnaHQsIEVHTGludCBzd2FwSW50ZXJ2YWwpCit7CisgICAg
SUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgaWYg
KGRldmljZSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEVHTF9CQURfQUNDRVNTOwor
ICAgIH0KKworICAgIC8vIFJlbGVhc2Ugc3BlY2lmaWMgcmVzb3VyY2VzIHRvIGZyZWUgdXAgbWVt
b3J5IGZvciB0aGUgbmV3IHJlbmRlciB0YXJnZXQsIHdoaWxlIHRoZQorICAgIC8vIG9sZCByZW5k
ZXIgdGFyZ2V0IHN0aWxsIGV4aXN0cyBmb3IgdGhlIHB1cnBvc2Ugb2YgcHJlc2VydmluZyBpdHMg
Y29udGVudHMuCisgICAgU2FmZVJlbGVhc2UobVN3YXBDaGFpbik7CisgICAgU2FmZVJlbGVhc2Uo
bUJhY2tCdWZmZXJUZXh0dXJlKTsKKyAgICBTYWZlUmVsZWFzZShtQmFja0J1ZmZlclJUVmlldyk7
CisKKyAgICBtU3dhcEludGVydmFsID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihzd2FwSW50
ZXJ2YWwpOworICAgIGlmIChtU3dhcEludGVydmFsID4gNCkKKyAgICB7CisgICAgICAgIC8vIElE
WEdJU3dhcENoYWluOjpQcmVzZW50IGRvY3VtZW50YXRpb24gc3RhdGVzIHRoYXQgdmFsaWQgc3lu
YyBpbnRlcnZhbHMgYXJlIGluIHRoZSBbMCw0XSByYW5nZQorICAgICAgICByZXR1cm4gRUdMX0JB
RF9QQVJBTUVURVI7CisgICAgfQorCisgICAgLy8gRUdMIGFsbG93cyBjcmVhdGluZyBhIHN1cmZh
Y2Ugd2l0aCAweDAgZGltZW5zaW9uLCBob3dldmVyLCBEWEdJIGRvZXMgbm90IGxpa2UgMHgwIHN3
YXBjaGFpbnMKKyAgICBpZiAoYmFja2J1ZmZlcldpZHRoIDwgMSB8fCBiYWNrYnVmZmVySGVpZ2h0
IDwgMSkKKyAgICB7CisgICAgICAgIHJlbGVhc2VPZmZzY3JlZW5UZXh0dXJlKCk7CisgICAgICAg
IHJldHVybiBFR0xfU1VDQ0VTUzsKKyAgICB9CisKKyAgICBpZiAobVdpbmRvdykKKyAgICB7Cisg
ICAgICAgIElEWEdJRmFjdG9yeSAqZmFjdG9yeSA9IG1SZW5kZXJlci0+Z2V0RHhnaUZhY3Rvcnko
KTsKKworICAgICAgICBEWEdJX1NXQVBfQ0hBSU5fREVTQyBzd2FwQ2hhaW5EZXNjID0gezB9Owor
ICAgICAgICBzd2FwQ2hhaW5EZXNjLkJ1ZmZlckNvdW50ID0gMjsKKyAgICAgICAgc3dhcENoYWlu
RGVzYy5CdWZmZXJEZXNjLkZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9y
bWF0KG1CYWNrQnVmZmVyRm9ybWF0KTsKKyAgICAgICAgc3dhcENoYWluRGVzYy5CdWZmZXJEZXNj
LldpZHRoID0gYmFja2J1ZmZlcldpZHRoOworICAgICAgICBzd2FwQ2hhaW5EZXNjLkJ1ZmZlckRl
c2MuSGVpZ2h0ID0gYmFja2J1ZmZlckhlaWdodDsKKyAgICAgICAgc3dhcENoYWluRGVzYy5CdWZm
ZXJEZXNjLlNjYWxpbmcgPSBEWEdJX01PREVfU0NBTElOR19VTlNQRUNJRklFRDsKKyAgICAgICAg
c3dhcENoYWluRGVzYy5CdWZmZXJEZXNjLlNjYW5saW5lT3JkZXJpbmcgPSBEWEdJX01PREVfU0NB
TkxJTkVfT1JERVJfVU5TUEVDSUZJRUQ7CisgICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyRGVz
Yy5SZWZyZXNoUmF0ZS5OdW1lcmF0b3IgPSAwOworICAgICAgICBzd2FwQ2hhaW5EZXNjLkJ1ZmZl
ckRlc2MuUmVmcmVzaFJhdGUuRGVub21pbmF0b3IgPSAxOworICAgICAgICBzd2FwQ2hhaW5EZXNj
LkJ1ZmZlclVzYWdlID0gRFhHSV9VU0FHRV9SRU5ERVJfVEFSR0VUX09VVFBVVDsKKyAgICAgICAg
c3dhcENoYWluRGVzYy5GbGFncyA9IDA7CisgICAgICAgIHN3YXBDaGFpbkRlc2MuT3V0cHV0V2lu
ZG93ID0gbVdpbmRvdzsKKyAgICAgICAgc3dhcENoYWluRGVzYy5TYW1wbGVEZXNjLkNvdW50ID0g
MTsKKyAgICAgICAgc3dhcENoYWluRGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOworICAgICAg
ICBzd2FwQ2hhaW5EZXNjLldpbmRvd2VkID0gVFJVRTsKKworICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IGZhY3RvcnktPkNyZWF0ZVN3YXBDaGFpbihkZXZpY2UsICZzd2FwQ2hhaW5EZXNjLCAmbVN3
YXBDaGFpbik7CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAg
ICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYWRkaXRpb25hbCBzd2FwIGNoYWlucyBvciBv
ZmZzY3JlZW4gc3VyZmFjZXM6ICUwOGxYIiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJlbGVhc2Uo
KTsKKworICAgICAgICAgICAgaWYgKGQzZDExOjppc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBFR0xfQ09OVEVYVF9MT1NUOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBFR0xfQkFEX0FMTE9DOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgcmVzdWx0ID0gbVN3YXBDaGFpbi0+R2V0QnVmZmVyKDAsIF9fdXVpZG9mKElEM0Qx
MVRleHR1cmUyRCksIChMUFZPSUQqKSZtQmFja0J1ZmZlclRleHR1cmUpOworICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1CYWNr
QnVmZmVyVGV4dHVyZSwgIkJhY2sgYnVmZmVyIHRleHR1cmUiKTsKKworICAgICAgICByZXN1bHQg
PSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobUJhY2tCdWZmZXJUZXh0dXJlLCBOVUxM
LCAmbUJhY2tCdWZmZXJSVFZpZXcpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkp
OworICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1CYWNrQnVmZmVyUlRWaWV3LCAiQmFjayBi
dWZmZXIgcmVuZGVyIHRhcmdldCIpOworICAgIH0KKworICAgIC8vIElmIHdlIGFyZSByZXNpemlu
ZyB0aGUgc3dhcCBjaGFpbiwgd2UgZG9uJ3Qgd2lzaCB0byByZWNyZWF0ZSBhbGwgdGhlIHN0YXRp
YyByZXNvdXJjZXMKKyAgICBpZiAoIW1QYXNzVGhyb3VnaFJlc291cmNlc0luaXQpCisgICAgewor
ICAgICAgICBtUGFzc1Rocm91Z2hSZXNvdXJjZXNJbml0ID0gdHJ1ZTsKKyAgICAgICAgaW5pdFBh
c3NUaHJvdWdoUmVzb3VyY2VzKCk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc2V0T2Zmc2NyZWVu
VGV4dHVyZShiYWNrYnVmZmVyV2lkdGgsIGJhY2tidWZmZXJIZWlnaHQpOworfQorCit2b2lkIFN3
YXBDaGFpbjExOjppbml0UGFzc1Rocm91Z2hSZXNvdXJjZXMoKQoreworICAgIElEM0QxMURldmlj
ZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgIEFTU0VSVChkZXZpY2Ug
IT0gTlVMTCk7CisKKyAgICAvLyBNYWtlIHN1cmUgb3VyIHJlc291cmNlcyBhcmUgYWxsIG5vdCBh
bGxvY2F0ZWQsIHdoZW4gd2UgY3JlYXRlCisgICAgQVNTRVJUKG1RdWFkVkIgPT0gTlVMTCAmJiBt
UGFzc1Rocm91Z2hTYW1wbGVyID09IE5VTEwpOworICAgIEFTU0VSVChtUGFzc1Rocm91Z2hJTCA9
PSBOVUxMICYmIG1QYXNzVGhyb3VnaFZTID09IE5VTEwgJiYgbVBhc3NUaHJvdWdoUFMgPT0gTlVM
TCk7CisKKyAgICBEM0QxMV9CVUZGRVJfREVTQyB2YkRlc2M7CisgICAgdmJEZXNjLkJ5dGVXaWR0
aCA9IHNpemVvZihkM2QxMTo6UG9zaXRpb25UZXhDb29yZFZlcnRleCkgKiA0OworICAgIHZiRGVz
Yy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZTkFNSUM7CisgICAgdmJEZXNjLkJpbmRGbGFncyA9IEQz
RDExX0JJTkRfVkVSVEVYX0JVRkZFUjsKKyAgICB2YkRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSBEM0Qx
MV9DUFVfQUNDRVNTX1dSSVRFOworICAgIHZiRGVzYy5NaXNjRmxhZ3MgPSAwOworICAgIHZiRGVz
Yy5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVCdWZmZXIoJnZiRGVzYywgTlVMTCwgJm1RdWFkVkIpOworICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7CisgICAgZDNkMTE6OlNldERlYnVnTmFtZShtUXVhZFZCLCAiU3dhcCBj
aGFpbiBxdWFkIHZlcnRleCBidWZmZXIiKTsKKworICAgIEQzRDExX1NBTVBMRVJfREVTQyBzYW1w
bGVyRGVzYzsKKyAgICBzYW1wbGVyRGVzYy5GaWx0ZXIgPSBEM0QxMV9GSUxURVJfTUlOX01BR19N
SVBfUE9JTlQ7CisgICAgc2FtcGxlckRlc2MuQWRkcmVzc1UgPSBEM0QxMV9URVhUVVJFX0FERFJF
U1NfQ0xBTVA7CisgICAgc2FtcGxlckRlc2MuQWRkcmVzc1YgPSBEM0QxMV9URVhUVVJFX0FERFJF
U1NfQ0xBTVA7CisgICAgc2FtcGxlckRlc2MuQWRkcmVzc1cgPSBEM0QxMV9URVhUVVJFX0FERFJF
U1NfQ0xBTVA7CisgICAgc2FtcGxlckRlc2MuTWlwTE9EQmlhcyA9IDAuMGY7CisgICAgc2FtcGxl
ckRlc2MuTWF4QW5pc290cm9weSA9IDA7CisgICAgc2FtcGxlckRlc2MuQ29tcGFyaXNvbkZ1bmMg
PSBEM0QxMV9DT01QQVJJU09OX05FVkVSOworICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzBd
ID0gMC4wZjsKKyAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclsxXSA9IDAuMGY7CisgICAgc2Ft
cGxlckRlc2MuQm9yZGVyQ29sb3JbMl0gPSAwLjBmOworICAgIHNhbXBsZXJEZXNjLkJvcmRlckNv
bG9yWzNdID0gMC4wZjsKKyAgICBzYW1wbGVyRGVzYy5NaW5MT0QgPSAwOworICAgIHNhbXBsZXJE
ZXNjLk1heExPRCA9IEQzRDExX0ZMT0FUMzJfTUFYOworCisgICAgcmVzdWx0ID0gZGV2aWNlLT5D
cmVhdGVTYW1wbGVyU3RhdGUoJnNhbXBsZXJEZXNjLCAmbVBhc3NUaHJvdWdoU2FtcGxlcik7Cisg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Q
YXNzVGhyb3VnaFNhbXBsZXIsICJTd2FwIGNoYWluIHBhc3MgdGhyb3VnaCBzYW1wbGVyIik7CisK
KyAgICBEM0QxMV9JTlBVVF9FTEVNRU5UX0RFU0MgcXVhZExheW91dFtdID0KKyAgICB7CisgICAg
ICAgIHsgIlBPU0lUSU9OIiwgMCwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCAwLCAwLCBEM0Qx
MV9JTlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAgfSwKKyAgICAgICAgeyAiVEVYQ09PUkQiLCAwLCBE
WEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDAsIDgsIEQzRDExX0lOUFVUX1BFUl9WRVJURVhfREFU
QSwgMCB9LAorICAgIH07CisKKyAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUlucHV0TGF5b3V0
KHF1YWRMYXlvdXQsIDIsIGdfVlNfUGFzc3Rocm91Z2gsIHNpemVvZihnX1ZTX1Bhc3N0aHJvdWdo
KSwgJm1QYXNzVGhyb3VnaElMKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAg
IGQzZDExOjpTZXREZWJ1Z05hbWUobVBhc3NUaHJvdWdoSUwsICJTd2FwIGNoYWluIHBhc3MgdGhy
b3VnaCBsYXlvdXQiKTsKKworICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVy
KGdfVlNfUGFzc3Rocm91Z2gsIHNpemVvZihnX1ZTX1Bhc3N0aHJvdWdoKSwgTlVMTCwgJm1QYXNz
VGhyb3VnaFZTKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgIGQzZDExOjpT
ZXREZWJ1Z05hbWUobVBhc3NUaHJvdWdoVlMsICJTd2FwIGNoYWluIHBhc3MgdGhyb3VnaCB2ZXJ0
ZXggc2hhZGVyIik7CisKKyAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdf
UFNfUGFzc3Rocm91Z2hSR0JBLCBzaXplb2YoZ19QU19QYXNzdGhyb3VnaFJHQkEpLCBOVUxMLCAm
bVBhc3NUaHJvdWdoUFMpOworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgZDNk
MTE6OlNldERlYnVnTmFtZShtUGFzc1Rocm91Z2hQUywgIlN3YXAgY2hhaW4gcGFzcyB0aHJvdWdo
IHBpeGVsIHNoYWRlciIpOworfQorCisvLyBwYXJhbWV0ZXJzIHNob3VsZCBiZSB2YWxpZGF0ZWQv
Y2xhbXBlZCBieSBjYWxsZXIKK0VHTGludCBTd2FwQ2hhaW4xMTo6c3dhcFJlY3QoRUdMaW50IHgs
IEVHTGludCB5LCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQpCit7CisgICAgaWYgKCFtU3dh
cENoYWluKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEVHTF9TVUNDRVNTOworICAgIH0KKworICAg
IElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBJRDNE
MTFEZXZpY2VDb250ZXh0ICpkZXZpY2VDb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250
ZXh0KCk7CisKKyAgICAvLyBTZXQgdmVydGljZXMKKyAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VS
Q0UgbWFwcGVkUmVzb3VyY2U7CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2VDb250ZXh0LT5N
YXAobVF1YWRWQiwgMCwgRDNEMTFfTUFQX1dSSVRFX0RJU0NBUkQsIDAsICZtYXBwZWRSZXNvdXJj
ZSk7CisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEVHTF9C
QURfQUNDRVNTOworICAgIH0KKworICAgIGQzZDExOjpQb3NpdGlvblRleENvb3JkVmVydGV4ICp2
ZXJ0aWNlcyA9IHN0YXRpY19jYXN0PGQzZDExOjpQb3NpdGlvblRleENvb3JkVmVydGV4Kj4obWFw
cGVkUmVzb3VyY2UucERhdGEpOworCisgICAgLy8gQ3JlYXRlIGEgcXVhZCBpbiBob21vZ2VuZW91
cyBjb29yZGluYXRlcworICAgIGZsb2F0IHgxID0gKHggLyBmbG9hdChtV2lkdGgpKSAqIDIuMGYg
LSAxLjBmOworICAgIGZsb2F0IHkxID0gKHkgLyBmbG9hdChtSGVpZ2h0KSkgKiAyLjBmIC0gMS4w
ZjsKKyAgICBmbG9hdCB4MiA9ICgoeCArIHdpZHRoKSAvIGZsb2F0KG1XaWR0aCkpICogMi4wZiAt
IDEuMGY7CisgICAgZmxvYXQgeTIgPSAoKHkgKyBoZWlnaHQpIC8gZmxvYXQobUhlaWdodCkpICog
Mi4wZiAtIDEuMGY7CisKKyAgICBmbG9hdCB1MSA9IHggLyBmbG9hdChtV2lkdGgpOworICAgIGZs
b2F0IHYxID0geSAvIGZsb2F0KG1IZWlnaHQpOworICAgIGZsb2F0IHUyID0gKHggKyB3aWR0aCkg
LyBmbG9hdChtV2lkdGgpOworICAgIGZsb2F0IHYyID0gKHkgKyBoZWlnaHQpIC8gZmxvYXQobUhl
aWdodCk7CisKKyAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNb
MF0sIHgxLCB5MSwgdTEsIHYxKTsKKyAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRl
eCgmdmVydGljZXNbMV0sIHgxLCB5MiwgdTEsIHYyKTsKKyAgICBkM2QxMTo6U2V0UG9zaXRpb25U
ZXhDb29yZFZlcnRleCgmdmVydGljZXNbMl0sIHgyLCB5MSwgdTIsIHYxKTsKKyAgICBkM2QxMTo6
U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNbM10sIHgyLCB5MiwgdTIsIHYyKTsK
KworICAgIGRldmljZUNvbnRleHQtPlVubWFwKG1RdWFkVkIsIDApOworCisgICAgc3RhdGljIFVJ
TlQgc3RyaWRlID0gc2l6ZW9mKGQzZDExOjpQb3NpdGlvblRleENvb3JkVmVydGV4KTsKKyAgICBz
dGF0aWMgVUlOVCBzdGFydElkeCA9IDA7CisgICAgZGV2aWNlQ29udGV4dC0+SUFTZXRWZXJ0ZXhC
dWZmZXJzKDAsIDEsICZtUXVhZFZCLCAmc3RyaWRlLCAmc3RhcnRJZHgpOworCisgICAgLy8gQXBw
bHkgc3RhdGUKKyAgICBkZXZpY2VDb250ZXh0LT5PTVNldERlcHRoU3RlbmNpbFN0YXRlKE5VTEws
IDB4RkZGRkZGRkYpOworCisgICAgc3RhdGljIGNvbnN0IGZsb2F0IGJsZW5kRmFjdG9yWzRdID0g
eyAxLjBmLCAxLjBmLCAxLjBmLCAxLjBmIH07CisgICAgZGV2aWNlQ29udGV4dC0+T01TZXRCbGVu
ZFN0YXRlKE5VTEwsIGJsZW5kRmFjdG9yLCAweEZGRkZGRkYpOworCisgICAgZGV2aWNlQ29udGV4
dC0+UlNTZXRTdGF0ZShOVUxMKTsKKworICAgIC8vIEFwcGx5IHNoYWRlcnMKKyAgICBkZXZpY2VD
b250ZXh0LT5JQVNldElucHV0TGF5b3V0KG1QYXNzVGhyb3VnaElMKTsKKyAgICBkZXZpY2VDb250
ZXh0LT5JQVNldFByaW1pdGl2ZVRvcG9sb2d5KEQzRF9QUklNSVRJVkVfVE9QT0xPR1lfVFJJQU5H
TEVTVFJJUCk7CisgICAgZGV2aWNlQ29udGV4dC0+VlNTZXRTaGFkZXIobVBhc3NUaHJvdWdoVlMs
IE5VTEwsIDApOworICAgIGRldmljZUNvbnRleHQtPlBTU2V0U2hhZGVyKG1QYXNzVGhyb3VnaFBT
LCBOVUxMLCAwKTsKKyAgICBkZXZpY2VDb250ZXh0LT5HU1NldFNoYWRlcihOVUxMLCBOVUxMLCAw
KTsKKworICAgIC8vIEFwcGx5IHJlbmRlciB0YXJnZXRzCisgICAgbVJlbmRlcmVyLT5zZXRPbmVU
aW1lUmVuZGVyVGFyZ2V0KG1CYWNrQnVmZmVyUlRWaWV3KTsKKworICAgIC8vIFNldCB0aGUgdmll
d3BvcnQKKyAgICBEM0QxMV9WSUVXUE9SVCB2aWV3cG9ydDsKKyAgICB2aWV3cG9ydC5Ub3BMZWZ0
WCA9IDA7CisgICAgdmlld3BvcnQuVG9wTGVmdFkgPSAwOworICAgIHZpZXdwb3J0LldpZHRoID0g
bVdpZHRoOworICAgIHZpZXdwb3J0LkhlaWdodCA9IG1IZWlnaHQ7CisgICAgdmlld3BvcnQuTWlu
RGVwdGggPSAwLjBmOworICAgIHZpZXdwb3J0Lk1heERlcHRoID0gMS4wZjsKKyAgICBkZXZpY2VD
b250ZXh0LT5SU1NldFZpZXdwb3J0cygxLCAmdmlld3BvcnQpOworCisgICAgLy8gQXBwbHkgdGV4
dHVyZXMKKyAgICBkZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlclJlc291cmNlcygwLCAxLCAmbU9m
ZnNjcmVlblNSVmlldyk7CisgICAgZGV2aWNlQ29udGV4dC0+UFNTZXRTYW1wbGVycygwLCAxLCAm
bVBhc3NUaHJvdWdoU2FtcGxlcik7CisKKyAgICAvLyBEcmF3CisgICAgZGV2aWNlQ29udGV4dC0+
RHJhdyg0LCAwKTsKKworI2lmIEFOR0xFX0ZPUkNFX1ZTWU5DX09GRgorICAgIHJlc3VsdCA9IG1T
d2FwQ2hhaW4tPlByZXNlbnQoMCwgMCk7CisjZWxzZQorICAgIHJlc3VsdCA9IG1Td2FwQ2hhaW4t
PlByZXNlbnQobVN3YXBJbnRlcnZhbCwgMCk7CisjZW5kaWYKKworICAgIGlmIChyZXN1bHQgPT0g
RFhHSV9FUlJPUl9ERVZJQ0VfUkVNT1ZFRCkKKyAgICB7CisgICAgICAgIEhSRVNVTFQgcmVtb3Zl
ZFJlYXNvbiA9IGRldmljZS0+R2V0RGV2aWNlUmVtb3ZlZFJlYXNvbigpOworICAgICAgICBFUlIo
IlByZXNlbnQgZmFpbGVkOiB0aGUgRDNEMTEgZGV2aWNlIHdhcyByZW1vdmVkOiAweCUwOFgiLCBy
ZW1vdmVkUmVhc29uKTsKKyAgICAgICAgcmV0dXJuIEVHTF9DT05URVhUX0xPU1Q7CisgICAgfQor
ICAgIGVsc2UgaWYgKHJlc3VsdCA9PSBEWEdJX0VSUk9SX0RFVklDRV9SRVNFVCkKKyAgICB7Cisg
ICAgICAgIEVSUigiUHJlc2VudCBmYWlsZWQ6IHRoZSBEM0QxMSBkZXZpY2Ugd2FzIHJlc2V0IGZy
b20gYSBiYWQgY29tbWFuZC4iKTsKKyAgICAgICAgcmV0dXJuIEVHTF9DT05URVhUX0xPU1Q7Cisg
ICAgfQorICAgIGVsc2UgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJQ
cmVzZW50IGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgMHglMDhYIiwgcmVzdWx0KTsKKyAgICB9CisK
KyAgICAvLyBVbmJpbmQKKyAgICBzdGF0aWMgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpjb25z
dCBudWxsU1JWID0gTlVMTDsKKyAgICBkZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlclJlc291cmNl
cygwLCAxLCAmbnVsbFNSVik7CisKKyAgICBtUmVuZGVyZXItPnVuYXBwbHlSZW5kZXJUYXJnZXRz
KCk7CisgICAgbVJlbmRlcmVyLT5tYXJrQWxsU3RhdGVEaXJ0eSgpOworCisgICAgcmV0dXJuIEVH
TF9TVUNDRVNTOworfQorCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHRleHR1cmUuCisvLyBj
YWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHRleHR1cmUKK0lEM0QxMVRleHR1cmUy
RCAqU3dhcENoYWluMTE6OmdldE9mZnNjcmVlblRleHR1cmUoKQoreworICAgIGlmIChtT2Zmc2Ny
ZWVuVGV4dHVyZSkKKyAgICB7CisgICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5BZGRSZWYoKTsK
KyAgICB9CisKKyAgICByZXR1cm4gbU9mZnNjcmVlblRleHR1cmU7Cit9CisKKy8vIEluY3JlbWVu
dHMgcmVmY291bnQgb24gdmlldy4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJu
ZWQgdmlldworSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqU3dhcENoYWluMTE6OmdldFJlbmRlclRh
cmdldCgpCit7CisgICAgaWYgKG1PZmZzY3JlZW5SVFZpZXcpCisgICAgeworICAgICAgICBtT2Zm
c2NyZWVuUlRWaWV3LT5BZGRSZWYoKTsKKyAgICB9CisKKyAgICByZXR1cm4gbU9mZnNjcmVlblJU
VmlldzsKK30KKworLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiB2aWV3LgorLy8gY2FsbGVyIG11
c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCB2aWV3CitJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcg
KlN3YXBDaGFpbjExOjpnZXRSZW5kZXJUYXJnZXRTaGFkZXJSZXNvdXJjZSgpCit7CisgICAgaWYg
KG1PZmZzY3JlZW5TUlZpZXcpCisgICAgeworICAgICAgICBtT2Zmc2NyZWVuU1JWaWV3LT5BZGRS
ZWYoKTsKKyAgICB9CisKKyAgICByZXR1cm4gbU9mZnNjcmVlblNSVmlldzsKK30KKworLy8gSW5j
cmVtZW50cyByZWZjb3VudCBvbiB2aWV3LgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSBy
ZXR1cm5lZCB2aWV3CitJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpTd2FwQ2hhaW4xMTo6Z2V0RGVw
dGhTdGVuY2lsKCkKK3sKKyAgICBpZiAobURlcHRoU3RlbmNpbERTVmlldykKKyAgICB7CisgICAg
ICAgIG1EZXB0aFN0ZW5jaWxEU1ZpZXctPkFkZFJlZigpOworICAgIH0KKworICAgIHJldHVybiBt
RGVwdGhTdGVuY2lsRFNWaWV3OworfQorCitJRDNEMTFUZXh0dXJlMkQgKlN3YXBDaGFpbjExOjpn
ZXREZXB0aFN0ZW5jaWxUZXh0dXJlKCkKK3sKKyAgICBpZiAobURlcHRoU3RlbmNpbFRleHR1cmUp
CisgICAgeworICAgICAgICBtRGVwdGhTdGVuY2lsVGV4dHVyZS0+QWRkUmVmKCk7CisgICAgfQor
CisgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWxUZXh0dXJlOworfQorCitTd2FwQ2hhaW4xMSAqU3dh
cENoYWluMTE6Om1ha2VTd2FwQ2hhaW4xMShTd2FwQ2hhaW4gKnN3YXBDaGFpbikKK3sKKyAgICBB
U1NFUlQoSEFTX0RZTkFNSUNfVFlQRShyeDo6U3dhcENoYWluMTEqLCBzd2FwQ2hhaW4pKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8cng6OlN3YXBDaGFpbjExKj4oc3dhcENoYWluKTsKK30KKwor
dm9pZCBTd2FwQ2hhaW4xMTo6cmVjcmVhdGUoKQoreworICAgIC8vIHBvc3NpYmx5IHNob3VsZCB1
c2UgdGhpcyBtZXRob2QgaW5zdGVhZCBvZiByZXNldAorfQorCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFp
bjExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDExL1N3YXBDaGFpbjExLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODAwMTA0NjAyZTM1YjBiY2JhMTEwMzlhMTZl
YmZjNjExMTYxZWY2MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dhcENoYWluMTEuaApAQCAtMCwwICsxLDc4
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworLy8gU3dhcENoYWluMTEuaDogRGVmaW5lcyBhIGJhY2stZW5k
IHNwZWNpZmljIGNsYXNzIGZvciB0aGUgRDNEMTEgc3dhcCBjaGFpbi4KKworI2lmbmRlZiBMSUJH
TEVTVjJfUkVOREVSRVJfU1dBUENIQUlOMTFfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVS
X1NXQVBDSEFJTjExX0hfCisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9Td2FwQ2hhaW4uaCIKKworbmFtZXNwYWNlIHJ4Cit7Citj
bGFzcyBSZW5kZXJlcjExOworCitjbGFzcyBTd2FwQ2hhaW4xMSA6IHB1YmxpYyBTd2FwQ2hhaW4K
K3sKKyAgcHVibGljOgorICAgIFN3YXBDaGFpbjExKFJlbmRlcmVyMTEgKnJlbmRlcmVyLCBIV05E
IHdpbmRvdywgSEFORExFIHNoYXJlSGFuZGxlLAorICAgICAgICAgICAgICAgIEdMZW51bSBiYWNr
QnVmZmVyRm9ybWF0LCBHTGVudW0gZGVwdGhCdWZmZXJGb3JtYXQpOworICAgIHZpcnR1YWwgflN3
YXBDaGFpbjExKCk7CisKKyAgICBFR0xpbnQgcmVzaXplKEVHTGludCBiYWNrYnVmZmVyV2lkdGgs
IEVHTGludCBiYWNrYnVmZmVySGVpZ2h0KTsKKyAgICB2aXJ0dWFsIEVHTGludCByZXNldChFR0xp
bnQgYmFja2J1ZmZlcldpZHRoLCBFR0xpbnQgYmFja2J1ZmZlckhlaWdodCwgRUdMaW50IHN3YXBJ
bnRlcnZhbCk7CisgICAgdmlydHVhbCBFR0xpbnQgc3dhcFJlY3QoRUdMaW50IHgsIEVHTGludCB5
LCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQpOworICAgIHZpcnR1YWwgdm9pZCByZWNyZWF0
ZSgpOworCisgICAgdmlydHVhbCBJRDNEMTFUZXh0dXJlMkQgKmdldE9mZnNjcmVlblRleHR1cmUo
KTsKKyAgICB2aXJ0dWFsIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmdldFJlbmRlclRhcmdldCgp
OworICAgIHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpnZXRSZW5kZXJUYXJnZXRT
aGFkZXJSZXNvdXJjZSgpOworCisgICAgdmlydHVhbCBJRDNEMTFUZXh0dXJlMkQgKmdldERlcHRo
U3RlbmNpbFRleHR1cmUoKTsKKyAgICB2aXJ0dWFsIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKmdl
dERlcHRoU3RlbmNpbCgpOworCisgICAgRUdMaW50IGdldFdpZHRoKCkgY29uc3QgeyByZXR1cm4g
bVdpZHRoOyB9CisgICAgRUdMaW50IGdldEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1IZWlnaHQ7
IH0KKworICAgIHN0YXRpYyBTd2FwQ2hhaW4xMSAqbWFrZVN3YXBDaGFpbjExKFN3YXBDaGFpbiAq
c3dhcENoYWluKTsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihT
d2FwQ2hhaW4xMSk7CisKKyAgICB2b2lkIHJlbGVhc2UoKTsKKyAgICB2b2lkIGluaXRQYXNzVGhy
b3VnaFJlc291cmNlcygpOworICAgIHZvaWQgcmVsZWFzZU9mZnNjcmVlblRleHR1cmUoKTsKKyAg
ICBFR0xpbnQgcmVzZXRPZmZzY3JlZW5UZXh0dXJlKGludCBiYWNrYnVmZmVyV2lkdGgsIGludCBi
YWNrYnVmZmVySGVpZ2h0KTsKKworICAgIFJlbmRlcmVyMTEgKm1SZW5kZXJlcjsKKyAgICBFR0xp
bnQgbUhlaWdodDsKKyAgICBFR0xpbnQgbVdpZHRoOworICAgIGJvb2wgbUFwcENyZWF0ZWRTaGFy
ZUhhbmRsZTsKKyAgICB1bnNpZ25lZCBpbnQgbVN3YXBJbnRlcnZhbDsKKyAgICBib29sIG1QYXNz
VGhyb3VnaFJlc291cmNlc0luaXQ7CisKKyAgICBJRFhHSVN3YXBDaGFpbiAqbVN3YXBDaGFpbjsK
KworICAgIElEM0QxMVRleHR1cmUyRCAqbUJhY2tCdWZmZXJUZXh0dXJlOworICAgIElEM0QxMVJl
bmRlclRhcmdldFZpZXcgKm1CYWNrQnVmZmVyUlRWaWV3OworCisgICAgSUQzRDExVGV4dHVyZTJE
ICptT2Zmc2NyZWVuVGV4dHVyZTsKKyAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICptT2Zmc2Ny
ZWVuUlRWaWV3OworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqbU9mZnNjcmVlblNSVmll
dzsKKworICAgIElEM0QxMVRleHR1cmUyRCAqbURlcHRoU3RlbmNpbFRleHR1cmU7CisgICAgSUQz
RDExRGVwdGhTdGVuY2lsVmlldyAqbURlcHRoU3RlbmNpbERTVmlldzsKKworICAgIElEM0QxMUJ1
ZmZlciAqbVF1YWRWQjsKKyAgICBJRDNEMTFTYW1wbGVyU3RhdGUgKm1QYXNzVGhyb3VnaFNhbXBs
ZXI7CisgICAgSUQzRDExSW5wdXRMYXlvdXQgKm1QYXNzVGhyb3VnaElMOworICAgIElEM0QxMVZl
cnRleFNoYWRlciAqbVBhc3NUaHJvdWdoVlM7CisgICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1QYXNz
VGhyb3VnaFBTOworfTsKKworfQorI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9TV0FQQ0hB
SU4xMV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9UZXh0dXJlU3RvcmFnZTExLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVGV4dHVyZVN0b3JhZ2UxMS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNWY2ZWEyMTJkNWEwNjAxNzk3OThhOGNkMGY4MDI3NGE5NWM2YjQ5ZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvVGV4dHVyZVN0b3JhZ2UxMS5jcHAKQEAgLTAsMCArMSw2NjcgQEAKKyNpbmNs
dWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFRleHR1cmVTdG9yYWdlMTEu
Y3BwOiBJbXBsZW1lbnRzIHRoZSBhYnN0cmFjdCByeDo6VGV4dHVyZVN0b3JhZ2UxMSBjbGFzcyBh
bmQgaXRzIGNvbmNyZXRlIGRlcml2ZWQKKy8vIGNsYXNzZXMgVGV4dHVyZVN0b3JhZ2UxMV8yRCBh
bmQgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlLCB3aGljaCBhY3QgYXMgdGhlIGludGVyZmFjZSB0byB0
aGUgRDNEMTEgdGV4dHVyZS4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9U
ZXh0dXJlU3RvcmFnZTExLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
UmVuZGVyZXIxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJU
YXJnZXQxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9Td2FwQ2hhaW4x
MS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxz
LmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL21haW4uaCIKKworbmFtZXNwYWNlIHJ4Cit7CisKK1RleHR1cmVTdG9yYWdlMTE6OlRleHR1
cmVTdG9yYWdlMTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBVSU5UIGJpbmRGbGFncykKKyAgICA6IG1C
aW5kRmxhZ3MoYmluZEZsYWdzKSwKKyAgICAgIG1Mb2RPZmZzZXQoMCksCisgICAgICBtTWlwTGV2
ZWxzKDApLAorICAgICAgbVRleHR1cmUoTlVMTCksCisgICAgICBtVGV4dHVyZUZvcm1hdChEWEdJ
X0ZPUk1BVF9VTktOT1dOKSwKKyAgICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdChEWEdJX0ZPUk1B
VF9VTktOT1dOKSwKKyAgICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQoRFhHSV9GT1JNQVRfVU5LTk9X
TiksCisgICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFUX1VOS05PV04pLAorICAg
ICAgbVNSVihOVUxMKSwKKyAgICAgIG1UZXh0dXJlV2lkdGgoMCksCisgICAgICBtVGV4dHVyZUhl
aWdodCgwKQoreworICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKHJl
bmRlcmVyKTsKK30KKworVGV4dHVyZVN0b3JhZ2UxMTo6flRleHR1cmVTdG9yYWdlMTEoKQorewor
fQorCitUZXh0dXJlU3RvcmFnZTExICpUZXh0dXJlU3RvcmFnZTExOjptYWtlVGV4dHVyZVN0b3Jh
Z2UxMShUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSkKK3sKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNf
VFlQRShUZXh0dXJlU3RvcmFnZTExKiwgc3RvcmFnZSkpOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUZXh0dXJlU3RvcmFnZTExKj4oc3RvcmFnZSk7Cit9CisKK0RXT1JEIFRleHR1cmVTdG9yYWdl
MTE6OkdldFRleHR1cmVCaW5kRmxhZ3MoRFhHSV9GT1JNQVQgZm9ybWF0LCBHTGVudW0gZ2x1c2Fn
ZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUpCit7CisgICAgVUlOVCBiaW5kRmxhZ3MgPSBEM0QxMV9C
SU5EX1NIQURFUl9SRVNPVVJDRTsKKyAgICAKKyAgICBpZiAoZDNkMTE6OklzRGVwdGhTdGVuY2ls
Rm9ybWF0KGZvcm1hdCkpCisgICAgeworICAgICAgICBiaW5kRmxhZ3MgfD0gRDNEMTFfQklORF9E
RVBUSF9TVEVOQ0lMOworICAgIH0KKyAgICBlbHNlIGlmKGZvcmNlUmVuZGVyYWJsZSB8fCAoVGV4
dHVyZVN0b3JhZ2UxMTo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShmb3JtYXQpICYmIChnbHVz
YWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpKSkKKyAgICB7CisgICAgICAg
IGJpbmRGbGFncyB8PSBEM0QxMV9CSU5EX1JFTkRFUl9UQVJHRVQ7CisgICAgfQorICAgIHJldHVy
biBiaW5kRmxhZ3M7Cit9CisKK2Jvb2wgVGV4dHVyZVN0b3JhZ2UxMTo6SXNUZXh0dXJlRm9ybWF0
UmVuZGVyYWJsZShEWEdJX0ZPUk1BVCBmb3JtYXQpCit7CisgICAgc3dpdGNoKGZvcm1hdCkKKyAg
ICB7CisgICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOgorICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9BOF9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMy
X0ZMT0FUOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6CisgICAg
ICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9SOF9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9VTk9STToKKyAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfUjE2X0ZMT0FUOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZf
RkxPQVQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFf
VU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STTogCisgICAgICBjYXNlIERY
R0lfRk9STUFUX0JDM19VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZM
T0FUOiAvLyBub3QgcmVuZGVyYWJsZSBvbiBhbGwgZGV2aWNlcworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCitVSU5UIFRleHR1cmVTdG9yYWdlMTE6OmdldEJpbmRGbGFn
cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1CaW5kRmxhZ3M7Cit9CisKK0lEM0QxMVRleHR1cmUy
RCAqVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0QmFzZVRleHR1cmUoKSBjb25zdAoreworICAgIHJldHVy
biBtVGV4dHVyZTsKK30KKworaW50IFRleHR1cmVTdG9yYWdlMTE6OmdldExvZE9mZnNldCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1Mb2RPZmZzZXQ7Cit9CisKK2Jvb2wgVGV4dHVyZVN0b3JhZ2Ux
MTo6aXNSZW5kZXJUYXJnZXQoKSBjb25zdAoreworICAgIHJldHVybiAobUJpbmRGbGFncyAmIChE
M0QxMV9CSU5EX1JFTkRFUl9UQVJHRVQgfCBEM0QxMV9CSU5EX0RFUFRIX1NURU5DSUwpKSAhPSAw
OworfQorICAgIAorYm9vbCBUZXh0dXJlU3RvcmFnZTExOjppc01hbmFnZWQoKSBjb25zdAorewor
ICAgIHJldHVybiBmYWxzZTsKK30KKworaW50IFRleHR1cmVTdG9yYWdlMTE6OmxldmVsQ291bnQo
KQoreworICAgIGludCBsZXZlbHMgPSAwOworICAgIGlmIChnZXRCYXNlVGV4dHVyZSgpKQorICAg
IHsKKyAgICAgICAgbGV2ZWxzID0gbU1pcExldmVscyAtIGdldExvZE9mZnNldCgpOworICAgIH0K
KyAgICByZXR1cm4gbGV2ZWxzOworfQorCitVSU5UIFRleHR1cmVTdG9yYWdlMTE6OmdldFN1YnJl
c291cmNlSW5kZXgoaW50IGxldmVsLCBpbnQgZmFjZUluZGV4KQoreworICAgIFVJTlQgaW5kZXgg
PSAwOworICAgIGlmIChnZXRCYXNlVGV4dHVyZSgpKQorICAgIHsKKyAgICAgICAgaW5kZXggPSBE
M0QxMUNhbGNTdWJyZXNvdXJjZShsZXZlbCwgZmFjZUluZGV4LCBtTWlwTGV2ZWxzKTsKKyAgICB9
CisgICAgcmV0dXJuIGluZGV4OworfQorCitib29sIFRleHR1cmVTdG9yYWdlMTE6OnVwZGF0ZVN1
YnJlc291cmNlTGV2ZWwoSUQzRDExVGV4dHVyZTJEICpzcmNUZXh0dXJlLCB1bnNpZ25lZCBpbnQg
c291cmNlU3VicmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGxldmVsLCBpbnQgZmFjZSwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBpZiAoc3JjVGV4dHVyZSkKKyAgICB7Cisg
ICAgICAgIC8vIFJvdW5kIHVwIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IHRvIHRoZSBuZWFyZXN0IG11
bHRpcGxlIG9mIGRpbWVuc2lvbiBhbGlnbm1lbnQKKyAgICAgICAgdW5zaWduZWQgaW50IGRpbWVu
c2lvbkFsaWdubWVudCA9IGQzZDExOjpHZXRUZXh0dXJlRm9ybWF0RGltZW5zaW9uQWxpZ25tZW50
KG1UZXh0dXJlRm9ybWF0KTsKKyAgICAgICAgd2lkdGggPSB3aWR0aCArIGRpbWVuc2lvbkFsaWdu
bWVudCAtIDEgLSAod2lkdGggLSAxKSAlIGRpbWVuc2lvbkFsaWdubWVudDsKKyAgICAgICAgaGVp
Z2h0ID0gaGVpZ2h0ICsgZGltZW5zaW9uQWxpZ25tZW50IC0gMSAtIChoZWlnaHQgLSAxKSAlIGRp
bWVuc2lvbkFsaWdubWVudDsKKworICAgICAgICBEM0QxMV9CT1ggc3JjQm94OworICAgICAgICBz
cmNCb3gubGVmdCA9IHhvZmZzZXQ7CisgICAgICAgIHNyY0JveC50b3AgPSB5b2Zmc2V0OworICAg
ICAgICBzcmNCb3gucmlnaHQgPSB4b2Zmc2V0ICsgd2lkdGg7CisgICAgICAgIHNyY0JveC5ib3R0
b20gPSB5b2Zmc2V0ICsgaGVpZ2h0OworICAgICAgICBzcmNCb3guZnJvbnQgPSAwOworICAgICAg
ICBzcmNCb3guYmFjayA9IDE7CisKKyAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4
dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworICAgICAgICAKKyAgICAgICAgQVNT
RVJUKGdldEJhc2VUZXh0dXJlKCkpOworICAgICAgICBjb250ZXh0LT5Db3B5U3VicmVzb3VyY2VS
ZWdpb24oZ2V0QmFzZVRleHR1cmUoKSwgZ2V0U3VicmVzb3VyY2VJbmRleChsZXZlbCArIG1Mb2RP
ZmZzZXQsIGZhY2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG9m
ZnNldCwgeW9mZnNldCwgMCwgc3JjVGV4dHVyZSwgc291cmNlU3VicmVzb3VyY2UsICZzcmNCb3gp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2VuZXJhdGVNaXBtYXBMYXllcihSZW5kZXJUYXJnZXQx
MSAqc291cmNlLCBSZW5kZXJUYXJnZXQxMSAqZGVzdCkKK3sKKyAgICBpZiAoc291cmNlICYmIGRl
c3QpCisgICAgeworICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNvdXJjZVNSViA9
IHNvdXJjZS0+Z2V0U2hhZGVyUmVzb3VyY2VWaWV3KCk7CisgICAgICAgIElEM0QxMVJlbmRlclRh
cmdldFZpZXcgKmRlc3RSVFYgPSBkZXN0LT5nZXRSZW5kZXJUYXJnZXRWaWV3KCk7CisKKyAgICAg
ICAgaWYgKHNvdXJjZVNSViAmJiBkZXN0UlRWKQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6
UmVjdGFuZ2xlIHNvdXJjZUFyZWE7CisgICAgICAgICAgICBzb3VyY2VBcmVhLnggPSAwOworICAg
ICAgICAgICAgc291cmNlQXJlYS55ID0gMDsKKyAgICAgICAgICAgIHNvdXJjZUFyZWEud2lkdGgg
PSBzb3VyY2UtPmdldFdpZHRoKCk7CisgICAgICAgICAgICBzb3VyY2VBcmVhLmhlaWdodCA9IHNv
dXJjZS0+Z2V0SGVpZ2h0KCk7CisKKyAgICAgICAgICAgIGdsOjpSZWN0YW5nbGUgZGVzdEFyZWE7
CisgICAgICAgICAgICBkZXN0QXJlYS54ID0gMDsKKyAgICAgICAgICAgIGRlc3RBcmVhLnkgPSAw
OworICAgICAgICAgICAgZGVzdEFyZWEud2lkdGggPSBkZXN0LT5nZXRXaWR0aCgpOworICAgICAg
ICAgICAgZGVzdEFyZWEuaGVpZ2h0ID0gZGVzdC0+Z2V0SGVpZ2h0KCk7CisKKyAgICAgICAgICAg
IG1SZW5kZXJlci0+Y29weVRleHR1cmUoc291cmNlU1JWLCBzb3VyY2VBcmVhLCBzb3VyY2UtPmdl
dFdpZHRoKCksIHNvdXJjZS0+Z2V0SGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RSVFYsIGRlc3RBcmVhLCBkZXN0LT5nZXRXaWR0aCgpLCBkZXN0LT5nZXRI
ZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCQSk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK1RleHR1cmVTdG9yYWdlMTFfMkQ6OlRleHR1cmVTdG9yYWdl
MTFfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBTd2FwQ2hhaW4xMSAqc3dhcGNoYWluKQorICAgIDog
VGV4dHVyZVN0b3JhZ2UxMShyZW5kZXJlciwgRDNEMTFfQklORF9SRU5ERVJfVEFSR0VUIHwgRDNE
MTFfQklORF9TSEFERVJfUkVTT1VSQ0UpCit7CisgICAgbVRleHR1cmUgPSBzd2FwY2hhaW4tPmdl
dE9mZnNjcmVlblRleHR1cmUoKTsKKyAgICBtU1JWID0gc3dhcGNoYWluLT5nZXRSZW5kZXJUYXJn
ZXRTaGFkZXJSZXNvdXJjZSgpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBn
bDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCisgICAgeworICAgICAg
ICBtUmVuZGVyVGFyZ2V0W2ldID0gTlVMTDsKKyAgICB9CisKKyAgICBEM0QxMV9URVhUVVJFMkRf
REVTQyB0ZXhEZXNjOworICAgIG1UZXh0dXJlLT5HZXREZXNjKCZ0ZXhEZXNjKTsKKyAgICBtTWlw
TGV2ZWxzID0gdGV4RGVzYy5NaXBMZXZlbHM7CisgICAgbVRleHR1cmVGb3JtYXQgPSB0ZXhEZXNj
LkZvcm1hdDsKKyAgICBtVGV4dHVyZVdpZHRoID0gdGV4RGVzYy5XaWR0aDsKKyAgICBtVGV4dHVy
ZUhlaWdodCA9IHRleERlc2MuSGVpZ2h0OworCisgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJ
RVdfREVTQyBzcnZEZXNjOworICAgIG1TUlYtPkdldERlc2MoJnNydkRlc2MpOworICAgIG1TaGFk
ZXJSZXNvdXJjZUZvcm1hdCA9IHNydkRlc2MuRm9ybWF0OworCisgICAgSUQzRDExUmVuZGVyVGFy
Z2V0Vmlldyogb2Zmc2NyZWVuUlRWID0gc3dhcGNoYWluLT5nZXRSZW5kZXJUYXJnZXQoKTsKKyAg
ICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOworICAgIG9mZnNjcmVlblJU
Vi0+R2V0RGVzYygmcnR2RGVzYyk7CisgICAgbVJlbmRlclRhcmdldEZvcm1hdCA9IHJ0dkRlc2Mu
Rm9ybWF0OworICAgIG9mZnNjcmVlblJUVi0+UmVsZWFzZSgpOworCisgICAgbURlcHRoU3RlbmNp
bEZvcm1hdCA9IERYR0lfRk9STUFUX1VOS05PV047Cit9CisKK1RleHR1cmVTdG9yYWdlMTFfMkQ6
OlRleHR1cmVTdG9yYWdlMTFfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQorICAgIDogVGV4dHVyZVN0b3JhZ2UxMShyZW5k
ZXJlciwgR2V0VGV4dHVyZUJpbmRGbGFncyhnbF9kM2QxMTo6Q29udmVydFRleHR1cmVGb3JtYXQo
aW50ZXJuYWxmb3JtYXQpLCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlKSkKK3sKKyAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZF
TFM7IGkrKykKKyAgICB7CisgICAgICAgIG1SZW5kZXJUYXJnZXRbaV0gPSBOVUxMOworICAgIH0K
KworICAgIERYR0lfRk9STUFUIGNvbnZlcnRlZEZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0VGV4
dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1hdCk7CisgICAgaWYgKGQzZDExOjpJc0RlcHRoU3RlbmNp
bEZvcm1hdChjb252ZXJ0ZWRGb3JtYXQpKQorICAgIHsKKyAgICAgICAgbVRleHR1cmVGb3JtYXQg
PSBkM2QxMTo6R2V0RGVwdGhUZXh0dXJlRm9ybWF0KGNvbnZlcnRlZEZvcm1hdCk7CisgICAgICAg
IG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IGQzZDExOjpHZXREZXB0aFNoYWRlclJlc291cmNlRm9y
bWF0KGNvbnZlcnRlZEZvcm1hdCk7CisgICAgICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBjb252
ZXJ0ZWRGb3JtYXQ7CisgICAgICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBEWEdJX0ZPUk1BVF9V
TktOT1dOOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtVGV4dHVyZUZvcm1hdCA9
IGNvbnZlcnRlZEZvcm1hdDsKKyAgICAgICAgbVNoYWRlclJlc291cmNlRm9ybWF0ID0gY29udmVy
dGVkRm9ybWF0OworICAgICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5L
Tk9XTjsKKyAgICAgICAgbVJlbmRlclRhcmdldEZvcm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKKyAg
ICB9CisKKyAgICAvLyBpZiB0aGUgd2lkdGggb3IgaGVpZ2h0IGlzIG5vdCBwb3NpdGl2ZSB0aGlz
IHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGluY29tcGxldGUgdGV4dHVyZQorICAgIC8vIHdlIGhh
bmRsZSB0aGF0IGhlcmUgYnkgc2tpcHBpbmcgdGhlIGQzZCB0ZXh0dXJlIGNyZWF0aW9uCisgICAg
aWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKQorICAgIHsKKyAgICAgICAgLy8gYWRqdXN0IHNp
emUgaWYgbmVlZGVkIGZvciBjb21wcmVzc2VkIHRleHR1cmVzCisgICAgICAgIGdsOjpNYWtlVmFs
aWRTaXplKGZhbHNlLCBnbDo6SXNDb21wcmVzc2VkKGludGVybmFsZm9ybWF0KSwgJndpZHRoLCAm
aGVpZ2h0LCAmbUxvZE9mZnNldCk7CisKKyAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBt
UmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIGRl
c2M7CisgICAgICAgIGRlc2MuV2lkdGggPSB3aWR0aDsgICAgICAvLyBDb21wcmVzc2VkIHRleHR1
cmUgc2l6ZSBjb25zdHJhaW50cz8KKyAgICAgICAgZGVzYy5IZWlnaHQgPSBoZWlnaHQ7CisgICAg
ICAgIGRlc2MuTWlwTGV2ZWxzID0gKGxldmVscyA+IDApID8gbGV2ZWxzICsgbUxvZE9mZnNldCA6
IDA7CisgICAgICAgIGRlc2MuQXJyYXlTaXplID0gMTsKKyAgICAgICAgZGVzYy5Gb3JtYXQgPSBt
VGV4dHVyZUZvcm1hdDsKKyAgICAgICAgZGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gMTsKKyAgICAg
ICAgZGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOworICAgICAgICBkZXNjLlVzYWdlID0gRDNE
MTFfVVNBR0VfREVGQVVMVDsKKyAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSBnZXRCaW5kRmxhZ3Mo
KTsKKyAgICAgICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7CisgICAgICAgIGRlc2MuTWlzY0Zs
YWdzID0gMDsKKworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVy
ZTJEKCZkZXNjLCBOVUxMLCAmbVRleHR1cmUpOworCisgICAgICAgIC8vIHRoaXMgY2FuIGhhcHBl
biBmcm9tIHdpbmRvd3MgVERSCisgICAgICAgIGlmIChkM2QxMTo6aXNEZXZpY2VMb3N0RXJyb3Io
cmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgbVJlbmRlcmVyLT5ub3RpZnlEZXZpY2VM
b3N0KCk7CisgICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEFTU0VSVChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgICAgICBFUlIoIkNy
ZWF0aW5nIGltYWdlIGZhaWxlZC4iKTsKKyAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1UZXh0dXJlLT5HZXREZXNjKCZkZXNjKTsKKyAgICAgICAgICAgIG1NaXBMZXZlbHMgPSBkZXNj
Lk1pcExldmVsczsKKyAgICAgICAgICAgIG1UZXh0dXJlV2lkdGggPSBkZXNjLldpZHRoOworICAg
ICAgICAgICAgbVRleHR1cmVIZWlnaHQgPSBkZXNjLkhlaWdodDsKKyAgICAgICAgfQorICAgIH0K
K30KKworVGV4dHVyZVN0b3JhZ2UxMV8yRDo6flRleHR1cmVTdG9yYWdlMTFfMkQoKQoreworICAg
IGlmIChtVGV4dHVyZSkKKyAgICB7CisgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7CisgICAg
ICAgIG1UZXh0dXJlID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAobVNSVikKKyAgICB7CisgICAg
ICAgIG1TUlYtPlJlbGVhc2UoKTsKKyAgICAgICAgbVNSViA9IE5VTEw7CisgICAgfQorCisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRV
UkVfTEVWRUxTOyBpKyspCisgICAgeworICAgICAgICBkZWxldGUgbVJlbmRlclRhcmdldFtpXTsK
KyAgICAgICAgbVJlbmRlclRhcmdldFtpXSA9IE5VTEw7CisgICAgfQorfQorCitUZXh0dXJlU3Rv
cmFnZTExXzJEICpUZXh0dXJlU3RvcmFnZTExXzJEOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yRChU
ZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSkKK3sKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShU
ZXh0dXJlU3RvcmFnZTExXzJEKiwgc3RvcmFnZSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
ZXh0dXJlU3RvcmFnZTExXzJEKj4oc3RvcmFnZSk7Cit9CisKK1JlbmRlclRhcmdldCAqVGV4dHVy
ZVN0b3JhZ2UxMV8yRDo6Z2V0UmVuZGVyVGFyZ2V0KGludCBsZXZlbCkKK3sKKyAgICBpZiAobGV2
ZWwgPj0gMCAmJiBsZXZlbCA8IHN0YXRpY19jYXN0PGludD4obU1pcExldmVscykpCisgICAgewor
ICAgICAgICBpZiAoIW1SZW5kZXJUYXJnZXRbbGV2ZWxdKQorICAgICAgICB7CisgICAgICAgICAg
ICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgICAg
ICAgICBIUkVTVUxUIHJlc3VsdDsKKworICAgICAgICAgICAgRDNEMTFfU0hBREVSX1JFU09VUkNF
X1ZJRVdfREVTQyBzcnZEZXNjOworICAgICAgICAgICAgc3J2RGVzYy5Gb3JtYXQgPSBtU2hhZGVy
UmVzb3VyY2VGb3JtYXQ7CisgICAgICAgICAgICBzcnZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0Qx
MV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyRDsKKyAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJE
Lk1vc3REZXRhaWxlZE1pcCA9IGxldmVsOworICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkQu
TWlwTGV2ZWxzID0gMTsKKworICAgICAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpz
cnY7CisgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmll
dyhtVGV4dHVyZSwgJnNydkRlc2MsICZzcnYpOworCisgICAgICAgICAgICBpZiAocmVzdWx0ID09
IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihOVUxM
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkp
OworCisgICAgICAgICAgICBpZiAobVJlbmRlclRhcmdldEZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9V
TktOT1dOKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEQzRDExX1JFTkRFUl9UQVJH
RVRfVklFV19ERVNDIHJ0dkRlc2M7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5Gb3JtYXQgPSBt
UmVuZGVyVGFyZ2V0Rm9ybWF0OworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVmlld0RpbWVuc2lv
biA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJEOworICAgICAgICAgICAgICAgIHJ0dkRl
c2MuVGV4dHVyZTJELk1pcFNsaWNlID0gbGV2ZWw7CisKKyAgICAgICAgICAgICAgICBJRDNEMTFS
ZW5kZXJUYXJnZXRWaWV3ICpydHY7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5D
cmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1UZXh0dXJlLCAmcnR2RGVzYywgJnJ0dik7CisKKyAgICAg
ICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBzcnYtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5kZXJU
YXJnZXQqPihOVUxMKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFTU0VS
VChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgICAgICAgICAvLyBSZW5kZXJUYXJnZXQx
MSBleHBlY3RzIHRvIGJlIHRoZSBvd25lciBvZiB0aGUgcmVzb3VyY2VzIGl0IGlzIGdpdmVuIGJ1
dCBUZXh0dXJlU3RvcmFnZTExCisgICAgICAgICAgICAgICAgLy8gYWxzbyBuZWVkcyB0byBrZWVw
IGEgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0dXJlLgorICAgICAgICAgICAgICAgIG1UZXh0dXJlLT5B
ZGRSZWYoKTsKKworICAgICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbbGV2ZWxdID0gbmV3IFJl
bmRlclRhcmdldDExKG1SZW5kZXJlciwgcnR2LCBtVGV4dHVyZSwgc3J2LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1U
ZXh0dXJlV2lkdGggPj4gbGV2ZWwsIDFVKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVyZUhlaWdodCA+PiBs
ZXZlbCwgMVUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1EZXB0aFN0
ZW5jaWxGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBEM0QxMV9ERVBUSF9TVEVOQ0lMX1ZJRVdfREVTQyBkc3ZEZXNjOworICAgICAg
ICAgICAgICAgIGRzdkRlc2MuRm9ybWF0ID0gbURlcHRoU3RlbmNpbEZvcm1hdDsKKyAgICAgICAg
ICAgICAgICBkc3ZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9EU1ZfRElNRU5TSU9OX1RFWFRV
UkUyRDsKKyAgICAgICAgICAgICAgICBkc3ZEZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IGxldmVs
OworICAgICAgICAgICAgICAgIGRzdkRlc2MuRmxhZ3MgPSAwOworCisgICAgICAgICAgICAgICAg
SUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZHN2OworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRl
dmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsVmlldyhtVGV4dHVyZSwgJmRzdkRlc2MsICZkc3YpOwor
CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3J2LT5SZWxlYXNlKCk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8
UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAgICAgICAgLy8gUmVuZGVy
VGFyZ2V0MTEgZXhwZWN0cyB0byBiZSB0aGUgb3duZXIgb2YgdGhlIHJlc291cmNlcyBpdCBpcyBn
aXZlbiBidXQgVGV4dHVyZVN0b3JhZ2UxMQorICAgICAgICAgICAgICAgIC8vIGFsc28gbmVlZHMg
dG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgdGV4dHVyZS4KKyAgICAgICAgICAgICAgICBtVGV4
dHVyZS0+QWRkUmVmKCk7CisKKyAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2xldmVsXSA9
IG5ldyBSZW5kZXJUYXJnZXQxMShtUmVuZGVyZXIsIGRzdiwgbVRleHR1cmUsIHNydiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6
Om1heChtVGV4dHVyZVdpZHRoID4+IGxldmVsLCAxVSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobVRleHR1cmVIZWln
aHQgPj4gbGV2ZWwsIDFVKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0W2xldmVsXTsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCitJRDNE
MTFTaGFkZXJSZXNvdXJjZVZpZXcgKlRleHR1cmVTdG9yYWdlMTFfMkQ6OmdldFNSVigpCit7Cisg
ICAgaWYgKCFtU1JWKQorICAgIHsKKyAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVu
ZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVX
X0RFU0Mgc3J2RGVzYzsKKyAgICAgICAgc3J2RGVzYy5Gb3JtYXQgPSBtU2hhZGVyUmVzb3VyY2VG
b3JtYXQ7CisgICAgICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJ
T05fVEVYVFVSRTJEOworICAgICAgICBzcnZEZXNjLlRleHR1cmUyRC5NaXBMZXZlbHMgPSAobU1p
cExldmVscyA9PSAwID8gLTEgOiBtTWlwTGV2ZWxzKTsKKyAgICAgICAgc3J2RGVzYy5UZXh0dXJl
MkQuTW9zdERldGFpbGVkTWlwID0gMDsKKworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KG1UZXh0dXJlLCAmc3J2RGVzYywgJm1TUlYpOwor
CisgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxJRDNE
MTFTaGFkZXJSZXNvdXJjZVZpZXcqPihOVUxMKSk7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICB9CisKKyAgICByZXR1cm4gbVNSVjsKK30KKwordm9p
ZCBUZXh0dXJlU3RvcmFnZTExXzJEOjpnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpCit7CisgICAg
UmVuZGVyVGFyZ2V0MTEgKnNvdXJjZSA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0
MTEoZ2V0UmVuZGVyVGFyZ2V0KGxldmVsIC0gMSkpOworICAgIFJlbmRlclRhcmdldDExICpkZXN0
ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShnZXRSZW5kZXJUYXJnZXQobGV2
ZWwpKTsKKworICAgIGdlbmVyYXRlTWlwbWFwTGF5ZXIoc291cmNlLCBkZXN0KTsKK30KKworVGV4
dHVyZVN0b3JhZ2UxMV9DdWJlOjpUZXh0dXJlU3RvcmFnZTExX0N1YmUoUmVuZGVyZXIgKnJlbmRl
cmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9v
bCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKQorICAgIDogVGV4dHVyZVN0b3JhZ2UxMShyZW5k
ZXJlciwgR2V0VGV4dHVyZUJpbmRGbGFncyhnbF9kM2QxMTo6Q29udmVydFRleHR1cmVGb3JtYXQo
aW50ZXJuYWxmb3JtYXQpLCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlKSkKK3sKKyAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IDY7IGkrKykKKyAgICB7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGogPSAwOyBqIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsg
aisrKQorICAgICAgICB7CisgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2ldW2pdID0gTlVMTDsK
KyAgICAgICAgfQorICAgIH0KKworICAgIERYR0lfRk9STUFUIGNvbnZlcnRlZEZvcm1hdCA9IGds
X2QzZDExOjpDb252ZXJ0VGV4dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1hdCk7CisgICAgaWYgKGQz
ZDExOjpJc0RlcHRoU3RlbmNpbEZvcm1hdChjb252ZXJ0ZWRGb3JtYXQpKQorICAgIHsKKyAgICAg
ICAgbVRleHR1cmVGb3JtYXQgPSBkM2QxMTo6R2V0RGVwdGhUZXh0dXJlRm9ybWF0KGNvbnZlcnRl
ZEZvcm1hdCk7CisgICAgICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IGQzZDExOjpHZXREZXB0
aFNoYWRlclJlc291cmNlRm9ybWF0KGNvbnZlcnRlZEZvcm1hdCk7CisgICAgICAgIG1EZXB0aFN0
ZW5jaWxGb3JtYXQgPSBjb252ZXJ0ZWRGb3JtYXQ7CisgICAgICAgIG1SZW5kZXJUYXJnZXRGb3Jt
YXQgPSBEWEdJX0ZPUk1BVF9VTktOT1dOOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICBtVGV4dHVyZUZvcm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKKyAgICAgICAgbVNoYWRlclJlc291
cmNlRm9ybWF0ID0gY29udmVydGVkRm9ybWF0OworICAgICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0
ID0gRFhHSV9GT1JNQVRfVU5LTk9XTjsKKyAgICAgICAgbVJlbmRlclRhcmdldEZvcm1hdCA9IGNv
bnZlcnRlZEZvcm1hdDsKKyAgICB9CisKKyAgICAvLyBpZiB0aGUgc2l6ZSBpcyBub3QgcG9zaXRp
dmUgdGhpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBsZXRlIHRleHR1cmUKKyAgICAv
LyB3ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBkM2QgdGV4dHVyZSBjcmVhdGlv
bgorICAgIGlmIChzaXplID4gMCkKKyAgICB7CisgICAgICAgIC8vIGFkanVzdCBzaXplIGlmIG5l
ZWRlZCBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlcworICAgICAgICBpbnQgaGVpZ2h0ID0gc2l6ZTsK
KyAgICAgICAgZ2w6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIGdsOjpJc0NvbXByZXNzZWQoaW50ZXJu
YWxmb3JtYXQpLCAmc2l6ZSwgJmhlaWdodCwgJm1Mb2RPZmZzZXQpOworCisgICAgICAgIElEM0Qx
MURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICBEM0Qx
MV9URVhUVVJFMkRfREVTQyBkZXNjOworICAgICAgICBkZXNjLldpZHRoID0gc2l6ZTsKKyAgICAg
ICAgZGVzYy5IZWlnaHQgPSBzaXplOworICAgICAgICBkZXNjLk1pcExldmVscyA9IChsZXZlbHMg
PiAwKSA/IGxldmVscyArIG1Mb2RPZmZzZXQgOiAwOworICAgICAgICBkZXNjLkFycmF5U2l6ZSA9
IDY7CisgICAgICAgIGRlc2MuRm9ybWF0ID0gbVRleHR1cmVGb3JtYXQ7CisgICAgICAgIGRlc2Mu
U2FtcGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0g
MDsKKyAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7CisgICAgICAgIGRl
c2MuQmluZEZsYWdzID0gZ2V0QmluZEZsYWdzKCk7CisgICAgICAgIGRlc2MuQ1BVQWNjZXNzRmxh
Z3MgPSAwOworICAgICAgICBkZXNjLk1pc2NGbGFncyA9IEQzRDExX1JFU09VUkNFX01JU0NfVEVY
VFVSRUNVQkU7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1
cmUyRCgmZGVzYywgTlVMTCwgJm1UZXh0dXJlKTsKKworICAgICAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRV9PVVRPRk1FTU9S
WSk7CisgICAgICAgICAgICBFUlIoIkNyZWF0aW5nIGltYWdlIGZhaWxlZC4iKTsKKyAgICAgICAg
ICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1UZXh0dXJlLT5HZXREZXNjKCZkZXNjKTsKKyAgICAg
ICAgICAgIG1NaXBMZXZlbHMgPSBkZXNjLk1pcExldmVsczsKKyAgICAgICAgICAgIG1UZXh0dXJl
V2lkdGggPSBkZXNjLldpZHRoOworICAgICAgICAgICAgbVRleHR1cmVIZWlnaHQgPSBkZXNjLkhl
aWdodDsKKyAgICAgICAgfQorICAgIH0KK30KKworVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjp+VGV4
dHVyZVN0b3JhZ2UxMV9DdWJlKCkKK3sKKyAgICBpZiAobVRleHR1cmUpCisgICAgeworICAgICAg
ICBtVGV4dHVyZS0+UmVsZWFzZSgpOworICAgICAgICBtVGV4dHVyZSA9IE5VTEw7CisgICAgfQor
CisgICAgaWYgKG1TUlYpCisgICAgeworICAgICAgICBtU1JWLT5SZWxlYXNlKCk7CisgICAgICAg
IG1TUlYgPSBOVUxMOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
NjsgaSsrKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBnbDo6
SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBqKyspCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGRlbGV0ZSBtUmVuZGVyVGFyZ2V0W2ldW2pdOworICAgICAgICAgICAgbVJlbmRlclRh
cmdldFtpXVtqXSA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1RleHR1cmVTdG9yYWdl
MTFfQ3ViZSAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV9DdWJl
KFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKQoreworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBF
KFRleHR1cmVTdG9yYWdlMTFfQ3ViZSosIHN0b3JhZ2UpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VGV4dHVyZVN0b3JhZ2UxMV9DdWJlKj4oc3RvcmFnZSk7Cit9CisKK1JlbmRlclRhcmdldCAq
VGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQs
IGludCBsZXZlbCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgZmFjZUlkeCA9IGdsOjpUZXh0dXJlQ3Vi
ZU1hcDo6ZmFjZUluZGV4KGZhY2VUYXJnZXQpOworICAgIGlmIChsZXZlbCA+PSAwICYmIGxldmVs
IDwgc3RhdGljX2Nhc3Q8aW50PihtTWlwTGV2ZWxzKSkKKyAgICB7CisgICAgICAgIGlmICghbVJl
bmRlclRhcmdldFtmYWNlSWR4XVtsZXZlbF0pCisgICAgICAgIHsKKyAgICAgICAgICAgIElEM0Qx
MURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICAgICAgICAgIEhS
RVNVTFQgcmVzdWx0OworCisgICAgICAgICAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19E
RVNDIHNydkRlc2M7CisgICAgICAgICAgICBzcnZEZXNjLkZvcm1hdCA9IG1TaGFkZXJSZXNvdXJj
ZUZvcm1hdDsKKyAgICAgICAgICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9E
SU1FTlNJT05fVEVYVFVSRTJEQVJSQVk7IC8vIFdpbGwgYmUgdXNlZCB3aXRoIFRleHR1cmUyRCBz
YW1wbGVyLCBub3QgVGV4dHVyZUN1YmUKKyAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJEQXJy
YXkuTW9zdERldGFpbGVkTWlwID0gbGV2ZWw7CisgICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUy
REFycmF5Lk1pcExldmVscyA9IDE7CisgICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5
LkZpcnN0QXJyYXlTbGljZSA9IGZhY2VJZHg7CisgICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUy
REFycmF5LkFycmF5U2l6ZSA9IDE7CisKKyAgICAgICAgICAgIElEM0QxMVNoYWRlclJlc291cmNl
VmlldyAqc3J2OworICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNv
dXJjZVZpZXcobVRleHR1cmUsICZzcnZEZXNjLCAmc3J2KTsKKworICAgICAgICAgICAgaWYgKHJl
c3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0
Kj4oTlVMTCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKKworICAgICAgICAgICAgaWYgKG1SZW5kZXJUYXJnZXRGb3JtYXQgIT0gRFhHSV9G
T1JNQVRfVU5LTk9XTikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEM0QxMV9SRU5E
RVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOworICAgICAgICAgICAgICAgIHJ0dkRlc2MuRm9y
bWF0ID0gbVJlbmRlclRhcmdldEZvcm1hdDsKKyAgICAgICAgICAgICAgICBydHZEZXNjLlZpZXdE
aW1lbnNpb24gPSBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyREFSUkFZOworICAgICAgICAg
ICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlwU2xpY2UgPSBsZXZlbDsKKyAgICAgICAg
ICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9IGZhY2VJZHg7
CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlMkRBcnJheS5BcnJheVNpemUgPSAxOwor
CisgICAgICAgICAgICAgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqcnR2OworICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0VmlldyhtVGV4dHVyZSwg
JnJ0dkRlc2MsICZydHYpOworCisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9G
TUVNT1JZKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3J2LT5SZWxl
YXNlKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAg
ICAgICAgICAgLy8gUmVuZGVyVGFyZ2V0MTEgZXhwZWN0cyB0byBiZSB0aGUgb3duZXIgb2YgdGhl
IHJlc291cmNlcyBpdCBpcyBnaXZlbiBidXQgVGV4dHVyZVN0b3JhZ2UxMQorICAgICAgICAgICAg
ICAgIC8vIGFsc28gbmVlZHMgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgdGV4dHVyZS4KKyAg
ICAgICAgICAgICAgICBtVGV4dHVyZS0+QWRkUmVmKCk7CisKKyAgICAgICAgICAgICAgICBtUmVu
ZGVyVGFyZ2V0W2ZhY2VJZHhdW2xldmVsXSA9IG5ldyBSZW5kZXJUYXJnZXQxMShtUmVuZGVyZXIs
IHJ0diwgbVRleHR1cmUsIHNydiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVyZVdpZHRoID4+
IGxldmVsLCAxVSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobVRleHR1cmVIZWlnaHQgPj4gbGV2ZWws
IDFVKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtRGVwdGhTdGVuY2ls
Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgRDNEMTFfREVQVEhfU1RFTkNJTF9WSUVXX0RFU0MgZHN2RGVzYzsKKyAgICAgICAgICAg
ICAgICBkc3ZEZXNjLkZvcm1hdCA9IG1SZW5kZXJUYXJnZXRGb3JtYXQ7CisgICAgICAgICAgICAg
ICAgZHN2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMkRB
UlJBWTsKKyAgICAgICAgICAgICAgICBkc3ZEZXNjLlRleHR1cmUyREFycmF5Lk1pcFNsaWNlID0g
bGV2ZWw7CisgICAgICAgICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5
U2xpY2UgPSBmYWNlSWR4OworICAgICAgICAgICAgICAgIGRzdkRlc2MuVGV4dHVyZTJEQXJyYXku
QXJyYXlTaXplID0gMTsKKworICAgICAgICAgICAgICAgIElEM0QxMURlcHRoU3RlbmNpbFZpZXcg
KmRzdjsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNp
bFZpZXcobVRleHR1cmUsICZkc3ZEZXNjLCAmZHN2KTsKKworICAgICAgICAgICAgICAgIGlmIChy
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHNydi0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PFJlbmRlclRhcmdldCo+KE5VTEwpKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1
bHQpKTsKKworICAgICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdldDExIGV4cGVjdHMgdG8gYmUg
dGhlIG93bmVyIG9mIHRoZSByZXNvdXJjZXMgaXQgaXMgZ2l2ZW4gYnV0IFRleHR1cmVTdG9yYWdl
MTEKKyAgICAgICAgICAgICAgICAvLyBhbHNvIG5lZWRzIHRvIGtlZXAgYSByZWZlcmVuY2UgdG8g
dGhlIHRleHR1cmUuCisgICAgICAgICAgICAgICAgbVRleHR1cmUtPkFkZFJlZigpOworCisgICAg
ICAgICAgICAgICAgbVJlbmRlclRhcmdldFtmYWNlSWR4XVtsZXZlbF0gPSBuZXcgUmVuZGVyVGFy
Z2V0MTEobVJlbmRlcmVyLCBkc3YsIG1UZXh0dXJlLCBzcnYsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgo
bVRleHR1cmVXaWR0aCA+PiBsZXZlbCwgMVUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1UZXh0dXJl
SGVpZ2h0ID4+IGxldmVsLCAxVSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbVJlbmRlclRhcmdldFtmYWNlSWR4XVts
ZXZlbF07CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAg
IH0KK30KKworSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3RvcmFnZTExX0N1YmU6
OmdldFNSVigpCit7CisgICAgaWYgKCFtU1JWKQorICAgIHsKKyAgICAgICAgSUQzRDExRGV2aWNl
ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgIEQzRDExX1NIQURF
Ul9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKKyAgICAgICAgc3J2RGVzYy5Gb3JtYXQgPSBt
U2hhZGVyUmVzb3VyY2VGb3JtYXQ7CisgICAgICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQz
RDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRUNVQkU7CisgICAgICAgIHNydkRlc2MuVGV4dHVyZUN1
YmUuTWlwTGV2ZWxzID0gKG1NaXBMZXZlbHMgPT0gMCA/IC0xIDogbU1pcExldmVscyk7CisgICAg
ICAgIHNydkRlc2MuVGV4dHVyZUN1YmUuTW9zdERldGFpbGVkTWlwID0gMDsKKworICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KG1UZXh0dXJl
LCAmc3J2RGVzYywgJm1TUlYpOworCisgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9S
WSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZLCBzdGF0aWNfY2FzdDxJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcqPihOVUxMKSk7CisgICAg
ICAgIH0KKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gbVNSVjsKK30KKwordm9pZCBUZXh0dXJlU3RvcmFnZTExX0N1YmU6OmdlbmVyYXRlTWlw
bWFwKGludCBmYWNlLCBpbnQgbGV2ZWwpCit7CisgICAgUmVuZGVyVGFyZ2V0MTEgKnNvdXJjZSA9
IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFyZ2V0KEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsIC0gMSkpOworICAgIFJlbmRl
clRhcmdldDExICpkZXN0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShnZXRS
ZW5kZXJUYXJnZXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZSwgbGV2ZWwp
KTsKKworICAgIGdlbmVyYXRlTWlwbWFwTGF5ZXIoc291cmNlLCBkZXN0KTsKK30KKworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9UZXh0dXJlU3RvcmFnZTExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL1RleHR1cmVTdG9yYWdlMTEuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYzVk
ZWQwNWI4ODk3Njk3ZDM5MzZkMDUwOTdkZjRkZTk4Yjc5YmNkCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9UZXh0
dXJlU3RvcmFnZTExLmgKQEAgLTAsMCArMSwxMjAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUZXh0
dXJlU3RvcmFnZTExLmg6IERlZmluZXMgdGhlIGFic3RyYWN0IHJ4OjpUZXh0dXJlU3RvcmFnZTEx
IGNsYXNzIGFuZCBpdHMgY29uY3JldGUgZGVyaXZlZAorLy8gY2xhc3NlcyBUZXh0dXJlU3RvcmFn
ZTExXzJEIGFuZCBUZXh0dXJlU3RvcmFnZTExX0N1YmUsIHdoaWNoIGFjdCBhcyB0aGUgaW50ZXJm
YWNlIHRvIHRoZSBEM0QxMSB0ZXh0dXJlLgorCisjaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9U
RVhUVVJFU1RPUkFHRTExX0hfCisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9URVhUVVJFU1RP
UkFHRTExX0hfCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZS5oIgorCituYW1lc3BhY2UgcngKK3sKK2Ns
YXNzIFJlbmRlclRhcmdldDsKK2NsYXNzIFJlbmRlclRhcmdldDExOworY2xhc3MgUmVuZGVyZXI7
CitjbGFzcyBSZW5kZXJlcjExOworY2xhc3MgU3dhcENoYWluMTE7CisKK2NsYXNzIFRleHR1cmVT
dG9yYWdlMTEgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UKK3sKKyAgcHVibGljOgorICAgIFRleHR1
cmVTdG9yYWdlMTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBVSU5UIGJpbmRGbGFncyk7CisgICAgdmly
dHVhbCB+VGV4dHVyZVN0b3JhZ2UxMSgpOworCisgICAgc3RhdGljIFRleHR1cmVTdG9yYWdlMTEg
Km1ha2VUZXh0dXJlU3RvcmFnZTExKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKTsKKworICAgIHN0
YXRpYyBEV09SRCBHZXRUZXh0dXJlQmluZEZsYWdzKERYR0lfRk9STUFUIGQzZGZtdCwgR0xlbnVt
IGdsdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlKTsKKyAgICBzdGF0aWMgYm9vbCBJc1RleHR1
cmVGb3JtYXRSZW5kZXJhYmxlKERYR0lfRk9STUFUIGZvcm1hdCk7CisKKyAgICBVSU5UIGdldEJp
bmRGbGFncygpIGNvbnN0OworCisgICAgdmlydHVhbCBJRDNEMTFUZXh0dXJlMkQgKmdldEJhc2VU
ZXh0dXJlKCkgY29uc3Q7CisgICAgdmlydHVhbCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmdl
dFNSVigpID0gMDsKKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KCkg
eyByZXR1cm4gZ2V0UmVuZGVyVGFyZ2V0KDApOyB9CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQg
KmdldFJlbmRlclRhcmdldChpbnQgbGV2ZWwpIHsgcmV0dXJuIE5VTEw7IH0KKyAgICB2aXJ0dWFs
IFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0KSB7IHJldHVy
biBnZXRSZW5kZXJUYXJnZXQoZmFjZVRhcmdldCwgMCk7IH0KKyAgICB2aXJ0dWFsIFJlbmRlclRh
cmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpIHsgcmV0
dXJuIE5VTEw7IH0KKworICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwp
IHt9OworICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgZmFjZSwgaW50IGxldmVs
KSB7fTsKKworICAgIHZpcnR1YWwgaW50IGdldExvZE9mZnNldCgpIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBpc1JlbmRlclRhcmdldCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc01hbmFn
ZWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBsZXZlbENvdW50KCk7CisgICAgVUlOVCBnZXRT
dWJyZXNvdXJjZUluZGV4KGludCBsZXZlbCwgaW50IGZhY2VUYXJnZXQpOworCisgICAgYm9vbCB1
cGRhdGVTdWJyZXNvdXJjZUxldmVsKElEM0QxMVRleHR1cmUyRCAqdGV4dHVyZSwgdW5zaWduZWQg
aW50IHNvdXJjZVN1YnJlc291cmNlLCBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBmYWNlVGFyZ2V0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisKKyAgcHJvdGVjdGVkOgorICAgIHZvaWQg
Z2VuZXJhdGVNaXBtYXBMYXllcihSZW5kZXJUYXJnZXQxMSAqc291cmNlLCBSZW5kZXJUYXJnZXQx
MSAqZGVzdCk7CisKKyAgICBSZW5kZXJlcjExICptUmVuZGVyZXI7CisgICAgaW50IG1Mb2RPZmZz
ZXQ7CisgICAgdW5zaWduZWQgaW50IG1NaXBMZXZlbHM7CisKKyAgICBJRDNEMTFUZXh0dXJlMkQg
Km1UZXh0dXJlOworICAgIERYR0lfRk9STUFUIG1UZXh0dXJlRm9ybWF0OworICAgIERYR0lfRk9S
TUFUIG1TaGFkZXJSZXNvdXJjZUZvcm1hdDsKKyAgICBEWEdJX0ZPUk1BVCBtUmVuZGVyVGFyZ2V0
Rm9ybWF0OworICAgIERYR0lfRk9STUFUIG1EZXB0aFN0ZW5jaWxGb3JtYXQ7CisgICAgdW5zaWdu
ZWQgaW50IG1UZXh0dXJlV2lkdGg7CisgICAgdW5zaWduZWQgaW50IG1UZXh0dXJlSGVpZ2h0Owor
CisgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICptU1JWOworCisgIHByaXZhdGU6CisgICAg
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlMTEpOworCisgICAgY29uc3Qg
VUlOVCBtQmluZEZsYWdzOworfTsKKworY2xhc3MgVGV4dHVyZVN0b3JhZ2UxMV8yRCA6IHB1Ymxp
YyBUZXh0dXJlU3RvcmFnZTExCit7CisgIHB1YmxpYzoKKyAgICBUZXh0dXJlU3RvcmFnZTExXzJE
KFJlbmRlcmVyICpyZW5kZXJlciwgU3dhcENoYWluMTEgKnN3YXBjaGFpbik7CisgICAgVGV4dHVy
ZVN0b3JhZ2UxMV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlMTFfMkQo
KTsKKworICAgIHN0YXRpYyBUZXh0dXJlU3RvcmFnZTExXzJEICptYWtlVGV4dHVyZVN0b3JhZ2Ux
MV8yRChUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSk7CisKKyAgICB2aXJ0dWFsIElEM0QxMVNoYWRl
clJlc291cmNlVmlldyAqZ2V0U1JWKCk7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJl
bmRlclRhcmdldChpbnQgbGV2ZWwpOworCisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFw
KGludCBsZXZlbCk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04o
VGV4dHVyZVN0b3JhZ2UxMV8yRCk7CisKKyAgICBSZW5kZXJUYXJnZXQxMSAqbVJlbmRlclRhcmdl
dFtnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKK307CisKK2NsYXNzIFRl
eHR1cmVTdG9yYWdlMTFfQ3ViZSA6IHB1YmxpYyBUZXh0dXJlU3RvcmFnZTExCit7CisgIHB1Ymxp
YzoKKyAgICBUZXh0dXJlU3RvcmFnZTExX0N1YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2
ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRl
cmFibGUsIGludCBzaXplKTsKKyAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTExX0N1YmUoKTsK
KworICAgIHN0YXRpYyBUZXh0dXJlU3RvcmFnZTExX0N1YmUgKm1ha2VUZXh0dXJlU3RvcmFnZTEx
X0N1YmUoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpOworCisgICAgdmlydHVhbCBJRDNEMTFTaGFk
ZXJSZXNvdXJjZVZpZXcgKmdldFNSVigpOworICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRS
ZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCk7CisKKyAgcHJpdmF0ZToK
KyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKTsKKwor
ICAgIFJlbmRlclRhcmdldDExICptUmVuZGVyVGFyZ2V0WzZdW2dsOjpJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFNdOworfTsKKworfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRF
UkVSX1RFWFRVUkVTVE9SQUdFMTFfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVydGV4QnVmZmVyMTEuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9WZXJ0ZXhC
dWZmZXIxMS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmY5YjQxODFmMTJhY2M3YzhlODU4YjYwNGQ4MzMyZjE1
Y2E0NjYyMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVydGV4QnVmZmVyMTEuY3BwCkBAIC0wLDAgKzEsNDQw
IEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBWZXJ0ZXhC
dWZmZXIxMS5jcHA6IERlZmluZXMgdGhlIEQzRDExIFZlcnRleEJ1ZmZlciBpbXBsZW1lbnRhdGlv
bi4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9WZXJ0ZXhCdWZmZXIxMS5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdlLmgiCisKKyNpbmNs
dWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDExL1JlbmRlcmVyMTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorCituYW1l
c3BhY2UgcngKK3sKKworVmVydGV4QnVmZmVyMTE6OlZlcnRleEJ1ZmZlcjExKHJ4OjpSZW5kZXJl
cjExICpjb25zdCByZW5kZXJlcikgOiBtUmVuZGVyZXIocmVuZGVyZXIpCit7CisgICAgbUJ1ZmZl
ciA9IE5VTEw7CisgICAgbUJ1ZmZlclNpemUgPSAwOworICAgIG1EeW5hbWljVXNhZ2UgPSBmYWxz
ZTsKK30KKworVmVydGV4QnVmZmVyMTE6On5WZXJ0ZXhCdWZmZXIxMSgpCit7CisgICAgaWYgKG1C
dWZmZXIpCisgICAgeworICAgICAgICBtQnVmZmVyLT5SZWxlYXNlKCk7CisgICAgICAgIG1CdWZm
ZXIgPSBOVUxMOworICAgIH0KK30KKworYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6aW5pdGlhbGl6ZSh1
bnNpZ25lZCBpbnQgc2l6ZSwgYm9vbCBkeW5hbWljVXNhZ2UpCit7CisgICAgaWYgKG1CdWZmZXIp
CisgICAgeworICAgICAgICBtQnVmZmVyLT5SZWxlYXNlKCk7CisgICAgICAgIG1CdWZmZXIgPSBO
VUxMOworICAgIH0KKworICAgIHVwZGF0ZVNlcmlhbCgpOworCisgICAgaWYgKHNpemUgPiAwKQor
ICAgIHsKKyAgICAgICAgSUQzRDExRGV2aWNlKiBkeERldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2
aWNlKCk7CisKKyAgICAgICAgRDNEMTFfQlVGRkVSX0RFU0MgYnVmZmVyRGVzYzsKKyAgICAgICAg
YnVmZmVyRGVzYy5CeXRlV2lkdGggPSBzaXplOworICAgICAgICBidWZmZXJEZXNjLlVzYWdlID0g
RDNEMTFfVVNBR0VfRFlOQU1JQzsKKyAgICAgICAgYnVmZmVyRGVzYy5CaW5kRmxhZ3MgPSBEM0Qx
MV9CSU5EX1ZFUlRFWF9CVUZGRVI7CisgICAgICAgIGJ1ZmZlckRlc2MuQ1BVQWNjZXNzRmxhZ3Mg
PSBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOworICAgICAgICBidWZmZXJEZXNjLk1pc2NGbGFncyA9
IDA7CisgICAgICAgIGJ1ZmZlckRlc2MuU3RydWN0dXJlQnl0ZVN0cmlkZSA9IDA7CisKKyAgICAg
ICAgSFJFU1VMVCByZXN1bHQgPSBkeERldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJEZXNjLCBO
VUxMLCAmbUJ1ZmZlcik7CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgbUJ1ZmZl
clNpemUgPSBzaXplOworICAgIG1EeW5hbWljVXNhZ2UgPSBkeW5hbWljVXNhZ2U7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK1ZlcnRleEJ1ZmZlcjExICpWZXJ0ZXhCdWZmZXIxMTo6bWFrZVZlcnRl
eEJ1ZmZlcjExKFZlcnRleEJ1ZmZlciAqdmV0ZXhCdWZmZXIpCit7CisgICAgQVNTRVJUKEhBU19E
WU5BTUlDX1RZUEUoVmVydGV4QnVmZmVyMTEqLCB2ZXRleEJ1ZmZlcikpOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxWZXJ0ZXhCdWZmZXIxMSo+KHZldGV4QnVmZmVyKTsKK30KKworYm9vbCBWZXJ0
ZXhCdWZmZXIxMTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1
dGUgJmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGlu
dCBvZmZzZXQpCit7CisgICAgaWYgKG1CdWZmZXIpCisgICAgeworICAgICAgICBnbDo6QnVmZmVy
ICpidWZmZXIgPSBhdHRyaWIubUJvdW5kQnVmZmVyLmdldCgpOworCisgICAgICAgIGludCBpbnB1
dFN0cmlkZSA9IGF0dHJpYi5zdHJpZGUoKTsKKyAgICAgICAgY29uc3QgVmVydGV4Q29udmVydGVy
ICZjb252ZXJ0ZXIgPSBnZXRWZXJ0ZXhDb252ZXJzaW9uKGF0dHJpYik7CisKKyAgICAgICAgSUQz
RDExRGV2aWNlQ29udGV4dCAqZHhDb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0
KCk7CisKKyAgICAgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwor
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGR4Q29udGV4dC0+TWFwKG1CdWZmZXIsIDAsIEQzRDEx
X01BUF9XUklURV9OT19PVkVSV1JJVEUsIDAsICZtYXBwZWRSZXNvdXJjZSk7CisgICAgICAgIGlm
IChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJWZXJ0ZXggYnVm
ZmVyIG1hcCBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgiLCByZXN1bHQpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgY2hhciogb3V0cHV0ID0gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4obWFwcGVkUmVzb3VyY2UucERhdGEpICsgb2Zmc2V0OworCisgICAg
ICAgIGNvbnN0IGNoYXIgKmlucHV0ID0gTlVMTDsKKyAgICAgICAgaWYgKGJ1ZmZlcikKKyAgICAg
ICAgeworICAgICAgICAgICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGJ1ZmZlci0+Z2V0U3Rv
cmFnZSgpOworICAgICAgICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oc3Rv
cmFnZS0+Z2V0RGF0YSgpKSArIHN0YXRpY19jYXN0PGludD4oYXR0cmliLm1PZmZzZXQpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaW5wdXQgPSBzdGF0
aWNfY2FzdDxjb25zdCBjaGFyKj4oYXR0cmliLm1Qb2ludGVyKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBhdHRyaWIubURpdmlzb3IgPT0gMCkKKyAgICAgICAg
eworICAgICAgICAgICAgaW5wdXQgKz0gaW5wdXRTdHJpZGUgKiBzdGFydDsKKyAgICAgICAgfQor
CisgICAgICAgIGNvbnZlcnRlci5jb252ZXJzaW9uRnVuYyhpbnB1dCwgaW5wdXRTdHJpZGUsIGNv
dW50LCBvdXRwdXQpOworCisgICAgICAgIGR4Q29udGV4dC0+VW5tYXAobUJ1ZmZlciwgMCk7CisK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEVS
UigiVmVydGV4IGJ1ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKK2Jvb2wgVmVydGV4QnVmZmVyMTE6OnN0b3JlUmF3RGF0YShjb25zdCB2
b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNldCkKK3sKKyAg
ICBpZiAobUJ1ZmZlcikKKyAgICB7CisgICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmR4Q29u
dGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworCisgICAgICAgIEQzRDExX01B
UFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJjZTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQg
PSBkeENvbnRleHQtPk1hcChtQnVmZmVyLCAwLCBEM0QxMV9NQVBfV1JJVEVfTk9fT1ZFUldSSVRF
LCAwLCAmbWFwcGVkUmVzb3VyY2UpOworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEVSUigiVmVydGV4IGJ1ZmZlciBtYXAgZmFpbGVkIHdpdGggZXJy
b3IgMHglMDh4IiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorCisgICAgICAgIGNoYXIqIGJ1ZmZlckRhdGEgPSBzdGF0aWNfY2FzdDxjaGFyKj4obWFwcGVk
UmVzb3VyY2UucERhdGEpOworICAgICAgICBtZW1jcHkoYnVmZmVyRGF0YSArIG9mZnNldCwgZGF0
YSwgc2l6ZSk7CisKKyAgICAgICAgZHhDb250ZXh0LT5Vbm1hcChtQnVmZmVyLCAwKTsKKworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgRVJSKCJW
ZXJ0ZXggYnVmZmVyIG5vdCBpbml0aWFsaXplZC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KK30KKworYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6Z2V0U3BhY2VSZXF1aXJlZChjb25zdCBn
bDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdMc2l6ZWkgY291bnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQg
Km91dFNwYWNlUmVxdWlyZWQpIGNvbnN0Cit7CisgICAgdW5zaWduZWQgaW50IGVsZW1lbnRTaXpl
ID0gZ2V0VmVydGV4Q29udmVyc2lvbihhdHRyaWIpLm91dHB1dEVsZW1lbnRTaXplOworCisgICAg
dW5zaWduZWQgaW50IGVsZW1lbnRDb3VudCA9IDA7CisgICAgaWYgKGluc3RhbmNlcyA9PSAwIHx8
IGF0dHJpYi5tRGl2aXNvciA9PSAwKQorICAgIHsKKyAgICAgICAgZWxlbWVudENvdW50ID0gY291
bnQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNp
Z25lZCBpbnQ+KGluc3RhbmNlcykgPCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46
Om1heCgpIC0gKGF0dHJpYi5tRGl2aXNvciAtIDEpKQorICAgICAgICB7CisgICAgICAgICAgICAv
LyBSb3VuZCB1cAorICAgICAgICAgICAgZWxlbWVudENvdW50ID0gKHN0YXRpY19jYXN0PHVuc2ln
bmVkIGludD4oaW5zdGFuY2VzKSArIChhdHRyaWIubURpdmlzb3IgLSAxKSkgLyBhdHRyaWIubURp
dmlzb3I7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBl
bGVtZW50Q291bnQgPSBpbnN0YW5jZXMgLyBhdHRyaWIubURpdmlzb3I7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAoZWxlbWVudFNpemUgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZCBpbnQ+OjptYXgoKSAvIGVsZW1lbnRDb3VudCkKKyAgICB7CisgICAgICAgIGlmIChvdXRTcGFj
ZVJlcXVpcmVkKQorICAgICAgICB7CisgICAgICAgICAgICAqb3V0U3BhY2VSZXF1aXJlZCA9IGVs
ZW1lbnRTaXplICogZWxlbWVudENvdW50OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
fQorCitib29sIFZlcnRleEJ1ZmZlcjExOjpyZXF1aXJlc0NvbnZlcnNpb24oY29uc3QgZ2w6OlZl
cnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdAoreworICAgIHJldHVybiAhZ2V0VmVydGV4Q29u
dmVyc2lvbihhdHRyaWIpLmlkZW50aXR5OworfQorCit1bnNpZ25lZCBpbnQgVmVydGV4QnVmZmVy
MTE6OmdldEJ1ZmZlclNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtQnVmZmVyU2l6ZTsKK30K
KworYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6c2V0QnVmZmVyU2l6ZSh1bnNpZ25lZCBpbnQgc2l6ZSkK
K3sKKyAgICBpZiAoc2l6ZSA+IG1CdWZmZXJTaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlu
aXRpYWxpemUoc2l6ZSwgbUR5bmFtaWNVc2FnZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKworYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6ZGlz
Y2FyZCgpCit7CisgICAgaWYgKG1CdWZmZXIpCisgICAgeworICAgICAgICBJRDNEMTFEZXZpY2VD
b250ZXh0ICpkeENvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKKworICAg
ICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7CisgICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gZHhDb250ZXh0LT5NYXAobUJ1ZmZlciwgMCwgRDNEMTFfTUFQX1dSSVRF
X0RJU0NBUkQsIDAsICZtYXBwZWRSZXNvdXJjZSk7CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJWZXJ0ZXggYnVmZmVyIG1hcCBmYWlsZWQg
d2l0aCBlcnJvciAweCUwOHgiLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgZHhDb250ZXh0LT5Vbm1hcChtQnVmZmVyLCAwKTsKKworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgRVJSKCJW
ZXJ0ZXggYnVmZmVyIG5vdCBpbml0aWFsaXplZC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KK30KKwordW5zaWduZWQgaW50IFZlcnRleEJ1ZmZlcjExOjpnZXRWZXJ0ZXhTaXplKGNv
bnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QKK3sKKyAgICByZXR1cm4gZ2V0
VmVydGV4Q29udmVyc2lvbihhdHRyaWIpLm91dHB1dEVsZW1lbnRTaXplOworfQorCitEWEdJX0ZP
Uk1BVCBWZXJ0ZXhCdWZmZXIxMTo6Z2V0RFhHSUZvcm1hdChjb25zdCBnbDo6VmVydGV4QXR0cmli
dXRlICZhdHRyaWIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdldFZlcnRleENvbnZlcnNpb24oYXR0
cmliKS5keGdpRm9ybWF0OworfQorCitJRDNEMTFCdWZmZXIgKlZlcnRleEJ1ZmZlcjExOjpnZXRC
dWZmZXIoKSBjb25zdAoreworICAgIHJldHVybiBtQnVmZmVyOworfQorCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgdW5zaWduZWQgaW50IGNvbXBvbmVudENvdW50LCBib29sIHdpZGVuLCBib29sIG5v
cm1hbGl6ZWQ+CitzdGF0aWMgdm9pZCBjb3B5VmVydGV4RGF0YShjb25zdCB2b2lkICppbnB1dCwg
dW5zaWduZWQgaW50IHN0cmlkZSwgdW5zaWduZWQgaW50IGNvdW50LCB2b2lkICpvdXRwdXQpCit7
CisgICAgdW5zaWduZWQgaW50IGF0dHJpYlNpemUgPSBzaXplb2YoVCkgKiBjb21wb25lbnRDb3Vu
dDsKKworICAgIGlmIChhdHRyaWJTaXplID09IHN0cmlkZSAmJiAhd2lkZW4pCisgICAgeworICAg
ICAgICBtZW1jcHkob3V0cHV0LCBpbnB1dCwgY291bnQgKiBhdHRyaWJTaXplKTsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IG91dHB1dFN0cmlkZSA9IHdpZGVu
ID8gNCA6IGNvbXBvbmVudENvdW50OworICAgICAgICBUIGRlZmF1bHRWYWwgPSBub3JtYWxpemVk
ID8gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCkgOiBUKDEpOworCisgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgY29uc3QgVCAqb2Zmc2V0SW5wdXQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IFQqPihyZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihpbnB1dCkgKyBpICogc3RyaWRlKTsKKyAgICAgICAg
ICAgIFQgKm9mZnNldE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KG91dHB1dCkgKyBpICog
b3V0cHV0U3RyaWRlOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8
IGNvbXBvbmVudENvdW50OyBqKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb2Zm
c2V0T3V0cHV0W2pdID0gb2Zmc2V0SW5wdXRbal07CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICh3aWRlbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvZmZzZXRPdXRw
dXRbM10gPSBkZWZhdWx0VmFsOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQor
Cit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IGNvbXBvbmVudENvdW50Pgorc3RhdGljIHZvaWQgY29w
eUZpeGVkVmVydGV4RGF0YShjb25zdCB2b2lkKiBpbnB1dCwgdW5zaWduZWQgaW50IHN0cmlkZSwg
dW5zaWduZWQgaW50IGNvdW50LCB2b2lkKiBvdXRwdXQpCit7CisgICAgc3RhdGljIGNvbnN0IGZs
b2F0IGRpdmlzb3IgPSAxLjBmIC8gKDEgPDwgMTYpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3QgR0xmaXhlZCogb2Zm
c2V0SW5wdXQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEdMZml4ZWQqPihyZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihpbnB1dCkgKyBzdHJpZGUgKiBpKTsKKyAgICAgICAgZmxvYXQqIG9m
ZnNldE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihvdXRwdXQpICsgaSAqIGNvbXBv
bmVudENvdW50OworCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgY29tcG9u
ZW50Q291bnQ7IGorKykKKyAgICAgICAgeworICAgICAgICAgICAgb2Zmc2V0T3V0cHV0W2pdID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG9mZnNldElucHV0W2pdKSAqIGRpdmlzb3I7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbnQgY29tcG9uZW50
Q291bnQsIGJvb2wgbm9ybWFsaXplZD4KK3N0YXRpYyB2b2lkIGNvcHlUb0Zsb2F0VmVydGV4RGF0
YShjb25zdCB2b2lkKiBpbnB1dCwgdW5zaWduZWQgaW50IHN0cmlkZSwgdW5zaWduZWQgaW50IGNv
dW50LCB2b2lkKiBvdXRwdXQpCit7CisgICAgdHlwZWRlZiBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+
IE5MOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAg
IHsKKyAgICAgICAgY29uc3QgVCAqb2Zmc2V0SW5wdXQgPSByZWludGVycHJldF9jYXN0PGNvbnN0
IFQqPihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihpbnB1dCkgKyBzdHJpZGUgKiBpKTsK
KyAgICAgICAgZmxvYXQgKm9mZnNldE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihv
dXRwdXQpICsgaSAqIGNvbXBvbmVudENvdW50OworCisgICAgICAgIGZvciAodW5zaWduZWQgaW50
IGogPSAwOyBqIDwgY29tcG9uZW50Q291bnQ7IGorKykKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKG5vcm1hbGl6ZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKE5MOjpp
c19zaWduZWQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBm
bG9hdCBkaXZpc29yID0gMS4wZiAvICgyICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KE5MOjptYXgoKSkg
KyAxKTsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0T3V0cHV0W2pdID0gKDIgKiBzdGF0aWNf
Y2FzdDxmbG9hdD4ob2Zmc2V0SW5wdXRbal0pICsgMSkgKiBkaXZpc29yOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG9mZnNldElu
cHV0W2pdKSAvIE5MOjptYXgoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb2Zmc2V0T3V0
cHV0W2pdID0gIHN0YXRpY19jYXN0PGZsb2F0PihvZmZzZXRJbnB1dFtqXSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK2NvbnN0IFZlcnRleEJ1ZmZlcjExOjpWZXJ0ZXhD
b252ZXJ0ZXIgVmVydGV4QnVmZmVyMTE6Om1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tOVU1fR0xfVkVS
VEVYX0FUVFJJQl9UWVBFU11bMl1bNF0gPQoreworICAgIHsgLy8gR0xfQllURQorICAgICAgICB7
IC8vIHVubm9ybWFsaXplZAorICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdM
Ynl0ZSwgMSwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyX0ZMT0FULCA0IH0sCisgICAg
ICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xieXRlLCAyLCBmYWxzZT4sIGZhbHNl
LCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKKyAgICAgICAgICAgIHsgJmNvcHlUb0Zs
b2F0VmVydGV4RGF0YTxHTGJ5dGUsIDMsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkcz
MkIzMl9GTE9BVCwgMTIgfSwKKyAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxH
TGJ5dGUsIDQsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCwg
MTYgfSwKKyAgICAgICAgfSwKKyAgICAgICAgeyAvLyBub3JtYWxpemVkCisgICAgICAgICAgICB7
ICZjb3B5VmVydGV4RGF0YTxHTGJ5dGUsIDEsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JN
QVRfUjhfU05PUk0sIDEgfSwKKyAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMYnl0ZSwg
MiwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SOEc4X1NOT1JNLCAyIH0sCisgICAg
ICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGJ5dGUsIDMsIHRydWUsIHRydWU+LCBmYWxzZSwg
RFhHSV9GT1JNQVRfUjhHOEI4QThfU05PUk0sIDQgfSwKKyAgICAgICAgICAgIHsgJmNvcHlWZXJ0
ZXhEYXRhPEdMYnl0ZSwgNCwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SOEc4QjhB
OF9TTk9STSwgNCB9LAorICAgICAgICB9LAorICAgIH0sCisgICAgeyAvLyBHTF9VTlNJR05FRF9C
WVRFCisgICAgICAgIHsgLy8gdW5ub3JtYWxpemVkCisgICAgICAgICAgICB7ICZjb3B5VG9GbG9h
dFZlcnRleERhdGE8R0x1Ynl0ZSwgMSwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyX0ZM
T0FULCA0IH0sCisgICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0x1Ynl0ZSwg
MiwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCA4IH0sCisgICAgICAg
ICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0x1Ynl0ZSwgMywgZmFsc2U+LCBmYWxzZSwg
RFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAxMiB9LAorICAgICAgICAgICAgeyAmY29weVRv
RmxvYXRWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDQsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1Iz
MkczMkIzMkEzMl9GTE9BVCwgMTYgfSwKKyAgICAgICAgfSwKKyAgICAgICAgeyAvLyBub3JtYWxp
emVkCisgICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHVieXRlLCAxLCBmYWxzZSwgdHJ1
ZT4sIHRydWUsIERYR0lfRk9STUFUX1I4X1VOT1JNLCAxIH0sCisgICAgICAgICAgICB7ICZjb3B5
VmVydGV4RGF0YTxHTHVieXRlLCAyLCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1I4
RzhfVU5PUk0sIDIgfSwKKyAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDMs
IHRydWUsIHRydWU+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk0sIDQgfSwKKyAg
ICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDQsIGZhbHNlLCB0cnVlPiwgdHJ1
ZSwgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk0sIDQgfSwKKyAgICAgICAgfSwKKyAgICB9LAor
ICAgIHsgLy8gR0xfU0hPUlQKKyAgICAgICAgeyAvLyB1bm5vcm1hbGl6ZWQKKyAgICAgICAgICAg
IHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHNob3J0LCAxLCBmYWxzZT4sIGZhbHNlLCBEWEdJ
X0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKKyAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4
RGF0YTxHTHNob3J0LCAyLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQs
IDggfSwKKyAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHNob3J0LCAzLCBm
YWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0sCisgICAgICAg
ICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xzaG9ydCwgNCwgZmFsc2U+LCBmYWxzZSwg
RFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAorICAgICAgICB9LAorICAgICAg
ICB7IC8vIG5vcm1hbGl6ZWQKKyAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMc2hvcnQs
IDEsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjE2X1NOT1JNLCAyIH0sCisgICAg
ICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHNob3J0LCAyLCBmYWxzZSwgdHJ1ZT4sIHRydWUs
IERYR0lfRk9STUFUX1IxNkcxNl9TTk9STSwgNCB9LAorICAgICAgICAgICAgeyAmY29weVZlcnRl
eERhdGE8R0xzaG9ydCwgMywgdHJ1ZSwgdHJ1ZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMTZHMTZC
MTZBMTZfU05PUk0sIDggfSwKKyAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMc2hvcnQs
IDQsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1NOT1JNLCA4
IH0sCisgICAgICAgIH0sCisgICAgfSwKKyAgICB7IC8vIEdMX1VOU0lHTkVEX1NIT1JUCisgICAg
ICAgIHsgLy8gdW5ub3JtYWxpemVkCisgICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERh
dGE8R0x1c2hvcnQsIDEsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9
LAorICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMdXNob3J0LCAyLCBmYWxz
ZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKKyAgICAgICAgICAgIHsg
JmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVzaG9ydCwgMywgZmFsc2U+LCBmYWxzZSwgRFhHSV9G
T1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAxMiB9LAorICAgICAgICAgICAgeyAmY29weVRvRmxvYXRW
ZXJ0ZXhEYXRhPEdMdXNob3J0LCA0LCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJC
MzJBMzJfRkxPQVQsIDE2IH0sCisgICAgICAgIH0sCisgICAgICAgIHsgLy8gbm9ybWFsaXplZAor
ICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1c2hvcnQsIDEsIGZhbHNlLCB0cnVlPiwg
dHJ1ZSwgRFhHSV9GT1JNQVRfUjE2X1VOT1JNLCAyIH0sCisgICAgICAgICAgICB7ICZjb3B5VmVy
dGV4RGF0YTxHTHVzaG9ydCwgMiwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMTZH
MTZfVU5PUk0sIDQgfSwKKyAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdXNob3J0LCAz
LCB0cnVlLCB0cnVlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9VTk9STSwgOCB9
LAorICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1c2hvcnQsIDQsIGZhbHNlLCB0cnVl
PiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1VOT1JNLCA4IH0sCisgICAgICAgIH0s
CisgICAgfSwKKyAgICB7IC8vIEdMX0ZJWEVECisgICAgICAgIHsgLy8gdW5ub3JtYWxpemVkCisg
ICAgICAgICAgICB7ICZjb3B5Rml4ZWRWZXJ0ZXhEYXRhPDE+LCBmYWxzZSwgRFhHSV9GT1JNQVRf
UjMyX0ZMT0FULCA0IH0sCisgICAgICAgICAgICB7ICZjb3B5Rml4ZWRWZXJ0ZXhEYXRhPDI+LCBm
YWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCA4IH0sCisgICAgICAgICAgICB7ICZjb3B5
Rml4ZWRWZXJ0ZXhEYXRhPDM+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAx
MiB9LAorICAgICAgICAgICAgeyAmY29weUZpeGVkVmVydGV4RGF0YTw0PiwgZmFsc2UsIERYR0lf
Rk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCwgMTYgfSwKKyAgICAgICAgfSwKKyAgICAgICAgeyAv
LyBub3JtYWxpemVkCisgICAgICAgICAgICB7ICZjb3B5Rml4ZWRWZXJ0ZXhEYXRhPDE+LCBmYWxz
ZSwgRFhHSV9GT1JNQVRfUjMyX0ZMT0FULCA0IH0sCisgICAgICAgICAgICB7ICZjb3B5Rml4ZWRW
ZXJ0ZXhEYXRhPDI+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCA4IH0sCisgICAg
ICAgICAgICB7ICZjb3B5Rml4ZWRWZXJ0ZXhEYXRhPDM+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMy
RzMyQjMyX0ZMT0FULCAxMiB9LAorICAgICAgICAgICAgeyAmY29weUZpeGVkVmVydGV4RGF0YTw0
PiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCwgMTYgfSwKKyAgICAgICAg
fSwKKyAgICB9LAorICAgIHsgLy8gR0xfRkxPQVQKKyAgICAgICAgeyAvLyB1bm5vcm1hbGl6ZWQK
KyAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDEsIGZhbHNlLCBmYWxzZT4s
IHRydWUsIERYR0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9LAorICAgICAgICAgICAgeyAmY29weVZl
cnRleERhdGE8R0xmbG9hdCwgMiwgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMy
RzMyX0ZMT0FULCA4IH0sCisgICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCAz
LCBmYWxzZSwgZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0s
CisgICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCA0LCBmYWxzZSwgZmFsc2U+
LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsIDE2IH0sCisgICAgICAgIH0s
CisgICAgICAgIHsgLy8gbm9ybWFsaXplZAorICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8
R0xmbG9hdCwgMSwgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMyX0ZMT0FULCA0
IH0sCisgICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCAyLCBmYWxzZSwgZmFs
c2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKKyAgICAgICAgICAgIHsg
JmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDMsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lfRk9S
TUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKKyAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRh
PEdMZmxvYXQsIDQsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lfRk9STUFUX1IzMkczMkIzMkEz
Ml9GTE9BVCwgMTYgfSwKKyAgICAgICAgfSwKKyAgICB9LAorfTsKKworY29uc3QgVmVydGV4QnVm
ZmVyMTE6OlZlcnRleENvbnZlcnRlciAmVmVydGV4QnVmZmVyMTE6OmdldFZlcnRleENvbnZlcnNp
b24oY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlKQoreworICAgIHVuc2lnbmVk
IGludCB0eXBlSW5kZXggPSAwOworICAgIHN3aXRjaCAoYXR0cmlidXRlLm1UeXBlKQorICAgIHsK
KyAgICAgIGNhc2UgR0xfQllURTogICAgICAgICAgICAgdHlwZUluZGV4ID0gMDsgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6ICAgIHR5cGVJbmRleCA9IDE7IGJyZWFrOworICAg
ICAgY2FzZSBHTF9TSE9SVDogICAgICAgICAgICB0eXBlSW5kZXggPSAyOyBicmVhazsKKyAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6ICAgdHlwZUluZGV4ID0gMzsgYnJlYWs7CisgICAgICBj
YXNlIEdMX0ZJWEVEOiAgICAgICAgICAgIHR5cGVJbmRleCA9IDQ7IGJyZWFrOworICAgICAgY2Fz
ZSBHTF9GTE9BVDogICAgICAgICAgICB0eXBlSW5kZXggPSA1OyBicmVhazsKKyAgICAgIGRlZmF1
bHQ6ICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsgYnJlYWs7CisgICAgfQorCisgICAg
cmV0dXJuIG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1t0eXBlSW5kZXhdW2F0dHJpYnV0ZS5tTm9ybWFs
aXplZCA/IDEgOiAwXVthdHRyaWJ1dGUubVNpemUgLSAxXTsKK30KKworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9WZXJ0
ZXhCdWZmZXIxMS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9WZXJ0ZXhCdWZmZXIxMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVjZWI0MjZlODJkNDJiNTU2
NjZjNTc5YzNmZWUxZmUyYWI3YmE4MDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1ZlcnRleEJ1ZmZlcjExLmgK
QEAgLTAsMCArMSw3NCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFZlcnRleEJ1ZmZlcjExLmg6IERl
ZmluZXMgdGhlIEQzRDExIFZlcnRleEJ1ZmZlciBpbXBsZW1lbnRhdGlvbi4KKworI2lmbmRlZiBM
SUJHTEVTVjJfUkVOREVSRVJfVkVSVEVYQlVGRkVSMTFfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JF
TkRFUkVSX1ZFUlRFWEJVRkZFUjExX0hfCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
VmVydGV4QnVmZmVyLmgiCisKK25hbWVzcGFjZSByeAoreworY2xhc3MgUmVuZGVyZXIxMTsKKwor
Y2xhc3MgVmVydGV4QnVmZmVyMTEgOiBwdWJsaWMgVmVydGV4QnVmZmVyCit7CisgIHB1YmxpYzoK
KyAgICBleHBsaWNpdCBWZXJ0ZXhCdWZmZXIxMShyeDo6UmVuZGVyZXIxMSAqY29uc3QgcmVuZGVy
ZXIpOworICAgIHZpcnR1YWwgflZlcnRleEJ1ZmZlcjExKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wg
aW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgc2l6ZSwgYm9vbCBkeW5hbWljVXNhZ2UpOworCisgICAg
c3RhdGljIFZlcnRleEJ1ZmZlcjExICptYWtlVmVydGV4QnVmZmVyMTEoVmVydGV4QnVmZmVyICp2
ZXRleEJ1ZmZlcik7CisKKyAgICB2aXJ0dWFsIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNv
bnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291
bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IG9mZnNldCk7CisgICAgdmlydHVhbCBib29sIHN0b3JlUmF3RGF0
YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNl
dCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0U3BhY2VSZXF1aXJlZChjb25zdCBnbDo6VmVydGV4
QXR0cmlidXRlICZhdHRyaWIsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqb3V0U3BhY2VSZXF1
aXJlZCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNDb252ZXJzaW9uKGNvbnN0
IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHVuc2ln
bmVkIGludCBnZXRCdWZmZXJTaXplKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNldEJ1ZmZl
clNpemUodW5zaWduZWQgaW50IHNpemUpOworICAgIHZpcnR1YWwgYm9vbCBkaXNjYXJkKCk7CisK
KyAgICB1bnNpZ25lZCBpbnQgZ2V0VmVydGV4U2l6ZShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRl
ICZhdHRyaWIpIGNvbnN0OworICAgIERYR0lfRk9STUFUIGdldERYR0lGb3JtYXQoY29uc3QgZ2w6
OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdDsKKworICAgIElEM0QxMUJ1ZmZlciAqZ2V0
QnVmZmVyKCkgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oVmVydGV4QnVmZmVyMTEpOworCisgICAgcng6OlJlbmRlcmVyMTEgKmNvbnN0IG1SZW5kZXJl
cjsKKworICAgIElEM0QxMUJ1ZmZlciAqbUJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBpbnQgbUJ1ZmZl
clNpemU7CisgICAgYm9vbCBtRHluYW1pY1VzYWdlOworCisgICAgdHlwZWRlZiB2b2lkICgqVmVy
dGV4Q29udmVyc2lvbkZ1bmN0aW9uKShjb25zdCB2b2lkICosIHVuc2lnbmVkIGludCwgdW5zaWdu
ZWQgaW50LCB2b2lkICopOworICAgIHN0cnVjdCBWZXJ0ZXhDb252ZXJ0ZXIKKyAgICB7CisgICAg
ICAgIFZlcnRleENvbnZlcnNpb25GdW5jdGlvbiBjb252ZXJzaW9uRnVuYzsKKyAgICAgICAgYm9v
bCBpZGVudGl0eTsKKyAgICAgICAgRFhHSV9GT1JNQVQgZHhnaUZvcm1hdDsKKyAgICAgICAgdW5z
aWduZWQgaW50IG91dHB1dEVsZW1lbnRTaXplOworICAgIH07CisKKyAgICBlbnVtIHsgTlVNX0dM
X1ZFUlRFWF9BVFRSSUJfVFlQRVMgPSA2IH07CisKKyAgICAvLyBUaGlzIHRhYmxlIGlzIHVzZWQg
dG8gZ2VuZXJhdGUgbUF0dHJpYnV0ZVR5cGVzLgorICAgIHN0YXRpYyBjb25zdCBWZXJ0ZXhDb252
ZXJ0ZXIgbVBvc3NpYmxlVHJhbnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsy
XVs0XTsgLy8gW0dMIHR5cGVzIGFzIGVudW1lcmF0ZWQgYnkgdHlwZUluZGV4KCldW25vcm1hbGl6
ZWRdW3NpemUgLSAxXQorCisgICAgc3RhdGljIGNvbnN0IFZlcnRleENvbnZlcnRlciAmZ2V0VmVy
dGV4Q29udmVyc2lvbihjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpOworfTsK
KworfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1ZFUlRFWEJVRkZFUjExX0hfCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42ZjA2MDI0ZmI1YWExMTI4YWQ1ZDFmMGU5ZDIzNDFlNzhkYTBhYTk0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9yZW5kZXJlcjExX3V0aWxzLmNwcApAQCAtMCwwICsxLDY4OCBAQAorI2luY2x1ZGUgInByZWNv
bXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gcmVuZGVyZXIxMV91dGlscy5jcHA6IENvbnZl
cnNpb24gZnVuY3Rpb25zIGFuZCBvdGhlciB1dGlsaXR5IHJvdXRpbmVzCisvLyBzcGVjaWZpYyB0
byB0aGUgRDNEMTEgcmVuZGVyZXIuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvcmVuZGVyZXIxMV91dGlscy5oIgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKK25h
bWVzcGFjZSBnbF9kM2QxMQoreworCitEM0QxMV9CTEVORCBDb252ZXJ0QmxlbmRGdW5jKEdMZW51
bSBnbEJsZW5kLCBib29sIGlzQWxwaGEpCit7CisgICAgRDNEMTFfQkxFTkQgZDNkQmxlbmQgPSBE
M0QxMV9CTEVORF9aRVJPOworCisgICAgc3dpdGNoIChnbEJsZW5kKQorICAgIHsKKyAgICAgIGNh
c2UgR0xfWkVSTzogICAgICAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzRDExX0JMRU5EX1pF
Uk87ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9PTkU6ICAgICAgICAgICAg
ICAgICAgICAgIGQzZEJsZW5kID0gRDNEMTFfQkxFTkRfT05FOyAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX1NSQ19DT0xPUjogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSAo
aXNBbHBoYSA/IEQzRDExX0JMRU5EX1NSQ19BTFBIQSA6IEQzRDExX0JMRU5EX1NSQ19DT0xPUik7
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19DT0xPUjogICAg
ICBkM2RCbGVuZCA9IChpc0FscGhhID8gRDNEMTFfQkxFTkRfSU5WX1NSQ19BTFBIQSA6IEQzRDEx
X0JMRU5EX0lOVl9TUkNfQ09MT1IpOyAgIGJyZWFrOworICAgICAgY2FzZSBHTF9EU1RfQ09MT1I6
ICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gKGlzQWxwaGEgPyBEM0QxMV9CTEVORF9ERVNUX0FM
UEhBIDogRDNEMTFfQkxFTkRfREVTVF9DT0xPUik7ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX09ORV9NSU5VU19EU1RfQ09MT1I6ICAgICAgZDNkQmxlbmQgPSAoaXNBbHBoYSA/IEQzRDEx
X0JMRU5EX0lOVl9ERVNUX0FMUEhBIDogRDNEMTFfQkxFTkRfSU5WX0RFU1RfQ09MT1IpOyBicmVh
azsKKyAgICAgIGNhc2UgR0xfU1JDX0FMUEhBOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQz
RDExX0JMRU5EX1NSQ19BTFBIQTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9PTkVf
TUlOVVNfU1JDX0FMUEhBOiAgICAgIGQzZEJsZW5kID0gRDNEMTFfQkxFTkRfSU5WX1NSQ19BTFBI
QTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0RTVF9BTFBIQTogICAgICAgICAgICAgICAg
ZDNkQmxlbmQgPSBEM0QxMV9CTEVORF9ERVNUX0FMUEhBOyAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfT05FX01JTlVTX0RTVF9BTFBIQTogICAgICBkM2RCbGVuZCA9IEQzRDExX0JMRU5E
X0lOVl9ERVNUX0FMUEhBOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9DT05TVEFOVF9DT0xP
UjogICAgICAgICAgIGQzZEJsZW5kID0gRDNEMTFfQkxFTkRfQkxFTkRfRkFDVE9SOyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUjogZDNkQmxlbmQg
PSBEM0QxMV9CTEVORF9JTlZfQkxFTkRfRkFDVE9SOyAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
Q09OU1RBTlRfQUxQSEE6ICAgICAgICAgICBkM2RCbGVuZCA9IEQzRDExX0JMRU5EX0JMRU5EX0ZB
Q1RPUjsgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQ
SEE6IGQzZEJsZW5kID0gRDNEMTFfQkxFTkRfSU5WX0JMRU5EX0ZBQ1RPUjsgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX1NSQ19BTFBIQV9TQVRVUkFURTogICAgICAgZDNkQmxlbmQgPSBEM0QxMV9C
TEVORF9TUkNfQUxQSEFfU0FUOyAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIGQzZEJsZW5kOworfQorCitEM0QxMV9CTEVORF9P
UCBDb252ZXJ0QmxlbmRPcChHTGVudW0gZ2xCbGVuZE9wKQoreworICAgIEQzRDExX0JMRU5EX09Q
IGQzZEJsZW5kT3AgPSBEM0QxMV9CTEVORF9PUF9BREQ7CisKKyAgICBzd2l0Y2ggKGdsQmxlbmRP
cCkKKyAgICB7CisgICAgICBjYXNlIEdMX0ZVTkNfQUREOiAgICAgICAgICAgICAgZDNkQmxlbmRP
cCA9IEQzRDExX0JMRU5EX09QX0FERDsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9G
VU5DX1NVQlRSQUNUOiAgICAgICAgIGQzZEJsZW5kT3AgPSBEM0QxMV9CTEVORF9PUF9TVUJUUkFD
VDsgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUOiBkM2RC
bGVuZE9wID0gRDNEMTFfQkxFTkRfT1BfUkVWX1NVQlRSQUNUOyAgYnJlYWs7CisgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBkM2RCbGVuZE9wOworfQor
CitVSU5UOCBDb252ZXJ0Q29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUs
IGJvb2wgYWxwaGEpCit7CisgICAgVUlOVDggbWFzayA9IDA7CisgICAgaWYgKHJlZCkKKyAgICB7
CisgICAgICAgIG1hc2sgfD0gRDNEMTFfQ09MT1JfV1JJVEVfRU5BQkxFX1JFRDsKKyAgICB9Cisg
ICAgaWYgKGdyZWVuKQorICAgIHsKKyAgICAgICAgbWFzayB8PSBEM0QxMV9DT0xPUl9XUklURV9F
TkFCTEVfR1JFRU47CisgICAgfQorICAgIGlmIChibHVlKQorICAgIHsKKyAgICAgICAgbWFzayB8
PSBEM0QxMV9DT0xPUl9XUklURV9FTkFCTEVfQkxVRTsKKyAgICB9CisgICAgaWYgKGFscGhhKQor
ICAgIHsKKyAgICAgICAgbWFzayB8PSBEM0QxMV9DT0xPUl9XUklURV9FTkFCTEVfQUxQSEE7Cisg
ICAgfQorICAgIHJldHVybiBtYXNrOworfQorCitEM0QxMV9DVUxMX01PREUgQ29udmVydEN1bGxN
b2RlKGJvb2wgY3VsbEVuYWJsZWQsIEdMZW51bSBjdWxsTW9kZSkKK3sKKyAgICBEM0QxMV9DVUxM
X01PREUgY3VsbCA9IEQzRDExX0NVTExfTk9ORTsKKworICAgIGlmIChjdWxsRW5hYmxlZCkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAoY3VsbE1vZGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNl
IEdMX0ZST05UOiAgICAgICAgICAgIGN1bGwgPSBEM0QxMV9DVUxMX0ZST05UOyAgICBicmVhazsK
KyAgICAgICAgICBjYXNlIEdMX0JBQ0s6ICAgICAgICAgICAgIGN1bGwgPSBEM0QxMV9DVUxMX0JB
Q0s7ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZST05UX0FORF9CQUNLOiAgIGN1bGwg
PSBEM0QxMV9DVUxMX05PTkU7ICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGN1bGwg
PSBEM0QxMV9DVUxMX05PTkU7CisgICAgfQorCisgICAgcmV0dXJuIGN1bGw7Cit9CisKK0QzRDEx
X0NPTVBBUklTT05fRlVOQyBDb252ZXJ0Q29tcGFyaXNvbihHTGVudW0gY29tcGFyaXNvbikKK3sK
KyAgICBEM0QxMV9DT01QQVJJU09OX0ZVTkMgZDNkQ29tcCA9IEQzRDExX0NPTVBBUklTT05fTkVW
RVI7CisgICAgc3dpdGNoIChjb21wYXJpc29uKQorICAgIHsKKyAgICAgIGNhc2UgR0xfTkVWRVI6
ICAgIGQzZENvbXAgPSBEM0QxMV9DT01QQVJJU09OX05FVkVSOyAgICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX0FMV0FZUzogICBkM2RDb21wID0gRDNEMTFfQ09NUEFSSVNPTl9BTFdBWVM7
ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MRVNTOiAgICAgZDNkQ29tcCA9IEQzRDEx
X0NPTVBBUklTT05fTEVTUzsgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTEVRVUFM
OiAgIGQzZENvbXAgPSBEM0QxMV9DT01QQVJJU09OX0xFU1NfRVFVQUw7ICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX0VRVUFMOiAgICBkM2RDb21wID0gRDNEMTFfQ09NUEFSSVNPTl9FUVVBTDsg
ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9HUkVBVEVSOiAgZDNkQ29tcCA9IEQzRDEx
X0NPTVBBUklTT05fR1JFQVRFUjsgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfR0VRVUFM
OiAgIGQzZENvbXAgPSBEM0QxMV9DT01QQVJJU09OX0dSRUFURVJfRVFVQUw7ICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX05PVEVRVUFMOiBkM2RDb21wID0gRDNEMTFfQ09NUEFSSVNPTl9OT1RfRVFV
QUw7ICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisK
KyAgICByZXR1cm4gZDNkQ29tcDsKK30KKworRDNEMTFfREVQVEhfV1JJVEVfTUFTSyBDb252ZXJ0
RGVwdGhNYXNrKGJvb2wgZGVwdGhXcml0ZUVuYWJsZWQpCit7CisgICAgcmV0dXJuIGRlcHRoV3Jp
dGVFbmFibGVkID8gRDNEMTFfREVQVEhfV1JJVEVfTUFTS19BTEwgOiBEM0QxMV9ERVBUSF9XUklU
RV9NQVNLX1pFUk87Cit9CisKK1VJTlQ4IENvbnZlcnRTdGVuY2lsTWFzayhHTHVpbnQgc3RlbmNp
bG1hc2spCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFVJTlQ4PihzdGVuY2lsbWFzayk7Cit9
CisKK0QzRDExX1NURU5DSUxfT1AgQ29udmVydFN0ZW5jaWxPcChHTGVudW0gc3RlbmNpbE9wKQor
eworICAgIEQzRDExX1NURU5DSUxfT1AgZDNkU3RlbmNpbE9wID0gRDNEMTFfU1RFTkNJTF9PUF9L
RUVQOworCisgICAgc3dpdGNoIChzdGVuY2lsT3ApCisgICAgeworICAgICAgY2FzZSBHTF9aRVJP
OiAgICAgIGQzZFN0ZW5jaWxPcCA9IEQzRDExX1NURU5DSUxfT1BfWkVSTzsgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfS0VFUDogICAgICBkM2RTdGVuY2lsT3AgPSBEM0QxMV9TVEVOQ0lMX09Q
X0tFRVA7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JFUExBQ0U6ICAgZDNkU3RlbmNpbE9w
ID0gRDNEMTFfU1RFTkNJTF9PUF9SRVBMQUNFOyAgIGJyZWFrOworICAgICAgY2FzZSBHTF9JTkNS
OiAgICAgIGQzZFN0ZW5jaWxPcCA9IEQzRDExX1NURU5DSUxfT1BfSU5DUl9TQVQ7ICBicmVhazsK
KyAgICAgIGNhc2UgR0xfREVDUjogICAgICBkM2RTdGVuY2lsT3AgPSBEM0QxMV9TVEVOQ0lMX09Q
X0RFQ1JfU0FUOyAgYnJlYWs7CisgICAgICBjYXNlIEdMX0lOVkVSVDogICAgZDNkU3RlbmNpbE9w
ID0gRDNEMTFfU1RFTkNJTF9PUF9JTlZFUlQ7ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9JTkNS
X1dSQVA6IGQzZFN0ZW5jaWxPcCA9IEQzRDExX1NURU5DSUxfT1BfSU5DUjsgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfREVDUl9XUkFQOiBkM2RTdGVuY2lsT3AgPSBEM0QxMV9TVEVOQ0lMX09Q
X0RFQ1I7ICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0K
KworICAgIHJldHVybiBkM2RTdGVuY2lsT3A7Cit9CisKK0QzRDExX0ZJTFRFUiBDb252ZXJ0Rmls
dGVyKEdMZW51bSBtaW5GaWx0ZXIsIEdMZW51bSBtYWdGaWx0ZXIsIGZsb2F0IG1heEFuaXNvdHJv
cHkpCit7CisgICAgaWYgKG1heEFuaXNvdHJvcHkgPiAxLjBmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEQzRDExX0VOQ09ERV9BTklTT1RST1BJQ19GSUxURVIoZmFsc2UpOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBEM0QxMV9GSUxURVJfVFlQRSBkeE1pbiA9IEQzRDExX0ZJTFRF
Ul9UWVBFX1BPSU5UOworICAgICAgICBEM0QxMV9GSUxURVJfVFlQRSBkeE1pcCA9IEQzRDExX0ZJ
TFRFUl9UWVBFX1BPSU5UOworICAgICAgICBzd2l0Y2ggKG1pbkZpbHRlcikKKyAgICAgICAgewor
ICAgICAgICAgIGNhc2UgR0xfTkVBUkVTVDogICAgICAgICAgICAgICAgZHhNaW4gPSBEM0QxMV9G
SUxURVJfVFlQRV9QT0lOVDsgIGR4TWlwID0gRDNEMTFfRklMVEVSX1RZUEVfUE9JTlQ7ICBicmVh
azsKKyAgICAgICAgICBjYXNlIEdMX0xJTkVBUjogICAgICAgICAgICAgICAgIGR4TWluID0gRDNE
MTFfRklMVEVSX1RZUEVfTElORUFSOyBkeE1pcCA9IEQzRDExX0ZJTFRFUl9UWVBFX1BPSU5UOyAg
YnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOiBkeE1pbiA9
IEQzRDExX0ZJTFRFUl9UWVBFX1BPSU5UOyAgZHhNaXAgPSBEM0QxMV9GSUxURVJfVFlQRV9QT0lO
VDsgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOiAgZHhN
aW4gPSBEM0QxMV9GSUxURVJfVFlQRV9MSU5FQVI7IGR4TWlwID0gRDNEMTFfRklMVEVSX1RZUEVf
UE9JTlQ7ICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjog
IGR4TWluID0gRDNEMTFfRklMVEVSX1RZUEVfUE9JTlQ7ICBkeE1pcCA9IEQzRDExX0ZJTFRFUl9U
WVBFX0xJTkVBUjsgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVB
UjogICBkeE1pbiA9IEQzRDExX0ZJTFRFUl9UWVBFX0xJTkVBUjsgZHhNaXAgPSBEM0QxMV9GSUxU
RVJfVFlQRV9MSU5FQVI7IGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAg
ICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorCisgICAgICAgIEQzRDExX0ZJTFRF
Ul9UWVBFIGR4TWFnID0gRDNEMTFfRklMVEVSX1RZUEVfUE9JTlQ7CisgICAgICAgIHN3aXRjaCAo
bWFnRmlsdGVyKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9ORUFSRVNUOiBkeE1hZyA9
IEQzRDExX0ZJTFRFUl9UWVBFX1BPSU5UOyAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9MSU5F
QVI6ICBkeE1hZyA9IEQzRDExX0ZJTFRFUl9UWVBFX0xJTkVBUjsgYnJlYWs7CisgICAgICAgICAg
ZGVmYXVsdDogICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIEQzRDExX0VOQ09ERV9CQVNJQ19GSUxURVIoZHhNaW4sIGR4TWFnLCBkeE1pcCwgZmFsc2Up
OworICAgIH0KK30KKworRDNEMTFfVEVYVFVSRV9BRERSRVNTX01PREUgQ29udmVydFRleHR1cmVX
cmFwKEdMZW51bSB3cmFwKQoreworICAgIHN3aXRjaCAod3JhcCkKKyAgICB7CisgICAgICBjYXNl
IEdMX1JFUEVBVDogICAgICAgICAgcmV0dXJuIEQzRDExX1RFWFRVUkVfQUREUkVTU19XUkFQOwor
ICAgICAgY2FzZSBHTF9DTEFNUF9UT19FREdFOiAgIHJldHVybiBEM0QxMV9URVhUVVJFX0FERFJF
U1NfQ0xBTVA7CisgICAgICBjYXNlIEdMX01JUlJPUkVEX1JFUEVBVDogcmV0dXJuIEQzRDExX1RF
WFRVUkVfQUREUkVTU19NSVJST1I7CisgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgVU5S
RUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gRDNEMTFfVEVYVFVSRV9BRERSRVNTX1dS
QVA7Cit9CisKK0ZMT0FUIENvbnZlcnRNaW5MT0QoR0xlbnVtIG1pbkZpbHRlciwgdW5zaWduZWQg
aW50IGxvZE9mZnNldCkKK3sKKyAgICByZXR1cm4gKG1pbkZpbHRlciA9PSBHTF9ORUFSRVNUIHx8
IG1pbkZpbHRlciA9PSBHTF9MSU5FQVIpID8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGxvZE9mZnNldCkg
OiAtRkxUX01BWDsKK30KKworRkxPQVQgQ29udmVydE1heExPRChHTGVudW0gbWluRmlsdGVyLCB1
bnNpZ25lZCBpbnQgbG9kT2Zmc2V0KQoreworICAgIHJldHVybiAobWluRmlsdGVyID09IEdMX05F
QVJFU1QgfHwgbWluRmlsdGVyID09IEdMX0xJTkVBUikgPyBzdGF0aWNfY2FzdDxmbG9hdD4obG9k
T2Zmc2V0KSA6IEZMVF9NQVg7Cit9CisKK30KKworbmFtZXNwYWNlIGQzZDExX2dsCit7CisKK0dM
ZW51bSBDb252ZXJ0QmFja0J1ZmZlckZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpCit7CisgICAg
c3dpdGNoIChmb3JtYXQpCisgICAgeworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9V
Tk9STTogcmV0dXJuIEdMX1JHQkE4X09FUzsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4
QThfVU5PUk06IHJldHVybiBHTF9CR1JBOF9FWFQ7CisgICAgICBkZWZhdWx0OgorICAgICAgICBV
TlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Cit9CisKK0dM
ZW51bSBDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKK3sKKyAg
ICBzd2l0Y2ggKGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIERYR0lfRk9STUFUX1VOS05PV046
IHJldHVybiBHTF9OT05FOworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZfVU5PUk06IHJldHVy
biBHTF9ERVBUSF9DT01QT05FTlQxNjsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JN
X1M4X1VJTlQ6IHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKKyAgICAgIGRlZmF1bHQ6
CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIEdMX0RFUFRIMjRf
U1RFTkNJTDhfT0VTOworfQorCitHTGVudW0gQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChEWEdJ
X0ZPUk1BVCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpCisgICAgeworICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STToKKyAgICAgICAgcmV0dXJuIEdMX0JHUkE4X0VY
VDsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk06CisgICAgICAgIHJldHVy
biBHTF9SR0JBOF9PRVM7CisgICAgICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9STToKKyAgICAg
ICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2OworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9E
MjRfVU5PUk1fUzhfVUlOVDoKKyAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VT
OworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gR0xfUkdCQThfT0VTOworfQorCitHTGVudW0gQ29udmVydFRleHR1cmVJbnRlcm5hbEZv
cm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpCisgICAgewor
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STToKKyAgICAgICAgcmV0dXJuIEdM
X1JHQkE4X09FUzsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQThfVU5PUk06CisgICAgICAgIHJl
dHVybiBHTF9BTFBIQThfRVhUOworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk06Cisg
ICAgICAgIHJldHVybiBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDsKKyAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNOgorICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NFRF9S
R0JBX1MzVENfRFhUM19BTkdMRTsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNOgor
ICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRTsKKyAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUOgorICAgICAgICByZXR1cm4gR0xf
UkdCQTMyRl9FWFQ7CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVDoKKyAg
ICAgICAgcmV0dXJuIEdMX1JHQjMyRl9FWFQ7CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcx
NkIxNkExNl9GTE9BVDoKKyAgICAgICAgcmV0dXJuIEdMX1JHQkExNkZfRVhUOworICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STToKKyAgICAgICAgcmV0dXJuIEdMX0JHUkE4X0VY
VDsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVU5PUk06CisgICAgICAgIHJldHVybiBHTF9S
OF9FWFQ7CisgICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfVU5PUk06CisgICAgICAgIHJldHVy
biBHTF9SRzhfRVhUOworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfRkxPQVQ6CisgICAgICAg
IHJldHVybiBHTF9SMTZGX0VYVDsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X0ZMT0FU
OgorICAgICAgICByZXR1cm4gR0xfUkcxNkZfRVhUOworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9E
MTZfVU5PUk06CisgICAgICAgIHJldHVybiBHTF9ERVBUSF9DT01QT05FTlQxNjsKKyAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ6CisgICAgICAgIHJldHVybiBHTF9ERVBU
SDI0X1NURU5DSUw4X09FUzsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfVU5LTk9XTjoKKyAgICAg
ICAgcmV0dXJuIEdMX05PTkU7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgp
OworICAgIH0KKworICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Cit9CisKK30KKworbmFtZXNwYWNl
IGdsX2QzZDExCit7CisKK0RYR0lfRk9STUFUIENvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoR0xl
bnVtIGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEdM
X1JHQkE0OgorICAgICAgY2FzZSBHTF9SR0I1X0ExOgorICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6
CisgICAgICBjYXNlIEdMX1JHQjU2NToKKyAgICAgIGNhc2UgR0xfUkdCOF9PRVM6CisgICAgICAg
IHJldHVybiBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STTsKKyAgICAgIGNhc2UgR0xfQkdSQThf
RVhUOgorICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk07CisgICAgICBj
YXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgorICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfRDE2
X1VOT1JNOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVYODoKKyAgICAgIGNhc2UgR0xfREVQ
VEgyNF9TVEVOQ0lMOF9PRVM6CisgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1f
UzhfVUlOVDsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQor
CisgICAgcmV0dXJuIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOworfQorCitEWEdJX0ZPUk1B
VCBDb252ZXJ0VGV4dHVyZUZvcm1hdChHTGVudW0gaW50ZXJuYWxmb3JtYXQpCit7CisgICAgc3dp
dGNoIChpbnRlcm5hbGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEdMX1JHQjU2NToKKyAgICAg
IGNhc2UgR0xfUkdCQTQ6CisgICAgICBjYXNlIEdMX1JHQjVfQTE6CisgICAgICBjYXNlIEdMX1JH
QjhfT0VTOgorICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6CisgICAgICBjYXNlIEdMX0xVTUlOQU5D
RThfRVhUOgorICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQ6CisgICAgICAgIHJl
dHVybiBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STTsKKyAgICAgIGNhc2UgR0xfQUxQSEE4X0VY
VDoKKyAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0E4X1VOT1JNOworICAgICAgY2FzZSBHTF9D
T01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgorICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQxX0VYVDoKKyAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0JDMV9VTk9STTsK
KyAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKKyAgICAgICAg
cmV0dXJuIERYR0lfRk9STUFUX0JDMl9VTk9STTsKKyAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9S
R0JBX1MzVENfRFhUNV9BTkdMRToKKyAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0JDM19VTk9S
TTsKKyAgICAgIGNhc2UgR0xfUkdCQTMyRl9FWFQ6CisgICAgICBjYXNlIEdMX0FMUEhBMzJGX0VY
VDoKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVDoKKyAgICAgICAgcmV0dXJu
IERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDsKKyAgICAgIGNhc2UgR0xfUkdCMzJGX0VY
VDoKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMzJGX0VYVDoKKyAgICAgICAgcmV0dXJuIERYR0lf
Rk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDsKKyAgICAgIGNhc2UgR0xfUkdCQTE2Rl9FWFQ6Cisg
ICAgICBjYXNlIEdMX0FMUEhBMTZGX0VYVDoKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhB
MTZGX0VYVDoKKyAgICAgIGNhc2UgR0xfUkdCMTZGX0VYVDoKKyAgICAgIGNhc2UgR0xfTFVNSU5B
TkNFMTZGX0VYVDoKKyAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9B
VDsKKyAgICAgIGNhc2UgR0xfQkdSQThfRVhUOgorICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRf
QjhHOFI4QThfVU5PUk07CisgICAgICBjYXNlIEdMX1I4X0VYVDoKKyAgICAgICAgcmV0dXJuIERY
R0lfRk9STUFUX1I4X1VOT1JNOworICAgICAgY2FzZSBHTF9SRzhfRVhUOgorICAgICAgICByZXR1
cm4gRFhHSV9GT1JNQVRfUjhHOF9VTk9STTsKKyAgICAgIGNhc2UgR0xfUjE2Rl9FWFQ6CisgICAg
ICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMTZfRkxPQVQ7CisgICAgICBjYXNlIEdMX1JHMTZGX0VY
VDoKKyAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1IxNkcxNl9GTE9BVDsKKyAgICAgIGNhc2Ug
R0xfREVQVEhfQ09NUE9ORU5UMTY6CisgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9EMTZfVU5P
Uk07CisgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUzoKKyAgICAgIGNhc2UgR0xf
REVQVEgyNF9TVEVOQ0lMOF9PRVM6CisgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9EMjRfVU5P
Uk1fUzhfVUlOVDsKKyAgICAgIGNhc2UgR0xfTk9ORToKKyAgICAgICAgcmV0dXJuIERYR0lfRk9S
TUFUX1VOS05PV047CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
IH0KKworICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STTsKK30KKworfQorCitu
YW1lc3BhY2UgZDNkMTEKK3sKKwordm9pZCBTZXRQb3NpdGlvblRleENvb3JkVmVydGV4KFBvc2l0
aW9uVGV4Q29vcmRWZXJ0ZXgqIHZlcnRleCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgdSwgZmxv
YXQgdikKK3sKKyAgICB2ZXJ0ZXgtPnggPSB4OworICAgIHZlcnRleC0+eSA9IHk7CisgICAgdmVy
dGV4LT51ID0gdTsKKyAgICB2ZXJ0ZXgtPnYgPSB2OworfQorCit2b2lkIFNldFBvc2l0aW9uRGVw
dGhDb2xvclZlcnRleChQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgqIHZlcnRleCwgZmxvYXQgeCwg
ZmxvYXQgeSwgZmxvYXQgeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGdsOjpDb2xvciAmY29sb3IpCit7CisgICAgdmVydGV4LT54ID0geDsKKyAgICB2ZXJ0ZXgtPnkg
PSB5OworICAgIHZlcnRleC0+eiA9IHo7CisgICAgdmVydGV4LT5yID0gY29sb3IucmVkOworICAg
IHZlcnRleC0+ZyA9IGNvbG9yLmdyZWVuOworICAgIHZlcnRleC0+YiA9IGNvbG9yLmJsdWU7Cisg
ICAgdmVydGV4LT5hID0gY29sb3IuYWxwaGE7Cit9CisKK3NpemVfdCBDb21wdXRlUGl4ZWxTaXpl
Qml0cyhEWEdJX0ZPUk1BVCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpCisgICAgewor
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMV9VTk9STToKKyAgICAgICAgcmV0dXJuIDE7CisKKyAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQThfVU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX1I4
X1NJTlQ6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1NOT1JNOgorICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SOF9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVUlOVDoKKyAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVU5PUk06CisgICAgICAgIHJldHVybiA4OworCisgICAg
ICBjYXNlIERYR0lfRk9STUFUX0I1RzVSNUExX1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9CNUc2UjVfVU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9STToKKyAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjE2X0ZMT0FUOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZf
U0lOVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X1NOT1JNOgorICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SMTZfVFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IxNl9VSU5UOgor
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfVU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFU
X1I4RzhfU0lOVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9TTk9STToKKyAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfUjhHOF9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhH
OF9VSU5UOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNOgorICAgICAgICByZXR1
cm4gMTY7CisKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4WDhfVFlQRUxFU1M6CisgICAg
ICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOFg4X1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9COEc4UjhYOF9VTk9STV9TUkdCOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1f
UzhfVUlOVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FUOgorICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9EMzJfRkxPQVRfUzhYMjRfVUlOVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
RzhSOF9HOEI4X1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTBHMTBCMTBfWFJfQklB
U19BMl9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjEwRzEwQjEwQTJfVFlQRUxFU1M6
CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IxMEcxMEIxMEEyX1VJTlQ6CisgICAgICBjYXNlIERY
R0lfRk9STUFUX1IxMEcxMEIxMEEyX1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTFH
MTFCMTBfRkxPQVQ6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9GTE9BVDoKKyAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X1NJTlQ6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1Ix
NkcxNl9TTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X1RZUEVMRVNTOgorICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfVUlOVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjE2RzE2X1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMjRfVU5PUk1fWDhfVFlQRUxF
U1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IyNEc4X1RZUEVMRVNTOgorICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9SMzJfRkxPQVQ6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMl9GTE9BVF9Y
OFgyNF9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyX1NJTlQ6CisgICAgICBj
YXNlIERYR0lfRk9STUFUX1IzMl9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMy
X1VJTlQ6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfQjhHOF9VTk9STToKKyAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfU0lOVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhH
OEI4QThfU05PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1RZUEVMRVNTOgor
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VSU5UOgorICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SOEc4QjhBOF9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5P
Uk1fU1JHQjoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVFlQRUxFU1M6CisgICAg
ICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9COEc4UjhBOF9VTk9STV9TUkdCOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOUc5QjlFNV9T
SEFSRURFWFA6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1gyNF9UWVBFTEVTU19HOF9VSU5UOgor
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9YMzJfVFlQRUxFU1NfRzhYMjRfVUlOVDoKKyAgICAgICAg
cmV0dXJuIDMyOworCisgICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9BVDoK
KyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1NJTlQ6CisgICAgICBjYXNlIERY
R0lfRk9STUFUX1IxNkcxNkIxNkExNl9TTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2
RzE2QjE2QTE2X1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZf
VUlOVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1VOT1JNOgorICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQ6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1Iz
MkczMl9TSU5UOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJfVFlQRUxFU1M6CisgICAg
ICBjYXNlIERYR0lfRk9STUFUX1IzMkczMl9VSU5UOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
MzJHOFgyNF9UWVBFTEVTUzoKKyAgICAgICAgcmV0dXJuIDY0OworCisgICAgICBjYXNlIERYR0lf
Rk9STUFUX1IzMkczMkIzMl9GTE9BVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMy
X1NJTlQ6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9UWVBFTEVTUzoKKyAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX1VJTlQ6CisgICAgICAgIHJldHVybiA5NjsKKwor
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQ6CisgICAgICBjYXNlIERY
R0lfRk9STUFUX1IzMkczMkIzMkEzMl9TSU5UOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJH
MzJCMzJBMzJfVFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9V
SU5UOgorICAgICAgICByZXR1cm4gMTI4OworCisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9U
WVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNOgorICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9CQzFfVU5PUk1fU1JHQjoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1NO
T1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVFlQRUxFU1M6CisgICAgICBjYXNlIERY
R0lfRk9STUFUX0JDNF9VTk9STToKKyAgICAgICAgcmV0dXJuIDQ7CisKKyAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkMyX1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk06
CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STV9TUkdCOgorICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9CQzNfVFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STToK
KyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNX1NSR0I6CisgICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDNV9TTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1RZUEVMRVNTOgor
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfVU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFU
X0JDNkhfU0YxNjoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9UWVBFTEVTUzoKKyAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9VRjE2OgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdf
VFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9STToKKyAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkM3X1VOT1JNX1NSR0I6CisgICAgICAgIHJldHVybiA4OworCisgICAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3NpemVfdCBDb21wdXRlQmxv
Y2tTaXplQml0cyhEWEdJX0ZPUk1BVCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpCisg
ICAgeworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVFlQRUxFU1M6CisgICAgICBjYXNlIERY
R0lfRk9STUFUX0JDMV9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNX1NS
R0I6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9TTk9STToKKyAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfQkM0X1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVU5PUk06Cisg
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkMyX1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk1fU1JHQjoKKyAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9CQzNfVU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STV9TUkdCOgorICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfU05PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JD
NV9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1VOT1JNOgorICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzZIX1NGMTY6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVFlQ
RUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVUYxNjoKKyAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkM3X1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk06
CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9STV9TUkdCOgorICAgICAgICByZXR1cm4g
Q29tcHV0ZVBpeGVsU2l6ZUJpdHMoZm9ybWF0KSAqIDE2OworICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitib29sIElz
Q29tcHJlc3NlZChEWEdJX0ZPUk1BVCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpCisg
ICAgeworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVFlQRUxFU1M6CisgICAgICBjYXNlIERY
R0lfRk9STUFUX0JDMV9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNX1NS
R0I6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9TTk9STToKKyAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfQkM0X1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVU5PUk06Cisg
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkMyX1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk1fU1JHQjoKKyAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9CQzNfVU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STV9TUkdCOgorICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfU05PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JD
NV9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1VOT1JNOgorICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzZIX1NGMTY6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVFlQ
RUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVUYxNjoKKyAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkM3X1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk06
CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9STV9TUkdCOgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfVU5LTk9XTjoKKyAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KK30KKwordW5zaWduZWQgaW50IEdldFRleHR1cmVGb3JtYXREaW1l
bnNpb25BbGlnbm1lbnQoRFhHSV9GT1JNQVQgZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0
KQorICAgIHsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1RZUEVMRVNTOgorICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9S
TV9TUkdCOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfU05PUk06CisgICAgICBjYXNlIERY
R0lfRk9STUFUX0JDNF9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1VOT1JN
OgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDMl9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNX1NSR0I6
CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfQkMzX1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk1fU1JHQjoK
KyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1NOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9CQzVfVFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9VTk9STToKKyAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9TRjE2OgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZI
X1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1VGMTY6CisgICAgICBjYXNl
IERYR0lfRk9STUFUX0JDN19UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1VO
T1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk1fU1JHQjoKKyAgICAgICAgcmV0
dXJuIDQ7CisgICAgICBjYXNlIERYR0lfRk9STUFUX1VOS05PV046CisgICAgICAgIFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIHJldHVybiAxOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IDE7CisgICAgfQorfQorCitib29sIElzRGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFUIGZv
cm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIERYR0lfRk9S
TUFUX0QzMl9GTE9BVF9TOFgyNF9VSU5UOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxP
QVQ6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOgorICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9EMTZfVU5PUk06CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworRFhHSV9GT1JNQVQgR2V0
RGVwdGhUZXh0dXJlRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZv
cm1hdCkKKyAgICB7CisgICAgICBjYXNlIERYR0lfRk9STUFUX0QzMl9GTE9BVF9TOFgyNF9VSU5U
OiByZXR1cm4gRFhHSV9GT1JNQVRfUjMyRzhYMjRfVFlQRUxFU1M7CisgICAgICBjYXNlIERYR0lf
Rk9STUFUX0QzMl9GTE9BVDogICAgICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjMyX1RZUEVM
RVNTOworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDogICAgcmV0dXJu
IERYR0lfRk9STUFUX1IyNEc4X1RZUEVMRVNTOworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZf
VU5PUk06ICAgICAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1IxNl9UWVBFTEVTUzsKKyAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgICAgICAgICAgIHJldHVybiBEWEdJX0ZPUk1B
VF9VTktOT1dOOworICAgIH0KK30KKworRFhHSV9GT1JNQVQgR2V0RGVwdGhTaGFkZXJSZXNvdXJj
ZUZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpCisgICAg
eworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVRfUzhYMjRfVUlOVDogcmV0dXJuIERY
R0lfRk9STUFUX1IzMl9GTE9BVF9YOFgyNF9UWVBFTEVTUzsKKyAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfRDMyX0ZMT0FUOiAgICAgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMzJfVUlOVDsKKyAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ6ICAgIHJldHVybiBEWEdJX0ZP
Uk1BVF9SMjRfVU5PUk1fWDhfVFlQRUxFU1M7CisgICAgICBjYXNlIERYR0lfRk9STUFUX0QxNl9V
Tk9STTogICAgICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjE2X1VOT1JNOworICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAgICAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1VO
S05PV047CisgICAgfQorfQorCitIUkVTVUxUIFNldERlYnVnTmFtZShJRDNEMTFEZXZpY2VDaGls
ZCAqcmVzb3VyY2UsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisjaWYgZGVmaW5lZChfREVCVUcpCisg
ICAgcmV0dXJuIHJlc291cmNlLT5TZXRQcml2YXRlRGF0YShXS1BESURfRDNERGVidWdPYmplY3RO
YW1lLCBzdHJsZW4obmFtZSksIG5hbWUpOworI2Vsc2UKKyAgICByZXR1cm4gU19PSzsKKyNlbmRp
ZgorfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjFiYzQ4YzFhMTM1YTVkODhhODliZDU2ODU2OWZkNmU5ZGQ2NzczZWUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaApAQCAtMCwwICsxLDk1IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworLy8gcmVuZGVyZXIxMV91dGlscy5oOiBDb252ZXJzaW9uIGZ1bmN0aW9ucyBhbmQgb3Ro
ZXIgdXRpbGl0eSByb3V0aW5lcworLy8gc3BlY2lmaWMgdG8gdGhlIEQzRDExIHJlbmRlcmVyLgor
CisjaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjExX1VUSUxTX0gKKyNkZWZpbmUg
TElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUkVSMTFfVVRJTFNfSAorCisjaW5jbHVkZSAibGliR0xF
U3YyL2FuZ2xldHlwZXMuaCIKKworbmFtZXNwYWNlIGdsX2QzZDExCit7CisKK0QzRDExX0JMRU5E
IENvbnZlcnRCbGVuZEZ1bmMoR0xlbnVtIGdsQmxlbmQsIGJvb2wgaXNBbHBoYSk7CitEM0QxMV9C
TEVORF9PUCBDb252ZXJ0QmxlbmRPcChHTGVudW0gZ2xCbGVuZE9wKTsKK1VJTlQ4IENvbnZlcnRD
b2xvck1hc2soYm9vbCBtYXNrUmVkLCBib29sIG1hc2tHcmVlbiwgYm9vbCBtYXNrQmx1ZSwgYm9v
bCBtYXNrQWxwaGEpOworCitEM0QxMV9DVUxMX01PREUgQ29udmVydEN1bGxNb2RlKGJvb2wgY3Vs
bEVuYWJsZWQsIEdMZW51bSBjdWxsTW9kZSk7CisKK0QzRDExX0NPTVBBUklTT05fRlVOQyBDb252
ZXJ0Q29tcGFyaXNvbihHTGVudW0gY29tcGFyaXNvbik7CitEM0QxMV9ERVBUSF9XUklURV9NQVNL
IENvbnZlcnREZXB0aE1hc2soYm9vbCBkZXB0aFdyaXRlRW5hYmxlZCk7CitVSU5UOCBDb252ZXJ0
U3RlbmNpbE1hc2soR0x1aW50IHN0ZW5jaWxtYXNrKTsKK0QzRDExX1NURU5DSUxfT1AgQ29udmVy
dFN0ZW5jaWxPcChHTGVudW0gc3RlbmNpbE9wKTsKKworRDNEMTFfRklMVEVSIENvbnZlcnRGaWx0
ZXIoR0xlbnVtIG1pbkZpbHRlciwgR0xlbnVtIG1hZ0ZpbHRlciwgZmxvYXQgbWF4QW5pc290cm9w
eSk7CitEM0QxMV9URVhUVVJFX0FERFJFU1NfTU9ERSBDb252ZXJ0VGV4dHVyZVdyYXAoR0xlbnVt
IHdyYXApOworRkxPQVQgQ29udmVydE1pbkxPRChHTGVudW0gbWluRmlsdGVyLCB1bnNpZ25lZCBp
bnQgbG9kT2Zmc2V0KTsKK0ZMT0FUIENvbnZlcnRNYXhMT0QoR0xlbnVtIG1pbkZpbHRlciwgdW5z
aWduZWQgaW50IGxvZE9mZnNldCk7CisKK0RYR0lfRk9STUFUIENvbnZlcnRSZW5kZXJidWZmZXJG
b3JtYXQoR0xlbnVtIGZvcm1hdCk7CitEWEdJX0ZPUk1BVCBDb252ZXJ0VGV4dHVyZUZvcm1hdChH
TGVudW0gZm9ybWF0KTsKK30KKworbmFtZXNwYWNlIGQzZDExX2dsCit7CisKK0dMZW51bSBDb252
ZXJ0QmFja0J1ZmZlckZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpOworR0xlbnVtIENvbnZlcnRE
ZXB0aFN0ZW5jaWxGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKK0dMZW51bSBDb252ZXJ0UmVu
ZGVyYnVmZmVyRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCk7CitHTGVudW0gQ29udmVydFRleHR1
cmVJbnRlcm5hbEZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpOworCit9CisKK25hbWVzcGFjZSBk
M2QxMQoreworCitzdHJ1Y3QgUG9zaXRpb25UZXhDb29yZFZlcnRleAoreworICAgIGZsb2F0IHgs
IHk7CisgICAgZmxvYXQgdSwgdjsKK307Cit2b2lkIFNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgo
UG9zaXRpb25UZXhDb29yZFZlcnRleCogdmVydGV4LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB1
LCBmbG9hdCB2KTsKKworc3RydWN0IFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleAoreworICAgIGZs
b2F0IHgsIHksIHo7CisgICAgZmxvYXQgciwgZywgYiwgYTsKK307Cit2b2lkIFNldFBvc2l0aW9u
RGVwdGhDb2xvclZlcnRleChQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgqIHZlcnRleCwgZmxvYXQg
eCwgZmxvYXQgeSwgZmxvYXQgeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGdsOjpDb2xvciAmY29sb3IpOworCitzaXplX3QgQ29tcHV0ZVBpeGVsU2l6ZUJpdHMoRFhH
SV9GT1JNQVQgZm9ybWF0KTsKK3NpemVfdCBDb21wdXRlQmxvY2tTaXplQml0cyhEWEdJX0ZPUk1B
VCBmb3JtYXQpOworCitib29sIElzQ29tcHJlc3NlZChEWEdJX0ZPUk1BVCBmb3JtYXQpOwordW5z
aWduZWQgaW50IEdldFRleHR1cmVGb3JtYXREaW1lbnNpb25BbGlnbm1lbnQoRFhHSV9GT1JNQVQg
Zm9ybWF0KTsKKworYm9vbCBJc0RlcHRoU3RlbmNpbEZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQp
OworRFhHSV9GT1JNQVQgR2V0RGVwdGhUZXh0dXJlRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCk7
CitEWEdJX0ZPUk1BVCBHZXREZXB0aFNoYWRlclJlc291cmNlRm9ybWF0KERYR0lfRk9STUFUIGZv
cm1hdCk7CisKK0hSRVNVTFQgU2V0RGVidWdOYW1lKElEM0QxMURldmljZUNoaWxkICpyZXNvdXJj
ZSwgY29uc3QgY2hhciAqbmFtZSk7CisKK2lubGluZSBib29sIGlzRGV2aWNlTG9zdEVycm9yKEhS
RVNVTFQgZXJyb3JDb2RlKQoreworICAgIHN3aXRjaCAoZXJyb3JDb2RlKQorICAgIHsKKyAgICAg
IGNhc2UgRFhHSV9FUlJPUl9ERVZJQ0VfSFVORzoKKyAgICAgIGNhc2UgRFhHSV9FUlJPUl9ERVZJ
Q0VfUkVNT1ZFRDoKKyAgICAgIGNhc2UgRFhHSV9FUlJPUl9ERVZJQ0VfUkVTRVQ6CisgICAgICBj
YXNlIERYR0lfRVJST1JfRFJJVkVSX0lOVEVSTkFMX0VSUk9SOgorICAgICAgY2FzZSBEWEdJX0VS
Uk9SX05PVF9DVVJSRU5UTFlfQVZBSUxBQkxFOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK30KKworI2VuZGlm
IC8vIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjExX1VUSUxTX0gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVy
cy9DbGVhcjExLmhsc2wgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL3NoYWRlcnMvQ2xlYXIxMS5obHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA0MmFjNjk5YjY2
YTIyMzlhZGJmNTI1MWZhYWYzYjNlNGMzZmVjNWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvQ2xl
YXIxMS5obHNsCkBAIC0wLDAgKzEsMzggQEAKK3ZvaWQgVlNfQ2xlYXIoIGluIGZsb2F0MyAgaW5Q
b3NpdGlvbiA6ICAgIFBPU0lUSU9OLCAgaW4gZmxvYXQ0ICBpbkNvbG9yIDogQ09MT1IsCisgICAg
ICAgICAgICAgIG91dCBmbG9hdDQgb3V0UG9zaXRpb24gOiBTVl9QT1NJVElPTiwgb3V0IGZsb2F0
NCBvdXRDb2xvciA6IENPTE9SKQoreworICAgIG91dFBvc2l0aW9uID0gZmxvYXQ0KGluUG9zaXRp
b24sIDEuMGYpOworICAgIG91dENvbG9yID0gaW5Db2xvcjsKK30KKworLy8gQXNzdW1lIHdlIGFy
ZSBpbiBTTTQrLCB3aGljaCBoYXMgOCBjb2xvciBvdXRwdXRzCitzdHJ1Y3QgUFNfT3V0cHV0TXVs
dGlwbGUKK3sKKwlmbG9hdDQgY29sb3IwIDogU1ZfVEFSR0VUMDsKKwlmbG9hdDQgY29sb3IxIDog
U1ZfVEFSR0VUMTsKKwlmbG9hdDQgY29sb3IyIDogU1ZfVEFSR0VUMjsKKwlmbG9hdDQgY29sb3Iz
IDogU1ZfVEFSR0VUMzsKKwlmbG9hdDQgY29sb3I0IDogU1ZfVEFSR0VUNDsKKwlmbG9hdDQgY29s
b3I1IDogU1ZfVEFSR0VUNTsKKwlmbG9hdDQgY29sb3I2IDogU1ZfVEFSR0VUNjsKKwlmbG9hdDQg
Y29sb3I3IDogU1ZfVEFSR0VUNzsKK307CisKK1BTX091dHB1dE11bHRpcGxlIFBTX0NsZWFyTXVs
dGlwbGUoaW4gZmxvYXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQ0IGluQ29s
b3IgOiBDT0xPUikKK3sKKwlQU19PdXRwdXRNdWx0aXBsZSBvdXRDb2xvcjsKKwlvdXRDb2xvci5j
b2xvcjAgPSBpbkNvbG9yOworCW91dENvbG9yLmNvbG9yMSA9IGluQ29sb3I7CisJb3V0Q29sb3Iu
Y29sb3IyID0gaW5Db2xvcjsKKwlvdXRDb2xvci5jb2xvcjMgPSBpbkNvbG9yOworCW91dENvbG9y
LmNvbG9yNCA9IGluQ29sb3I7CisJb3V0Q29sb3IuY29sb3I1ID0gaW5Db2xvcjsKKwlvdXRDb2xv
ci5jb2xvcjYgPSBpbkNvbG9yOworCW91dENvbG9yLmNvbG9yNyA9IGluQ29sb3I7CisJcmV0dXJu
IG91dENvbG9yOworfQorCitmbG9hdDQgUFNfQ2xlYXJTaW5nbGUoaW4gZmxvYXQ0IGluUG9zaXRp
b24gOiBTVl9Qb3NpdGlvbiwgaW4gZmxvYXQ0IGluQ29sb3IgOiBDT0xPUikgOiBTVl9UYXJnZXQw
Cit7CisJcmV0dXJuIGluQ29sb3I7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvUGFzc3Rocm91Z2gxMS5o
bHNsIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9zaGFkZXJzL1Bhc3N0aHJvdWdoMTEuaGxzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40M2I3ODAxZWZjMWZlZjZl
MjM5MTgwMDY3ZGQwMjM2OTk4NTViOWEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL1Bhc3N0aHJv
dWdoMTEuaGxzbApAQCAtMCwwICsxLDI5IEBACitUZXh0dXJlMkQgVGV4dHVyZSA6IHJlZ2lzdGVy
KHQwKTsKK1NhbXBsZXJTdGF0ZSBTYW1wbGVyIDogcmVnaXN0ZXIoczApOworCit2b2lkIFZTX1Bh
c3N0aHJvdWdoKCBpbiBmbG9hdDIgIGluUG9zaXRpb24gOiAgICBQT1NJVElPTiwgIGluIGZsb2F0
MiAgaW5UZXhDb29yZCA6IFRFWENPT1JEMCwKKyAgICAgICAgICAgICAgICAgICAgb3V0IGZsb2F0
NCBvdXRQb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBvdXQgZmxvYXQyIG91dFRleENvb3JkIDogVEVY
Q09PUkQwKQoreworICAgIG91dFBvc2l0aW9uID0gZmxvYXQ0KGluUG9zaXRpb24sIDAuMGYsIDEu
MGYpOworICAgIG91dFRleENvb3JkID0gaW5UZXhDb29yZDsKK30KKworZmxvYXQ0IFBTX1Bhc3N0
aHJvdWdoUkdCQShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIg
aW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgcmV0dXJuIFRleHR1
cmUuU2FtcGxlKFNhbXBsZXIsIGluVGV4Q29vcmQpLnJnYmE7Cit9CisKK2Zsb2F0NCBQU19QYXNz
dGhyb3VnaFJHQihpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIg
aW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgcmV0dXJuIGZsb2F0
NChUZXh0dXJlLlNhbXBsZShTYW1wbGVyLCBpblRleENvb3JkKS5yZ2IsIDEuMGYpOworfQorCitm
bG9hdDQgUFNfUGFzc3Rocm91Z2hMdW0oaW4gZmxvYXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJVElP
TiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDApIDogU1ZfVEFSR0VUMAoreworICAg
IHJldHVybiBmbG9hdDQoVGV4dHVyZS5TYW1wbGUoU2FtcGxlciwgaW5UZXhDb29yZCkucnJyLCAx
LjBmKTsKK30KKworZmxvYXQ0IFBTX1Bhc3N0aHJvdWdoTHVtQWxwaGEoaW4gZmxvYXQ0IGluUG9z
aXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDApIDog
U1ZfVEFSR0VUMAoreworICAgIHJldHVybiBUZXh0dXJlLlNhbXBsZShTYW1wbGVyLCBpblRleENv
b3JkKS5ycnJhOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyMTF2cy5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJz
L2NvbXBpbGVkL2NsZWFyMTF2cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZiYzc0MzEyNmVkMDZjOGY2NzU4ZTEw
ZTVkMTc3MjAxNDk1Yzk2ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXIx
MXZzLmgKQEAgLTAsMCArMSwxMzEgQEAKKyNpZiAwDQorLy8NCisvLyBHZW5lcmF0ZWQgYnkgTWlj
cm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQNCisvLw0KKy8v
DQorLy8vDQorLy8NCisvLyBJbnB1dCBzaWduYXR1cmU6DQorLy8NCisvLyBOYW1lICAgICAgICAg
ICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAgIFVzZWQNCisv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0t
LS0tLSAtLS0tLS0NCisvLyBQT1NJVElPTiAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAg
IDAgICAgIE5PTkUgICBmbG9hdCAgIHh5eiANCisvLyBDT0xPUiAgICAgICAgICAgICAgICAgICAg
MCAgIHh5encgICAgICAgIDEgICAgIE5PTkUgICBmbG9hdCAgIHh5encNCisvLw0KKy8vDQorLy8g
T3V0cHV0IHNpZ25hdHVyZToNCisvLw0KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAg
TWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KKy8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0tLQ0KKy8v
IFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgIGZs
b2F0ICAgeHl6dw0KKy8vIENPTE9SICAgICAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAg
MSAgICAgTk9ORSAgIGZsb2F0ICAgeHl6dw0KKy8vDQordnNfNF8wDQorZGNsX2lucHV0IHYwLnh5
eg0KK2RjbF9pbnB1dCB2MS54eXp3DQorZGNsX291dHB1dF9zaXYgbzAueHl6dywgcG9zaXRpb24N
CitkY2xfb3V0cHV0IG8xLnh5encNCittb3YgbzAueHl6LCB2MC54eXp4DQorbW92IG8wLncsIGwo
MS4wMDAwMDApDQorbW92IG8xLnh5encsIHYxLnh5encNCityZXQgDQorLy8gQXBwcm94aW1hdGVs
eSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCisjZW5kaWYNCisNCitjb25zdCBCWVRFIGdfVlNf
Q2xlYXJbXSA9DQorew0KKyAgICAgNjgsICA4OCwgIDY2LCAgNjcsICA5NywgICA1LCANCisgICAg
IDEzLCAxNjMsIDE2MCwgMjU0LCAgOTUsIDEyNywgDQorICAgICAzMCwgMTk0LCAxMjEsIDE0NCwg
MjM2LCAxODUsIA0KKyAgICAgNTksICAyOSwgICAxLCAgIDAsICAgMCwgICAwLCANCisgICAgIDQ4
LCAgIDIsICAgMCwgICAwLCAgIDUsICAgMCwgDQorICAgICAgMCwgICAwLCAgNTIsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAxNDAsICAgMCwgICAwLCAgIDAsIDIyMCwgICAwLCANCisgICAgICAwLCAg
IDAsICA0OCwgICAxLCAgIDAsICAgMCwgDQorICAgIDE4MCwgICAxLCAgIDAsICAgMCwgIDgyLCAg
NjgsIA0KKyAgICAgNjksICA3MCwgIDgwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgMjgsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCANCisgICAgMjU0LCAyNTUsICAg
MCwgICAxLCAgIDAsICAgMCwgDQorICAgICAyOCwgICAwLCAgIDAsICAgMCwgIDc3LCAxMDUsIA0K
KyAgICAgOTksIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCANCisgICAgMTE2LCAgMzIsICA0MCwg
IDgyLCAgNDEsICAzMiwgDQorICAgICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsIA0KKyAg
ICAxMDQsICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCANCisgICAgIDY3LCAxMTEsIDEwOSwgMTEy
LCAxMDUsIDEwOCwgDQorICAgIDEwMSwgMTE0LCAgMzIsICA1NywgIDQ2LCAgNTEsIA0KKyAgICAg
NDgsICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4LCANCisgICAgIDQ2LCAgNDksICA1NCwgIDUxLCAg
NTYsICA1MiwgDQorICAgICAgMCwgMTcxLCAgNzMsICA4MywgIDcxLCAgNzgsIA0KKyAgICAgNzIs
ICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCANCisgICAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICA1NiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDcsICAgNywgICAwLCAgIDAsIA0KKyAgICAgNjUsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDE1
LCAgMTUsICAgMCwgICAwLCANCisgICAgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgDQor
ICAgICA3OSwgIDc4LCAgIDAsICA2NywgIDc5LCAgNzYsIA0KKyAgICAgNzksICA4MiwgICAwLCAx
NzEsICA3OSwgIDgzLCANCisgICAgIDcxLCAgNzgsICA3NiwgICAwLCAgIDAsICAgMCwgDQorICAg
ICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDU2LCAgIDAs
ICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQorICAgICAg
MCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAx
NSwgICAwLCANCisgICAgICAwLCAgIDAsICA2OCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwg
ICAwLCANCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgMTUsICAgMCwgDQorICAgICAgMCwgICAw
LCAgODMsICA4NiwgIDk1LCAgODAsIA0KKyAgICAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5
LCANCisgICAgIDc4LCAgIDAsICA2NywgIDc5LCAgNzYsICA3OSwgDQorICAgICA4MiwgICAwLCAx
NzEsIDE3MSwgIDgzLCAgNzIsIA0KKyAgICAgNjgsICA4MiwgMTI0LCAgIDAsICAgMCwgICAwLCAN
CisgICAgIDY0LCAgIDAsICAgMSwgICAwLCAgMzEsICAgMCwgDQorICAgICAgMCwgICAwLCAgOTUs
ICAgMCwgICAwLCAgIDMsIA0KKyAgICAxMTQsICAxNiwgIDE2LCAgIDAsICAgMCwgICAwLCANCisg
ICAgICAwLCAgIDAsICA5NSwgICAwLCAgIDAsICAgMywgDQorICAgIDI0MiwgIDE2LCAgMTYsICAg
MCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgMTAzLCAgIDAsICAgMCwgICA0LCANCisgICAg
MjQyLCAgMzIsICAxNiwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDEsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAxMDEsICAgMCwgICAwLCAgIDMsIDI0MiwgIDMyLCANCisgICAgIDE2
LCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgICA1NCwgICAwLCAgIDAsICAgNSwgMTE0
LCAgMzIsIA0KKyAgICAgMTYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgIDcwLCAg
MTgsICAxNiwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgNTQsICAgMCwgICAwLCAg
IDUsIA0KKyAgICAxMzAsICAzMiwgIDE2LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAs
ICAgMSwgIDY0LCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAxMjgsICA2MywgIDU0LCAgIDAs
IA0KKyAgICAgIDAsICAgNSwgMjQyLCAgMzIsICAxNiwgICAwLCANCisgICAgICAxLCAgIDAsICAg
MCwgICAwLCAgNzAsICAzMCwgDQorICAgICAxNiwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAgNjIsICAgMCwgICAwLCAgIDEsICA4MywgIDg0LCANCisgICAgIDY1LCAgODQsIDExNiwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICA0LCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsIA0KKyAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQor
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMA0KK307DQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFybXVsdGlwbGUxMXBzLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGls
ZWQvY2xlYXJtdWx0aXBsZTExcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNGI0NDVhYzNmNmE3MWU0YzVlMjFh
ZGM0YmFlOWFmZGI5MjgzOWU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFy
bXVsdGlwbGUxMXBzLmgKQEAgLTAsMCArMSwxOTYgQEAKKyNpZiAwDQorLy8NCisvLyBHZW5lcmF0
ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQN
CisvLw0KKy8vDQorLy8vDQorLy8NCisvLyBJbnB1dCBzaWduYXR1cmU6DQorLy8NCisvLyBOYW1l
ICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAg
IFVzZWQNCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0t
LS0tLS0gLS0tLS0tLSAtLS0tLS0NCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5
encgICAgICAgIDAgICAgICBQT1MgICBmbG9hdCAgICAgICANCisvLyBDT0xPUiAgICAgICAgICAg
ICAgICAgICAgMCAgIHh5encgICAgICAgIDEgICAgIE5PTkUgICBmbG9hdCAgIHh5encNCisvLw0K
Ky8vDQorLy8gT3V0cHV0IHNpZ25hdHVyZToNCisvLw0KKy8vIE5hbWUgICAgICAgICAgICAgICAg
IEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KKy8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0t
LS0tLQ0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRB
UkdFVCAgIGZsb2F0ICAgeHl6dw0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAxICAgeHl6
dyAgICAgICAgMSAgIFRBUkdFVCAgIGZsb2F0ICAgeHl6dw0KKy8vIFNWX1RBUkdFVCAgICAgICAg
ICAgICAgICAyICAgeHl6dyAgICAgICAgMiAgIFRBUkdFVCAgIGZsb2F0ICAgeHl6dw0KKy8vIFNW
X1RBUkdFVCAgICAgICAgICAgICAgICAzICAgeHl6dyAgICAgICAgMyAgIFRBUkdFVCAgIGZsb2F0
ICAgeHl6dw0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICA0ICAgeHl6dyAgICAgICAgNCAg
IFRBUkdFVCAgIGZsb2F0ICAgeHl6dw0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICA1ICAg
eHl6dyAgICAgICAgNSAgIFRBUkdFVCAgIGZsb2F0ICAgeHl6dw0KKy8vIFNWX1RBUkdFVCAgICAg
ICAgICAgICAgICA2ICAgeHl6dyAgICAgICAgNiAgIFRBUkdFVCAgIGZsb2F0ICAgeHl6dw0KKy8v
IFNWX1RBUkdFVCAgICAgICAgICAgICAgICA3ICAgeHl6dyAgICAgICAgNyAgIFRBUkdFVCAgIGZs
b2F0ICAgeHl6dw0KKy8vDQorcHNfNF8wDQorZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eXp3DQor
ZGNsX291dHB1dCBvMC54eXp3DQorZGNsX291dHB1dCBvMS54eXp3DQorZGNsX291dHB1dCBvMi54
eXp3DQorZGNsX291dHB1dCBvMy54eXp3DQorZGNsX291dHB1dCBvNC54eXp3DQorZGNsX291dHB1
dCBvNS54eXp3DQorZGNsX291dHB1dCBvNi54eXp3DQorZGNsX291dHB1dCBvNy54eXp3DQorbW92
IG8wLnh5encsIHYxLnh5encNCittb3YgbzEueHl6dywgdjEueHl6dw0KK21vdiBvMi54eXp3LCB2
MS54eXp3DQorbW92IG8zLnh5encsIHYxLnh5encNCittb3YgbzQueHl6dywgdjEueHl6dw0KK21v
diBvNS54eXp3LCB2MS54eXp3DQorbW92IG82Lnh5encsIHYxLnh5encNCittb3YgbzcueHl6dywg
djEueHl6dw0KK3JldCANCisvLyBBcHByb3hpbWF0ZWx5IDkgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNl
ZA0KKyNlbmRpZg0KKw0KK2NvbnN0IEJZVEUgZ19QU19DbGVhck11bHRpcGxlW10gPQ0KK3sNCisg
ICAgIDY4LCAgODgsICA2NiwgIDY3LCAgOTIsICA1NCwgDQorICAgIDEyMCwgMTA1LCAxNjYsIDE5
NiwgMTMyLCAxNTgsIA0KKyAgICAyMDksICAzMywgMTg1LCAxMjIsICAgOCwgMTg5LCANCisgICAg
MTQ1LCAxMTQsICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgICA4OCwgICAzLCAgIDAsICAgMCwg
ICA1LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDUyLCAgIDAsICAgMCwgICAwLCANCisgICAgMTQw
LCAgIDAsICAgMCwgICAwLCAyMjQsICAgMCwgDQorICAgICAgMCwgICAwLCAxODgsICAgMSwgICAw
LCAgIDAsIA0KKyAgICAyMjAsICAgMiwgICAwLCAgIDAsICA4MiwgIDY4LCANCisgICAgIDY5LCAg
NzAsICA4MCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgIDI4LCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgNCwgDQorICAgIDI1NSwgMjU1LCAgIDAsICAgMSwgICAwLCAgIDAs
IA0KKyAgICAgMjgsICAgMCwgICAwLCAgIDAsICA3NywgMTA1LCANCisgICAgIDk5LCAxMTQsIDEx
MSwgMTE1LCAxMTEsIDEwMiwgDQorICAgIDExNiwgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsIA0K
KyAgICAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCANCisgICAgMTA0LCAgOTcsIDEwMCwg
MTAxLCAxMTQsICAzMiwgDQorICAgICA2NywgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIA0KKyAg
ICAxMDEsIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCANCisgICAgIDQ4LCAgNDYsICA1NywgIDUw
LCAgNDgsICA0OCwgDQorICAgICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsIA0KKyAgICAg
IDAsIDE3MSwgIDczLCAgODMsICA3MSwgIDc4LCANCisgICAgIDc2LCAgIDAsICAgMCwgICAwLCAg
IDIsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgNTYs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgIDE1LCAgIDAsICAgMCwgICAwLCANCisgICAgIDY4LCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDMsICAgMCwg
ICAwLCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAxNSwgIDE1LCAgIDAsICAgMCwg
DQorICAgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsIA0KKyAgICAgNzMsICA4NCwgIDcz
LCAgNzksICA3OCwgICAwLCANCisgICAgIDY3LCAgNzksICA3NiwgIDc5LCAgODIsICAgMCwgDQor
ICAgIDE3MSwgMTcxLCAgNzksICA4MywgIDcxLCAgNzgsIA0KKyAgICAyMTIsICAgMCwgICAwLCAg
IDAsICAgOCwgICAwLCANCisgICAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgDQorICAg
IDIwMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAg
MCwgICAwLCAgMTUsICAgMCwgICAwLCAgIDAsIA0KKyAgICAyMDAsICAgMCwgICAwLCAgIDAsICAg
MSwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMywg
ICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDE1LCAgIDAsICAgMCwg
ICAwLCANCisgICAgMjAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgDQorICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAw
LCANCisgICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQorICAgIDIwMCwgICAwLCAg
IDAsICAgMCwgICAzLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAN
CisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgDQorICAgICAgMCwgICAwLCAgMTUs
ICAgMCwgICAwLCAgIDAsIA0KKyAgICAyMDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCANCisg
ICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMywgICAwLCAgIDAsICAg
MCwgICA0LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDE1LCAgIDAsICAgMCwgICAwLCANCisgICAg
MjAwLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgIDMsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCANCisgICAgICAw
LCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQorICAgIDIwMCwgICAwLCAgIDAsICAgMCwgICA2
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAzLCAg
IDAsICAgMCwgICAwLCAgIDYsICAgMCwgDQorICAgICAgMCwgICAwLCAgMTUsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAyMDAsICAgMCwgICAwLCAgIDAsICAgNywgICAwLCANCisgICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMywgICAwLCAgIDAsICAgMCwgICA3LCAgIDAs
IA0KKyAgICAgIDAsICAgMCwgIDE1LCAgIDAsICAgMCwgICAwLCANCisgICAgIDgzLCAgODYsICA5
NSwgIDg0LCAgNjUsICA4MiwgDQorICAgICA3MSwgIDY5LCAgODQsICAgMCwgMTcxLCAxNzEsIA0K
KyAgICAgODMsICA3MiwgIDY4LCAgODIsICAyNCwgICAxLCANCisgICAgICAwLCAgIDAsICA2NCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICA3MCwgICAwLCAgIDAsICAgMCwgIDk4LCAgMTYsIA0KKyAg
ICAgIDAsICAgMywgMjQyLCAgMTYsICAxNiwgICAwLCANCisgICAgICAxLCAgIDAsICAgMCwgICAw
LCAxMDEsICAgMCwgDQorICAgICAgMCwgICAzLCAyNDIsICAzMiwgIDE2LCAgIDAsIA0KKyAgICAg
IDAsICAgMCwgICAwLCAgIDAsIDEwMSwgICAwLCANCisgICAgICAwLCAgIDMsIDI0MiwgIDMyLCAg
MTYsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgMTAxLCAgIDAsIA0KKyAgICAgIDAs
ICAgMywgMjQyLCAgMzIsICAxNiwgICAwLCANCisgICAgICAyLCAgIDAsICAgMCwgICAwLCAxMDEs
ICAgMCwgDQorICAgICAgMCwgICAzLCAyNDIsICAzMiwgIDE2LCAgIDAsIA0KKyAgICAgIDMsICAg
MCwgICAwLCAgIDAsIDEwMSwgICAwLCANCisgICAgICAwLCAgIDMsIDI0MiwgIDMyLCAgMTYsICAg
MCwgDQorICAgICAgNCwgICAwLCAgIDAsICAgMCwgMTAxLCAgIDAsIA0KKyAgICAgIDAsICAgMywg
MjQyLCAgMzIsICAxNiwgICAwLCANCisgICAgICA1LCAgIDAsICAgMCwgICAwLCAxMDEsICAgMCwg
DQorICAgICAgMCwgICAzLCAyNDIsICAzMiwgIDE2LCAgIDAsIA0KKyAgICAgIDYsICAgMCwgICAw
LCAgIDAsIDEwMSwgICAwLCANCisgICAgICAwLCAgIDMsIDI0MiwgIDMyLCAgMTYsICAgMCwgDQor
ICAgICAgNywgICAwLCAgIDAsICAgMCwgIDU0LCAgIDAsIA0KKyAgICAgIDAsICAgNSwgMjQyLCAg
MzIsICAxNiwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgNzAsICAzMCwgDQorICAg
ICAxNiwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgNTQsICAgMCwgICAwLCAgIDUs
IDI0MiwgIDMyLCANCisgICAgIDE2LCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgICA3
MCwgIDMwLCAgMTYsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDU0LCAgIDAsICAg
MCwgICA1LCANCisgICAgMjQyLCAgMzIsICAxNiwgICAwLCAgIDIsICAgMCwgDQorICAgICAgMCwg
ICAwLCAgNzAsICAzMCwgIDE2LCAgIDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICA1NCwg
ICAwLCANCisgICAgICAwLCAgIDUsIDI0MiwgIDMyLCAgMTYsICAgMCwgDQorICAgICAgMywgICAw
LCAgIDAsICAgMCwgIDcwLCAgMzAsIA0KKyAgICAgMTYsICAgMCwgICAxLCAgIDAsICAgMCwgICAw
LCANCisgICAgIDU0LCAgIDAsICAgMCwgICA1LCAyNDIsICAzMiwgDQorICAgICAxNiwgICAwLCAg
IDQsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgNzAsICAzMCwgIDE2LCAgIDAsICAgMSwgICAwLCAN
CisgICAgICAwLCAgIDAsICA1NCwgICAwLCAgIDAsICAgNSwgDQorICAgIDI0MiwgIDMyLCAgMTYs
ICAgMCwgICA1LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDcwLCAgMzAsICAxNiwgICAwLCANCisg
ICAgICAxLCAgIDAsICAgMCwgICAwLCAgNTQsICAgMCwgDQorICAgICAgMCwgICA1LCAyNDIsICAz
MiwgIDE2LCAgIDAsIA0KKyAgICAgIDYsICAgMCwgICAwLCAgIDAsICA3MCwgIDMwLCANCisgICAg
IDE2LCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgICA1NCwgICAwLCAgIDAsICAgNSwg
MjQyLCAgMzIsIA0KKyAgICAgMTYsICAgMCwgICA3LCAgIDAsICAgMCwgICAwLCANCisgICAgIDcw
LCAgMzAsICAxNiwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAwLCAgNjIsICAgMCwgICAw
LCAgIDEsIA0KKyAgICAgODMsICA4NCwgIDY1LCAgODQsIDExNiwgICAwLCANCisgICAgICAwLCAg
IDAsICAgOSwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICA5LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQorICAgICAgOSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMA0KK307DQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2Nv
bXBpbGVkL2NsZWFyc2luZ2xlMTFwcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyc2luZ2xlMTFwcy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjg3Y2IwODdjNzUwNTI2MmM4MDdiM2Y0YTUxNzFhMWQ4MGU2MjFmNWUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJzaW5nbGUxMXBzLmgKQEAgLTAsMCAr
MSwxMTAgQEAKKyNpZiAwDQorLy8NCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNM
IFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQNCisvLw0KKy8vDQorLy8vDQorLy8NCisv
LyBJbnB1dCBzaWduYXR1cmU6DQorLy8NCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAg
IE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAgIFVzZWQNCisvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0NCisv
LyBTVl9Qb3NpdGlvbiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgICBm
bG9hdCAgICAgICANCisvLyBDT0xPUiAgICAgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAg
IDEgICAgIE5PTkUgICBmbG9hdCAgIHh5encNCisvLw0KKy8vDQorLy8gT3V0cHV0IHNpZ25hdHVy
ZToNCisvLw0KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBT
eXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0t
LS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0tLQ0KKy8vIFNWX1RhcmdldCAgICAg
ICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIGZsb2F0ICAgeHl6dw0KKy8v
DQorcHNfNF8wDQorZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eXp3DQorZGNsX291dHB1dCBvMC54
eXp3DQorbW92IG8wLnh5encsIHYxLnh5encNCityZXQgDQorLy8gQXBwcm94aW1hdGVseSAyIGlu
c3RydWN0aW9uIHNsb3RzIHVzZWQNCisjZW5kaWYNCisNCitjb25zdCBCWVRFIGdfUFNfQ2xlYXJT
aW5nbGVbXSA9DQorew0KKyAgICAgNjgsICA4OCwgIDY2LCAgNjcsICAxMywgMTUyLCANCisgICAg
IDMyLCAgNDksIDIyMiwgMjM2LCAgOTIsICAyMCwgDQorICAgIDE4OCwgIDcxLCAgODgsICA0Niwg
MTYzLCAyNDEsIA0KKyAgICAxODgsIDIzOCwgICAxLCAgIDAsICAgMCwgICAwLCANCisgICAgMjA4
LCAgIDEsICAgMCwgICAwLCAgIDUsICAgMCwgDQorICAgICAgMCwgICAwLCAgNTIsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAxNDAsICAgMCwgICAwLCAgIDAsIDIyNCwgICAwLCANCisgICAgICAwLCAg
IDAsICAyMCwgICAxLCAgIDAsICAgMCwgDQorICAgICA4NCwgICAxLCAgIDAsICAgMCwgIDgyLCAg
NjgsIA0KKyAgICAgNjksICA3MCwgIDgwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgMjgsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCANCisgICAgMjU1LCAyNTUsICAg
MCwgICAxLCAgIDAsICAgMCwgDQorICAgICAyOCwgICAwLCAgIDAsICAgMCwgIDc3LCAxMDUsIA0K
KyAgICAgOTksIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCANCisgICAgMTE2LCAgMzIsICA0MCwg
IDgyLCAgNDEsICAzMiwgDQorICAgICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsIA0KKyAg
ICAxMDQsICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCANCisgICAgIDY3LCAxMTEsIDEwOSwgMTEy
LCAxMDUsIDEwOCwgDQorICAgIDEwMSwgMTE0LCAgMzIsICA1NywgIDQ2LCAgNTEsIA0KKyAgICAg
NDgsICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4LCANCisgICAgIDQ2LCAgNDksICA1NCwgIDUxLCAg
NTYsICA1MiwgDQorICAgICAgMCwgMTcxLCAgNzMsICA4MywgIDcxLCAgNzgsIA0KKyAgICAgNzYs
ICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCANCisgICAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICA1NiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAxLCAgIDAsICAgMCwgICAwLCANCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwLCAgMTUsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgNjgsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDE1
LCAgMTUsICAgMCwgICAwLCANCisgICAgIDgzLCAgODYsICA5NSwgIDgwLCAxMTEsIDExNSwgDQor
ICAgIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCAgIDAsIA0KKyAgICAgNjcsICA3OSwgIDc2LCAg
NzksICA4MiwgICAwLCANCisgICAgMTcxLCAxNzEsICA3OSwgIDgzLCAgNzEsICA3OCwgDQorICAg
ICA0NCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICA4LCAgIDAs
ICAgMCwgICAwLCANCisgICAgIDMyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDMsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCisgICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQorICAgICA4Mywg
IDg2LCAgOTUsICA4NCwgIDk3LCAxMTQsIA0KKyAgICAxMDMsIDEwMSwgMTE2LCAgIDAsIDE3MSwg
MTcxLCANCisgICAgIDgzLCAgNzIsICA2OCwgIDgyLCAgNTYsICAgMCwgDQorICAgICAgMCwgICAw
LCAgNjQsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgMTQsICAgMCwgICAwLCAgIDAsICA5OCwgIDE2
LCANCisgICAgICAwLCAgIDMsIDI0MiwgIDE2LCAgMTYsICAgMCwgDQorICAgICAgMSwgICAwLCAg
IDAsICAgMCwgMTAxLCAgIDAsIA0KKyAgICAgIDAsICAgMywgMjQyLCAgMzIsICAxNiwgICAwLCAN
CisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgNTQsICAgMCwgDQorICAgICAgMCwgICA1LCAyNDIs
ICAzMiwgIDE2LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICA3MCwgIDMwLCANCisg
ICAgIDE2LCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgICA2MiwgICAwLCAgIDAsICAg
MSwgIDgzLCAgODQsIA0KKyAgICAgNjUsICA4NCwgMTE2LCAgIDAsICAgMCwgICAwLCANCisgICAg
ICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAx
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDIsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwDQorfTsNCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGls
ZWQvcGFzc3Rocm91Z2gxMXZzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2gxMXZzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYmYzOTUyMTZlOTkyMGZjY2EwMzJiMWVhYzg1M2U4NWFiOGIxYjY2MAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaDExdnMuaApAQCAtMCwwICsxLDEz
NCBAQAorI2lmIDANCisvLw0KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hh
ZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NA0KKy8vDQorLy8NCisvLy8NCisvLw0KKy8vIElu
cHV0IHNpZ25hdHVyZToNCisvLw0KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFz
ayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KKy8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0tLQ0KKy8vIFBP
U0lUSU9OICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMCAgICAgTk9ORSAgIGZsb2F0
ICAgeHkgIA0KKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAg
ICAgTk9ORSAgIGZsb2F0ICAgeHkgIA0KKy8vDQorLy8NCisvLyBPdXRwdXQgc2lnbmF0dXJlOg0K
Ky8vDQorLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1Zh
bHVlICBGb3JtYXQgICBVc2VkDQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0t
IC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tDQorLy8gU1ZfUE9TSVRJT04gICAgICAg
ICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICAgZmxvYXQgICB4eXp3DQorLy8gVEVY
Q09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICAgZmxvYXQg
ICB4eSAgDQorLy8NCit2c180XzANCitkY2xfaW5wdXQgdjAueHkNCitkY2xfaW5wdXQgdjEueHkN
CitkY2xfb3V0cHV0X3NpdiBvMC54eXp3LCBwb3NpdGlvbg0KK2RjbF9vdXRwdXQgbzEueHkNCitt
b3YgbzAueHksIHYwLnh5eHgNCittb3YgbzAuencsIGwoMCwwLDAsMS4wMDAwMDApDQorbW92IG8x
Lnh5LCB2MS54eXh4DQorcmV0IA0KKy8vIEFwcHJveGltYXRlbHkgNCBpbnN0cnVjdGlvbiBzbG90
cyB1c2VkDQorI2VuZGlmDQorDQorY29uc3QgQllURSBnX1ZTX1Bhc3N0aHJvdWdoW10gPQ0KK3sN
CisgICAgIDY4LCAgODgsICA2NiwgIDY3LCAxOTcsIDIxNCwgDQorICAgIDE4NCwgIDg1LCAyNDAs
ICA5NCwgIDcxLCAgNDgsIA0KKyAgICAxNjUsICAzNCwgMTQyLCAyMzMsICAgMCwgMTM1LCANCisg
ICAgMTkzLCAxNzgsICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgICA2OCwgICAyLCAgIDAsICAg
MCwgICA1LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDUyLCAgIDAsICAgMCwgICAwLCANCisgICAg
MTQwLCAgIDAsICAgMCwgICAwLCAyMjQsICAgMCwgDQorICAgICAgMCwgICAwLCAgNTYsICAgMSwg
ICAwLCAgIDAsIA0KKyAgICAyMDAsICAgMSwgICAwLCAgIDAsICA4MiwgIDY4LCANCisgICAgIDY5
LCAgNzAsICA4MCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgIDI4LCAg
IDAsICAgMCwgICAwLCAgIDAsICAgNCwgDQorICAgIDI1NCwgMjU1LCAgIDAsICAgMSwgICAwLCAg
IDAsIA0KKyAgICAgMjgsICAgMCwgICAwLCAgIDAsICA3NywgMTA1LCANCisgICAgIDk5LCAxMTQs
IDExMSwgMTE1LCAxMTEsIDEwMiwgDQorICAgIDExNiwgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIs
IA0KKyAgICAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCANCisgICAgMTA0LCAgOTcsIDEw
MCwgMTAxLCAxMTQsICAzMiwgDQorICAgICA2NywgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIA0K
KyAgICAxMDEsIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCANCisgICAgIDQ4LCAgNDYsICA1Nywg
IDUwLCAgNDgsICA0OCwgDQorICAgICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsIA0KKyAg
ICAgIDAsIDE3MSwgIDczLCAgODMsICA3MSwgIDc4LCANCisgICAgIDc2LCAgIDAsICAgMCwgICAw
LCAgIDIsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
NTYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgICAzLCAgIDMsICAgMCwgICAwLCANCisgICAgIDY1LCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDMsICAg
MCwgICAwLCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAgMywgICAzLCAgIDAsICAg
MCwgDQorICAgICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsIA0KKyAgICAgNzksICA3OCwg
ICAwLCAgODQsICA2OSwgIDg4LCANCisgICAgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAgMCwg
DQorICAgIDE3MSwgMTcxLCAgNzksICA4MywgIDcxLCAgNzgsIA0KKyAgICAgODAsICAgMCwgICAw
LCAgIDAsICAgMiwgICAwLCANCisgICAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgDQor
ICAgICA1NiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAxLCAg
IDAsICAgMCwgICAwLCANCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAg
ICAgMCwgICAwLCAgMTUsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgNjgsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAg
MywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAzLCAgMTIsICAg
MCwgICAwLCANCisgICAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgDQorICAgICA3Mywg
IDg0LCAgNzMsICA3OSwgIDc4LCAgIDAsIA0KKyAgICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwg
IDc5LCANCisgICAgIDgyLCAgNjgsICAgMCwgMTcxLCAxNzEsIDE3MSwgDQorICAgICA4MywgIDcy
LCAgNjgsICA4MiwgMTM2LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDY0LCAgIDAsICAgMSwgICAw
LCANCisgICAgIDM0LCAgIDAsICAgMCwgICAwLCAgOTUsICAgMCwgDQorICAgICAgMCwgICAzLCAg
NTAsICAxNiwgIDE2LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICA5NSwgICAwLCAN
CisgICAgICAwLCAgIDMsICA1MCwgIDE2LCAgMTYsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAs
ICAgMCwgMTAzLCAgIDAsIA0KKyAgICAgIDAsICAgNCwgMjQyLCAgMzIsICAxNiwgICAwLCANCisg
ICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAwLCAxMDEsICAg
MCwgICAwLCAgIDMsIA0KKyAgICAgNTAsICAzMiwgIDE2LCAgIDAsICAgMSwgICAwLCANCisgICAg
ICAwLCAgIDAsICA1NCwgICAwLCAgIDAsICAgNSwgDQorICAgICA1MCwgIDMyLCAgMTYsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDcwLCAgMTYsICAxNiwgICAwLCANCisgICAgICAw
LCAgIDAsICAgMCwgICAwLCAgNTQsICAgMCwgDQorICAgICAgMCwgICA4LCAxOTQsICAzMiwgIDE2
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgIDY0LCANCisgICAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsIDEyOCwgIDYzLCANCisgICAgIDU0LCAgIDAs
ICAgMCwgICA1LCAgNTAsICAzMiwgDQorICAgICAxNiwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgNzAsICAxNiwgIDE2LCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICA2
MiwgICAwLCAgIDAsICAgMSwgDQorICAgICA4MywgIDg0LCAgNjUsICA4NCwgMTE2LCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwDQorfTsNCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hsdW0xMXBzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFz
c3Rocm91Z2hsdW0xMXBzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2YwN2I0YTNjYmQ4OTY1ZDE4Y2I0OGQwMThl
NDEyZDg0MjQyMDg5NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3Vn
aGx1bTExcHMuaApAQCAtMCwwICsxLDE1MiBAQAorI2lmIDANCisvLw0KKy8vIEdlbmVyYXRlZCBi
eSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NA0KKy8v
DQorLy8NCisvLy8NCisvLyBSZXNvdXJjZSBCaW5kaW5nczoNCisvLw0KKy8vIE5hbWUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBF
bGVtZW50cw0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0t
LS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KKy8vIFNhbXBsZXIgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0K
Ky8vIFRleHR1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAg
ICAgICAgMmQgICAgMCAgICAgICAgMQ0KKy8vDQorLy8NCisvLw0KKy8vIElucHV0IHNpZ25hdHVy
ZToNCisvLw0KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBT
eXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0t
LS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0tLQ0KKy8vIFNWX1BPU0lUSU9OICAg
ICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgIGZsb2F0ICAgICAgIA0KKy8v
IFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgIGZs
b2F0ICAgeHkgIA0KKy8vDQorLy8NCisvLyBPdXRwdXQgc2lnbmF0dXJlOg0KKy8vDQorLy8gTmFt
ZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlICBGb3JtYXQg
ICBVc2VkDQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0t
LS0tLS0tIC0tLS0tLS0gLS0tLS0tDQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4
eXp3ICAgICAgICAwICAgVEFSR0VUICAgZmxvYXQgICB4eXp3DQorLy8NCitwc180XzANCitkY2xf
c2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQorZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQs
ZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQorZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQ0KK2RjbF9v
dXRwdXQgbzAueHl6dw0KK2RjbF90ZW1wcyAxDQorc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQw
Lnh5encsIHMwDQorbW92IG8wLnh5eiwgcjAueHh4eA0KK21vdiBvMC53LCBsKDEuMDAwMDAwKQ0K
K3JldCANCisvLyBBcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KKyNlbmRp
Zg0KKw0KK2NvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaEx1bVtdID0NCit7DQorICAgICA2OCwg
IDg4LCAgNjYsICA2NywgMjQ0LCAgIDksIA0KKyAgICAyMTMsIDE0NywgIDE5LCAyNDksICA3MCwg
MTExLCANCisgICAgMTU3LCAgOTIsIDI0MywgMTYwLCAgNDAsIDE0NCwgDQorICAgIDIzOCwgMjIx
LCAgIDEsICAgMCwgICAwLCAgIDAsIA0KKyAgICAxMjgsICAgMiwgICAwLCAgIDAsICAgNSwgICAw
LCANCisgICAgICAwLCAgIDAsICA1MiwgICAwLCAgIDAsICAgMCwgDQorICAgIDIyMCwgICAwLCAg
IDAsICAgMCwgIDUyLCAgIDEsIA0KKyAgICAgIDAsICAgMCwgMTA0LCAgIDEsICAgMCwgICAwLCAN
CisgICAgICA0LCAgIDIsICAgMCwgICAwLCAgODIsICA2OCwgDQorICAgICA2OSwgIDcwLCAxNjAs
ICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisg
ICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgDQorICAgICAyOCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDQsIA0KKyAgICAyNTUsIDI1NSwgICAwLCAgIDEsICAgMCwgICAwLCANCisgICAg
MTA4LCAgIDAsICAgMCwgICAwLCAgOTIsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDMsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAx
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCisgICAgMTAwLCAg
IDAsICAgMCwgICAwLCAgIDIsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDQsICAgMCwgICAwLCAgIDAsIDI1NSwgMjU1LCANCisgICAgMjU1LCAyNTUs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDEzLCAgIDAs
IA0KKyAgICAgIDAsICAgMCwgIDgzLCAgOTcsIDEwOSwgMTEyLCANCisgICAgMTA4LCAxMDEsIDEx
NCwgICAwLCAgODQsIDEwMSwgDQorICAgIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCAgIDAsIA0K
KyAgICAgNzcsIDEwNSwgIDk5LCAxMTQsIDExMSwgMTE1LCANCisgICAgMTExLCAxMDIsIDExNiwg
IDMyLCAgNDAsICA4MiwgDQorICAgICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsIA0KKyAg
ICAgMzIsICA4MywgMTA0LCAgOTcsIDEwMCwgMTAxLCANCisgICAgMTE0LCAgMzIsICA2NywgMTEx
LCAxMDksIDExMiwgDQorICAgIDEwNSwgMTA4LCAxMDEsIDExNCwgIDMyLCAgNTcsIA0KKyAgICAg
NDYsICA1MSwgIDQ4LCAgNDYsICA1NywgIDUwLCANCisgICAgIDQ4LCAgNDgsICA0NiwgIDQ5LCAg
NTQsICA1MSwgDQorICAgICA1NiwgIDUyLCAgIDAsIDE3MSwgIDczLCAgODMsIA0KKyAgICAgNzEs
ICA3OCwgIDgwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAyLCAgIDAsICAgMCwgICAwLCAgIDgs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgNTYsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDE1LCAgIDAsIA0KKyAgICAgIDAsICAgMCwg
IDY4LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDEsICAgMCwgICAw
LCAgIDAsICAgMywgICAzLCANCisgICAgICAwLCAgIDAsICA4MywgIDg2LCAgOTUsICA4MCwgDQor
ICAgICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksIA0KKyAgICAgNzgsICAgMCwgIDg0LCAg
NjksICA4OCwgIDY3LCANCisgICAgIDc5LCAgNzksICA4MiwgIDY4LCAgIDAsIDE3MSwgDQorICAg
IDE3MSwgMTcxLCAgNzksICA4MywgIDcxLCAgNzgsIA0KKyAgICAgNDQsICAgMCwgICAwLCAgIDAs
ICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgDQorICAgICAz
MiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwg
ICAwLCAgMTUsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwg
IDgyLCANCisgICAgIDcxLCAgNjksICA4NCwgICAwLCAxNzEsIDE3MSwgDQorICAgICA4MywgIDcy
LCAgNjgsICA4MiwgMTQ4LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDY0LCAgIDAsICAgMCwgICAw
LCANCisgICAgIDM3LCAgIDAsICAgMCwgICAwLCAgOTAsICAgMCwgDQorICAgICAgMCwgICAzLCAg
IDAsICA5NiwgIDE2LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICA4OCwgIDI0LCAN
CisgICAgICAwLCAgIDQsICAgMCwgMTEyLCAgMTYsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAs
ICAgMCwgIDg1LCAgODUsIA0KKyAgICAgIDAsICAgMCwgIDk4LCAgMTYsICAgMCwgICAzLCANCisg
ICAgIDUwLCAgMTYsICAxNiwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAwLCAxMDEsICAg
MCwgICAwLCAgIDMsIA0KKyAgICAyNDIsICAzMiwgIDE2LCAgIDAsICAgMCwgICAwLCANCisgICAg
ICAwLCAgIDAsIDEwNCwgICAwLCAgIDAsICAgMiwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwg
IDY5LCAgIDAsIA0KKyAgICAgIDAsICAgOSwgMjQyLCAgIDAsICAxNiwgICAwLCANCisgICAgICAw
LCAgIDAsICAgMCwgICAwLCAgNzAsICAxNiwgDQorICAgICAxNiwgICAwLCAgIDEsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAgNzAsIDEyNiwgIDE2LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAg
IDAsICAgMCwgIDk2LCAgMTYsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDU0LCAg
IDAsIA0KKyAgICAgIDAsICAgNSwgMTE0LCAgMzIsICAxNiwgICAwLCANCisgICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDYsICAgMCwgDQorICAgICAxNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgNTQsICAgMCwgICAwLCAgIDUsIDEzMCwgIDMyLCANCisgICAgIDE2LCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMSwgIDY0LCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAxMjgsICA2MywgIDYyLCAgIDAsICAgMCwgICAxLCANCisgICAgIDgzLCAgODQsICA2NSwg
IDg0LCAxMTYsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMiwgICAw
LCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDMsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQor
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAg
IDANCit9Ow0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaGx1bWFscGhhMTFw
cy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdobHVtYWxwaGExMXBzLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YjU1ZDYwZWIzYjIyNmRkMGU3ZGFlNDhiZWQ1NTQ0N2E5OGZiMTM0MQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
c2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaGx1bWFscGhhMTFwcy5oCkBAIC0wLDAgKzEsMTQ4
IEBACisjaWYgMA0KKy8vDQorLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFk
ZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0DQorLy8NCisvLw0KKy8vLw0KKy8vIFJlc291cmNl
IEJpbmRpbmdzOg0KKy8vDQorLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQorLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0t
LS0tLS0tDQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAg
ICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQorLy8gVGV4dHVyZSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAwICAgICAgICAxDQor
Ly8NCisvLw0KKy8vDQorLy8gSW5wdXQgc2lnbmF0dXJlOg0KKy8vDQorLy8gTmFtZSAgICAgICAg
ICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlICBGb3JtYXQgICBVc2VkDQor
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0t
LS0tLS0gLS0tLS0tDQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAg
ICAwICAgICAgUE9TICAgZmxvYXQgICAgICAgDQorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAg
IDAgICB4eSAgICAgICAgICAxICAgICBOT05FICAgZmxvYXQgICB4eSAgDQorLy8NCisvLw0KKy8v
IE91dHB1dCBzaWduYXR1cmU6DQorLy8NCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAg
IE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAgIFVzZWQNCisvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0NCisv
LyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICBm
bG9hdCAgIHh5encNCisvLw0KK3BzXzRfMA0KK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQN
CitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCitk
Y2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5DQorZGNsX291dHB1dCBvMC54eXp3DQorZGNsX3RlbXBz
IDENCitzYW1wbGUgcjAueHl6dywgdjEueHl4eCwgdDAueHl6dywgczANCittb3YgbzAueHl6dywg
cjAueHh4dw0KK3JldCANCisvLyBBcHByb3hpbWF0ZWx5IDMgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNl
ZA0KKyNlbmRpZg0KKw0KK2NvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaEx1bUFscGhhW10gPQ0K
K3sNCisgICAgIDY4LCAgODgsICA2NiwgIDY3LCAxODUsICAxNCwgDQorICAgICA4NCwgMjIzLCAx
OTIsICA0MiwgIDE2LCAxMzMsIA0KKyAgICAgNDYsIDEwMCwgIDk1LCAyMjEsIDE4MywgIDk3LCAN
CisgICAgMTkyLCAgMjMsICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgIDEwOCwgICAyLCAgIDAs
ICAgMCwgICA1LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDUyLCAgIDAsICAgMCwgICAwLCANCisg
ICAgMjIwLCAgIDAsICAgMCwgICAwLCAgNTIsICAgMSwgDQorICAgICAgMCwgICAwLCAxMDQsICAg
MSwgICAwLCAgIDAsIA0KKyAgICAyNDAsICAgMSwgICAwLCAgIDAsICA4MiwgIDY4LCANCisgICAg
IDY5LCAgNzAsIDE2MCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCANCisgICAgIDI4
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgDQorICAgIDI1NSwgMjU1LCAgIDAsICAgMSwgICAw
LCAgIDAsIA0KKyAgICAxMDgsICAgMCwgICAwLCAgIDAsICA5MiwgICAwLCANCisgICAgICAwLCAg
IDAsICAgMywgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAxMDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCANCisgICAgICAwLCAgIDAsICAg
NSwgICAwLCAgIDAsICAgMCwgDQorICAgICAgNCwgICAwLCAgIDAsICAgMCwgMjU1LCAyNTUsIA0K
KyAgICAyNTUsIDI1NSwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAxLCAgIDAsICAgMCwg
ICAwLCAgMTMsICAgMCwgDQorICAgICAgMCwgICAwLCAgODMsICA5NywgMTA5LCAxMTIsIA0KKyAg
ICAxMDgsIDEwMSwgMTE0LCAgIDAsICA4NCwgMTAxLCANCisgICAgMTIwLCAxMTYsIDExNywgMTE0
LCAxMDEsICAgMCwgDQorICAgICA3NywgMTA1LCAgOTksIDExNCwgMTExLCAxMTUsIA0KKyAgICAx
MTEsIDEwMiwgMTE2LCAgMzIsICA0MCwgIDgyLCANCisgICAgIDQxLCAgMzIsICA3MiwgIDc2LCAg
ODMsICA3NiwgDQorICAgICAzMiwgIDgzLCAxMDQsICA5NywgMTAwLCAxMDEsIA0KKyAgICAxMTQs
ICAzMiwgIDY3LCAxMTEsIDEwOSwgMTEyLCANCisgICAgMTA1LCAxMDgsIDEwMSwgMTE0LCAgMzIs
ICA1NywgDQorICAgICA0NiwgIDUxLCAgNDgsICA0NiwgIDU3LCAgNTAsIA0KKyAgICAgNDgsICA0
OCwgIDQ2LCAgNDksICA1NCwgIDUxLCANCisgICAgIDU2LCAgNTIsICAgMCwgMTcxLCAgNzMsICA4
MywgDQorICAgICA3MSwgIDc4LCAgODAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDIsICAgMCwg
ICAwLCAgIDAsICAgOCwgICAwLCANCisgICAgICAwLCAgIDAsICA1NiwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAz
LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgMTUsICAgMCwgDQor
ICAgICAgMCwgICAwLCAgNjgsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgDQorICAg
ICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsIA0KKyAgICAgIDAsICAgMCwgIDgzLCAgODYs
ICA5NSwgIDgwLCANCisgICAgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgDQorICAgICA3
OCwgICAwLCAgODQsICA2OSwgIDg4LCAgNjcsIA0KKyAgICAgNzksICA3OSwgIDgyLCAgNjgsICAg
MCwgMTcxLCANCisgICAgMTcxLCAxNzEsICA3OSwgIDgzLCAgNzEsICA3OCwgDQorICAgICA0NCwg
ICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwg
ICAwLCANCisgICAgIDMyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCANCisgICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQorICAgICA4MywgIDg2LCAg
OTUsICA4NCwgIDY1LCAgODIsIA0KKyAgICAgNzEsICA2OSwgIDg0LCAgIDAsIDE3MSwgMTcxLCAN
CisgICAgIDgzLCAgNzIsICA2OCwgIDgyLCAxMjgsICAgMCwgDQorICAgICAgMCwgICAwLCAgNjQs
ICAgMCwgICAwLCAgIDAsIA0KKyAgICAgMzIsICAgMCwgICAwLCAgIDAsICA5MCwgICAwLCANCisg
ICAgICAwLCAgIDMsICAgMCwgIDk2LCAgMTYsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAg
MCwgIDg4LCAgMjQsIA0KKyAgICAgIDAsICAgNCwgICAwLCAxMTIsICAxNiwgICAwLCANCisgICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgODUsICA4NSwgDQorICAgICAgMCwgICAwLCAgOTgsICAxNiwg
ICAwLCAgIDMsIA0KKyAgICAgNTAsICAxNiwgIDE2LCAgIDAsICAgMSwgICAwLCANCisgICAgICAw
LCAgIDAsIDEwMSwgICAwLCAgIDAsICAgMywgDQorICAgIDI0MiwgIDMyLCAgMTYsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgMTA0LCAgIDAsICAgMCwgICAyLCANCisgICAgICAxLCAg
IDAsICAgMCwgICAwLCAgNjksICAgMCwgDQorICAgICAgMCwgICA5LCAyNDIsICAgMCwgIDE2LCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICA3MCwgIDE2LCANCisgICAgIDE2LCAgIDAs
ICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgICA3MCwgMTI2LCAgMTYsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgIDAsICAgMCwgICAwLCAgOTYsICAxNiwgICAwLCANCisgICAgICAwLCAgIDAsICAg
MCwgICAwLCAgNTQsICAgMCwgDQorICAgICAgMCwgICA1LCAyNDIsICAzMiwgIDE2LCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgIDEyLCANCisgICAgIDE2LCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICA2MiwgICAwLCAgIDAsICAgMSwgIDgzLCAgODQsIA0KKyAg
ICAgNjUsICA4NCwgMTE2LCAgIDAsICAgMCwgICAwLCANCisgICAgICAzLCAgIDAsICAgMCwgICAw
LCAgIDEsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
IDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQor
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAg
ICAgMCwgICAwDQorfTsNCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2Ix
MXBzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2IxMXBzLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTg2
Y2JjZjZiODJjZmQ5NjU4NjAxOGRlMTk5Nzk5NzM4NjE4NzczOQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hh
ZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYjExcHMuaApAQCAtMCwwICsxLDE1MiBAQAorI2lm
IDANCisvLw0KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBp
bGVyIDkuMzAuOTIwMC4xNjM4NA0KKy8vDQorLy8NCisvLy8NCisvLyBSZXNvdXJjZSBCaW5kaW5n
czoNCisvLw0KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBG
b3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0K
Ky8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAg
ICAgICAgTkEgICAgMCAgICAgICAgMQ0KKy8vIFRleHR1cmUgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQ0KKy8vDQorLy8N
CisvLw0KKy8vIElucHV0IHNpZ25hdHVyZToNCisvLw0KKy8vIE5hbWUgICAgICAgICAgICAgICAg
IEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KKy8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0t
LS0tLQ0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAg
IFBPUyAgIGZsb2F0ICAgICAgIA0KKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkg
ICAgICAgICAgMSAgICAgTk9ORSAgIGZsb2F0ICAgeHkgIA0KKy8vDQorLy8NCisvLyBPdXRwdXQg
c2lnbmF0dXJlOg0KKy8vDQorLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJl
Z2lzdGVyIFN5c1ZhbHVlICBGb3JtYXQgICBVc2VkDQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0g
LS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tDQorLy8gU1ZfVEFS
R0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgZmxvYXQgICB4
eXp3DQorLy8NCitwc180XzANCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQorZGNsX3Jl
c291cmNlX3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQorZGNsX2lucHV0
X3BzIGxpbmVhciB2MS54eQ0KK2RjbF9vdXRwdXQgbzAueHl6dw0KK2RjbF90ZW1wcyAxDQorc2Ft
cGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwDQorbW92IG8wLnh5eiwgcjAueHl6eA0K
K21vdiBvMC53LCBsKDEuMDAwMDAwKQ0KK3JldCANCisvLyBBcHByb3hpbWF0ZWx5IDQgaW5zdHJ1
Y3Rpb24gc2xvdHMgdXNlZA0KKyNlbmRpZg0KKw0KK2NvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3Vn
aFJHQltdID0NCit7DQorICAgICA2OCwgIDg4LCAgNjYsICA2NywgMTI1LCAxODYsIA0KKyAgICAy
NTAsIDI0MiwgMTEzLCAyNTUsICA1OSwgMjM5LCANCisgICAgMTE5LCAxNTgsIDIzNywgIDc4LCAy
MjAsICA0MywgDQorICAgIDE2MCwgIDQ2LCAgIDEsICAgMCwgICAwLCAgIDAsIA0KKyAgICAxMjgs
ICAgMiwgICAwLCAgIDAsICAgNSwgICAwLCANCisgICAgICAwLCAgIDAsICA1MiwgICAwLCAgIDAs
ICAgMCwgDQorICAgIDIyMCwgICAwLCAgIDAsICAgMCwgIDUyLCAgIDEsIA0KKyAgICAgIDAsICAg
MCwgMTA0LCAgIDEsICAgMCwgICAwLCANCisgICAgICA0LCAgIDIsICAgMCwgICAwLCAgODIsICA2
OCwgDQorICAgICA2OSwgIDcwLCAxNjAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwg
DQorICAgICAyOCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsIA0KKyAgICAyNTUsIDI1NSwgICAw
LCAgIDEsICAgMCwgICAwLCANCisgICAgMTA4LCAgIDAsICAgMCwgICAwLCAgOTIsICAgMCwgDQor
ICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAxLCAgIDAs
ICAgMCwgICAwLCANCisgICAgMTAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgDQorICAgICAg
MCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDQsICAgMCwgICAwLCAgIDAsIDI1
NSwgMjU1LCANCisgICAgMjU1LCAyNTUsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMSwg
ICAwLCAgIDAsICAgMCwgIDEzLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDgzLCAgOTcsIDEwOSwg
MTEyLCANCisgICAgMTA4LCAxMDEsIDExNCwgICAwLCAgODQsIDEwMSwgDQorICAgIDEyMCwgMTE2
LCAxMTcsIDExNCwgMTAxLCAgIDAsIA0KKyAgICAgNzcsIDEwNSwgIDk5LCAxMTQsIDExMSwgMTE1
LCANCisgICAgMTExLCAxMDIsIDExNiwgIDMyLCAgNDAsICA4MiwgDQorICAgICA0MSwgIDMyLCAg
NzIsICA3NiwgIDgzLCAgNzYsIA0KKyAgICAgMzIsICA4MywgMTA0LCAgOTcsIDEwMCwgMTAxLCAN
CisgICAgMTE0LCAgMzIsICA2NywgMTExLCAxMDksIDExMiwgDQorICAgIDEwNSwgMTA4LCAxMDEs
IDExNCwgIDMyLCAgNTcsIA0KKyAgICAgNDYsICA1MSwgIDQ4LCAgNDYsICA1NywgIDUwLCANCisg
ICAgIDQ4LCAgNDgsICA0NiwgIDQ5LCAgNTQsICA1MSwgDQorICAgICA1NiwgIDUyLCAgIDAsIDE3
MSwgIDczLCAgODMsIA0KKyAgICAgNzEsICA3OCwgIDgwLCAgIDAsICAgMCwgICAwLCANCisgICAg
ICAyLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgDQorICAgICAgMCwgICAwLCAgNTYsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCisgICAgICAw
LCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDE1
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDY4LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLCANCisgICAgICAwLCAgIDAs
ICA4MywgIDg2LCAgOTUsICA4MCwgDQorICAgICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzks
IA0KKyAgICAgNzgsICAgMCwgIDg0LCAgNjksICA4OCwgIDY3LCANCisgICAgIDc5LCAgNzksICA4
MiwgIDY4LCAgIDAsIDE3MSwgDQorICAgIDE3MSwgMTcxLCAgNzksICA4MywgIDcxLCAgNzgsIA0K
KyAgICAgNDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAgOCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAzMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAzLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgMTUsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
ODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCANCisgICAgIDcxLCAgNjksICA4NCwgICAwLCAx
NzEsIDE3MSwgDQorICAgICA4MywgIDcyLCAgNjgsICA4MiwgMTQ4LCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgIDY0LCAgIDAsICAgMCwgICAwLCANCisgICAgIDM3LCAgIDAsICAgMCwgICAwLCAgOTAs
ICAgMCwgDQorICAgICAgMCwgICAzLCAgIDAsICA5NiwgIDE2LCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICA4OCwgIDI0LCANCisgICAgICAwLCAgIDQsICAgMCwgMTEyLCAgMTYsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDg1LCAgODUsIA0KKyAgICAgIDAsICAgMCwg
IDk4LCAgMTYsICAgMCwgICAzLCANCisgICAgIDUwLCAgMTYsICAxNiwgICAwLCAgIDEsICAgMCwg
DQorICAgICAgMCwgICAwLCAxMDEsICAgMCwgICAwLCAgIDMsIA0KKyAgICAyNDIsICAzMiwgIDE2
LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsIDEwNCwgICAwLCAgIDAsICAgMiwgDQor
ICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDY5LCAgIDAsIA0KKyAgICAgIDAsICAgOSwgMjQyLCAg
IDAsICAxNiwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgNzAsICAxNiwgDQorICAg
ICAxNiwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgNzAsIDEyNiwgIDE2LCAgIDAs
ICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgIDk2LCAgMTYsICAgMCwgDQorICAgICAg
MCwgICAwLCAgIDAsICAgMCwgIDU0LCAgIDAsIA0KKyAgICAgIDAsICAgNSwgMTE0LCAgMzIsICAx
NiwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgNzAsICAgMiwgDQorICAgICAxNiwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgNTQsICAgMCwgICAwLCAgIDUsIDEzMCwg
IDMyLCANCisgICAgIDE2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMSwgIDY0
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAxMjgsICA2MywgIDYyLCAgIDAsICAgMCwgICAx
LCANCisgICAgIDgzLCAgODQsICA2NSwgIDg0LCAxMTYsICAgMCwgDQorICAgICAgMCwgICAwLCAg
IDQsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAN
CisgICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisg
ICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDANCit9Ow0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxl
ZC9wYXNzdGhyb3VnaHJnYmExMXBzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhMTFw
cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmQ3ZDJhMjVhYmEwOTZjM2ZhYTM3ZGYyMWViNTNjOTg0MzhkMDRiYTMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhMTFwcy5oCkBA
IC0wLDAgKzEsMTQxIEBACisjaWYgMA0KKy8vDQorLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAo
UikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0DQorLy8NCisvLw0KKy8vLw0K
Ky8vIFJlc291cmNlIEJpbmRpbmdzOg0KKy8vDQorLy8gTmFtZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQorLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0t
LS0tLSAtLS0tIC0tLS0tLS0tDQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQorLy8gVGV4dHVyZSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAw
ICAgICAgICAxDQorLy8NCisvLw0KKy8vDQorLy8gSW5wdXQgc2lnbmF0dXJlOg0KKy8vDQorLy8g
TmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlICBGb3Jt
YXQgICBVc2VkDQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0t
IC0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tDQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAg
ICB4eXp3ICAgICAgICAwICAgICAgUE9TICAgZmxvYXQgICAgICAgDQorLy8gVEVYQ09PUkQgICAg
ICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICAgZmxvYXQgICB4eSAgDQor
Ly8NCisvLw0KKy8vIE91dHB1dCBzaWduYXR1cmU6DQorLy8NCisvLyBOYW1lICAgICAgICAgICAg
ICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAgIFVzZWQNCisvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0t
LSAtLS0tLS0NCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAg
ICBUQVJHRVQgICBmbG9hdCAgIHh5encNCisvLw0KK3BzXzRfMA0KK2RjbF9zYW1wbGVyIHMwLCBt
b2RlX2RlZmF1bHQNCitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkIChmbG9hdCxmbG9hdCxmbG9hdCxm
bG9hdCkgdDANCitkY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5DQorZGNsX291dHB1dCBvMC54eXp3
DQorc2FtcGxlIG8wLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwDQorcmV0IA0KKy8vIEFwcHJv
eGltYXRlbHkgMiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQorI2VuZGlmDQorDQorY29uc3QgQllU
RSBnX1BTX1Bhc3N0aHJvdWdoUkdCQVtdID0NCit7DQorICAgICA2OCwgIDg4LCAgNjYsICA2Nywg
MTUxLCAxNTIsIA0KKyAgICAgIDgsIDEwMiwgMTc0LCAxMzUsICA3NiwgIDU3LCANCisgICAgMTAw
LCAxNDYsICA1OSwgIDc0LCAyMDUsICAzNSwgDQorICAgIDIwNiwgIDIxLCAgIDEsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAgODAsICAgMiwgICAwLCAgIDAsICAgNSwgICAwLCANCisgICAgICAwLCAg
IDAsICA1MiwgICAwLCAgIDAsICAgMCwgDQorICAgIDIyMCwgICAwLCAgIDAsICAgMCwgIDUyLCAg
IDEsIA0KKyAgICAgIDAsICAgMCwgMTA0LCAgIDEsICAgMCwgICAwLCANCisgICAgMjEyLCAgIDEs
ICAgMCwgICAwLCAgODIsICA2OCwgDQorICAgICA2OSwgIDcwLCAxNjAsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAg
MiwgICAwLCAgIDAsICAgMCwgDQorICAgICAyOCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsIA0K
KyAgICAyNTUsIDI1NSwgICAwLCAgIDEsICAgMCwgICAwLCANCisgICAgMTA4LCAgIDAsICAgMCwg
ICAwLCAgOTIsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAg
IDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCisgICAgMTAwLCAgIDAsICAgMCwgICAwLCAg
IDIsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDQs
ICAgMCwgICAwLCAgIDAsIDI1NSwgMjU1LCANCisgICAgMjU1LCAyNTUsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDEzLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgIDgzLCAgOTcsIDEwOSwgMTEyLCANCisgICAgMTA4LCAxMDEsIDExNCwgICAwLCAgODQsIDEw
MSwgDQorICAgIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCAgIDAsIA0KKyAgICAgNzcsIDEwNSwg
IDk5LCAxMTQsIDExMSwgMTE1LCANCisgICAgMTExLCAxMDIsIDExNiwgIDMyLCAgNDAsICA4Miwg
DQorICAgICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsIA0KKyAgICAgMzIsICA4MywgMTA0
LCAgOTcsIDEwMCwgMTAxLCANCisgICAgMTE0LCAgMzIsICA2NywgMTExLCAxMDksIDExMiwgDQor
ICAgIDEwNSwgMTA4LCAxMDEsIDExNCwgIDMyLCAgNTcsIA0KKyAgICAgNDYsICA1MSwgIDQ4LCAg
NDYsICA1NywgIDUwLCANCisgICAgIDQ4LCAgNDgsICA0NiwgIDQ5LCAgNTQsICA1MSwgDQorICAg
ICA1NiwgIDUyLCAgIDAsIDE3MSwgIDczLCAgODMsIA0KKyAgICAgNzEsICA3OCwgIDgwLCAgIDAs
ICAgMCwgICAwLCANCisgICAgICAyLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgDQorICAgICAg
MCwgICAwLCAgNTYsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MSwgICAwLCANCisgICAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgIDE1LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDY4LCAgIDAsICAgMCwg
ICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAw
LCAgIDMsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAz
LCANCisgICAgICAwLCAgIDAsICA4MywgIDg2LCAgOTUsICA4MCwgDQorICAgICA3OSwgIDgzLCAg
NzMsICA4NCwgIDczLCAgNzksIA0KKyAgICAgNzgsICAgMCwgIDg0LCAgNjksICA4OCwgIDY3LCAN
CisgICAgIDc5LCAgNzksICA4MiwgIDY4LCAgIDAsIDE3MSwgDQorICAgIDE3MSwgMTcxLCAgNzks
ICA4MywgIDcxLCAgNzgsIA0KKyAgICAgNDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCisg
ICAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgDQorICAgICAzMiwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAg
ICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgMTUsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCANCisgICAgIDcx
LCAgNjksICA4NCwgICAwLCAxNzEsIDE3MSwgDQorICAgICA4MywgIDcyLCAgNjgsICA4MiwgMTAw
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDY0LCAgIDAsICAgMCwgICAwLCANCisgICAgIDI1LCAg
IDAsICAgMCwgICAwLCAgOTAsICAgMCwgDQorICAgICAgMCwgICAzLCAgIDAsICA5NiwgIDE2LCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICA4OCwgIDI0LCANCisgICAgICAwLCAgIDQs
ICAgMCwgMTEyLCAgMTYsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDg1LCAgODUs
IA0KKyAgICAgIDAsICAgMCwgIDk4LCAgMTYsICAgMCwgICAzLCANCisgICAgIDUwLCAgMTYsICAx
NiwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAwLCAxMDEsICAgMCwgICAwLCAgIDMsIA0K
KyAgICAyNDIsICAzMiwgIDE2LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICA2OSwg
ICAwLCAgIDAsICAgOSwgDQorICAgIDI0MiwgIDMyLCAgMTYsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgIDcwLCAgMTYsICAxNiwgICAwLCANCisgICAgICAxLCAgIDAsICAgMCwgICAw
LCAgNzAsIDEyNiwgDQorICAgICAxNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
IDAsICA5NiwgIDE2LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICA2MiwgICAwLCAg
IDAsICAgMSwgDQorICAgICA4MywgIDg0LCAgNjUsICA4NCwgMTE2LCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQor
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwDQorfTsNCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMv
Z2VuZXJhdGVfc2hhZGVycy5iYXQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVycy5iYXQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYjM1N2Q0ZWY1ODczZjE3NmZiMGY5MTZhNjRmOTUzNjI5YTY1M2E2MgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvc2hhZGVycy9nZW5lcmF0ZV9zaGFkZXJzLmJhdApAQCAtMCwwICsxLDE4IEBACitARUNITyBP
RkYNCitSRU0NCitSRU0gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorUkVNIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCitSRU0gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4NCitSRU0NCisNCitQQVRIICVQQVRIJTslUHJvZ3JhbUZpbGVz
KHg4NiklXFdpbmRvd3MgS2l0c1w4LjBcYmluXHg4NjslRFhTREtfRElSJVxVdGlsaXRpZXNcYmlu
XHg4Ng0KKw0KK2Z4YyAvRSBWU19QYXNzdGhyb3VnaCAvVCB2c180XzAgL0ZoIGNvbXBpbGVkL3Bh
c3N0aHJvdWdoMTF2cy5oIFBhc3N0aHJvdWdoMTEuaGxzbA0KK2Z4YyAvRSBQU19QYXNzdGhyb3Vn
aFJHQkEgL1QgcHNfNF8wIC9GaCBjb21waWxlZC9wYXNzdGhyb3VnaHJnYmExMXBzLmggUGFzc3Ro
cm91Z2gxMS5obHNsDQorZnhjIC9FIFBTX1Bhc3N0aHJvdWdoUkdCIC9UIHBzXzRfMCAvRmggY29t
cGlsZWQvcGFzc3Rocm91Z2hyZ2IxMXBzLmggUGFzc3Rocm91Z2gxMS5obHNsDQorZnhjIC9FIFBT
X1Bhc3N0aHJvdWdoTHVtIC9UIHBzXzRfMCAvRmggY29tcGlsZWQvcGFzc3Rocm91Z2hsdW0xMXBz
LmggUGFzc3Rocm91Z2gxMS5obHNsDQorZnhjIC9FIFBTX1Bhc3N0aHJvdWdoTHVtQWxwaGEgL1Qg
cHNfNF8wIC9GaCBjb21waWxlZC9wYXNzdGhyb3VnaGx1bWFscGhhMTFwcy5oIFBhc3N0aHJvdWdo
MTEuaGxzbA0KKw0KK2Z4YyAvRSBWU19DbGVhciAvVCB2c180XzAgL0ZoIGNvbXBpbGVkL2NsZWFy
MTF2cy5oIENsZWFyMTEuaGxzbA0KK2Z4YyAvRSBQU19DbGVhclNpbmdsZSAvVCBwc180XzAgL0Zo
IGNvbXBpbGVkL2NsZWFyc2luZ2xlMTFwcy5oIENsZWFyMTEuaGxzbA0KK2Z4YyAvRSBQU19DbGVh
ck11bHRpcGxlIC9UIHBzXzRfMCAvRmggY29tcGlsZWQvY2xlYXJtdWx0aXBsZTExcHMuaCBDbGVh
cjExLmhsc2wNCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvQmxpdC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvQmxpdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDczZGY2NDE4ZGRl
YjFmZDY1ZTVjZTc5MDFkYzgwMjA2ZDI4ODViOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CbGl0LmNwcApAQCAt
MCwwICsxLDU5NSBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisvLyBCbGl0LmNwcDogU3VyZmFjZSBjb3B5IHV0aWxpdHkgY2xhc3MuCisKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CbGl0LmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIv
bWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGls
cy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1RleHR1cmVTdG9yYWdlOS5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlclRhcmdldDkuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVy
LmgiCisKK25hbWVzcGFjZQoreworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3No
YWRlcnMvY29tcGlsZWQvc3RhbmRhcmR2cy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvZmxpcHl2cy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hwcy5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvbHVtaW5hbmNlcHMuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2NvbXBv
bmVudG1hc2twcy5oIgorCitjb25zdCBCWVRFKiBjb25zdCBnX3NoYWRlckNvZGVbXSA9Cit7Cisg
ICAgZ192czIwX3N0YW5kYXJkdnMsCisgICAgZ192czIwX2ZsaXB5dnMsCisgICAgZ19wczIwX3Bh
c3N0aHJvdWdocHMsCisgICAgZ19wczIwX2x1bWluYW5jZXBzLAorICAgIGdfcHMyMF9jb21wb25l
bnRtYXNrcHMKK307CisKK2NvbnN0IHNpemVfdCBnX3NoYWRlclNpemVbXSA9Cit7CisgICAgc2l6
ZW9mKGdfdnMyMF9zdGFuZGFyZHZzKSwKKyAgICBzaXplb2YoZ192czIwX2ZsaXB5dnMpLAorICAg
IHNpemVvZihnX3BzMjBfcGFzc3Rocm91Z2hwcyksCisgICAgc2l6ZW9mKGdfcHMyMF9sdW1pbmFu
Y2VwcyksCisgICAgc2l6ZW9mKGdfcHMyMF9jb21wb25lbnRtYXNrcHMpCit9OworfQorCituYW1l
c3BhY2UgcngKK3sKK0JsaXQ6OkJsaXQocng6OlJlbmRlcmVyOSAqcmVuZGVyZXIpCisgIDogbVJl
bmRlcmVyKHJlbmRlcmVyKSwgbVF1YWRWZXJ0ZXhCdWZmZXIoTlVMTCksIG1RdWFkVmVydGV4RGVj
bGFyYXRpb24oTlVMTCksIG1TYXZlZFN0YXRlQmxvY2soTlVMTCksIG1TYXZlZFJlbmRlclRhcmdl
dChOVUxMKSwgbVNhdmVkRGVwdGhTdGVuY2lsKE5VTEwpCit7CisgICAgaW5pdEdlb21ldHJ5KCk7
CisgICAgbWVtc2V0KG1Db21waWxlZFNoYWRlcnMsIDAsIHNpemVvZihtQ29tcGlsZWRTaGFkZXJz
KSk7Cit9CisKK0JsaXQ6On5CbGl0KCkKK3sKKyAgICBpZiAobVNhdmVkU3RhdGVCbG9jaykgbVNh
dmVkU3RhdGVCbG9jay0+UmVsZWFzZSgpOworICAgIGlmIChtUXVhZFZlcnRleEJ1ZmZlcikgbVF1
YWRWZXJ0ZXhCdWZmZXItPlJlbGVhc2UoKTsKKyAgICBpZiAobVF1YWRWZXJ0ZXhEZWNsYXJhdGlv
bikgbVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbi0+UmVsZWFzZSgpOworCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBTSEFERVJfQ09VTlQ7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtQ29tcGlsZWRT
aGFkZXJzW2ldKQorICAgICAgICB7CisgICAgICAgICAgICBtQ29tcGlsZWRTaGFkZXJzW2ldLT5S
ZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQmxpdDo6aW5pdEdlb21ldHJ5
KCkKK3sKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgcXVhZFtdID0KKyAgICB7CisgICAgICAgIC0x
LCAtMSwKKyAgICAgICAgLTEsICAxLAorICAgICAgICAgMSwgLTEsCisgICAgICAgICAxLCAgMQor
ICAgIH07CisKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERl
dmljZSgpOworCisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVZlcnRleEJ1ZmZl
cihzaXplb2YocXVhZCksIEQzRFVTQUdFX1dSSVRFT05MWSwgMCwgRDNEUE9PTF9ERUZBVUxULCAm
bVF1YWRWZXJ0ZXhCdWZmZXIsIE5VTEwpOworCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBy
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorCisgICAgdm9pZCAqbG9ja1B0ciA9IE5VTEw7CisgICAgcmVz
dWx0ID0gbVF1YWRWZXJ0ZXhCdWZmZXItPkxvY2soMCwgMCwgJmxvY2tQdHIsIDApOworCisgICAg
aWYgKEZBSUxFRChyZXN1bHQpIHx8IGxvY2tQdHIgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KKworICAgIG1lbWNweShsb2NrUHRyLCBxdWFkLCBzaXplb2YocXVhZCkpOworICAgIG1R
dWFkVmVydGV4QnVmZmVyLT5VbmxvY2soKTsKKworICAgIHN0YXRpYyBjb25zdCBEM0RWRVJURVhF
TEVNRU5UOSBlbGVtZW50c1tdID0KKyAgICB7CisgICAgICAgIHsgMCwgMCwgRDNEREVDTFRZUEVf
RkxPQVQyLCBEM0RERUNMTUVUSE9EX0RFRkFVTFQsIEQzRERFQ0xVU0FHRV9QT1NJVElPTiwgMCB9
LAorICAgICAgICBEM0RERUNMX0VORCgpCisgICAgfTsKKworICAgIHJlc3VsdCA9IGRldmljZS0+
Q3JlYXRlVmVydGV4RGVjbGFyYXRpb24oZWxlbWVudHMsICZtUXVhZFZlcnRleERlY2xhcmF0aW9u
KTsKKworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEFTU0VSVChyZXN1
bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkp
OworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
KwordGVtcGxhdGUgPGNsYXNzIEQzRFNoYWRlclR5cGU+Citib29sIEJsaXQ6OnNldFNoYWRlcihT
aGFkZXJJZCBzb3VyY2UsIGNvbnN0IGNoYXIgKnByb2ZpbGUsCisgICAgICAgICAgICAgICAgICAg
ICBEM0RTaGFkZXJUeXBlICoocng6OlJlbmRlcmVyOTo6KmNyZWF0ZVNoYWRlcikoY29uc3QgRFdP
UkQgKiwgc2l6ZV90IGxlbmd0aCksCisgICAgICAgICAgICAgICAgICAgICBIUkVTVUxUIChXSU5B
UEkgSURpcmVjdDNERGV2aWNlOTo6KnNldFNoYWRlcikoRDNEU2hhZGVyVHlwZSopKQoreworICAg
IElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAg
ICBEM0RTaGFkZXJUeXBlICpzaGFkZXI7CisKKyAgICBpZiAobUNvbXBpbGVkU2hhZGVyc1tzb3Vy
Y2VdICE9IE5VTEwpCisgICAgeworICAgICAgICBzaGFkZXIgPSBzdGF0aWNfY2FzdDxEM0RTaGFk
ZXJUeXBlKj4obUNvbXBpbGVkU2hhZGVyc1tzb3VyY2VdKTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgY29uc3QgQllURSogc2hhZGVyQ29kZSA9IGdfc2hhZGVyQ29kZVtzb3VyY2Vd
OworICAgICAgICBzaXplX3Qgc2hhZGVyU2l6ZSA9IGdfc2hhZGVyU2l6ZVtzb3VyY2VdOworCisg
ICAgICAgIHNoYWRlciA9IChtUmVuZGVyZXItPipjcmVhdGVTaGFkZXIpKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgRFdPUkQqPihzaGFkZXJDb2RlKSwgc2hhZGVyU2l6ZSk7CisgICAgICAgIGlmICgh
c2hhZGVyKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBjcmVhdGUgc2hh
ZGVyIGZvciBibGl0IG9wZXJhdGlvbiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisKKyAgICAgICAgbUNvbXBpbGVkU2hhZGVyc1tzb3VyY2VdID0gc2hhZGVyOworICAg
IH0KKworICAgIEhSRVNVTFQgaHIgPSAoZGV2aWNlLT4qc2V0U2hhZGVyKShzaGFkZXIpOworCisg
ICAgaWYgKEZBSUxFRChocikpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byBzZXQgc2hh
ZGVyIGZvciBibGl0IG9wZXJhdGlvbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQmxpdDo6c2V0VmVydGV4U2hhZGVyKFNoYWRl
cklkIHNoYWRlcikKK3sKKyAgICByZXR1cm4gc2V0U2hhZGVyPElEaXJlY3QzRFZlcnRleFNoYWRl
cjk+KHNoYWRlciwgInZzXzJfMCIsICZyeDo6UmVuZGVyZXI5OjpjcmVhdGVWZXJ0ZXhTaGFkZXIs
ICZJRGlyZWN0M0REZXZpY2U5OjpTZXRWZXJ0ZXhTaGFkZXIpOworfQorCitib29sIEJsaXQ6OnNl
dFBpeGVsU2hhZGVyKFNoYWRlcklkIHNoYWRlcikKK3sKKyAgICByZXR1cm4gc2V0U2hhZGVyPElE
aXJlY3QzRFBpeGVsU2hhZGVyOT4oc2hhZGVyLCAicHNfMl8wIiwgJnJ4OjpSZW5kZXJlcjk6OmNy
ZWF0ZVBpeGVsU2hhZGVyLCAmSURpcmVjdDNERGV2aWNlOTo6U2V0UGl4ZWxTaGFkZXIpOworfQor
CitSRUNUIEJsaXQ6OmdldFN1cmZhY2VSZWN0KElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlKSBj
b25zdAoreworICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOworICAgIHN1cmZhY2UtPkdldERlc2Mo
JmRlc2MpOworCisgICAgUkVDVCByZWN0OworICAgIHJlY3QubGVmdCA9IDA7CisgICAgcmVjdC50
b3AgPSAwOworICAgIHJlY3QucmlnaHQgPSBkZXNjLldpZHRoOworICAgIHJlY3QuYm90dG9tID0g
ZGVzYy5IZWlnaHQ7CisKKyAgICByZXR1cm4gcmVjdDsKK30KKworYm9vbCBCbGl0Ojpib3hGaWx0
ZXIoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpCit7
CisgICAgSURpcmVjdDNEVGV4dHVyZTkgKnRleHR1cmUgPSBjb3B5U3VyZmFjZVRvVGV4dHVyZShz
b3VyY2UsIGdldFN1cmZhY2VSZWN0KHNvdXJjZSkpOworICAgIGlmICghdGV4dHVyZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpk
ZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgc2F2ZVN0YXRlKCk7CisKKyAg
ICBkZXZpY2UtPlNldFRleHR1cmUoMCwgdGV4dHVyZSk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJU
YXJnZXQoMCwgZGVzdCk7CisKKyAgICBzZXRWZXJ0ZXhTaGFkZXIoU0hBREVSX1ZTX1NUQU5EQVJE
KTsKKyAgICBzZXRQaXhlbFNoYWRlcihTSEFERVJfUFNfUEFTU1RIUk9VR0gpOworCisgICAgc2V0
Q29tbW9uQmxpdFN0YXRlKCk7CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FN
UF9NSU5GSUxURVIsIEQzRFRFWEZfTElORUFSKTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0
ZSgwLCBEM0RTQU1QX01BR0ZJTFRFUiwgRDNEVEVYRl9MSU5FQVIpOworCisgICAgc2V0Vmlld3Bv
cnQoZ2V0U3VyZmFjZVJlY3QoZGVzdCksIDAsIDApOworCisgICAgcmVuZGVyKCk7CisKKyAgICB0
ZXh0dXJlLT5SZWxlYXNlKCk7CisKKyAgICByZXN0b3JlU3RhdGUoKTsKKworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIEJsaXQ6OmNvcHkoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwg
Y29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIEdMaW50
IGxldmVsKQoreworICAgIFJlbmRlclRhcmdldDkgKnJlbmRlclRhcmdldCA9IE5VTEw7CisgICAg
SURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSA9IE5VTEw7CisgICAgZ2w6OlJlbmRlcmJ1ZmZlciAq
Y29sb3JidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoMCk7CisKKyAgICBpZiAo
Y29sb3JidWZmZXIpCisgICAgeworICAgICAgICByZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQ5
OjptYWtlUmVuZGVyVGFyZ2V0OShjb2xvcmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOworICAg
IH0KKyAgICAKKyAgICBpZiAocmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAgc291cmNlID0g
cmVuZGVyVGFyZ2V0LT5nZXRTdXJmYWNlKCk7CisgICAgfQorCisgICAgaWYgKCFzb3VyY2UpCisg
ICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldC4i
KTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7Cisg
ICAgfQorCisgICAgVGV4dHVyZVN0b3JhZ2U5XzJEICpzdG9yYWdlOSA9IFRleHR1cmVTdG9yYWdl
OV8yRDo6bWFrZVRleHR1cmVTdG9yYWdlOV8yRChzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2Uo
KSk7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJmYWNlID0gc3RvcmFnZTktPmdldFN1
cmZhY2VMZXZlbChsZXZlbCwgdHJ1ZSk7CisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICAg
ICAgCisgICAgaWYgKGRlc3RTdXJmYWNlKQorICAgIHsKKyAgICAgICAgcmVzdWx0ID0gY29weShz
b3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RGb3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQsIGRlc3RTdXJm
YWNlKTsKKyAgICAgICAgZGVzdFN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBzb3Vy
Y2UtPlJlbGVhc2UoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIEJsaXQ6OmNvcHko
Z2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xl
bnVtIGRlc3RGb3JtYXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpCit7
CisgICAgUmVuZGVyVGFyZ2V0OSAqcmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICBJRGlyZWN0M0RT
dXJmYWNlOSAqc291cmNlID0gTlVMTDsKKyAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZl
ciA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigwKTsKKworICAgIGlmIChjb2xvcmJ1ZmZl
cikKKyAgICB7CisgICAgICAgIHJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDk6Om1ha2VSZW5k
ZXJUYXJnZXQ5KGNvbG9yYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSk7CisgICAgfQorICAgIAor
ICAgIGlmIChyZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBzb3VyY2UgPSByZW5kZXJUYXJn
ZXQtPmdldFN1cmZhY2UoKTsKKyAgICB9CisKKyAgICBpZiAoIXNvdXJjZSkKKyAgICB7CisgICAg
ICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CisKKyAg
ICBUZXh0dXJlU3RvcmFnZTlfQ3ViZSAqc3RvcmFnZTkgPSBUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6
bWFrZVRleHR1cmVTdG9yYWdlOV9DdWJlKHN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsK
KyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdFN1cmZhY2UgPSBzdG9yYWdlOS0+Z2V0Q3ViZU1h
cFN1cmZhY2UodGFyZ2V0LCBsZXZlbCwgdHJ1ZSk7CisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsK
KworICAgIGlmIChkZXN0U3VyZmFjZSkKKyAgICB7CisgICAgICAgIHJlc3VsdCA9IGNvcHkoc291
cmNlLCBzb3VyY2VSZWN0LCBkZXN0Rm9ybWF0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBkZXN0U3VyZmFj
ZSk7CisgICAgICAgIGRlc3RTdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgfQorCisgICAgc291cmNl
LT5SZWxlYXNlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBCbGl0Ojpjb3B5KElE
aXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMZW51bSBk
ZXN0Rm9ybWF0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBJRGlyZWN0M0RTdXJmYWNl
OSAqZGVzdCkKK3sKKyAgICBpZiAoIWRlc3QpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXRE
ZXZpY2UoKTsKKworICAgIEQzRFNVUkZBQ0VfREVTQyBzb3VyY2VEZXNjOworICAgIEQzRFNVUkZB
Q0VfREVTQyBkZXN0RGVzYzsKKyAgICBzb3VyY2UtPkdldERlc2MoJnNvdXJjZURlc2MpOworICAg
IGRlc3QtPkdldERlc2MoJmRlc3REZXNjKTsKKworICAgIGlmIChzb3VyY2VEZXNjLkZvcm1hdCA9
PSBkZXN0RGVzYy5Gb3JtYXQgJiYgZGVzdERlc2MuVXNhZ2UgJiBEM0RVU0FHRV9SRU5ERVJUQVJH
RVQgJiYKKyAgICAgICAgZDNkOV9nbDo6SXNGb3JtYXRDaGFubmVsRXF1aXZhbGVudChkZXN0RGVz
Yy5Gb3JtYXQsIGRlc3RGb3JtYXQpKSAgIC8vIENhbiB1c2UgU3RyZXRjaFJlY3QKKyAgICB7Cisg
ICAgICAgIFJFQ1QgZGVzdFJlY3QgPSB7eG9mZnNldCwgeW9mZnNldCwgeG9mZnNldCArIChzb3Vy
Y2VSZWN0LnJpZ2h0IC0gc291cmNlUmVjdC5sZWZ0KSwgeW9mZnNldCArIChzb3VyY2VSZWN0LmJv
dHRvbSAtIHNvdXJjZVJlY3QudG9wKX07CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNl
LT5TdHJldGNoUmVjdChzb3VyY2UsICZzb3VyY2VSZWN0LCBkZXN0LCAmZGVzdFJlY3QsIEQzRFRF
WEZfUE9JTlQpOworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAg
ICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1
bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICByZXR1cm4gZm9ybWF0Q29udmVydChzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RGb3Jt
YXQsIHhvZmZzZXQsIHlvZmZzZXQsIGRlc3QpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBCbGl0Ojpmb3JtYXRDb252ZXJ0KElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGNv
bnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCkKK3sKKyAgICBJRGlyZWN0M0RU
ZXh0dXJlOSAqdGV4dHVyZSA9IGNvcHlTdXJmYWNlVG9UZXh0dXJlKHNvdXJjZSwgc291cmNlUmVj
dCk7CisgICAgaWYgKCF0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNl
KCk7CisKKyAgICBzYXZlU3RhdGUoKTsKKworICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCB0ZXh0
dXJlKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBkZXN0KTsKKworICAgIHNldFZp
ZXdwb3J0KHNvdXJjZVJlY3QsIHhvZmZzZXQsIHlvZmZzZXQpOworCisgICAgc2V0Q29tbW9uQmxp
dFN0YXRlKCk7CisgICAgaWYgKHNldEZvcm1hdENvbnZlcnRTaGFkZXJzKGRlc3RGb3JtYXQpKQor
ICAgIHsKKyAgICAgICAgcmVuZGVyKCk7CisgICAgfQorCisgICAgdGV4dHVyZS0+UmVsZWFzZSgp
OworCisgICAgcmVzdG9yZVN0YXRlKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBC
bGl0OjpzZXRGb3JtYXRDb252ZXJ0U2hhZGVycyhHTGVudW0gZGVzdEZvcm1hdCkKK3sKKyAgICBi
b29sIG9rYXkgPSBzZXRWZXJ0ZXhTaGFkZXIoU0hBREVSX1ZTX1NUQU5EQVJEKTsKKworICAgIHN3
aXRjaCAoZGVzdEZvcm1hdCkKKyAgICB7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKKyAgICAgIGNhc2Ug
R0xfUkdCOgorICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAgb2theSA9IG9rYXkgJiYgc2V0
UGl4ZWxTaGFkZXIoU0hBREVSX1BTX0NPTVBPTkVOVE1BU0spOworICAgICAgICBicmVhazsKKwor
ICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToK
KyAgICAgICAgb2theSA9IG9rYXkgJiYgc2V0UGl4ZWxTaGFkZXIoU0hBREVSX1BTX0xVTUlOQU5D
RSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICghb2theSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBlbnVtIHsgWCA9IDAsIFkgPSAxLCBaID0g
MiwgVyA9IDMgfTsKKworICAgIC8vIFRoZSBtZWFuaW5nIG9mIHRoaXMgY29uc3RhbnQgZGVwZW5k
cyBvbiB0aGUgc2hhZGVyIHRoYXQgd2FzIHNlbGVjdGVkLgorICAgIC8vIFNlZSB0aGUgc2hhZGVy
IGFzc2VtYmx5IGNvZGUgYWJvdmUgZm9yIGRldGFpbHMuCisgICAgZmxvYXQgcHNDb25zdDBbNF0g
PSB7IDAsIDAsIDAsIDAgfTsKKworICAgIHN3aXRjaCAoZGVzdEZvcm1hdCkKKyAgICB7CisgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgY2Fz
ZSBHTF9CR1JBX0VYVDoKKyAgICAgICAgcHNDb25zdDBbWF0gPSAxOworICAgICAgICBwc0NvbnN0
MFtaXSA9IDE7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgICAg
cHNDb25zdDBbWF0gPSAxOworICAgICAgICBwc0NvbnN0MFtXXSA9IDE7CisgICAgICAgIGJyZWFr
OworCisgICAgICBjYXNlIEdMX0FMUEhBOgorICAgICAgICBwc0NvbnN0MFtaXSA9IDE7CisgICAg
ICAgIGJyZWFrOworCisgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKKyAgICAgICAgcHNDb25zdDBb
WV0gPSAxOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6
CisgICAgICAgIHBzQ29uc3QwW1hdID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
bVJlbmRlcmVyLT5nZXREZXZpY2UoKS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYoMCwgcHNDb25z
dDAsIDEpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0lEaXJlY3QzRFRleHR1cmU5ICpCbGl0
Ojpjb3B5U3VyZmFjZVRvVGV4dHVyZShJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSwgY29uc3Qg
UkVDVCAmc291cmNlUmVjdCkKK3sKKyAgICBpZiAoIXN1cmZhY2UpCisgICAgeworICAgICAgICBy
ZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVu
ZGVyZXItPmdldERldmljZSgpOworCisgICAgRDNEU1VSRkFDRV9ERVNDIHNvdXJjZURlc2M7Cisg
ICAgc3VyZmFjZS0+R2V0RGVzYygmc291cmNlRGVzYyk7CisKKyAgICAvLyBDb3B5IHRoZSByZW5k
ZXIgdGFyZ2V0IGludG8gYSB0ZXh0dXJlCisgICAgSURpcmVjdDNEVGV4dHVyZTkgKnRleHR1cmU7
CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUoc291cmNlUmVjdC5y
aWdodCAtIHNvdXJjZVJlY3QubGVmdCwgc291cmNlUmVjdC5ib3R0b20gLSBzb3VyY2VSZWN0LnRv
cCwgMSwgRDNEVVNBR0VfUkVOREVSVEFSR0VULCBzb3VyY2VEZXNjLkZvcm1hdCwgRDNEUE9PTF9E
RUZBVUxULCAmdGV4dHVyZSwgTlVMTCk7CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAg
eworICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJl
c3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZLCAoSURpcmVjdDNEVGV4dHVyZTkqKU5VTEwpOworICAgIH0KKworICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICp0ZXh0dXJlU3VyZmFjZTsKKyAgICByZXN1bHQgPSB0ZXh0dXJlLT5HZXRT
dXJmYWNlTGV2ZWwoMCwgJnRleHR1cmVTdXJmYWNlKTsKKworICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKKyAgICB7CisgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1P
UlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICB0ZXh0dXJlLT5SZWxlYXNl
KCk7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgKElEaXJlY3Qz
RFRleHR1cmU5KilOVUxMKTsKKyAgICB9CisKKyAgICBtUmVuZGVyZXItPmVuZFNjZW5lKCk7Cisg
ICAgcmVzdWx0ID0gZGV2aWNlLT5TdHJldGNoUmVjdChzdXJmYWNlLCAmc291cmNlUmVjdCwgdGV4
dHVyZVN1cmZhY2UsIE5VTEwsIEQzRFRFWEZfTk9ORSk7CisKKyAgICB0ZXh0dXJlU3VyZmFjZS0+
UmVsZWFzZSgpOworCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRP
Rk1FTU9SWSk7CisgICAgICAgIHRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSURpcmVjdDNEVGV4dHVyZTkqKU5VTEwpOworICAg
IH0KKworICAgIHJldHVybiB0ZXh0dXJlOworfQorCit2b2lkIEJsaXQ6OnNldFZpZXdwb3J0KGNv
bnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQpCit7Cisg
ICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKwor
ICAgIEQzRFZJRVdQT1JUOSB2cDsKKyAgICB2cC5YICAgICAgPSB4b2Zmc2V0OworICAgIHZwLlkg
ICAgICA9IHlvZmZzZXQ7CisgICAgdnAuV2lkdGggID0gc291cmNlUmVjdC5yaWdodCAtIHNvdXJj
ZVJlY3QubGVmdDsKKyAgICB2cC5IZWlnaHQgPSBzb3VyY2VSZWN0LmJvdHRvbSAtIHNvdXJjZVJl
Y3QudG9wOworICAgIHZwLk1pblogICA9IDAuMGY7CisgICAgdnAuTWF4WiAgID0gMS4wZjsKKyAg
ICBkZXZpY2UtPlNldFZpZXdwb3J0KCZ2cCk7CisKKyAgICBmbG9hdCBoYWxmUGl4ZWxBZGp1c3Rb
NF0gPSB7IC0xLjBmL3ZwLldpZHRoLCAxLjBmL3ZwLkhlaWdodCwgMCwgMCB9OworICAgIGRldmlj
ZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKDAsIGhhbGZQaXhlbEFkanVzdCwgMSk7Cit9CisK
K3ZvaWQgQmxpdDo6c2V0Q29tbW9uQmxpdFN0YXRlKCkKK3sKKyAgICBJRGlyZWN0M0REZXZpY2U5
ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgZGV2aWNlLT5TZXREZXB0
aFN0ZW5jaWxTdXJmYWNlKE5VTEwpOworCisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOworICAgIGRldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIEQzRENPTE9SV1JJVEVFTkFCTEVfQUxQSEEgfCBE
M0RDT0xPUldSSVRFRU5BQkxFX0JMVUUgfCBEM0RDT0xPUldSSVRFRU5BQkxFX0dSRUVOIHwgRDNE
Q09MT1JXUklURUVOQUJMRV9SRUQpOworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
U1JHQldSSVRFRU5BQkxFLCBGQUxTRSk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19TQ0lTU09SVEVTVEVOQUJMRSwgRkFMU0UpOworCisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3Rh
dGUoMCwgRDNEU0FNUF9NQUdGSUxURVIsIEQzRFRFWEZfUE9JTlQpOworICAgIGRldmljZS0+U2V0
U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUlORklMVEVSLCBEM0RURVhGX1BPSU5UKTsKKyAgICBk
ZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX1NSR0JURVhUVVJFLCBGQUxTRSk7Cisg
ICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9BRERSRVNTVSwgRDNEVEFERFJF
U1NfQ0xBTVApOworICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfQUREUkVT
U1YsIEQzRFRBRERSRVNTX0NMQU1QKTsKKworICAgIFJFQ1Qgc2Npc3NvclJlY3QgPSB7MH07ICAg
Ly8gU2Npc3NvcmluZyBpcyBkaXNhYmxlZCBmb3IgZmxpcHBpbmcsIGJ1dCB3ZSBuZWVkIHRoaXMg
dG8gY2FwdHVyZSBhbmQgcmVzdG9yZSB0aGUgb2xkIHJlY3RhbmdsZQorICAgIGRldmljZS0+U2V0
U2Npc3NvclJlY3QoJnNjaXNzb3JSZWN0KTsKKworICAgIGZvcihpbnQgaSA9IDA7IGkgPCBnbDo6
TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgeworICAgICAgICBkZXZpY2UtPlNldFN0cmVh
bVNvdXJjZUZyZXEoaSwgMSk7CisgICAgfQorfQorCit2b2lkIEJsaXQ6OnJlbmRlcigpCit7Cisg
ICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKwor
ICAgIEhSRVNVTFQgaHIgPSBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZSgwLCBtUXVhZFZlcnRleEJ1
ZmZlciwgMCwgMiAqIHNpemVvZihmbG9hdCkpOworICAgIGhyID0gZGV2aWNlLT5TZXRWZXJ0ZXhE
ZWNsYXJhdGlvbihtUXVhZFZlcnRleERlY2xhcmF0aW9uKTsKKworICAgIG1SZW5kZXJlci0+c3Rh
cnRTY2VuZSgpOworICAgIGhyID0gZGV2aWNlLT5EcmF3UHJpbWl0aXZlKEQzRFBUX1RSSUFOR0xF
U1RSSVAsIDAsIDIpOworfQorCit2b2lkIEJsaXQ6OnNhdmVTdGF0ZSgpCit7CisgICAgSURpcmVj
dDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgIEhSRVNV
TFQgaHI7CisKKyAgICBkZXZpY2UtPkdldERlcHRoU3RlbmNpbFN1cmZhY2UoJm1TYXZlZERlcHRo
U3RlbmNpbCk7CisgICAgZGV2aWNlLT5HZXRSZW5kZXJUYXJnZXQoMCwgJm1TYXZlZFJlbmRlclRh
cmdldCk7CisKKyAgICBpZiAobVNhdmVkU3RhdGVCbG9jayA9PSBOVUxMKQorICAgIHsKKyAgICAg
ICAgaHIgPSBkZXZpY2UtPkJlZ2luU3RhdGVCbG9jaygpOworICAgICAgICBBU1NFUlQoU1VDQ0VF
REVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9G
TUVNT1JZKTsKKworICAgICAgICBzZXRDb21tb25CbGl0U3RhdGUoKTsKKworICAgICAgICBzdGF0
aWMgY29uc3QgZmxvYXQgZHVtbXlDb25zdFs0XSA9IHsgMCwgMCwgMCwgMCB9OworCisgICAgICAg
IGRldmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOworICAgICAgICBkZXZpY2UtPlNldFZlcnRl
eFNoYWRlckNvbnN0YW50RigwLCBkdW1teUNvbnN0LCAxKTsKKyAgICAgICAgZGV2aWNlLT5TZXRQ
aXhlbFNoYWRlcihOVUxMKTsKKyAgICAgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50
RigwLCBkdW1teUNvbnN0LCAxKTsKKworICAgICAgICBEM0RWSUVXUE9SVDkgZHVtbXlWcDsKKyAg
ICAgICAgZHVtbXlWcC5YID0gMDsKKyAgICAgICAgZHVtbXlWcC5ZID0gMDsKKyAgICAgICAgZHVt
bXlWcC5XaWR0aCA9IDE7CisgICAgICAgIGR1bW15VnAuSGVpZ2h0ID0gMTsKKyAgICAgICAgZHVt
bXlWcC5NaW5aID0gMDsKKyAgICAgICAgZHVtbXlWcC5NYXhaID0gMTsKKworICAgICAgICBkZXZp
Y2UtPlNldFZpZXdwb3J0KCZkdW1teVZwKTsKKworICAgICAgICBkZXZpY2UtPlNldFRleHR1cmUo
MCwgTlVMTCk7CisKKyAgICAgICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2UoMCwgbVF1YWRWZXJ0
ZXhCdWZmZXIsIDAsIDApOworCisgICAgICAgIGRldmljZS0+U2V0VmVydGV4RGVjbGFyYXRpb24o
bVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbik7CisKKyAgICAgICAgaHIgPSBkZXZpY2UtPkVuZFN0YXRl
QmxvY2soJm1TYXZlZFN0YXRlQmxvY2spOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8
fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsK
KyAgICB9CisKKyAgICBBU1NFUlQobVNhdmVkU3RhdGVCbG9jayAhPSBOVUxMKTsKKworICAgIGlm
IChtU2F2ZWRTdGF0ZUJsb2NrICE9IE5VTEwpCisgICAgeworICAgICAgICBociA9IG1TYXZlZFN0
YXRlQmxvY2stPkNhcHR1cmUoKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworICAg
IH0KK30KKwordm9pZCBCbGl0OjpyZXN0b3JlU3RhdGUoKQoreworICAgIElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICBkZXZpY2UtPlNldERl
cHRoU3RlbmNpbFN1cmZhY2UobVNhdmVkRGVwdGhTdGVuY2lsKTsKKyAgICBpZiAobVNhdmVkRGVw
dGhTdGVuY2lsICE9IE5VTEwpCisgICAgeworICAgICAgICBtU2F2ZWREZXB0aFN0ZW5jaWwtPlJl
bGVhc2UoKTsKKyAgICAgICAgbVNhdmVkRGVwdGhTdGVuY2lsID0gTlVMTDsKKyAgICB9CisKKyAg
ICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBtU2F2ZWRSZW5kZXJUYXJnZXQpOworICAgIGlm
IChtU2F2ZWRSZW5kZXJUYXJnZXQgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1TYXZlZFJlbmRl
clRhcmdldC0+UmVsZWFzZSgpOworICAgICAgICBtU2F2ZWRSZW5kZXJUYXJnZXQgPSBOVUxMOwor
ICAgIH0KKworICAgIEFTU0VSVChtU2F2ZWRTdGF0ZUJsb2NrICE9IE5VTEwpOworCisgICAgaWYg
KG1TYXZlZFN0YXRlQmxvY2sgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1TYXZlZFN0YXRlQmxv
Y2stPkFwcGx5KCk7CisgICAgfQorfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvQmxpdC5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0JsaXQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zNzE4MDI4ZTY2MmQzZDU2MWM3NmNkMGNhNmY1MmU4MTNlNjcyNWMzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L0JsaXQuaApAQCAtMCwwICsxLDk0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBCbGl0LmNw
cDogU3VyZmFjZSBjb3B5IHV0aWxpdHkgY2xhc3MuCisKKyNpZm5kZWYgTElCR0xFU1YyX0JMSVRf
SF8KKyNkZWZpbmUgTElCR0xFU1YyX0JMSVRfSF8KKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0
aWxzLmgiCisKK25hbWVzcGFjZSBnbAoreworY2xhc3MgRnJhbWVidWZmZXI7Cit9CisKK25hbWVz
cGFjZSByeAoreworY2xhc3MgUmVuZGVyZXI5OworY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UyRDsKK2NsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTsKKworY2xhc3MgQmxpdAor
eworICBwdWJsaWM6CisgICAgZXhwbGljaXQgQmxpdChSZW5kZXJlcjkgKnJlbmRlcmVyKTsKKyAg
ICB+QmxpdCgpOworCisgICAgLy8gQ29weSBmcm9tIHNvdXJjZSBzdXJmYWNlIHRvIGRlc3Qgc3Vy
ZmFjZS4KKyAgICAvLyBzb3VyY2VSZWN0LCB4b2Zmc2V0LCB5b2Zmc2V0IGFyZSBpbiBEM0QgY29v
cmRpbmF0ZXMgKDAsMCBpbiB1cHBlci1sZWZ0KQorICAgIGJvb2wgY29weShnbDo6RnJhbWVidWZm
ZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBSRUNUICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1h
dCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2Uy
RCAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpOworICAgIGJvb2wgY29weShnbDo6RnJhbWVidWZmZXIg
KmZyYW1lYnVmZmVyLCBjb25zdCBSRUNUICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJl
ICpzdG9yYWdlLCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCk7CisKKyAgICAvLyBDb3B5IGZy
b20gc291cmNlIHN1cmZhY2UgdG8gZGVzdCBzdXJmYWNlLgorICAgIC8vIHNvdXJjZVJlY3QsIHhv
ZmZzZXQsIHlvZmZzZXQgYXJlIGluIEQzRCBjb29yZGluYXRlcyAoMCwwIGluIHVwcGVyLWxlZnQp
CisgICAgLy8gc291cmNlIGlzIGludGVycHJldGVkIGFzIFJHQkEgYW5kIGRlc3RGb3JtYXQgc3Bl
Y2lmaWVzIHRoZSBkZXNpcmVkIHJlc3VsdCBmb3JtYXQuIEZvciBleGFtcGxlLCBpZiBkZXN0Rm9y
bWF0ID0gR0xfUkdCLCB0aGUgYWxwaGEgY2hhbm5lbCB3aWxsIGJlIGZvcmNlZCB0byAwLgorICAg
IGJvb2wgZm9ybWF0Q29udmVydChJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBjb25zdCBSRUNU
ICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpOworCisgICAgLy8gMngyIGJveCBmaWx0ZXIg
c2FtcGxlIGZyb20gc291cmNlIHRvIGRlc3QuCisgICAgLy8gUmVxdWlyZXMgdGhhdCBzb3VyY2Ug
aXMgUkdCKEEpIGFuZCBkZXN0IGhhcyB0aGUgc2FtZSBmb3JtYXQgYXMgc291cmNlLgorICAgIGJv
b2wgYm94RmlsdGVyKElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIElEaXJlY3QzRFN1cmZhY2U5
ICpkZXN0KTsKKworICBwcml2YXRlOgorICAgIHJ4OjpSZW5kZXJlcjkgKm1SZW5kZXJlcjsKKwor
ICAgIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKm1RdWFkVmVydGV4QnVmZmVyOworICAgIElEaXJl
Y3QzRFZlcnRleERlY2xhcmF0aW9uOSAqbVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbjsKKworICAgIHZv
aWQgaW5pdEdlb21ldHJ5KCk7CisKKyAgICBib29sIHNldEZvcm1hdENvbnZlcnRTaGFkZXJzKEdM
ZW51bSBkZXN0Rm9ybWF0KTsKKworICAgIGJvb2wgY29weShJRGlyZWN0M0RTdXJmYWNlOSAqc291
cmNlLCBjb25zdCBSRUNUICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpOworICAgIElEaXJl
Y3QzRFRleHR1cmU5ICpjb3B5U3VyZmFjZVRvVGV4dHVyZShJRGlyZWN0M0RTdXJmYWNlOSAqc3Vy
ZmFjZSwgY29uc3QgUkVDVCAmc291cmNlUmVjdCk7CisgICAgdm9pZCBzZXRWaWV3cG9ydChjb25z
dCBSRUNUICZzb3VyY2VSZWN0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0KTsKKyAgICB2
b2lkIHNldENvbW1vbkJsaXRTdGF0ZSgpOworICAgIFJFQ1QgZ2V0U3VyZmFjZVJlY3QoSURpcmVj
dDNEU3VyZmFjZTkgKnN1cmZhY2UpIGNvbnN0OworCisgICAgLy8gVGhpcyBlbnVtIGlzIHVzZWQg
dG8gaW5kZXggbUNvbXBpbGVkU2hhZGVycyBhbmQgbVNoYWRlclNvdXJjZS4KKyAgICBlbnVtIFNo
YWRlcklkCisgICAgeworICAgICAgICBTSEFERVJfVlNfU1RBTkRBUkQsCisgICAgICAgIFNIQURF
Ul9WU19GTElQWSwKKyAgICAgICAgU0hBREVSX1BTX1BBU1NUSFJPVUdILAorICAgICAgICBTSEFE
RVJfUFNfTFVNSU5BTkNFLAorICAgICAgICBTSEFERVJfUFNfQ09NUE9ORU5UTUFTSywKKyAgICAg
ICAgU0hBREVSX0NPVU5UCisgICAgfTsKKworICAgIC8vIFRoaXMgYWN0dWFsbHkgY29udGFpbnMg
SURpcmVjdDNEVmVydGV4U2hhZGVyOSBvciBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgY2FzdGVkIHRv
IElVbmtub3duLgorICAgIElVbmtub3duICptQ29tcGlsZWRTaGFkZXJzW1NIQURFUl9DT1VOVF07
CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgRDNEU2hhZGVyVHlwZT4KKyAgICBib29sIHNldFNoYWRl
cihTaGFkZXJJZCBzb3VyY2UsIGNvbnN0IGNoYXIgKnByb2ZpbGUsCisgICAgICAgICAgICAgICAg
ICAgRDNEU2hhZGVyVHlwZSAqKFJlbmRlcmVyOTo6KmNyZWF0ZVNoYWRlcikoY29uc3QgRFdPUkQg
Kiwgc2l6ZV90IGxlbmd0aCksCisgICAgICAgICAgICAgICAgICAgSFJFU1VMVCAoV0lOQVBJIElE
aXJlY3QzRERldmljZTk6OipzZXRTaGFkZXIpKEQzRFNoYWRlclR5cGUqKSk7CisKKyAgICBib29s
IHNldFZlcnRleFNoYWRlcihTaGFkZXJJZCBzaGFkZXIpOworICAgIGJvb2wgc2V0UGl4ZWxTaGFk
ZXIoU2hhZGVySWQgc2hhZGVyKTsKKyAgICB2b2lkIHJlbmRlcigpOworCisgICAgdm9pZCBzYXZl
U3RhdGUoKTsKKyAgICB2b2lkIHJlc3RvcmVTdGF0ZSgpOworICAgIElEaXJlY3QzRFN0YXRlQmxv
Y2s5ICptU2F2ZWRTdGF0ZUJsb2NrOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICptU2F2ZWRSZW5k
ZXJUYXJnZXQ7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1TYXZlZERlcHRoU3RlbmNpbDsKKwor
ICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihCbGl0KTsKK307Cit9CisKKyNlbmRpZiAgIC8v
IExJQkdMRVNWMl9CTElUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvQnVmZmVyU3RvcmFnZTkuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0J1ZmZlclN0b3JhZ2U5
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45ZmRjMTI0NmYxNzQzNmQ3ZjRjNGNjZjNlNTQ5NjA2NTIwODkzNTkw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L0J1ZmZlclN0b3JhZ2U5LmNwcApAQCAtMCwwICsxLDc4IEBACisjaW5j
bHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBCdWZmZXJTdG9yYWdlOS5j
cHAgRGVmaW5lcyB0aGUgQnVmZmVyU3RvcmFnZTkgY2xhc3MuCisKKyNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9CdWZmZXJTdG9yYWdlOS5oIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1
Zy5oIgorCituYW1lc3BhY2UgcngKK3sKKworQnVmZmVyU3RvcmFnZTk6OkJ1ZmZlclN0b3JhZ2U5
KCkKK3sKKyAgICBtTWVtb3J5ID0gTlVMTDsKKyAgICBtQWxsb2NhdGVkU2l6ZSA9IDA7CisgICAg
bVNpemUgPSAwOworfQorCitCdWZmZXJTdG9yYWdlOTo6fkJ1ZmZlclN0b3JhZ2U5KCkKK3sKKyAg
ICBkZWxldGVbXSBtTWVtb3J5OworfQorCitCdWZmZXJTdG9yYWdlOSAqQnVmZmVyU3RvcmFnZTk6
Om1ha2VCdWZmZXJTdG9yYWdlOShCdWZmZXJTdG9yYWdlICpidWZmZXJTdG9yYWdlKQoreworICAg
IEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKEJ1ZmZlclN0b3JhZ2U5KiwgYnVmZmVyU3RvcmFnZSkp
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxCdWZmZXJTdG9yYWdlOSo+KGJ1ZmZlclN0b3JhZ2Up
OworfQorCit2b2lkICpCdWZmZXJTdG9yYWdlOTo6Z2V0RGF0YSgpCit7CisgICAgcmV0dXJuIG1N
ZW1vcnk7Cit9CisKK3ZvaWQgQnVmZmVyU3RvcmFnZTk6OnNldERhdGEoY29uc3Qgdm9pZCogZGF0
YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBvZmZzZXQpCit7CisgICAgaWYgKCFt
TWVtb3J5IHx8IG9mZnNldCArIHNpemUgPiBtQWxsb2NhdGVkU2l6ZSkKKyAgICB7CisgICAgICAg
IHVuc2lnbmVkIGludCBuZXdBbGxvY2F0ZWRTaXplID0gb2Zmc2V0ICsgc2l6ZTsKKyAgICAgICAg
dm9pZCAqbmV3TWVtb3J5ID0gbmV3IGNoYXJbbmV3QWxsb2NhdGVkU2l6ZV07CisKKyAgICAgICAg
aWYgKG9mZnNldCA+IDAgJiYgbU1lbW9yeSAmJiBtQWxsb2NhdGVkU2l6ZSA+IDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1lbWNweShuZXdNZW1vcnksIG1NZW1vcnksIHN0ZDo6bWluKG9mZnNl
dCwgbUFsbG9jYXRlZFNpemUpKTsKKyAgICAgICAgfQorCisgICAgICAgIGRlbGV0ZVtdIG1NZW1v
cnk7CisgICAgICAgIG1NZW1vcnkgPSBuZXdNZW1vcnk7CisgICAgICAgIG1BbGxvY2F0ZWRTaXpl
ID0gbmV3QWxsb2NhdGVkU2l6ZTsKKyAgICB9CisKKyAgICBtU2l6ZSA9IHN0ZDo6bWF4KG1TaXpl
LCBvZmZzZXQgKyBzaXplKTsKKyAgICBpZiAoZGF0YSkKKyAgICB7CisgICAgICAgIG1lbWNweShy
ZWludGVycHJldF9jYXN0PGNoYXIqPihtTWVtb3J5KSArIG9mZnNldCwgZGF0YSwgc2l6ZSk7Cisg
ICAgfQorfQorCit2b2lkIEJ1ZmZlclN0b3JhZ2U5OjpjbGVhcigpCit7CisgICAgbVNpemUgPSAw
OworfQorCit1bnNpZ25lZCBpbnQgQnVmZmVyU3RvcmFnZTk6OmdldFNpemUoKSBjb25zdAorewor
ICAgIHJldHVybiBtU2l6ZTsKK30KKworYm9vbCBCdWZmZXJTdG9yYWdlOTo6c3VwcG9ydHNEaXJl
Y3RCaW5kaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9C
dWZmZXJTdG9yYWdlOS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L0J1ZmZlclN0b3JhZ2U5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2U4MDM5NjliYzM1ZDRl
YTExMWRhMjI4MWYyNWIzZTE3MWRkYzIzNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CdWZmZXJTdG9yYWdlOS5o
CkBAIC0wLDAgKzEsNDIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBCdWZmZXJTdG9yYWdlOS5oIERl
ZmluZXMgdGhlIEJ1ZmZlclN0b3JhZ2U5IGNsYXNzLgorCisjaWZuZGVmIExJQkdMRVNWMl9SRU5E
RVJFUl9CVUZGRVJTVE9SQUdFOV9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfQlVGRkVS
U1RPUkFHRTlfSF8KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdl
LmgiCisKK25hbWVzcGFjZSByeAoreworCitjbGFzcyBCdWZmZXJTdG9yYWdlOSA6IHB1YmxpYyBC
dWZmZXJTdG9yYWdlCit7CisgIHB1YmxpYzoKKyAgICBCdWZmZXJTdG9yYWdlOSgpOworICAgIHZp
cnR1YWwgfkJ1ZmZlclN0b3JhZ2U5KCk7CisKKyAgICBzdGF0aWMgQnVmZmVyU3RvcmFnZTkgKm1h
a2VCdWZmZXJTdG9yYWdlOShCdWZmZXJTdG9yYWdlICpidWZmZXJTdG9yYWdlKTsKKworICAgIHZp
cnR1YWwgdm9pZCAqZ2V0RGF0YSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhKGNvbnN0IHZv
aWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKKyAgICB2
aXJ0dWFsIHZvaWQgY2xlYXIoKTsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRTaXplKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRGlyZWN0QmluZGluZygpIGNvbnN0Owor
CisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEJ1ZmZlclN0b3JhZ2U5
KTsKKworICAgIHZvaWQgKm1NZW1vcnk7CisgICAgdW5zaWduZWQgaW50IG1BbGxvY2F0ZWRTaXpl
OworCisgICAgdW5zaWduZWQgaW50IG1TaXplOworfTsKKworfQorCisjZW5kaWYgLy8gTElCR0xF
U1YyX1JFTkRFUkVSX0JVRkZFUlNUT1JBR0U5X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvRmVuY2U5LmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9GZW5jZTkuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjYzOWMzN2I0ZTQzOTljYjRmZmQ4NzlmNDdmMTUxZmMwY2JhYzMwOGMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvRmVuY2U5LmNwcApAQCAtMCwwICsxLDEzNSBAQAorI2luY2x1ZGUgInByZWNv
bXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gRmVuY2U5LmNwcDogRGVmaW5lcyB0aGUgcng6
OkZlbmNlOSBjbGFzcy4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ZlbmNl
OS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvUmVuZGVyZXI5LmgiCisKK25hbWVzcGFjZSByeAoreworCitGZW5jZTk6OkZlbmNl
OShyeDo6UmVuZGVyZXI5ICpyZW5kZXJlcikKK3sKKyAgICBtUmVuZGVyZXIgPSByZW5kZXJlcjsK
KyAgICBtUXVlcnkgPSBOVUxMOworfQorCitGZW5jZTk6On5GZW5jZTkoKQoreworICAgIGlmICht
UXVlcnkpCisgICAgeworICAgICAgICBtUmVuZGVyZXItPmZyZWVFdmVudFF1ZXJ5KG1RdWVyeSk7
CisgICAgICAgIG1RdWVyeSA9IE5VTEw7CisgICAgfQorfQorCitHTGJvb2xlYW4gRmVuY2U5Ojpp
c0ZlbmNlKCkKK3sKKyAgICAvLyBHTF9OVl9mZW5jZSBzcGVjOgorICAgIC8vIEEgbmFtZSByZXR1
cm5lZCBieSBHZW5GZW5jZXNOViwgYnV0IG5vdCB5ZXQgc2V0IHZpYSBTZXRGZW5jZU5WLCBpcyBu
b3QgdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgZmVuY2UuCisgICAgcmV0dXJuIG1RdWVyeSAhPSBO
VUxMOworfQorCit2b2lkIEZlbmNlOTo6c2V0RmVuY2UoR0xlbnVtIGNvbmRpdGlvbikKK3sKKyAg
ICBpZiAoIW1RdWVyeSkKKyAgICB7CisgICAgICAgIG1RdWVyeSA9IG1SZW5kZXJlci0+YWxsb2Nh
dGVFdmVudFF1ZXJ5KCk7CisgICAgICAgIGlmICghbVF1ZXJ5KQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAg
fQorCisgICAgSFJFU1VMVCByZXN1bHQgPSBtUXVlcnktPklzc3VlKEQzRElTU1VFX0VORCk7Cisg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIHNldENvbmRpdGlvbihjb25kaXRp
b24pOworICAgIHNldFN0YXR1cyhHTF9GQUxTRSk7Cit9CisKK0dMYm9vbGVhbiBGZW5jZTk6OnRl
c3RGZW5jZSgpCit7CisgICAgaWYgKG1RdWVyeSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfVFJVRSk7CisgICAgfQorCisg
ICAgSFJFU1VMVCByZXN1bHQgPSBtUXVlcnktPkdldERhdGEoTlVMTCwgMCwgRDNER0VUREFUQV9G
TFVTSCk7CisKKyAgICBpZiAoZDNkOTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKKyAgICB7
CisgICAgICAgIG1SZW5kZXJlci0+bm90aWZ5RGV2aWNlTG9zdCgpOworICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX1RSVUUpOworICAgIH0KKworICAgIEFTU0VS
VChyZXN1bHQgPT0gU19PSyB8fCByZXN1bHQgPT0gU19GQUxTRSk7CisgICAgc2V0U3RhdHVzKHJl
c3VsdCA9PSBTX09LKTsKKyAgICByZXR1cm4gZ2V0U3RhdHVzKCk7Cit9CisKK3ZvaWQgRmVuY2U5
OjpmaW5pc2hGZW5jZSgpCit7CisgICAgaWYgKG1RdWVyeSA9PSBOVUxMKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgfQorCisgICAg
d2hpbGUgKCF0ZXN0RmVuY2UoKSkKKyAgICB7CisgICAgICAgIFNsZWVwKDApOworICAgIH0KK30K
Kwordm9pZCBGZW5jZTk6OmdldEZlbmNlaXYoR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKQor
eworICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgIH0KKworICAgIHN3aXRjaCAocG5hbWUpCisg
ICAgeworICAgICAgICBjYXNlIEdMX0ZFTkNFX1NUQVRVU19OVjoKKyAgICAgICAgeworICAgICAg
ICAgICAgLy8gR0xfTlZfZmVuY2Ugc3BlYzoKKyAgICAgICAgICAgIC8vIE9uY2UgdGhlIHN0YXR1
cyBvZiBhIGZlbmNlIGhhcyBiZWVuIGZpbmlzaGVkICh2aWEgRmluaXNoRmVuY2VOVikgb3IgdGVz
dGVkIGFuZCB0aGUgcmV0dXJuZWQgc3RhdHVzIGlzIFRSVUUgKHZpYSBlaXRoZXIgVGVzdEZlbmNl
TlYKKyAgICAgICAgICAgIC8vIG9yIEdldEZlbmNlaXZOViBxdWVyeWluZyB0aGUgRkVOQ0VfU1RB
VFVTX05WKSwgdGhlIHN0YXR1cyByZW1haW5zIFRSVUUgdW50aWwgdGhlIG5leHQgU2V0RmVuY2VO
ViBvZiB0aGUgZmVuY2UuCisgICAgICAgICAgICBpZiAoZ2V0U3RhdHVzKCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcGFyYW1zWzBdID0gR0xfVFJVRTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gbVF1ZXJ5LT5HZXREYXRhKE5VTEwsIDAsIDApOworCisgICAgICAgICAgICBp
ZiAoZDNkOTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBwYXJhbXNbMF0gPSBHTF9UUlVFOworICAgICAgICAgICAgICAgIG1SZW5kZXJl
ci0+bm90aWZ5RGV2aWNlTG9zdCgpOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEFTU0VSVChy
ZXN1bHQgPT0gU19PSyB8fCByZXN1bHQgPT0gU19GQUxTRSk7CisgICAgICAgICAgICBzZXRTdGF0
dXMocmVzdWx0ID09IFNfT0spOworICAgICAgICAgICAgcGFyYW1zWzBdID0gZ2V0U3RhdHVzKCk7
CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgR0xfRkVOQ0Vf
Q09ORElUSU9OX05WOgorICAgICAgICAgICAgcGFyYW1zWzBdID0gZ2V0Q29uZGl0aW9uKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30K
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L0ZlbmNlOS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L0ZlbmNlOS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmMTc2NDFlNTE5YWI0Nzg0
MDdlODBjY2JmZDI1MzgwYTNkY2M4YmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvRmVuY2U5LmgKQEAgLTAsMCAr
MSwzOSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIEZlbmNlOS5oOiBEZWZpbmVzIHRoZSByeDo6RmVu
Y2U5IGNsYXNzIHdoaWNoIGltcGxlbWVudHMgcng6OkZlbmNlSW1wbC4KKworI2lmbmRlZiBMSUJH
TEVTVjJfUkVOREVSRVJfRkVOQ0U5X0hfCisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9GRU5D
RTlfSF8KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZUltcGwuaCIKKworbmFt
ZXNwYWNlIHJ4Cit7CitjbGFzcyBSZW5kZXJlcjk7CisKK2NsYXNzIEZlbmNlOSA6IHB1YmxpYyBG
ZW5jZUltcGwKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IEZlbmNlOShyeDo6UmVuZGVyZXI5
ICpyZW5kZXJlcik7CisgICAgdmlydHVhbCB+RmVuY2U5KCk7CisKKyAgICBHTGJvb2xlYW4gaXNG
ZW5jZSgpOworICAgIHZvaWQgc2V0RmVuY2UoR0xlbnVtIGNvbmRpdGlvbik7CisgICAgR0xib29s
ZWFuIHRlc3RGZW5jZSgpOworICAgIHZvaWQgZmluaXNoRmVuY2UoKTsKKyAgICB2b2lkIGdldEZl
bmNlaXYoR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKTsKKworICBwcml2YXRlOgorICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihGZW5jZTkpOworCisgICAgcng6OlJlbmRlcmVyOSAqbVJl
bmRlcmVyOworICAgIElEaXJlY3QzRFF1ZXJ5OSAqbVF1ZXJ5OworfTsKKworfQorCisjZW5kaWYg
Ly8gTElCR0xFU1YyX1JFTkRFUkVSX0ZFTkNFOV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ltYWdlOS5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW1hZ2U5LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44NTExOTQ2MzZkMGIzMTk2ZjlhMjY0YWFhZmYyYTIxNzU3YTg5OWMzCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L0ltYWdlOS5jcHAKQEAgLTAsMCArMSw3MzIgQEAKKyNpbmNsdWRlICJwcmVj
b21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gSW1hZ2U5LmNwcDogSW1wbGVtZW50
cyB0aGUgcng6OkltYWdlOSBjbGFzcywgd2hpY2ggYWN0cyBhcyB0aGUgaW50ZXJmYWNlIHRvCisv
LyB0aGUgYWN0dWFsIHVuZGVybHlpbmcgc3VyZmFjZXMgb2YgYSBUZXh0dXJlLgorCisjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW1hZ2U5LmgiCisKKyNpbmNsdWRlICJsaWJHTEVT
djIvbWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9SZW5kZXJlcjkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5k
ZXJUYXJnZXQ5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0
b3JhZ2U5LmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5kZXJlcjlf
dXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZ2VuZXJhdGVtaXAuaCIKKwor
bmFtZXNwYWNlIHJ4Cit7CisKK0ltYWdlOTo6SW1hZ2U5KCkKK3sKKyAgICBtU3VyZmFjZSA9IE5V
TEw7CisgICAgbVJlbmRlcmVyID0gTlVMTDsKKworICAgIG1EM0RQb29sID0gRDNEUE9PTF9TWVNU
RU1NRU07CisgICAgbUQzREZvcm1hdCA9IEQzREZNVF9VTktOT1dOOworfQorCitJbWFnZTk6On5J
bWFnZTkoKQoreworICAgIGlmIChtU3VyZmFjZSkKKyAgICB7CisgICAgICAgIG1TdXJmYWNlLT5S
ZWxlYXNlKCk7CisgICAgfQorfQorCit2b2lkIEltYWdlOTo6Z2VuZXJhdGVNaXAoSURpcmVjdDNE
U3VyZmFjZTkgKmRlc3RTdXJmYWNlLCBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlU3VyZmFjZSkK
K3sKKyAgICBEM0RTVVJGQUNFX0RFU0MgZGVzdERlc2M7CisgICAgSFJFU1VMVCByZXN1bHQgPSBk
ZXN0U3VyZmFjZS0+R2V0RGVzYygmZGVzdERlc2MpOworICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CisKKyAgICBEM0RTVVJGQUNFX0RFU0Mgc291cmNlRGVzYzsKKyAgICByZXN1bHQgPSBz
b3VyY2VTdXJmYWNlLT5HZXREZXNjKCZzb3VyY2VEZXNjKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOworCisgICAgQVNTRVJUKHNvdXJjZURlc2MuRm9ybWF0ID09IGRlc3REZXNjLkZv
cm1hdCk7CisgICAgQVNTRVJUKHNvdXJjZURlc2MuV2lkdGggPT0gMSB8fCBzb3VyY2VEZXNjLldp
ZHRoIC8gMiA9PSBkZXN0RGVzYy5XaWR0aCk7CisgICAgQVNTRVJUKHNvdXJjZURlc2MuSGVpZ2h0
ID09IDEgfHwgc291cmNlRGVzYy5IZWlnaHQgLyAyID09IGRlc3REZXNjLkhlaWdodCk7CisKKyAg
ICBEM0RMT0NLRURfUkVDVCBzb3VyY2VMb2NrZWQgPSB7MH07CisgICAgcmVzdWx0ID0gc291cmNl
U3VyZmFjZS0+TG9ja1JlY3QoJnNvdXJjZUxvY2tlZCwgTlVMTCwgRDNETE9DS19SRUFET05MWSk7
CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIEQzRExPQ0tFRF9SRUNUIGRl
c3RMb2NrZWQgPSB7MH07CisgICAgcmVzdWx0ID0gZGVzdFN1cmZhY2UtPkxvY2tSZWN0KCZkZXN0
TG9ja2VkLCBOVUxMLCAwKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAg
Y29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgY2hhcio+KHNvdXJjZUxvY2tlZC5wQml0cyk7CisgICAgdW5zaWduZWQgY2hhciAq
ZGVzdERhdGEgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihkZXN0TG9ja2VkLnBC
aXRzKTsKKworICAgIGlmIChzb3VyY2VEYXRhICYmIGRlc3REYXRhKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChzb3VyY2VEZXNjLkZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRDNE
Rk1UX0w4OgorICAgICAgICAgICAgR2VuZXJhdGVNaXA8TDg+KHNvdXJjZURlc2MuV2lkdGgsIHNv
dXJjZURlc2MuSGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3VyY2VMb2NrZWQuUGl0Y2gsIGRlc3REYXRh
LCBkZXN0TG9ja2VkLlBpdGNoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2Ug
RDNERk1UX0E4TDg6CisgICAgICAgICAgICBHZW5lcmF0ZU1pcDxBOEw4Pihzb3VyY2VEZXNjLldp
ZHRoLCBzb3VyY2VEZXNjLkhlaWdodCwgc291cmNlRGF0YSwgc291cmNlTG9ja2VkLlBpdGNoLCBk
ZXN0RGF0YSwgZGVzdExvY2tlZC5QaXRjaCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBjYXNlIEQzREZNVF9BOFI4RzhCODoKKyAgICAgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoK
KyAgICAgICAgICAgIEdlbmVyYXRlTWlwPEE4UjhHOEI4Pihzb3VyY2VEZXNjLldpZHRoLCBzb3Vy
Y2VEZXNjLkhlaWdodCwgc291cmNlRGF0YSwgc291cmNlTG9ja2VkLlBpdGNoLCBkZXN0RGF0YSwg
ZGVzdExvY2tlZC5QaXRjaCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEQz
REZNVF9BMTZCMTZHMTZSMTZGOgorICAgICAgICAgICAgR2VuZXJhdGVNaXA8QTE2QjE2RzE2UjE2
Rj4oc291cmNlRGVzYy5XaWR0aCwgc291cmNlRGVzYy5IZWlnaHQsIHNvdXJjZURhdGEsIHNvdXJj
ZUxvY2tlZC5QaXRjaCwgZGVzdERhdGEsIGRlc3RMb2NrZWQuUGl0Y2gpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKKyAgICAgICAgICAg
IEdlbmVyYXRlTWlwPEEzMkIzMkczMlIzMkY+KHNvdXJjZURlc2MuV2lkdGgsIHNvdXJjZURlc2Mu
SGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3VyY2VMb2NrZWQuUGl0Y2gsIGRlc3REYXRhLCBkZXN0TG9j
a2VkLlBpdGNoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBkZXN0U3VyZmFjZS0+VW5sb2NrUmVjdCgpOworICAgICAgICBzb3VyY2VTdXJmYWNl
LT5VbmxvY2tSZWN0KCk7CisgICAgfQorfQorCitJbWFnZTkgKkltYWdlOTo6bWFrZUltYWdlOShJ
bWFnZSAqaW1nKQoreworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKHJ4OjpJbWFnZTkqLCBp
bWcpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8cng6OkltYWdlOSo+KGltZyk7Cit9CisKK3Zv
aWQgSW1hZ2U5OjpnZW5lcmF0ZU1pcG1hcChJbWFnZTkgKmRlc3QsIEltYWdlOSAqc291cmNlKQor
eworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2VTdXJmYWNlID0gc291cmNlLT5nZXRTdXJm
YWNlKCk7CisgICAgaWYgKHNvdXJjZVN1cmZhY2UgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0
U3VyZmFjZSA9IGRlc3QtPmdldFN1cmZhY2UoKTsKKyAgICBnZW5lcmF0ZU1pcChkZXN0U3VyZmFj
ZSwgc291cmNlU3VyZmFjZSk7CisKKyAgICBkZXN0LT5tYXJrRGlydHkoKTsKK30KKwordm9pZCBJ
bWFnZTk6OmNvcHlMb2NrYWJsZVN1cmZhY2VzKElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0LCBJRGly
ZWN0M0RTdXJmYWNlOSAqc291cmNlKQoreworICAgIEQzRExPQ0tFRF9SRUNUIHNvdXJjZUxvY2sg
PSB7MH07CisgICAgRDNETE9DS0VEX1JFQ1QgZGVzdExvY2sgPSB7MH07CisgICAgCisgICAgc291
cmNlLT5Mb2NrUmVjdCgmc291cmNlTG9jaywgTlVMTCwgMCk7CisgICAgZGVzdC0+TG9ja1JlY3Qo
JmRlc3RMb2NrLCBOVUxMLCAwKTsKKyAgICAKKyAgICBpZiAoc291cmNlTG9jay5wQml0cyAmJiBk
ZXN0TG9jay5wQml0cykKKyAgICB7CisgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOworICAg
ICAgICBzb3VyY2UtPkdldERlc2MoJmRlc2MpOworCisgICAgICAgIGludCByb3dzID0gZDNkOTo6
SXNDb21wcmVzc2VkRm9ybWF0KGRlc2MuRm9ybWF0KSA/IGRlc2MuSGVpZ2h0IC8gNCA6IGRlc2Mu
SGVpZ2h0OworICAgICAgICBpbnQgYnl0ZXMgPSBkM2Q5OjpDb21wdXRlUm93U2l6ZShkZXNjLkZv
cm1hdCwgZGVzYy5XaWR0aCk7CisgICAgICAgIEFTU0VSVChieXRlcyA8PSBzb3VyY2VMb2NrLlBp
dGNoICYmIGJ5dGVzIDw9IGRlc3RMb2NrLlBpdGNoKTsKKworICAgICAgICBmb3IoaW50IGkgPSAw
OyBpIDwgcm93czsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBtZW1jcHkoKGNoYXIqKWRl
c3RMb2NrLnBCaXRzICsgZGVzdExvY2suUGl0Y2ggKiBpLCAoY2hhciopc291cmNlTG9jay5wQml0
cyArIHNvdXJjZUxvY2suUGl0Y2ggKiBpLCBieXRlcyk7CisgICAgICAgIH0KKworICAgICAgICBz
b3VyY2UtPlVubG9ja1JlY3QoKTsKKyAgICAgICAgZGVzdC0+VW5sb2NrUmVjdCgpOworICAgIH0K
KyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Cit9CisKK2Jvb2wgSW1hZ2U5OjpyZWRlZmluZShyeDo6
UmVuZGVyZXIgKnJlbmRlcmVyLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIGJvb2wgZm9yY2VSZWxlYXNlKQoreworICAgIGlmIChtV2lkdGggIT0g
d2lkdGggfHwKKyAgICAgICAgbUhlaWdodCAhPSBoZWlnaHQgfHwKKyAgICAgICAgbUludGVybmFs
Rm9ybWF0ICE9IGludGVybmFsZm9ybWF0IHx8CisgICAgICAgIGZvcmNlUmVsZWFzZSkKKyAgICB7
CisgICAgICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShyZW5kZXJlcik7
CisKKyAgICAgICAgbVdpZHRoID0gd2lkdGg7CisgICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7Cisg
ICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGludGVybmFsZm9ybWF0OworICAgICAgICAvLyBjb21w
dXRlIHRoZSBkM2QgZm9ybWF0IHRoYXQgd2lsbCBiZSB1c2VkCisgICAgICAgIG1EM0RGb3JtYXQg
PSBtUmVuZGVyZXItPkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQp
OworICAgICAgICBtQWN0dWFsRm9ybWF0ID0gZDNkOV9nbDo6R2V0RXF1aXZhbGVudEZvcm1hdCht
RDNERm9ybWF0KTsKKworICAgICAgICBpZiAobVN1cmZhY2UpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1TdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICBtU3VyZmFjZSA9IE5VTEw7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3ZvaWQgSW1hZ2U5OjpjcmVhdGVTdXJmYWNlKCkKK3sKKyAgICBpZihtU3VyZmFj
ZSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJRGlyZWN0M0RUZXh0dXJl
OSAqbmV3VGV4dHVyZSA9IE5VTEw7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm5ld1N1cmZhY2Ug
PSBOVUxMOworICAgIGNvbnN0IEQzRFBPT0wgcG9vbFRvVXNlID0gRDNEUE9PTF9TWVNURU1NRU07
CisgICAgY29uc3QgRDNERk9STUFUIGQzZEZvcm1hdCA9IGdldEQzREZvcm1hdCgpOworICAgIEFT
U0VSVChkM2RGb3JtYXQgIT0gRDNERk1UX0lOVFopOyAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhl
cmUgZm9yIGRlcHRoIHRleHR1cmVzCisKKyAgICBpZiAobVdpZHRoICE9IDAgJiYgbUhlaWdodCAh
PSAwKQorICAgIHsKKyAgICAgICAgaW50IGxldmVsVG9GZXRjaCA9IDA7CisgICAgICAgIEdMc2l6
ZWkgcmVxdWVzdFdpZHRoID0gbVdpZHRoOworICAgICAgICBHTHNpemVpIHJlcXVlc3RIZWlnaHQg
PSBtSGVpZ2h0OworICAgICAgICBnbDo6TWFrZVZhbGlkU2l6ZSh0cnVlLCBnbDo6SXNDb21wcmVz
c2VkKG1JbnRlcm5hbEZvcm1hdCksICZyZXF1ZXN0V2lkdGgsICZyZXF1ZXN0SGVpZ2h0LCAmbGV2
ZWxUb0ZldGNoKTsKKworICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVy
ZXItPmdldERldmljZSgpOworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVh
dGVUZXh0dXJlKHJlcXVlc3RXaWR0aCwgcmVxdWVzdEhlaWdodCwgbGV2ZWxUb0ZldGNoICsgMSwg
MCwgZDNkRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBvb2xUb1VzZSwgJm5ld1RleHR1cmUsIE5VTEwpOworCisgICAgICAgIGlmIChG
QUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBE
M0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAg
ICAgICAgICBFUlIoIkNyZWF0aW5nIGltYWdlIHN1cmZhY2UgZmFpbGVkLiIpOworICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorCisgICAg
ICAgIG5ld1RleHR1cmUtPkdldFN1cmZhY2VMZXZlbChsZXZlbFRvRmV0Y2gsICZuZXdTdXJmYWNl
KTsKKyAgICAgICAgbmV3VGV4dHVyZS0+UmVsZWFzZSgpOworICAgIH0KKworICAgIG1TdXJmYWNl
ID0gbmV3U3VyZmFjZTsKKyAgICBtRGlydHkgPSBmYWxzZTsKKyAgICBtRDNEUG9vbCA9IHBvb2xU
b1VzZTsKK30KKworSFJFU1VMVCBJbWFnZTk6OmxvY2soRDNETE9DS0VEX1JFQ1QgKmxvY2tlZFJl
Y3QsIGNvbnN0IFJFQ1QgKnJlY3QpCit7CisgICAgY3JlYXRlU3VyZmFjZSgpOworCisgICAgSFJF
U1VMVCByZXN1bHQgPSBEM0RFUlJfSU5WQUxJRENBTEw7CisKKyAgICBpZiAobVN1cmZhY2UpCisg
ICAgeworICAgICAgICByZXN1bHQgPSBtU3VyZmFjZS0+TG9ja1JlY3QobG9ja2VkUmVjdCwgcmVj
dCwgMCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgbURp
cnR5ID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEltYWdl
OTo6dW5sb2NrKCkKK3sKKyAgICBpZiAobVN1cmZhY2UpCisgICAgeworICAgICAgICBIUkVTVUxU
IHJlc3VsdCA9IG1TdXJmYWNlLT5VbmxvY2tSZWN0KCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7CisgICAgfQorfQorCitib29sIEltYWdlOTo6aXNSZW5kZXJhYmxlRm9ybWF0
KCkgY29uc3QKK3sgICAgCisgICAgcmV0dXJuIFRleHR1cmVTdG9yYWdlOTo6SXNUZXh0dXJlRm9y
bWF0UmVuZGVyYWJsZShnZXREM0RGb3JtYXQoKSk7Cit9CisKK0QzREZPUk1BVCBJbWFnZTk6Omdl
dEQzREZvcm1hdCgpIGNvbnN0Cit7CisgICAgLy8gdGhpcyBzaG91bGQgb25seSBoYXBwZW4gaWYg
dGhlIGltYWdlIGhhc24ndCBiZWVuIHJlZGVmaW5lZCBmaXJzdAorICAgIC8vIHdoaWNoIHdvdWxk
IGJlIGEgYnVnIGJ5IHRoZSBjYWxsZXIKKyAgICBBU1NFUlQobUQzREZvcm1hdCAhPSBEM0RGTVRf
VU5LTk9XTik7CisKKyAgICByZXR1cm4gbUQzREZvcm1hdDsKK30KKworSURpcmVjdDNEU3VyZmFj
ZTkgKkltYWdlOTo6Z2V0U3VyZmFjZSgpCit7CisgICAgY3JlYXRlU3VyZmFjZSgpOworCisgICAg
cmV0dXJuIG1TdXJmYWNlOworfQorCit2b2lkIEltYWdlOTo6c2V0TWFuYWdlZFN1cmZhY2UoVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsKQoreworICAgIFRleHR1
cmVTdG9yYWdlOV8yRCAqc3RvcmFnZTkgPSBUZXh0dXJlU3RvcmFnZTlfMkQ6Om1ha2VUZXh0dXJl
U3RvcmFnZTlfMkQoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAgIHNldE1hbmFn
ZWRTdXJmYWNlKHN0b3JhZ2U5LT5nZXRTdXJmYWNlTGV2ZWwobGV2ZWwsIGZhbHNlKSk7Cit9CisK
K3ZvaWQgSW1hZ2U5OjpzZXRNYW5hZ2VkU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1
YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2ZWwpCit7CisgICAgVGV4dHVyZVN0b3JhZ2U5
X0N1YmUgKnN0b3JhZ2U5ID0gVGV4dHVyZVN0b3JhZ2U5X0N1YmU6Om1ha2VUZXh0dXJlU3RvcmFn
ZTlfQ3ViZShzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CisgICAgc2V0TWFuYWdlZFN1
cmZhY2Uoc3RvcmFnZTktPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWCArIGZhY2UsIGxldmVsLCBmYWxzZSkpOworfQorCit2b2lkIEltYWdlOTo6c2V0TWFu
YWdlZFN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UpCit7CisgICAgRDNEU1VSRkFD
RV9ERVNDIGRlc2M7CisgICAgc3VyZmFjZS0+R2V0RGVzYygmZGVzYyk7CisgICAgQVNTRVJUKGRl
c2MuUG9vbCA9PSBEM0RQT09MX01BTkFHRUQpOworCisgICAgaWYgKChHTHNpemVpKWRlc2MuV2lk
dGggPT0gbVdpZHRoICYmIChHTHNpemVpKWRlc2MuSGVpZ2h0ID09IG1IZWlnaHQpCisgICAgewor
ICAgICAgICBpZiAobVN1cmZhY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvcHlMb2NrYWJs
ZVN1cmZhY2VzKHN1cmZhY2UsIG1TdXJmYWNlKTsKKyAgICAgICAgICAgIG1TdXJmYWNlLT5SZWxl
YXNlKCk7CisgICAgICAgIH0KKworICAgICAgICBtU3VyZmFjZSA9IHN1cmZhY2U7CisgICAgICAg
IG1EM0RQb29sID0gZGVzYy5Qb29sOworICAgIH0KK30KKworYm9vbCBJbWFnZTk6OnVwZGF0ZVN1
cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkK
K3sKKyAgICBBU1NFUlQoZ2V0U3VyZmFjZSgpICE9IE5VTEwpOworICAgIFRleHR1cmVTdG9yYWdl
OV8yRCAqc3RvcmFnZTkgPSBUZXh0dXJlU3RvcmFnZTlfMkQ6Om1ha2VUZXh0dXJlU3RvcmFnZTlf
MkQoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAgIHJldHVybiB1cGRhdGVTdXJm
YWNlKHN0b3JhZ2U5LT5nZXRTdXJmYWNlTGV2ZWwobGV2ZWwsIHRydWUpLCB4b2Zmc2V0LCB5b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0KTsKK30KKworYm9vbCBJbWFnZTk6OnVwZGF0ZVN1cmZhY2UoVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCkKK3sKKyAgICBBU1NFUlQoZ2V0U3VyZmFjZSgpICE9IE5VTEwpOworICAgIFRleHR1cmVTdG9y
YWdlOV9DdWJlICpzdG9yYWdlOSA9IFRleHR1cmVTdG9yYWdlOV9DdWJlOjptYWtlVGV4dHVyZVN0
b3JhZ2U5X0N1YmUoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAgIHJldHVybiB1
cGRhdGVTdXJmYWNlKHN0b3JhZ2U5LT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCwgdHJ1ZSksIHhvZmZzZXQsIHlvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQpOworfQorCitib29sIEltYWdlOTo6dXBkYXRlU3VyZmFjZShJRGlyZWN0M0RT
dXJmYWNlOSAqZGVzdFN1cmZhY2UsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIGlmICghZGVzdFN1cmZhY2UpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2VTdXJmYWNl
ID0gZ2V0U3VyZmFjZSgpOworCisgICAgaWYgKHNvdXJjZVN1cmZhY2UgJiYgc291cmNlU3VyZmFj
ZSAhPSBkZXN0U3VyZmFjZSkKKyAgICB7CisgICAgICAgIFJFQ1QgcmVjdDsKKyAgICAgICAgcmVj
dC5sZWZ0ID0geG9mZnNldDsKKyAgICAgICAgcmVjdC50b3AgPSB5b2Zmc2V0OworICAgICAgICBy
ZWN0LnJpZ2h0ID0geG9mZnNldCArIHdpZHRoOworICAgICAgICByZWN0LmJvdHRvbSA9IHlvZmZz
ZXQgKyBoZWlnaHQ7CisKKyAgICAgICAgUE9JTlQgcG9pbnQgPSB7cmVjdC5sZWZ0LCByZWN0LnRv
cH07CisKKyAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXRE
ZXZpY2UoKTsKKworICAgICAgICBpZiAobUQzRFBvb2wgPT0gRDNEUE9PTF9NQU5BR0VEKQorICAg
ICAgICB7CisgICAgICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKKyAgICAgICAgICAgIHNv
dXJjZVN1cmZhY2UtPkdldERlc2MoJmRlc2MpOworCisgICAgICAgICAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqc3VyZiA9IDA7CisgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3Jl
YXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBkZXNjLkZv
cm1hdCwgRDNEUE9PTF9TWVNURU1NRU0sICZzdXJmLCBOVUxMKTsKKworICAgICAgICAgICAgaWYg
KFNVQ0NFRURFRChyZXN1bHQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvcHlM
b2NrYWJsZVN1cmZhY2VzKHN1cmYsIHNvdXJjZVN1cmZhY2UpOworICAgICAgICAgICAgICAgIHJl
c3VsdCA9IGRldmljZS0+VXBkYXRlU3VyZmFjZShzdXJmLCAmcmVjdCwgZGVzdFN1cmZhY2UsICZw
b2ludCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAg
ICAgICAgICAgICBzdXJmLT5SZWxlYXNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBVcGRhdGVTdXJmYWNlOiBzb3Vy
Y2UgbXVzdCBiZSBTWVNURU1NRU0sIGRlc3QgbXVzdCBiZSBERUZBVUxUIHBvb2xzIAorICAgICAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPlVwZGF0ZVN1cmZhY2Uoc291cmNlU3VyZmFj
ZSwgJnJlY3QsIGRlc3RTdXJmYWNlLCAmcG9pbnQpOworICAgICAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChyZXN1bHQpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGRlc3RTdXJmYWNlLT5SZWxl
YXNlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIFN0b3JlIHRoZSBwaXhlbCByZWN0YW5n
bGUgZGVzaWduYXRlZCBieSB4b2Zmc2V0LHlvZmZzZXQsd2lkdGgsaGVpZ2h0IHdpdGggcGl4ZWxz
IHN0b3JlZCBhcyBmb3JtYXQvdHlwZSBhdCBpbnB1dAorLy8gaW50byB0aGUgdGFyZ2V0IHBpeGVs
IHJlY3RhbmdsZS4KK3ZvaWQgSW1hZ2U5Ojpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAg
ICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0KQoreworICAgIFJF
Q1QgbG9ja1JlY3QgPQorICAgIHsKKyAgICAgICAgeG9mZnNldCwgeW9mZnNldCwKKyAgICAgICAg
eG9mZnNldCArIHdpZHRoLCB5b2Zmc2V0ICsgaGVpZ2h0CisgICAgfTsKKworICAgIEQzRExPQ0tF
RF9SRUNUIGxvY2tlZDsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGxvY2soJmxvY2tlZCwgJmxvY2tS
ZWN0KTsKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisKKyAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSBnbDo6Q29tcHV0ZVBpdGNoKHdpZHRo
LCBtSW50ZXJuYWxGb3JtYXQsIHVucGFja0FsaWdubWVudCk7CisKKyAgICBzd2l0Y2ggKG1JbnRl
cm5hbEZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEdMX0FMUEhBOF9FWFQ6CisgICAgICAgIGlm
IChnbDo6c3VwcG9ydHNTU0UyKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvYWRBbHBoYURh
dGFUb0JHUkFTU0UyKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0
Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBsb2FkQWxwaGFEYXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRThfRVhUOgorICAgICAgICBsb2FkTHVtaW5h
bmNlRGF0YVRvTmF0aXZlT3JCR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBs
b2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cywgZ2V0RDNERm9ybWF0KCkgPT0gRDNERk1UX0w4KTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0FMUEhBMzJGX0VYVDoKKyAgICAgICAgbG9h
ZEFscGhhRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBs
b2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0UzMkZfRVhUOgorICAgICAgICBsb2FkTHVtaW5hbmNlRmxvYXREYXRhVG9SR0JB
KHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5w
Qml0cyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9BTFBIQTE2Rl9FWFQ6CisgICAg
ICAgIGxvYWRBbHBoYUhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6CisgICAgICAgIGxvYWRMdW1pbmFuY2VIYWxm
RmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQu
UGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MVU1J
TkFOQ0U4X0FMUEhBOF9FWFQ6CisgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYURhdGFUb05hdGl2
ZU9yQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBs
b2NrZWQucEJpdHMsIGdldEQzREZvcm1hdCgpID09IEQzREZNVF9BOEw4KTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQ6CisgICAgICAgIGxvYWRM
dW1pbmFuY2VBbHBoYUZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOworICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVDoKKyAgICAgICAgbG9hZEx1bWluYW5jZUFs
cGhhSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwg
bG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfUkdCOF9PRVM6CisgICAgICAgIGxvYWRSR0JVQnl0ZURhdGFUb0JHUlgod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JHQjU2NToKKyAgICAgICAgbG9hZFJHQjU2NURhdGFU
b0JHUkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9j
a2VkLnBCaXRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JHQkE4X09FUzoKKyAg
ICAgICAgaWYgKGdsOjpzdXBwb3J0c1NTRTIoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbG9h
ZFJHQkFVQnl0ZURhdGFUb0JHUkFTU0UyKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0
LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICBsb2FkUkdCQVVCeXRlRGF0YVRvQkdSQSh3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9SR0JBNDoKKyAgICAgICAgbG9h
ZFJHQkE0NDQ0RGF0YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9j
a2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
UkdCNV9BMToKKyAgICAgICAgbG9hZFJHQkE1NTUxRGF0YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBp
bnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOworICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfQkdSQThfRVhUOgorICAgICAgICBsb2FkQkdSQURhdGFUb0JH
UkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2Vk
LnBCaXRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAvLyBmbG9hdCB0ZXh0dXJlcyBhcmUgY29u
dmVydGVkIHRvIFJHQkEsIG5vdCBCR1JBLCBhcyB0aGV5J3JlIHN0b3JlZCB0aGF0IHdheSBpbiBE
M0QKKyAgICAgIGNhc2UgR0xfUkdCMzJGX0VYVDoKKyAgICAgICAgbG9hZFJHQkZsb2F0RGF0YVRv
UkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2Nr
ZWQucEJpdHMpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUkdCMTZGX0VYVDoKKyAg
ICAgICAgbG9hZFJHQkhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX1JHQkEzMkZfRVhUOgorICAgICAgICBsb2FkUkdCQUZsb2F0RGF0YVRvUkdC
QSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQu
cEJpdHMpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUkdCQTE2Rl9FWFQ6CisgICAg
ICAgIGxvYWRSR0JBSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNo
LCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOworICAgICAgICBicmVhazsKKyAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IAorICAgIH0KKworICAgIHVubG9jaygpOworfQor
Cit2b2lkIEltYWdlOTo6bG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dCkKK3sKKyAgICBBU1NFUlQoeG9mZnNldCAl
IDQgPT0gMCk7CisgICAgQVNTRVJUKHlvZmZzZXQgJSA0ID09IDApOworCisgICAgUkVDVCBsb2Nr
UmVjdCA9IHsKKyAgICAgICAgeG9mZnNldCwgeW9mZnNldCwKKyAgICAgICAgeG9mZnNldCArIHdp
ZHRoLCB5b2Zmc2V0ICsgaGVpZ2h0CisgICAgfTsKKworICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tl
ZDsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGxvY2soJmxvY2tlZCwgJmxvY2tSZWN0KTsKKyAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
R0xzaXplaSBpbnB1dFNpemUgPSBnbDo6Q29tcHV0ZUNvbXByZXNzZWRTaXplKHdpZHRoLCBoZWln
aHQsIG1JbnRlcm5hbEZvcm1hdCk7CisgICAgR0xzaXplaSBpbnB1dFBpdGNoID0gZ2w6OkNvbXB1
dGVDb21wcmVzc2VkUGl0Y2god2lkdGgsIG1JbnRlcm5hbEZvcm1hdCk7CisgICAgaW50IHJvd3Mg
PSBpbnB1dFNpemUgLyBpbnB1dFBpdGNoOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsg
KytpKQorICAgIHsKKyAgICAgICAgbWVtY3B5KCh2b2lkKikoKEJZVEUqKWxvY2tlZC5wQml0cyAr
IGkgKiBsb2NrZWQuUGl0Y2gpLCAodm9pZCopKChCWVRFKilpbnB1dCArIGkgKiBpbnB1dFBpdGNo
KSwgaW5wdXRQaXRjaCk7CisgICAgfQorCisgICAgdW5sb2NrKCk7Cit9CisKKy8vIFRoaXMgaW1w
bGVtZW50cyBnbENvcHlUZXhbU3ViXUltYWdlMkQgZm9yIG5vbi1yZW5kZXJhYmxlIGludGVybmFs
IHRleHR1cmUgZm9ybWF0cyBhbmQgaW5jb21wbGV0ZSB0ZXh0dXJlcwordm9pZCBJbWFnZTk6OmNv
cHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAqc291cmNlKQoreworICAg
IFJlbmRlclRhcmdldDkgKnJlbmRlclRhcmdldCA9IE5VTEw7CisgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKnN1cmZhY2UgPSBOVUxMOworICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0g
c291cmNlLT5nZXRDb2xvcmJ1ZmZlcigwKTsKKworICAgIGlmIChjb2xvcmJ1ZmZlcikKKyAgICB7
CisgICAgICAgIHJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDk6Om1ha2VSZW5kZXJUYXJnZXQ5
KGNvbG9yYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSk7CisgICAgfQorICAgIAorICAgIGlmIChy
ZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBzdXJmYWNlID0gcmVuZGVyVGFyZ2V0LT5nZXRT
dXJmYWNlKCk7CisgICAgfQorCisgICAgaWYgKCFzdXJmYWNlKQorICAgIHsKKyAgICAgICAgRVJS
KCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQuIik7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorCisgICAgSURpcmVjdDNERGV2
aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpyZW5kZXJUYXJnZXREYXRhID0gTlVMTDsKKyAgICBEM0RTVVJGQUNFX0RFU0MgZGVz
Y3JpcHRpb247CisgICAgc3VyZmFjZS0+R2V0RGVzYygmZGVzY3JpcHRpb24pOworICAgIAorICAg
IEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVPZmZzY3JlZW5QbGFpblN1cmZhY2UoZGVz
Y3JpcHRpb24uV2lkdGgsIGRlc2NyaXB0aW9uLkhlaWdodCwgZGVzY3JpcHRpb24uRm9ybWF0LCBE
M0RQT09MX1NZU1RFTU1FTSwgJnJlbmRlclRhcmdldERhdGEsIE5VTEwpOworCisgICAgaWYgKEZB
SUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG1hdGNo
aW5nIGRlc3RpbmF0aW9uIHN1cmZhY2UuIik7CisgICAgICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsK
KyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisKKyAg
ICByZXN1bHQgPSBkZXZpY2UtPkdldFJlbmRlclRhcmdldERhdGEoc3VyZmFjZSwgcmVuZGVyVGFy
Z2V0RGF0YSk7CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBFUlIo
IkdldFJlbmRlclRhcmdldERhdGEgdW5leHBlY3RlZGx5IGZhaWxlZC4iKTsKKyAgICAgICAgcmVu
ZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgpOworICAgICAgICBzdXJmYWNlLT5SZWxlYXNlKCk7Cisg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorCisgICAg
UkVDVCBzb3VyY2VSZWN0ID0ge3gsIHksIHggKyB3aWR0aCwgeSArIGhlaWdodH07CisgICAgUkVD
VCBkZXN0UmVjdCA9IHt4b2Zmc2V0LCB5b2Zmc2V0LCB4b2Zmc2V0ICsgd2lkdGgsIHlvZmZzZXQg
KyBoZWlnaHR9OworCisgICAgRDNETE9DS0VEX1JFQ1Qgc291cmNlTG9jayA9IHswfTsKKyAgICBy
ZXN1bHQgPSByZW5kZXJUYXJnZXREYXRhLT5Mb2NrUmVjdCgmc291cmNlTG9jaywgJnNvdXJjZVJl
Y3QsIDApOworCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJG
YWlsZWQgdG8gbG9jayB0aGUgc291cmNlIHN1cmZhY2UgKHJlY3RhbmdsZSBtaWdodCBiZSBpbnZh
bGlkKS4iKTsKKyAgICAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgpOworICAgICAgICBz
dXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorCisgICAgRDNETE9DS0VEX1JFQ1QgZGVzdExvY2sgPSB7MH07CisgICAg
cmVzdWx0ID0gbG9jaygmZGVzdExvY2ssICZkZXN0UmVjdCk7CisgICAgCisgICAgaWYgKEZBSUxF
RChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gbG9jayB0aGUgZGVzdGlu
YXRpb24gc3VyZmFjZSAocmVjdGFuZ2xlIG1pZ2h0IGJlIGludmFsaWQpLiIpOworICAgICAgICBy
ZW5kZXJUYXJnZXREYXRhLT5VbmxvY2tSZWN0KCk7CisgICAgICAgIHJlbmRlclRhcmdldERhdGEt
PlJlbGVhc2UoKTsKKyAgICAgICAgc3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KKworICAgIGlmIChkZXN0TG9jay5w
Qml0cyAmJiBzb3VyY2VMb2NrLnBCaXRzKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciAq
c291cmNlID0gKHVuc2lnbmVkIGNoYXIqKXNvdXJjZUxvY2sucEJpdHM7CisgICAgICAgIHVuc2ln
bmVkIGNoYXIgKmRlc3QgPSAodW5zaWduZWQgY2hhciopZGVzdExvY2sucEJpdHM7CisKKyAgICAg
ICAgc3dpdGNoIChkZXNjcmlwdGlvbi5Gb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNl
IEQzREZNVF9YOFI4RzhCODoKKyAgICAgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKKyAgICAg
ICAgICAgIHN3aXRjaChnZXREM0RGb3JtYXQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6CisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhH
OEI4OgorICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2Us
IDQgKiB3aWR0aCk7CisKKyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2su
UGl0Y2g7CisgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEQzREZNVF9MODoKKyAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5
KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAw
OyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgZGVzdFt4XSA9IHNvdXJjZVt4ICogNCArIDJdOworICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7Cisg
ICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEQzREZNVF9B
OEw4OgorICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3
aWR0aDsgeCsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0W3ggKiAyICsgMF0gPSBzb3VyY2VbeCAqIDQgKyAyXTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RbeCAqIDIgKyAxXSA9IHNvdXJjZVt4ICogNCArIDNdOworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0
Y2g7CisgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6CisgICAgICAgICAgICBz
d2l0Y2goZ2V0RDNERm9ybWF0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2Ug
RDNERk1UX1g4UjhHOEI4OgorICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWln
aHQ7IHkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvcihpbnQg
eCA9IDA7IHggPCB3aWR0aDsgeCsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2IgPSAoKHVuc2lnbmVkIHNob3J0Kilzb3Vy
Y2UpW3hdOworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZWQgPSAocmdi
ICYgMHhGODAwKSA+PiA4OworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBn
cmVlbiA9IChyZ2IgJiAweDA3RTApID4+IDM7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBjaGFyIGJsdWUgPSAocmdiICYgMHgwMDFGKSA8PCAzOworICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdFt4ICsgMF0gPSBibHVlIHwgKGJsdWUgPj4gNSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0W3ggKyAxXSA9IGdyZWVuIHwgKGdyZWVuID4+IDYpOworICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdFt4ICsgMl0gPSByZWQgfCAocmVkID4+IDUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdFt4ICsgM10gPSAweEZGOworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7CisgICAgICAg
ICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEQzREZNVF9MODoKKyAg
ICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgr
KykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgY2hhciByZWQgPSBzb3VyY2VbeCAqIDIgKyAxXSAmIDB4Rjg7CisgICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0W3hdID0gcmVkIHwgKHJlZCA+PiA1KTsKKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOworICAg
ICAgICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6CisgICAgICAgICAgICBzd2l0Y2go
Z2V0RDNERm9ybWF0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRDNERk1U
X1g4UjhHOEI4OgorICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkr
KykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7
IHggPCB3aWR0aDsgeCsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBzaG9ydCBhcmdiID0gKCh1bnNpZ25lZCBzaG9ydCopc291cmNlKVt4
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVkID0gKGFyZ2IgJiAw
eDdDMDApID4+IDc7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGdyZWVu
ID0gKGFyZ2IgJiAweDAzRTApID4+IDI7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBjaGFyIGJsdWUgPSAoYXJnYiAmIDB4MDAxRikgPDwgMzsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc3RbeCArIDBdID0gYmx1ZSB8IChibHVlID4+IDUpOworICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdFt4ICsgMV0gPSBncmVlbiB8IChncmVlbiA+PiA1KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RbeCArIDJdID0gcmVkIHwgKHJlZCA+PiA1KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RbeCArIDNdID0gMHhGRjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOworICAgICAgICAg
ICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6
CisgICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRo
OyB4KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIHNob3J0IGFyZ2IgPSAoKHVuc2lnbmVkIHNob3J0Kilzb3VyY2UpW3hdOworICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZWQgPSAoYXJnYiAmIDB4N0MwMCkgPj4g
NzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZ3JlZW4gPSAoYXJnYiAm
IDB4MDNFMCkgPj4gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYmx1
ZSA9IChhcmdiICYgMHgwMDFGKSA8PCAzOworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgY2hhciBhbHBoYSA9IChzaWduZWQgc2hvcnQpYXJnYiA+PiAxNTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RbeCArIDBdID0gYmx1ZSB8IChibHVlID4+IDUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdFt4ICsgMV0gPSBncmVlbiB8IChncmVlbiA+PiA1KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RbeCArIDJdID0gcmVkIHwgKHJlZCA+PiA1KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RbeCArIDNdID0gYWxwaGE7CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5QaXRjaDsKKyAg
ICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0w4
OgorICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0
aDsgeCsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBjaGFyIHJlZCA9IHNvdXJjZVt4ICogMiArIDFdICYgMHg3QzsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3RbeF0gPSAocmVkIDw8IDEpIHwgKHJlZCA+PiA0KTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2Nr
LlBpdGNoOworICAgICAgICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBEM0RGTVRfQThMODoKKyAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0
OyB5KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHgg
PSAwOyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZWQgPSBzb3VyY2VbeCAqIDIgKyAxXSAmIDB4N0M7
CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKiAyICsgMF0gPSAocmVkIDw8IDEpIHwg
KHJlZCA+PiA0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCAqIDIgKyAxXSA9IChz
aWduZWQgY2hhcilzb3VyY2VbeCAqIDIgKyAxXSA+PiA3OworICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7CisgICAg
ICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHVubG9jaygpOworICAgIHJlbmRlclRhcmdldERhdGEtPlVubG9j
a1JlY3QoKTsKKworICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsKKyAgICBzdXJmYWNl
LT5SZWxlYXNlKCk7CisKKyAgICBtRGlydHkgPSB0cnVlOworfQorCit9ClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ltYWdlOS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ltYWdlOS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJmYmJjYTMx
MjQzZDJhYzQ3ZDU3NDhkNWExYzdmYWY3ZDVjYTgyMDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW1hZ2U5LmgK
QEAgLTAsMCArMSw3OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gSW1hZ2U5Lmg6IERlZmlu
ZXMgdGhlIHJ4OjpJbWFnZTkgY2xhc3MsIHdoaWNoIGFjdHMgYXMgdGhlIGludGVyZmFjZSB0bwor
Ly8gdGhlIGFjdHVhbCB1bmRlcmx5aW5nIHN1cmZhY2VzIG9mIGEgVGV4dHVyZS4KKworI2lmbmRl
ZiBMSUJHTEVTVjJfUkVOREVSRVJfSU1BR0U5X0hfCisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJF
Ul9JTUFHRTlfSF8KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZS5oIgorI2lu
Y2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCituYW1lc3BhY2UgZ2wKK3sKK2NsYXNzIEZyYW1lYnVm
ZmVyOworfQorCituYW1lc3BhY2UgcngKK3sKK2NsYXNzIFJlbmRlcmVyOworY2xhc3MgUmVuZGVy
ZXI5OworY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRDsKK2NsYXNzIFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlQ3ViZTsKKworY2xhc3MgSW1hZ2U5IDogcHVibGljIEltYWdlCit7CisgIHB1
YmxpYzoKKyAgICBJbWFnZTkoKTsKKyAgICB+SW1hZ2U5KCk7CisKKyAgICBzdGF0aWMgSW1hZ2U5
ICptYWtlSW1hZ2U5KEltYWdlICppbWcpOworCisgICAgc3RhdGljIHZvaWQgZ2VuZXJhdGVNaXBt
YXAoSW1hZ2U5ICpkZXN0LCBJbWFnZTkgKnNvdXJjZSk7CisgICAgc3RhdGljIHZvaWQgZ2VuZXJh
dGVNaXAoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJmYWNlLCBJRGlyZWN0M0RTdXJmYWNlOSAq
c291cmNlU3VyZmFjZSk7CisgICAgc3RhdGljIHZvaWQgY29weUxvY2thYmxlU3VyZmFjZXMoSURp
cmVjdDNEU3VyZmFjZTkgKmRlc3QsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UpOworCisgICAg
dmlydHVhbCBib29sIHJlZGVmaW5lKFJlbmRlcmVyICpyZW5kZXJlciwgR0xpbnQgaW50ZXJuYWxm
b3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBib29sIGZvcmNlUmVsZWFzZSk7
CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJhYmxlRm9ybWF0KCkgY29uc3Q7CisgICAgRDNE
Rk9STUFUIGdldEQzREZvcm1hdCgpIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIGlzRGlydHko
KSBjb25zdCB7cmV0dXJuIG1TdXJmYWNlICYmIG1EaXJ0eTt9CisgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKmdldFN1cmZhY2UoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRNYW5hZ2VkU3VyZmFjZShU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwpOworICAgIHZpcnR1
YWwgdm9pZCBzZXRNYW5hZ2VkU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0
b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2ZWwpOworICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVTdXJm
YWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwor
ICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3Vi
ZSAqc3RvcmFnZSwgaW50IGZhY2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCisgICAgdmlydHVhbCB2b2lk
IGxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBj
b25zdCB2b2lkICppbnB1dCk7CisgICAgdmlydHVhbCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0
KTsKKworICAgIHZpcnR1YWwgdm9pZCBjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBnbDo6RnJh
bWVidWZmZXIgKnNvdXJjZSk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9B
U1NJR04oSW1hZ2U5KTsKKworICAgIHZvaWQgY3JlYXRlU3VyZmFjZSgpOworICAgIHZvaWQgc2V0
TWFuYWdlZFN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UpOworICAgIGJvb2wgdXBk
YXRlU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCisgICAgSFJFU1VMVCBs
b2NrKEQzRExPQ0tFRF9SRUNUICpsb2NrZWRSZWN0LCBjb25zdCBSRUNUICpyZWN0KTsKKyAgICB2
b2lkIHVubG9jaygpOworICAgIAorICAgIFJlbmRlcmVyOSAqbVJlbmRlcmVyOworCisgICAgRDNE
UE9PTCBtRDNEUG9vbDsgICAvLyBjYW4gb25seSBiZSBEM0RQT09MX1NZU1RFTU1FTSBvciBEM0RQ
T09MX01BTkFHRUQgc2luY2UgaXQgbmVlZHMgdG8gYmUgbG9ja2FibGUuCisgICAgRDNERk9STUFU
IG1EM0RGb3JtYXQ7CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVN1cmZhY2U7Cit9OworfQor
CisjZW5kaWYgICAvLyBMSUJHTEVTVjJfUkVOREVSRVJfSU1BR0U5X0hfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW5kZXhC
dWZmZXI5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9JbmRleEJ1ZmZlcjkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdjYjVkMTNhMThiNzQ4MDBjMGNh
NDNmNzhiZDgxNWU5NDk5OWQ0MWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW5kZXhCdWZmZXI5LmNwcApAQCAt
MCwwICsxLDIwNyBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisvLyBJbmRleGZmZXI5LmNwcDogRGVmaW5lcyB0aGUgRDNEOSBJbmRleEJ1ZmZlciBpbXBs
ZW1lbnRhdGlvbi4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0luZGV4QnVm
ZmVyOS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oIgor
CituYW1lc3BhY2UgcngKK3sKKworSW5kZXhCdWZmZXI5OjpJbmRleEJ1ZmZlcjkoUmVuZGVyZXI5
ICpjb25zdCByZW5kZXJlcikgOiBtUmVuZGVyZXIocmVuZGVyZXIpCit7CisgICAgbUluZGV4QnVm
ZmVyID0gTlVMTDsKKyAgICBtQnVmZmVyU2l6ZSA9IDA7CisgICAgbUluZGV4VHlwZSA9IDA7Cisg
ICAgbUR5bmFtaWMgPSBmYWxzZTsKK30KKworSW5kZXhCdWZmZXI5Ojp+SW5kZXhCdWZmZXI5KCkK
K3sKKyAgICBpZiAobUluZGV4QnVmZmVyKQorICAgIHsKKyAgICAgICAgbUluZGV4QnVmZmVyLT5S
ZWxlYXNlKCk7CisgICAgICAgIG1JbmRleEJ1ZmZlciA9IE5VTEw7CisgICAgfQorfQorCitib29s
IEluZGV4QnVmZmVyOTo6aW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSwgR0xlbnVt
IGluZGV4VHlwZSwgYm9vbCBkeW5hbWljKQoreworICAgIGlmIChtSW5kZXhCdWZmZXIpCisgICAg
eworICAgICAgICBtSW5kZXhCdWZmZXItPlJlbGVhc2UoKTsKKyAgICAgICAgbUluZGV4QnVmZmVy
ID0gTlVMTDsKKyAgICB9CisKKyAgICB1cGRhdGVTZXJpYWwoKTsKKworICAgIGlmIChidWZmZXJT
aXplID4gMCkKKyAgICB7CisgICAgICAgIEQzREZPUk1BVCBmb3JtYXQ7CisgICAgICAgIGlmIChp
bmRleFR5cGUgPT0gR0xfVU5TSUdORURfU0hPUlQgfHwgaW5kZXhUeXBlID09IEdMX1VOU0lHTkVE
X0JZVEUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvcm1hdCA9IEQzREZNVF9JTkRFWDE2Owor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGluZGV4VHlwZSA9PSBHTF9VTlNJR05FRF9JTlQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtUmVuZGVyZXItPmdldDMyQml0SW5kZXhTdXBw
b3J0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9ybWF0ID0gRDNERk1UX0lO
REVYMzI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgRVJSKCJBdHRlbXB0ZWQgdG8gY3JlYXRlIGEgMzItYml0IGluZGV4IGJ1
ZmZlciBidXQgcmVuZGVyZXIgZG9lcyBub3Qgc3VwcG9ydCAzMi1iaXQgaW5kaWNlcy4iKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkludmFsaWQgaW5kZXggdHlw
ZSAldS4iLCBpbmRleFR5cGUpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisKKyAgICAgICAgRFdPUkQgdXNhZ2VGbGFncyA9IEQzRFVTQUdFX1dSSVRFT05MWTsKKyAgICAg
ICAgaWYgKGR5bmFtaWMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVzYWdlRmxhZ3MgfD0gRDNE
VVNBR0VfRFlOQU1JQzsKKyAgICAgICAgfQorCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVJl
bmRlcmVyLT5jcmVhdGVJbmRleEJ1ZmZlcihidWZmZXJTaXplLCB1c2FnZUZsYWdzLCBmb3JtYXQs
ICZtSW5kZXhCdWZmZXIpOworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIGNyZWF0ZSBhbiBpbmRleCBidWZmZXIgb2Ygc2l6
ZSAldSwgcmVzdWx0OiAweCUwOHguIiwgbUJ1ZmZlclNpemUsIHJlc3VsdCk7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtQnVmZmVyU2l6ZSA9IGJ1
ZmZlclNpemU7CisgICAgbUluZGV4VHlwZSA9IGluZGV4VHlwZTsKKyAgICBtRHluYW1pYyA9IGR5
bmFtaWM7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworSW5kZXhCdWZmZXI5ICpJbmRleEJ1ZmZl
cjk6Om1ha2VJbmRleEJ1ZmZlcjkoSW5kZXhCdWZmZXIgKmluZGV4QnVmZmVyKQoreworICAgIEFT
U0VSVChIQVNfRFlOQU1JQ19UWVBFKEluZGV4QnVmZmVyOSosIGluZGV4QnVmZmVyKSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEluZGV4QnVmZmVyOSo+KGluZGV4QnVmZmVyKTsKK30KKworYm9v
bCBJbmRleEJ1ZmZlcjk6Om1hcEJ1ZmZlcih1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBp
bnQgc2l6ZSwgdm9pZCoqIG91dE1hcHBlZE1lbW9yeSkKK3sKKyAgICBpZiAobUluZGV4QnVmZmVy
KQorICAgIHsKKyAgICAgICAgRFdPUkQgbG9ja0ZsYWdzID0gbUR5bmFtaWMgPyBEM0RMT0NLX05P
T1ZFUldSSVRFIDogMDsKKworICAgICAgICB2b2lkICptYXBQdHIgPSBOVUxMOworICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IG1JbmRleEJ1ZmZlci0+TG9jayhvZmZzZXQsIHNpemUsICZtYXBQdHIs
IGxvY2tGbGFncyk7CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAg
ICAgICAgICAgRVJSKCJJbmRleCBidWZmZXIgbG9jayBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgi
LCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAg
ICAgKm91dE1hcHBlZE1lbW9yeSA9IG1hcFB0cjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEVSUigiSW5kZXggYnVmZmVyIG5vdCBpbml0aWFs
aXplZC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJbmRleEJ1
ZmZlcjk6OnVubWFwQnVmZmVyKCkKK3sKKyAgICBpZiAobUluZGV4QnVmZmVyKQorICAgIHsKKyAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBtSW5kZXhCdWZmZXItPlVubG9jaygpOworICAgICAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiSW5kZXggYnVm
ZmVyIHVubG9jayBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgiLCByZXN1bHQpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEVSUigiSW5kZXggYnVmZmVyIG5vdCBpbml0aWFs
aXplZC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworR0xlbnVtIEluZGV4
QnVmZmVyOTo6Z2V0SW5kZXhUeXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUluZGV4VHlwZTsK
K30KKwordW5zaWduZWQgaW50IEluZGV4QnVmZmVyOTo6Z2V0QnVmZmVyU2l6ZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1CdWZmZXJTaXplOworfQorCitib29sIEluZGV4QnVmZmVyOTo6c2V0U2l6
ZSh1bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSwgR0xlbnVtIGluZGV4VHlwZSkKK3sKKyAgICBpZiAo
YnVmZmVyU2l6ZSA+IG1CdWZmZXJTaXplIHx8IGluZGV4VHlwZSAhPSBtSW5kZXhUeXBlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGluaXRpYWxpemUoYnVmZmVyU2l6ZSwgaW5kZXhUeXBlLCBtRHlu
YW1pYyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KK30KKworYm9vbCBJbmRleEJ1ZmZlcjk6OmRpc2NhcmQoKQoreworICAgIGlmIChtSW5kZXhC
dWZmZXIpCisgICAgeworICAgICAgICB2b2lkICpkdW1teTsKKyAgICAgICAgSFJFU1VMVCByZXN1
bHQ7CisKKyAgICAgICAgcmVzdWx0ID0gbUluZGV4QnVmZmVyLT5Mb2NrKDAsIDEsICZkdW1teSwg
RDNETE9DS19ESVNDQVJEKTsKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7
CisgICAgICAgICAgICBFUlIoIkRpc2NhcmQgbG9jayBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgi
LCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAg
ICAgcmVzdWx0ID0gbUluZGV4QnVmZmVyLT5VbmxvY2soKTsKKyAgICAgICAgaWYgKEZBSUxFRChy
ZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkRpc2NhcmQgdW5sb2NrIGZhaWxl
ZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgRVJSKCJJbmRleCBidWZmZXIgbm90IGluaXRpYWxpemVkLiIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitEM0RGT1JNQVQgSW5kZXhCdWZmZXI5OjpnZXRJ
bmRleEZvcm1hdCgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtSW5kZXhUeXBlKQorICAgIHsKKyAg
ICAgIGNhc2UgR0xfVU5TSUdORURfQllURTogICAgcmV0dXJuIEQzREZNVF9JTkRFWDE2OworICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDogICByZXR1cm4gRDNERk1UX0lOREVYMTY7CisgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0lOVDogICAgIHJldHVybiBEM0RGTVRfSU5ERVgzMjsKKyAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgcmV0dXJuIEQzREZNVF9VTktOT1dOOworICAgIH0K
K30KKworSURpcmVjdDNESW5kZXhCdWZmZXI5ICogSW5kZXhCdWZmZXI5OjpnZXRCdWZmZXIoKSBj
b25zdAoreworICAgIHJldHVybiBtSW5kZXhCdWZmZXI7Cit9CisKK30KXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvSW5kZXhCdWZmZXI5LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW5kZXhCdWZmZXI5LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNjgwMTg2NzUzMjQ1NTczYjM3YTg4ZDlhNWRkYWY1YzQwNzRlMGUyNwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
OS9JbmRleEJ1ZmZlcjkuaApAQCAtMCwwICsxLDUzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisv
LyBJbmRleGZmZXI5Lmg6IERlZmluZXMgdGhlIEQzRDkgSW5kZXhCdWZmZXIgaW1wbGVtZW50YXRp
b24uCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0lOREVYQlVGRkVSOV9IXworI2RlZmlu
ZSBMSUJHTEVTVjJfUkVOREVSRVJfSU5ERVhCVUZGRVI5X0hfCisKKyNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvSW5kZXhCdWZmZXIuaCIKKworbmFtZXNwYWNlIHJ4Cit7CitjbGFzcyBSZW5k
ZXJlcjk7CisKK2NsYXNzIEluZGV4QnVmZmVyOSA6IHB1YmxpYyBJbmRleEJ1ZmZlcgoreworICBw
dWJsaWM6CisgICAgZXhwbGljaXQgSW5kZXhCdWZmZXI5KFJlbmRlcmVyOSAqY29uc3QgcmVuZGVy
ZXIpOworICAgIHZpcnR1YWwgfkluZGV4QnVmZmVyOSgpOworCisgICAgdmlydHVhbCBib29sIGlu
aXRpYWxpemUodW5zaWduZWQgaW50IGJ1ZmZlclNpemUsIEdMZW51bSBpbmRleFR5cGUsIGJvb2wg
ZHluYW1pYyk7CisKKyAgICBzdGF0aWMgSW5kZXhCdWZmZXI5ICptYWtlSW5kZXhCdWZmZXI5KElu
ZGV4QnVmZmVyICppbmRleEJ1ZmZlcik7CisKKyAgICB2aXJ0dWFsIGJvb2wgbWFwQnVmZmVyKHVu
c2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBzaXplLCB2b2lkKiogb3V0TWFwcGVkTWVt
b3J5KTsKKyAgICB2aXJ0dWFsIGJvb2wgdW5tYXBCdWZmZXIoKTsKKworICAgIHZpcnR1YWwgR0xl
bnVtIGdldEluZGV4VHlwZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldEJ1
ZmZlclNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0U2l6ZSh1bnNpZ25lZCBpbnQg
YnVmZmVyU2l6ZSwgR0xlbnVtIGluZGV4VHlwZSk7CisKKyAgICB2aXJ0dWFsIGJvb2wgZGlzY2Fy
ZCgpOworCisgICAgRDNERk9STUFUIGdldEluZGV4Rm9ybWF0KCkgY29uc3Q7CisgICAgSURpcmVj
dDNESW5kZXhCdWZmZXI5ICpnZXRCdWZmZXIoKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihJbmRleEJ1ZmZlcjkpOworCisgICAgcng6OlJlbmRlcmVy
OSAqY29uc3QgbVJlbmRlcmVyOworCisgICAgSURpcmVjdDNESW5kZXhCdWZmZXI5ICptSW5kZXhC
dWZmZXI7CisgICAgdW5zaWduZWQgaW50IG1CdWZmZXJTaXplOworICAgIEdMZW51bSBtSW5kZXhU
eXBlOworICAgIGJvb2wgbUR5bmFtaWM7Cit9OworCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJf
UkVOREVSRVJfSU5ERVhCVUZGRVI5X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUXVlcnk5LmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9RdWVyeTkuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjcyNzgxY2JjMzlkMjVkMTRmNDMyMmRhMzUzMDc0OTUyMWUxYzg0N2IKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDkvUXVlcnk5LmNwcApAQCAtMCwwICsxLDEyNSBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVk
LmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworLy8gUXVlcnk5LmNwcDogRGVmaW5lcyB0aGUgcng6OlF1ZXJ5
OSBjbGFzcyB3aGljaCBpbXBsZW1lbnRzIHJ4OjpRdWVyeUltcGwuCisKKworI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1F1ZXJ5OS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWlu
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmgiCisKK25hbWVz
cGFjZSByeAoreworCitRdWVyeTk6OlF1ZXJ5OShyeDo6UmVuZGVyZXI5ICpyZW5kZXJlciwgR0xl
bnVtIHR5cGUpIDogUXVlcnlJbXBsKHR5cGUpCit7CisgICAgbVJlbmRlcmVyID0gcmVuZGVyZXI7
CisgICAgbVF1ZXJ5ID0gTlVMTDsKK30KKworUXVlcnk5Ojp+UXVlcnk5KCkKK3sKKyAgICBpZiAo
bVF1ZXJ5KQorICAgIHsKKyAgICAgICAgbVF1ZXJ5LT5SZWxlYXNlKCk7CisgICAgICAgIG1RdWVy
eSA9IE5VTEw7CisgICAgfQorfQorCit2b2lkIFF1ZXJ5OTo6YmVnaW4oKQoreworICAgIGlmICht
UXVlcnkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIGlmIChGQUlMRUQobVJlbmRlcmVyLT5nZXRE
ZXZpY2UoKS0+Q3JlYXRlUXVlcnkoRDNEUVVFUllUWVBFX09DQ0xVU0lPTiwgJm1RdWVyeSkpKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgICAgICB9CisgICAgfQorCisgICAgSFJFU1VMVCByZXN1bHQgPSBtUXVlcnktPklzc3Vl
KEQzRElTU1VFX0JFR0lOKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworfQorCit2
b2lkIFF1ZXJ5OTo6ZW5kKCkKK3sKKyAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCisgICAgeworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICB9CisKKyAg
ICBIUkVTVUxUIHJlc3VsdCA9IG1RdWVyeS0+SXNzdWUoRDNESVNTVUVfRU5EKTsKKyAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgbVN0YXR1cyA9IEdMX0ZBTFNFOworICAgIG1S
ZXN1bHQgPSBHTF9GQUxTRTsKK30KKworR0x1aW50IFF1ZXJ5OTo6Z2V0UmVzdWx0KCkKK3sKKyAg
ICBpZiAobVF1ZXJ5ICE9IE5VTEwpCisgICAgeworICAgICAgICB3aGlsZSAoIXRlc3RRdWVyeSgp
KQorICAgICAgICB7CisgICAgICAgICAgICBTbGVlcCgwKTsKKyAgICAgICAgICAgIC8vIGV4cGxp
Y2l0bHkgY2hlY2sgZm9yIGRldmljZSBsb3NzCisgICAgICAgICAgICAvLyBzb21lIGRyaXZlcnMg
c2VlbSB0byByZXR1cm4gU19GQUxTRSBldmVuIGlmIHRoZSBkZXZpY2UgaXMgbG9zdAorICAgICAg
ICAgICAgLy8gaW5zdGVhZCBvZiBEM0RFUlJfREVWSUNFTE9TVCBsaWtlIHRoZXkgc2hvdWxkCisg
ICAgICAgICAgICBpZiAobVJlbmRlcmVyLT50ZXN0RGV2aWNlTG9zdCh0cnVlKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlks
IDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG1SZXN1
bHQ7Cit9CisKK0dMYm9vbGVhbiBRdWVyeTk6OmlzUmVzdWx0QXZhaWxhYmxlKCkKK3sKKyAgICBp
ZiAobVF1ZXJ5ICE9IE5VTEwpCisgICAgeworICAgICAgICB0ZXN0UXVlcnkoKTsKKyAgICB9CisK
KyAgICByZXR1cm4gbVN0YXR1czsKK30KKworR0xib29sZWFuIFF1ZXJ5OTo6dGVzdFF1ZXJ5KCkK
K3sKKyAgICBpZiAobVF1ZXJ5ICE9IE5VTEwgJiYgbVN0YXR1cyAhPSBHTF9UUlVFKQorICAgIHsK
KyAgICAgICAgRFdPUkQgbnVtUGl4ZWxzID0gMDsKKworICAgICAgICBIUkVTVUxUIGhyZXMgPSBt
UXVlcnktPkdldERhdGEoJm51bVBpeGVscywgc2l6ZW9mKERXT1JEKSwgRDNER0VUREFUQV9GTFVT
SCk7CisgICAgICAgIGlmIChocmVzID09IFNfT0spCisgICAgICAgIHsKKyAgICAgICAgICAgIG1T
dGF0dXMgPSAgR0xfVFJVRTsKKworICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDoK
KyAgICAgICAgICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VY
VDoKKyAgICAgICAgICAgICAgICBtUmVzdWx0ID0gKG51bVBpeGVscyA+IDApID8gR0xfVFJVRSA6
IEdMX0ZBTFNFOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSBpZiAoZDNkOTo6aXNEZXZpY2VMb3N0RXJyb3IoaHJlcykpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1SZW5kZXJlci0+bm90aWZ5RGV2aWNlTG9zdCgpOworICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9UUlVFKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBtU3RhdHVzOworICAgIH0KKworICAgIHJldHVybiBHTF9U
UlVFOyAvLyBwcmV2ZW50IGJsb2NraW5nIHdoZW4gcXVlcnkgaXMgbnVsbAorfQorCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDkvUXVlcnk5LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvUXVlcnk5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDdlZWY4OTMzNmVmOGMzNDRhYTUxNjdiNGY0
MDIxYjEwNDFjMDcwYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9RdWVyeTkuaApAQCAtMCwwICsxLDQwIEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworLy8gUXVlcnk5Lmg6IERlZmluZXMgdGhlIHJ4OjpRdWVyeTkgY2xhc3Mg
d2hpY2ggaW1wbGVtZW50cyByeDo6UXVlcnlJbXBsLgorCisjaWZuZGVmIExJQkdMRVNWMl9SRU5E
RVJFUl9RVUVSWTlfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1FVRVJZOV9IXworCisj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1F1ZXJ5SW1wbC5oIgorCituYW1lc3BhY2UgcngK
K3sKK2NsYXNzIFJlbmRlcmVyOTsKKworY2xhc3MgUXVlcnk5IDogcHVibGljIFF1ZXJ5SW1wbAor
eworICBwdWJsaWM6CisgICAgUXVlcnk5KHJ4OjpSZW5kZXJlcjkgKnJlbmRlcmVyLCBHTGVudW0g
dHlwZSk7CisgICAgdmlydHVhbCB+UXVlcnk5KCk7CisKKyAgICB2b2lkIGJlZ2luKCk7CisgICAg
dm9pZCBlbmQoKTsKKyAgICBHTHVpbnQgZ2V0UmVzdWx0KCk7CisgICAgR0xib29sZWFuIGlzUmVz
dWx0QXZhaWxhYmxlKCk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oUXVlcnk5KTsKKworICAgIEdMYm9vbGVhbiB0ZXN0UXVlcnkoKTsKKworICAgIHJ4OjpSZW5k
ZXJlcjkgKm1SZW5kZXJlcjsKKyAgICBJRGlyZWN0M0RRdWVyeTkgKm1RdWVyeTsKK307CisKK30K
KworI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9RVUVSWTlfSF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJU
YXJnZXQ5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9SZW5kZXJUYXJnZXQ5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOTA0MzFkYjk5ODczOTBjNTAx
MmNiZmY2MTMwZjhhODkyMzgxNmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlclRhcmdldDkuY3BwCkBA
IC0wLDAgKzEsMTEzIEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisvLyBSZW5kZXJUYXJnZXQ5LmNwcDogSW1wbGVtZW50cyBhIEQzRDktc3BlY2lmaWMgd3JhcHBl
ciBmb3IgSURpcmVjdDNEU3VyZmFjZTkKKy8vIHBvaW50ZXJzIHJldGFpbmVkIGJ5IHJlbmRlcmJ1
ZmZlcnMuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJUYXJnZXQ5
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmgiCisKKyNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5kZXJlcjlfdXRpbHMuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvbWFpbi5oIgorCituYW1lc3BhY2UgcngKK3sKKworUmVuZGVyVGFyZ2V0
OTo6UmVuZGVyVGFyZ2V0OShSZW5kZXJlciAqcmVuZGVyZXIsIElEaXJlY3QzRFN1cmZhY2U5ICpz
dXJmYWNlKQoreworICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShyZW5k
ZXJlcik7CisgICAgbVJlbmRlclRhcmdldCA9IHN1cmZhY2U7CisKKyAgICBpZiAobVJlbmRlclRh
cmdldCkKKyAgICB7CisgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsKKyAgICAg
ICAgbVJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzY3JpcHRpb24pOworCisgICAgICAgIG1XaWR0
aCA9IGRlc2NyaXB0aW9uLldpZHRoOworICAgICAgICBtSGVpZ2h0ID0gZGVzY3JpcHRpb24uSGVp
Z2h0OworICAgICAgICAKKyAgICAgICAgbUludGVybmFsRm9ybWF0ID0gZDNkOV9nbDo6R2V0RXF1
aXZhbGVudEZvcm1hdChkZXNjcmlwdGlvbi5Gb3JtYXQpOworICAgICAgICBtQWN0dWFsRm9ybWF0
ID0gZDNkOV9nbDo6R2V0RXF1aXZhbGVudEZvcm1hdChkZXNjcmlwdGlvbi5Gb3JtYXQpOworICAg
ICAgICBtU2FtcGxlcyA9IGQzZDlfZ2w6OkdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKGRl
c2NyaXB0aW9uLk11bHRpU2FtcGxlVHlwZSk7CisgICAgfQorfQorCitSZW5kZXJUYXJnZXQ5OjpS
ZW5kZXJUYXJnZXQ5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcykKK3sKKyAgICBtUmVuZGVyZXIg
PSBSZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjkocmVuZGVyZXIpOworICAgIG1SZW5kZXJUYXJnZXQg
PSBOVUxMOworCisgICAgRDNERk9STUFUIHJlcXVlc3RlZEZvcm1hdCA9IGdsX2QzZDk6OkNvbnZl
cnRSZW5kZXJidWZmZXJGb3JtYXQoZm9ybWF0KTsKKyAgICBpbnQgc3VwcG9ydGVkU2FtcGxlcyA9
IG1SZW5kZXJlci0+Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMocmVxdWVzdGVkRm9ybWF0LCBz
YW1wbGVzKTsKKworICAgIGlmIChzdXBwb3J0ZWRTYW1wbGVzID09IC0xKQorICAgIHsKKyAgICAg
ICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworCisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBIUkVTVUxUIHJlc3VsdCA9IEQzREVSUl9JTlZBTElEQ0FMTDsKKyAgICAKKyAgICBp
ZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApCisgICAgeworICAgICAgICBpZiAocmVxdWVzdGVk
Rm9ybWF0ID09IEQzREZNVF9EMjRTOCkKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0ID0g
bVJlbmRlcmVyLT5nZXREZXZpY2UoKS0+Q3JlYXRlRGVwdGhTdGVuY2lsU3VyZmFjZSh3aWR0aCwg
aGVpZ2h0LCByZXF1ZXN0ZWRGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkdldE11bHRp
c2FtcGxlVHlwZUZyb21TYW1wbGVzKHN1cHBvcnRlZFNhbXBsZXMpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LCBGQUxTRSwgJm1SZW5kZXJUYXJnZXQsIE5VTEwpOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKS0+
Q3JlYXRlUmVuZGVyVGFyZ2V0KHdpZHRoLCBoZWlnaHQsIHJlcXVlc3RlZEZvcm1hdCwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2xfZDNkOTo6R2V0TXVsdGlzYW1wbGVUeXBlRnJvbVNhbXBsZXMoc3VwcG9ydGVkU2FtcGxl
cyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMCwgRkFMU0UsICZtUmVuZGVyVGFyZ2V0LCBOVUxMKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0
ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICB9CisKKyAgICBtV2lkdGggPSB3aWR0
aDsKKyAgICBtSGVpZ2h0ID0gaGVpZ2h0OworICAgIG1JbnRlcm5hbEZvcm1hdCA9IGZvcm1hdDsK
KyAgICBtU2FtcGxlcyA9IHN1cHBvcnRlZFNhbXBsZXM7CisgICAgbUFjdHVhbEZvcm1hdCA9IGQz
ZDlfZ2w6OkdldEVxdWl2YWxlbnRGb3JtYXQocmVxdWVzdGVkRm9ybWF0KTsKK30KKworUmVuZGVy
VGFyZ2V0OTo6flJlbmRlclRhcmdldDkoKQoreworICAgIGlmIChtUmVuZGVyVGFyZ2V0KQorICAg
IHsKKyAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworICAgIH0KK30KKworUmVuZGVy
VGFyZ2V0OSAqUmVuZGVyVGFyZ2V0OTo6bWFrZVJlbmRlclRhcmdldDkoUmVuZGVyVGFyZ2V0ICp0
YXJnZXQpCit7CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUocng6OlJlbmRlclRhcmdldDkq
LCB0YXJnZXQpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8cng6OlJlbmRlclRhcmdldDkqPih0
YXJnZXQpOworfQorCitJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyVGFyZ2V0OTo6Z2V0U3VyZmFj
ZSgpCit7CisgICAgLy8gQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcgdGhlIHJl
dHVybmVkIHN1cmZhY2UgcmVmZXJlbmNlLgorICAgIGlmIChtUmVuZGVyVGFyZ2V0KQorICAgIHsK
KyAgICAgICAgbVJlbmRlclRhcmdldC0+QWRkUmVmKCk7CisgICAgfQorCisgICAgcmV0dXJuIG1S
ZW5kZXJUYXJnZXQ7Cit9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
UmVuZGVyVGFyZ2V0OS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L1JlbmRlclRhcmdldDkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYWY4YWQxYzZkMmQ2MjQy
OTQwMGZlMzNjYjhjZGRlNzFmN2QzMjVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlclRhcmdldDkuaApA
QCAtMCwwICsxLDQwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUmVuZGVyVGFyZ2V0OS5oOiBEZWZp
bmVzIGEgRDNEOS1zcGVjaWZpYyB3cmFwcGVyIGZvciBJRGlyZWN0M0RTdXJmYWNlOSBwb2ludGVy
cworLy8gcmV0YWluZWQgYnkgUmVuZGVyYnVmZmVycy4KKworI2lmbmRlZiBMSUJHTEVTVjJfUkVO
REVSRVJfUkVOREVSVEFSR0VUOV9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVS
VEFSR0VUOV9IXworCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldC5o
IgorCituYW1lc3BhY2UgcngKK3sKK2NsYXNzIFJlbmRlcmVyOworY2xhc3MgUmVuZGVyZXI5Owor
CitjbGFzcyBSZW5kZXJUYXJnZXQ5IDogcHVibGljIFJlbmRlclRhcmdldAoreworICBwdWJsaWM6
CisgICAgUmVuZGVyVGFyZ2V0OShSZW5kZXJlciAqcmVuZGVyZXIsIElEaXJlY3QzRFN1cmZhY2U5
ICpzdXJmYWNlKTsKKyAgICBSZW5kZXJUYXJnZXQ5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcyk7
CisgICAgdmlydHVhbCB+UmVuZGVyVGFyZ2V0OSgpOworCisgICAgc3RhdGljIFJlbmRlclRhcmdl
dDkgKm1ha2VSZW5kZXJUYXJnZXQ5KFJlbmRlclRhcmdldCAqcmVuZGVyVGFyZ2V0KTsKKyAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqZ2V0U3VyZmFjZSgpOworCisgIHByaXZhdGU6CisgICAgRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlclRhcmdldDkpOworCisgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKm1SZW5kZXJUYXJnZXQ7CisKKyAgICBSZW5kZXJlcjkgKm1SZW5kZXJlcjsKK307CisKK30K
KworI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJUQVJHRVQ5X0hfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
UmVuZGVyZXI5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9SZW5kZXJlcjkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk3YTEwZDY0YmY3NjY2MDFjOGM4
YjNkMDE5OTQyZTI3MzNiYzI4OTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmNwcApAQCAtMCww
ICsxLDMyODcgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworLy8gUmVuZGVyZXI5LmNwcDogSW1wbGVtZW50cyBhIGJhY2stZW5kIHNwZWNpZmljIGNsYXNz
IGZvciB0aGUgRDNEOSByZW5kZXJlci4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJl
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL1JlbmRlcmJ1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5Lmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0luZGV4RGF0YU1hbmFnZXIuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5kZXJlcjlfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9TaGFkZXJFeGVjdXRhYmxlOS5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L1N3YXBDaGFpbjkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9UZXh0dXJlU3RvcmFnZTkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9JbWFnZTkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CbGl0Lmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleEJ1ZmZlcjkuaCIKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbmRleEJ1ZmZlcjkuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9CdWZmZXJTdG9yYWdlOS5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L1F1ZXJ5OS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L0ZlbmNlOS5oIgorCisjaW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIKKworI2luY2x1ZGUg
InRoaXJkX3BhcnR5L3RyYWNlX2V2ZW50L3RyYWNlX2V2ZW50LmgiCisKKy8vIENhbiBhbHNvIGJl
IGVuYWJsZWQgYnkgZGVmaW5pbmcgRk9SQ0VfUkVGX1JBU1QgaW4gdGhlIHByb2plY3QncyBwcmVk
ZWZpbmVkIG1hY3JvcworI2RlZmluZSBSRUZfUkFTVCAwCisKKy8vIFRoZSAiRGVidWcgVGhpcyBQ
aXhlbC4uLiIgZmVhdHVyZSBpbiBQSVggb2Z0ZW4gZmFpbHMgd2hlbiB1c2luZyB0aGUKKy8vIEQz
RDlFeCBpbnRlcmZhY2VzLiAgSW4gb3JkZXIgdG8gZ2V0IGRlYnVnIHBpeGVsIHRvIHdvcmsgb24g
YSBWaXN0YS9XaW4gNworLy8gbWFjaGluZSwgZGVmaW5lICJBTkdMRV9FTkFCTEVfRDNEOUVYPTAi
IGluIHlvdXIgcHJvamVjdCBmaWxlLgorI2lmICFkZWZpbmVkKEFOR0xFX0VOQUJMRV9EM0Q5RVgp
CisvLyBFbmFibGVzIHVzZSBvZiB0aGUgSURpcmVjdDNEOUV4IGludGVyZmFjZSwgd2hlbiBhdmFp
bGFibGUKKyNkZWZpbmUgQU5HTEVfRU5BQkxFX0QzRDlFWCAxCisjZW5kaWYgLy8gIWRlZmluZWQo
QU5HTEVfRU5BQkxFX0QzRDlFWCkKKworbmFtZXNwYWNlIHJ4Cit7CitzdGF0aWMgY29uc3QgRDNE
Rk9STUFUIFJlbmRlclRhcmdldEZvcm1hdHNbXSA9CisgICAgeworICAgICAgICBEM0RGTVRfQTFS
NUc1QjUsCisgICAgLy8gIEQzREZNVF9BMlIxMEcxMEIxMCwgICAvLyBUaGUgY29sb3JfcmFtcCBj
b25mb3JtYW5jZSB0ZXN0IHVzZXMgUmVhZFBpeGVscyB3aXRoIFVOU0lHTkVEX0JZVEUgY2F1c2lu
ZyBpdCB0byB0aGluayB0aGF0IHJlbmRlcmluZyBza2lwcGVkIGEgY29sb3VyIHZhbHVlLgorICAg
ICAgICBEM0RGTVRfQThSOEc4QjgsCisgICAgICAgIEQzREZNVF9SNUc2QjUsCisgICAgLy8gIEQz
REZNVF9YMVI1RzVCNSwgICAgICAvLyBIYXMgbm8gY29tcGF0aWJsZSBPcGVuR0wgRVMgcmVuZGVy
YnVmZmVyIGZvcm1hdAorICAgICAgICBEM0RGTVRfWDhSOEc4QjgKKyAgICB9OworCitzdGF0aWMg
Y29uc3QgRDNERk9STUFUIERlcHRoU3RlbmNpbEZvcm1hdHNbXSA9CisgICAgeworICAgICAgICBE
M0RGTVRfVU5LTk9XTiwKKyAgICAvLyAgRDNERk1UX0QxNl9MT0NLQUJMRSwKKyAgICAgICAgRDNE
Rk1UX0QzMiwKKyAgICAvLyAgRDNERk1UX0QxNVMxLAorICAgICAgICBEM0RGTVRfRDI0UzgsCisg
ICAgICAgIEQzREZNVF9EMjRYOCwKKyAgICAvLyAgRDNERk1UX0QyNFg0UzQsCisgICAgICAgIEQz
REZNVF9EMTYsCisgICAgLy8gIEQzREZNVF9EMzJGX0xPQ0tBQkxFLAorICAgIC8vICBEM0RGTVRf
RDI0RlM4CisgICAgfTsKKworZW51bQoreworICAgIE1BWF9WRVJURVhfQ09OU1RBTlRfVkVDVE9S
U19EM0Q5ID0gMjU2LAorICAgIE1BWF9QSVhFTF9DT05TVEFOVF9WRUNUT1JTX1NNMiA9IDMyLAor
ICAgIE1BWF9QSVhFTF9DT05TVEFOVF9WRUNUT1JTX1NNMyA9IDIyNCwKKyAgICBNQVhfVkFSWUlO
R19WRUNUT1JTX1NNMiA9IDgsCisgICAgTUFYX1ZBUllJTkdfVkVDVE9SU19TTTMgPSAxMCwKKwor
ICAgIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl9TTTMgPSA0Cit9OworCitSZW5kZXJlcjk6
OlJlbmRlcmVyOShlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIEhEQyBoRGMsIGJvb2wgc29mdHdhcmVE
ZXZpY2UpIDogUmVuZGVyZXIoZGlzcGxheSksIG1EYyhoRGMpLCBtU29mdHdhcmVEZXZpY2Uoc29m
dHdhcmVEZXZpY2UpCit7CisgICAgbUQzZDlNb2R1bGUgPSBOVUxMOworCisgICAgbUQzZDkgPSBO
VUxMOworICAgIG1EM2Q5RXggPSBOVUxMOworICAgIG1EZXZpY2UgPSBOVUxMOworICAgIG1EZXZp
Y2VFeCA9IE5VTEw7CisgICAgbURldmljZVdpbmRvdyA9IE5VTEw7CisgICAgbUJsaXQgPSBOVUxM
OworCisgICAgbUFkYXB0ZXIgPSBEM0RBREFQVEVSX0RFRkFVTFQ7CisKKyAgICAjaWYgUkVGX1JB
U1QgPT0gMSB8fCBkZWZpbmVkKEZPUkNFX1JFRl9SQVNUKQorICAgICAgICBtRGV2aWNlVHlwZSA9
IEQzRERFVlRZUEVfUkVGOworICAgICNlbHNlCisgICAgICAgIG1EZXZpY2VUeXBlID0gRDNEREVW
VFlQRV9IQUw7CisgICAgI2VuZGlmCisKKyAgICBtRGV2aWNlTG9zdCA9IGZhbHNlOworCisgICAg
bU1heFN1cHBvcnRlZFNhbXBsZXMgPSAwOworCisgICAgbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSA9
IE5VTEw7CisKKyAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBOVUxMOworICAgIG1JbmRleERhdGFN
YW5hZ2VyID0gTlVMTDsKKyAgICBtTGluZUxvb3BJQiA9IE5VTEw7CisKKyAgICBtTWF4TnVsbENv
bG9yYnVmZmVyTFJVID0gMDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9OVUxMX0NPTE9S
QlVGRkVSX0NBQ0hFX0VOVFJJRVM7IGkrKykKKyAgICB7CisgICAgICAgIG1OdWxsQ29sb3JidWZm
ZXJDYWNoZVtpXS5scnVDb3VudCA9IDA7CisgICAgICAgIG1OdWxsQ29sb3JidWZmZXJDYWNoZVtp
XS53aWR0aCA9IDA7CisgICAgICAgIG1OdWxsQ29sb3JidWZmZXJDYWNoZVtpXS5oZWlnaHQgPSAw
OworICAgICAgICBtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0uYnVmZmVyID0gTlVMTDsKKyAgICB9
Cit9CisKK1JlbmRlcmVyOTo6flJlbmRlcmVyOSgpCit7CisgICAgaWYgKG1EZXZpY2UpCisgICAg
eworICAgICAgICAvLyBJZiB0aGUgZGV2aWNlIGlzIGxvc3QsIHJlc2V0IGl0IGZpcnN0IHRvIHBy
ZXZlbnQgbGVhdmluZyB0aGUgZHJpdmVyIGluIGFuIHVuc3RhYmxlIHN0YXRlCisgICAgICAgIGlm
ICh0ZXN0RGV2aWNlTG9zdChmYWxzZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc2V0RGV2
aWNlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBkZWluaXRpYWxpemUoKTsKK30KKwordm9p
ZCBSZW5kZXJlcjk6OmRlaW5pdGlhbGl6ZSgpCit7CisgICAgcmVsZWFzZURldmljZVJlc291cmNl
cygpOworCisgICAgU2FmZVJlbGVhc2UobURldmljZSk7CisgICAgU2FmZVJlbGVhc2UobURldmlj
ZUV4KTsKKyAgICBTYWZlUmVsZWFzZShtRDNkOSk7CisgICAgU2FmZVJlbGVhc2UobUQzZDlFeCk7
CisKKyAgICBpZiAobURldmljZVdpbmRvdykKKyAgICB7CisgICAgICAgIERlc3Ryb3lXaW5kb3co
bURldmljZVdpbmRvdyk7CisgICAgICAgIG1EZXZpY2VXaW5kb3cgPSBOVUxMOworICAgIH0KKwor
ICAgIGlmIChtRDNkOU1vZHVsZSkKKyAgICB7CisgICAgICAgIG1EM2Q5TW9kdWxlID0gTlVMTDsK
KyAgICB9CisKKyAgICB3aGlsZSAoIW1NdWx0aVNhbXBsZVN1cHBvcnQuZW1wdHkoKSkKKyAgICB7
CisgICAgICAgIGRlbGV0ZSBbXSBtTXVsdGlTYW1wbGVTdXBwb3J0LmJlZ2luKCktPnNlY29uZDsK
KyAgICAgICAgbU11bHRpU2FtcGxlU3VwcG9ydC5lcmFzZShtTXVsdGlTYW1wbGVTdXBwb3J0LmJl
Z2luKCkpOworICAgIH0KK30KKworUmVuZGVyZXI5ICpSZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjko
UmVuZGVyZXIgKnJlbmRlcmVyKQoreworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKHJ4OjpS
ZW5kZXJlcjkqLCByZW5kZXJlcikpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxyeDo6UmVuZGVy
ZXI5Kj4ocmVuZGVyZXIpOworfQorCitFR0xpbnQgUmVuZGVyZXI5Ojppbml0aWFsaXplKCkKK3sK
KyAgICBpZiAoIWluaXRpYWxpemVDb21waWxlcigpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEVH
TF9OT1RfSU5JVElBTElaRUQ7CisgICAgfQorCisgICAgaWYgKG1Tb2Z0d2FyZURldmljZSkKKyAg
ICB7CisgICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgIkdldE1vZHVsZUhhbmRsZV9zd2lmdHNo
YWRlciIpOworICAgICAgICBtRDNkOU1vZHVsZSA9IEdldE1vZHVsZUhhbmRsZShURVhUKCJzd2lm
dHNoYWRlcl9kM2Q5LmRsbCIpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVFJB
Q0VfRVZFTlQwKCJncHUiLCAiR2V0TW9kdWxlSGFuZGxlX2QzZDkiKTsKKyAgICAgICAgbUQzZDlN
b2R1bGUgPSBHZXRNb2R1bGVIYW5kbGUoVEVYVCgiZDNkOS5kbGwiKSk7CisgICAgfQorCisgICAg
aWYgKG1EM2Q5TW9kdWxlID09IE5VTEwpCisgICAgeworICAgICAgICBFUlIoIk5vIEQzRDkgbW9k
dWxlIGZvdW5kIC0gYWJvcnRpbmchXG4iKTsKKyAgICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElB
TElaRUQ7CisgICAgfQorCisgICAgdHlwZWRlZiBIUkVTVUxUIChXSU5BUEkgKkRpcmVjdDNEQ3Jl
YXRlOUV4RnVuYykoVUlOVCwgSURpcmVjdDNEOUV4KiopOworICAgIERpcmVjdDNEQ3JlYXRlOUV4
RnVuYyBEaXJlY3QzRENyZWF0ZTlFeFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8RGlyZWN0M0RDcmVh
dGU5RXhGdW5jPihHZXRQcm9jQWRkcmVzcyhtRDNkOU1vZHVsZSwgIkRpcmVjdDNEQ3JlYXRlOUV4
IikpOworCisgICAgLy8gVXNlIERpcmVjdDNEOUV4IGlmIGF2YWlsYWJsZS4gQW1vbmcgb3RoZXIg
dGhpbmdzLCB0aGlzIHZlcnNpb24gaXMgbGVzcworICAgIC8vIGluY2xpbmVkIHRvIHJlcG9ydCBh
IGxvc3QgY29udGV4dCwgZm9yIGV4YW1wbGUgd2hlbiB0aGUgdXNlciBzd2l0Y2hlcworICAgIC8v
IGRlc2t0b3AuIERpcmVjdDNEOUV4IGlzIGF2YWlsYWJsZSBpbiBXaW5kb3dzIFZpc3RhIGFuZCBs
YXRlciBpZiBzdWl0YWJsZSBkcml2ZXJzIGFyZSBhdmFpbGFibGUuCisgICAgaWYgKEFOR0xFX0VO
QUJMRV9EM0Q5RVggJiYgRGlyZWN0M0RDcmVhdGU5RXhQdHIgJiYgU1VDQ0VFREVEKERpcmVjdDNE
Q3JlYXRlOUV4UHRyKEQzRF9TREtfVkVSU0lPTiwgJm1EM2Q5RXgpKSkKKyAgICB7CisgICAgICAg
IFRSQUNFX0VWRU5UMCgiZ3B1IiwgIkQzZDlFeF9RdWVyeUludGVyZmFjZSIpOworICAgICAgICBB
U1NFUlQobUQzZDlFeCk7CisgICAgICAgIG1EM2Q5RXgtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JRGly
ZWN0M0Q5LCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1EM2Q5KSk7CisgICAgICAgIEFTU0VS
VChtRDNkOSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5UMCgi
Z3B1IiwgIkRpcmVjdDNEQ3JlYXRlOSIpOworICAgICAgICBtRDNkOSA9IERpcmVjdDNEQ3JlYXRl
OShEM0RfU0RLX1ZFUlNJT04pOworICAgIH0KKworICAgIGlmICghbUQzZDkpCisgICAgeworICAg
ICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgRDNEOSBkZXZpY2UgLSBhYm9ydGluZyFcbiIpOwor
ICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsKKyAgICB9CisKKyAgICBpZiAobURj
ICE9IE5VTEwpCisgICAgeworICAgIC8vICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUU6IERl
dGVybWluZSB3aGljaCBhZGFwdGVyIGluZGV4IHRoZSBkZXZpY2UgY29udGV4dCBjb3JyZXNwb25k
cyB0bworICAgIH0KKworICAgIEhSRVNVTFQgcmVzdWx0OworCisgICAgLy8gR2l2ZSB1cCBvbiBn
ZXR0aW5nIGRldmljZSBjYXBzIGFmdGVyIGFib3V0IG9uZSBzZWNvbmQuCisgICAgeworICAgICAg
ICBUUkFDRV9FVkVOVDAoImdwdSIsICJHZXREZXZpY2VDYXBzIik7CisgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgMTA7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0ID0gbUQz
ZDktPkdldERldmljZUNhcHMobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCAmbURldmljZUNhcHMpOwor
ICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocmVz
dWx0ID09IEQzREVSUl9OT1RBVkFJTEFCTEUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgU2xlZXAoMTAwKTsgICAvLyBHaXZlIHRoZSBkcml2ZXIgc29tZSB0aW1lIHRvIGluaXRpYWxp
emUvcmVjb3ZlcgorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoRkFJTEVEKHJl
c3VsdCkpICAgLy8gRDNERVJSX09VVE9GVklERU9NRU1PUlksIEVfT1VUT0ZNRU1PUlksIEQzREVS
Ul9JTlZBTElEREVWSUNFLCBvciBhbm90aGVyIGVycm9yIHdlIGNhbid0IHJlY292ZXIgZnJvbQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEVSUigiZmFpbGVkIHRvIGdldCBkZXZpY2Ug
Y2FwcyAoMHgleClcbiIsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEVHTF9OT1Rf
SU5JVElBTElaRUQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
bURldmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJzaW9uIDwgRDNEUFNfVkVSU0lPTigyLCAwKSkKKyAg
ICB7CisgICAgICAgIEVSUigiUmVuZGVyZXIgZG9lcyBub3Qgc3VwcG9ydCBQUyAyLjAuIGFib3J0
aW5nIVxuIik7CisgICAgICAgIHJldHVybiBFR0xfTk9UX0lOSVRJQUxJWkVEOworICAgIH0KKwor
ICAgIC8vIFdoZW4gRGlyZWN0WDkgaXMgcnVubmluZyB3aXRoIGFuIG9sZGVyIERpcmVjdFg4IGRy
aXZlciwgYSBTdHJldGNoUmVjdCBmcm9tIGEgcmVndWxhciB0ZXh0dXJlIHRvIGEgcmVuZGVyIHRh
cmdldCB0ZXh0dXJlIGlzIG5vdCBzdXBwb3J0ZWQuCisgICAgLy8gVGhpcyBpcyByZXF1aXJlZCBi
eSBUZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRlclRhcmdldC4KKyAgICBpZiAoKG1EZXZpY2VDYXBz
LkRldkNhcHMyICYgRDNEREVWQ0FQUzJfQ0FOX1NUUkVUQ0hSRUNUX0ZST01fVEVYVFVSRVMpID09
IDApCisgICAgeworICAgICAgICBFUlIoIlJlbmRlcmVyIGRvZXMgbm90IHN1cHBvcnQgc3RyZXRj
dHJlY3QgZnJvbSB0ZXh0dXJlcyFcbiIpOworICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFM
SVpFRDsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgIkdldEFk
YXB0ZXJJZGVudGlmaWVyIik7CisgICAgICAgIG1EM2Q5LT5HZXRBZGFwdGVySWRlbnRpZmllciht
QWRhcHRlciwgMCwgJm1BZGFwdGVySWRlbnRpZmllcik7CisgICAgfQorCisgICAgLy8gQVRJIGNh
cmRzIG9uIFhQIGhhdmUgcHJvYmxlbXMgd2l0aCBub24tcG93ZXItb2YtdHdvIHRleHR1cmVzLgor
ICAgIG1TdXBwb3J0c05vblBvd2VyMlRleHR1cmVzID0gIShtRGV2aWNlQ2Fwcy5UZXh0dXJlQ2Fw
cyAmIEQzRFBURVhUVVJFQ0FQU19QT1cyKSAmJgorICAgICAgICAhKG1EZXZpY2VDYXBzLlRleHR1
cmVDYXBzICYgRDNEUFRFWFRVUkVDQVBTX0NVQkVNQVBfUE9XMikgJiYKKyAgICAgICAgIShtRGV2
aWNlQ2Fwcy5UZXh0dXJlQ2FwcyAmIEQzRFBURVhUVVJFQ0FQU19OT05QT1cyQ09ORElUSU9OQUwp
ICYmCisgICAgICAgICEoZ2V0Q29tcGFyYWJsZU9TVmVyc2lvbigpIDwgdmVyc2lvbldpbmRvd3NW
aXN0YSAmJiBtQWRhcHRlcklkZW50aWZpZXIuVmVuZG9ySWQgPT0gVkVORE9SX0lEX0FNRCk7CisK
KyAgICAvLyBNdXN0IHN1cHBvcnQgYSBtaW5pbXVtIG9mIDI6MSBhbmlzb3Ryb3B5IGZvciBtYXgg
YW5pc290cm9weSB0byBiZSBjb25zaWRlcmVkIHN1cHBvcnRlZCwgcGVyIHRoZSBzcGVjCisgICAg
bVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHkgPSAoKG1EZXZpY2VDYXBzLlJhc3RlckNh
cHMgJiBEM0RQUkFTVEVSQ0FQU19BTklTT1RST1BZKSAmJiAobURldmljZUNhcHMuTWF4QW5pc290
cm9weSA+PSAyKSk7CisKKyAgICBtTWluU3dhcEludGVydmFsID0gNDsKKyAgICBtTWF4U3dhcElu
dGVydmFsID0gMDsKKworICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMg
JiBEM0RQUkVTRU5UX0lOVEVSVkFMX0lNTUVESUFURSkKKyAgICB7CisgICAgICAgIG1NaW5Td2Fw
SW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dhcEludGVydmFsLCAwKTsKKyAgICAgICAgbU1heFN3
YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2YWwsIDApOworICAgIH0KKyAgICBp
ZiAobURldmljZUNhcHMuUHJlc2VudGF0aW9uSW50ZXJ2YWxzICYgRDNEUFJFU0VOVF9JTlRFUlZB
TF9PTkUpCisgICAgeworICAgICAgICBtTWluU3dhcEludGVydmFsID0gc3RkOjptaW4obU1pblN3
YXBJbnRlcnZhbCwgMSk7CisgICAgICAgIG1NYXhTd2FwSW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4
U3dhcEludGVydmFsLCAxKTsKKyAgICB9CisgICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlv
bkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfVFdPKQorICAgIHsKKyAgICAgICAgbU1p
blN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDIpOworICAgICAgICBt
TWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgMik7CisgICAgfQor
ICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVTRU5UX0lO
VEVSVkFMX1RIUkVFKQorICAgIHsKKyAgICAgICAgbU1pblN3YXBJbnRlcnZhbCA9IHN0ZDo6bWlu
KG1NaW5Td2FwSW50ZXJ2YWwsIDMpOworICAgICAgICBtTWF4U3dhcEludGVydmFsID0gc3RkOjpt
YXgobU1heFN3YXBJbnRlcnZhbCwgMyk7CisgICAgfQorICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVz
ZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX0ZPVVIpCisgICAgeworICAg
ICAgICBtTWluU3dhcEludGVydmFsID0gc3RkOjptaW4obU1pblN3YXBJbnRlcnZhbCwgNCk7Cisg
ICAgICAgIG1NYXhTd2FwSW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4U3dhcEludGVydmFsLCA0KTsK
KyAgICB9CisKKyAgICBpbnQgbWF4ID0gMDsKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5UMCgi
Z3B1IiwgImdldE11bHRpU2FtcGxlU3VwcG9ydCIpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IEFycmF5U2l6ZShSZW5kZXJUYXJnZXRGb3JtYXRzKTsgKytpKQorICAgICAg
ICB7CisgICAgICAgICAgICBib29sICptdWx0aXNhbXBsZUFycmF5ID0gbmV3IGJvb2xbRDNETVVM
VElTQU1QTEVfMTZfU0FNUExFUyArIDFdOworICAgICAgICAgICAgZ2V0TXVsdGlTYW1wbGVTdXBw
b3J0KFJlbmRlclRhcmdldEZvcm1hdHNbaV0sIG11bHRpc2FtcGxlQXJyYXkpOworICAgICAgICAg
ICAgbU11bHRpU2FtcGxlU3VwcG9ydFtSZW5kZXJUYXJnZXRGb3JtYXRzW2ldXSA9IG11bHRpc2Ft
cGxlQXJyYXk7CisKKyAgICAgICAgICAgIGZvciAoaW50IGogPSBEM0RNVUxUSVNBTVBMRV8xNl9T
QU1QTEVTOyBqID49IDA7IC0taikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAo
bXVsdGlzYW1wbGVBcnJheVtqXSAmJiBqICE9IEQzRE1VTFRJU0FNUExFX05PTk1BU0tBQkxFICYm
IGogPiBtYXgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtYXggPSBq
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiZ2V0TXVsdGlTYW1wbGVTdXBwb3J0
MiIpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShEZXB0
aFN0ZW5jaWxGb3JtYXRzKTsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoRGVwdGhT
dGVuY2lsRm9ybWF0c1tpXSA9PSBEM0RGTVRfVU5LTk9XTikKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICAgICAgYm9vbCAqbXVsdGlzYW1wbGVBcnJheSA9IG5ldyBib29sW0Qz
RE1VTFRJU0FNUExFXzE2X1NBTVBMRVMgKyAxXTsKKyAgICAgICAgICAgIGdldE11bHRpU2FtcGxl
U3VwcG9ydChEZXB0aFN0ZW5jaWxGb3JtYXRzW2ldLCBtdWx0aXNhbXBsZUFycmF5KTsKKyAgICAg
ICAgICAgIG1NdWx0aVNhbXBsZVN1cHBvcnRbRGVwdGhTdGVuY2lsRm9ybWF0c1tpXV0gPSBtdWx0
aXNhbXBsZUFycmF5OworCisgICAgICAgICAgICBmb3IgKGludCBqID0gRDNETVVMVElTQU1QTEVf
MTZfU0FNUExFUzsgaiA+PSAwOyAtLWopCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aWYgKG11bHRpc2FtcGxlQXJyYXlbal0gJiYgaiAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJM
RSAmJiBqID4gbWF4KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbWF4
ID0gajsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9IG1heDsKKworICAgIHN0YXRpYyBjb25zdCBU
Q0hBUiB3aW5kb3dOYW1lW10gPSBURVhUKCJBbmdsZUhpZGRlbldpbmRvdyIpOworICAgIHN0YXRp
YyBjb25zdCBUQ0hBUiBjbGFzc05hbWVbXSA9IFRFWFQoIlNUQVRJQyIpOworCisgICAgeworICAg
ICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJDcmVhdGVXaW5kb3dFeCIpOworICAgICAgICBtRGV2
aWNlV2luZG93ID0gQ3JlYXRlV2luZG93RXgoV1NfRVhfTk9BQ1RJVkFURSwgY2xhc3NOYW1lLCB3
aW5kb3dOYW1lLCBXU19ESVNBQkxFRCB8IFdTX1BPUFVQLCAwLCAwLCAxLCAxLCBIV05EX01FU1NB
R0UsIE5VTEwsIEdldE1vZHVsZUhhbmRsZShOVUxMKSwgTlVMTCk7CisgICAgfQorCisgICAgRDNE
UFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbWV0ZXJzID0gZ2V0RGVmYXVsdFByZXNlbnRQ
YXJhbWV0ZXJzKCk7CisgICAgRFdPUkQgYmVoYXZpb3JGbGFncyA9IEQzRENSRUFURV9GUFVfUFJF
U0VSVkUgfCBEM0RDUkVBVEVfTk9XSU5ET1dDSEFOR0VTOworCisgICAgeworICAgICAgICBUUkFD
RV9FVkVOVDAoImdwdSIsICJEM2Q5X0NyZWF0ZURldmljZSIpOworICAgICAgICByZXN1bHQgPSBt
RDNkOS0+Q3JlYXRlRGV2aWNlKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgbURldmljZVdpbmRvdywg
YmVoYXZpb3JGbGFncyB8IEQzRENSRUFURV9IQVJEV0FSRV9WRVJURVhQUk9DRVNTSU5HIHwgRDNE
Q1JFQVRFX1BVUkVERVZJQ0UsICZwcmVzZW50UGFyYW1ldGVycywgJm1EZXZpY2UpOworICAgIH0K
KyAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBF
X09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTE9TVCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBFR0xfQkFEX0FMTE9DOworICAgIH0KKworICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgIkQzZDlfQ3JlYXRlRGV2aWNl
MiIpOworICAgICAgICByZXN1bHQgPSBtRDNkOS0+Q3JlYXRlRGV2aWNlKG1BZGFwdGVyLCBtRGV2
aWNlVHlwZSwgbURldmljZVdpbmRvdywgYmVoYXZpb3JGbGFncyB8IEQzRENSRUFURV9TT0ZUV0FS
RV9WRVJURVhQUk9DRVNTSU5HLCAmcHJlc2VudFBhcmFtZXRlcnMsICZtRGV2aWNlKTsKKworICAg
ICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChy
ZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1P
UlkgfHwgcmVzdWx0ID09IEQzREVSUl9OT1RBVkFJTEFCTEUgfHwgcmVzdWx0ID09IEQzREVSUl9E
RVZJQ0VMT1NUKTsKKyAgICAgICAgICAgIHJldHVybiBFR0xfQkFEX0FMTE9DOworICAgICAgICB9
CisgICAgfQorCisgICAgaWYgKG1EM2Q5RXgpCisgICAgeworICAgICAgICBUUkFDRV9FVkVOVDAo
ImdwdSIsICJtRGV2aWNlX1F1ZXJ5SW50ZXJmYWNlIik7CisgICAgICAgIHJlc3VsdCA9IG1EZXZp
Y2UtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JRGlyZWN0M0REZXZpY2U5RXgsICh2b2lkKiopICZtRGV2
aWNlRXgpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgIH0KKworICAg
IHsKKyAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiU2hhZGVyQ2FjaGUgaW5pdGlhbGl6ZSIp
OworICAgICAgICBtVmVydGV4U2hhZGVyQ2FjaGUuaW5pdGlhbGl6ZShtRGV2aWNlKTsKKyAgICAg
ICAgbVBpeGVsU2hhZGVyQ2FjaGUuaW5pdGlhbGl6ZShtRGV2aWNlKTsKKyAgICB9CisKKyAgICAv
LyBDaGVjayBvY2NsdXNpb24gcXVlcnkgc3VwcG9ydAorICAgIElEaXJlY3QzRFF1ZXJ5OSAqb2Nj
bHVzaW9uUXVlcnkgPSBOVUxMOworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAi
ZGV2aWNlX0NyZWF0ZVF1ZXJ5Iik7CisgICAgICAgIGlmIChTVUNDRUVERUQobURldmljZS0+Q3Jl
YXRlUXVlcnkoRDNEUVVFUllUWVBFX09DQ0xVU0lPTiwgJm9jY2x1c2lvblF1ZXJ5KSkgJiYgb2Nj
bHVzaW9uUXVlcnkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG9jY2x1c2lvblF1ZXJ5LT5SZWxl
YXNlKCk7CisgICAgICAgICAgICBtT2NjbHVzaW9uUXVlcnlTdXBwb3J0ID0gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1PY2NsdXNpb25RdWVy
eVN1cHBvcnQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIENoZWNrIGV2ZW50
IHF1ZXJ5IHN1cHBvcnQKKyAgICBJRGlyZWN0M0RRdWVyeTkgKmV2ZW50UXVlcnkgPSBOVUxMOwor
ICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiZGV2aWNlX0NyZWF0ZVF1ZXJ5MiIp
OworICAgICAgICBpZiAoU1VDQ0VFREVEKG1EZXZpY2UtPkNyZWF0ZVF1ZXJ5KEQzRFFVRVJZVFlQ
RV9FVkVOVCwgJmV2ZW50UXVlcnkpKSAmJiBldmVudFF1ZXJ5KQorICAgICAgICB7CisgICAgICAg
ICAgICBldmVudFF1ZXJ5LT5SZWxlYXNlKCk7CisgICAgICAgICAgICBtRXZlbnRRdWVyeVN1cHBv
cnQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgbUV2ZW50UXVlcnlTdXBwb3J0ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBE
M0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7CisgICAgbUQzZDktPkdldEFkYXB0ZXJE
aXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnREaXNwbGF5TW9kZSk7CisKKyAgICAvLyBDaGVj
ayB2ZXJ0ZXggdGV4dHVyZSBzdXBwb3J0CisgICAgLy8gT25seSBEaXJlY3QzRCAxMCByZWFkeSBk
ZXZpY2VzIHN1cHBvcnQgYWxsIHRoZSBuZWNlc3NhcnkgdmVydGV4IHRleHR1cmUgZm9ybWF0cy4K
KyAgICAvLyBXZSB0ZXN0IHRoaXMgdXNpbmcgRDNEOSBieSBjaGVja2luZyBzdXBwb3J0IGZvciB0
aGUgUjE2RiBmb3JtYXQuCisgICAgbVZlcnRleFRleHR1cmVTdXBwb3J0ID0gbURldmljZUNhcHMu
UGl4ZWxTaGFkZXJWZXJzaW9uID49IEQzRFBTX1ZFUlNJT04oMywgMCkgJiYKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFw
dGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFVT
QUdFX1FVRVJZX1ZFUlRFWFRFWFRVUkUsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9SMTZGKSk7
CisKKyAgICAvLyBDaGVjayBkZXB0aCB0ZXh0dXJlIHN1cHBvcnQKKyAgICAvLyB3ZSB1c2UgSU5U
WiBmb3IgZGVwdGggdGV4dHVyZXMgaW4gRGlyZWN0M0Q5CisgICAgLy8gd2UgYWxzbyB3YW50IE5V
TEwgdGV4dHVyZSBzdXBwb3J0IHRvIGVuc3VyZSB0aGUgd2UgY2FuIG1ha2UgZGVwdGgtb25seSBG
Qk9zCisgICAgLy8gc2VlIGh0dHA6Ly9hcmFzLXAuaW5mby90ZXh0cy9EM0Q5R1BVSGFja3MuaHRt
bAorICAgIG1EZXB0aFRleHR1cmVTdXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0Rldmlj
ZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEQzRFVTQUdFX0RFUFRIU1RFTkNJTCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0lO
VFopKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5DaGVj
a0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5G
b3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgRDNEUlRZUEVfU1VSRkFDRSwgRDNE
Rk1UX05VTEwpKTsKKworICAgIC8vIENoZWNrIDMyIGJpdCBmbG9hdGluZyBwb2ludCB0ZXh0dXJl
IHN1cHBvcnQKKyAgICBtRmxvYXQzMkZpbHRlclN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNo
ZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2Rl
LkZvcm1hdCwgRDNEVVNBR0VfUVVFUllfRklMVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfVEVYVFVSRSwg
RDNERk1UX0EzMkIzMkczMlIzMkYpKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNV
Q0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBj
dXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9RVUVSWV9GSUxURVIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
M0RSVFlQRV9DVUJFVEVYVFVSRSwgRDNERk1UX0EzMkIzMkczMlIzMkYpKTsKKworICAgIG1GbG9h
dDMyUmVuZGVyU3VwcG9ydCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFk
YXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9S
RU5ERVJUQVJHRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfQTMyQjMyRzMyUjMy
RikpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5DaGVj
a0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5G
b3JtYXQsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX0NVQkVURVhUVVJF
LCBEM0RGTVRfQTMyQjMyRzMyUjMyRikpOworCisgICAgaWYgKCFtRmxvYXQzMkZpbHRlclN1cHBv
cnQgJiYgIW1GbG9hdDMyUmVuZGVyU3VwcG9ydCkKKyAgICB7CisgICAgICAgIG1GbG9hdDMyVGV4
dHVyZVN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVy
LCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0EzMkIzMkczMlIzMkYpKSAmJgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdCht
QWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEQzRFJUWVBFX0NVQkVURVhUVVJFLCBEM0RGTVRfQTMyQjMyRzMyUjMyRikpOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRmxvYXQzMlRleHR1cmVTdXBwb3J0ID0gdHJ1
ZTsKKyAgICB9CisKKyAgICAvLyBDaGVjayAxNiBiaXQgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZSBz
dXBwb3J0CisgICAgbUZsb2F0MTZGaWx0ZXJTdXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVj
a0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5G
b3JtYXQsIEQzRFVTQUdFX1FVRVJZX0ZJTFRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX1RFWFRVUkUsIEQz
REZNVF9BMTZCMTZHMTZSMTZGKSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUND
RUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3Vy
cmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUVVFUllfRklMVEVSLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNE
UlRZUEVfQ1VCRVRFWFRVUkUsIEQzREZNVF9BMTZCMTZHMTZSMTZGKSk7CisKKyAgICBtRmxvYXQx
NlJlbmRlclN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFw
dGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUkVO
REVSVEFSR0VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0ExNkIxNkcxNlIxNkYp
KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tE
ZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9y
bWF0LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9DVUJFVEVYVFVSRSwg
RDNERk1UX0ExNkIxNkcxNlIxNkYpKTsKKworICAgIGlmICghbUZsb2F0MTZGaWx0ZXJTdXBwb3J0
ICYmICFtRmxvYXQxNlJlbmRlclN1cHBvcnQpCisgICAgeworICAgICAgICBtRmxvYXQxNlRleHR1
cmVTdXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwg
bURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQz
RFJUWVBFX1RFWFRVUkUsIEQzREZNVF9BMTZCMTZHMTZSMTZGKSkgJiYKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFk
YXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBEM0RSVFlQRV9DVUJFVEVYVFVSRSwgRDNERk1UX0ExNkIxNkcxNlIxNkYpKTsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbUZsb2F0MTZUZXh0dXJlU3VwcG9ydCA9IHRydWU7
CisgICAgfQorCisgICAgLy8gQ2hlY2sgRFhUIHRleHR1cmUgc3VwcG9ydAorICAgIG1EWFQxVGV4
dHVyZVN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVy
LCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVY
VFVSRSwgRDNERk1UX0RYVDEpKTsKKyAgICBtRFhUM1RleHR1cmVTdXBwb3J0ID0gU1VDQ0VFREVE
KG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnRE
aXNwbGF5TW9kZS5Gb3JtYXQsIDAsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9EWFQzKSk7Cisg
ICAgbURYVDVUZXh0dXJlU3VwcG9ydCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3Jt
YXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLCBE
M0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfRFhUNSkpOworCisgICAgLy8gQ2hlY2sgbHVtaW5hbmNl
W2FscGhhXSB0ZXh0dXJlIHN1cHBvcnQKKyAgICBtTHVtaW5hbmNlVGV4dHVyZVN1cHBvcnQgPSBT
VUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwg
Y3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0w4
KSk7CisgICAgbUx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDkt
PkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlN
b2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0E4TDgpKTsKKworICAgIGlu
aXRpYWxpemVEZXZpY2UoKTsKKworICAgIHJldHVybiBFR0xfU1VDQ0VTUzsKK30KKworLy8gZG8g
YW55IG9uZS10aW1lIGRldmljZSBpbml0aWFsaXphdGlvbgorLy8gTk9URTogdGhpcyBpcyBhbHNv
IG5lZWRlZCBhZnRlciBhIGRldmljZSBsb3N0L3Jlc2V0CisvLyB0byByZXNldCB0aGUgc2NlbmUg
c3RhdHVzIGFuZCBlbnN1cmUgdGhlIGRlZmF1bHQgc3RhdGVzIGFyZSByZXNldC4KK3ZvaWQgUmVu
ZGVyZXI5Ojppbml0aWFsaXplRGV2aWNlKCkKK3sKKyAgICAvLyBQZXJtYW5lbnQgbm9uLWRlZmF1
bHQgc3RhdGVzCisgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfUE9JTlRTUFJJVEVF
TkFCTEUsIFRSVUUpOworICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0xBU1RQSVhF
TCwgRkFMU0UpOworCisgICAgaWYgKG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVyVmVyc2lvbiA+PSBE
M0RQU19WRVJTSU9OKDMsIDApKQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfUE9JTlRTSVpFX01BWCwgKERXT1JEJiltRGV2aWNlQ2Fwcy5NYXhQb2ludFNpemUp
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19QT0lOVFNJWkVfTUFYLCAweDNGODAwMDAwKTsgICAvLyAxLjBmCisgICAgfQorCisg
ICAgbWFya0FsbFN0YXRlRGlydHkoKTsKKworICAgIG1TY2VuZVN0YXJ0ZWQgPSBmYWxzZTsKKwor
ICAgIEFTU0VSVCghbUJsaXQgJiYgIW1WZXJ0ZXhEYXRhTWFuYWdlciAmJiAhbUluZGV4RGF0YU1h
bmFnZXIpOworICAgIG1CbGl0ID0gbmV3IEJsaXQodGhpcyk7CisgICAgbVZlcnRleERhdGFNYW5h
Z2VyID0gbmV3IHJ4OjpWZXJ0ZXhEYXRhTWFuYWdlcih0aGlzKTsKKyAgICBtSW5kZXhEYXRhTWFu
YWdlciA9IG5ldyByeDo6SW5kZXhEYXRhTWFuYWdlcih0aGlzKTsKK30KKworRDNEUFJFU0VOVF9Q
QVJBTUVURVJTIFJlbmRlcmVyOTo6Z2V0RGVmYXVsdFByZXNlbnRQYXJhbWV0ZXJzKCkKK3sKKyAg
ICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRlcnMgPSB7MH07CisKKyAgICAv
LyBUaGUgZGVmYXVsdCBzd2FwIGNoYWluIGlzIG5ldmVyIGFjdHVhbGx5IHVzZWQuIFN1cmZhY2Ug
d2lsbCBjcmVhdGUgYSBuZXcgc3dhcCBjaGFpbiB3aXRoIHRoZSBwcm9wZXIgcGFyYW1ldGVycy4K
KyAgICBwcmVzZW50UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVuY2lsRm9ybWF0ID0gRDNERk1UX1VO
S05PV047CisgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckNvdW50ID0gMTsKKyAgICBw
cmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyRm9ybWF0ID0gRDNERk1UX1VOS05PV047CisgICAg
cHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoID0gMTsKKyAgICBwcmVzZW50UGFyYW1l
dGVycy5CYWNrQnVmZmVySGVpZ2h0ID0gMTsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5FbmFibGVB
dXRvRGVwdGhTdGVuY2lsID0gRkFMU0U7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuRmxhZ3MgPSAw
OworICAgIHByZXNlbnRQYXJhbWV0ZXJzLmhEZXZpY2VXaW5kb3cgPSBtRGV2aWNlV2luZG93Owor
ICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVhbGl0eSA9IDA7CisgICAgcHJlc2Vu
dFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVUeXBlID0gRDNETVVMVElTQU1QTEVfTk9ORTsKKyAgICBw
cmVzZW50UGFyYW1ldGVycy5QcmVzZW50YXRpb25JbnRlcnZhbCA9IEQzRFBSRVNFTlRfSU5URVJW
QUxfREVGQVVMVDsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5Td2FwRWZmZWN0ID0gRDNEU1dBUEVG
RkVDVF9ESVNDQVJEOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLldpbmRvd2VkID0gVFJVRTsKKwor
ICAgIHJldHVybiBwcmVzZW50UGFyYW1ldGVyczsKK30KKworaW50IFJlbmRlcmVyOTo6Z2VuZXJh
dGVDb25maWdzKENvbmZpZ0Rlc2MgKipjb25maWdEZXNjTGlzdCkKK3sKKyAgICBEM0RESVNQTEFZ
TU9ERSBjdXJyZW50RGlzcGxheU1vZGU7CisgICAgbUQzZDktPkdldEFkYXB0ZXJEaXNwbGF5TW9k
ZShtQWRhcHRlciwgJmN1cnJlbnREaXNwbGF5TW9kZSk7CisKKyAgICB1bnNpZ25lZCBpbnQgbnVt
UmVuZGVyRm9ybWF0cyA9IEFycmF5U2l6ZShSZW5kZXJUYXJnZXRGb3JtYXRzKTsKKyAgICB1bnNp
Z25lZCBpbnQgbnVtRGVwdGhGb3JtYXRzID0gQXJyYXlTaXplKERlcHRoU3RlbmNpbEZvcm1hdHMp
OworICAgICgqY29uZmlnRGVzY0xpc3QpID0gbmV3IENvbmZpZ0Rlc2NbbnVtUmVuZGVyRm9ybWF0
cyAqIG51bURlcHRoRm9ybWF0c107CisgICAgaW50IG51bUNvbmZpZ3MgPSAwOworCisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgZm9ybWF0SW5kZXggPSAwOyBmb3JtYXRJbmRleCA8IG51bVJlbmRlckZv
cm1hdHM7IGZvcm1hdEluZGV4KyspCisgICAgeworICAgICAgICBEM0RGT1JNQVQgcmVuZGVyVGFy
Z2V0Rm9ybWF0ID0gUmVuZGVyVGFyZ2V0Rm9ybWF0c1tmb3JtYXRJbmRleF07CisKKyAgICAgICAg
SFJFU1VMVCByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZp
Y2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQs
IEQzRFJUWVBFX1NVUkZBQ0UsIHJlbmRlclRhcmdldEZvcm1hdCk7CisKKyAgICAgICAgaWYgKFNV
Q0NFRURFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBkZXB0aFN0ZW5jaWxJbmRleCA9IDA7IGRlcHRoU3RlbmNpbEluZGV4IDwgbnVtRGVwdGhGb3Jt
YXRzOyBkZXB0aFN0ZW5jaWxJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IEQzREZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXQgPSBEZXB0aFN0ZW5jaWxGb3JtYXRzW2RlcHRo
U3RlbmNpbEluZGV4XTsKKyAgICAgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IEQzRF9PSzsK
KworICAgICAgICAgICAgICAgIGlmKGRlcHRoU3RlbmNpbEZvcm1hdCAhPSBEM0RGTVRfVU5LTk9X
TikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1EM2Q5
LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5
TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX0RFUFRIU1RFTkNJTCwgRDNEUlRZUEVfU1VSRkFDRSwgZGVw
dGhTdGVuY2lsRm9ybWF0KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBp
ZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBpZihkZXB0aFN0ZW5jaWxGb3JtYXQgIT0gRDNERk1UX1VOS05PV04pCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1EM2Q5LT5DaGVj
a0RlcHRoU3RlbmNpbE1hdGNoKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlN
b2RlLkZvcm1hdCwgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBkZXB0aFN0ZW5jaWxGb3JtYXQpOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChy
ZXN1bHQpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBD
b25maWdEZXNjIG5ld0NvbmZpZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5y
ZW5kZXJUYXJnZXRGb3JtYXQgPSBkM2Q5X2dsOjpDb252ZXJ0QmFja0J1ZmZlckZvcm1hdChyZW5k
ZXJUYXJnZXRGb3JtYXQpOworICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmRlcHRo
U3RlbmNpbEZvcm1hdCA9IGQzZDlfZ2w6OkNvbnZlcnREZXB0aFN0ZW5jaWxGb3JtYXQoZGVwdGhT
dGVuY2lsRm9ybWF0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5tdWx0aVNh
bXBsZSA9IDA7IC8vIEZJWE1FOiBlbnVtZXJhdGUgbXVsdGktc2FtcGxpbmcKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5ld0NvbmZpZy5mYXN0Q29uZmlnID0gKGN1cnJlbnREaXNwbGF5TW9kZS5G
b3JtYXQgPT0gcmVuZGVyVGFyZ2V0Rm9ybWF0KTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
KCpjb25maWdEZXNjTGlzdClbbnVtQ29uZmlncysrXSA9IG5ld0NvbmZpZzsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiBudW1Db25maWdzOworfQorCit2b2lkIFJlbmRlcmVyOTo6ZGVs
ZXRlQ29uZmlncyhDb25maWdEZXNjICpjb25maWdEZXNjTGlzdCkKK3sKKyAgICBkZWxldGUgW10g
KGNvbmZpZ0Rlc2NMaXN0KTsKK30KKwordm9pZCBSZW5kZXJlcjk6OnN0YXJ0U2NlbmUoKQorewor
ICAgIGlmICghbVNjZW5lU3RhcnRlZCkKKyAgICB7CisgICAgICAgIGxvbmcgcmVzdWx0ID0gbURl
dmljZS0+QmVnaW5TY2VuZSgpOworICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpIHsKKyAg
ICAgICAgICAgIC8vIFRoaXMgaXMgZGVmZW5zaXZlIGNoZWNraW5nIGFnYWluc3QgdGhlIGRldmlj
ZSBiZWluZworICAgICAgICAgICAgLy8gbG9zdCBhdCB1bmV4cGVjdGVkIHRpbWVzLgorICAgICAg
ICAgICAgbVNjZW5lU3RhcnRlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
UmVuZGVyZXI5OjplbmRTY2VuZSgpCit7CisgICAgaWYgKG1TY2VuZVN0YXJ0ZWQpCisgICAgewor
ICAgICAgICAvLyBFbmRTY2VuZSBjYW4gZmFpbCBpZiB0aGUgZGV2aWNlIHdhcyBsb3N0LCBmb3Ig
ZXhhbXBsZSBkdWUKKyAgICAgICAgLy8gdG8gYSBURFIgZHVyaW5nIGEgZHJhdyBjYWxsLgorICAg
ICAgICBtRGV2aWNlLT5FbmRTY2VuZSgpOworICAgICAgICBtU2NlbmVTdGFydGVkID0gZmFsc2U7
CisgICAgfQorfQorCit2b2lkIFJlbmRlcmVyOTo6c3luYyhib29sIGJsb2NrKQoreworICAgIEhS
RVNVTFQgcmVzdWx0OworCisgICAgSURpcmVjdDNEUXVlcnk5KiBxdWVyeSA9IGFsbG9jYXRlRXZl
bnRRdWVyeSgpOworICAgIGlmICghcXVlcnkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgcmVzdWx0ID0gcXVlcnktPklzc3VlKEQzRElTU1VFX0VORCk7CisgICAgQVNTRVJU
KFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIGRvCisgICAgeworICAgICAgICByZXN1bHQgPSBx
dWVyeS0+R2V0RGF0YShOVUxMLCAwLCBEM0RHRVREQVRBX0ZMVVNIKTsKKworICAgICAgICBpZihi
bG9jayAmJiByZXN1bHQgPT0gU19GQUxTRSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gS2Vl
cCBwb2xsaW5nLCBidXQgYWxsb3cgb3RoZXIgdGhyZWFkcyB0byBkbyBzb21ldGhpbmcgdXNlZnVs
IGZpcnN0CisgICAgICAgICAgICBTbGVlcCgwKTsKKyAgICAgICAgICAgIC8vIGV4cGxpY2l0bHkg
Y2hlY2sgZm9yIGRldmljZSBsb3NzCisgICAgICAgICAgICAvLyBzb21lIGRyaXZlcnMgc2VlbSB0
byByZXR1cm4gU19GQUxTRSBldmVuIGlmIHRoZSBkZXZpY2UgaXMgbG9zdAorICAgICAgICAgICAg
Ly8gaW5zdGVhZCBvZiBEM0RFUlJfREVWSUNFTE9TVCBsaWtlIHRoZXkgc2hvdWxkCisgICAgICAg
ICAgICBpZiAodGVzdERldmljZUxvc3QoZmFsc2UpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IEQzREVSUl9ERVZJQ0VMT1NUOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIHdoaWxlKGJsb2NrICYmIHJlc3VsdCA9PSBTX0ZBTFNFKTsKKworICAg
IGZyZWVFdmVudFF1ZXJ5KHF1ZXJ5KTsKKworICAgIGlmIChkM2Q5Ojppc0RldmljZUxvc3RFcnJv
cihyZXN1bHQpKQorICAgIHsKKyAgICAgICAgbm90aWZ5RGV2aWNlTG9zdCgpOworICAgIH0KK30K
KworU3dhcENoYWluICpSZW5kZXJlcjk6OmNyZWF0ZVN3YXBDaGFpbihIV05EIHdpbmRvdywgSEFO
RExFIHNoYXJlSGFuZGxlLCBHTGVudW0gYmFja0J1ZmZlckZvcm1hdCwgR0xlbnVtIGRlcHRoQnVm
ZmVyRm9ybWF0KQoreworICAgIHJldHVybiBuZXcgcng6OlN3YXBDaGFpbjkodGhpcywgd2luZG93
LCBzaGFyZUhhbmRsZSwgYmFja0J1ZmZlckZvcm1hdCwgZGVwdGhCdWZmZXJGb3JtYXQpOworfQor
CitJRGlyZWN0M0RRdWVyeTkqIFJlbmRlcmVyOTo6YWxsb2NhdGVFdmVudFF1ZXJ5KCkKK3sKKyAg
ICBJRGlyZWN0M0RRdWVyeTkgKnF1ZXJ5ID0gTlVMTDsKKworICAgIGlmIChtRXZlbnRRdWVyeVBv
b2wuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3Jl
YXRlUXVlcnkoRDNEUVVFUllUWVBFX0VWRU5ULCAmcXVlcnkpOworICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBxdWVyeSA9
IG1FdmVudFF1ZXJ5UG9vbC5iYWNrKCk7CisgICAgICAgIG1FdmVudFF1ZXJ5UG9vbC5wb3BfYmFj
aygpOworICAgIH0KKworICAgIHJldHVybiBxdWVyeTsKK30KKwordm9pZCBSZW5kZXJlcjk6OmZy
ZWVFdmVudFF1ZXJ5KElEaXJlY3QzRFF1ZXJ5OSogcXVlcnkpCit7CisgICAgaWYgKG1FdmVudFF1
ZXJ5UG9vbC5zaXplKCkgPiAxMDAwKQorICAgIHsKKyAgICAgICAgcXVlcnktPlJlbGVhc2UoKTsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbUV2ZW50UXVlcnlQb29sLnB1c2hfYmFj
ayhxdWVyeSk7CisgICAgfQorfQorCitJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICpSZW5kZXJlcjk6
OmNyZWF0ZVZlcnRleFNoYWRlcihjb25zdCBEV09SRCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgp
Cit7CisgICAgcmV0dXJuIG1WZXJ0ZXhTaGFkZXJDYWNoZS5jcmVhdGUoZnVuY3Rpb24sIGxlbmd0
aCk7Cit9CisKK0lEaXJlY3QzRFBpeGVsU2hhZGVyOSAqUmVuZGVyZXI5OjpjcmVhdGVQaXhlbFNo
YWRlcihjb25zdCBEV09SRCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgpCit7CisgICAgcmV0dXJu
IG1QaXhlbFNoYWRlckNhY2hlLmNyZWF0ZShmdW5jdGlvbiwgbGVuZ3RoKTsKK30KKworSFJFU1VM
VCBSZW5kZXJlcjk6OmNyZWF0ZVZlcnRleEJ1ZmZlcihVSU5UIExlbmd0aCwgRFdPUkQgVXNhZ2Us
IElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKipwcFZlcnRleEJ1ZmZlcikKK3sKKyAgICBEM0RQT09M
IFBvb2wgPSBnZXRCdWZmZXJQb29sKFVzYWdlKTsKKyAgICByZXR1cm4gbURldmljZS0+Q3JlYXRl
VmVydGV4QnVmZmVyKExlbmd0aCwgVXNhZ2UsIDAsIFBvb2wsIHBwVmVydGV4QnVmZmVyLCBOVUxM
KTsKK30KKworVmVydGV4QnVmZmVyICpSZW5kZXJlcjk6OmNyZWF0ZVZlcnRleEJ1ZmZlcigpCit7
CisgICAgcmV0dXJuIG5ldyBWZXJ0ZXhCdWZmZXI5KHRoaXMpOworfQorCitIUkVTVUxUIFJlbmRl
cmVyOTo6Y3JlYXRlSW5kZXhCdWZmZXIoVUlOVCBMZW5ndGgsIERXT1JEIFVzYWdlLCBEM0RGT1JN
QVQgRm9ybWF0LCBJRGlyZWN0M0RJbmRleEJ1ZmZlcjkgKipwcEluZGV4QnVmZmVyKQoreworICAg
IEQzRFBPT0wgUG9vbCA9IGdldEJ1ZmZlclBvb2woVXNhZ2UpOworICAgIHJldHVybiBtRGV2aWNl
LT5DcmVhdGVJbmRleEJ1ZmZlcihMZW5ndGgsIFVzYWdlLCBGb3JtYXQsIFBvb2wsIHBwSW5kZXhC
dWZmZXIsIE5VTEwpOworfQorCitJbmRleEJ1ZmZlciAqUmVuZGVyZXI5OjpjcmVhdGVJbmRleEJ1
ZmZlcigpCit7CisgICAgcmV0dXJuIG5ldyBJbmRleEJ1ZmZlcjkodGhpcyk7Cit9CisKK0J1ZmZl
clN0b3JhZ2UgKlJlbmRlcmVyOTo6Y3JlYXRlQnVmZmVyU3RvcmFnZSgpCit7CisgICAgcmV0dXJu
IG5ldyBCdWZmZXJTdG9yYWdlOSgpOworfQorCitRdWVyeUltcGwgKlJlbmRlcmVyOTo6Y3JlYXRl
UXVlcnkoR0xlbnVtIHR5cGUpCit7CisgICAgcmV0dXJuIG5ldyBRdWVyeTkodGhpcywgdHlwZSk7
Cit9CisKK0ZlbmNlSW1wbCAqUmVuZGVyZXI5OjpjcmVhdGVGZW5jZSgpCit7CisgICAgcmV0dXJu
IG5ldyBGZW5jZTkodGhpcyk7Cit9CisKK3ZvaWQgUmVuZGVyZXI5OjpzZXRTYW1wbGVyU3RhdGUo
Z2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRleCwgY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAm
c2FtcGxlclN0YXRlKQoreworICAgIGJvb2wgKmZvcmNlU2V0U2FtcGxlcnMgPSAodHlwZSA9PSBn
bDo6U0FNUExFUl9QSVhFTCkgPyBtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0ZXMgOiBtRm9yY2VT
ZXRWZXJ0ZXhTYW1wbGVyU3RhdGVzOworICAgIGdsOjpTYW1wbGVyU3RhdGUgKmFwcGxpZWRTYW1w
bGVycyA9ICh0eXBlID09IGdsOjpTQU1QTEVSX1BJWEVMKSA/IG1DdXJQaXhlbFNhbXBsZXJTdGF0
ZXM6IG1DdXJWZXJ0ZXhTYW1wbGVyU3RhdGVzOworCisgICAgaWYgKGZvcmNlU2V0U2FtcGxlcnNb
aW5kZXhdIHx8IG1lbWNtcCgmc2FtcGxlclN0YXRlLCAmYXBwbGllZFNhbXBsZXJzW2luZGV4XSwg
c2l6ZW9mKGdsOjpTYW1wbGVyU3RhdGUpKSAhPSAwKQorICAgIHsKKyAgICAgICAgaW50IGQzZFNh
bXBsZXJPZmZzZXQgPSAodHlwZSA9PSBnbDo6U0FNUExFUl9QSVhFTCkgPyAwIDogRDNEVkVSVEVY
VEVYVFVSRVNBTVBMRVIwOworICAgICAgICBpbnQgZDNkU2FtcGxlciA9IGluZGV4ICsgZDNkU2Ft
cGxlck9mZnNldDsKKworICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxl
ciwgRDNEU0FNUF9BRERSRVNTVSwgZ2xfZDNkOTo6Q29udmVydFRleHR1cmVXcmFwKHNhbXBsZXJT
dGF0ZS53cmFwUykpOworICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxl
ciwgRDNEU0FNUF9BRERSRVNTViwgZ2xfZDNkOTo6Q29udmVydFRleHR1cmVXcmFwKHNhbXBsZXJT
dGF0ZS53cmFwVCkpOworCisgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1w
bGVyLCBEM0RTQU1QX01BR0ZJTFRFUiwgZ2xfZDNkOTo6Q29udmVydE1hZ0ZpbHRlcihzYW1wbGVy
U3RhdGUubWFnRmlsdGVyLCBzYW1wbGVyU3RhdGUubWF4QW5pc290cm9weSkpOworICAgICAgICBE
M0RURVhUVVJFRklMVEVSVFlQRSBkM2RNaW5GaWx0ZXIsIGQzZE1pcEZpbHRlcjsKKyAgICAgICAg
Z2xfZDNkOTo6Q29udmVydE1pbkZpbHRlcihzYW1wbGVyU3RhdGUubWluRmlsdGVyLCAmZDNkTWlu
RmlsdGVyLCAmZDNkTWlwRmlsdGVyLCBzYW1wbGVyU3RhdGUubWF4QW5pc290cm9weSk7CisgICAg
ICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01JTkZJTFRF
UiwgZDNkTWluRmlsdGVyKTsKKyAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNh
bXBsZXIsIEQzRFNBTVBfTUlQRklMVEVSLCBkM2RNaXBGaWx0ZXIpOworICAgICAgICBtRGV2aWNl
LT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9NQVhNSVBMRVZFTCwgc2FtcGxl
clN0YXRlLmxvZE9mZnNldCk7CisgICAgICAgIGlmIChtU3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5p
c290cm9weSkKKyAgICAgICAgeworICAgICAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRl
KGQzZFNhbXBsZXIsIEQzRFNBTVBfTUFYQU5JU09UUk9QWSwgKERXT1JEKXNhbXBsZXJTdGF0ZS5t
YXhBbmlzb3Ryb3B5KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvcmNlU2V0U2FtcGxlcnNb
aW5kZXhdID0gZmFsc2U7CisgICAgYXBwbGllZFNhbXBsZXJzW2luZGV4XSA9IHNhbXBsZXJTdGF0
ZTsKK30KKwordm9pZCBSZW5kZXJlcjk6OnNldFRleHR1cmUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUs
IGludCBpbmRleCwgZ2w6OlRleHR1cmUgKnRleHR1cmUpCit7CisgICAgaW50IGQzZFNhbXBsZXJP
ZmZzZXQgPSAodHlwZSA9PSBnbDo6U0FNUExFUl9QSVhFTCkgPyAwIDogRDNEVkVSVEVYVEVYVFVS
RVNBTVBMRVIwOworICAgIGludCBkM2RTYW1wbGVyID0gaW5kZXggKyBkM2RTYW1wbGVyT2Zmc2V0
OworICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZDNkVGV4dHVyZSA9IE5VTEw7CisgICAgdW5z
aWduZWQgaW50IHNlcmlhbCA9IDA7CisgICAgYm9vbCBmb3JjZVNldFRleHR1cmUgPSBmYWxzZTsK
KworICAgIHVuc2lnbmVkIGludCAqYXBwbGllZFNlcmlhbHMgPSAodHlwZSA9PSBnbDo6U0FNUExF
Ul9QSVhFTCkgPyBtQ3VyUGl4ZWxUZXh0dXJlU2VyaWFscyA6IG1DdXJWZXJ0ZXhUZXh0dXJlU2Vy
aWFsczsKKworICAgIGlmICh0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UgKnRleFN0b3JhZ2UgPSB0ZXh0dXJlLT5nZXROYXRpdmVUZXh0dXJlKCk7CisgICAg
ICAgIGlmICh0ZXhTdG9yYWdlKQorICAgICAgICB7CisgICAgICAgICAgICBUZXh0dXJlU3RvcmFn
ZTkgKnN0b3JhZ2U5ID0gVGV4dHVyZVN0b3JhZ2U5OjptYWtlVGV4dHVyZVN0b3JhZ2U5KHRleFN0
b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICAgICAgICAgIGQzZFRleHR1cmUgPSBz
dG9yYWdlOS0+Z2V0QmFzZVRleHR1cmUoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBJZiB3ZSBn
ZXQgTlVMTCBiYWNrIGZyb20gZ2V0QmFzZVRleHR1cmUgaGVyZSwgc29tZXRoaW5nIHdlbnQgd3Jv
bmcKKyAgICAgICAgLy8gaW4gdGhlIHRleHR1cmUgY2xhc3MgYW5kIHdlJ3JlIHVuZXhwZWN0ZWRs
eSBtaXNzaW5nIHRoZSBkM2QgdGV4dHVyZQorICAgICAgICBBU1NFUlQoZDNkVGV4dHVyZSAhPSBO
VUxMKTsKKworICAgICAgICBzZXJpYWwgPSB0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCk7Cisg
ICAgICAgIGZvcmNlU2V0VGV4dHVyZSA9IHRleHR1cmUtPmhhc0RpcnR5SW1hZ2VzKCk7CisgICAg
fQorCisgICAgaWYgKGZvcmNlU2V0VGV4dHVyZSB8fCBhcHBsaWVkU2VyaWFsc1tpbmRleF0gIT0g
c2VyaWFsKQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZShkM2RTYW1wbGVyLCBk
M2RUZXh0dXJlKTsKKyAgICB9CisKKyAgICBhcHBsaWVkU2VyaWFsc1tpbmRleF0gPSBzZXJpYWw7
Cit9CisKK3ZvaWQgUmVuZGVyZXI5OjpzZXRSYXN0ZXJpemVyU3RhdGUoY29uc3QgZ2w6OlJhc3Rl
cml6ZXJTdGF0ZSAmcmFzdGVyU3RhdGUpCit7CisgICAgYm9vbCByYXN0ZXJTdGF0ZUNoYW5nZWQg
PSBtRm9yY2VTZXRSYXN0ZXJTdGF0ZSB8fCBtZW1jbXAoJnJhc3RlclN0YXRlLCAmbUN1clJhc3Rl
clN0YXRlLCBzaXplb2YoZ2w6OlJhc3Rlcml6ZXJTdGF0ZSkpICE9IDA7CisKKyAgICBpZiAocmFz
dGVyU3RhdGVDaGFuZ2VkKQorICAgIHsKKyAgICAgICAgLy8gU2V0IHRoZSBjdWxsIG1vZGUKKyAg
ICAgICAgaWYgKHJhc3RlclN0YXRlLmN1bGxGYWNlKQorICAgICAgICB7CisgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgZ2xfZDNkOTo6Q29udmVydEN1
bGxNb2RlKHJhc3RlclN0YXRlLmN1bGxNb2RlLCByYXN0ZXJTdGF0ZS5mcm9udEZhY2UpKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKHJhc3RlclN0YXRlLnBvbHlnb25PZmZzZXRGaWxsKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAobUN1ckRlcHRoU2l6ZSA+IDApCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0xPUEVTQ0FMRURFUFRIQklB
UywgKihEV09SRCopJnJhc3RlclN0YXRlLnBvbHlnb25PZmZzZXRGYWN0b3IpOworCisgICAgICAg
ICAgICAgICAgZmxvYXQgZGVwdGhCaWFzID0gbGRleHAocmFzdGVyU3RhdGUucG9seWdvbk9mZnNl
dFVuaXRzLCAtc3RhdGljX2Nhc3Q8aW50PihtQ3VyRGVwdGhTaXplKSk7CisgICAgICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVQVEhCSUFTLCAqKERXT1JEKikmZGVw
dGhCaWFzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NMT1BFU0NBTEVE
RVBUSEJJQVMsIDApOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
REVQVEhCSUFTLCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIG1DdXJSYXN0ZXJTdGF0ZSA9IHJh
c3RlclN0YXRlOworICAgIH0KKworICAgIG1Gb3JjZVNldFJhc3RlclN0YXRlID0gZmFsc2U7Cit9
CisKK3ZvaWQgUmVuZGVyZXI5OjpzZXRCbGVuZFN0YXRlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIsIGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRlLCBjb25zdCBnbDo6Q29sb3Ig
JmJsZW5kQ29sb3IsIHVuc2lnbmVkIGludCBzYW1wbGVNYXNrKQoreworICAgIGJvb2wgYmxlbmRT
dGF0ZUNoYW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0YXRlIHx8IG1lbWNtcCgmYmxlbmRTdGF0ZSwg
Jm1DdXJCbGVuZFN0YXRlLCBzaXplb2YoZ2w6OkJsZW5kU3RhdGUpKSAhPSAwOworICAgIGJvb2wg
YmxlbmRDb2xvckNoYW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0YXRlIHx8IG1lbWNtcCgmYmxlbmRD
b2xvciwgJm1DdXJCbGVuZENvbG9yLCBzaXplb2YoZ2w6OkNvbG9yKSkgIT0gMDsKKyAgICBib29s
IHNhbXBsZU1hc2tDaGFuZ2VkID0gbUZvcmNlU2V0QmxlbmRTdGF0ZSB8fCBzYW1wbGVNYXNrICE9
IG1DdXJTYW1wbGVNYXNrOworCisgICAgaWYgKGJsZW5kU3RhdGVDaGFuZ2VkIHx8IGJsZW5kQ29s
b3JDaGFuZ2VkKQorICAgIHsKKyAgICAgICAgaWYgKGJsZW5kU3RhdGUuYmxlbmQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRF
TkFCTEUsIFRSVUUpOworCisgICAgICAgICAgICBpZiAoYmxlbmRTdGF0ZS5zb3VyY2VCbGVuZFJH
QiAhPSBHTF9DT05TVEFOVF9BTFBIQSAmJiBibGVuZFN0YXRlLnNvdXJjZUJsZW5kUkdCICE9IEdM
X09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSAmJgorICAgICAgICAgICAgICAgIGJsZW5kU3RhdGUu
ZGVzdEJsZW5kUkdCICE9IEdMX0NPTlNUQU5UX0FMUEhBICYmIGJsZW5kU3RhdGUuZGVzdEJsZW5k
UkdCICE9IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVOREZBQ1RPUiwgZ2xf
ZDNkOTo6Q29udmVydENvbG9yKGJsZW5kQ29sb3IpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19CTEVOREZBQ1RPUiwgRDNEQ09MT1JfUkdCQShnbDo6dW5vcm08OD4oYmxl
bmRDb2xvci5hbHBoYSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGJsZW5kQ29sb3Iu
YWxwaGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4PihibGVuZENvbG9yLmFscGhhKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oYmxlbmRDb2xvci5hbHBoYSkpKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JD
QkxFTkQsIGdsX2QzZDk6OkNvbnZlcnRCbGVuZEZ1bmMoYmxlbmRTdGF0ZS5zb3VyY2VCbGVuZFJH
QikpOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVTVEJMRU5E
LCBnbF9kM2Q5OjpDb252ZXJ0QmxlbmRGdW5jKGJsZW5kU3RhdGUuZGVzdEJsZW5kUkdCKSk7Cisg
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVORE9QLCBnbF9kM2Q5
OjpDb252ZXJ0QmxlbmRPcChibGVuZFN0YXRlLmJsZW5kRXF1YXRpb25SR0IpKTsKKworICAgICAg
ICAgICAgaWYgKGJsZW5kU3RhdGUuc291cmNlQmxlbmRSR0IgIT0gYmxlbmRTdGF0ZS5zb3VyY2VC
bGVuZEFscGhhIHx8CisgICAgICAgICAgICAgICAgYmxlbmRTdGF0ZS5kZXN0QmxlbmRSR0IgIT0g
YmxlbmRTdGF0ZS5kZXN0QmxlbmRBbHBoYSB8fAorICAgICAgICAgICAgICAgIGJsZW5kU3RhdGUu
YmxlbmRFcXVhdGlvblJHQiAhPSBibGVuZFN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19T
RVBBUkFURUFMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOworCisgICAgICAgICAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JDQkxFTkRBTFBIQSwgZ2xfZDNkOTo6Q29udmVydEJs
ZW5kRnVuYyhibGVuZFN0YXRlLnNvdXJjZUJsZW5kQWxwaGEpKTsKKyAgICAgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ERVNUQkxFTkRBTFBIQSwgZ2xfZDNkOTo6Q29u
dmVydEJsZW5kRnVuYyhibGVuZFN0YXRlLmRlc3RCbGVuZEFscGhhKSk7CisgICAgICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRPUEFMUEhBLCBnbF9kM2Q5OjpD
b252ZXJ0QmxlbmRPcChibGVuZFN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NFUEFSQVRFQUxQSEFCTEVOREVOQUJMRSwgRkFM
U0UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJM
RSwgRkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGJsZW5kU3RhdGUuc2FtcGxlQWxw
aGFUb0NvdmVyYWdlKQorICAgICAgICB7CisgICAgICAgICAgICBGSVhNRSgiU2FtcGxlIGFscGhh
IHRvIGNvdmVyYWdlIGlzIHVuaW1wbGVtZW50ZWQuIik7CisgICAgICAgIH0KKworICAgICAgICAv
LyBTZXQgdGhlIGNvbG9yIG1hc2sKKyAgICAgICAgYm9vbCB6ZXJvQ29sb3JNYXNrQWxsb3dlZCA9
IGdldEFkYXB0ZXJWZW5kb3IoKSAhPSBWRU5ET1JfSURfQU1EOworICAgICAgICAvLyBBcHBhcmVu
dGx5IHNvbWUgQVRJIGNhcmRzIGhhdmUgYSBidWcgd2hlcmUgYSBkcmF3IHdpdGggYSB6ZXJvIGNv
bG9yCisgICAgICAgIC8vIHdyaXRlIG1hc2sgY2FuIGNhdXNlIGxhdGVyIGRyYXdzIHRvIGhhdmUg
aW5jb3JyZWN0IHJlc3VsdHMuIEluc3RlYWQsCisgICAgICAgIC8vIHNldCBhIG5vbnplcm8gY29s
b3Igd3JpdGUgbWFzayBidXQgbW9kaWZ5IHRoZSBibGVuZCBzdGF0ZSBzbyB0aGF0IG5vCisgICAg
ICAgIC8vIGRyYXdpbmcgaXMgZG9uZS4KKyAgICAgICAgLy8gaHR0cDovL2NvZGUuZ29vZ2xlLmNv
bS9wL2FuZ2xlcHJvamVjdC9pc3N1ZXMvZGV0YWlsP2lkPTE2OQorCisgICAgICAgIERXT1JEIGNv
bG9yTWFzayA9IGdsX2QzZDk6OkNvbnZlcnRDb2xvck1hc2soYmxlbmRTdGF0ZS5jb2xvck1hc2tS
ZWQsIGJsZW5kU3RhdGUuY29sb3JNYXNrR3JlZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRTdGF0ZS5jb2xvck1hc2tCbHVlLCBibGVu
ZFN0YXRlLmNvbG9yTWFza0FscGhhKTsKKyAgICAgICAgaWYgKGNvbG9yTWFzayA9PSAwICYmICF6
ZXJvQ29sb3JNYXNrQWxsb3dlZCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRW5hYmxlIGdy
ZWVuIGNoYW5uZWwsIGJ1dCBzZXQgYmxlbmRpbmcgc28gbm90aGluZyB3aWxsIGJlIGRyYXduLgor
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJM
RSwgRDNEQ09MT1JXUklURUVOQUJMRV9HUkVFTik7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsKKworICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JDQkxFTkQsIEQzREJMRU5EX1pFUk8pOwor
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVTVEJMRU5ELCBEM0RC
TEVORF9PTkUpOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxF
TkRPUCwgRDNEQkxFTkRPUF9BREQpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVO
QUJMRSwgY29sb3JNYXNrKTsKKyAgICAgICAgfQorCisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX0RJVEhFUkVOQUJMRSwgYmxlbmRTdGF0ZS5kaXRoZXIgPyBUUlVFIDogRkFM
U0UpOworCisgICAgICAgIG1DdXJCbGVuZFN0YXRlID0gYmxlbmRTdGF0ZTsKKyAgICAgICAgbUN1
ckJsZW5kQ29sb3IgPSBibGVuZENvbG9yOworICAgIH0KKworICAgIGlmIChzYW1wbGVNYXNrQ2hh
bmdlZCkKKyAgICB7CisgICAgICAgIC8vIFNldCB0aGUgbXVsdGlzYW1wbGUgbWFzaworICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRUFOVElBTElBUywgVFJV
RSk7CisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExFTUFT
Sywgc3RhdGljX2Nhc3Q8RFdPUkQ+KHNhbXBsZU1hc2spKTsKKworICAgICAgICBtQ3VyU2FtcGxl
TWFzayA9IHNhbXBsZU1hc2s7CisgICAgfQorCisgICAgbUZvcmNlU2V0QmxlbmRTdGF0ZSA9IGZh
bHNlOworfQorCit2b2lkIFJlbmRlcmVyOTo6c2V0RGVwdGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6
OkRlcHRoU3RlbmNpbFN0YXRlICZkZXB0aFN0ZW5jaWxTdGF0ZSwgaW50IHN0ZW5jaWxSZWYsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0ZW5jaWxCYWNrUmVmLCBi
b29sIGZyb250RmFjZUNDVykKK3sKKyAgICBib29sIGRlcHRoU3RlbmNpbFN0YXRlQ2hhbmdlZCA9
IG1Gb3JjZVNldERlcHRoU3RlbmNpbFN0YXRlIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtZW1jbXAoJmRlcHRoU3RlbmNpbFN0YXRlLCAmbUN1ckRlcHRoU3RlbmNpbFN0
YXRlLCBzaXplb2YoZ2w6OkRlcHRoU3RlbmNpbFN0YXRlKSkgIT0gMDsKKyAgICBib29sIHN0ZW5j
aWxSZWZDaGFuZ2VkID0gbUZvcmNlU2V0RGVwdGhTdGVuY2lsU3RhdGUgfHwgc3RlbmNpbFJlZiAh
PSBtQ3VyU3RlbmNpbFJlZiB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVuY2ls
QmFja1JlZiAhPSBtQ3VyU3RlbmNpbEJhY2tSZWY7CisgICAgYm9vbCBmcm9udEZhY2VDQ1dDaGFu
Z2VkID0gbUZvcmNlU2V0RGVwdGhTdGVuY2lsU3RhdGUgfHwgZnJvbnRGYWNlQ0NXICE9IG1DdXJG
cm9udEZhY2VDQ1c7CisKKyAgICBpZiAoZGVwdGhTdGVuY2lsU3RhdGVDaGFuZ2VkKQorICAgIHsK
KyAgICAgICAgaWYgKGRlcHRoU3RlbmNpbFN0YXRlLmRlcHRoVGVzdCkKKyAgICAgICAgeworICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRDNEWkJfVFJV
RSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRlVOQywgZ2xf
ZDNkOTo6Q29udmVydENvbXBhcmlzb24oZGVwdGhTdGVuY2lsU3RhdGUuZGVwdGhGdW5jKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBEM0RaQl9GQUxTRSk7CisgICAgICAgIH0KKwor
ICAgICAgICBtQ3VyRGVwdGhTdGVuY2lsU3RhdGUgPSBkZXB0aFN0ZW5jaWxTdGF0ZTsKKyAgICB9
CisKKyAgICBpZiAoZGVwdGhTdGVuY2lsU3RhdGVDaGFuZ2VkIHx8IHN0ZW5jaWxSZWZDaGFuZ2Vk
IHx8IGZyb250RmFjZUNDV0NoYW5nZWQpCisgICAgeworICAgICAgICBpZiAoZGVwdGhTdGVuY2ls
U3RhdGUuc3RlbmNpbFRlc3QgJiYgbUN1clN0ZW5jaWxTaXplID4gMCkKKyAgICAgICAgeworICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgVFJV
RSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19UV09TSURFRFNU
RU5DSUxNT0RFLCBUUlVFKTsKKworICAgICAgICAgICAgLy8gRklYTUU6IFVuc3VwcG9ydGVkIGJ5
IEQzRDkKKyAgICAgICAgICAgIGNvbnN0IEQzRFJFTkRFUlNUQVRFVFlQRSBEM0RSU19DQ1dfU1RF
TkNJTFJFRiA9IEQzRFJTX1NURU5DSUxSRUY7CisgICAgICAgICAgICBjb25zdCBEM0RSRU5ERVJT
VEFURVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxNQVNLID0gRDNEUlNfU1RFTkNJTE1BU0s7CisgICAg
ICAgICAgICBjb25zdCBEM0RSRU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxXUklURU1B
U0sgPSBEM0RSU19TVEVOQ0lMV1JJVEVNQVNLOworICAgICAgICAgICAgaWYgKGRlcHRoU3RlbmNp
bFN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sgIT0gZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbEJhY2tX
cml0ZW1hc2sgfHwKKyAgICAgICAgICAgICAgICBzdGVuY2lsUmVmICE9IHN0ZW5jaWxCYWNrUmVm
IHx8CisgICAgICAgICAgICAgICAgZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbE1hc2sgIT0gZGVw
dGhTdGVuY2lsU3RhdGUuc3RlbmNpbEJhY2tNYXNrKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIEVSUigiU2VwYXJhdGUgZnJvbnQvYmFjayBzdGVuY2lsIHdyaXRlbWFza3MsIHJlZmVy
ZW5jZSB2YWx1ZXMsIG9yIHN0ZW5jaWwgbWFzayB2YWx1ZXMgYXJlIGludmFsaWQgdW5kZXIgV2Vi
R0wuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGdldCB0aGUgbWF4aW11bSBz
aXplIG9mIHRoZSBzdGVuY2lsIHJlZgorICAgICAgICAgICAgdW5zaWduZWQgaW50IG1heFN0ZW5j
aWwgPSAoMSA8PCBtQ3VyU3RlbmNpbFNpemUpIC0gMTsKKworICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoZnJvbnRGYWNlQ0NXID8gRDNEUlNfU1RFTkNJTFdSSVRFTUFTSyA6IEQz
RFJTX0NDV19TVEVOQ0lMV1JJVEVNQVNLLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbFdyaXRlbWFzayk7CisgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShmcm9udEZhY2VDQ1cgPyBEM0RSU19TVEVOQ0lMRlVOQyA6
IEQzRFJTX0NDV19TVEVOQ0lMRlVOQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsX2QzZDk6OkNvbnZlcnRDb21wYXJpc29uKGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxG
dW5jKSk7CisKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGZyb250RmFjZUND
VyA/IEQzRFJTX1NURU5DSUxSRUYgOiBEM0RSU19DQ1dfU1RFTkNJTFJFRiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChzdGVuY2lsUmVmIDwgKGludCltYXhTdGVuY2lsKSA/
IHN0ZW5jaWxSZWYgOiBtYXhTdGVuY2lsKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKGZyb250RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxNQVNLIDogRDNEUlNfQ0NXX1NURU5D
SUxNQVNLLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGhTdGVuY2ls
U3RhdGUuc3RlbmNpbE1hc2spOworCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShmcm9udEZhY2VDQ1cgPyBEM0RSU19TVEVOQ0lMRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMRkFJ
TCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRT
dGVuY2lsT3AoZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbEZhaWwpKTsKKyAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKGZyb250RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxaRkFJTCA6
IEQzRFJTX0NDV19TVEVOQ0lMWkZBSUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbF9kM2Q5OjpDb252ZXJ0U3RlbmNpbE9wKGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxQ
YXNzRGVwdGhGYWlsKSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShmcm9u
dEZhY2VDQ1cgPyBEM0RSU19TVEVOQ0lMUEFTUyA6IEQzRFJTX0NDV19TVEVOQ0lMUEFTUywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRTdGVuY2ls
T3AoZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MpKTsKKworICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoIWZyb250RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxX
UklURU1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTFdSSVRFTUFTSywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNr
KTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKCFmcm9udEZhY2VDQ1cgPyBE
M0RSU19TVEVOQ0lMRlVOQyA6IEQzRFJTX0NDV19TVEVOQ0lMRlVOQywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRDb21wYXJpc29uKGRlcHRoU3Rl
bmNpbFN0YXRlLnN0ZW5jaWxCYWNrRnVuYykpOworCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZSghZnJvbnRGYWNlQ0NXID8gRDNEUlNfU1RFTkNJTFJFRiA6IEQzRFJTX0NDV19T
VEVOQ0lMUkVGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0ZW5jaWxC
YWNrUmVmIDwgKGludCltYXhTdGVuY2lsKSA/IHN0ZW5jaWxCYWNrUmVmIDogbWF4U3RlbmNpbCk7
CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZSghZnJvbnRGYWNlQ0NXID8gRDNE
UlNfU1RFTkNJTE1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTE1BU0ssCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsQmFja01hc2spOwor
CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZSghZnJvbnRGYWNlQ0NXID8gRDNE
UlNfU1RFTkNJTEZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTEZBSUwsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbF9kM2Q5OjpDb252ZXJ0U3RlbmNpbE9wKGRlcHRoU3RlbmNp
bFN0YXRlLnN0ZW5jaWxCYWNrRmFpbCkpOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoIWZyb250RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxaRkFJTCA6IEQzRFJTX0NDV19TVEVO
Q0lMWkZBSUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9kM2Q5OjpD
b252ZXJ0U3RlbmNpbE9wKGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFp
bCkpOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoIWZyb250RmFjZUNDVyA/
IEQzRFJTX1NURU5DSUxQQVNTIDogRDNEUlNfQ0NXX1NURU5DSUxQQVNTLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6Q29udmVydFN0ZW5jaWxPcChkZXB0aFN0
ZW5jaWxTdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MpKTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX1NURU5DSUxFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX1pXUklURUVOQUJMRSwgZGVwdGhTdGVuY2lsU3RhdGUuZGVw
dGhNYXNrID8gVFJVRSA6IEZBTFNFKTsKKworICAgICAgICBtQ3VyU3RlbmNpbFJlZiA9IHN0ZW5j
aWxSZWY7CisgICAgICAgIG1DdXJTdGVuY2lsQmFja1JlZiA9IHN0ZW5jaWxCYWNrUmVmOworICAg
ICAgICBtQ3VyRnJvbnRGYWNlQ0NXID0gZnJvbnRGYWNlQ0NXOworICAgIH0KKworICAgIG1Gb3Jj
ZVNldERlcHRoU3RlbmNpbFN0YXRlID0gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyZXI5OjpzZXRT
Y2lzc29yUmVjdGFuZ2xlKGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNjaXNzb3IsIGJvb2wgZW5hYmxl
ZCkKK3sKKyAgICBib29sIHNjaXNzb3JDaGFuZ2VkID0gbUZvcmNlU2V0U2Npc3NvciB8fAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBtZW1jbXAoJnNjaXNzb3IsICZtQ3VyU2Npc3Nvciwgc2l6
ZW9mKGdsOjpSZWN0YW5nbGUpKSAhPSAwIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgIGVu
YWJsZWQgIT0gbVNjaXNzb3JFbmFibGVkOworCisgICAgaWYgKHNjaXNzb3JDaGFuZ2VkKQorICAg
IHsKKyAgICAgICAgaWYgKGVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJFQ1QgcmVj
dDsKKyAgICAgICAgICAgIHJlY3QubGVmdCA9IGdsOjpjbGFtcChzY2lzc29yLngsIDAsIHN0YXRp
Y19jYXN0PGludD4obVJlbmRlclRhcmdldERlc2Mud2lkdGgpKTsKKyAgICAgICAgICAgIHJlY3Qu
dG9wID0gZ2w6OmNsYW1wKHNjaXNzb3IueSwgMCwgc3RhdGljX2Nhc3Q8aW50PihtUmVuZGVyVGFy
Z2V0RGVzYy5oZWlnaHQpKTsKKyAgICAgICAgICAgIHJlY3QucmlnaHQgPSBnbDo6Y2xhbXAoc2Np
c3Nvci54ICsgc2Npc3Nvci53aWR0aCwgMCwgc3RhdGljX2Nhc3Q8aW50PihtUmVuZGVyVGFyZ2V0
RGVzYy53aWR0aCkpOworICAgICAgICAgICAgcmVjdC5ib3R0b20gPSBnbDo6Y2xhbXAoc2Npc3Nv
ci55ICsgc2Npc3Nvci5oZWlnaHQsIDAsIHN0YXRpY19jYXN0PGludD4obVJlbmRlclRhcmdldERl
c2MuaGVpZ2h0KSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRTY2lzc29yUmVjdCgmcmVjdCk7
CisgICAgICAgIH0KKworICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TQ0lT
U09SVEVTVEVOQUJMRSwgZW5hYmxlZCA/IFRSVUUgOiBGQUxTRSk7CisKKyAgICAgICAgbVNjaXNz
b3JFbmFibGVkID0gZW5hYmxlZDsKKyAgICAgICAgbUN1clNjaXNzb3IgPSBzY2lzc29yOworICAg
IH0KKworICAgIG1Gb3JjZVNldFNjaXNzb3IgPSBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJlcjk6
OnNldFZpZXdwb3J0KGNvbnN0IGdsOjpSZWN0YW5nbGUgJnZpZXdwb3J0LCBmbG9hdCB6TmVhciwg
ZmxvYXQgekZhciwgR0xlbnVtIGRyYXdNb2RlLCBHTGVudW0gZnJvbnRGYWNlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgaWdub3JlVmlld3BvcnQpCit7CisgICAgZ2w6OlJlY3Rh
bmdsZSBhY3R1YWxWaWV3cG9ydCA9IHZpZXdwb3J0OworICAgIGZsb2F0IGFjdHVhbFpOZWFyID0g
Z2w6OmNsYW1wMDEoek5lYXIpOworICAgIGZsb2F0IGFjdHVhbFpGYXIgPSBnbDo6Y2xhbXAwMSh6
RmFyKTsKKyAgICBpZiAoaWdub3JlVmlld3BvcnQpCisgICAgeworICAgICAgICBhY3R1YWxWaWV3
cG9ydC54ID0gMDsKKyAgICAgICAgYWN0dWFsVmlld3BvcnQueSA9IDA7CisgICAgICAgIGFjdHVh
bFZpZXdwb3J0LndpZHRoID0gbVJlbmRlclRhcmdldERlc2Mud2lkdGg7CisgICAgICAgIGFjdHVh
bFZpZXdwb3J0LmhlaWdodCA9IG1SZW5kZXJUYXJnZXREZXNjLmhlaWdodDsKKyAgICAgICAgYWN0
dWFsWk5lYXIgPSAwLjBmOworICAgICAgICBhY3R1YWxaRmFyID0gMS4wZjsKKyAgICB9CisKKyAg
ICBEM0RWSUVXUE9SVDkgZHhWaWV3cG9ydDsKKyAgICBkeFZpZXdwb3J0LlggPSBnbDo6Y2xhbXAo
YWN0dWFsVmlld3BvcnQueCwgMCwgc3RhdGljX2Nhc3Q8aW50PihtUmVuZGVyVGFyZ2V0RGVzYy53
aWR0aCkpOworICAgIGR4Vmlld3BvcnQuWSA9IGdsOjpjbGFtcChhY3R1YWxWaWV3cG9ydC55LCAw
LCBzdGF0aWNfY2FzdDxpbnQ+KG1SZW5kZXJUYXJnZXREZXNjLmhlaWdodCkpOworICAgIGR4Vmll
d3BvcnQuV2lkdGggPSBnbDo6Y2xhbXAoYWN0dWFsVmlld3BvcnQud2lkdGgsIDAsIHN0YXRpY19j
YXN0PGludD4obVJlbmRlclRhcmdldERlc2Mud2lkdGgpIC0gc3RhdGljX2Nhc3Q8aW50PihkeFZp
ZXdwb3J0LlgpKTsKKyAgICBkeFZpZXdwb3J0LkhlaWdodCA9IGdsOjpjbGFtcChhY3R1YWxWaWV3
cG9ydC5oZWlnaHQsIDAsIHN0YXRpY19jYXN0PGludD4obVJlbmRlclRhcmdldERlc2MuaGVpZ2h0
KSAtIHN0YXRpY19jYXN0PGludD4oZHhWaWV3cG9ydC5ZKSk7CisgICAgZHhWaWV3cG9ydC5NaW5a
ID0gYWN0dWFsWk5lYXI7CisgICAgZHhWaWV3cG9ydC5NYXhaID0gYWN0dWFsWkZhcjsKKworICAg
IGlmIChkeFZpZXdwb3J0LldpZHRoIDw9IDAgfHwgZHhWaWV3cG9ydC5IZWlnaHQgPD0gMCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBOb3RoaW5nIHRvIHJlbmRlcgorICAgIH0K
KworICAgIGZsb2F0IGRlcHRoRnJvbnQgPSAhZ2w6OklzVHJpYW5nbGVNb2RlKGRyYXdNb2RlKSA/
IDAuMGYgOiAoZnJvbnRGYWNlID09IEdMX0NDVyA/IDEuMGYgOiAtMS4wZik7CisKKyAgICBib29s
IHZpZXdwb3J0Q2hhbmdlZCA9IG1Gb3JjZVNldFZpZXdwb3J0IHx8IG1lbWNtcCgmYWN0dWFsVmll
d3BvcnQsICZtQ3VyVmlld3BvcnQsIHNpemVvZihnbDo6UmVjdGFuZ2xlKSkgIT0gMCB8fAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsWk5lYXIgIT0gbUN1ck5lYXIgfHwgYWN0dWFs
WkZhciAhPSBtQ3VyRmFyIHx8IG1DdXJEZXB0aEZyb250ICE9IGRlcHRoRnJvbnQ7CisgICAgaWYg
KHZpZXdwb3J0Q2hhbmdlZCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFZpZXdwb3J0KCZk
eFZpZXdwb3J0KTsKKworICAgICAgICBtQ3VyVmlld3BvcnQgPSBhY3R1YWxWaWV3cG9ydDsKKyAg
ICAgICAgbUN1ck5lYXIgPSBhY3R1YWxaTmVhcjsKKyAgICAgICAgbUN1ckZhciA9IGFjdHVhbFpG
YXI7CisgICAgICAgIG1DdXJEZXB0aEZyb250ID0gZGVwdGhGcm9udDsKKworICAgICAgICBkeF9W
ZXJ0ZXhDb25zdGFudHMgdmMgPSB7MH07CisgICAgICAgIGR4X1BpeGVsQ29uc3RhbnRzIHBjID0g
ezB9OworCisgICAgICAgIHZjLnZpZXdBZGp1c3RbMF0gPSAoZmxvYXQpKChhY3R1YWxWaWV3cG9y
dC53aWR0aCAtIChpbnQpZHhWaWV3cG9ydC5XaWR0aCkgKyAyICogKGFjdHVhbFZpZXdwb3J0Lngg
LSAoaW50KWR4Vmlld3BvcnQuWCkgLSAxKSAvIGR4Vmlld3BvcnQuV2lkdGg7CisgICAgICAgIHZj
LnZpZXdBZGp1c3RbMV0gPSAoZmxvYXQpKChhY3R1YWxWaWV3cG9ydC5oZWlnaHQgLSAoaW50KWR4
Vmlld3BvcnQuSGVpZ2h0KSArIDIgKiAoYWN0dWFsVmlld3BvcnQueSAtIChpbnQpZHhWaWV3cG9y
dC5ZKSAtIDEpIC8gZHhWaWV3cG9ydC5IZWlnaHQ7CisgICAgICAgIHZjLnZpZXdBZGp1c3RbMl0g
PSAoZmxvYXQpYWN0dWFsVmlld3BvcnQud2lkdGggLyBkeFZpZXdwb3J0LldpZHRoOworICAgICAg
ICB2Yy52aWV3QWRqdXN0WzNdID0gKGZsb2F0KWFjdHVhbFZpZXdwb3J0LmhlaWdodCAvIGR4Vmll
d3BvcnQuSGVpZ2h0OworCisgICAgICAgIHBjLnZpZXdDb29yZHNbMF0gPSBhY3R1YWxWaWV3cG9y
dC53aWR0aCAgKiAwLjVmOworICAgICAgICBwYy52aWV3Q29vcmRzWzFdID0gYWN0dWFsVmlld3Bv
cnQuaGVpZ2h0ICogMC41ZjsKKyAgICAgICAgcGMudmlld0Nvb3Jkc1syXSA9IGFjdHVhbFZpZXdw
b3J0LnggKyAoYWN0dWFsVmlld3BvcnQud2lkdGggICogMC41Zik7CisgICAgICAgIHBjLnZpZXdD
b29yZHNbM10gPSBhY3R1YWxWaWV3cG9ydC55ICsgKGFjdHVhbFZpZXdwb3J0LmhlaWdodCAqIDAu
NWYpOworCisgICAgICAgIHBjLmRlcHRoRnJvbnRbMF0gPSAoYWN0dWFsWkZhciAtIGFjdHVhbFpO
ZWFyKSAqIDAuNWY7CisgICAgICAgIHBjLmRlcHRoRnJvbnRbMV0gPSAoYWN0dWFsWk5lYXIgKyBh
Y3R1YWxaRmFyKSAqIDAuNWY7CisgICAgICAgIHBjLmRlcHRoRnJvbnRbMl0gPSBkZXB0aEZyb250
OworCisgICAgICAgIHZjLmRlcHRoUmFuZ2VbMF0gPSBhY3R1YWxaTmVhcjsKKyAgICAgICAgdmMu
ZGVwdGhSYW5nZVsxXSA9IGFjdHVhbFpGYXI7CisgICAgICAgIHZjLmRlcHRoUmFuZ2VbMl0gPSBh
Y3R1YWxaRmFyIC0gYWN0dWFsWk5lYXI7CisKKyAgICAgICAgcGMuZGVwdGhSYW5nZVswXSA9IGFj
dHVhbFpOZWFyOworICAgICAgICBwYy5kZXB0aFJhbmdlWzFdID0gYWN0dWFsWkZhcjsKKyAgICAg
ICAgcGMuZGVwdGhSYW5nZVsyXSA9IGFjdHVhbFpGYXIgLSBhY3R1YWxaTmVhcjsKKworICAgICAg
ICBpZiAobWVtY21wKCZ2YywgJm1WZXJ0ZXhDb25zdGFudHMsIHNpemVvZihkeF9WZXJ0ZXhDb25z
dGFudHMpKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBtVmVydGV4Q29uc3RhbnRzID0g
dmM7CisgICAgICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChtZW1jbXAoJnBjLCAmbVBpeGVsQ29uc3RhbnRzLCBzaXplb2YoZHhfUGl4ZWxD
b25zdGFudHMpKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBtUGl4ZWxDb25zdGFudHMg
PSBwYzsKKyAgICAgICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgbUZvcmNlU2V0Vmlld3BvcnQgPSBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBSZW5kZXJlcjk6OmFwcGx5UHJpbWl0aXZlVHlwZShHTGVudW0gbW9kZSwgR0xz
aXplaSBjb3VudCkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpCisgICAgeworICAgICAgY2FzZSBHTF9Q
T0lOVFM6CisgICAgICAgIG1QcmltaXRpdmVUeXBlID0gRDNEUFRfUE9JTlRMSVNUOworICAgICAg
ICBtUHJpbWl0aXZlQ291bnQgPSBjb3VudDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X0xJTkVTOgorICAgICAgICBtUHJpbWl0aXZlVHlwZSA9IEQzRFBUX0xJTkVMSVNUOworICAgICAg
ICBtUHJpbWl0aXZlQ291bnQgPSBjb3VudCAvIDI7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9MSU5FX0xPT1A6CisgICAgICAgIG1QcmltaXRpdmVUeXBlID0gRDNEUFRfTElORVNUUklQ
OworICAgICAgICBtUHJpbWl0aXZlQ291bnQgPSBjb3VudCAtIDE7ICAgLy8gRDNEIGRvZXNuJ3Qg
c3VwcG9ydCBsaW5lIGxvb3BzLCBzbyB3ZSBkcmF3IHRoZSBsYXN0IGxpbmUgc2VwYXJhdGVseQor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTElORV9TVFJJUDoKKyAgICAgICAgbVByaW1p
dGl2ZVR5cGUgPSBEM0RQVF9MSU5FU1RSSVA7CisgICAgICAgIG1QcmltaXRpdmVDb3VudCA9IGNv
dW50IC0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RSSUFOR0xFUzoKKyAgICAg
ICAgbVByaW1pdGl2ZVR5cGUgPSBEM0RQVF9UUklBTkdMRUxJU1Q7CisgICAgICAgIG1QcmltaXRp
dmVDb3VudCA9IGNvdW50IC8gMzsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RSSUFO
R0xFX1NUUklQOgorICAgICAgICBtUHJpbWl0aXZlVHlwZSA9IEQzRFBUX1RSSUFOR0xFU1RSSVA7
CisgICAgICAgIG1QcmltaXRpdmVDb3VudCA9IGNvdW50IC0gMjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX1RSSUFOR0xFX0ZBTjoKKyAgICAgICAgbVByaW1pdGl2ZVR5cGUgPSBEM0RQ
VF9UUklBTkdMRUZBTjsKKyAgICAgICAgbVByaW1pdGl2ZUNvdW50ID0gY291bnQgLSAyOworICAg
ICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNLCBmYWxzZSk7CisgICAgfQorCisgICAgcmV0dXJuIG1QcmltaXRpdmVDb3Vu
dCA+IDA7Cit9CisKKworZ2w6OlJlbmRlcmJ1ZmZlciAqUmVuZGVyZXI5OjpnZXROdWxsQ29sb3Ji
dWZmZXIoZ2w6OlJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIpCit7CisgICAgaWYgKCFkZXB0aGJ1
ZmZlcikKKyAgICB7CisgICAgICAgIEVSUigiVW5leHBlY3RlZCBudWxsIGRlcHRoYnVmZmVyIGZv
ciBkZXB0aC1vbmx5IEZCTy4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAg
R0xzaXplaSB3aWR0aCAgPSBkZXB0aGJ1ZmZlci0+Z2V0V2lkdGgoKTsKKyAgICBHTHNpemVpIGhl
aWdodCA9IGRlcHRoYnVmZmVyLT5nZXRIZWlnaHQoKTsKKworICAgIC8vIHNlYXJjaCBjYWNoZWQg
bnVsbGNvbG9yYnVmZmVycworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX05VTExfQ09MT1JC
VUZGRVJfQ0FDSEVfRU5UUklFUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1OdWxsQ29sb3Ji
dWZmZXJDYWNoZVtpXS5idWZmZXIgIT0gTlVMTCAmJgorICAgICAgICAgICAgbU51bGxDb2xvcmJ1
ZmZlckNhY2hlW2ldLndpZHRoID09IHdpZHRoICYmCisgICAgICAgICAgICBtTnVsbENvbG9yYnVm
ZmVyQ2FjaGVbaV0uaGVpZ2h0ID09IGhlaWdodCkKKyAgICAgICAgeworICAgICAgICAgICAgbU51
bGxDb2xvcmJ1ZmZlckNhY2hlW2ldLmxydUNvdW50ID0gKyttTWF4TnVsbENvbG9yYnVmZmVyTFJV
OworICAgICAgICAgICAgcmV0dXJuIG1OdWxsQ29sb3JidWZmZXJDYWNoZVtpXS5idWZmZXI7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBnbDo6UmVuZGVyYnVmZmVyICpudWxsYnVmZmVyID0gbmV3
IGdsOjpSZW5kZXJidWZmZXIodGhpcywgMCwgbmV3IGdsOjpDb2xvcmJ1ZmZlcih0aGlzLCB3aWR0
aCwgaGVpZ2h0LCBHTF9OT05FLCAwKSk7CisKKyAgICAvLyBhZGQgbnVsbGJ1ZmZlciB0byB0aGUg
Y2FjaGUKKyAgICBOdWxsQ29sb3JidWZmZXJDYWNoZUVudHJ5ICpvbGRlc3QgPSAmbU51bGxDb2xv
cmJ1ZmZlckNhY2hlWzBdOworICAgIGZvciAoaW50IGkgPSAxOyBpIDwgTlVNX05VTExfQ09MT1JC
VUZGRVJfQ0FDSEVfRU5UUklFUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1OdWxsQ29sb3Ji
dWZmZXJDYWNoZVtpXS5scnVDb3VudCA8IG9sZGVzdC0+bHJ1Q291bnQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG9sZGVzdCA9ICZtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV07CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBkZWxldGUgb2xkZXN0LT5idWZmZXI7CisgICAgb2xkZXN0LT5idWZmZXIg
PSBudWxsYnVmZmVyOworICAgIG9sZGVzdC0+bHJ1Q291bnQgPSArK21NYXhOdWxsQ29sb3JidWZm
ZXJMUlU7CisgICAgb2xkZXN0LT53aWR0aCA9IHdpZHRoOworICAgIG9sZGVzdC0+aGVpZ2h0ID0g
aGVpZ2h0OworCisgICAgcmV0dXJuIG51bGxidWZmZXI7Cit9CisKK2Jvb2wgUmVuZGVyZXI5Ojph
cHBseVJlbmRlclRhcmdldChnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyKQoreworICAgIC8v
IGlmIHRoZXJlIGlzIG5vIGNvbG9yIGF0dGFjaG1lbnQgd2UgbXVzdCBzeW50aGVzaXplIGEgTlVM
TCBjb2xvcmF0dGFjaG1lbnQKKyAgICAvLyB0byBrZWVwIHRoZSBEM0QgcnVudGltZSBoYXBweS4g
IFRoaXMgc2hvdWxkIG9ubHkgYmUgcG9zc2libGUgaWYgZGVwdGggdGV4dHVyaW5nLgorICAgIGds
OjpSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9IE5VTEw7CisgICAgaWYgKGZyYW1l
YnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoMCkgIT0gR0xfTk9ORSkKKyAgICB7CisgICAgICAg
IHJlbmRlcmJ1ZmZlck9iamVjdCA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigwKTsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmVuZGVyYnVmZmVyT2JqZWN0ID0gZ2V0TnVs
bENvbG9yYnVmZmVyKGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpKTsKKyAgICB9CisgICAg
aWYgKCFyZW5kZXJidWZmZXJPYmplY3QpCisgICAgeworICAgICAgICBFUlIoInVuYWJsZSB0byBs
b2NhdGUgcmVuZGVyYnVmZmVyIGZvciBGQk8uIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBib29sIHJlbmRlclRhcmdldENoYW5nZWQgPSBmYWxzZTsKKyAgICB1bnNpZ25l
ZCBpbnQgcmVuZGVyVGFyZ2V0U2VyaWFsID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRTZXJpYWwo
KTsKKyAgICBpZiAocmVuZGVyVGFyZ2V0U2VyaWFsICE9IG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2Vy
aWFsKQorICAgIHsKKyAgICAgICAgLy8gQXBwbHkgdGhlIHJlbmRlciB0YXJnZXQgb24gdGhlIGRl
dmljZQorICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0U3VyZmFjZSA9IE5V
TEw7CisKKyAgICAgICAgUmVuZGVyVGFyZ2V0ICpyZW5kZXJUYXJnZXQgPSByZW5kZXJidWZmZXJP
YmplY3QtPmdldFJlbmRlclRhcmdldCgpOworICAgICAgICBpZiAocmVuZGVyVGFyZ2V0KQorICAg
ICAgICB7CisgICAgICAgICAgICByZW5kZXJUYXJnZXRTdXJmYWNlID0gUmVuZGVyVGFyZ2V0OTo6
bWFrZVJlbmRlclRhcmdldDkocmVuZGVyVGFyZ2V0KS0+Z2V0U3VyZmFjZSgpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKCFyZW5kZXJUYXJnZXRTdXJmYWNlKQorICAgICAgICB7CisgICAgICAg
ICAgICBFUlIoInJlbmRlciB0YXJnZXQgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBDb250ZXh0IG11c3QgYmUgbG9zdAorICAgICAg
ICB9CisKKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIHJlbmRlclRhcmdldFN1
cmZhY2UpOworICAgICAgICByZW5kZXJUYXJnZXRTdXJmYWNlLT5SZWxlYXNlKCk7CisKKyAgICAg
ICAgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwgPSByZW5kZXJUYXJnZXRTZXJpYWw7CisgICAg
ICAgIHJlbmRlclRhcmdldENoYW5nZWQgPSB0cnVlOworICAgIH0KKworICAgIGdsOjpSZW5kZXJi
dWZmZXIgKmRlcHRoU3RlbmNpbCA9IE5VTEw7CisgICAgdW5zaWduZWQgaW50IGRlcHRoYnVmZmVy
U2VyaWFsID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbGJ1ZmZlclNlcmlhbCA9IDA7Cisg
ICAgaWYgKGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQorICAg
IHsKKyAgICAgICAgZGVwdGhTdGVuY2lsID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCk7
CisgICAgICAgIGlmICghZGVwdGhTdGVuY2lsKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIo
IkRlcHRoIHN0ZW5jaWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGRlcHRoYnVmZmVyU2VyaWFsID0g
ZGVwdGhTdGVuY2lsLT5nZXRTZXJpYWwoKTsKKyAgICB9CisgICAgZWxzZSBpZiAoZnJhbWVidWZm
ZXItPmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKKyAgICB7CisgICAgICAgIGRl
cHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCk7CisgICAgICAgIGlm
ICghZGVwdGhTdGVuY2lsKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkRlcHRoIHN0ZW5j
aWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorCisgICAgICAgIHN0ZW5jaWxidWZmZXJTZXJpYWwgPSBkZXB0aFN0ZW5j
aWwtPmdldFNlcmlhbCgpOworICAgIH0KKworICAgIGlmIChkZXB0aGJ1ZmZlclNlcmlhbCAhPSBt
QXBwbGllZERlcHRoYnVmZmVyU2VyaWFsIHx8CisgICAgICAgIHN0ZW5jaWxidWZmZXJTZXJpYWwg
IT0gbUFwcGxpZWRTdGVuY2lsYnVmZmVyU2VyaWFsIHx8CisgICAgICAgICFtRGVwdGhTdGVuY2ls
SW5pdGlhbGl6ZWQpCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgZGVwdGhTaXplID0gMDsK
KyAgICAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxTaXplID0gMDsKKworICAgICAgICAvLyBBcHBs
eSB0aGUgZGVwdGggc3RlbmNpbCBvbiB0aGUgZGV2aWNlCisgICAgICAgIGlmIChkZXB0aFN0ZW5j
aWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5j
aWxTdXJmYWNlID0gTlVMTDsKKyAgICAgICAgICAgIFJlbmRlclRhcmdldCAqZGVwdGhTdGVuY2ls
UmVuZGVyVGFyZ2V0ID0gZGVwdGhTdGVuY2lsLT5nZXREZXB0aFN0ZW5jaWwoKTsKKworICAgICAg
ICAgICAgaWYgKGRlcHRoU3RlbmNpbFJlbmRlclRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBkZXB0aFN0ZW5jaWxTdXJmYWNlID0gUmVuZGVyVGFyZ2V0OTo6bWFrZVJlbmRl
clRhcmdldDkoZGVwdGhTdGVuY2lsUmVuZGVyVGFyZ2V0KS0+Z2V0U3VyZmFjZSgpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWRlcHRoU3RlbmNpbFN1cmZhY2UpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgRVJSKCJkZXB0aCBzdGVuY2lsIHBvaW50ZXIgdW5leHBl
Y3RlZGx5IG51bGwuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIENvbnRl
eHQgbXVzdCBiZSBsb3N0CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1EZXZpY2UtPlNl
dERlcHRoU3RlbmNpbFN1cmZhY2UoZGVwdGhTdGVuY2lsU3VyZmFjZSk7CisgICAgICAgICAgICBk
ZXB0aFN0ZW5jaWxTdXJmYWNlLT5SZWxlYXNlKCk7CisKKyAgICAgICAgICAgIGRlcHRoU2l6ZSA9
IGRlcHRoU3RlbmNpbC0+Z2V0RGVwdGhTaXplKCk7CisgICAgICAgICAgICBzdGVuY2lsU2l6ZSA9
IGRlcHRoU3RlbmNpbC0+Z2V0U3RlbmNpbFNpemUoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2Uo
TlVMTCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1EZXB0aFN0ZW5jaWxJbml0aWFsaXpl
ZCB8fCBkZXB0aFNpemUgIT0gbUN1ckRlcHRoU2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
bUN1ckRlcHRoU2l6ZSA9IGRlcHRoU2l6ZTsKKyAgICAgICAgICAgIG1Gb3JjZVNldFJhc3RlclN0
YXRlID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbURlcHRoU3RlbmNpbEluaXRp
YWxpemVkIHx8IHN0ZW5jaWxTaXplICE9IG1DdXJTdGVuY2lsU2l6ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgbUN1clN0ZW5jaWxTaXplID0gc3RlbmNpbFNpemU7CisgICAgICAgICAgICBtRm9y
Y2VTZXREZXB0aFN0ZW5jaWxTdGF0ZSA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBtQXBw
bGllZERlcHRoYnVmZmVyU2VyaWFsID0gZGVwdGhidWZmZXJTZXJpYWw7CisgICAgICAgIG1BcHBs
aWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCA9IHN0ZW5jaWxidWZmZXJTZXJpYWw7CisgICAgICAgIG1E
ZXB0aFN0ZW5jaWxJbml0aWFsaXplZCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKHJlbmRlclRh
cmdldENoYW5nZWQgfHwgIW1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQpCisgICAgeworICAg
ICAgICBtRm9yY2VTZXRTY2lzc29yID0gdHJ1ZTsKKyAgICAgICAgbUZvcmNlU2V0Vmlld3BvcnQg
PSB0cnVlOworCisgICAgICAgIG1SZW5kZXJUYXJnZXREZXNjLndpZHRoID0gcmVuZGVyYnVmZmVy
T2JqZWN0LT5nZXRXaWR0aCgpOworICAgICAgICBtUmVuZGVyVGFyZ2V0RGVzYy5oZWlnaHQgPSBy
ZW5kZXJidWZmZXJPYmplY3QtPmdldEhlaWdodCgpOworICAgICAgICBtUmVuZGVyVGFyZ2V0RGVz
Yy5mb3JtYXQgPSByZW5kZXJidWZmZXJPYmplY3QtPmdldEFjdHVhbEZvcm1hdCgpOworICAgICAg
ICBtUmVuZGVyVGFyZ2V0RGVzY0luaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworR0xlbnVtIFJlbmRlcmVyOTo6YXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0
cmlidXRlc1tdLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMp
Cit7CisgICAgVHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW2dsOjpNQVhfVkVSVEVYX0FU
VFJJQlNdOworICAgIEdMZW51bSBlcnIgPSBtVmVydGV4RGF0YU1hbmFnZXItPnByZXBhcmVWZXJ0
ZXhEYXRhKHZlcnRleEF0dHJpYnV0ZXMsIHByb2dyYW1CaW5hcnksIGZpcnN0LCBjb3VudCwgYXR0
cmlidXRlcywgaW5zdGFuY2VzKTsKKyAgICBpZiAoZXJyICE9IEdMX05PX0VSUk9SKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG1WZXJ0ZXhEZWNs
YXJhdGlvbkNhY2hlLmFwcGx5RGVjbGFyYXRpb24obURldmljZSwgYXR0cmlidXRlcywgcHJvZ3Jh
bUJpbmFyeSwgaW5zdGFuY2VzLCAmbVJlcGVhdERyYXcpOworfQorCisvLyBBcHBsaWVzIHRoZSBp
bmRpY2VzIGFuZCBlbGVtZW50IGFycmF5IGJpbmRpbmdzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmlj
ZQorR0xlbnVtIFJlbmRlcmVyOTo6YXBwbHlJbmRleEJ1ZmZlcihjb25zdCBHTHZvaWQgKmluZGlj
ZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgR0xzaXplaSBjb3VudCwgR0xlbnVt
IG1vZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pCit7Cisg
ICAgR0xlbnVtIGVyciA9IG1JbmRleERhdGFNYW5hZ2VyLT5wcmVwYXJlSW5kZXhEYXRhKHR5cGUs
IGNvdW50LCBlbGVtZW50QXJyYXlCdWZmZXIsIGluZGljZXMsIGluZGV4SW5mbyk7CisKKyAgICBp
ZiAoZXJyID09IEdMX05PX0VSUk9SKQorICAgIHsKKyAgICAgICAgLy8gRGlyZWN0bHkgYmluZGlu
ZyB0aGUgc3RvcmFnZSBidWZmZXIgaXMgbm90IHN1cHBvcnRlZCBmb3IgZDNkOQorICAgICAgICBB
U1NFUlQoaW5kZXhJbmZvLT5zdG9yYWdlID09IE5VTEwpOworCisgICAgICAgIGlmIChpbmRleElu
Zm8tPnNlcmlhbCAhPSBtQXBwbGllZElCU2VyaWFsKQorICAgICAgICB7CisgICAgICAgICAgICBJ
bmRleEJ1ZmZlcjkqIGluZGV4QnVmZmVyID0gSW5kZXhCdWZmZXI5OjptYWtlSW5kZXhCdWZmZXI5
KGluZGV4SW5mby0+aW5kZXhCdWZmZXIpOworCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRJbmRp
Y2VzKGluZGV4QnVmZmVyLT5nZXRCdWZmZXIoKSk7CisgICAgICAgICAgICBtQXBwbGllZElCU2Vy
aWFsID0gaW5kZXhJbmZvLT5zZXJpYWw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
ZXJyOworfQorCit2b2lkIFJlbmRlcmVyOTo6ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXpl
aSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpCit7CisgICAgc3RhcnRTY2VuZSgpOworICAgICAg
ICAKKyAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCisgICAgeworICAgICAgICBkcmF3TGlu
ZUxvb3AoY291bnQsIEdMX05PTkUsIE5VTEwsIDAsIE5VTEwpOworICAgIH0KKyAgICBlbHNlIGlm
IChpbnN0YW5jZXMgPiAwKQorICAgIHsKKyAgICAgICAgU3RhdGljSW5kZXhCdWZmZXJJbnRlcmZh
Y2UgKmNvdW50aW5nSUIgPSBtSW5kZXhEYXRhTWFuYWdlci0+Z2V0Q291bnRpbmdJbmRpY2VzKGNv
dW50KTsKKyAgICAgICAgaWYgKGNvdW50aW5nSUIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChtQXBwbGllZElCU2VyaWFsICE9IGNvdW50aW5nSUItPmdldFNlcmlhbCgpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIEluZGV4QnVmZmVyOSAqaW5kZXhCdWZmZXIgPSBJbmRleEJ1
ZmZlcjk6Om1ha2VJbmRleEJ1ZmZlcjkoY291bnRpbmdJQi0+Z2V0SW5kZXhCdWZmZXIoKSk7CisK
KyAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRJbmRpY2VzKGluZGV4QnVmZmVyLT5nZXRCdWZm
ZXIoKSk7CisgICAgICAgICAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IGNvdW50aW5nSUItPmdl
dFNlcmlhbCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IG1SZXBlYXREcmF3OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURl
dmljZS0+RHJhd0luZGV4ZWRQcmltaXRpdmUobVByaW1pdGl2ZVR5cGUsIDAsIDAsIGNvdW50LCAw
LCBtUHJpbWl0aXZlQ291bnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGEgY291bnRp
bmcgaW5kZXggYnVmZmVyIGZvciBnbERyYXdBcnJheXNJbnN0YW5jZWQuIik7CisgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgfQor
ICAgIGVsc2UgICAvLyBSZWd1bGFyIGNhc2UKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPkRyYXdQ
cmltaXRpdmUobVByaW1pdGl2ZVR5cGUsIDAsIG1QcmltaXRpdmVDb3VudCk7CisgICAgfQorfQor
Cit2b2lkIFJlbmRlcmVyOTo6ZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50
LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50
QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbywgR0xzaXpl
aSAvKmluc3RhbmNlcyovKQoreworICAgIHN0YXJ0U2NlbmUoKTsKKworICAgIGlmIChtb2RlID09
IEdMX1BPSU5UUykKKyAgICB7CisgICAgICAgIGRyYXdJbmRleGVkUG9pbnRzKGNvdW50LCB0eXBl
LCBpbmRpY2VzLCBpbmRleEluZm8ubWluSW5kZXgsIGVsZW1lbnRBcnJheUJ1ZmZlcik7CisgICAg
fQorICAgIGVsc2UgaWYgKG1vZGUgPT0gR0xfTElORV9MT09QKQorICAgIHsKKyAgICAgICAgZHJh
d0xpbmVMb29wKGNvdW50LCB0eXBlLCBpbmRpY2VzLCBpbmRleEluZm8ubWluSW5kZXgsIGVsZW1l
bnRBcnJheUJ1ZmZlcik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbVJlcGVhdERyYXc7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgR0xz
aXplaSB2ZXJ0ZXhDb3VudCA9IGluZGV4SW5mby5tYXhJbmRleCAtIGluZGV4SW5mby5taW5JbmRl
eCArIDE7CisgICAgICAgICAgICBtRGV2aWNlLT5EcmF3SW5kZXhlZFByaW1pdGl2ZShtUHJpbWl0
aXZlVHlwZSwgLShJTlQpaW5kZXhJbmZvLm1pbkluZGV4LCBpbmRleEluZm8ubWluSW5kZXgsIHZl
cnRleENvdW50LCBpbmRleEluZm8uc3RhcnRJbmRleCwgbVByaW1pdGl2ZUNvdW50KTsKKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCBSZW5kZXJlcjk6OmRyYXdMaW5lTG9vcChHTHNpemVpIGNv
dW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBpbnQgbWluSW5kZXgsIGds
OjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlcikKK3sKKyAgICAvLyBHZXQgdGhlIHJhdyBpbmRp
Y2VzIGZvciBhbiBpbmRleGVkIGRyYXcKKyAgICBpZiAodHlwZSAhPSBHTF9OT05FICYmIGVsZW1l
bnRBcnJheUJ1ZmZlcikKKyAgICB7CisgICAgICAgIGdsOjpCdWZmZXIgKmluZGV4QnVmZmVyID0g
ZWxlbWVudEFycmF5QnVmZmVyOworICAgICAgICBCdWZmZXJTdG9yYWdlICpzdG9yYWdlID0gaW5k
ZXhCdWZmZXItPmdldFN0b3JhZ2UoKTsKKyAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gcmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4oaW5kaWNlcyk7CisgICAgICAgIGluZGljZXMgPSBzdGF0aWNf
Y2FzdDxjb25zdCBHTHVieXRlKj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSArIG9mZnNldDsKKyAgICB9
CisKKyAgICB1bnNpZ25lZCBpbnQgc3RhcnRJbmRleCA9IDA7CisKKyAgICBpZiAoZ2V0MzJCaXRJ
bmRleFN1cHBvcnQoKSkKKyAgICB7CisgICAgICAgIGlmICghbUxpbmVMb29wSUIpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1MaW5lTG9vcElCID0gbmV3IFN0cmVhbWluZ0luZGV4QnVmZmVySW50
ZXJmYWNlKHRoaXMpOworICAgICAgICAgICAgaWYgKCFtTGluZUxvb3BJQi0+cmVzZXJ2ZUJ1ZmZl
clNwYWNlKElOSVRJQUxfSU5ERVhfQlVGRkVSX1NJWkUsIEdMX1VOU0lHTkVEX0lOVCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZGVsZXRlIG1MaW5lTG9vcElCOworICAgICAgICAg
ICAgICAgIG1MaW5lTG9vcElCID0gTlVMTDsKKworICAgICAgICAgICAgICAgIEVSUigiQ291bGQg
bm90IGNyZWF0ZSBhIDMyLWJpdCBsb29waW5nIGluZGV4IGJ1ZmZlciBmb3IgR0xfTElORV9MT09Q
LiIpOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5z
aWduZWQgaW50Pihjb3VudCkgKyAxID4gKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50
Pjo6bWF4KCkgLyBzaXplb2YodW5zaWduZWQgaW50KSkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IEVSUigiQ291bGQgbm90IGNyZWF0ZSBhIDMyLWJpdCBsb29waW5nIGluZGV4IGJ1ZmZlciBmb3Ig
R0xfTElORV9MT09QLCB0b28gbWFueSBpbmRpY2VzIHJlcXVpcmVkLiIpOworICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIENoZWNrZWQgYnkgUmVuZGVyZXI5OjphcHBseVByaW1pdGl2ZVR5cGUKKyAgICAgICAgQVNT
RVJUKGNvdW50ID49IDApOworCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBzcGFjZU5lZWRl
ZCA9IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGNvdW50KSArIDEpICogc2l6ZW9mKHVuc2ln
bmVkIGludCk7CisgICAgICAgIGlmICghbUxpbmVMb29wSUItPnJlc2VydmVCdWZmZXJTcGFjZShz
cGFjZU5lZWRlZCwgR0xfVU5TSUdORURfSU5UKSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJS
KCJDb3VsZCBub3QgcmVzZXJ2ZSBlbm91Z2ggc3BhY2UgaW4gbG9vcGluZyBpbmRleCBidWZmZXIg
Zm9yIEdMX0xJTkVfTE9PUC4iKTsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkKiBtYXBwZWRNZW1vcnkgPSBO
VUxMOworICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMDsKKyAgICAgICAgaWYgKCFtTGlu
ZUxvb3BJQi0+bWFwQnVmZmVyKHNwYWNlTmVlZGVkLCAmbWFwcGVkTWVtb3J5LCAmb2Zmc2V0KSkK
KyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgbWFwIGluZGV4IGJ1ZmZlciBm
b3IgR0xfTElORV9MT09QLiIpOworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXJ0SW5kZXggPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBpbnQ+KG9mZnNldCkgLyA0OworICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEg
PSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KG1hcHBlZE1lbW9yeSk7CisKKyAgICAg
ICAgc3dpdGNoICh0eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9OT05FOiAgIC8v
IE5vbi1pbmRleGVkIGRyYXcKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkYXRhW2ldID0gaTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGRhdGFbY291bnRdID0gMDsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBk
YXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpW2ldOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVi
eXRlKj4oaW5kaWNlcylbMF07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX1NIT1JUOgorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2Fz
dDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpW2ldOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpWzBd
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6Cisg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGlu
ZGljZXMpW2ldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0
aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVswXTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIW1MaW5lTG9vcElCLT51bm1hcEJ1ZmZlcigpKQorICAgICAgICB7CisgICAgICAgICAgICBF
UlIoIkNvdWxkIG5vdCB1bm1hcCBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKKyAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKCFtTGluZUxvb3BJQikKKyAgICAg
ICAgeworICAgICAgICAgICAgbUxpbmVMb29wSUIgPSBuZXcgU3RyZWFtaW5nSW5kZXhCdWZmZXJJ
bnRlcmZhY2UodGhpcyk7CisgICAgICAgICAgICBpZiAoIW1MaW5lTG9vcElCLT5yZXNlcnZlQnVm
ZmVyU3BhY2UoSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwgR0xfVU5TSUdORURfU0hPUlQpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBtTGluZUxvb3BJQjsKKyAgICAg
ICAgICAgICAgICBtTGluZUxvb3BJQiA9IE5VTEw7CisKKyAgICAgICAgICAgICAgICBFUlIoIkNv
dWxkIG5vdCBjcmVhdGUgYSAxNi1iaXQgbG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVf
TE9PUC4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQ2hlY2tlZCBieSBS
ZW5kZXJlcjk6OmFwcGx5UHJpbWl0aXZlVHlwZQorICAgICAgICBBU1NFUlQoY291bnQgPj0gMCk7
CisKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oY291bnQpICsgMSA+IChz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0Pjo6bWF4KCkgLyBzaXplb2YodW5zaWdu
ZWQgc2hvcnQpKSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRl
IGEgMTYtYml0IGxvb3BpbmcgaW5kZXggYnVmZmVyIGZvciBHTF9MSU5FX0xPT1AsIHRvbyBtYW55
IGluZGljZXMgcmVxdWlyZWQuIik7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHNw
YWNlTmVlZGVkID0gKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oY291bnQpICsgMSkgKiBzaXpl
b2YodW5zaWduZWQgc2hvcnQpOworICAgICAgICBpZiAoIW1MaW5lTG9vcElCLT5yZXNlcnZlQnVm
ZmVyU3BhY2Uoc3BhY2VOZWVkZWQsIEdMX1VOU0lHTkVEX1NIT1JUKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgRVJSKCJDb3VsZCBub3QgcmVzZXJ2ZSBlbm91Z2ggc3BhY2UgaW4gbG9vcGluZyBp
bmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKKyAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkKiBtYXBw
ZWRNZW1vcnkgPSBOVUxMOworICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0OworICAgICAgICBp
ZiAobUxpbmVMb29wSUItPm1hcEJ1ZmZlcihzcGFjZU5lZWRlZCwgJm1hcHBlZE1lbW9yeSwgJm9m
ZnNldCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiQ291bGQgbm90IG1hcCBpbmRleCBi
dWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKworICAgICAgICBzdGFydEluZGV4ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgaW50PihvZmZzZXQpIC8gMjsKKyAgICAgICAgdW5zaWduZWQgc2hv
cnQgKmRhdGEgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4obWFwcGVkTWVtb3J5
KTsKKworICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdM
X05PTkU6ICAgLy8gTm9uLWluZGV4ZWQgZHJhdworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRhdGFbaV0g
PSBpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGF0YVtjb3VudF0gPSAwOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oaW5kaWNlcylb
aV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0
PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKVswXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGF0YVtpXSA9
IHN0YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNlcylbaV07CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4o
aW5kaWNlcylbMF07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX0lOVDoKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
R0x1aW50Kj4oaW5kaWNlcylbaV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkYXRhW2Nv
dW50XSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMpWzBdOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICghbUxpbmVMb29wSUItPnVubWFwQnVmZmVyKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEVSUigiQ291bGQgbm90IHVubWFwIGluZGV4IGJ1ZmZlciBmb3IgR0xfTElORV9M
T09QLiIpOworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9IG1MaW5lTG9v
cElCLT5nZXRTZXJpYWwoKSkKKyAgICB7CisgICAgICAgIEluZGV4QnVmZmVyOSAqaW5kZXhCdWZm
ZXIgPSBJbmRleEJ1ZmZlcjk6Om1ha2VJbmRleEJ1ZmZlcjkobUxpbmVMb29wSUItPmdldEluZGV4
QnVmZmVyKCkpOworCisgICAgICAgIG1EZXZpY2UtPlNldEluZGljZXMoaW5kZXhCdWZmZXItPmdl
dEJ1ZmZlcigpKTsKKyAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IG1MaW5lTG9vcElCLT5nZXRT
ZXJpYWwoKTsKKyAgICB9CisKKyAgICBtRGV2aWNlLT5EcmF3SW5kZXhlZFByaW1pdGl2ZShEM0RQ
VF9MSU5FU1RSSVAsIC1taW5JbmRleCwgbWluSW5kZXgsIGNvdW50LCBzdGFydEluZGV4LCBjb3Vu
dCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIHZvaWQgZHJhd1BvaW50cyhJ
RGlyZWN0M0REZXZpY2U5KiBkZXZpY2UsIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdm9pZCAqaW5k
aWNlcywgaW50IG1pbkluZGV4KQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkr
KykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBpbmRleFZhbHVlID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgaW50PihzdGF0aWNfY2FzdDxjb25zdCBUKj4oaW5kaWNlcylbaV0pIC0gbWluSW5k
ZXg7CisgICAgICAgIGRldmljZS0+RHJhd1ByaW1pdGl2ZShEM0RQVF9QT0lOVExJU1QsIGluZGV4
VmFsdWUsIDEpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJlcjk6OmRyYXdJbmRleGVkUG9pbnRz
KEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGludCBt
aW5JbmRleCwgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyKQoreworICAgIC8vIERyYXdp
bmcgaW5kZXggcG9pbnQgbGlzdHMgaXMgdW5zdXBwb3J0ZWQgaW4gZDNkOSwgZmFsbCBiYWNrIHRv
IGEgcmVndWxhciBEcmF3UHJpbWl0aXZlIGNhbGwKKyAgICAvLyBmb3IgZWFjaCBpbmRpdmlkdWFs
IHBvaW50LiBUaGlzIGNhbGwgaXMgbm90IGV4cGVjdGVkIHRvIGhhcHBlbiBvZnRlbi4KKworICAg
IGlmIChlbGVtZW50QXJyYXlCdWZmZXIpCisgICAgeworICAgICAgICBCdWZmZXJTdG9yYWdlICpz
dG9yYWdlID0gZWxlbWVudEFycmF5QnVmZmVyLT5nZXRTdG9yYWdlKCk7CisgICAgICAgIGludHB0
cl90IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZGljZXMpOworICAgICAg
ICBpbmRpY2VzID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KHN0b3JhZ2UtPmdldERhdGEo
KSkgKyBvZmZzZXQ7CisgICAgfQorCisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9CWVRFOiAgZHJhd1BvaW50czxHTHVieXRlPihtRGV2aWNlLCBjb3Vu
dCwgaW5kaWNlcywgbWluSW5kZXgpOyAgYnJlYWs7CisgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
U0hPUlQ6IGRyYXdQb2ludHM8R0x1c2hvcnQ+KG1EZXZpY2UsIGNvdW50LCBpbmRpY2VzLCBtaW5J
bmRleCk7IGJyZWFrOworICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDogICBkcmF3UG9pbnRz
PEdMdWludD4obURldmljZSwgY291bnQsIGluZGljZXMsIG1pbkluZGV4KTsgICBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyZXI5
OjphcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpCit7CisgICAg
dW5zaWduZWQgaW50IHByb2dyYW1CaW5hcnlTZXJpYWwgPSBwcm9ncmFtQmluYXJ5LT5nZXRTZXJp
YWwoKTsKKyAgICBpZiAocHJvZ3JhbUJpbmFyeVNlcmlhbCAhPSBtQXBwbGllZFByb2dyYW1CaW5h
cnlTZXJpYWwpCisgICAgeworICAgICAgICBTaGFkZXJFeGVjdXRhYmxlICp2ZXJ0ZXhFeGUgPSBw
cm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlKCk7CisgICAgICAgIFNoYWRlckV4ZWN1
dGFibGUgKnBpeGVsRXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxFeGVjdXRhYmxlKCk7CisK
KyAgICAgICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqdmVydGV4U2hhZGVyID0gTlVMTDsKKyAg
ICAgICAgaWYgKHZlcnRleEV4ZSkgdmVydGV4U2hhZGVyID0gU2hhZGVyRXhlY3V0YWJsZTk6Om1h
a2VTaGFkZXJFeGVjdXRhYmxlOSh2ZXJ0ZXhFeGUpLT5nZXRWZXJ0ZXhTaGFkZXIoKTsKKworICAg
ICAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKnBpeGVsU2hhZGVyID0gTlVMTDsKKyAgICAgICAg
aWYgKHBpeGVsRXhlKSBwaXhlbFNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGU5OjptYWtlU2hhZGVy
RXhlY3V0YWJsZTkocGl4ZWxFeGUpLT5nZXRQaXhlbFNoYWRlcigpOworCisgICAgICAgIG1EZXZp
Y2UtPlNldFBpeGVsU2hhZGVyKHBpeGVsU2hhZGVyKTsKKyAgICAgICAgbURldmljZS0+U2V0VmVy
dGV4U2hhZGVyKHZlcnRleFNoYWRlcik7CisgICAgICAgIHByb2dyYW1CaW5hcnktPmRpcnR5QWxs
VW5pZm9ybXMoKTsKKyAgICAgICAgbUR4VW5pZm9ybXNEaXJ0eSA9IHRydWU7CisKKyAgICAgICAg
bUFwcGxpZWRQcm9ncmFtQmluYXJ5U2VyaWFsID0gcHJvZ3JhbUJpbmFyeVNlcmlhbDsKKyAgICB9
Cit9CisKK3ZvaWQgUmVuZGVyZXI5OjphcHBseVVuaWZvcm1zKGdsOjpQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5LCBnbDo6VW5pZm9ybUFycmF5ICp1bmlmb3JtQXJyYXkpCit7CisgICAgZm9y
IChzdGQ6OnZlY3RvcjxnbDo6VW5pZm9ybSo+Ojpjb25zdF9pdGVyYXRvciB1YiA9IHVuaWZvcm1B
cnJheS0+YmVnaW4oKSwgdWUgPSB1bmlmb3JtQXJyYXktPmVuZCgpOyB1YiAhPSB1ZTsgKyt1YikK
KyAgICB7CisgICAgICAgIGdsOjpVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gKnViOworCisgICAg
ICAgIGlmICh0YXJnZXRVbmlmb3JtLT5kaXJ0eSkKKyAgICAgICAgeworICAgICAgICAgICAgR0xm
bG9hdCAqZiA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhOworICAgICAgICAgICAgR0xp
bnQgKmkgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGE7CisKKyAgICAgICAgICAgIHN3aXRj
aCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9TQU1QTEVSXzJEOgorICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRVJfQ1VCRToKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CT09MOgorICAgICAg
ICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZF
QzM6CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OgorICAgICAgICAgICAgICAgIGFw
cGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9B
VF9WRUMyOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6CisgICAgICAgICAgICAg
IGNhc2UgR0xfRkxPQVRfVkVDNDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgor
ICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6CisgICAgICAgICAgICAgIGNhc2UgR0xf
RkxPQVRfTUFUNDoKKyAgICAgICAgICAgICAgICBhcHBseVVuaWZvcm1uZnYodGFyZ2V0VW5pZm9y
bSwgZik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfSU5U
OgorICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMyOgorICAgICAgICAgICAgICBjYXNlIEdM
X0lOVF9WRUMzOgorICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUM0OgorICAgICAgICAgICAg
ICAgIGFwcGx5VW5pZm9ybW5pdih0YXJnZXRVbmlmb3JtLCBpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9
IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRHJpdmVyIHVuaWZvcm1zCisgICAg
aWYgKG1EeFVuaWZvcm1zRGlydHkpCisgICAgeworICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhT
aGFkZXJDb25zdGFudEYoMCwgKGZsb2F0KikmbVZlcnRleENvbnN0YW50cywgc2l6ZW9mKGR4X1Zl
cnRleENvbnN0YW50cykgLyBzaXplb2YoZmxvYXRbNF0pKTsKKyAgICAgICAgbURldmljZS0+U2V0
UGl4ZWxTaGFkZXJDb25zdGFudEYoMCwgKGZsb2F0KikmbVBpeGVsQ29uc3RhbnRzLCBzaXplb2Yo
ZHhfUGl4ZWxDb25zdGFudHMpIC8gc2l6ZW9mKGZsb2F0WzRdKSk7CisgICAgICAgIG1EeFVuaWZv
cm1zRGlydHkgPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyZXI5OjphcHBseVVuaWZv
cm1uZnYoZ2w6OlVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMZmxvYXQgKnYpCit7Cisg
ICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleCA+PSAwKQorICAgIHsKKyAgICAg
ICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHNSZWdp
c3RlckluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT5yZWdpc3RlckNvdW50KTsKKyAgICB9CisKKyAg
ICBpZiAodGFyZ2V0VW5pZm9ybS0+dnNSZWdpc3RlckluZGV4ID49IDApCisgICAgeworICAgICAg
ICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnNSZWdp
c3RlckluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT5yZWdpc3RlckNvdW50KTsKKyAgICB9Cit9CisK
K3ZvaWQgUmVuZGVyZXI5OjphcHBseVVuaWZvcm1uaXYoZ2w6OlVuaWZvcm0gKnRhcmdldFVuaWZv
cm0sIGNvbnN0IEdMaW50ICp2KQoreworICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT5yZWdpc3Rl
ckNvdW50IDw9IE1BWF9WRVJURVhfQ09OU1RBTlRfVkVDVE9SU19EM0Q5KTsKKyAgICBHTGZsb2F0
IHZlY3RvcltNQVhfVkVSVEVYX0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOV1bNF07CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHRhcmdldFVuaWZvcm0tPnJlZ2lzdGVyQ291bnQ7IGkr
KykKKyAgICB7CisgICAgICAgIHZlY3RvcltpXVswXSA9IChHTGZsb2F0KXZbNCAqIGkgKyAwXTsK
KyAgICAgICAgdmVjdG9yW2ldWzFdID0gKEdMZmxvYXQpdls0ICogaSArIDFdOworICAgICAgICB2
ZWN0b3JbaV1bMl0gPSAoR0xmbG9hdCl2WzQgKiBpICsgMl07CisgICAgICAgIHZlY3RvcltpXVsz
XSA9IChHTGZsb2F0KXZbNCAqIGkgKyAzXTsKKyAgICB9CisKKyAgICBhcHBseVVuaWZvcm1uZnYo
dGFyZ2V0VW5pZm9ybSwgKEdMZmxvYXQqKXZlY3Rvcik7Cit9CisKK3ZvaWQgUmVuZGVyZXI5Ojph
cHBseVVuaWZvcm1uYnYoZ2w6OlVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMaW50ICp2
KQoreworICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT5yZWdpc3RlckNvdW50IDw9IE1BWF9WRVJU
RVhfQ09OU1RBTlRfVkVDVE9SU19EM0Q5KTsKKyAgICBHTGZsb2F0IHZlY3RvcltNQVhfVkVSVEVY
X0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOV1bNF07CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IHRhcmdldFVuaWZvcm0tPnJlZ2lzdGVyQ291bnQ7IGkrKykKKyAgICB7CisgICAgICAg
IHZlY3RvcltpXVswXSA9ICh2WzQgKiBpICsgMF0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7
CisgICAgICAgIHZlY3RvcltpXVsxXSA9ICh2WzQgKiBpICsgMV0gPT0gR0xfRkFMU0UpID8gMC4w
ZiA6IDEuMGY7CisgICAgICAgIHZlY3RvcltpXVsyXSA9ICh2WzQgKiBpICsgMl0gPT0gR0xfRkFM
U0UpID8gMC4wZiA6IDEuMGY7CisgICAgICAgIHZlY3RvcltpXVszXSA9ICh2WzQgKiBpICsgM10g
PT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7CisgICAgfQorCisgICAgYXBwbHlVbmlmb3JtbmZ2
KHRhcmdldFVuaWZvcm0sIChHTGZsb2F0Kil2ZWN0b3IpOworfQorCit2b2lkIFJlbmRlcmVyOTo6
Y2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyYW1ldGVycyAmY2xlYXJQYXJhbXMsIGdsOjpGcmFtZWJ1
ZmZlciAqZnJhbWVCdWZmZXIpCit7CisgICAgRDNEQ09MT1IgY29sb3IgPSBEM0RDT0xPUl9BUkdC
KGdsOjp1bm9ybTw4PihjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUuYWxwaGEpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oY2xlYXJQYXJhbXMuY29s
b3JDbGVhclZhbHVlLnJlZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGds
Ojp1bm9ybTw4PihjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUuZ3JlZW4pLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oY2xlYXJQYXJhbXMuY29sb3JD
bGVhclZhbHVlLmJsdWUpKTsKKyAgICBmbG9hdCBkZXB0aCA9IGdsOjpjbGFtcDAxKGNsZWFyUGFy
YW1zLmRlcHRoQ2xlYXJWYWx1ZSk7CisgICAgaW50IHN0ZW5jaWwgPSBjbGVhclBhcmFtcy5zdGVu
Y2lsQ2xlYXJWYWx1ZSAmIDB4MDAwMDAwRkY7CisKKyAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbFVu
bWFza2VkID0gMHgwOworICAgIGlmICgoY2xlYXJQYXJhbXMubWFzayAmIEdMX1NURU5DSUxfQlVG
RkVSX0JJVCkgJiYgZnJhbWVCdWZmZXItPmhhc1N0ZW5jaWwoKSkKKyAgICB7CisgICAgICAgIHVu
c2lnbmVkIGludCBzdGVuY2lsU2l6ZSA9IGdsOjpHZXRTdGVuY2lsU2l6ZShmcmFtZUJ1ZmZlci0+
Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXRBY3R1YWxGb3JtYXQoKSk7CisgICAgICAgIHN0ZW5jaWxV
bm1hc2tlZCA9ICgweDEgPDwgc3RlbmNpbFNpemUpIC0gMTsKKyAgICB9CisKKyAgICBib29sIGFs
cGhhVW5tYXNrZWQgPSAoZ2w6OkdldEFscGhhU2l6ZShtUmVuZGVyVGFyZ2V0RGVzYy5mb3JtYXQp
ID09IDApIHx8IGNsZWFyUGFyYW1zLmNvbG9yTWFza0FscGhhOworCisgICAgY29uc3QgYm9vbCBu
ZWVkTWFza2VkU3RlbmNpbENsZWFyID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JV
RkZFUl9CSVQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNs
ZWFyUGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2sgJiBzdGVuY2lsVW5tYXNrZWQpICE9IHN0ZW5jaWxV
bm1hc2tlZDsKKyAgICBjb25zdCBib29sIG5lZWRNYXNrZWRDb2xvckNsZWFyID0gKGNsZWFyUGFy
YW1zLm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSAmJgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAhKGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCAmJiBjbGVhclBhcmFt
cy5jb2xvck1hc2tHcmVlbiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0JsdWUgJiYgYWxwaGFVbm1hc2tlZCk7CisKKyAgICBp
ZiAobmVlZE1hc2tlZENvbG9yQ2xlYXIgfHwgbmVlZE1hc2tlZFN0ZW5jaWxDbGVhcikKKyAgICB7
CisgICAgICAgIC8vIFN0YXRlIHdoaWNoIGlzIGFsdGVyZWQgaW4gYWxsIHBhdGhzIGZyb20gdGhp
cyBwb2ludCB0byB0aGUgY2xlYXIgY2FsbCBpcyBzYXZlZC4KKyAgICAgICAgLy8gU3RhdGUgd2hp
Y2ggaXMgYWx0ZXJlZCBpbiBvbmx5IHNvbWUgcGF0aHMgd2lsbCBiZSBmbGFnZ2VkIGRpcnR5IGlu
IHRoZSBjYXNlIHRoYXQKKyAgICAgICAgLy8gIHRoYXQgcGF0aCBpcyB0YWtlbi4KKyAgICAgICAg
SFJFU1VMVCBocjsKKyAgICAgICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgPT0gTlVMTCkK
KyAgICAgICAgeworICAgICAgICAgICAgaHIgPSBtRGV2aWNlLT5CZWdpblN0YXRlQmxvY2soKTsK
KyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJ
REVPTUVNT1JZIHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOworCisgICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pGVU5DLCBEM0RDTVBfQUxXQVlTKTsKKyAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEZBTFNFKTsK
KyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RD
VUxMX05PTkUpOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfRklM
TE1PREUsIEQzREZJTExfU09MSUQpOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfQUxQSEFURVNURU5BQkxFLCBGQUxTRSk7CisgICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7CisgICAgICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOworICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwg
MCk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5B
QkxFLCBGQUxTRSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsK
KyAgICAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlcihOVUxMKTsKKyAgICAgICAgICAg
IG1EZXZpY2UtPlNldEZWRihEM0RGVkZfWFlaUkhXIHwgRDNERlZGX0RJRkZVU0UpOworICAgICAg
ICAgICAgbURldmljZS0+U2V0U3RyZWFtU291cmNlKDAsIE5VTEwsIDAsIDApOworICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5BQkxF
LCBUUlVFKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQz
RFRTU19DT0xPUk9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7CisgICAgICAgICAgICBtRGV2aWNlLT5T
ZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JBUkcxLCBEM0RUQV9URkFDVE9SKTsK
KyAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19BTFBI
QU9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJl
U3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQUxQSEFBUkcxLCBEM0RUQV9URkFDVE9SKTsKKyAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1RFWFRVUkVGQUNUT1IsIGNvbG9yKTsK
KyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExFTUFT
SywgMHhGRkZGRkZGRik7CisKKyAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBnbDo6TUFY
X1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURl
dmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpLCAxKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaHIgPSBtRGV2aWNlLT5FbmRTdGF0ZUJsb2NrKCZtTWFza2VkQ2xlYXJTYXZlZFN0YXRl
KTsKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRP
RlZJREVPTUVNT1JZIHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICB9CisKKyAgICAg
ICAgQVNTRVJUKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgIT0gTlVMTCk7CisKKyAgICAgICAgaWYg
KG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAg
aHIgPSBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlLT5DYXB0dXJlKCk7CisgICAgICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKGhyKSk7CisgICAgICAgIH0KKworICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfWkZVTkMsIEQzRENNUF9BTFdBWVMpOworICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBGQUxTRSk7CisgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOworICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7Cisg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFM
U0UpOworICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5B
QkxFLCBGQUxTRSk7CisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NMSVBQ
TEFORUVOQUJMRSwgMCk7CisKKyAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xP
Ul9CVUZGRVJfQklUKQorICAgICAgICB7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2xfZDNkOTo6Q29udmVydENvbG9yTWFzayhjbGVhclBhcmFtcy5jb2xvck1hc2tS
ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0dyZWVuLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhclBhcmFtcy5j
b2xvck1hc2tCbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tBbHBoYSkpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgMCk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoc3RlbmNpbFVubWFza2VkICE9IDB4MCAmJiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX1NU
RU5DSUxfQlVGRkVSX0JJVCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIFRSVUUpOworICAgICAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfVFdPU0lERURTVEVOQ0lMTU9ERSwgRkFMU0UpOworICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEZVTkMsIEQzRENN
UF9BTFdBWVMpOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RF
TkNJTFJFRiwgc3RlbmNpbCk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19TVEVOQ0lMV1JJVEVNQVNLLCBjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrKTsKKyAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxGQUlMLCBEM0RT
VEVOQ0lMT1BfUkVQTEFDRSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19TVEVOQ0lMWkZBSUwsIEQzRFNURU5DSUxPUF9SRVBMQUNFKTsKKyAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxQQVNTLCBEM0RTVEVOQ0lMT1BfUkVQ
TEFDRSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBGQUxTRSk7CisgICAg
ICAgIH0KKworICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsKKyAgICAgICAg
bURldmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOworICAgICAgICBtRGV2aWNlLT5TZXRGVkYo
RDNERlZGX1hZWlJIVyk7CisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NF
UEFSQVRFQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7CisgICAgICAgIG1EZXZpY2UtPlNldFRleHR1
cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUk9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7CisgICAg
ICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUkFSRzEsIEQz
RFRBX1RGQUNUT1IpOworICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBE
M0RUU1NfQUxQSEFPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOworICAgICAgICBtRGV2aWNlLT5TZXRU
ZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQUxQSEFBUkcxLCBEM0RUQV9URkFDVE9SKTsKKyAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfVEVYVFVSRUZBQ1RPUiwgY29sb3Ip
OworICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRU1BU0ss
IDB4RkZGRkZGRkYpOworCisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRF
WF9BVFRSSUJTOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVh
bVNvdXJjZUZyZXEoaSwgMSk7CisgICAgICAgIH0KKworICAgICAgICBmbG9hdCBxdWFkWzRdWzRd
OyAgIC8vIEEgcXVhZHJpbGF0ZXJhbCBjb3ZlcmluZyB0aGUgdGFyZ2V0LCBhbGlnbmVkIHRvIG1h
dGNoIHRoZSBlZGdlcworICAgICAgICBxdWFkWzBdWzBdID0gLTAuNWY7CisgICAgICAgIHF1YWRb
MF1bMV0gPSBtUmVuZGVyVGFyZ2V0RGVzYy5oZWlnaHQgLSAwLjVmOworICAgICAgICBxdWFkWzBd
WzJdID0gMC4wZjsKKyAgICAgICAgcXVhZFswXVszXSA9IDEuMGY7CisKKyAgICAgICAgcXVhZFsx
XVswXSA9IG1SZW5kZXJUYXJnZXREZXNjLndpZHRoIC0gMC41ZjsKKyAgICAgICAgcXVhZFsxXVsx
XSA9IG1SZW5kZXJUYXJnZXREZXNjLmhlaWdodCAtIDAuNWY7CisgICAgICAgIHF1YWRbMV1bMl0g
PSAwLjBmOworICAgICAgICBxdWFkWzFdWzNdID0gMS4wZjsKKworICAgICAgICBxdWFkWzJdWzBd
ID0gLTAuNWY7CisgICAgICAgIHF1YWRbMl1bMV0gPSAtMC41ZjsKKyAgICAgICAgcXVhZFsyXVsy
XSA9IDAuMGY7CisgICAgICAgIHF1YWRbMl1bM10gPSAxLjBmOworCisgICAgICAgIHF1YWRbM11b
MF0gPSBtUmVuZGVyVGFyZ2V0RGVzYy53aWR0aCAtIDAuNWY7CisgICAgICAgIHF1YWRbM11bMV0g
PSAtMC41ZjsKKyAgICAgICAgcXVhZFszXVsyXSA9IDAuMGY7CisgICAgICAgIHF1YWRbM11bM10g
PSAxLjBmOworCisgICAgICAgIHN0YXJ0U2NlbmUoKTsKKyAgICAgICAgbURldmljZS0+RHJhd1By
aW1pdGl2ZVVQKEQzRFBUX1RSSUFOR0xFU1RSSVAsIDIsIHF1YWQsIHNpemVvZihmbG9hdFs0XSkp
OworCisgICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCkK
KyAgICAgICAgeworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVO
QUJMRSwgVFJVRSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19a
V1JJVEVFTkFCTEUsIFRSVUUpOworICAgICAgICAgICAgbURldmljZS0+Q2xlYXIoMCwgTlVMTCwg
RDNEQ0xFQVJfWkJVRkZFUiwgY29sb3IsIGRlcHRoLCBzdGVuY2lsKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlICE9IE5VTEwpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1NYXNrZWRDbGVhclNhdmVkU3RhdGUtPkFwcGx5KCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgZWxzZSBpZiAoY2xlYXJQYXJhbXMubWFzaykKKyAgICB7CisgICAgICAgIERXT1JE
IGR4Q2xlYXJGbGFncyA9IDA7CisgICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09M
T1JfQlVGRkVSX0JJVCkKKyAgICAgICAgeworICAgICAgICAgICAgZHhDbGVhckZsYWdzIHw9IEQz
RENMRUFSX1RBUkdFVDsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAm
IEdMX0RFUFRIX0JVRkZFUl9CSVQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGR4Q2xlYXJGbGFn
cyB8PSBEM0RDTEVBUl9aQlVGRkVSOworICAgICAgICB9CisgICAgICAgIGlmIChjbGVhclBhcmFt
cy5tYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKQorICAgICAgICB7CisgICAgICAgICAgICBk
eENsZWFyRmxhZ3MgfD0gRDNEQ0xFQVJfU1RFTkNJTDsKKyAgICAgICAgfQorCisgICAgICAgIG1E
ZXZpY2UtPkNsZWFyKDAsIE5VTEwsIGR4Q2xlYXJGbGFncywgY29sb3IsIGRlcHRoLCBzdGVuY2ls
KTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyZXI5OjptYXJrQWxsU3RhdGVEaXJ0eSgpCit7Cisg
ICAgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwgPSAwOworICAgIG1BcHBsaWVkRGVwdGhidWZm
ZXJTZXJpYWwgPSAwOworICAgIG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCA9IDA7CisgICAg
bURlcHRoU3RlbmNpbEluaXRpYWxpemVkID0gZmFsc2U7CisgICAgbVJlbmRlclRhcmdldERlc2NJ
bml0aWFsaXplZCA9IGZhbHNlOworCisgICAgbUZvcmNlU2V0RGVwdGhTdGVuY2lsU3RhdGUgPSB0
cnVlOworICAgIG1Gb3JjZVNldFJhc3RlclN0YXRlID0gdHJ1ZTsKKyAgICBtRm9yY2VTZXRTY2lz
c29yID0gdHJ1ZTsKKyAgICBtRm9yY2VTZXRWaWV3cG9ydCA9IHRydWU7CisgICAgbUZvcmNlU2V0
QmxlbmRTdGF0ZSA9IHRydWU7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGds
OjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IGkrKykKKyAg
ICB7CisgICAgICAgIG1Gb3JjZVNldFZlcnRleFNhbXBsZXJTdGF0ZXNbaV0gPSB0cnVlOworICAg
ICAgICBtQ3VyVmVydGV4VGV4dHVyZVNlcmlhbHNbaV0gPSAwOworICAgIH0KKyAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgaSsrKQor
ICAgIHsKKyAgICAgICAgbUZvcmNlU2V0UGl4ZWxTYW1wbGVyU3RhdGVzW2ldID0gdHJ1ZTsKKyAg
ICAgICAgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbaV0gPSAwOworICAgIH0KKworICAgIG1BcHBs
aWVkSUJTZXJpYWwgPSAwOworICAgIG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbCA9IDA7Cisg
ICAgbUR4VW5pZm9ybXNEaXJ0eSA9IHRydWU7CisKKyAgICBtVmVydGV4RGVjbGFyYXRpb25DYWNo
ZS5tYXJrU3RhdGVEaXJ0eSgpOworfQorCit2b2lkIFJlbmRlcmVyOTo6cmVsZWFzZURldmljZVJl
c291cmNlcygpCit7CisgICAgd2hpbGUgKCFtRXZlbnRRdWVyeVBvb2wuZW1wdHkoKSkKKyAgICB7
CisgICAgICAgIG1FdmVudFF1ZXJ5UG9vbC5iYWNrKCktPlJlbGVhc2UoKTsKKyAgICAgICAgbUV2
ZW50UXVlcnlQb29sLnBvcF9iYWNrKCk7CisgICAgfQorCisgICAgU2FmZVJlbGVhc2UobU1hc2tl
ZENsZWFyU2F2ZWRTdGF0ZSk7CisKKyAgICBtVmVydGV4U2hhZGVyQ2FjaGUuY2xlYXIoKTsKKyAg
ICBtUGl4ZWxTaGFkZXJDYWNoZS5jbGVhcigpOworCisgICAgU2FmZURlbGV0ZShtQmxpdCk7Cisg
ICAgU2FmZURlbGV0ZShtVmVydGV4RGF0YU1hbmFnZXIpOworICAgIFNhZmVEZWxldGUobUluZGV4
RGF0YU1hbmFnZXIpOworICAgIFNhZmVEZWxldGUobUxpbmVMb29wSUIpOworCisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBOVU1fTlVMTF9DT0xPUkJVRkZFUl9DQUNIRV9FTlRSSUVTOyBpKyspCisg
ICAgeworICAgICAgICBTYWZlRGVsZXRlKG1OdWxsQ29sb3JidWZmZXJDYWNoZVtpXS5idWZmZXIp
OworICAgIH0KKworfQorCisKK3ZvaWQgUmVuZGVyZXI5Ojpub3RpZnlEZXZpY2VMb3N0KCkKK3sK
KyAgICBtRGV2aWNlTG9zdCA9IHRydWU7CisgICAgbURpc3BsYXktPm5vdGlmeURldmljZUxvc3Qo
KTsKK30KKworYm9vbCBSZW5kZXJlcjk6OmlzRGV2aWNlTG9zdCgpCit7CisgICAgcmV0dXJuIG1E
ZXZpY2VMb3N0OworfQorCisvLyBzZXQgbm90aWZ5IHRvIHRydWUgdG8gYnJvYWRjYXN0IGEgbWVz
c2FnZSB0byBhbGwgY29udGV4dHMgb2YgdGhlIGRldmljZSBsb3NzCitib29sIFJlbmRlcmVyOTo6
dGVzdERldmljZUxvc3QoYm9vbCBub3RpZnkpCit7CisgICAgSFJFU1VMVCBzdGF0dXMgPSBnZXRE
ZXZpY2VTdGF0dXNDb2RlKCk7CisgICAgYm9vbCBpc0xvc3QgPSBGQUlMRUQoc3RhdHVzKTsKKwor
ICAgIGlmIChpc0xvc3QpCisgICAgeworICAgICAgICAvLyBlbnN1cmUgd2Ugbm90ZSB0aGUgZGV2
aWNlIGxvc3MgLS0KKyAgICAgICAgLy8gd2UnbGwgcHJvYmFibHkgZ2V0IHRoaXMgZG9uZSBhZ2Fp
biBieSBub3RpZnlEZXZpY2VMb3N0CisgICAgICAgIC8vIGJ1dCBiZXN0IHRvIHJlbWVtYmVyIGl0
IQorICAgICAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byBjbGVhciB0aGUgZGV2aWNl
IGxvc3Mgc3RhdHVzIGhlcmUKKyAgICAgICAgLy8gLS0gdGhpcyBuZWVkcyB0byBiZSBkb25lIGJ5
IHJlc2V0RGV2aWNlCisgICAgICAgIG1EZXZpY2VMb3N0ID0gdHJ1ZTsKKyAgICAgICAgaWYgKG5v
dGlmeSkKKyAgICAgICAgeworICAgICAgICAgICAgbm90aWZ5RGV2aWNlTG9zdCgpOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIGlzTG9zdDsKK30KKworSFJFU1VMVCBSZW5kZXJlcjk6
OmdldERldmljZVN0YXR1c0NvZGUoKQoreworICAgIEhSRVNVTFQgc3RhdHVzID0gRDNEX09LOwor
CisgICAgaWYgKG1EZXZpY2VFeCkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IG1EZXZpY2VFeC0+
Q2hlY2tEZXZpY2VTdGF0ZShOVUxMKTsKKyAgICB9CisgICAgZWxzZSBpZiAobURldmljZSkKKyAg
ICB7CisgICAgICAgIHN0YXR1cyA9IG1EZXZpY2UtPlRlc3RDb29wZXJhdGl2ZUxldmVsKCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworYm9vbCBSZW5kZXJlcjk6OnRlc3REZXZp
Y2VSZXNldHRhYmxlKCkKK3sKKyAgICAvLyBPbiBEM0Q5RXgsIERFVklDRUxPU1QgcmVwcmVzZW50
cyBhIGh1bmcgZGV2aWNlIHRoYXQgbmVlZHMgdG8gYmUgcmVzdGFydGVkCisgICAgLy8gREVWSUNF
UkVNT1ZFRCBpbmRpY2F0ZXMgdGhlIGRldmljZSBoYXMgYmVlbiBzdG9wcGVkIGFuZCBtdXN0IGJl
IHJlY3JlYXRlZAorICAgIHN3aXRjaCAoZ2V0RGV2aWNlU3RhdHVzQ29kZSgpKQorICAgIHsKKyAg
ICAgIGNhc2UgRDNERVJSX0RFVklDRU5PVFJFU0VUOgorICAgICAgY2FzZSBEM0RFUlJfREVWSUNF
SFVORzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICBjYXNlIEQzREVSUl9ERVZJQ0VMT1NU
OgorICAgICAgICByZXR1cm4gKG1EZXZpY2VFeCAhPSBOVUxMKTsKKyAgICAgIGNhc2UgRDNERVJS
X0RFVklDRVJFTU9WRUQ6CisgICAgICAgIEFTU0VSVChtRGV2aWNlRXggIT0gTlVMTCk7CisgICAg
ICAgIHJldHVybiBpc1JlbW92ZWREZXZpY2VSZXNldHRhYmxlKCk7CisgICAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFJlbmRlcmVyOTo6cmVzZXRE
ZXZpY2UoKQoreworICAgIHJlbGVhc2VEZXZpY2VSZXNvdXJjZXMoKTsKKworICAgIEQzRFBSRVNF
TlRfUEFSQU1FVEVSUyBwcmVzZW50UGFyYW1ldGVycyA9IGdldERlZmF1bHRQcmVzZW50UGFyYW1l
dGVycygpOworCisgICAgSFJFU1VMVCByZXN1bHQgPSBEM0RfT0s7CisgICAgYm9vbCBsb3N0ID0g
dGVzdERldmljZUxvc3QoZmFsc2UpOworICAgIGJvb2wgcmVtb3ZlZERldmljZSA9IChnZXREZXZp
Y2VTdGF0dXNDb2RlKCkgPT0gRDNERVJSX0RFVklDRVJFTU9WRUQpOworCisgICAgLy8gRGV2aWNl
IFJlbW92ZWQgaXMgYSBmZWF0dXJlIHdoaWNoIGlzIG9ubHkgcHJlc2VudCB3aXRoIEQzRDlFeAor
ICAgIEFTU0VSVChtRGV2aWNlRXggIT0gTlVMTCB8fCAhcmVtb3ZlZERldmljZSk7CisKKyAgICBm
b3IgKGludCBhdHRlbXB0cyA9IDM7IGxvc3QgJiYgYXR0ZW1wdHMgPiAwOyBhdHRlbXB0cy0tKQor
ICAgIHsKKyAgICAgICAgaWYgKHJlbW92ZWREZXZpY2UpCisgICAgICAgIHsKKyAgICAgICAgICAg
IC8vIERldmljZSByZW1vdmVkLCB3aGljaCBtYXkgdHJpZ2dlciBvbiBkcml2ZXIgcmVpbnN0YWxs
YXRpb24sCisgICAgICAgICAgICAvLyBtYXkgY2F1c2UgYSBsb25nZXIgd2FpdCBvdGhlciByZXNl
dCBhdHRlbXB0cyBiZWZvcmUgdGhlCisgICAgICAgICAgICAvLyBzeXN0ZW0gaXMgcmVhZHkgdG8g
aGFuZGxlIGNyZWF0aW5nIGEgbmV3IGRldmljZS4KKyAgICAgICAgICAgIFNsZWVwKDgwMCk7Cisg
ICAgICAgICAgICBsb3N0ID0gIXJlc2V0UmVtb3ZlZERldmljZSgpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKG1EZXZpY2VFeCkKKyAgICAgICAgeworICAgICAgICAgICAgU2xlZXAoNTAw
KTsgICAvLyBHaXZlIHRoZSBncmFwaGljcyBkcml2ZXIgc29tZSBDUFUgdGltZQorICAgICAgICAg
ICAgcmVzdWx0ID0gbURldmljZUV4LT5SZXNldEV4KCZwcmVzZW50UGFyYW1ldGVycywgTlVMTCk7
CisgICAgICAgICAgICBsb3N0ID0gdGVzdERldmljZUxvc3QoZmFsc2UpOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+VGVz
dENvb3BlcmF0aXZlTGV2ZWwoKTsKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQgPT0gRDNERVJS
X0RFVklDRUxPU1QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU2xlZXAoMTAwKTsg
ICAvLyBHaXZlIHRoZSBncmFwaGljcyBkcml2ZXIgc29tZSBDUFUgdGltZQorICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IG1EZXZpY2UtPlRlc3RDb29wZXJhdGl2ZUxldmVsKCk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX0RFVklDRU5PVFJFU0VUKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPlJlc2V0KCZw
cmVzZW50UGFyYW1ldGVycyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsb3N0ID0gdGVz
dERldmljZUxvc3QoZmFsc2UpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKEZBSUxFRChy
ZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJSZXNldC9SZXNldEV4IGZhaWxlZCBtdWx0aXBs
ZSB0aW1lczogMHglMDhYIiwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGlmIChyZW1vdmVkRGV2aWNlICYmIGxvc3QpCisgICAgeworICAgICAgICBFUlIoIkRl
dmljZSBsb3N0IHJlc2V0IGZhaWxlZCBtdWx0aXBsZSB0aW1lcyIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgLy8gSWYgdGhlIGRldmljZSB3YXMgcmVtb3ZlZCwgd2UgYWxy
ZWFkeSBmaW5pc2hlZCByZS1pbml0aWFsaXphdGlvbiBpbiByZXNldFJlbW92ZWREZXZpY2UKKyAg
ICBpZiAoIXJlbW92ZWREZXZpY2UpCisgICAgeworICAgICAgICAvLyByZXNldCBkZXZpY2UgZGVm
YXVsdHMKKyAgICAgICAgaW5pdGlhbGl6ZURldmljZSgpOworICAgIH0KKworICAgIG1EZXZpY2VM
b3N0ID0gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW5kZXJlcjk6Omlz
UmVtb3ZlZERldmljZVJlc2V0dGFibGUoKSBjb25zdAoreworICAgIGJvb2wgc3VjY2VzcyA9IGZh
bHNlOworCisjaWZkZWYgQU5HTEVfRU5BQkxFX0QzRDlFWAorICAgIElEaXJlY3QzRDlFeCAqZDNk
OUV4ID0gTlVMTDsKKyAgICB0eXBlZGVmIEhSRVNVTFQgKFdJTkFQSSAqRGlyZWN0M0RDcmVhdGU5
RXhGdW5jKShVSU5ULCBJRGlyZWN0M0Q5RXgqKik7CisgICAgRGlyZWN0M0RDcmVhdGU5RXhGdW5j
IERpcmVjdDNEQ3JlYXRlOUV4UHRyID0gcmVpbnRlcnByZXRfY2FzdDxEaXJlY3QzRENyZWF0ZTlF
eEZ1bmM+KEdldFByb2NBZGRyZXNzKG1EM2Q5TW9kdWxlLCAiRGlyZWN0M0RDcmVhdGU5RXgiKSk7
CisKKyAgICBpZiAoRGlyZWN0M0RDcmVhdGU5RXhQdHIgJiYgU1VDQ0VFREVEKERpcmVjdDNEQ3Jl
YXRlOUV4UHRyKEQzRF9TREtfVkVSU0lPTiwgJmQzZDlFeCkpKQorICAgIHsKKyAgICAgICAgRDNE
Q0FQUzkgZGV2aWNlQ2FwczsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkM2Q5RXgtPkdldERl
dmljZUNhcHMobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCAmZGV2aWNlQ2Fwcyk7CisgICAgICAgIHN1
Y2Nlc3MgPSBTVUNDRUVERUQocmVzdWx0KTsKKyAgICB9CisKKyAgICBTYWZlUmVsZWFzZShkM2Q5
RXgpOworI2Vsc2UKKyAgICBBU1NFUlQoVU5SRUFDSEFCTEUoKSk7CisjZW5kaWYKKworICAgIHJl
dHVybiBzdWNjZXNzOworfQorCitib29sIFJlbmRlcmVyOTo6cmVzZXRSZW1vdmVkRGV2aWNlKCkK
K3sKKyAgICAvLyBGcm9tIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93
aW5kb3dzL2Rlc2t0b3AvYmIxNzI1NTQodj12cy44NSkuYXNweDoKKyAgICAvLyBUaGUgaGFyZHdh
cmUgYWRhcHRlciBoYXMgYmVlbiByZW1vdmVkLiBBcHBsaWNhdGlvbiBtdXN0IGRlc3Ryb3kgdGhl
IGRldmljZSwgZG8gZW51bWVyYXRpb24gb2YKKyAgICAvLyBhZGFwdGVycyBhbmQgY3JlYXRlIGFu
b3RoZXIgRGlyZWN0M0QgZGV2aWNlLiBJZiBhcHBsaWNhdGlvbiBjb250aW51ZXMgcmVuZGVyaW5n
IHdpdGhvdXQKKyAgICAvLyBjYWxsaW5nIFJlc2V0LCB0aGUgcmVuZGVyaW5nIGNhbGxzIHdpbGwg
c3VjY2VlZC4gQXBwbGllcyB0byBEaXJlY3QzRCA5RXggb25seS4KKyAgICBkZWluaXRpYWxpemUo
KTsKKyAgICByZXR1cm4gKGluaXRpYWxpemUoKSA9PSBFR0xfU1VDQ0VTUyk7Cit9CisKK0RXT1JE
IFJlbmRlcmVyOTo6Z2V0QWRhcHRlclZlbmRvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1BZGFw
dGVySWRlbnRpZmllci5WZW5kb3JJZDsKK30KKworc3RkOjpzdHJpbmcgUmVuZGVyZXI5OjpnZXRS
ZW5kZXJlckRlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gcmVu
ZGVyZXJTdHJpbmc7CisKKyAgICByZW5kZXJlclN0cmluZyA8PCBtQWRhcHRlcklkZW50aWZpZXIu
RGVzY3JpcHRpb247CisgICAgaWYgKGdldFNoYXJlSGFuZGxlU3VwcG9ydCgpKQorICAgIHsKKyAg
ICAgICAgcmVuZGVyZXJTdHJpbmcgPDwgIiBEaXJlY3QzRDlFeCI7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIHJlbmRlcmVyU3RyaW5nIDw8ICIgRGlyZWN0M0Q5IjsKKyAgICB9CisK
KyAgICByZW5kZXJlclN0cmluZyA8PCAiIHZzXyIgPDwgRDNEU0hBREVSX1ZFUlNJT05fTUFKT1Io
bURldmljZUNhcHMuVmVydGV4U2hhZGVyVmVyc2lvbikgPDwgIl8iIDw8IEQzRFNIQURFUl9WRVJT
SU9OX01JTk9SKG1EZXZpY2VDYXBzLlZlcnRleFNoYWRlclZlcnNpb24pOworICAgIHJlbmRlcmVy
U3RyaW5nIDw8ICIgcHNfIiA8PCBEM0RTSEFERVJfVkVSU0lPTl9NQUpPUihtRGV2aWNlQ2Fwcy5Q
aXhlbFNoYWRlclZlcnNpb24pIDw8ICJfIiA8PCBEM0RTSEFERVJfVkVSU0lPTl9NSU5PUihtRGV2
aWNlQ2Fwcy5QaXhlbFNoYWRlclZlcnNpb24pOworCisgICAgcmV0dXJuIHJlbmRlcmVyU3RyaW5n
LnN0cigpOworfQorCitHVUlEIFJlbmRlcmVyOTo6Z2V0QWRhcHRlcklkZW50aWZpZXIoKSBjb25z
dAoreworICAgIHJldHVybiBtQWRhcHRlcklkZW50aWZpZXIuRGV2aWNlSWRlbnRpZmllcjsKK30K
Kwordm9pZCBSZW5kZXJlcjk6OmdldE11bHRpU2FtcGxlU3VwcG9ydChEM0RGT1JNQVQgZm9ybWF0
LCBib29sICptdWx0aVNhbXBsZUFycmF5KQoreworICAgIGZvciAoaW50IG11bHRpU2FtcGxlSW5k
ZXggPSAwOyBtdWx0aVNhbXBsZUluZGV4IDw9IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7IG11
bHRpU2FtcGxlSW5kZXgrKykKKyAgICB7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQzZDkt
PkNoZWNrRGV2aWNlTXVsdGlTYW1wbGVUeXBlKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgZm9ybWF0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUUlVFLCAoRDNETVVMVElTQU1QTEVfVFlQRSltdWx0aVNhbXBsZUluZGV4LCBOVUxMKTsK
KworICAgICAgICBtdWx0aVNhbXBsZUFycmF5W211bHRpU2FtcGxlSW5kZXhdID0gU1VDQ0VFREVE
KHJlc3VsdCk7CisgICAgfQorfQorCitib29sIFJlbmRlcmVyOTo6Z2V0QkdSQVRleHR1cmVTdXBw
b3J0KCkgY29uc3QKK3sKKyAgICAvLyBEaXJlY3RYIDkgYWx3YXlzIHN1cHBvcnRzIEJHUkEKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldERYVDFUZXh0dXJlU3VwcG9y
dCgpCit7CisgICAgcmV0dXJuIG1EWFQxVGV4dHVyZVN1cHBvcnQ7Cit9CisKK2Jvb2wgUmVuZGVy
ZXI5OjpnZXREWFQzVGV4dHVyZVN1cHBvcnQoKQoreworICAgIHJldHVybiBtRFhUM1RleHR1cmVT
dXBwb3J0OworfQorCitib29sIFJlbmRlcmVyOTo6Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCkKK3sK
KyAgICByZXR1cm4gbURYVDVUZXh0dXJlU3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjk6Omdl
dERlcHRoVGV4dHVyZVN1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiBtRGVwdGhUZXh0dXJl
U3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydChi
b29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpCit7CisgICAgKmZpbHRlcmluZyA9IG1G
bG9hdDMyRmlsdGVyU3VwcG9ydDsKKyAgICAqcmVuZGVyYWJsZSA9IG1GbG9hdDMyUmVuZGVyU3Vw
cG9ydDsKKyAgICByZXR1cm4gbUZsb2F0MzJUZXh0dXJlU3VwcG9ydDsKK30KKworYm9vbCBSZW5k
ZXJlcjk6OmdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJl
bmRlcmFibGUpCit7CisgICAgKmZpbHRlcmluZyA9IG1GbG9hdDE2RmlsdGVyU3VwcG9ydDsKKyAg
ICAqcmVuZGVyYWJsZSA9IG1GbG9hdDE2UmVuZGVyU3VwcG9ydDsKKyAgICByZXR1cm4gbUZsb2F0
MTZUZXh0dXJlU3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldEx1bWluYW5jZVRleHR1
cmVTdXBwb3J0KCkKK3sKKyAgICByZXR1cm4gbUx1bWluYW5jZVRleHR1cmVTdXBwb3J0OworfQor
Citib29sIFJlbmRlcmVyOTo6Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpCit7Cisg
ICAgcmV0dXJuIG1MdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0OworfQorCitib29sIFJlbmRl
cmVyOTo6Z2V0VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHk7Cit9CisKK2Zsb2F0IFJlbmRl
cmVyOTo6Z2V0VGV4dHVyZU1heEFuaXNvdHJvcHkoKSBjb25zdAoreworICAgIGlmIChtU3VwcG9y
dHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxmbG9hdD4obURldmljZUNhcHMuTWF4QW5pc290cm9weSk7CisgICAgfQorICAgIHJldHVy
biAxLjBmOworfQorCitib29sIFJlbmRlcmVyOTo6Z2V0RXZlbnRRdWVyeVN1cHBvcnQoKQorewor
ICAgIHJldHVybiBtRXZlbnRRdWVyeVN1cHBvcnQ7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJl
cjk6OmdldE1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3QKK3sKKyAgICBNRVRBX0FT
U0VSVChNQVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZfU00zIDw9IGdsOjpJTVBMRU1FTlRBVElP
Tl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMpOworICAgIHJldHVybiBtVmVydGV4VGV4
dHVyZVN1cHBvcnQgPyBNQVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZfU00zIDogMDsKK30KKwor
dW5zaWduZWQgaW50IFJlbmRlcmVyOTo6Z2V0TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyArIGdldE1h
eFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCk7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjk6
OmdldFJlc2VydmVkVmVydGV4VW5pZm9ybVZlY3RvcnMoKSBjb25zdAoreworICAgIHJldHVybiAy
OyAgIC8vIGR4X1ZpZXdBZGp1c3QgYW5kIGR4X0RlcHRoUmFuZ2UuCit9CisKK3Vuc2lnbmVkIGlu
dCBSZW5kZXJlcjk6OmdldFJlc2VydmVkRnJhZ21lbnRVbmlmb3JtVmVjdG9ycygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIDM7ICAgLy8gZHhfVmlld0Nvb3JkcywgZHhfRGVwdGhGcm9udCBhbmQgZHhf
RGVwdGhSYW5nZS4KK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyOTo6Z2V0TWF4VmVydGV4VW5p
Zm9ybVZlY3RvcnMoKSBjb25zdAoreworICAgIHJldHVybiBNQVhfVkVSVEVYX0NPTlNUQU5UX1ZF
Q1RPUlNfRDNEOSAtIGdldFJlc2VydmVkVmVydGV4VW5pZm9ybVZlY3RvcnMoKTsKK30KKwordW5z
aWduZWQgaW50IFJlbmRlcmVyOTo6Z2V0TWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycygpIGNvbnN0
Cit7CisgICAgY29uc3QgaW50IG1heFBpeGVsQ29uc3RhbnRWZWN0b3JzID0gKGdldE1ham9yU2hh
ZGVyTW9kZWwoKSA+PSAzKSA/IE1BWF9QSVhFTF9DT05TVEFOVF9WRUNUT1JTX1NNMyA6IE1BWF9Q
SVhFTF9DT05TVEFOVF9WRUNUT1JTX1NNMjsKKworICAgIHJldHVybiBtYXhQaXhlbENvbnN0YW50
VmVjdG9ycyAtIGdldFJlc2VydmVkRnJhZ21lbnRVbmlmb3JtVmVjdG9ycygpOworfQorCit1bnNp
Z25lZCBpbnQgUmVuZGVyZXI5OjpnZXRNYXhWYXJ5aW5nVmVjdG9ycygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIChnZXRNYWpvclNoYWRlck1vZGVsKCkgPj0gMykgPyBNQVhfVkFSWUlOR19WRUNUT1JT
X1NNMyA6IE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00yOworfQorCitib29sIFJlbmRlcmVyOTo6Z2V0
Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiBtU3VwcG9ydHNO
b25Qb3dlcjJUZXh0dXJlczsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldE9jY2x1c2lvblF1ZXJ5
U3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1PY2NsdXNpb25RdWVyeVN1cHBvcnQ7Cit9
CisKK2Jvb2wgUmVuZGVyZXI5OjpnZXRJbnN0YW5jaW5nU3VwcG9ydCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVyVmVyc2lvbiA+PSBEM0RQU19WRVJTSU9OKDMs
IDApOworfQorCitib29sIFJlbmRlcmVyOTo6Z2V0U2hhcmVIYW5kbGVTdXBwb3J0KCkgY29uc3QK
K3sKKyAgICAvLyBQSVggZG9lc24ndCBzZWVtIHRvIHN1cHBvcnQgdXNpbmcgc2hhcmUgaGFuZGxl
cywgc28gZGlzYWJsZSB0aGVtLgorICAgIHJldHVybiAobUQzZDlFeCAhPSBOVUxMKSAmJiAhZ2w6
OnBlcmZBY3RpdmUoKTsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldERlcml2YXRpdmVJbnN0cnVj
dGlvblN1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiAobURldmljZUNhcHMuUFMyMENhcHMu
Q2FwcyAmIEQzRFBTMjBDQVBTX0dSQURJRU5USU5TVFJVQ1RJT05TKSAhPSAwOworfQorCitib29s
IFJlbmRlcmVyOTo6Z2V0UG9zdFN1YkJ1ZmZlclN1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVy
biB0cnVlOworfQorCitpbnQgUmVuZGVyZXI5OjpnZXRNYWpvclNoYWRlck1vZGVsKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gRDNEU0hBREVSX1ZFUlNJT05fTUFKT1IobURldmljZUNhcHMuUGl4ZWxT
aGFkZXJWZXJzaW9uKTsKK30KKworZmxvYXQgUmVuZGVyZXI5OjpnZXRNYXhQb2ludFNpemUoKSBj
b25zdAoreworICAgIC8vIFBvaW50IHNpemUgY2xhbXBlZCBhdCAxLjBmIGZvciBTTTIKKyAgICBy
ZXR1cm4gZ2V0TWFqb3JTaGFkZXJNb2RlbCgpID09IDMgPyBtRGV2aWNlQ2Fwcy5NYXhQb2ludFNp
emUgOiAxLjBmOworfQorCitpbnQgUmVuZGVyZXI5OjpnZXRNYXhWaWV3cG9ydERpbWVuc2lvbigp
IGNvbnN0Cit7CisgICAgaW50IG1heFRleHR1cmVEaW1lbnNpb24gPSBzdGQ6Om1pbihzdGQ6Om1p
bihnZXRNYXhUZXh0dXJlV2lkdGgoKSwgZ2V0TWF4VGV4dHVyZUhlaWdodCgpKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01B
WF9URVhUVVJFX1NJWkUpOworICAgIHJldHVybiBtYXhUZXh0dXJlRGltZW5zaW9uOworfQorCitp
bnQgUmVuZGVyZXI5OjpnZXRNYXhUZXh0dXJlV2lkdGgoKSBjb25zdAoreworICAgIHJldHVybiAo
aW50KW1EZXZpY2VDYXBzLk1heFRleHR1cmVXaWR0aDsKK30KKworaW50IFJlbmRlcmVyOTo6Z2V0
TWF4VGV4dHVyZUhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIChpbnQpbURldmljZUNhcHMu
TWF4VGV4dHVyZUhlaWdodDsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldDMyQml0SW5kZXhTdXBw
b3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbURldmljZUNhcHMuTWF4VmVydGV4SW5kZXggPj0g
KDEgPDwgMTYpOworfQorCitEV09SRCBSZW5kZXJlcjk6OmdldENhcHNEZWNsVHlwZXMoKSBjb25z
dAoreworICAgIHJldHVybiBtRGV2aWNlQ2Fwcy5EZWNsVHlwZXM7Cit9CisKK2ludCBSZW5kZXJl
cjk6OmdldE1pblN3YXBJbnRlcnZhbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1NaW5Td2FwSW50
ZXJ2YWw7Cit9CisKK2ludCBSZW5kZXJlcjk6OmdldE1heFN3YXBJbnRlcnZhbCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1NYXhTd2FwSW50ZXJ2YWw7Cit9CisKK2ludCBSZW5kZXJlcjk6OmdldE1h
eFN1cHBvcnRlZFNhbXBsZXMoKSBjb25zdAoreworICAgIHJldHVybiBtTWF4U3VwcG9ydGVkU2Ft
cGxlczsKK30KKworaW50IFJlbmRlcmVyOTo6Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMoRDNE
Rk9STUFUIGZvcm1hdCwgaW50IHJlcXVlc3RlZCkgY29uc3QKK3sKKyAgICBpZiAocmVxdWVzdGVk
ID09IDApCisgICAgeworICAgICAgICByZXR1cm4gcmVxdWVzdGVkOworICAgIH0KKworICAgIHN0
ZDo6bWFwPEQzREZPUk1BVCwgYm9vbCAqPjo6Y29uc3RfaXRlcmF0b3IgaXRyID0gbU11bHRpU2Ft
cGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7CisgICAgaWYgKGl0ciA9PSBtTXVsdGlTYW1wbGVTdXBw
b3J0LmVuZCgpKQorICAgIHsKKyAgICAgICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfVU5LTk9XTikK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAg
Zm9yIChpbnQgaSA9IHJlcXVlc3RlZDsgaSA8PSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTOyAr
K2kpCisgICAgeworICAgICAgICBpZiAoaXRyLT5zZWNvbmRbaV0gJiYgaSAhPSBEM0RNVUxUSVNB
TVBMRV9OT05NQVNLQUJMRSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJl
cjk6OmdldE1heFJlbmRlclRhcmdldHMoKSBjb25zdAoreworICAgIC8vIHdlIGRvIG5vdCBzdXBw
b3J0IE1SVCBpbiBkM2Q5CisgICAgcmV0dXJuIDE7Cit9CisKK0QzREZPUk1BVCBSZW5kZXJlcjk6
OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoR0xpbnQgaW50ZXJuYWxmb3JtYXQpCit7Cisg
ICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEdMX0RFUFRIX0NP
TVBPTkVOVDE2OgorICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVM6CisgICAgICBj
YXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgorICAgICAgICByZXR1cm4gRDNERk1UX0lOVFo7
CisgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6CisgICAgICBjYXNl
IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgorICAgICAgICByZXR1cm4gRDNERk1U
X0RYVDE7CisgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6Cisg
ICAgICAgIHJldHVybiBEM0RGTVRfRFhUMzsKKyAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JB
X1MzVENfRFhUNV9BTkdMRToKKyAgICAgICAgcmV0dXJuIEQzREZNVF9EWFQ1OworICAgICAgY2Fz
ZSBHTF9SR0JBMzJGX0VYVDoKKyAgICAgIGNhc2UgR0xfUkdCMzJGX0VYVDoKKyAgICAgIGNhc2Ug
R0xfQUxQSEEzMkZfRVhUOgorICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UzMkZfRVhUOgorICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhUOgorICAgICAgICByZXR1cm4gRDNERk1UX0Ez
MkIzMkczMlIzMkY7CisgICAgICBjYXNlIEdMX1JHQkExNkZfRVhUOgorICAgICAgY2FzZSBHTF9S
R0IxNkZfRVhUOgorICAgICAgY2FzZSBHTF9BTFBIQTE2Rl9FWFQ6CisgICAgICBjYXNlIEdMX0xV
TUlOQU5DRTE2Rl9FWFQ6CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6Cisg
ICAgICAgIHJldHVybiBEM0RGTVRfQTE2QjE2RzE2UjE2RjsKKyAgICAgIGNhc2UgR0xfTFVNSU5B
TkNFOF9FWFQ6CisgICAgICAgIGlmIChnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gRDNERk1UX0w4OworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQ6CisgICAgICAgIGlm
IChnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBEM0RGTVRfQThMODsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfUkdCOF9PRVM6CisgICAgICBjYXNlIEdMX1JHQjU2NToKKyAgICAgICAgcmV0dXJu
IEQzREZNVF9YOFI4RzhCODsKKyAgICB9CisKKyAgICByZXR1cm4gRDNERk1UX0E4UjhHOEI4Owor
fQorCitib29sIFJlbmRlcmVyOTo6Y29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlMkQgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnNvdXJjZSkKK3sKKyAg
ICBib29sIHJlc3VsdCA9IGZhbHNlOworCisgICAgaWYgKHNvdXJjZSAmJiBkZXN0KQorICAgIHsK
KyAgICAgICAgVGV4dHVyZVN0b3JhZ2U5XzJEICpzb3VyY2U5ID0gVGV4dHVyZVN0b3JhZ2U5XzJE
OjptYWtlVGV4dHVyZVN0b3JhZ2U5XzJEKHNvdXJjZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwor
ICAgICAgICBUZXh0dXJlU3RvcmFnZTlfMkQgKmRlc3Q5ID0gVGV4dHVyZVN0b3JhZ2U5XzJEOjpt
YWtlVGV4dHVyZVN0b3JhZ2U5XzJEKGRlc3QtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKworICAg
ICAgICBpbnQgbGV2ZWxzID0gc291cmNlOS0+bGV2ZWxDb3VudCgpOworICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGxldmVsczsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqc3JjU3VyZiA9IHNvdXJjZTktPmdldFN1cmZhY2VMZXZlbChpLCBmYWxzZSk7
CisgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZHN0U3VyZiA9IGRlc3Q5LT5nZXRTdXJm
YWNlTGV2ZWwoaSwgZmFsc2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICByZXN1bHQgPSBj
b3B5VG9SZW5kZXJUYXJnZXQoZHN0U3VyZiwgc3JjU3VyZiwgc291cmNlOS0+aXNNYW5hZ2VkKCkp
OworCisgICAgICAgICAgICBpZiAoc3JjU3VyZikgc3JjU3VyZi0+UmVsZWFzZSgpOworICAgICAg
ICAgICAgaWYgKGRzdFN1cmYpIGRzdFN1cmYtPlJlbGVhc2UoKTsKKworICAgICAgICAgICAgaWYg
KCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBSZW5kZXJlcjk6OmNvcHlUb1JlbmRl
clRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKmRlc3QsIFRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlQ3ViZSAqc291cmNlKQoreworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisKKyAg
ICBpZiAoc291cmNlICYmIGRlc3QpCisgICAgeworICAgICAgICBUZXh0dXJlU3RvcmFnZTlfQ3Vi
ZSAqc291cmNlOSA9IFRleHR1cmVTdG9yYWdlOV9DdWJlOjptYWtlVGV4dHVyZVN0b3JhZ2U5X0N1
YmUoc291cmNlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CisgICAgICAgIFRleHR1cmVTdG9yYWdl
OV9DdWJlICpkZXN0OSA9IFRleHR1cmVTdG9yYWdlOV9DdWJlOjptYWtlVGV4dHVyZVN0b3JhZ2U5
X0N1YmUoZGVzdC0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAgICAgICBpbnQgbGV2ZWxzID0g
c291cmNlOS0+bGV2ZWxDb3VudCgpOworICAgICAgICBmb3IgKGludCBmID0gMDsgZiA8IDY7IGYr
KykKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZXZlbHM7IGkr
KykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3Jj
U3VyZiA9IHNvdXJjZTktPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWCArIGYsIGksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqZHN0U3VyZiA9IGRlc3Q5LT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1ggKyBmLCBpLCB0cnVlKTsKKworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNv
cHlUb1JlbmRlclRhcmdldChkc3RTdXJmLCBzcmNTdXJmLCBzb3VyY2U5LT5pc01hbmFnZWQoKSk7
CisKKyAgICAgICAgICAgICAgICBpZiAoc3JjU3VyZikgc3JjU3VyZi0+UmVsZWFzZSgpOworICAg
ICAgICAgICAgICAgIGlmIChkc3RTdXJmKSBkc3RTdXJmLT5SZWxlYXNlKCk7CisKKyAgICAgICAg
ICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworRDNEUE9PTCBSZW5kZXJlcjk6OmdldEJ1ZmZlclBvb2woRFdPUkQgdXNhZ2UpIGNvbnN0Cit7
CisgICAgaWYgKG1EM2Q5RXggIT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBEM0RQT09M
X0RFRkFVTFQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmICghKHVzYWdlICYg
RDNEVVNBR0VfRFlOQU1JQykpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBEM0RQT09M
X01BTkFHRUQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gRDNEUE9PTF9ERUZBVUxU
OworfQorCitib29sIFJlbmRlcmVyOTo6Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBHTGludCBsZXZlbCkKK3sKKyAg
ICBSRUNUIHJlY3Q7CisgICAgcmVjdC5sZWZ0ID0gc291cmNlUmVjdC54OworICAgIHJlY3QudG9w
ID0gc291cmNlUmVjdC55OworICAgIHJlY3QucmlnaHQgPSBzb3VyY2VSZWN0LnggKyBzb3VyY2VS
ZWN0LndpZHRoOworICAgIHJlY3QuYm90dG9tID0gc291cmNlUmVjdC55ICsgc291cmNlUmVjdC5o
ZWlnaHQ7CisKKyAgICByZXR1cm4gbUJsaXQtPmNvcHkoZnJhbWVidWZmZXIsIHJlY3QsIGRlc3RG
b3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQsIHN0b3JhZ2UsIGxldmVsKTsKK30KKworYm9vbCBSZW5k
ZXJlcjk6OmNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6
UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2VDdWJlICpzdG9yYWdlLCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkKK3sKKyAg
ICBSRUNUIHJlY3Q7CisgICAgcmVjdC5sZWZ0ID0gc291cmNlUmVjdC54OworICAgIHJlY3QudG9w
ID0gc291cmNlUmVjdC55OworICAgIHJlY3QucmlnaHQgPSBzb3VyY2VSZWN0LnggKyBzb3VyY2VS
ZWN0LndpZHRoOworICAgIHJlY3QuYm90dG9tID0gc291cmNlUmVjdC55ICsgc291cmNlUmVjdC5o
ZWlnaHQ7CisKKyAgICByZXR1cm4gbUJsaXQtPmNvcHkoZnJhbWVidWZmZXIsIHJlY3QsIGRlc3RG
b3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQsIHN0b3JhZ2UsIHRhcmdldCwgbGV2ZWwpOworfQorCiti
b29sIFJlbmRlcmVyOTo6YmxpdFJlY3QoZ2w6OkZyYW1lYnVmZmVyICpyZWFkRnJhbWVidWZmZXIs
IGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRSZWN0LCBnbDo6RnJhbWVidWZmZXIgKmRyYXdGcmFt
ZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0LCBib29sIGJsaXREZXB0aFN0ZW5jaWwpCit7
CisgICAgZW5kU2NlbmUoKTsKKworICAgIGlmIChibGl0UmVuZGVyVGFyZ2V0KQorICAgIHsKKyAg
ICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVhZEJ1ZmZlciA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0
Q29sb3JidWZmZXIoMCk7CisgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmRyYXdCdWZmZXIgPSBk
cmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKDApOworICAgICAgICBSZW5kZXJUYXJnZXQ5
ICpyZWFkUmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICAgICAgUmVuZGVyVGFyZ2V0OSAqZHJhd1Jl
bmRlclRhcmdldCA9IE5VTEw7CisgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5KiByZWFkU3VyZmFj
ZSA9IE5VTEw7CisgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5KiBkcmF3U3VyZmFjZSA9IE5VTEw7
CisKKyAgICAgICAgaWYgKHJlYWRCdWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlYWRS
ZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShyZWFkQnVmZmVy
LT5nZXRSZW5kZXJUYXJnZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRyYXdCdWZmZXIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGRyYXdSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQ5
OjptYWtlUmVuZGVyVGFyZ2V0OShkcmF3QnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAocmVhZFJlbmRlclRhcmdldCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmVhZFN1cmZhY2UgPSByZWFkUmVuZGVyVGFyZ2V0LT5nZXRTdXJmYWNlKCk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGRyYXdSZW5kZXJUYXJnZXQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGRyYXdTdXJmYWNlID0gZHJhd1JlbmRlclRhcmdldC0+Z2V0U3VyZmFjZSgpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCFyZWFkU3VyZmFjZSB8fCAhZHJhd1N1cmZhY2UpCisgICAgICAg
IHsKKyAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0
LiIpOworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxz
ZSk7CisgICAgICAgIH0KKworICAgICAgICBSRUNUIHNyY1JlY3Q7CisgICAgICAgIHNyY1JlY3Qu
bGVmdCA9IHJlYWRSZWN0Lng7CisgICAgICAgIHNyY1JlY3QucmlnaHQgPSByZWFkUmVjdC54ICsg
cmVhZFJlY3Qud2lkdGg7CisgICAgICAgIHNyY1JlY3QudG9wID0gcmVhZFJlY3QueTsKKyAgICAg
ICAgc3JjUmVjdC5ib3R0b20gPSByZWFkUmVjdC55ICsgcmVhZFJlY3QuaGVpZ2h0OworCisgICAg
ICAgIFJFQ1QgZHN0UmVjdDsKKyAgICAgICAgZHN0UmVjdC5sZWZ0ID0gZHJhd1JlY3QueDsKKyAg
ICAgICAgZHN0UmVjdC5yaWdodCA9IGRyYXdSZWN0LnggKyBkcmF3UmVjdC53aWR0aDsKKyAgICAg
ICAgZHN0UmVjdC50b3AgPSBkcmF3UmVjdC55OworICAgICAgICBkc3RSZWN0LmJvdHRvbSA9IGRy
YXdSZWN0LnkgKyBkcmF3UmVjdC5oZWlnaHQ7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBt
RGV2aWNlLT5TdHJldGNoUmVjdChyZWFkU3VyZmFjZSwgJnNyY1JlY3QsIGRyYXdTdXJmYWNlLCAm
ZHN0UmVjdCwgRDNEVEVYRl9OT05FKTsKKworICAgICAgICByZWFkU3VyZmFjZS0+UmVsZWFzZSgp
OworICAgICAgICBkcmF3U3VyZmFjZS0+UmVsZWFzZSgpOworCisgICAgICAgIGlmIChGQUlMRUQo
cmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJCbGl0RnJhbWVidWZmZXJBTkdM
RSBmYWlsZWQ6IFN0cmV0Y2hSZWN0IHJldHVybmVkICV4LiIsIHJlc3VsdCk7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYmxpdERlcHRoU3Rl
bmNpbCkKKyAgICB7CisgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlYWRCdWZmZXIgPSByZWFk
RnJhbWVidWZmZXItPmdldERlcHRoT3JTdGVuY2lsYnVmZmVyKCk7CisgICAgICAgIGdsOjpSZW5k
ZXJidWZmZXIgKmRyYXdCdWZmZXIgPSBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoT3JTdGVuY2ls
YnVmZmVyKCk7CisgICAgICAgIFJlbmRlclRhcmdldDkgKnJlYWREZXB0aFN0ZW5jaWwgPSBOVUxM
OworICAgICAgICBSZW5kZXJUYXJnZXQ5ICpkcmF3RGVwdGhTdGVuY2lsID0gTlVMTDsKKyAgICAg
ICAgSURpcmVjdDNEU3VyZmFjZTkqIHJlYWRTdXJmYWNlID0gTlVMTDsKKyAgICAgICAgSURpcmVj
dDNEU3VyZmFjZTkqIGRyYXdTdXJmYWNlID0gTlVMTDsKKworICAgICAgICBpZiAocmVhZEJ1ZmZl
cikKKyAgICAgICAgeworICAgICAgICAgICAgcmVhZERlcHRoU3RlbmNpbCA9IFJlbmRlclRhcmdl
dDk6Om1ha2VSZW5kZXJUYXJnZXQ5KHJlYWRCdWZmZXItPmdldERlcHRoU3RlbmNpbCgpKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoZHJhd0J1ZmZlcikKKyAgICAgICAgeworICAgICAgICAgICAg
ZHJhd0RlcHRoU3RlbmNpbCA9IFJlbmRlclRhcmdldDk6Om1ha2VSZW5kZXJUYXJnZXQ5KGRyYXdC
dWZmZXItPmdldERlcHRoU3RlbmNpbCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZWFk
RGVwdGhTdGVuY2lsKQorICAgICAgICB7CisgICAgICAgICAgICByZWFkU3VyZmFjZSA9IHJlYWRE
ZXB0aFN0ZW5jaWwtPmdldFN1cmZhY2UoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZHJhd0Rl
cHRoU3RlbmNpbCkKKyAgICAgICAgeworICAgICAgICAgICAgZHJhd1N1cmZhY2UgPSBkcmF3RGVw
dGhTdGVuY2lsLT5nZXRTdXJmYWNlKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXJlYWRT
dXJmYWNlIHx8ICFkcmF3U3VyZmFjZSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJGYWls
ZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQuIik7CisgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAg
IEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+U3RyZXRjaFJlY3QocmVhZFN1cmZhY2UsIE5VTEws
IGRyYXdTdXJmYWNlLCBOVUxMLCBEM0RURVhGX05PTkUpOworCisgICAgICAgIHJlYWRTdXJmYWNl
LT5SZWxlYXNlKCk7CisgICAgICAgIGRyYXdTdXJmYWNlLT5SZWxlYXNlKCk7CisKKyAgICAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkJsaXRGcmFt
ZWJ1ZmZlckFOR0xFIGZhaWxlZDogU3RyZXRjaFJlY3QgcmV0dXJuZWQgJXguIiwgcmVzdWx0KTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIFJlbmRlcmVyOTo6cmVhZFBpeGVscyhnbDo6RnJhbWVidWZmZXIg
KmZyYW1lYnVmZmVyLCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xzaXplaSBvdXRwdXRQaXRjaCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLCBHTGlu
dCBwYWNrQWxpZ25tZW50LCB2b2lkKiBwaXhlbHMpCit7CisgICAgUmVuZGVyVGFyZ2V0OSAqcmVu
ZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IE5VTEw7
CisgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29s
b3JidWZmZXIoMCk7CisKKyAgICBpZiAoY29sb3JidWZmZXIpCisgICAgeworICAgICAgICByZW5k
ZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShjb2xvcmJ1ZmZlci0+
Z2V0UmVuZGVyVGFyZ2V0KCkpOworICAgIH0KKyAgICAKKyAgICBpZiAocmVuZGVyVGFyZ2V0KQor
ICAgIHsKKyAgICAgICAgc3VyZmFjZSA9IHJlbmRlclRhcmdldC0+Z2V0U3VyZmFjZSgpOworICAg
IH0KKworICAgIGlmICghc3VyZmFjZSkKKyAgICB7CisgICAgICAgIC8vIGNvbnRleHQgbXVzdCBi
ZSBsb3N0CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBEM0RTVVJGQUNFX0RFU0MgZGVz
YzsKKyAgICBzdXJmYWNlLT5HZXREZXNjKCZkZXNjKTsKKworICAgIGlmIChkZXNjLk11bHRpU2Ft
cGxlVHlwZSAhPSBEM0RNVUxUSVNBTVBMRV9OT05FKQorICAgIHsKKyAgICAgICAgVU5JTVBMRU1F
TlRFRCgpOyAgIC8vIEZJWE1FOiBSZXF1aXJlcyByZXNvbHZlIHVzaW5nIFN0cmV0Y2hSZWN0IGlu
dG8gbm9uLW11bHRpc2FtcGxlZCByZW5kZXIgdGFyZ2V0CisgICAgICAgIHN1cmZhY2UtPlJlbGVh
c2UoKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
CisKKyAgICBIUkVTVUxUIHJlc3VsdDsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3lzdGVtU3Vy
ZmFjZSA9IE5VTEw7CisgICAgYm9vbCBkaXJlY3RUb1BpeGVscyA9ICFwYWNrUmV2ZXJzZVJvd09y
ZGVyICYmIHBhY2tBbGlnbm1lbnQgPD0gNCAmJiBnZXRTaGFyZUhhbmRsZVN1cHBvcnQoKSAmJgor
ICAgICAgICAgICAgICAgICAgICAgICAgICB4ID09IDAgJiYgeSA9PSAwICYmIFVJTlQod2lkdGgp
ID09IGRlc2MuV2lkdGggJiYgVUlOVChoZWlnaHQpID09IGRlc2MuSGVpZ2h0ICYmCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc2MuRm9ybWF0ID09IEQzREZNVF9BOFI4RzhCOCAmJiBmb3Jt
YXQgPT0gR0xfQkdSQV9FWFQgJiYgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFOworICAgIGlmIChk
aXJlY3RUb1BpeGVscykKKyAgICB7CisgICAgICAgIC8vIFVzZSB0aGUgcGl4ZWxzIHB0ciBhcyBh
IHNoYXJlZCBoYW5kbGUgdG8gd3JpdGUgZGlyZWN0bHkgaW50byBjbGllbnQncyBtZW1vcnkKKyAg
ICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRlc2Mu
V2lkdGgsIGRlc2MuSGVpZ2h0LCBkZXNjLkZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFBPT0xfU1lTVEVNTUVNLCAmc3lzdGVt
U3VyZmFjZSwgJnBpeGVscyk7CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAg
eworICAgICAgICAgICAgLy8gVHJ5IGFnYWluIHdpdGhvdXQgdGhlIHNoYXJlZCBoYW5kbGUKKyAg
ICAgICAgICAgIGRpcmVjdFRvUGl4ZWxzID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAoIWRpcmVjdFRvUGl4ZWxzKQorICAgIHsKKyAgICAgICAgcmVzdWx0ID0gbURldmljZS0+
Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBkZXNj
LkZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEQzRFBPT0xfU1lTVEVNTUVNLCAmc3lzdGVtU3VyZmFjZSwgTlVMTCk7CisgICAgICAg
IGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlc3Vs
dCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7
CisgICAgICAgICAgICBzdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmVzdWx0
ID0gbURldmljZS0+R2V0UmVuZGVyVGFyZ2V0RGF0YShzdXJmYWNlLCBzeXN0ZW1TdXJmYWNlKTsK
KyAgICBzdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgc3VyZmFjZSA9IE5VTEw7CisKKyAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7
CisKKyAgICAgICAgLy8gSXQgdHVybnMgb3V0IHRoYXQgRDNEIHdpbGwgc29tZXRpbWVzIHByb2R1
Y2UgbW9yZSBlcnJvcgorICAgICAgICAvLyBjb2RlcyB0aGFuIHRob3NlIGRvY3VtZW50ZWQuCisg
ICAgICAgIGlmIChkM2Q5Ojppc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBub3RpZnlEZXZpY2VMb3N0KCk7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgfQorCisgICAgaWYgKGRpcmVjdFRvUGl4ZWxzKQorICAgIHsKKyAgICAgICAg
c3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
UkVDVCByZWN0OworICAgIHJlY3QubGVmdCA9IGdsOjpjbGFtcCh4LCAwTCwgc3RhdGljX2Nhc3Q8
TE9ORz4oZGVzYy5XaWR0aCkpOworICAgIHJlY3QudG9wID0gZ2w6OmNsYW1wKHksIDBMLCBzdGF0
aWNfY2FzdDxMT05HPihkZXNjLkhlaWdodCkpOworICAgIHJlY3QucmlnaHQgPSBnbDo6Y2xhbXAo
eCArIHdpZHRoLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVzYy5XaWR0aCkpOworICAgIHJlY3Qu
Ym90dG9tID0gZ2w6OmNsYW1wKHkgKyBoZWlnaHQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNj
LkhlaWdodCkpOworCisgICAgRDNETE9DS0VEX1JFQ1QgbG9jazsKKyAgICByZXN1bHQgPSBzeXN0
ZW1TdXJmYWNlLT5Mb2NrUmVjdCgmbG9jaywgJnJlY3QsIEQzRExPQ0tfUkVBRE9OTFkpOworCisg
ICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOworCisgICAgICAgIHJldHVybjsgICAvLyBO
byBzZW5zaWJsZSBlcnJvciB0byBnZW5lcmF0ZQorICAgIH0KKworICAgIHVuc2lnbmVkIGNoYXIg
KmRlc3QgPSAodW5zaWduZWQgY2hhciopcGl4ZWxzOworICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0
MTYgPSAodW5zaWduZWQgc2hvcnQqKXBpeGVsczsKKworICAgIHVuc2lnbmVkIGNoYXIgKnNvdXJj
ZTsKKyAgICBpbnQgaW5wdXRQaXRjaDsKKyAgICBpZiAocGFja1JldmVyc2VSb3dPcmRlcikKKyAg
ICB7CisgICAgICAgIHNvdXJjZSA9ICgodW5zaWduZWQgY2hhciopbG9jay5wQml0cykgKyBsb2Nr
LlBpdGNoICogKHJlY3QuYm90dG9tIC0gcmVjdC50b3AgLSAxKTsKKyAgICAgICAgaW5wdXRQaXRj
aCA9IC1sb2NrLlBpdGNoOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzb3VyY2Ug
PSAodW5zaWduZWQgY2hhciopbG9jay5wQml0czsKKyAgICAgICAgaW5wdXRQaXRjaCA9IGxvY2su
UGl0Y2g7CisgICAgfQorCisgICAgdW5zaWduZWQgaW50IGZhc3RQaXhlbFNpemUgPSAwOworCisg
ICAgaWYgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BOFI4RzhCOCAmJgorICAgICAgICBmb3JtYXQg
PT0gR0xfQkdSQV9FWFQgJiYKKyAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQorICAg
IHsKKyAgICAgICAgZmFzdFBpeGVsU2l6ZSA9IDQ7CisgICAgfQorICAgIGVsc2UgaWYgKChkZXNj
LkZvcm1hdCA9PSBEM0RGTVRfQTRSNEc0QjQgJiYKKyAgICAgICAgICAgICBmb3JtYXQgPT0gR0xf
QkdSQV9FWFQgJiYKKyAgICAgICAgICAgICB0eXBlID09IEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80
XzRfUkVWX0VYVCkgfHwKKyAgICAgICAgICAgICAoZGVzYy5Gb3JtYXQgPT0gRDNERk1UX0ExUjVH
NUI1ICYmCisgICAgICAgICAgICAgZm9ybWF0ID09IEdMX0JHUkFfRVhUICYmCisgICAgICAgICAg
ICAgdHlwZSA9PSBHTF9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQpKQorICAgIHsKKyAg
ICAgICAgZmFzdFBpeGVsU2l6ZSA9IDI7CisgICAgfQorICAgIGVsc2UgaWYgKGRlc2MuRm9ybWF0
ID09IEQzREZNVF9BMTZCMTZHMTZSMTZGICYmCisgICAgICAgICAgICAgZm9ybWF0ID09IEdMX1JH
QkEgJiYKKyAgICAgICAgICAgICB0eXBlID09IEdMX0hBTEZfRkxPQVRfT0VTKQorICAgIHsKKyAg
ICAgICAgZmFzdFBpeGVsU2l6ZSA9IDg7CisgICAgfQorICAgIGVsc2UgaWYgKGRlc2MuRm9ybWF0
ID09IEQzREZNVF9BMzJCMzJHMzJSMzJGICYmCisgICAgICAgICAgICAgZm9ybWF0ID09IEdMX1JH
QkEgJiYKKyAgICAgICAgICAgICB0eXBlID09IEdMX0ZMT0FUKQorICAgIHsKKyAgICAgICAgZmFz
dFBpeGVsU2l6ZSA9IDE2OworICAgIH0KKworICAgIGZvciAoaW50IGogPSAwOyBqIDwgcmVjdC5i
b3R0b20gLSByZWN0LnRvcDsgaisrKQorICAgIHsKKyAgICAgICAgaWYgKGZhc3RQaXhlbFNpemUg
IT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRmFzdCBwYXRoIGZvciBmb3JtYXRzIHdo
aWNoIHJlcXVpcmUgbm8gdHJhbnNsYXRpb246CisgICAgICAgICAgICAvLyBEM0RGTVRfQThSOEc4
QjggdG8gQkdSQS9VTlNJR05FRF9CWVRFCisgICAgICAgICAgICAvLyBEM0RGTVRfQTRSNEc0QjQg
dG8gQkdSQS9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQKKyAgICAgICAgICAgIC8vIEQz
REZNVF9BMVI1RzVCNSB0byBCR1JBL1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVAorICAg
ICAgICAgICAgLy8gRDNERk1UX0ExNkIxNkcxNlIxNkYgdG8gUkdCQS9IQUxGX0ZMT0FUX09FUwor
ICAgICAgICAgICAgLy8gRDNERk1UX0EzMkIzMkczMlIzMkYgdG8gUkdCQS9GTE9BVAorICAgICAg
ICAgICAgLy8gCisgICAgICAgICAgICAvLyBOb3RlIHRoYXQgYnVmZmVycyB3aXRoIG5vIGFscGhh
IGdvIHRocm91Z2ggdGhlIHNsb3cgcGF0aCBiZWxvdy4KKyAgICAgICAgICAgIG1lbWNweShkZXN0
ICsgaiAqIG91dHB1dFBpdGNoLAorICAgICAgICAgICAgICAgICAgIHNvdXJjZSArIGogKiBpbnB1
dFBpdGNoLAorICAgICAgICAgICAgICAgICAgIChyZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0KSAqIGZh
c3RQaXhlbFNpemUpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSBpZiAoZGVzYy5Gb3JtYXQgPT0gRDNERk1UX0E4UjhHOEI4ICYmCisgICAgICAgICAgICAg
ICAgIGZvcm1hdCA9PSBHTF9SR0JBICYmCisgICAgICAgICAgICAgICAgIHR5cGUgPT0gR0xfVU5T
SUdORURfQllURSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRmFzdCBwYXRoIGZvciBzd2Fw
cGluZyByZWQgd2l0aCBibHVlCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3Qu
cmlnaHQgLSByZWN0LmxlZnQ7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICog
aW5wdXRQaXRjaCk7CisgICAgICAgICAgICAgICAgKih1bnNpZ25lZCBpbnQqKShkZXN0ICsgNCAq
IGkgKyBqICogb3V0cHV0UGl0Y2gpID0KKyAgICAgICAgICAgICAgICAgICAgKGFyZ2IgJiAweEZG
MDBGRjAwKSB8ICAgICAgIC8vIEtlZXAgYWxwaGEgYW5kIGdyZWVuCisgICAgICAgICAgICAgICAg
ICAgIChhcmdiICYgMHgwMEZGMDAwMCkgPj4gMTYgfCAvLyBNb3ZlIHJlZCB0byBibHVlCisgICAg
ICAgICAgICAgICAgICAgIChhcmdiICYgMHgwMDAwMDBGRikgPDwgMTY7ICAvLyBNb3ZlIGJsdWUg
dG8gcmVkCisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdC5yaWdodCAtIHJlY3QubGVmdDsgaSsr
KQorICAgICAgICB7CisgICAgICAgICAgICBmbG9hdCByOworICAgICAgICAgICAgZmxvYXQgZzsK
KyAgICAgICAgICAgIGZsb2F0IGI7CisgICAgICAgICAgICBmbG9hdCBhOworCisgICAgICAgICAg
ICBzd2l0Y2ggKGRlc2MuRm9ybWF0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNl
IEQzREZNVF9SNUc2QjU6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBzaG9ydCByZ2IgPSAqKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsgMiAqIGkgKyBq
ICogaW5wdXRQaXRjaCk7CisKKyAgICAgICAgICAgICAgICAgICAgYSA9IDEuMGY7CisgICAgICAg
ICAgICAgICAgICAgIGIgPSAocmdiICYgMHgwMDFGKSAqICgxLjBmIC8gMHgwMDFGKTsKKyAgICAg
ICAgICAgICAgICAgICAgZyA9IChyZ2IgJiAweDA3RTApICogKDEuMGYgLyAweDA3RTApOworICAg
ICAgICAgICAgICAgICAgICByID0gKHJnYiAmIDB4RjgwMCkgKiAoMS4wZiAvIDB4RjgwMCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEQzREZNVF9BMVI1RzVCNToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIHNob3J0IGFyZ2IgPSAqKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsgMiAq
IGkgKyBqICogaW5wdXRQaXRjaCk7CisKKyAgICAgICAgICAgICAgICAgICAgYSA9IChhcmdiICYg
MHg4MDAwKSA/IDEuMGYgOiAwLjBmOworICAgICAgICAgICAgICAgICAgICBiID0gKGFyZ2IgJiAw
eDAwMUYpICogKDEuMGYgLyAweDAwMUYpOworICAgICAgICAgICAgICAgICAgICBnID0gKGFyZ2Ig
JiAweDAzRTApICogKDEuMGYgLyAweDAzRTApOworICAgICAgICAgICAgICAgICAgICByID0gKGFy
Z2IgJiAweDdDMDApICogKDEuMGYgLyAweDdDMDApOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Cisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9
ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7CisKKyAg
ICAgICAgICAgICAgICAgICAgYSA9IChhcmdiICYgMHhGRjAwMDAwMCkgKiAoMS4wZiAvIDB4RkYw
MDAwMDApOworICAgICAgICAgICAgICAgICAgICBiID0gKGFyZ2IgJiAweDAwMDAwMEZGKSAqICgx
LjBmIC8gMHgwMDAwMDBGRik7CisgICAgICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDAw
MEZGMDApICogKDEuMGYgLyAweDAwMDBGRjAwKTsKKyAgICAgICAgICAgICAgICAgICAgciA9IChh
cmdiICYgMHgwMEZGMDAwMCkgKiAoMS4wZiAvIDB4MDBGRjAwMDApOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfWDhS
OEc4Qjg6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgeHJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRj
aCk7CisKKyAgICAgICAgICAgICAgICAgICAgYSA9IDEuMGY7CisgICAgICAgICAgICAgICAgICAg
IGIgPSAoeHJnYiAmIDB4MDAwMDAwRkYpICogKDEuMGYgLyAweDAwMDAwMEZGKTsKKyAgICAgICAg
ICAgICAgICAgICAgZyA9ICh4cmdiICYgMHgwMDAwRkYwMCkgKiAoMS4wZiAvIDB4MDAwMEZGMDAp
OworICAgICAgICAgICAgICAgICAgICByID0gKHhyZ2IgJiAweDAwRkYwMDAwKSAqICgxLjBmIC8g
MHgwMEZGMDAwMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMlIxMEcxMEIxMDoKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdiID0gKih1bnNpZ25lZCBpbnQq
KShzb3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBpdGNoKTsKKworICAgICAgICAgICAgICAgICAg
ICBhID0gKGFyZ2IgJiAweEMwMDAwMDAwKSAqICgxLjBmIC8gMHhDMDAwMDAwMCk7CisgICAgICAg
ICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAwMDAzRkYpICogKDEuMGYgLyAweDAwMDAwM0ZG
KTsKKyAgICAgICAgICAgICAgICAgICAgZyA9IChhcmdiICYgMHgwMDBGRkMwMCkgKiAoMS4wZiAv
IDB4MDAwRkZDMDApOworICAgICAgICAgICAgICAgICAgICByID0gKGFyZ2IgJiAweDNGRjAwMDAw
KSAqICgxLjBmIC8gMHgzRkYwMDAwMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gZmxvYXQgZm9ybWF0cyBpbiBE
M0QgYXJlIHN0b3JlZCByZ2JhLCByYXRoZXIgdGhhbiB0aGUgb3RoZXIgd2F5IHJvdW5kCisgICAg
ICAgICAgICAgICAgICAgIHIgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGogKiBpbnB1
dFBpdGNoKSArIDApOworICAgICAgICAgICAgICAgICAgICBnID0gKigoZmxvYXQqKShzb3VyY2Ug
KyAxNiAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgYiA9
ICooKGZsb2F0Kikoc291cmNlICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMik7CisgICAg
ICAgICAgICAgICAgICAgIGEgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGogKiBpbnB1
dFBpdGNoKSArIDMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0IGZvcm1hdHMgaW4gRDNEIGFyZSBzdG9y
ZWQgcmdiYSwgcmF0aGVyIHRoYW4gdGhlIG90aGVyIHdheSByb3VuZAorICAgICAgICAgICAgICAg
ICAgICByID0gZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKigodW5zaWduZWQgc2hvcnQqKShzb3VyY2Ug
KyA4ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDApKTsKKyAgICAgICAgICAgICAgICAgICAgZyA9
IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCooKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsgOCAqIGkg
KyBqICogaW5wdXRQaXRjaCkgKyAxKSk7CisgICAgICAgICAgICAgICAgICAgIGIgPSBnbDo6Zmxv
YXQxNlRvRmxvYXQzMigqKCh1bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDggKiBpICsgaiAqIGlu
cHV0UGl0Y2gpICsgMikpOworICAgICAgICAgICAgICAgICAgICBhID0gZ2w6OmZsb2F0MTZUb0Zs
b2F0MzIoKigodW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyA4ICogaSArIGogKiBpbnB1dFBpdGNo
KSArIDMpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8v
IEZJWE1FCisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAgICAgICAgICAg
c3dpdGNoICh0eXBlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBv
dXRwdXRQaXRjaCArIDBdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIHIgKyAwLjVmKTsKKyAgICAg
ICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDFdID0gKHVuc2ln
bmVkIGNoYXIpKDI1NSAqIGcgKyAwLjVmKTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICog
aSArIGogKiBvdXRwdXRQaXRjaCArIDJdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGIgKyAwLjVm
KTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDNd
ID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGEgKyAwLjVmKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9CR1JBX0VYVDoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICAg
ICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMF0gPSAodW5zaWduZWQg
Y2hhcikoMjU1ICogYiArIDAuNWYpOworICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsg
aiAqIG91dHB1dFBpdGNoICsgMV0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogZyArIDAuNWYpOwor
ICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMl0gPSAo
dW5zaWduZWQgY2hhcikoMjU1ICogciArIDAuNWYpOworICAgICAgICAgICAgICAgICAgICBkZXN0
WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgM10gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYSAr
IDAuNWYpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNh
c2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhUOgorICAgICAgICAgICAgICAgICAg
ICAvLyBBY2NvcmRpbmcgdG8gdGhlIGRlc2t0b3AgR0wgc3BlYyBpbiB0aGUgIlRyYW5zZmVyIG9m
IFBpeGVsIFJlY3RhbmdsZXMiIHNlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB0
eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAvLyAgIDE1ICAg
MTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAgICAz
ICAgIDIgICAgMSAgICAwCisgICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAvLyB8ICAgICAgIDR0aCAgICAgICAgIHwgICAg
ICAgIDNyZCAgICAgICAgIHwgICAgICAgIDJuZCAgICAgICAgfCAgIDFzdCBjb21wb25lbnQgICB8
CisgICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAg
ICAgICAgICAgICAgICAvLyBpbiB0aGUgY2FzZSBvZiBCR1JBX0VYVCwgQiBpcyB0aGUgZmlyc3Qg
Y29tcG9uZW50LCBHIHRoZSBzZWNvbmQsIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgICAgICAg
ICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9
CisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIGEgKyAwLjVm
KSA8PCAxMil8CisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAq
IHIgKyAwLjVmKSA8PCA4KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNo
b3J0KSgxNSAqIGcgKyAwLjVmKSA8PCA0KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAoKHVu
c2lnbmVkIHNob3J0KSgxNSAqIGIgKyAwLjVmKSA8PCAwKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVf
UkVWX0VYVDoKKyAgICAgICAgICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9w
IEdMIHNwZWMgaW4gdGhlICJUcmFuc2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCisg
ICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgdHlwZSBpcyBwYWNrZWQgYXMgZm9sbG93czoKKyAg
ICAgICAgICAgICAgICAgICAgLy8gICAxNSAgIDE0ICAgMTMgICAxMiAgIDExICAgMTAgICAgOSAg
ICA4ICAgIDcgICAgNiAgICA1ICAgIDQgICAgMyAgICAyICAgIDEgICAgMAorICAgICAgICAgICAg
ICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAg
Ly8gfCA0dGggfCAgICAgICAgICAzcmQgICAgICAgICAgIHwgICAgICAgICAgIDJuZCAgICAgICAg
ICB8ICAgICAgMXN0IGNvbXBvbmVudCAgICAgfAorICAgICAgICAgICAgICAgICAgICAvLyAgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ug
b2YgQkdSQV9FWFQsIEIgaXMgdGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQg
c28gZm9ydGguCisgICAgICAgICAgICAgICAgICAgIGRlc3QxNltpICsgaiAqIG91dHB1dFBpdGNo
IC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KV0gPQorICAgICAgICAgICAgICAgICAgICAgICAgKCh1
bnNpZ25lZCBzaG9ydCkoICAgICBhICsgMC41ZikgPDwgMTUpIHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogciArIDAuNWYpIDw8IDEwKSB8CisgICAgICAg
ICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIGcgKyAwLjVmKSA8PCA1KSB8
CisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIGIgKyAwLjVm
KSA8PCAwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9SR0I6CisgICAgICAgICAgICAgICAgc3dp
dGNoICh0eXBlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xf
VU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgICAgICAgICAgICAgICAgIGRlc3QxNltpICsgaiAq
IG91dHB1dFBpdGNoIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KV0gPSAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogYiArIDAuNWYpIDw8IDApIHwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDYzICogZyArIDAuNWYpIDw8IDUp
IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogciArIDAu
NWYpIDw8IDExKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgICAgICAgICAgIGRlc3RbMyAqIGkg
KyBqICogb3V0cHV0UGl0Y2ggKyAwXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiByICsgMC41Zik7
CisgICAgICAgICAgICAgICAgICAgIGRlc3RbMyAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAxXSA9
ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBnICsgMC41Zik7CisgICAgICAgICAgICAgICAgICAgIGRl
c3RbMyAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAyXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBi
ICsgMC41Zik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzeXN0ZW1TdXJmYWNlLT5VbmxvY2tSZWN0
KCk7CisKKyAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7Cit9CisKK1JlbmRlclRhcmdldCAq
UmVuZGVyZXI5OjpjcmVhdGVSZW5kZXJUYXJnZXQoU3dhcENoYWluICpzd2FwQ2hhaW4sIGJvb2wg
ZGVwdGgpCit7CisgICAgU3dhcENoYWluOSAqc3dhcENoYWluOSA9IFN3YXBDaGFpbjk6Om1ha2VT
d2FwQ2hhaW45KHN3YXBDaGFpbik7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBO
VUxMOworICAgIGlmIChkZXB0aCkKKyAgICB7CisgICAgICAgIHN1cmZhY2UgPSBzd2FwQ2hhaW45
LT5nZXREZXB0aFN0ZW5jaWwoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3Vy
ZmFjZSA9IHN3YXBDaGFpbjktPmdldFJlbmRlclRhcmdldCgpOworICAgIH0KKworICAgIFJlbmRl
clRhcmdldDkgKnJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQ5KHRoaXMsIHN1cmZhY2Up
OworCisgICAgcmV0dXJuIHJlbmRlclRhcmdldDsKK30KKworUmVuZGVyVGFyZ2V0ICpSZW5kZXJl
cjk6OmNyZWF0ZVJlbmRlclRhcmdldChpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsIEdMc2l6ZWkgc2FtcGxlcywgYm9vbCBkZXB0aCkKK3sKKyAgICBSZW5kZXJUYXJnZXQ5ICpy
ZW5kZXJUYXJnZXQgPSBuZXcgUmVuZGVyVGFyZ2V0OSh0aGlzLCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHNhbXBsZXMpOworICAgIHJldHVybiByZW5kZXJUYXJnZXQ7Cit9CisKK1NoYWRlckV4ZWN1
dGFibGUgKlJlbmRlcmVyOTo6bG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNp
emVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUpCit7CisgICAgU2hhZGVyRXhlY3V0YWJs
ZTkgKmV4ZWN1dGFibGUgPSBOVUxMOworCisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAg
IGNhc2Ugcng6OlNIQURFUl9WRVJURVg6CisgICAgICAgIHsKKyAgICAgICAgICAgIElEaXJlY3Qz
RFZlcnRleFNoYWRlcjkgKnZzaGFkZXIgPSBjcmVhdGVWZXJ0ZXhTaGFkZXIoKERXT1JEKilmdW5j
dGlvbiwgbGVuZ3RoKTsKKyAgICAgICAgICAgIGlmICh2c2hhZGVyKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBuZXcgU2hhZGVyRXhlY3V0YWJsZTkoZnVuY3Rp
b24sIGxlbmd0aCwgdnNoYWRlcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIHJ4OjpTSEFERVJfUElYRUw6CisgICAgICAgIHsKKyAgICAgICAg
ICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqcHNoYWRlciA9IGNyZWF0ZVBpeGVsU2hhZGVyKChE
V09SRCopZnVuY3Rpb24sIGxlbmd0aCk7CisgICAgICAgICAgICBpZiAocHNoYWRlcikKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3IFNoYWRlckV4ZWN1dGFi
bGU5KGZ1bmN0aW9uLCBsZW5ndGgsIHBzaGFkZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGV4ZWN1dGFibGU7Cit9CisKK1No
YWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyOTo6Y29tcGlsZVRvRXhlY3V0YWJsZShnbDo6SW5mb0xv
ZyAmaW5mb0xvZywgY29uc3QgY2hhciAqc2hhZGVySExTTCwgcng6OlNoYWRlclR5cGUgdHlwZSwg
RDNEV29ya2Fyb3VuZFR5cGUgd29ya2Fyb3VuZCkKK3sKKyAgICBjb25zdCBjaGFyICpwcm9maWxl
ID0gTlVMTDsKKworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIHJ4OjpTSEFE
RVJfVkVSVEVYOgorICAgICAgICBwcm9maWxlID0gZ2V0TWFqb3JTaGFkZXJNb2RlbCgpID49IDMg
PyAidnNfM18wIiA6ICJ2c18yXzAiOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ugcng6OlNI
QURFUl9QSVhFTDoKKyAgICAgICAgcHJvZmlsZSA9IGdldE1ham9yU2hhZGVyTW9kZWwoKSA+PSAz
ID8gInBzXzNfMCIgOiAicHNfMl8wIjsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0Ogor
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAg
ICAvLyBBTkdMRSBpc3N1ZSA0ODY6CisgICAgLy8gV29yay1hcm91bmQgYSBEM0Q5IGNvbXBpbGVy
IGJ1ZyB0aGF0IHByZXNlbnRzIGl0c2VsZiB3aGVuIHVzaW5nIGNvbmRpdGlvbmFsIGRpc2NhcmQs
IGJ5IGRpc2FibGluZyBvcHRpbWl6YXRpb24KKyAgICBVSU5UIG9wdGltaXphdGlvbkZsYWdzID0g
KHdvcmthcm91bmQgPT0gQU5HTEVfRDNEX1dPUktBUk9VTkRfU00zX09QVElNSVpFUiA/IEQzRENP
TVBJTEVfU0tJUF9PUFRJTUlaQVRJT04gOiBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZF
TCk7CisKKyAgICBJRDNEQmxvYiAqYmluYXJ5ID0gKElEM0RCbG9iKiljb21waWxlVG9CaW5hcnko
aW5mb0xvZywgc2hhZGVySExTTCwgcHJvZmlsZSwgb3B0aW1pemF0aW9uRmxhZ3MsIHRydWUpOwor
ICAgIGlmICghYmluYXJ5KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFNoYWRlckV4ZWN1
dGFibGUgKmV4ZWN1dGFibGUgPSBsb2FkRXhlY3V0YWJsZShiaW5hcnktPkdldEJ1ZmZlclBvaW50
ZXIoKSwgYmluYXJ5LT5HZXRCdWZmZXJTaXplKCksIHR5cGUpOworICAgIGJpbmFyeS0+UmVsZWFz
ZSgpOworCisgICAgcmV0dXJuIGV4ZWN1dGFibGU7Cit9CisKK2Jvb2wgUmVuZGVyZXI5Ojpib3hG
aWx0ZXIoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3Qp
Cit7CisgICAgcmV0dXJuIG1CbGl0LT5ib3hGaWx0ZXIoc291cmNlLCBkZXN0KTsKK30KKworRDNE
UE9PTCBSZW5kZXJlcjk6OmdldFRleHR1cmVQb29sKERXT1JEIHVzYWdlKSBjb25zdAoreworICAg
IGlmIChtRDNkOUV4ICE9IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4gRDNEUE9PTF9ERUZB
VUxUOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoISh1c2FnZSAmIChEM0RV
U0FHRV9ERVBUSFNURU5DSUwgfCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQpKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIEQzRFBPT0xfTUFOQUdFRDsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiBEM0RQT09MX0RFRkFVTFQ7Cit9CisKK2Jvb2wgUmVuZGVyZXI5Ojpjb3B5VG9S
ZW5kZXJUYXJnZXQoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIElEaXJlY3QzRFN1cmZhY2U5ICpz
b3VyY2UsIGJvb2wgZnJvbU1hbmFnZWQpCit7CisgICAgaWYgKHNvdXJjZSAmJiBkZXN0KQorICAg
IHsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWTsKKwor
ICAgICAgICBpZiAoZnJvbU1hbmFnZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEQzRFNVUkZB
Q0VfREVTQyBkZXNjOworICAgICAgICAgICAgc291cmNlLT5HZXREZXNjKCZkZXNjKTsKKworICAg
ICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmYgPSAwOworICAgICAgICAgICAgcmVzdWx0
ID0gbURldmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRlc2MuV2lkdGgsIGRlc2Mu
SGVpZ2h0LCBkZXNjLkZvcm1hdCwgRDNEUE9PTF9TWVNURU1NRU0sICZzdXJmLCBOVUxMKTsKKwor
ICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIEltYWdlOTo6Y29weUxvY2thYmxlU3VyZmFjZXMoc3VyZiwgc291cmNlKTsKKyAg
ICAgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5VcGRhdGVTdXJmYWNlKHN1cmYsIE5VTEws
IGRlc3QsIE5VTEwpOworICAgICAgICAgICAgICAgIHN1cmYtPlJlbGVhc2UoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGVu
ZFNjZW5lKCk7CisgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5TdHJldGNoUmVjdChzb3Vy
Y2UsIE5VTEwsIGRlc3QsIE5VTEwsIEQzRFRFWEZfTk9ORSk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1
bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkp
OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK0ltYWdlICpSZW5kZXJlcjk6OmNyZWF0ZUltYWdlKCkKK3sKKyAgICBy
ZXR1cm4gbmV3IEltYWdlOSgpOworfQorCit2b2lkIFJlbmRlcmVyOTo6Z2VuZXJhdGVNaXBtYXAo
SW1hZ2UgKmRlc3QsIEltYWdlICpzcmMpCit7CisgICAgSW1hZ2U5ICpzcmM5ID0gSW1hZ2U5Ojpt
YWtlSW1hZ2U5KHNyYyk7CisgICAgSW1hZ2U5ICpkc3Q5ID0gSW1hZ2U5OjptYWtlSW1hZ2U5KGRl
c3QpOworICAgIEltYWdlOTo6Z2VuZXJhdGVNaXBtYXAoZHN0OSwgc3JjOSk7Cit9CisKK1RleHR1
cmVTdG9yYWdlICpSZW5kZXJlcjk6OmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoU3dhcENoYWluICpz
d2FwQ2hhaW4pCit7CisgICAgU3dhcENoYWluOSAqc3dhcENoYWluOSA9IFN3YXBDaGFpbjk6Om1h
a2VTd2FwQ2hhaW45KHN3YXBDaGFpbik7CisgICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTlf
MkQodGhpcywgc3dhcENoYWluOSk7Cit9CisKK1RleHR1cmVTdG9yYWdlICpSZW5kZXJlcjk6OmNy
ZWF0ZVRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBH
TGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCkKK3sKKyAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlOV8yRCh0aGlzLCBsZXZl
bHMsIGludGVybmFsZm9ybWF0LCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlLCB3aWR0aCwgaGVpZ2h0
KTsKK30KKworVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyOTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2VD
dWJlKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29s
IGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpCit7CisgICAgcmV0dXJuIG5ldyBUZXh0dXJlU3Rv
cmFnZTlfQ3ViZSh0aGlzLCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB1c2FnZSwgZm9yY2VSZW5k
ZXJhYmxlLCBzaXplKTsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldExVSUQoTFVJRCAqYWRhcHRl
ckx1aWQpIGNvbnN0Cit7CisgICAgYWRhcHRlckx1aWQtPkhpZ2hQYXJ0ID0gMDsKKyAgICBhZGFw
dGVyTHVpZC0+TG93UGFydCA9IDA7CisKKyAgICBpZiAobUQzZDlFeCkKKyAgICB7CisgICAgICAg
IG1EM2Q5RXgtPkdldEFkYXB0ZXJMVUlEKG1BZGFwdGVyLCBhZGFwdGVyTHVpZCk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L1JlbmRlcmVyOS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L1JlbmRlcmVyOS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0ZmQyYmRkODRhZWY4NGQzMmRmMWFm
NzI1NGVkMjc5MzU5NTg3NDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmgKQEAgLTAsMCArMSwz
NTYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFJlbmRlcmVyOS5oOiBEZWZpbmVzIGEgYmFj
ay1lbmQgc3BlY2lmaWMgY2xhc3MgZm9yIHRoZSBEM0Q5IHJlbmRlcmVyLgorCisjaWZuZGVmIExJ
QkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjlfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVS
X1JFTkRFUkVSOV9IXworCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvU2hh
ZGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhEZWNs
YXJhdGlvbkNhY2hlLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldC5oIgorCituYW1lc3Bh
Y2UgZ2wKK3sKK2NsYXNzIFJlbmRlcmJ1ZmZlcjsKK30KKworbmFtZXNwYWNlIHJ4Cit7CitjbGFz
cyBWZXJ0ZXhEYXRhTWFuYWdlcjsKK2NsYXNzIEluZGV4RGF0YU1hbmFnZXI7CitjbGFzcyBTdHJl
YW1pbmdJbmRleEJ1ZmZlckludGVyZmFjZTsKK3N0cnVjdCBUcmFuc2xhdGVkQXR0cmlidXRlOwor
CitjbGFzcyBSZW5kZXJlcjkgOiBwdWJsaWMgUmVuZGVyZXIKK3sKKyAgcHVibGljOgorICAgIFJl
bmRlcmVyOShlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIEhEQyBoRGMsIGJvb2wgc29mdHdhcmVEZXZp
Y2UpOworICAgIHZpcnR1YWwgflJlbmRlcmVyOSgpOworCisgICAgc3RhdGljIFJlbmRlcmVyOSAq
bWFrZVJlbmRlcmVyOShSZW5kZXJlciAqcmVuZGVyZXIpOworCisgICAgdmlydHVhbCBFR0xpbnQg
aW5pdGlhbGl6ZSgpOworICAgIHZpcnR1YWwgYm9vbCByZXNldERldmljZSgpOworCisgICAgdmly
dHVhbCBpbnQgZ2VuZXJhdGVDb25maWdzKENvbmZpZ0Rlc2MgKipjb25maWdEZXNjTGlzdCk7Cisg
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZUNvbmZpZ3MoQ29uZmlnRGVzYyAqY29uZmlnRGVzY0xpc3Qp
OworCisgICAgdm9pZCBzdGFydFNjZW5lKCk7CisgICAgdm9pZCBlbmRTY2VuZSgpOworCisgICAg
dmlydHVhbCB2b2lkIHN5bmMoYm9vbCBibG9jayk7CisKKyAgICB2aXJ0dWFsIFN3YXBDaGFpbiAq
Y3JlYXRlU3dhcENoYWluKEhXTkQgd2luZG93LCBIQU5ETEUgc2hhcmVIYW5kbGUsIEdMZW51bSBi
YWNrQnVmZmVyRm9ybWF0LCBHTGVudW0gZGVwdGhCdWZmZXJGb3JtYXQpOworCisgICAgSURpcmVj
dDNEUXVlcnk5KiBhbGxvY2F0ZUV2ZW50UXVlcnkoKTsKKyAgICB2b2lkIGZyZWVFdmVudFF1ZXJ5
KElEaXJlY3QzRFF1ZXJ5OSogcXVlcnkpOworCisgICAgLy8gcmVzb3VyY2UgY3JlYXRpb24KKyAg
ICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICpjcmVhdGVWZXJ0ZXhTaGFkZXIoY29uc3QgRFdPUkQg
KmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoKTsKKyAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKmNy
ZWF0ZVBpeGVsU2hhZGVyKGNvbnN0IERXT1JEICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCk7Cisg
ICAgSFJFU1VMVCBjcmVhdGVWZXJ0ZXhCdWZmZXIoVUlOVCBMZW5ndGgsIERXT1JEIFVzYWdlLCBJ
RGlyZWN0M0RWZXJ0ZXhCdWZmZXI5ICoqcHBWZXJ0ZXhCdWZmZXIpOworICAgIEhSRVNVTFQgY3Jl
YXRlSW5kZXhCdWZmZXIoVUlOVCBMZW5ndGgsIERXT1JEIFVzYWdlLCBEM0RGT1JNQVQgRm9ybWF0
LCBJRGlyZWN0M0RJbmRleEJ1ZmZlcjkgKipwcEluZGV4QnVmZmVyKTsKKyNpZiAwCisgICAgdm9p
ZCAqY3JlYXRlVGV4dHVyZTJEKCk7CisgICAgdm9pZCAqY3JlYXRlVGV4dHVyZUN1YmUoKTsKKyAg
ICB2b2lkICpjcmVhdGVRdWVyeSgpOworICAgIHZvaWQgKmNyZWF0ZUluZGV4QnVmZmVyKCk7Cisg
ICAgdm9pZCAqY3JlYXRlVmVydGV4YnVmZmVyKCk7CisKKyAgICAvLyBzdGF0ZSBzZXR1cAorICAg
IHZvaWQgYXBwbHlTaGFkZXJzKCk7CisgICAgdm9pZCBhcHBseUNvbnN0YW50cygpOworI2VuZGlm
CisgICAgdmlydHVhbCB2b2lkIHNldFNhbXBsZXJTdGF0ZShnbDo6U2FtcGxlclR5cGUgdHlwZSwg
aW50IGluZGV4LCBjb25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVyKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0VGV4dHVyZShnbDo6U2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBnbDo6VGV4
dHVyZSAqdGV4dHVyZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmFzdGVyaXplclN0YXRlKGNv
bnN0IGdsOjpSYXN0ZXJpemVyU3RhdGUgJnJhc3RlclN0YXRlKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6Qmxl
bmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNvbG9yICZibGVuZENvbG9yLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVNYXNrKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0RGVwdGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0
YXRlICZkZXB0aFN0ZW5jaWxTdGF0ZSwgaW50IHN0ZW5jaWxSZWYsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBzdGVuY2lsQmFja1JlZiwgYm9vbCBmcm9udEZhY2VD
Q1cpOworCisgICAgdmlydHVhbCB2b2lkIHNldFNjaXNzb3JSZWN0YW5nbGUoY29uc3QgZ2w6OlJl
Y3RhbmdsZSAmc2Npc3NvciwgYm9vbCBlbmFibGVkKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0Vmll
d3BvcnQoY29uc3QgZ2w6OlJlY3RhbmdsZSAmdmlld3BvcnQsIGZsb2F0IHpOZWFyLCBmbG9hdCB6
RmFyLCBHTGVudW0gZHJhd01vZGUsIEdMZW51bSBmcm9udEZhY2UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgaWdub3JlVmlld3BvcnQpOworCisgICAgdmlydHVhbCBib29sIGFw
cGx5UmVuZGVyVGFyZ2V0KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpOworICAgIHZpcnR1
YWwgdm9pZCBhcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpOwor
ICAgIHZpcnR1YWwgdm9pZCBhcHBseVVuaWZvcm1zKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFt
QmluYXJ5LCBnbDo6VW5pZm9ybUFycmF5ICp1bmlmb3JtQXJyYXkpOworICAgIHZpcnR1YWwgYm9v
bCBhcHBseVByaW1pdGl2ZVR5cGUoR0xlbnVtIHByaW1pdGl2ZVR5cGUsIEdMc2l6ZWkgZWxlbWVu
dENvdW50KTsKKyAgICB2aXJ0dWFsIEdMZW51bSBhcHBseVZlcnRleEJ1ZmZlcihnbDo6UHJvZ3Jh
bUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0ZXhBdHRyaWJ1
dGVzW10sIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcyk7Cisg
ICAgdmlydHVhbCBHTGVudW0gYXBwbHlJbmRleEJ1ZmZlcihjb25zdCBHTHZvaWQgKmluZGljZXMs
IGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgR0xzaXplaSBjb3VudCwgR0xlbnVtIG1v
ZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pOworCisgICAg
dmlydHVhbCB2b2lkIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6
ZWkgaW5zdGFuY2VzKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsZW1lbnRzKEdMZW51bSBtb2Rl
LCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6
QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmlu
ZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMpOworCisgICAgdmlydHVhbCB2b2lkIGNsZWFyKGNv
bnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBnbDo6RnJhbWVidWZmZXIgKmZy
YW1lQnVmZmVyKTsKKworICAgIHZpcnR1YWwgdm9pZCBtYXJrQWxsU3RhdGVEaXJ0eSgpOworCisg
ICAgLy8gbG9zdCBkZXZpY2UKKyAgICB2b2lkIG5vdGlmeURldmljZUxvc3QoKTsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNEZXZpY2VMb3N0KCk7CisgICAgdmlydHVhbCBib29sIHRlc3REZXZpY2VMb3N0
KGJvb2wgbm90aWZ5KTsKKyAgICB2aXJ0dWFsIGJvb2wgdGVzdERldmljZVJlc2V0dGFibGUoKTsK
KworICAgIC8vIFJlbmRlcmVyIGNhcGFiaWxpdGllcworICAgIElEaXJlY3QzRERldmljZTkgKmdl
dERldmljZSgpIHsgcmV0dXJuIG1EZXZpY2U7IH0KKyAgICB2aXJ0dWFsIERXT1JEIGdldEFkYXB0
ZXJWZW5kb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIGdldFJlbmRlcmVyRGVz
Y3JpcHRpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdVSUQgZ2V0QWRhcHRlcklkZW50aWZpZXIo
KSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBnZXRCR1JBVGV4dHVyZVN1cHBvcnQoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUMVRleHR1cmVTdXBwb3J0KCk7CisgICAgdmlydHVh
bCBib29sIGdldERYVDNUZXh0dXJlU3VwcG9ydCgpOworICAgIHZpcnR1YWwgYm9vbCBnZXREWFQ1
VGV4dHVyZVN1cHBvcnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RXZlbnRRdWVyeVN1cHBvcnQo
KTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRl
cmluZywgYm9vbCAqcmVuZGVyYWJsZSk7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MTZUZXh0
dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpOworICAgIHZpcnR1
YWwgYm9vbCBnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpOworICAgIHZpcnR1YWwgYm9vbCBn
ZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCk7CisgICAgdmlydHVhbCB1bnNpZ25lZCBp
bnQgZ2V0TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVu
c2lnbmVkIGludCBnZXRNYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3Q7CisgICAg
dmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVzZXJ2ZWRWZXJ0ZXhVbmlmb3JtVmVjdG9ycygpIGNv
bnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlc2VydmVkRnJhZ21lbnRVbmlmb3Jt
VmVjdG9ycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFZlcnRleFVu
aWZvcm1WZWN0b3JzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4RnJh
Z21lbnRVbmlmb3JtVmVjdG9ycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdl
dE1heFZhcnlpbmdWZWN0b3JzKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldE5vblBvd2Vy
MlRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldERlcHRoVGV4dHVy
ZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T2NjbHVzaW9uUXVlcnlTdXBw
b3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEluc3RhbmNpbmdTdXBwb3J0KCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIGdldFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5U3VwcG9ydCgp
IGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgZ2V0VGV4dHVyZU1heEFuaXNvdHJvcHkoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0U2hhcmVIYW5kbGVTdXBwb3J0KCkgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIGdldERlcml2YXRpdmVJbnN0cnVjdGlvblN1cHBvcnQoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGJvb2wgZ2V0UG9zdFN1YkJ1ZmZlclN1cHBvcnQoKSBjb25zdDsKKworICAgIHZp
cnR1YWwgaW50IGdldE1ham9yU2hhZGVyTW9kZWwoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGZsb2F0
IGdldE1heFBvaW50U2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldE1heFZpZXdwb3J0
RGltZW5zaW9uKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZVdpZHRoKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZUhlaWdodCgpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBnZXQzMkJpdEluZGV4U3VwcG9ydCgpIGNvbnN0OworICAgIERXT1JEIGdl
dENhcHNEZWNsVHlwZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBnZXRNaW5Td2FwSW50ZXJ2
YWwoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBnZXRNYXhTd2FwSW50ZXJ2YWwoKSBjb25zdDsK
KworICAgIHZpcnR1YWwgR0xzaXplaSBnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgY29uc3Q7Cisg
ICAgaW50IGdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKEQzREZPUk1BVCBmb3JtYXQsIGludCBy
ZXF1ZXN0ZWQpIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFJl
bmRlclRhcmdldHMoKSBjb25zdDsKKworICAgIEQzREZPUk1BVCBDb252ZXJ0VGV4dHVyZUludGVy
bmFsRm9ybWF0KEdMaW50IGludGVybmFsZm9ybWF0KTsKKworICAgIC8vIFBpeGVsIG9wZXJhdGlv
bnMKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlMkQgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnNvdXJjZSk7CisgICAg
dmlydHVhbCBib29sIGNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1
YmUgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc291cmNlKTsKKworICAgIHZp
cnR1YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3Qg
Z2w6OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBHTGludCBsZXZlbCk7CisgICAgdmlydHVhbCBib29s
IGNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFu
Z2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlQ3ViZSAqc3RvcmFnZSwgR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpOworCisgICAgdmly
dHVhbCBib29sIGJsaXRSZWN0KGdsOjpGcmFtZWJ1ZmZlciAqcmVhZFRhcmdldCwgY29uc3QgZ2w6
OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGdsOjpGcmFtZWJ1ZmZlciAqZHJhd1RhcmdldCwgY29uc3Qg
Z2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
YmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0RGVwdGhTdGVuY2lsKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVhZFBpeGVscyhnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBHTGludCB4LCBHTGlu
dCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBvdXRwdXRQaXRjaCwg
Ym9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLCBHTGludCBwYWNrQWxpZ25tZW50LCB2b2lkKiBwaXhl
bHMpOworCisgICAgLy8gUmVuZGVyVGFyZ2V0IGNyZWF0aW9uCisgICAgdmlydHVhbCBSZW5kZXJU
YXJnZXQgKmNyZWF0ZVJlbmRlclRhcmdldChTd2FwQ2hhaW4gKnN3YXBDaGFpbiwgYm9vbCBkZXB0
aCk7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRlclRhcmdldChpbnQgd2lk
dGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcywgYm9vbCBkZXB0
aCk7CisKKyAgICAvLyBTaGFkZXIgb3BlcmF0aW9ucworICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0
YWJsZSAqbG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgs
IHJ4OjpTaGFkZXJUeXBlIHR5cGUpOworICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqY29t
cGlsZVRvRXhlY3V0YWJsZShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqc2hhZGVy
SExTTCwgcng6OlNoYWRlclR5cGUgdHlwZSwgRDNEV29ya2Fyb3VuZFR5cGUgd29ya2Fyb3VuZCk7
CisKKyAgICAvLyBJbWFnZSBvcGVyYXRpb25zCisgICAgdmlydHVhbCBJbWFnZSAqY3JlYXRlSW1h
Z2UoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoSW1hZ2UgKmRlc3QsIEltYWdl
ICpzb3VyY2UpOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9y
YWdlMkQoU3dhcENoYWluICpzd2FwQ2hhaW4pOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2Ug
KmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCk7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0
b3JhZ2VDdWJlKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdl
LCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpOworCisgICAgLy8gQnVmZmVyIGNyZWF0
aW9uCisgICAgdmlydHVhbCBWZXJ0ZXhCdWZmZXIgKmNyZWF0ZVZlcnRleEJ1ZmZlcigpOworICAg
IHZpcnR1YWwgSW5kZXhCdWZmZXIgKmNyZWF0ZUluZGV4QnVmZmVyKCk7CisgICAgdmlydHVhbCBC
dWZmZXJTdG9yYWdlICpjcmVhdGVCdWZmZXJTdG9yYWdlKCk7CisKKyAgICAvLyBRdWVyeSBhbmQg
RmVuY2UgY3JlYXRpb24KKyAgICB2aXJ0dWFsIFF1ZXJ5SW1wbCAqY3JlYXRlUXVlcnkoR0xlbnVt
IHR5cGUpOworICAgIHZpcnR1YWwgRmVuY2VJbXBsICpjcmVhdGVGZW5jZSgpOworCisgICAgLy8g
RDNEOS1yZW5kZXJlciBzcGVjaWZpYyBtZXRob2RzCisgICAgYm9vbCBib3hGaWx0ZXIoSURpcmVj
dDNEU3VyZmFjZTkgKnNvdXJjZSwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpOworCisgICAgRDNE
UE9PTCBnZXRUZXh0dXJlUG9vbChEV09SRCB1c2FnZSkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJv
b2wgZ2V0TFVJRChMVUlEICphZGFwdGVyTHVpZCkgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBE
SVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyZXI5KTsKKworICAgIHZvaWQgZGVpbml0aWFs
aXplKCk7CisKKyAgICB2b2lkIGFwcGx5VW5pZm9ybW5mdihnbDo6VW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgdm9pZCBhcHBseVVuaWZvcm1uaXYoZ2w6OlVu
aWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMaW50ICp2KTsKKyAgICB2b2lkIGFwcGx5VW5p
Zm9ybW5idihnbDo6VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xpbnQgKnYpOworCisg
ICAgdm9pZCBkcmF3TGluZUxvb3AoR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdM
dm9pZCAqaW5kaWNlcywgaW50IG1pbkluZGV4LCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZm
ZXIpOworICAgIHZvaWQgZHJhd0luZGV4ZWRQb2ludHMoR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5
cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgaW50IG1pbkluZGV4LCBnbDo6QnVmZmVyICplbGVt
ZW50QXJyYXlCdWZmZXIpOworCisgICAgdm9pZCBnZXRNdWx0aVNhbXBsZVN1cHBvcnQoRDNERk9S
TUFUIGZvcm1hdCwgYm9vbCAqbXVsdGlTYW1wbGVBcnJheSk7CisgICAgYm9vbCBjb3B5VG9SZW5k
ZXJUYXJnZXQoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3Vy
Y2UsIGJvb2wgZnJvbU1hbmFnZWQpOworICAgIGdsOjpSZW5kZXJidWZmZXIgKmdldE51bGxDb2xv
cmJ1ZmZlcihnbDo6UmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlcik7CisKKyAgICBEM0RQT09MIGdl
dEJ1ZmZlclBvb2woRFdPUkQgdXNhZ2UpIGNvbnN0OworCisgICAgSE1PRFVMRSBtRDNkOU1vZHVs
ZTsKKyAgICBIREMgbURjOworCisgICAgdm9pZCBpbml0aWFsaXplRGV2aWNlKCk7CisgICAgRDNE
UFJFU0VOVF9QQVJBTUVURVJTIGdldERlZmF1bHRQcmVzZW50UGFyYW1ldGVycygpOworICAgIHZv
aWQgcmVsZWFzZURldmljZVJlc291cmNlcygpOworCisgICAgSFJFU1VMVCBnZXREZXZpY2VTdGF0
dXNDb2RlKCk7CisgICAgYm9vbCBpc1JlbW92ZWREZXZpY2VSZXNldHRhYmxlKCkgY29uc3Q7Cisg
ICAgYm9vbCByZXNldFJlbW92ZWREZXZpY2UoKTsKKworICAgIFVJTlQgbUFkYXB0ZXI7CisgICAg
RDNEREVWVFlQRSBtRGV2aWNlVHlwZTsKKyAgICBib29sIG1Tb2Z0d2FyZURldmljZTsgICAvLyBG
SVhNRTogRGVwcmVjYXRlCisgICAgSURpcmVjdDNEOSAqbUQzZDk7ICAvLyBBbHdheXMgdmFsaWQg
YWZ0ZXIgc3VjY2Vzc2Z1bCBpbml0aWFsaXphdGlvbi4KKyAgICBJRGlyZWN0M0Q5RXggKm1EM2Q5
RXg7ICAvLyBNaWdodCBiZSBudWxsIGlmIEQzRDlFeCBpcyBub3Qgc3VwcG9ydGVkLgorICAgIElE
aXJlY3QzRERldmljZTkgKm1EZXZpY2U7CisgICAgSURpcmVjdDNERGV2aWNlOUV4ICptRGV2aWNl
RXg7ICAvLyBNaWdodCBiZSBudWxsIGlmIEQzRDlFeCBpcyBub3Qgc3VwcG9ydGVkLgorCisgICAg
QmxpdCAqbUJsaXQ7CisKKyAgICBIV05EIG1EZXZpY2VXaW5kb3c7CisKKyAgICBib29sIG1EZXZp
Y2VMb3N0OworICAgIEQzRENBUFM5IG1EZXZpY2VDYXBzOworICAgIEQzREFEQVBURVJfSURFTlRJ
RklFUjkgbUFkYXB0ZXJJZGVudGlmaWVyOworCisgICAgRDNEUFJJTUlUSVZFVFlQRSBtUHJpbWl0
aXZlVHlwZTsKKyAgICBpbnQgbVByaW1pdGl2ZUNvdW50OworICAgIEdMc2l6ZWkgbVJlcGVhdERy
YXc7CisKKyAgICBib29sIG1TY2VuZVN0YXJ0ZWQ7CisgICAgYm9vbCBtU3VwcG9ydHNOb25Qb3dl
cjJUZXh0dXJlczsKKyAgICBib29sIG1TdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5Owor
ICAgIGludCBtTWluU3dhcEludGVydmFsOworICAgIGludCBtTWF4U3dhcEludGVydmFsOworCisg
ICAgYm9vbCBtT2NjbHVzaW9uUXVlcnlTdXBwb3J0OworICAgIGJvb2wgbUV2ZW50UXVlcnlTdXBw
b3J0OworICAgIGJvb2wgbVZlcnRleFRleHR1cmVTdXBwb3J0OworCisgICAgYm9vbCBtRGVwdGhU
ZXh0dXJlU3VwcG9ydDsKKworICAgIGJvb2wgbUZsb2F0MzJUZXh0dXJlU3VwcG9ydDsKKyAgICBi
b29sIG1GbG9hdDMyRmlsdGVyU3VwcG9ydDsKKyAgICBib29sIG1GbG9hdDMyUmVuZGVyU3VwcG9y
dDsKKworICAgIGJvb2wgbUZsb2F0MTZUZXh0dXJlU3VwcG9ydDsKKyAgICBib29sIG1GbG9hdDE2
RmlsdGVyU3VwcG9ydDsKKyAgICBib29sIG1GbG9hdDE2UmVuZGVyU3VwcG9ydDsKKworICAgIGJv
b2wgbURYVDFUZXh0dXJlU3VwcG9ydDsKKyAgICBib29sIG1EWFQzVGV4dHVyZVN1cHBvcnQ7Cisg
ICAgYm9vbCBtRFhUNVRleHR1cmVTdXBwb3J0OworCisgICAgYm9vbCBtTHVtaW5hbmNlVGV4dHVy
ZVN1cHBvcnQ7CisgICAgYm9vbCBtTHVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydDsKKworICAg
IHN0ZDo6bWFwPEQzREZPUk1BVCwgYm9vbCAqPiBtTXVsdGlTYW1wbGVTdXBwb3J0OworICAgIEdM
c2l6ZWkgbU1heFN1cHBvcnRlZFNhbXBsZXM7CisKKyAgICAvLyBjdXJyZW50IHJlbmRlciB0YXJn
ZXQgc3RhdGVzCisgICAgdW5zaWduZWQgaW50IG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsOwor
ICAgIHVuc2lnbmVkIGludCBtQXBwbGllZERlcHRoYnVmZmVyU2VyaWFsOworICAgIHVuc2lnbmVk
IGludCBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWw7CisgICAgYm9vbCBtRGVwdGhTdGVuY2ls
SW5pdGlhbGl6ZWQ7CisgICAgYm9vbCBtUmVuZGVyVGFyZ2V0RGVzY0luaXRpYWxpemVkOworICAg
IHJ4OjpSZW5kZXJUYXJnZXQ6OkRlc2MgbVJlbmRlclRhcmdldERlc2M7CisgICAgdW5zaWduZWQg
aW50IG1DdXJTdGVuY2lsU2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgbUN1ckRlcHRoU2l6ZTsKKwor
ICAgIElEaXJlY3QzRFN0YXRlQmxvY2s5ICptTWFza2VkQ2xlYXJTYXZlZFN0YXRlOworCisgICAg
Ly8gcHJldmlvdXNseSBzZXQgcmVuZGVyIHN0YXRlcworICAgIGJvb2wgbUZvcmNlU2V0RGVwdGhT
dGVuY2lsU3RhdGU7CisgICAgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlIG1DdXJEZXB0aFN0ZW5jaWxT
dGF0ZTsKKyAgICBpbnQgbUN1clN0ZW5jaWxSZWY7CisgICAgaW50IG1DdXJTdGVuY2lsQmFja1Jl
ZjsKKyAgICBib29sIG1DdXJGcm9udEZhY2VDQ1c7CisKKyAgICBib29sIG1Gb3JjZVNldFJhc3Rl
clN0YXRlOworICAgIGdsOjpSYXN0ZXJpemVyU3RhdGUgbUN1clJhc3RlclN0YXRlOworCisgICAg
Ym9vbCBtRm9yY2VTZXRTY2lzc29yOworICAgIGdsOjpSZWN0YW5nbGUgbUN1clNjaXNzb3I7Cisg
ICAgYm9vbCBtU2Npc3NvckVuYWJsZWQ7CisKKyAgICBib29sIG1Gb3JjZVNldFZpZXdwb3J0Owor
ICAgIGdsOjpSZWN0YW5nbGUgbUN1clZpZXdwb3J0OworICAgIGZsb2F0IG1DdXJOZWFyOworICAg
IGZsb2F0IG1DdXJGYXI7CisgICAgZmxvYXQgbUN1ckRlcHRoRnJvbnQ7CisKKyAgICBib29sIG1G
b3JjZVNldEJsZW5kU3RhdGU7CisgICAgZ2w6OkJsZW5kU3RhdGUgbUN1ckJsZW5kU3RhdGU7Cisg
ICAgZ2w6OkNvbG9yIG1DdXJCbGVuZENvbG9yOworICAgIEdMdWludCBtQ3VyU2FtcGxlTWFzazsK
KworICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIHNhbXBsZXIgc3RhdGVzCisgICAgYm9vbCBtRm9y
Y2VTZXRWZXJ0ZXhTYW1wbGVyU3RhdGVzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RF
WFRVUkVfSU1BR0VfVU5JVFNdOworICAgIGdsOjpTYW1wbGVyU3RhdGUgbUN1clZlcnRleFNhbXBs
ZXJTdGF0ZXNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklU
U107CisKKyAgICBib29sIG1Gb3JjZVNldFBpeGVsU2FtcGxlclN0YXRlc1tnbDo6TUFYX1RFWFRV
UkVfSU1BR0VfVU5JVFNdOworICAgIGdsOjpTYW1wbGVyU3RhdGUgbUN1clBpeGVsU2FtcGxlclN0
YXRlc1tnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOworCisgICAgLy8gQ3VycmVudGx5IGFw
cGxpZWQgdGV4dHVyZXMKKyAgICB1bnNpZ25lZCBpbnQgbUN1clZlcnRleFRleHR1cmVTZXJpYWxz
W2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOworICAg
IHVuc2lnbmVkIGludCBtQ3VyUGl4ZWxUZXh0dXJlU2VyaWFsc1tnbDo6TUFYX1RFWFRVUkVfSU1B
R0VfVU5JVFNdOworCisgICAgdW5zaWduZWQgaW50IG1BcHBsaWVkSUJTZXJpYWw7CisgICAgdW5z
aWduZWQgaW50IG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbDsKKyAgICAKKyAgICByeDo6ZHhf
VmVydGV4Q29uc3RhbnRzIG1WZXJ0ZXhDb25zdGFudHM7CisgICAgcng6OmR4X1BpeGVsQ29uc3Rh
bnRzIG1QaXhlbENvbnN0YW50czsKKyAgICBib29sIG1EeFVuaWZvcm1zRGlydHk7CisKKyAgICAv
LyBBIHBvb2wgb2YgZXZlbnQgcXVlcmllcyB0aGF0IGFyZSBjdXJyZW50bHkgdW51c2VkLgorICAg
IHN0ZDo6dmVjdG9yPElEaXJlY3QzRFF1ZXJ5OSo+IG1FdmVudFF1ZXJ5UG9vbDsKKyAgICBWZXJ0
ZXhTaGFkZXJDYWNoZSBtVmVydGV4U2hhZGVyQ2FjaGU7CisgICAgUGl4ZWxTaGFkZXJDYWNoZSBt
UGl4ZWxTaGFkZXJDYWNoZTsKKworICAgIFZlcnRleERhdGFNYW5hZ2VyICptVmVydGV4RGF0YU1h
bmFnZXI7CisgICAgVmVydGV4RGVjbGFyYXRpb25DYWNoZSBtVmVydGV4RGVjbGFyYXRpb25DYWNo
ZTsKKworICAgIEluZGV4RGF0YU1hbmFnZXIgKm1JbmRleERhdGFNYW5hZ2VyOworICAgIFN0cmVh
bWluZ0luZGV4QnVmZmVySW50ZXJmYWNlICptTGluZUxvb3BJQjsKKworICAgIGVudW0geyBOVU1f
TlVMTF9DT0xPUkJVRkZFUl9DQUNIRV9FTlRSSUVTID0gMTIgfTsKKyAgICBzdHJ1Y3QgTnVsbENv
bG9yYnVmZmVyQ2FjaGVFbnRyeQorICAgIHsKKyAgICAgICAgVUlOVCBscnVDb3VudDsKKyAgICAg
ICAgaW50IHdpZHRoOworICAgICAgICBpbnQgaGVpZ2h0OworICAgICAgICBnbDo6UmVuZGVyYnVm
ZmVyICpidWZmZXI7CisgICAgfSBtTnVsbENvbG9yYnVmZmVyQ2FjaGVbTlVNX05VTExfQ09MT1JC
VUZGRVJfQ0FDSEVfRU5UUklFU107CisgICAgVUlOVCBtTWF4TnVsbENvbG9yYnVmZmVyTFJVOwor
Cit9OworCit9CisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUkVSOV9IXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L1NoYWRlckV4ZWN1dGFibGU5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9TaGFkZXJFeGVjdXRhYmxlOS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NWRlY2Y5NjY0ZGU3MDEwMGIyYWZlNTRkNTc0YWU5YzhhOGExZjIzMAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9T
aGFkZXJFeGVjdXRhYmxlOS5jcHAKQEAgLTAsMCArMSw2MCBAQAorI2luY2x1ZGUgInByZWNvbXBp
bGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBTaGFkZXJFeGVjdXRhYmxlOS5jcHA6IElt
cGxlbWVudHMgYSBEM0Q5LXNwZWNpZmljIGNsYXNzIHRvIGNvbnRhaW4gc2hhZGVyCisvLyBleGVj
dXRhYmxlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9TaGFkZXJFeGVjdXRhYmxlOS5oIgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVn
LmgiCisKK25hbWVzcGFjZSByeAoreworCitTaGFkZXJFeGVjdXRhYmxlOTo6U2hhZGVyRXhlY3V0
YWJsZTkoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIElEaXJlY3QzRFBpeGVs
U2hhZGVyOSAqZXhlY3V0YWJsZSkKKyAgICA6IFNoYWRlckV4ZWN1dGFibGUoZnVuY3Rpb24sIGxl
bmd0aCkKK3sKKyAgICBtUGl4ZWxFeGVjdXRhYmxlID0gZXhlY3V0YWJsZTsKKyAgICBtVmVydGV4
RXhlY3V0YWJsZSA9IE5VTEw7Cit9CisKK1NoYWRlckV4ZWN1dGFibGU5OjpTaGFkZXJFeGVjdXRh
YmxlOShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSURpcmVjdDNEVmVydGV4
U2hhZGVyOSAqZXhlY3V0YWJsZSkKKyAgICA6IFNoYWRlckV4ZWN1dGFibGUoZnVuY3Rpb24sIGxl
bmd0aCkKK3sKKyAgICBtVmVydGV4RXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7CisgICAgbVBpeGVs
RXhlY3V0YWJsZSA9IE5VTEw7Cit9CisKK1NoYWRlckV4ZWN1dGFibGU5Ojp+U2hhZGVyRXhlY3V0
YWJsZTkoKQoreworICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSkKKyAgICB7CisgICAgICAgIG1W
ZXJ0ZXhFeGVjdXRhYmxlLT5SZWxlYXNlKCk7CisgICAgfQorICAgIGlmIChtUGl4ZWxFeGVjdXRh
YmxlKQorICAgIHsKKyAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFzZSgpOworICAgIH0K
K30KKworU2hhZGVyRXhlY3V0YWJsZTkgKlNoYWRlckV4ZWN1dGFibGU5OjptYWtlU2hhZGVyRXhl
Y3V0YWJsZTkoU2hhZGVyRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSkKK3sKKyAgICBBU1NFUlQoSEFT
X0RZTkFNSUNfVFlQRShTaGFkZXJFeGVjdXRhYmxlOSosIGV4ZWN1dGFibGUpKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8U2hhZGVyRXhlY3V0YWJsZTkqPihleGVjdXRhYmxlKTsKK30KKworSURp
cmVjdDNEVmVydGV4U2hhZGVyOSAqU2hhZGVyRXhlY3V0YWJsZTk6OmdldFZlcnRleFNoYWRlcigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1WZXJ0ZXhFeGVjdXRhYmxlOworfQorCitJRGlyZWN0M0RQ
aXhlbFNoYWRlcjkgKlNoYWRlckV4ZWN1dGFibGU5OjpnZXRQaXhlbFNoYWRlcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1QaXhlbEV4ZWN1dGFibGU7Cit9CisKK30KXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvU2hhZGVyRXhlY3V0YWJsZTkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9TaGFkZXJFeGVjdXRhYmxlOS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmZhMWU2YzI4NDRhOThiYTQyNjhmMGRkZjJiNDk0YTM2ZDI3NmM1YmYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvU2hhZGVyRXhlY3V0YWJsZTkuaApAQCAtMCwwICsxLDM5IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisvLyBTaGFkZXJFeGVjdXRhYmxlOS5oOiBEZWZpbmVzIGEgRDNEOS1zcGVjaWZp
YyBjbGFzcyB0byBjb250YWluIHNoYWRlcgorLy8gZXhlY3V0YWJsZSBpbXBsZW1lbnRhdGlvbiBk
ZXRhaWxzLgorCisjaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9TSEFERVJFWEVDVVRBQkxFOV9I
XworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfU0hBREVSRVhFQ1VUQUJMRTlfSF8KKworI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlLmgiCisKK25hbWVzcGFj
ZSByeAoreworCitjbGFzcyBTaGFkZXJFeGVjdXRhYmxlOSA6IHB1YmxpYyBTaGFkZXJFeGVjdXRh
YmxlCit7CisgIHB1YmxpYzoKKyAgICBTaGFkZXJFeGVjdXRhYmxlOShjb25zdCB2b2lkICpmdW5j
dGlvbiwgc2l6ZV90IGxlbmd0aCwgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpleGVjdXRhYmxlKTsK
KyAgICBTaGFkZXJFeGVjdXRhYmxlOShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0
aCwgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqZXhlY3V0YWJsZSk7CisgICAgdmlydHVhbCB+U2hh
ZGVyRXhlY3V0YWJsZTkoKTsKKworICAgIHN0YXRpYyBTaGFkZXJFeGVjdXRhYmxlOSAqbWFrZVNo
YWRlckV4ZWN1dGFibGU5KFNoYWRlckV4ZWN1dGFibGUgKmV4ZWN1dGFibGUpOworCisgICAgSURp
cmVjdDNEUGl4ZWxTaGFkZXI5ICpnZXRQaXhlbFNoYWRlcigpIGNvbnN0OworICAgIElEaXJlY3Qz
RFZlcnRleFNoYWRlcjkgKmdldFZlcnRleFNoYWRlcigpIGNvbnN0OworCisgIHByaXZhdGU6Cisg
ICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFNoYWRlckV4ZWN1dGFibGU5KTsKKworICAgIElE
aXJlY3QzRFBpeGVsU2hhZGVyOSAqbVBpeGVsRXhlY3V0YWJsZTsKKyAgICBJRGlyZWN0M0RWZXJ0
ZXhTaGFkZXI5ICptVmVydGV4RXhlY3V0YWJsZTsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdM
RVNWMl9SRU5ERVJFUl9TSEFERVJFWEVDVVRBQkxFOV9IXwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9Td2FwQ2hhaW45LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9Td2FwQ2hhaW45LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZDg4
OTVkMThkNmExZGY3ZGFlNWE0MDVhNTFlYzJkMmFkZjA3MDVhCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1N3YXBD
aGFpbjkuY3BwCkBAIC0wLDAgKzEsNDQ1IEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKy8vIFN3YXBDaGFpbjkuY3BwOiBJbXBsZW1lbnRzIGEgYmFjay1l
bmQgc3BlY2lmaWMgY2xhc3MgZm9yIHRoZSBEM0Q5IHN3YXAgY2hhaW4uCisKKyNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9Td2FwQ2hhaW45LmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvUmVuZGVyZXI5LmgiCisKK25hbWVzcGFjZSByeAoreworCitTd2FwQ2hhaW45
OjpTd2FwQ2hhaW45KFJlbmRlcmVyOSAqcmVuZGVyZXIsIEhXTkQgd2luZG93LCBIQU5ETEUgc2hh
cmVIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBiYWNrQnVmZmVyRm9ybWF0
LCBHTGVudW0gZGVwdGhCdWZmZXJGb3JtYXQpCisgICAgOiBtUmVuZGVyZXIocmVuZGVyZXIpLCBT
d2FwQ2hhaW4od2luZG93LCBzaGFyZUhhbmRsZSwgYmFja0J1ZmZlckZvcm1hdCwgZGVwdGhCdWZm
ZXJGb3JtYXQpCit7CisgICAgbVN3YXBDaGFpbiA9IE5VTEw7CisgICAgbUJhY2tCdWZmZXIgPSBO
VUxMOworICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOworICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxM
OworICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsKKyAgICBtV2lkdGggPSAtMTsKKyAgICBt
SGVpZ2h0ID0gLTE7CisgICAgbVN3YXBJbnRlcnZhbCA9IC0xOworfQorCitTd2FwQ2hhaW45Ojp+
U3dhcENoYWluOSgpCit7CisgICAgcmVsZWFzZSgpOworfQorCit2b2lkIFN3YXBDaGFpbjk6OnJl
bGVhc2UoKQoreworICAgIGlmIChtU3dhcENoYWluKQorICAgIHsKKyAgICAgICAgbVN3YXBDaGFp
bi0+UmVsZWFzZSgpOworICAgICAgICBtU3dhcENoYWluID0gTlVMTDsKKyAgICB9CisKKyAgICBp
ZiAobUJhY2tCdWZmZXIpCisgICAgeworICAgICAgICBtQmFja0J1ZmZlci0+UmVsZWFzZSgpOwor
ICAgICAgICBtQmFja0J1ZmZlciA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKG1EZXB0aFN0ZW5j
aWwpCisgICAgeworICAgICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CisgICAgICAgIG1E
ZXB0aFN0ZW5jaWwgPSBOVUxMOworICAgIH0KKworICAgIGlmIChtUmVuZGVyVGFyZ2V0KQorICAg
IHsKKyAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworICAgICAgICBtUmVuZGVyVGFy
Z2V0ID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAobU9mZnNjcmVlblRleHR1cmUpCisgICAgewor
ICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+UmVsZWFzZSgpOworICAgICAgICBtT2Zmc2NyZWVu
VGV4dHVyZSA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKG1XaW5kb3cpCisgICAgICAgIG1TaGFy
ZUhhbmRsZSA9IE5VTEw7Cit9CisKK3N0YXRpYyBEV09SRCBjb252ZXJ0SW50ZXJ2YWwoRUdMaW50
IGludGVydmFsKQoreworI2lmIEFOR0xFX0ZPUkNFX1ZTWU5DX09GRgorICAgIHJldHVybiBEM0RQ
UkVTRU5UX0lOVEVSVkFMX0lNTUVESUFURTsKKyNlbHNlCisgICAgc3dpdGNoKGludGVydmFsKQor
ICAgIHsKKyAgICAgIGNhc2UgMDogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfSU1NRURJQVRF
OworICAgICAgY2FzZSAxOiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9PTkU7CisgICAgICBj
YXNlIDI6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX1RXTzsKKyAgICAgIGNhc2UgMzogcmV0
dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfVEhSRUU7CisgICAgICBjYXNlIDQ6IHJldHVybiBEM0RQ
UkVTRU5UX0lOVEVSVkFMX0ZPVVI7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAg
IH0KKworICAgIHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX0RFRkFVTFQ7CisjZW5kaWYKK30K
KworRUdMaW50IFN3YXBDaGFpbjk6OnJlc2l6ZShpbnQgYmFja2J1ZmZlcldpZHRoLCBpbnQgYmFj
a2J1ZmZlckhlaWdodCkKK3sKKyAgICAvLyBEM0Q5IGRvZXMgbm90IHN1cHBvcnQgcmVzaXppbmcg
c3dhcCBjaGFpbnMgd2l0aG91dCByZWNyZWF0aW5nIHRoZW0KKyAgICByZXR1cm4gcmVzZXQoYmFj
a2J1ZmZlcldpZHRoLCBiYWNrYnVmZmVySGVpZ2h0LCBtU3dhcEludGVydmFsKTsKK30KKworRUdM
aW50IFN3YXBDaGFpbjk6OnJlc2V0KGludCBiYWNrYnVmZmVyV2lkdGgsIGludCBiYWNrYnVmZmVy
SGVpZ2h0LCBFR0xpbnQgc3dhcEludGVydmFsKQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRl
dmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICBpZiAoZGV2aWNlID09IE5VTEwp
CisgICAgeworICAgICAgICByZXR1cm4gRUdMX0JBRF9BQ0NFU1M7CisgICAgfQorCisgICAgLy8g
RXZpY3QgYWxsIG5vbi1yZW5kZXIgdGFyZ2V0IHRleHR1cmVzIHRvIHN5c3RlbSBtZW1vcnkgYW5k
IHJlbGVhc2UgYWxsIHJlc291cmNlcworICAgIC8vIGJlZm9yZSByZWFsbG9jYXRpbmcgdGhlbSB0
byBmcmVlIHVwIGFzIG11Y2ggdmlkZW8gbWVtb3J5IGFzIHBvc3NpYmxlLgorICAgIGRldmljZS0+
RXZpY3RNYW5hZ2VkUmVzb3VyY2VzKCk7CisKKyAgICBIUkVTVUxUIHJlc3VsdDsKKworICAgIC8v
IFJlbGVhc2Ugc3BlY2lmaWMgcmVzb3VyY2VzIHRvIGZyZWUgdXAgbWVtb3J5IGZvciB0aGUgbmV3
IHJlbmRlciB0YXJnZXQsIHdoaWxlIHRoZQorICAgIC8vIG9sZCByZW5kZXIgdGFyZ2V0IHN0aWxs
IGV4aXN0cyBmb3IgdGhlIHB1cnBvc2Ugb2YgcHJlc2VydmluZyBpdHMgY29udGVudHMuCisgICAg
aWYgKG1Td2FwQ2hhaW4pCisgICAgeworICAgICAgICBtU3dhcENoYWluLT5SZWxlYXNlKCk7Cisg
ICAgICAgIG1Td2FwQ2hhaW4gPSBOVUxMOworICAgIH0KKworICAgIGlmIChtQmFja0J1ZmZlcikK
KyAgICB7CisgICAgICAgIG1CYWNrQnVmZmVyLT5SZWxlYXNlKCk7CisgICAgICAgIG1CYWNrQnVm
ZmVyID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAobU9mZnNjcmVlblRleHR1cmUpCisgICAgewor
ICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+UmVsZWFzZSgpOworICAgICAgICBtT2Zmc2NyZWVu
VGV4dHVyZSA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKG1EZXB0aFN0ZW5jaWwpCisgICAgewor
ICAgICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CisgICAgICAgIG1EZXB0aFN0ZW5jaWwg
PSBOVUxMOworICAgIH0KKworICAgIEhBTkRMRSAqcFNoYXJlSGFuZGxlID0gTlVMTDsKKyAgICBp
ZiAoIW1XaW5kb3cgJiYgbVJlbmRlcmVyLT5nZXRTaGFyZUhhbmRsZVN1cHBvcnQoKSkKKyAgICB7
CisgICAgICAgIHBTaGFyZUhhbmRsZSA9ICZtU2hhcmVIYW5kbGU7CisgICAgfQorCisgICAgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKGJhY2tidWZmZXJXaWR0aCwgYmFja2J1ZmZlckhl
aWdodCwgMSwgRDNEVVNBR0VfUkVOREVSVEFSR0VULAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnbF9kM2Q5OjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1CYWNrQnVmZmVy
Rm9ybWF0KSwgRDNEUE9PTF9ERUZBVUxULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmbU9mZnNjcmVlblRleHR1cmUsIHBTaGFyZUhhbmRsZSk7CisgICAgaWYgKEZBSUxFRChy
ZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG9mZnNjcmVlbiB0
ZXh0dXJlOiAlMDhsWCIsIHJlc3VsdCk7CisgICAgICAgIHJlbGVhc2UoKTsKKworICAgICAgICBp
ZiAoZDNkOTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIEVHTF9DT05URVhUX0xPU1Q7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gRUdMX0JBRF9BTExPQzsKKyAgICAgICAgfQorICAg
IH0KKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpvbGRSZW5kZXJUYXJnZXQgPSBtUmVuZGVyVGFy
Z2V0OworCisgICAgcmVzdWx0ID0gbU9mZnNjcmVlblRleHR1cmUtPkdldFN1cmZhY2VMZXZlbCgw
LCAmbVJlbmRlclRhcmdldCk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAg
IGlmIChvbGRSZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBSRUNUIHJlY3QgPQorICAgICAg
ICB7CisgICAgICAgICAgICAwLCAwLAorICAgICAgICAgICAgbVdpZHRoLCBtSGVpZ2h0CisgICAg
ICAgIH07CisKKyAgICAgICAgaWYgKHJlY3QucmlnaHQgPiBzdGF0aWNfY2FzdDxMT05HPihiYWNr
YnVmZmVyV2lkdGgpKQorICAgICAgICB7CisgICAgICAgICAgICByZWN0LnJpZ2h0ID0gYmFja2J1
ZmZlcldpZHRoOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJlY3QuYm90dG9tID4gc3RhdGlj
X2Nhc3Q8TE9ORz4oYmFja2J1ZmZlckhlaWdodCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
Y3QuYm90dG9tID0gYmFja2J1ZmZlckhlaWdodDsKKyAgICAgICAgfQorCisgICAgICAgIG1SZW5k
ZXJlci0+ZW5kU2NlbmUoKTsKKworICAgICAgICByZXN1bHQgPSBkZXZpY2UtPlN0cmV0Y2hSZWN0
KG9sZFJlbmRlclRhcmdldCwgJnJlY3QsIG1SZW5kZXJUYXJnZXQsICZyZWN0LCBEM0RURVhGX05P
TkUpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgIG9sZFJl
bmRlclRhcmdldC0+UmVsZWFzZSgpOworICAgIH0KKworICAgIGlmIChtV2luZG93KQorICAgIHsK
KyAgICAgICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbWV0ZXJzID0gezB9Owor
ICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVuY2lsRm9ybWF0ID0gZ2xfZDNk
OTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtRGVwdGhCdWZmZXJGb3JtYXQpOworICAgICAg
ICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyQ291bnQgPSAxOworICAgICAgICBwcmVzZW50
UGFyYW1ldGVycy5CYWNrQnVmZmVyRm9ybWF0ID0gZ2xfZDNkOTo6Q29udmVydFJlbmRlcmJ1ZmZl
ckZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCk7CisgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkVu
YWJsZUF1dG9EZXB0aFN0ZW5jaWwgPSBGQUxTRTsKKyAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMu
RmxhZ3MgPSAwOworICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5oRGV2aWNlV2luZG93ID0gbVdp
bmRvdzsKKyAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVRdWFsaXR5ID0gMDsg
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVW5pbXBsZW1lbnRlZAorICAgICAgICBwcmVzZW50
UGFyYW1ldGVycy5NdWx0aVNhbXBsZVR5cGUgPSBEM0RNVUxUSVNBTVBMRV9OT05FOyAgIC8vIEZJ
WE1FOiBVbmltcGxlbWVudGVkCisgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLlByZXNlbnRhdGlv
bkludGVydmFsID0gY29udmVydEludGVydmFsKHN3YXBJbnRlcnZhbCk7CisgICAgICAgIHByZXNl
bnRQYXJhbWV0ZXJzLlN3YXBFZmZlY3QgPSBEM0RTV0FQRUZGRUNUX0RJU0NBUkQ7CisgICAgICAg
IHByZXNlbnRQYXJhbWV0ZXJzLldpbmRvd2VkID0gVFJVRTsKKyAgICAgICAgcHJlc2VudFBhcmFt
ZXRlcnMuQmFja0J1ZmZlcldpZHRoID0gYmFja2J1ZmZlcldpZHRoOworICAgICAgICBwcmVzZW50
UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0ID0gYmFja2J1ZmZlckhlaWdodDsKKworICAgICAg
ICAvLyBodHRwOi8vY3JidWcuY29tLzE0MDIzOQorICAgICAgICAvLyBodHRwOi8vY3JidWcuY29t
LzE0MzQzNAorICAgICAgICAvLworICAgICAgICAvLyBTb21lIEFNRC9JbnRlbCBzd2l0Y2hhYmxl
IHN5c3RlbXMgLyBkcml2ZXJzIGFwcGVhciB0byByb3VuZCBzd2FwIGNoYWluIHN1cmZhY2VzIHRv
IGEgbXVsdGlwbGUgb2YgNjQgcGl4ZWxzIGluIHdpZHRoCisgICAgICAgIC8vIHdoZW4gdXNpbmcg
dGhlIGludGVncmF0ZWQgSW50ZWwuIFRoaXMgcm91bmRzIHRoZSB3aWR0aCB1cCByYXRoZXIgdGhh
biBkb3duLgorICAgICAgICAvLworICAgICAgICAvLyBTb21lIG5vbi1zd2l0Y2hhYmxlIEFNRCBH
UFVzIC8gZHJpdmVycyBkbyBub3QgcmVzcGVjdCB0aGUgc291cmNlIHJlY3RhbmdsZSB0byBQcmVz
ZW50LiBUaGVyZWZvcmUsIHdoZW4gdGhlIHZlbmRvciBJRAorICAgICAgICAvLyBpcyBub3QgSW50
ZWwsIHRoZSBiYWNrIGJ1ZmZlciB3aWR0aCBtdXN0IGJlIGV4YWN0bHkgdGhlIHNhbWUgd2lkdGgg
YXMgdGhlIHdpbmRvdyBvciBob3Jpem9udGFsIHNjYWxpbmcgd2lsbCBvY2N1ci4KKyAgICAgICAg
aWYgKG1SZW5kZXJlci0+Z2V0QWRhcHRlclZlbmRvcigpID09IFZFTkRPUl9JRF9JTlRFTCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoID0g
KHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCArIDYzKSAvIDY0ICogNjQ7CisgICAg
ICAgIH0KKworICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUFkZGl0aW9uYWxTd2FwQ2hh
aW4oJnByZXNlbnRQYXJhbWV0ZXJzLCAmbVN3YXBDaGFpbik7CisKKyAgICAgICAgaWYgKEZBSUxF
RChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVS
Ul9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9
PSBEM0RFUlJfSU5WQUxJRENBTEwgfHwgcmVzdWx0ID09IEQzREVSUl9ERVZJQ0VMT1NUKTsKKwor
ICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGFkZGl0aW9uYWwgc3dhcCBjaGFpbnMg
b3Igb2Zmc2NyZWVuIHN1cmZhY2VzOiAlMDhsWCIsIHJlc3VsdCk7CisgICAgICAgICAgICByZWxl
YXNlKCk7CisKKyAgICAgICAgICAgIGlmIChkM2Q5Ojppc0RldmljZUxvc3RFcnJvcihyZXN1bHQp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBFR0xfQ09OVEVYVF9MT1NU
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBFR0xfQkFEX0FMTE9DOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgcmVzdWx0ID0gbVN3YXBDaGFpbi0+R2V0QmFja0J1ZmZlcigwLCBEM0RCQUNL
QlVGRkVSX1RZUEVfTU9OTywgJm1CYWNrQnVmZmVyKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURF
RChyZXN1bHQpKTsKKyAgICAgICAgSW52YWxpZGF0ZVJlY3QobVdpbmRvdywgTlVMTCwgRkFMU0Up
OworICAgIH0KKworICAgIGlmIChtRGVwdGhCdWZmZXJGb3JtYXQgIT0gR0xfTk9ORSkKKyAgICB7
CisgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsU3VyZmFjZShiYWNr
YnVmZmVyV2lkdGgsIGJhY2tidWZmZXJIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9kM2Q5OjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9y
bWF0KG1EZXB0aEJ1ZmZlckZvcm1hdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBEM0RNVUxUSVNBTVBMRV9OT05FLCAwLCBGQUxTRSwgJm1EZXB0
aFN0ZW5jaWwsIE5VTEwpOworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAg
eworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8
fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0lOVkFMSURDQUxM
KTsKKworICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGRlcHRoc3RlbmNpbCBzdXJm
YWNlIGZvciBuZXcgc3dhcCBjaGFpbjogMHglMDhYIiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJl
bGVhc2UoKTsKKworICAgICAgICAgICAgaWYgKGQzZDk6OmlzRGV2aWNlTG9zdEVycm9yKHJlc3Vs
dCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEVHTF9DT05URVhUX0xP
U1Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIEVHTF9CQURfQUxMT0M7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBtV2lkdGggPSBiYWNrYnVmZmVyV2lkdGg7CisgICAgbUhlaWdodCA9
IGJhY2tidWZmZXJIZWlnaHQ7CisgICAgbVN3YXBJbnRlcnZhbCA9IHN3YXBJbnRlcnZhbDsKKwor
ICAgIHJldHVybiBFR0xfU1VDQ0VTUzsKK30KKworLy8gcGFyYW1ldGVycyBzaG91bGQgYmUgdmFs
aWRhdGVkL2NsYW1wZWQgYnkgY2FsbGVyCitFR0xpbnQgU3dhcENoYWluOTo6c3dhcFJlY3QoRUdM
aW50IHgsIEVHTGludCB5LCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQpCit7CisgICAgaWYg
KCFtU3dhcENoYWluKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEVHTF9TVUNDRVNTOworICAgIH0K
KworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7
CisKKyAgICAvLyBEaXNhYmxlIGFsbCBwaXBlbGluZSBvcGVyYXRpb25zCisgICAgZGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBEM0RaQl9GQUxTRSk7CisgICAgZGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7CisgICAgZGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsKKyAgICBkZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKKyAgICBk
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOworICAg
IGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOworICAg
IGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsKKyAgICBk
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIEQzRENPTE9SV1JJ
VEVFTkFCTEVfQUxQSEEgfCBEM0RDT0xPUldSSVRFRU5BQkxFX0JMVUUgfCBEM0RDT0xPUldSSVRF
RU5BQkxFX0dSRUVOIHwgRDNEQ09MT1JXUklURUVOQUJMRV9SRUQpOworICAgIGRldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfU1JHQldSSVRFRU5BQkxFLCBGQUxTRSk7CisgICAgZGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSwgRkFMU0UpOworICAgIGRldmlj
ZS0+U2V0UGl4ZWxTaGFkZXIoTlVMTCk7CisgICAgZGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIoTlVM
TCk7CisKKyAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBtQmFja0J1ZmZlcik7CisgICAg
ZGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKE5VTEwpOworCisgICAgZGV2aWNlLT5TZXRU
ZXh0dXJlKDAsIG1PZmZzY3JlZW5UZXh0dXJlKTsKKyAgICBkZXZpY2UtPlNldFRleHR1cmVTdGFn
ZVN0YXRlKDAsIEQzRFRTU19DT0xPUk9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7CisgICAgZGV2aWNl
LT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JBUkcxLCBEM0RUQV9URVhUVVJF
KTsKKyAgICBkZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDEsIEQzRFRTU19DT0xPUk9QLCBE
M0RUT1BfRElTQUJMRSk7CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9N
QUdGSUxURVIsIEQzRFRFWEZfUE9JTlQpOworICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAs
IEQzRFNBTVBfTUlORklMVEVSLCBEM0RURVhGX1BPSU5UKTsKKyAgICBkZXZpY2UtPlNldFNhbXBs
ZXJTdGF0ZSgwLCBEM0RTQU1QX0FERFJFU1NVLCBEM0RUQUREUkVTU19DTEFNUCk7CisgICAgZGV2
aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9BRERSRVNTViwgRDNEVEFERFJFU1NfQ0xB
TVApOworICAgIGRldmljZS0+U2V0RlZGKEQzREZWRl9YWVpSSFcgfCBEM0RGVkZfVEVYMSk7CisK
KyAgICBmb3IgKFVJTlQgc3RyZWFtSW5kZXggPSAwOyBzdHJlYW1JbmRleCA8IGdsOjpNQVhfVkVS
VEVYX0FUVFJJQlM7IHN0cmVhbUluZGV4KyspCisgICAgeworICAgICAgICBkZXZpY2UtPlNldFN0
cmVhbVNvdXJjZUZyZXEoc3RyZWFtSW5kZXgsIDEpOworICAgIH0KKworICAgIEQzRFZJRVdQT1JU
OSB2aWV3cG9ydCA9IHswLCAwLCBtV2lkdGgsIG1IZWlnaHQsIDAuMGYsIDEuMGZ9OworICAgIGRl
dmljZS0+U2V0Vmlld3BvcnQoJnZpZXdwb3J0KTsKKworICAgIGZsb2F0IHgxID0geCAtIDAuNWY7
CisgICAgZmxvYXQgeTEgPSAobUhlaWdodCAtIHkgLSBoZWlnaHQpIC0gMC41ZjsKKyAgICBmbG9h
dCB4MiA9ICh4ICsgd2lkdGgpIC0gMC41ZjsKKyAgICBmbG9hdCB5MiA9IChtSGVpZ2h0IC0geSkg
LSAwLjVmOworCisgICAgZmxvYXQgdTEgPSB4IC8gZmxvYXQobVdpZHRoKTsKKyAgICBmbG9hdCB2
MSA9IHkgLyBmbG9hdChtSGVpZ2h0KTsKKyAgICBmbG9hdCB1MiA9ICh4ICsgd2lkdGgpIC8gZmxv
YXQobVdpZHRoKTsKKyAgICBmbG9hdCB2MiA9ICh5ICsgaGVpZ2h0KSAvIGZsb2F0KG1IZWlnaHQp
OworCisgICAgZmxvYXQgcXVhZFs0XVs2XSA9IHt7eDEsIHkxLCAwLjBmLCAxLjBmLCB1MSwgdjJ9
LAorICAgICAgICAgICAgICAgICAgICAgICAge3gyLCB5MSwgMC4wZiwgMS4wZiwgdTIsIHYyfSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHt4MiwgeTIsIDAuMGYsIDEuMGYsIHUyLCB2MX0sCisg
ICAgICAgICAgICAgICAgICAgICAgICB7eDEsIHkyLCAwLjBmLCAxLjBmLCB1MSwgdjF9fTsgICAv
LyB4LCB5LCB6LCByaHcsIHUsIHYKKworICAgIG1SZW5kZXJlci0+c3RhcnRTY2VuZSgpOworICAg
IGRldmljZS0+RHJhd1ByaW1pdGl2ZVVQKEQzRFBUX1RSSUFOR0xFRkFOLCAyLCBxdWFkLCA2ICog
c2l6ZW9mKGZsb2F0KSk7CisgICAgbVJlbmRlcmVyLT5lbmRTY2VuZSgpOworCisgICAgZGV2aWNl
LT5TZXRUZXh0dXJlKDAsIE5VTEwpOworCisgICAgUkVDVCByZWN0ID0KKyAgICB7CisgICAgICAg
IHgsIG1IZWlnaHQgLSB5IC0gaGVpZ2h0LAorICAgICAgICB4ICsgd2lkdGgsIG1IZWlnaHQgLSB5
CisgICAgfTsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gbVN3YXBDaGFpbi0+UHJlc2VudCgmcmVj
dCwgJnJlY3QsIE5VTEwsIE5VTEwsIDApOworCisgICAgbVJlbmRlcmVyLT5tYXJrQWxsU3RhdGVE
aXJ0eSgpOworCisgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBy
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0RSSVZFUklOVEVSTkFM
RVJST1IpCisgICAgeworICAgICAgICByZXR1cm4gRUdMX0JBRF9BTExPQzsKKyAgICB9CisKKyAg
ICAvLyBodHRwOi8vY3JidWcuY29tLzMxMzIxMAorICAgIC8vIElmIG91ciBzd2FwIGZhaWxlZCwg
dHJpZ2dlciBhIGRldmljZSBsb3N0IGV2ZW50LiBSZXNldHRpbmcgd2lsbCB3b3JrIGFyb3VuZCBh
biBBTUQtc3BlY2lmaWMKKyAgICAvLyBkZXZpY2UgcmVtb3ZlZCBidWcgd2l0aCBsb3N0IGNvbnRl
eHRzIHdoZW4gcmVpbnN0YWxsaW5nIGRyaXZlcnMuCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQor
ICAgIHsKKyAgICAgICAgbVJlbmRlcmVyLT5ub3RpZnlEZXZpY2VMb3N0KCk7CisgICAgICAgIHJl
dHVybiBFR0xfQ09OVEVYVF9MT1NUOworICAgIH0KKworICAgIHJldHVybiBFR0xfU1VDQ0VTUzsK
K30KKworLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3Qg
UmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJmYWNlOSAqU3dhcENo
YWluOTo6Z2V0UmVuZGVyVGFyZ2V0KCkKK3sKKyAgICBpZiAobVJlbmRlclRhcmdldCkKKyAgICB7
CisgICAgICAgIG1SZW5kZXJUYXJnZXQtPkFkZFJlZigpOworICAgIH0KKworICAgIHJldHVybiBt
UmVuZGVyVGFyZ2V0OworfQorCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisv
LyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKK0lEaXJlY3QzRFN1
cmZhY2U5ICpTd2FwQ2hhaW45OjpnZXREZXB0aFN0ZW5jaWwoKQoreworICAgIGlmIChtRGVwdGhT
dGVuY2lsKQorICAgIHsKKyAgICAgICAgbURlcHRoU3RlbmNpbC0+QWRkUmVmKCk7CisgICAgfQor
CisgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7Cit9CisKKy8vIEluY3JlbWVudHMgcmVmY291bnQg
b24gdGV4dHVyZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgdGV4dHVy
ZQorSURpcmVjdDNEVGV4dHVyZTkgKlN3YXBDaGFpbjk6OmdldE9mZnNjcmVlblRleHR1cmUoKQor
eworICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkKKyAgICB7CisgICAgICAgIG1PZmZzY3JlZW5U
ZXh0dXJlLT5BZGRSZWYoKTsKKyAgICB9CisKKyAgICByZXR1cm4gbU9mZnNjcmVlblRleHR1cmU7
Cit9CisKK1N3YXBDaGFpbjkgKlN3YXBDaGFpbjk6Om1ha2VTd2FwQ2hhaW45KFN3YXBDaGFpbiAq
c3dhcENoYWluKQoreworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKHJ4OjpTd2FwQ2hhaW45
Kiwgc3dhcENoYWluKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHJ4OjpTd2FwQ2hhaW45Kj4o
c3dhcENoYWluKTsKK30KKwordm9pZCBTd2FwQ2hhaW45OjpyZWNyZWF0ZSgpCit7CisgICAgaWYg
KCFtU3dhcENoYWluKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIElEaXJl
Y3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgaWYgKGRl
dmljZSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEQzRFBS
RVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50UGFyYW1ldGVyczsKKyAgICBIUkVTVUxUIHJlc3VsdCA9
IG1Td2FwQ2hhaW4tPkdldFByZXNlbnRQYXJhbWV0ZXJzKCZwcmVzZW50UGFyYW1ldGVycyk7Cisg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIElEaXJlY3QzRFN3YXBDaGFpbjkq
IG5ld1N3YXBDaGFpbiA9IE5VTEw7CisgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVBZGRpdGlv
bmFsU3dhcENoYWluKCZwcmVzZW50UGFyYW1ldGVycywgJm5ld1N3YXBDaGFpbik7CisgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1T
d2FwQ2hhaW4tPlJlbGVhc2UoKTsKKyAgICBtU3dhcENoYWluID0gbmV3U3dhcENoYWluOworCisg
ICAgbUJhY2tCdWZmZXItPlJlbGVhc2UoKTsKKyAgICByZXN1bHQgPSBtU3dhcENoYWluLT5HZXRC
YWNrQnVmZmVyKDAsIEQzREJBQ0tCVUZGRVJfVFlQRV9NT05PLCAmbUJhY2tCdWZmZXIpOworICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9Td2FwQ2hhaW45Lmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU3dh
cENoYWluOS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE2YTYyYmQ4NmY2YTY1YjdkZDhiN2JkNDIyMDc2NDE0ZjQ5
MGQ0NWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvU3dhcENoYWluOS5oCkBAIC0wLDAgKzEsNTUgQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisvLyBTd2FwQ2hhaW45Lmg6IERlZmluZXMgYSBiYWNrLWVuZCBzcGVjaWZpYyBj
bGFzcyBmb3IgdGhlIEQzRDkgc3dhcCBjaGFpbi4KKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVS
RVJfU1dBUENIQUlOOV9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfU1dBUENIQUlOOV9I
XworCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvU3dhcENoYWluLmgiCisKK25hbWVzcGFjZSByeAoreworY2xhc3MgUmVuZGVyZXI5
OworCitjbGFzcyBTd2FwQ2hhaW45IDogcHVibGljIFN3YXBDaGFpbgoreworICBwdWJsaWM6Cisg
ICAgU3dhcENoYWluOShSZW5kZXJlcjkgKnJlbmRlcmVyLCBIV05EIHdpbmRvdywgSEFORExFIHNo
YXJlSGFuZGxlLAorICAgICAgICAgICAgICAgR0xlbnVtIGJhY2tCdWZmZXJGb3JtYXQsIEdMZW51
bSBkZXB0aEJ1ZmZlckZvcm1hdCk7CisgICAgdmlydHVhbCB+U3dhcENoYWluOSgpOworCisgICAg
RUdMaW50IHJlc2l6ZShFR0xpbnQgYmFja2J1ZmZlcldpZHRoLCBFR0xpbnQgYmFja2J1ZmZlckhl
aWdodCk7CisgICAgdmlydHVhbCBFR0xpbnQgcmVzZXQoRUdMaW50IGJhY2tidWZmZXJXaWR0aCwg
RUdMaW50IGJhY2tidWZmZXJIZWlnaHQsIEVHTGludCBzd2FwSW50ZXJ2YWwpOworICAgIHZpcnR1
YWwgRUdMaW50IHN3YXBSZWN0KEVHTGludCB4LCBFR0xpbnQgeSwgRUdMaW50IHdpZHRoLCBFR0xp
bnQgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjcmVhdGUoKTsKKworICAgIHZpcnR1YWwg
SURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldCgpOworICAgIHZpcnR1YWwgSURpcmVj
dDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNpbCgpOworICAgIHZpcnR1YWwgSURpcmVjdDNEVGV4
dHVyZTkgKmdldE9mZnNjcmVlblRleHR1cmUoKTsKKworICAgIHN0YXRpYyBTd2FwQ2hhaW45ICpt
YWtlU3dhcENoYWluOShTd2FwQ2hhaW4gKnN3YXBDaGFpbik7CisKKyAgcHJpdmF0ZToKKyAgICBE
SVNBTExPV19DT1BZX0FORF9BU1NJR04oU3dhcENoYWluOSk7CisKKyAgICB2b2lkIHJlbGVhc2Uo
KTsKKworICAgIFJlbmRlcmVyOSAqbVJlbmRlcmVyOworICAgIEVHTGludCBtSGVpZ2h0OworICAg
IEVHTGludCBtV2lkdGg7CisgICAgRUdMaW50IG1Td2FwSW50ZXJ2YWw7CisKKyAgICBJRGlyZWN0
M0RTd2FwQ2hhaW45ICptU3dhcENoYWluOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICptQmFja0J1
ZmZlcjsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVJlbmRlclRhcmdldDsKKyAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqbURlcHRoU3RlbmNpbDsKKyAgICBJRGlyZWN0M0RUZXh0dXJlOSogbU9mZnNj
cmVlblRleHR1cmU7Cit9OworCit9CisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1NXQVBD
SEFJTjlfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9UZXh0dXJlU3RvcmFnZTkuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1RleHR1cmVTdG9yYWdlOS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMjQ4NmE5YTViZjczNzZkY2IxZmZjZDQ4NWY2ZmY5MWY1ZjQxMzQ4ZAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9UZXh0dXJlU3RvcmFnZTkuY3BwCkBAIC0wLDAgKzEsMzI4IEBACisjaW5jbHVkZSAi
cHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUZXh0dXJlU3RvcmFnZTkuY3BwOiBJ
bXBsZW1lbnRzIHRoZSBhYnN0cmFjdCByeDo6VGV4dHVyZVN0b3JhZ2U5IGNsYXNzIGFuZCBpdHMg
Y29uY3JldGUgZGVyaXZlZAorLy8gY2xhc3NlcyBUZXh0dXJlU3RvcmFnZTlfMkQgYW5kIFRleHR1
cmVTdG9yYWdlOV9DdWJlLCB3aGljaCBhY3QgYXMgdGhlIGludGVyZmFjZSB0byB0aGUKKy8vIEQz
RDkgdGV4dHVyZS4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvU3dhcENoYWluOS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L1JlbmRlclRhcmdldDkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5k
ZXJlcjlfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgorCituYW1lc3Bh
Y2UgcngKK3sKK1RleHR1cmVTdG9yYWdlOTo6VGV4dHVyZVN0b3JhZ2U5KFJlbmRlcmVyICpyZW5k
ZXJlciwgRFdPUkQgdXNhZ2UpCisgICAgOiBtTG9kT2Zmc2V0KDApLAorICAgICAgbVJlbmRlcmVy
KFJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShyZW5kZXJlcikpLAorICAgICAgbUQzRFVzYWdlKHVz
YWdlKSwKKyAgICAgIG1EM0RQb29sKG1SZW5kZXJlci0+Z2V0VGV4dHVyZVBvb2wodXNhZ2UpKQor
eworfQorCitUZXh0dXJlU3RvcmFnZTk6On5UZXh0dXJlU3RvcmFnZTkoKQoreworfQorCitUZXh0
dXJlU3RvcmFnZTkgKlRleHR1cmVTdG9yYWdlOTo6bWFrZVRleHR1cmVTdG9yYWdlOShUZXh0dXJl
U3RvcmFnZSAqc3RvcmFnZSkKK3sKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShUZXh0dXJl
U3RvcmFnZTkqLCBzdG9yYWdlKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmVTdG9y
YWdlOSo+KHN0b3JhZ2UpOworfQorCitEV09SRCBUZXh0dXJlU3RvcmFnZTk6OkdldFRleHR1cmVV
c2FnZShEM0RGT1JNQVQgZDNkZm10LCBHTGVudW0gZ2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFi
bGUpCit7CisgICAgRFdPUkQgZDNkdXNhZ2UgPSAwOworCisgICAgaWYgKGQzZGZtdCA9PSBEM0RG
TVRfSU5UWikKKyAgICB7CisgICAgICAgIGQzZHVzYWdlIHw9IEQzRFVTQUdFX0RFUFRIU1RFTkNJ
TDsKKyAgICB9CisgICAgZWxzZSBpZihmb3JjZVJlbmRlcmFibGUgfHwgKFRleHR1cmVTdG9yYWdl
OTo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShkM2RmbXQpICYmIChnbHVzYWdlID09IEdMX0ZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpKSkKKyAgICB7CisgICAgICAgIGQzZHVzYWdlIHw9
IEQzRFVTQUdFX1JFTkRFUlRBUkdFVDsKKyAgICB9CisgICAgcmV0dXJuIGQzZHVzYWdlOworfQor
Citib29sIFRleHR1cmVTdG9yYWdlOTo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEM0RGT1JN
QVQgZm9ybWF0KQoreworICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lOVFopCisgICAgeworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgc3dpdGNoKGZvcm1hdCkKKyAgICB7CisgICAg
ICBjYXNlIEQzREZNVF9MODoKKyAgICAgIGNhc2UgRDNERk1UX0E4TDg6CisgICAgICBjYXNlIEQz
REZNVF9EWFQxOgorICAgICAgY2FzZSBEM0RGTVRfRFhUMzoKKyAgICAgIGNhc2UgRDNERk1UX0RY
VDU6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4Ogor
ICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6CisgICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZS
MTZGOgorICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUZXh0dXJlU3RvcmFnZTk6OmlzUmVuZGVyVGFyZ2V0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1EM0RVc2FnZSAmIChEM0RVU0FHRV9SRU5ERVJUQVJH
RVQgfCBEM0RVU0FHRV9ERVBUSFNURU5DSUwpKSAhPSAwOworfQorCitib29sIFRleHR1cmVTdG9y
YWdlOTo6aXNNYW5hZ2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1EM0RQb29sID09IEQzRFBP
T0xfTUFOQUdFRCk7Cit9CisKK0QzRFBPT0wgVGV4dHVyZVN0b3JhZ2U5OjpnZXRQb29sKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbUQzRFBvb2w7Cit9CisKK0RXT1JEIFRleHR1cmVTdG9yYWdlOTo6
Z2V0VXNhZ2UoKSBjb25zdAoreworICAgIHJldHVybiBtRDNEVXNhZ2U7Cit9CisKK2ludCBUZXh0
dXJlU3RvcmFnZTk6OmdldExvZE9mZnNldCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1Mb2RPZmZz
ZXQ7Cit9CisKK2ludCBUZXh0dXJlU3RvcmFnZTk6OmxldmVsQ291bnQoKQoreworICAgIHJldHVy
biBnZXRCYXNlVGV4dHVyZSgpID8gZ2V0QmFzZVRleHR1cmUoKS0+R2V0TGV2ZWxDb3VudCgpIC0g
Z2V0TG9kT2Zmc2V0KCkgOiAwOworfQorCitUZXh0dXJlU3RvcmFnZTlfMkQ6OlRleHR1cmVTdG9y
YWdlOV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBDaGFpbjkgKnN3YXBjaGFpbikgOiBUZXh0
dXJlU3RvcmFnZTkocmVuZGVyZXIsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCkKK3sKKyAgICBJRGly
ZWN0M0RUZXh0dXJlOSAqc3VyZmFjZVRleHR1cmUgPSBzd2FwY2hhaW4tPmdldE9mZnNjcmVlblRl
eHR1cmUoKTsKKyAgICBtVGV4dHVyZSA9IHN1cmZhY2VUZXh0dXJlOworICAgIG1SZW5kZXJUYXJn
ZXQgPSBOVUxMOworCisgICAgaW5pdGlhbGl6ZVJlbmRlclRhcmdldCgpOworfQorCitUZXh0dXJl
U3RvcmFnZTlfMkQ6OlRleHR1cmVTdG9yYWdlOV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIGludCBs
ZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVu
ZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCisgICAgOiBUZXh0dXJlU3Rv
cmFnZTkocmVuZGVyZXIsIEdldFRleHR1cmVVc2FnZShSZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjko
cmVuZGVyZXIpLT5Db252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0KSwg
dXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSkpCit7CisgICAgbVRleHR1cmUgPSBOVUxMOworICAgIG1S
ZW5kZXJUYXJnZXQgPSBOVUxMOworICAgIC8vIGlmIHRoZSB3aWR0aCBvciBoZWlnaHQgaXMgbm90
IHBvc2l0aXZlIHRoaXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJl
CisgICAgLy8gd2UgaGFuZGxlIHRoYXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUg
Y3JlYXRpb24KKyAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApCisgICAgeworICAgICAg
ICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworICAg
ICAgICBnbDo6TWFrZVZhbGlkU2l6ZShmYWxzZSwgZ2w6OklzQ29tcHJlc3NlZChpbnRlcm5hbGZv
cm1hdCksICZ3aWR0aCwgJmhlaWdodCwgJm1Mb2RPZmZzZXQpOworICAgICAgICBIUkVTVUxUIHJl
c3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZSh3aWR0aCwgaGVpZ2h0LCBsZXZlbHMgPyBsZXZl
bHMgKyBtTG9kT2Zmc2V0IDogMCwgZ2V0VXNhZ2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbVJlbmRlcmVyLT5Db252ZXJ0VGV4dHVyZUludGVybmFs
Rm9ybWF0KGludGVybmFsZm9ybWF0KSwgZ2V0UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOworCisg
ICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJU
KHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1F
TU9SWSk7CisgICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpbml0aWFsaXplUmVuZGVyVGFyZ2V0KCk7Cit9CisKK1RleHR1cmVT
dG9yYWdlOV8yRDo6flRleHR1cmVTdG9yYWdlOV8yRCgpCit7CisgICAgaWYgKG1UZXh0dXJlKQor
ICAgIHsKKyAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBkZWxldGUg
bVJlbmRlclRhcmdldDsKK30KKworVGV4dHVyZVN0b3JhZ2U5XzJEICpUZXh0dXJlU3RvcmFnZTlf
MkQ6Om1ha2VUZXh0dXJlU3RvcmFnZTlfMkQoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpCit7Cisg
ICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoVGV4dHVyZVN0b3JhZ2U5XzJEKiwgc3RvcmFnZSkp
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlU3RvcmFnZTlfMkQqPihzdG9yYWdlKTsK
K30KKworLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3Qg
UmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVy
ZVN0b3JhZ2U5XzJEOjpnZXRTdXJmYWNlTGV2ZWwoaW50IGxldmVsLCBib29sIGRpcnR5KQorewor
ICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gTlVMTDsKKworICAgIGlmIChtVGV4dHVy
ZSkKKyAgICB7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVRleHR1cmUtPkdldFN1cmZhY2VM
ZXZlbChsZXZlbCArIG1Mb2RPZmZzZXQsICZzdXJmYWNlKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChyZXN1bHQpKTsKKworICAgICAgICAvLyBXaXRoIG1hbmFnZWQgdGV4dHVyZXMgdGhlIGRy
aXZlciBuZWVkcyB0byBiZSBpbmZvcm1lZCBvZiB1cGRhdGVzIHRvIHRoZSBsb3dlciBtaXBtYXAg
bGV2ZWxzCisgICAgICAgIGlmIChsZXZlbCArIG1Mb2RPZmZzZXQgIT0gMCAmJiBpc01hbmFnZWQo
KSAmJiBkaXJ0eSkKKyAgICAgICAgeworICAgICAgICAgICAgbVRleHR1cmUtPkFkZERpcnR5UmVj
dChOVUxMKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdXJmYWNlOworfQorCitS
ZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlOV8yRDo6Z2V0UmVuZGVyVGFyZ2V0KCkKK3sKKyAg
ICByZXR1cm4gbVJlbmRlclRhcmdldDsKK30KKwordm9pZCBUZXh0dXJlU3RvcmFnZTlfMkQ6Omdl
bmVyYXRlTWlwbWFwKGludCBsZXZlbCkKK3sKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqdXBwZXIg
PSBnZXRTdXJmYWNlTGV2ZWwobGV2ZWwgLSAxLCBmYWxzZSk7CisgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKmxvd2VyID0gZ2V0U3VyZmFjZUxldmVsKGxldmVsLCB0cnVlKTsKKworICAgIGlmICh1cHBl
ciAhPSBOVUxMICYmIGxvd2VyICE9IE5VTEwpCisgICAgeworICAgICAgICBtUmVuZGVyZXItPmJv
eEZpbHRlcih1cHBlciwgbG93ZXIpOworICAgIH0KKworICAgIGlmICh1cHBlciAhPSBOVUxMKSB1
cHBlci0+UmVsZWFzZSgpOworICAgIGlmIChsb3dlciAhPSBOVUxMKSBsb3dlci0+UmVsZWFzZSgp
OworfQorCitJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmVTdG9yYWdlOV8yRDo6Z2V0QmFz
ZVRleHR1cmUoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTsKK30KKwordm9pZCBUZXh0
dXJlU3RvcmFnZTlfMkQ6OmluaXRpYWxpemVSZW5kZXJUYXJnZXQoKQoreworICAgIEFTU0VSVCht
UmVuZGVyVGFyZ2V0ID09IE5VTEwpOworCisgICAgaWYgKG1UZXh0dXJlICE9IE5VTEwgJiYgaXNS
ZW5kZXJUYXJnZXQoKSkKKyAgICB7CisgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNl
ID0gZ2V0U3VyZmFjZUxldmVsKDAsIGZhbHNlKTsKKworICAgICAgICBtUmVuZGVyVGFyZ2V0ID0g
bmV3IFJlbmRlclRhcmdldDkobVJlbmRlcmVyLCBzdXJmYWNlKTsKKyAgICB9Cit9CisKK1RleHR1
cmVTdG9yYWdlOV9DdWJlOjpUZXh0dXJlU3RvcmFnZTlfQ3ViZShSZW5kZXJlciAqcmVuZGVyZXIs
IGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZv
cmNlUmVuZGVyYWJsZSwgaW50IHNpemUpCisgICAgOiBUZXh0dXJlU3RvcmFnZTkocmVuZGVyZXIs
IEdldFRleHR1cmVVc2FnZShSZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjkocmVuZGVyZXIpLT5Db252
ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0KSwgdXNhZ2UsIGZvcmNlUmVu
ZGVyYWJsZSkpCit7CisgICAgbVRleHR1cmUgPSBOVUxMOworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgNjsgKytpKQorICAgIHsKKyAgICAgICAgbVJlbmRlclRhcmdldFtpXSA9IE5VTEw7CisgICAg
fQorCisgICAgLy8gaWYgdGhlIHNpemUgaXMgbm90IHBvc2l0aXZlIHRoaXMgc2hvdWxkIGJlIHRy
ZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJlCisgICAgLy8gd2UgaGFuZGxlIHRoYXQgaGVy
ZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRpb24KKyAgICBpZiAoc2l6ZSA+IDAp
CisgICAgeworICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdl
dERldmljZSgpOworICAgICAgICBpbnQgaGVpZ2h0ID0gc2l6ZTsKKyAgICAgICAgZ2w6Ok1ha2VW
YWxpZFNpemUoZmFsc2UsIGdsOjpJc0NvbXByZXNzZWQoaW50ZXJuYWxmb3JtYXQpLCAmc2l6ZSwg
JmhlaWdodCwgJm1Mb2RPZmZzZXQpOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+
Q3JlYXRlQ3ViZVRleHR1cmUoc2l6ZSwgbGV2ZWxzID8gbGV2ZWxzICsgbUxvZE9mZnNldCA6IDAs
IGdldFVzYWdlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtUmVuZGVyZXItPkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxm
b3JtYXQpLCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVMTCk7CisKKyAgICAgICAgaWYgKEZBSUxF
RChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVS
Ul9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAg
ICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGluaXRpYWxpemVSZW5kZXJUYXJnZXQoKTsKK30KKworVGV4dHVyZVN0b3JhZ2U5X0N1YmU6On5U
ZXh0dXJlU3RvcmFnZTlfQ3ViZSgpCit7CisgICAgaWYgKG1UZXh0dXJlKQorICAgIHsKKyAgICAg
ICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IDY7ICsraSkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBtUmVuZGVyVGFyZ2V0W2ldOworICAgIH0K
K30KKworVGV4dHVyZVN0b3JhZ2U5X0N1YmUgKlRleHR1cmVTdG9yYWdlOV9DdWJlOjptYWtlVGV4
dHVyZVN0b3JhZ2U5X0N1YmUoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpCit7CisgICAgQVNTRVJU
KEhBU19EWU5BTUlDX1RZUEUoVGV4dHVyZVN0b3JhZ2U5X0N1YmUqLCBzdG9yYWdlKSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmVTdG9yYWdlOV9DdWJlKj4oc3RvcmFnZSk7Cit9CisK
Ky8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVh
c2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQorSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVTdG9y
YWdlOV9DdWJlOjpnZXRDdWJlTWFwU3VyZmFjZShHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVs
LCBib29sIGRpcnR5KQoreworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gTlVMTDsK
KworICAgIGlmIChtVGV4dHVyZSkKKyAgICB7CisgICAgICAgIEQzRENVQkVNQVBfRkFDRVMgZmFj
ZSA9IGdsX2QzZDk6OkNvbnZlcnRDdWJlRmFjZShmYWNlVGFyZ2V0KTsKKyAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBtVGV4dHVyZS0+R2V0Q3ViZU1hcFN1cmZhY2UoZmFjZSwgbGV2ZWwgKyBtTG9k
T2Zmc2V0LCAmc3VyZmFjZSk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisK
KyAgICAgICAgLy8gV2l0aCBtYW5hZ2VkIHRleHR1cmVzIHRoZSBkcml2ZXIgbmVlZHMgdG8gYmUg
aW5mb3JtZWQgb2YgdXBkYXRlcyB0byB0aGUgbG93ZXIgbWlwbWFwIGxldmVscworICAgICAgICBp
ZiAobGV2ZWwgIT0gMCAmJiBpc01hbmFnZWQoKSAmJiBkaXJ0eSkKKyAgICAgICAgeworICAgICAg
ICAgICAgbVRleHR1cmUtPkFkZERpcnR5UmVjdChmYWNlLCBOVUxMKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiBzdXJmYWNlOworfQorCitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9y
YWdlOV9DdWJlOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQpCit7CisgICAgcmV0
dXJuIG1SZW5kZXJUYXJnZXRbZ2w6OlRleHR1cmVDdWJlTWFwOjpmYWNlSW5kZXgoZmFjZVRhcmdl
dCldOworfQorCit2b2lkIFRleHR1cmVTdG9yYWdlOV9DdWJlOjpnZW5lcmF0ZU1pcG1hcChpbnQg
ZmFjZSwgaW50IGxldmVsKQoreworICAgIElEaXJlY3QzRFN1cmZhY2U5ICp1cHBlciA9IGdldEN1
YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVs
IC0gMSwgZmFsc2UpOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpsb3dlciA9IGdldEN1YmVNYXBT
dXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsLCB0cnVl
KTsKKworICAgIGlmICh1cHBlciAhPSBOVUxMICYmIGxvd2VyICE9IE5VTEwpCisgICAgeworICAg
ICAgICBtUmVuZGVyZXItPmJveEZpbHRlcih1cHBlciwgbG93ZXIpOworICAgIH0KKworICAgIGlm
ICh1cHBlciAhPSBOVUxMKSB1cHBlci0+UmVsZWFzZSgpOworICAgIGlmIChsb3dlciAhPSBOVUxM
KSBsb3dlci0+UmVsZWFzZSgpOworfQorCitJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmVT
dG9yYWdlOV9DdWJlOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0
dXJlOworfQorCit2b2lkIFRleHR1cmVTdG9yYWdlOV9DdWJlOjppbml0aWFsaXplUmVuZGVyVGFy
Z2V0KCkKK3sKKyAgICBpZiAobVRleHR1cmUgIT0gTlVMTCAmJiBpc1JlbmRlclRhcmdldCgpKQor
ICAgIHsKKyAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOworCisgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBB
U1NFUlQobVJlbmRlclRhcmdldFtpXSA9PSBOVUxMKTsKKworICAgICAgICAgICAgc3VyZmFjZSA9
IGdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGksIDAs
IGZhbHNlKTsKKworICAgICAgICAgICAgbVJlbmRlclRhcmdldFtpXSA9IG5ldyBSZW5kZXJUYXJn
ZXQ5KG1SZW5kZXJlciwgc3VyZmFjZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30KXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5LmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0b3Jh
Z2U5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uODZmNTUxYTEzMTVkYTQ1MzcxM2ZhMTk2ZDc3MjhmNzI1N2UyYmQ4
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9UZXh0dXJlU3RvcmFnZTkuaApAQCAtMCwwICsxLDEwOSBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKy8vIFRleHR1cmVTdG9yYWdlOS5oOiBEZWZpbmVzIHRoZSBhYnN0cmFjdCBy
eDo6VGV4dHVyZVN0b3JhZ2U5IGNsYXNzIGFuZCBpdHMgY29uY3JldGUgZGVyaXZlZAorLy8gY2xh
c3NlcyBUZXh0dXJlU3RvcmFnZTlfMkQgYW5kIFRleHR1cmVTdG9yYWdlOV9DdWJlLCB3aGljaCBh
Y3QgYXMgdGhlIGludGVyZmFjZSB0byB0aGUKKy8vIEQzRDkgdGV4dHVyZS4KKworI2lmbmRlZiBM
SUJHTEVTVjJfUkVOREVSRVJfVEVYVFVSRVNUT1JBR0U5X0hfCisjZGVmaW5lIExJQkdMRVNWMl9S
RU5ERVJFUl9URVhUVVJFU1RPUkFHRTlfSF8KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9UZXh0dXJlU3RvcmFnZS5oIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCituYW1lc3Bh
Y2UgcngKK3sKK2NsYXNzIFJlbmRlcmVyOTsKK2NsYXNzIFN3YXBDaGFpbjk7CitjbGFzcyBSZW5k
ZXJUYXJnZXQ7CitjbGFzcyBSZW5kZXJUYXJnZXQ5OworY2xhc3MgQmxpdDsKKworY2xhc3MgVGV4
dHVyZVN0b3JhZ2U5IDogcHVibGljIFRleHR1cmVTdG9yYWdlCit7CisgIHB1YmxpYzoKKyAgICBU
ZXh0dXJlU3RvcmFnZTkoUmVuZGVyZXIgKnJlbmRlcmVyLCBEV09SRCB1c2FnZSk7CisgICAgdmly
dHVhbCB+VGV4dHVyZVN0b3JhZ2U5KCk7CisKKyAgICBzdGF0aWMgVGV4dHVyZVN0b3JhZ2U5ICpt
YWtlVGV4dHVyZVN0b3JhZ2U5KFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKTsKKworICAgIHN0YXRp
YyBEV09SRCBHZXRUZXh0dXJlVXNhZ2UoRDNERk9STUFUIGQzZGZtdCwgR0xlbnVtIGdsdXNhZ2Us
IGJvb2wgZm9yY2VSZW5kZXJhYmxlKTsKKyAgICBzdGF0aWMgYm9vbCBJc1RleHR1cmVGb3JtYXRS
ZW5kZXJhYmxlKEQzREZPUk1BVCBmb3JtYXQpOworCisgICAgRDNEUE9PTCBnZXRQb29sKCkgY29u
c3Q7CisgICAgRFdPUkQgZ2V0VXNhZ2UoKSBjb25zdDsKKworICAgIHZpcnR1YWwgSURpcmVjdDNE
QmFzZVRleHR1cmU5ICpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFJl
bmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KCkgeyByZXR1cm4gTlVMTDsgfQorICAgIHZpcnR1
YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQpIHsgcmV0
dXJuIE5VTEw7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKSB7
fTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCkg
e307CisKKyAgICB2aXJ0dWFsIGludCBnZXRMb2RPZmZzZXQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGJvb2wgaXNSZW5kZXJUYXJnZXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNNYW5hZ2Vk
KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgbGV2ZWxDb3VudCgpOworCisgIHByb3RlY3RlZDoK
KyAgICBpbnQgbUxvZE9mZnNldDsKKyAgICBSZW5kZXJlcjkgKm1SZW5kZXJlcjsKKworICBwcml2
YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZTkpOworCisg
ICAgY29uc3QgRFdPUkQgbUQzRFVzYWdlOworICAgIGNvbnN0IEQzRFBPT0wgbUQzRFBvb2w7Cit9
OworCitjbGFzcyBUZXh0dXJlU3RvcmFnZTlfMkQgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2U5Cit7
CisgIHB1YmxpYzoKKyAgICBUZXh0dXJlU3RvcmFnZTlfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBT
d2FwQ2hhaW45ICpzd2FwY2hhaW4pOworICAgIFRleHR1cmVTdG9yYWdlOV8yRChSZW5kZXJlciAq
cmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdl
LCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwor
ICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlOV8yRCgpOworCisgICAgc3RhdGljIFRleHR1cmVT
dG9yYWdlOV8yRCAqbWFrZVRleHR1cmVTdG9yYWdlOV8yRChUZXh0dXJlU3RvcmFnZSAqc3RvcmFn
ZSk7CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0U3VyZmFjZUxldmVsKGludCBsZXZlbCwg
Ym9vbCBkaXJ0eSk7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgp
OworICAgIHZpcnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRCYXNlVGV4dHVyZSgpIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpOworCisgIHBy
aXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlOV8yRCk7
CisKKyAgICB2b2lkIGluaXRpYWxpemVSZW5kZXJUYXJnZXQoKTsKKworICAgIElEaXJlY3QzRFRl
eHR1cmU5ICptVGV4dHVyZTsKKyAgICBSZW5kZXJUYXJnZXQ5ICptUmVuZGVyVGFyZ2V0OworfTsK
KworY2xhc3MgVGV4dHVyZVN0b3JhZ2U5X0N1YmUgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2U5Cit7
CisgIHB1YmxpYzoKKyAgICBUZXh0dXJlU3RvcmFnZTlfQ3ViZShSZW5kZXJlciAqcmVuZGVyZXIs
IGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZv
cmNlUmVuZGVyYWJsZSwgaW50IHNpemUpOworICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlOV9D
dWJlKCk7CisKKyAgICBzdGF0aWMgVGV4dHVyZVN0b3JhZ2U5X0N1YmUgKm1ha2VUZXh0dXJlU3Rv
cmFnZTlfQ3ViZShUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSk7CisKKyAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqZ2V0Q3ViZU1hcFN1cmZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCwgYm9v
bCBkaXJ0eSk7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVu
dW0gZmFjZVRhcmdldCk7CisgICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJh
c2VUZXh0dXJlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBm
YWNlLCBpbnQgbGV2ZWwpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKFRleHR1cmVTdG9yYWdlOV9DdWJlKTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZVJlbmRlclRh
cmdldCgpOworCisgICAgSURpcmVjdDNEQ3ViZVRleHR1cmU5ICptVGV4dHVyZTsKKyAgICBSZW5k
ZXJUYXJnZXQ5ICptUmVuZGVyVGFyZ2V0WzZdOworfTsKKworfQorCisjZW5kaWYgLy8gTElCR0xF
U1YyX1JFTkRFUkVSX1RFWFRVUkVTVE9SQUdFOV9IXworCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4QnVmZmVyOS5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
VmVydGV4QnVmZmVyOS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTdmNWJjZDI1NmFjZWI3MjU3NWFmZjlhMTk4
Y2M5ZDBmN2QyNzYzMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmNwcApAQCAtMCwwICsx
LDUzMCBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisv
LyBWZXJ0ZXhCdWZmZXI5LmNwcDogRGVmaW5lcyB0aGUgRDNEOSBWZXJ0ZXhCdWZmZXIgaW1wbGVt
ZW50YXRpb24uCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZm
ZXI5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvdmVydGV4Y29udmVyc2lv
bi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdlLmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9SZW5kZXJlcjkuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKKworbmFt
ZXNwYWNlIHJ4Cit7CisKK2Jvb2wgVmVydGV4QnVmZmVyOTo6bVRyYW5zbGF0aW9uc0luaXRpYWxp
emVkID0gZmFsc2U7CitWZXJ0ZXhCdWZmZXI5OjpGb3JtYXRDb252ZXJ0ZXIgVmVydGV4QnVmZmVy
OTo6bUZvcm1hdENvbnZlcnRlcnNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVNdWzJdWzRdOwor
CitWZXJ0ZXhCdWZmZXI5OjpWZXJ0ZXhCdWZmZXI5KHJ4OjpSZW5kZXJlcjkgKmNvbnN0IHJlbmRl
cmVyKSA6IG1SZW5kZXJlcihyZW5kZXJlcikKK3sKKyAgICBtVmVydGV4QnVmZmVyID0gTlVMTDsK
KyAgICBtQnVmZmVyU2l6ZSA9IDA7CisgICAgbUR5bmFtaWNVc2FnZSA9IGZhbHNlOworCisgICAg
aWYgKCFtVHJhbnNsYXRpb25zSW5pdGlhbGl6ZWQpCisgICAgeworICAgICAgICBpbml0aWFsaXpl
VHJhbnNsYXRpb25zKHJlbmRlcmVyLT5nZXRDYXBzRGVjbFR5cGVzKCkpOworICAgICAgICBtVHJh
bnNsYXRpb25zSW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIH0KK30KKworVmVydGV4QnVmZmVyOTo6
flZlcnRleEJ1ZmZlcjkoKQoreworICAgIGlmIChtVmVydGV4QnVmZmVyKQorICAgIHsKKyAgICAg
ICAgbVZlcnRleEJ1ZmZlci0+UmVsZWFzZSgpOworICAgICAgICBtVmVydGV4QnVmZmVyID0gTlVM
TDsKKyAgICB9Cit9CisKK2Jvb2wgVmVydGV4QnVmZmVyOTo6aW5pdGlhbGl6ZSh1bnNpZ25lZCBp
bnQgc2l6ZSwgYm9vbCBkeW5hbWljVXNhZ2UpCit7CisgICAgaWYgKG1WZXJ0ZXhCdWZmZXIpCisg
ICAgeworICAgICAgICBtVmVydGV4QnVmZmVyLT5SZWxlYXNlKCk7CisgICAgICAgIG1WZXJ0ZXhC
dWZmZXIgPSBOVUxMOworICAgIH0KKworICAgIHVwZGF0ZVNlcmlhbCgpOworCisgICAgaWYgKHNp
emUgPiAwKQorICAgIHsKKyAgICAgICAgRFdPUkQgZmxhZ3MgPSBEM0RVU0FHRV9XUklURU9OTFk7
CisgICAgICAgIGlmIChkeW5hbWljVXNhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsYWdz
IHw9IEQzRFVTQUdFX0RZTkFNSUM7CisgICAgICAgIH0KKworICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IG1SZW5kZXJlci0+Y3JlYXRlVmVydGV4QnVmZmVyKHNpemUsIGZsYWdzLCAmbVZlcnRleEJ1
ZmZlcik7CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAg
ICAgICBFUlIoIk91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBhIHZlcnRleCBidWZmZXIgb2Ygc2l6
ZSAlbHUuIiwgc2l6ZSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBtQnVmZmVyU2l6ZSA9IHNpemU7CisgICAgbUR5bmFtaWNVc2FnZSA9IGR5bmFt
aWNVc2FnZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworVmVydGV4QnVmZmVyOSAqVmVydGV4QnVm
ZmVyOTo6bWFrZVZlcnRleEJ1ZmZlcjkoVmVydGV4QnVmZmVyICp2ZXJ0ZXhCdWZmZXIpCit7Cisg
ICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoVmVydGV4QnVmZmVyOSosIHZlcnRleEJ1ZmZlcikp
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxWZXJ0ZXhCdWZmZXI5Kj4odmVydGV4QnVmZmVyKTsK
K30KKworYm9vbCBWZXJ0ZXhCdWZmZXI5OjpzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6
OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgaW5zdGFu
Y2VzLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworICAgIGlmIChtVmVydGV4QnVmZmVyKQorICAg
IHsKKyAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gYXR0cmliLm1Cb3VuZEJ1ZmZlci5nZXQo
KTsKKworICAgICAgICBpbnQgaW5wdXRTdHJpZGUgPSBhdHRyaWIuc3RyaWRlKCk7CisgICAgICAg
IGludCBlbGVtZW50U2l6ZSA9IGF0dHJpYi50eXBlU2l6ZSgpOworICAgICAgICBjb25zdCBGb3Jt
YXRDb252ZXJ0ZXIgJmNvbnZlcnRlciA9IGZvcm1hdENvbnZlcnRlcihhdHRyaWIpOworCisgICAg
ICAgIERXT1JEIGxvY2tGbGFncyA9IG1EeW5hbWljVXNhZ2UgPyBEM0RMT0NLX05PT1ZFUldSSVRF
IDogMDsKKworICAgICAgICB2b2lkICptYXBQdHIgPSBOVUxMOworCisgICAgICAgIHVuc2lnbmVk
IGludCBtYXBTaXplOworICAgICAgICBpZiAoIXNwYWNlUmVxdWlyZWQoYXR0cmliLCBjb3VudCwg
aW5zdGFuY2VzLCAmbWFwU2l6ZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVZlcnRleEJ1ZmZlci0+
TG9jayhvZmZzZXQsIG1hcFNpemUsICZtYXBQdHIsIGxvY2tGbGFncyk7CisKKyAgICAgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkxvY2sgZmFpbGVk
IHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IGNoYXIgKmlucHV0ID0gTlVMTDsKKyAgICAgICAg
aWYgKGJ1ZmZlcikKKyAgICAgICAgeworICAgICAgICAgICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFn
ZSA9IGJ1ZmZlci0+Z2V0U3RvcmFnZSgpOworICAgICAgICAgICAgaW5wdXQgPSBzdGF0aWNfY2Fz
dDxjb25zdCBjaGFyKj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSArIHN0YXRpY19jYXN0PGludD4oYXR0
cmliLm1PZmZzZXQpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg
ICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYXR0cmliLm1Qb2ludGVyKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBhdHRyaWIubURpdmlz
b3IgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaW5wdXQgKz0gaW5wdXRTdHJpZGUgKiBz
dGFydDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb252ZXJ0ZXIuaWRlbnRpdHkgJiYgaW5w
dXRTdHJpZGUgPT0gZWxlbWVudFNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbWNweSht
YXBQdHIsIGlucHV0LCBjb3VudCAqIGlucHV0U3RyaWRlKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnZlcnRlci5jb252ZXJ0QXJyYXkoaW5wdXQs
IGlucHV0U3RyaWRlLCBjb3VudCwgbWFwUHRyKTsKKyAgICAgICAgfQorCisgICAgICAgIG1WZXJ0
ZXhCdWZmZXItPlVubG9jaygpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBFUlIoIlZlcnRleCBidWZmZXIgbm90IGluaXRpYWxpemVkLiIp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFZlcnRleEJ1ZmZlcjk6
OnN0b3JlUmF3RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWdu
ZWQgaW50IG9mZnNldCkKK3sKKyAgICBpZiAobVZlcnRleEJ1ZmZlcikKKyAgICB7CisgICAgICAg
IERXT1JEIGxvY2tGbGFncyA9IG1EeW5hbWljVXNhZ2UgPyBEM0RMT0NLX05PT1ZFUldSSVRFIDog
MDsKKworICAgICAgICB2b2lkICptYXBQdHIgPSBOVUxMOworICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IG1WZXJ0ZXhCdWZmZXItPkxvY2sob2Zmc2V0LCBzaXplLCAmbWFwUHRyLCBsb2NrRmxhZ3Mp
OworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAg
RVJSKCJMb2NrIGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHkobWFwUHRyLCBkYXRh
LCBzaXplKTsKKworICAgICAgICBtVmVydGV4QnVmZmVyLT5VbmxvY2soKTsKKworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgRVJSKCJWZXJ0ZXgg
YnVmZmVyIG5vdCBpbml0aWFsaXplZC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworYm9vbCBWZXJ0ZXhCdWZmZXI5OjpnZXRTcGFjZVJlcXVpcmVkKGNvbnN0IGdsOjpWZXJ0
ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTcGFj
ZVJlcXVpcmVkKSBjb25zdAoreworICAgIHJldHVybiBzcGFjZVJlcXVpcmVkKGF0dHJpYiwgY291
bnQsIGluc3RhbmNlcywgb3V0U3BhY2VSZXF1aXJlZCk7Cit9CisKK2Jvb2wgVmVydGV4QnVmZmVy
OTo6cmVxdWlyZXNDb252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikg
Y29uc3QKK3sKKyAgICByZXR1cm4gIWZvcm1hdENvbnZlcnRlcihhdHRyaWIpLmlkZW50aXR5Owor
fQorCit1bnNpZ25lZCBpbnQgVmVydGV4QnVmZmVyOTo6Z2V0VmVydGV4U2l6ZShjb25zdCBnbDo6
VmVydGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0Cit7CisgICAgdW5zaWduZWQgaW50IHNwYWNl
UmVxdWlyZWQ7CisgICAgcmV0dXJuIGdldFNwYWNlUmVxdWlyZWQoYXR0cmliLCAxLCAwLCAmc3Bh
Y2VSZXF1aXJlZCkgPyBzcGFjZVJlcXVpcmVkIDogMDsKK30KKworRDNEREVDTFRZUEUgVmVydGV4
QnVmZmVyOTo6Z2V0RGVjbFR5cGUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBj
b25zdAoreworICAgIHJldHVybiBmb3JtYXRDb252ZXJ0ZXIoYXR0cmliKS5kM2REZWNsVHlwZTsK
K30KKwordW5zaWduZWQgaW50IFZlcnRleEJ1ZmZlcjk6OmdldEJ1ZmZlclNpemUoKSBjb25zdAor
eworICAgIHJldHVybiBtQnVmZmVyU2l6ZTsKK30KKworYm9vbCBWZXJ0ZXhCdWZmZXI5OjpzZXRC
dWZmZXJTaXplKHVuc2lnbmVkIGludCBzaXplKQoreworICAgIGlmIChzaXplID4gbUJ1ZmZlclNp
emUpCisgICAgeworICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZShzaXplLCBtRHluYW1pY1VzYWdl
KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
fQorCitib29sIFZlcnRleEJ1ZmZlcjk6OmRpc2NhcmQoKQoreworICAgIGlmIChtVmVydGV4QnVm
ZmVyKQorICAgIHsKKyAgICAgICAgdm9pZCAqZHVtbXk7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0
OworCisgICAgICAgIHJlc3VsdCA9IG1WZXJ0ZXhCdWZmZXItPkxvY2soMCwgMSwgJmR1bW15LCBE
M0RMT0NLX0RJU0NBUkQpOworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIEVSUigiRGlzY2FyZCBsb2NrIGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4eCIs
IHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAg
ICByZXN1bHQgPSBtVmVydGV4QnVmZmVyLT5VbmxvY2soKTsKKyAgICAgICAgaWYgKEZBSUxFRChy
ZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkRpc2NhcmQgdW5sb2NrIGZhaWxl
ZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgRVJSKCJWZXJ0ZXggYnVmZmVyIG5vdCBpbml0aWFsaXplZC4iKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworSURpcmVjdDNEVmVydGV4QnVmZmVyOSAqIFZl
cnRleEJ1ZmZlcjk6OmdldEJ1ZmZlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1WZXJ0ZXhCdWZm
ZXI7Cit9CisKKy8vIE1hcHBpbmcgZnJvbSBPcGVuR0wtRVMgdmVydGV4IGF0dHJpYiB0eXBlIHRv
IEQzRCBkZWNsIHR5cGU6CisvLworLy8gQllURSAgICAgICAgICAgICAgICAgU0hPUlQgKENhc3Qp
CisvLyBCWVRFLW5vcm0gICAgICAgICAgICBGTE9BVCAoTm9ybWFsaXplKSAoY2FuJ3QgYmUgZXhh
Y3RseSByZXByZXNlbnRlZCBhcyBTSE9SVC1ub3JtKQorLy8gVU5TSUdORURfQllURSAgICAgICAg
VUJZVEU0IChJZGVudGl0eSkgb3IgU0hPUlQgKENhc3QpCisvLyBVTlNJR05FRF9CWVRFLW5vcm0g
ICBVQllURTROIChJZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1hbGl6ZSkKKy8vIFNIT1JUICAgICAg
ICAgICAgICAgIFNIT1JUIChJZGVudGl0eSkKKy8vIFNIT1JULW5vcm0gICAgICAgICAgIFNIT1JU
LW5vcm0gKElkZW50aXR5KSBvciBGTE9BVCAoTm9ybWFsaXplKQorLy8gVU5TSUdORURfU0hPUlQg
ICAgICAgRkxPQVQgKENhc3QpCisvLyBVTlNJR05FRF9TSE9SVC1ub3JtICBVU0hPUlQtbm9ybSAo
SWRlbnRpdHkpIG9yIEZMT0FUIChOb3JtYWxpemUpCisvLyBGSVhFRCAobm90IGluIFdlYkdMKSBG
TE9BVCAoRml4ZWRUb0Zsb2F0KQorLy8gRkxPQVQgICAgICAgICAgICAgICAgRkxPQVQgKElkZW50
aXR5KQorCisvLyBHTFRvQ1R5cGUgbWFwcyBmcm9tIEdMIHR5cGUgKGFzIEdMZW51bSkgdG8gdGhl
IEMgdHlwZWRlZi4KK3RlbXBsYXRlIDxHTGVudW0gR0xUeXBlPiBzdHJ1Y3QgR0xUb0NUeXBlIHsg
fTsKKwordGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9CWVRFPiAgICAgICAgICAgeyB0
eXBlZGVmIEdMYnl0ZSB0eXBlOyAgICAgIH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBl
PEdMX1VOU0lHTkVEX0JZVEU+ICB7IHR5cGVkZWYgR0x1Ynl0ZSB0eXBlOyAgICAgfTsKK3RlbXBs
YXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfU0hPUlQ+ICAgICAgICAgIHsgdHlwZWRlZiBHTHNo
b3J0IHR5cGU7ICAgICB9OwordGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9VTlNJR05F
RF9TSE9SVD4geyB0eXBlZGVmIEdMdXNob3J0IHR5cGU7ICAgIH07Cit0ZW1wbGF0ZSA8PiBzdHJ1
Y3QgR0xUb0NUeXBlPEdMX0ZJWEVEPiAgICAgICAgICB7IHR5cGVkZWYgR0x1aW50IHR5cGU7ICAg
ICAgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfRkxPQVQ+ICAgICAgICAgIHsg
dHlwZWRlZiBHTGZsb2F0IHR5cGU7ICAgICB9OworCisvLyBUaGlzIGRpZmZlcnMgZnJvbSBEM0RE
RUNMVFlQRSBpbiB0aGF0IGl0IGlzIHVuc2l6ZWQuIChTaXplIGV4cGFuc2lvbiBpcyBhcHBsaWVk
IGxhc3QuKQorZW51bSBEM0RWZXJ0ZXhUeXBlCit7CisgICAgRDNEVlRfRkxPQVQsCisgICAgRDNE
VlRfU0hPUlQsCisgICAgRDNEVlRfU0hPUlRfTk9STSwKKyAgICBEM0RWVF9VQllURSwKKyAgICBE
M0RWVF9VQllURV9OT1JNLAorICAgIEQzRFZUX1VTSE9SVF9OT1JNCit9OworCisvLyBEM0RUb0NU
eXBlIG1hcHMgZnJvbSBEM0QgdmVydGV4IHR5cGUgKGFzIGVudW0gRDNEVmVydGV4VHlwZSkgdG8g
dGhlIGNvcnJlc3BvbmRpbmcgQyB0eXBlLgordGVtcGxhdGUgPHVuc2lnbmVkIGludCBEM0RUeXBl
PiBzdHJ1Y3QgRDNEVG9DVHlwZSB7IH07CisKK3RlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBl
PEQzRFZUX0ZMT0FUPiB7IHR5cGVkZWYgZmxvYXQgdHlwZTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVj
dCBEM0RUb0NUeXBlPEQzRFZUX1NIT1JUPiB7IHR5cGVkZWYgc2hvcnQgdHlwZTsgfTsKK3RlbXBs
YXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1NIT1JUX05PUk0+IHsgdHlwZWRlZiBzaG9y
dCB0eXBlOyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfVUJZVEU+IHsg
dHlwZWRlZiB1bnNpZ25lZCBjaGFyIHR5cGU7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9D
VHlwZTxEM0RWVF9VQllURV9OT1JNPiB7IHR5cGVkZWYgdW5zaWduZWQgY2hhciB0eXBlOyB9Owor
dGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfVVNIT1JUX05PUk0+IHsgdHlwZWRl
ZiB1bnNpZ25lZCBzaG9ydCB0eXBlOyB9OworCisvLyBFbmNvZGUgdGhlIHR5cGUvc2l6ZSBjb21i
aW5hdGlvbnMgdGhhdCBEM0QgcGVybWl0cy4gRm9yIGVhY2ggdHlwZS9zaXplIGl0IGV4cGFuZHMg
dG8gYSB3aWRlbmVyIHRoYXQgd2lsbCBwcm92aWRlIHRoZSBhcHByb3ByaWF0ZSBmaW5hbCBzaXpl
LgordGVtcGxhdGUgPHVuc2lnbmVkIGludCB0eXBlLCBpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVs
ZSB7IH07CisKK3RlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9GTE9B
VCwgc2l6ZT4gICAgICAgICAgOiBOb1dpZGVuPHNpemU+IHsgfTsKK3RlbXBsYXRlIDxpbnQgc2l6
ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9TSE9SVCwgc2l6ZT4gICAgICAgICAgOiBXaWRlblRv
RXZlbjxzaXplPiB7IH07Cit0ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNE
VlRfU0hPUlRfTk9STSwgc2l6ZT4gICAgIDogV2lkZW5Ub0V2ZW48c2l6ZT4geyB9OwordGVtcGxh
dGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1VCWVRFLCBzaXplPiAgICAgICAg
ICA6IFdpZGVuVG9Gb3VyPHNpemU+IHsgfTsKK3RlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdp
ZGVuUnVsZTxEM0RWVF9VQllURV9OT1JNLCBzaXplPiAgICAgOiBXaWRlblRvRm91cjxzaXplPiB7
IH07Cit0ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfVVNIT1JUX05P
Uk0sIHNpemU+ICAgIDogV2lkZW5Ub0V2ZW48c2l6ZT4geyB9OworCisvLyBWZXJ0ZXhUeXBlRmxh
Z3MgZW5jb2RlcyB0aGUgRDNEQ0FQUzk6OkRlY2xUeXBlIGZsYWcgYW5kIHZlcnRleCBkZWNsYXJh
dGlvbiBmbGFnIGZvciBlYWNoIEQzRCB2ZXJ0ZXggdHlwZSAmIHNpemUgY29tYmluYXRpb24uCit0
ZW1wbGF0ZSA8dW5zaWduZWQgaW50IGQzZHR5cGUsIGludCBzaXplPiBzdHJ1Y3QgVmVydGV4VHlw
ZUZsYWdzIHsgfTsKKwordGVtcGxhdGUgPHVuc2lnbmVkIGludCBfY2FwZmxhZywgdW5zaWduZWQg
aW50IF9kZWNsZmxhZz4KK3N0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXIKK3sKKyAgICBlbnVt
IHsgY2FwZmxhZyA9IF9jYXBmbGFnIH07CisgICAgZW51bSB7IGRlY2xmbGFnID0gX2RlY2xmbGFn
IH07Cit9OworCit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FU
LCAxPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9GTE9BVDE+IHsgfTsK
K3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfRkxPQVQsIDI+IDogVmVy
dGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FUMj4geyB9OwordGVtcGxhdGUg
PD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwgMz4gOiBWZXJ0ZXhUeXBlRmxh
Z3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQzPiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
VmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FULCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjww
LCBEM0RERUNMVFlQRV9GTE9BVDQ+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBl
RmxhZ3M8RDNEVlRfU0hPUlQsIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xU
WVBFX1NIT1JUMj4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RW
VF9TSE9SVCwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfU0hPUlQ0
PiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JUX05P
Uk0sIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19TSE9SVDJOLCBEM0RERUNM
VFlQRV9TSE9SVDJOPiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQz
RFZUX1NIT1JUX05PUk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19TSE9S
VDROLCBEM0RERUNMVFlQRV9TSE9SVDROPiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4
VHlwZUZsYWdzPEQzRFZUX1VCWVRFLCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENB
UFNfVUJZVEU0LCBEM0RERUNMVFlQRV9VQllURTQ+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBW
ZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVUJZVEVfTk9STSwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxw
ZXI8RDNERFRDQVBTX1VCWVRFNE4sIEQzRERFQ0xUWVBFX1VCWVRFNE4+IHsgfTsKK3RlbXBsYXRl
IDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVVNIT1JUX05PUk0sIDI+IDogVmVydGV4
VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VU0hPUlQyTiwgRDNEREVDTFRZUEVfVVNIT1JUMk4+
IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVVNIT1JUX05P
Uk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VU0hPUlQ0TiwgRDNEREVD
TFRZUEVfVVNIT1JUNE4+IHsgfTsKKworCisvLyBWZXJ0ZXhUeXBlTWFwcGluZyBtYXBzIEdMIHR5
cGUgJiBub3JtYWxpemVkIGZsYWcgdG8gcHJlZmVycmVkIGFuZCBmYWxsYmFjayBEM0QgdmVydGV4
IHR5cGVzIChhcyBEM0RWZXJ0ZXhUeXBlIGVudW1zKS4KK3RlbXBsYXRlIDxHTGVudW0gR0x0eXBl
LCBib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZyB7IH07CisKK3RlbXBs
YXRlIDxEM0RWZXJ0ZXhUeXBlIFByZWZlcnJlZCwgRDNEVmVydGV4VHlwZSBGYWxsYmFjayA9IFBy
ZWZlcnJlZD4KK3N0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2UKK3sKKyAgICBlbnVtIHsgcHJl
ZmVycmVkID0gUHJlZmVycmVkIH07CisgICAgZW51bSB7IGZhbGxiYWNrID0gRmFsbGJhY2sgfTsK
K307CisKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9CWVRFLCBmYWxz
ZT4gICAgICAgICAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9T
SE9SVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FzdAordGVtcGxhdGUgPD4gc3Ry
dWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX0JZVEUsIHRydWU+ICAgICAgICAgICAgICAgICAgICAg
ICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgICAg
ICAgICAgICAgICAvLyBOb3JtYWxpemUKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFw
cGluZzxHTF9VTlNJR05FRF9CWVRFLCBmYWxzZT4gICAgICAgICAgICAgICA6IFZlcnRleFR5cGVN
YXBwaW5nQmFzZTxEM0RWVF9VQllURSwgRDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgLy8gSWRl
bnRpdHksIENhc3QKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJ
R05FRF9CWVRFLCB0cnVlPiAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxE
M0RWVF9VQllURV9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAgICAgLy8gSWRlbnRpdHksIE5vcm1h
bGl6ZQordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1NIT1JULCBmYWxz
ZT4gICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1NI
T1JUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBJZGVudGl0eQordGVtcGxhdGUgPD4g
c3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1NIT1JULCB0cnVlPiAgICAgICAgICAgICAgICAg
ICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1NIT1JUX05PUk0sIEQzRFZUX0ZM
T0FUPiB7IH07ICAgICAvLyBDYXN0LCBOb3JtYWxpemUKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0
ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9TSE9SVCwgZmFsc2U+ICAgICAgICAgICAgICA6IFZl
cnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQ2FzdAordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1VOU0lH
TkVEX1NIT1JULCB0cnVlPiAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQz
RFZUX1VTSE9SVF9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAgICAvLyBDYXN0LCBOb3JtYWxpemUK
K3RlbXBsYXRlIDxib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9G
SVhFRCwgbm9ybWFsaXplZD4gICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4g
eyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gRml4ZWRUb0Zsb2F0Cit0ZW1wbGF0ZSA8Ym9v
bCBub3JtYWxpemVkPiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfRkxPQVQsIG5vcm1hbGl6
ZWQ+ICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAg
ICAgICAgICAgICAgIC8vIElkZW50aXR5CisKKworLy8gR2l2ZW4gYSBHTCB0eXBlICYgbm9ybSBm
bGFnIGFuZCBhIEQzRCB0eXBlLCBDb252ZXJzaW9uUnVsZSBwcm92aWRlcyB0aGUgdHlwZSBjb252
ZXJzaW9uIHJ1bGUgKENhc3QsIE5vcm1hbGl6ZSwgSWRlbnRpdHksIEZpeGVkVG9GbG9hdCkuCisv
LyBUaGUgY29udmVyc2lvbiBydWxlcyB0aGVtc2VsdmVzIGFyZSBkZWZpbmVkIGluIHZlcnRleGNv
bnZlcnNpb24uaC4KKworLy8gQWxtb3N0IGFsbCBjYXNlcyBhcmUgY292ZXJlZCBieSBDYXN0IChp
bmNsdWRpbmcgdGhvc2UgdGhhdCBhcmUgYWN0dWFsbHkgSWRlbnRpdHkgc2luY2UgQ2FzdDxULFQ+
IGtub3dzIGl0J3MgYW4gaWRlbnRpdHkgbWFwcGluZykuCit0ZW1wbGF0ZSA8R0xlbnVtIGZyb21U
eXBlLCBib29sIG5vcm1hbGl6ZWQsIHVuc2lnbmVkIGludCB0b1R5cGU+CitzdHJ1Y3QgQ29udmVy
c2lvblJ1bGUgOiBDYXN0PHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5cGUsIHR5cGVu
YW1lIEQzRFRvQ1R5cGU8dG9UeXBlPjo6dHlwZT4geyB9OworCisvLyBBbGwgY29udmVyc2lvbnMg
ZnJvbSBub3JtYWxpemVkIHR5cGVzIHRvIGZsb2F0IHVzZSB0aGUgTm9ybWFsaXplIG9wZXJhdG9y
LgordGVtcGxhdGUgPEdMZW51bSBmcm9tVHlwZT4gc3RydWN0IENvbnZlcnNpb25SdWxlPGZyb21U
eXBlLCB0cnVlLCBEM0RWVF9GTE9BVD4gOiBOb3JtYWxpemU8dHlwZW5hbWUgR0xUb0NUeXBlPGZy
b21UeXBlPjo6dHlwZT4geyB9OworCisvLyBVc2UgYSBmdWxsIHNwZWNpYWxpemF0aW9uIGZvciB0
aGlzIHNvIHRoYXQgaXQgcHJlZmVyZW50aWFsbHkgbWF0Y2hlcyBhaGVhZCBvZiB0aGUgZ2VuZXJp
YyBub3JtYWxpemUtdG8tZmxvYXQgcnVsZXMuCit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lv
blJ1bGU8R0xfRklYRUQsIHRydWUsIEQzRFZUX0ZMT0FUPiAgOiBGaXhlZFRvRmxvYXQ8R0xpbnQs
IDE2PiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklYRUQsIGZh
bHNlLCBEM0RWVF9GTE9BVD4gOiBGaXhlZFRvRmxvYXQ8R0xpbnQsIDE2PiB7IH07CisKKy8vIEEg
Mi1zdGFnZSBjb25zdHJ1Y3Rpb24gaXMgdXNlZCBmb3IgRGVmYXVsdFZlcnRleFZhbHVlcyBiZWNh
dXNlIGZsb2F0IG11c3QgdXNlIFNpbXBsZURlZmF1bHRWYWx1ZXMgKGkuZS4gMC8xKQorLy8gd2hl
dGhlciBpdCBpcyBub3JtYWxpemVkIG9yIG5vdC4KK3RlbXBsYXRlIDxjbGFzcyBULCBib29sIG5v
cm1hbGl6ZWQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyIHsgfTsKKwordGVtcGxh
dGUgPGNsYXNzIFQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyPFQsIHRydWU+ICA6
IE5vcm1hbGl6ZWREZWZhdWx0VmFsdWVzPFQ+IHsgfTsKK3RlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1
Y3QgRGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMjxULCBmYWxzZT4gOiBTaW1wbGVEZWZhdWx0VmFs
dWVzPFQ+IHsgfTsKKworLy8gV29yayBvdXQgdGhlIGRlZmF1bHQgdmFsdWUgcnVsZSBmb3IgYSBE
M0QgdHlwZSAoZXhwcmVzc2VkIGFzIHRoZSBDIHR5cGUpIGFuZAordGVtcGxhdGUgPGNsYXNzIFQs
IGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXMgOiBEZWZhdWx0VmVy
dGV4VmFsdWVzU3RhZ2UyPFQsIG5vcm1hbGl6ZWQ+IHsgfTsKK3RlbXBsYXRlIDxib29sIG5vcm1h
bGl6ZWQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzPGZsb2F0LCBub3JtYWxpemVkPiA6IFNp
bXBsZURlZmF1bHRWYWx1ZXM8ZmxvYXQ+IHsgfTsKKworLy8gUG9saWN5IHJ1bGVzIGZvciB1c2Ug
d2l0aCBDb252ZXJ0ZXIsIHRvIGNob29zZSB3aGV0aGVyIHRvIHVzZSB0aGUgcHJlZmVycmVkIG9y
IGZhbGxiYWNrIGNvbnZlcnNpb24uCisvLyBUaGUgZmFsbGJhY2sgY29udmVyc2lvbiBwcm9kdWNl
cyBhbiBvdXRwdXQgdGhhdCBhbGwgRDNEOSBkZXZpY2VzIG11c3Qgc3VwcG9ydC4KK3RlbXBsYXRl
IDxjbGFzcyBUPiBzdHJ1Y3QgVXNlUHJlZmVycmVkIHsgZW51bSB7IHR5cGUgPSBUOjpwcmVmZXJy
ZWQgfTsgfTsKK3RlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgVXNlRmFsbGJhY2sgeyBlbnVtIHsg
dHlwZSA9IFQ6OmZhbGxiYWNrIH07IH07CisKKy8vIENvbnZlcnRlciB0aWVzIGl0IGFsbCB0b2dl
dGhlci4gR2l2ZW4gYW4gT3BlbkdMIHR5cGUvbm9ybS9zaXplIGFuZCBjaG9pY2Ugb2YgcHJlZmVy
cmVkL2ZhbGxiYWNrIGNvbnZlcnNpb24sCisvLyBpdCBwcm92aWRlcyBhbGwgdGhlIG1lbWJlcnMg
b2YgdGhlIGFwcHJvcHJpYXRlIFZlcnRleERhdGFDb252ZXJ0ZXIsIHRoZSBEM0RDQVBTOTo6RGVj
bFR5cGVzIGZsYWcgaW4gY2FwIGZsYWcKKy8vIGFuZCB0aGUgRDNEREVDTFRZUEUgbWVtYmVyIG5l
ZWRlZCBmb3IgdGhlIHZlcnRleCBkZWNsYXJhdGlvbiBpbiBkZWNsZmxhZy4KK3RlbXBsYXRlIDxH
TGVudW0gZnJvbVR5cGUsIGJvb2wgbm9ybWFsaXplZCwgaW50IHNpemUsIHRlbXBsYXRlIDxjbGFz
cyBUPiBjbGFzcyBQcmVmZXJlbmNlUnVsZT4KK3N0cnVjdCBDb252ZXJ0ZXIKKyAgICA6IFZlcnRl
eERhdGFDb252ZXJ0ZXI8dHlwZW5hbWUgR0xUb0NUeXBlPGZyb21UeXBlPjo6dHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2lkZW5SdWxlPFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBl
TWFwcGluZzxmcm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6dHlwZSwgc2l6ZT4sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIENvbnZlcnNpb25SdWxlPGZyb21UeXBlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQcmVmZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8
ZnJvbVR5cGUsIG5vcm1hbGl6ZWQ+ID46OnR5cGU+LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBEZWZhdWx0VmVydGV4VmFsdWVzPHR5cGVuYW1lIEQzRFRvQ1R5cGU8UHJlZmVyZW5jZVJ1bGU8
IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBlPjo6dHlwZSwg
bm9ybWFsaXplZCA+ID4KK3sKK3ByaXZhdGU6CisgICAgZW51bSB7IGQzZHR5cGUgPSBQcmVmZXJl
bmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6ZWQ+ID46OnR5cGUg
fTsKKyAgICBlbnVtIHsgZDNkc2l6ZSA9IFdpZGVuUnVsZTxkM2R0eXBlLCBzaXplPjo6ZmluYWxX
aWR0aCB9OworCitwdWJsaWM6CisgICAgZW51bSB7IGNhcGZsYWcgPSBWZXJ0ZXhUeXBlRmxhZ3M8
ZDNkdHlwZSwgZDNkc2l6ZT46OmNhcGZsYWcgfTsKKyAgICBlbnVtIHsgZGVjbGZsYWcgPSBWZXJ0
ZXhUeXBlRmxhZ3M8ZDNkdHlwZSwgZDNkc2l6ZT46OmRlY2xmbGFnIH07Cit9OworCisvLyBJbml0
aWFsaXplIGEgVHJhbnNsYXRpb25JbmZvCisjZGVmaW5lIFRSQU5TTEFUSU9OKHR5cGUsIG5vcm0s
IHNpemUsIHByZWZlcnJlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3Jt
LCBzaXplLCBwcmVmZXJyZWQ+OjppZGVudGl0eSwgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQ+OjpmaW5hbFNp
emUsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIENvbnZlcnRlcjx0eXBlLCBu
b3JtLCBzaXplLCBwcmVmZXJyZWQ+Ojpjb252ZXJ0QXJyYXksICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgIHN0YXRpY19jYXN0PEQzRERFQ0xUWVBFPihDb252ZXJ0ZXI8dHlwZSwgbm9y
bSwgc2l6ZSwgcHJlZmVycmVkPjo6ZGVjbGZsYWcpICBcCisgICAgfQorCisjZGVmaW5lIFRSQU5T
TEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBub3JtLCBzaXplKSAgICBcCisgICAgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBVc2VQcmVmZXJyZWQ+OjpjYXBmbGFn
LCBcCisgICAgICAgIFRSQU5TTEFUSU9OKHR5cGUsIG5vcm0sIHNpemUsIFVzZVByZWZlcnJlZCks
ICAgICAgICBcCisgICAgICAgIFRSQU5TTEFUSU9OKHR5cGUsIG5vcm0sIHNpemUsIFVzZUZhbGxi
YWNrKSAgICAgICAgICBcCisgICAgfQorCisjZGVmaW5lIFRSQU5TTEFUSU9OU19GT1JfVFlQRSh0
eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgVFJBTlNM
QVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAxKSwgVFJBTlNMQVRJT05fRk9S
X1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAyKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9S
TV9TSVpFKHR5cGUsIGZhbHNlLCAzKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5
cGUsIGZhbHNlLCA0KSB9LCBcCisgICAgICAgIHsgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9T
SVpFKHR5cGUsIHRydWUsIDEpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwg
dHJ1ZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCB0cnVlLCAzKSwg
VFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRydWUsIDQpIH0sICAgICBcCisg
ICAgfQorCisjZGVmaW5lIFRSQU5TTEFUSU9OU19GT1JfVFlQRV9OT19OT1JNKHR5cGUpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9S
TV9TSVpFKHR5cGUsIGZhbHNlLCAxKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5
cGUsIGZhbHNlLCAyKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNl
LCAzKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCA0KSB9LCBc
CisgICAgICAgIHsgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAx
KSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAyKSwgVFJBTlNM
QVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAzKSwgVFJBTlNMQVRJT05fRk9S
X1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCA0KSB9LCBcCisgICAgfQorCitjb25zdCBWZXJ0
ZXhCdWZmZXI5OjpUcmFuc2xhdGlvbkRlc2NyaXB0aW9uIFZlcnRleEJ1ZmZlcjk6Om1Qb3NzaWJs
ZVRyYW5zbGF0aW9uc1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFU11bMl1bNF0gPSAvLyBbR0wg
dHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXplZF1bc2l6ZS0xXQor
eworICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9CWVRFKSwKKyAgICBUUkFOU0xBVElPTlNf
Rk9SX1RZUEUoR0xfVU5TSUdORURfQllURSksCisgICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKEdM
X1NIT1JUKSwKKyAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xfVU5TSUdORURfU0hPUlQpLAor
ICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRV9OT19OT1JNKEdMX0ZJWEVEKSwKKyAgICBUUkFOU0xB
VElPTlNfRk9SX1RZUEVfTk9fTk9STShHTF9GTE9BVCkKK307CisKK3ZvaWQgVmVydGV4QnVmZmVy
OTo6aW5pdGlhbGl6ZVRyYW5zbGF0aW9ucyhEV09SRCBkZWNsVHlwZXMpCit7CisgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFUzsgaSsrKQor
ICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCAyOyBqKyspCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGsgPSAwOyBrIDwgNDsgaysrKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChtUG9zc2libGVUcmFuc2xhdGlvbnNb
aV1bal1ba10uY2Fwc0ZsYWcgPT0gMCB8fCAoZGVjbFR5cGVzICYgbVBvc3NpYmxlVHJhbnNsYXRp
b25zW2ldW2pdW2tdLmNhcHNGbGFnKSAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgbUZvcm1hdENvbnZlcnRlcnNbaV1bal1ba10gPSBtUG9zc2libGVUcmFuc2xh
dGlvbnNbaV1bal1ba10ucHJlZmVycmVkQ29udmVyc2lvbjsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgbUZvcm1hdENvbnZlcnRlcnNbaV1bal1ba10gPSBtUG9zc2libGVUcmFuc2xhdGlvbnNbaV1b
al1ba10uZmFsbGJhY2tDb252ZXJzaW9uOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KK30KKwordW5zaWduZWQgaW50IFZlcnRleEJ1ZmZlcjk6OnR5
cGVJbmRleChHTGVudW0gdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAg
Y2FzZSBHTF9CWVRFOiByZXR1cm4gMDsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURTogcmV0
dXJuIDE7CisgICAgICBjYXNlIEdMX1NIT1JUOiByZXR1cm4gMjsKKyAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlQ6IHJldHVybiAzOworICAgICAgY2FzZSBHTF9GSVhFRDogcmV0dXJuIDQ7Cisg
ICAgICBjYXNlIEdMX0ZMT0FUOiByZXR1cm4gNTsKKworICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsgcmV0dXJuIDU7CisgICAgfQorfQorCitjb25zdCBWZXJ0ZXhCdWZmZXI5OjpGb3JtYXRD
b252ZXJ0ZXIgJlZlcnRleEJ1ZmZlcjk6OmZvcm1hdENvbnZlcnRlcihjb25zdCBnbDo6VmVydGV4
QXR0cmlidXRlICZhdHRyaWJ1dGUpCit7CisgICAgcmV0dXJuIG1Gb3JtYXRDb252ZXJ0ZXJzW3R5
cGVJbmRleChhdHRyaWJ1dGUubVR5cGUpXVthdHRyaWJ1dGUubU5vcm1hbGl6ZWRdW2F0dHJpYnV0
ZS5tU2l6ZSAtIDFdOworfQorCitib29sIFZlcnRleEJ1ZmZlcjk6OnNwYWNlUmVxdWlyZWQoY29u
c3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBzdGQ6OnNpemVfdCBjb3VudCwgR0xzaXpl
aSBpbnN0YW5jZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
aW50ICpvdXRTcGFjZVJlcXVpcmVkKQoreworICAgIHVuc2lnbmVkIGludCBlbGVtZW50U2l6ZSA9
IGZvcm1hdENvbnZlcnRlcihhdHRyaWIpLm91dHB1dEVsZW1lbnRTaXplOworCisgICAgaWYgKGF0
dHJpYi5tQXJyYXlFbmFibGVkKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IGVsZW1lbnRD
b3VudCA9IDA7CisgICAgICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBhdHRyaWIubURpdmlzb3Ig
PT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZWxlbWVudENvdW50ID0gY291bnQ7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc3RhdGljX2Nh
c3Q8dW5zaWduZWQgaW50PihpbnN0YW5jZXMpIDwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZCBpbnQ+OjptYXgoKSAtIChhdHRyaWIubURpdmlzb3IgLSAxKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAvLyBSb3VuZCB1cAorICAgICAgICAgICAgICAgIGVsZW1lbnRDb3VudCA9
IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGluc3RhbmNlcykgKyAoYXR0cmliLm1EaXZpc29y
IC0gMSkpIC8gYXR0cmliLm1EaXZpc29yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVsZW1lbnRDb3VudCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGludD4oaW5zdGFuY2VzKSAvIGF0dHJpYi5tRGl2aXNvcjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChlbGVtZW50U2l6ZSA8PSBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpIC8gZWxlbWVudENvdW50KQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAob3V0U3BhY2VSZXF1aXJlZCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAqb3V0U3BhY2VSZXF1aXJlZCA9IGVsZW1lbnRTaXplICogZWxlbWVudENvdW50
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGVs
ZW1lbnRTaXplID0gNDsKKyAgICAgICAgaWYgKG91dFNwYWNlUmVxdWlyZWQpCisgICAgICAgIHsK
KyAgICAgICAgICAgICpvdXRTcGFjZVJlcXVpcmVkID0gZWxlbWVudFNpemUgKiA0OworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleEJ1
ZmZlcjkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9WZXJ0ZXhCdWZmZXI5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmY4ODExN2JkYTI1MGVjOTExNzA2N2I4
YTY4YTg0NGQ2NDBlMzBiMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmgKQEAgLTAsMCAr
MSw5MSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVmVydGV4QnVmZmVyOS5oOiBEZWZpbmVz
IHRoZSBEM0Q5IFZlcnRleEJ1ZmZlciBpbXBsZW1lbnRhdGlvbi4KKworI2lmbmRlZiBMSUJHTEVT
VjJfUkVOREVSRVJfVkVSVEVYQlVGRkVSOV9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJf
VkVSVEVYQlVGRkVSOV9IXworCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1
ZmZlci5oIgorCituYW1lc3BhY2UgcngKK3sKK2NsYXNzIFJlbmRlcmVyOTsKKworY2xhc3MgVmVy
dGV4QnVmZmVyOSA6IHB1YmxpYyBWZXJ0ZXhCdWZmZXIKK3sKKyAgcHVibGljOgorICAgIGV4cGxp
Y2l0IFZlcnRleEJ1ZmZlcjkocng6OlJlbmRlcmVyOSAqY29uc3QgcmVuZGVyZXIpOworICAgIHZp
cnR1YWwgflZlcnRleEJ1ZmZlcjkoKTsKKworICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplKHVu
c2lnbmVkIGludCBzaXplLCBib29sIGR5bmFtaWNVc2FnZSk7CisKKyAgICBzdGF0aWMgVmVydGV4
QnVmZmVyOSAqbWFrZVZlcnRleEJ1ZmZlcjkoVmVydGV4QnVmZmVyICp2ZXJ0ZXhCdWZmZXIpOwor
CisgICAgdmlydHVhbCBib29sIHN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4
QXR0cmlidXRlICZhdHRyaWIsIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGlu
c3RhbmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCBvZmZzZXQpOworICAgIHZpcnR1YWwgYm9vbCBzdG9yZVJhd0RhdGEoY29uc3Qgdm9pZCog
ZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBvZmZzZXQpOworCisgICAgdmly
dHVhbCBib29sIGdldFNwYWNlUmVxdWlyZWQoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0
cmliLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgdW5zaWduZWQgaW50ICpvdXRT
cGFjZVJlcXVpcmVkKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0NvbnZlcnNp
b24oY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdDsKKworICAgIHVuc2ln
bmVkIGludCBnZXRWZXJ0ZXhTaXplKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikg
Y29uc3Q7CisgICAgRDNEREVDTFRZUEUgZ2V0RGVjbFR5cGUoY29uc3QgZ2w6OlZlcnRleEF0dHJp
YnV0ZSAmYXR0cmliKSBjb25zdDsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldEJ1ZmZl
clNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0QnVmZmVyU2l6ZSh1bnNpZ25lZCBp
bnQgc2l6ZSk7CisgICAgdmlydHVhbCBib29sIGRpc2NhcmQoKTsKKworICAgIElEaXJlY3QzRFZl
cnRleEJ1ZmZlcjkgKmdldEJ1ZmZlcigpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKFZlcnRleEJ1ZmZlcjkpOworCisgICAgcng6OlJlbmRlcmVyOSAq
Y29uc3QgbVJlbmRlcmVyOworCisgICAgSURpcmVjdDNEVmVydGV4QnVmZmVyOSAqbVZlcnRleEJ1
ZmZlcjsKKyAgICB1bnNpZ25lZCBpbnQgbUJ1ZmZlclNpemU7CisgICAgYm9vbCBtRHluYW1pY1Vz
YWdlOworCisgICAgLy8gQXR0cmlidXRlIGZvcm1hdCBjb252ZXJzaW9uCisgICAgZW51bSB7IE5V
TV9HTF9WRVJURVhfQVRUUklCX1RZUEVTID0gNiB9OworCisgICAgc3RydWN0IEZvcm1hdENvbnZl
cnRlcgorICAgIHsKKyAgICAgICAgYm9vbCBpZGVudGl0eTsKKyAgICAgICAgc3RkOjpzaXplX3Qg
b3V0cHV0RWxlbWVudFNpemU7CisgICAgICAgIHZvaWQgKCpjb252ZXJ0QXJyYXkpKGNvbnN0IHZv
aWQgKmluLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90IG4sIHZvaWQgKm91dCk7Cisg
ICAgICAgIEQzRERFQ0xUWVBFIGQzZERlY2xUeXBlOworICAgIH07CisKKyAgICBzdGF0aWMgYm9v
bCBtVHJhbnNsYXRpb25zSW5pdGlhbGl6ZWQ7CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVRy
YW5zbGF0aW9ucyhEV09SRCBkZWNsVHlwZXMpOworCisgICAgLy8gW0dMIHR5cGVzIGFzIGVudW1l
cmF0ZWQgYnkgdHlwZUluZGV4KCldW25vcm1hbGl6ZWRdW3NpemUgLSAxXQorICAgIHN0YXRpYyBG
b3JtYXRDb252ZXJ0ZXIgbUZvcm1hdENvbnZlcnRlcnNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQ
RVNdWzJdWzRdOworCisgICAgc3RydWN0IFRyYW5zbGF0aW9uRGVzY3JpcHRpb24KKyAgICB7Cisg
ICAgICAgIERXT1JEIGNhcHNGbGFnOworICAgICAgICBGb3JtYXRDb252ZXJ0ZXIgcHJlZmVycmVk
Q29udmVyc2lvbjsKKyAgICAgICAgRm9ybWF0Q29udmVydGVyIGZhbGxiYWNrQ29udmVyc2lvbjsK
KyAgICB9OworCisgICAgLy8gVGhpcyB0YWJsZSBpcyB1c2VkIHRvIGdlbmVyYXRlIG1Gb3JtYXRD
b252ZXJ0ZXJzLgorICAgIC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRleCgp
XVtub3JtYWxpemVkXVtzaXplIC0gMV0KKyAgICBzdGF0aWMgY29uc3QgVHJhbnNsYXRpb25EZXNj
cmlwdGlvbiBtUG9zc2libGVUcmFuc2xhdGlvbnNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVNd
WzJdWzRdOworCisgICAgc3RhdGljIHVuc2lnbmVkIGludCB0eXBlSW5kZXgoR0xlbnVtIHR5cGUp
OworICAgIHN0YXRpYyBjb25zdCBGb3JtYXRDb252ZXJ0ZXIgJmZvcm1hdENvbnZlcnRlcihjb25z
dCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpOworCisgICAgc3RhdGljIGJvb2wgc3Bh
Y2VSZXF1aXJlZChjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIHN0ZDo6c2l6ZV90
IGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGludCAqb3V0U3BhY2VSZXF1aXJlZCk7Cit9OworCit9CisKKyNlbmRpZiAvLyBM
SUJHTEVTVjJfUkVOREVSRVJfVkVSVEVYQlVGRkVSOV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleERlY2xhcmF0
aW9uQ2FjaGUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L1ZlcnRleERlY2xhcmF0aW9uQ2FjaGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU1YzhhMTQy
MzIxMWY4MzU4NjkzZjlmNjk4MjQ2MzgxYmQyNDhlNmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4RGVj
bGFyYXRpb25DYWNoZS5jcHAKQEAgLTAsMCArMSwyMTcgQEAKKyNpbmNsdWRlICJwcmVjb21waWxl
ZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFZlcnRleERlY2xhcmF0aW9uQ2FjaGUuY3BwOiBJbXBs
ZW1lbnRzIGEgaGVscGVyIGNsYXNzIHRvIGNvbnN0cnVjdCBhbmQgY2FjaGUgdmVydGV4IGRlY2xh
cmF0aW9ucy4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNk
OS9WZXJ0ZXhCdWZmZXI5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVy
dGV4RGVjbGFyYXRpb25DYWNoZS5oIgorCituYW1lc3BhY2UgcngKK3sKKworVmVydGV4RGVjbGFy
YXRpb25DYWNoZTo6VmVydGV4RGVjbGFyYXRpb25DYWNoZSgpIDogbU1heExydSgwKQoreworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkrKykK
KyAgICB7CisgICAgICAgIG1WZXJ0ZXhEZWNsQ2FjaGVbaV0udmVydGV4RGVjbGFyYXRpb24gPSBO
VUxMOworICAgICAgICBtVmVydGV4RGVjbENhY2hlW2ldLmxydUNvdW50ID0gMDsKKyAgICB9CisK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKKyAg
ICB7CisgICAgICAgIG1BcHBsaWVkVkJzW2ldLnNlcmlhbCA9IDA7CisgICAgfQorCisgICAgbUxh
c3RTZXRWRGVjbCA9IE5VTEw7CisgICAgbUluc3RhbmNpbmdFbmFibGVkID0gdHJ1ZTsKK30KKwor
VmVydGV4RGVjbGFyYXRpb25DYWNoZTo6flZlcnRleERlY2xhcmF0aW9uQ2FjaGUoKQoreworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkrKykK
KyAgICB7CisgICAgICAgIGlmIChtVmVydGV4RGVjbENhY2hlW2ldLnZlcnRleERlY2xhcmF0aW9u
KQorICAgICAgICB7CisgICAgICAgICAgICBtVmVydGV4RGVjbENhY2hlW2ldLnZlcnRleERlY2xh
cmF0aW9uLT5SZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0dMZW51bSBWZXJ0ZXhE
ZWNsYXJhdGlvbkNhY2hlOjphcHBseURlY2xhcmF0aW9uKElEaXJlY3QzRERldmljZTkgKmRldmlj
ZSwgVHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW10sIGdsOjpQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5LCBHTHNpemVpIGluc3RhbmNlcywgR0xzaXplaSAqcmVwZWF0RHJhdykKK3sK
KyAgICAqcmVwZWF0RHJhdyA9IDE7CisKKyAgICBpbnQgaW5kZXhlZEF0dHJpYnV0ZSA9IGdsOjpN
QVhfVkVSVEVYX0FUVFJJQlM7CisgICAgaW50IGluc3RhbmNlZEF0dHJpYnV0ZSA9IGdsOjpNQVhf
VkVSVEVYX0FUVFJJQlM7CisKKyAgICBpZiAoaW5zdGFuY2VzID4gMCkKKyAgICB7CisgICAgICAg
IC8vIEZpbmQgYW4gaW5kZXhlZCBhdHRyaWJ1dGUgdG8gYmUgbWFwcGVkIHRvIEQzRCBzdHJlYW0g
MAorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGkr
KykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uYWN0aXZlKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChpbmRleGVkQXR0cmlidXRlID09IGdsOjpN
QVhfVkVSVEVYX0FUVFJJQlMgJiYgYXR0cmlidXRlc1tpXS5kaXZpc29yID09IDApCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbmRleGVkQXR0cmlidXRlID0gaTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5zdGFuY2VkQXR0cmli
dXRlID09IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMgJiYgYXR0cmlidXRlc1tpXS5kaXZpc29yICE9
IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZWRBdHRy
aWJ1dGUgPSBpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaW5kZXhl
ZEF0dHJpYnV0ZSAhPSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTICYmIGluc3RhbmNlZEF0dHJpYnV0
ZSAhPSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICAgICAgICAgICAgICBicmVhazsg
ICAvLyBGb3VuZCBib3RoIGFuIGluZGV4ZWQgYW5kIGluc3RhbmNlZCBhdHRyaWJ1dGUKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbmRleGVkQXR0cmlidXRlID09IGds
OjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHTF9J
TlZBTElEX09QRVJBVElPTjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEQzRFZFUlRFWEVMRU1F
TlQ5IGVsZW1lbnRzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlMgKyAxXTsKKyAgICBEM0RWRVJURVhF
TEVNRU5UOSAqZWxlbWVudCA9ICZlbGVtZW50c1swXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGF0dHJp
YnV0ZXNbaV0uYWN0aXZlKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBEaXJlY3RseSBiaW5k
aW5nIHRoZSBzdG9yYWdlIGJ1ZmZlciBpcyBub3Qgc3VwcG9ydGVkIGZvciBkM2Q5CisgICAgICAg
ICAgICBBU1NFUlQoYXR0cmlidXRlc1tpXS5zdG9yYWdlID09IE5VTEwpOworCisgICAgICAgICAg
ICBpbnQgc3RyZWFtID0gaTsKKworICAgICAgICAgICAgaWYgKGluc3RhbmNlcyA+IDApCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gRHVlIHRvIGEgYnVnIG9uIEFUSSBjYXJkcyB3
ZSBjYW4ndCBlbmFibGUgaW5zdGFuY2luZyB3aGVuIG5vbmUgb2YgdGhlIGF0dHJpYnV0ZXMgYXJl
IGluc3RhbmNlZC4KKyAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2VkQXR0cmlidXRlID09IGds
OjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAqcmVwZWF0RHJhdyA9IGluc3RhbmNlczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGkgPT0gaW5kZXhlZEF0dHJpYnV0ZSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgc3RyZWFtID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChpID09IDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9IGluZGV4ZWRBdHRyaWJ1dGU7CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBVSU5UIGZyZXF1ZW5jeSA9IDE7
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRl
c1tpXS5kaXZpc29yID09IDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZyZXF1ZW5jeSA9IEQzRFNUUkVBTVNPVVJDRV9JTkRFWEVEREFUQSB8IGluc3Rh
bmNlczsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyZXF1ZW5jeSA9
IEQzRFNUUkVBTVNPVVJDRV9JTlNUQU5DRURBVEEgfCBhdHRyaWJ1dGVzW2ldLmRpdmlzb3I7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShzdHJlYW0sIGZyZXF1ZW5jeSk7Cisg
ICAgICAgICAgICAgICAgICAgIG1JbnN0YW5jaW5nRW5hYmxlZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBWZXJ0ZXhCdWZmZXI5ICp2ZXJ0
ZXhCdWZmZXIgPSBWZXJ0ZXhCdWZmZXI5OjptYWtlVmVydGV4QnVmZmVyOShhdHRyaWJ1dGVzW2ld
LnZlcnRleEJ1ZmZlcik7CisKKyAgICAgICAgICAgIGlmIChtQXBwbGllZFZCc1tzdHJlYW1dLnNl
cmlhbCAhPSBhdHRyaWJ1dGVzW2ldLnNlcmlhbCB8fAorICAgICAgICAgICAgICAgIG1BcHBsaWVk
VkJzW3N0cmVhbV0uc3RyaWRlICE9IGF0dHJpYnV0ZXNbaV0uc3RyaWRlIHx8CisgICAgICAgICAg
ICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5vZmZzZXQgIT0gYXR0cmlidXRlc1tpXS5vZmZzZXQp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2Uo
c3RyZWFtLCB2ZXJ0ZXhCdWZmZXItPmdldEJ1ZmZlcigpLCBhdHRyaWJ1dGVzW2ldLm9mZnNldCwg
YXR0cmlidXRlc1tpXS5zdHJpZGUpOworICAgICAgICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVh
bV0uc2VyaWFsID0gYXR0cmlidXRlc1tpXS5zZXJpYWw7CisgICAgICAgICAgICAgICAgbUFwcGxp
ZWRWQnNbc3RyZWFtXS5zdHJpZGUgPSBhdHRyaWJ1dGVzW2ldLnN0cmlkZTsKKyAgICAgICAgICAg
ICAgICBtQXBwbGllZFZCc1tzdHJlYW1dLm9mZnNldCA9IGF0dHJpYnV0ZXNbaV0ub2Zmc2V0Owor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbGVtZW50LT5TdHJlYW0gPSBzdHJlYW07Cisg
ICAgICAgICAgICBlbGVtZW50LT5PZmZzZXQgPSAwOworICAgICAgICAgICAgZWxlbWVudC0+VHlw
ZSA9IGF0dHJpYnV0ZXNbaV0uYXR0cmlidXRlLT5tQXJyYXlFbmFibGVkID8gdmVydGV4QnVmZmVy
LT5nZXREZWNsVHlwZSgqYXR0cmlidXRlc1tpXS5hdHRyaWJ1dGUpIDogRDNEREVDTFRZUEVfRkxP
QVQ0OworICAgICAgICAgICAgZWxlbWVudC0+TWV0aG9kID0gRDNEREVDTE1FVEhPRF9ERUZBVUxU
OworICAgICAgICAgICAgZWxlbWVudC0+VXNhZ2UgPSBEM0RERUNMVVNBR0VfVEVYQ09PUkQ7Cisg
ICAgICAgICAgICBlbGVtZW50LT5Vc2FnZUluZGV4ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2VtYW50
aWNJbmRleChpKTsKKyAgICAgICAgICAgIGVsZW1lbnQrKzsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBpbnN0YW5jZWRBdHRyaWJ1dGUgPT0gZ2w6Ok1BWF9W
RVJURVhfQVRUUklCUykKKyAgICB7CisgICAgICAgIGlmIChtSW5zdGFuY2luZ0VuYWJsZWQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9WRVJURVhf
QVRUUklCUzsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRldmljZS0+U2V0
U3RyZWFtU291cmNlRnJlcShpLCAxKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbUlu
c3RhbmNpbmdFbmFibGVkID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMg
Y29uc3QgRDNEVkVSVEVYRUxFTUVOVDkgZW5kID0gRDNEREVDTF9FTkQoKTsKKyAgICAqKGVsZW1l
bnQrKykgPSBlbmQ7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9WRVJURVhfREVDTF9D
QUNIRV9FTlRSSUVTOyBpKyspCisgICAgeworICAgICAgICBWZXJ0ZXhEZWNsQ2FjaGVFbnRyeSAq
ZW50cnkgPSAmbVZlcnRleERlY2xDYWNoZVtpXTsKKyAgICAgICAgaWYgKG1lbWNtcChlbnRyeS0+
Y2FjaGVkRWxlbWVudHMsIGVsZW1lbnRzLCAoZWxlbWVudCAtIGVsZW1lbnRzKSAqIHNpemVvZihE
M0RWRVJURVhFTEVNRU5UOSkpID09IDAgJiYgZW50cnktPnZlcnRleERlY2xhcmF0aW9uKQorICAg
ICAgICB7CisgICAgICAgICAgICBlbnRyeS0+bHJ1Q291bnQgPSArK21NYXhMcnU7CisgICAgICAg
ICAgICBpZihlbnRyeS0+dmVydGV4RGVjbGFyYXRpb24gIT0gbUxhc3RTZXRWRGVjbCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFZlcnRleERlY2xhcmF0aW9uKGVu
dHJ5LT52ZXJ0ZXhEZWNsYXJhdGlvbik7CisgICAgICAgICAgICAgICAgbUxhc3RTZXRWRGVjbCA9
IGVudHJ5LT52ZXJ0ZXhEZWNsYXJhdGlvbjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
cmV0dXJuIEdMX05PX0VSUk9SOworICAgICAgICB9CisgICAgfQorCisgICAgVmVydGV4RGVjbENh
Y2hlRW50cnkgKmxhc3RDYWNoZSA9IG1WZXJ0ZXhEZWNsQ2FjaGU7CisKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IE5VTV9WRVJURVhfREVDTF9DQUNIRV9FTlRSSUVTOyBpKyspCisgICAgeworICAg
ICAgICBpZiAobVZlcnRleERlY2xDYWNoZVtpXS5scnVDb3VudCA8IGxhc3RDYWNoZS0+bHJ1Q291
bnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxhc3RDYWNoZSA9ICZtVmVydGV4RGVjbENhY2hl
W2ldOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGxhc3RDYWNoZS0+dmVydGV4RGVjbGFy
YXRpb24gIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRp
b24tPlJlbGVhc2UoKTsKKyAgICAgICAgbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbiA9IE5V
TEw7CisgICAgICAgIC8vIG1MYXN0U2V0VkRlY2wgaXMgc2V0IHRvIHRoZSByZXBsYWNlbWVudCwg
c28gd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeQorICAgICAgICAvLyBhYm91dCBpdC4KKyAgICB9CisK
KyAgICBtZW1jcHkobGFzdENhY2hlLT5jYWNoZWRFbGVtZW50cywgZWxlbWVudHMsIChlbGVtZW50
IC0gZWxlbWVudHMpICogc2l6ZW9mKEQzRFZFUlRFWEVMRU1FTlQ5KSk7CisgICAgZGV2aWNlLT5D
cmVhdGVWZXJ0ZXhEZWNsYXJhdGlvbihlbGVtZW50cywgJmxhc3RDYWNoZS0+dmVydGV4RGVjbGFy
YXRpb24pOworICAgIGRldmljZS0+U2V0VmVydGV4RGVjbGFyYXRpb24obGFzdENhY2hlLT52ZXJ0
ZXhEZWNsYXJhdGlvbik7CisgICAgbUxhc3RTZXRWRGVjbCA9IGxhc3RDYWNoZS0+dmVydGV4RGVj
bGFyYXRpb247CisgICAgbGFzdENhY2hlLT5scnVDb3VudCA9ICsrbU1heExydTsKKworICAgIHJl
dHVybiBHTF9OT19FUlJPUjsKK30KKwordm9pZCBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjptYXJr
U3RhdGVEaXJ0eSgpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9B
VFRSSUJTOyBpKyspCisgICAgeworICAgICAgICBtQXBwbGllZFZCc1tpXS5zZXJpYWwgPSAwOwor
ICAgIH0KKworICAgIG1MYXN0U2V0VkRlY2wgPSBOVUxMOworICAgIG1JbnN0YW5jaW5nRW5hYmxl
ZCA9IHRydWU7ICAgLy8gRm9yY2VzIGl0IHRvIGJlIGRpc2FibGVkIHdoZW4gbm90IHVzZWQKK30K
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L1ZlcnRleERlY2xhcmF0aW9uQ2FjaGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uM2ZjMDI0YTliYWI0OGIxOWMwNmFiOTc1NzBlOGI1ZDU0ODcxMzE4Nwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmgKQEAgLTAsMCArMSw1OCBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKy8vIFZlcnRleERlY2xhcmF0aW9uQ2FjaGUuaDogRGVmaW5lcyBhIGhl
bHBlciBjbGFzcyB0byBjb25zdHJ1Y3QgYW5kIGNhY2hlIHZlcnRleCBkZWNsYXJhdGlvbnMuCisK
KyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX1ZFUlRFWERFQ0xBUkFUSU9OQ0FDSEVfSF8KKyNk
ZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1ZFUlRFWERFQ0xBUkFUSU9OQ0FDSEVfSF8KKworI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhEYXRhTWFuYWdlci5oIgorCituYW1lc3Bh
Y2UgZ2wKK3sKK2NsYXNzIFZlcnRleERhdGFNYW5hZ2VyOworfQorCituYW1lc3BhY2UgcngKK3sK
KworY2xhc3MgVmVydGV4RGVjbGFyYXRpb25DYWNoZQoreworICBwdWJsaWM6CisgICAgVmVydGV4
RGVjbGFyYXRpb25DYWNoZSgpOworICAgIH5WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKCk7CisKKyAg
ICBHTGVudW0gYXBwbHlEZWNsYXJhdGlvbihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIFRyYW5z
bGF0ZWRBdHRyaWJ1dGUgYXR0cmlidXRlc1tdLCBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSwgR0xzaXplaSBpbnN0YW5jZXMsIEdMc2l6ZWkgKnJlcGVhdERyYXcpOworCisgICAgdm9p
ZCBtYXJrU3RhdGVEaXJ0eSgpOworCisgIHByaXZhdGU6CisgICAgVUlOVCBtTWF4THJ1OworCisg
ICAgZW51bSB7IE5VTV9WRVJURVhfREVDTF9DQUNIRV9FTlRSSUVTID0gMzIgfTsKKworICAgIHN0
cnVjdCBWQkRhdGEKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBzZXJpYWw7CisgICAgICAg
IHVuc2lnbmVkIGludCBzdHJpZGU7CisgICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQ7CisgICAg
fTsKKworICAgIFZCRGF0YSBtQXBwbGllZFZCc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAg
ICBJRGlyZWN0M0RWZXJ0ZXhEZWNsYXJhdGlvbjkgKm1MYXN0U2V0VkRlY2w7CisgICAgYm9vbCBt
SW5zdGFuY2luZ0VuYWJsZWQ7CisKKyAgICBzdHJ1Y3QgVmVydGV4RGVjbENhY2hlRW50cnkKKyAg
ICB7CisgICAgICAgIEQzRFZFUlRFWEVMRU1FTlQ5IGNhY2hlZEVsZW1lbnRzW2dsOjpNQVhfVkVS
VEVYX0FUVFJJQlMgKyAxXTsKKyAgICAgICAgVUlOVCBscnVDb3VudDsKKyAgICAgICAgSURpcmVj
dDNEVmVydGV4RGVjbGFyYXRpb245ICp2ZXJ0ZXhEZWNsYXJhdGlvbjsKKyAgICB9IG1WZXJ0ZXhE
ZWNsQ2FjaGVbTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVNdOworfTsKKworfQorCisjZW5k
aWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1ZFUlRFWERFQ0xBUkFUSU9OQ0FDSEVfSF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
OS9yZW5kZXJlcjlfdXRpbHMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjdmMmZm
YjFkOWEzY2MzZmRhY2RmNDM3YzM1YmU0ZDU4YzdhODIxNgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5kZXJl
cjlfdXRpbHMuY3BwCkBAIC0wLDAgKzEsNTAwIEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIHJlbmRlcmVyOV91dGlscy5jcHA6IENvbnZlcnNpb24g
ZnVuY3Rpb25zIGFuZCBvdGhlciB1dGlsaXR5IHJvdXRpbmVzCisvLyBzcGVjaWZpYyB0byB0aGUg
RDNEOSByZW5kZXJlci4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRl
cmVyOV91dGlscy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9Db250ZXh0LmgiCisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKworbmFt
ZXNwYWNlIGdsX2QzZDkKK3sKKworRDNEQ01QRlVOQyBDb252ZXJ0Q29tcGFyaXNvbihHTGVudW0g
Y29tcGFyaXNvbikKK3sKKyAgICBEM0RDTVBGVU5DIGQzZENvbXAgPSBEM0RDTVBfQUxXQVlTOwor
ICAgIHN3aXRjaCAoY29tcGFyaXNvbikKKyAgICB7CisgICAgICBjYXNlIEdMX05FVkVSOiAgICBk
M2RDb21wID0gRDNEQ01QX05FVkVSOyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0FMV0FZ
UzogICBkM2RDb21wID0gRDNEQ01QX0FMV0FZUzsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X0xFU1M6ICAgICBkM2RDb21wID0gRDNEQ01QX0xFU1M7ICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX0xFUVVBTDogICBkM2RDb21wID0gRDNEQ01QX0xFU1NFUVVBTDsgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX0VRVUFMOiAgICBkM2RDb21wID0gRDNEQ01QX0VRVUFMOyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX0dSRUFURVI6ICBkM2RDb21wID0gRDNEQ01QX0dSRUFURVI7ICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0dFUVVBTDogICBkM2RDb21wID0gRDNEQ01QX0dSRUFU
RVJFUVVBTDsgYnJlYWs7CisgICAgICBjYXNlIEdMX05PVEVRVUFMOiBkM2RDb21wID0gRDNEQ01Q
X05PVEVRVUFMOyAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAg
IH0KKworICAgIHJldHVybiBkM2RDb21wOworfQorCitEM0RDT0xPUiBDb252ZXJ0Q29sb3IoZ2w6
OkNvbG9yIGNvbG9yKQoreworICAgIHJldHVybiBEM0RDT0xPUl9SR0JBKGdsOjp1bm9ybTw4Pihj
b2xvci5yZWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4Pihjb2xvci5n
cmVlbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNvbG9yLmJsdWUp
LAorICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4Pihjb2xvci5hbHBoYSkpOwor
fQorCitEM0RCTEVORCBDb252ZXJ0QmxlbmRGdW5jKEdMZW51bSBibGVuZCkKK3sKKyAgICBEM0RC
TEVORCBkM2RCbGVuZCA9IEQzREJMRU5EX1pFUk87CisKKyAgICBzd2l0Y2ggKGJsZW5kKQorICAg
IHsKKyAgICAgIGNhc2UgR0xfWkVSTzogICAgICAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQz
REJMRU5EX1pFUk87ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FOiAgICAgICAg
ICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX09ORTsgICAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfU1JDX0NPTE9SOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJM
RU5EX1NSQ0NPTE9SOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19D
T0xPUjogICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVlNSQ0NPTE9SOyAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfRFNUX0NPTE9SOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5E
X0RFU1RDT0xPUjsgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9DT0xP
UjogICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVkRFU1RDT0xPUjsgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfU1JDX0FMUEhBOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX1NS
Q0FMUEhBOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19BTFBIQTog
ICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVlNSQ0FMUEhBOyAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfRFNUX0FMUEhBOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0RFU1RB
TFBIQTsgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9BTFBIQTogICAg
ICBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVkRFU1RBTFBIQTsgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfQ09OU1RBTlRfQ09MT1I6ICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0JMRU5ERkFD
VE9SOyAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SOiBk
M2RCbGVuZCA9IEQzREJMRU5EX0lOVkJMRU5ERkFDVE9SOyBicmVhazsKKyAgICAgIGNhc2UgR0xf
Q09OU1RBTlRfQUxQSEE6ICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0JMRU5ERkFDVE9S
OyAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBOiBkM2RC
bGVuZCA9IEQzREJMRU5EX0lOVkJMRU5ERkFDVE9SOyBicmVhazsKKyAgICAgIGNhc2UgR0xfU1JD
X0FMUEhBX1NBVFVSQVRFOiAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX1NSQ0FMUEhBU0FUOyAg
ICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0
dXJuIGQzZEJsZW5kOworfQorCitEM0RCTEVORE9QIENvbnZlcnRCbGVuZE9wKEdMZW51bSBibGVu
ZE9wKQoreworICAgIEQzREJMRU5ET1AgZDNkQmxlbmRPcCA9IEQzREJMRU5ET1BfQUREOworCisg
ICAgc3dpdGNoIChibGVuZE9wKQorICAgIHsKKyAgICAgIGNhc2UgR0xfRlVOQ19BREQ6ICAgICAg
ICAgICAgICBkM2RCbGVuZE9wID0gRDNEQkxFTkRPUF9BREQ7ICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX0ZVTkNfU1VCVFJBQ1Q6ICAgICAgICAgZDNkQmxlbmRPcCA9IEQzREJMRU5ET1Bf
U1VCVFJBQ1Q7ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GVU5DX1JFVkVSU0VfU1VCVFJBQ1Q6
IGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX1JFVlNVQlRSQUNUOyBicmVhazsKKyAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIGQzZEJsZW5kT3A7Cit9CisK
K0QzRFNURU5DSUxPUCBDb252ZXJ0U3RlbmNpbE9wKEdMZW51bSBzdGVuY2lsT3ApCit7CisgICAg
RDNEU1RFTkNJTE9QIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9LRUVQOworCisgICAgc3dp
dGNoIChzdGVuY2lsT3ApCisgICAgeworICAgICAgY2FzZSBHTF9aRVJPOiAgICAgIGQzZFN0ZW5j
aWxPcCA9IEQzRFNURU5DSUxPUF9aRVJPOyAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfS0VFUDog
ICAgICBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfS0VFUDsgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX1JFUExBQ0U6ICAgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX1JFUExBQ0U7IGJy
ZWFrOworICAgICAgY2FzZSBHTF9JTkNSOiAgICAgIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxP
UF9JTkNSU0FUOyBicmVhazsKKyAgICAgIGNhc2UgR0xfREVDUjogICAgICBkM2RTdGVuY2lsT3Ag
PSBEM0RTVEVOQ0lMT1BfREVDUlNBVDsgYnJlYWs7CisgICAgICBjYXNlIEdMX0lOVkVSVDogICAg
ZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0lOVkVSVDsgIGJyZWFrOworICAgICAgY2FzZSBH
TF9JTkNSX1dSQVA6IGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9JTkNSOyAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfREVDUl9XUkFQOiBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfREVD
UjsgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAg
IHJldHVybiBkM2RTdGVuY2lsT3A7Cit9CisKK0QzRFRFWFRVUkVBRERSRVNTIENvbnZlcnRUZXh0
dXJlV3JhcChHTGVudW0gd3JhcCkKK3sKKyAgICBEM0RURVhUVVJFQUREUkVTUyBkM2RXcmFwID0g
RDNEVEFERFJFU1NfV1JBUDsKKworICAgIHN3aXRjaCAod3JhcCkKKyAgICB7CisgICAgICBjYXNl
IEdMX1JFUEVBVDogICAgICAgICAgICBkM2RXcmFwID0gRDNEVEFERFJFU1NfV1JBUDsgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfQ0xBTVBfVE9fRURHRTogICAgIGQzZFdyYXAgPSBEM0RUQUREUkVT
U19DTEFNUDsgIGJyZWFrOworICAgICAgY2FzZSBHTF9NSVJST1JFRF9SRVBFQVQ6ICAgZDNkV3Jh
cCA9IEQzRFRBRERSRVNTX01JUlJPUjsgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOworICAgIH0KKworICAgIHJldHVybiBkM2RXcmFwOworfQorCitEM0RDVUxMIENvbnZlcnRD
dWxsTW9kZShHTGVudW0gY3VsbEZhY2UsIEdMZW51bSBmcm9udEZhY2UpCit7CisgICAgRDNEQ1VM
TCBjdWxsID0gRDNEQ1VMTF9DQ1c7CisgICAgc3dpdGNoIChjdWxsRmFjZSkKKyAgICB7CisgICAg
ICBjYXNlIEdMX0ZST05UOgorICAgICAgICBjdWxsID0gKGZyb250RmFjZSA9PSBHTF9DQ1cgPyBE
M0RDVUxMX0NXIDogRDNEQ1VMTF9DQ1cpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
QkFDSzoKKyAgICAgICAgY3VsbCA9IChmcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEQ1VMTF9DQ1cg
OiBEM0RDVUxMX0NXKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZST05UX0FORF9C
QUNLOgorICAgICAgICBjdWxsID0gRDNEQ1VMTF9OT05FOyAvLyBjdWxsaW5nIHdpbGwgYmUgaGFu
ZGxlZCBkdXJpbmcgZHJhdworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIGN1bGw7Cit9CisKK0QzRENVQkVNQVBfRkFDRVMg
Q29udmVydEN1YmVGYWNlKEdMZW51bSBjdWJlRmFjZSkKK3sKKyAgICBEM0RDVUJFTUFQX0ZBQ0VT
IGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfUE9TSVRJVkVfWDsKKworICAgIHN3aXRjaCAoY3ViZUZh
Y2UpCisgICAgeworICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Cisg
ICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfUE9TSVRJVkVfWDsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICAgICAgZmFj
ZSA9IEQzRENVQkVNQVBfRkFDRV9ORUdBVElWRV9YOworICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgICAgICBmYWNlID0gRDNEQ1VC
RU1BUF9GQUNFX1BPU0lUSVZFX1k7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhU
VVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0Vf
TkVHQVRJVkVfWTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWjoKKyAgICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9QT1NJVElWRV9a
OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9aOgorICAgICAgICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX05FR0FUSVZFX1o7CisgICAgICAg
IGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1
cm4gZmFjZTsKK30KKworRFdPUkQgQ29udmVydENvbG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVl
biwgYm9vbCBibHVlLCBib29sIGFscGhhKQoreworICAgIHJldHVybiAocmVkICAgPyBEM0RDT0xP
UldSSVRFRU5BQkxFX1JFRCAgIDogMCkgfAorICAgICAgICAgICAoZ3JlZW4gPyBEM0RDT0xPUldS
SVRFRU5BQkxFX0dSRUVOIDogMCkgfAorICAgICAgICAgICAoYmx1ZSAgPyBEM0RDT0xPUldSSVRF
RU5BQkxFX0JMVUUgIDogMCkgfAorICAgICAgICAgICAoYWxwaGEgPyBEM0RDT0xPUldSSVRFRU5B
QkxFX0FMUEhBIDogMCk7Cit9CisKK0QzRFRFWFRVUkVGSUxURVJUWVBFIENvbnZlcnRNYWdGaWx0
ZXIoR0xlbnVtIG1hZ0ZpbHRlciwgZmxvYXQgbWF4QW5pc290cm9weSkKK3sKKyAgICBpZiAobWF4
QW5pc290cm9weSA+IDEuMGYpCisgICAgeworICAgICAgICByZXR1cm4gRDNEVEVYRl9BTklTT1RS
T1BJQzsKKyAgICB9CisKKyAgICBEM0RURVhUVVJFRklMVEVSVFlQRSBkM2RNYWdGaWx0ZXIgPSBE
M0RURVhGX1BPSU5UOworICAgIHN3aXRjaCAobWFnRmlsdGVyKQorICAgIHsKKyAgICAgIGNhc2Ug
R0xfTkVBUkVTVDogZDNkTWFnRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9MSU5FQVI6ICBkM2RNYWdGaWx0ZXIgPSBEM0RURVhGX0xJTkVBUjsgYnJlYWs7Cisg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBkM2RNYWdG
aWx0ZXI7Cit9CisKK3ZvaWQgQ29udmVydE1pbkZpbHRlcihHTGVudW0gbWluRmlsdGVyLCBEM0RU
RVhUVVJFRklMVEVSVFlQRSAqZDNkTWluRmlsdGVyLCBEM0RURVhUVVJFRklMVEVSVFlQRSAqZDNk
TWlwRmlsdGVyLCBmbG9hdCBtYXhBbmlzb3Ryb3B5KQoreworICAgIHN3aXRjaCAobWluRmlsdGVy
KQorICAgIHsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVDoKKyAgICAgICAgKmQzZE1pbkZpbHRlciA9
IEQzRFRFWEZfUE9JTlQ7CisgICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX05PTkU7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MSU5FQVI6CisgICAgICAgICpkM2RNaW5GaWx0
ZXIgPSBEM0RURVhGX0xJTkVBUjsKKyAgICAgICAgKmQzZE1pcEZpbHRlciA9IEQzRFRFWEZfTk9O
RTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Q6
CisgICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX1BPSU5UOworICAgICAgICAqZDNkTWlw
RmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xJ
TkVBUl9NSVBNQVBfTkVBUkVTVDoKKyAgICAgICAgKmQzZE1pbkZpbHRlciA9IEQzRFRFWEZfTElO
RUFSOworICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjoKKyAgICAgICAgKmQzZE1p
bkZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7CisgICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhG
X0xJTkVBUjsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTElO
RUFSOgorICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9MSU5FQVI7CisgICAgICAgICpk
M2RNaXBGaWx0ZXIgPSBEM0RURVhGX0xJTkVBUjsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZh
dWx0OgorICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKKyAgICAgICAgKmQz
ZE1pcEZpbHRlciA9IEQzRFRFWEZfTk9ORTsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9
CisKKyAgICBpZiAobWF4QW5pc290cm9weSA+IDEuMGYpCisgICAgeworICAgICAgICAqZDNkTWlu
RmlsdGVyID0gRDNEVEVYRl9BTklTT1RST1BJQzsKKyAgICB9Cit9CisKK0QzREZPUk1BVCBDb252
ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdMZW51bSBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3Jt
YXQpCisgICAgeworICAgICAgY2FzZSBHTF9OT05FOiAgICAgICAgICAgICAgICAgcmV0dXJuIEQz
REZNVF9OVUxMOworICAgICAgY2FzZSBHTF9SR0JBNDoKKyAgICAgIGNhc2UgR0xfUkdCNV9BMToK
KyAgICAgIGNhc2UgR0xfUkdCQThfT0VTOiAgICAgICAgICAgIHJldHVybiBEM0RGTVRfQThSOEc4
Qjg7CisgICAgICBjYXNlIEdMX1JHQjU2NTogICAgICAgICAgICAgICByZXR1cm4gRDNERk1UX1I1
RzZCNTsKKyAgICAgIGNhc2UgR0xfUkdCOF9PRVM6ICAgICAgICAgICAgIHJldHVybiBEM0RGTVRf
WDhSOEc4Qjg7CisgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgorICAgICAgY2FzZSBH
TF9TVEVOQ0lMX0lOREVYODogICAgICAgCisgICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhf
T0VTOiByZXR1cm4gRDNERk1UX0QyNFM4OworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsg
ICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKKyAgICB9Cit9CisKK0QzRE1VTFRJU0FNUExF
X1RZUEUgR2V0TXVsdGlzYW1wbGVUeXBlRnJvbVNhbXBsZXMoR0xzaXplaSBzYW1wbGVzKQorewor
ICAgIGlmIChzYW1wbGVzIDw9IDEpCisgICAgICAgIHJldHVybiBEM0RNVUxUSVNBTVBMRV9OT05F
OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIChEM0RNVUxUSVNBTVBMRV9UWVBFKXNhbXBsZXM7
Cit9CisKK30KKworbmFtZXNwYWNlIGQzZDlfZ2wKK3sKKwordW5zaWduZWQgaW50IEdldFN0ZW5j
aWxTaXplKEQzREZPUk1BVCBzdGVuY2lsRm9ybWF0KQoreworICAgIGlmIChzdGVuY2lsRm9ybWF0
ID09IEQzREZNVF9JTlRaKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDg7CisgICAgfQorICAgIHN3
aXRjaChzdGVuY2lsRm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRDNERk1UX0QyNEZTODoKKyAg
ICAgIGNhc2UgRDNERk1UX0QyNFM4OgorICAgICAgICByZXR1cm4gODsKKyAgICAgIGNhc2UgRDNE
Rk1UX0QyNFg0UzQ6CisgICAgICAgIHJldHVybiA0OworICAgICAgY2FzZSBEM0RGTVRfRDE1UzE6
CisgICAgICAgIHJldHVybiAxOworICAgICAgY2FzZSBEM0RGTVRfRDE2X0xPQ0tBQkxFOgorICAg
ICAgY2FzZSBEM0RGTVRfRDMyOgorICAgICAgY2FzZSBEM0RGTVRfRDI0WDg6CisgICAgICBjYXNl
IEQzREZNVF9EMzJGX0xPQ0tBQkxFOgorICAgICAgY2FzZSBEM0RGTVRfRDE2OgorICAgICAgICBy
ZXR1cm4gMDsKKyAgICAvL2Nhc2UgRDNERk1UX0QzMl9MT0NLQUJMRTogIHJldHVybiAwOyAgIC8v
IERpcmVjdFggOUV4IG9ubHkKKyAgICAvL2Nhc2UgRDNERk1UX1M4X0xPQ0tBQkxFOiAgIHJldHVy
biA4OyAgIC8vIERpcmVjdFggOUV4IG9ubHkKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biAwOworICAgIH0KK30KKwordW5zaWduZWQgaW50IEdldEFscGhhU2l6ZShEM0RGT1JNQVQgY29s
b3JGb3JtYXQpCit7CisgICAgc3dpdGNoIChjb2xvckZvcm1hdCkKKyAgICB7CisgICAgICBjYXNl
IEQzREZNVF9BMTZCMTZHMTZSMTZGOgorICAgICAgICByZXR1cm4gMTY7CisgICAgICBjYXNlIEQz
REZNVF9BMzJCMzJHMzJSMzJGOgorICAgICAgICByZXR1cm4gMzI7CisgICAgICBjYXNlIEQzREZN
VF9BMlIxMEcxMEIxMDoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgICBjYXNlIEQzREZNVF9BOFI4
RzhCODoKKyAgICAgICAgcmV0dXJuIDg7CisgICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKKyAg
ICAgICAgcmV0dXJuIDE7CisgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKKyAgICAgIGNhc2Ug
RDNERk1UX1I1RzZCNToKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gMDsKKyAgICB9Cit9CisKK0dMc2l6ZWkgR2V0U2FtcGxlc0Zyb21NdWx0aXNhbXBs
ZVR5cGUoRDNETVVMVElTQU1QTEVfVFlQRSB0eXBlKQoreworICAgIGlmICh0eXBlID09IEQzRE1V
TFRJU0FNUExFX05PTk1BU0tBQkxFKQorICAgICAgICByZXR1cm4gMDsKKyAgICBlbHNlCisgICAg
ICAgIHJldHVybiB0eXBlOworfQorCitib29sIElzRm9ybWF0Q2hhbm5lbEVxdWl2YWxlbnQoRDNE
Rk9STUFUIGQzZGZvcm1hdCwgR0xlbnVtIGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGQzZGZvcm1h
dCkKKyAgICB7CisgICAgICBjYXNlIEQzREZNVF9MODoKKyAgICAgICAgcmV0dXJuIChmb3JtYXQg
PT0gR0xfTFVNSU5BTkNFKTsKKyAgICAgIGNhc2UgRDNERk1UX0E4TDg6CisgICAgICAgIHJldHVy
biAoZm9ybWF0ID09IEdMX0xVTUlOQU5DRV9BTFBIQSk7CisgICAgICBjYXNlIEQzREZNVF9EWFQx
OgorICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQx
X0VYVCB8fCBmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCk7CisgICAg
ICBjYXNlIEQzREZNVF9EWFQzOgorICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9DT01QUkVT
U0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFKTsKKyAgICAgIGNhc2UgRDNERk1UX0RYVDU6CisgICAg
ICAgIHJldHVybiAoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEUp
OworICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6CisgICAgICBjYXNlIEQzREZNVF9BMTZCMTZH
MTZSMTZGOgorICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKKyAgICAgICAgcmV0dXJu
IChmb3JtYXQgPT0gR0xfUkdCQSB8fCBmb3JtYXQgPT0gR0xfQkdSQV9FWFQpOworICAgICAgY2Fz
ZSBEM0RGTVRfWDhSOEc4Qjg6CisgICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX1JHQik7Cisg
ICAgICBkZWZhdWx0OgorICAgICAgICBpZiAoZDNkZm9ybWF0ID09IEQzREZNVF9JTlRaICYmIGds
OjpJc0RlcHRoVGV4dHVyZShmb3JtYXQpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK0dMZW51bSBDb252ZXJ0QmFja0J1ZmZlckZv
cm1hdChEM0RGT1JNQVQgZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsKKyAg
ICAgIGNhc2UgRDNERk1UX0E0UjRHNEI0OiByZXR1cm4gR0xfUkdCQTQ7CisgICAgICBjYXNlIEQz
REZNVF9BOFI4RzhCODogcmV0dXJuIEdMX1JHQkE4X09FUzsKKyAgICAgIGNhc2UgRDNERk1UX0Ex
UjVHNUI1OiByZXR1cm4gR0xfUkdCNV9BMTsKKyAgICAgIGNhc2UgRDNERk1UX1I1RzZCNTogICBy
ZXR1cm4gR0xfUkdCNTY1OworICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6IHJldHVybiBHTF9S
R0I4X09FUzsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQor
CisgICAgcmV0dXJuIEdMX1JHQkE0OworfQorCitHTGVudW0gQ29udmVydERlcHRoU3RlbmNpbEZv
cm1hdChEM0RGT1JNQVQgZm9ybWF0KQoreworICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lOVFop
CisgICAgeworICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7CisgICAgfQor
ICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRDNERk1UX0QxNjoKKyAgICAg
IGNhc2UgRDNERk1UX0QyNFg4OgorICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UMTY7
CisgICAgICBjYXNlIEQzREZNVF9EMjRTODoKKyAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RF
TkNJTDhfT0VTOworICAgICAgY2FzZSBEM0RGTVRfVU5LTk9XTjoKKyAgICAgICAgcmV0dXJuIEdM
X05PTkU7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKwor
ICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKK30KKworR0xlbnVtIENvbnZlcnRS
ZW5kZXJUYXJnZXRGb3JtYXQoRDNERk9STUFUIGZvcm1hdCkKK3sKKyAgICBpZiAoZm9ybWF0ID09
IEQzREZNVF9JTlRaKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhf
T0VTOworICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNl
IEQzREZNVF9BNFI0RzRCNDogcmV0dXJuIEdMX1JHQkE0OworICAgICAgY2FzZSBEM0RGTVRfQThS
OEc4Qjg6IHJldHVybiBHTF9SR0JBOF9PRVM7CisgICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNTog
cmV0dXJuIEdMX1JHQjVfQTE7CisgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6ICAgcmV0dXJuIEdM
X1JHQjU2NTsKKyAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OiByZXR1cm4gR0xfUkdCOF9PRVM7
CisgICAgICBjYXNlIEQzREZNVF9EMTY6CisgICAgICBjYXNlIEQzREZNVF9EMjRYODoKKyAgICAg
ICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2OworICAgICAgY2FzZSBEM0RGTVRfRDI0Uzg6
CisgICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKKyAgICAgIGNhc2UgRDNE
Rk1UX1VOS05PV046CisgICAgICAgIHJldHVybiBHTF9OT05FOworICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfUkdCQTQ7Cit9CisK
K0dMZW51bSBHZXRFcXVpdmFsZW50Rm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpCit7CisgICAgaWYg
KGZvcm1hdCA9PSBEM0RGTVRfSU5UWikKKyAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJ
TDhfT0VTOworICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX05VTEwpCisgICAgICAgIHJldHVybiBH
TF9OT05FOworCisgICAgc3dpdGNoIChmb3JtYXQpCisgICAgeworICAgICAgY2FzZSBEM0RGTVRf
QTRSNEc0QjQ6ICAgICAgICAgICAgIHJldHVybiBHTF9SR0JBNDsKKyAgICAgIGNhc2UgRDNERk1U
X0E4UjhHOEI4OiAgICAgICAgICAgICByZXR1cm4gR0xfUkdCQThfT0VTOworICAgICAgY2FzZSBE
M0RGTVRfQTFSNUc1QjU6ICAgICAgICAgICAgIHJldHVybiBHTF9SR0I1X0ExOworICAgICAgY2Fz
ZSBEM0RGTVRfUjVHNkI1OiAgICAgICAgICAgICAgIHJldHVybiBHTF9SR0I1NjU7CisgICAgICBj
YXNlIEQzREZNVF9YOFI4RzhCODogICAgICAgICAgICAgcmV0dXJuIEdMX1JHQjhfT0VTOworICAg
ICAgY2FzZSBEM0RGTVRfRDE2OiAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9ERVBUSF9DT01Q
T05FTlQxNjsKKyAgICAgIGNhc2UgRDNERk1UX0QyNFM4OiAgICAgICAgICAgICAgICByZXR1cm4g
R0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7CisgICAgICBjYXNlIEQzREZNVF9VTktOT1dOOiAgICAg
ICAgICAgICAgcmV0dXJuIEdMX05PTkU7CisgICAgICBjYXNlIEQzREZNVF9EWFQxOiAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOworICAgICAg
Y2FzZSBEM0RGTVRfRFhUMzogICAgICAgICAgICAgICAgIHJldHVybiBHTF9DT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQzX0FOR0xFOworICAgICAgY2FzZSBEM0RGTVRfRFhUNTogICAgICAgICAgICAg
ICAgIHJldHVybiBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOworICAgICAgY2Fz
ZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjogICAgICAgIHJldHVybiBHTF9SR0JBMzJGX0VYVDsKKyAg
ICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6ICAgICAgICByZXR1cm4gR0xfUkdCQTE2Rl9F
WFQ7CisgICAgICBjYXNlIEQzREZNVF9MODogICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0xV
TUlOQU5DRThfRVhUOworICAgICAgY2FzZSBEM0RGTVRfQThMODogICAgICAgICAgICAgICAgIHJl
dHVybiBHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQ7CisgICAgICBkZWZhdWx0OiAgICAgICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIEdMX05PTkU7CisgICAgfQorfQorCit9
CisKK25hbWVzcGFjZSBkM2Q5Cit7CisKK2Jvb2wgSXNDb21wcmVzc2VkRm9ybWF0KEQzREZPUk1B
VCBzdXJmYWNlRm9ybWF0KQoreworICAgIHN3aXRjaChzdXJmYWNlRm9ybWF0KQorICAgIHsKKyAg
ICAgIGNhc2UgRDNERk1UX0RYVDE6CisgICAgICBjYXNlIEQzREZNVF9EWFQyOgorICAgICAgY2Fz
ZSBEM0RGTVRfRFhUMzoKKyAgICAgIGNhc2UgRDNERk1UX0RYVDQ6CisgICAgICBjYXNlIEQzREZN
VF9EWFQ1OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3NpemVfdCBDb21wdXRlUm93U2l6ZShEM0RGT1JNQVQg
Zm9ybWF0LCB1bnNpZ25lZCBpbnQgd2lkdGgpCit7CisgICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRf
SU5UWikKKyAgICB7CisgICAgICAgIHJldHVybiA0ICogd2lkdGg7CisgICAgfQorICAgIHN3aXRj
aCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRDNERk1UX0w4OgorICAgICAgICAgIHJldHVy
biAxICogd2lkdGg7CisgICAgICBjYXNlIEQzREZNVF9BOEw4OgorICAgICAgICAgIHJldHVybiAy
ICogd2lkdGg7CisgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKKyAgICAgIGNhc2UgRDNERk1U
X0E4UjhHOEI4OgorICAgICAgICByZXR1cm4gNCAqIHdpZHRoOworICAgICAgY2FzZSBEM0RGTVRf
QTE2QjE2RzE2UjE2RjoKKyAgICAgICAgcmV0dXJuIDggKiB3aWR0aDsKKyAgICAgIGNhc2UgRDNE
Rk1UX0EzMkIzMkczMlIzMkY6CisgICAgICAgIHJldHVybiAxNiAqIHdpZHRoOworICAgICAgY2Fz
ZSBEM0RGTVRfRFhUMToKKyAgICAgICAgcmV0dXJuIDggKiAoKHdpZHRoICsgMykgLyA0KTsKKyAg
ICAgIGNhc2UgRDNERk1UX0RYVDM6CisgICAgICBjYXNlIEQzREZNVF9EWFQ1OgorICAgICAgICBy
ZXR1cm4gMTYgKiAoKHdpZHRoICsgMykgLyA0KTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3Jl
bmRlcmVyOV91dGlscy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmNmNkZjFlYTY1NjZm
OTEwYTk2ZWUyNTExNGI3YzQ4ZWM4Mzk0NWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxz
LmgKQEAgLTAsMCArMSw3NCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gcmVuZGVyZXI5X3V0
aWxzLmg6IENvbnZlcnNpb24gZnVuY3Rpb25zIGFuZCBvdGhlciB1dGlsaXR5IHJvdXRpbmVzIAor
Ly8gc3BlY2lmaWMgdG8gdGhlIEQzRDkgcmVuZGVyZXIKKworI2lmbmRlZiBMSUJHTEVTVjJfUkVO
REVSRVJfUkVOREVSRVI5X1VUSUxTX0gKKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRF
UkVSOV9VVElMU19ICisKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisKK2NvbnN0
IEQzREZPUk1BVCBEM0RGTVRfSU5UWiA9ICgoRDNERk9STUFUKShNQUtFRk9VUkNDKCdJJywnTics
J1QnLCdaJykpKTsKK2NvbnN0IEQzREZPUk1BVCBEM0RGTVRfTlVMTCA9ICgoRDNERk9STUFUKShN
QUtFRk9VUkNDKCdOJywnVScsJ0wnLCdMJykpKTsKKworbmFtZXNwYWNlIGdsX2QzZDkKK3sKKwor
RDNEQ01QRlVOQyBDb252ZXJ0Q29tcGFyaXNvbihHTGVudW0gY29tcGFyaXNvbik7CitEM0RDT0xP
UiBDb252ZXJ0Q29sb3IoZ2w6OkNvbG9yIGNvbG9yKTsKK0QzREJMRU5EIENvbnZlcnRCbGVuZEZ1
bmMoR0xlbnVtIGJsZW5kKTsKK0QzREJMRU5ET1AgQ29udmVydEJsZW5kT3AoR0xlbnVtIGJsZW5k
T3ApOworRDNEU1RFTkNJTE9QIENvbnZlcnRTdGVuY2lsT3AoR0xlbnVtIHN0ZW5jaWxPcCk7CitE
M0RURVhUVVJFQUREUkVTUyBDb252ZXJ0VGV4dHVyZVdyYXAoR0xlbnVtIHdyYXApOworRDNEQ1VM
TCBDb252ZXJ0Q3VsbE1vZGUoR0xlbnVtIGN1bGxGYWNlLCBHTGVudW0gZnJvbnRGYWNlKTsKK0Qz
RENVQkVNQVBfRkFDRVMgQ29udmVydEN1YmVGYWNlKEdMZW51bSBjdWJlRmFjZSk7CitEV09SRCBD
b252ZXJ0Q29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxw
aGEpOworRDNEVEVYVFVSRUZJTFRFUlRZUEUgQ29udmVydE1hZ0ZpbHRlcihHTGVudW0gbWFnRmls
dGVyLCBmbG9hdCBtYXhBbmlzb3Ryb3B5KTsKK3ZvaWQgQ29udmVydE1pbkZpbHRlcihHTGVudW0g
bWluRmlsdGVyLCBEM0RURVhUVVJFRklMVEVSVFlQRSAqZDNkTWluRmlsdGVyLCBEM0RURVhUVVJF
RklMVEVSVFlQRSAqZDNkTWlwRmlsdGVyLCBmbG9hdCBtYXhBbmlzb3Ryb3B5KTsKK0QzREZPUk1B
VCBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdMZW51bSBmb3JtYXQpOworRDNETVVMVElTQU1Q
TEVfVFlQRSBHZXRNdWx0aXNhbXBsZVR5cGVGcm9tU2FtcGxlcyhHTHNpemVpIHNhbXBsZXMpOwor
Cit9CisKK25hbWVzcGFjZSBkM2Q5X2dsCit7CisKK0dMdWludCBHZXRBbHBoYVNpemUoRDNERk9S
TUFUIGNvbG9yRm9ybWF0KTsKK0dMdWludCBHZXRTdGVuY2lsU2l6ZShEM0RGT1JNQVQgc3RlbmNp
bEZvcm1hdCk7CisKK0dMc2l6ZWkgR2V0U2FtcGxlc0Zyb21NdWx0aXNhbXBsZVR5cGUoRDNETVVM
VElTQU1QTEVfVFlQRSB0eXBlKTsKKworYm9vbCBJc0Zvcm1hdENoYW5uZWxFcXVpdmFsZW50KEQz
REZPUk1BVCBkM2Rmb3JtYXQsIEdMZW51bSBmb3JtYXQpOworR0xlbnVtIENvbnZlcnRCYWNrQnVm
ZmVyRm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpOworR0xlbnVtIENvbnZlcnREZXB0aFN0ZW5jaWxG
b3JtYXQoRDNERk9STUFUIGZvcm1hdCk7CitHTGVudW0gQ29udmVydFJlbmRlclRhcmdldEZvcm1h
dChEM0RGT1JNQVQgZm9ybWF0KTsKK0dMZW51bSBHZXRFcXVpdmFsZW50Rm9ybWF0KEQzREZPUk1B
VCBmb3JtYXQpOworCit9CisKK25hbWVzcGFjZSBkM2Q5Cit7Citib29sIElzQ29tcHJlc3NlZEZv
cm1hdChEM0RGT1JNQVQgZm9ybWF0KTsKK3NpemVfdCBDb21wdXRlUm93U2l6ZShEM0RGT1JNQVQg
Zm9ybWF0LCB1bnNpZ25lZCBpbnQgd2lkdGgpOworCitpbmxpbmUgYm9vbCBpc0RldmljZUxvc3RF
cnJvcihIUkVTVUxUIGVycm9yQ29kZSkKK3sKKyAgICBzd2l0Y2ggKGVycm9yQ29kZSkKKyAgICB7
CisgICAgICBjYXNlIEQzREVSUl9EUklWRVJJTlRFUk5BTEVSUk9SOgorICAgICAgY2FzZSBEM0RF
UlJfREVWSUNFTE9TVDoKKyAgICAgIGNhc2UgRDNERVJSX0RFVklDRUhVTkc6CisgICAgICBjYXNl
IEQzREVSUl9ERVZJQ0VSRU1PVkVEOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK30KKworI2VuZGlmIC8vIExJ
QkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjlfVVRJTFNfSApkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvQmxpdC5w
cyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9z
aGFkZXJzL0JsaXQucHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGNiM2JkMGU3NmJhOTJhMjhlNzc2ODg4YzYyOTA0
YzBjM2YwNWYzYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL0JsaXQucHMKQEAgLTAsMCArMSwzOSBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKK3NhbXBsZXIyRCB0ZXggOiBzMDsKKwordW5pZm9ybSBmbG9hdDQg
bW9kZSA6IGMwOworCisvLyBQYXNzdGhyb3VnaCBQaXhlbCBTaGFkZXIKKy8vIE91dHB1dHMgdGV4
dHVyZSAwIHNhbXBsZWQgYXQgdGV4Y29vcmQgMC4KK2Zsb2F0NCBwYXNzdGhyb3VnaHBzKGZsb2F0
NCB0ZXhjb29yZCA6IFRFWENPT1JEMCkgOiBDT0xPUgoreworCXJldHVybiB0ZXgyRCh0ZXgsIHRl
eGNvb3JkLnh5KTsKK307CisKKy8vIEx1bWluYW5jZSBDb252ZXJzaW9uIFBpeGVsIFNoYWRlcgor
Ly8gT3V0cHV0cyBzYW1wbGUodGV4MCwgdGMwKS5ycnJhLgorLy8gRm9yIExBIG91dHB1dCAocGFz
cyBBKSBzZXQgQzAuWCA9IDEsIEMwLlkgPSAwLgorLy8gRm9yIEwgb3V0cHV0IChBID0gMSkgc2V0
IEMwLlggPSAwLCBDMC5ZID0gMS4KK2Zsb2F0NCBsdW1pbmFuY2VwcyhmbG9hdDQgdGV4Y29vcmQg
OiBURVhDT09SRDApIDogQ09MT1IKK3sKKwlmbG9hdDQgdG1wID0gdGV4MkQodGV4LCB0ZXhjb29y
ZC54eSk7CisJdG1wLncgPSB0bXAudyAqIG1vZGUueCArIG1vZGUueTsKKwlyZXR1cm4gdG1wLnh4
eHc7Cit9OworCisvLyBSR0IvQSBDb21wb25lbnQgTWFzayBQaXhlbCBTaGFkZXIKKy8vIE91dHB1
dHMgc2FtcGxlKHRleDAsIHRjMCkgd2l0aCBvcHRpb25zIHRvIGZvcmNlIFJHQiA9IDAgYW5kL29y
IEEgPSAxLgorLy8gVG8gZm9yY2UgUkdCID0gMCwgc2V0IEMwLlggPSAwLCBvdGhlcndpc2UgQzAu
WCA9IDEuCisvLyBUbyBmb3JjZSBBID0gMSwgc2V0IEMwLlogPSAwLCBDMC5XID0gMSwgb3RoZXJ3
aXNlIEMwLlogPSAxLCBDMC5XID0gMC4KK2Zsb2F0NCBjb21wb25lbnRtYXNrcHMoZmxvYXQ0IHRl
eGNvb3JkIDogVEVYQ09PUkQwKSA6IENPTE9SCit7CisJZmxvYXQ0IHRtcCA9IHRleDJEKHRleCwg
dGV4Y29vcmQueHkpOworCXRtcC54eXogPSB0bXAueHl6ICogbW9kZS54OworCXRtcC53ID0gdG1w
LncgKiBtb2RlLnogKyBtb2RlLnc7CisJcmV0dXJuIHRtcDsKK307CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9C
bGl0LnZzIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L3NoYWRlcnMvQmxpdC52cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYTM2OTgwYjkzNWI1MGZhOWFlMGI2YjBm
NGE1MGUzOTM5ZDBkNTExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvQmxpdC52cwpAQCAtMCwwICsx
LDQzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworc3RydWN0IFZTX09VVFBVVAoreworICAgIGZsb2F0NCBw
b3NpdGlvbiA6IFBPU0lUSU9OOworICAgIGZsb2F0NCB0ZXhjb29yZCA6IFRFWENPT1JEMDsKK307
CisKK3VuaWZvcm0gZmxvYXQ0IGhhbGZQaXhlbFNpemUgOiBjMDsKKworLy8gU3RhbmRhcmQgVmVy
dGV4IFNoYWRlcgorLy8gSW5wdXQgMCBpcyB0aGUgaG9tb2dlbm91cyBwb3NpdGlvbi4KKy8vIE91
dHB1dHMgdGhlIGhvbW9nZW5vdXMgcG9zaXRpb24gYXMtaXMuCisvLyBPdXRwdXRzIGEgdGV4IGNv
b3JkIHdpdGggKDAsMCkgaW4gdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSBzY3JlZW4gYW5k
ICgxLDEpIGluIHRoZSBib3R0b20gcmlnaHQuCisvLyBDMC5YIG11c3QgYmUgbmVnYXRpdmUgaGFs
Zi1waXhlbCB3aWR0aCwgQzAuWSBtdXN0IGJlIGhhbGYtcGl4ZWwgaGVpZ2h0LiBDMC5aVyBtdXN0
IGJlIDAuCitWU19PVVRQVVQgc3RhbmRhcmR2cyhpbiBmbG9hdDQgcG9zaXRpb24gOiBQT1NJVElP
TikKK3sKKyAgICBWU19PVVRQVVQgT3V0OworCisgICAgT3V0LnBvc2l0aW9uID0gcG9zaXRpb24g
KyBoYWxmUGl4ZWxTaXplOworICAgIE91dC50ZXhjb29yZCA9IHBvc2l0aW9uICogZmxvYXQ0KDAu
NSwgLTAuNSwgMS4wLCAxLjApICsgZmxvYXQ0KDAuNSwgMC41LCAwLCAwKTsKKworICAgIHJldHVy
biBPdXQ7Cit9OworCisvLyBGbGlwIFkgVmVydGV4IFNoYWRlcgorLy8gSW5wdXQgMCBpcyB0aGUg
aG9tb2dlbm91cyBwb3NpdGlvbi4KKy8vIE91dHB1dHMgdGhlIGhvbW9nZW5vdXMgcG9zaXRpb24g
YXMtaXMuCisvLyBPdXRwdXRzIGEgdGV4IGNvb3JkIHdpdGggKDAsMSkgaW4gdGhlIHVwcGVyLWxl
ZnQgY29ybmVyIG9mIHRoZSBzY3JlZW4gYW5kICgxLDApIGluIHRoZSBib3R0b20gcmlnaHQuCisv
LyBDMC5YWSBtdXN0IGJlIHRoZSBoYWxmLXBpeGVsIHdpZHRoIGFuZCBoZWlnaHQuIEMwLlpXIG11
c3QgYmUgMC4KK1ZTX09VVFBVVCBmbGlweXZzKGluIGZsb2F0NCBwb3NpdGlvbiA6IFBPU0lUSU9O
KQoreworICAgIFZTX09VVFBVVCBPdXQ7CisKKyAgICBPdXQucG9zaXRpb24gPSBwb3NpdGlvbiAr
IGhhbGZQaXhlbFNpemU7CisgICAgT3V0LnRleGNvb3JkID0gcG9zaXRpb24gKiBmbG9hdDQoMC41
LCAwLjUsIDEuMCwgMS4wKSArIGZsb2F0NCgwLjUsIDAuNSwgMCwgMCk7CisKKyAgICByZXR1cm4g
T3V0OworfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2NvbXBvbmVudG1hc2twcy5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMv
Y29tcGlsZWQvY29tcG9uZW50bWFza3BzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGYyODQ3YjhlN2QzNWYxNTdj
YTFhOGQyODE4M2M1ZWI3YzRkMjZlZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2Nv
bXBvbmVudG1hc2twcy5oCkBAIC0wLDAgKzEsNzkgQEAKKyNpZiAwDQorLy8NCisvLyBHZW5lcmF0
ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQN
CisvLw0KKy8vLw0KKy8vIFBhcmFtZXRlcnM6DQorLy8NCisvLyAgIGZsb2F0NCBtb2RlOw0KKy8v
ICAgc2FtcGxlcjJEIHRleDsNCisvLw0KKy8vDQorLy8gUmVnaXN0ZXJzOg0KKy8vDQorLy8gICBO
YW1lICAgICAgICAgUmVnICAgU2l6ZQ0KKy8vICAgLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0NCisv
LyAgIG1vZGUgICAgICAgICBjMCAgICAgICAxDQorLy8gICB0ZXggICAgICAgICAgczAgICAgICAg
MQ0KKy8vDQorDQorICAgIHBzXzJfMA0KKyAgICBkY2wgdDAueHkNCisgICAgZGNsXzJkIHMwDQor
ICAgIHRleGxkIHIwLCB0MCwgczANCisgICAgbXVsIHIxLnh5eiwgcjAsIGMwLngNCisgICAgbWFk
IHIxLncsIHIwLncsIGMwLnosIGMwLncNCisgICAgbW92IG9DMCwgcjENCisNCisvLyBhcHByb3hp
bWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCAzIGFyaXRobWV0aWMp
DQorI2VuZGlmDQorDQorY29uc3QgQllURSBnX3BzMjBfY29tcG9uZW50bWFza3BzW10gPQ0KK3sN
CisgICAgICAwLCAgIDIsIDI1NSwgMjU1LCAyNTQsIDI1NSwgDQorICAgICA0NCwgICAwLCAgNjcs
ICA4NCwgIDY1LCAgNjYsIA0KKyAgICAgMjgsICAgMCwgICAwLCAgIDAsIDExOSwgICAwLCANCisg
ICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTUsIDI1NSwgDQorICAgICAgMiwgICAwLCAgIDAsICAg
MCwgIDI4LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCANCisgICAg
MTEyLCAgIDAsICAgMCwgICAwLCAgNjgsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDIsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICA3NiwgICAwLCANCisgICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICA5MiwgICAwLCAgIDAsICAgMCwgICAz
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCisgICAgIDk2LCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAxMDksIDExMSwgMTAwLCAx
MDEsIA0KKyAgICAgIDAsIDE3MSwgMTcxLCAxNzEsICAgMSwgICAwLCANCisgICAgICAzLCAgIDAs
ICAgMSwgICAwLCAgIDQsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgIDAsICAgMCwgMTE2LCAxMDEsIDEyMCwgICAwLCANCisgICAgICA0LCAgIDAsICAx
MiwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgICAwLCAgIDAsIDExMiwgMTE1LCANCisgICAgIDk1LCAgNTAsICA5NSwg
IDQ4LCAgIDAsICA3NywgDQorICAgIDEwNSwgIDk5LCAxMTQsIDExMSwgMTE1LCAxMTEsIA0KKyAg
ICAxMDIsIDExNiwgIDMyLCAgNDAsICA4MiwgIDQxLCANCisgICAgIDMyLCAgNzIsICA3NiwgIDgz
LCAgNzYsICAzMiwgDQorICAgICA4MywgMTA0LCAgOTcsIDEwMCwgMTAxLCAxMTQsIA0KKyAgICAg
MzIsICA2NywgMTExLCAxMDksIDExMiwgMTA1LCANCisgICAgMTA4LCAxMDEsIDExNCwgIDMyLCAg
NTcsICA0NiwgDQorICAgICA1MSwgIDQ4LCAgNDYsICA1NywgIDUwLCAgNDgsIA0KKyAgICAgNDgs
ICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCANCisgICAgIDUyLCAgIDAsIDE3MSwgMTcxLCAgMzEs
ICAgMCwgDQorICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAxMjgsIA0KKyAgICAgIDAsICAg
MCwgICAzLCAxNzYsICAzMSwgICAwLCANCisgICAgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIDE0
NCwgDQorICAgICAgMCwgICA4LCAgMTUsIDE2MCwgIDY2LCAgIDAsIA0KKyAgICAgIDAsICAgMywg
ICAwLCAgIDAsICAxNSwgMTI4LCANCisgICAgICAwLCAgIDAsIDIyOCwgMTc2LCAgIDAsICAgOCwg
DQorICAgIDIyOCwgMTYwLCAgIDUsICAgMCwgICAwLCAgIDMsIA0KKyAgICAgIDEsICAgMCwgICA3
LCAxMjgsICAgMCwgICAwLCANCisgICAgMjI4LCAxMjgsICAgMCwgICAwLCAgIDAsIDE2MCwgDQor
ICAgICAgNCwgICAwLCAgIDAsICAgNCwgICAxLCAgIDAsIA0KKyAgICAgIDgsIDEyOCwgICAwLCAg
IDAsIDI1NSwgMTI4LCANCisgICAgICAwLCAgIDAsIDE3MCwgMTYwLCAgIDAsICAgMCwgDQorICAg
IDI1NSwgMTYwLCAgIDEsICAgMCwgICAwLCAgIDIsIA0KKyAgICAgIDAsICAgOCwgIDE1LCAxMjgs
ICAgMSwgICAwLCANCisgICAgMjI4LCAxMjgsIDI1NSwgMjU1LCAgIDAsICAgMA0KK307DQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L3NoYWRlcnMvY29tcGlsZWQvZmxpcHl2cy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvZmxpcHl2cy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjAyNTc2ZWQ2NzQyZjJlMmY1ZWYzZmIxNGFiMGQ4M2M2OTZiNTczZDIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9mbGlweXZzLmgKQEAgLTAsMCArMSw2NyBAQAorI2lm
IDANCisvLw0KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBp
bGVyIDkuMzAuOTIwMC4xNjM4NA0KKy8vDQorLy8vDQorLy8gUGFyYW1ldGVyczoNCisvLw0KKy8v
ICAgZmxvYXQ0IGhhbGZQaXhlbFNpemU7DQorLy8NCisvLw0KKy8vIFJlZ2lzdGVyczoNCisvLw0K
Ky8vICAgTmFtZSAgICAgICAgICBSZWcgICBTaXplDQorLy8gICAtLS0tLS0tLS0tLS0tIC0tLS0t
IC0tLS0NCisvLyAgIGhhbGZQaXhlbFNpemUgYzAgICAgICAgMQ0KKy8vDQorDQorICAgIHZzXzJf
MA0KKyAgICBkZWYgYzEsIDAuNSwgMSwgMCwgMA0KKyAgICBkY2xfcG9zaXRpb24gdjANCisgICAg
YWRkIG9Qb3MsIHYwLCBjMA0KKyAgICBtYWQgb1QwLCB2MCwgYzEueHh5eSwgYzEueHh6eg0KKw0K
Ky8vIGFwcHJveGltYXRlbHkgMiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQorI2VuZGlmDQorDQor
Y29uc3QgQllURSBnX3ZzMjBfZmxpcHl2c1tdID0NCit7DQorICAgICAgMCwgICAyLCAyNTQsIDI1
NSwgMjU0LCAyNTUsIA0KKyAgICAgMzYsICAgMCwgIDY3LCAgODQsICA2NSwgIDY2LCANCisgICAg
IDI4LCAgIDAsICAgMCwgICAwLCAgODcsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMiwg
MjU0LCAyNTUsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICAyOCwgICAwLCANCisgICAgICAw
LCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgDQorICAgICA4MCwgICAwLCAgIDAsICAgMCwgIDQ4
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCANCisgICAgICAxLCAg
IDAsICAgMCwgICAwLCAgNjQsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAxMDQsICA5NywgMTA4LCAxMDIsICA4MCwgMTA1LCANCisgICAgMTIwLCAxMDEs
IDEwOCwgIDgzLCAxMDUsIDEyMiwgDQorICAgIDEwMSwgICAwLCAxNzEsIDE3MSwgICAxLCAgIDAs
IA0KKyAgICAgIDMsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCANCisgICAgICAxLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAxMTgsIDExNSwgIDk1LCAgNTAsIA0K
KyAgICAgOTUsICA0OCwgICAwLCAgNzcsIDEwNSwgIDk5LCANCisgICAgMTE0LCAxMTEsIDExNSwg
MTExLCAxMDIsIDExNiwgDQorICAgICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsIA0KKyAg
ICAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgMTA0LCANCisgICAgIDk3LCAxMDAsIDEwMSwgMTE0
LCAgMzIsICA2NywgDQorICAgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIA0KKyAgICAx
MTQsICAzMiwgIDU3LCAgNDYsICA1MSwgIDQ4LCANCisgICAgIDQ2LCAgNTcsICA1MCwgIDQ4LCAg
NDgsICA0NiwgDQorICAgICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCAgIDAsIA0KKyAgICAxNzEs
IDE3MSwgIDgxLCAgIDAsICAgMCwgICA1LCANCisgICAgICAxLCAgIDAsICAxNSwgMTYwLCAgIDAs
ICAgMCwgDQorICAgICAgMCwgIDYzLCAgIDAsICAgMCwgMTI4LCAgNjMsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAzMSwgICAwLCAgIDAsICAg
MiwgDQorICAgICAgMCwgICAwLCAgIDAsIDEyOCwgICAwLCAgIDAsIA0KKyAgICAgMTUsIDE0NCwg
ICAyLCAgIDAsICAgMCwgICAzLCANCisgICAgICAwLCAgIDAsICAxNSwgMTkyLCAgIDAsICAgMCwg
DQorICAgIDIyOCwgMTQ0LCAgIDAsICAgMCwgMjI4LCAxNjAsIA0KKyAgICAgIDQsICAgMCwgICAw
LCAgIDQsICAgMCwgICAwLCANCisgICAgIDE1LCAyMjQsICAgMCwgICAwLCAyMjgsIDE0NCwgDQor
ICAgICAgMSwgICAwLCAgODAsIDE2MCwgICAxLCAgIDAsIA0KKyAgICAxNjAsIDE2MCwgMjU1LCAy
NTUsICAgMCwgICAwDQorfTsNCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9sdW1pbmFuY2Vwcy5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3No
YWRlcnMvY29tcGlsZWQvbHVtaW5hbmNlcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMDMxM2IwODYwZWNmZTAy
Njc3ZGRiM2YwMDA5MTUxZjc4YTNiZmIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQv
bHVtaW5hbmNlcHMuaApAQCAtMCwwICsxLDc5IEBACisjaWYgMA0KKy8vDQorLy8gR2VuZXJhdGVk
IGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0DQor
Ly8NCisvLy8NCisvLyBQYXJhbWV0ZXJzOg0KKy8vDQorLy8gICBmbG9hdDQgbW9kZTsNCisvLyAg
IHNhbXBsZXIyRCB0ZXg7DQorLy8NCisvLw0KKy8vIFJlZ2lzdGVyczoNCisvLw0KKy8vICAgTmFt
ZSAgICAgICAgIFJlZyAgIFNpemUNCisvLyAgIC0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tDQorLy8g
ICBtb2RlICAgICAgICAgYzAgICAgICAgMQ0KKy8vICAgdGV4ICAgICAgICAgIHMwICAgICAgIDEN
CisvLw0KKw0KKyAgICBwc18yXzANCisgICAgZGNsIHQwLnh5DQorICAgIGRjbF8yZCBzMA0KKyAg
ICB0ZXhsZCByMCwgdDAsIHMwDQorICAgIG1hZCByMS53LCByMC53LCBjMC54LCBjMC55DQorICAg
IG1vdiByMS54eXosIHIwLngNCisgICAgbW92IG9DMCwgcjENCisNCisvLyBhcHByb3hpbWF0ZWx5
IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCAzIGFyaXRobWV0aWMpDQorI2Vu
ZGlmDQorDQorY29uc3QgQllURSBnX3BzMjBfbHVtaW5hbmNlcHNbXSA9DQorew0KKyAgICAgIDAs
ICAgMiwgMjU1LCAyNTUsIDI1NCwgMjU1LCANCisgICAgIDQ0LCAgIDAsICA2NywgIDg0LCAgNjUs
ICA2NiwgDQorICAgICAyOCwgICAwLCAgIDAsICAgMCwgMTE5LCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDIsIDI1NSwgMjU1LCANCisgICAgICAyLCAgIDAsICAgMCwgICAwLCAgMjgsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsIA0KKyAgICAxMTIsICAgMCwg
ICAwLCAgIDAsICA2OCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDc2LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCisgICAgIDkyLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgDQor
ICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgOTYsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsIDEwOSwgMTExLCAxMDAsIDEwMSwgDQorICAg
ICAgMCwgMTcxLCAxNzEsIDE3MSwgICAxLCAgIDAsIA0KKyAgICAgIDMsICAgMCwgICAxLCAgIDAs
ICAgNCwgICAwLCANCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAg
MCwgICAwLCAxMTYsIDEwMSwgMTIwLCAgIDAsIA0KKyAgICAgIDQsICAgMCwgIDEyLCAgIDAsICAg
MSwgICAwLCANCisgICAgICAxLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgMTEyLCAxMTUsIA0KKyAgICAgOTUsICA1MCwgIDk1LCAgNDgsICAgMCwg
IDc3LCANCisgICAgMTA1LCAgOTksIDExNCwgMTExLCAxMTUsIDExMSwgDQorICAgIDEwMiwgMTE2
LCAgMzIsICA0MCwgIDgyLCAgNDEsIA0KKyAgICAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMy
LCANCisgICAgIDgzLCAxMDQsICA5NywgMTAwLCAxMDEsIDExNCwgDQorICAgICAzMiwgIDY3LCAx
MTEsIDEwOSwgMTEyLCAxMDUsIA0KKyAgICAxMDgsIDEwMSwgMTE0LCAgMzIsICA1NywgIDQ2LCAN
CisgICAgIDUxLCAgNDgsICA0NiwgIDU3LCAgNTAsICA0OCwgDQorICAgICA0OCwgIDQ2LCAgNDks
ICA1NCwgIDUxLCAgNTYsIA0KKyAgICAgNTIsICAgMCwgMTcxLCAxNzEsICAzMSwgICAwLCANCisg
ICAgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIDEyOCwgDQorICAgICAgMCwgICAwLCAgIDMsIDE3
NiwgIDMxLCAgIDAsIA0KKyAgICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTQ0LCANCisgICAg
ICAwLCAgIDgsICAxNSwgMTYwLCAgNjYsICAgMCwgDQorICAgICAgMCwgICAzLCAgIDAsICAgMCwg
IDE1LCAxMjgsIA0KKyAgICAgIDAsICAgMCwgMjI4LCAxNzYsICAgMCwgICA4LCANCisgICAgMjI4
LCAxNjAsICAgNCwgICAwLCAgIDAsICAgNCwgDQorICAgICAgMSwgICAwLCAgIDgsIDEyOCwgICAw
LCAgIDAsIA0KKyAgICAyNTUsIDEyOCwgICAwLCAgIDAsICAgMCwgMTYwLCANCisgICAgICAwLCAg
IDAsICA4NSwgMTYwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAyLCAgIDEsICAgMCwgICA3LCAx
MjgsIA0KKyAgICAgIDAsICAgMCwgICAwLCAxMjgsICAgMSwgICAwLCANCisgICAgICAwLCAgIDIs
ICAgMCwgICA4LCAgMTUsIDEyOCwgDQorICAgICAgMSwgICAwLCAyMjgsIDEyOCwgMjU1LCAyNTUs
IA0KKyAgICAgIDAsICAgMA0KK307DQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91
Z2hwcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hwcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMwYTJjN2Q0
ODJiMzNiZTg2Njc0OTU0NzU1YTM5OTU4NWM4YWJlYTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9j
b21waWxlZC9wYXNzdGhyb3VnaHBzLmgKQEAgLTAsMCArMSw2MiBAQAorI2lmIDANCisvLw0KKy8v
IEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIw
MC4xNjM4NA0KKy8vDQorLy8vDQorLy8gUGFyYW1ldGVyczoNCisvLw0KKy8vICAgc2FtcGxlcjJE
IHRleDsNCisvLw0KKy8vDQorLy8gUmVnaXN0ZXJzOg0KKy8vDQorLy8gICBOYW1lICAgICAgICAg
UmVnICAgU2l6ZQ0KKy8vICAgLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0NCisvLyAgIHRleCAgICAg
ICAgICBzMCAgICAgICAxDQorLy8NCisNCisgICAgcHNfMl8wDQorICAgIGRjbCB0MC54eQ0KKyAg
ICBkY2xfMmQgczANCisgICAgdGV4bGQgcjAsIHQwLCBzMA0KKyAgICBtb3Ygb0MwLCByMA0KKw0K
Ky8vIGFwcHJveGltYXRlbHkgMiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkICgxIHRleHR1cmUsIDEg
YXJpdGhtZXRpYykNCisjZW5kaWYNCisNCitjb25zdCBCWVRFIGdfcHMyMF9wYXNzdGhyb3VnaHBz
W10gPQ0KK3sNCisgICAgICAwLCAgIDIsIDI1NSwgMjU1LCAyNTQsIDI1NSwgDQorICAgICAzMywg
ICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIA0KKyAgICAgMjgsICAgMCwgICAwLCAgIDAsICA3NSwg
ICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTUsIDI1NSwgDQorICAgICAgMSwgICAw
LCAgIDAsICAgMCwgIDI4LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAw
LCANCisgICAgIDY4LCAgIDAsICAgMCwgICAwLCAgNDgsICAgMCwgDQorICAgICAgMCwgICAwLCAg
IDMsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICA1MiwgICAwLCAN
CisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgIDExNiwgMTAxLCAxMjAs
ICAgMCwgICA0LCAgIDAsIA0KKyAgICAgMTIsICAgMCwgICAxLCAgIDAsICAgMSwgICAwLCANCisg
ICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAxMTIsIDEx
NSwgIDk1LCAgNTAsIA0KKyAgICAgOTUsICA0OCwgICAwLCAgNzcsIDEwNSwgIDk5LCANCisgICAg
MTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgDQorICAgICAzMiwgIDQwLCAgODIsICA0MSwg
IDMyLCAgNzIsIA0KKyAgICAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgMTA0LCANCisgICAgIDk3
LCAxMDAsIDEwMSwgMTE0LCAgMzIsICA2NywgDQorICAgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4
LCAxMDEsIA0KKyAgICAxMTQsICAzMiwgIDU3LCAgNDYsICA1MSwgIDQ4LCANCisgICAgIDQ2LCAg
NTcsICA1MCwgIDQ4LCAgNDgsICA0NiwgDQorICAgICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCAg
IDAsIA0KKyAgICAxNzEsIDE3MSwgIDMxLCAgIDAsICAgMCwgICAyLCANCisgICAgICAwLCAgIDAs
ICAgMCwgMTI4LCAgIDAsICAgMCwgDQorICAgICAgMywgMTc2LCAgMzEsICAgMCwgICAwLCAgIDIs
IA0KKyAgICAgIDAsICAgMCwgICAwLCAxNDQsICAgMCwgICA4LCANCisgICAgIDE1LCAxNjAsICA2
NiwgICAwLCAgIDAsICAgMywgDQorICAgICAgMCwgICAwLCAgMTUsIDEyOCwgICAwLCAgIDAsIA0K
KyAgICAyMjgsIDE3NiwgICAwLCAgIDgsIDIyOCwgMTYwLCANCisgICAgICAxLCAgIDAsICAgMCwg
ICAyLCAgIDAsICAgOCwgDQorICAgICAxNSwgMTI4LCAgIDAsICAgMCwgMjI4LCAxMjgsIA0KKyAg
ICAyNTUsIDI1NSwgICAwLCAgIDANCit9Ow0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3N0YW5k
YXJkdnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3N0YW5kYXJkdnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNmI4OTU5NWNi
YjU1Y2MzMmMzYjgzNzNkNzgxMWMwOWYwYWY0OTYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29t
cGlsZWQvc3RhbmRhcmR2cy5oCkBAIC0wLDAgKzEsNjcgQEAKKyNpZiAwDQorLy8NCisvLyBHZW5l
cmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYz
ODQNCisvLw0KKy8vLw0KKy8vIFBhcmFtZXRlcnM6DQorLy8NCisvLyAgIGZsb2F0NCBoYWxmUGl4
ZWxTaXplOw0KKy8vDQorLy8NCisvLyBSZWdpc3RlcnM6DQorLy8NCisvLyAgIE5hbWUgICAgICAg
ICAgUmVnICAgU2l6ZQ0KKy8vICAgLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tDQorLy8gICBoYWxm
UGl4ZWxTaXplIGMwICAgICAgIDENCisvLw0KKw0KKyAgICB2c18yXzANCisgICAgZGVmIGMxLCAw
LjUsIC0wLjUsIDEsIDANCisgICAgZGNsX3Bvc2l0aW9uIHYwDQorICAgIGFkZCBvUG9zLCB2MCwg
YzANCisgICAgbWFkIG9UMCwgdjAsIGMxLnh5enosIGMxLnh4d3cNCisNCisvLyBhcHByb3hpbWF0
ZWx5IDIgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KKyNlbmRpZg0KKw0KK2NvbnN0IEJZVEUgZ192
czIwX3N0YW5kYXJkdnNbXSA9DQorew0KKyAgICAgIDAsICAgMiwgMjU0LCAyNTUsIDI1NCwgMjU1
LCANCisgICAgIDM2LCAgIDAsICA2NywgIDg0LCAgNjUsICA2NiwgDQorICAgICAyOCwgICAwLCAg
IDAsICAgMCwgIDg3LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDIsIDI1NCwgMjU1LCAN
CisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgMjgsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAs
ICAgMSwgICAwLCAgIDAsIA0KKyAgICAgODAsICAgMCwgICAwLCAgIDAsICA0OCwgICAwLCANCisg
ICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAg
MCwgIDY0LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAg
MTA0LCAgOTcsIDEwOCwgMTAyLCAgODAsIDEwNSwgDQorICAgIDEyMCwgMTAxLCAxMDgsICA4Mywg
MTA1LCAxMjIsIA0KKyAgICAxMDEsICAgMCwgMTcxLCAxNzEsICAgMSwgICAwLCANCisgICAgICAz
LCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgMTE4LCAxMTUsICA5NSwgIDUwLCANCisgICAgIDk1LCAg
NDgsICAgMCwgIDc3LCAxMDUsICA5OSwgDQorICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAx
MTYsIA0KKyAgICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCANCisgICAgIDc2LCAgODMs
ICA3NiwgIDMyLCAgODMsIDEwNCwgDQorICAgICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCAgNjcs
IA0KKyAgICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCANCisgICAgMTE0LCAgMzIsICA1
NywgIDQ2LCAgNTEsICA0OCwgDQorICAgICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4LCAgNDYsIA0K
KyAgICAgNDksICA1NCwgIDUxLCAgNTYsICA1MiwgICAwLCANCisgICAgMTcxLCAxNzEsICA4MSwg
ICAwLCAgIDAsICAgNSwgDQorICAgICAgMSwgICAwLCAgMTUsIDE2MCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICA2MywgICAwLCAgIDAsICAgMCwgMTkxLCANCisgICAgICAwLCAgIDAsIDEyOCwgIDYz
LCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgMzEsICAgMCwgICAwLCAgIDIsIA0KKyAgICAg
IDAsICAgMCwgICAwLCAxMjgsICAgMCwgICAwLCANCisgICAgIDE1LCAxNDQsICAgMiwgICAwLCAg
IDAsICAgMywgDQorICAgICAgMCwgICAwLCAgMTUsIDE5MiwgICAwLCAgIDAsIA0KKyAgICAyMjgs
IDE0NCwgICAwLCAgIDAsIDIyOCwgMTYwLCANCisgICAgICA0LCAgIDAsICAgMCwgICA0LCAgIDAs
ICAgMCwgDQorICAgICAxNSwgMjI0LCAgIDAsICAgMCwgMjI4LCAxNDQsIA0KKyAgICAgIDEsICAg
MCwgMTY0LCAxNjAsICAgMSwgICAwLCANCisgICAgMjQwLCAxNjAsIDI1NSwgMjU1LCAgIDAsICAg
MA0KK307DQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVycy5iYXQgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9nZW5lcmF0
ZV9zaGFkZXJzLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYTEyNTkxNDg5MzZlNjllZDZjMDNmNGI5NzM1ZWMz
ODVjMjcyNjZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVycy5iYXQKQEAg
LTAsMCArMSwxNCBAQAorQEVDSE8gT0ZGDQorUkVNDQorUkVNIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KK1JFTSBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlDQorUkVNIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQorUkVNDQorDQorUEFU
SCAlUEFUSCU7JVByb2dyYW1GaWxlcyh4ODYpJVxXaW5kb3dzIEtpdHNcOC4wXGJpblx4ODY7JURY
U0RLX0RJUiVcVXRpbGl0aWVzXGJpblx4ODYNCisNCitmeGMgL0Ugc3RhbmRhcmR2cyAvVCB2c18y
XzAgL0ZoIGNvbXBpbGVkL3N0YW5kYXJkdnMuaCBCbGl0LnZzDQorZnhjIC9FIGZsaXB5dnMgL1Qg
dnNfMl8wIC9GaCBjb21waWxlZC9mbGlweXZzLmggQmxpdC52cw0KK2Z4YyAvRSBwYXNzdGhyb3Vn
aHBzIC9UIHBzXzJfMCAvRmggY29tcGlsZWQvcGFzc3Rocm91Z2hwcy5oIEJsaXQucHMNCitmeGMg
L0UgbHVtaW5hbmNlcHMgL1QgcHNfMl8wIC9GaCBjb21waWxlZC9sdW1pbmFuY2Vwcy5oIEJsaXQu
cHMNCitmeGMgL0UgY29tcG9uZW50bWFza3BzIC9UIHBzXzJfMCAvRmggY29tcGlsZWQvY29tcG9u
ZW50bWFza3BzLmggQmxpdC5wcw0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS92ZXJ0ZXhjb252ZXJzaW9uLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvdmVydGV4Y29udmVy
c2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjU5MGI5ZDQ4YTM4NmZmYzE3MjU3MWRhNDRkOWJlMjBkMTAyOTAx
OWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvdmVydGV4Y29udmVyc2lvbi5oCkBAIC0wLDAgKzEsMjAzIEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisvLyB2ZXJ0ZXhjb252ZXJzaW9uLmg6IEEgbGlicmFyeSBvZiB2
ZXJ0ZXggY29udmVyc2lvbiBjbGFzc2VzIHRoYXQgY2FuIGJlIHVzZWQgdG8gYnVpbGQKKy8vIHRo
ZSBGb3JtYXRDb252ZXJ0ZXIgb2JqZWN0cyB1c2VkIGJ5IHRoZSBidWZmZXIgY29udmVyc2lvbiBz
eXN0ZW0uCisKKyNpZm5kZWYgTElCR0xFU1YyX1ZFUlRFWENPTlZFUlNJT05fSF8KKyNkZWZpbmUg
TElCR0xFU1YyX1ZFUlRFWENPTlZFUlNJT05fSF8KKworbmFtZXNwYWNlIHJ4Cit7CisKKy8vIENv
bnZlcnNpb24gdHlwZXM6CisvLyBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eTogdHJ1ZSBpZiB0
aGlzIGlzIGFuIGlkZW50aXR5IHRyYW5zZm9ybSwgZmFsc2Ugb3RoZXJ3aXNlCisvLyBzdGF0aWMg
VSBjb252ZXJ0KFQpOiBjb252ZXJ0IGEgc2luZ2xlIGVsZW1lbnQgZnJvbSB0aGUgaW5wdXQgdHlw
ZSB0byB0aGUgb3V0cHV0IHR5cGUKKy8vIHR5cGVkZWYgLi4uIE91dHB1dFR5cGU6IHRoZSB0eXBl
IHByb2R1Y2VkIGJ5IHRoaXMgY29udmVyc2lvbgorCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK3N0cnVj
dCBJZGVudGl0eQoreworICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0gdHJ1ZTsKKwor
ICAgIHR5cGVkZWYgVCBPdXRwdXRUeXBlOworCisgICAgc3RhdGljIFQgY29udmVydChUIHgpCisg
ICAgeworICAgICAgICByZXR1cm4geDsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgRnJv
bVQsIGNsYXNzIFRvVD4KK3N0cnVjdCBDYXN0Cit7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaWRl
bnRpdHkgPSBmYWxzZTsKKworICAgIHR5cGVkZWYgVG9UIE91dHB1dFR5cGU7CisKKyAgICBzdGF0
aWMgVG9UIGNvbnZlcnQoRnJvbVQgeCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUb1Q+KHgpOworICAgIH0KK307CisKK3RlbXBsYXRlIDxjbGFzcyBUPgorc3RydWN0IENhc3Q8
VCwgVD4KK3sKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9IHRydWU7CisKKyAgICB0
eXBlZGVmIFQgT3V0cHV0VHlwZTsKKworICAgIHN0YXRpYyBUIGNvbnZlcnQoVCB4KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHgpOworICAgIH0KK307CisKK3RlbXBsYXRl
IDxjbGFzcyBUPgorc3RydWN0IE5vcm1hbGl6ZQoreworICAgIHN0YXRpYyBjb25zdCBib29sIGlk
ZW50aXR5ID0gZmFsc2U7CisKKyAgICB0eXBlZGVmIGZsb2F0IE91dHB1dFR5cGU7CisKKyAgICBz
dGF0aWMgZmxvYXQgY29udmVydChUIHgpCisgICAgeworICAgICAgICB0eXBlZGVmIHN0ZDo6bnVt
ZXJpY19saW1pdHM8VD4gTkw7CisgICAgICAgIGZsb2F0IGYgPSBzdGF0aWNfY2FzdDxmbG9hdD4o
eCk7CisKKyAgICAgICAgaWYgKE5MOjppc19zaWduZWQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IC8vIGNvbnN0IGZsb2F0ID0+IFZDMjAwOCBjb21wdXRlcyBpdCBhdCBjb21waWxlIHRpbWUKKyAg
ICAgICAgICAgIC8vIHN0YXRpYyBjb25zdCBmbG9hdCA9PiBWQzIwMDggY29tcHV0ZXMgaXQgdGhl
IGZpcnN0IHRpbWUgd2UgZ2V0IGhlcmUsIHN0b3JlcyBpdCB0byBtZW1vcnkgd2l0aCBzdGF0aWMg
Z3VhcmQgYW5kIGFsbCB0aGF0LgorICAgICAgICAgICAgY29uc3QgZmxvYXQgZGl2aXNvciA9IDEu
MGYvKDIqc3RhdGljX2Nhc3Q8ZmxvYXQ+KE5MOjptYXgoKSkrMSk7CisgICAgICAgICAgICByZXR1
cm4gKDIqZisxKSpkaXZpc29yOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGYvTkw6Om1heCgpOworICAgICAgICB9CisgICAgfQorfTsKKwor
dGVtcGxhdGUgPGNsYXNzIEZyb21UeXBlLCBzdGQ6OnNpemVfdCBTY2FsZUJpdHM+CitzdHJ1Y3Qg
Rml4ZWRUb0Zsb2F0Cit7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHkgPSBmYWxzZTsK
KworICAgIHR5cGVkZWYgZmxvYXQgT3V0cHV0VHlwZTsKKworICAgIHN0YXRpYyBmbG9hdCBjb252
ZXJ0KEZyb21UeXBlIHgpCisgICAgeworICAgICAgICBjb25zdCBmbG9hdCBkaXZpc29yID0gMS4w
ZiAvIHN0YXRpY19jYXN0PGZsb2F0PihzdGF0aWNfY2FzdDxGcm9tVHlwZT4oMSkgPDwgU2NhbGVC
aXRzKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih4KSAqIGRpdmlzb3I7Cisg
ICAgfQorfTsKKworLy8gV2lkZW4gdHlwZXM6CisvLyBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50
IGluaXRpYWxXaWR0aDogbnVtYmVyIG9mIGNvbXBvbmVudHMgYmVmb3JlIGNvbnZlcnNpb24KKy8v
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZmluYWxXaWR0aDogbnVtYmVyIG9mIGNvbXBvbmVu
dHMgYWZ0ZXIgY29udmVyc2lvbgorCisvLyBGbG9hdCBpcyBzdXBwb3J0ZWQgYXQgYW55IHNpemUu
Cit0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTj4KK3N0cnVjdCBOb1dpZGVuCit7CisgICAgc3RhdGlj
IGNvbnN0IHN0ZDo6c2l6ZV90IGluaXRpYWxXaWR0aCA9IE47CisgICAgc3RhdGljIGNvbnN0IHN0
ZDo6c2l6ZV90IGZpbmFsV2lkdGggPSBOOworfTsKKworLy8gU0hPUlQsIG5vcm0tU0hPUlQsIG5v
cm0tVU5TSUdORURfU0hPUlQgYXJlIHN1cHBvcnRlZCBidXQgb25seSB3aXRoIDIgb3IgNCBjb21w
b25lbnRzCit0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTj4KK3N0cnVjdCBXaWRlblRvRXZlbgorewor
ICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBpbml0aWFsV2lkdGggPSBOOworICAgIHN0YXRp
YyBjb25zdCBzdGQ6OnNpemVfdCBmaW5hbFdpZHRoID0gTisoTiYxKTsKK307CisKK3RlbXBsYXRl
IDxzdGQ6OnNpemVfdCBOPgorc3RydWN0IFdpZGVuVG9Gb3VyCit7CisgICAgc3RhdGljIGNvbnN0
IHN0ZDo6c2l6ZV90IGluaXRpYWxXaWR0aCA9IE47CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6
ZV90IGZpbmFsV2lkdGggPSA0OworfTsKKworLy8gTW9zdCB0eXBlcyBoYXZlIDAgYW5kIDEgdGhh
dCBhcmUganVzdCB0aGF0LgordGVtcGxhdGUgPGNsYXNzIFQ+CitzdHJ1Y3QgU2ltcGxlRGVmYXVs
dFZhbHVlcworeworICAgIHN0YXRpYyBUIHplcm8oKSB7IHJldHVybiBzdGF0aWNfY2FzdDxUPigw
KTsgfQorICAgIHN0YXRpYyBUIG9uZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KDEpOyB9Cit9
OworCisvLyBCdXQgbm9ybWFsaXNlZCB0eXBlcyBvbmx5IHN0b3JlIFswLDFdIG9yIFstMSwxXSBz
byAxLjAgaXMgcmVwcmVzZW50ZWQgYnkgdGhlIG1heCB2YWx1ZS4KK3RlbXBsYXRlIDxjbGFzcyBU
Pgorc3RydWN0IE5vcm1hbGl6ZWREZWZhdWx0VmFsdWVzCit7CisgICAgc3RhdGljIFQgemVybygp
IHsgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KDApOyB9CisgICAgc3RhdGljIFQgb25lKCkgeyByZXR1
cm4gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCk7IH0KK307CisKKy8vIENvbnZlcnRlcjoK
Ky8vIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5OiB0cnVlIGlmIHRoaXMgaXMgYW4gaWRlbnRp
dHkgdHJhbnNmb3JtICh3aXRoIG5vIHdpZGVuaW5nKQorLy8gc3RhdGljIGNvbnN0IHN0ZDo6c2l6
ZV90IGZpbmFsU2l6ZTogbnVtYmVyIG9mIGJ5dGVzIHBlciBvdXRwdXQgdmVydGV4CisvLyBzdGF0
aWMgdm9pZCBjb252ZXJ0QXJyYXkoY29uc3Qgdm9pZCAqaW4sIHN0ZDo6c2l6ZV90IHN0cmlkZSwg
c3RkOjpzaXplX3Qgbiwgdm9pZCAqb3V0KTogY29udmVydCBhbiBhcnJheSBvZiB2ZXJ0aWNlcy4g
SW5wdXQgbWF5IGJlIHN0cmlkZWQsIGJ1dCBvdXRwdXQgd2lsbCBiZSB1bnN0cmlkZWQuCisKK3Rl
bXBsYXRlIDxjbGFzcyBJblQsIGNsYXNzIFdpZGVuUnVsZSwgY2xhc3MgQ29udmVydGVyLCBjbGFz
cyBEZWZhdWx0VmFsdWVSdWxlID0gU2ltcGxlRGVmYXVsdFZhbHVlczxJblQ+ID4KK3N0cnVjdCBW
ZXJ0ZXhEYXRhQ29udmVydGVyCit7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDb252ZXJ0ZXI6Ok91
dHB1dFR5cGUgT3V0cHV0VHlwZTsKKyAgICB0eXBlZGVmIEluVCBJbnB1dFR5cGU7CisKKyAgICBz
dGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9IChXaWRlblJ1bGU6OmluaXRpYWxXaWR0aCA9PSBX
aWRlblJ1bGU6OmZpbmFsV2lkdGgpICYmIENvbnZlcnRlcjo6aWRlbnRpdHk7CisgICAgc3RhdGlj
IGNvbnN0IHN0ZDo6c2l6ZV90IGZpbmFsU2l6ZSA9IFdpZGVuUnVsZTo6ZmluYWxXaWR0aCAqIHNp
emVvZihPdXRwdXRUeXBlKTsKKworICAgIHN0YXRpYyB2b2lkIGNvbnZlcnRBcnJheShjb25zdCBJ
bnB1dFR5cGUgKmluLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90IG4sIE91dHB1dFR5
cGUgKm91dCkKKyAgICB7CisgICAgICAgIGZvciAoc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBuOyBp
KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IElucHV0VHlwZSAqZWluID0gcG9pbnRl
ckFkZEJ5dGVzKGluLCBpICogc3RyaWRlKTsKKworICAgICAgICAgICAgY29weUNvbXBvbmVudChv
dXQsIGVpbiwgMCwgc3RhdGljX2Nhc3Q8T3V0cHV0VHlwZT4oRGVmYXVsdFZhbHVlUnVsZTo6emVy
bygpKSk7CisgICAgICAgICAgICBjb3B5Q29tcG9uZW50KG91dCwgZWluLCAxLCBzdGF0aWNfY2Fz
dDxPdXRwdXRUeXBlPihEZWZhdWx0VmFsdWVSdWxlOjp6ZXJvKCkpKTsKKyAgICAgICAgICAgIGNv
cHlDb21wb25lbnQob3V0LCBlaW4sIDIsIHN0YXRpY19jYXN0PE91dHB1dFR5cGU+KERlZmF1bHRW
YWx1ZVJ1bGU6Onplcm8oKSkpOworICAgICAgICAgICAgY29weUNvbXBvbmVudChvdXQsIGVpbiwg
Mywgc3RhdGljX2Nhc3Q8T3V0cHV0VHlwZT4oRGVmYXVsdFZhbHVlUnVsZTo6b25lKCkpKTsKKwor
ICAgICAgICAgICAgb3V0ICs9IFdpZGVuUnVsZTo6ZmluYWxXaWR0aDsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHN0YXRpYyB2b2lkIGNvbnZlcnRBcnJheShjb25zdCB2b2lkICppbiwgc3RkOjpz
aXplX3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBuLCB2b2lkICpvdXQpCisgICAgeworICAgICAgICBy
ZXR1cm4gY29udmVydEFycmF5KHN0YXRpY19jYXN0PGNvbnN0IElucHV0VHlwZSo+KGluKSwgc3Ry
aWRlLCBuLCBzdGF0aWNfY2FzdDxPdXRwdXRUeXBlKj4ob3V0KSk7CisgICAgfQorCisgIHByaXZh
dGU6CisgICAgLy8gQWR2YW5jZSB0aGUgZ2l2ZW4gcG9pbnRlciBieSBhIG51bWJlciBvZiBieXRl
cyAobm90IHBvaW50ZWQtdG8gZWxlbWVudHMpLgorICAgIHRlbXBsYXRlIDxjbGFzcyBUPgorICAg
IHN0YXRpYyBUICpwb2ludGVyQWRkQnl0ZXMoVCAqYmFzZVB0ciwgc3RkOjpzaXplX3QgbnVtQnl0
ZXMpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUICo+KHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90PihiYXNlUHRyKSArIG51bUJ5dGVzKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgdm9pZCBjb3B5Q29tcG9uZW50KE91dHB1dFR5cGUgKm91dCwgY29uc3QgSW5wdXRUeXBl
ICppbiwgc3RkOjpzaXplX3QgZWxlbWVudGluZGV4LCBPdXRwdXRUeXBlIGRlZmF1bHR2YWx1ZSkK
KyAgICB7CisgICAgICAgIGlmIChXaWRlblJ1bGU6OmZpbmFsV2lkdGggPiBlbGVtZW50aW5kZXgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChXaWRlblJ1bGU6OmluaXRpYWxXaWR0aCA+IGVs
ZW1lbnRpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRbZWxlbWVudGlu
ZGV4XSA9IENvbnZlcnRlcjo6Y29udmVydChpbltlbGVtZW50aW5kZXhdKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRb
ZWxlbWVudGluZGV4XSA9IGRlZmF1bHR2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KK307CisKK30KKworI2VuZGlmICAgLy8gTElCR0xFU1YyX1ZFUlRFWENPTlZFUlNJT05f
SF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvcmVuZGVyZXIxMV91dGlscy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL3JlbmRlcmVyMTFfdXRpbHMuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAxMzgwMGRhMjU4Y2U1OTM5NzM1NDc4ZDVlYTg3ZmQxMzdjYjhhMDgxLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXIxMV91dGlscy5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw2ODggKzAsMCBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgi
Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgotLy8KLQotLy8gcmVuZGVyZXIxMV91dGlscy5jcHA6IENvbnZlcnNpb24gZnVu
Y3Rpb25zIGFuZCBvdGhlciB1dGlsaXR5IHJvdXRpbmVzCi0vLyBzcGVjaWZpYyB0byB0aGUgRDNE
MTEgcmVuZGVyZXIuCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXIxMV91
dGlscy5oIgotCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0KLW5hbWVzcGFjZSBnbF9kM2Qx
MQotewotCi1EM0QxMV9CTEVORCBDb252ZXJ0QmxlbmRGdW5jKEdMZW51bSBnbEJsZW5kLCBib29s
IGlzQWxwaGEpCi17Ci0gICAgRDNEMTFfQkxFTkQgZDNkQmxlbmQgPSBEM0QxMV9CTEVORF9aRVJP
OwotCi0gICAgc3dpdGNoIChnbEJsZW5kKQotICAgIHsKLSAgICAgIGNhc2UgR0xfWkVSTzogICAg
ICAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzRDExX0JMRU5EX1pFUk87ICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9PTkU6ICAgICAgICAgICAgICAgICAgICAgIGQzZEJs
ZW5kID0gRDNEMTFfQkxFTkRfT05FOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX1NSQ19DT0xPUjogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSAoaXNBbHBoYSA/IEQzRDEx
X0JMRU5EX1NSQ19BTFBIQSA6IEQzRDExX0JMRU5EX1NSQ19DT0xPUik7ICAgICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19DT0xPUjogICAgICBkM2RCbGVuZCA9IChp
c0FscGhhID8gRDNEMTFfQkxFTkRfSU5WX1NSQ19BTFBIQSA6IEQzRDExX0JMRU5EX0lOVl9TUkNf
Q09MT1IpOyAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9EU1RfQ09MT1I6ICAgICAgICAgICAgICAg
IGQzZEJsZW5kID0gKGlzQWxwaGEgPyBEM0QxMV9CTEVORF9ERVNUX0FMUEhBIDogRDNEMTFfQkxF
TkRfREVTVF9DT0xPUik7ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX09ORV9NSU5VU19E
U1RfQ09MT1I6ICAgICAgZDNkQmxlbmQgPSAoaXNBbHBoYSA/IEQzRDExX0JMRU5EX0lOVl9ERVNU
X0FMUEhBIDogRDNEMTFfQkxFTkRfSU5WX0RFU1RfQ09MT1IpOyBicmVhazsKLSAgICAgIGNhc2Ug
R0xfU1JDX0FMUEhBOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzRDExX0JMRU5EX1NSQ19B
TFBIQTsgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JDX0FMUEhB
OiAgICAgIGQzZEJsZW5kID0gRDNEMTFfQkxFTkRfSU5WX1NSQ19BTFBIQTsgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0RTVF9BTFBIQTogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0Qx
MV9CTEVORF9ERVNUX0FMUEhBOyAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfT05FX01J
TlVTX0RTVF9BTFBIQTogICAgICBkM2RCbGVuZCA9IEQzRDExX0JMRU5EX0lOVl9ERVNUX0FMUEhB
OyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DT05TVEFOVF9DT0xPUjogICAgICAgICAgIGQz
ZEJsZW5kID0gRDNEMTFfQkxFTkRfQkxFTkRfRkFDVE9SOyAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUjogZDNkQmxlbmQgPSBEM0QxMV9CTEVORF9J
TlZfQkxFTkRfRkFDVE9SOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ09OU1RBTlRfQUxQSEE6
ICAgICAgICAgICBkM2RCbGVuZCA9IEQzRDExX0JMRU5EX0JMRU5EX0ZBQ1RPUjsgICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEE6IGQzZEJsZW5kID0g
RDNEMTFfQkxFTkRfSU5WX0JMRU5EX0ZBQ1RPUjsgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NS
Q19BTFBIQV9TQVRVUkFURTogICAgICAgZDNkQmxlbmQgPSBEM0QxMV9CTEVORF9TUkNfQUxQSEFf
U0FUOyAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGQzZEJsZW5kOwotfQotCi1EM0QxMV9CTEVORF9PUCBDb252ZXJ0QmxlbmRP
cChHTGVudW0gZ2xCbGVuZE9wKQotewotICAgIEQzRDExX0JMRU5EX09QIGQzZEJsZW5kT3AgPSBE
M0QxMV9CTEVORF9PUF9BREQ7Ci0KLSAgICBzd2l0Y2ggKGdsQmxlbmRPcCkKLSAgICB7Ci0gICAg
ICBjYXNlIEdMX0ZVTkNfQUREOiAgICAgICAgICAgICAgZDNkQmxlbmRPcCA9IEQzRDExX0JMRU5E
X09QX0FERDsgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GVU5DX1NVQlRSQUNUOiAg
ICAgICAgIGQzZEJsZW5kT3AgPSBEM0QxMV9CTEVORF9PUF9TVUJUUkFDVDsgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUOiBkM2RCbGVuZE9wID0gRDNEMTFf
QkxFTkRfT1BfUkVWX1NVQlRSQUNUOyAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOwotICAgIH0KLQotICAgIHJldHVybiBkM2RCbGVuZE9wOwotfQotCi1VSU5UOCBDb252ZXJ0
Q29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpCi17
Ci0gICAgVUlOVDggbWFzayA9IDA7Ci0gICAgaWYgKHJlZCkKLSAgICB7Ci0gICAgICAgIG1hc2sg
fD0gRDNEMTFfQ09MT1JfV1JJVEVfRU5BQkxFX1JFRDsKLSAgICB9Ci0gICAgaWYgKGdyZWVuKQot
ICAgIHsKLSAgICAgICAgbWFzayB8PSBEM0QxMV9DT0xPUl9XUklURV9FTkFCTEVfR1JFRU47Ci0g
ICAgfQotICAgIGlmIChibHVlKQotICAgIHsKLSAgICAgICAgbWFzayB8PSBEM0QxMV9DT0xPUl9X
UklURV9FTkFCTEVfQkxVRTsKLSAgICB9Ci0gICAgaWYgKGFscGhhKQotICAgIHsKLSAgICAgICAg
bWFzayB8PSBEM0QxMV9DT0xPUl9XUklURV9FTkFCTEVfQUxQSEE7Ci0gICAgfQotICAgIHJldHVy
biBtYXNrOwotfQotCi1EM0QxMV9DVUxMX01PREUgQ29udmVydEN1bGxNb2RlKGJvb2wgY3VsbEVu
YWJsZWQsIEdMZW51bSBjdWxsTW9kZSkKLXsKLSAgICBEM0QxMV9DVUxMX01PREUgY3VsbCA9IEQz
RDExX0NVTExfTk9ORTsKLQotICAgIGlmIChjdWxsRW5hYmxlZCkKLSAgICB7Ci0gICAgICAgIHN3
aXRjaCAoY3VsbE1vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZST05UOiAgICAg
ICAgICAgIGN1bGwgPSBEM0QxMV9DVUxMX0ZST05UOyAgICBicmVhazsKLSAgICAgICAgICBjYXNl
IEdMX0JBQ0s6ICAgICAgICAgICAgIGN1bGwgPSBEM0QxMV9DVUxMX0JBQ0s7ICAgICBicmVhazsK
LSAgICAgICAgICBjYXNlIEdMX0ZST05UX0FORF9CQUNLOiAgIGN1bGwgPSBEM0QxMV9DVUxMX05P
TkU7ICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGN1bGwgPSBEM0QxMV9DVUxMX05P
TkU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGN1bGw7Ci19Ci0KLUQzRDExX0NPTVBBUklTT05fRlVO
QyBDb252ZXJ0Q29tcGFyaXNvbihHTGVudW0gY29tcGFyaXNvbikKLXsKLSAgICBEM0QxMV9DT01Q
QVJJU09OX0ZVTkMgZDNkQ29tcCA9IEQzRDExX0NPTVBBUklTT05fTkVWRVI7Ci0gICAgc3dpdGNo
IChjb21wYXJpc29uKQotICAgIHsKLSAgICAgIGNhc2UgR0xfTkVWRVI6ICAgIGQzZENvbXAgPSBE
M0QxMV9DT01QQVJJU09OX05FVkVSOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FM
V0FZUzogICBkM2RDb21wID0gRDNEMTFfQ09NUEFSSVNPTl9BTFdBWVM7ICAgICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9MRVNTOiAgICAgZDNkQ29tcCA9IEQzRDExX0NPTVBBUklTT05fTEVT
UzsgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTEVRVUFMOiAgIGQzZENvbXAgPSBE
M0QxMV9DT01QQVJJU09OX0xFU1NfRVFVQUw7ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0VR
VUFMOiAgICBkM2RDb21wID0gRDNEMTFfQ09NUEFSSVNPTl9FUVVBTDsgICAgICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9HUkVBVEVSOiAgZDNkQ29tcCA9IEQzRDExX0NPTVBBUklTT05fR1JF
QVRFUjsgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfR0VRVUFMOiAgIGQzZENvbXAgPSBE
M0QxMV9DT01QQVJJU09OX0dSRUFURVJfRVFVQUw7ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX05P
VEVRVUFMOiBkM2RDb21wID0gRDNEMTFfQ09NUEFSSVNPTl9OT1RfRVFVQUw7ICAgICAgIGJyZWFr
OwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZDNk
Q29tcDsKLX0KLQotRDNEMTFfREVQVEhfV1JJVEVfTUFTSyBDb252ZXJ0RGVwdGhNYXNrKGJvb2wg
ZGVwdGhXcml0ZUVuYWJsZWQpCi17Ci0gICAgcmV0dXJuIGRlcHRoV3JpdGVFbmFibGVkID8gRDNE
MTFfREVQVEhfV1JJVEVfTUFTS19BTEwgOiBEM0QxMV9ERVBUSF9XUklURV9NQVNLX1pFUk87Ci19
Ci0KLVVJTlQ4IENvbnZlcnRTdGVuY2lsTWFzayhHTHVpbnQgc3RlbmNpbG1hc2spCi17Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PFVJTlQ4PihzdGVuY2lsbWFzayk7Ci19Ci0KLUQzRDExX1NURU5D
SUxfT1AgQ29udmVydFN0ZW5jaWxPcChHTGVudW0gc3RlbmNpbE9wKQotewotICAgIEQzRDExX1NU
RU5DSUxfT1AgZDNkU3RlbmNpbE9wID0gRDNEMTFfU1RFTkNJTF9PUF9LRUVQOwotCi0gICAgc3dp
dGNoIChzdGVuY2lsT3ApCi0gICAgewotICAgICAgY2FzZSBHTF9aRVJPOiAgICAgIGQzZFN0ZW5j
aWxPcCA9IEQzRDExX1NURU5DSUxfT1BfWkVSTzsgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
S0VFUDogICAgICBkM2RTdGVuY2lsT3AgPSBEM0QxMV9TVEVOQ0lMX09QX0tFRVA7ICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX1JFUExBQ0U6ICAgZDNkU3RlbmNpbE9wID0gRDNEMTFfU1RFTkNJ
TF9PUF9SRVBMQUNFOyAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9JTkNSOiAgICAgIGQzZFN0ZW5j
aWxPcCA9IEQzRDExX1NURU5DSUxfT1BfSU5DUl9TQVQ7ICBicmVhazsKLSAgICAgIGNhc2UgR0xf
REVDUjogICAgICBkM2RTdGVuY2lsT3AgPSBEM0QxMV9TVEVOQ0lMX09QX0RFQ1JfU0FUOyAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX0lOVkVSVDogICAgZDNkU3RlbmNpbE9wID0gRDNEMTFfU1RFTkNJ
TF9PUF9JTlZFUlQ7ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9JTkNSX1dSQVA6IGQzZFN0ZW5j
aWxPcCA9IEQzRDExX1NURU5DSUxfT1BfSU5DUjsgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
REVDUl9XUkFQOiBkM2RTdGVuY2lsT3AgPSBEM0QxMV9TVEVOQ0lMX09QX0RFQ1I7ICAgICAgYnJl
YWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBk
M2RTdGVuY2lsT3A7Ci19Ci0KLUQzRDExX0ZJTFRFUiBDb252ZXJ0RmlsdGVyKEdMZW51bSBtaW5G
aWx0ZXIsIEdMZW51bSBtYWdGaWx0ZXIsIGZsb2F0IG1heEFuaXNvdHJvcHkpCi17Ci0gICAgaWYg
KG1heEFuaXNvdHJvcHkgPiAxLjBmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEQzRDExX0VOQ09E
RV9BTklTT1RST1BJQ19GSUxURVIoZmFsc2UpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAg
ICAgICBEM0QxMV9GSUxURVJfVFlQRSBkeE1pbiA9IEQzRDExX0ZJTFRFUl9UWVBFX1BPSU5UOwot
ICAgICAgICBEM0QxMV9GSUxURVJfVFlQRSBkeE1pcCA9IEQzRDExX0ZJTFRFUl9UWVBFX1BPSU5U
OwotICAgICAgICBzd2l0Y2ggKG1pbkZpbHRlcikKLSAgICAgICAgewotICAgICAgICAgIGNhc2Ug
R0xfTkVBUkVTVDogICAgICAgICAgICAgICAgZHhNaW4gPSBEM0QxMV9GSUxURVJfVFlQRV9QT0lO
VDsgIGR4TWlwID0gRDNEMTFfRklMVEVSX1RZUEVfUE9JTlQ7ICBicmVhazsKLSAgICAgICAgICBj
YXNlIEdMX0xJTkVBUjogICAgICAgICAgICAgICAgIGR4TWluID0gRDNEMTFfRklMVEVSX1RZUEVf
TElORUFSOyBkeE1pcCA9IEQzRDExX0ZJTFRFUl9UWVBFX1BPSU5UOyAgYnJlYWs7Ci0gICAgICAg
ICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOiBkeE1pbiA9IEQzRDExX0ZJTFRFUl9U
WVBFX1BPSU5UOyAgZHhNaXAgPSBEM0QxMV9GSUxURVJfVFlQRV9QT0lOVDsgIGJyZWFrOwotICAg
ICAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOiAgZHhNaW4gPSBEM0QxMV9GSUxU
RVJfVFlQRV9MSU5FQVI7IGR4TWlwID0gRDNEMTFfRklMVEVSX1RZUEVfUE9JTlQ7ICBicmVhazsK
LSAgICAgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjogIGR4TWluID0gRDNEMTFf
RklMVEVSX1RZUEVfUE9JTlQ7ICBkeE1pcCA9IEQzRDExX0ZJTFRFUl9UWVBFX0xJTkVBUjsgYnJl
YWs7Ci0gICAgICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUjogICBkeE1pbiA9IEQz
RDExX0ZJTFRFUl9UWVBFX0xJTkVBUjsgZHhNaXAgPSBEM0QxMV9GSUxURVJfVFlQRV9MSU5FQVI7
IGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEQzRDExX0ZJTFRFUl9UWVBFIGR4TWFnID0g
RDNEMTFfRklMVEVSX1RZUEVfUE9JTlQ7Ci0gICAgICAgIHN3aXRjaCAobWFnRmlsdGVyKQotICAg
ICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9ORUFSRVNUOiBkeE1hZyA9IEQzRDExX0ZJTFRFUl9U
WVBFX1BPSU5UOyAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9MSU5FQVI6ICBkeE1hZyA9IEQz
RDExX0ZJTFRFUl9UWVBFX0xJTkVBUjsgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogICAgICAg
ICBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIEQzRDExX0VOQ09E
RV9CQVNJQ19GSUxURVIoZHhNaW4sIGR4TWFnLCBkeE1pcCwgZmFsc2UpOwotICAgIH0KLX0KLQot
RDNEMTFfVEVYVFVSRV9BRERSRVNTX01PREUgQ29udmVydFRleHR1cmVXcmFwKEdMZW51bSB3cmFw
KQotewotICAgIHN3aXRjaCAod3JhcCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1JFUEVBVDogICAg
ICAgICAgcmV0dXJuIEQzRDExX1RFWFRVUkVfQUREUkVTU19XUkFQOwotICAgICAgY2FzZSBHTF9D
TEFNUF9UT19FREdFOiAgIHJldHVybiBEM0QxMV9URVhUVVJFX0FERFJFU1NfQ0xBTVA7Ci0gICAg
ICBjYXNlIEdMX01JUlJPUkVEX1JFUEVBVDogcmV0dXJuIEQzRDExX1RFWFRVUkVfQUREUkVTU19N
SVJST1I7Ci0gICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gRDNEMTFfVEVYVFVSRV9BRERSRVNTX1dSQVA7Ci19Ci0KLUZMT0FU
IENvbnZlcnRNaW5MT0QoR0xlbnVtIG1pbkZpbHRlciwgdW5zaWduZWQgaW50IGxvZE9mZnNldCkK
LXsKLSAgICByZXR1cm4gKG1pbkZpbHRlciA9PSBHTF9ORUFSRVNUIHx8IG1pbkZpbHRlciA9PSBH
TF9MSU5FQVIpID8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGxvZE9mZnNldCkgOiAtRkxUX01BWDsKLX0K
LQotRkxPQVQgQ29udmVydE1heExPRChHTGVudW0gbWluRmlsdGVyLCB1bnNpZ25lZCBpbnQgbG9k
T2Zmc2V0KQotewotICAgIHJldHVybiAobWluRmlsdGVyID09IEdMX05FQVJFU1QgfHwgbWluRmls
dGVyID09IEdMX0xJTkVBUikgPyBzdGF0aWNfY2FzdDxmbG9hdD4obG9kT2Zmc2V0KSA6IEZMVF9N
QVg7Ci19Ci0KLX0KLQotbmFtZXNwYWNlIGQzZDExX2dsCi17Ci0KLUdMZW51bSBDb252ZXJ0QmFj
a0J1ZmZlckZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQp
Ci0gICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STTogcmV0dXJuIEdM
X1JHQkE4X09FUzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06IHJldHVy
biBHTF9CR1JBOF9FWFQ7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwot
ICAgIH0KLQotICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Ci19Ci0KLUdMZW51bSBDb252ZXJ0RGVw
dGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1h
dCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1VOS05PV046IHJldHVybiBHTF9OT05F
OwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZfVU5PUk06IHJldHVybiBHTF9ERVBUSF9DT01Q
T05FTlQxNjsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ6IHJldHVy
biBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVB
Q0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwot
fQotCi1HTGVudW0gQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQp
Ci17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
OEc4UjhBOF9VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0JHUkE4X0VYVDsKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk06Ci0gICAgICAgIHJldHVybiBHTF9SR0JBOF9PRVM7
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0RF
UFRIX0NPTVBPTkVOVDE2OwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlO
VDoKLSAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotICAgICAgZGVmYXVs
dDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gR0xfUkdCQThf
T0VTOwotfQotCi1HTGVudW0gQ29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChEWEdJX0ZPUk1B
VCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SOEc4QjhBOF9VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX1JHQkE4X09FUzsKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQThfVU5PUk06Ci0gICAgICAgIHJldHVybiBHTF9BTFBIQThf
RVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk06Ci0gICAgICAgIHJldHVybiBH
TF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
QkMyX1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19B
TkdMRTsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNOgotICAgICAgICByZXR1cm4g
R0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRTsKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjMyRzMyQjMyQTMyX0ZMT0FUOgotICAgICAgICByZXR1cm4gR0xfUkdCQTMyRl9FWFQ7Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVDoKLSAgICAgICAgcmV0dXJuIEdM
X1JHQjMyRl9FWFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9BVDoK
LSAgICAgICAgcmV0dXJuIEdMX1JHQkExNkZfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
OEc4UjhBOF9VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0JHUkE4X0VYVDsKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjhfVU5PUk06Ci0gICAgICAgIHJldHVybiBHTF9SOF9FWFQ7Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX1I4RzhfVU5PUk06Ci0gICAgICAgIHJldHVybiBHTF9SRzhfRVhUOwot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfRkxPQVQ6Ci0gICAgICAgIHJldHVybiBHTF9SMTZG
X0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X0ZMT0FUOgotICAgICAgICByZXR1
cm4gR0xfUkcxNkZfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZfVU5PUk06Ci0gICAg
ICAgIHJldHVybiBHTF9ERVBUSF9DT01QT05FTlQxNjsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
RDI0X1VOT1JNX1M4X1VJTlQ6Ci0gICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09F
UzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfVU5LTk9XTjoKLSAgICAgICAgcmV0dXJuIEdMX05P
TkU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAg
IHJldHVybiBHTF9SR0JBOF9PRVM7Ci19Ci0KLX0KLQotbmFtZXNwYWNlIGdsX2QzZDExCi17Ci0K
LURYR0lfRk9STUFUIENvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCkKLXsK
LSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1JHQkE0OgotICAgICAg
Y2FzZSBHTF9SR0I1X0ExOgotICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6Ci0gICAgICBjYXNlIEdM
X1JHQjU2NToKLSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZP
Uk1BVF9SOEc4QjhBOF9VTk9STTsKLSAgICAgIGNhc2UgR0xfQkdSQThfRVhUOgotICAgICAgICBy
ZXR1cm4gRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk07Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NP
TVBPTkVOVDE2OgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfRDE2X1VOT1JNOwotICAgICAg
Y2FzZSBHTF9TVEVOQ0lMX0lOREVYODoKLSAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9P
RVM6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDsKLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIERY
R0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOwotfQotCi1EWEdJX0ZPUk1BVCBDb252ZXJ0VGV4dHVy
ZUZvcm1hdChHTGVudW0gaW50ZXJuYWxmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChpbnRlcm5hbGZv
cm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1JHQjU2NToKLSAgICAgIGNhc2UgR0xfUkdCQTQ6
Ci0gICAgICBjYXNlIEdMX1JHQjVfQTE6Ci0gICAgICBjYXNlIEdMX1JHQjhfT0VTOgotICAgICAg
Y2FzZSBHTF9SR0JBOF9PRVM6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRThfRVhUOgotICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQ6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1B
VF9SOEc4QjhBOF9VTk9STTsKLSAgICAgIGNhc2UgR0xfQUxQSEE4X0VYVDoKLSAgICAgICAgcmV0
dXJuIERYR0lfRk9STUFUX0E4X1VOT1JNOwotICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9T
M1RDX0RYVDFfRVhUOgotICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VY
VDoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0JDMV9VTk9STTsKLSAgICAgIGNhc2UgR0xf
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKLSAgICAgICAgcmV0dXJuIERYR0lfRk9S
TUFUX0JDMl9VTk9STTsKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9B
TkdMRToKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0JDM19VTk9STTsKLSAgICAgIGNhc2Ug
R0xfUkdCQTMyRl9FWFQ6Ci0gICAgICBjYXNlIEdMX0FMUEhBMzJGX0VYVDoKLSAgICAgIGNhc2Ug
R0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVDoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1Iz
MkczMkIzMkEzMl9GTE9BVDsKLSAgICAgIGNhc2UgR0xfUkdCMzJGX0VYVDoKLSAgICAgIGNhc2Ug
R0xfTFVNSU5BTkNFMzJGX0VYVDoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1IzMkczMkIz
MkEzMl9GTE9BVDsKLSAgICAgIGNhc2UgR0xfUkdCQTE2Rl9FWFQ6Ci0gICAgICBjYXNlIEdMX0FM
UEhBMTZGX0VYVDoKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVDoKLSAgICAg
IGNhc2UgR0xfUkdCMTZGX0VYVDoKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZGX0VYVDoKLSAg
ICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9BVDsKLSAgICAgIGNhc2Ug
R0xfQkdSQThfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk07
Ci0gICAgICBjYXNlIEdMX1I4X0VYVDoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1I4X1VO
T1JNOwotICAgICAgY2FzZSBHTF9SRzhfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRf
UjhHOF9VTk9STTsKLSAgICAgIGNhc2UgR0xfUjE2Rl9FWFQ6Ci0gICAgICAgIHJldHVybiBEWEdJ
X0ZPUk1BVF9SMTZfRkxPQVQ7Ci0gICAgICBjYXNlIEdMX1JHMTZGX0VYVDoKLSAgICAgICAgcmV0
dXJuIERYR0lfRk9STUFUX1IxNkcxNl9GTE9BVDsKLSAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9O
RU5UMTY6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9EMTZfVU5PUk07Ci0gICAgICBjYXNl
IEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUzoKLSAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lM
OF9PRVM6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDsKLSAg
ICAgIGNhc2UgR0xfTk9ORToKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1VOS05PV047Ci0g
ICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVy
biBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STTsKLX0KLQotfQotCi1uYW1lc3BhY2UgZDNkMTEK
LXsKLQotdm9pZCBTZXRQb3NpdGlvblRleENvb3JkVmVydGV4KFBvc2l0aW9uVGV4Q29vcmRWZXJ0
ZXgqIHZlcnRleCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgdSwgZmxvYXQgdikKLXsKLSAgICB2
ZXJ0ZXgtPnggPSB4OwotICAgIHZlcnRleC0+eSA9IHk7Ci0gICAgdmVydGV4LT51ID0gdTsKLSAg
ICB2ZXJ0ZXgtPnYgPSB2OwotfQotCi12b2lkIFNldFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleChQ
b3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgqIHZlcnRleCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQg
eiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpDb2xvciAmY29s
b3IpCi17Ci0gICAgdmVydGV4LT54ID0geDsKLSAgICB2ZXJ0ZXgtPnkgPSB5OwotICAgIHZlcnRl
eC0+eiA9IHo7Ci0gICAgdmVydGV4LT5yID0gY29sb3IucmVkOwotICAgIHZlcnRleC0+ZyA9IGNv
bG9yLmdyZWVuOwotICAgIHZlcnRleC0+YiA9IGNvbG9yLmJsdWU7Ci0gICAgdmVydGV4LT5hID0g
Y29sb3IuYWxwaGE7Ci19Ci0KLXNpemVfdCBDb21wdXRlUGl4ZWxTaXplQml0cyhEWEdJX0ZPUk1B
VCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SMV9VTk9STToKLSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfQThfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1NJTlQ6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX1I4X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOF9UWVBF
TEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjhfVU5PUk06Ci0gICAgICAgIHJldHVybiA4OwotCi0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0I1RzVSNUExX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CNUc2UjVfVU5PUk06
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjE2X0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfU0lOVDoKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfUjE2X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfVFlQ
RUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNl9VSU5UOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SMTZfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfU0lOVDoKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjhHOF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9VSU5UOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNOgotICAgICAgICByZXR1cm4gMTY7Ci0KLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4WDhfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0I4RzhSOFg4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhYOF9VTk9S
TV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDoKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJf
RkxPQVRfUzhYMjRfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRzhSOF9HOEI4X1VOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTBHMTBCMTBfWFJfQklBU19BMl9VTk9STToKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjEwRzEwQjEwQTJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX1IxMEcxMEIxMEEyX1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxMEcx
MEIxMEEyX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTFHMTFCMTBfRkxPQVQ6Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9GTE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjE2RzE2X1NJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9TTk9STToKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SMTZHMTZfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X1VOT1JNOgot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMjRfVU5PUk1fWDhfVFlQRUxFU1M6Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX1IyNEc4X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJf
RkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMl9GTE9BVF9YOFgyNF9UWVBFTEVTUzoK
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyX1NJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X1IzMl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyX1VJTlQ6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX1I4RzhfQjhHOF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjhHOEI4QThfU0lOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfU05PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SOEc4QjhBOF9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9V
Tk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk1fU1JHQjoKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0I4RzhSOEE4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9S
TV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOUc5QjlFNV9TSEFSRURFWFA6Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX1gyNF9UWVBFTEVTU19HOF9VSU5UOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9YMzJfVFlQRUxFU1NfRzhYMjRfVUlOVDoKLSAgICAgICAgcmV0dXJuIDMyOwotCi0g
ICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9BVDoKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfUjE2RzE2QjE2QTE2X1NJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcx
NkIxNkExNl9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1RZUEVM
RVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfVUlOVDoKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9SMzJHMzJfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMl9TSU5UOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1IzMkczMl9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHOFgyNF9UWVBFTEVT
UzoKLSAgICAgICAgcmV0dXJuIDY0OwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIz
Ml9GTE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX1NJTlQ6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjMyRzMyQjMyX1VJTlQ6Ci0gICAgICAgIHJldHVybiA5NjsKLQotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkcz
MkIzMkEzMl9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfVFlQRUxF
U1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9VSU5UOgotICAgICAgICBy
ZXR1cm4gMTI4OwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9UWVBFTEVTUzoKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFf
VU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1NOT1JNOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzRfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9V
Tk9STToKLSAgICAgICAgcmV0dXJuIDQ7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1RZ
UEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk06Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDMl9VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVFlQ
RUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STToKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkMzX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9TTk9S
TToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9CQzVfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfU0YxNjoKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkM2SF9VRjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVFlQRUxFU1M6Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3
X1VOT1JNX1NSR0I6Ci0gICAgICAgIHJldHVybiA4OwotCi0gICAgICBkZWZhdWx0OgotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLXNpemVfdCBDb21wdXRlQmxvY2tTaXplQml0cyhEWEdJ
X0ZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzFfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9V
Tk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX0JDNF9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1RZUEVM
RVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVU5PUk06Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDMl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNOgot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfQkMzX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzVfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9UWVBFTEVTUzoKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzZIX1NGMTY6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVFlQRUxFU1M6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0JDNkhfVUYxNjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1RZ
UEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk06Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDN19VTk9STV9TUkdCOgotICAgICAgICByZXR1cm4gQ29tcHV0ZVBpeGVsU2l6
ZUJpdHMoZm9ybWF0KSAqIDE2OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUo
KTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1ib29sIElzQ29tcHJlc3NlZChEWEdJ
X0ZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzFfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9V
Tk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX0JDNF9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1RZUEVM
RVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVU5PUk06Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDMl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNOgot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfQkMzX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzVfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9UWVBFTEVTUzoKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzZIX1NGMTY6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVFlQRUxFU1M6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0JDNkhfVUYxNjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1RZ
UEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk06Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDN19VTk9STV9TUkdCOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfVU5LTk9XTjoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLX0KLQotdW5zaWduZWQgaW50IEdldFRleHR1cmVGb3JtYXREaW1lbnNpb25BbGlnbm1lbnQo
RFhHSV9GT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkMxX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzFfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9STV9TUkdCOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9CQzRfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9U
WVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1VOT1JNOgotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9CQzJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9S
TToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDM19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkM1X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfVFlQRUxFU1M6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkM2SF9TRjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1RZUEVMRVNTOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1VGMTY6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JD
N19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1VOT1JNOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk1fU1JHQjoKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX1VOS05PV046Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAg
IHJldHVybiAxOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotfQot
Ci1ib29sIElzRGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAgICBz
d2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QzMl9GTE9BVF9T
OFgyNF9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVQ6Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9E
MTZfVU5PUk06Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotRFhHSV9GT1JNQVQgR2V0RGVwdGhUZXh0dXJlRm9y
bWF0KERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0QzMl9GTE9BVF9TOFgyNF9VSU5UOiByZXR1cm4gRFhHSV9G
T1JNQVRfUjMyRzhYMjRfVFlQRUxFU1M7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QzMl9GTE9B
VDogICAgICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjMyX1RZUEVMRVNTOwotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDogICAgcmV0dXJuIERYR0lfRk9STUFUX1Iy
NEc4X1RZUEVMRVNTOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZfVU5PUk06ICAgICAgICAg
ICAgcmV0dXJuIERYR0lfRk9STUFUX1IxNl9UWVBFTEVTUzsKLSAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7ICAgICAgICAgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9VTktOT1dOOwotICAg
IH0KLX0KLQotRFhHSV9GT1JNQVQgR2V0RGVwdGhTaGFkZXJSZXNvdXJjZUZvcm1hdChEWEdJX0ZP
Uk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9EMzJfRkxPQVRfUzhYMjRfVUlOVDogcmV0dXJuIERYR0lfRk9STUFUX1IzMl9G
TE9BVF9YOFgyNF9UWVBFTEVTUzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FUOiAg
ICAgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMzJfVUlOVDsKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ6ICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMjRfVU5PUk1f
WDhfVFlQRUxFU1M7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9STTogICAgICAgICAg
ICByZXR1cm4gRFhHSV9GT1JNQVRfUjE2X1VOT1JNOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsgICAgICAgICAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1VOS05PV047Ci0gICAgfQot
fQotCi1IUkVTVUxUIFNldERlYnVnTmFtZShJRDNEMTFEZXZpY2VDaGlsZCAqcmVzb3VyY2UsIGNv
bnN0IGNoYXIgKm5hbWUpCi17Ci0jaWYgZGVmaW5lZChfREVCVUcpCi0gICAgcmV0dXJuIHJlc291
cmNlLT5TZXRQcml2YXRlRGF0YShXS1BESURfRDNERGVidWdPYmplY3ROYW1lLCBzdHJsZW4obmFt
ZSksIG5hbWUpOwotI2Vsc2UKLSAgICByZXR1cm4gU19PSzsKLSNlbmRpZgotfQotCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3Jl
bmRlcmVyMTFfdXRpbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvcmVuZGVyZXIxMV91dGlscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAxYmM0OGMxYTEzNWE1ZDg4YTg5YmQ1Njg1NjlmZDZlOWRkNjc3M2VlLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXIxMV91dGlscy5oCisrKyAvZGV2L251bGwK
QEAgLTEsOTUgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIHJlbmRlcmVyMTFfdXRpbHMuaDog
Q29udmVyc2lvbiBmdW5jdGlvbnMgYW5kIG90aGVyIHV0aWxpdHkgcm91dGluZXMKLS8vIHNwZWNp
ZmljIHRvIHRoZSBEM0QxMSByZW5kZXJlci4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJf
UkVOREVSRVIxMV9VVElMU19ICi0jZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjEx
X1VUSUxTX0gKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgiCi0KLW5hbWVzcGFj
ZSBnbF9kM2QxMQotewotCi1EM0QxMV9CTEVORCBDb252ZXJ0QmxlbmRGdW5jKEdMZW51bSBnbEJs
ZW5kLCBib29sIGlzQWxwaGEpOwotRDNEMTFfQkxFTkRfT1AgQ29udmVydEJsZW5kT3AoR0xlbnVt
IGdsQmxlbmRPcCk7Ci1VSU5UOCBDb252ZXJ0Q29sb3JNYXNrKGJvb2wgbWFza1JlZCwgYm9vbCBt
YXNrR3JlZW4sIGJvb2wgbWFza0JsdWUsIGJvb2wgbWFza0FscGhhKTsKLQotRDNEMTFfQ1VMTF9N
T0RFIENvbnZlcnRDdWxsTW9kZShib29sIGN1bGxFbmFibGVkLCBHTGVudW0gY3VsbE1vZGUpOwot
Ci1EM0QxMV9DT01QQVJJU09OX0ZVTkMgQ29udmVydENvbXBhcmlzb24oR0xlbnVtIGNvbXBhcmlz
b24pOwotRDNEMTFfREVQVEhfV1JJVEVfTUFTSyBDb252ZXJ0RGVwdGhNYXNrKGJvb2wgZGVwdGhX
cml0ZUVuYWJsZWQpOwotVUlOVDggQ29udmVydFN0ZW5jaWxNYXNrKEdMdWludCBzdGVuY2lsbWFz
ayk7Ci1EM0QxMV9TVEVOQ0lMX09QIENvbnZlcnRTdGVuY2lsT3AoR0xlbnVtIHN0ZW5jaWxPcCk7
Ci0KLUQzRDExX0ZJTFRFUiBDb252ZXJ0RmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIsIEdMZW51bSBt
YWdGaWx0ZXIsIGZsb2F0IG1heEFuaXNvdHJvcHkpOwotRDNEMTFfVEVYVFVSRV9BRERSRVNTX01P
REUgQ29udmVydFRleHR1cmVXcmFwKEdMZW51bSB3cmFwKTsKLUZMT0FUIENvbnZlcnRNaW5MT0Qo
R0xlbnVtIG1pbkZpbHRlciwgdW5zaWduZWQgaW50IGxvZE9mZnNldCk7Ci1GTE9BVCBDb252ZXJ0
TWF4TE9EKEdMZW51bSBtaW5GaWx0ZXIsIHVuc2lnbmVkIGludCBsb2RPZmZzZXQpOwotCi1EWEdJ
X0ZPUk1BVCBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdMZW51bSBmb3JtYXQpOwotRFhHSV9G
T1JNQVQgQ29udmVydFRleHR1cmVGb3JtYXQoR0xlbnVtIGZvcm1hdCk7Ci19Ci0KLW5hbWVzcGFj
ZSBkM2QxMV9nbAotewotCi1HTGVudW0gQ29udmVydEJhY2tCdWZmZXJGb3JtYXQoRFhHSV9GT1JN
QVQgZm9ybWF0KTsKLUdMZW51bSBDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFU
IGZvcm1hdCk7Ci1HTGVudW0gQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChEWEdJX0ZPUk1BVCBm
b3JtYXQpOwotR0xlbnVtIENvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoRFhHSV9GT1JNQVQg
Zm9ybWF0KTsKLQotfQotCi1uYW1lc3BhY2UgZDNkMTEKLXsKLQotc3RydWN0IFBvc2l0aW9uVGV4
Q29vcmRWZXJ0ZXgKLXsKLSAgICBmbG9hdCB4LCB5OwotICAgIGZsb2F0IHUsIHY7Ci19Owotdm9p
ZCBTZXRQb3NpdGlvblRleENvb3JkVmVydGV4KFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgqIHZlcnRl
eCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgdSwgZmxvYXQgdik7Ci0KLXN0cnVjdCBQb3NpdGlv
bkRlcHRoQ29sb3JWZXJ0ZXgKLXsKLSAgICBmbG9hdCB4LCB5LCB6OwotICAgIGZsb2F0IHIsIGcs
IGIsIGE7Ci19Owotdm9pZCBTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgoUG9zaXRpb25EZXB0
aENvbG9yVmVydGV4KiB2ZXJ0ZXgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6Q29sb3IgJmNvbG9yKTsKLQotc2l6
ZV90IENvbXB1dGVQaXhlbFNpemVCaXRzKERYR0lfRk9STUFUIGZvcm1hdCk7Ci1zaXplX3QgQ29t
cHV0ZUJsb2NrU2l6ZUJpdHMoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLQotYm9vbCBJc0NvbXByZXNz
ZWQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLXVuc2lnbmVkIGludCBHZXRUZXh0dXJlRm9ybWF0RGlt
ZW5zaW9uQWxpZ25tZW50KERYR0lfRk9STUFUIGZvcm1hdCk7Ci0KLWJvb2wgSXNEZXB0aFN0ZW5j
aWxGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLURYR0lfRk9STUFUIEdldERlcHRoVGV4dHVy
ZUZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpOwotRFhHSV9GT1JNQVQgR2V0RGVwdGhTaGFkZXJS
ZXNvdXJjZUZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpOwotCi1IUkVTVUxUIFNldERlYnVnTmFt
ZShJRDNEMTFEZXZpY2VDaGlsZCAqcmVzb3VyY2UsIGNvbnN0IGNoYXIgKm5hbWUpOwotCi1pbmxp
bmUgYm9vbCBpc0RldmljZUxvc3RFcnJvcihIUkVTVUxUIGVycm9yQ29kZSkKLXsKLSAgICBzd2l0
Y2ggKGVycm9yQ29kZSkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRVJST1JfREVWSUNFX0hVTkc6
Ci0gICAgICBjYXNlIERYR0lfRVJST1JfREVWSUNFX1JFTU9WRUQ6Ci0gICAgICBjYXNlIERYR0lf
RVJST1JfREVWSUNFX1JFU0VUOgotICAgICAgY2FzZSBEWEdJX0VSUk9SX0RSSVZFUl9JTlRFUk5B
TF9FUlJPUjoKLSAgICAgIGNhc2UgRFhHSV9FUlJPUl9OT1RfQ1VSUkVOVExZX0FWQUlMQUJMRToK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotfQotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVS
RVIxMV9VVElMU19ICmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL3JlbmRlcmVyOV91dGlscy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3JlbmRlcmVyOV91dGlscy5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhNzVkNDY1ZTNjZjgwNWY4NjhhYjZjZTI3OTM4MGRlMmU5
YjFhYjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9yZW5kZXJlcjlfdXRp
bHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTAwICswLDAgQEAKLSNpbmNsdWRlICJwcmVjb21w
aWxlZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gcmVuZGVyZXI5X3V0aWxzLmNwcDogQ29u
dmVyc2lvbiBmdW5jdGlvbnMgYW5kIG90aGVyIHV0aWxpdHkgcm91dGluZXMKLS8vIHNwZWNpZmlj
IHRvIHRoZSBEM0Q5IHJlbmRlcmVyLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL3Jl
bmRlcmVyOV91dGlscy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCi0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLQot
bmFtZXNwYWNlIGdsX2QzZDkKLXsKLQotRDNEQ01QRlVOQyBDb252ZXJ0Q29tcGFyaXNvbihHTGVu
dW0gY29tcGFyaXNvbikKLXsKLSAgICBEM0RDTVBGVU5DIGQzZENvbXAgPSBEM0RDTVBfQUxXQVlT
OwotICAgIHN3aXRjaCAoY29tcGFyaXNvbikKLSAgICB7Ci0gICAgICBjYXNlIEdMX05FVkVSOiAg
ICBkM2RDb21wID0gRDNEQ01QX05FVkVSOyAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FM
V0FZUzogICBkM2RDb21wID0gRDNEQ01QX0FMV0FZUzsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX0xFU1M6ICAgICBkM2RDb21wID0gRDNEQ01QX0xFU1M7ICAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0xFUVVBTDogICBkM2RDb21wID0gRDNEQ01QX0xFU1NFUVVBTDsgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0VRVUFMOiAgICBkM2RDb21wID0gRDNEQ01QX0VRVUFMOyAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0dSRUFURVI6ICBkM2RDb21wID0gRDNEQ01QX0dSRUFURVI7
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0dFUVVBTDogICBkM2RDb21wID0gRDNEQ01QX0dS
RUFURVJFUVVBTDsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX05PVEVRVUFMOiBkM2RDb21wID0gRDNE
Q01QX05PVEVRVUFMOyAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwot
ICAgIH0KLQotICAgIHJldHVybiBkM2RDb21wOwotfQotCi1EM0RDT0xPUiBDb252ZXJ0Q29sb3Io
Z2w6OkNvbG9yIGNvbG9yKQotewotICAgIHJldHVybiBEM0RDT0xPUl9SR0JBKGdsOjp1bm9ybTw4
Pihjb2xvci5yZWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4Pihjb2xv
ci5ncmVlbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNvbG9yLmJs
dWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4Pihjb2xvci5hbHBoYSkp
OwotfQotCi1EM0RCTEVORCBDb252ZXJ0QmxlbmRGdW5jKEdMZW51bSBibGVuZCkKLXsKLSAgICBE
M0RCTEVORCBkM2RCbGVuZCA9IEQzREJMRU5EX1pFUk87Ci0KLSAgICBzd2l0Y2ggKGJsZW5kKQot
ICAgIHsKLSAgICAgIGNhc2UgR0xfWkVSTzogICAgICAgICAgICAgICAgICAgICBkM2RCbGVuZCA9
IEQzREJMRU5EX1pFUk87ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfT05FOiAgICAg
ICAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX09ORTsgICAgICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfU1JDX0NPTE9SOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQz
REJMRU5EX1NSQ0NPTE9SOyAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NS
Q19DT0xPUjogICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVlNSQ0NPTE9SOyAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfRFNUX0NPTE9SOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJM
RU5EX0RFU1RDT0xPUjsgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9D
T0xPUjogICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVkRFU1RDT0xPUjsgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfU1JDX0FMUEhBOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5E
X1NSQ0FMUEhBOyAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19BTFBI
QTogICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVlNSQ0FMUEhBOyAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfRFNUX0FMUEhBOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0RF
U1RBTFBIQTsgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9BTFBIQTog
ICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVkRFU1RBTFBIQTsgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfQ09OU1RBTlRfQ09MT1I6ICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0JMRU5E
RkFDVE9SOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0NPTE9S
OiBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVkJMRU5ERkFDVE9SOyBicmVhazsKLSAgICAgIGNhc2Ug
R0xfQ09OU1RBTlRfQUxQSEE6ICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0JMRU5ERkFD
VE9SOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBOiBk
M2RCbGVuZCA9IEQzREJMRU5EX0lOVkJMRU5ERkFDVE9SOyBicmVhazsKLSAgICAgIGNhc2UgR0xf
U1JDX0FMUEhBX1NBVFVSQVRFOiAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX1NSQ0FMUEhBU0FU
OyAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGQzZEJsZW5kOwotfQotCi1EM0RCTEVORE9QIENvbnZlcnRCbGVuZE9wKEdMZW51bSBi
bGVuZE9wKQotewotICAgIEQzREJMRU5ET1AgZDNkQmxlbmRPcCA9IEQzREJMRU5ET1BfQUREOwot
Ci0gICAgc3dpdGNoIChibGVuZE9wKQotICAgIHsKLSAgICAgIGNhc2UgR0xfRlVOQ19BREQ6ICAg
ICAgICAgICAgICBkM2RCbGVuZE9wID0gRDNEQkxFTkRPUF9BREQ7ICAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0ZVTkNfU1VCVFJBQ1Q6ICAgICAgICAgZDNkQmxlbmRPcCA9IEQzREJMRU5E
T1BfU1VCVFJBQ1Q7ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GVU5DX1JFVkVSU0VfU1VCVFJB
Q1Q6IGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX1JFVlNVQlRSQUNUOyBicmVhazsKLSAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGQzZEJsZW5kT3A7Ci19
Ci0KLUQzRFNURU5DSUxPUCBDb252ZXJ0U3RlbmNpbE9wKEdMZW51bSBzdGVuY2lsT3ApCi17Ci0g
ICAgRDNEU1RFTkNJTE9QIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9LRUVQOwotCi0gICAg
c3dpdGNoIChzdGVuY2lsT3ApCi0gICAgewotICAgICAgY2FzZSBHTF9aRVJPOiAgICAgIGQzZFN0
ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9aRVJPOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfS0VF
UDogICAgICBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfS0VFUDsgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX1JFUExBQ0U6ICAgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX1JFUExBQ0U7
IGJyZWFrOwotICAgICAgY2FzZSBHTF9JTkNSOiAgICAgIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5D
SUxPUF9JTkNSU0FUOyBicmVhazsKLSAgICAgIGNhc2UgR0xfREVDUjogICAgICBkM2RTdGVuY2ls
T3AgPSBEM0RTVEVOQ0lMT1BfREVDUlNBVDsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0lOVkVSVDog
ICAgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0lOVkVSVDsgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9JTkNSX1dSQVA6IGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9JTkNSOyAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfREVDUl9XUkFQOiBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1Bf
REVDUjsgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQot
ICAgIHJldHVybiBkM2RTdGVuY2lsT3A7Ci19Ci0KLUQzRFRFWFRVUkVBRERSRVNTIENvbnZlcnRU
ZXh0dXJlV3JhcChHTGVudW0gd3JhcCkKLXsKLSAgICBEM0RURVhUVVJFQUREUkVTUyBkM2RXcmFw
ID0gRDNEVEFERFJFU1NfV1JBUDsKLQotICAgIHN3aXRjaCAod3JhcCkKLSAgICB7Ci0gICAgICBj
YXNlIEdMX1JFUEVBVDogICAgICAgICAgICBkM2RXcmFwID0gRDNEVEFERFJFU1NfV1JBUDsgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfQ0xBTVBfVE9fRURHRTogICAgIGQzZFdyYXAgPSBEM0RUQURE
UkVTU19DTEFNUDsgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NSVJST1JFRF9SRVBFQVQ6ICAgZDNk
V3JhcCA9IEQzRFRBRERSRVNTX01JUlJPUjsgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBkM2RXcmFwOwotfQotCi1EM0RDVUxMIENvbnZl
cnRDdWxsTW9kZShHTGVudW0gY3VsbEZhY2UsIEdMZW51bSBmcm9udEZhY2UpCi17Ci0gICAgRDNE
Q1VMTCBjdWxsID0gRDNEQ1VMTF9DQ1c7Ci0gICAgc3dpdGNoIChjdWxsRmFjZSkKLSAgICB7Ci0g
ICAgICBjYXNlIEdMX0ZST05UOgotICAgICAgICBjdWxsID0gKGZyb250RmFjZSA9PSBHTF9DQ1cg
PyBEM0RDVUxMX0NXIDogRDNEQ1VMTF9DQ1cpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfQkFDSzoKLSAgICAgICAgY3VsbCA9IChmcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEQ1VMTF9D
Q1cgOiBEM0RDVUxMX0NXKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZST05UX0FO
RF9CQUNLOgotICAgICAgICBjdWxsID0gRDNEQ1VMTF9OT05FOyAvLyBjdWxsaW5nIHdpbGwgYmUg
aGFuZGxlZCBkdXJpbmcgZHJhdwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGN1bGw7Ci19Ci0KLUQzRENVQkVNQVBfRkFD
RVMgQ29udmVydEN1YmVGYWNlKEdMZW51bSBjdWJlRmFjZSkKLXsKLSAgICBEM0RDVUJFTUFQX0ZB
Q0VTIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfUE9TSVRJVkVfWDsKLQotICAgIHN3aXRjaCAoY3Vi
ZUZhY2UpCi0gICAgewotICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6
Ci0gICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfUE9TSVRJVkVfWDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICAgICAg
ZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9ORUdBVElWRV9YOwotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgICAgICBmYWNlID0gRDNE
Q1VCRU1BUF9GQUNFX1BPU0lUSVZFX1k7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZB
Q0VfTkVHQVRJVkVfWTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWjoKLSAgICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9QT1NJVElW
RV9aOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9aOgotICAgICAgICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX05FR0FUSVZFX1o7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gZmFjZTsKLX0KLQotRFdPUkQgQ29udmVydENvbG9yTWFzayhib29sIHJlZCwgYm9vbCBn
cmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKQotewotICAgIHJldHVybiAocmVkICAgPyBEM0RD
T0xPUldSSVRFRU5BQkxFX1JFRCAgIDogMCkgfAotICAgICAgICAgICAoZ3JlZW4gPyBEM0RDT0xP
UldSSVRFRU5BQkxFX0dSRUVOIDogMCkgfAotICAgICAgICAgICAoYmx1ZSAgPyBEM0RDT0xPUldS
SVRFRU5BQkxFX0JMVUUgIDogMCkgfAotICAgICAgICAgICAoYWxwaGEgPyBEM0RDT0xPUldSSVRF
RU5BQkxFX0FMUEhBIDogMCk7Ci19Ci0KLUQzRFRFWFRVUkVGSUxURVJUWVBFIENvbnZlcnRNYWdG
aWx0ZXIoR0xlbnVtIG1hZ0ZpbHRlciwgZmxvYXQgbWF4QW5pc290cm9weSkKLXsKLSAgICBpZiAo
bWF4QW5pc290cm9weSA+IDEuMGYpCi0gICAgewotICAgICAgICByZXR1cm4gRDNEVEVYRl9BTklT
T1RST1BJQzsKLSAgICB9Ci0KLSAgICBEM0RURVhUVVJFRklMVEVSVFlQRSBkM2RNYWdGaWx0ZXIg
PSBEM0RURVhGX1BPSU5UOwotICAgIHN3aXRjaCAobWFnRmlsdGVyKQotICAgIHsKLSAgICAgIGNh
c2UgR0xfTkVBUkVTVDogZDNkTWFnRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9MSU5FQVI6ICBkM2RNYWdGaWx0ZXIgPSBEM0RURVhGX0xJTkVBUjsgYnJlYWs7
Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBkM2RN
YWdGaWx0ZXI7Ci19Ci0KLXZvaWQgQ29udmVydE1pbkZpbHRlcihHTGVudW0gbWluRmlsdGVyLCBE
M0RURVhUVVJFRklMVEVSVFlQRSAqZDNkTWluRmlsdGVyLCBEM0RURVhUVVJFRklMVEVSVFlQRSAq
ZDNkTWlwRmlsdGVyLCBmbG9hdCBtYXhBbmlzb3Ryb3B5KQotewotICAgIHN3aXRjaCAobWluRmls
dGVyKQotICAgIHsKLSAgICAgIGNhc2UgR0xfTkVBUkVTVDoKLSAgICAgICAgKmQzZE1pbkZpbHRl
ciA9IEQzRFRFWEZfUE9JTlQ7Ci0gICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX05PTkU7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MSU5FQVI6Ci0gICAgICAgICpkM2RNaW5G
aWx0ZXIgPSBEM0RURVhGX0xJTkVBUjsKLSAgICAgICAgKmQzZE1pcEZpbHRlciA9IEQzRFRFWEZf
Tk9ORTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX05FQVJF
U1Q6Ci0gICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX1BPSU5UOwotICAgICAgICAqZDNk
TWlwRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X0xJTkVBUl9NSVBNQVBfTkVBUkVTVDoKLSAgICAgICAgKmQzZE1pbkZpbHRlciA9IEQzRFRFWEZf
TElORUFSOwotICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjoKLSAgICAgICAgKmQz
ZE1pbkZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7Ci0gICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RU
RVhGX0xJTkVBUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBf
TElORUFSOgotICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9MSU5FQVI7Ci0gICAgICAg
ICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX0xJTkVBUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBk
ZWZhdWx0OgotICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKLSAgICAgICAg
KmQzZE1pcEZpbHRlciA9IEQzRFRFWEZfTk9ORTsKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAg
ICB9Ci0KLSAgICBpZiAobWF4QW5pc290cm9weSA+IDEuMGYpCi0gICAgewotICAgICAgICAqZDNk
TWluRmlsdGVyID0gRDNEVEVYRl9BTklTT1RST1BJQzsKLSAgICB9Ci19Ci0KLUQzREZPUk1BVCBD
b252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdMZW51bSBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChm
b3JtYXQpCi0gICAgewotICAgICAgY2FzZSBHTF9OT05FOiAgICAgICAgICAgICAgICAgcmV0dXJu
IEQzREZNVF9OVUxMOwotICAgICAgY2FzZSBHTF9SR0JBNDoKLSAgICAgIGNhc2UgR0xfUkdCNV9B
MToKLSAgICAgIGNhc2UgR0xfUkdCQThfT0VTOiAgICAgICAgICAgIHJldHVybiBEM0RGTVRfQThS
OEc4Qjg7Ci0gICAgICBjYXNlIEdMX1JHQjU2NTogICAgICAgICAgICAgICByZXR1cm4gRDNERk1U
X1I1RzZCNTsKLSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6ICAgICAgICAgICAgIHJldHVybiBEM0RG
TVRfWDhSOEc4Qjg7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgY2Fz
ZSBHTF9TVEVOQ0lMX0lOREVYODogICAgICAgCi0gICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJ
TDhfT0VTOiByZXR1cm4gRDNERk1UX0QyNFM4OwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKLSAgICB9Ci19Ci0KLUQzRE1VTFRJU0FN
UExFX1RZUEUgR2V0TXVsdGlzYW1wbGVUeXBlRnJvbVNhbXBsZXMoR0xzaXplaSBzYW1wbGVzKQot
ewotICAgIGlmIChzYW1wbGVzIDw9IDEpCi0gICAgICAgIHJldHVybiBEM0RNVUxUSVNBTVBMRV9O
T05FOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIChEM0RNVUxUSVNBTVBMRV9UWVBFKXNhbXBs
ZXM7Ci19Ci0KLX0KLQotbmFtZXNwYWNlIGQzZDlfZ2wKLXsKLQotdW5zaWduZWQgaW50IEdldFN0
ZW5jaWxTaXplKEQzREZPUk1BVCBzdGVuY2lsRm9ybWF0KQotewotICAgIGlmIChzdGVuY2lsRm9y
bWF0ID09IEQzREZNVF9JTlRaKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDg7Ci0gICAgfQotICAg
IHN3aXRjaChzdGVuY2lsRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0QyNEZTODoK
LSAgICAgIGNhc2UgRDNERk1UX0QyNFM4OgotICAgICAgICByZXR1cm4gODsKLSAgICAgIGNhc2Ug
RDNERk1UX0QyNFg0UzQ6Ci0gICAgICAgIHJldHVybiA0OwotICAgICAgY2FzZSBEM0RGTVRfRDE1
UzE6Ci0gICAgICAgIHJldHVybiAxOwotICAgICAgY2FzZSBEM0RGTVRfRDE2X0xPQ0tBQkxFOgot
ICAgICAgY2FzZSBEM0RGTVRfRDMyOgotICAgICAgY2FzZSBEM0RGTVRfRDI0WDg6Ci0gICAgICBj
YXNlIEQzREZNVF9EMzJGX0xPQ0tBQkxFOgotICAgICAgY2FzZSBEM0RGTVRfRDE2OgotICAgICAg
ICByZXR1cm4gMDsKLSAgICAvL2Nhc2UgRDNERk1UX0QzMl9MT0NLQUJMRTogIHJldHVybiAwOyAg
IC8vIERpcmVjdFggOUV4IG9ubHkKLSAgICAvL2Nhc2UgRDNERk1UX1M4X0xPQ0tBQkxFOiAgIHJl
dHVybiA4OyAgIC8vIERpcmVjdFggOUV4IG9ubHkKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLX0KLQotdW5zaWduZWQgaW50IEdldEFscGhhU2l6ZShEM0RGT1JNQVQg
Y29sb3JGb3JtYXQpCi17Ci0gICAgc3dpdGNoIChjb2xvckZvcm1hdCkKLSAgICB7Ci0gICAgICBj
YXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgotICAgICAgICByZXR1cm4gMTY7Ci0gICAgICBjYXNl
IEQzREZNVF9BMzJCMzJHMzJSMzJGOgotICAgICAgICByZXR1cm4gMzI7Ci0gICAgICBjYXNlIEQz
REZNVF9BMlIxMEcxMEIxMDoKLSAgICAgICAgcmV0dXJuIDI7Ci0gICAgICBjYXNlIEQzREZNVF9B
OFI4RzhCODoKLSAgICAgICAgcmV0dXJuIDg7Ci0gICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToK
LSAgICAgICAgcmV0dXJuIDE7Ci0gICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAgICAgIGNh
c2UgRDNERk1UX1I1RzZCNToKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLUdMc2l6ZWkgR2V0U2FtcGxlc0Zyb21NdWx0aXNh
bXBsZVR5cGUoRDNETVVMVElTQU1QTEVfVFlQRSB0eXBlKQotewotICAgIGlmICh0eXBlID09IEQz
RE1VTFRJU0FNUExFX05PTk1BU0tBQkxFKQotICAgICAgICByZXR1cm4gMDsKLSAgICBlbHNlCi0g
ICAgICAgIHJldHVybiB0eXBlOwotfQotCi1ib29sIElzRm9ybWF0Q2hhbm5lbEVxdWl2YWxlbnQo
RDNERk9STUFUIGQzZGZvcm1hdCwgR0xlbnVtIGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGQzZGZv
cm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9MODoKLSAgICAgICAgcmV0dXJuIChmb3Jt
YXQgPT0gR0xfTFVNSU5BTkNFKTsKLSAgICAgIGNhc2UgRDNERk1UX0E4TDg6Ci0gICAgICAgIHJl
dHVybiAoZm9ybWF0ID09IEdMX0xVTUlOQU5DRV9BTFBIQSk7Ci0gICAgICBjYXNlIEQzREZNVF9E
WFQxOgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQxX0VYVCB8fCBmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCk7Ci0g
ICAgICBjYXNlIEQzREZNVF9EWFQzOgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9DT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFKTsKLSAgICAgIGNhc2UgRDNERk1UX0RYVDU6Ci0g
ICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5H
TEUpOwotICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9BMTZC
MTZHMTZSMTZGOgotICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKLSAgICAgICAgcmV0
dXJuIChmb3JtYXQgPT0gR0xfUkdCQSB8fCBmb3JtYXQgPT0gR0xfQkdSQV9FWFQpOwotICAgICAg
Y2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX1JHQik7
Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBpZiAoZDNkZm9ybWF0ID09IEQzREZNVF9JTlRaICYm
IGdsOjpJc0RlcHRoVGV4dHVyZShmb3JtYXQpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLUdMZW51bSBDb252ZXJ0QmFja0J1ZmZl
ckZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsK
LSAgICAgIGNhc2UgRDNERk1UX0E0UjRHNEI0OiByZXR1cm4gR0xfUkdCQTQ7Ci0gICAgICBjYXNl
IEQzREZNVF9BOFI4RzhCODogcmV0dXJuIEdMX1JHQkE4X09FUzsKLSAgICAgIGNhc2UgRDNERk1U
X0ExUjVHNUI1OiByZXR1cm4gR0xfUkdCNV9BMTsKLSAgICAgIGNhc2UgRDNERk1UX1I1RzZCNTog
ICByZXR1cm4gR0xfUkdCNTY1OwotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6IHJldHVybiBH
TF9SR0I4X09FUzsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIEdMX1JHQkE0OwotfQotCi1HTGVudW0gQ29udmVydERlcHRoU3RlbmNp
bEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KQotewotICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lO
VFopCi0gICAgewotICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAg
fQotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0QxNjoKLSAg
ICAgIGNhc2UgRDNERk1UX0QyNFg4OgotICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5U
MTY7Ci0gICAgICBjYXNlIEQzREZNVF9EMjRTODoKLSAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRf
U1RFTkNJTDhfT0VTOwotICAgICAgY2FzZSBEM0RGTVRfVU5LTk9XTjoKLSAgICAgICAgcmV0dXJu
IEdMX05PTkU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0K
LQotICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLX0KLQotR0xlbnVtIENvbnZl
cnRSZW5kZXJUYXJnZXRGb3JtYXQoRDNERk9STUFUIGZvcm1hdCkKLXsKLSAgICBpZiAoZm9ybWF0
ID09IEQzREZNVF9JTlRaKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJ
TDhfT0VTOwotICAgIH0KLSAgICAKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBj
YXNlIEQzREZNVF9BNFI0RzRCNDogcmV0dXJuIEdMX1JHQkE0OwotICAgICAgY2FzZSBEM0RGTVRf
QThSOEc4Qjg6IHJldHVybiBHTF9SR0JBOF9PRVM7Ci0gICAgICBjYXNlIEQzREZNVF9BMVI1RzVC
NTogcmV0dXJuIEdMX1JHQjVfQTE7Ci0gICAgICBjYXNlIEQzREZNVF9SNUc2QjU6ICAgcmV0dXJu
IEdMX1JHQjU2NTsKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OiByZXR1cm4gR0xfUkdCOF9P
RVM7Ci0gICAgICBjYXNlIEQzREZNVF9EMTY6Ci0gICAgICBjYXNlIEQzREZNVF9EMjRYODoKLSAg
ICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2OwotICAgICAgY2FzZSBEM0RGTVRfRDI0
Uzg6Ci0gICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLSAgICAgIGNhc2Ug
RDNERk1UX1VOS05PV046Ci0gICAgICAgIHJldHVybiBHTF9OT05FOwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gR0xfUkdCQTQ7Ci19
Ci0KLUdMZW51bSBHZXRFcXVpdmFsZW50Rm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpCi17Ci0gICAg
aWYgKGZvcm1hdCA9PSBEM0RGTVRfSU5UWikKLSAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RF
TkNJTDhfT0VTOwotICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX05VTEwpCi0gICAgICAgIHJldHVy
biBHTF9OT05FOwotCi0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RG
TVRfQTRSNEc0QjQ6ICAgICAgICAgICAgIHJldHVybiBHTF9SR0JBNDsKLSAgICAgIGNhc2UgRDNE
Rk1UX0E4UjhHOEI4OiAgICAgICAgICAgICByZXR1cm4gR0xfUkdCQThfT0VTOwotICAgICAgY2Fz
ZSBEM0RGTVRfQTFSNUc1QjU6ICAgICAgICAgICAgIHJldHVybiBHTF9SR0I1X0ExOwotICAgICAg
Y2FzZSBEM0RGTVRfUjVHNkI1OiAgICAgICAgICAgICAgIHJldHVybiBHTF9SR0I1NjU7Ci0gICAg
ICBjYXNlIEQzREZNVF9YOFI4RzhCODogICAgICAgICAgICAgcmV0dXJuIEdMX1JHQjhfT0VTOwot
ICAgICAgY2FzZSBEM0RGTVRfRDE2OiAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9ERVBUSF9D
T01QT05FTlQxNjsKLSAgICAgIGNhc2UgRDNERk1UX0QyNFM4OiAgICAgICAgICAgICAgICByZXR1
cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgICBjYXNlIEQzREZNVF9VTktOT1dOOiAg
ICAgICAgICAgICAgcmV0dXJuIEdMX05PTkU7Ci0gICAgICBjYXNlIEQzREZNVF9EWFQxOiAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOwotICAg
ICAgY2FzZSBEM0RGTVRfRFhUMzogICAgICAgICAgICAgICAgIHJldHVybiBHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQzX0FOR0xFOwotICAgICAgY2FzZSBEM0RGTVRfRFhUNTogICAgICAgICAg
ICAgICAgIHJldHVybiBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOwotICAgICAg
Y2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjogICAgICAgIHJldHVybiBHTF9SR0JBMzJGX0VYVDsK
LSAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6ICAgICAgICByZXR1cm4gR0xfUkdCQTE2
Rl9FWFQ7Ci0gICAgICBjYXNlIEQzREZNVF9MODogICAgICAgICAgICAgICAgICAgcmV0dXJuIEdM
X0xVTUlOQU5DRThfRVhUOwotICAgICAgY2FzZSBEM0RGTVRfQThMODogICAgICAgICAgICAgICAg
IHJldHVybiBHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQ7Ci0gICAgICBkZWZhdWx0OiAgICAgICAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIEdMX05PTkU7Ci0gICAgfQotfQot
Ci19Ci0KLW5hbWVzcGFjZSBkM2Q5Ci17Ci0KLWJvb2wgSXNDb21wcmVzc2VkRm9ybWF0KEQzREZP
Uk1BVCBzdXJmYWNlRm9ybWF0KQotewotICAgIHN3aXRjaChzdXJmYWNlRm9ybWF0KQotICAgIHsK
LSAgICAgIGNhc2UgRDNERk1UX0RYVDE6Ci0gICAgICBjYXNlIEQzREZNVF9EWFQyOgotICAgICAg
Y2FzZSBEM0RGTVRfRFhUMzoKLSAgICAgIGNhc2UgRDNERk1UX0RYVDQ6Ci0gICAgICBjYXNlIEQz
REZNVF9EWFQ1OgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLXNpemVfdCBDb21wdXRlUm93U2l6ZShEM0RGT1JN
QVQgZm9ybWF0LCB1bnNpZ25lZCBpbnQgd2lkdGgpCi17Ci0gICAgaWYgKGZvcm1hdCA9PSBEM0RG
TVRfSU5UWikKLSAgICB7Ci0gICAgICAgIHJldHVybiA0ICogd2lkdGg7Ci0gICAgfQotICAgIHN3
aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0w4OgotICAgICAgICAgIHJl
dHVybiAxICogd2lkdGg7Ci0gICAgICBjYXNlIEQzREZNVF9BOEw4OgotICAgICAgICAgIHJldHVy
biAyICogd2lkdGg7Ci0gICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAgICAgIGNhc2UgRDNE
Rk1UX0E4UjhHOEI4OgotICAgICAgICByZXR1cm4gNCAqIHdpZHRoOwotICAgICAgY2FzZSBEM0RG
TVRfQTE2QjE2RzE2UjE2RjoKLSAgICAgICAgcmV0dXJuIDggKiB3aWR0aDsKLSAgICAgIGNhc2Ug
RDNERk1UX0EzMkIzMkczMlIzMkY6Ci0gICAgICAgIHJldHVybiAxNiAqIHdpZHRoOwotICAgICAg
Y2FzZSBEM0RGTVRfRFhUMToKLSAgICAgICAgcmV0dXJuIDggKiAoKHdpZHRoICsgMykgLyA0KTsK
LSAgICAgIGNhc2UgRDNERk1UX0RYVDM6Ci0gICAgICBjYXNlIEQzREZNVF9EWFQ1OgotICAgICAg
ICByZXR1cm4gMTYgKiAoKHdpZHRoICsgMykgLyA0KTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9yZW5k
ZXJlcjlfdXRpbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvcmVuZGVyZXI5X3V0aWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJm
NmNkZjFlYTY1NjZmOTEwYTk2ZWUyNTExNGI3YzQ4ZWM4Mzk0NWUuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9yZW5kZXJlcjlfdXRpbHMuaAorKysgL2Rldi9udWxsCkBAIC0x
LDc0ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIHJlbmRlcmVyOV91dGlscy5oOiBD
b252ZXJzaW9uIGZ1bmN0aW9ucyBhbmQgb3RoZXIgdXRpbGl0eSByb3V0aW5lcyAKLS8vIHNwZWNp
ZmljIHRvIHRoZSBEM0Q5IHJlbmRlcmVyCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX1JF
TkRFUkVSOV9VVElMU19ICi0jZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjlfVVRJ
TFNfSAotCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgotCi1jb25zdCBEM0RGT1JN
QVQgRDNERk1UX0lOVFogPSAoKEQzREZPUk1BVCkoTUFLRUZPVVJDQygnSScsJ04nLCdUJywnWicp
KSk7Ci1jb25zdCBEM0RGT1JNQVQgRDNERk1UX05VTEwgPSAoKEQzREZPUk1BVCkoTUFLRUZPVVJD
QygnTicsJ1UnLCdMJywnTCcpKSk7Ci0KLW5hbWVzcGFjZSBnbF9kM2Q5Ci17Ci0KLUQzRENNUEZV
TkMgQ29udmVydENvbXBhcmlzb24oR0xlbnVtIGNvbXBhcmlzb24pOwotRDNEQ09MT1IgQ29udmVy
dENvbG9yKGdsOjpDb2xvciBjb2xvcik7Ci1EM0RCTEVORCBDb252ZXJ0QmxlbmRGdW5jKEdMZW51
bSBibGVuZCk7Ci1EM0RCTEVORE9QIENvbnZlcnRCbGVuZE9wKEdMZW51bSBibGVuZE9wKTsKLUQz
RFNURU5DSUxPUCBDb252ZXJ0U3RlbmNpbE9wKEdMZW51bSBzdGVuY2lsT3ApOwotRDNEVEVYVFVS
RUFERFJFU1MgQ29udmVydFRleHR1cmVXcmFwKEdMZW51bSB3cmFwKTsKLUQzRENVTEwgQ29udmVy
dEN1bGxNb2RlKEdMZW51bSBjdWxsRmFjZSwgR0xlbnVtIGZyb250RmFjZSk7Ci1EM0RDVUJFTUFQ
X0ZBQ0VTIENvbnZlcnRDdWJlRmFjZShHTGVudW0gY3ViZUZhY2UpOwotRFdPUkQgQ29udmVydENv
bG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKTsKLUQz
RFRFWFRVUkVGSUxURVJUWVBFIENvbnZlcnRNYWdGaWx0ZXIoR0xlbnVtIG1hZ0ZpbHRlciwgZmxv
YXQgbWF4QW5pc290cm9weSk7Ci12b2lkIENvbnZlcnRNaW5GaWx0ZXIoR0xlbnVtIG1pbkZpbHRl
ciwgRDNEVEVYVFVSRUZJTFRFUlRZUEUgKmQzZE1pbkZpbHRlciwgRDNEVEVYVFVSRUZJTFRFUlRZ
UEUgKmQzZE1pcEZpbHRlciwgZmxvYXQgbWF4QW5pc290cm9weSk7Ci1EM0RGT1JNQVQgQ29udmVy
dFJlbmRlcmJ1ZmZlckZvcm1hdChHTGVudW0gZm9ybWF0KTsKLUQzRE1VTFRJU0FNUExFX1RZUEUg
R2V0TXVsdGlzYW1wbGVUeXBlRnJvbVNhbXBsZXMoR0xzaXplaSBzYW1wbGVzKTsKLQotfQotCi1u
YW1lc3BhY2UgZDNkOV9nbAotewotCi1HTHVpbnQgR2V0QWxwaGFTaXplKEQzREZPUk1BVCBjb2xv
ckZvcm1hdCk7Ci1HTHVpbnQgR2V0U3RlbmNpbFNpemUoRDNERk9STUFUIHN0ZW5jaWxGb3JtYXQp
OwotCi1HTHNpemVpIEdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKEQzRE1VTFRJU0FNUExF
X1RZUEUgdHlwZSk7Ci0KLWJvb2wgSXNGb3JtYXRDaGFubmVsRXF1aXZhbGVudChEM0RGT1JNQVQg
ZDNkZm9ybWF0LCBHTGVudW0gZm9ybWF0KTsKLUdMZW51bSBDb252ZXJ0QmFja0J1ZmZlckZvcm1h
dChEM0RGT1JNQVQgZm9ybWF0KTsKLUdMZW51bSBDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KEQz
REZPUk1BVCBmb3JtYXQpOwotR0xlbnVtIENvbnZlcnRSZW5kZXJUYXJnZXRGb3JtYXQoRDNERk9S
TUFUIGZvcm1hdCk7Ci1HTGVudW0gR2V0RXF1aXZhbGVudEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0
KTsKLQotfQotCi1uYW1lc3BhY2UgZDNkOQotewotYm9vbCBJc0NvbXByZXNzZWRGb3JtYXQoRDNE
Rk9STUFUIGZvcm1hdCk7Ci1zaXplX3QgQ29tcHV0ZVJvd1NpemUoRDNERk9STUFUIGZvcm1hdCwg
dW5zaWduZWQgaW50IHdpZHRoKTsKLQotaW5saW5lIGJvb2wgaXNEZXZpY2VMb3N0RXJyb3IoSFJF
U1VMVCBlcnJvckNvZGUpCi17Ci0gICAgc3dpdGNoIChlcnJvckNvZGUpCi0gICAgewotICAgICAg
Y2FzZSBEM0RFUlJfRFJJVkVSSU5URVJOQUxFUlJPUjoKLSAgICAgIGNhc2UgRDNERVJSX0RFVklD
RUxPU1Q6Ci0gICAgICBjYXNlIEQzREVSUl9ERVZJQ0VIVU5HOgotICAgICAgY2FzZSBEM0RFUlJf
REVWSUNFUkVNT1ZFRDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJf
UkVOREVSRVJfUkVOREVSRVI5X1VUSUxTX0gKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9CbGl0LnBzIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL0JsaXQucHMKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjYjNiZDBlNzZiYTkyYTI4ZTc3Njg4OGM2Mjkw
NGMwYzNmMDVmM2MuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJz
L0JsaXQucHMKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
c2FtcGxlcjJEIHRleCA6IHMwOwotCi11bmlmb3JtIGZsb2F0NCBtb2RlIDogYzA7Ci0KLS8vIFBh
c3N0aHJvdWdoIFBpeGVsIFNoYWRlcgotLy8gT3V0cHV0cyB0ZXh0dXJlIDAgc2FtcGxlZCBhdCB0
ZXhjb29yZCAwLgotZmxvYXQ0IHBhc3N0aHJvdWdocHMoZmxvYXQ0IHRleGNvb3JkIDogVEVYQ09P
UkQwKSA6IENPTE9SCi17Ci0JcmV0dXJuIHRleDJEKHRleCwgdGV4Y29vcmQueHkpOwotfTsKLQot
Ly8gTHVtaW5hbmNlIENvbnZlcnNpb24gUGl4ZWwgU2hhZGVyCi0vLyBPdXRwdXRzIHNhbXBsZSh0
ZXgwLCB0YzApLnJycmEuCi0vLyBGb3IgTEEgb3V0cHV0IChwYXNzIEEpIHNldCBDMC5YID0gMSwg
QzAuWSA9IDAuCi0vLyBGb3IgTCBvdXRwdXQgKEEgPSAxKSBzZXQgQzAuWCA9IDAsIEMwLlkgPSAx
LgotZmxvYXQ0IGx1bWluYW5jZXBzKGZsb2F0NCB0ZXhjb29yZCA6IFRFWENPT1JEMCkgOiBDT0xP
UgotewotCWZsb2F0NCB0bXAgPSB0ZXgyRCh0ZXgsIHRleGNvb3JkLnh5KTsKLQl0bXAudyA9IHRt
cC53ICogbW9kZS54ICsgbW9kZS55OwotCXJldHVybiB0bXAueHh4dzsKLX07Ci0KLS8vIFJHQi9B
IENvbXBvbmVudCBNYXNrIFBpeGVsIFNoYWRlcgotLy8gT3V0cHV0cyBzYW1wbGUodGV4MCwgdGMw
KSB3aXRoIG9wdGlvbnMgdG8gZm9yY2UgUkdCID0gMCBhbmQvb3IgQSA9IDEuCi0vLyBUbyBmb3Jj
ZSBSR0IgPSAwLCBzZXQgQzAuWCA9IDAsIG90aGVyd2lzZSBDMC5YID0gMS4KLS8vIFRvIGZvcmNl
IEEgPSAxLCBzZXQgQzAuWiA9IDAsIEMwLlcgPSAxLCBvdGhlcndpc2UgQzAuWiA9IDEsIEMwLlcg
PSAwLgotZmxvYXQ0IGNvbXBvbmVudG1hc2twcyhmbG9hdDQgdGV4Y29vcmQgOiBURVhDT09SRDAp
IDogQ09MT1IKLXsKLQlmbG9hdDQgdG1wID0gdGV4MkQodGV4LCB0ZXhjb29yZC54eSk7Ci0JdG1w
Lnh5eiA9IHRtcC54eXogKiBtb2RlLng7Ci0JdG1wLncgPSB0bXAudyAqIG1vZGUueiArIG1vZGUu
dzsKLQlyZXR1cm4gdG1wOwotfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9CbGl0LnZzIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL0JsaXQudnMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhMzY5ODBiOTM1YjUwZmE5YWUwYjZiMGY0YTUwZTM5Mzlk
MGQ1MTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL0JsaXQu
dnMKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAy
MDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotc3RydWN0
IFZTX09VVFBVVAotewotICAgIGZsb2F0NCBwb3NpdGlvbiA6IFBPU0lUSU9OOwotICAgIGZsb2F0
NCB0ZXhjb29yZCA6IFRFWENPT1JEMDsKLX07Ci0KLXVuaWZvcm0gZmxvYXQ0IGhhbGZQaXhlbFNp
emUgOiBjMDsKLQotLy8gU3RhbmRhcmQgVmVydGV4IFNoYWRlcgotLy8gSW5wdXQgMCBpcyB0aGUg
aG9tb2dlbm91cyBwb3NpdGlvbi4KLS8vIE91dHB1dHMgdGhlIGhvbW9nZW5vdXMgcG9zaXRpb24g
YXMtaXMuCi0vLyBPdXRwdXRzIGEgdGV4IGNvb3JkIHdpdGggKDAsMCkgaW4gdGhlIHVwcGVyLWxl
ZnQgY29ybmVyIG9mIHRoZSBzY3JlZW4gYW5kICgxLDEpIGluIHRoZSBib3R0b20gcmlnaHQuCi0v
LyBDMC5YIG11c3QgYmUgbmVnYXRpdmUgaGFsZi1waXhlbCB3aWR0aCwgQzAuWSBtdXN0IGJlIGhh
bGYtcGl4ZWwgaGVpZ2h0LiBDMC5aVyBtdXN0IGJlIDAuCi1WU19PVVRQVVQgc3RhbmRhcmR2cyhp
biBmbG9hdDQgcG9zaXRpb24gOiBQT1NJVElPTikKLXsKLSAgICBWU19PVVRQVVQgT3V0OwotCi0g
ICAgT3V0LnBvc2l0aW9uID0gcG9zaXRpb24gKyBoYWxmUGl4ZWxTaXplOwotICAgIE91dC50ZXhj
b29yZCA9IHBvc2l0aW9uICogZmxvYXQ0KDAuNSwgLTAuNSwgMS4wLCAxLjApICsgZmxvYXQ0KDAu
NSwgMC41LCAwLCAwKTsKLQotICAgIHJldHVybiBPdXQ7Ci19OwotCi0vLyBGbGlwIFkgVmVydGV4
IFNoYWRlcgotLy8gSW5wdXQgMCBpcyB0aGUgaG9tb2dlbm91cyBwb3NpdGlvbi4KLS8vIE91dHB1
dHMgdGhlIGhvbW9nZW5vdXMgcG9zaXRpb24gYXMtaXMuCi0vLyBPdXRwdXRzIGEgdGV4IGNvb3Jk
IHdpdGggKDAsMSkgaW4gdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSBzY3JlZW4gYW5kICgx
LDApIGluIHRoZSBib3R0b20gcmlnaHQuCi0vLyBDMC5YWSBtdXN0IGJlIHRoZSBoYWxmLXBpeGVs
IHdpZHRoIGFuZCBoZWlnaHQuIEMwLlpXIG11c3QgYmUgMC4KLVZTX09VVFBVVCBmbGlweXZzKGlu
IGZsb2F0NCBwb3NpdGlvbiA6IFBPU0lUSU9OKQotewotICAgIFZTX09VVFBVVCBPdXQ7Ci0KLSAg
ICBPdXQucG9zaXRpb24gPSBwb3NpdGlvbiArIGhhbGZQaXhlbFNpemU7Ci0gICAgT3V0LnRleGNv
b3JkID0gcG9zaXRpb24gKiBmbG9hdDQoMC41LCAwLjUsIDEuMCwgMS4wKSArIGZsb2F0NCgwLjUs
IDAuNSwgMCwgMCk7Ci0KLSAgICByZXR1cm4gT3V0OwotfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9DbGVhcjExLmhs
c2wgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRl
cnMvQ2xlYXIxMS5obHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDJhYzY5OWI2
NmEyMjM5YWRiZjUyNTFmYWFmM2IzZTRjM2ZlYzVmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvc2hhZGVycy9DbGVhcjExLmhsc2wKKysrIC9kZXYvbnVsbApAQCAtMSwzOCAr
MCwwIEBACi12b2lkIFZTX0NsZWFyKCBpbiBmbG9hdDMgIGluUG9zaXRpb24gOiAgICBQT1NJVElP
TiwgIGluIGZsb2F0NCAgaW5Db2xvciA6IENPTE9SLAotICAgICAgICAgICAgICBvdXQgZmxvYXQ0
IG91dFBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIG91dCBmbG9hdDQgb3V0Q29sb3IgOiBDT0xPUikK
LXsKLSAgICBvdXRQb3NpdGlvbiA9IGZsb2F0NChpblBvc2l0aW9uLCAxLjBmKTsKLSAgICBvdXRD
b2xvciA9IGluQ29sb3I7Ci19Ci0KLS8vIEFzc3VtZSB3ZSBhcmUgaW4gU000Kywgd2hpY2ggaGFz
IDggY29sb3Igb3V0cHV0cwotc3RydWN0IFBTX091dHB1dE11bHRpcGxlCi17Ci0JZmxvYXQ0IGNv
bG9yMCA6IFNWX1RBUkdFVDA7Ci0JZmxvYXQ0IGNvbG9yMSA6IFNWX1RBUkdFVDE7Ci0JZmxvYXQ0
IGNvbG9yMiA6IFNWX1RBUkdFVDI7Ci0JZmxvYXQ0IGNvbG9yMyA6IFNWX1RBUkdFVDM7Ci0JZmxv
YXQ0IGNvbG9yNCA6IFNWX1RBUkdFVDQ7Ci0JZmxvYXQ0IGNvbG9yNSA6IFNWX1RBUkdFVDU7Ci0J
ZmxvYXQ0IGNvbG9yNiA6IFNWX1RBUkdFVDY7Ci0JZmxvYXQ0IGNvbG9yNyA6IFNWX1RBUkdFVDc7
Ci19OwotCi1QU19PdXRwdXRNdWx0aXBsZSBQU19DbGVhck11bHRpcGxlKGluIGZsb2F0NCBpblBv
c2l0aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0NCBpbkNvbG9yIDogQ09MT1IpCi17Ci0JUFNf
T3V0cHV0TXVsdGlwbGUgb3V0Q29sb3I7Ci0Jb3V0Q29sb3IuY29sb3IwID0gaW5Db2xvcjsKLQlv
dXRDb2xvci5jb2xvcjEgPSBpbkNvbG9yOwotCW91dENvbG9yLmNvbG9yMiA9IGluQ29sb3I7Ci0J
b3V0Q29sb3IuY29sb3IzID0gaW5Db2xvcjsKLQlvdXRDb2xvci5jb2xvcjQgPSBpbkNvbG9yOwot
CW91dENvbG9yLmNvbG9yNSA9IGluQ29sb3I7Ci0Jb3V0Q29sb3IuY29sb3I2ID0gaW5Db2xvcjsK
LQlvdXRDb2xvci5jb2xvcjcgPSBpbkNvbG9yOwotCXJldHVybiBvdXRDb2xvcjsKLX0KLQotZmxv
YXQ0IFBTX0NsZWFyU2luZ2xlKGluIGZsb2F0NCBpblBvc2l0aW9uIDogU1ZfUG9zaXRpb24sIGlu
IGZsb2F0NCBpbkNvbG9yIDogQ09MT1IpIDogU1ZfVGFyZ2V0MAotewotCXJldHVybiBpbkNvbG9y
OwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9zaGFkZXJzL1Bhc3N0aHJvdWdoMTEuaGxzbCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9QYXNzdGhyb3VnaDExLmhsc2wKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzYjc4MDFlZmMxZmVmNmUyMzkxODAwNjdkZDAy
MzY5OTg1NWI5YTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJz
L1Bhc3N0aHJvdWdoMTEuaGxzbAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLVRleHR1
cmUyRCBUZXh0dXJlIDogcmVnaXN0ZXIodDApOwotU2FtcGxlclN0YXRlIFNhbXBsZXIgOiByZWdp
c3RlcihzMCk7Ci0KLXZvaWQgVlNfUGFzc3Rocm91Z2goIGluIGZsb2F0MiAgaW5Qb3NpdGlvbiA6
ICAgIFBPU0lUSU9OLCAgaW4gZmxvYXQyICBpblRleENvb3JkIDogVEVYQ09PUkQwLAotICAgICAg
ICAgICAgICAgICAgICBvdXQgZmxvYXQ0IG91dFBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIG91dCBm
bG9hdDIgb3V0VGV4Q29vcmQgOiBURVhDT09SRDApCi17Ci0gICAgb3V0UG9zaXRpb24gPSBmbG9h
dDQoaW5Qb3NpdGlvbiwgMC4wZiwgMS4wZik7Ci0gICAgb3V0VGV4Q29vcmQgPSBpblRleENvb3Jk
OwotfQotCi1mbG9hdDQgUFNfUGFzc3Rocm91Z2hSR0JBKGluIGZsb2F0NCBpblBvc2l0aW9uIDog
U1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNWX1RBUkdF
VDAKLXsKLSAgICByZXR1cm4gVGV4dHVyZS5TYW1wbGUoU2FtcGxlciwgaW5UZXhDb29yZCkucmdi
YTsKLX0KLQotZmxvYXQ0IFBTX1Bhc3N0aHJvdWdoUkdCKGluIGZsb2F0NCBpblBvc2l0aW9uIDog
U1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNWX1RBUkdF
VDAKLXsKLSAgICByZXR1cm4gZmxvYXQ0KFRleHR1cmUuU2FtcGxlKFNhbXBsZXIsIGluVGV4Q29v
cmQpLnJnYiwgMS4wZik7Ci19Ci0KLWZsb2F0NCBQU19QYXNzdGhyb3VnaEx1bShpbiBmbG9hdDQg
aW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JE
MCkgOiBTVl9UQVJHRVQwCi17Ci0gICAgcmV0dXJuIGZsb2F0NChUZXh0dXJlLlNhbXBsZShTYW1w
bGVyLCBpblRleENvb3JkKS5ycnIsIDEuMGYpOwotfQotCi1mbG9hdDQgUFNfUGFzc3Rocm91Z2hM
dW1BbHBoYShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5U
ZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCi17Ci0gICAgcmV0dXJuIFRleHR1cmUu
U2FtcGxlKFNhbXBsZXIsIGluVGV4Q29vcmQpLnJycmE7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQv
Y2xlYXIxMXZzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL3NoYWRlcnMvY29tcGlsZWQvY2xlYXIxMXZzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDZiYzc0MzEyNmVkMDZjOGY2NzU4ZTEwZTVkMTc3MjAxNDk1Yzk2ZGIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyMTF2cy5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0
ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQN
Ci0vLw0KLS8vDQotLy8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1l
ICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAg
IFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0t
LS0tLS0gLS0tLS0tLSAtLS0tLS0NCi0vLyBQT1NJVElPTiAgICAgICAgICAgICAgICAgMCAgIHh5
eiAgICAgICAgIDAgICAgIE5PTkUgICBmbG9hdCAgIHh5eiANCi0vLyBDT0xPUiAgICAgICAgICAg
ICAgICAgICAgMCAgIHh5encgICAgICAgIDEgICAgIE5PTkUgICBmbG9hdCAgIHh5encNCi0vLw0K
LS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAg
IEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0t
LS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAg
IFBPUyAgIGZsb2F0ICAgeHl6dw0KLS8vIENPTE9SICAgICAgICAgICAgICAgICAgICAwICAgeHl6
dyAgICAgICAgMSAgICAgTk9ORSAgIGZsb2F0ICAgeHl6dw0KLS8vDQotdnNfNF8wDQotZGNsX2lu
cHV0IHYwLnh5eg0KLWRjbF9pbnB1dCB2MS54eXp3DQotZGNsX291dHB1dF9zaXYgbzAueHl6dywg
cG9zaXRpb24NCi1kY2xfb3V0cHV0IG8xLnh5encNCi1tb3YgbzAueHl6LCB2MC54eXp4DQotbW92
IG8wLncsIGwoMS4wMDAwMDApDQotbW92IG8xLnh5encsIHYxLnh5encNCi1yZXQgDQotLy8gQXBw
cm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBC
WVRFIGdfVlNfQ2xlYXJbXSA9DQotew0KLSAgICAgNjgsICA4OCwgIDY2LCAgNjcsICA5NywgICA1
LCANCi0gICAgIDEzLCAxNjMsIDE2MCwgMjU0LCAgOTUsIDEyNywgDQotICAgICAzMCwgMTk0LCAx
MjEsIDE0NCwgMjM2LCAxODUsIA0KLSAgICAgNTksICAyOSwgICAxLCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgIDQ4LCAgIDIsICAgMCwgICAwLCAgIDUsICAgMCwgDQotICAgICAgMCwgICAwLCAgNTIs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAxNDAsICAgMCwgICAwLCAgIDAsIDIyMCwgICAwLCANCi0g
ICAgICAwLCAgIDAsICA0OCwgICAxLCAgIDAsICAgMCwgDQotICAgIDE4MCwgICAxLCAgIDAsICAg
MCwgIDgyLCAgNjgsIA0KLSAgICAgNjksICA3MCwgIDgwLCAgIDAsICAgMCwgICAwLCANCi0gICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KLSAgICAgMjgsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCANCi0gICAgMjU0
LCAyNTUsICAgMCwgICAxLCAgIDAsICAgMCwgDQotICAgICAyOCwgICAwLCAgIDAsICAgMCwgIDc3
LCAxMDUsIA0KLSAgICAgOTksIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCANCi0gICAgMTE2LCAg
MzIsICA0MCwgIDgyLCAgNDEsICAzMiwgDQotICAgICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAg
ODMsIA0KLSAgICAxMDQsICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCANCi0gICAgIDY3LCAxMTEs
IDEwOSwgMTEyLCAxMDUsIDEwOCwgDQotICAgIDEwMSwgMTE0LCAgMzIsICA1NywgIDQ2LCAgNTEs
IA0KLSAgICAgNDgsICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4LCANCi0gICAgIDQ2LCAgNDksICA1
NCwgIDUxLCAgNTYsICA1MiwgDQotICAgICAgMCwgMTcxLCAgNzMsICA4MywgIDcxLCAgNzgsIA0K
LSAgICAgNzIsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgOCwg
ICAwLCAgIDAsICAgMCwgDQotICAgICA1NiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAzLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDcsICAgNywgICAwLCAgIDAsIA0KLSAgICAg
NjUsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQotICAgICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgIDE1LCAgMTUsICAgMCwgICAwLCANCi0gICAgIDgwLCAgNzksICA4MywgIDczLCAgODQs
ICA3MywgDQotICAgICA3OSwgIDc4LCAgIDAsICA2NywgIDc5LCAgNzYsIA0KLSAgICAgNzksICA4
MiwgICAwLCAxNzEsICA3OSwgIDgzLCANCi0gICAgIDcxLCAgNzgsICA3NiwgICAwLCAgIDAsICAg
MCwgDQotICAgICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
IDU2LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwg
DQotICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAxNSwgICAwLCANCi0gICAgICAwLCAgIDAsICA2OCwgICAwLCAgIDAsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAzLCAg
IDAsICAgMCwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgMTUsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgODMsICA4NiwgIDk1LCAgODAsIA0KLSAgICAgNzksICA4MywgIDczLCAgODQs
ICA3MywgIDc5LCANCi0gICAgIDc4LCAgIDAsICA2NywgIDc5LCAgNzYsICA3OSwgDQotICAgICA4
MiwgICAwLCAxNzEsIDE3MSwgIDgzLCAgNzIsIA0KLSAgICAgNjgsICA4MiwgMTI0LCAgIDAsICAg
MCwgICAwLCANCi0gICAgIDY0LCAgIDAsICAgMSwgICAwLCAgMzEsICAgMCwgDQotICAgICAgMCwg
ICAwLCAgOTUsICAgMCwgICAwLCAgIDMsIA0KLSAgICAxMTQsICAxNiwgIDE2LCAgIDAsICAgMCwg
ICAwLCANCi0gICAgICAwLCAgIDAsICA5NSwgICAwLCAgIDAsICAgMywgDQotICAgIDI0MiwgIDE2
LCAgMTYsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgMTAzLCAgIDAsICAgMCwgICA0
LCANCi0gICAgMjQyLCAgMzIsICAxNiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAg
IDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAxMDEsICAgMCwgICAwLCAgIDMsIDI0MiwgIDMyLCAN
Ci0gICAgIDE2LCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQotICAgICA1NCwgICAwLCAgIDAs
ICAgNSwgMTE0LCAgMzIsIA0KLSAgICAgMTYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0g
ICAgIDcwLCAgMTgsICAxNiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgNTQsICAg
MCwgICAwLCAgIDUsIA0KLSAgICAxMzAsICAzMiwgIDE2LCAgIDAsICAgMCwgICAwLCANCi0gICAg
ICAwLCAgIDAsICAgMSwgIDY0LCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAxMjgsICA2Mywg
IDU0LCAgIDAsIA0KLSAgICAgIDAsICAgNSwgMjQyLCAgMzIsICAxNiwgICAwLCANCi0gICAgICAx
LCAgIDAsICAgMCwgICAwLCAgNzAsICAzMCwgDQotICAgICAxNiwgICAwLCAgIDEsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAgNjIsICAgMCwgICAwLCAgIDEsICA4MywgIDg0LCANCi0gICAgIDY1LCAg
ODQsIDExNiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICA0LCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsIA0KLSAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAg
MA0KLX07DQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL2NsZWFybXVsdGlwbGUxMXBzLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQv
Y2xlYXJtdWx0aXBsZTExcHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTRiNDQ1
YWMzZjZhNzFlNGM1ZTIxYWRjNGJhZTlhZmRiOTI4MzllNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJtdWx0aXBsZTExcHMuaAorKysg
L2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5
IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0DQotLy8N
Ci0vLw0KLS8vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAg
ICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlICBGb3JtYXQgICBVc2Vk
DQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0t
IC0tLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAg
ICAgICAwICAgICAgUE9TICAgZmxvYXQgICAgICAgDQotLy8gQ09MT1IgICAgICAgICAgICAgICAg
ICAgIDAgICB4eXp3ICAgICAgICAxICAgICBOT05FICAgZmxvYXQgICB4eXp3DQotLy8NCi0vLw0K
LS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRl
eCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0N
Ci0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQg
ICBmbG9hdCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMSAgIHh5encgICAg
ICAgIDEgICBUQVJHRVQgICBmbG9hdCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAg
ICAgMiAgIHh5encgICAgICAgIDIgICBUQVJHRVQgICBmbG9hdCAgIHh5encNCi0vLyBTVl9UQVJH
RVQgICAgICAgICAgICAgICAgMyAgIHh5encgICAgICAgIDMgICBUQVJHRVQgICBmbG9hdCAgIHh5
encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgNCAgIHh5encgICAgICAgIDQgICBUQVJH
RVQgICBmbG9hdCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgNSAgIHh5encg
ICAgICAgIDUgICBUQVJHRVQgICBmbG9hdCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAg
ICAgICAgNiAgIHh5encgICAgICAgIDYgICBUQVJHRVQgICBmbG9hdCAgIHh5encNCi0vLyBTVl9U
QVJHRVQgICAgICAgICAgICAgICAgNyAgIHh5encgICAgICAgIDcgICBUQVJHRVQgICBmbG9hdCAg
IHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHl6dw0KLWRjbF9v
dXRwdXQgbzAueHl6dw0KLWRjbF9vdXRwdXQgbzEueHl6dw0KLWRjbF9vdXRwdXQgbzIueHl6dw0K
LWRjbF9vdXRwdXQgbzMueHl6dw0KLWRjbF9vdXRwdXQgbzQueHl6dw0KLWRjbF9vdXRwdXQgbzUu
eHl6dw0KLWRjbF9vdXRwdXQgbzYueHl6dw0KLWRjbF9vdXRwdXQgbzcueHl6dw0KLW1vdiBvMC54
eXp3LCB2MS54eXp3DQotbW92IG8xLnh5encsIHYxLnh5encNCi1tb3YgbzIueHl6dywgdjEueHl6
dw0KLW1vdiBvMy54eXp3LCB2MS54eXp3DQotbW92IG80Lnh5encsIHYxLnh5encNCi1tb3YgbzUu
eHl6dywgdjEueHl6dw0KLW1vdiBvNi54eXp3LCB2MS54eXp3DQotbW92IG83Lnh5encsIHYxLnh5
encNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA5IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0j
ZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfQ2xlYXJNdWx0aXBsZVtdID0NCi17DQotICAgICA2
OCwgIDg4LCAgNjYsICA2NywgIDkyLCAgNTQsIA0KLSAgICAxMjAsIDEwNSwgMTY2LCAxOTYsIDEz
MiwgMTU4LCANCi0gICAgMjA5LCAgMzMsIDE4NSwgMTIyLCAgIDgsIDE4OSwgDQotICAgIDE0NSwg
MTE0LCAgIDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgODgsICAgMywgICAwLCAgIDAsICAgNSwg
ICAwLCANCi0gICAgICAwLCAgIDAsICA1MiwgICAwLCAgIDAsICAgMCwgDQotICAgIDE0MCwgICAw
LCAgIDAsICAgMCwgMjI0LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgMTg4LCAgIDEsICAgMCwgICAw
LCANCi0gICAgMjIwLCAgIDIsICAgMCwgICAwLCAgODIsICA2OCwgDQotICAgICA2OSwgIDcwLCAg
ODAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAyOCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDQsIA0KLSAgICAyNTUsIDI1NSwgICAwLCAgIDEsICAgMCwgICAwLCANCi0g
ICAgIDI4LCAgIDAsICAgMCwgICAwLCAgNzcsIDEwNSwgDQotICAgICA5OSwgMTE0LCAxMTEsIDEx
NSwgMTExLCAxMDIsIA0KLSAgICAxMTYsICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCANCi0gICAg
IDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgDQotICAgIDEwNCwgIDk3LCAxMDAsIDEwMSwg
MTE0LCAgMzIsIA0KLSAgICAgNjcsIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCANCi0gICAgMTAx
LCAxMTQsICAzMiwgIDU3LCAgNDYsICA1MSwgDQotICAgICA0OCwgIDQ2LCAgNTcsICA1MCwgIDQ4
LCAgNDgsIA0KLSAgICAgNDYsICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCANCi0gICAgICAwLCAx
NzEsICA3MywgIDgzLCAgNzEsICA3OCwgDQotICAgICA3NiwgICAwLCAgIDAsICAgMCwgICAyLCAg
IDAsIA0KLSAgICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCANCi0gICAgIDU2LCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAs
IA0KLSAgICAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAx
NSwgICAwLCAgIDAsICAgMCwgDQotICAgICA2OCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAzLCAgIDAsICAgMCwg
ICAwLCAgIDEsICAgMCwgDQotICAgICAgMCwgICAwLCAgMTUsICAxNSwgICAwLCAgIDAsIA0KLSAg
ICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCANCi0gICAgIDczLCAgODQsICA3MywgIDc5
LCAgNzgsICAgMCwgDQotICAgICA2NywgIDc5LCAgNzYsICA3OSwgIDgyLCAgIDAsIA0KLSAgICAx
NzEsIDE3MSwgIDc5LCAgODMsICA3MSwgIDc4LCANCi0gICAgMjEyLCAgIDAsICAgMCwgICAwLCAg
IDgsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsIA0KLSAgICAyMDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQotICAgICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgIDE1LCAgIDAsICAgMCwgICAwLCANCi0gICAgMjAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAg
MCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDMsICAgMCwg
ICAwLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwg
DQotICAgIDIwMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgMTUsICAgMCwgICAwLCAgIDAsIA0KLSAgICAyMDAsICAgMCwgICAwLCAg
IDAsICAgMywgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMywgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDE1LCAgIDAs
ICAgMCwgICAwLCANCi0gICAgMjAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDMsICAgMCwgICAwLCAgIDAsICAg
NCwgICAwLCANCi0gICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQotICAgIDIwMCwg
ICAwLCAgIDAsICAgMCwgICA1LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCANCi0gICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgDQotICAgICAgMCwgICAw
LCAgMTUsICAgMCwgICAwLCAgIDAsIA0KLSAgICAyMDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAw
LCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMywgICAwLCAg
IDAsICAgMCwgICA2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDE1LCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgMjAwLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDMsICAgMCwgICAwLCAgIDAsICAgNywgICAwLCANCi0g
ICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQotICAgICA4MywgIDg2LCAgOTUsICA4
NCwgIDY1LCAgODIsIA0KLSAgICAgNzEsICA2OSwgIDg0LCAgIDAsIDE3MSwgMTcxLCANCi0gICAg
IDgzLCAgNzIsICA2OCwgIDgyLCAgMjQsICAgMSwgDQotICAgICAgMCwgICAwLCAgNjQsICAgMCwg
ICAwLCAgIDAsIA0KLSAgICAgNzAsICAgMCwgICAwLCAgIDAsICA5OCwgIDE2LCANCi0gICAgICAw
LCAgIDMsIDI0MiwgIDE2LCAgMTYsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgMTAx
LCAgIDAsIA0KLSAgICAgIDAsICAgMywgMjQyLCAgMzIsICAxNiwgICAwLCANCi0gICAgICAwLCAg
IDAsICAgMCwgICAwLCAxMDEsICAgMCwgDQotICAgICAgMCwgICAzLCAyNDIsICAzMiwgIDE2LCAg
IDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsIDEwMSwgICAwLCANCi0gICAgICAwLCAgIDMs
IDI0MiwgIDMyLCAgMTYsICAgMCwgDQotICAgICAgMiwgICAwLCAgIDAsICAgMCwgMTAxLCAgIDAs
IA0KLSAgICAgIDAsICAgMywgMjQyLCAgMzIsICAxNiwgICAwLCANCi0gICAgICAzLCAgIDAsICAg
MCwgICAwLCAxMDEsICAgMCwgDQotICAgICAgMCwgICAzLCAyNDIsICAzMiwgIDE2LCAgIDAsIA0K
LSAgICAgIDQsICAgMCwgICAwLCAgIDAsIDEwMSwgICAwLCANCi0gICAgICAwLCAgIDMsIDI0Miwg
IDMyLCAgMTYsICAgMCwgDQotICAgICAgNSwgICAwLCAgIDAsICAgMCwgMTAxLCAgIDAsIA0KLSAg
ICAgIDAsICAgMywgMjQyLCAgMzIsICAxNiwgICAwLCANCi0gICAgICA2LCAgIDAsICAgMCwgICAw
LCAxMDEsICAgMCwgDQotICAgICAgMCwgICAzLCAyNDIsICAzMiwgIDE2LCAgIDAsIA0KLSAgICAg
IDcsICAgMCwgICAwLCAgIDAsICA1NCwgICAwLCANCi0gICAgICAwLCAgIDUsIDI0MiwgIDMyLCAg
MTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDcwLCAgMzAsIA0KLSAgICAgMTYs
ICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAgIDU0LCAgIDAsICAgMCwgICA1LCAyNDIs
ICAzMiwgDQotICAgICAxNiwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgNzAsICAz
MCwgIDE2LCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICA1NCwgICAwLCAgIDAsICAg
NSwgDQotICAgIDI0MiwgIDMyLCAgMTYsICAgMCwgICAyLCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
IDcwLCAgMzAsICAxNiwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgNTQsICAgMCwg
DQotICAgICAgMCwgICA1LCAyNDIsICAzMiwgIDE2LCAgIDAsIA0KLSAgICAgIDMsICAgMCwgICAw
LCAgIDAsICA3MCwgIDMwLCANCi0gICAgIDE2LCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQot
ICAgICA1NCwgICAwLCAgIDAsICAgNSwgMjQyLCAgMzIsIA0KLSAgICAgMTYsICAgMCwgICA0LCAg
IDAsICAgMCwgICAwLCANCi0gICAgIDcwLCAgMzAsICAxNiwgICAwLCAgIDEsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgNTQsICAgMCwgICAwLCAgIDUsIA0KLSAgICAyNDIsICAzMiwgIDE2LCAgIDAs
ICAgNSwgICAwLCANCi0gICAgICAwLCAgIDAsICA3MCwgIDMwLCAgMTYsICAgMCwgDQotICAgICAg
MSwgICAwLCAgIDAsICAgMCwgIDU0LCAgIDAsIA0KLSAgICAgIDAsICAgNSwgMjQyLCAgMzIsICAx
NiwgICAwLCANCi0gICAgICA2LCAgIDAsICAgMCwgICAwLCAgNzAsICAzMCwgDQotICAgICAxNiwg
ICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgNTQsICAgMCwgICAwLCAgIDUsIDI0Miwg
IDMyLCANCi0gICAgIDE2LCAgIDAsICAgNywgICAwLCAgIDAsICAgMCwgDQotICAgICA3MCwgIDMw
LCAgMTYsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDYyLCAgIDAsICAgMCwgICAx
LCANCi0gICAgIDgzLCAgODQsICA2NSwgIDg0LCAxMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAg
IDksICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgICAwLCAgIDAsICAgOSwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0g
ICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAgIDksICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDANCi19Ow0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9jbGVh
cnNpbmdsZTExcHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvc2hhZGVycy9jb21waWxlZC9jbGVhcnNpbmdsZTExcHMuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggODdjYjA4N2M3NTA1MjYyYzgwN2IzZjRhNTE3MWExZDgwZTYyMWY1ZS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvY2xl
YXJzaW5nbGUxMXBzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotI2lmIDANCi0v
Lw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDku
MzAuOTIwMC4xNjM4NA0KLS8vDQotLy8NCi0vLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToN
Ci0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNW
YWx1ZSAgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0t
LSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1Bvc2l0aW9uICAgICAg
ICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgIGZsb2F0ICAgICAgIA0KLS8vIENP
TE9SICAgICAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMSAgICAgTk9ORSAgIGZsb2F0
ICAgeHl6dw0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAg
ICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlICBGb3JtYXQgICBV
c2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0t
LS0tIC0tLS0tLS0gLS0tLS0tDQotLy8gU1ZfVGFyZ2V0ICAgICAgICAgICAgICAgIDAgICB4eXp3
ICAgICAgICAwICAgVEFSR0VUICAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfaW5w
dXRfcHMgbGluZWFyIHYxLnh5encNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1tb3YgbzAueHl6dywg
djEueHl6dw0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDIgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNl
ZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19DbGVhclNpbmdsZVtdID0NCi17DQotICAg
ICA2OCwgIDg4LCAgNjYsICA2NywgIDEzLCAxNTIsIA0KLSAgICAgMzIsICA0OSwgMjIyLCAyMzYs
ICA5MiwgIDIwLCANCi0gICAgMTg4LCAgNzEsICA4OCwgIDQ2LCAxNjMsIDI0MSwgDQotICAgIDE4
OCwgMjM4LCAgIDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAyMDgsICAgMSwgICAwLCAgIDAsICAg
NSwgICAwLCANCi0gICAgICAwLCAgIDAsICA1MiwgICAwLCAgIDAsICAgMCwgDQotICAgIDE0MCwg
ICAwLCAgIDAsICAgMCwgMjI0LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDIwLCAgIDEsICAgMCwg
ICAwLCANCi0gICAgIDg0LCAgIDEsICAgMCwgICAwLCAgODIsICA2OCwgDQotICAgICA2OSwgIDcw
LCAgODAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAyOCwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDQsIA0KLSAgICAyNTUsIDI1NSwgICAwLCAgIDEsICAgMCwgICAwLCAN
Ci0gICAgIDI4LCAgIDAsICAgMCwgICAwLCAgNzcsIDEwNSwgDQotICAgICA5OSwgMTE0LCAxMTEs
IDExNSwgMTExLCAxMDIsIA0KLSAgICAxMTYsICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCANCi0g
ICAgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgDQotICAgIDEwNCwgIDk3LCAxMDAsIDEw
MSwgMTE0LCAgMzIsIA0KLSAgICAgNjcsIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCANCi0gICAg
MTAxLCAxMTQsICAzMiwgIDU3LCAgNDYsICA1MSwgDQotICAgICA0OCwgIDQ2LCAgNTcsICA1MCwg
IDQ4LCAgNDgsIA0KLSAgICAgNDYsICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCANCi0gICAgICAw
LCAxNzEsICA3MywgIDgzLCAgNzEsICA3OCwgDQotICAgICA3NiwgICAwLCAgIDAsICAgMCwgICAy
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCANCi0gICAgIDU2LCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAg
IDAsIA0KLSAgICAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAs
ICAxNSwgICAwLCAgIDAsICAgMCwgDQotICAgICA2OCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAzLCAgIDAsICAg
MCwgICAwLCAgIDEsICAgMCwgDQotICAgICAgMCwgICAwLCAgMTUsICAxNSwgICAwLCAgIDAsIA0K
LSAgICAgODMsICA4NiwgIDk1LCAgODAsIDExMSwgMTE1LCANCi0gICAgMTA1LCAxMTYsIDEwNSwg
MTExLCAxMTAsICAgMCwgDQotICAgICA2NywgIDc5LCAgNzYsICA3OSwgIDgyLCAgIDAsIA0KLSAg
ICAxNzEsIDE3MSwgIDc5LCAgODMsICA3MSwgIDc4LCANCi0gICAgIDQ0LCAgIDAsICAgMCwgICAw
LCAgIDEsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
MzIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQotICAgICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgIDE1LCAgIDAsICAgMCwgICAwLCANCi0gICAgIDgzLCAgODYsICA5NSwgIDg0LCAgOTcs
IDExNCwgDQotICAgIDEwMywgMTAxLCAxMTYsICAgMCwgMTcxLCAxNzEsIA0KLSAgICAgODMsICA3
MiwgIDY4LCAgODIsICA1NiwgICAwLCANCi0gICAgICAwLCAgIDAsICA2NCwgICAwLCAgIDAsICAg
MCwgDQotICAgICAxNCwgICAwLCAgIDAsICAgMCwgIDk4LCAgMTYsIA0KLSAgICAgIDAsICAgMywg
MjQyLCAgMTYsICAxNiwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAxMDEsICAgMCwg
DQotICAgICAgMCwgICAzLCAyNDIsICAzMiwgIDE2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAw
LCAgIDAsICA1NCwgICAwLCANCi0gICAgICAwLCAgIDUsIDI0MiwgIDMyLCAgMTYsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDcwLCAgMzAsIA0KLSAgICAgMTYsICAgMCwgICAxLCAg
IDAsICAgMCwgICAwLCANCi0gICAgIDYyLCAgIDAsICAgMCwgICAxLCAgODMsICA4NCwgDQotICAg
ICA2NSwgIDg0LCAxMTYsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDIsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQotICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAN
Ci0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0g
ICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAg
ICAwLCAgIDANCi19Ow0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9jb21wb25lbnRtYXNrcHMuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21w
aWxlZC9jb21wb25lbnRtYXNrcHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYy
ODQ3YjhlN2QzNWYxNTdjYTFhOGQyODE4M2M1ZWI3YzRkMjZlZS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvY29tcG9uZW50bWFza3BzLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5
IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0DQotLy8N
Ci0vLy8NCi0vLyBQYXJhbWV0ZXJzOg0KLS8vDQotLy8gICBmbG9hdDQgbW9kZTsNCi0vLyAgIHNh
bXBsZXIyRCB0ZXg7DQotLy8NCi0vLw0KLS8vIFJlZ2lzdGVyczoNCi0vLw0KLS8vICAgTmFtZSAg
ICAgICAgIFJlZyAgIFNpemUNCi0vLyAgIC0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tDQotLy8gICBt
b2RlICAgICAgICAgYzAgICAgICAgMQ0KLS8vICAgdGV4ICAgICAgICAgIHMwICAgICAgIDENCi0v
Lw0KLQ0KLSAgICBwc18yXzANCi0gICAgZGNsIHQwLnh5DQotICAgIGRjbF8yZCBzMA0KLSAgICB0
ZXhsZCByMCwgdDAsIHMwDQotICAgIG11bCByMS54eXosIHIwLCBjMC54DQotICAgIG1hZCByMS53
LCByMC53LCBjMC56LCBjMC53DQotICAgIG1vdiBvQzAsIHIxDQotDQotLy8gYXBwcm94aW1hdGVs
eSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVyZSwgMyBhcml0aG1ldGljKQ0KLSNl
bmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19wczIwX2NvbXBvbmVudG1hc2twc1tdID0NCi17DQotICAg
ICAgMCwgICAyLCAyNTUsIDI1NSwgMjU0LCAyNTUsIA0KLSAgICAgNDQsICAgMCwgIDY3LCAgODQs
ICA2NSwgIDY2LCANCi0gICAgIDI4LCAgIDAsICAgMCwgICAwLCAxMTksICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDAsICAgMiwgMjU1LCAyNTUsIA0KLSAgICAgIDIsICAgMCwgICAwLCAgIDAsICAy
OCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgDQotICAgIDExMiwg
ICAwLCAgIDAsICAgMCwgIDY4LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwg
ICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgNzYsICAgMCwgDQotICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgOTIsICAgMCwgICAwLCAgIDAsICAgMywgICAw
LCANCi0gICAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQotICAgICA5NiwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgMTA5LCAxMTEsIDEwMCwgMTAxLCAN
Ci0gICAgICAwLCAxNzEsIDE3MSwgMTcxLCAgIDEsICAgMCwgDQotICAgICAgMywgICAwLCAgIDEs
ICAgMCwgICA0LCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0g
ICAgICAwLCAgIDAsIDExNiwgMTAxLCAxMjAsICAgMCwgDQotICAgICAgNCwgICAwLCAgMTIsICAg
MCwgICAxLCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAg
ICAwLCAgIDAsICAgMCwgICAwLCAxMTIsIDExNSwgDQotICAgICA5NSwgIDUwLCAgOTUsICA0OCwg
ICAwLCAgNzcsIA0KLSAgICAxMDUsICA5OSwgMTE0LCAxMTEsIDExNSwgMTExLCANCi0gICAgMTAy
LCAxMTYsICAzMiwgIDQwLCAgODIsICA0MSwgDQotICAgICAzMiwgIDcyLCAgNzYsICA4MywgIDc2
LCAgMzIsIA0KLSAgICAgODMsIDEwNCwgIDk3LCAxMDAsIDEwMSwgMTE0LCANCi0gICAgIDMyLCAg
NjcsIDExMSwgMTA5LCAxMTIsIDEwNSwgDQotICAgIDEwOCwgMTAxLCAxMTQsICAzMiwgIDU3LCAg
NDYsIA0KLSAgICAgNTEsICA0OCwgIDQ2LCAgNTcsICA1MCwgIDQ4LCANCi0gICAgIDQ4LCAgNDYs
ICA0OSwgIDU0LCAgNTEsICA1NiwgDQotICAgICA1MiwgICAwLCAxNzEsIDE3MSwgIDMxLCAgIDAs
IA0KLSAgICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTI4LCANCi0gICAgICAwLCAgIDAsICAg
MywgMTc2LCAgMzEsICAgMCwgDQotICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAxNDQsIA0K
LSAgICAgIDAsICAgOCwgIDE1LCAxNjAsICA2NiwgICAwLCANCi0gICAgICAwLCAgIDMsICAgMCwg
ICAwLCAgMTUsIDEyOCwgDQotICAgICAgMCwgICAwLCAyMjgsIDE3NiwgICAwLCAgIDgsIA0KLSAg
ICAyMjgsIDE2MCwgICA1LCAgIDAsICAgMCwgICAzLCANCi0gICAgICAxLCAgIDAsICAgNywgMTI4
LCAgIDAsICAgMCwgDQotICAgIDIyOCwgMTI4LCAgIDAsICAgMCwgICAwLCAxNjAsIA0KLSAgICAg
IDQsICAgMCwgICAwLCAgIDQsICAgMSwgICAwLCANCi0gICAgICA4LCAxMjgsICAgMCwgICAwLCAy
NTUsIDEyOCwgDQotICAgICAgMCwgICAwLCAxNzAsIDE2MCwgICAwLCAgIDAsIA0KLSAgICAyNTUs
IDE2MCwgICAxLCAgIDAsICAgMCwgICAyLCANCi0gICAgICAwLCAgIDgsICAxNSwgMTI4LCAgIDEs
ICAgMCwgDQotICAgIDIyOCwgMTI4LCAyNTUsIDI1NSwgICAwLCAgIDANCi19Ow0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVy
cy9jb21waWxlZC9mbGlweXZzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvZmxpcHl2cy5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMjU3NmVkNjc0MmYyZTJmNWVmM2ZiMTRhYjBkODNjNjk2YjU3M2QyLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9mbGlw
eXZzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0jaWYgMA0KLS8vDQotLy8gR2Vu
ZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2
Mzg0DQotLy8NCi0vLy8NCi0vLyBQYXJhbWV0ZXJzOg0KLS8vDQotLy8gICBmbG9hdDQgaGFsZlBp
eGVsU2l6ZTsNCi0vLw0KLS8vDQotLy8gUmVnaXN0ZXJzOg0KLS8vDQotLy8gICBOYW1lICAgICAg
ICAgIFJlZyAgIFNpemUNCi0vLyAgIC0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQ0KLS8vICAgaGFs
ZlBpeGVsU2l6ZSBjMCAgICAgICAxDQotLy8NCi0NCi0gICAgdnNfMl8wDQotICAgIGRlZiBjMSwg
MC41LCAxLCAwLCAwDQotICAgIGRjbF9wb3NpdGlvbiB2MA0KLSAgICBhZGQgb1BvcywgdjAsIGMw
DQotICAgIG1hZCBvVDAsIHYwLCBjMS54eHl5LCBjMS54eHp6DQotDQotLy8gYXBwcm94aW1hdGVs
eSAyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfdnMy
MF9mbGlweXZzW10gPQ0KLXsNCi0gICAgICAwLCAgIDIsIDI1NCwgMjU1LCAyNTQsIDI1NSwgDQot
ICAgICAzNiwgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIA0KLSAgICAgMjgsICAgMCwgICAwLCAg
IDAsICA4NywgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTQsIDI1NSwgDQotICAg
ICAgMSwgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDEs
ICAgMCwgICAwLCANCi0gICAgIDgwLCAgIDAsICAgMCwgICAwLCAgNDgsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICA2
NCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgIDEwNCwg
IDk3LCAxMDgsIDEwMiwgIDgwLCAxMDUsIA0KLSAgICAxMjAsIDEwMSwgMTA4LCAgODMsIDEwNSwg
MTIyLCANCi0gICAgMTAxLCAgIDAsIDE3MSwgMTcxLCAgIDEsICAgMCwgDQotICAgICAgMywgICAw
LCAgIDEsICAgMCwgICA0LCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCANCi0gICAgICAwLCAgIDAsIDExOCwgMTE1LCAgOTUsICA1MCwgDQotICAgICA5NSwgIDQ4LCAg
IDAsICA3NywgMTA1LCAgOTksIA0KLSAgICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAN
Ci0gICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgDQotICAgICA3NiwgIDgzLCAgNzYs
ICAzMiwgIDgzLCAxMDQsIA0KLSAgICAgOTcsIDEwMCwgMTAxLCAxMTQsICAzMiwgIDY3LCANCi0g
ICAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgDQotICAgIDExNCwgIDMyLCAgNTcsICA0
NiwgIDUxLCAgNDgsIA0KLSAgICAgNDYsICA1NywgIDUwLCAgNDgsICA0OCwgIDQ2LCANCi0gICAg
IDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAgMCwgDQotICAgIDE3MSwgMTcxLCAgODEsICAgMCwg
ICAwLCAgIDUsIA0KLSAgICAgIDEsICAgMCwgIDE1LCAxNjAsICAgMCwgICAwLCANCi0gICAgICAw
LCAgNjMsICAgMCwgICAwLCAxMjgsICA2MywgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDMxLCAgIDAsICAgMCwgICAyLCANCi0gICAgICAwLCAg
IDAsICAgMCwgMTI4LCAgIDAsICAgMCwgDQotICAgICAxNSwgMTQ0LCAgIDIsICAgMCwgICAwLCAg
IDMsIA0KLSAgICAgIDAsICAgMCwgIDE1LCAxOTIsICAgMCwgICAwLCANCi0gICAgMjI4LCAxNDQs
ICAgMCwgICAwLCAyMjgsIDE2MCwgDQotICAgICAgNCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAs
IA0KLSAgICAgMTUsIDIyNCwgICAwLCAgIDAsIDIyOCwgMTQ0LCANCi0gICAgICAxLCAgIDAsICA4
MCwgMTYwLCAgIDEsICAgMCwgDQotICAgIDE2MCwgMTYwLCAyNTUsIDI1NSwgICAwLCAgIDANCi19
Ow0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvc2hhZGVycy9jb21waWxlZC9sdW1pbmFuY2Vwcy5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL2x1bWluYW5jZXBz
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwMzEzYjA4NjBlY2ZlMDI2NzdkZGIz
ZjAwMDkxNTFmNzhhM2JmYjIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9z
aGFkZXJzL2NvbXBpbGVkL2x1bWluYW5jZXBzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCww
IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFk
ZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0DQotLy8NCi0vLy8NCi0vLyBQYXJhbWV0ZXJzOg0K
LS8vDQotLy8gICBmbG9hdDQgbW9kZTsNCi0vLyAgIHNhbXBsZXIyRCB0ZXg7DQotLy8NCi0vLw0K
LS8vIFJlZ2lzdGVyczoNCi0vLw0KLS8vICAgTmFtZSAgICAgICAgIFJlZyAgIFNpemUNCi0vLyAg
IC0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tDQotLy8gICBtb2RlICAgICAgICAgYzAgICAgICAgMQ0K
LS8vICAgdGV4ICAgICAgICAgIHMwICAgICAgIDENCi0vLw0KLQ0KLSAgICBwc18yXzANCi0gICAg
ZGNsIHQwLnh5DQotICAgIGRjbF8yZCBzMA0KLSAgICB0ZXhsZCByMCwgdDAsIHMwDQotICAgIG1h
ZCByMS53LCByMC53LCBjMC54LCBjMC55DQotICAgIG1vdiByMS54eXosIHIwLngNCi0gICAgbW92
IG9DMCwgcjENCi0NCi0vLyBhcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAo
MSB0ZXh0dXJlLCAzIGFyaXRobWV0aWMpDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX3BzMjBf
bHVtaW5hbmNlcHNbXSA9DQotew0KLSAgICAgIDAsICAgMiwgMjU1LCAyNTUsIDI1NCwgMjU1LCAN
Ci0gICAgIDQ0LCAgIDAsICA2NywgIDg0LCAgNjUsICA2NiwgDQotICAgICAyOCwgICAwLCAgIDAs
ICAgMCwgMTE5LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDIsIDI1NSwgMjU1LCANCi0g
ICAgICAyLCAgIDAsICAgMCwgICAwLCAgMjgsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAg
MSwgICAwLCAgIDAsIA0KLSAgICAxMTIsICAgMCwgICAwLCAgIDAsICA2OCwgICAwLCANCi0gICAg
ICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwg
IDc2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgIDky
LCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAgOTYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAg
IDAsIDEwOSwgMTExLCAxMDAsIDEwMSwgDQotICAgICAgMCwgMTcxLCAxNzEsIDE3MSwgICAxLCAg
IDAsIA0KLSAgICAgIDMsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCANCi0gICAgICAxLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAxMTYsIDEwMSwgMTIwLCAgIDAs
IA0KLSAgICAgIDQsICAgMCwgIDEyLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAxLCAgIDAsICAg
MSwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgMTEyLCAxMTUsIA0K
LSAgICAgOTUsICA1MCwgIDk1LCAgNDgsICAgMCwgIDc3LCANCi0gICAgMTA1LCAgOTksIDExNCwg
MTExLCAxMTUsIDExMSwgDQotICAgIDEwMiwgMTE2LCAgMzIsICA0MCwgIDgyLCAgNDEsIA0KLSAg
ICAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCANCi0gICAgIDgzLCAxMDQsICA5NywgMTAw
LCAxMDEsIDExNCwgDQotICAgICAzMiwgIDY3LCAxMTEsIDEwOSwgMTEyLCAxMDUsIA0KLSAgICAx
MDgsIDEwMSwgMTE0LCAgMzIsICA1NywgIDQ2LCANCi0gICAgIDUxLCAgNDgsICA0NiwgIDU3LCAg
NTAsICA0OCwgDQotICAgICA0OCwgIDQ2LCAgNDksICA1NCwgIDUxLCAgNTYsIA0KLSAgICAgNTIs
ICAgMCwgMTcxLCAxNzEsICAzMSwgICAwLCANCi0gICAgICAwLCAgIDIsICAgMCwgICAwLCAgIDAs
IDEyOCwgDQotICAgICAgMCwgICAwLCAgIDMsIDE3NiwgIDMxLCAgIDAsIA0KLSAgICAgIDAsICAg
MiwgICAwLCAgIDAsICAgMCwgMTQ0LCANCi0gICAgICAwLCAgIDgsICAxNSwgMTYwLCAgNjYsICAg
MCwgDQotICAgICAgMCwgICAzLCAgIDAsICAgMCwgIDE1LCAxMjgsIA0KLSAgICAgIDAsICAgMCwg
MjI4LCAxNzYsICAgMCwgICA4LCANCi0gICAgMjI4LCAxNjAsICAgNCwgICAwLCAgIDAsICAgNCwg
DQotICAgICAgMSwgICAwLCAgIDgsIDEyOCwgICAwLCAgIDAsIA0KLSAgICAyNTUsIDEyOCwgICAw
LCAgIDAsICAgMCwgMTYwLCANCi0gICAgICAwLCAgIDAsICA4NSwgMTYwLCAgIDEsICAgMCwgDQot
ICAgICAgMCwgICAyLCAgIDEsICAgMCwgICA3LCAxMjgsIA0KLSAgICAgIDAsICAgMCwgICAwLCAx
MjgsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDIsICAgMCwgICA4LCAgMTUsIDEyOCwgDQotICAg
ICAgMSwgICAwLCAyMjgsIDEyOCwgMjU1LCAyNTUsIA0KLSAgICAgIDAsICAgMA0KLX07DQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9z
aGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdoMTF2cy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdoMTF2
cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM5NTIxNmU5OTIwZmNjYTAzMmIx
ZWFjODUzZTg1YWI4YjFiNjYwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
c2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaDExdnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEz
NCArMCwwIEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExT
TCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0DQotLy8NCi0vLw0KLS8vLw0KLS8vDQot
Ly8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXgg
ICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlICBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tDQot
Ly8gUE9TSVRJT04gICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAwICAgICBOT05FICAg
ZmxvYXQgICB4eSAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAg
ICAxICAgICBOT05FICAgZmxvYXQgICB4eSAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1
cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIg
U3lzVmFsdWUgIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAt
LS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAg
ICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgICBmbG9hdCAgIHh5encNCi0v
LyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgICBm
bG9hdCAgIHh5ICANCi0vLw0KLXZzXzRfMA0KLWRjbF9pbnB1dCB2MC54eQ0KLWRjbF9pbnB1dCB2
MS54eQ0KLWRjbF9vdXRwdXRfc2l2IG8wLnh5encsIHBvc2l0aW9uDQotZGNsX291dHB1dCBvMS54
eQ0KLW1vdiBvMC54eSwgdjAueHl4eA0KLW1vdiBvMC56dywgbCgwLDAsMCwxLjAwMDAwMCkNCi1t
b3YgbzEueHksIHYxLnh5eHgNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9u
IHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfVlNfUGFzc3Rocm91Z2hbXSA9
DQotew0KLSAgICAgNjgsICA4OCwgIDY2LCAgNjcsIDE5NywgMjE0LCANCi0gICAgMTg0LCAgODUs
IDI0MCwgIDk0LCAgNzEsICA0OCwgDQotICAgIDE2NSwgIDM0LCAxNDIsIDIzMywgICAwLCAxMzUs
IA0KLSAgICAxOTMsIDE3OCwgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAgIDY4LCAgIDIsICAg
MCwgICAwLCAgIDUsICAgMCwgDQotICAgICAgMCwgICAwLCAgNTIsICAgMCwgICAwLCAgIDAsIA0K
LSAgICAxNDAsICAgMCwgICAwLCAgIDAsIDIyNCwgICAwLCANCi0gICAgICAwLCAgIDAsICA1Niwg
ICAxLCAgIDAsICAgMCwgDQotICAgIDIwMCwgICAxLCAgIDAsICAgMCwgIDgyLCAgNjgsIA0KLSAg
ICAgNjksICA3MCwgIDgwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
MjgsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCANCi0gICAgMjU0LCAyNTUsICAgMCwgICAxLCAg
IDAsICAgMCwgDQotICAgICAyOCwgICAwLCAgIDAsICAgMCwgIDc3LCAxMDUsIA0KLSAgICAgOTks
IDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCANCi0gICAgMTE2LCAgMzIsICA0MCwgIDgyLCAgNDEs
ICAzMiwgDQotICAgICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsIA0KLSAgICAxMDQsICA5
NywgMTAwLCAxMDEsIDExNCwgIDMyLCANCi0gICAgIDY3LCAxMTEsIDEwOSwgMTEyLCAxMDUsIDEw
OCwgDQotICAgIDEwMSwgMTE0LCAgMzIsICA1NywgIDQ2LCAgNTEsIA0KLSAgICAgNDgsICA0Niwg
IDU3LCAgNTAsICA0OCwgIDQ4LCANCi0gICAgIDQ2LCAgNDksICA1NCwgIDUxLCAgNTYsICA1Miwg
DQotICAgICAgMCwgMTcxLCAgNzMsICA4MywgIDcxLCAgNzgsIA0KLSAgICAgNzYsICAgMCwgICAw
LCAgIDAsICAgMiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgDQot
ICAgICA1NiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCi0gICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsIA0KLSAgICAgNjUsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAzLCAgIDMsICAg
MCwgICAwLCANCi0gICAgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgDQotICAgICA3OSwg
IDc4LCAgIDAsICA4NCwgIDY5LCAgODgsIA0KLSAgICAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwg
ICAwLCANCi0gICAgMTcxLCAxNzEsICA3OSwgIDgzLCAgNzEsICA3OCwgDQotICAgICA4MCwgICAw
LCAgIDAsICAgMCwgICAyLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAw
LCANCi0gICAgIDU2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAg
IDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQotICAgICA2OCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0g
ICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDMsICAx
MiwgICAwLCAgIDAsIA0KLSAgICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCANCi0gICAg
IDczLCAgODQsICA3MywgIDc5LCAgNzgsICAgMCwgDQotICAgICA4NCwgIDY5LCAgODgsICA2Nywg
IDc5LCAgNzksIA0KLSAgICAgODIsICA2OCwgICAwLCAxNzEsIDE3MSwgMTcxLCANCi0gICAgIDgz
LCAgNzIsICA2OCwgIDgyLCAxMzYsICAgMCwgDQotICAgICAgMCwgICAwLCAgNjQsICAgMCwgICAx
LCAgIDAsIA0KLSAgICAgMzQsICAgMCwgICAwLCAgIDAsICA5NSwgICAwLCANCi0gICAgICAwLCAg
IDMsICA1MCwgIDE2LCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDk1LCAg
IDAsIA0KLSAgICAgIDAsICAgMywgIDUwLCAgMTYsICAxNiwgICAwLCANCi0gICAgICAxLCAgIDAs
ICAgMCwgICAwLCAxMDMsICAgMCwgDQotICAgICAgMCwgICA0LCAyNDIsICAzMiwgIDE2LCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsIDEw
MSwgICAwLCAgIDAsICAgMywgDQotICAgICA1MCwgIDMyLCAgMTYsICAgMCwgICAxLCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgIDU0LCAgIDAsICAgMCwgICA1LCANCi0gICAgIDUwLCAgMzIsICAxNiwg
ICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgNzAsICAxNiwgIDE2LCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICA1NCwgICAwLCANCi0gICAgICAwLCAgIDgsIDE5NCwgIDMy
LCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgNjQsIA0KLSAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgMTI4LCAgNjMsIA0KLSAgICAgNTQs
ICAgMCwgICAwLCAgIDUsICA1MCwgIDMyLCANCi0gICAgIDE2LCAgIDAsICAgMSwgICAwLCAgIDAs
ICAgMCwgDQotICAgICA3MCwgIDE2LCAgMTYsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgIDYyLCAgIDAsICAgMCwgICAxLCANCi0gICAgIDgzLCAgODQsICA2NSwgIDg0LCAxMTYsICAg
MCwgDQotICAgICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDQsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDANCi19Ow0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
c2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaGx1bTExcHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3Vn
aGx1bTExcHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YwN2I0YTNjYmQ4OTY1
ZDE4Y2I0OGQwMThlNDEyZDg0MjQyMDg5NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hsdW0xMXBzLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxNTIgKzAsMCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3Nv
ZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NA0KLS8vDQotLy8NCi0v
Ly8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0t
LS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1
cmUgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgMmQg
ICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0K
LS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAg
Rm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0t
LS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAg
ICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgIGZsb2F0ICAgICAgIA0KLS8vIFRFWENPT1JE
ICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgIGZsb2F0ICAgeHkg
IA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAg
ICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlICBGb3JtYXQgICBVc2VkDQot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0t
LS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAg
ICAwICAgVEFSR0VUICAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBz
MCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxv
YXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQ0KLWRjbF9vdXRwdXQgbzAu
eHl6dw0KLWRjbF90ZW1wcyAxDQotc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMw
DQotbW92IG8wLnh5eiwgcjAueHh4eA0KLW1vdiBvMC53LCBsKDEuMDAwMDAwKQ0KLXJldCANCi0v
LyBBcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNv
bnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaEx1bVtdID0NCi17DQotICAgICA2OCwgIDg4LCAgNjYs
ICA2NywgMjQ0LCAgIDksIA0KLSAgICAyMTMsIDE0NywgIDE5LCAyNDksICA3MCwgMTExLCANCi0g
ICAgMTU3LCAgOTIsIDI0MywgMTYwLCAgNDAsIDE0NCwgDQotICAgIDIzOCwgMjIxLCAgIDEsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAxMjgsICAgMiwgICAwLCAgIDAsICAgNSwgICAwLCANCi0gICAg
ICAwLCAgIDAsICA1MiwgICAwLCAgIDAsICAgMCwgDQotICAgIDIyMCwgICAwLCAgIDAsICAgMCwg
IDUyLCAgIDEsIA0KLSAgICAgIDAsICAgMCwgMTA0LCAgIDEsICAgMCwgICAwLCANCi0gICAgICA0
LCAgIDIsICAgMCwgICAwLCAgODIsICA2OCwgDQotICAgICA2OSwgIDcwLCAxNjAsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAg
IDAsICAgMiwgICAwLCAgIDAsICAgMCwgDQotICAgICAyOCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDQsIA0KLSAgICAyNTUsIDI1NSwgICAwLCAgIDEsICAgMCwgICAwLCANCi0gICAgMTA4LCAgIDAs
ICAgMCwgICAwLCAgOTIsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAgMTAwLCAgIDAsICAgMCwg
ICAwLCAgIDIsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsIA0KLSAg
ICAgIDQsICAgMCwgICAwLCAgIDAsIDI1NSwgMjU1LCANCi0gICAgMjU1LCAyNTUsICAgMCwgICAw
LCAgIDAsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDEzLCAgIDAsIA0KLSAgICAg
IDAsICAgMCwgIDgzLCAgOTcsIDEwOSwgMTEyLCANCi0gICAgMTA4LCAxMDEsIDExNCwgICAwLCAg
ODQsIDEwMSwgDQotICAgIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCAgIDAsIA0KLSAgICAgNzcs
IDEwNSwgIDk5LCAxMTQsIDExMSwgMTE1LCANCi0gICAgMTExLCAxMDIsIDExNiwgIDMyLCAgNDAs
ICA4MiwgDQotICAgICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsIA0KLSAgICAgMzIsICA4
MywgMTA0LCAgOTcsIDEwMCwgMTAxLCANCi0gICAgMTE0LCAgMzIsICA2NywgMTExLCAxMDksIDEx
MiwgDQotICAgIDEwNSwgMTA4LCAxMDEsIDExNCwgIDMyLCAgNTcsIA0KLSAgICAgNDYsICA1MSwg
IDQ4LCAgNDYsICA1NywgIDUwLCANCi0gICAgIDQ4LCAgNDgsICA0NiwgIDQ5LCAgNTQsICA1MSwg
DQotICAgICA1NiwgIDUyLCAgIDAsIDE3MSwgIDczLCAgODMsIA0KLSAgICAgNzEsICA3OCwgIDgw
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAyLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgNTYsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgIDE1LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDY4LCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAg
MywgICAzLCANCi0gICAgICAwLCAgIDAsICA4MywgIDg2LCAgOTUsICA4MCwgDQotICAgICA3OSwg
IDgzLCAgNzMsICA4NCwgIDczLCAgNzksIA0KLSAgICAgNzgsICAgMCwgIDg0LCAgNjksICA4OCwg
IDY3LCANCi0gICAgIDc5LCAgNzksICA4MiwgIDY4LCAgIDAsIDE3MSwgDQotICAgIDE3MSwgMTcx
LCAgNzksICA4MywgIDcxLCAgNzgsIA0KLSAgICAgNDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAw
LCANCi0gICAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgDQotICAgICAzMiwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgMTUs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCANCi0g
ICAgIDcxLCAgNjksICA4NCwgICAwLCAxNzEsIDE3MSwgDQotICAgICA4MywgIDcyLCAgNjgsICA4
MiwgMTQ4LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDY0LCAgIDAsICAgMCwgICAwLCANCi0gICAg
IDM3LCAgIDAsICAgMCwgICAwLCAgOTAsICAgMCwgDQotICAgICAgMCwgICAzLCAgIDAsICA5Niwg
IDE2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICA4OCwgIDI0LCANCi0gICAgICAw
LCAgIDQsICAgMCwgMTEyLCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDg1
LCAgODUsIA0KLSAgICAgIDAsICAgMCwgIDk4LCAgMTYsICAgMCwgICAzLCANCi0gICAgIDUwLCAg
MTYsICAxNiwgICAwLCAgIDEsICAgMCwgDQotICAgICAgMCwgICAwLCAxMDEsICAgMCwgICAwLCAg
IDMsIA0KLSAgICAyNDIsICAzMiwgIDE2LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAs
IDEwNCwgICAwLCAgIDAsICAgMiwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDY5LCAgIDAs
IA0KLSAgICAgIDAsICAgOSwgMjQyLCAgIDAsICAxNiwgICAwLCANCi0gICAgICAwLCAgIDAsICAg
MCwgICAwLCAgNzAsICAxNiwgDQotICAgICAxNiwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0K
LSAgICAgNzAsIDEyNiwgIDE2LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwg
IDk2LCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDU0LCAgIDAsIA0KLSAg
ICAgIDAsICAgNSwgMTE0LCAgMzIsICAxNiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDYsICAgMCwgDQotICAgICAxNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
NTQsICAgMCwgICAwLCAgIDUsIDEzMCwgIDMyLCANCi0gICAgIDE2LCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQotICAgICAgMSwgIDY0LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAxMjgs
ICA2MywgIDYyLCAgIDAsICAgMCwgICAxLCANCi0gICAgIDgzLCAgODQsICA2NSwgIDg0LCAxMTYs
ICAgMCwgDQotICAgICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDEsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAg
MCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDMsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDANCi19Ow0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaGx1bWFscGhhMTFwcy5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL3Bh
c3N0aHJvdWdobHVtYWxwaGExMXBzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1
NWQ2MGViM2IyMjZkZDBlN2RhZTQ4YmVkNTU0NDdhOThmYjEzNDEuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdobHVtYWxwaGEx
MXBzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotI2lmIDANCi0vLw0KLS8vIEdl
bmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4x
NjM4NA0KLS8vDQotLy8NCi0vLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5h
bWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBE
aW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0t
LS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAg
ICAgICAgMQ0KLS8vIFRleHR1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBm
bG9hdDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0
IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBS
ZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
IC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BP
U0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgIGZsb2F0ICAg
ICAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAg
Tk9ORSAgIGZsb2F0ICAgeHkgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8v
DQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVl
ICBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0t
LS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAg
ICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180
XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUy
ZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2MS54
eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotc2FtcGxlIHIwLnh5encsIHYx
Lnh5eHgsIHQwLnh5encsIHMwDQotbW92IG8wLnh5encsIHIwLnh4eHcNCi1yZXQgDQotLy8gQXBw
cm94aW1hdGVseSAzIGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBC
WVRFIGdfUFNfUGFzc3Rocm91Z2hMdW1BbHBoYVtdID0NCi17DQotICAgICA2OCwgIDg4LCAgNjYs
ICA2NywgMTg1LCAgMTQsIA0KLSAgICAgODQsIDIyMywgMTkyLCAgNDIsICAxNiwgMTMzLCANCi0g
ICAgIDQ2LCAxMDAsICA5NSwgMjIxLCAxODMsICA5NywgDQotICAgIDE5MiwgIDIzLCAgIDEsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAxMDgsICAgMiwgICAwLCAgIDAsICAgNSwgICAwLCANCi0gICAg
ICAwLCAgIDAsICA1MiwgICAwLCAgIDAsICAgMCwgDQotICAgIDIyMCwgICAwLCAgIDAsICAgMCwg
IDUyLCAgIDEsIA0KLSAgICAgIDAsICAgMCwgMTA0LCAgIDEsICAgMCwgICAwLCANCi0gICAgMjQw
LCAgIDEsICAgMCwgICAwLCAgODIsICA2OCwgDQotICAgICA2OSwgIDcwLCAxNjAsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAg
IDAsICAgMiwgICAwLCAgIDAsICAgMCwgDQotICAgICAyOCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDQsIA0KLSAgICAyNTUsIDI1NSwgICAwLCAgIDEsICAgMCwgICAwLCANCi0gICAgMTA4LCAgIDAs
ICAgMCwgICAwLCAgOTIsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAgMTAwLCAgIDAsICAgMCwg
ICAwLCAgIDIsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsIA0KLSAg
ICAgIDQsICAgMCwgICAwLCAgIDAsIDI1NSwgMjU1LCANCi0gICAgMjU1LCAyNTUsICAgMCwgICAw
LCAgIDAsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDEzLCAgIDAsIA0KLSAgICAg
IDAsICAgMCwgIDgzLCAgOTcsIDEwOSwgMTEyLCANCi0gICAgMTA4LCAxMDEsIDExNCwgICAwLCAg
ODQsIDEwMSwgDQotICAgIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCAgIDAsIA0KLSAgICAgNzcs
IDEwNSwgIDk5LCAxMTQsIDExMSwgMTE1LCANCi0gICAgMTExLCAxMDIsIDExNiwgIDMyLCAgNDAs
ICA4MiwgDQotICAgICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsIA0KLSAgICAgMzIsICA4
MywgMTA0LCAgOTcsIDEwMCwgMTAxLCANCi0gICAgMTE0LCAgMzIsICA2NywgMTExLCAxMDksIDEx
MiwgDQotICAgIDEwNSwgMTA4LCAxMDEsIDExNCwgIDMyLCAgNTcsIA0KLSAgICAgNDYsICA1MSwg
IDQ4LCAgNDYsICA1NywgIDUwLCANCi0gICAgIDQ4LCAgNDgsICA0NiwgIDQ5LCAgNTQsICA1MSwg
DQotICAgICA1NiwgIDUyLCAgIDAsIDE3MSwgIDczLCAgODMsIA0KLSAgICAgNzEsICA3OCwgIDgw
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAyLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgNTYsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgIDE1LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDY4LCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAg
MywgICAzLCANCi0gICAgICAwLCAgIDAsICA4MywgIDg2LCAgOTUsICA4MCwgDQotICAgICA3OSwg
IDgzLCAgNzMsICA4NCwgIDczLCAgNzksIA0KLSAgICAgNzgsICAgMCwgIDg0LCAgNjksICA4OCwg
IDY3LCANCi0gICAgIDc5LCAgNzksICA4MiwgIDY4LCAgIDAsIDE3MSwgDQotICAgIDE3MSwgMTcx
LCAgNzksICA4MywgIDcxLCAgNzgsIA0KLSAgICAgNDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAw
LCANCi0gICAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgDQotICAgICAzMiwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgMTUs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCANCi0g
ICAgIDcxLCAgNjksICA4NCwgICAwLCAxNzEsIDE3MSwgDQotICAgICA4MywgIDcyLCAgNjgsICA4
MiwgMTI4LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDY0LCAgIDAsICAgMCwgICAwLCANCi0gICAg
IDMyLCAgIDAsICAgMCwgICAwLCAgOTAsICAgMCwgDQotICAgICAgMCwgICAzLCAgIDAsICA5Niwg
IDE2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICA4OCwgIDI0LCANCi0gICAgICAw
LCAgIDQsICAgMCwgMTEyLCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDg1
LCAgODUsIA0KLSAgICAgIDAsICAgMCwgIDk4LCAgMTYsICAgMCwgICAzLCANCi0gICAgIDUwLCAg
MTYsICAxNiwgICAwLCAgIDEsICAgMCwgDQotICAgICAgMCwgICAwLCAxMDEsICAgMCwgICAwLCAg
IDMsIA0KLSAgICAyNDIsICAzMiwgIDE2LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAs
IDEwNCwgICAwLCAgIDAsICAgMiwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDY5LCAgIDAs
IA0KLSAgICAgIDAsICAgOSwgMjQyLCAgIDAsICAxNiwgICAwLCANCi0gICAgICAwLCAgIDAsICAg
MCwgICAwLCAgNzAsICAxNiwgDQotICAgICAxNiwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0K
LSAgICAgNzAsIDEyNiwgIDE2LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwg
IDk2LCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDU0LCAgIDAsIA0KLSAg
ICAgIDAsICAgNSwgMjQyLCAgMzIsICAxNiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDYsICAxMiwgDQotICAgICAxNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
NjIsICAgMCwgICAwLCAgIDEsICA4MywgIDg0LCANCi0gICAgIDY1LCAgODQsIDExNiwgICAwLCAg
IDAsICAgMCwgDQotICAgICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAyLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMA0KLX07DQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFk
ZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHBzLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwYTJjN2Q0ODJiMzNiZTg2Njc0OTU0NzU1YTM5
OTU4NWM4YWJlYTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJz
L2NvbXBpbGVkL3Bhc3N0aHJvdWdocHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAK
LSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBD
b21waWxlciA5LjMwLjkyMDAuMTYzODQNCi0vLw0KLS8vLw0KLS8vIFBhcmFtZXRlcnM6DQotLy8N
Ci0vLyAgIHNhbXBsZXIyRCB0ZXg7DQotLy8NCi0vLw0KLS8vIFJlZ2lzdGVyczoNCi0vLw0KLS8v
ICAgTmFtZSAgICAgICAgIFJlZyAgIFNpemUNCi0vLyAgIC0tLS0tLS0tLS0tLSAtLS0tLSAtLS0t
DQotLy8gICB0ZXggICAgICAgICAgczAgICAgICAgMQ0KLS8vDQotDQotICAgIHBzXzJfMA0KLSAg
ICBkY2wgdDAueHkNCi0gICAgZGNsXzJkIHMwDQotICAgIHRleGxkIHIwLCB0MCwgczANCi0gICAg
bW92IG9DMCwgcjANCi0NCi0vLyBhcHByb3hpbWF0ZWx5IDIgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNl
ZCAoMSB0ZXh0dXJlLCAxIGFyaXRobWV0aWMpDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX3Bz
MjBfcGFzc3Rocm91Z2hwc1tdID0NCi17DQotICAgICAgMCwgICAyLCAyNTUsIDI1NSwgMjU0LCAy
NTUsIA0KLSAgICAgMzMsICAgMCwgIDY3LCAgODQsICA2NSwgIDY2LCANCi0gICAgIDI4LCAgIDAs
ICAgMCwgICAwLCAgNzUsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU1LCAyNTUs
IA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAyOCwgICAwLCANCi0gICAgICAwLCAgIDAsICAg
MCwgICAxLCAgIDAsICAgMCwgDQotICAgICA2OCwgICAwLCAgIDAsICAgMCwgIDQ4LCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwg
ICAwLCAgNTIsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAg
ICAxMTYsIDEwMSwgMTIwLCAgIDAsICAgNCwgICAwLCANCi0gICAgIDEyLCAgIDAsICAgMSwgICAw
LCAgIDEsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
IDAsICAgMCwgMTEyLCAxMTUsICA5NSwgIDUwLCANCi0gICAgIDk1LCAgNDgsICAgMCwgIDc3LCAx
MDUsICA5OSwgDQotICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIA0KLSAgICAgMzIs
ICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCANCi0gICAgIDc2LCAgODMsICA3NiwgIDMyLCAgODMs
IDEwNCwgDQotICAgICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCAgNjcsIA0KLSAgICAxMTEsIDEw
OSwgMTEyLCAxMDUsIDEwOCwgMTAxLCANCi0gICAgMTE0LCAgMzIsICA1NywgIDQ2LCAgNTEsICA0
OCwgDQotICAgICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4LCAgNDYsIA0KLSAgICAgNDksICA1NCwg
IDUxLCAgNTYsICA1MiwgICAwLCANCi0gICAgMTcxLCAxNzEsICAzMSwgICAwLCAgIDAsICAgMiwg
DQotICAgICAgMCwgICAwLCAgIDAsIDEyOCwgICAwLCAgIDAsIA0KLSAgICAgIDMsIDE3NiwgIDMx
LCAgIDAsICAgMCwgICAyLCANCi0gICAgICAwLCAgIDAsICAgMCwgMTQ0LCAgIDAsICAgOCwgDQot
ICAgICAxNSwgMTYwLCAgNjYsICAgMCwgICAwLCAgIDMsIA0KLSAgICAgIDAsICAgMCwgIDE1LCAx
MjgsICAgMCwgICAwLCANCi0gICAgMjI4LCAxNzYsICAgMCwgICA4LCAyMjgsIDE2MCwgDQotICAg
ICAgMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDgsIA0KLSAgICAgMTUsIDEyOCwgICAwLCAgIDAs
IDIyOCwgMTI4LCANCi0gICAgMjU1LCAyNTUsICAgMCwgICAwDQotfTsNCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29t
cGlsZWQvcGFzc3Rocm91Z2hyZ2IxMXBzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2IxMXBzLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NmNiY2Y2YjgyY2ZkOTY1ODYwMThkZTE5
OTc5OTczODYxODc3MzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFk
ZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiMTFwcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTUy
ICswLDAgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNM
IFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQNCi0vLw0KLS8vDQotLy8vDQotLy8gUmVz
b3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0t
LS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxl
ciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDJkICAgIDAgICAgICAg
IDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAg
ICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAgIFVz
ZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0t
LS0gLS0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encg
ICAgICAgIDAgICAgICBQT1MgICBmbG9hdCAgICAgICANCi0vLyBURVhDT09SRCAgICAgICAgICAg
ICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgICBmbG9hdCAgIHh5ICANCi0vLw0KLS8v
DQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIElu
ZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0t
LQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdF
VCAgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVm
YXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0
MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xf
dGVtcHMgMQ0KLXNhbXBsZSByMC54eXp3LCB2MS54eXh4LCB0MC54eXp3LCBzMA0KLW1vdiBvMC54
eXosIHIwLnh5engNCi1tb3YgbzAudywgbCgxLjAwMDAwMCkNCi1yZXQgDQotLy8gQXBwcm94aW1h
dGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdf
UFNfUGFzc3Rocm91Z2hSR0JbXSA9DQotew0KLSAgICAgNjgsICA4OCwgIDY2LCAgNjcsIDEyNSwg
MTg2LCANCi0gICAgMjUwLCAyNDIsIDExMywgMjU1LCAgNTksIDIzOSwgDQotICAgIDExOSwgMTU4
LCAyMzcsICA3OCwgMjIwLCAgNDMsIA0KLSAgICAxNjAsICA0NiwgICAxLCAgIDAsICAgMCwgICAw
LCANCi0gICAgMTI4LCAgIDIsICAgMCwgICAwLCAgIDUsICAgMCwgDQotICAgICAgMCwgICAwLCAg
NTIsICAgMCwgICAwLCAgIDAsIA0KLSAgICAyMjAsICAgMCwgICAwLCAgIDAsICA1MiwgICAxLCAN
Ci0gICAgICAwLCAgIDAsIDEwNCwgICAxLCAgIDAsICAgMCwgDQotICAgICAgNCwgICAyLCAgIDAs
ICAgMCwgIDgyLCAgNjgsIA0KLSAgICAgNjksICA3MCwgMTYwLCAgIDAsICAgMCwgICAwLCANCi0g
ICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDIsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAgMjgsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCANCi0gICAg
MjU1LCAyNTUsICAgMCwgICAxLCAgIDAsICAgMCwgDQotICAgIDEwOCwgICAwLCAgIDAsICAgMCwg
IDkyLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAg
IDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQotICAgIDEwMCwgICAwLCAgIDAsICAgMCwgICAyLCAg
IDAsIA0KLSAgICAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCANCi0gICAgICA0LCAgIDAs
ICAgMCwgICAwLCAyNTUsIDI1NSwgDQotICAgIDI1NSwgMjU1LCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAxMywgICAwLCANCi0gICAgICAwLCAgIDAsICA4
MywgIDk3LCAxMDksIDExMiwgDQotICAgIDEwOCwgMTAxLCAxMTQsICAgMCwgIDg0LCAxMDEsIA0K
LSAgICAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgICAwLCANCi0gICAgIDc3LCAxMDUsICA5OSwg
MTE0LCAxMTEsIDExNSwgDQotICAgIDExMSwgMTAyLCAxMTYsICAzMiwgIDQwLCAgODIsIA0KLSAg
ICAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCANCi0gICAgIDMyLCAgODMsIDEwNCwgIDk3
LCAxMDAsIDEwMSwgDQotICAgIDExNCwgIDMyLCAgNjcsIDExMSwgMTA5LCAxMTIsIA0KLSAgICAx
MDUsIDEwOCwgMTAxLCAxMTQsICAzMiwgIDU3LCANCi0gICAgIDQ2LCAgNTEsICA0OCwgIDQ2LCAg
NTcsICA1MCwgDQotICAgICA0OCwgIDQ4LCAgNDYsICA0OSwgIDU0LCAgNTEsIA0KLSAgICAgNTYs
ICA1MiwgICAwLCAxNzEsICA3MywgIDgzLCANCi0gICAgIDcxLCAgNzgsICA4MCwgICAwLCAgIDAs
ICAgMCwgDQotICAgICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgIDU2LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAg
MCwgDQotICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAxNSwgICAwLCANCi0gICAgICAwLCAgIDAsICA2OCwgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAz
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgDQot
ICAgICAgMCwgICAwLCAgODMsICA4NiwgIDk1LCAgODAsIA0KLSAgICAgNzksICA4MywgIDczLCAg
ODQsICA3MywgIDc5LCANCi0gICAgIDc4LCAgIDAsICA4NCwgIDY5LCAgODgsICA2NywgDQotICAg
ICA3OSwgIDc5LCAgODIsICA2OCwgICAwLCAxNzEsIA0KLSAgICAxNzEsIDE3MSwgIDc5LCAgODMs
ICA3MSwgIDc4LCANCi0gICAgIDQ0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgMzIsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMywg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDE1LCAgIDAsICAgMCwg
ICAwLCANCi0gICAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgDQotICAgICA3MSwgIDY5
LCAgODQsICAgMCwgMTcxLCAxNzEsIA0KLSAgICAgODMsICA3MiwgIDY4LCAgODIsIDE0OCwgICAw
LCANCi0gICAgICAwLCAgIDAsICA2NCwgICAwLCAgIDAsICAgMCwgDQotICAgICAzNywgICAwLCAg
IDAsICAgMCwgIDkwLCAgIDAsIA0KLSAgICAgIDAsICAgMywgICAwLCAgOTYsICAxNiwgICAwLCAN
Ci0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgODgsICAyNCwgDQotICAgICAgMCwgICA0LCAgIDAs
IDExMiwgIDE2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICA4NSwgIDg1LCANCi0g
ICAgICAwLCAgIDAsICA5OCwgIDE2LCAgIDAsICAgMywgDQotICAgICA1MCwgIDE2LCAgMTYsICAg
MCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgMTAxLCAgIDAsICAgMCwgICAzLCANCi0gICAg
MjQyLCAgMzIsICAxNiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAxMDQsICAgMCwg
ICAwLCAgIDIsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICA2OSwgICAwLCANCi0gICAgICAw
LCAgIDksIDI0MiwgICAwLCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDcw
LCAgMTYsIA0KLSAgICAgMTYsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAgIDcwLCAx
MjYsICAxNiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICA5NiwgIDE2LCAg
IDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICA1NCwgICAwLCANCi0gICAgICAwLCAgIDUs
IDExNCwgIDMyLCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDcwLCAgIDIs
IA0KLSAgICAgMTYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgIDU0LCAgIDAsICAg
MCwgICA1LCAxMzAsICAzMiwgDQotICAgICAxNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
LSAgICAgIDEsICA2NCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgMTI4LCAgNjMsICA2Miwg
ICAwLCAgIDAsICAgMSwgDQotICAgICA4MywgIDg0LCAgNjUsICA4NCwgMTE2LCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwDQotfTsNCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMv
Y29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhMTFwcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTEx
cHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdkMmEyNWFiYTA5NmMzZmFhMzdk
ZjIxZWI1M2M5ODQzOGQwNGJhMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhMTFwcy5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTQxICswLDAgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChS
KSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQNCi0vLw0KLS8vDQotLy8vDQot
Ly8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0t
LS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDJkICAgIDAg
ICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBO
YW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1h
dCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0g
LS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAg
IHh5encgICAgICAgIDAgICAgICBQT1MgICBmbG9hdCAgICAgICANCi0vLyBURVhDT09SRCAgICAg
ICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgICBmbG9hdCAgIHh5ICANCi0v
Lw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAg
ICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0t
IC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAg
IFRBUkdFVCAgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1v
ZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZs
b2F0KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkNCi1kY2xfb3V0cHV0IG8wLnh5encN
Ci1zYW1wbGUgbzAueHl6dywgdjEueHl4eCwgdDAueHl6dywgczANCi1yZXQgDQotLy8gQXBwcm94
aW1hdGVseSAyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRF
IGdfUFNfUGFzc3Rocm91Z2hSR0JBW10gPQ0KLXsNCi0gICAgIDY4LCAgODgsICA2NiwgIDY3LCAx
NTEsIDE1MiwgDQotICAgICAgOCwgMTAyLCAxNzQsIDEzNSwgIDc2LCAgNTcsIA0KLSAgICAxMDAs
IDE0NiwgIDU5LCAgNzQsIDIwNSwgIDM1LCANCi0gICAgMjA2LCAgMjEsICAgMSwgICAwLCAgIDAs
ICAgMCwgDQotICAgICA4MCwgICAyLCAgIDAsICAgMCwgICA1LCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgIDUyLCAgIDAsICAgMCwgICAwLCANCi0gICAgMjIwLCAgIDAsICAgMCwgICAwLCAgNTIsICAg
MSwgDQotICAgICAgMCwgICAwLCAxMDQsICAgMSwgICAwLCAgIDAsIA0KLSAgICAyMTIsICAgMSwg
ICAwLCAgIDAsICA4MiwgIDY4LCANCi0gICAgIDY5LCAgNzAsIDE2MCwgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAy
LCAgIDAsICAgMCwgICAwLCANCi0gICAgIDI4LCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgDQot
ICAgIDI1NSwgMjU1LCAgIDAsICAgMSwgICAwLCAgIDAsIA0KLSAgICAxMDgsICAgMCwgICAwLCAg
IDAsICA5MiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAxMDAsICAgMCwgICAwLCAgIDAsICAg
MiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgDQotICAgICAgNCwg
ICAwLCAgIDAsICAgMCwgMjU1LCAyNTUsIA0KLSAgICAyNTUsIDI1NSwgICAwLCAgIDAsICAgMCwg
ICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgMTMsICAgMCwgDQotICAgICAgMCwgICAw
LCAgODMsICA5NywgMTA5LCAxMTIsIA0KLSAgICAxMDgsIDEwMSwgMTE0LCAgIDAsICA4NCwgMTAx
LCANCi0gICAgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsICAgMCwgDQotICAgICA3NywgMTA1LCAg
OTksIDExNCwgMTExLCAxMTUsIA0KLSAgICAxMTEsIDEwMiwgMTE2LCAgMzIsICA0MCwgIDgyLCAN
Ci0gICAgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgDQotICAgICAzMiwgIDgzLCAxMDQs
ICA5NywgMTAwLCAxMDEsIA0KLSAgICAxMTQsICAzMiwgIDY3LCAxMTEsIDEwOSwgMTEyLCANCi0g
ICAgMTA1LCAxMDgsIDEwMSwgMTE0LCAgMzIsICA1NywgDQotICAgICA0NiwgIDUxLCAgNDgsICA0
NiwgIDU3LCAgNTAsIA0KLSAgICAgNDgsICA0OCwgIDQ2LCAgNDksICA1NCwgIDUxLCANCi0gICAg
IDU2LCAgNTIsICAgMCwgMTcxLCAgNzMsICA4MywgDQotICAgICA3MSwgIDc4LCAgODAsICAgMCwg
ICAwLCAgIDAsIA0KLSAgICAgIDIsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCANCi0gICAgICAw
LCAgIDAsICA1NiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAx
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAg
IDAsICAgMCwgICAwLCAgMTUsICAgMCwgDQotICAgICAgMCwgICAwLCAgNjgsICAgMCwgICAwLCAg
IDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAs
ICAgMywgICAwLCAgIDAsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMs
IA0KLSAgICAgIDAsICAgMCwgIDgzLCAgODYsICA5NSwgIDgwLCANCi0gICAgIDc5LCAgODMsICA3
MywgIDg0LCAgNzMsICA3OSwgDQotICAgICA3OCwgICAwLCAgODQsICA2OSwgIDg4LCAgNjcsIA0K
LSAgICAgNzksICA3OSwgIDgyLCAgNjgsICAgMCwgMTcxLCANCi0gICAgMTcxLCAxNzEsICA3OSwg
IDgzLCAgNzEsICA3OCwgDQotICAgICA0NCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCANCi0gICAgIDMyLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
IDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAxNSwgICAwLCAg
IDAsICAgMCwgDQotICAgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsIA0KLSAgICAgNzEs
ICA2OSwgIDg0LCAgIDAsIDE3MSwgMTcxLCANCi0gICAgIDgzLCAgNzIsICA2OCwgIDgyLCAxMDAs
ICAgMCwgDQotICAgICAgMCwgICAwLCAgNjQsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgMjUsICAg
MCwgICAwLCAgIDAsICA5MCwgICAwLCANCi0gICAgICAwLCAgIDMsICAgMCwgIDk2LCAgMTYsICAg
MCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDg4LCAgMjQsIA0KLSAgICAgIDAsICAgNCwg
ICAwLCAxMTIsICAxNiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgODUsICA4NSwg
DQotICAgICAgMCwgICAwLCAgOTgsICAxNiwgICAwLCAgIDMsIA0KLSAgICAgNTAsICAxNiwgIDE2
LCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsIDEwMSwgICAwLCAgIDAsICAgMywgDQot
ICAgIDI0MiwgIDMyLCAgMTYsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDY5LCAg
IDAsICAgMCwgICA5LCANCi0gICAgMjQyLCAgMzIsICAxNiwgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgNzAsICAxNiwgIDE2LCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAs
ICA3MCwgMTI2LCANCi0gICAgIDE2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MCwgIDk2LCAgMTYsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDYyLCAgIDAsICAg
MCwgICAxLCANCi0gICAgIDgzLCAgODQsICA2NSwgIDg0LCAxMTYsICAgMCwgDQotICAgICAgMCwg
ICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCANCi0gICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAs
ICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0g
ICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDANCi19Ow0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxl
ZC9zdGFuZGFyZHZzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvc3RhbmRhcmR2cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAyNmI4OTU5NWNiYjU1Y2MzMmMzYjgzNzNkNzgxMWMwOWYwYWY0OTYwLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9zdGFuZGFy
ZHZzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0jaWYgMA0KLS8vDQotLy8gR2Vu
ZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2
Mzg0DQotLy8NCi0vLy8NCi0vLyBQYXJhbWV0ZXJzOg0KLS8vDQotLy8gICBmbG9hdDQgaGFsZlBp
eGVsU2l6ZTsNCi0vLw0KLS8vDQotLy8gUmVnaXN0ZXJzOg0KLS8vDQotLy8gICBOYW1lICAgICAg
ICAgIFJlZyAgIFNpemUNCi0vLyAgIC0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQ0KLS8vICAgaGFs
ZlBpeGVsU2l6ZSBjMCAgICAgICAxDQotLy8NCi0NCi0gICAgdnNfMl8wDQotICAgIGRlZiBjMSwg
MC41LCAtMC41LCAxLCAwDQotICAgIGRjbF9wb3NpdGlvbiB2MA0KLSAgICBhZGQgb1BvcywgdjAs
IGMwDQotICAgIG1hZCBvVDAsIHYwLCBjMS54eXp6LCBjMS54eHd3DQotDQotLy8gYXBwcm94aW1h
dGVseSAyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdf
dnMyMF9zdGFuZGFyZHZzW10gPQ0KLXsNCi0gICAgICAwLCAgIDIsIDI1NCwgMjU1LCAyNTQsIDI1
NSwgDQotICAgICAzNiwgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIA0KLSAgICAgMjgsICAgMCwg
ICAwLCAgIDAsICA4NywgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTQsIDI1NSwg
DQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAw
LCAgIDEsICAgMCwgICAwLCANCi0gICAgIDgwLCAgIDAsICAgMCwgICAwLCAgNDgsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAg
IDAsICA2NCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAg
IDEwNCwgIDk3LCAxMDgsIDEwMiwgIDgwLCAxMDUsIA0KLSAgICAxMjAsIDEwMSwgMTA4LCAgODMs
IDEwNSwgMTIyLCANCi0gICAgMTAxLCAgIDAsIDE3MSwgMTcxLCAgIDEsICAgMCwgDQotICAgICAg
MywgICAwLCAgIDEsICAgMCwgICA0LCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCi0gICAgICAwLCAgIDAsIDExOCwgMTE1LCAgOTUsICA1MCwgDQotICAgICA5NSwg
IDQ4LCAgIDAsICA3NywgMTA1LCAgOTksIA0KLSAgICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwg
MTE2LCANCi0gICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgDQotICAgICA3NiwgIDgz
LCAgNzYsICAzMiwgIDgzLCAxMDQsIA0KLSAgICAgOTcsIDEwMCwgMTAxLCAxMTQsICAzMiwgIDY3
LCANCi0gICAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgDQotICAgIDExNCwgIDMyLCAg
NTcsICA0NiwgIDUxLCAgNDgsIA0KLSAgICAgNDYsICA1NywgIDUwLCAgNDgsICA0OCwgIDQ2LCAN
Ci0gICAgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAgMCwgDQotICAgIDE3MSwgMTcxLCAgODEs
ICAgMCwgICAwLCAgIDUsIA0KLSAgICAgIDEsICAgMCwgIDE1LCAxNjAsICAgMCwgICAwLCANCi0g
ICAgICAwLCAgNjMsICAgMCwgICAwLCAgIDAsIDE5MSwgDQotICAgICAgMCwgICAwLCAxMjgsICA2
MywgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDMxLCAgIDAsICAgMCwgICAyLCANCi0gICAg
ICAwLCAgIDAsICAgMCwgMTI4LCAgIDAsICAgMCwgDQotICAgICAxNSwgMTQ0LCAgIDIsICAgMCwg
ICAwLCAgIDMsIA0KLSAgICAgIDAsICAgMCwgIDE1LCAxOTIsICAgMCwgICAwLCANCi0gICAgMjI4
LCAxNDQsICAgMCwgICAwLCAyMjgsIDE2MCwgDQotICAgICAgNCwgICAwLCAgIDAsICAgNCwgICAw
LCAgIDAsIA0KLSAgICAgMTUsIDIyNCwgICAwLCAgIDAsIDIyOCwgMTQ0LCANCi0gICAgICAxLCAg
IDAsIDE2NCwgMTYwLCAgIDEsICAgMCwgDQotICAgIDI0MCwgMTYwLCAyNTUsIDI1NSwgICAwLCAg
IDANCi19Ow0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvc2hhZGVycy9nZW5lcmF0ZV9zaGFkZXJzLmJhdCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9nZW5lcmF0ZV9zaGFkZXJz
LmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFlMjk4ZTgzZjQzMDMwMmY2NWFh
MzM2MjQxNWE3MDNiMGVmYjkzMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVycy5iYXQKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCww
IEBACi1ARUNITyBPRkYNCi1SRU0NCi1SRU0gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotUkVNIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUN
Ci1SRU0gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi1SRU0NCi0NCi1QQVRIICVQQVRIJTsl
UHJvZ3JhbUZpbGVzKHg4NiklXFdpbmRvd3MgS2l0c1w4LjBcYmluXHg4NjslRFhTREtfRElSJVxV
dGlsaXRpZXNcYmluXHg4Ng0KLQ0KLWZ4YyAvRSBzdGFuZGFyZHZzIC9UIHZzXzJfMCAvRmggY29t
cGlsZWQvc3RhbmRhcmR2cy5oIEJsaXQudnMNCi1meGMgL0UgZmxpcHl2cyAvVCB2c18yXzAgL0Zo
IGNvbXBpbGVkL2ZsaXB5dnMuaCBCbGl0LnZzDQotZnhjIC9FIHBhc3N0aHJvdWdocHMgL1QgcHNf
Ml8wIC9GaCBjb21waWxlZC9wYXNzdGhyb3VnaHBzLmggQmxpdC5wcw0KLWZ4YyAvRSBsdW1pbmFu
Y2VwcyAvVCBwc18yXzAgL0ZoIGNvbXBpbGVkL2x1bWluYW5jZXBzLmggQmxpdC5wcw0KLWZ4YyAv
RSBjb21wb25lbnRtYXNrcHMgL1QgcHNfMl8wIC9GaCBjb21waWxlZC9jb21wb25lbnRtYXNrcHMu
aCBCbGl0LnBzDQotDQotZnhjIC9FIFZTX1Bhc3N0aHJvdWdoIC9UIHZzXzRfMCAvRmggY29tcGls
ZWQvcGFzc3Rocm91Z2gxMXZzLmggUGFzc3Rocm91Z2gxMS5obHNsDQotZnhjIC9FIFBTX1Bhc3N0
aHJvdWdoUkdCQSAvVCBwc180XzAgL0ZoIGNvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTExcHMuaCBQ
YXNzdGhyb3VnaDExLmhsc2wNCi1meGMgL0UgUFNfUGFzc3Rocm91Z2hSR0IgL1QgcHNfNF8wIC9G
aCBjb21waWxlZC9wYXNzdGhyb3VnaHJnYjExcHMuaCBQYXNzdGhyb3VnaDExLmhsc2wNCi1meGMg
L0UgUFNfUGFzc3Rocm91Z2hMdW0gL1QgcHNfNF8wIC9GaCBjb21waWxlZC9wYXNzdGhyb3VnaGx1
bTExcHMuaCBQYXNzdGhyb3VnaDExLmhsc2wNCi1meGMgL0UgUFNfUGFzc3Rocm91Z2hMdW1BbHBo
YSAvVCBwc180XzAgL0ZoIGNvbXBpbGVkL3Bhc3N0aHJvdWdobHVtYWxwaGExMXBzLmggUGFzc3Ro
cm91Z2gxMS5obHNsDQotDQotZnhjIC9FIFZTX0NsZWFyIC9UIHZzXzRfMCAvRmggY29tcGlsZWQv
Y2xlYXIxMXZzLmggQ2xlYXIxMS5obHNsDQotZnhjIC9FIFBTX0NsZWFyU2luZ2xlIC9UIHBzXzRf
MCAvRmggY29tcGlsZWQvY2xlYXJzaW5nbGUxMXBzLmggQ2xlYXIxMS5obHNsDQotZnhjIC9FIFBT
X0NsZWFyTXVsdGlwbGUgL1QgcHNfNF8wIC9GaCBjb21waWxlZC9jbGVhcm11bHRpcGxlMTFwcy5o
IENsZWFyMTEuaGxzbA0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvdmVydGV4Y29udmVyc2lvbi5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci92ZXJ0ZXhjb252ZXJzaW9uLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5MGI5ZDQ4YTM4NmZmYzE3MjU3MWRhNDRkOWJlMjBkMTAy
OTAxOWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci92ZXJ0ZXhjb252ZXJz
aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMDMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LQotLy8gdmVydGV4Y29udmVyc2lvbi5oOiBBIGxpYnJhcnkgb2YgdmVydGV4IGNvbnZlcnNpb24g
Y2xhc3NlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGJ1aWxkCi0vLyB0aGUgRm9ybWF0Q29udmVydGVy
IG9iamVjdHMgdXNlZCBieSB0aGUgYnVmZmVyIGNvbnZlcnNpb24gc3lzdGVtLgotCi0jaWZuZGVm
IExJQkdMRVNWMl9WRVJURVhDT05WRVJTSU9OX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9WRVJURVhD
T05WRVJTSU9OX0hfCi0KLW5hbWVzcGFjZSByeAotewotCi0vLyBDb252ZXJzaW9uIHR5cGVzOgot
Ly8gc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHk6IHRydWUgaWYgdGhpcyBpcyBhbiBpZGVudGl0
eSB0cmFuc2Zvcm0sIGZhbHNlIG90aGVyd2lzZQotLy8gc3RhdGljIFUgY29udmVydChUKTogY29u
dmVydCBhIHNpbmdsZSBlbGVtZW50IGZyb20gdGhlIGlucHV0IHR5cGUgdG8gdGhlIG91dHB1dCB0
eXBlCi0vLyB0eXBlZGVmIC4uLiBPdXRwdXRUeXBlOiB0aGUgdHlwZSBwcm9kdWNlZCBieSB0aGlz
IGNvbnZlcnNpb24KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgSWRlbnRpdHkKLXsKLSAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9IHRydWU7Ci0KLSAgICB0eXBlZGVmIFQgT3V0
cHV0VHlwZTsKLQotICAgIHN0YXRpYyBUIGNvbnZlcnQoVCB4KQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHg7Ci0gICAgfQotfTsKLQotdGVtcGxhdGUgPGNsYXNzIEZyb21ULCBjbGFzcyBUb1Q+Ci1z
dHJ1Y3QgQ2FzdAotewotICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0gZmFsc2U7Ci0K
LSAgICB0eXBlZGVmIFRvVCBPdXRwdXRUeXBlOwotCi0gICAgc3RhdGljIFRvVCBjb252ZXJ0KEZy
b21UIHgpCi0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VG9UPih4KTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBDYXN0PFQsIFQ+Ci17Ci0gICAgc3Rh
dGljIGNvbnN0IGJvb2wgaWRlbnRpdHkgPSB0cnVlOwotCi0gICAgdHlwZWRlZiBUIE91dHB1dFR5
cGU7Ci0KLSAgICBzdGF0aWMgVCBjb252ZXJ0KFQgeCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUPih4KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVj
dCBOb3JtYWxpemUKLXsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9IGZhbHNlOwot
Ci0gICAgdHlwZWRlZiBmbG9hdCBPdXRwdXRUeXBlOwotCi0gICAgc3RhdGljIGZsb2F0IGNvbnZl
cnQoVCB4KQotICAgIHsKLSAgICAgICAgdHlwZWRlZiBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+IE5M
OwotICAgICAgICBmbG9hdCBmID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHgpOwotCi0gICAgICAgIGlm
IChOTDo6aXNfc2lnbmVkKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBjb25zdCBmbG9hdCA9
PiBWQzIwMDggY29tcHV0ZXMgaXQgYXQgY29tcGlsZSB0aW1lCi0gICAgICAgICAgICAvLyBzdGF0
aWMgY29uc3QgZmxvYXQgPT4gVkMyMDA4IGNvbXB1dGVzIGl0IHRoZSBmaXJzdCB0aW1lIHdlIGdl
dCBoZXJlLCBzdG9yZXMgaXQgdG8gbWVtb3J5IHdpdGggc3RhdGljIGd1YXJkIGFuZCBhbGwgdGhh
dC4KLSAgICAgICAgICAgIGNvbnN0IGZsb2F0IGRpdmlzb3IgPSAxLjBmLygyKnN0YXRpY19jYXN0
PGZsb2F0PihOTDo6bWF4KCkpKzEpOwotICAgICAgICAgICAgcmV0dXJuICgyKmYrMSkqZGl2aXNv
cjsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBmL05MOjptYXgoKTsKLSAgICAgICAgfQotICAgIH0KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBG
cm9tVHlwZSwgc3RkOjpzaXplX3QgU2NhbGVCaXRzPgotc3RydWN0IEZpeGVkVG9GbG9hdAotewot
ICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0gZmFsc2U7Ci0KLSAgICB0eXBlZGVmIGZs
b2F0IE91dHB1dFR5cGU7Ci0KLSAgICBzdGF0aWMgZmxvYXQgY29udmVydChGcm9tVHlwZSB4KQot
ICAgIHsKLSAgICAgICAgY29uc3QgZmxvYXQgZGl2aXNvciA9IDEuMGYgLyBzdGF0aWNfY2FzdDxm
bG9hdD4oc3RhdGljX2Nhc3Q8RnJvbVR5cGU+KDEpIDw8IFNjYWxlQml0cyk7Ci0gICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oeCkgKiBkaXZpc29yOwotICAgIH0KLX07Ci0KLS8vIFdp
ZGVuIHR5cGVzOgotLy8gc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpbml0aWFsV2lkdGg6IG51
bWJlciBvZiBjb21wb25lbnRzIGJlZm9yZSBjb252ZXJzaW9uCi0vLyBzdGF0aWMgY29uc3QgdW5z
aWduZWQgaW50IGZpbmFsV2lkdGg6IG51bWJlciBvZiBjb21wb25lbnRzIGFmdGVyIGNvbnZlcnNp
b24KLQotLy8gRmxvYXQgaXMgc3VwcG9ydGVkIGF0IGFueSBzaXplLgotdGVtcGxhdGUgPHN0ZDo6
c2l6ZV90IE4+Ci1zdHJ1Y3QgTm9XaWRlbgotewotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVf
dCBpbml0aWFsV2lkdGggPSBOOwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5hbFdp
ZHRoID0gTjsKLX07Ci0KLS8vIFNIT1JULCBub3JtLVNIT1JULCBub3JtLVVOU0lHTkVEX1NIT1JU
IGFyZSBzdXBwb3J0ZWQgYnV0IG9ubHkgd2l0aCAyIG9yIDQgY29tcG9uZW50cwotdGVtcGxhdGUg
PHN0ZDo6c2l6ZV90IE4+Ci1zdHJ1Y3QgV2lkZW5Ub0V2ZW4KLXsKLSAgICBzdGF0aWMgY29uc3Qg
c3RkOjpzaXplX3QgaW5pdGlhbFdpZHRoID0gTjsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzaXpl
X3QgZmluYWxXaWR0aCA9IE4rKE4mMSk7Ci19OwotCi10ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTj4K
LXN0cnVjdCBXaWRlblRvRm91cgotewotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBpbml0
aWFsV2lkdGggPSBOOwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5hbFdpZHRoID0g
NDsKLX07Ci0KLS8vIE1vc3QgdHlwZXMgaGF2ZSAwIGFuZCAxIHRoYXQgYXJlIGp1c3QgdGhhdC4K
LXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IFNpbXBsZURlZmF1bHRWYWx1ZXMKLXsKLSAgICBz
dGF0aWMgVCB6ZXJvKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oMCk7IH0KLSAgICBzdGF0aWMg
VCBvbmUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxUPigxKTsgfQotfTsKLQotLy8gQnV0IG5vcm1h
bGlzZWQgdHlwZXMgb25seSBzdG9yZSBbMCwxXSBvciBbLTEsMV0gc28gMS4wIGlzIHJlcHJlc2Vu
dGVkIGJ5IHRoZSBtYXggdmFsdWUuCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBOb3JtYWxp
emVkRGVmYXVsdFZhbHVlcwotewotICAgIHN0YXRpYyBUIHplcm8oKSB7IHJldHVybiBzdGF0aWNf
Y2FzdDxUPigwKTsgfQotICAgIHN0YXRpYyBUIG9uZSgpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19s
aW1pdHM8VD46Om1heCgpOyB9Ci19OwotCi0vLyBDb252ZXJ0ZXI6Ci0vLyBzdGF0aWMgY29uc3Qg
Ym9vbCBpZGVudGl0eTogdHJ1ZSBpZiB0aGlzIGlzIGFuIGlkZW50aXR5IHRyYW5zZm9ybSAod2l0
aCBubyB3aWRlbmluZykKLS8vIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5hbFNpemU6IG51
bWJlciBvZiBieXRlcyBwZXIgb3V0cHV0IHZlcnRleAotLy8gc3RhdGljIHZvaWQgY29udmVydEFy
cmF5KGNvbnN0IHZvaWQgKmluLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90IG4sIHZv
aWQgKm91dCk6IGNvbnZlcnQgYW4gYXJyYXkgb2YgdmVydGljZXMuIElucHV0IG1heSBiZSBzdHJp
ZGVkLCBidXQgb3V0cHV0IHdpbGwgYmUgdW5zdHJpZGVkLgotCi10ZW1wbGF0ZSA8Y2xhc3MgSW5U
LCBjbGFzcyBXaWRlblJ1bGUsIGNsYXNzIENvbnZlcnRlciwgY2xhc3MgRGVmYXVsdFZhbHVlUnVs
ZSA9IFNpbXBsZURlZmF1bHRWYWx1ZXM8SW5UPiA+Ci1zdHJ1Y3QgVmVydGV4RGF0YUNvbnZlcnRl
cgotewotICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udmVydGVyOjpPdXRwdXRUeXBlIE91dHB1dFR5
cGU7Ci0gICAgdHlwZWRlZiBJblQgSW5wdXRUeXBlOwotCi0gICAgc3RhdGljIGNvbnN0IGJvb2wg
aWRlbnRpdHkgPSAoV2lkZW5SdWxlOjppbml0aWFsV2lkdGggPT0gV2lkZW5SdWxlOjpmaW5hbFdp
ZHRoKSAmJiBDb252ZXJ0ZXI6OmlkZW50aXR5OwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVf
dCBmaW5hbFNpemUgPSBXaWRlblJ1bGU6OmZpbmFsV2lkdGggKiBzaXplb2YoT3V0cHV0VHlwZSk7
Ci0KLSAgICBzdGF0aWMgdm9pZCBjb252ZXJ0QXJyYXkoY29uc3QgSW5wdXRUeXBlICppbiwgc3Rk
OjpzaXplX3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBuLCBPdXRwdXRUeXBlICpvdXQpCi0gICAgewot
ICAgICAgICBmb3IgKHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwgbjsgaSsrKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBjb25zdCBJbnB1dFR5cGUgKmVpbiA9IHBvaW50ZXJBZGRCeXRlcyhpbiwgaSAq
IHN0cmlkZSk7Ci0KLSAgICAgICAgICAgIGNvcHlDb21wb25lbnQob3V0LCBlaW4sIDAsIHN0YXRp
Y19jYXN0PE91dHB1dFR5cGU+KERlZmF1bHRWYWx1ZVJ1bGU6Onplcm8oKSkpOwotICAgICAgICAg
ICAgY29weUNvbXBvbmVudChvdXQsIGVpbiwgMSwgc3RhdGljX2Nhc3Q8T3V0cHV0VHlwZT4oRGVm
YXVsdFZhbHVlUnVsZTo6emVybygpKSk7Ci0gICAgICAgICAgICBjb3B5Q29tcG9uZW50KG91dCwg
ZWluLCAyLCBzdGF0aWNfY2FzdDxPdXRwdXRUeXBlPihEZWZhdWx0VmFsdWVSdWxlOjp6ZXJvKCkp
KTsKLSAgICAgICAgICAgIGNvcHlDb21wb25lbnQob3V0LCBlaW4sIDMsIHN0YXRpY19jYXN0PE91
dHB1dFR5cGU+KERlZmF1bHRWYWx1ZVJ1bGU6Om9uZSgpKSk7Ci0KLSAgICAgICAgICAgIG91dCAr
PSBXaWRlblJ1bGU6OmZpbmFsV2lkdGg7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMg
dm9pZCBjb252ZXJ0QXJyYXkoY29uc3Qgdm9pZCAqaW4sIHN0ZDo6c2l6ZV90IHN0cmlkZSwgc3Rk
OjpzaXplX3Qgbiwgdm9pZCAqb3V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRBcnJh
eShzdGF0aWNfY2FzdDxjb25zdCBJbnB1dFR5cGUqPihpbiksIHN0cmlkZSwgbiwgc3RhdGljX2Nh
c3Q8T3V0cHV0VHlwZSo+KG91dCkpOwotICAgIH0KLQotICBwcml2YXRlOgotICAgIC8vIEFkdmFu
Y2UgdGhlIGdpdmVuIHBvaW50ZXIgYnkgYSBudW1iZXIgb2YgYnl0ZXMgKG5vdCBwb2ludGVkLXRv
IGVsZW1lbnRzKS4KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgICBzdGF0aWMgVCAqcG9pbnRl
ckFkZEJ5dGVzKFQgKmJhc2VQdHIsIHN0ZDo6c2l6ZV90IG51bUJ5dGVzKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCAqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4oYmFzZVB0cikgKyBudW1CeXRlcyk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgY29weUNv
bXBvbmVudChPdXRwdXRUeXBlICpvdXQsIGNvbnN0IElucHV0VHlwZSAqaW4sIHN0ZDo6c2l6ZV90
IGVsZW1lbnRpbmRleCwgT3V0cHV0VHlwZSBkZWZhdWx0dmFsdWUpCi0gICAgewotICAgICAgICBp
ZiAoV2lkZW5SdWxlOjpmaW5hbFdpZHRoID4gZWxlbWVudGluZGV4KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAoV2lkZW5SdWxlOjppbml0aWFsV2lkdGggPiBlbGVtZW50aW5kZXgpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0W2VsZW1lbnRpbmRleF0gPSBDb252ZXJ0ZXI6
OmNvbnZlcnQoaW5bZWxlbWVudGluZGV4XSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0W2VsZW1lbnRpbmRleF0gPSBk
ZWZhdWx0dmFsdWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19OwotCi19Ci0K
LSNlbmRpZiAgIC8vIExJQkdMRVNWMl9WRVJURVhDT05WRVJTSU9OX0hfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvY29tcGlsZXIvQXJyYXlCb3Vu
ZHNDbGFtcGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvY29t
cGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmgKaW5kZXggMGQ0ZTFhMzc0Y2E4MTgyMjIxMjhiYWFk
Yzk4N2I1ZDhkMjAxYTg0My4uZjcyNWY1NWI1NzRiZDZhZDg4YjQwZWVkN2Y5NGI1OGRmMjMyNTZl
YyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L2Nv
bXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy90aGlyZF9wYXJ0eS9jb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIuaApAQCAtMjgsOCAr
MjgsOCBAQAogCiAjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCiAKLSNpbmNsdWRlICJj
b21waWxlci9JbmZvU2luay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgogCiBjbGFzcyBBcnJheUJvdW5kc0NsYW1w
ZXIgewogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3Ro
aXJkX3BhcnR5L211cm11cmhhc2gvTXVybXVySGFzaDMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL3RoaXJkX3BhcnR5L211cm11cmhhc2gvTXVybXVySGFzaDMuY3BwCmluZGV4IGYx
MWZiMjMzMmYxZjE1MDkyM2ZiMGM0ZmI2NTFkZTc5MTNlODc4MjYuLmRkODYyOTI2NDllYzUyZDg0
YWU0NzJhMWJlN2NlYWNhNTUyODBhNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy90aGlyZF9wYXJ0eS9tdXJtdXJoYXNoL011cm11ckhhc2gzLmNwcAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJtdXJIYXNo
My5jcHAKQEAgLTE2LDIwICsxNiwyMCBAQAogCiAjaWYgZGVmaW5lZChfTVNDX1ZFUikKIAotI2Rl
ZmluZSBGT1JDRV9JTkxJTkUgICAgX19mb3JjZWlubGluZQorI2RlZmluZSBGT1JDRV9JTkxJTkUJ
X19mb3JjZWlubGluZQogCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAKLSNkZWZpbmUgUk9UTDMyKHgs
eSkgICAgX3JvdGwoeCx5KQotI2RlZmluZSBST1RMNjQoeCx5KSAgICBfcm90bDY0KHgseSkKKyNk
ZWZpbmUgUk9UTDMyKHgseSkJX3JvdGwoeCx5KQorI2RlZmluZSBST1RMNjQoeCx5KQlfcm90bDY0
KHgseSkKIAogI2RlZmluZSBCSUdfQ09OU1RBTlQoeCkgKHgpCiAKIC8vIE90aGVyIGNvbXBpbGVy
cwogCi0jZWxzZSAgICAvLyBkZWZpbmVkKF9NU0NfVkVSKQorI2Vsc2UJLy8gZGVmaW5lZChfTVND
X1ZFUikKIAotI2RlZmluZSAgICBGT1JDRV9JTkxJTkUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lu
bGluZSkpCisjZGVmaW5lCUZPUkNFX0lOTElORSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5l
KSkKIAogaW5saW5lIHVpbnQzMl90IHJvdGwzMiAoIHVpbnQzMl90IHgsIGludDhfdCByICkKIHsK
QEAgLTQxLDggKzQxLDggQEAgaW5saW5lIHVpbnQ2NF90IHJvdGw2NCAoIHVpbnQ2NF90IHgsIGlu
dDhfdCByICkKICAgcmV0dXJuICh4IDw8IHIpIHwgKHggPj4gKDY0IC0gcikpOwogfQogCi0jZGVm
aW5lICAgIFJPVEwzMih4LHkpICAgIHJvdGwzMih4LHkpCi0jZGVmaW5lIFJPVEw2NCh4LHkpICAg
IHJvdGw2NCh4LHkpCisjZGVmaW5lCVJPVEwzMih4LHkpCXJvdGwzMih4LHkpCisjZGVmaW5lIFJP
VEw2NCh4LHkpCXJvdGw2NCh4LHkpCiAKICNkZWZpbmUgQklHX0NPTlNUQU5UKHgpICh4IyNMTFUp
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0eS9t
dXJtdXJoYXNoL011cm11ckhhc2gzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhp
cmRfcGFydHkvbXVybXVyaGFzaC9NdXJtdXJIYXNoMy5oCmluZGV4IDc1Y2Q0YmE1ODE1NGE5NWI3
ZjE0YWE4NWE2ZTMyMmRkMmY1NGQzMzQuLmMwOGY0ZjI1ODUyYzA3NmUzNzMxOGMyYTkzMzU3NjE2
YjViOTRiMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9w
YXJ0eS9tdXJtdXJoYXNoL011cm11ckhhc2gzLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL3RoaXJkX3BhcnR5L211cm11cmhhc2gvTXVybXVySGFzaDMuaApAQCAtMTgsNyArMTgs
NyBAQCB0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgdWludDY0X3Q7CiAKIC8vIE90aGVyIGNvbXBp
bGVycwogCi0jZWxzZSAgICAvLyBkZWZpbmVkKF9NU0NfVkVSKQorI2Vsc2UJLy8gZGVmaW5lZChf
TVNDX1ZFUikKIAogI2luY2x1ZGUgPHN0ZGludC5oPgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225000</attachid>
            <date>2014-02-23 07:03:05 -0800</date>
            <delta_ts>2014-02-23 07:25:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-129232-20140224020244.patch</filename>
            <type>text/plain</type>
            <size>3888320</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY0NTUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggZTJhMTVkZjMzNmQ4ODRkNWQ3MDdiZjI4NDBiMWNlY2YxODUzOWVkYS4uMjUyNzZhYjQyNTgx
MzUyOTVkMGIxZDY1ZGUxZmQ3MGY0M2FkNTYzMyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE2IEBACisyMDE0LTAyLTIzICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxl
LmNvbT4KKworICAgICAgICBVcGRhdGUgQU5HTEUgdG8gODM2YmQyMTc2ZTU2MDdiMTQ4NDZjZjFm
YmM1OTMyZGJjOTEzMThmNAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTI5MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgSSBhbHNvIHJlYXBwbGllZCBzb21lIG9mIG91ciBjaGFuZ2VzIGJlbG93LCBpbmNs
dWRpbmcgZGlzYWJsaW5nIHRoZSBjbGFuZworICAgICAgICBkZXByZWNhdGlvbiB3YXJuaW5ncyBp
biBzb21lIGZpbGVzLCBhZGRpbmcgdGhlIEFwcGxlIG5vdGUgYWJvdXQgbGljZW5zZQorICAgICAg
ICBhbmQgZGVmaW5pbmcgWVlfTk9fSU5QVVQuCisKKyAgICAgICAgSHVnZSBsaXN0IG9mIHNvdXJj
ZSBjaGFuZ2VzIG9taXR0ZWQuCisKIDIwMTMtMTItMTggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8
Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEZpeCBtYWtlIGRpc3Rj
aGVjay4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCA1NWRjMDU2ZjAzYTRkOTA5MzhjN2YyOWQzMThhZjQzZWU1ZDNi
ZTQ1Li5iYzlkZDM5MTMzODY0MmE3NjczM2RiZDc0NjNhNjUzMjkxYTNmNWE2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTQgQEAKKzIwMTQtMDItMjMgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUu
Y29tPgorCisgICAgICAgIFVwZGF0ZSBBTkdMRSB0byA4MzZiZDIxNzZlNTYwN2IxNDg0NmNmMWZi
YzU5MzJkYmM5MTMxOGY0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMjkyMzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBOZXcgZmlsZXMgYWRkZWQgdG8gQ01ha2VMaXN0cyBmb3IgRUZMLgorCisgICAgICAg
ICogQ01ha2VMaXN0cy50eHQ6CisKIDIwMTQtMDItMjIgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBw
bGUuY29tPgogCiAgICAgICAgIExldHRlcnByZXNzIGVmZmVjdCBkaXNhYmxlZCBmb3Igc3ludGhl
dGljIGl0YWxpYwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUucGxp
c3QgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS5wbGlzdAppbmRleCA3MWY1YWI3NWM3
MDU1ZWE1YThlM2Q0ZDEwNzgxNjBmMzM3ODJmMmMyLi5lZjI5NGI5Y2RhNzQ3NjdiODUzZTYzNGVl
MmVlNWIyNjdhZWMxMzU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdM
RS5wbGlzdAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS5wbGlzdApAQCAtNiwx
MyArNiwxMyBAQAogCQk8a2V5Pk9wZW5Tb3VyY2VQcm9qZWN0PC9rZXk+CiAJCTxzdHJpbmc+QU5H
TEU8L3N0cmluZz4KIAkJPGtleT5PcGVuU291cmNlVmVyc2lvbjwva2V5PgotCQk8c3RyaW5nPnIx
NjQxPC9zdHJpbmc+CisJCTxzdHJpbmc+ODM2YmQyMTc2ZTU2MDdiMTQ4NDZjZjFmYmM1OTMyZGJj
OTEzMThmNDwvc3RyaW5nPgogCQk8a2V5Pk9wZW5Tb3VyY2VXZWJzaXRlVVJMPC9rZXk+CiAJCTxz
dHJpbmc+aHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZ2xlcHJvamVjdC88L3N0cmluZz4KIAkJ
PGtleT5PcGVuU291cmNlU0NNPC9rZXk+Ci0JCTxzdHJpbmc+Z2l0IGNsb25lIGh0dHBzOi8vY29k
ZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0LyAmJiBjZCBhbmdsZXByb2plY3QgJiYgZ2l0IGNo
ZWNrb3V0IGE2MGUwODA1NzIxZjYyYzI4YTU1ZmFmMmRmNzQ0NzJjYzVmYzkxZmM8L3N0cmluZz4K
KwkJPHN0cmluZz5naXQgY2xvbmUgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmdsZXByb2pl
Y3QvICYmIGNkIGFuZ2xlcHJvamVjdCAmJiBnaXQgY2hlY2tvdXQgODM2YmQyMTc2ZTU2MDdiMTQ4
NDZjZjFmYmM1OTMyZGJjOTEzMThmNDwvc3RyaW5nPgogCQk8a2V5Pk9wZW5Tb3VyY2VJbXBvcnRE
YXRlPC9rZXk+Ci0JCTxzdHJpbmc+MjAxMy0xMS0wNzwvc3RyaW5nPgorCQk8c3RyaW5nPjIwMTQt
MDItMTg8L3N0cmluZz4KIAkJPGtleT5PcGVuU291cmNlTGljZW5zZTwva2V5PgogCQk8c3RyaW5n
PkJTRDwvc3RyaW5nPgogCQk8a2V5Pk9wZW5Tb3VyY2VMaWNlbnNlRmlsZTwva2V5PgpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUudmN4cHJvai9saWJHTEVTdjIudmN4
cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnZjeHByb2ovbGliR0xFU3YyLnZj
eHByb2oKaW5kZXggOWM4OTgzMDE5ZjNmNTEyMzgwOTJiNGYwNzlhY2M2NWQzZTY5OTU2ZS4uOGQx
MmQyOTI5NWRmZDBmY2UyN2Q0YmFmNWVmZDY5Mzg5MjY3NjQzZiAxMDA3NTUKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvQU5HTEUudmN4cHJvai9saWJHTEVTdjIudmN4cHJvagorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS52Y3hwcm9qL2xpYkdMRVN2Mi52Y3hwcm9qCkBA
IC0yMDcsNDAgKzIwNyw0MCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbW1v
blxSZWZDb3VudE9iamVjdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNc
bGliR0xFU3YyXFJlbmRlcmJ1ZmZlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEJsaXQuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxGZW5jZTExLmNwcCIgLz4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcRmVuY2U5LmNwcCIgLz4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFc
RmVuY2UxMS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXGQzZDlcRmVuY2U5LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcQnVmZmVyU3RvcmFnZS5jcHAiIC8+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEJ1ZmZlclN0b3JhZ2UxMS5j
cHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVy
XEJ1ZmZlclN0b3JhZ2U5LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xs
aWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcQnVmZmVyU3RvcmFnZTExLmNwcCIgLz4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxCdWZmZXJTdG9y
YWdlOS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJl
bmRlcmVyXEltYWdlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJH
TEVTdjJccmVuZGVyZXJcSW1hZ2U5LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxJbWFnZTkuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxJbmRleEJ1ZmZlci5jcHAiIC8+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEluZGV4
QnVmZmVyMTEuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2
MlxyZW5kZXJlclxJbmRleEJ1ZmZlcjkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxJbmRleEJ1ZmZlcjExLmNwcCIgLz4KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxJbmRl
eEJ1ZmZlcjkuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2
MlxyZW5kZXJlclxJbmRleERhdGFNYW5hZ2VyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcSW1hZ2VTU0UyLmNwcCIgLz4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcSW1hZ2UxMS5jcHAiIC8+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDEx
XEltYWdlMTEuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2
MlxyZW5kZXJlclxJbnB1dExheW91dENhY2hlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUXVlcnkxMS5jcHAiIC8+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFF1ZXJ5OS5jcHAiIC8+Cisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFF1
ZXJ5MTEuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2Mlxy
ZW5kZXJlclxkM2Q5XFF1ZXJ5OS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxz
cmNcbGliR0xFU3YyXHJlbmRlcmVyXFJlbmRlcmVyLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUmVuZGVyZXIxMS5jcHAiIC8+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXHJlbmRlcmVyMTFf
dXRpbHMuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2Mlxy
ZW5kZXJlclxSZW5kZXJlcjkuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Jj
XGxpYkdMRVN2MlxyZW5kZXJlclxyZW5kZXJlcjlfdXRpbHMuY3BwIiAvPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxSZW5kZXJUYXJnZXQxMS5jcHAi
IC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQz
ZDExXFJlbmRlcmVyMTEuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxp
YkdMRVN2MlxyZW5kZXJlclxkM2QxMVxyZW5kZXJlcjExX3V0aWxzLmNwcCIgLz4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxSZW5kZXJlcjku
Y3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJl
clxkM2Q5XHJlbmRlcmVyOV91dGlscy5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFJlbmRlclRhcmdldDExLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUmVuZGVyVGFy
Z2V0OS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJl
bmRlcmVyXFJlbmRlclN0YXRlQ2FjaGUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxTaGFkZXJFeGVjdXRhYmxlMTEuY3BwIiAvPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxTaGFkZXJFeGVj
dXRhYmxlOS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXFN3YXBDaGFpbjExLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcU3dhcENoYWluOS5jcHAiIC8+CisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFNoYWRlckV4ZWN1dGFi
bGUxMS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJl
bmRlcmVyXGQzZDlcU2hhZGVyRXhlY3V0YWJsZTkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxTd2FwQ2hhaW4xMS5jcHAiIC8+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlc
U3dhcENoYWluOS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xF
U3YyXHJlbmRlcmVyXFRleHR1cmVTdG9yYWdlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcVGV4dHVyZVN0b3JhZ2UxMS5jcHAiIC8+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFRleHR1cmVT
dG9yYWdlOS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXGQzZDExXFRleHR1cmVTdG9yYWdlMTEuY3BwIiAvPgorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XFRleHR1cmVTdG9yYWdlOS5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVy
XFZlcnRleEJ1ZmZlci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGli
R0xFU3YyXHJlbmRlcmVyXFZlcnRleEJ1ZmZlcjExLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcVmVydGV4QnVmZmVyOS5jcHAiIC8+Cisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFZl
cnRleEJ1ZmZlcjExLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJH
TEVTdjJccmVuZGVyZXJcZDNkOVxWZXJ0ZXhCdWZmZXI5LmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcVmVydGV4RGF0YU1hbmFnZXIuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxW
ZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHNyY1xsaWJHTEVTdjJcUmVzb3VyY2VNYW5hZ2VyLmNwcCIgLz4KQEAgLTI3NSwzNyArMjc1LDM3
IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tbW9uXFJlZkNvdW50T2JqZWN0
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXFJlbmRlcmJ1
ZmZlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5k
ZXJlclxCbGl0LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXEZlbmNlMTEuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xs
aWJHTEVTdjJccmVuZGVyZXJcRmVuY2U5LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXEZlbmNlMTEuaCIgLz4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxGZW5jZTkuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcRmVuY2VJ
bXBsLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRl
cmVyXEJ1ZmZlclN0b3JhZ2UuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xs
aWJHTEVTdjJccmVuZGVyZXJcQnVmZmVyU3RvcmFnZTExLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEJ1ZmZlclN0b3JhZ2U5LmgiIC8+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXEJ1
ZmZlclN0b3JhZ2UxMS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdM
RVN2MlxyZW5kZXJlclxkM2Q5XEJ1ZmZlclN0b3JhZ2U5LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGdlbmVyYXRlbWlwLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEltYWdlLmgiIC8+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEltYWdl
MTEuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVy
ZXJcSW1hZ2U5LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXGQzZDExXEltYWdlMTEuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxJbWFnZTkuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcSW5kZXhCdWZmZXIuaCIgLz4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcSW5kZXhCdWZm
ZXIxMS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5k
ZXJlclxJbmRleEJ1ZmZlcjkuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xs
aWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcSW5kZXhCdWZmZXIxMS5oIiAvPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XEluZGV4QnVmZmVyOS5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxJ
bmRleERhdGFNYW5hZ2VyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGli
R0xFU3YyXHJlbmRlcmVyXElucHV0TGF5b3V0Q2FjaGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUXVlcnkxMS5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxRdWVyeTExLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFF1
ZXJ5SW1wbC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2Mlxy
ZW5kZXJlclxRdWVyeTkuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJH
TEVTdjJccmVuZGVyZXJcZDNkOVxRdWVyeTkuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUmVuZGVyZXIuaCIgLz4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUmVuZGVyZXIxMS5oIiAvPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxyZW5kZXJlcjEx
X3V0aWxzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJl
bmRlcmVyXFJlbmRlcmVyOS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxp
YkdMRVN2MlxyZW5kZXJlclxyZW5kZXJlcjlfdXRpbHMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcUmVuZGVyZXIxMS5oIiAvPgor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxy
ZW5kZXJlcjExX3V0aWxzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGli
R0xFU3YyXHJlbmRlcmVyXGQzZDlcUmVuZGVyZXI5LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlccmVuZGVyZXI5X3V0aWxzLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFJlbmRl
clRhcmdldC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2Mlxy
ZW5kZXJlclxSZW5kZXJUYXJnZXQxMS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
c3JjXGxpYkdMRVN2MlxyZW5kZXJlclxSZW5kZXJUYXJnZXQ5LmgiIC8+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFJlbmRlclRhcmdldDEx
LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVy
XGQzZDlcUmVuZGVyVGFyZ2V0OS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGxpYkdMRVN2MlxyZW5kZXJlclxSZW5kZXJTdGF0ZUNhY2hlLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFNoYWRlckNhY2hlLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFNoYWRlckV4
ZWN1dGFibGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJc
cmVuZGVyZXJcU2hhZGVyRXhlY3V0YWJsZTExLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFNoYWRlckV4ZWN1dGFibGU5LmgiIC8+CisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFNoYWRl
ckV4ZWN1dGFibGUxMS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdM
RVN2MlxyZW5kZXJlclxkM2Q5XFNoYWRlckV4ZWN1dGFibGU5LmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRcY2xl
YXIxMXZzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJl
bmRlcmVyXHNoYWRlcnNcY29tcGlsZWRcY2xlYXJtdWx0aXBsZTExcHMuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcc2hhZGVyc1xjb21waWxl
ZFxjbGVhcnNpbmdsZTExcHMuaCIgLz4KQEAgLTMyMCwxNSArMzIwLDE1IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRc
cGFzc3Rocm91Z2hyZ2JhMTFwcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGxpYkdMRVN2MlxyZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVkXHN0YW5kYXJkdnMuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcU3dhcENoYWlu
LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVy
XFN3YXBDaGFpbjExLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xF
U3YyXHJlbmRlcmVyXFN3YXBDaGFpbjkuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcU3dhcENoYWluMTEuaCIgLz4KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxTd2FwQ2hhaW45
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVy
XFRleHR1cmVTdG9yYWdlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGli
R0xFU3YyXHJlbmRlcmVyXFRleHR1cmVTdG9yYWdlMTEuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcVGV4dHVyZVN0b3JhZ2U5LmgiIC8+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFRl
eHR1cmVTdG9yYWdlMTEuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJH
TEVTdjJccmVuZGVyZXJcZDNkOVxUZXh0dXJlU3RvcmFnZTkuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcVmVydGV4QnVmZmVyLmgiIC8+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFZlcnRleEJ1
ZmZlcjExLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJl
bmRlcmVyXFZlcnRleEJ1ZmZlcjkuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNy
Y1xsaWJHTEVTdjJccmVuZGVyZXJcdmVydGV4Y29udmVyc2lvbi5oIiAvPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxWZXJ0ZXhCdWZmZXIx
MS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJl
clxkM2Q5XFZlcnRleEJ1ZmZlcjkuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNy
Y1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVx2ZXJ0ZXhjb252ZXJzaW9uLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFZlcnRleERhdGFNYW5h
Z2VyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRl
cmVyXFZlcnRleERlY2xhcmF0aW9uQ2FjaGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHNyY1xsaWJHTEVTdjJccmVzb3VyY2UuaCIgLz4KQEAgLTM0MSwxMSArMzQxLDExIEBACiAg
IDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgogICAgIDxOb25lIEluY2x1ZGU9Ii4uXHNyY1xs
aWJHTEVTdjJcbGliR0xFU3YyLmRlZiIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxzcmNcbGli
R0xFU3YyXHJlbmRlcmVyXHNoYWRlcnNcQmxpdC5wcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXHNoYWRlcnNcQmxpdC52cyIgLz4KLSAgICA8Tm9uZSBJ
bmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXHNoYWRlcnNcQ2xlYXIxMS5obHNsIiAv
PgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcc2hhZGVyc1xn
ZW5lcmF0ZV9zaGFkZXJzLmJhdCIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xF
U3YyXHJlbmRlcmVyXHNoYWRlcnNcUGFzc3Rocm91Z2gxMS5obHNsIiAvPgorICAgIDxOb25lIElu
Y2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxzaGFkZXJzXEJsaXQucHMiIC8+
CisgICAgPE5vbmUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XHNoYWRl
cnNcQmxpdC52cyIgLz4KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRl
cmVyXGQzZDExXHNoYWRlcnNcQ2xlYXIxMS5obHNsIiAvPgorICAgIDxOb25lIEluY2x1ZGU9Ii4u
XHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxzaGFkZXJzXGdlbmVyYXRlX3NoYWRlcnMuYmF0
IiAvPgorICAgIDxOb25lIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFc
c2hhZGVyc1xQYXNzdGhyb3VnaDExLmhsc2wiIC8+CiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdy
b3VwPgogICAgIDxSZXNvdXJjZUNvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxsaWJH
TEVTdjIucmMiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS52
Y3hwcm9qL2xpYkdMRVN2Mi52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9BTkdMRS52Y3hwcm9qL2xpYkdMRVN2Mi52Y3hwcm9qLmZpbHRlcnMKaW5kZXggZGZjMDZmMWNi
ZDhhZjJkOGZiNTQ3MmVhZjhjZmNlNDA0ZDA1MGRmOS4uYTk2NDk2NjEwNjk4YTljMTJlMTcyZDZi
NTgwMzNlMWViZWQ4YmJmYSAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5H
TEUudmN4cHJvai9saWJHTEVTdjIudmN4cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL0FOR0xFLnZjeHByb2ovbGliR0xFU3YyLnZjeHByb2ouZmlsdGVycwpAQCAtMTI4
LDg4ICsxMjgsODggQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJc
cmVuZGVyZXJcQnVmZmVyU3RvcmFnZS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNc
UmVuZGVyZXI8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcQnVmZmVyU3RvcmFnZTExLmNwcCI+CisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXEJ1ZmZl
clN0b3JhZ2UxMS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwv
RmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Jj
XGxpYkdMRVN2MlxyZW5kZXJlclxGZW5jZTExLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXEZlbmNlMTEuY3BwIj4KICAgICAgIDxG
aWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcSW1hZ2Ux
MS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJl
clxkM2QxMVxJbWFnZTExLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJl
cjExPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEluZGV4QnVmZmVyMTEuY3BwIj4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcSW5kZXhCdWZmZXIx
MS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgog
ICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2
MlxyZW5kZXJlclxRdWVyeTExLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNc
bGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFF1ZXJ5MTEuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291
cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUmVuZGVyZXIxMS5jcHAi
PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Qx
MVxSZW5kZXJlcjExLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjEx
PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxz
cmNcbGliR0xFU3YyXHJlbmRlcmVyXHJlbmRlcmVyMTFfdXRpbHMuY3BwIj4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFccmVuZGVyZXIxMV91
dGlscy5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVy
PgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdM
RVN2MlxyZW5kZXJlclxSZW5kZXJUYXJnZXQxMS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxSZW5kZXJUYXJnZXQxMS5jcHAiPgog
ICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgogICAgIDwvQ2xD
b21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJl
clxTaGFkZXJFeGVjdXRhYmxlMTEuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNy
Y1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcU2hhZGVyRXhlY3V0YWJsZTExLmNwcCI+CiAgICAg
ICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBp
bGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFN3
YXBDaGFpbjExLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXGQzZDExXFN3YXBDaGFpbjExLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBG
aWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFRleHR1cmVTdG9yYWdlMTEuY3Bw
Ij4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNk
MTFcVGV4dHVyZVN0b3JhZ2UxMS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVu
ZGVyZXIxMTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxWZXJ0ZXhCdWZmZXIxMS5jcHAiPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxWZXJ0ZXhC
dWZmZXIxMS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwvRmls
dGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxp
YkdMRVN2MlxyZW5kZXJlclxCdWZmZXJTdG9yYWdlOS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XEJ1ZmZlclN0b3JhZ2U5LmNwcCI+
CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8L0Ns
Q29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVy
ZXJcRmVuY2U5LmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXGQzZDlcRmVuY2U5LmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xS
ZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcSW1hZ2U5LmNwcCI+CisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcSW1hZ2U5LmNwcCI+CiAg
ICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJc
SW5kZXhCdWZmZXI5LmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xF
U3YyXHJlbmRlcmVyXGQzZDlcSW5kZXhCdWZmZXI5LmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJj
ZSBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUXVlcnk5LmNwcCI+CisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcUXVlcnk5
LmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAg
ICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJc
cmVuZGVyZXJcUmVuZGVyZXI5LmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNc
bGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcUmVuZGVyZXI5LmNwcCI+CiAgICAgICA8RmlsdGVyPlNv
dXJjZSBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJccmVuZGVyZXI5X3V0aWxz
LmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVy
XGQzZDlccmVuZGVyZXI5X3V0aWxzLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xS
ZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUmVuZGVyVGFyZ2V0OS5jcHAiPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XFJlbmRlclRh
cmdldDkuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVy
PgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdM
RVN2MlxyZW5kZXJlclxTaGFkZXJFeGVjdXRhYmxlOS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XFNoYWRlckV4ZWN1dGFibGU5LmNw
cCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8
L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVu
ZGVyZXJcU3dhcENoYWluOS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxp
YkdMRVN2MlxyZW5kZXJlclxkM2Q5XFN3YXBDaGFpbjkuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291
cmNlIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxUZXh0dXJlU3RvcmFnZTku
Y3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJc
ZDNkOVxUZXh0dXJlU3RvcmFnZTkuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJl
bmRlcmVyOTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxWZXJ0ZXhCdWZmZXI5LmNwcCI+CisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcVmVydGV4QnVm
ZmVyOS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+
CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xF
U3YyXHJlbmRlcmVyXEJsaXQuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xs
aWJHTEVTdjJccmVuZGVyZXJcZDNkOVxCbGl0LmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBG
aWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcSW5wdXRMYXlvdXRDYWNoZS5jcHAi
PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Qx
MVxJbnB1dExheW91dENhY2hlLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5k
ZXJlcjExPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFJlbmRlclN0YXRlQ2FjaGUuY3BwIj4KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcUmVuZGVy
U3RhdGVDYWNoZS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwv
RmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Jj
XGxpYkdMRVN2MlxyZW5kZXJlclxWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmNwcCI+CisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcVmVydGV4RGVj
bGFyYXRpb25DYWNoZS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI5
PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxz
cmNcbGliR0xFU3YyXHByZWNvbXBpbGVkLmNwcCI+CkBAIC0zOTEsOTQgKzM5MSw5NCBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxWZXJ0ZXhEYXRh
TWFuYWdlci5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+
CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xF
U3YyXHJlbmRlcmVyXEJ1ZmZlclN0b3JhZ2UxMS5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcQnVmZmVyU3RvcmFnZTExLmgiPgogICAg
ICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgogICAgIDwvQ2xJbmNs
dWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxJ
bmRleEJ1ZmZlcjExLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2
MlxyZW5kZXJlclxkM2QxMVxJbmRleEJ1ZmZlcjExLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIg
RmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxRdWVyeTExLmgiPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxRdWVyeTEx
LmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgogICAg
IDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2Mlxy
ZW5kZXJlclxSZW5kZXJlcjExLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxp
YkdMRVN2MlxyZW5kZXJlclxkM2QxMVxSZW5kZXJlcjExLmgiPgogICAgICAgPEZpbHRlcj5IZWFk
ZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxSZW5kZXJUYXJnZXQxMS5o
Ij4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNk
MTFcUmVuZGVyVGFyZ2V0MTEuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJl
cjExPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFNoYWRlckV4ZWN1dGFibGUxMS5oIj4KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcU2hhZGVyRXhl
Y3V0YWJsZTExLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmls
dGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxp
YkdMRVN2MlxyZW5kZXJlclxTd2FwQ2hhaW4xMS5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcU3dhcENoYWluMTEuaCI+CiAgICAgICA8
RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFRleHR1
cmVTdG9yYWdlMTEuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXGQzZDExXFRleHR1cmVTdG9yYWdlMTEuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRl
ciBGaWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFZlcnRleEJ1ZmZlcjExLmgi
PgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Qx
MVxWZXJ0ZXhCdWZmZXIxMS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVy
MTE8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcQnVmZmVyU3RvcmFnZTkuaCI+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcQnVmZmVyU3RvcmFnZTku
aCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8
L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVu
ZGVyZXJcRmVuY2U5LmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2
MlxyZW5kZXJlclxkM2Q5XEZlbmNlOS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJl
bmRlcmVyOTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxJbWFnZTkuaCI+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcSW1hZ2U5LmgiPgogICAgICAg
PEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEluZGV4
QnVmZmVyOS5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVu
ZGVyZXJcZDNkOVxJbmRleEJ1ZmZlcjkuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xS
ZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUXVlcnk5LmgiPgorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XFF1ZXJ5OS5oIj4KICAgICAg
IDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRl
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxSZW5k
ZXJlcjkuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRl
cmVyXGQzZDlcUmVuZGVyZXI5LmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVy
ZXI5PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXHJlbmRlcmVyOV91dGlscy5oIj4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxyZW5kZXJlcjlfdXRp
bHMuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAg
ICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJc
cmVuZGVyZXJcUmVuZGVyVGFyZ2V0OS5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNy
Y1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxSZW5kZXJUYXJnZXQ5LmgiPgogICAgICAgPEZpbHRl
cj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFNoYWRlckV4ZWN1
dGFibGU5LmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5k
ZXJlclxkM2Q5XFNoYWRlckV4ZWN1dGFibGU5LmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmls
ZXNcUmVuZGVyZXI5PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFN3YXBDaGFpbjkuaCI+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcU3dhcENoYWlu
OS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPgogICAg
IDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2Mlxy
ZW5kZXJlclxUZXh0dXJlU3RvcmFnZTkuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxz
cmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcVGV4dHVyZVN0b3JhZ2U5LmgiPgogICAgICAgPEZp
bHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFZlcnRleEJ1
ZmZlcjkuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRl
cmVyXGQzZDlcVmVydGV4QnVmZmVyOS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJl
bmRlcmVyOTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxGZW5jZTExLmgiPgorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxGZW5jZTExLmgiPgogICAg
ICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgogICAgIDwvQ2xJbmNs
dWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxJ
bWFnZTExLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5k
ZXJlclxkM2QxMVxJbWFnZTExLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVy
ZXIxMTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxyZW5kZXJlcjExX3V0aWxzLmgiPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxyZW5kZXJlcjEx
X3V0aWxzLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVy
PgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdM
RVN2MlxyZW5kZXJlclxGZW5jZTkuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNc
bGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcRmVuY2U5LmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIg
RmlsZXNcUmVuZGVyZXJcUmVuZGVyZXI5PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFF1ZXJ5MTEuaCI+
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDEx
XFF1ZXJ5MTEuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlclxSZW5kZXJl
cjExPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEJsaXQuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcQmxpdC5oIj4KICAgICAgIDxGaWx0ZXI+
SGVhZGVyIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxTaGFkZXJDYWNoZS5o
Ij4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNk
OVxTaGFkZXJDYWNoZS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyOTwv
RmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGxpYkdMRVN2MlxyZW5kZXJlclxJbnB1dExheW91dENhY2hlLmgiPgorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxJbnB1dExheW91dENhY2hl
LmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgogICAg
IDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2Mlxy
ZW5kZXJlclxSZW5kZXJTdGF0ZUNhY2hlLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
c3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxSZW5kZXJTdGF0ZUNhY2hlLmgiPgogICAgICAg
PEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRl
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxWZXJ0
ZXhEZWNsYXJhdGlvbkNhY2hlLmgiPgpAQCAtNTA3LDEwICs1MDcsMTAgQEAKICAgICA8Tm9uZSBJ
bmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXHNoYWRlcnNcZ2VuZXJhdGVfc2hhZGVy
cy5iYXQiPgogICAgICAgPEZpbHRlcj5TaGFkZXJzPC9GaWx0ZXI+CiAgICAgPC9Ob25lPgotICAg
IDxOb25lIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcc2hhZGVyc1xQYXNzdGhy
b3VnaDExLmhsc2wiPgorICAgIDxOb25lIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVy
ZXJcZDNkMTFcc2hhZGVyc1xQYXNzdGhyb3VnaDExLmhsc2wiPgogICAgICAgPEZpbHRlcj5TaGFk
ZXJzPC9GaWx0ZXI+CiAgICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXHNyY1xsaWJH
TEVTdjJccmVuZGVyZXJcc2hhZGVyc1xDbGVhcjExLmhsc2wiPgorICAgIDxOb25lIEluY2x1ZGU9
Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcc2hhZGVyc1xDbGVhcjExLmhsc2wiPgog
ICAgICAgPEZpbHRlcj5TaGFkZXJzPC9GaWx0ZXI+CiAgICAgPC9Ob25lPgogICAgIDxOb25lIElu
Y2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJcbGliR0xFU3YyLmRlZiIgLz4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnZjeHByb2ovdHJhbnNsYXRvcl9jb21tb24udmN4
cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnZjeHByb2ovdHJhbnNsYXRvcl9j
b21tb24udmN4cHJvagppbmRleCA3M2YzZDI5NzgwMzM4MWE5MGI4MDRhYmFiMjQ4Njg2NDU1YzEx
YzczLi41ZGVhNWNmMmQwNjM1OGU0YzAyZTFlNTNhMmRjMWJhYzJkYzkzMmI4IDEwMDc1NQotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS52Y3hwcm9qL3RyYW5zbGF0b3JfY29tbW9u
LnZjeHByb2oKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUudmN4cHJvai90cmFu
c2xhdG9yX2NvbW1vbi52Y3hwcm9qCkBAIC0xMzksOTYgKzEzOSwxMDAgQEAKICAgPC9JbXBvcnRH
cm91cD4KICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CiAgIDxJdGVtR3Jv
dXA+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBp
bGVyXENvZGVHZW4uY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBp
bGVyXENvbXBpbGVyLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclxkZWJ1Zy5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGls
ZXJcRGV0ZWN0Q2FsbERlcHRoLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNy
Y1xjb21waWxlclxEaWFnbm9zdGljcy5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxzcmNcY29tcGlsZXJcRGlyZWN0aXZlSGFuZGxlci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcRm9yTG9vcFVucm9sbC5jcHAiIC8+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcSW5mb1NpbmsuY3BwIiAvPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXEluaXRpYWxpemUuY3BwIiAvPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXEluaXRpYWxpemVEbGwuY3BwIiAvPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXEluaXRpYWxpemVHTFBvc2l0
aW9uLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxJbml0
aWFsaXplUGFyc2VDb250ZXh0LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNy
Y1xjb21waWxlclxJbnRlcm1lZGlhdGUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cc3JjXGNvbXBpbGVyXGludGVybU91dC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxzcmNcY29tcGlsZXJcSW50ZXJtVHJhdmVyc2UuY3BwIiAvPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCIgLz4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxvc3NvdXJjZV93aW4uY3BwIiAv
PgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHBhcnNlQ29uc3QuY3Bw
IiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFBhcnNlQ29udGV4
dC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcUG9vbEFs
bG9jLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxRdWFs
aWZpZXJBbGl2ZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGls
ZXJcUmVtb3ZlVHJlZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29t
cGlsZXJcU2hhZGVyTGFuZy5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNc
Y29tcGlsZXJcU3ltYm9sVGFibGUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
c3JjXGNvbXBpbGVyXFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAiIC8+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdXRpbC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAiIC8+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcVmFyaWFibGVJbmZvLmNwcCIgLz4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxWYXJpYWJsZVBhY2tlci5j
cHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZ2xzbGFuZ19s
ZXguY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXGdsc2xh
bmdfdGFiLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxk
ZXBncmFwaFxEZXBlbmRlbmN5R3JhcGguY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cc3JjXGNvbXBpbGVyXGRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIiAvPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXGRlcGdyYXBoXERlcGVuZGVu
Y3lHcmFwaE91dHB1dC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29t
cGlsZXJcZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwIiAvPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRpbWluZ1xSZXN0cmljdEZyYWdtZW50U2hh
ZGVyVGltaW5nLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxl
clx0aW1pbmdcUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIiAvPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFZlcnNpb25HTFNMLmNwcCIgLz4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXEJ1aWx0SW5GdW5jdGlv
bkVtdWxhdG9yLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxl
clx0cmFuc2xhdG9yXENvZGVHZW4uY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
c3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcQ29tcGlsZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcZGVidWcuY3BwIiAvPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcRGV0ZWN0Q2FsbERl
cHRoLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFu
c2xhdG9yXERpYWdub3N0aWNzLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNy
Y1xjb21waWxlclx0cmFuc2xhdG9yXERpcmVjdGl2ZUhhbmRsZXIuY3BwIiAvPgorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcRm9yTG9vcFVucm9sbC5j
cHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRv
clxJbmZvU2luay5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGls
ZXJcdHJhbnNsYXRvclxJbml0aWFsaXplLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXEluaXRpYWxpemVWYXJpYWJsZXMuY3BwIiAvPgor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSW5pdGlh
bGl6ZURsbC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJc
dHJhbnNsYXRvclxJbml0aWFsaXplR0xQb3NpdGlvbi5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxJbml0aWFsaXplUGFyc2VDb250ZXh0
LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xh
dG9yXEludGVybWVkaWF0ZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNc
Y29tcGlsZXJcdHJhbnNsYXRvclxpbnRlcm1PdXQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSW50ZXJtVHJhdmVyc2UuY3BwIiAvPgor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcTWFwTG9u
Z1ZhcmlhYmxlTmFtZXMuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNv
bXBpbGVyXHRyYW5zbGF0b3Jcb3Nzb3VyY2Vfd2luLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXHBhcnNlQ29uc3QuY3BwIiAvPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcUGFyc2VDb250
ZXh0LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFu
c2xhdG9yXFBvb2xBbGxvYy5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNc
Y29tcGlsZXJcdHJhbnNsYXRvclxRdWFsaWZpZXJBbGl2ZS5jcHAiIC8+CisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxSZW1vdmVUcmVlLmNwcCIgLz4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFJld3Jp
dGVFbHNlQmxvY2tzLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclx0cmFuc2xhdG9yXFNoYWRlckxhbmcuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcU3ltYm9sVGFibGUuY3BwIiAvPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcVW5mb2xkU2hvcnRD
aXJjdWl0QVNULmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxl
clx0cmFuc2xhdG9yXHV0aWwuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXHRyYW5zbGF0b3JcVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAiIC8+CisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxWYXJpYWJsZUluZm8u
Y3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0
b3JcVmFyaWFibGVQYWNrZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXHRyYW5zbGF0b3JcZ2xzbGFuZ19sZXguY3BwIiAvPgorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcZ2xzbGFuZ190YWIuY3BwIiAvPgor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcZGVwZ3Jh
cGhcRGVwZW5kZW5jeUdyYXBoLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNy
Y1xjb21waWxlclx0cmFuc2xhdG9yXGRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3Bw
IiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3Jc
ZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGRlcGdyYXBoXERlcGVuZGVuY3lHcmFw
aFRyYXZlcnNlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxl
clx0cmFuc2xhdG9yXHRpbWluZ1xSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCIgLz4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXHRpbWlu
Z1xSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxWZXJzaW9uR0xTTC5jcHAiIC8+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcdGhpcmRfcGFydHlcY29tcGlsZXJcQXJyYXlCb3Vu
ZHNDbGFtcGVyLmNwcCIgLz4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+Ci0gICAgPEN1
c3RvbUJ1aWxkIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxnbHNsYW5nLmwiPgorICAgIDxDdXN0
b21CdWlsZCBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxnbHNsYW5nLmwiPgog
ICAgIDwvQ3VzdG9tQnVpbGQ+Ci0gICAgPEN1c3RvbUJ1aWxkIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclxnbHNsYW5nLnkiPgorICAgIDxDdXN0b21CdWlsZCBJbmNsdWRlPSIuLlxzcmNcY29tcGls
ZXJcdHJhbnNsYXRvclxnbHNsYW5nLnkiPgogICAgIDwvQ3VzdG9tQnVpbGQ+CiAgIDwvSXRlbUdy
b3VwPgogICA8SXRlbUdyb3VwPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBp
bGVyXEJhc2VUeXBlcy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBp
bGVyXEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxzcmNcY29tcGlsZXJcQ29tbW9uLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzcmNcY29tcGlsZXJcQ29uc3RhbnRVbmlvbi5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cc3JjXGNvbXBpbGVyXGRlYnVnLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzcmNcY29tcGlsZXJcRGV0ZWN0Q2FsbERlcHRoLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxzcmNcY29tcGlsZXJcRGlhZ25vc3RpY3MuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHNyY1xjb21waWxlclxEaXJlY3RpdmVIYW5kbGVyLmgiIC8+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcRm9yTG9vcFVucm9sbC5oIiAvPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXEhhc2hOYW1lcy5oIiAvPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXEluZm9TaW5rLmgiIC8+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcSW5pdGlhbGl6ZS5oIiAvPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXEluaXRpYWxpemVEbGwuaCIgLz4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxJbml0aWFsaXplR2xvYmFscy5o
IiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXEluaXRpYWxpemVH
TFBvc2l0aW9uLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJc
SW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
c3JjXGNvbXBpbGVyXGludGVybWVkaWF0ZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cc3JjXGNvbXBpbGVyXGxvY2FsaW50ZXJtZWRpYXRlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCIgLz4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxNTWFwLmgiIC8+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcb3NpbmNsdWRlLmgiIC8+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcUGFyc2VDb250ZXh0LmgiIC8+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcUG9vbEFsbG9jLmgiIC8+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcUXVhbGlmaWVyQWxpdmUuaCIgLz4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxSZW1vdmVUcmVlLmgiIC8+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcUmVuYW1lRnVuY3Rpb24uaCIg
Lz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXEJh
c2VUeXBlcy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRy
YW5zbGF0b3JcQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXENvbW1vbi5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcQ29uc3RhbnRVbmlvbi5o
IiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3Jc
ZGVidWcuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFu
c2xhdG9yXERldGVjdENhbGxEZXB0aC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
c3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcRGlhZ25vc3RpY3MuaCIgLz4KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXERpcmVjdGl2ZUhhbmRsZXIuaCIg
Lz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXEZv
ckxvb3BVbnJvbGwuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxl
clx0cmFuc2xhdG9yXEhhc2hOYW1lcy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
c3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSW5mb1NpbmsuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXEluaXRpYWxpemUuaCIgLz4KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXEluaXRpYWxpemVW
YXJpYWJsZXMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0
cmFuc2xhdG9yXEluaXRpYWxpemVEbGwuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHNyY1xjb21waWxlclx0cmFuc2xhdG9yXEluaXRpYWxpemVHbG9iYWxzLmgiIC8+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxJbml0aWFsaXplR0xQ
b3NpdGlvbi5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRy
YW5zbGF0b3JcSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcaW50ZXJtZWRpYXRlLmgiIC8+CisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxsb2NhbGludGVy
bWVkaWF0ZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRy
YW5zbGF0b3JcTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXE1NYXAuaCIgLz4KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXG9zaW5jbHVkZS5oIiAvPgorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcUGFyc2VDb250
ZXh0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNs
YXRvclxQb29sQWxsb2MuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclx0cmFuc2xhdG9yXFF1YWxpZmllckFsaXZlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxSZW1vdmVUcmVlLmgiIC8+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxSZW5hbWVGdW5jdGlv
bi5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0
b3JcUmV3cml0ZUVsc2VCbG9ja3MuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGlu
Y2x1ZGVcR0xTTEFOR1xTaGFkZXJMYW5nLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzcmNcY29tcGlsZXJcU2hIYW5kbGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHNyY1xjb21waWxlclxTeW1ib2xUYWJsZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cc3JjXGNvbXBpbGVyXFR5cGVzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxz
cmNcY29tcGlsZXJcVW5mb2xkU2hvcnRDaXJjdWl0QVNULmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdXRpbC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cc3JjXGNvbXBpbGVyXFZhbGlkYXRlTGltaXRhdGlvbnMuaCIgLz4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxWYXJpYWJsZUluZm8uaCIgLz4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxWYXJpYWJsZVBhY2tlci5oIiAvPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXGdsc2xhbmdfdGFiLmgiIC8+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdGltaW5nXFJlc3RyaWN0RnJh
Z21lbnRTaGFkZXJUaW1pbmcuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclx0aW1pbmdcUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCIgLz4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGgu
aCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxkZXBncmFwaFxE
ZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxz
cmNcY29tcGlsZXJcZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiIC8+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcVmVyc2lvbkdMU0wuaCIgLz4KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFNoSGFuZGxlLmgi
IC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxT
eW1ib2xUYWJsZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVy
XHRyYW5zbGF0b3JcVHlwZXMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclx0cmFuc2xhdG9yXFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcdXRpbC5oIiAvPgorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcVmFsaWRhdGVM
aW1pdGF0aW9ucy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVy
XHRyYW5zbGF0b3JcVmFyaWFibGVJbmZvLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxWYXJpYWJsZVBhY2tlci5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcZ2xzbGFuZ190YWIuaCIg
Lz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXHRp
bWluZ1xSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgiIC8+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclx0aW1pbmdcUmVzdHJpY3RWZXJ0ZXhT
aGFkZXJUaW1pbmcuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxl
clx0cmFuc2xhdG9yXGRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaC5oIiAvPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcZGVwZ3JhcGhcRGVwZW5kZW5j
eUdyYXBoQnVpbGRlci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBp
bGVyXHRyYW5zbGF0b3JcZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiIC8+CisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxWZXJzaW9uR0xT
TC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXHRoaXJkX3BhcnR5XGNvbXBp
bGVyXEFycmF5Qm91bmRzQ2xhbXBlci5oIiAvPgogICA8L0l0ZW1Hcm91cD4KICAgPEltcG9ydCBQ
cm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnZjeHByb2ovdHJhbnNsYXRvcl9j
b21tb24udmN4cHJvai5maWx0ZXJzIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUudmN4
cHJvai90cmFuc2xhdG9yX2NvbW1vbi52Y3hwcm9qLmZpbHRlcnMKaW5kZXggOThkNzc3ZTNiY2Q4
NmFkZDZhYWIwMGNhZWVlMWNiOTgwODcwOTI3Zi4uMGEyZTQyMGNiYWNjMzk2ZjQxODI3YzRiMTIx
YWQ2OWE1YjVkNmNlZiAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUu
dmN4cHJvai90cmFuc2xhdG9yX2NvbW1vbi52Y3hwcm9qLmZpbHRlcnMKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvQU5HTEUudmN4cHJvai90cmFuc2xhdG9yX2NvbW1vbi52Y3hwcm9qLmZp
bHRlcnMKQEAgLTI5LDI2MyArMjksMjY5IEBACiAgICAgPC9GaWx0ZXI+CiAgIDwvSXRlbUdyb3Vw
PgogICA8SXRlbUdyb3VwPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVy
XGdsc2xhbmdfbGV4LmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGls
ZXJcdHJhbnNsYXRvclxnbHNsYW5nX2xleC5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmls
ZXNcZ2VuZXJhdGVkPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZ2xzbGFuZ190YWIuY3BwIj4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGdsc2xhbmdfdGFiLmNwcCI+CiAg
ICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xnZW5lcmF0ZWQ8L0ZpbHRlcj4KICAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxkZXBncmFwaFxE
ZXBlbmRlbmN5R3JhcGguY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclx0cmFuc2xhdG9yXGRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaC5jcHAiPgogICAgICAgPEZp
bHRlcj5Tb3VyY2UgRmlsZXNcZGVwZ3JhcGg8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxkZXBncmFwaFxEZXBlbmRlbmN5
R3JhcGhCdWlsZGVyLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGls
ZXJcdHJhbnNsYXRvclxkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCI+CiAgICAg
ICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xkZXBncmFwaDwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxl
PgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXGRlcGdyYXBoXERlcGVu
ZGVuY3lHcmFwaE91dHB1dC5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNv
bXBpbGVyXHRyYW5zbGF0b3JcZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCI+CiAg
ICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xkZXBncmFwaDwvRmlsdGVyPgogICAgIDwvQ2xDb21w
aWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXGRlcGdyYXBoXERl
cGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxz
cmNcY29tcGlsZXJcdHJhbnNsYXRvclxkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5j
cHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcZGVwZ3JhcGg8L0ZpbHRlcj4KICAgICA8
L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0aW1p
bmdcUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcdGltaW5nXFJlc3RyaWN0RnJhZ21lbnRT
aGFkZXJUaW1pbmcuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHRpbWluZzwvRmls
dGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNv
bXBpbGVyXHRpbWluZ1xSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAiPgorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcdGltaW5nXFJlc3RyaWN0
VmVydGV4U2hhZGVyVGltaW5nLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aW1p
bmc8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHNyY1x0aGlyZF9wYXJ0eVxjb21waWxlclxBcnJheUJvdW5kc0NsYW1wZXIuY3BwIj4KICAgICAg
IDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcVmFyaWFibGVQYWNrZXIuY3BwIj4KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFZhcmlhYmxl
UGFja2VyLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwv
Q2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXEJ1aWx0
SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNc
Y29tcGlsZXJcdHJhbnNsYXRvclxCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAiPgogICAgICAg
PEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxDb21waWxlci5jcHAiPgorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcQ29tcGlsZXIuY3BwIj4K
ICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZGVidWcuY3BwIj4KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGRlYnVnLmNwcCI+
CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXERldGVjdENhbGxEZXB0aC5j
cHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3Jc
RGV0ZWN0Q2FsbERlcHRoLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVy
PgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBp
bGVyXERpYWdub3N0aWNzLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29t
cGlsZXJcdHJhbnNsYXRvclxEaWFnbm9zdGljcy5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2Ug
RmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHNyY1xjb21waWxlclxEaXJlY3RpdmVIYW5kbGVyLmNwcCI+CisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxEaXJlY3RpdmVIYW5kbGVyLmNwcCI+
CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXEZvckxvb3BVbnJvbGwuY3Bw
Ij4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXEZv
ckxvb3BVbnJvbGwuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAg
ICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJc
SW5mb1NpbmsuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0
cmFuc2xhdG9yXEluZm9TaW5rLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmls
dGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNv
bXBpbGVyXEluaXRpYWxpemUuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclx0cmFuc2xhdG9yXEluaXRpYWxpemUuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNl
IEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxzcmNcY29tcGlsZXJcSW5pdGlhbGl6ZURsbC5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSW5pdGlhbGl6ZVZhcmlhYmxlcy5jcHAi
PgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxJbml0aWFsaXplUGFyc2VD
b250ZXh0LmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJh
bnNsYXRvclxJbml0aWFsaXplRGxsLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwv
RmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXEludGVybWVkaWF0ZS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
c3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAiPgogICAg
ICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxpbnRlcm1PdXQuY3BwIj4KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXEludGVybWVkaWF0
ZS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxJbnRlcm1UcmF2
ZXJzZS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5z
bGF0b3JcaW50ZXJtT3V0LmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVy
PgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBp
bGVyXE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxJbnRlcm1UcmF2ZXJzZS5jcHAiPgogICAgICAgPEZp
bHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxvc3NvdXJjZV93aW4uY3BwIj4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXE1hcExvbmdWYXJpYWJs
ZU5hbWVzLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwv
Q2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHBhcnNl
Q29uc3QuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFu
c2xhdG9yXG9zc291cmNlX3dpbi5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0Zp
bHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclxQb29sQWxsb2MuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclx0cmFuc2xhdG9yXHBhcnNlQ29uc3QuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNl
IEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxzcmNcY29tcGlsZXJcUXVhbGlmaWVyQWxpdmUuY3BwIj4KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFBvb2xBbGxvYy5jcHAiPgogICAgICAg
PEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxSZW1vdmVUcmVlLmNwcCI+CisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxRdWFsaWZpZXJBbGl2
ZS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxTaGFkZXJMYW5n
LmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRv
clxSZW1vdmVUcmVlLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgog
ICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVy
XFN5bWJvbFRhYmxlLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGls
ZXJcdHJhbnNsYXRvclxTaGFkZXJMYW5nLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxl
czwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
c3JjXGNvbXBpbGVyXHV0aWwuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclx0cmFuc2xhdG9yXFN5bWJvbFRhYmxlLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJj
ZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cc3JjXGNvbXBpbGVyXFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwIj4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXHV0aWwuY3BwIj4KICAgICAg
IDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcVmFyaWFibGVJbmZvLmNwcCI+CisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxWYWxpZGF0ZUxp
bWl0YXRpb25zLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAg
IDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXElu
aXRpYWxpemVHTFBvc2l0aW9uLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNc
Y29tcGlsZXJcdHJhbnNsYXRvclxWYXJpYWJsZUluZm8uY3BwIj4KICAgICAgIDxGaWx0ZXI+U291
cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxzcmNcY29tcGlsZXJcUGFyc2VDb250ZXh0LmNwcCI+CisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxJbml0aWFsaXplR0xQb3NpdGlvbi5j
cHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGls
ZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxWZXJzaW9uR0xTTC5j
cHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3Jc
UGFyc2VDb250ZXh0LmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgog
ICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVy
XENvZGVHZW4uY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0
cmFuc2xhdG9yXFZlcnNpb25HTFNMLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwv
RmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcQ29kZUdlbi5jcHAiPgorICAgICAgPEZp
bHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFVuZm9sZFNob3J0Q2lyY3Vp
dEFTVC5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0Ns
Q29tcGlsZT4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZ2xzbGFuZ190YWIuaCI+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxnbHNsYW5nX3RhYi5oIj4KICAgICAg
IDxGaWx0ZXI+SGVhZGVyIEZpbGVzXGdlbmVyYXRlZDwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRl
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRpbWluZ1xSZXN0cmlj
dEZyYWdtZW50U2hhZGVyVGltaW5nLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXHRyYW5zbGF0b3JcdGltaW5nXFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcu
aCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aW1pbmc8L0ZpbHRlcj4KICAgICA8L0Ns
SW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0aW1pbmdc
UmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclx0aW1pbmdcUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1p
bmcuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aW1pbmc8L0ZpbHRlcj4KICAgICA8
L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxkZXBn
cmFwaFxEZXBlbmRlbmN5R3JhcGguaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNc
Y29tcGlsZXJcdHJhbnNsYXRvclxkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGguaCI+CiAgICAgICA8
RmlsdGVyPkhlYWRlciBGaWxlc1xkZXBncmFwaDwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXGRlcGdyYXBoXERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXIuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGls
ZXJcdHJhbnNsYXRvclxkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmgiPgogICAgICAg
PEZpbHRlcj5IZWFkZXIgRmlsZXNcZGVwZ3JhcGg8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxkZXBncmFwaFxEZXBlbmRl
bmN5R3JhcGhPdXRwdXQuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGls
ZXJcdHJhbnNsYXRvclxkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCI+CiAgICAgICA8
RmlsdGVyPkhlYWRlciBGaWxlc1xkZXBncmFwaDwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXHRoaXJkX3BhcnR5XGNvbXBpbGVyXEFycmF5
Qm91bmRzQ2xhbXBlci5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAg
ICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJc
VmFyaWFibGVQYWNrZXIuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGls
ZXJcdHJhbnNsYXRvclxWYXJpYWJsZVBhY2tlci5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZp
bGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzcmNcY29tcGlsZXJcVmFyaWFibGVJbmZvLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcVmFyaWFibGVJbmZvLmgiPgogICAgICAgPEZpbHRl
cj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxWYWxpZGF0ZUxpbWl0YXRpb25zLmgiPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcVmFsaWRhdGVMaW1p
dGF0aW9ucy5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9D
bEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdXRpbC5o
Ij4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXHV0
aWwuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNs
dWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFR5cGVzLmgiPgor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcVHlwZXMu
aCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRl
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFN5bWJvbFRhYmxlLmgi
PgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcU3lt
Ym9sVGFibGUuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAgIDwv
Q2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFNoSGFu
ZGxlLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0
b3JcU2hIYW5kbGUuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAg
IDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW5jbHVkZVxHTFNMQU5H
XFNoYWRlckxhbmcuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAg
IDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFJl
bmFtZUZ1bmN0aW9uLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVy
XHRyYW5zbGF0b3JcUmVuYW1lRnVuY3Rpb24uaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxl
czwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
c3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcUmVtb3ZlVHJlZS5oIj4KICAgICAgIDxGaWx0ZXI+SGVh
ZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxzcmNcY29tcGlsZXJcUmVtb3ZlVHJlZS5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFF1YWxpZmllckFsaXZlLmgiPgogICAgICAg
PEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxRdWFsaWZpZXJBbGl2ZS5oIj4KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFBvb2xBbGxvYy5o
Ij4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcUG9vbEFsbG9jLmgiPgor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3Jcb3NpbmNs
dWRlLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxvc2luY2x1ZGUu
aCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxN
TWFwLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxNTWFwLmgiPgor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcTWFwTG9u
Z1ZhcmlhYmxlTmFtZXMuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgog
ICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVy
XE1hcExvbmdWYXJpYWJsZU5hbWVzLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXHRyYW5zbGF0b3JcbG9jYWxpbnRlcm1lZGlhdGUuaCI+CiAgICAgICA8RmlsdGVy
PkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXGxvY2FsaW50ZXJtZWRpYXRlLmgiPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcaW50ZXJtZWRpYXRlLmgi
PgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxpbnRlcm1lZGlhdGUuaCI+
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxJbml0
aWFsaXplUGFyc2VDb250ZXh0LmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRl
cj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclxJbml0aWFsaXplUGFyc2VDb250ZXh0LmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSW5pdGlhbGl6ZUdsb2JhbHMuaCI+CiAgICAgICA8
RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXEluaXRpYWxpemVHbG9iYWxzLmgiPgorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSW5pdGlhbGl6
ZURsbC5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbElu
Y2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcSW5pdGlhbGl6
ZURsbC5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xh
dG9yXEluaXRpYWxpemUuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgog
ICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVy
XEluaXRpYWxpemUuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJc
dHJhbnNsYXRvclxJbml0aWFsaXplVmFyaWFibGVzLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIg
RmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHNyY1xjb21waWxlclxJbmZvU2luay5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHNyY1xjb21waWxlclx0cmFuc2xhdG9yXEluZm9TaW5rLmgiPgogICAgICAgPEZpbHRlcj5IZWFk
ZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHNyY1xjb21waWxlclxIYXNoTmFtZXMuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxIYXNoTmFtZXMuaCI+CiAgICAgICA8RmlsdGVy
PkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXEZvckxvb3BVbnJvbGwuaCI+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxGb3JMb29wVW5yb2xsLmgiPgog
ICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxEaXJlY3RpdmVIYW5kbGVyLmgi
PgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcRGly
ZWN0aXZlSGFuZGxlci5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAg
ICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJc
RGlhZ25vc3RpY3MuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJc
dHJhbnNsYXRvclxEaWFnbm9zdGljcy5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9G
aWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNc
Y29tcGlsZXJcRGV0ZWN0Q2FsbERlcHRoLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
c3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcRGV0ZWN0Q2FsbERlcHRoLmgiPgogICAgICAgPEZpbHRl
cj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxkZWJ1Zy5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGRlYnVnLmgiPgogICAgICAgPEZpbHRlcj5I
ZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHNyY1xjb21waWxlclxDb25zdGFudFVuaW9uLmgiPgorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcQ29uc3RhbnRVbmlvbi5oIj4KICAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcQ29tbW9uLmgiPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcQ29tbW9uLmgiPgogICAg
ICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxCdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9y
XEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8
L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNy
Y1xjb21waWxlclxCYXNlVHlwZXMuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNc
Y29tcGlsZXJcdHJhbnNsYXRvclxCYXNlVHlwZXMuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBG
aWxlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cc3JjXGNvbXBpbGVyXEluaXRpYWxpemVHTFBvc2l0aW9uLmgiPgorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSW5pdGlhbGl6ZUdMUG9zaXRpb24u
aCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRl
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFBhcnNlQ29udGV4dC5o
Ij4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFBh
cnNlQ29udGV4dC5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAg
PC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcVmVy
c2lvbkdMU0wuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJh
bnNsYXRvclxWZXJzaW9uR0xTTC5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0
ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29t
cGlsZXJcVW5mb2xkU2hvcnRDaXJjdWl0QVNULmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcVW5mb2xkU2hvcnRDaXJjdWl0QVNULmgiPgogICAg
ICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KICAgPC9J
dGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+Ci0gICAgPEN1c3RvbUJ1aWxkIEluY2x1ZGU9Ii4uXHNy
Y1xjb21waWxlclxnbHNsYW5nLmwiPgorICAgIDxDdXN0b21CdWlsZCBJbmNsdWRlPSIuLlxzcmNc
Y29tcGlsZXJcdHJhbnNsYXRvclxnbHNsYW5nLmwiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmls
ZXM8L0ZpbHRlcj4KICAgICA8L0N1c3RvbUJ1aWxkPgotICAgIDxDdXN0b21CdWlsZCBJbmNsdWRl
PSIuLlxzcmNcY29tcGlsZXJcZ2xzbGFuZy55Ij4KKyAgICA8Q3VzdG9tQnVpbGQgSW5jbHVkZT0i
Li5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcZ2xzbGFuZy55Ij4KICAgICAgIDxGaWx0ZXI+U291
cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DdXN0b21CdWlsZD4KICAgPC9JdGVtR3JvdXA+CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCBjMTJkNjc5ZDVmZDc5ZjkxMWU3MTRmY2MyMzM4ZmFmNzU1ZjYwMGM2
Li44ZTEwNTc2NjFmMDZiNWFhM2M0MDAwYTFiOWEzOWY2NWFlMTI4NTE3IDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTIxLDYxICsyMSwxMjEgQEAKIC8qIEVuZCBQQlhBZ2dyZWdhdGVUYXJnZXQgc2VjdGlv
biAqLwogCiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLworCQkzMTAxMkUxMjE4Qjk3
QjlCMDAzOTA2MkYgLyogQmFzZVR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRBMDE4Qjk3QjlCMDAzOTA2MkYgLyogQmFzZVR5cGVzLmgg
Ki87IH07CisJCTMxMDEyRTEzMThCOTdCOUIwMDM5MDYyRiAvKiBCdWlsdEluRnVuY3Rpb25FbXVs
YXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
MTAxMkRBMTE4Qjk3QjlCMDAzOTA2MkYgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICov
OyB9OworCQkzMTAxMkUxNDE4Qjk3QjlCMDAzOTA2MkYgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEy
REEyMThCOTdCOUIwMDM5MDYyRiAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oICovOyB9Owor
CQkzMTAxMkUxNTE4Qjk3QjlCMDAzOTA2MkYgLyogQ29kZUdlbi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRBMzE4Qjk3QjlCMDAzOTA2MkYg
LyogQ29kZUdlbi5jcHAgKi87IH07CisJCTMxMDEyRTE2MThCOTdCOUIwMDM5MDYyRiAvKiBDb21t
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEy
REE0MThCOTdCOUIwMDM5MDYyRiAvKiBDb21tb24uaCAqLzsgfTsKKwkJMzEwMTJFMTcxOEI5N0I5
QjAwMzkwNjJGIC8qIENvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxMDEyREE1MThCOTdCOUIwMDM5MDYyRiAvKiBDb21waWxlci5jcHAg
Ki87IH07CisJCTMxMDEyRTFBMThCOTdCOUIwMDM5MDYyRiAvKiBDb25zdGFudFVuaW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRBODE4Qjk3
QjlCMDAzOTA2MkYgLyogQ29uc3RhbnRVbmlvbi5oICovOyB9OworCQkzMTAxMkUxQjE4Qjk3QjlC
MDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREFBMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRl
bmN5R3JhcGguY3BwICovOyB9OworCQkzMTAxMkUxQzE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5k
ZW5jeUdyYXBoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzMTAxMkRBQjE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoLmggKi87IH07CisJ
CTMxMDEyRTFEMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREFDMThC
OTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCAqLzsgfTsKKwkJMzEw
MTJFMUUxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREFEMThCOTdCOUIw
MDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi87IH07CisJCTMxMDEyRTFGMThC
OTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQUUxOEI5N0I5QjAwMzkwNjJG
IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi87IH07CisJCTMxMDEyRTIwMThCOTdCOUIw
MDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREFGMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBl
bmRlbmN5R3JhcGhPdXRwdXQuaCAqLzsgfTsKKwkJMzEwMTJFMjExOEI5N0I5QjAwMzkwNjJGIC8q
IERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREIwMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZS5jcHAgKi87IH07CisJCTMxMDEyRTIyMThCOTdCOUIwMDM5MDYyRiAvKiBE
ZXRlY3RDYWxsRGVwdGguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzEwMTJEQjExOEI5N0I5QjAwMzkwNjJGIC8qIERldGVjdENhbGxEZXB0aC5jcHAg
Ki87IH07CisJCTMxMDEyRTIzMThCOTdCOUIwMDM5MDYyRiAvKiBEZXRlY3RDYWxsRGVwdGguaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREIyMThC
OTdCOUIwMDM5MDYyRiAvKiBEZXRlY3RDYWxsRGVwdGguaCAqLzsgfTsKKwkJMzEwMTJFMjQxOEI5
N0I5QjAwMzkwNjJGIC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQjMxOEI5N0I5QjAwMzkwNjJGIC8q
IERldGVjdERpc2NvbnRpbnVpdHkuY3BwICovOyB9OworCQkzMTAxMkUyNTE4Qjk3QjlCMDAzOTA2
MkYgLyogRGV0ZWN0RGlzY29udGludWl0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQjQxOEI5N0I5QjAwMzkwNjJGIC8qIERldGVjdERpc2Nv
bnRpbnVpdHkuaCAqLzsgfTsKKwkJMzEwMTJFMjYxOEI5N0I5QjAwMzkwNjJGIC8qIERpYWdub3N0
aWNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMx
MDEyREI1MThCOTdCOUIwMDM5MDYyRiAvKiBEaWFnbm9zdGljcy5jcHAgKi87IH07CisJCTMxMDEy
RTI3MThCOTdCOUIwMDM5MDYyRiAvKiBEaWFnbm9zdGljcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQjYxOEI5N0I5QjAwMzkwNjJGIC8qIERp
YWdub3N0aWNzLmggKi87IH07CisJCTMxMDEyRTI4MThCOTdCOUIwMDM5MDYyRiAvKiBEaXJlY3Rp
dmVIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMxMDEyREI3MThCOTdCOUIwMDM5MDYyRiAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCAqLzsg
fTsKKwkJMzEwMTJFMjkxOEI5N0I5QjAwMzkwNjJGIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREI4MThCOTdC
OUIwMDM5MDYyRiAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi87IH07CisJCTMxMDEyRTJBMThCOTdC
OUIwMDM5MDYyRiAvKiBFeHRlbnNpb25CZWhhdmlvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQjkxOEI5N0I5QjAwMzkwNjJGIC8qIEV4dGVu
c2lvbkJlaGF2aW9yLmggKi87IH07CisJCTMxMDEyRTJCMThCOTdCOUIwMDM5MDYyRiAvKiBGb3JM
b29wVW5yb2xsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMxMDEyREJBMThCOTdCOUIwMDM5MDYyRiAvKiBGb3JMb29wVW5yb2xsLmNwcCAqLzsgfTsK
KwkJMzEwMTJFMkMxOEI5N0I5QjAwMzkwNjJGIC8qIEZvckxvb3BVbnJvbGwuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREJCMThCOTdCOUIwMDM5
MDYyRiAvKiBGb3JMb29wVW5yb2xsLmggKi87IH07CisJCTMxMDEyRTJEMThCOTdCOUIwMDM5MDYy
RiAvKiBnbHNsYW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMTAxMkRCRDE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZy5oICovOyB9OworCQkzMTAx
MkUzMDE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZ19sZXguY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQzAxOEI5N0I5QjAwMzkwNjJGIC8q
IGdsc2xhbmdfbGV4LmNwcCAqLzsgfTsKKwkJMzEwMTJFMzExOEI5N0I5QjAwMzkwNjJGIC8qIGds
c2xhbmdfdGFiLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMxMDEyREMxMThCOTdCOUIwMDM5MDYyRiAvKiBnbHNsYW5nX3RhYi5jcHAgKi87IH07CisJ
CTMxMDEyRTMyMThCOTdCOUIwMDM5MDYyRiAvKiBnbHNsYW5nX3RhYi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQzIxOEI5N0I5QjAwMzkwNjJG
IC8qIGdsc2xhbmdfdGFiLmggKi87IH07CisJCTMxMDEyRTMzMThCOTdCOUIwMDM5MDYyRiAvKiBI
YXNoTmFtZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDMxMDEyREMzMThCOTdCOUIwMDM5MDYyRiAvKiBIYXNoTmFtZXMuaCAqLzsgfTsKKwkJMzEwMTJF
MzQxOEI5N0I5QjAwMzkwNjJGIC8qIEluZm9TaW5rLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREM0MThCOTdCOUIwMDM5MDYyRiAvKiBJbmZv
U2luay5jcHAgKi87IH07CisJCTMxMDEyRTM1MThCOTdCOUIwMDM5MDYyRiAvKiBJbmZvU2luay5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQzUx
OEI5N0I5QjAwMzkwNjJGIC8qIEluZm9TaW5rLmggKi87IH07CisJCTMxMDEyRTM2MThCOTdCOUIw
MDM5MDYyRiAvKiBJbml0aWFsaXplLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxMDEyREM2MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplLmNw
cCAqLzsgfTsKKwkJMzEwMTJFMzcxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREM3MThCOTdC
OUIwMDM5MDYyRiAvKiBJbml0aWFsaXplLmggKi87IH07CisJCTMxMDEyRTM4MThCOTdCOUIwMDM5
MDYyRiAvKiBJbml0aWFsaXplRGxsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxMDEyREM4MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplRGxs
LmNwcCAqLzsgfTsKKwkJMzEwMTJFMzkxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVEbGwu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREM5
MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplRGxsLmggKi87IH07CisJCTMxMDEyRTNBMThC
OTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplR2xvYmFscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQ0ExOEI5N0I5QjAwMzkwNjJGIC8qIElu
aXRpYWxpemVHbG9iYWxzLmggKi87IH07CisJCTMxMDEyRTNCMThCOTdCOUIwMDM5MDYyRiAvKiBJ
bml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxMDEyRENCMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplUGFy
c2VDb250ZXh0LmNwcCAqLzsgfTsKKwkJMzEwMTJFM0MxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRp
YWxpemVQYXJzZUNvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDMxMDEyRENDMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplUGFyc2VDb250
ZXh0LmggKi87IH07CisJCTMxMDEyRTNEMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplVmFy
aWFibGVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDMxMDEyRENEMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplVmFyaWFibGVzLmNwcCAqLzsg
fTsKKwkJMzEwMTJFM0UxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVWYXJpYWJsZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRENFMThC
OTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplVmFyaWFibGVzLmggKi87IH07CisJCTMxMDEyRTNG
MThCOTdCOUIwMDM5MDYyRiAvKiBJbnRlcm1lZGlhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQ0YxOEI5N0I5QjAwMzkwNjJGIC8qIElu
dGVybWVkaWF0ZS5jcHAgKi87IH07CisJCTMxMDEyRTQwMThCOTdCOUIwMDM5MDYyRiAvKiBpbnRl
cm1lZGlhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDMxMDEyREQwMThCOTdCOUIwMDM5MDYyRiAvKiBpbnRlcm1lZGlhdGUuaCAqLzsgfTsKKwkJMzEw
MTJFNDExOEI5N0I5QjAwMzkwNjJGIC8qIGludGVybU91dC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkREMTE4Qjk3QjlCMDAzOTA2MkYgLyog
aW50ZXJtT3V0LmNwcCAqLzsgfTsKKwkJMzEwMTJFNDIxOEI5N0I5QjAwMzkwNjJGIC8qIEludGVy
bVRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMxMDEyREQyMThCOTdCOUIwMDM5MDYyRiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi87IH07
CisJCTMxMDEyRTQzMThCOTdCOUIwMDM5MDYyRiAvKiBsb2NhbGludGVybWVkaWF0ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERDMxOEI5N0I5
QjAwMzkwNjJGIC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggKi87IH07CisJCTMxMDEyRTQ0MThCOTdC
OUIwMDM5MDYyRiAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRENDE4Qjk3QjlCMDAzOTA2MkYgLyog
TWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwICovOyB9OworCQkzMTAxMkU0NTE4Qjk3QjlCMDAzOTA2
MkYgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREQ1MThCOTdCOUIwMDM5MDYyRiAvKiBNYXBMb25nVmFy
aWFibGVOYW1lcy5oICovOyB9OworCQkzMTAxMkU0NjE4Qjk3QjlCMDAzOTA2MkYgLyogTU1hcC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERDYx
OEI5N0I5QjAwMzkwNjJGIC8qIE1NYXAuaCAqLzsgfTsKKwkJMzEwMTJFNDcxOEI5N0I5QjAwMzkw
NjJGIC8qIE5vZGVTZWFyY2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDMxMDEyREQ3MThCOTdCOUIwMDM5MDYyRiAvKiBOb2RlU2VhcmNoLmggKi87IH07
CisJCTMxMDEyRTQ4MThCOTdCOUIwMDM5MDYyRiAvKiBvc2luY2x1ZGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREQ4MThCOTdCOUIwMDM5MDYy
RiAvKiBvc2luY2x1ZGUuaCAqLzsgfTsKKwkJMzEwMTJFNDkxOEI5N0I5QjAwMzkwNjJGIC8qIG9z
c291cmNlX3Bvc2l4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMxMDEyREQ5MThCOTdCOUIwMDM5MDYyRiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi87
IH07CisJCTMxMDEyRTRCMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRFU1NMLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRERCMThCOTdCOUIw
MDM5MDYyRiAvKiBPdXRwdXRFU1NMLmNwcCAqLzsgfTsKKwkJMzEwMTJFNEMxOEI5N0I5QjAwMzkw
NjJGIC8qIE91dHB1dEVTU0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDMxMDEyRERDMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRFU1NMLmggKi87IH07
CisJCTMxMDEyRTREMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRHTFNMLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREREMThCOTdCOUIwMDM5
MDYyRiAvKiBPdXRwdXRHTFNMLmNwcCAqLzsgfTsKKwkJMzEwMTJFNEUxOEI5N0I5QjAwMzkwNjJG
IC8qIE91dHB1dEdMU0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMxMDEyRERFMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRHTFNMLmggKi87IH07CisJ
CTMxMDEyRTRGMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRHTFNMQmFzZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRERjE4Qjk3QjlCMDAz
OTA2MkYgLyogT3V0cHV0R0xTTEJhc2UuY3BwICovOyB9OworCQkzMTAxMkU1MDE4Qjk3QjlCMDAz
OTA2MkYgLyogT3V0cHV0R0xTTEJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxMDEyREUwMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRHTFNMQmFz
ZS5oICovOyB9OworCQkzMTAxMkU1MTE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0SExTTC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRFMTE4
Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0SExTTC5jcHAgKi87IH07CisJCTMxMDEyRTUyMThCOTdC
OUIwMDM5MDYyRiAvKiBPdXRwdXRITFNMLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRFMjE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0SExTTC5o
ICovOyB9OworCQkzMTAxMkU1MzE4Qjk3QjlCMDAzOTA2MkYgLyogcGFyc2VDb25zdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRFMzE4Qjk3
QjlCMDAzOTA2MkYgLyogcGFyc2VDb25zdC5jcHAgKi87IH07CisJCTMxMDEyRTU0MThCOTdCOUIw
MDM5MDYyRiAvKiBQYXJzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERTQxOEI5N0I5QjAwMzkwNjJGIC8qIFBhcnNlQ29udGV4
dC5jcHAgKi87IH07CisJCTMxMDEyRTU1MThCOTdCOUIwMDM5MDYyRiAvKiBQYXJzZUNvbnRleHQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREU1
MThCOTdCOUIwMDM5MDYyRiAvKiBQYXJzZUNvbnRleHQuaCAqLzsgfTsKKwkJMzEwMTJFNTYxOEI5
N0I5QjAwMzkwNjJGIC8qIFBvb2xBbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRFNjE4Qjk3QjlCMDAzOTA2MkYgLyogUG9vbEFsbG9j
LmNwcCAqLzsgfTsKKwkJMzEwMTJFNTcxOEI5N0I5QjAwMzkwNjJGIC8qIFBvb2xBbGxvYy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERTcxOEI5
N0I5QjAwMzkwNjJGIC8qIFBvb2xBbGxvYy5oICovOyB9OworCQkzMTAxMkU1ODE4Qjk3QjlCMDAz
OTA2MkYgLyogUHJhZ21hLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzMTAxMkRFODE4Qjk3QjlCMDAzOTA2MkYgLyogUHJhZ21hLmggKi87IH07CisJCTMx
MDEyRTU5MThCOTdCOUIwMDM5MDYyRiAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRFOTE4Qjk3QjlCMDAzOTA2
MkYgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovOyB9OworCQkzMTAxMkU1QTE4Qjk3QjlCMDAzOTA2
MkYgLyogUXVhbGlmaWVyQWxpdmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDMxMDEyREVBMThCOTdCOUIwMDM5MDYyRiAvKiBRdWFsaWZpZXJBbGl2ZS5o
ICovOyB9OworCQkzMTAxMkU1QjE4Qjk3QjlCMDAzOTA2MkYgLyogUmVtb3ZlVHJlZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRFQjE4Qjk3
QjlCMDAzOTA2MkYgLyogUmVtb3ZlVHJlZS5jcHAgKi87IH07CisJCTMxMDEyRTVDMThCOTdCOUIw
MDM5MDYyRiAvKiBSZW1vdmVUcmVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMTAxMkRFQzE4Qjk3QjlCMDAzOTA2MkYgLyogUmVtb3ZlVHJlZS5oICov
OyB9OworCQkzMTAxMkU1RDE4Qjk3QjlCMDAzOTA2MkYgLyogUmVuYW1lRnVuY3Rpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREVEMThCOTdC
OUIwMDM5MDYyRiAvKiBSZW5hbWVGdW5jdGlvbi5oICovOyB9OworCQkzMTAxMkU1RTE4Qjk3QjlC
MDAzOTA2MkYgLyogUmV3cml0ZUVsc2VCbG9ja3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERUUxOEI5N0I5QjAwMzkwNjJGIC8qIFJld3Jp
dGVFbHNlQmxvY2tzLmNwcCAqLzsgfTsKKwkJMzEwMTJFNUYxOEI5N0I5QjAwMzkwNjJGIC8qIFJl
d3JpdGVFbHNlQmxvY2tzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzMTAxMkRFRjE4Qjk3QjlCMDAzOTA2MkYgLyogUmV3cml0ZUVsc2VCbG9ja3MuaCAq
LzsgfTsKKwkJMzEwMTJFNjAxOEI5N0I5QjAwMzkwNjJGIC8qIFNlYXJjaFN5bWJvbC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRGMDE4Qjk3
QjlCMDAzOTA2MkYgLyogU2VhcmNoU3ltYm9sLmNwcCAqLzsgfTsKKwkJMzEwMTJFNjExOEI5N0I5
QjAwMzkwNjJGIC8qIFNlYXJjaFN5bWJvbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERjExOEI5N0I5QjAwMzkwNjJGIC8qIFNlYXJjaFN5bWJv
bC5oICovOyB9OworCQkzMTAxMkU2MjE4Qjk3QjlCMDAzOTA2MkYgLyogU2hhZGVyTGFuZy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRGMjE4
Qjk3QjlCMDAzOTA2MkYgLyogU2hhZGVyTGFuZy5jcHAgKi87IH07CisJCTMxMDEyRTYzMThCOTdC
OUIwMDM5MDYyRiAvKiBTaEhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzEwMTJERjMxOEI5N0I5QjAwMzkwNjJGIC8qIFNoSGFuZGxlLmggKi87
IH07CisJCTMxMDEyRTY0MThCOTdCOUIwMDM5MDYyRiAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRGNDE4Qjk3QjlC
MDAzOTA2MkYgLyogU3ltYm9sVGFibGUuY3BwICovOyB9OworCQkzMTAxMkU2NTE4Qjk3QjlCMDAz
OTA2MkYgLyogU3ltYm9sVGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDMxMDEyREY1MThCOTdCOUIwMDM5MDYyRiAvKiBTeW1ib2xUYWJsZS5oICov
OyB9OworCQkzMTAxMkU2NjE4Qjk3QjlCMDAzOTA2MkYgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRl
clRpbWluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzMTAxMkRGNzE4Qjk3QjlCMDAzOTA2MkYgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWlu
Zy5jcHAgKi87IH07CisJCTMxMDEyRTY3MThCOTdCOUIwMDM5MDYyRiAvKiBSZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzMTAxMkRGODE4Qjk3QjlCMDAzOTA2MkYgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRl
clRpbWluZy5oICovOyB9OworCQkzMTAxMkU2ODE4Qjk3QjlCMDAzOTA2MkYgLyogUmVzdHJpY3RW
ZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzEwMTJERjkxOEI5N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0VmVydGV4U2hh
ZGVyVGltaW5nLmNwcCAqLzsgfTsKKwkJMzEwMTJFNjkxOEI5N0I5QjAwMzkwNjJGIC8qIFJlc3Ry
aWN0VmVydGV4U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMTAxMkRGQTE4Qjk3QjlCMDAzOTA2MkYgLyogUmVzdHJpY3RWZXJ0ZXhT
aGFkZXJUaW1pbmcuaCAqLzsgfTsKKwkJMzEwMTJFNkExOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5z
bGF0b3JFU1NMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMxMDEyREZCMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi87IH07
CisJCTMxMDEyRTZCMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9yRVNTTC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERkMxOEI5N0I5QjAw
MzkwNjJGIC8qIFRyYW5zbGF0b3JFU1NMLmggKi87IH07CisJCTMxMDEyRTZDMThCOTdCOUIwMDM5
MDYyRiAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRGRDE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckdM
U0wuY3BwICovOyB9OworCQkzMTAxMkU2RDE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckdM
U0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEy
REZFMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9yR0xTTC5oICovOyB9OworCQkzMTAxMkU2
RTE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckhMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERkYxOEI5N0I5QjAwMzkwNjJGIC8q
IFRyYW5zbGF0b3JITFNMLmNwcCAqLzsgfTsKKwkJMzEwMTJFNkYxOEI5N0I5QjAwMzkwNjJGIC8q
IFRyYW5zbGF0b3JITFNMLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzMTAxMkUwMDE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckhMU0wuaCAqLzsg
fTsKKwkJMzEwMTJFNzAxOEI5N0I5QjAwMzkwNjJGIC8qIFR5cGVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwMTE4Qjk3QjlCMDAzOTA2MkYg
LyogVHlwZXMuaCAqLzsgfTsKKwkJMzEwMTJFNzExOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNo
b3J0Q2lyY3VpdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMTAxMkUwMjE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCAq
LzsgfTsKKwkJMzEwMTJFNzIxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJFMDMx
OEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovOyB9OworCQkzMTAxMkU3
MzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTA0MThCOTdCOUIwMDM5
MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwICovOyB9OworCQkzMTAxMkU3NDE4Qjk3
QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwNTE4Qjk3QjlCMDAzOTA2MkYgLyog
VW5mb2xkU2hvcnRDaXJjdWl0QVNULmggKi87IH07CisJCTMxMDEyRTc1MThCOTdCOUIwMDM5MDYy
RiAvKiBVbmlmb3JtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMxMDEyRTA2MThCOTdCOUIwMDM5MDYyRiAvKiBVbmlmb3JtLmNwcCAqLzsgfTsKKwkJ
MzEwMTJFNzYxOEI5N0I5QjAwMzkwNjJGIC8qIFVuaWZvcm0uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTA3MThCOTdCOUIwMDM5MDYyRiAvKiBV
bmlmb3JtLmggKi87IH07CisJCTMxMDEyRTc3MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTA4MThC
OTdCOUIwMDM5MDYyRiAvKiB1dGlsLmNwcCAqLzsgfTsKKwkJMzEwMTJFNzgxOEI5N0I5QjAwMzkw
NjJGIC8qIHV0aWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMxMDEyRTA5MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmggKi87IH07CisJCTMxMDEyRTc5
MThCOTdCOUIwMDM5MDYyRiAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTBBMThCOTdCOUIwMDM5MDYy
RiAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLzsgfTsKKwkJMzEwMTJFN0ExOEI5N0I5QjAw
MzkwNjJGIC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTBCMThCOTdCOUIwMDM5MDYyRiAvKiBWYWxpZGF0
ZUxpbWl0YXRpb25zLmggKi87IH07CisJCTMxMDEyRTdCMThCOTdCOUIwMDM5MDYyRiAvKiBWYXJp
YWJsZUluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzEwMTJFMEMxOEI5N0I5QjAwMzkwNjJGIC8qIFZhcmlhYmxlSW5mby5jcHAgKi87IH07CisJ
CTMxMDEyRTdDMThCOTdCOUIwMDM5MDYyRiAvKiBWYXJpYWJsZUluZm8uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTBEMThCOTdCOUIwMDM5MDYy
RiAvKiBWYXJpYWJsZUluZm8uaCAqLzsgfTsKKwkJMzEwMTJFN0QxOEI5N0I5QjAwMzkwNjJGIC8q
IFZhcmlhYmxlUGFja2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDMxMDEyRTBFMThCOTdCOUIwMDM5MDYyRiAvKiBWYXJpYWJsZVBhY2tlci5jcHAg
Ki87IH07CisJCTMxMDEyRTdFMThCOTdCOUIwMDM5MDYyRiAvKiBWYXJpYWJsZVBhY2tlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJFMEYxOEI5
N0I5QjAwMzkwNjJGIC8qIFZhcmlhYmxlUGFja2VyLmggKi87IH07CisJCTMxMDEyRTdGMThCOTdC
OUIwMDM5MDYyRiAvKiBWZXJzaW9uR0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUxMDE4Qjk3QjlCMDAzOTA2MkYgLyogVmVyc2lvbkdM
U0wuY3BwICovOyB9OworCQkzMTAxMkU4MDE4Qjk3QjlCMDAzOTA2MkYgLyogVmVyc2lvbkdMU0wu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTEx
MThCOTdCOUIwMDM5MDYyRiAvKiBWZXJzaW9uR0xTTC5oICovOyB9OworCQkzMTAxMkU4MzE4Qjk3
Qzg2MDAzOTA2MkYgLyogY29tcGlsZXJkZWJ1Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkU4MTE4Qjk3Qzg2MDAzOTA2MkYgLyogY29tcGls
ZXJkZWJ1Zy5jcHAgKi87IH07CisJCTMxMDEyRTg0MThCOTdDODYwMDM5MDYyRiAvKiBjb21waWxl
cmRlYnVnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
MTAxMkU4MjE4Qjk3Qzg2MDAzOTA2MkYgLyogY29tcGlsZXJkZWJ1Zy5oICovOyB9OwogCQkzMTJC
REIwQzE1RkVDQUM5MDA5N0VCQzcgLyogQU5HTEUucGxpc3QgaW4gQ29weUZpbGVzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMkJEQjA5MTVGRUM5MUUwMDk3RUJDNyAvKiBB
TkdMRS5wbGlzdCAqLzsgfTsKIAkJMzEyQkRCMEUxNUZFQ0FFNTAwOTdFQkM3IC8qIEFOR0xFLnR4
dCBpbiBDb3B5RmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEyQkRC
MEExNUZFQ0EzQTAwOTdFQkM3IC8qIEFOR0xFLnR4dCAqLzsgfTsKIAkJNDk5NTFDMDMxNEI3QUFC
MzAwNjBFOTZFIC8qIGxlbmd0aF9saW1pdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ5OTUxQzAyMTRCN0FBQjMwMDYwRTk2RSAvKiBsZW5ndGhfbGlt
aXRzLmggKi87IH07Ci0JCTQ5OTUxQzA5MTRCN0FBRDgwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0OTk1MUMwNTE0QjdBQUQ3MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3Iu
Y3BwICovOyB9OwotCQk0OTk1MUMwQTE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ5OTUxQzA2MTRCN0FBRDgwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oICov
OyB9OwotCQk1Q0IxM0ZENDE3OURCM0ZEMDAxRjg1MUQgLyogRGV0ZWN0Q2FsbERlcHRoLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQjEzRkQyMTc5
REIzRkQwMDFGODUxRCAvKiBEZXRlY3RDYWxsRGVwdGguY3BwICovOyB9OwotCQk1Q0IxM0ZENTE3
OURCM0ZEMDAxRjg1MUQgLyogRGV0ZWN0Q2FsbERlcHRoLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0IxM0ZEMzE3OURCM0ZEMDAxRjg1MUQgLyogRGV0
ZWN0Q2FsbERlcHRoLmggKi87IH07Ci0JCTcyMzA5QTREMTgzQzI1OTMwMDM3MEI5MyAvKiBDb2Rl
R2VuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcy
NjUwOTMwMTgzQUEyMTMwMEQyOEI0OCAvKiBDb2RlR2VuLmNwcCAqLzsgfTsKLQkJNzIzMDlBNEUx
ODNDMjU5QzAwMzcwQjkzIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjY1MDkzNjE4M0FBM0M2MDBEMjhC
NDggLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcCAqLzsgfTsKLQkJNzIzMDlBNEYxODNDMjU5
RTAwMzcwQjkzIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI2NTA5MzcxODNBQTNDNjAwRDI4QjQ4IC8qIFVu
Zm9sZFNob3J0Q2lyY3VpdEFTVC5oICovOyB9OwotCQk3MjMwOUE1MDE4M0MyNUExMDAzNzBCOTMg
LyogUGFyc2VDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcyNjUwOTM0MTgzQUEzQjIwMEQyOEI0OCAvKiBQYXJzZUNvbnRleHQuY3BwICov
OyB9OwotCQk3MjMwOUE1MTE4M0MyNUE1MDAzNzBCOTMgLyogUGFyc2VDb250ZXh0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjY1MDkzNTE4M0FBM0Iy
MDBEMjhCNDggLyogUGFyc2VDb250ZXh0LmggKi87IH07Ci0JCTcyMzA5QTUyMTgzQzI1QTcwMDM3
MEI5MyAvKiBOb2RlU2VhcmNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MjY1MDkzMzE4M0FBMjg5MDBEMjhCNDggLyogTm9kZVNlYXJjaC5oICovOyB9
OwotCQk3MjMwOUE1MzE4M0MyNUFBMDAzNzBCOTMgLyogSW5pdGlhbGl6ZUdMUG9zaXRpb24uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI2NTA5MzEx
ODNBQTI0NjAwRDI4QjQ4IC8qIEluaXRpYWxpemVHTFBvc2l0aW9uLmNwcCAqLzsgfTsKLQkJNzIz
MDlBNTQxODNDMjVBRDAwMzcwQjkzIC8qIEluaXRpYWxpemVHTFBvc2l0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjY1MDkzMjE4M0FBMjQ2MDBE
MjhCNDggLyogSW5pdGlhbGl6ZUdMUG9zaXRpb24uaCAqLzsgfTsKIAkJNzIzMDlBNTYxODNDMjdE
RTAwMzcwQjkzIC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3MjMwOUE1NTE4M0MyN0RCMDAzNzBCOTMgLyogVG9rZW5pemVyLmNw
cCAqLzsgfTsKIAkJNzIzMDlBNTgxODNDMjdGMzAwMzcwQjkzIC8qIEV4cHJlc3Npb25QYXJzZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzMDlB
NTcxODNDMjdGMTAwMzcwQjkzIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovOyB9OwotCQk3MjMw
OUE1QzE4M0MyODUzMDAzNzBCOTMgLyogZ2xzbGFuZ19sZXguY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzMDlBNTkxODNDMjg0RTAwMzcwQjkzIC8q
IGdsc2xhbmdfbGV4LmNwcCAqLzsgfTsKLQkJNzIzMDlBNUQxODNDMjg1MzAwMzcwQjkzIC8qIGds
c2xhbmdfdGFiLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDcyMzA5QTVBMTgzQzI4NEUwMDM3MEI5MyAvKiBnbHNsYW5nX3RhYi5jcHAgKi87IH07Ci0J
CTcyMzA5QTVFMTgzQzI4NTMwMDM3MEI5MyAvKiBnbHNsYW5nX3RhYi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzMDlBNUIxODNDMjg0RTAwMzcwQjkz
IC8qIGdsc2xhbmdfdGFiLmggKi87IH07Ci0JCTcyMzA5QTYxMTgzQzJBNzQwMDM3MEI5MyAvKiBU
cmFuc2xhdG9ySExTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3MjMwOUE1RjE4M0MyQTY0MDAzNzBCOTMgLyogVHJhbnNsYXRvckhMU0wuY3BwICov
OyB9OwotCQk3MjMwOUE2MjE4M0MyQTc0MDAzNzBCOTMgLyogVHJhbnNsYXRvckhMU0wuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzA5QTYwMTgzQzJB
NjQwMDM3MEI5MyAvKiBUcmFuc2xhdG9ySExTTC5oICovOyB9OwotCQk3MjMwOUE2NTE4M0MyQUU1
MDAzNzBCOTMgLyogT3V0cHV0SExTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3MjMwOUE2MzE4M0MyQUU1MDAzNzBCOTMgLyogT3V0cHV0SExTTC5j
cHAgKi87IH07Ci0JCTcyMzA5QTY2MTgzQzJBRTUwMDM3MEI5MyAvKiBPdXRwdXRITFNMLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjMwOUE2NDE4M0My
QUU1MDAzNzBCOTMgLyogT3V0cHV0SExTTC5oICovOyB9OwotCQk3MjMwOUE2RDE4M0MyQkU4MDAz
NzBCOTMgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjMwOUE2NzE4M0MyQkU4MDAzNzBCOTMgLyogRGV0ZWN0
RGlzY29udGludWl0eS5jcHAgKi87IH07Ci0JCTcyMzA5QTZFMTgzQzJCRTgwMDM3MEI5MyAvKiBE
ZXRlY3REaXNjb250aW51aXR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MjMwOUE2ODE4M0MyQkU4MDAzNzBCOTMgLyogRGV0ZWN0RGlzY29udGludWl0
eS5oICovOyB9OwotCQk3MjMwOUE2RjE4M0MyQkU4MDAzNzBCOTMgLyogVW5mb2xkU2hvcnRDaXJj
dWl0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcy
MzA5QTY5MTgzQzJCRTgwMDM3MEI5MyAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwICovOyB9Owot
CQk3MjMwOUE3MDE4M0MyQkU4MDAzNzBCOTMgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjMwOUE2QTE4M0MyQkU4
MDAzNzBCOTMgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmggKi87IH07Ci0JCTcyMzA5QTcxMTgzQzJC
RTgwMDM3MEI5MyAvKiBVbmlmb3JtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyMzA5QTZCMTgzQzJCRTgwMDM3MEI5MyAvKiBVbmlmb3JtLmNwcCAq
LzsgfTsKLQkJNzIzMDlBNzIxODNDMkJFODAwMzcwQjkzIC8qIFVuaWZvcm0uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzA5QTZDMTgzQzJCRTgwMDM3
MEI5MyAvKiBVbmlmb3JtLmggKi87IH07Ci0JCTkwRDlCMTAyMTJFMTFEQ0IwMDJENDI1NSAvKiBD
b21waWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5MEQ5QjBGOTEyRTExRENCMDAyRDQyNTUgLyogQ29tcGlsZXIuY3BwICovOyB9OwotCQk5MEQ5
QjEwMzEyRTExRENCMDAyRDQyNTUgLyogRXh0ZW5zaW9uQmVoYXZpb3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwRDlCMEZBMTJFMTFEQ0IwMDJENDI1
NSAvKiBFeHRlbnNpb25CZWhhdmlvci5oICovOyB9OwotCQk5MEQ5QjEwNzEyRTExRENCMDAyRDQy
NTUgLyogZ2xzbGFuZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTBEOUIwRkUxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmcuaCAqLzsgfTsKLQkJOTBE
OUIxMDkxMkUxMURDQjAwMkQ0MjU1IC8qIFNlYXJjaFN5bWJvbC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MEQ5QjEwMDEyRTExRENCMDAyRDQyNTUg
LyogU2VhcmNoU3ltYm9sLmNwcCAqLzsgfTsKLQkJOTBEOUIxMEExMkUxMURDQjAwMkQ0MjU1IC8q
IFNlYXJjaFN5bWJvbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTBEOUIxMDExMkUxMURDQjAwMkQ0MjU1IC8qIFNlYXJjaFN5bWJvbC5oICovOyB9Owot
CQk5MEQ5QjExMzEyRTExREQ2MDAyRDQyNTUgLyogdXRpbC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MEQ5QjEwQjEyRTExREQ2MDAyRDQyNTUgLyog
dXRpbC5jcHAgKi87IH07Ci0JCTkwRDlCMTE0MTJFMTFERDYwMDJENDI1NSAvKiB1dGlsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MEQ5QjEwQzEyRTEx
REQ2MDAyRDQyNTUgLyogdXRpbC5oICovOyB9OwotCQk5MEQ5QjExNTEyRTExREQ2MDAyRDQyNTUg
LyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5MEQ5QjEwRDEyRTExREQ2MDAyRDQyNTUgLyogVmFsaWRhdGVMaW1p
dGF0aW9ucy5jcHAgKi87IH07Ci0JCTkwRDlCMTE2MTJFMTFERDYwMDJENDI1NSAvKiBWYWxpZGF0
ZUxpbWl0YXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5MEQ5QjEwRTEyRTExREQ2MDAyRDQyNTUgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5oICov
OyB9OwotCQk5MEQ5QjExNzEyRTExREQ2MDAyRDQyNTUgLyogVmFyaWFibGVJbmZvLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwRDlCMTBGMTJFMTFE
RDYwMDJENDI1NSAvKiBWYXJpYWJsZUluZm8uY3BwICovOyB9OwotCQk5MEQ5QjExODEyRTExREQ2
MDAyRDQyNTUgLyogVmFyaWFibGVJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5MEQ5QjExMDEyRTExREQ2MDAyRDQyNTUgLyogVmFyaWFibGVJbmZv
LmggKi87IH07Ci0JCTkwRDlCMTE5MTJFMTFERDYwMDJENDI1NSAvKiBWZXJzaW9uR0xTTC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MEQ5QjExMTEy
RTExREQ2MDAyRDQyNTUgLyogVmVyc2lvbkdMU0wuY3BwICovOyB9OwotCQk5MEQ5QjExQTEyRTEx
REQ2MDAyRDQyNTUgLyogVmVyc2lvbkdMU0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkwRDlCMTEyMTJFMTFERDYwMDJENDI1NSAvKiBWZXJzaW9uR0xT
TC5oICovOyB9OwogCQlBMDhDM0NEQzE2RDZDQjYxMDAzRjBCODMgLyogQXJyYXlCb3VuZHNDbGFt
cGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEw
OEMzQ0RBMTZENkNCNjEwMDNGMEI4MyAvKiBBcnJheUJvdW5kc0NsYW1wZXIuY3BwICovOyB9Owog
CQlBMDhDM0NERDE2RDZDQjYxMDAzRjBCODMgLyogQXJyYXlCb3VuZHNDbGFtcGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMDhDM0NEQjE2RDZDQjYx
MDAzRjBCODMgLyogQXJyYXlCb3VuZHNDbGFtcGVyLmggKi87IH07Ci0JCUEwQUFCRTJDMTNBRkU4
MTAwMEYyRUJEMSAvKiBGb3JMb29wVW5yb2xsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFCRTJBMTNBRkU4MTAwMEYyRUJEMSAvKiBGb3JMb29w
VW5yb2xsLmNwcCAqLzsgfTsKLQkJQTBBQUJFMkQxM0FGRTgxMDAwRjJFQkQxIC8qIEZvckxvb3BV
bnJvbGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEw
QUFCRTJCMTNBRkU4MTAwMEYyRUJEMSAvKiBGb3JMb29wVW5yb2xsLmggKi87IH07Ci0JCUEwQUFC
RTMwMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkUyRTEzQUZFODMwMDBG
MkVCRDEgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwICovOyB9OwotCQlBMEFBQkUzMTEzQUZF
ODMwMDBGMkVCRDEgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFCRTJGMTNBRkU4MzAwMEYyRUJEMSAvKiBN
YXBMb25nVmFyaWFibGVOYW1lcy5oICovOyB9OwotCQlBMEFBQkUzNDEzQUZFODQ3MDBGMkVCRDEg
LyogT3V0cHV0R0xTTEJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTBBQUJFMzIxM0FGRTg0NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xCYXNlLmNw
cCAqLzsgfTsKLQkJQTBBQUJFMzUxM0FGRTg0NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xCYXNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkUzMzEz
QUZFODQ3MDBGMkVCRDEgLyogT3V0cHV0R0xTTEJhc2UuaCAqLzsgfTsKLQkJQTBBQUJFNDQxM0FG
RTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTBBQUJFNDIxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVT
U0wuY3BwICovOyB9OwotCQlBMEFBQkU0NTEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTBBQUJFNDMx
M0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuaCAqLzsgfTsKLQkJQTBBQUJFNDgxM0FGRTk2
MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFCRTQ2MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xh
dG9yRVNTTC5jcHAgKi87IH07Ci0JCUEwQUFCRTQ5MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xh
dG9yRVNTTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTBBQUJFNDcxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmggKi87IH07CiAJCUEy
NjRGOEFDMTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9zdGljc0Jhc2UuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4OTMxNjk3NERFRDAwNkZB
QTVBIC8qIERpYWdub3N0aWNzQmFzZS5jcHAgKi87IH07CiAJCUEyNjRGOEFEMTY5NzRERUQwMDZG
QUE1QSAvKiBEaWFnbm9zdGljc0Jhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyNjRGODk0MTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9zdGljc0Jh
c2UuaCAqLzsgfTsKIAkJQTI2NEY4QUUxNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZUhhbmRs
ZXJCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyNjRGODk1MTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAgKi87
IH07CkBAIC05OSw0NCArMTU5LDcgQEAKIAkJQTI2NEY4QzExNjk3NERFRDAwNkZBQTVBIC8qIFRv
a2VuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
NjRGOEE4MTY5NzRERUQwMDZGQUE1QSAvKiBUb2tlbi5jcHAgKi87IH07CiAJCUEyNjRGOEMyMTY5
NzRERUQwMDZGQUE1QSAvKiBUb2tlbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTI2NEY4QTkxNjk3NERFRDAwNkZBQTVBIC8qIFRva2VuLmggKi87IH07
CiAJCUEyNjRGOEM0MTY5NzRERUQwMDZGQUE1QSAvKiBUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGOEFCMTY5NzRERUQwMDZGQUE1
QSAvKiBUb2tlbml6ZXIuaCAqLzsgfTsKLQkJQTI2NEY4QzgxNjk3NEUyQTAwNkZBQTVBIC8qIEhh
c2hOYW1lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTI2NEY4QzUxNjk3NEUyQTAwNkZBQTVBIC8qIEhhc2hOYW1lcy5oICovOyB9OwotCQlBMjY0RjhD
OTE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4QzYxNjk3NEUyQTAwNkZBQTVBIC8q
IFZhcmlhYmxlUGFja2VyLmNwcCAqLzsgfTsKLQkJQTI2NEY4Q0ExNjk3NEUyQTAwNkZBQTVBIC8q
IFZhcmlhYmxlUGFja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBMjY0RjhDNzE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuaCAqLzsg
fTsKIAkJQTI2NEY4Q0QxNjk3NjJBQTAwNkZBQTVBIC8qIGtocnBsYXRmb3JtLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhDQzE2OTc2MkFBMDA2
RkFBNUEgLyoga2hycGxhdGZvcm0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJs
aWMsICk7IH07IH07Ci0JCUEyNjU2N0JCMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdC
MDE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwICovOyB9OwotCQlBMjY1NjdCQzE1
OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0IxMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9z
dGljcy5oICovOyB9OwotCQlBMjY1NjdCRDE1OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFu
ZGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MjY1NjdCMjE1OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07Ci0J
CUEyNjU2N0JFMTU5QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCMzE1OUMyMUIxMDAz
OTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oICovOyB9OwotCQlBMjY1NjdCRjE1OUMyMUIxMDAz
OTg1MzkgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCNDE1OUMyMUIxMDAzOTg1MzkgLyogSW5p
dGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgKi87IH07Ci0JCUEyNjU2N0MwMTU5QzIxQjEwMDM5ODUz
OSAvKiBQcmFnbWEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEEyNjU2N0I1MTU5QzIxQjEwMDM5ODUzOSAvKiBQcmFnbWEuaCAqLzsgfTsKLQkJQTI2NTY3
QzExNTlDMjFCMTAwMzk4NTM5IC8qIFJlbmFtZUZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCNjE1OUMyMUIxMDAzOTg1MzkgLyog
UmVuYW1lRnVuY3Rpb24uaCAqLzsgfTsKLQkJQTI2NTY4MzkxNTlDMjNFMTAwMzk4NTM5IC8qIERl
cGVuZGVuY3lHcmFwaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBMjY1NjgyRDE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAq
LzsgfTsKLQkJQTI2NTY4M0ExNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MkUxNTlD
MjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5oICovOyB9OwotCQlBMjY1NjgzQjE1OUMy
M0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgyRjE1OUMyM0UxMDAzOTg1Mzkg
LyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgKi87IH07Ci0JCUEyNjU2ODNDMTU5QzIzRTEw
MDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzMDE1OUMyM0UxMDAzOTg1MzkgLyogRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5oICovOyB9OwotCQlBMjY1NjgzRDE1OUMyM0UxMDAzOTg1Mzkg
LyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODMxMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5
R3JhcGhPdXRwdXQuY3BwICovOyB9OwotCQlBMjY1NjgzRTE1OUMyM0UxMDAzOTg1MzkgLyogRGVw
ZW5kZW5jeUdyYXBoT3V0cHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMjY1NjgzMjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoT3V0
cHV0LmggKi87IH07Ci0JCUEyNjU2ODNGMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3Jh
cGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjY1NjgzMzE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2Uu
Y3BwICovOyB9OwotCQlBMjY1Njg0MDE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBMjY1NjgzNTE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRl
clRpbWluZy5jcHAgKi87IH07Ci0JCUEyNjU2ODQxMTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmlj
dEZyYWdtZW50U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMjY1NjgzNjE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5oICovOyB9OwotCQlBMjY1Njg0MjE1OUMyM0UxMDAzOTg1MzkgLyogUmVz
dHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzcxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKLQkJQTI2NTY4NDMxNTlDMjNFMTAwMzk4NTM5IC8q
IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzODE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RW
ZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLzsgfTsKLQkJRkIzOUQyNzUxMjAwRjM1QTAwMDg4RTY5IC8q
IGRlYnVnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZCMzlEMjI2MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5jcHAgKi87IH07Ci0JCUZCMzlEMjc5
MTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyQTEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1Np
bmsuY3BwICovOyB9OwotCQlGQjM5RDI3QjEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIy
QzEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZS5jcHAgKi87IH07Ci0JCUZCMzlEMjdEMTIw
MEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjJFMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0
aWFsaXplRGxsLmNwcCAqLzsgfTsKLQkJRkIzOUQyODExMjAwRjM1QTAwMDg4RTY5IC8qIEludGVy
bWVkaWF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGQjM5RDIzMjEyMDBGMzVBMDAwODhFNjkgLyogSW50ZXJtZWRpYXRlLmNwcCAqLzsgfTsKLQkJ
RkIzOUQyODMxMjAwRjM1QTAwMDg4RTY5IC8qIGludGVybU91dC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIzNDEyMDBGMzVBMDAwODhFNjkg
LyogaW50ZXJtT3V0LmNwcCAqLzsgfTsKLQkJRkIzOUQyODQxMjAwRjM1QTAwMDg4RTY5IC8qIElu
dGVybVRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZCMzlEMjM1MTIwMEYzNUEwMDA4OEU2OSAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi87
IH07Ci0JCUZCMzlEMjg4MTIwMEYzNUEwMDA4OEU2OSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIzOTEyMDBG
MzVBMDAwODhFNjkgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovOyB9OwotCQlGQjM5RDI4QTEyMDBG
MzVBMDAwODhFNjkgLyogT3V0cHV0R0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIzQjEyMDBGMzVBMDAwODhFNjkgLyogT3V0cHV0R0xT
TC5jcHAgKi87IH07Ci0JCUZCMzlEMjhFMTIwMEYzNUEwMDA4OEU2OSAvKiBwYXJzZUNvbnN0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjNG
MTIwMEYzNUEwMDA4OEU2OSAvKiBwYXJzZUNvbnN0LmNwcCAqLzsgfTsKLQkJRkIzOUQyOTExMjAw
RjM1QTAwMDg4RTY5IC8qIFBvb2xBbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI0MjEyMDBGMzVBMDAwODhFNjkgLyogUG9vbEFsbG9j
LmNwcCAqLzsgfTsKLQkJRkIzOUQyQTQxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlE
MjU2MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi87IH07Ci0JCUZCMzlE
MkE2MTIwMEYzNUEwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjU4MTIwMEYzNUEwMDA4OEU2OSAvKiBS
ZW1vdmVUcmVlLmNwcCAqLzsgfTsKLQkJRkIzOUQyQTgxMjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRl
ckxhbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkIzOUQyNUExMjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcuY3BwICovOyB9OwotCQlGQjM5
RDJBQTEyMDBGMzVBMDAwODhFNjkgLyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNUMxMjAwRjM1QTAwMDg4RTY5IC8q
IFN5bWJvbFRhYmxlLmNwcCAqLzsgfTsKLQkJRkIzOUQyQUMxMjAwRjM1QTAwMDg4RTY5IC8qIFRy
YW5zbGF0b3JHTFNMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZCMzlEMjY4MTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi87
IH07CiAJCUZCMzlENzZFMTIwMTEwRkMwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDJCRjEyMDBGM0U2MDAw
ODhFNjkgLyogU2hhZGVyTGFuZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1Ymxp
YywgKTsgfTsgfTsKIC8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCkBAIC0xNzQsNjUg
KzE5NywxMjUgQEAKIC8qIEVuZCBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KIAog
LyogQmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCisJCTMxMDEyREEwMThCOTdCOUIw
MDM5MDYyRiAvKiBCYXNlVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QmFzZVR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREExMThCOTdC
OUIwMDM5MDYyRiAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREEyMThCOTdCOUIwMDM5MDYyRiAvKiBCdWls
dEluRnVuY3Rpb25FbXVsYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBC
dWlsdEluRnVuY3Rpb25FbXVsYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkz
MTAxMkRBMzE4Qjk3QjlCMDAzOTA2MkYgLyogQ29kZUdlbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDb2RlR2VuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMzEwMTJEQTQxOEI5N0I5QjAwMzkwNjJGIC8qIENvbW1vbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMzEwMTJEQTUxOEI5N0I5QjAwMzkwNjJGIC8qIENvbXBpbGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBpbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMzEwMTJEQTgxOEI5N0I5QjAwMzkwNjJGIC8qIENvbnN0YW50VW5pb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RhbnRVbmlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRBQTE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5k
ZW5jeUdyYXBoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVu
ZGVuY3lHcmFwaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREFCMThC
OTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTMxMDEyREFDMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRBRDE4Qjk3QjlC
MDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTMxMDEyREFFMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhP
dXRwdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5j
eUdyYXBoT3V0cHV0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQUYx
OEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQjAxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lH
cmFwaFRyYXZlcnNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERl
cGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MzEwMTJEQjExOEI5N0I5QjAwMzkwNjJGIC8qIERldGVjdENhbGxEZXB0aC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXRlY3RDYWxsRGVwdGguY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRCMjE4Qjk3QjlCMDAzOTA2MkYgLyogRGV0ZWN0
Q2FsbERlcHRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdENhbGxE
ZXB0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRCMzE4Qjk3QjlCMDAz
OTA2MkYgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEZXRlY3REaXNjb250aW51aXR5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMzEwMTJEQjQxOEI5N0I5QjAwMzkwNjJGIC8qIERldGVjdERpc2NvbnRpbnVp
dHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGV0ZWN0RGlzY29udGludWl0
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRCNTE4Qjk3QjlCMDAzOTA2
MkYgLyogRGlhZ25vc3RpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRGlhZ25vc3RpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRC
NjE4Qjk3QjlCMDAzOTA2MkYgLyogRGlhZ25vc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRGlhZ25vc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MzEwMTJEQjcxOEI5N0I5QjAwMzkwNjJGIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREI4MThCOTdCOUIwMDM5MDYyRiAvKiBEaXJl
Y3RpdmVIYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2
ZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQjkxOEI5N0I5
QjAwMzkwNjJGIC8qIEV4dGVuc2lvbkJlaGF2aW9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEV4dGVuc2lvbkJlaGF2aW9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTMxMDEyREJBMThCOTdCOUIwMDM5MDYyRiAvKiBGb3JMb29wVW5yb2xsLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvckxvb3BVbnJvbGwuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRCQjE4Qjk3QjlCMDAzOTA2MkYgLyogRm9yTG9v
cFVucm9sbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb3JMb29wVW5yb2xs
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREJEMThCOTdCOUIwMDM5MDYy
RiAvKiBnbHNsYW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGdsc2xhbmcu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQzAxOEI5N0I5QjAwMzkwNjJG
IC8qIGdsc2xhbmdfbGV4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IGdsc2xhbmdfbGV4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQzEx
OEI5N0I5QjAwMzkwNjJGIC8qIGdsc2xhbmdfdGFiLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IGdsc2xhbmdfdGFiLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMzEwMTJEQzIxOEI5N0I5QjAwMzkwNjJGIC8qIGdsc2xhbmdfdGFiLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGdsc2xhbmdfdGFiLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTMxMDEyREMzMThCOTdCOUIwMDM5MDYyRiAvKiBIYXNoTmFtZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaE5hbWVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTMxMDEyREM0MThCOTdCOUIwMDM5MDYyRiAvKiBJbmZvU2luay5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZvU2luay5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREM1MThCOTdCOUIwMDM5MDYyRiAvKiBJbmZv
U2luay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmZvU2luay5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRDNjE4Qjk3QjlCMDAzOTA2MkYgLyogSW5p
dGlhbGl6ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbml0aWFs
aXplLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQzcxOEI5N0I5QjAw
MzkwNjJGIC8qIEluaXRpYWxpemUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW5pdGlhbGl6ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRDODE4Qjk3
QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBJbml0aWFsaXplRGxsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMzEwMTJEQzkxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVEbGwuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZURsbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkzMTAxMkRDQTE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZUds
b2JhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZUdsb2Jh
bHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQ0IxOEI5N0I5QjAwMzkw
NjJGIC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTMxMDEyRENDMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplUGFy
c2VDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRpYWxpemVQ
YXJzZUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQ0QxOEI5
N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVWYXJpYWJsZXMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZVZhcmlhYmxlcy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTMxMDEyRENFMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXpl
VmFyaWFibGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRpYWxpemVW
YXJpYWJsZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQ0YxOEI5N0I5
QjAwMzkwNjJGIC8qIEludGVybWVkaWF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJbnRlcm1lZGlhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkzMTAxMkREMDE4Qjk3QjlCMDAzOTA2MkYgLyogaW50ZXJtZWRpYXRlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGludGVybWVkaWF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkzMTAxMkREMTE4Qjk3QjlCMDAzOTA2MkYgLyogaW50ZXJtT3V0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGludGVybU91dC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREQyMThCOTdCOUIwMDM5MDYyRiAvKiBJbnRlcm1U
cmF2ZXJzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRlcm1U
cmF2ZXJzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREQzMThCOTdC
OUIwMDM5MDYyRiAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBsb2NhbGludGVybWVkaWF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkzMTAxMkRENDE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFwTG9uZ1ZhcmlhYmxlTmFt
ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRENTE4Qjk3QjlCMDAz
OTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMzEwMTJERDYxOEI5N0I5QjAwMzkwNjJGIC8qIE1NYXAuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkz
MTAxMkRENzE4Qjk3QjlCMDAzOTA2MkYgLyogTm9kZVNlYXJjaC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBOb2RlU2VhcmNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTMxMDEyREQ4MThCOTdCOUIwMDM5MDYyRiAvKiBvc2luY2x1ZGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gb3NpbmNsdWRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTMxMDEyREQ5MThCOTdCOUIwMDM5MDYyRiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBvc3NvdXJjZV9wb3NpeC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyRERCMThCOTdCOUIwMDM5MDYyRiAvKiBP
dXRwdXRFU1NMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE91dHB1
dEVTU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkREQzE4Qjk3QjlC
MDAzOTA2MkYgLyogT3V0cHV0RVNTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBPdXRwdXRFU1NMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREREMThC
OTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRHTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IE91dHB1dEdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkzMTAxMkRERTE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0R0xTTC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBPdXRwdXRHTFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTMxMDEyRERGMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRHTFNMQmFzZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPdXRwdXRHTFNMQmFzZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREUwMThCOTdCOUIwMDM5MDYyRiAvKiBP
dXRwdXRHTFNMQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPdXRwdXRH
TFNMQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRFMTE4Qjk3QjlC
MDAzOTA2MkYgLyogT3V0cHV0SExTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBPdXRwdXRITFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEw
MTJERTIxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEhMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gT3V0cHV0SExTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkzMTAxMkRFMzE4Qjk3QjlCMDAzOTA2MkYgLyogcGFyc2VDb25zdC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBwYXJzZUNvbnN0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMzEwMTJERTQxOEI5N0I5QjAwMzkwNjJGIC8qIFBhcnNlQ29udGV4dC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJzZUNvbnRleHQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRFNTE4Qjk3QjlCMDAzOTA2MkYg
LyogUGFyc2VDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNl
Q29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRFNjE4Qjk3QjlC
MDAzOTA2MkYgLyogUG9vbEFsbG9jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFBvb2xBbGxvYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEy
REU3MThCOTdCOUIwMDM5MDYyRiAvKiBQb29sQWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUG9vbEFsbG9jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMx
MDEyREU4MThCOTdCOUIwMDM5MDYyRiAvKiBQcmFnbWEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUHJhZ21hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEy
REU5MThCOTdCOUIwMDM5MDYyRiAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBRdWFsaWZpZXJBbGl2ZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTMxMDEyREVBMThCOTdCOUIwMDM5MDYyRiAvKiBRdWFsaWZpZXJBbGl2
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWFsaWZpZXJBbGl2ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRFQjE4Qjk3QjlCMDAzOTA2MkYgLyog
UmVtb3ZlVHJlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1v
dmVUcmVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERUMxOEI5N0I5
QjAwMzkwNjJGIC8qIFJlbW92ZVRyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVtb3ZlVHJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRFRDE4
Qjk3QjlCMDAzOTA2MkYgLyogUmVuYW1lRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuYW1lRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMzEwMTJERUUxOEI5N0I5QjAwMzkwNjJGIC8qIFJld3JpdGVFbHNlQmxvY2tzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJld3JpdGVFbHNlQmxvY2tzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERUYxOEI5N0I5QjAwMzkwNjJGIC8q
IFJld3JpdGVFbHNlQmxvY2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
d3JpdGVFbHNlQmxvY2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREYw
MThCOTdCOUIwMDM5MDYyRiAvKiBTZWFyY2hTeW1ib2wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2VhcmNoU3ltYm9sLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMzEwMTJERjExOEI5N0I5QjAwMzkwNjJGIC8qIFNlYXJjaFN5bWJvbC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWFyY2hTeW1ib2wuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERjIxOEI5N0I5QjAwMzkwNjJGIC8qIFNoYWRlckxhbmcu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhZGVyTGFuZy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREYzMThCOTdCOUIwMDM5MDYyRiAv
KiBTaEhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaEhhbmRsZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRGNDE4Qjk3QjlCMDAzOTA2MkYg
LyogU3ltYm9sVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U3ltYm9sVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRGNTE4
Qjk3QjlCMDAzOTA2MkYgLyogU3ltYm9sVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU3ltYm9sVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEw
MTJERjcxOEI5N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREY4MThC
OTdCOUIwMDM5MDYyRiAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERjkxOEI5N0I5QjAwMzkwNjJGIC8q
IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERkExOEI5N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3Ry
aWN0VmVydGV4U2hhZGVyVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMx
MDEyREZCMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdG9yRVNTTC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREZDMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9y
RVNTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xhdG9yRVNTTC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRGRDE4Qjk3QjlCMDAzOTA2MkYg
LyogVHJhbnNsYXRvckdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVHJhbnNsYXRvckdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAx
MkRGRTE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckdMU0wuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMzEwMTJERkYxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JITFNMLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5zbGF0b3JITFNMLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJFMDAxOEI5N0I5QjAwMzkwNjJGIC8q
IFRyYW5zbGF0b3JITFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5z
bGF0b3JITFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyRTAxMThCOTdC
OUIwMDM5MDYyRiAvKiBUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
eXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkUwMjE4Qjk3QjlCMDAz
OTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTMxMDEyRTAzMThCOTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyRTA0MThCOTdCOUIwMDM5MDYyRiAv
KiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMzEwMTJFMDUxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFT
VC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmZvbGRTaG9ydENpcmN1aXRB
U1QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJFMDYxOEI5N0I5QjAwMzkw
NjJGIC8qIFVuaWZvcm0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VW5pZm9ybS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyRTA3MThCOTdC
OUIwMDM5MDYyRiAvKiBVbmlmb3JtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFVuaWZvcm0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJFMDgxOEI5N0I5
QjAwMzkwNjJGIC8qIHV0aWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gdXRpbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyRTA5MThCOTdC
OUIwMDM5MDYyRiAvKiB1dGlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHV0
aWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJFMEExOEI5N0I5QjAwMzkw
NjJGIC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTMxMDEyRTBCMThCOTdCOUIwMDM5MDYyRiAvKiBWYWxpZGF0ZUxpbWl0YXRpb25z
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhbGlkYXRlTGltaXRhdGlvbnMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJFMEMxOEI5N0I5QjAwMzkwNjJG
IC8qIFZhcmlhYmxlSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBWYXJpYWJsZUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkUw
RDE4Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFibGVJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFZhcmlhYmxlSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkzMTAxMkUwRTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFibGVQYWNrZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFyaWFibGVQYWNrZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkUwRjE4Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFi
bGVQYWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFibGVQYWNr
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJFMTAxOEI5N0I5QjAwMzkw
NjJGIC8qIFZlcnNpb25HTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFZlcnNpb25HTFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJF
MTExOEI5N0I5QjAwMzkwNjJGIC8qIFZlcnNpb25HTFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFZlcnNpb25HTFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTMxMDEyRTgxMThCOTdDODYwMDM5MDYyRiAvKiBjb21waWxlcmRlYnVnLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGNvbXBpbGVyZGVidWcuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkzMTAxMkU4MjE4Qjk3Qzg2MDAzOTA2MkYgLyogY29tcGlsZXJk
ZWJ1Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBjb21waWxlcmRlYnVnLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMkJEQjA5MTVGRUM5MUUwMDk3RUJDNyAv
KiBBTkdMRS5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3QueG1sOyBwYXRoID0gQU5HTEUucGxp
c3Q7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMkJEQjBBMTVGRUNBM0EwMDk3RUJD
NyAvKiBBTkdMRS50eHQgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQU5HTEUudHh0OyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0NDNBM0UxNTEyRUNGNkNDMDAwNEY5RDcgLyogaU9TLnhj
Y29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IGlPUy54Y2NvbmZpZzsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDk5NTFDMDIxNEI3QUFCMzAwNjBFOTZFIC8qIGxl
bmd0aF9saW1pdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbGVuZ3RoX2xp
bWl0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OTk1MUMwNTE0QjdBQUQ3MDA2
MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk0OTk1MUMwNjE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUNCMTNG
RDIxNzlEQjNGRDAwMUY4NTFEIC8qIERldGVjdENhbGxEZXB0aC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXRlY3RDYWxsRGVwdGguY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk1Q0IxM0ZEMzE3OURCM0ZEMDAxRjg1MUQgLyogRGV0ZWN0Q2FsbERl
cHRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdENhbGxEZXB0aC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RDdDNTlDNTEyMDhDNjhCMDAxQzg3M0Ug
LyogQU5HTEUueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gQU5HTEUu
eGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEN0M1OUM2MTIwOEM2OEIw
MDFDODczRSAvKiBCYXNlLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9
IEJhc2UueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEN0M1OUM3MTIw
OEM2OEIwMDFDODczRSAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lnhj
Y29uZmlnOyBwYXRoID0gRGVidWdSZWxlYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MjMwOUE1NTE4M0MyN0RCMDAzNzBCOTMgLyogVG9rZW5pemVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFRva2VuaXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyMzA5QTU3MTgzQzI3RjEwMDM3MEI5MyAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEV4cHJlc3Npb25QYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk3MjMwOUE1OTE4M0MyODRFMDAzNzBCOTMgLyogZ2xzbGFuZ19sZXguY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gZ2xzbGFuZ19sZXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk3MjMwOUE1QTE4M0MyODRFMDAzNzBCOTMgLyogZ2xzbGFuZ190YWIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gZ2xzbGFuZ190YWIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk3MjMwOUE1QjE4M0MyODRFMDAzNzBCOTMgLyogZ2xzbGFuZ190YWIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gZ2xzbGFuZ190YWIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzIzMDlB
NUYxODNDMkE2NDAwMzcwQjkzIC8qIFRyYW5zbGF0b3JITFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFRyYW5zbGF0b3JITFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzIz
MDlBNjAxODNDMkE2NDAwMzcwQjkzIC8qIFRyYW5zbGF0b3JITFNMLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRyYW5zbGF0b3JITFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcyMzA5QTYz
MTgzQzJBRTUwMDM3MEI5MyAvKiBPdXRwdXRITFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IE91dHB1dEhMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk3MjMwOUE2NDE4M0MyQUU1MDAzNzBCOTMgLyogT3V0cHV0SExTTC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBPdXRwdXRITFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTcyMzA5QTY3MTgzQzJCRTgwMDM3MEI5MyAvKiBEZXRlY3REaXNjb250aW51aXR5
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERldGVjdERpc2NvbnRp
bnVpdHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3MjMwOUE2ODE4M0MyQkU4
MDAzNzBCOTMgLyogRGV0ZWN0RGlzY29udGludWl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEZXRlY3REaXNjb250aW51aXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTcyMzA5QTY5MTgzQzJCRTgwMDM3MEI5MyAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzIzMDlBNkExODNDMkJFODAwMzcw
QjkzIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBVbmZvbGRTaG9ydENpcmN1aXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NzIzMDlBNkIxODNDMkJFODAwMzcwQjkzIC8qIFVuaWZvcm0uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVW5pZm9ybS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTcyMzA5QTZDMTgzQzJCRTgwMDM3MEI5MyAvKiBVbmlmb3JtLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuaWZvcm0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNzI2NTA5MzAxODNBQTIxMzAwRDI4QjQ4IC8qIENvZGVHZW4uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ29kZUdlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcyNjUw
OTMxMTgzQUEyNDYwMEQyOEI0OCAvKiBJbml0aWFsaXplR0xQb3NpdGlvbi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJbml0aWFsaXplR0xQb3NpdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTcyNjUwOTMyMTgzQUEyNDYwMEQyOEI0OCAvKiBJbml0aWFsaXplR0xQb3NpdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplR0xQb3NpdGlvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk3MjY1MDkzMzE4M0FBMjg5MDBEMjhCNDggLyogTm9kZVNlYXJjaC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBOb2RlU2VhcmNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTcyNjUwOTM0MTgzQUEzQjIwMEQyOEI0OCAvKiBQYXJzZUNvbnRleHQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUGFyc2VDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNzI2NTA5MzUxODNBQTNCMjAwRDI4QjQ4IC8qIFBhcnNlQ29udGV4dC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQYXJzZUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzI2NTA5
MzYxODNBQTNDNjAwRDI4QjQ4IC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBVbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk3MjY1MDkzNzE4M0FBM0M2MDBEMjhCNDggLyogVW5mb2xkU2hvcnRDaXJjdWl0
QVNULmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk5MEQ5QjBGOTEyRTExRENCMDAyRDQyNTUgLyogQ29tcGlsZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29tcGlsZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB1c2VzVGFicyA9IDA7IH07Ci0JCTkwRDlCMEZBMTJFMTFE
Q0IwMDJENDI1NSAvKiBFeHRlbnNpb25CZWhhdmlvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBFeHRlbnNpb25CZWhhdmlvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk5MEQ5QjBGRTEyRTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBnbHNsYW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTkwRDlCMTAwMTJFMTFEQ0IwMDJENDI1NSAvKiBTZWFyY2hTeW1ib2wuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VhcmNoU3ltYm9sLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTBEOUIxMDExMkUxMURDQjAwMkQ0MjU1IC8qIFNlYXJjaFN5
bWJvbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWFyY2hTeW1ib2wuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTBEOUIxMEIxMkUxMURENjAwMkQ0MjU1IC8q
IHV0aWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gdXRpbC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkwRDlCMTBDMTJFMTFERDYwMDJENDI1NSAv
KiB1dGlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHV0aWwuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTBEOUIxMEQxMkUxMURENjAwMkQ0MjU1IC8qIFZhbGlk
YXRlTGltaXRhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VmFsaWRhdGVMaW1pdGF0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkw
RDlCMTBFMTJFMTFERDYwMDJENDI1NSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhbGlkYXRlTGltaXRhdGlvbnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTBEOUIxMEYxMkUxMURENjAwMkQ0MjU1IC8qIFZhcmlhYmxl
SW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYXJpYWJsZUlu
Zm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5MEQ5QjExMDEyRTExREQ2MDAy
RDQyNTUgLyogVmFyaWFibGVJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFZhcmlhYmxlSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5MEQ5QjExMTEy
RTExREQ2MDAyRDQyNTUgLyogVmVyc2lvbkdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVmVyc2lvbkdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk5MEQ5QjExMjEyRTExREQ2MDAyRDQyNTUgLyogVmVyc2lvbkdMU0wuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmVyc2lvbkdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTA4QzNDREExNkQ2Q0I2MTAwM0YwQjgzIC8qIEFycmF5Qm91bmRzQ2xhbXBl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBcnJheUJvdW5kc0Ns
YW1wZXIuY3BwOyBwYXRoID0gc3JjL3RoaXJkX3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xh
bXBlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEwOEMzQ0RCMTZENkNCNjEw
MDNGMEI4MyAvKiBBcnJheUJvdW5kc0NsYW1wZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQXJyYXlCb3VuZHNDbGFtcGVyLmg7IHBhdGggPSBzcmMvdGhpcmRfcGFydHkvY29t
cGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUEwQUFCRTJBMTNBRkU4MTAwMEYyRUJEMSAvKiBGb3JMb29wVW5yb2xsLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvckxvb3BVbnJvbGwuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlBMEFBQkUyQjEzQUZFODEwMDBGMkVCRDEgLyogRm9yTG9vcFVu
cm9sbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb3JMb29wVW5yb2xsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEwQUFCRTJFMTNBRkU4MzAwMEYyRUJEMSAv
KiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUEwQUFCRTJGMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXBMb25nVmFyaWFibGVOYW1lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMEFBQkUzMjEzQUZFODQ3MDBGMkVCRDEg
LyogT3V0cHV0R0xTTEJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gT3V0cHV0R0xTTEJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMEFB
QkUzMzEzQUZFODQ3MDBGMkVCRDEgLyogT3V0cHV0R0xTTEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gT3V0cHV0R0xTTEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQTBBQUJFNDIxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3V0cHV0RVNTTC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEwQUFCRTQzMTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRF
U1NMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE91dHB1dEVTU0wuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTBBQUJFNDYxM0FGRTk2MTAwRjJFQkQxIC8qIFRy
YW5zbGF0b3JFU1NMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRy
YW5zbGF0b3JFU1NMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTBBQUJFNDcx
M0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JFU1NMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUEyNjRGODkzMTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9zdGljc0Jhc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlhZ25vc3RpY3NCYXNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTI2NEY4OTQxNjk3NERFRDAwNkZBQTVBIC8qIERp
YWdub3N0aWNzQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWFnbm9z
dGljc0Jhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTI2NEY4OTUxNjk3NERF
RDAwNkZBQTVBIC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTI1Niw2NyArMzM5LDggQEAKIAkJQTI2NEY4QTgxNjk3NERFRDAw
NkZBQTVBIC8qIFRva2VuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFRva2VuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTI2NEY4QTkxNjk3NERF
RDAwNkZBQTVBIC8qIFRva2VuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRv
a2VuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEyNjRGOEFCMTY5NzRERUQwMDZG
QUE1QSAvKiBUb2tlbml6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVG9r
ZW5pemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjRGOEM1MTY5NzRFMkEw
MDZGQUE1QSAvKiBIYXNoTmFtZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SGFzaE5hbWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjRGOEM2MTY5NzRF
MkEwMDZGQUE1QSAvKiBWYXJpYWJsZVBhY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBWYXJpYWJsZVBhY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUEyNjRGOEM3MTY5NzRFMkEwMDZGQUE1QSAvKiBWYXJpYWJsZVBhY2tlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYXJpYWJsZVBhY2tlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBMjY0RjhDQzE2OTc2MkFBMDA2RkFBNUEgLyoga2hycGxhdGZv
cm0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0ga2hycGxhdGZvcm0uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY3QjAxNTlDMjFCMTAwMzk4NTM5IC8qIERp
YWdub3N0aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpYWdu
b3N0aWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY3QjExNTlDMjFC
MTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERpYWdub3N0aWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0Iy
MTU5QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlBMjY1NjdCMzE1OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFu
ZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXJlY3RpdmVIYW5kbGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0I0MTU5QzIxQjEwMDM5ODUz
OSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlBMjY1NjdCNTE1OUMyMUIxMDAzOTg1MzkgLyogUHJhZ21hLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByYWdtYS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlBMjY1NjdCNjE1OUMyMUIxMDAzOTg1MzkgLyogUmVuYW1lRnVuY3Rpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuYW1lRnVuY3Rpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY4MkQxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVu
ZGVuY3lHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBl
bmRlbmN5R3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjgyRTE1
OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlBMjY1NjgyRjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhC
dWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY4MzAxNTlDMjNF
MTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlBMjY1NjgzMTE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBo
T3V0cHV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVu
Y3lHcmFwaE91dHB1dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2ODMy
MTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoT3V0cHV0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2ODMzMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUEyNjU2ODM1MTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1Njgz
NjE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2ODM3MTU5QzIzRTEwMDM5ODUz
OSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2ODM4MTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmlj
dFZlcnRleFNoYWRlclRpbWluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGQjM5RDBEMTEyMDBGMEUzMDAwODhFNjkgLyogbGliQU5HTEUuYSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gbGliQU5HTEUuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJ
UjsgfTsKLQkJRkIzOUQyMjExMjAwRjM1QTAwMDg4RTY5IC8qIEJhc2VUeXBlcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5o
OyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gQmFzZVR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUZCMzlEMjI0MTIwMEYzNUEwMDA4OEU2OSAvKiBDb21tb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
aDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IENvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlGQjM5RDIyNTEyMDBGMzVBMDAwODhFNjkgLyogQ29uc3RhbnRVbmlvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gQ29uc3RhbnRVbmlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDIyNjEyMDBGMzVBMDAwODhFNjkgLyogZGVidWcu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gZGVidWcuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDIyNzEyMDBGMzVBMDAwODhFNjkgLyogZGVi
dWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZGVidWcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyMkExMjAwRjM1QTAwMDg4RTY5IC8qIEluZm9TaW5r
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluZm9TaW5rLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyMkIxMjAwRjM1QTAwMDg4RTY5IC8q
IEluZm9TaW5rLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBJbmZvU2luay5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDIyQzEyMDBGMzVBMDAwODhFNjkg
LyogSW5pdGlhbGl6ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
bml0aWFsaXplLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyMkQxMjAw
RjM1QTAwMDg4RTY5IC8qIEluaXRpYWxpemUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsg
cGF0aCA9IEluaXRpYWxpemUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQy
MkUxMjAwRjM1QTAwMDg4RTY5IC8qIEluaXRpYWxpemVEbGwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZURsbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUZCMzlEMjJGMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBJbml0aWFsaXplRGxsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjMwMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0
aWFsaXplR2xvYmFscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0Rmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gSW5pdGlh
bGl6ZUdsb2JhbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyMzExMjAw
RjM1QTAwMDg4RTY5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVu
Y29kaW5nID0gNDsgcGF0aCA9IEluaXRpYWxpemVQYXJzZUNvbnRleHQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyMzIxMjAwRjM1QTAwMDg4RTY5IC8qIEludGVybWVkaWF0
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRlcm1lZGlhdGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDIzMzEyMDBGMzVBMDAwODhF
NjkgLyogaW50ZXJtZWRpYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGlj
aXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBp
bnRlcm1lZGlhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyMzQxMjAw
RjM1QTAwMDg4RTY5IC8qIGludGVybU91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBpbnRlcm1PdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
QjM5RDIzNTEyMDBGMzVBMDAwODhFNjkgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZXJtVHJhdmVyc2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDIzNjEyMDBGMzVBMDAwODhFNjkgLyogbG9jYWxpbnRl
cm1lZGlhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IGxvY2FsaW50ZXJt
ZWRpYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjM3MTIwMEYzNUEw
MDA4OEU2OSAvKiBNTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRG
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBNTWFw
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjM4MTIwMEYzNUEwMDA4OEU2
OSAvKiBvc2luY2x1ZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gb3NpbmNs
dWRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjM5MTIwMEYzNUEwMDA4
OEU2OSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBvc3NvdXJjZV9wb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZCMzlEMjNBMTIwMEYzNUEwMDA4OEU2OSAvKiBvc3NvdXJjZV93aW4uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gb3Nzb3VyY2Vfd2luLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyM0IxMjAwRjM1QTAwMDg4RTY5IC8qIE91dHB1dEdMU0wu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3V0cHV0R0xTTC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjNDMTIwMEYzNUEwMDA4OEU2OSAv
KiBPdXRwdXRHTFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBPdXRwdXRH
TFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjNGMTIwMEYzNUEwMDA4
OEU2OSAvKiBwYXJzZUNvbnN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IHBhcnNlQ29uc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI0
MjEyMDBGMzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFBvb2xBbGxvYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUZCMzlEMjQzMTIwMEYzNUEwMDA4OEU2OSAvKiBQb29sQWxsb2MuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmls
ZUVuY29kaW5nID0gNDsgcGF0aCA9IFBvb2xBbGxvYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDI1NjEyMDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUXVhbGlmaWVyQWxpdmUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI1NzEyMDBGMzVBMDAwODhFNjkgLyog
UXVhbGlmaWVyQWxpdmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFF1YWxp
ZmllckFsaXZlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjU4MTIwMEYz
NUEwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlbW92ZVRyZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
QjM5RDI1OTEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5j
b2RpbmcgPSA0OyBwYXRoID0gUmVtb3ZlVHJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDI1QTEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFuZy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaGFkZXJMYW5nLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyNUIxMjAwRjM1QTAwMDg4RTY5IC8qIFNoSGFuZGxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBTaEhhbmRsZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI1QzEyMDBGMzVBMDAwODhFNjkgLyogU3ltYm9sVGFi
bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3ltYm9sVGFibGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI1RDEyMDBGMzVBMDAwODhF
NjkgLyogU3ltYm9sVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNp
dEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFN5
bWJvbFRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjY4MTIwMEYz
NUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUcmFuc2xhdG9yR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUZCMzlEMjY5MTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gVHJhbnNsYXRvckdMU0wuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyNkMxMjAwRjM1QTAwMDg4RTY5IC8qIFR5cGVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBUeXBlcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGQjM5RDJCRjEyMDBGM0U2MDAwODhFNjkgLyogU2hhZGVyTGFuZy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gU2hhZGVyTGFuZy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwog
CkBAIC0zMzEsNiArMzU1LDEzNyBAQAogLyogRW5kIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNl
Y3Rpb24gKi8KIAogLyogQmVnaW4gUEJYR3JvdXAgc2VjdGlvbiAqLworCQkzMTAxMkQ5RjE4Qjk3
QjlCMDAzOTA2MkYgLyogdHJhbnNsYXRvciAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJ
Y2hpbGRyZW4gPSAoCisJCQkJMzEwMTJEQTkxOEI5N0I5QjAwMzkwNjJGIC8qIGRlcGdyYXBoICov
LAorCQkJCTMxMDEyREY2MThCOTdCOUIwMDM5MDYyRiAvKiB0aW1pbmcgKi8sCisJCQkJMzEwMTJE
QTAxOEI5N0I5QjAwMzkwNjJGIC8qIEJhc2VUeXBlcy5oICovLAorCQkJCTMxMDEyREExMThCOTdC
OUIwMDM5MDYyRiAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgKi8sCisJCQkJMzEwMTJE
QTIxOEI5N0I5QjAwMzkwNjJGIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggKi8sCisJCQkJ
MzEwMTJEQTMxOEI5N0I5QjAwMzkwNjJGIC8qIENvZGVHZW4uY3BwICovLAorCQkJCTMxMDEyREE0
MThCOTdCOUIwMDM5MDYyRiAvKiBDb21tb24uaCAqLywKKwkJCQkzMTAxMkU4MTE4Qjk3Qzg2MDAz
OTA2MkYgLyogY29tcGlsZXJkZWJ1Zy5jcHAgKi8sCisJCQkJMzEwMTJFODIxOEI5N0M4NjAwMzkw
NjJGIC8qIGNvbXBpbGVyZGVidWcuaCAqLywKKwkJCQkzMTAxMkRBNTE4Qjk3QjlCMDAzOTA2MkYg
LyogQ29tcGlsZXIuY3BwICovLAorCQkJCTMxMDEyREE4MThCOTdCOUIwMDM5MDYyRiAvKiBDb25z
dGFudFVuaW9uLmggKi8sCisJCQkJMzEwMTJEQjExOEI5N0I5QjAwMzkwNjJGIC8qIERldGVjdENh
bGxEZXB0aC5jcHAgKi8sCisJCQkJMzEwMTJEQjIxOEI5N0I5QjAwMzkwNjJGIC8qIERldGVjdENh
bGxEZXB0aC5oICovLAorCQkJCTMxMDEyREIzMThCOTdCOUIwMDM5MDYyRiAvKiBEZXRlY3REaXNj
b250aW51aXR5LmNwcCAqLywKKwkJCQkzMTAxMkRCNDE4Qjk3QjlCMDAzOTA2MkYgLyogRGV0ZWN0
RGlzY29udGludWl0eS5oICovLAorCQkJCTMxMDEyREI1MThCOTdCOUIwMDM5MDYyRiAvKiBEaWFn
bm9zdGljcy5jcHAgKi8sCisJCQkJMzEwMTJEQjYxOEI5N0I5QjAwMzkwNjJGIC8qIERpYWdub3N0
aWNzLmggKi8sCisJCQkJMzEwMTJEQjcxOEI5N0I5QjAwMzkwNjJGIC8qIERpcmVjdGl2ZUhhbmRs
ZXIuY3BwICovLAorCQkJCTMxMDEyREI4MThCOTdCOUIwMDM5MDYyRiAvKiBEaXJlY3RpdmVIYW5k
bGVyLmggKi8sCisJCQkJMzEwMTJEQjkxOEI5N0I5QjAwMzkwNjJGIC8qIEV4dGVuc2lvbkJlaGF2
aW9yLmggKi8sCisJCQkJMzEwMTJEQkExOEI5N0I5QjAwMzkwNjJGIC8qIEZvckxvb3BVbnJvbGwu
Y3BwICovLAorCQkJCTMxMDEyREJCMThCOTdCOUIwMDM5MDYyRiAvKiBGb3JMb29wVW5yb2xsLmgg
Ki8sCisJCQkJMzEwMTJEQkQxOEI5N0I5QjAwMzkwNjJGIC8qIGdsc2xhbmcuaCAqLywKKwkJCQkz
MTAxMkRDMDE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZ19sZXguY3BwICovLAorCQkJCTMxMDEy
REMxMThCOTdCOUIwMDM5MDYyRiAvKiBnbHNsYW5nX3RhYi5jcHAgKi8sCisJCQkJMzEwMTJEQzIx
OEI5N0I5QjAwMzkwNjJGIC8qIGdsc2xhbmdfdGFiLmggKi8sCisJCQkJMzEwMTJEQzMxOEI5N0I5
QjAwMzkwNjJGIC8qIEhhc2hOYW1lcy5oICovLAorCQkJCTMxMDEyREM0MThCOTdCOUIwMDM5MDYy
RiAvKiBJbmZvU2luay5jcHAgKi8sCisJCQkJMzEwMTJEQzUxOEI5N0I5QjAwMzkwNjJGIC8qIElu
Zm9TaW5rLmggKi8sCisJCQkJMzEwMTJEQzYxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemUu
Y3BwICovLAorCQkJCTMxMDEyREM3MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplLmggKi8s
CisJCQkJMzEwMTJEQzgxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVEbGwuY3BwICovLAor
CQkJCTMxMDEyREM5MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplRGxsLmggKi8sCisJCQkJ
MzEwMTJEQ0ExOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVHbG9iYWxzLmggKi8sCisJCQkJ
MzEwMTJEQ0IxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwICov
LAorCQkJCTMxMDEyRENDMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0
LmggKi8sCisJCQkJMzEwMTJEQ0QxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVWYXJpYWJs
ZXMuY3BwICovLAorCQkJCTMxMDEyRENFMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplVmFy
aWFibGVzLmggKi8sCisJCQkJMzEwMTJEQ0YxOEI5N0I5QjAwMzkwNjJGIC8qIEludGVybWVkaWF0
ZS5jcHAgKi8sCisJCQkJMzEwMTJERDAxOEI5N0I5QjAwMzkwNjJGIC8qIGludGVybWVkaWF0ZS5o
ICovLAorCQkJCTMxMDEyREQxMThCOTdCOUIwMDM5MDYyRiAvKiBpbnRlcm1PdXQuY3BwICovLAor
CQkJCTMxMDEyREQyMThCOTdCOUIwMDM5MDYyRiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8sCisJ
CQkJMzEwMTJERDMxOEI5N0I5QjAwMzkwNjJGIC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggKi8sCisJ
CQkJMzEwMTJERDQxOEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCAq
LywKKwkJCQkzMTAxMkRENTE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMu
aCAqLywKKwkJCQkzMTAxMkRENjE4Qjk3QjlCMDAzOTA2MkYgLyogTU1hcC5oICovLAorCQkJCTMx
MDEyREQ3MThCOTdCOUIwMDM5MDYyRiAvKiBOb2RlU2VhcmNoLmggKi8sCisJCQkJMzEwMTJERDgx
OEI5N0I5QjAwMzkwNjJGIC8qIG9zaW5jbHVkZS5oICovLAorCQkJCTMxMDEyREQ5MThCOTdCOUIw
MDM5MDYyRiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8sCisJCQkJMzEwMTJEREIxOEI5N0I5QjAw
MzkwNjJGIC8qIE91dHB1dEVTU0wuY3BwICovLAorCQkJCTMxMDEyRERDMThCOTdCOUIwMDM5MDYy
RiAvKiBPdXRwdXRFU1NMLmggKi8sCisJCQkJMzEwMTJEREQxOEI5N0I5QjAwMzkwNjJGIC8qIE91
dHB1dEdMU0wuY3BwICovLAorCQkJCTMxMDEyRERFMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRH
TFNMLmggKi8sCisJCQkJMzEwMTJEREYxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEdMU0xCYXNl
LmNwcCAqLywKKwkJCQkzMTAxMkRFMDE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0R0xTTEJhc2Uu
aCAqLywKKwkJCQkzMTAxMkRFMTE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0SExTTC5jcHAgKi8s
CisJCQkJMzEwMTJERTIxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEhMU0wuaCAqLywKKwkJCQkz
MTAxMkRFMzE4Qjk3QjlCMDAzOTA2MkYgLyogcGFyc2VDb25zdC5jcHAgKi8sCisJCQkJMzEwMTJE
RTQxOEI5N0I5QjAwMzkwNjJGIC8qIFBhcnNlQ29udGV4dC5jcHAgKi8sCisJCQkJMzEwMTJERTUx
OEI5N0I5QjAwMzkwNjJGIC8qIFBhcnNlQ29udGV4dC5oICovLAorCQkJCTMxMDEyREU2MThCOTdC
OUIwMDM5MDYyRiAvKiBQb29sQWxsb2MuY3BwICovLAorCQkJCTMxMDEyREU3MThCOTdCOUIwMDM5
MDYyRiAvKiBQb29sQWxsb2MuaCAqLywKKwkJCQkzMTAxMkRFODE4Qjk3QjlCMDAzOTA2MkYgLyog
UHJhZ21hLmggKi8sCisJCQkJMzEwMTJERTkxOEI5N0I5QjAwMzkwNjJGIC8qIFF1YWxpZmllckFs
aXZlLmNwcCAqLywKKwkJCQkzMTAxMkRFQTE4Qjk3QjlCMDAzOTA2MkYgLyogUXVhbGlmaWVyQWxp
dmUuaCAqLywKKwkJCQkzMTAxMkRFQjE4Qjk3QjlCMDAzOTA2MkYgLyogUmVtb3ZlVHJlZS5jcHAg
Ki8sCisJCQkJMzEwMTJERUMxOEI5N0I5QjAwMzkwNjJGIC8qIFJlbW92ZVRyZWUuaCAqLywKKwkJ
CQkzMTAxMkRFRDE4Qjk3QjlCMDAzOTA2MkYgLyogUmVuYW1lRnVuY3Rpb24uaCAqLywKKwkJCQkz
MTAxMkRFRTE4Qjk3QjlCMDAzOTA2MkYgLyogUmV3cml0ZUVsc2VCbG9ja3MuY3BwICovLAorCQkJ
CTMxMDEyREVGMThCOTdCOUIwMDM5MDYyRiAvKiBSZXdyaXRlRWxzZUJsb2Nrcy5oICovLAorCQkJ
CTMxMDEyREYwMThCOTdCOUIwMDM5MDYyRiAvKiBTZWFyY2hTeW1ib2wuY3BwICovLAorCQkJCTMx
MDEyREYxMThCOTdCOUIwMDM5MDYyRiAvKiBTZWFyY2hTeW1ib2wuaCAqLywKKwkJCQkzMTAxMkRG
MjE4Qjk3QjlCMDAzOTA2MkYgLyogU2hhZGVyTGFuZy5jcHAgKi8sCisJCQkJMzEwMTJERjMxOEI5
N0I5QjAwMzkwNjJGIC8qIFNoSGFuZGxlLmggKi8sCisJCQkJMzEwMTJERjQxOEI5N0I5QjAwMzkw
NjJGIC8qIFN5bWJvbFRhYmxlLmNwcCAqLywKKwkJCQkzMTAxMkRGNTE4Qjk3QjlCMDAzOTA2MkYg
LyogU3ltYm9sVGFibGUuaCAqLywKKwkJCQkzMTAxMkRGQjE4Qjk3QjlCMDAzOTA2MkYgLyogVHJh
bnNsYXRvckVTU0wuY3BwICovLAorCQkJCTMxMDEyREZDMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFu
c2xhdG9yRVNTTC5oICovLAorCQkJCTMxMDEyREZEMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xh
dG9yR0xTTC5jcHAgKi8sCisJCQkJMzEwMTJERkUxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0
b3JHTFNMLmggKi8sCisJCQkJMzEwMTJERkYxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JI
TFNMLmNwcCAqLywKKwkJCQkzMTAxMkUwMDE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckhM
U0wuaCAqLywKKwkJCQkzMTAxMkUwMTE4Qjk3QjlCMDAzOTA2MkYgLyogVHlwZXMuaCAqLywKKwkJ
CQkzMTAxMkUwMjE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCAqLywK
KwkJCQkzMTAxMkUwMzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmggKi8s
CisJCQkJMzEwMTJFMDQxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5j
cHAgKi8sCisJCQkJMzEwMTJFMDUxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3Vp
dEFTVC5oICovLAorCQkJCTMxMDEyRTA2MThCOTdCOUIwMDM5MDYyRiAvKiBVbmlmb3JtLmNwcCAq
LywKKwkJCQkzMTAxMkUwNzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5oICovLAorCQkJCTMx
MDEyRTA4MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmNwcCAqLywKKwkJCQkzMTAxMkUwOTE4Qjk3
QjlCMDAzOTA2MkYgLyogdXRpbC5oICovLAorCQkJCTMxMDEyRTBBMThCOTdCOUIwMDM5MDYyRiAv
KiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLywKKwkJCQkzMTAxMkUwQjE4Qjk3QjlCMDAzOTA2
MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5oICovLAorCQkJCTMxMDEyRTBDMThCOTdCOUIwMDM5
MDYyRiAvKiBWYXJpYWJsZUluZm8uY3BwICovLAorCQkJCTMxMDEyRTBEMThCOTdCOUIwMDM5MDYy
RiAvKiBWYXJpYWJsZUluZm8uaCAqLywKKwkJCQkzMTAxMkUwRTE4Qjk3QjlCMDAzOTA2MkYgLyog
VmFyaWFibGVQYWNrZXIuY3BwICovLAorCQkJCTMxMDEyRTBGMThCOTdCOUIwMDM5MDYyRiAvKiBW
YXJpYWJsZVBhY2tlci5oICovLAorCQkJCTMxMDEyRTEwMThCOTdCOUIwMDM5MDYyRiAvKiBWZXJz
aW9uR0xTTC5jcHAgKi8sCisJCQkJMzEwMTJFMTExOEI5N0I5QjAwMzkwNjJGIC8qIFZlcnNpb25H
TFNMLmggKi8sCisJCQkpOworCQkJcGF0aCA9IHRyYW5zbGF0b3I7CisJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOworCQl9OworCQkzMTAxMkRBOTE4Qjk3QjlCMDAzOTA2MkYgLyogZGVwZ3JhcGgg
Ki8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTMxMDEyREFB
MThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovLAorCQkJCTMxMDEyREFC
MThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGguaCAqLywKKwkJCQkzMTAxMkRBQzE4
Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgKi8sCisJCQkJMzEw
MTJEQUQxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCAqLywKKwkJ
CQkzMTAxMkRBRTE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCAq
LywKKwkJCQkzMTAxMkRBRjE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0
LmggKi8sCisJCQkJMzEwMTJEQjAxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaFRy
YXZlcnNlLmNwcCAqLywKKwkJCSk7CisJCQlwYXRoID0gZGVwZ3JhcGg7CisJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOworCQl9OworCQkzMTAxMkRGNjE4Qjk3QjlCMDAzOTA2MkYgLyogdGltaW5n
ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkzMTAxMkRG
NzE4Qjk3QjlCMDAzOTA2MkYgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgKi8s
CisJCQkJMzEwMTJERjgxOEI5N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuaCAqLywKKwkJCQkzMTAxMkRGOTE4Qjk3QjlCMDAzOTA2MkYgLyogUmVzdHJpY3RWZXJ0
ZXhTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCTMxMDEyREZBMThCOTdCOUIwMDM5MDYyRiAvKiBS
ZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovLAorCQkJKTsKKwkJCXBhdGggPSB0aW1pbmc7
CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQkzMTJCREIwNzE1RkVDOEU2MDA5
N0VCQzcgLyogbWlzYyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CkBAIC0zNzcsMzEgKzUzMiw2IEBACiAJCQlwYXRoID0gaW5jbHVkZS9LSFI7CiAJCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOwogCQl9OwotCQlBMjY1NjgyQzE1OUMyM0UxMDAzOTg1MzkgLyogZGVw
Z3JhcGggKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCUEy
NjU2ODJEMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovLAotCQkJCUEy
NjU2ODJFMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguaCAqLywKLQkJCQlBMjY1
NjgyRjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgKi8sCi0J
CQkJQTI2NTY4MzAxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCAq
LywKLQkJCQlBMjY1NjgzMTE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0
LmNwcCAqLywKLQkJCQlBMjY1NjgzMjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBo
T3V0cHV0LmggKi8sCi0JCQkJQTI2NTY4MzMxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lH
cmFwaFRyYXZlcnNlLmNwcCAqLywKLQkJCSk7Ci0JCQlwYXRoID0gZGVwZ3JhcGg7Ci0JCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQlBMjY1NjgzNDE1OUMyM0UxMDAzOTg1MzkgLyog
dGltaW5nICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQlB
MjY1NjgzNTE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5j
cHAgKi8sCi0JCQkJQTI2NTY4MzYxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRT
aGFkZXJUaW1pbmcuaCAqLywKLQkJCQlBMjY1NjgzNzE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovLAotCQkJCUEyNjU2ODM4MTU5QzIzRTEwMDM5ODUz
OSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovLAotCQkJKTsKLQkJCXBhdGggPSB0
aW1pbmc7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwogCQlBMjlCMTVFOTE2OTc4
QjdEMDAxMTFEOTcgLyogaW5jbHVkZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCkBAIC00NDIsMTA1ICs1NzIsOCBAQAogCQlGQjM5RDIyMDEyMDBGMzVBMDAwODhF
NjkgLyogY29tcGlsZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAotCQkJCUEyNjU2ODJDMTU5QzIzRTEwMDM5ODUzOSAvKiBkZXBncmFwaCAqLywKKwkJCQkzMTAx
MkQ5RjE4Qjk3QjlCMDAzOTA2MkYgLyogdHJhbnNsYXRvciAqLywKIAkJCQlGQjM5RDI0NDEyMDBG
MzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzc29yICovLAotCQkJCUEyNjU2ODM0MTU5QzIzRTEwMDM5
ODUzOSAvKiB0aW1pbmcgKi8sCi0JCQkJRkIzOUQyMjExMjAwRjM1QTAwMDg4RTY5IC8qIEJhc2VU
eXBlcy5oICovLAotCQkJCTQ5OTUxQzA1MTRCN0FBRDcwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5jcHAgKi8sCi0JCQkJNzI2NTA5MzYxODNBQTNDNjAwRDI4QjQ4IC8qIFVuZm9s
ZFNob3J0Q2lyY3VpdEFTVC5jcHAgKi8sCi0JCQkJNzI2NTA5MzcxODNBQTNDNjAwRDI4QjQ4IC8q
IFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5oICovLAotCQkJCTcyNjUwOTM0MTgzQUEzQjIwMEQyOEI0
OCAvKiBQYXJzZUNvbnRleHQuY3BwICovLAotCQkJCTcyMzA5QTY3MTgzQzJCRTgwMDM3MEI5MyAv
KiBEZXRlY3REaXNjb250aW51aXR5LmNwcCAqLywKLQkJCQk3MjMwOUE2ODE4M0MyQkU4MDAzNzBC
OTMgLyogRGV0ZWN0RGlzY29udGludWl0eS5oICovLAotCQkJCTcyMzA5QTY5MTgzQzJCRTgwMDM3
MEI5MyAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwICovLAotCQkJCTcyMzA5QTZBMTgzQzJCRTgw
MDM3MEI5MyAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCAqLywKLQkJCQk3MjMwOUE2QjE4M0MyQkU4
MDAzNzBCOTMgLyogVW5pZm9ybS5jcHAgKi8sCi0JCQkJNzIzMDlBNkMxODNDMkJFODAwMzcwQjkz
IC8qIFVuaWZvcm0uaCAqLywKLQkJCQk3MjY1MDkzNTE4M0FBM0IyMDBEMjhCNDggLyogUGFyc2VD
b250ZXh0LmggKi8sCi0JCQkJNzI2NTA5MzMxODNBQTI4OTAwRDI4QjQ4IC8qIE5vZGVTZWFyY2gu
aCAqLywKLQkJCQk3MjY1MDkzMTE4M0FBMjQ2MDBEMjhCNDggLyogSW5pdGlhbGl6ZUdMUG9zaXRp
b24uY3BwICovLAotCQkJCTcyNjUwOTMyMTgzQUEyNDYwMEQyOEI0OCAvKiBJbml0aWFsaXplR0xQ
b3NpdGlvbi5oICovLAotCQkJCTQ5OTUxQzA2MTRCN0FBRDgwMDYwRTk2RSAvKiBCdWlsdEluRnVu
Y3Rpb25FbXVsYXRvci5oICovLAotCQkJCTcyNjUwOTMwMTgzQUEyMTMwMEQyOEI0OCAvKiBDb2Rl
R2VuLmNwcCAqLywKLQkJCQlGQjM5RDIyNDEyMDBGMzVBMDAwODhFNjkgLyogQ29tbW9uLmggKi8s
Ci0JCQkJOTBEOUIwRjkxMkUxMURDQjAwMkQ0MjU1IC8qIENvbXBpbGVyLmNwcCAqLywKLQkJCQlG
QjM5RDIyNTEyMDBGMzVBMDAwODhFNjkgLyogQ29uc3RhbnRVbmlvbi5oICovLAotCQkJCUZCMzlE
MjI2MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5jcHAgKi8sCi0JCQkJRkIzOUQyMjcxMjAwRjM1
QTAwMDg4RTY5IC8qIGRlYnVnLmggKi8sCi0JCQkJNUNCMTNGRDMxNzlEQjNGRDAwMUY4NTFEIC8q
IERldGVjdENhbGxEZXB0aC5oICovLAotCQkJCTVDQjEzRkQyMTc5REIzRkQwMDFGODUxRCAvKiBE
ZXRlY3RDYWxsRGVwdGguY3BwICovLAotCQkJCUEyNjU2N0IwMTU5QzIxQjEwMDM5ODUzOSAvKiBE
aWFnbm9zdGljcy5jcHAgKi8sCi0JCQkJQTI2NTY3QjExNTlDMjFCMTAwMzk4NTM5IC8qIERpYWdu
b3N0aWNzLmggKi8sCi0JCQkJQTI2NTY3QjIxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhh
bmRsZXIuY3BwICovLAotCQkJCUEyNjU2N0IzMTU5QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVI
YW5kbGVyLmggKi8sCi0JCQkJOTBEOUIwRkExMkUxMURDQjAwMkQ0MjU1IC8qIEV4dGVuc2lvbkJl
aGF2aW9yLmggKi8sCi0JCQkJQTBBQUJFMkExM0FGRTgxMDAwRjJFQkQxIC8qIEZvckxvb3BVbnJv
bGwuY3BwICovLAotCQkJCUEwQUFCRTJCMTNBRkU4MTAwMEYyRUJEMSAvKiBGb3JMb29wVW5yb2xs
LmggKi8sCi0JCQkJOTBEOUIwRkUxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmcuaCAqLywKLQkJ
CQk3MjMwOUE1OTE4M0MyODRFMDAzNzBCOTMgLyogZ2xzbGFuZ19sZXguY3BwICovLAotCQkJCTcy
MzA5QTVBMTgzQzI4NEUwMDM3MEI5MyAvKiBnbHNsYW5nX3RhYi5jcHAgKi8sCi0JCQkJNzIzMDlB
NUIxODNDMjg0RTAwMzcwQjkzIC8qIGdsc2xhbmdfdGFiLmggKi8sCi0JCQkJQTI2NEY4QzUxNjk3
NEUyQTAwNkZBQTVBIC8qIEhhc2hOYW1lcy5oICovLAotCQkJCUZCMzlEMjJBMTIwMEYzNUEwMDA4
OEU2OSAvKiBJbmZvU2luay5jcHAgKi8sCi0JCQkJRkIzOUQyMkIxMjAwRjM1QTAwMDg4RTY5IC8q
IEluZm9TaW5rLmggKi8sCi0JCQkJRkIzOUQyMkMxMjAwRjM1QTAwMDg4RTY5IC8qIEluaXRpYWxp
emUuY3BwICovLAotCQkJCUZCMzlEMjJEMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplLmgg
Ki8sCi0JCQkJRkIzOUQyMkUxMjAwRjM1QTAwMDg4RTY5IC8qIEluaXRpYWxpemVEbGwuY3BwICov
LAotCQkJCUZCMzlEMjJGMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmggKi8sCi0J
CQkJRkIzOUQyMzAxMjAwRjM1QTAwMDg4RTY5IC8qIEluaXRpYWxpemVHbG9iYWxzLmggKi8sCi0J
CQkJQTI2NTY3QjQxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3Bw
ICovLAotCQkJCUZCMzlEMjMxMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplUGFyc2VDb250
ZXh0LmggKi8sCi0JCQkJRkIzOUQyMzIxMjAwRjM1QTAwMDg4RTY5IC8qIEludGVybWVkaWF0ZS5j
cHAgKi8sCi0JCQkJRkIzOUQyMzMxMjAwRjM1QTAwMDg4RTY5IC8qIGludGVybWVkaWF0ZS5oICov
LAotCQkJCUZCMzlEMjM0MTIwMEYzNUEwMDA4OEU2OSAvKiBpbnRlcm1PdXQuY3BwICovLAotCQkJ
CUZCMzlEMjM1MTIwMEYzNUEwMDA4OEU2OSAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8sCi0JCQkJ
RkIzOUQyMzYxMjAwRjM1QTAwMDg4RTY5IC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggKi8sCi0JCQkJ
QTBBQUJFMkUxM0FGRTgzMDAwRjJFQkQxIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCAqLywK
LQkJCQlBMEFBQkUyRjEzQUZFODMwMDBGMkVCRDEgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCAq
LywKLQkJCQlGQjM5RDIzNzEyMDBGMzVBMDAwODhFNjkgLyogTU1hcC5oICovLAotCQkJCUZCMzlE
MjM4MTIwMEYzNUEwMDA4OEU2OSAvKiBvc2luY2x1ZGUuaCAqLywKLQkJCQlGQjM5RDIzOTEyMDBG
MzVBMDAwODhFNjkgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovLAotCQkJCUZCMzlEMjNBMTIwMEYz
NUEwMDA4OEU2OSAvKiBvc3NvdXJjZV93aW4uY3BwICovLAotCQkJCUEwQUFCRTQyMTNBRkU5NDUw
MEYyRUJEMSAvKiBPdXRwdXRFU1NMLmNwcCAqLywKLQkJCQlBMEFBQkU0MzEzQUZFOTQ1MDBGMkVC
RDEgLyogT3V0cHV0RVNTTC5oICovLAotCQkJCUZCMzlEMjNCMTIwMEYzNUEwMDA4OEU2OSAvKiBP
dXRwdXRHTFNMLmNwcCAqLywKLQkJCQlGQjM5RDIzQzEyMDBGMzVBMDAwODhFNjkgLyogT3V0cHV0
R0xTTC5oICovLAotCQkJCUEwQUFCRTMyMTNBRkU4NDcwMEYyRUJEMSAvKiBPdXRwdXRHTFNMQmFz
ZS5jcHAgKi8sCi0JCQkJQTBBQUJFMzMxM0FGRTg0NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xCYXNl
LmggKi8sCi0JCQkJNzIzMDlBNjMxODNDMkFFNTAwMzcwQjkzIC8qIE91dHB1dEhMU0wuY3BwICov
LAotCQkJCTcyMzA5QTY0MTgzQzJBRTUwMDM3MEI5MyAvKiBPdXRwdXRITFNMLmggKi8sCi0JCQkJ
RkIzOUQyM0YxMjAwRjM1QTAwMDg4RTY5IC8qIHBhcnNlQ29uc3QuY3BwICovLAotCQkJCUZCMzlE
MjQyMTIwMEYzNUEwMDA4OEU2OSAvKiBQb29sQWxsb2MuY3BwICovLAotCQkJCUZCMzlEMjQzMTIw
MEYzNUEwMDA4OEU2OSAvKiBQb29sQWxsb2MuaCAqLywKLQkJCQlBMjY1NjdCNTE1OUMyMUIxMDAz
OTg1MzkgLyogUHJhZ21hLmggKi8sCi0JCQkJRkIzOUQyNTYxMjAwRjM1QTAwMDg4RTY5IC8qIFF1
YWxpZmllckFsaXZlLmNwcCAqLywKLQkJCQlGQjM5RDI1NzEyMDBGMzVBMDAwODhFNjkgLyogUXVh
bGlmaWVyQWxpdmUuaCAqLywKLQkJCQlGQjM5RDI1ODEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3Zl
VHJlZS5jcHAgKi8sCi0JCQkJRkIzOUQyNTkxMjAwRjM1QTAwMDg4RTY5IC8qIFJlbW92ZVRyZWUu
aCAqLywKLQkJCQlBMjY1NjdCNjE1OUMyMUIxMDAzOTg1MzkgLyogUmVuYW1lRnVuY3Rpb24uaCAq
LywKLQkJCQk5MEQ5QjEwMDEyRTExRENCMDAyRDQyNTUgLyogU2VhcmNoU3ltYm9sLmNwcCAqLywK
LQkJCQk5MEQ5QjEwMTEyRTExRENCMDAyRDQyNTUgLyogU2VhcmNoU3ltYm9sLmggKi8sCi0JCQkJ
RkIzOUQyNUExMjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcuY3BwICovLAotCQkJCUZCMzlE
MjVCMTIwMEYzNUEwMDA4OEU2OSAvKiBTaEhhbmRsZS5oICovLAotCQkJCUZCMzlEMjVDMTIwMEYz
NUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgKi8sCi0JCQkJRkIzOUQyNUQxMjAwRjM1QTAw
MDg4RTY5IC8qIFN5bWJvbFRhYmxlLmggKi8sCi0JCQkJQTBBQUJFNDYxM0FGRTk2MTAwRjJFQkQx
IC8qIFRyYW5zbGF0b3JFU1NMLmNwcCAqLywKLQkJCQlBMEFBQkU0NzEzQUZFOTYxMDBGMkVCRDEg
LyogVHJhbnNsYXRvckVTU0wuaCAqLywKLQkJCQlGQjM5RDI2ODEyMDBGMzVBMDAwODhFNjkgLyog
VHJhbnNsYXRvckdMU0wuY3BwICovLAotCQkJCUZCMzlEMjY5MTIwMEYzNUEwMDA4OEU2OSAvKiBU
cmFuc2xhdG9yR0xTTC5oICovLAotCQkJCTcyMzA5QTVGMTgzQzJBNjQwMDM3MEI5MyAvKiBUcmFu
c2xhdG9ySExTTC5jcHAgKi8sCi0JCQkJNzIzMDlBNjAxODNDMkE2NDAwMzcwQjkzIC8qIFRyYW5z
bGF0b3JITFNMLmggKi8sCi0JCQkJRkIzOUQyNkMxMjAwRjM1QTAwMDg4RTY5IC8qIFR5cGVzLmgg
Ki8sCi0JCQkJOTBEOUIxMEIxMkUxMURENjAwMkQ0MjU1IC8qIHV0aWwuY3BwICovLAotCQkJCTkw
RDlCMTBDMTJFMTFERDYwMDJENDI1NSAvKiB1dGlsLmggKi8sCi0JCQkJOTBEOUIxMEQxMkUxMURE
NjAwMkQ0MjU1IC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwICovLAotCQkJCTkwRDlCMTBFMTJF
MTFERDYwMDJENDI1NSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmggKi8sCi0JCQkJOTBEOUIxMEYx
MkUxMURENjAwMkQ0MjU1IC8qIFZhcmlhYmxlSW5mby5jcHAgKi8sCi0JCQkJOTBEOUIxMTAxMkUx
MURENjAwMkQ0MjU1IC8qIFZhcmlhYmxlSW5mby5oICovLAotCQkJCUEyNjRGOEM2MTY5NzRFMkEw
MDZGQUE1QSAvKiBWYXJpYWJsZVBhY2tlci5jcHAgKi8sCi0JCQkJQTI2NEY4QzcxNjk3NEUyQTAw
NkZBQTVBIC8qIFZhcmlhYmxlUGFja2VyLmggKi8sCi0JCQkJOTBEOUIxMTExMkUxMURENjAwMkQ0
MjU1IC8qIFZlcnNpb25HTFNMLmNwcCAqLywKLQkJCQk5MEQ5QjExMjEyRTExREQ2MDAyRDQyNTUg
LyogVmVyc2lvbkdMU0wuaCAqLywKIAkJCSk7CiAJCQluYW1lID0gY29tcGlsZXI7CiAJCQlwYXRo
ID0gc3JjL2NvbXBpbGVyOwpAQCAtNTQ5LDE0ICs1ODIsMTMgQEAKIAkJRkIzOUQyNDQxMjAwRjM1
QTAwMDg4RTY5IC8qIHByZXByb2Nlc3NvciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCi0JCQkJNzIzMDlBNTcxODNDMjdGMTAwMzcwQjkzIC8qIEV4cHJlc3Npb25Q
YXJzZXIuY3BwICovLAotCQkJCTcyMzA5QTU1MTgzQzI3REIwMDM3MEI5MyAvKiBUb2tlbml6ZXIu
Y3BwICovLAogCQkJCUEyNjRGODkzMTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9zdGljc0Jhc2Uu
Y3BwICovLAogCQkJCUEyNjRGODk0MTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9zdGljc0Jhc2Uu
aCAqLywKIAkJCQlBMjY0Rjg5NTE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0aXZlSGFuZGxlckJh
c2UuY3BwICovLAogCQkJCUEyNjRGODk2MTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVIYW5k
bGVyQmFzZS5oICovLAogCQkJCUEyNjRGODk3MTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVQ
YXJzZXIuY3BwICovLAogCQkJCUEyNjRGODk4MTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVQ
YXJzZXIuaCAqLywKKwkJCQk3MjMwOUE1NzE4M0MyN0YxMDAzNzBCOTMgLyogRXhwcmVzc2lvblBh
cnNlci5jcHAgKi8sCiAJCQkJQTI2NEY4OUExNjk3NERFRDAwNkZBQTVBIC8qIEV4cHJlc3Npb25Q
YXJzZXIuaCAqLywKIAkJCQlBMjY0Rjg5QjE2OTc0REVEMDA2RkFBNUEgLyogSW5wdXQuY3BwICov
LAogCQkJCUEyNjRGODlDMTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5oICovLApAQCAtNTc0LDYg
KzYwNiw3IEBACiAJCQkJQTI2NEY4QTcxNjk3NERFRDAwNkZBQTVBIC8qIFNvdXJjZUxvY2F0aW9u
LmggKi8sCiAJCQkJQTI2NEY4QTgxNjk3NERFRDAwNkZBQTVBIC8qIFRva2VuLmNwcCAqLywKIAkJ
CQlBMjY0RjhBOTE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uaCAqLywKKwkJCQk3MjMwOUE1NTE4
M0MyN0RCMDAzNzBCOTMgLyogVG9rZW5pemVyLmNwcCAqLywKIAkJCQlBMjY0RjhBQjE2OTc0REVE
MDA2RkFBNUEgLyogVG9rZW5pemVyLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IHByZXByb2Nlc3Nv
cjsKQEAgLTU5NSw1OSArNjI4LDgxIEBACiAJCQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsK
IAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQkzMTAx
MkUzQzE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTA4QzNDREQxNkQ2Q0I2MTAwM0YwQjgzIC8qIEFycmF5Qm91bmRzQ2xhbXBl
ci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDk5NTFDMEExNEI3QUFEODAwNjBFOTZFIC8qIEJ1aWx0
SW5GdW5jdGlvbkVtdWxhdG9yLmggaW4gSGVhZGVycyAqLywKLQkJCQlBMjY1NjgzQTE1OUMyM0Ux
MDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmggaW4gSGVhZGVycyAqLywKLQkJCQlBMjY1Njgz
QzE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJQTI2NTY4M0UxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1
dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2NTY3QkMxNTlDMjFCMTAwMzk4NTM5IC8qIERpYWdu
b3N0aWNzLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkUzRTE4Qjk3QjlCMDAzOTA2MkYgLyog
SW5pdGlhbGl6ZVZhcmlhYmxlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFMTQxOEI5N0I5
QjAwMzkwNjJGIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkzMTAxMkU1NTE4Qjk3QjlCMDAzOTA2MkYgLyogUGFyc2VDb250ZXh0LmggaW4gSGVhZGVycyAq
LywKKwkJCQkzMTAxMkUyQzE4Qjk3QjlCMDAzOTA2MkYgLyogRm9yTG9vcFVucm9sbC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMzEwMTJFNkQxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JHTFNM
LmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkU0NjE4Qjk3QjlCMDAzOTA2MkYgLyogTU1hcC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNkIxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0
b3JFU1NMLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkUxNjE4Qjk3QjlCMDAzOTA2MkYgLyog
Q29tbW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkUyMDE4Qjk3QjlCMDAzOTA2MkYgLyog
RGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkU3QzE4Qjk3
QjlCMDAzOTA2MkYgLyogVmFyaWFibGVJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkU2
MTE4Qjk3QjlCMDAzOTA2MkYgLyogU2VhcmNoU3ltYm9sLmggaW4gSGVhZGVycyAqLywKKwkJCQkz
MTAxMkU0NzE4Qjk3QjlCMDAzOTA2MkYgLyogTm9kZVNlYXJjaC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTI2NEY4QUQxNjk3NERFRDAwNkZBQTVBIC8qIERpYWdub3N0aWNzQmFzZS5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJQTI2NTY3QkUxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIu
aCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTRDMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRF
U1NMLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkU1RjE4Qjk3QjlCMDAzOTA2MkYgLyogUmV3
cml0ZUVsc2VCbG9ja3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEFGMTY5NzRERUQwMDZG
QUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJF
N0UxOEI5N0I5QjAwMzkwNjJGIC8qIFZhcmlhYmxlUGFja2VyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkzMTAxMkU1MDE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0R0xTTEJhc2UuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTMxMDEyRTQwMThCOTdCOUIwMDM5MDYyRiAvKiBpbnRlcm1lZGlhdGUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTMxMDEyRTI1MThCOTdCOUIwMDM5MDYyRiAvKiBEZXRlY3REaXNjb250
aW51aXR5LmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkU1RDE4Qjk3QjlCMDAzOTA2MkYgLyog
UmVuYW1lRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTNBMThCOTdCOUIwMDM5
MDYyRiAvKiBJbml0aWFsaXplR2xvYmFscy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNDUx
OEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmggaW4gSGVhZGVycyAqLywK
KwkJCQkzMTAxMkU4MDE4Qjk3QjlCMDAzOTA2MkYgLyogVmVyc2lvbkdMU0wuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTMxMDEyRTI3MThCOTdCOUIwMDM5MDYyRiAvKiBEaWFnbm9zdGljcy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMzEwMTJFMzIxOEI5N0I5QjAwMzkwNjJGIC8qIGdsc2xhbmdfdGFiLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhCMTE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0aXZl
UGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkU1ODE4Qjk3QjlCMDAzOTA2MkYgLyog
UHJhZ21hLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkU2NTE4Qjk3QjlCMDAzOTA2MkYgLyog
U3ltYm9sVGFibGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTc0MThCOTdCOUIwMDM5MDYy
RiAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTcy
MThCOTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUEyNjRGOEIzMTY5NzRERUQwMDZGQUE1QSAvKiBFeHByZXNzaW9uUGFyc2VyLmggaW4gSGVh
ZGVycyAqLywKLQkJCQk3MjMwOUE0RjE4M0MyNTlFMDAzNzBCOTMgLyogVW5mb2xkU2hvcnRDaXJj
dWl0QVNULmggaW4gSGVhZGVycyAqLywKLQkJCQk5MEQ5QjEwMzEyRTExRENCMDAyRDQyNTUgLyog
RXh0ZW5zaW9uQmVoYXZpb3IuaCBpbiBIZWFkZXJzICovLAotCQkJCTcyMzA5QTVFMTgzQzI4NTMw
MDM3MEI5MyAvKiBnbHNsYW5nX3RhYi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNzIzMDlBNzIxODND
MkJFODAwMzcwQjkzIC8qIFVuaWZvcm0uaCBpbiBIZWFkZXJzICovLAotCQkJCTcyMzA5QTY2MTgz
QzJBRTUwMDM3MEI5MyAvKiBPdXRwdXRITFNMLmggaW4gSGVhZGVycyAqLywKLQkJCQlBMEFBQkUy
RDEzQUZFODEwMDBGMkVCRDEgLyogRm9yTG9vcFVucm9sbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
OTBEOUIxMDcxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmcuaCBpbiBIZWFkZXJzICovLAotCQkJ
CUEyNjRGOEM4MTY5NzRFMkEwMDZGQUE1QSAvKiBIYXNoTmFtZXMuaCBpbiBIZWFkZXJzICovLAot
CQkJCTcyMzA5QTYyMTgzQzJBNzQwMDM3MEI5MyAvKiBUcmFuc2xhdG9ySExTTC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMzEwMTJFNUMxOEI5N0I5QjAwMzkwNjJGIC8qIFJlbW92ZVRyZWUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTMxMDEyRTQ4MThCOTdCOUIwMDM5MDYyRiAvKiBvc2luY2x1ZGUuaCBp
biBIZWFkZXJzICovLAorCQkJCTMxMDEyRTM1MThCOTdCOUIwMDM5MDYyRiAvKiBJbmZvU2luay5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFMUMxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVu
Y3lHcmFwaC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNjMxOEI5N0I5QjAwMzkwNjJGIC8q
IFNoSGFuZGxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkU3MDE4Qjk3QjlCMDAzOTA2MkYg
LyogVHlwZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTY3MThCOTdCOUIwMDM5MDYyRiAv
KiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAx
MkU0MzE4Qjk3QjlCMDAzOTA2MkYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCBpbiBIZWFkZXJzICov
LAorCQkJCTMxMDEyRTc4MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBMjY0RjhCNTE2OTc0REVEMDA2RkFBNUEgLyogSW5wdXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUEyNjRGOENEMTY5NzYyQUEwMDZGQUE1QSAvKiBraHJwbGF0Zm9ybS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDk5NTFDMDMxNEI3QUFCMzAwNjBFOTZFIC8qIGxlbmd0aF9saW1pdHMuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTMxMDEyRTc2MThCOTdCOUIwMDM5MDYyRiAvKiBVbmlmb3JtLmggaW4g
SGVhZGVycyAqLywKKwkJCQkzMTAxMkUyMzE4Qjk3QjlCMDAzOTA2MkYgLyogRGV0ZWN0Q2FsbERl
cHRoLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkUzOTE4Qjk3QjlCMDAzOTA2MkYgLyogSW5p
dGlhbGl6ZURsbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4QjcxNjk3NERFRDAwNkZBQTVB
IC8qIExleGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkU4NDE4Qjk3Qzg2MDAzOTA2MkYg
LyogY29tcGlsZXJkZWJ1Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4QjkxNjk3NERFRDAw
NkZBQTVBIC8qIE1hY3JvLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkU1QTE4Qjk3QjlCMDAz
OTA2MkYgLyogUXVhbGlmaWVyQWxpdmUuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTU3MThC
OTdCOUIwMDM5MDYyRiAvKiBQb29sQWxsb2MuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTM3
MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAx
MkU1MjE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0SExTTC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MzEwMTJFMUExOEI5N0I5QjAwMzkwNjJGIC8qIENvbnN0YW50VW5pb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCUEyNjRGOEJCMTY5NzRERUQwMDZGQUE1QSAvKiBNYWNyb0V4cGFuZGVyLmggaW4gSGVh
ZGVycyAqLywKLQkJCQk3MjMwOUE1NDE4M0MyNUFEMDAzNzBCOTMgLyogSW5pdGlhbGl6ZUdMUG9z
aXRpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCUEwQUFCRTMxMTNBRkU4MzAwMEYyRUJEMSAvKiBN
YXBMb25nVmFyaWFibGVOYW1lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFMkQxOEI5N0I5
QjAwMzkwNjJGIC8qIGdsc2xhbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEJDMTY5NzRE
RUQwMDZGQUE1QSAvKiBudW1lcmljX2xleC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTBBQUJFNDUx
M0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuaCBpbiBIZWFkZXJzICovLAotCQkJCTcyMzA5
QTcwMTgzQzJCRTgwMDM3MEI5MyAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCBpbiBIZWFkZXJzICov
LAotCQkJCUEwQUFCRTM1MTNBRkU4NDcwMEYyRUJEMSAvKiBPdXRwdXRHTFNMQmFzZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMzEwMTJFNjkxOEI5N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0VmVydGV4
U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhCRDE2OTc0REVEMDA2RkFB
NUEgLyogcHBfdXRpbHMuaCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2N0MwMTU5QzIxQjEwMDM5
ODUzOSAvKiBQcmFnbWEuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTJBMThCOTdCOUIwMDM5
MDYyRiAvKiBFeHRlbnNpb25CZWhhdmlvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNkYx
OEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JITFNMLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
MjY0RjhCRjE2OTc0REVEMDA2RkFBNUEgLyogUHJlcHJvY2Vzc29yLmggaW4gSGVhZGVycyAqLywK
LQkJCQlBMjY1NjdDMTE1OUMyMUIxMDAzOTg1MzkgLyogUmVuYW1lRnVuY3Rpb24uaCBpbiBIZWFk
ZXJzICovLAotCQkJCTcyMzA5QTUyMTgzQzI1QTcwMDM3MEI5MyAvKiBOb2RlU2VhcmNoLmggaW4g
SGVhZGVycyAqLywKLQkJCQlBMjY1Njg0MTE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFn
bWVudFNoYWRlclRpbWluZy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNzIzMDlBNkUxODNDMkJFODAw
MzcwQjkzIC8qIERldGVjdERpc2NvbnRpbnVpdHkuaCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2
ODQzMTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJOTBEOUIxMEExMkUxMURDQjAwMkQ0MjU1IC8qIFNlYXJjaFN5bWJvbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRkIzOUQ3NkUxMjAxMTBGQzAwMDg4RTY5IC8qIFNoYWRlckxh
bmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEMwMTY5NzRERUQwMDZGQUE1QSAvKiBTb3Vy
Y2VMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNEUxOEI5N0I5QjAwMzkwNjJG
IC8qIE91dHB1dEdMU0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTFFMThCOTdCOUIwMDM5
MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAx
MkU3QTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMzEwMTJFMzMxOEI5N0I5QjAwMzkwNjJGIC8qIEhhc2hOYW1lcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTI2NEY4QzIxNjk3NERFRDAwNkZBQTVBIC8qIFRva2VuLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkzMTAxMkUyOTE4Qjk3QjlCMDAzOTA2MkYgLyogRGlyZWN0aXZlSGFuZGxlci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFMTIxOEI5N0I5QjAwMzkwNjJGIC8qIEJhc2VUeXBl
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4QzQxNjk3NERFRDAwNkZBQTVBIC8qIFRva2Vu
aXplci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTBBQUJFNDkxM0FGRTk2MTAwRjJFQkQxIC8qIFRy
YW5zbGF0b3JFU1NMLmggaW4gSGVhZGVycyAqLywKLQkJCQk5MEQ5QjExNDEyRTExREQ2MDAyRDQy
NTUgLyogdXRpbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTBEOUIxMTYxMkUxMURENjAwMkQ0MjU1
IC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuaCBpbiBIZWFkZXJzICovLAotCQkJCTcyMzA5QTUxMTgz
QzI1QTUwMDM3MEI5MyAvKiBQYXJzZUNvbnRleHQuaCBpbiBIZWFkZXJzICovLAotCQkJCTkwRDlC
MTE4MTJFMTFERDYwMDJENDI1NSAvKiBWYXJpYWJsZUluZm8uaCBpbiBIZWFkZXJzICovLAotCQkJ
CUEyNjRGOENBMTY5NzRFMkEwMDZGQUE1QSAvKiBWYXJpYWJsZVBhY2tlci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJOTBEOUIxMUExMkUxMURENjAwMkQ0MjU1IC8qIFZlcnNpb25HTFNMLmggaW4gSGVh
ZGVycyAqLywKLQkJCQk1Q0IxM0ZENTE3OURCM0ZEMDAxRjg1MUQgLyogRGV0ZWN0Q2FsbERlcHRo
LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKQEAgLTcyMyw2OCArNzc4LDY5IEBACiAJCQlpc2EgPSBQQlhTb3Vy
Y2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxl
cyA9ICgKKwkJCQkzMTAxMkUyNjE4Qjk3QjlCMDAzOTA2MkYgLyogRGlhZ25vc3RpY3MuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFM0QxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVW
YXJpYWJsZXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFN0YxOEI5N0I5QjAwMzkwNjJG
IC8qIFZlcnNpb25HTFNMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEwOEMzQ0RDMTZENkNCNjEw
MDNGMEI4MyAvKiBBcnJheUJvdW5kc0NsYW1wZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDk5
NTFDMDkxNEI3QUFEODAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTcyMzA5QTVEMTgzQzI4NTMwMDM3MEI5MyAvKiBnbHNsYW5nX3RhYi5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQk5MEQ5QjEwMjEyRTExRENCMDAyRDQyNTUgLyogQ29tcGls
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIzOUQyNzUxMjAwRjM1QTAwMDg4RTY5IC8qIGRl
YnVnLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyNjU2ODM5MTU5QzIzRTEwMDM5ODUzOSAvKiBE
ZXBlbmRlbmN5R3JhcGguY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTI2NTY4M0IxNTlDMjNFMTAw
Mzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
QTI2NTY4M0QxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQlBMjY1NjgzRjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdy
YXBoVHJhdmVyc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTI2NTY3QkIxNTlDMjFCMTAwMzk4
NTM5IC8qIERpYWdub3N0aWNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcyMzA5QTU2MTgzQzI3
REUwMDM3MEI5MyAvKiBUb2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNzIzMDlBNTAx
ODNDMjVBMTAwMzcwQjkzIC8qIFBhcnNlQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk3
MjMwOUE3MTE4M0MyQkU4MDAzNzBCOTMgLyogVW5pZm9ybS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkzMTAxMkU2QzE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTI2NEY4QUMxNjk3NERFRDAwNkZBQTVBIC8qIERpYWdub3N0aWNzQmFzZS5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjY1NjdCRDE1OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0
aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkUxNTE4Qjk3QjlCMDAzOTA2
MkYgLyogQ29kZUdlbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkUzRjE4Qjk3QjlCMDAz
OTA2MkYgLyogSW50ZXJtZWRpYXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTNCMThC
OTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTMxMDEyRTMxMThCOTdCOUIwMDM5MDYyRiAvKiBnbHNsYW5nX3RhYi5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkzMTAxMkUyMTE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBo
VHJhdmVyc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFNUUxOEI5N0I5QjAwMzkwNjJG
IC8qIFJld3JpdGVFbHNlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTU0MThC
OTdCOUIwMDM5MDYyRiAvKiBQYXJzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2
NEY4QUUxNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTMxMDEyRTc1MThCOTdCOUIwMDM5MDYyRiAvKiBVbmlmb3JtLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTMxMDEyRTREMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRHTFNMLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTMwMThCOTdCOUIwMDM5MDYyRiAvKiBnbHNsYW5n
X2xleC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkU0MTE4Qjk3QjlCMDAzOTA2MkYgLyog
aW50ZXJtT3V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTZFMThCOTdCOUIwMDM5MDYy
RiAvKiBUcmFuc2xhdG9ySExTTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMjY0RjhCMDE2OTc0
REVEMDA2RkFBNUEgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEw
QUFCRTJDMTNBRkU4MTAwMEYyRUJEMSAvKiBGb3JMb29wVW5yb2xsLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCUZCMzlEMjc5MTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQk3MjMwOUE2MTE4M0MyQTc0MDAzNzBCOTMgLyogVHJhbnNsYXRvckhMU0wuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJRkIzOUQyN0IxMjAwRjM1QTAwMDg4RTY5IC8qIEluaXRpYWxp
emUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIzOUQyN0QxMjAwRjM1QTAwMDg4RTY5IC8qIElu
aXRpYWxpemVEbGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFNDkxOEI5N0I5QjAwMzkw
NjJGIC8qIG9zc291cmNlX3Bvc2l4LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTQyMThC
OTdCOUIwMDM5MDYyRiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkz
MTAxMkU2MDE4Qjk3QjlCMDAzOTA2MkYgLyogU2VhcmNoU3ltYm9sLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTcyMzA5QTU4MTgzQzI3RjMwMDM3MEI5MyAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBp
biBTb3VyY2VzICovLAotCQkJCUEyNjU2N0JGMTU5QzIxQjEwMDM5ODUzOSAvKiBJbml0aWFsaXpl
UGFyc2VDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTI4MThCOTdCOUIwMDM5
MDYyRiAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTU5
MThCOTdCOUIwMDM5MDYyRiAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkzMTAxMkU3MTE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTMxMDEyRTY0MThCOTdCOUIwMDM5MDYyRiAvKiBTeW1ib2xUYWJsZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBMjY0RjhCNDE2OTc0REVEMDA2RkFBNUEgLyogSW5wdXQu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIzOUQyODExMjAwRjM1QTAwMDg4RTY5IC8qIEludGVy
bWVkaWF0ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI4MzEyMDBGMzVBMDAwODhFNjkg
LyogaW50ZXJtT3V0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlEMjg0MTIwMEYzNUEwMDA4
OEU2OSAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMjY0RjhCNjE2
OTc0REVEMDA2RkFBNUEgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFNjIx
OEI5N0I5QjAwMzkwNjJGIC8qIFNoYWRlckxhbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEw
MTJFMzgxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVEbGwuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTI2NEY4QjgxNjk3NERFRDAwNkZBQTVBIC8qIE1hY3JvLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTMxMDEyRTVCMThCOTdCOUIwMDM5MDYyRiAvKiBSZW1vdmVUcmVlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUEyNjRGOEJBMTY5NzRERUQwMDZGQUE1QSAvKiBNYWNyb0V4cGFuZGVyLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUEwQUFCRTMwMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25n
VmFyaWFibGVOYW1lcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI4ODEyMDBGMzVBMDAw
ODhFNjkgLyogb3Nzb3VyY2VfcG9zaXguY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTBBQUJFNDQx
M0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIz
OUQyOEExMjAwRjM1QTAwMDg4RTY5IC8qIE91dHB1dEdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJQTBBQUJFMzQxM0FGRTg0NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xCYXNlLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCUZCMzlEMjhFMTIwMEYzNUEwMDA4OEU2OSAvKiBwYXJzZUNvbnN0LmNwcCBp
biBTb3VyY2VzICovLAotCQkJCTcyMzA5QTY1MTgzQzJBRTUwMDM3MEI5MyAvKiBPdXRwdXRITFNM
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlEMjkxMTIwMEYzNUEwMDA4OEU2OSAvKiBQb29s
QWxsb2MuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNzIzMDlBNTMxODNDMjVBQTAwMzcwQjkzIC8q
IEluaXRpYWxpemVHTFBvc2l0aW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTcyMzA5QTZEMTgz
QzJCRTgwMDM3MEI5MyAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTcyMzA5QTZGMTgzQzJCRTgwMDM3MEI5MyAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJNzIzMDlBNUMxODNDMjg1MzAwMzcwQjkzIC8qIGdsc2xhbmdfbGV4
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTczMThCOTdCOUIwMDM5MDYyRiAvKiBVbmZv
bGRTaG9ydENpcmN1aXRBU1QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFMjQxOEI5N0I5
QjAwMzkwNjJGIC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MzEwMTJFNjgxOEI5N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTEzMThCOTdCOUIwMDM5MDYyRiAvKiBCdWlsdElu
RnVuY3Rpb25FbXVsYXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkUzNDE4Qjk3QjlC
MDAzOTA2MkYgLyogSW5mb1NpbmsuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFNTMxOEI5
N0I5QjAwMzkwNjJGIC8qIHBhcnNlQ29uc3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJF
NDQxOEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTMxMDEyRTU2MThCOTdCOUIwMDM5MDYyRiAvKiBQb29sQWxsb2MuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMzEwMTJFNjYxOEI5N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFNzkxOEI5N0I5QjAw
MzkwNjJGIC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEw
MTJFODMxOEI5N0M4NjAwMzkwNjJGIC8qIGNvbXBpbGVyZGVidWcuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMzEwMTJFNzcxOEI5N0I5QjAwMzkwNjJGIC8qIHV0aWwuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMzEwMTJFNTExOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEhMU0wuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMzEwMTJFMzYxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemUuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFN0IxOEI5N0I5QjAwMzkwNjJGIC8qIFZhcmlhYmxlSW5m
by5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkUxRDE4Qjk3QjlCMDAzOTA2MkYgLyogRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkU3RDE4Qjk3
QjlCMDAzOTA2MkYgLyogVmFyaWFibGVQYWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEw
MTJFMUYxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkzMTAxMkU0QjE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0RVNTTC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBMjY0RjhCRTE2OTc0REVEMDA2RkFBNUEgLyogUHJlcHJvY2Vz
c29yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTcyMzA5QTREMTgzQzI1OTMwMDM3MEI5MyAvKiBD
b2RlR2VuLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlEMkE0MTIwMEYzNUEwMDA4OEU2OSAv
KiBRdWFsaWZpZXJBbGl2ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDJBNjEyMDBGMzVB
MDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjY1Njg0MDE1
OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQlBMjY1Njg0MjE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhT
aGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOTBEOUIxMDkxMkUxMURDQjAwMkQ0
MjU1IC8qIFNlYXJjaFN5bWJvbC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDJBODEyMDBG
MzVBMDAwODhFNjkgLyogU2hhZGVyTGFuZy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDJB
QTEyMDBGMzVBMDAwODhFNjkgLyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MzEwMTJFMkIxOEI5N0I5QjAwMzkwNjJGIC8qIEZvckxvb3BVbnJvbGwuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMzEwMTJFMjIxOEI5N0I5QjAwMzkwNjJGIC8qIERldGVjdENhbGxEZXB0aC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkUxNzE4Qjk3QjlCMDAzOTA2MkYgLyogQ29tcGlsZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFNkExOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5z
bGF0b3JFU1NMLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTRGMThCOTdCOUIwMDM5MDYy
RiAvKiBPdXRwdXRHTFNMQmFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkUxQjE4Qjk3
QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEy
NjRGOEMxMTY5NzRERUQwMDZGQUE1QSAvKiBUb2tlbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlB
MEFBQkU0ODEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJRkIzOUQyQUMxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCBp
biBTb3VyY2VzICovLAotCQkJCTkwRDlCMTEzMTJFMTFERDYwMDJENDI1NSAvKiB1dGlsLmNwcCBp
biBTb3VyY2VzICovLAotCQkJCTkwRDlCMTE1MTJFMTFERDYwMDJENDI1NSAvKiBWYWxpZGF0ZUxp
bWl0YXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTkwRDlCMTE3MTJFMTFERDYwMDJENDI1
NSAvKiBWYXJpYWJsZUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTI2NEY4QzkxNjk3NEUy
QTAwNkZBQTVBIC8qIFZhcmlhYmxlUGFja2VyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTkwRDlC
MTE5MTJFMTFERDYwMDJENDI1NSAvKiBWZXJzaW9uR0xTTC5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQk1Q0IxM0ZENDE3OURCM0ZEMDAxRjg1MUQgLyogRGV0ZWN0Q2FsbERlcHRoLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCTcyMzA5QTRFMTgzQzI1OUMwMDM3MEI5MyAvKiBVbmZvbGRTaG9ydENpcmN1
aXRBU1QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0dOVW1ha2VmaWxl
LmFtCmluZGV4IDRjMTRhYzE3NTFlNzJkODk5Yzk1M2IyZWVlOWZlNTk3YzNhNDFiMTYuLjkyNDA5
MzhlMDNmZDRlZjg4OWUyMDlmYmFjN2M1NTc1OGQxMThmOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL0dOVW1ha2VmaWxlLmFtCkBAIC0zMCw3MSArMzAsMTEzIEBAIGxpYkFOR0xFX2xhX1NPVVJD
RVMgPSBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxh
bmcuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9LSFIva2hycGxhdGZvcm0u
aCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9hbmdsZXV0aWxzLmggXAot
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CYXNlVHlwZXMuaCBcCi0JU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9y
LmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0J1aWx0SW5GdW5j
dGlvbkVtdWxhdG9yLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9D
b2RlR2VuLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbW1v
bi5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIuY3Bw
IFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29uc3RhbnRVbmlvbi5o
IFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuY3BwIFwKLQlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuaCBcCi0JU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXIuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgv
RGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNwcCBcCi0JU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIFwKLQlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBo
T3V0cHV0LmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdy
YXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwIFwKLQlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0Q2FsbERlcHRoLmNwcCBcCi0J
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdENhbGxEZXB0aC5oIFwK
LQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuY3BwIFwK
LQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaCBcCi0J
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuY3Bw
IFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxl
ci5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29u
dGludWl0eS5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRl
Y3REaXNjb250aW51aXR5LmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9FeHRlbnNpb25CZWhhdmlvci5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvRm9yTG9vcFVucm9sbC5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9Gb3JMb29wVW5yb2xsLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9nbHNsYW5nLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9IYXNoTmFtZXMuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0lu
Zm9TaW5rLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luZm9T
aW5rLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXpl
LmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVE
bGwuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6
ZURsbC5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6
ZUdsb2JhbHMuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRp
YWxpemVHTFBvc2l0aW9uLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0luaXRpYWxpemVHTFBvc2l0aW9uLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9Jbml0aWFsaXplLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaCBcCi0JU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAgXAotCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaCBcCi0JU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5jcHAgXAotCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1UcmF2ZXJzZS5jcHAgXAotCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9sb2NhbGludGVybWVkaWF0ZS5oIFwKLQlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3Bw
IFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxl
TmFtZXMuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL01NYXAuaCBc
Ci0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL05vZGVTZWFyY2guaCBcCi0J
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL29zaW5jbHVkZS5oIFwKLQlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3Nzb3VyY2VfcG9zaXguY3BwIFwKLQlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0RVNTTC5jcHAgXAotCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRFU1NMLmggXAotCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5jcHAgXAotCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5oIFwKLQlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTC5jcHAgXAotCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMLmggXAotCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcCBcCi0JU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuaCBcCi0JU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3BhcnNlQ29uc3QuY3BwIFwKLQlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VDb250ZXh0LmNwcCBcCi0JU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlQ29udGV4dC5oIFwKLQlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmNwcCBcCi0JU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvUHJhZ21hLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Jhc2VUeXBlcy5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5j
cHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0J1
aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL0NvZGVHZW4uY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21tb24uaCBcCisJU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuY3BwIFwKKwlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmggXAor
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2NvbXBpbGVy
ZGVidWcuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9jb21waWxlcmRlYnVnLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIFwKKwlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9E
ZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAgXAorCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVu
ZGVuY3lHcmFwaC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIFwKKwlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5
R3JhcGhPdXRwdXQuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EZXRlY3RDYWxsRGVwdGgu
Y3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9E
ZXRlY3RDYWxsRGVwdGguaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvRGlhZ25vc3RpY3MuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmNwcCBcCisJ
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZl
SGFuZGxlci5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9EZXRlY3REaXNjb250aW51aXR5LmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0RGlzY29udGludWl0eS5oIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9FeHRlbnNpb25CZWhhdmlv
ci5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9G
b3JMb29wVW5yb2xsLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvRm9yTG9vcFVucm9sbC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0hhc2hOYW1lcy5oIFwKKwlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5jcHAgXAorCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luZm9TaW5rLmggXAor
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxp
emUuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9Jbml0aWFsaXplLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL0luaXRpYWxpemVEbGwuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplRGxsLmggXAorCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVHbG9iYWxzLmggXAor
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxp
emVHTFBvc2l0aW9uLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvSW5pdGlhbGl6ZUdMUG9zaXRpb24uaCBcCisJU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAg
XAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRp
YWxpemVQYXJzZUNvbnRleHQuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVZhcmlhYmxlcy5jcHAgXAorCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVWYXJpYWJsZXMuaCBc
CisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJt
ZWRpYXRlLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvaW50ZXJtZWRpYXRlLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL2ludGVybU91dC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybVRyYXZlcnNlLmNwcCBcCisJU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvbG9jYWxpbnRlcm1lZGlhdGUu
aCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTWFw
TG9uZ1ZhcmlhYmxlTmFtZXMuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5oIFwKKwlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9NTWFwLmggXAorCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL05vZGVTZWFyY2guaCBcCisJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Ivb3NpbmNsdWRlLmgg
XAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL29zc291
cmNlX3Bvc2l4LmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvT3V0cHV0RVNTTC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL091dHB1dEVTU0wuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuY3BwIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMQmFzZS5o
IFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRw
dXRHTFNMLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvT3V0cHV0R0xTTC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9PdXRwdXRITFNMLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0SExTTC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9wYXJzZUNvbnN0LmNwcCBcCisJU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmNw
cCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUGFy
c2VDb250ZXh0LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1Bvb2xBbGxvYy5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1Bvb2xBbGxvYy5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9QcmFnbWEuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUXVhbGlmaWVyQWxpdmUuY3BwIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9RdWFsaWZpZXJBbGl2ZS5o
IFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZW1v
dmVUcmVlLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvUmVtb3ZlVHJlZS5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9SZW5hbWVGdW5jdGlvbi5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZXdyaXRlRWxzZUJsb2Nrcy5jcHAgXAorCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Jld3JpdGVFbHNlQmxv
Y2tzLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1NlYXJjaFN5bWJvbC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1NlYXJjaFN5bWJvbC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9TaGFkZXJMYW5nLmNwcCBcCisJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU2hIYW5kbGUuaCBcCisJU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuY3BwIFwK
KwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xU
YWJsZS5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgXAorCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgXAorCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0
cmljdFZlcnRleFNoYWRlclRpbWluZy5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yRVNTTC5jcHAgXAorCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JFU1NMLmggXAorCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JH
TFNMLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvckdMU0wuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckhMU0wuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9ySExTTC5oIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oIFwKKwlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENp
cmN1aXRBU1QuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBcCisJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRD
aXJjdWl0LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1VuaWZvcm0uY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9Vbmlmb3JtLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL3V0aWwuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci91dGlsLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUxpbWl0YXRp
b25zLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1ZhcmlhYmxlSW5mby5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZVBhY2tlci5jcHAgXAorCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlUGFja2VyLmggXAor
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZlcnNpb25H
TFNMLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVmVyc2lvbkdMU0wuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9EaWFnbm9zdGljc0Jhc2UuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpYWdub3N0aWNzQmFzZS5oIFwKIAlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZUhh
bmRsZXJCYXNlLmNwcCBcCkBAIC0xMjEsNDMgKzE2Myw1IEBAIGxpYkFOR0xFX2xhX1NPVVJDRVMg
PSBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9U
b2tlbi5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL1Rva2VuaXplci5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9SZW5hbWVGdW5jdGlvbi5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvU2VhcmNoU3ltYm9sLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1NlYXJjaFN5bWJvbC5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9TaEhhbmRsZS5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvU3ltYm9sVGFibGUuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvU3ltYm9sVGFibGUuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBcCi0JU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVy
VGltaW5nLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcv
UmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggXAotCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5jcHAgXAot
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5oIFwK
LQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3Bw
IFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wu
aCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNM
LmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JI
TFNMLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UeXBlcy5oIFwK
LQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0
QVNULmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNo
b3J0Q2lyY3VpdEFTVC5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
VW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvVW5pZm9ybS5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9Vbmlmb3JtLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci91dGlsLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3V0aWwu
aCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRh
dGlvbnMuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFsaWRh
dGVMaW1pdGF0aW9ucy5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
VmFyaWFibGVJbmZvLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1ZhcmlhYmxlSW5mby5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
VmFyaWFibGVQYWNrZXIuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvVmFyaWFibGVQYWNrZXIuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1ZlcnNpb25HTFNMLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1ZlcnNpb25HTFNMLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9w
YXJ0eS9jb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvY29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmgKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJM
YW5nLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFu
Zy5oCmluZGV4IDQwZDJkMjY0MDQ4MTM3MGVkOWI2MDMwYjAyZjg1NjAzYTU5ODYzZjIuLjJlMWRj
ZjMwMWVkMjhmYjM0ZDM5NGJkMTFkZDgyZTUzNzk2OWNjNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaApAQCAtMTg0LDgg
KzE4NCw4IEBAIHR5cGVkZWYgZW51bSB7CiAgIC8vIFRoaXMgZmxhZyBsaW1pdHMgdGhlIGRlcHRo
IG9mIHRoZSBjYWxsIHN0YWNrLgogICBTSF9MSU1JVF9DQUxMX1NUQUNLX0RFUFRIID0gMHg0MDAw
LAogCi0gIC8vIFRoaXMgZmxhZyBpbml0aWFsaXplcyBnbF9Qb3NpdGlvbiB0byB2ZWM0KDAuMCwg
MC4wLCAwLjAsIDEuMCkgYXQKLSAgLy8gdGhlIGJlZ2lubmluZyBvZiB0aGUgdmVydGV4IHNoYWRl
ciwgYW5kIGhhcyBubyBlZmZlY3QgaW4gdGhlCisgIC8vIFRoaXMgZmxhZyBpbml0aWFsaXplcyBn
bF9Qb3NpdGlvbiB0byB2ZWM0KDAsMCwwLDApIGF0IHRoZQorICAvLyBiZWdpbm5pbmcgb2YgdGhl
IHZlcnRleCBzaGFkZXIncyBtYWluKCksIGFuZCBoYXMgbm8gZWZmZWN0IGluIHRoZQogICAvLyBm
cmFnbWVudCBzaGFkZXIuIEl0IGlzIGludGVuZGVkIGFzIGEgd29ya2Fyb3VuZCBmb3IgZHJpdmVy
cyB3aGljaAogICAvLyBpbmNvcnJlY3RseSBmYWlsIHRvIGxpbmsgcHJvZ3JhbXMgaWYgZ2xfUG9z
aXRpb24gaXMgbm90IHdyaXR0ZW4uCiAgIFNIX0lOSVRfR0xfUE9TSVRJT04gPSAweDgwMDAsCkBA
IC0xOTYsNiArMTk2LDEyIEBAIHR5cGVkZWYgZW51bSB7CiAgIC8vIFRoaXMgaXMgdG8gd29yayBh
cm91bmQgYSBNYWNPU1ggZHJpdmVyIGJ1ZyB0aGF0IHxifCBpcyBleGVjdXRlZAogICAvLyBpbmRl
cGVuZGVudCBvZiB8YXwncyB2YWx1ZS4KICAgU0hfVU5GT0xEX1NIT1JUX0NJUkNVSVQgPSAweDEw
MDAwLAorCisgIC8vIFRoaXMgZmxhZyBpbml0aWFsaXplcyB2YXJ5aW5ncyB3aXRob3V0IHN0YXRp
YyB1c2UgaW4gdmVydGV4IHNoYWRlcgorICAvLyBhdCB0aGUgYmVnaW5uaW5nIG9mIG1haW4oKSwg
YW5kIGhhcyBubyBlZmZlY3RzIGluIHRoZSBmcmFnbWVudCBzaGFkZXIuCisgIC8vIEl0IGlzIGlu
dGVuZGVkIGFzIGEgd29ya2Fyb3VuZCBmb3IgZHJpdmVycyB3aGljaCBpbmNvcnJlY3RseSBvcHRp
bWl6ZQorICAvLyBvdXQgc3VjaCB2YXJ5aW5ncyBhbmQgY2F1c2UgYSBsaW5rIGZhaWx1cmUuCisg
IFNIX0lOSVRfVkFSWUlOR1NfV0lUSE9VVF9TVEFUSUNfVVNFID0gMHgyMDAwMCwKIH0gU2hDb21w
aWxlT3B0aW9uczsKIAogLy8gRGVmaW5lcyBhbHRlcm5hdGUgc3RyYXRlZ2llcyBmb3IgaW1wbGVt
ZW50aW5nIGFycmF5IGluZGV4IGNsYW1waW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvaW5jbHVkZS9LSFIva2hycGxhdGZvcm0uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL2luY2x1ZGUvS0hSL2tocnBsYXRmb3JtLmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEw
MDc1NQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9SZWZD
b3VudE9iamVjdC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1JlZkNv
dW50T2JqZWN0LmNwcAppbmRleCAwMzY0YWRmMmNkNTUxNTg3MDQyNWIwMGRhY2RkOTg3OGZkOWFm
ODQ1Li5jMWVmOTBjZGNjYzI2MDk1ZmZlNTE4MzAzMTZhMTgyZGYxMjZmZTc2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1JlZkNvdW50T2JqZWN0LmNwcAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1JlZkNvdW50T2JqZWN0LmNw
cApAQCAtMSw0ICsxLDMgQEAKLSNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KIC8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21tb24vYW5nbGV1dGlscy5oCmluZGV4IDk3NjE1NjdmYjI3NDk3NWY0NGM1NDE5MGIx
MTc0OWVjMzcxMTZkYzYuLjc3MjNmMGZiNzI3MjM2MjE5OGM0MjAyMTQ1NGUyNmIzMGJhNTI3ZjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGls
cy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5o
CkBAIC00Miw2ICs0MiwyMCBAQCB2b2lkIFNhZmVSZWxlYXNlKFQmIHJlc291cmNlKQogICAgIH0K
IH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit2b2lkIFNhZmVEZWxldGUoVComIHJlc291cmNl
KQoreworICAgIGRlbGV0ZSByZXNvdXJjZTsKKyAgICByZXNvdXJjZSA9IE5VTEw7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPgordm9pZCBTYWZlRGVsZXRlQXJyYXkoVComIHJlc291cmNlKQor
eworICAgIGRlbGV0ZVtdIHJlc291cmNlOworICAgIHJlc291cmNlID0gTlVMTDsKK30KKwogI2lm
IGRlZmluZWQoX01TQ19WRVIpCiAjZGVmaW5lIHNucHJpbnRmIF9zbnByaW50ZgogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuY3BwCmluZGV4IDIzMzM3
NDA1ZWQxNmNhOWZkMDVkZDc4MjI5NDJkZjVmMzA2NTUwODUuLjA1ZDNkYzYyYWQ0OTYxMDAwMTI1
OWI5YjhiYTZlMzFkYzk5YTA3MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21tb24vZGVidWcuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21tb24vZGVidWcuY3BwCkBAIC03LDE3ICs3LDIzIEBACiAvLyBkZWJ1Zy5jcHA6IERlYnVnZ2lu
ZyB1dGlsaXRpZXMuCiAKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLSNpbmNsdWRlICJjb21t
b24vc3lzdGVtLmgiCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKyNpZiBkZWZpbmVkKEFOR0xFX0VO
QUJMRV9QRVJGKQogI2luY2x1ZGUgPGQzZDkuaD4KKyNlbmRpZgogCiBuYW1lc3BhY2UgZ2wKIHsK
LQorI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX1BFUkYpCiB0eXBlZGVmIHZvaWQgKFdJTkFQSSAq
UGVyZk91dHB1dEZ1bmN0aW9uKShEM0RDT0xPUiwgTFBDV1NUUik7CisjZWxzZQordHlwZWRlZiB2
b2lkICgqUGVyZk91dHB1dEZ1bmN0aW9uKSh1bnNpZ25lZCBpbnQsIGNvbnN0IHdjaGFyX3QqKTsK
KyNlbmRpZgogCiBzdGF0aWMgdm9pZCBvdXRwdXQoYm9vbCB0cmFjZUZpbGVEZWJ1Z09ubHksIFBl
cmZPdXRwdXRGdW5jdGlvbiBwZXJmRnVuYywgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZh
cmFyZykKIHsKLSNpZiAhZGVmaW5lZChBTkdMRV9ESVNBQkxFX1BFUkYpCisjaWYgZGVmaW5lZChB
TkdMRV9FTkFCTEVfUEVSRikKICAgICBpZiAocGVyZkFjdGl2ZSgpKQogICAgIHsKICAgICAgICAg
Y2hhciBtZXNzYWdlWzMyNzY4XTsKQEAgLTM3LDE1ICs0MywxNSBAQCBzdGF0aWMgdm9pZCBvdXRw
dXQoYm9vbCB0cmFjZUZpbGVEZWJ1Z09ubHksIFBlcmZPdXRwdXRGdW5jdGlvbiBwZXJmRnVuYywg
Y29uc3QgYwogCiAgICAgICAgIHBlcmZGdW5jKDAsIHdpZGVNZXNzYWdlKTsKICAgICB9Ci0jZW5k
aWYKKyNlbmRpZiAvLyBBTkdMRV9FTkFCTEVfUEVSRgogCi0jaWYgIWRlZmluZWQoQU5HTEVfRElT
QUJMRV9UUkFDRSkKKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9UUkFDRSkKICNpZiBkZWZpbmVk
KE5ERUJVRykKICAgICBpZiAodHJhY2VGaWxlRGVidWdPbmx5KQogICAgIHsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSNlbmRpZgorI2VuZGlmIC8vIE5ERUJVRwogCiAgICAgRklMRSogZmlsZSA9
IGZvcGVuKFRSQUNFX09VVFBVVF9GSUxFLCAiYSIpOwogICAgIGlmIChmaWxlKQpAQCAtNTMsNTAg
KzU5LDUwIEBAIHN0YXRpYyB2b2lkIG91dHB1dChib29sIHRyYWNlRmlsZURlYnVnT25seSwgUGVy
Zk91dHB1dEZ1bmN0aW9uIHBlcmZGdW5jLCBjb25zdCBjCiAgICAgICAgIHZmcHJpbnRmKGZpbGUs
IGZvcm1hdCwgdmFyYXJnKTsKICAgICAgICAgZmNsb3NlKGZpbGUpOwogICAgIH0KLSNlbmRpZgor
I2VuZGlmIC8vIEFOR0xFX0VOQUJMRV9UUkFDRQogfQogCiB2b2lkIHRyYWNlKGJvb2wgdHJhY2VG
aWxlRGVidWdPbmx5LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIHsKICAgICB2YV9saXN0IHZh
cmFyZzsKICAgICB2YV9zdGFydCh2YXJhcmcsIGZvcm1hdCk7Ci0jaWYgZGVmaW5lZChBTkdMRV9E
SVNBQkxFX1BFUkYpCi0gICAgb3V0cHV0KHRyYWNlRmlsZURlYnVnT25seSwgTlVMTCwgZm9ybWF0
LCB2YXJhcmcpOwotI2Vsc2UKKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9QRVJGKQogICAgIG91
dHB1dCh0cmFjZUZpbGVEZWJ1Z09ubHksIEQzRFBFUkZfU2V0TWFya2VyLCBmb3JtYXQsIHZhcmFy
Zyk7CisjZWxzZQorICAgIG91dHB1dCh0cmFjZUZpbGVEZWJ1Z09ubHksIE5VTEwsIGZvcm1hdCwg
dmFyYXJnKTsKICNlbmRpZgogICAgIHZhX2VuZCh2YXJhcmcpOwogfQogCiBib29sIHBlcmZBY3Rp
dmUoKQogewotI2lmIGRlZmluZWQoQU5HTEVfRElTQUJMRV9QRVJGKQotICAgIHJldHVybiBmYWxz
ZTsKLSNlbHNlCisjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfUEVSRikKICAgICBzdGF0aWMgYm9v
bCBhY3RpdmUgPSBEM0RQRVJGX0dldFN0YXR1cygpICE9IDA7CiAgICAgcmV0dXJuIGFjdGl2ZTsK
KyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiB9CiAKIFNjb3BlZFBlcmZFdmVudEhl
bHBlcjo6U2NvcGVkUGVyZkV2ZW50SGVscGVyKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKQogewot
I2lmICFkZWZpbmVkKEFOR0xFX0RJU0FCTEVfUEVSRikKLSNpZiBkZWZpbmVkKEFOR0xFX0RJU0FC
TEVfVFJBQ0UpCisjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfUEVSRikKKyNpZiAhZGVmaW5lZChB
TkdMRV9FTkFCTEVfVFJBQ0UpCiAgICAgaWYgKCFwZXJmQWN0aXZlKCkpCiAgICAgewogICAgICAg
ICByZXR1cm47CiAgICAgfQotI2VuZGlmCisjZW5kaWYgLy8gIUFOR0xFX0VOQUJMRV9UUkFDRQog
ICAgIHZhX2xpc3QgdmFyYXJnOwogICAgIHZhX3N0YXJ0KHZhcmFyZywgZm9ybWF0KTsKICAgICBv
dXRwdXQodHJ1ZSwgcmVpbnRlcnByZXRfY2FzdDxQZXJmT3V0cHV0RnVuY3Rpb24+KEQzRFBFUkZf
QmVnaW5FdmVudCksIGZvcm1hdCwgdmFyYXJnKTsKICAgICB2YV9lbmQodmFyYXJnKTsKLSNlbmRp
ZgorI2VuZGlmIC8vIEFOR0xFX0VOQUJMRV9QRVJGCiB9CiAKIFNjb3BlZFBlcmZFdmVudEhlbHBl
cjo6flNjb3BlZFBlcmZFdmVudEhlbHBlcigpCiB7Ci0jaWYgIWRlZmluZWQoQU5HTEVfRElTQUJM
RV9QRVJGKQorI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX1BFUkYpCiAgICAgaWYgKHBlcmZBY3Rp
dmUoKSkKICAgICB7CiAgICAgICAgIEQzRFBFUkZfRW5kRXZlbnQoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuaAppbmRleCAwNjBiNzI3MmViM2MwMTIxNzUwN2Vj
MDQ3NjYwYjFmMWRlMzZlNzg1Li43OTM4NDM4OTVjMGIwOTc4NmJmNTg0MWU0MzIxYTVjYjBkYjNl
MjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVn
LmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5oCkBAIC0z
OSwzMyArMzksMzUgQEAgbmFtZXNwYWNlIGdsCiB9CiAKIC8vIEEgbWFjcm8gdG8gb3V0cHV0IGEg
dHJhY2Ugb2YgYSBmdW5jdGlvbiBjYWxsIGFuZCBpdHMgYXJndW1lbnRzIHRvIHRoZSBkZWJ1Z2dp
bmcgbG9nCi0jaWYgZGVmaW5lZChBTkdMRV9ESVNBQkxFX1RSQUNFKSAmJiBkZWZpbmVkKEFOR0xF
X0RJU0FCTEVfUEVSRikKLSNkZWZpbmUgVFJBQ0UobWVzc2FnZSwgLi4uKSAodm9pZCgwKSkKLSNl
bHNlCisjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfVFJBQ0UpIHx8IGRlZmluZWQoQU5HTEVfRU5B
QkxFX1BFUkYpCiAjZGVmaW5lIFRSQUNFKG1lc3NhZ2UsIC4uLikgZ2w6OnRyYWNlKHRydWUsICJ0
cmFjZTogJXMoJWQpOiAiIG1lc3NhZ2UgIlxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgIyNf
X1ZBX0FSR1NfXykKKyNlbHNlCisjZGVmaW5lIFRSQUNFKG1lc3NhZ2UsIC4uLikgKHZvaWQoMCkp
CiAjZW5kaWYKIAogLy8gQSBtYWNybyB0byBvdXRwdXQgYSBmdW5jdGlvbiBjYWxsIGFuZCBpdHMg
YXJndW1lbnRzIHRvIHRoZSBkZWJ1Z2dpbmcgbG9nLCB0byBkZW5vdGUgYW4gaXRlbSBpbiBuZWVk
IG9mIGZpeGluZy4KLSNpZiBkZWZpbmVkKEFOR0xFX0RJU0FCTEVfVFJBQ0UpICYmIGRlZmluZWQo
QU5HTEVfRElTQUJMRV9QRVJGKQotI2RlZmluZSBGSVhNRShtZXNzYWdlLCAuLi4pICh2b2lkKDAp
KQotI2Vsc2UKKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9UUkFDRSkgfHwgZGVmaW5lZChBTkdM
RV9FTkFCTEVfUEVSRikKICNkZWZpbmUgRklYTUUobWVzc2FnZSwgLi4uKSBnbDo6dHJhY2UoZmFs
c2UsICJmaXhtZTogJXMoJWQpOiAiIG1lc3NhZ2UgIlxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVf
XywgIyNfX1ZBX0FSR1NfXykKKyNlbHNlCisjZGVmaW5lIEZJWE1FKG1lc3NhZ2UsIC4uLikgKHZv
aWQoMCkpCiAjZW5kaWYKIAogLy8gQSBtYWNybyB0byBvdXRwdXQgYSBmdW5jdGlvbiBjYWxsIGFu
ZCBpdHMgYXJndW1lbnRzIHRvIHRoZSBkZWJ1Z2dpbmcgbG9nLCBpbiBjYXNlIG9mIGVycm9yLgot
I2lmIGRlZmluZWQoQU5HTEVfRElTQUJMRV9UUkFDRSkgJiYgZGVmaW5lZChBTkdMRV9ESVNBQkxF
X1BFUkYpCi0jZGVmaW5lIEVSUihtZXNzYWdlLCAuLi4pICh2b2lkKDApKQotI2Vsc2UKKyNpZiBk
ZWZpbmVkKEFOR0xFX0VOQUJMRV9UUkFDRSkgfHwgZGVmaW5lZChBTkdMRV9FTkFCTEVfUEVSRikK
ICNkZWZpbmUgRVJSKG1lc3NhZ2UsIC4uLikgZ2w6OnRyYWNlKGZhbHNlLCAiZXJyOiAlcyglZCk6
ICIgbWVzc2FnZSAiXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCAjI19fVkFfQVJHU19fKQor
I2Vsc2UKKyNkZWZpbmUgRVJSKG1lc3NhZ2UsIC4uLikgKHZvaWQoMCkpCiAjZW5kaWYKIAogLy8g
QSBtYWNybyB0byBsb2cgYSBwZXJmb3JtYW5jZSBldmVudCBhcm91bmQgYSBzY29wZS4KLSNpZiBk
ZWZpbmVkKEFOR0xFX0RJU0FCTEVfVFJBQ0UpICYmIGRlZmluZWQoQU5HTEVfRElTQUJMRV9QRVJG
KQotI2RlZmluZSBFVkVOVChtZXNzYWdlLCAuLi4pICh2b2lkKDApKQotI2VsaWYgZGVmaW5lZChf
TVNDX1ZFUikKKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9UUkFDRSkgfHwgZGVmaW5lZChBTkdM
RV9FTkFCTEVfUEVSRikKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQogI2RlZmluZSBFVkVOVChtZXNz
YWdlLCAuLi4pIGdsOjpTY29wZWRQZXJmRXZlbnRIZWxwZXIgc2NvcGVkUGVyZkV2ZW50SGVscGVy
ICMjIF9fTElORV9fKF9fRlVOQ1RJT05fXyBtZXNzYWdlICJcbiIsIF9fVkFfQVJHU19fKTsKICNl
bHNlCiAjZGVmaW5lIEVWRU5UKG1lc3NhZ2UsIC4uLikgZ2w6OlNjb3BlZFBlcmZFdmVudEhlbHBl
ciBzY29wZWRQZXJmRXZlbnRIZWxwZXIobWVzc2FnZSAiXG4iLCAjI19fVkFfQVJHU19fKTsKKyNl
bmRpZiAvLyBfTVNDX1ZFUgorI2Vsc2UKKyNkZWZpbmUgRVZFTlQobWVzc2FnZSwgLi4uKSAodm9p
ZCgwKSkKICNlbmRpZgogCiAvLyBBIG1hY3JvIGFzc2VydGluZyBhIGNvbmRpdGlvbiBhbmQgb3V0
cHV0dGluZyBmYWlsdXJlcyB0byB0aGUgZGVidWcgbG9nCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2V2ZW50X3RyYWNlci5jcHAgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tbW9uL2V2ZW50X3RyYWNlci5jcHAKaW5kZXggOTZjYmIwMTA2MTRj
ZTk2YzdmNTBhYjZmMDNhY2NiYmZmMjVhNTM5Yy4uMTQyMzczZDEzZjI0OGI3MDRhYzQ4ZjcwZTFi
ZjU2ZDZjM2U4MDAwZSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bW1vbi9ldmVudF90cmFjZXIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21tb24vZXZlbnRfdHJhY2VyLmNwcApAQCAtMTQsNyArMTQsNyBAQCBBZGRUcmFjZUV2ZW50RnVu
YyBnX2FkZFRyYWNlRXZlbnQ7CiAKIGV4dGVybiAiQyIgewogCi12b2lkIF9fc3RkY2FsbCBTZXRU
cmFjZUZ1bmN0aW9uUG9pbnRlcnMoR2V0Q2F0ZWdvcnlFbmFibGVkRmxhZ0Z1bmMgZ2V0Q2F0ZWdv
cnlFbmFibGVkRmxhZywKK3ZvaWQgVFJBQ0VfRU5UUlkgU2V0VHJhY2VGdW5jdGlvblBvaW50ZXJz
KEdldENhdGVnb3J5RW5hYmxlZEZsYWdGdW5jIGdldENhdGVnb3J5RW5hYmxlZEZsYWcsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkVHJhY2VFdmVudEZ1bmMgYWRk
VHJhY2VFdmVudCkKIHsKICAgICBnbDo6Z19nZXRDYXRlZ29yeUVuYWJsZWRGbGFnID0gZ2V0Q2F0
ZWdvcnlFbmFibGVkRmxhZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21tb24vZXZlbnRfdHJhY2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL2V2ZW50X3RyYWNlci5oCmluZGV4IGFlMzk3ZTdkYjk5YWFiZTQzYThhZTVkZTcwOWM1Y2Y5
ZWNkMmFmMTguLjE0YjdiMjk4ZmQ4NDdjZGJhNTIxNmMyNDNkYTc1YWJiMzkzMTA1NWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZXZlbnRfdHJhY2VyLmgK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9ldmVudF90cmFjZXIuaApA
QCAtNSw2ICs1LDE0IEBACiAjaWZuZGVmIENPTU1PTl9FVkVOVF9UUkFDRVJfSF8KICNkZWZpbmUg
Q09NTU9OX0VWRU5UX1RSQUNFUl9IXwogCisjaWYgIWRlZmluZWQoVFJBQ0VfRU5UUlkpCisjaWYg
ZGVmaW5lZChfV0lOMzIpCisjZGVmaW5lIFRSQUNFX0VOVFJZIF9fc3RkY2FsbAorI2Vsc2UKKyNk
ZWZpbmUgVFJBQ0VfRU5UUlkKKyNlbmRpZiAvLyAvLyBfV0lOMzIKKyNlbmRpZiAvL1RSQUNFX0VO
VFJZCisKIGV4dGVybiAiQyIgewogCiB0eXBlZGVmIGNvbnN0IHVuc2lnbmVkIGNoYXIqICgqR2V0
Q2F0ZWdvcnlFbmFibGVkRmxhZ0Z1bmMpKGNvbnN0IGNoYXIqIG5hbWUpOwpAQCAtMTQsOCArMjIs
OCBAQCB0eXBlZGVmIHZvaWQgKCpBZGRUcmFjZUV2ZW50RnVuYykoY2hhciBwaGFzZSwgY29uc3Qg
dW5zaWduZWQgY2hhciogY2F0ZWdvcnlHcm91cAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGNoYXIgZmxhZ3MpOwogCiAvLyBleHRlcm4gIkMiIHNvIHRoYXQgaXQg
aGFzIGEgcmVhc29uYWJsZSBuYW1lIGZvciBHZXRQcm9jQWRkcmVzcy4KLXZvaWQgX19zdGRjYWxs
IFNldFRyYWNlRnVuY3Rpb25Qb2ludGVycyhHZXRDYXRlZ29yeUVuYWJsZWRGbGFnRnVuYyBnZXRf
Y2F0ZWdvcnlfZW5hYmxlZF9mbGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFkZFRyYWNlRXZlbnRGdW5jIGFkZF90cmFjZV9ldmVudF9mdW5jKTsKK3ZvaWQgVFJB
Q0VfRU5UUlkgU2V0VHJhY2VGdW5jdGlvblBvaW50ZXJzKEdldENhdGVnb3J5RW5hYmxlZEZsYWdG
dW5jIGdldF9jYXRlZ29yeV9lbmFibGVkX2ZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBBZGRUcmFjZUV2ZW50RnVuYyBhZGRfdHJhY2VfZXZlbnRfZnVuYyk7
CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi92
ZXJzaW9uLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3ZlcnNpb24uaApp
bmRleCA5ZjIyMWYzYWNjMWYyYWUzOTBlNzZjODMyZDkyNTAxZDNhYTg3NDdiLi5mNmFlMTlmNTQx
YzI2MTExYmJkZTZmMzEzNzg4YjliYmRmOGY0YTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tbW9uL3ZlcnNpb24uaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tbW9uL3ZlcnNpb24uaApAQCAtMSwxMiArMSwxMiBAQAotI2RlZmluZSBNQUpP
Ul9WRVJTSU9OIDEKLSNkZWZpbmUgTUlOT1JfVkVSU0lPTiAyCi0jZGVmaW5lIEJVSUxEX1ZFUlNJ
T04gMAotI2RlZmluZSBCVUlMRF9SRVZJU0lPTiAyNDUwCisjaW5jbHVkZSAiY29tbWl0LmgiCiAK
LSNkZWZpbmUgU1RSSU5HSUZZKHgpICN4Ci0jZGVmaW5lIE1BQ1JPX1NUUklOR0lGWSh4KSBTVFJJ
TkdJRlkoeCkKKyNkZWZpbmUgQU5HTEVfTUFKT1JfVkVSU0lPTiAxCisjZGVmaW5lIEFOR0xFX01J
Tk9SX1ZFUlNJT04gMwogCi0jZGVmaW5lIFJFVklTSU9OX1NUUklORyBNQUNST19TVFJJTkdJRlko
QlVJTERfUkVWSVNJT04pCi0jZGVmaW5lIFZFUlNJT05fU1RSSU5HIE1BQ1JPX1NUUklOR0lGWShN
QUpPUl9WRVJTSU9OKSAiLiIgTUFDUk9fU1RSSU5HSUZZKE1JTk9SX1ZFUlNJT04pICIuIiBNQUNS
T19TVFJJTkdJRlkoQlVJTERfVkVSU0lPTikgIi4iIE1BQ1JPX1NUUklOR0lGWShCVUlMRF9SRVZJ
U0lPTikKKyNkZWZpbmUgQU5HTEVfU1RSSU5HSUZZKHgpICAgICAgICN4CisjZGVmaW5lIEFOR0xF
X01BQ1JPX1NUUklOR0lGWSh4KSBBTkdMRV9TVFJJTkdJRlkoeCkKIAotI2RlZmluZSBWRVJTSU9O
X0RXT1JEICgoTUFKT1JfVkVSU0lPTiA8PCAyNCkgfCAoTUlOT1JfVkVSU0lPTiA8PCAxNikgfCBC
VUlMRF9SRVZJU0lPTikKKyNkZWZpbmUgQU5HTEVfVkVSU0lPTl9TVFJJTkcgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICBBTkdMRV9NQUNST19TVFJJTkdJRlkoQU5HTEVfTUFKT1JfVkVSU0lP
TikgIi4iIFwKKyAgICBBTkdMRV9NQUNST19TVFJJTkdJRlkoQU5HTEVfTUlOT1JfVkVSU0lPTikg
Ii4iIFwKKyAgICBBTkdMRV9DT01NSVRfSEFTSApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyLzY0Yml0LWxleGVyLXNhZmV0eS5wYXRjaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci82NGJpdC1sZXhlci1zYWZldHkucGF0Y2gKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhZjkxZjU3NjUzNDMzN2FmZjZmZjdkNmRmNDdh
YmNkZmM2YzZkMWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyLzY0Yml0LWxleGVyLXNhZmV0
eS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi0tLS0gYS9zcmMvY29tcGls
ZXIvZ2xzbGFuZ19sZXguY3BwCi0rKysgYi9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwCi1A
QCAtNjgsNiArNjgsNyBAQCB0eXBlZGVmIGludDE2X3QgZmxleF9pbnQxNl90OwotIHR5cGVkZWYg
dWludDE2X3QgZmxleF91aW50MTZfdDsKLSB0eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90Owot
IHR5cGVkZWYgdWludDMyX3QgZmxleF91aW50MzJfdDsKLSt0eXBlZGVmIHVpbnQ2NF90IGZsZXhf
dWludDY0X3Q7Ci0gI2Vsc2UKLSB0eXBlZGVmIHNpZ25lZCBjaGFyIGZsZXhfaW50OF90OwotIHR5
cGVkZWYgc2hvcnQgaW50IGZsZXhfaW50MTZfdDsKLUBAIC0xOTEsNiArMTkyLDExIEBAIHR5cGVk
ZWYgdm9pZCogeXlzY2FuX3Q7Ci0gdHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9C
VUZGRVJfU1RBVEU7Ci0gI2VuZGlmCi0gCi0rI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAot
KyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TSVpFX1QKLSt0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7
Ci0rI2VuZGlmCi0rCi0gI2RlZmluZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU4gMAotICNkZWZpbmUg
RU9CX0FDVF9FTkRfT0ZfRklMRSAxCi0gI2RlZmluZSBFT0JfQUNUX0xBU1RfTUFUQ0ggMgotQEAg
LTIwNCw3ICsyMTAsNyBAQCB0eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZF
Ul9TVEFURTsKLSAgICAgICovCi0gICAgICNkZWZpbmUgIFlZX0xFU1NfTElORU5PKG4pIFwKLSAg
ICAgICAgICAgICBkbyB7IFwKLS0gICAgICAgICAgICAgICAgaW50IHl5bDtcCi0rICAgICAgICAg
ICAgICAgIHl5X3NpemVfdCB5eWw7XAotICAgICAgICAgICAgICAgICBmb3IgKCB5eWwgPSBuOyB5
eWwgPCB5eWxlbmc7ICsreXlsIClcCi0gICAgICAgICAgICAgICAgICAgICBpZiAoIHl5dGV4dFt5
eWxdID09ICdcbicgKVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAtLXl5bGluZW5vO1wKLUBA
IC0yMjYsMTEgKzIzMiw2IEBAIHR5cGVkZWYgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVG
RkVSX1NUQVRFOwotIAotICNkZWZpbmUgdW5wdXQoYykgeXl1bnB1dCggYywgeXlnLT55eXRleHRf
cHRyICwgeXlzY2FubmVyICkKLSAKLS0jaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCi0tI2Rl
ZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAotLXR5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKLS0j
ZW5kaWYKLS0KLSAjaWZuZGVmIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKLSAjZGVmaW5lIFlZ
X1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKLSBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlCi1AQCAtMjQ4
LDcgKzI0OSw3IEBAIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUKLSAJLyogTnVtYmVyIG9mIGNoYXJh
Y3RlcnMgcmVhZCBpbnRvIHl5X2NoX2J1Ziwgbm90IGluY2x1ZGluZyBFT0IKLSAJICogY2hhcmFj
dGVycy4KLSAJICovCi0tCWludCB5eV9uX2NoYXJzOwotKwl5eV9zaXplX3QgeXlfbl9jaGFyczsK
LSAKLSAJLyogV2hldGhlciB3ZSAib3duIiB0aGUgYnVmZmVyIC0gaS5lLiwgd2Uga25vdyB3ZSBj
cmVhdGVkIGl0LAotIAkgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hv
dWxkIGZyZWUoKSBpdCB0bwotQEAgLTMyNyw3ICszMjgsNyBAQCBzdGF0aWMgdm9pZCB5eV9pbml0
X2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIsRklMRSAqZmlsZSAseXlzY2FuX3QgeXlzY2FubmVy
ICk7Ci0gCi0gWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnVmZmVyIChjaGFyICpiYXNlLHl5X3Np
emVfdCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSBZWV9CVUZGRVJfU1RBVEUgeXlfc2Nh
bl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqeXlfc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLS1Z
WV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAoeXljb25zdCBjaGFyICpieXRlcyxpbnQgbGVu
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLStZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAo
eXljb25zdCBjaGFyICpieXRlcyx5eV9zaXplX3QgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
LSAKLSB2b2lkICp5eWFsbG9jICh5eV9zaXplX3QgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotIHZv
aWQgKnl5cmVhbGxvYyAodm9pZCAqLHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci1A
QCAtMzc4LDcgKzM3OSw3IEBAIHN0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNo
YXIgbXNnW10gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotICAqLwotICNkZWZpbmUgWVlfRE9fQkVG
T1JFX0FDVElPTiBcCi0gCXl5Zy0+eXl0ZXh0X3B0ciA9IHl5X2JwOyBcCi0tCXl5bGVuZyA9IChz
aXplX3QpICh5eV9jcCAtIHl5X2JwKTsgXAotKwl5eWxlbmcgPSAoeXlfc2l6ZV90KSAoeXlfY3Ag
LSB5eV9icCk7IFwKLSAJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlfY3A7IFwKLSAJKnl5X2NwID0g
J1wwJzsgXAotIAl5eWctPnl5X2NfYnVmX3AgPSB5eV9jcDsKLUBAIC0xMDM1LDggKzEwMzYsOCBA
QCBzdHJ1Y3QgeXlndXRzX3QKLSAgICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja19tYXg7IC8qKjwg
Y2FwYWNpdHkgb2Ygc3RhY2suICovCi0gICAgIFlZX0JVRkZFUl9TVEFURSAqIHl5X2J1ZmZlcl9z
dGFjazsgLyoqPCBTdGFjayBhcyBhbiBhcnJheS4gKi8KLSAgICAgY2hhciB5eV9ob2xkX2NoYXI7
Ci0tICAgIGludCB5eV9uX2NoYXJzOwotLSAgICBpbnQgeXlsZW5nX3I7Ci0rICAgIHl5X3NpemVf
dCB5eV9uX2NoYXJzOwotKyAgICB5eV9zaXplX3QgeXlsZW5nX3I7Ci0gICAgIGNoYXIgKnl5X2Nf
YnVmX3A7Ci0gICAgIGludCB5eV9pbml0OwotICAgICBpbnQgeXlfc3RhcnQ7Ci1AQCAtMTA4OSw3
ICsxMDkwLDcgQEAgRklMRSAqeXlnZXRfb3V0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAKLSB2
b2lkIHl5c2V0X291dCAgKEZJTEUgKiBvdXRfc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAK
LS1pbnQgeXlnZXRfbGVuZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0reXlfc2l6ZV90IHl5Z2V0
X2xlbmcgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotIAotIGNoYXIgKnl5Z2V0X3RleHQgKHl5c2Nh
bl90IHl5c2Nhbm5lciApOwotIAotQEAgLTExNTgsNyArMTE1OSw3IEBAIHN0YXRpYyBpbnQgaW5w
dXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotIAlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCi0gCQl7IFwKLSAJCWludCBjID0gJyonOyBcCi0tCQlp
bnQgbjsgXAotKwkJeXlfc2l6ZV90IG47IFwKLSAJCWZvciAoIG4gPSAwOyBuIDwgbWF4X3NpemUg
JiYgXAotIAkJCSAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsr
biApIFwKLSAJCQlidWZbbl0gPSAoY2hhcikgYzsgXAotQEAgLTEzMTcsNyArMTMxOCw3IEBAIHl5
X2ZpbmRfYWN0aW9uOgotIAotIAkJaWYgKCB5eV9hY3QgIT0gWVlfRU5EX09GX0JVRkZFUiAmJiB5
eV9ydWxlX2Nhbl9tYXRjaF9lb2xbeXlfYWN0XSApCi0gCQkJewotLQkJCWludCB5eWw7Ci0rCQkJ
eXlfc2l6ZV90IHl5bDsKLSAJCQlmb3IgKCB5eWwgPSAwOyB5eWwgPCB5eWxlbmc7ICsreXlsICkK
LSAJCQkJaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nICkKLSAJCQkJCSAgIAotQEAgLTIyMDMsNyAr
MjIwNCw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCi0gCi0gCWVsc2UKLSAJCXsKLS0JCQlpbnQgbnVtX3RvX3JlYWQgPQotKwkJCXl5X3NpemVf
dCBudW1fdG9fcmVhZCA9Ci0gCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6
ZSAtIG51bWJlcl90b19tb3ZlIC0gMTsKLSAKLSAJCXdoaWxlICggbnVtX3RvX3JlYWQgPD0gMCAp
Ci1AQCAtMjIxNyw3ICsyMjE4LDcgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5
c2Nhbl90IHl5c2Nhbm5lcikKLSAKLSAJCQlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQotIAkJ
CQl7Ci0tCQkJCWludCBuZXdfc2l6ZSA9IGItPnl5X2J1Zl9zaXplICogMjsKLSsJCQkJeXlfc2l6
ZV90IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOwotIAotIAkJCQlpZiAoIG5ld19zaXpl
IDw9IDAgKQotIAkJCQkJYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVmX3NpemUgLyA4OwotQEAg
LTIyNDgsNyArMjI0OSw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5f
dCB5eXNjYW5uZXIpCi0gCi0gCQkvKiBSZWFkIGluIG1vcmUgZGF0YS4gKi8KLSAJCVlZX0lOUFVU
KCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90b19tb3ZlXSks
Ci0tCQkJeXlnLT55eV9uX2NoYXJzLCAoc2l6ZV90KSBudW1fdG9fcmVhZCApOwotKwkJCXl5Zy0+
eXlfbl9jaGFycywgbnVtX3RvX3JlYWQgKTsKLSAKLSAJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKLSAJCX0KLUBAIC0yMzczLDcgKzIzNzQs
NyBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQot
IAotIAkJZWxzZQotIAkJCXsgLyogbmVlZCBtb3JlIGlucHV0ICovCi0tCQkJaW50IG9mZnNldCA9
IHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cjsKLSsJCQl5eV9zaXplX3Qgb2Zmc2V0
ID0geXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyOwotIAkJCSsreXlnLT55eV9jX2J1
Zl9wOwotIAotIAkJCXN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQot
QEAgLTI2NjAsNyArMjY2MSw3IEBAIHZvaWQgeXlwb3BfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5
eXNjYW5uZXIpCi0gICovCi0gc3RhdGljIHZvaWQgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNj
YW5fdCB5eXNjYW5uZXIpCi0gewotLQlpbnQgbnVtX3RvX2FsbG9jOwotKwl5eV9zaXplX3QgbnVt
X3RvX2FsbG9jOwotICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7Ci0gCi0gCWlmICgheXlnLT55eV9idWZmZXJfc3RhY2spIHsKLUBAIC0yNzU4
LDEyICsyNzU5LDExIEBAIFlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX3N0cmluZyAoeXljb25zdCBj
aGFyICogeXlzdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi0gICogQHBhcmFtIHl5c2Nhbm5lciBU
aGUgc2Nhbm5lciBvYmplY3QuCi0gICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZl
ciBzdGF0ZSBvYmplY3QuCi0gICovCi0tWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgICh5
eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCBpbnQgIF95eWJ5dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKLStZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5
Ynl0ZXMsIHl5X3NpemVfdCAgX3l5Ynl0ZXNfbGVuICwgeXlzY2FuX3QgeXlzY2FubmVyKQotIHsK
LSAJWVlfQlVGRkVSX1NUQVRFIGI7Ci0gCWNoYXIgKmJ1ZjsKLS0JeXlfc2l6ZV90IG47Ci0tCWlu
dCBpOwotKwl5eV9zaXplX3QgbiwgaTsKLSAgICAgCi0gCS8qIEdldCBtZW1vcnkgZm9yIGZ1bGwg
YnVmZmVyLCBpbmNsdWRpbmcgc3BhY2UgZm9yIHRyYWlsaW5nIEVPQidzLiAqLwotIAluID0gX3l5
Ynl0ZXNfbGVuICsgMjsKLUBAIC0yOTEzLDcgKzI5MTMsNyBAQCBGSUxFICp5eWdldF9vdXQgICh5
eXNjYW5fdCB5eXNjYW5uZXIpCi0gLyoqIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50IHRv
a2VuLgotICAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICAqLwotLWlu
dCB5eWdldF9sZW5nICAoeXlzY2FuX3QgeXlzY2FubmVyKQotK3l5X3NpemVfdCB5eWdldF9sZW5n
ICAoeXlzY2FuX3QgeXlzY2FubmVyKQotIHsKLSAgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgICByZXR1cm4geXlsZW5nOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Jhc2VUeXBlcy5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Jhc2VUeXBlcy5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjMxZjRmNzc5ZmE3ZWZhNzkzYmQ2M2FhYTIxY2M1ZmM5
MThkZmYwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CYXNlVHlwZXMuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDE0OCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIF9CQVNJ
Q1RZUEVTX0lOQ0xVREVEXwotI2RlZmluZSBfQkFTSUNUWVBFU19JTkNMVURFRF8KLQotLy8KLS8v
IFByZWNpc2lvbiBxdWFsaWZpZXJzCi0vLwotZW51bSBUUHJlY2lzaW9uCi17Ci0gICAgLy8gVGhl
c2UgbmVlZCB0byBiZSBrZXB0IHNvcnRlZAotICAgIEVicFVuZGVmaW5lZCwKLSAgICBFYnBMb3cs
Ci0gICAgRWJwTWVkaXVtLAotICAgIEVicEhpZ2gKLX07Ci0KLWlubGluZSBjb25zdCBjaGFyKiBn
ZXRQcmVjaXNpb25TdHJpbmcoVFByZWNpc2lvbiBwKQotewotICAgIHN3aXRjaChwKQotICAgIHsK
LSAgICBjYXNlIEVicEhpZ2g6CQlyZXR1cm4gImhpZ2hwIjsJCWJyZWFrOwotICAgIGNhc2UgRWJw
TWVkaXVtOgkJcmV0dXJuICJtZWRpdW1wIjsJYnJlYWs7Ci0gICAgY2FzZSBFYnBMb3c6CQlyZXR1
cm4gImxvd3AiOwkJYnJlYWs7Ci0gICAgZGVmYXVsdDoJCQlyZXR1cm4gIm1lZGl1bXAiOyAgIGJy
ZWFrOyAgIC8vIFNhZmVzdCBmYWxsYmFjawotICAgIH0KLX0KLQotLy8KLS8vIEJhc2ljIHR5cGUu
ICBBcnJheXMsIHZlY3RvcnMsIGV0Yy4sIGFyZSBvcnRob2dvbmFsIHRvIHRoaXMuCi0vLwotZW51
bSBUQmFzaWNUeXBlCi17Ci0gICAgRWJ0Vm9pZCwKLSAgICBFYnRGbG9hdCwKLSAgICBFYnRJbnQs
Ci0gICAgRWJ0Qm9vbCwKLSAgICBFYnRHdWFyZFNhbXBsZXJCZWdpbiwgIC8vIG5vbiB0eXBlOiAg
c2VlIGltcGxlbWVudGF0aW9uIG9mIElzU2FtcGxlcigpCi0gICAgRWJ0U2FtcGxlcjJELAotICAg
IEVidFNhbXBsZXJDdWJlLAotICAgIEVidFNhbXBsZXJFeHRlcm5hbE9FUywgIC8vIE9ubHkgdmFs
aWQgaWYgT0VTX0VHTF9pbWFnZV9leHRlcm5hbCBleGlzdHMuCi0gICAgRWJ0U2FtcGxlcjJEUmVj
dCwgICAgICAgLy8gT25seSB2YWxpZCBpZiBHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUgZXhpc3Rz
LgotICAgIEVidEd1YXJkU2FtcGxlckVuZCwgICAgLy8gbm9uIHR5cGU6ICBzZWUgaW1wbGVtZW50
YXRpb24gb2YgSXNTYW1wbGVyKCkKLSAgICBFYnRTdHJ1Y3QsCi0gICAgRWJ0QWRkcmVzcywgICAg
ICAgICAgICAvLyBzaG91bGQgYmUgZGVwcmVjYXRlZD8/Ci0gICAgRWJ0SW52YXJpYW50ICAgICAg
ICAgIC8vIHVzZWQgYXMgYSB0eXBlIHdoZW4gcXVhbGlmeWluZyBhIHByZXZpb3VzbHkgZGVjbGFy
ZWQgdmFyaWFibGUgYXMgYmVpbmcgaW52YXJpYW50Ci19OwotCi1pbmxpbmUgY29uc3QgY2hhciog
Z2V0QmFzaWNTdHJpbmcoVEJhc2ljVHlwZSB0KQotewotICAgIHN3aXRjaCAodCkKLSAgICB7Ci0g
ICAgY2FzZSBFYnRWb2lkOiAgICAgICAgICAgICAgcmV0dXJuICJ2b2lkIjsgICAgICAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRWJ0RmxvYXQ6ICAgICAgICAgICAgIHJldHVybiAiZmxvYXQiOyAg
ICAgICAgICAgICBicmVhazsKLSAgICBjYXNlIEVidEludDogICAgICAgICAgICAgICByZXR1cm4g
ImludCI7ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRCb29sOiAgICAgICAgICAg
ICAgcmV0dXJuICJib29sIjsgICAgICAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0U2FtcGxl
cjJEOiAgICAgICAgIHJldHVybiAic2FtcGxlcjJEIjsgICAgICAgICBicmVhazsKLSAgICBjYXNl
IEVidFNhbXBsZXJDdWJlOiAgICAgICByZXR1cm4gInNhbXBsZXJDdWJlIjsgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6IHJldHVybiAic2FtcGxlckV4dGVybmFs
T0VTIjsgYnJlYWs7Ci0gICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OiAgICAgcmV0dXJuICJzYW1w
bGVyMkRSZWN0IjsgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0U3RydWN0OiAgICAgICAgICAgIHJl
dHVybiAic3RydWN0dXJlIjsgICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OiAgICAgICAgICAg
ICAgICAgICByZXR1cm4gInVua25vd24gdHlwZSI7Ci0gICAgfQotfQotCi1pbmxpbmUgYm9vbCBJ
c1NhbXBsZXIoVEJhc2ljVHlwZSB0eXBlKQotewotICAgIHJldHVybiB0eXBlID4gRWJ0R3VhcmRT
YW1wbGVyQmVnaW4gJiYgdHlwZSA8IEVidEd1YXJkU2FtcGxlckVuZDsKLX0KLQotLy8KLS8vIFF1
YWxpZmllcnMgYW5kIGJ1aWx0LWlucy4gIFRoZXNlIGFyZSBtYWlubHkgdXNlZCB0byBzZWUgd2hh
dCBjYW4gYmUgcmVhZAotLy8gb3Igd3JpdHRlbiwgYW5kIGJ5IHRoZSBtYWNoaW5lIGRlcGVuZGVu
dCB0cmFuc2xhdG9yIHRvIGtub3cgd2hpY2ggcmVnaXN0ZXJzCi0vLyB0byBhbGxvY2F0ZSB2YXJp
YWJsZXMgaW4uICBTaW5jZSBidWlsdC1pbnMgdGVuZCB0byBnbyB0byBkaWZmZXJlbnQgcmVnaXN0
ZXJzCi0vLyB0aGFuIHZhcnlpbmcgb3IgdW5pZm9ybSwgaXQgbWFrZXMgc2Vuc2UgdGhleSBhcmUg
cGVlcnMsIG5vdCBzdWItY2xhc3Nlcy4KLS8vCi1lbnVtIFRRdWFsaWZpZXIKLXsKLSAgICBFdnFU
ZW1wb3JhcnksICAgICAvLyBGb3IgdGVtcG9yYXJpZXMgKHdpdGhpbiBhIGZ1bmN0aW9uKSwgcmVh
ZC93cml0ZQotICAgIEV2cUdsb2JhbCwgICAgICAgIC8vIEZvciBnbG9iYWxzIHJlYWQvd3JpdGUK
LSAgICBFdnFDb25zdCwgICAgICAgICAvLyBVc2VyIGRlZmluZWQgY29uc3RhbnRzIGFuZCBub24t
b3V0cHV0IHBhcmFtZXRlcnMgaW4gZnVuY3Rpb25zCi0gICAgRXZxQXR0cmlidXRlLCAgICAgLy8g
UmVhZG9ubHkKLSAgICBFdnFWYXJ5aW5nSW4sICAgICAvLyByZWFkb25seSwgZnJhZ21lbnQgc2hh
ZGVycyBvbmx5Ci0gICAgRXZxVmFyeWluZ091dCwgICAgLy8gdmVydGV4IHNoYWRlcnMgb25seSAg
cmVhZC93cml0ZQotICAgIEV2cUludmFyaWFudFZhcnlpbmdJbiwgICAgIC8vIHJlYWRvbmx5LCBm
cmFnbWVudCBzaGFkZXJzIG9ubHkKLSAgICBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCAgICAvLyB2
ZXJ0ZXggc2hhZGVycyBvbmx5ICByZWFkL3dyaXRlCi0gICAgRXZxVW5pZm9ybSwgICAgICAgLy8g
UmVhZG9ubHksIHZlcnRleCBhbmQgZnJhZ21lbnQKLQotICAgIC8vIHBhcmFtZXRlcnMKLSAgICBF
dnFJbiwKLSAgICBFdnFPdXQsCi0gICAgRXZxSW5PdXQsCi0gICAgRXZxQ29uc3RSZWFkT25seSwK
LQotICAgIC8vIGJ1aWx0LWlucyB3cml0dGVuIGJ5IHZlcnRleCBzaGFkZXIKLSAgICBFdnFQb3Np
dGlvbiwKLSAgICBFdnFQb2ludFNpemUsCi0KLSAgICAvLyBidWlsdC1pbnMgcmVhZCBieSBmcmFn
bWVudCBzaGFkZXIKLSAgICBFdnFGcmFnQ29vcmQsCi0gICAgRXZxRnJvbnRGYWNpbmcsCi0gICAg
RXZxUG9pbnRDb29yZCwKLQotICAgIC8vIGJ1aWx0LWlucyB3cml0dGVuIGJ5IGZyYWdtZW50IHNo
YWRlcgotICAgIEV2cUZyYWdDb2xvciwKLSAgICBFdnFGcmFnRGF0YSwKLSAgICBFdnFGcmFnRGVw
dGgsCi0KLSAgICAvLyBlbmQgb2YgbGlzdAotICAgIEV2cUxhc3QKLX07Ci0KLS8vCi0vLyBUaGlz
IGlzIGp1c3QgZm9yIGRlYnVnIHByaW50IG91dCwgY2FycmllZCBhbG9uZyB3aXRoIHRoZSBkZWZp
bml0aW9ucyBhYm92ZS4KLS8vCi1pbmxpbmUgY29uc3QgY2hhciogZ2V0UXVhbGlmaWVyU3RyaW5n
KFRRdWFsaWZpZXIgcSkKLXsKLSAgICBzd2l0Y2gocSkKLSAgICB7Ci0gICAgY2FzZSBFdnFUZW1w
b3Jhcnk6ICAgICAgcmV0dXJuICJUZW1wb3JhcnkiOyAgICAgIGJyZWFrOwotICAgIGNhc2UgRXZx
R2xvYmFsOiAgICAgICAgIHJldHVybiAiR2xvYmFsIjsgICAgICAgICBicmVhazsKLSAgICBjYXNl
IEV2cUNvbnN0OiAgICAgICAgICByZXR1cm4gImNvbnN0IjsgICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBFdnFDb25zdFJlYWRPbmx5OiAgcmV0dXJuICJjb25zdCI7ICAgICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRXZxQXR0cmlidXRlOiAgICAgIHJldHVybiAiYXR0cmlidXRlIjsgICAgICBicmVh
azsKLSAgICBjYXNlIEV2cVZhcnlpbmdJbjogICAgICByZXR1cm4gInZhcnlpbmciOyAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBFdnFWYXJ5aW5nT3V0OiAgICAgcmV0dXJuICJ2YXJ5aW5nIjsgICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWluZ0luOiByZXR1cm4gImludmFy
aWFudCB2YXJ5aW5nIjsJYnJlYWs7Ci0gICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0OnJl
dHVybiAiaW52YXJpYW50IHZhcnlpbmciOwlicmVhazsKLSAgICBjYXNlIEV2cVVuaWZvcm06ICAg
ICAgICByZXR1cm4gInVuaWZvcm0iOyAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFJbjogICAg
ICAgICAgICAgcmV0dXJuICJpbiI7ICAgICAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXZxT3V0
OiAgICAgICAgICAgIHJldHVybiAib3V0IjsgICAgICAgICAgICBicmVhazsKLSAgICBjYXNlIEV2
cUluT3V0OiAgICAgICAgICByZXR1cm4gImlub3V0IjsgICAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBFdnFQb3NpdGlvbjogICAgICAgcmV0dXJuICJQb3NpdGlvbiI7ICAgICAgIGJyZWFrOwotICAg
IGNhc2UgRXZxUG9pbnRTaXplOiAgICAgIHJldHVybiAiUG9pbnRTaXplIjsgICAgICBicmVhazsK
LSAgICBjYXNlIEV2cUZyYWdDb29yZDogICAgICByZXR1cm4gIkZyYWdDb29yZCI7ICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBFdnFGcm9udEZhY2luZzogICAgcmV0dXJuICJGcm9udEZhY2luZyI7ICAg
IGJyZWFrOwotICAgIGNhc2UgRXZxRnJhZ0NvbG9yOiAgICAgIHJldHVybiAiRnJhZ0NvbG9yIjsg
ICAgICBicmVhazsKLSAgICBjYXNlIEV2cUZyYWdEYXRhOiAgICAgICByZXR1cm4gIkZyYWdEYXRh
IjsgICAgICBicmVhazsKLSAgICBjYXNlIEV2cUZyYWdEZXB0aDogICAgICByZXR1cm4gIkZyYWdE
ZXB0aCI7ICAgICBicmVhazsKLSAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICByZXR1cm4gInVu
a25vd24gcXVhbGlmaWVyIjsKLSAgICB9Ci19Ci0KLSNlbmRpZiAvLyBfQkFTSUNUWVBFU19JTkNM
VURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9C
dWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAxYzRiMjVmMTNmMGM2MmYwZDE0MWM4YzZlNWVmZTljODY0MWJhM2VlLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw0MDYgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEx
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUg
ImNvbXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmgiCi0KLSNpbmNsdWRlICJjb21waWxl
ci9TeW1ib2xUYWJsZS5oIgotCi1uYW1lc3BhY2UgewotCi0vLyB3ZSB1c2UgbWFjcm9zIGhlcmUg
aW5zdGVhZCBvZiBmdW5jdGlvbiBkZWZpbml0aW9ucyB0byB3b3JrIGFyb3VuZCBtb3JlIEdMU0wK
LS8vIGNvbXBpbGVyIGJ1Z3MsIGluIHBhcnRpY3VsYXIgb24gTlZJRElBIGhhcmR3YXJlIG9uIE1h
YyBPU1guIE1hY3JvcyBhcmUKLS8vIHByb2JsZW1hdGljIGJlY2F1c2UgaWYgdGhlIGFyZ3VtZW50
IGhhcyBzaWRlLWVmZmVjdHMgdGhleSB3aWxsIGJlIHJlcGVhdGVkbHkKLS8vIGV2YWx1YXRlZC4g
VGhpcyBpcyB1bmxpa2VseSB0byBzaG93IHVwIGluIHJlYWwgc2hhZGVycywgYnV0IGlzIHNvbWV0
aGluZyB0bwotLy8gY29uc2lkZXIuCi1jb25zdCBjaGFyKiBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0
ZXhTb3VyY2VbXSA9IHsKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgY29zKGZsb2F0KSIs
Ci0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGNvcyh2ZWMyKSIsCi0gICAgIiNlcnJvciBu
byBlbXVsYXRpb24gZm9yIGNvcyh2ZWMzKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9y
IGNvcyh2ZWM0KSIsCi0KLSAgICAiI2RlZmluZSB3ZWJnbF9kaXN0YW5jZV9lbXUoeCwgeSkgKCh4
KSA+PSAoeSkgPyAoeCkgLSAoeSkgOiAoeSkgLSAoeCkpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxh
dGlvbiBmb3IgZGlzdGFuY2UodmVjMiwgdmVjMikiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9u
IGZvciBkaXN0YW5jZSh2ZWMzLCB2ZWMzKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9y
IGRpc3RhbmNlKHZlYzQsIHZlYzQpIiwKLQotICAgICIjZGVmaW5lIHdlYmdsX2RvdF9lbXUoeCwg
eSkgKCh4KSAqICh5KSkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjMiwg
dmVjMikiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjMywgdmVjMykiLAot
ICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjNCwgdmVjNCkiLAotCi0gICAgIiNk
ZWZpbmUgd2ViZ2xfbGVuZ3RoX2VtdSh4KSAoKHgpID49IDAuMCA/ICh4KSA6IC0oeCkpIiwKLSAg
ICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3RoKHZlYzIpIiwKLSAgICAiI2Vycm9yIG5v
IGVtdWxhdGlvbiBmb3IgbGVuZ3RoKHZlYzMpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBm
b3IgbGVuZ3RoKHZlYzQpIiwKLQotICAgICIjZGVmaW5lIHdlYmdsX25vcm1hbGl6ZV9lbXUoeCkg
KCh4KSA9PSAwLjAgPyAwLjAgOiAoKHgpID4gMC4wID8gMS4wIDogLTEuMCkpIiwKLSAgICAiI2Vy
cm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzIpIiwKLSAgICAiI2Vycm9yIG5vIGVt
dWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzMpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBm
b3Igbm9ybWFsaXplKHZlYzQpIiwKLQotICAgICIjZGVmaW5lIHdlYmdsX3JlZmxlY3RfZW11KEks
IE4pICgoSSkgLSAyLjAgKiAoTikgKiAoSSkgKiAoTikpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxh
dGlvbiBmb3IgcmVmbGVjdCh2ZWMyLCB2ZWMyKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24g
Zm9yIHJlZmxlY3QodmVjMywgdmVjMykiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBy
ZWZsZWN0KHZlYzQsIHZlYzQpIgotfTsKLQotY29uc3QgY2hhcioga0Z1bmN0aW9uRW11bGF0aW9u
RnJhZ21lbnRTb3VyY2VbXSA9IHsKLSAgICAid2ViZ2xfZW11X3ByZWNpc2lvbiBmbG9hdCB3ZWJn
bF9jb3NfZW11KHdlYmdsX2VtdV9wcmVjaXNpb24gZmxvYXQgYSkgeyByZXR1cm4gY29zKGEpOyB9
IiwKLSAgICAid2ViZ2xfZW11X3ByZWNpc2lvbiB2ZWMyIHdlYmdsX2Nvc19lbXUod2ViZ2xfZW11
X3ByZWNpc2lvbiB2ZWMyIGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCi0gICAgIndlYmdsX2VtdV9w
cmVjaXNpb24gdmVjMyB3ZWJnbF9jb3NfZW11KHdlYmdsX2VtdV9wcmVjaXNpb24gdmVjMyBhKSB7
IHJldHVybiBjb3MoYSk7IH0iLAotICAgICJ3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzQgd2ViZ2xf
Y29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzQgYSkgeyByZXR1cm4gY29zKGEpOyB9IiwK
LQotICAgICIjZGVmaW5lIHdlYmdsX2Rpc3RhbmNlX2VtdSh4LCB5KSAoKHgpID49ICh5KSA/ICh4
KSAtICh5KSA6ICh5KSAtICh4KSkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkaXN0
YW5jZSh2ZWMyLCB2ZWMyKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRpc3RhbmNl
KHZlYzMsIHZlYzMpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UodmVj
NCwgdmVjNCkiLAotCi0gICAgIiNkZWZpbmUgd2ViZ2xfZG90X2VtdSh4LCB5KSAoKHgpICogKHkp
KSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRvdCh2ZWMyLCB2ZWMyKSIsCi0gICAg
IiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRvdCh2ZWMzLCB2ZWMzKSIsCi0gICAgIiNlcnJvciBu
byBlbXVsYXRpb24gZm9yIGRvdCh2ZWM0LCB2ZWM0KSIsCi0KLSAgICAiI2RlZmluZSB3ZWJnbF9s
ZW5ndGhfZW11KHgpICgoeCkgPj0gMC4wID8gKHgpIDogLSh4KSkiLAotICAgICIjZXJyb3Igbm8g
ZW11bGF0aW9uIGZvciBsZW5ndGgodmVjMikiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZv
ciBsZW5ndGgodmVjMykiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBsZW5ndGgodmVj
NCkiLAotCi0gICAgIiNkZWZpbmUgd2ViZ2xfbm9ybWFsaXplX2VtdSh4KSAoKHgpID09IDAuMCA/
IDAuMCA6ICgoeCkgPiAwLjAgPyAxLjAgOiAtMS4wKSkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0
aW9uIGZvciBub3JtYWxpemUodmVjMikiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBu
b3JtYWxpemUodmVjMykiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBub3JtYWxpemUo
dmVjNCkiLAotCi0gICAgIiNkZWZpbmUgd2ViZ2xfcmVmbGVjdF9lbXUoSSwgTikgKChJKSAtIDIu
MCAqIChOKSAqIChJKSAqIChOKSkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciByZWZs
ZWN0KHZlYzIsIHZlYzIpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgcmVmbGVjdCh2
ZWMzLCB2ZWMzKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIHJlZmxlY3QodmVjNCwg
dmVjNCkiCi19OwotCi1jb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbXSA9
IHsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLSAgICAvLyBXb3JrIGFyb3VuZCBBVEkgZHJpdmVy
IGJ1Z3MgaW4gTWFjLgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MxCi0gICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkNvczIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMwotICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25Db3M0Ci0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRpc3RhbmNlMV8xCi0gICAg
ZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlMl8yCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRp
c3RhbmNlM18zCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlNF80Ci0gICAgdHJ1ZSwg
IC8vIFRGdW5jdGlvbkRvdDFfMQotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3QyXzIKLSAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uRG90M18zCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDRfNAot
ICAgIHRydWUsICAvLyBURnVuY3Rpb25MZW5ndGgxCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxl
bmd0aDIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMwotICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25MZW5ndGg0Ci0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTEKLSAgICBmYWxz
ZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxp
emUzCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTQKLSAgICB0cnVlLCAgLy8gVEZ1
bmN0aW9uUmVmbGVjdDFfMQotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0Ml8yCi0gICAg
ZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QzXzMKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVm
bGVjdDRfNAotI2Vsc2UKLSAgICAvLyBXb3JrIGFyb3VuZCBEM0QgZHJpdmVyIGJ1ZyBpbiBXaW4u
Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29z
MgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MzCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNv
czQKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2UxXzEKLSAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uRGlzdGFuY2UyXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2UzXzMKLSAg
ICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2U0XzQKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
RG90MV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDJfMgotICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25Eb3QzXzMKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90NF80Ci0gICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkxlbmd0aDEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMgotICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25MZW5ndGgzCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDQK
LSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMQotICAgIGZhbHNlLCAvLyBURnVuY3Rp
b25Ob3JtYWxpemUyCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTMKLSAgICBmYWxz
ZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplNAotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0
MV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QyXzIKLSAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uUmVmbGVjdDNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0NF80Ci0jZW5k
aWYKLSAgICBmYWxzZSAgLy8gVEZ1bmN0aW9uVW5rbm93bgotfTsKLQotY29uc3QgYm9vbCBrRnVu
Y3Rpb25FbXVsYXRpb25GcmFnbWVudE1hc2tbXSA9IHsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykK
LSAgICAvLyBXb3JrIGFyb3VuZCBBVEkgZHJpdmVyIGJ1Z3MgaW4gTWFjLgotICAgIHRydWUsICAv
LyBURnVuY3Rpb25Db3MxCi0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczIKLSAgICB0cnVlLCAg
Ly8gVEZ1bmN0aW9uQ29zMwotICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3M0Ci0gICAgdHJ1ZSwg
IC8vIFRGdW5jdGlvbkRpc3RhbmNlMV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNl
Ml8yCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlM18zCi0gICAgZmFsc2UsIC8vIFRG
dW5jdGlvbkRpc3RhbmNlNF80Ci0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRvdDFfMQotICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25Eb3QyXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90M18zCi0g
ICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDRfNAotICAgIHRydWUsICAvLyBURnVuY3Rpb25MZW5n
dGgxCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uTGVuZ3RoMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0Ci0gICAgdHJ1ZSwgIC8v
IFRGdW5jdGlvbk5vcm1hbGl6ZTEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMgot
ICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUzCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlv
bk5vcm1hbGl6ZTQKLSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uUmVmbGVjdDFfMQotICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25SZWZsZWN0Ml8yCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3Qz
XzMKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDRfNAotI2Vsc2UKLSAgICAvLyBXb3Jr
IGFyb3VuZCBEM0QgZHJpdmVyIGJ1ZyBpbiBXaW4uCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNv
czEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25D
b3MzCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczQKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
RGlzdGFuY2UxXzEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2UyXzIKLSAgICBmYWxz
ZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2UzXzMKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFu
Y2U0XzQKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90MV8xCi0gICAgZmFsc2UsIC8vIFRGdW5j
dGlvbkRvdDJfMgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3QzXzMKLSAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uRG90NF80Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDEKLSAgICBmYWxz
ZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgzCi0g
ICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDQKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9y
bWFsaXplMQotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUyCi0gICAgZmFsc2UsIC8v
IFRGdW5jdGlvbk5vcm1hbGl6ZTMKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplNAot
ICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0MV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlv
blJlZmxlY3QyXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDNfMwotICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25SZWZsZWN0NF80Ci0jZW5kaWYKLSAgICBmYWxzZSAgLy8gVEZ1bmN0aW9u
VW5rbm93bgotfTsKLQotY2xhc3MgQnVpbHRJbkZ1bmN0aW9uRW11bGF0aW9uTWFya2VyIDogcHVi
bGljIFRJbnRlcm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIEJ1aWx0SW5GdW5jdGlvbkVtdWxh
dGlvbk1hcmtlcihCdWlsdEluRnVuY3Rpb25FbXVsYXRvciYgZW11bGF0b3IpCi0gICAgICAgIDog
bUVtdWxhdG9yKGVtdWxhdG9yKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgdmlz
aXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQotICAgIHsKLSAgICAgICAg
aWYgKHZpc2l0ID09IFByZVZpc2l0KSB7Ci0gICAgICAgICAgICBib29sIG5lZWRUb0VtdWxhdGUg
PSBtRW11bGF0b3IuU2V0RnVuY3Rpb25DYWxsZWQoCi0gICAgICAgICAgICAgICAgbm9kZS0+Z2V0
T3AoKSwgbm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCkpOwotICAgICAgICAgICAgaWYgKG5l
ZWRUb0VtdWxhdGUpCi0gICAgICAgICAgICAgICAgbm9kZS0+c2V0VXNlRW11bGF0ZWRGdW5jdGlv
bigpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHZpcnR1
YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9k
ZSkKLSAgICB7Ci0gICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkgewotICAgICAgICAgICAg
Ly8gSGVyZSB3ZSBoYW5kbGUgYWxsIHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgaW5zdGVhZCBvZiB0
aGUgb25lcyB3ZQotICAgICAgICAgICAgLy8gY3VycmVudGx5IGlkZW50aWZpZWQgYXMgcHJvYmxl
bWF0aWMuCi0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpIHsKLSAgICAgICAgICAg
ICAgICBjYXNlIEVPcExlc3NUaGFuOgotICAgICAgICAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRo
YW46Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgotICAgICAgICAgICAg
ICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKLSAgICAgICAgICAgICAgICBjYXNlIEVPcFZl
Y3RvckVxdWFsOgotICAgICAgICAgICAgICAgIGNhc2UgRU9wVmVjdG9yTm90RXF1YWw6Ci0gICAg
ICAgICAgICAgICAgY2FzZSBFT3BNb2Q6Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BQb3c6Ci0g
ICAgICAgICAgICAgICAgY2FzZSBFT3BBdGFuOgotICAgICAgICAgICAgICAgIGNhc2UgRU9wTWlu
OgotICAgICAgICAgICAgICAgIGNhc2UgRU9wTWF4OgotICAgICAgICAgICAgICAgIGNhc2UgRU9w
Q2xhbXA6Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BNaXg6Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBFT3BTdGVwOgotICAgICAgICAgICAgICAgIGNhc2UgRU9wU21vb3RoU3RlcDoKLSAgICAgICAg
ICAgICAgICBjYXNlIEVPcERpc3RhbmNlOgotICAgICAgICAgICAgICAgIGNhc2UgRU9wRG90Ogot
ICAgICAgICAgICAgICAgIGNhc2UgRU9wQ3Jvc3M6Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BG
YWNlRm9yd2FyZDoKLSAgICAgICAgICAgICAgICBjYXNlIEVPcFJlZmxlY3Q6Ci0gICAgICAgICAg
ICAgICAgY2FzZSBFT3BSZWZyYWN0OgotICAgICAgICAgICAgICAgIGNhc2UgRU9wTXVsOgotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBj
b25zdCBUSW50ZXJtU2VxdWVuY2UmIHNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKLSAg
ICAgICAgICAgIC8vIFJpZ2h0IG5vdyB3ZSBvbmx5IGhhbmRsZSBidWlsdC1pbiBmdW5jdGlvbnMg
d2l0aCB0d28gcGFyYW1ldGVycy4KLSAgICAgICAgICAgIGlmIChzZXF1ZW5jZS5zaXplKCkgIT0g
MikKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIFRJbnRlcm1UeXBl
ZCogcGFyYW0xID0gc2VxdWVuY2VbMF0tPmdldEFzVHlwZWQoKTsKLSAgICAgICAgICAgIFRJbnRl
cm1UeXBlZCogcGFyYW0yID0gc2VxdWVuY2VbMV0tPmdldEFzVHlwZWQoKTsKLSAgICAgICAgICAg
IGlmICghcGFyYW0xIHx8ICFwYXJhbTIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgICBib29sIG5lZWRUb0VtdWxhdGUgPSBtRW11bGF0b3IuU2V0RnVuY3Rpb25DYWxs
ZWQoCi0gICAgICAgICAgICAgICAgbm9kZS0+Z2V0T3AoKSwgcGFyYW0xLT5nZXRUeXBlKCksIHBh
cmFtMi0+Z2V0VHlwZSgpKTsKLSAgICAgICAgICAgIGlmIChuZWVkVG9FbXVsYXRlKQotICAgICAg
ICAgICAgICAgIG5vZGUtPnNldFVzZUVtdWxhdGVkRnVuY3Rpb24oKTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3ImIG1FbXVsYXRvcjsKLX07Ci0KLX0gIC8vIGFub255bW91cyBuYW1lcHNhY2UKLQot
QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OkJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yKFNoU2hhZGVy
VHlwZSBzaGFkZXJUeXBlKQotewotICAgIGlmIChzaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NI
QURFUikgewotICAgICAgICBtRnVuY3Rpb25NYXNrID0ga0Z1bmN0aW9uRW11bGF0aW9uRnJhZ21l
bnRNYXNrOwotICAgICAgICBtRnVuY3Rpb25Tb3VyY2UgPSBrRnVuY3Rpb25FbXVsYXRpb25GcmFn
bWVudFNvdXJjZTsKLSAgICB9IGVsc2UgewotICAgICAgICBtRnVuY3Rpb25NYXNrID0ga0Z1bmN0
aW9uRW11bGF0aW9uVmVydGV4TWFzazsKLSAgICAgICAgbUZ1bmN0aW9uU291cmNlID0ga0Z1bmN0
aW9uRW11bGF0aW9uVmVydGV4U291cmNlOwotICAgIH0KLX0KLQotYm9vbCBCdWlsdEluRnVuY3Rp
b25FbXVsYXRvcjo6U2V0RnVuY3Rpb25DYWxsZWQoCi0gICAgVE9wZXJhdG9yIG9wLCBjb25zdCBU
VHlwZSYgcGFyYW0pCi17Ci0gICAgVEJ1aWx0SW5GdW5jdGlvbiBmdW5jdGlvbiA9IElkZW50aWZ5
RnVuY3Rpb24ob3AsIHBhcmFtKTsKLSAgICByZXR1cm4gU2V0RnVuY3Rpb25DYWxsZWQoZnVuY3Rp
b24pOwotfQotCi1ib29sIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpTZXRGdW5jdGlvbkNhbGxl
ZCgKLSAgICBUT3BlcmF0b3Igb3AsIGNvbnN0IFRUeXBlJiBwYXJhbTEsIGNvbnN0IFRUeXBlJiBw
YXJhbTIpCi17Ci0gICAgVEJ1aWx0SW5GdW5jdGlvbiBmdW5jdGlvbiA9IElkZW50aWZ5RnVuY3Rp
b24ob3AsIHBhcmFtMSwgcGFyYW0yKTsKLSAgICByZXR1cm4gU2V0RnVuY3Rpb25DYWxsZWQoZnVu
Y3Rpb24pOwotfQotCi1ib29sIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpTZXRGdW5jdGlvbkNh
bGxlZCgKLSAgICBCdWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6VEJ1aWx0SW5GdW5jdGlvbiBmdW5j
dGlvbikgewotICAgIGlmIChmdW5jdGlvbiA9PSBURnVuY3Rpb25Vbmtub3duIHx8IG1GdW5jdGlv
bk1hc2tbZnVuY3Rpb25dID09IGZhbHNlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtRnVuY3Rpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlm
IChtRnVuY3Rpb25zW2ldID09IGZ1bmN0aW9uKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotICAgIG1GdW5jdGlvbnMucHVzaF9iYWNrKGZ1bmN0aW9uKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBCdWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6T3V0cHV0RW11bGF0ZWRGdW5j
dGlvbkRlZmluaXRpb24oCi0gICAgVEluZm9TaW5rQmFzZSYgb3V0LCBib29sIHdpdGhQcmVjaXNp
b24pIGNvbnN0Ci17Ci0gICAgaWYgKG1GdW5jdGlvbnMuc2l6ZSgpID09IDApCi0gICAgICAgIHJl
dHVybjsKLSAgICBvdXQgPDwgIi8vIEJFR0lOOiBHZW5lcmF0ZWQgY29kZSBmb3IgYnVpbHQtaW4g
ZnVuY3Rpb24gZW11bGF0aW9uXG5cbiI7Ci0gICAgaWYgKHdpdGhQcmVjaXNpb24pIHsKLSAgICAg
ICAgb3V0IDw8ICIjaWYgZGVmaW5lZChHTF9GUkFHTUVOVF9QUkVDSVNJT05fSElHSClcbiIKLSAg
ICAgICAgICAgIDw8ICIjZGVmaW5lIHdlYmdsX2VtdV9wcmVjaXNpb24gaGlnaHBcbiIKLSAgICAg
ICAgICAgIDw8ICIjZWxzZVxuIgotICAgICAgICAgICAgPDwgIiNkZWZpbmUgd2ViZ2xfZW11X3By
ZWNpc2lvbiBtZWRpdW1wXG4iCi0gICAgICAgICAgICA8PCAiI2VuZGlmXG5cbiI7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgb3V0IDw8ICIjZGVmaW5lIHdlYmdsX2VtdV9wcmVjaXNpb25cblxuIjsK
LSAgICB9Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtRnVuY3Rpb25zLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIG91dCA8PCBtRnVuY3Rpb25Tb3VyY2VbbUZ1bmN0aW9uc1tpXV0gPDwgIlxu
XG4iOwotICAgIH0KLSAgICBvdXQgPDwgIi8vIEVORDogR2VuZXJhdGVkIGNvZGUgZm9yIGJ1aWx0
LWluIGZ1bmN0aW9uIGVtdWxhdGlvblxuXG4iOwotfQotCi1CdWlsdEluRnVuY3Rpb25FbXVsYXRv
cjo6VEJ1aWx0SW5GdW5jdGlvbgotQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OklkZW50aWZ5RnVu
Y3Rpb24oCi0gICAgVE9wZXJhdG9yIG9wLCBjb25zdCBUVHlwZSYgcGFyYW0pCi17Ci0gICAgaWYg
KHBhcmFtLmdldE5vbWluYWxTaXplKCkgPiA0KQotICAgICAgICByZXR1cm4gVEZ1bmN0aW9uVW5r
bm93bjsKLSAgICB1bnNpZ25lZCBpbnQgZnVuY3Rpb24gPSBURnVuY3Rpb25Vbmtub3duOwotICAg
IHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBFT3BDb3M6Ci0gICAgICAgICAgICBmdW5jdGlv
biA9IFRGdW5jdGlvbkNvczE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BM
ZW5ndGg6Ci0gICAgICAgICAgICBmdW5jdGlvbiA9IFRGdW5jdGlvbkxlbmd0aDE7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BOb3JtYWxpemU6Ci0gICAgICAgICAgICBmdW5j
dGlvbiA9IFRGdW5jdGlvbk5vcm1hbGl6ZTE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoZnVuY3Rpb24gPT0g
VEZ1bmN0aW9uVW5rbm93bikKLSAgICAgICAgcmV0dXJuIFRGdW5jdGlvblVua25vd247Ci0gICAg
aWYgKHBhcmFtLmlzVmVjdG9yKCkpCi0gICAgICAgIGZ1bmN0aW9uICs9IHBhcmFtLmdldE5vbWlu
YWxTaXplKCkgLSAxOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUQnVpbHRJbkZ1bmN0aW9uPihm
dW5jdGlvbik7Ci19Ci0KLUJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpUQnVpbHRJbkZ1bmN0aW9u
Ci1CdWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6SWRlbnRpZnlGdW5jdGlvbigKLSAgICBUT3BlcmF0
b3Igb3AsIGNvbnN0IFRUeXBlJiBwYXJhbTEsIGNvbnN0IFRUeXBlJiBwYXJhbTIpCi17Ci0gICAg
Ly8gUmlnaHQgbm93IGZvciBhbGwgdGhlIGVtdWxhdGVkIGZ1bmN0aW9ucyB3aXRoIHR3byBwYXJh
bWV0ZXJzLCB0aGUgdHdvCi0gICAgLy8gcGFyYW1ldGVycyBoYXZlIHRoZSBzYW1lIHR5cGUuCi0g
ICAgaWYgKHBhcmFtMS5pc1ZlY3RvcigpICE9IHBhcmFtMi5pc1ZlY3RvcigpIHx8Ci0gICAgICAg
IHBhcmFtMS5nZXROb21pbmFsU2l6ZSgpICE9IHBhcmFtMi5nZXROb21pbmFsU2l6ZSgpIHx8Ci0g
ICAgICAgIHBhcmFtMS5nZXROb21pbmFsU2l6ZSgpID4gNCkKLSAgICAgICAgcmV0dXJuIFRGdW5j
dGlvblVua25vd247Ci0KLSAgICB1bnNpZ25lZCBpbnQgZnVuY3Rpb24gPSBURnVuY3Rpb25Vbmtu
b3duOwotICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBFT3BEaXN0YW5jZToKLSAgICAg
ICAgICAgIGZ1bmN0aW9uID0gVEZ1bmN0aW9uRGlzdGFuY2UxXzE7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBFT3BEb3Q6Ci0gICAgICAgICAgICBmdW5jdGlvbiA9IFRGdW5jdGlv
bkRvdDFfMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFJlZmxlY3Q6Ci0g
ICAgICAgICAgICBmdW5jdGlvbiA9IFRGdW5jdGlvblJlZmxlY3QxXzE7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBp
ZiAoZnVuY3Rpb24gPT0gVEZ1bmN0aW9uVW5rbm93bikKLSAgICAgICAgcmV0dXJuIFRGdW5jdGlv
blVua25vd247Ci0gICAgaWYgKHBhcmFtMS5pc1ZlY3RvcigpKQotICAgICAgICBmdW5jdGlvbiAr
PSBwYXJhbTEuZ2V0Tm9taW5hbFNpemUoKSAtIDE7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFRC
dWlsdEluRnVuY3Rpb24+KGZ1bmN0aW9uKTsKLX0KLQotdm9pZCBCdWlsdEluRnVuY3Rpb25FbXVs
YXRvcjo6TWFya0J1aWx0SW5GdW5jdGlvbnNGb3JFbXVsYXRpb24oCi0gICAgVEludGVybU5vZGUq
IHJvb3QpCi17Ci0gICAgQVNTRVJUKHJvb3QpOwotCi0gICAgQnVpbHRJbkZ1bmN0aW9uRW11bGF0
aW9uTWFya2VyIG1hcmtlcigqdGhpcyk7Ci0gICAgcm9vdC0+dHJhdmVyc2UoJm1hcmtlcik7Ci19
Ci0KLXZvaWQgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OkNsZWFudXAoKQotewotICAgIG1GdW5j
dGlvbnMuY2xlYXIoKTsKLX0KLQotLy9zdGF0aWMKLVRTdHJpbmcgQnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3I6OkdldEVtdWxhdGVkRnVuY3Rpb25OYW1lKAotICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUp
Ci17Ci0gICAgQVNTRVJUKG5hbWVbbmFtZS5sZW5ndGgoKSAtIDFdID09ICcoJyk7Ci0gICAgcmV0
dXJuICJ3ZWJnbF8iICsgbmFtZS5zdWJzdHIoMCwgbmFtZS5sZW5ndGgoKSAtIDEpICsgIl9lbXUo
IjsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMGQ5MDRmNDFkMDkxNmNmZjllOGQwYzA1ODlmOWVkODlkMGVjMDM4Mi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDkzICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTElFUl9C
VUlMVF9JTl9GVU5DVElPTl9FTVVMQVRPUl9IXwotI2RlZmluZSBDT01QSUxJRVJfQlVJTFRfSU5f
RlVOQ1RJT05fRU1VTEFUT1JfSF8KLQotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgot
Ci0jaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKLSNpbmNsdWRlICJjb21waWxlci9pbnRl
cm1lZGlhdGUuaCIKLQotLy8KLS8vIFRoaXMgY2xhc3MgZGVjaWRlcyB3aGljaCBidWlsdC1pbiBm
dW5jdGlvbnMgbmVlZCB0byBiZSByZXBsYWNlZCB3aXRoIHRoZQotLy8gZW11bGF0ZWQgb25lcy4K
LS8vIEl0J3Mgb25seSBhIHdvcmthcm91bmQgZm9yIE9wZW5HTCBkcml2ZXIgYnVncywgYW5kIGlz
bid0IG5lZWRlZCBpbiBnZW5lcmFsLgotLy8KLWNsYXNzIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9y
IHsKLXB1YmxpYzoKLSAgICBCdWlsdEluRnVuY3Rpb25FbXVsYXRvcihTaFNoYWRlclR5cGUgc2hh
ZGVyVHlwZSk7Ci0gICAgLy8gUmVjb3JkcyB0aGF0IGEgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRo
ZSBzaGFkZXIgYW5kIG1pZ2h0IG5lZWRzIHRvIGJlCi0gICAgLy8gZW11bGF0ZWQuICBJZiB0aGUg
ZnVuY3Rpb24ncyBncm91cCBpcyBub3QgaW4gbUZ1bmN0aW9uR3JvdXBGaWx0ZXIsIHRoaXMKLSAg
ICAvLyBiZWNvbWVzIGFuIG5vLW9wLgotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZnVuY3Rp
b24gY2FsbCBuZWVkcyB0byBiZSByZXBsYWNlZCB3aXRoIGFuIGVtdWxhdGVkCi0gICAgLy8gb25l
LgotICAgIGJvb2wgU2V0RnVuY3Rpb25DYWxsZWQoVE9wZXJhdG9yIG9wLCBjb25zdCBUVHlwZSYg
cGFyYW0pOwotICAgIGJvb2wgU2V0RnVuY3Rpb25DYWxsZWQoCi0gICAgICAgIFRPcGVyYXRvciBv
cCwgY29uc3QgVFR5cGUmIHBhcmFtMSwgY29uc3QgVFR5cGUmIHBhcmFtMik7Ci0KLSAgICAvLyBP
dXRwdXQgZnVuY3Rpb24gZW11bGF0aW9uIGRlZmluaXRpb24uICBUaGlzIHNob3VsZCBiZSBiZWZv
cmUgYW55IG90aGVyCi0gICAgLy8gc2hhZGVyIHNvdXJjZS4KLSAgICB2b2lkIE91dHB1dEVtdWxh
dGVkRnVuY3Rpb25EZWZpbml0aW9uKFRJbmZvU2lua0Jhc2UmIG91dCwgYm9vbCB3aXRoUHJlY2lz
aW9uKSBjb25zdDsKLQotICAgIHZvaWQgTWFya0J1aWx0SW5GdW5jdGlvbnNGb3JFbXVsYXRpb24o
VEludGVybU5vZGUqIHJvb3QpOwotCi0gICAgdm9pZCBDbGVhbnVwKCk7Ci0KLSAgICAvLyAibmFt
ZSgiIGJlY29tZXMgIndlYmdsX25hbWVfZW11KCIuCi0gICAgc3RhdGljIFRTdHJpbmcgR2V0RW11
bGF0ZWRGdW5jdGlvbk5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSk7Ci0KLXByaXZhdGU6Ci0gICAg
Ly8KLSAgICAvLyBCdWlsdC1pbiBmdW5jdGlvbnMuCi0gICAgLy8KLSAgICBlbnVtIFRCdWlsdElu
RnVuY3Rpb24gewotICAgICAgICBURnVuY3Rpb25Db3MxID0gMCwgIC8vIGZsb2F0IGNvcyhmbG9h
dCk7Ci0gICAgICAgIFRGdW5jdGlvbkNvczIsICAvLyB2ZWMyIGNvcyh2ZWMyKTsKLSAgICAgICAg
VEZ1bmN0aW9uQ29zMywgIC8vIHZlYzMgY29zKHZlYzMpOwotICAgICAgICBURnVuY3Rpb25Db3M0
LCAgLy8gdmVjNCBjb3ModmVjNCk7Ci0KLSAgICAgICAgVEZ1bmN0aW9uRGlzdGFuY2UxXzEsICAv
LyBmbG9hdCBkaXN0YW5jZShmbG9hdCwgZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25EaXN0YW5j
ZTJfMiwgIC8vIHZlYzIgZGlzdGFuY2UodmVjMiwgdmVjMik7Ci0gICAgICAgIFRGdW5jdGlvbkRp
c3RhbmNlM18zLCAgLy8gdmVjMyBkaXN0YW5jZSh2ZWMzLCB2ZWMzKTsKLSAgICAgICAgVEZ1bmN0
aW9uRGlzdGFuY2U0XzQsICAvLyB2ZWM0IGRpc3RhbmNlKHZlYzQsIHZlYzQpOwotCi0gICAgICAg
IFRGdW5jdGlvbkRvdDFfMSwgIC8vIGZsb2F0IGRvdChmbG9hdCwgZmxvYXQpOwotICAgICAgICBU
RnVuY3Rpb25Eb3QyXzIsICAvLyB2ZWMyIGRvdCh2ZWMyLCB2ZWMyKTsKLSAgICAgICAgVEZ1bmN0
aW9uRG90M18zLCAgLy8gdmVjMyBkb3QodmVjMywgdmVjMyk7Ci0gICAgICAgIFRGdW5jdGlvbkRv
dDRfNCwgIC8vIHZlYzQgZG90KHZlYzQsIHZlYzQpOwotCi0gICAgICAgIFRGdW5jdGlvbkxlbmd0
aDEsICAvLyBmbG9hdCBsZW5ndGgoZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25MZW5ndGgyLCAg
Ly8gZmxvYXQgbGVuZ3RoKHZlYzIpOwotICAgICAgICBURnVuY3Rpb25MZW5ndGgzLCAgLy8gZmxv
YXQgbGVuZ3RoKHZlYzMpOwotICAgICAgICBURnVuY3Rpb25MZW5ndGg0LCAgLy8gZmxvYXQgbGVu
Z3RoKHZlYzQpOwotCi0gICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTEsICAvLyBmbG9hdCBub3Jt
YWxpemUoZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25Ob3JtYWxpemUyLCAgLy8gdmVjMiBub3Jt
YWxpemUodmVjMik7Ci0gICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTMsICAvLyB2ZWMzIG5vcm1h
bGl6ZSh2ZWMzKTsKLSAgICAgICAgVEZ1bmN0aW9uTm9ybWFsaXplNCwgIC8vIHZlYzQgbm9ybWFs
aXplKHZlYzQpOwotCi0gICAgICAgIFRGdW5jdGlvblJlZmxlY3QxXzEsICAvLyBmbG9hdCByZWZs
ZWN0KGZsb2F0LCBmbG9hdCk7Ci0gICAgICAgIFRGdW5jdGlvblJlZmxlY3QyXzIsICAvLyB2ZWMy
IHJlZmxlY3QodmVjMiwgdmVjMik7Ci0gICAgICAgIFRGdW5jdGlvblJlZmxlY3QzXzMsICAvLyB2
ZWMzIHJlZmxlY3QodmVjMywgdmVjMyk7Ci0gICAgICAgIFRGdW5jdGlvblJlZmxlY3Q0XzQsICAv
LyB2ZWM0IHJlZmxlY3QodmVjNCwgdmVjNCk7Ci0KLSAgICAgICAgVEZ1bmN0aW9uVW5rbm93bgot
ICAgIH07Ci0KLSAgICBUQnVpbHRJbkZ1bmN0aW9uIElkZW50aWZ5RnVuY3Rpb24oVE9wZXJhdG9y
IG9wLCBjb25zdCBUVHlwZSYgcGFyYW0pOwotICAgIFRCdWlsdEluRnVuY3Rpb24gSWRlbnRpZnlG
dW5jdGlvbigKLSAgICAgICAgVE9wZXJhdG9yIG9wLCBjb25zdCBUVHlwZSYgcGFyYW0xLCBjb25z
dCBUVHlwZSYgcGFyYW0yKTsKLQotICAgIGJvb2wgU2V0RnVuY3Rpb25DYWxsZWQoVEJ1aWx0SW5G
dW5jdGlvbiBmdW5jdGlvbik7Ci0KLSAgICBzdGQ6OnZlY3RvcjxUQnVpbHRJbkZ1bmN0aW9uPiBt
RnVuY3Rpb25zOwotCi0gICAgY29uc3QgYm9vbCogbUZ1bmN0aW9uTWFzazsgIC8vIGEgYm9vbGVh
biBmbGFnIGZvciBlYWNoIGZ1bmN0aW9uLgotICAgIGNvbnN0IGNoYXIqKiBtRnVuY3Rpb25Tb3Vy
Y2U7Ci19OwotCi0jZW5kaWYgIC8vIENPTVBJTElFUl9CVUlMVF9JTl9GVU5DVElPTl9FTVVMQVRP
Ul9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Nv
ZGVHZW4uY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW4u
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGYyMWI4NzYxNzNhMzE0YzA4Mzhm
MjczZTIyYmY3NTU2NzRhZGQzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db2RlR2VuLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNp
bmNsdWRlICJjb21waWxlci9UcmFuc2xhdG9yRVNTTC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1Ry
YW5zbGF0b3JHTFNMLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuaCIKLQot
Ly8KLS8vIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBwcm92aWRlZCB0byBjcmVhdGUgdGhlIGFjdHVh
bAotLy8gY29tcGlsZSBvYmplY3QgdXNlZCBieSBoaWdoZXIgbGV2ZWwgY29kZS4gIEl0IHJldHVy
bnMKLS8vIGEgc3ViY2xhc3Mgb2YgVENvbXBpbGVyLgotLy8KLVRDb21waWxlciogQ29uc3RydWN0
Q29tcGlsZXIoCi0gICAgU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBTaFNo
YWRlck91dHB1dCBvdXRwdXQpCi17Ci0gICAgc3dpdGNoIChvdXRwdXQpIHsKLSAgICAgIGNhc2Ug
U0hfRVNTTF9PVVRQVVQ6Ci0gICAgICAgIHJldHVybiBuZXcgVHJhbnNsYXRvckVTU0wodHlwZSwg
c3BlYyk7Ci0gICAgICBjYXNlIFNIX0dMU0xfT1VUUFVUOgotICAgICAgICByZXR1cm4gbmV3IFRy
YW5zbGF0b3JHTFNMKHR5cGUsIHNwZWMpOwotICAgICAgY2FzZSBTSF9ITFNMOV9PVVRQVVQ6Ci0g
ICAgICBjYXNlIFNIX0hMU0wxMV9PVVRQVVQ6Ci0gICAgICAgIHJldHVybiBuZXcgVHJhbnNsYXRv
ckhMU0wodHlwZSwgc3BlYywgb3V0cHV0KTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVy
biBOVUxMOwotICAgIH0KLX0KLQotLy8KLS8vIERlbGV0ZSB0aGUgY29tcGlsZXIgbWFkZSBieSBD
b25zdHJ1Y3RDb21waWxlcgotLy8KLXZvaWQgRGVsZXRlQ29tcGlsZXIoVENvbXBpbGVyKiBjb21w
aWxlcikKLXsKLSAgICBkZWxldGUgY29tcGlsZXI7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tbW9uLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvQ29tbW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDQ2Zjk0NDBmZmYxYjUwYmY5NzI5ZGE2MTcyNTYzMzc0YzlmZmNiZDMuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL0NvbW1vbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBfQ09NTU9OX0lOQ0xVREVEXwotI2RlZmluZSBfQ09N
TU9OX0lOQ0xVREVEXwotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0jaW5j
bHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImNvbXBpbGVyL1Bv
b2xBbGxvYy5oIgotCi1zdHJ1Y3QgVFNvdXJjZUxvYyB7Ci0gICAgaW50IGZpcnN0X2ZpbGU7Ci0g
ICAgaW50IGZpcnN0X2xpbmU7Ci0gICAgaW50IGxhc3RfZmlsZTsKLSAgICBpbnQgbGFzdF9saW5l
OwotfTsKLQotLy8KLS8vIFB1dCBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFIGluIGJhc2UgY2xh
c3NlcyB0byBtYWtlIHRoZW0gdXNlIHRoaXMgc2NoZW1lLgotLy8KLSNkZWZpbmUgUE9PTF9BTExP
Q0FUT1JfTkVXX0RFTEVURSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzKSB7IHJldHVybiBH
ZXRHbG9iYWxQb29sQWxsb2NhdG9yKCktPmFsbG9jYXRlKHMpOyB9ICAgXAotICAgIHZvaWQqIG9w
ZXJhdG9yIG5ldyhzaXplX3QsIHZvaWQgKl9XaGVyZSkgeyByZXR1cm4gKF9XaGVyZSk7IH0gICAg
ICAgICAgICAgICAgICAgIFwKLSAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKikgeyB9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgdm9p
ZCBvcGVyYXRvciBkZWxldGUodm9pZCAqLCB2b2lkICopIHsgfSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHNpemVfdCBz
KSB7IHJldHVybiBHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCktPmFsbG9jYXRlKHMpOyB9IFwKLSAg
ICB2b2lkKiBvcGVyYXRvciBuZXdbXShzaXplX3QsIHZvaWQgKl9XaGVyZSkgeyByZXR1cm4gKF9X
aGVyZSk7IH0gICAgICAgICAgICAgICAgICBcCi0gICAgdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2
b2lkKikgeyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCAqLCB2b2lkICopIHsgfQotCi0vLwot
Ly8gUG9vbCB2ZXJzaW9uIG9mIHN0cmluZy4KLS8vCi10eXBlZGVmIHBvb2xfYWxsb2NhdG9yPGNo
YXI+IFRTdHJpbmdBbGxvY2F0b3I7Ci10eXBlZGVmIHN0ZDo6YmFzaWNfc3RyaW5nIDxjaGFyLCBz
dGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBUU3RyaW5nQWxsb2NhdG9yPiBUU3RyaW5nOwotdHlwZWRl
ZiBzdGQ6OmJhc2ljX29zdHJpbmdzdHJlYW08Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwg
VFN0cmluZ0FsbG9jYXRvcj4gVFN0cmluZ1N0cmVhbTsKLWlubGluZSBUU3RyaW5nKiBOZXdQb29s
VFN0cmluZyhjb25zdCBjaGFyKiBzKQotewotCXZvaWQqIG1lbW9yeSA9IEdldEdsb2JhbFBvb2xB
bGxvY2F0b3IoKS0+YWxsb2NhdGUoc2l6ZW9mKFRTdHJpbmcpKTsKLQlyZXR1cm4gbmV3KG1lbW9y
eSkgVFN0cmluZyhzKTsKLX0KLQotLy8KLS8vIFBlcnNpc3RlbnQgc3RyaW5nIG1lbW9yeS4gIFNo
b3VsZCBvbmx5IGJlIHVzZWQgZm9yIHN0cmluZ3MgdGhhdCBzdXJ2aXZlCi0vLyBhY3Jvc3MgY29t
cGlsZXMuCi0vLwotI2RlZmluZSBUUGVyc2lzdFN0cmluZyBzdGQ6OnN0cmluZwotI2RlZmluZSBU
UGVyc2lzdFN0cmluZ1N0cmVhbSBzdGQ6Om9zdHJpbmdzdHJlYW0KLQotLy8KLS8vIFBvb2wgYWxs
b2NhdG9yIHZlcnNpb25zIG9mIHZlY3RvcnMsIGxpc3RzLCBhbmQgbWFwcwotLy8KLXRlbXBsYXRl
IDxjbGFzcyBUPiBjbGFzcyBUVmVjdG9yIDogcHVibGljIHN0ZDo6dmVjdG9yPFQsIHBvb2xfYWxs
b2NhdG9yPFQ+ID4gewotcHVibGljOgotICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjp2ZWN0b3I8
VCwgcG9vbF9hbGxvY2F0b3I8VD4gPjo6c2l6ZV90eXBlIHNpemVfdHlwZTsKLSAgICBUVmVjdG9y
KCkgOiBzdGQ6OnZlY3RvcjxULCBwb29sX2FsbG9jYXRvcjxUPiA+KCkge30KLSAgICBUVmVjdG9y
KGNvbnN0IHBvb2xfYWxsb2NhdG9yPFQ+JiBhKSA6IHN0ZDo6dmVjdG9yPFQsIHBvb2xfYWxsb2Nh
dG9yPFQ+ID4oYSkge30KLSAgICBUVmVjdG9yKHNpemVfdHlwZSBpKTogc3RkOjp2ZWN0b3I8VCwg
cG9vbF9hbGxvY2F0b3I8VD4gPihpKSB7fQotfTsKLQotdGVtcGxhdGUgPGNsYXNzIEssIGNsYXNz
IEQsIGNsYXNzIENNUCA9IHN0ZDo6bGVzczxLPiA+IAotY2xhc3MgVE1hcCA6IHB1YmxpYyBzdGQ6
Om1hcDxLLCBELCBDTVAsIHBvb2xfYWxsb2NhdG9yPHN0ZDo6cGFpcjxjb25zdCBLLCBEPiA+ID4g
ewotcHVibGljOgotICAgIHR5cGVkZWYgcG9vbF9hbGxvY2F0b3I8c3RkOjpwYWlyPGNvbnN0IEss
IEQ+ID4gdEFsbG9jYXRvcjsKLQotICAgIFRNYXAoKSA6IHN0ZDo6bWFwPEssIEQsIENNUCwgdEFs
bG9jYXRvcj4oKSB7fQotICAgIC8vIHVzZSBjb3JyZWN0IHR3by1zdGFnZSBuYW1lIGxvb2t1cCBz
dXBwb3J0ZWQgaW4gZ2NjIDMuNCBhbmQgYWJvdmUKLSAgICBUTWFwKGNvbnN0IHRBbGxvY2F0b3Im
IGEpIDogc3RkOjptYXA8SywgRCwgQ01QLCB0QWxsb2NhdG9yPihzdGQ6Om1hcDxLLCBELCBDTVAs
IHRBbGxvY2F0b3I+OjprZXlfY29tcGFyZSgpLCBhKSB7fQotfTsKLQotI2VuZGlmIC8vIF9DT01N
T05fSU5DTFVERURfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvQ29tcGlsZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0NvbXBpbGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJiNGVmNjAyNTlk
MTk5ZGFlMTEwMWY4MzEzODYwNzIxOTA1MGQ5My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
Q29tcGlsZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDUyICswLDAgQEAKLS8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oIgot
I2luY2x1ZGUgImNvbXBpbGVyL0RldGVjdENhbGxEZXB0aC5oIgotI2luY2x1ZGUgImNvbXBpbGVy
L0Zvckxvb3BVbnJvbGwuaCIKLSNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplLmgiCi0jaW5j
bHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZUdMUG9zaXRpb24uaCIKLSNpbmNsdWRlICJjb21waWxl
ci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuaCIKLSNpbmNsdWRlICJjb21waWxlci9QYXJzZUNvbnRleHQuaCIKLSNpbmNs
dWRlICJjb21waWxlci9SZW5hbWVGdW5jdGlvbi5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1NoSGFu
ZGxlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0QVNULmgiCi0jaW5j
bHVkZSAiY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5oIgotI2luY2x1ZGUgImNvbXBpbGVy
L1ZhcmlhYmxlUGFja2VyLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5j
eUdyYXBoLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0
cHV0LmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuaCIKLSNpbmNsdWRlICJjb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJU
aW1pbmcuaCIKLSNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jb21waWxlci9BcnJheUJvdW5kc0NsYW1w
ZXIuaCIKLQotYm9vbCBpc1dlYkdMQmFzZWRTcGVjKFNoU2hhZGVyU3BlYyBzcGVjKQotewotICAg
ICByZXR1cm4gc3BlYyA9PSBTSF9XRUJHTF9TUEVDIHx8IHNwZWMgPT0gU0hfQ1NTX1NIQURFUlNf
U1BFQzsKLX0KLQotbmFtZXNwYWNlIHsKLWNsYXNzIFRTY29wZWRQb29sQWxsb2NhdG9yIHsKLXB1
YmxpYzoKLSAgICBUU2NvcGVkUG9vbEFsbG9jYXRvcihUUG9vbEFsbG9jYXRvciogYWxsb2NhdG9y
KSA6IG1BbGxvY2F0b3IoYWxsb2NhdG9yKSB7Ci0gICAgICAgIG1BbGxvY2F0b3ItPnB1c2goKTsK
LSAgICAgICAgU2V0R2xvYmFsUG9vbEFsbG9jYXRvcihtQWxsb2NhdG9yKTsKLSAgICB9Ci0gICAg
flRTY29wZWRQb29sQWxsb2NhdG9yKCkgewotICAgICAgICBTZXRHbG9iYWxQb29sQWxsb2NhdG9y
KE5VTEwpOwotICAgICAgICBtQWxsb2NhdG9yLT5wb3AoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgVFBvb2xBbGxvY2F0b3IqIG1BbGxvY2F0b3I7Ci19OwotCi1jbGFzcyBUU2NvcGVkU3ltYm9s
VGFibGVMZXZlbCB7Ci1wdWJsaWM6Ci0gICAgVFNjb3BlZFN5bWJvbFRhYmxlTGV2ZWwoVFN5bWJv
bFRhYmxlKiB0YWJsZSkgOiBtVGFibGUodGFibGUpIHsKLSAgICAgICAgQVNTRVJUKG1UYWJsZS0+
YXRCdWlsdEluTGV2ZWwoKSk7Ci0gICAgICAgIG1UYWJsZS0+cHVzaCgpOwotICAgIH0KLSAgICB+
VFNjb3BlZFN5bWJvbFRhYmxlTGV2ZWwoKSB7Ci0gICAgICAgIHdoaWxlICghbVRhYmxlLT5hdEJ1
aWx0SW5MZXZlbCgpKQotICAgICAgICAgICAgbVRhYmxlLT5wb3AoKTsKLSAgICB9Ci0KLXByaXZh
dGU6Ci0gICAgVFN5bWJvbFRhYmxlKiBtVGFibGU7Ci19OwotfSAgLy8gbmFtZXNwYWNlCi0KLVRT
aEhhbmRsZUJhc2U6OlRTaEhhbmRsZUJhc2UoKSB7Ci0gICAgYWxsb2NhdG9yLnB1c2goKTsKLSAg
ICBTZXRHbG9iYWxQb29sQWxsb2NhdG9yKCZhbGxvY2F0b3IpOwotfQotCi1UU2hIYW5kbGVCYXNl
Ojp+VFNoSGFuZGxlQmFzZSgpIHsKLSAgICBTZXRHbG9iYWxQb29sQWxsb2NhdG9yKE5VTEwpOwot
ICAgIGFsbG9jYXRvci5wb3BBbGwoKTsKLX0KLQotVENvbXBpbGVyOjpUQ29tcGlsZXIoU2hTaGFk
ZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjKQotICAgIDogc2hhZGVyVHlwZSh0eXBlKSwK
LSAgICAgIHNoYWRlclNwZWMoc3BlYyksCi0gICAgICBtYXhVbmlmb3JtVmVjdG9ycygwKSwKLSAg
ICAgIG1heFZhcnlpbmdWZWN0b3JzKDApLAotICAgICAgbWF4RXhwcmVzc2lvbkNvbXBsZXhpdHko
MCksCi0gICAgICBtYXhDYWxsU3RhY2tEZXB0aCgwKSwKLSAgICAgIGZyYWdtZW50UHJlY2lzaW9u
SGlnaChmYWxzZSksCi0gICAgICBjbGFtcGluZ1N0cmF0ZWd5KFNIX0NMQU1QX1dJVEhfQ0xBTVBf
SU5UUklOU0lDKSwKLSAgICAgIGJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yKHR5cGUpCi17Ci0gICAg
bG9uZ05hbWVNYXAgPSBMb25nTmFtZU1hcDo6R2V0SW5zdGFuY2UoKTsKLX0KLQotVENvbXBpbGVy
Ojp+VENvbXBpbGVyKCkKLXsKLSAgICBBU1NFUlQobG9uZ05hbWVNYXApOwotICAgIGxvbmdOYW1l
TWFwLT5SZWxlYXNlKCk7Ci19Ci0KLWJvb2wgVENvbXBpbGVyOjpJbml0KGNvbnN0IFNoQnVpbHRJ
blJlc291cmNlcyYgcmVzb3VyY2VzKQotewotICAgIG1heFVuaWZvcm1WZWN0b3JzID0gKHNoYWRl
clR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUikgPwotICAgICAgICByZXNvdXJjZXMuTWF4VmVydGV4
VW5pZm9ybVZlY3RvcnMgOgotICAgICAgICByZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVj
dG9yczsKLSAgICBtYXhWYXJ5aW5nVmVjdG9ycyA9IHJlc291cmNlcy5NYXhWYXJ5aW5nVmVjdG9y
czsKLSAgICBtYXhFeHByZXNzaW9uQ29tcGxleGl0eSA9IHJlc291cmNlcy5NYXhFeHByZXNzaW9u
Q29tcGxleGl0eTsKLSAgICBtYXhDYWxsU3RhY2tEZXB0aCA9IHJlc291cmNlcy5NYXhDYWxsU3Rh
Y2tEZXB0aDsKLQotICAgIFNldEdsb2JhbFBvb2xBbGxvY2F0b3IoJmFsbG9jYXRvcik7Ci0KLSAg
ICAvLyBHZW5lcmF0ZSBidWlsdC1pbiBzeW1ib2wgdGFibGUuCi0gICAgaWYgKCFJbml0QnVpbHRJ
blN5bWJvbFRhYmxlKHJlc291cmNlcykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBJbml0
RXh0ZW5zaW9uQmVoYXZpb3IocmVzb3VyY2VzLCBleHRlbnNpb25CZWhhdmlvcik7Ci0gICAgZnJh
Z21lbnRQcmVjaXNpb25IaWdoID0gcmVzb3VyY2VzLkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9PSAx
OwotCi0gICAgYXJyYXlCb3VuZHNDbGFtcGVyLlNldENsYW1waW5nU3RyYXRlZ3kocmVzb3VyY2Vz
LkFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5KTsKLSAgICBjbGFtcGluZ1N0cmF0ZWd5ID0gcmVz
b3VyY2VzLkFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5OwotCi0gICAgaGFzaEZ1bmN0aW9uID0g
cmVzb3VyY2VzLkhhc2hGdW5jdGlvbjsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFRD
b21waWxlcjo6Y29tcGlsZShjb25zdCBjaGFyKiBjb25zdCBzaGFkZXJTdHJpbmdzW10sCi0gICAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3QgbnVtU3RyaW5ncywKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBjb21waWxlT3B0aW9ucykKLXsKLSAgICBUU2NvcGVkUG9vbEFsbG9jYXRvciBz
Y29wZWRBbGxvYygmYWxsb2NhdG9yKTsKLSAgICBjbGVhclJlc3VsdHMoKTsKLQotICAgIGlmIChu
dW1TdHJpbmdzID09IDApCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gSWYgY29tcGls
aW5nIGZvciBXZWJHTCwgdmFsaWRhdGUgbG9vcCBhbmQgaW5kZXhpbmcgYXMgd2VsbC4KLSAgICBp
ZiAoaXNXZWJHTEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkKLSAgICAgICAgY29tcGlsZU9wdGlvbnMg
fD0gU0hfVkFMSURBVEVfTE9PUF9JTkRFWElORzsKLQotICAgIC8vIEZpcnN0IHN0cmluZyBpcyBw
YXRoIG9mIHNvdXJjZSBmaWxlIGlmIGZsYWcgaXMgc2V0LiBUaGUgYWN0dWFsIHNvdXJjZSBmb2xs
b3dzLgotICAgIGNvbnN0IGNoYXIqIHNvdXJjZVBhdGggPSBOVUxMOwotICAgIHNpemVfdCBmaXJz
dFNvdXJjZSA9IDA7Ci0gICAgaWYgKGNvbXBpbGVPcHRpb25zICYgU0hfU09VUkNFX1BBVEgpCi0g
ICAgewotICAgICAgICBzb3VyY2VQYXRoID0gc2hhZGVyU3RyaW5nc1swXTsKLSAgICAgICAgKytm
aXJzdFNvdXJjZTsKLSAgICB9Ci0KLSAgICBUSW50ZXJtZWRpYXRlIGludGVybWVkaWF0ZShpbmZv
U2luayk7Ci0gICAgVFBhcnNlQ29udGV4dCBwYXJzZUNvbnRleHQoc3ltYm9sVGFibGUsIGV4dGVu
c2lvbkJlaGF2aW9yLCBpbnRlcm1lZGlhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2hhZGVyVHlwZSwgc2hhZGVyU3BlYywgY29tcGlsZU9wdGlvbnMsIHRydWUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlUGF0aCwgaW5mb1NpbmspOwotICAgIHBhcnNl
Q29udGV4dC5mcmFnbWVudFByZWNpc2lvbkhpZ2ggPSBmcmFnbWVudFByZWNpc2lvbkhpZ2g7Ci0g
ICAgU2V0R2xvYmFsUGFyc2VDb250ZXh0KCZwYXJzZUNvbnRleHQpOwotCi0gICAgLy8gV2UgcHJl
c2VydmUgc3ltYm9scyBhdCB0aGUgYnVpbHQtaW4gbGV2ZWwgZnJvbSBjb21waWxlLXRvLWNvbXBp
bGUuCi0gICAgLy8gU3RhcnQgcHVzaGluZyB0aGUgdXNlci1kZWZpbmVkIHN5bWJvbHMgYXQgZ2xv
YmFsIGxldmVsLgotICAgIFRTY29wZWRTeW1ib2xUYWJsZUxldmVsIHNjb3BlZFN5bWJvbExldmVs
KCZzeW1ib2xUYWJsZSk7Ci0KLSAgICAvLyBQYXJzZSBzaGFkZXIuCi0gICAgYm9vbCBzdWNjZXNz
ID0KLSAgICAgICAgKFBhUGFyc2VTdHJpbmdzKG51bVN0cmluZ3MgLSBmaXJzdFNvdXJjZSwgJnNo
YWRlclN0cmluZ3NbZmlyc3RTb3VyY2VdLCBOVUxMLCAmcGFyc2VDb250ZXh0KSA9PSAwKSAmJgot
ICAgICAgICAocGFyc2VDb250ZXh0LnRyZWVSb290ICE9IE5VTEwpOwotICAgIGlmIChzdWNjZXNz
KSB7Ci0gICAgICAgIFRJbnRlcm1Ob2RlKiByb290ID0gcGFyc2VDb250ZXh0LnRyZWVSb290Owot
ICAgICAgICBzdWNjZXNzID0gaW50ZXJtZWRpYXRlLnBvc3RQcm9jZXNzKHJvb3QpOwotCi0gICAg
ICAgIGlmIChzdWNjZXNzKQotICAgICAgICAgICAgc3VjY2VzcyA9IGRldGVjdENhbGxEZXB0aChy
b290LCBpbmZvU2luaywgKGNvbXBpbGVPcHRpb25zICYgU0hfTElNSVRfQ0FMTF9TVEFDS19ERVBU
SCkgIT0gMCk7Ci0KLSAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hf
VkFMSURBVEVfTE9PUF9JTkRFWElORykpCi0gICAgICAgICAgICBzdWNjZXNzID0gdmFsaWRhdGVM
aW1pdGF0aW9ucyhyb290KTsKLQotICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlv
bnMgJiBTSF9USU1JTkdfUkVTVFJJQ1RJT05TKSkKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSBlbmZv
cmNlVGltaW5nUmVzdHJpY3Rpb25zKHJvb3QsIChjb21waWxlT3B0aW9ucyAmIFNIX0RFUEVOREVO
Q1lfR1JBUEgpICE9IDApOwotCi0gICAgICAgIGlmIChzdWNjZXNzICYmIHNoYWRlclNwZWMgPT0g
U0hfQ1NTX1NIQURFUlNfU1BFQykKLSAgICAgICAgICAgIHJld3JpdGVDU1NTaGFkZXIocm9vdCk7
Ci0KLSAgICAgICAgLy8gVW5yb2xsIGZvci1sb29wIG1hcmt1cCBuZWVkcyB0byBoYXBwZW4gYWZ0
ZXIgdmFsaWRhdGVMaW1pdGF0aW9ucyBwYXNzLgotICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29t
cGlsZU9wdGlvbnMgJiBTSF9VTlJPTExfRk9SX0xPT1BfV0lUSF9JTlRFR0VSX0lOREVYKSkKLSAg
ICAgICAgICAgIEZvckxvb3BVbnJvbGw6Ok1hcmtGb3JMb29wc1dpdGhJbnRlZ2VySW5kaWNlc0Zv
clVucm9sbGluZyhyb290KTsKLQotICAgICAgICAvLyBCdWlsdC1pbiBmdW5jdGlvbiBlbXVsYXRp
b24gbmVlZHMgdG8gaGFwcGVuIGFmdGVyIHZhbGlkYXRlTGltaXRhdGlvbnMgcGFzcy4KLSAgICAg
ICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfRU1VTEFURV9CVUlMVF9JTl9G
VU5DVElPTlMpKQotICAgICAgICAgICAgYnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuTWFya0J1aWx0
SW5GdW5jdGlvbnNGb3JFbXVsYXRpb24ocm9vdCk7Ci0KLSAgICAgICAgLy8gQ2xhbXBpbmcgdW5p
Zm9ybSBhcnJheSBib3VuZHMgbmVlZHMgdG8gaGFwcGVuIGFmdGVyIHZhbGlkYXRlTGltaXRhdGlv
bnMgcGFzcy4KLSAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfQ0xB
TVBfSU5ESVJFQ1RfQVJSQVlfQk9VTkRTKSkKLSAgICAgICAgICAgIGFycmF5Qm91bmRzQ2xhbXBl
ci5NYXJrSW5kaXJlY3RBcnJheUJvdW5kc0ZvckNsYW1waW5nKHJvb3QpOwotCi0gICAgICAgIC8v
IERpc2FsbG93IGV4cHJlc3Npb25zIGRlZW1lZCB0b28gY29tcGxleC4KLSAgICAgICAgaWYgKHN1
Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfTElNSVRfRVhQUkVTU0lPTl9DT01QTEVYSVRZ
KSkKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSBsaW1pdEV4cHJlc3Npb25Db21wbGV4aXR5KHJvb3Qp
OwotCi0gICAgICAgIC8vIENhbGwgbWFwTG9uZ1ZhcmlhYmxlTmFtZXMoKSBiZWZvcmUgY29sbGVj
dEF0dHJpYnNVbmlmb3JtcygpIHNvIGluCi0gICAgICAgIC8vIGNvbGxlY3RBdHRyaWJzVW5pZm9y
bXMoKSB3ZSBhbHJlYWR5IGhhdmUgdGhlIG1hcHBlZCBzeW1ib2wgbmFtZXMgYW5kCi0gICAgICAg
IC8vIHdlIGNvdWxkIGNvbXBvc2l0ZSBtYXBwZWQgYW5kIG9yaWdpbmFsIHZhcmlhYmxlIG5hbWVz
LgotICAgICAgICAvLyBBbHNvLCBpZiB3ZSBoYXNoIGFsbCB0aGUgbmFtZXMsIHRoZW4gbm8gbmVl
ZCB0byBkbyB0aGlzIGZvciBsb25nIG5hbWVzLgotICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29t
cGlsZU9wdGlvbnMgJiBTSF9NQVBfTE9OR19WQVJJQUJMRV9OQU1FUykgJiYgaGFzaEZ1bmN0aW9u
ID09IE5VTEwpCi0gICAgICAgICAgICBtYXBMb25nVmFyaWFibGVOYW1lcyhyb290KTsKLQotICAg
ICAgICBpZiAoc3VjY2VzcyAmJiBzaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIgJiYgKGNv
bXBpbGVPcHRpb25zICYgU0hfSU5JVF9HTF9QT1NJVElPTikpIHsKLSAgICAgICAgICAgIEluaXRp
YWxpemVHTFBvc2l0aW9uIGluaXRHTFBvc2l0aW9uOwotICAgICAgICAgICAgcm9vdC0+dHJhdmVy
c2UoJmluaXRHTFBvc2l0aW9uKTsKLSAgICAgICAgfQotCi0gICAgaWYgKHN1Y2Nlc3MgJiYgKGNv
bXBpbGVPcHRpb25zICYgU0hfVU5GT0xEX1NIT1JUX0NJUkNVSVQpKSB7Ci0gICAgICAgICAgICBV
bmZvbGRTaG9ydENpcmN1aXRBU1QgdW5mb2xkU2hvcnRDaXJjdWl0OwotICAgICAgICAgICAgcm9v
dC0+dHJhdmVyc2UoJnVuZm9sZFNob3J0Q2lyY3VpdCk7Ci0gICAgICAgICAgICB1bmZvbGRTaG9y
dENpcmN1aXQudXBkYXRlVHJlZSgpOwotICAgIH0KLQotICAgICAgICBpZiAoc3VjY2VzcyAmJiAo
Y29tcGlsZU9wdGlvbnMgJiBTSF9WQVJJQUJMRVMpKSB7Ci0gICAgICAgICAgICBjb2xsZWN0VmFy
aWFibGVzKHJvb3QpOwotICAgICAgICAgICAgaWYgKGNvbXBpbGVPcHRpb25zICYgU0hfRU5GT1JD
RV9QQUNLSU5HX1JFU1RSSUNUSU9OUykKLSAgICAgICAgICAgICAgICBzdWNjZXNzID0gZW5mb3Jj
ZVBhY2tpbmdSZXN0cmljdGlvbnMoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzdWNjZXNz
ICYmIChjb21waWxlT3B0aW9ucyAmIFNIX0lOVEVSTUVESUFURV9UUkVFKSkKLSAgICAgICAgICAg
IGludGVybWVkaWF0ZS5vdXRwdXRUcmVlKHJvb3QpOwotCi0gICAgICAgIGlmIChzdWNjZXNzICYm
IChjb21waWxlT3B0aW9ucyAmIFNIX09CSkVDVF9DT0RFKSkKLSAgICAgICAgICAgIHRyYW5zbGF0
ZShyb290KTsKLSAgICB9Ci0KLSAgICAvLyBDbGVhbnVwIG1lbW9yeS4KLSAgICBpbnRlcm1lZGlh
dGUucmVtb3ZlKHBhcnNlQ29udGV4dC50cmVlUm9vdCk7Ci0KLSAgICByZXR1cm4gc3VjY2VzczsK
LX0KLQotYm9vbCBUQ29tcGlsZXI6OkluaXRCdWlsdEluU3ltYm9sVGFibGUoY29uc3QgU2hCdWls
dEluUmVzb3VyY2VzICZyZXNvdXJjZXMpCi17Ci0gICAgY29tcGlsZVJlc291cmNlcyA9IHJlc291
cmNlczsKLQotICAgIGFzc2VydChzeW1ib2xUYWJsZS5pc0VtcHR5KCkpOwotICAgIHN5bWJvbFRh
YmxlLnB1c2goKTsKLQotICAgIFRQdWJsaWNUeXBlIGludGVnZXI7Ci0gICAgaW50ZWdlci50eXBl
ID0gRWJ0SW50OwotICAgIGludGVnZXIuc2l6ZSA9IDE7Ci0gICAgaW50ZWdlci5tYXRyaXggPSBm
YWxzZTsKLSAgICBpbnRlZ2VyLmFycmF5ID0gZmFsc2U7Ci0KLSAgICBUUHVibGljVHlwZSBmbG9h
dGluZ1BvaW50OwotICAgIGZsb2F0aW5nUG9pbnQudHlwZSA9IEVidEZsb2F0OwotICAgIGZsb2F0
aW5nUG9pbnQuc2l6ZSA9IDE7Ci0gICAgZmxvYXRpbmdQb2ludC5tYXRyaXggPSBmYWxzZTsKLSAg
ICBmbG9hdGluZ1BvaW50LmFycmF5ID0gZmFsc2U7Ci0KLSAgICBUUHVibGljVHlwZSBzYW1wbGVy
OwotICAgIHNhbXBsZXIuc2l6ZSA9IDE7Ci0gICAgc2FtcGxlci5tYXRyaXggPSBmYWxzZTsKLSAg
ICBzYW1wbGVyLmFycmF5ID0gZmFsc2U7Ci0KLSAgICBzd2l0Y2goc2hhZGVyVHlwZSkKLSAgICB7
Ci0gICAgICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjoKLSAgICAgICAgc3ltYm9sVGFibGUuc2V0
RGVmYXVsdFByZWNpc2lvbihpbnRlZ2VyLCBFYnBNZWRpdW0pOwotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgU0hfVkVSVEVYX1NIQURFUjoKLSAgICAgICAgc3ltYm9sVGFibGUuc2V0RGVmYXVs
dFByZWNpc2lvbihpbnRlZ2VyLCBFYnBIaWdoKTsKLSAgICAgICAgc3ltYm9sVGFibGUuc2V0RGVm
YXVsdFByZWNpc2lvbihmbG9hdGluZ1BvaW50LCBFYnBIaWdoKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBkZWZhdWx0OiBhc3NlcnQoZmFsc2UgJiYgIkxhbmd1YWdlIG5vdCBzdXBwb3J0ZWQiKTsK
LSAgICB9Ci0gICAgLy8gV2Ugc2V0IGRlZmF1bHRzIGZvciBhbGwgdGhlIHNhbXBsZXIgdHlwZXMs
IGV2ZW4gdGhvc2UgdGhhdCBhcmUKLSAgICAvLyBvbmx5IGF2YWlsYWJsZSBpZiBhbiBleHRlbnNp
b24gZXhpc3RzLgotICAgIGZvciAoaW50IHNhbXBsZXJUeXBlID0gRWJ0R3VhcmRTYW1wbGVyQmVn
aW4gKyAxOwotICAgICAgICAgc2FtcGxlclR5cGUgPCBFYnRHdWFyZFNhbXBsZXJFbmQ7ICsrc2Ft
cGxlclR5cGUpIHsKLSAgICAgICAgc2FtcGxlci50eXBlID0gc3RhdGljX2Nhc3Q8VEJhc2ljVHlw
ZT4oc2FtcGxlclR5cGUpOwotICAgICAgICBzeW1ib2xUYWJsZS5zZXREZWZhdWx0UHJlY2lzaW9u
KHNhbXBsZXIsIEVicExvdyk7Ci0gICAgfQotCi0gICAgSW5zZXJ0QnVpbHRJbkZ1bmN0aW9ucyhz
aGFkZXJUeXBlLCBzaGFkZXJTcGVjLCByZXNvdXJjZXMsIHN5bWJvbFRhYmxlKTsKLQotICAgIElk
ZW50aWZ5QnVpbHRJbnMoc2hhZGVyVHlwZSwgc2hhZGVyU3BlYywgcmVzb3VyY2VzLCBzeW1ib2xU
YWJsZSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBUQ29tcGlsZXI6OmNsZWFyUmVz
dWx0cygpCi17Ci0gICAgYXJyYXlCb3VuZHNDbGFtcGVyLkNsZWFudXAoKTsKLSAgICBpbmZvU2lu
ay5pbmZvLmVyYXNlKCk7Ci0gICAgaW5mb1Npbmsub2JqLmVyYXNlKCk7Ci0gICAgaW5mb1Npbmsu
ZGVidWcuZXJhc2UoKTsKLQotICAgIGF0dHJpYnMuY2xlYXIoKTsKLSAgICB1bmlmb3Jtcy5jbGVh
cigpOwotICAgIHZhcnlpbmdzLmNsZWFyKCk7Ci0KLSAgICBidWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5DbGVhbnVwKCk7Ci0KLSAgICBuYW1lTWFwLmNsZWFyKCk7Ci19Ci0KLWJvb2wgVENvbXBpbGVy
OjpkZXRlY3RDYWxsRGVwdGgoVEludGVybU5vZGUqIHJvb3QsIFRJbmZvU2luayYgaW5mb1Npbmss
IGJvb2wgbGltaXRDYWxsU3RhY2tEZXB0aCkKLXsKLSAgICBEZXRlY3RDYWxsRGVwdGggZGV0ZWN0
KGluZm9TaW5rLCBsaW1pdENhbGxTdGFja0RlcHRoLCBtYXhDYWxsU3RhY2tEZXB0aCk7Ci0gICAg
cm9vdC0+dHJhdmVyc2UoJmRldGVjdCk7Ci0gICAgc3dpdGNoIChkZXRlY3QuZGV0ZWN0Q2FsbERl
cHRoKCkpIHsKLSAgICAgICAgY2FzZSBEZXRlY3RDYWxsRGVwdGg6OmtFcnJvck5vbmU6Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBEZXRlY3RDYWxsRGVwdGg6OmtFcnJv
ck1pc3NpbmdNYWluOgotICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5wcmVmaXgoRVByZWZpeEVy
cm9yKTsKLSAgICAgICAgICAgIGluZm9TaW5rLmluZm8gPDwgIk1pc3NpbmcgbWFpbigpIjsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY2FzZSBEZXRlY3RDYWxsRGVwdGg6OmtF
cnJvclJlY3Vyc2lvbjoKLSAgICAgICAgICAgIGluZm9TaW5rLmluZm8ucHJlZml4KEVQcmVmaXhF
cnJvcik7Ci0gICAgICAgICAgICBpbmZvU2luay5pbmZvIDw8ICJGdW5jdGlvbiByZWN1cnNpb24g
ZGV0ZWN0ZWQiOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjYXNlIERldGVj
dENhbGxEZXB0aDo6a0Vycm9yTWF4RGVwdGhFeGNlZWRlZDoKLSAgICAgICAgICAgIGluZm9TaW5r
LmluZm8ucHJlZml4KEVQcmVmaXhFcnJvcik7Ci0gICAgICAgICAgICBpbmZvU2luay5pbmZvIDw8
ICJGdW5jdGlvbiBjYWxsIHN0YWNrIHRvbyBkZWVwIjsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi12b2lkIFRDb21waWxlcjo6cmV3cml0ZUNT
U1NoYWRlcihUSW50ZXJtTm9kZSogcm9vdCkKLXsKLSAgICBSZW5hbWVGdW5jdGlvbiByZW5hbWVy
KCJtYWluKCIsICJjc3NfbWFpbigiKTsKLSAgICByb290LT50cmF2ZXJzZSgmcmVuYW1lcik7Ci19
Ci0KLWJvb2wgVENvbXBpbGVyOjp2YWxpZGF0ZUxpbWl0YXRpb25zKFRJbnRlcm1Ob2RlKiByb290
KSB7Ci0gICAgVmFsaWRhdGVMaW1pdGF0aW9ucyB2YWxpZGF0ZShzaGFkZXJUeXBlLCBpbmZvU2lu
ay5pbmZvKTsKLSAgICByb290LT50cmF2ZXJzZSgmdmFsaWRhdGUpOwotICAgIHJldHVybiB2YWxp
ZGF0ZS5udW1FcnJvcnMoKSA9PSAwOwotfQotCi1ib29sIFRDb21waWxlcjo6ZW5mb3JjZVRpbWlu
Z1Jlc3RyaWN0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCwgYm9vbCBvdXRwdXRHcmFwaCkKLXsKLSAg
ICBpZiAoc2hhZGVyU3BlYyAhPSBTSF9XRUJHTF9TUEVDKSB7Ci0gICAgICAgIGluZm9TaW5rLmlu
Zm8gPDwgIlRpbWluZyByZXN0cmljdGlvbnMgbXVzdCBiZSBlbmZvcmNlZCB1bmRlciB0aGUgV2Vi
R0wgc3BlYy4iOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHNoYWRl
clR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKSB7Ci0gICAgICAgIFREZXBlbmRlbmN5R3JhcGgg
Z3JhcGgocm9vdCk7Ci0KLSAgICAgICAgLy8gT3V0cHV0IGFueSBlcnJvcnMgZmlyc3QuCi0gICAg
ICAgIGJvb2wgc3VjY2VzcyA9IGVuZm9yY2VGcmFnbWVudFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9u
cyhncmFwaCk7Ci0gICAgICAgIAotICAgICAgICAvLyBUaGVuLCBvdXRwdXQgdGhlIGRlcGVuZGVu
Y3kgZ3JhcGguCi0gICAgICAgIGlmIChvdXRwdXRHcmFwaCkgewotICAgICAgICAgICAgVERlcGVu
ZGVuY3lHcmFwaE91dHB1dCBvdXRwdXQoaW5mb1NpbmsuaW5mbyk7Ci0gICAgICAgICAgICBvdXRw
dXQub3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhncmFwaCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIHJldHVybiBzdWNjZXNzOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgcmV0dXJu
IGVuZm9yY2VWZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMocm9vdCk7Ci0gICAgfQotfQot
Ci1ib29sIFRDb21waWxlcjo6bGltaXRFeHByZXNzaW9uQ29tcGxleGl0eShUSW50ZXJtTm9kZSog
cm9vdCkKLXsKLSAgICBUSW50ZXJtVHJhdmVyc2VyIHRyYXZlcnNlcjsKLSAgICByb290LT50cmF2
ZXJzZSgmdHJhdmVyc2VyKTsKLSAgICBURGVwZW5kZW5jeUdyYXBoIGdyYXBoKHJvb3QpOwotCi0g
ICAgZm9yIChURnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZ3JhcGgu
YmVnaW5Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMoKTsKLSAgICAgICAgIGl0ZXIgIT0gZ3JhcGgu
ZW5kVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKCk7Ci0gICAgICAgICArK2l0ZXIpCi0gICAgewot
ICAgICAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIHNhbXBsZXJTeW1ib2wgPSAqaXRlcjsKLSAgICAg
ICAgVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciBncmFwaFRyYXZlcnNlcjsKLSAgICAgICAgc2Ft
cGxlclN5bWJvbC0+dHJhdmVyc2UoJmdyYXBoVHJhdmVyc2VyKTsKLSAgICB9Ci0KLSAgICBpZiAo
dHJhdmVyc2VyLmdldE1heERlcHRoKCkgPiBtYXhFeHByZXNzaW9uQ29tcGxleGl0eSkgewotICAg
ICAgICBpbmZvU2luay5pbmZvIDw8ICJFeHByZXNzaW9uIHRvbyBjb21wbGV4LiI7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVENvbXBp
bGVyOjplbmZvcmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoY29uc3QgVERlcGVu
ZGVuY3lHcmFwaCYgZ3JhcGgpCi17Ci0gICAgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZyBy
ZXN0cmljdG9yKGluZm9TaW5rLmluZm8pOwotICAgIHJlc3RyaWN0b3IuZW5mb3JjZVJlc3RyaWN0
aW9ucyhncmFwaCk7Ci0gICAgcmV0dXJuIHJlc3RyaWN0b3IubnVtRXJyb3JzKCkgPT0gMDsKLX0K
LQotYm9vbCBUQ29tcGlsZXI6OmVuZm9yY2VWZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMo
VEludGVybU5vZGUqIHJvb3QpCi17Ci0gICAgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcgcmVz
dHJpY3RvcihpbmZvU2luay5pbmZvKTsKLSAgICByZXN0cmljdG9yLmVuZm9yY2VSZXN0cmljdGlv
bnMocm9vdCk7Ci0gICAgcmV0dXJuIHJlc3RyaWN0b3IubnVtRXJyb3JzKCkgPT0gMDsKLX0KLQot
dm9pZCBUQ29tcGlsZXI6OmNvbGxlY3RWYXJpYWJsZXMoVEludGVybU5vZGUqIHJvb3QpCi17Ci0g
ICAgQ29sbGVjdFZhcmlhYmxlcyBjb2xsZWN0KGF0dHJpYnMsIHVuaWZvcm1zLCB2YXJ5aW5ncywg
aGFzaEZ1bmN0aW9uKTsKLSAgICByb290LT50cmF2ZXJzZSgmY29sbGVjdCk7Ci19Ci0KLWJvb2wg
VENvbXBpbGVyOjplbmZvcmNlUGFja2luZ1Jlc3RyaWN0aW9ucygpCi17Ci0gICAgVmFyaWFibGVQ
YWNrZXIgcGFja2VyOwotICAgIGJvb2wgc3VjY2VzcyA9IHBhY2tlci5DaGVja1ZhcmlhYmxlc1dp
dGhpblBhY2tpbmdMaW1pdHMobWF4VW5pZm9ybVZlY3RvcnMsIHVuaWZvcm1zKTsKLSAgICBpZiAo
IXN1Y2Nlc3MpIHsKLSAgICAgICAgaW5mb1NpbmsuaW5mby5wcmVmaXgoRVByZWZpeEVycm9yKTsK
LSAgICAgICAgaW5mb1NpbmsuaW5mbyA8PCAidG9vIG1hbnkgdW5pZm9ybXMiOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgc3VjY2VzcyA9IHBhY2tlci5DaGVja1ZhcmlhYmxl
c1dpdGhpblBhY2tpbmdMaW1pdHMobWF4VmFyeWluZ1ZlY3RvcnMsIHZhcnlpbmdzKTsKLQotICAg
IGlmICghc3VjY2VzcykgewotICAgICAgICBpbmZvU2luay5pbmZvLnByZWZpeChFUHJlZml4RXJy
b3IpOwotICAgICAgICBpbmZvU2luay5pbmZvIDw8ICJ0b28gbWFueSB2YXJ5aW5ncyI7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBU
Q29tcGlsZXI6Om1hcExvbmdWYXJpYWJsZU5hbWVzKFRJbnRlcm1Ob2RlKiByb290KQotewotICAg
IEFTU0VSVChsb25nTmFtZU1hcCk7Ci0gICAgTWFwTG9uZ1ZhcmlhYmxlTmFtZXMgbWFwKGxvbmdO
YW1lTWFwKTsKLSAgICByb290LT50cmF2ZXJzZSgmbWFwKTsKLX0KLQotaW50IFRDb21waWxlcjo6
Z2V0TWFwcGVkTmFtZU1heExlbmd0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIE1BWF9TSE9SVEVO
RURfSURFTlRJRklFUl9TSVpFICsgMTsKLX0KLQotY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBU
Q29tcGlsZXI6OmdldEV4dGVuc2lvbkJlaGF2aW9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZXh0
ZW5zaW9uQmVoYXZpb3I7Ci19Ci0KLWNvbnN0IFNoQnVpbHRJblJlc291cmNlcyYgVENvbXBpbGVy
OjpnZXRSZXNvdXJjZXMoKSBjb25zdAotewotICAgIHJldHVybiBjb21waWxlUmVzb3VyY2VzOwot
fQotCi1jb25zdCBBcnJheUJvdW5kc0NsYW1wZXImIFRDb21waWxlcjo6Z2V0QXJyYXlCb3VuZHND
bGFtcGVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gYXJyYXlCb3VuZHNDbGFtcGVyOwotfQotCi1T
aEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IFRDb21waWxlcjo6Z2V0QXJyYXlJbmRleENsYW1w
aW5nU3RyYXRlZ3koKSBjb25zdAotewotICAgIHJldHVybiBjbGFtcGluZ1N0cmF0ZWd5OwotfQot
Ci1jb25zdCBCdWlsdEluRnVuY3Rpb25FbXVsYXRvciYgVENvbXBpbGVyOjpnZXRCdWlsdEluRnVu
Y3Rpb25FbXVsYXRvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGJ1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0NvbnN0YW50VW5pb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9D
b25zdGFudFVuaW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxZTM3ODg1Zjkw
MWIwMjRkNjM0NjU4NDc3MTJiZmI2ODg2MDczNGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0NvbnN0YW50VW5pb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDI1NyArMCwwIEBACi0vLwotLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCi0vLwotCi0jaWZuZGVmIF9DT05TVEFOVF9VTklPTl9JTkNMVURFRF8KLSNkZWZpbmUg
X0NPTlNUQU5UX1VOSU9OX0lOQ0xVREVEXwotCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0KLWNsYXNz
IENvbnN0YW50VW5pb24gewotcHVibGljOgotICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUo
KTsKLSAgICBDb25zdGFudFVuaW9uKCkKLSAgICB7Ci0gICAgICAgIGlDb25zdCA9IDA7Ci0gICAg
ICAgIHR5cGUgPSBFYnRWb2lkOwotICAgIH0KLQotICAgIHZvaWQgc2V0SUNvbnN0KGludCBpKSB7
aUNvbnN0ID0gaTsgdHlwZSA9IEVidEludDsgfQotICAgIHZvaWQgc2V0RkNvbnN0KGZsb2F0IGYp
IHtmQ29uc3QgPSBmOyB0eXBlID0gRWJ0RmxvYXQ7IH0KLSAgICB2b2lkIHNldEJDb25zdChib29s
IGIpIHtiQ29uc3QgPSBiOyB0eXBlID0gRWJ0Qm9vbDsgfQotCi0gICAgaW50IGdldElDb25zdCgp
IHsgcmV0dXJuIGlDb25zdDsgfQotICAgIGZsb2F0IGdldEZDb25zdCgpIHsgcmV0dXJuIGZDb25z
dDsgfQotICAgIGJvb2wgZ2V0QkNvbnN0KCkgeyByZXR1cm4gYkNvbnN0OyB9Ci0gICAgaW50IGdl
dElDb25zdCgpIGNvbnN0IHsgcmV0dXJuIGlDb25zdDsgfQotICAgIGZsb2F0IGdldEZDb25zdCgp
IGNvbnN0IHsgcmV0dXJuIGZDb25zdDsgfQotICAgIGJvb2wgZ2V0QkNvbnN0KCkgY29uc3QgeyBy
ZXR1cm4gYkNvbnN0OyB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaW50IGkpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gaSA9PSBpQ29uc3Q7Ci0gICAgfQotCi0gICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IGZsb2F0IGYpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZiA9
PSBmQ29uc3Q7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGJvb2wgYikgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBiID09IGJDb25zdDsKLSAgICB9Ci0KLSAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0Ci0gICAgewot
ICAgICAgICBpZiAoY29uc3RhbnQudHlwZSAhPSB0eXBlKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEVidEludDoKLSAg
ICAgICAgICAgIHJldHVybiBjb25zdGFudC5pQ29uc3QgPT0gaUNvbnN0OwotICAgICAgICBjYXNl
IEVidEZsb2F0OgotICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50LmZDb25zdCA9PSBmQ29uc3Q7
Ci0gICAgICAgIGNhc2UgRWJ0Qm9vbDoKLSAgICAgICAgICAgIHJldHVybiBjb25zdGFudC5iQ29u
c3QgPT0gYkNvbnN0OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGludCBpKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KGkpOwotICAgIH0KLQotICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBmbG9hdCBmKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuICFvcGVyYXRvcj09KGYpOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBi
b29sIGIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gIW9wZXJhdG9yPT0oYik7Ci0gICAg
fQotCi0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KGNvbnN0YW50KTsKLSAgICB9
Ci0KLSAgICBib29sIG9wZXJhdG9yPihjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29u
c3QKLSAgICB7IAotICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKLSAgICAg
ICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgRWJ0SW50OgotICAgICAgICAgICAgcmV0
dXJuIGlDb25zdCA+IGNvbnN0YW50LmlDb25zdDsKLSAgICAgICAgY2FzZSBFYnRGbG9hdDoKLSAg
ICAgICAgICAgIHJldHVybiBmQ29uc3QgPiBjb25zdGFudC5mQ29uc3Q7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gSW52YWxpZCBvcGVyYXRpb24sIGhh
bmRsZWQgYXQgc2VtYW50aWMgYW5hbHlzaXMKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wg
b3BlcmF0b3I8KGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAotICAgIHsgCi0g
ICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwotICAgICAgICBzd2l0Y2ggKHR5
cGUpIHsKLSAgICAgICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAgICAgICByZXR1cm4gaUNvbnN0IDwg
Y29uc3RhbnQuaUNvbnN0OwotICAgICAgICBjYXNlIEVidEZsb2F0OgotICAgICAgICAgICAgcmV0
dXJuIGZDb25zdCA8IGNvbnN0YW50LmZDb25zdDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsgICAvLyBJbnZhbGlkIG9wZXJhdGlvbiwgaGFuZGxlZCBhdCBzZW1h
bnRpYyBhbmFseXNpcwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQ29uc3RhbnRVbmlvbiBvcGVy
YXRvcisoY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0Ci0gICAgeyAKLSAgICAg
ICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKLSAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29u
c3RhbnQudHlwZSk7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEVidElu
dDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCArIGNvbnN0YW50LmlDb25zdCk7IGJyZWFr
OwotICAgICAgICBjYXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0ICsg
Y29uc3RhbnQuZkNvbnN0KTsgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAm
JiAiRGVmYXVsdCBtaXNzaW5nIik7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmV0dXJu
VmFsdWU7Ci0gICAgfQotCi0gICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvci0oY29uc3QgQ29uc3Rh
bnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0Ci0gICAgeyAKLSAgICAgICAgQ29uc3RhbnRVbmlvbiBy
ZXR1cm5WYWx1ZTsKLSAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7Ci0gICAg
ICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0
SUNvbnN0KGlDb25zdCAtIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOwotICAgICAgICBjYXNlIEVi
dEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0IC0gY29uc3RhbnQuZkNvbnN0KTsg
YnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5n
Iik7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci0gICAgfQotCi0g
ICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvciooY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQp
IGNvbnN0Ci0gICAgeyAKLSAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKLSAgICAg
ICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkg
ewotICAgICAgICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAqIGNv
bnN0YW50LmlDb25zdCk7IGJyZWFrOwotICAgICAgICBjYXNlIEVidEZsb2F0OiByZXR1cm5WYWx1
ZS5zZXRGQ29uc3QoZkNvbnN0ICogY29uc3RhbnQuZkNvbnN0KTsgYnJlYWs7IAotICAgICAgICBk
ZWZhdWx0OiBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOwotICAgICAgICB9Ci0K
LSAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwotICAgIH0KLQotICAgIENvbnN0YW50VW5pb24g
b3BlcmF0b3IlKGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAotICAgIHsgCi0g
ICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7Ci0gICAgICAgIGFzc2VydCh0eXBlID09
IGNvbnN0YW50LnR5cGUpOwotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBF
YnRJbnQ6IHJldHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgJSBjb25zdGFudC5pQ29uc3QpOyBi
cmVhazsKLSAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNz
aW5nIik7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci0gICAgfQot
Ci0gICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvcj4+KGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0
YW50KSBjb25zdAotICAgIHsgCi0gICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7Ci0g
ICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwotICAgICAgICBzd2l0Y2ggKHR5
cGUpIHsKLSAgICAgICAgY2FzZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNldElDb25zdChpQ29uc3Qg
Pj4gY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQo
ZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
IHJldHVyblZhbHVlOwotICAgIH0KLQotICAgIENvbnN0YW50VW5pb24gb3BlcmF0b3I8PChjb25z
dCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKLSAgICB7IAotICAgICAgICBDb25zdGFu
dFVuaW9uIHJldHVyblZhbHVlOwotICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBl
KTsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5W
YWx1ZS5zZXRJQ29uc3QoaUNvbnN0IDw8IGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOwotICAgICAg
ICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLSAgICB9Ci0KLSAgICBDb25zdGFu
dFVuaW9uIG9wZXJhdG9yJihjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKLSAg
ICB7IAotICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOwotICAgICAgICBhc3NlcnQo
dHlwZSA9PSBjb25zdGFudC50eXBlKTsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAg
IGNhc2UgRWJ0SW50OiAgcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAmIGNvbnN0YW50LmlD
b25zdCk7IGJyZWFrOwotICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZh
dWx0IG1pc3NpbmciKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsK
LSAgICB9Ci0KLSAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yfChjb25zdCBDb25zdGFudFVuaW9u
JiBjb25zdGFudCkgY29uc3QKLSAgICB7IAotICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZh
bHVlOwotICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKLSAgICAgICAgc3dp
dGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgRWJ0SW50OiAgcmV0dXJuVmFsdWUuc2V0SUNvbnN0
KGlDb25zdCB8IGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOwotICAgICAgICBkZWZhdWx0OiAgICAg
YXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHJldHVybiByZXR1cm5WYWx1ZTsKLSAgICB9Ci0KLSAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9y
Xihjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKLSAgICB7IAotICAgICAgICBD
b25zdGFudFVuaW9uIHJldHVyblZhbHVlOwotICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFu
dC50eXBlKTsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgRWJ0SW50OiAg
cmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCBeIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOwot
ICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLSAgICB9Ci0KLSAgICBD
b25zdGFudFVuaW9uIG9wZXJhdG9yJiYoY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNv
bnN0Ci0gICAgeyAKLSAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKLSAgICAgICAg
YXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewot
ICAgICAgICBjYXNlIEVidEJvb2w6IHJldHVyblZhbHVlLnNldEJDb25zdChiQ29uc3QgJiYgY29u
c3RhbnQuYkNvbnN0KTsgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2Ug
JiYgIkRlZmF1bHQgbWlzc2luZyIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJldHVy
blZhbHVlOwotICAgIH0KLQotICAgIENvbnN0YW50VW5pb24gb3BlcmF0b3J8fChjb25zdCBDb25z
dGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKLSAgICB7IAotICAgICAgICBDb25zdGFudFVuaW9u
IHJldHVyblZhbHVlOwotICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKLSAg
ICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgRWJ0Qm9vbDogcmV0dXJuVmFsdWUu
c2V0QkNvbnN0KGJDb25zdCB8fCBjb25zdGFudC5iQ29uc3QpOyBicmVhazsKLSAgICAgICAgZGVm
YXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7Ci0gICAgICAgIH0K
LQotICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci0gICAgfQotCi0gICAgVEJhc2ljVHlwZSBn
ZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZTsgfQotcHJpdmF0ZToKLQotICAgIHVuaW9uICB7
Ci0gICAgICAgIGludCBpQ29uc3Q7ICAvLyB1c2VkIGZvciBpdmVjLCBzY2FsYXIgaW50cwotICAg
ICAgICBib29sIGJDb25zdDsgLy8gdXNlZCBmb3IgYnZlYywgc2NhbGFyIGJvb2xzCi0gICAgICAg
IGZsb2F0IGZDb25zdDsgICAvLyB1c2VkIGZvciB2ZWMsIG1hdCwgc2NhbGFyIGZsb2F0cwotICAg
IH0gOwotCi0gICAgVEJhc2ljVHlwZSB0eXBlOwotfTsKLQotI2VuZGlmIC8vIF9DT05TVEFOVF9V
TklPTl9JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9EZXRlY3RDYWxsRGVwdGguY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0RldGVjdENhbGxEZXB0aC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDYwZGY1MmM3MTUxYTg5NmExOGJmNmNiZDIwYjNmNjM0NTk1ODk2NmYuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0RldGVjdENhbGxEZXB0aC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwx
ODUgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL0RldGVj
dENhbGxEZXB0aC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCi0KLURldGVjdENh
bGxEZXB0aDo6RnVuY3Rpb25Ob2RlOjpGdW5jdGlvbk5vZGUoY29uc3QgVFN0cmluZyYgZm5hbWUp
Ci0gICAgOiBuYW1lKGZuYW1lKSwKLSAgICAgIHZpc2l0KFByZVZpc2l0KQotewotfQotCi1jb25z
dCBUU3RyaW5nJiBEZXRlY3RDYWxsRGVwdGg6OkZ1bmN0aW9uTm9kZTo6Z2V0TmFtZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLXZvaWQgRGV0ZWN0Q2FsbERlcHRoOjpGdW5jdGlv
bk5vZGU6OmFkZENhbGxlZSgKLSAgICBEZXRlY3RDYWxsRGVwdGg6OkZ1bmN0aW9uTm9kZSogY2Fs
bGVlKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FsbGVlcy5zaXplKCk7ICsraSkg
ewotICAgICAgICBpZiAoY2FsbGVlc1tpXSA9PSBjYWxsZWUpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIGNhbGxlZXMucHVzaF9iYWNrKGNhbGxlZSk7Ci19Ci0KLWludCBEZXRlY3RD
YWxsRGVwdGg6OkZ1bmN0aW9uTm9kZTo6ZGV0ZWN0Q2FsbERlcHRoKERldGVjdENhbGxEZXB0aCog
ZGV0ZWN0Q2FsbERlcHRoLCBpbnQgZGVwdGgpCi17Ci0gICAgQVNTRVJUKHZpc2l0ID09IFByZVZp
c2l0KTsKLSAgICBBU1NFUlQoZGV0ZWN0Q2FsbERlcHRoKTsKLQotICAgIGludCBtYXhEZXB0aCA9
IGRlcHRoOwotICAgIHZpc2l0ID0gSW5WaXNpdDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNhbGxlZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgc3dpdGNoIChjYWxsZWVzW2ldLT52aXNp
dCkgewotICAgICAgICAgICAgY2FzZSBJblZpc2l0OgotICAgICAgICAgICAgICAgIC8vIGN5Y2xl
IGRldGVjdGVkLCBpLmUuLCByZWN1cnNpb24gZGV0ZWN0ZWQuCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGtJbmZpbml0ZUNhbGxEZXB0aDsKLSAgICAgICAgICAgIGNhc2UgUG9zdFZpc2l0OgotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBQcmVWaXNpdDogewotICAgICAg
ICAgICAgICAgIC8vIENoZWNrIGJlZm9yZSB3ZSByZWN1cnNlIHNvIHdlIGRvbid0IGdvIHRvbyBk
ZXB0aAotICAgICAgICAgICAgICAgIGlmIChkZXRlY3RDYWxsRGVwdGgtPmNoZWNrRXhjZWVkc01h
eERlcHRoKGRlcHRoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlcHRoOwotICAgICAg
ICAgICAgICAgIGludCBjYWxsRGVwdGggPSBjYWxsZWVzW2ldLT5kZXRlY3RDYWxsRGVwdGgoZGV0
ZWN0Q2FsbERlcHRoLCBkZXB0aCArIDEpOwotICAgICAgICAgICAgICAgIC8vIENoZWNrIGFmdGVy
IHdlIHJlY3Vyc2Ugc28gd2UgY2FuIGV4aXQgaW1tZWRpYXRlbHkgYW5kIHByb3ZpZGUgaW5mby4K
LSAgICAgICAgICAgICAgICBpZiAoZGV0ZWN0Q2FsbERlcHRoLT5jaGVja0V4Y2VlZHNNYXhEZXB0
aChjYWxsRGVwdGgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRldGVjdENhbGxEZXB0aC0+Z2V0
SW5mb1NpbmsoKS5pbmZvIDw8ICI8LSIgPDwgY2FsbGVlc1tpXS0+Z2V0TmFtZSgpOwotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY2FsbERlcHRoOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBtYXhEZXB0aCA9IHN0ZDo6bWF4KGNhbGxEZXB0aCwgbWF4RGVwdGgpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgfQotICAgIHZpc2l0ID0gUG9zdFZpc2l0OwotICAgIHJldHVybiBtYXhE
ZXB0aDsKLX0KLQotdm9pZCBEZXRlY3RDYWxsRGVwdGg6OkZ1bmN0aW9uTm9kZTo6cmVzZXQoKQot
ewotICAgIHZpc2l0ID0gUHJlVmlzaXQ7Ci19Ci0KLURldGVjdENhbGxEZXB0aDo6RGV0ZWN0Q2Fs
bERlcHRoKFRJbmZvU2luayYgaW5mb1NpbmssIGJvb2wgbGltaXRDYWxsU3RhY2tEZXB0aCwgaW50
IG1heENhbGxTdGFja0RlcHRoKQotICAgIDogVEludGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwg
dHJ1ZSwgZmFsc2UpLAotICAgICAgY3VycmVudEZ1bmN0aW9uKE5VTEwpLAotICAgICAgaW5mb1Np
bmsoaW5mb1NpbmspLAotICAgICAgbWF4RGVwdGgobGltaXRDYWxsU3RhY2tEZXB0aCA/IG1heENh
bGxTdGFja0RlcHRoIDogRnVuY3Rpb25Ob2RlOjprSW5maW5pdGVDYWxsRGVwdGgpCi17Ci19Ci0K
LURldGVjdENhbGxEZXB0aDo6fkRldGVjdENhbGxEZXB0aCgpCi17Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBmdW5jdGlvbnMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGRlbGV0ZSBmdW5jdGlv
bnNbaV07Ci19Ci0KLWJvb2wgRGV0ZWN0Q2FsbERlcHRoOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2
aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKLXsKLSAgICBzd2l0Y2ggKG5vZGUtPmdldE9w
KCkpCi0gICAgewotICAgICAgICBjYXNlIEVPcFByb3RvdHlwZToKLSAgICAgICAgICAgIC8vIEZ1
bmN0aW9uIGRlY2xhcmF0aW9uLgotICAgICAgICAgICAgLy8gRG9uJ3QgYWRkIEZ1bmN0aW9uTm9k
ZSBoZXJlIGJlY2F1c2Ugbm9kZS0+Z2V0TmFtZSgpIGlzIHRoZQotICAgICAgICAgICAgLy8gdW5t
YW5nbGVkIGZ1bmN0aW9uIG5hbWUuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBF
T3BGdW5jdGlvbjogewotICAgICAgICAgICAgLy8gRnVuY3Rpb24gZGVmaW5pdGlvbi4KLSAgICAg
ICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkgewotICAgICAgICAgICAgICAgIGN1cnJlbnRG
dW5jdGlvbiA9IGZpbmRGdW5jdGlvbkJ5TmFtZShub2RlLT5nZXROYW1lKCkpOwotICAgICAgICAg
ICAgICAgIGlmIChjdXJyZW50RnVuY3Rpb24gPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50RnVuY3Rpb24gPSBuZXcgRnVuY3Rpb25Ob2RlKG5vZGUtPmdldE5hbWUoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9ucy5wdXNoX2JhY2soY3VycmVudEZ1bmN0aW9uKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHZpc2l0ID09IFBvc3RW
aXNpdCkgewotICAgICAgICAgICAgICAgIGN1cnJlbnRGdW5jdGlvbiA9IE5VTEw7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEVPcEZ1
bmN0aW9uQ2FsbDogewotICAgICAgICAgICAgLy8gRnVuY3Rpb24gY2FsbC4KLSAgICAgICAgICAg
IGlmICh2aXNpdCA9PSBQcmVWaXNpdCkgewotICAgICAgICAgICAgICAgIEZ1bmN0aW9uTm9kZSog
ZnVuYyA9IGZpbmRGdW5jdGlvbkJ5TmFtZShub2RlLT5nZXROYW1lKCkpOwotICAgICAgICAgICAg
ICAgIGlmIChmdW5jID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgZnVuYyA9IG5ldyBG
dW5jdGlvbk5vZGUobm9kZS0+Z2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgZnVuY3Rp
b25zLnB1c2hfYmFjayhmdW5jKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
aWYgKGN1cnJlbnRGdW5jdGlvbikKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudEZ1bmN0aW9u
LT5hZGRDYWxsZWUoZnVuYyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIERldGVjdENhbGxEZXB0aDo6Y2hlY2tFeGNlZWRzTWF4
RGVwdGgoaW50IGRlcHRoKQotewotICAgIHJldHVybiBkZXB0aCA+PSBtYXhEZXB0aDsKLX0KLQot
dm9pZCBEZXRlY3RDYWxsRGVwdGg6OnJlc2V0RnVuY3Rpb25Ob2RlcygpCi17Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgZnVuY3Rp
b25zW2ldLT5yZXNldCgpOwotICAgIH0KLX0KLQotRGV0ZWN0Q2FsbERlcHRoOjpFcnJvckNvZGUg
RGV0ZWN0Q2FsbERlcHRoOjpkZXRlY3RDYWxsRGVwdGhGb3JGdW5jdGlvbihGdW5jdGlvbk5vZGUq
IGZ1bmMpCi17Ci0gICAgY3VycmVudEZ1bmN0aW9uID0gTlVMTDsKLSAgICByZXNldEZ1bmN0aW9u
Tm9kZXMoKTsKLQotICAgIGludCBtYXhDYWxsRGVwdGggPSBmdW5jLT5kZXRlY3RDYWxsRGVwdGgo
dGhpcywgMSk7Ci0KLSAgICBpZiAobWF4Q2FsbERlcHRoID09IEZ1bmN0aW9uTm9kZTo6a0luZmlu
aXRlQ2FsbERlcHRoKQotICAgICAgICByZXR1cm4ga0Vycm9yUmVjdXJzaW9uOwotCi0gICAgaWYg
KG1heENhbGxEZXB0aCA+PSBtYXhEZXB0aCkKLSAgICAgICAgcmV0dXJuIGtFcnJvck1heERlcHRo
RXhjZWVkZWQ7Ci0KLSAgICByZXR1cm4ga0Vycm9yTm9uZTsKLX0KLQotRGV0ZWN0Q2FsbERlcHRo
OjpFcnJvckNvZGUgRGV0ZWN0Q2FsbERlcHRoOjpkZXRlY3RDYWxsRGVwdGgoKQotewotICAgIGlm
IChtYXhEZXB0aCAhPSBGdW5jdGlvbk5vZGU6OmtJbmZpbml0ZUNhbGxEZXB0aCkgewotICAgICAg
ICAvLyBDaGVjayBhbGwgZnVuY3Rpb25zIGJlY2F1c2UgdGhlIGRyaXZlciBtYXkgZmFpbCBvbiB0
aGVtCi0gICAgICAgIC8vIFRPRE86IEJlZm9yZSBkZXRlY3RpbmdSZWN1cnNpb24sIHN0cmlwIHVu
dXNlZCBmdW5jdGlvbnMuCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25z
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBFcnJvckNvZGUgZXJyb3IgPSBkZXRlY3RDYWxs
RGVwdGhGb3JGdW5jdGlvbihmdW5jdGlvbnNbaV0pOwotICAgICAgICAgICAgaWYgKGVycm9yICE9
IGtFcnJvck5vbmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yOwotICAgICAgICB9Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgRnVuY3Rpb25Ob2RlKiBtYWluID0gZmluZEZ1bmN0aW9uQnlO
YW1lKCJtYWluKCIpOwotICAgICAgICBpZiAobWFpbiA9PSBOVUxMKQotICAgICAgICAgICAgcmV0
dXJuIGtFcnJvck1pc3NpbmdNYWluOwotCi0gICAgICAgIHJldHVybiBkZXRlY3RDYWxsRGVwdGhG
b3JGdW5jdGlvbihtYWluKTsKLSAgICB9Ci0KLSAgICByZXR1cm4ga0Vycm9yTm9uZTsKLX0KLQot
RGV0ZWN0Q2FsbERlcHRoOjpGdW5jdGlvbk5vZGUqIERldGVjdENhbGxEZXB0aDo6ZmluZEZ1bmN0
aW9uQnlOYW1lKAotICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUpCi17Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBmdW5jdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGZ1bmN0aW9u
c1tpXS0+Z2V0TmFtZSgpID09IG5hbWUpCi0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb25zW2ld
OwotICAgIH0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdENhbGxEZXB0aC5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdENhbGxEZXB0aC5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA4OWU4NWY4OGY2ZWEyNjhkZDRlNTA1NGY2NWJjZmE5YjExNzVmYTdj
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3RDYWxsRGVwdGguaAorKysgL2Rldi9u
dWxsCkBAIC0xLDgwICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElM
RVJfREVURUNUX1JFQ1VSU0lPTl9IXwotI2RlZmluZSBDT01QSUxFUl9ERVRFQ1RfUkVDVVJTSU9O
X0hfCi0KLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLQotI2luY2x1ZGUgPGxpbWl0
cy5oPgotI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotI2luY2x1ZGUgImNvbXBp
bGVyL1ZhcmlhYmxlSW5mby5oIgotCi1jbGFzcyBUSW5mb1Npbms7Ci0KLS8vIFRyYXZlcnNlcyBp
bnRlcm1lZGlhdGUgdHJlZSB0byBkZXRlY3QgZnVuY3Rpb24gcmVjdXJzaW9uLgotY2xhc3MgRGV0
ZWN0Q2FsbERlcHRoIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIGVu
dW0gRXJyb3JDb2RlIHsKLSAgICAgICAga0Vycm9yTWlzc2luZ01haW4sCi0gICAgICAgIGtFcnJv
clJlY3Vyc2lvbiwKLSAgICAgICAga0Vycm9yTWF4RGVwdGhFeGNlZWRlZCwKLSAgICAgICAga0Vy
cm9yTm9uZQotICAgIH07Ci0KLSAgICBEZXRlY3RDYWxsRGVwdGgoVEluZm9TaW5rJiBpbmZvU3lu
YywgYm9vbCBsaW1pdENhbGxTdGFja0RlcHRoLCBpbnQgbWF4Q2FsbFN0YWNrRGVwdGgpOwotICAg
IH5EZXRlY3RDYWxsRGVwdGgoKTsKLQotICAgIHZpcnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShW
aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOwotCi0gICAgYm9vbCBjaGVja0V4Y2VlZHNNYXhEZXB0
aChpbnQgZGVwdGgpOwotCi0gICAgRXJyb3JDb2RlIGRldGVjdENhbGxEZXB0aCgpOwotCi1wcml2
YXRlOgotICAgIGNsYXNzIEZ1bmN0aW9uTm9kZSB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0
aWMgY29uc3QgaW50IGtJbmZpbml0ZUNhbGxEZXB0aCA9IElOVF9NQVg7Ci0KLSAgICAgICAgRnVu
Y3Rpb25Ob2RlKGNvbnN0IFRTdHJpbmcmIGZuYW1lKTsKLQotICAgICAgICBjb25zdCBUU3RyaW5n
JiBnZXROYW1lKCkgY29uc3Q7Ci0KLSAgICAgICAgLy8gSWYgYSBmdW5jdGlvbiBpcyBhbHJlYWR5
IGluIHRoZSBjYWxsZWUgbGlzdCwgdGhpcyBiZWNvbWVzIGEgbm8tb3AuCi0gICAgICAgIHZvaWQg
YWRkQ2FsbGVlKEZ1bmN0aW9uTm9kZSogY2FsbGVlKTsKLQotICAgICAgICAvLyBSZXR1cm5zIGtJ
bmlmaW5pdHlDYWxsRGVwdGggaWYgcmVjdXJzaXZlIGZ1bmN0aW9uIGNhbGxzIGFyZSBkZXRlY3Rl
ZC4KLSAgICAgICAgaW50IGRldGVjdENhbGxEZXB0aChEZXRlY3RDYWxsRGVwdGgqIGRldGVjdENh
bGxEZXB0aCwgaW50IGRlcHRoKTsKLQotICAgICAgICAvLyBSZXNldCBzdGF0ZS4KLSAgICAgICAg
dm9pZCByZXNldCgpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgLy8gbWFuZ2xlZCBmdW5jdGlv
biBuYW1lIGlzIHVuaXF1ZS4KLSAgICAgICAgVFN0cmluZyBuYW1lOwotCi0gICAgICAgIC8vIGZ1
bmN0aW9ucyB0aGF0IGFyZSBkaXJlY3RseSBjYWxsZWQgYnkgdGhpcyBmdW5jdGlvbi4KLSAgICAg
ICAgVFZlY3RvcjxGdW5jdGlvbk5vZGUqPiBjYWxsZWVzOwotCi0gICAgICAgIFZpc2l0IHZpc2l0
OwotICAgIH07Ci0KLSAgICBFcnJvckNvZGUgZGV0ZWN0Q2FsbERlcHRoRm9yRnVuY3Rpb24oRnVu
Y3Rpb25Ob2RlKiBmdW5jKTsKLSAgICBGdW5jdGlvbk5vZGUqIGZpbmRGdW5jdGlvbkJ5TmFtZShj
b25zdCBUU3RyaW5nJiBuYW1lKTsKLSAgICB2b2lkIHJlc2V0RnVuY3Rpb25Ob2RlcygpOwotCi0g
ICAgVEluZm9TaW5rJiBnZXRJbmZvU2luaygpIHsgcmV0dXJuIGluZm9TaW5rOyB9Ci0KLSAgICBU
VmVjdG9yPEZ1bmN0aW9uTm9kZSo+IGZ1bmN0aW9uczsKLSAgICBGdW5jdGlvbk5vZGUqIGN1cnJl
bnRGdW5jdGlvbjsKLSAgICBUSW5mb1NpbmsmIGluZm9TaW5rOwotICAgIGludCBtYXhEZXB0aDsK
LQotICAgIERldGVjdENhbGxEZXB0aChjb25zdCBEZXRlY3RDYWxsRGVwdGgmKTsKLSAgICB2b2lk
IG9wZXJhdG9yPShjb25zdCBEZXRlY3RDYWxsRGVwdGgmKTsKLX07Ci0KLSNlbmRpZiAgLy8gQ09N
UElMRVJfREVURUNUX1JFQ1VSU0lPTl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2ZlNDliYTIyNDJhOGRjZjJjZTY5OGQ5YzNlYTYwNmM5
OTc5MjRlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAy
MDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLS8vIENvbnRh
aW5zIGFuYWx5c2lzIHV0aWxpdGllcyBmb3IgZGVhbGluZyB3aXRoIEhMU0wncyBsYWNrIG9mIHN1
cHBvcnQgZm9yCi0vLyB0aGUgdXNlIG9mIGludHJpbnNpYyBmdW5jdGlvbnMgd2hpY2ggKGltcGxp
Y2l0bHkgb3IgZXhwbGljaXRseSkgY29tcHV0ZQotLy8gZ3JhZGllbnRzIG9mIGZ1bmN0aW9ucyB3
aXRoIGRpc2NvbnRpbnVpdGllcy4gCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvRGV0ZWN0RGlz
Y29udGludWl0eS5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VDb250ZXh0LmgiCi0KLW5h
bWVzcGFjZSBzaAotewotYm9vbCBEZXRlY3RMb29wRGlzY29udGludWl0eTo6dHJhdmVyc2UoVElu
dGVybU5vZGUgKm5vZGUpCi17Ci0gICAgbUxvb3BEZXB0aCA9IDA7Ci0gICAgbUxvb3BEaXNjb250
aW51aXR5ID0gZmFsc2U7Ci0gICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgcmV0dXJuIG1M
b29wRGlzY29udGludWl0eTsKLX0KLQotYm9vbCBEZXRlY3RMb29wRGlzY29udGludWl0eTo6dmlz
aXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbG9vcCkKLXsKLSAgICBpZiAodmlzaXQg
PT0gUHJlVmlzaXQpCi0gICAgewotICAgICAgICArK21Mb29wRGVwdGg7Ci0gICAgfQotICAgIGVs
c2UgaWYgKHZpc2l0ID09IFBvc3RWaXNpdCkKLSAgICB7Ci0gICAgICAgIC0tbUxvb3BEZXB0aDsK
LSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBEZXRlY3RMb29wRGlzY29udGlu
dWl0eTo6dmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2ggKm5vZGUpCi17Ci0g
ICAgaWYgKG1Mb29wRGlzY29udGludWl0eSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICBpZiAoIW1Mb29wRGVwdGgpCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKG5vZGUtPmdldEZsb3dPcCgpKQotICAgIHsKLSAgICAg
IGNhc2UgRU9wS2lsbDoKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcEJyZWFrOgotICAg
ICAgY2FzZSBFT3BDb250aW51ZToKLSAgICAgIGNhc2UgRU9wUmV0dXJuOgotICAgICAgICBtTG9v
cERpc2NvbnRpbnVpdHkgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuICFtTG9vcERpc2NvbnRpbnVpdHk7Ci19
Ci0KLWJvb2wgRGV0ZWN0TG9vcERpc2NvbnRpbnVpdHk6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZp
c2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQotewotICAgIHJldHVybiAhbUxvb3BEaXNjb250
aW51aXR5OwotfQotCi1ib29sIGNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkoVEludGVybU5vZGUg
Km5vZGUpCi17Ci0gICAgRGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkgZGV0ZWN0TG9vcERpc2NvbnRp
bnVpdHk7Ci0gICAgcmV0dXJuIGRldGVjdExvb3BEaXNjb250aW51aXR5LnRyYXZlcnNlKG5vZGUp
OwotfQotCi1ib29sIERldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp0cmF2ZXJzZShUSW50ZXJtTm9k
ZSAqbm9kZSkKLXsKLSAgICBtR3JhZGllbnRPcGVyYXRpb24gPSBmYWxzZTsKLSAgICBub2RlLT50
cmF2ZXJzZSh0aGlzKTsKLSAgICByZXR1cm4gbUdyYWRpZW50T3BlcmF0aW9uOwotfQotCi1ib29s
IERldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJt
VW5hcnkgKm5vZGUpCi17Ci0gICAgaWYgKG1HcmFkaWVudE9wZXJhdGlvbikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCi0g
ICAgewotICAgICAgY2FzZSBFT3BERmR4OgotICAgICAgY2FzZSBFT3BERmR5OgotICAgICAgICBt
R3JhZGllbnRPcGVyYXRpb24gPSB0cnVlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotCi0gICAgcmV0dXJuICFtR3JhZGllbnRPcGVyYXRpb247Ci19Ci0KLWJvb2wgRGV0
ZWN0R3JhZGllbnRPcGVyYXRpb246OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJt
QWdncmVnYXRlICpub2RlKQotewotICAgIGlmIChtR3JhZGllbnRPcGVyYXRpb24pCi0gICAgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG5vZGUtPmdldE9wKCkgPT0g
RU9wRnVuY3Rpb25DYWxsKQotICAgIHsKLSAgICAgICAgaWYgKCFub2RlLT5pc1VzZXJEZWZpbmVk
KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5t
YW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7Ci0KLSAgICAgICAgICAgIGlmIChuYW1lID09ICJ0
ZXh0dXJlMkQiIHx8Ci0gICAgICAgICAgICAgICAgbmFtZSA9PSAidGV4dHVyZTJEUHJvaiIgfHwK
LSAgICAgICAgICAgICAgICBuYW1lID09ICJ0ZXh0dXJlQ3ViZSIpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgbUdyYWRpZW50T3BlcmF0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFdoZW4g
YSB1c2VyIGRlZmluZWQgZnVuY3Rpb24gaXMgY2FsbGVkLCB3ZSBoYXZlIHRvCi0gICAgICAgICAg
ICAvLyBjb25zZXJ2YXRpdmVseSBhc3N1bWUgaXQgdG8gY29udGFpbiBncmFkaWVudCBvcGVyYXRp
b25zCi0gICAgICAgICAgICBtR3JhZGllbnRPcGVyYXRpb24gPSB0cnVlOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuICFtR3JhZGllbnRPcGVyYXRpb247Ci19Ci0KLWJvb2wgY29udGFp
bnNHcmFkaWVudE9wZXJhdGlvbihUSW50ZXJtTm9kZSAqbm9kZSkKLXsKLSAgICBEZXRlY3RHcmFk
aWVudE9wZXJhdGlvbiBkZXRlY3RHcmFkaWVudE9wZXJhdGlvbjsKLSAgICByZXR1cm4gZGV0ZWN0
R3JhZGllbnRPcGVyYXRpb24udHJhdmVyc2Uobm9kZSk7Ci19Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHku
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU1MjBiZDViMDJmNWEyZjM1ZTg5Yzg5
N2YwZjE0MGIzZWMxMjNkNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29u
dGludWl0eS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0v
LyBDb250YWlucyBhbmFseXNpcyB1dGlsaXRpZXMgZm9yIGRlYWxpbmcgd2l0aCBITFNMJ3MgbGFj
ayBvZiBzdXBwb3J0IGZvcgotLy8gdGhlIHVzZSBvZiBpbnRyaW5zaWMgZnVuY3Rpb25zIHdoaWNo
IChpbXBsaWNpdGx5IG9yIGV4cGxpY2l0bHkpIGNvbXB1dGUKLS8vIGdyYWRpZW50cyBvZiBmdW5j
dGlvbnMgd2l0aCBkaXNjb250aW51aXRpZXMuIAotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9ERVRF
Q1RESVNDT05USU5VSVRZX0hfCi0jZGVmaW5lIENPTVBJTEVSX0RFVEVDVERJU0NPTlRJTlVJVFlf
SF8KLQotI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotCi1uYW1lc3BhY2Ugc2gK
LXsKLS8vIENoZWNrcyB3aGV0aGVyIGEgbG9vcCBjYW4gcnVuIGZvciBhIHZhcmlhYmxlIG51bWJl
ciBvZiBpdGVyYXRpb25zCi1jbGFzcyBEZXRlY3RMb29wRGlzY29udGludWl0eSA6IHB1YmxpYyBU
SW50ZXJtVHJhdmVyc2VyCi17Ci0gIHB1YmxpYzoKLSAgICBib29sIHRyYXZlcnNlKFRJbnRlcm1O
b2RlICpub2RlKTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2
aXNpdCwgVEludGVybUJyYW5jaCAqbm9kZSk7Ci0gICAgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlz
aXQsIFRJbnRlcm1Mb29wICpsb29wKTsKLSAgICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZp
c2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKTsKLQotICAgIGludCBtTG9vcERlcHRoOwotICAg
IGJvb2wgbUxvb3BEaXNjb250aW51aXR5OwotfTsKLQotYm9vbCBjb250YWluc0xvb3BEaXNjb250
aW51aXR5KFRJbnRlcm1Ob2RlICpub2RlKTsKLQotLy8gQ2hlY2tzIGZvciBpbnRyaW5zaWMgZnVu
Y3Rpb25zIHdoaWNoIGNvbXB1dGUgZ3JhZGllbnRzCi1jbGFzcyBEZXRlY3RHcmFkaWVudE9wZXJh
dGlvbiA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCi17Ci0gIHB1YmxpYzoKLSAgICBib29sIHRy
YXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgYm9vbCB2aXNp
dFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUpOwotICAgIGJvb2wgdmlzaXRB
Z2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUpOwotCi0gICAgYm9v
bCBtR3JhZGllbnRPcGVyYXRpb247Ci19OwotCi1ib29sIGNvbnRhaW5zR3JhZGllbnRPcGVyYXRp
b24oVEludGVybU5vZGUgKm5vZGUpOwotCi19Ci0KLSNlbmRpZiAgIC8vIENPTVBJTEVSX0RFVEVD
VERJU0NPTlRJTlVJVFlfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9EaWFnbm9zdGljcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvRGlhZ25vc3RpY3MuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4
YTM4YzQxYTY1NDIzMjFlODU2NDI2YmI5M2QyNzE0MjkzNjA5MjI0Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9EaWFnbm9zdGljcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBA
Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL0RpYWdub3N0aWNzLmgiCi0KLSNp
bmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgi
Ci0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL1NvdXJjZUxvY2F0aW9uLmgiCi0KLVRE
aWFnbm9zdGljczo6VERpYWdub3N0aWNzKFRJbmZvU2luayYgaW5mb1NpbmspIDoKLSAgICBtSW5m
b1NpbmsoaW5mb1NpbmspLAotICAgIG1OdW1FcnJvcnMoMCksCi0gICAgbU51bVdhcm5pbmdzKDAp
Ci17Ci19Ci0KLVREaWFnbm9zdGljczo6flREaWFnbm9zdGljcygpCi17Ci19Ci0KLXZvaWQgVERp
YWdub3N0aWNzOjp3cml0ZUluZm8oU2V2ZXJpdHkgc2V2ZXJpdHksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcmVhc29uLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdG9rZW4sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHRyYSkKLXsKLSAgICBUUHJlZml4
VHlwZSBwcmVmaXggPSBFUHJlZml4Tm9uZTsKLSAgICBzd2l0Y2ggKHNldmVyaXR5KQotICAgIHsK
LSAgICAgIGNhc2UgRVJST1I6Ci0gICAgICAgICsrbU51bUVycm9yczsKLSAgICAgICAgcHJlZml4
ID0gRVByZWZpeEVycm9yOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgV0FSTklORzoKLSAg
ICAgICAgKyttTnVtV2FybmluZ3M7Ci0gICAgICAgIHByZWZpeCA9IEVQcmVmaXhXYXJuaW5nOwot
ICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIFRJbmZvU2lua0Jhc2UmIHNpbmsgPSBtSW5mb1Np
bmsuaW5mbzsKLSAgICAvKiBWQysrIGZvcm1hdDogZmlsZShsaW5lbnVtKSA6IGVycm9yICM6ICd0
b2tlbicgOiBleHRyYWluZm8gKi8KLSAgICBzaW5rLnByZWZpeChwcmVmaXgpOwotICAgIHNpbmsu
bG9jYXRpb24obG9jLmZpbGUsIGxvYy5saW5lKTsKLSAgICBzaW5rIDw8ICInIiA8PCB0b2tlbiA8
PCAgIicgOiAiIDw8IHJlYXNvbiA8PCAiICIgPDwgZXh0cmEgPDwgIlxuIjsKLX0KLQotdm9pZCBU
RGlhZ25vc3RpY3M6OndyaXRlRGVidWcoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cikKLXsKLSAgICBt
SW5mb1NpbmsuZGVidWcgPDwgc3RyOwotfQotCi12b2lkIFREaWFnbm9zdGljczo6cHJpbnQoSUQg
aWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBs
b2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpCi17
Ci0gICAgd3JpdGVJbmZvKHNldmVyaXR5KGlkKSwgbG9jLCBtZXNzYWdlKGlkKSwgdGV4dCwgIiIp
OwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Rp
YWdub3N0aWNzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25v
c3RpY3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I3MWJiMTIwNDIyOGE3NDcz
NzRhMjZlZmQ4OWM3YzY3MmJiNTZiOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25v
c3RpY3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0j
aWZuZGVmIENPTVBJTEVSX0RJQUdOT1NUSUNTX0hfCi0jZGVmaW5lIENPTVBJTEVSX0RJQUdOT1NU
SUNTX0hfCi0KLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NCYXNl
LmgiCi0KLWNsYXNzIFRJbmZvU2luazsKLQotY2xhc3MgVERpYWdub3N0aWNzIDogcHVibGljIHBw
OjpEaWFnbm9zdGljcwotewotICBwdWJsaWM6Ci0gICAgVERpYWdub3N0aWNzKFRJbmZvU2luayYg
aW5mb1NpbmspOwotICAgIHZpcnR1YWwgflREaWFnbm9zdGljcygpOwotCi0gICAgVEluZm9TaW5r
JiBpbmZvU2luaygpIHsgcmV0dXJuIG1JbmZvU2luazsgfQotCi0gICAgaW50IG51bUVycm9ycygp
IGNvbnN0IHsgcmV0dXJuIG1OdW1FcnJvcnM7IH0KLSAgICBpbnQgbnVtV2FybmluZ3MoKSBjb25z
dCB7IHJldHVybiBtTnVtV2FybmluZ3M7IH0KLQotICAgIHZvaWQgd3JpdGVJbmZvKFNldmVyaXR5
IHNldmVyaXR5LAotICAgICAgICAgICAgICAgICAgIGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYg
bG9jLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiByZWFzb24sCi0gICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRva2VuLAotICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHRyYSk7Ci0KLSAgICB2b2lkIHdyaXRlRGVidWcoY29u
c3Qgc3RkOjpzdHJpbmcmIHN0cik7Ci0KLSAgcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBw
cmludChJRCBpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0
aW9uJiBsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0
KTsKLQotICBwcml2YXRlOgotICAgIFRJbmZvU2luayYgbUluZm9TaW5rOwotICAgIGludCBtTnVt
RXJyb3JzOwotICAgIGludCBtTnVtV2FybmluZ3M7Ci19OwotCi0jZW5kaWYgIC8vIENPTVBJTEVS
X0RJQUdOT1NUSUNTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGQxZjZhYjNhZjViMDE1YTY3MmFiMTZjYmY2ODc4MzQ3MGI0YmM3ZmMuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTYxICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvRGlyZWN0
aXZlSGFuZGxlci5oIgotCi0jaW5jbHVkZSA8c3N0cmVhbT4KLQotI2luY2x1ZGUgImNvbXBpbGVy
L2RlYnVnLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvRGlhZ25vc3RpY3MuaCIKLQotc3RhdGljIFRC
ZWhhdmlvciBnZXRCZWhhdmlvcihjb25zdCBzdGQ6OnN0cmluZyYgc3RyKQotewotICAgIHN0YXRp
YyBjb25zdCBzdGQ6OnN0cmluZyBrUmVxdWlyZSgicmVxdWlyZSIpOwotICAgIHN0YXRpYyBjb25z
dCBzdGQ6OnN0cmluZyBrRW5hYmxlKCJlbmFibGUiKTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpz
dHJpbmcga0Rpc2FibGUoImRpc2FibGUiKTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcg
a1dhcm4oIndhcm4iKTsKLQotICAgIGlmIChzdHIgPT0ga1JlcXVpcmUpIHJldHVybiBFQmhSZXF1
aXJlOwotICAgIGVsc2UgaWYgKHN0ciA9PSBrRW5hYmxlKSByZXR1cm4gRUJoRW5hYmxlOwotICAg
IGVsc2UgaWYgKHN0ciA9PSBrRGlzYWJsZSkgcmV0dXJuIEVCaERpc2FibGU7Ci0gICAgZWxzZSBp
ZiAoc3RyID09IGtXYXJuKSByZXR1cm4gRUJoV2FybjsKLSAgICByZXR1cm4gRUJoVW5kZWZpbmVk
OwotfQotCi1URGlyZWN0aXZlSGFuZGxlcjo6VERpcmVjdGl2ZUhhbmRsZXIoVEV4dGVuc2lvbkJl
aGF2aW9yJiBleHRCZWhhdmlvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBURGlhZ25vc3RpY3MmIGRpYWdub3N0aWNzKQotICAgIDogbUV4dGVuc2lvbkJlaGF2aW9yKGV4
dEJlaGF2aW9yKSwKLSAgICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykKLXsKLX0KLQotVERp
cmVjdGl2ZUhhbmRsZXI6On5URGlyZWN0aXZlSGFuZGxlcigpCi17Ci19Ci0KLXZvaWQgVERpcmVj
dGl2ZUhhbmRsZXI6OmhhbmRsZUVycm9yKGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1z
ZykKLXsKLSAgICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6RVJST1Is
IGxvYywgbXNnLCAiIiwgIiIpOwotfQotCi12b2lkIFREaXJlY3RpdmVIYW5kbGVyOjpoYW5kbGVQ
cmFnbWEoY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKQotewotICAg
IHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrU1RER0woIlNUREdMIik7Ci0gICAgc3RhdGljIGNv
bnN0IHN0ZDo6c3RyaW5nIGtPcHRpbWl6ZSgib3B0aW1pemUiKTsKLSAgICBzdGF0aWMgY29uc3Qg
c3RkOjpzdHJpbmcga0RlYnVnKCJkZWJ1ZyIpOwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmlu
ZyBrT24oIm9uIik7Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtPZmYoIm9mZiIpOwot
Ci0gICAgYm9vbCBpbnZhbGlkVmFsdWUgPSBmYWxzZTsKLSAgICBpZiAobmFtZSA9PSBrU1RER0wp
Ci0gICAgewotICAgICAgICAvLyBUaGUgU1RER0wgcHJhZ21hIGlzIHVzZWQgdG8gcmVzZXJ2ZSBw
cmFnbWFzIGZvciB1c2UgYnkgZnV0dXJlCi0gICAgICAgIC8vIHJldmlzaW9ucyBvZiBHTFNMLiBJ
Z25vcmUgaXQuCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZWxzZSBpZiAobmFtZSA9PSBr
T3B0aW1pemUpCi0gICAgewotICAgICAgICBpZiAodmFsdWUgPT0ga09uKSBtUHJhZ21hLm9wdGlt
aXplID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0ga09mZikgbVByYWdtYS5vcHRp
bWl6ZSA9IGZhbHNlOwotICAgICAgICBlbHNlIGludmFsaWRWYWx1ZSA9IHRydWU7Ci0gICAgfQot
ICAgIGVsc2UgaWYgKG5hbWUgPT0ga0RlYnVnKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlID09
IGtPbikgbVByYWdtYS5kZWJ1ZyA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlID09IGtP
ZmYpIG1QcmFnbWEuZGVidWcgPSBmYWxzZTsKLSAgICAgICAgZWxzZSBpbnZhbGlkVmFsdWUgPSB0
cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBtRGlhZ25vc3RpY3MucmVwb3J0
KHBwOjpEaWFnbm9zdGljczo6VU5SRUNPR05JWkVEX1BSQUdNQSwgbG9jLCBuYW1lKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChpbnZhbGlkVmFsdWUpCi0gICAgICBtRGlhZ25v
c3RpY3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6RVJST1IsIGxvYywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImludmFsaWQgcHJhZ21hIHZhbHVlIiwgdmFsdWUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICInb24nIG9yICdvZmYnIGV4cGVjdGVkIik7Ci19Ci0KLXZv
aWQgVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZUV4dGVuc2lvbihjb25zdCBwcDo6U291cmNlTG9j
YXRpb24mIGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBzdGQ6OnN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBzdGQ6OnN0cmluZyYgYmVoYXZpb3IpCi17Ci0gICAgc3RhdGljIGNvbnN0IHN0
ZDo6c3RyaW5nIGtFeHRBbGwoImFsbCIpOwotCi0gICAgVEJlaGF2aW9yIGJlaGF2aW9yVmFsID0g
Z2V0QmVoYXZpb3IoYmVoYXZpb3IpOwotICAgIGlmIChiZWhhdmlvclZhbCA9PSBFQmhVbmRlZmlu
ZWQpCi0gICAgewotICAgICAgICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGlj
czo6RVJST1IsIGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVoYXZpb3Ii
LCBuYW1lLCAiaW52YWxpZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG5h
bWUgPT0ga0V4dEFsbCkKLSAgICB7Ci0gICAgICAgIGlmIChiZWhhdmlvclZhbCA9PSBFQmhSZXF1
aXJlKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZvKHBwOjpE
aWFnbm9zdGljczo6RVJST1IsIGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImV4dGVuc2lvbiIsIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJjYW5ub3QgaGF2ZSAncmVxdWlyZScgYmVoYXZpb3IiKTsKLSAgICAgICAgfQotICAgICAgICBl
bHNlIGlmIChiZWhhdmlvclZhbCA9PSBFQmhFbmFibGUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG1EaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpFUlJPUiwgbG9jLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXh0ZW5zaW9uIiwgbmFtZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBoYXZlICdlbmFibGUnIGJlaGF2
aW9yIik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBm
b3IgKFRFeHRlbnNpb25CZWhhdmlvcjo6aXRlcmF0b3IgaXRlciA9IG1FeHRlbnNpb25CZWhhdmlv
ci5iZWdpbigpOwotICAgICAgICAgICAgICAgICBpdGVyICE9IG1FeHRlbnNpb25CZWhhdmlvci5l
bmQoKTsgKytpdGVyKQotICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFs
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBURXh0ZW5zaW9uQmVo
YXZpb3I6Oml0ZXJhdG9yIGl0ZXIgPSBtRXh0ZW5zaW9uQmVoYXZpb3IuZmluZChuYW1lKTsKLSAg
ICBpZiAoaXRlciAhPSBtRXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCkpCi0gICAgewotICAgICAgICBp
dGVyLT5zZWNvbmQgPSBiZWhhdmlvclZhbDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IHBwOjpEaWFnbm9zdGljczo6U2V2ZXJpdHkgc2V2ZXJpdHkgPSBwcDo6RGlhZ25vc3RpY3M6OkVS
Uk9SOwotICAgIHN3aXRjaCAoYmVoYXZpb3JWYWwpIHsKLSAgICAgIGNhc2UgRUJoUmVxdWlyZToK
LSAgICAgICAgc2V2ZXJpdHkgPSBwcDo6RGlhZ25vc3RpY3M6OkVSUk9SOwotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgRUJoRW5hYmxlOgotICAgICAgY2FzZSBFQmhXYXJuOgotICAgICAgY2Fz
ZSBFQmhEaXNhYmxlOgotICAgICAgICBzZXZlcml0eSA9IHBwOjpEaWFnbm9zdGljczo6V0FSTklO
RzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgbURpYWdub3N0aWNzLndyaXRlSW5mbyhzZXZl
cml0eSwgbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4dGVuc2lvbiIsIG5hbWUs
ICJpcyBub3Qgc3VwcG9ydGVkIik7Ci19Ci0KLXZvaWQgVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRs
ZVZlcnNpb24oY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCB2ZXJzaW9uKQotewotICAgIHN0YXRpYyBjb25zdCBp
bnQga1ZlcnNpb24gPSAxMDA7Ci0KLSAgICBpZiAodmVyc2lvbiAhPSBrVmVyc2lvbikKLSAgICB7
Ci0gICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKLSAgICAgICAgc3RyZWFtIDw8IHZl
cnNpb247Ci0gICAgICAgIHN0ZDo6c3RyaW5nIHN0ciA9IHN0cmVhbS5zdHIoKTsKLSAgICAgICAg
bURpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OkVSUk9SLCBsb2MsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInZlcnNpb24gbnVtYmVyIiwgc3RyLCAibm90IHN1
cHBvcnRlZCIpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA5NWNhNTlkNmZlNWRlZWE2ZDdmYjQ1ODdlZTUxNmM4M2FiNWQwOWZjLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw0NiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9ESVJFQ1RJVkVf
SEFORExFUl9IXwotI2RlZmluZSBDT01QSUxFUl9ESVJFQ1RJVkVfSEFORExFUl9IXwotCi0jaW5j
bHVkZSAiY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaCIKLSNpbmNsdWRlICJjb21waWxlci9Q
cmFnbWEuaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlSGFuZGxl
ckJhc2UuaCIKLQotY2xhc3MgVERpYWdub3N0aWNzOwotCi1jbGFzcyBURGlyZWN0aXZlSGFuZGxl
ciA6IHB1YmxpYyBwcDo6RGlyZWN0aXZlSGFuZGxlcgotewotICBwdWJsaWM6Ci0gICAgVERpcmVj
dGl2ZUhhbmRsZXIoVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciwKLSAgICAgICAgICAg
ICAgICAgICAgICBURGlhZ25vc3RpY3MmIGRpYWdub3N0aWNzKTsKLSAgICB2aXJ0dWFsIH5URGly
ZWN0aXZlSGFuZGxlcigpOwotCi0gICAgY29uc3QgVFByYWdtYSYgcHJhZ21hKCkgY29uc3QgeyBy
ZXR1cm4gbVByYWdtYTsgfQotICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0ZW5zaW9u
QmVoYXZpb3IoKSBjb25zdCB7IHJldHVybiBtRXh0ZW5zaW9uQmVoYXZpb3I7IH0KLQotICAgIHZp
cnR1YWwgdm9pZCBoYW5kbGVFcnJvcihjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1zZyk7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgaGFuZGxlUHJhZ21hKGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9j
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUp
OwotCi0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUV4dGVuc2lvbihjb25zdCBwcDo6U291cmNlTG9j
YXRpb24mIGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6
c3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Rk
OjpzdHJpbmcmIGJlaGF2aW9yKTsKLQotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVWZXJzaW9uKGNv
bnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCB2ZXJzaW9uKTsKLQotICBwcml2YXRlOgotICAgIFRQcmFnbWEgbVByYWdtYTsKLSAg
ICBURXh0ZW5zaW9uQmVoYXZpb3ImIG1FeHRlbnNpb25CZWhhdmlvcjsKLSAgICBURGlhZ25vc3Rp
Y3MmIG1EaWFnbm9zdGljczsKLX07Ci0KLSNlbmRpZiAgLy8gQ09NUElMRVJfRElSRUNUSVZFX0hB
TkRMRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9FeHRlbnNpb25CZWhhdmlvci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0V4dGVuc2lvbkJlaGF2aW9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVj
MTU5NWZiMjEyMWE4ZWE3NmJiYTIyNTdjNmYzNjM1NmVmMDBlOWQuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCww
IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIF9FWFRFTlNJT05fQkVIQVZJT1JfSU5D
TFVERURfCi0jZGVmaW5lIF9FWFRFTlNJT05fQkVIQVZJT1JfSU5DTFVERURfCi0KLSNpbmNsdWRl
IDxtYXA+Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi10eXBlZGVmIGVudW0KLXsKLSAgICBFQmhSZXF1
aXJlLAotICAgIEVCaEVuYWJsZSwKLSAgICBFQmhXYXJuLAotICAgIEVCaERpc2FibGUsCi0gICAg
RUJoVW5kZWZpbmVkCi19IFRCZWhhdmlvcjsKLQotaW5saW5lIGNvbnN0IGNoYXIqIGdldEJlaGF2
aW9yU3RyaW5nKFRCZWhhdmlvciBiKQotewotICAgIHN3aXRjaChiKQotICAgIHsKLSAgICAgIGNh
c2UgRUJoUmVxdWlyZTogcmV0dXJuICJyZXF1aXJlIjsKLSAgICAgIGNhc2UgRUJoRW5hYmxlOiBy
ZXR1cm4gImVuYWJsZSI7Ci0gICAgICBjYXNlIEVCaFdhcm46IHJldHVybiAid2FybiI7Ci0gICAg
ICBjYXNlIEVCaERpc2FibGU6IHJldHVybiAiZGlzYWJsZSI7Ci0gICAgICBkZWZhdWx0OiByZXR1
cm4gTlVMTDsKLSAgICB9Ci19Ci0KLS8vIE1hcHBpbmcgYmV0d2VlbiBleHRlbnNpb24gbmFtZSBh
bmQgYmVoYXZpb3IuCi10eXBlZGVmIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBUQmVoYXZpb3I+IFRF
eHRlbnNpb25CZWhhdmlvcjsKLQotI2VuZGlmIC8vIF9FWFRFTlNJT05fVEFCTEVfSU5DTFVERURf
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRm9yTG9v
cFVucm9sbC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRm9yTG9v
cFVucm9sbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3YTEzZWFiYWJiMTIy
MjA0MDAwZmM1MTlkNjY5ZGZmODRjMmMzZDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Zv
ckxvb3BVbnJvbGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjE1ICswLDAgQEAKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9Gb3JMb29wVW5yb2xsLmgiCi0KLW5hbWVz
cGFjZSB7Ci0KLWNsYXNzIEludGVnZXJGb3JMb29wVW5yb2xsTWFya2VyIDogcHVibGljIFRJbnRl
cm1UcmF2ZXJzZXIgewotcHVibGljOgotCi0gICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNp
dCwgVEludGVybUxvb3AqIG5vZGUpCi0gICAgewotICAgICAgICAvLyBUaGlzIGlzIGNhbGxlZCBh
ZnRlciBWYWxpZGF0ZUxpbWl0YXRpb25zIHBhc3MsIHNvIGFsbCB0aGUgQVNTRVJUCi0gICAgICAg
IC8vIHNob3VsZCBuZXZlciBmYWlsLgotICAgICAgICAvLyBTZWUgVmFsaWRhdGVMaW1pdGF0aW9u
czo6dmFsaWRhdGVGb3JMb29wSW5pdCgpLgotICAgICAgICBBU1NFUlQobm9kZSk7Ci0gICAgICAg
IEFTU0VSVChub2RlLT5nZXRUeXBlKCkgPT0gRUxvb3BGb3IpOwotICAgICAgICBBU1NFUlQobm9k
ZS0+Z2V0SW5pdCgpKTsKLSAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSogZGVjbCA9IG5vZGUtPmdl
dEluaXQoKS0+Z2V0QXNBZ2dyZWdhdGUoKTsKLSAgICAgICAgQVNTRVJUKGRlY2wgJiYgZGVjbC0+
Z2V0T3AoKSA9PSBFT3BEZWNsYXJhdGlvbik7Ci0gICAgICAgIFRJbnRlcm1TZXF1ZW5jZSYgZGVj
bFNlcSA9IGRlY2wtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAgIEFTU0VSVChkZWNsU2VxLnNpemUo
KSA9PSAxKTsKLSAgICAgICAgVEludGVybUJpbmFyeSogZGVjbEluaXQgPSBkZWNsU2VxWzBdLT5n
ZXRBc0JpbmFyeU5vZGUoKTsKLSAgICAgICAgQVNTRVJUKGRlY2xJbml0ICYmIGRlY2xJbml0LT5n
ZXRPcCgpID09IEVPcEluaXRpYWxpemUpOwotICAgICAgICBBU1NFUlQoZGVjbEluaXQtPmdldExl
ZnQoKSk7Ci0gICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGRlY2xJbml0LT5nZXRMZWZ0
KCktPmdldEFzU3ltYm9sTm9kZSgpOwotICAgICAgICBBU1NFUlQoc3ltYm9sKTsKLSAgICAgICAg
VEJhc2ljVHlwZSB0eXBlID0gc3ltYm9sLT5nZXRCYXNpY1R5cGUoKTsKLSAgICAgICAgQVNTRVJU
KHR5cGUgPT0gRWJ0SW50IHx8IHR5cGUgPT0gRWJ0RmxvYXQpOwotICAgICAgICBpZiAodHlwZSA9
PSBFYnRJbnQpCi0gICAgICAgICAgICBub2RlLT5zZXRVbnJvbGxGbGFnKHRydWUpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLX07Ci0KLX0gIC8vIGFub255bW91cyBuYW1lcHNhY2UK
LQotdm9pZCBGb3JMb29wVW5yb2xsOjpGaWxsTG9vcEluZGV4SW5mbyhUSW50ZXJtTG9vcCogbm9k
ZSwgVExvb3BJbmRleEluZm8mIGluZm8pCi17Ci0gICAgQVNTRVJUKG5vZGUtPmdldFR5cGUoKSA9
PSBFTG9vcEZvcik7Ci0gICAgQVNTRVJUKG5vZGUtPmdldFVucm9sbEZsYWcoKSk7Ci0KLSAgICBU
SW50ZXJtTm9kZSogaW5pdCA9IG5vZGUtPmdldEluaXQoKTsKLSAgICBBU1NFUlQoaW5pdCAhPSBO
VUxMKTsKLSAgICBUSW50ZXJtQWdncmVnYXRlKiBkZWNsID0gaW5pdC0+Z2V0QXNBZ2dyZWdhdGUo
KTsKLSAgICBBU1NFUlQoKGRlY2wgIT0gTlVMTCkgJiYgKGRlY2wtPmdldE9wKCkgPT0gRU9wRGVj
bGFyYXRpb24pKTsKLSAgICBUSW50ZXJtU2VxdWVuY2UmIGRlY2xTZXEgPSBkZWNsLT5nZXRTZXF1
ZW5jZSgpOwotICAgIEFTU0VSVChkZWNsU2VxLnNpemUoKSA9PSAxKTsKLSAgICBUSW50ZXJtQmlu
YXJ5KiBkZWNsSW5pdCA9IGRlY2xTZXFbMF0tPmdldEFzQmluYXJ5Tm9kZSgpOwotICAgIEFTU0VS
VCgoZGVjbEluaXQgIT0gTlVMTCkgJiYgKGRlY2xJbml0LT5nZXRPcCgpID09IEVPcEluaXRpYWxp
emUpKTsKLSAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBkZWNsSW5pdC0+Z2V0TGVmdCgpLT5n
ZXRBc1N5bWJvbE5vZGUoKTsKLSAgICBBU1NFUlQoc3ltYm9sICE9IE5VTEwpOwotICAgIEFTU0VS
VChzeW1ib2wtPmdldEJhc2ljVHlwZSgpID09IEVidEludCk7Ci0KLSAgICBpbmZvLmlkID0gc3lt
Ym9sLT5nZXRJZCgpOwotCi0gICAgQVNTRVJUKGRlY2xJbml0LT5nZXRSaWdodCgpICE9IE5VTEwp
OwotICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiBpbml0Tm9kZSA9IGRlY2xJbml0LT5nZXRSaWdo
dCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLSAgICBBU1NFUlQoaW5pdE5vZGUgIT0gTlVMTCk7
Ci0KLSAgICBpbmZvLmluaXRWYWx1ZSA9IGV2YWx1YXRlSW50Q29uc3RhbnQoaW5pdE5vZGUpOwot
ICAgIGluZm8uY3VycmVudFZhbHVlID0gaW5mby5pbml0VmFsdWU7Ci0KLSAgICBUSW50ZXJtTm9k
ZSogY29uZCA9IG5vZGUtPmdldENvbmRpdGlvbigpOwotICAgIEFTU0VSVChjb25kICE9IE5VTEwp
OwotICAgIFRJbnRlcm1CaW5hcnkqIGJpbk9wID0gY29uZC0+Z2V0QXNCaW5hcnlOb2RlKCk7Ci0g
ICAgQVNTRVJUKGJpbk9wICE9IE5VTEwpOwotICAgIEFTU0VSVChiaW5PcC0+Z2V0UmlnaHQoKSAh
PSBOVUxMKTsKLSAgICBBU1NFUlQoYmluT3AtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlv
bigpICE9IE5VTEwpOwotCi0gICAgaW5mby5pbmNyZW1lbnRWYWx1ZSA9IGdldExvb3BJbmNyZW1l
bnQobm9kZSk7Ci0gICAgaW5mby5zdG9wVmFsdWUgPSBldmFsdWF0ZUludENvbnN0YW50KAotICAg
ICAgICBiaW5PcC0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCkpOwotICAgIGluZm8u
b3AgPSBiaW5PcC0+Z2V0T3AoKTsKLX0KLQotdm9pZCBGb3JMb29wVW5yb2xsOjpTdGVwKCkKLXsK
LSAgICBBU1NFUlQobUxvb3BJbmRleFN0YWNrLnNpemUoKSA+IDApOwotICAgIFRMb29wSW5kZXhJ
bmZvJiBpbmZvID0gbUxvb3BJbmRleFN0YWNrW21Mb29wSW5kZXhTdGFjay5zaXplKCkgLSAxXTsK
LSAgICBpbmZvLmN1cnJlbnRWYWx1ZSArPSBpbmZvLmluY3JlbWVudFZhbHVlOwotfQotCi1ib29s
IEZvckxvb3BVbnJvbGw6OlNhdGlzZmllc0xvb3BDb25kaXRpb24oKQotewotICAgIEFTU0VSVCht
TG9vcEluZGV4U3RhY2suc2l6ZSgpID4gMCk7Ci0gICAgVExvb3BJbmRleEluZm8mIGluZm8gPSBt
TG9vcEluZGV4U3RhY2tbbUxvb3BJbmRleFN0YWNrLnNpemUoKSAtIDFdOwotICAgIC8vIFJlbGF0
aW9uYWwgb3BlcmF0b3IgaXMgb25lIG9mOiA+ID49IDwgPD0gPT0gb3IgIT0uCi0gICAgc3dpdGNo
IChpbmZvLm9wKSB7Ci0gICAgICBjYXNlIEVPcEVxdWFsOgotICAgICAgICByZXR1cm4gKGluZm8u
Y3VycmVudFZhbHVlID09IGluZm8uc3RvcFZhbHVlKTsKLSAgICAgIGNhc2UgRU9wTm90RXF1YWw6
Ci0gICAgICAgIHJldHVybiAoaW5mby5jdXJyZW50VmFsdWUgIT0gaW5mby5zdG9wVmFsdWUpOwot
ICAgICAgY2FzZSBFT3BMZXNzVGhhbjoKLSAgICAgICAgcmV0dXJuIChpbmZvLmN1cnJlbnRWYWx1
ZSA8IGluZm8uc3RvcFZhbHVlKTsKLSAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46Ci0gICAgICAg
IHJldHVybiAoaW5mby5jdXJyZW50VmFsdWUgPiBpbmZvLnN0b3BWYWx1ZSk7Ci0gICAgICBjYXNl
IEVPcExlc3NUaGFuRXF1YWw6Ci0gICAgICAgIHJldHVybiAoaW5mby5jdXJyZW50VmFsdWUgPD0g
aW5mby5zdG9wVmFsdWUpOwotICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgotICAgICAg
ICByZXR1cm4gKGluZm8uY3VycmVudFZhbHVlID49IGluZm8uc3RvcFZhbHVlKTsKLSAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotYm9vbCBGb3JMb29wVW5yb2xsOjpOZWVkc1RvUmVwbGFjZVN5bWJvbFdpdGhWYWx1ZShU
SW50ZXJtU3ltYm9sKiBzeW1ib2wpCi17Ci0gICAgZm9yIChUVmVjdG9yPFRMb29wSW5kZXhJbmZv
Pjo6aXRlcmF0b3IgaSA9IG1Mb29wSW5kZXhTdGFjay5iZWdpbigpOwotICAgICAgICAgaSAhPSBt
TG9vcEluZGV4U3RhY2suZW5kKCk7Ci0gICAgICAgICArK2kpIHsKLSAgICAgICAgaWYgKGktPmlk
ID09IHN5bWJvbC0+Z2V0SWQoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLWludCBGb3JMb29wVW5yb2xsOjpHZXRMb29wSW5kZXhWYWx1
ZShUSW50ZXJtU3ltYm9sKiBzeW1ib2wpCi17Ci0gICAgZm9yIChUVmVjdG9yPFRMb29wSW5kZXhJ
bmZvPjo6aXRlcmF0b3IgaSA9IG1Mb29wSW5kZXhTdGFjay5iZWdpbigpOwotICAgICAgICAgaSAh
PSBtTG9vcEluZGV4U3RhY2suZW5kKCk7Ci0gICAgICAgICArK2kpIHsKLSAgICAgICAgaWYgKGkt
PmlkID09IHN5bWJvbC0+Z2V0SWQoKSkKLSAgICAgICAgICAgIHJldHVybiBpLT5jdXJyZW50VmFs
dWU7Ci0gICAgfQotICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12
b2lkIEZvckxvb3BVbnJvbGw6OlB1c2goVExvb3BJbmRleEluZm8mIGluZm8pCi17Ci0gICAgbUxv
b3BJbmRleFN0YWNrLnB1c2hfYmFjayhpbmZvKTsKLX0KLQotdm9pZCBGb3JMb29wVW5yb2xsOjpQ
b3AoKQotewotICAgIG1Mb29wSW5kZXhTdGFjay5wb3BfYmFjaygpOwotfQotCi0vLyBzdGF0aWMK
LXZvaWQgRm9yTG9vcFVucm9sbDo6TWFya0Zvckxvb3BzV2l0aEludGVnZXJJbmRpY2VzRm9yVW5y
b2xsaW5nKAotICAgIFRJbnRlcm1Ob2RlKiByb290KQotewotICAgIEFTU0VSVChyb290KTsKLQot
ICAgIEludGVnZXJGb3JMb29wVW5yb2xsTWFya2VyIG1hcmtlcjsKLSAgICByb290LT50cmF2ZXJz
ZSgmbWFya2VyKTsKLX0KLQotaW50IEZvckxvb3BVbnJvbGw6OmdldExvb3BJbmNyZW1lbnQoVElu
dGVybUxvb3AqIG5vZGUpCi17Ci0gICAgVEludGVybU5vZGUqIGV4cHIgPSBub2RlLT5nZXRFeHBy
ZXNzaW9uKCk7Ci0gICAgQVNTRVJUKGV4cHIgIT0gTlVMTCk7Ci0gICAgLy8gZm9yIGV4cHJlc3Np
b24gaGFzIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1zOgotICAgIC8vICAgICBsb29wX2luZGV4
KysKLSAgICAvLyAgICAgbG9vcF9pbmRleC0tCi0gICAgLy8gICAgIGxvb3BfaW5kZXggKz0gY29u
c3RhbnRfZXhwcmVzc2lvbgotICAgIC8vICAgICBsb29wX2luZGV4IC09IGNvbnN0YW50X2V4cHJl
c3Npb24KLSAgICAvLyAgICAgKytsb29wX2luZGV4Ci0gICAgLy8gICAgIC0tbG9vcF9pbmRleAot
ICAgIC8vIFRoZSBsYXN0IHR3byBmb3JtcyBhcmUgbm90IHNwZWNpZmllZCBpbiB0aGUgc3BlYywg
YnV0IEkgYW0gYXNzdW1pbmcKLSAgICAvLyBpdHMgYW4gb3ZlcnNpZ2h0LgotICAgIFRJbnRlcm1V
bmFyeSogdW5PcCA9IGV4cHItPmdldEFzVW5hcnlOb2RlKCk7Ci0gICAgVEludGVybUJpbmFyeSog
YmluT3AgPSB1bk9wID8gTlVMTCA6IGV4cHItPmdldEFzQmluYXJ5Tm9kZSgpOwotCi0gICAgVE9w
ZXJhdG9yIG9wID0gRU9wTnVsbDsKLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogaW5jcmVtZW50
Tm9kZSA9IE5VTEw7Ci0gICAgaWYgKHVuT3AgIT0gTlVMTCkgewotICAgICAgICBvcCA9IHVuT3At
PmdldE9wKCk7Ci0gICAgfSBlbHNlIGlmIChiaW5PcCAhPSBOVUxMKSB7Ci0gICAgICAgIG9wID0g
YmluT3AtPmdldE9wKCk7Ci0gICAgICAgIEFTU0VSVChiaW5PcC0+Z2V0UmlnaHQoKSAhPSBOVUxM
KTsKLSAgICAgICAgaW5jcmVtZW50Tm9kZSA9IGJpbk9wLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0
YW50VW5pb24oKTsKLSAgICAgICAgQVNTRVJUKGluY3JlbWVudE5vZGUgIT0gTlVMTCk7Ci0gICAg
fQotCi0gICAgaW50IGluY3JlbWVudCA9IDA7Ci0gICAgLy8gVGhlIG9wZXJhdG9yIGlzIG9uZSBv
ZjogKysgLS0gKz0gLT0uCi0gICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIEVPcFBvc3RJ
bmNyZW1lbnQ6Ci0gICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OgotICAgICAgICAgICAgQVNT
RVJUKCh1bk9wICE9IE5VTEwpICYmIChiaW5PcCA9PSBOVUxMKSk7Ci0gICAgICAgICAgICBpbmNy
ZW1lbnQgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wUG9zdERlY3Jl
bWVudDoKLSAgICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6Ci0gICAgICAgICAgICBBU1NFUlQo
KHVuT3AgIT0gTlVMTCkgJiYgKGJpbk9wID09IE5VTEwpKTsKLSAgICAgICAgICAgIGluY3JlbWVu
dCA9IC0xOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQWRkQXNzaWduOgot
ICAgICAgICAgICAgQVNTRVJUKCh1bk9wID09IE5VTEwpICYmIChiaW5PcCAhPSBOVUxMKSk7Ci0g
ICAgICAgICAgICBpbmNyZW1lbnQgPSBldmFsdWF0ZUludENvbnN0YW50KGluY3JlbWVudE5vZGUp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wU3ViQXNzaWduOgotICAgICAg
ICAgICAgQVNTRVJUKCh1bk9wID09IE5VTEwpICYmIChiaW5PcCAhPSBOVUxMKSk7Ci0gICAgICAg
ICAgICBpbmNyZW1lbnQgPSAtIGV2YWx1YXRlSW50Q29uc3RhbnQoaW5jcmVtZW50Tm9kZSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVChm
YWxzZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGluY3JlbWVudDsKLX0KLQotaW50IEZvckxvb3BV
bnJvbGw6OmV2YWx1YXRlSW50Q29uc3RhbnQoVEludGVybUNvbnN0YW50VW5pb24qIG5vZGUpCi17
Ci0gICAgQVNTRVJUKChub2RlICE9IE5VTEwpICYmIChub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRl
cigpICE9IE5VTEwpKTsKLSAgICByZXR1cm4gbm9kZS0+Z2V0SUNvbnN0KDApOwotfQotCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRm9yTG9vcFVucm9s
bC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJvbGwu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTgwMGUyNWIxZjBjMWE0ODdhMzczMWFl
ZTczMTYyMmNiMjI4ZmUxZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRm9yTG9vcFVucm9s
bC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykg
MjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNs
dWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKLQotc3RydWN0IFRMb29wSW5kZXhJbmZvIHsK
LSAgICBpbnQgaWQ7Ci0gICAgaW50IGluaXRWYWx1ZTsKLSAgICBpbnQgc3RvcFZhbHVlOwotICAg
IGludCBpbmNyZW1lbnRWYWx1ZTsKLSAgICBUT3BlcmF0b3Igb3A7Ci0gICAgaW50IGN1cnJlbnRW
YWx1ZTsKLX07Ci0KLWNsYXNzIEZvckxvb3BVbnJvbGwgewotcHVibGljOgotICAgIEZvckxvb3BV
bnJvbGwoKSB7IH0KLQotICAgIHZvaWQgRmlsbExvb3BJbmRleEluZm8oVEludGVybUxvb3AqIG5v
ZGUsIFRMb29wSW5kZXhJbmZvJiBpbmZvKTsKLQotICAgIC8vIFVwZGF0ZSB0aGUgaW5mby5jdXJy
ZW50VmFsdWUgZm9yIHRoZSBuZXh0IGxvb3AgaXRlcmF0aW9uLgotICAgIHZvaWQgU3RlcCgpOwot
Ci0gICAgLy8gUmV0dXJuIGZhbHNlIGlmIGxvb3AgY29uZGl0aW9uIGlzIG5vIGxvbmdlciBzYXRp
c2ZpZWQuCi0gICAgYm9vbCBTYXRpc2ZpZXNMb29wQ29uZGl0aW9uKCk7Ci0KLSAgICAvLyBDaGVj
ayBpZiB0aGUgc3ltYm9sIGlzIHRoZSBpbmRleCBvZiBhIGxvb3AgdGhhdCdzIHVucm9sbGVkLgot
ICAgIGJvb2wgTmVlZHNUb1JlcGxhY2VTeW1ib2xXaXRoVmFsdWUoVEludGVybVN5bWJvbCogc3lt
Ym9sKTsKLQotICAgIC8vIFJldHVybiB0aGUgY3VycmVudCB2YWx1ZSBvZiBhIGdpdmVuIGxvb3Ag
aW5kZXggc3ltYm9sLgotICAgIGludCBHZXRMb29wSW5kZXhWYWx1ZShUSW50ZXJtU3ltYm9sKiBz
eW1ib2wpOwotCi0gICAgdm9pZCBQdXNoKFRMb29wSW5kZXhJbmZvJiBpbmZvKTsKLSAgICB2b2lk
IFBvcCgpOwotCi0gICAgc3RhdGljIHZvaWQgTWFya0Zvckxvb3BzV2l0aEludGVnZXJJbmRpY2Vz
Rm9yVW5yb2xsaW5nKFRJbnRlcm1Ob2RlKiByb290KTsKLQotcHJpdmF0ZToKLSAgICBpbnQgZ2V0
TG9vcEluY3JlbWVudChUSW50ZXJtTG9vcCogbm9kZSk7Ci0KLSAgICBpbnQgZXZhbHVhdGVJbnRD
b25zdGFudChUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSk7Ci0KLSAgICBUVmVjdG9yPFRMb29w
SW5kZXhJbmZvPiBtTG9vcEluZGV4U3RhY2s7Ci19OwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSGFzaE5hbWVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvSGFzaE5hbWVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGQyMTQxZTJkODUzN2YwMTFlY2FhYzIyMDY2NTlhZDUyNDlmMjc4MjcuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL0hhc2hOYW1lcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAs
MCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9IQVNIX05BTUVTX0hf
Ci0jZGVmaW5lIENPTVBJTEVSX0hBU0hfTkFNRVNfSF8KLQotI2luY2x1ZGUgPG1hcD4KLQotI2lu
Y2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVy
TGFuZy5oIgotCi0jZGVmaW5lIEhBU0hFRF9OQU1FX1BSRUZJWCAid2ViZ2xfIgotCi10eXBlZGVm
IHN0ZDo6bWFwPFRQZXJzaXN0U3RyaW5nLCBUUGVyc2lzdFN0cmluZz4gTmFtZU1hcDsKLQotI2Vu
ZGlmICAvLyBDT01QSUxFUl9IQVNIX05BTUVTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5mb1NpbmsuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL0luZm9TaW5rLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZDIwYTZjMDE3NWFjYzRiZmY0OGQ3MmE0ZDEyYjcyMWE2NmJhMzIwMy4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvSW5mb1NpbmsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAs
MCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgi
Ci0KLXZvaWQgVEluZm9TaW5rQmFzZTo6cHJlZml4KFRQcmVmaXhUeXBlIHApIHsKLSAgICBzd2l0
Y2gocCkgewotICAgICAgICBjYXNlIEVQcmVmaXhOb25lOgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRVByZWZpeFdhcm5pbmc6Ci0gICAgICAgICAgICBzaW5rLmFwcGVuZCgiV0FS
TklORzogIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFUHJlZml4RXJyb3I6
Ci0gICAgICAgICAgICBzaW5rLmFwcGVuZCgiRVJST1I6ICIpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgRVByZWZpeEludGVybmFsRXJyb3I6Ci0gICAgICAgICAgICBzaW5rLmFw
cGVuZCgiSU5URVJOQUwgRVJST1I6ICIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRVByZWZpeFVuaW1wbGVtZW50ZWQ6Ci0gICAgICAgICAgICBzaW5rLmFwcGVuZCgiVU5JTVBM
RU1FTlRFRDogIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFUHJlZml4Tm90
ZToKLSAgICAgICAgICAgIHNpbmsuYXBwZW5kKCJOT1RFOiAiKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgc2luay5hcHBlbmQoIlVOS09XTiBFUlJP
UjogIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgVEluZm9TaW5rQmFz
ZTo6bG9jYXRpb24oaW50IGZpbGUsIGludCBsaW5lKSB7Ci0gICAgVFBlcnNpc3RTdHJpbmdTdHJl
YW0gc3RyZWFtOwotICAgIGlmIChsaW5lKQotICAgICAgICBzdHJlYW0gPDwgZmlsZSA8PCAiOiIg
PDwgbGluZTsKLSAgICBlbHNlCi0gICAgICAgIHN0cmVhbSA8PCBmaWxlIDw8ICI6PyAiOwotICAg
IHN0cmVhbSA8PCAiOiAiOwotCi0gICAgc2luay5hcHBlbmQoc3RyZWFtLnN0cigpKTsKLX0KLQot
dm9pZCBUSW5mb1NpbmtCYXNlOjpsb2NhdGlvbihjb25zdCBUU291cmNlTG9jJiBsb2MpIHsKLSAg
ICBsb2NhdGlvbihsb2MuZmlyc3RfZmlsZSwgbG9jLmZpcnN0X2xpbmUpOwotfQotCi12b2lkIFRJ
bmZvU2lua0Jhc2U6Om1lc3NhZ2UoVFByZWZpeFR5cGUgcCwgY29uc3QgVFNvdXJjZUxvYyYgbG9j
LCBjb25zdCBjaGFyKiBtKSB7Ci0gICAgcHJlZml4KHApOwotICAgIGxvY2F0aW9uKGxvYyk7Ci0g
ICAgc2luay5hcHBlbmQobSk7Ci0gICAgc2luay5hcHBlbmQoIlxuIik7Ci19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5mb1NpbmsuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbmZvU2luay5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBiZTBkZGZmZTMxZjVhMmZlOTdkNzg2ZmQwNjhjNzQxZTZhNWZlYTY1
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbmZvU2luay5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTE2ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQot
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgX0lORk9TSU5LX0lO
Q0xVREVEXwotI2RlZmluZSBfSU5GT1NJTktfSU5DTFVERURfCi0KLSNpbmNsdWRlIDxtYXRoLmg+
Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSAiY29tcGlsZXIvQ29tbW9uLmgiCi0KLS8v
IFJldHVybnMgdGhlIGZyYWN0aW9uYWwgcGFydCBvZiB0aGUgZ2l2ZW4gZmxvYXRpbmctcG9pbnQg
bnVtYmVyLgotaW5saW5lIGZsb2F0IGZyYWN0aW9uYWxQYXJ0KGZsb2F0IGYpIHsKLSAgZmxvYXQg
aW50UGFydCA9IDAuMGY7Ci0gIHJldHVybiBtb2RmZihmLCAmaW50UGFydCk7Ci19Ci0KLS8vCi0v
LyBUUHJlZml4VHlwZSBpcyB1c2VkIHRvIGNlbnRyYWxpemUgaG93IGluZm8gbG9nIG1lc3NhZ2Vz
IHN0YXJ0LgotLy8gU2VlIGJlbG93LgotLy8KLWVudW0gVFByZWZpeFR5cGUgewotICAgIEVQcmVm
aXhOb25lLAotICAgIEVQcmVmaXhXYXJuaW5nLAotICAgIEVQcmVmaXhFcnJvciwKLSAgICBFUHJl
Zml4SW50ZXJuYWxFcnJvciwKLSAgICBFUHJlZml4VW5pbXBsZW1lbnRlZCwKLSAgICBFUHJlZml4
Tm90ZQotfTsKLQotLy8KLS8vIEVuY2Fwc3VsYXRlIGluZm8gbG9ncyBmb3IgYWxsIG9iamVjdHMg
dGhhdCBoYXZlIHRoZW0uCi0vLwotLy8gVGhlIG1ldGhvZHMgYXJlIGEgZ2VuZXJhbCBzZXQgb2Yg
dG9vbHMgZm9yIGdldHRpbmcgYSB2YXJpZXR5IG9mCi0vLyBtZXNzYWdlcyBhbmQgdHlwZXMgaW5z
ZXJ0ZWQgaW50byB0aGUgbG9nLgotLy8KLWNsYXNzIFRJbmZvU2lua0Jhc2UgewotcHVibGljOgot
ICAgIFRJbmZvU2lua0Jhc2UoKSB7fQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAg
VEluZm9TaW5rQmFzZSYgb3BlcmF0b3I8PChjb25zdCBUJiB0KSB7Ci0gICAgICAgIFRQZXJzaXN0
U3RyaW5nU3RyZWFtIHN0cmVhbTsKLSAgICAgICAgc3RyZWFtIDw8IHQ7Ci0gICAgICAgIHNpbmsu
YXBwZW5kKHN0cmVhbS5zdHIoKSk7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAg
Ly8gT3ZlcnJpZGUgPDwgb3BlcmF0b3IgZm9yIHNwZWNpZmljIHR5cGVzLiBJdCBpcyBmYXN0ZXIg
dG8gYXBwZW5kIHN0cmluZ3MKLSAgICAvLyBhbmQgY2hhcmFjdGVycyBkaXJlY3RseSB0byB0aGUg
c2luay4KLSAgICBUSW5mb1NpbmtCYXNlJiBvcGVyYXRvcjw8KGNoYXIgYykgewotICAgICAgICBz
aW5rLmFwcGVuZCgxLCBjKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLSAgICBUSW5m
b1NpbmtCYXNlJiBvcGVyYXRvcjw8KGNvbnN0IGNoYXIqIHN0cikgewotICAgICAgICBzaW5rLmFw
cGVuZChzdHIpOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIFRJbmZvU2lua0Jh
c2UmIG9wZXJhdG9yPDwoY29uc3QgVFBlcnNpc3RTdHJpbmcmIHN0cikgewotICAgICAgICBzaW5r
LmFwcGVuZChzdHIpOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIFRJbmZvU2lu
a0Jhc2UmIG9wZXJhdG9yPDwoY29uc3QgVFN0cmluZyYgc3RyKSB7Ci0gICAgICAgIHNpbmsuYXBw
ZW5kKHN0ci5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLSAgICAvLyBN
YWtlIHN1cmUgZmxvYXRzIGFyZSB3cml0dGVuIHdpdGggY29ycmVjdCBwcmVjaXNpb24uCi0gICAg
VEluZm9TaW5rQmFzZSYgb3BlcmF0b3I8PChmbG9hdCBmKSB7Ci0gICAgICAgIC8vIE1ha2Ugc3Vy
ZSB0aGF0IGF0IGxlYXN0IG9uZSBkZWNpbWFsIHBvaW50IGlzIHdyaXR0ZW4uIElmIGEgbnVtYmVy
Ci0gICAgICAgIC8vIGRvZXMgbm90IGhhdmUgYSBmcmFjdGlvbmFsIHBhcnQsIHRoZSBkZWZhdWx0
IHByZWNpc2lvbiBmb3JtYXQgZG9lcwotICAgICAgICAvLyBub3Qgd3JpdGUgdGhlIGRlY2ltYWwg
cG9ydGlvbiB3aGljaCBnZXRzIGludGVycHJldGVkIGFzIGludGVnZXIgYnkKLSAgICAgICAgLy8g
dGhlIGNvbXBpbGVyLgotICAgICAgICBUUGVyc2lzdFN0cmluZ1N0cmVhbSBzdHJlYW07Ci0gICAg
ICAgIGlmIChmcmFjdGlvbmFsUGFydChmKSA9PSAwLjBmKSB7Ci0gICAgICAgICAgICBzdHJlYW0u
cHJlY2lzaW9uKDEpOwotICAgICAgICAgICAgc3RyZWFtIDw8IHN0ZDo6c2hvd3BvaW50IDw8IHN0
ZDo6Zml4ZWQgPDwgZjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0cmVhbS51bnNl
dGYoc3RkOjppb3M6OmZpeGVkKTsKLSAgICAgICAgICAgIHN0cmVhbS51bnNldGYoc3RkOjppb3M6
OnNjaWVudGlmaWMpOwotICAgICAgICAgICAgc3RyZWFtLnByZWNpc2lvbig4KTsKLSAgICAgICAg
ICAgIHN0cmVhbSA8PCBmOwotICAgICAgICB9Ci0gICAgICAgIHNpbmsuYXBwZW5kKHN0cmVhbS5z
dHIoKSk7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgLy8gV3JpdGUgYm9vbGVh
biB2YWx1ZXMgYXMgdGhlaXIgbmFtZXMgaW5zdGVhZCBvZiBpbnRlZ3JhbCB2YWx1ZS4KLSAgICBU
SW5mb1NpbmtCYXNlJiBvcGVyYXRvcjw8KGJvb2wgYikgewotICAgICAgICBjb25zdCBjaGFyKiBz
dHIgPSBiID8gInRydWUiIDogImZhbHNlIjsKLSAgICAgICAgc2luay5hcHBlbmQoc3RyKTsKLSAg
ICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIHZvaWQgZXJhc2UoKSB7IHNpbmsuY2xl
YXIoKTsgfQotICAgIGludCBzaXplKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihzaW5rLnNp
emUoKSk7IH0KLQotICAgIGNvbnN0IFRQZXJzaXN0U3RyaW5nJiBzdHIoKSBjb25zdCB7IHJldHVy
biBzaW5rOyB9Ci0gICAgY29uc3QgY2hhciogY19zdHIoKSBjb25zdCB7IHJldHVybiBzaW5rLmNf
c3RyKCk7IH0KLQotICAgIHZvaWQgcHJlZml4KFRQcmVmaXhUeXBlIHApOwotICAgIHZvaWQgbG9j
YXRpb24oaW50IGZpbGUsIGludCBsaW5lKTsKLSAgICB2b2lkIGxvY2F0aW9uKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxvYyk7Ci0gICAgdm9pZCBtZXNzYWdlKFRQcmVmaXhUeXBlIHAsIGNvbnN0IFRTb3Vy
Y2VMb2MmIGxvYywgY29uc3QgY2hhciogbSk7Ci0KLXByaXZhdGU6Ci0gICAgVFBlcnNpc3RTdHJp
bmcgc2luazsKLX07Ci0KLWNsYXNzIFRJbmZvU2luayB7Ci1wdWJsaWM6Ci0gICAgVEluZm9TaW5r
QmFzZSBpbmZvOwotICAgIFRJbmZvU2lua0Jhc2UgZGVidWc7Ci0gICAgVEluZm9TaW5rQmFzZSBv
Ymo7Ci19OwotCi0jZW5kaWYgLy8gX0lORk9TSU5LX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAyY2RiZTE3YWE2ZDVkYjAzNjBkZWI2YzkxMGQxZGYwNjc2MDgz
ZDU4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDU2NCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLwotLy8gQ3JlYXRl
IHN0cmluZ3MgdGhhdCBkZWNsYXJlIGJ1aWx0LWluIGRlZmluaXRpb25zLCBhZGQgYnVpbHQtaW5z
IHRoYXQKLS8vIGNhbm5vdCBiZSBleHByZXNzZWQgaW4gdGhlIGZpbGVzLCBhbmQgZXN0YWJsaXNo
IG1hcHBpbmdzIGJldHdlZW4gCi0vLyBidWlsdC1pbiBmdW5jdGlvbnMgYW5kIG9wZXJhdG9ycy4K
LS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplLmgiCi0KLSNpbmNsdWRlICJjb21w
aWxlci9pbnRlcm1lZGlhdGUuaCIKLQotdm9pZCBJbnNlcnRCdWlsdEluRnVuY3Rpb25zKFNoU2hh
ZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywgY29uc3QgU2hCdWlsdEluUmVzb3VyY2Vz
ICZyZXNvdXJjZXMsIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUpCi17Ci0gICAgVFR5cGUgKmZs
b2F0MSA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDEpOwot
ICAgIFRUeXBlICpmbG9hdDIgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZx
R2xvYmFsLCAyKTsKLSAgICBUVHlwZSAqZmxvYXQzID0gbmV3IFRUeXBlKEVidEZsb2F0LCBFYnBV
bmRlZmluZWQsIEV2cUdsb2JhbCwgMyk7Ci0gICAgVFR5cGUgKmZsb2F0NCA9IG5ldyBUVHlwZShF
YnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDQpOwotCi0gICAgVFR5cGUgKmludDIg
PSBuZXcgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMik7Ci0gICAgVFR5
cGUgKmludDMgPSBuZXcgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMyk7
Ci0gICAgVFR5cGUgKmludDQgPSBuZXcgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUds
b2JhbCwgNCk7Ci0KLSAgICAvLwotICAgIC8vIEFuZ2xlIGFuZCBUcmlnb25vbWV0cmljIEZ1bmN0
aW9ucy4KLSAgICAvLwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAicmFk
aWFucyIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJy
YWRpYW5zIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0Mywg
InJhZGlhbnMiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0
LCAicmFkaWFucyIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MSwgImRlZ3JlZXMiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQyLCAiZGVncmVlcyIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDMsICJkZWdyZWVzIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0NCwgImRlZ3JlZXMiLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDEsICJzaW4iLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQyLCAic2luIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MywgInNpbiIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDQsICJzaW4iLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDEsICJjb3MiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQyLCAiY29zIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MywgImNvcyIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDQsICJjb3MiLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDEsICJ0YW4iLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQy
LCAidGFuIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0Mywg
InRhbiIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0
YW4iLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJh
c2luIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImFz
aW4iLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiYXNp
biIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJhc2lu
IiwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiYWNv
cyIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJhY29z
IiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImFjb3Mi
LCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiYWNvcyIs
IGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImF0YW4i
LCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIs
ICJhdGFuIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQzLCAiYXRhbiIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0NCwgImF0YW4iLCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImF0YW4iLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiYXRhbiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDMsICJhdGFuIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0NCwgImF0YW4iLCBmbG9hdDQpOwotCi0gICAgLy8KLSAgICAvLyBF
eHBvbmVudGlhbCBGdW5jdGlvbnMuCi0gICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MSwgInBvdyIsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MiwgInBvdyIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInBvdyIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInBvdyIsIGZsb2F0NCwgZmxvYXQ0KTsKLQot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZXhwIiwgZmxvYXQxKTsKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImV4cCIsIGZsb2F0Mik7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJleHAiLCBmbG9hdDMpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZXhwIiwgZmxvYXQ0KTsKLQotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibG9nIiwgZmxvYXQxKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImxvZyIsIGZsb2F0Mik7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJsb2ciLCBmbG9hdDMpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibG9nIiwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZXhwMiIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJleHAyIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImV4cDIiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZXhwMiIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImxvZzIiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibG9nMiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDMsICJsb2cyIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0NCwgImxvZzIiLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDEsICJzcXJ0IiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MiwgInNxcnQiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQzLCAic3FydCIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDQsICJzcXJ0IiwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQxLCAiaW52ZXJzZXNxcnQiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiaW52ZXJzZXNxcnQiLCBmbG9hdDIpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiaW52ZXJzZXNxcnQiLCBmbG9hdDMpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiaW52ZXJzZXNxcnQiLCBmbG9h
dDQpOwotCi0gICAgLy8KLSAgICAvLyBDb21tb24gRnVuY3Rpb25zLgotICAgIC8vCi0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJhYnMiLCBmbG9hdDEpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiYWJzIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImFicyIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJhYnMiLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJzaWduIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInNpZ24iLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQzLCAic2lnbiIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDQsICJzaWduIiwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZmxvb3IiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZmxvb3IiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZmxvb3IiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZmxvb3IiLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJjZWlsIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImNlaWwiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiY2VpbCIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDQsICJjZWlsIiwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZnJhY3QiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZnJhY3QiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZnJhY3QiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZnJhY3QiLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJtb2QiLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJtb2QiLCBmbG9hdDIsIGZsb2F0MSk7Ci0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtb2QiLCBmbG9hdDMsIGZsb2F0
MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJtb2QiLCBmbG9hdDQs
IGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJtb2QiLCBm
bG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJt
b2QiLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDQsICJtb2QiLCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MSwgIm1pbiIsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MiwgIm1pbiIsIGZsb2F0MiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgIm1pbiIsIGZsb2F0MywgZmxvYXQxKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1pbiIsIGZsb2F0NCwgZmxvYXQxKTsKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgIm1pbiIsIGZsb2F0MiwgZmxvYXQy
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgIm1pbiIsIGZsb2F0Mywg
ZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1pbiIsIGZs
b2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAi
bWF4IiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQyLCAibWF4IiwgZmxvYXQyLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQzLCAibWF4IiwgZmxvYXQzLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQ0LCAibWF4IiwgZmxvYXQ0LCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibWF4IiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAibWF4IiwgZmxvYXQzLCBmbG9hdDMpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibWF4IiwgZmxvYXQ0LCBmbG9hdDQp
OwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJjbGFtcCIsIGZsb2F0
MSwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQy
LCAiY2xhbXAiLCBmbG9hdDIsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MywgImNsYW1wIiwgZmxvYXQzLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJjbGFtcCIsIGZsb2F0NCwgZmxvYXQx
LCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiY2xhbXAi
LCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MywgImNsYW1wIiwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJjbGFtcCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDQp
OwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJtaXgiLCBmbG9hdDEs
IGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0Miwg
Im1peCIsIGZsb2F0MiwgZmxvYXQyLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQzLCAibWl4IiwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0MSk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJtaXgiLCBmbG9hdDQsIGZsb2F0NCwgZmxvYXQx
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgIm1peCIsIGZsb2F0Miwg
ZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAi
bWl4IiwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDQsICJtaXgiLCBmbG9hdDQsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQxKTsKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInN0ZXAiLCBmbG9hdDIsIGZsb2F0
Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzdGVwIiwgZmxvYXQz
LCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAic3RlcCIs
IGZsb2F0NCwgZmxvYXQ0KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0Miwg
InN0ZXAiLCBmbG9hdDEsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDMsICJzdGVwIiwgZmxvYXQxLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQ0LCAic3RlcCIsIGZsb2F0MSwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQxLCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9h
dDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic21vb3Roc3RlcCIs
IGZsb2F0MiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQzLCAic21vb3Roc3RlcCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAic21vb3Roc3RlcCIsIGZsb2F0NCwgZmxvYXQ0
LCBmbG9hdDQpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic21vb3Ro
c3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQzLCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDMpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAic21vb3Roc3RlcCIsIGZsb2F0MSwg
ZmxvYXQxLCBmbG9hdDQpOwotCi0gICAgLy8KLSAgICAvLyBHZW9tZXRyaWMgRnVuY3Rpb25zLgot
ICAgIC8vCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJsZW5ndGgiLCBm
bG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibGVuZ3RoIiwg
ZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImxlbmd0aCIs
IGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJsZW5ndGgi
LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkaXN0
YW5jZSIsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MSwgImRpc3RhbmNlIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQxLCAiZGlzdGFuY2UiLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkaXN0YW5jZSIsIGZsb2F0NCwgZmxvYXQ0KTsK
LQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQxLCBm
bG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxv
YXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90
IiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQx
LCAiZG90IiwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDMsICJjcm9zcyIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MSwgIm5vcm1hbGl6ZSIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDIsICJub3JtYWxpemUiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAibm9ybWFsaXplIiwgZmxvYXQzKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm5vcm1hbGl6ZSIsIGZsb2F0NCk7Ci0KLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImZhY2Vmb3J3YXJkIiwgZmxvYXQx
LCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIs
ICJmYWNlZm9yd2FyZCIsIGZsb2F0MiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZmFjZWZvcndhcmQiLCBmbG9hdDMsIGZsb2F0MywgZmxv
YXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImZhY2Vmb3J3YXJk
IiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MSwgInJlZmxlY3QiLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDIsICJyZWZsZWN0IiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAicmVmbGVjdCIsIGZsb2F0MywgZmxvYXQz
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInJlZmxlY3QiLCBmbG9h
dDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInJl
ZnJhY3QiLCBmbG9hdDEsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MiwgInJlZnJhY3QiLCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQxKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInJlZnJhY3QiLCBmbG9hdDMsIGZsb2F0
MywgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInJlZnJh
Y3QiLCBmbG9hdDQsIGZsb2F0NCwgZmxvYXQxKTsKLQotICAgIFRUeXBlICptYXQyID0gbmV3IFRU
eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMiwgdHJ1ZSk7Ci0gICAgVFR5
cGUgKm1hdDMgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAz
LCB0cnVlKTsKLSAgICBUVHlwZSAqbWF0NCA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZp
bmVkLCBFdnFHbG9iYWwsIDQsIHRydWUpOwotCi0gICAgLy8KLSAgICAvLyBNYXRyaXggRnVuY3Rp
b25zLgotICAgIC8vCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihtYXQyLCAibWF0cml4
Q29tcE11bHQiLCBtYXQyLCBtYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKG1h
dDMsICJtYXRyaXhDb21wTXVsdCIsIG1hdDMsIG1hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4obWF0NCwgIm1hdHJpeENvbXBNdWx0IiwgbWF0NCwgbWF0NCk7Ci0KLSAgICBUVHlw
ZSAqYm9vbDEgPSBuZXcgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDEp
OwotICAgIFRUeXBlICpib29sMiA9IG5ldyBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2
cUdsb2JhbCwgMik7Ci0gICAgVFR5cGUgKmJvb2wzID0gbmV3IFRUeXBlKEVidEJvb2wsIEVicFVu
ZGVmaW5lZCwgRXZxR2xvYmFsLCAzKTsKLSAgICBUVHlwZSAqYm9vbDQgPSBuZXcgVFR5cGUoRWJ0
Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDQpOwotCi0gICAgLy8KLSAgICAvLyBWZWN0
b3IgcmVsYXRpb25hbCBmdW5jdGlvbnMuCi0gICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGJvb2wyLCAibGVzc1RoYW4iLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihib29sMywgImxlc3NUaGFuIiwgZmxvYXQzLCBmbG9hdDMpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJsZXNzVGhhbiIsIGZsb2F0NCwgZmxv
YXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJsZXNzVGhhbiIs
IGludDIsIGludDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJsZXNz
VGhhbiIsIGludDMsIGludDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQs
ICJsZXNzVGhhbiIsIGludDQsIGludDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihib29sMiwgImxlc3NUaGFuRXF1YWwiLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihib29sMywgImxlc3NUaGFuRXF1YWwiLCBmbG9hdDMsIGZsb2F0Myk7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImxlc3NUaGFuRXF1YWwiLCBm
bG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAi
bGVzc1RoYW5FcXVhbCIsIGludDIsIGludDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oYm9vbDMsICJsZXNzVGhhbkVxdWFsIiwgaW50MywgaW50Myk7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihib29sNCwgImxlc3NUaGFuRXF1YWwiLCBpbnQ0LCBpbnQ0KTsKLQotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJncmVhdGVyVGhhbiIsIGZsb2F0Miwg
ZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZ3JlYXRlclRo
YW4iLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29s
NCwgImdyZWF0ZXJUaGFuIiwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihib29sMiwgImdyZWF0ZXJUaGFuIiwgaW50MiwgaW50Mik7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImdyZWF0ZXJUaGFuIiwgaW50MywgaW50Myk7Ci0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImdyZWF0ZXJUaGFuIiwgaW50NCwg
aW50NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZ3JlYXRlclRo
YW5FcXVhbCIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGJvb2wzLCAiZ3JlYXRlclRoYW5FcXVhbCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAiZ3JlYXRlclRoYW5FcXVhbCIsIGZsb2F0NCwgZmxv
YXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJncmVhdGVyVGhh
bkVxdWFsIiwgaW50MiwgaW50Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29s
MywgImdyZWF0ZXJUaGFuRXF1YWwiLCBpbnQzLCBpbnQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGJvb2w0LCAiZ3JlYXRlclRoYW5FcXVhbCIsIGludDQsIGludDQpOwotCi0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImVxdWFsIiwgZmxvYXQyLCBmbG9hdDIp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJlcXVhbCIsIGZsb2F0Mywg
ZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAiZXF1YWwiLCBm
bG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAi
ZXF1YWwiLCBpbnQyLCBpbnQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wz
LCAiZXF1YWwiLCBpbnQzLCBpbnQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJv
b2w0LCAiZXF1YWwiLCBpbnQ0LCBpbnQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oYm9vbDIsICJlcXVhbCIsIGJvb2wyLCBib29sMik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihib29sMywgImVxdWFsIiwgYm9vbDMsIGJvb2wzKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGJvb2w0LCAiZXF1YWwiLCBib29sNCwgYm9vbDQpOwotCi0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgIm5vdEVxdWFsIiwgZmxvYXQyLCBmbG9hdDIpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJub3RFcXVhbCIsIGZsb2F0Mywg
ZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAibm90RXF1YWwi
LCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wy
LCAibm90RXF1YWwiLCBpbnQyLCBpbnQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGJvb2wzLCAibm90RXF1YWwiLCBpbnQzLCBpbnQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGJvb2w0LCAibm90RXF1YWwiLCBpbnQ0LCBpbnQ0KTsKLQotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oYm9vbDIsICJub3RFcXVhbCIsIGJvb2wyLCBib29sMik7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgIm5vdEVxdWFsIiwgYm9vbDMsIGJvb2wzKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAibm90RXF1YWwiLCBib29sNCwg
Ym9vbDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMSwgImFueSIsIGJv
b2wyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wxLCAiYW55IiwgYm9vbDMp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDEsICJhbnkiLCBib29sNCk7Ci0K
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wxLCAiYWxsIiwgYm9vbDIpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDEsICJhbGwiLCBib29sMyk7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMSwgImFsbCIsIGJvb2w0KTsKLQotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJub3QiLCBib29sMik7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihib29sMywgIm5vdCIsIGJvb2wzKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGJvb2w0LCAibm90IiwgYm9vbDQpOwotCi0gICAgVFR5cGUgKnNhbXBsZXIy
RCA9IG5ldyBUVHlwZShFYnRTYW1wbGVyMkQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAxKTsK
LSAgICBUVHlwZSAqc2FtcGxlckN1YmUgPSBuZXcgVFR5cGUoRWJ0U2FtcGxlckN1YmUsIEVicFVu
ZGVmaW5lZCwgRXZxR2xvYmFsLCAxKTsKLQotICAgIC8vCi0gICAgLy8gVGV4dHVyZSBGdW5jdGlv
bnMgZm9yIEdMU0wgRVMgMS4wCi0gICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0NCwgInRleHR1cmUyRCIsIHNhbXBsZXIyRCwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVyMkQsIGZsb2F0
Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9q
Iiwgc2FtcGxlcjJELCBmbG9hdDQpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQ0LCAidGV4dHVyZUN1YmUiLCBzYW1wbGVyQ3ViZSwgZmxvYXQzKTsKLQotICAgIGlmIChyZXNv
dXJjZXMuT0VTX0VHTF9pbWFnZV9leHRlcm5hbCkKLSAgICB7Ci0gICAgICAgIFRUeXBlICpzYW1w
bGVyRXh0ZXJuYWxPRVMgPSBuZXcgVFR5cGUoRWJ0U2FtcGxlckV4dGVybmFsT0VTLCBFYnBVbmRl
ZmluZWQsIEV2cUdsb2JhbCwgMSk7Ci0KLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDQsICJ0ZXh0dXJlMkQiLCBzYW1wbGVyRXh0ZXJuYWxPRVMsIGZsb2F0Mik7Ci0gICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNh
bXBsZXJFeHRlcm5hbE9FUywgZmxvYXQzKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlckV4dGVybmFsT0VTLCBmbG9hdDQp
OwotICAgIH0KLQotICAgIGlmIChyZXNvdXJjZXMuQVJCX3RleHR1cmVfcmVjdGFuZ2xlKQotICAg
IHsKLSAgICAgICAgVFR5cGUgKnNhbXBsZXIyRFJlY3QgPSBuZXcgVFR5cGUoRWJ0U2FtcGxlcjJE
UmVjdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDEpOwotCi0gICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUmVjdCIsIHNhbXBsZXIyRFJlY3QsIGZs
b2F0Mik7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVy
ZTJEUmVjdFByb2oiLCBzYW1wbGVyMkRSZWN0LCBmbG9hdDMpOwotICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFJlY3RQcm9qIiwgc2FtcGxlcjJEUmVj
dCwgZmxvYXQ0KTsKLSAgICB9Ci0KLSAgICBpZiAodHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIp
Ci0gICAgewotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1
cmUyRCIsIHNhbXBsZXIyRCwgZmxvYXQyLCBmbG9hdDEpOwotICAgICAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVyMkQsIGZsb2F0Mywg
ZmxvYXQxKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0
dXJlMkRQcm9qIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0MSk7Ci0gICAgICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZUN1YmUiLCBzYW1wbGVyQ3ViZSwgZmxv
YXQzLCBmbG9hdDEpOwotCi0gICAgICAgIGlmIChyZXNvdXJjZXMuT0VTX3N0YW5kYXJkX2Rlcml2
YXRpdmVzKQotICAgICAgICB7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MSwgImRGZHgiLCBmbG9hdDEpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDIsICJkRmR4IiwgZmxvYXQyKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZEZkeCIsIGZsb2F0Myk7Ci0gICAgICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImRGZHgiLCBmbG9hdDQpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRGZHki
LCBmbG9hdDEpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIs
ICJkRmR5IiwgZmxvYXQyKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQzLCAiZEZkeSIsIGZsb2F0Myk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0NCwgImRGZHkiLCBmbG9hdDQpOwotCi0gICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImZ3aWR0aCIsIGZsb2F0MSk7Ci0gICAgICAgICAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImZ3aWR0aCIsIGZsb2F0Mik7Ci0gICAg
ICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImZ3aWR0aCIsIGZsb2F0
Myk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImZ3aWR0
aCIsIGZsb2F0NCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZih0eXBlID09IFNIX1ZFUlRF
WF9TSEFERVIpCi0gICAgewotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
NCwgInRleHR1cmUyRExvZCIsIHNhbXBsZXIyRCwgZmxvYXQyLCBmbG9hdDEpOwotICAgICAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFByb2pMb2QiLCBzYW1w
bGVyMkQsIGZsb2F0MywgZmxvYXQxKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qTG9kIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0MSk7
Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZUN1YmVM
b2QiLCBzYW1wbGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDEpOwotICAgIH0KLQotICAgIC8vCi0gICAg
Ly8gRGVwdGggcmFuZ2UgaW4gd2luZG93IGNvb3JkaW5hdGVzCi0gICAgLy8KLSAgICBURmllbGRM
aXN0ICpmaWVsZHMgPSBOZXdQb29sVEZpZWxkTGlzdCgpOwotICAgIFRGaWVsZCAqbmVhciA9IG5l
dyBURmllbGQobmV3IFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEpLCBOZXdQ
b29sVFN0cmluZygibmVhciIpKTsKLSAgICBURmllbGQgKmZhciA9IG5ldyBURmllbGQobmV3IFRU
eXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEpLCBOZXdQb29sVFN0cmluZygiZmFy
IikpOwotICAgIFRGaWVsZCAqZGlmZiA9IG5ldyBURmllbGQobmV3IFRUeXBlKEVidEZsb2F0LCBF
YnBIaWdoLCBFdnFHbG9iYWwsIDEpLCBOZXdQb29sVFN0cmluZygiZGlmZiIpKTsKLSAgICBmaWVs
ZHMtPnB1c2hfYmFjayhuZWFyKTsKLSAgICBmaWVsZHMtPnB1c2hfYmFjayhmYXIpOwotICAgIGZp
ZWxkcy0+cHVzaF9iYWNrKGRpZmYpOwotICAgIFRTdHJ1Y3R1cmUgKmRlcHRoUmFuZ2VTdHJ1Y3Qg
PSBuZXcgVFN0cnVjdHVyZShOZXdQb29sVFN0cmluZygiZ2xfRGVwdGhSYW5nZVBhcmFtZXRlcnMi
KSwgZmllbGRzKTsKLSAgICBUVmFyaWFibGUgKmRlcHRoUmFuZ2VQYXJhbWV0ZXJzID0gbmV3IFRW
YXJpYWJsZSgmZGVwdGhSYW5nZVN0cnVjdC0+bmFtZSgpLCBkZXB0aFJhbmdlU3RydWN0LCB0cnVl
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKmRlcHRoUmFuZ2VQYXJhbWV0ZXJzKTsKLSAgICBU
VmFyaWFibGUgKmRlcHRoUmFuZ2UgPSBuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9E
ZXB0aFJhbmdlIiksIFRUeXBlKGRlcHRoUmFuZ2VTdHJ1Y3QpKTsKLSAgICBkZXB0aFJhbmdlLT5z
ZXRRdWFsaWZpZXIoRXZxVW5pZm9ybSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpkZXB0aFJh
bmdlKTsKLQotICAgIC8vCi0gICAgLy8gSW1wbGVtZW50YXRpb24gZGVwZW5kZW50IGJ1aWx0LWlu
IGNvbnN0YW50cy4KLSAgICAvLwotICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KCJnbF9N
YXhWZXJ0ZXhBdHRyaWJzIiwgcmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydENvbnN0SW50KCJnbF9NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyIsIHJlc291
cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29u
c3RJbnQoImdsX01heFZhcnlpbmdWZWN0b3JzIiwgcmVzb3VyY2VzLk1heFZhcnlpbmdWZWN0b3Jz
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xfTWF4VmVydGV4VGV4dHVyZUlt
YWdlVW5pdHMiLCByZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydENvbnN0SW50KCJnbF9NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRz
IiwgcmVzb3VyY2VzLk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydENvbnN0SW50KCJnbF9NYXhUZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5N
YXhUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImds
X01heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMiLCByZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3Jt
VmVjdG9ycyk7Ci0KLSAgICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKQotICAgIHsK
LSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heERyYXdCdWZmZXJzIiwg
cmVzb3VyY2VzLk1heERyYXdCdWZmZXJzKTsKLSAgICB9Ci19Ci0KLXZvaWQgSWRlbnRpZnlCdWls
dElucyhTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsCi0gICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzICZyZXNvdXJjZXMsCi0gICAgICAgICAg
ICAgICAgICAgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSkKLXsKLSAgICAvLwotICAgIC8v
IEZpcnN0LCBpbnNlcnQgc29tZSBzcGVjaWFsIGJ1aWx0LWluIHZhcmlhYmxlcyB0aGF0IGFyZSBu
b3QgaW4gCi0gICAgLy8gdGhlIGJ1aWx0LWluIGhlYWRlciBmaWxlcy4KLSAgICAvLwotICAgIHN3
aXRjaCh0eXBlKSB7Ci0gICAgY2FzZSBTSF9GUkFHTUVOVF9TSEFERVI6Ci0gICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Nvb3Jk
IiksICAgICAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFG
cmFnQ29vcmQsICAgNCkpKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlh
YmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9Gcm9udEZhY2luZyIpLCAgICAgICAgICAgICAgICAgICAg
IFRUeXBlKEVidEJvb2wsICBFYnBVbmRlZmluZWQsIEV2cUZyb250RmFjaW5nLCAxKSkpOwotICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImds
X1BvaW50Q29vcmQiKSwgICAgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1l
ZGl1bSwgRXZxUG9pbnRDb29yZCwgIDIpKSk7Ci0KLSAgICAgICAgLy8KLSAgICAgICAgLy8gSW4g
Q1NTIFNoYWRlcnMsIGdsX0ZyYWdDb2xvciwgZ2xfRnJhZ0RhdGEsIGFuZCBnbF9NYXhEcmF3QnVm
ZmVycyBhcmUgbm90IGF2YWlsYWJsZS4KLSAgICAgICAgLy8gSW5zdGVhZCwgY3NzX01peENvbG9y
IGFuZCBjc3NfQ29sb3JNYXRyaXggYXJlIGF2YWlsYWJsZS4KLSAgICAgICAgLy8KLSAgICAgICAg
aWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BFQykgewotICAgICAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29sb3IiKSwg
ICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0NvbG9y
LCAgIDQpKSk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUo
TmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEYXRhW2dsX01heERyYXdCdWZmZXJzXSIpLCBUVHlwZShF
YnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnRGF0YSwgICAgNCkpKTsKLSAgICAgICAgICAgIGlm
IChyZXNvdXJjZXMuRVhUX2ZyYWdfZGVwdGgpIHsKLSAgICAgICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEZXB0aEVYVCIp
LCAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCByZXNvdXJjZXMuRnJhZ21lbnRQcmVjaXNpb25I
aWdoID8gRWJwSGlnaCA6IEVicE1lZGl1bSwgRXZxRnJhZ0RlcHRoLCAxKSkpOwotICAgICAgICAg
ICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKCJnbF9GcmFnRGVwdGhFWFQiLCAi
R0xfRVhUX2ZyYWdfZGVwdGgiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmlu
ZygiY3NzX01peENvbG9yIiksICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBN
ZWRpdW0sIEV2cUdsb2JhbCwgICAgICA0KSkpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJjc3NfQ29sb3JNYXRyaXgiKSwgICAg
ICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAgIDQs
IHRydWUpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgU0hfVkVS
VEVYX1NIQURFUjoKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5l
d1Bvb2xUU3RyaW5nKCJnbF9Qb3NpdGlvbiIpLCAgICBUVHlwZShFYnRGbG9hdCwgRWJwSGlnaCwg
RXZxUG9zaXRpb24sICAgIDQpKSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRW
YXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfUG9pbnRTaXplIiksICAgVFR5cGUoRWJ0RmxvYXQs
IEVicE1lZGl1bSwgRXZxUG9pbnRTaXplLCAgIDEpKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAg
ZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYmICJMYW5ndWFnZSBub3Qgc3VwcG9ydGVkIik7Ci0gICAg
fQotCi0gICAgLy8KLSAgICAvLyBOZXh0LCBpZGVudGlmeSB3aGljaCBidWlsdC1pbnMgZnJvbSB0
aGUgYWxyZWFkeSBsb2FkZWQgaGVhZGVycyBoYXZlCi0gICAgLy8gYSBtYXBwaW5nIHRvIGFuIG9w
ZXJhdG9yLiAgVGhvc2UgdGhhdCBhcmUgbm90IGlkZW50aWZpZWQgYXMgc3VjaCBhcmUKLSAgICAv
LyBleHBlY3RlZCB0byBiZSByZXNvbHZlZCB0aHJvdWdoIGEgbGlicmFyeSBvZiBmdW5jdGlvbnMs
IHZlcnN1cyBhcwotICAgIC8vIG9wZXJhdGlvbnMuCi0gICAgLy8KLSAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKCJtYXRyaXhDb21wTXVsdCIsICAgRU9wTXVsKTsKLQotICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImVxdWFsIiwgICAgICAgICAgICBFT3BWZWN0b3JFcXVh
bCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibm90RXF1YWwiLCAgICAgICAg
IEVPcFZlY3Rvck5vdEVxdWFsKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJs
ZXNzVGhhbiIsICAgICAgICAgRU9wTGVzc1RoYW4pOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoImdyZWF0ZXJUaGFuIiwgICAgICBFT3BHcmVhdGVyVGhhbik7Ci0gICAgc3ltYm9s
VGFibGUucmVsYXRlVG9PcGVyYXRvcigibGVzc1RoYW5FcXVhbCIsICAgIEVPcExlc3NUaGFuRXF1
YWwpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImdyZWF0ZXJUaGFuRXF1YWwi
LCBFT3BHcmVhdGVyVGhhbkVxdWFsKTsKLSAgICAKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKCJyYWRpYW5zIiwgICAgICBFT3BSYWRpYW5zKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKCJkZWdyZWVzIiwgICAgICBFT3BEZWdyZWVzKTsKLSAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKCJzaW4iLCAgICAgICAgICBFT3BTaW4pOwotICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvT3BlcmF0b3IoImNvcyIsICAgICAgICAgIEVPcENvcyk7Ci0gICAgc3ltYm9s
VGFibGUucmVsYXRlVG9PcGVyYXRvcigidGFuIiwgICAgICAgICAgRU9wVGFuKTsKLSAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhc2luIiwgICAgICAgICBFT3BBc2luKTsKLSAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhY29zIiwgICAgICAgICBFT3BBY29zKTsKLSAg
ICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhdGFuIiwgICAgICAgICBFT3BBdGFuKTsK
LQotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInBvdyIsICAgICAgICAgIEVPcFBv
dyk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZXhwMiIsICAgICAgICAgRU9w
RXhwMik7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibG9nIiwgICAgICAgICAg
RU9wTG9nKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJleHAiLCAgICAgICAg
ICBFT3BFeHApOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxvZzIiLCAgICAg
ICAgIEVPcExvZzIpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInNxcnQiLCAg
ICAgICAgIEVPcFNxcnQpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImludmVy
c2VzcXJ0IiwgIEVPcEludmVyc2VTcXJ0KTsKLQotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoImFicyIsICAgICAgICAgIEVPcEFicyk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9P
cGVyYXRvcigic2lnbiIsICAgICAgICAgRU9wU2lnbik7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcigiZmxvb3IiLCAgICAgICAgRU9wRmxvb3IpOwotICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoImNlaWwiLCAgICAgICAgIEVPcENlaWwpOwotICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoImZyYWN0IiwgICAgICAgIEVPcEZyYWN0KTsKLSAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKCJtb2QiLCAgICAgICAgICBFT3BNb2QpOwotICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm1pbiIsICAgICAgICAgIEVPcE1pbik7Ci0gICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibWF4IiwgICAgICAgICAgRU9wTWF4KTsKLSAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJjbGFtcCIsICAgICAgICBFT3BDbGFtcCk7Ci0g
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibWl4IiwgICAgICAgICAgRU9wTWl4KTsK
LSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzdGVwIiwgICAgICAgICBFT3BTdGVw
KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzbW9vdGhzdGVwIiwgICBFT3BT
bW9vdGhTdGVwKTsKLQotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxlbmd0aCIs
ICAgICAgIEVPcExlbmd0aCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZGlz
dGFuY2UiLCAgICAgRU9wRGlzdGFuY2UpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0
b3IoImRvdCIsICAgICAgICAgIEVPcERvdCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVy
YXRvcigiY3Jvc3MiLCAgICAgICAgRU9wQ3Jvc3MpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoIm5vcm1hbGl6ZSIsICAgIEVPcE5vcm1hbGl6ZSk7Ci0gICAgc3ltYm9sVGFibGUu
cmVsYXRlVG9PcGVyYXRvcigiZmFjZWZvcndhcmQiLCAgRU9wRmFjZUZvcndhcmQpOwotICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInJlZmxlY3QiLCAgICAgIEVPcFJlZmxlY3QpOwot
ICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInJlZnJhY3QiLCAgICAgIEVPcFJlZnJh
Y3QpOwotICAgIAotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImFueSIsICAgICAg
ICAgIEVPcEFueSk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiYWxsIiwgICAg
ICAgICAgRU9wQWxsKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJub3QiLCAg
ICAgICAgICBFT3BWZWN0b3JMb2dpY2FsTm90KTsKLQotICAgIC8vIE1hcCBsYW5ndWFnZS1zcGVj
aWZpYyBvcGVyYXRvcnMuCi0gICAgc3dpdGNoKHR5cGUpIHsKLSAgICBjYXNlIFNIX1ZFUlRFWF9T
SEFERVI6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU0hfRlJBR01FTlRfU0hBREVSOgotICAg
ICAgICBpZiAocmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcykgewotICAgICAgICAg
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZEZkeCIsICAgRU9wREZkeCk7Ci0gICAg
ICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkRmR5IiwgICBFT3BERmR5KTsK
LSAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImZ3aWR0aCIsIEVPcEZ3
aWR0aCk7Ci0KLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKCJkRmR4
IiwgIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpOwotICAgICAgICAgICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9FeHRlbnNpb24oImRGZHkiLCAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVz
Iik7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbigiZndpZHRoIiwg
IkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6IGJyZWFrOwotICAgIH0KLQotICAgIC8vIEZpbmFsbHkgYWRkIHJlc291
cmNlLXNwZWNpZmljIHZhcmlhYmxlcy4KLSAgICBzd2l0Y2godHlwZSkgewotICAgIGNhc2UgU0hf
RlJBR01FTlRfU0hBREVSOgotICAgICAgICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVD
KSB7Ci0gICAgICAgICAgICAvLyBTZXQgdXAgZ2xfRnJhZ0RhdGEuICBUaGUgYXJyYXkgc2l6ZS4K
LSAgICAgICAgICAgIFRUeXBlIGZyYWdEYXRhKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdE
YXRhLCA0LCBmYWxzZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBmcmFnRGF0YS5zZXRBcnJheVNpemUo
cmVzb3VyY2VzLk1heERyYXdCdWZmZXJzKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGEiKSwgICAgZnJhZ0Rh
dGEpKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OiBicmVhazsKLSAg
ICB9Ci19Ci0KLXZvaWQgSW5pdEV4dGVuc2lvbkJlaGF2aW9yKGNvbnN0IFNoQnVpbHRJblJlc291
cmNlcyYgcmVzb3VyY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgVEV4dGVuc2lvbkJl
aGF2aW9yJiBleHRCZWhhdmlvcikKLXsKLSAgICBpZiAocmVzb3VyY2VzLk9FU19zdGFuZGFyZF9k
ZXJpdmF0aXZlcykKLSAgICAgICAgZXh0QmVoYXZpb3JbIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0
aXZlcyJdID0gRUJoVW5kZWZpbmVkOwotICAgIGlmIChyZXNvdXJjZXMuT0VTX0VHTF9pbWFnZV9l
eHRlcm5hbCkKLSAgICAgICAgZXh0QmVoYXZpb3JbIkdMX09FU19FR0xfaW1hZ2VfZXh0ZXJuYWwi
XSA9IEVCaFVuZGVmaW5lZDsKLSAgICBpZiAocmVzb3VyY2VzLkFSQl90ZXh0dXJlX3JlY3Rhbmds
ZSkKLSAgICAgICAgZXh0QmVoYXZpb3JbIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSJdID0gRUJo
VW5kZWZpbmVkOwotICAgIGlmIChyZXNvdXJjZXMuRVhUX2RyYXdfYnVmZmVycykKLSAgICAgICAg
ZXh0QmVoYXZpb3JbIkdMX0VYVF9kcmF3X2J1ZmZlcnMiXSA9IEVCaFVuZGVmaW5lZDsKLSAgICBp
ZiAocmVzb3VyY2VzLkVYVF9mcmFnX2RlcHRoKQotICAgICAgICBleHRCZWhhdmlvclsiR0xfRVhU
X2ZyYWdfZGVwdGgiXSA9IEVCaFVuZGVmaW5lZDsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA0YWExMzQ2NmFjYWQyOWU2NjZjMDVmYWQ2NzU5YThkYWZmOWRiODBkLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyAr
MCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIF9JTklUSUFMSVpFX0lOQ0xVREVE
XwotI2RlZmluZSBfSU5JVElBTElaRV9JTkNMVURFRF8KLQotI2luY2x1ZGUgImNvbXBpbGVyL0Nv
bW1vbi5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCi0jaW5jbHVkZSAiY29tcGls
ZXIvU3ltYm9sVGFibGUuaCIKLQotdm9pZCBJbnNlcnRCdWlsdEluRnVuY3Rpb25zKFNoU2hhZGVy
VHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywgY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzICZy
ZXNvdXJjZXMsIFRTeW1ib2xUYWJsZSAmdGFibGUpOwotCi12b2lkIElkZW50aWZ5QnVpbHRJbnMo
U2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLAotICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyYgcmVzb3VyY2VzLAotICAgICAgICAgICAgICAg
ICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpOwotCi12b2lkIEluaXRFeHRlbnNpb25C
ZWhhdmlvcihjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291cmNlcywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRFeHRlbnNpb25CZWhhdmlvciYgZXh0ZW5zaW9uQmVoYXZpb3IpOwot
Ci0jZW5kaWYgLy8gX0lOSVRJQUxJWkVfSU5DTFVERURfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDZjN2YyN2ZjZWQxNzRiMGIxNGE2N2JlN2M2NTIwZjE3OTRlMmE3
NjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVEbGwuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNv
bXBpbGVyL0luaXRpYWxpemVEbGwuaCIKLQotI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVH
bG9iYWxzLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgot
I2luY2x1ZGUgImNvbXBpbGVyL29zaW5jbHVkZS5oIgotCi1ib29sIEluaXRQcm9jZXNzKCkKLXsK
LSAgICBpZiAoIUluaXRpYWxpemVQb29sSW5kZXgoKSkgewotICAgICAgICBhc3NlcnQoMCAmJiAi
SW5pdFByb2Nlc3MoKTogRmFpbGVkIHRvIGluaXRhbGl6ZSBnbG9iYWwgcG9vbCIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFJbml0aWFsaXplUGFyc2VDb250ZXh0
SW5kZXgoKSkgewotICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdFByb2Nlc3MoKTogRmFpbGVkIHRv
IGluaXRhbGl6ZSBwYXJzZSBjb250ZXh0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBEZXRhY2hQcm9jZXNzKCkKLXsKLSAgICBG
cmVlUGFyc2VDb250ZXh0SW5kZXgoKTsKLSAgICBGcmVlUG9vbEluZGV4KCk7Ci19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVEbGwuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDMwNzBjYzNmZjc4Zjc1M2EyNDZjNDYwNjk4
OTA4NmE2M2JmMDhiYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLSNpZm5k
ZWYgX19JTklUSUFMSVpFRExMX0gKLSNkZWZpbmUgX19JTklUSUFMSVpFRExMX0gKLQotYm9vbCBJ
bml0UHJvY2VzcygpOwotdm9pZCBEZXRhY2hQcm9jZXNzKCk7Ci0KLSNlbmRpZiAvLyBfX0lOSVRJ
QUxJWkVETExfSAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvSW5pdGlhbGl6ZUdMUG9zaXRpb24uY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL0luaXRpYWxpemVHTFBvc2l0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZTAxOTNlMzlkMmU4YmExYTZkMTAxNWM5MWFjMGRkMGIwZGE4NDc2OC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZUdMUG9zaXRpb24uY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNv
bXBpbGVyL0luaXRpYWxpemVHTFBvc2l0aW9uLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvZGVidWcu
aCIKLQotYm9vbCBJbml0aWFsaXplR0xQb3NpdGlvbjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlz
aXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCi17Ci0gICAgYm9vbCB2aXNpdENoaWxkcmVuID0g
IW1Db2RlSW5zZXJ0ZWQ7Ci0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQotICAgIHsKLSAgICAg
IGNhc2UgRU9wU2VxdWVuY2U6IGJyZWFrOwotICAgICAgY2FzZSBFT3BGdW5jdGlvbjoKLSAgICAg
IHsKLSAgICAgICAgLy8gRnVuY3Rpb24gZGVmaW5pdGlvbi4KLSAgICAgICAgQVNTRVJUKHZpc2l0
ID09IFByZVZpc2l0KTsKLSAgICAgICAgaWYgKG5vZGUtPmdldE5hbWUoKSA9PSAibWFpbigiKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJnNlcXVlbmNlID0gbm9kZS0+
Z2V0U2VxdWVuY2UoKTsKLSAgICAgICAgICAgIEFTU0VSVCgoc2VxdWVuY2Uuc2l6ZSgpID09IDEp
IHx8IChzZXF1ZW5jZS5zaXplKCkgPT0gMikpOwotICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0
ZSAqYm9keSA9IE5VTEw7Ci0gICAgICAgICAgICBpZiAoc2VxdWVuY2Uuc2l6ZSgpID09IDEpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9keSA9IG5ldyBUSW50ZXJtQWdncmVnYXRl
KEVPcFNlcXVlbmNlKTsKLSAgICAgICAgICAgICAgICBzZXF1ZW5jZS5wdXNoX2JhY2soYm9keSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgYm9keSA9IHNlcXVlbmNlWzFdLT5nZXRBc0FnZ3JlZ2F0ZSgpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgQVNTRVJUKGJvZHkpOwotICAgICAgICAgICAgaW5zZXJ0Q29kZShi
b2R5LT5nZXRTZXF1ZW5jZSgpKTsKLSAgICAgICAgICAgIG1Db2RlSW5zZXJ0ZWQgPSB0cnVlOwot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZGVmYXVsdDogdmlzaXRD
aGlsZHJlbiA9IGZhbHNlOyBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHZpc2l0Q2hpbGRyZW47
Ci19Ci0KLXZvaWQgSW5pdGlhbGl6ZUdMUG9zaXRpb246Omluc2VydENvZGUoVEludGVybVNlcXVl
bmNlJiBzZXF1ZW5jZSkKLXsKLSAgICBUSW50ZXJtQmluYXJ5ICpiaW5hcnkgPSBuZXcgVEludGVy
bUJpbmFyeShFT3BBc3NpZ24pOwotICAgIHNlcXVlbmNlLmluc2VydChzZXF1ZW5jZS5iZWdpbigp
LCBiaW5hcnkpOwotCi0gICAgVEludGVybVN5bWJvbCAqbGVmdCA9IG5ldyBUSW50ZXJtU3ltYm9s
KAotICAgICAgICAwLCAiZ2xfUG9zaXRpb24iLCBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVk
LCBFdnFQb3NpdGlvbiwgNCkpOwotICAgIGJpbmFyeS0+c2V0TGVmdChsZWZ0KTsKLQotICAgIENv
bnN0YW50VW5pb24gKnUgPSBuZXcgQ29uc3RhbnRVbmlvbls0XTsKLSAgICBmb3IgKGludCBpaSA9
IDA7IGlpIDwgMzsgKytpaSkKLSAgICAgICAgdVtpaV0uc2V0RkNvbnN0KDAuMGYpOwotICAgIHVb
M10uc2V0RkNvbnN0KDEuMGYpOwotICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpyaWdodCA9IG5l
dyBUSW50ZXJtQ29uc3RhbnRVbmlvbigKLSAgICAgICAgdSwgVFR5cGUoRWJ0RmxvYXQsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QsIDQpKTsKLSAgICBiaW5hcnktPnNldFJpZ2h0KHJpZ2h0KTsKLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFs
aXplR0xQb3NpdGlvbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0lu
aXRpYWxpemVHTFBvc2l0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiMTEw
NzVhMTM3OThjZjNlNmYxZDc0Y2JkYmZiMDQzMjBlNzc1N2IuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL0luaXRpYWxpemVHTFBvc2l0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCww
IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX0lOSVRJQUxJWkVfR0xf
UE9TSVRJT05fSF8KLSNkZWZpbmUgQ09NUElMRVJfSU5JVElBTElaRV9HTF9QT1NJVElPTl9IXwot
Ci0jaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCi0KLWNsYXNzIEluaXRpYWxpemVH
TFBvc2l0aW9uIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKLXsKLXB1YmxpYzoKLSAgICBJbml0
aWFsaXplR0xQb3NpdGlvbigpIDogbUNvZGVJbnNlcnRlZChmYWxzZSkgeyB9Ci0KLXByb3RlY3Rl
ZDoKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5h
cnkqIG5vZGUpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIHZpc2l0VW5hcnko
VmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSogbm9kZSkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2
aXJ0dWFsIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24q
IG5vZGUpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNp
dCB2aXNpdCwgVEludGVybUxvb3AqIG5vZGUpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVh
bCBib29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKiBub2RlKSB7IHJl
dHVybiBmYWxzZTsgfQotCi0gICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZp
c2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKTsKLQotcHJpdmF0ZToKLSAgICAvLyBJbnNlcnQg
QVNUIG5vZGUgaW4gdGhlIGJlZ2lubmluZyBvZiBtYWluKCkgZm9yICJnbF9Qb3NpdGlvbiA9IHZl
YzQoMC4wLCAwLjAsIDAuMCwgMS4wKTsiLgotICAgIHZvaWQgaW5zZXJ0Q29kZShUSW50ZXJtU2Vx
dWVuY2UmIHNlcXVlbmNlKTsKLQotICAgIGJvb2wgbUNvZGVJbnNlcnRlZDsKLX07Ci0KLSNlbmRp
ZiAgLy8gQ09NUElMRVJfSU5JVElBTElaRV9HTF9QT1NJVElPTl9IXwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVHbG9iYWxzLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZUdsb2JhbHMuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDcxNTk0MTQyNDcxMDUzMDgwMzg2MjgxMzg2
YTk1MDZmYWJkMDU2My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZUdsb2Jh
bHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0K
LSNpZm5kZWYgX19JTklUSUFMSVpFX0dMT0JBTFNfSU5DTFVERURfCi0jZGVmaW5lIF9fSU5JVElB
TElaRV9HTE9CQUxTX0lOQ0xVREVEXwotCi1ib29sIEluaXRpYWxpemVQb29sSW5kZXgoKTsKLXZv
aWQgRnJlZVBvb2xJbmRleCgpOwotCi0jZW5kaWYgLy8gX19JTklUSUFMSVpFX0dMT0JBTFNfSU5D
TFVERURfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
SW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGRmYWIwMjczMzBkZTk1OTE2MmFiYTZlYWU4MjU4MzBkOTI1MGI0OTMuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxl
ci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCi0KLSNpbmNsdWRlICJjb21waWxlci9vc2luY2x1
ZGUuaCIKLQotT1NfVExTSW5kZXggR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19JTlZBTElE
X1RMU19JTkRFWDsKLQotYm9vbCBJbml0aWFsaXplUGFyc2VDb250ZXh0SW5kZXgoKQotewotICAg
IGFzc2VydChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCk7
Ci0KLSAgICBHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9IE9TX0FsbG9jVExTSW5kZXgoKTsKLSAg
ICByZXR1cm4gR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7
Ci19Ci0KLXZvaWQgRnJlZVBhcnNlQ29udGV4dEluZGV4KCkKLXsKLSAgICBhc3NlcnQoR2xvYmFs
UGFyc2VDb250ZXh0SW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpOwotCi0gICAgT1NfRnJl
ZVRMU0luZGV4KEdsb2JhbFBhcnNlQ29udGV4dEluZGV4KTsKLSAgICBHbG9iYWxQYXJzZUNvbnRl
eHRJbmRleCA9IE9TX0lOVkFMSURfVExTX0lOREVYOwotfQotCi12b2lkIFNldEdsb2JhbFBhcnNl
Q29udGV4dChUUGFyc2VDb250ZXh0KiBjb250ZXh0KQotewotICAgIGFzc2VydChHbG9iYWxQYXJz
ZUNvbnRleHRJbmRleCAhPSBPU19JTlZBTElEX1RMU19JTkRFWCk7Ci0gICAgT1NfU2V0VExTVmFs
dWUoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgsIGNvbnRleHQpOwotfQotCi1UUGFyc2VDb250ZXh0
KiBHZXRHbG9iYWxQYXJzZUNvbnRleHQoKQotewotICAgIGFzc2VydChHbG9iYWxQYXJzZUNvbnRl
eHRJbmRleCAhPSBPU19JTlZBTElEX1RMU19JTkRFWCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PFRQYXJzZUNvbnRleHQqPihPU19HZXRUTFNWYWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCkp
OwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
SW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYmZmYmFiODdkMDcyM2E2MzI4NDY4NDNjMzBkOWNhYzMzMDI3MDc3Ni4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTcgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBfX0lOSVRJQUxJ
WkVfUEFSU0VfQ09OVEVYVF9JTkNMVURFRF8KLSNkZWZpbmUgX19JTklUSUFMSVpFX1BBUlNFX0NP
TlRFWFRfSU5DTFVERURfCi0KLWJvb2wgSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCk7Ci12
b2lkIEZyZWVQYXJzZUNvbnRleHRJbmRleCgpOwotCi1zdHJ1Y3QgVFBhcnNlQ29udGV4dDsKLWV4
dGVybiB2b2lkIFNldEdsb2JhbFBhcnNlQ29udGV4dChUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsK
LWV4dGVybiBUUGFyc2VDb250ZXh0KiBHZXRHbG9iYWxQYXJzZUNvbnRleHQoKTsKLQotI2VuZGlm
IC8vIF9fSU5JVElBTElaRV9QQVJTRV9DT05URVhUX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybVRyYXZlcnNlLmNwcCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1UcmF2ZXJzZS5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhNjkxZGE3MWZkMDFmNDEwNzNiNzRiNmM5YWM1
MTBhMGFkZjBkMDYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybVRyYXZlcnNlLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDI1OSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0j
aW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCi0KLS8vCi0vLyBUcmF2ZXJzZSB0aGUg
aW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uIHRyZWUsIGFuZAotLy8gY2FsbCBhIG5vZGUgdHlw
ZSBzcGVjaWZpYyBmdW5jdGlvbiBmb3IgZWFjaCBub2RlLgotLy8gRG9uZSByZWN1cnNpdmVseSB0
aHJvdWdoIHRoZSBtZW1iZXIgZnVuY3Rpb24gVHJhdmVyc2UoKS4KLS8vIE5vZGUgdHlwZXMgY2Fu
IGJlIHNraXBwZWQgaWYgdGhlaXIgZnVuY3Rpb24gdG8gY2FsbCBpcyAwLAotLy8gYnV0IHRoZWly
IHN1YnRyZWUgd2lsbCBzdGlsbCBiZSB0cmF2ZXJzZWQuCi0vLyBOb2RlcyB3aXRoIGNoaWxkcmVu
IGNhbiBoYXZlIHRoZWlyIHdob2xlIHN1YnRyZWUgc2tpcHBlZAotLy8gaWYgcHJlVmlzaXQgaXMg
dHVybmVkIG9uIGFuZCB0aGUgdHlwZSBzcGVjaWZpYyBmdW5jdGlvbgotLy8gcmV0dXJucyBmYWxz
ZS4KLS8vCi0vLyBwcmVWaXNpdCwgcG9zdFZpc2l0LCBhbmQgcmlnaHRUb0xlZnQgY29udHJvbCB3
aGF0IG9yZGVyCi0vLyBub2RlcyBhcmUgdmlzaXRlZCBpbi4KLS8vCi0KLS8vCi0vLyBUcmF2ZXJz
YWwgZnVuY3Rpb25zIGZvciB0ZXJtaW5hbHMgYXJlIHN0cmFpZ2hmb3J3YXJkLi4uLgotLy8KLXZv
aWQgVEludGVybVN5bWJvbDo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciAqaXQpCi17Ci0gICAg
aXQtPnZpc2l0U3ltYm9sKHRoaXMpOwotfQotCi12b2lkIFRJbnRlcm1Db25zdGFudFVuaW9uOjp0
cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyICppdCkKLXsKLSAgICBpdC0+dmlzaXRDb25zdGFudFVu
aW9uKHRoaXMpOwotfQotCi0vLwotLy8gVHJhdmVyc2UgYSBiaW5hcnkgbm9kZS4KLS8vCi12b2lk
IFRJbnRlcm1CaW5hcnk6OnRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIgKml0KQotewotICAgIGJv
b2wgdmlzaXQgPSB0cnVlOwotCi0gICAgLy8KLSAgICAvLyB2aXNpdCB0aGUgbm9kZSBiZWZvcmUg
Y2hpbGRyZW4gaWYgcHJlLXZpc2l0aW5nLgotICAgIC8vCi0gICAgaWYgKGl0LT5wcmVWaXNpdCkK
LSAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRCaW5hcnkoUHJlVmlzaXQsIHRoaXMpOwotICAgIAot
ICAgIC8vCi0gICAgLy8gVmlzaXQgdGhlIGNoaWxkcmVuLCBpbiB0aGUgcmlnaHQgb3JkZXIuCi0g
ICAgLy8KLSAgICBpZiAodmlzaXQpCi0gICAgewotICAgICAgICBpdC0+aW5jcmVtZW50RGVwdGgo
dGhpcyk7Ci0KLSAgICAgICAgaWYgKGl0LT5yaWdodFRvTGVmdCkgCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChyaWdodCkKLSAgICAgICAgICAgICAgICByaWdodC0+dHJhdmVyc2UoaXQpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaXQtPmluVmlzaXQpCi0gICAgICAgICAgICAg
ICAgdmlzaXQgPSBpdC0+dmlzaXRCaW5hcnkoSW5WaXNpdCwgdGhpcyk7Ci0KLSAgICAgICAgICAg
IGlmICh2aXNpdCAmJiBsZWZ0KQotICAgICAgICAgICAgICAgIGxlZnQtPnRyYXZlcnNlKGl0KTsK
LSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChsZWZ0
KQotICAgICAgICAgICAgICAgIGxlZnQtPnRyYXZlcnNlKGl0KTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKGl0LT5pblZpc2l0KQotICAgICAgICAgICAgICAgIHZpc2l0ID0gaXQtPnZp
c2l0QmluYXJ5KEluVmlzaXQsIHRoaXMpOwotCi0gICAgICAgICAgICBpZiAodmlzaXQgJiYgcmln
aHQpCi0gICAgICAgICAgICAgICAgcmlnaHQtPnRyYXZlcnNlKGl0KTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGl0LT5kZWNyZW1lbnREZXB0aCgpOwotICAgIH0KLQotICAgIC8vCi0gICAgLy8gVmlz
aXQgdGhlIG5vZGUgYWZ0ZXIgdGhlIGNoaWxkcmVuLCBpZiByZXF1ZXN0ZWQgYW5kIHRoZSB0cmF2
ZXJzYWwKLSAgICAvLyBoYXNuJ3QgYmVlbiBjYW5jZWxsZWQgeWV0LgotICAgIC8vCi0gICAgaWYg
KHZpc2l0ICYmIGl0LT5wb3N0VmlzaXQpCi0gICAgICAgIGl0LT52aXNpdEJpbmFyeShQb3N0Vmlz
aXQsIHRoaXMpOwotfQotCi0vLwotLy8gVHJhdmVyc2UgYSB1bmFyeSBub2RlLiAgU2FtZSBjb21t
ZW50cyBpbiBiaW5hcnkgbm9kZSBhcHBseSBoZXJlLgotLy8KLXZvaWQgVEludGVybVVuYXJ5Ojp0
cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyICppdCkKLXsKLSAgICBib29sIHZpc2l0ID0gdHJ1ZTsK
LQotICAgIGlmIChpdC0+cHJlVmlzaXQpCi0gICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0VW5hcnko
UHJlVmlzaXQsIHRoaXMpOwotCi0gICAgaWYgKHZpc2l0KSB7Ci0gICAgICAgIGl0LT5pbmNyZW1l
bnREZXB0aCh0aGlzKTsKLSAgICAgICAgb3BlcmFuZC0+dHJhdmVyc2UoaXQpOwotICAgICAgICBp
dC0+ZGVjcmVtZW50RGVwdGgoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHZpc2l0ICYmIGl0LT5w
b3N0VmlzaXQpCi0gICAgICAgIGl0LT52aXNpdFVuYXJ5KFBvc3RWaXNpdCwgdGhpcyk7Ci19Ci0K
LS8vCi0vLyBUcmF2ZXJzZSBhbiBhZ2dyZWdhdGUgbm9kZS4gIFNhbWUgY29tbWVudHMgaW4gYmlu
YXJ5IG5vZGUgYXBwbHkgaGVyZS4KLS8vCi12b2lkIFRJbnRlcm1BZ2dyZWdhdGU6OnRyYXZlcnNl
KFRJbnRlcm1UcmF2ZXJzZXIgKml0KQotewotICAgIGJvb2wgdmlzaXQgPSB0cnVlOwotICAgIAot
ICAgIGlmIChpdC0+cHJlVmlzaXQpCi0gICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0QWdncmVnYXRl
KFByZVZpc2l0LCB0aGlzKTsKLSAgICAKLSAgICBpZiAodmlzaXQpCi0gICAgewotICAgICAgICBp
dC0+aW5jcmVtZW50RGVwdGgodGhpcyk7Ci0KLSAgICAgICAgaWYgKGl0LT5yaWdodFRvTGVmdCkK
LSAgICAgICAgewotICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6OnJldmVyc2VfaXRl
cmF0b3Igc2l0ID0gc2VxdWVuY2UucmJlZ2luKCk7IHNpdCAhPSBzZXF1ZW5jZS5yZW5kKCk7IHNp
dCsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICgqc2l0KS0+dHJhdmVyc2UoaXQp
OwotCi0gICAgICAgICAgICAgICAgaWYgKHZpc2l0ICYmIGl0LT5pblZpc2l0KQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCpzaXQgIT0gc2VxdWVuY2UuZnJvbnQo
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0QWdncmVnYXRlKElu
VmlzaXQsIHRoaXMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVl
bmNlOjppdGVyYXRvciBzaXQgPSBzZXF1ZW5jZS5iZWdpbigpOyBzaXQgIT0gc2VxdWVuY2UuZW5k
KCk7IHNpdCsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICgqc2l0KS0+dHJhdmVy
c2UoaXQpOwotCi0gICAgICAgICAgICAgICAgaWYgKHZpc2l0ICYmIGl0LT5pblZpc2l0KQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCpzaXQgIT0gc2VxdWVuY2Uu
YmFjaygpKQotICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRBZ2dyZWdh
dGUoSW5WaXNpdCwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBpdC0+ZGVjcmVtZW50RGVwdGgoKTsKLSAgICB9Ci0K
LSAgICBpZiAodmlzaXQgJiYgaXQtPnBvc3RWaXNpdCkKLSAgICAgICAgaXQtPnZpc2l0QWdncmVn
YXRlKFBvc3RWaXNpdCwgdGhpcyk7Ci19Ci0KLS8vCi0vLyBUcmF2ZXJzZSBhIHNlbGVjdGlvbiBu
b2RlLiAgU2FtZSBjb21tZW50cyBpbiBiaW5hcnkgbm9kZSBhcHBseSBoZXJlLgotLy8KLXZvaWQg
VEludGVybVNlbGVjdGlvbjo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciAqaXQpCi17Ci0gICAg
Ym9vbCB2aXNpdCA9IHRydWU7Ci0KLSAgICBpZiAoaXQtPnByZVZpc2l0KQotICAgICAgICB2aXNp
dCA9IGl0LT52aXNpdFNlbGVjdGlvbihQcmVWaXNpdCwgdGhpcyk7Ci0gICAgCi0gICAgaWYgKHZp
c2l0KSB7Ci0gICAgICAgIGl0LT5pbmNyZW1lbnREZXB0aCh0aGlzKTsKLSAgICAgICAgaWYgKGl0
LT5yaWdodFRvTGVmdCkgewotICAgICAgICAgICAgaWYgKGZhbHNlQmxvY2spCi0gICAgICAgICAg
ICAgICAgZmFsc2VCbG9jay0+dHJhdmVyc2UoaXQpOwotICAgICAgICAgICAgaWYgKHRydWVCbG9j
aykKLSAgICAgICAgICAgICAgICB0cnVlQmxvY2stPnRyYXZlcnNlKGl0KTsKLSAgICAgICAgICAg
IGNvbmRpdGlvbi0+dHJhdmVyc2UoaXQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Y29uZGl0aW9uLT50cmF2ZXJzZShpdCk7Ci0gICAgICAgICAgICBpZiAodHJ1ZUJsb2NrKQotICAg
ICAgICAgICAgICAgIHRydWVCbG9jay0+dHJhdmVyc2UoaXQpOwotICAgICAgICAgICAgaWYgKGZh
bHNlQmxvY2spCi0gICAgICAgICAgICAgICAgZmFsc2VCbG9jay0+dHJhdmVyc2UoaXQpOwotICAg
ICAgICB9Ci0gICAgICAgIGl0LT5kZWNyZW1lbnREZXB0aCgpOwotICAgIH0KLQotICAgIGlmICh2
aXNpdCAmJiBpdC0+cG9zdFZpc2l0KQotICAgICAgICBpdC0+dmlzaXRTZWxlY3Rpb24oUG9zdFZp
c2l0LCB0aGlzKTsKLX0KLQotLy8KLS8vIFRyYXZlcnNlIGEgbG9vcCBub2RlLiAgU2FtZSBjb21t
ZW50cyBpbiBiaW5hcnkgbm9kZSBhcHBseSBoZXJlLgotLy8KLXZvaWQgVEludGVybUxvb3A6OnRy
YXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIgKml0KQotewotICAgIGJvb2wgdmlzaXQgPSB0cnVlOwot
Ci0gICAgaWYgKGl0LT5wcmVWaXNpdCkKLSAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRMb29wKFBy
ZVZpc2l0LCB0aGlzKTsKLSAgICAKLSAgICBpZiAodmlzaXQpCi0gICAgewotICAgICAgICBpdC0+
aW5jcmVtZW50RGVwdGgodGhpcyk7Ci0KLSAgICAgICAgaWYgKGl0LT5yaWdodFRvTGVmdCkKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKGV4cHIpCi0gICAgICAgICAgICAgICAgZXhwci0+dHJh
dmVyc2UoaXQpOwotCi0gICAgICAgICAgICBpZiAoYm9keSkKLSAgICAgICAgICAgICAgICBib2R5
LT50cmF2ZXJzZShpdCk7Ci0KLSAgICAgICAgICAgIGlmIChjb25kKQotICAgICAgICAgICAgICAg
IGNvbmQtPnRyYXZlcnNlKGl0KTsKLQotICAgICAgICAgICAgaWYgKGluaXQpCi0gICAgICAgICAg
ICAgICAgaW5pdC0+dHJhdmVyc2UoaXQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKGluaXQpCi0gICAgICAgICAgICAgICAgaW5pdC0+dHJhdmVy
c2UoaXQpOwotCi0gICAgICAgICAgICBpZiAoY29uZCkKLSAgICAgICAgICAgICAgICBjb25kLT50
cmF2ZXJzZShpdCk7Ci0KLSAgICAgICAgICAgIGlmIChib2R5KQotICAgICAgICAgICAgICAgIGJv
ZHktPnRyYXZlcnNlKGl0KTsKLQotICAgICAgICAgICAgaWYgKGV4cHIpCi0gICAgICAgICAgICAg
ICAgZXhwci0+dHJhdmVyc2UoaXQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaXQtPmRlY3JlbWVu
dERlcHRoKCk7Ci0gICAgfQotCi0gICAgaWYgKHZpc2l0ICYmIGl0LT5wb3N0VmlzaXQpCi0gICAg
ICAgIGl0LT52aXNpdExvb3AoUG9zdFZpc2l0LCB0aGlzKTsKLX0KLQotLy8KLS8vIFRyYXZlcnNl
IGEgYnJhbmNoIG5vZGUuICBTYW1lIGNvbW1lbnRzIGluIGJpbmFyeSBub2RlIGFwcGx5IGhlcmUu
Ci0vLwotdm9pZCBUSW50ZXJtQnJhbmNoOjp0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyICppdCkK
LXsKLSAgICBib29sIHZpc2l0ID0gdHJ1ZTsKLQotICAgIGlmIChpdC0+cHJlVmlzaXQpCi0gICAg
ICAgIHZpc2l0ID0gaXQtPnZpc2l0QnJhbmNoKFByZVZpc2l0LCB0aGlzKTsKLSAgICAKLSAgICBp
ZiAodmlzaXQgJiYgZXhwcmVzc2lvbikgewotICAgICAgICBpdC0+aW5jcmVtZW50RGVwdGgodGhp
cyk7Ci0gICAgICAgIGV4cHJlc3Npb24tPnRyYXZlcnNlKGl0KTsKLSAgICAgICAgaXQtPmRlY3Jl
bWVudERlcHRoKCk7Ci0gICAgfQotCi0gICAgaWYgKHZpc2l0ICYmIGl0LT5wb3N0VmlzaXQpCi0g
ICAgICAgIGl0LT52aXNpdEJyYW5jaChQb3N0VmlzaXQsIHRoaXMpOwotfQotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW50ZXJtZWRpYXRlLmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2U0ZTM5NTEwZTJiNTcyNjkwMmFjNzIxZDNi
MmFkNWFjODIxYzkyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMTUwMCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0v
LwotLy8gQnVpbGQgdGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbi4KLS8vCi0KLSNpbmNs
dWRlIDxmbG9hdC5oPgotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPGFsZ29yaXRobT4K
LQotI2luY2x1ZGUgImNvbXBpbGVyL0hhc2hOYW1lcy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL2xv
Y2FsaW50ZXJtZWRpYXRlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUXVhbGlmaWVyQWxpdmUuaCIK
LSNpbmNsdWRlICJjb21waWxlci9SZW1vdmVUcmVlLmgiCi0KLWJvb2wgQ29tcGFyZVN0cnVjdHVy
ZShjb25zdCBUVHlwZSYgbGVmdE5vZGVUeXBlLCBDb25zdGFudFVuaW9uKiByaWdodFVuaW9uQXJy
YXksIENvbnN0YW50VW5pb24qIGxlZnRVbmlvbkFycmF5KTsKLQotc3RhdGljIFRQcmVjaXNpb24g
R2V0SGlnaGVyUHJlY2lzaW9uKFRQcmVjaXNpb24gbGVmdCwgVFByZWNpc2lvbiByaWdodCkKLXsK
LSAgICByZXR1cm4gbGVmdCA+IHJpZ2h0ID8gbGVmdCA6IHJpZ2h0OwotfQotCi1jb25zdCBjaGFy
KiBnZXRPcGVyYXRvclN0cmluZyhUT3BlcmF0b3Igb3ApCi17Ci0gICAgc3dpdGNoIChvcCkgewot
ICAgICAgY2FzZSBFT3BJbml0aWFsaXplOiByZXR1cm4gIj0iOwotICAgICAgY2FzZSBFT3BBc3Np
Z246IHJldHVybiAiPSI7Ci0gICAgICBjYXNlIEVPcEFkZEFzc2lnbjogcmV0dXJuICIrPSI7Ci0g
ICAgICBjYXNlIEVPcFN1YkFzc2lnbjogcmV0dXJuICItPSI7Ci0gICAgICBjYXNlIEVPcERpdkFz
c2lnbjogcmV0dXJuICIvPSI7Ci0KLSAgICAgIC8vIEZhbGwtdGhyb3VnaC4KLSAgICAgIGNhc2Ug
RU9wTXVsQXNzaWduOiAKLSAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXhBc3NpZ246Ci0g
ICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOgotICAgICAgY2FzZSBFT3BNYXRy
aXhUaW1lc1NjYWxhckFzc2lnbjoKLSAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXhBc3Np
Z246IHJldHVybiAiKj0iOwotCi0gICAgICAvLyBGYWxsLXRocm91Z2guCi0gICAgICBjYXNlIEVP
cEluZGV4RGlyZWN0OgotICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OiByZXR1cm4gIltdIjsK
LQotICAgICAgY2FzZSBFT3BJbmRleERpcmVjdFN0cnVjdDogcmV0dXJuICIuIjsKLSAgICAgIGNh
c2UgRU9wVmVjdG9yU3dpenpsZTogcmV0dXJuICIuIjsKLSAgICAgIGNhc2UgRU9wQWRkOiByZXR1
cm4gIisiOwotICAgICAgY2FzZSBFT3BTdWI6IHJldHVybiAiLSI7Ci0gICAgICBjYXNlIEVPcE11
bDogcmV0dXJuICIqIjsKLSAgICAgIGNhc2UgRU9wRGl2OiByZXR1cm4gIi8iOwotICAgICAgY2Fz
ZSBFT3BNb2Q6IFVOSU1QTEVNRU5URUQoKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcEVxdWFsOiBy
ZXR1cm4gIj09IjsKLSAgICAgIGNhc2UgRU9wTm90RXF1YWw6IHJldHVybiAiIT0iOwotICAgICAg
Y2FzZSBFT3BMZXNzVGhhbjogcmV0dXJuICI8IjsKLSAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46
IHJldHVybiAiPiI7Ci0gICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6IHJldHVybiAiPD0iOwot
ICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiByZXR1cm4gIj49IjsKLQotICAgICAgLy8g
RmFsbC10aHJvdWdoLgotICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjoKLSAgICAgIGNh
c2UgRU9wVmVjdG9yVGltZXNNYXRyaXg6Ci0gICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVjdG9y
OgotICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhcjoKLSAgICAgIGNhc2UgRU9wTWF0cml4
VGltZXNNYXRyaXg6IHJldHVybiAiKiI7Ci0KLSAgICAgIGNhc2UgRU9wTG9naWNhbE9yOiByZXR1
cm4gInx8IjsKLSAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjogcmV0dXJuICJeXiI7Ci0gICAgICBj
YXNlIEVPcExvZ2ljYWxBbmQ6IHJldHVybiAiJiYiOwotICAgICAgY2FzZSBFT3BOZWdhdGl2ZTog
cmV0dXJuICItIjsKLSAgICAgIGNhc2UgRU9wVmVjdG9yTG9naWNhbE5vdDogcmV0dXJuICJub3Qi
OwotICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OiByZXR1cm4gIiEiOwotICAgICAgY2FzZSBFT3BQ
b3N0SW5jcmVtZW50OiByZXR1cm4gIisrIjsKLSAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDog
cmV0dXJuICItLSI7Ci0gICAgICBjYXNlIEVPcFByZUluY3JlbWVudDogcmV0dXJuICIrKyI7Ci0g
ICAgICBjYXNlIEVPcFByZURlY3JlbWVudDogcmV0dXJuICItLSI7Ci0KLSAgICAgIC8vIEZhbGwt
dGhyb3VnaC4KLSAgICAgIGNhc2UgRU9wQ29udkludFRvQm9vbDoKLSAgICAgIGNhc2UgRU9wQ29u
dkZsb2F0VG9Cb29sOiByZXR1cm4gImJvb2wiOwotIAotICAgICAgLy8gRmFsbC10aHJvdWdoLgot
ICAgICAgY2FzZSBFT3BDb252Qm9vbFRvRmxvYXQ6Ci0gICAgICBjYXNlIEVPcENvbnZJbnRUb0Zs
b2F0OiByZXR1cm4gImZsb2F0IjsKLSAKLSAgICAgIC8vIEZhbGwtdGhyb3VnaC4KLSAgICAgIGNh
c2UgRU9wQ29udkZsb2F0VG9JbnQ6Ci0gICAgICBjYXNlIEVPcENvbnZCb29sVG9JbnQ6IHJldHVy
biAiaW50IjsKLQotICAgICAgY2FzZSBFT3BSYWRpYW5zOiByZXR1cm4gInJhZGlhbnMiOwotICAg
ICAgY2FzZSBFT3BEZWdyZWVzOiByZXR1cm4gImRlZ3JlZXMiOwotICAgICAgY2FzZSBFT3BTaW46
IHJldHVybiAic2luIjsKLSAgICAgIGNhc2UgRU9wQ29zOiByZXR1cm4gImNvcyI7Ci0gICAgICBj
YXNlIEVPcFRhbjogcmV0dXJuICJ0YW4iOwotICAgICAgY2FzZSBFT3BBc2luOiByZXR1cm4gImFz
aW4iOwotICAgICAgY2FzZSBFT3BBY29zOiByZXR1cm4gImFjb3MiOwotICAgICAgY2FzZSBFT3BB
dGFuOiByZXR1cm4gImF0YW4iOwotICAgICAgY2FzZSBFT3BFeHA6IHJldHVybiAiZXhwIjsKLSAg
ICAgIGNhc2UgRU9wTG9nOiByZXR1cm4gImxvZyI7Ci0gICAgICBjYXNlIEVPcEV4cDI6IHJldHVy
biAiZXhwMiI7Ci0gICAgICBjYXNlIEVPcExvZzI6IHJldHVybiAibG9nMiI7Ci0gICAgICBjYXNl
IEVPcFNxcnQ6IHJldHVybiAic3FydCI7Ci0gICAgICBjYXNlIEVPcEludmVyc2VTcXJ0OiByZXR1
cm4gImludmVyc2VzcXJ0IjsKLSAgICAgIGNhc2UgRU9wQWJzOiByZXR1cm4gImFicyI7Ci0gICAg
ICBjYXNlIEVPcFNpZ246IHJldHVybiAic2lnbiI7Ci0gICAgICBjYXNlIEVPcEZsb29yOiByZXR1
cm4gImZsb29yIjsKLSAgICAgIGNhc2UgRU9wQ2VpbDogcmV0dXJuICJjZWlsIjsKLSAgICAgIGNh
c2UgRU9wRnJhY3Q6IHJldHVybiAiZnJhY3QiOwotICAgICAgY2FzZSBFT3BMZW5ndGg6IHJldHVy
biAibGVuZ3RoIjsKLSAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiByZXR1cm4gIm5vcm1hbGl6ZSI7
Ci0gICAgICBjYXNlIEVPcERGZHg6IHJldHVybiAiZEZkeCI7Ci0gICAgICBjYXNlIEVPcERGZHk6
IHJldHVybiAiZEZkeSI7Ci0gICAgICBjYXNlIEVPcEZ3aWR0aDogcmV0dXJuICJmd2lkdGgiOwot
ICAgICAgY2FzZSBFT3BBbnk6IHJldHVybiAiYW55IjsKLSAgICAgIGNhc2UgRU9wQWxsOiByZXR1
cm4gImFsbCI7Ci0KLSAgICAgIGRlZmF1bHQ6IGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gIiI7
Ci19Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyBGaXJzdCBzZXQgb2YgZnVuY3Rpb25z
IGFyZSB0byBoZWxwIGJ1aWxkIHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24uCi0vLyBU
aGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBtZW1iZXIgZnVuY3Rpb25zIG9mIHRoZSBub2Rlcy4KLS8v
IFRoZXkgYXJlIGNhbGxlZCBmcm9tIHBhcnNlciBwcm9kdWN0aW9ucy4KLS8vCi0vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLwotCi0vLwotLy8gQWRkIGEgdGVybWluYWwgbm9kZSBmb3IgYW4gaWRlbnRpZmll
ciBpbiBhbiBleHByZXNzaW9uLgotLy8KLS8vIFJldHVybnMgdGhlIGFkZGVkIG5vZGUuCi0vLwot
VEludGVybVN5bWJvbCogVEludGVybWVkaWF0ZTo6YWRkU3ltYm9sKGludCBpZCwgY29uc3QgVFN0
cmluZyYgbmFtZSwgY29uc3QgVFR5cGUmIHR5cGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCi17
Ci0gICAgVEludGVybVN5bWJvbCogbm9kZSA9IG5ldyBUSW50ZXJtU3ltYm9sKGlkLCBuYW1lLCB0
eXBlKTsKLSAgICBub2RlLT5zZXRMaW5lKGxpbmUpOwotCi0gICAgcmV0dXJuIG5vZGU7Ci19Ci0K
LS8vCi0vLyBDb25uZWN0IHR3byBub2RlcyB3aXRoIGEgbmV3IHBhcmVudCB0aGF0IGRvZXMgYSBi
aW5hcnkgb3BlcmF0aW9uIG9uIHRoZSBub2Rlcy4KLS8vCi0vLyBSZXR1cm5zIHRoZSBhZGRlZCBu
b2RlLgotLy8KLVRJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkQmluYXJ5TWF0aChUT3Bl
cmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdodCwgY29uc3Qg
VFNvdXJjZUxvYyYgbGluZSwgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKLXsKLSAgICBzd2l0
Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgRU9wRXF1YWw6Ci0gICAgICAgIGNhc2UgRU9wTm90RXF1
YWw6Ci0gICAgICAgICAgICBpZiAobGVmdC0+aXNBcnJheSgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTGVzc1RoYW46Ci0g
ICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46Ci0gICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVh
bDoKLSAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgotICAgICAgICAgICAgaWYgKGxl
ZnQtPmlzTWF0cml4KCkgfHwgbGVmdC0+aXNBcnJheSgpIHx8IGxlZnQtPmlzVmVjdG9yKCkgfHwg
bGVmdC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBF
T3BMb2dpY2FsT3I6Ci0gICAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjoKLSAgICAgICAgY2FzZSBF
T3BMb2dpY2FsQW5kOgotICAgICAgICAgICAgaWYgKGxlZnQtPmdldEJhc2ljVHlwZSgpICE9IEVi
dEJvb2wgfHwgbGVmdC0+aXNNYXRyaXgoKSB8fCBsZWZ0LT5pc0FycmF5KCkgfHwgbGVmdC0+aXNW
ZWN0b3IoKSkgewotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQWRkOgotICAgICAgICBjYXNlIEVPcFN1
YjoKLSAgICAgICAgY2FzZSBFT3BEaXY6Ci0gICAgICAgIGNhc2UgRU9wTXVsOgotICAgICAgICAg
ICAgaWYgKGxlZnQtPmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCB8fCBsZWZ0LT5nZXRCYXNp
Y1R5cGUoKSA9PSBFYnRCb29sKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBk
ZWZhdWx0OiBicmVhazsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIEZpcnN0IHRyeSBjb252ZXJ0
aW5nIHRoZSBjaGlsZHJlbiB0byBjb21wYXRpYmxlIHR5cGVzLgotICAgIC8vCi0gICAgaWYgKGxl
ZnQtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKSAmJiByaWdodC0+Z2V0VHlwZSgpLmdldFN0cnVjdCgp
KSB7Ci0gICAgICAgIGlmIChsZWZ0LT5nZXRUeXBlKCkgIT0gcmlnaHQtPmdldFR5cGUoKSkKLSAg
ICAgICAgICAgIHJldHVybiAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFRJbnRlcm1UeXBlZCog
Y2hpbGQgPSBhZGRDb252ZXJzaW9uKG9wLCBsZWZ0LT5nZXRUeXBlKCksIHJpZ2h0KTsKLSAgICAg
ICAgaWYgKGNoaWxkKQotICAgICAgICAgICAgcmlnaHQgPSBjaGlsZDsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBjaGlsZCA9IGFkZENvbnZlcnNpb24ob3AsIHJpZ2h0LT5nZXRUeXBlKCks
IGxlZnQpOwotICAgICAgICAgICAgaWYgKGNoaWxkKQotICAgICAgICAgICAgICAgIGxlZnQgPSBj
aGlsZDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIC8vCi0gICAgLy8gTmVlZCBhIG5ldyBub2RlIGhvbGRpbmcgdGhp
bmdzIHRvZ2V0aGVyIHRoZW4uICBNYWtlCi0gICAgLy8gb25lIGFuZCBwcm9tb3RlIGl0IHRvIHRo
ZSByaWdodCB0eXBlLgotICAgIC8vCi0gICAgVEludGVybUJpbmFyeSogbm9kZSA9IG5ldyBUSW50
ZXJtQmluYXJ5KG9wKTsKLSAgICBub2RlLT5zZXRMaW5lKGxpbmUpOwotCi0gICAgbm9kZS0+c2V0
TGVmdChsZWZ0KTsKLSAgICBub2RlLT5zZXRSaWdodChyaWdodCk7Ci0gICAgaWYgKCFub2RlLT5w
cm9tb3RlKGluZm9TaW5rKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLwotICAgIC8vIFNl
ZSBpZiB3ZSBjYW4gZm9sZCBjb25zdGFudHMuCi0gICAgLy8KLSAgICBUSW50ZXJtVHlwZWQqIHR5
cGVkUmV0dXJuTm9kZSA9IDA7Ci0gICAgVEludGVybUNvbnN0YW50VW5pb24gKmxlZnRUZW1wQ29u
c3RhbnQgPSBsZWZ0LT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLSAgICBUSW50ZXJtQ29uc3RhbnRV
bmlvbiAqcmlnaHRUZW1wQ29uc3RhbnQgPSByaWdodC0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0g
ICAgaWYgKGxlZnRUZW1wQ29uc3RhbnQgJiYgcmlnaHRUZW1wQ29uc3RhbnQpIHsKLSAgICAgICAg
dHlwZWRSZXR1cm5Ob2RlID0gbGVmdFRlbXBDb25zdGFudC0+Zm9sZChub2RlLT5nZXRPcCgpLCBy
aWdodFRlbXBDb25zdGFudCwgaW5mb1NpbmspOwotCi0gICAgICAgIGlmICh0eXBlZFJldHVybk5v
ZGUpCi0gICAgICAgICAgICByZXR1cm4gdHlwZWRSZXR1cm5Ob2RlOwotICAgIH0KLQotICAgIHJl
dHVybiBub2RlOwotfQotCi0vLwotLy8gQ29ubmVjdCB0d28gbm9kZXMgdGhyb3VnaCBhbiBhc3Np
Z25tZW50LgotLy8KLS8vIFJldHVybnMgdGhlIGFkZGVkIG5vZGUuCi0vLwotVEludGVybVR5cGVk
KiBUSW50ZXJtZWRpYXRlOjphZGRBc3NpZ24oVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGxl
ZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCi17Ci0gICAg
Ly8KLSAgICAvLyBMaWtlIGFkZGluZyBiaW5hcnkgbWF0aCwgZXhjZXB0IHRoZSBjb252ZXJzaW9u
IGNhbiBvbmx5IGdvCi0gICAgLy8gZnJvbSByaWdodCB0byBsZWZ0LgotICAgIC8vCi0gICAgVElu
dGVybUJpbmFyeSogbm9kZSA9IG5ldyBUSW50ZXJtQmluYXJ5KG9wKTsKLSAgICBub2RlLT5zZXRM
aW5lKGxpbmUpOwotCi0gICAgVEludGVybVR5cGVkKiBjaGlsZCA9IGFkZENvbnZlcnNpb24ob3As
IGxlZnQtPmdldFR5cGUoKSwgcmlnaHQpOwotICAgIGlmIChjaGlsZCA9PSAwKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIG5vZGUtPnNldExlZnQobGVmdCk7Ci0gICAgbm9kZS0+c2V0UmlnaHQo
Y2hpbGQpOwotICAgIGlmICghIG5vZGUtPnByb21vdGUoaW5mb1NpbmspKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIHJldHVybiBub2RlOwotfQotCi0vLwotLy8gQ29ubmVjdCB0d28gbm9kZXMg
dGhyb3VnaCBhbiBpbmRleCBvcGVyYXRvciwgd2hlcmUgdGhlIGxlZnQgbm9kZSBpcyB0aGUgYmFz
ZQotLy8gb2YgYW4gYXJyYXkgb3Igc3RydWN0LCBhbmQgdGhlIHJpZ2h0IG5vZGUgaXMgYSBkaXJl
Y3Qgb3IgaW5kaXJlY3Qgb2Zmc2V0LgotLy8KLS8vIFJldHVybnMgdGhlIGFkZGVkIG5vZGUuCi0v
LyBUaGUgY2FsbGVyIHNob3VsZCBzZXQgdGhlIHR5cGUgb2YgdGhlIHJldHVybmVkIG5vZGUuCi0v
LwotVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRJbmRleChUT3BlcmF0b3Igb3AsIFRJ
bnRlcm1UeXBlZCogYmFzZSwgVEludGVybVR5cGVkKiBpbmRleCwgY29uc3QgVFNvdXJjZUxvYyYg
bGluZSkKLXsKLSAgICBUSW50ZXJtQmluYXJ5KiBub2RlID0gbmV3IFRJbnRlcm1CaW5hcnkob3Ap
OwotICAgIG5vZGUtPnNldExpbmUobGluZSk7Ci0gICAgbm9kZS0+c2V0TGVmdChiYXNlKTsKLSAg
ICBub2RlLT5zZXRSaWdodChpbmRleCk7Ci0KLSAgICAvLyBjYWxsZXIgc2hvdWxkIHNldCB0aGUg
dHlwZQotCi0gICAgcmV0dXJuIG5vZGU7Ci19Ci0KLS8vCi0vLyBBZGQgb25lIG5vZGUgYXMgdGhl
IHBhcmVudCBvZiBhbm90aGVyIHRoYXQgaXQgb3BlcmF0ZXMgb24uCi0vLwotLy8gUmV0dXJucyB0
aGUgYWRkZWQgbm9kZS4KLS8vCi1USW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZFVuYXJ5
TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBjaGlsZE5vZGUsIGNvbnN0IFRTb3VyY2VM
b2MmIGxpbmUsIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCi17Ci0gICAgVEludGVybVVuYXJ5
KiBub2RlOwotICAgIFRJbnRlcm1UeXBlZCogY2hpbGQgPSBjaGlsZE5vZGUtPmdldEFzVHlwZWQo
KTsKLQotICAgIGlmIChjaGlsZCA9PSAwKSB7Ci0gICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2Fn
ZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbGluZSwgIkJhZCB0eXBlIGluIEFkZFVuYXJ5TWF0aCIp
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAg
IGNhc2UgRU9wTG9naWNhbE5vdDoKLSAgICAgICAgICAgIGlmIChjaGlsZC0+Z2V0VHlwZSgpLmdl
dEJhc2ljVHlwZSgpICE9IEVidEJvb2wgfHwgY2hpbGQtPmdldFR5cGUoKS5pc01hdHJpeCgpIHx8
IGNoaWxkLT5nZXRUeXBlKCkuaXNBcnJheSgpIHx8IGNoaWxkLT5nZXRUeXBlKCkuaXNWZWN0b3Io
KSkgewotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50OgotICAgICAgICBjYXNl
IEVPcFByZUluY3JlbWVudDoKLSAgICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OgotICAgICAg
ICBjYXNlIEVPcFByZURlY3JlbWVudDoKLSAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZToKLSAgICAg
ICAgICAgIGlmIChjaGlsZC0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCB8
fCBjaGlsZC0+Z2V0VHlwZSgpLmlzQXJyYXkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsK
LSAgICAgICAgZGVmYXVsdDogYnJlYWs7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBEbyB3ZSBu
ZWVkIHRvIHByb21vdGUgdGhlIG9wZXJhbmQ/Ci0gICAgLy8KLSAgICAvLyBOb3RlOiBJbXBsaWNp
dCBwcm9tb3Rpb25zIHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBsYW5ndWFnZS4KLSAgICAvLwotICAg
IFRCYXNpY1R5cGUgbmV3VHlwZSA9IEVidFZvaWQ7Ci0gICAgc3dpdGNoIChvcCkgewotICAgICAg
ICBjYXNlIEVPcENvbnN0cnVjdEludDogICBuZXdUeXBlID0gRWJ0SW50OyAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6ICBuZXdUeXBlID0gRWJ0Qm9vbDsgIGJyZWFrOwot
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OiBuZXdUeXBlID0gRWJ0RmxvYXQ7IGJyZWFr
OwotICAgICAgICBkZWZhdWx0OiBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAobmV3VHlwZSAhPSBF
YnRWb2lkKSB7Ci0gICAgICAgIGNoaWxkID0gYWRkQ29udmVyc2lvbihvcCwgVFR5cGUobmV3VHlw
ZSwgY2hpbGQtPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksCi0gICAgICAgICAgICBjaGls
ZC0+Z2V0Tm9taW5hbFNpemUoKSwKLSAgICAgICAgICAgIGNoaWxkLT5pc01hdHJpeCgpLAotICAg
ICAgICAgICAgY2hpbGQtPmlzQXJyYXkoKSksCi0gICAgICAgICAgICBjaGlsZCk7Ci0gICAgICAg
IGlmIChjaGlsZCA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8K
LSAgICAvLyBGb3IgY29uc3RydWN0b3JzLCB3ZSBhcmUgbm93IGRvbmUsIGl0J3MgYWxsIGluIHRo
ZSBjb252ZXJzaW9uLgotICAgIC8vCi0gICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIEVP
cENvbnN0cnVjdEludDoKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29sOgotICAgICAgICBj
YXNlIEVPcENvbnN0cnVjdEZsb2F0OgotICAgICAgICAgICAgcmV0dXJuIGNoaWxkOwotICAgICAg
ICBkZWZhdWx0OiBicmVhazsKLSAgICB9Ci0KLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqY2hp
bGRUZW1wQ29uc3RhbnQgPSAwOwotICAgIGlmIChjaGlsZC0+Z2V0QXNDb25zdGFudFVuaW9uKCkp
Ci0gICAgICAgIGNoaWxkVGVtcENvbnN0YW50ID0gY2hpbGQtPmdldEFzQ29uc3RhbnRVbmlvbigp
OwotCi0gICAgLy8KLSAgICAvLyBNYWtlIGEgbmV3IG5vZGUgZm9yIHRoZSBvcGVyYXRvci4KLSAg
ICAvLwotICAgIG5vZGUgPSBuZXcgVEludGVybVVuYXJ5KG9wKTsKLSAgICBub2RlLT5zZXRMaW5l
KGxpbmUpOwotICAgIG5vZGUtPnNldE9wZXJhbmQoY2hpbGQpOwotCi0gICAgaWYgKCEgbm9kZS0+
cHJvbW90ZShpbmZvU2luaykpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKGNoaWxkVGVt
cENvbnN0YW50KSAgewotICAgICAgICBUSW50ZXJtVHlwZWQqIG5ld0NoaWxkID0gY2hpbGRUZW1w
Q29uc3RhbnQtPmZvbGQob3AsIDAsIGluZm9TaW5rKTsKLQotICAgICAgICBpZiAobmV3Q2hpbGQp
Ci0gICAgICAgICAgICByZXR1cm4gbmV3Q2hpbGQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5vZGU7
Ci19Ci0KLS8vCi0vLyBUaGlzIGlzIHRoZSBzYWZlIHdheSB0byBjaGFuZ2UgdGhlIG9wZXJhdG9y
IG9uIGFuIGFnZ3JlZ2F0ZSwgYXMgaXQKLS8vIGRvZXMgbG90cyBvZiBlcnJvciBjaGVja2luZyBh
bmQgZml4aW5nLiAgRXNwZWNpYWxseSBmb3IgZXN0YWJsaXNoaW5nCi0vLyBhIGZ1bmN0aW9uIGNh
bGwncyBvcGVyYXRpb24gb24gaXQncyBzZXQgb2YgcGFyYW1ldGVycy4gIFNlcXVlbmNlcwotLy8g
b2YgaW5zdHJ1Y3Rpb25zIGFyZSBhbHNvIGFnZ3JlZ2F0ZXMsIGJ1dCB0aGV5IGp1c3QgZGlyZW5j
dGx5IHNldAotLy8gdGhlaXIgb3BlcmF0b3IgdG8gRU9wU2VxdWVuY2UuCi0vLwotLy8gUmV0dXJu
cyBhbiBhZ2dyZWdhdGUgbm9kZSwgd2hpY2ggY291bGQgYmUgdGhlIG9uZSBwYXNzZWQgaW4gaWYK
LS8vIGl0IHdhcyBhbHJlYWR5IGFuIGFnZ3JlZ2F0ZSBidXQgbm8gb3BlcmF0b3Igd2FzIHNldC4K
LS8vCi1USW50ZXJtQWdncmVnYXRlKiBUSW50ZXJtZWRpYXRlOjpzZXRBZ2dyZWdhdGVPcGVyYXRv
cihUSW50ZXJtTm9kZSogbm9kZSwgVE9wZXJhdG9yIG9wLCBjb25zdCBUU291cmNlTG9jJiBsaW5l
KQotewotICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ05vZGU7Ci0KLSAgICAvLwotICAgIC8vIE1h
a2Ugc3VyZSB3ZSBoYXZlIGFuIGFnZ3JlZ2F0ZS4gIElmIG5vdCB0dXJuIGl0IGludG8gb25lLgot
ICAgIC8vCi0gICAgaWYgKG5vZGUpIHsKLSAgICAgICAgYWdnTm9kZSA9IG5vZGUtPmdldEFzQWdn
cmVnYXRlKCk7Ci0gICAgICAgIGlmIChhZ2dOb2RlID09IDAgfHwgYWdnTm9kZS0+Z2V0T3AoKSAh
PSBFT3BOdWxsKSB7Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gTWFrZSBhbiBhZ2dy
ZWdhdGUgY29udGFpbmluZyB0aGlzIG5vZGUuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAg
YWdnTm9kZSA9IG5ldyBUSW50ZXJtQWdncmVnYXRlKCk7Ci0gICAgICAgICAgICBhZ2dOb2RlLT5n
ZXRTZXF1ZW5jZSgpLnB1c2hfYmFjayhub2RlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAg
ICAgICBhZ2dOb2RlID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGUoKTsKLQotICAgIC8vCi0gICAgLy8g
U2V0IHRoZSBvcGVyYXRvci4KLSAgICAvLwotICAgIGFnZ05vZGUtPnNldE9wKG9wKTsKLSAgICBh
Z2dOb2RlLT5zZXRMaW5lKGxpbmUpOwotCi0gICAgcmV0dXJuIGFnZ05vZGU7Ci19Ci0KLS8vCi0v
LyBDb252ZXJ0IG9uZSB0eXBlIHRvIGFub3RoZXIuCi0vLwotLy8gUmV0dXJucyB0aGUgbm9kZSBy
ZXByZXNlbnRpbmcgdGhlIGNvbnZlcnNpb24sIHdoaWNoIGNvdWxkIGJlIHRoZSBzYW1lCi0vLyBu
b2RlIHBhc3NlZCBpbiBpZiBubyBjb252ZXJzaW9uIHdhcyBuZWVkZWQuCi0vLwotLy8gUmV0dXJu
IDAgaWYgYSBjb252ZXJzaW9uIGNhbid0IGJlIGRvbmUuCi0vLwotVEludGVybVR5cGVkKiBUSW50
ZXJtZWRpYXRlOjphZGRDb252ZXJzaW9uKFRPcGVyYXRvciBvcCwgY29uc3QgVFR5cGUmIHR5cGUs
IFRJbnRlcm1UeXBlZCogbm9kZSkKLXsKLSAgICAvLwotICAgIC8vIERvZXMgdGhlIGJhc2UgdHlw
ZSBhbGxvdyBvcGVyYXRpb24/Ci0gICAgLy8KLSAgICBzd2l0Y2ggKG5vZGUtPmdldEJhc2ljVHlw
ZSgpKSB7Ci0gICAgICAgIGNhc2UgRWJ0Vm9pZDoKLSAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6
Ci0gICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgZGVmYXVsdDogYnJlYWs7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBPdGhlcndpc2Us
IGlmIHR5cGVzIGFyZSBpZGVudGljYWwsIG5vIHByb2JsZW0KLSAgICAvLwotICAgIGlmICh0eXBl
ID09IG5vZGUtPmdldFR5cGUoKSkKLSAgICAgICAgcmV0dXJuIG5vZGU7Ci0KLSAgICAvLwotICAg
IC8vIElmIG9uZSdzIGEgc3RydWN0dXJlLCB0aGVuIG5vIGNvbnZlcnNpb25zLgotICAgIC8vCi0g
ICAgaWYgKHR5cGUuZ2V0U3RydWN0KCkgfHwgbm9kZS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vCi0gICAgLy8gSWYgb25lJ3MgYW4gYXJyYXksIHRo
ZW4gbm8gY29udmVyc2lvbnMuCi0gICAgLy8KLSAgICBpZiAodHlwZS5pc0FycmF5KCkgfHwgbm9k
ZS0+Z2V0VHlwZSgpLmlzQXJyYXkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBUQmFzaWNU
eXBlIHByb21vdGVUbzsKLQotICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgLy8KLSAgICAgICAg
Ly8gRXhwbGljaXQgY29udmVyc2lvbnMKLSAgICAgICAgLy8KLSAgICAgICAgY2FzZSBFT3BDb25z
dHJ1Y3RCb29sOgotICAgICAgICAgICAgcHJvbW90ZVRvID0gRWJ0Qm9vbDsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OgotICAgICAgICAgICAgcHJv
bW90ZVRvID0gRWJ0RmxvYXQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BD
b25zdHJ1Y3RJbnQ6Ci0gICAgICAgICAgICBwcm9tb3RlVG8gPSBFYnRJbnQ7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAv
LyBpbXBsaWNpdCBjb252ZXJzaW9ucyB3ZXJlIHJlbW92ZWQgZnJvbSB0aGUgbGFuZ3VhZ2UuCi0g
ICAgICAgICAgICAvLwotICAgICAgICAgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgIT0gbm9k
ZS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwot
ICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFNpemUgYW5kIHN0cnVjdHVyZSBjb3VsZCBz
dGlsbCBkaWZmZXIsIGJ1dCB0aGF0J3MKLSAgICAgICAgICAgIC8vIGhhbmRsZWQgYnkgb3BlcmF0
b3IgcHJvbW90aW9uLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIHJldHVybiBub2RlOwot
ICAgIH0KLQotICAgIGlmIChub2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKSkgewotCi0gICAgICAg
IHJldHVybiAocHJvbW90ZUNvbnN0YW50VW5pb24ocHJvbW90ZVRvLCBub2RlLT5nZXRBc0NvbnN0
YW50VW5pb24oKSkpOwotICAgIH0gZWxzZSB7Ci0KLSAgICAgICAgLy8KLSAgICAgICAgLy8gQWRk
IGEgbmV3IG5ld05vZGUgZm9yIHRoZSBjb252ZXJzaW9uLgotICAgICAgICAvLwotICAgICAgICBU
SW50ZXJtVW5hcnkqIG5ld05vZGUgPSAwOwotCi0gICAgICAgIFRPcGVyYXRvciBuZXdPcCA9IEVP
cE51bGw7Ci0gICAgICAgIHN3aXRjaCAocHJvbW90ZVRvKSB7Ci0gICAgICAgICAgICBjYXNlIEVi
dEZsb2F0OgotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgbmV3T3AgPSBFT3BDb252SW50VG9G
bG9hdDsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6ICBuZXdPcCA9
IEVPcENvbnZCb29sVG9GbG9hdDsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeElu
dGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIkJhZCBwcm9tb3Rpb24gbm9kZSIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFYnRCb29sOgotICAgICAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBFYnRJbnQ6ICAgbmV3T3AgPSBFT3BDb252SW50VG9Cb29sOyAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OiBuZXdPcCA9IEVPcENvbnZGbG9hdFRvQm9vbDsg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdl
dExpbmUoKSwgIkJhZCBwcm9tb3Rpb24gbm9kZSIpOwotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRC
YXNpY1R5cGUoKSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6ICAgbmV3T3Ag
PSBFT3BDb252Qm9vbFRvSW50OyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0
RmxvYXQ6ICBuZXdPcCA9IEVPcENvbnZGbG9hdFRvSW50OyBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVz
c2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQmFkIHByb21vdGlv
biBub2RlIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwg
bm9kZS0+Z2V0TGluZSgpLCAiQmFkIHByb21vdGlvbiB0eXBlIik7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICBUVHlwZSB0eXBlKHByb21vdGVUbywgbm9k
ZS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgbm9kZS0+Z2V0Tm9taW5hbFNpemUoKSwg
bm9kZS0+aXNNYXRyaXgoKSwgbm9kZS0+aXNBcnJheSgpKTsKLSAgICAgICAgbmV3Tm9kZSA9IG5l
dyBUSW50ZXJtVW5hcnkobmV3T3AsIHR5cGUpOwotICAgICAgICBuZXdOb2RlLT5zZXRMaW5lKG5v
ZGUtPmdldExpbmUoKSk7Ci0gICAgICAgIG5ld05vZGUtPnNldE9wZXJhbmQobm9kZSk7Ci0KLSAg
ICAgICAgcmV0dXJuIG5ld05vZGU7Ci0gICAgfQotfQotCi0vLwotLy8gU2FmZSB3YXkgdG8gY29t
YmluZSB0d28gbm9kZXMgaW50byBhbiBhZ2dyZWdhdGUuICBXb3JrcyB3aXRoIG51bGwgcG9pbnRl
cnMsCi0vLyBhIG5vZGUgdGhhdCdzIG5vdCBhIGFnZ3JlZ2F0ZSB5ZXQsIGV0Yy4KLS8vCi0vLyBS
ZXR1cm5zIHRoZSByZXN1bHRpbmcgYWdncmVnYXRlLCB1bmxlc3MgMCB3YXMgcGFzc2VkIGluIGZv
cgotLy8gYm90aCBleGlzdGluZyBub2Rlcy4KLS8vCi1USW50ZXJtQWdncmVnYXRlKiBUSW50ZXJt
ZWRpYXRlOjpncm93QWdncmVnYXRlKFRJbnRlcm1Ob2RlKiBsZWZ0LCBUSW50ZXJtTm9kZSogcmln
aHQsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCi17Ci0gICAgaWYgKGxlZnQgPT0gMCAmJiByaWdo
dCA9PSAwKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ05v
ZGUgPSAwOwotICAgIGlmIChsZWZ0KQotICAgICAgICBhZ2dOb2RlID0gbGVmdC0+Z2V0QXNBZ2dy
ZWdhdGUoKTsKLSAgICBpZiAoIWFnZ05vZGUgfHwgYWdnTm9kZS0+Z2V0T3AoKSAhPSBFT3BOdWxs
KSB7Ci0gICAgICAgIGFnZ05vZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKLSAgICAgICAgaWYg
KGxlZnQpCi0gICAgICAgICAgICBhZ2dOb2RlLT5nZXRTZXF1ZW5jZSgpLnB1c2hfYmFjayhsZWZ0
KTsKLSAgICB9Ci0KLSAgICBpZiAocmlnaHQpCi0gICAgICAgIGFnZ05vZGUtPmdldFNlcXVlbmNl
KCkucHVzaF9iYWNrKHJpZ2h0KTsKLQotICAgIGFnZ05vZGUtPnNldExpbmUobGluZSk7Ci0KLSAg
ICByZXR1cm4gYWdnTm9kZTsKLX0KLQotLy8KLS8vIFR1cm4gYW4gZXhpc3Rpbmcgbm9kZSBpbnRv
IGFuIGFnZ3JlZ2F0ZS4KLS8vCi0vLyBSZXR1cm5zIGFuIGFnZ3JlZ2F0ZSwgdW5sZXNzIDAgd2Fz
IHBhc3NlZCBpbiBmb3IgdGhlIGV4aXN0aW5nIG5vZGUuCi0vLwotVEludGVybUFnZ3JlZ2F0ZSog
VEludGVybWVkaWF0ZTo6bWFrZUFnZ3JlZ2F0ZShUSW50ZXJtTm9kZSogbm9kZSwgY29uc3QgVFNv
dXJjZUxvYyYgbGluZSkKLXsKLSAgICBpZiAobm9kZSA9PSAwKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ05vZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsK
LSAgICBhZ2dOb2RlLT5nZXRTZXF1ZW5jZSgpLnB1c2hfYmFjayhub2RlKTsKLSAgICBhZ2dOb2Rl
LT5zZXRMaW5lKGxpbmUpOwotCi0gICAgcmV0dXJuIGFnZ05vZGU7Ci19Ci0KLS8vCi0vLyBGb3Ig
ImlmIiB0ZXN0IG5vZGVzLiAgVGhlcmUgYXJlIHRocmVlIGNoaWxkcmVuOyBhIGNvbmRpdGlvbiwK
LS8vIGEgdHJ1ZSBwYXRoLCBhbmQgYSBmYWxzZSBwYXRoLiAgVGhlIHR3byBwYXRocyBhcmUgaW4g
dGhlCi0vLyBub2RlUGFpci4KLS8vCi0vLyBSZXR1cm5zIHRoZSBzZWxlY3Rpb24gbm9kZSBjcmVh
dGVkLgotLy8KLVRJbnRlcm1Ob2RlKiBUSW50ZXJtZWRpYXRlOjphZGRTZWxlY3Rpb24oVEludGVy
bVR5cGVkKiBjb25kLCBUSW50ZXJtTm9kZVBhaXIgbm9kZVBhaXIsIGNvbnN0IFRTb3VyY2VMb2Mm
IGxpbmUpCi17Ci0gICAgLy8KLSAgICAvLyBGb3IgY29tcGlsZSB0aW1lIGNvbnN0YW50IHNlbGVj
dGlvbnMsIHBydW5lIHRoZSBjb2RlIGFuZAotICAgIC8vIHRlc3Qgbm93LgotICAgIC8vCi0KLSAg
ICBpZiAoY29uZC0+Z2V0QXNUeXBlZCgpICYmIGNvbmQtPmdldEFzVHlwZWQoKS0+Z2V0QXNDb25z
dGFudFVuaW9uKCkpIHsKLSAgICAgICAgaWYgKGNvbmQtPmdldEFzQ29uc3RhbnRVbmlvbigpLT5n
ZXRCQ29uc3QoMCkgPT0gdHJ1ZSkKLSAgICAgICAgICAgIHJldHVybiBub2RlUGFpci5ub2RlMSA/
IHNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5vZGVQYWlyLm5vZGUxLCBFT3BTZXF1ZW5jZSwgbm9kZVBh
aXIubm9kZTEtPmdldExpbmUoKSkgOiBOVUxMOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBy
ZXR1cm4gbm9kZVBhaXIubm9kZTIgPyBzZXRBZ2dyZWdhdGVPcGVyYXRvcihub2RlUGFpci5ub2Rl
MiwgRU9wU2VxdWVuY2UsIG5vZGVQYWlyLm5vZGUyLT5nZXRMaW5lKCkpIDogTlVMTDsKLSAgICB9
Ci0KLSAgICBUSW50ZXJtU2VsZWN0aW9uKiBub2RlID0gbmV3IFRJbnRlcm1TZWxlY3Rpb24oY29u
ZCwgbm9kZVBhaXIubm9kZTEsIG5vZGVQYWlyLm5vZGUyKTsKLSAgICBub2RlLT5zZXRMaW5lKGxp
bmUpOwotCi0gICAgcmV0dXJuIG5vZGU7Ci19Ci0KLQotVEludGVybVR5cGVkKiBUSW50ZXJtZWRp
YXRlOjphZGRDb21tYShUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIGNv
bnN0IFRTb3VyY2VMb2MmIGxpbmUpCi17Ci0gICAgaWYgKGxlZnQtPmdldFR5cGUoKS5nZXRRdWFs
aWZpZXIoKSA9PSBFdnFDb25zdCAmJiByaWdodC0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09
IEV2cUNvbnN0KSB7Ci0gICAgICAgIHJldHVybiByaWdodDsKLSAgICB9IGVsc2UgewotICAgICAg
ICBUSW50ZXJtVHlwZWQgKmNvbW1hQWdncmVnYXRlID0gZ3Jvd0FnZ3JlZ2F0ZShsZWZ0LCByaWdo
dCwgbGluZSk7Ci0gICAgICAgIGNvbW1hQWdncmVnYXRlLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRP
cChFT3BDb21tYSk7Ci0gICAgICAgIGNvbW1hQWdncmVnYXRlLT5zZXRUeXBlKHJpZ2h0LT5nZXRU
eXBlKCkpOwotICAgICAgICBjb21tYUFnZ3JlZ2F0ZS0+Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVh
bGlmaWVyKEV2cVRlbXBvcmFyeSk7Ci0gICAgICAgIHJldHVybiBjb21tYUFnZ3JlZ2F0ZTsKLSAg
ICB9Ci19Ci0KLS8vCi0vLyBGb3IgIj86IiB0ZXN0IG5vZGVzLiAgVGhlcmUgYXJlIHRocmVlIGNo
aWxkcmVuOyBhIGNvbmRpdGlvbiwKLS8vIGEgdHJ1ZSBwYXRoLCBhbmQgYSBmYWxzZSBwYXRoLiAg
VGhlIHR3byBwYXRocyBhcmUgc3BlY2lmaWVkCi0vLyBhcyBzZXBhcmF0ZSBwYXJhbWV0ZXJzLgot
Ly8KLS8vIFJldHVybnMgdGhlIHNlbGVjdGlvbiBub2RlIGNyZWF0ZWQsIG9yIDAgaWYgb25lIGNv
dWxkIG5vdCBiZS4KLS8vCi1USW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZFNlbGVjdGlv
bihUSW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1UeXBlZCogdHJ1ZUJsb2NrLCBUSW50ZXJtVHlw
ZWQqIGZhbHNlQmxvY2ssIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCi17Ci0gICAgLy8KLSAgICAv
LyBHZXQgY29tcGF0aWJsZSB0eXBlcy4KLSAgICAvLwotICAgIFRJbnRlcm1UeXBlZCogY2hpbGQg
PSBhZGRDb252ZXJzaW9uKEVPcFNlcXVlbmNlLCB0cnVlQmxvY2stPmdldFR5cGUoKSwgZmFsc2VC
bG9jayk7Ci0gICAgaWYgKGNoaWxkKQotICAgICAgICBmYWxzZUJsb2NrID0gY2hpbGQ7Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIGNoaWxkID0gYWRkQ29udmVyc2lvbihFT3BTZXF1ZW5jZSwgZmFsc2VC
bG9jay0+Z2V0VHlwZSgpLCB0cnVlQmxvY2spOwotICAgICAgICBpZiAoY2hpbGQpCi0gICAgICAg
ICAgICB0cnVlQmxvY2sgPSBjaGlsZDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBTZWUgaWYgYWxsIHRoZSBvcGVyYW5kcyBhcmUg
Y29uc3RhbnQsIHRoZW4gZm9sZCBpdCBvdGhlcndpc2Ugbm90LgotICAgIC8vCi0KLSAgICBpZiAo
Y29uZC0+Z2V0QXNDb25zdGFudFVuaW9uKCkgJiYgdHJ1ZUJsb2NrLT5nZXRBc0NvbnN0YW50VW5p
b24oKSAmJiBmYWxzZUJsb2NrLT5nZXRBc0NvbnN0YW50VW5pb24oKSkgewotICAgICAgICBpZiAo
Y29uZC0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldEJDb25zdCgwKSkKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlQmxvY2s7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBmYWxzZUJs
b2NrOwotICAgIH0KLQotICAgIC8vCi0gICAgLy8gTWFrZSBhIHNlbGVjdGlvbiBub2RlLgotICAg
IC8vCi0gICAgVEludGVybVNlbGVjdGlvbiogbm9kZSA9IG5ldyBUSW50ZXJtU2VsZWN0aW9uKGNv
bmQsIHRydWVCbG9jaywgZmFsc2VCbG9jaywgdHJ1ZUJsb2NrLT5nZXRUeXBlKCkpOwotICAgIG5v
ZGUtPmdldFR5cGVQb2ludGVyKCktPnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwotICAgIG5v
ZGUtPnNldExpbmUobGluZSk7Ci0KLSAgICByZXR1cm4gbm9kZTsKLX0KLQotLy8KLS8vIENvbnN0
YW50IHRlcm1pbmFsIG5vZGVzLiAgSGFzIGEgdW5pb24gdGhhdCBjb250YWlucyBib29sLCBmbG9h
dCBvciBpbnQgY29uc3RhbnRzCi0vLwotLy8gUmV0dXJucyB0aGUgY29uc3RhbnQgdW5pb24gbm9k
ZSBjcmVhdGVkLgotLy8KLQotVEludGVybUNvbnN0YW50VW5pb24qIFRJbnRlcm1lZGlhdGU6OmFk
ZENvbnN0YW50VW5pb24oQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheVBvaW50ZXIsIGNvbnN0IFRU
eXBlJiB0LCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQotewotICAgIFRJbnRlcm1Db25zdGFudFVu
aW9uKiBub2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHVuaW9uQXJyYXlQb2ludGVyLCB0
KTsKLSAgICBub2RlLT5zZXRMaW5lKGxpbmUpOwotCi0gICAgcmV0dXJuIG5vZGU7Ci19Ci0KLVRJ
bnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkU3dpenpsZShUVmVjdG9yRmllbGRzJiBmaWVs
ZHMsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCi17Ci0KLSAgICBUSW50ZXJtQWdncmVnYXRlKiBu
b2RlID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGUoRU9wU2VxdWVuY2UpOwotCi0gICAgbm9kZS0+c2V0
TGluZShsaW5lKTsKLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogY29uc3RJbnROb2RlOwotICAg
IFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2VWZWN0b3IgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOwot
ICAgIENvbnN0YW50VW5pb24qIHVuaW9uQXJyYXk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IGZpZWxkcy5udW07IGkrKykgewotICAgICAgICB1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bMV07Ci0gICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChmaWVsZHMub2Zmc2V0c1tpXSk7
Ci0gICAgICAgIGNvbnN0SW50Tm9kZSA9IGFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5
cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgbGluZSk7Ci0gICAgICAgIHNlcXVl
bmNlVmVjdG9yLnB1c2hfYmFjayhjb25zdEludE5vZGUpOwotICAgIH0KLQotICAgIHJldHVybiBu
b2RlOwotfQotCi0vLwotLy8gQ3JlYXRlIGxvb3Agbm9kZXMuCi0vLwotVEludGVybU5vZGUqIFRJ
bnRlcm1lZGlhdGU6OmFkZExvb3AoVExvb3BUeXBlIHR5cGUsIFRJbnRlcm1Ob2RlKiBpbml0LCBU
SW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1UeXBlZCogZXhwciwgVEludGVybU5vZGUqIGJvZHks
IGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCi17Ci0gICAgVEludGVybU5vZGUqIG5vZGUgPSBuZXcg
VEludGVybUxvb3AodHlwZSwgaW5pdCwgY29uZCwgZXhwciwgYm9keSk7Ci0gICAgbm9kZS0+c2V0
TGluZShsaW5lKTsKLQotICAgIHJldHVybiBub2RlOwotfQotCi0vLwotLy8gQWRkIGJyYW5jaGVz
LgotLy8KLVRJbnRlcm1CcmFuY2gqIFRJbnRlcm1lZGlhdGU6OmFkZEJyYW5jaChUT3BlcmF0b3Ig
YnJhbmNoT3AsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCi17Ci0gICAgcmV0dXJuIGFkZEJyYW5j
aChicmFuY2hPcCwgMCwgbGluZSk7Ci19Ci0KLVRJbnRlcm1CcmFuY2gqIFRJbnRlcm1lZGlhdGU6
OmFkZEJyYW5jaChUT3BlcmF0b3IgYnJhbmNoT3AsIFRJbnRlcm1UeXBlZCogZXhwcmVzc2lvbiwg
Y29uc3QgVFNvdXJjZUxvYyYgbGluZSkKLXsKLSAgICBUSW50ZXJtQnJhbmNoKiBub2RlID0gbmV3
IFRJbnRlcm1CcmFuY2goYnJhbmNoT3AsIGV4cHJlc3Npb24pOwotICAgIG5vZGUtPnNldExpbmUo
bGluZSk7Ci0KLSAgICByZXR1cm4gbm9kZTsKLX0KLQotLy8KLS8vIFRoaXMgaXMgdG8gYmUgZXhl
Y3V0ZWQgb25jZSB0aGUgZmluYWwgcm9vdCBpcyBwdXQgb24gdG9wIGJ5IHRoZSBwYXJzaW5nCi0v
LyBwcm9jZXNzLgotLy8KLWJvb2wgVEludGVybWVkaWF0ZTo6cG9zdFByb2Nlc3MoVEludGVybU5v
ZGUqIHJvb3QpCi17Ci0gICAgaWYgKHJvb3QgPT0gMCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICAvLwotICAgIC8vIEZpcnN0LCBmaW5pc2ggb2ZmIHRoZSB0b3AgbGV2ZWwgc2VxdWVuY2Us
IGlmIGFueQotICAgIC8vCi0gICAgVEludGVybUFnZ3JlZ2F0ZSogYWdnUm9vdCA9IHJvb3QtPmdl
dEFzQWdncmVnYXRlKCk7Ci0gICAgaWYgKGFnZ1Jvb3QgJiYgYWdnUm9vdC0+Z2V0T3AoKSA9PSBF
T3BOdWxsKQotICAgICAgICBhZ2dSb290LT5zZXRPcChFT3BTZXF1ZW5jZSk7Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotLy8KLS8vIFRoaXMgZGVsZXRlcyB0aGUgdHJlZS4KLS8vCi12b2lkIFRJ
bnRlcm1lZGlhdGU6OnJlbW92ZShUSW50ZXJtTm9kZSogcm9vdCkKLXsKLSAgICBpZiAocm9vdCkK
LSAgICAgICAgUmVtb3ZlQWxsVHJlZU5vZGVzKHJvb3QpOwotfQotCi0vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwotLy8g
TWVtYmVyIGZ1bmN0aW9ucyBvZiB0aGUgbm9kZXMgdXNlZCBmb3IgYnVpbGRpbmcgdGhlIHRyZWUu
Ci0vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwotCi0jZGVmaW5lIFJFUExBQ0VfSUZfSVMobm9kZSwgdHlwZSwgb3JpZ2lu
YWwsIHJlcGxhY2VtZW50KSBcCi0gICAgaWYgKG5vZGUgPT0gb3JpZ2luYWwpIHsgXAotICAgICAg
ICBub2RlID0gc3RhdGljX2Nhc3Q8dHlwZSAqPihyZXBsYWNlbWVudCk7IFwKLSAgICAgICAgcmV0
dXJuIHRydWU7IFwKLSAgICB9Ci0KLWJvb2wgVEludGVybUxvb3A6OnJlcGxhY2VDaGlsZE5vZGUo
Ci0gICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFjZW1lbnQpCi17
Ci0gICAgUkVQTEFDRV9JRl9JUyhpbml0LCBUSW50ZXJtTm9kZSwgb3JpZ2luYWwsIHJlcGxhY2Vt
ZW50KTsKLSAgICBSRVBMQUNFX0lGX0lTKGNvbmQsIFRJbnRlcm1UeXBlZCwgb3JpZ2luYWwsIHJl
cGxhY2VtZW50KTsKLSAgICBSRVBMQUNFX0lGX0lTKGV4cHIsIFRJbnRlcm1UeXBlZCwgb3JpZ2lu
YWwsIHJlcGxhY2VtZW50KTsKLSAgICBSRVBMQUNFX0lGX0lTKGJvZHksIFRJbnRlcm1Ob2RlLCBv
cmlnaW5hbCwgcmVwbGFjZW1lbnQpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBUSW50
ZXJtQnJhbmNoOjpyZXBsYWNlQ2hpbGROb2RlKAotICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwg
VEludGVybU5vZGUgKnJlcGxhY2VtZW50KQotewotICAgIFJFUExBQ0VfSUZfSVMoZXhwcmVzc2lv
biwgVEludGVybVR5cGVkLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotYm9vbCBUSW50ZXJtQmluYXJ5OjpyZXBsYWNlQ2hpbGROb2RlKAotICAgIFRJbnRl
cm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KQotewotICAgIFJFUExB
Q0VfSUZfSVMobGVmdCwgVEludGVybVR5cGVkLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpOwotICAg
IFJFUExBQ0VfSUZfSVMocmlnaHQsIFRJbnRlcm1UeXBlZCwgb3JpZ2luYWwsIHJlcGxhY2VtZW50
KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVEludGVybVVuYXJ5OjpyZXBsYWNlQ2hp
bGROb2RlKAotICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2Vt
ZW50KQotewotICAgIFJFUExBQ0VfSUZfSVMob3BlcmFuZCwgVEludGVybVR5cGVkLCBvcmlnaW5h
bCwgcmVwbGFjZW1lbnQpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBUSW50ZXJtQWdn
cmVnYXRlOjpyZXBsYWNlQ2hpbGROb2RlKAotICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVElu
dGVybU5vZGUgKnJlcGxhY2VtZW50KQotewotICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCBz
ZXF1ZW5jZS5zaXplKCk7ICsraWkpCi0gICAgewotICAgICAgICBSRVBMQUNFX0lGX0lTKHNlcXVl
bmNlW2lpXSwgVEludGVybU5vZGUsIG9yaWdpbmFsLCByZXBsYWNlbWVudCk7Ci0gICAgfQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBUSW50ZXJtU2VsZWN0aW9uOjpyZXBsYWNlQ2hpbGRO
b2RlKAotICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50
KQotewotICAgIFJFUExBQ0VfSUZfSVMoY29uZGl0aW9uLCBUSW50ZXJtVHlwZWQsIG9yaWdpbmFs
LCByZXBsYWNlbWVudCk7Ci0gICAgUkVQTEFDRV9JRl9JUyh0cnVlQmxvY2ssIFRJbnRlcm1Ob2Rl
LCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpOwotICAgIFJFUExBQ0VfSUZfSVMoZmFsc2VCbG9jaywg
VEludGVybU5vZGUsIG9yaWdpbmFsLCByZXBsYWNlbWVudCk7Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi0vLwotLy8gU2F5IHdoZXRoZXIgb3Igbm90IGFuIG9wZXJhdGlvbiBub2RlIGNoYW5nZXMg
dGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuCi0vLwotYm9vbCBUSW50ZXJtT3BlcmF0b3I6OmlzQXNz
aWdubWVudCgpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIEVPcFBv
c3RJbmNyZW1lbnQ6Ci0gICAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDoKLSAgICAgICAgY2Fz
ZSBFT3BQcmVJbmNyZW1lbnQ6Ci0gICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OgotICAgICAg
ICBjYXNlIEVPcEFzc2lnbjoKLSAgICAgICAgY2FzZSBFT3BBZGRBc3NpZ246Ci0gICAgICAgIGNh
c2UgRU9wU3ViQXNzaWduOgotICAgICAgICBjYXNlIEVPcE11bEFzc2lnbjoKLSAgICAgICAgY2Fz
ZSBFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjoKLSAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1l
c1NjYWxhckFzc2lnbjoKLSAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbjoK
LSAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjoKLSAgICAgICAgY2FzZSBF
T3BEaXZBc3NpZ246Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLS8vCi0vLyByZXR1cm5zIHRy
dWUgaWYgdGhlIG9wZXJhdG9yIGlzIGZvciBvbmUgb2YgdGhlIGNvbnN0cnVjdG9ycwotLy8KLWJv
b2wgVEludGVybU9wZXJhdG9yOjppc0NvbnN0cnVjdG9yKCkgY29uc3QKLXsKLSAgICBzd2l0Y2gg
KG9wKSB7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMjoKLSAgICAgICAgY2FzZSBFT3BD
b25zdHJ1Y3RWZWMzOgotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzQ6Ci0gICAgICAgIGNh
c2UgRU9wQ29uc3RydWN0TWF0MjoKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQzOgotICAg
ICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0Rmxv
YXQ6Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6Ci0gICAgICAgIGNhc2UgRU9wQ29u
c3RydWN0SVZlYzM6Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzQ6Ci0gICAgICAgIGNh
c2UgRU9wQ29uc3RydWN0SW50OgotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMyOgotICAg
ICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMzOgotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJW
ZWM0OgotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6Ci0gICAgICAgIGNhc2UgRU9wQ29u
c3RydWN0U3RydWN0OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi0vLwotLy8gTWFrZSBzdXJl
IHRoZSB0eXBlIG9mIGEgdW5hcnkgb3BlcmF0b3IgaXMgYXBwcm9wcmlhdGUgZm9yIGl0cwotLy8g
Y29tYmluYXRpb24gb2Ygb3BlcmF0aW9uIGFuZCBvcGVyYW5kIHR5cGUuCi0vLwotLy8gUmV0dXJu
cyBmYWxzZSBpbiBub3RoaW5nIG1ha2VzIHNlbnNlLgotLy8KLWJvb2wgVEludGVybVVuYXJ5Ojpw
cm9tb3RlKFRJbmZvU2luayYpCi17Ci0gICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIEVP
cExvZ2ljYWxOb3Q6Ci0gICAgICAgICAgICBpZiAob3BlcmFuZC0+Z2V0QmFzaWNUeXBlKCkgIT0g
RWJ0Qm9vbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZToKLSAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVt
ZW50OgotICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6Ci0gICAgICAgIGNhc2UgRU9wUHJl
SW5jcmVtZW50OgotICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDoKLSAgICAgICAgICAgIGlm
IChvcGVyYW5kLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRCb29sKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAvLyBvcGVyYXRv
cnMgZm9yIGJ1aWx0LWlucyBhcmUgYWxyZWFkeSB0eXBlIGNoZWNrZWQgYWdhaW5zdCB0aGVpciBw
cm90b3R5cGUKLSAgICAgICAgY2FzZSBFT3BBbnk6Ci0gICAgICAgIGNhc2UgRU9wQWxsOgotICAg
ICAgICBjYXNlIEVPcFZlY3RvckxvZ2ljYWxOb3Q6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaWYgKG9wZXJhbmQtPmdldEJhc2ljVHlw
ZSgpICE9IEVidEZsb2F0KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBzZXRUeXBlKG9wZXJhbmQtPmdldFR5cGUoKSk7Ci0gICAgdHlwZS5zZXRRdWFsaWZpZXIo
RXZxVGVtcG9yYXJ5KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLwotLy8gRXN0YWJsaXNo
ZXMgdGhlIHR5cGUgb2YgdGhlIHJlc3VsdGFudCBvcGVyYXRpb24sIGFzIHdlbGwgYXMKLS8vIG1h
a2VzIHRoZSBvcGVyYXRvciB0aGUgY29ycmVjdCBvbmUgZm9yIHRoZSBvcGVyYW5kcy4KLS8vCi0v
LyBSZXR1cm5zIGZhbHNlIGlmIG9wZXJhdG9yIGNhbid0IHdvcmsgb24gb3BlcmFuZHMuCi0vLwot
Ym9vbCBUSW50ZXJtQmluYXJ5Ojpwcm9tb3RlKFRJbmZvU2luayYgaW5mb1NpbmspCi17Ci0gICAg
Ly8gVGhpcyBmdW5jdGlvbiBvbmx5IGhhbmRsZXMgc2NhbGFycywgdmVjdG9ycywgYW5kIG1hdHJp
Y2VzLgotICAgIGlmIChsZWZ0LT5pc0FycmF5KCkgfHwgcmlnaHQtPmlzQXJyYXkoKSkgewotICAg
ICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUo
KSwgIkludmFsaWQgb3BlcmF0aW9uIGZvciBhcnJheXMiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIC8vIEdMU0wgRVMgMi4wIGRvZXMgbm90IHN1cHBvcnQgaW1wbGljaXQg
dHlwZSBjYXN0aW5nLgotICAgIC8vIFNvIHRoZSBiYXNpYyB0eXBlIHNob3VsZCBhbHdheXMgbWF0
Y2guCi0gICAgaWYgKGxlZnQtPmdldEJhc2ljVHlwZSgpICE9IHJpZ2h0LT5nZXRCYXNpY1R5cGUo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8KLSAgICAvLyBCYXNlIGFzc3VtcHRp
b246ICBqdXN0IG1ha2UgdGhlIHR5cGUgdGhlIHNhbWUgYXMgdGhlIGxlZnQKLSAgICAvLyBvcGVy
YW5kLiAgVGhlbiBvbmx5IGRldmlhdGlvbnMgZnJvbSB0aGlzIG5lZWQgYmUgY29kZWQuCi0gICAg
Ly8KLSAgICBzZXRUeXBlKGxlZnQtPmdldFR5cGUoKSk7Ci0KLSAgICAvLyBUaGUgcmVzdWx0IGdl
dHMgcHJvbW90ZWQgdG8gdGhlIGhpZ2hlc3QgcHJlY2lzaW9uLgotICAgIFRQcmVjaXNpb24gaGln
aGVyUHJlY2lzaW9uID0gR2V0SGlnaGVyUHJlY2lzaW9uKGxlZnQtPmdldFByZWNpc2lvbigpLCBy
aWdodC0+Z2V0UHJlY2lzaW9uKCkpOwotICAgIGdldFR5cGVQb2ludGVyKCktPnNldFByZWNpc2lv
bihoaWdoZXJQcmVjaXNpb24pOwotCi0gICAgLy8gQmluYXJ5IG9wZXJhdGlvbnMgcmVzdWx0cyBp
biB0ZW1wb3JhcnkgdmFyaWFibGVzIHVubGVzcyBib3RoCi0gICAgLy8gb3BlcmFuZHMgYXJlIGNv
bnN0LgotICAgIGlmIChsZWZ0LT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFDb25zdCB8fCByaWdodC0+
Z2V0UXVhbGlmaWVyKCkgIT0gRXZxQ29uc3QpIHsKLSAgICAgICAgZ2V0VHlwZVBvaW50ZXIoKS0+
c2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7Ci0gICAgfQotCi0gICAgaW50IHNpemUgPSBzdGQ6
Om1heChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpLCByaWdodC0+Z2V0Tm9taW5hbFNpemUoKSk7Ci0K
LSAgICAvLwotICAgIC8vIEFsbCBzY2FsYXJzLiBDb2RlIGFmdGVyIHRoaXMgdGVzdCBhc3N1bWVz
IHRoaXMgY2FzZSBpcyByZW1vdmVkIQotICAgIC8vCi0gICAgaWYgKHNpemUgPT0gMSkgewotICAg
ICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gUHJvbW90
ZSB0byBjb25kaXRpb25hbAotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGNhc2UgRU9wRXF1
YWw6Ci0gICAgICAgICAgICBjYXNlIEVPcE5vdEVxdWFsOgotICAgICAgICAgICAgY2FzZSBFT3BM
ZXNzVGhhbjoKLSAgICAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46Ci0gICAgICAgICAgICBj
YXNlIEVPcExlc3NUaGFuRXF1YWw6Ci0gICAgICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1
YWw6Ci0gICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQp
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgLy8KLSAgICAgICAgICAg
IC8vIEFuZCBhbmQgT3Igb3BlcmF0ZSBvbiBjb25kaXRpb25hbHMKLSAgICAgICAgICAgIC8vCi0g
ICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6Ci0gICAgICAgICAgICBjYXNlIEVPcExvZ2lj
YWxPcjoKLSAgICAgICAgICAgICAgICAvLyBCb3RoIG9wZXJhbmRzIG11c3QgYmUgb2YgdHlwZSBi
b29sLgotICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29s
IHx8IHJpZ2h0LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShFYnRCb29sLCBF
YnBVbmRlZmluZWQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSByZWFjaCBoZXJlLCBhdCBsZWFzdCBvbmUgb2Yg
dGhlIG9wZXJhbmRzIGlzIHZlY3RvciBvciBtYXRyaXguCi0gICAgLy8gVGhlIG90aGVyIG9wZXJh
bmQgY291bGQgYmUgYSBzY2FsYXIsIHZlY3Rvciwgb3IgbWF0cml4LgotICAgIC8vIEFyZSB0aGUg
c2l6ZXMgY29tcGF0aWJsZT8KLSAgICAvLwotICAgIGlmIChsZWZ0LT5nZXROb21pbmFsU2l6ZSgp
ICE9IHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpKSB7Ci0gICAgICAgIC8vIElmIHRoZSBub21pbmFs
IHNpemUgb2Ygb3BlcmFuZHMgZG8gbm90IG1hdGNoOgotICAgICAgICAvLyBPbmUgb2YgdGhlbSBt
dXN0IGJlIHNjYWxhci4KLSAgICAgICAgaWYgKGxlZnQtPmdldE5vbWluYWxTaXplKCkgIT0gMSAm
JiByaWdodC0+Z2V0Tm9taW5hbFNpemUoKSAhPSAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAvLyBPcGVyYXRvciBjYW5ub3QgYmUgb2YgdHlwZSBwdXJlIGFzc2lnbm1lbnQu
Ci0gICAgICAgIGlmIChvcCA9PSBFT3BBc3NpZ24gfHwgb3AgPT0gRU9wSW5pdGlhbGl6ZSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIENhbiB0aGVz
ZSB0d28gb3BlcmFuZHMgYmUgY29tYmluZWQ/Ci0gICAgLy8KLSAgICBUQmFzaWNUeXBlIGJhc2lj
VHlwZSA9IGxlZnQtPmdldEJhc2ljVHlwZSgpOwotICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAg
Y2FzZSBFT3BNdWw6Ci0gICAgICAgICAgICBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQt
PmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobGVmdC0+aXNWZWN0b3IoKSkKLSAg
ICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc01hdHJpeDsKLSAgICAgICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc1NjYWxh
cjsKLSAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclBy
ZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCB0cnVlKSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5pc01hdHJpeCgpICYmICFyaWdodC0+aXNNYXRy
aXgoKSkgewotICAgICAgICAgICAgICAgIGlmIChyaWdodC0+aXNWZWN0b3IoKSkgewotICAgICAg
ICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzVmVjdG9yOwotICAgICAgICAgICAgICAg
ICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3Jh
cnksIHNpemUsIGZhbHNlKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc1NjYWxhcjsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4
KCkpIHsKLSAgICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzTWF0cml4OwotICAgICAg
ICAgICAgfSBlbHNlIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkp
IHsKLSAgICAgICAgICAgICAgICBpZiAobGVmdC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNWZWN0
b3IoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBsZWF2ZSBhcyBjb21wb25lbnQgcHJvZHVj
dAotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNWZWN0b3IoKSB8fCByaWdodC0+
aXNWZWN0b3IoKSkgewotICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcFZlY3RvclRpbWVzU2Nh
bGFyOwotICAgICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVy
UHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUsIGZhbHNlKSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1l
c3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIk1pc3NpbmcgZWxzZXMiKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BNdWxBc3NpZ246Ci0gICAgICAgICAgICBpZiAoIWxl
ZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgICAgICBp
ZiAobGVmdC0+aXNWZWN0b3IoKSkKLSAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JU
aW1lc01hdHJpeEFzc2lnbjsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKLSAgICAgICAg
ICAgICAgICBpZiAocmlnaHQtPmlzVmVjdG9yKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IG9wID0gRU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ247Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc01hdHJpeCgp
KSB7Ci0gICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJp
eCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQtPmlz
VmVjdG9yKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gbGVhdmUgYXMgY29tcG9uZW50IHBy
b2R1Y3QKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzVmVjdG9yKCkgfHwgcmln
aHQtPmlzVmVjdG9yKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCEgbGVmdC0+aXNWZWN0
b3IoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
ICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjsKLSAgICAgICAgICAgICAg
ICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9y
YXJ5LCBzaXplLCBmYWxzZSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5h
bEVycm9yLCBnZXRMaW5lKCksICJNaXNzaW5nIGVsc2VzIik7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
Y2FzZSBFT3BBc3NpZ246Ci0gICAgICAgIGNhc2UgRU9wSW5pdGlhbGl6ZToKLSAgICAgICAgY2Fz
ZSBFT3BBZGQ6Ci0gICAgICAgIGNhc2UgRU9wU3ViOgotICAgICAgICBjYXNlIEVPcERpdjoKLSAg
ICAgICAgY2FzZSBFT3BBZGRBc3NpZ246Ci0gICAgICAgIGNhc2UgRU9wU3ViQXNzaWduOgotICAg
ICAgICBjYXNlIEVPcERpdkFzc2lnbjoKLSAgICAgICAgICAgIGlmICgobGVmdC0+aXNNYXRyaXgo
KSAmJiByaWdodC0+aXNWZWN0b3IoKSkgfHwKLSAgICAgICAgICAgICAgICAobGVmdC0+aXNWZWN0
b3IoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwg
RXZxVGVtcG9yYXJ5LCBzaXplLCBsZWZ0LT5pc01hdHJpeCgpIHx8IHJpZ2h0LT5pc01hdHJpeCgp
KSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEVPcEVxdWFsOgotICAgICAg
ICBjYXNlIEVPcE5vdEVxdWFsOgotICAgICAgICBjYXNlIEVPcExlc3NUaGFuOgotICAgICAgICBj
YXNlIEVPcEdyZWF0ZXJUaGFuOgotICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6Ci0gICAg
ICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKLSAgICAgICAgICAgIGlmICgobGVmdC0+aXNN
YXRyaXgoKSAmJiByaWdodC0+aXNWZWN0b3IoKSkgfHwKLSAgICAgICAgICAgICAgICAobGVmdC0+
aXNWZWN0b3IoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgc2V0VHlwZShUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENv
bXBhcmVTdHJ1Y3QoY29uc3QgVFR5cGUmIGxlZnROb2RlVHlwZSwgQ29uc3RhbnRVbmlvbiogcmln
aHRVbmlvbkFycmF5LCBDb25zdGFudFVuaW9uKiBsZWZ0VW5pb25BcnJheSkKLXsKLSAgICBjb25z
dCBURmllbGRMaXN0JiBmaWVsZHMgPSBsZWZ0Tm9kZVR5cGUuZ2V0U3RydWN0KCktPmZpZWxkcygp
OwotCi0gICAgc2l6ZV90IHN0cnVjdFNpemUgPSBmaWVsZHMuc2l6ZSgpOwotICAgIHNpemVfdCBp
bmRleCA9IDA7Ci0KLSAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHN0cnVjdFNpemU7IGorKykg
ewotICAgICAgICBzaXplX3Qgc2l6ZSA9IGZpZWxkc1tqXS0+dHlwZSgpLT5nZXRPYmplY3RTaXpl
KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAg
ICAgICBpZiAoZmllbGRzW2pdLT50eXBlKCktPmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkg
ewotICAgICAgICAgICAgICAgIGlmICghQ29tcGFyZVN0cnVjdHVyZSgqKGZpZWxkc1tqXS0+dHlw
ZSgpKSwgJnJpZ2h0VW5pb25BcnJheVtpbmRleF0sICZsZWZ0VW5pb25BcnJheVtpbmRleF0pKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIGlmIChsZWZ0VW5pb25BcnJheVtpbmRleF0gIT0gcmlnaHRVbmlvbkFy
cmF5W2luZGV4XSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgICAgIGluZGV4Kys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ29tcGFyZVN0cnVjdHVyZShjb25zdCBUVHlwZSYgbGVmdE5v
ZGVUeXBlLCBDb25zdGFudFVuaW9uKiByaWdodFVuaW9uQXJyYXksIENvbnN0YW50VW5pb24qIGxl
ZnRVbmlvbkFycmF5KQotewotICAgIGlmIChsZWZ0Tm9kZVR5cGUuaXNBcnJheSgpKSB7Ci0gICAg
ICAgIFRUeXBlIHR5cGVXaXRob3V0QXJyYXluZXNzID0gbGVmdE5vZGVUeXBlOwotICAgICAgICB0
eXBlV2l0aG91dEFycmF5bmVzcy5jbGVhckFycmF5bmVzcygpOwotCi0gICAgICAgIHNpemVfdCBh
cnJheVNpemUgPSBsZWZ0Tm9kZVR5cGUuZ2V0QXJyYXlTaXplKCk7Ci0KLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBhcnJheVNpemU7ICsraSkgewotICAgICAgICAgICAgc2l6ZV90IG9m
ZnNldCA9IHR5cGVXaXRob3V0QXJyYXluZXNzLmdldE9iamVjdFNpemUoKSAqIGk7Ci0gICAgICAg
ICAgICBpZiAoIUNvbXBhcmVTdHJ1Y3QodHlwZVdpdGhvdXRBcnJheW5lc3MsICZyaWdodFVuaW9u
QXJyYXlbb2Zmc2V0XSwgJmxlZnRVbmlvbkFycmF5W29mZnNldF0pKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gQ29t
cGFyZVN0cnVjdChsZWZ0Tm9kZVR5cGUsIHJpZ2h0VW5pb25BcnJheSwgbGVmdFVuaW9uQXJyYXkp
OwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vCi0vLyBUaGUgZm9sZCBmdW5jdGlvbnMgc2Vl
IGlmIGFuIG9wZXJhdGlvbiBvbiBhIGNvbnN0YW50IGNhbiBiZSBkb25lIGluIHBsYWNlLAotLy8g
d2l0aG91dCBnZW5lcmF0aW5nIHJ1bi10aW1lIGNvZGUuCi0vLwotLy8gUmV0dXJucyB0aGUgbm9k
ZSB0byBrZWVwIHVzaW5nLCB3aGljaCBtYXkgb3IgbWF5IG5vdCBiZSB0aGUgbm9kZSBwYXNzZWQg
aW4uCi0vLwotCi1USW50ZXJtVHlwZWQqIFRJbnRlcm1Db25zdGFudFVuaW9uOjpmb2xkKFRPcGVy
YXRvciBvcCwgVEludGVybVR5cGVkKiBjb25zdGFudE5vZGUsIFRJbmZvU2luayYgaW5mb1Npbmsp
Ci17Ci0gICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IGdldFVuaW9uQXJyYXlQb2ludGVy
KCk7Ci0gICAgc2l6ZV90IG9iamVjdFNpemUgPSBnZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOwot
Ci0gICAgaWYgKGNvbnN0YW50Tm9kZSkgeyAgLy8gYmluYXJ5IG9wZXJhdGlvbnMKLSAgICAgICAg
VEludGVybUNvbnN0YW50VW5pb24gKm5vZGUgPSBjb25zdGFudE5vZGUtPmdldEFzQ29uc3RhbnRV
bmlvbigpOwotICAgICAgICBDb25zdGFudFVuaW9uICpyaWdodFVuaW9uQXJyYXkgPSBub2RlLT5n
ZXRVbmlvbkFycmF5UG9pbnRlcigpOwotICAgICAgICBUVHlwZSByZXR1cm5UeXBlID0gZ2V0VHlw
ZSgpOwotCi0gICAgICAgIC8vIGZvciBhIGNhc2UgbGlrZSBmbG9hdCBmID0gMS4yICsgdmVjNCgy
LDMsNCw1KTsKLSAgICAgICAgaWYgKGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNp
emUoKSA9PSAxICYmIG9iamVjdFNpemUgPiAxKSB7Ci0gICAgICAgICAgICByaWdodFVuaW9uQXJy
YXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgKytpKQotICAgICAgICAgICAgICAgIHJpZ2h0VW5p
b25BcnJheVtpXSA9ICpub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOwotICAgICAgICAgICAg
cmV0dXJuVHlwZSA9IGdldFR5cGUoKTsKLSAgICAgICAgfSBlbHNlIGlmIChjb25zdGFudE5vZGUt
PmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCkgPiAxICYmIG9iamVjdFNpemUgPT0gMSkgewotICAg
ICAgICAgICAgLy8gZm9yIGEgY2FzZSBsaWtlIGZsb2F0IGYgPSB2ZWM0KDIsMyw0LDUpICsgMS4y
OwotICAgICAgICAgICAgdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW2NvbnN0YW50Tm9k
ZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKV07Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsgKytpKQot
ICAgICAgICAgICAgICAgIHVuaW9uQXJyYXlbaV0gPSAqZ2V0VW5pb25BcnJheVBvaW50ZXIoKTsK
LSAgICAgICAgICAgIHJldHVyblR5cGUgPSBub2RlLT5nZXRUeXBlKCk7Ci0gICAgICAgICAgICBv
YmplY3RTaXplID0gY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0QXJyYXkgPSAwOwotICAg
ICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqdGVtcE5vZGU7Ci0KLSAgICAgICAgYm9vbCBib29s
Tm9kZUZsYWcgPSBmYWxzZTsKLSAgICAgICAgc3dpdGNoKG9wKSB7Ci0gICAgICAgICAgICBjYXNl
IEVPcEFkZDoKLSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uW29iamVjdFNpemVdOwotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAot
ICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkr
KykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJh
eVtpXSArIHJpZ2h0VW5pb25BcnJheVtpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVPcFN1YjoKLSAgICAgICAgICAgICAgICB0
ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwotICAgICAgICAg
ICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAg
IHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSAtIHJpZ2h0VW5pb25BcnJheVtpXTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAg
IGNhc2UgRU9wTXVsOgotICAgICAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjoKLSAg
ICAgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXI6Ci0gICAgICAgICAgICAgICAgdGVt
cENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAgICAg
ICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAgICB0
ZW1wQ29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gKiByaWdodFVuaW9uQXJyYXlbaV07Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBFT3BNYXRyaXhUaW1lc01hdHJpeDoKLSAgICAgICAgICAgICAgICBpZiAoZ2V0VHlwZSgpLmdl
dEJhc2ljVHlwZSgpICE9IEVidEZsb2F0IHx8IG5vZGUtPmdldEJhc2ljVHlwZSgpICE9IEVidEZs
b2F0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4
SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiQ29uc3RhbnQgRm9sZGluZyBjYW5ub3QgYmUgZG9u
ZSBmb3IgbWF0cml4IG11bHRpcGx5Iik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAK
LSAgICAgICAgICAgICAgICAgICAgaW50IHNpemUgPSBnZXROb21pbmFsU2l6ZSgpOwotICAgICAg
ICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW3NpemUqc2l6
ZV07Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHNpemU7IHJv
dysrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2x1bW4gPSAwOyBjb2x1
bW4gPCBzaXplOyBjb2x1bW4rKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBD
b25zdEFycmF5W3NpemUgKiBjb2x1bW4gKyByb3ddLnNldEZDb25zdCgwLjBmKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtzaXplICogY29sdW1u
ICsgcm93XS5zZXRGQ29uc3QodGVtcENvbnN0QXJyYXlbc2l6ZSAqIGNvbHVtbiArIHJvd10uZ2V0
RkNvbnN0KCkgKyB1bmlvbkFycmF5W2kgKiBzaXplICsgcm93XS5nZXRGQ29uc3QoKSAqIChyaWdo
dFVuaW9uQXJyYXlbY29sdW1uICogc2l6ZSArIGldLmdldEZDb25zdCgpKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBFT3BEaXY6Ci0gICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkg
PSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAgICAgICAgICB7Ly8gc3Vw
cG9ydCBNU1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBvYmplY3RTaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0
VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEVidEZsb2F0OgotICAg
ICAgICAgICAgICAgIGlmIChyaWdodFVuaW9uQXJyYXlbaV0gPT0gMC4wZikgewotICAgICAgICAg
ICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeFdhcm5pbmcsIGdldExpbmUo
KSwgIkRpdmlkZSBieSB6ZXJvIGVycm9yIGR1cmluZyBjb25zdGFudCBmb2xkaW5nIik7Ci0gICAg
ICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCh1bmlvbkFycmF5W2ld
LmdldEZDb25zdCgpIDwgMCA/IC1GTFRfTUFYIDogRkxUX01BWCk7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCh1
bmlvbkFycmF5W2ldLmdldEZDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdldEZDb25zdCgp
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBFYnRJbnQ6Ci0g
ICAgICAgICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtpXSA9PSAwKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgZ2V0TGluZSgp
LCAiRGl2aWRlIGJ5IHplcm8gZXJyb3IgZHVyaW5nIGNvbnN0YW50IGZvbGRpbmciKTsKLSAgICAg
ICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0SUNvbnN0KElOVF9NQVgpOwotICAg
ICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtp
XS5zZXRJQ29uc3QodW5pb25BcnJheVtpXS5nZXRJQ29uc3QoKSAvIHJpZ2h0VW5pb25BcnJheVtp
XS5nZXRJQ29uc3QoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJu
YWxFcnJvciwgZ2V0TGluZSgpLCAiQ29uc3RhbnQgZm9sZGluZyBjYW5ub3QgYmUgZG9uZSBmb3Ig
XCIvXCIiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1ZlY3RvcjoK
LSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQpIHsK
LSAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5h
bEVycm9yLCBnZXRMaW5lKCksICJDb25zdGFudCBGb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciBt
YXRyaXggdGltZXMgdmVjdG9yIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uW2dldE5vbWluYWxTaXplKCldOwotCi0gICAgICAgICAgICAgICAgey8vIHN1cHBv
cnQgTVNWQysrNi4wCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHNpemUgPSBnZXROb21p
bmFsU2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KDAuMGYpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzaXplOyBqKyspIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QodGVtcENvbnN0QXJyYXlbaV0u
Z2V0RkNvbnN0KCkgKyAoKHVuaW9uQXJyYXlbaipzaXplICsgaV0uZ2V0RkNvbnN0KCkpICogcmln
aHRVbmlvbkFycmF5W2pdLmdldEZDb25zdCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwg
bm9kZS0+Z2V0VHlwZSgpKTsKLSAgICAgICAgICAgICAgICB0ZW1wTm9kZS0+c2V0TGluZShnZXRM
aW5lKCkpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOwotCi0gICAgICAgICAg
ICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4OgotICAgICAgICAgICAgICAgIGlmIChnZXRUeXBl
KCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5m
b1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJDb25z
dGFudCBGb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciB2ZWN0b3IgdGltZXMgbWF0cml4Iik7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bZ2V0Tm9taW5hbFNp
emUoKV07Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCi0gICAgICAgICAg
ICAgICAgICAgIGZvciAoaW50IHNpemUgPSBnZXROb21pbmFsU2l6ZSgpLCBpID0gMDsgaSA8IHNp
emU7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0
RkNvbnN0KDAuMGYpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGog
PCBzaXplOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJh
eVtpXS5zZXRGQ29uc3QodGVtcENvbnN0QXJyYXlbaV0uZ2V0RkNvbnN0KCkgKyAoKHVuaW9uQXJy
YXlbal0uZ2V0RkNvbnN0KCkpICogcmlnaHRVbmlvbkFycmF5W2kqc2l6ZSArIGpdLmdldEZDb25z
dCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAg
IGNhc2UgRU9wTG9naWNhbEFuZDogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9yIHBvc3NpYmxl
IGZ1dHVyZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkKLSAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwotICAg
ICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSAmJiByaWdodFVuaW9uQXJy
YXlbaV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9yIHBv
c3NpYmxlIGZ1dHVyZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkKLSAgICAg
ICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVd
OwotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSB8fCByaWdodFVu
aW9uQXJyYXlbaV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6Ci0gICAgICAgICAgICAgICAgdGVtcENv
bnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAgICAgICAg
ICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAgICBzd2l0
Y2ggKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBFYnRCb29s
OiB0ZW1wQ29uc3RBcnJheVtpXS5zZXRCQ29uc3QoKHVuaW9uQXJyYXlbaV0gPT0gcmlnaHRVbmlv
bkFycmF5W2ldKSA/IGZhbHNlIDogdHJ1ZSk7IGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDog
YXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAg
ICAgY2FzZSBFT3BMZXNzVGhhbjoKLSAgICAgICAgICAgICAgICBhc3NlcnQob2JqZWN0U2l6ZSA9
PSAxKTsKLSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
WzFdOwotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoKnVuaW9uQXJy
YXkgPCAqcmlnaHRVbmlvbkFycmF5KTsKLSAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gVFR5
cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgotICAgICAgICAgICAgICAgIGFz
c2VydChvYmplY3RTaXplID09IDEpOwotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0g
bmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNl
dEJDb25zdCgqdW5pb25BcnJheSA+ICpyaWdodFVuaW9uQXJyYXkpOwotICAgICAgICAgICAgICAg
IHJldHVyblR5cGUgPSBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydChvYmplY3RTaXpl
ID09IDEpOwotICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uIGNvbnN0YW50OwotICAg
ICAgICAgICAgICAgICAgICBjb25zdGFudC5zZXRCQ29uc3QoKnVuaW9uQXJyYXkgPiAqcmlnaHRV
bmlvbkFycmF5KTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29u
c3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJD
b25zdCghY29uc3RhbnQuZ2V0QkNvbnN0KCkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm5U
eXBlID0gVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgRU9w
R3JlYXRlclRoYW5FcXVhbDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IGFzc2VydChvYmplY3RTaXplID09IDEpOwotICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVu
aW9uIGNvbnN0YW50OwotICAgICAgICAgICAgICAgICAgICBjb25zdGFudC5zZXRCQ29uc3QoKnVu
aW9uQXJyYXkgPCAqcmlnaHRVbmlvbkFycmF5KTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENv
bnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgICAgICAgICAgdGVt
cENvbnN0QXJyYXktPnNldEJDb25zdCghY29uc3RhbnQuZ2V0QkNvbnN0KCkpOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm5UeXBlID0gVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFD
b25zdCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgY2FzZSBFT3BFcXVhbDoKLSAgICAgICAgICAgICAgICBpZiAoZ2V0VHlwZSgp
LmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
IUNvbXBhcmVTdHJ1Y3R1cmUobm9kZS0+Z2V0VHlwZSgpLCBub2RlLT5nZXRVbmlvbkFycmF5UG9p
bnRlcigpLCB1bmlvbkFycmF5KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxh
ZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh1bmlvbkFycmF5W2ldICE9IHJpZ2h0VW5pb25BcnJheVtpXSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7ICAvLyBicmVhayBvdXQgb2YgZm9yIGxvb3AKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bMV07Ci0gICAgICAgICAgICAgICAgaWYgKCFib29sTm9kZUZsYWcpIHsKLSAgICAgICAgICAg
ICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCh0cnVlKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBDb25z
dEFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5
LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSk7Ci0gICAgICAgICAgICAg
ICAgdGVtcE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKLQotICAgICAgICAgICAgICAgIHJldHVy
biB0ZW1wTm9kZTsKLQotICAgICAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKLSAgICAgICAgICAg
ICAgICBpZiAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoQ29tcGFyZVN0cnVjdHVyZShub2RlLT5nZXRUeXBlKCksIG5vZGUt
PmdldFVuaW9uQXJyYXlQb2ludGVyKCksIHVuaW9uQXJyYXkpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbE5vZGVGbGFnID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaW9uQXJyYXlbaV0gPT0gcmlnaHRVbmlv
bkFycmF5W2ldKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbE5vZGVGbGFnID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgIC8vIGJyZWFrIG91dCBv
ZiBmb3IgbG9vcAotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkg
PSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgICAgICBpZiAoIWJvb2xOb2RlRmxh
ZykgewotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KHRydWUp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgdGVtcE5vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5p
b24odGVtcENvbnN0QXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3Qp
KTsKLSAgICAgICAgICAgICAgICB0ZW1wTm9kZS0+c2V0TGluZShnZXRMaW5lKCkpOwotCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOwotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwg
Z2V0TGluZSgpLCAiSW52YWxpZCBvcGVyYXRvciBmb3IgY29uc3RhbnQgZm9sZGluZyIpOwotICAg
ICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIHRlbXBOb2RlID0gbmV3
IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCByZXR1cm5UeXBlKTsKLSAgICAg
ICAgdGVtcE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKLQotICAgICAgICByZXR1cm4gdGVtcE5v
ZGU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gRG8gdW5hcnkgb3BlcmF0
aW9ucwotICAgICAgICAvLwotICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbmV3Tm9kZSA9
IDA7Ci0gICAgICAgIENvbnN0YW50VW5pb24qIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50
VW5pb25bb2JqZWN0U2l6ZV07Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0
U2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICBzd2l0Y2gob3ApIHsKLSAgICAgICAgICAgICAgICBj
YXNlIEVPcE5lZ2F0aXZlOgotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5n
ZXRCYXNpY1R5cGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDog
dGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KC11bmlvbkFycmF5W2ldLmdldEZDb25zdCgpKTsg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDogICB0ZW1wQ29uc3RB
cnJheVtpXS5zZXRJQ29uc3QoLXVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkpOyBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCks
ICJVbmFyeSBvcGVyYXRpb24gbm90IGZvbGRlZCBpbnRvIGNvbnN0YW50Iik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90
OiAvLyB0aGlzIGNvZGUgaXMgd3JpdHRlbiBmb3IgcG9zc2libGUgZnV0dXJlIHVzZSwgd2lsbCBu
b3QgZ2V0IGV4ZWN1dGVkIGN1cnJlbnRseQotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdl
dFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBF
YnRCb29sOiAgdGVtcENvbnN0QXJyYXlbaV0uc2V0QkNvbnN0KCF1bmlvbkFycmF5W2ldLmdldEJD
b25zdCgpKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJu
YWxFcnJvciwgZ2V0TGluZSgpLCAiVW5hcnkgb3BlcmF0aW9uIG5vdCBmb2xkZWQgaW50byBjb25z
dGFudCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIG5ld05vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24odGVt
cENvbnN0QXJyYXksIGdldFR5cGUoKSk7Ci0gICAgICAgIG5ld05vZGUtPnNldExpbmUoZ2V0TGlu
ZSgpKTsKLSAgICAgICAgcmV0dXJuIG5ld05vZGU7Ci0gICAgfQotfQotCi1USW50ZXJtVHlwZWQq
IFRJbnRlcm1lZGlhdGU6OnByb21vdGVDb25zdGFudFVuaW9uKFRCYXNpY1R5cGUgcHJvbW90ZVRv
LCBUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSkKLXsKLSAgICBzaXplX3Qgc2l6ZSA9IG5vZGUt
PmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7Ci0KLSAgICBDb25zdGFudFVuaW9uICpsZWZ0VW5p
b25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW3NpemVdOwotCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgaW50IGluZGV4ID0gc3RhdGljX2Nhc3Q8aW50
PihpKTsKLSAgICAgICAgc3dpdGNoIChwcm9tb3RlVG8pIHsKLSAgICAgICAgICAgIGNhc2UgRWJ0
RmxvYXQ6Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRUeXBlKCkuZ2V0QmFzaWNU
eXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRGQ29uc3Qoc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG5vZGUtPmdldElDb25zdChpbmRleCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRGQ29uc3Qoc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vZGUt
PmdldEJDb25zdChpbmRleCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgotICAgICAgICAgICAgICAgICAgICAgICAg
bGVmdFVuaW9uQXJyYXlbaV0uc2V0RkNvbnN0KHN0YXRpY19jYXN0PGZsb2F0Pihub2RlLT5nZXRG
Q29uc3QoaW5kZXgpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmlu
Zm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQ2Fubm90
IHByb21vdGUiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRWJ0SW50
OgotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OgotICAgICAgICAgICAgICAgICAg
ICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0SUNvbnN0KHN0YXRpY19jYXN0PGludD4obm9kZS0+
Z2V0SUNvbnN0KGluZGV4KSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGxl
ZnRVbmlvbkFycmF5W2ldLnNldElDb25zdChzdGF0aWNfY2FzdDxpbnQ+KG5vZGUtPmdldEJDb25z
dChpbmRleCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICBjYXNlIEVidEZsb2F0OgotICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9u
QXJyYXlbaV0uc2V0SUNvbnN0KHN0YXRpY19jYXN0PGludD4obm9kZS0+Z2V0RkNvbnN0KGluZGV4
KSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2Uo
RVByZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIkNhbm5vdCBwcm9tb3RlIik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVidEJvb2w6Ci0gICAgICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0
VW5pb25BcnJheVtpXS5zZXRCQ29uc3Qobm9kZS0+Z2V0SUNvbnN0KGluZGV4KSAhPSAwKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEVi
dEJvb2w6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRCQ29u
c3Qobm9kZS0+Z2V0QkNvbnN0KGluZGV4KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldEJDb25zdChub2RlLT5nZXRGQ29uc3QoaW5kZXgp
ICE9IDAuMGYpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1l
c3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIkNhbm5vdCBwcm9t
b3RlIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBu
b2RlLT5nZXRMaW5lKCksICJJbmNvcnJlY3QgZGF0YSB0eXBlIGZvdW5kIik7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgIH0KLQotICAgIGNvbnN0IFRUeXBlJiB0
ID0gbm9kZS0+Z2V0VHlwZSgpOwotCi0gICAgcmV0dXJuIGFkZENvbnN0YW50VW5pb24obGVmdFVu
aW9uQXJyYXksIFRUeXBlKHByb21vdGVUbywgdC5nZXRQcmVjaXNpb24oKSwgdC5nZXRRdWFsaWZp
ZXIoKSwgdC5nZXROb21pbmFsU2l6ZSgpLCB0LmlzTWF0cml4KCksIHQuaXNBcnJheSgpKSwgbm9k
ZS0+Z2V0TGluZSgpKTsKLX0KLQotLy8gc3RhdGljCi1UU3RyaW5nIFRJbnRlcm1UcmF2ZXJzZXI6
Omhhc2goY29uc3QgVFN0cmluZyYgbmFtZSwgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24p
Ci17Ci0gICAgaWYgKGhhc2hGdW5jdGlvbiA9PSBOVUxMIHx8IG5hbWUuZW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIG5hbWU7Ci0gICAga2hyb25vc191aW50NjRfdCBudW1iZXIgPSAoKmhhc2hGdW5j
dGlvbikobmFtZS5jX3N0cigpLCBuYW1lLmxlbmd0aCgpKTsKLSAgICBUU3RyaW5nU3RyZWFtIHN0
cmVhbTsKLSAgICBzdHJlYW0gPDwgSEFTSEVEX05BTUVfUFJFRklYIDw8IHN0ZDo6aGV4IDw8IG51
bWJlcjsKLSAgICBUU3RyaW5nIGhhc2hlZE5hbWUgPSBzdHJlYW0uc3RyKCk7Ci0gICAgcmV0dXJu
IGhhc2hlZE5hbWU7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvTU1hcC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL01N
YXAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTMwODY3MTUxNGNjNjNlOGU3MGEw
M2UzODY4YjU3OTUxYjg1ZTk4Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvTU1hcC5oCisr
KyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRl
ZiBfTU1BUF9JTkNMVURFRF8KLSNkZWZpbmUgX01NQVBfSU5DTFVERURfCi0KLS8vCi0vLyBFbmNh
cHN1bGF0ZSBtZW1vcnkgbWFwcGVkIGZpbGVzCi0vLwotCi1jbGFzcyBUTU1hcCB7Ci1wdWJsaWM6
Ci0gICAgVE1NYXAoY29uc3QgY2hhciogZmlsZU5hbWUpIDogCi0gICAgICAgIGZTaXplKC0xKSwg
Ly8gLTEgaXMgdGhlIGVycm9yIHZhbHVlIHJldHVybmVkIGJ5IEdldEZpbGVTaXplKCkKLSAgICAg
ICAgZnAoTlVMTCksCi0gICAgICAgIGZCdWZmKDApICAgLy8gMCBpcyB0aGUgZXJyb3IgdmFsdWUg
cmV0dXJuZWQgYnkgTWFwVmlld09mRmlsZSgpCi0gICAgewotICAgICAgICBpZiAoKGZwID0gZm9w
ZW4oZmlsZU5hbWUsICJyIikpID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGNoYXIgYyA9IGdldGMoZnApOwotICAgICAgICBmU2l6ZSA9IDA7Ci0gICAgICAgIHdoaWxlIChj
ICE9IEVPRikgewotICAgICAgICAgICAgZlNpemUrKzsKLSAgICAgICAgICAgIGMgPSBnZXRjKGZw
KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoYyA9PSBFT0YpCi0gICAgICAgICAgICBmU2l6ZSsr
OwotICAgICAgICByZXdpbmQoZnApOwotICAgICAgICBmQnVmZiA9IChjaGFyKiltYWxsb2Moc2l6
ZW9mKGNoYXIpICogZlNpemUpOwotICAgICAgICBpbnQgY291bnQgPSAwOwotICAgICAgICBjID0g
Z2V0YyhmcCk7Ci0gICAgICAgIHdoaWxlIChjICE9IEVPRikgewotICAgICAgICAgICAgZkJ1ZmZb
Y291bnQrK10gPSBjOwotICAgICAgICAgICAgYyA9IGdldGMoZnApOwotICAgICAgICB9Ci0gICAg
ICAgIGZCdWZmW2NvdW50KytdID0gYzsKLSAgICB9Ci0KLSAgICBjaGFyKiBnZXREYXRhKCkgeyBy
ZXR1cm4gZkJ1ZmY7IH0KLSAgICBpbnQgICBnZXRTaXplKCkgeyByZXR1cm4gZlNpemU7IH0KLQot
ICAgIH5UTU1hcCgpIHsKLSAgICAgICAgaWYgKGZwICE9IE5VTEwpCi0gICAgICAgICAgICBmY2xv
c2UoZnApOwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgaW50ICAgICAgICAgICAgIGZTaXpl
OyAgICAgIC8vIHNpemUgb2YgZmlsZSB0byBtYXAgaW4KLSAgICBGSUxFICpmcDsKLSAgICBjaGFy
KiAgICAgICAgICAgZkJ1ZmY7ICAgICAgLy8gdGhlIGFjdHVhbCBkYXRhOwotfTsKLQotI2VuZGlm
IC8vIF9NTUFQX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDA3N2VmNWQ3MmViOWU3ZmYyZDRhOTZiNGQ1YzY5YmUxODY4MTBi
NzguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5j
bHVkZSAiY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCIKLQotbmFtZXNwYWNlIHsKLQot
VFN0cmluZyBtYXBMb25nTmFtZShzaXplX3QgaWQsIGNvbnN0IFRTdHJpbmcmIG5hbWUsIGJvb2wg
aXNHbG9iYWwpCi17Ci0gICAgQVNTRVJUKG5hbWUuc2l6ZSgpID4gTUFYX1NIT1JURU5FRF9JREVO
VElGSUVSX1NJWkUpOwotICAgIFRTdHJpbmdTdHJlYW0gc3RyZWFtOwotICAgIHN0cmVhbSA8PCAi
d2ViZ2xfIjsKLSAgICBpZiAoaXNHbG9iYWwpCi0gICAgICAgIHN0cmVhbSA8PCAiZyI7Ci0gICAg
c3RyZWFtIDw8IGlkOwotICAgIGlmIChuYW1lWzBdICE9ICdfJykKLSAgICAgICAgc3RyZWFtIDw8
ICJfIjsKLSAgICBzdHJlYW0gPDwgbmFtZS5zdWJzdHIoMCwgTUFYX1NIT1JURU5FRF9JREVOVElG
SUVSX1NJWkUgLSBzdHJlYW0uc3RyKCkuc2l6ZSgpKTsKLSAgICByZXR1cm4gc3RyZWFtLnN0cigp
OwotfQotCi1Mb25nTmFtZU1hcCogZ0xvbmdOYW1lTWFwSW5zdGFuY2UgPSBOVUxMOwotCi19ICAv
LyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLUxvbmdOYW1lTWFwOjpMb25nTmFtZU1hcCgpCi0gICAg
OiByZWZDb3VudCgwKQotewotfQotCi1Mb25nTmFtZU1hcDo6fkxvbmdOYW1lTWFwKCkKLXsKLX0K
LQotLy8gc3RhdGljCi1Mb25nTmFtZU1hcCogTG9uZ05hbWVNYXA6OkdldEluc3RhbmNlKCkKLXsK
LSAgICBpZiAoZ0xvbmdOYW1lTWFwSW5zdGFuY2UgPT0gTlVMTCkKLSAgICAgICAgZ0xvbmdOYW1l
TWFwSW5zdGFuY2UgPSBuZXcgTG9uZ05hbWVNYXA7Ci0gICAgZ0xvbmdOYW1lTWFwSW5zdGFuY2Ut
PnJlZkNvdW50Kys7Ci0gICAgcmV0dXJuIGdMb25nTmFtZU1hcEluc3RhbmNlOwotfQotCi12b2lk
IExvbmdOYW1lTWFwOjpSZWxlYXNlKCkKLXsKLSAgICBBU1NFUlQoZ0xvbmdOYW1lTWFwSW5zdGFu
Y2UgPT0gdGhpcyk7Ci0gICAgQVNTRVJUKHJlZkNvdW50ID4gMCk7Ci0gICAgcmVmQ291bnQtLTsK
LSAgICBpZiAocmVmQ291bnQgPT0gMCkgewotICAgICAgICBkZWxldGUgZ0xvbmdOYW1lTWFwSW5z
dGFuY2U7Ci0gICAgICAgIGdMb25nTmFtZU1hcEluc3RhbmNlID0gTlVMTDsKLSAgICB9Ci19Ci0K
LWNvbnN0IGNoYXIqIExvbmdOYW1lTWFwOjpGaW5kKGNvbnN0IGNoYXIqIG9yaWdpbmFsTmFtZSkg
Y29uc3QKLXsKLSAgICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IG1Mb25nTmFtZU1hcC5maW5kKAotICAgICAgICBvcmlnaW5hbE5hbWUpOwot
ICAgIGlmIChpdCAhPSBtTG9uZ05hbWVNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiAoKml0KS5z
ZWNvbmQuY19zdHIoKTsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotdm9pZCBMb25nTmFtZU1hcDo6
SW5zZXJ0KGNvbnN0IGNoYXIqIG9yaWdpbmFsTmFtZSwgY29uc3QgY2hhciogbWFwcGVkTmFtZSkK
LXsKLSAgICBtTG9uZ05hbWVNYXAuaW5zZXJ0KHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0
cmluZz46OnZhbHVlX3R5cGUoCi0gICAgICAgIG9yaWdpbmFsTmFtZSwgbWFwcGVkTmFtZSkpOwot
fQotCi1zaXplX3QgTG9uZ05hbWVNYXA6OlNpemUoKSBjb25zdAotewotICAgIHJldHVybiBtTG9u
Z05hbWVNYXAuc2l6ZSgpOwotfQotCi1NYXBMb25nVmFyaWFibGVOYW1lczo6TWFwTG9uZ1Zhcmlh
YmxlTmFtZXMoTG9uZ05hbWVNYXAqIGdsb2JhbE1hcCkKLXsKLSAgICBBU1NFUlQoZ2xvYmFsTWFw
KTsKLSAgICBtR2xvYmFsTWFwID0gZ2xvYmFsTWFwOwotfQotCi12b2lkIE1hcExvbmdWYXJpYWJs
ZU5hbWVzOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBzeW1ib2wpCi17Ci0gICAgQVNTRVJU
KHN5bWJvbCAhPSBOVUxMKTsKLSAgICBpZiAoc3ltYm9sLT5nZXRTeW1ib2woKS5zaXplKCkgPiBN
QVhfU0hPUlRFTkVEX0lERU5USUZJRVJfU0laRSkgewotICAgICAgICBzd2l0Y2ggKHN5bWJvbC0+
Z2V0UXVhbGlmaWVyKCkpIHsKLSAgICAgICAgICBjYXNlIEV2cVZhcnlpbmdJbjoKLSAgICAgICAg
ICBjYXNlIEV2cVZhcnlpbmdPdXQ6Ci0gICAgICAgICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5n
SW46Ci0gICAgICAgICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0OgotICAgICAgICAgIGNh
c2UgRXZxVW5pZm9ybToKLSAgICAgICAgICAgIHN5bWJvbC0+c2V0U3ltYm9sKAotICAgICAgICAg
ICAgICAgIG1hcEdsb2JhbExvbmdOYW1lKHN5bWJvbC0+Z2V0U3ltYm9sKCkpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBzeW1ib2wtPnNldFN5
bWJvbCgKLSAgICAgICAgICAgICAgICBtYXBMb25nTmFtZShzeW1ib2wtPmdldElkKCksIHN5bWJv
bC0+Z2V0U3ltYm9sKCksIGZhbHNlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfTsK
LSAgICB9Ci19Ci0KLVRTdHJpbmcgTWFwTG9uZ1ZhcmlhYmxlTmFtZXM6Om1hcEdsb2JhbExvbmdO
YW1lKGNvbnN0IFRTdHJpbmcmIG5hbWUpCi17Ci0gICAgQVNTRVJUKG1HbG9iYWxNYXApOwotICAg
IGNvbnN0IGNoYXIqIG1hcHBlZE5hbWUgPSBtR2xvYmFsTWFwLT5GaW5kKG5hbWUuY19zdHIoKSk7
Ci0gICAgaWYgKG1hcHBlZE5hbWUgIT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIG1hcHBlZE5hbWU7
Ci0gICAgc2l6ZV90IGlkID0gbUdsb2JhbE1hcC0+U2l6ZSgpOwotICAgIFRTdHJpbmcgcnQgPSBt
YXBMb25nTmFtZShpZCwgbmFtZSwgdHJ1ZSk7Ci0gICAgbUdsb2JhbE1hcC0+SW5zZXJ0KG5hbWUu
Y19zdHIoKSwgcnQuY19zdHIoKSk7Ci0gICAgcmV0dXJuIHJ0OwotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFt
ZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQyZmY4MjYxM2MxOGUwNDc3ZjI0
YTRmNjZiMGQzN2JhNjEyMTE5ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVNfSF8KLSNk
ZWZpbmUgQ09NUElMRVJfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVNfSF8KLQotI2luY2x1ZGUgIkdM
U0xBTkcvU2hhZGVyTGFuZy5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgi
Ci0jaW5jbHVkZSAiY29tcGlsZXIvVmFyaWFibGVJbmZvLmgiCi0KLS8vIFRoaXMgc2l6ZSBkb2Vz
IG5vdCBpbmNsdWRlICdcMCcgaW4gdGhlIGVuZC4KLSNkZWZpbmUgTUFYX1NIT1JURU5FRF9JREVO
VElGSUVSX1NJWkUgMzIKLQotLy8gVGhpcyBpcyBhIHJlZi1jb3VudGVkIHNpbmdsZXRvbi4gR2V0
SW5zdGFuY2UoKSByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUKLS8vIHNpbmdsZXRvbiwgYW5kIGFm
dGVyIHVzZSwgY2FsbCBSZWxlYXNlKCkuIEdldEluc3RhbmNlKCkgYW5kIFJlbGVhc2UoKSBzaG91
bGQKLS8vIGJlIHBhaXJlZC4KLWNsYXNzIExvbmdOYW1lTWFwIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgTG9uZ05hbWVNYXAqIEdldEluc3RhbmNlKCk7Ci0gICAgdm9pZCBSZWxlYXNlKCk7Ci0KLSAg
ICAvLyBSZXR1cm4gdGhlIG1hcHBlZCBuYW1lIGlmIDxvcmlnaW5hbE5hbWUsIG1hcHBlZE5hbWU+
IGlzIGluIHRoZSBtYXA7Ci0gICAgLy8gb3RoZXJ3aXNlLCByZXR1cm4gTlVMTC4KLSAgICBjb25z
dCBjaGFyKiBGaW5kKGNvbnN0IGNoYXIqIG9yaWdpbmFsTmFtZSkgY29uc3Q7Ci0KLSAgICAvLyBJ
bnNlcnQgYSBwYWlyIGludG8gdGhlIG1hcC4KLSAgICB2b2lkIEluc2VydChjb25zdCBjaGFyKiBv
cmlnaW5hbE5hbWUsIGNvbnN0IGNoYXIqIG1hcHBlZE5hbWUpOwotCi0gICAgLy8gUmV0dXJuIHRo
ZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgbWFwLgotICAgIHNpemVfdCBTaXplKCkgY29uc3Q7
Ci0KLXByaXZhdGU6Ci0gICAgTG9uZ05hbWVNYXAoKTsKLSAgICB+TG9uZ05hbWVNYXAoKTsKLQot
ICAgIHNpemVfdCByZWZDb3VudDsKLSAgICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJp
bmc+IG1Mb25nTmFtZU1hcDsKLX07Ci0KLS8vIFRyYXZlcnNlcyBpbnRlcm1lZGlhdGUgdHJlZSB0
byBtYXAgYXR0cmlidXRlcyBhbmQgdW5pZm9ybXMgbmFtZXMgdGhhdCBhcmUKLS8vIGxvbmdlciB0
aGFuIE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFIHRvIE1BWF9TSE9SVEVORURfSURFTlRJ
RklFUl9TSVpFLgotY2xhc3MgTWFwTG9uZ1ZhcmlhYmxlTmFtZXMgOiBwdWJsaWMgVEludGVybVRy
YXZlcnNlciB7Ci1wdWJsaWM6Ci0gICAgTWFwTG9uZ1ZhcmlhYmxlTmFtZXMoTG9uZ05hbWVNYXAq
IGdsb2JhbE1hcCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJv
bCopOwotCi1wcml2YXRlOgotICAgIFRTdHJpbmcgbWFwR2xvYmFsTG9uZ05hbWUoY29uc3QgVFN0
cmluZyYgbmFtZSk7Ci0KLSAgICBMb25nTmFtZU1hcCogbUdsb2JhbE1hcDsKLX07Ci0KLSNlbmRp
ZiAgLy8gQ09NUElMRVJfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVNfSF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Ob2RlU2VhcmNoLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvTm9kZVNlYXJjaC5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAyN2U0NzFkYmJjNDllMWRkOTIzNTIwZGYyNDAzZDY5N2NiYTcyNzFj
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Ob2RlU2VhcmNoLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw3OCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotLy8gTm9kZVNlYXJjaC5oOiBVdGls
aXRpZXMgZm9yIHNlYXJjaGluZyB0cmFuc2xhdG9yIG5vZGUgZ3JhcGhzCi0vLwotCi0jaWZuZGVm
IFRSQU5TTEFUT1JfTk9ERVNFQVJDSF9IXwotI2RlZmluZSBUUkFOU0xBVE9SX05PREVTRUFSQ0hf
SF8KLQotbmFtZXNwYWNlIHNoCi17Ci0KLXRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Ci1jbGFzcyBO
b2RlU2VhcmNoVHJhdmVyc2VyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKLXsKLSAgcHVibGlj
OgotICAgIE5vZGVTZWFyY2hUcmF2ZXJzZXIoKQotICAgICAgICA6IG1Gb3VuZChmYWxzZSkKLSAg
ICB7fQotCi0gICAgYm9vbCBmb3VuZCgpIGNvbnN0IHsgcmV0dXJuIG1Gb3VuZDsgfQotCi0gICAg
c3RhdGljIGJvb2wgc2VhcmNoKFRJbnRlcm1Ob2RlICpub2RlKQotICAgIHsKLSAgICAgICAgUGFy
ZW50IHNlYXJjaFRyYXZlcnNlcjsKLSAgICAgICAgbm9kZS0+dHJhdmVyc2UoJnNlYXJjaFRyYXZl
cnNlcik7Ci0gICAgICAgIHJldHVybiBzZWFyY2hUcmF2ZXJzZXIuZm91bmQoKTsKLSAgICB9Ci0K
LSAgcHJvdGVjdGVkOgotICAgIGJvb2wgbUZvdW5kOwotfTsKLQotY2xhc3MgRmluZERpc2NhcmQg
OiBwdWJsaWMgTm9kZVNlYXJjaFRyYXZlcnNlcjxGaW5kRGlzY2FyZD4KLXsKLSAgcHVibGljOgot
ICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCAq
bm9kZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkpCi0gICAgICAg
IHsKLSAgICAgICAgICBjYXNlIEVPcEtpbGw6Ci0gICAgICAgICAgICBtRm91bmQgPSB0cnVlOwot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBkZWZhdWx0OiBicmVhazsKLSAgICAgICAg
fQotCi0gICAgICAgIHJldHVybiAhbUZvdW5kOwotICAgIH0KLX07Ci0KLWNsYXNzIEZpbmRTaWRl
RWZmZWN0UmV3cml0aW5nIDogcHVibGljIE5vZGVTZWFyY2hUcmF2ZXJzZXI8RmluZFNpZGVFZmZl
Y3RSZXdyaXRpbmc+Ci17Ci0gIHB1YmxpYzoKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnko
VmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCi0gICAgewotICAgICAgICBzd2l0Y2gg
KG5vZGUtPmdldE9wKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjoK
LSAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6Ci0gICAgICAgICAgICBpZiAobm9kZS0+Z2V0
UmlnaHQoKS0+aGFzU2lkZUVmZmVjdHMoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBtRm91bmQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgICBkZWZhdWx0OiBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAhbUZv
dW5kOwotICAgIH0KLX07Ci0KLX0KLQotI2VuZGlmIC8vIFRSQU5TTEFUT1JfTk9ERVNFQVJDSF9I
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1
dEVTU0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEVT
U0wuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjA0OGYxY2VjNGFlY2U2YTMw
MWE1YjBmMTQwYmM4MTkyNDM5NzkwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRF
U1NMLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLSNpbmNsdWRlICJjb21waWxlci9PdXRwdXRFU1NMLmgiCi0KLVRPdXRwdXRFU1NMOjpUT3V0
cHV0RVNTTChUSW5mb1NpbmtCYXNlJiBvYmpTaW5rLAotICAgICAgICAgICAgICAgICAgICAgICAg
IFNoQXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJhdGVneSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBOYW1lTWFwJiBuYW1lTWFwLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCi0gICAgOiBUT3V0cHV0R0xTTEJhc2Uob2Jq
U2luaywgY2xhbXBpbmdTdHJhdGVneSwgaGFzaEZ1bmN0aW9uLCBuYW1lTWFwLCBzeW1ib2xUYWJs
ZSkKLXsKLX0KLQotYm9vbCBUT3V0cHV0RVNTTDo6d3JpdGVWYXJpYWJsZVByZWNpc2lvbihUUHJl
Y2lzaW9uIHByZWNpc2lvbikKLXsKLSAgICBpZiAocHJlY2lzaW9uID09IEVicFVuZGVmaW5lZCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2lu
aygpOwotICAgIG91dCA8PCBnZXRQcmVjaXNpb25TdHJpbmcocHJlY2lzaW9uKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9PdXRwdXRFU1NMLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
T3V0cHV0RVNTTC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWRiOTZlNDk3OTE2
ZGJjOWY2NmQ5MjBiMDJjY2RiMmI5OGQyYjFjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9P
dXRwdXRFU1NMLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
Ci0vLwotCi0jaWZuZGVmIENST1NTQ09NUElMRVJHTFNMX09VVFBVVEVTU0xfSF8KLSNkZWZpbmUg
Q1JPU1NDT01QSUxFUkdMU0xfT1VUUFVURVNTTF9IXwotCi0jaW5jbHVkZSAiY29tcGlsZXIvT3V0
cHV0R0xTTEJhc2UuaCIKLQotY2xhc3MgVE91dHB1dEVTU0wgOiBwdWJsaWMgVE91dHB1dEdMU0xC
YXNlCi17Ci1wdWJsaWM6Ci0gICAgVE91dHB1dEVTU0woVEluZm9TaW5rQmFzZSYgb2JqU2luaywK
LSAgICAgICAgICAgICAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IGNsYW1waW5nU3Ry
YXRlZ3ksCi0gICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24sCi0g
ICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAgICAgICAgICAgICBUU3ltYm9s
VGFibGUmIHN5bWJvbFRhYmxlKTsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgYm9vbCB3cml0
ZVZhcmlhYmxlUHJlY2lzaW9uKFRQcmVjaXNpb24gcHJlY2lzaW9uKTsKLX07Ci0KLSNlbmRpZiAg
Ly8gQ1JPU1NDT01QSUxFUkdMU0xfT1VUUFVURVNTTF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAxMGE0NTFjMGQ3NmVjMGQ1MDMwMGU1MmJiM2M1MDUyNjVhM2Y2NzEwLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDM1ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQot
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9P
dXRwdXRHTFNMLmgiCi0KLVRPdXRwdXRHTFNMOjpUT3V0cHV0R0xTTChUSW5mb1NpbmtCYXNlJiBv
YmpTaW5rLAotICAgICAgICAgICAgICAgICAgICAgICAgIFNoQXJyYXlJbmRleENsYW1waW5nU3Ry
YXRlZ3kgY2xhbXBpbmdTdHJhdGVneSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBTaEhhc2hG
dW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lTWFw
JiBuYW1lTWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9s
VGFibGUpCi0gICAgOiBUT3V0cHV0R0xTTEJhc2Uob2JqU2luaywgY2xhbXBpbmdTdHJhdGVneSwg
aGFzaEZ1bmN0aW9uLCBuYW1lTWFwLCBzeW1ib2xUYWJsZSkKLXsKLX0KLQotYm9vbCBUT3V0cHV0
R0xTTDo6d3JpdGVWYXJpYWJsZVByZWNpc2lvbihUUHJlY2lzaW9uKQotewotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotdm9pZCBUT3V0cHV0R0xTTDo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCog
bm9kZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7Ci0KLSAgICBpZiAo
bm9kZS0+Z2V0U3ltYm9sKCkgPT0gImdsX0ZyYWdEZXB0aEVYVCIpCi0gICAgewotICAgICAgICBv
dXQgPDwgImdsX0ZyYWdEZXB0aCI7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIFRP
dXRwdXRHTFNMQmFzZTo6dmlzaXRTeW1ib2wobm9kZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGZhNjhhYzgxMDMwZTkzM2I0ODMyODkzNTBlZmMzNTMyNzk0ZGU4
NjguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuaAorKysgL2Rldi9udWxs
CkBAIC0xLDI2ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ1JPU1NDT01Q
SUxFUkdMU0xfT1VUUFVUR0xTTF9IXwotI2RlZmluZSBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRH
TFNMX0hfCi0KLSNpbmNsdWRlICJjb21waWxlci9PdXRwdXRHTFNMQmFzZS5oIgotCi1jbGFzcyBU
T3V0cHV0R0xTTCA6IHB1YmxpYyBUT3V0cHV0R0xTTEJhc2UKLXsKLXB1YmxpYzoKLSAgICBUT3V0
cHV0R0xTTChUSW5mb1NpbmtCYXNlJiBvYmpTaW5rLAotICAgICAgICAgICAgICAgIFNoQXJyYXlJ
bmRleENsYW1waW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJhdGVneSwKLSAgICAgICAgICAgICAgICBT
aEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwKLSAgICAgICAgICAgICAgICBOYW1lTWFwJiBu
YW1lTWFwLAotICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpOwotCi1w
cm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBib29sIHdyaXRlVmFyaWFibGVQcmVjaXNpb24oVFByZWNp
c2lvbik7Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUp
OwotfTsKLQotI2VuZGlmICAvLyBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRHTFNMX0hfCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTEJh
c2UuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0xC
YXNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjkwYmQ2N2VjZDc0MjBlOWU0
OGExZWFkMWU0M2ZkYmFmNTgwOGUwYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0
R0xTTEJhc2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODE3ICswLDAgQEAKLS8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9PdXRwdXRHTFNMQmFzZS5oIgotI2luY2x1ZGUg
ImNvbXBpbGVyL2RlYnVnLmgiCi0KLSNpbmNsdWRlIDxjZmxvYXQ+Ci0KLW5hbWVzcGFjZQotewot
VFN0cmluZyBhcnJheUJyYWNrZXRzKGNvbnN0IFRUeXBlJiB0eXBlKQotewotICAgIEFTU0VSVCh0
eXBlLmlzQXJyYXkoKSk7Ci0gICAgVEluZm9TaW5rQmFzZSBvdXQ7Ci0gICAgb3V0IDw8ICJbIiA8
PCB0eXBlLmdldEFycmF5U2l6ZSgpIDw8ICJdIjsKLSAgICByZXR1cm4gVFN0cmluZyhvdXQuY19z
dHIoKSk7Ci19Ci0KLWJvb2wgaXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUqIG5vZGUpIHsK
LSAgICBpZiAoY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogYWdncmVnYXRlID0gbm9kZS0+Z2V0QXNB
Z2dyZWdhdGUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoYWdncmVnYXRlLT5nZXRPcCgpICE9
IEVPcEZ1bmN0aW9uKSAmJgotICAgICAgICAgICAgICAgKGFnZ3JlZ2F0ZS0+Z2V0T3AoKSAhPSBF
T3BTZXF1ZW5jZSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGNvbnN0IFRJbnRlcm1TZWxlY3Rpb24q
IHNlbGVjdGlvbiA9IG5vZGUtPmdldEFzU2VsZWN0aW9uTm9kZSgpKQotICAgIHsKLSAgICAgICAg
Ly8gVGVybmFyeSBvcGVyYXRvcnMgYXJlIHVzdWFsbHkgcGFydCBvZiBhbiBhc3NpZ25tZW50IG9w
ZXJhdG9yLgotICAgICAgICAvLyBUaGlzIGhhbmRsZXMgdGhvc2UgcmFyZSBjYXNlcyBpbiB3aGlj
aCB0aGV5IGFyZSBhbGwgYnkgdGhlbXNlbHZlcy4KLSAgICAgICAgcmV0dXJuIHNlbGVjdGlvbi0+
dXNlc1Rlcm5hcnlPcGVyYXRvcigpOwotICAgIH0KLSAgICBlbHNlIGlmIChub2RlLT5nZXRBc0xv
b3BOb2RlKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVy
biB0cnVlOwotfQotfSAgLy8gbmFtZXNwYWNlCi0KLVRPdXRwdXRHTFNMQmFzZTo6VE91dHB1dEdM
U0xCYXNlKFRJbmZvU2lua0Jhc2UmIG9ialNpbmssCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IGNsYW1waW5nU3RyYXRlZ3ksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5j
dGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRh
YmxlKQotICAgIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwKLSAgICAgIG1P
YmpTaW5rKG9ialNpbmspLAotICAgICAgbURlY2xhcmluZ1ZhcmlhYmxlcyhmYWxzZSksCi0gICAg
ICBtQ2xhbXBpbmdTdHJhdGVneShjbGFtcGluZ1N0cmF0ZWd5KSwKLSAgICAgIG1IYXNoRnVuY3Rp
b24oaGFzaEZ1bmN0aW9uKSwKLSAgICAgIG1OYW1lTWFwKG5hbWVNYXApLAotICAgICAgbVN5bWJv
bFRhYmxlKHN5bWJvbFRhYmxlKQotewotfQotCi12b2lkIFRPdXRwdXRHTFNMQmFzZTo6d3JpdGVU
cmlwbGV0KFZpc2l0IHZpc2l0LCBjb25zdCBjaGFyKiBwcmVTdHIsIGNvbnN0IGNoYXIqIGluU3Ry
LCBjb25zdCBjaGFyKiBwb3N0U3RyKQotewotICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNp
bmsoKTsKLSAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQgJiYgcHJlU3RyKQotICAgIHsKLSAgICAg
ICAgb3V0IDw8IHByZVN0cjsKLSAgICB9Ci0gICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCAm
JiBpblN0cikKLSAgICB7Ci0gICAgICAgIG91dCA8PCBpblN0cjsKLSAgICB9Ci0gICAgZWxzZSBp
ZiAodmlzaXQgPT0gUG9zdFZpc2l0ICYmIHBvc3RTdHIpCi0gICAgewotICAgICAgICBvdXQgPDwg
cG9zdFN0cjsKLSAgICB9Ci19Ci0KLXZvaWQgVE91dHB1dEdMU0xCYXNlOjp3cml0ZVZhcmlhYmxl
VHlwZShjb25zdCBUVHlwZSYgdHlwZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpT
aW5rKCk7Ci0gICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSB0eXBlLmdldFF1YWxpZmllcigpOwot
ICAgIC8vIFRPRE8oYWxva3ApOiBWYWxpZGF0ZSBxdWFsaWZpZXIgZm9yIHZhcmlhYmxlIGRlY2xh
cmF0aW9ucy4KLSAgICBpZiAoKHF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpICYmIChxdWFsaWZp
ZXIgIT0gRXZxR2xvYmFsKSkKLSAgICAgICAgb3V0IDw8IHR5cGUuZ2V0UXVhbGlmaWVyU3RyaW5n
KCkgPDwgIiAiOwotICAgIC8vIERlY2xhcmUgdGhlIHN0cnVjdCBpZiB3ZSBoYXZlIG5vdCBkb25l
IHNvIGFscmVhZHkuCi0gICAgaWYgKCh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkg
JiYgIXN0cnVjdERlY2xhcmVkKHR5cGUuZ2V0U3RydWN0KCkpKQotICAgIHsKLSAgICAgICAgZGVj
bGFyZVN0cnVjdCh0eXBlLmdldFN0cnVjdCgpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAg
ICAgICAgaWYgKHdyaXRlVmFyaWFibGVQcmVjaXNpb24odHlwZS5nZXRQcmVjaXNpb24oKSkpCi0g
ICAgICAgICAgICBvdXQgPDwgIiAiOwotICAgICAgICBvdXQgPDwgZ2V0VHlwZU5hbWUodHlwZSk7
Ci0gICAgfQotfQotCi12b2lkIFRPdXRwdXRHTFNMQmFzZTo6d3JpdGVGdW5jdGlvblBhcmFtZXRl
cnMoY29uc3QgVEludGVybVNlcXVlbmNlJiBhcmdzKQotewotICAgIFRJbmZvU2lua0Jhc2UmIG91
dCA9IG9ialNpbmsoKTsKLSAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IGFyZ3MuYmVnaW4oKTsKLSAgICAgICAgIGl0ZXIgIT0gYXJncy5lbmQoKTsgKytpdGVy
KQotICAgIHsKLSAgICAgICAgY29uc3QgVEludGVybVN5bWJvbCogYXJnID0gKCppdGVyKS0+Z2V0
QXNTeW1ib2xOb2RlKCk7Ci0gICAgICAgIEFTU0VSVChhcmcgIT0gTlVMTCk7Ci0KLSAgICAgICAg
Y29uc3QgVFR5cGUmIHR5cGUgPSBhcmctPmdldFR5cGUoKTsKLSAgICAgICAgd3JpdGVWYXJpYWJs
ZVR5cGUodHlwZSk7Ci0KLSAgICAgICAgY29uc3QgVFN0cmluZyYgbmFtZSA9IGFyZy0+Z2V0U3lt
Ym9sKCk7Ci0gICAgICAgIGlmICghbmFtZS5lbXB0eSgpKQotICAgICAgICAgICAgb3V0IDw8ICIg
IiA8PCBoYXNoTmFtZShuYW1lKTsKLSAgICAgICAgaWYgKHR5cGUuaXNBcnJheSgpKQotICAgICAg
ICAgICAgb3V0IDw8IGFycmF5QnJhY2tldHModHlwZSk7Ci0KLSAgICAgICAgLy8gUHV0IGEgY29t
bWEgaWYgdGhpcyBpcyBub3QgdGhlIGxhc3QgYXJndW1lbnQuCi0gICAgICAgIGlmIChpdGVyICE9
IGFyZ3MuZW5kKCkgLSAxKQotICAgICAgICAgICAgb3V0IDw8ICIsICI7Ci0gICAgfQotfQotCi1j
b25zdCBDb25zdGFudFVuaW9uKiBUT3V0cHV0R0xTTEJhc2U6OndyaXRlQ29uc3RhbnRVbmlvbihj
b25zdCBUVHlwZSYgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbnN0YW50VW5pb24qIHBDb25zdFVuaW9uKQotewot
ICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNpbmsoKTsKLQotICAgIGlmICh0eXBlLmdldEJh
c2ljVHlwZSgpID09IEVidFN0cnVjdCkKLSAgICB7Ci0gICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7Ci0gICAgICAgIG91dCA8PCBoYXNoTmFtZShz
dHJ1Y3R1cmUtPm5hbWUoKSkgPDwgIigiOwotCi0gICAgICAgIGNvbnN0IFRGaWVsZExpc3QmIGZp
ZWxkcyA9IHN0cnVjdHVyZS0+ZmllbGRzKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgZmllbGRzLnNpemUoKTsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBUVHlw
ZSogZmllbGRUeXBlID0gZmllbGRzW2ldLT50eXBlKCk7Ci0gICAgICAgICAgICBBU1NFUlQoZmll
bGRUeXBlICE9IE5VTEwpOwotICAgICAgICAgICAgcENvbnN0VW5pb24gPSB3cml0ZUNvbnN0YW50
VW5pb24oKmZpZWxkVHlwZSwgcENvbnN0VW5pb24pOwotICAgICAgICAgICAgaWYgKGkgIT0gZmll
bGRzLnNpemUoKSAtIDEpIG91dCA8PCAiLCAiOwotICAgICAgICB9Ci0gICAgICAgIG91dCA8PCAi
KSI7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHNpemVfdCBzaXplID0gdHlwZS5n
ZXRPYmplY3RTaXplKCk7Ci0gICAgICAgIGJvb2wgd3JpdGVUeXBlID0gc2l6ZSA+IDE7Ci0gICAg
ICAgIGlmICh3cml0ZVR5cGUpIG91dCA8PCBnZXRUeXBlTmFtZSh0eXBlKSA8PCAiKCI7Ci0gICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpLCArK3BDb25zdFVuaW9uKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHBDb25zdFVuaW9uLT5nZXRUeXBlKCkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogb3V0IDw8IHN0ZDo6bWlu
KEZMVF9NQVgsIHN0ZDo6bWF4KC1GTFRfTUFYLCBwQ29uc3RVbmlvbi0+Z2V0RkNvbnN0KCkpKTsg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6IG91dCA8PCBwQ29uc3RVbmlvbi0+
Z2V0SUNvbnN0KCk7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogb3V0IDw8
IHBDb25zdFVuaW9uLT5nZXRCQ29uc3QoKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpICE9IHNp
emUgLSAxKSBvdXQgPDwgIiwgIjsKLSAgICAgICAgfQotICAgICAgICBpZiAod3JpdGVUeXBlKSBv
dXQgPDwgIikiOwotICAgIH0KLSAgICByZXR1cm4gcENvbnN0VW5pb247Ci19Ci0KLXZvaWQgVE91
dHB1dEdMU0xCYXNlOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQotewotICAgIFRJ
bmZvU2lua0Jhc2UmIG91dCA9IG9ialNpbmsoKTsKLSAgICBpZiAobUxvb3BVbnJvbGwuTmVlZHNU
b1JlcGxhY2VTeW1ib2xXaXRoVmFsdWUobm9kZSkpCi0gICAgICAgIG91dCA8PCBtTG9vcFVucm9s
bC5HZXRMb29wSW5kZXhWYWx1ZShub2RlKTsKLSAgICBlbHNlCi0gICAgICAgIG91dCA8PCBoYXNo
VmFyaWFibGVOYW1lKG5vZGUtPmdldFN5bWJvbCgpKTsKLQotICAgIGlmIChtRGVjbGFyaW5nVmFy
aWFibGVzICYmIG5vZGUtPmdldFR5cGUoKS5pc0FycmF5KCkpCi0gICAgICAgIG91dCA8PCBhcnJh
eUJyYWNrZXRzKG5vZGUtPmdldFR5cGUoKSk7Ci19Ci0KLXZvaWQgVE91dHB1dEdMU0xCYXNlOjp2
aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qIG5vZGUpCi17Ci0gICAgd3Jp
dGVDb25zdGFudFVuaW9uKG5vZGUtPmdldFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50
ZXIoKSk7Ci19Ci0KLWJvb2wgVE91dHB1dEdMU0xCYXNlOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNp
dCwgVEludGVybUJpbmFyeSogbm9kZSkKLXsKLSAgICBib29sIHZpc2l0Q2hpbGRyZW4gPSB0cnVl
OwotICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNpbmsoKTsKLSAgICBzd2l0Y2ggKG5vZGUt
PmdldE9wKCkpCi0gICAgewotICAgICAgICBjYXNlIEVPcEluaXRpYWxpemU6Ci0gICAgICAgICAg
ICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBv
dXQgPDwgIiA9ICI7Ci0gICAgICAgICAgICAgICAgLy8gUkhTIG9mIGluaXRpYWxpemUgaXMgbm90
IGJlaW5nIGRlY2xhcmVkLgotICAgICAgICAgICAgICAgIG1EZWNsYXJpbmdWYXJpYWJsZXMgPSBm
YWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVP
cEFzc2lnbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgPSAiLCAiKSIpOyBicmVhazsKLSAg
ICAgICAgY2FzZSBFT3BBZGRBc3NpZ246IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiICs9ICIs
ICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjogd3JpdGVUcmlwbGV0KHZp
c2l0LCAiKCIsICIgLT0gIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wRGl2QXNzaWdu
OiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAvPSAiLCAiKSIpOyBicmVhazsKLSAgICAgICAg
Ly8gTm90aWNlIHRoZSBmYWxsLXRocm91Z2guCi0gICAgICAgIGNhc2UgRU9wTXVsQXNzaWduOiAK
LSAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjoKLSAgICAgICAgY2FzZSBF
T3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjoKLSAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1Nj
YWxhckFzc2lnbjoKLSAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjoKLSAg
ICAgICAgICAgIHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiICo9ICIsICIpIik7Ci0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0OgotICAgICAgICAgICAg
d3JpdGVUcmlwbGV0KHZpc2l0LCBOVUxMLCAiWyIsICJdIik7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OgotICAgICAgICAgICAgaWYgKG5vZGUtPmdl
dEFkZEluZGV4Q2xhbXAoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAodmlz
aXQgPT0gSW5WaXNpdCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChtQ2xhbXBpbmdTdHJhdGVneSA9PSBTSF9DTEFNUF9XSVRIX0NMQU1QX0lOVFJJTlNJQykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJbaW50KGNsYW1wKGZsb2F0KCI7Ci0gICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwg
Ilt3ZWJnbF9pbnRfY2xhbXAoIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBQb3N0VmlzaXQpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpbnQgbWF4U2l6ZTsKLSAgICAgICAg
ICAgICAgICAgICAgVEludGVybVR5cGVkICpsZWZ0ID0gbm9kZS0+Z2V0TGVmdCgpOwotICAgICAg
ICAgICAgICAgICAgICBUVHlwZSBsZWZ0VHlwZSA9IGxlZnQtPmdldFR5cGUoKTsKLQotICAgICAg
ICAgICAgICAgICAgICBpZiAobGVmdC0+aXNBcnJheSgpKQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgc2hhZGVyIHdpbGwgZmFpbCB2YWxpZGF0
aW9uIGlmIHRoZSBhcnJheSBsZW5ndGggaXMgbm90ID4gMC4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1heFNpemUgPSBsZWZ0VHlwZS5nZXRBcnJheVNpemUoKSAtIDE7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXhTaXplID0gbGVmdFR5cGUuZ2V0Tm9taW5hbFNp
emUoKSAtIDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBp
ZiAobUNsYW1waW5nU3RyYXRlZ3kgPT0gU0hfQ0xBTVBfV0lUSF9DTEFNUF9JTlRSSU5TSUMpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiKSwgMC4wLCBmbG9hdCgiIDw8IG1heFNp
emUgPDwgIikpKV0iOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0IDw8ICIsIDAsICIgPDwgbWF4U2l6ZSA8PCAiKV0iOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHdyaXRlVHJpcGxldCh2aXNp
dCwgTlVMTCwgIlsiLCAiXSIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6Ci0gICAgICAgICAgICBpZiAodmlzaXQg
PT0gSW5WaXNpdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBIZXJlIHdlIGFy
ZSB3cml0aW5nIG91dCAiZm9vLmJhciIsIHdoZXJlICJmb28iIGlzIHN0cnVjdAotICAgICAgICAg
ICAgICAgIC8vIGFuZCAiYmFyIiBpcyBmaWVsZC4gSW4gQVNULCBpdCBpcyByZXByZXNlbnRlZCBh
cyBhIGJpbmFyeQotICAgICAgICAgICAgICAgIC8vIG5vZGUsIHdoZXJlIGxlZnQgY2hpbGQgcmVw
cmVzZW50cyAiZm9vIiBhbmQgcmlnaHQgY2hpbGQgImJhciIuCi0gICAgICAgICAgICAgICAgLy8g
VGhlIG5vZGUgaXRzZWxmIHJlcHJlc2VudHMgIi4iLiBUaGUgc3RydWN0IGZpZWxkICJiYXIiIGlz
Ci0gICAgICAgICAgICAgICAgLy8gYWN0dWFsbHkgc3RvcmVkIGFzIGFuIGluZGV4IGludG8gVFN0
cnVjdHVyZTo6ZmllbGRzLgotICAgICAgICAgICAgICAgIG91dCA8PCAiLiI7Ci0gICAgICAgICAg
ICAgICAgY29uc3QgVFN0cnVjdHVyZSogc3RydWN0dXJlID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRU
eXBlKCkuZ2V0U3RydWN0KCk7Ci0gICAgICAgICAgICAgICAgY29uc3QgVEludGVybUNvbnN0YW50
VW5pb24qIGluZGV4ID0gbm9kZS0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0g
ICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkKiBmaWVsZCA9IHN0cnVjdHVyZS0+ZmllbGRzKClb
aW5kZXgtPmdldElDb25zdCgwKV07Ci0KLSAgICAgICAgICAgICAgICBUU3RyaW5nIGZpZWxkTmFt
ZSA9IGZpZWxkLT5uYW1lKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFtU3ltYm9sVGFibGUuZmlu
ZEJ1aWx0SW4oc3RydWN0dXJlLT5uYW1lKCkpKQotICAgICAgICAgICAgICAgICAgICBmaWVsZE5h
bWUgPSBoYXNoTmFtZShmaWVsZE5hbWUpOwotCi0gICAgICAgICAgICAgICAgb3V0IDw8IGZpZWxk
TmFtZTsKLSAgICAgICAgICAgICAgICB2aXNpdENoaWxkcmVuID0gZmFsc2U7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BWZWN0b3JTd2l6emxlOgot
ICAgICAgICAgICAgaWYgKHZpc2l0ID09IEluVmlzaXQpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgb3V0IDw8ICIuIjsKLSAgICAgICAgICAgICAgICBUSW50ZXJtQWdncmVnYXRlKiBy
aWdodENoaWxkID0gbm9kZS0+Z2V0UmlnaHQoKS0+Z2V0QXNBZ2dyZWdhdGUoKTsKLSAgICAgICAg
ICAgICAgICBUSW50ZXJtU2VxdWVuY2UmIHNlcXVlbmNlID0gcmlnaHRDaGlsZC0+Z2V0U2VxdWVu
Y2UoKTsKLSAgICAgICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0
ID0gc2VxdWVuY2UuYmVnaW4oKTsgc2l0ICE9IHNlcXVlbmNlLmVuZCgpOyArK3NpdCkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiBl
bGVtZW50ID0gKCpzaXQpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLSAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKGVsZW1lbnQtPmdldEJhc2ljVHlwZSgpID09IEVidEludCk7Ci0gICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChlbGVtZW50LT5nZXROb21pbmFsU2l6ZSgpID09IDEpOwotICAgICAg
ICAgICAgICAgICAgICBjb25zdCBDb25zdGFudFVuaW9uJiBkYXRhID0gZWxlbWVudC0+Z2V0VW5p
b25BcnJheVBvaW50ZXIoKVswXTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGRhdGEuZ2V0
VHlwZSgpID09IEVidEludCk7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YS5nZXRJ
Q29uc3QoKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAwOiBvdXQgPDwgIngiOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
MTogb3V0IDw8ICJ5IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IG91
dCA8PCAieiI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvdXQgPDwg
InciOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wQWRkOiB3cml0ZVRyaXBsZXQodmlzaXQs
ICIoIiwgIiArICIsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcFN1Yjogd3JpdGVUcmlw
bGV0KHZpc2l0LCAiKCIsICIgLSAiLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BNdWw6
IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiICogIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRU9wRGl2OiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAvICIsICIpIik7IGJyZWFrOwot
ICAgICAgICBjYXNlIEVPcE1vZDogVU5JTVBMRU1FTlRFRCgpOyBicmVhazsKLSAgICAgICAgY2Fz
ZSBFT3BFcXVhbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgPT0gIiwgIikiKTsgYnJlYWs7
Ci0gICAgICAgIGNhc2UgRU9wTm90RXF1YWw6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiICE9
ICIsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcExlc3NUaGFuOiB3cml0ZVRyaXBsZXQo
dmlzaXQsICIoIiwgIiA8ICIsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEdyZWF0ZXJU
aGFuOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiA+ICIsICIpIik7IGJyZWFrOwotICAgICAg
ICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiIDw9ICIs
ICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6IHdyaXRlVHJp
cGxldCh2aXNpdCwgIigiLCAiID49ICIsICIpIik7IGJyZWFrOwotCi0gICAgICAgIC8vIE5vdGlj
ZSB0aGUgZmFsbC10aHJvdWdoLgotICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyOgot
ICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4OgotICAgICAgICBjYXNlIEVPcE1hdHJp
eFRpbWVzVmVjdG9yOgotICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyOgotICAgICAg
ICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4OgotICAgICAgICAgICAgd3JpdGVUcmlwbGV0KHZp
c2l0LCAiKCIsICIgKiAiLCAiKSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2Fz
ZSBFT3BMb2dpY2FsT3I6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiIHx8ICIsICIpIik7IGJy
ZWFrOwotICAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigi
LCAiIF5eICIsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6IHdyaXRl
VHJpcGxldCh2aXNpdCwgIigiLCAiICYmICIsICIpIik7IGJyZWFrOwotICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmlzaXRDaGlsZHJl
bjsKLX0KLQotYm9vbCBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1VbmFyeSogbm9kZSkKLXsKLSAgICBUU3RyaW5nIHByZVN0cmluZzsKLSAgICBUU3RyaW5n
IHBvc3RTdHJpbmcgPSAiKSI7Ci0KLSAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCi0gICAgewot
ICAgICAgICBjYXNlIEVPcE5lZ2F0aXZlOiBwcmVTdHJpbmcgPSAiKC0iOyBicmVhazsKLSAgICAg
ICAgY2FzZSBFT3BWZWN0b3JMb2dpY2FsTm90OiBwcmVTdHJpbmcgPSAibm90KCI7IGJyZWFrOwot
ICAgICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6IHByZVN0cmluZyA9ICIoISI7IGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDogcHJlU3RyaW5nID0gIigiOyBwb3N0U3RyaW5n
ID0gIisrKSI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6IHByZVN0cmlu
ZyA9ICIoIjsgcG9zdFN0cmluZyA9ICItLSkiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BQcmVJ
bmNyZW1lbnQ6IHByZVN0cmluZyA9ICIoKysiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BQcmVE
ZWNyZW1lbnQ6IHByZVN0cmluZyA9ICIoLS0iOyBicmVhazsKLQotICAgICAgICBjYXNlIEVPcENv
bnZJbnRUb0Jvb2w6Ci0gICAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9Cb29sOgotICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgMTogcHJlU3RyaW5nID0gICJi
b29sKCI7ICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDI6IHByZVN0cmluZyA9ICJidmVj
MigiOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDM6IHByZVN0cmluZyA9ICJidmVjMygi
OyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDQ6IHByZVN0cmluZyA9ICJidmVjNCgiOyBi
cmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0Zsb2F0
OgotICAgICAgICBjYXNlIEVPcENvbnZJbnRUb0Zsb2F0OgotICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGNhc2UgMTogcHJlU3RyaW5nID0gImZsb2F0KCI7ICBicmVh
azsKLSAgICAgICAgICAgICAgICBjYXNlIDI6IHByZVN0cmluZyA9ICJ2ZWMyKCI7IGJyZWFrOwot
ICAgICAgICAgICAgICAgIGNhc2UgMzogcHJlU3RyaW5nID0gInZlYzMoIjsgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgY2FzZSA0OiBwcmVTdHJpbmcgPSAidmVjNCgiOyBicmVhazsKLSAgICAgICAg
ICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9JbnQ6Ci0gICAgICAgIGNhc2Ug
RU9wQ29udkJvb2xUb0ludDoKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgp
LT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBjYXNlIDE6IHByZVN0cmluZyA9ICJpbnQoIjsgIGJyZWFrOwotICAgICAgICAgICAgICAg
IGNhc2UgMjogcHJlU3RyaW5nID0gIml2ZWMyKCI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNh
c2UgMzogcHJlU3RyaW5nID0gIml2ZWMzKCI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ug
NDogcHJlU3RyaW5nID0gIml2ZWM0KCI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICBjYXNlIEVPcFJhZGlhbnM6IHByZVN0cmluZyA9ICJyYWRpYW5zKCI7IGJyZWFrOwotICAg
ICAgICBjYXNlIEVPcERlZ3JlZXM6IHByZVN0cmluZyA9ICJkZWdyZWVzKCI7IGJyZWFrOwotICAg
ICAgICBjYXNlIEVPcFNpbjogcHJlU3RyaW5nID0gInNpbigiOyBicmVhazsKLSAgICAgICAgY2Fz
ZSBFT3BDb3M6IHByZVN0cmluZyA9ICJjb3MoIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wVGFu
OiBwcmVTdHJpbmcgPSAidGFuKCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEFzaW46IHByZVN0
cmluZyA9ICJhc2luKCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEFjb3M6IHByZVN0cmluZyA9
ICJhY29zKCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEF0YW46IHByZVN0cmluZyA9ICJhdGFu
KCI7IGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wRXhwOiBwcmVTdHJpbmcgPSAiZXhwKCI7IGJy
ZWFrOwotICAgICAgICBjYXNlIEVPcExvZzogcHJlU3RyaW5nID0gImxvZygiOyBicmVhazsKLSAg
ICAgICAgY2FzZSBFT3BFeHAyOiBwcmVTdHJpbmcgPSAiZXhwMigiOyBicmVhazsKLSAgICAgICAg
Y2FzZSBFT3BMb2cyOiBwcmVTdHJpbmcgPSAibG9nMigiOyBicmVhazsKLSAgICAgICAgY2FzZSBF
T3BTcXJ0OiBwcmVTdHJpbmcgPSAic3FydCgiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BJbnZl
cnNlU3FydDogcHJlU3RyaW5nID0gImludmVyc2VzcXJ0KCI7IGJyZWFrOwotCi0gICAgICAgIGNh
c2UgRU9wQWJzOiBwcmVTdHJpbmcgPSAiYWJzKCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcFNp
Z246IHByZVN0cmluZyA9ICJzaWduKCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEZsb29yOiBw
cmVTdHJpbmcgPSAiZmxvb3IoIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ2VpbDogcHJlU3Ry
aW5nID0gImNlaWwoIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wRnJhY3Q6IHByZVN0cmluZyA9
ICJmcmFjdCgiOyBicmVhazsKLQotICAgICAgICBjYXNlIEVPcExlbmd0aDogcHJlU3RyaW5nID0g
Imxlbmd0aCgiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BOb3JtYWxpemU6IHByZVN0cmluZyA9
ICJub3JtYWxpemUoIjsgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BERmR4OiBwcmVTdHJpbmcg
PSAiZEZkeCgiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BERmR5OiBwcmVTdHJpbmcgPSAiZEZk
eSgiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BGd2lkdGg6IHByZVN0cmluZyA9ICJmd2lkdGgo
IjsgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BBbnk6IHByZVN0cmluZyA9ICJhbnkoIjsgYnJl
YWs7Ci0gICAgICAgIGNhc2UgRU9wQWxsOiBwcmVTdHJpbmcgPSAiYWxsKCI7IGJyZWFrOwotCi0g
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IGJyZWFrOwotICAgIH0KLQotICAgIGlmICh2
aXNpdCA9PSBQcmVWaXNpdCAmJiBub2RlLT5nZXRVc2VFbXVsYXRlZEZ1bmN0aW9uKCkpCi0gICAg
ICAgIHByZVN0cmluZyA9IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpHZXRFbXVsYXRlZEZ1bmN0
aW9uTmFtZShwcmVTdHJpbmcpOwotICAgIHdyaXRlVHJpcGxldCh2aXNpdCwgcHJlU3RyaW5nLmNf
c3RyKCksIE5VTEwsIHBvc3RTdHJpbmcuY19zdHIoKSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50
ZXJtU2VsZWN0aW9uKiBub2RlKQotewotICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNpbmso
KTsKLQotICAgIGlmIChub2RlLT51c2VzVGVybmFyeU9wZXJhdG9yKCkpCi0gICAgewotICAgICAg
ICAvLyBOb3RpY2UgdHdvIGJyYWNrZXRzIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZC4gVGhlIG91
dGVyIG9uZXMKLSAgICAgICAgLy8gZW5jYXBzdWxhdGUgdGhlIHdob2xlIHRlcm5hcnkgZXhwcmVz
c2lvbi4gVGhpcyBwcmVzZXJ2ZXMgdGhlCi0gICAgICAgIC8vIG9yZGVyIG9mIHByZWNlZGVuY2Ug
d2hlbiB0ZXJuYXJ5IGV4cHJlc3Npb25zIGFyZSB1c2VkIGluIGEKLSAgICAgICAgLy8gY29tcG91
bmQgZXhwcmVzc2lvbiwgaS5lLiwgYyA9IDIgKiAoYSA8IGIgPyAxIDogMikuCi0gICAgICAgIG91
dCA8PCAiKCgiOwotICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7
Ci0gICAgICAgIG91dCA8PCAiKSA/ICgiOwotICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+
dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIG91dCA8PCAiKSA6ICgiOwotICAgICAgICBub2RlLT5n
ZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBvdXQgPDwgIikpIjsKLSAg
ICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJpZiAoIjsKLSAgICAgICAgbm9k
ZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBvdXQgPDwgIilcbiI7
Ci0KLSAgICAgICAgaW5jcmVtZW50RGVwdGgobm9kZSk7Ci0gICAgICAgIHZpc2l0Q29kZUJsb2Nr
KG5vZGUtPmdldFRydWVCbG9jaygpKTsKLQotICAgICAgICBpZiAobm9kZS0+Z2V0RmFsc2VCbG9j
aygpKQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgImVsc2VcbiI7Ci0gICAgICAgICAg
ICB2aXNpdENvZGVCbG9jayhub2RlLT5nZXRGYWxzZUJsb2NrKCkpOwotICAgICAgICB9Ci0gICAg
ICAgIGRlY3JlbWVudERlcHRoKCk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdn
cmVnYXRlKiBub2RlKQotewotICAgIGJvb2wgdmlzaXRDaGlsZHJlbiA9IHRydWU7Ci0gICAgVElu
Zm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOwotICAgIFRTdHJpbmcgcHJlU3RyaW5nOwotICAg
IGJvb2wgZGVsYXllZFdyaXRlID0gZmFsc2U7Ci0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQot
ICAgIHsKLSAgICAgICAgY2FzZSBFT3BTZXF1ZW5jZTogewotICAgICAgICAgICAgLy8gU2NvcGUg
dGhlIHNlcXVlbmNlcyBleGNlcHQgd2hlbiBhdCB0aGUgZ2xvYmFsIHNjb3BlLgotICAgICAgICAg
ICAgaWYgKGRlcHRoID4gMCkgb3V0IDw8ICJ7XG4iOwotCi0gICAgICAgICAgICBpbmNyZW1lbnRE
ZXB0aChub2RlKTsKLSAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2Ug
PSBub2RlLT5nZXRTZXF1ZW5jZSgpOwotICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBzZXF1ZW5jZS5iZWdpbigpOwotICAgICAgICAgICAgICAg
ICBpdGVyICE9IHNlcXVlbmNlLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgVEludGVybU5vZGUqIG5vZGUgPSAqaXRlcjsKLSAgICAgICAgICAgICAgICBBU1NF
UlQobm9kZSAhPSBOVUxMKTsKLSAgICAgICAgICAgICAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsK
LQotICAgICAgICAgICAgICAgIGlmIChpc1NpbmdsZVN0YXRlbWVudChub2RlKSkKLSAgICAgICAg
ICAgICAgICAgICAgb3V0IDw8ICI7XG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVj
cmVtZW50RGVwdGgoKTsKLQotICAgICAgICAgICAgLy8gU2NvcGUgdGhlIHNlcXVlbmNlcyBleGNl
cHQgd2hlbiBhdCB0aGUgZ2xvYmFsIHNjb3BlLgotICAgICAgICAgICAgaWYgKGRlcHRoID4gMCkg
b3V0IDw8ICJ9XG4iOwotICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBFT3BQcm90b3R5cGU6IHsKLSAg
ICAgICAgICAgIC8vIEZ1bmN0aW9uIGRlY2xhcmF0aW9uLgotICAgICAgICAgICAgQVNTRVJUKHZp
c2l0ID09IFByZVZpc2l0KTsKLSAgICAgICAgICAgIHdyaXRlVmFyaWFibGVUeXBlKG5vZGUtPmdl
dFR5cGUoKSk7Ci0gICAgICAgICAgICBvdXQgPDwgIiAiIDw8IGhhc2hOYW1lKG5vZGUtPmdldE5h
bWUoKSk7Ci0KLSAgICAgICAgICAgIG91dCA8PCAiKCI7Ci0gICAgICAgICAgICB3cml0ZUZ1bmN0
aW9uUGFyYW1ldGVycyhub2RlLT5nZXRTZXF1ZW5jZSgpKTsKLSAgICAgICAgICAgIG91dCA8PCAi
KSI7Ci0KLSAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRU9wRnVuY3Rpb246IHsKLSAgICAgICAgICAg
IC8vIEZ1bmN0aW9uIGRlZmluaXRpb24uCi0gICAgICAgICAgICBBU1NFUlQodmlzaXQgPT0gUHJl
VmlzaXQpOwotICAgICAgICAgICAgd3JpdGVWYXJpYWJsZVR5cGUobm9kZS0+Z2V0VHlwZSgpKTsK
LSAgICAgICAgICAgIG91dCA8PCAiICIgPDwgaGFzaEZ1bmN0aW9uTmFtZShub2RlLT5nZXROYW1l
KCkpOwotCi0gICAgICAgICAgICBpbmNyZW1lbnREZXB0aChub2RlKTsKLSAgICAgICAgICAgIC8v
IEZ1bmN0aW9uIGRlZmluaXRpb24gbm9kZSBjb250YWlucyBvbmUgb3IgdHdvIGNoaWxkcmVuIG5v
ZGVzCi0gICAgICAgICAgICAvLyByZXByZXNlbnRpbmcgZnVuY3Rpb24gcGFyYW1ldGVycyBhbmQg
ZnVuY3Rpb24gYm9keS4gVGhlIGxhdHRlcgotICAgICAgICAgICAgLy8gaXMgbm90IHByZXNlbnQg
aW4gY2FzZSBvZiBlbXB0eSBmdW5jdGlvbiBib2RpZXMuCi0gICAgICAgICAgICBjb25zdCBUSW50
ZXJtU2VxdWVuY2UmIHNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKLSAgICAgICAgICAg
IEFTU0VSVCgoc2VxdWVuY2Uuc2l6ZSgpID09IDEpIHx8IChzZXF1ZW5jZS5zaXplKCkgPT0gMikp
OwotICAgICAgICAgICAgVEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBzZXFJdGVyID0g
c2VxdWVuY2UuYmVnaW4oKTsKLQotICAgICAgICAgICAgLy8gVHJhdmVyc2UgZnVuY3Rpb24gcGFy
YW1ldGVycy4KLSAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHBhcmFtcyA9ICgqc2VxSXRl
ciktPmdldEFzQWdncmVnYXRlKCk7Ci0gICAgICAgICAgICBBU1NFUlQocGFyYW1zICE9IE5VTEwp
OwotICAgICAgICAgICAgQVNTRVJUKHBhcmFtcy0+Z2V0T3AoKSA9PSBFT3BQYXJhbWV0ZXJzKTsK
LSAgICAgICAgICAgIHBhcmFtcy0+dHJhdmVyc2UodGhpcyk7Ci0KLSAgICAgICAgICAgIC8vIFRy
YXZlcnNlIGZ1bmN0aW9uIGJvZHkuCi0gICAgICAgICAgICBUSW50ZXJtQWdncmVnYXRlKiBib2R5
ID0gKytzZXFJdGVyICE9IHNlcXVlbmNlLmVuZCgpID8KLSAgICAgICAgICAgICAgICAoKnNlcUl0
ZXIpLT5nZXRBc0FnZ3JlZ2F0ZSgpIDogTlVMTDsKLSAgICAgICAgICAgIHZpc2l0Q29kZUJsb2Nr
KGJvZHkpOwotICAgICAgICAgICAgZGVjcmVtZW50RGVwdGgoKTsKLSAKLSAgICAgICAgICAgIC8v
IEZ1bGx5IHByb2Nlc3NlZDsgbm8gbmVlZCB0byB2aXNpdCBjaGlsZHJlbi4KLSAgICAgICAgICAg
IHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgRU9wRnVuY3Rpb25DYWxsOgotICAgICAgICAgICAgLy8gRnVuY3Rpb24gY2Fs
bC4KLSAgICAgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBvdXQgPDwgaGFzaEZ1bmN0aW9uTmFtZShub2RlLT5nZXROYW1lKCkpIDw8
ICIoIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlz
aXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
b3V0IDw8ICIpIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEVPcFBhcmFtZXRlcnM6IHsKLSAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHBhcmFtZXRlcnMu
Ci0gICAgICAgICAgICBBU1NFUlQodmlzaXQgPT0gUHJlVmlzaXQpOwotICAgICAgICAgICAgb3V0
IDw8ICIoIjsKLSAgICAgICAgICAgIHdyaXRlRnVuY3Rpb25QYXJhbWV0ZXJzKG5vZGUtPmdldFNl
cXVlbmNlKCkpOwotICAgICAgICAgICAgb3V0IDw8ICIpIjsKLSAgICAgICAgICAgIHZpc2l0Q2hp
bGRyZW4gPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgRU9wRGVjbGFyYXRpb246IHsKLSAgICAgICAgICAgIC8vIFZhcmlhYmxlIGRlY2xhcmF0aW9u
LgotICAgICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBub2RlLT5nZXRT
ZXF1ZW5jZSgpOwotICAgICAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1UeXBlZCogdmFyaWFibGUg
PSBzZXF1ZW5jZS5mcm9udCgpLT5nZXRBc1R5cGVkKCk7Ci0gICAgICAgICAgICAgICAgd3JpdGVW
YXJpYWJsZVR5cGUodmFyaWFibGUtPmdldFR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8
ICIgIjsKLSAgICAgICAgICAgICAgICBtRGVjbGFyaW5nVmFyaWFibGVzID0gdHJ1ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7Ci0gICAgICAgICAgICAgICAgbURl
Y2xhcmluZ1ZhcmlhYmxlcyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURlY2xhcmluZ1ZhcmlhYmxlcyA9IGZh
bHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBFT3BDb25zdHJ1Y3RGbG9hdDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZmxvYXQoIiwg
TlVMTCwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMjogd3JpdGVU
cmlwbGV0KHZpc2l0LCAidmVjMigiLCAiLCAiLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RWZWMzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJ2ZWMzKCIsICIsICIsICIpIik7
IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzQ6IHdyaXRlVHJpcGxldCh2aXNp
dCwgInZlYzQoIiwgIiwgIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0
Qm9vbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYm9vbCgiLCBOVUxMLCAiKSIpOyBicmVhazsKLSAg
ICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYnZlYzIo
IiwgIiwgIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzM6IHdy
aXRlVHJpcGxldCh2aXNpdCwgImJ2ZWMzKCIsICIsICIsICIpIik7IGJyZWFrOwotICAgICAgICBj
YXNlIEVPcENvbnN0cnVjdEJWZWM0OiB3cml0ZVRyaXBsZXQodmlzaXQsICJidmVjNCgiLCAiLCAi
LCAiKSIpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6IHdyaXRlVHJpcGxl
dCh2aXNpdCwgImludCgiLCBOVUxMLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25z
dHJ1Y3RJVmVjMjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiaXZlYzIoIiwgIiwgIiwgIikiKTsgYnJl
YWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzM6IHdyaXRlVHJpcGxldCh2aXNpdCwg
Iml2ZWMzKCIsICIsICIsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElW
ZWM0OiB3cml0ZVRyaXBsZXQodmlzaXQsICJpdmVjNCgiLCAiLCAiLCAiKSIpOyBicmVhazsKLSAg
ICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQyOiB3cml0ZVRyaXBsZXQodmlzaXQsICJtYXQyKCIs
ICIsICIsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6IHdyaXRl
VHJpcGxldCh2aXNpdCwgIm1hdDMoIiwgIiwgIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0TWF0NDogd3JpdGVUcmlwbGV0KHZpc2l0LCAibWF0NCgiLCAiLCAiLCAiKSIp
OyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RTdHJ1Y3Q6Ci0gICAgICAgICAgICBp
ZiAodmlzaXQgPT0gUHJlVmlzaXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29u
c3QgVFR5cGUmIHR5cGUgPSBub2RlLT5nZXRUeXBlKCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJU
KHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KTsKLSAgICAgICAgICAgICAgICBvdXQg
PDwgaGFzaE5hbWUodHlwZS5nZXRTdHJ1Y3QoKS0+bmFtZSgpKSA8PCAiKCI7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiKSI7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEVPcExlc3NUaGFu
OiBwcmVTdHJpbmcgPSAibGVzc1RoYW4oIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46IHByZVN0cmluZyA9ICJncmVhdGVyVGhhbigiOyBk
ZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFs
OiBwcmVTdHJpbmcgPSAibGVzc1RoYW5FcXVhbCgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVh
azsKLSAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiBwcmVTdHJpbmcgPSAiZ3JlYXRl
clRoYW5FcXVhbCgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKLSAgICAgICAgY2FzZSBF
T3BWZWN0b3JFcXVhbDogcHJlU3RyaW5nID0gImVxdWFsKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7
IGJyZWFrOwotICAgICAgICBjYXNlIEVPcFZlY3Rvck5vdEVxdWFsOiBwcmVTdHJpbmcgPSAibm90
RXF1YWwoIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29t
bWE6IHdyaXRlVHJpcGxldCh2aXNpdCwgTlVMTCwgIiwgIiwgTlVMTCk7IGJyZWFrOwotCi0gICAg
ICAgIGNhc2UgRU9wTW9kOiBwcmVTdHJpbmcgPSAibW9kKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7
IGJyZWFrOwotICAgICAgICBjYXNlIEVPcFBvdzogcHJlU3RyaW5nID0gInBvdygiOyBkZWxheWVk
V3JpdGUgPSB0cnVlOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BBdGFuOiBwcmVTdHJpbmcgPSAi
YXRhbigiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BNaW46
IHByZVN0cmluZyA9ICJtaW4oIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRU9wTWF4OiBwcmVTdHJpbmcgPSAibWF4KCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJy
ZWFrOwotICAgICAgICBjYXNlIEVPcENsYW1wOiBwcmVTdHJpbmcgPSAiY2xhbXAoIjsgZGVsYXll
ZFdyaXRlID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTWl4OiBwcmVTdHJpbmcgPSAi
bWl4KCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcFN0ZXA6
IHByZVN0cmluZyA9ICJzdGVwKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOwotICAgICAg
ICBjYXNlIEVPcFNtb290aFN0ZXA6IHByZVN0cmluZyA9ICJzbW9vdGhzdGVwKCI7IGRlbGF5ZWRX
cml0ZSA9IHRydWU7IGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wRGlzdGFuY2U6IHByZVN0cmlu
ZyA9ICJkaXN0YW5jZSgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKLSAgICAgICAgY2Fz
ZSBFT3BEb3Q6IHByZVN0cmluZyA9ICJkb3QoIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7
Ci0gICAgICAgIGNhc2UgRU9wQ3Jvc3M6IHByZVN0cmluZyA9ICJjcm9zcygiOyBkZWxheWVkV3Jp
dGUgPSB0cnVlOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BGYWNlRm9yd2FyZDogcHJlU3RyaW5n
ID0gImZhY2Vmb3J3YXJkKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOwotICAgICAgICBj
YXNlIEVPcFJlZmxlY3Q6IHByZVN0cmluZyA9ICJyZWZsZWN0KCI7IGRlbGF5ZWRXcml0ZSA9IHRy
dWU7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcFJlZnJhY3Q6IHByZVN0cmluZyA9ICJyZWZyYWN0
KCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcE11bDogcHJl
U3RyaW5nID0gIm1hdHJpeENvbXBNdWx0KCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOwot
Ci0gICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IGJyZWFrOwotICAgIH0KLSAgICBpZiAo
ZGVsYXllZFdyaXRlICYmIHZpc2l0ID09IFByZVZpc2l0ICYmIG5vZGUtPmdldFVzZUVtdWxhdGVk
RnVuY3Rpb24oKSkKLSAgICAgICAgcHJlU3RyaW5nID0gQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6
OkdldEVtdWxhdGVkRnVuY3Rpb25OYW1lKHByZVN0cmluZyk7Ci0gICAgaWYgKGRlbGF5ZWRXcml0
ZSkKLSAgICAgICAgd3JpdGVUcmlwbGV0KHZpc2l0LCBwcmVTdHJpbmcuY19zdHIoKSwgIiwgIiwg
IikiKTsKLSAgICByZXR1cm4gdmlzaXRDaGlsZHJlbjsKLX0KLQotYm9vbCBUT3V0cHV0R0xTTEJh
c2U6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqIG5vZGUpCi17Ci0gICAgVElu
Zm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOwotCi0gICAgaW5jcmVtZW50RGVwdGgobm9kZSk7
Ci0gICAgLy8gTG9vcCBoZWFkZXIuCi0gICAgVExvb3BUeXBlIGxvb3BUeXBlID0gbm9kZS0+Z2V0
VHlwZSgpOwotICAgIGlmIChsb29wVHlwZSA9PSBFTG9vcEZvcikgIC8vIGZvciBsb29wCi0gICAg
ewotICAgICAgICBpZiAoIW5vZGUtPmdldFVucm9sbEZsYWcoKSkgewotICAgICAgICAgICAgb3V0
IDw8ICJmb3IgKCI7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Z2V0SW5pdCgpKQotICAgICAgICAg
ICAgICAgIG5vZGUtPmdldEluaXQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICBvdXQg
PDwgIjsgIjsKLQotICAgICAgICAgICAgaWYgKG5vZGUtPmdldENvbmRpdGlvbigpKQotICAgICAg
ICAgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAg
ICAgIG91dCA8PCAiOyAiOwotCi0gICAgICAgICAgICBpZiAobm9kZS0+Z2V0RXhwcmVzc2lvbigp
KQotICAgICAgICAgICAgICAgIG5vZGUtPmdldEV4cHJlc3Npb24oKS0+dHJhdmVyc2UodGhpcyk7
Ci0gICAgICAgICAgICBvdXQgPDwgIilcbiI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBp
ZiAobG9vcFR5cGUgPT0gRUxvb3BXaGlsZSkgIC8vIHdoaWxlIGxvb3AKLSAgICB7Ci0gICAgICAg
IG91dCA8PCAid2hpbGUgKCI7Ci0gICAgICAgIEFTU0VSVChub2RlLT5nZXRDb25kaXRpb24oKSAh
PSBOVUxMKTsKLSAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOwot
ICAgICAgICBvdXQgPDwgIilcbiI7Ci0gICAgfQotICAgIGVsc2UgIC8vIGRvLXdoaWxlIGxvb3AK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChsb29wVHlwZSA9PSBFTG9vcERvV2hpbGUpOwotICAgICAg
ICBvdXQgPDwgImRvXG4iOwotICAgIH0KLQotICAgIC8vIExvb3AgYm9keS4KLSAgICBpZiAobm9k
ZS0+Z2V0VW5yb2xsRmxhZygpKQotICAgIHsKLSAgICAgICAgVExvb3BJbmRleEluZm8gaW5kZXhJ
bmZvOwotICAgICAgICBtTG9vcFVucm9sbC5GaWxsTG9vcEluZGV4SW5mbyhub2RlLCBpbmRleElu
Zm8pOwotICAgICAgICBtTG9vcFVucm9sbC5QdXNoKGluZGV4SW5mbyk7Ci0gICAgICAgIHdoaWxl
IChtTG9vcFVucm9sbC5TYXRpc2ZpZXNMb29wQ29uZGl0aW9uKCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHZpc2l0Q29kZUJsb2NrKG5vZGUtPmdldEJvZHkoKSk7Ci0gICAgICAgICAgICBtTG9v
cFVucm9sbC5TdGVwKCk7Ci0gICAgICAgIH0KLSAgICAgICAgbUxvb3BVbnJvbGwuUG9wKCk7Ci0g
ICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHZpc2l0Q29kZUJsb2NrKG5vZGUtPmdldEJv
ZHkoKSk7Ci0gICAgfQotCi0gICAgLy8gTG9vcCBmb290ZXIuCi0gICAgaWYgKGxvb3BUeXBlID09
IEVMb29wRG9XaGlsZSkgIC8vIGRvLXdoaWxlIGxvb3AKLSAgICB7Ci0gICAgICAgIG91dCA8PCAi
d2hpbGUgKCI7Ci0gICAgICAgIEFTU0VSVChub2RlLT5nZXRDb25kaXRpb24oKSAhPSBOVUxMKTsK
LSAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBv
dXQgPDwgIik7XG4iOwotICAgIH0KLSAgICBkZWNyZW1lbnREZXB0aCgpOwotCi0gICAgLy8gTm8g
bmVlZCB0byB2aXNpdCBjaGlsZHJlbi4gVGhleSBoYXZlIGJlZW4gYWxyZWFkeSBwcm9jZXNzZWQg
aW4KLSAgICAvLyB0aGlzIGZ1bmN0aW9uLgotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBU
T3V0cHV0R0xTTEJhc2U6OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKiBu
b2RlKQotewotICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkpCi0gICAgewotICAgICAgICBj
YXNlIEVPcEtpbGw6IHdyaXRlVHJpcGxldCh2aXNpdCwgImRpc2NhcmQiLCBOVUxMLCBOVUxMKTsg
YnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQnJlYWs6IHdyaXRlVHJpcGxldCh2aXNpdCwgImJyZWFr
IiwgTlVMTCwgTlVMTCk7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnRpbnVlOiB3cml0ZVRy
aXBsZXQodmlzaXQsICJjb250aW51ZSIsIE5VTEwsIE5VTEwpOyBicmVhazsKLSAgICAgICAgY2Fz
ZSBFT3BSZXR1cm46IHdyaXRlVHJpcGxldCh2aXNpdCwgInJldHVybiAiLCBOVUxMLCBOVUxMKTsg
YnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IGJyZWFrOwotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRDb2RlQmxv
Y2soVEludGVybU5vZGUqIG5vZGUpIHsKLSAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBvYmpTaW5r
KCk7Ci0gICAgaWYgKG5vZGUgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIG5vZGUtPnRyYXZlcnNl
KHRoaXMpOwotICAgICAgICAvLyBTaW5nbGUgc3RhdGVtZW50cyBub3QgcGFydCBvZiBhIHNlcXVl
bmNlIG5lZWQgdG8gYmUgdGVybWluYXRlZAotICAgICAgICAvLyB3aXRoIHNlbWktY29sb24uCi0g
ICAgICAgIGlmIChpc1NpbmdsZVN0YXRlbWVudChub2RlKSkKLSAgICAgICAgICAgIG91dCA8PCAi
O1xuIjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJ7XG59XG4iOyAg
Ly8gRW1wdHkgY29kZSBibG9jay4KLSAgICB9Ci19Ci0KLVRTdHJpbmcgVE91dHB1dEdMU0xCYXNl
OjpnZXRUeXBlTmFtZShjb25zdCBUVHlwZSYgdHlwZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlIG91
dDsKLSAgICBpZiAodHlwZS5pc01hdHJpeCgpKQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJtYXQi
OwotICAgICAgICBvdXQgPDwgdHlwZS5nZXROb21pbmFsU2l6ZSgpOwotICAgIH0KLSAgICBlbHNl
IGlmICh0eXBlLmlzVmVjdG9yKCkpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0QmFz
aWNUeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IG91dCA8PCAi
dmVjIjsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVidEludDogb3V0IDw8ICJpdmVjIjsgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIEVidEJvb2w6IG91dCA8PCAiYnZlYyI7IGJyZWFrOwotICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgb3V0IDw8IHR5cGUuZ2V0Tm9taW5hbFNpemUoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsK
LSAgICAgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQotICAgICAgICAg
ICAgb3V0IDw8IGhhc2hOYW1lKHR5cGUuZ2V0U3RydWN0KCktPm5hbWUoKSk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIG91dCA8PCB0eXBlLmdldEJhc2ljU3RyaW5nKCk7Ci0gICAgfQotICAg
IHJldHVybiBUU3RyaW5nKG91dC5jX3N0cigpKTsKLX0KLQotVFN0cmluZyBUT3V0cHV0R0xTTEJh
c2U6Omhhc2hOYW1lKGNvbnN0IFRTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKG1IYXNoRnVuY3Rp
b24gPT0gTlVMTCB8fCBuYW1lLmVtcHR5KCkpCi0gICAgICAgIHJldHVybiBuYW1lOwotICAgIE5h
bWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbU5hbWVNYXAuZmluZChuYW1lLmNfc3RyKCkpOwot
ICAgIGlmIChpdCAhPSBtTmFtZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQu
Y19zdHIoKTsKLSAgICBUU3RyaW5nIGhhc2hlZE5hbWUgPSBUSW50ZXJtVHJhdmVyc2VyOjpoYXNo
KG5hbWUsIG1IYXNoRnVuY3Rpb24pOwotICAgIG1OYW1lTWFwW25hbWUuY19zdHIoKV0gPSBoYXNo
ZWROYW1lLmNfc3RyKCk7Ci0gICAgcmV0dXJuIGhhc2hlZE5hbWU7Ci19Ci0KLVRTdHJpbmcgVE91
dHB1dEdMU0xCYXNlOjpoYXNoVmFyaWFibGVOYW1lKGNvbnN0IFRTdHJpbmcmIG5hbWUpCi17Ci0g
ICAgaWYgKG1TeW1ib2xUYWJsZS5maW5kQnVpbHRJbihuYW1lKSAhPSBOVUxMKQotICAgICAgICBy
ZXR1cm4gbmFtZTsKLSAgICByZXR1cm4gaGFzaE5hbWUobmFtZSk7Ci19Ci0KLVRTdHJpbmcgVE91
dHB1dEdMU0xCYXNlOjpoYXNoRnVuY3Rpb25OYW1lKGNvbnN0IFRTdHJpbmcmIG1hbmdsZWRfbmFt
ZSkKLXsKLSAgICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShtYW5nbGVk
X25hbWUpOwotICAgIGlmIChtU3ltYm9sVGFibGUuZmluZEJ1aWx0SW4obWFuZ2xlZF9uYW1lKSAh
PSBOVUxMIHx8IG5hbWUgPT0gIm1haW4iKQotICAgICAgICByZXR1cm4gbmFtZTsKLSAgICByZXR1
cm4gaGFzaE5hbWUobmFtZSk7Ci19Ci0KLWJvb2wgVE91dHB1dEdMU0xCYXNlOjpzdHJ1Y3REZWNs
YXJlZChjb25zdCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1E
ZWNsYXJlZFN0cnVjdHMuZmluZChzdHJ1Y3R1cmUtPm5hbWUoKSkgIT0gbURlY2xhcmVkU3RydWN0
cy5lbmQoKTsKLX0KLQotdm9pZCBUT3V0cHV0R0xTTEJhc2U6OmRlY2xhcmVTdHJ1Y3QoY29uc3Qg
VFN0cnVjdHVyZSogc3RydWN0dXJlKQotewotICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNp
bmsoKTsKLQotICAgIG91dCA8PCAic3RydWN0ICIgPDwgaGFzaE5hbWUoc3RydWN0dXJlLT5uYW1l
KCkpIDw8ICJ7XG4iOwotICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9IHN0cnVjdHVyZS0+
ZmllbGRzKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kp
Ci0gICAgewotICAgICAgICBjb25zdCBURmllbGQqIGZpZWxkID0gZmllbGRzW2ldOwotICAgICAg
ICBpZiAod3JpdGVWYXJpYWJsZVByZWNpc2lvbihmaWVsZC0+dHlwZSgpLT5nZXRQcmVjaXNpb24o
KSkpCi0gICAgICAgICAgICBvdXQgPDwgIiAiOwotICAgICAgICBvdXQgPDwgZ2V0VHlwZU5hbWUo
KmZpZWxkLT50eXBlKCkpIDw8ICIgIiA8PCBoYXNoTmFtZShmaWVsZC0+bmFtZSgpKTsKLSAgICAg
ICAgaWYgKGZpZWxkLT50eXBlKCktPmlzQXJyYXkoKSkKLSAgICAgICAgICAgIG91dCA8PCBhcnJh
eUJyYWNrZXRzKCpmaWVsZC0+dHlwZSgpKTsKLSAgICAgICAgb3V0IDw8ICI7XG4iOwotICAgIH0K
LSAgICBvdXQgPDwgIn0iOwotCi0gICAgbURlY2xhcmVkU3RydWN0cy5pbnNlcnQoc3RydWN0dXJl
LT5uYW1lKCkpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL091dHB1dEdMU0xCYXNlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvT3V0cHV0R0xTTEJhc2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk4
NjhjMDljY2Y3NTQ5MDBjOTg0MTc1MDZjOTA3YmJhYjIxN2NiZC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvT3V0cHV0R0xTTEJhc2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAK
LS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ1JPU1NDT01QSUxFUkdMU0xfT1VUUFVUR0xT
TEJBU0VfSF8KLSNkZWZpbmUgQ1JPU1NDT01QSUxFUkdMU0xfT1VUUFVUR0xTTEJBU0VfSF8KLQot
I2luY2x1ZGUgPHNldD4KLQotI2luY2x1ZGUgImNvbXBpbGVyL0Zvckxvb3BVbnJvbGwuaCIKLSNp
bmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9QYXJz
ZUNvbnRleHQuaCIKLQotY2xhc3MgVE91dHB1dEdMU0xCYXNlIDogcHVibGljIFRJbnRlcm1UcmF2
ZXJzZXIKLXsKLXB1YmxpYzoKLSAgICBUT3V0cHV0R0xTTEJhc2UoVEluZm9TaW5rQmFzZSYgb2Jq
U2luaywKLSAgICAgICAgICAgICAgICAgICAgU2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBj
bGFtcGluZ1N0cmF0ZWd5LAotICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhh
c2hGdW5jdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAg
ICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSk7Ci0KLXByb3RlY3RlZDoK
LSAgICBUSW5mb1NpbmtCYXNlJiBvYmpTaW5rKCkgeyByZXR1cm4gbU9ialNpbms7IH0KLSAgICB2
b2lkIHdyaXRlVHJpcGxldChWaXNpdCB2aXNpdCwgY29uc3QgY2hhciogcHJlU3RyLCBjb25zdCBj
aGFyKiBpblN0ciwgY29uc3QgY2hhciogcG9zdFN0cik7Ci0gICAgdm9pZCB3cml0ZVZhcmlhYmxl
VHlwZShjb25zdCBUVHlwZSYgdHlwZSk7Ci0gICAgdmlydHVhbCBib29sIHdyaXRlVmFyaWFibGVQ
cmVjaXNpb24oVFByZWNpc2lvbiBwcmVjaXNpb24pID0gMDsKLSAgICB2b2lkIHdyaXRlRnVuY3Rp
b25QYXJhbWV0ZXJzKGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgYXJncyk7Ci0gICAgY29uc3QgQ29u
c3RhbnRVbmlvbiogd3JpdGVDb25zdGFudFVuaW9uKGNvbnN0IFRUeXBlJiB0eXBlLCBjb25zdCBD
b25zdGFudFVuaW9uKiBwQ29uc3RVbmlvbik7Ci0gICAgVFN0cmluZyBnZXRUeXBlTmFtZShjb25z
dCBUVHlwZSYgdHlwZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5
bWJvbCogbm9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJt
Q29uc3RhbnRVbmlvbiogbm9kZSk7Ci0gICAgdmlydHVhbCBib29sIHZpc2l0QmluYXJ5KFZpc2l0
IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBub2RlKTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRVbmFy
eShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlz
aXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUpOwotICAgIHZp
cnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSog
bm9kZSk7Ci0gICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxv
b3AqIG5vZGUpOwotICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVElu
dGVybUJyYW5jaCogbm9kZSk7Ci0KLSAgICB2b2lkIHZpc2l0Q29kZUJsb2NrKFRJbnRlcm1Ob2Rl
KiBub2RlKTsKLQotCi0gICAgLy8gUmV0dXJuIHRoZSBvcmlnaW5hbCBuYW1lIGlmIGhhc2ggZnVu
Y3Rpb24gcG9pbnRlciBpcyBOVUxMOwotICAgIC8vIG90aGVyd2lzZSByZXR1cm4gdGhlIGhhc2hl
ZCBuYW1lLgotICAgIFRTdHJpbmcgaGFzaE5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSk7Ci0gICAg
Ly8gU2FtZSBhcyBoYXNoTmFtZSgpLCBidXQgd2l0aG91dCBoYXNoaW5nIGJ1aWx0LWluIHZhcmlh
Ymxlcy4KLSAgICBUU3RyaW5nIGhhc2hWYXJpYWJsZU5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSk7
Ci0gICAgLy8gU2FtZSBhcyBoYXNoTmFtZSgpLCBidXQgd2l0aG91dCBoYXNoaW5nIGJ1aWx0LWlu
IGZ1bmN0aW9ucy4KLSAgICBUU3RyaW5nIGhhc2hGdW5jdGlvbk5hbWUoY29uc3QgVFN0cmluZyYg
bWFuZ2xlZF9uYW1lKTsKLQotcHJpdmF0ZToKLSAgICBib29sIHN0cnVjdERlY2xhcmVkKGNvbnN0
IFRTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3Q7Ci0gICAgdm9pZCBkZWNsYXJlU3RydWN0KGNv
bnN0IFRTdHJ1Y3R1cmUqIHN0cnVjdHVyZSk7Ci0KLSAgICBUSW5mb1NpbmtCYXNlJiBtT2JqU2lu
azsKLSAgICBib29sIG1EZWNsYXJpbmdWYXJpYWJsZXM7Ci0KLSAgICAvLyBTdHJ1Y3RzIGFyZSBk
ZWNsYXJlZCBhcyB0aGUgdHJlZSBpcyB0cmF2ZXJzZWQuIFRoaXMgc2V0IGNvbnRhaW5zIGFsbAot
ICAgIC8vIHRoZSBzdHJ1Y3RzIGFscmVhZHkgZGVjbGFyZWQuIEl0IGlzIG1haW50YWluZWQgc28g
dGhhdCBhIHN0cnVjdCBpcwotICAgIC8vIGRlY2xhcmVkIG9ubHkgb25jZS4KLSAgICB0eXBlZGVm
IHN0ZDo6c2V0PFRTdHJpbmc+IERlY2xhcmVkU3RydWN0czsKLSAgICBEZWNsYXJlZFN0cnVjdHMg
bURlY2xhcmVkU3RydWN0czsKLQotICAgIEZvckxvb3BVbnJvbGwgbUxvb3BVbnJvbGw7Ci0KLSAg
ICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IG1DbGFtcGluZ1N0cmF0ZWd5OwotCi0gICAg
Ly8gbmFtZSBoYXNoaW5nLgotICAgIFNoSGFzaEZ1bmN0aW9uNjQgbUhhc2hGdW5jdGlvbjsKLQot
ICAgIE5hbWVNYXAmIG1OYW1lTWFwOwotCi0gICAgVFN5bWJvbFRhYmxlJiBtU3ltYm9sVGFibGU7
Ci19OwotCi0jZW5kaWYgIC8vIENST1NTQ09NUElMRVJHTFNMX09VVFBVVEdMU0xCQVNFX0hfCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExT
TC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MTVmMjI5Yzk4MDRiMjBhYmY4MGY3
NmZkMjc1MmQzMTYwOTVkYTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzEzMyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwot
Ci0jaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0SExTTC5oIgotCi0jaW5jbHVkZSAiY29tbW9uL2Fu
Z2xldXRpbHMuaCIKLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUgImNvbXBp
bGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaCIKLSNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5o
IgotI2luY2x1ZGUgImNvbXBpbGVyL1NlYXJjaFN5bWJvbC5oIgotI2luY2x1ZGUgImNvbXBpbGVy
L1VuZm9sZFNob3J0Q2lyY3VpdC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL05vZGVTZWFyY2guaCIK
LQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxjZmxvYXQ+Ci0jaW5jbHVkZSA8c3Rk
aW8uaD4KLQotbmFtZXNwYWNlIHNoCi17Ci0vLyBJbnRlZ2VyIHRvIFRTdHJpbmcgY29udmVyc2lv
bgotVFN0cmluZyBzdHIoaW50IGkpCi17Ci0gICAgY2hhciBidWZmZXJbMjBdOwotICAgIHNucHJp
bnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlZCIsIGkpOwotICAgIHJldHVybiBidWZmZXI7
Ci19Ci0KLU91dHB1dEhMU0w6Ok91dHB1dEhMU0woVFBhcnNlQ29udGV4dCAmY29udGV4dCwgY29u
c3QgU2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMsIFNoU2hhZGVyT3V0cHV0IG91dHB1dFR5
cGUpCi0gICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIHRydWUsIHRydWUpLCBtQ29udGV4dChj
b250ZXh0KSwgbU91dHB1dFR5cGUob3V0cHV0VHlwZSkKLXsKLSAgICBtVW5mb2xkU2hvcnRDaXJj
dWl0ID0gbmV3IFVuZm9sZFNob3J0Q2lyY3VpdChjb250ZXh0LCB0aGlzKTsKLSAgICBtSW5zaWRl
RnVuY3Rpb24gPSBmYWxzZTsKLQotICAgIG1Vc2VzVGV4dHVyZTJEID0gZmFsc2U7Ci0gICAgbVVz
ZXNUZXh0dXJlMkRfYmlhcyA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZTJEUHJvaiA9IGZhbHNl
OwotICAgIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJl
MkRQcm9qTG9kID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRMb2QgPSBmYWxzZTsKLSAgICBt
VXNlc1RleHR1cmVDdWJlID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlQ3ViZV9iaWFzID0gZmFs
c2U7Ci0gICAgbVVzZXNUZXh0dXJlQ3ViZUxvZCA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZTJE
TG9kMCA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzID0gZmFsc2U7Ci0gICAg
bVVzZXNUZXh0dXJlMkRQcm9qTG9kMCA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZTJEUHJvakxv
ZDBfYmlhcyA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QwID0gZmFsc2U7Ci0gICAg
bVVzZXNUZXh0dXJlQ3ViZUxvZDBfYmlhcyA9IGZhbHNlOwotICAgIG1Vc2VzRnJhZ0NvbG9yID0g
ZmFsc2U7Ci0gICAgbVVzZXNGcmFnRGF0YSA9IGZhbHNlOwotICAgIG1Vc2VzRGVwdGhSYW5nZSA9
IGZhbHNlOwotICAgIG1Vc2VzRnJhZ0Nvb3JkID0gZmFsc2U7Ci0gICAgbVVzZXNQb2ludENvb3Jk
ID0gZmFsc2U7Ci0gICAgbVVzZXNGcm9udEZhY2luZyA9IGZhbHNlOwotICAgIG1Vc2VzUG9pbnRT
aXplID0gZmFsc2U7Ci0gICAgbVVzZXNGcmFnRGVwdGggPSBmYWxzZTsKLSAgICBtVXNlc1hvciA9
IGZhbHNlOwotICAgIG1Vc2VzTW9kMSA9IGZhbHNlOwotICAgIG1Vc2VzTW9kMnYgPSBmYWxzZTsK
LSAgICBtVXNlc01vZDJmID0gZmFsc2U7Ci0gICAgbVVzZXNNb2QzdiA9IGZhbHNlOwotICAgIG1V
c2VzTW9kM2YgPSBmYWxzZTsKLSAgICBtVXNlc01vZDR2ID0gZmFsc2U7Ci0gICAgbVVzZXNNb2Q0
ZiA9IGZhbHNlOwotICAgIG1Vc2VzRmFjZWZvcndhcmQxID0gZmFsc2U7Ci0gICAgbVVzZXNGYWNl
Zm9yd2FyZDIgPSBmYWxzZTsKLSAgICBtVXNlc0ZhY2Vmb3J3YXJkMyA9IGZhbHNlOwotICAgIG1V
c2VzRmFjZWZvcndhcmQ0ID0gZmFsc2U7Ci0gICAgbVVzZXNBdGFuMl8xID0gZmFsc2U7Ci0gICAg
bVVzZXNBdGFuMl8yID0gZmFsc2U7Ci0gICAgbVVzZXNBdGFuMl8zID0gZmFsc2U7Ci0gICAgbVVz
ZXNBdGFuMl80ID0gZmFsc2U7Ci0gICAgbVVzZXNEaXNjYXJkUmV3cml0aW5nID0gZmFsc2U7Ci0K
LSAgICBtTnVtUmVuZGVyVGFyZ2V0cyA9IHJlc291cmNlcy5FWFRfZHJhd19idWZmZXJzID8gcmVz
b3VyY2VzLk1heERyYXdCdWZmZXJzIDogMTsKLQotICAgIG1TY29wZURlcHRoID0gMDsKLQotICAg
IG1VbmlxdWVJbmRleCA9IDA7Ci0KLSAgICBtQ29udGFpbnNMb29wRGlzY29udGludWl0eSA9IGZh
bHNlOwotICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsKLSAgICBtSW5zaWRlRGlzY29u
dGludW91c0xvb3AgPSBmYWxzZTsKLQotICAgIG1FeGNlc3NpdmVMb29wSW5kZXggPSBOVUxMOwot
Ci0gICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICB7Ci0gICAgICAg
IGlmIChtQ29udGV4dC5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikKLSAgICAgICAg
ewotICAgICAgICAgICAgbVVuaWZvcm1SZWdpc3RlciA9IDM7ICAgLy8gUmVzZXJ2ZSByZWdpc3Rl
cnMgZm9yIGR4X0RlcHRoUmFuZ2UsIGR4X1ZpZXdDb29yZHMgYW5kIGR4X0RlcHRoRnJvbnQKLSAg
ICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1Vbmlmb3JtUmVn
aXN0ZXIgPSAyOyAgIC8vIFJlc2VydmUgcmVnaXN0ZXJzIGZvciBkeF9EZXB0aFJhbmdlIGFuZCBk
eF9WaWV3QWRqdXN0Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAg
bVVuaWZvcm1SZWdpc3RlciA9IDA7Ci0gICAgfQotCi0gICAgbVNhbXBsZXJSZWdpc3RlciA9IDA7
Ci19Ci0KLU91dHB1dEhMU0w6On5PdXRwdXRITFNMKCkKLXsKLSAgICBkZWxldGUgbVVuZm9sZFNo
b3J0Q2lyY3VpdDsKLX0KLQotdm9pZCBPdXRwdXRITFNMOjpvdXRwdXQoKQotewotICAgIG1Db250
YWluc0xvb3BEaXNjb250aW51aXR5ID0gbUNvbnRleHQuc2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVO
VF9TSEFERVIgJiYgY29udGFpbnNMb29wRGlzY29udGludWl0eShtQ29udGV4dC50cmVlUm9vdCk7
Ci0KLSAgICBtQ29udGV4dC50cmVlUm9vdC0+dHJhdmVyc2UodGhpcyk7ICAgLy8gT3V0cHV0IHRo
ZSBib2R5IGZpcnN0IHRvIGRldGVybWluZSB3aGF0IGhhcyB0byBnbyBpbiB0aGUgaGVhZGVyCi0g
ICAgaGVhZGVyKCk7Ci0KLSAgICBtQ29udGV4dC5pbmZvU2luaygpLm9iaiA8PCBtSGVhZGVyLmNf
c3RyKCk7Ci0gICAgbUNvbnRleHQuaW5mb1NpbmsoKS5vYmogPDwgbUJvZHkuY19zdHIoKTsKLX0K
LQotVEluZm9TaW5rQmFzZSAmT3V0cHV0SExTTDo6Z2V0Qm9keVN0cmVhbSgpCi17Ci0gICAgcmV0
dXJuIG1Cb2R5OwotfQotCi1jb25zdCBBY3RpdmVVbmlmb3JtcyAmT3V0cHV0SExTTDo6Z2V0VW5p
Zm9ybXMoKQotewotICAgIHJldHVybiBtQWN0aXZlVW5pZm9ybXM7Ci19Ci0KLWludCBPdXRwdXRI
TFNMOjp2ZWN0b3JTaXplKGNvbnN0IFRUeXBlICZ0eXBlKSBjb25zdAotewotICAgIGludCBlbGVt
ZW50U2l6ZSA9IHR5cGUuaXNNYXRyaXgoKSA/IHR5cGUuZ2V0Tm9taW5hbFNpemUoKSA6IDE7Ci0g
ICAgaW50IGFycmF5U2l6ZSA9IHR5cGUuaXNBcnJheSgpID8gdHlwZS5nZXRBcnJheVNpemUoKSA6
IDE7Ci0KLSAgICByZXR1cm4gZWxlbWVudFNpemUgKiBhcnJheVNpemU7Ci19Ci0KLXZvaWQgT3V0
cHV0SExTTDo6aGVhZGVyKCkKLXsKLSAgICBTaFNoYWRlclR5cGUgc2hhZGVyVHlwZSA9IG1Db250
ZXh0LnNoYWRlclR5cGU7Ci0gICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUhlYWRlcjsKLQotICAg
IGZvciAoU3RydWN0RGVjbGFyYXRpb25zOjppdGVyYXRvciBzdHJ1Y3REZWNsYXJhdGlvbiA9IG1T
dHJ1Y3REZWNsYXJhdGlvbnMuYmVnaW4oKTsgc3RydWN0RGVjbGFyYXRpb24gIT0gbVN0cnVjdERl
Y2xhcmF0aW9ucy5lbmQoKTsgc3RydWN0RGVjbGFyYXRpb24rKykKLSAgICB7Ci0gICAgICAgIG91
dCA8PCAqc3RydWN0RGVjbGFyYXRpb247Ci0gICAgfQotCi0gICAgZm9yIChDb25zdHJ1Y3RvcnM6
Oml0ZXJhdG9yIGNvbnN0cnVjdG9yID0gbUNvbnN0cnVjdG9ycy5iZWdpbigpOyBjb25zdHJ1Y3Rv
ciAhPSBtQ29uc3RydWN0b3JzLmVuZCgpOyBjb25zdHJ1Y3RvcisrKQotICAgIHsKLSAgICAgICAg
b3V0IDw8ICpjb25zdHJ1Y3RvcjsKLSAgICB9Ci0KLSAgICBUU3RyaW5nIHVuaWZvcm1zOwotICAg
IFRTdHJpbmcgdmFyeWluZ3M7Ci0gICAgVFN0cmluZyBhdHRyaWJ1dGVzOwotCi0gICAgZm9yIChS
ZWZlcmVuY2VkU3ltYm9sczo6Y29uc3RfaXRlcmF0b3IgdW5pZm9ybSA9IG1SZWZlcmVuY2VkVW5p
Zm9ybXMuYmVnaW4oKTsgdW5pZm9ybSAhPSBtUmVmZXJlbmNlZFVuaWZvcm1zLmVuZCgpOyB1bmlm
b3JtKyspCi0gICAgewotICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IHVuaWZvcm0tPnNlY29u
ZC0+Z2V0VHlwZSgpOwotICAgICAgICBjb25zdCBUU3RyaW5nICZuYW1lID0gdW5pZm9ybS0+c2Vj
b25kLT5nZXRTeW1ib2woKTsKLQotICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDEx
X09VVFBVVCAmJiBJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpICAgLy8gQWxzbyBkZWNs
YXJlIHRoZSB0ZXh0dXJlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBpbmRleCA9IHNhbXBs
ZXJSZWdpc3RlcihtUmVmZXJlbmNlZFVuaWZvcm1zW25hbWVdKTsKLQotICAgICAgICAgICAgdW5p
Zm9ybXMgKz0gInVuaWZvcm0gU2FtcGxlclN0YXRlIHNhbXBsZXJfIiArIGRlY29yYXRlVW5pZm9y
bShuYW1lLCB0eXBlKSArIGFycmF5U3RyaW5nKHR5cGUpICsgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAiIDogcmVnaXN0ZXIocyIgKyBzdHIoaW5kZXgpICsgIik7XG4iOwotCi0gICAgICAgICAg
ICB1bmlmb3JtcyArPSAidW5pZm9ybSAiICsgdGV4dHVyZVN0cmluZyh0eXBlKSArICIgdGV4dHVy
ZV8iICsgZGVjb3JhdGVVbmlmb3JtKG5hbWUsIHR5cGUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAK
LSAgICAgICAgICAgICAgICAgICAgICAgICIgOiByZWdpc3Rlcih0IiArIHN0cihpbmRleCkgKyAi
KTtcbiI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICB1
bmlmb3JtcyArPSAidW5pZm9ybSAiICsgdHlwZVN0cmluZyh0eXBlKSArICIgIiArIGRlY29yYXRl
VW5pZm9ybShuYW1lLCB0eXBlKSArIGFycmF5U3RyaW5nKHR5cGUpICsgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAiIDogcmVnaXN0ZXIoIiArIHJlZ2lzdGVyU3RyaW5nKG1SZWZlcmVuY2VkVW5p
Zm9ybXNbbmFtZV0pICsgIik7XG4iOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChSZWZl
cmVuY2VkU3ltYm9sczo6Y29uc3RfaXRlcmF0b3IgdmFyeWluZyA9IG1SZWZlcmVuY2VkVmFyeWlu
Z3MuYmVnaW4oKTsgdmFyeWluZyAhPSBtUmVmZXJlbmNlZFZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5n
KyspCi0gICAgewotICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IHZhcnlpbmctPnNlY29uZC0+
Z2V0VHlwZSgpOwotICAgICAgICBjb25zdCBUU3RyaW5nICZuYW1lID0gdmFyeWluZy0+c2Vjb25k
LT5nZXRTeW1ib2woKTsKLQotICAgICAgICAvLyBQcm9ncmFtIGxpbmtpbmcgZGVwZW5kcyBvbiB0
aGlzIGV4YWN0IGZvcm1hdAotICAgICAgICB2YXJ5aW5ncyArPSAic3RhdGljICIgKyB0eXBlU3Ry
aW5nKHR5cGUpICsgIiAiICsgZGVjb3JhdGUobmFtZSkgKyBhcnJheVN0cmluZyh0eXBlKSArICIg
PSAiICsgaW5pdGlhbGl6ZXIodHlwZSkgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICBmb3IgKFJlZmVy
ZW5jZWRTeW1ib2xzOjpjb25zdF9pdGVyYXRvciBhdHRyaWJ1dGUgPSBtUmVmZXJlbmNlZEF0dHJp
YnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1SZWZlcmVuY2VkQXR0cmlidXRlcy5lbmQoKTsg
YXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IGF0dHJpYnV0
ZS0+c2Vjb25kLT5nZXRUeXBlKCk7Ci0gICAgICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSBhdHRy
aWJ1dGUtPnNlY29uZC0+Z2V0U3ltYm9sKCk7Ci0KLSAgICAgICAgYXR0cmlidXRlcyArPSAic3Rh
dGljICIgKyB0eXBlU3RyaW5nKHR5cGUpICsgIiAiICsgZGVjb3JhdGUobmFtZSkgKyBhcnJheVN0
cmluZyh0eXBlKSArICIgPSAiICsgaW5pdGlhbGl6ZXIodHlwZSkgKyAiO1xuIjsKLSAgICB9Ci0K
LSAgICBpZiAobVVzZXNEaXNjYXJkUmV3cml0aW5nKQotICAgIHsKLSAgICAgICAgb3V0IDw8ICIj
ZGVmaW5lIEFOR0xFX1VTRVNfRElTQ0FSRF9SRVdSSVRJTkciIDw8ICJcbiI7Ci0gICAgfQotCi0g
ICAgaWYgKHNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKQotICAgIHsKLSAgICAgICAg
VEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbUNvbnRleHQuZXh0ZW5z
aW9uQmVoYXZpb3IoKS5maW5kKCJHTF9FWFRfZHJhd19idWZmZXJzIik7Ci0gICAgICAgIGNvbnN0
IGJvb2wgdXNpbmdNUlRFeHRlbnNpb24gPSAoaXRlciAhPSBtQ29udGV4dC5leHRlbnNpb25CZWhh
dmlvcigpLmVuZCgpICYmIChpdGVyLT5zZWNvbmQgPT0gRUJoRW5hYmxlIHx8IGl0ZXItPnNlY29u
ZCA9PSBFQmhSZXF1aXJlKSk7Ci0KLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG51bUNvbG9y
VmFsdWVzID0gdXNpbmdNUlRFeHRlbnNpb24gPyBtTnVtUmVuZGVyVGFyZ2V0cyA6IDE7Ci0KLSAg
ICAgICAgb3V0IDw8ICIvLyBWYXJ5aW5nc1xuIjsKLSAgICAgICAgb3V0IDw8ICB2YXJ5aW5nczsK
LSAgICAgICAgb3V0IDw8ICJcbiIKLSAgICAgICAgICAgICAgICJzdGF0aWMgZmxvYXQ0IGdsX0Nv
bG9yWyIgPDwgbnVtQ29sb3JWYWx1ZXMgPDwgIl0gPVxuIgotICAgICAgICAgICAgICAgIntcbiI7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtQ29sb3JWYWx1ZXM7IGkr
KykKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQ0KDAsIDAsIDAsIDAp
IjsKLSAgICAgICAgICAgIGlmIChpICsgMSAhPSBudW1Db2xvclZhbHVlcykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIiwiOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgb3V0IDw8ICJcbiI7Ci0gICAgICAgIH0KLSAgICAgICAgb3V0IDw8ICJ9O1xuIjsKLQotICAg
ICAgICBpZiAobVVzZXNGcmFnRGVwdGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAi
c3RhdGljIGZsb2F0IGdsX0RlcHRoID0gMC4wO1xuIjsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChtVXNlc0ZyYWdDb29yZCkKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMg
ZmxvYXQ0IGdsX0ZyYWdDb29yZCA9IGZsb2F0NCgwLCAwLCAwLCAwKTtcbiI7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAobVVzZXNQb2ludENvb3JkKQotICAgICAgICB7Ci0gICAgICAgICAgICBv
dXQgPDwgInN0YXRpYyBmbG9hdDIgZ2xfUG9pbnRDb29yZCA9IGZsb2F0MigwLjUsIDAuNSk7XG4i
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1Vc2VzRnJvbnRGYWNpbmcpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGJvb2wgZ2xfRnJvbnRGYWNpbmcgPSBmYWxzZTtc
biI7Ci0gICAgICAgIH0KLQotICAgICAgICBvdXQgPDwgIlxuIjsKLQotICAgICAgICBpZiAobVVz
ZXNEZXB0aFJhbmdlKQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgInN0cnVjdCBnbF9E
ZXB0aFJhbmdlUGFyYW1ldGVyc1xuIgotICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAg
ICAgICAgICAgICAgIiAgICBmbG9hdCBuZWFyO1xuIgotICAgICAgICAgICAgICAgICAgICIgICAg
ZmxvYXQgZmFyO1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZGlmZjtcbiIKLSAg
ICAgICAgICAgICAgICAgICAifTtcbiIKLSAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAiY2J1ZmZlciBEcml2ZXJDb25zdGFudHMgOiByZWdp
c3RlcihiMSlcbiIKLSAgICAgICAgICAgICAgICAgICAie1xuIjsKLQotICAgICAgICAgICAgaWYg
KG1Vc2VzRGVwdGhSYW5nZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwg
IiAgICBmbG9hdDMgZHhfRGVwdGhSYW5nZSA6IHBhY2tvZmZzZXQoYzApO1xuIjsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKG1Vc2VzRnJhZ0Nvb3JkKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0NCBkeF9WaWV3Q29vcmRzIDogcGFja29m
ZnNldChjMSk7XG4iOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobVVzZXNGcmFn
Q29vcmQgfHwgbVVzZXNGcm9udEZhY2luZykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBvdXQgPDwgIiAgICBmbG9hdDMgZHhfRGVwdGhGcm9udCA6IHBhY2tvZmZzZXQoYzIpO1xuIjsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgb3V0IDw8ICJ9O1xuIjsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtVXNlc0RlcHRoUmFuZ2Up
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJ1bmlmb3JtIGZsb2F0MyBk
eF9EZXB0aFJhbmdlIDogcmVnaXN0ZXIoYzApOyI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmIChtVXNlc0ZyYWdDb29yZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBv
dXQgPDwgInVuaWZvcm0gZmxvYXQ0IGR4X1ZpZXdDb29yZHMgOiByZWdpc3RlcihjMSk7XG4iOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobVVzZXNGcmFnQ29vcmQgfHwgbVVzZXNG
cm9udEZhY2luZykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgInVuaWZv
cm0gZmxvYXQzIGR4X0RlcHRoRnJvbnQgOiByZWdpc3RlcihjMik7XG4iOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgb3V0IDw8ICJcbiI7Ci0KLSAgICAgICAgaWYgKG1Vc2Vz
RGVwdGhSYW5nZSkKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgZ2xfRGVw
dGhSYW5nZVBhcmFtZXRlcnMgZ2xfRGVwdGhSYW5nZSA9IHtkeF9EZXB0aFJhbmdlLngsIGR4X0Rl
cHRoUmFuZ2UueSwgZHhfRGVwdGhSYW5nZS56fTtcbiIKLSAgICAgICAgICAgICAgICAgICAiXG4i
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBvdXQgPDwgIHVuaWZvcm1zOwotICAgICAg
ICBvdXQgPDwgIlxuIjsKLQotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKHNhbXBs
ZXIyRCBzLCBmbG9hdDIgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkQocywgdCk7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VU
UFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3Rl
eHR1cmUyRChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MiB1dilcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdC5TYW1wbGUocywgdXYpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxz
ZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJE
X2JpYXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNM
OV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQg
Z2xfdGV4dHVyZTJEKHNhbXBsZXIyRCBzLCBmbG9hdDIgdCwgZmxvYXQgYmlhcylcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdGV4MkRiaWFzKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgYmlhcykpO1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09V
VFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90
ZXh0dXJlMkQoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDIgdXYsIGZsb2F0IGJp
YXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICIgICAgcmV0dXJuIHQuU2FtcGxlQmlhcyhzLCB1diwgYmlhcyk7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAobVVzZXNUZXh0dXJlMkRQcm9qKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
bU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0
MyB0KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0ZXgyRHByb2oocywgZmxvYXQ0KHQueCwgdC55LCAwLCB0LnopKTtc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IlxuIgotICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2Ft
cGxlcjJEIHMsIGZsb2F0NCB0KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRHByb2oocywgdCk7XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNM
MTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0
IGdsX3RleHR1cmUyRFByb2ooVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3
KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAg
ICAiICAgIHJldHVybiB0LlNhbXBsZShzLCBmbG9hdDIodXZ3LnggLyB1dncueiwgdXZ3LnkgLyB1
dncueikpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAg
ICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJE
UHJvaihUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0NCB1dncpXG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHQuU2FtcGxlKHMsIGZsb2F0Mih1dncueCAvIHV2dy53LCB1dncueSAvIHV2dy53KSk7XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRQcm9qX2JpYXMpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1w
bGVyMkQgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEYmlhcyhzLCBm
bG9hdDQodC54IC8gdC56LCB0LnkgLyB0LnosIDAsIGJpYXMpKTtcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAg
ICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0NCB0
LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCAvIHQudywg
dC55IC8gdC53LCAwLCBiaWFzKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVyZTJE
IHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAg
ICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0
LlNhbXBsZUJpYXMocywgZmxvYXQyKHV2dy54IC8gdXZ3LnosIHV2dy55IC8gdXZ3LnopLCBiaWFz
KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIlxuIgotICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2oo
VGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3LCBmbG9hdCBiaWFzKVxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0LlNhbXBsZUJpYXMocywgZmxvYXQyKHV2dy54IC8gdXZ3LncsIHV2dy55IC8gdXZ3
LncpLCBiaWFzKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmVDdWJlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVD
dWJlKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
e1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFKHMsIHQpO1xu
IgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
XG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0g
U0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwg
ImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShUZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxv
YXQzIHV2dylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGUocywgdXZ3KTtcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChtVXNlc1RleHR1cmVDdWJlX2JpYXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICht
T3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoc2FtcGxlckNVQkUgcywgZmxvYXQz
IHQsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkViaWFzKHMsIGZsb2F0NCh0LngsIHQu
eSwgdC56LCBiaWFzKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlm
IChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlKFRleHR1cmVDdWJlIHQsIFNh
bXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAg
ICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBs
ZUJpYXMocywgdXZ3LCBiaWFzKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRoZXNlICpMb2QwIGlu
dHJpbnNpY3MgYXJlIG5vdCBhdmFpbGFibGUgaW4gR0wgZnJhZ21lbnQgc2hhZGVycy4KLSAgICAg
ICAgLy8gVGhleSBhcmUgdXNlZCB0byBzYW1wbGUgdXNpbmcgZGlzY29udGludW91cyB0ZXh0dXJl
IGNvb3JkaW5hdGVzLgotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRMb2QwKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAo
c2FtcGxlcjJEIHMsIGZsb2F0MiB0KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54
LCB0LnksIDAsIDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYg
KG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kMChUZXh0dXJlMkQgdCwgU2Ft
cGxlclN0YXRlIHMsIGZsb2F0MiB1dilcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1diwg
MCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJE
TG9kMChzYW1wbGVyMkQgcywgZmxvYXQyIHQsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJE
bG9kKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAg
ICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRMb2Qw
KFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2LCBmbG9hdCBiaWFzKVxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0LlNhbXBsZUxldmVsKHMsIHV2LCAwKTtcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICht
VXNlc1RleHR1cmUyRFByb2pMb2QwKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1
dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwKHNhbXBsZXIyRCBzLCBmbG9hdDMg
dClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAw
LCAwKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQ
cm9qTG9kKHNhbXBsZXIyRCBzLCBmbG9hdDQgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxv
YXQ0KHQueCAvIHQudywgdC55IC8gdC53LCAwLCAwKSk7XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFBy
b2pMb2QwKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dylcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIodXZ3LnggLyB1dncueiwgdXZ3LnkgLyB1dncueiks
IDApO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJv
akxvZDAoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3KVxuIgotICAgICAg
ICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVy
biB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy53LCB1dncueSAvIHV2dy53KSwg
MCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVU
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1
cmUyRFByb2pMb2QwX2JpYXMoc2FtcGxlcjJEIHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC56LCB0LnkgLyB0LnosIDAsIDApKTtc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IlxuIgotICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2Rf
YmlhcyhzYW1wbGVyMkQgcywgZmxvYXQ0IHQsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJE
bG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAvIHQudywgMCwgMCkpO1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09V
VFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90
ZXh0dXJlMkRQcm9qTG9kX2JpYXMoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMg
dXZ3LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncu
eCAvIHV2dy56LCB1dncueSAvIHV2dy56KSwgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kX2JpYXMoVGV4dHVyZTJEIHQsIFNhbXBsZXJT
dGF0ZSBzLCBmbG9hdDQgdXZ3LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAg
ICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVs
KHMsIGZsb2F0Mih1dncueCAvIHV2dy53LCB1dncueSAvIHV2dy53KSwgMCk7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZUxvZDApCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmVMb2QwKHNhbXBsZXJDVUJF
IHMsIGZsb2F0MyB0KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFbG9kKHMsIGZsb2F0NCh0LngsIHQueSwg
dC56LCAwKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0
cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChUZXh0dXJlQ3ViZSB0LCBTYW1w
bGVyU3RhdGUgcywgZmxvYXQzIHV2dylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1dncs
IDApO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXMpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVy
ZUN1YmVMb2QwKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgotICAgICAg
ICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVy
biB0ZXhDVUJFbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCAwKSk7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VU
UFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3Rl
eHR1cmVDdWJlTG9kMChUZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dywg
ZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1dncsIDApO1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKHVzaW5nTVJURXh0ZW5zaW9uICYmIG1OdW1SZW5kZXJUYXJnZXRzID4g
MSkKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICIjZGVmaW5lIEdMX1VTRVNfTVJUXG4i
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1Vc2VzRnJhZ0NvbG9yKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBvdXQgPDwgIiNkZWZpbmUgR0xfVVNFU19GUkFHX0NPTE9SXG4iOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKG1Vc2VzRnJhZ0RhdGEpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX0ZSQUdfREFUQVxuIjsKLSAgICAgICAgfQotICAgIH0K
LSAgICBlbHNlICAgLy8gVmVydGV4IHNoYWRlcgotICAgIHsKLSAgICAgICAgb3V0IDw8ICIvLyBB
dHRyaWJ1dGVzXG4iOwotICAgICAgICBvdXQgPDwgIGF0dHJpYnV0ZXM7Ci0gICAgICAgIG91dCA8
PCAiXG4iCi0gICAgICAgICAgICAgICAic3RhdGljIGZsb2F0NCBnbF9Qb3NpdGlvbiA9IGZsb2F0
NCgwLCAwLCAwLCAwKTtcbiI7Ci0gICAgICAgIAotICAgICAgICBpZiAobVVzZXNQb2ludFNpemUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGZsb2F0IGdsX1BvaW50U2l6
ZSA9IGZsb2F0KDEpO1xuIjsKLSAgICAgICAgfQotCi0gICAgICAgIG91dCA8PCAiXG4iCi0gICAg
ICAgICAgICAgICAiLy8gVmFyeWluZ3NcbiI7Ci0gICAgICAgIG91dCA8PCAgdmFyeWluZ3M7Ci0g
ICAgICAgIG91dCA8PCAiXG4iOwotCi0gICAgICAgIGlmIChtVXNlc0RlcHRoUmFuZ2UpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAic3RydWN0IGdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJz
XG4iCi0gICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIGZs
b2F0IG5lYXI7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBmYXI7XG4iCi0gICAg
ICAgICAgICAgICAgICAgIiAgICBmbG9hdCBkaWZmO1xuIgotICAgICAgICAgICAgICAgICAgICJ9
O1xuIgotICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
bU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKG1Vc2VzRGVwdGhSYW5nZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQg
PDwgImNidWZmZXIgRHJpdmVyQ29uc3RhbnRzIDogcmVnaXN0ZXIoYjEpXG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQzIGR4
X0RlcHRoUmFuZ2UgOiBwYWNrb2Zmc2V0KGMwKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
In07XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobVVzZXNEZXB0
aFJhbmdlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAidW5pZm9ybSBm
bG9hdDMgZHhfRGVwdGhSYW5nZSA6IHJlZ2lzdGVyKGMwKTtcbiI7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIG91dCA8PCAidW5pZm9ybSBmbG9hdDQgZHhfVmlld0FkanVzdCA6IHJlZ2lz
dGVyKGMxKTtcbiIKLSAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICJz
dGF0aWMgZ2xfRGVwdGhSYW5nZVBhcmFtZXRlcnMgZ2xfRGVwdGhSYW5nZSA9IHtkeF9EZXB0aFJh
bmdlLngsIGR4X0RlcHRoUmFuZ2UueSwgZHhfRGVwdGhSYW5nZS56fTtcbiIKLSAgICAgICAgICAg
ICAgICAgICAiXG4iOwotICAgICAgICB9Ci0KLSAgICAgICAgb3V0IDw8IHVuaWZvcm1zOwotICAg
ICAgICBvdXQgPDwgIlxuIjsKLSAgICAgICAgCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmUyRCkK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBV
VCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0
dXJlMkQoc2FtcGxlcjJEIHMsIGZsb2F0MiB0KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
e1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9h
dDQodC54LCB0LnksIDAsIDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKFRleHR1cmUyRCB0LCBT
YW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xu
IgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIHV2
LCAwKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUo
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExvZCkKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRMb2Qo
c2FtcGxlcjJEIHMsIGZsb2F0MiB0LCBmbG9hdCBsb2QpXG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMs
IGZsb2F0NCh0LngsIHQueSwgMCwgbG9kKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZChUZXh0
dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MiB1diwgZmxvYXQgbG9kKVxuIgotICAgICAg
ICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVy
biB0LlNhbXBsZUxldmVsKHMsIHV2LCBsb2QpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAi
fVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1Vc2Vz
VGV4dHVyZTJEUHJvaikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09
IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwg
ImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDMgdClcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCAwKSk7XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIy
RCBzLCBmbG9hdDQgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQudywg
dC55IC8gdC53LCAwLCAwKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
IGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVyZTJEIHQs
IFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
e1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMs
IGZsb2F0Mih1dncueCAvIHV2dy56LCB1dncueSAvIHV2dy56KSwgMCk7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKFRleHR1cmUyRCB0LCBTYW1w
bGVyU3RhdGUgcywgZmxvYXQ0IHV2dylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9h
dDIodXZ3LnggLyB1dncudywgdXZ3LnkgLyB1dncudyksIDApO1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKG1Vc2VzVGV4dHVyZTJEUHJvakxvZCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1P
dXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBzLCBmbG9h
dDMgdCwgZmxvYXQgbG9kKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC56
LCB0LnkgLyB0LnosIDAsIGxvZCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJmbG9h
dDQgZ2xfdGV4dHVyZTJEUHJvakxvZChzYW1wbGVyMkQgcywgZmxvYXQ0IHQsIGZsb2F0IGxvZClc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53LCAwLCBs
b2QpKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRU
eXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
b3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRl
IHMsIGZsb2F0MyB1dncsIGZsb2F0IGxvZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBm
bG9hdDIodXZ3LnggLyB1dncueiwgdXZ3LnkgLyB1dncueiksIGxvZCk7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKFRleHR1cmUyRCB0LCBTYW1w
bGVyU3RhdGUgcywgZmxvYXQ0IHV2dylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9h
dDIodXZ3LnggLyB1dncudywgdXZ3LnkgLyB1dncudyksIGxvZCk7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAobVVzZXNUZXh0dXJlQ3ViZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRw
dXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShzYW1wbGVyQ1VCRSBzLCBmbG9hdDMgdClc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IiAgICByZXR1cm4gdGV4Q1VCRWxvZChzLCBmbG9hdDQodC54LCB0LnksIHQueiwgMCkpO1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4i
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hf
SExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZs
b2F0NCBnbF90ZXh0dXJlQ3ViZShUZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQz
IHV2dylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1dncsIDApO1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVMb2QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmVMb2Qoc2FtcGxlckNVQkUgcywg
ZmxvYXQzIHQsIGZsb2F0IGxvZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRWxvZChzLCBmbG9hdDQodC54
LCB0LnksIHQueiwgbG9kKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
IGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kKFRleHR1cmVDdWJl
IHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3LCBmbG9hdCBsb2QpXG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQu
U2FtcGxlTGV2ZWwocywgdXZ3LCBsb2QpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxu
IgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1Vc2Vz
RnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAgb3V0IDw8ICIjZGVmaW5lIEdMX1VTRVNfRlJBR19D
T09SRFxuIjsKLSAgICB9Ci0KLSAgICBpZiAobVVzZXNQb2ludENvb3JkKQotICAgIHsKLSAgICAg
ICAgb3V0IDw8ICIjZGVmaW5lIEdMX1VTRVNfUE9JTlRfQ09PUkRcbiI7Ci0gICAgfQotCi0gICAg
aWYgKG1Vc2VzRnJvbnRGYWNpbmcpCi0gICAgewotICAgICAgICBvdXQgPDwgIiNkZWZpbmUgR0xf
VVNFU19GUk9OVF9GQUNJTkdcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1Vc2VzUG9pbnRTaXplKQot
ICAgIHsKLSAgICAgICAgb3V0IDw8ICIjZGVmaW5lIEdMX1VTRVNfUE9JTlRfU0laRVxuIjsKLSAg
ICB9Ci0KLSAgICBpZiAobVVzZXNGcmFnRGVwdGgpCi0gICAgewotICAgICAgICBvdXQgPDwgIiNk
ZWZpbmUgR0xfVVNFU19GUkFHX0RFUFRIXG4iOwotICAgIH0KLQotICAgIGlmIChtVXNlc0RlcHRo
UmFuZ2UpCi0gICAgewotICAgICAgICBvdXQgPDwgIiNkZWZpbmUgR0xfVVNFU19ERVBUSF9SQU5H
RVxuIjsKLSAgICB9Ci0KLSAgICBpZiAobVVzZXNYb3IpCi0gICAgewotICAgICAgICBvdXQgPDwg
ImJvb2wgeG9yKGJvb2wgcCwgYm9vbCBxKVxuIgotICAgICAgICAgICAgICAgIntcbiIKLSAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIChwIHx8IHEpICYmICEocCAmJiBxKTtcbiIKLSAgICAgICAg
ICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAiXG4iOwotICAgIH0KLQotICAgIGlmIChtVXNl
c01vZDEpCi0gICAgewotICAgICAgICBvdXQgPDwgImZsb2F0IG1vZChmbG9hdCB4LCBmbG9hdCB5
KVxuIgotICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHgg
LSB5ICogZmxvb3IoeCAvIHkpO1xuIgotICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAg
ICAgICJcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1Vc2VzTW9kMnYpCi0gICAgewotICAgICAgICBv
dXQgPDwgImZsb2F0MiBtb2QoZmxvYXQyIHgsIGZsb2F0MiB5KVxuIgotICAgICAgICAgICAgICAg
IntcbiIKLSAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHggLSB5ICogZmxvb3IoeCAvIHkpO1xu
IgotICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICJcbiI7Ci0gICAgfQotCi0g
ICAgaWYgKG1Vc2VzTW9kMmYpCi0gICAgewotICAgICAgICBvdXQgPDwgImZsb2F0MiBtb2QoZmxv
YXQyIHgsIGZsb2F0IHkpXG4iCi0gICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAg
IiAgICByZXR1cm4geCAtIHkgKiBmbG9vcih4IC8geSk7XG4iCi0gICAgICAgICAgICAgICAifVxu
IgotICAgICAgICAgICAgICAgIlxuIjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1Vc2VzTW9kM3Yp
Ci0gICAgewotICAgICAgICBvdXQgPDwgImZsb2F0MyBtb2QoZmxvYXQzIHgsIGZsb2F0MyB5KVxu
IgotICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHggLSB5
ICogZmxvb3IoeCAvIHkpO1xuIgotICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAg
ICJcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1Vc2VzTW9kM2YpCi0gICAgewotICAgICAgICBvdXQg
PDwgImZsb2F0MyBtb2QoZmxvYXQzIHgsIGZsb2F0IHkpXG4iCi0gICAgICAgICAgICAgICAie1xu
IgotICAgICAgICAgICAgICAgIiAgICByZXR1cm4geCAtIHkgKiBmbG9vcih4IC8geSk7XG4iCi0g
ICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgIlxuIjsKLSAgICB9Ci0KLSAgICBp
ZiAobVVzZXNNb2Q0dikKLSAgICB7Ci0gICAgICAgIG91dCA8PCAiZmxvYXQ0IG1vZChmbG9hdDQg
eCwgZmxvYXQ0IHkpXG4iCi0gICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgIiAg
ICByZXR1cm4geCAtIHkgKiBmbG9vcih4IC8geSk7XG4iCi0gICAgICAgICAgICAgICAifVxuIgot
ICAgICAgICAgICAgICAgIlxuIjsKLSAgICB9Ci0KLSAgICBpZiAobVVzZXNNb2Q0ZikKLSAgICB7
Ci0gICAgICAgIG91dCA8PCAiZmxvYXQ0IG1vZChmbG9hdDQgeCwgZmxvYXQgeSlcbiIKLSAgICAg
ICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAiICAgIHJldHVybiB4IC0geSAqIGZsb29y
KHggLyB5KTtcbiIKLSAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAiXG4iOwot
ICAgIH0KLQotICAgIGlmIChtVXNlc0ZhY2Vmb3J3YXJkMSkKLSAgICB7Ci0gICAgICAgIG91dCA8
PCAiZmxvYXQgZmFjZWZvcndhcmQoZmxvYXQgTiwgZmxvYXQgSSwgZmxvYXQgTnJlZilcbiIKLSAg
ICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAiICAgIGlmKGRvdChOcmVmLCBJKSA+
PSAwKVxuIgotICAgICAgICAgICAgICAgIiAgICB7XG4iCi0gICAgICAgICAgICAgICAiICAgICAg
ICByZXR1cm4gLU47XG4iCi0gICAgICAgICAgICAgICAiICAgIH1cbiIKLSAgICAgICAgICAgICAg
ICIgICAgZWxzZVxuIgotICAgICAgICAgICAgICAgIiAgICB7XG4iCi0gICAgICAgICAgICAgICAi
ICAgICAgICByZXR1cm4gTjtcbiIKLSAgICAgICAgICAgICAgICIgICAgfVxuIgotICAgICAgICAg
ICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICJcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1Vc2Vz
RmFjZWZvcndhcmQyKQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJmbG9hdDIgZmFjZWZvcndhcmQo
ZmxvYXQyIE4sIGZsb2F0MiBJLCBmbG9hdDIgTnJlZilcbiIKLSAgICAgICAgICAgICAgICJ7XG4i
Ci0gICAgICAgICAgICAgICAiICAgIGlmKGRvdChOcmVmLCBJKSA+PSAwKVxuIgotICAgICAgICAg
ICAgICAgIiAgICB7XG4iCi0gICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gLU47XG4iCi0g
ICAgICAgICAgICAgICAiICAgIH1cbiIKLSAgICAgICAgICAgICAgICIgICAgZWxzZVxuIgotICAg
ICAgICAgICAgICAgIiAgICB7XG4iCi0gICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gTjtc
biIKLSAgICAgICAgICAgICAgICIgICAgfVxuIgotICAgICAgICAgICAgICAgIn1cbiIKLSAgICAg
ICAgICAgICAgICJcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1Vc2VzRmFjZWZvcndhcmQzKQotICAg
IHsKLSAgICAgICAgb3V0IDw8ICJmbG9hdDMgZmFjZWZvcndhcmQoZmxvYXQzIE4sIGZsb2F0MyBJ
LCBmbG9hdDMgTnJlZilcbiIKLSAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAi
ICAgIGlmKGRvdChOcmVmLCBJKSA+PSAwKVxuIgotICAgICAgICAgICAgICAgIiAgICB7XG4iCi0g
ICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gLU47XG4iCi0gICAgICAgICAgICAgICAiICAg
IH1cbiIKLSAgICAgICAgICAgICAgICIgICAgZWxzZVxuIgotICAgICAgICAgICAgICAgIiAgICB7
XG4iCi0gICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gTjtcbiIKLSAgICAgICAgICAgICAg
ICIgICAgfVxuIgotICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICJcbiI7Ci0g
ICAgfQotCi0gICAgaWYgKG1Vc2VzRmFjZWZvcndhcmQ0KQotICAgIHsKLSAgICAgICAgb3V0IDw8
ICJmbG9hdDQgZmFjZWZvcndhcmQoZmxvYXQ0IE4sIGZsb2F0NCBJLCBmbG9hdDQgTnJlZilcbiIK
LSAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAiICAgIGlmKGRvdChOcmVmLCBJ
KSA+PSAwKVxuIgotICAgICAgICAgICAgICAgIiAgICB7XG4iCi0gICAgICAgICAgICAgICAiICAg
ICAgICByZXR1cm4gLU47XG4iCi0gICAgICAgICAgICAgICAiICAgIH1cbiIKLSAgICAgICAgICAg
ICAgICIgICAgZWxzZVxuIgotICAgICAgICAgICAgICAgIiAgICB7XG4iCi0gICAgICAgICAgICAg
ICAiICAgICAgICByZXR1cm4gTjtcbiIKLSAgICAgICAgICAgICAgICIgICAgfVxuIgotICAgICAg
ICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICJcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1V
c2VzQXRhbjJfMSkKLSAgICB7Ci0gICAgICAgIG91dCA8PCAiZmxvYXQgYXRhbnl4KGZsb2F0IHks
IGZsb2F0IHgpXG4iCi0gICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgIiAgICBp
Zih4ID09IDAgJiYgeSA9PSAwKSB4ID0gMTtcbiIgICAvLyBBdm9pZCBwcm9kdWNpbmcgYSBOYU4K
LSAgICAgICAgICAgICAgICIgICAgcmV0dXJuIGF0YW4yKHksIHgpO1xuIgotICAgICAgICAgICAg
ICAgIn1cbiI7Ci0gICAgfQotCi0gICAgaWYgKG1Vc2VzQXRhbjJfMikKLSAgICB7Ci0gICAgICAg
IG91dCA8PCAiZmxvYXQyIGF0YW55eChmbG9hdDIgeSwgZmxvYXQyIHgpXG4iCi0gICAgICAgICAg
ICAgICAie1xuIgotICAgICAgICAgICAgICAgIiAgICBpZih4WzBdID09IDAgJiYgeVswXSA9PSAw
KSB4WzBdID0gMTtcbiIKLSAgICAgICAgICAgICAgICIgICAgaWYoeFsxXSA9PSAwICYmIHlbMV0g
PT0gMCkgeFsxXSA9IDE7XG4iCi0gICAgICAgICAgICAgICAiICAgIHJldHVybiBmbG9hdDIoYXRh
bjIoeVswXSwgeFswXSksIGF0YW4yKHlbMV0sIHhbMV0pKTtcbiIKLSAgICAgICAgICAgICAgICJ9
XG4iOwotICAgIH0KLQotICAgIGlmIChtVXNlc0F0YW4yXzMpCi0gICAgewotICAgICAgICBvdXQg
PDwgImZsb2F0MyBhdGFueXgoZmxvYXQzIHksIGZsb2F0MyB4KVxuIgotICAgICAgICAgICAgICAg
IntcbiIKLSAgICAgICAgICAgICAgICIgICAgaWYoeFswXSA9PSAwICYmIHlbMF0gPT0gMCkgeFsw
XSA9IDE7XG4iCi0gICAgICAgICAgICAgICAiICAgIGlmKHhbMV0gPT0gMCAmJiB5WzFdID09IDAp
IHhbMV0gPSAxO1xuIgotICAgICAgICAgICAgICAgIiAgICBpZih4WzJdID09IDAgJiYgeVsyXSA9
PSAwKSB4WzJdID0gMTtcbiIKLSAgICAgICAgICAgICAgICIgICAgcmV0dXJuIGZsb2F0MyhhdGFu
Mih5WzBdLCB4WzBdKSwgYXRhbjIoeVsxXSwgeFsxXSksIGF0YW4yKHlbMl0sIHhbMl0pKTtcbiIK
LSAgICAgICAgICAgICAgICJ9XG4iOwotICAgIH0KLQotICAgIGlmIChtVXNlc0F0YW4yXzQpCi0g
ICAgewotICAgICAgICBvdXQgPDwgImZsb2F0NCBhdGFueXgoZmxvYXQ0IHksIGZsb2F0NCB4KVxu
IgotICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICIgICAgaWYoeFswXSA9PSAw
ICYmIHlbMF0gPT0gMCkgeFswXSA9IDE7XG4iCi0gICAgICAgICAgICAgICAiICAgIGlmKHhbMV0g
PT0gMCAmJiB5WzFdID09IDApIHhbMV0gPSAxO1xuIgotICAgICAgICAgICAgICAgIiAgICBpZih4
WzJdID09IDAgJiYgeVsyXSA9PSAwKSB4WzJdID0gMTtcbiIKLSAgICAgICAgICAgICAgICIgICAg
aWYoeFszXSA9PSAwICYmIHlbM10gPT0gMCkgeFszXSA9IDE7XG4iCi0gICAgICAgICAgICAgICAi
ICAgIHJldHVybiBmbG9hdDQoYXRhbjIoeVswXSwgeFswXSksIGF0YW4yKHlbMV0sIHhbMV0pLCBh
dGFuMih5WzJdLCB4WzJdKSwgYXRhbjIoeVszXSwgeFszXSkpO1xuIgotICAgICAgICAgICAgICAg
In1cbiI7Ci0gICAgfQotfQotCi12b2lkIE91dHB1dEhMU0w6OnZpc2l0U3ltYm9sKFRJbnRlcm1T
eW1ib2wgKm5vZGUpCi17Ci0gICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7Ci0KLSAgICBU
U3RyaW5nIG5hbWUgPSBub2RlLT5nZXRTeW1ib2woKTsKLQotICAgIGlmIChuYW1lID09ICJnbF9G
cmFnQ29sb3IiKQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJnbF9Db2xvclswXSI7Ci0gICAgICAg
IG1Vc2VzRnJhZ0NvbG9yID0gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xf
RnJhZ0RhdGEiKQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJnbF9Db2xvciI7Ci0gICAgICAgIG1V
c2VzRnJhZ0RhdGEgPSB0cnVlOwotICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9EZXB0
aFJhbmdlIikKLSAgICB7Ci0gICAgICAgIG1Vc2VzRGVwdGhSYW5nZSA9IHRydWU7Ci0gICAgICAg
IG91dCA8PCBuYW1lOwotICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9GcmFnQ29vcmQi
KQotICAgIHsKLSAgICAgICAgbVVzZXNGcmFnQ29vcmQgPSB0cnVlOwotICAgICAgICBvdXQgPDwg
bmFtZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfUG9pbnRDb29yZCIpCi0gICAg
ewotICAgICAgICBtVXNlc1BvaW50Q29vcmQgPSB0cnVlOwotICAgICAgICBvdXQgPDwgbmFtZTsK
LSAgICB9Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfRnJvbnRGYWNpbmciKQotICAgIHsKLSAg
ICAgICAgbVVzZXNGcm9udEZhY2luZyA9IHRydWU7Ci0gICAgICAgIG91dCA8PCBuYW1lOwotICAg
IH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9Qb2ludFNpemUiKQotICAgIHsKLSAgICAgICAg
bVVzZXNQb2ludFNpemUgPSB0cnVlOwotICAgICAgICBvdXQgPDwgbmFtZTsKLSAgICB9Ci0gICAg
ZWxzZSBpZiAobmFtZSA9PSAiZ2xfRnJhZ0RlcHRoRVhUIikKLSAgICB7Ci0gICAgICAgIG1Vc2Vz
RnJhZ0RlcHRoID0gdHJ1ZTsKLSAgICAgICAgb3V0IDw8ICJnbF9EZXB0aCI7Ci0gICAgfQotICAg
IGVsc2UKLSAgICB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gbm9kZS0+Z2V0UXVh
bGlmaWVyKCk7Ci0KLSAgICAgICAgaWYgKHF1YWxpZmllciA9PSBFdnFVbmlmb3JtKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBtUmVmZXJlbmNlZFVuaWZvcm1zW25hbWVdID0gbm9kZTsKLSAgICAg
ICAgICAgIG91dCA8PCBkZWNvcmF0ZVVuaWZvcm0obmFtZSwgbm9kZS0+Z2V0VHlwZSgpKTsKLSAg
ICAgICAgfQotICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtUmVmZXJlbmNlZEF0dHJpYnV0ZXNbbmFtZV0gPSBub2RlOwot
ICAgICAgICAgICAgb3V0IDw8IGRlY29yYXRlKG5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIGVs
c2UgaWYgKHF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8IHF1YWxpZmllciA9PSBFdnFJbnZh
cmlhbnRWYXJ5aW5nT3V0IHx8IHF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgcXVhbGlmaWVy
ID09IEV2cUludmFyaWFudFZhcnlpbmdJbikKLSAgICAgICAgewotICAgICAgICAgICAgbVJlZmVy
ZW5jZWRWYXJ5aW5nc1tuYW1lXSA9IG5vZGU7Ci0gICAgICAgICAgICBvdXQgPDwgZGVjb3JhdGUo
bmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBv
dXQgPDwgZGVjb3JhdGUobmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgT3V0cHV0
SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCi17Ci0g
ICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7Ci0KLSAgICBzd2l0Y2ggKG5vZGUtPmdldE9w
KCkpCi0gICAgewotICAgICAgY2FzZSBFT3BBc3NpZ246ICAgICAgICAgICAgICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgIigiLCAiID0gIiwgIikiKTsgICAgICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBFT3BJbml0aWFsaXplOgotICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIC8vIEdMU0wgYWxsb3dzIHRvIHdyaXRlIHRoaW5ncyBsaWtlICJm
bG9hdCB4ID0geDsiIHdoZXJlIGEgbmV3IHZhcmlhYmxlIHggaXMgZGVmaW5lZAotICAgICAgICAg
ICAgLy8gYW5kIHRoZSB2YWx1ZSBvZiBhbiBleGlzdGluZyB2YXJpYWJsZSB4IGlzIGFzc2lnbmVk
LiBITFNMIHVzZXMgQyBzZW1hbnRpY3MgKHRoZQotICAgICAgICAgICAgLy8gbmV3IHZhcmlhYmxl
IGlzIGNyZWF0ZWQgYmVmb3JlIHRoZSBhc3NpZ25tZW50IGlzIGV2YWx1YXRlZCksIHNvIHdlIG5l
ZWQgdG8gY29udmVydAotICAgICAgICAgICAgLy8gdGhpcyB0byAiZmxvYXQgdCA9IHgsIHggPSB0
OyIuCi0KLSAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUgPSBub2RlLT5nZXRM
ZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOwotICAgICAgICAgICAgVEludGVybVR5cGVkICpleHBy
ZXNzaW9uID0gbm9kZS0+Z2V0UmlnaHQoKTsKLQotICAgICAgICAgICAgc2g6OlNlYXJjaFN5bWJv
bCBzZWFyY2hTeW1ib2woc3ltYm9sTm9kZS0+Z2V0U3ltYm9sKCkpOwotICAgICAgICAgICAgZXhw
cmVzc2lvbi0+dHJhdmVyc2UoJnNlYXJjaFN5bWJvbCk7Ci0gICAgICAgICAgICBib29sIHNhbWVT
eW1ib2wgPSBzZWFyY2hTeW1ib2wuZm91bmRNYXRjaCgpOwotCi0gICAgICAgICAgICBpZiAoc2Ft
ZVN5bWJvbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBUeXBlIGFscmVhZHkg
cHJpbnRlZAotICAgICAgICAgICAgICAgIG91dCA8PCAidCIgKyBzdHIobVVuaXF1ZUluZGV4KSAr
ICIgPSAiOwotICAgICAgICAgICAgICAgIGV4cHJlc3Npb24tPnRyYXZlcnNlKHRoaXMpOwotICAg
ICAgICAgICAgICAgIG91dCA8PCAiLCAiOwotICAgICAgICAgICAgICAgIHN5bWJvbE5vZGUtPnRy
YXZlcnNlKHRoaXMpOwotICAgICAgICAgICAgICAgIG91dCA8PCAiID0gdCIgKyBzdHIobVVuaXF1
ZUluZGV4KTsKLQotICAgICAgICAgICAgICAgIG1VbmlxdWVJbmRleCsrOwotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNl
IGlmICh2aXNpdCA9PSBJblZpc2l0KQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgIiA9
ICI7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcEFkZEFzc2lnbjog
ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgKz0gIiwgIikiKTsgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFN1YkFzc2lnbjogICAgICAgICAgICAgICBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgLT0gIiwgIikiKTsgICAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEVPcE11bEFzc2lnbjogICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
KCIsICIgKj0gIiwgIikiKTsgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFZlY3RvclRp
bWVzU2NhbGFyQXNzaWduOiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgKj0gIiwgIikiKTsg
ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOiBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgKj0gIiwgIikiKTsgICAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOgotICAgICAgICBpZiAodmlzaXQg
PT0gUHJlVmlzaXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAiKCI7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCkKLSAgICAgICAgewotICAgICAg
ICAgICAgb3V0IDw8ICIgPSBtdWwoIjsKLSAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJh
dmVyc2UodGhpcyk7Ci0gICAgICAgICAgICBvdXQgPDwgIiwgdHJhbnNwb3NlKCI7ICAgCi0gICAg
ICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgIikpKSI7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0
cml4QXNzaWduOgotICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG91dCA8PCAiKCI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodmlzaXQg
PT0gSW5WaXNpdCkKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICIgPSBtdWwoIjsKLSAg
ICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICBv
dXQgPDwgIiwgIjsgICAKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG91dCA8PCAiKSkiOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBFT3BEaXZBc3NpZ246ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAi
IC89ICIsICIpIik7ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDog
ICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIiIsICJbIiwgIl0iKTsgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OiAgICAgICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgIiIsICJbIiwgIl0iKTsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBFT3BJbmRleERpcmVjdFN0cnVjdDoKLSAgICAgICAgaWYgKHZpc2l0ID09IEluVmlzaXQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG5v
ZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpOwotICAgICAgICAgICAgY29uc3Qg
VEludGVybUNvbnN0YW50VW5pb24qIGluZGV4ID0gbm9kZS0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25z
dGFudFVuaW9uKCk7Ci0gICAgICAgICAgICBjb25zdCBURmllbGQqIGZpZWxkID0gc3RydWN0dXJl
LT5maWVsZHMoKVtpbmRleC0+Z2V0SUNvbnN0KDApXTsKLSAgICAgICAgICAgIG91dCA8PCAiLiIg
KyBkZWNvcmF0ZUZpZWxkKGZpZWxkLT5uYW1lKCksIG5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgp
KTsKLQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBFT3BWZWN0b3JTd2l6emxlOgotICAgICAgICBpZiAodmlzaXQgPT0gSW5W
aXNpdCkKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICIuIjsKLQotICAgICAgICAgICAg
VEludGVybUFnZ3JlZ2F0ZSAqc3dpenpsZSA9IG5vZGUtPmdldFJpZ2h0KCktPmdldEFzQWdncmVn
YXRlKCk7Ci0KLSAgICAgICAgICAgIGlmIChzd2l6emxlKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2UgPSBzd2l6emxlLT5nZXRTZXF1ZW5j
ZSgpOwotCi0gICAgICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNp
dCA9IHNlcXVlbmNlLmJlZ2luKCk7IHNpdCAhPSBzZXF1ZW5jZS5lbmQoKTsgc2l0KyspCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAq
ZWxlbWVudCA9ICgqc2l0KS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGVsZW1lbnQpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpID0gZWxlbWVudC0+Z2V0SUNvbnN0KDApOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKGkpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIDA6IG91dCA8PCAieCI7IGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAxOiBvdXQgPDwgInkiOyBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgMjogb3V0IDw8ICJ6IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIDM6IG91dCA8PCAidyI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOwotCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gRnVsbHkgcHJvY2Vzc2Vk
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcEFkZDogICAgICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgKyAiLCAiKSIpOyBicmVhazsKLSAgICAg
IGNhc2UgRU9wU3ViOiAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAt
ICIsICIpIik7IGJyZWFrOwotICAgICAgY2FzZSBFT3BNdWw6ICAgICAgICAgICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgIigiLCAiICogIiwgIikiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcERp
djogICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgLyAiLCAiKSIpOyBi
cmVhazsKLSAgICAgIGNhc2UgRU9wRXF1YWw6Ci0gICAgICBjYXNlIEVPcE5vdEVxdWFsOgotICAg
ICAgICBpZiAobm9kZS0+Z2V0TGVmdCgpLT5pc1NjYWxhcigpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAobm9kZS0+Z2V0T3AoKSA9PSBFT3BFcXVhbCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPT0gIiwgIikiKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgIT0gIiwgIikiKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRMZWZ0KCktPmdldEJhc2ljVHlw
ZSgpID09IEVidFN0cnVjdCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG5vZGUtPmdldE9w
KCkgPT0gRU9wRXF1YWwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIo
IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBvdXQgPDwgIiEoIjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29u
c3QgVEZpZWxkTGlzdCAmZmllbGRzID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkuZ2V0U3Ry
dWN0KCktPmZpZWxkcygpOwotCi0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZp
ZWxkcy5zaXplKCk7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCBU
RmllbGQgKmZpZWxkID0gZmllbGRzW2ldOwotCi0gICAgICAgICAgICAgICAgbm9kZS0+Z2V0TGVm
dCgpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3Jh
dGVGaWVsZChmaWVsZC0+bmFtZSgpLCBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKSkgKyAiID09
ICI7Ci0gICAgICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7Ci0g
ICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGRlY29yYXRlRmllbGQoZmllbGQtPm5hbWUoKSwg
bm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkpOwotCi0gICAgICAgICAgICAgICAgaWYgKGkgPCBm
aWVsZHMuc2l6ZSgpIC0gMSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IG91dCA8PCAiICYmICI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBvdXQgPDwgIikiOwotCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS0+Z2V0
TGVmdCgpLT5pc01hdHJpeCgpIHx8IG5vZGUtPmdldExlZnQoKS0+aXNWZWN0b3IoKSk7Ci0KLSAg
ICAgICAgICAgIGlmIChub2RlLT5nZXRPcCgpID09IEVPcEVxdWFsKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJhbGwoIiwgIiA9PSAiLCAiKSIp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIhYWxsKCIsICIgPT0gIiwgIikiKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wTGVz
c1RoYW46ICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA8ICIsICIpIik7ICAg
YnJlYWs7Ci0gICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOiAgICAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAiKCIsICIgPiAiLCAiKSIpOyAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BMZXNzVGhhbkVx
dWFsOiAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIDw9ICIsICIpIik7ICBicmVhazsK
LSAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDogIG91dHB1dFRyaXBsZXQodmlzaXQsICIo
IiwgIiA+PSAiLCAiKSIpOyAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFy
OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgKiAiLCAiKSIpOyAgIGJyZWFrOwotICAgICAg
Y2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhcjogb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICog
IiwgIikiKTsgICBicmVhazsKLSAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXg6IG91dHB1
dFRyaXBsZXQodmlzaXQsICJtdWwoIiwgIiwgdHJhbnNwb3NlKCIsICIpKSIpOyBicmVhazsKLSAg
ICAgIGNhc2UgRU9wTWF0cml4VGltZXNWZWN0b3I6IG91dHB1dFRyaXBsZXQodmlzaXQsICJtdWwo
dHJhbnNwb3NlKCIsICIpLCAiLCAiKSIpOyBicmVhazsKLSAgICAgIGNhc2UgRU9wTWF0cml4VGlt
ZXNNYXRyaXg6IG91dHB1dFRyaXBsZXQodmlzaXQsICJ0cmFuc3Bvc2UobXVsKHRyYW5zcG9zZSgi
LCAiKSwgdHJhbnNwb3NlKCIsICIpKSkiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcExvZ2ljYWxP
cjoKLSAgICAgICAgaWYgKG5vZGUtPmdldFJpZ2h0KCktPmhhc1NpZGVFZmZlY3RzKCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAicyIgPDwgbVVuZm9sZFNob3J0Q2lyY3VpdC0+Z2V0
TmV4dFRlbXBvcmFyeUluZGV4KCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICIoIiwgIiB8fCAiLCAiKSIpOwotICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgY2FzZSBFT3BMb2dpY2FsWG9yOgotICAgICAgICBtVXNlc1hvciA9IHRydWU7Ci0g
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ4b3IoIiwgIiwgIiwgIikiKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6Ci0gICAgICAgIGlmIChub2RlLT5nZXRS
aWdodCgpLT5oYXNTaWRlRWZmZWN0cygpKQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwg
InMiIDw8IG1VbmZvbGRTaG9ydENpcmN1aXQtPmdldE5leHRUZW1wb3JhcnlJbmRleCgpOwotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ewotICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgJiYgIiwgIikiKTsKLSAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgT3V0cHV0SExTTDo6
dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5ICpub2RlKQotewotICAgIHN3aXRj
aCAobm9kZS0+Z2V0T3AoKSkKLSAgICB7Ci0gICAgICBjYXNlIEVPcE5lZ2F0aXZlOiAgICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICIoLSIsICIiLCAiKSIpOyAgYnJlYWs7Ci0gICAgICBjYXNl
IEVPcFZlY3RvckxvZ2ljYWxOb3Q6IG91dHB1dFRyaXBsZXQodmlzaXQsICIoISIsICIiLCAiKSIp
OyAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6ICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICIoISIsICIiLCAiKSIpOyAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFBvc3RJbmNyZW1l
bnQ6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIrKykiKTsgYnJlYWs7Ci0gICAg
ICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIs
ICItLSkiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFByZUluY3JlbWVudDogICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICIoKysiLCAiIiwgIikiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFByZURl
Y3JlbWVudDogICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoLS0iLCAiIiwgIikiKTsgYnJlYWs7
Ci0gICAgICBjYXNlIEVPcENvbnZJbnRUb0Jvb2w6Ci0gICAgICBjYXNlIEVPcENvbnZGbG9hdFRv
Qm9vbDoKLSAgICAgICAgc3dpdGNoIChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXRO
b21pbmFsU2l6ZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSAxOiAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiYm9vbCgiLCAiIiwgIikiKTsgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMjog
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImJvb2wyKCIsICIiLCAiKSIpOyBicmVhazsKLSAgICAg
ICAgICBjYXNlIDM6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJib29sMygiLCAiIiwgIikiKTsg
YnJlYWs7Ci0gICAgICAgICAgY2FzZSA0OiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYm9vbDQo
IiwgIiIsICIpIik7IGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENvbnZCb29sVG9GbG9hdDoK
LSAgICAgIGNhc2UgRU9wQ29udkludFRvRmxvYXQ6Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0
T3BlcmFuZCgpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKLSAgICAgICAgewotICAgICAg
ICAgIGNhc2UgMTogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZsb2F0KCIsICIiLCAiKSIpOyAg
YnJlYWs7Ci0gICAgICAgICAgY2FzZSAyOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZmxvYXQy
KCIsICIiLCAiKSIpOyBicmVhazsKLSAgICAgICAgICBjYXNlIDM6ICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJmbG9hdDMoIiwgIiIsICIpIik7IGJyZWFrOwotICAgICAgICAgIGNhc2UgNDogICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgImZsb2F0NCgiLCAiIiwgIikiKTsgYnJlYWs7Ci0gICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgRU9wQ29udkZsb2F0VG9JbnQ6Ci0gICAgICBjYXNlIEVPcENvbnZCb29sVG9JbnQ6
Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCkuZ2V0Tm9taW5h
bFNpemUoKSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgMTogICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgImludCgiLCAiIiwgIikiKTsgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMjogICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgImludDIoIiwgIiIsICIpIik7IGJyZWFrOwotICAgICAgICAgIGNh
c2UgMzogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImludDMoIiwgIiIsICIpIik7IGJyZWFrOwot
ICAgICAgICAgIGNhc2UgNDogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImludDQoIiwgIiIsICIp
Iik7IGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFJhZGlhbnM6ICAgICAgICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICJyYWRpYW5zKCIsICIiLCAiKSIpOyAgIGJyZWFrOwotICAgICAgY2FzZSBF
T3BEZWdyZWVzOiAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGVncmVlcygiLCAiIiwg
IikiKTsgICBicmVhazsKLSAgICAgIGNhc2UgRU9wU2luOiAgICAgICAgICAgICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgInNpbigiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVP
cENvczogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJjb3MoIiwgIiIsICIpIik7
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BUYW46ICAgICAgICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAidGFuKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9w
QXNpbjogICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFzaW4oIiwgIiIsICIpIik7
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcEFjb3M6ICAgICAgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICJhY29zKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BB
dGFuOiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYXRhbigiLCAiIiwgIikiKTsg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wRXhwOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgImV4cCgiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcExv
ZzogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJsb2coIiwgIiIsICIpIik7ICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BFeHAyOiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0
KHZpc2l0LCAiZXhwMigiLCAiIiwgIikiKTsgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wTG9n
MjogICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImxvZzIoIiwgIiIsICIpIik7ICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFNxcnQ6ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJzcXJ0KCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BJbnZl
cnNlU3FydDogICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAicnNxcnQoIiwgIiIsICIpIik7ICAg
ICBicmVhazsKLSAgICAgIGNhc2UgRU9wQWJzOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgImFicygiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFNpZ246
ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJzaWduKCIsICIiLCAiKSIpOyAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBFT3BGbG9vcjogICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAiZmxvb3IoIiwgIiIsICIpIik7ICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wQ2VpbDog
ICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImNlaWwoIiwgIiIsICIpIik7ICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEVPcEZyYWN0OiAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICJmcmFjKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BMZW5ndGg6
ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibGVuZ3RoKCIsICIiLCAiKSIpOyAgICBi
cmVhazsKLSAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgIm5vcm1hbGl6ZSgiLCAiIiwgIikiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcERGZHg6Ci0g
ICAgICAgIGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1bmN0aW9u
KQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIiLCAi
LCAwLjApIik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGR4KCIsICIiLCAiKSIpOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BERmR5OgotICAgICAgICBpZihtSW5zaWRlRGlzY29u
dGludW91c0xvb3AgfHwgbU91dHB1dExvZDBGdW5jdGlvbikKLSAgICAgICAgewotICAgICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIiwgIiwgMC4wKSIpOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
ZGR5KCIsICIiLCAiKSIpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBF
T3BGd2lkdGg6Ci0gICAgICAgIGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0
TG9kMEZ1bmN0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAiKCIsICIiLCAiLCAwLjApIik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7
Ci0gICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZndpZHRoKCIsICIiLCAiKSIpOwot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BBbnk6ICAgICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYW55KCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgRU9wQWxsOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFsbCgi
LCAiIiwgIikiKTsgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIE91dHB1dEhMU0w6OnZpc2l0QWdn
cmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQotewotICAgIFRJbmZv
U2lua0Jhc2UgJm91dCA9IG1Cb2R5OwotCi0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQotICAg
IHsKLSAgICAgIGNhc2UgRU9wU2VxdWVuY2U6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICht
SW5zaWRlRnVuY3Rpb24pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0cHV0TGlu
ZURpcmVjdGl2ZShub2RlLT5nZXRMaW5lKCkuZmlyc3RfbGluZSk7Ci0gICAgICAgICAgICAgICAg
b3V0IDw8ICJ7XG4iOwotCi0gICAgICAgICAgICAgICAgbVNjb3BlRGVwdGgrKzsKLQotICAgICAg
ICAgICAgICAgIGlmIChtU2NvcGVCcmFja2V0LnNpemUoKSA8IG1TY29wZURlcHRoKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbVNjb3BlQnJhY2tldC5wdXNoX2JhY2so
MCk7ICAgLy8gTmV3IHNjb3BlIGxldmVsCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1TY29wZUJy
YWNrZXRbbVNjb3BlRGVwdGggLSAxXSsrOyAgIC8vIE5ldyBzY29wZSBhdCBleGlzdGluZyBsZXZl
bAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChU
SW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNpdCA9IG5vZGUtPmdldFNlcXVlbmNlKCkuYmVnaW4o
KTsgc2l0ICE9IG5vZGUtPmdldFNlcXVlbmNlKCkuZW5kKCk7IHNpdCsrKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUoKCpzaXQpLT5nZXRMaW5lKCku
Zmlyc3RfbGluZSk7Ci0KLSAgICAgICAgICAgICAgICB0cmF2ZXJzZVN0YXRlbWVudHMoKnNpdCk7
Ci0KLSAgICAgICAgICAgICAgICBvdXQgPDwgIjtcbiI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGlmIChtSW5zaWRlRnVuY3Rpb24pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRMaW5lKCkubGFzdF9saW5lKTsKLSAgICAg
ICAgICAgICAgICBvdXQgPDwgIn1cbiI7Ci0KLSAgICAgICAgICAgICAgICBtU2NvcGVEZXB0aC0t
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgIGNhc2UgRU9wRGVjbGFyYXRpb246Ci0gICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNp
dCkKLSAgICAgICAgewotICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5v
ZGUtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAgICAgICBUSW50ZXJtVHlwZWQgKnZhcmlhYmxlID0g
c2VxdWVuY2VbMF0tPmdldEFzVHlwZWQoKTsKLQotICAgICAgICAgICAgaWYgKHZhcmlhYmxlICYm
ICh2YXJpYWJsZS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxVGVtcG9yYXJ5IHx8IHZhcmlhYmxlLT5n
ZXRRdWFsaWZpZXIoKSA9PSBFdnFHbG9iYWwpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGlmICh2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgYWRkQ29uc3RydWN0b3IodmFyaWFibGUtPmdldFR5cGUo
KSwgc2NvcGVkU3RydWN0KHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCktPm5hbWUoKSks
IE5VTEwpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICghdmFyaWFi
bGUtPmdldEFzU3ltYm9sTm9kZSgpIHx8IHZhcmlhYmxlLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0
U3ltYm9sKCkgIT0gIiIpICAgLy8gVmFyaWFibGUgZGVjbGFyYXRpb24KLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbUluc2lkZUZ1bmN0aW9uKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgInN0YXRpYyAiOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgb3V0IDw8IHR5cGVT
dHJpbmcodmFyaWFibGUtPmdldFR5cGUoKSkgKyAiICI7Ci0KLSAgICAgICAgICAgICAgICAgICAg
Zm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNpdCA9IHNlcXVlbmNlLmJlZ2luKCk7IHNp
dCAhPSBzZXF1ZW5jZS5lbmQoKTsgc2l0KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9ICgqc2l0KS0+Z2V0QXNT
eW1ib2xOb2RlKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wpCi0gICAg
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9s
LT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgYXJy
YXlTdHJpbmcoc3ltYm9sLT5nZXRUeXBlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dCA8PCAiID0gIiArIGluaXRpYWxpemVyKHZhcmlhYmxlLT5nZXRUeXBlKCkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqc2l0KS0+
dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICgqc2l0ICE9IHNlcXVlbmNlLmJhY2soKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmICh2YXJpYWJsZS0+Z2V0QXNTeW1ib2xO
b2RlKCkgJiYgdmFyaWFibGUtPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKSA9PSAiIikg
ICAvLyBUeXBlIChzdHJ1Y3QpIGRlY2xhcmF0aW9uCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAvLyBBbHJlYWR5IGFkZGVkIHRvIGNvbnN0cnVjdG9yIG1hcAotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICh2YXJpYWJsZSAmJiAodmFyaWFibGUtPmdldFF1
YWxpZmllcigpID09IEV2cVZhcnlpbmdPdXQgfHwgdmFyaWFibGUtPmdldFF1YWxpZmllcigpID09
IEV2cUludmFyaWFudFZhcnlpbmdPdXQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGZvciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBzaXQgPSBzZXF1ZW5jZS5iZWdpbigpOyBz
aXQgIT0gc2VxdWVuY2UuZW5kKCk7IHNpdCsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gKCpzaXQpLT5nZXRBc1N5bWJvbE5v
ZGUoKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sKQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBWZXJ0ZXggKG91dHB1dCkgdmFyeWlu
Z3Mgd2hpY2ggYXJlIGRlY2xhcmVkIGJ1dCBub3Qgd3JpdHRlbiB0byBzaG91bGQgc3RpbGwgYmUg
ZGVjbGFyZWQgdG8gYWxsb3cgc3VjY2Vzc2Z1bCBsaW5raW5nCi0gICAgICAgICAgICAgICAgICAg
ICAgICBtUmVmZXJlbmNlZFZhcnlpbmdzW3N5bWJvbC0+Z2V0U3ltYm9sKCldID0gc3ltYm9sOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgKCpzaXQpLT50cmF2ZXJzZSh0
aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGVs
c2UgaWYgKHZpc2l0ID09IEluVmlzaXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAi
LCAiOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BQcm90b3R5cGU6
Ci0gICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKLSAgICAgICAgewotICAgICAgICAgICAg
b3V0IDw8IHR5cGVTdHJpbmcobm9kZS0+Z2V0VHlwZSgpKSA8PCAiICIgPDwgZGVjb3JhdGUobm9k
ZS0+Z2V0TmFtZSgpKSA8PCAobU91dHB1dExvZDBGdW5jdGlvbiA/ICJMb2QwKCIgOiAiKCIpOwot
Ci0gICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IG5vZGUtPmdldFNlcXVl
bmNlKCk7Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgYXJndW1l
bnRzLnNpemUoKTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFRJbnRlcm1T
eW1ib2wgKnN5bWJvbCA9IGFyZ3VtZW50c1tpXS0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoc3ltYm9sKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgb3V0IDw8IGFyZ3VtZW50U3RyaW5nKHN5bWJvbCk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGkgPCBhcmd1bWVudHMuc2l6ZSgpIC0gMSkKLSAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBvdXQgPDwgIik7XG4iOwotCi0gICAgICAg
ICAgICAvLyBBbHNvIHByb3RvdHlwZSB0aGUgTG9kMCB2YXJpYW50IGlmIG5lZWRlZAotICAgICAg
ICAgICAgaWYgKG1Db250YWluc0xvb3BEaXNjb250aW51aXR5ICYmICFtT3V0cHV0TG9kMEZ1bmN0
aW9uKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24g
PSB0cnVlOwotICAgICAgICAgICAgICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAg
ICAgICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBFT3BDb21tYTogICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIsICIs
ICIpIik7ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BGdW5jdGlvbjoKLSAg
ICAgICAgewotICAgICAgICAgICAgVFN0cmluZyBuYW1lID0gVEZ1bmN0aW9uOjp1bm1hbmdsZU5h
bWUobm9kZS0+Z2V0TmFtZSgpKTsKLQotICAgICAgICAgICAgb3V0IDw8IHR5cGVTdHJpbmcobm9k
ZS0+Z2V0VHlwZSgpKSA8PCAiICI7Ci0KLSAgICAgICAgICAgIGlmIChuYW1lID09ICJtYWluIikK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImdsX21haW4oIjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBvdXQgPDwgZGVjb3JhdGUobmFtZSkgPDwgKG1PdXRwdXRMb2QwRnVuY3Rpb24gPyAiTG9kMCgi
IDogIigiKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZz
ZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAgICAgICBUSW50ZXJtU2VxdWVu
Y2UgJmFyZ3VtZW50cyA9IHNlcXVlbmNlWzBdLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5j
ZSgpOwotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGFyZ3VtZW50
cy5zaXplKCk7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUSW50ZXJtU3lt
Ym9sICpzeW1ib2wgPSBhcmd1bWVudHNbaV0tPmdldEFzU3ltYm9sTm9kZSgpOwotCi0gICAgICAg
ICAgICAgICAgaWYgKHN5bWJvbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChzeW1ib2wtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKSkKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ29uc3RydWN0b3Ioc3ltYm9sLT5nZXRU
eXBlKCksIHNjb3BlZFN0cnVjdChzeW1ib2wtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+bmFtZSgp
KSwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBv
dXQgPDwgYXJndW1lbnRTdHJpbmcoc3ltYm9sKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAo
aSA8IGFyZ3VtZW50cy5zaXplKCkgLSAxKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIG91dCA8PCAiKVxuIgotICAgICAgICAgICAgICAgICJ7
XG4iOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc2VxdWVuY2Uuc2l6ZSgpID4gMSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtSW5zaWRlRnVuY3Rpb24gPSB0cnVlOwot
ICAgICAgICAgICAgICAgIHNlcXVlbmNlWzFdLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAg
ICAgICBtSW5zaWRlRnVuY3Rpb24gPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgb3V0IDw8ICJ9XG4iOwotCi0gICAgICAgICAgICBpZiAobUNvbnRhaW5z
TG9vcERpc2NvbnRpbnVpdHkgJiYgIW1PdXRwdXRMb2QwRnVuY3Rpb24pCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWUgIT0gIm1haW4iKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgbU91dHB1dExvZDBGdW5jdGlvbiA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAgICAgICAgICAgICBt
T3V0cHV0TG9kMEZ1bmN0aW9uID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEVPcEZ1bmN0aW9uQ2FsbDoKLSAgICAgICAgewotICAgICAgICAgICAg
VFN0cmluZyBuYW1lID0gVEZ1bmN0aW9uOjp1bm1hbmdsZU5hbWUobm9kZS0+Z2V0TmFtZSgpKTsK
LSAgICAgICAgICAgIGJvb2wgbG9kMCA9IG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0
cHV0TG9kMEZ1bmN0aW9uOwotCi0gICAgICAgICAgICBpZiAobm9kZS0+aXNVc2VyRGVmaW5lZCgp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8
PCAobG9kMCA/ICJMb2QwKCIgOiAiKCIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQi
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2QwKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0
U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5n
ZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEX2JpYXMgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJF
QUNIQUJMRSgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUy
RCgiOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdl
dFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRMb2QwID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5v
ZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCi0gICAgICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImds
X3RleHR1cmUyRExvZDAoIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlMkRQcm9qIikKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVl
bmNlKCkuc2l6ZSgpID09IDIpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdl
dFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXMgPSB0cnVlOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBV
TlJFQUNIQUJMRSgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1
cmUyRFByb2ooIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQotICAgICAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDAgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFBy
b2pMb2QwX2JpYXMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICBvdXQgPDwgImdsX3RleHR1cmUyRFByb2pMb2QwKCI7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAi
dGV4dHVyZUN1YmUiKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFsb2QwKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCi0gICAgICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZV9i
aWFzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0
IDw8ICJnbF90ZXh0dXJlQ3ViZSgiOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCi0gICAgICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3Vi
ZUxvZDAgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1Rl
eHR1cmVDdWJlTG9kMF9iaWFzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlQ3ViZUxvZDAoIjsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1l
ID09ICJ0ZXh0dXJlMkRMb2QiKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJETG9kID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRMb2QoIjsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4
dHVyZTJEUHJvakxvZCIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKLSAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRQcm9qTG9k
KCI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0g
InRleHR1cmVDdWJlTG9kIikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlTG9kID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlQ3ViZUxvZCgi
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJndW1lbnRz
ID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKLQotICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVu
Y2U6Oml0ZXJhdG9yIGFyZyA9IGFyZ3VtZW50cy5iZWdpbigpOyBhcmcgIT0gYXJndW1lbnRzLmVu
ZCgpOyBhcmcrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobU91dHB1dFR5
cGUgPT0gU0hfSExTTDExX09VVFBVVCAmJiBJc1NhbXBsZXIoKCphcmcpLT5nZXRBc1R5cGVkKCkt
PmdldEJhc2ljVHlwZSgpKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IG91dCA8PCAidGV4dHVyZV8iOwotICAgICAgICAgICAgICAgICAgICAoKmFyZyktPnRyYXZlcnNl
KHRoaXMpOwotICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgc2FtcGxlcl8iOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICgqYXJnKS0+dHJhdmVyc2UodGhpcyk7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoYXJnIDwgYXJndW1lbnRzLmVuZCgpIC0gMSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgb3V0IDw8ICIpIjsKLQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBFT3BQYXJhbWV0ZXJzOiAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIsICIsICIp
XG57XG4iKTsgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0
OgotICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJ2ZWMxIiwgJm5vZGUt
PmdldFNlcXVlbmNlKCkpOwotICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidmVjMSgiLCAi
IiwgIikiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzI6Ci0g
ICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgInZlYzIiLCAmbm9kZS0+Z2V0
U2VxdWVuY2UoKSk7Ci0gICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ2ZWMyKCIsICIsICIs
ICIpIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMzOgotICAg
ICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJ2ZWMzIiwgJm5vZGUtPmdldFNl
cXVlbmNlKCkpOwotICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidmVjMygiLCAiLCAiLCAi
KSIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjNDoKLSAgICAg
ICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAidmVjNCIsICZub2RlLT5nZXRTZXF1
ZW5jZSgpKTsKLSAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInZlYzQoIiwgIiwgIiwgIiki
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6Ci0gICAgICAg
IGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgImJ2ZWMxIiwgJm5vZGUtPmdldFNlcXVl
bmNlKCkpOwotICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYnZlYzEoIiwgIiIsICIpIik7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMjoKLSAgICAgICAg
YWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiYnZlYzIiLCAmbm9kZS0+Z2V0U2VxdWVu
Y2UoKSk7Ci0gICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJidmVjMigiLCAiLCAiLCAiKSIp
OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzM6Ci0gICAgICAg
IGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgImJ2ZWMzIiwgJm5vZGUtPmdldFNlcXVl
bmNlKCkpOwotICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYnZlYzMoIiwgIiwgIiwgIiki
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWM0OgotICAgICAg
ICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJidmVjNCIsICZub2RlLT5nZXRTZXF1
ZW5jZSgpKTsKLSAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImJ2ZWM0KCIsICIsICIsICIp
Iik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6Ci0gICAgICAg
IGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgIml2ZWMxIiwgJm5vZGUtPmdldFNlcXVl
bmNlKCkpOwotICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaXZlYzEoIiwgIiIsICIpIik7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMjoKLSAgICAgICAg
YWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiaXZlYzIiLCAmbm9kZS0+Z2V0U2VxdWVu
Y2UoKSk7Ci0gICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJpdmVjMigiLCAiLCAiLCAiKSIp
OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzM6Ci0gICAgICAg
IGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgIml2ZWMzIiwgJm5vZGUtPmdldFNlcXVl
bmNlKCkpOwotICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaXZlYzMoIiwgIiwgIiwgIiki
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWM0OgotICAgICAg
ICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJpdmVjNCIsICZub2RlLT5nZXRTZXF1
ZW5jZSgpKTsKLSAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIml2ZWM0KCIsICIsICIsICIp
Iik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQyOgotICAgICAg
ICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJtYXQyIiwgJm5vZGUtPmdldFNlcXVl
bmNlKCkpOwotICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibWF0MigiLCAiLCAiLCAiKSIp
OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MzoKLSAgICAgICAg
YWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAibWF0MyIsICZub2RlLT5nZXRTZXF1ZW5j
ZSgpKTsKLSAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm1hdDMoIiwgIiwgIiwgIikiKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6IAotICAgICAgICBh
ZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJtYXQ0IiwgJm5vZGUtPmdldFNlcXVlbmNl
KCkpOwotICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibWF0NCgiLCAiLCAiLCAiKSIpOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wQ29uc3RydWN0U3RydWN0OgotICAgICAgICBh
ZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksIHNjb3BlZFN0cnVjdChub2RlLT5nZXRUeXBl
KCkuZ2V0U3RydWN0KCktPm5hbWUoKSksICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKLSAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgc3RydWN0TG9va3VwKG5vZGUtPmdldFR5cGUoKS5nZXRTdHJ1
Y3QoKS0+bmFtZSgpKSArICJfY3RvcigiLCAiLCAiLCAiKSIpOwotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgRU9wTGVzc1RoYW46ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAi
IDwgIiwgIikiKTsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BHcmVhdGVy
VGhhbjogICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPiAiLCAiKSIpOyAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6ICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICIoIiwgIiA8PSAiLCAiKSIpOyAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDogb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAi
ID49ICIsICIpIik7ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BWZWN0b3JF
cXVhbDogICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPT0gIiwgIikiKTsgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFZlY3Rvck5vdEVxdWFsOiAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICIoIiwgIiAhPSAiLCAiKSIpOyAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgRU9wTW9kOgotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGxv
b2sgYXQgdGhlIG51bWJlciBvZiBjb21wb25lbnRzIGluIGJvdGggYXJndW1lbnRzCi0gICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmdldFNlcXVlbmNlKClbMF0tPmdldEFzVHlwZWQoKS0+Z2V0Tm9t
aW5hbFNpemUoKSAqIDEwCi0gICAgICAgICAgICAgICAgICAgICArIG5vZGUtPmdldFNlcXVlbmNl
KClbMV0tPmdldEFzVHlwZWQoKS0+Z2V0Tm9taW5hbFNpemUoKSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgY2FzZSAxMTogbVVzZXNNb2QxID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgMjI6IG1Vc2VzTW9kMnYgPSB0cnVlOyBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSAyMTogbVVzZXNNb2QyZiA9IHRydWU7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIDMzOiBt
VXNlc01vZDN2ID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgMzE6IG1Vc2VzTW9k
M2YgPSB0cnVlOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSA0NDogbVVzZXNNb2Q0diA9IHRy
dWU7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIDQxOiBtVXNlc01vZDRmID0gdHJ1ZTsgYnJl
YWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJtb2QoIiwgIiwgIiwgIikiKTsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wUG93OiAgICAgICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInBvdygiLCAiLCAiLCAiKSIpOyAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBFT3BBdGFuOgotICAgICAgICBBU1NFUlQobm9kZS0+Z2V0U2Vx
dWVuY2UoKS5zaXplKCkgPT0gMik7ICAgLy8gYXRhbih4KSBpcyBhIHVuYXJ5IG9wZXJhdG9yCi0g
ICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0U2VxdWVuY2UoKVswXS0+Z2V0QXNUeXBlZCgpLT5nZXRO
b21pbmFsU2l6ZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSAxOiBtVXNlc0F0YW4yXzEg
PSB0cnVlOyBicmVhazsKLSAgICAgICAgICBjYXNlIDI6IG1Vc2VzQXRhbjJfMiA9IHRydWU7IGJy
ZWFrOwotICAgICAgICAgIGNhc2UgMzogbVVzZXNBdGFuMl8zID0gdHJ1ZTsgYnJlYWs7Ci0gICAg
ICAgICAgY2FzZSA0OiBtVXNlc0F0YW4yXzQgPSB0cnVlOyBicmVhazsKLSAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICJhdGFueXgoIiwgIiwgIiwgIikiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVP
cE1pbjogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJtaW4oIiwgIiwgIiwgIikiKTsg
ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BNYXg6ICAgICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAibWF4KCIsICIsICIsICIpIik7ICAgICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgRU9wQ2xhbXA6ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImNsYW1wKCIsICIsICIs
ICIpIik7ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcE1peDogICAgICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICJsZXJwKCIsICIsICIsICIpIik7ICAgICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBFT3BTdGVwOiAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAic3RlcCgiLCAi
LCAiLCAiKSIpOyAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wU21vb3RoU3RlcDogICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgInNtb290aHN0ZXAoIiwgIiwgIiwgIikiKTsgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEVPcERpc3RhbmNlOiAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkaXN0
YW5jZSgiLCAiLCAiLCAiKSIpOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BEb3Q6ICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZG90KCIsICIsICIsICIpIik7ICAgICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgRU9wQ3Jvc3M6ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
ImNyb3NzKCIsICIsICIsICIpIik7ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcEZhY2VG
b3J3YXJkOgotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldFNlcXVlbmNl
KClbMF0tPmdldEFzVHlwZWQoKS0+Z2V0Tm9taW5hbFNpemUoKSkgICAvLyBOdW1iZXIgb2YgY29t
cG9uZW50cyBpbiB0aGUgZmlyc3QgYXJndW1lbnQKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
IGNhc2UgMTogbVVzZXNGYWNlZm9yd2FyZDEgPSB0cnVlOyBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgMjogbVVzZXNGYWNlZm9yd2FyZDIgPSB0cnVlOyBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
MzogbVVzZXNGYWNlZm9yd2FyZDMgPSB0cnVlOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgNDog
bVVzZXNGYWNlZm9yd2FyZDQgPSB0cnVlOyBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICJmYWNlZm9yd2FyZCgiLCAiLCAiLCAiKSIpOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BSZWZsZWN0OiAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAicmVmbGVjdCgiLCAiLCAiLCAiKSIpOyAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgRU9wUmVmcmFjdDogICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInJlZnJhY3QoIiwgIiwg
IiwgIikiKTsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcE11bDogICAgICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICIoIiwgIiAqICIsICIpIik7ICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBPdXRwdXRITFNMOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNl
bGVjdGlvbiAqbm9kZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKLQotICAg
IGlmIChub2RlLT51c2VzVGVybmFyeU9wZXJhdG9yKCkpCi0gICAgewotICAgICAgICBvdXQgPDwg
InMiIDw8IG1VbmZvbGRTaG9ydENpcmN1aXQtPmdldE5leHRUZW1wb3JhcnlJbmRleCgpOwotICAg
IH0KLSAgICBlbHNlICAvLyBpZi9lbHNlIHN0YXRlbWVudAotICAgIHsKLSAgICAgICAgbVVuZm9s
ZFNob3J0Q2lyY3VpdC0+dHJhdmVyc2Uobm9kZS0+Z2V0Q29uZGl0aW9uKCkpOwotCi0gICAgICAg
IG91dCA8PCAiaWYgKCI7Ci0KLSAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNl
KHRoaXMpOwotCi0gICAgICAgIG91dCA8PCAiKVxuIjsKLSAgICAgICAgCi0gICAgICAgIG91dHB1
dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0TGluZSgpLmZpcnN0X2xpbmUpOwotICAgICAgICBvdXQg
PDwgIntcbiI7Ci0KLSAgICAgICAgYm9vbCBkaXNjYXJkID0gZmFsc2U7Ci0KLSAgICAgICAgaWYg
KG5vZGUtPmdldFRydWVCbG9jaygpKQotICAgICAgICB7Ci0gICAgICAgICAgICB0cmF2ZXJzZVN0
YXRlbWVudHMobm9kZS0+Z2V0VHJ1ZUJsb2NrKCkpOwotCi0gICAgICAgICAgICAvLyBEZXRlY3Qg
dHJ1ZSBkaXNjYXJkCi0gICAgICAgICAgICBkaXNjYXJkID0gKGRpc2NhcmQgfHwgRmluZERpc2Nh
cmQ6OnNlYXJjaChub2RlLT5nZXRUcnVlQmxvY2soKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
b3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRMaW5lKCkuZmlyc3RfbGluZSk7Ci0gICAgICAg
IG91dCA8PCAiO1xufVxuIjsKLQotICAgICAgICBpZiAobm9kZS0+Z2V0RmFsc2VCbG9jaygpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgImVsc2VcbiI7Ci0KLSAgICAgICAgICAgIG91
dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0RmFsc2VCbG9jaygpLT5nZXRMaW5lKCkuZmlyc3Rf
bGluZSk7Ci0gICAgICAgICAgICBvdXQgPDwgIntcbiI7Ci0KLSAgICAgICAgICAgIG91dHB1dExp
bmVEaXJlY3RpdmUobm9kZS0+Z2V0RmFsc2VCbG9jaygpLT5nZXRMaW5lKCkuZmlyc3RfbGluZSk7
Ci0gICAgICAgICAgICB0cmF2ZXJzZVN0YXRlbWVudHMobm9kZS0+Z2V0RmFsc2VCbG9jaygpKTsK
LQotICAgICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRGYWxzZUJsb2NrKCkt
PmdldExpbmUoKS5maXJzdF9saW5lKTsKLSAgICAgICAgICAgIG91dCA8PCAiO1xufVxuIjsKLQot
ICAgICAgICAgICAgLy8gRGV0ZWN0IGZhbHNlIGRpc2NhcmQKLSAgICAgICAgICAgIGRpc2NhcmQg
PSAoZGlzY2FyZCB8fCBGaW5kRGlzY2FyZDo6c2VhcmNoKG5vZGUtPmdldEZhbHNlQmxvY2soKSkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQU5HTEUgaXNzdWUgNDg2OiBEZXRlY3QgcHJvYmxl
bWF0aWMgY29uZGl0aW9uYWwgZGlzY2FyZAotICAgICAgICBpZiAoZGlzY2FyZCAmJiBGaW5kU2lk
ZUVmZmVjdFJld3JpdGluZzo6c2VhcmNoKG5vZGUpKQotICAgICAgICB7Ci0gICAgICAgICAgICBt
VXNlc0Rpc2NhcmRSZXdyaXRpbmcgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi12b2lkIE91dHB1dEhMU0w6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50
ZXJtQ29uc3RhbnRVbmlvbiAqbm9kZSkKLXsKLSAgICB3cml0ZUNvbnN0YW50VW5pb24obm9kZS0+
Z2V0VHlwZSgpLCBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpKTsKLX0KLQotYm9vbCBPdXRw
dXRITFNMOjp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKQotewotICAg
IGJvb2wgd2FzRGlzY29udGludW91cyA9IG1JbnNpZGVEaXNjb250aW51b3VzTG9vcDsKLQotICAg
IGlmIChtQ29udGFpbnNMb29wRGlzY29udGludWl0eSAmJiAhbUluc2lkZURpc2NvbnRpbnVvdXNM
b29wKQotICAgIHsKLSAgICAgICAgbUluc2lkZURpc2NvbnRpbnVvdXNMb29wID0gY29udGFpbnNM
b29wRGlzY29udGludWl0eShub2RlKTsKLSAgICB9Ci0KLSAgICBpZiAobU91dHB1dFR5cGUgPT0g
U0hfSExTTDlfT1VUUFVUKQotICAgIHsKLSAgICAgICAgaWYgKGhhbmRsZUV4Y2Vzc2l2ZUxvb3Ao
bm9kZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OwotCi0gICAgaWYgKG5vZGUt
PmdldFR5cGUoKSA9PSBFTG9vcERvV2hpbGUpCi0gICAgewotICAgICAgICBvdXQgPDwgIntkb1xu
IjsKLQotICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKS5maXJzdF9s
aW5lKTsKLSAgICAgICAgb3V0IDw8ICJ7XG4iOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAg
ICAgICBvdXQgPDwgIntmb3IoIjsKLSAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5nZXRJbml0
KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5vZGUtPmdldEluaXQoKS0+dHJhdmVyc2UodGhp
cyk7Ci0gICAgICAgIH0KLQotICAgICAgICBvdXQgPDwgIjsgIjsKLQotICAgICAgICBpZiAobm9k
ZS0+Z2V0Q29uZGl0aW9uKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5vZGUtPmdldENvbmRp
dGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIG91dCA8PCAiOyAi
OwotCi0gICAgICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG5vZGUtPmdldEV4cHJlc3Npb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIH0K
LQotICAgICAgICBvdXQgPDwgIilcbiI7Ci0gICAgICAgIAotICAgICAgICBvdXRwdXRMaW5lRGly
ZWN0aXZlKG5vZGUtPmdldExpbmUoKS5maXJzdF9saW5lKTsKLSAgICAgICAgb3V0IDw8ICJ7XG4i
OwotICAgIH0KLQotICAgIGlmIChub2RlLT5nZXRCb2R5KCkpCi0gICAgewotICAgICAgICB0cmF2
ZXJzZVN0YXRlbWVudHMobm9kZS0+Z2V0Qm9keSgpKTsKLSAgICB9Ci0KLSAgICBvdXRwdXRMaW5l
RGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKS5maXJzdF9saW5lKTsKLSAgICBvdXQgPDwgIjt9XG4i
OwotCi0gICAgaWYgKG5vZGUtPmdldFR5cGUoKSA9PSBFTG9vcERvV2hpbGUpCi0gICAgewotICAg
ICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldENvbmRpdGlvbigpLT5nZXRMaW5lKCku
Zmlyc3RfbGluZSk7Ci0gICAgICAgIG91dCA8PCAid2hpbGUoXG4iOwotCi0gICAgICAgIG5vZGUt
PmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKLQotICAgICAgICBvdXQgPDwgIik7IjsK
LSAgICB9Ci0KLSAgICBvdXQgPDwgIn1cbiI7Ci0KLSAgICBtSW5zaWRlRGlzY29udGludW91c0xv
b3AgPSB3YXNEaXNjb250aW51b3VzOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIE91
dHB1dEhMU0w6OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2RlKQot
ewotICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OwotCi0gICAgc3dpdGNoIChub2RlLT5n
ZXRGbG93T3AoKSkKLSAgICB7Ci0gICAgICBjYXNlIEVPcEtpbGw6Ci0gICAgICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICJkaXNjYXJkO1xuIiwgIiIsICIiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEVPcEJyZWFrOgotICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmIChtRXhjZXNzaXZlTG9vcEluZGV4KQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIG91dCA8PCAie0JyZWFrIjsKLSAgICAgICAgICAgICAgICBtRXhjZXNz
aXZlTG9vcEluZGV4LT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIiA9
IHRydWU7IGJyZWFrO31cbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJicmVhaztcbiI7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENvbnRpbnVlOiBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiY29udGludWU7XG4iLCAiIiwgIiIpOyBicmVhazsKLSAgICAg
IGNhc2UgRU9wUmV0dXJuOgotICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJyZXR1cm4gIjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgInJldHVy
bjtcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodmlzaXQg
PT0gUG9zdFZpc2l0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Z2V0RXhwcmVz
c2lvbigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiO1xuIjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgT3V0cHV0
SExTTDo6dHJhdmVyc2VTdGF0ZW1lbnRzKFRJbnRlcm1Ob2RlICpub2RlKQotewotICAgIGlmIChp
c1NpbmdsZVN0YXRlbWVudChub2RlKSkKLSAgICB7Ci0gICAgICAgIG1VbmZvbGRTaG9ydENpcmN1
aXQtPnRyYXZlcnNlKG5vZGUpOwotICAgIH0KLQotICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOwot
fQotCi1ib29sIE91dHB1dEhMU0w6OmlzU2luZ2xlU3RhdGVtZW50KFRJbnRlcm1Ob2RlICpub2Rl
KQotewotICAgIFRJbnRlcm1BZ2dyZWdhdGUgKmFnZ3JlZ2F0ZSA9IG5vZGUtPmdldEFzQWdncmVn
YXRlKCk7Ci0KLSAgICBpZiAoYWdncmVnYXRlKQotICAgIHsKLSAgICAgICAgaWYgKGFnZ3JlZ2F0
ZS0+Z2V0T3AoKSA9PSBFT3BTZXF1ZW5jZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAg
Zm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNpdCA9IGFnZ3JlZ2F0ZS0+Z2V0U2VxdWVu
Y2UoKS5iZWdpbigpOyBzaXQgIT0gYWdncmVnYXRlLT5nZXRTZXF1ZW5jZSgpLmVuZCgpOyBzaXQr
KykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIWlzU2luZ2xlU3RhdGVtZW50
KCpzaXQpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8g
SGFuZGxlIGxvb3BzIHdpdGggbW9yZSB0aGFuIDI1NCBpdGVyYXRpb25zICh1bnN1cHBvcnRlZCBi
eSBEM0Q5KSBieSBzcGxpdHRpbmcgdGhlbQotLy8gKFRoZSBEM0QgZG9jdW1lbnRhdGlvbiBzYXlz
IDI1NSBpdGVyYXRpb25zLCBidXQgdGhlIGNvbXBpbGVyIGNvbXBsYWlucyBhdCBhbnl0aGluZyBt
b3JlIHRoYW4gMjU0KS4KLWJvb2wgT3V0cHV0SExTTDo6aGFuZGxlRXhjZXNzaXZlTG9vcChUSW50
ZXJtTG9vcCAqbm9kZSkKLXsKLSAgICBjb25zdCBpbnQgTUFYX0xPT1BfSVRFUkFUSU9OUyA9IDI1
NDsKLSAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKLQotICAgIC8vIFBhcnNlIGxvb3Bz
IG9mIHRoZSBmb3JtOgotICAgIC8vIGZvcihpbnQgaW5kZXggPSBpbml0aWFsOyBpbmRleCBbY29t
cGFyYXRvcl0gbGltaXQ7IGluZGV4ICs9IGluY3JlbWVudCkKLSAgICBUSW50ZXJtU3ltYm9sICpp
bmRleCA9IE5VTEw7Ci0gICAgVE9wZXJhdG9yIGNvbXBhcmF0b3IgPSBFT3BOdWxsOwotICAgIGlu
dCBpbml0aWFsID0gMDsKLSAgICBpbnQgbGltaXQgPSAwOwotICAgIGludCBpbmNyZW1lbnQgPSAw
OwotCi0gICAgLy8gUGFyc2UgaW5kZXggbmFtZSBhbmQgaW50aWFsIHZhbHVlCi0gICAgaWYgKG5v
ZGUtPmdldEluaXQoKSkKLSAgICB7Ci0gICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUgKmluaXQgPSBu
b2RlLT5nZXRJbml0KCktPmdldEFzQWdncmVnYXRlKCk7Ci0KLSAgICAgICAgaWYgKGluaXQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2UgPSBpbml0LT5n
ZXRTZXF1ZW5jZSgpOwotICAgICAgICAgICAgVEludGVybVR5cGVkICp2YXJpYWJsZSA9IHNlcXVl
bmNlWzBdLT5nZXRBc1R5cGVkKCk7Ci0KLSAgICAgICAgICAgIGlmICh2YXJpYWJsZSAmJiB2YXJp
YWJsZS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxVGVtcG9yYXJ5KQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIFRJbnRlcm1CaW5hcnkgKmFzc2lnbiA9IHZhcmlhYmxlLT5nZXRBc0JpbmFy
eU5vZGUoKTsKLQotICAgICAgICAgICAgICAgIGlmIChhc3NpZ24tPmdldE9wKCkgPT0gRU9wSW5p
dGlhbGl6ZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFRJbnRlcm1T
eW1ib2wgKnN5bWJvbCA9IGFzc2lnbi0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAg
ICAgICAgICAgICAgICAgICAgVEludGVybUNvbnN0YW50VW5pb24gKmNvbnN0YW50ID0gYXNzaWdu
LT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLQotICAgICAgICAgICAgICAgICAg
ICBpZiAoc3ltYm9sICYmIGNvbnN0YW50KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoY29uc3RhbnQtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAm
JiBjb25zdGFudC0+Z2V0Tm9taW5hbFNpemUoKSA9PSAxKQotICAgICAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gc3ltYm9sOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWwgPSBjb25zdGFudC0+Z2V0SUNvbnN0KDApOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gUGFy
c2UgY29tcGFyYXRvciBhbmQgbGltaXQgdmFsdWUKLSAgICBpZiAoaW5kZXggIT0gTlVMTCAmJiBu
b2RlLT5nZXRDb25kaXRpb24oKSkKLSAgICB7Ci0gICAgICAgIFRJbnRlcm1CaW5hcnkgKnRlc3Qg
PSBub2RlLT5nZXRDb25kaXRpb24oKS0+Z2V0QXNCaW5hcnlOb2RlKCk7Ci0gICAgICAgIAotICAg
ICAgICBpZiAodGVzdCAmJiB0ZXN0LT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRJ
ZCgpID09IGluZGV4LT5nZXRJZCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBUSW50ZXJtQ29u
c3RhbnRVbmlvbiAqY29uc3RhbnQgPSB0ZXN0LT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5p
b24oKTsKLQotICAgICAgICAgICAgaWYgKGNvbnN0YW50KQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGlmIChjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0
YW50LT5nZXROb21pbmFsU2l6ZSgpID09IDEpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBjb21wYXJhdG9yID0gdGVzdC0+Z2V0T3AoKTsKLSAgICAgICAgICAgICAgICAg
ICAgbGltaXQgPSBjb25zdGFudC0+Z2V0SUNvbnN0KDApOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFBhcnNlIGluY3JlbWVudAot
ICAgIGlmIChpbmRleCAhPSBOVUxMICYmIGNvbXBhcmF0b3IgIT0gRU9wTnVsbCAmJiBub2RlLT5n
ZXRFeHByZXNzaW9uKCkpCi0gICAgewotICAgICAgICBUSW50ZXJtQmluYXJ5ICpiaW5hcnlUZXJt
aW5hbCA9IG5vZGUtPmdldEV4cHJlc3Npb24oKS0+Z2V0QXNCaW5hcnlOb2RlKCk7Ci0gICAgICAg
IFRJbnRlcm1VbmFyeSAqdW5hcnlUZXJtaW5hbCA9IG5vZGUtPmdldEV4cHJlc3Npb24oKS0+Z2V0
QXNVbmFyeU5vZGUoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChiaW5hcnlUZXJtaW5hbCkKLSAg
ICAgICAgewotICAgICAgICAgICAgVE9wZXJhdG9yIG9wID0gYmluYXJ5VGVybWluYWwtPmdldE9w
KCk7Ci0gICAgICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqY29uc3RhbnQgPSBiaW5hcnlU
ZXJtaW5hbC0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0KLSAgICAgICAgICAg
IGlmIChjb25zdGFudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29uc3Rh
bnQtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAmJiBjb25zdGFudC0+Z2V0Tm9taW5hbFNpemUo
KSA9PSAxKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVl
ID0gY29uc3RhbnQtPmdldElDb25zdCgwKTsKLQotICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg
KG9wKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBF
T3BBZGRBc3NpZ246IGluY3JlbWVudCA9IHZhbHVlOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBFT3BTdWJBc3NpZ246IGluY3JlbWVudCA9IC12YWx1ZTsgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5JTVBMRU1FTlRFRCgpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UgaWYgKHVuYXJ5VGVybWluYWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFRP
cGVyYXRvciBvcCA9IHVuYXJ5VGVybWluYWwtPmdldE9wKCk7Ci0KLSAgICAgICAgICAgIHN3aXRj
aCAob3ApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgRU9wUG9zdEluY3JlbWVu
dDogaW5jcmVtZW50ID0gMTsgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVPcFBvc3REZWNy
ZW1lbnQ6IGluY3JlbWVudCA9IC0xOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFT3BQcmVJ
bmNyZW1lbnQ6ICBpbmNyZW1lbnQgPSAxOyAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRU9w
UHJlRGVjcmVtZW50OiAgaW5jcmVtZW50ID0gLTE7IGJyZWFrOwotICAgICAgICAgICAgICBkZWZh
dWx0OiBVTklNUExFTUVOVEVEKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAoaW5kZXggIT0gTlVMTCAmJiBjb21wYXJhdG9yICE9IEVPcE51bGwgJiYgaW5jcmVt
ZW50ICE9IDApCi0gICAgewotICAgICAgICBpZiAoY29tcGFyYXRvciA9PSBFT3BMZXNzVGhhbkVx
dWFsKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb21wYXJhdG9yID0gRU9wTGVzc1RoYW47Ci0g
ICAgICAgICAgICBsaW1pdCArPSAxOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNvbXBhcmF0
b3IgPT0gRU9wTGVzc1RoYW4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBpdGVyYXRpb25z
ID0gKGxpbWl0IC0gaW5pdGlhbCkgLyBpbmNyZW1lbnQ7Ci0KLSAgICAgICAgICAgIGlmIChpdGVy
YXRpb25zIDw9IE1BWF9MT09QX0lURVJBVElPTlMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIE5vdCBhbiBleGNlc3NpdmUgbG9vcAotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpyZXN0b3JlSW5kZXggPSBtRXhjZXNz
aXZlTG9vcEluZGV4OwotICAgICAgICAgICAgbUV4Y2Vzc2l2ZUxvb3BJbmRleCA9IGluZGV4Owot
Ci0gICAgICAgICAgICBvdXQgPDwgIntpbnQgIjsKLSAgICAgICAgICAgIGluZGV4LT50cmF2ZXJz
ZSh0aGlzKTsKLSAgICAgICAgICAgIG91dCA8PCAiO1xuIgotICAgICAgICAgICAgICAgICAgICJi
b29sIEJyZWFrIjsKLSAgICAgICAgICAgIGluZGV4LT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAg
ICAgIG91dCA8PCAiID0gZmFsc2U7XG4iOwotCi0gICAgICAgICAgICBib29sIGZpcnN0TG9vcEZy
YWdtZW50ID0gdHJ1ZTsKLQotICAgICAgICAgICAgd2hpbGUgKGl0ZXJhdGlvbnMgPiAwKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBjbGFtcGVkTGltaXQgPSBpbml0aWFsICsg
aW5jcmVtZW50ICogc3RkOjptaW4oTUFYX0xPT1BfSVRFUkFUSU9OUywgaXRlcmF0aW9ucyk7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoIWZpcnN0TG9vcEZyYWdtZW50KQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJpZiAoIUJyZWFrIjsKLSAgICAgICAgICAg
ICAgICAgICAgaW5kZXgtPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgIikge1xuIjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoaXRl
cmF0aW9ucyA8PSBNQVhfTE9PUF9JVEVSQVRJT05TKSAgIC8vIExhc3QgbG9vcCBmcmFnbWVudAot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbUV4Y2Vzc2l2ZUxvb3BJbmRl
eCA9IE5VTEw7ICAgLy8gU3RvcHMgc2V0dGluZyB0aGUgQnJlYWsgZmxhZwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBmb3IoaW50IGluZGV4
ID0gaW5pdGlhbDsgaW5kZXggPCBjbGFtcGVkTGltaXQ7IGluZGV4ICs9IGluY3JlbWVudCkKLQot
ICAgICAgICAgICAgICAgIG91dCA8PCAiZm9yKCI7Ci0gICAgICAgICAgICAgICAgaW5kZXgtPnRy
YXZlcnNlKHRoaXMpOwotICAgICAgICAgICAgICAgIG91dCA8PCAiID0gIjsKLSAgICAgICAgICAg
ICAgICBvdXQgPDwgaW5pdGlhbDsKLQotICAgICAgICAgICAgICAgIG91dCA8PCAiOyAiOwotICAg
ICAgICAgICAgICAgIGluZGV4LT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgICAgICBvdXQg
PDwgIiA8ICI7Ci0gICAgICAgICAgICAgICAgb3V0IDw8IGNsYW1wZWRMaW1pdDsKLQotICAgICAg
ICAgICAgICAgIG91dCA8PCAiOyAiOwotICAgICAgICAgICAgICAgIGluZGV4LT50cmF2ZXJzZSh0
aGlzKTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIiArPSAiOwotICAgICAgICAgICAgICAgIG91
dCA8PCBpbmNyZW1lbnQ7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIpXG4iOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0TGlu
ZSgpLmZpcnN0X2xpbmUpOwotICAgICAgICAgICAgICAgIG91dCA8PCAie1xuIjsKLQotICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5nZXRCb2R5KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBub2RlLT5nZXRCb2R5KCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0
TGluZSgpLmZpcnN0X2xpbmUpOwotICAgICAgICAgICAgICAgIG91dCA8PCAiO31cbiI7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoIWZpcnN0TG9vcEZyYWdtZW50KQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJ9XG4iOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGZpcnN0TG9vcEZyYWdtZW50ID0gZmFsc2U7Ci0KLSAgICAgICAgICAg
ICAgICBpbml0aWFsICs9IE1BWF9MT09QX0lURVJBVElPTlMgKiBpbmNyZW1lbnQ7Ci0gICAgICAg
ICAgICAgICAgaXRlcmF0aW9ucyAtPSBNQVhfTE9PUF9JVEVSQVRJT05TOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgICAgICBvdXQgPDwgIn0iOwotCi0gICAgICAgICAgICBt
RXhjZXNzaXZlTG9vcEluZGV4ID0gcmVzdG9yZUluZGV4OwotCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOSU1QTEVNRU5URUQoKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gZmFsc2U7ICAgLy8gTm90IGhhbmRsZWQgYXMgYW4gZXhjZXNzaXZlIGxvb3AK
LX0KLQotdm9pZCBPdXRwdXRITFNMOjpvdXRwdXRUcmlwbGV0KFZpc2l0IHZpc2l0LCBjb25zdCBU
U3RyaW5nICZwcmVTdHJpbmcsIGNvbnN0IFRTdHJpbmcgJmluU3RyaW5nLCBjb25zdCBUU3RyaW5n
ICZwb3N0U3RyaW5nKQotewotICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OwotCi0gICAg
aWYgKHZpc2l0ID09IFByZVZpc2l0KQotICAgIHsKLSAgICAgICAgb3V0IDw8IHByZVN0cmluZzsK
LSAgICB9Ci0gICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCkKLSAgICB7Ci0gICAgICAgIG91
dCA8PCBpblN0cmluZzsKLSAgICB9Ci0gICAgZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZpc2l0KQot
ICAgIHsKLSAgICAgICAgb3V0IDw8IHBvc3RTdHJpbmc7Ci0gICAgfQotfQotCi12b2lkIE91dHB1
dEhMU0w6Om91dHB1dExpbmVEaXJlY3RpdmUoaW50IGxpbmUpCi17Ci0gICAgaWYgKChtQ29udGV4
dC5jb21waWxlT3B0aW9ucyAmIFNIX0xJTkVfRElSRUNUSVZFUykgJiYgKGxpbmUgPiAwKSkKLSAg
ICB7Ci0gICAgICAgIG1Cb2R5IDw8ICJcbiI7Ci0gICAgICAgIG1Cb2R5IDw8ICIjbGluZSAiIDw8
IGxpbmU7Ci0KLSAgICAgICAgaWYgKG1Db250ZXh0LnNvdXJjZVBhdGgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1Cb2R5IDw8ICIgXCIiIDw8IG1Db250ZXh0LnNvdXJjZVBhdGggPDwgIlwiIjsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbUJvZHkgPDwgIlxuIjsKLSAgICB9Ci19Ci0K
LVRTdHJpbmcgT3V0cHV0SExTTDo6YXJndW1lbnRTdHJpbmcoY29uc3QgVEludGVybVN5bWJvbCAq
c3ltYm9sKQotewotICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gc3ltYm9sLT5nZXRRdWFsaWZp
ZXIoKTsKLSAgICBjb25zdCBUVHlwZSAmdHlwZSA9IHN5bWJvbC0+Z2V0VHlwZSgpOwotICAgIFRT
dHJpbmcgbmFtZSA9IHN5bWJvbC0+Z2V0U3ltYm9sKCk7Ci0KLSAgICBpZiAobmFtZS5lbXB0eSgp
KSAgIC8vIEhMU0wgZGVtYW5kcyBuYW1lZCBhcmd1bWVudHMsIGFsc28gZm9yIHByb3RvdHlwZXMK
LSAgICB7Ci0gICAgICAgIG5hbWUgPSAieCIgKyBzdHIobVVuaXF1ZUluZGV4KyspOwotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICBuYW1lID0gZGVjb3JhdGUobmFtZSk7Ci0gICAgfQot
Ci0gICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQgJiYgSXNTYW1wbGVyKHR5
cGUuZ2V0QmFzaWNUeXBlKCkpKQotICAgIHsKLSAgICAgICByZXR1cm4gcXVhbGlmaWVyU3RyaW5n
KHF1YWxpZmllcikgKyAiICIgKyB0ZXh0dXJlU3RyaW5nKHR5cGUpICsgIiB0ZXh0dXJlXyIgKyBu
YW1lICsgYXJyYXlTdHJpbmcodHlwZSkgKyAiLCAiICsKLSAgICAgICAgICAgICAgcXVhbGlmaWVy
U3RyaW5nKHF1YWxpZmllcikgKyAiIFNhbXBsZXJTdGF0ZSBzYW1wbGVyXyIgKyBuYW1lICsgYXJy
YXlTdHJpbmcodHlwZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHF1YWxpZmllclN0cmluZyhxdWFs
aWZpZXIpICsgIiAiICsgdHlwZVN0cmluZyh0eXBlKSArICIgIiArIG5hbWUgKyBhcnJheVN0cmlu
Zyh0eXBlKTsKLX0KLQotVFN0cmluZyBPdXRwdXRITFNMOjpxdWFsaWZpZXJTdHJpbmcoVFF1YWxp
ZmllciBxdWFsaWZpZXIpCi17Ci0gICAgc3dpdGNoKHF1YWxpZmllcikKLSAgICB7Ci0gICAgICBj
YXNlIEV2cUluOiAgICAgICAgICAgIHJldHVybiAiaW4iOwotICAgICAgY2FzZSBFdnFPdXQ6ICAg
ICAgICAgICByZXR1cm4gIm91dCI7Ci0gICAgICBjYXNlIEV2cUluT3V0OiAgICAgICAgIHJldHVy
biAiaW5vdXQiOwotICAgICAgY2FzZSBFdnFDb25zdFJlYWRPbmx5OiByZXR1cm4gImNvbnN0IjsK
LSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuICIiOwot
fQotCi1UU3RyaW5nIE91dHB1dEhMU0w6OnR5cGVTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpCi17
Ci0gICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQotICAgIHsKLSAgICAg
ICAgY29uc3QgVFN0cmluZyYgdHlwZU5hbWUgPSB0eXBlLmdldFN0cnVjdCgpLT5uYW1lKCk7Ci0g
ICAgICAgIGlmICh0eXBlTmFtZSAhPSAiIikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IHN0cnVjdExvb2t1cCh0eXBlTmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSAgIC8vIE5h
bWVsZXNzIHN0cnVjdHVyZSwgZGVmaW5lIGluIHBsYWNlCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHR5cGUuZ2V0U3RydWN0KCktPmZpZWxkcygpOwot
Ci0gICAgICAgICAgICBUU3RyaW5nIHN0cmluZyA9ICJzdHJ1Y3RcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgZmllbGRzLnNpemUoKTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGNvbnN0IFRGaWVsZCAqZmllbGQgPSBmaWVsZHNbaV07Ci0KLSAgICAgICAgICAgICAgICBz
dHJpbmcgKz0gIiAgICAiICsgdHlwZVN0cmluZygqZmllbGQtPnR5cGUoKSkgKyAiICIgKyBkZWNv
cmF0ZShmaWVsZC0+bmFtZSgpKSArIGFycmF5U3RyaW5nKCpmaWVsZC0+dHlwZSgpKSArICI7XG4i
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzdHJpbmcgKz0gIn0gIjsKLQotICAgICAg
ICAgICAgcmV0dXJuIHN0cmluZzsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh0eXBl
LmlzTWF0cml4KCkpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUo
KSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgMjogcmV0dXJuICJmbG9hdDJ4MiI7Ci0gICAg
ICAgICAgY2FzZSAzOiByZXR1cm4gImZsb2F0M3gzIjsKLSAgICAgICAgICBjYXNlIDQ6IHJldHVy
biAiZmxvYXQ0eDQiOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAg
IHN3aXRjaCAodHlwZS5nZXRCYXNpY1R5cGUoKSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2Ug
RWJ0RmxvYXQ6Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gImZsb2F0IjsKLSAgICAg
ICAgICAgICAgY2FzZSAyOiByZXR1cm4gImZsb2F0MiI7Ci0gICAgICAgICAgICAgIGNhc2UgMzog
cmV0dXJuICJmbG9hdDMiOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiAiZmxvYXQ0IjsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIEVidEludDoKLSAgICAgICAgICAgIHN3aXRj
aCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBj
YXNlIDE6IHJldHVybiAiaW50IjsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gImludDIi
OwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiAiaW50MyI7Ci0gICAgICAgICAgICAgIGNh
c2UgNDogcmV0dXJuICJpbnQ0IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIEVidEJv
b2w6Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gImJvb2wiOwotICAgICAgICAgICAg
ICBjYXNlIDI6IHJldHVybiAiYm9vbDIiOwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiAi
Ym9vbDMiOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiAiYm9vbDQiOwotICAgICAgICAg
ICAgfQotICAgICAgICAgIGNhc2UgRWJ0Vm9pZDoKLSAgICAgICAgICAgIHJldHVybiAidm9pZCI7
Ci0gICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6Ci0gICAgICAgICAgICByZXR1cm4gInNhbXBs
ZXIyRCI7Ci0gICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKLSAgICAgICAgICAgIHJldHVy
biAic2FtcGxlckNVQkUiOwotICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOgot
ICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkQiOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgcmV0dXJuICI8dW5rbm93biB0eXBlPiI7Ci19Ci0KLVRTdHJpbmcgT3V0cHV0SExTTDo6dGV4
dHVyZVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUuZ2V0QmFz
aWNUeXBlKCkpCi0gICAgewotICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6Ci0gICAgICAgIHJldHVy
biAiVGV4dHVyZTJEIjsKLSAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6Ci0gICAgICAgIHJldHVy
biAiVGV4dHVyZUN1YmUiOwotICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6Ci0gICAg
ICAgIHJldHVybiAiVGV4dHVyZTJEIjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLQotICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgcmV0dXJuICI8dW5rbm93biB0ZXh0dXJl
IHR5cGU+IjsKLX0KLQotVFN0cmluZyBPdXRwdXRITFNMOjphcnJheVN0cmluZyhjb25zdCBUVHlw
ZSAmdHlwZSkKLXsKLSAgICBpZiAoIXR5cGUuaXNBcnJheSgpKQotICAgIHsKLSAgICAgICAgcmV0
dXJuICIiOwotICAgIH0KLQotICAgIHJldHVybiAiWyIgKyBzdHIodHlwZS5nZXRBcnJheVNpemUo
KSkgKyAiXSI7Ci19Ci0KLVRTdHJpbmcgT3V0cHV0SExTTDo6aW5pdGlhbGl6ZXIoY29uc3QgVFR5
cGUgJnR5cGUpCi17Ci0gICAgVFN0cmluZyBzdHJpbmc7Ci0KLSAgICBzaXplX3Qgc2l6ZSA9IHR5
cGUuZ2V0T2JqZWN0U2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGNvbXBvbmVudCA9IDA7IGNvbXBv
bmVudCA8IHNpemU7IGNvbXBvbmVudCsrKQotICAgIHsKLSAgICAgICAgc3RyaW5nICs9ICIwIjsK
LQotICAgICAgICBpZiAoY29tcG9uZW50ICsgMSA8IHNpemUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHN0cmluZyArPSAiLCAiOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuICJ7IiAr
IHN0cmluZyArICJ9IjsKLX0KLQotdm9pZCBPdXRwdXRITFNMOjphZGRDb25zdHJ1Y3Rvcihjb25z
dCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSwgY29uc3QgVEludGVybVNlcXVlbmNl
ICpwYXJhbWV0ZXJzKQotewotICAgIGlmIChuYW1lID09ICIiKQotICAgIHsKLSAgICAgICAgcmV0
dXJuOyAgIC8vIE5hbWVsZXNzIHN0cnVjdHVyZXMgZG9uJ3QgaGF2ZSBjb25zdHJ1Y3RvcnMKLSAg
ICB9Ci0KLSAgICBpZiAodHlwZS5nZXRTdHJ1Y3QoKSAmJiBtU3RydWN0TmFtZXMuZmluZChkZWNv
cmF0ZShuYW1lKSkgIT0gbVN0cnVjdE5hbWVzLmVuZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJu
OyAgIC8vIEFscmVhZHkgYWRkZWQKLSAgICB9Ci0KLSAgICBUVHlwZSBjdG9yVHlwZSA9IHR5cGU7
Ci0gICAgY3RvclR5cGUuY2xlYXJBcnJheW5lc3MoKTsKLSAgICBjdG9yVHlwZS5zZXRQcmVjaXNp
b24oRWJwSGlnaCk7Ci0gICAgY3RvclR5cGUuc2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7Ci0K
LSAgICBUU3RyaW5nIGN0b3JOYW1lID0gdHlwZS5nZXRTdHJ1Y3QoKSA/IGRlY29yYXRlKG5hbWUp
IDogbmFtZTsKLQotICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VFR5cGU+IFBhcmFtZXRlckFycmF5
OwotICAgIFBhcmFtZXRlckFycmF5IGN0b3JQYXJhbWV0ZXJzOwotCi0gICAgaWYgKHR5cGUuZ2V0
U3RydWN0KCkpCi0gICAgewotICAgICAgICBtU3RydWN0TmFtZXMuaW5zZXJ0KGRlY29yYXRlKG5h
bWUpKTsKLQotICAgICAgICBUU3RyaW5nIHN0cnVjdHVyZTsKLSAgICAgICAgc3RydWN0dXJlICs9
ICJzdHJ1Y3QgIiArIGRlY29yYXRlKG5hbWUpICsgIlxuIgotICAgICAgICAgICAgICAgICAgICAg
IntcbiI7Ci0KLSAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gdHlwZS5nZXRTdHJ1
Y3QoKS0+ZmllbGRzKCk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBm
aWVsZHMuc2l6ZSgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAq
ZmllbGQgPSBmaWVsZHNbaV07Ci0KLSAgICAgICAgICAgIHN0cnVjdHVyZSArPSAiICAgICIgKyB0
eXBlU3RyaW5nKCpmaWVsZC0+dHlwZSgpKSArICIgIiArIGRlY29yYXRlRmllbGQoZmllbGQtPm5h
bWUoKSwgdHlwZSkgKyBhcnJheVN0cmluZygqZmllbGQtPnR5cGUoKSkgKyAiO1xuIjsKLSAgICAg
ICAgfQotCi0gICAgICAgIHN0cnVjdHVyZSArPSAifTtcbiI7Ci0KLSAgICAgICAgaWYgKHN0ZDo6
ZmluZChtU3RydWN0RGVjbGFyYXRpb25zLmJlZ2luKCksIG1TdHJ1Y3REZWNsYXJhdGlvbnMuZW5k
KCksIHN0cnVjdHVyZSkgPT0gbVN0cnVjdERlY2xhcmF0aW9ucy5lbmQoKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgbVN0cnVjdERlY2xhcmF0aW9ucy5wdXNoX2JhY2soc3RydWN0dXJlKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZmllbGRzLnNp
emUoKTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBjdG9yUGFyYW1ldGVycy5wdXNoX2Jh
Y2soKmZpZWxkc1tpXS0+dHlwZSgpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChw
YXJhbWV0ZXJzKQotICAgIHsKLSAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0
ZXJhdG9yIHBhcmFtZXRlciA9IHBhcmFtZXRlcnMtPmJlZ2luKCk7IHBhcmFtZXRlciAhPSBwYXJh
bWV0ZXJzLT5lbmQoKTsgcGFyYW1ldGVyKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGN0b3JQ
YXJhbWV0ZXJzLnB1c2hfYmFjaygoKnBhcmFtZXRlciktPmdldEFzVHlwZWQoKS0+Z2V0VHlwZSgp
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICBUU3Ry
aW5nIGNvbnN0cnVjdG9yOwotCi0gICAgaWYgKGN0b3JUeXBlLmdldFN0cnVjdCgpKQotICAgIHsK
LSAgICAgICAgY29uc3RydWN0b3IgKz0gY3Rvck5hbWUgKyAiICIgKyBjdG9yTmFtZSArICJfY3Rv
cigiOwotICAgIH0KLSAgICBlbHNlICAgLy8gQnVpbHQtaW4gdHlwZQotICAgIHsKLSAgICAgICAg
Y29uc3RydWN0b3IgKz0gdHlwZVN0cmluZyhjdG9yVHlwZSkgKyAiICIgKyBjdG9yTmFtZSArICIo
IjsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBwYXJhbWV0ZXIgPSAwOyBwYXJhbWV0
ZXIgPCBjdG9yUGFyYW1ldGVycy5zaXplKCk7IHBhcmFtZXRlcisrKQotICAgIHsKLSAgICAgICAg
Y29uc3QgVFR5cGUgJnR5cGUgPSBjdG9yUGFyYW1ldGVyc1twYXJhbWV0ZXJdOwotCi0gICAgICAg
IGNvbnN0cnVjdG9yICs9IHR5cGVTdHJpbmcodHlwZSkgKyAiIHgiICsgc3RyKHBhcmFtZXRlcikg
KyBhcnJheVN0cmluZyh0eXBlKTsKLQotICAgICAgICBpZiAocGFyYW1ldGVyIDwgY3RvclBhcmFt
ZXRlcnMuc2l6ZSgpIC0gMSkKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3RydWN0b3IgKz0g
IiwgIjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbnN0cnVjdG9yICs9ICIpXG4iCi0gICAg
ICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBpZiAoY3RvclR5cGUuZ2V0U3RydWN0KCkpCi0g
ICAgewotICAgICAgICBjb25zdHJ1Y3RvciArPSAiICAgICIgKyBjdG9yTmFtZSArICIgc3RydWN0
dXJlID0geyI7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGNvbnN0cnVjdG9yICs9
ICIgICAgcmV0dXJuICIgKyB0eXBlU3RyaW5nKGN0b3JUeXBlKSArICIoIjsKLSAgICB9Ci0KLSAg
ICBpZiAoY3RvclR5cGUuaXNNYXRyaXgoKSAmJiBjdG9yUGFyYW1ldGVycy5zaXplKCkgPT0gMSkK
LSAgICB7Ci0gICAgICAgIGludCBkaW0gPSBjdG9yVHlwZS5nZXROb21pbmFsU2l6ZSgpOwotICAg
ICAgICBjb25zdCBUVHlwZSAmcGFyYW1ldGVyID0gY3RvclBhcmFtZXRlcnNbMF07Ci0KLSAgICAg
ICAgaWYgKHBhcmFtZXRlci5pc1NjYWxhcigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3Ig
KGludCByb3cgPSAwOyByb3cgPCBkaW07IHJvdysrKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IGRpbTsgY29sKyspCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSBUU3RyaW5nKChyb3cgPT0g
Y29sKSA/ICJ4MCIgOiAiMC4wIik7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICBpZiAocm93IDwgZGltIC0gMSB8fCBjb2wgPCBkaW0gLSAxKQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSAiLCAiOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHBhcmFtZXRlci5pc01hdHJpeCgpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBkaW07IHJvdysrKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IGRpbTsg
Y29sKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAocm93IDwg
cGFyYW1ldGVyLmdldE5vbWluYWxTaXplKCkgJiYgY29sIDwgcGFyYW1ldGVyLmdldE5vbWluYWxT
aXplKCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0cnVjdG9yICs9IFRTdHJpbmcoIngwIikgKyAiWyIgKyBzdHIocm93KSArICJdIiArICJbIiAr
IHN0cihjb2wpICsgIl0iOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3RydWN0b3IgKz0gVFN0cmluZygocm93ID09IGNvbCkgPyAiMS4wIiA6ICIwLjAiKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChyb3cgPCBkaW0g
LSAxIHx8IGNvbCA8IGRpbSAtIDEpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9ICIsICI7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZSBVTlJFQUNIQUJMRSgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBzaXplX3Qg
cmVtYWluaW5nQ29tcG9uZW50cyA9IGN0b3JUeXBlLmdldE9iamVjdFNpemUoKTsKLSAgICAgICAg
c2l6ZV90IHBhcmFtZXRlckluZGV4ID0gMDsKLQotICAgICAgICB3aGlsZSAocmVtYWluaW5nQ29t
cG9uZW50cyA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IFRUeXBlICZwYXJhbWV0
ZXIgPSBjdG9yUGFyYW1ldGVyc1twYXJhbWV0ZXJJbmRleF07Ci0gICAgICAgICAgICBjb25zdCBz
aXplX3QgcGFyYW1ldGVyU2l6ZSA9IHBhcmFtZXRlci5nZXRPYmplY3RTaXplKCk7Ci0gICAgICAg
ICAgICBib29sIG1vcmVQYXJhbWV0ZXJzID0gcGFyYW1ldGVySW5kZXggKyAxIDwgY3RvclBhcmFt
ZXRlcnMuc2l6ZSgpOwotCi0gICAgICAgICAgICBjb25zdHJ1Y3RvciArPSAieCIgKyBzdHIoc3Rh
dGljX2Nhc3Q8aW50PihwYXJhbWV0ZXJJbmRleCkpOwotCi0gICAgICAgICAgICBpZiAocGFyYW1l
dGVyLmlzU2NhbGFyKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHBh
cmFtZXRlclNpemUgPD0gcmVtYWluaW5nQ29tcG9uZW50cyk7Ci0gICAgICAgICAgICAgICAgcmVt
YWluaW5nQ29tcG9uZW50cyAtPSBwYXJhbWV0ZXJTaXplOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZSBpZiAocGFyYW1ldGVyLmlzVmVjdG9yKCkpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHJlbWFpbmluZ0NvbXBvbmVudHMgPT0gcGFyYW1ldGVyU2l6ZSB8fCBt
b3JlUGFyYW1ldGVycykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEFT
U0VSVChwYXJhbWV0ZXJTaXplIDw9IHJlbWFpbmluZ0NvbXBvbmVudHMpOwotICAgICAgICAgICAg
ICAgICAgICByZW1haW5pbmdDb21wb25lbnRzIC09IHBhcmFtZXRlclNpemU7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlbWFpbmluZ0NvbXBvbmVudHMgPCBz
dGF0aWNfY2FzdDxzaXplX3Q+KHBhcmFtZXRlci5nZXROb21pbmFsU2l6ZSgpKSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocmVtYWluaW5nQ29tcG9uZW50
cykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTog
Y29uc3RydWN0b3IgKz0gIi54IjsgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAyOiBjb25zdHJ1Y3RvciArPSAiLnh5IjsgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIDM6IGNvbnN0cnVjdG9yICs9ICIueHl6IjsgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgNDogY29uc3RydWN0b3IgKz0gIi54eXp3IjsgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ0NvbXBvbmVudHMgPSAwOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChwYXJhbWV0ZXIuaXNNYXRyaXgoKSB8fCBwYXJh
bWV0ZXIuZ2V0U3RydWN0KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQVNTRVJU
KHJlbWFpbmluZ0NvbXBvbmVudHMgPT0gcGFyYW1ldGVyU2l6ZSB8fCBtb3JlUGFyYW1ldGVycyk7
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHBhcmFtZXRlclNpemUgPD0gcmVtYWluaW5nQ29tcG9u
ZW50cyk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcmVtYWluaW5nQ29tcG9u
ZW50cyAtPSBwYXJhbWV0ZXJTaXplOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBV
TlJFQUNIQUJMRSgpOwotCi0gICAgICAgICAgICBpZiAobW9yZVBhcmFtZXRlcnMpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcGFyYW1ldGVySW5kZXgrKzsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKHJlbWFpbmluZ0NvbXBvbmVudHMpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gIiwgIjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGlmIChjdG9yVHlwZS5nZXRTdHJ1Y3QoKSkKLSAgICB7Ci0gICAg
ICAgIGNvbnN0cnVjdG9yICs9ICJ9O1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiBzdHJ1Y3R1cmU7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iOwotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICBjb25zdHJ1Y3RvciArPSAiKTtcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIn1cbiI7Ci0gICAgfQotCi0gICAgbUNvbnN0cnVjdG9ycy5pbnNlcnQo
Y29uc3RydWN0b3IpOwotfQotCi1jb25zdCBDb25zdGFudFVuaW9uICpPdXRwdXRITFNMOjp3cml0
ZUNvbnN0YW50VW5pb24oY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IENvbnN0YW50VW5pb24gKmNv
bnN0VW5pb24pCi17Ci0gICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7Ci0KLSAgICBpZiAo
dHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCi0gICAgewotICAgICAgICBvdXQgPDwg
c3RydWN0TG9va3VwKHR5cGUuZ2V0U3RydWN0KCktPm5hbWUoKSkgKyAiX2N0b3IoIjsKLSAgICAg
ICAgCi0gICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHR5cGUuZ2V0U3RydWN0KCkt
PmZpZWxkcygpOwotCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUo
KTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBUVHlwZSAqZmllbGRUeXBlID0g
ZmllbGRzW2ldLT50eXBlKCk7Ci0KLSAgICAgICAgICAgIGNvbnN0VW5pb24gPSB3cml0ZUNvbnN0
YW50VW5pb24oKmZpZWxkVHlwZSwgY29uc3RVbmlvbik7Ci0KLSAgICAgICAgICAgIGlmIChpICE9
IGZpZWxkcy5zaXplKCkgLSAxKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8
PCAiLCAiOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgb3V0IDw8ICIpIjsK
LSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSB0eXBlLmdldE9i
amVjdFNpemUoKTsKLSAgICAgICAgYm9vbCB3cml0ZVR5cGUgPSBzaXplID4gMTsKLSAgICAgICAg
Ci0gICAgICAgIGlmICh3cml0ZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCB0
eXBlU3RyaW5nKHR5cGUpIDw8ICIoIjsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2l6ZTsgaSsrLCBjb25zdFVuaW9uKyspCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHN3aXRjaCAoY29uc3RVbmlvbi0+Z2V0VHlwZSgpKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICBjYXNlIEVidEZsb2F0OiBvdXQgPDwgc3RkOjptaW4oRkxUX01BWCwgc3RkOjptYXgo
LUZMVF9NQVgsIGNvbnN0VW5pb24tPmdldEZDb25zdCgpKSk7IGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEVidEludDogICBvdXQgPDwgY29uc3RVbmlvbi0+Z2V0SUNvbnN0KCk7IGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6ICBvdXQgPDwgY29uc3RVbmlvbi0+Z2V0QkNvbnN0
KCk7IGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaSAhPSBzaXplIC0gMSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIGlmICh3cml0ZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAi
KSI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gY29uc3RVbmlvbjsKLX0KLQotVFN0
cmluZyBPdXRwdXRITFNMOjpzY29wZVN0cmluZyh1bnNpZ25lZCBpbnQgZGVwdGhMaW1pdCkKLXsK
LSAgICBUU3RyaW5nIHN0cmluZzsKLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
bVNjb3BlQnJhY2tldC5zaXplKCkgJiYgaSA8IGRlcHRoTGltaXQ7IGkrKykKLSAgICB7Ci0gICAg
ICAgIHN0cmluZyArPSAiXyIgKyBzdHIoaSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0cmluZzsK
LX0KLQotVFN0cmluZyBPdXRwdXRITFNMOjpzY29wZWRTdHJ1Y3QoY29uc3QgVFN0cmluZyAmdHlw
ZU5hbWUpCi17Ci0gICAgaWYgKHR5cGVOYW1lID09ICIiKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHR5cGVOYW1lOwotICAgIH0KLQotICAgIHJldHVybiB0eXBlTmFtZSArIHNjb3BlU3RyaW5nKG1T
Y29wZURlcHRoKTsKLX0KLQotVFN0cmluZyBPdXRwdXRITFNMOjpzdHJ1Y3RMb29rdXAoY29uc3Qg
VFN0cmluZyAmdHlwZU5hbWUpCi17Ci0gICAgZm9yIChpbnQgZGVwdGggPSBtU2NvcGVEZXB0aDsg
ZGVwdGggPj0gMDsgZGVwdGgtLSkKLSAgICB7Ci0gICAgICAgIFRTdHJpbmcgc2NvcGVkTmFtZSA9
IGRlY29yYXRlKHR5cGVOYW1lICsgc2NvcGVTdHJpbmcoZGVwdGgpKTsKLQotICAgICAgICBmb3Ig
KFN0cnVjdE5hbWVzOjppdGVyYXRvciBzdHJ1Y3ROYW1lID0gbVN0cnVjdE5hbWVzLmJlZ2luKCk7
IHN0cnVjdE5hbWUgIT0gbVN0cnVjdE5hbWVzLmVuZCgpOyBzdHJ1Y3ROYW1lKyspCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmICgqc3RydWN0TmFtZSA9PSBzY29wZWROYW1lKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHJldHVybiBzY29wZWROYW1lOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgVU5SRUFDSEFCTEUoKTsgICAvLyBTaG91bGQgaGF2ZSBm
b3VuZCBhIG1hdGNoaW5nIGNvbnN0cnVjdG9yCi0KLSAgICByZXR1cm4gdHlwZU5hbWU7Ci19Ci0K
LVRTdHJpbmcgT3V0cHV0SExTTDo6ZGVjb3JhdGUoY29uc3QgVFN0cmluZyAmc3RyaW5nKQotewot
ICAgIGlmIChzdHJpbmcuY29tcGFyZSgwLCAzLCAiZ2xfIikgIT0gMCAmJiBzdHJpbmcuY29tcGFy
ZSgwLCAzLCAiZHhfIikgIT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAiXyIgKyBzdHJpbmc7
Ci0gICAgfQotICAgIAotICAgIHJldHVybiBzdHJpbmc7Ci19Ci0KLVRTdHJpbmcgT3V0cHV0SExT
TDo6ZGVjb3JhdGVVbmlmb3JtKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFR5cGUgJnR5
cGUpCi17Ci0gICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U2FtcGxlckV4dGVybmFs
T0VTKQotICAgIHsKLSAgICAgICAgcmV0dXJuICJleF8iICsgc3RyaW5nOwotICAgIH0KLSAgICAK
LSAgICByZXR1cm4gZGVjb3JhdGUoc3RyaW5nKTsKLX0KLQotVFN0cmluZyBPdXRwdXRITFNMOjpk
ZWNvcmF0ZUZpZWxkKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFR5cGUgJnN0cnVjdHVy
ZSkKLXsKLSAgICBpZiAoc3RydWN0dXJlLmdldFN0cnVjdCgpLT5uYW1lKCkuY29tcGFyZSgwLCAz
LCAiZ2xfIikgIT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBkZWNvcmF0ZShzdHJpbmcpOwot
ICAgIH0KLQotICAgIHJldHVybiBzdHJpbmc7Ci19Ci0KLVRTdHJpbmcgT3V0cHV0SExTTDo6cmVn
aXN0ZXJTdHJpbmcoVEludGVybVN5bWJvbCAqb3BlcmFuZCkKLXsKLSAgICBBU1NFUlQob3BlcmFu
ZC0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxVW5pZm9ybSk7Ci0KLSAgICBpZiAoSXNTYW1wbGVyKG9w
ZXJhbmQtPmdldEJhc2ljVHlwZSgpKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAicyIgKyBzdHIo
c2FtcGxlclJlZ2lzdGVyKG9wZXJhbmQpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gImMiICsgc3Ry
KHVuaWZvcm1SZWdpc3RlcihvcGVyYW5kKSk7Ci19Ci0KLWludCBPdXRwdXRITFNMOjpzYW1wbGVy
UmVnaXN0ZXIoVEludGVybVN5bWJvbCAqc2FtcGxlcikKLXsKLSAgICBjb25zdCBUVHlwZSAmdHlw
ZSA9IHNhbXBsZXItPmdldFR5cGUoKTsKLSAgICBBU1NFUlQoSXNTYW1wbGVyKHR5cGUuZ2V0QmFz
aWNUeXBlKCkpKTsKLQotICAgIGludCBpbmRleCA9IG1TYW1wbGVyUmVnaXN0ZXI7Ci0gICAgbVNh
bXBsZXJSZWdpc3RlciArPSBzYW1wbGVyLT50b3RhbFJlZ2lzdGVyQ291bnQoKTsKLQotICAgIGRl
Y2xhcmVVbmlmb3JtKHR5cGUsIHNhbXBsZXItPmdldFN5bWJvbCgpLCBpbmRleCk7Ci0KLSAgICBy
ZXR1cm4gaW5kZXg7Ci19Ci0KLWludCBPdXRwdXRITFNMOjp1bmlmb3JtUmVnaXN0ZXIoVEludGVy
bVN5bWJvbCAqdW5pZm9ybSkKLXsKLSAgICBjb25zdCBUVHlwZSAmdHlwZSA9IHVuaWZvcm0tPmdl
dFR5cGUoKTsKLSAgICBBU1NFUlQoIUlzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSk7Ci0K
LSAgICBpbnQgaW5kZXggPSBtVW5pZm9ybVJlZ2lzdGVyOwotICAgIG1Vbmlmb3JtUmVnaXN0ZXIg
Kz0gdW5pZm9ybS0+dG90YWxSZWdpc3RlckNvdW50KCk7Ci0KLSAgICBkZWNsYXJlVW5pZm9ybSh0
eXBlLCB1bmlmb3JtLT5nZXRTeW1ib2woKSwgaW5kZXgpOwotCi0gICAgcmV0dXJuIGluZGV4Owot
fQotCi12b2lkIE91dHB1dEhMU0w6OmRlY2xhcmVVbmlmb3JtKGNvbnN0IFRUeXBlICZ0eXBlLCBj
b25zdCBUU3RyaW5nICZuYW1lLCBpbnQgaW5kZXgpCi17Ci0gICAgVFN0cnVjdHVyZSAqc3RydWN0
dXJlID0gdHlwZS5nZXRTdHJ1Y3QoKTsKLQotICAgIGlmICghc3RydWN0dXJlKQotICAgIHsKLSAg
ICAgICAgbUFjdGl2ZVVuaWZvcm1zLnB1c2hfYmFjayhVbmlmb3JtKGdsVmFyaWFibGVUeXBlKHR5
cGUpLCBnbFZhcmlhYmxlUHJlY2lzaW9uKHR5cGUpLCBuYW1lLmNfc3RyKCksIHR5cGUuZ2V0QXJy
YXlTaXplKCksIGluZGV4KSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGNvbnN0
IFRGaWVsZExpc3QgJmZpZWxkcyA9IHN0cnVjdHVyZS0+ZmllbGRzKCk7Ci0KLSAgICAgICAgaWYg
KHR5cGUuaXNBcnJheSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgZWxlbWVudEluZGV4
ID0gaW5kZXg7Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZS5nZXRBcnJh
eVNpemUoKTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGogPSAwOyBqIDwgZmllbGRzLnNpemUoKTsgaisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJmZpZWxkVHlwZSA9ICpmaWVsZHNbal0tPnR5cGUo
KTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyB1bmlmb3JtTmFtZSA9IG5hbWUg
KyAiWyIgKyBzdHIoaSkgKyAiXS4iICsgZmllbGRzW2pdLT5uYW1lKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGRlY2xhcmVVbmlmb3JtKGZpZWxkVHlwZSwgdW5pZm9ybU5hbWUsIGVsZW1lbnRJbmRl
eCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRJbmRleCArPSBmaWVsZFR5cGUudG90YWxS
ZWdpc3RlckNvdW50KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGZpZWxkSW5kZXgg
PSBpbmRleDsKLQotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6
ZSgpOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJmZp
ZWxkVHlwZSA9ICpmaWVsZHNbaV0tPnR5cGUoKTsKLSAgICAgICAgICAgICAgICBjb25zdCBUU3Ry
aW5nIHVuaWZvcm1OYW1lID0gbmFtZSArICIuIiArIGZpZWxkc1tpXS0+bmFtZSgpOwotICAgICAg
ICAgICAgICAgIGRlY2xhcmVVbmlmb3JtKGZpZWxkVHlwZSwgdW5pZm9ybU5hbWUsIGZpZWxkSW5k
ZXgpOwotICAgICAgICAgICAgICAgIGZpZWxkSW5kZXggKz0gZmllbGRUeXBlLnRvdGFsUmVnaXN0
ZXJDb3VudCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1HTGVudW0g
T3V0cHV0SExTTDo6Z2xWYXJpYWJsZVR5cGUoY29uc3QgVFR5cGUgJnR5cGUpCi17Ci0gICAgaWYg
KHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0RmxvYXQpCi0gICAgewotICAgICAgICBpZiAodHlw
ZS5pc1NjYWxhcigpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRkxPQVQ7Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodHlwZS5pc1ZlY3RvcigpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBzd2l0Y2godHlwZS5nZXROb21pbmFsU2l6ZSgpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBHTF9GTE9BVF9WRUMyOwotICAgICAgICAgICAg
ICBjYXNlIDM6IHJldHVybiBHTF9GTE9BVF9WRUMzOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJl
dHVybiBHTF9GTE9BVF9WRUM0OwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHR5cGUuaXNNYXRy
aXgoKSkKLSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoKHR5cGUuZ2V0Tm9taW5hbFNpemUo
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gR0xfRkxPQVRf
TUFUMjsKLSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gR0xfRkxPQVRfTUFUMzsKLSAgICAg
ICAgICAgICAgY2FzZSA0OiByZXR1cm4gR0xfRkxPQVRfTUFUNDsKLSAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUuZ2V0QmFzaWNUeXBl
KCkgPT0gRWJ0SW50KQotICAgIHsKLSAgICAgICAgaWYgKHR5cGUuaXNTY2FsYXIoKSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0lOVDsKLSAgICAgICAgfQotICAgICAgICBlbHNl
IGlmICh0eXBlLmlzVmVjdG9yKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCh0eXBl
LmdldE5vbWluYWxTaXplKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMjog
cmV0dXJuIEdMX0lOVF9WRUMyOwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBHTF9JTlRf
VkVDMzsKLSAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gR0xfSU5UX1ZFQzQ7Ci0gICAgICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlLmdl
dEJhc2ljVHlwZSgpID09IEVidEJvb2wpCi0gICAgewotICAgICAgICBpZiAodHlwZS5pc1NjYWxh
cigpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfQk9PTDsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlIGlmICh0eXBlLmlzVmVjdG9yKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHN3aXRjaCh0eXBlLmdldE5vbWluYWxTaXplKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgIGNhc2UgMjogcmV0dXJuIEdMX0JPT0xfVkVDMjsKLSAgICAgICAgICAgICAgY2FzZSAzOiBy
ZXR1cm4gR0xfQk9PTF9WRUMzOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBHTF9CT09M
X1ZFQzQ7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgIH0KLSAgICBl
bHNlIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFNhbXBsZXIyRCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBHTF9TQU1QTEVSXzJEOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlLmdldEJh
c2ljVHlwZSgpID09IEVidFNhbXBsZXJDdWJlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX1NB
TVBMRVJfQ1VCRTsKLSAgICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgcmV0dXJu
IEdMX05PTkU7Ci19Ci0KLUdMZW51bSBPdXRwdXRITFNMOjpnbFZhcmlhYmxlUHJlY2lzaW9uKGNv
bnN0IFRUeXBlICZ0eXBlKQotewotICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidEZs
b2F0KQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlLmdldFByZWNpc2lvbigpKQotICAgICAg
ICB7Ci0gICAgICAgICAgY2FzZSBFYnBIaWdoOiAgIHJldHVybiBHTF9ISUdIX0ZMT0FUOwotICAg
ICAgICAgIGNhc2UgRWJwTWVkaXVtOiByZXR1cm4gR0xfTUVESVVNX0ZMT0FUOwotICAgICAgICAg
IGNhc2UgRWJwTG93OiAgICByZXR1cm4gR0xfTE9XX0ZMT0FUOwotICAgICAgICAgIGNhc2UgRWJw
VW5kZWZpbmVkOgotICAgICAgICAgICAgLy8gU2hvdWxkIGJlIGRlZmluZWQgYXMgdGhlIGRlZmF1
bHQgcHJlY2lzaW9uIGJ5IHRoZSBwYXJzZXIKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkg
PT0gRWJ0SW50KQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlLmdldFByZWNpc2lvbigpKQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBFYnBIaWdoOiAgIHJldHVybiBHTF9ISUdIX0lOVDsK
LSAgICAgICAgICBjYXNlIEVicE1lZGl1bTogcmV0dXJuIEdMX01FRElVTV9JTlQ7Ci0gICAgICAg
ICAgY2FzZSBFYnBMb3c6ICAgIHJldHVybiBHTF9MT1dfSU5UOwotICAgICAgICAgIGNhc2UgRWJw
VW5kZWZpbmVkOgotICAgICAgICAgICAgLy8gU2hvdWxkIGJlIGRlZmluZWQgYXMgdGhlIGRlZmF1
bHQgcHJlY2lzaW9uIGJ5IHRoZSBwYXJzZXIKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gT3RoZXIgdHlwZXMgKGJvb2xlYW4sIHNh
bXBsZXIpIGRvbid0IGhhdmUgYSBwcmVjaXNpb24KLSAgICByZXR1cm4gR0xfTk9ORTsKLX0KLQot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1
dEhMU0wuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNM
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NmE3NmZiOWM3MTRkYmNlODEzYjYz
ODRlOGJjNDk1Y2U5OGFjZWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wu
aAorKysgL2Rldi9udWxsCkBAIC0xLDE2NyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0j
aWZuZGVmIENPTVBJTEVSX09VVFBVVEhMU0xfSF8KLSNkZWZpbmUgQ09NUElMRVJfT1VUUFVUSExT
TF9IXwotCi0jaW5jbHVkZSA8bGlzdD4KLSNpbmNsdWRlIDxzZXQ+Ci0jaW5jbHVkZSA8bWFwPgot
Ci0jZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLQotI2luY2x1ZGUg
ImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlQ29udGV4
dC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1VuaWZvcm0uaCIKLQotbmFtZXNwYWNlIHNoCi17Ci1j
bGFzcyBVbmZvbGRTaG9ydENpcmN1aXQ7Ci0KLWNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVElu
dGVybVRyYXZlcnNlcgotewotICBwdWJsaWM6Ci0gICAgT3V0cHV0SExTTChUUGFyc2VDb250ZXh0
ICZjb250ZXh0LCBjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291cmNlcywgU2hTaGFkZXJP
dXRwdXQgb3V0cHV0VHlwZSk7Ci0gICAgfk91dHB1dEhMU0woKTsKLQotICAgIHZvaWQgb3V0cHV0
KCk7Ci0KLSAgICBUSW5mb1NpbmtCYXNlICZnZXRCb2R5U3RyZWFtKCk7Ci0gICAgY29uc3QgQWN0
aXZlVW5pZm9ybXMgJmdldFVuaWZvcm1zKCk7Ci0KLSAgICBUU3RyaW5nIHR5cGVTdHJpbmcoY29u
c3QgVFR5cGUgJnR5cGUpOwotICAgIFRTdHJpbmcgdGV4dHVyZVN0cmluZyhjb25zdCBUVHlwZSAm
dHlwZSk7Ci0gICAgc3RhdGljIFRTdHJpbmcgcXVhbGlmaWVyU3RyaW5nKFRRdWFsaWZpZXIgcXVh
bGlmaWVyKTsKLSAgICBzdGF0aWMgVFN0cmluZyBhcnJheVN0cmluZyhjb25zdCBUVHlwZSAmdHlw
ZSk7Ci0gICAgc3RhdGljIFRTdHJpbmcgaW5pdGlhbGl6ZXIoY29uc3QgVFR5cGUgJnR5cGUpOwot
ICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlKGNvbnN0IFRTdHJpbmcgJnN0cmluZyk7ICAgICAg
ICAgICAgICAgICAgICAgIC8vIFByZXBlbmRzIGFuIHVuZGVyc2NvcmUgdG8gYXZvaWQgbmFtaW5n
IGNsYXNoZXMKLSAgICBzdGF0aWMgVFN0cmluZyBkZWNvcmF0ZVVuaWZvcm0oY29uc3QgVFN0cmlu
ZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAmdHlwZSk7Ci0gICAgc3RhdGljIFRTdHJpbmcgZGVjb3Jh
dGVGaWVsZChjb25zdCBUU3RyaW5nICZzdHJpbmcsIGNvbnN0IFRUeXBlICZzdHJ1Y3R1cmUpOwot
Ci0gIHByb3RlY3RlZDoKLSAgICB2b2lkIGhlYWRlcigpOwotCi0gICAgLy8gVmlzaXQgQVNUIG5v
ZGVzIGFuZCBvdXRwdXQgdGhlaXIgY29kZSB0byB0aGUgYm9keSBzdHJlYW0KLSAgICB2b2lkIHZp
c2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKLSAgICB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihU
SW50ZXJtQ29uc3RhbnRVbmlvbiopOwotICAgIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQs
IFRJbnRlcm1CaW5hcnkqKTsKLSAgICBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRl
cm1VbmFyeSopOwotICAgIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1T
ZWxlY3Rpb24qKTsKLSAgICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJt
QWdncmVnYXRlKik7Ci0gICAgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29w
Kik7Ci0gICAgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCopOwot
Ci0gICAgdm9pZCB0cmF2ZXJzZVN0YXRlbWVudHMoVEludGVybU5vZGUgKm5vZGUpOwotICAgIGJv
b2wgaXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpOwotICAgIGJvb2wgaGFuZGxl
RXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSk7Ci0gICAgdm9pZCBvdXRwdXRUcmlwbGV0
KFZpc2l0IHZpc2l0LCBjb25zdCBUU3RyaW5nICZwcmVTdHJpbmcsIGNvbnN0IFRTdHJpbmcgJmlu
U3RyaW5nLCBjb25zdCBUU3RyaW5nICZwb3N0U3RyaW5nKTsKLSAgICB2b2lkIG91dHB1dExpbmVE
aXJlY3RpdmUoaW50IGxpbmUpOwotICAgIFRTdHJpbmcgYXJndW1lbnRTdHJpbmcoY29uc3QgVElu
dGVybVN5bWJvbCAqc3ltYm9sKTsKLSAgICBpbnQgdmVjdG9yU2l6ZShjb25zdCBUVHlwZSAmdHlw
ZSkgY29uc3Q7Ci0KLSAgICB2b2lkIGFkZENvbnN0cnVjdG9yKGNvbnN0IFRUeXBlICZ0eXBlLCBj
b25zdCBUU3RyaW5nICZuYW1lLCBjb25zdCBUSW50ZXJtU2VxdWVuY2UgKnBhcmFtZXRlcnMpOwot
ICAgIGNvbnN0IENvbnN0YW50VW5pb24gKndyaXRlQ29uc3RhbnRVbmlvbihjb25zdCBUVHlwZSAm
dHlwZSwgY29uc3QgQ29uc3RhbnRVbmlvbiAqY29uc3RVbmlvbik7Ci0KLSAgICBUU3RyaW5nIHNj
b3BlU3RyaW5nKHVuc2lnbmVkIGludCBkZXB0aExpbWl0KTsKLSAgICBUU3RyaW5nIHNjb3BlZFN0
cnVjdChjb25zdCBUU3RyaW5nICZ0eXBlTmFtZSk7Ci0gICAgVFN0cmluZyBzdHJ1Y3RMb29rdXAo
Y29uc3QgVFN0cmluZyAmdHlwZU5hbWUpOwotCi0gICAgVFBhcnNlQ29udGV4dCAmbUNvbnRleHQ7
Ci0gICAgY29uc3QgU2hTaGFkZXJPdXRwdXQgbU91dHB1dFR5cGU7Ci0gICAgVW5mb2xkU2hvcnRD
aXJjdWl0ICptVW5mb2xkU2hvcnRDaXJjdWl0OwotICAgIGJvb2wgbUluc2lkZUZ1bmN0aW9uOwot
Ci0gICAgLy8gT3V0cHV0IHN0cmVhbXMKLSAgICBUSW5mb1NpbmtCYXNlIG1IZWFkZXI7Ci0gICAg
VEluZm9TaW5rQmFzZSBtQm9keTsKLSAgICBUSW5mb1NpbmtCYXNlIG1Gb290ZXI7Ci0KLSAgICB0
eXBlZGVmIHN0ZDo6bWFwPFRTdHJpbmcsIFRJbnRlcm1TeW1ib2wqPiBSZWZlcmVuY2VkU3ltYm9s
czsKLSAgICBSZWZlcmVuY2VkU3ltYm9scyBtUmVmZXJlbmNlZFVuaWZvcm1zOwotICAgIFJlZmVy
ZW5jZWRTeW1ib2xzIG1SZWZlcmVuY2VkQXR0cmlidXRlczsKLSAgICBSZWZlcmVuY2VkU3ltYm9s
cyBtUmVmZXJlbmNlZFZhcnlpbmdzOwotCi0gICAgLy8gUGFyYW1ldGVycyBkZXRlcm1pbmluZyB3
aGF0IGdvZXMgaW4gdGhlIGhlYWRlciBvdXRwdXQKLSAgICBib29sIG1Vc2VzVGV4dHVyZTJEOwot
ICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRfYmlhczsKLSAgICBib29sIG1Vc2VzVGV4dHVyZTJETG9k
OwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQ
cm9qX2JpYXM7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUyRFByb2pMb2Q7Ci0gICAgYm9vbCBtVXNl
c1RleHR1cmVDdWJlOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZV9iaWFzOwotICAgIGJvb2wg
bVVzZXNUZXh0dXJlQ3ViZUxvZDsKLSAgICBib29sIG1Vc2VzVGV4dHVyZTJETG9kMDsKLSAgICBi
b29sIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9q
TG9kMDsKLSAgICBib29sIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDBfYmlhczsKLSAgICBib29sIG1V
c2VzVGV4dHVyZUN1YmVMb2QwOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZUxvZDBfYmlhczsK
LSAgICBib29sIG1Vc2VzRnJhZ0NvbG9yOwotICAgIGJvb2wgbVVzZXNGcmFnRGF0YTsKLSAgICBi
b29sIG1Vc2VzRGVwdGhSYW5nZTsKLSAgICBib29sIG1Vc2VzRnJhZ0Nvb3JkOwotICAgIGJvb2wg
bVVzZXNQb2ludENvb3JkOwotICAgIGJvb2wgbVVzZXNGcm9udEZhY2luZzsKLSAgICBib29sIG1V
c2VzUG9pbnRTaXplOwotICAgIGJvb2wgbVVzZXNGcmFnRGVwdGg7Ci0gICAgYm9vbCBtVXNlc1hv
cjsKLSAgICBib29sIG1Vc2VzTW9kMTsKLSAgICBib29sIG1Vc2VzTW9kMnY7Ci0gICAgYm9vbCBt
VXNlc01vZDJmOwotICAgIGJvb2wgbVVzZXNNb2QzdjsKLSAgICBib29sIG1Vc2VzTW9kM2Y7Ci0g
ICAgYm9vbCBtVXNlc01vZDR2OwotICAgIGJvb2wgbVVzZXNNb2Q0ZjsKLSAgICBib29sIG1Vc2Vz
RmFjZWZvcndhcmQxOwotICAgIGJvb2wgbVVzZXNGYWNlZm9yd2FyZDI7Ci0gICAgYm9vbCBtVXNl
c0ZhY2Vmb3J3YXJkMzsKLSAgICBib29sIG1Vc2VzRmFjZWZvcndhcmQ0OwotICAgIGJvb2wgbVVz
ZXNBdGFuMl8xOwotICAgIGJvb2wgbVVzZXNBdGFuMl8yOwotICAgIGJvb2wgbVVzZXNBdGFuMl8z
OwotICAgIGJvb2wgbVVzZXNBdGFuMl80OwotICAgIGJvb2wgbVVzZXNEaXNjYXJkUmV3cml0aW5n
OwotCi0gICAgaW50IG1OdW1SZW5kZXJUYXJnZXRzOwotCi0gICAgdHlwZWRlZiBzdGQ6OnNldDxU
U3RyaW5nPiBDb25zdHJ1Y3RvcnM7Ci0gICAgQ29uc3RydWN0b3JzIG1Db25zdHJ1Y3RvcnM7Ci0K
LSAgICB0eXBlZGVmIHN0ZDo6c2V0PFRTdHJpbmc+IFN0cnVjdE5hbWVzOwotICAgIFN0cnVjdE5h
bWVzIG1TdHJ1Y3ROYW1lczsKLQotICAgIHR5cGVkZWYgc3RkOjpsaXN0PFRTdHJpbmc+IFN0cnVj
dERlY2xhcmF0aW9uczsKLSAgICBTdHJ1Y3REZWNsYXJhdGlvbnMgbVN0cnVjdERlY2xhcmF0aW9u
czsKLQotICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8aW50PiBTY29wZUJyYWNrZXQ7Ci0gICAgU2Nv
cGVCcmFja2V0IG1TY29wZUJyYWNrZXQ7Ci0gICAgdW5zaWduZWQgaW50IG1TY29wZURlcHRoOwot
Ci0gICAgaW50IG1VbmlxdWVJbmRleDsgICAvLyBGb3IgY3JlYXRpbmcgdW5pcXVlIG5hbWVzCi0K
LSAgICBib29sIG1Db250YWluc0xvb3BEaXNjb250aW51aXR5OwotICAgIGJvb2wgbU91dHB1dExv
ZDBGdW5jdGlvbjsKLSAgICBib29sIG1JbnNpZGVEaXNjb250aW51b3VzTG9vcDsKLQotICAgIFRJ
bnRlcm1TeW1ib2wgKm1FeGNlc3NpdmVMb29wSW5kZXg7Ci0KLSAgICBpbnQgbVVuaWZvcm1SZWdp
c3RlcjsKLSAgICBpbnQgbVNhbXBsZXJSZWdpc3RlcjsKLQotICAgIFRTdHJpbmcgcmVnaXN0ZXJT
dHJpbmcoVEludGVybVN5bWJvbCAqb3BlcmFuZCk7Ci0gICAgaW50IHNhbXBsZXJSZWdpc3RlcihU
SW50ZXJtU3ltYm9sICpzYW1wbGVyKTsKLSAgICBpbnQgdW5pZm9ybVJlZ2lzdGVyKFRJbnRlcm1T
eW1ib2wgKnVuaWZvcm0pOwotICAgIHZvaWQgZGVjbGFyZVVuaWZvcm0oY29uc3QgVFR5cGUgJnR5
cGUsIGNvbnN0IFRTdHJpbmcgJm5hbWUsIGludCBpbmRleCk7Ci0gICAgc3RhdGljIEdMZW51bSBn
bFZhcmlhYmxlVHlwZShjb25zdCBUVHlwZSAmdHlwZSk7Ci0gICAgc3RhdGljIEdMZW51bSBnbFZh
cmlhYmxlUHJlY2lzaW9uKGNvbnN0IFRUeXBlICZ0eXBlKTsKLQotICAgIEFjdGl2ZVVuaWZvcm1z
IG1BY3RpdmVVbmlmb3JtczsKLX07Ci19Ci0KLSNlbmRpZiAgIC8vIENPTVBJTEVSX09VVFBVVEhM
U0xfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Q
YXJzZUNvbnRleHQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Bh
cnNlQ29udGV4dC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMjc5NTIzYmE3
NDE2YTg3MjQ1MzE2MGU1YWMzZTM2M2Q4MGFmNjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1BhcnNlQ29udGV4dC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAyICswLDAgQEAKLS8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9QYXJzZUNvbnRleHQuaCIKLQotI2lu
Y2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpbmNsdWRlICJjb21waWxl
ci9nbHNsYW5nLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL1NvdXJjZUxvY2F0
aW9uLmgiCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwotLy8gU3ViLSB2ZWN0b3IgYW5kIG1hdHJpeCBm
aWVsZHMKLS8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotLy8KLS8vIExvb2sgYXQgYSAnLicgZmllbGQg
c2VsZWN0b3Igc3RyaW5nIGFuZCBjaGFuZ2UgaXQgaW50byBvZmZzZXRzCi0vLyBmb3IgYSB2ZWN0
b3IuCi0vLwotYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJzZVZlY3RvckZpZWxkcyhjb25zdCBUU3Ry
aW5nJiBjb21wU3RyaW5nLCBpbnQgdmVjU2l6ZSwgVFZlY3RvckZpZWxkcyYgZmllbGRzLCBjb25z
dCBUU291cmNlTG9jJiBsaW5lKQotewotICAgIGZpZWxkcy5udW0gPSAoaW50KSBjb21wU3RyaW5n
LnNpemUoKTsKLSAgICBpZiAoZmllbGRzLm51bSA+IDQpIHsKLSAgICAgICAgZXJyb3IobGluZSwg
ImlsbGVnYWwgdmVjdG9yIGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBlbnVtIHsKLSAgICAgICAgZXh5encs
Ci0gICAgICAgIGVyZ2JhLAotICAgICAgICBlc3RwcQotICAgIH0gZmllbGRTZXRbNF07Ci0KLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGZpZWxkcy5udW07ICsraSkgewotICAgICAgICBzd2l0Y2gg
KGNvbXBTdHJpbmdbaV0pICB7Ci0gICAgICAgIGNhc2UgJ3gnOiAKLSAgICAgICAgICAgIGZpZWxk
cy5vZmZzZXRzW2ldID0gMDsKLSAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXh5enc7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAncic6IAotICAgICAgICAgICAgZmllbGRzLm9m
ZnNldHNbaV0gPSAwOwotICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBlcmdiYTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlICdzJzoKLSAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRz
W2ldID0gMDsKLSAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXN0cHE7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSAneSc6IAotICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0g
PSAxOwotICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBleHl6dzsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlICdnJzogCi0gICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDE7
Ci0gICAgICAgICAgICBmaWVsZFNldFtpXSA9IGVyZ2JhOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgJ3QnOgotICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAxOwotICAg
ICAgICAgICAgZmllbGRTZXRbaV0gPSBlc3RwcTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlICd6JzogCi0gICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDI7Ci0gICAgICAg
ICAgICBmaWVsZFNldFtpXSA9IGV4eXp3OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgJ2InOiAKLSAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMjsKLSAgICAgICAgICAg
IGZpZWxkU2V0W2ldID0gZXJnYmE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAn
cCc6Ci0gICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDI7Ci0gICAgICAgICAgICBmaWVs
ZFNldFtpXSA9IGVzdHBxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAgICBj
YXNlICd3JzogCi0gICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDM7Ci0gICAgICAgICAg
ICBmaWVsZFNldFtpXSA9IGV4eXp3OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
J2EnOiAKLSAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMzsKLSAgICAgICAgICAgIGZp
ZWxkU2V0W2ldID0gZXJnYmE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAncSc6
Ci0gICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDM7Ci0gICAgICAgICAgICBmaWVsZFNl
dFtpXSA9IGVzdHBxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCB2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIiwgY29t
cFN0cmluZy5jX3N0cigpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgKytpKSB7Ci0gICAg
ICAgIGlmIChmaWVsZHMub2Zmc2V0c1tpXSA+PSB2ZWNTaXplKSB7Ci0gICAgICAgICAgICBlcnJv
cihsaW5lLCAidmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCAgY29tcFN0cmlu
Zy5jX3N0cigpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChpID4gMCkgewotICAgICAgICAgICAgaWYgKGZpZWxkU2V0W2ldICE9IGZpZWxkU2V0
W2ktMV0pIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCAtIHZlY3RvciBj
b21wb25lbnQgZmllbGRzIG5vdCBmcm9tIHRoZSBzYW1lIHNldCIsIGNvbXBTdHJpbmcuY19zdHIo
KSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLQotLy8KLS8vIExvb2sgYXQgYSAn
LicgZmllbGQgc2VsZWN0b3Igc3RyaW5nIGFuZCBjaGFuZ2UgaXQgaW50byBvZmZzZXRzCi0vLyBm
b3IgYSBtYXRyaXguCi0vLwotYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhj
b25zdCBUU3RyaW5nJiBjb21wU3RyaW5nLCBpbnQgbWF0U2l6ZSwgVE1hdHJpeEZpZWxkcyYgZmll
bGRzLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQotewotICAgIGZpZWxkcy53aG9sZVJvdyA9IGZh
bHNlOwotICAgIGZpZWxkcy53aG9sZUNvbCA9IGZhbHNlOwotICAgIGZpZWxkcy5yb3cgPSAtMTsK
LSAgICBmaWVsZHMuY29sID0gLTE7Ci0KLSAgICBpZiAoY29tcFN0cmluZy5zaXplKCkgIT0gMikg
ewotICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCBsZW5ndGggb2YgbWF0cml4IGZpZWxkIHNl
bGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBpZiAoY29tcFN0cmluZ1swXSA9PSAnXycpIHsKLSAgICAgICAgaWYgKGNvbXBT
dHJpbmdbMV0gPCAnMCcgfHwgY29tcFN0cmluZ1sxXSA+ICczJykgewotICAgICAgICAgICAgZXJy
b3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19z
dHIoKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgZmll
bGRzLndob2xlQ29sID0gdHJ1ZTsKLSAgICAgICAgZmllbGRzLmNvbCA9IGNvbXBTdHJpbmdbMV0g
LSAnMCc7Ci0gICAgfSBlbHNlIGlmIChjb21wU3RyaW5nWzFdID09ICdfJykgewotICAgICAgICBp
ZiAoY29tcFN0cmluZ1swXSA8ICcwJyB8fCBjb21wU3RyaW5nWzBdID4gJzMnKSB7Ci0gICAgICAg
ICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCBtYXRyaXggZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0
cmluZy5jX3N0cigpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAg
ICAgICBmaWVsZHMud2hvbGVSb3cgPSB0cnVlOwotICAgICAgICBmaWVsZHMucm93ID0gY29tcFN0
cmluZ1swXSAtICcwJzsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoY29tcFN0cmluZ1swXSA8
ICcwJyB8fCBjb21wU3RyaW5nWzBdID4gJzMnIHx8Ci0gICAgICAgICAgICBjb21wU3RyaW5nWzFd
IDwgJzAnIHx8IGNvbXBTdHJpbmdbMV0gPiAnMycpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUs
ICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCkpOwot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGZpZWxkcy5yb3cg
PSBjb21wU3RyaW5nWzBdIC0gJzAnOwotICAgICAgICBmaWVsZHMuY29sID0gY29tcFN0cmluZ1sx
XSAtICcwJzsKLSAgICB9Ci0KLSAgICBpZiAoZmllbGRzLnJvdyA+PSBtYXRTaXplIHx8IGZpZWxk
cy5jb2wgPj0gbWF0U2l6ZSkgewotICAgICAgICBlcnJvcihsaW5lLCAibWF0cml4IGZpZWxkIHNl
bGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCBjb21wU3RyaW5nLmNfc3RyKCkpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ci0vLwotLy8gRXJyb3JzCi0vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLS8vCi0vLyBUcmFjayB3aGV0
aGVyIGVycm9ycyBoYXZlIG9jY3VycmVkLgotLy8KLXZvaWQgVFBhcnNlQ29udGV4dDo6cmVjb3Zl
cigpCi17Ci19Ci0KLS8vCi0vLyBVc2VkIGJ5IGZsZXgvYmlzb24gdG8gb3V0cHV0IGFsbCBzeW50
YXggYW5kIHBhcnNpbmcgZXJyb3JzLgotLy8KLXZvaWQgVFBhcnNlQ29udGV4dDo6ZXJyb3IoY29u
c3QgVFNvdXJjZUxvYyYgbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
KiByZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogZXh0cmFJbmZvKQotewotICAgIHBwOjpTb3VyY2VMb2NhdGlvbiBzcmNMb2M7
Ci0gICAgc3JjTG9jLmZpbGUgPSBsb2MuZmlyc3RfZmlsZTsKLSAgICBzcmNMb2MubGluZSA9IGxv
Yy5maXJzdF9saW5lOwotICAgIGRpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6
OkVSUk9SLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNMb2MsIHJlYXNvbiwgdG9rZW4s
IGV4dHJhSW5mbyk7Ci0KLX0KLQotdm9pZCBUUGFyc2VDb250ZXh0Ojp3YXJuaW5nKGNvbnN0IFRT
b3VyY2VMb2MmIGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBy
ZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIGV4dHJhSW5mbykgewotICAgIHBwOjpTb3VyY2VMb2NhdGlvbiBzcmNMb2M7Ci0g
ICAgc3JjTG9jLmZpbGUgPSBsb2MuZmlyc3RfZmlsZTsKLSAgICBzcmNMb2MubGluZSA9IGxvYy5m
aXJzdF9saW5lOwotICAgIGRpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OldB
Uk5JTkcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNyY0xvYywgcmVhc29uLCB0b2tlbiwg
ZXh0cmFJbmZvKTsKLX0KLQotdm9pZCBUUGFyc2VDb250ZXh0Ojp0cmFjZShjb25zdCBjaGFyKiBz
dHIpCi17Ci0gICAgZGlhZ25vc3RpY3Mud3JpdGVEZWJ1ZyhzdHIpOwotfQotCi0vLwotLy8gU2Ft
ZSBlcnJvciBtZXNzYWdlIGZvciBhbGwgcGxhY2VzIGFzc2lnbm1lbnRzIGRvbid0IHdvcmsuCi0v
Lwotdm9pZCBUUGFyc2VDb250ZXh0Ojphc3NpZ25FcnJvcihjb25zdCBUU291cmNlTG9jJiBsaW5l
LCBjb25zdCBjaGFyKiBvcCwgVFN0cmluZyBsZWZ0LCBUU3RyaW5nIHJpZ2h0KQotewotICAgIHN0
ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKLSAgICBleHRyYUluZm9TdHJlYW0gPDwg
ImNhbm5vdCBjb252ZXJ0IGZyb20gJyIgPDwgcmlnaHQgPDwgIicgdG8gJyIgPDwgbGVmdCA8PCAi
JyI7Ci0gICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOwot
ICAgIGVycm9yKGxpbmUsICIiLCBvcCwgZXh0cmFJbmZvLmNfc3RyKCkpOwotfQotCi0vLwotLy8g
U2FtZSBlcnJvciBtZXNzYWdlIGZvciBhbGwgcGxhY2VzIHVuYXJ5IG9wZXJhdGlvbnMgZG9uJ3Qg
d29yay4KLS8vCi12b2lkIFRQYXJzZUNvbnRleHQ6OnVuYXJ5T3BFcnJvcihjb25zdCBUU291cmNl
TG9jJiBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVFN0cmluZyBvcGVyYW5kKQotewotICAgIHN0ZDo6
c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKLSAgICBleHRyYUluZm9TdHJlYW0gPDwgIm5v
IG9wZXJhdGlvbiAnIiA8PCBvcCA8PCAiJyBleGlzdHMgdGhhdCB0YWtlcyBhbiBvcGVyYW5kIG9m
IHR5cGUgIiA8PCBvcGVyYW5kIAotICAgICAgICAgICAgICAgICAgICA8PCAiIChvciB0aGVyZSBp
cyBubyBhY2NlcHRhYmxlIGNvbnZlcnNpb24pIjsKLSAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8g
PSBleHRyYUluZm9TdHJlYW0uc3RyKCk7Ci0gICAgZXJyb3IobGluZSwgIiB3cm9uZyBvcGVyYW5k
IHR5cGUiLCBvcCwgZXh0cmFJbmZvLmNfc3RyKCkpOwotfQotCi0vLwotLy8gU2FtZSBlcnJvciBt
ZXNzYWdlIGZvciBhbGwgYmluYXJ5IG9wZXJhdGlvbnMgZG9uJ3Qgd29yay4KLS8vCi12b2lkIFRQ
YXJzZUNvbnRleHQ6OmJpbmFyeU9wRXJyb3IoY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3Qg
Y2hhciogb3AsIFRTdHJpbmcgbGVmdCwgVFN0cmluZyByaWdodCkKLXsKLSAgICBzdGQ6OnN0cmlu
Z3N0cmVhbSBleHRyYUluZm9TdHJlYW07Ci0gICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJubyBvcGVy
YXRpb24gJyIgPDwgb3AgPDwgIicgZXhpc3RzIHRoYXQgdGFrZXMgYSBsZWZ0LWhhbmQgb3BlcmFu
ZCBvZiB0eXBlICciIDw8IGxlZnQgCi0gICAgICAgICAgICAgICAgICAgIDw8ICInIGFuZCBhIHJp
Z2h0IG9wZXJhbmQgb2YgdHlwZSAnIiA8PCByaWdodCA8PCAiJyAob3IgdGhlcmUgaXMgbm8gYWNj
ZXB0YWJsZSBjb252ZXJzaW9uKSI7Ci0gICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJ
bmZvU3RyZWFtLnN0cigpOwotICAgIGVycm9yKGxpbmUsICIgd3Jvbmcgb3BlcmFuZCB0eXBlcyAi
LCBvcCwgZXh0cmFJbmZvLmNfc3RyKCkpOyAKLX0KLQotYm9vbCBUUGFyc2VDb250ZXh0OjpwcmVj
aXNpb25FcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRQcmVjaXNpb24gcHJlY2lz
aW9uLCBUQmFzaWNUeXBlIHR5cGUpewotICAgIGlmICghY2hlY2tzUHJlY2lzaW9uRXJyb3JzKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgc3dpdGNoKCB0eXBlICl7Ci0gICAgY2FzZSBFYnRG
bG9hdDoKLSAgICAgICAgaWYoIHByZWNpc2lvbiA9PSBFYnBVbmRlZmluZWQgKXsKLSAgICAgICAg
ICAgIGVycm9yKCBsaW5lLCAiTm8gcHJlY2lzaW9uIHNwZWNpZmllZCBmb3IgKGZsb2F0KSIsICIi
ICk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEVidEludDoKLSAgICAgICAgaWYoIHByZWNpc2lvbiA9PSBFYnBVbmRlZmluZWQg
KXsKLSAgICAgICAgICAgIGVycm9yKCBsaW5lLCAiTm8gcHJlY2lzaW9uIHNwZWNpZmllZCAoaW50
KSIsICIiICk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBi
cmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotLy8KLS8vIEJvdGggdGVzdCBhbmQgaWYgbmVjZXNzYXJ5LCBzcGl0
IG91dCBhbiBlcnJvciwgdG8gc2VlIGlmIHRoZSBub2RlIGlzIHJlYWxseQotLy8gYW4gbC12YWx1
ZSB0aGF0IGNhbiBiZSBvcGVyYXRlZCBvbiB0aGlzIHdheS4KLS8vCi0vLyBSZXR1cm5zIHRydWUg
aWYgdGhlIHdhcyBhbiBlcnJvci4KLS8vCi1ib29sIFRQYXJzZUNvbnRleHQ6OmxWYWx1ZUVycm9y
Q2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgY2hhciogb3AsIFRJbnRlcm1UeXBl
ZCogbm9kZSkKLXsKLSAgICBUSW50ZXJtU3ltYm9sKiBzeW1Ob2RlID0gbm9kZS0+Z2V0QXNTeW1i
b2xOb2RlKCk7Ci0gICAgVEludGVybUJpbmFyeSogYmluYXJ5Tm9kZSA9IG5vZGUtPmdldEFzQmlu
YXJ5Tm9kZSgpOwotCi0gICAgaWYgKGJpbmFyeU5vZGUpIHsKLSAgICAgICAgYm9vbCBlcnJvclJl
dHVybjsKLQotICAgICAgICBzd2l0Y2goYmluYXJ5Tm9kZS0+Z2V0T3AoKSkgewotICAgICAgICBj
YXNlIEVPcEluZGV4RGlyZWN0OgotICAgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6Ci0gICAg
ICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6Ci0gICAgICAgICAgICByZXR1cm4gbFZhbHVl
RXJyb3JDaGVjayhsaW5lLCBvcCwgYmluYXJ5Tm9kZS0+Z2V0TGVmdCgpKTsKLSAgICAgICAgY2Fz
ZSBFT3BWZWN0b3JTd2l6emxlOgotICAgICAgICAgICAgZXJyb3JSZXR1cm4gPSBsVmFsdWVFcnJv
ckNoZWNrKGxpbmUsIG9wLCBiaW5hcnlOb2RlLT5nZXRMZWZ0KCkpOwotICAgICAgICAgICAgaWYg
KCFlcnJvclJldHVybikgewotICAgICAgICAgICAgICAgIGludCBvZmZzZXRbNF0gPSB7MCwwLDAs
MH07Ci0KLSAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIHJpZ2h0Tm9kZSA9IGJpbmFyeU5v
ZGUtPmdldFJpZ2h0KCk7Ci0gICAgICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSAqYWdnck5v
ZGUgPSByaWdodE5vZGUtPmdldEFzQWdncmVnYXRlKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHAgPSBhZ2dyTm9kZS0+
Z2V0U2VxdWVuY2UoKS5iZWdpbigpOyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcCAhPSBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKS5lbmQoKTsgcCsrKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZSA9ICgqcCktPmdldEFzVHlwZWQoKS0+Z2V0
QXNDb25zdGFudFVuaW9uKCktPmdldElDb25zdCgwKTsKLSAgICAgICAgICAgICAgICAgICAgb2Zm
c2V0W3ZhbHVlXSsrOyAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXRbdmFsdWVd
ID4gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIG9m
IHN3aXp6bGUgY2Fubm90IGhhdmUgZHVwbGljYXRlIGNvbXBvbmVudHMiLCBvcCk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSAKLQotICAgICAgICAgICAgcmV0dXJuIGVy
cm9yUmV0dXJuOwotICAgICAgICBkZWZhdWx0OiAKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wKTsKLQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLQotICAgIGNvbnN0IGNoYXIqIHN5bWJvbCA9IDA7
Ci0gICAgaWYgKHN5bU5vZGUgIT0gMCkKLSAgICAgICAgc3ltYm9sID0gc3ltTm9kZS0+Z2V0U3lt
Ym9sKCkuY19zdHIoKTsKLQotICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2UgPSAwOwotICAgIHN3aXRj
aCAobm9kZS0+Z2V0UXVhbGlmaWVyKCkpIHsKLSAgICBjYXNlIEV2cUNvbnN0OiAgICAgICAgICBt
ZXNzYWdlID0gImNhbid0IG1vZGlmeSBhIGNvbnN0IjsgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
RXZxQ29uc3RSZWFkT25seTogIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgY29uc3QiOyAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFBdHRyaWJ1dGU6ICAgICAgbWVzc2FnZSA9ICJjYW4ndCBt
b2RpZnkgYW4gYXR0cmlidXRlIjsgICBicmVhazsKLSAgICBjYXNlIEV2cVVuaWZvcm06ICAgICAg
ICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhIHVuaWZvcm0iOyAgICAgIGJyZWFrOwotICAgIGNh
c2UgRXZxVmFyeWluZ0luOiAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgdmFyeWluZyI7
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFGcmFnQ29vcmQ6ICAgICAgbWVzc2FnZSA9ICJjYW4n
dCBtb2RpZnkgZ2xfRnJhZ0Nvb3JkIjsgICBicmVhazsKLSAgICBjYXNlIEV2cUZyb250RmFjaW5n
OiAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBnbF9Gcm9udEZhY2luZyI7IGJyZWFrOwotICAg
IGNhc2UgRXZxUG9pbnRDb29yZDogICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGdsX1BvaW50
Q29vcmQiOyAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLQotICAgICAgICAvLwotICAgICAgICAvLyBU
eXBlIHRoYXQgY2FuJ3QgYmUgd3JpdHRlbiB0bz8KLSAgICAgICAgLy8KLSAgICAgICAgc3dpdGNo
IChub2RlLT5nZXRCYXNpY1R5cGUoKSkgewotICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKLSAg
ICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKLSAgICAgICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3Qg
bW9kaWZ5IGEgc2FtcGxlciI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFYnRW
b2lkOgotICAgICAgICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgdm9pZCI7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDogCi0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGlmIChtZXNzYWdlID09IDAgJiYgYmluYXJ5Tm9kZSA9PSAwICYm
IHN5bU5vZGUgPT0gMCkgewotICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQi
LCBvcCk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0KLSAgICAvLwotICAgIC8v
IEV2ZXJ5dGhpbmcgZWxzZSBpcyBva2F5LCBubyBlcnJvci4KLSAgICAvLwotICAgIGlmIChtZXNz
YWdlID09IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vCi0gICAgLy8gSWYgd2Ug
Z2V0IGhlcmUsIHdlIGhhdmUgYW4gZXJyb3IgYW5kIGEgbWVzc2FnZS4KLSAgICAvLwotICAgIGlm
IChzeW1Ob2RlKSB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsK
LSAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJcIiIgPDwgc3ltYm9sIDw8ICJcIiAoIiA8PCBt
ZXNzYWdlIDw8ICIpIjsKLSAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZv
U3RyZWFtLnN0cigpOwotICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBv
cCwgZXh0cmFJbmZvLmNfc3RyKCkpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgc3RkOjpz
dHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOwotICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwg
IigiIDw8IG1lc3NhZ2UgPDwgIikiOwotICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBl
eHRyYUluZm9TdHJlYW0uc3RyKCk7Ci0gICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1
aXJlZCIsIG9wLCBleHRyYUluZm8uY19zdHIoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLS8vCi0vLyBCb3RoIHRlc3QsIGFuZCBpZiBuZWNlc3Nhcnkgc3BpdCBvdXQgYW4gZXJy
b3IsIHRvIHNlZSBpZiB0aGUgbm9kZSBpcyByZWFsbHkKLS8vIGEgY29uc3RhbnQuCi0vLwotLy8g
UmV0dXJucyB0cnVlIGlmIHRoZSB3YXMgYW4gZXJyb3IuCi0vLwotYm9vbCBUUGFyc2VDb250ZXh0
Ojpjb25zdEVycm9yQ2hlY2soVEludGVybVR5cGVkKiBub2RlKQotewotICAgIGlmIChub2RlLT5n
ZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiY29uc3RhbnQgZXhwcmVzc2lvbiByZXF1aXJlZCIsICIi
KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLwotLy8gQm90aCB0ZXN0LCBhbmQgaWYgbmVj
ZXNzYXJ5IHNwaXQgb3V0IGFuIGVycm9yLCB0byBzZWUgaWYgdGhlIG5vZGUgaXMgcmVhbGx5Ci0v
LyBhbiBpbnRlZ2VyLgotLy8KLS8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgd2FzIGFuIGVycm9yLgot
Ly8KLWJvb2wgVFBhcnNlQ29udGV4dDo6aW50ZWdlckVycm9yQ2hlY2soVEludGVybVR5cGVkKiBu
b2RlLCBjb25zdCBjaGFyKiB0b2tlbikKLXsKLSAgICBpZiAobm9kZS0+Z2V0QmFzaWNUeXBlKCkg
PT0gRWJ0SW50ICYmIG5vZGUtPmdldE5vbWluYWxTaXplKCkgPT0gMSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiaW50ZWdlciBleHByZXNzaW9u
IHJlcXVpcmVkIiwgdG9rZW4pOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vCi0vLyBCb3Ro
IHRlc3QsIGFuZCBpZiBuZWNlc3Nhcnkgc3BpdCBvdXQgYW4gZXJyb3IsIHRvIHNlZSBpZiB3ZSBh
cmUgY3VycmVudGx5Ci0vLyBnbG9iYWxseSBzY29wZWQuCi0vLwotLy8gUmV0dXJucyB0cnVlIGlm
IHRoZSB3YXMgYW4gZXJyb3IuCi0vLwotYm9vbCBUUGFyc2VDb250ZXh0OjpnbG9iYWxFcnJvckNo
ZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGJvb2wgZ2xvYmFsLCBjb25zdCBjaGFyKiB0b2tl
bikKLXsKLSAgICBpZiAoZ2xvYmFsKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBlcnJv
cihsaW5lLCAib25seSBhbGxvd2VkIGF0IGdsb2JhbCBzY29wZSIsIHRva2VuKTsKLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi0vLwotLy8gRm9yIG5vdywga2VlcCBpdCBzaW1wbGU6ICBpZiBpdCBz
dGFydHMgImdsXyIsIGl0J3MgcmVzZXJ2ZWQsIGluZGVwZW5kZW50Ci0vLyBvZiBzY29wZS4gIEV4
Y2VwdCwgaWYgdGhlIHN5bWJvbCB0YWJsZSBpcyBhdCB0aGUgYnVpbHQtaW4gcHVzaC1sZXZlbCwK
LS8vIHdoaWNoIGlzIHdoZW4gd2UgYXJlIHBhcnNpbmcgYnVpbHQtaW5zLgotLy8gQWxzbyBjaGVj
a3MgZm9yICJ3ZWJnbF8iIGFuZCAiX3dlYmdsXyIgcmVzZXJ2ZWQgaWRlbnRpZmllcnMgaWYgcGFy
c2luZyBhCi0vLyB3ZWJnbCBzaGFkZXIuCi0vLwotLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdh
cyBhbiBlcnJvci4KLS8vCi1ib29sIFRQYXJzZUNvbnRleHQ6OnJlc2VydmVkRXJyb3JDaGVjayhj
b25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyKQotewotICAg
IHN0YXRpYyBjb25zdCBjaGFyKiByZXNlcnZlZEVyck1zZyA9ICJyZXNlcnZlZCBidWlsdC1pbiBu
YW1lIjsKLSAgICBpZiAoIXN5bWJvbFRhYmxlLmF0QnVpbHRJbkxldmVsKCkpIHsKLSAgICAgICAg
aWYgKGlkZW50aWZpZXIuY29tcGFyZSgwLCAzLCAiZ2xfIikgPT0gMCkgewotICAgICAgICAgICAg
ZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJnbF8iKTsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpc1dlYkdMQmFzZWRTcGVjKHNoYWRlclNwZWMp
KSB7Ci0gICAgICAgICAgICBpZiAoaWRlbnRpZmllci5jb21wYXJlKDAsIDYsICJ3ZWJnbF8iKSA9
PSAwKSB7Ci0gICAgICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJ3ZWJn
bF8iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChpZGVudGlmaWVyLmNvbXBhcmUoMCwgNywgIl93ZWJnbF8iKSA9PSAwKSB7Ci0g
ICAgICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJfd2ViZ2xfIik7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAoc2hhZGVyU3BlYyA9PSBTSF9DU1NfU0hBREVSU19TUEVDICYmIGlkZW50aWZpZXIuY29tcGFy
ZSgwLCA0LCAiY3NzXyIpID09IDApIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNl
cnZlZEVyck1zZywgImNzc18iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoaWRlbnRpZmllci5maW5kKCJfXyIpICE9
IFRTdHJpbmc6Om5wb3MpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJpZGVudGlmaWVycyBj
b250YWluaW5nIHR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyAoX18pIGFyZSByZXNlcnZlZCBh
cyBwb3NzaWJsZSBmdXR1cmUga2V5d29yZHMiLCBpZGVudGlmaWVyLmNfc3RyKCkpOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLS8vCi0vLyBNYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIGRhdGEgcHJvdmlkZWQgdG8g
dGhlIGNvbnN0cnVjdG9yIHRvIGJ1aWxkCi0vLyBzb21ldGhpbmcgb2YgdGhlIHR5cGUgb2YgdGhl
IGNvbnN0cnVjdG9yLiAgQWxzbyByZXR1cm5zIHRoZSB0eXBlIG9mCi0vLyB0aGUgY29uc3RydWN0
b3IuCi0vLwotLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvciBpbiBjb25zdHJ1
Y3Rpb24uCi0vLwotYm9vbCBUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RvckVycm9yQ2hlY2soY29u
c3QgVFNvdXJjZUxvYyYgbGluZSwgVEludGVybU5vZGUqIG5vZGUsIFRGdW5jdGlvbiYgZnVuY3Rp
b24sIFRPcGVyYXRvciBvcCwgVFR5cGUqIHR5cGUpCi17Ci0gICAgKnR5cGUgPSBmdW5jdGlvbi5n
ZXRSZXR1cm5UeXBlKCk7Ci0KLSAgICBib29sIGNvbnN0cnVjdGluZ01hdHJpeCA9IGZhbHNlOwot
ICAgIHN3aXRjaChvcCkgewotICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MjoKLSAgICBjYXNlIEVP
cENvbnN0cnVjdE1hdDM6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQ0OgotICAgICAgICBjb25z
dHJ1Y3RpbmdNYXRyaXggPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OiAKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBOb3RlOiBJdCdzIG9rYXkgdG8g
aGF2ZSB0b28gbWFueSBjb21wb25lbnRzIGF2YWlsYWJsZSwgYnV0IG5vdCBva2F5IHRvIGhhdmUg
dW51c2VkCi0gICAgLy8gYXJndW1lbnRzLiAgJ2Z1bGwnIHdpbGwgZ28gdG8gdHJ1ZSB3aGVuIGVu
b3VnaCBhcmdzIGhhdmUgYmVlbiBzZWVuLiAgSWYgd2UgbG9vcAotICAgIC8vIGFnYWluLCB0aGVy
ZSBpcyBhbiBleHRyYSBhcmd1bWVudCwgc28gJ292ZXJmdWxsJyB3aWxsIGJlY29tZSB0cnVlLgot
ICAgIC8vCi0KLSAgICBzaXplX3Qgc2l6ZSA9IDA7Ci0gICAgYm9vbCBjb25zdFR5cGUgPSB0cnVl
OwotICAgIGJvb2wgZnVsbCA9IGZhbHNlOwotICAgIGJvb2wgb3ZlckZ1bGwgPSBmYWxzZTsKLSAg
ICBib29sIG1hdHJpeEluTWF0cml4ID0gZmFsc2U7Ci0gICAgYm9vbCBhcnJheUFyZyA9IGZhbHNl
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpOyAr
K2kpIHsKLSAgICAgICAgY29uc3QgVFBhcmFtZXRlciYgcGFyYW0gPSBmdW5jdGlvbi5nZXRQYXJh
bShpKTsKLSAgICAgICAgc2l6ZSArPSBwYXJhbS50eXBlLT5nZXRPYmplY3RTaXplKCk7Ci0gICAg
ICAgIAotICAgICAgICBpZiAoY29uc3RydWN0aW5nTWF0cml4ICYmIHBhcmFtLnR5cGUtPmlzTWF0
cml4KCkpCi0gICAgICAgICAgICBtYXRyaXhJbk1hdHJpeCA9IHRydWU7Ci0gICAgICAgIGlmIChm
dWxsKQotICAgICAgICAgICAgb3ZlckZ1bGwgPSB0cnVlOwotICAgICAgICBpZiAob3AgIT0gRU9w
Q29uc3RydWN0U3RydWN0ICYmICF0eXBlLT5pc0FycmF5KCkgJiYgc2l6ZSA+PSB0eXBlLT5nZXRP
YmplY3RTaXplKCkpCi0gICAgICAgICAgICBmdWxsID0gdHJ1ZTsKLSAgICAgICAgaWYgKHBhcmFt
LnR5cGUtPmdldFF1YWxpZmllcigpICE9IEV2cUNvbnN0KQotICAgICAgICAgICAgY29uc3RUeXBl
ID0gZmFsc2U7Ci0gICAgICAgIGlmIChwYXJhbS50eXBlLT5pc0FycmF5KCkpCi0gICAgICAgICAg
ICBhcnJheUFyZyA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIGlmIChjb25zdFR5cGUpCi0gICAg
ICAgIHR5cGUtPnNldFF1YWxpZmllcihFdnFDb25zdCk7Ci0KLSAgICBpZiAodHlwZS0+aXNBcnJh
eSgpICYmIHN0YXRpY19jYXN0PHNpemVfdD4odHlwZS0+Z2V0QXJyYXlTaXplKCkpICE9IGZ1bmN0
aW9uLmdldFBhcmFtQ291bnQoKSkgewotICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgY29uc3Ry
dWN0b3IgbmVlZHMgb25lIGFyZ3VtZW50IHBlciBhcnJheSBlbGVtZW50IiwgImNvbnN0cnVjdG9y
Iik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChhcnJheUFyZyAmJiBv
cCAhPSBFT3BDb25zdHJ1Y3RTdHJ1Y3QpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVj
dGluZyBmcm9tIGEgbm9uLWRlcmVmZXJlbmNlZCBhcnJheSIsICJjb25zdHJ1Y3RvciIpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobWF0cml4SW5NYXRyaXggJiYgIXR5
cGUtPmlzQXJyYXkoKSkgewotICAgICAgICBpZiAoZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpICE9
IDEpIHsKLSAgICAgICAgICBlcnJvcihsaW5lLCAiY29uc3RydWN0aW5nIG1hdHJpeCBmcm9tIG1h
dHJpeCBjYW4gb25seSB0YWtlIG9uZSBhcmd1bWVudCIsICJjb25zdHJ1Y3RvciIpOwotICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG92ZXJGdWxsKSB7
Ci0gICAgICAgIGVycm9yKGxpbmUsICJ0b28gbWFueSBhcmd1bWVudHMiLCAiY29uc3RydWN0b3Ii
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIGlmIChvcCA9PSBFT3BD
b25zdHJ1Y3RTdHJ1Y3QgJiYgIXR5cGUtPmlzQXJyYXkoKSAmJiBpbnQodHlwZS0+Z2V0U3RydWN0
KCktPmZpZWxkcygpLnNpemUoKSkgIT0gZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpKSB7Ci0gICAg
ICAgIGVycm9yKGxpbmUsICJOdW1iZXIgb2YgY29uc3RydWN0b3IgcGFyYW1ldGVycyBkb2VzIG5v
dCBtYXRjaCB0aGUgbnVtYmVyIG9mIHN0cnVjdHVyZSBmaWVsZHMiLCAiY29uc3RydWN0b3IiKTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCF0eXBlLT5pc01hdHJpeCgp
IHx8ICFtYXRyaXhJbk1hdHJpeCkgewotICAgICAgICBpZiAoKG9wICE9IEVPcENvbnN0cnVjdFN0
cnVjdCAmJiBzaXplICE9IDEgJiYgc2l6ZSA8IHR5cGUtPmdldE9iamVjdFNpemUoKSkgfHwKLSAg
ICAgICAgICAgIChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QgJiYgc2l6ZSA8IHR5cGUtPmdldE9i
amVjdFNpemUoKSkpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJub3QgZW5vdWdoIGRhdGEg
cHJvdmlkZWQgZm9yIGNvbnN0cnVjdGlvbiIsICJjb25zdHJ1Y3RvciIpOwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBUSW50ZXJtVHlwZWQgKnR5cGVk
ID0gbm9kZSA/IG5vZGUtPmdldEFzVHlwZWQoKSA6IDA7Ci0gICAgaWYgKHR5cGVkID09IDApIHsK
LSAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdG9yIGFyZ3VtZW50IGRvZXMgbm90IGhhdmUg
YSB0eXBlIiwgImNvbnN0cnVjdG9yIik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAg
ICBpZiAob3AgIT0gRU9wQ29uc3RydWN0U3RydWN0ICYmIElzU2FtcGxlcih0eXBlZC0+Z2V0QmFz
aWNUeXBlKCkpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgY29udmVydCBhIHNhbXBs
ZXIiLCAiY29uc3RydWN0b3IiKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlm
ICh0eXBlZC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgewotICAgICAgICBlcnJvcihsaW5l
LCAiY2Fubm90IGNvbnZlcnQgYSB2b2lkIiwgImNvbnN0cnVjdG9yIik7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8gVGhpcyBmdW5jdGlv
biBjaGVja3MgdG8gc2VlIGlmIGEgdm9pZCB2YXJpYWJsZSBoYXMgYmVlbiBkZWNsYXJlZCBhbmQg
cmFpc2UgYW4gZXJyb3IgbWVzc2FnZSBmb3Igc3VjaCBhIGNhc2UKLS8vCi0vLyByZXR1cm5zIHRy
dWUgaW4gY2FzZSBvZiBhbiBlcnJvcgotLy8KLWJvb2wgVFBhcnNlQ29udGV4dDo6dm9pZEVycm9y
Q2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllciwg
Y29uc3QgVFB1YmxpY1R5cGUmIHB1YlR5cGUpCi17Ci0gICAgaWYgKHB1YlR5cGUudHlwZSA9PSBF
YnRWb2lkKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2b2lk
JyIsIGlkZW50aWZpZXIuY19zdHIoKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gCi0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRvIHNlZSBp
ZiB0aGUgbm9kZSAoZm9yIHRoZSBleHByZXNzaW9uKSBjb250YWlucyBhIHNjYWxhciBib29sZWFu
IGV4cHJlc3Npb24gb3Igbm90Ci0vLwotLy8gcmV0dXJucyB0cnVlIGluIGNhc2Ugb2YgYW4gZXJy
b3IKLS8vCi1ib29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VM
b2MmIGxpbmUsIGNvbnN0IFRJbnRlcm1UeXBlZCogdHlwZSkKLXsKLSAgICBpZiAodHlwZS0+Z2V0
QmFzaWNUeXBlKCkgIT0gRWJ0Qm9vbCB8fCB0eXBlLT5pc0FycmF5KCkgfHwgdHlwZS0+aXNNYXRy
aXgoKSB8fCB0eXBlLT5pc1ZlY3RvcigpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJib29sZWFu
IGV4cHJlc3Npb24gZXhwZWN0ZWQiLCAiIik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0g
Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRvIHNl
ZSBpZiB0aGUgbm9kZSAoZm9yIHRoZSBleHByZXNzaW9uKSBjb250YWlucyBhIHNjYWxhciBib29s
ZWFuIGV4cHJlc3Npb24gb3Igbm90Ci0vLwotLy8gcmV0dXJucyB0cnVlIGluIGNhc2Ugb2YgYW4g
ZXJyb3IKLS8vCi1ib29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZSkKLXsKLSAgICBpZiAocFR5cGUu
dHlwZSAhPSBFYnRCb29sIHx8IHBUeXBlLmFycmF5IHx8IHBUeXBlLm1hdHJpeCB8fCAocFR5cGUu
c2l6ZSA+IDEpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJib29sZWFuIGV4cHJlc3Npb24gZXhw
ZWN0ZWQiLCAiIik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gCi0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLWJvb2wgVFBhcnNlQ29udGV4dDo6c2FtcGxlckVycm9yQ2hlY2soY29uc3Qg
VFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlLCBjb25zdCBjaGFyKiBy
ZWFzb24pCi17Ci0gICAgaWYgKHBUeXBlLnR5cGUgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgIGlm
IChjb250YWluc1NhbXBsZXIoKnBUeXBlLnVzZXJEZWYpKSB7Ci0gICAgICAgICAgICBlcnJvcihs
aW5lLCByZWFzb24sIGdldEJhc2ljU3RyaW5nKHBUeXBlLnR5cGUpLCAiKHN0cnVjdHVyZSBjb250
YWlucyBhIHNhbXBsZXIpIik7Ci0gICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2UgaWYg
KElzU2FtcGxlcihwVHlwZS50eXBlKSkgewotICAgICAgICBlcnJvcihsaW5lLCByZWFzb24sIGdl
dEJhc2ljU3RyaW5nKHBUeXBlLnR5cGUpKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVFBhcnNlQ29udGV4dDo6c3RydWN0UXVh
bGlmaWVyRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUUHVibGljVHlw
ZSYgcFR5cGUpCi17Ci0gICAgaWYgKChwVHlwZS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8
IHBUeXBlLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8IHBUeXBlLnF1YWxpZmllciA9PSBF
dnFBdHRyaWJ1dGUpICYmCi0gICAgICAgIHBUeXBlLnR5cGUgPT0gRWJ0U3RydWN0KSB7Ci0gICAg
ICAgIGVycm9yKGxpbmUsICJjYW5ub3QgYmUgdXNlZCB3aXRoIGEgc3RydWN0dXJlIiwgZ2V0UXVh
bGlmaWVyU3RyaW5nKHBUeXBlLnF1YWxpZmllcikpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHBUeXBlLnF1YWxpZmllciAhPSBFdnFVbmlmb3JtICYm
IHNhbXBsZXJFcnJvckNoZWNrKGxpbmUsIHBUeXBlLCAic2FtcGxlcnMgbXVzdCBiZSB1bmlmb3Jt
IikpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29s
IFRQYXJzZUNvbnRleHQ6OnBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VM
b2MmIGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBjb25zdCBUVHlwZSYgdHlwZSkKLXsKLSAg
ICBpZiAoKHF1YWxpZmllciA9PSBFdnFPdXQgfHwgcXVhbGlmaWVyID09IEV2cUluT3V0KSAmJiAK
LSAgICAgICAgICAgICB0eXBlLmdldEJhc2ljVHlwZSgpICE9IEVidFN0cnVjdCAmJiBJc1NhbXBs
ZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgInNhbXBsZXJz
IGNhbm5vdCBiZSBvdXRwdXQgcGFyYW1ldGVycyIsIHR5cGUuZ2V0QmFzaWNTdHJpbmcoKSk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBUUGFyc2VDb250ZXh0Ojpjb250YWluc1NhbXBsZXIoVFR5cGUmIHR5cGUpCi17Ci0gICAgaWYg
KElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAgY29u
c3QgVEZpZWxkTGlzdCYgZmllbGRzID0gdHlwZS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgICAgICBpZiAoY29udGFpbnNTYW1wbGVyKCpmaWVsZHNbaV0tPnR5cGUoKSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLS8vCi0vLyBEbyBzaXplIGNoZWNraW5nIGZvciBhbiBhcnJheSB0eXBlJ3Mg
c2l6ZS4KLS8vCi0vLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgotLy8KLWJv
b2wgVFBhcnNlQ29udGV4dDo6YXJyYXlTaXplRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBs
aW5lLCBUSW50ZXJtVHlwZWQqIGV4cHIsIGludCYgc2l6ZSkKLXsKLSAgICBUSW50ZXJtQ29uc3Rh
bnRVbmlvbiogY29uc3RhbnQgPSBleHByLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLSAgICBpZiAo
Y29uc3RhbnQgPT0gMCB8fCBjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0SW50KSB7Ci0g
ICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBjb25zdGFudCBpbnRlZ2Vy
IGV4cHJlc3Npb24iLCAiIik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHNp
emUgPSBjb25zdGFudC0+Z2V0SUNvbnN0KDApOwotCi0gICAgaWYgKHNpemUgPD0gMCkgewotICAg
ICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciIs
ICIiKTsKLSAgICAgICAgc2l6ZSA9IDE7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8KLS8vIFNlZSBpZiB0aGlzIHF1YWxpZmllciBjYW4g
YmUgYW4gYXJyYXkuCi0vLwotLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGFuIGVycm9yLgot
Ly8KLWJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKGNvbnN0IFRT
b3VyY2VMb2MmIGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpCi17Ci0gICAgaWYgKCh0eXBlLnF1YWxp
ZmllciA9PSBFdnFBdHRyaWJ1dGUpIHx8ICh0eXBlLnF1YWxpZmllciA9PSBFdnFDb25zdCkpIHsK
LSAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBkZWNsYXJlIGFycmF5cyBvZiB0aGlzIHF1YWxp
ZmllciIsIFRUeXBlKHR5cGUpLmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8KLS8vIFNl
ZSBpZiB0aGlzIHR5cGUgY2FuIGJlIGFuIGFycmF5LgotLy8KLS8vIFJldHVybnMgdHJ1ZSBpZiB0
aGVyZSBpcyBhbiBlcnJvci4KLS8vCi1ib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5VHlwZUVycm9y
Q2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFB1YmxpY1R5cGUgdHlwZSkKLXsKLSAgICAv
LwotICAgIC8vIENhbiB0aGUgdHlwZSBiZSBhbiBhcnJheT8KLSAgICAvLwotICAgIGlmICh0eXBl
LmFycmF5KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgZGVjbGFyZSBhcnJheXMgb2Yg
YXJyYXlzIiwgVFR5cGUodHlwZSkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLwotLy8g
RG8gYWxsIHRoZSBzZW1hbnRpYyBjaGVja2luZyBmb3IgZGVjbGFyaW5nIGFuIGFycmF5LCB3aXRo
IGFuZCAKLS8vIHdpdGhvdXQgYSBzaXplLCBhbmQgbWFrZSB0aGUgcmlnaHQgY2hhbmdlcyB0byB0
aGUgc3ltYm9sIHRhYmxlLgotLy8KLS8vIHNpemUgPT0gMCBtZWFucyBubyBzcGVjaWZpZWQgc2l6
ZS4KLS8vCi0vLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgotLy8KLWJvb2wg
VFBhcnNlQ29udGV4dDo6YXJyYXlFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRT
dHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlIHR5cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxl
KQotewotICAgIC8vCi0gICAgLy8gRG9uJ3QgY2hlY2sgZm9yIHJlc2VydmVkIHdvcmQgdXNlIHVu
dGlsIGFmdGVyIHdlIGtub3cgaXQncyBub3QgaW4gdGhlIHN5bWJvbCB0YWJsZSwKLSAgICAvLyBi
ZWNhdXNlIHJlc2VydmVkIGFycmF5cyBjYW4gYmUgcmVkZWNsYXJlZC4KLSAgICAvLwotCi0gICAg
Ym9vbCBidWlsdEluID0gZmFsc2U7IAotICAgIGJvb2wgc2FtZVNjb3BlID0gZmFsc2U7Ci0gICAg
VFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChpZGVudGlmaWVyLCAmYnVpbHRJbiwg
JnNhbWVTY29wZSk7Ci0gICAgaWYgKHN5bWJvbCA9PSAwIHx8ICFzYW1lU2NvcGUpIHsKLSAgICAg
ICAgaWYgKHJlc2VydmVkRXJyb3JDaGVjayhsaW5lLCBpZGVudGlmaWVyKSkKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAKLSAgICAgICAgdmFyaWFibGUgPSBuZXcgVFZhcmlhYmxl
KCZpZGVudGlmaWVyLCBUVHlwZSh0eXBlKSk7Ci0KLSAgICAgICAgaWYgKHR5cGUuYXJyYXlTaXpl
KQotICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5zZXRBcnJheVNpemUodHlwZS5hcnJh
eVNpemUpOwotCi0gICAgICAgIGlmICghIHN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7
Ci0gICAgICAgICAgICBkZWxldGUgdmFyaWFibGU7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAi
SU5URVJOQUwgRVJST1IgaW5zZXJ0aW5nIG5ldyBzeW1ib2wiLCBpZGVudGlmaWVyLmNfc3RyKCkp
OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAg
ICAgICBpZiAoISBzeW1ib2wtPmlzVmFyaWFibGUoKSkgewotICAgICAgICAgICAgZXJyb3IobGlu
ZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgaWRlbnRpZmllci5jX3N0cigpKTsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyaWFibGUgPSBzdGF0aWNfY2Fz
dDxUVmFyaWFibGUqPihzeW1ib2wpOwotICAgICAgICBpZiAoISB2YXJpYWJsZS0+Z2V0VHlwZSgp
LmlzQXJyYXkoKSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyaW5nIG5vbi1h
cnJheSBhcyBhcnJheSIsIGlkZW50aWZpZXIuY19zdHIoKSk7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAodmFyaWFibGUtPmdldFR5cGUoKS5nZXRBcnJh
eVNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlY2xhcmF0aW9uIG9m
IGFycmF5IHdpdGggc2l6ZSIsIGlkZW50aWZpZXIuY19zdHIoKSk7Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKCEgdmFyaWFibGUtPmdl
dFR5cGUoKS5zYW1lRWxlbWVudFR5cGUoVFR5cGUodHlwZSkpKSB7Ci0gICAgICAgICAgICBlcnJv
cihsaW5lLCAicmVkZWNsYXJhdGlvbiBvZiBhcnJheSB3aXRoIGEgZGlmZmVyZW50IHR5cGUiLCBp
ZGVudGlmaWVyLmNfc3RyKCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAodHlwZS5hcnJheVNpemUpCi0gICAgICAgICAgICB2YXJpYWJsZS0+Z2V0
VHlwZSgpLnNldEFycmF5U2l6ZSh0eXBlLmFycmF5U2l6ZSk7Ci0gICAgfSAKLQotICAgIGlmICh2
b2lkRXJyb3JDaGVjayhsaW5lLCBpZGVudGlmaWVyLCB0eXBlKSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vCi0vLyBFbmZvcmNlIG5vbi1pbml0aWFs
aXplciB0eXBlL3F1YWxpZmllciBydWxlcy4KLS8vCi0vLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUg
d2FzIGFuIGVycm9yLgotLy8KLWJvb2wgVFBhcnNlQ29udGV4dDo6bm9uSW5pdENvbnN0RXJyb3JD
aGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGlj
VHlwZSYgdHlwZSwgYm9vbCBhcnJheSkKLXsKLSAgICBpZiAodHlwZS5xdWFsaWZpZXIgPT0gRXZx
Q29uc3QpCi0gICAgewotICAgICAgICAvLyBNYWtlIHRoZSBxdWFsaWZpZXIgbWFrZSBzZW5zZS4K
LSAgICAgICAgdHlwZS5xdWFsaWZpZXIgPSBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgIAotICAgICAg
ICBpZiAoYXJyYXkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJhcnJheXMg
bWF5IG5vdCBiZSBkZWNsYXJlZCBjb25zdGFudCBzaW5jZSB0aGV5IGNhbm5vdCBiZSBpbml0aWFs
aXplZCIsIGlkZW50aWZpZXIuY19zdHIoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAo
dHlwZS5pc1N0cnVjdHVyZUNvbnRhaW5pbmdBcnJheXMoKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgZXJyb3IobGluZSwgInN0cnVjdHVyZXMgY29udGFpbmluZyBhcnJheXMgbWF5IG5vdCBiZSBk
ZWNsYXJlZCBjb25zdGFudCBzaW5jZSB0aGV5IGNhbm5vdCBiZSBpbml0aWFsaXplZCIsIGlkZW50
aWZpZXIuY19zdHIoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAg
ICAgICAgICBlcnJvcihsaW5lLCAidmFyaWFibGVzIHdpdGggcXVhbGlmaWVyICdjb25zdCcgbXVz
dCBiZSBpbml0aWFsaXplZCIsIGlkZW50aWZpZXIuY19zdHIoKSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vCi0v
LyBEbyBzZW1hbnRpYyBjaGVja2luZyBmb3IgYSB2YXJpYWJsZSBkZWNsYXJhdGlvbiB0aGF0IGhh
cyBubyBpbml0aWFsaXplciwKLS8vIGFuZCB1cGRhdGUgdGhlIHN5bWJvbCB0YWJsZS4KLS8vCi0v
LyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgotLy8KLWJvb2wgVFBhcnNlQ29u
dGV4dDo6bm9uSW5pdEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFN0cmluZyYg
aWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHR5cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKQotewot
ICAgIGlmIChyZXNlcnZlZEVycm9yQ2hlY2sobGluZSwgaWRlbnRpZmllcikpCi0gICAgICAgIHJl
Y292ZXIoKTsKLQotICAgIHZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgmaWRlbnRpZmllciwgVFR5
cGUodHlwZSkpOwotCi0gICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsK
LSAgICAgICAgZXJyb3IobGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCku
Y19zdHIoKSk7Ci0gICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKLSAgICAgICAgdmFyaWFibGUgPSAw
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAodm9pZEVycm9yQ2hlY2so
bGluZSwgaWRlbnRpZmllciwgdHlwZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIFRQYXJzZUNvbnRleHQ6OnBhcmFtRXJyb3JDaGVjayhjb25z
dCBUU291cmNlTG9jJiBsaW5lLCBUUXVhbGlmaWVyIHF1YWxpZmllciwgVFF1YWxpZmllciBwYXJh
bVF1YWxpZmllciwgVFR5cGUqIHR5cGUpCi17ICAgIAotICAgIGlmIChxdWFsaWZpZXIgIT0gRXZx
Q29uc3QgJiYgcXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgewotICAgICAgICBlcnJvcihsaW5l
LCAicXVhbGlmaWVyIG5vdCBhbGxvd2VkIG9uIGZ1bmN0aW9uIHBhcmFtZXRlciIsIGdldFF1YWxp
ZmllclN0cmluZyhxdWFsaWZpZXIpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAg
IGlmIChxdWFsaWZpZXIgPT0gRXZxQ29uc3QgJiYgcGFyYW1RdWFsaWZpZXIgIT0gRXZxSW4pIHsK
LSAgICAgICAgZXJyb3IobGluZSwgInF1YWxpZmllciBub3QgYWxsb3dlZCB3aXRoICIsIGdldFF1
YWxpZmllclN0cmluZyhxdWFsaWZpZXIpLCBnZXRRdWFsaWZpZXJTdHJpbmcocGFyYW1RdWFsaWZp
ZXIpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHF1YWxpZmllciA9
PSBFdnFDb25zdCkKLSAgICAgICAgdHlwZS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0UmVhZE9ubHkp
OwotICAgIGVsc2UKLSAgICAgICAgdHlwZS0+c2V0UXVhbGlmaWVyKHBhcmFtUXVhbGlmaWVyKTsK
LQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBUUGFyc2VDb250ZXh0OjpleHRlbnNpb25F
cnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGV4dGVuc2lv
bikKLXsKLSAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yID0gZXh0ZW5z
aW9uQmVoYXZpb3IoKTsKLSAgICBURXh0ZW5zaW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0
ZXIgPSBleHRCZWhhdmlvci5maW5kKGV4dGVuc2lvbi5jX3N0cigpKTsKLSAgICBpZiAoaXRlciA9
PSBleHRCZWhhdmlvci5lbmQoKSkgewotICAgICAgICBlcnJvcihsaW5lLCAiZXh0ZW5zaW9uIiwg
ZXh0ZW5zaW9uLmNfc3RyKCksICJpcyBub3Qgc3VwcG9ydGVkIik7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLSAgICAvLyBJbiBHTFNMIEVTLCBhbiBleHRlbnNpb24ncyBkZWZhdWx0IGJl
aGF2aW9yIGlzICJkaXNhYmxlIi4KLSAgICBpZiAoaXRlci0+c2Vjb25kID09IEVCaERpc2FibGUg
fHwgaXRlci0+c2Vjb25kID09IEVCaFVuZGVmaW5lZCkgewotICAgICAgICBlcnJvcihsaW5lLCAi
ZXh0ZW5zaW9uIiwgZXh0ZW5zaW9uLmNfc3RyKCksICJpcyBkaXNhYmxlZCIpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKGl0ZXItPnNlY29uZCA9PSBFQmhXYXJuKSB7Ci0g
ICAgICAgIHdhcm5pbmcobGluZSwgImV4dGVuc2lvbiIsIGV4dGVuc2lvbi5jX3N0cigpLCAiaXMg
YmVpbmcgdXNlZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIFRQYXJzZUNvbnRleHQ6OnN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0
IGNoYXIqIGV4dGVuc2lvbikKLXsKLSAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dGJl
aGF2aW9yID0gZXh0ZW5zaW9uQmVoYXZpb3IoKTsKLSAgICBURXh0ZW5zaW9uQmVoYXZpb3I6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRiZWhhdmlvci5maW5kKGV4dGVuc2lvbik7Ci0gICAgcmV0
dXJuIChpdGVyICE9IGV4dGJlaGF2aW9yLmVuZCgpKTsKLX0KLQotYm9vbCBUUGFyc2VDb250ZXh0
Ojppc0V4dGVuc2lvbkVuYWJsZWQoY29uc3QgY2hhciogZXh0ZW5zaW9uKSBjb25zdAotewotICAg
IGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0YmVoYXZpb3IgPSBleHRlbnNpb25CZWhhdmlv
cigpOwotICAgIFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dGJl
aGF2aW9yLmZpbmQoZXh0ZW5zaW9uKTsKLQotICAgIGlmIChpdGVyID09IGV4dGJlaGF2aW9yLmVu
ZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiAo
aXRlci0+c2Vjb25kID09IEVCaEVuYWJsZSB8fCBpdGVyLT5zZWNvbmQgPT0gRUJoUmVxdWlyZSk7
Ci19Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8KLS8vIE5vbi1FcnJvcnMuCi0vLwot
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLS8vCi0vLyBMb29rIHVwIGEgZnVuY3Rpb24gbmFt
ZSBpbiB0aGUgc3ltYm9sIHRhYmxlLCBhbmQgbWFrZSBzdXJlIGl0IGlzIGEgZnVuY3Rpb24uCi0v
LwotLy8gUmV0dXJuIHRoZSBmdW5jdGlvbiBzeW1ib2wgaWYgZm91bmQsIG90aGVyd2lzZSAwLgot
Ly8KLWNvbnN0IFRGdW5jdGlvbiogVFBhcnNlQ29udGV4dDo6ZmluZEZ1bmN0aW9uKGNvbnN0IFRT
b3VyY2VMb2MmIGxpbmUsIFRGdW5jdGlvbiogY2FsbCwgYm9vbCAqYnVpbHRJbikKLXsKLSAgICAv
LyBGaXJzdCBmaW5kIGJ5IHVubWFuZ2xlZCBuYW1lIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGZ1bmN0
aW9uIG5hbWUgaGFzIGJlZW4KLSAgICAvLyBoaWRkZW4gYnkgYSB2YXJpYWJsZSBuYW1lIG9yIHN0
cnVjdCB0eXBlbmFtZS4KLSAgICAvLyBJZiBhIGZ1bmN0aW9uIGlzIGZvdW5kLCBjaGVjayBmb3Ig
b25lIHdpdGggYSBtYXRjaGluZyBhcmd1bWVudCBsaXN0LgotICAgIGNvbnN0IFRTeW1ib2wqIHN5
bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQoY2FsbC0+Z2V0TmFtZSgpLCBidWlsdEluKTsKLSAgICBp
ZiAoc3ltYm9sID09IDAgfHwgc3ltYm9sLT5pc0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgc3ltYm9s
ID0gc3ltYm9sVGFibGUuZmluZChjYWxsLT5nZXRNYW5nbGVkTmFtZSgpLCBidWlsdEluKTsKLSAg
ICB9Ci0KLSAgICBpZiAoc3ltYm9sID09IDApIHsKLSAgICAgICAgZXJyb3IobGluZSwgIm5vIG1h
dGNoaW5nIG92ZXJsb2FkZWQgZnVuY3Rpb24gZm91bmQiLCBjYWxsLT5nZXROYW1lKCkuY19zdHIo
KSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGlmICghc3ltYm9sLT5pc0Z1bmN0
aW9uKCkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImZ1bmN0aW9uIG5hbWUgZXhwZWN0ZWQiLCBj
YWxsLT5nZXROYW1lKCkuY19zdHIoKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBURnVuY3Rpb24qPihzeW1ib2wpOwotfQotCi0vLwot
Ly8gSW5pdGlhbGl6ZXJzIHNob3cgdXAgaW4gc2V2ZXJhbCBwbGFjZXMgaW4gdGhlIGdyYW1tYXIu
ICBIYXZlIG9uZSBzZXQgb2YKLS8vIGNvZGUgdG8gaGFuZGxlIHRoZW0gaGVyZS4KLS8vCi1ib29s
IFRQYXJzZUNvbnRleHQ6OmV4ZWN1dGVJbml0aWFsaXplcihjb25zdCBUU291cmNlTG9jJiBsaW5l
LCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgcFR5cGUsIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbml0aWFsaXplciwgVElu
dGVybU5vZGUqJiBpbnRlcm1Ob2RlLCBUVmFyaWFibGUqIHZhcmlhYmxlKQotewotICAgIFRUeXBl
IHR5cGUgPSBUVHlwZShwVHlwZSk7Ci0KLSAgICBpZiAodmFyaWFibGUgPT0gMCkgewotICAgICAg
ICBpZiAocmVzZXJ2ZWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIpKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICAgICAgaWYgKHZvaWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZp
ZXIsIHBUeXBlKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIC8vCi0gICAg
ICAgIC8vIGFkZCB2YXJpYWJsZSB0byBzeW1ib2wgdGFibGUKLSAgICAgICAgLy8KLSAgICAgICAg
dmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCZpZGVudGlmaWVyLCB0eXBlKTsKLSAgICAgICAgaWYg
KCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKLSAgICAgICAgICAgIGVycm9yKGxp
bmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAvLyBkb24ndCBkZWxldGUgdmFyaWFibGUs
IGl0J3MgdXNlZCBieSBlcnJvciByZWNvdmVyeSwgYW5kIHRoZSBwb29sIAotICAgICAgICAgICAg
Ly8gcG9wIHdpbGwgdGFrZSBjYXJlIG9mIHRoZSBtZW1vcnkKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIC8vCi0gICAgLy8gaWRlbnRpZmllciBtdXN0IGJlIG9mIHR5cGUgY29uc3RhbnQsIGEgZ2xv
YmFsLCBvciBhIHRlbXBvcmFyeQotICAgIC8vCi0gICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSB2
YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpOwotICAgIGlmICgocXVhbGlmaWVyICE9
IEV2cVRlbXBvcmFyeSkgJiYgKHF1YWxpZmllciAhPSBFdnFHbG9iYWwpICYmIChxdWFsaWZpZXIg
IT0gRXZxQ29uc3QpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIgY2Fubm90IGluaXRpYWxpemUg
dGhpcyB0eXBlIG9mIHF1YWxpZmllciAiLCB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmll
clN0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIC8vCi0gICAgLy8g
dGVzdCBmb3IgYW5kIHByb3BhZ2F0ZSBjb25zdGFudAotICAgIC8vCi0KLSAgICBpZiAocXVhbGlm
aWVyID09IEV2cUNvbnN0KSB7Ci0gICAgICAgIGlmIChxdWFsaWZpZXIgIT0gaW5pdGlhbGl6ZXIt
PmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSkgewotICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJl
YW0gZXh0cmFJbmZvU3RyZWFtOwotICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICInIiA8
PCB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldENvbXBsZXRlU3RyaW5nKCkgPDwgIiciOwotICAgICAg
ICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOwotICAg
ICAgICAgICAgZXJyb3IobGluZSwgIiBhc3NpZ25pbmcgbm9uLWNvbnN0YW50IHRvIiwgIj0iLCBl
eHRyYUluZm8uY19zdHIoKSk7Ci0gICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldFF1
YWxpZmllcihFdnFUZW1wb3JhcnkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKHR5cGUgIT0gaW5pdGlhbGl6ZXItPmdldFR5cGUoKSkgewotICAgICAg
ICAgICAgZXJyb3IobGluZSwgIiBub24tbWF0Y2hpbmcgdHlwZXMgZm9yIGNvbnN0IGluaXRpYWxp
emVyICIsIAotICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVy
U3RyaW5nKCkpOwotICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5zZXRRdWFsaWZpZXIo
RXZxVGVtcG9yYXJ5KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAg
ICAgIGlmIChpbml0aWFsaXplci0+Z2V0QXNDb25zdGFudFVuaW9uKCkpIHsgCi0gICAgICAgICAg
ICB2YXJpYWJsZS0+c2hhcmVDb25zdFBvaW50ZXIoaW5pdGlhbGl6ZXItPmdldEFzQ29uc3RhbnRV
bmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpKTsKLSAgICAgICAgfSBlbHNlIGlmIChpbml0
aWFsaXplci0+Z2V0QXNTeW1ib2xOb2RlKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IFRTeW1ib2wq
IHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQoaW5pdGlhbGl6ZXItPmdldEFzU3ltYm9sTm9kZSgp
LT5nZXRTeW1ib2woKSk7Ci0gICAgICAgICAgICBjb25zdCBUVmFyaWFibGUqIHRWYXIgPSBzdGF0
aWNfY2FzdDxjb25zdCBUVmFyaWFibGUqPihzeW1ib2wpOwotCi0gICAgICAgICAgICBDb25zdGFu
dFVuaW9uKiBjb25zdEFycmF5ID0gdFZhci0+Z2V0Q29uc3RQb2ludGVyKCk7Ci0gICAgICAgICAg
ICB2YXJpYWJsZS0+c2hhcmVDb25zdFBvaW50ZXIoY29uc3RBcnJheSk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07Ci0gICAg
ICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgIiciIDw8IHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0
Q29tcGxldGVTdHJpbmcoKSA8PCAiJyI7Ci0gICAgICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUlu
Zm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiIGNh
bm5vdCBhc3NpZ24gdG8iLCAiPSIsIGV4dHJhSW5mby5jX3N0cigpKTsKLSAgICAgICAgICAgIHZh
cmlhYmxlLT5nZXRUeXBlKCkuc2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAKLSAgICBpZiAocXVhbGlmaWVyICE9
IEV2cUNvbnN0KSB7Ci0gICAgICAgIFRJbnRlcm1TeW1ib2wqIGludGVybVN5bWJvbCA9IGludGVy
bWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUtPmdldFVuaXF1ZUlkKCksIHZhcmlhYmxlLT5nZXRO
YW1lKCksIHZhcmlhYmxlLT5nZXRUeXBlKCksIGxpbmUpOwotICAgICAgICBpbnRlcm1Ob2RlID0g
aW50ZXJtZWRpYXRlLmFkZEFzc2lnbihFT3BJbml0aWFsaXplLCBpbnRlcm1TeW1ib2wsIGluaXRp
YWxpemVyLCBsaW5lKTsKLSAgICAgICAgaWYgKGludGVybU5vZGUgPT0gMCkgewotICAgICAgICAg
ICAgYXNzaWduRXJyb3IobGluZSwgIj0iLCBpbnRlcm1TeW1ib2wtPmdldENvbXBsZXRlU3RyaW5n
KCksIGluaXRpYWxpemVyLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIAotICAgICAgICBpbnRlcm1Ob2RlID0gMDsK
LQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBUUGFyc2VDb250ZXh0OjphcmVBbGxDaGls
ZENvbnN0KFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlKQotewotICAgIEFTU0VSVChhZ2dyTm9k
ZSAhPSBOVUxMKTsKLSAgICBpZiAoIWFnZ3JOb2RlLT5pc0NvbnN0cnVjdG9yKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wgYWxsQ29uc3RhbnQgPSB0cnVlOwotCi0gICAgLy8g
Y2hlY2sgaWYgYWxsIHRoZSBjaGlsZCBub2RlcyBhcmUgY29uc3RhbnRzIHNvIHRoYXQgdGhleSBj
YW4gYmUgaW5zZXJ0ZWQgaW50byAKLSAgICAvLyB0aGUgcGFyZW50IG5vZGUKLSAgICBUSW50ZXJt
U2VxdWVuY2UgJnNlcXVlbmNlID0gYWdnck5vZGUtPmdldFNlcXVlbmNlKCkgOwotICAgIGZvciAo
VEludGVybVNlcXVlbmNlOjppdGVyYXRvciBwID0gc2VxdWVuY2UuYmVnaW4oKTsgcCAhPSBzZXF1
ZW5jZS5lbmQoKTsgKytwKSB7Ci0gICAgICAgIGlmICghKCpwKS0+Z2V0QXNUeXBlZCgpLT5nZXRB
c0NvbnN0YW50VW5pb24oKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gYWxsQ29uc3RhbnQ7Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byB0
ZXN0IGZvciB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHZhcmlv
dXMgY29uc3RydWN0b3IgZnVuY3Rpb25zCi0vLyBhbmQgYWxzbyBjb252ZXJ0IHRoZW0gdG8gdGhl
IHJpZ2h0IGRhdGF0eXBlIGlmIGl0IGlzIGFsbG93ZWQgYW5kIHJlcXVpcmVkLiAKLS8vCi0vLyBS
ZXR1cm5zIDAgZm9yIGFuIGVycm9yIG9yIHRoZSBjb25zdHJ1Y3RlZCBub2RlIChhZ2dyZWdhdGUg
b3IgdHlwZWQpIGZvciBubyBlcnJvci4KLS8vCi1USW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6
OmFkZENvbnN0cnVjdG9yKFRJbnRlcm1Ob2RlKiBub2RlLCBjb25zdCBUVHlwZSogdHlwZSwgVE9w
ZXJhdG9yIG9wLCBURnVuY3Rpb24qIGZuQ2FsbCwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKLXsK
LSAgICBpZiAobm9kZSA9PSAwKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFRJbnRlcm1BZ2dy
ZWdhdGUqIGFnZ3JOb2RlID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsKLSAgICAKLSAgICBURmll
bGRMaXN0Ojpjb25zdF9pdGVyYXRvciBtZW1iZXJGaWVsZHM7Ci0gICAgaWYgKG9wID09IEVPcENv
bnN0cnVjdFN0cnVjdCkKLSAgICAgICAgbWVtYmVyRmllbGRzID0gdHlwZS0+Z2V0U3RydWN0KCkt
PmZpZWxkcygpLmJlZ2luKCk7Ci0gICAgCi0gICAgVFR5cGUgZWxlbWVudFR5cGUgPSAqdHlwZTsK
LSAgICBpZiAodHlwZS0+aXNBcnJheSgpKQotICAgICAgICBlbGVtZW50VHlwZS5jbGVhckFycmF5
bmVzcygpOwotCi0gICAgYm9vbCBzaW5nbGVBcmc7Ci0gICAgaWYgKGFnZ3JOb2RlKSB7Ci0gICAg
ICAgIGlmIChhZ2dyTm9kZS0+Z2V0T3AoKSAhPSBFT3BOdWxsIHx8IGFnZ3JOb2RlLT5nZXRTZXF1
ZW5jZSgpLnNpemUoKSA9PSAxKQotICAgICAgICAgICAgc2luZ2xlQXJnID0gdHJ1ZTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgc2luZ2xlQXJnID0gZmFsc2U7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIHNpbmdsZUFyZyA9IHRydWU7Ci0KLSAgICBUSW50ZXJtVHlwZWQgKm5ld05vZGU7Ci0gICAg
aWYgKHNpbmdsZUFyZykgewotICAgICAgICAvLyBJZiBzdHJ1Y3R1cmUgY29uc3RydWN0b3Igb3Ig
YXJyYXkgY29uc3RydWN0b3IgaXMgYmVpbmcgY2FsbGVkIAotICAgICAgICAvLyBmb3Igb25seSBv
bmUgcGFyYW1ldGVyIGluc2lkZSB0aGUgc3RydWN0dXJlLCB3ZSBuZWVkIHRvIGNhbGwgY29uc3Ry
dWN0U3RydWN0IGZ1bmN0aW9uIG9uY2UuCi0gICAgICAgIGlmICh0eXBlLT5pc0FycmF5KCkpCi0g
ICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0U3RydWN0KG5vZGUsICZlbGVtZW50VHlwZSwg
MSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxzZSk7Ci0gICAgICAgIGVsc2UgaWYgKG9wID09IEVPcENv
bnN0cnVjdFN0cnVjdCkKLSAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RTdHJ1Y3Qobm9k
ZSwgKCptZW1iZXJGaWVsZHMpLT50eXBlKCksIDEsIG5vZGUtPmdldExpbmUoKSwgZmFsc2UpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0QnVpbHRJbih0eXBl
LCBvcCwgbm9kZSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxzZSk7Ci0KLSAgICAgICAgaWYgKG5ld05v
ZGUgJiYgbmV3Tm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKSkgewotICAgICAgICAgICAgVEludGVybVR5
cGVkKiBjb25zdENvbnN0cnVjdG9yID0gZm9sZENvbnN0Q29uc3RydWN0b3IobmV3Tm9kZS0+Z2V0
QXNBZ2dyZWdhdGUoKSwgKnR5cGUpOwotICAgICAgICAgICAgaWYgKGNvbnN0Q29uc3RydWN0b3Ip
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnN0Q29uc3RydWN0b3I7Ci0gICAgICAgIH0KLQot
ICAgICAgICByZXR1cm4gbmV3Tm9kZTsKLSAgICB9Ci0gICAgCi0gICAgLy8KLSAgICAvLyBIYW5k
bGUgbGlzdCBvZiBhcmd1bWVudHMuCi0gICAgLy8KLSAgICBUSW50ZXJtU2VxdWVuY2UgJnNlcXVl
bmNlVmVjdG9yID0gYWdnck5vZGUtPmdldFNlcXVlbmNlKCkgOyAgICAvLyBTdG9yZXMgdGhlIGlu
Zm9ybWF0aW9uIGFib3V0IHRoZSBwYXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yCi0gICAgLy8g
aWYgdGhlIHN0cnVjdHVyZSBjb25zdHJ1Y3RvciBjb250YWlucyBtb3JlIHRoYW4gb25lIHBhcmFt
ZXRlciwgdGhlbiBjb25zdHJ1Y3QKLSAgICAvLyBlYWNoIHBhcmFtZXRlcgotICAgIAotICAgIGlu
dCBwYXJhbUNvdW50ID0gMDsgIC8vIGtlZXBzIGEgdHJhY2sgb2YgdGhlIGNvbnN0cnVjdG9yIHBh
cmFtZXRlciBudW1iZXIgYmVpbmcgY2hlY2tlZCAgICAKLSAgICAKLSAgICAvLyBmb3IgZWFjaCBw
YXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yIGNhbGwsIGNoZWNrIHRvIHNlZSBpZiB0aGUgcmln
aHQgdHlwZSBpcyBwYXNzZWQgb3IgY29udmVydCB0aGVtIAotICAgIC8vIHRvIHRoZSByaWdodCB0
eXBlIGlmIHBvc3NpYmxlIChhbmQgYWxsb3dlZCkuCi0gICAgLy8gZm9yIHN0cnVjdHVyZSBjb25z
dHJ1Y3RvcnMsIGp1c3QgY2hlY2sgaWYgdGhlIHJpZ2h0IHR5cGUgaXMgcGFzc2VkLCBubyBjb252
ZXJzaW9uIGlzIGFsbG93ZWQuCi0gICAgCi0gICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJh
dG9yIHAgPSBzZXF1ZW5jZVZlY3Rvci5iZWdpbigpOyAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcCAhPSBzZXF1ZW5jZVZlY3Rvci5lbmQoKTsgcCsrLCBwYXJhbUNvdW50Kysp
IHsKLSAgICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkKLSAgICAgICAgICAgIG5ld05vZGUgPSBj
b25zdHJ1Y3RTdHJ1Y3QoKnAsICZlbGVtZW50VHlwZSwgcGFyYW1Db3VudCsxLCBub2RlLT5nZXRM
aW5lKCksIHRydWUpOwotICAgICAgICBlbHNlIGlmIChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3Qp
Ci0gICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0U3RydWN0KCpwLCBtZW1iZXJGaWVsZHNb
cGFyYW1Db3VudF0tPnR5cGUoKSwgcGFyYW1Db3VudCsxLCBub2RlLT5nZXRMaW5lKCksIHRydWUp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0QnVpbHRJbih0
eXBlLCBvcCwgKnAsIG5vZGUtPmdldExpbmUoKSwgdHJ1ZSk7Ci0gICAgICAgIAotICAgICAgICBp
ZiAobmV3Tm9kZSkgewotICAgICAgICAgICAgKnAgPSBuZXdOb2RlOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgVEludGVybVR5cGVkKiBjb25zdHJ1Y3RvciA9IGludGVybWVkaWF0ZS5zZXRBZ2dy
ZWdhdGVPcGVyYXRvcihhZ2dyTm9kZSwgb3AsIGxpbmUpOwotICAgIFRJbnRlcm1UeXBlZCogY29u
c3RDb25zdHJ1Y3RvciA9IGZvbGRDb25zdENvbnN0cnVjdG9yKGNvbnN0cnVjdG9yLT5nZXRBc0Fn
Z3JlZ2F0ZSgpLCAqdHlwZSk7Ci0gICAgaWYgKGNvbnN0Q29uc3RydWN0b3IpCi0gICAgICAgIHJl
dHVybiBjb25zdENvbnN0cnVjdG9yOwotCi0gICAgcmV0dXJuIGNvbnN0cnVjdG9yOwotfQotCi1U
SW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmZvbGRDb25zdENvbnN0cnVjdG9yKFRJbnRlcm1B
Z2dyZWdhdGUqIGFnZ3JOb2RlLCBjb25zdCBUVHlwZSYgdHlwZSkKLXsKLSAgICBib29sIGNhbkJl
Rm9sZGVkID0gYXJlQWxsQ2hpbGRDb25zdChhZ2dyTm9kZSk7Ci0gICAgYWdnck5vZGUtPnNldFR5
cGUodHlwZSk7Ci0gICAgaWYgKGNhbkJlRm9sZGVkKSB7Ci0gICAgICAgIGJvb2wgcmV0dXJuVmFs
ID0gZmFsc2U7Ci0gICAgICAgIENvbnN0YW50VW5pb24qIHVuaW9uQXJyYXkgPSBuZXcgQ29uc3Rh
bnRVbmlvblt0eXBlLmdldE9iamVjdFNpemUoKV07Ci0gICAgICAgIGlmIChhZ2dyTm9kZS0+Z2V0
U2VxdWVuY2UoKS5zaXplKCkgPT0gMSkgIHsKLSAgICAgICAgICAgIHJldHVyblZhbCA9IGludGVy
bWVkaWF0ZS5wYXJzZUNvbnN0VHJlZShhZ2dyTm9kZS0+Z2V0TGluZSgpLCBhZ2dyTm9kZSwgdW5p
b25BcnJheSwgYWdnck5vZGUtPmdldE9wKCksIHN5bWJvbFRhYmxlLCAgdHlwZSwgdHJ1ZSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm5WYWwgPSBpbnRlcm1l
ZGlhdGUucGFyc2VDb25zdFRyZWUoYWdnck5vZGUtPmdldExpbmUoKSwgYWdnck5vZGUsIHVuaW9u
QXJyYXksIGFnZ3JOb2RlLT5nZXRPcCgpLCBzeW1ib2xUYWJsZSwgIHR5cGUpOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChyZXR1cm5WYWwpCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAg
ICByZXR1cm4gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgdHlwZSwg
YWdnck5vZGUtPmdldExpbmUoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8vIEZ1
bmN0aW9uIGZvciBjb25zdHJ1Y3RvciBpbXBsZW1lbnRhdGlvbi4gQ2FsbHMgYWRkVW5hcnlNYXRo
IHdpdGggYXBwcm9wcmlhdGUgRU9wIHZhbHVlCi0vLyBmb3IgdGhlIHBhcmFtZXRlciB0byB0aGUg
Y29uc3RydWN0b3IgKHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uKS4gRXNzZW50aWFsbHksIGl0IGNv
bnZlcnRzCi0vLyB0aGUgcGFyYW1ldGVyIHR5cGVzIGNvcnJlY3RseS4gSWYgYSBjb25zdHJ1Y3Rv
ciBleHBlY3RzIGFuIGludCAobGlrZSBpdmVjMikgYW5kIGlzIHBhc3NlZCBhIAotLy8gZmxvYXQs
IHRoZW4gZmxvYXQgaXMgY29udmVydGVkIHRvIGludC4KLS8vCi0vLyBSZXR1cm5zIDAgZm9yIGFu
IGVycm9yIG9yIHRoZSBjb25zdHJ1Y3RlZCBub2RlLgotLy8KLVRJbnRlcm1UeXBlZCogVFBhcnNl
Q29udGV4dDo6Y29uc3RydWN0QnVpbHRJbihjb25zdCBUVHlwZSogdHlwZSwgVE9wZXJhdG9yIG9w
LCBUSW50ZXJtTm9kZSogbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgYm9vbCBzdWJzZXQp
Ci17Ci0gICAgVEludGVybVR5cGVkKiBuZXdOb2RlOwotICAgIFRPcGVyYXRvciBiYXNpY09wOwot
Ci0gICAgLy8KLSAgICAvLyBGaXJzdCwgY29udmVydCB0eXBlcyBhcyBuZWVkZWQuCi0gICAgLy8K
LSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMyOgotICAgIGNhc2Ug
RU9wQ29uc3RydWN0VmVjMzoKLSAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzQ6Ci0gICAgY2FzZSBF
T3BDb25zdHJ1Y3RNYXQyOgotICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MzoKLSAgICBjYXNlIEVP
cENvbnN0cnVjdE1hdDQ6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RGbG9hdDoKLSAgICAgICAgYmFz
aWNPcCA9IEVPcENvbnN0cnVjdEZsb2F0OwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgRU9w
Q29uc3RydWN0SVZlYzI6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMzoKLSAgICBjYXNlIEVP
cENvbnN0cnVjdElWZWM0OgotICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OgotICAgICAgICBiYXNp
Y09wID0gRU9wQ29uc3RydWN0SW50OwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgRU9wQ29u
c3RydWN0QlZlYzI6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMzoKLSAgICBjYXNlIEVPcENv
bnN0cnVjdEJWZWM0OgotICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDoKLSAgICAgICAgYmFzaWNP
cCA9IEVPcENvbnN0cnVjdEJvb2w7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAg
ICAgICAgZXJyb3IobGluZSwgInVuc3VwcG9ydGVkIGNvbnN0cnVjdGlvbiIsICIiKTsKLSAgICAg
ICAgcmVjb3ZlcigpOwotCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBuZXdOb2RlID0g
aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChiYXNpY09wLCBub2RlLCBub2RlLT5nZXRMaW5lKCks
IHN5bWJvbFRhYmxlKTsKLSAgICBpZiAobmV3Tm9kZSA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxp
bmUsICJjYW4ndCBjb252ZXJ0IiwgImNvbnN0cnVjdG9yIik7Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KLQotICAgIC8vCi0gICAgLy8gTm93LCBpZiB0aGVyZSBzdGlsbCBpc24ndCBhbiBvcGVy
YXRpb24gdG8gZG8gdGhlIGNvbnN0cnVjdGlvbiwgYW5kIHdlIG5lZWQgb25lLCBhZGQgb25lLgot
ICAgIC8vCi0gICAgCi0gICAgLy8gT3RoZXJ3aXNlLCBza2lwIG91dCBlYXJseS4KLSAgICBpZiAo
c3Vic2V0IHx8IChuZXdOb2RlICE9IG5vZGUgJiYgbmV3Tm9kZS0+Z2V0VHlwZSgpID09ICp0eXBl
KSkKLSAgICAgICAgcmV0dXJuIG5ld05vZGU7Ci0KLSAgICAvLyBzZXRBZ2dyZWdhdGVPcGVyYXRv
ciB3aWxsIGluc2VydCBhIG5ldyBub2RlIGZvciB0aGUgY29uc3RydWN0b3IsIGFzIG5lZWRlZC4K
LSAgICByZXR1cm4gaW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5ld05vZGUsIG9w
LCBsaW5lKTsKLX0KLQotLy8gVGhpcyBmdW5jdGlvbiB0ZXN0cyBmb3IgdGhlIHR5cGUgb2YgdGhl
IHBhcmFtZXRlcnMgdG8gdGhlIHN0cnVjdHVyZXMgY29uc3RydWN0b3JzLiBSYWlzZXMKLS8vIGFu
IGVycm9yIG1lc3NhZ2UgaWYgdGhlIGV4cGVjdGVkIHR5cGUgZG9lcyBub3QgbWF0Y2ggdGhlIHBh
cmFtZXRlciBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLgotLy8KLS8vIFJldHVybnMgMCBmb3Ig
YW4gZXJyb3Igb3IgdGhlIGlucHV0IG5vZGUgaXRzZWxmIGlmIHRoZSBleHBlY3RlZCBhbmQgdGhl
IGdpdmVuIHBhcmFtZXRlciB0eXBlcyBtYXRjaC4KLS8vCi1USW50ZXJtVHlwZWQqIFRQYXJzZUNv
bnRleHQ6OmNvbnN0cnVjdFN0cnVjdChUSW50ZXJtTm9kZSogbm9kZSwgVFR5cGUqIHR5cGUsIGlu
dCBwYXJhbUNvdW50LCBjb25zdCBUU291cmNlTG9jJiBsaW5lLCBib29sIHN1YnNldCkKLXsKLSAg
ICBpZiAoKnR5cGUgPT0gbm9kZS0+Z2V0QXNUeXBlZCgpLT5nZXRUeXBlKCkpIHsKLSAgICAgICAg
aWYgKHN1YnNldCkKLSAgICAgICAgICAgIHJldHVybiBub2RlLT5nZXRBc1R5cGVkKCk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBpbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3Bl
cmF0b3Iobm9kZS0+Z2V0QXNUeXBlZCgpLCBFT3BDb25zdHJ1Y3RTdHJ1Y3QsIGxpbmUpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKLSAg
ICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJjYW5ub3QgY29udmVydCBwYXJhbWV0ZXIgIiA8PCBw
YXJhbUNvdW50IAotICAgICAgICAgICAgICAgICAgICAgICAgPDwgIiBmcm9tICciIDw8IG5vZGUt
PmdldEFzVHlwZWQoKS0+Z2V0VHlwZSgpLmdldEJhc2ljU3RyaW5nKCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIDw8ICInIHRvICciIDw8IHR5cGUtPmdldEJhc2ljU3RyaW5nKCkgPDwgIiciOwot
ICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7Ci0g
ICAgICAgIGVycm9yKGxpbmUsICIiLCAiY29uc3RydWN0b3IiLCBleHRyYUluZm8uY19zdHIoKSk7
Ci0gICAgICAgIHJlY292ZXIoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotLy8KLS8v
IFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdHJlZSByZXByZXNlbnRhdGlvbiBmb3IgdGhlIHZl
Y3RvciBmaWVsZChzKSBiZWluZyBhY2Nlc3NlZCBmcm9tIGNvbnRhbnQgdmVjdG9yLgotLy8gSWYg
b25seSBvbmUgY29tcG9uZW50IG9mIHZlY3RvciBpcyBhY2Nlc3NlZCAodi54IG9yIHZbMF0gd2hl
cmUgdiBpcyBhIGNvbnRhbnQgdmVjdG9yKSwgdGhlbiBhIGNvbnRhbnQgbm9kZSBpcwotLy8gcmV0
dXJuZWQsIGVsc2UgYW4gYWdncmVnYXRlIG5vZGUgaXMgcmV0dXJuZWQgKGZvciB2Lnh5KS4gVGhl
IGlucHV0IHRvIHRoaXMgZnVuY3Rpb24gY291bGQgZWl0aGVyIGJlIHRoZSBzeW1ib2wKLS8vIG5v
ZGUgb3IgaXQgY291bGQgYmUgdGhlIGludGVybWVkaWF0ZSB0cmVlIHJlcHJlc2VudGF0aW9uIG9m
IGFjY2Vzc2luZyBmaWVsZHMgaW4gYSBjb25zdGFudCBzdHJ1Y3R1cmUgb3IgY29sdW1uIG9mIAot
Ly8gYSBjb25zdGFudCBtYXRyaXguCi0vLwotVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0Ojph
ZGRDb25zdFZlY3Rvck5vZGUoVFZlY3RvckZpZWxkcyYgZmllbGRzLCBUSW50ZXJtVHlwZWQqIG5v
ZGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCi17Ci0gICAgVEludGVybVR5cGVkKiB0eXBlZE5v
ZGU7Ci0gICAgVEludGVybUNvbnN0YW50VW5pb24qIHRlbXBDb25zdGFudE5vZGUgPSBub2RlLT5n
ZXRBc0NvbnN0YW50VW5pb24oKTsKLQotICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXk7Ci0g
ICAgaWYgKHRlbXBDb25zdGFudE5vZGUpIHsKLSAgICAgICAgdW5pb25BcnJheSA9IHRlbXBDb25z
dGFudE5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7Ci0KLSAgICAgICAgaWYgKCF1bmlvbkFy
cmF5KSB7Ci0gICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7
IC8vIFRoZSBub2RlIGhhcyB0byBiZSBlaXRoZXIgYSBzeW1ib2wgbm9kZSBvciBhbiBhZ2dyZWdh
dGUgbm9kZSBvciBhIHRlbXBDb25zdGFudCBub2RlLCBlbHNlLCBpdHMgYW4gZXJyb3IKLSAgICAg
ICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgdmVjdG9yIiwgIkVycm9yIik7
Ci0gICAgICAgIHJlY292ZXIoKTsKLQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBD
b25zdGFudFVuaW9uKiBjb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bZmllbGRzLm51bV07
Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpZWxkcy5udW07IGkrKykgewotICAgICAgICBp
ZiAoZmllbGRzLm9mZnNldHNbaV0gPj0gbm9kZS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkp
IHsKLSAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKLSAgICAg
ICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAidmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2Yg
cmFuZ2UgJyIgPDwgZmllbGRzLm9mZnNldHNbaV0gPDwgIiciOwotICAgICAgICAgICAgc3RkOjpz
dHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOwotICAgICAgICAgICAgZXJy
b3IobGluZSwgIiIsICJbIiwgZXh0cmFJbmZvLmNfc3RyKCkpOwotICAgICAgICAgICAgcmVjb3Zl
cigpOwotICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAwOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBjb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtmaWVsZHMub2Zmc2V0c1tp
XV07Ci0KLSAgICB9IAotICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVu
aW9uKGNvbnN0QXJyYXksIG5vZGUtPmdldFR5cGUoKSwgbGluZSk7Ci0gICAgcmV0dXJuIHR5cGVk
Tm9kZTsKLX0KLQotLy8KLS8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY29sdW1uIGJlaW5n
IGFjY2Vzc2VkIGZyb20gYSBjb25zdGFudCBtYXRyaXguIFRoZSB2YWx1ZXMgYXJlIHJldHJpZXZl
ZCBmcm9tCi0vLyB0aGUgc3ltYm9sIHRhYmxlIGFuZCBwYXJzZS10cmVlIGlzIGJ1aWx0IGZvciBh
IHZlY3RvciAoZWFjaCBjb2x1bW4gb2YgYSBtYXRyaXggaXMgYSB2ZWN0b3IpLiBUaGUgaW5wdXQg
Ci0vLyB0byB0aGUgZnVuY3Rpb24gY291bGQgZWl0aGVyIGJlIGEgc3ltYm9sIG5vZGUgKG1bMF0g
d2hlcmUgbSBpcyBhIGNvbnN0YW50IG1hdHJpeCl0aGF0IHJlcHJlc2VudHMgYSAKLS8vIGNvbnN0
YW50IG1hdHJpeCBvciBpdCBjb3VsZCBiZSB0aGUgdHJlZSByZXByZXNlbnRhdGlvbiBvZiB0aGUg
Y29uc3RhbnQgbWF0cml4IChzLm0xWzBdIHdoZXJlIHMgaXMgYSBjb25zdGFudCBzdHJ1Y3R1cmUp
Ci0vLwotVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdE1hdHJpeE5vZGUoaW50
IGluZGV4LCBUSW50ZXJtVHlwZWQqIG5vZGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCi17Ci0g
ICAgVEludGVybVR5cGVkKiB0eXBlZE5vZGU7Ci0gICAgVEludGVybUNvbnN0YW50VW5pb24qIHRl
bXBDb25zdGFudE5vZGUgPSBub2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLQotICAgIGlmIChp
bmRleCA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkgewotICAgICAgICBzdGQ6
OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07Ci0gICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8
PCAibWF0cml4IGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIgPDwgaW5kZXggPDwgIici
OwotICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7
Ci0gICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsKLSAgICAg
ICAgcmVjb3ZlcigpOwotICAgICAgICBpbmRleCA9IDA7Ci0gICAgfQotCi0gICAgaWYgKHRlbXBD
b25zdGFudE5vZGUpIHsKLSAgICAgICAgIENvbnN0YW50VW5pb24qIHVuaW9uQXJyYXkgPSB0ZW1w
Q29uc3RhbnROb2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOwotICAgICAgICAgaW50IHNpemUg
PSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKTsKLSAgICAgICAg
IHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKCZ1bmlvbkFycmF5W3Np
emUqaW5kZXhdLCB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIG1hdHJpeCIs
ICJFcnJvciIpOwotICAgICAgICByZWNvdmVyKCk7Ci0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHR5cGVkTm9kZTsKLX0KLQotCi0vLwotLy8gVGhpcyBmdW5jdGlvbiBy
ZXR1cm5zIGFuIGVsZW1lbnQgb2YgYW4gYXJyYXkgYWNjZXNzZWQgZnJvbSBhIGNvbnN0YW50IGFy
cmF5LiBUaGUgdmFsdWVzIGFyZSByZXRyaWV2ZWQgZnJvbQotLy8gdGhlIHN5bWJvbCB0YWJsZSBh
bmQgcGFyc2UtdHJlZSBpcyBidWlsdCBmb3IgdGhlIHR5cGUgb2YgdGhlIGVsZW1lbnQuIFRoZSBp
bnB1dCAKLS8vIHRvIHRoZSBmdW5jdGlvbiBjb3VsZCBlaXRoZXIgYmUgYSBzeW1ib2wgbm9kZSAo
YVswXSB3aGVyZSBhIGlzIGEgY29uc3RhbnQgYXJyYXkpdGhhdCByZXByZXNlbnRzIGEgCi0vLyBj
b25zdGFudCBhcnJheSBvciBpdCBjb3VsZCBiZSB0aGUgdHJlZSByZXByZXNlbnRhdGlvbiBvZiB0
aGUgY29uc3RhbnQgYXJyYXkgKHMuYTFbMF0gd2hlcmUgcyBpcyBhIGNvbnN0YW50IHN0cnVjdHVy
ZSkKLS8vCi1USW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0QXJyYXlOb2RlKGlu
dCBpbmRleCwgVEludGVybVR5cGVkKiBub2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQotewot
ICAgIFRJbnRlcm1UeXBlZCogdHlwZWROb2RlOwotICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiB0
ZW1wQ29uc3RhbnROb2RlID0gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0gICAgVFR5cGUg
YXJyYXlFbGVtZW50VHlwZSA9IG5vZGUtPmdldFR5cGUoKTsKLSAgICBhcnJheUVsZW1lbnRUeXBl
LmNsZWFyQXJyYXluZXNzKCk7Ci0KLSAgICBpZiAoaW5kZXggPj0gbm9kZS0+Z2V0VHlwZSgpLmdl
dEFycmF5U2l6ZSgpKSB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVh
bTsKLSAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJhcnJheSBmaWVsZCBzZWxlY3Rpb24gb3V0
IG9mIHJhbmdlICciIDw8IGluZGV4IDw8ICInIjsKLSAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJ
bmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOwotICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsi
LCBleHRyYUluZm8uY19zdHIoKSk7Ci0gICAgICAgIHJlY292ZXIoKTsKLSAgICAgICAgaW5kZXgg
PSAwOwotICAgIH0KLQotICAgIGlmICh0ZW1wQ29uc3RhbnROb2RlKSB7Ci0gICAgICAgICBzaXpl
X3QgYXJyYXlFbGVtZW50U2l6ZSA9IGFycmF5RWxlbWVudFR5cGUuZ2V0T2JqZWN0U2l6ZSgpOwot
ICAgICAgICAgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUtPmdl
dFVuaW9uQXJyYXlQb2ludGVyKCk7Ci0gICAgICAgICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUu
YWRkQ29uc3RhbnRVbmlvbigmdW5pb25BcnJheVthcnJheUVsZW1lbnRTaXplICogaW5kZXhdLCB0
ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIGFycmF5IiwgIkVycm9yIik7Ci0g
ICAgICAgIHJlY292ZXIoKTsKLQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdHlwZWROb2RlOwotfQotCi0KLS8vCi0vLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZh
bHVlIG9mIGEgcGFydGljdWxhciBmaWVsZCBpbnNpZGUgYSBjb25zdGFudCBzdHJ1Y3R1cmUgZnJv
bSB0aGUgc3ltYm9sIHRhYmxlLiAKLS8vIElmIHRoZXJlIGlzIGFuIGVtYmVkZGVkL25lc3RlZCBz
dHJ1Y3QsIGl0IGFwcHJvcHJpYXRlbHkgY2FsbHMgYWRkQ29uc3RTdHJ1Y3ROZXN0ZWQgb3IgYWRk
Q29uc3RTdHJ1Y3RGcm9tQWdncgotLy8gZnVuY3Rpb24gYW5kIHJldHVybnMgdGhlIHBhcnNlLXRy
ZWUgd2l0aCB0aGUgdmFsdWVzIG9mIHRoZSBlbWJlZGRlZC9uZXN0ZWQgc3RydWN0LgotLy8KLVRJ
bnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RTdHJ1Y3QoVFN0cmluZyYgaWRlbnRp
ZmllciwgVEludGVybVR5cGVkKiBub2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQotewotICAg
IGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9IG5vZGUtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+
ZmllbGRzKCk7Ci0KLSAgICBzaXplX3QgaW5zdGFuY2VTaXplID0gMDsKLSAgICBmb3IgKHNpemVf
dCBpbmRleCA9IDA7IGluZGV4IDwgZmllbGRzLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBp
ZiAoZmllbGRzW2luZGV4XS0+bmFtZSgpID09IGlkZW50aWZpZXIpIHsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaW5zdGFuY2VTaXplICs9IGZpZWxk
c1tpbmRleF0tPnR5cGUoKS0+Z2V0T2JqZWN0U2l6ZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgVEludGVybVR5cGVkKiB0eXBlZE5vZGUgPSAwOwotICAgIFRJbnRlcm1Db25zdGFudFVuaW9u
KiB0ZW1wQ29uc3RhbnROb2RlID0gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0gICAgaWYg
KHRlbXBDb25zdGFudE5vZGUpIHsKLSAgICAgICAgIENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkg
PSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOwotCi0gICAgICAgICB0
eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbihjb25zdEFycmF5K2luc3Rh
bmNlU2l6ZSwgdGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsgLy8gdHlwZSB3aWxs
IGJlIGNoYW5nZWQgaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb24KLSAgICB9IGVsc2UgewotICAgICAg
ICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSBzdHJ1Y3R1cmUiLCAiRXJyb3Ii
KTsKLSAgICAgICAgcmVjb3ZlcigpOwotCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAg
IHJldHVybiB0eXBlZE5vZGU7Ci19Ci0KLWJvb2wgVFBhcnNlQ29udGV4dDo6ZW50ZXJTdHJ1Y3RE
ZWNsYXJhdGlvbihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlm
aWVyKQotewotICAgICsrc3RydWN0TmVzdGluZ0xldmVsOwotCi0gICAgLy8gRW1iZWRkZWQgc3Ry
dWN0dXJlIGRlZmluaXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIHBlciBHTFNMIEVTIHNwZWMuCi0g
ICAgLy8gVGhleSBhcmVuJ3QgYWxsb3dlZCBpbiBHTFNMIGVpdGhlciwgYnV0IHdlIG5lZWQgdG8g
ZGV0ZWN0IHRoaXMgaGVyZQotICAgIC8vIHNvIHdlIGRvbid0IHJlbHkgb24gdGhlIEdMU0wgY29t
cGlsZXIgdG8gY2F0Y2ggaXQuCi0gICAgaWYgKHN0cnVjdE5lc3RpbmdMZXZlbCA+IDEpIHsKLSAg
ICAgICAgZXJyb3IobGluZSwgIiIsICJFbWJlZGRlZCBzdHJ1Y3QgZGVmaW5pdGlvbnMgYXJlIG5v
dCBhbGxvd2VkIik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotdm9pZCBUUGFyc2VDb250ZXh0OjpleGl0U3RydWN0RGVjbGFyYXRpb24oKQot
ewotICAgIC0tc3RydWN0TmVzdGluZ0xldmVsOwotfQotCi1uYW1lc3BhY2UgewotCi1jb25zdCBp
bnQga1dlYkdMTWF4U3RydWN0TmVzdGluZyA9IDQ7Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi1ib29s
IFRQYXJzZUNvbnRleHQ6OnN0cnVjdE5lc3RpbmdFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2Mm
IGxpbmUsIGNvbnN0IFRGaWVsZCYgZmllbGQpCi17Ci0gICAgaWYgKCFpc1dlYkdMQmFzZWRTcGVj
KHNoYWRlclNwZWMpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAo
ZmllbGQudHlwZSgpLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFdlJ3JlIGFscmVhZHkgaW5zaWRlIGEgc3RydWN0
dXJlIGRlZmluaXRpb24gYXQgdGhpcyBwb2ludCwgc28gYWRkCi0gICAgLy8gb25lIHRvIHRoZSBm
aWVsZCdzIHN0cnVjdCBuZXN0aW5nLgotICAgIGlmICgxICsgZmllbGQudHlwZSgpLT5nZXREZWVw
ZXN0U3RydWN0TmVzdGluZygpID4ga1dlYkdMTWF4U3RydWN0TmVzdGluZykgewotICAgICAgICBz
dGQ6OnN0cmluZ3N0cmVhbSByZWFzb25TdHJlYW07Ci0gICAgICAgIHJlYXNvblN0cmVhbSA8PCAi
UmVmZXJlbmNlIG9mIHN0cnVjdCB0eXBlICIKLSAgICAgICAgICAgICAgICAgICAgIDw8IGZpZWxk
LnR5cGUoKS0+Z2V0U3RydWN0KCktPm5hbWUoKS5jX3N0cigpCi0gICAgICAgICAgICAgICAgICAg
ICA8PCAiIGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkIG5lc3RpbmcgbGV2ZWwgb2YgIgotICAgICAg
ICAgICAgICAgICAgICAgPDwga1dlYkdMTWF4U3RydWN0TmVzdGluZzsKLSAgICAgICAgc3RkOjpz
dHJpbmcgcmVhc29uID0gcmVhc29uU3RyZWFtLnN0cigpOwotICAgICAgICBlcnJvcihsaW5lLCBy
ZWFzb24uY19zdHIoKSwgZmllbGQubmFtZSgpLmNfc3RyKCksICIiKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLwotLy8gUGFyc2UgYW4g
YXJyYXkgaW5kZXggZXhwcmVzc2lvbgotLy8KLVRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6
YWRkSW5kZXhFeHByZXNzaW9uKFRJbnRlcm1UeXBlZCAqYmFzZUV4cHJlc3Npb24sIGNvbnN0IFRT
b3VyY2VMb2MmIGxvY2F0aW9uLCBUSW50ZXJtVHlwZWQgKmluZGV4RXhwcmVzc2lvbikKLXsKLSAg
ICBUSW50ZXJtVHlwZWQgKmluZGV4ZWRFeHByZXNzaW9uID0gTlVMTDsKLQotICAgIGlmICghYmFz
ZUV4cHJlc3Npb24tPmlzQXJyYXkoKSAmJiAhYmFzZUV4cHJlc3Npb24tPmlzTWF0cml4KCkgJiYg
IWJhc2VFeHByZXNzaW9uLT5pc1ZlY3RvcigpKQotICAgIHsKLSAgICAgICAgaWYgKGJhc2VFeHBy
ZXNzaW9uLT5nZXRBc1N5bWJvbE5vZGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgZXJyb3Io
bG9jYXRpb24sICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3Ig
dmVjdG9yICIsIGJhc2VFeHByZXNzaW9uLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCku
Y19zdHIoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAg
ICBlcnJvcihsb2NhdGlvbiwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0
cml4LCBvciB2ZWN0b3IgIiwgImV4cHJlc3Npb24iKTsKLSAgICAgICAgfQotICAgICAgICByZWNv
dmVyKCk7Ci0gICAgfQotCi0gICAgaWYgKGluZGV4RXhwcmVzc2lvbi0+Z2V0UXVhbGlmaWVyKCkg
PT0gRXZxQ29uc3QpCi0gICAgewotICAgICAgICBpbnQgaW5kZXggPSBpbmRleEV4cHJlc3Npb24t
PmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRJQ29uc3QoMCk7Ci0gICAgICAgIGlmIChpbmRleCA8
IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGluZm9TdHJlYW07
Ci0gICAgICAgICAgICBpbmZvU3RyZWFtIDw8IGluZGV4OwotICAgICAgICAgICAgc3RkOjpzdHJp
bmcgaW5mbyA9IGluZm9TdHJlYW0uc3RyKCk7Ci0gICAgICAgICAgICBlcnJvcihsb2NhdGlvbiwg
Im5lZ2F0aXZlIGluZGV4IiwgaW5mby5jX3N0cigpKTsKLSAgICAgICAgICAgIHJlY292ZXIoKTsK
LSAgICAgICAgICAgIGluZGV4ID0gMDsKLSAgICAgICAgfQotICAgICAgICBpZiAoYmFzZUV4cHJl
c3Npb24tPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKGJhc2VFeHByZXNzaW9uLT5pc0FycmF5KCkpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgLy8gY29uc3RhbnQgZm9sZGluZyBmb3IgYXJyYXlzCi0gICAgICAg
ICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBhZGRDb25zdEFycmF5Tm9kZShpbmRleCwgYmFz
ZUV4cHJlc3Npb24sIGxvY2F0aW9uKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2Ug
aWYgKGJhc2VFeHByZXNzaW9uLT5pc1ZlY3RvcigpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIC8vIGNvbnN0YW50IGZvbGRpbmcgZm9yIHZlY3RvcnMKLSAgICAgICAgICAgICAgICBU
VmVjdG9yRmllbGRzIGZpZWxkczsKLSAgICAgICAgICAgICAgICBmaWVsZHMubnVtID0gMTsKLSAg
ICAgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1swXSA9IGluZGV4OyAvLyBuZWVkIHRvIGRvIGl0
IHRoaXMgd2F5IGJlY2F1c2Ugdi54eSBzZW5kcyBmaWVsZHMgaW50ZWdlciBhcnJheQotICAgICAg
ICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uID0gYWRkQ29uc3RWZWN0b3JOb2RlKGZpZWxkcywg
YmFzZUV4cHJlc3Npb24sIGxvY2F0aW9uKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UgaWYgKGJhc2VFeHByZXNzaW9uLT5pc01hdHJpeCgpKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIC8vIGNvbnN0YW50IGZvbGRpbmcgZm9yIG1hdHJpY2VzCi0gICAgICAgICAgICAg
ICAgaW5kZXhlZEV4cHJlc3Npb24gPSBhZGRDb25zdE1hdHJpeE5vZGUoaW5kZXgsIGJhc2VFeHBy
ZXNzaW9uLCBsb2NhdGlvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoYmFzZUV4cHJlc3Npb24tPmlzQXJyYXkoKSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gYmFzZUV4cHJlc3Np
b24tPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKLSAgICAgICAg
ICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJhcnJheSBpbmRleCBvdXQgb2YgcmFuZ2Ug
JyIgPDwgaW5kZXggPDwgIiciOwotICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBleHRy
YUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGVycm9y
KGxvY2F0aW9uLCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBiYXNlRXhwcmVzc2lv
bi0+Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpIC0gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgZWxzZSBpZiAoYmFzZUV4cHJlc3Npb24tPmdldFF1YWxpZmllcigpID09IEV2
cUZyYWdEYXRhICYmIGluZGV4ID4gMCAmJiAhaXNFeHRlbnNpb25FbmFibGVkKCJHTF9FWFRfZHJh
d19idWZmZXJzIikpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBlcnJv
cihsb2NhdGlvbiwgIiIsICJbIiwgImFycmF5IGluZGV4ZXMgZm9yIGdsX0ZyYWdEYXRhIG11c3Qg
YmUgemVybyB3aGVuIEdMX0VYVF9kcmF3X2J1ZmZlcnMgaXMgZGlzYWJsZWQiKTsKLSAgICAgICAg
ICAgICAgICAgICAgcmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICAgICBpbmRleCA9IDA7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoKGJh
c2VFeHByZXNzaW9uLT5pc1ZlY3RvcigpIHx8IGJhc2VFeHByZXNzaW9uLT5pc01hdHJpeCgpKSAm
JiBiYXNlRXhwcmVzc2lvbi0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkgPD0gaW5kZXgpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZv
U3RyZWFtOwotICAgICAgICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiZmllbGQgc2VsZWN0
aW9uIG91dCBvZiByYW5nZSAnIiA8PCBpbmRleCA8PCAiJyI7Ci0gICAgICAgICAgICAgICAgc3Rk
OjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOwotICAgICAgICAgICAg
ICAgIGVycm9yKGxvY2F0aW9uLCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7Ci0gICAgICAg
ICAgICAgICAgcmVjb3ZlcigpOwotICAgICAgICAgICAgICAgIGluZGV4ID0gYmFzZUV4cHJlc3Np
b24tPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpIC0gMTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaW5kZXhFeHByZXNzaW9uLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25B
cnJheVBvaW50ZXIoKS0+c2V0SUNvbnN0KGluZGV4KTsKLSAgICAgICAgICAgIGluZGV4ZWRFeHBy
ZXNzaW9uID0gaW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCBiYXNlRXhwcmVz
c2lvbiwgaW5kZXhFeHByZXNzaW9uLCBsb2NhdGlvbik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
ZWxzZQotICAgIHsKLSAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBpbnRlcm1lZGlhdGUuYWRk
SW5kZXgoRU9wSW5kZXhJbmRpcmVjdCwgYmFzZUV4cHJlc3Npb24sIGluZGV4RXhwcmVzc2lvbiwg
bG9jYXRpb24pOwotICAgIH0KLQotICAgIGlmIChpbmRleGVkRXhwcmVzc2lvbiA9PSAwKQotICAg
IHsKLSAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
WzFdOwotICAgICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3QoMC4wZik7Ci0gICAgICAgIGluZGV4
ZWRFeHByZXNzaW9uID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwg
VFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUNvbnN0KSwgbG9jYXRpb24pOwotICAgIH0KLSAg
ICBlbHNlIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNBcnJheSgpKQotICAgIHsKLSAgICAgICAgY29u
c3QgVFR5cGUgJmJhc2VUeXBlID0gYmFzZUV4cHJlc3Npb24tPmdldFR5cGUoKTsKLSAgICAgICAg
aWYgKGJhc2VUeXBlLmdldFN0cnVjdCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBUVHlwZSBj
b3B5T2ZUeXBlKGJhc2VUeXBlLmdldFN0cnVjdCgpKTsKLSAgICAgICAgICAgIGluZGV4ZWRFeHBy
ZXNzaW9uLT5zZXRUeXBlKGNvcHlPZlR5cGUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgewotICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoVFR5cGUoYmFz
ZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgpLCBiYXNlRXhwcmVzc2lvbi0+Z2V0UHJlY2lzaW9u
KCksIEV2cVRlbXBvcmFyeSwgYmFzZUV4cHJlc3Npb24tPmdldE5vbWluYWxTaXplKCksIGJhc2VF
eHByZXNzaW9uLT5pc01hdHJpeCgpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYmFzZUV4
cHJlc3Npb24tPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkKLSAgICAgICAg
ewotICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPmdldFR5cGVQb2ludGVyKCktPnNldFF1
YWxpZmllcihFdnFDb25zdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoYmFzZUV4
cHJlc3Npb24tPmlzTWF0cml4KCkpCi0gICAgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmll
ciA9IGJhc2VFeHByZXNzaW9uLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3Qg
PyBFdnFDb25zdCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNl
dFR5cGUoVFR5cGUoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgpLCBiYXNlRXhwcmVzc2lv
bi0+Z2V0UHJlY2lzaW9uKCksIHF1YWxpZmllciwgYmFzZUV4cHJlc3Npb24tPmdldE5vbWluYWxT
aXplKCkpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoYmFzZUV4cHJlc3Npb24tPmlzVmVjdG9yKCkp
Ci0gICAgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IGJhc2VFeHByZXNzaW9uLT5n
ZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QgPyBFdnFDb25zdCA6IEV2cVRlbXBv
cmFyeTsKLSAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoVFR5cGUoYmFzZUV4cHJl
c3Npb24tPmdldEJhc2ljVHlwZSgpLCBiYXNlRXhwcmVzc2lvbi0+Z2V0UHJlY2lzaW9uKCksIHF1
YWxpZmllcikpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpbmRleGVkRXhwcmVz
c2lvbi0+c2V0VHlwZShiYXNlRXhwcmVzc2lvbi0+Z2V0VHlwZSgpKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gaW5kZXhlZEV4cHJlc3Npb247Ci19Ci0KLS8vCi0vLyBQYXJzZSBhbiBhcnJheSBvZiBz
dHJpbmdzIHVzaW5nIHl5cGFyc2UuCi0vLwotLy8gUmV0dXJucyAwIGZvciBzdWNjZXNzLgotLy8K
LWludCBQYVBhcnNlU3RyaW5ncyhzaXplX3QgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmlu
Z1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCi0gICAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4
dCogY29udGV4dCkgewotICAgIGlmICgoY291bnQgPT0gMCkgfHwgKHN0cmluZyA9PSBOVUxMKSkK
LSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICBpZiAoZ2xzbGFuZ19pbml0aWFsaXplKGNvbnRleHQp
KQotICAgICAgICByZXR1cm4gMTsKLQotICAgIGludCBlcnJvciA9IGdsc2xhbmdfc2Nhbihjb3Vu
dCwgc3RyaW5nLCBsZW5ndGgsIGNvbnRleHQpOwotICAgIGlmICghZXJyb3IpCi0gICAgICAgIGVy
cm9yID0gZ2xzbGFuZ19wYXJzZShjb250ZXh0KTsKLQotICAgIGdsc2xhbmdfZmluYWxpemUoY29u
dGV4dCk7Ci0KLSAgICByZXR1cm4gKGVycm9yID09IDApICYmIChjb250ZXh0LT5udW1FcnJvcnMo
KSA9PSAwKSA/IDAgOiAxOwotfQotCi0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlQ29udGV4dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1BhcnNlQ29udGV4dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBjMmIzYzNmN2VjODliMGRmYzdmYTExNGNhZTM1N2IxNmRmZjU5M2JlLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9QYXJzZUNvbnRleHQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzNCAr
MCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotI2lmbmRlZiBfUEFSU0VSX0hFTFBFUl9JTkNMVURF
RF8KLSNkZWZpbmUgX1BBUlNFUl9IRUxQRVJfSU5DTFVERURfCi0KLSNpbmNsdWRlICJjb21waWxl
ci9EaWFnbm9zdGljcy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuaCIK
LSNpbmNsdWRlICJjb21waWxlci9sb2NhbGludGVybWVkaWF0ZS5oIgotI2luY2x1ZGUgImNvbXBp
bGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaCIKLSNpbmNsdWRlICJjb21waWxlci9TaEhh
bmRsZS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCi0KLXN0cnVjdCBUTWF0
cml4RmllbGRzIHsKLSAgICBib29sIHdob2xlUm93OwotICAgIGJvb2wgd2hvbGVDb2w7Ci0gICAg
aW50IHJvdzsKLSAgICBpbnQgY29sOwotfTsKLQotLy8KLS8vIFRoZSBmb2xsb3dpbmcgYXJlIGV4
dHJhIHZhcmlhYmxlcyBuZWVkZWQgZHVyaW5nIHBhcnNpbmcsIGdyb3VwZWQgdG9nZXRoZXIgc28K
LS8vIHRoZXkgY2FuIGJlIHBhc3NlZCB0byB0aGUgcGFyc2VyIHdpdGhvdXQgbmVlZGluZyBhIGds
b2JhbC4KLS8vCi1zdHJ1Y3QgVFBhcnNlQ29udGV4dCB7Ci0gICAgVFBhcnNlQ29udGV4dChUU3lt
Ym9sVGFibGUmIHN5bXQsIFRFeHRlbnNpb25CZWhhdmlvciYgZXh0LCBUSW50ZXJtZWRpYXRlJiBp
bnRlcm0sIFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywgaW50IG9wdGlvbnMs
IGJvb2wgY2hlY2tzUHJlY0Vycm9ycywgY29uc3QgY2hhciogc291cmNlUGF0aCwgVEluZm9TaW5r
JiBpcykgOgotICAgICAgICAgICAgaW50ZXJtZWRpYXRlKGludGVybSksCi0gICAgICAgICAgICBz
eW1ib2xUYWJsZShzeW10KSwKLSAgICAgICAgICAgIHNoYWRlclR5cGUodHlwZSksCi0gICAgICAg
ICAgICBzaGFkZXJTcGVjKHNwZWMpLAotICAgICAgICAgICAgY29tcGlsZU9wdGlvbnMob3B0aW9u
cyksCi0gICAgICAgICAgICBzb3VyY2VQYXRoKHNvdXJjZVBhdGgpLAotICAgICAgICAgICAgdHJl
ZVJvb3QoMCksCi0gICAgICAgICAgICBsb29wTmVzdGluZ0xldmVsKDApLAotICAgICAgICAgICAg
c3RydWN0TmVzdGluZ0xldmVsKDApLAotICAgICAgICAgICAgY3VycmVudEZ1bmN0aW9uVHlwZShO
VUxMKSwKLSAgICAgICAgICAgIGZ1bmN0aW9uUmV0dXJuc1ZhbHVlKGZhbHNlKSwKLSAgICAgICAg
ICAgIGNoZWNrc1ByZWNpc2lvbkVycm9ycyhjaGVja3NQcmVjRXJyb3JzKSwKLSAgICAgICAgICAg
IGRpYWdub3N0aWNzKGlzKSwKLSAgICAgICAgICAgIGRpcmVjdGl2ZUhhbmRsZXIoZXh0LCBkaWFn
bm9zdGljcyksCi0gICAgICAgICAgICBwcmVwcm9jZXNzb3IoJmRpYWdub3N0aWNzLCAmZGlyZWN0
aXZlSGFuZGxlciksCi0gICAgICAgICAgICBzY2FubmVyKE5VTEwpIHsgIH0KLSAgICBUSW50ZXJt
ZWRpYXRlJiBpbnRlcm1lZGlhdGU7IC8vIHRvIGhvbGQgYW5kIGJ1aWxkIGEgcGFyc2UgdHJlZQot
ICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGU7ICAgLy8gc3ltYm9sIHRhYmxlIHRoYXQgZ29l
cyB3aXRoIHRoZSBsYW5ndWFnZSBjdXJyZW50bHkgYmVpbmcgcGFyc2VkCi0gICAgU2hTaGFkZXJU
eXBlIHNoYWRlclR5cGU7ICAgICAgICAgICAgICAvLyB2ZXJ0ZXggb3IgZnJhZ21lbnQgbGFuZ3Vh
Z2UgKGZ1dHVyZTogcGFjayBvciB1bnBhY2spCi0gICAgU2hTaGFkZXJTcGVjIHNoYWRlclNwZWM7
ICAgICAgICAgICAgICAvLyBUaGUgbGFuZ3VhZ2Ugc3BlY2lmaWNhdGlvbiBjb21waWxlciBjb25m
b3JtcyB0byAtIEdMRVMyIG9yIFdlYkdMLgotICAgIGludCBjb21waWxlT3B0aW9uczsKLSAgICBj
b25zdCBjaGFyKiBzb3VyY2VQYXRoOyAgICAgIC8vIFBhdGggb2Ygc291cmNlIGZpbGUgb3IgTlVM
TC4KLSAgICBUSW50ZXJtTm9kZSogdHJlZVJvb3Q7ICAgICAgIC8vIHJvb3Qgb2YgcGFyc2UgdHJl
ZSBiZWluZyBjcmVhdGVkCi0gICAgaW50IGxvb3BOZXN0aW5nTGV2ZWw7ICAgICAgICAvLyAwIGlm
IG91dHNpZGUgYWxsIGxvb3BzCi0gICAgaW50IHN0cnVjdE5lc3RpbmdMZXZlbDsgICAgICAvLyBp
bmNyZW1lbnRlZCB3aGlsZSBwYXJzaW5nIGEgc3RydWN0IGRlY2xhcmF0aW9uCi0gICAgY29uc3Qg
VFR5cGUqIGN1cnJlbnRGdW5jdGlvblR5cGU7ICAvLyB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIGZ1
bmN0aW9uIHRoYXQncyBjdXJyZW50bHkgYmVpbmcgcGFyc2VkCi0gICAgYm9vbCBmdW5jdGlvblJl
dHVybnNWYWx1ZTsgICAvLyB0cnVlIGlmIGEgbm9uLXZvaWQgZnVuY3Rpb24gaGFzIGEgcmV0dXJu
Ci0gICAgYm9vbCBjaGVja3NQcmVjaXNpb25FcnJvcnM7ICAvLyB0cnVlIGlmIGFuIGVycm9yIHdp
bGwgYmUgZ2VuZXJhdGVkIHdoZW4gYSB2YXJpYWJsZSBpcyBkZWNsYXJlZCB3aXRob3V0IHByZWNp
c2lvbiwgZXhwbGljaXQgb3IgaW1wbGljaXQuCi0gICAgYm9vbCBmcmFnbWVudFByZWNpc2lvbkhp
Z2g7ICAvLyB0cnVlIGlmIGhpZ2hwIHByZWNpc2lvbiBpcyBzdXBwb3J0ZWQgaW4gdGhlIGZyYWdt
ZW50IGxhbmd1YWdlLgotICAgIFRTdHJpbmcgSGFzaEVyck1zZzsKLSAgICBURGlhZ25vc3RpY3Mg
ZGlhZ25vc3RpY3M7Ci0gICAgVERpcmVjdGl2ZUhhbmRsZXIgZGlyZWN0aXZlSGFuZGxlcjsKLSAg
ICBwcDo6UHJlcHJvY2Vzc29yIHByZXByb2Nlc3NvcjsKLSAgICB2b2lkKiBzY2FubmVyOwotCi0g
ICAgaW50IG51bUVycm9ycygpIGNvbnN0IHsgcmV0dXJuIGRpYWdub3N0aWNzLm51bUVycm9ycygp
OyB9Ci0gICAgVEluZm9TaW5rJiBpbmZvU2luaygpIHsgcmV0dXJuIGRpYWdub3N0aWNzLmluZm9T
aW5rKCk7IH0KLSAgICB2b2lkIGVycm9yKGNvbnN0IFRTb3VyY2VMb2MmIGxvYywgY29uc3QgY2hh
ciAqcmVhc29uLCBjb25zdCBjaGFyKiB0b2tlbiwKLSAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IGV4dHJhSW5mbz0iIik7Ci0gICAgdm9pZCB3YXJuaW5nKGNvbnN0IFRTb3VyY2VMb2MmIGxvYywg
Y29uc3QgY2hhciogcmVhc29uLCBjb25zdCBjaGFyKiB0b2tlbiwKLSAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogZXh0cmFJbmZvPSIiKTsKLSAgICB2b2lkIHRyYWNlKGNvbnN0IGNoYXIqIHN0
cik7Ci0gICAgdm9pZCByZWNvdmVyKCk7Ci0KLSAgICBib29sIHBhcnNlVmVjdG9yRmllbGRzKGNv
bnN0IFRTdHJpbmcmLCBpbnQgdmVjU2l6ZSwgVFZlY3RvckZpZWxkcyYsIGNvbnN0IFRTb3VyY2VM
b2MmIGxpbmUpOwotICAgIGJvb2wgcGFyc2VNYXRyaXhGaWVsZHMoY29uc3QgVFN0cmluZyYsIGlu
dCBtYXRTaXplLCBUTWF0cml4RmllbGRzJiwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSk7Ci0KLSAg
ICBib29sIHJlc2VydmVkRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBU
U3RyaW5nJiBpZGVudGlmaWVyKTsKLSAgICB2b2lkIGFzc2lnbkVycm9yKGNvbnN0IFRTb3VyY2VM
b2MmIGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5nIGxlZnQsIFRTdHJpbmcgcmlnaHQpOwot
ICAgIHZvaWQgdW5hcnlPcEVycm9yKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IGNoYXIq
IG9wLCBUU3RyaW5nIG9wZXJhbmQpOwotICAgIHZvaWQgYmluYXJ5T3BFcnJvcihjb25zdCBUU291
cmNlTG9jJiBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVFN0cmluZyBsZWZ0LCBUU3RyaW5nIHJpZ2h0
KTsKLSAgICBib29sIHByZWNpc2lvbkVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwg
VFByZWNpc2lvbiBwcmVjaXNpb24sIFRCYXNpY1R5cGUgdHlwZSk7Ci0gICAgYm9vbCBsVmFsdWVF
cnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUSW50ZXJt
VHlwZWQqKTsKLSAgICBib29sIGNvbnN0RXJyb3JDaGVjayhUSW50ZXJtVHlwZWQqIG5vZGUpOwot
ICAgIGJvb2wgaW50ZWdlckVycm9yQ2hlY2soVEludGVybVR5cGVkKiBub2RlLCBjb25zdCBjaGFy
KiB0b2tlbik7Ci0gICAgYm9vbCBnbG9iYWxFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIGJvb2wgZ2xvYmFsLCBjb25zdCBjaGFyKiB0b2tlbik7Ci0gICAgYm9vbCBjb25zdHJ1Y3Rv
ckVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVEludGVybU5vZGUqLCBURnVuY3Rp
b24mLCBUT3BlcmF0b3IsIFRUeXBlKik7Ci0gICAgYm9vbCBhcnJheVNpemVFcnJvckNoZWNrKGNv
bnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRJbnRlcm1UeXBlZCogZXhwciwgaW50JiBzaXplKTsKLSAg
ICBib29sIGFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBU
UHVibGljVHlwZSB0eXBlKTsKLSAgICBib29sIGFycmF5VHlwZUVycm9yQ2hlY2soY29uc3QgVFNv
dXJjZUxvYyYgbGluZSwgVFB1YmxpY1R5cGUgdHlwZSk7Ci0gICAgYm9vbCBhcnJheUVycm9yQ2hl
Y2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5
cGUgdHlwZSwgVFZhcmlhYmxlKiYgdmFyaWFibGUpOwotICAgIGJvb2wgdm9pZEVycm9yQ2hlY2so
Y29uc3QgVFNvdXJjZUxvYyYsIGNvbnN0IFRTdHJpbmcmLCBjb25zdCBUUHVibGljVHlwZSYpOwot
ICAgIGJvb2wgYm9vbEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYsIGNvbnN0IFRJbnRlcm1U
eXBlZCopOwotICAgIGJvb2wgYm9vbEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYsIGNvbnN0
IFRQdWJsaWNUeXBlJik7Ci0gICAgYm9vbCBzYW1wbGVyRXJyb3JDaGVjayhjb25zdCBUU291cmNl
TG9jJiBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUsIGNvbnN0IGNoYXIqIHJlYXNvbik7
Ci0gICAgYm9vbCBzdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZSk7Ci0gICAgYm9vbCBwYXJhbWV0ZXJTYW1wbGVy
RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUXVhbGlmaWVyIHF1YWxpZmllciwg
Y29uc3QgVFR5cGUmIHR5cGUpOwotICAgIGJvb2wgbm9uSW5pdENvbnN0RXJyb3JDaGVjayhjb25z
dCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlw
ZSwgYm9vbCBhcnJheSk7Ci0gICAgYm9vbCBub25Jbml0RXJyb3JDaGVjayhjb25zdCBUU291cmNl
TG9jJiBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSwgVFZhcmlh
YmxlKiYgdmFyaWFibGUpOwotICAgIGJvb2wgcGFyYW1FcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VM
b2MmIGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVyIHBhcmFtUXVhbGlmaWVy
LCBUVHlwZSogdHlwZSk7Ci0gICAgYm9vbCBleHRlbnNpb25FcnJvckNoZWNrKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmKTsKLQotICAgIGNvbnN0IFRQcmFnbWEmIHByYWdt
YSgpIGNvbnN0IHsgcmV0dXJuIGRpcmVjdGl2ZUhhbmRsZXIucHJhZ21hKCk7IH0KLSAgICBjb25z
dCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dGVuc2lvbkJlaGF2aW9yKCkgY29uc3QgeyByZXR1cm4g
ZGlyZWN0aXZlSGFuZGxlci5leHRlbnNpb25CZWhhdmlvcigpOyB9Ci0gICAgYm9vbCBzdXBwb3J0
c0V4dGVuc2lvbihjb25zdCBjaGFyKiBleHRlbnNpb24pOwotICAgIGJvb2wgaXNFeHRlbnNpb25F
bmFibGVkKGNvbnN0IGNoYXIqIGV4dGVuc2lvbikgY29uc3Q7Ci0KLSAgICBib29sIGNvbnRhaW5z
U2FtcGxlcihUVHlwZSYgdHlwZSk7Ci0gICAgYm9vbCBhcmVBbGxDaGlsZENvbnN0KFRJbnRlcm1B
Z2dyZWdhdGUqIGFnZ3JOb2RlKTsKLSAgICBjb25zdCBURnVuY3Rpb24qIGZpbmRGdW5jdGlvbihj
b25zdCBUU291cmNlTG9jJiBsaW5lLCBURnVuY3Rpb24qIHBmbkNhbGwsIGJvb2wgKmJ1aWx0SW4g
PSAwKTsKLSAgICBib29sIGV4ZWN1dGVJbml0aWFsaXplcihjb25zdCBUU291cmNlTG9jJiBsaW5l
LCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgcFR5cGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbml0aWFsaXplciwgVEludGVybU5vZGUqJiBp
bnRlcm1Ob2RlLCBUVmFyaWFibGUqIHZhcmlhYmxlID0gMCk7Ci0KLSAgICBUSW50ZXJtVHlwZWQq
IGFkZENvbnN0cnVjdG9yKFRJbnRlcm1Ob2RlKiwgY29uc3QgVFR5cGUqLCBUT3BlcmF0b3IsIFRG
dW5jdGlvbiosIGNvbnN0IFRTb3VyY2VMb2MmKTsKLSAgICBUSW50ZXJtVHlwZWQqIGZvbGRDb25z
dENvbnN0cnVjdG9yKFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlLCBjb25zdCBUVHlwZSYgdHlw
ZSk7Ci0gICAgVEludGVybVR5cGVkKiBjb25zdHJ1Y3RTdHJ1Y3QoVEludGVybU5vZGUqLCBUVHlw
ZSosIGludCwgY29uc3QgVFNvdXJjZUxvYyYsIGJvb2wgc3Vic2V0KTsKLSAgICBUSW50ZXJtVHlw
ZWQqIGNvbnN0cnVjdEJ1aWx0SW4oY29uc3QgVFR5cGUqLCBUT3BlcmF0b3IsIFRJbnRlcm1Ob2Rl
KiwgY29uc3QgVFNvdXJjZUxvYyYsIGJvb2wgc3Vic2V0KTsKLSAgICBUSW50ZXJtVHlwZWQqIGFk
ZENvbnN0VmVjdG9yTm9kZShUVmVjdG9yRmllbGRzJiwgVEludGVybVR5cGVkKiwgY29uc3QgVFNv
dXJjZUxvYyYpOwotICAgIFRJbnRlcm1UeXBlZCogYWRkQ29uc3RNYXRyaXhOb2RlKGludCAsIFRJ
bnRlcm1UeXBlZCosIGNvbnN0IFRTb3VyY2VMb2MmKTsKLSAgICBUSW50ZXJtVHlwZWQqIGFkZENv
bnN0QXJyYXlOb2RlKGludCBpbmRleCwgVEludGVybVR5cGVkKiBub2RlLCBjb25zdCBUU291cmNl
TG9jJiBsaW5lKTsKLSAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0U3RydWN0KFRTdHJpbmcmICwg
VEludGVybVR5cGVkKiwgY29uc3QgVFNvdXJjZUxvYyYpOwotICAgIFRJbnRlcm1UeXBlZCogYWRk
SW5kZXhFeHByZXNzaW9uKFRJbnRlcm1UeXBlZCAqYmFzZUV4cHJlc3Npb24sIGNvbnN0IFRTb3Vy
Y2VMb2MmIGxvY2F0aW9uLCBUSW50ZXJtVHlwZWQgKmluZGV4RXhwcmVzc2lvbik7Ci0KLSAgICAv
LyBQZXJmb3JtcyBhbiBlcnJvciBjaGVjayBmb3IgZW1iZWRkZWQgc3RydWN0IGRlY2xhcmF0aW9u
cy4KLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgYW4gZXJyb3Igd2FzIHJhaXNlZCBkdWUgdG8gdGhl
IGRlY2xhcmF0aW9uIG9mCi0gICAgLy8gdGhpcyBzdHJ1Y3QuCi0gICAgYm9vbCBlbnRlclN0cnVj
dERlY2xhcmF0aW9uKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50
aWZpZXIpOwotICAgIHZvaWQgZXhpdFN0cnVjdERlY2xhcmF0aW9uKCk7Ci0KLSAgICBib29sIHN0
cnVjdE5lc3RpbmdFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRGaWVs
ZCYgZmllbGQpOwotfTsKLQotaW50IFBhUGFyc2VTdHJpbmdzKHNpemVfdCBjb3VudCwgY29uc3Qg
Y2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKLSAgICAgICAgICAgICAg
ICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKLQotI2VuZGlmIC8vIF9QQVJTRVJfSEVMUEVS
X0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1Bvb2xBbGxvYy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
UG9vbEFsbG9jLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI5OTM1NjdiMzUz
NWUxMjEyNDY4OTVlOThmYThmNGM0MTAwZGZjOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
UG9vbEFsbG9jLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI5NCArMCwwIEBACi0vLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvUG9vbEFsbG9jLmgiCi0KLSNpZm5kZWYgX01T
Q19WRVIKLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0K
LSNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL0luaXRp
YWxpemVHbG9iYWxzLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvb3NpbmNsdWRlLmgiCi0KLU9TX1RM
U0luZGV4IFBvb2xJbmRleCA9IE9TX0lOVkFMSURfVExTX0lOREVYOwotCi1ib29sIEluaXRpYWxp
emVQb29sSW5kZXgoKQotewotICAgIGFzc2VydChQb29sSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNf
SU5ERVgpOwotCi0gICAgUG9vbEluZGV4ID0gT1NfQWxsb2NUTFNJbmRleCgpOwotICAgIHJldHVy
biBQb29sSW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7Ci19Ci0KLXZvaWQgRnJlZVBvb2xJ
bmRleCgpCi17Ci0gICAgYXNzZXJ0KFBvb2xJbmRleCAhPSBPU19JTlZBTElEX1RMU19JTkRFWCk7
Ci0KLSAgICBPU19GcmVlVExTSW5kZXgoUG9vbEluZGV4KTsKLSAgICBQb29sSW5kZXggPSBPU19J
TlZBTElEX1RMU19JTkRFWDsKLX0KLQotVFBvb2xBbGxvY2F0b3IqIEdldEdsb2JhbFBvb2xBbGxv
Y2F0b3IoKQotewotICAgIGFzc2VydChQb29sSW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgp
OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUUG9vbEFsbG9jYXRvcio+KE9TX0dldFRMU1ZhbHVl
KFBvb2xJbmRleCkpOwotfQotCi12b2lkIFNldEdsb2JhbFBvb2xBbGxvY2F0b3IoVFBvb2xBbGxv
Y2F0b3IqIHBvb2xBbGxvY2F0b3IpCi17Ci0gICAgYXNzZXJ0KFBvb2xJbmRleCAhPSBPU19JTlZB
TElEX1RMU19JTkRFWCk7Ci0gICAgT1NfU2V0VExTVmFsdWUoUG9vbEluZGV4LCBwb29sQWxsb2Nh
dG9yKTsKLX0KLQotLy8KLS8vIEltcGxlbWVudCB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgVFBv
b2xBbGxvY2F0b3IgY2xhc3MsIHdoaWNoCi0vLyBpcyBkb2N1bWVudGVkIGluIFBvb2xBbGxvYy5o
LgotLy8KLVRQb29sQWxsb2NhdG9yOjpUUG9vbEFsbG9jYXRvcihpbnQgZ3Jvd3RoSW5jcmVtZW50
LCBpbnQgYWxsb2NhdGlvbkFsaWdubWVudCkgOiAKLSAgICBwYWdlU2l6ZShncm93dGhJbmNyZW1l
bnQpLAotICAgIGFsaWdubWVudChhbGxvY2F0aW9uQWxpZ25tZW50KSwKLSAgICBmcmVlTGlzdCgw
KSwKLSAgICBpblVzZUxpc3QoMCksCi0gICAgbnVtQ2FsbHMoMCksCi0gICAgdG90YWxCeXRlcygw
KQotewotICAgIC8vCi0gICAgLy8gRG9uJ3QgYWxsb3cgcGFnZSBzaXplcyB3ZSBrbm93IGFyZSBz
bWFsbGVyIHRoYW4gYWxsIGNvbW1vbgotICAgIC8vIE9TIHBhZ2Ugc2l6ZXMuCi0gICAgLy8KLSAg
ICBpZiAocGFnZVNpemUgPCA0KjEwMjQpCi0gICAgICAgIHBhZ2VTaXplID0gNCoxMDI0OwotCi0g
ICAgLy8KLSAgICAvLyBBIGxhcmdlIGN1cnJlbnRQYWdlT2Zmc2V0IGluZGljYXRlcyBhIG5ldyBw
YWdlIG5lZWRzIHRvCi0gICAgLy8gYmUgb2J0YWluZWQgdG8gYWxsb2NhdGUgbWVtb3J5LgotICAg
IC8vCi0gICAgY3VycmVudFBhZ2VPZmZzZXQgPSBwYWdlU2l6ZTsKLQotICAgIC8vCi0gICAgLy8g
QWRqdXN0IGFsaWdubWVudCB0byBiZSBhdCBsZWFzdCBwb2ludGVyIGFsaWduZWQgYW5kCi0gICAg
Ly8gcG93ZXIgb2YgMi4KLSAgICAvLwotICAgIHNpemVfdCBtaW5BbGlnbiA9IHNpemVvZih2b2lk
Kik7Ci0gICAgYWxpZ25tZW50ICY9IH4obWluQWxpZ24gLSAxKTsKLSAgICBpZiAoYWxpZ25tZW50
IDwgbWluQWxpZ24pCi0gICAgICAgIGFsaWdubWVudCA9IG1pbkFsaWduOwotICAgIHNpemVfdCBh
ID0gMTsKLSAgICB3aGlsZSAoYSA8IGFsaWdubWVudCkKLSAgICAgICAgYSA8PD0gMTsKLSAgICBh
bGlnbm1lbnQgPSBhOwotICAgIGFsaWdubWVudE1hc2sgPSBhIC0gMTsKLQotICAgIC8vCi0gICAg
Ly8gQWxpZ24gaGVhZGVyIHNraXAKLSAgICAvLwotICAgIGhlYWRlclNraXAgPSBtaW5BbGlnbjsK
LSAgICBpZiAoaGVhZGVyU2tpcCA8IHNpemVvZih0SGVhZGVyKSkgewotICAgICAgICBoZWFkZXJT
a2lwID0gKHNpemVvZih0SGVhZGVyKSArIGFsaWdubWVudE1hc2spICYgfmFsaWdubWVudE1hc2s7
Ci0gICAgfQotfQotCi1UUG9vbEFsbG9jYXRvcjo6flRQb29sQWxsb2NhdG9yKCkKLXsKLSAgICB3
aGlsZSAoaW5Vc2VMaXN0KSB7Ci0gICAgICAgIHRIZWFkZXIqIG5leHQgPSBpblVzZUxpc3QtPm5l
eHRQYWdlOwotICAgICAgICBpblVzZUxpc3QtPn50SGVhZGVyKCk7Ci0gICAgICAgIGRlbGV0ZSBb
XSByZWludGVycHJldF9jYXN0PGNoYXIqPihpblVzZUxpc3QpOwotICAgICAgICBpblVzZUxpc3Qg
PSBuZXh0OwotICAgIH0KLQotICAgIC8vIFdlIHNob3VsZCBub3QgY2hlY2sgdGhlIGd1YXJkIGJs
b2NrcwotICAgIC8vIGhlcmUsIGJlY2F1c2Ugd2UgZGlkIGl0IGFscmVhZHkgd2hlbiB0aGUgYmxv
Y2sgd2FzCi0gICAgLy8gcGxhY2VkIGludG8gdGhlIGZyZWUgbGlzdC4KLSAgICAvLwotICAgIHdo
aWxlIChmcmVlTGlzdCkgewotICAgICAgICB0SGVhZGVyKiBuZXh0ID0gZnJlZUxpc3QtPm5leHRQ
YWdlOwotICAgICAgICBkZWxldGUgW10gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZnJlZUxpc3Qp
OwotICAgICAgICBmcmVlTGlzdCA9IG5leHQ7Ci0gICAgfQotfQotCi0vLyBTdXBwb3J0IE1TVkMr
KyA2LjAKLWNvbnN0IHVuc2lnbmVkIGNoYXIgVEFsbG9jYXRpb246Omd1YXJkQmxvY2tCZWdpblZh
bCA9IDB4ZmI7Ci1jb25zdCB1bnNpZ25lZCBjaGFyIFRBbGxvY2F0aW9uOjpndWFyZEJsb2NrRW5k
VmFsICAgPSAweGZlOwotY29uc3QgdW5zaWduZWQgY2hhciBUQWxsb2NhdGlvbjo6dXNlckRhdGFG
aWxsICAgICAgID0gMHhjZDsKLQotI2lmZGVmIEdVQVJEX0JMT0NLUwotICAgIGNvbnN0IHNpemVf
dCBUQWxsb2NhdGlvbjo6Z3VhcmRCbG9ja1NpemUgPSAxNjsKLSNlbHNlCi0gICAgY29uc3Qgc2l6
ZV90IFRBbGxvY2F0aW9uOjpndWFyZEJsb2NrU2l6ZSA9IDA7Ci0jZW5kaWYKLQotLy8KLS8vIENo
ZWNrIGEgc2luZ2xlIGd1YXJkIGJsb2NrIGZvciBkYW1hZ2UKLS8vCi12b2lkIFRBbGxvY2F0aW9u
OjpjaGVja0d1YXJkQmxvY2sodW5zaWduZWQgY2hhciogYmxvY2tNZW0sIHVuc2lnbmVkIGNoYXIg
dmFsLCBjb25zdCBjaGFyKiBsb2NUZXh0KSBjb25zdAotewotI2lmZGVmIEdVQVJEX0JMT0NLUwot
ICAgIGZvciAoc2l6ZV90IHggPSAwOyB4IDwgZ3VhcmRCbG9ja1NpemU7IHgrKykgewotICAgICAg
ICBpZiAoYmxvY2tNZW1beF0gIT0gdmFsKSB7Ci0gICAgICAgICAgICBjaGFyIGFzc2VydE1zZ1s4
MF07Ci0KLSAgICAgICAgICAgIC8vIFdlIGRvbid0IHByaW50IHRoZSBhc3NlcnQgbWVzc2FnZS4g
IEl0J3MgaGVyZSBqdXN0IHRvIGJlIGhlbHBmdWwuCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikKLSAg
ICAgICAgICAgIHNucHJpbnRmKGFzc2VydE1zZywgc2l6ZW9mKGFzc2VydE1zZyksICJQb29sQWxs
b2M6IERhbWFnZSAlcyAlSXUgYnl0ZSBhbGxvY2F0aW9uIGF0IDB4JXBcbiIsCi0gICAgICAgICAg
ICAgICAgICAgIGxvY1RleHQsIHNpemUsIGRhdGEoKSk7Ci0jZWxzZQotICAgICAgICAgICAgc25w
cmludGYoYXNzZXJ0TXNnLCBzaXplb2YoYXNzZXJ0TXNnKSwgIlBvb2xBbGxvYzogRGFtYWdlICVz
ICV6dSBieXRlIGFsbG9jYXRpb24gYXQgMHglcFxuIiwKLSAgICAgICAgICAgICAgICAgICAgbG9j
VGV4dCwgc2l6ZSwgZGF0YSgpKTsKLSNlbmRpZgotICAgICAgICAgICAgYXNzZXJ0KDAgJiYgIlBv
b2xBbGxvYzogRGFtYWdlIGluIGd1YXJkIGJsb2NrIik7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5k
aWYKLX0KLQotCi12b2lkIFRQb29sQWxsb2NhdG9yOjpwdXNoKCkKLXsKLSAgICB0QWxsb2NTdGF0
ZSBzdGF0ZSA9IHsgY3VycmVudFBhZ2VPZmZzZXQsIGluVXNlTGlzdCB9OwotCi0gICAgc3RhY2su
cHVzaF9iYWNrKHN0YXRlKTsKLSAgICAgICAgCi0gICAgLy8KLSAgICAvLyBJbmRpY2F0ZSB0aGVy
ZSBpcyBubyBjdXJyZW50IHBhZ2UgdG8gYWxsb2NhdGUgZnJvbS4KLSAgICAvLwotICAgIGN1cnJl
bnRQYWdlT2Zmc2V0ID0gcGFnZVNpemU7Ci19Ci0KLS8vCi0vLyBEbyBhIG1hc3MtZGVhbGxvY2F0
aW9uIG9mIGFsbCB0aGUgaW5kaXZpZHVhbCBhbGxvY2F0aW9ucwotLy8gdGhhdCBoYXZlIG9jY3Vy
cmVkIHNpbmNlIHRoZSBsYXN0IHB1c2goKSwgb3Igc2luY2UgdGhlCi0vLyBsYXN0IHBvcCgpLCBv
ciBzaW5jZSB0aGUgb2JqZWN0J3MgY3JlYXRpb24uCi0vLwotLy8gVGhlIGRlYWxsb2NhdGVkIHBh
Z2VzIGFyZSBzYXZlZCBmb3IgZnV0dXJlIGFsbG9jYXRpb25zLgotLy8KLXZvaWQgVFBvb2xBbGxv
Y2F0b3I6OnBvcCgpCi17Ci0gICAgaWYgKHN0YWNrLnNpemUoKSA8IDEpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHRIZWFkZXIqIHBhZ2UgPSBzdGFjay5iYWNrKCkucGFnZTsKLSAgICBjdXJyZW50
UGFnZU9mZnNldCA9IHN0YWNrLmJhY2soKS5vZmZzZXQ7Ci0KLSAgICB3aGlsZSAoaW5Vc2VMaXN0
ICE9IHBhZ2UpIHsKLSAgICAgICAgLy8gaW52b2tlIGRlc3RydWN0b3IgdG8gZnJlZSBhbGxvY2F0
aW9uIGxpc3QKLSAgICAgICAgaW5Vc2VMaXN0LT5+dEhlYWRlcigpOwotICAgICAgICAKLSAgICAg
ICAgdEhlYWRlciogbmV4dEluVXNlID0gaW5Vc2VMaXN0LT5uZXh0UGFnZTsKLSAgICAgICAgaWYg
KGluVXNlTGlzdC0+cGFnZUNvdW50ID4gMSkKLSAgICAgICAgICAgIGRlbGV0ZSBbXSByZWludGVy
cHJldF9jYXN0PGNoYXIqPihpblVzZUxpc3QpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IGluVXNlTGlzdC0+bmV4dFBhZ2UgPSBmcmVlTGlzdDsKLSAgICAgICAgICAgIGZyZWVMaXN0ID0g
aW5Vc2VMaXN0OwotICAgICAgICB9Ci0gICAgICAgIGluVXNlTGlzdCA9IG5leHRJblVzZTsKLSAg
ICB9Ci0KLSAgICBzdGFjay5wb3BfYmFjaygpOwotfQotCi0vLwotLy8gRG8gYSBtYXNzLWRlYWxs
b2NhdGlvbiBvZiBhbGwgdGhlIGluZGl2aWR1YWwgYWxsb2NhdGlvbnMKLS8vIHRoYXQgaGF2ZSBv
Y2N1cnJlZC4KLS8vCi12b2lkIFRQb29sQWxsb2NhdG9yOjpwb3BBbGwoKQotewotICAgIHdoaWxl
IChzdGFjay5zaXplKCkgPiAwKQotICAgICAgICBwb3AoKTsKLX0KLQotdm9pZCogVFBvb2xBbGxv
Y2F0b3I6OmFsbG9jYXRlKHNpemVfdCBudW1CeXRlcykKLXsKLSAgICAvLwotICAgIC8vIEp1c3Qg
a2VlcCBzb21lIGludGVyZXN0aW5nIHN0YXRpc3RpY3MuCi0gICAgLy8KLSAgICArK251bUNhbGxz
OwotICAgIHRvdGFsQnl0ZXMgKz0gbnVtQnl0ZXM7Ci0KLSAgICAvLyBJZiB3ZSBhcmUgdXNpbmcg
Z3VhcmQgYmxvY2tzLCBhbGwgYWxsb2NhdGlvbnMgYXJlIGJyYWNrZXRlZCBieQotICAgIC8vIHRo
ZW06IFtndWFyZGJsb2NrXVthbGxvY2F0aW9uXVtndWFyZGJsb2NrXS4gIG51bUJ5dGVzIGlzIGhv
dwotICAgIC8vIG11Y2ggbWVtb3J5IHRoZSBjYWxsZXIgYXNrZWQgZm9yLiAgYWxsb2NhdGlvblNp
emUgaXMgdGhlIHRvdGFsCi0gICAgLy8gc2l6ZSBpbmNsdWRpbmcgZ3VhcmQgYmxvY2tzLiAgSW4g
cmVsZWFzZSBidWlsZCwKLSAgICAvLyBndWFyZEJsb2NrU2l6ZT0wIGFuZCB0aGlzIGFsbCBnZXRz
IG9wdGltaXplZCBhd2F5LgotICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IFRBbGxvY2F0aW9u
OjphbGxvY2F0aW9uU2l6ZShudW1CeXRlcyk7Ci0gICAgLy8gRGV0ZWN0IGludGVnZXIgb3ZlcmZs
b3cuCi0gICAgaWYgKGFsbG9jYXRpb25TaXplIDwgbnVtQnl0ZXMpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgLy8KLSAgICAvLyBEbyB0aGUgYWxsb2NhdGlvbiwgbW9zdCBsaWtlbHkgY2FzZSBm
aXJzdCwgZm9yIGVmZmljaWVuY3kuCi0gICAgLy8gVGhpcyBzdGVwIGNvdWxkIGJlIG1vdmVkIHRv
IGJlIGlubGluZSBzb21ldGltZS4KLSAgICAvLwotICAgIGlmIChhbGxvY2F0aW9uU2l6ZSA8PSBw
YWdlU2l6ZSAtIGN1cnJlbnRQYWdlT2Zmc2V0KSB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIFNh
ZmUgdG8gYWxsb2NhdGUgZnJvbSBjdXJyZW50UGFnZU9mZnNldC4KLSAgICAgICAgLy8KLSAgICAg
ICAgdW5zaWduZWQgY2hhciogbWVtb3J5ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFy
ICo+KGluVXNlTGlzdCkgKyBjdXJyZW50UGFnZU9mZnNldDsKLSAgICAgICAgY3VycmVudFBhZ2VP
ZmZzZXQgKz0gYWxsb2NhdGlvblNpemU7Ci0gICAgICAgIGN1cnJlbnRQYWdlT2Zmc2V0ID0gKGN1
cnJlbnRQYWdlT2Zmc2V0ICsgYWxpZ25tZW50TWFzaykgJiB+YWxpZ25tZW50TWFzazsKLQotICAg
ICAgICByZXR1cm4gaW5pdGlhbGl6ZUFsbG9jYXRpb24oaW5Vc2VMaXN0LCBtZW1vcnksIG51bUJ5
dGVzKTsKLSAgICB9Ci0KLSAgICBpZiAoYWxsb2NhdGlvblNpemUgPiBwYWdlU2l6ZSAtIGhlYWRl
clNraXApIHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gRG8gYSBtdWx0aS1wYWdlIGFsbG9jYXRp
b24uICBEb24ndCBtaXggdGhlc2Ugd2l0aCB0aGUgb3RoZXJzLgotICAgICAgICAvLyBUaGUgT1Mg
aXMgZWZmaWNpZW50IGFuZCBhbGxvY2F0aW5nIGFuZCBmcmVlLWluZyBtdWx0aXBsZSBwYWdlcy4K
LSAgICAgICAgLy8KLSAgICAgICAgc2l6ZV90IG51bUJ5dGVzVG9BbGxvYyA9IGFsbG9jYXRpb25T
aXplICsgaGVhZGVyU2tpcDsKLSAgICAgICAgLy8gRGV0ZWN0IGludGVnZXIgb3ZlcmZsb3cuCi0g
ICAgICAgIGlmIChudW1CeXRlc1RvQWxsb2MgPCBhbGxvY2F0aW9uU2l6ZSkKLSAgICAgICAgICAg
IHJldHVybiAwOwotCi0gICAgICAgIHRIZWFkZXIqIG1lbW9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dEhlYWRlcio+KDo6bmV3IGNoYXJbbnVtQnl0ZXNUb0FsbG9jXSk7Ci0gICAgICAgIGlmIChtZW1v
cnkgPT0gMCkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIC8vIFVzZSBwbGFjZW1l
bnQtbmV3IHRvIGluaXRpYWxpemUgaGVhZGVyCi0gICAgICAgIG5ldyhtZW1vcnkpIHRIZWFkZXIo
aW5Vc2VMaXN0LCAobnVtQnl0ZXNUb0FsbG9jICsgcGFnZVNpemUgLSAxKSAvIHBhZ2VTaXplKTsK
LSAgICAgICAgaW5Vc2VMaXN0ID0gbWVtb3J5OwotCi0gICAgICAgIGN1cnJlbnRQYWdlT2Zmc2V0
ID0gcGFnZVNpemU7ICAvLyBtYWtlIG5leHQgYWxsb2NhdGlvbiBjb21lIGZyb20gYSBuZXcgcGFn
ZQotCi0gICAgICAgIC8vIE5vIGd1YXJkIGJsb2NrcyBmb3IgbXVsdGktcGFnZSBhbGxvY2F0aW9u
cyAoeWV0KQotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KG1lbW9yeSkgKyBoZWFkZXJTa2lwKTsKLSAgICB9Ci0KLSAgICAv
LwotICAgIC8vIE5lZWQgYSBzaW1wbGUgcGFnZSB0byBhbGxvY2F0ZSBmcm9tLgotICAgIC8vCi0g
ICAgdEhlYWRlciogbWVtb3J5OwotICAgIGlmIChmcmVlTGlzdCkgewotICAgICAgICBtZW1vcnkg
PSBmcmVlTGlzdDsKLSAgICAgICAgZnJlZUxpc3QgPSBmcmVlTGlzdC0+bmV4dFBhZ2U7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgbWVtb3J5ID0gcmVpbnRlcnByZXRfY2FzdDx0SGVhZGVyKj4oOjpu
ZXcgY2hhcltwYWdlU2l6ZV0pOwotICAgICAgICBpZiAobWVtb3J5ID09IDApCi0gICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBVc2UgcGxhY2VtZW50LW5ldyB0byBpbml0aWFs
aXplIGhlYWRlcgotICAgIG5ldyhtZW1vcnkpIHRIZWFkZXIoaW5Vc2VMaXN0LCAxKTsKLSAgICBp
blVzZUxpc3QgPSBtZW1vcnk7Ci0gICAgCi0gICAgdW5zaWduZWQgY2hhciogcmV0ID0gcmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyICo+KGluVXNlTGlzdCkgKyBoZWFkZXJTa2lwOwotICAg
IGN1cnJlbnRQYWdlT2Zmc2V0ID0gKGhlYWRlclNraXAgKyBhbGxvY2F0aW9uU2l6ZSArIGFsaWdu
bWVudE1hc2spICYgfmFsaWdubWVudE1hc2s7Ci0KLSAgICByZXR1cm4gaW5pdGlhbGl6ZUFsbG9j
YXRpb24oaW5Vc2VMaXN0LCByZXQsIG51bUJ5dGVzKTsKLX0KLQotCi0vLwotLy8gQ2hlY2sgYWxs
IGFsbG9jYXRpb25zIGluIGEgbGlzdCBmb3IgZGFtYWdlIGJ5IGNhbGxpbmcgY2hlY2sgb24gZWFj
aC4KLS8vCi12b2lkIFRBbGxvY2F0aW9uOjpjaGVja0FsbG9jTGlzdCgpIGNvbnN0Ci17Ci0gICAg
Zm9yIChjb25zdCBUQWxsb2NhdGlvbiogYWxsb2MgPSB0aGlzOyBhbGxvYyAhPSAwOyBhbGxvYyA9
IGFsbG9jLT5wcmV2QWxsb2MpCi0gICAgICAgIGFsbG9jLT5jaGVjaygpOwotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBlZGQyNDljNGQzYTM5YmIyMDFjMzg1NTQyMzk5MDgwOGY1NWYw
N2U1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuaAorKysgL2Rldi9udWxs
CkBAIC0xLDMwMCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIF9QT09MQUxM
T0NfSU5DTFVERURfCi0jZGVmaW5lIF9QT09MQUxMT0NfSU5DTFVERURfCi0KLSNpZmRlZiBfREVC
VUcKLSNkZWZpbmUgR1VBUkRfQkxPQ0tTICAvLyBkZWZpbmUgdG8gZW5hYmxlIGd1YXJkIGJsb2Nr
IHNhbml0eSBjaGVja2luZwotI2VuZGlmCi0KLS8vCi0vLyBUaGlzIGhlYWRlciBkZWZpbmVzIGFu
IGFsbG9jYXRvciB0aGF0IGNhbiBiZSB1c2VkIHRvIGVmZmljaWVudGx5Ci0vLyBhbGxvY2F0ZSBh
IGxhcmdlIG51bWJlciBvZiBzbWFsbCByZXF1ZXN0cyBmb3IgaGVhcCBtZW1vcnksIHdpdGggdGhl
IAotLy8gaW50ZW50aW9uIHRoYXQgdGhleSBhcmUgbm90IGluZGl2aWR1YWxseSBkZWFsbG9jYXRl
ZCwgYnV0IHJhdGhlciAKLS8vIGNvbGxlY3RpdmVseSBkZWFsbG9jYXRlZCBhdCBvbmUgdGltZS4K
LS8vCi0vLyBUaGlzIHNpbXVsdGFuZW91c2x5Ci0vLwotLy8gKiBNYWtlcyBlYWNoIGluZGl2aWR1
YWwgYWxsb2NhdGlvbiBtdWNoIG1vcmUgZWZmaWNpZW50OyB0aGUKLS8vICAgICB0eXBpY2FsIGFs
bG9jYXRpb24gaXMgdHJpdmlhbC4KLS8vICogQ29tcGxldGVseSBhdm9pZHMgdGhlIGNvc3Qgb2Yg
ZG9pbmcgaW5kaXZpZHVhbCBkZWFsbG9jYXRpb24uCi0vLyAqIFNhdmVzIHRoZSB0cm91YmxlIG9m
IHRyYWNraW5nIGRvd24gYW5kIHBsdWdnaW5nIGEgbGFyZ2UgY2xhc3Mgb2YgbGVha3MuCi0vLwot
Ly8gSW5kaXZpZHVhbCBjbGFzc2VzIGNhbiB1c2UgdGhpcyBhbGxvY2F0b3IgYnkgc3VwcGx5aW5n
IHRoZWlyIG93bgotLy8gbmV3IGFuZCBkZWxldGUgbWV0aG9kcy4KLS8vCi0vLyBTVEwgY29udGFp
bmVycyBjYW4gdXNlIHRoaXMgYWxsb2NhdG9yIGJ5IHVzaW5nIHRoZSBwb29sX2FsbG9jYXRvcgot
Ly8gY2xhc3MgYXMgdGhlIGFsbG9jYXRvciAoc2Vjb25kKSB0ZW1wbGF0ZSBhcmd1bWVudC4KLS8v
Ci0KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx2
ZWN0b3I+Ci0KLS8vIElmIHdlIGFyZSB1c2luZyBndWFyZCBibG9ja3MsIHdlIG11c3QgdHJhY2sg
ZWFjaCBpbmRpdnVhbAotLy8gYWxsb2NhdGlvbi4gIElmIHdlIGFyZW4ndCB1c2luZyBndWFyZCBi
bG9ja3MsIHRoZXNlCi0vLyBuZXZlciBnZXQgaW5zdGFudGlhdGVkLCBzbyB3b24ndCBoYXZlIGFu
eSBpbXBhY3QuCi0vLyAKLQotY2xhc3MgVEFsbG9jYXRpb24gewotcHVibGljOgotICAgIFRBbGxv
Y2F0aW9uKHNpemVfdCBzaXplLCB1bnNpZ25lZCBjaGFyKiBtZW0sIFRBbGxvY2F0aW9uKiBwcmV2
ID0gMCkgOgotICAgICAgICBzaXplKHNpemUpLCBtZW0obWVtKSwgcHJldkFsbG9jKHByZXYpIHsK
LSAgICAgICAgLy8gQWxsb2NhdGlvbnMgYXJlIGJyYWNrZXRlZDoKLSAgICAgICAgLy8gICAgW2Fs
bG9jYXRpb25IZWFkZXJdW2luaXRpYWxHdWFyZEJsb2NrXVt1c2VyRGF0YV1bZmluYWxHdWFyZEJs
b2NrXQotICAgICAgICAvLyBUaGlzIHdvdWxkIGJlIGNsZWFuZXIgd2l0aCBpZiAoZ3VhcmRCbG9j
a1NpemUpLi4uLCBidXQgdGhhdAotICAgICAgICAvLyBtYWtlcyB0aGUgY29tcGlsZXIgcHJpbnQg
d2FybmluZ3MgYWJvdXQgMCBsZW5ndGggbWVtc2V0cywKLSAgICAgICAgLy8gZXZlbiB3aXRoIHRo
ZSBpZigpIHByb3RlY3RpbmcgdGhlbS4KLSNpZmRlZiBHVUFSRF9CTE9DS1MKLSAgICAgICAgbWVt
c2V0KHByZUd1YXJkKCksIGd1YXJkQmxvY2tCZWdpblZhbCwgZ3VhcmRCbG9ja1NpemUpOwotICAg
ICAgICBtZW1zZXQoZGF0YSgpLCAgICAgIHVzZXJEYXRhRmlsbCwgICAgICAgc2l6ZSk7Ci0gICAg
ICAgIG1lbXNldChwb3N0R3VhcmQoKSwgZ3VhcmRCbG9ja0VuZFZhbCwgICBndWFyZEJsb2NrU2l6
ZSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICB2b2lkIGNoZWNrKCkgY29uc3QgewotICAgICAgICBj
aGVja0d1YXJkQmxvY2socHJlR3VhcmQoKSwgIGd1YXJkQmxvY2tCZWdpblZhbCwgImJlZm9yZSIp
OwotICAgICAgICBjaGVja0d1YXJkQmxvY2socG9zdEd1YXJkKCksIGd1YXJkQmxvY2tFbmRWYWws
ICAgImFmdGVyIik7Ci0gICAgfQotCi0gICAgdm9pZCBjaGVja0FsbG9jTGlzdCgpIGNvbnN0Owot
Ci0gICAgLy8gUmV0dXJuIHRvdGFsIHNpemUgbmVlZGVkIHRvIGFjY29tb2RhdGUgdXNlciBidWZm
ZXIgb2YgJ3NpemUnLAotICAgIC8vIHBsdXMgb3VyIHRyYWNraW5nIGRhdGEuCi0gICAgaW5saW5l
IHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUoc2l6ZV90IHNpemUpIHsKLSAgICAgICAgcmV0
dXJuIHNpemUgKyAyICogZ3VhcmRCbG9ja1NpemUgKyBoZWFkZXJTaXplKCk7Ci0gICAgfQotCi0g
ICAgLy8gT2Zmc2V0IGZyb20gc3Vycm91bmRpbmcgYnVmZmVyIHRvIGdldCB0byB1c2VyIGRhdGEg
YnVmZmVyLgotICAgIGlubGluZSBzdGF0aWMgdW5zaWduZWQgY2hhciogb2Zmc2V0QWxsb2NhdGlv
bih1bnNpZ25lZCBjaGFyKiBtKSB7Ci0gICAgICAgIHJldHVybiBtICsgZ3VhcmRCbG9ja1NpemUg
KyBoZWFkZXJTaXplKCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHZvaWQgY2hlY2tHdWFyZEJs
b2NrKHVuc2lnbmVkIGNoYXIqIGJsb2NrTWVtLCB1bnNpZ25lZCBjaGFyIHZhbCwgY29uc3QgY2hh
ciogbG9jVGV4dCkgY29uc3Q7Ci0KLSAgICAvLyBGaW5kIG9mZnNldHMgdG8gcHJlIGFuZCBwb3N0
IGd1YXJkIGJsb2NrcywgYW5kIHVzZXIgZGF0YSBidWZmZXIKLSAgICB1bnNpZ25lZCBjaGFyKiBw
cmVHdWFyZCgpICBjb25zdCB7IHJldHVybiBtZW0gKyBoZWFkZXJTaXplKCk7IH0KLSAgICB1bnNp
Z25lZCBjaGFyKiBkYXRhKCkgICAgICBjb25zdCB7IHJldHVybiBwcmVHdWFyZCgpICsgZ3VhcmRC
bG9ja1NpemU7IH0KLSAgICB1bnNpZ25lZCBjaGFyKiBwb3N0R3VhcmQoKSBjb25zdCB7IHJldHVy
biBkYXRhKCkgKyBzaXplOyB9Ci0KLSAgICBzaXplX3Qgc2l6ZTsgICAgICAgICAgICAgICAgICAv
LyBzaXplIG9mIHRoZSB1c2VyIGRhdGEgYXJlYQotICAgIHVuc2lnbmVkIGNoYXIqIG1lbTsgICAg
ICAgICAgIC8vIGJlZ2lubmluZyBvZiBvdXIgYWxsb2NhdGlvbiAocHRzIHRvIGhlYWRlcikKLSAg
ICBUQWxsb2NhdGlvbiogcHJldkFsbG9jOyAgICAgICAvLyBwcmlvciBhbGxvY2F0aW9uIGluIHRo
ZSBjaGFpbgotCi0gICAgLy8gU3VwcG9ydCBNU1ZDKysgNi4wCi0gICAgY29uc3Qgc3RhdGljIHVu
c2lnbmVkIGNoYXIgZ3VhcmRCbG9ja0JlZ2luVmFsOwotICAgIGNvbnN0IHN0YXRpYyB1bnNpZ25l
ZCBjaGFyIGd1YXJkQmxvY2tFbmRWYWw7Ci0gICAgY29uc3Qgc3RhdGljIHVuc2lnbmVkIGNoYXIg
dXNlckRhdGFGaWxsOwotCi0gICAgY29uc3Qgc3RhdGljIHNpemVfdCBndWFyZEJsb2NrU2l6ZTsK
LSNpZmRlZiBHVUFSRF9CTE9DS1MKLSAgICBpbmxpbmUgc3RhdGljIHNpemVfdCBoZWFkZXJTaXpl
KCkgeyByZXR1cm4gc2l6ZW9mKFRBbGxvY2F0aW9uKTsgfQotI2Vsc2UKLSAgICBpbmxpbmUgc3Rh
dGljIHNpemVfdCBoZWFkZXJTaXplKCkgeyByZXR1cm4gMDsgfQotI2VuZGlmCi19OwotCi0vLwot
Ly8gVGhlcmUgYXJlIHNldmVyYWwgc3RhY2tzLiAgT25lIGlzIHRvIHRyYWNrIHRoZSBwdXNoaW5n
IGFuZCBwb3BwaW5nCi0vLyBvZiB0aGUgdXNlciwgYW5kIG5vdCB5ZXQgaW1wbGVtZW50ZWQuICBU
aGUgb3RoZXJzIGFyZSBzaW1wbHkgYSAKLS8vIHJlcG9zaXRvcmllcyBvZiBmcmVlIHBhZ2VzIG9y
IHVzZWQgcGFnZXMuCi0vLwotLy8gUGFnZSBzdGFja3MgYXJlIGxpbmtlZCB0b2dldGhlciB3aXRo
IGEgc2ltcGxlIGhlYWRlciBhdCB0aGUgYmVnaW5uaW5nCi0vLyBvZiBlYWNoIGFsbG9jYXRpb24g
b2J0YWluZWQgZnJvbSB0aGUgdW5kZXJseWluZyBPUy4gIE11bHRpLXBhZ2UgYWxsb2NhdGlvbnMK
LS8vIGFyZSByZXR1cm5lZCB0byB0aGUgT1MuICBJbmRpdmlkdWFsIHBhZ2UgYWxsb2NhdGlvbnMg
YXJlIGtlcHQgZm9yIGZ1dHVyZQotLy8gcmUtdXNlLgotLy8KLS8vIFRoZSAicGFnZSBzaXplIiB1
c2VkIGlzIG5vdCwgbm9yIG11c3QgaXQgbWF0Y2gsIHRoZSB1bmRlcmx5aW5nIE9TCi0vLyBwYWdl
IHNpemUuICBCdXQsIGhhdmluZyBpdCBiZSBhYm91dCB0aGF0IHNpemUgb3IgZXF1YWwgdG8gYSBz
ZXQgb2YgCi0vLyBwYWdlcyBpcyBsaWtlbHkgbW9zdCBvcHRpbWFsLgotLy8KLWNsYXNzIFRQb29s
QWxsb2NhdG9yIHsKLXB1YmxpYzoKLSAgICBUUG9vbEFsbG9jYXRvcihpbnQgZ3Jvd3RoSW5jcmVt
ZW50ID0gOCoxMDI0LCBpbnQgYWxsb2NhdGlvbkFsaWdubWVudCA9IDE2KTsKLQotICAgIC8vCi0g
ICAgLy8gRG9uJ3QgY2FsbCB0aGUgZGVzdHJ1Y3RvciBqdXN0IHRvIGZyZWUgdXAgdGhlIG1lbW9y
eSwgY2FsbCBwb3AoKQotICAgIC8vCi0gICAgflRQb29sQWxsb2NhdG9yKCk7Ci0KLSAgICAvLwot
ICAgIC8vIENhbGwgcHVzaCgpIHRvIGVzdGFibGlzaCBhIG5ldyBwbGFjZSB0byBwb3AgbWVtb3J5
IHRvby4gIERvZXMgbm90Ci0gICAgLy8gaGF2ZSB0byBiZSBjYWxsZWQgdG8gZ2V0IHRoaW5ncyBz
dGFydGVkLgotICAgIC8vCi0gICAgdm9pZCBwdXNoKCk7Ci0KLSAgICAvLwotICAgIC8vIENhbGwg
cG9wKCkgdG8gZnJlZSBhbGwgbWVtb3J5IGFsbG9jYXRlZCBzaW5jZSB0aGUgbGFzdCBjYWxsIHRv
IHB1c2goKSwKLSAgICAvLyBvciBpZiBubyBsYXN0IGNhbGwgdG8gcHVzaCwgZnJlZXMgYWxsIG1l
bW9yeSBzaW5jZSBmaXJzdCBhbGxvY2F0aW9uLgotICAgIC8vCi0gICAgdm9pZCBwb3AoKTsKLQot
ICAgIC8vCi0gICAgLy8gQ2FsbCBwb3BBbGwoKSB0byBmcmVlIGFsbCBtZW1vcnkgYWxsb2NhdGVk
LgotICAgIC8vCi0gICAgdm9pZCBwb3BBbGwoKTsKLQotICAgIC8vCi0gICAgLy8gQ2FsbCBhbGxv
Y2F0ZSgpIHRvIGFjdHVhbGx5IGFjcXVpcmUgbWVtb3J5LiAgUmV0dXJucyAwIGlmIG5vIG1lbW9y
eQotICAgIC8vIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGEgcHJvcGVybHkgYWxpZ25lZCBwb2ludGVy
IHRvICdudW1CeXRlcycgb2YgbWVtb3J5LgotICAgIC8vCi0gICAgdm9pZCogYWxsb2NhdGUoc2l6
ZV90IG51bUJ5dGVzKTsKLQotICAgIC8vCi0gICAgLy8gVGhlcmUgaXMgbm8gZGVhbGxvY2F0ZS4g
IFRoZSBwb2ludCBvZiB0aGlzIGNsYXNzIGlzIHRoYXQKLSAgICAvLyBkZWFsbG9jYXRpb24gY2Fu
IGJlIHNraXBwZWQgYnkgdGhlIHVzZXIgb2YgaXQsIGFzIHRoZSBtb2RlbAotICAgIC8vIG9mIHVz
ZSBpcyB0byBzaW11bHRhbmVvdXNseSBkZWFsbG9jYXRlIGV2ZXJ5dGhpbmcgYXQgb25jZQotICAg
IC8vIGJ5IGNhbGxpbmcgcG9wKCksIGFuZCB0byBub3QgaGF2ZSB0byBzb2x2ZSBtZW1vcnkgbGVh
ayBwcm9ibGVtcy4KLSAgICAvLwotCi1wcm90ZWN0ZWQ6Ci0gICAgZnJpZW5kIHN0cnVjdCB0SGVh
ZGVyOwotICAgIAotICAgIHN0cnVjdCB0SGVhZGVyIHsKLSAgICAgICAgdEhlYWRlcih0SGVhZGVy
KiBuZXh0UGFnZSwgc2l6ZV90IHBhZ2VDb3VudCkgOgotICAgICAgICAgICAgbmV4dFBhZ2UobmV4
dFBhZ2UpLAotICAgICAgICAgICAgcGFnZUNvdW50KHBhZ2VDb3VudCkKLSNpZmRlZiBHVUFSRF9C
TE9DS1MKLSAgICAgICAgICAsIGxhc3RBbGxvY2F0aW9uKDApCi0jZW5kaWYKLSAgICAgICAgICAg
IHsgfQotCi0gICAgICAgIH50SGVhZGVyKCkgewotI2lmZGVmIEdVQVJEX0JMT0NLUwotICAgICAg
ICAgICAgaWYgKGxhc3RBbGxvY2F0aW9uKQotICAgICAgICAgICAgICAgIGxhc3RBbGxvY2F0aW9u
LT5jaGVja0FsbG9jTGlzdCgpOwotI2VuZGlmCi0gICAgICAgIH0KLQotICAgICAgICB0SGVhZGVy
KiBuZXh0UGFnZTsKLSAgICAgICAgc2l6ZV90IHBhZ2VDb3VudDsKLSNpZmRlZiBHVUFSRF9CTE9D
S1MKLSAgICAgICAgVEFsbG9jYXRpb24qIGxhc3RBbGxvY2F0aW9uOwotI2VuZGlmCi0gICAgfTsK
LQotICAgIHN0cnVjdCB0QWxsb2NTdGF0ZSB7Ci0gICAgICAgIHNpemVfdCBvZmZzZXQ7Ci0gICAg
ICAgIHRIZWFkZXIqIHBhZ2U7Ci0gICAgfTsKLSAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPHRBbGxv
Y1N0YXRlPiB0QWxsb2NTdGFjazsKLQotICAgIC8vIFRyYWNrIGFsbG9jYXRpb25zIGlmIGFuZCBv
bmx5IGlmIHdlJ3JlIHVzaW5nIGd1YXJkIGJsb2NrcwotICAgIHZvaWQqIGluaXRpYWxpemVBbGxv
Y2F0aW9uKHRIZWFkZXIqIGJsb2NrLCB1bnNpZ25lZCBjaGFyKiBtZW1vcnksIHNpemVfdCBudW1C
eXRlcykgewotI2lmZGVmIEdVQVJEX0JMT0NLUwotICAgICAgICBuZXcobWVtb3J5KSBUQWxsb2Nh
dGlvbihudW1CeXRlcywgbWVtb3J5LCBibG9jay0+bGFzdEFsbG9jYXRpb24pOwotICAgICAgICBi
bG9jay0+bGFzdEFsbG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PFRBbGxvY2F0aW9uKj4obWVt
b3J5KTsKLSNlbmRpZgotICAgICAgICAvLyBUaGlzIGlzIG9wdGltaXplZCBlbnRpcmVseSBhd2F5
IGlmIEdVQVJEX0JMT0NLUyBpcyBub3QgZGVmaW5lZC4KLSAgICAgICAgcmV0dXJuIFRBbGxvY2F0
aW9uOjpvZmZzZXRBbGxvY2F0aW9uKG1lbW9yeSk7Ci0gICAgfQotCi0gICAgc2l6ZV90IHBhZ2VT
aXplOyAgICAgICAgLy8gZ3JhbnVsYXJpdHkgb2YgYWxsb2NhdGlvbiBmcm9tIHRoZSBPUwotICAg
IHNpemVfdCBhbGlnbm1lbnQ7ICAgICAgIC8vIGFsbCByZXR1cm5lZCBhbGxvY2F0aW9ucyB3aWxs
IGJlIGFsaWduZWQgYXQgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBncmFu
dWxhcml0eSwgd2hpY2ggd2lsbCBiZSBhIHBvd2VyIG9mIDIKLSAgICBzaXplX3QgYWxpZ25tZW50
TWFzazsKLSAgICBzaXplX3QgaGVhZGVyU2tpcDsgICAgICAvLyBhbW91bnQgb2YgbWVtb3J5IHRv
IHNraXAgdG8gbWFrZSByb29tIGZvciB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyAgICAgIGhlYWRlciAoYmFzaWNhbGx5LCBzaXplIG9mIGhlYWRlciwgcm91bmRlZAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgdXAgdG8gbWFrZSBpdCBhbGlnbmVkCi0gICAg
c2l6ZV90IGN1cnJlbnRQYWdlT2Zmc2V0OyAgLy8gbmV4dCBvZmZzZXQgaW4gdG9wIG9mIGluVXNl
TGlzdCB0byBhbGxvY2F0ZSBmcm9tCi0gICAgdEhlYWRlciogZnJlZUxpc3Q7ICAgICAgLy8gbGlz
dCBvZiBwb3BwZWQgbWVtb3J5Ci0gICAgdEhlYWRlciogaW5Vc2VMaXN0OyAgICAgLy8gbGlzdCBv
ZiBhbGwgbWVtb3J5IGN1cnJlbnRseSBiZWluZyB1c2VkCi0gICAgdEFsbG9jU3RhY2sgc3RhY2s7
ICAgICAgLy8gc3RhY2sgb2Ygd2hlcmUgdG8gYWxsb2NhdGUgZnJvbSwgdG8gcGFydGl0aW9uIHBv
b2wKLQotICAgIGludCBudW1DYWxsczsgICAgICAgICAgIC8vIGp1c3QgYW4gaW50ZXJlc3Rpbmcg
c3RhdGlzdGljCi0gICAgc2l6ZV90IHRvdGFsQnl0ZXM7ICAgICAgLy8ganVzdCBhbiBpbnRlcmVz
dGluZyBzdGF0aXN0aWMKLXByaXZhdGU6Ci0gICAgVFBvb2xBbGxvY2F0b3ImIG9wZXJhdG9yPShj
b25zdCBUUG9vbEFsbG9jYXRvciYpOyAgLy8gZG9udCBhbGxvdyBhc3NpZ25tZW50IG9wZXJhdG9y
Ci0gICAgVFBvb2xBbGxvY2F0b3IoY29uc3QgVFBvb2xBbGxvY2F0b3ImKTsgIC8vIGRvbnQgYWxs
b3cgZGVmYXVsdCBjb3B5IGNvbnN0cnVjdG9yCi19OwotCi0KLS8vCi0vLyBUaGVyZSBjb3VsZCBw
b3RlbnRpYWxseSBiZSBtYW55IHBvb2xzIHdpdGggcG9wcyBoYXBwZW5pbmcgYXQKLS8vIGRpZmZl
cmVudCB0aW1lcy4gIEJ1dCBhIHNpbXBsZSB1c2UgaXMgdG8gaGF2ZSBhIGdsb2JhbCBwb3AKLS8v
IHdpdGggZXZlcnlvbmUgdXNpbmcgdGhlIHNhbWUgZ2xvYmFsIGFsbG9jYXRvci4KLS8vCi1leHRl
cm4gVFBvb2xBbGxvY2F0b3IqIEdldEdsb2JhbFBvb2xBbGxvY2F0b3IoKTsKLWV4dGVybiB2b2lk
IFNldEdsb2JhbFBvb2xBbGxvY2F0b3IoVFBvb2xBbGxvY2F0b3IqIHBvb2xBbGxvY2F0b3IpOwot
Ci0vLwotLy8gVGhpcyBTVEwgY29tcGF0aWJsZSBhbGxvY2F0b3IgaXMgaW50ZW5kZWQgdG8gYmUg
dXNlZCBhcyB0aGUgYWxsb2NhdG9yCi0vLyBwYXJhbWV0ZXIgdG8gdGVtcGxhdGl6ZWQgU1RMIGNv
bnRhaW5lcnMsIGxpa2UgdmVjdG9yIGFuZCBtYXAuCi0vLwotLy8gSXQgd2lsbCB1c2UgdGhlIHBv
b2xzIGZvciBhbGxvY2F0aW9uLCBhbmQgbm90Ci0vLyBkbyBhbnkgZGVhbGxvY2F0aW9uLCBidXQg
d2lsbCBzdGlsbCBkbyBkZXN0cnVjdGlvbi4KLS8vCi10ZW1wbGF0ZTxjbGFzcyBUPgotY2xhc3Mg
cG9vbF9hbGxvY2F0b3IgewotcHVibGljOgotICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsK
LSAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7Ci0gICAgdHlwZWRlZiBUKiBw
b2ludGVyOwotICAgIHR5cGVkZWYgY29uc3QgVCogY29uc3RfcG9pbnRlcjsKLSAgICB0eXBlZGVm
IFQmIHJlZmVyZW5jZTsKLSAgICB0eXBlZGVmIGNvbnN0IFQmIGNvbnN0X3JlZmVyZW5jZTsKLSAg
ICB0eXBlZGVmIFQgdmFsdWVfdHlwZTsKLQotICAgIHRlbXBsYXRlPGNsYXNzIE90aGVyPiAKLSAg
ICBzdHJ1Y3QgcmViaW5kIHsKLSAgICAgICAgdHlwZWRlZiBwb29sX2FsbG9jYXRvcjxPdGhlcj4g
b3RoZXI7Ci0gICAgfTsKLSAgICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIHgpIGNvbnN0IHsg
cmV0dXJuICZ4OyB9Ci0gICAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSB4
KSBjb25zdCB7IHJldHVybiAmeDsgfQotCi0gICAgcG9vbF9hbGxvY2F0b3IoKSA6IGFsbG9jYXRv
cihHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCkpIHsgfQotICAgIHBvb2xfYWxsb2NhdG9yKFRQb29s
QWxsb2NhdG9yJiBhKSA6IGFsbG9jYXRvcigmYSkgeyB9Ci0gICAgcG9vbF9hbGxvY2F0b3IoY29u
c3QgcG9vbF9hbGxvY2F0b3I8VD4mIHApIDogYWxsb2NhdG9yKHAuYWxsb2NhdG9yKSB7IH0KLQot
ICAgIHRlbXBsYXRlIDxjbGFzcyBPdGhlcj4KLSAgICBwb29sX2FsbG9jYXRvcjxUPiYgb3BlcmF0
b3I9KGNvbnN0IHBvb2xfYWxsb2NhdG9yPE90aGVyPiYgcCkgewotICAgICAgYWxsb2NhdG9yID0g
cC5hbGxvY2F0b3I7Ci0gICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8
Y2xhc3MgT3RoZXI+Ci0gICAgcG9vbF9hbGxvY2F0b3IoY29uc3QgcG9vbF9hbGxvY2F0b3I8T3Ro
ZXI+JiBwKSA6IGFsbG9jYXRvcigmcC5nZXRBbGxvY2F0b3IoKSkgeyB9Ci0KLSNpZiBkZWZpbmVk
KF9fU1VOUFJPX0NDKSAmJiAhZGVmaW5lZChfUldTVERfQUxMT0NBVE9SKQotICAgIC8vIGxpYkNT
dGQgb24gc29tZSBwbGF0Zm9ybXMgaGF2ZSBhIGRpZmZlcmVudCBhbGxvY2F0ZS9kZWFsbG9jYXRl
IGludGVyZmFjZS4KLSAgICAvLyBDYWxsZXIgcHJlLWJha2VzIHNpemVvZihUKSBpbnRvICduJyB3
aGljaCBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlCi0gICAgLy8gYWxsb2NhdGVkLCBub3Qg
dGhlIG51bWJlciBvZiBlbGVtZW50cy4KLSAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3R5cGUgbikg
eyAKLSAgICAgICAgcmV0dXJuIGdldEFsbG9jYXRvcigpLmFsbG9jYXRlKG4pOwotICAgIH0KLSAg
ICB2b2lkKiBhbGxvY2F0ZShzaXplX3R5cGUgbiwgY29uc3Qgdm9pZCopIHsKLSAgICAgICAgcmV0
dXJuIGdldEFsbG9jYXRvcigpLmFsbG9jYXRlKG4pOwotICAgIH0KLSAgICB2b2lkIGRlYWxsb2Nh
dGUodm9pZCosIHNpemVfdHlwZSkge30KLSNlbHNlCi0gICAgcG9pbnRlciBhbGxvY2F0ZShzaXpl
X3R5cGUgbikgeyAKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8cG9pbnRlcj4oZ2V0
QWxsb2NhdG9yKCkuYWxsb2NhdGUobiAqIHNpemVvZihUKSkpOwotICAgIH0KLSAgICBwb2ludGVy
IGFsbG9jYXRlKHNpemVfdHlwZSBuLCBjb25zdCB2b2lkKikgeyAKLSAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8cG9pbnRlcj4oZ2V0QWxsb2NhdG9yKCkuYWxsb2NhdGUobiAqIHNpemVv
ZihUKSkpOwotICAgIH0KLSAgICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciwgc2l6ZV90eXBlKSB7
fQotI2VuZGlmICAvLyBfUldTVERfQUxMT0NBVE9SCi0KLSAgICB2b2lkIGNvbnN0cnVjdChwb2lu
dGVyIHAsIGNvbnN0IFQmIHZhbCkgeyBuZXcgKCh2b2lkICopcCkgVCh2YWwpOyB9Ci0gICAgdm9p
ZCBkZXN0cm95KHBvaW50ZXIgcCkgeyBwLT5UOjp+VCgpOyB9Ci0KLSAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgcG9vbF9hbGxvY2F0b3ImIHJocykgY29uc3QgeyByZXR1cm4gJmdldEFsbG9jYXRv
cigpID09ICZyaHMuZ2V0QWxsb2NhdG9yKCk7IH0KLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
cG9vbF9hbGxvY2F0b3ImIHJocykgY29uc3QgeyByZXR1cm4gJmdldEFsbG9jYXRvcigpICE9ICZy
aHMuZ2V0QWxsb2NhdG9yKCk7IH0KLQotICAgIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdHlwZT4oLTEpIC8gc2l6ZW9mKFQpOyB9Ci0gICAgc2l6
ZV90eXBlIG1heF9zaXplKGludCBzaXplKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxzaXpl
X3R5cGU+KC0xKSAvIHNpemU7IH0KLQotICAgIHZvaWQgc2V0QWxsb2NhdG9yKFRQb29sQWxsb2Nh
dG9yKiBhKSB7IGFsbG9jYXRvciA9IGE7IH0KLSAgICBUUG9vbEFsbG9jYXRvciYgZ2V0QWxsb2Nh
dG9yKCkgY29uc3QgeyByZXR1cm4gKmFsbG9jYXRvcjsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgVFBv
b2xBbGxvY2F0b3IqIGFsbG9jYXRvcjsKLX07Ci0KLSNlbmRpZiAvLyBfUE9PTEFMTE9DX0lOQ0xV
REVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1By
YWdtYS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ByYWdtYS5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjc0NDEyM2I4Mjg5NDk4YzMxNzkxNGVhZDNk
ZjEzNjNhZTg2MTZiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QcmFnbWEuaAorKysgL2Rl
di9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVS
X1BSQUdNQV9IXwotI2RlZmluZSBDT01QSUxFUl9QUkFHTUFfSF8KLQotc3RydWN0IFRQcmFnbWEg
ewotICAgIC8vIEJ5IGRlZmF1bHQgb3B0aW1pemF0aW9uIGlzIHR1cm5lZCBvbiBhbmQgZGVidWcg
aXMgdHVybmVkIG9mZi4KLSAgICBUUHJhZ21hKCkgOiBvcHRpbWl6ZSh0cnVlKSwgZGVidWcoZmFs
c2UpIHsgfQotICAgIFRQcmFnbWEoYm9vbCBvLCBib29sIGQpIDogb3B0aW1pemUobyksIGRlYnVn
KGQpIHsgfQotCi0gICAgYm9vbCBvcHRpbWl6ZTsKLSAgICBib29sIGRlYnVnOwotfTsKLQotI2Vu
ZGlmIC8vIENPTVBJTEVSX1BSQUdNQV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDkyYTY4NzRlYjdiZTdjYjBlN2ZmY2NkNTllYWRiYzBiNTQ3ODQ4YzMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDU4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxl
ci9pbnRlcm1lZGlhdGUuaCIKLQotY2xhc3MgVEFsaXZlVHJhdmVyc2VyIDogcHVibGljIFRJbnRl
cm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIFRBbGl2ZVRyYXZlcnNlcihUUXVhbGlmaWVyIHEp
IDogVEludGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpLCBmb3VuZChmYWxz
ZSksIHF1YWxpZmllcihxKQotICAgIHsKLSAgICB9Ci0KLQlib29sIHdhc0ZvdW5kKCkgeyByZXR1
cm4gZm91bmQ7IH0KLQotcHJvdGVjdGVkOgotICAgIGJvb2wgZm91bmQ7Ci0gICAgVFF1YWxpZmll
ciBxdWFsaWZpZXI7Ci0KLSAgICB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKLSAg
ICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKik7Ci19OwotCi0v
LwotLy8gUmVwb3J0IHdoZXRoZXIgb3Igbm90IGEgdmFyaWFibGUgb2YgdGhlIGdpdmVuIHF1YWxp
ZmllciB0eXBlCi0vLyBpcyBndWFyYW50ZWVkIHdyaXR0ZW4uICBOb3QgYWx3YXlzIHBvc3NpYmxl
IHRvIGRldGVybWluZSBpZgotLy8gaXQgaXMgd3JpdHRlbiBjb25kaXRpb25hbGx5LgotLy8KLS8v
ID8/IEl0IGRvZXMgbm90IGRvIHRoaXMgd2VsbCB5ZXQsIHRoaXMgaXMganVzdCBhIHBsYWNlIGhv
bGRlcgotLy8gdGhhdCBzaW1wbHkgZGV0ZXJtaW5lcyBpZiBpdCB3YXMgcmVmZXJlbmNlIGF0IGFs
bCwgYW55d2hlcmUuCi0vLwotYm9vbCBRdWFsaWZpZXJXcml0dGVuKFRJbnRlcm1Ob2RlKiBub2Rl
LCBUUXVhbGlmaWVyIHF1YWxpZmllcikKLXsKLSAgICBUQWxpdmVUcmF2ZXJzZXIgaXQocXVhbGlm
aWVyKTsKLQotICAgIGlmIChub2RlKQotICAgICAgICBub2RlLT50cmF2ZXJzZSgmaXQpOwotCi0g
ICAgcmV0dXJuIGl0Lndhc0ZvdW5kKCk7Ci19Ci0KLXZvaWQgVEFsaXZlVHJhdmVyc2VyOjp2aXNp
dFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQotewotICAgIC8vCi0gICAgLy8gSWYgaXQncyB3
aGF0IHdlJ3JlIGxvb2tpbmcgZm9yLCByZWNvcmQgaXQuCi0gICAgLy8KLSAgICBpZiAobm9kZS0+
Z2V0UXVhbGlmaWVyKCkgPT0gcXVhbGlmaWVyKQotICAgICAgICBmb3VuZCA9IHRydWU7Ci19Ci0K
LWJvb2wgVEFsaXZlVHJhdmVyc2VyOjp2aXNpdFNlbGVjdGlvbihWaXNpdCBwcmVWaXNpdCwgVElu
dGVybVNlbGVjdGlvbiogbm9kZSkKLXsKLSAgICBpZiAod2FzRm91bmQoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUXVhbGlmaWVyQWxpdmUuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA4NzJhMDZmNzIxOTJhZjFkMzc4ZjcyZDFlYTIxMGRhZTg5OWJiZjRi
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5oCisrKyAvZGV2L251
bGwKQEAgLTEsNyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi1ib29sIFF1YWxpZmllcldy
aXR0ZW4oVEludGVybU5vZGUqIHJvb3QsIFRRdWFsaWZpZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBhNGI4YzFlNjNlMWRhZTA1OWE0MTllOTJjMWI3NTI0ODBhMDFkNmQ4
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDc3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxl
ci9pbnRlcm1lZGlhdGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9SZW1vdmVUcmVlLmgiCi0KLS8v
Ci0vLyBDb2RlIHRvIHJlY3Vyc2l2ZWx5IGRlbGV0ZSB0aGUgaW50ZXJtZWRpYXRlIHRyZWUuCi0v
LwotCi1jbGFzcyBSZW1vdmVUcmVlIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKLXsKLXB1Ymxp
YzoKLQlSZW1vdmVUcmVlKCkgOiBUSW50ZXJtVHJhdmVyc2VyKGZhbHNlLCBmYWxzZSwgdHJ1ZSkK
LQl7Ci0JfQotCi1wcm90ZWN0ZWQ6Ci0Jdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7
Ci0Jdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qKTsKLQlib29s
IHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7Ci0JYm9vbCB2aXNpdFVu
YXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqKTsKLQlib29sIHZpc2l0U2VsZWN0aW9uKFZp
c2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKik7Ci0JYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNp
dCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOwotfTsKLQotdm9pZCBSZW1vdmVUcmVlOjp2aXNp
dFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQotewotCWRlbGV0ZSBub2RlOwotfQotCi1ib29s
IFJlbW92ZVRyZWU6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBub2Rl
KQotewotCWRlbGV0ZSBub2RlOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUmVtb3ZlVHJl
ZTo6dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQotewotICAgIGRl
bGV0ZSBub2RlOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUmVtb3ZlVHJlZTo6dmlzaXRB
Z2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCi17Ci0JZGVsZXRl
IG5vZGU7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBSZW1vdmVUcmVlOjp2aXNpdFNlbGVj
dGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiogbm9kZSkKLXsKLQlkZWxldGUgbm9k
ZTsKLQotCXJldHVybiB0cnVlOwotfQotCi12b2lkIFJlbW92ZVRyZWU6OnZpc2l0Q29uc3RhbnRV
bmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSkKLXsKLQlkZWxldGUgbm9kZTsKLX0KLQot
Ly8KLS8vIEVudHJ5IHBvaW50LgotLy8KLXZvaWQgUmVtb3ZlQWxsVHJlZU5vZGVzKFRJbnRlcm1O
b2RlKiByb290KQotewotICAgIFJlbW92ZVRyZWUgaXQ7Ci0KLSAgICByb290LT50cmF2ZXJzZSgm
aXQpOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvUmVtb3ZlVHJlZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Jl
bW92ZVRyZWUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdhODIxNjc5YzIzZmI5
MjgwYjNlZGY0YTdlOGZjYmU0MTU2MTQ2Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVt
b3ZlVHJlZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwotCi12b2lkIFJlbW92ZUFsbFRyZWVOb2RlcyhUSW50ZXJtTm9kZSopOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzkwOGJmZGRiODIwMTczNTNmODdiNDVkNTUwMmFi
NzRlZjgxYTI3Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaAor
KysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENP
TVBJTEVSX1JFTkFNRV9GVU5DVElPTgotI2RlZmluZSBDT01QSUxFUl9SRU5BTUVfRlVOQ1RJT04K
LQotI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotCi0vLwotLy8gUmVuYW1lcyBh
IGZ1bmN0aW9uLCBpbmNsdWRpbmcgaXRzIGRlY2xhcmF0aW9uIGFuZCBhbnkgY2FsbHMgdG8gaXQu
Ci0vLwotY2xhc3MgUmVuYW1lRnVuY3Rpb24gOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgotewot
cHVibGljOgotICAgIFJlbmFtZUZ1bmN0aW9uKGNvbnN0IFRTdHJpbmcmIG9sZEZ1bmN0aW9uTmFt
ZSwgY29uc3QgVFN0cmluZyYgbmV3RnVuY3Rpb25OYW1lKQotICAgIDogVEludGVybVRyYXZlcnNl
cih0cnVlLCBmYWxzZSwgZmFsc2UpCi0gICAgLCBtT2xkRnVuY3Rpb25OYW1lKG9sZEZ1bmN0aW9u
TmFtZSkKLSAgICAsIG1OZXdGdW5jdGlvbk5hbWUobmV3RnVuY3Rpb25OYW1lKSB7fQotCi0gICAg
dmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRl
KiBub2RlKQotICAgIHsKLSAgICAgICAgVE9wZXJhdG9yIG9wID0gbm9kZS0+Z2V0T3AoKTsKLSAg
ICAgICAgaWYgKChvcCA9PSBFT3BGdW5jdGlvbiB8fCBvcCA9PSBFT3BGdW5jdGlvbkNhbGwpICYm
IG5vZGUtPmdldE5hbWUoKSA9PSBtT2xkRnVuY3Rpb25OYW1lKQotICAgICAgICAgICAgbm9kZS0+
c2V0TmFtZShtTmV3RnVuY3Rpb25OYW1lKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci1wcml2YXRlOgotICAgIGNvbnN0IFRTdHJpbmcgbU9sZEZ1bmN0aW9uTmFtZTsKLSAgICBjb25z
dCBUU3RyaW5nIG1OZXdGdW5jdGlvbk5hbWU7Ci19OwotCi0jZW5kaWYgIC8vIENPTVBJTEVSX1JF
TkFNRV9GVU5DVElPTgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1NlYXJjaFN5bWJvbC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvU2VhcmNoU3ltYm9sLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM2
OGYxYTRmYWY3NjQ3YzRiNTlkMzQyYTc4OGZjZjAwMzJjM2ViNy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvU2VhcmNoU3ltYm9sLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAK
LS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0vLyBTZWFyY2hTeW1ib2wgaXMgYW4gQVNUIHRyYXZlcnNlciB0
byBkZXRlY3QgdGhlIHVzZSBvZiBhIGdpdmVuIHN5bWJvbCBuYW1lCi0vLwotCi0jaW5jbHVkZSAi
Y29tcGlsZXIvU2VhcmNoU3ltYm9sLmgiCi0KLSNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5o
IgotI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIKLQotbmFtZXNwYWNlIHNoCi17Ci1T
ZWFyY2hTeW1ib2w6OlNlYXJjaFN5bWJvbChjb25zdCBUU3RyaW5nICZzeW1ib2wpIDogbVN5bWJv
bChzeW1ib2wpCi17Ci0gICAgbWF0Y2ggPSBmYWxzZTsKLX0KLQotdm9pZCBTZWFyY2hTeW1ib2w6
OnRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKQotewotICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMp
OwotfQotCi12b2lkIFNlYXJjaFN5bWJvbDo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqc3lt
Ym9sTm9kZSkKLXsKLSAgICBpZiAoc3ltYm9sTm9kZS0+Z2V0U3ltYm9sKCkgPT0gbVN5bWJvbCkK
LSAgICB7Ci0gICAgICAgIG1hdGNoID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgU2VhcmNoU3lt
Ym9sOjpmb3VuZE1hdGNoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWF0Y2g7Ci19Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2VhcmNoU3ltYm9s
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2VhcmNoU3ltYm9sLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyNGJjNzdjNmYyZGZlMzFjNzNlZDY5Mzg1
YjMzYzZlMDViZjA0MmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NlYXJjaFN5bWJvbC5o
CisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLS8vIFNl
YXJjaFN5bWJvbCBpcyBhbiBBU1QgdHJhdmVyc2VyIHRvIGRldGVjdCB0aGUgdXNlIG9mIGEgZ2l2
ZW4gc3ltYm9sIG5hbWUKLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfU0VBUkNIU1lNQk9MX0hfCi0j
ZGVmaW5lIENPTVBJTEVSX1NFQVJDSFNZTUJPTF9IXwotCi0jaW5jbHVkZSAiY29tcGlsZXIvaW50
ZXJtZWRpYXRlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VDb250ZXh0LmgiCi0KLW5hbWVz
cGFjZSBzaAotewotY2xhc3MgU2VhcmNoU3ltYm9sIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIK
LXsKLSAgcHVibGljOgotICAgIFNlYXJjaFN5bWJvbChjb25zdCBUU3RyaW5nICZzeW1ib2wpOwot
Ci0gICAgdm9pZCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7Ci0gICAgdm9pZCB2aXNpdFN5
bWJvbChUSW50ZXJtU3ltYm9sICpzeW1ib2xOb2RlKTsKLQotICAgIGJvb2wgZm91bmRNYXRjaCgp
IGNvbnN0OwotCi0gIHByb3RlY3RlZDoKLSAgICBjb25zdCBUU3RyaW5nICZtU3ltYm9sOwotICAg
IGJvb2wgbWF0Y2g7Ci19OwotfQotCi0jZW5kaWYgICAvLyBDT01QSUxFUl9TRUFSQ0hTWU1CT0xf
SF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaEhh
bmRsZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyMWQzMzFlYTlkZjEzZjAwODhjMThlNzZj
OTFkYmFmZmE0ZWQ3NDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmgKKysr
IC9kZXYvbnVsbApAQCAtMSwxNzAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRl
ZiBfU0hIQU5ETEVfSU5DTFVERURfCi0jZGVmaW5lIF9TSEhBTkRMRV9JTkNMVURFRF8KLQotLy8K
LS8vIE1hY2hpbmUgaW5kZXBlbmRlbnQgcGFydCBvZiB0aGUgY29tcGlsZXIgcHJpdmF0ZSBvYmpl
Y3RzCi0vLyBzZW50IGFzIFNoSGFuZGxlIHRvIHRoZSBkcml2ZXIuCi0vLwotLy8gVGhpcyBzaG91
bGQgbm90IGJlIGluY2x1ZGVkIGJ5IGRyaXZlciBjb2RlLgotLy8KLQotI2luY2x1ZGUgIkdMU0xB
TkcvU2hhZGVyTGFuZy5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3IuaCIKLSNpbmNsdWRlICJjb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oIgotI2luY2x1
ZGUgImNvbXBpbGVyL0hhc2hOYW1lcy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgi
Ci0jaW5jbHVkZSAiY29tcGlsZXIvU3ltYm9sVGFibGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9W
YXJpYWJsZUluZm8uaCIKLSNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jb21waWxlci9BcnJheUJvdW5k
c0NsYW1wZXIuaCIKLQotY2xhc3MgTG9uZ05hbWVNYXA7Ci1jbGFzcyBUQ29tcGlsZXI7Ci1jbGFz
cyBURGVwZW5kZW5jeUdyYXBoOwotY2xhc3MgVHJhbnNsYXRvckhMU0w7Ci0KLS8vCi0vLyBIZWxw
ZXIgZnVuY3Rpb24gdG8gaWRlbnRpZnkgc3BlY3MgdGhhdCBhcmUgYmFzZWQgb24gdGhlIFdlYkdM
IHNwZWMsCi0vLyBsaWtlIHRoZSBDU1MgU2hhZGVycyBzcGVjLgotLy8KLWJvb2wgaXNXZWJHTEJh
c2VkU3BlYyhTaFNoYWRlclNwZWMgc3BlYyk7Ci0KLS8vCi0vLyBUaGUgYmFzZSBjbGFzcyB1c2Vk
IHRvIGJhY2sgaGFuZGxlcyByZXR1cm5lZCB0byB0aGUgZHJpdmVyLgotLy8KLWNsYXNzIFRTaEhh
bmRsZUJhc2UgewotcHVibGljOgotICAgIFRTaEhhbmRsZUJhc2UoKTsKLSAgICB2aXJ0dWFsIH5U
U2hIYW5kbGVCYXNlKCk7Ci0gICAgdmlydHVhbCBUQ29tcGlsZXIqIGdldEFzQ29tcGlsZXIoKSB7
IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBUcmFuc2xhdG9ySExTTCogZ2V0QXNUcmFuc2xhdG9y
SExTTCgpIHsgcmV0dXJuIDA7IH0KLQotcHJvdGVjdGVkOgotICAgIC8vIE1lbW9yeSBhbGxvY2F0
b3IuIEFsbG9jYXRlcyBhbmQgdHJhY2tzIG1lbW9yeSByZXF1aXJlZCBieSB0aGUgY29tcGlsZXIu
Ci0gICAgLy8gRGVhbGxvY2F0ZXMgYWxsIG1lbW9yeSB3aGVuIGNvbXBpbGVyIGlzIGRlc3RydWN0
ZWQuCi0gICAgVFBvb2xBbGxvY2F0b3IgYWxsb2NhdG9yOwotfTsKLQotLy8KLS8vIFRoZSBiYXNl
IGNsYXNzIGZvciB0aGUgbWFjaGluZSBkZXBlbmRlbnQgY29tcGlsZXIgdG8gZGVyaXZlIGZyb20K
LS8vIGZvciBtYW5hZ2luZyBvYmplY3QgY29kZSBmcm9tIHRoZSBjb21waWxlLgotLy8KLWNsYXNz
IFRDb21waWxlciA6IHB1YmxpYyBUU2hIYW5kbGVCYXNlIHsKLXB1YmxpYzoKLSAgICBUQ29tcGls
ZXIoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjKTsKLSAgICB2aXJ0dWFsIH5U
Q29tcGlsZXIoKTsKLSAgICB2aXJ0dWFsIFRDb21waWxlciogZ2V0QXNDb21waWxlcigpIHsgcmV0
dXJuIHRoaXM7IH0KLQotICAgIGJvb2wgSW5pdChjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJl
c291cmNlcyk7Ci0gICAgYm9vbCBjb21waWxlKGNvbnN0IGNoYXIqIGNvbnN0IHNoYWRlclN0cmlu
Z3NbXSwKLSAgICAgICAgICAgICAgICAgc2l6ZV90IG51bVN0cmluZ3MsCi0gICAgICAgICAgICAg
ICAgIGludCBjb21waWxlT3B0aW9ucyk7Ci0KLSAgICAvLyBHZXQgcmVzdWx0cyBvZiB0aGUgbGFz
dCBjb21waWxhdGlvbi4KLSAgICBUSW5mb1NpbmsmIGdldEluZm9TaW5rKCkgeyByZXR1cm4gaW5m
b1Npbms7IH0KLSAgICBjb25zdCBUVmFyaWFibGVJbmZvTGlzdCYgZ2V0QXR0cmlicygpIGNvbnN0
IHsgcmV0dXJuIGF0dHJpYnM7IH0KLSAgICBjb25zdCBUVmFyaWFibGVJbmZvTGlzdCYgZ2V0VW5p
Zm9ybXMoKSBjb25zdCB7IHJldHVybiB1bmlmb3JtczsgfQotICAgIGNvbnN0IFRWYXJpYWJsZUlu
Zm9MaXN0JiBnZXRWYXJ5aW5ncygpIGNvbnN0IHsgcmV0dXJuIHZhcnlpbmdzOyB9Ci0gICAgaW50
IGdldE1hcHBlZE5hbWVNYXhMZW5ndGgoKSBjb25zdDsKLQotICAgIFNoSGFzaEZ1bmN0aW9uNjQg
Z2V0SGFzaEZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gaGFzaEZ1bmN0aW9uOyB9Ci0gICAgTmFt
ZU1hcCYgZ2V0TmFtZU1hcCgpIHsgcmV0dXJuIG5hbWVNYXA7IH0KLSAgICBUU3ltYm9sVGFibGUm
IGdldFN5bWJvbFRhYmxlKCkgeyByZXR1cm4gc3ltYm9sVGFibGU7IH0KLQotcHJvdGVjdGVkOgot
ICAgIFNoU2hhZGVyVHlwZSBnZXRTaGFkZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gc2hhZGVyVHlw
ZTsgfQotICAgIFNoU2hhZGVyU3BlYyBnZXRTaGFkZXJTcGVjKCkgY29uc3QgeyByZXR1cm4gc2hh
ZGVyU3BlYzsgfQotICAgIC8vIEluaXRpYWxpemUgc3ltYm9sLXRhYmxlIHdpdGggYnVpbHQtaW4g
c3ltYm9scy4KLSAgICBib29sIEluaXRCdWlsdEluU3ltYm9sVGFibGUoY29uc3QgU2hCdWlsdElu
UmVzb3VyY2VzJiByZXNvdXJjZXMpOwotICAgIC8vIENsZWFycyB0aGUgcmVzdWx0cyBmcm9tIHRo
ZSBwcmV2aW91cyBjb21waWxhdGlvbi4KLSAgICB2b2lkIGNsZWFyUmVzdWx0cygpOwotICAgIC8v
IFJldHVybiB0cnVlIGlmIGZ1bmN0aW9uIHJlY3Vyc2lvbiBpcyBkZXRlY3RlZCBvciBjYWxsIGRl
cHRoIGV4Y2VlZGVkLgotICAgIGJvb2wgZGV0ZWN0Q2FsbERlcHRoKFRJbnRlcm1Ob2RlKiByb290
LCBUSW5mb1NpbmsmIGluZm9TaW5rLCBib29sIGxpbWl0Q2FsbFN0YWNrRGVwdGgpOwotICAgIC8v
IFJld3JpdGVzIGEgc2hhZGVyJ3MgaW50ZXJtZWRpYXRlIHRyZWUgYWNjb3JkaW5nIHRvIHRoZSBD
U1MgU2hhZGVycyBzcGVjLgotICAgIHZvaWQgcmV3cml0ZUNTU1NoYWRlcihUSW50ZXJtTm9kZSog
cm9vdCk7Ci0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzaGFkZXIgZG9lcyBub3Qg
ZXhjZWVkIHRoZSBtaW5pbXVtCi0gICAgLy8gZnVuY3Rpb25hbGl0eSBtYW5kYXRlZCBpbiBHTFNM
IDEuMCBzcGVjIEFwcGVuZGl4IEEuCi0gICAgYm9vbCB2YWxpZGF0ZUxpbWl0YXRpb25zKFRJbnRl
cm1Ob2RlKiByb290KTsKLSAgICAvLyBDb2xsZWN0IGluZm8gZm9yIGFsbCBhdHRyaWJzLCB1bmlm
b3JtcywgdmFyeWluZ3MuCi0gICAgdm9pZCBjb2xsZWN0VmFyaWFibGVzKFRJbnRlcm1Ob2RlKiBy
b290KTsKLSAgICAvLyBNYXAgbG9uZyB2YXJpYWJsZSBuYW1lcyBpbnRvIHNob3J0ZXIgb25lcy4K
LSAgICB2b2lkIG1hcExvbmdWYXJpYWJsZU5hbWVzKFRJbnRlcm1Ob2RlKiByb290KTsKLSAgICAv
LyBUcmFuc2xhdGUgdG8gb2JqZWN0IGNvZGUuCi0gICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShU
SW50ZXJtTm9kZSogcm9vdCkgPSAwOwotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiwgYWZ0ZXIgYXBw
bHlpbmcgdGhlIHBhY2tpbmcgcnVsZXMgaW4gdGhlIEdMU0wgMS4wMTcgc3BlYwotICAgIC8vIEFw
cGVuZGl4IEEsIHNlY3Rpb24gNywgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2UgdG9vIG1hbnkgdW5p
Zm9ybXMgb3IgdmFyeWluZ3MuCi0gICAgYm9vbCBlbmZvcmNlUGFja2luZ1Jlc3RyaWN0aW9ucygp
OwotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2hhZGVyIHBhc3NlcyB0aGUgcmVzdHJpY3Rp
b25zIHRoYXQgYWltIHRvIHByZXZlbnQgdGltaW5nIGF0dGFja3MuCi0gICAgYm9vbCBlbmZvcmNl
VGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290LCBib29sIG91dHB1dEdyYXBoKTsK
LSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2Ugc2FtcGxlcnMu
Ci0gICAgYm9vbCBlbmZvcmNlVmVydGV4U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1O
b2RlKiByb290KTsKLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRlciBkb2VzIG5vdCB1
c2Ugc2FtcGxlciBkZXBlbmRlbnQgdmFsdWVzIHRvIGFmZmVjdCBjb250cm9sIAotICAgIC8vIGZs
b3cgb3IgaW4gb3BlcmF0aW9ucyB3aG9zZSB0aW1lIGNhbiBkZXBlbmQgb24gdGhlIGlucHV0IHZh
bHVlcy4KLSAgICBib29sIGVuZm9yY2VGcmFnbWVudFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhj
b25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCk7Ci0gICAgLy8gUmV0dXJuIHRydWUgaWYgdGhl
IG1heGltdW0gZXhwcmVzc2lvbiBjb21wbGV4aXR5IGJlbG93IHRoZSBsaW1pdC4KLSAgICBib29s
IGxpbWl0RXhwcmVzc2lvbkNvbXBsZXhpdHkoVEludGVybU5vZGUqIHJvb3QpOwotICAgIC8vIEdl
dCBidWlsdC1pbiBleHRlbnNpb25zIHdpdGggZGVmYXVsdCBiZWhhdmlvci4KLSAgICBjb25zdCBU
RXh0ZW5zaW9uQmVoYXZpb3ImIGdldEV4dGVuc2lvbkJlaGF2aW9yKCkgY29uc3Q7Ci0gICAgLy8g
R2V0IHRoZSByZXNvdXJjZXMgc2V0IGJ5IEluaXRCdWlsdEluU3ltYm9sVGFibGUKLSAgICBjb25z
dCBTaEJ1aWx0SW5SZXNvdXJjZXMmIGdldFJlc291cmNlcygpIGNvbnN0OwotCi0gICAgY29uc3Qg
QXJyYXlCb3VuZHNDbGFtcGVyJiBnZXRBcnJheUJvdW5kc0NsYW1wZXIoKSBjb25zdDsKLSAgICBT
aEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IGdldEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5
KCkgY29uc3Q7Ci0gICAgY29uc3QgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3ImIGdldEJ1aWx0SW5G
dW5jdGlvbkVtdWxhdG9yKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgU2hTaGFkZXJUeXBlIHNo
YWRlclR5cGU7Ci0gICAgU2hTaGFkZXJTcGVjIHNoYWRlclNwZWM7Ci0KLSAgICBpbnQgbWF4VW5p
Zm9ybVZlY3RvcnM7Ci0gICAgaW50IG1heFZhcnlpbmdWZWN0b3JzOwotICAgIGludCBtYXhFeHBy
ZXNzaW9uQ29tcGxleGl0eTsKLSAgICBpbnQgbWF4Q2FsbFN0YWNrRGVwdGg7Ci0KLSAgICBTaEJ1
aWx0SW5SZXNvdXJjZXMgY29tcGlsZVJlc291cmNlczsKLQotICAgIC8vIEJ1aWx0LWluIHN5bWJv
bCB0YWJsZSBmb3IgdGhlIGdpdmVuIGxhbmd1YWdlLCBzcGVjLCBhbmQgcmVzb3VyY2VzLgotICAg
IC8vIEl0IGlzIHByZXNlcnZlZCBmcm9tIGNvbXBpbGUtdG8tY29tcGlsZS4KLSAgICBUU3ltYm9s
VGFibGUgc3ltYm9sVGFibGU7Ci0gICAgLy8gQnVpbHQtaW4gZXh0ZW5zaW9ucyB3aXRoIGRlZmF1
bHQgYmVoYXZpb3IuCi0gICAgVEV4dGVuc2lvbkJlaGF2aW9yIGV4dGVuc2lvbkJlaGF2aW9yOwot
ICAgIGJvb2wgZnJhZ21lbnRQcmVjaXNpb25IaWdoOwotCi0gICAgQXJyYXlCb3VuZHNDbGFtcGVy
IGFycmF5Qm91bmRzQ2xhbXBlcjsKLSAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IGNs
YW1waW5nU3RyYXRlZ3k7Ci0gICAgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IgYnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3I7Ci0KLSAgICAvLyBSZXN1bHRzIG9mIGNvbXBpbGF0aW9uLgotICAgIFRJbmZv
U2luayBpbmZvU2luazsgIC8vIE91dHB1dCBzaW5rLgotICAgIFRWYXJpYWJsZUluZm9MaXN0IGF0
dHJpYnM7ICAvLyBBY3RpdmUgYXR0cmlidXRlcyBpbiB0aGUgY29tcGlsZWQgc2hhZGVyLgotICAg
IFRWYXJpYWJsZUluZm9MaXN0IHVuaWZvcm1zOyAgLy8gQWN0aXZlIHVuaWZvcm1zIGluIHRoZSBj
b21waWxlZCBzaGFkZXIuCi0gICAgVFZhcmlhYmxlSW5mb0xpc3QgdmFyeWluZ3M7ICAvLyBWYXJ5
aW5ncyBpbiB0aGUgY29tcGlsZWQgc2hhZGVyLgotCi0gICAgLy8gQ2FjaGVkIGNvcHkgb2YgdGhl
IHJlZi1jb3VudGVkIHNpbmdsZXRvbi4KLSAgICBMb25nTmFtZU1hcCogbG9uZ05hbWVNYXA7Ci0K
LSAgICAvLyBuYW1lIGhhc2hpbmcuCi0gICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb247
Ci0gICAgTmFtZU1hcCBuYW1lTWFwOwotfTsKLQotLy8KLS8vIFRoaXMgaXMgdGhlIGludGVyZmFj
ZSBiZXR3ZWVuIHRoZSBtYWNoaW5lIGluZGVwZW5kZW50IGNvZGUKLS8vIGFuZCB0aGUgbWFjaGlu
ZSBkZXBlbmRlbnQgY29kZS4KLS8vCi0vLyBUaGUgbWFjaGluZSBkZXBlbmRlbnQgY29kZSBzaG91
bGQgZGVyaXZlIGZyb20gdGhlIGNsYXNzZXMKLS8vIGFib3ZlLiBUaGVuIENvbnN0cnVjdCooKSBh
bmQgRGVsZXRlKigpIHdpbGwgY3JlYXRlIGFuZCAKLS8vIGRlc3Ryb3kgdGhlIG1hY2hpbmUgZGVw
ZW5kZW50IG9iamVjdHMsIHdoaWNoIGNvbnRhaW4gdGhlCi0vLyBhYm92ZSBtYWNoaW5lIGluZGVw
ZW5kZW50IGluZm9ybWF0aW9uLgotLy8KLVRDb21waWxlciogQ29uc3RydWN0Q29tcGlsZXIoCi0g
ICAgU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBTaFNoYWRlck91dHB1dCBv
dXRwdXQpOwotdm9pZCBEZWxldGVDb21waWxlcihUQ29tcGlsZXIqKTsKLQotI2VuZGlmIC8vIF9T
SEhBTkRMRV9JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9TaGFkZXJMYW5nLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9TaGFkZXJMYW5nLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJj
ZDVjYzVjMTVmYmU3MDAyMDZjMzQ0MmI4YzhjYzgwM2U0NDliYy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvU2hhZGVyTGFuZy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzODcgKzAsMCBAQAot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotLy8KLQotLy8KLS8vIEltcGxlbWVudCB0aGUgdG9wLWxldmVsIG9mIGlu
dGVyZmFjZSB0byB0aGUgY29tcGlsZXIsCi0vLyBhcyBkZWZpbmVkIGluIFNoYWRlckxhbmcuaAot
Ly8KLQotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgotCi0jaW5jbHVkZSAiY29tcGls
ZXIvSW5pdGlhbGl6ZURsbC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9sZW5n
dGhfbGltaXRzLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5kbGUuaCIKLSNpbmNsdWRlICJj
b21waWxlci9UcmFuc2xhdG9ySExTTC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1ZhcmlhYmxlUGFj
a2VyLmgiCi0KLS8vCi0vLyBUaGlzIGlzIHRoZSBwbGF0Zm9ybSBpbmRlcGVuZGVudCBpbnRlcmZh
Y2UgYmV0d2VlbiBhbiBPR0wgZHJpdmVyCi0vLyBhbmQgdGhlIHNoYWRpbmcgbGFuZ3VhZ2UgY29t
cGlsZXIuCi0vLwotCi1zdGF0aWMgYm9vbCBjaGVja1ZhcmlhYmxlTWF4TGVuZ3Rocyhjb25zdCBT
aEhhbmRsZSBoYW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgZXhwZWN0ZWRWYWx1ZSkKLXsKLSAgICBzaXplX3QgYWN0aXZlVW5pZm9ybUxpbWl0ID0gMDsK
LSAgICBTaEdldEluZm8oaGFuZGxlLCBTSF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCAmYWN0
aXZlVW5pZm9ybUxpbWl0KTsKLSAgICBzaXplX3QgYWN0aXZlQXR0cmliTGltaXQgPSAwOwotICAg
IFNoR2V0SW5mbyhoYW5kbGUsIFNIX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgJmFjdGl2
ZUF0dHJpYkxpbWl0KTsKLSAgICBzaXplX3QgdmFyeWluZ0xpbWl0ID0gMDsKLSAgICBTaEdldElu
Zm8oaGFuZGxlLCBTSF9WQVJZSU5HX01BWF9MRU5HVEgsICZ2YXJ5aW5nTGltaXQpOwotICAgIHJl
dHVybiAoZXhwZWN0ZWRWYWx1ZSA9PSBhY3RpdmVVbmlmb3JtTGltaXQgJiYKLSAgICAgICAgICAg
IGV4cGVjdGVkVmFsdWUgPT0gYWN0aXZlQXR0cmliTGltaXQgJiYKLSAgICAgICAgICAgIGV4cGVj
dGVkVmFsdWUgPT0gdmFyeWluZ0xpbWl0KTsKLX0KLQotc3RhdGljIGJvb2wgY2hlY2tNYXBwZWRO
YW1lTWF4TGVuZ3RoKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwgc2l6ZV90IGV4cGVjdGVkVmFsdWUp
Ci17Ci0gICAgc2l6ZV90IG1hcHBlZE5hbWVNYXhMZW5ndGggPSAwOwotICAgIFNoR2V0SW5mbyho
YW5kbGUsIFNIX01BUFBFRF9OQU1FX01BWF9MRU5HVEgsICZtYXBwZWROYW1lTWF4TGVuZ3RoKTsK
LSAgICByZXR1cm4gKGV4cGVjdGVkVmFsdWUgPT0gbWFwcGVkTmFtZU1heExlbmd0aCk7Ci19Ci0K
LS8vCi0vLyBEcml2ZXIgbXVzdCBjYWxsIHRoaXMgZmlyc3QsIG9uY2UsIGJlZm9yZSBkb2luZyBh
bnkgb3RoZXIgY29tcGlsZXIgb3BlcmF0aW9ucy4KLS8vIFN1YnNlcXVlbnQgY2FsbHMgdG8gdGhp
cyBmdW5jdGlvbiBhcmUgbm8tb3AuCi0vLwotaW50IFNoSW5pdGlhbGl6ZSgpCi17Ci0gICAgc3Rh
dGljIGNvbnN0IGJvb2wga0luaXRpYWxpemVkID0gSW5pdFByb2Nlc3MoKTsKLSAgICByZXR1cm4g
a0luaXRpYWxpemVkID8gMSA6IDA7Ci19Ci0KLS8vCi0vLyBDbGVhbnVwIHN5bWJvbCB0YWJsZXMK
LS8vCi1pbnQgU2hGaW5hbGl6ZSgpCi17Ci0gICAgRGV0YWNoUHJvY2VzcygpOwotICAgIHJldHVy
biAxOwotfQotCi0vLwotLy8gSW5pdGlhbGl6ZSBidWlsdC1pbiByZXNvdXJjZXMgd2l0aCBtaW5p
bXVtIGV4cGVjdGVkIHZhbHVlcy4KLS8vCi12b2lkIFNoSW5pdEJ1aWx0SW5SZXNvdXJjZXMoU2hC
dWlsdEluUmVzb3VyY2VzKiByZXNvdXJjZXMpCi17Ci0gICAgLy8gQ29uc3RhbnRzLgotICAgIHJl
c291cmNlcy0+TWF4VmVydGV4QXR0cmlicyA9IDg7Ci0gICAgcmVzb3VyY2VzLT5NYXhWZXJ0ZXhV
bmlmb3JtVmVjdG9ycyA9IDEyODsKLSAgICByZXNvdXJjZXMtPk1heFZhcnlpbmdWZWN0b3JzID0g
ODsKLSAgICByZXNvdXJjZXMtPk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzID0gMDsKLSAgICBy
ZXNvdXJjZXMtPk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSA4OwotICAgIHJlc291cmNl
cy0+TWF4VGV4dHVyZUltYWdlVW5pdHMgPSA4OwotICAgIHJlc291cmNlcy0+TWF4RnJhZ21lbnRV
bmlmb3JtVmVjdG9ycyA9IDE2OwotICAgIHJlc291cmNlcy0+TWF4RHJhd0J1ZmZlcnMgPSAxOwot
Ci0gICAgLy8gRXh0ZW5zaW9ucy4KLSAgICByZXNvdXJjZXMtPk9FU19zdGFuZGFyZF9kZXJpdmF0
aXZlcyA9IDA7Ci0gICAgcmVzb3VyY2VzLT5PRVNfRUdMX2ltYWdlX2V4dGVybmFsID0gMDsKLSAg
ICByZXNvdXJjZXMtPkFSQl90ZXh0dXJlX3JlY3RhbmdsZSA9IDA7Ci0gICAgcmVzb3VyY2VzLT5F
WFRfZHJhd19idWZmZXJzID0gMDsKLSAgICByZXNvdXJjZXMtPkVYVF9mcmFnX2RlcHRoID0gMDsK
LQotICAgIC8vIERpc2FibGUgaGlnaHAgcHJlY2lzaW9uIGluIGZyYWdtZW50IHNoYWRlciBieSBk
ZWZhdWx0LgotICAgIHJlc291cmNlcy0+RnJhZ21lbnRQcmVjaXNpb25IaWdoID0gMDsKLQotICAg
IC8vIERpc2FibGUgbmFtZSBoYXNoaW5nIGJ5IGRlZmF1bHQuCi0gICAgcmVzb3VyY2VzLT5IYXNo
RnVuY3Rpb24gPSBOVUxMOwotCi0gICAgcmVzb3VyY2VzLT5BcnJheUluZGV4Q2xhbXBpbmdTdHJh
dGVneSA9IFNIX0NMQU1QX1dJVEhfQ0xBTVBfSU5UUklOU0lDOwotfQotCi0vLwotLy8gRHJpdmVy
IGNhbGxzIHRoZXNlIHRvIGNyZWF0ZSBhbmQgZGVzdHJveSBjb21waWxlciBvYmplY3RzLgotLy8K
LVNoSGFuZGxlIFNoQ29uc3RydWN0Q29tcGlsZXIoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVy
U3BlYyBzcGVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaFNoYWRlck91dHB1dCBv
dXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNoQnVpbHRJblJlc291
cmNlcyogcmVzb3VyY2VzKQotewotICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2Fz
dDxUU2hIYW5kbGVCYXNlKj4oQ29uc3RydWN0Q29tcGlsZXIodHlwZSwgc3BlYywgb3V0cHV0KSk7
Ci0gICAgVENvbXBpbGVyKiBjb21waWxlciA9IGJhc2UtPmdldEFzQ29tcGlsZXIoKTsKLSAgICBp
ZiAoY29tcGlsZXIgPT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBHZW5lcmF0ZSBi
dWlsdC1pbiBzeW1ib2wgdGFibGUuCi0gICAgaWYgKCFjb21waWxlci0+SW5pdCgqcmVzb3VyY2Vz
KSkgewotICAgICAgICBTaERlc3RydWN0KGJhc2UpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0KLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZSk7Ci19Ci0KLXZvaWQg
U2hEZXN0cnVjdChTaEhhbmRsZSBoYW5kbGUpCi17Ci0gICAgaWYgKGhhbmRsZSA9PSAwKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBUU2hIYW5kbGVCYXNlKiBiYXNlID0gc3RhdGljX2Nhc3Q8VFNo
SGFuZGxlQmFzZSo+KGhhbmRsZSk7Ci0KLSAgICBpZiAoYmFzZS0+Z2V0QXNDb21waWxlcigpKQot
ICAgICAgICBEZWxldGVDb21waWxlcihiYXNlLT5nZXRBc0NvbXBpbGVyKCkpOwotfQotCi0vLwot
Ly8gRG8gYW4gYWN0dWFsIGNvbXBpbGUgb24gdGhlIGdpdmVuIHN0cmluZ3MuICBUaGUgcmVzdWx0
IGlzIGxlZnQgCi0vLyBpbiB0aGUgZ2l2ZW4gY29tcGlsZSBvYmplY3QuCi0vLwotLy8gUmV0dXJu
OiAgVGhlIHJldHVybiB2YWx1ZSBvZiBTaENvbXBpbGUgaXMgcmVhbGx5IGJvb2xlYW4sIGluZGlj
YXRpbmcKLS8vIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4KLS8vCi1pbnQgU2hDb21waWxlKAotICAgIGNv
bnN0IFNoSGFuZGxlIGhhbmRsZSwKLSAgICBjb25zdCBjaGFyKiBjb25zdCBzaGFkZXJTdHJpbmdz
W10sCi0gICAgc2l6ZV90IG51bVN0cmluZ3MsCi0gICAgaW50IGNvbXBpbGVPcHRpb25zKQotewot
ICAgIGlmIChoYW5kbGUgPT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBUU2hIYW5kbGVC
YXNlKiBiYXNlID0gcmVpbnRlcnByZXRfY2FzdDxUU2hIYW5kbGVCYXNlKj4oaGFuZGxlKTsKLSAg
ICBUQ29tcGlsZXIqIGNvbXBpbGVyID0gYmFzZS0+Z2V0QXNDb21waWxlcigpOwotICAgIGlmIChj
b21waWxlciA9PSAwKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGJvb2wgc3VjY2VzcyA9IGNv
bXBpbGVyLT5jb21waWxlKHNoYWRlclN0cmluZ3MsIG51bVN0cmluZ3MsIGNvbXBpbGVPcHRpb25z
KTsKLSAgICByZXR1cm4gc3VjY2VzcyA/IDEgOiAwOwotfQotCi12b2lkIFNoR2V0SW5mbyhjb25z
dCBTaEhhbmRsZSBoYW5kbGUsIFNoU2hhZGVySW5mbyBwbmFtZSwgc2l6ZV90KiBwYXJhbXMpCi17
Ci0gICAgaWYgKCFoYW5kbGUgfHwgIXBhcmFtcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVFNo
SGFuZGxlQmFzZSogYmFzZSA9IHN0YXRpY19jYXN0PFRTaEhhbmRsZUJhc2UqPihoYW5kbGUpOwot
ICAgIFRDb21waWxlciogY29tcGlsZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7Ci0gICAgaWYg
KCFjb21waWxlcikgcmV0dXJuOwotCi0gICAgc3dpdGNoKHBuYW1lKQotICAgIHsKLSAgICBjYXNl
IFNIX0lORk9fTE9HX0xFTkdUSDoKLSAgICAgICAgKnBhcmFtcyA9IGNvbXBpbGVyLT5nZXRJbmZv
U2luaygpLmluZm8uc2l6ZSgpICsgMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTSF9PQkpF
Q1RfQ09ERV9MRU5HVEg6Ci0gICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0SW5mb1Npbmso
KS5vYmouc2l6ZSgpICsgMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTSF9BQ1RJVkVfVU5J
Rk9STVM6Ci0gICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0VW5pZm9ybXMoKS5zaXplKCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU0hfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSDoK
LSAgICAgICAgKnBhcmFtcyA9IDEgKyAgTUFYX1NZTUJPTF9OQU1FX0xFTjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBTSF9BQ1RJVkVfQVRUUklCVVRFUzoKLSAgICAgICAgKnBhcmFtcyA9IGNv
bXBpbGVyLT5nZXRBdHRyaWJzKCkuc2l6ZSgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNI
X0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSDoKLSAgICAgICAgKnBhcmFtcyA9IDEgKyBNQVhf
U1lNQk9MX05BTUVfTEVOOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNIX1ZBUllJTkdTOgot
ICAgICAgICAqcGFyYW1zID0gY29tcGlsZXItPmdldFZhcnlpbmdzKCkuc2l6ZSgpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFNIX1ZBUllJTkdfTUFYX0xFTkdUSDoKLSAgICAgICAgKnBhcmFt
cyA9IDEgKyBNQVhfU1lNQk9MX05BTUVfTEVOOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNI
X01BUFBFRF9OQU1FX01BWF9MRU5HVEg6Ci0gICAgICAgIC8vIFVzZSBsb25nZXIgbGVuZ3RoIHRo
YW4gTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJWkUgdG8KLSAgICAgICAgLy8gaGFuZGxlIGFy
cmF5IGFuZCBzdHJ1Y3QgZGVyZWZlcmVuY2VzLgotICAgICAgICAqcGFyYW1zID0gMSArIE1BWF9T
WU1CT0xfTkFNRV9MRU47Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU0hfTkFNRV9NQVhfTEVO
R1RIOgotICAgICAgICAqcGFyYW1zID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgU0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSDoKLSAgICAgICAgaWYg
KGNvbXBpbGVyLT5nZXRIYXNoRnVuY3Rpb24oKSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAqcGFy
YW1zID0gMDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIDY0IGJpdHMgaGFzaGlu
ZyBvdXRwdXQgcmVxdWlyZXMgMTYgYnl0ZXMgZm9yIGhleCAKLSAgICAgICAgICAgIC8vIHJlcHJl
c2VudGF0aW9uLgotICAgICAgICAgICAgY29uc3QgY2hhciBIYXNoZWROYW1lUHJlZml4W10gPSBI
QVNIRURfTkFNRV9QUkVGSVg7Ci0gICAgICAgICAgICAqcGFyYW1zID0gMTYgKyBzaXplb2YoSGFz
aGVkTmFtZVByZWZpeCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTSF9I
QVNIRURfTkFNRVNfQ09VTlQ6Ci0gICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0TmFtZU1h
cCgpLnNpemUoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
LSAgICB9Ci19Ci0KLS8vCi0vLyBSZXR1cm4gYW55IGNvbXBpbGVyIGxvZyBvZiBtZXNzYWdlcyBm
b3IgdGhlIGFwcGxpY2F0aW9uLgotLy8KLXZvaWQgU2hHZXRJbmZvTG9nKGNvbnN0IFNoSGFuZGxl
IGhhbmRsZSwgY2hhciogaW5mb0xvZykKLXsKLSAgICBpZiAoIWhhbmRsZSB8fCAhaW5mb0xvZykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHN0YXRpY19jYXN0
PFRTaEhhbmRsZUJhc2UqPihoYW5kbGUpOwotICAgIFRDb21waWxlciogY29tcGlsZXIgPSBiYXNl
LT5nZXRBc0NvbXBpbGVyKCk7Ci0gICAgaWYgKCFjb21waWxlcikgcmV0dXJuOwotCi0gICAgVElu
Zm9TaW5rJiBpbmZvU2luayA9IGNvbXBpbGVyLT5nZXRJbmZvU2luaygpOwotICAgIHN0cmNweShp
bmZvTG9nLCBpbmZvU2luay5pbmZvLmNfc3RyKCkpOwotfQotCi0vLwotLy8gUmV0dXJuIGFueSBv
YmplY3QgY29kZS4KLS8vCi12b2lkIFNoR2V0T2JqZWN0Q29kZShjb25zdCBTaEhhbmRsZSBoYW5k
bGUsIGNoYXIqIG9iakNvZGUpCi17Ci0gICAgaWYgKCFoYW5kbGUgfHwgIW9iakNvZGUpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2FzdDxUU2hI
YW5kbGVCYXNlKj4oaGFuZGxlKTsKLSAgICBUQ29tcGlsZXIqIGNvbXBpbGVyID0gYmFzZS0+Z2V0
QXNDb21waWxlcigpOwotICAgIGlmICghY29tcGlsZXIpIHJldHVybjsKLQotICAgIFRJbmZvU2lu
ayYgaW5mb1NpbmsgPSBjb21waWxlci0+Z2V0SW5mb1NpbmsoKTsKLSAgICBzdHJjcHkob2JqQ29k
ZSwgaW5mb1Npbmsub2JqLmNfc3RyKCkpOwotfQotCi12b2lkIFNoR2V0VmFyaWFibGVJbmZvKGNv
bnN0IFNoSGFuZGxlIGhhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgU2hTaGFkZXJJbmZv
IHZhclR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90KiBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCog
c2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgU2hEYXRhVHlwZSogdHlwZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgU2hQcmVjaXNpb25UeXBlKiBwcmVjaXNpb24sCi0gICAgICAgICAgICAg
ICAgICAgICAgIGludCogc3RhdGljVXNlLAotICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBu
YW1lLAotICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBtYXBwZWROYW1lKQotewotICAgIGlm
ICghaGFuZGxlIHx8ICFzaXplIHx8ICF0eXBlIHx8ICFwcmVjaXNpb24gfHwgIXN0YXRpY1VzZSB8
fCAhbmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCgodmFyVHlwZSA9PSBTSF9BQ1RJ
VkVfQVRUUklCVVRFUykgfHwKLSAgICAgICAgICAgKHZhclR5cGUgPT0gU0hfQUNUSVZFX1VOSUZP
Uk1TKSB8fAotICAgICAgICAgICAodmFyVHlwZSA9PSBTSF9WQVJZSU5HUykpOwotCi0gICAgVFNo
SGFuZGxlQmFzZSogYmFzZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8VFNoSGFuZGxlQmFzZSo+KGhhbmRs
ZSk7Ci0gICAgVENvbXBpbGVyKiBjb21waWxlciA9IGJhc2UtPmdldEFzQ29tcGlsZXIoKTsKLSAg
ICBpZiAoY29tcGlsZXIgPT0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgVFZhcmlh
YmxlSW5mb0xpc3QmIHZhckxpc3QgPQotICAgICAgICB2YXJUeXBlID09IFNIX0FDVElWRV9BVFRS
SUJVVEVTID8gY29tcGlsZXItPmdldEF0dHJpYnMoKSA6Ci0gICAgICAgICAgICAodmFyVHlwZSA9
PSBTSF9BQ1RJVkVfVU5JRk9STVMgPyBjb21waWxlci0+Z2V0VW5pZm9ybXMoKSA6Ci0gICAgICAg
ICAgICAgICAgY29tcGlsZXItPmdldFZhcnlpbmdzKCkpOwotICAgIGlmIChpbmRleCA8IDAgfHwg
aW5kZXggPj0gc3RhdGljX2Nhc3Q8aW50Pih2YXJMaXN0LnNpemUoKSkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGNvbnN0IFRWYXJpYWJsZUluZm8mIHZhckluZm8gPSB2YXJMaXN0W2luZGV4XTsK
LSAgICBpZiAobGVuZ3RoKSAqbGVuZ3RoID0gdmFySW5mby5uYW1lLnNpemUoKTsKLSAgICAqc2l6
ZSA9IHZhckluZm8uc2l6ZTsKLSAgICAqdHlwZSA9IHZhckluZm8udHlwZTsKLSAgICBzd2l0Y2gg
KHZhckluZm8ucHJlY2lzaW9uKSB7Ci0gICAgY2FzZSBFYnBMb3c6Ci0gICAgICAgICpwcmVjaXNp
b24gPSBTSF9QUkVDSVNJT05fTE9XUDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnBNZWRp
dW06Ci0gICAgICAgICpwcmVjaXNpb24gPSBTSF9QUkVDSVNJT05fTUVESVVNUDsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBFYnBIaWdoOgotICAgICAgICAqcHJlY2lzaW9uID0gU0hfUFJFQ0lT
SU9OX0hJR0hQOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICAvLyBTb21l
IHR5cGVzIGRvZXMgbm90IHN1cHBvcnQgcHJlY2lzaW9uLCBmb3IgZXhhbXBsZSwgYm9vbGVhbi4K
LSAgICAgICAgKnByZWNpc2lvbiA9IFNIX1BSRUNJU0lPTl9VTkRFRklORUQ7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICAqc3RhdGljVXNlID0gdmFySW5mby5zdGF0aWNVc2UgPyAxIDogMDsK
LQotICAgIC8vIFRoaXMgc2l6ZSBtdXN0IG1hdGNoIHRoYXQgcXVlcmllZCBieQotICAgIC8vIFNI
X0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEgsIFNIX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdU
SCwgU0hfVkFSWUlOR19NQVhfTEVOR1RICi0gICAgLy8gaW4gU2hHZXRJbmZvLCBiZWxvdy4KLSAg
ICBzaXplX3QgdmFyaWFibGVMZW5ndGggPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsKLSAgICBB
U1NFUlQoY2hlY2tWYXJpYWJsZU1heExlbmd0aHMoaGFuZGxlLCB2YXJpYWJsZUxlbmd0aCkpOwot
ICAgIHN0cm5jcHkobmFtZSwgdmFySW5mby5uYW1lLmNfc3RyKCksIHZhcmlhYmxlTGVuZ3RoKTsK
LSAgICBuYW1lW3ZhcmlhYmxlTGVuZ3RoIC0gMV0gPSAwOwotICAgIGlmIChtYXBwZWROYW1lKSB7
Ci0gICAgICAgIC8vIFRoaXMgc2l6ZSBtdXN0IG1hdGNoIHRoYXQgcXVlcmllZCBieQotICAgICAg
ICAvLyBTSF9NQVBQRURfTkFNRV9NQVhfTEVOR1RIIGluIFNoR2V0SW5mbywgYmVsb3cuCi0gICAg
ICAgIHNpemVfdCBtYXhNYXBwZWROYW1lTGVuZ3RoID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47
Ci0gICAgICAgIEFTU0VSVChjaGVja01hcHBlZE5hbWVNYXhMZW5ndGgoaGFuZGxlLCBtYXhNYXBw
ZWROYW1lTGVuZ3RoKSk7Ci0gICAgICAgIHN0cm5jcHkobWFwcGVkTmFtZSwgdmFySW5mby5tYXBw
ZWROYW1lLmNfc3RyKCksIG1heE1hcHBlZE5hbWVMZW5ndGgpOwotICAgICAgICBtYXBwZWROYW1l
W21heE1hcHBlZE5hbWVMZW5ndGggLSAxXSA9IDA7Ci0gICAgfQotfQotCi12b2lkIFNoR2V0TmFt
ZUhhc2hpbmdFbnRyeShjb25zdCBTaEhhbmRsZSBoYW5kbGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBuYW1l
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogaGFzaGVkTmFtZSkKLXsKLSAgICBp
ZiAoIWhhbmRsZSB8fCAhbmFtZSB8fCAhaGFzaGVkTmFtZSB8fCBpbmRleCA8IDApCi0gICAgICAg
IHJldHVybjsKLQotICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2FzdDxUU2hIYW5k
bGVCYXNlKj4oaGFuZGxlKTsKLSAgICBUQ29tcGlsZXIqIGNvbXBpbGVyID0gYmFzZS0+Z2V0QXND
b21waWxlcigpOwotICAgIGlmICghY29tcGlsZXIpIHJldHVybjsKLQotICAgIGNvbnN0IE5hbWVN
YXAmIG5hbWVNYXAgPSBjb21waWxlci0+Z2V0TmFtZU1hcCgpOwotICAgIGlmIChpbmRleCA+PSBz
dGF0aWNfY2FzdDxpbnQ+KG5hbWVNYXAuc2l6ZSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
TmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuYW1lTWFwLmJlZ2luKCk7Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBpbmRleDsgKytpKQotICAgICAgICArK2l0OwotCi0gICAgc2l6ZV90IGxl
biA9IGl0LT5maXJzdC5sZW5ndGgoKSArIDE7Ci0gICAgc2l6ZV90IG1heF9sZW4gPSAwOwotICAg
IFNoR2V0SW5mbyhoYW5kbGUsIFNIX05BTUVfTUFYX0xFTkdUSCwgJm1heF9sZW4pOwotICAgIGlm
IChsZW4gPiBtYXhfbGVuKSB7Ci0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgICAgIGxlbiA9
IG1heF9sZW47Ci0gICAgfQotICAgIHN0cm5jcHkobmFtZSwgaXQtPmZpcnN0LmNfc3RyKCksIGxl
bik7Ci0gICAgLy8gVG8gYmUgb24gdGhlIHNhZmUgc2lkZSBpbiBjYXNlIHRoZSBzb3VyY2UgaXMg
bG9uZ2VyIHRoYW4gZXhwZWN0ZWQuCi0gICAgbmFtZVtsZW4gLSAxXSA9ICdcMCc7Ci0KLSAgICBs
ZW4gPSBpdC0+c2Vjb25kLmxlbmd0aCgpICsgMTsKLSAgICBtYXhfbGVuID0gMDsKLSAgICBTaEdl
dEluZm8oaGFuZGxlLCBTSF9IQVNIRURfTkFNRV9NQVhfTEVOR1RILCAmbWF4X2xlbik7Ci0gICAg
aWYgKGxlbiA+IG1heF9sZW4pIHsKLSAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICAgICAgbGVu
ID0gbWF4X2xlbjsKLSAgICB9Ci0gICAgc3RybmNweShoYXNoZWROYW1lLCBpdC0+c2Vjb25kLmNf
c3RyKCksIGxlbik7Ci0gICAgLy8gVG8gYmUgb24gdGhlIHNhZmUgc2lkZSBpbiBjYXNlIHRoZSBz
b3VyY2UgaXMgbG9uZ2VyIHRoYW4gZXhwZWN0ZWQuCi0gICAgaGFzaGVkTmFtZVtsZW4gLSAxXSA9
ICdcMCc7Ci19Ci0KLXZvaWQgU2hHZXRJbmZvUG9pbnRlcihjb25zdCBTaEhhbmRsZSBoYW5kbGUs
IFNoU2hhZGVySW5mbyBwbmFtZSwgdm9pZCoqIHBhcmFtcykKLXsKLSAgICBpZiAoIWhhbmRsZSB8
fCAhcGFyYW1zKQotICAgICAgICByZXR1cm47Ci0KLSAgICBUU2hIYW5kbGVCYXNlKiBiYXNlID0g
c3RhdGljX2Nhc3Q8VFNoSGFuZGxlQmFzZSo+KGhhbmRsZSk7Ci0gICAgVHJhbnNsYXRvckhMU0wq
IHRyYW5zbGF0b3IgPSBiYXNlLT5nZXRBc1RyYW5zbGF0b3JITFNMKCk7Ci0gICAgaWYgKCF0cmFu
c2xhdG9yKSByZXR1cm47Ci0KLSAgICBzd2l0Y2gocG5hbWUpCi0gICAgewotICAgIGNhc2UgU0hf
QUNUSVZFX1VOSUZPUk1TX0FSUkFZOgotICAgICAgICAqcGFyYW1zID0gKHZvaWQqKSZ0cmFuc2xh
dG9yLT5nZXRVbmlmb3JtcygpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOwotICAgIH0KLX0KLQotaW50IFNoQ2hlY2tWYXJpYWJsZXNXaXRoaW5QYWNraW5nTGlt
aXRzKAotICAgIGludCBtYXhWZWN0b3JzLCBTaFZhcmlhYmxlSW5mbyogdmFySW5mb0FycmF5LCBz
aXplX3QgdmFySW5mb0FycmF5U2l6ZSkKLXsKLSAgICBpZiAodmFySW5mb0FycmF5U2l6ZSA9PSAw
KQotICAgICAgICByZXR1cm4gMTsKLSAgICBBU1NFUlQodmFySW5mb0FycmF5KTsKLSAgICBUVmFy
aWFibGVJbmZvTGlzdCB2YXJpYWJsZXM7Ci0gICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHZh
ckluZm9BcnJheVNpemU7ICsraWkpCi0gICAgewotICAgICAgICBUVmFyaWFibGVJbmZvIHZhcih2
YXJJbmZvQXJyYXlbaWldLnR5cGUsIHZhckluZm9BcnJheVtpaV0uc2l6ZSk7Ci0gICAgICAgIHZh
cmlhYmxlcy5wdXNoX2JhY2sodmFyKTsKLSAgICB9Ci0gICAgVmFyaWFibGVQYWNrZXIgcGFja2Vy
OwotICAgIHJldHVybiBwYWNrZXIuQ2hlY2tWYXJpYWJsZXNXaXRoaW5QYWNraW5nTGltaXRzKG1h
eFZlY3RvcnMsIHZhcmlhYmxlcykgPyAxIDogMDsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBhN2NlMjE2ODBmNWVlY2RiNTkwYzFkNWM2YzViNGEwNWZiOTZkNmM2Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwyMTYgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8KLS8vIFN5bWJvbCB0YWJs
ZSBmb3IgcGFyc2luZy4gIE1vc3QgZnVuY3Rpb25hbGl5IGFuZCBtYWluIGlkZWFzCi0vLyBhcmUg
ZG9jdW1lbnRlZCBpbiB0aGUgaGVhZGVyIGZpbGUuCi0vLwotCi0jaWYgZGVmaW5lZChfTVNDX1ZF
UikKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzE4KQotI2VuZGlmCi0KLSNpbmNsdWRlICJj
b21waWxlci9TeW1ib2xUYWJsZS5oIgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxh
bGdvcml0aG0+Ci0jaW5jbHVkZSA8Y2xpbWl0cz4KLQotVFR5cGU6OlRUeXBlKGNvbnN0IFRQdWJs
aWNUeXBlICZwKSA6Ci0gICAgICAgICAgICB0eXBlKHAudHlwZSksIHByZWNpc2lvbihwLnByZWNp
c2lvbiksIHF1YWxpZmllcihwLnF1YWxpZmllciksIHNpemUocC5zaXplKSwgbWF0cml4KHAubWF0
cml4KSwgYXJyYXkocC5hcnJheSksIGFycmF5U2l6ZShwLmFycmF5U2l6ZSksIHN0cnVjdHVyZSgw
KQotewotICAgIGlmIChwLnVzZXJEZWYpCi0gICAgICAgIHN0cnVjdHVyZSA9IHAudXNlckRlZi0+
Z2V0U3RydWN0KCk7Ci19Ci0KLS8vCi0vLyBSZWN1cnNpdmVseSBnZW5lcmF0ZSBtYW5nbGVkIG5h
bWVzLgotLy8KLVRTdHJpbmcgVFR5cGU6OmJ1aWxkTWFuZ2xlZE5hbWUoKSBjb25zdAotewotICAg
IFRTdHJpbmcgbWFuZ2xlZE5hbWU7Ci0gICAgaWYgKGlzTWF0cml4KCkpCi0gICAgICAgIG1hbmds
ZWROYW1lICs9ICdtJzsKLSAgICBlbHNlIGlmIChpc1ZlY3RvcigpKQotICAgICAgICBtYW5nbGVk
TmFtZSArPSAndic7Ci0KLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEVidEZsb2F0OiAg
ICAgICBtYW5nbGVkTmFtZSArPSAnZic7ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRJbnQ6ICAg
ICAgICAgbWFuZ2xlZE5hbWUgKz0gJ2knOyAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0Qm9vbDog
ICAgICAgIG1hbmdsZWROYW1lICs9ICdiJzsgICAgICBicmVhazsKLSAgICBjYXNlIEVidFNhbXBs
ZXIyRDogICBtYW5nbGVkTmFtZSArPSAiczIiOyAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRTYW1w
bGVyQ3ViZTogbWFuZ2xlZE5hbWUgKz0gInNDIjsgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0U3Ry
dWN0OiAgICAgIG1hbmdsZWROYW1lICs9IHN0cnVjdHVyZS0+bWFuZ2xlZE5hbWUoKTsgYnJlYWs7
Ci0gICAgZGVmYXVsdDogICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgbWFuZ2xlZE5h
bWUgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oJzAnICsgZ2V0Tm9taW5hbFNpemUoKSk7Ci0gICAgaWYg
KGlzQXJyYXkoKSkgewotICAgICAgICBjaGFyIGJ1ZlsyMF07Ci0gICAgICAgIHNucHJpbnRmKGJ1
Ziwgc2l6ZW9mKGJ1ZiksICIlZCIsIGFycmF5U2l6ZSk7Ci0gICAgICAgIG1hbmdsZWROYW1lICs9
ICdbJzsKLSAgICAgICAgbWFuZ2xlZE5hbWUgKz0gYnVmOwotICAgICAgICBtYW5nbGVkTmFtZSAr
PSAnXSc7Ci0gICAgfQotICAgIHJldHVybiBtYW5nbGVkTmFtZTsKLX0KLQotc2l6ZV90IFRUeXBl
OjpnZXRPYmplY3RTaXplKCkgY29uc3QKLXsKLSAgICBzaXplX3QgdG90YWxTaXplID0gMDsKLQot
ICAgIGlmIChnZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCi0gICAgICAgIHRvdGFsU2l6ZSA9
IHN0cnVjdHVyZS0+b2JqZWN0U2l6ZSgpOwotICAgIGVsc2UgaWYgKG1hdHJpeCkKLSAgICAgICAg
dG90YWxTaXplID0gc2l6ZSAqIHNpemU7Ci0gICAgZWxzZQotICAgICAgICB0b3RhbFNpemUgPSBz
aXplOwotCi0gICAgaWYgKGlzQXJyYXkoKSkgewotICAgICAgICBzaXplX3QgYXJyYXlTaXplID0g
Z2V0QXJyYXlTaXplKCk7Ci0gICAgICAgIGlmIChhcnJheVNpemUgPiBJTlRfTUFYIC8gdG90YWxT
aXplKQotICAgICAgICAgICAgdG90YWxTaXplID0gSU5UX01BWDsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgdG90YWxTaXplICo9IGFycmF5U2l6ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG90
YWxTaXplOwotfQotCi1ib29sIFRTdHJ1Y3R1cmU6OmNvbnRhaW5zQXJyYXlzKCkgY29uc3QKLXsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1GaWVsZHMtPnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIGNvbnN0IFRUeXBlKiBmaWVsZFR5cGUgPSAoKm1GaWVsZHMpW2ldLT50eXBlKCk7Ci0gICAg
ICAgIGlmIChmaWVsZFR5cGUtPmlzQXJyYXkoKSB8fCBmaWVsZFR5cGUtPmlzU3RydWN0dXJlQ29u
dGFpbmluZ0FycmF5cygpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotVFN0cmluZyBUU3RydWN0dXJlOjpidWlsZE1hbmdsZWROYW1lKCkg
Y29uc3QKLXsKLSAgICBUU3RyaW5nIG1hbmdsZWROYW1lKCJzdHJ1Y3QtIik7Ci0gICAgbWFuZ2xl
ZE5hbWUgKz0gKm1OYW1lOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUZpZWxkcy0+c2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJy0nOwotICAgICAgICBtYW5nbGVk
TmFtZSArPSAoKm1GaWVsZHMpW2ldLT50eXBlKCktPmdldE1hbmdsZWROYW1lKCk7Ci0gICAgfQot
ICAgIHJldHVybiBtYW5nbGVkTmFtZTsKLX0KLQotc2l6ZV90IFRTdHJ1Y3R1cmU6OmNhbGN1bGF0
ZU9iamVjdFNpemUoKSBjb25zdAotewotICAgIHNpemVfdCBzaXplID0gMDsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1GaWVsZHMtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHNpemVfdCBm
aWVsZFNpemUgPSAoKm1GaWVsZHMpW2ldLT50eXBlKCktPmdldE9iamVjdFNpemUoKTsKLSAgICAg
ICAgaWYgKGZpZWxkU2l6ZSA+IElOVF9NQVggLSBzaXplKQotICAgICAgICAgICAgc2l6ZSA9IElO
VF9NQVg7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNpemUgKz0gZmllbGRTaXplOwotICAg
IH0KLSAgICByZXR1cm4gc2l6ZTsKLX0KLQotaW50IFRTdHJ1Y3R1cmU6OmNhbGN1bGF0ZURlZXBl
c3ROZXN0aW5nKCkgY29uc3QKLXsKLSAgICBpbnQgbWF4TmVzdGluZyA9IDA7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtRmllbGRzLT5zaXplKCk7ICsraSkgewotICAgICAgICBtYXhOZXN0
aW5nID0gc3RkOjptYXgobWF4TmVzdGluZywgKCptRmllbGRzKVtpXS0+dHlwZSgpLT5nZXREZWVw
ZXN0U3RydWN0TmVzdGluZygpKTsKLSAgICB9Ci0gICAgcmV0dXJuIDEgKyBtYXhOZXN0aW5nOwot
fQotCi0vLwotLy8gRHVtcCBmdW5jdGlvbnMuCi0vLwotCi12b2lkIFRWYXJpYWJsZTo6ZHVtcChU
SW5mb1NpbmsmIGluZm9TaW5rKSBjb25zdAotewotICAgIGluZm9TaW5rLmRlYnVnIDw8IGdldE5h
bWUoKS5jX3N0cigpIDw8ICI6ICIgPDwgdHlwZS5nZXRRdWFsaWZpZXJTdHJpbmcoKSA8PCAiICIg
PDwgdHlwZS5nZXRQcmVjaXNpb25TdHJpbmcoKSA8PCAiICIgPDwgdHlwZS5nZXRCYXNpY1N0cmlu
ZygpOwotICAgIGlmICh0eXBlLmlzQXJyYXkoKSkgewotICAgICAgICBpbmZvU2luay5kZWJ1ZyA8
PCAiWzBdIjsKLSAgICB9Ci0gICAgaW5mb1NpbmsuZGVidWcgPDwgIlxuIjsKLX0KLQotdm9pZCBU
RnVuY3Rpb246OmR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3QKLXsKLSAgICBpbmZvU2lu
ay5kZWJ1ZyA8PCBnZXROYW1lKCkuY19zdHIoKSA8PCAiOiAiIDw8ICByZXR1cm5UeXBlLmdldEJh
c2ljU3RyaW5nKCkgPDwgIiAiIDw8IGdldE1hbmdsZWROYW1lKCkuY19zdHIoKSA8PCAiXG4iOwot
fQotCi12b2lkIFRTeW1ib2xUYWJsZUxldmVsOjpkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNv
bnN0Ci17Ci0gICAgdExldmVsOjpjb25zdF9pdGVyYXRvciBpdDsKLSAgICBmb3IgKGl0ID0gbGV2
ZWwuYmVnaW4oKTsgaXQgIT0gbGV2ZWwuZW5kKCk7ICsraXQpCi0gICAgICAgICgqaXQpLnNlY29u
ZC0+ZHVtcChpbmZvU2luayk7Ci19Ci0KLXZvaWQgVFN5bWJvbFRhYmxlOjpkdW1wKFRJbmZvU2lu
ayAmaW5mb1NpbmspIGNvbnN0Ci17Ci0gICAgZm9yIChpbnQgbGV2ZWwgPSBjdXJyZW50TGV2ZWwo
KTsgbGV2ZWwgPj0gMDsgLS1sZXZlbCkgewotICAgICAgICBpbmZvU2luay5kZWJ1ZyA8PCAiTEVW
RUwgIiA8PCBsZXZlbCA8PCAiXG4iOwotICAgICAgICB0YWJsZVtsZXZlbF0tPmR1bXAoaW5mb1Np
bmspOwotICAgIH0KLX0KLQotLy8KLS8vIEZ1bmN0aW9ucyBoYXZlIGJ1cmllZCBwb2ludGVycyB0
byBkZWxldGUuCi0vLwotVEZ1bmN0aW9uOjp+VEZ1bmN0aW9uKCkKLXsKLSAgICBmb3IgKFRQYXJh
bUxpc3Q6Oml0ZXJhdG9yIGkgPSBwYXJhbWV0ZXJzLmJlZ2luKCk7IGkgIT0gcGFyYW1ldGVycy5l
bmQoKTsgKytpKQotICAgICAgICBkZWxldGUgKCppKS50eXBlOwotfQotCi0vLwotLy8gU3ltYm9s
IHRhYmxlIGxldmVscyBhcmUgYSBtYXAgb2YgcG9pbnRlcnMgdG8gc3ltYm9scyB0aGF0IGhhdmUg
dG8gYmUgZGVsZXRlZC4KLS8vCi1UU3ltYm9sVGFibGVMZXZlbDo6flRTeW1ib2xUYWJsZUxldmVs
KCkKLXsKLSAgICBmb3IgKHRMZXZlbDo6aXRlcmF0b3IgaXQgPSBsZXZlbC5iZWdpbigpOyBpdCAh
PSBsZXZlbC5lbmQoKTsgKytpdCkKLSAgICAgICAgZGVsZXRlICgqaXQpLnNlY29uZDsKLX0KLQot
Ly8KLS8vIENoYW5nZSBhbGwgZnVuY3Rpb24gZW50cmllcyBpbiB0aGUgdGFibGUgd2l0aCB0aGUg
bm9uLW1hbmdsZWQgbmFtZQotLy8gdG8gYmUgcmVsYXRlZCB0byB0aGUgcHJvdmlkZWQgYnVpbHQt
aW4gb3BlcmF0aW9uLiAgVGhpcyBpcyBhIGxvdwotLy8gcGVyZm9ybWFuY2Ugb3BlcmF0aW9uLCBh
bmQgb25seSBpbnRlbmRlZCBmb3Igc3ltYm9sIHRhYmxlcyB0aGF0Ci0vLyBsaXZlIGFjcm9zcyBh
IGxhcmdlIG51bWJlciBvZiBjb21waWxlcy4KLS8vCi12b2lkIFRTeW1ib2xUYWJsZUxldmVsOjpy
ZWxhdGVUb09wZXJhdG9yKGNvbnN0IGNoYXIqIG5hbWUsIFRPcGVyYXRvciBvcCkKLXsKLSAgICB0
TGV2ZWw6Oml0ZXJhdG9yIGl0OwotICAgIGZvciAoaXQgPSBsZXZlbC5iZWdpbigpOyBpdCAhPSBs
ZXZlbC5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoKCppdCkuc2Vjb25kLT5pc0Z1bmN0aW9u
KCkpIHsKLSAgICAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxURnVu
Y3Rpb24qPigoKml0KS5zZWNvbmQpOwotICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLT5nZXROYW1l
KCkgPT0gbmFtZSkKLSAgICAgICAgICAgICAgICBmdW5jdGlvbi0+cmVsYXRlVG9PcGVyYXRvcihv
cCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8vCi0vLyBDaGFuZ2UgYWxsIGZ1bmN0aW9uIGVu
dHJpZXMgaW4gdGhlIHRhYmxlIHdpdGggdGhlIG5vbi1tYW5nbGVkIG5hbWUKLS8vIHRvIGJlIHJl
bGF0ZWQgdG8gdGhlIHByb3ZpZGVkIGJ1aWx0LWluIGV4dGVuc2lvbi4gVGhpcyBpcyBhIGxvdwot
Ly8gcGVyZm9ybWFuY2Ugb3BlcmF0aW9uLCBhbmQgb25seSBpbnRlbmRlZCBmb3Igc3ltYm9sIHRh
YmxlcyB0aGF0Ci0vLyBsaXZlIGFjcm9zcyBhIGxhcmdlIG51bWJlciBvZiBjb21waWxlcy4KLS8v
Ci12b2lkIFRTeW1ib2xUYWJsZUxldmVsOjpyZWxhdGVUb0V4dGVuc2lvbihjb25zdCBjaGFyKiBu
YW1lLCBjb25zdCBUU3RyaW5nJiBleHQpCi17Ci0gICAgZm9yICh0TGV2ZWw6Oml0ZXJhdG9yIGl0
ID0gbGV2ZWwuYmVnaW4oKTsgaXQgIT0gbGV2ZWwuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgVFN5
bWJvbCogc3ltYm9sID0gaXQtPnNlY29uZDsKLSAgICAgICAgaWYgKHN5bWJvbC0+Z2V0TmFtZSgp
ID09IG5hbWUpCi0gICAgICAgICAgICBzeW1ib2wtPnJlbGF0ZVRvRXh0ZW5zaW9uKGV4dCk7Ci0g
ICAgfQotfQotCi1UU3ltYm9sVGFibGU6On5UU3ltYm9sVGFibGUoKQotewotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgdGFibGUuc2l6ZSgpOyArK2kpCi0gICAgICAgIGRlbGV0ZSB0YWJsZVtp
XTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZWNpc2lvblN0YWNrLnNpemUoKTsgKytp
KQotICAgICAgICBkZWxldGUgcHJlY2lzaW9uU3RhY2tbaV07Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBiZWJhZDRiOTJlNzkwYmM2MjUzZDAyZWMwZjA3NjYxZjk4YzQzODBj
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5oCisrKyAvZGV2L251bGwK
QEAgLTEsMzgyICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgX1NZTUJPTF9U
QUJMRV9JTkNMVURFRF8KLSNkZWZpbmUgX1NZTUJPTF9UQUJMRV9JTkNMVURFRF8KLQotLy8KLS8v
IFN5bWJvbCB0YWJsZSBmb3IgcGFyc2luZy4gIEhhcyB0aGVzZSBkZXNpZ24gY2hhcmFjdGVyaXN0
aWNzOgotLy8KLS8vICogU2FtZSBzeW1ib2wgdGFibGUgY2FuIGJlIHVzZWQgdG8gY29tcGlsZSBt
YW55IHNoYWRlcnMsIHRvIHByZXNlcnZlCi0vLyAgIGVmZm9ydCBvZiBjcmVhdGluZyBhbmQgbG9h
ZGluZyB3aXRoIHRoZSBsYXJnZSBudW1iZXJzIG9mIGJ1aWx0LWluCi0vLyAgIHN5bWJvbHMuCi0v
LwotLy8gKiBOYW1lIG1hbmdsaW5nIHdpbGwgYmUgdXNlZCB0byBnaXZlIGVhY2ggZnVuY3Rpb24g
YSB1bmlxdWUgbmFtZQotLy8gICBzbyB0aGF0IHN5bWJvbCB0YWJsZSBsb29rdXBzIGFyZSBuZXZl
ciBhbWJpZ3VvdXMuICBUaGlzIGFsbG93cwotLy8gICBhIHNpbXBsZXIgc3ltYm9sIHRhYmxlIHN0
cnVjdHVyZS4KLS8vCi0vLyAqIFB1c2hpbmcgYW5kIHBvcHBpbmcgb2Ygc2NvcGUsIHNvIHN5bWJv
bCB0YWJsZSB3aWxsIHJlYWxseSBiZSBhIHN0YWNrIAotLy8gICBvZiBzeW1ib2wgdGFibGVzLiAg
U2VhcmNoZWQgZnJvbSB0aGUgdG9wLCB3aXRoIG5ldyBpbnNlcnRzIGdvaW5nIGludG8KLS8vICAg
dGhlIHRvcC4KLS8vCi0vLyAqIENvbnN0YW50czogIENvbXBpbGUgdGltZSBjb25zdGFudCBzeW1i
b2xzIHdpbGwga2VlcCB0aGVpciB2YWx1ZXMKLS8vICAgaW4gdGhlIHN5bWJvbCB0YWJsZS4gIFRo
ZSBwYXJzZXIgY2FuIHN1YnN0aXR1dGUgY29uc3RhbnRzIGF0IHBhcnNlCi0vLyAgIHRpbWUsIGlu
Y2x1ZGluZyBkb2luZyBjb25zdGFudCBmb2xkaW5nIGFuZCBjb25zdGFudCBwcm9wYWdhdGlvbi4K
LS8vCi0vLyAqIE5vIHRlbXBvcmFyaWVzOiAgVGVtcG9yYXJpZXMgbWFkZSBmcm9tIG9wZXJhdGlv
bnMgKCssIC0tLCAueHksIGV0Yy4pCi0vLyAgIGFyZSB0cmFja2VkIGluIHRoZSBpbnRlcm1lZGlh
dGUgcmVwcmVzZW50YXRpb24sIG5vdCB0aGUgc3ltYm9sIHRhYmxlLgotLy8KLQotI2luY2x1ZGUg
PGFzc2VydC5oPgotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRlICJj
b21waWxlci9JbmZvU2luay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgot
Ci0vLwotLy8gU3ltYm9sIGJhc2UgY2xhc3MuICAoQ2FuIGJ1aWxkIGZ1bmN0aW9ucyBvciB2YXJp
YWJsZXMgb3V0IG9mIHRoZXNlLi4uKQotLy8KLWNsYXNzIFRTeW1ib2wgeyAgICAKLXB1YmxpYzoK
LSAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKCk7Ci0gICAgVFN5bWJvbChjb25zdCBUU3Ry
aW5nKiBuKSA6ICB1bmlxdWVJZCgwKSwgbmFtZShuKSB7IH0KLSAgICB2aXJ0dWFsIH5UU3ltYm9s
KCkgeyAvKiBkb24ndCBkZWxldGUgbmFtZSwgaXQncyBmcm9tIHRoZSBwb29sICovIH0KLQotICAg
IGNvbnN0IFRTdHJpbmcmIGdldE5hbWUoKSBjb25zdCB7IHJldHVybiAqbmFtZTsgfQotICAgIHZp
cnR1YWwgY29uc3QgVFN0cmluZyYgZ2V0TWFuZ2xlZE5hbWUoKSBjb25zdCB7IHJldHVybiBnZXRO
YW1lKCk7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzVmFyaWFibGUoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQotICAgIHZvaWQgc2V0VW5pcXVlSWQoaW50IGlkKSB7IHVuaXF1ZUlkID0gaWQ7IH0KLSAg
ICBpbnQgZ2V0VW5pcXVlSWQoKSBjb25zdCB7IHJldHVybiB1bmlxdWVJZDsgfQotICAgIHZpcnR1
YWwgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0ID0gMDsKLSAgICB2b2lkIHJl
bGF0ZVRvRXh0ZW5zaW9uKGNvbnN0IFRTdHJpbmcmIGV4dCkgeyBleHRlbnNpb24gPSBleHQ7IH0K
LSAgICBjb25zdCBUU3RyaW5nJiBnZXRFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiBleHRlbnNp
b247IH0KLQotcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVFN5bWJvbCk7
Ci0KLSAgICBpbnQgdW5pcXVlSWQ7ICAgICAgLy8gRm9yIHJlYWwgY29tcGFyaW5nIGR1cmluZyBj
b2RlIGdlbmVyYXRpb24KLSAgICBjb25zdCBUU3RyaW5nICpuYW1lOwotICAgIFRTdHJpbmcgZXh0
ZW5zaW9uOwotfTsKLQotLy8KLS8vIFZhcmlhYmxlIGNsYXNzLCBtZWFuaW5nIGEgc3ltYm9sIHRo
YXQncyBub3QgYSBmdW5jdGlvbi4KLS8vIAotLy8gVGhlcmUgY291bGQgYmUgYSBzZXBhcmF0ZSBj
bGFzcyBoZWlyYXJjaHkgZm9yIENvbnN0YW50IHZhcmlhYmxlczsKLS8vIE9ubHkgb25lIG9mIGlu
dCwgYm9vbCwgb3IgZmxvYXQsIChvciBub25lKSBpcyBjb3JyZWN0IGZvcgotLy8gYW55IHBhcnRp
Y3VsYXIgdXNlLCBidXQgaXQncyBlYXN5IHRvIGRvIHRoaXMgd2F5LCBhbmQgZG9lc24ndAotLy8g
c2VlbSB3b3J0aCBoYXZpbmcgc2VwYXJhdGUgY2xhc3NlcywgYW5kICJnZXRDb25zdCIgY2FuJ3Qg
c2ltcGx5IHJldHVybgotLy8gZGlmZmVyZW50IHZhbHVlcyBmb3IgZGlmZmVyZW50IHR5cGVzIHBv
bHltb3JwaGljYWxseSwgc28gdGhpcyBpcyAKLS8vIGp1c3Qgc2ltcGxlIGFuZCBwcmFnbWF0aWMu
Ci0vLwotY2xhc3MgVFZhcmlhYmxlIDogcHVibGljIFRTeW1ib2wgewotcHVibGljOgotICAgIFRW
YXJpYWJsZShjb25zdCBUU3RyaW5nICpuYW1lLCBjb25zdCBUVHlwZSYgdCwgYm9vbCB1VCA9IGZh
bHNlICkgOiBUU3ltYm9sKG5hbWUpLCB0eXBlKHQpLCB1c2VyVHlwZSh1VCksIHVuaW9uQXJyYXko
MCkgeyB9Ci0gICAgdmlydHVhbCB+VFZhcmlhYmxlKCkgeyB9Ci0gICAgdmlydHVhbCBib29sIGlz
VmFyaWFibGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9ICAgIAotICAgIFRUeXBlJiBnZXRUeXBl
KCkgeyByZXR1cm4gdHlwZTsgfSAgICAKLSAgICBjb25zdCBUVHlwZSYgZ2V0VHlwZSgpIGNvbnN0
IHsgcmV0dXJuIHR5cGU7IH0KLSAgICBib29sIGlzVXNlclR5cGUoKSBjb25zdCB7IHJldHVybiB1
c2VyVHlwZTsgfQotICAgIHZvaWQgc2V0UXVhbGlmaWVyKFRRdWFsaWZpZXIgcXVhbGlmaWVyKSB7
IHR5cGUuc2V0UXVhbGlmaWVyKHF1YWxpZmllcik7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBkdW1w
KFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0OwotCi0gICAgQ29uc3RhbnRVbmlvbiogZ2V0Q29u
c3RQb2ludGVyKCkKLSAgICB7IAotICAgICAgICBpZiAoIXVuaW9uQXJyYXkpCi0gICAgICAgICAg
ICB1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bdHlwZS5nZXRPYmplY3RTaXplKCldOwot
Ci0gICAgICAgIHJldHVybiB1bmlvbkFycmF5OwotICAgIH0KLQotICAgIENvbnN0YW50VW5pb24q
IGdldENvbnN0UG9pbnRlcigpIGNvbnN0IHsgcmV0dXJuIHVuaW9uQXJyYXk7IH0KLQotICAgIHZv
aWQgc2hhcmVDb25zdFBvaW50ZXIoIENvbnN0YW50VW5pb24gKmNvbnN0QXJyYXkpCi0gICAgewot
ICAgICAgICBpZiAodW5pb25BcnJheSA9PSBjb25zdEFycmF5KQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIGRlbGV0ZVtdIHVuaW9uQXJyYXk7Ci0gICAgICAgIHVuaW9uQXJyYXkgPSBj
b25zdEFycmF5OyAgCi0gICAgfQotCi1wcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihUVmFyaWFibGUpOwotCi0gICAgVFR5cGUgdHlwZTsKLSAgICBib29sIHVzZXJUeXBlOwot
ICAgIC8vIHdlIGFyZSBhc3N1bWluZyB0aGF0IFBvb2wgQWxsb2NhdG9yIHdpbGwgZnJlZSB0aGUg
bWVtb3J5IGFsbG9jYXRlZCB0byB1bmlvbkFycmF5Ci0gICAgLy8gd2hlbiB0aGlzIG9iamVjdCBp
cyBkZXN0cm95ZWQKLSAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5OwotfTsKLQotLy8KLS8v
IFRoZSBmdW5jdGlvbiBzdWItY2xhc3Mgb2Ygc3ltYm9scyBhbmQgdGhlIHBhcnNlciB3aWxsIG5l
ZWQgdG8KLS8vIHNoYXJlIHRoaXMgZGVmaW5pdGlvbiBvZiBhIGZ1bmN0aW9uIHBhcmFtZXRlci4K
LS8vCi1zdHJ1Y3QgVFBhcmFtZXRlciB7Ci0gICAgVFN0cmluZyAqbmFtZTsKLSAgICBUVHlwZSog
dHlwZTsKLX07Ci0KLS8vCi0vLyBUaGUgZnVuY3Rpb24gc3ViLWNsYXNzIG9mIGEgc3ltYm9sLiAg
Ci0vLwotY2xhc3MgVEZ1bmN0aW9uIDogcHVibGljIFRTeW1ib2wgewotcHVibGljOgotICAgIFRG
dW5jdGlvbihUT3BlcmF0b3IgbykgOgotICAgICAgICBUU3ltYm9sKDApLAotICAgICAgICByZXR1
cm5UeXBlKFRUeXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCkpLAotICAgICAgICBvcChvKSwKLSAg
ICAgICAgZGVmaW5lZChmYWxzZSkgeyB9Ci0gICAgVEZ1bmN0aW9uKGNvbnN0IFRTdHJpbmcgKm5h
bWUsIFRUeXBlJiByZXRUeXBlLCBUT3BlcmF0b3IgdE9wID0gRU9wTnVsbCkgOiAKLSAgICAgICAg
VFN5bWJvbChuYW1lKSwgCi0gICAgICAgIHJldHVyblR5cGUocmV0VHlwZSksCi0gICAgICAgIG1h
bmdsZWROYW1lKFRGdW5jdGlvbjo6bWFuZ2xlTmFtZSgqbmFtZSkpLAotICAgICAgICBvcCh0T3Ap
LAotICAgICAgICBkZWZpbmVkKGZhbHNlKSB7IH0KLSAgICB2aXJ0dWFsIH5URnVuY3Rpb24oKTsK
LSAgICB2aXJ0dWFsIGJvb2wgaXNGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0gICAg
Ci0KLSAgICBzdGF0aWMgVFN0cmluZyBtYW5nbGVOYW1lKGNvbnN0IFRTdHJpbmcmIG5hbWUpIHsg
cmV0dXJuIG5hbWUgKyAnKCc7IH0KLSAgICBzdGF0aWMgVFN0cmluZyB1bm1hbmdsZU5hbWUoY29u
c3QgVFN0cmluZyYgbWFuZ2xlZE5hbWUpCi0gICAgewotICAgICAgICByZXR1cm4gVFN0cmluZyht
YW5nbGVkTmFtZS5jX3N0cigpLCBtYW5nbGVkTmFtZS5maW5kX2ZpcnN0X29mKCcoJykpOwotICAg
IH0KLQotICAgIHZvaWQgYWRkUGFyYW1ldGVyKFRQYXJhbWV0ZXImIHApIAotICAgIHsgCi0gICAg
ICAgIHBhcmFtZXRlcnMucHVzaF9iYWNrKHApOwotICAgICAgICBtYW5nbGVkTmFtZSA9IG1hbmds
ZWROYW1lICsgcC50eXBlLT5nZXRNYW5nbGVkTmFtZSgpOwotICAgIH0KLQotICAgIGNvbnN0IFRT
dHJpbmcmIGdldE1hbmdsZWROYW1lKCkgY29uc3QgeyByZXR1cm4gbWFuZ2xlZE5hbWU7IH0KLSAg
ICBjb25zdCBUVHlwZSYgZ2V0UmV0dXJuVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHJldHVyblR5cGU7
IH0KLQotICAgIHZvaWQgcmVsYXRlVG9PcGVyYXRvcihUT3BlcmF0b3IgbykgeyBvcCA9IG87IH0K
LSAgICBUT3BlcmF0b3IgZ2V0QnVpbHRJbk9wKCkgY29uc3QgeyByZXR1cm4gb3A7IH0KLQotICAg
IHZvaWQgc2V0RGVmaW5lZCgpIHsgZGVmaW5lZCA9IHRydWU7IH0KLSAgICBib29sIGlzRGVmaW5l
ZCgpIHsgcmV0dXJuIGRlZmluZWQ7IH0KLQotICAgIHNpemVfdCBnZXRQYXJhbUNvdW50KCkgY29u
c3QgeyByZXR1cm4gcGFyYW1ldGVycy5zaXplKCk7IH0gIAotICAgIGNvbnN0IFRQYXJhbWV0ZXIm
IGdldFBhcmFtKHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBwYXJhbWV0ZXJzW2ldOyB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdDsKLQotcHJpdmF0
ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVEZ1bmN0aW9uKTsKLQotICAgIHR5cGVk
ZWYgVFZlY3RvcjxUUGFyYW1ldGVyPiBUUGFyYW1MaXN0OwotICAgIFRQYXJhbUxpc3QgcGFyYW1l
dGVyczsKLSAgICBUVHlwZSByZXR1cm5UeXBlOwotICAgIFRTdHJpbmcgbWFuZ2xlZE5hbWU7Ci0g
ICAgVE9wZXJhdG9yIG9wOwotICAgIGJvb2wgZGVmaW5lZDsKLX07Ci0KLQotY2xhc3MgVFN5bWJv
bFRhYmxlTGV2ZWwgewotcHVibGljOgotICAgIHR5cGVkZWYgVE1hcDxUU3RyaW5nLCBUU3ltYm9s
Kj4gdExldmVsOwotICAgIHR5cGVkZWYgdExldmVsOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVy
YXRvcjsKLSAgICB0eXBlZGVmIGNvbnN0IHRMZXZlbDo6dmFsdWVfdHlwZSB0TGV2ZWxQYWlyOwot
ICAgIHR5cGVkZWYgc3RkOjpwYWlyPHRMZXZlbDo6aXRlcmF0b3IsIGJvb2w+IHRJbnNlcnRSZXN1
bHQ7Ci0KLSAgICBUU3ltYm9sVGFibGVMZXZlbCgpIHsgfQotICAgIH5UU3ltYm9sVGFibGVMZXZl
bCgpOwotCi0gICAgYm9vbCBpbnNlcnQoY29uc3QgVFN0cmluZyAmbmFtZSwgVFN5bWJvbCAmc3lt
Ym9sKQotICAgIHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gcmV0dXJuaW5nIHRydWUgbWVhbnMg
c3ltYm9sIHdhcyBhZGRlZCB0byB0aGUgdGFibGUKLSAgICAgICAgLy8KLSAgICAgICAgdEluc2Vy
dFJlc3VsdCByZXN1bHQgPSBsZXZlbC5pbnNlcnQodExldmVsUGFpcihuYW1lLCAmc3ltYm9sKSk7
Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdC5zZWNvbmQ7Ci0gICAgfQotCi0gICAgYm9vbCBpbnNl
cnQoVFN5bWJvbCAmc3ltYm9sKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGluc2VydChzeW1ib2wu
Z2V0TWFuZ2xlZE5hbWUoKSwgc3ltYm9sKTsKLSAgICB9Ci0KLSAgICBUU3ltYm9sKiBmaW5kKGNv
bnN0IFRTdHJpbmcmIG5hbWUpIGNvbnN0Ci0gICAgewotICAgICAgICB0TGV2ZWw6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbGV2ZWwuZmluZChuYW1lKTsKLSAgICAgICAgaWYgKGl0ID09IGxldmVsLmVu
ZCgpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJl
dHVybiAoKml0KS5zZWNvbmQ7Ci0gICAgfQotCi0gICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGxldmVsLmJlZ2luKCk7Ci0gICAgfQotCi0gICAg
Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBsZXZlbC5l
bmQoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlbGF0ZVRvT3BlcmF0b3IoY29uc3QgY2hhciogbmFt
ZSwgVE9wZXJhdG9yIG9wKTsKLSAgICB2b2lkIHJlbGF0ZVRvRXh0ZW5zaW9uKGNvbnN0IGNoYXIq
IG5hbWUsIGNvbnN0IFRTdHJpbmcmIGV4dCk7Ci0gICAgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5m
b1NpbmspIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgdExldmVsIGxldmVsOwotfTsKLQotY2xh
c3MgVFN5bWJvbFRhYmxlIHsKLXB1YmxpYzoKLSAgICBUU3ltYm9sVGFibGUoKSA6IHVuaXF1ZUlk
KDApCi0gICAgewotICAgICAgICAvLwotICAgICAgICAvLyBUaGUgc3ltYm9sIHRhYmxlIGNhbm5v
dCBiZSB1c2VkIHVudGlsIHB1c2goKSBpcyBjYWxsZWQsIGJ1dAotICAgICAgICAvLyB0aGUgbGFj
ayBvZiBhbiBpbml0aWFsIGNhbGwgdG8gcHVzaCgpIGNhbiBiZSB1c2VkIHRvIGRldGVjdAotICAg
ICAgICAvLyB0aGF0IHRoZSBzeW1ib2wgdGFibGUgaGFzIG5vdCBiZWVuIHByZWxvYWRlZCB3aXRo
IGJ1aWx0LWlucy4KLSAgICAgICAgLy8KLSAgICB9Ci0gICAgflRTeW1ib2xUYWJsZSgpOwotCi0g
ICAgLy8KLSAgICAvLyBXaGVuIHRoZSBzeW1ib2wgdGFibGUgaXMgaW5pdGlhbGl6ZWQgd2l0aCB0
aGUgYnVpbHQtaW5zLCB0aGVyZSBzaG91bGQKLSAgICAvLyAncHVzaCcgY2FsbHMsIHNvIHRoYXQg
YnVpbHQtaW5zIGFyZSBhdCBsZXZlbCAwIGFuZCB0aGUgc2hhZGVyCi0gICAgLy8gZ2xvYmFscyBh
cmUgYXQgbGV2ZWwgMS4KLSAgICAvLwotICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIHRhYmxl
LnNpemUoKSA9PSAwOyB9Ci0gICAgYm9vbCBhdEJ1aWx0SW5MZXZlbCgpIHsgcmV0dXJuIHRhYmxl
LnNpemUoKSA9PSAxOyB9Ci0gICAgYm9vbCBhdEdsb2JhbExldmVsKCkgeyByZXR1cm4gdGFibGUu
c2l6ZSgpIDw9IDI7IH0KLSAgICB2b2lkIHB1c2goKQotICAgIHsKLSAgICAgICAgdGFibGUucHVz
aF9iYWNrKG5ldyBUU3ltYm9sVGFibGVMZXZlbCk7Ci0gICAgICAgIHByZWNpc2lvblN0YWNrLnB1
c2hfYmFjayhuZXcgUHJlY2lzaW9uU3RhY2tMZXZlbCk7Ci0gICAgfQotCi0gICAgdm9pZCBwb3Ao
KQotICAgIHsKLSAgICAgICAgZGVsZXRlIHRhYmxlLmJhY2soKTsKLSAgICAgICAgdGFibGUucG9w
X2JhY2soKTsKLQotICAgICAgICBkZWxldGUgcHJlY2lzaW9uU3RhY2suYmFjaygpOwotICAgICAg
ICBwcmVjaXNpb25TdGFjay5wb3BfYmFjaygpOwotICAgIH0KLQotICAgIGJvb2wgaW5zZXJ0KFRT
eW1ib2wmIHN5bWJvbCkKLSAgICB7Ci0gICAgICAgIHN5bWJvbC5zZXRVbmlxdWVJZCgrK3VuaXF1
ZUlkKTsKLSAgICAgICAgcmV0dXJuIHRhYmxlW2N1cnJlbnRMZXZlbCgpXS0+aW5zZXJ0KHN5bWJv
bCk7Ci0gICAgfQotCi0gICAgYm9vbCBpbnNlcnRDb25zdEludChjb25zdCBjaGFyICpuYW1lLCBp
bnQgdmFsdWUpCi0gICAgewotICAgICAgICBUVmFyaWFibGUgKmNvbnN0YW50ID0gbmV3IFRWYXJp
YWJsZShOZXdQb29sVFN0cmluZyhuYW1lKSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2
cUNvbnN0LCAxKSk7Ci0gICAgICAgIGNvbnN0YW50LT5nZXRDb25zdFBvaW50ZXIoKS0+c2V0SUNv
bnN0KHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIGluc2VydCgqY29uc3RhbnQpOwotICAgIH0KLQot
ICAgIGJvb2wgaW5zZXJ0QnVpbHRJbihUVHlwZSAqcnZhbHVlLCBjb25zdCBjaGFyICpuYW1lLCBU
VHlwZSAqcHR5cGUxLCBUVHlwZSAqcHR5cGUyID0gMCwgVFR5cGUgKnB0eXBlMyA9IDApCi0gICAg
ewotICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbihOZXdQb29sVFN0
cmluZyhuYW1lKSwgKnJ2YWx1ZSk7Ci0KLSAgICAgICAgVFBhcmFtZXRlciBwYXJhbTEgPSB7TlVM
TCwgcHR5cGUxfTsKLSAgICAgICAgZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJhbTEpOwotCi0g
ICAgICAgIGlmKHB0eXBlMikKLSAgICAgICAgewotICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJh
bTIgPSB7TlVMTCwgcHR5cGUyfTsKLSAgICAgICAgICAgIGZ1bmN0aW9uLT5hZGRQYXJhbWV0ZXIo
cGFyYW0yKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmKHB0eXBlMykKLSAgICAgICAgewotICAg
ICAgICAgICAgVFBhcmFtZXRlciBwYXJhbTMgPSB7TlVMTCwgcHR5cGUzfTsKLSAgICAgICAgICAg
IGZ1bmN0aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW0zKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJl
dHVybiBpbnNlcnQoKmZ1bmN0aW9uKTsKLSAgICB9Ci0KLSAgICBUU3ltYm9sKiBmaW5kKGNvbnN0
IFRTdHJpbmcmIG5hbWUsIGJvb2wqIGJ1aWx0SW4gPSAwLCBib29sICpzYW1lU2NvcGUgPSAwKSAK
LSAgICB7Ci0gICAgICAgIGludCBsZXZlbCA9IGN1cnJlbnRMZXZlbCgpOwotICAgICAgICBUU3lt
Ym9sKiBzeW1ib2w7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIHN5bWJvbCA9IHRhYmxlW2xl
dmVsXS0+ZmluZChuYW1lKTsKLSAgICAgICAgICAgIC0tbGV2ZWw7Ci0gICAgICAgIH0gd2hpbGUg
KHN5bWJvbCA9PSAwICYmIGxldmVsID49IDApOwotICAgICAgICBsZXZlbCsrOwotICAgICAgICBp
ZiAoYnVpbHRJbikKLSAgICAgICAgICAgICpidWlsdEluID0gbGV2ZWwgPT0gMDsKLSAgICAgICAg
aWYgKHNhbWVTY29wZSkKLSAgICAgICAgICAgICpzYW1lU2NvcGUgPSBsZXZlbCA9PSBjdXJyZW50
TGV2ZWwoKTsKLSAgICAgICAgcmV0dXJuIHN5bWJvbDsKLSAgICB9Ci0KLSAgICBUU3ltYm9sKiBm
aW5kQnVpbHRJbihjb25zdCBUU3RyaW5nICZuYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRh
YmxlWzBdLT5maW5kKG5hbWUpOwotICAgIH0KLQotICAgIFRTeW1ib2xUYWJsZUxldmVsKiBnZXRP
dXRlckxldmVsKCkgewotICAgICAgICBhc3NlcnQodGFibGUuc2l6ZSgpID49IDIpOwotICAgICAg
ICByZXR1cm4gdGFibGVbY3VycmVudExldmVsKCkgLSAxXTsKLSAgICB9Ci0KLSAgICB2b2lkIHJl
bGF0ZVRvT3BlcmF0b3IoY29uc3QgY2hhciogbmFtZSwgVE9wZXJhdG9yIG9wKSB7Ci0gICAgICAg
IHRhYmxlWzBdLT5yZWxhdGVUb09wZXJhdG9yKG5hbWUsIG9wKTsKLSAgICB9Ci0gICAgdm9pZCBy
ZWxhdGVUb0V4dGVuc2lvbihjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBUU3RyaW5nJiBleHQpIHsK
LSAgICAgICAgdGFibGVbMF0tPnJlbGF0ZVRvRXh0ZW5zaW9uKG5hbWUsIGV4dCk7Ci0gICAgfQot
ICAgIHZvaWQgZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdDsKLQotICAgIGJvb2wgc2V0
RGVmYXVsdFByZWNpc2lvbihjb25zdCBUUHVibGljVHlwZSYgdHlwZSwgVFByZWNpc2lvbiBwcmVj
KSB7Ci0gICAgICAgIGlmICghc3VwcG9ydHNQcmVjaXNpb24odHlwZS50eXBlKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHR5cGUuc2l6ZSAhPSAxIHx8IHR5cGUubWF0
cml4IHx8IHR5cGUuYXJyYXkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE5vdCBhbGxv
d2VkIHRvIHNldCBmb3IgYWdncmVnYXRlIHR5cGVzCi0gICAgICAgIGludCBpbmRleE9mTGFzdEVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHByZWNpc2lvblN0YWNrLnNpemUoKSkgLSAxOwotICAg
ICAgICAoKnByZWNpc2lvblN0YWNrW2luZGV4T2ZMYXN0RWxlbWVudF0pW3R5cGUudHlwZV0gPSBw
cmVjOyAvLyBVc2VzIG1hcCBvcGVyYXRvciBbXSwgb3ZlcndyaXRlcyB0aGUgY3VycmVudCB2YWx1
ZQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBTZWFyY2hlcyBkb3duIHRo
ZSBwcmVjaXNpb25TdGFjayBmb3IgYSBwcmVjaXNpb24gcXVhbGlmaWVyIGZvciB0aGUgc3BlY2lm
aWVkIFRCYXNpY1R5cGUKLSAgICBUUHJlY2lzaW9uIGdldERlZmF1bHRQcmVjaXNpb24oVEJhc2lj
VHlwZSB0eXBlKSB7Ci0gICAgICAgIGlmICghc3VwcG9ydHNQcmVjaXNpb24odHlwZSkpCi0gICAg
ICAgICAgICByZXR1cm4gRWJwVW5kZWZpbmVkOwotICAgICAgICBpbnQgbGV2ZWwgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHByZWNpc2lvblN0YWNrLnNpemUoKSkgLSAxOwotICAgICAgICBhc3NlcnQobGV2
ZWwgPj0gMCk7IC8vIEp1c3QgdG8gYmUgc2FmZS4gU2hvdWxkIG5vdCBoYXBwZW4uCi0gICAgICAg
IFByZWNpc2lvblN0YWNrTGV2ZWw6Oml0ZXJhdG9yIGl0OwotICAgICAgICBUUHJlY2lzaW9uIHBy
ZWMgPSBFYnBVbmRlZmluZWQ7IC8vIElmIHdlIGRvbnQgZmluZCBhbnl0aGluZyB3ZSByZXR1cm4g
dGhpcy4gU2hvdWxkIHdlIGVycm9yIGNoZWNrIHRoaXM/Ci0gICAgICAgIHdoaWxlIChsZXZlbCA+
PSAwKSB7Ci0gICAgICAgICAgICBpdCA9IHByZWNpc2lvblN0YWNrW2xldmVsXS0+ZmluZCh0eXBl
KTsKLSAgICAgICAgICAgIGlmIChpdCAhPSBwcmVjaXNpb25TdGFja1tsZXZlbF0tPmVuZCgpKSB7
Ci0gICAgICAgICAgICAgICAgcHJlYyA9ICgqaXQpLnNlY29uZDsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxldmVsLS07Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIHByZWM7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGludCBjdXJyZW50TGV2
ZWwoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHRhYmxlLnNpemUoKSkgLSAxOyB9
Ci0KLSAgICBib29sIHN1cHBvcnRzUHJlY2lzaW9uKFRCYXNpY1R5cGUgdHlwZSkgewotICAgICAg
Ly8gT25seSBzdXBwb3J0cyBwcmVjaXNpb24gZm9yIGludCwgZmxvYXQsIGFuZCBzYW1wbGVyIHR5
cGVzLgotICAgICAgcmV0dXJuIHR5cGUgPT0gRWJ0RmxvYXQgfHwgdHlwZSA9PSBFYnRJbnQgfHwg
SXNTYW1wbGVyKHR5cGUpOwotICAgIH0KLQotICAgIGludCB1bmlxdWVJZDsgICAgIC8vIGZvciB1
bmlxdWUgaWRlbnRpZmljYXRpb24gaW4gY29kZSBnZW5lcmF0aW9uCi0gICAgc3RkOjp2ZWN0b3I8
VFN5bWJvbFRhYmxlTGV2ZWwqPiB0YWJsZTsKLSAgICB0eXBlZGVmIFRNYXA8VEJhc2ljVHlwZSwg
VFByZWNpc2lvbj4gUHJlY2lzaW9uU3RhY2tMZXZlbDsKLSAgICBzdGQ6OnZlY3RvcjxQcmVjaXNp
b25TdGFja0xldmVsKj4gcHJlY2lzaW9uU3RhY2s7Ci19OwotCi0jZW5kaWYgLy8gX1NZTUJPTF9U
QUJMRV9JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9UcmFuc2xhdG9yRVNTTC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvVHJhbnNsYXRvckVTU0wuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAyOTAwZjhhOGVkZTlkNmEwNzc0YTQxZmY2YjZhMDFjNGU3MWQzNjk2Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MyAr
MCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvVHJhbnNsYXRv
ckVTU0wuaCIKLQotI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEVTU0wuaCIKLQotVHJhbnNsYXRv
ckVTU0w6OlRyYW5zbGF0b3JFU1NMKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3Bl
YykKLSAgICA6IFRDb21waWxlcih0eXBlLCBzcGVjKSB7Ci19Ci0KLXZvaWQgVHJhbnNsYXRvckVT
U0w6OnRyYW5zbGF0ZShUSW50ZXJtTm9kZSogcm9vdCkgewotICAgIFRJbmZvU2lua0Jhc2UmIHNp
bmsgPSBnZXRJbmZvU2luaygpLm9iajsKLQotICAgIC8vIFdyaXRlIGJ1aWx0LWluIGV4dGVuc2lv
biBiZWhhdmlvcnMuCi0gICAgd3JpdGVFeHRlbnNpb25CZWhhdmlvcigpOwotCi0gICAgLy8gV3Jp
dGUgZW11bGF0ZWQgYnVpbHQtaW4gZnVuY3Rpb25zIGlmIG5lZWRlZC4KLSAgICBnZXRCdWlsdElu
RnVuY3Rpb25FbXVsYXRvcigpLk91dHB1dEVtdWxhdGVkRnVuY3Rpb25EZWZpbml0aW9uKAotICAg
ICAgICBzaW5rLCBnZXRTaGFkZXJUeXBlKCkgPT0gU0hfRlJBR01FTlRfU0hBREVSKTsKLQotICAg
IC8vIFdyaXRlIGFycmF5IGJvdW5kcyBjbGFtcGluZyBlbXVsYXRpb24gaWYgbmVlZGVkLgotICAg
IGdldEFycmF5Qm91bmRzQ2xhbXBlcigpLk91dHB1dENsYW1waW5nRnVuY3Rpb25EZWZpbml0aW9u
KHNpbmspOwotCi0gICAgLy8gV3JpdGUgdHJhbnNsYXRlZCBzaGFkZXIuCi0gICAgVE91dHB1dEVT
U0wgb3V0cHV0RVNTTChzaW5rLCBnZXRBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSgpLCBnZXRI
YXNoRnVuY3Rpb24oKSwgZ2V0TmFtZU1hcCgpLCBnZXRTeW1ib2xUYWJsZSgpKTsKLSAgICByb290
LT50cmF2ZXJzZSgmb3V0cHV0RVNTTCk7Ci19Ci0KLXZvaWQgVHJhbnNsYXRvckVTU0w6OndyaXRl
RXh0ZW5zaW9uQmVoYXZpb3IoKSB7Ci0gICAgVEluZm9TaW5rQmFzZSYgc2luayA9IGdldEluZm9T
aW5rKCkub2JqOwotICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0ZW5zaW9uQmVoYXZp
b3IgPSBnZXRFeHRlbnNpb25CZWhhdmlvcigpOwotICAgIGZvciAoVEV4dGVuc2lvbkJlaGF2aW9y
Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0ZW5zaW9uQmVoYXZpb3IuYmVnaW4oKTsKLSAgICAg
ICAgIGl0ZXIgIT0gZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCk7ICsraXRlcikgewotICAgICAgICBp
ZiAoaXRlci0+c2Vjb25kICE9IEVCaFVuZGVmaW5lZCkgewotICAgICAgICAgICAgc2luayA8PCAi
I2V4dGVuc2lvbiAiIDw8IGl0ZXItPmZpcnN0IDw8ICIgOiAiCi0gICAgICAgICAgICAgICAgIDw8
IGdldEJlaGF2aW9yU3RyaW5nKGl0ZXItPnNlY29uZCkgPDwgIlxuIjsKLSAgICAgICAgfQotICAg
IH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9U
cmFuc2xhdG9yRVNTTC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Ry
YW5zbGF0b3JFU1NMLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExMTk2YmQwMDEz
YWNhYzQ0ZDc4ZDU4NThmZTU4MTdhNmUyN2I1YmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1RyYW5zbGF0b3JFU1NMLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vLwotLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JFU1NMX0hfCi0jZGVmaW5l
IENPTVBJTEVSX1RSQU5TTEFUT1JFU1NMX0hfCi0KLSNpbmNsdWRlICJjb21waWxlci9TaEhhbmRs
ZS5oIgotCi1jbGFzcyBUcmFuc2xhdG9yRVNTTCA6IHB1YmxpYyBUQ29tcGlsZXIgewotcHVibGlj
OgotICAgIFRyYW5zbGF0b3JFU1NMKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3Bl
Yyk7Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2Rl
KiByb290KTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHdyaXRlRXh0ZW5zaW9uQmVoYXZpb3IoKTsK
LX07Ci0KLSNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUkVTU0xfSF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2E0MzQxZGNkZWE3NzgzNDZmYTM2Mjdl
MjNhY2E0MTk4ZjE1Njg5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xT
TC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwot
Ci0jaW5jbHVkZSAiY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuaCIKLQotI2luY2x1ZGUgImNvbXBp
bGVyL091dHB1dEdMU0wuaCIKLSNpbmNsdWRlICJjb21waWxlci9WZXJzaW9uR0xTTC5oIgotCi1z
dGF0aWMgdm9pZCB3cml0ZVZlcnNpb24oU2hTaGFkZXJUeXBlIHR5cGUsIFRJbnRlcm1Ob2RlKiBy
b290LAotICAgICAgICAgICAgICAgICAgICAgICAgIFRJbmZvU2lua0Jhc2UmIHNpbmspIHsKLSAg
ICBUVmVyc2lvbkdMU0wgdmVyc2lvbkdMU0wodHlwZSk7Ci0gICAgcm9vdC0+dHJhdmVyc2UoJnZl
cnNpb25HTFNMKTsKLSAgICBpbnQgdmVyc2lvbiA9IHZlcnNpb25HTFNMLmdldFZlcnNpb24oKTsK
LSAgICAvLyBXZSBuZWVkIHRvIHdyaXRlIHZlcnNpb24gZGlyZWN0aXZlIG9ubHkgaWYgaXQgaXMg
Z3JlYXRlciB0aGFuIDExMC4KLSAgICAvLyBJZiB0aGVyZSBpcyBubyB2ZXJzaW9uIGRpcmVjdGl2
ZSBpbiB0aGUgc2hhZGVyLCAxMTAgaXMgaW1wbGllZC4KLSAgICBpZiAodmVyc2lvbiA+IDExMCkg
ewotICAgICAgICBzaW5rIDw8ICIjdmVyc2lvbiAiIDw8IHZlcnNpb24gPDwgIlxuIjsKLSAgICB9
Ci19Ci0KLVRyYW5zbGF0b3JHTFNMOjpUcmFuc2xhdG9yR0xTTChTaFNoYWRlclR5cGUgdHlwZSwg
U2hTaGFkZXJTcGVjIHNwZWMpCi0gICAgOiBUQ29tcGlsZXIodHlwZSwgc3BlYykgewotfQotCi12
b2lkIFRyYW5zbGF0b3JHTFNMOjp0cmFuc2xhdGUoVEludGVybU5vZGUqIHJvb3QpIHsKLSAgICBU
SW5mb1NpbmtCYXNlJiBzaW5rID0gZ2V0SW5mb1NpbmsoKS5vYmo7Ci0KLSAgICAvLyBXcml0ZSBH
TFNMIHZlcnNpb24uCi0gICAgd3JpdGVWZXJzaW9uKGdldFNoYWRlclR5cGUoKSwgcm9vdCwgc2lu
ayk7Ci0KLSAgICAvLyBXcml0ZSBlbXVsYXRlZCBidWlsdC1pbiBmdW5jdGlvbnMgaWYgbmVlZGVk
LgotICAgIGdldEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yKCkuT3V0cHV0RW11bGF0ZWRGdW5jdGlv
bkRlZmluaXRpb24oCi0gICAgICAgIHNpbmssIGZhbHNlKTsKLQotICAgIC8vIFdyaXRlIGFycmF5
IGJvdW5kcyBjbGFtcGluZyBlbXVsYXRpb24gaWYgbmVlZGVkLgotICAgIGdldEFycmF5Qm91bmRz
Q2xhbXBlcigpLk91dHB1dENsYW1waW5nRnVuY3Rpb25EZWZpbml0aW9uKHNpbmspOwotCi0gICAg
Ly8gV3JpdGUgdHJhbnNsYXRlZCBzaGFkZXIuCi0gICAgVE91dHB1dEdMU0wgb3V0cHV0R0xTTChz
aW5rLCBnZXRBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSgpLCBnZXRIYXNoRnVuY3Rpb24oKSwg
Z2V0TmFtZU1hcCgpLCBnZXRTeW1ib2xUYWJsZSgpKTsKLSAgICByb290LT50cmF2ZXJzZSgmb3V0
cHV0R0xTTCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvVHJhbnNsYXRvckdMU0wuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9UcmFuc2xhdG9yR0xTTC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmNl
MDZkMTkyZjBmYzYxZGFiZDUzNmQyMDQ5ZmZiOWVkZWYzYTYzLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9UcmFuc2xhdG9yR0xTTC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SR0xTTF9IXwot
I2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SR0xTTF9IXwotCi0jaW5jbHVkZSAiY29tcGlsZXIv
U2hIYW5kbGUuaCIKLQotY2xhc3MgVHJhbnNsYXRvckdMU0wgOiBwdWJsaWMgVENvbXBpbGVyIHsK
LXB1YmxpYzoKLSAgICBUcmFuc2xhdG9yR0xTTChTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJT
cGVjIHNwZWMpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShUSW50
ZXJtTm9kZSogcm9vdCk7Ci19OwotCi0jZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JHTFNM
X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJh
bnNsYXRvckhMU0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Ry
YW5zbGF0b3JITFNMLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc0MDhhMDdj
NDk2Zjc2MTRlMTc2YmU5YjViNjcxNWFhYzU4ZTU0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvVHJhbnNsYXRvckhMU0wuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmgiCi0K
LSNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCi0jaW5jbHVkZSAi
Y29tcGlsZXIvT3V0cHV0SExTTC5oIgotCi1UcmFuc2xhdG9ySExTTDo6VHJhbnNsYXRvckhMU0wo
U2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBTaFNoYWRlck91dHB1dCBvdXRw
dXQpCi0gICAgOiBUQ29tcGlsZXIodHlwZSwgc3BlYyksIG1PdXRwdXRUeXBlKG91dHB1dCkKLXsK
LX0KLQotdm9pZCBUcmFuc2xhdG9ySExTTDo6dHJhbnNsYXRlKFRJbnRlcm1Ob2RlICpyb290KQot
ewotICAgIFRQYXJzZUNvbnRleHQmIHBhcnNlQ29udGV4dCA9ICpHZXRHbG9iYWxQYXJzZUNvbnRl
eHQoKTsKLSAgICBzaDo6T3V0cHV0SExTTCBvdXRwdXRITFNMKHBhcnNlQ29udGV4dCwgZ2V0UmVz
b3VyY2VzKCksIG1PdXRwdXRUeXBlKTsKLQotICAgIG91dHB1dEhMU0wub3V0cHV0KCk7Ci0gICAg
bUFjdGl2ZVVuaWZvcm1zID0gb3V0cHV0SExTTC5nZXRVbmlmb3JtcygpOwotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU1MGUxNWU4ZWY3NTIzOTJjMWIwMWJkNmIx
ZmRiYzQ0NjA5ZDNiOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wu
aAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNp
Zm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUkhMU0xfSF8KLSNkZWZpbmUgQ09NUElMRVJfVFJBTlNM
QVRPUkhMU0xfSF8KLQotI2luY2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCi0jaW5jbHVkZSAi
Y29tcGlsZXIvVW5pZm9ybS5oIgotCi1jbGFzcyBUcmFuc2xhdG9ySExTTCA6IHB1YmxpYyBUQ29t
cGlsZXIgewotcHVibGljOgotICAgIFRyYW5zbGF0b3JITFNMKFNoU2hhZGVyVHlwZSB0eXBlLCBT
aFNoYWRlclNwZWMgc3BlYywgU2hTaGFkZXJPdXRwdXQgb3V0cHV0KTsKLQotICAgIHZpcnR1YWwg
VHJhbnNsYXRvckhMU0wgKmdldEFzVHJhbnNsYXRvckhMU0woKSB7IHJldHVybiB0aGlzOyB9Ci0g
ICAgY29uc3Qgc2g6OkFjdGl2ZVVuaWZvcm1zICZnZXRVbmlmb3JtcygpIHsgcmV0dXJuIG1BY3Rp
dmVVbmlmb3JtczsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShU
SW50ZXJtTm9kZSogcm9vdCk7Ci0KLSAgICBzaDo6QWN0aXZlVW5pZm9ybXMgbUFjdGl2ZVVuaWZv
cm1zOwotICAgIFNoU2hhZGVyT3V0cHV0IG1PdXRwdXRUeXBlOwotfTsKLQotI2VuZGlmICAvLyBD
T01QSUxFUl9UUkFOU0xBVE9SSExTTF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL1R5cGVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvVHlwZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzU1NjBkZGM2
ZWZhNzQwYmU2MWFhMjM0MWY2MDE4M2NkY2FmMDc2OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvVHlwZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDMwNyArMCwwIEBACi0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
Ci0vLwotCi0jaWZuZGVmIF9UWVBFU19JTkNMVURFRAotI2RlZmluZSBfVFlQRVNfSU5DTFVERUQK
LQotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0KLSNpbmNsdWRlICJjb21waWxlci9C
YXNlVHlwZXMuaCIKLSNpbmNsdWRlICJjb21waWxlci9Db21tb24uaCIKLSNpbmNsdWRlICJjb21w
aWxlci9kZWJ1Zy5oIgotCi1zdHJ1Y3QgVFB1YmxpY1R5cGU7Ci1jbGFzcyBUVHlwZTsKLQotY2xh
c3MgVEZpZWxkCi17Ci1wdWJsaWM6Ci0gICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSgpOwot
ICAgIFRGaWVsZChUVHlwZSogdHlwZSwgVFN0cmluZyogbmFtZSkgOiBtVHlwZSh0eXBlKSwgbU5h
bWUobmFtZSkge30KLQotICAgIC8vIFRPRE8oYWxva3ApOiBXZSBzaG91bGQgb25seSByZXR1cm4g
Y29uc3QgdHlwZS4KLSAgICAvLyBGaXggaXQgYnkgdHdlYWtpbmcgZ3JhbW1hci4KLSAgICBUVHlw
ZSogdHlwZSgpIHsgcmV0dXJuIG1UeXBlOyB9Ci0gICAgY29uc3QgVFR5cGUqIHR5cGUoKSBjb25z
dCB7IHJldHVybiBtVHlwZTsgfQotCi0gICAgY29uc3QgVFN0cmluZyYgbmFtZSgpIGNvbnN0IHsg
cmV0dXJuICptTmFtZTsgfQotCi1wcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihURmllbGQpOwotICAgIFRUeXBlKiBtVHlwZTsKLSAgICBUU3RyaW5nKiBtTmFtZTsKLX07Ci0K
LXR5cGVkZWYgVFZlY3RvcjxURmllbGQqPiBURmllbGRMaXN0OwotaW5saW5lIFRGaWVsZExpc3Qq
IE5ld1Bvb2xURmllbGRMaXN0KCkKLXsKLSAgICB2b2lkKiBtZW1vcnkgPSBHZXRHbG9iYWxQb29s
QWxsb2NhdG9yKCktPmFsbG9jYXRlKHNpemVvZihURmllbGRMaXN0KSk7Ci0gICAgcmV0dXJuIG5l
dyhtZW1vcnkpIFRGaWVsZExpc3Q7Ci19Ci0KLWNsYXNzIFRTdHJ1Y3R1cmUKLXsKLXB1YmxpYzoK
LSAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKCk7Ci0gICAgVFN0cnVjdHVyZShUU3RyaW5n
KiBuYW1lLCBURmllbGRMaXN0KiBmaWVsZHMpCi0gICAgICAgIDogbU5hbWUobmFtZSksCi0gICAg
ICAgICAgbUZpZWxkcyhmaWVsZHMpLAotICAgICAgICAgIG1PYmplY3RTaXplKDApLAotICAgICAg
ICAgIG1EZWVwZXN0TmVzdGluZygwKSB7Ci0gICAgfQotCi0gICAgY29uc3QgVFN0cmluZyYgbmFt
ZSgpIGNvbnN0IHsgcmV0dXJuICptTmFtZTsgfQotICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxk
cygpIGNvbnN0IHsgcmV0dXJuICptRmllbGRzOyB9Ci0KLSAgICBjb25zdCBUU3RyaW5nJiBtYW5n
bGVkTmFtZSgpIGNvbnN0IHsKLSAgICAgICAgaWYgKG1NYW5nbGVkTmFtZS5lbXB0eSgpKQotICAg
ICAgICAgICAgbU1hbmdsZWROYW1lID0gYnVpbGRNYW5nbGVkTmFtZSgpOwotICAgICAgICByZXR1
cm4gbU1hbmdsZWROYW1lOwotICAgIH0KLSAgICBzaXplX3Qgb2JqZWN0U2l6ZSgpIGNvbnN0IHsK
LSAgICAgICAgaWYgKG1PYmplY3RTaXplID09IDApCi0gICAgICAgICAgICBtT2JqZWN0U2l6ZSA9
IGNhbGN1bGF0ZU9iamVjdFNpemUoKTsKLSAgICAgICAgcmV0dXJuIG1PYmplY3RTaXplOwotICAg
IH07Ci0gICAgaW50IGRlZXBlc3ROZXN0aW5nKCkgY29uc3QgewotICAgICAgICBpZiAobURlZXBl
c3ROZXN0aW5nID09IDApCi0gICAgICAgICAgICBtRGVlcGVzdE5lc3RpbmcgPSBjYWxjdWxhdGVE
ZWVwZXN0TmVzdGluZygpOwotICAgICAgICByZXR1cm4gbURlZXBlc3ROZXN0aW5nOwotICAgIH0K
LSAgICBib29sIGNvbnRhaW5zQXJyYXlzKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKFRTdHJ1Y3R1cmUpOwotICAgIFRTdHJpbmcgYnVpbGRNYW5nbGVk
TmFtZSgpIGNvbnN0OwotICAgIHNpemVfdCBjYWxjdWxhdGVPYmplY3RTaXplKCkgY29uc3Q7Ci0g
ICAgaW50IGNhbGN1bGF0ZURlZXBlc3ROZXN0aW5nKCkgY29uc3Q7Ci0KLSAgICBUU3RyaW5nKiBt
TmFtZTsKLSAgICBURmllbGRMaXN0KiBtRmllbGRzOwotCi0gICAgbXV0YWJsZSBUU3RyaW5nIG1N
YW5nbGVkTmFtZTsKLSAgICBtdXRhYmxlIHNpemVfdCBtT2JqZWN0U2l6ZTsKLSAgICBtdXRhYmxl
IGludCBtRGVlcGVzdE5lc3Rpbmc7Ci19OwotCi0vLwotLy8gQmFzZSBjbGFzcyBmb3IgdGhpbmdz
IHRoYXQgaGF2ZSBhIHR5cGUuCi0vLwotY2xhc3MgVFR5cGUKLXsKLXB1YmxpYzoKLSAgICBQT09M
X0FMTE9DQVRPUl9ORVdfREVMRVRFKCk7Ci0gICAgVFR5cGUoKSB7fQotICAgIFRUeXBlKFRCYXNp
Y1R5cGUgdCwgVFByZWNpc2lvbiBwLCBUUXVhbGlmaWVyIHEgPSBFdnFUZW1wb3JhcnksIHVuc2ln
bmVkIGNoYXIgcyA9IDEsIGJvb2wgbSA9IGZhbHNlLCBib29sIGEgPSBmYWxzZSkgOgotICAgICAg
ICAgICAgdHlwZSh0KSwgcHJlY2lzaW9uKHApLCBxdWFsaWZpZXIocSksIHNpemUocyksIG1hdHJp
eChtKSwgYXJyYXkoYSksIGFycmF5U2l6ZSgwKSwgc3RydWN0dXJlKDApCi0gICAgewotICAgIH0K
LSAgICBleHBsaWNpdCBUVHlwZShjb25zdCBUUHVibGljVHlwZSAmcCk7Ci0gICAgVFR5cGUoVFN0
cnVjdHVyZSogdXNlckRlZiwgVFByZWNpc2lvbiBwID0gRWJwVW5kZWZpbmVkKSA6Ci0gICAgICAg
ICAgICB0eXBlKEVidFN0cnVjdCksIHByZWNpc2lvbihwKSwgcXVhbGlmaWVyKEV2cVRlbXBvcmFy
eSksIHNpemUoMSksIG1hdHJpeChmYWxzZSksIGFycmF5KGZhbHNlKSwgYXJyYXlTaXplKDApLCBz
dHJ1Y3R1cmUodXNlckRlZikKLSAgICB7Ci0gICAgfQotCi0gICAgVEJhc2ljVHlwZSBnZXRCYXNp
Y1R5cGUoKSBjb25zdCB7IHJldHVybiB0eXBlOyB9Ci0gICAgdm9pZCBzZXRCYXNpY1R5cGUoVEJh
c2ljVHlwZSB0KSB7IHR5cGUgPSB0OyB9Ci0KLSAgICBUUHJlY2lzaW9uIGdldFByZWNpc2lvbigp
IGNvbnN0IHsgcmV0dXJuIHByZWNpc2lvbjsgfQotICAgIHZvaWQgc2V0UHJlY2lzaW9uKFRQcmVj
aXNpb24gcCkgeyBwcmVjaXNpb24gPSBwOyB9Ci0KLSAgICBUUXVhbGlmaWVyIGdldFF1YWxpZmll
cigpIGNvbnN0IHsgcmV0dXJuIHF1YWxpZmllcjsgfQotICAgIHZvaWQgc2V0UXVhbGlmaWVyKFRR
dWFsaWZpZXIgcSkgeyBxdWFsaWZpZXIgPSBxOyB9Ci0KLSAgICAvLyBPbmUtZGltZW5zaW9uYWwg
c2l6ZSBvZiBzaW5nbGUgaW5zdGFuY2UgdHlwZQotICAgIGludCBnZXROb21pbmFsU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIHNpemU7IH0KLSAgICB2b2lkIHNldE5vbWluYWxTaXplKHVuc2lnbmVkIGNo
YXIgcykgeyBzaXplID0gczsgfQotICAgIC8vIEZ1bGwgc2l6ZSBvZiBzaW5nbGUgaW5zdGFuY2Ug
b2YgdHlwZQotICAgIHNpemVfdCBnZXRPYmplY3RTaXplKCkgY29uc3Q7Ci0KLSAgICBpbnQgZWxl
bWVudFJlZ2lzdGVyQ291bnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKHN0cnVjdHVyZSkK
LSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gZ2V0U3Ry
dWN0KCktPmZpZWxkcygpOwotICAgICAgICAgICAgaW50IHJlZ2lzdGVyQ291bnQgPSAwOwotCi0g
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZWdpc3RlckNvdW50ICs9IGZpZWxkc1tpXS0+
dHlwZSgpLT50b3RhbFJlZ2lzdGVyQ291bnQoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgcmV0dXJuIHJlZ2lzdGVyQ291bnQ7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaXNN
YXRyaXgoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdldE5vbWluYWxTaXplKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
MTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGludCB0b3RhbFJlZ2lzdGVyQ291bnQoKSBjb25z
dAotICAgIHsKLSAgICAgICAgaWYgKGFycmF5KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gYXJyYXlTaXplICogZWxlbWVudFJlZ2lzdGVyQ291bnQoKTsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlbGVtZW50UmVnaXN0ZXJDb3Vu
dCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9vbCBpc01hdHJpeCgpIGNvbnN0IHsgcmV0
dXJuIG1hdHJpeCA/IHRydWUgOiBmYWxzZTsgfQotICAgIHZvaWQgc2V0TWF0cml4KGJvb2wgbSkg
eyBtYXRyaXggPSBtOyB9Ci0KLSAgICBib29sIGlzQXJyYXkoKSBjb25zdCAgeyByZXR1cm4gYXJy
YXkgPyB0cnVlIDogZmFsc2U7IH0KLSAgICBpbnQgZ2V0QXJyYXlTaXplKCkgY29uc3QgeyByZXR1
cm4gYXJyYXlTaXplOyB9Ci0gICAgdm9pZCBzZXRBcnJheVNpemUoaW50IHMpIHsgYXJyYXkgPSB0
cnVlOyBhcnJheVNpemUgPSBzOyB9Ci0gICAgdm9pZCBjbGVhckFycmF5bmVzcygpIHsgYXJyYXkg
PSBmYWxzZTsgYXJyYXlTaXplID0gMDsgfQotCi0gICAgYm9vbCBpc1ZlY3RvcigpIGNvbnN0IHsg
cmV0dXJuIHNpemUgPiAxICYmICFtYXRyaXg7IH0KLSAgICBib29sIGlzU2NhbGFyKCkgY29uc3Qg
eyByZXR1cm4gc2l6ZSA9PSAxICYmICFtYXRyaXggJiYgIXN0cnVjdHVyZTsgfQotCi0gICAgVFN0
cnVjdHVyZSogZ2V0U3RydWN0KCkgY29uc3QgeyByZXR1cm4gc3RydWN0dXJlOyB9Ci0gICAgdm9p
ZCBzZXRTdHJ1Y3QoVFN0cnVjdHVyZSogcykgeyBzdHJ1Y3R1cmUgPSBzOyB9Ci0KLSAgICBjb25z
dCBUU3RyaW5nJiBnZXRNYW5nbGVkTmFtZSgpIGNvbnN0IHsKLSAgICAgICAgaWYgKG1hbmdsZWQu
ZW1wdHkoKSkgewotICAgICAgICAgICAgbWFuZ2xlZCA9IGJ1aWxkTWFuZ2xlZE5hbWUoKTsKLSAg
ICAgICAgICAgIG1hbmdsZWQgKz0gJzsnOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtYW5n
bGVkOwotICAgIH0KLQotICAgIGJvb2wgc2FtZUVsZW1lbnRUeXBlKGNvbnN0IFRUeXBlJiByaWdo
dCkgY29uc3QgewotICAgICAgICByZXR1cm4gICAgICB0eXBlID09IHJpZ2h0LnR5cGUgICAmJgot
ICAgICAgICAgICAgICAgICAgICBzaXplID09IHJpZ2h0LnNpemUgICAmJgotICAgICAgICAgICAg
ICAgICAgbWF0cml4ID09IHJpZ2h0Lm1hdHJpeCAmJgotICAgICAgICAgICAgICAgc3RydWN0dXJl
ID09IHJpZ2h0LnN0cnVjdHVyZTsKLSAgICB9Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRU
eXBlJiByaWdodCkgY29uc3QgewotICAgICAgICByZXR1cm4gICAgICB0eXBlID09IHJpZ2h0LnR5
cGUgICAmJgotICAgICAgICAgICAgICAgICAgICBzaXplID09IHJpZ2h0LnNpemUgICAmJgotICAg
ICAgICAgICAgICAgICAgbWF0cml4ID09IHJpZ2h0Lm1hdHJpeCAmJgotICAgICAgICAgICAgICAg
ICAgIGFycmF5ID09IHJpZ2h0LmFycmF5ICAmJiAoIWFycmF5IHx8IGFycmF5U2l6ZSA9PSByaWdo
dC5hcnJheVNpemUpICYmCi0gICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPT0gcmlnaHQuc3RydWN0
dXJlOwotICAgICAgICAvLyBkb24ndCBjaGVjayB0aGUgcXVhbGlmaWVyLCBpdCdzIG5vdCBldmVy
IHdoYXQncyBiZWluZyBzb3VnaHQgYWZ0ZXIKLSAgICB9Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IFRUeXBlJiByaWdodCkgY29uc3QgewotICAgICAgICByZXR1cm4gIW9wZXJhdG9yPT0ocmln
aHQpOwotICAgIH0KLSAgICBib29sIG9wZXJhdG9yPChjb25zdCBUVHlwZSYgcmlnaHQpIGNvbnN0
IHsKLSAgICAgICAgaWYgKHR5cGUgIT0gcmlnaHQudHlwZSkgcmV0dXJuIHR5cGUgPCByaWdodC50
eXBlOwotICAgICAgICBpZiAoc2l6ZSAhPSByaWdodC5zaXplKSByZXR1cm4gc2l6ZSA8IHJpZ2h0
LnNpemU7Ci0gICAgICAgIGlmIChtYXRyaXggIT0gcmlnaHQubWF0cml4KSByZXR1cm4gbWF0cml4
IDwgcmlnaHQubWF0cml4OwotICAgICAgICBpZiAoYXJyYXkgIT0gcmlnaHQuYXJyYXkpIHJldHVy
biBhcnJheSA8IHJpZ2h0LmFycmF5OwotICAgICAgICBpZiAoYXJyYXlTaXplICE9IHJpZ2h0LmFy
cmF5U2l6ZSkgcmV0dXJuIGFycmF5U2l6ZSA8IHJpZ2h0LmFycmF5U2l6ZTsKLSAgICAgICAgaWYg
KHN0cnVjdHVyZSAhPSByaWdodC5zdHJ1Y3R1cmUpIHJldHVybiBzdHJ1Y3R1cmUgPCByaWdodC5z
dHJ1Y3R1cmU7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGNvbnN0IGNo
YXIqIGdldEJhc2ljU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gOjpnZXRCYXNpY1N0cmluZyh0eXBl
KTsgfQotICAgIGNvbnN0IGNoYXIqIGdldFByZWNpc2lvblN0cmluZygpIGNvbnN0IHsgcmV0dXJu
IDo6Z2V0UHJlY2lzaW9uU3RyaW5nKHByZWNpc2lvbik7IH0KLSAgICBjb25zdCBjaGFyKiBnZXRR
dWFsaWZpZXJTdHJpbmcoKSBjb25zdCB7IHJldHVybiA6OmdldFF1YWxpZmllclN0cmluZyhxdWFs
aWZpZXIpOyB9Ci0gICAgVFN0cmluZyBnZXRDb21wbGV0ZVN0cmluZygpIGNvbnN0OwotCi0gICAg
Ly8gSWYgdGhpcyB0eXBlIGlzIGEgc3RydWN0LCByZXR1cm5zIHRoZSBkZWVwZXN0IHN0cnVjdCBu
ZXN0aW5nIG9mCi0gICAgLy8gYW55IGZpZWxkIGluIHRoZSBzdHJ1Y3QuIEZvciBleGFtcGxlOgot
ICAgIC8vICAgc3RydWN0IG5lc3RpbmcxIHsKLSAgICAvLyAgICAgdmVjNCBwb3NpdGlvbjsKLSAg
ICAvLyAgIH07Ci0gICAgLy8gICBzdHJ1Y3QgbmVzdGluZzIgewotICAgIC8vICAgICBuZXN0aW5n
MSBmaWVsZDE7Ci0gICAgLy8gICAgIHZlYzQgZmllbGQyOwotICAgIC8vICAgfTsKLSAgICAvLyBG
b3IgdHlwZSAibmVzdGluZzIiLCB0aGlzIG1ldGhvZCB3b3VsZCByZXR1cm4gMiAtLSB0aGUgbnVt
YmVyCi0gICAgLy8gb2Ygc3RydWN0dXJlcyB0aHJvdWdoIHdoaWNoIGluZGlyZWN0aW9uIG11c3Qg
b2NjdXIgdG8gcmVhY2ggdGhlCi0gICAgLy8gZGVlcGVzdCBmaWVsZCAobmVzdGluZzIuZmllbGQx
LnBvc2l0aW9uKS4KLSAgICBpbnQgZ2V0RGVlcGVzdFN0cnVjdE5lc3RpbmcoKSBjb25zdCB7Ci0g
ICAgICAgIHJldHVybiBzdHJ1Y3R1cmUgPyBzdHJ1Y3R1cmUtPmRlZXBlc3ROZXN0aW5nKCkgOiAw
OwotICAgIH0KLQotICAgIGJvb2wgaXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlzKCkgY29uc3Qg
ewotICAgICAgICByZXR1cm4gc3RydWN0dXJlID8gc3RydWN0dXJlLT5jb250YWluc0FycmF5cygp
IDogZmFsc2U7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFRTdHJpbmcgYnVpbGRNYW5nbGVkTmFt
ZSgpIGNvbnN0OwotCi0gICAgVEJhc2ljVHlwZSB0eXBlOwotICAgIFRQcmVjaXNpb24gcHJlY2lz
aW9uOwotICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyOwotICAgIHVuc2lnbmVkIGNoYXIgc2l6ZTsK
LSAgICBib29sIG1hdHJpeDsKLSAgICBib29sIGFycmF5OwotICAgIGludCBhcnJheVNpemU7Ci0K
LSAgICBUU3RydWN0dXJlKiBzdHJ1Y3R1cmU7ICAgICAgLy8gMCB1bmxlc3MgdGhpcyBpcyBhIHN0
cnVjdAotCi0gICAgbXV0YWJsZSBUU3RyaW5nIG1hbmdsZWQ7Ci19OwotCi0vLwotLy8gVGhpcyBp
cyBhIHdvcmthcm91bmQgZm9yIGEgcHJvYmxlbSB3aXRoIHRoZSB5YWNjIHN0YWNrLCAgSXQgY2Fu
J3QgaGF2ZQotLy8gdHlwZXMgdGhhdCBpdCB0aGlua3MgaGF2ZSBub24tdHJpdmlhbCBjb25zdHJ1
Y3RvcnMuICBJdCBzaG91bGQKLS8vIGp1c3QgYmUgdXNlZCB3aGlsZSByZWNvZ25pemluZyB0aGUg
Z3JhbW1hciwgbm90IGFueXRoaW5nIGVsc2UuICBQb2ludGVycwotLy8gY291bGQgYmUgdXNlZCwg
YnV0IGFsc28gdHJ5aW5nIHRvIGF2b2lkIGxvdHMgb2YgbWVtb3J5IG1hbmFnZW1lbnQgb3Zlcmhl
YWQuCi0vLwotLy8gTm90IGFzIGJhZCBhcyBpdCBsb29rcywgdGhlcmUgaXMgbm8gYWN0dWFsIGFz
c3VtcHRpb24gdGhhdCB0aGUgZmllbGRzCi0vLyBtYXRjaCB1cCBvciBhcmUgbmFtZSB0aGUgc2Ft
ZSBvciBhbnl0aGluZyBsaWtlIHRoYXQuCi0vLwotc3RydWN0IFRQdWJsaWNUeXBlCi17Ci0gICAg
VEJhc2ljVHlwZSB0eXBlOwotICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyOwotICAgIFRQcmVjaXNp
b24gcHJlY2lzaW9uOwotICAgIHVuc2lnbmVkIGNoYXIgc2l6ZTsgICAgICAgICAgLy8gc2l6ZSBv
ZiB2ZWN0b3Igb3IgbWF0cml4LCBub3Qgc2l6ZSBvZiBhcnJheQotICAgIGJvb2wgbWF0cml4Owot
ICAgIGJvb2wgYXJyYXk7Ci0gICAgaW50IGFycmF5U2l6ZTsKLSAgICBUVHlwZSogdXNlckRlZjsK
LSAgICBUU291cmNlTG9jIGxpbmU7Ci0KLSAgICB2b2lkIHNldEJhc2ljKFRCYXNpY1R5cGUgYnQs
IFRRdWFsaWZpZXIgcSwgY29uc3QgVFNvdXJjZUxvYyYgbG4pCi0gICAgewotICAgICAgICB0eXBl
ID0gYnQ7Ci0gICAgICAgIHF1YWxpZmllciA9IHE7Ci0gICAgICAgIHByZWNpc2lvbiA9IEVicFVu
ZGVmaW5lZDsKLSAgICAgICAgc2l6ZSA9IDE7Ci0gICAgICAgIG1hdHJpeCA9IGZhbHNlOwotICAg
ICAgICBhcnJheSA9IGZhbHNlOwotICAgICAgICBhcnJheVNpemUgPSAwOwotICAgICAgICB1c2Vy
RGVmID0gMDsKLSAgICAgICAgbGluZSA9IGxuOwotICAgIH0KLQotICAgIHZvaWQgc2V0QWdncmVn
YXRlKHVuc2lnbmVkIGNoYXIgcywgYm9vbCBtID0gZmFsc2UpCi0gICAgewotICAgICAgICBzaXpl
ID0gczsKLSAgICAgICAgbWF0cml4ID0gbTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEFycmF5KGJv
b2wgYSwgaW50IHMgPSAwKQotICAgIHsKLSAgICAgICAgYXJyYXkgPSBhOwotICAgICAgICBhcnJh
eVNpemUgPSBzOwotICAgIH0KLQotICAgIGJvb2wgaXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlz
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghdXNlckRlZikKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHVzZXJEZWYt
PmlzU3RydWN0dXJlQ29udGFpbmluZ0FycmF5cygpOwotICAgIH0KLX07Ci0KLSNlbmRpZiAvLyBf
VFlQRVNfSU5DTFVERURfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA1Y2ZkZDMyMzBlNDg3NTY1ZDNiZWQ2NTZlYjcxOTE4NjlkNzBlY2FmLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMTg0ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0vLyBVbmZvbGRTaG9ydENp
cmN1aXQgaXMgYW4gQVNUIHRyYXZlcnNlciB0byBvdXRwdXQgc2hvcnQtY2lyY3VpdGluZyBvcGVy
YXRvcnMgYXMgaWYtZWxzZSBzdGF0ZW1lbnRzLgotLy8gVGhlIHJlc3VsdHMgYXJlIGFzc2lnbmVk
IHRvIHMjIHRlbXBvcmFyaWVzLCB3aGljaCBhcmUgdXNlZCBieSB0aGUgbWFpbiB0cmFuc2xhdG9y
IGluc3RlYWQgb2YKLS8vIHRoZSBvcmlnaW5hbCBleHByZXNzaW9uLgotLy8KLQotI2luY2x1ZGUg
ImNvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5m
b1NpbmsuaCIKLSNpbmNsdWRlICJjb21waWxlci9PdXRwdXRITFNMLmgiCi0KLW5hbWVzcGFjZSBz
aAotewotVW5mb2xkU2hvcnRDaXJjdWl0OjpVbmZvbGRTaG9ydENpcmN1aXQoVFBhcnNlQ29udGV4
dCAmY29udGV4dCwgT3V0cHV0SExTTCAqb3V0cHV0SExTTCkgOiBtQ29udGV4dChjb250ZXh0KSwg
bU91dHB1dEhMU0wob3V0cHV0SExTTCkKLXsKLSAgICBtVGVtcG9yYXJ5SW5kZXggPSAwOwotfQot
Ci12b2lkIFVuZm9sZFNob3J0Q2lyY3VpdDo6dHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpCi17
Ci0gICAgaW50IHJld2luZEluZGV4ID0gbVRlbXBvcmFyeUluZGV4OwotICAgIG5vZGUtPnRyYXZl
cnNlKHRoaXMpOwotICAgIG1UZW1wb3JhcnlJbmRleCA9IHJld2luZEluZGV4OwotfQotCi1ib29s
IFVuZm9sZFNob3J0Q2lyY3VpdDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5h
cnkgKm5vZGUpCi17Ci0gICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbU91dHB1dEhMU0wtPmdldEJv
ZHlTdHJlYW0oKTsKLQotICAgIC8vIElmIG91ciByaWdodCBub2RlIGRvZXNuJ3QgaGF2ZSBzaWRl
IGVmZmVjdHMsIHdlIGtub3cgd2UgZG9uJ3QgbmVlZCB0byB1bmZvbGQgdGhpcwotICAgIC8vIGV4
cHJlc3Npb246IHRoZXJlIHdpbGwgYmUgbm8gc2hvcnQtY2lyY3VpdGluZyBzaWRlIGVmZmVjdHMg
dG8gYXZvaWQKLSAgICAvLyAobm90ZTogdW5mb2xkaW5nIGRvZXNuJ3QgZGVwZW5kIG9uIHRoZSBs
ZWZ0IG5vZGUgLS0gaXQgd2lsbCBhbHdheXMgYmUgZXZhbHVhdGVkKQotICAgIGlmICghbm9kZS0+
Z2V0UmlnaHQoKS0+aGFzU2lkZUVmZmVjdHMoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLQotICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKLSAgICB7Ci0gICAgICBjYXNl
IEVPcExvZ2ljYWxPcjoKLSAgICAgICAgLy8gInggfHwgeSIgaXMgZXF1aXZhbGVudCB0byAieCA/
IHRydWUgOiB5Iiwgd2hpY2ggdW5mb2xkcyB0byAiYm9vbCBzOyBpZih4KSBzID0gdHJ1ZTsgZWxz
ZSBzID0geTsiLAotICAgICAgICAvLyBhbmQgdGhlbiBmdXJ0aGVyIHNpbXBsaWZpZXMgZG93biB0
byAiYm9vbCBzID0geDsgaWYoIXMpIHMgPSB5OyIuCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlu
dCBpID0gbVRlbXBvcmFyeUluZGV4OwotCi0gICAgICAgICAgICBvdXQgPDwgImJvb2wgcyIgPDwg
aSA8PCAiO1xuIjsKLQotICAgICAgICAgICAgb3V0IDw8ICJ7XG4iOwotCi0gICAgICAgICAgICBt
VGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJh
dmVyc2UodGhpcyk7Ci0gICAgICAgICAgICBvdXQgPDwgInMiIDw8IGkgPDwgIiA9ICI7Ci0gICAg
ICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAgICAgICAgIG5vZGUtPmdldExl
ZnQoKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOwotICAgICAgICAgICAgb3V0IDw8ICI7XG4iOwot
ICAgICAgICAgICAgb3V0IDw8ICJpZiAoIXMiIDw8IGkgPDwgIilcbiIKLSAgICAgICAgICAgICAg
ICAgICAie1xuIjsKLSAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAg
ICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICBvdXQg
PDwgIiAgICBzIiA8PCBpIDw8ICIgPSAiOwotICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0g
aSArIDE7Ci0gICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZShtT3V0cHV0SExT
TCk7Ci0gICAgICAgICAgICBvdXQgPDwgIjtcbiIKLSAgICAgICAgICAgICAgICAgICAifVxuIjsK
LQotICAgICAgICAgICAgb3V0IDw8ICJ9XG4iOwotCi0gICAgICAgICAgICBtVGVtcG9yYXJ5SW5k
ZXggPSBpICsgMTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBjYXNl
IEVPcExvZ2ljYWxBbmQ6Ci0gICAgICAgIC8vICJ4ICYmIHkiIGlzIGVxdWl2YWxlbnQgdG8gIngg
PyB5IDogZmFsc2UiLCB3aGljaCB1bmZvbGRzIHRvICJib29sIHM7IGlmKHgpIHMgPSB5OyBlbHNl
IHMgPSBmYWxzZTsiLAotICAgICAgICAvLyBhbmQgdGhlbiBmdXJ0aGVyIHNpbXBsaWZpZXMgZG93
biB0byAiYm9vbCBzID0geDsgaWYocykgcyA9IHk7Ii4KLSAgICAgICAgewotICAgICAgICAgICAg
aW50IGkgPSBtVGVtcG9yYXJ5SW5kZXg7Ci0KLSAgICAgICAgICAgIG91dCA8PCAiYm9vbCBzIiA8
PCBpIDw8ICI7XG4iOwotCi0gICAgICAgICAgICBvdXQgPDwgIntcbiI7Ci0KLSAgICAgICAgICAg
IG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50
cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgIG91dCA8PCAicyIgPDwgaSA8PCAiID0gIjsKLSAg
ICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAgICAgICAgbm9kZS0+Z2V0
TGVmdCgpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Ci0gICAgICAgICAgICBvdXQgPDwgIjtcbiI7
Ci0gICAgICAgICAgICBvdXQgPDwgImlmIChzIiA8PCBpIDw8ICIpXG4iCi0gICAgICAgICAgICAg
ICAgICAgIntcbiI7Ci0gICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAg
ICAgICAgIG5vZGUtPmdldFJpZ2h0KCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAgICAgb3V0
IDw8ICIgICAgcyIgPDwgaSA8PCAiID0gIjsKLSAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9
IGkgKyAxOwotICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UobU91dHB1dEhM
U0wpOwotICAgICAgICAgICAgb3V0IDw8ICI7XG4iCi0gICAgICAgICAgICAgICAgICAgIn1cbiI7
Ci0KLSAgICAgICAgICAgIG91dCA8PCAifVxuIjsKLQotICAgICAgICAgICAgbVRlbXBvcmFyeUlu
ZGV4ID0gaSArIDE7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgZGVm
YXVsdDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfQotCi1ib29sIFVuZm9sZFNob3J0
Q2lyY3VpdDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5v
ZGUpCi17Ci0gICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbU91dHB1dEhMU0wtPmdldEJvZHlTdHJl
YW0oKTsKLQotICAgIC8vIFVuZm9sZCAiYiA/IHggOiB5IiBpbnRvICJ0eXBlIHM7IGlmKGIpIHMg
PSB4OyBlbHNlIHMgPSB5OyIKLSAgICBpZiAobm9kZS0+dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQot
ICAgIHsKLSAgICAgICAgaW50IGkgPSBtVGVtcG9yYXJ5SW5kZXg7Ci0KLSAgICAgICAgb3V0IDw8
IG1PdXRwdXRITFNMLT50eXBlU3RyaW5nKG5vZGUtPmdldFR5cGUoKSkgPDwgIiBzIiA8PCBpIDw8
ICI7XG4iOwotCi0gICAgICAgIG91dCA8PCAie1xuIjsKLQotICAgICAgICBtVGVtcG9yYXJ5SW5k
ZXggPSBpICsgMTsKLSAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMp
OwotICAgICAgICBvdXQgPDwgImlmICgiOwotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsg
MTsKLSAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsK
LSAgICAgICAgb3V0IDw8ICIpXG4iCi0gICAgICAgICAgICAgICAie1xuIjsKLSAgICAgICAgbVRl
bXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldFRydWVCbG9jaygpLT50cmF2
ZXJzZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8PCAiID0gIjsKLSAgICAg
ICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldFRydWVCbG9jaygp
LT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Ci0gICAgICAgIG91dCA8PCAiO1xuIgotICAgICAgICAg
ICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICJlbHNlXG4iCi0gICAgICAgICAgICAgICAie1xu
IjsKLSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldEZh
bHNlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIG91dCA8PCAiICAgIHMiIDw8IGkg
PDwgIiA9ICI7Ci0gICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAgICBub2Rl
LT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKLSAgICAgICAgb3V0IDw8
ICI7XG4iCi0gICAgICAgICAgICAgICAifVxuIjsKLQotICAgICAgICBvdXQgPDwgIn1cbiI7Ci0K
LSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1ib29sIFVuZm9sZFNob3J0Q2lyY3VpdDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0
LCBUSW50ZXJtTG9vcCAqbm9kZSkKLXsKLSAgICBpbnQgcmV3aW5kSW5kZXggPSBtVGVtcG9yYXJ5
SW5kZXg7Ci0KLSAgICBpZiAobm9kZS0+Z2V0SW5pdCgpKQotICAgIHsKLSAgICAgICAgbm9kZS0+
Z2V0SW5pdCgpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG5vZGUtPmdl
dENvbmRpdGlvbigpKQotICAgIHsKLSAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZl
cnNlKHRoaXMpOwotICAgIH0KLQotICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkpCi0gICAg
ewotICAgICAgICBub2RlLT5nZXRFeHByZXNzaW9uKCktPnRyYXZlcnNlKHRoaXMpOwotICAgIH0K
LQotICAgIG1UZW1wb3JhcnlJbmRleCA9IHJld2luZEluZGV4OwotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1pbnQgVW5mb2xkU2hvcnRDaXJjdWl0OjpnZXROZXh0VGVtcG9yYXJ5SW5kZXgoKQot
ewotICAgIHJldHVybiBtVGVtcG9yYXJ5SW5kZXgrKzsKLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWUyOTg5ZmE0YWI0OTUwMjViYTRjOTE3NzVh
MWIwZTdmYzI1ZTlkNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJj
dWl0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwot
Ly8gVW5mb2xkU2hvcnRDaXJjdWl0IGlzIGFuIEFTVCB0cmF2ZXJzZXIgdG8gb3V0cHV0IHNob3J0
LWNpcmN1aXRpbmcgb3BlcmF0b3JzIGFzIGlmLWVsc2Ugc3RhdGVtZW50cwotLy8KLQotI2lmbmRl
ZiBDT01QSUxFUl9VTkZPTERTSE9SVENJUkNVSVRfSF8KLSNkZWZpbmUgQ09NUElMRVJfVU5GT0xE
U0hPUlRDSVJDVUlUX0hfCi0KLSNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKLSNp
bmNsdWRlICJjb21waWxlci9QYXJzZUNvbnRleHQuaCIKLQotbmFtZXNwYWNlIHNoCi17Ci1jbGFz
cyBPdXRwdXRITFNMOwotCi1jbGFzcyBVbmZvbGRTaG9ydENpcmN1aXQgOiBwdWJsaWMgVEludGVy
bVRyYXZlcnNlcgotewotICBwdWJsaWM6Ci0gICAgVW5mb2xkU2hvcnRDaXJjdWl0KFRQYXJzZUNv
bnRleHQgJmNvbnRleHQsIE91dHB1dEhMU0wgKm91dHB1dEhMU0wpOwotCi0gICAgdm9pZCB0cmF2
ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7Ci0gICAgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNp
dCwgVEludGVybUJpbmFyeSopOwotICAgIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQs
IFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpOwotICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0
LCBUSW50ZXJtTG9vcCAqbm9kZSk7Ci0KLSAgICBpbnQgZ2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7
Ci0KLSAgcHJvdGVjdGVkOgotICAgIFRQYXJzZUNvbnRleHQgJm1Db250ZXh0OwotICAgIE91dHB1
dEhMU0wgKmNvbnN0IG1PdXRwdXRITFNMOwotCi0gICAgaW50IG1UZW1wb3JhcnlJbmRleDsKLX07
Ci19Ci0KLSNlbmRpZiAgIC8vIENPTVBJTEVSX1VORk9MRFNIT1JUQ0lSQ1VJVF9IXwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2ly
Y3VpdEFTVC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xk
U2hvcnRDaXJjdWl0QVNULmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZkMGYy
ZjMwYmUxNjIxYjgzYjAxZGI0ZmFiOTA0YjRhZTI4YmY0ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDgxICsw
LDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9VbmZvbGRTaG9y
dENpcmN1aXRBU1QuaCIKLQotbmFtZXNwYWNlCi17Ci0KLS8vICJ4IHx8IHkiIGlzIGVxdWl2YWxl
bnQgdG8gInggPyB0cnVlIDogeSIuCi1USW50ZXJtU2VsZWN0aW9uICpVbmZvbGRPUihUSW50ZXJt
VHlwZWQgKngsIFRJbnRlcm1UeXBlZCAqeSkKLXsKLSAgICBjb25zdCBUVHlwZSBib29sVHlwZShF
YnRCb29sLCBFYnBVbmRlZmluZWQpOwotICAgIENvbnN0YW50VW5pb24gKnUgPSBuZXcgQ29uc3Rh
bnRVbmlvbjsKLSAgICB1LT5zZXRCQ29uc3QodHJ1ZSk7Ci0gICAgVEludGVybUNvbnN0YW50VW5p
b24gKnRydWVOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKAotICAgICAgICB1LCBUVHlw
ZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0LCAxKSk7Ci0gICAgcmV0dXJuIG5ldyBU
SW50ZXJtU2VsZWN0aW9uKHgsIHRydWVOb2RlLCB5LCBib29sVHlwZSk7Ci19Ci0KLS8vICJ4ICYm
IHkiIGlzIGVxdWl2YWxlbnQgdG8gInggPyB5IDogZmFsc2UiLgotVEludGVybVNlbGVjdGlvbiAq
VW5mb2xkQU5EKFRJbnRlcm1UeXBlZCAqeCwgVEludGVybVR5cGVkICp5KQotewotICAgIGNvbnN0
IFRUeXBlIGJvb2xUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCk7Ci0gICAgQ29uc3RhbnRVbmlv
biAqdSA9IG5ldyBDb25zdGFudFVuaW9uOwotICAgIHUtPnNldEJDb25zdChmYWxzZSk7Ci0gICAg
VEludGVybUNvbnN0YW50VW5pb24gKmZhbHNlTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlv
bigKLSAgICAgICAgdSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCwgMSkp
OwotICAgIHJldHVybiBuZXcgVEludGVybVNlbGVjdGlvbih4LCB5LCBmYWxzZU5vZGUsIGJvb2xU
eXBlKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGFub255bW91cwotCi1ib29sIFVuZm9sZFNob3J0
Q2lyY3VpdEFTVDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUp
Ci17Ci0gICAgVEludGVybVNlbGVjdGlvbiAqcmVwbGFjZW1lbnQgPSBOVUxMOwotCi0gICAgc3dp
dGNoIChub2RlLT5nZXRPcCgpKQotICAgIHsKLSAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgotICAg
ICAgICByZXBsYWNlbWVudCA9IFVuZm9sZE9SKG5vZGUtPmdldExlZnQoKSwgbm9kZS0+Z2V0Umln
aHQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOgotICAgICAg
ICByZXBsYWNlbWVudCA9IFVuZm9sZEFORChub2RlLT5nZXRMZWZ0KCksIG5vZGUtPmdldFJpZ2h0
KCkpOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICBpZiAocmVwbGFjZW1lbnQpCi0gICAgewotICAgICAgICByZXBsYWNlbWVudHMucHVz
aF9iYWNrKAotICAgICAgICAgICAgTm9kZVVwZGF0ZUVudHJ5KGdldFBhcmVudE5vZGUoKSwgbm9k
ZSwgcmVwbGFjZW1lbnQpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgVW5m
b2xkU2hvcnRDaXJjdWl0QVNUOjp1cGRhdGVUcmVlKCkKLXsKLSAgICBmb3IgKHNpemVfdCBpaSA9
IDA7IGlpIDwgcmVwbGFjZW1lbnRzLnNpemUoKTsgKytpaSkKLSAgICB7Ci0gICAgICAgIGNvbnN0
IE5vZGVVcGRhdGVFbnRyeSYgZW50cnkgPSByZXBsYWNlbWVudHNbaWldOwotICAgICAgICBBU1NF
UlQoZW50cnkucGFyZW50KTsKLSAgICAgICAgYm9vbCByZXBsYWNlZCA9IGVudHJ5LnBhcmVudC0+
cmVwbGFjZUNoaWxkTm9kZSgKLSAgICAgICAgICAgIGVudHJ5Lm9yaWdpbmFsLCBlbnRyeS5yZXBs
YWNlbWVudCk7Ci0gICAgICAgIEFTU0VSVChyZXBsYWNlZCk7Ci0KLSAgICAgICAgLy8gSW4gQVNU
IHRyYXZlcnNpbmcsIGEgcGFyZW50IGlzIHZpc2l0ZWQgYmVmb3JlIGl0cyBjaGlsZHJlbi4KLSAg
ICAgICAgLy8gQWZ0ZXIgd2UgcmVwbGFjZSBhIG5vZGUsIGlmIGFuIGltbWVkaWF0ZSBjaGlsZCBp
cyB0bwotICAgICAgICAvLyBiZSByZXBsYWNlZCwgd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9u
J3QgdXBkYXRlIHRoZSByZXBsYWNlZAotICAgIC8vIG5vZGU7IGluc3RlYWQsIHdlIHVwZGF0ZSB0
aGUgcmVwbGFjZW1lbnQgbm9kZS4KLSAgICAgICAgZm9yIChzaXplX3QgamogPSBpaSArIDE7IGpq
IDwgcmVwbGFjZW1lbnRzLnNpemUoKTsgKytqaikKLSAgICAgICAgewotICAgICAgICAgICAgTm9k
ZVVwZGF0ZUVudHJ5JiBlbnRyeTIgPSByZXBsYWNlbWVudHNbampdOwotICAgICAgICAgICAgaWYg
KGVudHJ5Mi5wYXJlbnQgPT0gZW50cnkub3JpZ2luYWwpCi0gICAgICAgICAgICAgICAgZW50cnky
LnBhcmVudCA9IGVudHJ5LnJlcGxhY2VtZW50OwotICAgICAgICB9Ci0gICAgfQotfQotCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRD
aXJjdWl0QVNULmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xk
U2hvcnRDaXJjdWl0QVNULmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmYzUwMDY2
NDg1NDY4YWQxNjNmMzkxYjVjNjJmMTYxODI3YTFiNWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1VuZm9sZFNob3J0Q2lyY3VpdEFTVC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBA
QAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLS8vIFVuZm9sZFNob3J0Q2lyY3VpdEFTVCBpcyBhbiBBU1Qg
dHJhdmVyc2VyIHRvIHJlcGxhY2Ugc2hvcnQtY2lyY3VpdGluZwotLy8gb3BlcmF0aW9ucyB3aXRo
IHRlcm5hcnkgb3BlcmF0aW9ucy4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfVU5GT0xEX1NIT1JU
X0NJUkNVSVRfQVNUX0hfCi0jZGVmaW5lIENPTVBJTEVSX1VORk9MRF9TSE9SVF9DSVJDVUlUX0FT
VF9IXwotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRlICJjb21waWxl
ci9pbnRlcm1lZGlhdGUuaCIKLQotLy8gVGhpcyB0cmF2ZXJzZXIgaWRlbnRpZmllcyBhbGwgdGhl
IHNob3J0IGNpcmN1aXQgYmluYXJ5ICBub2RlcyB0aGF0IG5lZWQgdG8KLS8vIGJlIHJlcGxhY2Vk
LCBhbmQgY3JlYXRlcyB0aGUgY29ycmVzcG9uZGluZyByZXBsYWNlbWVudCBub2Rlcy4gSG93ZXZl
ciwKLS8vIHRoZSBhY3R1YWwgcmVwbGFjZW1lbnRzIGhhcHBlbiBhZnRlciB0aGUgdHJhdmVyc2Ug
dGhyb3VnaCB1cGRhdGVUcmVlKCkuCi0KLWNsYXNzIFVuZm9sZFNob3J0Q2lyY3VpdEFTVCA6IHB1
YmxpYyBUSW50ZXJtVHJhdmVyc2VyCi17Ci0gIHB1YmxpYzoKLSAgICBVbmZvbGRTaG9ydENpcmN1
aXRBU1QoKSB7IH0KLQotICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwg
VEludGVybUJpbmFyeSAqKTsKLQotICAgIHZvaWQgdXBkYXRlVHJlZSgpOwotCi0gIHByaXZhdGU6
Ci0gICAgc3RydWN0IE5vZGVVcGRhdGVFbnRyeQotICAgIHsKLSAgICAgICAgTm9kZVVwZGF0ZUVu
dHJ5KFRJbnRlcm1Ob2RlICpfcGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgVEludGVy
bU5vZGUgKl9vcmlnaW5hbCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICpf
cmVwbGFjZW1lbnQpCi0gICAgICAgICAgICA6IHBhcmVudChfcGFyZW50KSwKLSAgICAgICAgICAg
ICAgb3JpZ2luYWwoX29yaWdpbmFsKSwKLSAgICAgICAgICAgICAgcmVwbGFjZW1lbnQoX3JlcGxh
Y2VtZW50KSB7fQotCi0gICAgICAgIFRJbnRlcm1Ob2RlICpwYXJlbnQ7Ci0gICAgICAgIFRJbnRl
cm1Ob2RlICpvcmlnaW5hbDsKLSAgICAgICAgVEludGVybU5vZGUgKnJlcGxhY2VtZW50OwotICAg
IH07Ci0KLSAgICAvLyBEdXJpbmcgdHJhdmVyc2luZywgc2F2ZSBhbGwgdGhlIHJlcGxhY2VtZW50
cyB0aGF0IG5lZWQgdG8gaGFwcGVuOwotICAgIC8vIHRoZW4gcmVwbGFjZSB0aGVtIGJ5IGNhbGxp
bmcgdXBkYXRlTm9kZXMoKS4KLSAgICBzdGQ6OnZlY3RvcjxOb2RlVXBkYXRlRW50cnk+IHJlcGxh
Y2VtZW50czsKLQotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihVbmZvbGRTaG9ydENpcmN1
aXRBU1QpOwotfTsKLQotI2VuZGlmICAvLyBDT01QSUxFUl9VTkZPTERfU0hPUlRfQ0lSQ1VJVF9B
U1RfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9V
bmlmb3JtLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Vbmlmb3Jt
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM2N2RiMmJlOGU0ZmY1ZDEzOWMw
ZTcxYzhiYWI4NGM3NGQ0N2ZkYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5pZm9ybS5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAy
MDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1
ZGUgImNvbXBpbGVyL1VuaWZvcm0uaCIKLQotbmFtZXNwYWNlIHNoCi17Ci0KLVVuaWZvcm06OlVu
aWZvcm0oR0xlbnVtIHR5cGUsIEdMZW51bSBwcmVjaXNpb24sIGNvbnN0IGNoYXIgKm5hbWUsIGlu
dCBhcnJheVNpemUsIGludCByZWdpc3RlckluZGV4KQotewotICAgIHRoaXMtPnR5cGUgPSB0eXBl
OwotICAgIHRoaXMtPnByZWNpc2lvbiA9IHByZWNpc2lvbjsKLSAgICB0aGlzLT5uYW1lID0gbmFt
ZTsKLSAgICB0aGlzLT5hcnJheVNpemUgPSBhcnJheVNpemU7Ci0gICAgdGhpcy0+cmVnaXN0ZXJJ
bmRleCA9IHJlZ2lzdGVySW5kZXg7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9Vbmlmb3JtLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvVW5pZm9ybS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0
YzUzZmZhN2QyZmM1ODRlNDAwYzJjZjA0ZDAxMmU2YWYxZTI1MmQ3Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9Vbmlmb3JtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9VTklGT1JNX0hfCi0jZGVmaW5lIENPTVBJTEVS
X1VOSUZPUk1fSF8KLQotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNk
ZWZpbmUgR0xfQVBJQ0FMTAotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotCi1uYW1lc3BhY2Ugc2gK
LXsKLQotc3RydWN0IFVuaWZvcm0KLXsKLSAgICBVbmlmb3JtKEdMZW51bSB0eXBlLCBHTGVudW0g
cHJlY2lzaW9uLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgYXJyYXlTaXplLCBpbnQgcmVnaXN0ZXJJ
bmRleCk7Ci0KLSAgICBHTGVudW0gdHlwZTsKLSAgICBHTGVudW0gcHJlY2lzaW9uOwotICAgIHN0
ZDo6c3RyaW5nIG5hbWU7Ci0gICAgdW5zaWduZWQgaW50IGFycmF5U2l6ZTsKLSAgICAKLSAgICBp
bnQgcmVnaXN0ZXJJbmRleDsKLX07Ci0KLXR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybT4gQWN0
aXZlVW5pZm9ybXM7Ci0KLX0KLQotI2VuZGlmICAgLy8gQ09NUElMRVJfVU5JRk9STV9IXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGlt
aXRhdGlvbnMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhbGlk
YXRlTGltaXRhdGlvbnMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDk2OWM0
ODlmYTFkMGQ4ZTg5Yzk3ODNhY2IxYTcxOWI3MWRlMDNkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUxMiArMCww
IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvVmFsaWRhdGVMaW1p
dGF0aW9ucy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCi0jaW5jbHVkZSAiY29t
cGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNl
Q29udGV4dC5oIgotCi1uYW1lc3BhY2UgewotYm9vbCBJc0xvb3BJbmRleChjb25zdCBUSW50ZXJt
U3ltYm9sKiBzeW1ib2wsIGNvbnN0IFRMb29wU3RhY2smIHN0YWNrKSB7Ci0gICAgZm9yIChUTG9v
cFN0YWNrOjpjb25zdF9pdGVyYXRvciBpID0gc3RhY2suYmVnaW4oKTsgaSAhPSBzdGFjay5lbmQo
KTsgKytpKSB7Ci0gICAgICAgIGlmIChpLT5pbmRleC5pZCA9PSBzeW1ib2wtPmdldElkKCkpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12
b2lkIE1hcmtMb29wRm9yVW5yb2xsKGNvbnN0IFRJbnRlcm1TeW1ib2wqIHN5bWJvbCwgVExvb3BT
dGFjayYgc3RhY2spIHsKLSAgICBmb3IgKFRMb29wU3RhY2s6Oml0ZXJhdG9yIGkgPSBzdGFjay5i
ZWdpbigpOyBpICE9IHN0YWNrLmVuZCgpOyArK2kpIHsKLSAgICAgICAgaWYgKGktPmluZGV4Lmlk
ID09IHN5bWJvbC0+Z2V0SWQoKSkgewotICAgICAgICAgICAgQVNTRVJUKGktPmxvb3AgIT0gTlVM
TCk7Ci0gICAgICAgICAgICBpLT5sb29wLT5zZXRVbnJvbGxGbGFnKHRydWUpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIFVOUkVBQ0hBQkxFKCk7Ci19Ci0KLS8v
IFRyYXZlcnNlcyBhIG5vZGUgdG8gY2hlY2sgaWYgaXQgcmVwcmVzZW50cyBhIGNvbnN0YW50IGlu
ZGV4IGV4cHJlc3Npb24uCi0vLyBEZWZpbml0aW9uOgotLy8gY29uc3RhbnQtaW5kZXgtZXhwcmVz
c2lvbnMgYXJlIGEgc3VwZXJzZXQgb2YgY29uc3RhbnQtZXhwcmVzc2lvbnMuCi0vLyBDb25zdGFu
dC1pbmRleC1leHByZXNzaW9ucyBjYW4gaW5jbHVkZSBsb29wIGluZGljZXMgYXMgZGVmaW5lZCBp
bgotLy8gR0xTTCBFUyAxLjAgc3BlYywgQXBwZW5kaXggQSwgc2VjdGlvbiA0LgotLy8gVGhlIGZv
bGxvd2luZyBhcmUgY29uc3RhbnQtaW5kZXgtZXhwcmVzc2lvbnM6Ci0vLyAtIENvbnN0YW50IGV4
cHJlc3Npb25zCi0vLyAtIExvb3AgaW5kaWNlcyBhcyBkZWZpbmVkIGluIHNlY3Rpb24gNAotLy8g
LSBFeHByZXNzaW9ucyBjb21wb3NlZCBvZiBib3RoIG9mIHRoZSBhYm92ZQotY2xhc3MgVmFsaWRh
dGVDb25zdEluZGV4RXhwciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKLXB1YmxpYzoKLSAg
ICBWYWxpZGF0ZUNvbnN0SW5kZXhFeHByKGNvbnN0IFRMb29wU3RhY2smIHN0YWNrKQotICAgICAg
ICA6IG1WYWxpZCh0cnVlKSwgbUxvb3BTdGFjayhzdGFjaykge30KLQotICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiB0aGUgcGFyc2VkIG5vZGUgcmVwcmVzZW50cyBhIGNvbnN0YW50IGluZGV4IGV4cHJl
c3Npb24uCi0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbVZhbGlkOyB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogc3ltYm9sKSB7Ci0gICAg
ICAgIC8vIE9ubHkgY29uc3RhbnRzIGFuZCBsb29wIGluZGljZXMgYXJlIGFsbG93ZWQgaW4gYQot
ICAgICAgICAvLyBjb25zdGFudCBpbmRleCBleHByZXNzaW9uLgotICAgICAgICBpZiAobVZhbGlk
KSB7Ci0gICAgICAgICAgICBtVmFsaWQgPSAoc3ltYm9sLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFD
b25zdCkgfHwKLSAgICAgICAgICAgICAgICAgICAgIElzTG9vcEluZGV4KHN5bWJvbCwgbUxvb3BT
dGFjayk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBtVmFsaWQ7Ci0g
ICAgY29uc3QgVExvb3BTdGFjayYgbUxvb3BTdGFjazsKLX07Ci0KLS8vIFRyYXZlcnNlcyBhIG5v
ZGUgdG8gY2hlY2sgaWYgaXQgdXNlcyBhIGxvb3AgaW5kZXguCi0vLyBJZiBhbiBpbnQgbG9vcCBp
bmRleCBpcyB1c2VkIGluIGl0cyBib2R5IGFzIGEgc2FtcGxlciBhcnJheSBpbmRleCwKLS8vIG1h
cmsgdGhlIGxvb3AgZm9yIHVucm9sbC4KLWNsYXNzIFZhbGlkYXRlTG9vcEluZGV4RXhwciA6IHB1
YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKLXB1YmxpYzoKLSAgICBWYWxpZGF0ZUxvb3BJbmRleEV4
cHIoVExvb3BTdGFjayYgc3RhY2spCi0gICAgICAgIDogbVVzZXNGbG9hdExvb3BJbmRleChmYWxz
ZSksCi0gICAgICAgICAgbVVzZXNJbnRMb29wSW5kZXgoZmFsc2UpLAotICAgICAgICAgIG1Mb29w
U3RhY2soc3RhY2spIHt9Ci0KLSAgICBib29sIHVzZXNGbG9hdExvb3BJbmRleCgpIGNvbnN0IHsg
cmV0dXJuIG1Vc2VzRmxvYXRMb29wSW5kZXg7IH0KLSAgICBib29sIHVzZXNJbnRMb29wSW5kZXgo
KSBjb25zdCB7IHJldHVybiBtVXNlc0ludExvb3BJbmRleDsgfQotCi0gICAgdmlydHVhbCB2b2lk
IHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCkgewotICAgICAgICBpZiAoSXNMb29w
SW5kZXgoc3ltYm9sLCBtTG9vcFN0YWNrKSkgewotICAgICAgICAgICAgc3dpdGNoIChzeW1ib2wt
PmdldEJhc2ljVHlwZSgpKSB7Ci0gICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6Ci0gICAgICAg
ICAgICAgICAgbVVzZXNGbG9hdExvb3BJbmRleCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgRWJ0SW50OgotICAgICAgICAgICAgICAgIG1Vc2VzSW50
TG9vcEluZGV4ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBNYXJrTG9vcEZvclVucm9sbChzeW1i
b2wsIG1Mb29wU3RhY2spOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBtVXNlc0Zsb2F0TG9vcEluZGV4
OwotICAgIGJvb2wgbVVzZXNJbnRMb29wSW5kZXg7Ci0gICAgVExvb3BTdGFjayYgbUxvb3BTdGFj
azsKLX07Ci19ICAvLyBuYW1lc3BhY2UKLQotVmFsaWRhdGVMaW1pdGF0aW9uczo6VmFsaWRhdGVM
aW1pdGF0aW9ucyhTaFNoYWRlclR5cGUgc2hhZGVyVHlwZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVEluZm9TaW5rQmFzZSYgc2luaykKLSAgICA6IG1TaGFkZXJU
eXBlKHNoYWRlclR5cGUpLAotICAgICAgbVNpbmsoc2luayksCi0gICAgICBtTnVtRXJyb3JzKDAp
Ci17Ci19Ci0KLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRCaW5hcnkoVmlzaXQsIFRJ
bnRlcm1CaW5hcnkqIG5vZGUpCi17Ci0gICAgLy8gQ2hlY2sgaWYgbG9vcCBpbmRleCBpcyBtb2Rp
ZmllZCBpbiB0aGUgbG9vcCBib2R5LgotICAgIHZhbGlkYXRlT3BlcmF0aW9uKG5vZGUsIG5vZGUt
PmdldExlZnQoKSk7Ci0KLSAgICAvLyBDaGVjayBpbmRleGluZy4KLSAgICBzd2l0Y2ggKG5vZGUt
PmdldE9wKCkpIHsKLSAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6Ci0gICAgICAgIHZhbGlkYXRl
SW5kZXhpbmcobm9kZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BJbmRleEluZGly
ZWN0OgotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotICAgICAgICAvLyBMb29wIHVucm9sbGluZyBp
cyBhIHdvcmstYXJvdW5kIGZvciBhIE1hYyBDZyBjb21waWxlciBidWcgd2hlcmUgaXQKLSAgICAg
ICAgLy8gY3Jhc2hlcyB3aGVuIGEgc2FtcGxlciBhcnJheSdzIGluZGV4IGlzIGFsc28gdGhlIGxv
b3AgaW5kZXguCi0gICAgICAgIC8vIE9uY2UgQXBwbGUgZml4ZXMgdGhpcyBidWcsIHdlIHNob3Vs
ZCByZW1vdmUgdGhlIGNvZGUgaW4gdGhpcyBDTC4KLSAgICAgICAgLy8gU2VlIGh0dHA6Ly9jb2Rl
cmV2aWV3LmFwcHNwb3QuY29tLzQzMzEwNDgvLgotICAgICAgICBpZiAoKG5vZGUtPmdldExlZnQo
KSAhPSBOVUxMKSAmJiAobm9kZS0+Z2V0UmlnaHQoKSAhPSBOVUxMKSAmJgotICAgICAgICAgICAg
KG5vZGUtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCkpKSB7Ci0gICAgICAgICAgICBUSW50
ZXJtU3ltYm9sKiBzeW1ib2wgPSBub2RlLT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOwot
ICAgICAgICAgICAgaWYgKElzU2FtcGxlcihzeW1ib2wtPmdldEJhc2ljVHlwZSgpKSAmJiBzeW1i
b2wtPmlzQXJyYXkoKSkgewotICAgICAgICAgICAgICAgIFZhbGlkYXRlTG9vcEluZGV4RXhwciB2
YWxpZGF0ZShtTG9vcFN0YWNrKTsKLSAgICAgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50
cmF2ZXJzZSgmdmFsaWRhdGUpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZS51c2VzRmxv
YXRMb29wSW5kZXgoKSkgewotICAgICAgICAgICAgICAgICAgICBlcnJvcihub2RlLT5nZXRMaW5l
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJzYW1wbGVyIGFycmF5IGluZGV4IGlzIGZs
b2F0IGxvb3AgaW5kZXgiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9yIik7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAg
dmFsaWRhdGVJbmRleGluZyhub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBi
cmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmFsaWRhdGVMaW1pdGF0
aW9uczo6dmlzaXRVbmFyeShWaXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQotewotICAgIC8vIENo
ZWNrIGlmIGxvb3AgaW5kZXggaXMgbW9kaWZpZWQgaW4gdGhlIGxvb3AgYm9keS4KLSAgICB2YWxp
ZGF0ZU9wZXJhdGlvbihub2RlLCBub2RlLT5nZXRPcGVyYW5kKCkpOwotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQs
IFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCi17Ci0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKSB7
Ci0gICAgICBjYXNlIEVPcEZ1bmN0aW9uQ2FsbDoKLSAgICAgICAgdmFsaWRhdGVGdW5jdGlvbkNh
bGwobm9kZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6
OnZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AqIG5vZGUpCi17Ci0gICAgaWYgKCF2YWxpZGF0
ZUxvb3BUeXBlKG5vZGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBUTG9vcEluZm8g
aW5mbzsKLSAgICBtZW1zZXQoJmluZm8sIDAsIHNpemVvZihUTG9vcEluZm8pKTsKLSAgICBpbmZv
Lmxvb3AgPSBub2RlOwotICAgIGlmICghdmFsaWRhdGVGb3JMb29wSGVhZGVyKG5vZGUsICZpbmZv
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVEludGVybU5vZGUqIGJvZHkgPSBub2Rl
LT5nZXRCb2R5KCk7Ci0gICAgaWYgKGJvZHkgIT0gTlVMTCkgewotICAgICAgICBtTG9vcFN0YWNr
LnB1c2hfYmFjayhpbmZvKTsKLSAgICAgICAgYm9keS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAg
IG1Mb29wU3RhY2sucG9wX2JhY2soKTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgbG9vcCBpcyBmdWxs
eSBwcm9jZXNzZWQgLSBubyBuZWVkIHRvIHZpc2l0IGNoaWxkcmVuLgotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotdm9pZCBWYWxpZGF0ZUxpbWl0YXRpb25zOjplcnJvcihUU291cmNlTG9jIGxvYywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcmVhc29uLCBjb25z
dCBjaGFyKiB0b2tlbikKLXsKLSAgICBtU2luay5wcmVmaXgoRVByZWZpeEVycm9yKTsKLSAgICBt
U2luay5sb2NhdGlvbihsb2MpOwotICAgIG1TaW5rIDw8ICInIiA8PCB0b2tlbiA8PCAiJyA6ICIg
PDwgcmVhc29uIDw8ICJcbiI7Ci0gICAgKyttTnVtRXJyb3JzOwotfQotCi1ib29sIFZhbGlkYXRl
TGltaXRhdGlvbnM6OndpdGhpbkxvb3BCb2R5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gIW1Mb29w
U3RhY2suZW1wdHkoKTsKLX0KLQotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjppc0xvb3BJbmRl
eChjb25zdCBUSW50ZXJtU3ltYm9sKiBzeW1ib2wpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElzTG9v
cEluZGV4KHN5bWJvbCwgbUxvb3BTdGFjayk7Ci19Ci0KLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9u
czo6dmFsaWRhdGVMb29wVHlwZShUSW50ZXJtTG9vcCogbm9kZSkgewotICAgIFRMb29wVHlwZSB0
eXBlID0gbm9kZS0+Z2V0VHlwZSgpOwotICAgIGlmICh0eXBlID09IEVMb29wRm9yKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIFJlamVjdCB3aGlsZSBhbmQgZG8td2hpbGUgbG9vcHMu
Ci0gICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLAotICAgICAgICAgICJUaGlzIHR5cGUgb2YgbG9v
cCBpcyBub3QgYWxsb3dlZCIsCi0gICAgICAgICAgdHlwZSA9PSBFTG9vcFdoaWxlID8gIndoaWxl
IiA6ICJkbyIpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBWYWxpZGF0ZUxpbWl0YXRp
b25zOjp2YWxpZGF0ZUZvckxvb3BIZWFkZXIoVEludGVybUxvb3AqIG5vZGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTG9vcEluZm8qIGluZm8pCi17
Ci0gICAgQVNTRVJUKG5vZGUtPmdldFR5cGUoKSA9PSBFTG9vcEZvcik7Ci0KLSAgICAvLwotICAg
IC8vIFRoZSBmb3Igc3RhdGVtZW50IGhhcyB0aGUgZm9ybToKLSAgICAvLyAgICBmb3IgKCBpbml0
LWRlY2xhcmF0aW9uIDsgY29uZGl0aW9uIDsgZXhwcmVzc2lvbiApIHN0YXRlbWVudAotICAgIC8v
Ci0gICAgaWYgKCF2YWxpZGF0ZUZvckxvb3BJbml0KG5vZGUsIGluZm8pKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKCF2YWxpZGF0ZUZvckxvb3BDb25kKG5vZGUsIGluZm8pKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCF2YWxpZGF0ZUZvckxvb3BFeHByKG5vZGUsIGlu
Zm8pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvb3BJbml0KFRJbnRlcm1Mb29wKiBu
b2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRMb29w
SW5mbyogaW5mbykKLXsKLSAgICBUSW50ZXJtTm9kZSogaW5pdCA9IG5vZGUtPmdldEluaXQoKTsK
LSAgICBpZiAoaW5pdCA9PSBOVUxMKSB7Ci0gICAgICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwg
Ik1pc3NpbmcgaW5pdCBkZWNsYXJhdGlvbiIsICJmb3IiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIC8vCi0gICAgLy8gaW5pdC1kZWNsYXJhdGlvbiBoYXMgdGhlIGZvcm06
Ci0gICAgLy8gICAgIHR5cGUtc3BlY2lmaWVyIGlkZW50aWZpZXIgPSBjb25zdGFudC1leHByZXNz
aW9uCi0gICAgLy8KLSAgICBUSW50ZXJtQWdncmVnYXRlKiBkZWNsID0gaW5pdC0+Z2V0QXNBZ2dy
ZWdhdGUoKTsKLSAgICBpZiAoKGRlY2wgPT0gTlVMTCkgfHwgKGRlY2wtPmdldE9wKCkgIT0gRU9w
RGVjbGFyYXRpb24pKSB7Ci0gICAgICAgIGVycm9yKGluaXQtPmdldExpbmUoKSwgIkludmFsaWQg
aW5pdCBkZWNsYXJhdGlvbiIsICJmb3IiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICAvLyBUbyBrZWVwIHRoaW5ncyBzaW1wbGUgZG8gbm90IGFsbG93IGRlY2xhcmF0aW9uIGxp
c3QuCi0gICAgVEludGVybVNlcXVlbmNlJiBkZWNsU2VxID0gZGVjbC0+Z2V0U2VxdWVuY2UoKTsK
LSAgICBpZiAoZGVjbFNlcS5zaXplKCkgIT0gMSkgewotICAgICAgICBlcnJvcihkZWNsLT5nZXRM
aW5lKCksICJJbnZhbGlkIGluaXQgZGVjbGFyYXRpb24iLCAiZm9yIik7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgVEludGVybUJpbmFyeSogZGVjbEluaXQgPSBkZWNsU2VxWzBd
LT5nZXRBc0JpbmFyeU5vZGUoKTsKLSAgICBpZiAoKGRlY2xJbml0ID09IE5VTEwpIHx8IChkZWNs
SW5pdC0+Z2V0T3AoKSAhPSBFT3BJbml0aWFsaXplKSkgewotICAgICAgICBlcnJvcihkZWNsLT5n
ZXRMaW5lKCksICJJbnZhbGlkIGluaXQgZGVjbGFyYXRpb24iLCAiZm9yIik7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gZGVjbEluaXQt
PmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0gICAgaWYgKHN5bWJvbCA9PSBOVUxMKSB7
Ci0gICAgICAgIGVycm9yKGRlY2xJbml0LT5nZXRMaW5lKCksICJJbnZhbGlkIGluaXQgZGVjbGFy
YXRpb24iLCAiZm9yIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgLy8gVGhl
IGxvb3AgaW5kZXggaGFzIHR5cGUgaW50IG9yIGZsb2F0LgotICAgIFRCYXNpY1R5cGUgdHlwZSA9
IHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCk7Ci0gICAgaWYgKCh0eXBlICE9IEVidEludCkgJiYgKHR5
cGUgIT0gRWJ0RmxvYXQpKSB7Ci0gICAgICAgIGVycm9yKHN5bWJvbC0+Z2V0TGluZSgpLAotICAg
ICAgICAgICAgICAiSW52YWxpZCB0eXBlIGZvciBsb29wIGluZGV4IiwgZ2V0QmFzaWNTdHJpbmco
dHlwZSkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIFRoZSBsb29wIGlu
ZGV4IGlzIGluaXRpYWxpemVkIHdpdGggY29uc3RhbnQgZXhwcmVzc2lvbi4KLSAgICBpZiAoIWlz
Q29uc3RFeHByKGRlY2xJbml0LT5nZXRSaWdodCgpKSkgewotICAgICAgICBlcnJvcihkZWNsSW5p
dC0+Z2V0TGluZSgpLAotICAgICAgICAgICAgICAiTG9vcCBpbmRleCBjYW5ub3QgYmUgaW5pdGlh
bGl6ZWQgd2l0aCBub24tY29uc3RhbnQgZXhwcmVzc2lvbiIsCi0gICAgICAgICAgICAgIHN5bWJv
bC0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBpbmZvLT5pbmRleC5pZCA9IHN5bWJvbC0+Z2V0SWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvb3BDb25kKFRJbnRl
cm1Mb29wKiBub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRMb29wSW5mbyogaW5mbykKLXsKLSAgICBUSW50ZXJtTm9kZSogY29uZCA9IG5vZGUtPmdl
dENvbmRpdGlvbigpOwotICAgIGlmIChjb25kID09IE5VTEwpIHsKLSAgICAgICAgZXJyb3Iobm9k
ZS0+Z2V0TGluZSgpLCAiTWlzc2luZyBjb25kaXRpb24iLCAiZm9yIik7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgLy8KLSAgICAvLyBjb25kaXRpb24gaGFzIHRoZSBmb3JtOgot
ICAgIC8vICAgICBsb29wX2luZGV4IHJlbGF0aW9uYWxfb3BlcmF0b3IgY29uc3RhbnRfZXhwcmVz
c2lvbgotICAgIC8vCi0gICAgVEludGVybUJpbmFyeSogYmluT3AgPSBjb25kLT5nZXRBc0JpbmFy
eU5vZGUoKTsKLSAgICBpZiAoYmluT3AgPT0gTlVMTCkgewotICAgICAgICBlcnJvcihub2RlLT5n
ZXRMaW5lKCksICJJbnZhbGlkIGNvbmRpdGlvbiIsICJmb3IiKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLSAgICAvLyBMb29wIGluZGV4IHNob3VsZCBiZSB0byB0aGUgbGVmdCBvZiBy
ZWxhdGlvbmFsIG9wZXJhdG9yLgotICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGJpbk9wLT5n
ZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOwotICAgIGlmIChzeW1ib2wgPT0gTlVMTCkgewot
ICAgICAgICBlcnJvcihiaW5PcC0+Z2V0TGluZSgpLCAiSW52YWxpZCBjb25kaXRpb24iLCAiZm9y
Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHN5bWJvbC0+Z2V0SWQo
KSAhPSBpbmZvLT5pbmRleC5pZCkgewotICAgICAgICBlcnJvcihzeW1ib2wtPmdldExpbmUoKSwK
LSAgICAgICAgICAgICAgIkV4cGVjdGVkIGxvb3AgaW5kZXgiLCBzeW1ib2wtPmdldFN5bWJvbCgp
LmNfc3RyKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIFJlbGF0aW9u
YWwgb3BlcmF0b3IgaXMgb25lIG9mOiA+ID49IDwgPD0gPT0gb3IgIT0uCi0gICAgc3dpdGNoIChi
aW5PcC0+Z2V0T3AoKSkgewotICAgICAgY2FzZSBFT3BFcXVhbDoKLSAgICAgIGNhc2UgRU9wTm90
RXF1YWw6Ci0gICAgICBjYXNlIEVPcExlc3NUaGFuOgotICAgICAgY2FzZSBFT3BHcmVhdGVyVGhh
bjoKLSAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoKLSAgICAgIGNhc2UgRU9wR3JlYXRlclRo
YW5FcXVhbDoKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBlcnJvcihi
aW5PcC0+Z2V0TGluZSgpLAotICAgICAgICAgICAgICAiSW52YWxpZCByZWxhdGlvbmFsIG9wZXJh
dG9yIiwKLSAgICAgICAgICAgICAgZ2V0T3BlcmF0b3JTdHJpbmcoYmluT3AtPmdldE9wKCkpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIC8vIExvb3AgaW5kZXggbXVzdCBiZSBjb21wYXJl
ZCB3aXRoIGEgY29uc3RhbnQuCi0gICAgaWYgKCFpc0NvbnN0RXhwcihiaW5PcC0+Z2V0UmlnaHQo
KSkpIHsKLSAgICAgICAgZXJyb3IoYmluT3AtPmdldExpbmUoKSwKLSAgICAgICAgICAgICAgIkxv
b3AgaW5kZXggY2Fubm90IGJlIGNvbXBhcmVkIHdpdGggbm9uLWNvbnN0YW50IGV4cHJlc3Npb24i
LAotICAgICAgICAgICAgICBzeW1ib2wtPmdldFN5bWJvbCgpLmNfc3RyKCkpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmFsaWRh
dGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wRXhwcihUSW50ZXJtTG9vcCogbm9kZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTG9vcEluZm8qIGlu
Zm8pCi17Ci0gICAgVEludGVybU5vZGUqIGV4cHIgPSBub2RlLT5nZXRFeHByZXNzaW9uKCk7Ci0g
ICAgaWYgKGV4cHIgPT0gTlVMTCkgewotICAgICAgICBlcnJvcihub2RlLT5nZXRMaW5lKCksICJN
aXNzaW5nIGV4cHJlc3Npb24iLCAiZm9yIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICAvLyBmb3IgZXhwcmVzc2lvbiBoYXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9ybXM6
Ci0gICAgLy8gICAgIGxvb3BfaW5kZXgrKwotICAgIC8vICAgICBsb29wX2luZGV4LS0KLSAgICAv
LyAgICAgbG9vcF9pbmRleCArPSBjb25zdGFudF9leHByZXNzaW9uCi0gICAgLy8gICAgIGxvb3Bf
aW5kZXggLT0gY29uc3RhbnRfZXhwcmVzc2lvbgotICAgIC8vICAgICArK2xvb3BfaW5kZXgKLSAg
ICAvLyAgICAgLS1sb29wX2luZGV4Ci0gICAgLy8gVGhlIGxhc3QgdHdvIGZvcm1zIGFyZSBub3Qg
c3BlY2lmaWVkIGluIHRoZSBzcGVjLCBidXQgSSBhbSBhc3N1bWluZwotICAgIC8vIGl0cyBhbiBv
dmVyc2lnaHQuCi0gICAgVEludGVybVVuYXJ5KiB1bk9wID0gZXhwci0+Z2V0QXNVbmFyeU5vZGUo
KTsKLSAgICBUSW50ZXJtQmluYXJ5KiBiaW5PcCA9IHVuT3AgPyBOVUxMIDogZXhwci0+Z2V0QXNC
aW5hcnlOb2RlKCk7Ci0KLSAgICBUT3BlcmF0b3Igb3AgPSBFT3BOdWxsOwotICAgIFRJbnRlcm1T
eW1ib2wqIHN5bWJvbCA9IE5VTEw7Ci0gICAgaWYgKHVuT3AgIT0gTlVMTCkgewotICAgICAgICBv
cCA9IHVuT3AtPmdldE9wKCk7Ci0gICAgICAgIHN5bWJvbCA9IHVuT3AtPmdldE9wZXJhbmQoKS0+
Z2V0QXNTeW1ib2xOb2RlKCk7Ci0gICAgfSBlbHNlIGlmIChiaW5PcCAhPSBOVUxMKSB7Ci0gICAg
ICAgIG9wID0gYmluT3AtPmdldE9wKCk7Ci0gICAgICAgIHN5bWJvbCA9IGJpbk9wLT5nZXRMZWZ0
KCktPmdldEFzU3ltYm9sTm9kZSgpOwotICAgIH0KLQotICAgIC8vIFRoZSBvcGVyYW5kIG11c3Qg
YmUgbG9vcCBpbmRleC4KLSAgICBpZiAoc3ltYm9sID09IE5VTEwpIHsKLSAgICAgICAgZXJyb3Io
ZXhwci0+Z2V0TGluZSgpLCAiSW52YWxpZCBleHByZXNzaW9uIiwgImZvciIpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChzeW1ib2wtPmdldElkKCkgIT0gaW5mby0+aW5k
ZXguaWQpIHsKLSAgICAgICAgZXJyb3Ioc3ltYm9sLT5nZXRMaW5lKCksCi0gICAgICAgICAgICAg
ICJFeHBlY3RlZCBsb29wIGluZGV4Iiwgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFRoZSBvcGVyYXRvciBpcyBvbmUg
b2Y6ICsrIC0tICs9IC09LgotICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBFT3BQb3N0
SW5jcmVtZW50OgotICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6Ci0gICAgICAgIGNhc2Ug
RU9wUHJlSW5jcmVtZW50OgotICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDoKLSAgICAgICAg
ICAgIEFTU0VSVCgodW5PcCAhPSBOVUxMKSAmJiAoYmluT3AgPT0gTlVMTCkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQWRkQXNzaWduOgotICAgICAgICBjYXNlIEVPcFN1
YkFzc2lnbjoKLSAgICAgICAgICAgIEFTU0VSVCgodW5PcCA9PSBOVUxMKSAmJiAoYmluT3AgIT0g
TlVMTCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBlcnJvcihleHByLT5nZXRMaW5lKCksICJJbnZhbGlkIG9wZXJhdG9yIiwgZ2V0T3BlcmF0b3JT
dHJpbmcob3ApKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBM
b29wIGluZGV4IG11c3QgYmUgaW5jcmVtZW50ZWQvZGVjcmVtZW50ZWQgd2l0aCBhIGNvbnN0YW50
LgotICAgIGlmIChiaW5PcCAhPSBOVUxMKSB7Ci0gICAgICAgIGlmICghaXNDb25zdEV4cHIoYmlu
T3AtPmdldFJpZ2h0KCkpKSB7Ci0gICAgICAgICAgICBlcnJvcihiaW5PcC0+Z2V0TGluZSgpLAot
ICAgICAgICAgICAgICAgICAgIkxvb3AgaW5kZXggY2Fubm90IGJlIG1vZGlmaWVkIGJ5IG5vbi1j
b25zdGFudCBleHByZXNzaW9uIiwKLSAgICAgICAgICAgICAgICAgIHN5bWJvbC0+Z2V0U3ltYm9s
KCkuY19zdHIoKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxp
ZGF0ZUZ1bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBub2RlKQotewotICAgIEFTU0VSVChu
b2RlLT5nZXRPcCgpID09IEVPcEZ1bmN0aW9uQ2FsbCk7Ci0KLSAgICAvLyBJZiBub3Qgd2l0aGlu
IGxvb3AgYm9keSwgdGhlcmUgaXMgbm90aGluZyB0byBjaGVjay4KLSAgICBpZiAoIXdpdGhpbkxv
b3BCb2R5KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gTGlzdCBvZiBwYXJhbSBp
bmRpY2VzIGZvciB3aGljaCBsb29wIGluZGljZXMgYXJlIHVzZWQgYXMgYXJndW1lbnQuCi0gICAg
dHlwZWRlZiBzdGQ6OnZlY3RvcjxzaXplX3Q+IFBhcmFtSW5kZXg7Ci0gICAgUGFyYW1JbmRleCBw
SW5kZXg7Ci0gICAgVEludGVybVNlcXVlbmNlJiBwYXJhbXMgPSBub2RlLT5nZXRTZXF1ZW5jZSgp
OwotICAgIGZvciAoVEludGVybVNlcXVlbmNlOjpzaXplX3R5cGUgaSA9IDA7IGkgPCBwYXJhbXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gcGFyYW1zW2ld
LT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAgICAgICAgaWYgKHN5bWJvbCAmJiBpc0xvb3BJbmRleChz
eW1ib2wpKQotICAgICAgICAgICAgcEluZGV4LnB1c2hfYmFjayhpKTsKLSAgICB9Ci0gICAgLy8g
SWYgbm9uZSBvZiB0aGUgbG9vcCBpbmRpY2VzIGFyZSB1c2VkIGFzIGFyZ3VtZW50cywKLSAgICAv
LyB0aGVyZSBpcyBub3RoaW5nIHRvIGNoZWNrLgotICAgIGlmIChwSW5kZXguZW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBib29sIHZhbGlkID0gdHJ1ZTsKLSAgICBUU3ltYm9s
VGFibGUmIHN5bWJvbFRhYmxlID0gR2V0R2xvYmFsUGFyc2VDb250ZXh0KCktPnN5bWJvbFRhYmxl
OwotICAgIFRTeW1ib2wqIHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQobm9kZS0+Z2V0TmFtZSgp
KTsKLSAgICBBU1NFUlQoc3ltYm9sICYmIHN5bWJvbC0+aXNGdW5jdGlvbigpKTsKLSAgICBURnVu
Y3Rpb24qIGZ1bmN0aW9uID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oc3ltYm9sKTsKLSAgICBm
b3IgKFBhcmFtSW5kZXg6OmNvbnN0X2l0ZXJhdG9yIGkgPSBwSW5kZXguYmVnaW4oKTsKLSAgICAg
ICAgIGkgIT0gcEluZGV4LmVuZCgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgVFBhcmFtZXRlciYg
cGFyYW0gPSBmdW5jdGlvbi0+Z2V0UGFyYW0oKmkpOwotICAgICAgICBUUXVhbGlmaWVyIHF1YWwg
PSBwYXJhbS50eXBlLT5nZXRRdWFsaWZpZXIoKTsKLSAgICAgICAgaWYgKChxdWFsID09IEV2cU91
dCkgfHwgKHF1YWwgPT0gRXZxSW5PdXQpKSB7Ci0gICAgICAgICAgICBlcnJvcihwYXJhbXNbKmld
LT5nZXRMaW5lKCksCi0gICAgICAgICAgICAgICAgICAiTG9vcCBpbmRleCBjYW5ub3QgYmUgdXNl
ZCBhcyBhcmd1bWVudCB0byBhIGZ1bmN0aW9uIG91dCBvciBpbm91dCBwYXJhbWV0ZXIiLAotICAg
ICAgICAgICAgICAgICAgcGFyYW1zWyppXS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgp
LmNfc3RyKCkpOwotICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHJldHVybiB2YWxpZDsKLX0KLQotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxp
ZGF0ZU9wZXJhdGlvbihUSW50ZXJtT3BlcmF0b3IqIG5vZGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlKiBvcGVyYW5kKSB7Ci0gICAgLy8g
Q2hlY2sgaWYgbG9vcCBpbmRleCBpcyBtb2RpZmllZCBpbiB0aGUgbG9vcCBib2R5LgotICAgIGlm
ICghd2l0aGluTG9vcEJvZHkoKSB8fCAhbm9kZS0+aXNBc3NpZ25tZW50KCkpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgY29uc3QgVEludGVybVN5bWJvbCogc3ltYm9sID0gb3BlcmFuZC0+
Z2V0QXNTeW1ib2xOb2RlKCk7Ci0gICAgaWYgKHN5bWJvbCAmJiBpc0xvb3BJbmRleChzeW1ib2wp
KSB7Ci0gICAgICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwKLSAgICAgICAgICAgICAgIkxvb3Ag
aW5kZXggY2Fubm90IGJlIHN0YXRpY2FsbHkgYXNzaWduZWQgdG8gd2l0aGluIHRoZSBib2R5IG9m
IHRoZSBsb29wIiwKLSAgICAgICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigpKTsK
LSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6
aXNDb25zdEV4cHIoVEludGVybU5vZGUqIG5vZGUpCi17Ci0gICAgQVNTRVJUKG5vZGUgIT0gTlVM
TCk7Ci0gICAgcmV0dXJuIG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpICE9IE5VTEw7Ci19Ci0K
LWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6aXNDb25zdEluZGV4RXhwcihUSW50ZXJtTm9kZSog
bm9kZSkKLXsKLSAgICBBU1NFUlQobm9kZSAhPSBOVUxMKTsKLQotICAgIFZhbGlkYXRlQ29uc3RJ
bmRleEV4cHIgdmFsaWRhdGUobUxvb3BTdGFjayk7Ci0gICAgbm9kZS0+dHJhdmVyc2UoJnZhbGlk
YXRlKTsKLSAgICByZXR1cm4gdmFsaWRhdGUuaXNWYWxpZCgpOwotfQotCi1ib29sIFZhbGlkYXRl
TGltaXRhdGlvbnM6OnZhbGlkYXRlSW5kZXhpbmcoVEludGVybUJpbmFyeSogbm9kZSkKLXsKLSAg
ICBBU1NFUlQoKG5vZGUtPmdldE9wKCkgPT0gRU9wSW5kZXhEaXJlY3QpIHx8Ci0gICAgICAgICAg
IChub2RlLT5nZXRPcCgpID09IEVPcEluZGV4SW5kaXJlY3QpKTsKLQotICAgIGJvb2wgdmFsaWQg
PSB0cnVlOwotICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBub2RlLT5nZXRSaWdodCgpOwotICAg
IC8vIFRoZSBpbmRleCBleHByZXNzaW9uIG11c3QgaGF2ZSBpbnRlZ3JhbCB0eXBlLgotICAgIGlm
ICghaW5kZXgtPmlzU2NhbGFyKCkgfHwgKGluZGV4LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRJbnQp
KSB7Ci0gICAgICAgIGVycm9yKGluZGV4LT5nZXRMaW5lKCksCi0gICAgICAgICAgICAgICJJbmRl
eCBleHByZXNzaW9uIG11c3QgaGF2ZSBpbnRlZ3JhbCB0eXBlIiwKLSAgICAgICAgICAgICAgaW5k
ZXgtPmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7Ci0gICAgICAgIHZhbGlkID0gZmFsc2U7
Ci0gICAgfQotICAgIC8vIFRoZSBpbmRleCBleHBlc3Npb24gbXVzdCBiZSBhIGNvbnN0YW50LWlu
ZGV4LWV4cHJlc3Npb24gdW5sZXNzCi0gICAgLy8gdGhlIG9wZXJhbmQgaXMgYSB1bmlmb3JtIGlu
IGEgdmVydGV4IHNoYWRlci4KLSAgICBUSW50ZXJtVHlwZWQqIG9wZXJhbmQgPSBub2RlLT5nZXRM
ZWZ0KCk7Ci0gICAgYm9vbCBza2lwID0gKG1TaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIp
ICYmCi0gICAgICAgICAgICAgICAgKG9wZXJhbmQtPmdldFF1YWxpZmllcigpID09IEV2cVVuaWZv
cm0pOwotICAgIGlmICghc2tpcCAmJiAhaXNDb25zdEluZGV4RXhwcihpbmRleCkpIHsKLSAgICAg
ICAgZXJyb3IoaW5kZXgtPmdldExpbmUoKSwgIkluZGV4IGV4cHJlc3Npb24gbXVzdCBiZSBjb25z
dGFudCIsICJbXSIpOwotICAgICAgICB2YWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4g
dmFsaWQ7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBhODM1Y2IzYzIyNmU2MGYzZjZlZjhlYzJmNjY0OTBjYTEyYWFiNGI0Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw1OSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFu
Zy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotCi1jbGFzcyBUSW5mb1Np
bmtCYXNlOwotCi1zdHJ1Y3QgVExvb3BJbmZvIHsKLSAgICBzdHJ1Y3QgVEluZGV4IHsKLSAgICAg
ICAgaW50IGlkOyAgLy8gc3ltYm9sIGlkLgotICAgIH0gaW5kZXg7Ci0gICAgVEludGVybUxvb3Aq
IGxvb3A7Ci19OwotdHlwZWRlZiBUVmVjdG9yPFRMb29wSW5mbz4gVExvb3BTdGFjazsKLQotLy8g
VHJhdmVyc2VzIGludGVybWVkaWF0ZSB0cmVlIHRvIGVuc3VyZSB0aGF0IHRoZSBzaGFkZXIgZG9l
cyBub3QgZXhjZWVkIHRoZQotLy8gbWluaW11bSBmdW5jdGlvbmFsaXR5IG1hbmRhdGVkIGluIEdM
U0wgMS4wIHNwZWMsIEFwcGVuZGl4IEEuCi1jbGFzcyBWYWxpZGF0ZUxpbWl0YXRpb25zIDogcHVi
bGljIFRJbnRlcm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIFZhbGlkYXRlTGltaXRhdGlvbnMo
U2hTaGFkZXJUeXBlIHNoYWRlclR5cGUsIFRJbmZvU2lua0Jhc2UmIHNpbmspOwotCi0gICAgaW50
IG51bUVycm9ycygpIGNvbnN0IHsgcmV0dXJuIG1OdW1FcnJvcnM7IH0KLQotICAgIHZpcnR1YWwg
Ym9vbCB2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSopOwotICAgIHZpcnR1YWwgYm9v
bCB2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkqKTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlz
aXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKLSAgICB2aXJ0dWFsIGJvb2wg
dmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCopOwotCi1wcml2YXRlOgotICAgIHZvaWQgZXJy
b3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4p
OwotCi0gICAgYm9vbCB3aXRoaW5Mb29wQm9keSgpIGNvbnN0OwotICAgIGJvb2wgaXNMb29wSW5k
ZXgoY29uc3QgVEludGVybVN5bWJvbCogc3ltYm9sKSBjb25zdDsKLSAgICBib29sIHZhbGlkYXRl
TG9vcFR5cGUoVEludGVybUxvb3AqIG5vZGUpOwotICAgIGJvb2wgdmFsaWRhdGVGb3JMb29wSGVh
ZGVyKFRJbnRlcm1Mb29wKiBub2RlLCBUTG9vcEluZm8qIGluZm8pOwotICAgIGJvb2wgdmFsaWRh
dGVGb3JMb29wSW5pdChUSW50ZXJtTG9vcCogbm9kZSwgVExvb3BJbmZvKiBpbmZvKTsKLSAgICBi
b29sIHZhbGlkYXRlRm9yTG9vcENvbmQoVEludGVybUxvb3AqIG5vZGUsIFRMb29wSW5mbyogaW5m
byk7Ci0gICAgYm9vbCB2YWxpZGF0ZUZvckxvb3BFeHByKFRJbnRlcm1Mb29wKiBub2RlLCBUTG9v
cEluZm8qIGluZm8pOwotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBub25lIG9mIHRoZSBsb29wIGlu
ZGljZXMgaXMgdXNlZCBhcyB0aGUgYXJndW1lbnQgdG8KLSAgICAvLyB0aGUgZ2l2ZW4gZnVuY3Rp
b24gb3V0IG9yIGlub3V0IHBhcmFtZXRlci4KLSAgICBib29sIHZhbGlkYXRlRnVuY3Rpb25DYWxs
KFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpOwotICAgIGJvb2wgdmFsaWRhdGVPcGVyYXRpb24oVElu
dGVybU9wZXJhdG9yKiBub2RlLCBUSW50ZXJtTm9kZSogb3BlcmFuZCk7Ci0KLSAgICAvLyBSZXR1
cm5zIHRydWUgaWYgaW5kZXhpbmcgZG9lcyBub3QgZXhjZWVkIHRoZSBtaW5pbXVtIGZ1bmN0aW9u
YWxpdHkKLSAgICAvLyBtYW5kYXRlZCBpbiBHTFNMIDEuMCBzcGVjLCBBcHBlbmRpeCBBLCBTZWN0
aW9uIDUuCi0gICAgYm9vbCBpc0NvbnN0RXhwcihUSW50ZXJtTm9kZSogbm9kZSk7Ci0gICAgYm9v
bCBpc0NvbnN0SW5kZXhFeHByKFRJbnRlcm1Ob2RlKiBub2RlKTsKLSAgICBib29sIHZhbGlkYXRl
SW5kZXhpbmcoVEludGVybUJpbmFyeSogbm9kZSk7Ci0KLSAgICBTaFNoYWRlclR5cGUgbVNoYWRl
clR5cGU7Ci0gICAgVEluZm9TaW5rQmFzZSYgbVNpbms7Ci0gICAgaW50IG1OdW1FcnJvcnM7Ci0g
ICAgVExvb3BTdGFjayBtTG9vcFN0YWNrOwotfTsKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5jcHAgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVJbmZvLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMzRlYTRiNjU5MjY0ZDYyMjQyODkwNmZjYTg2YjdjOWYwZmI0NzMwMC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVJbmZvLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDMwOCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGls
ZXIvVmFyaWFibGVJbmZvLmgiCi0KLW5hbWVzcGFjZSB7Ci0KLVRTdHJpbmcgYXJyYXlCcmFja2V0
cyhpbnQgaW5kZXgpCi17Ci0gICAgVFN0cmluZ1N0cmVhbSBzdHJlYW07Ci0gICAgc3RyZWFtIDw8
ICJbIiA8PCBpbmRleCA8PCAiXSI7Ci0gICAgcmV0dXJuIHN0cmVhbS5zdHIoKTsKLX0KLQotLy8g
UmV0dXJucyB0aGUgZGF0YSB0eXBlIGZvciBhbiBhdHRyaWJ1dGUsIHVuaWZvcm0sIG9yIHZhcnlp
bmcuCi1TaERhdGFUeXBlIGdldFZhcmlhYmxlRGF0YVR5cGUoY29uc3QgVFR5cGUmIHR5cGUpCi17
Ci0gICAgc3dpdGNoICh0eXBlLmdldEJhc2ljVHlwZSgpKSB7Ci0gICAgICBjYXNlIEVidEZsb2F0
OgotICAgICAgICAgIGlmICh0eXBlLmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgICAgc3dpdGNo
ICh0eXBlLmdldE5vbWluYWxTaXplKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVy
biBTSF9GTE9BVF9NQVQyOwotICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFNIX0ZMT0FU
X01BVDM7Ci0gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gU0hfRkxPQVRfTUFUNDsKLSAg
ICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgfSBlbHNlIGlmICh0eXBlLmlzVmVjdG9yKCkpIHsKLSAgICAgICAgICAgICAgc3dp
dGNoICh0eXBlLmdldE5vbWluYWxTaXplKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDI6IHJl
dHVybiBTSF9GTE9BVF9WRUMyOwotICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFNIX0ZM
T0FUX1ZFQzM7Ci0gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gU0hfRkxPQVRfVkVDNDsK
LSAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgcmV0dXJuIFNIX0ZMT0FUOwotICAg
ICAgICAgIH0KLSAgICAgIGNhc2UgRWJ0SW50OgotICAgICAgICAgIGlmICh0eXBlLmlzTWF0cml4
KCkpIHsKLSAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICB9IGVsc2UgaWYg
KHR5cGUuaXNWZWN0b3IoKSkgewotICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5h
bFNpemUoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIFNIX0lOVF9WRUMyOwot
ICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFNIX0lOVF9WRUMzOwotICAgICAgICAgICAg
ICAgIGNhc2UgNDogcmV0dXJuIFNIX0lOVF9WRUM0OwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICByZXR1cm4gU0hfSU5UOwotICAgICAgICAgIH0KLSAgICAgIGNhc2UgRWJ0Qm9v
bDoKLSAgICAgICAgICBpZiAodHlwZS5pc01hdHJpeCgpKSB7Ci0gICAgICAgICAgICAgIFVOUkVB
Q0hBQkxFKCk7Ci0gICAgICAgICAgfSBlbHNlIGlmICh0eXBlLmlzVmVjdG9yKCkpIHsKLSAgICAg
ICAgICAgICAgc3dpdGNoICh0eXBlLmdldE5vbWluYWxTaXplKCkpIHsKLSAgICAgICAgICAgICAg
ICBjYXNlIDI6IHJldHVybiBTSF9CT09MX1ZFQzI7Ci0gICAgICAgICAgICAgICAgY2FzZSAzOiBy
ZXR1cm4gU0hfQk9PTF9WRUMzOwotICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFNIX0JP
T0xfVkVDNDsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgcmV0dXJuIFNIX0JP
T0w7Ci0gICAgICAgICAgfQotICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6IHJldHVybiBTSF9TQU1Q
TEVSXzJEOwotICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZTogcmV0dXJuIFNIX1NBTVBMRVJfQ1VC
RTsKLSAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOiByZXR1cm4gU0hfU0FNUExFUl9F
WFRFUk5BTF9PRVM7Ci0gICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6IHJldHVybiBTSF9TQU1Q
TEVSXzJEX1JFQ1RfQVJCOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIFNIX05PTkU7Ci19Ci0KLXZvaWQgZ2V0QnVpbHRJblZhcmlhYmxlSW5mbyhjb25z
dCBUVHlwZSYgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5n
JiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcmIG1hcHBl
ZE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIGlu
Zm9MaXN0KTsKLXZvaWQgZ2V0VXNlckRlZmluZWRWYXJpYWJsZUluZm8oY29uc3QgVFR5cGUmIHR5
cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcmIG1hcHBlZE5h
bWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9MaXN0JiBp
bmZvTGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242
NCBoYXNoRnVuY3Rpb24pOwotCi0vLyBSZXR1cm5zIGluZm8gZm9yIGFuIGF0dHJpYnV0ZSwgdW5p
Zm9ybSwgb3IgdmFyeWluZy4KLXZvaWQgZ2V0VmFyaWFibGVJbmZvKGNvbnN0IFRUeXBlJiB0eXBl
LAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyYgbmFtZSwKLSAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFRTdHJpbmcmIG1hcHBlZE5hbWUsCi0gICAgICAgICAgICAgICAgICAg
ICBUVmFyaWFibGVJbmZvTGlzdCYgaW5mb0xpc3QsCi0gICAgICAgICAgICAgICAgICAgICBTaEhh
c2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbikKLXsKLSAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUo
KSA9PSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAgaWYgKHR5cGUuaXNBcnJheSgpKSB7Ci0gICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGUuZ2V0QXJyYXlTaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgICAgIFRTdHJpbmcgbG5hbWUgPSBuYW1lICsgYXJyYXlCcmFja2V0cyhpKTsKLSAg
ICAgICAgICAgICAgICBUU3RyaW5nIGxtYXBwZWROYW1lID0gbWFwcGVkTmFtZSArIGFycmF5QnJh
Y2tldHMoaSk7Ci0gICAgICAgICAgICAgICAgZ2V0VXNlckRlZmluZWRWYXJpYWJsZUluZm8odHlw
ZSwgbG5hbWUsIGxtYXBwZWROYW1lLCBpbmZvTGlzdCwgaGFzaEZ1bmN0aW9uKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGdldFVzZXJEZWZpbmVkVmFyaWFi
bGVJbmZvKHR5cGUsIG5hbWUsIG1hcHBlZE5hbWUsIGluZm9MaXN0LCBoYXNoRnVuY3Rpb24pOwot
ICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZ2V0QnVpbHRJblZhcmlhYmxlSW5mbyh0
eXBlLCBuYW1lLCBtYXBwZWROYW1lLCBpbmZvTGlzdCk7Ci0gICAgfQotfQotCi12b2lkIGdldEJ1
aWx0SW5WYXJpYWJsZUluZm8oY29uc3QgVFR5cGUmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVFN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBUU3RyaW5nJiBtYXBwZWROYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRWYXJpYWJsZUluZm9MaXN0JiBpbmZvTGlzdCkKLXsKLSAgICBBU1NFUlQodHlwZS5nZXRCYXNp
Y1R5cGUoKSAhPSBFYnRTdHJ1Y3QpOwotCi0gICAgVFZhcmlhYmxlSW5mbyB2YXJJbmZvOwotICAg
IGlmICh0eXBlLmlzQXJyYXkoKSkgewotICAgICAgICB2YXJJbmZvLm5hbWUgPSAobmFtZSArICJb
MF0iKS5jX3N0cigpOwotICAgICAgICB2YXJJbmZvLm1hcHBlZE5hbWUgPSAobWFwcGVkTmFtZSAr
ICJbMF0iKS5jX3N0cigpOwotICAgICAgICB2YXJJbmZvLnNpemUgPSB0eXBlLmdldEFycmF5U2l6
ZSgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHZhckluZm8ubmFtZSA9IG5hbWUuY19zdHIoKTsK
LSAgICAgICAgdmFySW5mby5tYXBwZWROYW1lID0gbWFwcGVkTmFtZS5jX3N0cigpOwotICAgICAg
ICB2YXJJbmZvLnNpemUgPSAxOwotICAgIH0KLSAgICB2YXJJbmZvLnByZWNpc2lvbiA9IHR5cGUu
Z2V0UHJlY2lzaW9uKCk7Ci0gICAgdmFySW5mby50eXBlID0gZ2V0VmFyaWFibGVEYXRhVHlwZSh0
eXBlKTsKLSAgICBpbmZvTGlzdC5wdXNoX2JhY2sodmFySW5mbyk7Ci19Ci0KLXZvaWQgZ2V0VXNl
ckRlZmluZWRWYXJpYWJsZUluZm8oY29uc3QgVFR5cGUmIHR5cGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcmIG1hcHBlZE5hbWUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9MaXN0JiBpbmZvTGlzdCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24pCi17Ci0g
ICAgQVNTRVJUKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KTsKLQotICAgIGNvbnN0
IFRGaWVsZExpc3QmIGZpZWxkcyA9IHR5cGUuZ2V0U3RydWN0KCktPmZpZWxkcygpOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0
IFRUeXBlJiBmaWVsZFR5cGUgPSAqKGZpZWxkc1tpXS0+dHlwZSgpKTsKLSAgICAgICAgY29uc3Qg
VFN0cmluZyYgZmllbGROYW1lID0gZmllbGRzW2ldLT5uYW1lKCk7Ci0gICAgICAgIGdldFZhcmlh
YmxlSW5mbyhmaWVsZFR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lICsgIi4iICsg
ZmllbGROYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGVkTmFtZSArICIuIiArIFRJ
bnRlcm1UcmF2ZXJzZXI6Omhhc2goZmllbGROYW1lLCBoYXNoRnVuY3Rpb24pLAotICAgICAgICAg
ICAgICAgICAgICAgICAgaW5mb0xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICBoYXNoRnVu
Y3Rpb24pOwotICAgIH0KLX0KLQotVFZhcmlhYmxlSW5mbyogZmluZFZhcmlhYmxlKGNvbnN0IFRU
eXBlJiB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcmIG5h
bWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIGluZm9M
aXN0KQotewotICAgIC8vIFRPRE8oem1vKTogb3B0aW1pemUgdGhpcyBmdW5jdGlvbi4KLSAgICBU
U3RyaW5nIG15TmFtZSA9IG5hbWU7Ci0gICAgaWYgKHR5cGUuaXNBcnJheSgpKQotICAgICAgICBt
eU5hbWUgKz0gIlswXSI7Ci0gICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IGluZm9MaXN0LnNp
emUoKTsgKytpaSkKLSAgICB7Ci0gICAgICAgIGlmIChpbmZvTGlzdFtpaV0ubmFtZS5jX3N0cigp
ID09IG15TmFtZSkKLSAgICAgICAgICAgIHJldHVybiAmKGluZm9MaXN0W2lpXSk7Ci0gICAgfQot
ICAgIHJldHVybiBOVUxMOwotfQotCi19ICAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCi0KLVRWYXJp
YWJsZUluZm86OlRWYXJpYWJsZUluZm8oKQotICAgIDogdHlwZShTSF9OT05FKSwKLSAgICAgIHNp
emUoMCksCi0gICAgICBwcmVjaXNpb24oRWJwVW5kZWZpbmVkKSwKLSAgICAgIHN0YXRpY1VzZShm
YWxzZSkKLXsKLX0KLQotVFZhcmlhYmxlSW5mbzo6VFZhcmlhYmxlSW5mbyhTaERhdGFUeXBlIHR5
cGUsIGludCBzaXplKQotICAgIDogdHlwZSh0eXBlKSwKLSAgICAgIHNpemUoc2l6ZSksCi0gICAg
ICBwcmVjaXNpb24oRWJwVW5kZWZpbmVkKSwKLSAgICAgIHN0YXRpY1VzZShmYWxzZSkKLXsKLX0K
LQotQ29sbGVjdFZhcmlhYmxlczo6Q29sbGVjdFZhcmlhYmxlcyhUVmFyaWFibGVJbmZvTGlzdCYg
YXR0cmlicywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5m
b0xpc3QmIHVuaWZvcm1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFy
aWFibGVJbmZvTGlzdCYgdmFyeWluZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uKQotICAgIDogbUF0dHJpYnMoYXR0cmli
cyksCi0gICAgICBtVW5pZm9ybXModW5pZm9ybXMpLAotICAgICAgbVZhcnlpbmdzKHZhcnlpbmdz
KSwKLSAgICAgIG1Qb2ludENvb3JkQWRkZWQoZmFsc2UpLAotICAgICAgbUZyb250RmFjaW5nQWRk
ZWQoZmFsc2UpLAotICAgICAgbUZyYWdDb29yZEFkZGVkKGZhbHNlKSwKLSAgICAgIG1IYXNoRnVu
Y3Rpb24oaGFzaEZ1bmN0aW9uKQotewotfQotCi0vLyBXZSB3YW50IHRvIGNoZWNrIHdoZXRoZXIg
YSB1bmlmb3JtL3ZhcnlpbmcgaXMgc3RhdGljYWxseSB1c2VkCi0vLyBiZWNhdXNlIHdlIG9ubHkg
Y291bnQgdGhlIHVzZWQgb25lcyBpbiBwYWNraW5nIGNvbXB1dGluZy4KLS8vIEFsc28sIGdsX0Zy
YWdDb29yZCwgZ2xfUG9pbnRDb29yZCwgYW5kIGdsX0Zyb250RmFjaW5nIGNvdW50Ci0vLyB0b3dh
cmQgdmFyeWluZyBjb3VudGluZyBpZiB0aGV5IGFyZSBzdGF0aWNhbGx5IHVzZWQgaW4gYSBmcmFn
bWVudAotLy8gc2hhZGVyLgotdm9pZCBDb2xsZWN0VmFyaWFibGVzOjp2aXNpdFN5bWJvbChUSW50
ZXJtU3ltYm9sKiBzeW1ib2wpCi17Ci0gICAgQVNTRVJUKHN5bWJvbCAhPSBOVUxMKTsKLSAgICBU
VmFyaWFibGVJbmZvKiB2YXIgPSBOVUxMOwotICAgIHN3aXRjaCAoc3ltYm9sLT5nZXRRdWFsaWZp
ZXIoKSkKLSAgICB7Ci0gICAgY2FzZSBFdnFWYXJ5aW5nT3V0OgotICAgIGNhc2UgRXZxSW52YXJp
YW50VmFyeWluZ091dDoKLSAgICBjYXNlIEV2cVZhcnlpbmdJbjoKLSAgICBjYXNlIEV2cUludmFy
aWFudFZhcnlpbmdJbjoKLSAgICAgICAgdmFyID0gZmluZFZhcmlhYmxlKHN5bWJvbC0+Z2V0VHlw
ZSgpLCBzeW1ib2wtPmdldFN5bWJvbCgpLCBtVmFyeWluZ3MpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEV2cVVuaWZvcm06Ci0gICAgICAgIHZhciA9IGZpbmRWYXJpYWJsZShzeW1ib2wtPmdl
dFR5cGUoKSwgc3ltYm9sLT5nZXRTeW1ib2woKSwgbVVuaWZvcm1zKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBFdnFGcmFnQ29vcmQ6Ci0gICAgICAgIGlmICghbUZyYWdDb29yZEFkZGVkKSB7
Ci0gICAgICAgICAgICBUVmFyaWFibGVJbmZvIGluZm87Ci0gICAgICAgICAgICBpbmZvLm5hbWUg
PSAiZ2xfRnJhZ0Nvb3JkIjsKLSAgICAgICAgICAgIGluZm8ubWFwcGVkTmFtZSA9ICJnbF9GcmFn
Q29vcmQiOwotICAgICAgICAgICAgaW5mby50eXBlID0gU0hfRkxPQVRfVkVDNDsKLSAgICAgICAg
ICAgIGluZm8uc2l6ZSA9IDE7Ci0gICAgICAgICAgICBpbmZvLnByZWNpc2lvbiA9IEVicE1lZGl1
bTsgIC8vIFVzZSBtZWRpdW1wIGFzIGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlci4KLSAgICAgICAg
ICAgIGluZm8uc3RhdGljVXNlID0gdHJ1ZTsKLSAgICAgICAgbVZhcnlpbmdzLnB1c2hfYmFjayhp
bmZvKTsKLSAgICAgICAgICAgIG1GcmFnQ29vcmRBZGRlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgRXZxRnJvbnRGYWNpbmc6Ci0gICAgICAgIGlmICghbUZy
b250RmFjaW5nQWRkZWQpIHsKLSAgICAgICAgICAgIFRWYXJpYWJsZUluZm8gaW5mbzsKLSAgICAg
ICAgICAgIGluZm8ubmFtZSA9ICJnbF9Gcm9udEZhY2luZyI7Ci0gICAgICAgICAgICBpbmZvLm1h
cHBlZE5hbWUgPSAiZ2xfRnJvbnRGYWNpbmciOwotICAgICAgICAgICAgaW5mby50eXBlID0gU0hf
Qk9PTDsKLSAgICAgICAgICAgIGluZm8uc2l6ZSA9IDE7Ci0gICAgICAgICAgICBpbmZvLnByZWNp
c2lvbiA9IEVicFVuZGVmaW5lZDsKLSAgICAgICAgICAgIGluZm8uc3RhdGljVXNlID0gdHJ1ZTsK
LSAgICAgICAgbVZhcnlpbmdzLnB1c2hfYmFjayhpbmZvKTsKLSAgICAgICAgICAgIG1Gcm9udEZh
Y2luZ0FkZGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBF
dnFQb2ludENvb3JkOgotICAgICAgICBpZiAoIW1Qb2ludENvb3JkQWRkZWQpIHsKLSAgICAgICAg
ICAgIFRWYXJpYWJsZUluZm8gaW5mbzsKLSAgICAgICAgICAgIGluZm8ubmFtZSA9ICJnbF9Qb2lu
dENvb3JkIjsKLSAgICAgICAgICAgIGluZm8ubWFwcGVkTmFtZSA9ICJnbF9Qb2ludENvb3JkIjsK
LSAgICAgICAgICAgIGluZm8udHlwZSA9IFNIX0ZMT0FUX1ZFQzI7Ci0gICAgICAgICAgICBpbmZv
LnNpemUgPSAxOwotICAgICAgICAgICAgaW5mby5wcmVjaXNpb24gPSBFYnBNZWRpdW07ICAvLyBV
c2UgbWVkaXVtcCBhcyBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIuCi0gICAgICAgICAgICBpbmZv
LnN0YXRpY1VzZSA9IHRydWU7Ci0gICAgICAgIG1WYXJ5aW5ncy5wdXNoX2JhY2soaW5mbyk7Ci0g
ICAgICAgICAgICBtUG9pbnRDb29yZEFkZGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm47Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmICh2YXIp
Ci0gICAgICAgIHZhci0+c3RhdGljVXNlID0gdHJ1ZTsKLX0KLQotYm9vbCBDb2xsZWN0VmFyaWFi
bGVzOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKLXsKLSAg
ICBib29sIHZpc2l0Q2hpbGRyZW4gPSB0cnVlOwotCi0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgp
KQotICAgIHsKLSAgICBjYXNlIEVPcERlY2xhcmF0aW9uOiB7Ci0gICAgICAgIGNvbnN0IFRJbnRl
cm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOwotICAgICAgICBUUXVh
bGlmaWVyIHF1YWxpZmllciA9IHNlcXVlbmNlLmZyb250KCktPmdldEFzVHlwZWQoKS0+Z2V0UXVh
bGlmaWVyKCk7Ci0gICAgICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlIHx8IHF1YWxp
ZmllciA9PSBFdnFVbmlmb3JtIHx8Ci0gICAgICAgICAgICBxdWFsaWZpZXIgPT0gRXZxVmFyeWlu
Z0luIHx8IHF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8Ci0gICAgICAgICAgICBxdWFsaWZp
ZXIgPT0gRXZxSW52YXJpYW50VmFyeWluZ0luIHx8IHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRW
YXJ5aW5nT3V0KQotICAgICAgICB7Ci0gICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYgaW5m
b0xpc3QgPSBxdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlID8gbUF0dHJpYnMgOgotICAgICAgICAg
ICAgICAgIChxdWFsaWZpZXIgPT0gRXZxVW5pZm9ybSA/IG1Vbmlmb3JtcyA6IG1WYXJ5aW5ncyk7
Ci0gICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgaSA9IHNl
cXVlbmNlLmJlZ2luKCk7Ci0gICAgICAgICAgICAgICAgIGkgIT0gc2VxdWVuY2UuZW5kKCk7ICsr
aSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCBUSW50ZXJtU3ltYm9sKiB2
YXJpYWJsZSA9ICgqaSktPmdldEFzU3ltYm9sTm9kZSgpOwotICAgICAgICAgICAgICAgIC8vIFRo
ZSBvbmx5IGNhc2UgaW4gd2hpY2ggdGhlIHNlcXVlbmNlIHdpbGwgbm90IGNvbnRhaW4gYQotICAg
ICAgICAgICAgICAgIC8vIFRJbnRlcm1TeW1ib2wgbm9kZSBpcyBpbml0aWFsaXphdGlvbi4gSXQg
d2lsbCBjb250YWluIGEKLSAgICAgICAgICAgICAgICAvLyBUSW50ZXJCaW5hcnkgbm9kZSBpbiB0
aGF0IGNhc2UuIFNpbmNlIGF0dHJpYnV0ZXMsIHVuaWZvcm1zLAotICAgICAgICAgICAgICAgIC8v
IGFuZCB2YXJ5aW5ncyBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgaW4gYSBzaGFkZXIsIHdlIG11c3Qg
aGF2ZQotICAgICAgICAgICAgICAgIC8vIG9ubHkgVEludGVybVN5bWJvbCBub2RlcyBpbiB0aGUg
c2VxdWVuY2UuCi0gICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhYmxlICE9IE5VTEwpOwotICAg
ICAgICAgICAgICAgIFRTdHJpbmcgcHJvY2Vzc2VkU3ltYm9sOwotICAgICAgICAgICAgICAgIGlm
IChtSGFzaEZ1bmN0aW9uID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZFN5
bWJvbCA9IHZhcmlhYmxlLT5nZXRTeW1ib2woKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIHByb2Nlc3NlZFN5bWJvbCA9IFRJbnRlcm1UcmF2ZXJzZXI6Omhhc2go
dmFyaWFibGUtPmdldE9yaWdpbmFsU3ltYm9sKCksIG1IYXNoRnVuY3Rpb24pOwotICAgICAgICAg
ICAgICAgIGdldFZhcmlhYmxlSW5mbyh2YXJpYWJsZS0+Z2V0VHlwZSgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0T3JpZ2luYWxTeW1ib2woKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkU3ltYm9sLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbmZvTGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbUhhc2hGdW5jdGlvbik7Ci0gICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZh
bHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBkZWZhdWx0OiBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmlzaXRDaGlsZHJlbjsKLX0K
LQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Zhcmlh
YmxlSW5mby5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxl
SW5mby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzdmMmE1Zjg0ZjI2MzhlNTM3
YWRlM2FmOTIyZmRhZmFjZmFmMDZmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJs
ZUluZm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLSNpZm5kZWYgQ09NUElMRVJfVkFSSUFCTEVfSU5GT19IXwotI2RlZmluZSBDT01QSUxFUl9W
QVJJQUJMRV9JTkZPX0hfCi0KLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLSNpbmNs
dWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKLQotLy8gUHJvdmlkZXMgaW5mb3JtYXRpb24g
YWJvdXQgYSB2YXJpYWJsZS4KLS8vIEl0IGlzIGN1cnJlbnRseSBiZWluZyB1c2VkIHRvIHN0b3Jl
IGluZm8gYWJvdXQgYWN0aXZlIGF0dHJpYnMgYW5kIHVuaWZvcm1zLgotc3RydWN0IFRWYXJpYWJs
ZUluZm8gewotICAgIFRWYXJpYWJsZUluZm8oU2hEYXRhVHlwZSB0eXBlLCBpbnQgc2l6ZSk7Ci0g
ICAgVFZhcmlhYmxlSW5mbygpOwotCi0gICAgVFBlcnNpc3RTdHJpbmcgbmFtZTsKLSAgICBUUGVy
c2lzdFN0cmluZyBtYXBwZWROYW1lOwotICAgIFNoRGF0YVR5cGUgdHlwZTsKLSAgICBpbnQgc2l6
ZTsKLSAgICBUUHJlY2lzaW9uIHByZWNpc2lvbjsKLSAgICBib29sIHN0YXRpY1VzZTsKLX07Ci10
eXBlZGVmIHN0ZDo6dmVjdG9yPFRWYXJpYWJsZUluZm8+IFRWYXJpYWJsZUluZm9MaXN0OwotCi0v
LyBUcmF2ZXJzZXMgaW50ZXJtZWRpYXRlIHRyZWUgdG8gY29sbGVjdCBhbGwgYXR0cmlidXRlcywg
dW5pZm9ybXMsIHZhcnlpbmdzLgotY2xhc3MgQ29sbGVjdFZhcmlhYmxlcyA6IHB1YmxpYyBUSW50
ZXJtVHJhdmVyc2VyIHsKLXB1YmxpYzoKLSAgICBDb2xsZWN0VmFyaWFibGVzKFRWYXJpYWJsZUlu
Zm9MaXN0JiBhdHRyaWJzLAotICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3Qm
IHVuaWZvcm1zLAotICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIHZhcnlp
bmdzLAotICAgICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24p
OwotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKLSAgICB2
aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKLQot
cHJpdmF0ZToKLSAgICBUVmFyaWFibGVJbmZvTGlzdCYgbUF0dHJpYnM7Ci0gICAgVFZhcmlhYmxl
SW5mb0xpc3QmIG1Vbmlmb3JtczsKLSAgICBUVmFyaWFibGVJbmZvTGlzdCYgbVZhcnlpbmdzOwot
Ci0gICAgYm9vbCBtUG9pbnRDb29yZEFkZGVkOwotICAgIGJvb2wgbUZyb250RmFjaW5nQWRkZWQ7
Ci0gICAgYm9vbCBtRnJhZ0Nvb3JkQWRkZWQ7Ci0KLSAgICBTaEhhc2hGdW5jdGlvbjY0IG1IYXNo
RnVuY3Rpb247Ci19OwotCi0jZW5kaWYgIC8vIENPTVBJTEVSX1ZBUklBQkxFX0lORk9fSF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZVBh
Y2tlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVQ
YWNrZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTU3Mjg3NzYzNWViMzhh
NDcwZDQ3M2IyOTZiNWYxNzQ0YTllYTZhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJp
YWJsZVBhY2tlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyOTcgKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLSNpbmNsdWRlICJjb21waWxlci9WYXJpYWJsZVBhY2tlci5oIgotCi0jaW5jbHVk
ZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCi0KLW5hbWVzcGFj
ZSB7Ci1pbnQgR2V0U29ydE9yZGVyKFNoRGF0YVR5cGUgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5
cGUpIHsKLSAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0OgotICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMjoKLSAgICAgICAgICAgIHJldHVybiAxOwotICAg
ICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzQ6Ci0gICAgICAgIGNhc2UgU0hfSU5UX1ZFQzQ6Ci0gICAg
ICAgIGNhc2UgU0hfQk9PTF9WRUM0OgotICAgICAgICAgICAgcmV0dXJuIDI7Ci0gICAgICAgIGNh
c2UgU0hfRkxPQVRfTUFUMzoKLSAgICAgICAgICAgIHJldHVybiAzOwotICAgICAgICBjYXNlIFNI
X0ZMT0FUX1ZFQzM6Ci0gICAgICAgIGNhc2UgU0hfSU5UX1ZFQzM6Ci0gICAgICAgIGNhc2UgU0hf
Qk9PTF9WRUMzOgotICAgICAgICAgICAgcmV0dXJuIDQ7Ci0gICAgICAgIGNhc2UgU0hfRkxPQVRf
VkVDMjoKLSAgICAgICAgY2FzZSBTSF9JTlRfVkVDMjoKLSAgICAgICAgY2FzZSBTSF9CT09MX1ZF
QzI6Ci0gICAgICAgICAgICByZXR1cm4gNTsKLSAgICAgICAgY2FzZSBTSF9GTE9BVDoKLSAgICAg
ICAgY2FzZSBTSF9JTlQ6Ci0gICAgICAgIGNhc2UgU0hfQk9PTDoKLSAgICAgICAgY2FzZSBTSF9T
QU1QTEVSXzJEOgotICAgICAgICBjYXNlIFNIX1NBTVBMRVJfQ1VCRToKLSAgICAgICAgY2FzZSBT
SF9TQU1QTEVSX0VYVEVSTkFMX09FUzoKLSAgICAgICAgY2FzZSBTSF9TQU1QTEVSXzJEX1JFQ1Rf
QVJCOgotICAgICAgICAgICAgcmV0dXJuIDY7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBBU1NFUlQoZmFsc2UpOwotICAgICAgICAgICAgcmV0dXJuIDc7Ci0gICAgfQotfQotfSAgICAv
LyBuYW1lc3BhY2UKLQotaW50IFZhcmlhYmxlUGFja2VyOjpHZXROdW1Db21wb25lbnRzUGVyUm93
KFNoRGF0YVR5cGUgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBT
SF9GTE9BVF9NQVQ0OgotICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDI6Ci0gICAgICAgIGNhc2Ug
U0hfRkxPQVRfVkVDNDoKLSAgICAgICAgY2FzZSBTSF9JTlRfVkVDNDoKLSAgICAgICAgY2FzZSBT
SF9CT09MX1ZFQzQ6Ci0gICAgICAgICAgICByZXR1cm4gNDsKLSAgICAgICAgY2FzZSBTSF9GTE9B
VF9NQVQzOgotICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzM6Ci0gICAgICAgIGNhc2UgU0hfSU5U
X1ZFQzM6Ci0gICAgICAgIGNhc2UgU0hfQk9PTF9WRUMzOgotICAgICAgICAgICAgcmV0dXJuIDM7
Ci0gICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMjoKLSAgICAgICAgY2FzZSBTSF9JTlRfVkVDMjoK
LSAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzI6Ci0gICAgICAgICAgICByZXR1cm4gMjsKLSAgICAg
ICAgY2FzZSBTSF9GTE9BVDoKLSAgICAgICAgY2FzZSBTSF9JTlQ6Ci0gICAgICAgIGNhc2UgU0hf
Qk9PTDoKLSAgICAgICAgY2FzZSBTSF9TQU1QTEVSXzJEOgotICAgICAgICBjYXNlIFNIX1NBTVBM
RVJfQ1VCRToKLSAgICAgICAgY2FzZSBTSF9TQU1QTEVSX0VYVEVSTkFMX09FUzoKLSAgICAgICAg
Y2FzZSBTSF9TQU1QTEVSXzJEX1JFQ1RfQVJCOgotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICAgICAgcmV0
dXJuIDU7Ci0gICAgfQotfQotCi1pbnQgVmFyaWFibGVQYWNrZXI6OkdldE51bVJvd3MoU2hEYXRh
VHlwZSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIFNIX0ZMT0FU
X01BVDQ6Ci0gICAgICAgICAgICByZXR1cm4gNDsKLSAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQz
OgotICAgICAgICAgICAgcmV0dXJuIDM7Ci0gICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMjoKLSAg
ICAgICAgICAgIHJldHVybiAyOwotICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzQ6Ci0gICAgICAg
IGNhc2UgU0hfSU5UX1ZFQzQ6Ci0gICAgICAgIGNhc2UgU0hfQk9PTF9WRUM0OgotICAgICAgICBj
YXNlIFNIX0ZMT0FUX1ZFQzM6Ci0gICAgICAgIGNhc2UgU0hfSU5UX1ZFQzM6Ci0gICAgICAgIGNh
c2UgU0hfQk9PTF9WRUMzOgotICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzI6Ci0gICAgICAgIGNh
c2UgU0hfSU5UX1ZFQzI6Ci0gICAgICAgIGNhc2UgU0hfQk9PTF9WRUMyOgotICAgICAgICBjYXNl
IFNIX0ZMT0FUOgotICAgICAgICBjYXNlIFNIX0lOVDoKLSAgICAgICAgY2FzZSBTSF9CT09MOgot
ICAgICAgICBjYXNlIFNIX1NBTVBMRVJfMkQ6Ci0gICAgICAgIGNhc2UgU0hfU0FNUExFUl9DVUJF
OgotICAgICAgICBjYXNlIFNIX1NBTVBMRVJfRVhURVJOQUxfT0VTOgotICAgICAgICBjYXNlIFNI
X1NBTVBMRVJfMkRfUkVDVF9BUkI6Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgICAgICAgICByZXR1cm4gMTAw
MDAwOwotICAgIH0KLX0KLQotc3RydWN0IFRWYXJpYWJsZUluZm9Db21wYXJlciB7Ci0gICAgYm9v
bCBvcGVyYXRvcigpKGNvbnN0IFRWYXJpYWJsZUluZm8mIGxocywgY29uc3QgVFZhcmlhYmxlSW5m
byYgcmhzKSBjb25zdAotICAgIHsKLSAgICAgICAgaW50IGxoc1NvcnRPcmRlciA9IEdldFNvcnRP
cmRlcihsaHMudHlwZSk7Ci0gICAgICAgIGludCByaHNTb3J0T3JkZXIgPSBHZXRTb3J0T3JkZXIo
cmhzLnR5cGUpOwotICAgICAgICBpZiAobGhzU29ydE9yZGVyICE9IHJoc1NvcnRPcmRlcikgewot
ICAgICAgICAgICAgcmV0dXJuIGxoc1NvcnRPcmRlciA8IHJoc1NvcnRPcmRlcjsKLSAgICAgICAg
fQotICAgICAgICAvLyBTb3J0IGJ5IGxhcmdlc3QgZmlyc3QuCi0gICAgICAgIHJldHVybiBsaHMu
c2l6ZSA+IHJocy5zaXplOwotICAgIH0KLX07Ci0KLXVuc2lnbmVkIFZhcmlhYmxlUGFja2VyOjpt
YWtlQ29sdW1uRmxhZ3MoaW50IGNvbHVtbiwgaW50IG51bUNvbXBvbmVudHNQZXJSb3cpCi17Ci0g
ICAgcmV0dXJuICgoa0NvbHVtbk1hc2sgPDwgKGtOdW1Db2x1bW5zIC0gbnVtQ29tcG9uZW50c1Bl
clJvdykpICYKLSAgICAgICAgICAgICAgICAgICAga0NvbHVtbk1hc2spID4+IGNvbHVtbjsKLX0K
LQotdm9pZCBWYXJpYWJsZVBhY2tlcjo6ZmlsbENvbHVtbnMoaW50IHRvcFJvdywgaW50IG51bVJv
d3MsIGludCBjb2x1bW4sIGludCBudW1Db21wb25lbnRzUGVyUm93KQotewotICAgIHVuc2lnbmVk
IGNvbHVtbkZsYWdzID0gbWFrZUNvbHVtbkZsYWdzKGNvbHVtbiwgbnVtQ29tcG9uZW50c1BlclJv
dyk7Ci0gICAgZm9yIChpbnQgciA9IDA7IHIgPCBudW1Sb3dzOyArK3IpIHsKLSAgICAgICAgaW50
IHJvdyA9IHRvcFJvdyArIHI7Ci0gICAgICAgIEFTU0VSVCgocm93c19bcm93XSAmIGNvbHVtbkZs
YWdzKSA9PSAwKTsKLSAgICAgICAgcm93c19bcm93XSB8PSBjb2x1bW5GbGFnczsKLSAgICB9Ci19
Ci0KLWJvb2wgVmFyaWFibGVQYWNrZXI6OnNlYXJjaENvbHVtbihpbnQgY29sdW1uLCBpbnQgbnVt
Um93cywgaW50KiBkZXN0Um93LCBpbnQqIGRlc3RTaXplKQotewotICAgIEFTU0VSVChkZXN0Um93
KTsKLQotICAgIGZvciAoOyB0b3BOb25GdWxsUm93XyA8IG1heFJvd3NfICYmIHJvd3NfW3RvcE5v
bkZ1bGxSb3dfXSA9PSBrQ29sdW1uTWFzazsKLSAgICAgICAgICsrdG9wTm9uRnVsbFJvd18pIHsK
LSAgICB9Ci0KLSAgICBmb3IgKDsgYm90dG9tTm9uRnVsbFJvd18gPj0gMCAmJiByb3dzX1tib3R0
b21Ob25GdWxsUm93X10gPT0ga0NvbHVtbk1hc2s7Ci0gICAgICAgICAtLWJvdHRvbU5vbkZ1bGxS
b3dfKSB7Ci0gICAgfQotCi0gICAgaWYgKGJvdHRvbU5vbkZ1bGxSb3dfIC0gdG9wTm9uRnVsbFJv
d18gKyAxIDwgbnVtUm93cykgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
dW5zaWduZWQgY29sdW1uRmxhZ3MgPSBtYWtlQ29sdW1uRmxhZ3MoY29sdW1uLCAxKTsKLSAgICBp
bnQgdG9wR29vZFJvdyA9IDA7Ci0gICAgaW50IHNtYWxsZXN0R29vZFRvcCA9IC0xOwotICAgIGlu
dCBzbWFsbGVzdEdvb2RTaXplID0gbWF4Um93c18gKyAxOwotICAgIGludCBib3R0b21Sb3cgPSBi
b3R0b21Ob25GdWxsUm93XyArIDE7Ci0gICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgIGZvciAo
aW50IHJvdyA9IHRvcE5vbkZ1bGxSb3dfOyByb3cgPD0gYm90dG9tUm93OyArK3JvdykgewotICAg
ICAgICBib29sIHJvd0VtcHR5ID0gcm93IDwgYm90dG9tUm93ID8gKChyb3dzX1tyb3ddICYgY29s
dW1uRmxhZ3MpID09IDApIDogZmFsc2U7Ci0gICAgICAgIGlmIChyb3dFbXB0eSkgewotICAgICAg
ICAgICAgaWYgKCFmb3VuZCkgewotICAgICAgICAgICAgICAgIHRvcEdvb2RSb3cgPSByb3c7Ci0g
ICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgaWYgKGZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgaW50IHNpemUg
PSByb3cgLSB0b3BHb29kUm93OwotICAgICAgICAgICAgICAgIGlmIChzaXplID49IG51bVJvd3Mg
JiYgc2l6ZSA8IHNtYWxsZXN0R29vZFNpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgc21hbGxl
c3RHb29kU2l6ZSA9IHNpemU7Ci0gICAgICAgICAgICAgICAgICAgIHNtYWxsZXN0R29vZFRvcCA9
IHRvcEdvb2RSb3c7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZm91bmQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoc21hbGxlc3RHb29k
VG9wIDwgMCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgKmRlc3RSb3cg
PSBzbWFsbGVzdEdvb2RUb3A7Ci0gICAgaWYgKGRlc3RTaXplKSB7Ci0gICAgICAgICpkZXN0U2l6
ZSA9IHNtYWxsZXN0R29vZFNpemU7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IFZhcmlhYmxlUGFja2VyOjpDaGVja1ZhcmlhYmxlc1dpdGhpblBhY2tpbmdMaW1pdHMoaW50IG1h
eFZlY3RvcnMsIGNvbnN0IFRWYXJpYWJsZUluZm9MaXN0JiBpbl92YXJpYWJsZXMpCi17Ci0gICAg
QVNTRVJUKG1heFZlY3RvcnMgPiAwKTsKLSAgICBtYXhSb3dzXyA9IG1heFZlY3RvcnM7Ci0gICAg
dG9wTm9uRnVsbFJvd18gPSAwOwotICAgIGJvdHRvbU5vbkZ1bGxSb3dfID0gbWF4Um93c18gLSAx
OwotICAgIFRWYXJpYWJsZUluZm9MaXN0IHZhcmlhYmxlcyhpbl92YXJpYWJsZXMpOwotCi0gICAg
Ly8gQXMgcGVyIEdMU0wgMS4wMTcgQXBwZW5kaXggQSwgU2VjdGlvbiA3IHZhcmlhYmxlcyBhcmUg
cGFja2VkIGluIHNwZWNpZmljCi0gICAgLy8gb3JkZXIgYnkgdHlwZSwgdGhlbiBieSBzaXplIG9m
IGFycmF5LCBsYXJnZXN0IGZpcnN0LgotICAgIHN0ZDo6c29ydCh2YXJpYWJsZXMuYmVnaW4oKSwg
dmFyaWFibGVzLmVuZCgpLCBUVmFyaWFibGVJbmZvQ29tcGFyZXIoKSk7Ci0gICAgcm93c18uY2xl
YXIoKTsKLSAgICByb3dzXy5yZXNpemUobWF4VmVjdG9ycywgMCk7Ci0KLSAgICAvLyBQYWNrcyB0
aGUgNCBjb2x1bW4gdmFyaWFibGVzLgotICAgIHNpemVfdCBpaSA9IDA7Ci0gICAgZm9yICg7IGlp
IDwgdmFyaWFibGVzLnNpemUoKTsgKytpaSkgewotICAgICAgICBjb25zdCBUVmFyaWFibGVJbmZv
JiB2YXJpYWJsZSA9IHZhcmlhYmxlc1tpaV07Ci0gICAgICAgIGlmIChHZXROdW1Db21wb25lbnRz
UGVyUm93KHZhcmlhYmxlLnR5cGUpICE9IDQpIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIHRvcE5vbkZ1bGxSb3dfICs9IEdldE51bVJvd3ModmFyaWFibGUudHlwZSkg
KiB2YXJpYWJsZS5zaXplOwotICAgIH0KLQotICAgIGlmICh0b3BOb25GdWxsUm93XyA+IG1heFJv
d3NfKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBQYWNrcyB0aGUg
MyBjb2x1bW4gdmFyaWFibGVzLgotICAgIGludCBudW0zQ29sdW1uUm93cyA9IDA7Ci0gICAgZm9y
ICg7IGlpIDwgdmFyaWFibGVzLnNpemUoKTsgKytpaSkgewotICAgICAgICBjb25zdCBUVmFyaWFi
bGVJbmZvJiB2YXJpYWJsZSA9IHZhcmlhYmxlc1tpaV07Ci0gICAgICAgIGlmIChHZXROdW1Db21w
b25lbnRzUGVyUm93KHZhcmlhYmxlLnR5cGUpICE9IDMpIHsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIG51bTNDb2x1bW5Sb3dzICs9IEdldE51bVJvd3ModmFyaWFibGUu
dHlwZSkgKiB2YXJpYWJsZS5zaXplOwotICAgIH0KLQotICAgIGlmICh0b3BOb25GdWxsUm93XyAr
IG51bTNDb2x1bW5Sb3dzID4gbWF4Um93c18pIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIGZpbGxDb2x1bW5zKHRvcE5vbkZ1bGxSb3dfLCBudW0zQ29sdW1uUm93cywgMCwg
Myk7Ci0KLSAgICAvLyBQYWNrcyB0aGUgMiBjb2x1bW4gdmFyaWFibGVzLgotICAgIGludCB0b3Ay
Q29sdW1uUm93ID0gdG9wTm9uRnVsbFJvd18gKyBudW0zQ29sdW1uUm93czsKLSAgICBpbnQgdHdv
Q29sdW1uUm93c0F2YWlsYWJsZSA9IG1heFJvd3NfIC0gdG9wMkNvbHVtblJvdzsKLSAgICBpbnQg
cm93c0F2YWlsYWJsZUluQ29sdW1uczAxID0gdHdvQ29sdW1uUm93c0F2YWlsYWJsZTsKLSAgICBp
bnQgcm93c0F2YWlsYWJsZUluQ29sdW1uczIzID0gdHdvQ29sdW1uUm93c0F2YWlsYWJsZTsKLSAg
ICBmb3IgKDsgaWkgPCB2YXJpYWJsZXMuc2l6ZSgpOyArK2lpKSB7Ci0gICAgICAgIGNvbnN0IFRW
YXJpYWJsZUluZm8mIHZhcmlhYmxlID0gdmFyaWFibGVzW2lpXTsKLSAgICAgICAgaWYgKEdldE51
bUNvbXBvbmVudHNQZXJSb3codmFyaWFibGUudHlwZSkgIT0gMikgewotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IG51bVJvd3MgPSBHZXROdW1Sb3dzKHZhcmlhYmxl
LnR5cGUpICogdmFyaWFibGUuc2l6ZTsKLSAgICAgICAgaWYgKG51bVJvd3MgPD0gcm93c0F2YWls
YWJsZUluQ29sdW1uczAxKSB7Ci0gICAgICAgICAgICByb3dzQXZhaWxhYmxlSW5Db2x1bW5zMDEg
LT0gbnVtUm93czsKLSAgICAgICAgfSBlbHNlIGlmIChudW1Sb3dzIDw9IHJvd3NBdmFpbGFibGVJ
bkNvbHVtbnMyMykgewotICAgICAgICAgICAgcm93c0F2YWlsYWJsZUluQ29sdW1uczIzIC09IG51
bVJvd3M7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpbnQgbnVtUm93c1VzZWRJbkNvbHVtbnMwMSA9Ci0gICAgICAg
IHR3b0NvbHVtblJvd3NBdmFpbGFibGUgLSByb3dzQXZhaWxhYmxlSW5Db2x1bW5zMDE7Ci0gICAg
aW50IG51bVJvd3NVc2VkSW5Db2x1bW5zMjMgPQotICAgICAgICB0d29Db2x1bW5Sb3dzQXZhaWxh
YmxlIC0gcm93c0F2YWlsYWJsZUluQ29sdW1uczIzOwotICAgIGZpbGxDb2x1bW5zKHRvcDJDb2x1
bW5Sb3csIG51bVJvd3NVc2VkSW5Db2x1bW5zMDEsIDAsIDIpOwotICAgIGZpbGxDb2x1bW5zKG1h
eFJvd3NfIC0gbnVtUm93c1VzZWRJbkNvbHVtbnMyMywgbnVtUm93c1VzZWRJbkNvbHVtbnMyMywK
LSAgICAgICAgICAgICAgICAyLCAyKTsKLQotICAgIC8vIFBhY2tzIHRoZSAxIGNvbHVtbiB2YXJp
YWJsZXMuCi0gICAgZm9yICg7IGlpIDwgdmFyaWFibGVzLnNpemUoKTsgKytpaSkgewotICAgICAg
ICBjb25zdCBUVmFyaWFibGVJbmZvJiB2YXJpYWJsZSA9IHZhcmlhYmxlc1tpaV07Ci0gICAgICAg
IEFTU0VSVCgxID09IEdldE51bUNvbXBvbmVudHNQZXJSb3codmFyaWFibGUudHlwZSkpOwotICAg
ICAgICBpbnQgbnVtUm93cyA9IEdldE51bVJvd3ModmFyaWFibGUudHlwZSkgKiB2YXJpYWJsZS5z
aXplOwotICAgICAgICBpbnQgc21hbGxlc3RDb2x1bW4gPSAtMTsKLSAgICAgICAgaW50IHNtYWxs
ZXN0U2l6ZSA9IG1heFJvd3NfICsgMTsKLSAgICAgICAgaW50IHRvcFJvdyA9IC0xOwotICAgICAg
ICBmb3IgKGludCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBrTnVtQ29sdW1uczsgKytjb2x1bW4pIHsK
LSAgICAgICAgICAgIGludCByb3cgPSAwOwotICAgICAgICAgICAgaW50IHNpemUgPSAwOwotICAg
ICAgICAgICAgaWYgKHNlYXJjaENvbHVtbihjb2x1bW4sIG51bVJvd3MsICZyb3csICZzaXplKSkg
ewotICAgICAgICAgICAgICAgIGlmIChzaXplIDwgc21hbGxlc3RTaXplKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHNtYWxsZXN0U2l6ZSA9IHNpemU7Ci0gICAgICAgICAgICAgICAgICAgIHNtYWxs
ZXN0Q29sdW1uID0gY29sdW1uOwotICAgICAgICAgICAgICAgICAgICB0b3BSb3cgPSByb3c7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KHNtYWxsZXN0Q29sdW1uIDwgMCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZmlsbENvbHVtbnModG9wUm93LCBudW1Sb3dzLCBzbWFsbGVzdENvbHVt
biwgMSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKHZhcmlhYmxlcy5zaXplKCkgPT0gaWkpOwotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVQYWNrZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9WYXJpYWJsZVBhY2tlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA4OTg3MDY2Y2MzN2NmZDc0MjMwZmEyNWJjMmFlMGU2Yzk5YzZkOGY1Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZVBhY2tlci5oCisrKyAvZGV2L251bGwKQEAgLTEs
NDEgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBfVkFSSUFCTEVQQUNLRVJf
SU5DTFVERURfCi0jZGVmaW5lIF9WQVJJQUJMRVBBQ0tFUl9JTkNMVURFRF8KLQotI2luY2x1ZGUg
PHZlY3Rvcj4KLSNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgotCi1jbGFzcyBWYXJpYWJs
ZVBhY2tlciB7Ci0gcHVibGljOgotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGFzc2VkIGlu
IHZhcmlhYmxlcyBwYWNrIGluIG1heFZlY3RvcnMgZm9sbG93aW5nCi0gICAgLy8gdGhlIHBhY2tp
bmcgcnVsZXMgZnJvbSB0aGUgR0xTTCAxLjAxNyBzcGVjLCBBcHBlbmRpeCBBLCBzZWN0aW9uIDcu
Ci0gICAgYm9vbCBDaGVja1ZhcmlhYmxlc1dpdGhpblBhY2tpbmdMaW1pdHMoCi0gICAgICAgIGlu
dCBtYXhWZWN0b3JzLAotICAgICAgICBjb25zdCBUVmFyaWFibGVJbmZvTGlzdCYgaW5fdmFyaWFi
bGVzKTsKLQotICAgIC8vIEdldHMgaG93IG1hbnkgY29tcG9uZW50cyBpbiBhIHJvdyBhIGRhdGEg
dHlwZSB0YWtlcy4KLSAgICBzdGF0aWMgaW50IEdldE51bUNvbXBvbmVudHNQZXJSb3coU2hEYXRh
VHlwZSB0eXBlKTsKLQotICAgIC8vIEdldHMgaG93IG1hbnkgcm93cyBhIGRhdGEgdHlwZSB0YWtl
cy4KLSAgICBzdGF0aWMgaW50IEdldE51bVJvd3MoU2hEYXRhVHlwZSB0eXBlKTsKLQotIHByaXZh
dGU6Ci0gICAgc3RhdGljIGNvbnN0IGludCBrTnVtQ29sdW1ucyA9IDQ7Ci0gICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGtDb2x1bW5NYXNrID0gKDEgPDwga051bUNvbHVtbnMpIC0gMTsKLQotICAg
IHVuc2lnbmVkIG1ha2VDb2x1bW5GbGFncyhpbnQgY29sdW1uLCBpbnQgbnVtQ29tcG9uZW50c1Bl
clJvdyk7Ci0gICAgdm9pZCBmaWxsQ29sdW1ucyhpbnQgdG9wUm93LCBpbnQgbnVtUm93cywgaW50
IGNvbHVtbiwgaW50IG51bUNvbXBvbmVudHNQZXJSb3cpOwotICAgIGJvb2wgc2VhcmNoQ29sdW1u
KGludCBjb2x1bW4sIGludCBudW1Sb3dzLCBpbnQqIGRlc3RSb3csIGludCogZGVzdFNpemUpOwot
Ci0gICAgaW50IHRvcE5vbkZ1bGxSb3dfOwotICAgIGludCBib3R0b21Ob25GdWxsUm93XzsKLSAg
ICBpbnQgbWF4Um93c187Ci0gICAgc3RkOjp2ZWN0b3I8dW5zaWduZWQ+IHJvd3NfOwotfTsKLQot
I2VuZGlmIC8vIF9WQVJJQUJMRVBBQ0tFUl9JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WZXJzaW9uR0xTTC5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA3YTgyYmI0ZGMxN2Q2MDUzMzU0ZTFhZmUzOTQ5ZWM4ZTU3ZmZhOWQx
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WZXJzaW9uR0xTTC5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwxNDAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBp
bGVyL1ZlcnNpb25HTFNMLmgiCi0KLXN0YXRpYyBjb25zdCBpbnQgR0xTTF9WRVJTSU9OXzExMCA9
IDExMDsKLXN0YXRpYyBjb25zdCBpbnQgR0xTTF9WRVJTSU9OXzEyMCA9IDEyMDsKLQotLy8gV2Ug
bmVlZCB0byBzY2FuIGZvciB0aGUgZm9sbG93aW5nOgotLy8gMS4gImludmFyaWFudCIga2V5d29y
ZDogVGhpcyBjYW4gb2NjdXIgaW4gYm90aCAtIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycwot
Ly8gICAgYnV0IG9ubHkgYXQgdGhlIGdsb2JhbCBzY29wZS4KLS8vIDIuICJnbF9Qb2ludENvb3Jk
IiBidWlsdC1pbiB2YXJpYWJsZTogVGhpcyBjYW4gb25seSBvY2N1ciBpbiBmcmFnbWVudCBzaGFk
ZXIKLS8vICAgIGJ1dCBpbnNpZGUgYW55IHNjb3BlLgotLy8gMy4gQ2FsbCB0byBhIG1hdHJpeCBj
b25zdHJ1Y3RvciB3aXRoIGFub3RoZXIgbWF0cml4IGFzIGFyZ3VtZW50LgotLy8gICAgKFRoZXNl
IGNvbnN0cnVjdG9ycyB3ZXJlIHJlc2VydmVkIGluIEdMU0wgdmVyc2lvbiAxLjEwLikKLS8vIDQu
IEFycmF5cyBhcyAib3V0IiBmdW5jdGlvbiBwYXJhbWV0ZXJzLgotLy8gICAgR0xTTCBzcGVjIHNl
Y3Rpb24gNi4xLjE6ICJXaGVuIGNhbGxpbmcgYSBmdW5jdGlvbiwgZXhwcmVzc2lvbnMgdGhhdCBk
bwotLy8gICAgbm90IGV2YWx1YXRlIHRvIGwtdmFsdWVzIGNhbm5vdCBiZSBwYXNzZWQgdG8gcGFy
YW1ldGVycyBkZWNsYXJlZCBhcwotLy8gICAgb3V0IG9yIGlub3V0LiIKLS8vICAgIEdMU0wgMS4x
IHNlY3Rpb24gNS44OiAiT3RoZXIgYmluYXJ5IG9yIHVuYXJ5IGV4cHJlc3Npb25zLAotLy8gICAg
bm9uLWRlcmVmZXJlbmNlZCBhcnJheXMsIGZ1bmN0aW9uIG5hbWVzLCBzd2l6emxlcyB3aXRoIHJl
cGVhdGVkIGZpZWxkcywKLS8vICAgIGFuZCBjb25zdGFudHMgY2Fubm90IGJlIGwtdmFsdWVzLiIK
LS8vICAgIEdMU0wgMS4yIHJlbGF4ZWQgdGhlIHJlc3RyaWN0aW9uIG9uIGFycmF5cywgc2VjdGlv
biA1Ljg6ICJWYXJpYWJsZXMgdGhhdAotLy8gICAgYXJlIGJ1aWx0LWluIHR5cGVzLCBlbnRpcmUg
c3RydWN0dXJlcyBvciBhcnJheXMuLi4gYXJlIGFsbCBsLXZhbHVlcy4iCi0vLwotLy8gVE9ETyhh
bG9rcCk6IFRoZSBmb2xsb3dpbmcgdHdvIGNhc2VzIG9mIGludmFyaWFudCBkZWNhbGFyYXRpb24g
Z2V0IGxvc3QKLS8vIGR1cmluZyBwYXJzaW5nIC0gdGhleSBkbyBub3QgZ2V0IGNhcnJpZWQgb3Zl
ciB0byB0aGUgaW50ZXJtZWRpYXRlIHRyZWUuCi0vLyBIYW5kbGUgdGhlc2UgY2FzZXM6Ci0vLyAx
LiBXaGVuIGEgcHJhZ21hIGlzIHVzZWQgdG8gZm9yY2UgYWxsIG91dHB1dCB2YXJpYWJsZXMgdG8g
YmUgaW52YXJpYW50OgotLy8gICAgLSAjcHJhZ21hIFNUREdMIGludmFyaWFudChhbGwpCi0vLyAy
LiBXaGVuIGEgcHJldmlvdXNseSBkZWNhbGFyZWQgb3IgYnVpbHQtaW4gdmFyaWFibGUgaXMgbWFy
a2VkIGludmFyaWFudDoKLS8vICAgIC0gaW52YXJpYW50IGdsX1Bvc2l0aW9uOwotLy8gICAgLSB2
YXJ5aW5nIHZlYzMgY29sb3I7IGludmFyaWFudCBjb2xvcjsKLS8vCi1UVmVyc2lvbkdMU0w6OlRW
ZXJzaW9uR0xTTChTaFNoYWRlclR5cGUgdHlwZSkKLSAgICA6IG1TaGFkZXJUeXBlKHR5cGUpLAot
ICAgICAgbVZlcnNpb24oR0xTTF9WRVJTSU9OXzExMCkKLXsKLX0KLQotdm9pZCBUVmVyc2lvbkdM
U0w6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCi17Ci0gICAgaWYgKG5vZGUtPmdl
dFN5bWJvbCgpID09ICJnbF9Qb2ludENvb3JkIikKLSAgICAgICAgdXBkYXRlVmVyc2lvbihHTFNM
X1ZFUlNJT05fMTIwKTsKLX0KLQotdm9pZCBUVmVyc2lvbkdMU0w6OnZpc2l0Q29uc3RhbnRVbmlv
bihUSW50ZXJtQ29uc3RhbnRVbmlvbiopCi17Ci19Ci0KLWJvb2wgVFZlcnNpb25HTFNMOjp2aXNp
dEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSopCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgVFZlcnNpb25HTFNMOjp2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkqKQotewot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFRWZXJzaW9uR0xTTDo6dmlzaXRTZWxlY3Rpb24o
VmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKQotewotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IFRWZXJzaW9uR0xTTDo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5v
ZGUpCi17Ci0gICAgYm9vbCB2aXNpdENoaWxkcmVuID0gdHJ1ZTsKLQotICAgIHN3aXRjaCAobm9k
ZS0+Z2V0T3AoKSkgewotICAgICAgY2FzZSBFT3BTZXF1ZW5jZToKLSAgICAgICAgLy8gV2UgbmVl
ZCB0byB2aXNpdCBzZXF1ZW5jZSBjaGlsZHJlbiB0byBnZXQgdG8gZ2xvYmFsIG9yIGlubmVyIHNj
b3BlLgotICAgICAgICB2aXNpdENoaWxkcmVuID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEVPcERlY2xhcmF0aW9uOiB7Ci0gICAgICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYg
c2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOwotICAgICAgICBUUXVhbGlmaWVyIHF1YWxp
ZmllciA9IHNlcXVlbmNlLmZyb250KCktPmdldEFzVHlwZWQoKS0+Z2V0UXVhbGlmaWVyKCk7Ci0g
ICAgICAgIGlmICgocXVhbGlmaWVyID09IEV2cUludmFyaWFudFZhcnlpbmdJbikgfHwKLSAgICAg
ICAgICAgIChxdWFsaWZpZXIgPT0gRXZxSW52YXJpYW50VmFyeWluZ091dCkpIHsKLSAgICAgICAg
ICAgIHVwZGF0ZVZlcnNpb24oR0xTTF9WRVJTSU9OXzEyMCk7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEVPcFBhcmFtZXRlcnM6IHsKLSAgICAgICAgY29u
c3QgVEludGVybVNlcXVlbmNlJiBwYXJhbXMgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOwotICAgICAg
ICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHBhcmFtcy5iZWdp
bigpOwotICAgICAgICAgICAgIGl0ZXIgIT0gcGFyYW1zLmVuZCgpOyArK2l0ZXIpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1UeXBlZCogcGFyYW0gPSAoKml0ZXIpLT5nZXRB
c1R5cGVkKCk7Ci0gICAgICAgICAgICBpZiAocGFyYW0tPmlzQXJyYXkoKSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHBhcmFtLT5nZXRRdWFs
aWZpZXIoKTsKLSAgICAgICAgICAgICAgICBpZiAoKHF1YWxpZmllciA9PSBFdnFPdXQpIHx8IChx
dWFsaWZpZXIgPT0gIEV2cUluT3V0KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHVwZGF0ZVZlcnNpb24oR0xTTF9WRVJTSU9OXzEyMCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICAvLyBGdWxseSBwcm9jZXNzZWQuIE5vIG5lZWQgdG8gdmlzaXQgY2hpbGRyZW4uCi0g
ICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0g
ICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6Ci0gICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6
Ci0gICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6IHsKLSAgICAgICAgY29uc3QgVEludGVybVNl
cXVlbmNlJiBzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAgIGlmIChzZXF1
ZW5jZS5zaXplKCkgPT0gMSkgewotICAgICAgICAgIFRJbnRlcm1UeXBlZCogdHlwZWQgPSBzZXF1
ZW5jZS5mcm9udCgpLT5nZXRBc1R5cGVkKCk7Ci0gICAgICAgICAgaWYgKHR5cGVkICYmIHR5cGVk
LT5pc01hdHJpeCgpKSB7Ci0gICAgICAgICAgICB1cGRhdGVWZXJzaW9uKEdMU0xfVkVSU0lPTl8x
MjApOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLQot
ICAgICAgZGVmYXVsdDogYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZpc2l0Q2hpbGRyZW47
Ci19Ci0KLWJvb2wgVFZlcnNpb25HTFNMOjp2aXNpdExvb3AoVmlzaXQsIFRJbnRlcm1Mb29wKikK
LXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBUVmVyc2lvbkdMU0w6OnZpc2l0QnJhbmNo
KFZpc2l0LCBUSW50ZXJtQnJhbmNoKikKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBU
VmVyc2lvbkdMU0w6OnVwZGF0ZVZlcnNpb24oaW50IHZlcnNpb24pCi17Ci0gICAgbVZlcnNpb24g
PSBzdGQ6Om1heCh2ZXJzaW9uLCBtVmVyc2lvbik7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WZXJzaW9uR0xTTC5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNMLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDFjMWNiMWFiOTdiOWRlNWVkNDdhOTEwNDhiMmU2ZDMzYmVjN2ViYTYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNMLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw1NiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1ZFUlNJ
T05HTFNMX0hfCi0jZGVmaW5lIENPTVBJTEVSX1ZFUlNJT05HTFNMX0hfCi0KLSNpbmNsdWRlICJH
TFNMQU5HL1NoYWRlckxhbmcuaCIKLSNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIK
LQotLy8gVHJhdmVyc2VzIHRoZSBpbnRlcm1lZGlhdGUgdHJlZSB0byByZXR1cm4gdGhlIG1pbmlt
dW0gR0xTTCB2ZXJzaW9uCi0vLyByZXF1aXJlZCB0byBsZWdhbGx5IGFjY2VzcyBhbGwgYnVpbHQt
aW4gZmVhdHVyZXMgdXNlZCBpbiB0aGUgc2hhZGVyLgotLy8gR0xTTCAxLjEgd2hpY2ggaXMgbWFu
ZGF0ZWQgYnkgT3BlbkdMIDIuMCBwcm92aWRlczoKLS8vICAgLSAjdmVyc2lvbiBhbmQgI2V4dGVu
c2lvbiB0byBkZWNsYXJlIHZlcnNpb24gYW5kIGV4dGVuc2lvbnMuCi0vLyAgIC0gYnVpbHQtaW4g
ZnVuY3Rpb25zIHJlZnJhY3QsIGV4cCwgYW5kIGxvZy4KLS8vICAgLSB1cGRhdGVkIHN0ZXAoKSB0
byBjb21wYXJlIHggPCBlZGdlIGluc3RlYWQgb2YgeCA8PSBlZGdlLgotLy8gR0xTTCAxLjIgd2hp
Y2ggaXMgbWFuZGF0ZWQgYnkgT3BlbkdMIDIuMSBwcm92aWRlczoKLS8vICAgLSBtYW55IGNoYW5n
ZXMgdG8gcmVkdWNlIGRpZmZlcmVuY2VzIHdoZW4gY29tcGFyZWQgdG8gdGhlIEVTIHNwZWNpZmlj
YXRpb24uCi0vLyAgIC0gaW52YXJpYW50IGtleXdvcmQgYW5kIGl0cyBzdXBwb3J0LgotLy8gICAt
IGMrKyBzdHlsZSBuYW1lIGhpZGluZyBydWxlcy4KLS8vICAgLSBidWlsdC1pbiB2YXJpYWJsZSBn
bF9Qb2ludENvb3JkIGZvciBmcmFnbWVudCBzaGFkZXJzLgotLy8gICAtIG1hdHJpeCBjb25zdHJ1
Y3RvcnMgdGFraW5nIG1hdHJpeCBhcyBhcmd1bWVudC4KLS8vICAgLSBhcnJheSBhcyAib3V0IiBm
dW5jdGlvbiBwYXJhbWV0ZXJzCi0vLwotY2xhc3MgVFZlcnNpb25HTFNMIDogcHVibGljIFRJbnRl
cm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIFRWZXJzaW9uR0xTTChTaFNoYWRlclR5cGUgdHlw
ZSk7Ci0KLSAgICAvLyBSZXR1cm5zIDEyMCBpZiB0aGUgZm9sbG93aW5nIGlzIHVzZWQgdGhlIHNo
YWRlcjoKLSAgICAvLyAtICJpbnZhcmlhbnQiLAotICAgIC8vIC0gImdsX1BvaW50Q29vcmQiLAot
ICAgIC8vIC0gbWF0cml4L21hdHJpeCBjb25zdHJ1Y3RvcnMKLSAgICAvLyAtIGFycmF5ICJvdXQi
IHBhcmFtZXRlcnMKLSAgICAvLyBFbHNlIDExMCBpcyByZXR1cm5lZC4KLSAgICBpbnQgZ2V0VmVy
c2lvbigpIHsgcmV0dXJuIG1WZXJzaW9uOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1i
b2woVEludGVybVN5bWJvbCopOwotICAgIHZpcnR1YWwgdm9pZCB2aXNpdENvbnN0YW50VW5pb24o
VEludGVybUNvbnN0YW50VW5pb24qKTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlz
aXQsIFRJbnRlcm1CaW5hcnkqKTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRVbmFyeShWaXNpdCwg
VEludGVybVVuYXJ5Kik7Ci0gICAgdmlydHVhbCBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0LCBU
SW50ZXJtU2VsZWN0aW9uKik7Ci0gICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0
LCBUSW50ZXJtQWdncmVnYXRlKik7Ci0gICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCwg
VEludGVybUxvb3AqKTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQsIFRJbnRl
cm1CcmFuY2gqKTsKLQotcHJvdGVjdGVkOgotICAgIHZvaWQgdXBkYXRlVmVyc2lvbihpbnQgdmVy
c2lvbik7Ci0KLXByaXZhdGU6Ci0gICAgU2hTaGFkZXJUeXBlIG1TaGFkZXJUeXBlOwotICAgIGlu
dCBtVmVyc2lvbjsKLX07Ci0KLSNlbmRpZiAgLy8gQ09NUElMRVJfVkVSU0lPTkdMU0xfSF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGQ1NWFjYWY2N2FmYTJlMTAyODk1YzQ2OTRjNTk3OTVk
NzdiNTM5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwzNyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBkZWJ1Zy5jcHA6IERl
YnVnZ2luZyB1dGlsaXRpZXMuCi0KLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgotCi0jaW5j
bHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI2luY2x1ZGUgImNvbXBpbGVy
L0luaXRpYWxpemVQYXJzZUNvbnRleHQuaCIKLSNpbmNsdWRlICJjb21waWxlci9QYXJzZUNvbnRl
eHQuaCIKLQotI2lmZGVmIFRSQUNFX0VOQUJMRUQKLXN0YXRpYyBjb25zdCBpbnQga1RyYWNlQnVm
ZmVyTGVuID0gMTAyNDsKLQotZXh0ZXJuICJDIiB7Ci12b2lkIFRyYWNlKGNvbnN0IGNoYXIgKmZv
cm1hdCwgLi4uKSB7Ci0gICAgaWYgKCFmb3JtYXQpIHJldHVybjsKLQotICAgIFRQYXJzZUNvbnRl
eHQqIHBhcnNlQ29udGV4dCA9IEdldEdsb2JhbFBhcnNlQ29udGV4dCgpOwotICAgIGlmIChwYXJz
ZUNvbnRleHQpIHsKLSAgICAgICAgY2hhciBidWZba1RyYWNlQnVmZmVyTGVuXTsKLSAgICAgICAg
dmFfbGlzdCBhcmdzOwotICAgICAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOwotICAgICAgICB2
c25wcmludGYoYnVmLCBrVHJhY2VCdWZmZXJMZW4sIGZvcm1hdCwgYXJncyk7Ci0gICAgICAgIHZh
X2VuZChhcmdzKTsKLQotICAgICAgICBwYXJzZUNvbnRleHQtPnRyYWNlKGJ1Zik7Ci0gICAgfQot
fQotfSAgLy8gZXh0ZXJuICJDIgotI2VuZGlmICAvLyBUUkFDRV9FTkFCTEVECi0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVnLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDdhMzcxNTE2YWYwZmVlYzYxZjQ2ZWUxMTgyMWJhMjhkMzUxZGQ0OWUuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVnLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MyAr
MCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBkZWJ1Zy5oOiBEZWJ1Z2dpbmcgdXRpbGl0
aWVzLgotCi0jaWZuZGVmIENPTVBJTEVSX0RFQlVHX0hfCi0jZGVmaW5lIENPTVBJTEVSX0RFQlVH
X0hfCi0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLQotI2lmZGVmIF9ERUJVRwotI2RlZmluZSBUUkFD
RV9FTkFCTEVEICAvLyBkZWZpbmUgdG8gZW5hYmxlIGRlYnVnIG1lc3NhZ2UgdHJhY2luZwotI2Vu
ZGlmICAvLyBfREVCVUcKLQotLy8gT3V0cHV0cyB0ZXh0IHRvIHRoZSBkZWJ1ZyBsb2cKLSNpZmRl
ZiBUUkFDRV9FTkFCTEVECi0KLSNpZmRlZiAgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2Vu
ZGlmICAvLyBfX2NwbHVzcGx1cwotdm9pZCBUcmFjZShjb25zdCBjaGFyKiBmb3JtYXQsIC4uLik7
Ci0jaWZkZWYgIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYgIC8vIF9fY3BsdXNwbHVzCi0KLSNlbHNl
ICAgLy8gVFJBQ0VfRU5BQkxFRAotCi0jZGVmaW5lIFRyYWNlKC4uLikgKCh2b2lkKTApCi0KLSNl
bmRpZiAgLy8gVFJBQ0VfRU5BQkxFRAotCi0vLyBBIG1hY3JvIGFzc2VydGluZyBhIGNvbmRpdGlv
biBhbmQgb3V0cHV0dGluZyBmYWlsdXJlcyB0byB0aGUgZGVidWcgbG9nCi0jZGVmaW5lIEFTU0VS
VChleHByZXNzaW9uKSBkbyB7IFwKLSAgICBpZighKGV4cHJlc3Npb24pKSBcCi0gICAgICAgIFRy
YWNlKCJBc3NlcnQgZmFpbGVkOiAlcyglZCk6ICIjZXhwcmVzc2lvbiJcbiIsIF9fRlVOQ1RJT05f
XywgX19MSU5FX18pOyBcCi0gICAgYXNzZXJ0KGV4cHJlc3Npb24pOyBcCi19IHdoaWxlKDApCi0K
LSNkZWZpbmUgVU5JTVBMRU1FTlRFRCgpIGRvIHsgXAotICAgIFRyYWNlKCJVbmltcGxlbWVudGVk
IGludm9rZWQ6ICVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7IFwKLSAgICBhc3Nl
cnQoZmFsc2UpOyBcCi19IHdoaWxlKDApCi0KLSNkZWZpbmUgVU5SRUFDSEFCTEUoKSBkbyB7IFwK
LSAgICBUcmFjZSgiVW5yZWFjaGFibGUgcmVhY2hlZDogJXMoJWQpXG4iLCBfX0ZVTkNUSU9OX18s
IF9fTElORV9fKTsgXAotICAgIGFzc2VydChmYWxzZSk7IFwKLX0gd2hpbGUoMCkKLQotI2VuZGlm
ICAgLy8gQ09NUElMRVJfREVCVUdfSF8KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E2NjFkNjc2Nzg5YTY5M2NiMjY3ODQ0
MDFkZGQxNzA1NTZlMDgzOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVw
ZW5kZW5jeUdyYXBoLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
Ci0vLwotCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcxOCkKLQotI2luY2x1ZGUgImNvbXBp
bGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdy
YXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCIKLQotVERlcGVuZGVuY3lHcmFwaDo6VERlcGVu
ZGVuY3lHcmFwaChUSW50ZXJtTm9kZSogaW50ZXJtTm9kZSkKLXsKLSAgICBURGVwZW5kZW5jeUdy
YXBoQnVpbGRlcjo6YnVpbGQoaW50ZXJtTm9kZSwgdGhpcyk7Ci19Ci0KLVREZXBlbmRlbmN5R3Jh
cGg6On5URGVwZW5kZW5jeUdyYXBoKCkKLXsKLSAgICBmb3IgKFRHcmFwaE5vZGVWZWN0b3I6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBtQWxsTm9kZXMuYmVnaW4oKTsgaXRlciAhPSBtQWxsTm9kZXMu
ZW5kKCk7ICsraXRlcikKLSAgICB7Ci0gICAgICAgIFRHcmFwaE5vZGUqIG5vZGUgPSAqaXRlcjsK
LSAgICAgICAgZGVsZXRlIG5vZGU7Ci0gICAgfQotfQotCi1UR3JhcGhBcmd1bWVudCogVERlcGVu
ZGVuY3lHcmFwaDo6Y3JlYXRlQXJndW1lbnQoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rp
b25DYWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBhcmd1bWVudE51bWJlcikKLXsKLSAgICBUR3JhcGhBcmd1bWVudCogYXJndW1lbnQgPSBu
ZXcgVEdyYXBoQXJndW1lbnQoaW50ZXJtRnVuY3Rpb25DYWxsLCBhcmd1bWVudE51bWJlcik7Ci0g
ICAgbUFsbE5vZGVzLnB1c2hfYmFjayhhcmd1bWVudCk7Ci0gICAgcmV0dXJuIGFyZ3VtZW50Owot
fQotCi1UR3JhcGhGdW5jdGlvbkNhbGwqIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUZ1bmN0aW9u
Q2FsbChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpCi17Ci0gICAgVEdyYXBo
RnVuY3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwgPSBuZXcgVEdyYXBoRnVuY3Rpb25DYWxsKGludGVy
bUZ1bmN0aW9uQ2FsbCk7Ci0gICAgbUFsbE5vZGVzLnB1c2hfYmFjayhmdW5jdGlvbkNhbGwpOwot
ICAgIGlmIChmdW5jdGlvbkNhbGwtPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpLT5pc1VzZXJEZWZp
bmVkKCkpCi0gICAgICAgIG1Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMucHVzaF9iYWNrKGZ1bmN0
aW9uQ2FsbCk7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKLX0KLQotVEdyYXBoU3ltYm9sKiBU
RGVwZW5kZW5jeUdyYXBoOjpnZXRPckNyZWF0ZVN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1T
eW1ib2wpCi17Ci0gICAgVFN5bWJvbElkTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbVN5bWJv
bElkTWFwLmZpbmQoaW50ZXJtU3ltYm9sLT5nZXRJZCgpKTsKLQotICAgIFRHcmFwaFN5bWJvbCog
c3ltYm9sID0gTlVMTDsKLQotICAgIGlmIChpdGVyICE9IG1TeW1ib2xJZE1hcC5lbmQoKSkgewot
ICAgICAgICBUU3ltYm9sSWRQYWlyIHBhaXIgPSAqaXRlcjsKLSAgICAgICAgc3ltYm9sID0gcGFp
ci5zZWNvbmQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3ltYm9sID0gbmV3IFRHcmFwaFN5bWJv
bChpbnRlcm1TeW1ib2wpOwotICAgICAgICBtQWxsTm9kZXMucHVzaF9iYWNrKHN5bWJvbCk7Ci0K
LSAgICAgICAgVFN5bWJvbElkUGFpciBwYWlyKGludGVybVN5bWJvbC0+Z2V0SWQoKSwgc3ltYm9s
KTsKLSAgICAgICAgbVN5bWJvbElkTWFwLmluc2VydChwYWlyKTsKLQotICAgICAgICAvLyBXZSBz
YXZlIGFsbCBzYW1wbGVyIHN5bWJvbHMgaW4gYSBjb2xsZWN0aW9uLCBzbyB3ZSBjYW4gc3RhcnQg
Z3JhcGggdHJhdmVyc2FscyBmcm9tIHRoZW0gcXVpY2tseS4KLSAgICAgICAgaWYgKElzU2FtcGxl
cihpbnRlcm1TeW1ib2wtPmdldEJhc2ljVHlwZSgpKSkKLSAgICAgICAgICAgIG1TYW1wbGVyU3lt
Ym9scy5wdXNoX2JhY2soc3ltYm9sKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3ltYm9sOwotfQot
Ci1UR3JhcGhTZWxlY3Rpb24qIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZVNlbGVjdGlvbihUSW50
ZXJtU2VsZWN0aW9uKiBpbnRlcm1TZWxlY3Rpb24pCi17Ci0gICAgVEdyYXBoU2VsZWN0aW9uKiBz
ZWxlY3Rpb24gPSBuZXcgVEdyYXBoU2VsZWN0aW9uKGludGVybVNlbGVjdGlvbik7Ci0gICAgbUFs
bE5vZGVzLnB1c2hfYmFjayhzZWxlY3Rpb24pOwotICAgIHJldHVybiBzZWxlY3Rpb247Ci19Ci0K
LVRHcmFwaExvb3AqIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUxvb3AoVEludGVybUxvb3AqIGlu
dGVybUxvb3ApCi17Ci0gICAgVEdyYXBoTG9vcCogbG9vcCA9IG5ldyBUR3JhcGhMb29wKGludGVy
bUxvb3ApOwotICAgIG1BbGxOb2Rlcy5wdXNoX2JhY2sobG9vcCk7Ci0gICAgcmV0dXJuIGxvb3A7
Ci19Ci0KLVRHcmFwaExvZ2ljYWxPcCogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlTG9naWNhbE9w
KFRJbnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxPcCkKLXsKLSAgICBUR3JhcGhMb2dpY2FsT3Aq
IGxvZ2ljYWxPcCA9IG5ldyBUR3JhcGhMb2dpY2FsT3AoaW50ZXJtTG9naWNhbE9wKTsKLSAgICBt
QWxsTm9kZXMucHVzaF9iYWNrKGxvZ2ljYWxPcCk7Ci0gICAgcmV0dXJuIGxvZ2ljYWxPcDsKLX0K
LQotY29uc3QgY2hhciogVEdyYXBoTG9naWNhbE9wOjpnZXRPcFN0cmluZygpIGNvbnN0Ci17Ci0g
ICAgY29uc3QgY2hhciogb3BTdHJpbmcgPSBOVUxMOwotICAgIHN3aXRjaCAoZ2V0SW50ZXJtTG9n
aWNhbE9wKCktPmdldE9wKCkpIHsKLSAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiBvcFN0cmlu
ZyA9ICJhbmQiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6IG9wU3RyaW5nID0g
Im9yIjsgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6IG9wU3RyaW5nID0gInVua25vd24iOyBicmVh
azsKLSAgICB9Ci0gICAgcmV0dXJuIG9wU3RyaW5nOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lH
cmFwaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTljMzVkMDBiN2EzMWQ5MjU3
MTFlZjA1ZTg1MjhkNDRmMWU3NjkyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFw
aC9EZXBlbmRlbmN5R3JhcGguaAorKysgL2Rldi9udWxsCkBAIC0xLDIxMiArMCwwIEBACi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0gK
LSNkZWZpbmUgQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9ICi0KLSNpbmNsdWRl
ICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKLQotI2luY2x1ZGUgPHNldD4KLSNpbmNsdWRlIDxz
dGFjaz4KLQotY2xhc3MgVEdyYXBoTm9kZTsKLWNsYXNzIFRHcmFwaFBhcmVudE5vZGU7Ci1jbGFz
cyBUR3JhcGhBcmd1bWVudDsKLWNsYXNzIFRHcmFwaEZ1bmN0aW9uQ2FsbDsKLWNsYXNzIFRHcmFw
aFN5bWJvbDsKLWNsYXNzIFRHcmFwaFNlbGVjdGlvbjsKLWNsYXNzIFRHcmFwaExvb3A7Ci1jbGFz
cyBUR3JhcGhMb2dpY2FsT3A7Ci1jbGFzcyBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyOwotY2xh
c3MgVERlcGVuZGVuY3lHcmFwaE91dHB1dDsKLQotdHlwZWRlZiBzdGQ6OnNldDxUR3JhcGhOb2Rl
Kj4gVEdyYXBoTm9kZVNldDsKLXR5cGVkZWYgc3RkOjp2ZWN0b3I8VEdyYXBoTm9kZSo+IFRHcmFw
aE5vZGVWZWN0b3I7Ci10eXBlZGVmIHN0ZDo6dmVjdG9yPFRHcmFwaFN5bWJvbCo+IFRHcmFwaFN5
bWJvbFZlY3RvcjsKLXR5cGVkZWYgc3RkOjp2ZWN0b3I8VEdyYXBoRnVuY3Rpb25DYWxsKj4gVEZ1
bmN0aW9uQ2FsbFZlY3RvcjsKLQotLy8KLS8vIEJhc2UgY2xhc3MgZm9yIGFsbCBkZXBlbmRlbmN5
IGdyYXBoIG5vZGVzLgotLy8KLWNsYXNzIFRHcmFwaE5vZGUgewotcHVibGljOgotICAgIFRHcmFw
aE5vZGUoVEludGVybU5vZGUqIG5vZGUpIDogaW50ZXJtTm9kZShub2RlKSB7fQotICAgIHZpcnR1
YWwgflRHcmFwaE5vZGUoKSB7fQotICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Ci1wcm90ZWN0ZWQ6Ci0gICAgVEludGVy
bU5vZGUqIGludGVybU5vZGU7Ci19OwotCi0vLwotLy8gQmFzZSBjbGFzcyBmb3IgZGVwZW5kZW5j
eSBncmFwaCBub2RlcyB0aGF0IG1heSBoYXZlIGNoaWxkcmVuLgotLy8KLWNsYXNzIFRHcmFwaFBh
cmVudE5vZGUgOiBwdWJsaWMgVEdyYXBoTm9kZSB7Ci1wdWJsaWM6Ci0gICAgVEdyYXBoUGFyZW50
Tm9kZShUSW50ZXJtTm9kZSogbm9kZSkgOiBUR3JhcGhOb2RlKG5vZGUpIHt9Ci0gICAgdmlydHVh
bCB+VEdyYXBoUGFyZW50Tm9kZSgpIHt9Ci0gICAgdm9pZCBhZGREZXBlbmRlbnROb2RlKFRHcmFw
aE5vZGUqIG5vZGUpIHsgaWYgKG5vZGUgIT0gdGhpcykgbURlcGVuZGVudE5vZGVzLmluc2VydChu
b2RlKTsgfQotICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVy
c2VyKiBncmFwaFRyYXZlcnNlcik7Ci1wcml2YXRlOgotICAgIFRHcmFwaE5vZGVTZXQgbURlcGVu
ZGVudE5vZGVzOwotfTsKLQotLy8KLS8vIEhhbmRsZSBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50cy4K
LS8vCi1jbGFzcyBUR3JhcGhBcmd1bWVudCA6IHB1YmxpYyBUR3JhcGhQYXJlbnROb2RlIHsKLXB1
YmxpYzoKLSAgICBUR3JhcGhBcmd1bWVudChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlv
bkNhbGwsIGludCBhcmd1bWVudE51bWJlcikKLSAgICAgICAgOiBUR3JhcGhQYXJlbnROb2RlKGlu
dGVybUZ1bmN0aW9uQ2FsbCkKLSAgICAgICAgLCBtQXJndW1lbnROdW1iZXIoYXJndW1lbnROdW1i
ZXIpIHt9Ci0gICAgdmlydHVhbCB+VEdyYXBoQXJndW1lbnQoKSB7fQotICAgIGNvbnN0IFRJbnRl
cm1BZ2dyZWdhdGUqIGdldEludGVybUZ1bmN0aW9uQ2FsbCgpIGNvbnN0IHsgcmV0dXJuIGludGVy
bU5vZGUtPmdldEFzQWdncmVnYXRlKCk7IH0KLSAgICBpbnQgZ2V0QXJndW1lbnROdW1iZXIoKSBj
b25zdCB7IHJldHVybiBtQXJndW1lbnROdW1iZXI7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhdmVy
c2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOwotcHJpdmF0ZToK
LSAgICBpbnQgbUFyZ3VtZW50TnVtYmVyOwotfTsKLQotLy8KLS8vIEhhbmRsZSBmdW5jdGlvbiBj
YWxscy4KLS8vCi1jbGFzcyBUR3JhcGhGdW5jdGlvbkNhbGwgOiBwdWJsaWMgVEdyYXBoUGFyZW50
Tm9kZSB7Ci1wdWJsaWM6Ci0gICAgVEdyYXBoRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUq
IGludGVybUZ1bmN0aW9uQ2FsbCkKLSAgICAgICAgOiBUR3JhcGhQYXJlbnROb2RlKGludGVybUZ1
bmN0aW9uQ2FsbCkge30KLSAgICB2aXJ0dWFsIH5UR3JhcGhGdW5jdGlvbkNhbGwoKSB7fQotICAg
IGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUqIGdldEludGVybUZ1bmN0aW9uQ2FsbCgpIGNvbnN0IHsg
cmV0dXJuIGludGVybU5vZGUtPmdldEFzQWdncmVnYXRlKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOwotfTsK
LQotLy8KLS8vIEhhbmRsZSBzeW1ib2xzLgotLy8KLWNsYXNzIFRHcmFwaFN5bWJvbCA6IHB1Ymxp
YyBUR3JhcGhQYXJlbnROb2RlIHsKLXB1YmxpYzoKLSAgICBUR3JhcGhTeW1ib2woVEludGVybVN5
bWJvbCogaW50ZXJtU3ltYm9sKSA6IFRHcmFwaFBhcmVudE5vZGUoaW50ZXJtU3ltYm9sKSB7fQot
ICAgIHZpcnR1YWwgflRHcmFwaFN5bWJvbCgpIHt9Ci0gICAgY29uc3QgVEludGVybVN5bWJvbCog
Z2V0SW50ZXJtU3ltYm9sKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNTeW1ib2xO
b2RlKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZl
cnNlciogZ3JhcGhUcmF2ZXJzZXIpOwotfTsKLQotLy8KLS8vIEhhbmRsZSBpZiBzdGF0ZW1lbnRz
IGFuZCB0ZXJuYXJ5IG9wZXJhdG9ycy4KLS8vCi1jbGFzcyBUR3JhcGhTZWxlY3Rpb24gOiBwdWJs
aWMgVEdyYXBoTm9kZSB7Ci1wdWJsaWM6Ci0gICAgVEdyYXBoU2VsZWN0aW9uKFRJbnRlcm1TZWxl
Y3Rpb24qIGludGVybVNlbGVjdGlvbikgOiBUR3JhcGhOb2RlKGludGVybVNlbGVjdGlvbikge30K
LSAgICB2aXJ0dWFsIH5UR3JhcGhTZWxlY3Rpb24oKSB7fQotICAgIGNvbnN0IFRJbnRlcm1TZWxl
Y3Rpb24qIGdldEludGVybVNlbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGludGVybU5vZGUtPmdl
dEFzU2VsZWN0aW9uTm9kZSgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKLX07Ci0KLS8vCi0vLyBIYW5kbGUg
Zm9yLCBkby13aGlsZSwgYW5kIHdoaWxlIGxvb3BzLgotLy8KLWNsYXNzIFRHcmFwaExvb3AgOiBw
dWJsaWMgVEdyYXBoTm9kZSB7Ci1wdWJsaWM6Ci0gICAgVEdyYXBoTG9vcChUSW50ZXJtTG9vcCog
aW50ZXJtTG9vcCkgOiBUR3JhcGhOb2RlKGludGVybUxvb3ApIHt9Ci0gICAgdmlydHVhbCB+VEdy
YXBoTG9vcCgpIHt9Ci0gICAgY29uc3QgVEludGVybUxvb3AqIGdldEludGVybUxvb3AoKSBjb25z
dCB7IHJldHVybiBpbnRlcm1Ob2RlLT5nZXRBc0xvb3BOb2RlKCk7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOwot
fTsKLQotLy8KLS8vIEhhbmRsZSBsb2dpY2FsIGFuZCwgb3IuCi0vLwotY2xhc3MgVEdyYXBoTG9n
aWNhbE9wIDogcHVibGljIFRHcmFwaE5vZGUgewotcHVibGljOgotICAgIFRHcmFwaExvZ2ljYWxP
cChUSW50ZXJtQmluYXJ5KiBpbnRlcm1Mb2dpY2FsT3ApIDogVEdyYXBoTm9kZShpbnRlcm1Mb2dp
Y2FsT3ApIHt9Ci0gICAgdmlydHVhbCB+VEdyYXBoTG9naWNhbE9wKCkge30KLSAgICBjb25zdCBU
SW50ZXJtQmluYXJ5KiBnZXRJbnRlcm1Mb2dpY2FsT3AoKSBjb25zdCB7IHJldHVybiBpbnRlcm1O
b2RlLT5nZXRBc0JpbmFyeU5vZGUoKTsgfQotICAgIGNvbnN0IGNoYXIqIGdldE9wU3RyaW5nKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJz
ZXIqIGdyYXBoVHJhdmVyc2VyKTsKLX07Ci0KLS8vCi0vLyBBIGRlcGVuZGVuY3kgZ3JhcGggb2Yg
c3ltYm9scywgZnVuY3Rpb24gY2FsbHMsIGNvbmRpdGlvbnMgZXRjLgotLy8KLS8vIFRoaXMgY2xh
c3MgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIHRvIHRoZSBlbnRyeSBwb2ludHMgb2YgdGhlIGRlcGVu
ZGVuY3kgZ3JhcGguCi0vLwotLy8gRGVwZW5kZW5jeSBncmFwaCBub2RlcyBzaG91bGQgYmUgY3Jl
YXRlZCBieSB1c2luZyBvbmUgb2YgdGhlIHByb3ZpZGVkICJjcmVhdGUuLi4iIG1ldGhvZHMuCi0v
LyBUaGlzIGNsYXNzIChhbmQgbm9ib2R5IGVsc2UpIG1hbmFnZXMgdGhlIG1lbW9yeSBvZiB0aGUg
Y3JlYXRlZCBub2Rlcy4KLS8vIE5vZGVzIG1heSBub3QgYmUgcmVtb3ZlZCBhZnRlciBiZWluZyBh
ZGRlZCwgc28gYWxsIGNyZWF0ZWQgbm9kZXMgd2lsbCBleGlzdCB3aGlsZSB0aGUKLS8vIFREZXBl
bmRlbmN5R3JhcGggaW5zdGFuY2UgZXhpc3RzLgotLy8KLWNsYXNzIFREZXBlbmRlbmN5R3JhcGgg
ewotcHVibGljOgotICAgIFREZXBlbmRlbmN5R3JhcGgoVEludGVybU5vZGUqIGludGVybU5vZGUp
OwotICAgIH5URGVwZW5kZW5jeUdyYXBoKCk7Ci0gICAgVEdyYXBoTm9kZVZlY3Rvcjo6Y29uc3Rf
aXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtQWxsTm9kZXMuYmVnaW4oKTsgfQotICAg
IFRHcmFwaE5vZGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1B
bGxOb2Rlcy5lbmQoKTsgfQotCi0gICAgVEdyYXBoU3ltYm9sVmVjdG9yOjpjb25zdF9pdGVyYXRv
ciBiZWdpblNhbXBsZXJTeW1ib2xzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtU2Ft
cGxlclN5bWJvbHMuYmVnaW4oKTsKLSAgICB9Ci0KLSAgICBUR3JhcGhTeW1ib2xWZWN0b3I6OmNv
bnN0X2l0ZXJhdG9yIGVuZFNhbXBsZXJTeW1ib2xzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtU2FtcGxlclN5bWJvbHMuZW5kKCk7Ci0gICAgfQotCi0gICAgVEZ1bmN0aW9uQ2FsbFZl
Y3Rvcjo6Y29uc3RfaXRlcmF0b3IgYmVnaW5Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMoKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMuYmVnaW4o
KTsKLSAgICB9Ci0KLSAgICBURnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9pdGVyYXRvciBlbmRV
c2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1V
c2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMuZW5kKCk7Ci0gICAgfQotCi0gICAgVEdyYXBoQXJndW1l
bnQqIGNyZWF0ZUFyZ3VtZW50KFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCwg
aW50IGFyZ3VtZW50TnVtYmVyKTsKLSAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIGNyZWF0ZUZ1bmN0
aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpOwotICAgIFRHcmFw
aFN5bWJvbCogZ2V0T3JDcmVhdGVTeW1ib2woVEludGVybVN5bWJvbCogaW50ZXJtU3ltYm9sKTsK
LSAgICBUR3JhcGhTZWxlY3Rpb24qIGNyZWF0ZVNlbGVjdGlvbihUSW50ZXJtU2VsZWN0aW9uKiBp
bnRlcm1TZWxlY3Rpb24pOwotICAgIFRHcmFwaExvb3AqIGNyZWF0ZUxvb3AoVEludGVybUxvb3Aq
IGludGVybUxvb3ApOwotICAgIFRHcmFwaExvZ2ljYWxPcCogY3JlYXRlTG9naWNhbE9wKFRJbnRl
cm1CaW5hcnkqIGludGVybUxvZ2ljYWxPcCk7Ci1wcml2YXRlOgotICAgIHR5cGVkZWYgVE1hcDxp
bnQsIFRHcmFwaFN5bWJvbCo+IFRTeW1ib2xJZE1hcDsKLSAgICB0eXBlZGVmIHN0ZDo6cGFpcjxp
bnQsIFRHcmFwaFN5bWJvbCo+IFRTeW1ib2xJZFBhaXI7Ci0KLSAgICBUR3JhcGhOb2RlVmVjdG9y
IG1BbGxOb2RlczsKLSAgICBUR3JhcGhTeW1ib2xWZWN0b3IgbVNhbXBsZXJTeW1ib2xzOwotICAg
IFRGdW5jdGlvbkNhbGxWZWN0b3IgbVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxsczsKLSAgICBUU3lt
Ym9sSWRNYXAgbVN5bWJvbElkTWFwOwotfTsKLQotLy8KLS8vIEZvciB0cmF2ZXJzaW5nIHRoZSBk
ZXBlbmRlbmN5IGdyYXBoLiBVc2VycyBzaG91bGQgZGVyaXZlIGZyb20gdGhpcywKLS8vIHB1dCB0
aGVpciB0cmF2ZXJzYWwgc3BlY2lmaWMgZGF0YSBpbiBpdCwgYW5kIHRoZW4gcGFzcyBpdCB0byBh
Ci0vLyB0cmF2ZXJzZSBtZXRob2QuCi0vLwotLy8gV2hlbiB1c2luZyB0aGlzLCBqdXN0IGZpbGwg
aW4gdGhlIG1ldGhvZHMgZm9yIG5vZGVzIHlvdSB3YW50IHZpc2l0ZWQuCi0vLwotY2xhc3MgVERl
cGVuZGVuY3lHcmFwaFRyYXZlcnNlciB7Ci1wdWJsaWM6Ci0gICAgVERlcGVuZGVuY3lHcmFwaFRy
YXZlcnNlcigpIDogbURlcHRoKDApIHt9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2wo
VEdyYXBoU3ltYm9sKiBzeW1ib2wpIHt9OwotICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFyZ3VtZW50
KFRHcmFwaEFyZ3VtZW50KiBzZWxlY3Rpb24pIHt9OwotICAgIHZpcnR1YWwgdm9pZCB2aXNpdEZ1
bmN0aW9uQ2FsbChUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCkge307Ci0gICAgdmly
dHVhbCB2b2lkIHZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKSB7fTsK
LSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3ApIHt9OwotICAgIHZp
cnR1YWwgdm9pZCB2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCkge307
Ci0KLSAgICBpbnQgZ2V0RGVwdGgoKSBjb25zdCB7IHJldHVybiBtRGVwdGg7IH0KLSAgICB2b2lk
IGluY3JlbWVudERlcHRoKCkgeyArK21EZXB0aDsgfQotICAgIHZvaWQgZGVjcmVtZW50RGVwdGgo
KSB7IC0tbURlcHRoOyB9Ci0KLSAgICB2b2lkIGNsZWFyVmlzaXRlZCgpIHsgbVZpc2l0ZWQuY2xl
YXIoKTsgfQotICAgIHZvaWQgbWFya1Zpc2l0ZWQoVEdyYXBoTm9kZSogbm9kZSkgeyBtVmlzaXRl
ZC5pbnNlcnQobm9kZSk7IH0KLSAgICBib29sIGlzVmlzaXRlZChUR3JhcGhOb2RlKiBub2RlKSBj
b25zdCB7IHJldHVybiBtVmlzaXRlZC5maW5kKG5vZGUpICE9IG1WaXNpdGVkLmVuZCgpOyB9Ci1w
cml2YXRlOgotICAgIGludCBtRGVwdGg7Ci0gICAgVEdyYXBoTm9kZVNldCBtVmlzaXRlZDsKLX07
Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjZlNmQ1N2E0ZmY4MjkzNzg0ZGNlYTVm
ZGVlMjA3MWNiMTMwNmI4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBl
bmRlbmN5R3JhcGhCdWlsZGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIyNyArMCwwIEBACi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aEJ1aWxkZXIuaCIKLQotdm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6YnVpbGQoVEludGVy
bU5vZGUqIG5vZGUsIFREZXBlbmRlbmN5R3JhcGgqIGdyYXBoKQotewotICAgIFREZXBlbmRlbmN5
R3JhcGhCdWlsZGVyIGJ1aWxkZXIoZ3JhcGgpOwotICAgIGJ1aWxkZXIuYnVpbGQobm9kZSk7Ci19
Ci0KLWJvb2wgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZp
c2l0LCBUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUpCi17Ci0gICAgc3dpdGNoIChp
bnRlcm1BZ2dyZWdhdGUtPmdldE9wKCkpIHsKLSAgICAgICAgY2FzZSBFT3BGdW5jdGlvbjogdmlz
aXRGdW5jdGlvbkRlZmluaXRpb24oaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRU9wRnVuY3Rpb25DYWxsOiB2aXNpdEZ1bmN0aW9uQ2FsbChpbnRlcm1BZ2dyZWdhdGUpOyBi
cmVhazsKLSAgICAgICAgZGVmYXVsdDogdmlzaXRBZ2dyZWdhdGVDaGlsZHJlbihpbnRlcm1BZ2dy
ZWdhdGUpOyBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgVERl
cGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFRJbnRlcm1BZ2dy
ZWdhdGUqIGludGVybUFnZ3JlZ2F0ZSkKLXsKLSAgICAvLyBDdXJyZW50bHksIHdlIGRvIG5vdCBz
dXBwb3J0IHVzZXIgZGVmaW5lZCBmdW5jdGlvbnMuCi0gICAgaWYgKGludGVybUFnZ3JlZ2F0ZS0+
Z2V0TmFtZSgpICE9ICJtYWluKCIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHZpc2l0QWdncmVn
YXRlQ2hpbGRyZW4oaW50ZXJtQWdncmVnYXRlKTsKLX0KLQotLy8gVGFrZXMgYW4gZXhwcmVzc2lv
biBsaWtlICJmKHgpIiBhbmQgY3JlYXRlcyBhIGRlcGVuZGVuY3kgZ3JhcGggbGlrZQotLy8gIngg
LT4gYXJndW1lbnQgMCAtPiBmdW5jdGlvbiBjYWxsIi4KLXZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXI6OnZpc2l0RnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9u
Q2FsbCkKLXsKLSAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCA9IG1HcmFwaC0+
Y3JlYXRlRnVuY3Rpb25DYWxsKGludGVybUZ1bmN0aW9uQ2FsbCk7Ci0KLSAgICAvLyBSdW4gdGhy
b3VnaCB0aGUgZnVuY3Rpb24gY2FsbCBhcmd1bWVudHMuCi0gICAgaW50IGFyZ3VtZW50TnVtYmVy
ID0gMDsKLSAgICBUSW50ZXJtU2VxdWVuY2UmIGludGVybUFyZ3VtZW50cyA9IGludGVybUZ1bmN0
aW9uQ2FsbC0+Z2V0U2VxdWVuY2UoKTsKLSAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3Rf
aXRlcmF0b3IgaXRlciA9IGludGVybUFyZ3VtZW50cy5iZWdpbigpOwotICAgICAgICAgaXRlciAh
PSBpbnRlcm1Bcmd1bWVudHMuZW5kKCk7Ci0gICAgICAgICArK2l0ZXIsICsrYXJndW1lbnROdW1i
ZXIpCi0gICAgewotICAgICAgICBUTm9kZVNldE1haW50YWluZXIgbm9kZVNldE1haW50YWluZXIo
dGhpcyk7Ci0KLSAgICAgICAgVEludGVybU5vZGUqIGludGVybUFyZ3VtZW50ID0gKml0ZXI7Ci0g
ICAgICAgIGludGVybUFyZ3VtZW50LT50cmF2ZXJzZSh0aGlzKTsKLQotICAgICAgICBpZiAoVFBh
cmVudE5vZGVTZXQqIGFyZ3VtZW50Tm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0KCkpIHsKLSAg
ICAgICAgICAgIFRHcmFwaEFyZ3VtZW50KiBhcmd1bWVudCA9IG1HcmFwaC0+Y3JlYXRlQXJndW1l
bnQoaW50ZXJtRnVuY3Rpb25DYWxsLCBhcmd1bWVudE51bWJlcik7Ci0gICAgICAgICAgICBjb25u
ZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShhcmd1bWVudE5vZGVzLCBhcmd1bWVudCk7Ci0g
ICAgICAgICAgICBhcmd1bWVudC0+YWRkRGVwZW5kZW50Tm9kZShmdW5jdGlvbkNhbGwpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgLy8gUHVzaCB0aGUgbGVmdG1vc3Qgc3ltYm9sIG9mIHRoaXMg
ZnVuY3Rpb24gY2FsbCBpbnRvIHRoZSBjdXJyZW50IHNldCBvZiBkZXBlbmRlbnQgc3ltYm9scyB0
bwotICAgIC8vIHJlcHJlc2VudCB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gY2FsbC4KLSAg
ICAvLyBUaHVzLCBhbiBleHByZXNzaW9uIGxpa2UgInkgPSBmKHgpIiB3aWxsIHlpZWxkIGEgZGVw
ZW5kZW5jeSBncmFwaCBsaWtlCi0gICAgLy8gInggLT4gYXJndW1lbnQgMCAtPiBmdW5jdGlvbiBj
YWxsIC0+IHkiLgotICAgIC8vIFRoaXMgbGluZSBlc3NlbnRpYWxseSBwYXNzZXMgdGhlIGZ1bmN0
aW9uIGNhbGwgbm9kZSBiYWNrIHVwIHRvIGFuIGVhcmxpZXIgdmlzaXRBc3NpZ25tZW50Ci0gICAg
Ly8gY2FsbCwgd2hpY2ggd2lsbCBjcmVhdGUgdGhlIGNvbm5lY3Rpb24gImZ1bmN0aW9uIGNhbGwg
LT4geSIuCi0gICAgbU5vZGVTZXRzLmluc2VydEludG9Ub3BTZXQoZnVuY3Rpb25DYWxsKTsKLX0K
LQotdm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBZ2dyZWdhdGVDaGlsZHJlbihU
SW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUpCi17Ci0gICAgVEludGVybVNlcXVlbmNl
JiBzZXF1ZW5jZSA9IGludGVybUFnZ3JlZ2F0ZS0+Z2V0U2VxdWVuY2UoKTsKLSAgICBmb3IoVElu
dGVybVNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBpdGVyID0gc2VxdWVuY2UuYmVnaW4oKTsgaXRl
ciAhPSBzZXF1ZW5jZS5lbmQoKTsgKytpdGVyKQotICAgIHsKLSAgICAgICAgVEludGVybU5vZGUq
IGludGVybUNoaWxkID0gKml0ZXI7Ci0gICAgICAgIGludGVybUNoaWxkLT50cmF2ZXJzZSh0aGlz
KTsKLSAgICB9Ci19Ci0KLXZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0U3ltYm9s
KFRJbnRlcm1TeW1ib2wqIGludGVybVN5bWJvbCkKLXsKLSAgICAvLyBQdXNoIHRoaXMgc3ltYm9s
IGludG8gdGhlIHNldCBvZiBkZXBlbmRlbnQgc3ltYm9scyBmb3IgdGhlIGN1cnJlbnQgYXNzaWdu
bWVudCBvciBjb25kaXRpb24KLSAgICAvLyB0aGF0IHdlIGFyZSB0cmF2ZXJzaW5nLgotICAgIFRH
cmFwaFN5bWJvbCogc3ltYm9sID0gbUdyYXBoLT5nZXRPckNyZWF0ZVN5bWJvbChpbnRlcm1TeW1i
b2wpOwotICAgIG1Ob2RlU2V0cy5pbnNlcnRJbnRvVG9wU2V0KHN5bWJvbCk7Ci0KLSAgICAvLyBJ
ZiB0aGlzIHN5bWJvbCBpcyB0aGUgY3VycmVudCBsZWZ0bW9zdCBzeW1ib2wgdW5kZXIgYW4gYXNz
aWdubWVudCwgcmVwbGFjZSB0aGUgcHJldmlvdXMKLSAgICAvLyBsZWZ0bW9zdCBzeW1ib2wgd2l0
aCB0aGlzIHN5bWJvbC4KLSAgICBpZiAoIW1MZWZ0bW9zdFN5bWJvbHMuZW1wdHkoKSAmJiBtTGVm
dG1vc3RTeW1ib2xzLnRvcCgpICE9ICZtUmlnaHRTdWJ0cmVlKSB7Ci0gICAgICAgIG1MZWZ0bW9z
dFN5bWJvbHMucG9wKCk7Ci0gICAgICAgIG1MZWZ0bW9zdFN5bWJvbHMucHVzaChzeW1ib2wpOwot
ICAgIH0KLX0KLQotYm9vbCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRCaW5hcnkoVmlz
aXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqIGludGVybUJpbmFyeSkKLXsKLSAgICBUT3BlcmF0b3Ig
b3AgPSBpbnRlcm1CaW5hcnktPmdldE9wKCk7Ci0gICAgaWYgKG9wID09IEVPcEluaXRpYWxpemUg
fHwgaW50ZXJtQmluYXJ5LT5pc0Fzc2lnbm1lbnQoKSkKLSAgICAgICAgdmlzaXRBc3NpZ25tZW50
KGludGVybUJpbmFyeSk7Ci0gICAgZWxzZSBpZiAob3AgPT0gRU9wTG9naWNhbEFuZCB8fCBvcCA9
PSBFT3BMb2dpY2FsT3IpCi0gICAgICAgIHZpc2l0TG9naWNhbE9wKGludGVybUJpbmFyeSk7Ci0g
ICAgZWxzZQotICAgICAgICB2aXNpdEJpbmFyeUNoaWxkcmVuKGludGVybUJpbmFyeSk7Ci0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0
QXNzaWdubWVudChUSW50ZXJtQmluYXJ5KiBpbnRlcm1Bc3NpZ25tZW50KQotewotICAgIFRJbnRl
cm1UeXBlZCogaW50ZXJtTGVmdCA9IGludGVybUFzc2lnbm1lbnQtPmdldExlZnQoKTsKLSAgICBp
ZiAoIWludGVybUxlZnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFRHcmFwaFN5bWJvbCogbGVm
dG1vc3RTeW1ib2wgPSBOVUxMOwotCi0gICAgewotICAgICAgICBUTm9kZVNldE1haW50YWluZXIg
bm9kZVNldE1haW50YWluZXIodGhpcyk7Ci0KLSAgICAgICAgewotICAgICAgICAgICAgVExlZnRt
b3N0U3ltYm9sTWFpbnRhaW5lciBsZWZ0bW9zdFN5bWJvbE1haW50YWluZXIodGhpcywgbUxlZnRT
dWJ0cmVlKTsKLSAgICAgICAgICAgIGludGVybUxlZnQtPnRyYXZlcnNlKHRoaXMpOwotICAgICAg
ICAgICAgbGVmdG1vc3RTeW1ib2wgPSBtTGVmdG1vc3RTeW1ib2xzLnRvcCgpOwotCi0gICAgICAg
ICAgICAvLyBBZnRlciB0cmF2ZXJzaW5nIHRoZSBsZWZ0IHN1YnRyZWUgb2YgdGhpcyBhc3NpZ25t
ZW50LCB3ZSBzaG91bGQgaGF2ZSBmb3VuZCBhIHJlYWwKLSAgICAgICAgICAgIC8vIGxlZnRtb3N0
IHN5bWJvbCwgYW5kIHRoZSBsZWZ0bW9zdCBzeW1ib2wgc2hvdWxkIG5vdCBiZSBhIHBsYWNlaG9s
ZGVyLgotICAgICAgICAgICAgQVNTRVJUKGxlZnRtb3N0U3ltYm9sICE9ICZtTGVmdFN1YnRyZWUp
OwotICAgICAgICAgICAgQVNTRVJUKGxlZnRtb3N0U3ltYm9sICE9ICZtUmlnaHRTdWJ0cmVlKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybVJpZ2h0ID0gaW50
ZXJtQXNzaWdubWVudC0+Z2V0UmlnaHQoKSkgewotICAgICAgICAgICAgVExlZnRtb3N0U3ltYm9s
TWFpbnRhaW5lciBsZWZ0bW9zdFN5bWJvbE1haW50YWluZXIodGhpcywgbVJpZ2h0U3VidHJlZSk7
Ci0gICAgICAgICAgICBpbnRlcm1SaWdodC0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoVFBhcmVudE5vZGVTZXQqIGFzc2lnbm1lbnROb2RlcyA9IG1Ob2RlU2V0cy5n
ZXRUb3BTZXQoKSkKLSAgICAgICAgICAgIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2Rl
KGFzc2lnbm1lbnROb2RlcywgbGVmdG1vc3RTeW1ib2wpOwotICAgIH0KLQotICAgIC8vIFB1c2gg
dGhlIGxlZnRtb3N0IHN5bWJvbCBvZiB0aGlzIGFzc2lnbm1lbnQgaW50byB0aGUgY3VycmVudCBz
ZXQgb2YgZGVwZW5kZW50IHN5bWJvbHMgdG8KLSAgICAvLyByZXByZXNlbnQgdGhlIHJlc3VsdCBv
ZiB0aGlzIGFzc2lnbm1lbnQuCi0gICAgLy8gQW4gZXhwcmVzc2lvbiBsaWtlICJhID0gKGIgPSBj
KSIgd2lsbCB5aWVsZCBhIGRlcGVuZGVuY3kgZ3JhcGggbGlrZSAiYyAtPiBiIC0+IGEiLgotICAg
IC8vIFRoaXMgbGluZSBlc3NlbnRpYWxseSBwYXNzZXMgdGhlIGxlZnRtb3N0IHN5bWJvbCBvZiB0
aGUgbmVzdGVkIGFzc2lnbm1lbnQgKCJiIiBpbiB0aGlzCi0gICAgLy8gZXhhbXBsZSkgYmFjayB1
cCB0byB0aGUgZWFybGllciB2aXNpdEFzc2lnbm1lbnQgY2FsbCBmb3IgdGhlIG91dGVyIGFzc2ln
bm1lbnQsIHdoaWNoIHdpbGwKLSAgICAvLyBjcmVhdGUgdGhlIGNvbm5lY3Rpb24gImIgLT4gYSIu
Ci0gICAgbU5vZGVTZXRzLmluc2VydEludG9Ub3BTZXQobGVmdG1vc3RTeW1ib2wpOwotfQotCi12
b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdExvZ2ljYWxPcChUSW50ZXJtQmluYXJ5
KiBpbnRlcm1Mb2dpY2FsT3ApCi17Ci0gICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtTGVmdCA9
IGludGVybUxvZ2ljYWxPcC0+Z2V0TGVmdCgpKSB7Ci0gICAgICAgIFROb2RlU2V0UHJvcGFnYXRp
bmdNYWludGFpbmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMpOwotCi0gICAgICAgIGludGVybUxl
ZnQtPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBpZiAoVFBhcmVudE5vZGVTZXQqIGxlZnROb2Rl
cyA9IG1Ob2RlU2V0cy5nZXRUb3BTZXQoKSkgewotICAgICAgICAgICAgVEdyYXBoTG9naWNhbE9w
KiBsb2dpY2FsT3AgPSBtR3JhcGgtPmNyZWF0ZUxvZ2ljYWxPcChpbnRlcm1Mb2dpY2FsT3ApOwot
ICAgICAgICAgICAgY29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUobGVmdE5vZGVzLCBs
b2dpY2FsT3ApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKFRJbnRlcm1UeXBlZCogaW50
ZXJtUmlnaHQgPSBpbnRlcm1Mb2dpY2FsT3AtPmdldFJpZ2h0KCkpIHsKLSAgICAgICAgVExlZnRt
b3N0U3ltYm9sTWFpbnRhaW5lciBsZWZ0bW9zdFN5bWJvbE1haW50YWluZXIodGhpcywgbVJpZ2h0
U3VidHJlZSk7Ci0gICAgICAgIGludGVybVJpZ2h0LT50cmF2ZXJzZSh0aGlzKTsKLSAgICB9Ci19
Ci0KLXZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QmluYXJ5Q2hpbGRyZW4oVElu
dGVybUJpbmFyeSogaW50ZXJtQmluYXJ5KQotewotICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVy
bUxlZnQgPSBpbnRlcm1CaW5hcnktPmdldExlZnQoKSkKLSAgICAgICAgaW50ZXJtTGVmdC0+dHJh
dmVyc2UodGhpcyk7Ci0KLSAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1SaWdodCA9IGludGVy
bUJpbmFyeS0+Z2V0UmlnaHQoKSkgewotICAgICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVy
IGxlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcih0aGlzLCBtUmlnaHRTdWJ0cmVlKTsKLSAgICAgICAg
aW50ZXJtUmlnaHQtPnRyYXZlcnNlKHRoaXMpOwotICAgIH0KLX0KLQotYm9vbCBURGVwZW5kZW5j
eUdyYXBoQnVpbGRlcjo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rp
b24qIGludGVybVNlbGVjdGlvbikKLXsKLSAgICBpZiAoVEludGVybU5vZGUqIGludGVybUNvbmRp
dGlvbiA9IGludGVybVNlbGVjdGlvbi0+Z2V0Q29uZGl0aW9uKCkpIHsKLSAgICAgICAgVE5vZGVT
ZXRNYWludGFpbmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMpOwotCi0gICAgICAgIGludGVybUNv
bmRpdGlvbi0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIGlmIChUUGFyZW50Tm9kZVNldCogY29u
ZGl0aW9uTm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0KCkpIHsKLSAgICAgICAgICAgIFRHcmFw
aFNlbGVjdGlvbiogc2VsZWN0aW9uID0gbUdyYXBoLT5jcmVhdGVTZWxlY3Rpb24oaW50ZXJtU2Vs
ZWN0aW9uKTsKLSAgICAgICAgICAgIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGNv
bmRpdGlvbk5vZGVzLCBzZWxlY3Rpb24pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKFRJ
bnRlcm1Ob2RlKiBpbnRlcm1UcnVlQmxvY2sgPSBpbnRlcm1TZWxlY3Rpb24tPmdldFRydWVCbG9j
aygpKQotICAgICAgICBpbnRlcm1UcnVlQmxvY2stPnRyYXZlcnNlKHRoaXMpOwotCi0gICAgaWYg
KFRJbnRlcm1Ob2RlKiBpbnRlcm1GYWxzZUJsb2NrID0gaW50ZXJtU2VsZWN0aW9uLT5nZXRGYWxz
ZUJsb2NrKCkpCi0gICAgICAgIGludGVybUZhbHNlQmxvY2stPnRyYXZlcnNlKHRoaXMpOwotCi0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNp
dExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKiBpbnRlcm1Mb29wKQotewotICAgIGlmIChU
SW50ZXJtVHlwZWQqIGludGVybUNvbmRpdGlvbiA9IGludGVybUxvb3AtPmdldENvbmRpdGlvbigp
KSB7Ci0gICAgICAgIFROb2RlU2V0TWFpbnRhaW5lciBub2RlU2V0TWFpbnRhaW5lcih0aGlzKTsK
LQotICAgICAgICBpbnRlcm1Db25kaXRpb24tPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBpZiAo
VFBhcmVudE5vZGVTZXQqIGNvbmRpdGlvbk5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKSB7
Ci0gICAgICAgICAgICBUR3JhcGhMb29wKiBsb29wID0gbUdyYXBoLT5jcmVhdGVMb29wKGludGVy
bUxvb3ApOwotICAgICAgICAgICAgY29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoY29u
ZGl0aW9uTm9kZXMsIGxvb3ApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKFRJbnRlcm1O
b2RlKiBpbnRlcm1Cb2R5ID0gaW50ZXJtTG9vcC0+Z2V0Qm9keSgpKQotICAgICAgICBpbnRlcm1C
b2R5LT50cmF2ZXJzZSh0aGlzKTsKLQotICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybUV4cHJl
c3Npb24gPSBpbnRlcm1Mb29wLT5nZXRFeHByZXNzaW9uKCkpCi0gICAgICAgIGludGVybUV4cHJl
c3Npb24tPnRyYXZlcnNlKHRoaXMpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0KLXZvaWQg
VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OmNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2Rl
KFRQYXJlbnROb2RlU2V0KiBub2RlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRHcmFwaE5vZGUqIG5vZGUpIGNvbnN0Ci17
Ci0gICAgZm9yIChUUGFyZW50Tm9kZVNldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG5vZGVzLT5i
ZWdpbigpOyBpdGVyICE9IG5vZGVzLT5lbmQoKTsgKytpdGVyKQotICAgIHsKLSAgICAgICAgVEdy
YXBoUGFyZW50Tm9kZSogY3VycmVudE5vZGUgPSAqaXRlcjsKLSAgICAgICAgY3VycmVudE5vZGUt
PmFkZERlcGVuZGVudE5vZGUobm9kZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBl
bmRlbmN5R3JhcGhCdWlsZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1ZjIz
MmNiMjFlOTM2ZDkyN2E5NjcyNWQyZjBkMTZjOWRjNGUzOWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaAorKysgL2Rldi9udWxsCkBA
IC0xLDE4MSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9ERVBHUkFQ
SF9ERVBFTkRFTkNZX0dSQVBIX0JVSUxERVJfSAotI2RlZmluZSBDT01QSUxFUl9ERVBHUkFQSF9E
RVBFTkRFTkNZX0dSQVBIX0JVSUxERVJfSAotCi0jaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgv
RGVwZW5kZW5jeUdyYXBoLmgiCi0KLS8vCi0vLyBDcmVhdGVzIGEgZGVwZW5kZW5jeSBncmFwaCBv
ZiBzeW1ib2xzLCBmdW5jdGlvbiBjYWxscywgY29uZGl0aW9ucyBldGMuIGJ5IHRyYXZlcnNpbmcg
YQotLy8gaW50ZXJtZWRpYXRlIHRyZWUuCi0vLwotY2xhc3MgVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQg
YnVpbGQoVEludGVybU5vZGUqIG5vZGUsIFREZXBlbmRlbmN5R3JhcGgqIGdyYXBoKTsKLQotICAg
IHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7Ci0gICAgdmlydHVhbCBi
b29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7Ci0gICAgdmlydHVh
bCBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKik7Ci0g
ICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVn
YXRlKik7Ci0gICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxv
b3AqKTsKLQotcHJpdmF0ZToKLSAgICB0eXBlZGVmIHN0ZDo6c3RhY2s8VEdyYXBoU3ltYm9sKj4g
VFN5bWJvbFN0YWNrOwotICAgIHR5cGVkZWYgc3RkOjpzZXQ8VEdyYXBoUGFyZW50Tm9kZSo+IFRQ
YXJlbnROb2RlU2V0OwotCi0gICAgLy8KLSAgICAvLyBGb3IgY29sbGVjdGluZyB0aGUgZGVwZW5k
ZW50IG5vZGVzIG9mIGFzc2lnbm1lbnRzLCBjb25kaXRpb25zLCBldGMuCi0gICAgLy8gd2hpbGUg
dHJhdmVyc2luZyB0aGUgaW50ZXJtZWRpYXRlIHRyZWUuCi0gICAgLy8KLSAgICAvLyBUaGlzIGRh
dGEgc3RydWN0dXJlIGlzIHN0YWNrIG9mIHNldHMuIEVhY2ggc2V0IGNvbnRhaW5zIGRlcGVuZGVu
Y3kgZ3JhcGggcGFyZW50IG5vZGVzLgotICAgIC8vCi0gICAgY2xhc3MgVE5vZGVTZXRTdGFjayB7
Ci0gICAgcHVibGljOgotICAgICAgICBUTm9kZVNldFN0YWNrKCkge307Ci0gICAgICAgIH5UTm9k
ZVNldFN0YWNrKCkgeyBjbGVhcigpOyB9Ci0KLSAgICAgICAgLy8gVGhpcyBzaG91bGQgb25seSBi
ZSBjYWxsZWQgYWZ0ZXIgYSBwdXNoU2V0LgotICAgICAgICAvLyBSZXR1cm5zIE5VTEwgaWYgdGhl
IHRvcCBzZXQgaXMgZW1wdHkuCi0gICAgICAgIFRQYXJlbnROb2RlU2V0KiBnZXRUb3BTZXQoKSBj
b25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIW5vZGVTZXRzLmVtcHR5KCkpOwot
ICAgICAgICAgICAgVFBhcmVudE5vZGVTZXQqIHRvcFNldCA9IG5vZGVTZXRzLnRvcCgpOwotICAg
ICAgICAgICAgcmV0dXJuICF0b3BTZXQtPmVtcHR5KCkgPyB0b3BTZXQgOiBOVUxMOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdm9pZCBwdXNoU2V0KCkgeyBub2RlU2V0cy5wdXNoKG5ldyBUUGFyZW50
Tm9kZVNldCgpKTsgfQotICAgICAgICB2b2lkIHBvcFNldCgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEFTU0VSVCghbm9kZVNldHMuZW1wdHkoKSk7Ci0gICAgICAgICAgICBkZWxldGUgbm9kZVNl
dHMudG9wKCk7Ci0gICAgICAgICAgICBub2RlU2V0cy5wb3AoKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIFBvcHMgdGhlIHRvcCBzZXQgYW5kIGFkZHMgaXRzIGNvbnRlbnRzIHRvIHRoZSBuZXcg
dG9wIHNldC4KLSAgICAgICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYWZ0ZXIgYSBw
dXNoU2V0LgotICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBzZXQgYmVsb3cgdGhlIHRvcCBzZXQs
IHRoZSB0b3Agc2V0IGlzIGp1c3QgZGVsZXRlZC4KLSAgICAgICAgdm9pZCBwb3BTZXRJbnRvTmV4
dCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghbm9kZVNldHMuZW1wdHkoKSk7Ci0g
ICAgICAgICAgICBUUGFyZW50Tm9kZVNldCogb2xkVG9wU2V0ID0gbm9kZVNldHMudG9wKCk7Ci0g
ICAgICAgICAgICBub2RlU2V0cy5wb3AoKTsKLQotICAgICAgICAgICAgaWYgKCFub2RlU2V0cy5l
bXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgVFBhcmVudE5vZGVTZXQqIG5ld1RvcFNldCA9IG5v
ZGVTZXRzLnRvcCgpOwotICAgICAgICAgICAgICAgIG5ld1RvcFNldC0+aW5zZXJ0KG9sZFRvcFNl
dC0+YmVnaW4oKSwgb2xkVG9wU2V0LT5lbmQoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGRlbGV0ZSBvbGRUb3BTZXQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBEb2VzIG5vdGhp
bmcgaWYgdGhlcmUgaXMgbm8gdG9wIHNldC4KLSAgICAgICAgLy8gVGhpcyBjYW4gYmUgY2FsbGVk
IHdoZW4gdGhlcmUgaXMgbm8gdG9wIHNldCBpZiB3ZSBhcmUgdmlzaXRpbmcKLSAgICAgICAgLy8g
c3ltYm9scyB0aGF0IGFyZSBub3QgdW5kZXIgYW4gYXNzaWdubWVudCBvciBjb25kaXRpb24uCi0g
ICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gdHJhY2sgdGhvc2Ugc3ltYm9scy4KLSAgICAgICAg
dm9pZCBpbnNlcnRJbnRvVG9wU2V0KFRHcmFwaFBhcmVudE5vZGUqIG5vZGUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmIChub2RlU2V0cy5lbXB0eSgpKQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICAgICAgbm9kZVNldHMudG9wKCktPmluc2VydChub2RlKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgY2xlYXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICB3aGlsZSAo
IW5vZGVTZXRzLmVtcHR5KCkpCi0gICAgICAgICAgICAgICAgcG9wU2V0KCk7Ci0gICAgICAgIH0K
LQotICAgIHByaXZhdGU6Ci0gICAgICAgIHR5cGVkZWYgc3RkOjpzdGFjazxUUGFyZW50Tm9kZVNl
dCo+IFRQYXJlbnROb2RlU2V0U3RhY2s7Ci0KLSAgICAgICAgVFBhcmVudE5vZGVTZXRTdGFjayBu
b2RlU2V0czsKLSAgICB9OwotCi0gICAgLy8KLSAgICAvLyBBbiBpbnN0YW5jZSBvZiB0aGlzIGNs
YXNzIHB1c2hlcyBhIG5ldyBub2RlIHNldCB3aGVuIGluc3RhbnRpYXRlZC4KLSAgICAvLyBXaGVu
IHRoZSBpbnN0YW5jZSBnb2VzIG91dCBvZiBzY29wZSwgaXQgYW5kIHBvcHMgdGhlIG5vZGUgc2V0
LgotICAgIC8vCi0gICAgY2xhc3MgVE5vZGVTZXRNYWludGFpbmVyIHsKLSAgICBwdWJsaWM6Ci0g
ICAgICAgIFROb2RlU2V0TWFpbnRhaW5lcihURGVwZW5kZW5jeUdyYXBoQnVpbGRlciogZmFjdG9y
eSkKLSAgICAgICAgICAgIDogc2V0cyhmYWN0b3J5LT5tTm9kZVNldHMpIHsgc2V0cy5wdXNoU2V0
KCk7IH0KLSAgICAgICAgflROb2RlU2V0TWFpbnRhaW5lcigpIHsgc2V0cy5wb3BTZXQoKTsgfQot
ICAgIHByb3RlY3RlZDoKLSAgICAgICAgVE5vZGVTZXRTdGFjayYgc2V0czsKLSAgICB9OwotCi0g
ICAgLy8KLSAgICAvLyBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIHB1c2hlcyBhIG5ldyBub2Rl
IHNldCB3aGVuIGluc3RhbnRpYXRlZC4KLSAgICAvLyBXaGVuIHRoZSBpbnN0YW5jZSBnb2VzIG91
dCBvZiBzY29wZSwgaXQgYW5kIHBvcHMgdGhlIHRvcCBub2RlIHNldCBhbmQgYWRkcyBpdHMgY29u
dGVudHMgdG8KLSAgICAvLyB0aGUgbmV3IHRvcCBub2RlIHNldC4KLSAgICAvLwotICAgIGNsYXNz
IFROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFRO
b2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyKiBmYWN0
b3J5KQotICAgICAgICAgICAgOiBzZXRzKGZhY3RvcnktPm1Ob2RlU2V0cykgeyBzZXRzLnB1c2hT
ZXQoKTsgfQotICAgICAgICB+VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIoKSB7IHNldHMu
cG9wU2V0SW50b05leHQoKTsgfQotICAgIHByb3RlY3RlZDoKLSAgICAgICAgVE5vZGVTZXRTdGFj
ayYgc2V0czsKLSAgICB9OwotCi0gICAgLy8KLSAgICAvLyBBbiBpbnN0YW5jZSBvZiB0aGlzIGNs
YXNzIGtlZXBzIHRyYWNrIG9mIHRoZSBsZWZ0bW9zdCBzeW1ib2wgd2hpbGUgd2UncmUgZXhwbG9y
aW5nIGFuCi0gICAgLy8gYXNzaWdubWVudC4KLSAgICAvLyBJdCB3aWxsIHB1c2ggdGhlIHBsYWNl
aG9sZGVyIHN5bWJvbCBrTGVmdFN1YnRyZWUgd2hlbiBpbnN0YW50aWF0ZWQgdW5kZXIgYSBsZWZ0
IHN1YnRyZWUsCi0gICAgLy8gYW5kIGtSaWdodFN1YnRyZWUgdW5kZXIgYSByaWdodCBzdWJ0cmVl
LgotICAgIC8vIFdoZW4gaXQgZ29lcyBvdXQgb2Ygc2NvcGUsIGl0IHdpbGwgcG9wIHRoZSBsZWZ0
bW9zdCBzeW1ib2wgYXQgdGhlIHRvcCBvZiB0aGUgc2NvcGUuCi0gICAgLy8gRHVyaW5nIHRyYXZl
cnNhbCwgdGhlIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyIHdpbGwgcmVwbGFjZSBrTGVmdFN1YnRy
ZWUgd2l0aCBhIHJlYWwgc3ltYm9sLgotICAgIC8vIGtSaWdodFN1YnRyZWUgd2lsbCBuZXZlciBi
ZSByZXBsYWNlZCBieSBhIHJlYWwgc3ltYm9sIGJlY2F1c2Ugd2UgYXJlIHRyYWNraW5nIHRoZSBs
ZWZ0bW9zdAotICAgIC8vIHN5bWJvbC4KLSAgICAvLwotICAgIGNsYXNzIFRMZWZ0bW9zdFN5bWJv
bE1haW50YWluZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgVExlZnRtb3N0U3ltYm9sTWFpbnRh
aW5lcihURGVwZW5kZW5jeUdyYXBoQnVpbGRlciogZmFjdG9yeSwgVEdyYXBoU3ltYm9sJiBzdWJ0
cmVlKQotICAgICAgICAgICAgOiBsZWZ0bW9zdFN5bWJvbHMoZmFjdG9yeS0+bUxlZnRtb3N0U3lt
Ym9scykKLSAgICAgICAgewotICAgICAgICAgICAgbmVlZHNQbGFjZWhvbGRlclN5bWJvbCA9IGxl
ZnRtb3N0U3ltYm9scy5lbXB0eSgpIHx8IGxlZnRtb3N0U3ltYm9scy50b3AoKSAhPSAmc3VidHJl
ZTsKLSAgICAgICAgICAgIGlmIChuZWVkc1BsYWNlaG9sZGVyU3ltYm9sKQotICAgICAgICAgICAg
ICAgIGxlZnRtb3N0U3ltYm9scy5wdXNoKCZzdWJ0cmVlKTsKLSAgICAgICAgfQotCi0gICAgICAg
IH5UTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KG5lZWRzUGxhY2Vob2xkZXJTeW1ib2wpCi0gICAgICAgICAgICAgICAgbGVmdG1vc3RTeW1ib2xz
LnBvcCgpOwotICAgICAgICB9Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIFRTeW1ib2xTdGFj
ayYgbGVmdG1vc3RTeW1ib2xzOwotICAgICAgICBib29sIG5lZWRzUGxhY2Vob2xkZXJTeW1ib2w7
Ci0gICAgfTsKLQotICAgIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyKFREZXBlbmRlbmN5R3JhcGgq
IGdyYXBoKQotICAgICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIGZhbHNlKQot
ICAgICAgICAsIG1MZWZ0U3VidHJlZShOVUxMKQotICAgICAgICAsIG1SaWdodFN1YnRyZWUoTlVM
TCkKLSAgICAgICAgLCBtR3JhcGgoZ3JhcGgpIHt9Ci0gICAgdm9pZCBidWlsZChUSW50ZXJtTm9k
ZSogaW50ZXJtTm9kZSkgeyBpbnRlcm1Ob2RlLT50cmF2ZXJzZSh0aGlzKTsgfQotCi0gICAgdm9p
ZCBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShUUGFyZW50Tm9kZVNldCogbm9kZXMs
IFRHcmFwaE5vZGUqIG5vZGUpIGNvbnN0OwotCi0gICAgdm9pZCB2aXNpdEFzc2lnbm1lbnQoVElu
dGVybUJpbmFyeSopOwotICAgIHZvaWQgdmlzaXRMb2dpY2FsT3AoVEludGVybUJpbmFyeSopOwot
ICAgIHZvaWQgdmlzaXRCaW5hcnlDaGlsZHJlbihUSW50ZXJtQmluYXJ5Kik7Ci0gICAgdm9pZCB2
aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbihUSW50ZXJtQWdncmVnYXRlKik7Ci0gICAgdm9pZCB2aXNp
dEZ1bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpOwotICAg
IHZvaWQgdmlzaXRBZ2dyZWdhdGVDaGlsZHJlbihUSW50ZXJtQWdncmVnYXRlKik7Ci0KLSAgICBU
R3JhcGhTeW1ib2wgbUxlZnRTdWJ0cmVlOwotICAgIFRHcmFwaFN5bWJvbCBtUmlnaHRTdWJ0cmVl
OwotCi0gICAgVERlcGVuZGVuY3lHcmFwaCogbUdyYXBoOwotICAgIFROb2RlU2V0U3RhY2sgbU5v
ZGVTZXRzOwotICAgIFRTeW1ib2xTdGFjayBtTGVmdG1vc3RTeW1ib2xzOwotfTsKLQotI2VuZGlm
ICAvLyBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0JVSUxERVJfSApkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVu
ZGVuY3lHcmFwaE91dHB1dC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNmZjNDg5ZTdiNmYzMTQ2Y2M2YWRiOTMzOGMzMTlhZmE0MTNhNjQyZi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVk
ZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCi0KLXZvaWQgVERl
cGVuZGVuY3lHcmFwaE91dHB1dDo6b3V0cHV0SW5kZW50YXRpb24oKQotewotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgZ2V0RGVwdGgoKTsgKytpKQotICAgICAgICBtU2luayA8PCAiICAiOwotfQot
Ci12b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1l
bnQqIHBhcmFtZXRlcikKLXsKLSAgICBvdXRwdXRJbmRlbnRhdGlvbigpOwotICAgIG1TaW5rIDw8
ICJhcmd1bWVudCAiIDw8IHBhcmFtZXRlci0+Z2V0QXJndW1lbnROdW1iZXIoKSA8PCAiIG9mIGNh
bGwgdG8gIgotICAgICAgICAgIDw8IHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkt
PmdldE5hbWUoKSA8PCAiXG4iOwotfQotCi12b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZp
c2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxsKQotewotICAg
IG91dHB1dEluZGVudGF0aW9uKCk7Ci0gICAgbVNpbmsgPDwgImZ1bmN0aW9uIGNhbGwgIiA8PCAg
ZnVuY3Rpb25DYWxsLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKS0+Z2V0TmFtZSgpIDw8ICJcbiI7
Ci19Ci0KLXZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRTeW1ib2woVEdyYXBoU3lt
Ym9sKiBzeW1ib2wpCi17Ci0gICAgb3V0cHV0SW5kZW50YXRpb24oKTsKLSAgICBtU2luayA8PCBz
eW1ib2wtPmdldEludGVybVN5bWJvbCgpLT5nZXRTeW1ib2woKSA8PCAiIChzeW1ib2wgaWQ6ICIK
LSAgICAgICAgICA8PCBzeW1ib2wtPmdldEludGVybVN5bWJvbCgpLT5nZXRJZCgpIDw8ICIpXG4i
OwotfQotCi12b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0U2VsZWN0aW9uKFRHcmFw
aFNlbGVjdGlvbiogc2VsZWN0aW9uKQotewotICAgIG91dHB1dEluZGVudGF0aW9uKCk7Ci0gICAg
bVNpbmsgPDwgInNlbGVjdGlvblxuIjsKLX0KLQotdm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0
Ojp2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCkKLXsKLSAgICBvdXRwdXRJbmRlbnRhdGlvbigp
OwotICAgIG1TaW5rIDw8ICJsb29wIGNvbmRpdGlvblxuIjsKLX0KLQotdm9pZCBURGVwZW5kZW5j
eUdyYXBoT3V0cHV0Ojp2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCkK
LXsKLSAgICBvdXRwdXRJbmRlbnRhdGlvbigpOwotICAgIG1TaW5rIDw8ICJsb2dpY2FsICIgPDwg
bG9naWNhbE9wLT5nZXRPcFN0cmluZygpIDw8ICJcbiI7Ci19Ci0KLXZvaWQgVERlcGVuZGVuY3lH
cmFwaE91dHB1dDo6b3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhURGVwZW5kZW5jeUdyYXBoJiBncmFw
aCkKLXsKLSAgICBtU2luayA8PCAiXG4iOwotCi0gICAgZm9yIChUR3JhcGhOb2RlVmVjdG9yOjpj
b25zdF9pdGVyYXRvciBpdGVyID0gZ3JhcGguYmVnaW4oKTsgaXRlciAhPSBncmFwaC5lbmQoKTsg
KytpdGVyKQotICAgIHsKLSAgICAgICAgVEdyYXBoTm9kZSogc3ltYm9sID0gKml0ZXI7Ci0gICAg
ICAgIG1TaW5rIDw8ICItLS0gRGVwZW5kZW5jeSBncmFwaCBzcGFubmluZyB0cmVlIC0tLVxuIjsK
LSAgICAgICAgY2xlYXJWaXNpdGVkKCk7Ci0gICAgICAgIHN5bWJvbC0+dHJhdmVyc2UodGhpcyk7
Ci0gICAgICAgIG1TaW5rIDw8ICJcbiI7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1
dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVu
ZGVuY3lHcmFwaE91dHB1dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTQ0N2Rh
OTg3ZDJlMmVkYWVkODM5YjYxMmQ3M2JmYjlmODY1MmZhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaAorKysgL2Rldi9udWxsCkBAIC0x
LDMwICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX0RFUEdSQVBIX0RF
UEVOREVOQ1lfR1JBUEhfT1VUUFVUX0gKLSNkZWZpbmUgQ09NUElMRVJfREVQR1JBUEhfREVQRU5E
RU5DWV9HUkFQSF9PVVRQVVRfSAotCi0jaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5k
ZW5jeUdyYXBoLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKLQotY2xhc3MgVERl
cGVuZGVuY3lHcmFwaE91dHB1dCA6IHB1YmxpYyBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyIHsK
LXB1YmxpYzoKLSAgICBURGVwZW5kZW5jeUdyYXBoT3V0cHV0KFRJbmZvU2lua0Jhc2UmIHNpbmsp
IDogbVNpbmsoc2luaykge30KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEdyYXBoU3lt
Ym9sKiBzeW1ib2wpOwotICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFyZ3VtZW50KFRHcmFwaEFyZ3Vt
ZW50KiBwYXJhbWV0ZXIpOwotICAgIHZpcnR1YWwgdm9pZCB2aXNpdEZ1bmN0aW9uQ2FsbChUR3Jh
cGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCk7Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0U2Vs
ZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKTsKLSAgICB2aXJ0dWFsIHZvaWQgdmlz
aXRMb29wKFRHcmFwaExvb3AqIGxvb3ApOwotICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvZ2ljYWxP
cChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCk7Ci0KLSAgICB2b2lkIG91dHB1dEFsbFNwYW5u
aW5nVHJlZXMoVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpOwotcHJpdmF0ZToKLSAgICB2b2lkIG91
dHB1dEluZGVudGF0aW9uKCk7Ci0KLSAgICBUSW5mb1NpbmtCYXNlJiBtU2luazsKLX07Ci0KLSNl
bmRpZiAgLy8gQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9PVVRQVVRfSApkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0Rl
cGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGIxNTg1NzVjZWMzNTFjYmM2ODk4NTk4MjkyYzQ4ODkyYTgwMGZm
ODUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRy
YXZlcnNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8vCi0vLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwot
Ci0jaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCi0KLS8vIFRo
ZXNlIG1ldGhvZHMgZG8gYSBicmVhZHRoLWZpcnN0IHRyYXZlcnNhbCB0aHJvdWdoIHRoZSBncmFw
aCBhbmQgbWFyayB2aXNpdGVkIG5vZGVzLgotCi12b2lkIFRHcmFwaE5vZGU6OnRyYXZlcnNlKFRE
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQotewotICAgIGdyYXBoVHJh
dmVyc2VyLT5tYXJrVmlzaXRlZCh0aGlzKTsKLX0KLQotdm9pZCBUR3JhcGhQYXJlbnROb2RlOjp0
cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKLXsKLSAg
ICBUR3JhcGhOb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Ci0KLSAgICBncmFwaFRyYXZl
cnNlci0+aW5jcmVtZW50RGVwdGgoKTsKLQotICAgIC8vIFZpc2l0IHRoZSBwYXJlbnQgbm9kZSdz
IGNoaWxkcmVuLgotICAgIGZvciAoVEdyYXBoTm9kZVNldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9
IG1EZXBlbmRlbnROb2Rlcy5iZWdpbigpOwotICAgICAgICAgaXRlciAhPSBtRGVwZW5kZW50Tm9k
ZXMuZW5kKCk7Ci0gICAgICAgICArK2l0ZXIpCi0gICAgewotICAgICAgICBUR3JhcGhOb2RlKiBu
b2RlID0gKml0ZXI7Ci0gICAgICAgIGlmICghZ3JhcGhUcmF2ZXJzZXItPmlzVmlzaXRlZChub2Rl
KSkKLSAgICAgICAgICAgIG5vZGUtPnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKLSAgICB9Ci0K
LSAgICBncmFwaFRyYXZlcnNlci0+ZGVjcmVtZW50RGVwdGgoKTsKLX0KLQotdm9pZCBUR3JhcGhB
cmd1bWVudDo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJz
ZXIpCi17Ci0gICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0QXJndW1lbnQodGhpcyk7Ci0gICAgVEdy
YXBoUGFyZW50Tm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOwotfQotCi12b2lkIFRHcmFw
aEZ1bmN0aW9uQ2FsbDo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhU
cmF2ZXJzZXIpCi17Ci0gICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0RnVuY3Rpb25DYWxsKHRoaXMp
OwotICAgIFRHcmFwaFBhcmVudE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKLX0KLQot
dm9pZCBUR3JhcGhTeW1ib2w6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdy
YXBoVHJhdmVyc2VyKQotewotICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdFN5bWJvbCh0aGlzKTsK
LSAgICBUR3JhcGhQYXJlbnROb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Ci19Ci0KLXZv
aWQgVEdyYXBoU2VsZWN0aW9uOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBn
cmFwaFRyYXZlcnNlcikKLXsKLSAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRTZWxlY3Rpb24odGhp
cyk7Ci0gICAgVEdyYXBoTm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOwotfQotCi12b2lk
IFRHcmFwaExvb3A6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJh
dmVyc2VyKQotewotICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdExvb3AodGhpcyk7Ci0gICAgVEdy
YXBoTm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOwotfQotCi12b2lkIFRHcmFwaExvZ2lj
YWxPcDo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIp
Ci17Ci0gICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0TG9naWNhbE9wKHRoaXMpOwotICAgIFRHcmFw
aE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nZW5lcmF0ZV9wYXJzZXIuc2ggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2VuZXJhdGVfcGFyc2VyLnNoCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDc1NQppbmRleCBlNGQ4OGIyZTg0Y2Q0YTZlYmNiYTdkZDY3MmMxN2RjYWY3
ZGRhNjQzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nZW5lcmF0ZV9wYXJzZXIuc2gKKysr
IC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0jIS9iaW4vYmFzaAotIyBDb3B5cmlnaHQgKGMp
IDIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMg
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jIEdlbmVyYXRl
cyBHTFNMIEVTIHBhcnNlciAtIGdsc2xhbmdfbGV4LmNwcCwgZ2xzbGFuZ190YWIuaCwgYW5kIGds
c2xhbmdfdGFiLmNwcAotCi1ydW5fZmxleCgpCi17Ci1pbnB1dF9maWxlPSRzY3JpcHRfZGlyLyQx
LmwKLW91dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIvJDFfbGV4LmNwcAotZmxleCAtLW5vbGluZSAt
LW5vdW5pc3RkIC0tb3V0ZmlsZT0kb3V0cHV0X3NvdXJjZSAkaW5wdXRfZmlsZQotfQotCi1ydW5f
Ymlzb24oKQotewotaW5wdXRfZmlsZT0kc2NyaXB0X2Rpci8kMS55Ci1vdXRwdXRfaGVhZGVyPSRz
Y3JpcHRfZGlyLyQxX3RhYi5oCi1vdXRwdXRfc291cmNlPSRzY3JpcHRfZGlyLyQxX3RhYi5jcHAK
LWJpc29uIC0tbm8tbGluZXMgLS1za2VsZXRvbj15YWNjLmMgLS1kZWZpbmVzPSRvdXRwdXRfaGVh
ZGVyIC0tb3V0cHV0PSRvdXRwdXRfc291cmNlICRpbnB1dF9maWxlCi19Ci0KLXNjcmlwdF9kaXI9
JChkaXJuYW1lICQwKQotCi0jIEdlbmVyYXRlIFBhcnNlcgotcnVuX2ZsZXggZ2xzbGFuZwotcnVu
X2Jpc29uIGdsc2xhbmcKLXBhdGNoIC0tc2lsZW50IC0tZm9yd2FyZCA8IDY0Yml0LWxleGVyLXNh
ZmV0eS5wYXRjaApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL2dsc2xhbmcuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNs
YW5nLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyMjExOTkwOTNjMjFhYjk3Zjgy
MWE2ZmI2YjE4NDgyMTZlMjI4NTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcu
aAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi1zdHJ1Y3Qg
VFBhcnNlQ29udGV4dDsKLWV4dGVybiBpbnQgZ2xzbGFuZ19pbml0aWFsaXplKFRQYXJzZUNvbnRl
eHQqIGNvbnRleHQpOwotZXh0ZXJuIGludCBnbHNsYW5nX2ZpbmFsaXplKFRQYXJzZUNvbnRleHQq
IGNvbnRleHQpOwotCi1leHRlcm4gaW50IGdsc2xhbmdfc2NhbihzaXplX3QgY291bnQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGludCBsZW5ndGhbXSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOwotZXh0ZXJuIGludCBnbHNsYW5nX3BhcnNlKFRQ
YXJzZUNvbnRleHQqIGNvbnRleHQpOwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5sIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL2dsc2xhbmcubApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQzNTBk
NGMyNzM1MjE4ZDlhMGIwNDk2YjViZmQwNzk5OTI1MzZmYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvZ2xzbGFuZy5sCisrKyAvZGV2L251bGwKQEAgLTEsMzY1ICswLDAgQEAKLS8qCi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwotCi1UaGlzIGZpbGUgY29udGFpbnMgdGhlIExleCBzcGVjaWZpY2F0aW9u
IGZvciBHTFNMIEVTLgotQmFzZWQgb24gQU5TSSBDIGdyYW1tYXIsIExleCBzcGVjaWZpY2F0aW9u
OgotaHR0cDovL3d3dy5seXNhdG9yLmxpdS5zZS9jL0FOU0ktQy1ncmFtbWFyLWwuaHRtbAotCi1J
RiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJz
ZXIuc2gsCi1XSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xhbmdfbGV4LmNw
cCkuCi0qLwotCi0ldG9wewotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRoaXMgZmlsZSBpcyBhdXRvLWdl
bmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQotCi0vLyBJZ25vcmUg
ZXJyb3JzIGluIGF1dG8tZ2VuZXJhdGVkIGNvZGUuCi0jaWYgZGVmaW5lZChfX0dOVUNfXykKLSNw
cmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtZnVuY3Rpb24iCi0jcHJhZ21h
IEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLXZhcmlhYmxlIgotI3ByYWdtYSBHQ0Mg
ZGlhZ25vc3RpYyBpZ25vcmVkICItV3N3aXRjaC1lbnVtIgotI2VsaWYgZGVmaW5lZChfTVNDX1ZF
UikKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MDY1KQotI3ByYWdtYSB3YXJuaW5nKGRpc2Fi
bGU6IDQxODkpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUwNSkKLSNwcmFnbWEgd2Fybmlu
ZyhkaXNhYmxlOiA0NzAxKQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fY2xhbmdfXykKLSNwcmFn
bWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3Jl
ZCAiLVd1bmtub3duLXByYWdtYXMiCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAi
LVdkZXByZWNhdGVkLXJlZ2lzdGVyIgotI2VuZGlmCi19Ci0KLSV7Ci0jaW5jbHVkZSAiY29tcGls
ZXIvZ2xzbGFuZy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlQ29udGV4dC5oIgotI2luY2x1
ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbi5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3V0
aWwuaCIKLSNpbmNsdWRlICJnbHNsYW5nX3RhYi5oIgotCi0vKiB3aW5kb3dzIG9ubHkgcHJhZ21h
ICovCi0jaWZkZWYgX01TQ19WRVIKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDEwMikKLSNl
bmRpZgotCi0jZGVmaW5lIFlZX1VTRVJfQUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIHl5bGxvYy0+Zmlyc3RfZmlsZSA9IHl5bGxvYy0+bGFzdF9maWxlID0geXlj
b2x1bW47IFwKLSAgICB5eWxsb2MtPmZpcnN0X2xpbmUgPSB5eWxsb2MtPmxhc3RfbGluZSA9IHl5
bGluZW5vOwotCi0jZGVmaW5lIFlZX0lOUFVUKGJ1ZiwgcmVzdWx0LCBtYXhfc2l6ZSkgXAotICAg
IHJlc3VsdCA9IHN0cmluZ19pbnB1dChidWYsIG1heF9zaXplLCB5eXNjYW5uZXIpOwotCi1zdGF0
aWMgeXlfc2l6ZV90IHN0cmluZ19pbnB1dChjaGFyKiBidWYsIHl5X3NpemVfdCBtYXhfc2l6ZSwg
eXlzY2FuX3QgeXlzY2FubmVyKTsKLXN0YXRpYyBpbnQgY2hlY2tfdHlwZSh5eXNjYW5fdCB5eXNj
YW5uZXIpOwotc3RhdGljIGludCByZXNlcnZlZF93b3JkKHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci1z
dGF0aWMgaW50IGludF9jb25zdGFudCh5eXNjYW5fdCB5eXNjYW5uZXIpOwotc3RhdGljIGludCBm
bG9hdF9jb25zdGFudCh5eXNjYW5fdCB5eXNjYW5uZXIpOwotJX0KLQotJW9wdGlvbiBub3l5d3Jh
cCBub3VucHV0IG5ldmVyLWludGVyYWN0aXZlCi0lb3B0aW9uIHl5bGluZW5vIHJlZW50cmFudCBi
aXNvbi1icmlkZ2UgYmlzb24tbG9jYXRpb25zCi0lb3B0aW9uIGV4dHJhLXR5cGU9IlRQYXJzZUNv
bnRleHQqIgotCi1EICAgICAgICAgICBbMC05XQotTCAgICAgICAgICAgW2EtekEtWl9dCi1IICAg
ICAgICAgICBbYS1mQS1GMC05XQotRSAgICAgICAgICAgW0VlXVsrLV0/e0R9KwotTyAgICAgICAg
ICAgWzAtN10KLQotJSUKLQotImludmFyaWFudCIgICAgeyByZXR1cm4gSU5WQVJJQU5UOyB9Ci0i
aGlnaHAiICAgICAgICB7IHJldHVybiBISUdIX1BSRUNJU0lPTjsgfQotIm1lZGl1bXAiICAgICAg
eyByZXR1cm4gTUVESVVNX1BSRUNJU0lPTjsgfQotImxvd3AiICAgICAgICAgeyByZXR1cm4gTE9X
X1BSRUNJU0lPTjsgfQotInByZWNpc2lvbiIgICAgeyByZXR1cm4gUFJFQ0lTSU9OOyB9Ci0KLSJh
dHRyaWJ1dGUiICAgIHsgcmV0dXJuIEFUVFJJQlVURTsgfQotImNvbnN0IiAgICAgICAgeyByZXR1
cm4gQ09OU1RfUVVBTDsgfQotInVuaWZvcm0iICAgICAgeyByZXR1cm4gVU5JRk9STTsgfQotInZh
cnlpbmciICAgICAgeyByZXR1cm4gVkFSWUlORzsgfQotCi0iYnJlYWsiICAgICAgICB7IHJldHVy
biBCUkVBSzsgfQotImNvbnRpbnVlIiAgICAgeyByZXR1cm4gQ09OVElOVUU7IH0KLSJkbyIgICAg
ICAgICAgIHsgcmV0dXJuIERPOyB9Ci0iZm9yIiAgICAgICAgICB7IHJldHVybiBGT1I7IH0KLSJ3
aGlsZSIgICAgICAgIHsgcmV0dXJuIFdISUxFOyB9Ci0KLSJpZiIgICAgICAgICAgIHsgcmV0dXJu
IElGOyB9Ci0iZWxzZSIgICAgICAgICB7IHJldHVybiBFTFNFOyB9Ci0KLSJpbiIgICAgICAgICAg
IHsgcmV0dXJuIElOX1FVQUw7IH0KLSJvdXQiICAgICAgICAgIHsgcmV0dXJuIE9VVF9RVUFMOyB9
Ci0iaW5vdXQiICAgICAgICB7IHJldHVybiBJTk9VVF9RVUFMOyB9Ci0KLSJmbG9hdCIgICAgICAg
IHsgcmV0dXJuIEZMT0FUX1RZUEU7IH0KLSJpbnQiICAgICAgICAgIHsgcmV0dXJuIElOVF9UWVBF
OyB9Ci0idm9pZCIgICAgICAgICB7IHJldHVybiBWT0lEX1RZUEU7IH0KLSJib29sIiAgICAgICAg
IHsgcmV0dXJuIEJPT0xfVFlQRTsgfQotInRydWUiICAgICAgICAgeyB5eWx2YWwtPmxleC5iID0g
dHJ1ZTsgIHJldHVybiBCT09MQ09OU1RBTlQ7IH0KLSJmYWxzZSIgICAgICAgIHsgeXlsdmFsLT5s
ZXguYiA9IGZhbHNlOyByZXR1cm4gQk9PTENPTlNUQU5UOyB9Ci0KLSJkaXNjYXJkIiAgICAgIHsg
cmV0dXJuIERJU0NBUkQ7IH0KLSJyZXR1cm4iICAgICAgIHsgcmV0dXJuIFJFVFVSTjsgfQotCi0i
bWF0MiIgICAgICAgICB7IHJldHVybiBNQVRSSVgyOyB9Ci0ibWF0MyIgICAgICAgICB7IHJldHVy
biBNQVRSSVgzOyB9Ci0ibWF0NCIgICAgICAgICB7IHJldHVybiBNQVRSSVg0OyB9Ci0KLSJ2ZWMy
IiAgICAgICAgIHsgcmV0dXJuIFZFQzI7IH0KLSJ2ZWMzIiAgICAgICAgIHsgcmV0dXJuIFZFQzM7
IH0KLSJ2ZWM0IiAgICAgICAgIHsgcmV0dXJuIFZFQzQ7IH0KLSJpdmVjMiIgICAgICAgIHsgcmV0
dXJuIElWRUMyOyB9Ci0iaXZlYzMiICAgICAgICB7IHJldHVybiBJVkVDMzsgfQotIml2ZWM0IiAg
ICAgICAgeyByZXR1cm4gSVZFQzQ7IH0KLSJidmVjMiIgICAgICAgIHsgcmV0dXJuIEJWRUMyOyB9
Ci0iYnZlYzMiICAgICAgICB7IHJldHVybiBCVkVDMzsgfQotImJ2ZWM0IiAgICAgICAgeyByZXR1
cm4gQlZFQzQ7IH0KLQotInNhbXBsZXIyRCIgICAgICAgICAgeyByZXR1cm4gU0FNUExFUjJEOyB9
Ci0ic2FtcGxlckN1YmUiICAgICAgICB7IHJldHVybiBTQU1QTEVSQ1VCRTsgfQotInNhbXBsZXJF
eHRlcm5hbE9FUyIgeyByZXR1cm4gU0FNUExFUl9FWFRFUk5BTF9PRVM7IH0KLSJzYW1wbGVyMkRS
ZWN0IiAgICAgIHsgcmV0dXJuIFNBTVBMRVIyRFJFQ1Q7IH0KLQotInN0cnVjdCIgICAgICAgeyBy
ZXR1cm4gU1RSVUNUOyB9Ci0KLSJhc20iICAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotCi0iY2xhc3MiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KLSJ1bmlvbiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQotImVudW0iICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0idHlwZWRlZiIgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
LSJ0ZW1wbGF0ZSIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInRo
aXMiICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0icGFja2Vk
IiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQotImdvdG8iICAg
ICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0ic3dpdGNoIiAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJkZWZhdWx0IiAgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCi0iaW5saW5lIiAgICAgICB7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJub2lubGluZSIgICAgIHsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInZvbGF0aWxlIiAgICAgeyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0icHVibGljIiAgICAgICB7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJzdGF0aWMiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQotImV4dGVybiIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9Ci0iZXh0ZXJuYWwiICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KLSJpbnRlcmZhY2UiICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQotImZsYXQiICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0KLSJsb25nIiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQot
InNob3J0IiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZG91
YmxlIiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJoYWxmIiAg
ICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImZpeGVkIiAgICAg
ICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0idW5zaWduZWQiICAgICB7
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJzdXBlcnAiICAgICAgIHsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCi0iaW5wdXQiICAgICAgICB7IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJvdXRwdXQiICAgICAgIHsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCi0iaHZlYzIiICAgICAgICB7IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJodmVjMyIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQotImh2ZWM0IiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9Ci0iZHZlYzIiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KLSJkdmVjMyIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQotImR2ZWM0IiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0iZnZlYzIiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
LSJmdmVjMyIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImZ2
ZWM0IiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0KLSJzYW1w
bGVyMUQiICAgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJz
YW1wbGVyM0QiICAgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
LSJzYW1wbGVyMURTaGFkb3ciICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KLSJzYW1wbGVyMkRTaGFkb3ciICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KLSJzYW1wbGVyM0RSZWN0IiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KLSJzYW1wbGVyMkRSZWN0U2hhZG93IiB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KLQotInNpemVvZiIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9Ci0iY2FzdCIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KLQotIm5hbWVzcGFjZSIgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0idXNpbmciICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
LQote0x9KHtMfXx7RH0pKiAgICAgICB7Ci0gICB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29s
VFN0cmluZyh5eXRleHQpOyAKLSAgIHJldHVybiBjaGVja190eXBlKHl5c2Nhbm5lcik7Ci19Ci0K
LTBbeFhde0h9KyAgICAgICAgIHsgcmV0dXJuIGludF9jb25zdGFudCh5eXNjYW5uZXIpOyB9Ci0w
e099KyAgICAgICAgICAgICB7IHJldHVybiBpbnRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQote0R9
KyAgICAgICAgICAgICAgeyByZXR1cm4gaW50X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KLQote0R9
K3tFfSAgICAgICAgICAgeyByZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQote0R9
KyIuIntEfSooe0V9KT8geyByZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQotIi4i
e0R9Kyh7RX0pPyAgICAgeyByZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQotCi0i
Kz0iICAgICAgICAgICAgeyByZXR1cm4gQUREX0FTU0lHTjsgfQotIi09IiAgICAgICAgICAgIHsg
cmV0dXJuIFNVQl9BU1NJR047IH0KLSIqPSIgICAgICAgICAgICB7IHJldHVybiBNVUxfQVNTSUdO
OyB9Ci0iLz0iICAgICAgICAgICAgeyByZXR1cm4gRElWX0FTU0lHTjsgfQotIiU9IiAgICAgICAg
ICAgIHsgcmV0dXJuIE1PRF9BU1NJR047IH0KLSI8PD0iICAgICAgICAgICB7IHJldHVybiBMRUZU
X0FTU0lHTjsgfQotIj4+PSIgICAgICAgICAgIHsgcmV0dXJuIFJJR0hUX0FTU0lHTjsgfQotIiY9
IiAgICAgICAgICAgIHsgcmV0dXJuIEFORF9BU1NJR047IH0KLSJePSIgICAgICAgICAgICB7IHJl
dHVybiBYT1JfQVNTSUdOOyB9Ci0ifD0iICAgICAgICAgICAgeyByZXR1cm4gT1JfQVNTSUdOOyB9
Ci0KLSIrKyIgICAgICAgICAgICB7IHJldHVybiBJTkNfT1A7IH0KLSItLSIgICAgICAgICAgICB7
IHJldHVybiBERUNfT1A7IH0KLSImJiIgICAgICAgICAgICB7IHJldHVybiBBTkRfT1A7IH0KLSJ8
fCIgICAgICAgICAgICB7IHJldHVybiBPUl9PUDsgfQotIl5eIiAgICAgICAgICAgIHsgcmV0dXJu
IFhPUl9PUDsgfQotIjw9IiAgICAgICAgICAgIHsgcmV0dXJuIExFX09QOyB9Ci0iPj0iICAgICAg
ICAgICAgeyByZXR1cm4gR0VfT1A7IH0KLSI9PSIgICAgICAgICAgICB7IHJldHVybiBFUV9PUDsg
fQotIiE9IiAgICAgICAgICAgIHsgcmV0dXJuIE5FX09QOyB9Ci0iPDwiICAgICAgICAgICAgeyBy
ZXR1cm4gTEVGVF9PUDsgfQotIj4+IiAgICAgICAgICAgIHsgcmV0dXJuIFJJR0hUX09QOyB9Ci0i
OyIgICAgICAgICAgICAgeyByZXR1cm4gU0VNSUNPTE9OOyB9Ci0oInsifCI8JSIpICAgICAgeyBy
ZXR1cm4gTEVGVF9CUkFDRTsgfQotKCJ9InwiJT4iKSAgICAgIHsgcmV0dXJuIFJJR0hUX0JSQUNF
OyB9Ci0iLCIgICAgICAgICB7IHJldHVybiBDT01NQTsgfQotIjoiICAgICAgICAgeyByZXR1cm4g
Q09MT047IH0KLSI9IiAgICAgICAgIHsgcmV0dXJuIEVRVUFMOyB9Ci0iKCIgICAgICAgICB7IHJl
dHVybiBMRUZUX1BBUkVOOyB9Ci0iKSIgICAgICAgICB7IHJldHVybiBSSUdIVF9QQVJFTjsgfQot
KCJbInwiPDoiKSAgeyByZXR1cm4gTEVGVF9CUkFDS0VUOyB9Ci0oIl0ifCI6PiIpICB7IHJldHVy
biBSSUdIVF9CUkFDS0VUOyB9Ci0iLiIgICAgICAgICB7IHJldHVybiBET1Q7IH0KLSIhIiAgICAg
ICAgIHsgcmV0dXJuIEJBTkc7IH0KLSItIiAgICAgICAgIHsgcmV0dXJuIERBU0g7IH0KLSJ+IiAg
ICAgICAgIHsgcmV0dXJuIFRJTERFOyB9Ci0iKyIgICAgICAgICB7IHJldHVybiBQTFVTOyB9Ci0i
KiIgICAgICAgICB7IHJldHVybiBTVEFSOyB9Ci0iLyIgICAgICAgICB7IHJldHVybiBTTEFTSDsg
fQotIiUiICAgICAgICAgeyByZXR1cm4gUEVSQ0VOVDsgfQotIjwiICAgICAgICAgeyByZXR1cm4g
TEVGVF9BTkdMRTsgfQotIj4iICAgICAgICAgeyByZXR1cm4gUklHSFRfQU5HTEU7IH0KLSJ8IiAg
ICAgICAgIHsgcmV0dXJuIFZFUlRJQ0FMX0JBUjsgfQotIl4iICAgICAgICAgeyByZXR1cm4gQ0FS
RVQ7IH0KLSImIiAgICAgICAgIHsgcmV0dXJuIEFNUEVSU0FORDsgfQotIj8iICAgICAgICAgeyBy
ZXR1cm4gUVVFU1RJT047IH0KLQotWyBcdFx2XG5cZlxyXSB7IH0KLTw8RU9GPj4gICAgeyB5eXRl
cm1pbmF0ZSgpOyB9Ci0uICAgICAgICAgIHsgYXNzZXJ0KGZhbHNlKTsgcmV0dXJuIDA7IH0KLQot
JSUKLQotI2lmIGRlZmluZWQoX19jbGFuZ19fKQotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBv
cAotI2VuZGlmCi0KLXl5X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCB5eV9zaXplX3Qg
bWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikgewotICAgIHBwOjpUb2tlbiB0b2tlbjsKLSAg
ICB5eWdldF9leHRyYSh5eXNjYW5uZXIpLT5wcmVwcm9jZXNzb3IubGV4KCZ0b2tlbik7Ci0gICAg
eXlfc2l6ZV90IGxlbiA9IHRva2VuLnR5cGUgPT0gcHA6OlRva2VuOjpMQVNUID8gMCA6IHRva2Vu
LnRleHQuc2l6ZSgpOwotICAgIGlmIChsZW4gPCBtYXhfc2l6ZSkKLSAgICAgICAgbWVtY3B5KGJ1
ZiwgdG9rZW4udGV4dC5jX3N0cigpLCBsZW4pOwotICAgIHl5c2V0X2NvbHVtbih0b2tlbi5sb2Nh
dGlvbi5maWxlLCB5eXNjYW5uZXIpOwotICAgIHl5c2V0X2xpbmVubyh0b2tlbi5sb2NhdGlvbi5s
aW5lLCB5eXNjYW5uZXIpOwotCi0gICAgaWYgKGxlbiA+PSBtYXhfc2l6ZSkKLSAgICAgICAgWVlf
RkFUQUxfRVJST1IoIklucHV0IGJ1ZmZlciBvdmVyZmxvdyIpOwotICAgIGVsc2UgaWYgKGxlbiA+
IDApCi0gICAgICAgIGJ1ZltsZW4rK10gPSAnICc7Ci0gICAgcmV0dXJuIGxlbjsKLX0KLQotaW50
IGNoZWNrX3R5cGUoeXlzY2FuX3QgeXlzY2FubmVyKSB7Ci0gICAgc3RydWN0IHl5Z3V0c190KiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190KikgeXlzY2FubmVyOwotICAgIAotICAgIGludCB0b2tlbiA9
IElERU5USUZJRVI7Ci0gICAgVFN5bWJvbCogc3ltYm9sID0geXlleHRyYS0+c3ltYm9sVGFibGUu
ZmluZCh5eXRleHQpOwotICAgIGlmIChzeW1ib2wgJiYgc3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsK
LSAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+KHN5
bWJvbCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZS0+aXNVc2VyVHlwZSgpKQotICAgICAgICAgICAg
dG9rZW4gPSBUWVBFX05BTUU7Ci0gICAgfQotICAgIHl5bHZhbC0+bGV4LnN5bWJvbCA9IHN5bWJv
bDsKLSAgICByZXR1cm4gdG9rZW47Ci19Ci0KLWludCByZXNlcnZlZF93b3JkKHl5c2Nhbl90IHl5
c2Nhbm5lcikgewotICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
IHl5c2Nhbm5lcjsKLQotICAgIHl5ZXh0cmEtPmVycm9yKCp5eWxsb2MsICJJbGxlZ2FsIHVzZSBv
ZiByZXNlcnZlZCB3b3JkIiwgeXl0ZXh0LCAiIik7Ci0gICAgeXlleHRyYS0+cmVjb3ZlcigpOwot
ICAgIHJldHVybiAwOwotfQotCi12b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxvYywgVFBhcnNlQ29u
dGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKSB7Ci0gICAgY29udGV4dC0+ZXJyb3Io
Kmxsb2MsIHJlYXNvbiwgeXlnZXRfdGV4dChjb250ZXh0LT5zY2FubmVyKSk7Ci0gICAgY29udGV4
dC0+cmVjb3ZlcigpOwotfQotCi1pbnQgaW50X2NvbnN0YW50KHl5c2Nhbl90IHl5c2Nhbm5lcikg
ewotICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIHl5c2Nhbm5l
cjsKLQotICAgIGlmICghYXRvaV9jbGFtcCh5eXRleHQsICYoeXlsdmFsLT5sZXguaSkpKQotICAg
ICAgICB5eWV4dHJhLT53YXJuaW5nKCp5eWxsb2MsICJJbnRlZ2VyIG92ZXJmbG93IiwgeXl0ZXh0
LCAiIik7Ci0gICAgcmV0dXJuIElOVENPTlNUQU5UOwotfQotCi1pbnQgZmxvYXRfY29uc3RhbnQo
eXlzY2FuX3QgeXlzY2FubmVyKSB7Ci0gICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190KikgeXlzY2FubmVyOwotCi0gICAgaWYgKCFhdG9mX2NsYW1wKHl5dGV4dCwgJih5
eWx2YWwtPmxleC5mKSkpCi0gICAgICAgIHl5ZXh0cmEtPndhcm5pbmcoKnl5bGxvYywgIkZsb2F0
IG92ZXJmbG93IiwgeXl0ZXh0LCAiIik7Ci0gICAgcmV0dXJuIEZMT0FUQ09OU1RBTlQ7Ci19Ci0K
LWludCBnbHNsYW5nX2luaXRpYWxpemUoVFBhcnNlQ29udGV4dCogY29udGV4dCkgewotICAgIHl5
c2Nhbl90IHNjYW5uZXIgPSBOVUxMOwotICAgIGlmICh5eWxleF9pbml0X2V4dHJhKGNvbnRleHQs
ICZzY2FubmVyKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICBjb250ZXh0LT5zY2FubmVyID0g
c2Nhbm5lcjsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IGdsc2xhbmdfZmluYWxpemUoVFBhcnNl
Q29udGV4dCogY29udGV4dCkgewotICAgIHl5c2Nhbl90IHNjYW5uZXIgPSBjb250ZXh0LT5zY2Fu
bmVyOwotICAgIGlmIChzY2FubmVyID09IE5VTEwpIHJldHVybiAwOwotICAgIAotICAgIGNvbnRl
eHQtPnNjYW5uZXIgPSBOVUxMOwotICAgIHl5bGV4X2Rlc3Ryb3koc2Nhbm5lcik7Ci0KLSAgICBy
ZXR1cm4gMDsKLX0KLQotaW50IGdsc2xhbmdfc2NhbihzaXplX3QgY291bnQsIGNvbnN0IGNoYXIq
IGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCi0gICAgICAgICAgICAgICAgIFRQ
YXJzZUNvbnRleHQqIGNvbnRleHQpIHsKLSAgICB5eXJlc3RhcnQoTlVMTCwgY29udGV4dC0+c2Nh
bm5lcik7Ci0gICAgeXlzZXRfY29sdW1uKDAsIGNvbnRleHQtPnNjYW5uZXIpOwotICAgIHl5c2V0
X2xpbmVubygxLCBjb250ZXh0LT5zY2FubmVyKTsKLQotICAgIC8vIEluaXRpYWxpemUgcHJlcHJv
Y2Vzc29yLgotICAgIGlmICghY29udGV4dC0+cHJlcHJvY2Vzc29yLmluaXQoY291bnQsIHN0cmlu
ZywgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgY29udGV4dC0+cHJlcHJvY2Vzc29y
LnNldE1heFRva2VuTGVuZ3RoKFNIX01BWF9UT0tFTl9MRU5HVEgpOwotCi0gICAgLy8gRGVmaW5l
IGV4dGVuc2lvbiBtYWNyb3MuCi0gICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhh
dmlvciA9IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yKCk7Ci0gICAgZm9yIChURXh0ZW5zaW9u
QmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRCZWhhdmlvci5iZWdpbigpOwotICAg
ICAgICAgaXRlciAhPSBleHRCZWhhdmlvci5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGNvbnRl
eHQtPnByZXByb2Nlc3Nvci5wcmVkZWZpbmVNYWNybyhpdGVyLT5maXJzdC5jX3N0cigpLCAxKTsK
LSAgICB9Ci0gICAgaWYgKGNvbnRleHQtPmZyYWdtZW50UHJlY2lzaW9uSGlnaCkKLSAgICAgICAg
Y29udGV4dC0+cHJlcHJvY2Vzc29yLnByZWRlZmluZU1hY3JvKCJHTF9GUkFHTUVOVF9QUkVDSVNJ
T05fSElHSCIsIDEpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLnkgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy55CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBlZWQ1ZDc4NzFhYTNiNmZhNzU0ZWU5ZmVhMDY5NTU2Y2Q1OThlNzA1Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9nbHNsYW5nLnkKKysrIC9kZXYvbnVsbApAQCAtMSwyMDAzICswLDAg
QEAKLS8qCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi1UaGlzIGZpbGUgY29udGFpbnMgdGhlIFlhY2Mg
Z3JhbW1hciBmb3IgR0xTTCBFUy4KLUJhc2VkIG9uIEFOU0kgQyBZYWNjIGdyYW1tYXI6Ci1odHRw
Oi8vd3d3Lmx5c2F0b3IubGl1LnNlL2MvQU5TSS1DLWdyYW1tYXIteS5odG1sCi0KLUlGIFlPVSBN
T0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaCwK
LVdISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBQQVJTRVIgKGdsc2xhbmdfdGFiLmNwcCBBTkQg
Z2xzbGFuZ190YWIuaCkuCi0qLwotCi0lewotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVGhpcyBm
aWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQh
Ci0KLS8vIElnbm9yZSBlcnJvcnMgaW4gYXV0by1nZW5lcmF0ZWQgY29kZS4KLSNpZiBkZWZpbmVk
KF9fR05VQ19fKQotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1mdW5j
dGlvbiIKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtdmFyaWFibGUi
Ci0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc3dpdGNoLWVudW0iCi0jZWxpZiBk
ZWZpbmVkKF9NU0NfVkVSKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQwNjUpCi0jcHJhZ21h
IHdhcm5pbmcoZGlzYWJsZTogNDE4OSkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NTA1KQot
I3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEpCi0jZW5kaWYKLQotI2luY2x1ZGUgImNvbXBp
bGVyL1N5bWJvbFRhYmxlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VDb250ZXh0LmgiCi0j
aW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCi0KLSNkZWZpbmUgWVlFTkFCTEVfTkxTIDAK
LQotI2RlZmluZSBZWUxFWF9QQVJBTSBjb250ZXh0LT5zY2FubmVyCi0lfQotCi0lZXhwZWN0IDEg
LyogT25lIHNoaWZ0IHJlZHVjZSBjb25mbGljdCBiZWNhdXNlIG9mIGlmIHwgZWxzZSAqLwotJXB1
cmUtcGFyc2VyCi0lcGFyc2UtcGFyYW0ge1RQYXJzZUNvbnRleHQqIGNvbnRleHR9Ci0lbG9jYXRp
b25zCi0lbGV4LXBhcmFtIHtZWUxFWF9QQVJBTX0KLQotJWNvZGUgcmVxdWlyZXMgewotI2RlZmlu
ZSBZWUxUWVBFIFRTb3VyY2VMb2MKLSNkZWZpbmUgWVlMVFlQRV9JU19ERUNMQVJFRCAxCi0jZGVm
aW5lIFNIX01BWF9UT0tFTl9MRU5HVEggMjU2ICAvLyBXZWJHTCBzcGVjLgotfQotCi0ldW5pb24g
ewotICAgIHN0cnVjdCB7Ci0gICAgICAgIHVuaW9uIHsKLSAgICAgICAgICAgIFRTdHJpbmcgKnN0
cmluZzsKLSAgICAgICAgICAgIGZsb2F0IGY7Ci0gICAgICAgICAgICBpbnQgaTsKLSAgICAgICAg
ICAgIGJvb2wgYjsKLSAgICAgICAgfTsKLSAgICAgICAgVFN5bWJvbCogc3ltYm9sOwotICAgIH0g
bGV4OwotICAgIHN0cnVjdCB7Ci0gICAgICAgIFRPcGVyYXRvciBvcDsKLSAgICAgICAgdW5pb24g
ewotICAgICAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7Ci0gICAgICAgICAgICBUSW50
ZXJtTm9kZVBhaXIgbm9kZVBhaXI7Ci0gICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGludGVybVR5
cGVkTm9kZTsKLSAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUFnZ3JlZ2F0ZTsK
LSAgICAgICAgfTsKLSAgICAgICAgdW5pb24gewotICAgICAgICAgICAgVFB1YmxpY1R5cGUgdHlw
ZTsKLSAgICAgICAgICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOwotICAgICAgICAgICAgVFF1YWxp
ZmllciBxdWFsaWZpZXI7Ci0gICAgICAgICAgICBURnVuY3Rpb24qIGZ1bmN0aW9uOwotICAgICAg
ICAgICAgVFBhcmFtZXRlciBwYXJhbTsKLSAgICAgICAgICAgIFRGaWVsZCogZmllbGQ7Ci0gICAg
ICAgICAgICBURmllbGRMaXN0KiBmaWVsZExpc3Q7Ci0gICAgICAgIH07Ci0gICAgfSBpbnRlcm07
Ci19Ci0KLSV7Ci1leHRlcm4gaW50IHl5bGV4KFlZU1RZUEUqIHl5bHZhbCwgWVlMVFlQRSogeXls
bG9jLCB2b2lkKiB5eXNjYW5uZXIpOwotZXh0ZXJuIHZvaWQgeXllcnJvcihZWUxUWVBFKiB5eWxs
b2MsIFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7Ci0KLSNkZWZp
bmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKSAgICAgICAgICAgICAgICAgICAgICBc
Ci0gIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgaWYgKE4pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2ZpbGUgPSBZWVJIU0xPQyhS
aHMsIDEpLmZpcnN0X2ZpbGU7ICBcCi0gICAgICAgIChDdXJyZW50KS5maXJzdF9saW5lID0gWVlS
SFNMT0MoUmhzLCAxKS5maXJzdF9saW5lOyAgXAotICAgICAgICAoQ3VycmVudCkubGFzdF9maWxl
ID0gWVlSSFNMT0MoUmhzLCBOKS5sYXN0X2ZpbGU7ICAgIFwKLSAgICAgICAgKEN1cnJlbnQpLmxh
c3RfbGluZSA9IFlZUkhTTE9DKFJocywgTikubGFzdF9saW5lOyAgICBcCi0gICAgICB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2ZpbGUgPSBZWVJIU0xPQyhSaHMsIDApLmxhc3RfZmls
ZTsgICBcCi0gICAgICAgIChDdXJyZW50KS5maXJzdF9saW5lID0gWVlSSFNMT0MoUmhzLCAwKS5s
YXN0X2xpbmU7ICAgXAotICAgICAgICAoQ3VycmVudCkubGFzdF9maWxlID0gWVlSSFNMT0MoUmhz
LCAwKS5sYXN0X2ZpbGU7ICAgIFwKLSAgICAgICAgKEN1cnJlbnQpLmxhc3RfbGluZSA9IFlZUkhT
TE9DKFJocywgMCkubGFzdF9saW5lOyAgICBcCi0gICAgICB9ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9IHdoaWxlICgwKQotCi0jZGVm
aW5lIFZFUlRFWF9PTkxZKFMsIEwpIHsgIFwKLSAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSAh
PSBTSF9WRVJURVhfU0hBREVSKSB7ICBcCi0gICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3Vw
cG9ydGVkIGluIHZlcnRleCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCi0gICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsgIFwKLSAgICB9ICBcCi19Ci0KLSNkZWZpbmUgRlJBR19PTkxZKFMsIEwpIHsg
IFwKLSAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSAhPSBTSF9GUkFHTUVOVF9TSEFERVIpIHsg
IFwKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21lbnQgc2hh
ZGVycyBvbmx5ICIsIFMpOyAgXAotICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCi0gICAg
fSAgXAotfQotJX0KLQotJXRva2VuIDxsZXg+IElOVkFSSUFOVCBISUdIX1BSRUNJU0lPTiBNRURJ
VU1fUFJFQ0lTSU9OIExPV19QUkVDSVNJT04gUFJFQ0lTSU9OCi0ldG9rZW4gPGxleD4gQVRUUklC
VVRFIENPTlNUX1FVQUwgQk9PTF9UWVBFIEZMT0FUX1RZUEUgSU5UX1RZUEUKLSV0b2tlbiA8bGV4
PiBCUkVBSyBDT05USU5VRSBETyBFTFNFIEZPUiBJRiBESVNDQVJEIFJFVFVSTgotJXRva2VuIDxs
ZXg+IEJWRUMyIEJWRUMzIEJWRUM0IElWRUMyIElWRUMzIElWRUM0IFZFQzIgVkVDMyBWRUM0Ci0l
dG9rZW4gPGxleD4gTUFUUklYMiBNQVRSSVgzIE1BVFJJWDQgSU5fUVVBTCBPVVRfUVVBTCBJTk9V
VF9RVUFMIFVOSUZPUk0gVkFSWUlORwotJXRva2VuIDxsZXg+IFNUUlVDVCBWT0lEX1RZUEUgV0hJ
TEUKLSV0b2tlbiA8bGV4PiBTQU1QTEVSMkQgU0FNUExFUkNVQkUgU0FNUExFUl9FWFRFUk5BTF9P
RVMgU0FNUExFUjJEUkVDVAotCi0ldG9rZW4gPGxleD4gSURFTlRJRklFUiBUWVBFX05BTUUgRkxP
QVRDT05TVEFOVCBJTlRDT05TVEFOVCBCT09MQ09OU1RBTlQKLSV0b2tlbiA8bGV4PiBMRUZUX09Q
IFJJR0hUX09QCi0ldG9rZW4gPGxleD4gSU5DX09QIERFQ19PUCBMRV9PUCBHRV9PUCBFUV9PUCBO
RV9PUAotJXRva2VuIDxsZXg+IEFORF9PUCBPUl9PUCBYT1JfT1AgTVVMX0FTU0lHTiBESVZfQVNT
SUdOIEFERF9BU1NJR04KLSV0b2tlbiA8bGV4PiBNT0RfQVNTSUdOIExFRlRfQVNTSUdOIFJJR0hU
X0FTU0lHTiBBTkRfQVNTSUdOIFhPUl9BU1NJR04gT1JfQVNTSUdOCi0ldG9rZW4gPGxleD4gU1VC
X0FTU0lHTgotCi0ldG9rZW4gPGxleD4gTEVGVF9QQVJFTiBSSUdIVF9QQVJFTiBMRUZUX0JSQUNL
RVQgUklHSFRfQlJBQ0tFVCBMRUZUX0JSQUNFIFJJR0hUX0JSQUNFIERPVAotJXRva2VuIDxsZXg+
IENPTU1BIENPTE9OIEVRVUFMIFNFTUlDT0xPTiBCQU5HIERBU0ggVElMREUgUExVUyBTVEFSIFNM
QVNIIFBFUkNFTlQKLSV0b2tlbiA8bGV4PiBMRUZUX0FOR0xFIFJJR0hUX0FOR0xFIFZFUlRJQ0FM
X0JBUiBDQVJFVCBBTVBFUlNBTkQgUVVFU1RJT04KLQotJXR5cGUgPGxleD4gaWRlbnRpZmllcgot
JXR5cGUgPGludGVybT4gYXNzaWdubWVudF9vcGVyYXRvciB1bmFyeV9vcGVyYXRvcgotJXR5cGUg
PGludGVybS5pbnRlcm1UeXBlZE5vZGU+IHZhcmlhYmxlX2lkZW50aWZpZXIgcHJpbWFyeV9leHBy
ZXNzaW9uIHBvc3RmaXhfZXhwcmVzc2lvbgotJXR5cGUgPGludGVybS5pbnRlcm1UeXBlZE5vZGU+
IGV4cHJlc3Npb24gaW50ZWdlcl9leHByZXNzaW9uIGFzc2lnbm1lbnRfZXhwcmVzc2lvbgotJXR5
cGUgPGludGVybS5pbnRlcm1UeXBlZE5vZGU+IHVuYXJ5X2V4cHJlc3Npb24gbXVsdGlwbGljYXRp
dmVfZXhwcmVzc2lvbiBhZGRpdGl2ZV9leHByZXNzaW9uCi0ldHlwZSA8aW50ZXJtLmludGVybVR5
cGVkTm9kZT4gcmVsYXRpb25hbF9leHByZXNzaW9uIGVxdWFsaXR5X2V4cHJlc3Npb24KLSV0eXBl
IDxpbnRlcm0uaW50ZXJtVHlwZWROb2RlPiBjb25kaXRpb25hbF9leHByZXNzaW9uIGNvbnN0YW50
X2V4cHJlc3Npb24KLSV0eXBlIDxpbnRlcm0uaW50ZXJtVHlwZWROb2RlPiBsb2dpY2FsX29yX2V4
cHJlc3Npb24gbG9naWNhbF94b3JfZXhwcmVzc2lvbiBsb2dpY2FsX2FuZF9leHByZXNzaW9uCi0l
dHlwZSA8aW50ZXJtLmludGVybVR5cGVkTm9kZT4gc2hpZnRfZXhwcmVzc2lvbiBhbmRfZXhwcmVz
c2lvbiBleGNsdXNpdmVfb3JfZXhwcmVzc2lvbiBpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbgotJXR5
cGUgPGludGVybS5pbnRlcm1UeXBlZE5vZGU+IGZ1bmN0aW9uX2NhbGwgaW5pdGlhbGl6ZXIgY29u
ZGl0aW9uIGNvbmRpdGlvbm9wdAotCi0ldHlwZSA8aW50ZXJtLmludGVybU5vZGU+IHRyYW5zbGF0
aW9uX3VuaXQgZnVuY3Rpb25fZGVmaW5pdGlvbgotJXR5cGUgPGludGVybS5pbnRlcm1Ob2RlPiBz
dGF0ZW1lbnQgc2ltcGxlX3N0YXRlbWVudAotJXR5cGUgPGludGVybS5pbnRlcm1BZ2dyZWdhdGU+
ICBzdGF0ZW1lbnRfbGlzdCBjb21wb3VuZF9zdGF0ZW1lbnQKLSV0eXBlIDxpbnRlcm0uaW50ZXJt
Tm9kZT4gZGVjbGFyYXRpb25fc3RhdGVtZW50IHNlbGVjdGlvbl9zdGF0ZW1lbnQgZXhwcmVzc2lv
bl9zdGF0ZW1lbnQKLSV0eXBlIDxpbnRlcm0uaW50ZXJtTm9kZT4gZGVjbGFyYXRpb24gZXh0ZXJu
YWxfZGVjbGFyYXRpb24KLSV0eXBlIDxpbnRlcm0uaW50ZXJtTm9kZT4gZm9yX2luaXRfc3RhdGVt
ZW50IGNvbXBvdW5kX3N0YXRlbWVudF9ub19uZXdfc2NvcGUKLSV0eXBlIDxpbnRlcm0ubm9kZVBh
aXI+IHNlbGVjdGlvbl9yZXN0X3N0YXRlbWVudCBmb3JfcmVzdF9zdGF0ZW1lbnQKLSV0eXBlIDxp
bnRlcm0uaW50ZXJtTm9kZT4gaXRlcmF0aW9uX3N0YXRlbWVudCBqdW1wX3N0YXRlbWVudCBzdGF0
ZW1lbnRfbm9fbmV3X3Njb3BlIHN0YXRlbWVudF93aXRoX3Njb3BlCi0ldHlwZSA8aW50ZXJtPiBz
aW5nbGVfZGVjbGFyYXRpb24gaW5pdF9kZWNsYXJhdG9yX2xpc3QKLQotJXR5cGUgPGludGVybT4g
cGFyYW1ldGVyX2RlY2xhcmF0aW9uIHBhcmFtZXRlcl9kZWNsYXJhdG9yIHBhcmFtZXRlcl90eXBl
X3NwZWNpZmllcgotJXR5cGUgPGludGVybS5xdWFsaWZpZXI+IHBhcmFtZXRlcl9xdWFsaWZpZXIK
LQotJXR5cGUgPGludGVybS5wcmVjaXNpb24+IHByZWNpc2lvbl9xdWFsaWZpZXIKLSV0eXBlIDxp
bnRlcm0udHlwZT4gdHlwZV9xdWFsaWZpZXIgZnVsbHlfc3BlY2lmaWVkX3R5cGUgdHlwZV9zcGVj
aWZpZXIKLSV0eXBlIDxpbnRlcm0udHlwZT4gdHlwZV9zcGVjaWZpZXJfbm9fcHJlYyB0eXBlX3Nw
ZWNpZmllcl9ub25hcnJheQotJXR5cGUgPGludGVybS50eXBlPiBzdHJ1Y3Rfc3BlY2lmaWVyCi0l
dHlwZSA8aW50ZXJtLmZpZWxkPiBzdHJ1Y3RfZGVjbGFyYXRvcgotJXR5cGUgPGludGVybS5maWVs
ZExpc3Q+IHN0cnVjdF9kZWNsYXJhdG9yX2xpc3Qgc3RydWN0X2RlY2xhcmF0aW9uIHN0cnVjdF9k
ZWNsYXJhdGlvbl9saXN0Ci0ldHlwZSA8aW50ZXJtLmZ1bmN0aW9uPiBmdW5jdGlvbl9oZWFkZXIg
ZnVuY3Rpb25fZGVjbGFyYXRvciBmdW5jdGlvbl9pZGVudGlmaWVyCi0ldHlwZSA8aW50ZXJtLmZ1
bmN0aW9uPiBmdW5jdGlvbl9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIGZ1bmN0aW9uX2NhbGxfaGVh
ZGVyCi0ldHlwZSA8aW50ZXJtPiBmdW5jdGlvbl9jYWxsX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMg
ZnVuY3Rpb25fY2FsbF9oZWFkZXJfbm9fcGFyYW1ldGVycyBmdW5jdGlvbl9jYWxsX2dlbmVyaWMg
ZnVuY3Rpb25fcHJvdG90eXBlCi0ldHlwZSA8aW50ZXJtPiBmdW5jdGlvbl9jYWxsX29yX21ldGhv
ZAotCi0lc3RhcnQgdHJhbnNsYXRpb25fdW5pdAotJSUKLQotaWRlbnRpZmllcgotICAgIDogSURF
TlRJRklFUgotICAgIHwgVFlQRV9OQU1FCi0KLXZhcmlhYmxlX2lkZW50aWZpZXIKLSAgICA6IElE
RU5USUZJRVIgewotICAgICAgICAvLyBUaGUgc3ltYm9sIHRhYmxlIHNlYXJjaCB3YXMgZG9uZSBp
biB0aGUgbGV4aWNhbCBwaGFzZQotICAgICAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSAkMS5z
eW1ib2w7Ci0gICAgICAgIGNvbnN0IFRWYXJpYWJsZSogdmFyaWFibGU7Ci0gICAgICAgIGlmIChz
eW1ib2wgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJ1bmRlY2xhcmVk
IGlkZW50aWZpZXIiLCAkMS5zdHJpbmctPmNfc3RyKCkpOwotICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICAgICAgVFR5cGUgdHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVk
KTsKLSAgICAgICAgICAgIFRWYXJpYWJsZSogZmFrZVZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgk
MS5zdHJpbmcsIHR5cGUpOwotICAgICAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0
KCpmYWtlVmFyaWFibGUpOwotICAgICAgICAgICAgdmFyaWFibGUgPSBmYWtlVmFyaWFibGU7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlkZW50aWZpZXIgY2FuIG9ubHkg
YmUgYSB2YXJpYWJsZSB0eXBlIHN5bWJvbAotICAgICAgICAgICAgaWYgKCEgc3ltYm9sLT5pc1Zh
cmlhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgInZhcmlhYmxl
IGV4cGVjdGVkIiwgJDEuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHZh
cmlhYmxlID0gc3RhdGljX2Nhc3Q8Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKLQotICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKHZhcmlhYmxlLT5nZXRO
YW1lKCkpICYmCi0gICAgICAgICAgICAgICAgIXZhcmlhYmxlLT5nZXRFeHRlbnNpb24oKS5lbXB0
eSgpICYmCi0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjayhAMSwg
dmFyaWFibGUtPmdldEV4dGVuc2lvbigpKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGRvbid0IGRl
bGV0ZSAkMS5zdHJpbmcsIGl0J3MgdXNlZCBieSBlcnJvciByZWNvdmVyeSwgYW5kIHRoZSBwb29s
Ci0gICAgICAgIC8vIHBvcCB3aWxsIHJlY2xhaW0gdGhlIG1lbW9yeQotCi0gICAgICAgIGlmICh2
YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0ICkgewotICAgICAg
ICAgICAgQ29uc3RhbnRVbmlvbiogY29uc3RBcnJheSA9IHZhcmlhYmxlLT5nZXRDb25zdFBvaW50
ZXIoKTsKLSAgICAgICAgICAgIFRUeXBlIHQodmFyaWFibGUtPmdldFR5cGUoKSk7Ci0gICAgICAg
ICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJy
YXksIHQsIEAxKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAkJCA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUtPmdldFVuaXF1ZUlkKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldE5hbWUo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJp
YWJsZS0+Z2V0VHlwZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEAxKTsKLSAgICB9Ci0gICAgOwotCi1wcmltYXJ5X2V4cHJlc3Npb24KLSAgICA6
IHZhcmlhYmxlX2lkZW50aWZpZXIgewotICAgICAgICAkJCA9ICQxOwotICAgIH0KLSAgICB8IElO
VENPTlNUQU5UIHsKLSAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uWzFdOwotICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoJDEuaSk7Ci0gICAg
ICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJh
eSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDEpOwotICAgIH0KLSAg
ICB8IEZMT0FUQ09OU1RBTlQgewotICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0g
bmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgkMS5m
KTsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1
bmlvbkFycmF5LCBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAxKTsK
LSAgICB9Ci0gICAgfCBCT09MQ09OU1RBTlQgewotICAgICAgICBDb25zdGFudFVuaW9uICp1bmlv
bkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgIHVuaW9uQXJyYXktPnNldEJD
b25zdCgkMS5iKTsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3Rh
bnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0
KSwgQDEpOwotICAgIH0KLSAgICB8IExFRlRfUEFSRU4gZXhwcmVzc2lvbiBSSUdIVF9QQVJFTiB7
Ci0gICAgICAgICQkID0gJDI7Ci0gICAgfQotICAgIDsKLQotcG9zdGZpeF9leHByZXNzaW9uCi0g
ICAgOiBwcmltYXJ5X2V4cHJlc3Npb24gewotICAgICAgICAkJCA9ICQxOwotICAgIH0KLSAgICB8
IHBvc3RmaXhfZXhwcmVzc2lvbiBMRUZUX0JSQUNLRVQgaW50ZWdlcl9leHByZXNzaW9uIFJJR0hU
X0JSQUNLRVQgewotICAgICAgICAkJCA9IGNvbnRleHQtPmFkZEluZGV4RXhwcmVzc2lvbigkMSwg
QDIsICQzKTsKLSAgICB9Ci0gICAgfCBmdW5jdGlvbl9jYWxsIHsKLSAgICAgICAgJCQgPSAkMTsK
LSAgICB9Ci0gICAgfCBwb3N0Zml4X2V4cHJlc3Npb24gRE9UIGlkZW50aWZpZXIgewotICAgICAg
ICBpZiAoJDEtPmlzQXJyYXkoKSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDMsICJj
YW5ub3QgYXBwbHkgZG90IG9wZXJhdG9yIHRvIGFuIGFycmF5IiwgIi4iKTsKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgkMS0+aXNWZWN0
b3IoKSkgewotICAgICAgICAgICAgVFZlY3RvckZpZWxkcyBmaWVsZHM7Ci0gICAgICAgICAgICBp
ZiAoISBjb250ZXh0LT5wYXJzZVZlY3RvckZpZWxkcygqJDMuc3RyaW5nLCAkMS0+Z2V0Tm9taW5h
bFNpemUoKSwgZmllbGRzLCBAMykpIHsKLSAgICAgICAgICAgICAgICBmaWVsZHMubnVtID0gMTsK
LSAgICAgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1swXSA9IDA7Ci0gICAgICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoJDEt
PmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgeyAvLyBjb25zdGFudCBmb2xk
aW5nIGZvciB2ZWN0b3IgZmllbGRzCi0gICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRD
b25zdFZlY3Rvck5vZGUoZmllbGRzLCAkMSwgQDMpOwotICAgICAgICAgICAgICAgIGlmICgkJCA9
PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
ICAgICAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNU
eXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxQ29uc3QsIChpbnQpICgqJDMuc3RyaW5nKS5z
aXplKCkpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVFN0cmluZyB2
ZWN0b3JTdHJpbmcgPSAqJDMuc3RyaW5nOwotICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCog
aW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3dpenpsZShmaWVsZHMsIEAzKTsKLSAg
ICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BWZWN0
b3JTd2l6emxlLCAkMSwgaW5kZXgsIEAyKTsKLSAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShU
VHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5
LCAoaW50KSB2ZWN0b3JTdHJpbmcuc2l6ZSgpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g
ZWxzZSBpZiAoJDEtPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgIFRNYXRyaXhGaWVsZHMgZmll
bGRzOwotICAgICAgICAgICAgaWYgKCEgY29udGV4dC0+cGFyc2VNYXRyaXhGaWVsZHMoKiQzLnN0
cmluZywgJDEtPmdldE5vbWluYWxTaXplKCksIGZpZWxkcywgQDMpKSB7Ci0gICAgICAgICAgICAg
ICAgZmllbGRzLndob2xlUm93ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZmllbGRzLndob2xl
Q29sID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZmllbGRzLnJvdyA9IDA7Ci0gICAgICAgICAg
ICAgICAgZmllbGRzLmNvbCA9IDA7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZp
ZWxkcy53aG9sZUNvbCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAiIG5v
bi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIpOwotICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1
bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAgdW5pb25B
cnJheS0+c2V0SUNvbnN0KDApOwotICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXgg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlw
ZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMyk7Ci0gICAgICAgICAgICAgICAg
JCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICQxLCBp
bmRleCwgQDIpOwotICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNp
Y1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigpLEV2cVRlbXBvcmFyeSwgJDEtPmdldE5vbWluYWxT
aXplKCkpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ29uc3RhbnRV
bmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAg
IHVuaW9uQXJyYXktPnNldElDb25zdChmaWVsZHMuY29sICogJDEtPmdldE5vbWluYWxTaXplKCkg
KyBmaWVsZHMucm93KTsKLSAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0
SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDMpOwotICAgICAgICAgICAgICAgICQkID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAkMSwgaW5kZXgs
IEAyKTsKLSAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBl
KCksICQxLT5nZXRQcmVjaXNpb24oKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ug
aWYgKCQxLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAgICAgIGJvb2wg
ZmllbGRGb3VuZCA9IGZhbHNlOwotICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRz
ID0gJDEtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBpbnQgaTsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgICAgICAgICBpZiAoZmllbGRzW2ldLT5uYW1lKCkgPT0gKiQzLnN0cmlu
ZykgewotICAgICAgICAgICAgICAgICAgICBmaWVsZEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKGZpZWxkRm91bmQpIHsKLSAgICAgICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUo
KS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgewotICAgICAgICAgICAgICAgICAgICAkJCA9
IGNvbnRleHQtPmFkZENvbnN0U3RydWN0KCokMy5zdHJpbmcsICQxLCBAMik7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgJCQtPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGNoYW5nZSB0aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1cm4gdHlwZSwgbm90
IG9mIHRoZSBzdHJ1Y3R1cmUgZmllbGQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHRo
ZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBpcyBzaGFyZWQgYmV0d2VlbiB2YXJpb3VzIHN0cnVjdHVy
ZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICAkJC0+Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVh
bGlmaWVyKEV2cUNvbnN0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkg
PSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+
c2V0SUNvbnN0KGkpOwotICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgKmZpZWxk
c1tpXS0+dHlwZSgpLCBAMyk7Ci0gICAgICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0U3RydWN0LCAkMSwgaW5kZXgsIEAyKTsK
LSAgICAgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKEAyLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgJDMuc3RyaW5n
LT5jX3N0cigpKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
ICAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1
Y3R1cmUsIHZlY3Rvciwgb3IgbWF0cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgJDMuc3RyaW5nLT5j
X3N0cigpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQk
ID0gJDE7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gZG9uJ3QgZGVsZXRlICQzLnN0cmluZywgaXQn
cyBmcm9tIHRoZSBwb29sCi0gICAgfQotICAgIHwgcG9zdGZpeF9leHByZXNzaW9uIElOQ19PUCB7
Ci0gICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKEAyLCAiKysiLCAkMSkpCi0g
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQb3N0SW5jcmVtZW50LCAkMSwgQDIsIGNvbnRleHQt
PnN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgIGNvbnRl
eHQtPnVuYXJ5T3BFcnJvcihAMiwgIisrIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgJCQgPSAkMTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBERUNfT1AgewotICAgICAgICBp
ZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjayhAMiwgIi0tIiwgJDEpKQotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRVbmFyeU1hdGgoRU9wUG9zdERlY3JlbWVudCwgJDEsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJs
ZSk7Ci0gICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT51bmFyeU9w
RXJyb3IoQDIsICItLSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQkID0gJDE7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgOwotCi1pbnRlZ2VyX2V4cHJlc3Npb24KLSAgICA6IGV4cHJlc3Npb24gewotICAgICAg
ICBpZiAoY29udGV4dC0+aW50ZWdlckVycm9yQ2hlY2soJDEsICJbXSIpKQotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJCA9ICQxOwotICAgIH0KLSAgICA7Ci0KLWZ1
bmN0aW9uX2NhbGwKLSAgICA6IGZ1bmN0aW9uX2NhbGxfb3JfbWV0aG9kIHsKLSAgICAgICAgVEZ1
bmN0aW9uKiBmbkNhbGwgPSAkMS5mdW5jdGlvbjsKLSAgICAgICAgVE9wZXJhdG9yIG9wID0gZm5D
YWxsLT5nZXRCdWlsdEluT3AoKTsKLQotICAgICAgICBpZiAob3AgIT0gRU9wTnVsbCkKLSAgICAg
ICAgewotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFRoZW4gdGhpcyBzaG91bGQgYmUg
YSBjb25zdHJ1Y3Rvci4KLSAgICAgICAgICAgIC8vIERvbid0IGdvIHRocm91Z2ggdGhlIHN5bWJv
bCB0YWJsZSBmb3IgY29uc3RydWN0b3JzLgotICAgICAgICAgICAgLy8gVGhlaXIgcGFyYW1ldGVy
cyB3aWxsIGJlIHZlcmlmaWVkIGFsZ29yaXRobWljYWxseS4KLSAgICAgICAgICAgIC8vCi0gICAg
ICAgICAgICBUVHlwZSB0eXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7ICAvLyB1c2UgdGhpcyB0
byBnZXQgdGhlIHR5cGUgYmFjawotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmNvbnN0cnVjdG9y
RXJyb3JDaGVjayhAMSwgJDEuaW50ZXJtTm9kZSwgKmZuQ2FsbCwgb3AsICZ0eXBlKSkgewotICAg
ICAgICAgICAgICAgICQkID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgLy8KLSAgICAgICAgICAgICAgICAvLyBJdCdzIGEgY29uc3RydWN0b3IsIG9mIHR5cGUgJ3R5
cGUnLgotICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5h
ZGRDb25zdHJ1Y3RvcigkMS5pbnRlcm1Ob2RlLCAmdHlwZSwgb3AsIGZuQ2FsbCwgQDEpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcigwLCBvcCwgQDEpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgJCQtPnNldFR5cGUodHlwZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAvLwotICAgICAgICAgICAgLy8gTm90IGEgY29uc3RydWN0b3IuICBGaW5kIGl0IGluIHRo
ZSBzeW1ib2wgdGFibGUuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgY29uc3QgVEZ1bmN0
aW9uKiBmbkNhbmRpZGF0ZTsKLSAgICAgICAgICAgIGJvb2wgYnVpbHRJbjsKLSAgICAgICAgICAg
IGZuQ2FuZGlkYXRlID0gY29udGV4dC0+ZmluZEZ1bmN0aW9uKEAxLCBmbkNhbGwsICZidWlsdElu
KTsKLSAgICAgICAgICAgIGlmIChmbkNhbmRpZGF0ZSkgewotICAgICAgICAgICAgICAgIC8vCi0g
ICAgICAgICAgICAgICAgLy8gQSBkZWNsYXJlZCBmdW5jdGlvbi4KLSAgICAgICAgICAgICAgICAv
LwotICAgICAgICAgICAgICAgIGlmIChidWlsdEluICYmICFmbkNhbmRpZGF0ZS0+Z2V0RXh0ZW5z
aW9uKCkuZW1wdHkoKSAmJgotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5leHRlbnNpb25F
cnJvckNoZWNrKEAxLCBmbkNhbmRpZGF0ZS0+Z2V0RXh0ZW5zaW9uKCkpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgb3AgPSBmbkNhbmRpZGF0ZS0+Z2V0QnVpbHRJbk9wKCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKGJ1aWx0SW4gJiYgb3AgIT0gRU9wTnVsbCkgewotICAgICAgICAgICAgICAgICAgICAv
LwotICAgICAgICAgICAgICAgICAgICAvLyBBIGZ1bmN0aW9uIGNhbGwgbWFwcGVkIHRvIGEgYnVp
bHQtaW4gb3BlcmF0aW9uLgotICAgICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAg
ICAgICBpZiAoZm5DYW5kaWRhdGUtPmdldFBhcmFtQ291bnQoKSA9PSAxKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJlYXQgaXQgbGlr
ZSBhIGJ1aWx0LWluIHVuYXJ5IG9wZXJhdG9yLgotICAgICAgICAgICAgICAgICAgICAgICAgLy8K
LSAgICAgICAgICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVu
YXJ5TWF0aChvcCwgJDEuaW50ZXJtTm9kZSwgQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICgkJCA9PSAwKSAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImJ1aWx0IGluIHVuYXJ5IG9wZXJh
dG9yIGZ1bmN0aW9uLiAgVHlwZTogIiA8PCBzdGF0aWNfY2FzdDxUSW50ZXJtVHlwZWQqPigkMS5p
bnRlcm1Ob2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEuaW50ZXJtTm9kZS0+Z2V0
TGluZSgpLCAiIHdyb25nIG9wZXJhbmQgdHlwZSIsICJJbnRlcm5hbCBFcnJvciIsIGV4dHJhSW5m
by5jX3N0cigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBZWUVSUk9SOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRl
T3BlcmF0b3IoJDEuaW50ZXJtQWdncmVnYXRlLCBvcCwgQDEpOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhp
cyBpcyBhIHJlYWwgZnVuY3Rpb24gY2FsbAotCi0gICAgICAgICAgICAgICAgICAgICQkID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKCQxLmludGVybUFnZ3JlZ2F0
ZSwgRU9wRnVuY3Rpb25DYWxsLCBAMSk7Ci0gICAgICAgICAgICAgICAgICAgICQkLT5zZXRUeXBl
KGZuQ2FuZGlkYXRlLT5nZXRSZXR1cm5UeXBlKCkpOwotCi0gICAgICAgICAgICAgICAgICAgIC8v
IHRoaXMgaXMgaG93IHdlIGtub3cgd2hldGhlciB0aGUgZ2l2ZW4gZnVuY3Rpb24gaXMgYSBidWls
dEluIGZ1bmN0aW9uIG9yIGEgdXNlciBkZWZpbmVkIGZ1bmN0aW9uCi0gICAgICAgICAgICAgICAg
ICAgIC8vIGlmIGJ1aWx0SW4gPT0gZmFsc2UsIGl0J3MgYSB1c2VyRGVmaW5lZCAtPiBjb3VsZCBi
ZSBhbiBvdmVybG9hZGVkIGJ1aWx0SW4gZnVuY3Rpb24gYWxzbwotICAgICAgICAgICAgICAgICAg
ICAvLyBpZiBidWlsdEluID09IHRydWUsIGl0J3MgZGVmaW5pdGVseSBhIGJ1aWx0SW4gZnVuY3Rp
b24gd2l0aCBFT3BOdWxsCi0gICAgICAgICAgICAgICAgICAgIGlmICghYnVpbHRJbikKLSAgICAg
ICAgICAgICAgICAgICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRVc2VyRGVmaW5lZCgp
OwotICAgICAgICAgICAgICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0TmFtZShmbkNh
bmRpZGF0ZS0+Z2V0TWFuZ2xlZE5hbWUoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgVFF1YWxp
ZmllciBxdWFsOwotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZu
Q2FuZGlkYXRlLT5nZXRQYXJhbUNvdW50KCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgcXVhbCA9IGZuQ2FuZGlkYXRlLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdWFsID09IEV2cU91dCB8fCBxdWFsID09IEV2
cUluT3V0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1
ZUVycm9yQ2hlY2soJCQtPmdldExpbmUoKSwgImFzc2lnbiIsICQkLT5nZXRBc0FnZ3JlZ2F0ZSgp
LT5nZXRTZXF1ZW5jZSgpW2ldLT5nZXRBc1R5cGVkKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmludGVybU5vZGUtPmdldExpbmUoKSwgIkNv
bnN0YW50IHZhbHVlIGNhbm5vdCBiZSBwYXNzZWQgZm9yICdvdXQnIG9yICdpbm91dCcgcGFyYW1l
dGVycy4iLCAiRXJyb3IiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShmbkNhbmRpZGF0ZS0+Z2V0UmV0dXJuVHlwZSgp
KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gZXJyb3IgbWVzc2Fn
ZSB3YXMgcHV0IG91dCBieSBQYUZpbmRGdW5jdGlvbigpCi0gICAgICAgICAgICAgICAgLy8gUHV0
IG9uIGEgZHVtbXkgbm9kZSBmb3IgZXJyb3IgcmVjb3ZlcnkKLSAgICAgICAgICAgICAgICBDb25z
dGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAg
ICAgICAgdW5pb25BcnJheS0+c2V0RkNvbnN0KDAuMGYpOwotICAgICAgICAgICAgICAgICQkID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUo
RWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMSk7Ci0gICAgICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGRl
bGV0ZSBmbkNhbGw7Ci0gICAgfQotICAgIDsKLQotZnVuY3Rpb25fY2FsbF9vcl9tZXRob2QKLSAg
ICA6IGZ1bmN0aW9uX2NhbGxfZ2VuZXJpYyB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgfQotICAg
IHwgcG9zdGZpeF9leHByZXNzaW9uIERPVCBmdW5jdGlvbl9jYWxsX2dlbmVyaWMgewotICAgICAg
ICBjb250ZXh0LT5lcnJvcihAMywgIm1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQiLCAiIik7Ci0g
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgJCQgPSAkMzsKLSAgICB9Ci0gICAg
OwotCi1mdW5jdGlvbl9jYWxsX2dlbmVyaWMKLSAgICA6IGZ1bmN0aW9uX2NhbGxfaGVhZGVyX3dp
dGhfcGFyYW1ldGVycyBSSUdIVF9QQVJFTiB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgfQotICAg
IHwgZnVuY3Rpb25fY2FsbF9oZWFkZXJfbm9fcGFyYW1ldGVycyBSSUdIVF9QQVJFTiB7Ci0gICAg
ICAgICQkID0gJDE7Ci0gICAgfQotICAgIDsKLQotZnVuY3Rpb25fY2FsbF9oZWFkZXJfbm9fcGFy
YW1ldGVycwotICAgIDogZnVuY3Rpb25fY2FsbF9oZWFkZXIgVk9JRF9UWVBFIHsKLSAgICAgICAg
JCQuZnVuY3Rpb24gPSAkMTsKLSAgICAgICAgJCQuaW50ZXJtTm9kZSA9IDA7Ci0gICAgfQotICAg
IHwgZnVuY3Rpb25fY2FsbF9oZWFkZXIgewotICAgICAgICAkJC5mdW5jdGlvbiA9ICQxOwotICAg
ICAgICAkJC5pbnRlcm1Ob2RlID0gMDsKLSAgICB9Ci0gICAgOwotCi1mdW5jdGlvbl9jYWxsX2hl
YWRlcl93aXRoX3BhcmFtZXRlcnMKLSAgICA6IGZ1bmN0aW9uX2NhbGxfaGVhZGVyIGFzc2lnbm1l
bnRfZXhwcmVzc2lvbiB7Ci0gICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7IDAsIG5ldyBUVHlw
ZSgkMi0+Z2V0VHlwZSgpKSB9OwotICAgICAgICAkMS0+YWRkUGFyYW1ldGVyKHBhcmFtKTsKLSAg
ICAgICAgJCQuZnVuY3Rpb24gPSAkMTsKLSAgICAgICAgJCQuaW50ZXJtTm9kZSA9ICQyOwotICAg
IH0KLSAgICB8IGZ1bmN0aW9uX2NhbGxfaGVhZGVyX3dpdGhfcGFyYW1ldGVycyBDT01NQSBhc3Np
Z25tZW50X2V4cHJlc3Npb24gewotICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAwLCBuZXcg
VFR5cGUoJDMtPmdldFR5cGUoKSkgfTsKLSAgICAgICAgJDEuZnVuY3Rpb24tPmFkZFBhcmFtZXRl
cihwYXJhbSk7Ci0gICAgICAgICQkLmZ1bmN0aW9uID0gJDEuZnVuY3Rpb247Ci0gICAgICAgICQk
LmludGVybU5vZGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRl
cm1Ob2RlLCAkMywgQDIpOwotICAgIH0KLSAgICA7Ci0KLWZ1bmN0aW9uX2NhbGxfaGVhZGVyCi0g
ICAgOiBmdW5jdGlvbl9pZGVudGlmaWVyIExFRlRfUEFSRU4gewotICAgICAgICAkJCA9ICQxOwot
ICAgIH0KLSAgICA7Ci0KLS8vIEdyYW1tYXIgTm90ZTogIENvbnN0cnVjdG9ycyBsb29rIGxpa2Ug
ZnVuY3Rpb25zLCBidXQgYXJlIHJlY29nbml6ZWQgYXMgdHlwZXMuCi0KLWZ1bmN0aW9uX2lkZW50
aWZpZXIKLSAgICA6IHR5cGVfc3BlY2lmaWVyX25vbmFycmF5IHsKLSAgICAgICAgLy8KLSAgICAg
ICAgLy8gQ29uc3RydWN0b3IKLSAgICAgICAgLy8KLSAgICAgICAgVE9wZXJhdG9yIG9wID0gRU9w
TnVsbDsKLSAgICAgICAgaWYgKCQxLnVzZXJEZWYpIHsKLSAgICAgICAgICAgIG9wID0gRU9wQ29u
c3RydWN0U3RydWN0OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3dpdGNoICgkMS50
eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIEVidEZsb2F0OgotICAgICAgICAgICAgICAgIGlmICgk
MS5tYXRyaXgpIHsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoKCQxLnNpemUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdE1hdDI7ICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVjdE1hdDM7ICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVjdE1hdDQ7ICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHN3aXRjaCgkMS5zaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNh
c2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RGbG9hdDsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IGNhc2UgMjogb3AgPSBFT3BDb25zdHJ1Y3RWZWMyOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RWZWMzOyAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RWZWM0OyAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIEVidEludDoKLSAgICAgICAgICAgICAgICBzd2l0Y2goJDEuc2l6ZSkg
ewotICAgICAgICAgICAgICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RJbnQ7ICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdElWZWMyOyBicmVhazsK
LSAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0SVZlYzM7IGJyZWFrOwot
ICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RJVmVjNDsgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBFYnRCb29sOgotICAgICAgICAgICAgICAgIHN3aXRjaCgkMS5zaXplKSB7Ci0gICAgICAgICAg
ICAgICAgY2FzZSAxOiBvcCA9IEVPcENvbnN0cnVjdEJvb2w7ICBicmVhazsKLSAgICAgICAgICAg
ICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0QlZlYzI7IGJyZWFrOwotICAgICAgICAgICAg
ICAgIGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RCVmVjMzsgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVjdEJWZWM0OyBicmVhazsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OiBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChvcCA9PSBFT3BOdWxsKSB7Ci0gICAgICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJjYW5ub3QgY29uc3RydWN0IHRoaXMgdHlwZSIs
IGdldEJhc2ljU3RyaW5nKCQxLnR5cGUpKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgICAgICAgICAgJDEudHlwZSA9IEVidEZsb2F0OwotICAgICAgICAgICAg
ICAgIG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgVFN0cmluZyB0ZW1wU3RyaW5nOwotICAgICAgICBUVHlwZSB0eXBlKCQxKTsKLSAgICAg
ICAgVEZ1bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oJnRlbXBTdHJpbmcsIHR5cGUs
IG9wKTsKLSAgICAgICAgJCQgPSBmdW5jdGlvbjsKLSAgICB9Ci0gICAgfCBJREVOVElGSUVSIHsK
LSAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjayhAMSwgKiQxLnN0cmluZykp
Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIFRUeXBlIHR5cGUoRWJ0
Vm9pZCwgRWJwVW5kZWZpbmVkKTsKLSAgICAgICAgVEZ1bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBU
RnVuY3Rpb24oJDEuc3RyaW5nLCB0eXBlKTsKLSAgICAgICAgJCQgPSBmdW5jdGlvbjsKLSAgICB9
Ci0gICAgOwotCi11bmFyeV9leHByZXNzaW9uCi0gICAgOiBwb3N0Zml4X2V4cHJlc3Npb24gewot
ICAgICAgICAkJCA9ICQxOwotICAgIH0KLSAgICB8IElOQ19PUCB1bmFyeV9leHByZXNzaW9uIHsK
LSAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soQDEsICIrKyIsICQyKSkKLSAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFByZUluY3JlbWVudCwgJDIsIEAxLCBjb250ZXh0LT5z
eW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0
LT51bmFyeU9wRXJyb3IoQDEsICIrKyIsICQyLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQkID0gJDI7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgfCBERUNfT1AgdW5hcnlfZXhwcmVzc2lvbiB7Ci0gICAgICAgIGlmIChj
b250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKEAxLCAiLS0iLCAkMikpCi0gICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVu
YXJ5TWF0aChFT3BQcmVEZWNyZW1lbnQsICQyLCBAMSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwot
ICAgICAgICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9y
KEAxLCAiLS0iLCAkMi0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkJCA9ICQyOwotICAgICAgICB9Ci0gICAgfQotICAg
IHwgdW5hcnlfb3BlcmF0b3IgdW5hcnlfZXhwcmVzc2lvbiB7Ci0gICAgICAgIGlmICgkMS5vcCAh
PSBFT3BOdWxsKSB7Ci0gICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRV
bmFyeU1hdGgoJDEub3AsICQyLCBAMSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICAg
ICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBlcnJvck9wID0g
IiI7Ci0gICAgICAgICAgICAgICAgc3dpdGNoKCQxLm9wKSB7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBFT3BOZWdhdGl2ZTogICBlcnJvck9wID0gIi0iOyBicmVhazsKLSAgICAgICAgICAgICAgICBj
YXNlIEVPcExvZ2ljYWxOb3Q6IGVycm9yT3AgPSAiISI7IGJyZWFrOwotICAgICAgICAgICAgICAg
IGRlZmF1bHQ6IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb250
ZXh0LT51bmFyeU9wRXJyb3IoQDEsIGVycm9yT3AsICQyLT5nZXRDb21wbGV0ZVN0cmluZygpKTsK
LSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgJCQg
PSAkMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAkJCA9ICQy
OwotICAgIH0KLSAgICA7Ci0vLyBHcmFtbWFyIE5vdGU6ICBObyB0cmFkaXRpb25hbCBzdHlsZSB0
eXBlIGNhc3RzLgotCi11bmFyeV9vcGVyYXRvcgotICAgIDogUExVUyAgeyAkJC5vcCA9IEVPcE51
bGw7IH0KLSAgICB8IERBU0ggIHsgJCQub3AgPSBFT3BOZWdhdGl2ZTsgfQotICAgIHwgQkFORyAg
eyAkJC5vcCA9IEVPcExvZ2ljYWxOb3Q7IH0KLSAgICA7Ci0vLyBHcmFtbWFyIE5vdGU6ICBObyAn
Kicgb3IgJyYnIHVuYXJ5IG9wcy4gIFBvaW50ZXJzIGFyZSBub3Qgc3VwcG9ydGVkLgotCi1tdWx0
aXBsaWNhdGl2ZV9leHByZXNzaW9uCi0gICAgOiB1bmFyeV9leHByZXNzaW9uIHsgJCQgPSAkMTsg
fQotICAgIHwgbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbiBTVEFSIHVuYXJ5X2V4cHJlc3Npb24g
ewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcE11
bCwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoJCQgPT0g
MCkgewotICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIioiLCAkMS0+Z2V0
Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgfQotICAg
IH0KLSAgICB8IG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24gU0xBU0ggdW5hcnlfZXhwcmVzc2lv
biB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9w
RGl2LCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmICgkJCA9
PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiLyIsICQxLT5n
ZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICB9Ci0g
ICAgfQotICAgIDsKLQotYWRkaXRpdmVfZXhwcmVzc2lvbgotICAgIDogbXVsdGlwbGljYXRpdmVf
ZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KLSAgICB8IGFkZGl0aXZlX2V4cHJlc3Npb24gUExVUyBt
dWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BBZGQsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRh
YmxlKTsKLSAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmJpbmFy
eU9wRXJyb3IoQDIsICIrIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0
ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAg
ICQkID0gJDE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgfCBhZGRpdGl2ZV9leHByZXNzaW9uIERB
U0ggbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wU3ViLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1i
b2xUYWJsZSk7Ci0gICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5i
aW5hcnlPcEVycm9yKEAyLCAiLSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29t
cGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
ICAgICAkJCA9ICQxOwotICAgICAgICB9Ci0gICAgfQotICAgIDsKLQotc2hpZnRfZXhwcmVzc2lv
bgotICAgIDogYWRkaXRpdmVfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KLSAgICA7Ci0KLXJlbGF0
aW9uYWxfZXhwcmVzc2lvbgotICAgIDogc2hpZnRfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KLSAg
ICB8IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiBMRUZUX0FOR0xFIHNoaWZ0X2V4cHJlc3Npb24gewot
ICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExlc3NU
aGFuLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmICgkJCA9
PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiPCIsICQxLT5n
ZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFy
cmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRC
Q29uc3QoZmFsc2UpOwotICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
Q29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2
cUNvbnN0KSwgQDIpOwotICAgICAgICB9Ci0gICAgfQotICAgIHwgcmVsYXRpb25hbF9leHByZXNz
aW9uIFJJR0hUX0FOR0xFIHNoaWZ0X2V4cHJlc3Npb24gIHsKLSAgICAgICAgJCQgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbiwgJDEsICQzLCBAMiwg
Y29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoJCQgPT0gMCkgewotICAgICAgICAg
ICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIj4iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmco
KSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFu
dFVuaW9uWzFdOwotICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAg
ICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5p
b25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAyKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICB8IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiBMRV9PUCBzaGlmdF9l
eHByZXNzaW9uICB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFy
eU1hdGgoRU9wTGVzc1RoYW5FcXVhbCwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUp
OwotICAgICAgICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BF
cnJvcihAMiwgIjw9IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0
cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIENv
bnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAg
ICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAkJCA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJv
b2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
fCByZWxhdGlvbmFsX2V4cHJlc3Npb24gR0VfT1Agc2hpZnRfZXhwcmVzc2lvbiAgewotICAgICAg
ICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFu
RXF1YWwsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCQk
ID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICI+PSIsICQx
LT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlv
bkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICB1bmlvbkFycmF5LT5z
ZXRCQ29uc3QoZmFsc2UpOwotICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQs
IEV2cUNvbnN0KSwgQDIpOwotICAgICAgICB9Ci0gICAgfQotICAgIDsKLQotZXF1YWxpdHlfZXhw
cmVzc2lvbgotICAgIDogcmVsYXRpb25hbF9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQotICAgIHwg
ZXF1YWxpdHlfZXhwcmVzc2lvbiBFUV9PUCByZWxhdGlvbmFsX2V4cHJlc3Npb24gIHsKLSAgICAg
ICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BFcXVhbCwgJDEs
ICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoJCQgPT0gMCkgewot
ICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIj09IiwgJDEtPmdldENvbXBs
ZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBu
ZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChm
YWxzZSk7Ci0gICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFu
dFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3Qp
LCBAMik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgfCBlcXVhbGl0eV9leHByZXNzaW9uIE5FX09Q
IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZEJpbmFyeU1hdGgoRU9wTm90RXF1YWwsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJv
bFRhYmxlKTsKLSAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmJp
bmFyeU9wRXJyb3IoQDIsICIhPSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29t
cGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
ICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0g
ICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwotICAgICAgICAgICAgJCQg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlw
ZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDIpOwotICAgICAgICB9Ci0gICAg
fQotICAgIDsKLQotYW5kX2V4cHJlc3Npb24KLSAgICA6IGVxdWFsaXR5X2V4cHJlc3Npb24geyAk
JCA9ICQxOyB9Ci0gICAgOwotCi1leGNsdXNpdmVfb3JfZXhwcmVzc2lvbgotICAgIDogYW5kX2V4
cHJlc3Npb24geyAkJCA9ICQxOyB9Ci0gICAgOwotCi1pbmNsdXNpdmVfb3JfZXhwcmVzc2lvbgot
ICAgIDogZXhjbHVzaXZlX29yX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9Ci0gICAgOwotCi1sb2dp
Y2FsX2FuZF9leHByZXNzaW9uCi0gICAgOiBpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbiB7ICQkID0g
JDE7IH0KLSAgICB8IGxvZ2ljYWxfYW5kX2V4cHJlc3Npb24gQU5EX09QIGluY2x1c2l2ZV9vcl9l
eHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5
TWF0aChFT3BMb2dpY2FsQW5kLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0g
ICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9y
KEAyLCAiJiYiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5n
KCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgQ29uc3Rh
bnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAg
dW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAgICAgICAgICQkID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwg
RWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAyKTsKLSAgICAgICAgfQotICAgIH0KLSAgICA7Ci0K
LWxvZ2ljYWxfeG9yX2V4cHJlc3Npb24KLSAgICA6IGxvZ2ljYWxfYW5kX2V4cHJlc3Npb24geyAk
JCA9ICQxOyB9Ci0gICAgfCBsb2dpY2FsX3hvcl9leHByZXNzaW9uIFhPUl9PUCBsb2dpY2FsX2Fu
ZF9leHByZXNzaW9uICB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJp
bmFyeU1hdGgoRU9wTG9naWNhbFhvciwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUp
OwotICAgICAgICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BF
cnJvcihAMiwgIl5eIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0
cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIENv
bnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAg
ICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAkJCA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJv
b2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
OwotCi1sb2dpY2FsX29yX2V4cHJlc3Npb24KLSAgICA6IGxvZ2ljYWxfeG9yX2V4cHJlc3Npb24g
eyAkJCA9ICQxOyB9Ci0gICAgfCBsb2dpY2FsX29yX2V4cHJlc3Npb24gT1JfT1AgbG9naWNhbF94
b3JfZXhwcmVzc2lvbiAgewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRC
aW5hcnlNYXRoKEVPcExvZ2ljYWxPciwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUp
OwotICAgICAgICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BF
cnJvcihAMiwgInx8IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0
cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIENv
bnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAg
ICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAkJCA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJv
b2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
OwotCi1jb25kaXRpb25hbF9leHByZXNzaW9uCi0gICAgOiBsb2dpY2FsX29yX2V4cHJlc3Npb24g
eyAkJCA9ICQxOyB9Ci0gICAgfCBsb2dpY2FsX29yX2V4cHJlc3Npb24gUVVFU1RJT04gZXhwcmVz
c2lvbiBDT0xPTiBhc3NpZ25tZW50X2V4cHJlc3Npb24gewotICAgICAgIGlmIChjb250ZXh0LT5i
b29sRXJyb3JDaGVjayhAMiwgJDEpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFNlbGVjdGlvbigkMSwgJDMs
ICQ1LCBAMik7Ci0gICAgICAgIGlmICgkMy0+Z2V0VHlwZSgpICE9ICQ1LT5nZXRUeXBlKCkpCi0g
ICAgICAgICAgICAkJCA9IDA7Ci0KLSAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAg
IGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICI6IiwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCks
ICQ1LT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgICAgICQkID0gJDU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgOwotCi1hc3Np
Z25tZW50X2V4cHJlc3Npb24KLSAgICA6IGNvbmRpdGlvbmFsX2V4cHJlc3Npb24geyAkJCA9ICQx
OyB9Ci0gICAgfCB1bmFyeV9leHByZXNzaW9uIGFzc2lnbm1lbnRfb3BlcmF0b3IgYXNzaWdubWVu
dF9leHByZXNzaW9uIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soQDIs
ICJhc3NpZ24iLCAkMSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
ICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEFzc2lnbigkMi5vcCwgJDEsICQzLCBAMik7
Ci0gICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5hc3NpZ25FcnJv
cihAMiwgImFzc2lnbiIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVT
dHJpbmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAk
JCA9ICQxOwotICAgICAgICB9Ci0gICAgfQotICAgIDsKLQotYXNzaWdubWVudF9vcGVyYXRvcgot
ICAgIDogRVFVQUwgICAgICAgIHsgJCQub3AgPSBFT3BBc3NpZ247IH0KLSAgICB8IE1VTF9BU1NJ
R04gICB7ICQkLm9wID0gRU9wTXVsQXNzaWduOyB9Ci0gICAgfCBESVZfQVNTSUdOICAgeyAkJC5v
cCA9IEVPcERpdkFzc2lnbjsgfQotICAgIHwgQUREX0FTU0lHTiAgIHsgJCQub3AgPSBFT3BBZGRB
c3NpZ247IH0KLSAgICB8IFNVQl9BU1NJR04gICB7ICQkLm9wID0gRU9wU3ViQXNzaWduOyB9Ci0g
ICAgOwotCi1leHByZXNzaW9uCi0gICAgOiBhc3NpZ25tZW50X2V4cHJlc3Npb24gewotICAgICAg
ICAkJCA9ICQxOwotICAgIH0KLSAgICB8IGV4cHJlc3Npb24gQ09NTUEgYXNzaWdubWVudF9leHBy
ZXNzaW9uIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29tbWEoJDEs
ICQzLCBAMik7Ci0gICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5i
aW5hcnlPcEVycm9yKEAyLCAiLCIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29t
cGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
ICAgICAkJCA9ICQzOwotICAgICAgICB9Ci0gICAgfQotICAgIDsKLQotY29uc3RhbnRfZXhwcmVz
c2lvbgotICAgIDogY29uZGl0aW9uYWxfZXhwcmVzc2lvbiB7Ci0gICAgICAgIGlmIChjb250ZXh0
LT5jb25zdEVycm9yQ2hlY2soJDEpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICAkJCA9ICQxOwotICAgIH0KLSAgICA7Ci0KLWRlY2xhcmF0aW9uCi0gICAgOiBmdW5j
dGlvbl9wcm90b3R5cGUgU0VNSUNPTE9OICAgewotICAgICAgICBURnVuY3Rpb24gJmZ1bmN0aW9u
ID0gKigkMS5mdW5jdGlvbik7Ci0gICAgICAgIAotICAgICAgICBUSW50ZXJtQWdncmVnYXRlICpw
cm90b3R5cGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKLSAgICAgICAgcHJvdG90eXBlLT5zZXRU
eXBlKGZ1bmN0aW9uLmdldFJldHVyblR5cGUoKSk7Ci0gICAgICAgIHByb3RvdHlwZS0+c2V0TmFt
ZShmdW5jdGlvbi5nZXROYW1lKCkpOwotICAgICAgICAKLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCk7IGkrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgY29uc3QgVFBhcmFtZXRlciAmcGFyYW0gPSBmdW5jdGlvbi5nZXRQYXJhbShpKTsKLSAg
ICAgICAgICAgIGlmIChwYXJhbS5uYW1lICE9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgVFZhcmlhYmxlIHZhcmlhYmxlKHBhcmFtLm5hbWUsICpwYXJhbS50eXBlKTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBwcm90b3R5cGUgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShwcm90b3R5cGUsIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRT
eW1ib2wodmFyaWFibGUuZ2V0VW5pcXVlSWQoKSwgdmFyaWFibGUuZ2V0TmFtZSgpLCB2YXJpYWJs
ZS5nZXRUeXBlKCksIEAxKSwgQDEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHByb3RvdHlwZSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5ncm93QWdncmVnYXRlKHByb3RvdHlwZSwgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZFN5bWJvbCgwLCAiIiwgKnBhcmFtLnR5cGUsIEAxKSwgQDEpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBwcm90b3R5cGUtPnNldE9wKEVPcFByb3RvdHlwZSk7
Ci0gICAgICAgICQkID0gcHJvdG90eXBlOwotCi0gICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxl
LnBvcCgpOwotICAgIH0KLSAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IFNFTUlDT0xPTiB7Ci0g
ICAgICAgIGlmICgkMS5pbnRlcm1BZ2dyZWdhdGUpCi0gICAgICAgICAgICAkMS5pbnRlcm1BZ2dy
ZWdhdGUtPnNldE9wKEVPcERlY2xhcmF0aW9uKTsKLSAgICAgICAgJCQgPSAkMS5pbnRlcm1BZ2dy
ZWdhdGU7Ci0gICAgfQotICAgIHwgUFJFQ0lTSU9OIHByZWNpc2lvbl9xdWFsaWZpZXIgdHlwZV9z
cGVjaWZpZXJfbm9fcHJlYyBTRU1JQ09MT04gewotICAgICAgICBpZiAoKCQyID09IEVicEhpZ2gp
ICYmIChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikgJiYgIWNvbnRl
eHQtPmZyYWdtZW50UHJlY2lzaW9uSGlnaCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
QDEsICJwcmVjaXNpb24gaXMgbm90IHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXIiLCAiaGln
aHAiKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoIWNvbnRleHQtPnN5bWJvbFRhYmxlLnNldERlZmF1bHRQcmVjaXNpb24oICQzLCAkMiAp
KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgImlsbGVnYWwgdHlwZSBhcmd1bWVu
dCBmb3IgZGVmYXVsdCBwcmVjaXNpb24gcXVhbGlmaWVyIiwgZ2V0QmFzaWNTdHJpbmcoJDMudHlw
ZSkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAg
ICQkID0gMDsKLSAgICB9Ci0gICAgOwotCi1mdW5jdGlvbl9wcm90b3R5cGUKLSAgICA6IGZ1bmN0
aW9uX2RlY2xhcmF0b3IgUklHSFRfUEFSRU4gIHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gTXVs
dGlwbGUgZGVjbGFyYXRpb25zIG9mIHRoZSBzYW1lIGZ1bmN0aW9uIGFyZSBhbGxvd2VkLgotICAg
ICAgICAvLwotICAgICAgICAvLyBJZiB0aGlzIGlzIGEgZGVmaW5pdGlvbiwgdGhlIGRlZmluaXRp
b24gcHJvZHVjdGlvbiBjb2RlIHdpbGwgY2hlY2sgZm9yIHJlZGVmaW5pdGlvbnMKLSAgICAgICAg
Ly8gKHdlIGRvbid0IGtub3cgYXQgdGhpcyBwb2ludCBpZiBpdCdzIGEgZGVmaW5pdGlvbiBvciBu
b3QpLgotICAgICAgICAvLwotICAgICAgICAvLyBSZWRlY2xhcmF0aW9ucyBhcmUgYWxsb3dlZC4g
IEJ1dCwgcmV0dXJuIHR5cGVzIGFuZCBwYXJhbWV0ZXIgcXVhbGlmaWVycyBtdXN0IG1hdGNoLgot
ICAgICAgICAvLwotICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVu
Y3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCQxLT5nZXRNYW5nbGVkTmFtZSgpKSk7
Ci0gICAgICAgIGlmIChwcmV2RGVjKSB7Ci0gICAgICAgICAgICBpZiAocHJldkRlYy0+Z2V0UmV0
dXJuVHlwZSgpICE9ICQxLT5nZXRSZXR1cm5UeXBlKCkpIHsKLSAgICAgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcihAMiwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSBy
ZXR1cm4gdHlwZSIsICQxLT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNTdHJpbmcoKSk7Ci0gICAg
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcmV2RGVjLT5nZXRQYXJhbUNvdW50KCk7ICsraSkg
ewotICAgICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFs
aWZpZXIoKSAhPSAkMS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBt
dXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAkMS0+Z2V0UGFyYW0oaSku
dHlwZS0+Z2V0UXVhbGlmaWVyU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgLy8KLSAgICAgICAgLy8gQ2hlY2sgZm9yIHByZXZpb3VzbHkgZGVjbGFyZWQg
dmFyaWFibGVzIHVzaW5nIHRoZSBzYW1lIG5hbWUuCi0gICAgICAgIC8vCi0gICAgICAgIFRTeW1i
b2wgKnByZXZTeW0gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCQxLT5nZXROYW1lKCkpOwot
ICAgICAgICBpZiAocHJldlN5bSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFwcmV2U3lt
LT5pc0Z1bmN0aW9uKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoQDIsICJyZWRlZmluaXRpb24iLCAkMS0+Z2V0TmFtZSgpLmNfc3RyKCksICJmdW5jdGlv
biIpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEluc2Vy
dCB0aGUgdW5tYW5nbGVkIG5hbWUgdG8gZGV0ZWN0IHBvdGVudGlhbCBmdXR1cmUgcmVkZWZpbml0
aW9uIGFzIGEgdmFyaWFibGUuCi0gICAgICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5nZXRP
dXRlckxldmVsKCktPmluc2VydCgkMS0+Z2V0TmFtZSgpLCAqJDEpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8KLSAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHJlZGVjbGFyYXRpb24sIGl0IGNvdWxk
IGFsc28gYmUgYSBkZWZpbml0aW9uLAotICAgICAgICAvLyBpbiB3aGljaCBjYXNlLCB3ZSB3YW50
IHRvIHVzZSB0aGUgdmFyaWFibGUgbmFtZXMgZnJvbSB0aGlzIG9uZSwgYW5kIG5vdCB0aGUgb25l
IHRoYXQncwotICAgICAgICAvLyBiZWluZyByZWRlY2xhcmVkLiAgU28sIHBhc3MgYmFjayB1cCB0
aGlzIGRlY2xhcmF0aW9uLCBub3QgdGhlIG9uZSBpbiB0aGUgc3ltYm9sIHRhYmxlLgotICAgICAg
ICAvLwotICAgICAgICAkJC5mdW5jdGlvbiA9ICQxOwotCi0gICAgICAgIC8vIFdlJ3JlIGF0IHRo
ZSBpbm5lciBzY29wZSBsZXZlbCBvZiB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudHMgYW5kIGJvZHkg
c3RhdGVtZW50LgotICAgICAgICAvLyBBZGQgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZSB0byB0aGUg
c3Vycm91bmRpbmcgc2NvcGUgaW5zdGVhZC4KLSAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUu
Z2V0T3V0ZXJMZXZlbCgpLT5pbnNlcnQoKiQkLmZ1bmN0aW9uKTsKLSAgICB9Ci0gICAgOwotCi1m
dW5jdGlvbl9kZWNsYXJhdG9yCi0gICAgOiBmdW5jdGlvbl9oZWFkZXIgewotICAgICAgICAkJCA9
ICQxOwotICAgIH0KLSAgICB8IGZ1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMgewotICAg
ICAgICAkJCA9ICQxOwotICAgIH0KLSAgICA7Ci0KLQotZnVuY3Rpb25faGVhZGVyX3dpdGhfcGFy
YW1ldGVycwotICAgIDogZnVuY3Rpb25faGVhZGVyIHBhcmFtZXRlcl9kZWNsYXJhdGlvbiB7Ci0g
ICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyCi0gICAgICAgICQkID0gJDE7Ci0gICAgICAgIGlm
ICgkMi5wYXJhbS50eXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKQotICAgICAgICAgICAg
JDEtPmFkZFBhcmFtZXRlcigkMi5wYXJhbSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRl
bGV0ZSAkMi5wYXJhbS50eXBlOwotICAgIH0KLSAgICB8IGZ1bmN0aW9uX2hlYWRlcl93aXRoX3Bh
cmFtZXRlcnMgQ09NTUEgcGFyYW1ldGVyX2RlY2xhcmF0aW9uIHsKLSAgICAgICAgLy8KLSAgICAg
ICAgLy8gT25seSBmaXJzdCBwYXJhbWV0ZXIgb2Ygb25lLXBhcmFtZXRlciBmdW5jdGlvbnMgY2Fu
IGJlIHZvaWQKLSAgICAgICAgLy8gVGhlIGNoZWNrIGZvciBuYW1lZCBwYXJhbWV0ZXJzIG5vdCBi
ZWluZyB2b2lkIGlzIGRvbmUgaW4gcGFyYW1ldGVyX2RlY2xhcmF0b3IKLSAgICAgICAgLy8KLSAg
ICAgICAgaWYgKCQzLnBhcmFtLnR5cGUtPmdldEJhc2ljVHlwZSgpID09IEVidFZvaWQpIHsKLSAg
ICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBUaGlzIHBhcmFtZXRlciA+IGZpcnN0IGlzIHZv
aWQKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgImNhbm5v
dCBiZSBhbiBhcmd1bWVudCB0eXBlIGV4Y2VwdCBmb3IgJyh2b2lkKSciLCAidm9pZCIpOwotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgZGVsZXRlICQzLnBhcmFt
LnR5cGU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBBZGQgdGhlIHBhcmFtZXRl
cgotICAgICAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgICAgICQxLT5hZGRQYXJhbWV0ZXIoJDMu
cGFyYW0pOwotICAgICAgICB9Ci0gICAgfQotICAgIDsKLQotZnVuY3Rpb25faGVhZGVyCi0gICAg
OiBmdWxseV9zcGVjaWZpZWRfdHlwZSBJREVOVElGSUVSIExFRlRfUEFSRU4gewotICAgICAgICBp
ZiAoJDEucXVhbGlmaWVyICE9IEV2cUdsb2JhbCAmJiAkMS5xdWFsaWZpZXIgIT0gRXZxVGVtcG9y
YXJ5KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgIm5vIHF1YWxpZmllcnMgYWxs
b3dlZCBmb3IgZnVuY3Rpb24gcmV0dXJuIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmll
cikpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAg
IC8vIG1ha2Ugc3VyZSBhIHNhbXBsZXIgaXMgbm90IGludm9sdmVkIGFzIHdlbGwuLi4KLSAgICAg
ICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soQDIsICQxKSkKLSAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICAvLyBBZGQgdGhlIGZ1bmN0aW9u
IGFzIGEgcHJvdG90eXBlIGFmdGVyIHBhcnNpbmcgaXQgKHdlIGRvIG5vdCBzdXBwb3J0IHJlY3Vy
c2lvbikKLSAgICAgICAgVEZ1bmN0aW9uICpmdW5jdGlvbjsKLSAgICAgICAgVFR5cGUgdHlwZSgk
MSk7Ci0gICAgICAgIGZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigkMi5zdHJpbmcsIHR5cGUpOwot
ICAgICAgICAkJCA9IGZ1bmN0aW9uOwotICAgICAgICAKLSAgICAgICAgY29udGV4dC0+c3ltYm9s
VGFibGUucHVzaCgpOwotICAgIH0KLSAgICA7Ci0KLXBhcmFtZXRlcl9kZWNsYXJhdG9yCi0gICAg
Ly8gVHlwZSArIG5hbWUKLSAgICA6IHR5cGVfc3BlY2lmaWVyIGlkZW50aWZpZXIgewotICAgICAg
ICBpZiAoJDEudHlwZSA9PSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcihA
MiwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgJDIuc3RyaW5nLT5jX3N0cigpKTsKLSAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY29u
dGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKEAyLCAqJDIuc3RyaW5nKSkKLSAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHskMi5zdHJpbmcs
IG5ldyBUVHlwZSgkMSl9OwotICAgICAgICAkJC5wYXJhbSA9IHBhcmFtOwotICAgIH0KLSAgICB8
IHR5cGVfc3BlY2lmaWVyIGlkZW50aWZpZXIgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Np
b24gUklHSFRfQlJBQ0tFVCB7Ci0gICAgICAgIC8vIENoZWNrIHRoYXQgd2UgY2FuIG1ha2UgYW4g
YXJyYXkgb3V0IG9mIHRoaXMgdHlwZQotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJy
b3JDaGVjayhAMywgJDEpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAg
ICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soQDIsICokMi5zdHJpbmcpKQotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGludCBzaXplOwotICAgICAg
ICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjayhAMywgJDQsIHNpemUpKQotICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkMS5zZXRBcnJheSh0cnVlLCBzaXpl
KTsKLQotICAgICAgICBUVHlwZSogdHlwZSA9IG5ldyBUVHlwZSgkMSk7Ci0gICAgICAgIFRQYXJh
bWV0ZXIgcGFyYW0gPSB7ICQyLnN0cmluZywgdHlwZSB9OwotICAgICAgICAkJC5wYXJhbSA9IHBh
cmFtOwotICAgIH0KLSAgICA7Ci0KLXBhcmFtZXRlcl9kZWNsYXJhdGlvbgotICAgIC8vCi0gICAg
Ly8gVGhlIG9ubHkgcGFyYW1ldGVyIHF1YWxpZmllciBhIHBhcmFtZXRlciBjYW4gaGF2ZSBhcmUK
LSAgICAvLyBJTl9RVUFMLCBPVVRfUVVBTCwgSU5PVVRfUVVBTCwgb3IgQ09OU1QuCi0gICAgLy8K
LQotICAgIC8vCi0gICAgLy8gVHlwZSArIG5hbWUKLSAgICAvLwotICAgIDogdHlwZV9xdWFsaWZp
ZXIgcGFyYW1ldGVyX3F1YWxpZmllciBwYXJhbWV0ZXJfZGVjbGFyYXRvciB7Ci0gICAgICAgICQk
ID0gJDM7Ci0gICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soQDMsICQxLnF1YWxp
ZmllciwgJDIsICQkLnBhcmFtLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotICAgIH0KLSAgICB8IHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX2RlY2xhcmF0b3Ig
ewotICAgICAgICAkJCA9ICQyOwotICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1ldGVyU2FtcGxl
ckVycm9yQ2hlY2soQDIsICQxLCAqJDIucGFyYW0udHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soQDIsIEV2
cVRlbXBvcmFyeSwgJDEsICQkLnBhcmFtLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotICAgIH0KLSAgICAvLwotICAgIC8vIE9ubHkgdHlwZQotICAgIC8vCi0gICAgfCB0
eXBlX3F1YWxpZmllciBwYXJhbWV0ZXJfcXVhbGlmaWVyIHBhcmFtZXRlcl90eXBlX3NwZWNpZmll
ciB7Ci0gICAgICAgICQkID0gJDM7Ci0gICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hl
Y2soQDMsICQxLnF1YWxpZmllciwgJDIsICQkLnBhcmFtLnR5cGUpKQotICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotICAgIH0KLSAgICB8IHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1l
dGVyX3R5cGVfc3BlY2lmaWVyIHsKLSAgICAgICAgJCQgPSAkMjsKLSAgICAgICAgaWYgKGNvbnRl
eHQtPnBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKEAyLCAkMSwgKiQyLnBhcmFtLnR5cGUpKQot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBpZiAoY29udGV4dC0+cGFy
YW1FcnJvckNoZWNrKEAyLCBFdnFUZW1wb3JhcnksICQxLCAkJC5wYXJhbS50eXBlKSkKLSAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICB9Ci0gICAgOwotCi1wYXJhbWV0ZXJfcXVh
bGlmaWVyCi0gICAgOiAvKiBlbXB0eSAqLyB7Ci0gICAgICAgICQkID0gRXZxSW47Ci0gICAgfQot
ICAgIHwgSU5fUVVBTCB7Ci0gICAgICAgICQkID0gRXZxSW47Ci0gICAgfQotICAgIHwgT1VUX1FV
QUwgewotICAgICAgICAkJCA9IEV2cU91dDsKLSAgICB9Ci0gICAgfCBJTk9VVF9RVUFMIHsKLSAg
ICAgICAgJCQgPSBFdnFJbk91dDsKLSAgICB9Ci0gICAgOwotCi1wYXJhbWV0ZXJfdHlwZV9zcGVj
aWZpZXIKLSAgICA6IHR5cGVfc3BlY2lmaWVyIHsKLSAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9
IHsgMCwgbmV3IFRUeXBlKCQxKSB9OwotICAgICAgICAkJC5wYXJhbSA9IHBhcmFtOwotICAgIH0K
LSAgICA7Ci0KLWluaXRfZGVjbGFyYXRvcl9saXN0Ci0gICAgOiBzaW5nbGVfZGVjbGFyYXRpb24g
ewotICAgICAgICAkJCA9ICQxOwotICAgIH0KLSAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENP
TU1BIGlkZW50aWZpZXIgewotICAgICAgICBpZiAoJDEudHlwZS50eXBlID09IEVidEludmFyaWFu
dCAmJiAhJDMuc3ltYm9sKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcihA
MywgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCAkMy5zdHJp
bmctPmNfc3RyKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9
Ci0KLSAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZFN5bWJvbCgwLCAqJDMuc3RyaW5nLCBUVHlwZSgkMS50eXBlKSwgQDMpOwotICAgICAgICAk
JC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgk
MS5pbnRlcm1Ob2RlLCBzeW1ib2wsIEAzKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjb250ZXh0
LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAzLCAkJC50eXBlKSkKLSAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJy
b3JDaGVjayhAMywgKiQzLnN0cmluZywgJCQudHlwZSwgZmFsc2UpKQotICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwotICAg
ICAgICBpZiAoY29udGV4dC0+bm9uSW5pdEVycm9yQ2hlY2soQDMsICokMy5zdHJpbmcsICQkLnR5
cGUsIHZhcmlhYmxlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
aWYgKHN5bWJvbCAmJiB2YXJpYWJsZSkKLSAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFi
bGUtPmdldFVuaXF1ZUlkKCkpOwotICAgIH0KLSAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENP
TU1BIGlkZW50aWZpZXIgTEVGVF9CUkFDS0VUIFJJR0hUX0JSQUNLRVQgewotICAgICAgICBpZiAo
Y29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhAMywgJDEudHlwZSkpCi0gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRD
b25zdEVycm9yQ2hlY2soQDMsICokMy5zdHJpbmcsICQxLnR5cGUsIHRydWUpKQotICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgICQkID0gJDE7Ci0KLSAgICAgICAgaWYg
KGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soQDQsICQxLnR5cGUpIHx8IGNvbnRleHQtPmFy
cmF5UXVhbGlmaWVyRXJyb3JDaGVjayhANCwgJDEudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgJDEudHlwZS5zZXRBcnJh
eSh0cnVlKTsKLSAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGU7Ci0gICAgICAgICAgICBp
ZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKEA0LCAqJDMuc3RyaW5nLCAkMS50eXBlLCB2YXJp
YWJsZSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0g
ICAgfQotICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgaWRlbnRpZmllciBMRUZUX0JS
QUNLRVQgY29uc3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKLSAgICAgICAgaWYgKGNv
bnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soQDMsICQxLnR5cGUpKQotICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29u
c3RFcnJvckNoZWNrKEAzLCAqJDMuc3RyaW5nLCAkMS50eXBlLCB0cnVlKSkKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICAkJCA9ICQxOwotCi0gICAgICAgIGlmIChj
b250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKEA0LCAkMS50eXBlKSB8fCBjb250ZXh0LT5hcnJh
eVF1YWxpZmllckVycm9yQ2hlY2soQDQsICQxLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGludCBzaXplOwotICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soQDQsICQ1LCBzaXplKSkKLSAg
ICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkMS50eXBlLnNl
dEFycmF5KHRydWUsIHNpemUpOwotICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7
Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKEA0LCAqJDMuc3RyaW5n
LCAkMS50eXBlLCB2YXJpYWJsZSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICAgICAgVFR5cGUgdHlwZSA9IFRUeXBlKCQxLnR5cGUpOwotICAgICAgICAgICAg
dHlwZS5zZXRBcnJheVNpemUoc2l6ZSk7Ci0gICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1Ob2RlLCBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlID8gdmFyaWFibGUtPmdldFVuaXF1
ZUlkKCkgOiAwLCAqJDMuc3RyaW5nLCB0eXBlLCBAMyksIEAzKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIGlkZW50aWZpZXIgRVFVQUwgaW5pdGlh
bGl6ZXIgewotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhA
MywgJDEudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAg
JCQgPSAkMTsKLQotICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKLSAgICAgICAgaWYg
KCFjb250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoQDMsICokMy5zdHJpbmcsICQxLnR5cGUsICQ1
LCBpbnRlcm1Ob2RlKSkgewotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIGJ1aWxkIHRo
ZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAg
ICBpZiAoaW50ZXJtTm9kZSkKLSAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJtTm9kZSwgaW50ZXJtTm9kZSwgQDQp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9
ICQxLmludGVybUFnZ3JlZ2F0ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgOwotCi1zaW5nbGVfZGVjbGFyYXRpb24KLSAgICA6IGZ1bGx5X3Nw
ZWNpZmllZF90eXBlIHsKLSAgICAgICAgJCQudHlwZSA9ICQxOwotICAgICAgICAkJC5pbnRlcm1B
Z2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICIiLCBUVHlwZSgkMSksIEAxKSwgQDEpOwotICAgIH0K
LSAgICB8IGZ1bGx5X3NwZWNpZmllZF90eXBlIGlkZW50aWZpZXIgewotICAgICAgICBUSW50ZXJt
U3ltYm9sKiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICokMi5z
dHJpbmcsIFRUeXBlKCQxKSwgQDIpOwotICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsIEAyKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAyLCAkJC50eXBl
KSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoY29udGV4
dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZywgJCQudHlwZSwgZmFsc2Up
KQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAkJC50eXBlID0gJDE7Ci0KLSAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7Ci0g
ICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0RXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZywgJCQu
dHlwZSwgdmFyaWFibGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAg
ICBpZiAodmFyaWFibGUgJiYgc3ltYm9sKQotICAgICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJp
YWJsZS0+Z2V0VW5pcXVlSWQoKSk7Ci0gICAgfQotICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUg
aWRlbnRpZmllciBMRUZUX0JSQUNLRVQgUklHSFRfQlJBQ0tFVCB7Ci0gICAgICAgIGNvbnRleHQt
PmVycm9yKEAyLCAidW5zaXplZCBhcnJheSBkZWNsYXJhdGlvbnMgbm90IHN1cHBvcnRlZCIsICQy
LnN0cmluZy0+Y19zdHIoKSk7Ci0gICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAg
ICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9s
KDAsICokMi5zdHJpbmcsIFRUeXBlKCQxKSwgQDIpOwotICAgICAgICAkJC5pbnRlcm1BZ2dyZWdh
dGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsIEAyKTsKLSAg
ICAgICAgJCQudHlwZSA9ICQxOwotICAgIH0KLSAgICB8IGZ1bGx5X3NwZWNpZmllZF90eXBlIGlk
ZW50aWZpZXIgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7
Ci0gICAgICAgIFRUeXBlIHR5cGUgPSBUVHlwZSgkMSk7Ci0gICAgICAgIGludCBzaXplOwotICAg
ICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjayhAMiwgJDQsIHNpemUpKQotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB0eXBlLnNldEFycmF5U2l6ZShz
aXplKTsKLSAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFN5bWJvbCgwLCAqJDIuc3RyaW5nLCB0eXBlLCBAMik7Ci0gICAgICAgICQkLmludGVy
bUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwg
QDIpOwotICAgICAgICAKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9y
Q2hlY2soQDIsICQxKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAg
ICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZywgJDEs
IHRydWUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgICQkLnR5
cGUgPSAkMTsKLQotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjayhAMywg
JDEpIHx8IGNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayhAMywgJDEpKQotICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlu
dCBzaXplOwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soQDMs
ICQ0LCBzaXplKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAg
ICAgICAgICQxLnNldEFycmF5KHRydWUsIHNpemUpOwotICAgICAgICAgICAgVFZhcmlhYmxlKiB2
YXJpYWJsZSA9IDA7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKEAz
LCAqJDIuc3RyaW5nLCAkMSwgdmFyaWFibGUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCi0gICAgICAgICAg
ICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBpZGVudGlmaWVyIEVRVUFMIGluaXRp
YWxpemVyIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2so
QDIsICQxKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICAkJC50
eXBlID0gJDE7Ci0KLSAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7Ci0gICAgICAgIGlm
ICghY29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKEAyLCAqJDIuc3RyaW5nLCAkMSwgJDQsIGlu
dGVybU5vZGUpKSB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIEJ1aWxkIGludGVybWVkaWF0ZSBy
ZXByZXNlbnRhdGlvbgotICAgICAgICAvLwotICAgICAgICAgICAgaWYoaW50ZXJtTm9kZSkKLSAg
ICAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
bWFrZUFnZ3JlZ2F0ZShpbnRlcm1Ob2RlLCBAMyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gMDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0
ZSA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgfCBJTlZBUklBTlQgSURFTlRJRklFUiB7Ci0g
ICAgICAgIFZFUlRFWF9PTkxZKCJpbnZhcmlhbnQgZGVjbGFyYXRpb24iLCBAMSk7Ci0gICAgICAg
IGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKEAxLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCksICJpbnZhcmlhbnQgdmFyeWluZyIpKQotICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotICAgICAgICAkJC50eXBlLnNldEJhc2ljKEVidEludmFyaWFudCwgRXZx
SW52YXJpYW50VmFyeWluZ091dCwgQDIpOwotICAgICAgICBpZiAoISQyLnN5bWJvbCkKLSAgICAg
ICAgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJ1bmRlY2xhcmVkIGlkZW50aWZp
ZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgJDIuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgJCQuaW50
ZXJtQWdncmVnYXRlID0gMDsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRTeW1ib2woMCwgKiQyLnN0cmluZywgVFR5cGUoJCQudHlwZSksIEAyKTsKLSAgICAgICAgICAg
ICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRl
KHN5bWJvbCwgQDIpOwotICAgICAgICB9Ci0gICAgfQotICAgIDsKLQotZnVsbHlfc3BlY2lmaWVk
X3R5cGUKLSAgICA6IHR5cGVfc3BlY2lmaWVyIHsKLSAgICAgICAgJCQgPSAkMTsKLQotICAgICAg
ICBpZiAoJDEuYXJyYXkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAibm90IHN1
cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJheSIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotICAgICAgICAgICAgJDEuc2V0QXJyYXkoZmFsc2UpOwotICAgICAgICB9Ci0gICAg
fQotICAgIHwgdHlwZV9xdWFsaWZpZXIgdHlwZV9zcGVjaWZpZXIgIHsKLSAgICAgICAgaWYgKCQy
LmFycmF5KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgIm5vdCBzdXBwb3J0ZWQi
LCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgICAgICQyLnNldEFycmF5KGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
ICgkMS5xdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlICYmCi0gICAgICAgICAgICAoJDIudHlwZSA9
PSBFYnRCb29sIHx8ICQyLnR5cGUgPT0gRWJ0SW50KSkgewotICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoQDIsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoJDEu
cXVhbGlmaWVyKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKCgkMS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8ICQxLnF1YWxpZmll
ciA9PSBFdnFWYXJ5aW5nT3V0KSAmJgotICAgICAgICAgICAgKCQyLnR5cGUgPT0gRWJ0Qm9vbCB8
fCAkMi50eXBlID09IEVidEludCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAi
Y2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikp
OwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgICQk
ID0gJDI7Ci0gICAgICAgICQkLnF1YWxpZmllciA9ICQxLnF1YWxpZmllcjsKLSAgICB9Ci0gICAg
OwotCi10eXBlX3F1YWxpZmllcgotICAgIDogQ09OU1RfUVVBTCB7Ci0gICAgICAgICQkLnNldEJh
c2ljKEVidFZvaWQsIEV2cUNvbnN0LCBAMSk7Ci0gICAgfQotICAgIHwgQVRUUklCVVRFIHsKLSAg
ICAgICAgVkVSVEVYX09OTFkoImF0dHJpYnV0ZSIsIEAxKTsKLSAgICAgICAgaWYgKGNvbnRleHQt
Pmdsb2JhbEVycm9yQ2hlY2soQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSwgImF0dHJpYnV0ZSIpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAg
ICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFBdHRyaWJ1dGUsIEAxKTsKLSAgICB9Ci0gICAgfCBW
QVJZSU5HIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soQDEsIGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgInZhcnlpbmciKSkKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgPT0g
U0hfVkVSVEVYX1NIQURFUikKLSAgICAgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cVZh
cnlpbmdPdXQsIEAxKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0
Vm9pZCwgRXZxVmFyeWluZ0luLCBAMSk7Ci0gICAgfQotICAgIHwgSU5WQVJJQU5UIFZBUllJTkcg
ewotICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjayhAMSwgY29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAiaW52YXJpYW50IHZhcnlpbmciKSkKLSAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUg
PT0gU0hfVkVSVEVYX1NIQURFUikKLSAgICAgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2
cUludmFyaWFudFZhcnlpbmdPdXQsIEAxKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgJCQu
c2V0QmFzaWMoRWJ0Vm9pZCwgRXZxSW52YXJpYW50VmFyeWluZ0luLCBAMSk7Ci0gICAgfQotICAg
IHwgVU5JRk9STSB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKEAxLCBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ1bmlmb3JtIikpCi0gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2
cVVuaWZvcm0sIEAxKTsKLSAgICB9Ci0gICAgOwotCi10eXBlX3NwZWNpZmllcgotICAgIDogdHlw
ZV9zcGVjaWZpZXJfbm9fcHJlYyB7Ci0gICAgICAgICQkID0gJDE7Ci0KLSAgICAgICAgaWYgKCQk
LnByZWNpc2lvbiA9PSBFYnBVbmRlZmluZWQpIHsKLSAgICAgICAgICAgICQkLnByZWNpc2lvbiA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmdldERlZmF1bHRQcmVjaXNpb24oJDEudHlwZSk7Ci0gICAg
ICAgICAgICBpZiAoY29udGV4dC0+cHJlY2lzaW9uRXJyb3JDaGVjayhAMSwgJCQucHJlY2lzaW9u
LCAkMS50eXBlKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICB8IHByZWNpc2lvbl9xdWFsaWZpZXIgdHlw
ZV9zcGVjaWZpZXJfbm9fcHJlYyB7Ci0gICAgICAgICQkID0gJDI7Ci0gICAgICAgICQkLnByZWNp
c2lvbiA9ICQxOwotICAgIH0KLSAgICA7Ci0KLXByZWNpc2lvbl9xdWFsaWZpZXIKLSAgICA6IEhJ
R0hfUFJFQ0lTSU9OIHsKLSAgICAgICAgJCQgPSBFYnBIaWdoOwotICAgIH0KLSAgICB8IE1FRElV
TV9QUkVDSVNJT04gewotICAgICAgICAkJCA9IEVicE1lZGl1bTsKLSAgICB9Ci0gICAgfCBMT1df
UFJFQ0lTSU9OICB7Ci0gICAgICAgICQkID0gRWJwTG93OwotICAgIH0KLSAgICA7Ci0KLXR5cGVf
c3BlY2lmaWVyX25vX3ByZWMKLSAgICA6IHR5cGVfc3BlY2lmaWVyX25vbmFycmF5IHsKLSAgICAg
ICAgJCQgPSAkMTsKLSAgICB9Ci0gICAgfCB0eXBlX3NwZWNpZmllcl9ub25hcnJheSBMRUZUX0JS
QUNLRVQgY29uc3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKLSAgICAgICAgJCQgPSAk
MTsKLQotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjayhAMiwgJDEpKQot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIGludCBzaXplOwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hl
Y2soQDIsICQzLCBzaXplKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgICAgICAgICAkJC5zZXRBcnJheSh0cnVlLCBzaXplKTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICA7Ci0KLXR5cGVfc3BlY2lmaWVyX25vbmFycmF5Ci0gICAgOiBWT0lEX1RZUEUgewotICAgICAg
ICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkg
PyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQs
IHF1YWwsIEAxKTsKLSAgICB9Ci0gICAgfCBGTE9BVF9UWVBFIHsKLSAgICAgICAgVFF1YWxpZmll
ciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFs
IDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgQDEp
OwotICAgIH0KLSAgICB8IElOVF9UWVBFIHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsIEAxKTsKLSAgICB9Ci0gICAg
fCBCT09MX1RZUEUgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAg
ICQkLnNldEJhc2ljKEVidEJvb2wsIHF1YWwsIEAxKTsKLSAgICB9Ci0gICAgfCBWRUMyIHsKLSAg
ICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRG
bG9hdCwgcXVhbCwgQDEpOwotICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMik7Ci0gICAgfQotICAg
IHwgVkVDMyB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgJCQu
c2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsKLSAgICAgICAgJCQuc2V0QWdncmVnYXRlKDMp
OwotICAgIH0KLSAgICB8IFZFQzQgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7
Ci0gICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7Ci0gICAgICAgICQkLnNl
dEFnZ3JlZ2F0ZSg0KTsKLSAgICB9Ci0gICAgfCBCVkVDMiB7Ci0gICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgQDEpOwot
ICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMik7Ci0gICAgfQotICAgIHwgQlZFQzMgewotICAgICAg
ICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkg
PyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidEJvb2ws
IHF1YWwsIEAxKTsKLSAgICAgICAgJCQuc2V0QWdncmVnYXRlKDMpOwotICAgIH0KLSAgICB8IEJW
RUM0IHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRH
bG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAkJC5zZXRC
YXNpYyhFYnRCb29sLCBxdWFsLCBAMSk7Ci0gICAgICAgICQkLnNldEFnZ3JlZ2F0ZSg0KTsKLSAg
ICB9Ci0gICAgfCBJVkVDMiB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAg
ICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCBAMSk7Ci0gICAgICAgICQkLnNldEFnZ3Jl
Z2F0ZSgyKTsKLSAgICB9Ci0gICAgfCBJVkVDMyB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKLSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCBAMSk7Ci0gICAgICAg
ICQkLnNldEFnZ3JlZ2F0ZSgzKTsKLSAgICB9Ci0gICAgfCBJVkVDNCB7Ci0gICAgICAgIFRRdWFs
aWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUds
b2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCBA
MSk7Ci0gICAgICAgICQkLnNldEFnZ3JlZ2F0ZSg0KTsKLSAgICB9Ci0gICAgfCBNQVRSSVgyIHsK
LSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxM
ZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAkJC5zZXRCYXNpYyhF
YnRGbG9hdCwgcXVhbCwgQDEpOwotICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMiwgdHJ1ZSk7Ci0g
ICAgfQotICAgIHwgTUFUUklYMyB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
LSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsKLSAgICAgICAgJCQuc2V0
QWdncmVnYXRlKDMsIHRydWUpOwotICAgIH0KLSAgICB8IE1BVFJJWDQgewotICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFs
LCBAMSk7Ci0gICAgICAgICQkLnNldEFnZ3JlZ2F0ZSg0LCB0cnVlKTsKLSAgICB9Ci0gICAgfCBT
QU1QTEVSMkQgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICQk
LnNldEJhc2ljKEVidFNhbXBsZXIyRCwgcXVhbCwgQDEpOwotICAgIH0KLSAgICB8IFNBTVBMRVJD
VUJFIHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRH
bG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAkJC5zZXRC
YXNpYyhFYnRTYW1wbGVyQ3ViZSwgcXVhbCwgQDEpOwotICAgIH0KLSAgICB8IFNBTVBMRVJfRVhU
RVJOQUxfT0VTIHsKLSAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0V4dGVuc2lvbigiR0xf
T0VTX0VHTF9pbWFnZV9leHRlcm5hbCIpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcihA
MSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlckV4dGVybmFsT0VTIik7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyRXh0ZXJuYWxPRVMsIHF1
YWwsIEAxKTsKLSAgICB9Ci0gICAgfCBTQU1QTEVSMkRSRUNUIHsKLSAgICAgICAgaWYgKCFjb250
ZXh0LT5zdXBwb3J0c0V4dGVuc2lvbigiR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlIikpIHsKLSAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAidW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVy
MkRSZWN0Iik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRT
YW1wbGVyMkRSZWN0LCBxdWFsLCBAMSk7Ci0gICAgfQotICAgIHwgc3RydWN0X3NwZWNpZmllciB7
Ci0gICAgICAgICQkID0gJDE7Ci0gICAgICAgICQkLnF1YWxpZmllciA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICB9
Ci0gICAgfCBUWVBFX05BTUUgewotICAgICAgICAvLwotICAgICAgICAvLyBUaGlzIGlzIGZvciB1
c2VyIGRlZmluZWQgdHlwZSBuYW1lcy4gIFRoZSBsZXhpY2FsIHBoYXNlIGxvb2tlZCB1cCB0aGUK
LSAgICAgICAgLy8gdHlwZS4KLSAgICAgICAgLy8KLSAgICAgICAgVFR5cGUmIHN0cnVjdHVyZSA9
IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+KCQxLnN5bWJvbCktPmdldFR5cGUoKTsKLSAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRTdHJ1Y3Qs
IHF1YWwsIEAxKTsKLSAgICAgICAgJCQudXNlckRlZiA9ICZzdHJ1Y3R1cmU7Ci0gICAgfQotICAg
IDsKLQotc3RydWN0X3NwZWNpZmllcgotICAgIDogU1RSVUNUIGlkZW50aWZpZXIgTEVGVF9CUkFD
RSB7IGlmIChjb250ZXh0LT5lbnRlclN0cnVjdERlY2xhcmF0aW9uKEAyLCAqJDIuc3RyaW5nKSkg
Y29udGV4dC0+cmVjb3ZlcigpOyB9IHN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IFJJR0hUX0JSQUNF
IHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjayhAMiwgKiQyLnN0cmlu
ZykpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgVFR5cGUqIHN0
cnVjdHVyZSA9IG5ldyBUVHlwZShuZXcgVFN0cnVjdHVyZSgkMi5zdHJpbmcsICQ1KSk7Ci0gICAg
ICAgIFRWYXJpYWJsZSogdXNlclR5cGVEZWYgPSBuZXcgVFZhcmlhYmxlKCQyLnN0cmluZywgKnN0
cnVjdHVyZSwgdHJ1ZSk7Ci0gICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2Vy
dCgqdXNlclR5cGVEZWYpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgInJlZGVm
aW5pdGlvbiIsICQyLnN0cmluZy0+Y19zdHIoKSwgInN0cnVjdCIpOwotICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgICQkLnNldEJhc2ljKEVidFN0cnVj
dCwgRXZxVGVtcG9yYXJ5LCBAMSk7Ci0gICAgICAgICQkLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7Ci0g
ICAgICAgIGNvbnRleHQtPmV4aXRTdHJ1Y3REZWNsYXJhdGlvbigpOwotICAgIH0KLSAgICB8IFNU
UlVDVCBMRUZUX0JSQUNFIHsgaWYgKGNvbnRleHQtPmVudGVyU3RydWN0RGVjbGFyYXRpb24oQDIs
ICokMi5zdHJpbmcpKSBjb250ZXh0LT5yZWNvdmVyKCk7IH0gc3RydWN0X2RlY2xhcmF0aW9uX2xp
c3QgUklHSFRfQlJBQ0UgewotICAgICAgICBUVHlwZSogc3RydWN0dXJlID0gbmV3IFRUeXBlKG5l
dyBUU3RydWN0dXJlKE5ld1Bvb2xUU3RyaW5nKCIiKSwgJDQpKTsKLSAgICAgICAgJCQuc2V0QmFz
aWMoRWJ0U3RydWN0LCBFdnFUZW1wb3JhcnksIEAxKTsKLSAgICAgICAgJCQudXNlckRlZiA9IHN0
cnVjdHVyZTsKLSAgICAgICAgY29udGV4dC0+ZXhpdFN0cnVjdERlY2xhcmF0aW9uKCk7Ci0gICAg
fQotICAgIDsKLQotc3RydWN0X2RlY2xhcmF0aW9uX2xpc3QKLSAgICA6IHN0cnVjdF9kZWNsYXJh
dGlvbiB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgfQotICAgIHwgc3RydWN0X2RlY2xhcmF0aW9u
X2xpc3Qgc3RydWN0X2RlY2xhcmF0aW9uIHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCAkMi0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIFRGaWVs
ZCogZmllbGQgPSAoKiQyKVtpXTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwg
JCQtPnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCgqJCQpW2pdLT5uYW1lKCkg
PT0gZmllbGQtPm5hbWUoKSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihA
MiwgImR1cGxpY2F0ZSBmaWVsZCBuYW1lIGluIHN0cnVjdHVyZToiLCAic3RydWN0IiwgZmllbGQt
Pm5hbWUoKS5jX3N0cigpKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICQkLT5wdXNo
X2JhY2soZmllbGQpOwotICAgICAgICB9Ci0gICAgfQotICAgIDsKLQotc3RydWN0X2RlY2xhcmF0
aW9uCi0gICAgOiB0eXBlX3NwZWNpZmllciBzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0IFNFTUlDT0xP
TiB7Ci0gICAgICAgICQkID0gJDI7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPnZvaWRFcnJvckNo
ZWNrKEAxLCAoKiQyKVswXS0+bmFtZSgpLCAkMSkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
ICQkLT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIENhcmVm
dWwgbm90IHRvIHJlcGxhY2UgYWxyZWFkeSBrbm93biBhc3BlY3RzIG9mIHR5cGUsIGxpa2UgYXJy
YXktbmVzcwotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIFRUeXBlKiB0eXBlID0gKCokJClb
aV0tPnR5cGUoKTsKLSAgICAgICAgICAgIHR5cGUtPnNldEJhc2ljVHlwZSgkMS50eXBlKTsKLSAg
ICAgICAgICAgIHR5cGUtPnNldE5vbWluYWxTaXplKCQxLnNpemUpOwotICAgICAgICAgICAgdHlw
ZS0+c2V0TWF0cml4KCQxLm1hdHJpeCk7Ci0gICAgICAgICAgICB0eXBlLT5zZXRQcmVjaXNpb24o
JDEucHJlY2lzaW9uKTsKLQotICAgICAgICAgICAgLy8gZG9uJ3QgYWxsb3cgYXJyYXlzIG9mIGFy
cmF5cwotICAgICAgICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkgewotICAgICAgICAgICAgICAg
IGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKEAxLCAkMSkpCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
ICgkMS5hcnJheSkKLSAgICAgICAgICAgICAgICB0eXBlLT5zZXRBcnJheVNpemUoJDEuYXJyYXlT
aXplKTsKLSAgICAgICAgICAgIGlmICgkMS51c2VyRGVmKQotICAgICAgICAgICAgICAgIHR5cGUt
PnNldFN0cnVjdCgkMS51c2VyRGVmLT5nZXRTdHJ1Y3QoKSk7Ci0KLSAgICAgICAgICAgIGlmIChj
b250ZXh0LT5zdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayhAMSwgKigqJCQpW2ldKSkKLSAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgOwotCi1z
dHJ1Y3RfZGVjbGFyYXRvcl9saXN0Ci0gICAgOiBzdHJ1Y3RfZGVjbGFyYXRvciB7Ci0gICAgICAg
ICQkID0gTmV3UG9vbFRGaWVsZExpc3QoKTsKLSAgICAgICAgJCQtPnB1c2hfYmFjaygkMSk7Ci0g
ICAgfQotICAgIHwgc3RydWN0X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBzdHJ1Y3RfZGVjbGFyYXRv
ciB7Ci0gICAgICAgICQkLT5wdXNoX2JhY2soJDMpOwotICAgIH0KLSAgICA7Ci0KLXN0cnVjdF9k
ZWNsYXJhdG9yCi0gICAgOiBpZGVudGlmaWVyIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnJlc2Vy
dmVkRXJyb3JDaGVjayhAMSwgKiQxLnN0cmluZykpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0KLSAgICAgICAgVFR5cGUqIHR5cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5k
ZWZpbmVkKTsKLSAgICAgICAgJCQgPSBuZXcgVEZpZWxkKHR5cGUsICQxLnN0cmluZyk7Ci0gICAg
fQotICAgIHwgaWRlbnRpZmllciBMRUZUX0JSQUNLRVQgY29uc3RhbnRfZXhwcmVzc2lvbiBSSUdI
VF9CUkFDS0VUIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjayhAMSwg
KiQxLnN0cmluZykpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAg
VFR5cGUqIHR5cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKLSAgICAgICAg
aW50IHNpemUgPSAwOwotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjayhA
MywgJDMsIHNpemUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB0
eXBlLT5zZXRBcnJheVNpemUoc2l6ZSk7Ci0KLSAgICAgICAgJCQgPSBuZXcgVEZpZWxkKHR5cGUs
ICQxLnN0cmluZyk7Ci0gICAgfQotICAgIDsKLQotaW5pdGlhbGl6ZXIKLSAgICA6IGFzc2lnbm1l
bnRfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KLSAgICA7Ci0KLWRlY2xhcmF0aW9uX3N0YXRlbWVu
dAotICAgIDogZGVjbGFyYXRpb24geyAkJCA9ICQxOyB9Ci0gICAgOwotCi1zdGF0ZW1lbnQKLSAg
ICA6IGNvbXBvdW5kX3N0YXRlbWVudCAgeyAkJCA9ICQxOyB9Ci0gICAgfCBzaW1wbGVfc3RhdGVt
ZW50ICAgIHsgJCQgPSAkMTsgfQotICAgIDsKLQotLy8gR3JhbW1hciBOb3RlOiAgTm8gbGFiZWxl
ZCBzdGF0ZW1lbnRzOyAnZ290bycgaXMgbm90IHN1cHBvcnRlZC4KLQotc2ltcGxlX3N0YXRlbWVu
dAotICAgIDogZGVjbGFyYXRpb25fc3RhdGVtZW50IHsgJCQgPSAkMTsgfQotICAgIHwgZXhwcmVz
c2lvbl9zdGF0ZW1lbnQgIHsgJCQgPSAkMTsgfQotICAgIHwgc2VsZWN0aW9uX3N0YXRlbWVudCAg
IHsgJCQgPSAkMTsgfQotICAgIHwgaXRlcmF0aW9uX3N0YXRlbWVudCAgIHsgJCQgPSAkMTsgfQot
ICAgIHwganVtcF9zdGF0ZW1lbnQgICAgICAgIHsgJCQgPSAkMTsgfQotICAgIDsKLQotY29tcG91
bmRfc3RhdGVtZW50Ci0gICAgOiBMRUZUX0JSQUNFIFJJR0hUX0JSQUNFIHsgJCQgPSAwOyB9Ci0g
ICAgfCBMRUZUX0JSQUNFIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyB9IHN0YXRlbWVu
dF9saXN0IHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7IH0gUklHSFRfQlJBQ0UgewotICAg
ICAgICBpZiAoJDMgIT0gMCkgewotICAgICAgICAgICAgJDMtPnNldE9wKEVPcFNlcXVlbmNlKTsK
LSAgICAgICAgICAgICQzLT5zZXRMaW5lKEAkKTsKLSAgICAgICAgfQotICAgICAgICAkJCA9ICQz
OwotICAgIH0KLSAgICA7Ci0KLXN0YXRlbWVudF9ub19uZXdfc2NvcGUKLSAgICA6IGNvbXBvdW5k
X3N0YXRlbWVudF9ub19uZXdfc2NvcGUgeyAkJCA9ICQxOyB9Ci0gICAgfCBzaW1wbGVfc3RhdGVt
ZW50ICAgICAgICAgICAgICAgIHsgJCQgPSAkMTsgfQotICAgIDsKLQotc3RhdGVtZW50X3dpdGhf
c2NvcGUKLSAgICA6IHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyB9IGNvbXBvdW5kX3N0
YXRlbWVudF9ub19uZXdfc2NvcGUgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgJCQgPSAk
MjsgfQotICAgIHwgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0gc2ltcGxlX3N0YXRl
bWVudCAgICAgICAgICAgICAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOyAkJCA9ICQy
OyB9Ci0gICAgOwotCi1jb21wb3VuZF9zdGF0ZW1lbnRfbm9fbmV3X3Njb3BlCi0gICAgLy8gU3Rh
dGVtZW50IHRoYXQgZG9lc24ndCBjcmVhdGUgYSBuZXcgc2NvcGUsIGZvciBzZWxlY3Rpb25fc3Rh
dGVtZW50LCBpdGVyYXRpb25fc3RhdGVtZW50Ci0gICAgOiBMRUZUX0JSQUNFIFJJR0hUX0JSQUNF
IHsKLSAgICAgICAgJCQgPSAwOwotICAgIH0KLSAgICB8IExFRlRfQlJBQ0Ugc3RhdGVtZW50X2xp
c3QgUklHSFRfQlJBQ0UgewotICAgICAgICBpZiAoJDIpIHsKLSAgICAgICAgICAgICQyLT5zZXRP
cChFT3BTZXF1ZW5jZSk7Ci0gICAgICAgICAgICAkMi0+c2V0TGluZShAJCk7Ci0gICAgICAgIH0K
LSAgICAgICAgJCQgPSAkMjsKLSAgICB9Ci0gICAgOwotCi1zdGF0ZW1lbnRfbGlzdAotICAgIDog
c3RhdGVtZW50IHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3Jl
Z2F0ZSgkMSwgQCQpOwotICAgIH0KLSAgICB8IHN0YXRlbWVudF9saXN0IHN0YXRlbWVudCB7Ci0g
ICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEsICQyLCBA
JCk7Ci0gICAgfQotICAgIDsKLQotZXhwcmVzc2lvbl9zdGF0ZW1lbnQKLSAgICA6IFNFTUlDT0xP
TiAgeyAkJCA9IDA7IH0KLSAgICB8IGV4cHJlc3Npb24gU0VNSUNPTE9OICB7ICQkID0gc3RhdGlj
X2Nhc3Q8VEludGVybU5vZGUqPigkMSk7IH0KLSAgICA7Ci0KLXNlbGVjdGlvbl9zdGF0ZW1lbnQK
LSAgICA6IElGIExFRlRfUEFSRU4gZXhwcmVzc2lvbiBSSUdIVF9QQVJFTiBzZWxlY3Rpb25fcmVz
dF9zdGF0ZW1lbnQgewotICAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2soQDEsICQz
KSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgJCQgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkU2VsZWN0aW9uKCQzLCAkNSwgQDEpOwotICAgIH0KLSAgICA7Ci0K
LXNlbGVjdGlvbl9yZXN0X3N0YXRlbWVudAotICAgIDogc3RhdGVtZW50X3dpdGhfc2NvcGUgRUxT
RSBzdGF0ZW1lbnRfd2l0aF9zY29wZSB7Ci0gICAgICAgICQkLm5vZGUxID0gJDE7Ci0gICAgICAg
ICQkLm5vZGUyID0gJDM7Ci0gICAgfQotICAgIHwgc3RhdGVtZW50X3dpdGhfc2NvcGUgewotICAg
ICAgICAkJC5ub2RlMSA9ICQxOwotICAgICAgICAkJC5ub2RlMiA9IDA7Ci0gICAgfQotICAgIDsK
LQotLy8gR3JhbW1hciBOb3RlOiAgTm8gJ3N3aXRjaCcuICBTd2l0Y2ggc3RhdGVtZW50cyBub3Qg
c3VwcG9ydGVkLgotCi1jb25kaXRpb24KLSAgICAvLyBJbiAxOTk2IGMrKyBkcmFmdCwgY29uZGl0
aW9ucyBjYW4gaW5jbHVkZSBzaW5nbGUgZGVjbGFyYXRpb25zCi0gICAgOiBleHByZXNzaW9uIHsK
LSAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgaWYgKGNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCQx
LT5nZXRMaW5lKCksICQxKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICB9
Ci0gICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBpZGVudGlmaWVyIEVRVUFMIGluaXRpYWxpemVy
IHsKLSAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7Ci0gICAgICAgIGlmIChjb250ZXh0
LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAyLCAkMSkpCi0gICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVjayhAMiwgJDEp
KQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlmICghY29udGV4
dC0+ZXhlY3V0ZUluaXRpYWxpemVyKEAyLCAqJDIuc3RyaW5nLCAkMSwgJDQsIGludGVybU5vZGUp
KQotICAgICAgICAgICAgJCQgPSAkNDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkJCA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgOwotCi1pdGVyYXRpb25fc3RhdGVtZW50Ci0gICAgOiBXSElMRSBMRUZUX1BBUkVOIHsgY29u
dGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK2NvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0g
Y29uZGl0aW9uIFJJR0hUX1BBUkVOIHN0YXRlbWVudF9ub19uZXdfc2NvcGUgewotICAgICAgICBj
b250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkTG9vcChFTG9vcFdoaWxlLCAwLCAkNCwgMCwgJDYsIEAxKTsKLSAgICAgICAgLS1j
b250ZXh0LT5sb29wTmVzdGluZ0xldmVsOwotICAgIH0KLSAgICB8IERPIHsgKytjb250ZXh0LT5s
b29wTmVzdGluZ0xldmVsOyB9IHN0YXRlbWVudF93aXRoX3Njb3BlIFdISUxFIExFRlRfUEFSRU4g
ZXhwcmVzc2lvbiBSSUdIVF9QQVJFTiBTRU1JQ09MT04gewotICAgICAgICBpZiAoY29udGV4dC0+
Ym9vbEVycm9yQ2hlY2soQDgsICQ2KSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LQotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRMb29wKEVMb29wRG9XaGls
ZSwgMCwgJDYsIDAsICQzLCBANCk7Ci0gICAgICAgIC0tY29udGV4dC0+bG9vcE5lc3RpbmdMZXZl
bDsKLSAgICB9Ci0gICAgfCBGT1IgTEVGVF9QQVJFTiB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1
c2goKTsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyB9IGZvcl9pbml0X3N0YXRlbWVudCBm
b3JfcmVzdF9zdGF0ZW1lbnQgUklHSFRfUEFSRU4gc3RhdGVtZW50X25vX25ld19zY29wZSB7Ci0g
ICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwotICAgICAgICAkJCA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRMb29wKEVMb29wRm9yLCAkNCwgcmVpbnRlcnByZXRfY2FzdDxUSW50
ZXJtVHlwZWQqPigkNS5ub2RlMSksIHJlaW50ZXJwcmV0X2Nhc3Q8VEludGVybVR5cGVkKj4oJDUu
bm9kZTIpLCAkNywgQDEpOwotICAgICAgICAtLWNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7Ci0g
ICAgfQotICAgIDsKLQotZm9yX2luaXRfc3RhdGVtZW50Ci0gICAgOiBleHByZXNzaW9uX3N0YXRl
bWVudCB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgfQotICAgIHwgZGVjbGFyYXRpb25fc3RhdGVt
ZW50IHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICB9Ci0gICAgOwotCi1jb25kaXRpb25vcHQKLSAg
ICA6IGNvbmRpdGlvbiB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgfQotICAgIHwgLyogTWF5IGJl
IG51bGwgKi8gewotICAgICAgICAkJCA9IDA7Ci0gICAgfQotICAgIDsKLQotZm9yX3Jlc3Rfc3Rh
dGVtZW50Ci0gICAgOiBjb25kaXRpb25vcHQgU0VNSUNPTE9OIHsKLSAgICAgICAgJCQubm9kZTEg
PSAkMTsKLSAgICAgICAgJCQubm9kZTIgPSAwOwotICAgIH0KLSAgICB8IGNvbmRpdGlvbm9wdCBT
RU1JQ09MT04gZXhwcmVzc2lvbiAgewotICAgICAgICAkJC5ub2RlMSA9ICQxOwotICAgICAgICAk
JC5ub2RlMiA9ICQzOwotICAgIH0KLSAgICA7Ci0KLWp1bXBfc3RhdGVtZW50Ci0gICAgOiBDT05U
SU5VRSBTRU1JQ09MT04gewotICAgICAgICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8
PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgImNvbnRpbnVlIHN0YXRlbWVu
dCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
QnJhbmNoKEVPcENvbnRpbnVlLCBAMSk7Ci0gICAgfQotICAgIHwgQlJFQUsgU0VNSUNPTE9OIHsK
LSAgICAgICAgaWYgKGNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPD0gMCkgewotICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoQDEsICJicmVhayBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxv
b3BzIiwgIiIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0g
ICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BCcmVhaywgQDEp
OwotICAgIH0KLSAgICB8IFJFVFVSTiBTRU1JQ09MT04gewotICAgICAgICAkJCA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCBAMSk7Ci0gICAgICAgIGlmIChjb250
ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgIm5vbi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0
dXJuIGEgdmFsdWUiLCAicmV0dXJuIik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgfCBSRVRVUk4gZXhwcmVzc2lvbiBTRU1JQ09MT04gewot
ICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCAk
MiwgQDEpOwotICAgICAgICBjb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IHRydWU7Ci0g
ICAgICAgIGlmIChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSA9
PSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgInZvaWQgZnVuY3Rp
b24gY2Fubm90IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIpOwotICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotICAgICAgICB9IGVsc2UgaWYgKCooY29udGV4dC0+Y3VycmVudEZ1bmN0
aW9uVHlwZSkgIT0gJDItPmdldFR5cGUoKSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
QDEsICJmdW5jdGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6IiwgInJldHVybiIpOwot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgfQotICAgIHwg
RElTQ0FSRCBTRU1JQ09MT04gewotICAgICAgICBGUkFHX09OTFkoImRpc2NhcmQiLCBAMSk7Ci0g
ICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BLaWxsLCBAMSk7
Ci0gICAgfQotICAgIDsKLQotLy8gR3JhbW1hciBOb3RlOiAgTm8gJ2dvdG8nLiAgR290b3MgYXJl
IG5vdCBzdXBwb3J0ZWQuCi0KLXRyYW5zbGF0aW9uX3VuaXQKLSAgICA6IGV4dGVybmFsX2RlY2xh
cmF0aW9uIHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgY29udGV4dC0+dHJlZVJvb3QgPSAk
JDsKLSAgICB9Ci0gICAgfCB0cmFuc2xhdGlvbl91bml0IGV4dGVybmFsX2RlY2xhcmF0aW9uIHsK
LSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMSwgJDIs
IEAkKTsKLSAgICAgICAgY29udGV4dC0+dHJlZVJvb3QgPSAkJDsKLSAgICB9Ci0gICAgOwotCi1l
eHRlcm5hbF9kZWNsYXJhdGlvbgotICAgIDogZnVuY3Rpb25fZGVmaW5pdGlvbiB7Ci0gICAgICAg
ICQkID0gJDE7Ci0gICAgfQotICAgIHwgZGVjbGFyYXRpb24gewotICAgICAgICAkJCA9ICQxOwot
ICAgIH0KLSAgICA7Ci0KLWZ1bmN0aW9uX2RlZmluaXRpb24KLSAgICA6IGZ1bmN0aW9uX3Byb3Rv
dHlwZSB7Ci0gICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb24gPSAkMS5mdW5jdGlvbjsKLSAgICAg
ICAgCi0gICAgICAgIGNvbnN0IFRTeW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5maW5kQnVpbHRJbihmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSk7Ci0gICAgICAgIAotICAg
ICAgICBpZiAoYnVpbHRJbikKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
QDEsICJidWlsdC1pbiBmdW5jdGlvbnMgY2Fubm90IGJlIHJlZGVmaW5lZCIsIGZ1bmN0aW9uLT5n
ZXROYW1lKCkuY19zdHIoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0
PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoZnVuY3Rpb24tPmdldE1hbmds
ZWROYW1lKCkpKTsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gTm90ZTogICdwcmV2RGVjJyBjb3Vs
ZCBiZSAnZnVuY3Rpb24nIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUgc2VlbiBmdW5j
dGlvbgotICAgICAgICAvLyBhcyBpdCB3b3VsZCBoYXZlIGp1c3QgYmVlbiBwdXQgaW4gdGhlIHN5
bWJvbCB0YWJsZS4gIE90aGVyd2lzZSwgd2UncmUgbG9va2luZyB1cAotICAgICAgICAvLyBhbiBl
YXJsaWVyIG9jY3VyYW5jZS4KLSAgICAgICAgLy8KLSAgICAgICAgaWYgKHByZXZEZWMtPmlzRGVm
aW5lZCgpKSB7Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gVGhlbiB0aGlzIGZ1bmN0
aW9uIGFscmVhZHkgaGFzIGEgYm9keS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBjb250
ZXh0LT5lcnJvcihAMSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9uLT5n
ZXROYW1lKCkuY19zdHIoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcHJldkRlYy0+c2V0RGVmaW5lZCgpOwotCi0gICAgICAgIC8vCi0gICAg
ICAgIC8vIFJhaXNlIGVycm9yIG1lc3NhZ2UgaWYgbWFpbiBmdW5jdGlvbiB0YWtlcyBhbnkgcGFy
YW1ldGVycyBvciByZXR1cm4gYW55dGhpbmcgb3RoZXIgdGhhbiB2b2lkCi0gICAgICAgIC8vCi0g
ICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0TmFtZSgpID09ICJtYWluIikgewotICAgICAgICAgICAg
aWYgKGZ1bmN0aW9uLT5nZXRQYXJhbUNvdW50KCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoQDEsICJmdW5jdGlvbiBjYW5ub3QgdGFrZSBhbnkgcGFyYW1ldGVyKHMpIiwg
ZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZnVuY3Rpb24tPmdldFJl
dHVyblR5cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoQDEsICIiLCBmdW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2lj
U3RyaW5nKCksICJtYWluIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIpOwotICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIFJlbWVtYmVyIHRoZSByZXR1cm4gdHlwZSBmb3IgbGF0
ZXIgY2hlY2tpbmcgZm9yIFJFVFVSTiBzdGF0ZW1lbnRzLgotICAgICAgICAvLwotICAgICAgICBj
b250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlID0gJihwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkp
OwotICAgICAgICBjb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IGZhbHNlOwotCi0gICAg
ICAgIC8vCi0gICAgICAgIC8vIEluc2VydCBwYXJhbWV0ZXJzIGludG8gdGhlIHN5bWJvbCB0YWJs
ZS4KLSAgICAgICAgLy8gSWYgdGhlIHBhcmFtZXRlciBoYXMgbm8gbmFtZSwgaXQncyBub3QgYW4g
ZXJyb3IsIGp1c3QgZG9uJ3QgaW5zZXJ0IGl0Ci0gICAgICAgIC8vIChjb3VsZCBiZSB1c2VkIGZv
ciB1bnVzZWQgYXJncykuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIEFsc28sIGFjY3VtdWxhdGUg
dGhlIGxpc3Qgb2YgcGFyYW1ldGVycyBpbnRvIHRoZSBISUwsIHNvIGxvd2VyIGxldmVsIGNvZGUK
LSAgICAgICAgLy8ga25vd3Mgd2hlcmUgdG8gZmluZCBwYXJhbWV0ZXJzLgotICAgICAgICAvLwot
ICAgICAgICBUSW50ZXJtQWdncmVnYXRlKiBwYXJhbU5vZGVzID0gbmV3IFRJbnRlcm1BZ2dyZWdh
dGU7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb24tPmdldFBhcmFtQ291
bnQoKTsgaSsrKSB7Ci0gICAgICAgICAgICBjb25zdCBUUGFyYW1ldGVyJiBwYXJhbSA9IGZ1bmN0
aW9uLT5nZXRQYXJhbShpKTsKLSAgICAgICAgICAgIGlmIChwYXJhbS5uYW1lICE9IDApIHsKLSAg
ICAgICAgICAgICAgICBUVmFyaWFibGUgKnZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZShwYXJhbS5u
YW1lLCAqcGFyYW0udHlwZSk7Ci0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAv
LyBJbnNlcnQgdGhlIHBhcmFtZXRlcnMgd2l0aCBuYW1lIGluIHRoZSBzeW1ib2wgdGFibGUuCi0g
ICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xU
YWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcihAMSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICAg
ICAgZGVsZXRlIHZhcmlhYmxlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IC8vCi0gICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBwYXJhbWV0ZXIgdG8gdGhlIEhJTAotICAg
ICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgcGFyYW1Ob2RlcyA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJhbU5vZGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlh
YmxlLT5nZXRVbmlxdWVJZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRO
YW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBAMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEAxKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
cGFyYW1Ob2RlcyA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKHBhcmFtTm9k
ZXMsIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsICpwYXJhbS50eXBlLCBA
MSksIEAxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IocGFyYW1Ob2RlcywgRU9wUGFyYW1ldGVycywg
QDEpOwotICAgICAgICAkMS5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJhbU5vZGVzOwotICAgICAgICBj
b250ZXh0LT5sb29wTmVzdGluZ0xldmVsID0gMDsKLSAgICB9Ci0gICAgY29tcG91bmRfc3RhdGVt
ZW50X25vX25ld19zY29wZSB7Ci0gICAgICAgIC8vPz8gQ2hlY2sgdGhhdCBhbGwgcGF0aHMgcmV0
dXJuIGEgdmFsdWUgaWYgcmV0dXJuIHR5cGUgIT0gdm9pZCA/Ci0gICAgICAgIC8vICAgTWF5IGJl
IGJlc3QgZG9uZSBhcyBwb3N0IHByb2Nlc3MgcGhhc2Ugb24gaW50ZXJtZWRpYXRlIGNvZGUKLSAg
ICAgICAgaWYgKGNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgpICE9
IEVidFZvaWQgJiYgISBjb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSkgewotICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoQDEsICJmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZToi
LCAiIiwgJDEuZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpKTsKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgJCQgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1BZ2dyZWdhdGUsICQzLCBAJCk7
Ci0gICAgICAgIGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcigkJCwg
RU9wRnVuY3Rpb24sIEAxKTsKLSAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldE5hbWUo
JDEuZnVuY3Rpb24tPmdldE1hbmdsZWROYW1lKCkuY19zdHIoKSk7Ci0gICAgICAgICQkLT5nZXRB
c0FnZ3JlZ2F0ZSgpLT5zZXRUeXBlKCQxLmZ1bmN0aW9uLT5nZXRSZXR1cm5UeXBlKCkpOwotCi0g
ICAgICAgIC8vIHN0b3JlIHRoZSBwcmFnbWEgaW5mb3JtYXRpb24gZm9yIGRlYnVnIGFuZCBvcHRp
bWl6ZSBhbmQgb3RoZXIgdmVuZG9yIHNwZWNpZmljCi0gICAgICAgIC8vIGluZm9ybWF0aW9uLiBU
aGlzIGluZm9ybWF0aW9uIGNhbiBiZSBxdWVyaWVkIGZyb20gdGhlIHBhcnNlIHRyZWUKLSAgICAg
ICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldE9wdGltaXplKGNvbnRleHQtPnByYWdtYSgpLm9w
dGltaXplKTsKLSAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldERlYnVnKGNvbnRleHQt
PnByYWdtYSgpLmRlYnVnKTsKLQotICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsK
LSAgICB9Ci0gICAgOwotCi0lJQotCi1pbnQgZ2xzbGFuZ19wYXJzZShUUGFyc2VDb250ZXh0KiBj
b250ZXh0KSB7Ci0gICAgcmV0dXJuIHl5cGFyc2UoY29udGV4dCk7Ci19CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzkwNjJjYjc2YzkzMTI4ZGIxNzIxZGFjZTU2YjNiYmQ4
NDg3OTkzYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMjk3NCArMCwwIEBACi0jbGluZSAxNyAiLi9nbHNsYW5nLmwiCi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3Bh
cnNlci5zaC4gRE8gTk9UIEVESVQhCi0KLS8vIElnbm9yZSBlcnJvcnMgaW4gYXV0by1nZW5lcmF0
ZWQgY29kZS4KLSNpZiBkZWZpbmVkKF9fR05VQ19fKQotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBp
Z25vcmVkICItV3VudXNlZC1mdW5jdGlvbiIKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3Jl
ZCAiLVd1bnVzZWQtdmFyaWFibGUiCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1X
c3dpdGNoLWVudW0iCi0jZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQotI3ByYWdtYSB3YXJuaW5nKGRp
c2FibGU6IDQwNjUpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDE4OSkKLSNwcmFnbWEgd2Fy
bmluZyhkaXNhYmxlOiA0NTA1KQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEpCi0jZW5k
aWYKLQotI2lmIGRlZmluZWQoX19jbGFuZ19fKQotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1
c2gKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vua25vd24tcHJhZ21hcyIK
LSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtcmVnaXN0ZXIi
Ci0jZW5kaWYKLQotCi0KLSNsaW5lIDI1ICIuL2dsc2xhbmdfbGV4LmNwcCIKLQotI2RlZmluZSAg
WVlfSU5UX0FMSUdORUQgc2hvcnQgaW50Ci0KLS8qIEEgbGV4aWNhbCBzY2FubmVyIGdlbmVyYXRl
ZCBieSBmbGV4ICovCi0KLSNkZWZpbmUgRkxFWF9TQ0FOTkVSCi0jZGVmaW5lIFlZX0ZMRVhfTUFK
T1JfVkVSU0lPTiAyCi0jZGVmaW5lIFlZX0ZMRVhfTUlOT1JfVkVSU0lPTiA1Ci0jZGVmaW5lIFlZ
X0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAzNQotI2lmIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiA+
IDAKLSNkZWZpbmUgRkxFWF9CRVRBCi0jZW5kaWYKLQotLyogRmlyc3QsIHdlIGRlYWwgd2l0aCAg
cGxhdGZvcm0tc3BlY2lmaWMgb3IgY29tcGlsZXItc3BlY2lmaWMgaXNzdWVzLiAqLwotCi0vKiBi
ZWdpbiBzdGFuZGFyZCBDIGhlYWRlcnMuICovCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRl
IDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0v
KiBlbmQgc3RhbmRhcmQgQyBoZWFkZXJzLiAqLwotCi0vKiBmbGV4IGludGVnZXIgdHlwZSBkZWZp
bml0aW9ucyAqLwotCi0jaWZuZGVmIEZMRVhJTlRfSAotI2RlZmluZSBGTEVYSU5UX0gKLQotLyog
Qzk5IHN5c3RlbXMgaGF2ZSA8aW50dHlwZXMuaD4uIE5vbi1DOTkgc3lzdGVtcyBtYXkgb3IgbWF5
IG5vdC4gKi8KLQotI2lmIGRlZmluZWQgKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJT
SU9OX18gPj0gMTk5OTAxTAotCi0vKiBDOTkgc2F5cyB0byBkZWZpbmUgX19TVERDX0xJTUlUX01B
Q1JPUyBiZWZvcmUgaW5jbHVkaW5nIHN0ZGludC5oLAotICogaWYgeW91IHdhbnQgdGhlIGxpbWl0
IChtYXgvbWluKSBtYWNyb3MgZm9yIGludCB0eXBlcy4gCi0gKi8KLSNpZm5kZWYgX19TVERDX0xJ
TUlUX01BQ1JPUwotI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIDEKLSNlbmRpZgotCi0jaW5j
bHVkZSA8aW50dHlwZXMuaD4KLXR5cGVkZWYgaW50OF90IGZsZXhfaW50OF90OwotdHlwZWRlZiB1
aW50OF90IGZsZXhfdWludDhfdDsKLXR5cGVkZWYgaW50MTZfdCBmbGV4X2ludDE2X3Q7Ci10eXBl
ZGVmIHVpbnQxNl90IGZsZXhfdWludDE2X3Q7Ci10eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90
OwotdHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90OwotdHlwZWRlZiB1aW50NjRfdCBmbGV4
X3VpbnQ2NF90OwotI2Vsc2UKLXR5cGVkZWYgc2lnbmVkIGNoYXIgZmxleF9pbnQ4X3Q7Ci10eXBl
ZGVmIHNob3J0IGludCBmbGV4X2ludDE2X3Q7Ci10eXBlZGVmIGludCBmbGV4X2ludDMyX3Q7Ci10
eXBlZGVmIHVuc2lnbmVkIGNoYXIgZmxleF91aW50OF90OyAKLXR5cGVkZWYgdW5zaWduZWQgc2hv
cnQgaW50IGZsZXhfdWludDE2X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90
OwotI2VuZGlmIC8qICEgQzk5ICovCi0KLS8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8K
LSNpZm5kZWYgSU5UOF9NSU4KLSNkZWZpbmUgSU5UOF9NSU4gICAgICAgICAgICAgICAoLTEyOCkK
LSNlbmRpZgotI2lmbmRlZiBJTlQxNl9NSU4KLSNkZWZpbmUgSU5UMTZfTUlOICAgICAgICAgICAg
ICAoLTMyNzY3LTEpCi0jZW5kaWYKLSNpZm5kZWYgSU5UMzJfTUlOCi0jZGVmaW5lIElOVDMyX01J
TiAgICAgICAgICAgICAgKC0yMTQ3NDgzNjQ3LTEpCi0jZW5kaWYKLSNpZm5kZWYgSU5UOF9NQVgK
LSNkZWZpbmUgSU5UOF9NQVggICAgICAgICAgICAgICAoMTI3KQotI2VuZGlmCi0jaWZuZGVmIElO
VDE2X01BWAotI2RlZmluZSBJTlQxNl9NQVggICAgICAgICAgICAgICgzMjc2NykKLSNlbmRpZgot
I2lmbmRlZiBJTlQzMl9NQVgKLSNkZWZpbmUgSU5UMzJfTUFYICAgICAgICAgICAgICAoMjE0NzQ4
MzY0NykKLSNlbmRpZgotI2lmbmRlZiBVSU5UOF9NQVgKLSNkZWZpbmUgVUlOVDhfTUFYICAgICAg
ICAgICAgICAoMjU1VSkKLSNlbmRpZgotI2lmbmRlZiBVSU5UMTZfTUFYCi0jZGVmaW5lIFVJTlQx
Nl9NQVggICAgICAgICAgICAgKDY1NTM1VSkKLSNlbmRpZgotI2lmbmRlZiBVSU5UMzJfTUFYCi0j
ZGVmaW5lIFVJTlQzMl9NQVggICAgICAgICAgICAgKDQyOTQ5NjcyOTVVKQotI2VuZGlmCi0KLSNl
bmRpZiAvKiAhIEZMRVhJTlRfSCAqLwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLQotLyogVGhlICJj
b25zdCIgc3RvcmFnZS1jbGFzcy1tb2RpZmllciBpcyB2YWxpZC4gKi8KLSNkZWZpbmUgWVlfVVNF
X0NPTlNUCi0KLSNlbHNlCS8qICEgX19jcGx1c3BsdXMgKi8KLQotLyogQzk5IHJlcXVpcmVzIF9f
U1REQ19fIHRvIGJlIGRlZmluZWQgYXMgMS4gKi8KLSNpZiBkZWZpbmVkIChfX1NURENfXykKLQot
I2RlZmluZSBZWV9VU0VfQ09OU1QKLQotI2VuZGlmCS8qIGRlZmluZWQgKF9fU1REQ19fKSAqLwot
I2VuZGlmCS8qICEgX19jcGx1c3BsdXMgKi8KLQotI2lmZGVmIFlZX1VTRV9DT05TVAotI2RlZmlu
ZSB5eWNvbnN0IGNvbnN0Ci0jZWxzZQotI2RlZmluZSB5eWNvbnN0Ci0jZW5kaWYKLQotLyogUmV0
dXJuZWQgdXBvbiBlbmQtb2YtZmlsZS4gKi8KLSNkZWZpbmUgWVlfTlVMTCAwCi0KLS8qIFByb21v
dGVzIGEgcG9zc2libHkgbmVnYXRpdmUsIHBvc3NpYmx5IHNpZ25lZCBjaGFyIHRvIGFuIHVuc2ln
bmVkCi0gKiBpbnRlZ2VyIGZvciB1c2UgYXMgYW4gYXJyYXkgaW5kZXguICBJZiB0aGUgc2lnbmVk
IGNoYXIgaXMgbmVnYXRpdmUsCi0gKiB3ZSB3YW50IHRvIGluc3RlYWQgdHJlYXQgaXQgYXMgYW4g
OC1iaXQgdW5zaWduZWQgY2hhciwgaGVuY2UgdGhlCi0gKiBkb3VibGUgY2FzdC4KLSAqLwotI2Rl
ZmluZSBZWV9TQ19UT19VSShjKSAoKHVuc2lnbmVkIGludCkgKHVuc2lnbmVkIGNoYXIpIGMpCi0K
LS8qIEFuIG9wYXF1ZSBwb2ludGVyLiAqLwotI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NDQU5ORVJf
VAotI2RlZmluZSBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAotdHlwZWRlZiB2b2lkKiB5eXNjYW5f
dDsKLSNlbmRpZgotCi0vKiBGb3IgY29udmVuaWVuY2UsIHRoZXNlIHZhcnMgKHBsdXMgdGhlIGJp
c29uIHZhcnMgZmFyIGJlbG93KQotICAgYXJlIG1hY3JvcyBpbiB0aGUgcmVlbnRyYW50IHNjYW5u
ZXIuICovCi0jZGVmaW5lIHl5aW4geXlnLT55eWluX3IKLSNkZWZpbmUgeXlvdXQgeXlnLT55eW91
dF9yCi0jZGVmaW5lIHl5ZXh0cmEgeXlnLT55eWV4dHJhX3IKLSNkZWZpbmUgeXlsZW5nIHl5Zy0+
eXlsZW5nX3IKLSNkZWZpbmUgeXl0ZXh0IHl5Zy0+eXl0ZXh0X3IKLSNkZWZpbmUgeXlsaW5lbm8g
KFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnNfbGluZW5vKQotI2RlZmluZSB5eWNvbHVt
biAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9ic19jb2x1bW4pCi0jZGVmaW5lIHl5X2Zs
ZXhfZGVidWcgeXlnLT55eV9mbGV4X2RlYnVnX3IKLQotLyogRW50ZXIgYSBzdGFydCBjb25kaXRp
b24uICBUaGlzIG1hY3JvIHJlYWxseSBvdWdodCB0byB0YWtlIGEgcGFyYW1ldGVyLAotICogYnV0
IHdlIGRvIGl0IHRoZSBkaXNndXN0aW5nIGNydWZ0eSB3YXkgZm9yY2VkIG9uIHVzIGJ5IHRoZSAo
KS1sZXNzCi0gKiBkZWZpbml0aW9uIG9mIEJFR0lOLgotICovCi0jZGVmaW5lIEJFR0lOIHl5Zy0+
eXlfc3RhcnQgPSAxICsgMiAqCi0KLS8qIFRyYW5zbGF0ZSB0aGUgY3VycmVudCBzdGFydCBzdGF0
ZSBpbnRvIGEgdmFsdWUgdGhhdCBjYW4gYmUgbGF0ZXIgaGFuZGVkCi0gKiB0byBCRUdJTiB0byBy
ZXR1cm4gdG8gdGhlIHN0YXRlLiAgVGhlIFlZU1RBVEUgYWxpYXMgaXMgZm9yIGxleAotICogY29t
cGF0aWJpbGl0eS4KLSAqLwotI2RlZmluZSBZWV9TVEFSVCAoKHl5Zy0+eXlfc3RhcnQgLSAxKSAv
IDIpCi0jZGVmaW5lIFlZU1RBVEUgWVlfU1RBUlQKLQotLyogQWN0aW9uIG51bWJlciBmb3IgRU9G
IHJ1bGUgb2YgYSBnaXZlbiBzdGFydCBzdGF0ZS4gKi8KLSNkZWZpbmUgWVlfU1RBVEVfRU9GKHN0
YXRlKSAoWVlfRU5EX09GX0JVRkZFUiArIHN0YXRlICsgMSkKLQotLyogU3BlY2lhbCBhY3Rpb24g
bWVhbmluZyAic3RhcnQgcHJvY2Vzc2luZyBhIG5ldyBmaWxlIi4gKi8KLSNkZWZpbmUgWVlfTkVX
X0ZJTEUgeXlyZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lciApCi0KLSNkZWZpbmUgWVlfRU5EX09GX0JV
RkZFUl9DSEFSIDAKLQotLyogU2l6ZSBvZiBkZWZhdWx0IGlucHV0IGJ1ZmZlci4gKi8KLSNpZm5k
ZWYgWVlfQlVGX1NJWkUKLSNkZWZpbmUgWVlfQlVGX1NJWkUgMTYzODQKLSNlbmRpZgotCi0vKiBU
aGUgc3RhdGUgYnVmIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgb25lIHN0YXRlIHBlciBj
aGFyYWN0ZXIgaW4gdGhlIG1haW4gYnVmZmVyLgotICovCi0jZGVmaW5lIFlZX1NUQVRFX0JVRl9T
SVpFICAgKChZWV9CVUZfU0laRSArIDIpICogc2l6ZW9mKHl5X3N0YXRlX3R5cGUpKQotCi0jaWZu
ZGVmIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCi0jZGVmaW5lIFlZX1RZUEVERUZfWVlfQlVG
RkVSX1NUQVRFCi10eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFU
RTsKLSNlbmRpZgotCi0jaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCi0jZGVmaW5lIFlZX1RZ
UEVERUZfWVlfU0laRV9UCi10eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7Ci0jZW5kaWYKLQotI2Rl
ZmluZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU4gMAotI2RlZmluZSBFT0JfQUNUX0VORF9PRl9GSUxF
IDEKLSNkZWZpbmUgRU9CX0FDVF9MQVNUX01BVENIIDIKLQotICAgIC8qIE5vdGU6IFdlIHNwZWNp
ZmljYWxseSBvbWl0IHRoZSB0ZXN0IGZvciB5eV9ydWxlX2Nhbl9tYXRjaF9lb2wgYmVjYXVzZSBp
dCByZXF1aXJlcwotICAgICAqICAgICAgIGFjY2VzcyB0byB0aGUgbG9jYWwgdmFyaWFibGUgeXlf
YWN0LiBTaW5jZSB5eWxlc3MoKSBpcyBhIG1hY3JvLCBpdCB3b3VsZCBicmVhawotICAgICAqICAg
ICAgIGV4aXN0aW5nIHNjYW5uZXJzIHRoYXQgY2FsbCB5eWxlc3MoKSBmcm9tIE9VVFNJREUgeXls
ZXguIAotICAgICAqICAgICAgIE9uZSBvYnZpb3VzIHNvbHV0aW9uIGl0IHRvIG1ha2UgeXlfYWN0
IGEgZ2xvYmFsLiBJIHRyaWVkIHRoYXQsIGFuZCBzYXcKLSAgICAgKiAgICAgICBhIDUlIHBlcmZv
cm1hbmNlIGhpdCBpbiBhIG5vbi15eWxpbmVubyBzY2FubmVyLCBiZWNhdXNlIHl5X2FjdCBpcwot
ICAgICAqICAgICAgIG5vcm1hbGx5IGRlY2xhcmVkIGFzIGEgcmVnaXN0ZXIgdmFyaWFibGUtLSBz
byBpdCBpcyBub3Qgd29ydGggaXQuCi0gICAgICovCi0gICAgI2RlZmluZSAgWVlfTEVTU19MSU5F
Tk8obikgXAotICAgICAgICAgICAgZG8geyBcCi0gICAgICAgICAgICAgICAgeXlfc2l6ZV90IHl5
bDtcCi0gICAgICAgICAgICAgICAgZm9yICggeXlsID0gbjsgeXlsIDwgeXlsZW5nOyArK3l5bCAp
XAotICAgICAgICAgICAgICAgICAgICBpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKVwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIC0teXlsaW5lbm87XAotICAgICAgICAgICAgfXdoaWxlKDApCi0g
ICAgCi0vKiBSZXR1cm4gYWxsIGJ1dCB0aGUgZmlyc3QgIm4iIG1hdGNoZWQgY2hhcmFjdGVycyBi
YWNrIHRvIHRoZSBpbnB1dCBzdHJlYW0uICovCi0jZGVmaW5lIHl5bGVzcyhuKSBcCi0JZG8gXAot
CQl7IFwKLQkJLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCi0gICAg
ICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCi0gICAgICAgIFlZX0xFU1NfTElORU5P
KHl5bGVzc19tYWNyb19hcmcpO1wKLQkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7IFwKLQkJ
WVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVCBcCi0JCXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwID0g
eXlfYnAgKyB5eWxlc3NfbWFjcm9fYXJnIC0gWVlfTU9SRV9BREo7IFwKLQkJWVlfRE9fQkVGT1JF
X0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLyBcCi0JCX0gXAotCXdoaWxlICggMCAp
Ci0KLSNkZWZpbmUgdW5wdXQoYykgeXl1bnB1dCggYywgeXlnLT55eXRleHRfcHRyICwgeXlzY2Fu
bmVyICkKLQotI2lmbmRlZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCi0jZGVmaW5lIFlZX1NU
UlVDVF9ZWV9CVUZGRVJfU1RBVEUKLXN0cnVjdCB5eV9idWZmZXJfc3RhdGUKLQl7Ci0JRklMRSAq
eXlfaW5wdXRfZmlsZTsKLQotCWNoYXIgKnl5X2NoX2J1ZjsJCS8qIGlucHV0IGJ1ZmZlciAqLwot
CWNoYXIgKnl5X2J1Zl9wb3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1ZmZlciAq
LwotCi0JLyogU2l6ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9v
bSBmb3IgRU9CCi0JICogY2hhcmFjdGVycy4KLQkgKi8KLQl5eV9zaXplX3QgeXlfYnVmX3NpemU7
Ci0KLQkvKiBOdW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBub3QgaW5j
bHVkaW5nIEVPQgotCSAqIGNoYXJhY3RlcnMuCi0JICovCi0JeXlfc2l6ZV90IHl5X25fY2hhcnM7
Ci0KLQkvKiBXaGV0aGVyIHdlICJvd24iIHRoZSBidWZmZXIgLSBpLmUuLCB3ZSBrbm93IHdlIGNy
ZWF0ZWQgaXQsCi0JICogYW5kIGNhbiByZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNob3Vs
ZCBmcmVlKCkgaXQgdG8KLQkgKiBkZWxldGUgaXQuCi0JICovCi0JaW50IHl5X2lzX291cl9idWZm
ZXI7Ci0KLQkvKiBXaGV0aGVyIHRoaXMgaXMgYW4gImludGVyYWN0aXZlIiBpbnB1dCBzb3VyY2U7
IGlmIHNvLCBhbmQKLQkgKiBpZiB3ZSdyZSB1c2luZyBzdGRpbyBmb3IgaW5wdXQsIHRoZW4gd2Ug
d2FudCB0byB1c2UgZ2V0YygpCi0JICogaW5zdGVhZCBvZiBmcmVhZCgpLCB0byBtYWtlIHN1cmUg
d2Ugc3RvcCBmZXRjaGluZyBpbnB1dCBhZnRlcgotCSAqIGVhY2ggbmV3bGluZS4KLQkgKi8KLQlp
bnQgeXlfaXNfaW50ZXJhY3RpdmU7Ci0KLQkvKiBXaGV0aGVyIHdlJ3JlIGNvbnNpZGVyZWQgdG8g
YmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUuCi0JICogSWYgc28sICdeJyBydWxlcyB3aWxs
IGJlIGFjdGl2ZSBvbiB0aGUgbmV4dCBtYXRjaCwgb3RoZXJ3aXNlCi0JICogbm90LgotCSAqLwot
CWludCB5eV9hdF9ib2w7Ci0KLSAgICBpbnQgeXlfYnNfbGluZW5vOyAvKio8IFRoZSBsaW5lIGNv
dW50LiAqLwotICAgIGludCB5eV9ic19jb2x1bW47IC8qKjwgVGhlIGNvbHVtbiBjb3VudC4gKi8K
LSAgICAKLQkvKiBXaGV0aGVyIHRvIHRyeSB0byBmaWxsIHRoZSBpbnB1dCBidWZmZXIgd2hlbiB3
ZSByZWFjaCB0aGUKLQkgKiBlbmQgb2YgaXQuCi0JICovCi0JaW50IHl5X2ZpbGxfYnVmZmVyOwot
Ci0JaW50IHl5X2J1ZmZlcl9zdGF0dXM7Ci0KLSNkZWZpbmUgWVlfQlVGRkVSX05FVyAwCi0jZGVm
aW5lIFlZX0JVRkZFUl9OT1JNQUwgMQotCS8qIFdoZW4gYW4gRU9GJ3MgYmVlbiBzZWVuIGJ1dCB0
aGVyZSdzIHN0aWxsIHNvbWUgdGV4dCB0byBwcm9jZXNzCi0JICogdGhlbiB3ZSBtYXJrIHRoZSBi
dWZmZXIgYXMgWVlfRU9GX1BFTkRJTkcsIHRvIGluZGljYXRlIHRoYXQgd2UKLQkgKiBzaG91bGRu
J3QgdHJ5IHJlYWRpbmcgZnJvbSB0aGUgaW5wdXQgc291cmNlIGFueSBtb3JlLiAgV2UgbWlnaHQK
LQkgKiBzdGlsbCBoYXZlIGEgYnVuY2ggb2YgdG9rZW5zIHRvIG1hdGNoLCB0aG91Z2gsIGJlY2F1
c2Ugb2YKLQkgKiBwb3NzaWJsZSBiYWNraW5nLXVwLgotCSAqCi0JICogV2hlbiB3ZSBhY3R1YWxs
eSBzZWUgdGhlIEVPRiwgd2UgY2hhbmdlIHRoZSBzdGF0dXMgdG8gIm5ldyIKLQkgKiAodmlhIHl5
cmVzdGFydCgpKSwgc28gdGhhdCB0aGUgdXNlciBjYW4gY29udGludWUgc2Nhbm5pbmcgYnkKLQkg
KiBqdXN0IHBvaW50aW5nIHl5aW4gYXQgYSBuZXcgaW5wdXQgZmlsZS4KLQkgKi8KLSNkZWZpbmUg
WVlfQlVGRkVSX0VPRl9QRU5ESU5HIDIKLQotCX07Ci0jZW5kaWYgLyogIVlZX1NUUlVDVF9ZWV9C
VUZGRVJfU1RBVEUgKi8KLQotLyogV2UgcHJvdmlkZSBtYWNyb3MgZm9yIGFjY2Vzc2luZyBidWZm
ZXIgc3RhdGVzIGluIGNhc2UgaW4gdGhlCi0gKiBmdXR1cmUgd2Ugd2FudCB0byBwdXQgdGhlIGJ1
ZmZlciBzdGF0ZXMgaW4gYSBtb3JlIGdlbmVyYWwKLSAqICJzY2FubmVyIHN0YXRlIi4KLSAqCi0g
KiBSZXR1cm5zIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBvciBOVUxMLgotICovCi0jZGVmaW5lIFlZ
X0NVUlJFTlRfQlVGRkVSICggeXlnLT55eV9idWZmZXJfc3RhY2sgXAotICAgICAgICAgICAgICAg
ICAgICAgICAgICA/IHl5Zy0+eXlfYnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3Rv
cF0gXAotICAgICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEwpCi0KLS8qIFNhbWUgYXMgcHJl
dmlvdXMgbWFjcm8sIGJ1dCB1c2VmdWwgd2hlbiB3ZSBrbm93IHRoYXQgdGhlIGJ1ZmZlciBzdGFj
ayBpcyBub3QKLSAqIE5VTEwgb3Igd2hlbiB3ZSBuZWVkIGFuIGx2YWx1ZS4gRm9yIGludGVybmFs
IHVzZSBvbmx5LgotICovCi0jZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSB5eWctPnl5
X2J1ZmZlcl9zdGFja1t5eWctPnl5X2J1ZmZlcl9zdGFja190b3BdCi0KLXZvaWQgeXlyZXN0YXJ0
IChGSUxFICppbnB1dF9maWxlICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgeXlfc3dpdGNo
X3RvX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOwotWVlfQlVGRkVSX1NUQVRFIHl5X2NyZWF0ZV9idWZmZXIgKEZJTEUgKmZpbGUsaW50IHNp
emUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCB5eV9kZWxldGVfYnVmZmVyIChZWV9CVUZG
RVJfU1RBVEUgYiAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHl5X2ZsdXNoX2J1ZmZlciAo
WVlfQlVGRkVSX1NUQVRFIGIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCB5eXB1c2hfYnVm
ZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAseXlzY2FuX3QgeXlzY2FubmVy
ICk7Ci12b2lkIHl5cG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXN0
YXRpYyB2b2lkIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1z
dGF0aWMgdm9pZCB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1z
dGF0aWMgdm9pZCB5eV9pbml0X2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIsRklMRSAqZmlsZSAs
eXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLSNkZWZpbmUgWVlfRkxVU0hfQlVGRkVSIHl5X2ZsdXNo
X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyKQotCi1ZWV9CVUZGRVJfU1RBVEUg
eXlfc2Nhbl9idWZmZXIgKGNoYXIgKmJhc2UseXlfc2l6ZV90IHNpemUgLHl5c2Nhbl90IHl5c2Nh
bm5lciApOwotWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKnl5
X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci1ZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRl
cyAoeXljb25zdCBjaGFyICpieXRlcyx5eV9zaXplX3QgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKLQotdm9pZCAqeXlhbGxvYyAoeXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZv
aWQgKnl5cmVhbGxvYyAodm9pZCAqLHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12
b2lkIHl5ZnJlZSAodm9pZCAqICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotI2RlZmluZSB5eV9u
ZXdfYnVmZmVyIHl5X2NyZWF0ZV9idWZmZXIKLQotI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUo
aXNfaW50ZXJhY3RpdmUpIFwKLQl7IFwKLQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAot
ICAgICAgICB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKLQkJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFID0gICAgXAotICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5eWlu
LFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOyBcCi0JfSBcCi0JWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9pc19pbnRlcmFjdGl2ZSA9IGlzX2ludGVyYWN0aXZlOyBcCi0JfQotCi0jZGVmaW5l
IHl5X3NldF9ib2woYXRfYm9sKSBcCi0JeyBcCi0JaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7
XAotICAgICAgICB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKLQkJWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAotICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5
eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOyBcCi0JfSBcCi0JWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9hdF9ib2wgPSBhdF9ib2w7IFwKLQl9Ci0KLSNkZWZpbmUgWVlfQVRfQk9MKCkg
KFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sKQotCi0vKiBCZWdpbiB1c2VyIHNl
Y3QzICovCi0KLSNkZWZpbmUgeXl3cmFwKG4pIDEKLSNkZWZpbmUgWVlfU0tJUF9ZWVdSQVAKLQot
dHlwZWRlZiB1bnNpZ25lZCBjaGFyIFlZX0NIQVI7Ci0KLXR5cGVkZWYgaW50IHl5X3N0YXRlX3R5
cGU7Ci0KLSNkZWZpbmUgeXl0ZXh0X3B0ciB5eXRleHRfcgotCi1zdGF0aWMgeXlfc3RhdGVfdHlw
ZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotc3RhdGljIHl5
X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAoeXlfc3RhdGVfdHlwZSBjdXJyZW50X3N0YXRl
ICAseXlzY2FuX3QgeXlzY2FubmVyKTsKLXN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXN0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0
IGNoYXIgbXNnW10gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi0vKiBEb25lIGFmdGVyIHRoZSBj
dXJyZW50IHBhdHRlcm4gaGFzIGJlZW4gbWF0Y2hlZCBhbmQgYmVmb3JlIHRoZQotICogY29ycmVz
cG9uZGluZyBhY3Rpb24gLSBzZXRzIHVwIHl5dGV4dC4KLSAqLwotI2RlZmluZSBZWV9ET19CRUZP
UkVfQUNUSU9OIFwKLQl5eWctPnl5dGV4dF9wdHIgPSB5eV9icDsgXAotCXl5bGVuZyA9ICh5eV9z
aXplX3QpICh5eV9jcCAtIHl5X2JwKTsgXAotCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2NwOyBc
Ci0JKnl5X2NwID0gJ1wwJzsgXAotCXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwOwotCi0jZGVmaW5l
IFlZX05VTV9SVUxFUyAxNDcKLSNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUiAxNDgKLS8qIFRoaXMg
c3RydWN0IGlzIG5vdCB1c2VkIGluIHRoaXMgc2Nhbm5lciwKLSAgIGJ1dCBpdHMgcHJlc2VuY2Ug
aXMgbmVjZXNzYXJ5LiAqLwotc3RydWN0IHl5X3RyYW5zX2luZm8KLQl7Ci0JZmxleF9pbnQzMl90
IHl5X3ZlcmlmeTsKLQlmbGV4X2ludDMyX3QgeXlfbnh0OwotCX07Ci1zdGF0aWMgeXljb25zdCBm
bGV4X2ludDE2X3QgeXlfYWNjZXB0WzQ0M10gPQotICAgIHsgICAwLAotICAgICAgICAwLCAgICAw
LCAgMTQ4LCAgMTQ2LCAgMTQ1LCAgMTQ1LCAgMTMyLCAgMTM4LCAgMTQzLCAgMTI3LAotICAgICAg
MTI4LCAgMTM2LCAgMTM1LCAgMTI0LCAgMTMzLCAgMTMxLCAgMTM3LCAgIDk2LCAgIDk2LCAgMTI1
LAotICAgICAgMTIxLCAgMTM5LCAgMTI2LCAgMTQwLCAgMTQ0LCAgIDkzLCAgMTI5LCAgMTMwLCAg
MTQyLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAg
IDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgMTIyLAotICAgICAgMTQxLCAgMTIzLCAgMTM0LCAgMTE4
LCAgMTA0LCAgMTIzLCAgMTEyLCAgMTA3LCAgMTAyLCAgMTEwLAotICAgICAgMTAwLCAgMTExLCAg
MTAxLCAgIDk5LCAgMTAzLCAgIDk4LCAgIDk1LCAgIDk2LCAgICAwLCAgICAwLAotICAgICAgMTMw
LCAgMTIyLCAgMTI5LCAgMTE5LCAgMTE1LCAgMTE3LCAgMTE2LCAgMTIwLCAgIDkzLCAgMTA4LAot
ICAgICAgMTE0LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLAotICAgICAgIDkzLCAgIDEyLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAg
IDkzLCAgIDkzLCAgIDkzLAotCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
MTUsICAgMTcsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAxMDksICAxMTMsICAgIDAsICAgOTgsICAgIDAsICAgIDAsCi0g
ICAgICAgOTcsICAgOTQsICAxMDUsICAxMDYsICAgNDUsICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgMTMsICAgOTMsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgMjEsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgMTgsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0KLSAg
ICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICAgMCwgICA5OSwgICAgMCwgICA5OCwg
ICA5MywKLSAgICAgICAyMywgICA5MywgICA5MywgICA5MCwgICA5MywgICA5MywgICA5MywgICA5
MywgICA5MywgICA5MywKLSAgICAgICA5MywgICAxNiwgICA0OCwgICA5MywgICA5MywgICA5Mywg
ICA2NCwgICA5MywgICA5MywgICA1MywKLSAgICAgICA2OCwgICA5MywgICA5MywgICA5MywgICA5
MywgICA5MywgICA5MywgICA5MywgICA5MywgICA2NSwKLSAgICAgICAgNCwgICAyOCwgICAyOSwg
ICAzMCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5
MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAg
ICA1MSwgICAyNCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICAzMSwgICAz
MiwKLSAgICAgICAzMywgICAyMiwgICA5MywgICA5MywgICA5MywgICAxMCwgICAzNywgICAzOCwg
ICAzOSwgICA0NiwKLSAgICAgICAgNywgICA5MywgICA5MywgICA5MywgICA5MywgICA3NywgICA3
OCwgICA3OSwgICA5MywgICAyNSwKLSAgICAgICA2OSwgICAyMCwgICA4MCwgICA4MSwgICA4Miwg
ICAgMiwgICA3NCwgICA3NSwgICA3NiwgICA5MywKLQotICAgICAgIDE5LCAgIDcyLCAgIDkzLCAg
IDkzLCAgIDM0LCAgIDM1LCAgIDM2LCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDY2LCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAg
IDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDQ3LCAgIDkzLCAgIDkyLCAgIDkzLCAgIDkz
LAotICAgICAgIDE0LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDY3LCAgIDYxLCAgIDU2LCAg
IDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDczLCAgIDUyLCAgIDkzLCAgIDU5
LCAgIDI3LCAgIDkzLCAgIDg5LAotICAgICAgIDYwLCAgIDQ0LCAgIDcxLCAgIDU0LCAgIDkzLCAg
IDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDU1LCAgIDI2
LCAgIDkzLCAgIDkzLCAgIDkzLCAgICAzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAg
IDkzLCAgIDQ5LCAgICA4LCAgIDkzLCAgICA5LCAgIDkzLCAgIDkzLCAgIDExLAotICAgICAgIDYy
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDU3LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAot
ICAgICAgIDkzLCAgIDUwLCAgIDcwLCAgIDU4LCAgICA2LCAgIDYzLCAgICAxLCAgIDkxLCAgICA1
LCAgIDgzLAotCi0gICAgICAgNDAsICAgODQsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgNDEsICAg
OTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgNDMsICAgOTMs
ICAgODcsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgODUsICAgOTMsICAg
ODYsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgNDIsCi0gICAgICAgODgs
ICAgIDAKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0g
PQotICAgIHsgICAwLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAyLCAgICAzLAotICAgICAgICAyLCAgICAyLCAgICAyLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAy
LCAgICA0LCAgICAxLCAgICAxLCAgICAxLCAgICA1LCAgICA2LCAgICAxLCAgICA3LAotICAgICAg
ICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1LCAgIDE2LCAgIDE3
LAotICAgICAgIDE4LCAgIDE5LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIxLCAgIDIxLCAgIDIyLCAg
IDIzLCAgIDI0LAotICAgICAgIDI1LCAgIDI2LCAgIDI3LCAgICAxLCAgIDI4LCAgIDI4LCAgIDI5
LCAgIDMwLCAgIDMxLCAgIDI4LAotICAgICAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAg
IDMyLCAgIDMyLCAgIDMyLCAgIDMzLCAgIDMyLAotICAgICAgIDMyLCAgIDM0LCAgIDM1LCAgIDMy
LCAgIDMyLCAgIDMyLCAgIDMyLCAgIDM2LCAgIDMyLCAgIDMyLAotICAgICAgIDM3LCAgICAxLCAg
IDM4LCAgIDM5LCAgIDMyLCAgICAxLCAgIDQwLCAgIDQxLCAgIDQyLCAgIDQzLAotCi0gICAgICAg
NDQsICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAgMzIsICAgNDksICAgNTAsICAgNTEsICAgNTIs
Ci0gICAgICAgNTMsICAgNTQsICAgMzIsICAgNTUsICAgNTYsICAgNTcsICAgNTgsICAgNTksICAg
NjAsICAgNjEsCi0gICAgICAgNjIsICAgNjMsICAgNjQsICAgNjUsICAgNjYsICAgNjcsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0g
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0KLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMQotICAgIH0g
OwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfbWV0YVs2OF0gPQotICAgIHsgICAw
LAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAyLCAgICAyLCAgICAy
LCAgICAyLCAgICAyLCAgICAyLAotICAgICAgICAyLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAyLCAgICAyLCAgICAyLAotICAgICAgICAyLCAgICAzLCAgICAzLCAgICAz
LCAgICAzLCAgICAzLCAgICAxLCAgICAxLCAgICAxLCAgICAyLAotICAgICAgICAyLCAgICAyLCAg
ICAyLCAgICAyLCAgICAyLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLAotICAgICAgICAz
LCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLAot
ICAgICAgICAzLCAgICAzLCAgICAzLCAgICAxLCAgICAxLCAgICAxLCAgICAxCi0gICAgfSA7Ci0K
LXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzQ0NV0gPQotICAgIHsgICAwLAot
ICAgICAgICAwLCAgICAwLCAgNTg3LCAgNTg4LCAgNTg4LCAgNTg4LCAgNTYxLCAgIDQzLCAgIDY0
LCAgNTg4LAotICAgICAgNTg4LCAgNTYwLCAgIDYxLCAgNTg4LCAgIDYwLCAgIDU4LCAgNTU5LCAg
IDc3LCAgIDg2LCAgNTU3LAotICAgICAgNTg4LCAgMTA0LCAgNTU3LCAgIDU1LCAgNTg4LCAgICAw
LCAgNTg4LCAgNTg4LCAgIDc1LCAgIDI2LAotICAgICAgIDU3LCAgIDgyLCAgIDgzLCAgIDczLCAg
IDkzLCAgNTI4LCAgIDk3LCAgIDk1LCAgNTI3LCAgIDQ0LAotICAgICAgIDcxLCAgNTIxLCAgMTA0
LCAgNTM0LCAgMTEwLCAgMTE2LCAgIDM1LCAgMTExLCAgNTMwLCAgNTg4LAotICAgICAgMTE0LCAg
NTg4LCAgNTg4LCAgNTg4LCAgNTg4LCAgNTg4LCAgNTg4LCAgNTg4LCAgNTg4LCAgNTg4LAotICAg
ICAgNTg4LCAgNTg4LCAgNTg4LCAgMTY1LCAgNTg4LCAgMTcyLCAgMjAyLCAgMjExLCAgMjMzLCAg
ICAwLAotICAgICAgNTg4LCAgNTg4LCAgNTg4LCAgNTUxLCAgNTg4LCAgNTg4LCAgNTg4LCAgNTUw
LCAgICAwLCAgNTg4LAotICAgICAgNTg4LCAgNTIzLCAgNTE2LCAgNTE5LCAgNTI3LCAgNTI2LCAg
NTEzLCAgNTI4LCAgNTE1LCAgNTIxLAotICAgICAgNTA5LCAgNTA2LCAgNTE5LCAgNTA2LCAgNTAz
LCAgNTAzLCAgNTA5LCAgNDk3LCAgMTA4LCAgNTAyLAotCi0gICAgICA1MTIsICA0OTgsICA1MDQs
ICA1MDcsICA1MDgsICAgIDAsICAxNDUsICA1MDcsICAxMTMsICA0OTMsCi0gICAgICA1MDYsICA0
OTcsICA0OTksICA0ODksICA1MDMsICA1MDAsICA1MDIsICA0ODUsICA0OTAsICA0ODcsCi0gICAg
ICA0NzYsICAxNTcsICA0ODQsICA0ODksICA0ODUsICA0ODcsICA0NzYsICA0NzksICAxMTgsICA0
ODQsCi0gICAgICA0NzYsICA0ODgsICAgNzAsICA0ODEsICA1ODgsICA1ODgsICAyNDYsICAyNTMs
ICAyNzAsICAyMTksCi0gICAgICAyODMsICAgIDAsICA1ODgsICA1ODgsICAgIDAsICA0NzMsICA0
NzcsICA0ODYsICA0ODMsICA0NjcsCi0gICAgICA0NjcsICAxMTksICA0ODIsICA0NzksICA0Nzks
ICA0NzcsICA0NzQsICA0NjYsICA0NzIsICA0NTksCi0gICAgICA0NzAsICA0NTYsICA0NzIsICAg
IDAsICA0NjksICA0NTcsICA0NjQsICA0NjEsICA0NjUsICA0NTgsCi0gICAgICA0NDcsICA0NDYs
ICA0NTksICA0NjIsICA0NTksICA0NTQsICA0NDUsICAxODgsICA0NTAsICA0NTMsCi0gICAgICA0
NDQsICA0NDEsICA0NDUsICA0NTEsICA0NDIsICA0MzMsICA0MzYsICA0MzQsICA0NDQsICA0MzAs
Ci0gICAgICA0MjgsICA0NDEsICA0MjcsICA0MjksICA0MjYsICA0MzcsICA0MzYsICAxMjQsICA0
MzEsICA0MjYsCi0KLSAgICAgIDQxNSwgIDI1OCwgIDQzMywgIDQzNSwgIDQyNCwgIDI5MCwgIDI5
NywgIDMwNCwgIDMxMSwgIDQyNSwKLSAgICAgICAgMCwgIDQyMywgIDI3NSwgICAgMCwgIDQxNSwg
IDQxMywgIDQyMSwgIDQxMCwgIDQyNywgIDQxNiwKLSAgICAgIDMxNiwgICAgMCwgICAgMCwgIDQx
MCwgIDQyMCwgIDQyMCwgICAgMCwgIDQwNSwgIDMxOSwgICAgMCwKLSAgICAgICAgMCwgIDQwNywg
IDMyMiwgIDQwOCwgIDQwMiwgIDQwMSwgIDQwMiwgIDQwMSwgIDMyNSwgICAgMCwKLSAgICAgICAg
MCwgICAgMCwgICAgMCwgICAgMCwgIDM5NywgIDM5OCwgIDQwMywgIDM5NCwgIDQwNywgIDQwMiwK
LSAgICAgIDQwMSwgIDM5MywgIDM5NywgIDM4OSwgIDM5MiwgIDM5NiwgIDQwMSwgIDM4NywgIDM5
OSwgIDM5MCwKLSAgICAgICAgMCwgICAgMCwgIDM5NiwgIDM4NSwgIDM4NSwgIDM5MCwgIDM4OSwg
IDM4NiwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgIDM3NiwgIDM4OCwgIDM5MCwgICAg
MCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgIDM3OCwgIDM3OSwgIDM3Mywg
IDM4MywgICAgMCwgICAgMCwgICAgMCwgIDM3NCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAg
MCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDM4MSwKLQotICAgICAgICAw
LCAgICAwLCAgMzc5LCAgMzc1LCAgICAwLCAgICAwLCAgICAwLCAgMzcxLCAgMzY3LCAgMzcyLAot
ICAgICAgMzYyLCAgMzc1LCAgMzYxLCAgMzc0LCAgMzYzLCAgMzcwLCAgICAwLCAgMzY4LCAgMzcw
LCAgMzU0LAotICAgICAgMzU2LCAgMzYyLCAgMzY4LCAgMzYzLCAgMzUxLCAgICAwLCAgMzUzLCAg
ICAwLCAgMzUyLCAgMzU1LAotICAgICAgICAwLCAgMzQ0LCAgMzQzLCAgMzQzLCAgMzU2LCAgICAw
LCAgMzU4LCAgICAwLCAgMzU3LCAgMzU2LAotICAgICAgMzQxLCAgMzU0LCAgMzQxLCAgICAwLCAg
ICAwLCAgMzQ0LCAgICAwLCAgICAwLCAgMzM2LCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgMzMzLCAgMzQ0LCAgMzM3LCAgMzQzLCAgMzQwLCAgMzM1LAotICAgICAgMzI3LCAg
MzM5LCAgICAwLCAgICAwLCAgMzMyLCAgMzM5LCAgMzI4LCAgICAwLCAgMzM3LCAgMzM0LAotICAg
ICAgMzI0LCAgMzI5LCAgMzMyLCAgICAwLCAgICAwLCAgMzMyLCAgICAwLCAgMzMwLCAgMzI5LCAg
ICAwLAotICAgICAgICAwLCAgMzI4LCAgMzE0LCAgMzI2LCAgICAwLCAgMzE3LCAgMzM4LCAgMzM3
LCAgMzM2LCAgMzA3LAotICAgICAgMzAzLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgICAwLCAgICAwLCAgMzI4LAotCi0gICAgICAxNjYsICAzMjUsICAzMTYsICAyOTksICAz
MDgsICAzMTAsICAzMDYsICAzMDgsICAzMDcsICAzMDYsCi0gICAgICAzMDksICAzMDYsICAyNTYs
ICAyNTMsICAgIDAsICAyMjgsICAyMzgsICAyMjIsICAyMzUsICAyMDMsCi0gICAgICAyMDcsICAy
MDQsICAyMTIsICAxOTEsICAgIDAsICAyMDEsICAxNjUsICAxNjcsICAxNTMsICAxNjEsCi0gICAg
ICAgIDAsICAxNzAsICAgIDAsICAxNzUsICAxNTEsICAxNDEsICAxMDAsICAxMTQsICAgNTksICAg
IDAsCi0gICAgICAgIDAsICA1ODgsICAzNTksICAxMTMKLSAgICB9IDsKLQotc3RhdGljIHl5Y29u
c3QgZmxleF9pbnQxNl90IHl5X2RlZls0NDVdID0KLSAgICB7ICAgMCwKLSAgICAgIDQ0MiwgICAg
MSwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MywgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0NCwKLSAgICAgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MywgIDQ0MiwK
LSAgICAgIDQ0MiwgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywKLQotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAot
ICAgICAgNDQyLCAgNDQ0LCAgNDQyLCAgNDQyLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotCi0g
ICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAg
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0KLSAgICAgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywK
LSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywKLQotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQz
LCAgICAwLCAgNDQyLCAgNDQyCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZf
dCB5eV9ueHRbNjU2XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDQsICAgIDUsICAgIDYsICAgIDcs
ICAgIDgsICAgIDksICAgMTAsICAgMTEsICAgMTIsICAgMTMsCi0gICAgICAgMTQsICAgMTUsICAg
MTYsICAgMTcsICAgMTgsICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksCi0gICAgICAgMTks
ICAgMjAsICAgMjEsICAgMjIsICAgMjMsICAgMjQsICAgMjUsICAgMjYsICAgMjYsICAgMjYsCi0g
ICAgICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjcsICAgMjgsICAgMjks
ICAgMzAsCi0gICAgICAgMzEsICAgMzIsICAgMzMsICAgMzQsICAgMzUsICAgMzYsICAgMzcsICAg
MzgsICAgMjYsICAgMzksCi0gICAgICAgNDAsICAgNDEsICAgNDIsICAgNDMsICAgNDQsICAgNDUs
ICAgNDYsICAgNDcsICAgNDgsICAgNDksCi0gICAgICAgMjYsICAgMjYsICAgMjYsICAgNTAsICAg
NTEsICAgNTIsICAgNTMsICAgNTUsICAgNTYsICAgNTcsCi0gICAgICAgNjAsICAgNjIsICAgNjQs
ICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNzcsCi0gICAgICAgNzgsICAg
ODIsICAgODMsICAxMTAsICAgNjMsICAgNjEsICAxMjksICAxMTEsICAgNTgsICAgNjYsCi0gICAg
ICAxMzAsICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAgNjgsICAgNjYsICAg
ODAsCi0KLSAgICAgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2
OSwgICA3MiwgICA4NCwKLSAgICAgIDExMiwgICA4NSwgICA3MCwgICA4MSwgIDE0MiwgICA4Niwg
ICA2OSwgIDIwMywgIDQ0MSwgIDIwNCwKLSAgICAgICA2OSwgICA4NywgICA5NCwgIDExMywgICA5
NSwgICA3MywgICA5MCwgICA3NCwgICA3NSwgICA2OSwKLSAgICAgICA5MSwgICA4OCwgICA5Nywg
ICA5NiwgICA4OSwgICA5MiwgIDEwMywgICA3MCwgIDEzNSwgIDEwNiwKLSAgICAgICA5OCwgICA5
MywgICA5OSwgIDExNSwgIDEwNCwgIDEwMCwgIDEwNywgIDE2MiwgIDQ0MCwgIDExOSwKLSAgICAg
IDEzMSwgIDEwMSwgIDQzOSwgIDEwOCwgIDEzMiwgIDEwNSwgIDEyMCwgIDEyMSwgIDExNiwgIDEy
NSwKLSAgICAgIDE2MywgIDExNywgIDEyNiwgIDEzMywgIDE3NiwgIDE5OCwgIDEyMiwgIDEyMywg
IDI2NCwgIDEyNCwKLSAgICAgIDEyNywgIDQzOCwgIDE3NywgIDE5OSwgIDIxNiwgIDIxNywgIDI2
NSwgIDEyOCwgIDEzNiwgICA2NCwKLSAgICAgICA2NCwgICA2NCwgICA2NCwgICA2NCwgICA2NCwg
ICA2NCwgIDEzOCwgIDEzOCwgIDEzOCwgIDEzOCwKLSAgICAgIDEzOCwgIDEzOCwgIDEzOCwgIDQz
NywgIDE3MCwgIDEzNywgIDE5MCwgIDE3MSwgIDE3MiwgIDQwNiwKLQotICAgICAgNDA3LCAgMTcz
LCAgMTM5LCAgMTc0LCAgMjQyLCAgMjQzLCAgMjQ0LCAgNDM2LCAgMTM3LCAgNDM1LAotICAgICAg
NDM0LCAgMTkxLCAgNDMzLCAgNDMyLCAgIDY2LCAgMTM5LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3
LAotICAgICAgIDY3LCAgIDY3LCAgIDY4LCAgIDY2LCAgNDMxLCAgIDY4LCAgIDY4LCAgIDY4LCAg
IDY4LCAgIDY4LAotICAgICAgIDY4LCAgIDY4LCAgIDY5LCAgMTQxLCAgMTQxLCAgMTQxLCAgMTQx
LCAgMTQxLCAgMTQxLCAgMTQxLAotICAgICAgNDMwLCAgIDY5LCAgMTQwLCAgNDI5LCAgMTQwLCAg
IDY5LCAgNDI4LCAgMTQxLCAgMTQxLCAgMTQxLAotICAgICAgMTQxLCAgMTQxLCAgMTQxLCAgMTQx
LCAgIDY5LCAgMjA2LCAgNDI3LCAgMjA2LCAgNDI2LCAgNDI1LAotICAgICAgMjA3LCAgMjA3LCAg
MjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMTM4LCAgMTM4LCAgMTM4LAotICAgICAgMTM4
LCAgMTM4LCAgMTM4LCAgMTM4LCAgMjY5LCAgMjcwLCAgMjcxLCAgNDI0LCAgNDIzLCAgMjA4LAot
ICAgICAgNDIyLCAgMjA4LCAgNDIxLCAgMTM5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5
LCAgMjA5LAotICAgICAgMjA5LCAgMjc3LCAgMjc4LCAgMjc5LCAgNDIwLCAgNDE5LCAgMTM5LCAg
MTQxLCAgMTQxLCAgMTQxLAotCi0gICAgICAxNDEsICAxNDEsICAxNDEsICAxNDEsICAyMDcsICAy
MDcsICAyMDcsICAyMDcsICAyMDcsICAyMDcsCi0gICAgICAyMDcsICAyMDcsICAyMDcsICAyMDcs
ICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDksICAyMDksCi0gICAgICAyMDksICAyMDksICAy
MDksICAyMDksICAyMDksICAyMDksICAyMDksICAyMDksICAyMDksICAyMDksCi0gICAgICAyMDks
ICAyMDksICAyODYsICAyODcsICAyODgsICAyOTMsICAyOTQsICAyOTUsICAyOTcsICAyOTgsCi0g
ICAgICAyOTksICAzMDUsICAzMDYsICAzMDcsICAzODcsICAzODgsICAzODksICA0MTgsICA0MTcs
ICA0MTYsCi0gICAgICA0MTUsICA0MTQsICA0MTMsICA0MTIsICA0MTEsICA0MTAsICA0MDksICAz
OTAsICA0MDgsICAzOTEsCi0gICAgICAgNzksICAgNzksICA0MDUsICA0MDQsICA0MDMsICA0MDIs
ICA0MDEsICA0MDAsICAzOTksICAzOTgsCi0gICAgICAzOTcsICAzOTYsICAzOTUsICAzOTQsICAz
OTMsICAzOTIsICAzODYsICAzODUsICAzODQsICAzODMsCi0gICAgICAzODIsICAzODEsICAzODAs
ICAzNzksICAzNzgsICAzNzcsICAzNzYsICAzNzUsICAzNzQsICAzNzMsCi0gICAgICAzNzIsICAz
NzEsICAzNzAsICAzNjksICAzNjgsICAzNjcsICAzNjYsICAzNjUsICAzNjQsICAzNjMsCi0KLSAg
ICAgIDM2MiwgIDM2MSwgIDM2MCwgIDM1OSwgIDM1OCwgIDM1NywgIDM1NiwgIDM1NSwgIDM1NCwg
IDM1MywKLSAgICAgIDM1MiwgIDM1MSwgIDM1MCwgIDM0OSwgIDM0OCwgIDM0NywgIDM0NiwgIDM0
NSwgIDM0NCwgIDM0MywKLSAgICAgIDM0MiwgIDM0MSwgIDM0MCwgIDMzOSwgIDMzOCwgIDMzNywg
IDMzNiwgIDMzNSwgIDMzNCwgIDMzMywKLSAgICAgIDMzMiwgIDMzMSwgIDMzMCwgIDMyOSwgIDMy
OCwgIDMyNywgIDMyNiwgIDMyNSwgIDMyNCwgIDMyMywKLSAgICAgIDMyMiwgIDMyMSwgIDMyMCwg
IDMxOSwgIDMxOCwgIDMxNywgIDMxNiwgIDMxNSwgIDMxNCwgIDMxMywKLSAgICAgIDMxMiwgIDMx
MSwgIDMxMCwgIDMwOSwgIDMwOCwgIDMwNCwgIDMwMywgIDMwMiwgIDMwMSwgIDMwMCwKLSAgICAg
IDI5NiwgIDI5MiwgIDI5MSwgIDI5MCwgIDI4OSwgIDI4NSwgIDI4NCwgIDI4MywgIDI4MiwgIDI4
MSwKLSAgICAgIDI4MCwgIDI3NiwgIDI3NSwgIDI3NCwgIDI3MywgIDI3MiwgIDI2OCwgIDI2Nywg
IDI2NiwgIDI2MywKLSAgICAgIDI2MiwgIDI2MSwgIDI2MCwgIDI1OSwgIDI1OCwgIDI1NywgIDI1
NiwgIDI1NSwgIDI1NCwgIDI1MywKLSAgICAgIDI1MiwgIDI1MSwgIDI1MCwgIDI0OSwgIDI0OCwg
IDI0NywgIDI0NiwgIDI0NSwgIDI0MSwgIDI0MCwKLQotICAgICAgMjM5LCAgMjM4LCAgMjM3LCAg
MjM2LCAgMjM1LCAgMjM0LCAgMjMzLCAgMjMyLCAgMjMxLCAgMjMwLAotICAgICAgMjI5LCAgMjI4
LCAgMjI3LCAgMjI2LCAgMjI1LCAgMjI0LCAgMjIzLCAgMjIyLCAgMjIxLCAgMjIwLAotICAgICAg
MjE5LCAgMjE4LCAgMjE1LCAgMjE0LCAgMjEzLCAgMjEyLCAgMjExLCAgMjEwLCAgMjA1LCAgMjAy
LAotICAgICAgMjAxLCAgMjAwLCAgMTk3LCAgMTk2LCAgMTk1LCAgMTk0LCAgMTkzLCAgMTkyLCAg
MTg5LCAgMTg4LAotICAgICAgMTg3LCAgMTg2LCAgMTg1LCAgMTg0LCAgMTgzLCAgMTgyLCAgMTgx
LCAgMTgwLCAgMTc5LCAgMTc4LAotICAgICAgMTc1LCAgMTY5LCAgMTY4LCAgMTY3LCAgMTY2LCAg
MTY1LCAgMTY0LCAgMTYxLCAgMTYwLCAgMTU5LAotICAgICAgMTU4LCAgMTU3LCAgMTU2LCAgMTU1
LCAgMTU0LCAgMTUzLCAgMTUyLCAgMTUxLCAgMTUwLCAgMTQ5LAotICAgICAgMTQ4LCAgMTQ3LCAg
MTQ2LCAgMTQ1LCAgMTQ0LCAgMTQzLCAgMTM0LCAgMTE4LCAgMTE0LCAgMTA5LAotICAgICAgMTAy
LCAgIDc2LCAgIDcxLCAgIDY1LCAgIDU5LCAgIDU0LCAgNDQyLCAgICAzLCAgNDQyLCAgNDQyLAot
ICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLAotCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0g
ICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIKLSAgICB9IDsKLQotc3RhdGljIHl5Y29u
c3QgZmxleF9pbnQxNl90IHl5X2Noa1s2NTZdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgOCwgICAgOCwgICAgOSwKLSAgICAgICAx
MywgICAxNSwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAyNCwK
LSAgICAgICAyNCwgICAzMCwgICAzMCwgICA0MCwgICAxNSwgICAxMywgICA0NywgICA0MCwgICAg
OSwgICAxOCwKLSAgICAgICA0NywgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwg
ICAxOCwgICAxOSwgICAyOSwKLQotICAgICAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAg
IDE5LCAgIDE5LCAgIDE4LCAgIDIyLCAgIDMxLAotICAgICAgIDQxLCAgIDMxLCAgIDE4LCAgIDI5
LCAgNDQ0LCAgIDMxLCAgIDE5LCAgMTMzLCAgNDM5LCAgMTMzLAotICAgICAgIDE4LCAgIDMyLCAg
IDM0LCAgIDQxLCAgIDM0LCAgIDIyLCAgIDMzLCAgIDIyLCAgIDIyLCAgIDE5LAotICAgICAgIDMz
LCAgIDMyLCAgIDM1LCAgIDM0LCAgIDMyLCAgIDMzLCAgIDM3LCAgIDE4LCAgIDUxLCAgIDM4LAot
ICAgICAgIDM1LCAgIDMzLCAgIDM1LCAgIDQzLCAgIDM3LCAgIDM1LCAgIDM4LCAgIDk5LCAgNDM4
LCAgIDQ1LAotICAgICAgIDQ4LCAgIDM1LCAgNDM3LCAgIDM4LCAgIDQ4LCAgIDM3LCAgIDQ1LCAg
IDQ1LCAgIDQzLCAgIDQ2LAotICAgICAgIDk5LCAgIDQzLCAgIDQ2LCAgIDQ4LCAgMTA5LCAgMTI5
LCAgIDQ1LCAgIDQ1LCAgMTk4LCAgIDQ1LAotICAgICAgIDQ2LCAgNDM2LCAgMTA5LCAgMTI5LCAg
MTUyLCAgMTUyLCAgMTk4LCAgIDQ2LCAgIDUxLCAgIDY0LAotICAgICAgIDY0LCAgIDY0LCAgIDY0
LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LAotICAgICAgIDY2LCAg
IDY2LCAgIDY2LCAgNDM1LCAgMTA3LCAgIDY0LCAgMTIyLCAgMTA3LCAgMTA3LCAgNDAxLAotCi0g
ICAgICA0MDEsICAxMDcsICAgNjYsICAxMDcsICAxNzgsICAxNzgsICAxNzgsICA0MzQsICAgNjQs
ICA0MzIsCi0gICAgICA0MzAsICAxMjIsICA0MjksICA0MjgsICAgNjcsICAgNjYsICAgNjcsICAg
NjcsICAgNjcsICAgNjcsCi0gICAgICAgNjcsICAgNjcsICAgNjcsICAgNjgsICA0MjcsICAgNjgs
ICAgNjgsICAgNjgsICAgNjgsICAgNjgsCi0gICAgICAgNjgsICAgNjgsICAgNjcsICAxNDAsICAx
NDAsICAxNDAsICAxNDAsICAxNDAsICAxNDAsICAxNDAsCi0gICAgICA0MjYsICAgNjgsICAgNjks
ICA0MjQsICAgNjksICAgNjcsICA0MjMsICAgNjksICAgNjksICAgNjksCi0gICAgICAgNjksICAg
NjksICAgNjksICAgNjksICAgNjgsICAxMzcsICA0MjIsICAxMzcsICA0MjEsICA0MjAsCi0gICAg
ICAxMzcsICAxMzcsICAxMzcsICAxMzcsICAxMzcsICAxMzcsICAxMzcsICAxMzgsICAxMzgsICAx
MzgsCi0gICAgICAxMzgsICAxMzgsICAxMzgsICAxMzgsICAyMDIsICAyMDIsICAyMDIsICA0MTks
ICA0MTgsICAxMzksCi0gICAgICA0MTcsICAxMzksICA0MTYsICAxMzgsICAxMzksICAxMzksICAx
MzksICAxMzksICAxMzksICAxMzksCi0gICAgICAxMzksICAyMTMsICAyMTMsICAyMTMsICA0MTQs
ICA0MTMsICAxMzgsICAxNDEsICAxNDEsICAxNDEsCi0KLSAgICAgIDE0MSwgIDE0MSwgIDE0MSwg
IDE0MSwgIDIwNiwgIDIwNiwgIDIwNiwgIDIwNiwgIDIwNiwgIDIwNiwKLSAgICAgIDIwNiwgIDIw
NywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwOCwgIDIwOCwKLSAgICAg
IDIwOCwgIDIwOCwgIDIwOCwgIDIwOCwgIDIwOCwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIw
OSwKLSAgICAgIDIwOSwgIDIwOSwgIDIyMSwgIDIyMSwgIDIyMSwgIDIyOSwgIDIyOSwgIDIyOSwg
IDIzMywgIDIzMywKLSAgICAgIDIzMywgIDIzOSwgIDIzOSwgIDIzOSwgIDM3MiwgIDM3MiwgIDM3
MiwgIDQxMiwgIDQxMSwgIDQxMCwKLSAgICAgIDQwOSwgIDQwOCwgIDQwNywgIDQwNiwgIDQwNSwg
IDQwNCwgIDQwMywgIDM3MiwgIDQwMiwgIDM3MiwKLSAgICAgIDQ0MywgIDQ0MywgIDQwMCwgIDM5
MSwgIDM5MCwgIDM4OSwgIDM4OCwgIDM4NywgIDM4NiwgIDM4NCwKLSAgICAgIDM4MywgIDM4Miwg
IDM3OSwgIDM3OCwgIDM3NiwgIDM3MywgIDM3MSwgIDM3MCwgIDM2OSwgIDM2NywKLSAgICAgIDM2
NiwgIDM2NSwgIDM2MiwgIDM2MSwgIDM2MCwgIDM1OSwgIDM1OCwgIDM1NywgIDM1NiwgIDM1NSwK
LSAgICAgIDM0OSwgIDM0NiwgIDM0MywgIDM0MiwgIDM0MSwgIDM0MCwgIDMzOSwgIDMzNywgIDMz
NSwgIDMzNCwKLQotICAgICAgMzMzLCAgMzMyLCAgMzMwLCAgMzI5LCAgMzI3LCAgMzI1LCAgMzI0
LCAgMzIzLCAgMzIyLCAgMzIxLAotICAgICAgMzIwLCAgMzE5LCAgMzE4LCAgMzE2LCAgMzE1LCAg
MzE0LCAgMzEzLCAgMzEyLCAgMzExLCAgMzEwLAotICAgICAgMzA5LCAgMzA4LCAgMzA0LCAgMzAz
LCAgMzAwLCAgMjg5LCAgMjg1LCAgMjg0LCAgMjgzLCAgMjgyLAotICAgICAgMjc1LCAgMjc0LCAg
MjczLCAgMjY4LCAgMjY3LCAgMjY2LCAgMjY1LCAgMjY0LCAgMjYzLCAgMjYwLAotICAgICAgMjU5
LCAgMjU4LCAgMjU3LCAgMjU2LCAgMjU1LCAgMjU0LCAgMjUzLCAgMjUyLCAgMjUxLCAgMjUwLAot
ICAgICAgMjQ5LCAgMjQ4LCAgMjQ3LCAgMjQ2LCAgMjQ1LCAgMjM4LCAgMjM3LCAgMjM2LCAgMjM1
LCAgMjM0LAotICAgICAgMjMyLCAgMjI4LCAgMjI2LCAgMjI1LCAgMjI0LCAgMjIwLCAgMjE5LCAg
MjE4LCAgMjE3LCAgMjE2LAotICAgICAgMjE1LCAgMjEyLCAgMjEwLCAgMjA1LCAgMjA0LCAgMjAz
LCAgMjAxLCAgMjAwLCAgMTk5LCAgMTk3LAotICAgICAgMTk2LCAgMTk1LCAgMTk0LCAgMTkzLCAg
MTkyLCAgMTkxLCAgMTkwLCAgMTg5LCAgMTg4LCAgMTg3LAotICAgICAgMTg2LCAgMTg1LCAgMTg0
LCAgMTgzLCAgMTgyLCAgMTgxLCAgMTgwLCAgMTc5LCAgMTc3LCAgMTc2LAotCi0gICAgICAxNzUs
ICAxNzQsICAxNzMsICAxNzIsICAxNzEsICAxNzAsICAxNjksICAxNjgsICAxNjcsICAxNjYsCi0g
ICAgICAxNjUsICAxNjMsICAxNjIsICAxNjEsICAxNjAsICAxNTksICAxNTgsICAxNTcsICAxNTYs
ICAxNTUsCi0gICAgICAxNTQsICAxNTMsICAxNTEsICAxNTAsICAxNDksICAxNDgsICAxNDcsICAx
NDYsICAxMzQsICAxMzIsCi0gICAgICAxMzEsICAxMzAsICAxMjgsICAxMjcsICAxMjYsICAxMjUs
ICAxMjQsICAxMjMsICAxMjEsICAxMjAsCi0gICAgICAxMTksICAxMTgsICAxMTcsICAxMTYsICAx
MTUsICAxMTQsICAxMTMsICAxMTIsICAxMTEsICAxMTAsCi0gICAgICAxMDgsICAxMDUsICAxMDQs
ICAxMDMsICAxMDIsICAxMDEsICAxMDAsICAgOTgsICAgOTcsICAgOTYsCi0gICAgICAgOTUsICAg
OTQsICAgOTMsICAgOTIsICAgOTEsICAgOTAsICAgODksICAgODgsICAgODcsICAgODYsCi0gICAg
ICAgODUsICAgODQsICAgODMsICAgODIsICAgNzgsICAgNzQsICAgNDksICAgNDQsICAgNDIsICAg
MzksCi0gICAgICAgMzYsICAgMjMsICAgMjAsICAgMTcsICAgMTIsICAgIDcsICAgIDMsICA0NDIs
ICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsCi0KLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MgotICAgIH0gOwot
Ci0vKiBUYWJsZSBvZiBib29sZWFucywgdHJ1ZSBpZiBydWxlIGNvdWxkIG1hdGNoIGVvbC4gKi8K
LXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbMTQ4XSA9
Ci0gICAgeyAgIDAsCi0wLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAgICAgfTsKLQotLyogVGhl
IGludGVudCBiZWhpbmQgdGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKLSAqIGFu
eSB1c2VzIG9mIFJFSkVDVCB3aGljaCBmbGV4IG1pc3NlZC4KLSAqLwotI2RlZmluZSBSRUpFQ1Qg
cmVqZWN0X3VzZWRfYnV0X25vdF9kZXRlY3RlZAotI2RlZmluZSB5eW1vcmUoKSB5eW1vcmVfdXNl
ZF9idXRfbm90X2RldGVjdGVkCi0jZGVmaW5lIFlZX01PUkVfQURKIDAKLSNkZWZpbmUgWVlfUkVT
VE9SRV9ZWV9NT1JFX09GRlNFVAotLyoKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLVRoaXMgZmlsZSBj
b250YWlucyB0aGUgTGV4IHNwZWNpZmljYXRpb24gZm9yIEdMU0wgRVMuCi1CYXNlZCBvbiBBTlNJ
IEMgZ3JhbW1hciwgTGV4IHNwZWNpZmljYXRpb246Ci1odHRwOi8vd3d3Lmx5c2F0b3IubGl1LnNl
L2MvQU5TSS1DLWdyYW1tYXItbC5odG1sCi0KLUlGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBB
TFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaCwKLVdISUNIIEdFTkVSQVRFUyBUSEUg
R0xTTCBFUyBMRVhFUiAoZ2xzbGFuZ19sZXguY3BwKS4KLSovCi0KLSNpbmNsdWRlICJjb21waWxl
ci9nbHNsYW5nLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VDb250ZXh0LmgiCi0jaW5jbHVk
ZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvdXRp
bC5oIgotI2luY2x1ZGUgImdsc2xhbmdfdGFiLmgiCi0KLS8qIHdpbmRvd3Mgb25seSBwcmFnbWEg
Ki8KLSNpZmRlZiBfTVNDX1ZFUgotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0MTAyKQotI2Vu
ZGlmCi0KLSNkZWZpbmUgWVlfVVNFUl9BQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgeXlsbG9jLT5maXJzdF9maWxlID0geXlsbG9jLT5sYXN0X2ZpbGUgPSB5eWNv
bHVtbjsgXAotICAgIHl5bGxvYy0+Zmlyc3RfbGluZSA9IHl5bGxvYy0+bGFzdF9saW5lID0geXls
aW5lbm87Ci0KLSNkZWZpbmUgWVlfSU5QVVQoYnVmLCByZXN1bHQsIG1heF9zaXplKSBcCi0gICAg
cmVzdWx0ID0gc3RyaW5nX2lucHV0KGJ1ZiwgbWF4X3NpemUsIHl5c2Nhbm5lcik7Ci0KLXN0YXRp
YyB5eV9zaXplX3Qgc3RyaW5nX2lucHV0KGNoYXIqIGJ1ZiwgeXlfc2l6ZV90IG1heF9zaXplLCB5
eXNjYW5fdCB5eXNjYW5uZXIpOwotc3RhdGljIGludCBjaGVja190eXBlKHl5c2Nhbl90IHl5c2Nh
bm5lcik7Ci1zdGF0aWMgaW50IHJlc2VydmVkX3dvcmQoeXlzY2FuX3QgeXlzY2FubmVyKTsKLXN0
YXRpYyBpbnQgaW50X2NvbnN0YW50KHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci1zdGF0aWMgaW50IGZs
b2F0X2NvbnN0YW50KHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0KLSNkZWZpbmUgSU5JVElBTCAwCi0K
LSNkZWZpbmUgWVlfRVhUUkFfVFlQRSBUUGFyc2VDb250ZXh0KgotCi0vKiBIb2xkcyB0aGUgZW50
aXJlIHN0YXRlIG9mIHRoZSByZWVudHJhbnQgc2Nhbm5lci4gKi8KLXN0cnVjdCB5eWd1dHNfdAot
ICAgIHsKLQotICAgIC8qIFVzZXItZGVmaW5lZC4gTm90IHRvdWNoZWQgYnkgZmxleC4gKi8KLSAg
ICBZWV9FWFRSQV9UWVBFIHl5ZXh0cmFfcjsKLQotICAgIC8qIFRoZSByZXN0IGFyZSB0aGUgc2Ft
ZSBhcyB0aGUgZ2xvYmFscyBkZWNsYXJlZCBpbiB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLiAq
LwotICAgIEZJTEUgKnl5aW5fciwgKnl5b3V0X3I7Ci0gICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFj
a190b3A7IC8qKjwgaW5kZXggb2YgdG9wIG9mIHN0YWNrLiAqLwotICAgIHNpemVfdCB5eV9idWZm
ZXJfc3RhY2tfbWF4OyAvKio8IGNhcGFjaXR5IG9mIHN0YWNrLiAqLwotICAgIFlZX0JVRkZFUl9T
VEFURSAqIHl5X2J1ZmZlcl9zdGFjazsgLyoqPCBTdGFjayBhcyBhbiBhcnJheS4gKi8KLSAgICBj
aGFyIHl5X2hvbGRfY2hhcjsKLSAgICB5eV9zaXplX3QgeXlfbl9jaGFyczsKLSAgICB5eV9zaXpl
X3QgeXlsZW5nX3I7Ci0gICAgY2hhciAqeXlfY19idWZfcDsKLSAgICBpbnQgeXlfaW5pdDsKLSAg
ICBpbnQgeXlfc3RhcnQ7Ci0gICAgaW50IHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZjsKLSAg
ICBpbnQgeXlfc3RhcnRfc3RhY2tfcHRyOwotICAgIGludCB5eV9zdGFydF9zdGFja19kZXB0aDsK
LSAgICBpbnQgKnl5X3N0YXJ0X3N0YWNrOwotICAgIHl5X3N0YXRlX3R5cGUgeXlfbGFzdF9hY2Nl
cHRpbmdfc3RhdGU7Ci0gICAgY2hhciogeXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLQotICAgIGlu
dCB5eWxpbmVub19yOwotICAgIGludCB5eV9mbGV4X2RlYnVnX3I7Ci0KLSAgICBjaGFyICp5eXRl
eHRfcjsKLSAgICBpbnQgeXlfbW9yZV9mbGFnOwotICAgIGludCB5eV9tb3JlX2xlbjsKLQotICAg
IFlZU1RZUEUgKiB5eWx2YWxfcjsKLQotICAgIFlZTFRZUEUgKiB5eWxsb2NfcjsKLQotICAgIH07
IC8qIGVuZCBzdHJ1Y3QgeXlndXRzX3QgKi8KLQotc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMg
KHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi0gICAgLyogVGhpcyBtdXN0IGdvIGhlcmUgYmVjYXVz
ZSBZWVNUWVBFIGFuZCBZWUxUWVBFIGFyZSBpbmNsdWRlZAotICAgICAqIGZyb20gYmlzb24gb3V0
cHV0IGluIHNlY3Rpb24gMS4qLwotICAgICMgICAgZGVmaW5lIHl5bHZhbCB5eWctPnl5bHZhbF9y
Ci0gICAgCi0gICAgIyAgICBkZWZpbmUgeXlsbG9jIHl5Zy0+eXlsbG9jX3IKLSAgICAKLWludCB5
eWxleF9pbml0ICh5eXNjYW5fdCogc2Nhbm5lcik7Ci0KLWludCB5eWxleF9pbml0X2V4dHJhIChZ
WV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCx5eXNjYW5fdCogc2Nhbm5lcik7Ci0KLS8qIEFjY2Vz
c29yIG1ldGhvZHMgdG8gZ2xvYmFscy4KLSAgIFRoZXNlIGFyZSBtYWRlIHZpc2libGUgdG8gbm9u
LXJlZW50cmFudCBzY2FubmVycyBmb3IgY29udmVuaWVuY2UuICovCi0KLWludCB5eWxleF9kZXN0
cm95ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotaW50IHl5Z2V0X2RlYnVnICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKLQotdm9pZCB5eXNldF9kZWJ1ZyAoaW50IGRlYnVnX2ZsYWcgLHl5c2Nhbl90
IHl5c2Nhbm5lciApOwotCi1ZWV9FWFRSQV9UWVBFIHl5Z2V0X2V4dHJhICh5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKLQotdm9pZCB5eXNldF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQg
LHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1GSUxFICp5eWdldF9pbiAoeXlzY2FuX3QgeXlzY2Fu
bmVyICk7Ci0KLXZvaWQgeXlzZXRfaW4gIChGSUxFICogaW5fc3RyICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKLQotRklMRSAqeXlnZXRfb3V0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCB5
eXNldF9vdXQgIChGSUxFICogb3V0X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXl5X3Np
emVfdCB5eWdldF9sZW5nICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotY2hhciAqeXlnZXRfdGV4
dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLWludCB5eWdldF9saW5lbm8gKHl5c2Nhbl90IHl5
c2Nhbm5lciApOwotCi12b2lkIHl5c2V0X2xpbmVubyAoaW50IGxpbmVfbnVtYmVyICx5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKLQotWVlTVFlQRSAqIHl5Z2V0X2x2YWwgKHl5c2Nhbl90IHl5c2Nhbm5l
ciApOwotCi12b2lkIHl5c2V0X2x2YWwgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0gLHl5c2Nhbl90
IHl5c2Nhbm5lciApOwotCi0gICAgICAgWVlMVFlQRSAqeXlnZXRfbGxvYyAoeXlzY2FuX3QgeXlz
Y2FubmVyICk7Ci0gICAgCi0gICAgICAgIHZvaWQgeXlzZXRfbGxvYyAoWVlMVFlQRSAqIHl5bGxv
Y19wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gICAgCi0vKiBNYWNyb3MgYWZ0ZXIgdGhp
cyBwb2ludCBjYW4gYWxsIGJlIG92ZXJyaWRkZW4gYnkgdXNlciBkZWZpbml0aW9ucyBpbgotICog
c2VjdGlvbiAxLgotICovCi0KLSNpZm5kZWYgWVlfU0tJUF9ZWVdSQVAKLSNpZmRlZiBfX2NwbHVz
cGx1cwotZXh0ZXJuICJDIiBpbnQgeXl3cmFwICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSNlbHNl
Ci1leHRlcm4gaW50IHl5d3JhcCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0jZW5kaWYKLSNlbmRp
ZgotCi0jaWZuZGVmIHl5dGV4dF9wdHIKLXN0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hh
ciAqLHl5Y29uc3QgY2hhciAqLGludCAseXlzY2FuX3QgeXlzY2FubmVyKTsKLSNlbmRpZgotCi0j
aWZkZWYgWVlfTkVFRF9TVFJMRU4KLXN0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3Qg
Y2hhciAqICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotI2VuZGlmCi0KLSNpZm5kZWYgWVlfTk9fSU5Q
VVQKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1zdGF0aWMgaW50IHl5aW5wdXQgKHl5c2Nhbl90IHl5
c2Nhbm5lciApOwotI2Vsc2UKLXN0YXRpYyBpbnQgaW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciAp
OwotI2VuZGlmCi0KLSNlbmRpZgotCi0vKiBBbW91bnQgb2Ygc3R1ZmYgdG8gc2x1cnAgdXAgd2l0
aCBlYWNoIHJlYWQuICovCi0jaWZuZGVmIFlZX1JFQURfQlVGX1NJWkUKLSNkZWZpbmUgWVlfUkVB
RF9CVUZfU0laRSA4MTkyCi0jZW5kaWYKLQotLyogQ29weSB3aGF0ZXZlciB0aGUgbGFzdCBydWxl
IG1hdGNoZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gKi8KLSNpZm5kZWYgRUNITwotLyogVGhp
cyB1c2VkIHRvIGJlIGFuIGZwdXRzKCksIGJ1dCBzaW5jZSB0aGUgc3RyaW5nIG1pZ2h0IGNvbnRh
aW4gTlVMJ3MsCi0gKiB3ZSBub3cgdXNlIGZ3cml0ZSgpLgotICovCi0jZGVmaW5lIEVDSE8gZndy
aXRlKCB5eXRleHQsIHl5bGVuZywgMSwgeXlvdXQgKQotI2VuZGlmCi0KLS8qIEdldHMgaW5wdXQg
YW5kIHN0dWZmcyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3Ig
WVlfTlVMTCwKLSAqIGlzIHJldHVybmVkIGluICJyZXN1bHQiLgotICovCi0jaWZuZGVmIFlZX0lO
UFVUCi0jZGVmaW5lIFlZX0lOUFVUKGJ1ZixyZXN1bHQsbWF4X3NpemUpIFwKLQlpZiAoIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCi0JCXsgXAotCQlpbnQg
YyA9ICcqJzsgXAotCQl5eV9zaXplX3QgbjsgXAotCQlmb3IgKCBuID0gMDsgbiA8IG1heF9zaXpl
ICYmIFwKLQkJCSAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsr
biApIFwKLQkJCWJ1ZltuXSA9IChjaGFyKSBjOyBcCi0JCWlmICggYyA9PSAnXG4nICkgXAotCQkJ
YnVmW24rK10gPSAoY2hhcikgYzsgXAotCQlpZiAoIGMgPT0gRU9GICYmIGZlcnJvciggeXlpbiAp
ICkgXAotCQkJWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiAp
OyBcCi0JCXJlc3VsdCA9IG47IFwKLQkJfSBcCi0JZWxzZSBcCi0JCXsgXAotCQllcnJubz0wOyBc
Ci0JCXdoaWxlICggKHJlc3VsdCA9IGZyZWFkKGJ1ZiwgMSwgbWF4X3NpemUsIHl5aW4pKT09MCAm
JiBmZXJyb3IoeXlpbikpIFwKLQkJCXsgXAotCQkJaWYoIGVycm5vICE9IEVJTlRSKSBcCi0JCQkJ
eyBcCi0JCQkJWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiAp
OyBcCi0JCQkJYnJlYWs7IFwKLQkJCQl9IFwKLQkJCWVycm5vPTA7IFwKLQkJCWNsZWFyZXJyKHl5
aW4pOyBcCi0JCQl9IFwKLQkJfVwKLVwKLQotI2VuZGlmCi0KLS8qIE5vIHNlbWktY29sb24gYWZ0
ZXIgcmV0dXJuOyBjb3JyZWN0IHVzYWdlIGlzIHRvIHdyaXRlICJ5eXRlcm1pbmF0ZSgpOyIgLQot
ICogd2UgZG9uJ3Qgd2FudCBhbiBleHRyYSAnOycgYWZ0ZXIgdGhlICJyZXR1cm4iIGJlY2F1c2Ug
dGhhdCB3aWxsIGNhdXNlCi0gKiBzb21lIGNvbXBpbGVycyB0byBjb21wbGFpbiBhYm91dCB1bnJl
YWNoYWJsZSBzdGF0ZW1lbnRzLgotICovCi0jaWZuZGVmIHl5dGVybWluYXRlCi0jZGVmaW5lIHl5
dGVybWluYXRlKCkgcmV0dXJuIFlZX05VTEwKLSNlbmRpZgotCi0vKiBOdW1iZXIgb2YgZW50cmll
cyBieSB3aGljaCBzdGFydC1jb25kaXRpb24gc3RhY2sgZ3Jvd3MuICovCi0jaWZuZGVmIFlZX1NU
QVJUX1NUQUNLX0lOQ1IKLSNkZWZpbmUgWVlfU1RBUlRfU1RBQ0tfSU5DUiAyNQotI2VuZGlmCi0K
LS8qIFJlcG9ydCBhIGZhdGFsIGVycm9yLiAqLwotI2lmbmRlZiBZWV9GQVRBTF9FUlJPUgotI2Rl
ZmluZSBZWV9GQVRBTF9FUlJPUihtc2cpIHl5X2ZhdGFsX2Vycm9yKCBtc2cgLCB5eXNjYW5uZXIp
Ci0jZW5kaWYKLQotLyogZW5kIHRhYmxlcyBzZXJpYWxpemF0aW9uIHN0cnVjdHVyZXMgYW5kIHBy
b3RvdHlwZXMgKi8KLQotLyogRGVmYXVsdCBkZWNsYXJhdGlvbiBvZiBnZW5lcmF0ZWQgc2Nhbm5l
ciAtIGEgZGVmaW5lIHNvIHRoZSB1c2VyIGNhbgotICogZWFzaWx5IGFkZCBwYXJhbWV0ZXJzLgot
ICovCi0jaWZuZGVmIFlZX0RFQ0wKLSNkZWZpbmUgWVlfREVDTF9JU19PVVJTIDEKLQotZXh0ZXJu
IGludCB5eWxleCBcCi0gICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSxZWUxU
WVBFICogeXlsbG9jX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotCi0jZGVmaW5lIFlZX0RF
Q0wgaW50IHl5bGV4IFwKLSAgICAgICAgICAgICAgIChZWVNUWVBFICogeXlsdmFsX3BhcmFtLCBZ
WUxUWVBFICogeXlsbG9jX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQotI2VuZGlmIC8qICFZ
WV9ERUNMICovCi0KLS8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHJ1
bGUsIGFmdGVyIHl5dGV4dCBhbmQgeXlsZW5nCi0gKiBoYXZlIGJlZW4gc2V0IHVwLgotICovCi0j
aWZuZGVmIFlZX1VTRVJfQUNUSU9OCi0jZGVmaW5lIFlZX1VTRVJfQUNUSU9OCi0jZW5kaWYKLQot
LyogQ29kZSBleGVjdXRlZCBhdCB0aGUgZW5kIG9mIGVhY2ggcnVsZS4gKi8KLSNpZm5kZWYgWVlf
QlJFQUsKLSNkZWZpbmUgWVlfQlJFQUsgYnJlYWs7Ci0jZW5kaWYKLQotI2RlZmluZSBZWV9SVUxF
X1NFVFVQIFwKLQlZWV9VU0VSX0FDVElPTgotCi0vKiogVGhlIG1haW4gc2Nhbm5lciBmdW5jdGlv
biB3aGljaCBkb2VzIGFsbCB0aGUgd29yay4KLSAqLwotWVlfREVDTAotewotCXJlZ2lzdGVyIHl5
X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKLQlyZWdpc3RlciBjaGFyICp5eV9jcCwgKnl5
X2JwOwotCXJlZ2lzdGVyIGludCB5eV9hY3Q7Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgeXlsdmFsID0geXlsdmFsX3BhcmFt
OwotCi0gICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOwotCi0JaWYgKCAheXlnLT55eV9pbml0ICkK
LQkJewotCQl5eWctPnl5X2luaXQgPSAxOwotCi0jaWZkZWYgWVlfVVNFUl9JTklUCi0JCVlZX1VT
RVJfSU5JVDsKLSNlbmRpZgotCi0JCWlmICggISB5eWctPnl5X3N0YXJ0ICkKLQkJCXl5Zy0+eXlf
c3RhcnQgPSAxOwkvKiBmaXJzdCBzdGFydCBzdGF0ZSAqLwotCi0JCWlmICggISB5eWluICkKLQkJ
CXl5aW4gPSBzdGRpbjsKLQotCQlpZiAoICEgeXlvdXQgKQotCQkJeXlvdXQgPSBzdGRvdXQ7Ci0K
LQkJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICkgewotCQkJeXllbnN1cmVfYnVmZmVyX3N0YWNr
ICh5eXNjYW5uZXIpOwotCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KLQkJCQl5eV9jcmVh
dGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7Ci0JCX0KLQotCQl5eV9sb2Fk
X2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLQkJfQotCi0Jd2hpbGUgKCAxICkJCS8qIGxvb3Bz
IHVudGlsIGVuZC1vZi1maWxlIGlzIHJlYWNoZWQgKi8KLQkJewotCQl5eV9jcCA9IHl5Zy0+eXlf
Y19idWZfcDsKLQotCQkvKiBTdXBwb3J0IG9mIHl5dGV4dC4gKi8KLQkJKnl5X2NwID0geXlnLT55
eV9ob2xkX2NoYXI7Ci0KLQkJLyogeXlfYnAgcG9pbnRzIHRvIHRoZSBwb3NpdGlvbiBpbiB5eV9j
aF9idWYgb2YgdGhlIHN0YXJ0IG9mCi0JCSAqIHRoZSBjdXJyZW50IHJ1bi4KLQkJICovCi0JCXl5
X2JwID0geXlfY3A7Ci0KLQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7Ci15eV9t
YXRjaDoKLQkJZG8KLQkJCXsKLQkJCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IHl5X2VjW1lZX1ND
X1RPX1VJKCp5eV9jcCldOwotCQkJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQot
CQkJCXsKLQkJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0
ZTsKLQkJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKLQkJCQl9Ci0JCQl3
aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3Vy
cmVudF9zdGF0ZSApCi0JCQkJewotCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZb
eXlfY3VycmVudF9zdGF0ZV07Ci0JCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ0MyApCi0J
CQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwotCQkJCX0KLQkJCXl5X2N1
cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25l
ZCBpbnQpIHl5X2NdOwotCQkJKyt5eV9jcDsKLQkJCX0KLQkJd2hpbGUgKCB5eV9jdXJyZW50X3N0
YXRlICE9IDQ0MiApOwotCQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLQkJ
eXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0KLXl5X2Zp
bmRfYWN0aW9uOgotCQl5eV9hY3QgPSB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV07Ci0KLQkJ
WVlfRE9fQkVGT1JFX0FDVElPTjsKLQotCQlpZiAoIHl5X2FjdCAhPSBZWV9FTkRfT0ZfQlVGRkVS
ICYmIHl5X3J1bGVfY2FuX21hdGNoX2VvbFt5eV9hY3RdICkKLQkJCXsKLQkJCXl5X3NpemVfdCB5
eWw7Ci0JCQlmb3IgKCB5eWwgPSAwOyB5eWwgPCB5eWxlbmc7ICsreXlsICkKLQkJCQlpZiAoIHl5
dGV4dFt5eWxdID09ICdcbicgKQotCQkJCQkgICAKLSAgICBkb3sgeXlsaW5lbm8rKzsKLSAgICAg
ICAgeXljb2x1bW49MDsKLSAgICB9d2hpbGUoMCkKLTsKLQkJCX0KLQotZG9fYWN0aW9uOgkvKiBU
aGlzIGxhYmVsIGlzIHVzZWQgb25seSB0byBhY2Nlc3MgRU9GIGFjdGlvbnMuICovCi0KLQkJc3dp
dGNoICggeXlfYWN0ICkKLQl7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dpdGNoICovCi0JCQlj
YXNlIDA6IC8qIG11c3QgYmFjayB1cCAqLwotCQkJLyogdW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9E
T19CRUZPUkVfQUNUSU9OICovCi0JCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLQkJCXl5
X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwotCQkJeXlfY3VycmVudF9zdGF0ZSA9
IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0JCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOwot
Ci1jYXNlIDE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBJTlZBUklBTlQ7IH0KLQlZWV9CUkVB
SwotY2FzZSAyOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSElHSF9QUkVDSVNJT047IH0KLQlZ
WV9CUkVBSwotY2FzZSAzOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gTUVESVVNX1BSRUNJU0lP
TjsgfQotCVlZX0JSRUFLCi1jYXNlIDQ6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBMT1dfUFJF
Q0lTSU9OOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFBS
RUNJU0lPTjsgfQotCVlZX0JSRUFLCi1jYXNlIDY6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBB
VFRSSUJVVEU7IH0KLQlZWV9CUkVBSwotY2FzZSA3OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4g
Q09OU1RfUVVBTDsgfQotCVlZX0JSRUFLCi1jYXNlIDg6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVy
biBVTklGT1JNOyB9Ci0JWVlfQlJFQUsKLWNhc2UgOToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJu
IFZBUllJTkc7IH0KLQlZWV9CUkVBSwotY2FzZSAxMDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJu
IEJSRUFLOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBD
T05USU5VRTsgfQotCVlZX0JSRUFLCi1jYXNlIDEyOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4g
RE87IH0KLQlZWV9CUkVBSwotY2FzZSAxMzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEZPUjsg
fQotCVlZX0JSRUFLCi1jYXNlIDE0OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gV0hJTEU7IH0K
LQlZWV9CUkVBSwotY2FzZSAxNToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElGOyB9Ci0JWVlf
QlJFQUsKLWNhc2UgMTY6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBFTFNFOyB9Ci0JWVlfQlJF
QUsKLWNhc2UgMTc6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBJTl9RVUFMOyB9Ci0JWVlfQlJF
QUsKLWNhc2UgMTg6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBPVVRfUVVBTDsgfQotCVlZX0JS
RUFLCi1jYXNlIDE5OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSU5PVVRfUVVBTDsgfQotCVlZ
X0JSRUFLCi1jYXNlIDIwOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gRkxPQVRfVFlQRTsgfQot
CVlZX0JSRUFLCi1jYXNlIDIxOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSU5UX1RZUEU7IH0K
LQlZWV9CUkVBSwotY2FzZSAyMjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFZPSURfVFlQRTsg
fQotCVlZX0JSRUFLCi1jYXNlIDIzOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gQk9PTF9UWVBF
OyB9Ci0JWVlfQlJFQUsKLWNhc2UgMjQ6Ci1ZWV9SVUxFX1NFVFVQCi17IHl5bHZhbC0+bGV4LmIg
PSB0cnVlOyAgcmV0dXJuIEJPT0xDT05TVEFOVDsgfQotCVlZX0JSRUFLCi1jYXNlIDI1OgotWVlf
UlVMRV9TRVRVUAoteyB5eWx2YWwtPmxleC5iID0gZmFsc2U7IHJldHVybiBCT09MQ09OU1RBTlQ7
IH0KLQlZWV9CUkVBSwotY2FzZSAyNjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIERJU0NBUkQ7
IH0KLQlZWV9CUkVBSwotY2FzZSAyNzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFJFVFVSTjsg
fQotCVlZX0JSRUFLCi1jYXNlIDI4OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gTUFUUklYMjsg
fQotCVlZX0JSRUFLCi1jYXNlIDI5OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gTUFUUklYMzsg
fQotCVlZX0JSRUFLCi1jYXNlIDMwOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gTUFUUklYNDsg
fQotCVlZX0JSRUFLCi1jYXNlIDMxOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gVkVDMjsgfQot
CVlZX0JSRUFLCi1jYXNlIDMyOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gVkVDMzsgfQotCVlZ
X0JSRUFLCi1jYXNlIDMzOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gVkVDNDsgfQotCVlZX0JS
RUFLCi1jYXNlIDM0OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSVZFQzI7IH0KLQlZWV9CUkVB
SwotY2FzZSAzNToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElWRUMzOyB9Ci0JWVlfQlJFQUsK
LWNhc2UgMzY6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBJVkVDNDsgfQotCVlZX0JSRUFLCi1j
YXNlIDM3OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gQlZFQzI7IH0KLQlZWV9CUkVBSwotY2Fz
ZSAzODoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEJWRUMzOyB9Ci0JWVlfQlJFQUsKLWNhc2Ug
Mzk6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBCVkVDNDsgfQotCVlZX0JSRUFLCi1jYXNlIDQw
OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gU0FNUExFUjJEOyB9Ci0JWVlfQlJFQUsKLWNhc2Ug
NDE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBTQU1QTEVSQ1VCRTsgfQotCVlZX0JSRUFLCi1j
YXNlIDQyOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gU0FNUExFUl9FWFRFUk5BTF9PRVM7IH0K
LQlZWV9CUkVBSwotY2FzZSA0MzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFNBTVBMRVIyRFJF
Q1Q7IH0KLQlZWV9CUkVBSwotY2FzZSA0NDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFNUUlVD
VDsgfQotCVlZX0JSRUFLCi1jYXNlIDQ1OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNDY6Ci1ZWV9SVUxFX1NFVFVQ
Ci17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA0
NzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQot
CVlZX0JSRUFLCi1jYXNlIDQ4OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNDk6Ci1ZWV9SVUxFX1NFVFVQCi17IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA1MDoKLVlZ
X1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JS
RUFLCi1jYXNlIDUxOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNTI6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA1MzoKLVlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1j
YXNlIDU0OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0JWVlfQlJFQUsKLWNhc2UgNTU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA1NjoKLVlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDU3
OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0J
WVlfQlJFQUsKLWNhc2UgNTg6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA1OToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDYwOgotWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJF
QUsKLWNhc2UgNjE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA2MjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDYzOgotWVlfUlVMRV9T
RVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNh
c2UgNjQ6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KLQlZWV9CUkVBSwotY2FzZSA2NToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDY2OgotWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNjc6
Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZ
WV9CUkVBSwotY2FzZSA2ODoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDY5OgotWVlfUlVMRV9TRVRVUAoteyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNzA6Ci1ZWV9S
VUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVB
SwotY2FzZSA3MToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDcyOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNzM6Ci1ZWV9SVUxFX1NF
VFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2Fz
ZSA3NDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQotCVlZX0JSRUFLCi1jYXNlIDc1OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNzY6Ci1ZWV9SVUxFX1NFVFVQCi17
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA3NzoK
LVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZ
X0JSRUFLCi1jYXNlIDc4OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNzk6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA4MDoKLVlZX1JV
TEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFL
Ci1jYXNlIDgxOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgODI6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA4MzoKLVlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNl
IDg0OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0JWVlfQlJFQUsKLWNhc2UgODU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA4NjoKLVlZX1JVTEVfU0VUVVAKLXsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDg3Ogot
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlf
QlJFQUsKLWNhc2UgODg6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA4OToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDkwOgotWVlfUlVM
RV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsK
LWNhc2UgOTE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KLQlZWV9CUkVBSwotY2FzZSA5MjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDkzOgotWVlfUlVMRV9TRVRV
UAotewotICAgeXlsdmFsLT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsgCi0g
ICByZXR1cm4gY2hlY2tfdHlwZSh5eXNjYW5uZXIpOwotfQotCVlZX0JSRUFLCi1jYXNlIDk0Ogot
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gaW50X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KLQlZWV9C
UkVBSwotY2FzZSA5NToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIGludF9jb25zdGFudCh5eXNj
YW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgOTY6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBp
bnRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDk3OgotWVlfUlVMRV9T
RVRVUAoteyByZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1j
YXNlIDk4OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2FubmVy
KTsgfQotCVlZX0JSRUFLCi1jYXNlIDk5OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gZmxvYXRf
Y29uc3RhbnQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDEwMDoKLVlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIEFERF9BU1NJR047IH0KLQlZWV9CUkVBSwotY2FzZSAxMDE6Ci1ZWV9SVUxF
X1NFVFVQCi17IHJldHVybiBTVUJfQVNTSUdOOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTAyOgotWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4gTVVMX0FTU0lHTjsgfQotCVlZX0JSRUFLCi1jYXNlIDEwMzoK
LVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIERJVl9BU1NJR047IH0KLQlZWV9CUkVBSwotY2FzZSAx
MDQ6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBNT0RfQVNTSUdOOyB9Ci0JWVlfQlJFQUsKLWNh
c2UgMTA1OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gTEVGVF9BU1NJR047IH0KLQlZWV9CUkVB
SwotY2FzZSAxMDY6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBSSUdIVF9BU1NJR047IH0KLQlZ
WV9CUkVBSwotY2FzZSAxMDc6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBBTkRfQVNTSUdOOyB9
Ci0JWVlfQlJFQUsKLWNhc2UgMTA4OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gWE9SX0FTU0lH
TjsgfQotCVlZX0JSRUFLCi1jYXNlIDEwOToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIE9SX0FT
U0lHTjsgfQotCVlZX0JSRUFLCi1jYXNlIDExMDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElO
Q19PUDsgfQotCVlZX0JSRUFLCi1jYXNlIDExMToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIERF
Q19PUDsgfQotCVlZX0JSRUFLCi1jYXNlIDExMjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEFO
RF9PUDsgfQotCVlZX0JSRUFLCi1jYXNlIDExMzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIE9S
X09QOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTE0OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gWE9S
X09QOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTE1OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gTEVf
T1A7IH0KLQlZWV9CUkVBSwotY2FzZSAxMTY6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBHRV9P
UDsgfQotCVlZX0JSRUFLCi1jYXNlIDExNzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEVRX09Q
OyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTE4OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gTkVfT1A7
IH0KLQlZWV9CUkVBSwotY2FzZSAxMTk6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBMRUZUX09Q
OyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTIwOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gUklHSFRf
T1A7IH0KLQlZWV9CUkVBSwotY2FzZSAxMjE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBTRU1J
Q09MT047IH0KLQlZWV9CUkVBSwotY2FzZSAxMjI6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBM
RUZUX0JSQUNFOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTIzOgotWVlfUlVMRV9TRVRVUAoteyByZXR1
cm4gUklHSFRfQlJBQ0U7IH0KLQlZWV9CUkVBSwotY2FzZSAxMjQ6Ci1ZWV9SVUxFX1NFVFVQCi17
IHJldHVybiBDT01NQTsgfQotCVlZX0JSRUFLCi1jYXNlIDEyNToKLVlZX1JVTEVfU0VUVVAKLXsg
cmV0dXJuIENPTE9OOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTI2OgotWVlfUlVMRV9TRVRVUAoteyBy
ZXR1cm4gRVFVQUw7IH0KLQlZWV9CUkVBSwotY2FzZSAxMjc6Ci1ZWV9SVUxFX1NFVFVQCi17IHJl
dHVybiBMRUZUX1BBUkVOOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTI4OgotWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gUklHSFRfUEFSRU47IH0KLQlZWV9CUkVBSwotY2FzZSAxMjk6Ci1ZWV9SVUxFX1NF
VFVQCi17IHJldHVybiBMRUZUX0JSQUNLRVQ7IH0KLQlZWV9CUkVBSwotY2FzZSAxMzA6Ci1ZWV9S
VUxFX1NFVFVQCi17IHJldHVybiBSSUdIVF9CUkFDS0VUOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTMx
OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gRE9UOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTMyOgot
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gQkFORzsgfQotCVlZX0JSRUFLCi1jYXNlIDEzMzoKLVlZ
X1JVTEVfU0VUVVAKLXsgcmV0dXJuIERBU0g7IH0KLQlZWV9CUkVBSwotY2FzZSAxMzQ6Ci1ZWV9S
VUxFX1NFVFVQCi17IHJldHVybiBUSUxERTsgfQotCVlZX0JSRUFLCi1jYXNlIDEzNToKLVlZX1JV
TEVfU0VUVVAKLXsgcmV0dXJuIFBMVVM7IH0KLQlZWV9CUkVBSwotY2FzZSAxMzY6Ci1ZWV9SVUxF
X1NFVFVQCi17IHJldHVybiBTVEFSOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTM3OgotWVlfUlVMRV9T
RVRVUAoteyByZXR1cm4gU0xBU0g7IH0KLQlZWV9CUkVBSwotY2FzZSAxMzg6Ci1ZWV9SVUxFX1NF
VFVQCi17IHJldHVybiBQRVJDRU5UOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTM5OgotWVlfUlVMRV9T
RVRVUAoteyByZXR1cm4gTEVGVF9BTkdMRTsgfQotCVlZX0JSRUFLCi1jYXNlIDE0MDoKLVlZX1JV
TEVfU0VUVVAKLXsgcmV0dXJuIFJJR0hUX0FOR0xFOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTQxOgot
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gVkVSVElDQUxfQkFSOyB9Ci0JWVlfQlJFQUsKLWNhc2Ug
MTQyOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gQ0FSRVQ7IH0KLQlZWV9CUkVBSwotY2FzZSAx
NDM6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBBTVBFUlNBTkQ7IH0KLQlZWV9CUkVBSwotY2Fz
ZSAxNDQ6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBRVUVTVElPTjsgfQotCVlZX0JSRUFLCi1j
YXNlIDE0NToKLS8qIHJ1bGUgMTQ1IGNhbiBtYXRjaCBlb2wgKi8KLVlZX1JVTEVfU0VUVVAKLXsg
fQotCVlZX0JSRUFLCi1jYXNlIFlZX1NUQVRFX0VPRihJTklUSUFMKToKLXsgeXl0ZXJtaW5hdGUo
KTsgfQotCVlZX0JSRUFLCi1jYXNlIDE0NjoKLVlZX1JVTEVfU0VUVVAKLXsgYXNzZXJ0KGZhbHNl
KTsgcmV0dXJuIDA7IH0KLQlZWV9CUkVBSwotY2FzZSAxNDc6Ci1ZWV9SVUxFX1NFVFVQCi1FQ0hP
OwotCVlZX0JSRUFLCi0KLQljYXNlIFlZX0VORF9PRl9CVUZGRVI6Ci0JCXsKLQkJLyogQW1vdW50
IG9mIHRleHQgbWF0Y2hlZCBub3QgaW5jbHVkaW5nIHRoZSBFT0IgY2hhci4gKi8KLQkJaW50IHl5
X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQgPSAoaW50KSAoeXlfY3AgLSB5eWctPnl5dGV4dF9wdHIp
IC0gMTsKLQotCQkvKiBVbmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04uICov
Ci0JCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotCQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZG
U0VUCi0KLQkJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMg
PT0gWVlfQlVGRkVSX05FVyApCi0JCQl7Ci0JCQkvKiBXZSdyZSBzY2FubmluZyBhIG5ldyBmaWxl
IG9yIGlucHV0IHNvdXJjZS4gIEl0J3MKLQkJCSAqIHBvc3NpYmxlIHRoYXQgdGhpcyBoYXBwZW5l
ZCBiZWNhdXNlIHRoZSB1c2VyCi0JCQkgKiBqdXN0IHBvaW50ZWQgeXlpbiBhdCBhIG5ldyBzb3Vy
Y2UgYW5kIGNhbGxlZAotCQkJICogeXlsZXgoKS4gIElmIHNvLCB0aGVuIHdlIGhhdmUgdG8gYXNz
dXJlCi0JCQkgKiBjb25zaXN0ZW5jeSBiZXR3ZWVuIFlZX0NVUlJFTlRfQlVGRkVSIGFuZCBvdXIK
LQkJCSAqIGdsb2JhbHMuICBIZXJlIGlzIHRoZSByaWdodCBwbGFjZSB0byBkbyBzbywgYmVjYXVz
ZQotCQkJICogdGhpcyBpcyB0aGUgZmlyc3QgYWN0aW9uIChvdGhlciB0aGFuIHBvc3NpYmx5IGEK
LQkJCSAqIGJhY2stdXApIHRoYXQgd2lsbCBtYXRjaCBmb3IgdGhlIG5ldyBpbnB1dCBzb3VyY2Uu
Ci0JCQkgKi8KLQkJCXl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfbl9jaGFyczsKLQkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZSA9
IHl5aW47Ci0JCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPSBZ
WV9CVUZGRVJfTk9STUFMOwotCQkJfQotCi0JCS8qIE5vdGUgdGhhdCBoZXJlIHdlIHRlc3QgZm9y
IHl5X2NfYnVmX3AgIjw9IiB0byB0aGUgcG9zaXRpb24KLQkJICogb2YgdGhlIGZpcnN0IEVPQiBp
biB0aGUgYnVmZmVyLCBzaW5jZSB5eV9jX2J1Zl9wIHdpbGwKLQkJICogYWxyZWFkeSBoYXZlIGJl
ZW4gaW5jcmVtZW50ZWQgcGFzdCB0aGUgTlVMIGNoYXJhY3RlcgotCQkgKiAoc2luY2UgYWxsIHN0
YXRlcyBtYWtlIHRyYW5zaXRpb25zIG9uIEVPQiB0byB0aGUKLQkJICogZW5kLW9mLWJ1ZmZlciBz
dGF0ZSkuICBDb250cmFzdCB0aGlzIHdpdGggdGhlIHRlc3QKLQkJICogaW4gaW5wdXQoKS4KLQkJ
ICovCi0JCWlmICggeXlnLT55eV9jX2J1Zl9wIDw9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdICkKLQkJCXsgLyogVGhpcyB3YXMgcmVhbGx5IGEg
TlVMLiAqLwotCQkJeXlfc3RhdGVfdHlwZSB5eV9uZXh0X3N0YXRlOwotCi0JCQl5eWctPnl5X2Nf
YnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OwotCi0J
CQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsK
LQotCQkJLyogT2theSwgd2UncmUgbm93IHBvc2l0aW9uZWQgdG8gbWFrZSB0aGUgTlVMCi0JCQkg
KiB0cmFuc2l0aW9uLiAgV2UgY291bGRuJ3QgaGF2ZQotCQkJICogeXlfZ2V0X3ByZXZpb3VzX3N0
YXRlKCkgZ28gYWhlYWQgYW5kIGRvIGl0Ci0JCQkgKiBmb3IgdXMgYmVjYXVzZSBpdCBkb2Vzbid0
IGtub3cgaG93IHRvIGRlYWwKLQkJCSAqIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIGphbW1pbmcg
KGFuZCB3ZSBkb24ndAotCQkJICogd2FudCB0byBidWlsZCBqYW1taW5nIGludG8gaXQgYmVjYXVz
ZSB0aGVuIGl0Ci0JCQkgKiB3aWxsIHJ1biBtb3JlIHNsb3dseSkuCi0JCQkgKi8KLQotCQkJeXlf
bmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5u
ZXIpOwotCi0JCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOwotCi0JCQlp
ZiAoIHl5X25leHRfc3RhdGUgKQotCQkJCXsKLQkJCQkvKiBDb25zdW1lIHRoZSBOVUwuICovCi0J
CQkJeXlfY3AgPSArK3l5Zy0+eXlfY19idWZfcDsKLQkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlf
bmV4dF9zdGF0ZTsKLQkJCQlnb3RvIHl5X21hdGNoOwotCQkJCX0KLQotCQkJZWxzZQotCQkJCXsK
LQkJCQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLQkJCQl5eV9jdXJyZW50
X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLQkJCQlnb3RvIHl5X2ZpbmRf
YWN0aW9uOwotCQkJCX0KLQkJCX0KLQotCQllbHNlIHN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZl
ciggeXlzY2FubmVyICkgKQotCQkJewotCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgotCQkJ
CXsKLQkJCQl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDA7Ci0KLQkJCQlpZiAo
IHl5d3JhcCh5eXNjYW5uZXIgKSApCi0JCQkJCXsKLQkJCQkJLyogTm90ZTogYmVjYXVzZSB3ZSd2
ZSB0YWtlbiBjYXJlIGluCi0JCQkJCSAqIHl5X2dldF9uZXh0X2J1ZmZlcigpIHRvIGhhdmUgc2V0
IHVwCi0JCQkJCSAqIHl5dGV4dCwgd2UgY2FuIG5vdyBzZXQgdXAKLQkJCQkJICogeXlfY19idWZf
cCBzbyB0aGF0IGlmIHNvbWUgdG90YWwKLQkJCQkJICogaG9zZXIgKGxpa2UgZmxleCBpdHNlbGYp
IHdhbnRzIHRvCi0JCQkJCSAqIGNhbGwgdGhlIHNjYW5uZXIgYWZ0ZXIgd2UgcmV0dXJuIHRoZQot
CQkJCQkgKiBZWV9OVUxMLCBpdCdsbCBzdGlsbCB3b3JrIC0gYW5vdGhlcgotCQkJCQkgKiBZWV9O
VUxMIHdpbGwgZ2V0IHJldHVybmVkLgotCQkJCQkgKi8KLQkJCQkJeXlnLT55eV9jX2J1Zl9wID0g
eXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7Ci0KLQkJCQkJeXlfYWN0ID0gWVlfU1RBVEVf
RU9GKFlZX1NUQVJUKTsKLQkJCQkJZ290byBkb19hY3Rpb247Ci0JCQkJCX0KLQotCQkJCWVsc2UK
LQkJCQkJewotCQkJCQlpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQot
CQkJCQkJWVlfTkVXX0ZJTEU7Ci0JCQkJCX0KLQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCWNhc2Ug
RU9CX0FDVF9DT05USU5VRV9TQ0FOOgotCQkJCXl5Zy0+eXlfY19idWZfcCA9Ci0JCQkJCXl5Zy0+
eXl0ZXh0X3B0ciArIHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7Ci0KLQkJCQl5eV9jdXJyZW50
X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKLQotCQkJCXl5X2Nw
ID0geXlnLT55eV9jX2J1Zl9wOwotCQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9S
RV9BREo7Ci0JCQkJZ290byB5eV9tYXRjaDsKLQotCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6
Ci0JCQkJeXlnLT55eV9jX2J1Zl9wID0KLQkJCQkmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXTsKLQotCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9n
ZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOwotCi0JCQkJeXlfY3AgPSB5eWctPnl5X2Nf
YnVmX3A7Ci0JCQkJeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKLQkJCQln
b3RvIHl5X2ZpbmRfYWN0aW9uOwotCQkJfQotCQlicmVhazsKLQkJfQotCi0JZGVmYXVsdDoKLQkJ
WVlfRkFUQUxfRVJST1IoCi0JCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1u
byBhY3Rpb24gZm91bmQiICk7Ci0JfSAvKiBlbmQgb2YgYWN0aW9uIHN3aXRjaCAqLwotCQl9IC8q
IGVuZCBvZiBzY2FubmluZyBvbmUgdG9rZW4gKi8KLX0gLyogZW5kIG9mIHl5bGV4ICovCi0KLS8q
IHl5X2dldF9uZXh0X2J1ZmZlciAtIHRyeSB0byByZWFkIGluIGEgbmV3IGJ1ZmZlcgotICoKLSAq
IFJldHVybnMgYSBjb2RlIHJlcHJlc2VudGluZyBhbiBhY3Rpb246Ci0gKglFT0JfQUNUX0xBU1Rf
TUFUQ0ggLQotICoJRU9CX0FDVF9DT05USU5VRV9TQ0FOIC0gY29udGludWUgc2Nhbm5pbmcgZnJv
bSBjdXJyZW50IHBvc2l0aW9uCi0gKglFT0JfQUNUX0VORF9PRl9GSUxFIC0gZW5kIG9mIGZpbGUK
LSAqLwotc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikK
LXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7Ci0JcmVnaXN0ZXIgY2hhciAqZGVzdCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
Y2hfYnVmOwotCXJlZ2lzdGVyIGNoYXIgKnNvdXJjZSA9IHl5Zy0+eXl0ZXh0X3B0cjsKLQlyZWdp
c3RlciBpbnQgbnVtYmVyX3RvX21vdmUsIGk7Ci0JaW50IHJldF92YWw7Ci0KLQlpZiAoIHl5Zy0+
eXlfY19idWZfcCA+ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5
X25fY2hhcnMgKyAxXSApCi0JCVlZX0ZBVEFMX0VSUk9SKAotCQkiZmF0YWwgZmxleCBzY2FubmVy
IGludGVybmFsIGVycm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKLQotCWlmICggWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9maWxsX2J1ZmZlciA9PSAwICkKLQkJeyAvKiBEb24ndCB0
cnkgdG8gZmlsbCB0aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4gKi8KLQkJaWYgKCB5eWct
Pnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIgLSBZWV9NT1JFX0FESiA9PSAxICkKLQkJCXsK
LQkJCS8qIFdlIG1hdGNoZWQgYSBzaW5nbGUgY2hhcmFjdGVyLCB0aGUgRU9CLCBzbwotCQkJICog
dHJlYXQgdGhpcyBhcyBhIGZpbmFsIEVPRi4KLQkJCSAqLwotCQkJcmV0dXJuIEVPQl9BQ1RfRU5E
X09GX0ZJTEU7Ci0JCQl9Ci0KLQkJZWxzZQotCQkJewotCQkJLyogV2UgbWF0Y2hlZCBzb21lIHRl
eHQgcHJpb3IgdG8gdGhlIEVPQiwgZmlyc3QKLQkJCSAqIHByb2Nlc3MgaXQuCi0JCQkgKi8KLQkJ
CXJldHVybiBFT0JfQUNUX0xBU1RfTUFUQ0g7Ci0JCQl9Ci0JCX0KLQotCS8qIFRyeSB0byByZWFk
IG1vcmUgZGF0YS4gKi8KLQotCS8qIEZpcnN0IG1vdmUgbGFzdCBjaGFycyB0byBzdGFydCBvZiBi
dWZmZXIuICovCi0JbnVtYmVyX3RvX21vdmUgPSAoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0geXln
LT55eXRleHRfcHRyKSAtIDE7Ci0KLQlmb3IgKCBpID0gMDsgaSA8IG51bWJlcl90b19tb3ZlOyAr
K2kgKQotCQkqKGRlc3QrKykgPSAqKHNvdXJjZSsrKTsKLQotCWlmICggWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9FT0ZfUEVORElORyApCi0J
CS8qIGRvbid0IGRvIHRoZSByZWFkLCBpdCdzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiBhbiBF
T0YsCi0JCSAqIGp1c3QgZm9yY2UgYW4gRU9GCi0JCSAqLwotCQlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnMgPSAwOwotCi0JZWxzZQotCQl7Ci0J
CQl5eV9zaXplX3QgbnVtX3RvX3JlYWQgPQotCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9idWZfc2l6ZSAtIG51bWJlcl90b19tb3ZlIC0gMTsKLQotCQl3aGlsZSAoIG51bV90b19yZWFk
IDw9IDAgKQotCQkJeyAvKiBOb3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQu
ICovCi0KLQkJCS8qIGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciAq
LwotCQkJWVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUjsKLQotCQkJaW50IHl5
X2NfYnVmX3Bfb2Zmc2V0ID0KLQkJCQkoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0gYi0+eXlfY2hf
YnVmKTsKLQotCQkJaWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKLQkJCQl7Ci0JCQkJeXlfc2l6
ZV90IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOwotCi0JCQkJaWYgKCBuZXdfc2l6ZSA8
PSAwICkKLQkJCQkJYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVmX3NpemUgLyA4OwotCQkJCWVs
c2UKLQkJCQkJYi0+eXlfYnVmX3NpemUgKj0gMjsKLQotCQkJCWItPnl5X2NoX2J1ZiA9IChjaGFy
ICopCi0JCQkJCS8qIEluY2x1ZGUgcm9vbSBpbiBmb3IgMiBFT0IgY2hhcnMuICovCi0JCQkJCXl5
cmVhbGxvYygodm9pZCAqKSBiLT55eV9jaF9idWYsYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5u
ZXIgKTsKLQkJCQl9Ci0JCQllbHNlCi0JCQkJLyogQ2FuJ3QgZ3JvdyBpdCwgd2UgZG9uJ3Qgb3du
IGl0LiAqLwotCQkJCWItPnl5X2NoX2J1ZiA9IDA7Ci0KLQkJCWlmICggISBiLT55eV9jaF9idWYg
KQotCQkJCVlZX0ZBVEFMX0VSUk9SKAotCQkJCSJmYXRhbCBlcnJvciAtIHNjYW5uZXIgaW5wdXQg
YnVmZmVyIG92ZXJmbG93IiApOwotCi0JCQl5eWctPnl5X2NfYnVmX3AgPSAmYi0+eXlfY2hfYnVm
W3l5X2NfYnVmX3Bfb2Zmc2V0XTsKLQotCQkJbnVtX3RvX3JlYWQgPSBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2J1Zl9zaXplIC0KLQkJCQkJCW51bWJlcl90b19tb3ZlIC0gMTsKLQotCQkJ
fQotCi0JCWlmICggbnVtX3RvX3JlYWQgPiBZWV9SRUFEX0JVRl9TSVpFICkKLQkJCW51bV90b19y
ZWFkID0gWVlfUkVBRF9CVUZfU0laRTsKLQotCQkvKiBSZWFkIGluIG1vcmUgZGF0YS4gKi8KLQkJ
WVlfSU5QVVQoICgmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbbnVtYmVyX3Rv
X21vdmVdKSwKLQkJCXl5Zy0+eXlfbl9jaGFycywgbnVtX3RvX3JlYWQgKTsKLQotCQlZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0JCX0KLQot
CWlmICggeXlnLT55eV9uX2NoYXJzID09IDAgKQotCQl7Ci0JCWlmICggbnVtYmVyX3RvX21vdmUg
PT0gWVlfTU9SRV9BREogKQotCQkJewotCQkJcmV0X3ZhbCA9IEVPQl9BQ1RfRU5EX09GX0ZJTEU7
Ci0JCQl5eXJlc3RhcnQoeXlpbiAgLHl5c2Nhbm5lcik7Ci0JCQl9Ci0KLQkJZWxzZQotCQkJewot
CQkJcmV0X3ZhbCA9IEVPQl9BQ1RfTEFTVF9NQVRDSDsKLQkJCVlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9Ci0JCQkJWVlfQlVGRkVSX0VPRl9QRU5ESU5HOwotCQkJ
fQotCQl9Ci0KLQllbHNlCi0JCXJldF92YWwgPSBFT0JfQUNUX0NPTlRJTlVFX1NDQU47Ci0KLQlp
ZiAoKHl5X3NpemVfdCkgKHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlKSA+IFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUpIHsKLQkJLyogRXh0ZW5kIHRoZSBhcnJh
eSBieSA1MCUsIHBsdXMgdGhlIG51bWJlciB3ZSByZWFsbHkgbmVlZC4gKi8KLQkJeXlfc2l6ZV90
IG5ld19zaXplID0geXlnLT55eV9uX2NoYXJzICsgbnVtYmVyX3RvX21vdmUgKyAoeXlnLT55eV9u
X2NoYXJzID4+IDEpOwotCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiA9IChj
aGFyICopIHl5cmVhbGxvYygodm9pZCAqKSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2No
X2J1ZixuZXdfc2l6ZSAseXlzY2FubmVyICk7Ci0JCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2NoX2J1ZiApCi0JCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1l
bW9yeSBpbiB5eV9nZXRfbmV4dF9idWZmZXIoKSIgKTsKLQl9Ci0KLQl5eWctPnl5X25fY2hhcnMg
Kz0gbnVtYmVyX3RvX21vdmU7Ci0JWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZb
eXlnLT55eV9uX2NoYXJzXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLQlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSA9IFlZX0VORF9PRl9C
VUZGRVJfQ0hBUjsKLQotCXl5Zy0+eXl0ZXh0X3B0ciA9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2NoX2J1ZlswXTsKLQotCXJldHVybiByZXRfdmFsOwotfQotCi0vKiB5eV9nZXRfcHJl
dmlvdXNfc3RhdGUgLSBnZXQgdGhlIHN0YXRlIGp1c3QgYmVmb3JlIHRoZSBFT0IgY2hhciB3YXMg
cmVhY2hlZCAqLwotCi0gICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0
YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0JcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9j
dXJyZW50X3N0YXRlOwotCXJlZ2lzdGVyIGNoYXIgKnl5X2NwOwotICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotCXl5X2N1cnJlbnRfc3Rh
dGUgPSB5eWctPnl5X3N0YXJ0OwotCi0JZm9yICggeXlfY3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZ
WV9NT1JFX0FESjsgeXlfY3AgPCB5eWctPnl5X2NfYnVmX3A7ICsreXlfY3AgKQotCQl7Ci0JCXJl
Z2lzdGVyIFlZX0NIQVIgeXlfYyA9ICgqeXlfY3AgPyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3Ap
XSA6IDEpOwotCQlpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCi0JCQl7Ci0JCQl5
eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKLQkJCXl5Zy0+
eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOwotCQkJfQotCQl3aGlsZSAoIHl5X2Noa1t5
eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0J
CQl7Ci0JCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVd
OwotCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ0MyApCi0JCQkJeXlfYyA9IHl5X21ldGFb
KHVuc2lnbmVkIGludCkgeXlfY107Ci0JCQl9Ci0JCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRb
eXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwotCQl9Ci0K
LQlyZXR1cm4geXlfY3VycmVudF9zdGF0ZTsKLX0KLQotLyogeXlfdHJ5X05VTF90cmFucyAtIHRy
eSB0byBtYWtlIGEgdHJhbnNpdGlvbiBvbiB0aGUgTlVMIGNoYXJhY3RlcgotICoKLSAqIHN5bm9w
c2lzCi0gKgluZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggY3VycmVudF9zdGF0ZSApOwot
ICovCi0gICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAgKHl5X3N0YXRl
X3R5cGUgeXlfY3VycmVudF9zdGF0ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLQlyZWdpc3Rl
ciBpbnQgeXlfaXNfamFtOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsgLyogVGhpcyB2YXIgbWF5IGJlIHVudXNlZCBkZXBlbmRpbmcgdXBv
biBvcHRpb25zLiAqLwotCXJlZ2lzdGVyIGNoYXIgKnl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwot
Ci0JcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gMTsKLQlpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50
X3N0YXRlXSApCi0JCXsKLQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJl
bnRfc3RhdGU7Ci0JCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOwotCQl9Ci0J
d2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1
cnJlbnRfc3RhdGUgKQotCQl7Ci0JCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlf
Y3VycmVudF9zdGF0ZV07Ci0JCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NDMgKQotCQkJeXlf
YyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107Ci0JCX0KLQl5eV9jdXJyZW50X3N0YXRl
ID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9j
XTsKLQl5eV9pc19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9PSA0NDIpOwotCi0JcmV0dXJuIHl5
X2lzX2phbSA/IDAgOiB5eV9jdXJyZW50X3N0YXRlOwotfQotCi0jaWZuZGVmIFlZX05PX0lOUFVU
Ci0jaWZkZWYgX19jcGx1c3BsdXMKLSAgICBzdGF0aWMgaW50IHl5aW5wdXQgKHl5c2Nhbl90IHl5
c2Nhbm5lcikKLSNlbHNlCi0gICAgc3RhdGljIGludCBpbnB1dCAgKHl5c2Nhbl90IHl5c2Nhbm5l
cikKLSNlbmRpZgotCi17Ci0JaW50IGM7Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0JKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlf
aG9sZF9jaGFyOwotCi0JaWYgKCAqeXlnLT55eV9jX2J1Zl9wID09IFlZX0VORF9PRl9CVUZGRVJf
Q0hBUiApCi0JCXsKLQkJLyogeXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIg
d2Ugd2FudCB0byByZXR1cm4uCi0JCSAqIElmIHRoaXMgb2NjdXJzICpiZWZvcmUqIHRoZSBFT0Ig
Y2hhcmFjdGVycywgdGhlbiBpdCdzIGEKLQkJICogdmFsaWQgTlVMOyBpZiBub3QsIHRoZW4gd2Un
dmUgaGl0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KLQkJICovCi0JCWlmICggeXlnLT55eV9jX2J1
Zl9wIDwgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFy
c10gKQotCQkJLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLwotCQkJKnl5Zy0+eXlfY19idWZf
cCA9ICdcMCc7Ci0KLQkJZWxzZQotCQkJeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8KLQkJCXl5X3Np
emVfdCBvZmZzZXQgPSB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHI7Ci0JCQkrK3l5
Zy0+eXlfY19idWZfcDsKLQotCQkJc3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5u
ZXIgKSApCi0JCQkJewotCQkJCWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgotCQkJCQkvKiBUaGlz
IGhhcHBlbnMgYmVjYXVzZSB5eV9nX25fYigpCi0JCQkJCSAqIHNlZXMgdGhhdCB3ZSd2ZSBhY2N1
bXVsYXRlZCBhCi0JCQkJCSAqIHRva2VuIGFuZCBmbGFncyB0aGF0IHdlIG5lZWQgdG8KLQkJCQkJ
ICogdHJ5IG1hdGNoaW5nIHRoZSB0b2tlbiBiZWZvcmUKLQkJCQkJICogcHJvY2VlZGluZy4gIEJ1
dCBmb3IgaW5wdXQoKSwKLQkJCQkJICogdGhlcmUncyBubyBtYXRjaGluZyB0byBjb25zaWRlci4K
LQkJCQkJICogU28gY29udmVydCB0aGUgRU9CX0FDVF9MQVNUX01BVENICi0JCQkJCSAqIHRvIEVP
Ql9BQ1RfRU5EX09GX0ZJTEUuCi0JCQkJCSAqLwotCi0JCQkJCS8qIFJlc2V0IGJ1ZmZlciBzdGF0
dXMuICovCi0JCQkJCXl5cmVzdGFydCh5eWluICx5eXNjYW5uZXIpOwotCi0JCQkJCS8qRkFMTFRI
Uk9VR0gqLwotCi0JCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgotCQkJCQl7Ci0JCQkJCWlm
ICggeXl3cmFwKHl5c2Nhbm5lciApICkKLQkJCQkJCXJldHVybiBFT0Y7Ci0KLQkJCQkJaWYgKCAh
IHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKLQkJCQkJCVlZX05FV19GSUxFOwot
I2lmZGVmIF9fY3BsdXNwbHVzCi0JCQkJCXJldHVybiB5eWlucHV0KHl5c2Nhbm5lcik7Ci0jZWxz
ZQotCQkJCQlyZXR1cm4gaW5wdXQoeXlzY2FubmVyKTsKLSNlbmRpZgotCQkJCQl9Ci0KLQkJCQlj
YXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKLQkJCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55
eXRleHRfcHRyICsgb2Zmc2V0OwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCWMg
PSAqKHVuc2lnbmVkIGNoYXIgKikgeXlnLT55eV9jX2J1Zl9wOwkvKiBjYXN0IGZvciA4LWJpdCBj
aGFyJ3MgKi8KLQkqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsJLyogcHJlc2VydmUgeXl0ZXh0ICov
Ci0JeXlnLT55eV9ob2xkX2NoYXIgPSAqKyt5eWctPnl5X2NfYnVmX3A7Ci0KLQlpZiAoIGMgPT0g
J1xuJyApCi0JCSAgIAotICAgIGRveyB5eWxpbmVubysrOwotICAgICAgICB5eWNvbHVtbj0wOwot
ICAgIH13aGlsZSgwKQotOwotCi0JcmV0dXJuIGM7Ci19Ci0jZW5kaWYJLyogaWZuZGVmIFlZX05P
X0lOUFVUICovCi0KLS8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQg
c3RyZWFtLgotICogQHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCi0gKiBAcGFy
YW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEBub3RlIFRoaXMgZnVuY3Rpb24g
ZG9lcyBub3QgcmVzZXQgdGhlIHN0YXJ0IGNvbmRpdGlvbiB0byBAYyBJTklUSUFMIC4KLSAqLwot
ICAgIHZvaWQgeXlyZXN0YXJ0ICAoRklMRSAqIGlucHV0X2ZpbGUgLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOwotCi0JaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7Ci0gICAgICAgIHl5ZW5zdXJl
X2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0K
LSAgICAgICAgICAgIHl5X2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVy
KTsKLQl9Ci0KLQl5eV9pbml0X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUixpbnB1dF9maWxlICx5
eXNjYW5uZXIpOwotCXl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotfQotCi0vKiog
U3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IGJ1ZmZlci4KLSAqIEBwYXJhbSBuZXdfYnVmZmVy
IFRoZSBuZXcgaW5wdXQgYnVmZmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBv
YmplY3QuCi0gKi8KLSAgICB2b2lkIHl5X3N3aXRjaF90b19idWZmZXIgIChZWV9CVUZGRVJfU1RB
VEUgIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0JLyogVE9ETy4gV2Ug
c2hvdWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5Ci0JICog
d2l0aAotCSAqCQl5eXBvcF9idWZmZXJfc3RhdGUoKTsKLQkgKgkJeXlwdXNoX2J1ZmZlcl9zdGF0
ZShuZXdfYnVmZmVyKTsKLSAgICAgKi8KLQl5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5l
cik7Ci0JaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiA9PSBuZXdfYnVmZmVyICkKLQkJcmV0dXJuOwot
Ci0JaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCi0JCXsKLQkJLyogRmx1c2ggb3V0IGluZm9ybWF0
aW9uIGZvciBvbGQgYnVmZmVyLiAqLwotCQkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xk
X2NoYXI7Ci0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlf
Y19idWZfcDsKLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55
eV9uX2NoYXJzOwotCQl9Ci0KLQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVy
OwotCXl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotCi0JLyogV2UgZG9uJ3QgYWN0
dWFsbHkga25vdyB3aGV0aGVyIHdlIGRpZCB0aGlzIHN3aXRjaCBkdXJpbmcKLQkgKiBFT0YgKHl5
d3JhcCgpKSBwcm9jZXNzaW5nLCBidXQgdGhlIG9ubHkgdGltZSB0aGlzIGZsYWcKLQkgKiBpcyBs
b29rZWQgYXQgaXMgYWZ0ZXIgeXl3cmFwKCkgaXMgY2FsbGVkLCBzbyBpdCdzIHNhZmUKLQkgKiB0
byBnbyBhaGVhZCBhbmQgYWx3YXlzIHNldCBpdC4KLQkgKi8KLQl5eWctPnl5X2RpZF9idWZmZXJf
c3dpdGNoX29uX2VvZiA9IDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHl5X2xvYWRfYnVmZmVyX3N0YXRl
ICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQl5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7Ci0JeXlnLT55eXRleHRfcHRyID0geXlnLT55eV9j
X2J1Zl9wID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zOwotCXl5aW4gPSBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGU7Ci0JeXlnLT55eV9ob2xkX2No
YXIgPSAqeXlnLT55eV9jX2J1Zl9wOwotfQotCi0vKiogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUg
YW4gaW5wdXQgYnVmZmVyIHN0YXRlLgotICogQHBhcmFtIGZpbGUgQSByZWFkYWJsZSBzdHJlYW0u
Ci0gKiBAcGFyYW0gc2l6ZSBUaGUgY2hhcmFjdGVyIGJ1ZmZlciBzaXplIGluIGJ5dGVzLiBXaGVu
IGluIGRvdWJ0LCB1c2UgQGMgWVlfQlVGX1NJWkUuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBz
Y2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIGFsbG9jYXRlZCBidWZmZXIgc3RhdGUuCi0g
Ki8KLSAgICBZWV9CVUZGRVJfU1RBVEUgeXlfY3JlYXRlX2J1ZmZlciAgKEZJTEUgKiBmaWxlLCBp
bnQgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0JWVlfQlVGRkVSX1NUQVRFIGI7Ci0g
ICAgCi0JYiA9IChZWV9CVUZGRVJfU1RBVEUpIHl5YWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVm
ZmVyX3N0YXRlICkgLHl5c2Nhbm5lciApOwotCWlmICggISBiICkKLQkJWVlfRkFUQUxfRVJST1Io
ICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfY3JlYXRlX2J1ZmZlcigpIiApOwotCi0JYi0+
eXlfYnVmX3NpemUgPSBzaXplOwotCi0JLyogeXlfY2hfYnVmIGhhcyB0byBiZSAyIGNoYXJhY3Rl
cnMgbG9uZ2VyIHRoYW4gdGhlIHNpemUgZ2l2ZW4gYmVjYXVzZQotCSAqIHdlIG5lZWQgdG8gcHV0
IGluIDIgZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLgotCSAqLwotCWItPnl5X2NoX2J1ZiA9IChj
aGFyICopIHl5YWxsb2MoYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKLQlpZiAoICEg
Yi0+eXlfY2hfYnVmICkKLQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkg
aW4geXlfY3JlYXRlX2J1ZmZlcigpIiApOwotCi0JYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7Ci0K
LQl5eV9pbml0X2J1ZmZlcihiLGZpbGUgLHl5c2Nhbm5lcik7Ci0KLQlyZXR1cm4gYjsKLX0KLQot
LyoqIERlc3Ryb3kgdGhlIGJ1ZmZlci4KLSAqIEBwYXJhbSBiIGEgYnVmZmVyIGNyZWF0ZWQgd2l0
aCB5eV9jcmVhdGVfYnVmZmVyKCkKLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2Jq
ZWN0LgotICovCi0gICAgdm9pZCB5eV9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIg
LCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0JaWYgKCAhIGIgKQotCQlyZXR1cm47Ci0KLQlp
ZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKSAvKiBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgcG9w
IGhlcmUuICovCi0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IChZWV9CVUZGRVJfU1RBVEUp
IDA7Ci0KLQlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQotCQl5eWZyZWUoKHZvaWQgKikgYi0+
eXlfY2hfYnVmICx5eXNjYW5uZXIgKTsKLQotCXl5ZnJlZSgodm9pZCAqKSBiICx5eXNjYW5uZXIg
KTsKLX0KLQotLyogSW5pdGlhbGl6ZXMgb3IgcmVpbml0aWFsaXplcyBhIGJ1ZmZlci4KLSAqIFRo
aXMgZnVuY3Rpb24gaXMgc29tZXRpbWVzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgc2Ft
ZSBidWZmZXIsCi0gKiBzdWNoIGFzIGR1cmluZyBhIHl5cmVzdGFydCgpIG9yIGF0IEVPRi4KLSAq
LwotICAgIHN0YXRpYyB2b2lkIHl5X2luaXRfYnVmZmVyICAoWVlfQlVGRkVSX1NUQVRFICBiLCBG
SUxFICogZmlsZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLQotewotCWludCBvZXJybm8gPSBlcnJu
bzsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7Ci0KLQl5eV9mbHVzaF9idWZmZXIoYiAseXlzY2FubmVyKTsKLQotCWItPnl5X2lucHV0X2Zp
bGUgPSBmaWxlOwotCWItPnl5X2ZpbGxfYnVmZmVyID0gMTsKLQotICAgIC8qIElmIGIgaXMgdGhl
IGN1cnJlbnQgYnVmZmVyLCB0aGVuIHl5X2luaXRfYnVmZmVyIHdhcyBfcHJvYmFibHlfCi0gICAg
ICogY2FsbGVkIGZyb20geXlyZXN0YXJ0KCkgb3IgdGhyb3VnaCB5eV9nZXRfbmV4dF9idWZmZXIu
Ci0gICAgICogSW4gdGhhdCBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIHJlc2V0IHRoZSBsaW5lbm8g
b3IgY29sdW1uLgotICAgICAqLwotICAgIGlmIChiICE9IFlZX0NVUlJFTlRfQlVGRkVSKXsKLSAg
ICAgICAgYi0+eXlfYnNfbGluZW5vID0gMTsKLSAgICAgICAgYi0+eXlfYnNfY29sdW1uID0gMDsK
LSAgICB9Ci0KLSAgICAgICAgYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAwOwotICAgIAotCWVycm5v
ID0gb2Vycm5vOwotfQotCi0vKiogRGlzY2FyZCBhbGwgYnVmZmVyZWQgY2hhcmFjdGVycy4gT24g
dGhlIG5leHQgc2NhbiwgWVlfSU5QVVQgd2lsbCBiZSBjYWxsZWQuCi0gKiBAcGFyYW0gYiB0aGUg
YnVmZmVyIHN0YXRlIHRvIGJlIGZsdXNoZWQsIHVzdWFsbHkgQGMgWVlfQ1VSUkVOVF9CVUZGRVIu
Ci0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotICAgIHZvaWQg
eXlfZmx1c2hfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIp
Ci17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOwotCWlmICggISBiICkKLQkJcmV0dXJuOwotCi0JYi0+eXlfbl9jaGFycyA9IDA7Ci0KLQkv
KiBXZSBhbHdheXMgbmVlZCB0d28gZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLiAgVGhlIGZpcnN0
IGNhdXNlcwotCSAqIGEgdHJhbnNpdGlvbiB0byB0aGUgZW5kLW9mLWJ1ZmZlciBzdGF0ZS4gIFRo
ZSBzZWNvbmQgY2F1c2VzCi0JICogYSBqYW0gaW4gdGhhdCBzdGF0ZS4KLQkgKi8KLQliLT55eV9j
aF9idWZbMF0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0JYi0+eXlfY2hfYnVmWzFdID0gWVlf
RU5EX09GX0JVRkZFUl9DSEFSOwotCi0JYi0+eXlfYnVmX3BvcyA9ICZiLT55eV9jaF9idWZbMF07
Ci0KLQliLT55eV9hdF9ib2wgPSAxOwotCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJf
TkVXOwotCi0JaWYgKCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkKLQkJeXlfbG9hZF9idWZmZXJf
c3RhdGUoeXlzY2FubmVyICk7Ci19Ci0KLS8qKiBQdXNoZXMgdGhlIG5ldyBzdGF0ZSBvbnRvIHRo
ZSBzdGFjay4gVGhlIG5ldyBzdGF0ZSBiZWNvbWVzCi0gKiAgdGhlIGN1cnJlbnQgc3RhdGUuIFRo
aXMgZnVuY3Rpb24gd2lsbCBhbGxvY2F0ZSB0aGUgc3RhY2sKLSAqICBpZiBuZWNlc3NhcnkuCi0g
KiAgQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBzdGF0ZS4KLSAqICBAcGFyYW0geXlzY2FubmVy
IFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotdm9pZCB5eXB1c2hfYnVmZmVyX3N0YXRlIChZWV9C
VUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1
Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0JaWYgKG5l
d19idWZmZXIgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JeXllbnN1cmVfYnVmZmVyX3N0YWNrKHl5
c2Nhbm5lcik7Ci0KLQkvKiBUaGlzIGJsb2NrIGlzIGNvcGllZCBmcm9tIHl5X3N3aXRjaF90b19i
dWZmZXIuICovCi0JaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCi0JCXsKLQkJLyogRmx1c2ggb3V0
IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLwotCQkqeXlnLT55eV9jX2J1Zl9wID0geXln
LT55eV9ob2xkX2NoYXI7Ci0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9
IHl5Zy0+eXlfY19idWZfcDsKLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJz
ID0geXlnLT55eV9uX2NoYXJzOwotCQl9Ci0KLQkvKiBPbmx5IHB1c2ggaWYgdG9wIGV4aXN0cy4g
T3RoZXJ3aXNlLCByZXBsYWNlIHRvcC4gKi8KLQlpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpCi0JCXl5
Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCsrOwotCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5l
d19idWZmZXI7Ci0KLQkvKiBjb3BpZWQgZnJvbSB5eV9zd2l0Y2hfdG9fYnVmZmVyLiAqLwotCXl5
X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0
Y2hfb25fZW9mID0gMTsKLX0KLQotLyoqIFJlbW92ZXMgYW5kIGRlbGV0ZXMgdGhlIHRvcCBvZiB0
aGUgc3RhY2ssIGlmIHByZXNlbnQuCi0gKiAgVGhlIG5leHQgZWxlbWVudCBiZWNvbWVzIHRoZSBu
ZXcgdG9wLgotICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi12
b2lkIHl5cG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQlpZiAoIVlZ
X0NVUlJFTlRfQlVGRkVSKQotCQlyZXR1cm47Ci0KLQl5eV9kZWxldGVfYnVmZmVyKFlZX0NVUlJF
TlRfQlVGRkVSICx5eXNjYW5uZXIpOwotCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7
Ci0JaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+IDApCi0JCS0teXlnLT55eV9idWZmZXJf
c3RhY2tfdG9wOwotCi0JaWYgKFlZX0NVUlJFTlRfQlVGRkVSKSB7Ci0JCXl5X2xvYWRfYnVmZmVy
X3N0YXRlKHl5c2Nhbm5lciApOwotCQl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9
IDE7Ci0JfQotfQotCi0vKiBBbGxvY2F0ZXMgdGhlIHN0YWNrIGlmIGl0IGRvZXMgbm90IGV4aXN0
LgotICogIEd1YXJhbnRlZXMgc3BhY2UgZm9yIGF0IGxlYXN0IG9uZSBwdXNoLgotICovCi1zdGF0
aWMgdm9pZCB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLQl5
eV9zaXplX3QgbnVtX3RvX2FsbG9jOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotCWlmICgheXlnLT55eV9idWZmZXJfc3RhY2spIHsK
LQotCQkvKiBGaXJzdCBhbGxvY2F0aW9uIGlzIGp1c3QgZm9yIDIgZWxlbWVudHMsIHNpbmNlIHdl
IGRvbid0IGtub3cgaWYgdGhpcwotCQkgKiBzY2FubmVyIHdpbGwgZXZlbiBuZWVkIGEgc3RhY2su
IFdlIHVzZSAyIGluc3RlYWQgb2YgMSB0byBhdm9pZCBhbgotCQkgKiBpbW1lZGlhdGUgcmVhbGxv
YyBvbiB0aGUgbmV4dCBjYWxsLgotICAgICAgICAgKi8KLQkJbnVtX3RvX2FsbG9jID0gMTsKLQkJ
eXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXl5YWxsb2MK
LQkJCQkJCQkJKG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikK
LQkJCQkJCQkJLCB5eXNjYW5uZXIpOwotCQlpZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQot
CQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXllbnN1cmVfYnVm
ZmVyX3N0YWNrKCkiICk7Ci0JCQkJCQkJCSAgCi0JCW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFj
aywgMCwgbnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7Ci0J
CQkJCi0JCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKLQkJeXlnLT55
eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKLQkJcmV0dXJuOwotCX0KLQotCWlmICh5eWctPnl5X2J1
ZmZlcl9zdGFja190b3AgPj0gKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCkgLSAxKXsKLQotCQkv
KiBJbmNyZWFzZSB0aGUgYnVmZmVyIHRvIHByZXBhcmUgZm9yIGEgcG9zc2libGUgcHVzaC4gKi8K
LQkJaW50IGdyb3dfc2l6ZSA9IDggLyogYXJiaXRyYXJ5IGdyb3cgc2l6ZSAqLzsKLQotCQludW1f
dG9fYWxsb2MgPSB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggKyBncm93X3NpemU7Ci0JCXl5Zy0+
eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKil5eXJlYWxsb2MKLQkJ
CQkJCQkJKHl5Zy0+eXlfYnVmZmVyX3N0YWNrLAotCQkJCQkJCQludW1fdG9fYWxsb2MgKiBzaXpl
b2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCi0JCQkJCQkJCSwgeXlzY2FubmVyKTsKLQkJaWYg
KCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKLQkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5
bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOwotCi0JCS8qIHplcm8g
b25seSB0aGUgbmV3IHNsb3RzLiovCi0JCW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5
Zy0+eXlfYnVmZmVyX3N0YWNrX21heCwgMCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9i
dWZmZXJfc3RhdGUqKSk7Ci0JCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxv
YzsKLQl9Ci19Ci0KLS8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gZGly
ZWN0bHkgZnJvbSBhIHVzZXItc3BlY2lmaWVkIGNoYXJhY3RlciBidWZmZXIuCi0gKiBAcGFyYW0g
YmFzZSB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgotICogQHBhcmFtIHNpemUgdGhlIHNpemUgaW4gYnl0
ZXMgb2YgdGhlIGNoYXJhY3RlciBidWZmZXIKLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5u
ZXIgb2JqZWN0LgotICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBv
YmplY3QuIAotICovCi1ZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9idWZmZXIgIChjaGFyICogYmFz
ZSwgeXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotCVlZX0JVRkZFUl9T
VEFURSBiOwotICAgIAotCWlmICggc2l6ZSA8IDIgfHwKLQkgICAgIGJhc2Vbc2l6ZS0yXSAhPSBZ
WV9FTkRfT0ZfQlVGRkVSX0NIQVIgfHwKLQkgICAgIGJhc2Vbc2l6ZS0xXSAhPSBZWV9FTkRfT0Zf
QlVGRkVSX0NIQVIgKQotCQkvKiBUaGV5IGZvcmdvdCB0byBsZWF2ZSByb29tIGZvciB0aGUgRU9C
J3MuICovCi0JCXJldHVybiAwOwotCi0JYiA9IChZWV9CVUZGRVJfU1RBVEUpIHl5YWxsb2Moc2l6
ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciApOwotCWlmICggISBiICkK
LQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfc2Nhbl9idWZm
ZXIoKSIgKTsKLQotCWItPnl5X2J1Zl9zaXplID0gc2l6ZSAtIDI7CS8qICItIDIiIHRvIHRha2Ug
Y2FyZSBvZiBFT0IncyAqLwotCWItPnl5X2J1Zl9wb3MgPSBiLT55eV9jaF9idWYgPSBiYXNlOwot
CWItPnl5X2lzX291cl9idWZmZXIgPSAwOwotCWItPnl5X2lucHV0X2ZpbGUgPSAwOwotCWItPnl5
X25fY2hhcnMgPSBiLT55eV9idWZfc2l6ZTsKLQliLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7Ci0J
Yi0+eXlfYXRfYm9sID0gMTsKLQliLT55eV9maWxsX2J1ZmZlciA9IDA7Ci0JYi0+eXlfYnVmZmVy
X3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7Ci0KLQl5eV9zd2l0Y2hfdG9fYnVmZmVyKGIgLHl5c2Nh
bm5lciApOwotCi0JcmV0dXJuIGI7Ci19Ci0KLS8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0
YXRlIHRvIHNjYW4gYSBzdHJpbmcuIFRoZSBuZXh0IGNhbGwgdG8geXlsZXgoKSB3aWxsCi0gKiBz
Y2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIHN0ci4KLSAqIEBwYXJhbSB5eXN0ciBhIE5VTC10ZXJt
aW5hdGVkIHN0cmluZyB0byBzY2FuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9i
amVjdC4KLSAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0
LgotICogQG5vdGUgSWYgeW91IHdhbnQgdG8gc2NhbiBieXRlcyB0aGF0IG1heSBjb250YWluIE5V
TCB2YWx1ZXMsIHRoZW4gdXNlCi0gKiAgICAgICB5eV9zY2FuX2J5dGVzKCkgaW5zdGVhZC4KLSAq
LwotWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0ciAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICAKLQlyZXR1cm4geXlfc2Nhbl9ieXRlcyh5eXN0
cixzdHJsZW4oeXlzdHIpICx5eXNjYW5uZXIpOwotfQotCi0vKiogU2V0dXAgdGhlIGlucHV0IGJ1
ZmZlciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZlbiBieXRlcy4gVGhlIG5leHQgY2FsbCB0byB5eWxl
eCgpIHdpbGwKLSAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgYnl0ZXMuCi0gKiBAcGFyYW0g
Ynl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4KLSAqIEBwYXJhbSBsZW4gdGhlIG51bWJlciBv
ZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMuCi0gKiBAcGFyYW0g
eXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9j
YXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgotICovCi1ZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9i
eXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIHl5X3NpemVfdCAgX3l5Ynl0ZXNfbGVuICwg
eXlzY2FuX3QgeXlzY2FubmVyKQotewotCVlZX0JVRkZFUl9TVEFURSBiOwotCWNoYXIgKmJ1ZjsK
LQl5eV9zaXplX3QgbiwgaTsKLSAgICAKLQkvKiBHZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwg
aW5jbHVkaW5nIHNwYWNlIGZvciB0cmFpbGluZyBFT0Incy4gKi8KLQluID0gX3l5Ynl0ZXNfbGVu
ICsgMjsKLQlidWYgPSAoY2hhciAqKSB5eWFsbG9jKG4gLHl5c2Nhbm5lciApOwotCWlmICggISBi
dWYgKQotCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9zY2Fu
X2J5dGVzKCkiICk7Ci0KLQlmb3IgKCBpID0gMDsgaSA8IF95eWJ5dGVzX2xlbjsgKytpICkKLQkJ
YnVmW2ldID0geXlieXRlc1tpXTsKLQotCWJ1ZltfeXlieXRlc19sZW5dID0gYnVmW195eWJ5dGVz
X2xlbisxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLQotCWIgPSB5eV9zY2FuX2J1ZmZlcihi
dWYsbiAseXlzY2FubmVyKTsKLQlpZiAoICEgYiApCi0JCVlZX0ZBVEFMX0VSUk9SKCAiYmFkIGJ1
ZmZlciBpbiB5eV9zY2FuX2J5dGVzKCkiICk7Ci0KLQkvKiBJdCdzIG9rYXkgdG8gZ3JvdyBldGMu
IHRoaXMgYnVmZmVyLCBhbmQgd2Ugc2hvdWxkIHRocm93IGl0Ci0JICogYXdheSB3aGVuIHdlJ3Jl
IGRvbmUuCi0JICovCi0JYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7Ci0KLQlyZXR1cm4gYjsKLX0K
LQotI2lmbmRlZiBZWV9FWElUX0ZBSUxVUkUKLSNkZWZpbmUgWVlfRVhJVF9GQUlMVVJFIDIKLSNl
bmRpZgotCi1zdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyKiBtc2cgLCB5
eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgCSh2b2lkKSBmcHJpbnRmKCBzdGRlcnIsICIlc1xu
IiwgbXNnICk7Ci0JZXhpdCggWVlfRVhJVF9GQUlMVVJFICk7Ci19Ci0KLS8qIFJlZGVmaW5lIHl5
bGVzcygpIHNvIGl0IHdvcmtzIGluIHNlY3Rpb24gMyBjb2RlLiAqLwotCi0jdW5kZWYgeXlsZXNz
Ci0jZGVmaW5lIHl5bGVzcyhuKSBcCi0JZG8gXAotCQl7IFwKLQkJLyogVW5kbyBlZmZlY3RzIG9m
IHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCi0gICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0g
KG4pOyBcCi0gICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVzc19tYWNyb19hcmcpO1wKLQkJeXl0
ZXh0W3l5bGVuZ10gPSB5eWctPnl5X2hvbGRfY2hhcjsgXAotCQl5eWctPnl5X2NfYnVmX3AgPSB5
eXRleHQgKyB5eWxlc3NfbWFjcm9fYXJnOyBcCi0JCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+
eXlfY19idWZfcDsgXAotCQkqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsgXAotCQl5eWxlbmcgPSB5
eWxlc3NfbWFjcm9fYXJnOyBcCi0JCX0gXAotCXdoaWxlICggMCApCi0KLS8qIEFjY2Vzc29yICBt
ZXRob2RzIChnZXQvc2V0IGZ1bmN0aW9ucykgdG8gc3RydWN0IG1lbWJlcnMuICovCi0KLS8qKiBH
ZXQgdGhlIHVzZXItZGVmaW5lZCBkYXRhIGZvciB0aGlzIHNjYW5uZXIuCi0gKiBAcGFyYW0geXlz
Y2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotWVlfRVhUUkFfVFlQRSB5eWdldF9leHRy
YSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5ZXh0cmE7Ci19Ci0KLS8q
KiBHZXQgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBz
Y2FubmVyIG9iamVjdC4KLSAqLwotaW50IHl5Z2V0X2xpbmVubyAgKHl5c2Nhbl90IHl5c2Nhbm5l
cikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7Ci0gICAgCi0gICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSKQotICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIHl5bGluZW5vOwotfQotCi0vKiogR2V0IHRo
ZSBjdXJyZW50IGNvbHVtbiBudW1iZXIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVy
IG9iamVjdC4KLSAqLwotaW50IHl5Z2V0X2NvbHVtbiAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsK
LSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
Ci0gICAgCi0gICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSKQotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIHl5Y29sdW1uOwotfQotCi0vKiogR2V0IHRoZSBpbnB1
dCBzdHJlYW0uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwot
RklMRSAqeXlnZXRfaW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eWlu
OwotfQotCi0vKiogR2V0IHRoZSBvdXRwdXQgc3RyZWFtLgotICogQHBhcmFtIHl5c2Nhbm5lciBU
aGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLUZJTEUgKnl5Z2V0X291dCAgKHl5c2Nhbl90IHl5c2Nh
bm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5b3V0OwotfQotCi0vKiogR2V0IHRoZSBsZW5ndGggb2Yg
dGhlIGN1cnJlbnQgdG9rZW4uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVj
dC4KLSAqLwoteXlfc2l6ZV90IHl5Z2V0X2xlbmcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0g
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwot
ICAgIHJldHVybiB5eWxlbmc7Ci19Ci0KLS8qKiBHZXQgdGhlIGN1cnJlbnQgdG9rZW4uCi0gKiBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotCi1jaGFyICp5eWdldF90
ZXh0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXl0ZXh0OwotfQotCi0v
KiogU2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0YS4gVGhpcyBkYXRhIGlzIG5ldmVyIHRvdWNoZWQg
YnkgdGhlIHNjYW5uZXIuCi0gKiBAcGFyYW0gdXNlcl9kZWZpbmVkIFRoZSBkYXRhIHRvIGJlIGFz
c29jaWF0ZWQgd2l0aCB0aGlzIHNjYW5uZXIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2Fu
bmVyIG9iamVjdC4KLSAqLwotdm9pZCB5eXNldF9leHRyYSAoWVlfRVhUUkFfVFlQRSAgdXNlcl9k
ZWZpbmVkICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eWV4dHJhID0gdXNlcl9kZWZp
bmVkIDsKLX0KLQotLyoqIFNldCB0aGUgY3VycmVudCBsaW5lIG51bWJlci4KLSAqIEBwYXJhbSBs
aW5lX251bWJlcgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8K
LXZvaWQgeXlzZXRfbGluZW5vIChpbnQgIGxpbmVfbnVtYmVyICwgeXlzY2FuX3QgeXlzY2FubmVy
KQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKLQotICAgICAgICAvKiBsaW5lbm8gaXMgb25seSB2YWxpZCBpZiBhbiBpbnB1dCBidWZm
ZXIgZXhpc3RzLiAqLwotICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUiApCi0gICAgICAg
ICAgIHl5X2ZhdGFsX2Vycm9yKCAieXlzZXRfbGluZW5vIGNhbGxlZCB3aXRoIG5vIGJ1ZmZlciIg
LCB5eXNjYW5uZXIpOyAKLSAgICAKLSAgICB5eWxpbmVubyA9IGxpbmVfbnVtYmVyOwotfQotCi0v
KiogU2V0IHRoZSBjdXJyZW50IGNvbHVtbi4KLSAqIEBwYXJhbSBsaW5lX251bWJlcgotICogQHBh
cmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLXZvaWQgeXlzZXRfY29sdW1u
IChpbnQgIGNvbHVtbl9ubyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICAgICAgLyog
Y29sdW1uIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8KLSAgICAg
ICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICAgICB5eV9mYXRhbF9lcnJvcigg
Inl5c2V0X2NvbHVtbiBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2FubmVyKTsgCi0gICAg
Ci0gICAgeXljb2x1bW4gPSBjb2x1bW5fbm87Ci19Ci0KLS8qKiBTZXQgdGhlIGlucHV0IHN0cmVh
bS4gVGhpcyBkb2VzIG5vdCBkaXNjYXJkIHRoZSBjdXJyZW50Ci0gKiBpbnB1dCBidWZmZXIuCi0g
KiBAcGFyYW0gaW5fc3RyIEEgcmVhZGFibGUgc3RyZWFtLgotICogQHBhcmFtIHl5c2Nhbm5lciBU
aGUgc2Nhbm5lciBvYmplY3QuCi0gKiBAc2VlIHl5X3N3aXRjaF90b19idWZmZXIKLSAqLwotdm9p
ZCB5eXNldF9pbiAoRklMRSAqICBpbl9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAg
IHl5aW4gPSBpbl9zdHIgOwotfQotCi12b2lkIHl5c2V0X291dCAoRklMRSAqICBvdXRfc3RyICwg
eXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eW91dCA9IG91dF9zdHIgOwotfQotCi1pbnQg
eXlnZXRfZGVidWcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190
ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eV9mbGV4
X2RlYnVnOwotfQotCi12b2lkIHl5c2V0X2RlYnVnIChpbnQgIGJkZWJ1ZyAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7Ci0gICAgeXlfZmxleF9kZWJ1ZyA9IGJkZWJ1ZyA7Ci19Ci0KLS8qIEFjY2Vz
c29yIG1ldGhvZHMgZm9yIHl5bHZhbCBhbmQgeXlsbG9jICovCi0KLVlZU1RZUEUgKiB5eWdldF9s
dmFsICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlsdmFsOwotfQotCi12
b2lkIHl5c2V0X2x2YWwgKFlZU1RZUEUgKiAgeXlsdmFsX3BhcmFtICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKLSAgICB5eWx2YWwgPSB5eWx2YWxfcGFyYW07Ci19Ci0KLVlZTFRZUEUgKnl5Z2V0
X2xsb2MgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eWxsb2M7Ci19Ci0g
ICAgCi12b2lkIHl5c2V0X2xsb2MgKFlZTFRZUEUgKiAgeXlsbG9jX3BhcmFtICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKLSAgICB5eWxsb2MgPSB5eWxsb2NfcGFyYW07Ci19Ci0gICAgCi0vKiBV
c2VyLXZpc2libGUgQVBJICovCi0KLS8qIHl5bGV4X2luaXQgaXMgc3BlY2lhbCBiZWNhdXNlIGl0
IGNyZWF0ZXMgdGhlIHNjYW5uZXIgaXRzZWxmLCBzbyBpdCBpcwotICogdGhlIE9OTFkgcmVlbnRy
YW50IGZ1bmN0aW9uIHRoYXQgZG9lc24ndCB0YWtlIHRoZSBzY2FubmVyIGFzIHRoZSBsYXN0IGFy
Z3VtZW50LgotICogVGhhdCdzIHdoeSB3ZSBleHBsaWNpdGx5IGhhbmRsZSB0aGUgZGVjbGFyYXRp
b24sIGluc3RlYWQgb2YgdXNpbmcgb3VyIG1hY3Jvcy4KLSAqLwotCi1pbnQgeXlsZXhfaW5pdCh5
eXNjYW5fdCogcHRyX3l5X2dsb2JhbHMpCi0KLXsKLSAgICBpZiAocHRyX3l5X2dsb2JhbHMgPT0g
TlVMTCl7Ci0gICAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9
Ci0KLSAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3QpIHl5YWxsb2MgKCBzaXplb2YoIHN0
cnVjdCB5eWd1dHNfdCApLCBOVUxMICk7Ci0KLSAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5V
TEwpewotICAgICAgICBlcnJubyA9IEVOT01FTTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQot
Ci0gICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2UgYnVncyBpbiB5eV9pbml0X2ds
b2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLwotICAgIG1lbXNldCgqcHRyX3l5
X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7Ci0KLSAgICByZXR1cm4geXlf
aW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7Ci19Ci0KLS8qIHl5bGV4X2luaXRfZXh0
cmEgaGFzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgeXlsZXhfaW5pdCwgYnV0IGZvbGxvd3Mg
dGhlCi0gKiBjb252ZW50aW9uIG9mIHRha2luZyB0aGUgc2Nhbm5lciBhcyB0aGUgbGFzdCBhcmd1
bWVudC4gTm90ZSBob3dldmVyLCB0aGF0Ci0gKiB0aGlzIGlzIGEgKnBvaW50ZXIqIHRvIGEgc2Nh
bm5lciwgYXMgaXQgd2lsbCBiZSBhbGxvY2F0ZWQgYnkgdGhpcyBjYWxsIChhbmQKLSAqIGlzIHRo
ZSByZWFzb24sIHRvbywgd2h5IHRoaXMgZnVuY3Rpb24gYWxzbyBtdXN0IGhhbmRsZSBpdHMgb3du
IGRlY2xhcmF0aW9uKS4KLSAqIFRoZSB1c2VyIGRlZmluZWQgdmFsdWUgaW4gdGhlIGZpcnN0IGFy
Z3VtZW50IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHl5YWxsb2MgaW4KLSAqIHRoZSB5eWV4dHJhIGZp
ZWxkLgotICovCi0KLWludCB5eWxleF9pbml0X2V4dHJhKFlZX0VYVFJBX1RZUEUgeXlfdXNlcl9k
ZWZpbmVkLHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFscyApCi0KLXsKLSAgICBzdHJ1Y3QgeXlndXRz
X3QgZHVtbXlfeXlndXRzOwotCi0gICAgeXlzZXRfZXh0cmEgKHl5X3VzZXJfZGVmaW5lZCwgJmR1
bW15X3l5Z3V0cyk7Ci0KLSAgICBpZiAocHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7Ci0gICAgICAg
IGVycm5vID0gRUlOVkFMOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0JCi0gICAgKnB0cl95
eV9nbG9iYWxzID0gKHl5c2Nhbl90KSB5eWFsbG9jICggc2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3Qg
KSwgJmR1bW15X3l5Z3V0cyApOwotCQotICAgIGlmICgqcHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7
Ci0gICAgICAgIGVycm5vID0gRU5PTUVNOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAg
Ci0gICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2UgYnVncyBpbgotICAgIHl5X2lu
aXRfZ2xvYmFscy4gTGVhdmUgYXQgMHgwMCBmb3IgcmVsZWFzZXMuICovCi0gICAgbWVtc2V0KCpw
dHJfeXlfZ2xvYmFscywweDAwLHNpemVvZihzdHJ1Y3QgeXlndXRzX3QpKTsKLSAgICAKLSAgICB5
eXNldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAqcHRyX3l5X2dsb2JhbHMpOwotICAgIAotICAg
IHJldHVybiB5eV9pbml0X2dsb2JhbHMgKCAqcHRyX3l5X2dsb2JhbHMgKTsKLX0KLQotc3RhdGlj
IGludCB5eV9pbml0X2dsb2JhbHMgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgLyogSW5p
dGlhbGl6YXRpb24gaXMgdGhlIHNhbWUgYXMgZm9yIHRoZSBub24tcmVlbnRyYW50IHNjYW5uZXIu
Ci0gICAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB5eWxleF9kZXN0cm95KCksIHNv
IGRvbid0IGFsbG9jYXRlIGhlcmUuCi0gICAgICovCi0KLSAgICB5eWctPnl5X2J1ZmZlcl9zdGFj
ayA9IDA7Ci0gICAgeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKLSAgICB5eWctPnl5X2J1
ZmZlcl9zdGFja19tYXggPSAwOwotICAgIHl5Zy0+eXlfY19idWZfcCA9IChjaGFyICopIDA7Ci0g
ICAgeXlnLT55eV9pbml0ID0gMDsKLSAgICB5eWctPnl5X3N0YXJ0ID0gMDsKLQotICAgIHl5Zy0+
eXlfc3RhcnRfc3RhY2tfcHRyID0gMDsKLSAgICB5eWctPnl5X3N0YXJ0X3N0YWNrX2RlcHRoID0g
MDsKLSAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gIE5VTEw7Ci0KLS8qIERlZmluZWQgaW4gbWFp
bi5jICovCi0jaWZkZWYgWVlfU1RESU5JVAotICAgIHl5aW4gPSBzdGRpbjsKLSAgICB5eW91dCA9
IHN0ZG91dDsKLSNlbHNlCi0gICAgeXlpbiA9IChGSUxFICopIDA7Ci0gICAgeXlvdXQgPSAoRklM
RSAqKSAwOwotI2VuZGlmCi0KLSAgICAvKiBGb3IgZnV0dXJlIHJlZmVyZW5jZTogU2V0IGVycm5v
IG9uIGVycm9yLCBzaW5jZSB3ZSBhcmUgY2FsbGVkIGJ5Ci0gICAgICogeXlsZXhfaW5pdCgpCi0g
ICAgICovCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIHl5bGV4X2Rlc3Ryb3kgaXMgZm9yIGJvdGgg
cmVlbnRyYW50IGFuZCBub24tcmVlbnRyYW50IHNjYW5uZXJzLiAqLwotaW50IHl5bGV4X2Rlc3Ry
b3kgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgLyogUG9wIHRoZSBidWZmZXIgc3Rh
Y2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVtZW50LiAqLwotCXdoaWxlKFlZX0NVUlJFTlRfQlVGRkVS
KXsKLQkJeXlfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyICk7Ci0J
CVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7Ci0JCXl5cG9wX2J1ZmZlcl9zdGF0ZSh5
eXNjYW5uZXIpOwotCX0KLQotCS8qIERlc3Ryb3kgdGhlIHN0YWNrIGl0c2VsZi4gKi8KLQl5eWZy
ZWUoeXlnLT55eV9idWZmZXJfc3RhY2sgLHl5c2Nhbm5lcik7Ci0JeXlnLT55eV9idWZmZXJfc3Rh
Y2sgPSBOVUxMOwotCi0gICAgLyogRGVzdHJveSB0aGUgc3RhcnQgY29uZGl0aW9uIHN0YWNrLiAq
LwotICAgICAgICB5eWZyZWUoeXlnLT55eV9zdGFydF9zdGFjayAseXlzY2FubmVyICk7Ci0gICAg
ICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sgPSBOVUxMOwotCi0gICAgLyogUmVzZXQgdGhlIGdsb2Jh
bHMuIFRoaXMgaXMgaW1wb3J0YW50IGluIGEgbm9uLXJlZW50cmFudCBzY2FubmVyIHNvIHRoZSBu
ZXh0IHRpbWUKLSAgICAgKiB5eWxleCgpIGlzIGNhbGxlZCwgaW5pdGlhbGl6YXRpb24gd2lsbCBv
Y2N1ci4gKi8KLSAgICB5eV9pbml0X2dsb2JhbHMoIHl5c2Nhbm5lcik7Ci0KLSAgICAvKiBEZXN0
cm95IHRoZSBtYWluIHN0cnVjdCAocmVlbnRyYW50IG9ubHkpLiAqLwotICAgIHl5ZnJlZSAoIHl5
c2Nhbm5lciAsIHl5c2Nhbm5lciApOwotICAgIHl5c2Nhbm5lciA9IE5VTEw7Ci0gICAgcmV0dXJu
IDA7Ci19Ci0KLS8qCi0gKiBJbnRlcm5hbCB1dGlsaXR5IHJvdXRpbmVzLgotICovCi0KLSNpZm5k
ZWYgeXl0ZXh0X3B0cgotc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyKiBzMSwgeXlj
b25zdCBjaGFyICogczIsIGludCBuICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotCXJlZ2lzdGVy
IGludCBpOwotCWZvciAoIGkgPSAwOyBpIDwgbjsgKytpICkKLQkJczFbaV0gPSBzMltpXTsKLX0K
LSNlbmRpZgotCi0jaWZkZWYgWVlfTkVFRF9TVFJMRU4KLXN0YXRpYyBpbnQgeXlfZmxleF9zdHJs
ZW4gKHl5Y29uc3QgY2hhciAqIHMgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0JcmVnaXN0ZXIg
aW50IG47Ci0JZm9yICggbiA9IDA7IHNbbl07ICsrbiApCi0JCTsKLQotCXJldHVybiBuOwotfQot
I2VuZGlmCi0KLXZvaWQgKnl5YWxsb2MgKHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKLXsKLQlyZXR1cm4gKHZvaWQgKikgbWFsbG9jKCBzaXplICk7Ci19Ci0KLXZvaWQgKnl5
cmVhbGxvYyAgKHZvaWQgKiBwdHIsIHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKLXsKLQkvKiBUaGUgY2FzdCB0byAoY2hhciAqKSBpbiB0aGUgZm9sbG93aW5nIGFjY29tbW9k
YXRlcyBib3RoCi0JICogaW1wbGVtZW50YXRpb25zIHRoYXQgdXNlIGNoYXIqIGdlbmVyaWMgcG9p
bnRlcnMsIGFuZCB0aG9zZQotCSAqIHRoYXQgdXNlIHZvaWQqIGdlbmVyaWMgcG9pbnRlcnMuICBJ
dCB3b3JrcyB3aXRoIHRoZSBsYXR0ZXIKLQkgKiBiZWNhdXNlIGJvdGggQU5TSSBDIGFuZCBDKysg
YWxsb3cgY2FzdGxlc3MgYXNzaWdubWVudCBmcm9tCi0JICogYW55IHBvaW50ZXIgdHlwZSB0byB2
b2lkKiwgYW5kIGRlYWwgd2l0aCBhcmd1bWVudCBjb252ZXJzaW9ucwotCSAqIGFzIHRob3VnaCBk
b2luZyBhbiBhc3NpZ25tZW50LgotCSAqLwotCXJldHVybiAodm9pZCAqKSByZWFsbG9jKCAoY2hh
ciAqKSBwdHIsIHNpemUgKTsKLX0KLQotdm9pZCB5eWZyZWUgKHZvaWQgKiBwdHIgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCi17Ci0JZnJlZSggKGNoYXIgKikgcHRyICk7CS8qIHNlZSB5eXJlYWxsb2Mo
KSBmb3IgKGNoYXIgKikgY2FzdCAqLwotfQotCi0jZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5dGFi
bGVzIgotCi0jaWYgZGVmaW5lZChfX2NsYW5nX18pCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
cG9wCi0jZW5kaWYKLQoteXlfc2l6ZV90IHN0cmluZ19pbnB1dChjaGFyKiBidWYsIHl5X3NpemVf
dCBtYXhfc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKSB7Ci0gICAgcHA6OlRva2VuIHRva2VuOwot
ICAgIHl5Z2V0X2V4dHJhKHl5c2Nhbm5lciktPnByZXByb2Nlc3Nvci5sZXgoJnRva2VuKTsKLSAg
ICB5eV9zaXplX3QgbGVuID0gdG9rZW4udHlwZSA9PSBwcDo6VG9rZW46OkxBU1QgPyAwIDogdG9r
ZW4udGV4dC5zaXplKCk7Ci0gICAgaWYgKGxlbiA8IG1heF9zaXplKQotICAgICAgICBtZW1jcHko
YnVmLCB0b2tlbi50ZXh0LmNfc3RyKCksIGxlbik7Ci0gICAgeXlzZXRfY29sdW1uKHRva2VuLmxv
Y2F0aW9uLmZpbGUseXlzY2FubmVyKTsKLSAgICB5eXNldF9saW5lbm8odG9rZW4ubG9jYXRpb24u
bGluZSx5eXNjYW5uZXIpOwotCi0gICAgaWYgKGxlbiA+PSBtYXhfc2l6ZSkKLSAgICAgICAgWVlf
RkFUQUxfRVJST1IoIklucHV0IGJ1ZmZlciBvdmVyZmxvdyIpOwotICAgIGVsc2UgaWYgKGxlbiA+
IDApCi0gICAgICAgIGJ1ZltsZW4rK10gPSAnICc7Ci0gICAgcmV0dXJuIGxlbjsKLX0KLQotaW50
IGNoZWNrX3R5cGUoeXlzY2FuX3QgeXlzY2FubmVyKSB7Ci0gICAgc3RydWN0IHl5Z3V0c190KiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190KikgeXlzY2FubmVyOwotICAgIAotICAgIGludCB0b2tlbiA9
IElERU5USUZJRVI7Ci0gICAgVFN5bWJvbCogc3ltYm9sID0geXlleHRyYS0+c3ltYm9sVGFibGUu
ZmluZCh5eXRleHQpOwotICAgIGlmIChzeW1ib2wgJiYgc3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsK
LSAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+KHN5
bWJvbCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZS0+aXNVc2VyVHlwZSgpKQotICAgICAgICAgICAg
dG9rZW4gPSBUWVBFX05BTUU7Ci0gICAgfQotICAgIHl5bHZhbC0+bGV4LnN5bWJvbCA9IHN5bWJv
bDsKLSAgICByZXR1cm4gdG9rZW47Ci19Ci0KLWludCByZXNlcnZlZF93b3JkKHl5c2Nhbl90IHl5
c2Nhbm5lcikgewotICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
IHl5c2Nhbm5lcjsKLQotICAgIHl5ZXh0cmEtPmVycm9yKCp5eWxsb2MsICJJbGxlZ2FsIHVzZSBv
ZiByZXNlcnZlZCB3b3JkIiwgeXl0ZXh0LCAiIik7Ci0gICAgeXlleHRyYS0+cmVjb3ZlcigpOwot
ICAgIHJldHVybiAwOwotfQotCi12b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxvYywgVFBhcnNlQ29u
dGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKSB7Ci0gICAgY29udGV4dC0+ZXJyb3Io
Kmxsb2MsIHJlYXNvbiwgeXlnZXRfdGV4dChjb250ZXh0LT5zY2FubmVyKSk7Ci0gICAgY29udGV4
dC0+cmVjb3ZlcigpOwotfQotCi1pbnQgaW50X2NvbnN0YW50KHl5c2Nhbl90IHl5c2Nhbm5lcikg
ewotICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIHl5c2Nhbm5l
cjsKLQotICAgIGlmICghYXRvaV9jbGFtcCh5eXRleHQsICYoeXlsdmFsLT5sZXguaSkpKQotICAg
ICAgICB5eWV4dHJhLT53YXJuaW5nKCp5eWxsb2MsICJJbnRlZ2VyIG92ZXJmbG93IiwgeXl0ZXh0
LCAiIik7Ci0gICAgcmV0dXJuIElOVENPTlNUQU5UOwotfQotCi1pbnQgZmxvYXRfY29uc3RhbnQo
eXlzY2FuX3QgeXlzY2FubmVyKSB7Ci0gICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190KikgeXlzY2FubmVyOwotCi0gICAgaWYgKCFhdG9mX2NsYW1wKHl5dGV4dCwgJih5
eWx2YWwtPmxleC5mKSkpCi0gICAgICAgIHl5ZXh0cmEtPndhcm5pbmcoKnl5bGxvYywgIkZsb2F0
IG92ZXJmbG93IiwgeXl0ZXh0LCAiIik7Ci0gICAgcmV0dXJuIEZMT0FUQ09OU1RBTlQ7Ci19Ci0K
LWludCBnbHNsYW5nX2luaXRpYWxpemUoVFBhcnNlQ29udGV4dCogY29udGV4dCkgewotICAgIHl5
c2Nhbl90IHNjYW5uZXIgPSBOVUxMOwotICAgIGlmICh5eWxleF9pbml0X2V4dHJhKGNvbnRleHQs
JnNjYW5uZXIpKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIGNvbnRleHQtPnNjYW5uZXIgPSBz
Y2FubmVyOwotICAgIHJldHVybiAwOwotfQotCi1pbnQgZ2xzbGFuZ19maW5hbGl6ZShUUGFyc2VD
b250ZXh0KiBjb250ZXh0KSB7Ci0gICAgeXlzY2FuX3Qgc2Nhbm5lciA9IGNvbnRleHQtPnNjYW5u
ZXI7Ci0gICAgaWYgKHNjYW5uZXIgPT0gTlVMTCkgcmV0dXJuIDA7Ci0gICAgCi0gICAgY29udGV4
dC0+c2Nhbm5lciA9IE5VTEw7Ci0gICAgeXlsZXhfZGVzdHJveShzY2FubmVyKTsKLQotICAgIHJl
dHVybiAwOwotfQotCi1pbnQgZ2xzbGFuZ19zY2FuKHNpemVfdCBjb3VudCwgY29uc3QgY2hhciog
Y29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKLSAgICAgICAgICAgICAgICAgVFBh
cnNlQ29udGV4dCogY29udGV4dCkgewotICAgIHl5cmVzdGFydChOVUxMLGNvbnRleHQtPnNjYW5u
ZXIpOwotICAgIHl5c2V0X2NvbHVtbigwLGNvbnRleHQtPnNjYW5uZXIpOwotICAgIHl5c2V0X2xp
bmVubygxLGNvbnRleHQtPnNjYW5uZXIpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSBwcmVwcm9jZXNz
b3IuCi0gICAgaWYgKCFjb250ZXh0LT5wcmVwcm9jZXNzb3IuaW5pdChjb3VudCwgc3RyaW5nLCBs
ZW5ndGgpKQotICAgICAgICByZXR1cm4gMTsKLSAgICBjb250ZXh0LT5wcmVwcm9jZXNzb3Iuc2V0
TWF4VG9rZW5MZW5ndGgoU0hfTUFYX1RPS0VOX0xFTkdUSCk7Ci0KLSAgICAvLyBEZWZpbmUgZXh0
ZW5zaW9uIG1hY3Jvcy4KLSAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9y
ID0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IoKTsKLSAgICBmb3IgKFRFeHRlbnNpb25CZWhh
dmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dEJlaGF2aW9yLmJlZ2luKCk7Ci0gICAgICAg
ICBpdGVyICE9IGV4dEJlaGF2aW9yLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgY29udGV4dC0+
cHJlcHJvY2Vzc29yLnByZWRlZmluZU1hY3JvKGl0ZXItPmZpcnN0LmNfc3RyKCksIDEpOwotICAg
IH0KLSAgICBpZiAoY29udGV4dC0+ZnJhZ21lbnRQcmVjaXNpb25IaWdoKQotICAgICAgICBjb250
ZXh0LT5wcmVwcm9jZXNzb3IucHJlZGVmaW5lTWFjcm8oIkdMX0ZSQUdNRU5UX1BSRUNJU0lPTl9I
SUdIIiwgMSk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGNlN2IyYzcxMTcwYThiNDdiZjRkZjA4N2E5ZGJhM2EwZTZmNTE3YTUuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDQ4NzIgKzAsMCBAQAotLyogQXBwbGUgTm90ZTogRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91
YnQsIEFwcGxlIGVsZWN0cyB0byBkaXN0cmlidXRlIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEJTRCBsaWNlbnNlLiAqLwotCi0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUg
Qmlzb24gMi43LiAgKi8KLQotLyogQmlzb24gaW1wbGVtZW50YXRpb24gZm9yIFlhY2MtbGlrZSBw
YXJzZXJzIGluIEMKLSAgIAotICAgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIw
MDAtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSAgIAotICAgVGhpcyBwcm9n
cmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp
ZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRo
ZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAgIAotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAgIAotICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cu
Z251Lm9yZy9saWNlbnNlcy8+LiAgKi8KLQotLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91
IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCi0gICBwYXJ0IG9yIGFsbCBv
ZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawotICAg
dW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHNvIGxvbmcgYXMgdGhhdCB3b3JrIGlzbid0IGl0
c2VsZiBhCi0gICBwYXJzZXIgZ2VuZXJhdG9yIHVzaW5nIHRoZSBza2VsZXRvbiBvciBhIG1vZGlm
aWVkIHZlcnNpb24gdGhlcmVvZgotICAgYXMgYSBwYXJzZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2
ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZQotICAgdGhlIHBhcnNlciBza2VsZXRv
biBpdHNlbGYsIHlvdSBtYXkgKGF0IHlvdXIgb3B0aW9uKSByZW1vdmUgdGhpcwotICAgc3BlY2lh
bCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0
aW5nCi0gICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBH
ZW5lcmFsIFB1YmxpYwotICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24u
Ci0gICAKLSAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24gaW4KLSAgIHZlcnNpb24gMi4yIG9mIEJpc29uLiAgKi8KLQotLyog
QyBMQUxSKDEpIHBhcnNlciBza2VsZXRvbiB3cml0dGVuIGJ5IFJpY2hhcmQgU3RhbGxtYW4sIGJ5
Ci0gICBzaW1wbGlmeWluZyB0aGUgb3JpZ2luYWwgc28tY2FsbGVkICJzZW1hbnRpYyIgcGFyc2Vy
LiAgKi8KLQotLyogQWxsIHN5bWJvbHMgZGVmaW5lZCBiZWxvdyBzaG91bGQgYmVnaW4gd2l0aCB5
eSBvciBZWSwgdG8gYXZvaWQKLSAgIGluZnJpbmdpbmcgb24gdXNlciBuYW1lIHNwYWNlLiAgVGhp
cyBzaG91bGQgYmUgZG9uZSBldmVuIGZvciBsb2NhbAotICAgdmFyaWFibGVzLCBhcyB0aGV5IG1p
Z2h0IG90aGVyd2lzZSBiZSBleHBhbmRlZCBieSB1c2VyIG1hY3Jvcy4KLSAgIFRoZXJlIGFyZSBz
b21lIHVuYXZvaWRhYmxlIGV4Y2VwdGlvbnMgd2l0aGluIGluY2x1ZGUgZmlsZXMgdG8KLSAgIGRl
ZmluZSBuZWNlc3NhcnkgbGlicmFyeSBzeW1ib2xzOyB0aGV5IGFyZSBub3RlZCAiSU5GUklOR0VT
IE9OCi0gICBVU0VSIE5BTUUgU1BBQ0UiIGJlbG93LiAgKi8KLQotLyogSWRlbnRpZnkgQmlzb24g
b3V0cHV0LiAgKi8KLSNkZWZpbmUgWVlCSVNPTiAxCi0KLS8qIEJpc29uIHZlcnNpb24uICAqLwot
I2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjIuNyIKLQotLyogU2tlbGV0b24gbmFtZS4gICovCi0j
ZGVmaW5lIFlZU0tFTEVUT05fTkFNRSAieWFjYy5jIgotCi0vKiBQdXJlIHBhcnNlcnMuICAqLwot
I2RlZmluZSBZWVBVUkUgMQotCi0vKiBQdXNoIHBhcnNlcnMuICAqLwotI2RlZmluZSBZWVBVU0gg
MAotCi0vKiBQdWxsIHBhcnNlcnMuICAqLwotI2RlZmluZSBZWVBVTEwgMQotCi0KLQotCi0vKiBD
b3B5IHRoZSBmaXJzdCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KLQotCi0vLwotLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCi0vLwotCi0vLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVf
cGFyc2VyLnNoLiBETyBOT1QgRURJVCEKLQotLy8gSWdub3JlIGVycm9ycyBpbiBhdXRvLWdlbmVy
YXRlZCBjb2RlLgotI2lmIGRlZmluZWQoX19HTlVDX18pCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGlj
IGlnbm9yZWQgIi1XdW51c2VkLWZ1bmN0aW9uIgotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25v
cmVkICItV3VudXNlZC12YXJpYWJsZSIKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAi
LVdzd2l0Y2gtZW51bSIKLSNlbGlmIGRlZmluZWQoX01TQ19WRVIpCi0jcHJhZ21hIHdhcm5pbmco
ZGlzYWJsZTogNDA2NSkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MTg5KQotI3ByYWdtYSB3
YXJuaW5nKGRpc2FibGU6IDQ1MDUpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcwMSkKLSNl
bmRpZgotCi0jaW5jbHVkZSAiY29tcGlsZXIvU3ltYm9sVGFibGUuaCIKLSNpbmNsdWRlICJjb21w
aWxlci9QYXJzZUNvbnRleHQuaCIKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLQot
I2RlZmluZSBZWUVOQUJMRV9OTFMgMAotCi0jZGVmaW5lIFlZTEVYX1BBUkFNIGNvbnRleHQtPnNj
YW5uZXIKLQotCi0KLSMgaWZuZGVmIFlZX05VTEwKLSMgIGlmIGRlZmluZWQgX19jcGx1c3BsdXMg
JiYgMjAxMTAzTCA8PSBfX2NwbHVzcGx1cwotIyAgIGRlZmluZSBZWV9OVUxMIG51bGxwdHIKLSMg
IGVsc2UKLSMgICBkZWZpbmUgWVlfTlVMTCAwCi0jICBlbmRpZgotIyBlbmRpZgotCi0vKiBFbmFi
bGluZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8KLSNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UK
LSMgdW5kZWYgWVlFUlJPUl9WRVJCT1NFCi0jIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQotI2Vs
c2UKLSMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAwCi0jZW5kaWYKLQotLyogSW4gYSBmdXR1cmUg
cmVsZWFzZSBvZiBCaXNvbiwgdGhpcyBzZWN0aW9uIHdpbGwgYmUgcmVwbGFjZWQKLSAgIGJ5ICNp
bmNsdWRlICJnbHNsYW5nX3RhYi5oIi4gICovCi0jaWZuZGVmIFlZX1lZX0dMU0xBTkdfVEFCX0hf
SU5DTFVERUQKLSMgZGVmaW5lIFlZX1lZX0dMU0xBTkdfVEFCX0hfSU5DTFVERUQKLS8qIEVuYWJs
aW5nIHRyYWNlcy4gICovCi0jaWZuZGVmIFlZREVCVUcKLSMgZGVmaW5lIFlZREVCVUcgMAotI2Vu
ZGlmCi0jaWYgWVlERUJVRwotZXh0ZXJuIGludCB5eWRlYnVnOwotI2VuZGlmCi0vKiAiJWNvZGUg
cmVxdWlyZXMiIGJsb2Nrcy4gICovCi0KLQotI2RlZmluZSBZWUxUWVBFIFRTb3VyY2VMb2MKLSNk
ZWZpbmUgWVlMVFlQRV9JU19ERUNMQVJFRCAxCi0jZGVmaW5lIFNIX01BWF9UT0tFTl9MRU5HVEgg
MjU2ICAvLyBXZWJHTCBzcGVjLgotCi0KLQotCi0vKiBUb2tlbnMuICAqLwotI2lmbmRlZiBZWVRP
S0VOVFlQRQotIyBkZWZpbmUgWVlUT0tFTlRZUEUKLSAgIC8qIFB1dCB0aGUgdG9rZW5zIGludG8g
dGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVyIGRlYnVnZ2VycwotICAgICAg
a25vdyBhYm91dCB0aGVtLiAgKi8KLSAgIGVudW0geXl0b2tlbnR5cGUgewotICAgICBJTlZBUklB
TlQgPSAyNTgsCi0gICAgIEhJR0hfUFJFQ0lTSU9OID0gMjU5LAotICAgICBNRURJVU1fUFJFQ0lT
SU9OID0gMjYwLAotICAgICBMT1dfUFJFQ0lTSU9OID0gMjYxLAotICAgICBQUkVDSVNJT04gPSAy
NjIsCi0gICAgIEFUVFJJQlVURSA9IDI2MywKLSAgICAgQ09OU1RfUVVBTCA9IDI2NCwKLSAgICAg
Qk9PTF9UWVBFID0gMjY1LAotICAgICBGTE9BVF9UWVBFID0gMjY2LAotICAgICBJTlRfVFlQRSA9
IDI2NywKLSAgICAgQlJFQUsgPSAyNjgsCi0gICAgIENPTlRJTlVFID0gMjY5LAotICAgICBETyA9
IDI3MCwKLSAgICAgRUxTRSA9IDI3MSwKLSAgICAgRk9SID0gMjcyLAotICAgICBJRiA9IDI3MywK
LSAgICAgRElTQ0FSRCA9IDI3NCwKLSAgICAgUkVUVVJOID0gMjc1LAotICAgICBCVkVDMiA9IDI3
NiwKLSAgICAgQlZFQzMgPSAyNzcsCi0gICAgIEJWRUM0ID0gMjc4LAotICAgICBJVkVDMiA9IDI3
OSwKLSAgICAgSVZFQzMgPSAyODAsCi0gICAgIElWRUM0ID0gMjgxLAotICAgICBWRUMyID0gMjgy
LAotICAgICBWRUMzID0gMjgzLAotICAgICBWRUM0ID0gMjg0LAotICAgICBNQVRSSVgyID0gMjg1
LAotICAgICBNQVRSSVgzID0gMjg2LAotICAgICBNQVRSSVg0ID0gMjg3LAotICAgICBJTl9RVUFM
ID0gMjg4LAotICAgICBPVVRfUVVBTCA9IDI4OSwKLSAgICAgSU5PVVRfUVVBTCA9IDI5MCwKLSAg
ICAgVU5JRk9STSA9IDI5MSwKLSAgICAgVkFSWUlORyA9IDI5MiwKLSAgICAgU1RSVUNUID0gMjkz
LAotICAgICBWT0lEX1RZUEUgPSAyOTQsCi0gICAgIFdISUxFID0gMjk1LAotICAgICBTQU1QTEVS
MkQgPSAyOTYsCi0gICAgIFNBTVBMRVJDVUJFID0gMjk3LAotICAgICBTQU1QTEVSX0VYVEVSTkFM
X09FUyA9IDI5OCwKLSAgICAgU0FNUExFUjJEUkVDVCA9IDI5OSwKLSAgICAgSURFTlRJRklFUiA9
IDMwMCwKLSAgICAgVFlQRV9OQU1FID0gMzAxLAotICAgICBGTE9BVENPTlNUQU5UID0gMzAyLAot
ICAgICBJTlRDT05TVEFOVCA9IDMwMywKLSAgICAgQk9PTENPTlNUQU5UID0gMzA0LAotICAgICBM
RUZUX09QID0gMzA1LAotICAgICBSSUdIVF9PUCA9IDMwNiwKLSAgICAgSU5DX09QID0gMzA3LAot
ICAgICBERUNfT1AgPSAzMDgsCi0gICAgIExFX09QID0gMzA5LAotICAgICBHRV9PUCA9IDMxMCwK
LSAgICAgRVFfT1AgPSAzMTEsCi0gICAgIE5FX09QID0gMzEyLAotICAgICBBTkRfT1AgPSAzMTMs
Ci0gICAgIE9SX09QID0gMzE0LAotICAgICBYT1JfT1AgPSAzMTUsCi0gICAgIE1VTF9BU1NJR04g
PSAzMTYsCi0gICAgIERJVl9BU1NJR04gPSAzMTcsCi0gICAgIEFERF9BU1NJR04gPSAzMTgsCi0g
ICAgIE1PRF9BU1NJR04gPSAzMTksCi0gICAgIExFRlRfQVNTSUdOID0gMzIwLAotICAgICBSSUdI
VF9BU1NJR04gPSAzMjEsCi0gICAgIEFORF9BU1NJR04gPSAzMjIsCi0gICAgIFhPUl9BU1NJR04g
PSAzMjMsCi0gICAgIE9SX0FTU0lHTiA9IDMyNCwKLSAgICAgU1VCX0FTU0lHTiA9IDMyNSwKLSAg
ICAgTEVGVF9QQVJFTiA9IDMyNiwKLSAgICAgUklHSFRfUEFSRU4gPSAzMjcsCi0gICAgIExFRlRf
QlJBQ0tFVCA9IDMyOCwKLSAgICAgUklHSFRfQlJBQ0tFVCA9IDMyOSwKLSAgICAgTEVGVF9CUkFD
RSA9IDMzMCwKLSAgICAgUklHSFRfQlJBQ0UgPSAzMzEsCi0gICAgIERPVCA9IDMzMiwKLSAgICAg
Q09NTUEgPSAzMzMsCi0gICAgIENPTE9OID0gMzM0LAotICAgICBFUVVBTCA9IDMzNSwKLSAgICAg
U0VNSUNPTE9OID0gMzM2LAotICAgICBCQU5HID0gMzM3LAotICAgICBEQVNIID0gMzM4LAotICAg
ICBUSUxERSA9IDMzOSwKLSAgICAgUExVUyA9IDM0MCwKLSAgICAgU1RBUiA9IDM0MSwKLSAgICAg
U0xBU0ggPSAzNDIsCi0gICAgIFBFUkNFTlQgPSAzNDMsCi0gICAgIExFRlRfQU5HTEUgPSAzNDQs
Ci0gICAgIFJJR0hUX0FOR0xFID0gMzQ1LAotICAgICBWRVJUSUNBTF9CQVIgPSAzNDYsCi0gICAg
IENBUkVUID0gMzQ3LAotICAgICBBTVBFUlNBTkQgPSAzNDgsCi0gICAgIFFVRVNUSU9OID0gMzQ5
Ci0gICB9OwotI2VuZGlmCi0KLQotI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZ
WVNUWVBFX0lTX0RFQ0xBUkVECi10eXBlZGVmIHVuaW9uIFlZU1RZUEUKLXsKLQotCi0gICAgc3Ry
dWN0IHsKLSAgICAgICAgdW5pb24gewotICAgICAgICAgICAgVFN0cmluZyAqc3RyaW5nOwotICAg
ICAgICAgICAgZmxvYXQgZjsKLSAgICAgICAgICAgIGludCBpOwotICAgICAgICAgICAgYm9vbCBi
OwotICAgICAgICB9OwotICAgICAgICBUU3ltYm9sKiBzeW1ib2w7Ci0gICAgfSBsZXg7Ci0gICAg
c3RydWN0IHsKLSAgICAgICAgVE9wZXJhdG9yIG9wOwotICAgICAgICB1bmlvbiB7Ci0gICAgICAg
ICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKLSAgICAgICAgICAgIFRJbnRlcm1Ob2RlUGFp
ciBub2RlUGFpcjsKLSAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW50ZXJtVHlwZWROb2RlOwot
ICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtQWdncmVnYXRlOwotICAgICAgICB9
OwotICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAgICBUUHVibGljVHlwZSB0eXBlOwotICAgICAg
ICAgICAgVFByZWNpc2lvbiBwcmVjaXNpb247Ci0gICAgICAgICAgICBUUXVhbGlmaWVyIHF1YWxp
ZmllcjsKLSAgICAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb247Ci0gICAgICAgICAgICBUUGFy
YW1ldGVyIHBhcmFtOwotICAgICAgICAgICAgVEZpZWxkKiBmaWVsZDsKLSAgICAgICAgICAgIFRG
aWVsZExpc3QqIGZpZWxkTGlzdDsKLSAgICAgICAgfTsKLSAgICB9IGludGVybTsKLQotCi0KLX0g
WVlTVFlQRTsKLSMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCi0jIGRlZmluZSB5eXN0eXBl
IFlZU1RZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCi0jIGRlZmluZSBZ
WVNUWVBFX0lTX0RFQ0xBUkVEIDEKLSNlbmRpZgotCi0jaWYgISBkZWZpbmVkIFlZTFRZUEUgJiYg
ISBkZWZpbmVkIFlZTFRZUEVfSVNfREVDTEFSRUQKLXR5cGVkZWYgc3RydWN0IFlZTFRZUEUKLXsK
LSAgaW50IGZpcnN0X2xpbmU7Ci0gIGludCBmaXJzdF9jb2x1bW47Ci0gIGludCBsYXN0X2xpbmU7
Ci0gIGludCBsYXN0X2NvbHVtbjsKLX0gWVlMVFlQRTsKLSMgZGVmaW5lIHl5bHR5cGUgWVlMVFlQ
RSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KLSMgZGVmaW5lIFlZTFRZUEVf
SVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlMVFlQRV9JU19UUklWSUFMIDEKLSNlbmRpZgotCi0K
LSNpZmRlZiBZWVBBUlNFX1BBUkFNCi0jaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9f
Y3BsdXNwbHVzCi1pbnQgeXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSk7Ci0jZWxzZQotaW50
IHl5cGFyc2UgKCk7Ci0jZW5kaWYKLSNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLwotI2lmIGRl
ZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cwotaW50IHl5cGFyc2UgKFRQYXJz
ZUNvbnRleHQqIGNvbnRleHQpOwotI2Vsc2UKLWludCB5eXBhcnNlICgpOwotI2VuZGlmCi0jZW5k
aWYgLyogISBZWVBBUlNFX1BBUkFNICovCi0KLSNlbmRpZiAvKiAhWVlfWVlfR0xTTEFOR19UQUJf
SF9JTkNMVURFRCAgKi8KLQotLyogQ29weSB0aGUgc2Vjb25kIHBhcnQgb2YgdXNlciBkZWNsYXJh
dGlvbnMuICAqLwotCi0KLWV4dGVybiBpbnQgeXlsZXgoWVlTVFlQRSogeXlsdmFsLCBZWUxUWVBF
KiB5eWxsb2MsIHZvaWQqIHl5c2Nhbm5lcik7Ci1leHRlcm4gdm9pZCB5eWVycm9yKFlZTFRZUEUq
IHl5bGxvYywgVFBhcnNlQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKTsKLQot
I2RlZmluZSBZWUxMT0NfREVGQVVMVChDdXJyZW50LCBSaHMsIE4pICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICBpZiAoWVlJRChOKSkgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAoQ3VycmVudCkuZmlyc3RfZmlsZSA9IFlZUkhT
TE9DKFJocywgMSkuZmlyc3RfZmlsZTsgIFwKLSAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2xpbmUg
PSBZWVJIU0xPQyhSaHMsIDEpLmZpcnN0X2xpbmU7ICBcCi0gICAgICAgIChDdXJyZW50KS5sYXN0
X2ZpbGUgPSBZWVJIU0xPQyhSaHMsIE4pLmxhc3RfZmlsZTsgICAgXAotICAgICAgICAoQ3VycmVu
dCkubGFzdF9saW5lID0gWVlSSFNMT0MoUmhzLCBOKS5sYXN0X2xpbmU7ICAgIFwKLSAgICAgIH0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICAoQ3VycmVudCkuZmlyc3RfZmlsZSA9IFlZUkhTTE9DKFJocywgMCkubGFz
dF9maWxlOyAgIFwKLSAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgPSBZWVJIU0xPQyhSaHMs
IDApLmxhc3RfbGluZTsgICBcCi0gICAgICAgIChDdXJyZW50KS5sYXN0X2ZpbGUgPSBZWVJIU0xP
QyhSaHMsIDApLmxhc3RfZmlsZTsgICAgXAotICAgICAgICAoQ3VycmVudCkubGFzdF9saW5lID0g
WVlSSFNMT0MoUmhzLCAwKS5sYXN0X2xpbmU7ICAgIFwKLSAgICAgIH0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gd2hpbGUgKDApCi0K
LSNkZWZpbmUgVkVSVEVYX09OTFkoUywgTCkgeyAgXAotICAgIGlmIChjb250ZXh0LT5zaGFkZXJU
eXBlICE9IFNIX1ZFUlRFWF9TSEFERVIpIHsgIFwKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwg
IiBzdXBwb3J0ZWQgaW4gdmVydGV4IHNoYWRlcnMgb25seSAiLCBTKTsgIFwKLSAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOyAgXAotICAgIH0gIFwKLX0KLQotI2RlZmluZSBGUkFHX09OTFkoUywg
TCkgeyAgXAotICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNIX0ZSQUdNRU5UX1NIQURF
UikgeyAgXAotICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiBmcmFnbWVu
dCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCi0gICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwK
LSAgICB9ICBcCi19Ci0KLQotCi0jaWZkZWYgc2hvcnQKLSMgdW5kZWYgc2hvcnQKLSNlbmRpZgot
Ci0jaWZkZWYgWVlUWVBFX1VJTlQ4Ci10eXBlZGVmIFlZVFlQRV9VSU5UOCB5eXR5cGVfdWludDg7
Ci0jZWxzZQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHl5dHlwZV91aW50ODsKLSNlbmRpZgotCi0j
aWZkZWYgWVlUWVBFX0lOVDgKLXR5cGVkZWYgWVlUWVBFX0lOVDggeXl0eXBlX2ludDg7Ci0jZWxp
ZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBk
ZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi10eXBlZGVmIHNpZ25lZCBj
aGFyIHl5dHlwZV9pbnQ4OwotI2Vsc2UKLXR5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQ4Owot
I2VuZGlmCi0KLSNpZmRlZiBZWVRZUEVfVUlOVDE2Ci10eXBlZGVmIFlZVFlQRV9VSU5UMTYgeXl0
eXBlX3VpbnQxNjsKLSNlbHNlCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB5eXR5cGVfdWlu
dDE2OwotI2VuZGlmCi0KLSNpZmRlZiBZWVRZUEVfSU5UMTYKLXR5cGVkZWYgWVlUWVBFX0lOVDE2
IHl5dHlwZV9pbnQxNjsKLSNlbHNlCi10eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50MTY7Ci0j
ZW5kaWYKLQotI2lmbmRlZiBZWVNJWkVfVAotIyBpZmRlZiBfX1NJWkVfVFlQRV9fCi0jICBkZWZp
bmUgWVlTSVpFX1QgX19TSVpFX1RZUEVfXwotIyBlbGlmIGRlZmluZWQgc2l6ZV90Ci0jICBkZWZp
bmUgWVlTSVpFX1Qgc2l6ZV90Ci0jIGVsaWYgISBkZWZpbmVkIFlZU0laRV9UICYmIChkZWZpbmVk
IF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19j
cGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLSMgIGluY2x1ZGUgPHN0ZGRlZi5oPiAvKiBJ
TkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90
Ci0jIGVsc2UKLSMgIGRlZmluZSBZWVNJWkVfVCB1bnNpZ25lZCBpbnQKLSMgZW5kaWYKLSNlbmRp
ZgotCi0jZGVmaW5lIFlZU0laRV9NQVhJTVVNICgoWVlTSVpFX1QpIC0xKQotCi0jaWZuZGVmIFlZ
XwotIyBpZiBkZWZpbmVkIFlZRU5BQkxFX05MUyAmJiBZWUVOQUJMRV9OTFMKLSMgIGlmIEVOQUJM
RV9OTFMKLSMgICBpbmNsdWRlIDxsaWJpbnRsLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUg
U1BBQ0UgKi8KLSMgICBkZWZpbmUgWVlfKE1zZ2lkKSBkZ2V0dGV4dCAoImJpc29uLXJ1bnRpbWUi
LCBNc2dpZCkKLSMgIGVuZGlmCi0jIGVuZGlmCi0jIGlmbmRlZiBZWV8KLSMgIGRlZmluZSBZWV8o
TXNnaWQpIE1zZ2lkCi0jIGVuZGlmCi0jZW5kaWYKLQotLyogU3VwcHJlc3MgdW51c2VkLXZhcmlh
YmxlIHdhcm5pbmdzIGJ5ICJ1c2luZyIgRS4gICovCi0jaWYgISBkZWZpbmVkIGxpbnQgfHwgZGVm
aW5lZCBfX0dOVUNfXwotIyBkZWZpbmUgWVlVU0UoRSkgKCh2b2lkKSAoRSkpCi0jZWxzZQotIyBk
ZWZpbmUgWVlVU0UoRSkgLyogZW1wdHkgKi8KLSNlbmRpZgotCi0vKiBJZGVudGl0eSBmdW5jdGlv
biwgdXNlZCB0byBzdXBwcmVzcyB3YXJuaW5ncyBhYm91dCBjb25zdGFudCBjb25kaXRpb25zLiAg
Ki8KLSNpZm5kZWYgbGludAotIyBkZWZpbmUgWVlJRChOKSAoTikKLSNlbHNlCi0jaWYgKGRlZmlu
ZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBf
X2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIGludAotWVlJRCAoaW50IHl5
aSkKLSNlbHNlCi1zdGF0aWMgaW50Ci1ZWUlEICh5eWkpCi0gICAgaW50IHl5aTsKLSNlbmRpZgot
ewotICByZXR1cm4geXlpOwotfQotI2VuZGlmCi0KLSNpZiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8
fCBZWUVSUk9SX1ZFUkJPU0UKLQotLyogVGhlIHBhcnNlciBpbnZva2VzIGFsbG9jYSBvciBtYWxs
b2M7IGRlZmluZSB0aGUgbmVjZXNzYXJ5IHN5bWJvbHMuICAqLwotCi0jIGlmZGVmIFlZU1RBQ0tf
VVNFX0FMTE9DQQotIyAgaWYgWVlTVEFDS19VU0VfQUxMT0NBCi0jICAgaWZkZWYgX19HTlVDX18K
LSMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19idWlsdGluX2FsbG9jYQotIyAgIGVsaWYgZGVm
aW5lZCBfX0JVSUxUSU5fVkFfQVJHX0lOQ1IKLSMgICAgaW5jbHVkZSA8YWxsb2NhLmg+IC8qIElO
RlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBlbGlmIGRlZmluZWQgX0FJWAotIyAg
ICBkZWZpbmUgWVlTVEFDS19BTExPQyBfX2FsbG9jYQotIyAgIGVsaWYgZGVmaW5lZCBfTVNDX1ZF
UgotIyAgICBpbmNsdWRlIDxtYWxsb2MuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFD
RSAqLwotIyAgICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKLSMgICBlbHNlCi0jICAgIGRlZmluZSBZ
WVNUQUNLX0FMTE9DIGFsbG9jYQotIyAgICBpZiAhIGRlZmluZWQgX0FMTE9DQV9IICYmICEgZGVm
aW5lZCBFWElUX1NVQ0NFU1MgJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9f
RlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVS
KQotIyAgICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BB
Q0UgKi8KLSAgICAgIC8qIFVzZSBFWElUX1NVQ0NFU1MgYXMgYSB3aXRuZXNzIGZvciBzdGRsaWIu
aC4gICovCi0jICAgICBpZm5kZWYgRVhJVF9TVUNDRVNTCi0jICAgICAgZGVmaW5lIEVYSVRfU1VD
Q0VTUyAwCi0jICAgICBlbmRpZgotIyAgICBlbmRpZgotIyAgIGVuZGlmCi0jICBlbmRpZgotIyBl
bmRpZgotCi0jIGlmZGVmIFlZU1RBQ0tfQUxMT0MKLSAgIC8qIFBhY2lmeSBHQ0MncyBgZW1wdHkg
aWYtYm9keScgd2FybmluZy4gICovCi0jICBkZWZpbmUgWVlTVEFDS19GUkVFKFB0cikgZG8geyAv
KiBlbXB0eSAqLzsgfSB3aGlsZSAoWVlJRCAoMCkpCi0jICBpZm5kZWYgWVlTVEFDS19BTExPQ19N
QVhJTVVNCi0gICAgLyogVGhlIE9TIG1pZ2h0IGd1YXJhbnRlZSBvbmx5IG9uZSBndWFyZCBwYWdl
IGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLAotICAgICAgIGFuZCBhIHBhZ2Ugc2l6ZSBjYW4g
YmUgYXMgc21hbGwgYXMgNDA5NiBieXRlcy4gIFNvIHdlIGNhbm5vdCBzYWZlbHkKLSAgICAgICBp
bnZva2UgYWxsb2NhIChOKSBpZiBOIGV4Y2VlZHMgNDA5Ni4gIFVzZSBhIHNsaWdodGx5IHNtYWxs
ZXIgbnVtYmVyCi0gICAgICAgdG8gYWxsb3cgZm9yIGEgZmV3IGNvbXBpbGVyLWFsbG9jYXRlZCB0
ZW1wb3Jhcnkgc3RhY2sgc2xvdHMuICAqLwotIyAgIGRlZmluZSBZWVNUQUNLX0FMTE9DX01BWElN
VU0gNDAzMiAvKiByZWFzb25hYmxlIGNpcmNhIDIwMDYgKi8KLSMgIGVuZGlmCi0jIGVsc2UKLSMg
IGRlZmluZSBZWVNUQUNLX0FMTE9DIFlZTUFMTE9DCi0jICBkZWZpbmUgWVlTVEFDS19GUkVFIFlZ
RlJFRQotIyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQotIyAgIGRlZmluZSBZWVNUQUNL
X0FMTE9DX01BWElNVU0gWVlTSVpFX01BWElNVU0KLSMgIGVuZGlmCi0jICBpZiAoZGVmaW5lZCBf
X2NwbHVzcGx1cyAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTIFwKLSAgICAgICAmJiAhICgoZGVm
aW5lZCBZWU1BTExPQyB8fCBkZWZpbmVkIG1hbGxvYykgXAotCSAgICAgJiYgKGRlZmluZWQgWVlG
UkVFIHx8IGRlZmluZWQgZnJlZSkpKQotIyAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5H
RVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgaWZuZGVmIEVYSVRfU1VDQ0VTUwotIyAgICBk
ZWZpbmUgRVhJVF9TVUNDRVNTIDAKLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgIGlmbmRlZiBZWU1B
TExPQwotIyAgIGRlZmluZSBZWU1BTExPQyBtYWxsb2MKLSMgICBpZiAhIGRlZmluZWQgbWFsbG9j
ICYmICEgZGVmaW5lZCBFWElUX1NVQ0NFU1MgJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5l
ZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVk
IF9NU0NfVkVSKQotdm9pZCAqbWFsbG9jIChZWVNJWkVfVCk7IC8qIElORlJJTkdFUyBPTiBVU0VS
IE5BTUUgU1BBQ0UgKi8KLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgIGlmbmRlZiBZWUZSRUUKLSMg
ICBkZWZpbmUgWVlGUkVFIGZyZWUKLSMgICBpZiAhIGRlZmluZWQgZnJlZSAmJiAhIGRlZmluZWQg
RVhJVF9TVUNDRVNTICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNf
XyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXZv
aWQgZnJlZSAodm9pZCAqKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAg
IGVuZGlmCi0jICBlbmRpZgotIyBlbmRpZgotI2VuZGlmIC8qICEgZGVmaW5lZCB5eW92ZXJmbG93
IHx8IFlZRVJST1JfVkVSQk9TRSAqLwotCi0KLSNpZiAoISBkZWZpbmVkIHl5b3ZlcmZsb3cgXAot
ICAgICAmJiAoISBkZWZpbmVkIF9fY3BsdXNwbHVzIFwKLQkgfHwgKGRlZmluZWQgWVlMVFlQRV9J
U19UUklWSUFMICYmIFlZTFRZUEVfSVNfVFJJVklBTCBcCi0JICAgICAmJiBkZWZpbmVkIFlZU1RZ
UEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkKLQotLyogQSB0eXBlIHRoYXQg
aXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1lbWJlci4gICovCi11bmlvbiB5eWFs
bG9jCi17Ci0gIHl5dHlwZV9pbnQxNiB5eXNzX2FsbG9jOwotICBZWVNUWVBFIHl5dnNfYWxsb2M7
Ci0gIFlZTFRZUEUgeXlsc19hbGxvYzsKLX07Ci0KLS8qIFRoZSBzaXplIG9mIHRoZSBtYXhpbXVt
IGdhcCBiZXR3ZWVuIG9uZSBhbGlnbmVkIHN0YWNrIGFuZCB0aGUgbmV4dC4gICovCi0jIGRlZmlu
ZSBZWVNUQUNLX0dBUF9NQVhJTVVNIChzaXplb2YgKHVuaW9uIHl5YWxsb2MpIC0gMSkKLQotLyog
VGhlIHNpemUgb2YgYW4gYXJyYXkgbGFyZ2UgdG8gZW5vdWdoIHRvIGhvbGQgYWxsIHN0YWNrcywg
ZWFjaCB3aXRoCi0gICBOIGVsZW1lbnRzLiAgKi8KLSMgZGVmaW5lIFlZU1RBQ0tfQllURVMoTikg
XAotICAgICAoKE4pICogKHNpemVvZiAoeXl0eXBlX2ludDE2KSArIHNpemVvZiAoWVlTVFlQRSkg
KyBzaXplb2YgKFlZTFRZUEUpKSBcCi0gICAgICArIDIgKiBZWVNUQUNLX0dBUF9NQVhJTVVNKQot
Ci0jIGRlZmluZSBZWUNPUFlfTkVFREVEIDEKLQotLyogUmVsb2NhdGUgU1RBQ0sgZnJvbSBpdHMg
b2xkIGxvY2F0aW9uIHRvIHRoZSBuZXcgb25lLiAgVGhlCi0gICBsb2NhbCB2YXJpYWJsZXMgWVlT
SVpFIGFuZCBZWVNUQUNLU0laRSBnaXZlIHRoZSBvbGQgYW5kIG5ldyBudW1iZXIgb2YKLSAgIGVs
ZW1lbnRzIGluIHRoZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9jYXRpb24gb2Yg
dGhlCi0gICBzdGFjay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBwcm9wZXJseSBhbGlnbmVkIGxvY2F0
aW9uIGZvciB0aGUgbmV4dAotICAgc3RhY2suICAqLwotIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FU
RShTdGFja19hbGxvYywgU3RhY2spCQkJCVwKLSAgICBkbwkJCQkJCQkJCVwKLSAgICAgIHsJCQkJ
CQkJCQlcCi0JWVlTSVpFX1QgeXluZXdieXRlczsJCQkJCQlcCi0JWVlDT1BZICgmeXlwdHItPlN0
YWNrX2FsbG9jLCBTdGFjaywgeXlzaXplKTsJCQlcCi0JU3RhY2sgPSAmeXlwdHItPlN0YWNrX2Fs
bG9jOwkJCQkJXAotCXl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNrKSAr
IFlZU1RBQ0tfR0FQX01BWElNVU07IFwKLQl5eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9mICgq
eXlwdHIpOwkJCQlcCi0gICAgICB9CQkJCQkJCQkJXAotICAgIHdoaWxlIChZWUlEICgwKSkKLQot
I2VuZGlmCi0KLSNpZiBkZWZpbmVkIFlZQ09QWV9ORUVERUQgJiYgWVlDT1BZX05FRURFRAotLyog
Q29weSBDT1VOVCBvYmplY3RzIGZyb20gU1JDIHRvIERTVC4gIFRoZSBzb3VyY2UgYW5kIGRlc3Rp
bmF0aW9uIGRvCi0gICBub3Qgb3ZlcmxhcC4gICovCi0jIGlmbmRlZiBZWUNPUFkKLSMgIGlmIGRl
ZmluZWQgX19HTlVDX18gJiYgMSA8IF9fR05VQ19fCi0jICAgZGVmaW5lIFlZQ09QWShEc3QsIFNy
YywgQ291bnQpIFwKLSAgICAgIF9fYnVpbHRpbl9tZW1jcHkgKERzdCwgU3JjLCAoQ291bnQpICog
c2l6ZW9mICgqKFNyYykpKQotIyAgZWxzZQotIyAgIGRlZmluZSBZWUNPUFkoRHN0LCBTcmMsIENv
dW50KSAgICAgICAgICAgICAgXAotICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICAgIFlZU0laRV9UIHl5aTsgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICAgIGZvciAoeXlpID0gMDsgeXlpIDwgKENvdW50KTsgeXlpKyspICAgXAotICAg
ICAgICAgICAgKERzdClbeXlpXSA9IChTcmMpW3l5aV07ICAgICAgICAgICAgXAotICAgICAgICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgd2hpbGUgKFlZ
SUQgKDApKQotIyAgZW5kaWYKLSMgZW5kaWYKLSNlbmRpZiAvKiAhWVlDT1BZX05FRURFRCAqLwot
Ci0vKiBZWUZJTkFMIC0tIFN0YXRlIG51bWJlciBvZiB0aGUgdGVybWluYXRpb24gc3RhdGUuICAq
LwotI2RlZmluZSBZWUZJTkFMICA3NAotLyogWVlMQVNUIC0tIExhc3QgaW5kZXggaW4gWVlUQUJM
RS4gICovCi0jZGVmaW5lIFlZTEFTVCAgIDE0OTAKLQotLyogWVlOVE9LRU5TIC0tIE51bWJlciBv
ZiB0ZXJtaW5hbHMuICAqLwotI2RlZmluZSBZWU5UT0tFTlMgIDk1Ci0vKiBZWU5OVFMgLS0gTnVt
YmVyIG9mIG5vbnRlcm1pbmFscy4gICovCi0jZGVmaW5lIFlZTk5UUyAgODQKLS8qIFlZTlJVTEVT
IC0tIE51bWJlciBvZiBydWxlcy4gICovCi0jZGVmaW5lIFlZTlJVTEVTICAyMDIKLS8qIFlZTlJV
TEVTIC0tIE51bWJlciBvZiBzdGF0ZXMuICAqLwotI2RlZmluZSBZWU5TVEFURVMgIDMwNwotCi0v
KiBZWVRSQU5TTEFURShZWUxFWCkgLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5n
IHRvIFlZTEVYLiAgKi8KLSNkZWZpbmUgWVlVTkRFRlRPSyAgMgotI2RlZmluZSBZWU1BWFVUT0sg
ICAzNDkKLQotI2RlZmluZSBZWVRSQU5TTEFURShZWVgpCQkJCQkJXAotICAoKHVuc2lnbmVkIGlu
dCkgKFlZWCkgPD0gWVlNQVhVVE9LID8geXl0cmFuc2xhdGVbWVlYXSA6IFlZVU5ERUZUT0spCi0K
LS8qIFlZVFJBTlNMQVRFW1lZTEVYXSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRp
bmcgdG8gWVlMRVguICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRyYW5zbGF0ZVtd
ID0KLXsKLSAgICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwK
LSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAot
ICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0g
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsCi0gICAgICAg
NSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEz
LCAgICAxNCwKLSAgICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAg
IDIxLCAgICAyMiwgICAgMjMsICAgIDI0LAotICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgs
ICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsCi0gICAgICAzNSwgICAg
MzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0
NCwKLSAgICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAg
ICA1MiwgICAgNTMsICAgIDU0LAotICAgICAgNTUsICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5
LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsCi0gICAgICA2NSwgICAgNjYsICAg
IDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLCAgICA3NCwKLSAg
ICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgxLCAgICA4Miwg
ICAgODMsICAgIDg0LAotICAgICAgODUsICAgIDg2LCAgICA4NywgICAgODgsICAgIDg5LCAgICA5
MCwgICAgOTEsICAgIDkyLCAgICA5MywgICAgOTQKLX07Ci0KLSNpZiBZWURFQlVHCi0vKiBZWVBS
SFNbWVlOXSAtLSBJbmRleCBvZiB0aGUgZmlyc3QgUkhTIHN5bWJvbCBvZiBydWxlIG51bWJlciBZ
WU4gaW4KLSAgIFlZUkhTLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5cHJoc1td
ID0KLXsKLSAgICAgICAwLCAgICAgMCwgICAgIDMsICAgICA1LCAgICAgNywgICAgIDksICAgIDEx
LCAgICAxMywgICAgMTUsICAgIDE3LAotICAgICAgMjEsICAgIDIzLCAgICAyOCwgICAgMzAsICAg
IDM0LCAgICAzNywgICAgNDAsICAgIDQyLCAgICA0NCwgICAgNDYsCi0gICAgICA1MCwgICAgNTMs
ICAgIDU2LCAgICA1OSwgICAgNjEsICAgIDY0LCAgICA2OCwgICAgNzEsICAgIDczLCAgICA3NSwK
LSAgICAgIDc3LCAgICA4MCwgICAgODMsICAgIDg2LCAgICA4OCwgICAgOTAsICAgIDkyLCAgICA5
NCwgICAgOTgsICAgMTAyLAotICAgICAxMDQsICAgMTA4LCAgIDExMiwgICAxMTQsICAgMTE2LCAg
IDEyMCwgICAxMjQsICAgMTI4LCAgIDEzMiwgICAxMzQsCi0gICAgIDEzOCwgICAxNDIsICAgMTQ0
LCAgIDE0NiwgICAxNDgsICAgMTUwLCAgIDE1NCwgICAxNTYsICAgMTYwLCAgIDE2MiwKLSAgICAg
MTY2LCAgIDE2OCwgICAxNzQsICAgMTc2LCAgIDE4MCwgICAxODIsICAgMTg0LCAgIDE4NiwgICAx
ODgsICAgMTkwLAotICAgICAxOTIsICAgMTk2LCAgIDE5OCwgICAyMDEsICAgMjA0LCAgIDIwOSwg
ICAyMTIsICAgMjE0LCAgIDIxNiwgICAyMTksCi0gICAgIDIyMywgICAyMjcsICAgMjMwLCAgIDIz
NiwgICAyNDAsICAgMjQzLCAgIDI0NywgICAyNTAsICAgMjUxLCAgIDI1MywKLSAgICAgMjU1LCAg
IDI1NywgICAyNTksICAgMjYxLCAgIDI2NSwgICAyNzEsICAgMjc4LCAgIDI4NCwgICAyODYsICAg
Mjg5LAotICAgICAyOTQsICAgMzAwLCAgIDMwNSwgICAzMDgsICAgMzEwLCAgIDMxMywgICAzMTUs
ICAgMzE3LCAgIDMxOSwgICAzMjIsCi0gICAgIDMyNCwgICAzMjYsICAgMzI5LCAgIDMzMSwgICAz
MzMsICAgMzM1LCAgIDMzNywgICAzNDIsICAgMzQ0LCAgIDM0NiwKLSAgICAgMzQ4LCAgIDM1MCwg
ICAzNTIsICAgMzU0LCAgIDM1NiwgICAzNTgsICAgMzYwLCAgIDM2MiwgICAzNjQsICAgMzY2LAot
ICAgICAzNjgsICAgMzcwLCAgIDM3MiwgICAzNzQsICAgMzc2LCAgIDM3OCwgICAzODAsICAgMzgy
LCAgIDM4NCwgICAzODYsCi0gICAgIDM4NywgICAzOTQsICAgMzk1LCAgIDQwMSwgICA0MDMsICAg
NDA2LCAgIDQxMCwgICA0MTIsICAgNDE2LCAgIDQxOCwKLSAgICAgNDIzLCAgIDQyNSwgICA0Mjcs
ICAgNDI5LCAgIDQzMSwgICA0MzMsICAgNDM1LCAgIDQzNywgICA0MzksICAgNDQxLAotICAgICA0
NDQsICAgNDQ1LCAgIDQ0NiwgICA0NTIsICAgNDU0LCAgIDQ1NiwgICA0NTcsICAgNDYwLCAgIDQ2
MSwgICA0NjQsCi0gICAgIDQ2NywgICA0NzEsICAgNDczLCAgIDQ3NiwgICA0NzgsICAgNDgxLCAg
IDQ4NywgICA0OTEsICAgNDkzLCAgIDQ5NSwKLSAgICAgNTAwLCAgIDUwMSwgICA1MDgsICAgNTA5
LCAgIDUxOCwgICA1MTksICAgNTI3LCAgIDUyOSwgICA1MzEsICAgNTMzLAotICAgICA1MzQsICAg
NTM3LCAgIDU0MSwgICA1NDQsICAgNTQ3LCAgIDU1MCwgICA1NTQsICAgNTU3LCAgIDU1OSwgICA1
NjIsCi0gICAgIDU2NCwgICA1NjYsICAgNTY3Ci19OwotCi0vKiBZWVJIUyAtLSBBIGAtMSctc2Vw
YXJhdGVkIGxpc3Qgb2YgdGhlIHJ1bGVzJyBSSFMuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV9p
bnQxNiB5eXJoc1tdID0KLXsKLSAgICAgMTc1LCAgICAgMCwgICAgLTEsICAgIDQ1LCAgICAtMSwg
ICAgNDYsICAgIC0xLCAgICA0NSwgICAgLTEsICAgIDk3LAotICAgICAgLTEsICAgIDQ4LCAgICAt
MSwgICAgNDcsICAgIC0xLCAgICA0OSwgICAgLTEsICAgIDcxLCAgIDEyNCwgICAgNzIsCi0gICAg
ICAtMSwgICAgOTgsICAgIC0xLCAgICA5OSwgICAgNzMsICAgMTAwLCAgICA3NCwgICAgLTEsICAg
MTAxLCAgICAtMSwKLSAgICAgIDk5LCAgICA3NywgICAgOTYsICAgIC0xLCAgICA5OSwgICAgNTIs
ICAgIC0xLCAgICA5OSwgICAgNTMsICAgIC0xLAotICAgICAxMjQsICAgIC0xLCAgIDEwMiwgICAg
LTEsICAgMTAzLCAgICAtMSwgICAgOTksICAgIDc3LCAgIDEwMywgICAgLTEsCi0gICAgIDEwNSwg
ICAgNzIsICAgIC0xLCAgIDEwNCwgICAgNzIsICAgIC0xLCAgIDEwNiwgICAgMzksICAgIC0xLCAg
IDEwNiwKLSAgICAgIC0xLCAgIDEwNiwgICAxMjIsICAgIC0xLCAgIDEwNSwgICAgNzgsICAgMTIy
LCAgICAtMSwgICAxMDcsICAgIDcxLAotICAgICAgLTEsICAgMTQyLCAgICAtMSwgICAgNDUsICAg
IC0xLCAgICA5OSwgICAgLTEsICAgIDUyLCAgIDEwOCwgICAgLTEsCi0gICAgICA1MywgICAxMDgs
ICAgIC0xLCAgIDEwOSwgICAxMDgsICAgIC0xLCAgICA4NSwgICAgLTEsICAgIDgzLCAgICAtMSwK
LSAgICAgIDgyLCAgICAtMSwgICAxMDgsICAgIC0xLCAgIDExMCwgICAgODYsICAgMTA4LCAgICAt
MSwgICAxMTAsICAgIDg3LAotICAgICAxMDgsICAgIC0xLCAgIDExMCwgICAgLTEsICAgMTExLCAg
ICA4NSwgICAxMTAsICAgIC0xLCAgIDExMSwgICAgODMsCi0gICAgIDExMCwgICAgLTEsICAgMTEx
LCAgICAtMSwgICAxMTIsICAgIC0xLCAgIDExMywgICAgODksICAgMTEyLCAgICAtMSwKLSAgICAg
MTEzLCAgICA5MCwgICAxMTIsICAgIC0xLCAgIDExMywgICAgNTQsICAgMTEyLCAgICAtMSwgICAx
MTMsICAgIDU1LAotICAgICAxMTIsICAgIC0xLCAgIDExMywgICAgLTEsICAgMTE0LCAgICA1Niwg
ICAxMTMsICAgIC0xLCAgIDExNCwgICAgNTcsCi0gICAgIDExMywgICAgLTEsICAgMTE0LCAgICAt
MSwgICAxMTUsICAgIC0xLCAgIDExNiwgICAgLTEsICAgMTE3LCAgICAtMSwKLSAgICAgMTE4LCAg
ICA1OCwgICAxMTcsICAgIC0xLCAgIDExOCwgICAgLTEsICAgMTE5LCAgICA2MCwgICAxMTgsICAg
IC0xLAotICAgICAxMTksICAgIC0xLCAgIDEyMCwgICAgNTksICAgMTE5LCAgICAtMSwgICAxMjAs
ICAgIC0xLCAgIDEyMCwgICAgOTQsCi0gICAgIDEyNCwgICAgNzksICAgMTIyLCAgICAtMSwgICAx
MjEsICAgIC0xLCAgIDEwOCwgICAxMjMsICAgMTIyLCAgICAtMSwKLSAgICAgIDgwLCAgICAtMSwg
ICAgNjEsICAgIC0xLCAgICA2MiwgICAgLTEsICAgIDYzLCAgICAtMSwgICAgNzAsICAgIC0xLAot
ICAgICAxMjIsICAgIC0xLCAgIDEyNCwgICAgNzgsICAgMTIyLCAgICAtMSwgICAxMjEsICAgIC0x
LCAgIDEyNywgICAgODEsCi0gICAgICAtMSwgICAxMzUsICAgIDgxLCAgICAtMSwgICAgIDcsICAg
MTQwLCAgIDE0MSwgICAgODEsICAgIC0xLCAgIDEyOCwKLSAgICAgIDcyLCAgICAtMSwgICAxMzAs
ICAgIC0xLCAgIDEyOSwgICAgLTEsICAgMTMwLCAgIDEzMiwgICAgLTEsICAgMTI5LAotICAgICAg
NzgsICAgMTMyLCAgICAtMSwgICAxMzcsICAgIDQ1LCAgICA3MSwgICAgLTEsICAgMTM5LCAgICA5
NiwgICAgLTEsCi0gICAgIDEzOSwgICAgOTYsICAgIDczLCAgIDEyNSwgICAgNzQsICAgIC0xLCAg
IDEzOCwgICAxMzMsICAgMTMxLCAgICAtMSwKLSAgICAgMTMzLCAgIDEzMSwgICAgLTEsICAgMTM4
LCAgIDEzMywgICAxMzQsICAgIC0xLCAgIDEzMywgICAxMzQsICAgIC0xLAotICAgICAgLTEsICAg
IDMzLCAgICAtMSwgICAgMzQsICAgIC0xLCAgICAzNSwgICAgLTEsICAgMTM5LCAgICAtMSwgICAx
MzYsCi0gICAgICAtMSwgICAxMzUsICAgIDc4LCAgICA5NiwgICAgLTEsICAgMTM1LCAgICA3OCwg
ICAgOTYsICAgIDczLCAgICA3NCwKLSAgICAgIC0xLCAgIDEzNSwgICAgNzgsICAgIDk2LCAgICA3
MywgICAxMjUsICAgIDc0LCAgICAtMSwgICAxMzUsICAgIDc4LAotICAgICAgOTYsICAgIDgwLCAg
IDE1MCwgICAgLTEsICAgMTM3LCAgICAtMSwgICAxMzcsICAgIDk2LCAgICAtMSwgICAxMzcsCi0g
ICAgICA5NiwgICAgNzMsICAgIDc0LCAgICAtMSwgICAxMzcsICAgIDk2LCAgICA3MywgICAxMjUs
ICAgIDc0LCAgICAtMSwKLSAgICAgMTM3LCAgICA5NiwgICAgODAsICAgMTUwLCAgICAtMSwgICAg
IDMsICAgIDQ1LCAgICAtMSwgICAxMzksICAgIC0xLAotICAgICAxMzgsICAgMTM5LCAgICAtMSwg
ICAgIDksICAgIC0xLCAgICAgOCwgICAgLTEsICAgIDM3LCAgICAtMSwgICAgIDMsCi0gICAgICAz
NywgICAgLTEsICAgIDM2LCAgICAtMSwgICAxNDEsICAgIC0xLCAgIDE0MCwgICAxNDEsICAgIC0x
LCAgICAgNCwKLSAgICAgIC0xLCAgICAgNSwgICAgLTEsICAgICA2LCAgICAtMSwgICAxNDIsICAg
IC0xLCAgIDE0MiwgICAgNzMsICAgMTI1LAotICAgICAgNzQsICAgIC0xLCAgICAzOSwgICAgLTEs
ICAgIDExLCAgICAtMSwgICAgMTIsICAgIC0xLCAgICAxMCwgICAgLTEsCi0gICAgICAyNywgICAg
LTEsICAgIDI4LCAgICAtMSwgICAgMjksICAgIC0xLCAgICAyMSwgICAgLTEsICAgIDIyLCAgICAt
MSwKLSAgICAgIDIzLCAgICAtMSwgICAgMjQsICAgIC0xLCAgICAyNSwgICAgLTEsICAgIDI2LCAg
ICAtMSwgICAgMzAsICAgIC0xLAotICAgICAgMzEsICAgIC0xLCAgICAzMiwgICAgLTEsICAgIDQx
LCAgICAtMSwgICAgNDIsICAgIC0xLCAgICA0MywgICAgLTEsCi0gICAgICA0NCwgICAgLTEsICAg
MTQzLCAgICAtMSwgICAgNDYsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDk2LCAgICA3NSwKLSAg
ICAgMTQ0LCAgIDE0NiwgICAgNzYsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDc1LCAgIDE0NSwg
ICAxNDYsICAgIDc2LAotICAgICAgLTEsICAgMTQ3LCAgICAtMSwgICAxNDYsICAgMTQ3LCAgICAt
MSwgICAxMzksICAgMTQ4LCAgICA4MSwgICAgLTEsCi0gICAgIDE0OSwgICAgLTEsICAgMTQ4LCAg
ICA3OCwgICAxNDksICAgIC0xLCAgICA5NiwgICAgLTEsICAgIDk2LCAgICA3MywKLSAgICAgMTI1
LCAgICA3NCwgICAgLTEsICAgMTIyLCAgICAtMSwgICAxMjYsICAgIC0xLCAgIDE1NCwgICAgLTEs
ICAgMTUzLAotICAgICAgLTEsICAgMTUxLCAgICAtMSwgICAxNjMsICAgIC0xLCAgIDE2NCwgICAg
LTEsICAgMTY3LCAgICAtMSwgICAxNzQsCi0gICAgICAtMSwgICAgNzUsICAgIDc2LCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICA3NSwgICAxNTUsICAgMTYyLCAgIDE1NiwKLSAgICAgIDc2LCAgICAt
MSwgICAxNjEsICAgIC0xLCAgIDE1MywgICAgLTEsICAgIC0xLCAgIDE1OSwgICAxNjEsICAgIC0x
LAotICAgICAgLTEsICAgMTYwLCAgIDE1MywgICAgLTEsICAgIDc1LCAgICA3NiwgICAgLTEsICAg
IDc1LCAgIDE2MiwgICAgNzYsCi0gICAgICAtMSwgICAxNTIsICAgIC0xLCAgIDE2MiwgICAxNTIs
ICAgIC0xLCAgICA4MSwgICAgLTEsICAgMTI0LCAgICA4MSwKLSAgICAgIC0xLCAgICAxOCwgICAg
NzEsICAgMTI0LCAgICA3MiwgICAxNjUsICAgIC0xLCAgIDE1OCwgICAgMTYsICAgMTU4LAotICAg
ICAgLTEsICAgMTU4LCAgICAtMSwgICAxMjQsICAgIC0xLCAgIDEzNywgICAgOTYsICAgIDgwLCAg
IDE1MCwgICAgLTEsCi0gICAgICAtMSwgICAgNDAsICAgIDcxLCAgIDE2OCwgICAxNjYsICAgIDcy
LCAgIDE1NywgICAgLTEsICAgIC0xLCAgICAxNSwKLSAgICAgMTY5LCAgIDE1OCwgICAgNDAsICAg
IDcxLCAgIDEyNCwgICAgNzIsICAgIDgxLCAgICAtMSwgICAgLTEsICAgIDE3LAotICAgICAgNzEs
ICAgMTcwLCAgIDE3MSwgICAxNzMsICAgIDcyLCAgIDE1NywgICAgLTEsICAgMTYzLCAgICAtMSwg
ICAxNTEsCi0gICAgICAtMSwgICAxNjYsICAgIC0xLCAgICAtMSwgICAxNzIsICAgIDgxLCAgICAt
MSwgICAxNzIsICAgIDgxLCAgIDEyNCwKLSAgICAgIC0xLCAgICAxNCwgICAgODEsICAgIC0xLCAg
ICAxMywgICAgODEsICAgIC0xLCAgICAyMCwgICAgODEsICAgIC0xLAotICAgICAgMjAsICAgMTI0
LCAgICA4MSwgICAgLTEsICAgIDE5LCAgICA4MSwgICAgLTEsICAgMTc2LCAgICAtMSwgICAxNzUs
Ci0gICAgIDE3NiwgICAgLTEsICAgMTc3LCAgICAtMSwgICAxMjYsICAgIC0xLCAgICAtMSwgICAx
MjcsICAgMTc4LCAgIDE2MSwKLSAgICAgIC0xCi19OwotCi0vKiBZWVJMSU5FW1lZTl0gLS0gc291
cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KLXN0YXRpYyBj
b25zdCB5eXR5cGVfdWludDE2IHl5cmxpbmVbXSA9Ci17Ci0gICAgICAgMCwgICAxODAsICAgMTgw
LCAgIDE4MSwgICAxODQsICAgMjI3LCAgIDIzMCwgICAyNDMsICAgMjQ4LCAgIDI1MywKLSAgICAg
MjU5LCAgIDI2MiwgICAyNjUsICAgMjY4LCAgIDM2MywgICAzNzMsICAgMzg2LCAgIDM5NCwgICA0
OTQsICAgNDk3LAotICAgICA1MDUsICAgNTA4LCAgIDUxNCwgICA1MTgsICAgNTI1LCAgIDUzMSwg
ICA1NDAsICAgNTQ4LCAgIDYwMywgICA2MTMsCi0gICAgIDYxNiwgICA2MjYsICAgNjM2LCAgIDY1
NywgICA2NTgsICAgNjU5LCAgIDY2NCwgICA2NjUsICAgNjczLCAgIDY4NCwKLSAgICAgNjg1LCAg
IDY5MywgICA3MDQsICAgNzA4LCAgIDcwOSwgICA3MTksICAgNzI5LCAgIDczOSwgICA3NTIsICAg
NzUzLAotICAgICA3NjMsICAgNzc2LCAgIDc4MCwgICA3ODQsICAgNzg4LCAgIDc4OSwgICA4MDIs
ICAgODAzLCAgIDgxNiwgICA4MTcsCi0gICAgIDgzMCwgICA4MzEsICAgODQ4LCAgIDg0OSwgICA4
NjIsICAgODYzLCAgIDg2NCwgICA4NjUsICAgODY2LCAgIDg3MCwKLSAgICAgODczLCAgIDg4NCwg
ICA4OTIsICAgOTE5LCAgIDkyNCwgICA5MzgsICAgOTkzLCAgIDk5NiwgIDEwMDMsICAxMDExLAot
ICAgIDEwMzIsICAxMDUzLCAgMTA2MywgIDEwOTEsICAxMDk2LCAgMTEwNiwgIDExMTEsICAxMTIx
LCAgMTEyNCwgIDExMjcsCi0gICAgMTEzMCwgIDExMzYsICAxMTQzLCAgMTE0NiwgIDExNjgsICAx
MTg2LCAgMTIxMCwgIDEyMzMsICAxMjM3LCAgMTI1NSwKLSAgICAxMjYzLCAgMTI5NSwgIDEzMTUs
ICAxMzM2LCAgMTM0NSwgIDEzNjgsICAxMzcxLCAgMTM3NywgIDEzODUsICAxMzkzLAotICAgIDE0
MDEsICAxNDExLCAgMTQxOCwgIDE0MjEsICAxNDI0LCAgMTQzMCwgIDE0MzMsICAxNDQ4LCAgMTQ1
MiwgIDE0NTYsCi0gICAgMTQ2MCwgIDE0NjQsICAxNDY5LCAgMTQ3NCwgIDE0NzksICAxNDg0LCAg
MTQ4OSwgIDE0OTQsICAxNDk5LCAgMTUwNCwKLSAgICAxNTA5LCAgMTUxNCwgIDE1MTksICAxNTI0
LCAgMTUyOCwgIDE1MzIsICAxNTQwLCAgMTU0OCwgIDE1NTIsICAxNTY1LAotICAgIDE1NjUsICAx
NTc5LCAgMTU3OSwgIDE1ODgsICAxNTkxLCAgMTYwNywgIDE2NDAsICAxNjQ0LCAgMTY1MCwgIDE2
NTcsCi0gICAgMTY3MiwgIDE2NzYsICAxNjgwLCAgMTY4MSwgIDE2ODcsICAxNjg4LCAgMTY4OSwg
IDE2OTAsICAxNjkxLCAgMTY5NSwKLSAgICAxNjk2LCAgMTY5NiwgIDE2OTYsICAxNzA2LCAgMTcw
NywgIDE3MTEsICAxNzExLCAgMTcxMiwgIDE3MTIsICAxNzE3LAotICAgIDE3MjAsICAxNzMwLCAg
MTczMywgIDE3MzksICAxNzQwLCAgMTc0NCwgIDE3NTIsICAxNzU2LCAgMTc2NiwgIDE3NzEsCi0g
ICAgMTc4OCwgIDE3ODgsICAxNzkzLCAgMTc5MywgIDE4MDAsICAxODAwLCAgMTgwOCwgIDE4MTEs
ICAxODE3LCAgMTgyMCwKLSAgICAxODI2LCAgMTgzMCwgIDE4MzcsICAxODQ0LCAgMTg1MSwgIDE4
NTgsICAxODY5LCAgMTg3OCwgIDE4ODIsICAxODg5LAotICAgIDE4OTIsICAxODk4LCAgMTg5OAot
fTsKLSNlbmRpZgotCi0jaWYgWVlERUJVRyB8fCBZWUVSUk9SX1ZFUkJPU0UgfHwgMAotLyogWVlU
TkFNRVtTWU1CT0wtTlVNXSAtLSBTdHJpbmcgbmFtZSBvZiB0aGUgc3ltYm9sIFNZTUJPTC1OVU0u
Ci0gICBGaXJzdCwgdGhlIHRlcm1pbmFscywgdGhlbiwgc3RhcnRpbmcgYXQgWVlOVE9LRU5TLCBu
b250ZXJtaW5hbHMuICAqLwotc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHl5dG5hbWVbXSA9Ci17
Ci0gICIkZW5kIiwgImVycm9yIiwgIiR1bmRlZmluZWQiLCAiSU5WQVJJQU5UIiwgIkhJR0hfUFJF
Q0lTSU9OIiwKLSAgIk1FRElVTV9QUkVDSVNJT04iLCAiTE9XX1BSRUNJU0lPTiIsICJQUkVDSVNJ
T04iLCAiQVRUUklCVVRFIiwKLSAgIkNPTlNUX1FVQUwiLCAiQk9PTF9UWVBFIiwgIkZMT0FUX1RZ
UEUiLCAiSU5UX1RZUEUiLCAiQlJFQUsiLCAiQ09OVElOVUUiLAotICAiRE8iLCAiRUxTRSIsICJG
T1IiLCAiSUYiLCAiRElTQ0FSRCIsICJSRVRVUk4iLCAiQlZFQzIiLCAiQlZFQzMiLAotICAiQlZF
QzQiLCAiSVZFQzIiLCAiSVZFQzMiLCAiSVZFQzQiLCAiVkVDMiIsICJWRUMzIiwgIlZFQzQiLCAi
TUFUUklYMiIsCi0gICJNQVRSSVgzIiwgIk1BVFJJWDQiLCAiSU5fUVVBTCIsICJPVVRfUVVBTCIs
ICJJTk9VVF9RVUFMIiwgIlVOSUZPUk0iLAotICAiVkFSWUlORyIsICJTVFJVQ1QiLCAiVk9JRF9U
WVBFIiwgIldISUxFIiwgIlNBTVBMRVIyRCIsICJTQU1QTEVSQ1VCRSIsCi0gICJTQU1QTEVSX0VY
VEVSTkFMX09FUyIsICJTQU1QTEVSMkRSRUNUIiwgIklERU5USUZJRVIiLCAiVFlQRV9OQU1FIiwK
LSAgIkZMT0FUQ09OU1RBTlQiLCAiSU5UQ09OU1RBTlQiLCAiQk9PTENPTlNUQU5UIiwgIkxFRlRf
T1AiLCAiUklHSFRfT1AiLAotICAiSU5DX09QIiwgIkRFQ19PUCIsICJMRV9PUCIsICJHRV9PUCIs
ICJFUV9PUCIsICJORV9PUCIsICJBTkRfT1AiLAotICAiT1JfT1AiLCAiWE9SX09QIiwgIk1VTF9B
U1NJR04iLCAiRElWX0FTU0lHTiIsICJBRERfQVNTSUdOIiwKLSAgIk1PRF9BU1NJR04iLCAiTEVG
VF9BU1NJR04iLCAiUklHSFRfQVNTSUdOIiwgIkFORF9BU1NJR04iLCAiWE9SX0FTU0lHTiIsCi0g
ICJPUl9BU1NJR04iLCAiU1VCX0FTU0lHTiIsICJMRUZUX1BBUkVOIiwgIlJJR0hUX1BBUkVOIiwg
IkxFRlRfQlJBQ0tFVCIsCi0gICJSSUdIVF9CUkFDS0VUIiwgIkxFRlRfQlJBQ0UiLCAiUklHSFRf
QlJBQ0UiLCAiRE9UIiwgIkNPTU1BIiwgIkNPTE9OIiwKLSAgIkVRVUFMIiwgIlNFTUlDT0xPTiIs
ICJCQU5HIiwgIkRBU0giLCAiVElMREUiLCAiUExVUyIsICJTVEFSIiwgIlNMQVNIIiwKLSAgIlBF
UkNFTlQiLCAiTEVGVF9BTkdMRSIsICJSSUdIVF9BTkdMRSIsICJWRVJUSUNBTF9CQVIiLCAiQ0FS
RVQiLAotICAiQU1QRVJTQU5EIiwgIlFVRVNUSU9OIiwgIiRhY2NlcHQiLCAiaWRlbnRpZmllciIs
ICJ2YXJpYWJsZV9pZGVudGlmaWVyIiwKLSAgInByaW1hcnlfZXhwcmVzc2lvbiIsICJwb3N0Zml4
X2V4cHJlc3Npb24iLCAiaW50ZWdlcl9leHByZXNzaW9uIiwKLSAgImZ1bmN0aW9uX2NhbGwiLCAi
ZnVuY3Rpb25fY2FsbF9vcl9tZXRob2QiLCAiZnVuY3Rpb25fY2FsbF9nZW5lcmljIiwKLSAgImZ1
bmN0aW9uX2NhbGxfaGVhZGVyX25vX3BhcmFtZXRlcnMiLAotICAiZnVuY3Rpb25fY2FsbF9oZWFk
ZXJfd2l0aF9wYXJhbWV0ZXJzIiwgImZ1bmN0aW9uX2NhbGxfaGVhZGVyIiwKLSAgImZ1bmN0aW9u
X2lkZW50aWZpZXIiLCAidW5hcnlfZXhwcmVzc2lvbiIsICJ1bmFyeV9vcGVyYXRvciIsCi0gICJt
dWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uIiwgImFkZGl0aXZlX2V4cHJlc3Npb24iLCAic2hpZnRf
ZXhwcmVzc2lvbiIsCi0gICJyZWxhdGlvbmFsX2V4cHJlc3Npb24iLCAiZXF1YWxpdHlfZXhwcmVz
c2lvbiIsICJhbmRfZXhwcmVzc2lvbiIsCi0gICJleGNsdXNpdmVfb3JfZXhwcmVzc2lvbiIsICJp
bmNsdXNpdmVfb3JfZXhwcmVzc2lvbiIsCi0gICJsb2dpY2FsX2FuZF9leHByZXNzaW9uIiwgImxv
Z2ljYWxfeG9yX2V4cHJlc3Npb24iLAotICAibG9naWNhbF9vcl9leHByZXNzaW9uIiwgImNvbmRp
dGlvbmFsX2V4cHJlc3Npb24iLAotICAiYXNzaWdubWVudF9leHByZXNzaW9uIiwgImFzc2lnbm1l
bnRfb3BlcmF0b3IiLCAiZXhwcmVzc2lvbiIsCi0gICJjb25zdGFudF9leHByZXNzaW9uIiwgImRl
Y2xhcmF0aW9uIiwgImZ1bmN0aW9uX3Byb3RvdHlwZSIsCi0gICJmdW5jdGlvbl9kZWNsYXJhdG9y
IiwgImZ1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMiLAotICAiZnVuY3Rpb25faGVhZGVy
IiwgInBhcmFtZXRlcl9kZWNsYXJhdG9yIiwgInBhcmFtZXRlcl9kZWNsYXJhdGlvbiIsCi0gICJw
YXJhbWV0ZXJfcXVhbGlmaWVyIiwgInBhcmFtZXRlcl90eXBlX3NwZWNpZmllciIsCi0gICJpbml0
X2RlY2xhcmF0b3JfbGlzdCIsICJzaW5nbGVfZGVjbGFyYXRpb24iLCAiZnVsbHlfc3BlY2lmaWVk
X3R5cGUiLAotICAidHlwZV9xdWFsaWZpZXIiLCAidHlwZV9zcGVjaWZpZXIiLCAicHJlY2lzaW9u
X3F1YWxpZmllciIsCi0gICJ0eXBlX3NwZWNpZmllcl9ub19wcmVjIiwgInR5cGVfc3BlY2lmaWVy
X25vbmFycmF5IiwgInN0cnVjdF9zcGVjaWZpZXIiLAotICAiJEAxIiwgIiRAMiIsICJzdHJ1Y3Rf
ZGVjbGFyYXRpb25fbGlzdCIsICJzdHJ1Y3RfZGVjbGFyYXRpb24iLAotICAic3RydWN0X2RlY2xh
cmF0b3JfbGlzdCIsICJzdHJ1Y3RfZGVjbGFyYXRvciIsICJpbml0aWFsaXplciIsCi0gICJkZWNs
YXJhdGlvbl9zdGF0ZW1lbnQiLCAic3RhdGVtZW50IiwgInNpbXBsZV9zdGF0ZW1lbnQiLAotICAi
Y29tcG91bmRfc3RhdGVtZW50IiwgIiRAMyIsICIkQDQiLCAic3RhdGVtZW50X25vX25ld19zY29w
ZSIsCi0gICJzdGF0ZW1lbnRfd2l0aF9zY29wZSIsICIkQDUiLCAiJEA2IiwgImNvbXBvdW5kX3N0
YXRlbWVudF9ub19uZXdfc2NvcGUiLAotICAic3RhdGVtZW50X2xpc3QiLCAiZXhwcmVzc2lvbl9z
dGF0ZW1lbnQiLCAic2VsZWN0aW9uX3N0YXRlbWVudCIsCi0gICJzZWxlY3Rpb25fcmVzdF9zdGF0
ZW1lbnQiLCAiY29uZGl0aW9uIiwgIml0ZXJhdGlvbl9zdGF0ZW1lbnQiLCAiJEA3IiwKLSAgIiRA
OCIsICIkQDkiLCAiZm9yX2luaXRfc3RhdGVtZW50IiwgImNvbmRpdGlvbm9wdCIsICJmb3JfcmVz
dF9zdGF0ZW1lbnQiLAotICAianVtcF9zdGF0ZW1lbnQiLCAidHJhbnNsYXRpb25fdW5pdCIsICJl
eHRlcm5hbF9kZWNsYXJhdGlvbiIsCi0gICJmdW5jdGlvbl9kZWZpbml0aW9uIiwgIiRAMTAiLCBZ
WV9OVUxMCi19OwotI2VuZGlmCi0KLSMgaWZkZWYgWVlQUklOVAotLyogWVlUT0tOVU1bWVlMRVgt
TlVNXSAtLSBJbnRlcm5hbCB0b2tlbiBudW1iZXIgY29ycmVzcG9uZGluZyB0bwotICAgdG9rZW4g
WVlMRVgtTlVNLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5dG9rbnVtW10gPQot
ewotICAgICAgIDAsICAgMjU2LCAgIDI1NywgICAyNTgsICAgMjU5LCAgIDI2MCwgICAyNjEsICAg
MjYyLCAgIDI2MywgICAyNjQsCi0gICAgIDI2NSwgICAyNjYsICAgMjY3LCAgIDI2OCwgICAyNjks
ICAgMjcwLCAgIDI3MSwgICAyNzIsICAgMjczLCAgIDI3NCwKLSAgICAgMjc1LCAgIDI3NiwgICAy
NzcsICAgMjc4LCAgIDI3OSwgICAyODAsICAgMjgxLCAgIDI4MiwgICAyODMsICAgMjg0LAotICAg
ICAyODUsICAgMjg2LCAgIDI4NywgICAyODgsICAgMjg5LCAgIDI5MCwgICAyOTEsICAgMjkyLCAg
IDI5MywgICAyOTQsCi0gICAgIDI5NSwgICAyOTYsICAgMjk3LCAgIDI5OCwgICAyOTksICAgMzAw
LCAgIDMwMSwgICAzMDIsICAgMzAzLCAgIDMwNCwKLSAgICAgMzA1LCAgIDMwNiwgICAzMDcsICAg
MzA4LCAgIDMwOSwgICAzMTAsICAgMzExLCAgIDMxMiwgICAzMTMsICAgMzE0LAotICAgICAzMTUs
ICAgMzE2LCAgIDMxNywgICAzMTgsICAgMzE5LCAgIDMyMCwgICAzMjEsICAgMzIyLCAgIDMyMywg
ICAzMjQsCi0gICAgIDMyNSwgICAzMjYsICAgMzI3LCAgIDMyOCwgICAzMjksICAgMzMwLCAgIDMz
MSwgICAzMzIsICAgMzMzLCAgIDMzNCwKLSAgICAgMzM1LCAgIDMzNiwgICAzMzcsICAgMzM4LCAg
IDMzOSwgICAzNDAsICAgMzQxLCAgIDM0MiwgICAzNDMsICAgMzQ0LAotICAgICAzNDUsICAgMzQ2
LCAgIDM0NywgICAzNDgsICAgMzQ5Ci19OwotIyBlbmRpZgotCi0vKiBZWVIxW1lZTl0gLS0gU3lt
Ym9sIG51bWJlciBvZiBzeW1ib2wgdGhhdCBydWxlIFlZTiBkZXJpdmVzLiAgKi8KLXN0YXRpYyBj
b25zdCB5eXR5cGVfdWludDggeXlyMVtdID0KLXsKLSAgICAgICAwLCAgICA5NSwgICAgOTYsICAg
IDk2LCAgICA5NywgICAgOTgsICAgIDk4LCAgICA5OCwgICAgOTgsICAgIDk4LAotICAgICAgOTks
ICAgIDk5LCAgICA5OSwgICAgOTksICAgIDk5LCAgICA5OSwgICAxMDAsICAgMTAxLCAgIDEwMiwg
ICAxMDIsCi0gICAgIDEwMywgICAxMDMsICAgMTA0LCAgIDEwNCwgICAxMDUsICAgMTA1LCAgIDEw
NiwgICAxMDcsICAgMTA3LCAgIDEwOCwKLSAgICAgMTA4LCAgIDEwOCwgICAxMDgsICAgMTA5LCAg
IDEwOSwgICAxMDksICAgMTEwLCAgIDExMCwgICAxMTAsICAgMTExLAotICAgICAxMTEsICAgMTEx
LCAgIDExMiwgICAxMTMsICAgMTEzLCAgIDExMywgICAxMTMsICAgMTEzLCAgIDExNCwgICAxMTQs
Ci0gICAgIDExNCwgICAxMTUsICAgMTE2LCAgIDExNywgICAxMTgsICAgMTE4LCAgIDExOSwgICAx
MTksICAgMTIwLCAgIDEyMCwKLSAgICAgMTIxLCAgIDEyMSwgICAxMjIsICAgMTIyLCAgIDEyMywg
ICAxMjMsICAgMTIzLCAgIDEyMywgICAxMjMsICAgMTI0LAotICAgICAxMjQsICAgMTI1LCAgIDEy
NiwgICAxMjYsICAgMTI2LCAgIDEyNywgICAxMjgsICAgMTI4LCAgIDEyOSwgICAxMjksCi0gICAg
IDEzMCwgICAxMzEsICAgMTMxLCAgIDEzMiwgICAxMzIsICAgMTMyLCAgIDEzMiwgICAxMzMsICAg
MTMzLCAgIDEzMywKLSAgICAgMTMzLCAgIDEzNCwgICAxMzUsICAgMTM1LCAgIDEzNSwgICAxMzUs
ICAgMTM1LCAgIDEzNiwgICAxMzYsICAgMTM2LAotICAgICAxMzYsICAgMTM2LCAgIDEzNiwgICAx
MzcsICAgMTM3LCAgIDEzOCwgICAxMzgsICAgMTM4LCAgIDEzOCwgICAxMzgsCi0gICAgIDEzOSwg
ICAxMzksICAgMTQwLCAgIDE0MCwgICAxNDAsICAgMTQxLCAgIDE0MSwgICAxNDIsICAgMTQyLCAg
IDE0MiwKLSAgICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQy
LCAgIDE0MiwgICAxNDIsICAgMTQyLAotICAgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAg
MTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDQsCi0gICAgIDE0MywgICAxNDUs
ICAgMTQzLCAgIDE0NiwgICAxNDYsICAgMTQ3LCAgIDE0OCwgICAxNDgsICAgMTQ5LCAgIDE0OSwK
LSAgICAgMTUwLCAgIDE1MSwgICAxNTIsICAgMTUyLCAgIDE1MywgICAxNTMsICAgMTUzLCAgIDE1
MywgICAxNTMsICAgMTU0LAotICAgICAxNTUsICAgMTU2LCAgIDE1NCwgICAxNTcsICAgMTU3LCAg
IDE1OSwgICAxNTgsICAgMTYwLCAgIDE1OCwgICAxNjEsCi0gICAgIDE2MSwgICAxNjIsICAgMTYy
LCAgIDE2MywgICAxNjMsICAgMTY0LCAgIDE2NSwgICAxNjUsICAgMTY2LCAgIDE2NiwKLSAgICAg
MTY4LCAgIDE2NywgICAxNjksICAgMTY3LCAgIDE3MCwgICAxNjcsICAgMTcxLCAgIDE3MSwgICAx
NzIsICAgMTcyLAotICAgICAxNzMsICAgMTczLCAgIDE3NCwgICAxNzQsICAgMTc0LCAgIDE3NCwg
ICAxNzQsICAgMTc1LCAgIDE3NSwgICAxNzYsCi0gICAgIDE3NiwgICAxNzgsICAgMTc3Ci19Owot
Ci0vKiBZWVIyW1lZTl0gLS0gTnVtYmVyIG9mIHN5bWJvbHMgY29tcG9zaW5nIHJpZ2h0IGhhbmQg
c2lkZSBvZiBydWxlIFlZTi4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjJbXSA9
Ci17Ci0gICAgICAgMCwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMywKLSAgICAgICAxLCAgICAgNCwgICAgIDEsICAgICAzLCAgICAg
MiwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLAotICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsCi0g
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMs
ICAgICAzLCAgICAgMSwKLSAgICAgICAzLCAgICAgMywgICAgIDEsICAgICAxLCAgICAgMywgICAg
IDMsICAgICAzLCAgICAgMywgICAgIDEsICAgICAzLAotICAgICAgIDMsICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMywgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDMsCi0gICAgICAg
MSwgICAgIDUsICAgICAxLCAgICAgMywgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwKLSAgICAgICAzLCAgICAgMSwgICAgIDIsICAgICAyLCAgICAgNCwgICAgIDIsICAg
ICAxLCAgICAgMSwgICAgIDIsICAgICAzLAotICAgICAgIDMsICAgICAyLCAgICAgNSwgICAgIDMs
ICAgICAyLCAgICAgMywgICAgIDIsICAgICAwLCAgICAgMSwgICAgIDEsCi0gICAgICAgMSwgICAg
IDEsICAgICAxLCAgICAgMywgICAgIDUsICAgICA2LCAgICAgNSwgICAgIDEsICAgICAyLCAgICAg
NCwKLSAgICAgICA1LCAgICAgNCwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDEsICAgICAxLCAg
ICAgMSwgICAgIDIsICAgICAxLAotICAgICAgIDEsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDQsICAgICAxLCAgICAgMSwgICAgIDEsCi0gICAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKLSAg
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAwLAotICAgICAgIDYsICAgICAwLCAgICAgNSwgICAgIDEsICAgICAyLCAgICAg
MywgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDQsCi0gICAgICAgMSwgICAgIDEsICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMiwKLSAgICAgICAw
LCAgICAgMCwgICAgIDUsICAgICAxLCAgICAgMSwgICAgIDAsICAgICAyLCAgICAgMCwgICAgIDIs
ICAgICAyLAotICAgICAgIDMsICAgICAxLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgNSwgICAg
IDMsICAgICAxLCAgICAgMSwgICAgIDQsCi0gICAgICAgMCwgICAgIDYsICAgICAwLCAgICAgOCwg
ICAgIDAsICAgICA3LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMCwKLSAgICAgICAyLCAgICAg
MywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAx
LAotICAgICAgIDEsICAgICAwLCAgICAgMwotfTsKLQotLyogWVlERUZBQ1RbU1RBVEUtTkFNRV0g
LS0gRGVmYXVsdCByZWR1Y3Rpb24gbnVtYmVyIGluIHN0YXRlIFNUQVRFLU5VTS4KLSAgIFBlcmZv
cm1lZCB3aGVuIFlZVEFCTEUgZG9lc24ndCBzcGVjaWZ5IHNvbWV0aGluZyBlbHNlIHRvIGRvLiAg
WmVybwotICAgbWVhbnMgdGhlIGRlZmF1bHQgaXMgYW4gZXJyb3IuICAqLwotc3RhdGljIGNvbnN0
IHl5dHlwZV91aW50OCB5eWRlZmFjdFtdID0KLXsKLSAgICAgICAwLCAgICAgMCwgICAxMTIsICAg
MTEzLCAgIDExNCwgICAgIDAsICAgMTA2LCAgIDEwNSwgICAxMjAsICAgMTE4LAotICAgICAxMTks
ICAgMTI0LCAgIDEyNSwgICAxMjYsICAgMTI3LCAgIDEyOCwgICAxMjksICAgMTIxLCAgIDEyMiwg
ICAxMjMsCi0gICAgIDEzMCwgICAxMzEsICAgMTMyLCAgIDEwOSwgICAxMDcsICAgICAwLCAgIDEx
NywgICAxMzMsICAgMTM0LCAgIDEzNSwKLSAgICAgMTM2LCAgIDEzOCwgICAyMDAsICAgMjAxLCAg
ICAgMCwgICAgNzcsICAgIDg3LCAgICAgMCwgICAgOTIsICAgIDk3LAotICAgICAgIDAsICAgMTAz
LCAgICAgMCwgICAxMTAsICAgMTE1LCAgIDEzNywgICAgIDAsICAgMTk3LCAgIDE5OSwgICAxMDgs
Ci0gICAgIDEwMiwgICAgIDAsICAgICAyLCAgICAgMywgICAxNDEsICAgICAwLCAgICA3MiwgICAg
IDAsICAgIDc1LCAgICA4NywKLSAgICAgICAwLCAgICA4OCwgICAgODksICAgIDkwLCAgICA3OCwg
ICAgIDAsICAgIDg3LCAgICAgMCwgICAgNzMsICAgICAyLAotICAgICAgOTgsICAgMTA0LCAgIDEx
MSwgICAgIDAsICAgICAxLCAgIDE5OCwgICAgIDAsICAgICAwLCAgIDEzOSwgICAgIDAsCi0gICAg
IDIwMiwgICAgNzksICAgIDg0LCAgICA4NiwgICAgOTEsICAgICAwLCAgICA5MywgICAgODAsICAg
ICAwLCAgICAgMCwKLSAgICAgICA0LCAgICAgNywgICAgIDYsICAgICA4LCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAzNSwgICAgMzQsICAgIDMzLAotICAgICAgIDUsICAgIDEwLCAgICAyOSwgICAg
MTIsICAgIDE3LCAgICAxOCwgICAgIDAsICAgICAwLCAgICAyMywgICAgIDAsCi0gICAgICAzNiwg
ICAgIDAsICAgIDM5LCAgICA0MiwgICAgNDMsICAgIDQ4LCAgICA1MSwgICAgNTIsICAgIDUzLCAg
ICA1NCwKLSAgICAgIDU2LCAgICA1OCwgICAgNjAsICAgIDcxLCAgICAgMCwgICAgMjcsICAgIDc0
LCAgICAgMCwgICAgIDAsICAgMTQzLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAxODIsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNjAsCi0gICAgIDE2OSwgICAxNzMs
ICAgIDM2LCAgICA2MiwgICAgNjksICAgICAwLCAgIDE1MSwgICAgIDAsICAgMTE1LCAgIDE1NCwK
LSAgICAgMTcxLCAgIDE1MywgICAxNTIsICAgICAwLCAgIDE1NSwgICAxNTYsICAgMTU3LCAgIDE1
OCwgICAgODEsICAgIDgzLAotICAgICAgODUsICAgICAwLCAgICAgMCwgICAgOTksICAgICAwLCAg
IDE1MCwgICAxMDEsICAgIDMwLCAgICAzMSwgICAgIDAsCi0gICAgICAxNCwgICAgMTUsICAgICAw
LCAgICAgMCwgICAgMjEsICAgIDIwLCAgICAgMCwgICAgMjIsICAgIDI0LCAgICAyNiwKLSAgICAg
IDMyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDExNiwg
ICAxNDgsICAgICAwLCAgIDE0NiwgICAxNDIsCi0gICAgIDE0NCwgICAgIDAsICAgMTkzLCAgIDE5
MiwgICAxNjcsICAgMTg0LCAgICAgMCwgICAxOTYsICAgMTk0LCAgICAgMCwKLSAgICAgMTgwLCAg
IDE1OSwgICAgIDAsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2NCwgICAgIDAsICAg
ICAwLAotICAgICAxNzQsICAgMTcwLCAgIDE3MiwgICAgIDAsICAgIDk0LCAgICAgMCwgICAgOTYs
ICAgMTAwLCAgICAgOSwgICAgIDAsCi0gICAgICAxNiwgICAgIDIsICAgICAzLCAgICAxMywgICAg
MTksICAgIDI1LCAgICAzNywgICAgMzgsICAgIDQxLCAgICA0MCwKLSAgICAgIDQ2LCAgICA0Nywg
ICAgNDQsICAgIDQ1LCAgICA0OSwgICAgNTAsICAgIDU1LCAgICA1NywgICAgNTksICAgICAwLAot
ICAgICAgIDAsICAgICAwLCAgIDE0NSwgICAxNDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAxOTUsCi0gICAgICAgMCwgICAxNjEsICAgIDYzLCAgICA3MCwgICAgIDAsICAg
IDk1LCAgICAxMSwgICAgIDAsICAgICAwLCAgIDE0NywKLSAgICAgICAwLCAgIDE2NiwgICAxNjgs
ICAgMTg3LCAgIDE4NiwgICAxODksICAgMTY3LCAgIDE3OCwgICAgIDAsICAgICAwLAotICAgICAg
IDAsICAgIDgyLCAgICA2MSwgICAxNDksICAgICAwLCAgIDE4OCwgICAgIDAsICAgICAwLCAgIDE3
NywgICAxNzUsCi0gICAgICAgMCwgICAgIDAsICAgMTYyLCAgICAgMCwgICAxOTAsICAgICAwLCAg
IDE2NywgICAgIDAsICAgMTY0LCAgIDE4MSwKLSAgICAgMTYzLCAgICAgMCwgICAxOTEsICAgMTg1
LCAgIDE3NiwgICAxNzksICAgMTgzCi19OwotCi0vKiBZWURFRkdPVE9bTlRFUk0tTlVNXS4gICov
Ci1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5ZGVmZ290b1tdID0KLXsKLSAgICAgIC0xLCAg
IDE5NiwgICAxMDAsICAgMTAxLCAgIDEwMiwgICAyMjksICAgMTAzLCAgIDEwNCwgICAxMDUsICAg
MTA2LAotICAgICAxMDcsICAgMTA4LCAgIDEwOSwgICAxNDIsICAgMTExLCAgIDExMiwgICAxMTMs
ICAgMTE0LCAgIDExNSwgICAxMTYsCi0gICAgIDExNywgICAxMTgsICAgMTE5LCAgIDEyMCwgICAx
MjEsICAgMTIyLCAgIDE0MywgICAxNDQsICAgMjE4LCAgIDE0NSwKLSAgICAgMTI0LCAgIDE0Niwg
ICAxNDcsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDgyLCAgICA2NCwgICAgNjUsICAgIDgzLAot
ICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgMTI1
LCAgICA0NSwgICAxMzAsCi0gICAgICA3NywgICAxMjgsICAgMTI5LCAgIDE5NywgICAxOTgsICAg
MTY2LCAgIDE0OSwgICAxNTAsICAgMTUxLCAgIDE1MiwKLSAgICAgMjEyLCAgIDI4MCwgICAyOTks
ICAgMjU0LCAgIDI1NSwgICAyNTYsICAgMzAwLCAgIDE1MywgICAxNTQsICAgMTU1LAotICAgICAy
ODksICAgMjc5LCAgIDE1NiwgICAyNjAsICAgMjA0LCAgIDI1NywgICAyNzUsICAgMjg2LCAgIDI4
NywgICAxNTcsCi0gICAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA1NwotfTsKLQotLyogWVlQQUNU
W1NUQVRFLU5VTV0gLS0gSW5kZXggaW4gWVlUQUJMRSBvZiB0aGUgcG9ydGlvbiBkZXNjcmliaW5n
Ci0gICBTVEFURS1OVU0uICAqLwotI2RlZmluZSBZWVBBQ1RfTklORiAtMjYxCi1zdGF0aWMgY29u
c3QgeXl0eXBlX2ludDE2IHl5cGFjdFtdID0KLXsKLSAgICAxMzI3LCAgIC0yMCwgIC0yNjEsICAt
MjYxLCAgLTI2MSwgICAxMTMsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwg
IC0yNjEsCi0gICAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgLTE5LCAgLTI2
MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwKLSAgICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgLTYxLCAg
IC00MCwgICAtMjgsICAgIDc1LCAgICAtNywgIC0yNjEsICAgIDI0LAotICAgIDEzNzAsICAtMjYx
LCAgMTQ0NCwgIC0yNjEsICAgLTExLCAgLTI2MSwgIDEyODMsICAtMjYxLCAgLTI2MSwgIC0yNjEs
Ci0gICAgLTI2MSwgIDE0NDQsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgICA2LCAgLTI2MSwgICAg
NTQsICAtMjYxLCAgICA4OCwKLSAgICAgIDYyLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwg
IDEzNzAsICAgIDU5LCAgICA5MSwgIC0yNjEsICAgIDM2LAotICAgICAtNTAsICAtMjYxLCAgLTI2
MSwgIDEwNTEsICAtMjYxLCAgLTI2MSwgICAgNjMsICAxMzcwLCAgLTI2MSwgICAyOTMsCi0gICAg
LTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAgOTEsICAxMzcwLCAgIC0xMiwgIC0yNjEsICAg
ODU2LCAgMTA1MSwKLSAgICAgIDc3LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgMTA1MSwgIDEwNTEs
ICAxMDUxLCAgLTI2MSwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAtMjYxLCAgIC0xNCwgIC0y
NjEsICAtMjYxLCAgLTI2MSwgICAgODQsICAgLTQ0LCAgMTExNiwgICAgOTUsCi0gICAgLTI2MSwg
IDEwNTEsICAgIDUzLCAgICAgMywgIC0yNjEsICAgLTM2LCAgICA4OSwgIC0yNjEsICAtMjYxLCAg
LTI2MSwKLSAgICAgMTA0LCAgIDEwNywgICAtNDUsICAtMjYxLCAgICA5NiwgIC0yNjEsICAtMjYx
LCAgICA5MSwgIDExODQsICAtMjYxLAotICAgIDEzNzAsICAgIDkyLCAgICA5MywgIC0yNjEsICAg
IDk4LCAgIDEwMSwgICAgOTQsICAgOTIxLCAgIDEwNSwgICAxMDIsCi0gICAgLTI2MSwgIC0yNjEs
ICAgIDcyLCAgLTI2MSwgIC0yNjEsICAgICA5LCAgLTI2MSwgICAtNjEsICAgIDQyLCAgLTI2MSwK
LSAgICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgMzc2LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2
MSwgICAxMDYsICAtMjYxLAotICAgIC0yNjEsICAgOTg2LCAgMTA1MSwgIC0yNjEsICAgMTAzLCAg
LTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAtNDEsCi0gICAgLTI2MSwgIC0yNjEsICAxMDUx
LCAgMTQwNywgIC0yNjEsICAtMjYxLCAgMTA1MSwgICAxMTAsICAtMjYxLCAgLTI2MSwKLSAgICAt
MjYxLCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEw
NTEsICAxMDUxLAotICAgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgLTI2MSwg
ICAxMDksICAgIDIzLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2MSwgIDEyMjcsICAtMjYxLCAgLTI2
MSwgICAxMTEsICAtMjYxLCAgMTA1MSwgIC0yNjEsICAtMjYxLCAgICAyNSwKLSAgICAtMjYxLCAg
LTI2MSwgICA0NTksICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIDEwNTEsICAx
MDUxLAotICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgIDEwNTEsICAtMjYxLCAgIDExNCwgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgICAxMTUsCi0gICAgIDExMiwgICAgNzcsICAgMTE2LCAgLTI2MSwgIC0y
NjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgIDUzLCAgICA1MywKLSAgICAtMjYxLCAgLTI2MSwg
IC0yNjEsICAtMjYxLCAgIC0zNiwgICAtMzYsICAtMjYxLCAgIDEwNCwgICAxMDcsICAgIDc2LAot
ICAgIDEwNTEsICAgIDkxLCAgLTI2MSwgIC0yNjEsICAgMTQ1LCAgICA1NCwgICA2MjUsICAgNzA4
LCAgICAtNiwgIC0yNjEsCi0gICAgIDc5MSwgICA0NTksICAtMjYxLCAgLTI2MSwgICAxMTcsICAt
MjYxLCAgLTI2MSwgIDEwNTEsICAgMTIwLCAgLTI2MSwKLSAgICAgMTI0LCAgLTI2MSwgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgICA3OTEsICAgMTExLCAgIDExMiwgICAgOTEsICAgMTI1LAotICAgICAx
MjIsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAxMDUxLCAgLTI2MSwgICAxMTgsICAgMTI4LCAgIDE4
MCwgIC0yNjEsCi0gICAgIDEyNiwgICA1NDIsICAtMjYxLCAgICAtNSwgIDEwNTEsICAgNTQyLCAg
IDExMSwgIDEwNTEsICAtMjYxLCAgLTI2MSwKLSAgICAtMjYxLCAgIDEyMywgICAxMTIsICAtMjYx
LCAgLTI2MSwgIC0yNjEsICAtMjYxCi19OwotCi0vKiBZWVBHT1RPW05URVJNLU5VTV0uICAqLwot
c3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXBnb3RvW10gPQotewotICAgIC0yNjEsICAgLTI0
LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgICAzNCwgIC0yNjEs
Ci0gICAgLTI2MSwgIC0yNjEsICAtMjYxLCAgICAzMiwgIC0yNjEsICAgLTMzLCAgLTI2MSwgICAt
MjcsICAgLTI2LCAgLTI2MSwKLSAgICAtMjYxLCAgLTI2MSwgICAgMTQsICAgIDE2LCAgICAxOCwg
IC0yNjEsICAgLTY2LCAgIC04NywgIC0yNjEsICAgLTkyLAotICAgICAtODUsICAgIDExLCAgICAx
MiwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAxNDEsICAgMTUwLCAgIDE2MSwgICAxNDMsCi0gICAg
LTI2MSwgIC0yNjEsICAtMjMxLCAgICAgNSwgICAtMzAsICAgMjI0LCAgIC0xOCwgICAgIDAsICAt
MjYxLCAgLTI2MSwKLSAgICAtMjYxLCAgIDEwMCwgIC0xMTksICAtMjYxLCAgIC0xNywgIC0xNTYs
ICAgLTI1LCAgLTE0NSwgIC0yNDMsICAtMjYxLAotICAgIC0yNjEsICAtMjYxLCAgIC02NCwgIC0y
NjAsICAtMjYxLCAgLTI2MSwgICAtNTIsICAgIDIxLCAgIC0yMiwgIC0yNjEsCi0gICAgLTI2MSwg
ICAtMzksICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAg
LTI2MSwKLSAgICAtMjYxLCAgIDE5MSwgIC0yNjEsICAtMjYxCi19OwotCi0vKiBZWVRBQkxFW1lZ
UEFDVFtTVEFURS1OVU1dXS4gIFdoYXQgdG8gZG8gaW4gc3RhdGUgU1RBVEUtTlVNLiAgSWYKLSAg
IHBvc2l0aXZlLCBzaGlmdCB0aGF0IHRva2VuLiAgSWYgbmVnYXRpdmUsIHJlZHVjZSB0aGUgcnVs
ZSB3aGljaAotICAgbnVtYmVyIGlzIHRoZSBvcHBvc2l0ZS4gIElmIFlZVEFCTEVfTklORiwgc3lu
dGF4IGVycm9yLiAgKi8KLSNkZWZpbmUgWVlUQUJMRV9OSU5GIC0xNjYKLXN0YXRpYyBjb25zdCB5
eXR5cGVfaW50MTYgeXl0YWJsZVtdID0KLXsKLSAgICAgIDQ0LCAgICA1NSwgICAxNjUsICAgMTY0
LCAgIDE2OSwgICAgODAsICAgMjI2LCAgIDEyMywgICAyMjIsICAgMjAwLAotICAgICAgNzEsICAg
IDMyLCAgICAzMywgICAyNzIsICAgMTkzLCAgICA3MCwgICAyODgsICAgIDQ5LCAgIDE4NSwgICAx
ODYsCi0gICAgICA1NiwgICAxNzgsICAgMTIzLCAgICA4OCwgICAgNzIsICAgIDUwLCAgICA1Miwg
ICAgNTMsICAgMTc1LCAgIDI3OCwKLSAgICAgIDg5LCAgIDIyOCwgICAgNTgsICAgIDc2LCAgIDE3
NiwgICAgODQsICAgMzA0LCAgIDIxOSwgICAxNzAsICAgMTcxLAotICAgICAgNDQsICAgIDY2LCAg
ICA0NCwgICAgODYsICAgMjc4LCAgIDIwOSwgICAgNDQsICAgMTI3LCAgIDI5OCwgICAxOTQsCi0g
ICAgICA1OSwgICAgNDQsICAgMjk4LCAgIDE4NywgICAxODgsICAgIDg0LCAgICA1NCwgICAgMzIs
ICAgIDMzLCAgIDE3MiwKLSAgICAgMTU4LCAgIDE2MSwgICAgNzMsICAgMTczLCAgICA2NiwgICAg
NDQsICAgMjc2LCAgIDMwMSwgICAxNjIsICAgIDY5LAotICAgICAgNTMsICAgIDY3LCAgIDIxOSwg
ICAyMTksICAgIDY4LCAgIDE2NSwgICAyMjUsICAgIDQ0LCAgICA2MCwgICAxNDgsCi0gICAgIDIz
MCwgICAgNzgsICAgMjAwLCAgICAgNiwgICAgIDcsICAgIDQ0LCAgIDE4MywgICAyMTksICAgMTg0
LCAgIDIzNSwKLSAgICAgMjIwLCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAxMjMsICAg
ICA2LCAgICAgNywgICAxMjcsICAgIDQ5LAotICAgICAxMjcsICAgMjUxLCAgIDI0OSwgICAyMTks
ICAgMjUyLCAgIDExMCwgICAyNTksICAgIDg3LCAgICA2MSwgICAgNjIsCi0gICAgICA2MywgICAg
MjMsICAgIDI0LCAgIC0yNywgICAyNTgsICAgIDczLCAgIDIyMiwgICAgIDIsICAgICAzLCAgICAg
NCwKLSAgICAgMTEwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICAyMywgICAgMjQsICAgMTY3LCAg
IDE2OCwgICAgNDQsICAgIDc5LAotICAgICAgNDQsICAgMjYyLCAgIDI2MywgICAyMTMsICAgMjE0
LCAgIDIxNSwgICAgNTIsICAgIDUzLCAgIDI2NCwgICAxODEsCi0gICAgIDE4MiwgICAzMDUsICAg
MjE2LCAgIDE4MCwgICAxMjYsICAgMTg5LCAgIDE5MCwgICAtNzYsICAgLTI4LCAgIDIzMywKLSAg
ICAgMjM4LCAgIDIzOSwgICAyMTcsICAgMTQ4LCAgIDIxOSwgICAyNjcsICAgMTc0LCAgIDEyMywg
ICAyNDAsICAgMjQxLAotICAgICAyNDIsICAgMjQzLCAgIDE5MSwgICAyNDQsICAgMjQ1LCAgIDI2
OCwgICAxNzksICAgMTkyLCAgIDI3NywgICAyMDUsCi0gICAgIDE5NSwgICAxMjcsICAgMjA2LCAg
IDIwMiwgICAyMDMsICAgMjA3LCAgIDIxMCwgICAyMjcsICAgMjExLCAgIDIyMywKLSAgICAgMjgy
LCAgLTExNywgICAyNTAsICAgMjc3LCAgIDEyMywgICAyNzAsICAtMTY1LCAgLTEzOCwgICAyNjUs
ICAgMjY2LAotICAgICAyMTksICAgMjgxLCAgIDI5MywgICAxMTAsICAgMjgzLCAgIDI4NCwgICAy
OTYsICAgMjkxLCAgIDI5MiwgICAyOTQsCi0gICAgIDI5NSwgICAgNDQsICAgMzAyLCAgIDI3MSwg
ICAzMDYsICAgMjQ2LCAgIDI5NywgICAyMzQsICAgMjQ3LCAgICA4MSwKLSAgICAgMTY1LCAgIDI0
OCwgICAxNDgsICAgMjM2LCAgIDIzNywgICAxMTAsICAgMTEwLCAgIDExMCwgICAxMTAsICAgMTEw
LAotICAgICAxMTAsICAgMTEwLCAgIDExMCwgICAxMTAsICAgMTEwLCAgIDExMCwgICAxNTksICAg
IDg1LCAgIDE2MCwgICAgNTEsCi0gICAgIDIwMSwgICAzMDMsICAgMjczLCAgIDI2MSwgICAyNjks
ICAgMjc0LCAgIDI4NSwgICAgNzUsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjkwLCAgIDExMCwgICAxNDgsICAgMTQ4LCAg
ICAgMCwgICAgIDAsCi0gICAgIDE0OCwgICAxNDgsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAxNDgsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAs
ICAgICAwLCAgIDExMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsCi0gICAgICAgMCwgICAxNDgsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ4LCAgICAg
MSwgICAgIDIsICAgICAzLCAgICAgNCwKLSAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAg
ICAgOSwgICAgMTAsICAgMTMxLCAgIDEzMiwgICAxMzMsICAgICAwLAotICAgICAxMzQsICAgMTM1
LCAgIDEzNiwgICAxMzcsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYs
Ci0gICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAyMywKLSAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgMTM4LCAgICAyNywg
ICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAsICAgIDMxLAotICAgICAgOTEsICAgIDkyLCAgICA5
MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAxMzksICAgMTQwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgMTQxLCAgICA5NywgICAgOTgsICAgICAwLCAgICA5OSwgICAgIDEsCi0gICAgICAgMiwg
ICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAg
IDEzMSwKLSAgICAgMTMyLCAgIDEzMywgICAgIDAsICAgMTM0LCAgIDEzNSwgICAxMzYsICAgMTM3
LCAgICAxMSwgICAgMTIsICAgIDEzLAotICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAg
IDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsCi0gICAgICAgMCwgICAgIDAs
ICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgIDEzOCwgICAgMjcsICAgIDI4LCAgICAyOSwK
LSAgICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAg
MCwgICAgOTQsICAgIDk1LAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwKLSAgICAg
ICAwLCAgIDEzOSwgICAyMjEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0MSwgICAg
OTcsICAgIDk4LAotICAgICAgIDAsICAgIDk5LCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwg
ICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsCi0gICAgICAgOSwgICAgMTAsICAgMTMxLCAgIDEz
MiwgICAxMzMsICAgICAwLCAgIDEzNCwgICAxMzUsICAgMTM2LCAgIDEzNywKLSAgICAgIDExLCAg
ICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAg
IDIwLAotICAgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywgICAgMjQs
ICAgIDI1LCAgICAyNiwgICAxMzgsCi0gICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAg
OTAsICAgIDMxLCAgICA5MSwgICAgOTIsICAgIDkzLCAgICAgMCwKLSAgICAgICAwLCAgICA5NCwg
ICAgOTUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAot
ICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsCi0gICAgICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMzksICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgMTQxLCAgICA5NywgICAgOTgs
ICAgICAwLCAgICA5OSwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LAotICAgICAg
IDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgIDEzMSwgICAxMzIsICAgMTMzLCAgICAg
MCwgICAxMzQsCi0gICAgIDEzNSwgICAxMzYsICAgMTM3LCAgICAxMSwgICAgMTIsICAgIDEzLCAg
ICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywKLSAgICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIx
LCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsICAgIDI0LAotICAgICAgMjUsICAg
IDI2LCAgIDEzOCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDkwLCAgICAzMSwgICAg
OTEsCi0gICAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDc5LCAgICAgMCwgICAgIDAsCi0g
ICAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0MSwgICAgOTcsICAgIDk4LCAgICAgMCwgICAgOTks
ICAgICAxLCAgICAgMiwKLSAgICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAg
IDgsICAgICA5LCAgICAxMCwgICAxMzEsICAgMTMyLAotICAgICAxMzMsICAgICAwLCAgIDEzNCwg
ICAxMzUsICAgMTM2LCAgIDEzNywgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsCi0gICAgICAx
NSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAw
LCAgICAgMCwKLSAgICAgICAwLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAxMzgsICAg
IDI3LCAgICAyOCwgICAgMjksICAgIDMwLAotICAgICAgOTAsICAgIDMxLCAgICA5MSwgICAgOTIs
ICAgIDkzLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICA5NSwgICAgIDAsCi0gICAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk2LCAg
ICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAxNDEsICAgIDk3LCAgICA5OCwgICAgIDAsCi0gICAgICA5OSwgICAgIDEsICAg
ICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwKLSAg
ICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgIDExLAotICAgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAx
NywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsCi0gICAgICAyMiwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywKLSAgICAgIDI4
LCAgICAyOSwgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAs
ICAgICAwLAotICAgICAgOTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwKLSAgICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQx
LAotICAgICAgOTcsICAgIDk4LCAgICAgMCwgICAgOTksICAgIDYwLCAgICAgMiwgICAgIDMsICAg
ICA0LCAgICAgMCwgICAgIDYsCi0gICAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAg
MTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAotICAg
ICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAg
ICAyNCwgICAgMjUsCi0gICAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMw
LCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwKLSAgICAgIDkzLCAgICAgMCwgICAgIDAsICAg
IDk0LCAgICA5NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
OCwgICAgIDksICAgIDEwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk3LCAg
ICA5OCwgICAgIDAsICAgIDk5LCAgICAxMSwgICAgMTIsICAgIDEzLAotICAgICAgMTQsICAgIDE1
LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAs
Ci0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAg
MjcsICAgIDI4LCAgICAyOSwKLSAgICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5Miwg
ICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LAotICAgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTYsICAg
ICAwLCAgICAgMCwKLSAgICAgMTYzLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgOTcsICAgIDk4LAotICAgICAgIDAsICAgIDk5LCAgICAxMSwgICAg
MTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCi0gICAgICAxOSwg
ICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAyNSwKLSAgICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDkw
LCAgICAzMSwgICAgOTEsICAgIDkyLAotICAgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAg
IDk1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwK
LSAgICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA4LCAgICAg
OSwgICAgMTAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgIDIwOCwgICAgOTcsICAgIDk4LCAg
ICAgMCwgICAgOTksICAgIDExLCAgICAxMiwgICAgMTMsCi0gICAgICAxNCwgICAgMTUsICAgIDE2
LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwKLSAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAg
MjgsICAgIDI5LAotICAgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLCAgICA5Mywg
ICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAsICAg
ICAwLAotICAgICAyMjQsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICA5NywgICAgOTgsCi0gICAgICAgMCwgICAgOTksICAgIDExLCAgICAxMiwgICAg
MTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKLSAgICAgIDE5LCAgICAyMCwg
ICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI1LAot
ICAgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAsICAgIDMx
LCAgICA5MSwgICAgOTIsCi0gICAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAg
IDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAgICAx
MCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NywgICAgOTgsICAgICAwLCAg
ICA5OSwgICAgMTEsICAgIDEyLCAgICAxMywKLSAgICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3
LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLAotICAgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgIDI1LCAgIDE3NywgICAgIDAsICAgIDI3LCAgICAyOCwgICAg
MjksCi0gICAgICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwgICAgOTIsICAgIDkzLCAgICAgMCwg
ICAgIDAsICAgIDk0LCAgICA5NSwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMiwgICAgIDMsCi0g
ICAgICAgNCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAs
ICAgIDk3LCAgICA5OCwKLSAgICAgICAwLCAgICA5OSwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
MTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAotICAgICAgMTYsICAgIDE3LCAgICAxOCwg
ICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAg
MCwgICAgIDAsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMw
LCAgICAgMCwKLSAgICAgIDMxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgOCwgICAgIDksICAgIDEwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwgICAgMTIsCi0gICAgICAxMywgICAg
MTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAy
MiwKLSAgICAgMTk5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjUsICAgIDI2LCAg
ICAgMCwgICAgMjcsICAgIDI4LAotICAgICAgMjksICAgIDMwLCAgICAgMCwgICAgMzEsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAg
ICAwLCAgICA3NCwgICAgIDAsICAgICAwLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwKLSAg
ICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAyNTMsICAgIDExLCAgICAx
MiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsCi0gICAgICAxNywgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywKLSAgICAgIDI0
LCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgIDAs
ICAgIDMxLAotICAgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAg
IDcsICAgICA4LCAgICAgOSwgICAgMTAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwKLSAgICAgIDEzLCAgICAx
NCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIy
LAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAg
ICAwLCAgICAyNywgICAgMjgsCi0gICAgICAyOSwgICAgMzAsICAgICAwLCAgICAzMSwgICAgIDIs
ICAgICAzLCAgICAgNCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICA4LCAgICAgOSwgICAg
MTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAg
ICAgIDAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAg
ICAxOCwgICAgMTksCi0gICAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgIDI1LCAgICAyNiwKLSAgICAgICAwLCAgICAyNywgICAgMjgsICAg
IDI5LCAgICAzMCwgICAgIDAsICAgIDMxLCAgICAgOCwgICAgIDksICAgIDEwLAotICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwg
ICAgMTIsCi0gICAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAx
OSwgICAgMjAsICAgIDIxLCAgICAyMiwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LAotICAgICAgMjksICAgIDMw
LCAgIDIzMSwgICAyMzIsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwgICAgIDAs
Ci0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwgICAg
MTMsICAgIDE0LCAgICAxNSwKLSAgICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwg
ICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAy
NSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgIDAsCi0gICAg
ICAzMQotfTsKLQotI2RlZmluZSB5eXBhY3RfdmFsdWVfaXNfZGVmYXVsdChZeXN0YXRlKSBcCi0g
ICghISgoWXlzdGF0ZSkgPT0gKC0yNjEpKSkKLQotI2RlZmluZSB5eXRhYmxlX3ZhbHVlX2lzX2Vy
cm9yKFl5dGFibGVfdmFsdWUpIFwKLSAgWVlJRCAoMCkKLQotc3RhdGljIGNvbnN0IHl5dHlwZV9p
bnQxNiB5eWNoZWNrW10gPQotewotICAgICAgIDAsICAgIDI1LCAgICA4OSwgICAgODgsICAgIDk2
LCAgICA1NywgICAxNjIsICAgIDczLCAgIDE1MywgICAxMjgsCi0gICAgICA0MCwgICAgIDAsICAg
ICAwLCAgIDI1NiwgICAgNTksICAgIDM5LCAgIDI3NiwgICAgMzcsICAgIDU0LCAgICA1NSwKLSAg
ICAgIDgxLCAgIDEwOCwgICAgODgsICAgIDczLCAgICA0MiwgICAgNDUsICAgIDQ1LCAgICA0Niwg
ICAgNzIsICAgMjYwLAotICAgICAgODAsICAgIDcyLCAgICA3MiwgICAgNTEsICAgIDc4LCAgICA2
NSwgICAyOTYsICAgIDc4LCAgICA1MiwgICAgNTMsCi0gICAgICA0MCwgICAgMzYsICAgIDQyLCAg
ICA2NywgICAyNzUsICAgMTM3LCAgICA0NiwgICAgNzcsICAgMjkxLCAgICA5NCwKLSAgICAgIDc4
LCAgICA1MSwgICAyOTUsICAgIDg5LCAgICA5MCwgICAgODUsICAgIDc1LCAgICA0NiwgICAgNDYs
ICAgIDczLAotICAgICAgODQsICAgIDczLCAgICA3MywgICAgNzcsICAgIDU5LCAgICA2NSwgICAg
NzIsICAgIDcyLCAgICA4MCwgICAgNDUsCi0gICAgICA0NiwgICAgNzgsICAgIDc4LCAgICA3OCwg
ICAgODEsICAgMTYyLCAgIDE2MSwgICAgNzcsICAgICAzLCAgICA3OSwKLSAgICAgMTcyLCAgICA3
NSwgICAyMDEsICAgICA4LCAgICAgOSwgICAgODUsICAgIDgzLCAgICA3OCwgICAgODUsICAgMTc2
LAotICAgICAgODEsICAgICAzLCAgICAzMywgICAgMzQsICAgIDM1LCAgIDE2MSwgICAgIDgsICAg
ICA5LCAgIDEyOCwgICAgMzcsCi0gICAgIDEzMCwgICAgNzgsICAgMTk0LCAgICA3OCwgICAgODEs
ICAgIDczLCAgICA4MSwgICAgNzEsICAgIDMzLCAgICAzNCwKLSAgICAgIDM1LCAgICAzNiwgICAg
MzcsICAgIDcxLCAgIDIwNiwgICAgNzMsICAgMjYxLCAgICAgNCwgICAgIDUsICAgICA2LAotICAg
ICAgODgsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgOTQsICAgIDk1LCAg
IDEyOCwgICAgNzUsCi0gICAgIDEzMCwgICAyMTgsICAgMjE5LCAgICA2MSwgICAgNjIsICAgIDYz
LCAgICA0NSwgICAgNDYsICAgMjIzLCAgICA4NiwKLSAgICAgIDg3LCAgIDI5NywgICAgNzAsICAg
MTExLCAgICA4MSwgICAgNTYsICAgIDU3LCAgICA3MiwgICAgNzEsICAgMTczLAotICAgICAxODMs
ICAgMTg0LCAgICA4MCwgICAxNTMsICAgIDc4LCAgICA3OSwgICAgNzIsICAgMjIzLCAgIDE4NSwg
ICAxODYsCi0gICAgIDE4NywgICAxODgsICAgIDU4LCAgIDE4OSwgICAxOTAsICAgMjUwLCAgICA3
MSwgICAgNjAsICAgMjYwLCAgICA3MSwKLSAgICAgIDc0LCAgIDIwMSwgICAgNzEsICAgIDgxLCAg
ICA4MSwgICAgODEsICAgIDcxLCAgICA3NCwgICAgNzYsICAgIDczLAotICAgICAyNjcsICAgIDcx
LCAgICA3MywgICAyNzUsICAgMjUwLCAgICA0MCwgICAgNzUsICAgIDcxLCAgICA3NCwgICAgNzQs
Ci0gICAgICA3OCwgICAgNzQsICAgMjg0LCAgIDE2MSwgICAgNzQsICAgIDcxLCAgICAxNiwgICAg
NzIsICAgIDc2LCAgICA4MSwKLSAgICAgIDcyLCAgIDIwMSwgICAyOTQsICAgMjU1LCAgICA4MSwg
ICAxOTEsICAgIDgwLCAgIDE3MywgICAxOTIsICAgIDU5LAotICAgICAyOTcsICAgMTkzLCAgIDIx
MiwgICAxODEsICAgMTgyLCAgIDE4MywgICAxODQsICAgMTg1LCAgIDE4NiwgICAxODcsCi0gICAg
IDE4OCwgICAxODksICAgMTkwLCAgIDE5MSwgICAxOTIsICAgMTkzLCAgICA4NSwgICAgNjYsICAg
IDg1LCAgICAgNSwKLSAgICAgMTMwLCAgIDI5NSwgICAyNTcsICAgMjEyLCAgIDI1MSwgICAyNTcs
ICAgMjc1LCAgICA0NiwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAyNzgsICAgMjIzLCAgIDI1NiwgICAyNTcsICAgIC0xLCAg
ICAtMSwKLSAgICAgMjYwLCAgIDI2MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgIDI3NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEs
ICAgMjUwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwK
LSAgICAgIC0xLCAgIDI5MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAyOTUsICAgICAzLCAgICAg
NCwgICAgIDUsICAgICA2LAotICAgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAg
ICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgLTEsCi0gICAgICAxNywgICAgMTgsICAgIDE5
LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwKLSAgICAg
IDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDM2LAotICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0Miwg
ICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCi0gICAgICA0NywgICAgNDgsICAgIDQ5LCAgICAt
MSwgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICA3NSwgICAgNzYsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
ODEsICAgIDgyLCAgICA4MywgICAgLTEsICAgIDg1LCAgICAgMywKLSAgICAgICA0LCAgICAgNSwg
ICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLAot
ICAgICAgMTQsICAgIDE1LCAgICAtMSwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIx
LCAgICAyMiwgICAgMjMsCi0gICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAg
IDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgMzYs
ICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLAotICAgICAg
NDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIC0xLCAgICA1
MiwgICAgNTMsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAg
IDc1LCAgICA3NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgxLCAgICA4MiwgICAg
ODMsCi0gICAgICAtMSwgICAgODUsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywg
ICAgIDgsICAgICA5LCAgICAxMCwKLSAgICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAx
NSwgICAgLTEsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLAotICAgICAgMjEsICAgIDIyLCAg
ICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCi0g
ICAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgs
ICAgIDM5LCAgICA0MCwKLSAgICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAg
NDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIC0xLAotICAgICAgLTEsICAgIDUyLCAgICA1Mywg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwKLSAgICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3NSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgODEsICAgIDgyLCAgICA4MywgICAgLTEs
ICAgIDg1LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsCi0gICAgICAgOCwgICAg
IDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIC0xLCAgICAx
NywKLSAgICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAg
ICAyNSwgICAgMjYsICAgIDI3LAotICAgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMy
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzNiwgICAgMzcsCi0gICAgICAzOCwgICAgMzksICAg
IDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywKLSAg
ICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzUsICAgIC0xLCAgICAtMSwKLSAgICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDgxLCAgICA4MiwgICAgODMsICAgIC0xLCAgICA4NSwgICAgIDMs
ICAgICA0LAotICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAg
MTEsICAgIDEyLCAgICAxMywgICAgMTQsCi0gICAgICAxNSwgICAgLTEsICAgIDE3LCAgICAxOCwg
ICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwKLSAgICAgIDI1LCAgICAy
NiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0x
LAotICAgICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAg
IDQyLCAgICA0MywgICAgNDQsCi0gICAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDks
ICAgIC0xLCAgICAtMSwgICAgNTIsICAgIDUzLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAg
ICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICA4MSwgICAgODIsICAgIDgzLCAgICAtMSwKLSAgICAgIDg1LCAgICAgMywgICAgIDQsICAg
ICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLAotICAgICAgMTIs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgMjEsCi0gICAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDMwLCAgICAzMSwKLSAgICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLAotICAgICAgNDIsICAgIDQz
LCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgLTEs
Ci0gICAgICA1MiwgICAgNTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLAotICAgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODEsCi0gICAg
ICA4MiwgICAgODMsICAgIC0xLCAgICA4NSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAg
IC0xLCAgICAgOCwKLSAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAyMSwgICAg
MjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCi0gICAgICAyOSwg
ICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDM3LCAg
ICAzOCwKLSAgICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1
LCAgICA0NiwgICAgNDcsICAgIDQ4LAotICAgICAgNDksICAgIC0xLCAgICAtMSwgICAgNTIsICAg
IDUzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwK
LSAgICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDEwLCAgICAx
MSwgICAgMTIsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODIsICAgIDgzLCAg
ICAtMSwgICAgODUsICAgIDIxLCAgICAyMiwgICAgMjMsCi0gICAgICAyNCwgICAgMjUsICAgIDI2
LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwKLSAgICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAg
NDIsICAgIDQzLAotICAgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwg
ICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAg
IC0xLAotICAgICAgNzQsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICA4MiwgICAgODMsCi0gICAgICAtMSwgICAgODUsICAgIDIxLCAgICAyMiwgICAg
MjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwKLSAgICAgIDI5LCAgICAzMCwg
ICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LAot
ICAgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2
LCAgICA0NywgICAgNDgsCi0gICAgICA0OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAg
LTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTAsICAgIDExLCAgICAx
MiwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIDgxLCAgICA4MiwgICAgODMsICAgIC0xLCAg
ICA4NSwgICAgMjEsICAgIDIyLCAgICAyMywKLSAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3
LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLAotICAgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAg
NDMsCi0gICAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwg
ICAgLTEsICAgIDUyLCAgICA1MywKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsCi0g
ICAgICA3NCwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDgyLCAgICA4MywKLSAgICAgIC0xLCAgICA4NSwgICAgMjEsICAgIDIyLCAgICAyMywgICAg
MjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LAotICAgICAgMjksICAgIDMwLCAgICAzMSwg
ICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsCi0gICAgICAz
OSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3
LCAgICA0OCwKLSAgICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAg
LTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAt
MSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgyLCAgICA4MywgICAgLTEsICAgIDg1LCAg
ICAyMSwgICAgMjIsICAgIDIzLAotICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4
LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywKLSAg
ICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIC0xLCAgICAtMSwg
ICAgNTIsICAgIDUzLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAgICA0LCAgICAgNSwKLSAgICAgICA2
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgODIs
ICAgIDgzLAotICAgICAgLTEsICAgIDg1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAg
MjIsICAgIDIzLCAgICAyNCwgICAgMjUsCi0gICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwg
ICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAt
MSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIC0x
LAotICAgICAgNDYsICAgICA0LCAgICAgNSwgICAgIDYsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IDEwLCAgICAxMSwgICAgMTIsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIxLCAgICAyMiwKLSAgICAgIDIzLCAgICAyNCwgICAg
MjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLAotICAg
ICAgNzYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0xLCAg
ICA0MSwgICAgNDIsCi0gICAgICA0MywgICAgNDQsICAgIC0xLCAgICA0NiwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAg
ICAwLCAgICAtMSwgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LAotICAgICAgIDcs
ICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3NiwgICAgMjEsICAgIDIyLCAgICAy
MywgICAgMjQsICAgIDI1LCAgICAyNiwKLSAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAg
ICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LAotICAgICAgMzcsICAgIDM4
LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICAtMSwgICAgNDYs
Ci0gICAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAg
MTAsICAgIDExLCAgICAxMiwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjEsICAgIDIyLAotICAgICAgMjMsICAgIDI0LCAgICAy
NSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsCi0gICAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgLTEsICAg
IDQxLCAgICA0MiwKLSAgICAgIDQzLCAgICA0NCwgICAgLTEsICAgIDQ2LCAgICAgNCwgICAgIDUs
ICAgICA2LCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgMTAsICAgIDExLCAgICAxMiwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwg
ICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAg
ICAyOSwKLSAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgMzgsICAgIDM5LAotICAgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAg
IDQ0LCAgICAtMSwgICAgNDYsICAgIDEwLCAgICAxMSwgICAgMTIsCi0gICAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIxLCAgICAyMiwK
LSAgICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAz
MCwgICAgMzEsICAgIDMyLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsCi0gICAgICA0MywgICAgNDQsICAgIDQ1
LCAgICA0NiwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjEsICAgIDIyLCAgICAyMywgICAg
MjQsICAgIDI1LAotICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwg
ICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIDM4LCAgICAz
OSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICAtMSwKLSAgICAgIDQ2Ci19
OwotCi0vKiBZWVNUT1NbU1RBVEUtTlVNXSAtLSBUaGUgKGludGVybmFsIG51bWJlciBvZiB0aGUp
IGFjY2Vzc2luZwotICAgc3ltYm9sIG9mIHN0YXRlIFNUQVRFLU5VTS4gICovCi1zdGF0aWMgY29u
c3QgeXl0eXBlX3VpbnQ4IHl5c3Rvc1tdID0KLXsKLSAgICAgICAwLCAgICAgMywgICAgIDQsICAg
ICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLAotICAgICAgMTIs
ICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwg
ICAgMjksCi0gICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAz
OSwgICAgNDEsICAgIDQyLCAgICA0MywKLSAgICAgIDQ0LCAgICA0NiwgICAxMjYsICAgMTI3LCAg
IDEyOCwgICAxMjksICAgMTMwLCAgIDEzNSwgICAxMzYsICAgMTM3LAotICAgICAxMzgsICAgMTM5
LCAgIDE0MCwgICAxNDEsICAgMTQyLCAgIDE0MywgICAxNzUsICAgMTc2LCAgIDE3NywgICAgMzcs
Ci0gICAgICA0NSwgICAxNDAsICAgIDQ1LCAgICA0NiwgICAgNzUsICAgIDk2LCAgICA4MSwgICAx
NzgsICAgIDcyLCAgICA3OCwKLSAgICAgICAzLCAgICAzMywgICAgMzQsICAgIDM1LCAgIDEzMiwg
ICAxMzMsICAgMTM4LCAgICA3OCwgICAgODEsICAgIDQ1LAotICAgICAgOTYsICAgMTM5LCAgIDE0
MSwgICAgNzMsICAgICAwLCAgIDE3NiwgICAxNDEsICAgMTQ1LCAgICA3NSwgICAgNzUsCi0gICAg
IDE2MSwgICAxMzIsICAgMTMxLCAgIDEzNCwgICAxMzksICAgMTMzLCAgICA5NiwgICAgNzEsICAg
IDczLCAgICA4MCwKLSAgICAgIDQ1LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MiwgICAgNTMs
ICAgIDcxLCAgICA4MiwgICAgODMsICAgIDg1LAotICAgICAgOTcsICAgIDk4LCAgICA5OSwgICAx
MDEsICAgMTAyLCAgIDEwMywgICAxMDQsICAgMTA1LCAgIDEwNiwgICAxMDcsCi0gICAgIDEwOCwg
ICAxMDksICAgMTEwLCAgIDExMSwgICAxMTIsICAgMTEzLCAgIDExNCwgICAxMTUsICAgMTE2LCAg
IDExNywKLSAgICAgMTE4LCAgIDExOSwgICAxMjAsICAgMTIxLCAgIDEyNSwgICAxNDIsICAgIDgx
LCAgIDEzOSwgICAxNDYsICAgMTQ3LAotICAgICAxNDQsICAgIDEzLCAgICAxNCwgICAgMTUsICAg
IDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICA0MCwgICAgNzUsCi0gICAgICA3NiwgICAgODEs
ICAgMTA4LCAgIDEyMSwgICAxMjIsICAgMTI0LCAgIDEyNiwgICAxMjcsICAgMTQyLCAgIDE1MSwK
LSAgICAgMTUyLCAgIDE1MywgICAxNTQsICAgMTYyLCAgIDE2MywgICAxNjQsICAgMTY3LCAgIDE3
NCwgICAgOTYsICAgMTMxLAotICAgICAxMzQsICAgIDczLCAgICA4MCwgICAgNzQsICAgMTI1LCAg
IDEyMiwgICAxNTAsICAgMTA4LCAgIDEwOCwgICAxMjQsCi0gICAgICA1MiwgICAgNTMsICAgIDcz
LCAgICA3NywgICAgNzIsICAgIDcyLCAgICA3OCwgICAgMzksICAgMTIyLCAgICA3MSwKLSAgICAg
MTA4LCAgICA4NiwgICAgODcsICAgIDgzLCAgICA4NSwgICAgNTQsICAgIDU1LCAgICA4OSwgICAg
OTAsICAgIDU2LAotICAgICAgNTcsICAgIDU4LCAgICA2MCwgICAgNTksICAgIDk0LCAgICA3NCwg
ICAgOTYsICAgMTQ4LCAgIDE0OSwgICAgNzYsCi0gICAgIDE0NywgICAxNDYsICAgIDgxLCAgICA4
MSwgICAxNjksICAgIDcxLCAgICA3MSwgICAgODEsICAgIDgxLCAgIDEyNCwKLSAgICAgIDcxLCAg
ICA3NiwgICAxNTUsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDcwLCAgICA4MCwgICAxMjMsICAg
IDc4LAotICAgICAgODEsICAgIDc2LCAgIDE1MiwgICAgNzMsICAgIDc0LCAgIDEyNSwgICAxNTAs
ICAgIDc0LCAgICA3MiwgICAxMDAsCi0gICAgIDEyNCwgICAgNDUsICAgIDQ2LCAgICA5NiwgICAx
MDMsICAgMTIyLCAgIDEwOCwgICAxMDgsICAgMTEwLCAgIDExMCwKLSAgICAgMTEyLCAgIDExMiwg
ICAxMTIsICAgMTEyLCAgIDExMywgICAxMTMsICAgMTE3LCAgIDExOCwgICAxMTksICAgMTI0LAot
ICAgICAgNzMsICAgIDc4LCAgICA4MSwgICAgNzYsICAgMTU4LCAgIDE1OSwgICAxNjAsICAgMTcw
LCAgIDEyNCwgICAgODEsCi0gICAgIDE2OCwgICAxNjIsICAgMTIyLCAgIDEyMiwgICAxMjUsICAg
IDc0LCAgICA3NCwgICAgNzksICAgMTI1LCAgIDE0OSwKLSAgICAgIDQwLCAgIDE2MSwgICAxNTMs
ICAgMTUxLCAgIDE2MywgICAxNzEsICAgIDcyLCAgIDEyNCwgICAxMzcsICAgMTY2LAotICAgICAx
NTYsICAgIDc0LCAgIDEyMiwgICAgNzQsICAgIDcxLCAgIDE2NiwgICAxNzIsICAgMTczLCAgIDE1
OCwgICAxNjUsCi0gICAgICA5NiwgICAgNzIsICAgIDc2LCAgIDEyNCwgICAgODEsICAgIDcyLCAg
ICAxNiwgICAgODAsICAgMTUzLCAgIDE1NywKLSAgICAgMTYxLCAgICA3MiwgICAxMjQsICAgMTU3
LCAgIDE1OCwgICAxNTAsICAgIDgxCi19OwotCi0jZGVmaW5lIHl5ZXJyb2sJCSh5eWVycnN0YXR1
cyA9IDApCi0jZGVmaW5lIHl5Y2xlYXJpbgkoeXljaGFyID0gWVlFTVBUWSkKLSNkZWZpbmUgWVlF
TVBUWQkJKC0yKQotI2RlZmluZSBZWUVPRgkJMAotCi0jZGVmaW5lIFlZQUNDRVBUCWdvdG8geXlh
Y2NlcHRsYWIKLSNkZWZpbmUgWVlBQk9SVAkJZ290byB5eWFib3J0bGFiCi0jZGVmaW5lIFlZRVJS
T1IJCWdvdG8geXllcnJvcmxhYgotCi0KLS8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5
eWVycm9yLiAgVGhpcyByZW1haW5zIGhlcmUgdGVtcG9yYXJpbHkKLSAgIHRvIGVhc2UgdGhlIHRy
YW5zaXRpb24gdG8gdGhlIG5ldyBtZWFuaW5nIG9mIFlZRVJST1IsIGZvciBHQ0MuCi0gICBPbmNl
IEdDQyB2ZXJzaW9uIDIgaGFzIHN1cHBsYW50ZWQgdmVyc2lvbiAxLCB0aGlzIGNhbiBnby4gIEhv
d2V2ZXIsCi0gICBZWUZBSUwgYXBwZWFycyB0byBiZSBpbiB1c2UuICBOZXZlcnRoZWxlc3MsIGl0
IGlzIGZvcm1hbGx5IGRlcHJlY2F0ZWQKLSAgIGluIEJpc29uIDIuNC4yJ3MgTkVXUyBlbnRyeSwg
d2hlcmUgYSBwbGFuIHRvIHBoYXNlIGl0IG91dCBpcwotICAgZGlzY3Vzc2VkLiAgKi8KLQotI2Rl
ZmluZSBZWUZBSUwJCWdvdG8geXllcnJsYWIKLSNpZiBkZWZpbmVkIFlZRkFJTAotICAvKiBUaGlz
IGlzIGhlcmUgdG8gc3VwcHJlc3Mgd2FybmluZ3MgZnJvbSB0aGUgR0NDIGNwcCdzCi0gICAgIC1X
dW51c2VkLW1hY3Jvcy4gIE5vcm1hbGx5IHdlIGRvbid0IHdvcnJ5IGFib3V0IHRoYXQgd2Fybmlu
ZywgYnV0Ci0gICAgIHNvbWUgdXNlcnMgZG8sIGFuZCB3ZSB3YW50IHRvIG1ha2UgaXQgZWFzeSBm
b3IgdXNlcnMgdG8gcmVtb3ZlCi0gICAgIFlZRkFJTCB1c2VzLCB3aGljaCB3aWxsIHByb2R1Y2Ug
d2FybmluZ3MgZnJvbSBCaXNvbiAyLjUuICAqLwotI2VuZGlmCi0KLSNkZWZpbmUgWVlSRUNPVkVS
SU5HKCkgICghIXl5ZXJyc3RhdHVzKQotCi0jZGVmaW5lIFlZQkFDS1VQKFRva2VuLCBWYWx1ZSkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotZG8gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5Y2hh
ciA9PSBZWUVNUFRZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgeXljaGFyID0gKFRva2VuKTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgIHl5bHZhbCA9IChWYWx1ZSk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBZWVBPUFNUQUNLICh5eWxlbik7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeXlzdGF0ZSA9ICp5
eXNzcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGdv
dG8geXliYWNrdXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB5eWVycm9yICgmeXlsbG9jLCBj
b250ZXh0LCBZWV8oInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiKSk7IFwKLSAgICAgIFlZ
RVJST1I7CQkJCQkJCVwKLSAgICB9CQkJCQkJCQlcCi13aGlsZSAoWVlJRCAoMCkpCi0KLS8qIEVy
cm9yIHRva2VuIG51bWJlciAqLwotI2RlZmluZSBZWVRFUlJPUgkxCi0jZGVmaW5lIFlZRVJSQ09E
RQkyNTYKLQotCi0vKiBZWUxMT0NfREVGQVVMVCAtLSBTZXQgQ1VSUkVOVCB0byBzcGFuIGZyb20g
UkhTWzFdIHRvIFJIU1tOXS4KLSAgIElmIE4gaXMgMCwgdGhlbiBzZXQgQ1VSUkVOVCB0byB0aGUg
ZW1wdHkgbG9jYXRpb24gd2hpY2ggZW5kcwotICAgdGhlIHByZXZpb3VzIHN5bWJvbDogUkhTWzBd
IChhbHdheXMgZGVmaW5lZCkuICAqLwotCi0jaWZuZGVmIFlZTExPQ19ERUZBVUxUCi0jIGRlZmlu
ZSBZWUxMT0NfREVGQVVMVChDdXJyZW50LCBSaHMsIE4pICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZiAoWVlJRCAoTikpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9IFlZUkhTTE9DIChSaHMs
IDEpLmZpcnN0X2xpbmU7ICAgICAgICBcCi0gICAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2NvbHVt
biA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2NvbHVtbjsgICAgICBcCi0gICAgICAgICAgKEN1
cnJlbnQpLmxhc3RfbGluZSAgICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfbGluZTsgICAgICAg
ICBcCi0gICAgICAgICAgKEN1cnJlbnQpLmxhc3RfY29sdW1uICA9IFlZUkhTTE9DIChSaHMsIE4p
Lmxhc3RfY29sdW1uOyAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBlbHNlICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9IChD
dXJyZW50KS5sYXN0X2xpbmUgICA9ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBZWVJIU0xP
QyAoUmhzLCAwKS5sYXN0X2xpbmU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IChDdXJyZW50KS5sYXN0X2NvbHVtbiA9
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0X2NvbHVt
bjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
d2hpbGUgKFlZSUQgKDApKQotI2VuZGlmCi0KLSNkZWZpbmUgWVlSSFNMT0MoUmhzLCBLKSAoKFJo
cylbS10pCi0KLQotLyogWVlfTE9DQVRJT05fUFJJTlQgLS0gUHJpbnQgdGhlIGxvY2F0aW9uIG9u
IHRoZSBzdHJlYW0uCi0gICBUaGlzIG1hY3JvIHdhcyBub3QgbWFuZGF0ZWQgb3JpZ2luYWxseTog
ZGVmaW5lIG9ubHkgaWYgd2Uga25vdwotICAgd2Ugd29uJ3QgYnJlYWsgdXNlciBjb2RlOiB3aGVu
IHRoZXNlIGFyZSB0aGUgbG9jYXRpb25zIHdlIGtub3cuICAqLwotCi0jaWZuZGVmIFlZX0xPQ0FU
SU9OX1BSSU5UCi0jIGlmIGRlZmluZWQgWVlMVFlQRV9JU19UUklWSUFMICYmIFlZTFRZUEVfSVNf
VFJJVklBTAotCi0vKiBQcmludCAqWVlMT0NQIG9uIFlZTy4gIFByaXZhdGUsIGRvIG5vdCByZWx5
IG9uIGl0cyBleGlzdGVuY2UuICovCi0KLV9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQotI2lm
IChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRl
ZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB1bnNpZ25lZAot
eXlfbG9jYXRpb25fcHJpbnRfIChGSUxFICp5eW8sIFlZTFRZUEUgY29uc3QgKiBjb25zdCB5eWxv
Y3ApCi0jZWxzZQotc3RhdGljIHVuc2lnbmVkCi15eV9sb2NhdGlvbl9wcmludF8gKHl5bywgeXls
b2NwKQotICAgIEZJTEUgKnl5bzsKLSAgICBZWUxUWVBFIGNvbnN0ICogY29uc3QgeXlsb2NwOwot
I2VuZGlmCi17Ci0gIHVuc2lnbmVkIHJlcyA9IDA7Ci0gIGludCBlbmRfY29sID0gMCAhPSB5eWxv
Y3AtPmxhc3RfY29sdW1uID8geXlsb2NwLT5sYXN0X2NvbHVtbiAtIDEgOiAwOwotICBpZiAoMCA8
PSB5eWxvY3AtPmZpcnN0X2xpbmUpCi0gICAgewotICAgICAgcmVzICs9IGZwcmludGYgKHl5bywg
IiVkIiwgeXlsb2NwLT5maXJzdF9saW5lKTsKLSAgICAgIGlmICgwIDw9IHl5bG9jcC0+Zmlyc3Rf
Y29sdW1uKQotICAgICAgICByZXMgKz0gZnByaW50ZiAoeXlvLCAiLiVkIiwgeXlsb2NwLT5maXJz
dF9jb2x1bW4pOwotICAgIH0KLSAgaWYgKDAgPD0geXlsb2NwLT5sYXN0X2xpbmUpCi0gICAgewot
ICAgICAgaWYgKHl5bG9jcC0+Zmlyc3RfbGluZSA8IHl5bG9jcC0+bGFzdF9saW5lKQotICAgICAg
ICB7Ci0gICAgICAgICAgcmVzICs9IGZwcmludGYgKHl5bywgIi0lZCIsIHl5bG9jcC0+bGFzdF9s
aW5lKTsKLSAgICAgICAgICBpZiAoMCA8PSBlbmRfY29sKQotICAgICAgICAgICAgcmVzICs9IGZw
cmludGYgKHl5bywgIi4lZCIsIGVuZF9jb2wpOwotICAgICAgICB9Ci0gICAgICBlbHNlIGlmICgw
IDw9IGVuZF9jb2wgJiYgeXlsb2NwLT5maXJzdF9jb2x1bW4gPCBlbmRfY29sKQotICAgICAgICBy
ZXMgKz0gZnByaW50ZiAoeXlvLCAiLSVkIiwgZW5kX2NvbCk7Ci0gICAgfQotICByZXR1cm4gcmVz
OwotIH0KLQotIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykgICAgICAgICAg
XAotICB5eV9sb2NhdGlvbl9wcmludF8gKEZpbGUsICYoTG9jKSkKLQotIyBlbHNlCi0jICBkZWZp
bmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKSAoKHZvaWQpIDApCi0jIGVuZGlmCi0jZW5k
aWYKLQotCi0vKiBZWUxFWCAtLSBjYWxsaW5nIGB5eWxleCcgd2l0aCB0aGUgcmlnaHQgYXJndW1l
bnRzLiAgKi8KLSNpZmRlZiBZWUxFWF9QQVJBTQotIyBkZWZpbmUgWVlMRVggeXlsZXggKCZ5eWx2
YWwsICZ5eWxsb2MsIFlZTEVYX1BBUkFNKQotI2Vsc2UKLSMgZGVmaW5lIFlZTEVYIHl5bGV4ICgm
eXlsdmFsLCAmeXlsbG9jKQotI2VuZGlmCi0KLS8qIEVuYWJsZSBkZWJ1Z2dpbmcgaWYgcmVxdWVz
dGVkLiAgKi8KLSNpZiBZWURFQlVHCi0KLSMgaWZuZGVmIFlZRlBSSU5URgotIyAgaW5jbHVkZSA8
c3RkaW8uaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgZGVmaW5lIFlZ
RlBSSU5URiBmcHJpbnRmCi0jIGVuZGlmCi0KLSMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQkJCVwK
LWRvIHsJCQkJCQlcCi0gIGlmICh5eWRlYnVnKQkJCQkJXAotICAgIFlZRlBSSU5URiBBcmdzOwkJ
CQlcCi19IHdoaWxlIChZWUlEICgwKSkKLQotIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxl
LCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCQkJICBcCi1kbyB7CQkJCQkJCQkJICBcCi0gIGlmICh5
eWRlYnVnKQkJCQkJCQkJICBcCi0gICAgewkJCQkJCQkJCSAgXAotICAgICAgWVlGUFJJTlRGIChz
dGRlcnIsICIlcyAiLCBUaXRsZSk7CQkJCQkgIFwKLSAgICAgIHl5X3N5bWJvbF9wcmludCAoc3Rk
ZXJyLAkJCQkJCSAgXAotCQkgIFR5cGUsIFZhbHVlLCBMb2NhdGlvbiwgY29udGV4dCk7IFwKLSAg
ICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsJCQkJCQkgIFwKLSAgICB9CQkJCQkJCQkJICBc
Ci19IHdoaWxlIChZWUlEICgwKSkKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLgotfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKLWAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qQVJHU1VTRUQqLwotI2lmIChkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3Bs
dXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xfdmFsdWVfcHJp
bnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2
YWx1ZXAsIFlZTFRZUEUgY29uc3QgKiBjb25zdCB5eWxvY2F0aW9ucCwgVFBhcnNlQ29udGV4dCog
Y29udGV4dCkKLSNlbHNlCi1zdGF0aWMgdm9pZAoteXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91
dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAsIGNvbnRleHQpCi0gICAgRklMRSAq
eXlvdXRwdXQ7Ci0gICAgaW50IHl5dHlwZTsKLSAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2
YWx1ZXA7Ci0gICAgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jYXRpb25wOwotICAgIFRQYXJz
ZUNvbnRleHQqIGNvbnRleHQ7Ci0jZW5kaWYKLXsKLSAgRklMRSAqeXlvID0geXlvdXRwdXQ7Ci0g
IFlZVVNFICh5eW8pOwotICBpZiAoIXl5dmFsdWVwKQotICAgIHJldHVybjsKLSAgWVlVU0UgKHl5
bG9jYXRpb25wKTsKLSAgWVlVU0UgKGNvbnRleHQpOwotIyBpZmRlZiBZWVBSSU5UCi0gIGlmICh5
eXR5cGUgPCBZWU5UT0tFTlMpCi0gICAgWVlQUklOVCAoeXlvdXRwdXQsIHl5dG9rbnVtW3l5dHlw
ZV0sICp5eXZhbHVlcCk7Ci0jIGVsc2UKLSAgWVlVU0UgKHl5b3V0cHV0KTsKLSMgZW5kaWYKLSAg
c3dpdGNoICh5eXR5cGUpCi0gICAgewotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotfQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IFByaW50
IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KLQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNf
XyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0
YXRpYyB2b2lkCi15eV9zeW1ib2xfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZ
WVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXAsIFlZTFRZUEUgY29uc3QgKiBjb25zdCB5eWxv
Y2F0aW9ucCwgVFBhcnNlQ29udGV4dCogY29udGV4dCkKLSNlbHNlCi1zdGF0aWMgdm9pZAoteXlf
c3ltYm9sX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAsIGNv
bnRleHQpCi0gICAgRklMRSAqeXlvdXRwdXQ7Ci0gICAgaW50IHl5dHlwZTsKLSAgICBZWVNUWVBF
IGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7Ci0gICAgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9j
YXRpb25wOwotICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQ7Ci0jZW5kaWYKLXsKLSAgaWYgKHl5
dHlwZSA8IFlZTlRPS0VOUykKLSAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAidG9rZW4gJXMgKCIs
IHl5dG5hbWVbeXl0eXBlXSk7Ci0gIGVsc2UKLSAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAibnRl
cm0gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7Ci0KLSAgWVlfTE9DQVRJT05fUFJJTlQgKHl5b3V0
cHV0LCAqeXlsb2NhdGlvbnApOwotICBZWUZQUklOVEYgKHl5b3V0cHV0LCAiOiAiKTsKLSAgeXlf
c3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlv
bnAsIGNvbnRleHQpOwotICBZWUZQUklOVEYgKHl5b3V0cHV0LCAiKSIpOwotfQotCi0vKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS4KLXwgeXlfc3RhY2tfcHJpbnQgLS0gUHJpbnQgdGhlIHN0YXRlIHN0YWNrIGZyb20gaXRz
IEJPVFRPTSB1cCB0byBpdHMgfAotfCBUT1AgKGluY2x1ZGVkKS4gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmIChk
ZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmlu
ZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15eV9zdGFj
a19wcmludCAoeXl0eXBlX2ludDE2ICp5eWJvdHRvbSwgeXl0eXBlX2ludDE2ICp5eXRvcCkKLSNl
bHNlCi1zdGF0aWMgdm9pZAoteXlfc3RhY2tfcHJpbnQgKHl5Ym90dG9tLCB5eXRvcCkKLSAgICB5
eXR5cGVfaW50MTYgKnl5Ym90dG9tOwotICAgIHl5dHlwZV9pbnQxNiAqeXl0b3A7Ci0jZW5kaWYK
LXsKLSAgWVlGUFJJTlRGIChzdGRlcnIsICJTdGFjayBub3ciKTsKLSAgZm9yICg7IHl5Ym90dG9t
IDw9IHl5dG9wOyB5eWJvdHRvbSsrKQotICAgIHsKLSAgICAgIGludCB5eWJvdCA9ICp5eWJvdHRv
bTsKLSAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiICVkIiwgeXlib3QpOwotICAgIH0KLSAgWVlG
UFJJTlRGIChzdGRlcnIsICJcbiIpOwotfQotCi0jIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0
b20sIFRvcCkJCQkJXAotZG8gewkJCQkJCQkJXAotICBpZiAoeXlkZWJ1ZykJCQkJCQkJXAotICAg
IHl5X3N0YWNrX3ByaW50ICgoQm90dG9tKSwgKFRvcCkpOwkJCQlcCi19IHdoaWxlIChZWUlEICgw
KSkKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS4KLXwgUmVwb3J0IHRoYXQgdGhlIFlZUlVMRSBpcyBnb2luZyB0byBiZSByZWR1Y2VkLiAgfAot
YC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNp
ZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBk
ZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlf
cmVkdWNlX3ByaW50IChZWVNUWVBFICp5eXZzcCwgWVlMVFlQRSAqeXlsc3AsIGludCB5eXJ1bGUs
IFRQYXJzZUNvbnRleHQqIGNvbnRleHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5X3JlZHVjZV9w
cmludCAoeXl2c3AsIHl5bHNwLCB5eXJ1bGUsIGNvbnRleHQpCi0gICAgWVlTVFlQRSAqeXl2c3A7
Ci0gICAgWVlMVFlQRSAqeXlsc3A7Ci0gICAgaW50IHl5cnVsZTsKLSAgICBUUGFyc2VDb250ZXh0
KiBjb250ZXh0OwotI2VuZGlmCi17Ci0gIGludCB5eW5yaHMgPSB5eXIyW3l5cnVsZV07Ci0gIGlu
dCB5eWk7Ci0gIHVuc2lnbmVkIGxvbmcgaW50IHl5bG5vID0geXlybGluZVt5eXJ1bGVdOwotICBZ
WUZQUklOVEYgKHN0ZGVyciwgIlJlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgJWQgKGxpbmUgJWx1KTpc
biIsCi0JICAgICB5eXJ1bGUgLSAxLCB5eWxubyk7Ci0gIC8qIFRoZSBzeW1ib2xzIGJlaW5nIHJl
ZHVjZWQuICAqLwotICBmb3IgKHl5aSA9IDA7IHl5aSA8IHl5bnJoczsgeXlpKyspCi0gICAgewot
ICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAxKTsKLSAgICAgIHl5
X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNbeXlydWxlXSArIHl5aV0sCi0JCSAg
ICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkKLQkJICAgICAgICwgJih5eWxzcFso
eXlpICsgMSkgLSAoeXlucmhzKV0pCQkgICAgICAgLCBjb250ZXh0KTsKLSAgICAgIFlZRlBSSU5U
RiAoc3RkZXJyLCAiXG4iKTsKLSAgICB9Ci19Ci0KLSMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChS
dWxlKQkJXAotZG8gewkJCQkJXAotICBpZiAoeXlkZWJ1ZykJCQkJXAotICAgIHl5X3JlZHVjZV9w
cmludCAoeXl2c3AsIHl5bHNwLCBSdWxlLCBjb250ZXh0KTsgXAotfSB3aGlsZSAoWVlJRCAoMCkp
Ci0KLS8qIE5vbnplcm8gbWVhbnMgcHJpbnQgcGFyc2UgdHJhY2UuICBJdCBpcyBsZWZ0IHVuaW5p
dGlhbGl6ZWQgc28gdGhhdAotICAgbXVsdGlwbGUgcGFyc2VycyBjYW4gY29leGlzdC4gICovCi1p
bnQgeXlkZWJ1ZzsKLSNlbHNlIC8qICFZWURFQlVHICovCi0jIGRlZmluZSBZWURQUklOVEYoQXJn
cykKLSMgZGVmaW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9u
KQotIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApCi0jIGRlZmluZSBZWV9SRURV
Q0VfUFJJTlQoUnVsZSkKLSNlbmRpZiAvKiAhWVlERUJVRyAqLwotCi0KLS8qIFlZSU5JVERFUFRI
IC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAgKi8KLSNpZm5kZWYJWVlJ
TklUREVQVEgKLSMgZGVmaW5lIFlZSU5JVERFUFRIIDIwMAotI2VuZGlmCi0KLS8qIFlZTUFYREVQ
VEggLS0gbWF4aW11bSBzaXplIHRoZSBzdGFja3MgY2FuIGdyb3cgdG8gKGVmZmVjdGl2ZSBvbmx5
Ci0gICBpZiB0aGUgYnVpbHQtaW4gc3RhY2sgZXh0ZW5zaW9uIG1ldGhvZCBpcyB1c2VkKS4KLQot
ICAgRG8gbm90IG1ha2UgdGhpcyB2YWx1ZSB0b28gbGFyZ2U7IHRoZSByZXN1bHRzIGFyZSB1bmRl
ZmluZWQgaWYKLSAgIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA8IFlZU1RBQ0tfQllURVMgKFlZTUFY
REVQVEgpCi0gICBldmFsdWF0ZWQgd2l0aCBpbmZpbml0ZS1wcmVjaXNpb24gaW50ZWdlciBhcml0
aG1ldGljLiAgKi8KLQotI2lmbmRlZiBZWU1BWERFUFRICi0jIGRlZmluZSBZWU1BWERFUFRIIDEw
MDAwCi0jZW5kaWYKLQotCi0jaWYgWVlFUlJPUl9WRVJCT1NFCi0KLSMgaWZuZGVmIHl5c3RybGVu
Ci0jICBpZiBkZWZpbmVkIF9fR0xJQkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdfSAotIyAgIGRlZmlu
ZSB5eXN0cmxlbiBzdHJsZW4KLSMgIGVsc2UKLS8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIFlZU1RS
LiAgKi8KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAot
ICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMg
WVlTSVpFX1QKLXl5c3RybGVuIChjb25zdCBjaGFyICp5eXN0cikKLSNlbHNlCi1zdGF0aWMgWVlT
SVpFX1QKLXl5c3RybGVuICh5eXN0cikKLSAgICBjb25zdCBjaGFyICp5eXN0cjsKLSNlbmRpZgot
ewotICBZWVNJWkVfVCB5eWxlbjsKLSAgZm9yICh5eWxlbiA9IDA7IHl5c3RyW3l5bGVuXTsgeXls
ZW4rKykKLSAgICBjb250aW51ZTsKLSAgcmV0dXJuIHl5bGVuOwotfQotIyAgZW5kaWYKLSMgZW5k
aWYKLQotIyBpZm5kZWYgeXlzdHBjcHkKLSMgIGlmIGRlZmluZWQgX19HTElCQ19fICYmIGRlZmlu
ZWQgX1NUUklOR19IICYmIGRlZmluZWQgX0dOVV9TT1VSQ0UKLSMgICBkZWZpbmUgeXlzdHBjcHkg
c3RwY3B5Ci0jICBlbHNlCi0vKiBDb3B5IFlZU1JDIHRvIFlZREVTVCwgcmV0dXJuaW5nIHRoZSBh
ZGRyZXNzIG9mIHRoZSB0ZXJtaW5hdGluZyAnXDAnIGluCi0gICBZWURFU1QuICAqLwotI2lmIChk
ZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmlu
ZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyBjaGFyICoKLXl5c3Rw
Y3B5IChjaGFyICp5eWRlc3QsIGNvbnN0IGNoYXIgKnl5c3JjKQotI2Vsc2UKLXN0YXRpYyBjaGFy
ICoKLXl5c3RwY3B5ICh5eWRlc3QsIHl5c3JjKQotICAgIGNoYXIgKnl5ZGVzdDsKLSAgICBjb25z
dCBjaGFyICp5eXNyYzsKLSNlbmRpZgotewotICBjaGFyICp5eWQgPSB5eWRlc3Q7Ci0gIGNvbnN0
IGNoYXIgKnl5cyA9IHl5c3JjOwotCi0gIHdoaWxlICgoKnl5ZCsrID0gKnl5cysrKSAhPSAnXDAn
KQotICAgIGNvbnRpbnVlOwotCi0gIHJldHVybiB5eWQgLSAxOwotfQotIyAgZW5kaWYKLSMgZW5k
aWYKLQotIyBpZm5kZWYgeXl0bmFtZXJyCi0vKiBDb3B5IHRvIFlZUkVTIHRoZSBjb250ZW50cyBv
ZiBZWVNUUiBhZnRlciBzdHJpcHBpbmcgYXdheSB1bm5lY2Vzc2FyeQotICAgcXVvdGVzIGFuZCBi
YWNrc2xhc2hlcywgc28gdGhhdCBpdCdzIHN1aXRhYmxlIGZvciB5eWVycm9yLiAgVGhlCi0gICBo
ZXVyaXN0aWMgaXMgdGhhdCBkb3VibGUtcXVvdGluZyBpcyB1bm5lY2Vzc2FyeSB1bmxlc3MgdGhl
IHN0cmluZwotICAgY29udGFpbnMgYW4gYXBvc3Ryb3BoZSwgYSBjb21tYSwgb3IgYmFja3NsYXNo
IChvdGhlciB0aGFuCi0gICBiYWNrc2xhc2gtYmFja3NsYXNoKS4gIFlZU1RSIGlzIHRha2VuIGZy
b20geXl0bmFtZS4gIElmIFlZUkVTIGlzCi0gICBudWxsLCBkbyBub3QgY29weTsgaW5zdGVhZCwg
cmV0dXJuIHRoZSBsZW5ndGggb2Ygd2hhdCB0aGUgcmVzdWx0Ci0gICB3b3VsZCBoYXZlIGJlZW4u
ICAqLwotc3RhdGljIFlZU0laRV9UCi15eXRuYW1lcnIgKGNoYXIgKnl5cmVzLCBjb25zdCBjaGFy
ICp5eXN0cikKLXsKLSAgaWYgKCp5eXN0ciA9PSAnIicpCi0gICAgewotICAgICAgWVlTSVpFX1Qg
eXluID0gMDsKLSAgICAgIGNoYXIgY29uc3QgKnl5cCA9IHl5c3RyOwotCi0gICAgICBmb3IgKDs7
KQotCXN3aXRjaCAoKisreXlwKQotCSAgewotCSAgY2FzZSAnXCcnOgotCSAgY2FzZSAnLCc6Ci0J
ICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKLQotCSAgY2FzZSAnXFwnOgotCSAgICBpZiAo
KisreXlwICE9ICdcXCcpCi0JICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOwotCSAgICAv
KiBGYWxsIHRocm91Z2guICAqLwotCSAgZGVmYXVsdDoKLQkgICAgaWYgKHl5cmVzKQotCSAgICAg
IHl5cmVzW3l5bl0gPSAqeXlwOwotCSAgICB5eW4rKzsKLQkgICAgYnJlYWs7Ci0KLQkgIGNhc2Ug
JyInOgotCSAgICBpZiAoeXlyZXMpCi0JICAgICAgeXlyZXNbeXluXSA9ICdcMCc7Ci0JICAgIHJl
dHVybiB5eW47Ci0JICB9Ci0gICAgZG9fbm90X3N0cmlwX3F1b3RlczogOwotICAgIH0KLQotICBp
ZiAoISB5eXJlcykKLSAgICByZXR1cm4geXlzdHJsZW4gKHl5c3RyKTsKLQotICByZXR1cm4geXlz
dHBjcHkgKHl5cmVzLCB5eXN0cikgLSB5eXJlczsKLX0KLSMgZW5kaWYKLQotLyogQ29weSBpbnRv
ICpZWU1TRywgd2hpY2ggaXMgb2Ygc2l6ZSAqWVlNU0dfQUxMT0MsIGFuIGVycm9yIG1lc3NhZ2UK
LSAgIGFib3V0IHRoZSB1bmV4cGVjdGVkIHRva2VuIFlZVE9LRU4gZm9yIHRoZSBzdGF0ZSBzdGFj
ayB3aG9zZSB0b3AgaXMKLSAgIFlZU1NQLgotCi0gICBSZXR1cm4gMCBpZiAqWVlNU0cgd2FzIHN1
Y2Nlc3NmdWxseSB3cml0dGVuLiAgUmV0dXJuIDEgaWYgKllZTVNHIGlzCi0gICBub3QgbGFyZ2Ug
ZW5vdWdoIHRvIGhvbGQgdGhlIG1lc3NhZ2UuICBJbiB0aGF0IGNhc2UsIGFsc28gc2V0Ci0gICAq
WVlNU0dfQUxMT0MgdG8gdGhlIHJlcXVpcmVkIG51bWJlciBvZiBieXRlcy4gIFJldHVybiAyIGlm
IHRoZQotICAgcmVxdWlyZWQgbnVtYmVyIG9mIGJ5dGVzIGlzIHRvbyBsYXJnZSB0byBzdG9yZS4g
ICovCi1zdGF0aWMgaW50Ci15eXN5bnRheF9lcnJvciAoWVlTSVpFX1QgKnl5bXNnX2FsbG9jLCBj
aGFyICoqeXltc2csCi0gICAgICAgICAgICAgICAgeXl0eXBlX2ludDE2ICp5eXNzcCwgaW50IHl5
dG9rZW4pCi17Ci0gIFlZU0laRV9UIHl5c2l6ZTAgPSB5eXRuYW1lcnIgKFlZX05VTEwsIHl5dG5h
bWVbeXl0b2tlbl0pOwotICBZWVNJWkVfVCB5eXNpemUgPSB5eXNpemUwOwotICBlbnVtIHsgWVlF
UlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSA9IDUgfTsKLSAgLyogSW50ZXJuYXRpb25hbGl6ZWQg
Zm9ybWF0IHN0cmluZy4gKi8KLSAgY29uc3QgY2hhciAqeXlmb3JtYXQgPSBZWV9OVUxMOwotICAv
KiBBcmd1bWVudHMgb2YgeXlmb3JtYXQuICovCi0gIGNoYXIgY29uc3QgKnl5YXJnW1lZRVJST1Jf
VkVSQk9TRV9BUkdTX01BWElNVU1dOwotICAvKiBOdW1iZXIgb2YgcmVwb3J0ZWQgdG9rZW5zIChv
bmUgZm9yIHRoZSAidW5leHBlY3RlZCIsIG9uZSBwZXIKLSAgICAgImV4cGVjdGVkIikuICovCi0g
IGludCB5eWNvdW50ID0gMDsKLQotICAvKiBUaGVyZSBhcmUgbWFueSBwb3NzaWJpbGl0aWVzIGhl
cmUgdG8gY29uc2lkZXI6Ci0gICAgIC0gQXNzdW1lIFlZRkFJTCBpcyBub3QgdXNlZC4gIEl0J3Mg
dG9vIGZsYXdlZCB0byBjb25zaWRlci4gIFNlZQotICAgICAgIDxodHRwOi8vbGlzdHMuZ251Lm9y
Zy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDA5LTEyL21zZzAwMDI0Lmh0bWw+Ci0gICAg
ICAgZm9yIGRldGFpbHMuICBZWUVSUk9SIGlzIGZpbmUgYXMgaXQgZG9lcyBub3QgaW52b2tlIHRo
aXMKLSAgICAgICBmdW5jdGlvbi4KLSAgICAgLSBJZiB0aGlzIHN0YXRlIGlzIGEgY29uc2lzdGVu
dCBzdGF0ZSB3aXRoIGEgZGVmYXVsdCBhY3Rpb24sIHRoZW4KLSAgICAgICB0aGUgb25seSB3YXkg
dGhpcyBmdW5jdGlvbiB3YXMgaW52b2tlZCBpcyBpZiB0aGUgZGVmYXVsdCBhY3Rpb24KLSAgICAg
ICBpcyBhbiBlcnJvciBhY3Rpb24uICBJbiB0aGF0IGNhc2UsIGRvbid0IGNoZWNrIGZvciBleHBl
Y3RlZAotICAgICAgIHRva2VucyBiZWNhdXNlIHRoZXJlIGFyZSBub25lLgotICAgICAtIFRoZSBv
bmx5IHdheSB0aGVyZSBjYW4gYmUgbm8gbG9va2FoZWFkIHByZXNlbnQgKGluIHl5Y2hhcikgaXMg
aWYKLSAgICAgICB0aGlzIHN0YXRlIGlzIGEgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgZGVmYXVs
dCBhY3Rpb24uICBUaHVzLAotICAgICAgIGRldGVjdGluZyB0aGUgYWJzZW5jZSBvZiBhIGxvb2th
aGVhZCBpcyBzdWZmaWNpZW50IHRvIGRldGVybWluZQotICAgICAgIHRoYXQgdGhlcmUgaXMgbm8g
dW5leHBlY3RlZCBvciBleHBlY3RlZCB0b2tlbiB0byByZXBvcnQuICBJbiB0aGF0Ci0gICAgICAg
Y2FzZSwganVzdCByZXBvcnQgYSBzaW1wbGUgInN5bnRheCBlcnJvciIuCi0gICAgIC0gRG9uJ3Qg
YXNzdW1lIHRoZXJlIGlzbid0IGEgbG9va2FoZWFkIGp1c3QgYmVjYXVzZSB0aGlzIHN0YXRlIGlz
IGEKLSAgICAgICBjb25zaXN0ZW50IHN0YXRlIHdpdGggYSBkZWZhdWx0IGFjdGlvbi4gIFRoZXJl
IG1pZ2h0IGhhdmUgYmVlbiBhCi0gICAgICAgcHJldmlvdXMgaW5jb25zaXN0ZW50IHN0YXRlLCBj
b25zaXN0ZW50IHN0YXRlIHdpdGggYSBub24tZGVmYXVsdAotICAgICAgIGFjdGlvbiwgb3IgdXNl
ciBzZW1hbnRpYyBhY3Rpb24gdGhhdCBtYW5pcHVsYXRlZCB5eWNoYXIuCi0gICAgIC0gT2YgY291
cnNlLCB0aGUgZXhwZWN0ZWQgdG9rZW4gbGlzdCBkZXBlbmRzIG9uIHN0YXRlcyB0byBoYXZlCi0g
ICAgICAgY29ycmVjdCBsb29rYWhlYWQgaW5mb3JtYXRpb24sIGFuZCBpdCBkZXBlbmRzIG9uIHRo
ZSBwYXJzZXIgbm90Ci0gICAgICAgdG8gcGVyZm9ybSBleHRyYSByZWR1Y3Rpb25zIGFmdGVyIGZl
dGNoaW5nIGEgbG9va2FoZWFkIGZyb20gdGhlCi0gICAgICAgc2Nhbm5lciBhbmQgYmVmb3JlIGRl
dGVjdGluZyBhIHN5bnRheCBlcnJvci4gIFRodXMsIHN0YXRlIG1lcmdpbmcKLSAgICAgICAoZnJv
bSBMQUxSIG9yIElFTFIpIGFuZCBkZWZhdWx0IHJlZHVjdGlvbnMgY29ycnVwdCB0aGUgZXhwZWN0
ZWQKLSAgICAgICB0b2tlbiBsaXN0LiAgSG93ZXZlciwgdGhlIGxpc3QgaXMgY29ycmVjdCBmb3Ig
Y2Fub25pY2FsIExSIHdpdGgKLSAgICAgICBvbmUgZXhjZXB0aW9uOiBpdCB3aWxsIHN0aWxsIGNv
bnRhaW4gYW55IHRva2VuIHRoYXQgd2lsbCBub3QgYmUKLSAgICAgICBhY2NlcHRlZCBkdWUgdG8g
YW4gZXJyb3IgYWN0aW9uIGluIGEgbGF0ZXIgc3RhdGUuCi0gICovCi0gIGlmICh5eXRva2VuICE9
IFlZRU1QVFkpCi0gICAgewotICAgICAgaW50IHl5biA9IHl5cGFjdFsqeXlzc3BdOwotICAgICAg
eXlhcmdbeXljb3VudCsrXSA9IHl5dG5hbWVbeXl0b2tlbl07Ci0gICAgICBpZiAoIXl5cGFjdF92
YWx1ZV9pc19kZWZhdWx0ICh5eW4pKQotICAgICAgICB7Ci0gICAgICAgICAgLyogU3RhcnQgWVlY
IGF0IC1ZWU4gaWYgbmVnYXRpdmUgdG8gYXZvaWQgbmVnYXRpdmUgaW5kZXhlcyBpbgotICAgICAg
ICAgICAgIFlZQ0hFQ0suICBJbiBvdGhlciB3b3Jkcywgc2tpcCB0aGUgZmlyc3QgLVlZTiBhY3Rp
b25zIGZvcgotICAgICAgICAgICAgIHRoaXMgc3RhdGUgYmVjYXVzZSB0aGV5IGFyZSBkZWZhdWx0
IGFjdGlvbnMuICAqLwotICAgICAgICAgIGludCB5eXhiZWdpbiA9IHl5biA8IDAgPyAteXluIDog
MDsKLSAgICAgICAgICAvKiBTdGF5IHdpdGhpbiBib3VuZHMgb2YgYm90aCB5eWNoZWNrIGFuZCB5
eXRuYW1lLiAgKi8KLSAgICAgICAgICBpbnQgeXljaGVja2xpbSA9IFlZTEFTVCAtIHl5biArIDE7
Ci0gICAgICAgICAgaW50IHl5eGVuZCA9IHl5Y2hlY2tsaW0gPCBZWU5UT0tFTlMgPyB5eWNoZWNr
bGltIDogWVlOVE9LRU5TOwotICAgICAgICAgIGludCB5eXg7Ci0KLSAgICAgICAgICBmb3IgKHl5
eCA9IHl5eGJlZ2luOyB5eXggPCB5eXhlbmQ7ICsreXl4KQotICAgICAgICAgICAgaWYgKHl5Y2hl
Y2tbeXl4ICsgeXluXSA9PSB5eXggJiYgeXl4ICE9IFlZVEVSUk9SCi0gICAgICAgICAgICAgICAg
JiYgIXl5dGFibGVfdmFsdWVfaXNfZXJyb3IgKHl5dGFibGVbeXl4ICsgeXluXSkpCi0gICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoeXljb3VudCA9PSBZWUVSUk9SX1ZFUkJPU0Vf
QVJHU19NQVhJTVVNKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB5
eWNvdW50ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgeXlzaXplID0geXlzaXplMDsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgeXlhcmdbeXljb3VudCsrXSA9IHl5dG5hbWVbeXl4XTsKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICBZWVNJWkVfVCB5eXNpemUxID0geXlzaXplICsgeXl0bmFtZXJyIChZ
WV9OVUxMLCB5eXRuYW1lW3l5eF0pOwotICAgICAgICAgICAgICAgICAgaWYgKCEgKHl5c2l6ZSA8
PSB5eXNpemUxCi0gICAgICAgICAgICAgICAgICAgICAgICAgJiYgeXlzaXplMSA8PSBZWVNUQUNL
X0FMTE9DX01BWElNVU0pKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMjsKLSAgICAgICAg
ICAgICAgICAgIHl5c2l6ZSA9IHl5c2l6ZTE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgc3dpdGNoICh5eWNvdW50KQotICAgIHsKLSMg
ZGVmaW5lIFlZQ0FTRV8oTiwgUykgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgY2FzZSBO
OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHl5Zm9ybWF0ID0gUzsg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGJyZWFrCi0gICAgICBZWUNBU0VfKDAsIFlZ
Xygic3ludGF4IGVycm9yIikpOwotICAgICAgWVlDQVNFXygxLCBZWV8oInN5bnRheCBlcnJvciwg
dW5leHBlY3RlZCAlcyIpKTsKLSAgICAgIFlZQ0FTRV8oMiwgWVlfKCJzeW50YXggZXJyb3IsIHVu
ZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIpKTsKLSAgICAgIFlZQ0FTRV8oMywgWVlfKCJzeW50
YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIpKTsKLSAgICAgIFlZ
Q0FTRV8oNCwgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBv
ciAlcyBvciAlcyIpKTsKLSAgICAgIFlZQ0FTRV8oNSwgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhw
ZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIpKTsKLSMgdW5kZWYgWVlD
QVNFXwotICAgIH0KLQotICB7Ci0gICAgWVlTSVpFX1QgeXlzaXplMSA9IHl5c2l6ZSArIHl5c3Ry
bGVuICh5eWZvcm1hdCk7Ci0gICAgaWYgKCEgKHl5c2l6ZSA8PSB5eXNpemUxICYmIHl5c2l6ZTEg
PD0gWVlTVEFDS19BTExPQ19NQVhJTVVNKSkKLSAgICAgIHJldHVybiAyOwotICAgIHl5c2l6ZSA9
IHl5c2l6ZTE7Ci0gIH0KLQotICBpZiAoKnl5bXNnX2FsbG9jIDwgeXlzaXplKQotICAgIHsKLSAg
ICAgICp5eW1zZ19hbGxvYyA9IDIgKiB5eXNpemU7Ci0gICAgICBpZiAoISAoeXlzaXplIDw9ICp5
eW1zZ19hbGxvYwotICAgICAgICAgICAgICYmICp5eW1zZ19hbGxvYyA8PSBZWVNUQUNLX0FMTE9D
X01BWElNVU0pKQotICAgICAgICAqeXltc2dfYWxsb2MgPSBZWVNUQUNLX0FMTE9DX01BWElNVU07
Ci0gICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgLyogQXZvaWQgc3ByaW50ZiwgYXMgdGhhdCBp
bmZyaW5nZXMgb24gdGhlIHVzZXIncyBuYW1lIHNwYWNlLgotICAgICBEb24ndCBoYXZlIHVuZGVm
aW5lZCBiZWhhdmlvciBldmVuIGlmIHRoZSB0cmFuc2xhdGlvbgotICAgICBwcm9kdWNlZCBhIHN0
cmluZyB3aXRoIHRoZSB3cm9uZyBudW1iZXIgb2YgIiVzInMuICAqLwotICB7Ci0gICAgY2hhciAq
eXlwID0gKnl5bXNnOwotICAgIGludCB5eWkgPSAwOwotICAgIHdoaWxlICgoKnl5cCA9ICp5eWZv
cm1hdCkgIT0gJ1wwJykKLSAgICAgIGlmICgqeXlwID09ICclJyAmJiB5eWZvcm1hdFsxXSA9PSAn
cycgJiYgeXlpIDwgeXljb3VudCkKLSAgICAgICAgewotICAgICAgICAgIHl5cCArPSB5eXRuYW1l
cnIgKHl5cCwgeXlhcmdbeXlpKytdKTsKLSAgICAgICAgICB5eWZvcm1hdCArPSAyOwotICAgICAg
ICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICB5eXArKzsKLSAgICAgICAgICB5
eWZvcm1hdCsrOwotICAgICAgICB9Ci0gIH0KLSAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYgLyogWVlF
UlJPUl9WRVJCT1NFICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0uCi18IFJlbGVhc2UgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHRvIHRoaXMgc3lt
Ym9sLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ki8KLQotLypBUkdTVVNFRCovCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5
OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0Nf
VkVSKQotc3RhdGljIHZvaWQKLXl5ZGVzdHJ1Y3QgKGNvbnN0IGNoYXIgKnl5bXNnLCBpbnQgeXl0
eXBlLCBZWVNUWVBFICp5eXZhbHVlcCwgWVlMVFlQRSAqeXlsb2NhdGlvbnAsIFRQYXJzZUNvbnRl
eHQqIGNvbnRleHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5ZGVzdHJ1Y3QgKHl5bXNnLCB5eXR5
cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCwgY29udGV4dCkKLSAgICBjb25zdCBjaGFyICp5eW1z
ZzsKLSAgICBpbnQgeXl0eXBlOwotICAgIFlZU1RZUEUgKnl5dmFsdWVwOwotICAgIFlZTFRZUEUg
Knl5bG9jYXRpb25wOwotICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQ7Ci0jZW5kaWYKLXsKLSAg
WVlVU0UgKHl5dmFsdWVwKTsKLSAgWVlVU0UgKHl5bG9jYXRpb25wKTsKLSAgWVlVU0UgKGNvbnRl
eHQpOwotCi0gIGlmICgheXltc2cpCi0gICAgeXltc2cgPSAiRGVsZXRpbmciOwotICBZWV9TWU1C
T0xfUFJJTlQgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCk7Ci0KLSAgc3dp
dGNoICh5eXR5cGUpCi0gICAgewotCi0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAg
ICB9Ci19Ci0KLQotCi0KLS8qLS0tLS0tLS0tLS4KLXwgeXlwYXJzZS4gIHwKLWAtLS0tLS0tLS0t
Ki8KLQotI2lmZGVmIFlZUEFSU0VfUEFSQU0KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZp
bmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmlu
ZWQgX01TQ19WRVIpCi1pbnQKLXl5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pCi0jZWxzZQot
aW50Ci15eXBhcnNlIChZWVBBUlNFX1BBUkFNKQotICAgIHZvaWQgKllZUEFSU0VfUEFSQU07Ci0j
ZW5kaWYKLSNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLwotI2lmIChkZWZpbmVkIF9fU1REQ19f
IHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMg
fHwgZGVmaW5lZCBfTVNDX1ZFUikKLWludAoteXlwYXJzZSAoVFBhcnNlQ29udGV4dCogY29udGV4
dCkKLSNlbHNlCi1pbnQKLXl5cGFyc2UgKGNvbnRleHQpCi0gICAgVFBhcnNlQ29udGV4dCogY29u
dGV4dDsKLSNlbmRpZgotI2VuZGlmCi17Ci0vKiBUaGUgbG9va2FoZWFkIHN5bWJvbC4gICovCi1p
bnQgeXljaGFyOwotCi0KLSNpZiBkZWZpbmVkIF9fR05VQ19fICYmIDQwNyA8PSBfX0dOVUNfXyAq
IDEwMCArIF9fR05VQ19NSU5PUl9fCi0vKiBTdXBwcmVzcyBhbiBpbmNvcnJlY3QgZGlhZ25vc3Rp
YyBhYm91dCB5eWx2YWwgYmVpbmcgdW5pbml0aWFsaXplZC4gICovCi0jIGRlZmluZSBZWV9JR05P
UkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTiBcCi0gICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9z
dGljIHB1c2giKSBcCi0gICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3Vu
aW5pdGlhbGl6ZWRcIiIpXAotICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwi
LVdtYXliZS11bmluaXRpYWxpemVkXCIiKQotIyBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VOSU5J
VElBTElaRURfRU5EIFwKLSAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgcG9wIikKLSNlbHNl
Ci0vKiBEZWZhdWx0IHZhbHVlIHVzZWQgZm9yIGluaXRpYWxpemF0aW9uLCBmb3IgcGFjaWZ5aW5n
IG9sZGVyIEdDQ3MKLSAgIG9yIG5vbi1HQ0MgY29tcGlsZXJzLiAgKi8KLXN0YXRpYyBZWVNUWVBF
IHl5dmFsX2RlZmF1bHQ7Ci0jIGRlZmluZSBZWV9JTklUSUFMX1ZBTFVFKFZhbHVlKSA9IFZhbHVl
Ci0jZW5kaWYKLXN0YXRpYyBZWUxUWVBFIHl5bG9jX2RlZmF1bHQKLSMgaWYgZGVmaW5lZCBZWUxU
WVBFX0lTX1RSSVZJQUwgJiYgWVlMVFlQRV9JU19UUklWSUFMCi0gID0geyAxLCAxLCAxLCAxIH0K
LSMgZW5kaWYKLTsKLSNpZm5kZWYgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4K
LSMgZGVmaW5lIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOCi0jIGRlZmluZSBZ
WV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9FTkQKLSNlbmRpZgotI2lmbmRlZiBZWV9JTklU
SUFMX1ZBTFVFCi0jIGRlZmluZSBZWV9JTklUSUFMX1ZBTFVFKFZhbHVlKSAvKiBOb3RoaW5nLiAq
LwotI2VuZGlmCi0KLS8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9va2FoZWFkIHN5bWJv
bC4gICovCi1ZWVNUWVBFIHl5bHZhbCBZWV9JTklUSUFMX1ZBTFVFKHl5dmFsX2RlZmF1bHQpOwot
Ci0vKiBMb2NhdGlvbiBkYXRhIGZvciB0aGUgbG9va2FoZWFkIHN5bWJvbC4gICovCi1ZWUxUWVBF
IHl5bGxvYyA9IHl5bG9jX2RlZmF1bHQ7Ci0KLQotICAgIC8qIE51bWJlciBvZiBzeW50YXggZXJy
b3JzIHNvIGZhci4gICovCi0gICAgaW50IHl5bmVycnM7Ci0KLSAgICBpbnQgeXlzdGF0ZTsKLSAg
ICAvKiBOdW1iZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFi
bGVkLiAgKi8KLSAgICBpbnQgeXllcnJzdGF0dXM7Ci0KLSAgICAvKiBUaGUgc3RhY2tzIGFuZCB0
aGVpciB0b29sczoKLSAgICAgICBgeXlzcyc6IHJlbGF0ZWQgdG8gc3RhdGVzLgotICAgICAgIGB5
eXZzJzogcmVsYXRlZCB0byBzZW1hbnRpYyB2YWx1ZXMuCi0gICAgICAgYHl5bHMnOiByZWxhdGVk
IHRvIGxvY2F0aW9ucy4KLQotICAgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhyb3VnaCBzZXBh
cmF0ZSBwb2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdwotICAgICAgIHRvIHJlYWxsb2NhdGUg
dGhlbSBlbHNld2hlcmUuICAqLwotCi0gICAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KLSAgICB5
eXR5cGVfaW50MTYgeXlzc2FbWVlJTklUREVQVEhdOwotICAgIHl5dHlwZV9pbnQxNiAqeXlzczsK
LSAgICB5eXR5cGVfaW50MTYgKnl5c3NwOwotCi0gICAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0
YWNrLiAgKi8KLSAgICBZWVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKLSAgICBZWVNUWVBFICp5
eXZzOwotICAgIFlZU1RZUEUgKnl5dnNwOwotCi0gICAgLyogVGhlIGxvY2F0aW9uIHN0YWNrLiAg
Ki8KLSAgICBZWUxUWVBFIHl5bHNhW1lZSU5JVERFUFRIXTsKLSAgICBZWUxUWVBFICp5eWxzOwot
ICAgIFlZTFRZUEUgKnl5bHNwOwotCi0gICAgLyogVGhlIGxvY2F0aW9ucyB3aGVyZSB0aGUgZXJy
b3Igc3RhcnRlZCBhbmQgZW5kZWQuICAqLwotICAgIFlZTFRZUEUgeXllcnJvcl9yYW5nZVszXTsK
LQotICAgIFlZU0laRV9UIHl5c3RhY2tzaXplOwotCi0gIGludCB5eW47Ci0gIGludCB5eXJlc3Vs
dDsKLSAgLyogTG9va2FoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tl
biBudW1iZXIuICAqLwotICBpbnQgeXl0b2tlbiA9IDA7Ci0gIC8qIFRoZSB2YXJpYWJsZXMgdXNl
ZCB0byByZXR1cm4gc2VtYW50aWMgdmFsdWUgYW5kIGxvY2F0aW9uIGZyb20gdGhlCi0gICAgIGFj
dGlvbiByb3V0aW5lcy4gICovCi0gIFlZU1RZUEUgeXl2YWw7Ci0gIFlZTFRZUEUgeXlsb2M7Ci0K
LSNpZiBZWUVSUk9SX1ZFUkJPU0UKLSAgLyogQnVmZmVyIGZvciBlcnJvciBtZXNzYWdlcywgYW5k
IGl0cyBhbGxvY2F0ZWQgc2l6ZS4gICovCi0gIGNoYXIgeXltc2didWZbMTI4XTsKLSAgY2hhciAq
eXltc2cgPSB5eW1zZ2J1ZjsKLSAgWVlTSVpFX1QgeXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2di
dWY7Ci0jZW5kaWYKLQotI2RlZmluZSBZWVBPUFNUQUNLKE4pICAgKHl5dnNwIC09IChOKSwgeXlz
c3AgLT0gKE4pLCB5eWxzcCAtPSAoTikpCi0KLSAgLyogVGhlIG51bWJlciBvZiBzeW1ib2xzIG9u
IHRoZSBSSFMgb2YgdGhlIHJlZHVjZWQgcnVsZS4KLSAgICAgS2VlcCB0byB6ZXJvIHdoZW4gbm8g
c3ltYm9sIHNob3VsZCBiZSBwb3BwZWQuICAqLwotICBpbnQgeXlsZW4gPSAwOwotCi0gIHl5c3Nw
ID0geXlzcyA9IHl5c3NhOwotICB5eXZzcCA9IHl5dnMgPSB5eXZzYTsKLSAgeXlsc3AgPSB5eWxz
ID0geXlsc2E7Ci0gIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7Ci0KLSAgWVlEUFJJTlRGICgo
c3RkZXJyLCAiU3RhcnRpbmcgcGFyc2VcbiIpKTsKLQotICB5eXN0YXRlID0gMDsKLSAgeXllcnJz
dGF0dXMgPSAwOwotICB5eW5lcnJzID0gMDsKLSAgeXljaGFyID0gWVlFTVBUWTsgLyogQ2F1c2Ug
YSB0b2tlbiB0byBiZSByZWFkLiAgKi8KLSAgeXlsc3BbMF0gPSB5eWxsb2M7Ci0gIGdvdG8geXlz
ZXRzdGF0ZTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5bmV3c3RhdGUgLS0gUHVzaCBhIG5ldyBzdGF0ZSwgd2hp
Y2ggaXMgZm91bmQgaW4geXlzdGF0ZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotIHl5bmV3c3RhdGU6Ci0gIC8qIElu
IGFsbCBjYXNlcywgd2hlbiB5b3UgZ2V0IGhlcmUsIHRoZSB2YWx1ZSBhbmQgbG9jYXRpb24gc3Rh
Y2tzCi0gICAgIGhhdmUganVzdCBiZWVuIHB1c2hlZC4gIFNvIHB1c2hpbmcgYSBzdGF0ZSBoZXJl
IGV2ZW5zIHRoZSBzdGFja3MuICAqLwotICB5eXNzcCsrOwotCi0geXlzZXRzdGF0ZToKLSAgKnl5
c3NwID0geXlzdGF0ZTsKLQotICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkK
LSAgICB7Ci0gICAgICAvKiBHZXQgdGhlIGN1cnJlbnQgdXNlZCBzaXplIG9mIHRoZSB0aHJlZSBz
dGFja3MsIGluIGVsZW1lbnRzLiAgKi8KLSAgICAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5c3NwIC0g
eXlzcyArIDE7Ci0KLSNpZmRlZiB5eW92ZXJmbG93Ci0gICAgICB7Ci0JLyogR2l2ZSB1c2VyIGEg
Y2hhbmNlIHRvIHJlYWxsb2NhdGUgdGhlIHN0YWNrLiAgVXNlIGNvcGllcyBvZgotCSAgIHRoZXNl
IHNvIHRoYXQgdGhlICYncyBkb24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8KLQkgICBtZW1v
cnkuICAqLwotCVlZU1RZUEUgKnl5dnMxID0geXl2czsKLQl5eXR5cGVfaW50MTYgKnl5c3MxID0g
eXlzczsKLQlZWUxUWVBFICp5eWxzMSA9IHl5bHM7Ci0KLQkvKiBFYWNoIHN0YWNrIHBvaW50ZXIg
YWRkcmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKLQkgICBkYXRhIGluIHVzZSBp
biB0aGF0IHN0YWNrLCBpbiBieXRlcy4gIFRoaXMgdXNlZCB0byBiZSBhCi0JICAgY29uZGl0aW9u
YWwgYXJvdW5kIGp1c3QgdGhlIHR3byBleHRyYSBhcmdzLCBidXQgdGhhdCBtaWdodAotCSAgIGJl
IHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLwotCXl5b3ZlcmZsb3cgKFlZ
XygibWVtb3J5IGV4aGF1c3RlZCIpLAotCQkgICAgJnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5
eXNzcCksCi0JCSAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKLQkJICAgICZ5
eWxzMSwgeXlzaXplICogc2l6ZW9mICgqeXlsc3ApLAotCQkgICAgJnl5c3RhY2tzaXplKTsKLQot
CXl5bHMgPSB5eWxzMTsKLQl5eXNzID0geXlzczE7Ci0JeXl2cyA9IHl5dnMxOwotICAgICAgfQot
I2Vsc2UgLyogbm8geXlvdmVyZmxvdyAqLwotIyBpZm5kZWYgWVlTVEFDS19SRUxPQ0FURQotICAg
ICAgZ290byB5eWV4aGF1c3RlZGxhYjsKLSMgZWxzZQotICAgICAgLyogRXh0ZW5kIHRoZSBzdGFj
ayBvdXIgb3duIHdheS4gICovCi0gICAgICBpZiAoWVlNQVhERVBUSCA8PSB5eXN0YWNrc2l6ZSkK
LQlnb3RvIHl5ZXhoYXVzdGVkbGFiOwotICAgICAgeXlzdGFja3NpemUgKj0gMjsKLSAgICAgIGlm
IChZWU1BWERFUFRIIDwgeXlzdGFja3NpemUpCi0JeXlzdGFja3NpemUgPSBZWU1BWERFUFRIOwot
Ci0gICAgICB7Ci0JeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7Ci0JdW5pb24geXlhbGxvYyAq
eXlwdHIgPQotCSAgKHVuaW9uIHl5YWxsb2MgKikgWVlTVEFDS19BTExPQyAoWVlTVEFDS19CWVRF
UyAoeXlzdGFja3NpemUpKTsKLQlpZiAoISB5eXB0cikKLQkgIGdvdG8geXlleGhhdXN0ZWRsYWI7
Ci0JWVlTVEFDS19SRUxPQ0FURSAoeXlzc19hbGxvYywgeXlzcyk7Ci0JWVlTVEFDS19SRUxPQ0FU
RSAoeXl2c19hbGxvYywgeXl2cyk7Ci0JWVlTVEFDS19SRUxPQ0FURSAoeXlsc19hbGxvYywgeXls
cyk7Ci0jICB1bmRlZiBZWVNUQUNLX1JFTE9DQVRFCi0JaWYgKHl5c3MxICE9IHl5c3NhKQotCSAg
WVlTVEFDS19GUkVFICh5eXNzMSk7Ci0gICAgICB9Ci0jIGVuZGlmCi0jZW5kaWYgLyogbm8geXlv
dmVyZmxvdyAqLwotCi0gICAgICB5eXNzcCA9IHl5c3MgKyB5eXNpemUgLSAxOwotICAgICAgeXl2
c3AgPSB5eXZzICsgeXlzaXplIC0gMTsKLSAgICAgIHl5bHNwID0geXlscyArIHl5c2l6ZSAtIDE7
Ci0KLSAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVs
dVxuIiwKLQkJICAodW5zaWduZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7Ci0KLSAgICAgIGlm
ICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQotCVlZQUJPUlQ7Ci0gICAgfQotCi0g
IFlZRFBSSU5URiAoKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7Ci0K
LSAgaWYgKHl5c3RhdGUgPT0gWVlGSU5BTCkKLSAgICBZWUFDQ0VQVDsKLQotICBnb3RvIHl5YmFj
a3VwOwotCi0vKi0tLS0tLS0tLS0tLgotfCB5eWJhY2t1cC4gIHwKLWAtLS0tLS0tLS0tLSovCi15
eWJhY2t1cDoKLQotICAvKiBEbyBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJy
ZW50IHN0YXRlLiAgUmVhZCBhCi0gICAgIGxvb2thaGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBh
bmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCi0KLSAgLyogRmlyc3QgdHJ5IHRvIGRlY2lk
ZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2thaGVhZCB0b2tlbi4gICovCi0g
IHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKLSAgaWYgKHl5cGFjdF92YWx1ZV9pc19kZWZhdWx0ICh5
eW4pKQotICAgIGdvdG8geXlkZWZhdWx0OwotCi0gIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29r
YWhlYWQgdG9rZW4gaWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCi0KLSAgLyogWVlDSEFS
IGlzIGVpdGhlciBZWUVNUFRZIG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9va2FoZWFkIHN5bWJvbC4g
ICovCi0gIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkKLSAgICB7Ci0gICAgICBZWURQUklOVEYgKChz
dGRlcnIsICJSZWFkaW5nIGEgdG9rZW46ICIpKTsKLSAgICAgIHl5Y2hhciA9IFlZTEVYOwotICAg
IH0KLQotICBpZiAoeXljaGFyIDw9IFlZRU9GKQotICAgIHsKLSAgICAgIHl5Y2hhciA9IHl5dG9r
ZW4gPSBZWUVPRjsKLSAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIk5vdyBhdCBlbmQgb2YgaW5w
dXQuXG4iKSk7Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgICAgeXl0b2tlbiA9IFlZVFJBTlNM
QVRFICh5eWNoYXIpOwotICAgICAgWVlfU1lNQk9MX1BSSU5UICgiTmV4dCB0b2tlbiBpcyIsIHl5
dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOwotICAgIH0KLQotICAvKiBJZiB0aGUgcHJvcGVyIGFj
dGlvbiBvbiBzZWVpbmcgdG9rZW4gWVlUT0tFTiBpcyB0byByZWR1Y2Ugb3IgdG8KLSAgICAgZGV0
ZWN0IGFuIGVycm9yLCB0YWtlIHRoYXQgYWN0aW9uLiAgKi8KLSAgeXluICs9IHl5dG9rZW47Ci0g
IGlmICh5eW4gPCAwIHx8IFlZTEFTVCA8IHl5biB8fCB5eWNoZWNrW3l5bl0gIT0geXl0b2tlbikK
LSAgICBnb3RvIHl5ZGVmYXVsdDsKLSAgeXluID0geXl0YWJsZVt5eW5dOwotICBpZiAoeXluIDw9
IDApCi0gICAgewotICAgICAgaWYgKHl5dGFibGVfdmFsdWVfaXNfZXJyb3IgKHl5bikpCi0gICAg
ICAgIGdvdG8geXllcnJsYWI7Ci0gICAgICB5eW4gPSAteXluOwotICAgICAgZ290byB5eXJlZHVj
ZTsKLSAgICB9Ci0KLSAgLyogQ291bnQgdG9rZW5zIHNoaWZ0ZWQgc2luY2UgZXJyb3I7IGFmdGVy
IHRocmVlLCB0dXJuIG9mZiBlcnJvcgotICAgICBzdGF0dXMuICAqLwotICBpZiAoeXllcnJzdGF0
dXMpCi0gICAgeXllcnJzdGF0dXMtLTsKLQotICAvKiBTaGlmdCB0aGUgbG9va2FoZWFkIHRva2Vu
LiAgKi8KLSAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXRva2VuLCAmeXlsdmFsLCAm
eXlsbG9jKTsKLQotICAvKiBEaXNjYXJkIHRoZSBzaGlmdGVkIHRva2VuLiAgKi8KLSAgeXljaGFy
ID0gWVlFTVBUWTsKLQotICB5eXN0YXRlID0geXluOwotICBZWV9JR05PUkVfTUFZQkVfVU5JTklU
SUFMSVpFRF9CRUdJTgotICAqKyt5eXZzcCA9IHl5bHZhbDsKLSAgWVlfSUdOT1JFX01BWUJFX1VO
SU5JVElBTElaRURfRU5ECi0gICorK3l5bHNwID0geXlsbG9jOwotICBnb3RvIHl5bmV3c3RhdGU7
Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS4KLXwgeXlkZWZhdWx0IC0tIGRvIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgdGhl
IGN1cnJlbnQgc3RhdGUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXlkZWZhdWx0OgotICB5eW4gPSB5eWRlZmFjdFt5
eXN0YXRlXTsKLSAgaWYgKHl5biA9PSAwKQotICAgIGdvdG8geXllcnJsYWI7Ci0gIGdvdG8geXly
ZWR1Y2U7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlyZWR1Y2Ug
LS0gRG8gYSByZWR1Y3Rpb24uICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwot
eXlyZWR1Y2U6Ci0gIC8qIHl5biBpcyB0aGUgbnVtYmVyIG9mIGEgcnVsZSB0byByZWR1Y2Ugd2l0
aC4gICovCi0gIHl5bGVuID0geXlyMlt5eW5dOwotCi0gIC8qIElmIFlZTEVOIGlzIG5vbnplcm8s
IGltcGxlbWVudCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYWN0aW9uOgotICAgICBgJCQgPSAk
MScuCi0KLSAgICAgT3RoZXJ3aXNlLCB0aGUgZm9sbG93aW5nIGxpbmUgc2V0cyBZWVZBTCB0byBn
YXJiYWdlLgotICAgICBUaGlzIGJlaGF2aW9yIGlzIHVuZG9jdW1lbnRlZCBhbmQgQmlzb24KLSAg
ICAgdXNlcnMgc2hvdWxkIG5vdCByZWx5IHVwb24gaXQuICBBc3NpZ25pbmcgdG8gWVlWQUwKLSAg
ICAgdW5jb25kaXRpb25hbGx5IG1ha2VzIHRoZSBwYXJzZXIgYSBiaXQgc21hbGxlciwgYW5kIGl0
IGF2b2lkcyBhCi0gICAgIEdDQyB3YXJuaW5nIHRoYXQgWVlWQUwgbWF5IGJlIHVzZWQgdW5pbml0
aWFsaXplZC4gICovCi0gIHl5dmFsID0geXl2c3BbMS15eWxlbl07Ci0KLSAgLyogRGVmYXVsdCBs
b2NhdGlvbi4gICovCi0gIFlZTExPQ19ERUZBVUxUICh5eWxvYywgKHl5bHNwIC0geXlsZW4pLCB5
eWxlbik7Ci0gIFlZX1JFRFVDRV9QUklOVCAoeXluKTsKLSAgc3dpdGNoICh5eW4pCi0gICAgewot
ICAgICAgICBjYXNlIDQ6Ci0KLSAgICB7Ci0gICAgICAgIC8vIFRoZSBzeW1ib2wgdGFibGUgc2Vh
cmNoIHdhcyBkb25lIGluIHRoZSBsZXhpY2FsIHBoYXNlCi0gICAgICAgIGNvbnN0IFRTeW1ib2wq
IHN5bWJvbCA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3ltYm9sOwotICAgICAgICBjb25zdCBU
VmFyaWFibGUqIHZhcmlhYmxlOwotICAgICAgICBpZiAoc3ltYm9sID09IDApIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgInVuZGVjbGFyZWQgaWRlbnRp
ZmllciIsICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIFRUeXBlIHR5cGUoRWJ0RmxvYXQs
IEVicFVuZGVmaW5lZCk7Ci0gICAgICAgICAgICBUVmFyaWFibGUqIGZha2VWYXJpYWJsZSA9IG5l
dyBUVmFyaWFibGUoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcsIHR5cGUpOwotICAgICAg
ICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCpmYWtlVmFyaWFibGUpOwotICAgICAg
ICAgICAgdmFyaWFibGUgPSBmYWtlVmFyaWFibGU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAvLyBUaGlzIGlkZW50aWZpZXIgY2FuIG9ubHkgYmUgYSB2YXJpYWJsZSB0eXBlIHN5bWJv
bAotICAgICAgICAgICAgaWYgKCEgc3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKLSAgICAgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSksICJ2YXJpYWJsZSBleHBlY3Rl
ZCIsICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9s
KTsKLQotICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKHZh
cmlhYmxlLT5nZXROYW1lKCkpICYmCi0gICAgICAgICAgICAgICAgIXZhcmlhYmxlLT5nZXRFeHRl
bnNpb24oKS5lbXB0eSgpICYmCi0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXh0ZW5zaW9uRXJy
b3JDaGVjaygoeXlsc3BbKDEpIC0gKDEpXSksIHZhcmlhYmxlLT5nZXRFeHRlbnNpb24oKSkpIHsK
LSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBkb24ndCBkZWxldGUgJDEuc3RyaW5nLCBpdCdzIHVzZWQgYnkg
ZXJyb3IgcmVjb3ZlcnksIGFuZCB0aGUgcG9vbAotICAgICAgICAvLyBwb3Agd2lsbCByZWNsYWlt
IHRoZSBtZW1vcnkKLQotICAgICAgICBpZiAodmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZp
ZXIoKSA9PSBFdnFDb25zdCApIHsKLSAgICAgICAgICAgIENvbnN0YW50VW5pb24qIGNvbnN0QXJy
YXkgPSB2YXJpYWJsZS0+Z2V0Q29uc3RQb2ludGVyKCk7Ci0gICAgICAgICAgICBUVHlwZSB0KHZh
cmlhYmxlLT5nZXRUeXBlKCkpOwotICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24oY29uc3RBcnJh
eSwgdCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
U3ltYm9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXROYW1lKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXls
c3BbKDEpIC0gKDEpXSkpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDU6Ci0KLSAgICB7
Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNl
IDY6Ci0KLSAgICB7Ci0gICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29u
c3RhbnRVbmlvblsxXTsKLSAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KCh5eXZzcFsoMSkg
LSAoMSldLmxleCkuaSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBl
KEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0g
ICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNzoKLQotICAgIHsKLSAgICAgICAgQ29uc3RhbnRV
bmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICB1bmlvbkFy
cmF5LT5zZXRGQ29uc3QoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5mKTsKLSAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0
YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxQ29u
c3QpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDg6
Ci0KLSAgICB7Ci0gICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3Rh
bnRVbmlvblsxXTsKLSAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KCh5eXZzcFsoMSkgLSAo
MSldLmxleCkuYik7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVi
dEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAg
IH0KLSAgICBicmVhazsKLQotICBjYXNlIDk6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDEwOgotCi0gICAgewotICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMToKLQot
ICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
YWRkSW5kZXhFeHByZXNzaW9uKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCAoeXlsc3BbKDIpIC0gKDQpXSksICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMjoKLQotICAgIHsKLSAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTM6
Ci0KLSAgICB7Ci0gICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+aXNBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3Bb
KDMpIC0gKDMpXSksICJjYW5ub3QgYXBwbHkgZG90IG9wZXJhdG9yIHRvIGFuIGFycmF5IiwgIi4i
KTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNWZWN0b3Io
KSkgewotICAgICAgICAgICAgVFZlY3RvckZpZWxkcyBmaWVsZHM7Ci0gICAgICAgICAgICBpZiAo
ISBjb250ZXh0LT5wYXJzZVZlY3RvckZpZWxkcygqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJp
bmcsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXROb21pbmFs
U2l6ZSgpLCBmaWVsZHMsICh5eWxzcFsoMykgLSAoMyldKSkpIHsKLSAgICAgICAgICAgICAgICBm
aWVsZHMubnVtID0gMTsKLSAgICAgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1swXSA9IDA7Ci0g
ICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgeyAvLyBjb25zdGFudCBmb2xkaW5n
IGZvciB2ZWN0b3IgZmllbGRzCi0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gY29udGV4dC0+YWRkQ29uc3RWZWN0b3JOb2RlKGZpZWxkcywgKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMykgLSAoMyldKSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5zZXRUeXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRCYXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldFByZWNpc2lvbigpLCBFdnFDb25zdCwgKGludCkgKCooeXl2c3BbKDMpIC0gKDMp
XS5sZXgpLnN0cmluZykuc2l6ZSgpKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIFRTdHJpbmcgdmVjdG9yU3RyaW5nID0gKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3Ry
aW5nOwotICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkU3dpenpsZShmaWVsZHMsICh5eWxzcFsoMykgLSAoMyldKSk7Ci0gICAgICAg
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZEluZGV4KEVPcFZlY3RvclN3aXp6bGUsICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5bHNwWygyKSAtICgzKV0pKTsKLSAgICAgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCks
IEV2cVRlbXBvcmFyeSwgKGludCkgdmVjdG9yU3RyaW5nLnNpemUoKSkpOwotICAgICAgICAgICAg
fQotICAgICAgICB9IGVsc2UgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5pc01hdHJpeCgpKSB7Ci0gICAgICAgICAgICBUTWF0cml4RmllbGRzIGZpZWxkczsK
LSAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnBhcnNlTWF0cml4RmllbGRzKCooeXl2c3BbKDMp
IC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldE5vbWluYWxTaXplKCksIGZpZWxkcywgKHl5bHNwWygzKSAtICgzKV0pKSkgewot
ICAgICAgICAgICAgICAgIGZpZWxkcy53aG9sZVJvdyA9IGZhbHNlOwotICAgICAgICAgICAgICAg
IGZpZWxkcy53aG9sZUNvbCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGZpZWxkcy5yb3cgPSAw
OwotICAgICAgICAgICAgICAgIGZpZWxkcy5jb2wgPSAwOwotICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGZpZWxkcy53
aG9sZVJvdyB8fCBmaWVsZHMud2hvbGVDb2wpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICIgbm9uLXNjYWxhciBmaWVsZHMgbm90IGltcGxlbWVu
dGVkIHlldCIsICIuIik7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlv
blsxXTsKLSAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoMCk7Ci0gICAgICAg
ICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFD
b25zdCksICh5eWxzcFsoMykgLSAoMyldKSk7Ci0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcElu
ZGV4RGlyZWN0LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5k
ZXgsICh5eWxzcFsoMikgLSAoMyldKSk7Ci0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXRCYXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmdldFByZWNpc2lvbigpLEV2cVRlbXBvcmFyeSwgKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxTaXplKCkpKTsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25B
cnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgIHVuaW9uQXJyYXkt
PnNldElDb25zdChmaWVsZHMuY29sICogKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldE5vbWluYWxTaXplKCkgKyBmaWVsZHMucm93KTsKLSAgICAgICAgICAgICAg
ICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50
VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwg
KHl5bHNwWygzKSAtICgzKV0pKTsKLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJl
Y3QsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5
bHNwWygyKSAtICgzKV0pKTsKLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFz
aWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgICAgICBib29sIGZpZWxkRm91bmQgPSBm
YWxzZTsKLSAgICAgICAgICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9ICh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCktPmZp
ZWxkcygpOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IGk7Ci0gICAgICAgICAgICBmb3IgKGkg
PSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZpZWxk
c1tpXS0+bmFtZSgpID09ICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZykgewotICAgICAg
ICAgICAgICAgICAgICBmaWVsZEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZp
ZWxkRm91bmQpIHsKLSAgICAgICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkg
ewotICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBj
b250ZXh0LT5hZGRDb25zdFN0cnVjdCgqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcsICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMp
XSkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKCpmaWVsZHNbaV0t
PnR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UgdGhlIHF1YWxpZmll
ciBvZiB0aGUgcmV0dXJuIHR5cGUsIG5vdCBvZiB0aGUgc3RydWN0dXJlIGZpZWxkCi0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBhcyB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24gaXMgc2hhcmVk
IGJldHdlZW4gdmFyaW91cyBzdHJ1Y3R1cmVzLgotICAgICAgICAgICAgICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlUG9pbnRlcigpLT5zZXRRdWFsaWZp
ZXIoRXZxQ29uc3QpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJ
Q29uc3QoaSk7Ci0gICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCAqZmllbGRzW2ld
LT50eXBlKCksICh5eWxzcFsoMykgLSAoMyldKSk7Ci0gICAgICAgICAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRl
eChFT3BJbmRleERpcmVjdFN0cnVjdCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksIGluZGV4LCAoeXlsc3BbKDIpIC0gKDMpXSkpOwotICAgICAgICAgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlw
ZSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIiBubyBzdWNoIGZpZWxk
IGluIHN0cnVjdHVyZSIsICh5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsK
LSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICIgZmllbGQgc2VsZWN0aW9u
IHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24gbGVmdCBoYW5kIHNpZGUi
LCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7Ci0gICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICAg
ICAgfQotICAgICAgICAvLyBkb24ndCBkZWxldGUgJDMuc3RyaW5nLCBpdCdzIGZyb20gdGhlIHBv
b2wKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNDoKLQotICAgIHsKLSAgICAgICAgaWYg
KGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgyKV0pLCAiKysiLCAoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCi0gICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdEluY3JlbWVudCwgKHl5
dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMild
KSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcigo
eXlsc3BbKDIpIC0gKDIpXSksICIrKyIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5
eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICB9Ci0gICAg
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTU6Ci0KLSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0
LT5sVmFsdWVFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgIi0tIiwgKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQotICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFBvc3REZWNyZW1lbnQsICh5eXZzcFsoMSkg
LSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDIpXSksIGNvbnRl
eHQtPnN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoKHl5bHNwWygy
KSAtICgyKV0pLCAiLS0iLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEp
IC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBi
cmVhazsKLQotICBjYXNlIDE2OgotCi0gICAgewotICAgICAgICBpZiAoY29udGV4dC0+aW50ZWdl
ckVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICJb
XSIpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNzoKLQotICAgIHsKLSAgICAg
ICAgVEZ1bmN0aW9uKiBmbkNhbGwgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmZ1bmN0aW9u
OwotICAgICAgICBUT3BlcmF0b3Igb3AgPSBmbkNhbGwtPmdldEJ1aWx0SW5PcCgpOwotCi0gICAg
ICAgIGlmIChvcCAhPSBFT3BOdWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLwotICAgICAg
ICAgICAgLy8gVGhlbiB0aGlzIHNob3VsZCBiZSBhIGNvbnN0cnVjdG9yLgotICAgICAgICAgICAg
Ly8gRG9uJ3QgZ28gdGhyb3VnaCB0aGUgc3ltYm9sIHRhYmxlIGZvciBjb25zdHJ1Y3RvcnMuCi0g
ICAgICAgICAgICAvLyBUaGVpciBwYXJhbWV0ZXJzIHdpbGwgYmUgdmVyaWZpZWQgYWxnb3JpdGht
aWNhbGx5LgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwg
RWJwVW5kZWZpbmVkKTsgIC8vIHVzZSB0aGlzIHRvIGdldCB0aGUgdHlwZSBiYWNrCi0gICAgICAg
ICAgICBpZiAoY29udGV4dC0+Y29uc3RydWN0b3JFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSld
KSwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCAqZm5DYWxsLCBvcCwgJnR5
cGUpKSB7Ci0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
MDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAg
ICAgICAvLyBJdCdzIGEgY29uc3RydWN0b3IsIG9mIHR5cGUgJ3R5cGUnLgotICAgICAgICAgICAg
ICAgIC8vCi0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+YWRkQ29uc3RydWN0b3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1O
b2RlLCAmdHlwZSwgb3AsIGZuQ2FsbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAw
KSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5z
ZXRBZ2dyZWdhdGVPcGVyYXRvcigwLCBvcCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlw
ZSh0eXBlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAv
LyBOb3QgYSBjb25zdHJ1Y3Rvci4gIEZpbmQgaXQgaW4gdGhlIHN5bWJvbCB0YWJsZS4KLSAgICAg
ICAgICAgIC8vCi0gICAgICAgICAgICBjb25zdCBURnVuY3Rpb24qIGZuQ2FuZGlkYXRlOwotICAg
ICAgICAgICAgYm9vbCBidWlsdEluOwotICAgICAgICAgICAgZm5DYW5kaWRhdGUgPSBjb250ZXh0
LT5maW5kRnVuY3Rpb24oKHl5bHNwWygxKSAtICgxKV0pLCBmbkNhbGwsICZidWlsdEluKTsKLSAg
ICAgICAgICAgIGlmIChmbkNhbmRpZGF0ZSkgewotICAgICAgICAgICAgICAgIC8vCi0gICAgICAg
ICAgICAgICAgLy8gQSBkZWNsYXJlZCBmdW5jdGlvbi4KLSAgICAgICAgICAgICAgICAvLwotICAg
ICAgICAgICAgICAgIGlmIChidWlsdEluICYmICFmbkNhbmRpZGF0ZS0+Z2V0RXh0ZW5zaW9uKCku
ZW1wdHkoKSAmJgotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5leHRlbnNpb25FcnJvckNo
ZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgZm5DYW5kaWRhdGUtPmdldEV4dGVuc2lvbigpKSkgewot
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIG9wID0gZm5DYW5kaWRhdGUtPmdldEJ1aWx0SW5PcCgpOwotICAg
ICAgICAgICAgICAgIGlmIChidWlsdEluICYmIG9wICE9IEVPcE51bGwpIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgLy8gQSBmdW5jdGlvbiBjYWxsIG1hcHBl
ZCB0byBhIGJ1aWx0LWluIG9wZXJhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGZuQ2FuZGlkYXRlLT5nZXRQYXJhbUNvdW50KCkgPT0gMSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRy
ZWF0IGl0IGxpa2UgYSBidWlsdC1pbiB1bmFyeSBvcGVyYXRvci4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKG9wLCAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUsICh5eWxzcFsoMSkgLSAoMSldKSwgY29udGV4
dC0+c3ltYm9sVGFibGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImJ1aWx0IGluIHVuYXJ5IG9wZXJhdG9yIGZ1bmN0
aW9uLiAgVHlwZTogIiA8PCBzdGF0aWNfY2FzdDxUSW50ZXJtVHlwZWQqPigoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0pLmludGVybU5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVh
bS5zdHIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUtPmdldExpbmUoKSwgIiB3cm9uZyBvcGVy
YW5kIHR5cGUiLCAiSW50ZXJuYWwgRXJyb3IiLCBleHRyYUluZm8uY19zdHIoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgWVlFUlJPUjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRB
Z2dyZWdhdGVPcGVyYXRvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0
ZSwgb3AsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgcmVh
bCBmdW5jdGlvbiBjYWxsCi0KLSAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9y
KCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtQWdncmVnYXRlLCBFT3BGdW5jdGlvbkNh
bGwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShmbkNhbmRpZGF0ZS0+Z2V0UmV0dXJuVHlwZSgp
KTsKLQotICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGhvdyB3ZSBrbm93IHdoZXRoZXIg
dGhlIGdpdmVuIGZ1bmN0aW9uIGlzIGEgYnVpbHRJbiBmdW5jdGlvbiBvciBhIHVzZXIgZGVmaW5l
ZCBmdW5jdGlvbgotICAgICAgICAgICAgICAgICAgICAvLyBpZiBidWlsdEluID09IGZhbHNlLCBp
dCdzIGEgdXNlckRlZmluZWQgLT4gY291bGQgYmUgYW4gb3ZlcmxvYWRlZCBidWlsdEluIGZ1bmN0
aW9uIGFsc28KLSAgICAgICAgICAgICAgICAgICAgLy8gaWYgYnVpbHRJbiA9PSB0cnVlLCBpdCdz
IGRlZmluaXRlbHkgYSBidWlsdEluIGZ1bmN0aW9uIHdpdGggRU9wTnVsbAotICAgICAgICAgICAg
ICAgICAgICBpZiAoIWJ1aWx0SW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNldFVzZXJEZWZpbmVkKCk7
Ci0gICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0
QXNBZ2dyZWdhdGUoKS0+c2V0TmFtZShmbkNhbmRpZGF0ZS0+Z2V0TWFuZ2xlZE5hbWUoKSk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgVFF1YWxpZmllciBxdWFsOwotICAgICAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZuQ2FuZGlkYXRlLT5nZXRQYXJhbUNvdW50KCk7ICsr
aSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcXVhbCA9IGZuQ2FuZGlkYXRlLT5nZXRQYXJh
bShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChx
dWFsID09IEV2cU91dCB8fCBxdWFsID09IEV2cUluT3V0KSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRMaW5lKCksICJhc3NpZ24iLCAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldEFzQWdncmVnYXRlKCktPmdldFNlcXVlbmNlKClbaV0tPmdldEFzVHlwZWQo
KSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCksICJDb25zdGFudCB2
YWx1ZSBjYW5ub3QgYmUgcGFzc2VkIGZvciAnb3V0JyBvciAnaW5vdXQnIHBhcmFtZXRlcnMuIiwg
IkVycm9yIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKGZuQ2FuZGlk
YXRlLT5nZXRSZXR1cm5UeXBlKCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAvLyBlcnJvciBtZXNzYWdlIHdhcyBwdXQgb3V0IGJ5IFBhRmluZEZ1bmN0aW9uKCkKLSAg
ICAgICAgICAgICAgICAvLyBQdXQgb24gYSBkdW1teSBub2RlIGZvciBlcnJvciByZWNvdmVyeQot
ICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvblsxXTsKLSAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3QoMC4wZik7Ci0g
ICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQs
IEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBkZWxldGUgZm5DYWxsOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE4OgotCi0g
ICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybSk7
Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTk6Ci0KLSAgICB7Ci0gICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eWxzcFsoMykgLSAoMyldKSwgIm1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQi
LCAiIik7Ci0gICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgKHl5dmFsLmludGVy
bSkgPSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pOwotICAgIH0KLSAgICBicmVhazsKLQotICBj
YXNlIDIwOgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAo
MildLmludGVybSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjE6Ci0KLSAgICB7Ci0g
ICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKTsKLSAgICB9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyMjoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVy
bSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pOwotICAgICAg
ICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1Ob2RlID0gMDsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSAyMzoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24pOwotICAgICAgICAoeXl2YWwuaW50ZXJtKS5p
bnRlcm1Ob2RlID0gMDsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyNDoKLQotICAgIHsK
LSAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBlKCh5eXZzcFsoMikgLSAo
MildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkpIH07Ci0gICAgICAgICh5eXZz
cFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmFkZFBhcmFtZXRlcihwYXJhbSk7Ci0gICAg
ICAgICh5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1
bmN0aW9uKTsKLSAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtTm9kZSA9ICh5eXZzcFsoMikg
LSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgIH0KLSAgICBicmVhazsKLQotICBj
YXNlIDI1OgotCi0gICAgewotICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAwLCBuZXcgVFR5
cGUoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKSkg
fTsKLSAgICAgICAgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5mdW5jdGlvbi0+YWRkUGFyYW1l
dGVyKHBhcmFtKTsKLSAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0pLmZ1bmN0aW9uOwotICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1O
b2RlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSAyNjoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNl
IDI3OgotCi0gICAgewotICAgICAgICAvLwotICAgICAgICAvLyBDb25zdHJ1Y3RvcgotICAgICAg
ICAvLwotICAgICAgICBUT3BlcmF0b3Igb3AgPSBFT3BOdWxsOwotICAgICAgICBpZiAoKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnVzZXJEZWYpIHsKLSAgICAgICAgICAgIG9wID0gRU9w
Q29uc3RydWN0U3RydWN0OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3dpdGNoICgo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSkgewotICAgICAgICAgICAgY2FzZSBF
YnRGbG9hdDoKLSAgICAgICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5
cGUpLm1hdHJpeCkgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2goKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLnR5cGUpLnNpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9
IEVPcENvbnN0cnVjdE1hdDI7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBv
cCA9IEVPcENvbnN0cnVjdE1hdDM7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSA0
OiBvcCA9IEVPcENvbnN0cnVjdE1hdDQ7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCgoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuc2l6ZSkgewotICAgICAgICAgICAgICAgICAgICBj
YXNlIDE6IG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7IGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0VmVjMjsgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0VmVjMzsgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0VmVjNDsgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAgICAgICAgICAgc3dpdGNoKCh5eXZzcFso
MSkgLSAoMSldLmludGVybS50eXBlKS5zaXplKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAxOiBv
cCA9IEVPcENvbnN0cnVjdEludDsgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDI6IG9w
ID0gRU9wQ29uc3RydWN0SVZlYzI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMzogb3Ag
PSBFT3BDb25zdHJ1Y3RJVmVjMzsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9
IEVPcENvbnN0cnVjdElWZWM0OyBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVidEJvb2w6Ci0gICAgICAgICAgICAgICAg
c3dpdGNoKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zaXplKSB7Ci0gICAgICAgICAg
ICAgICAgY2FzZSAxOiBvcCA9IEVPcENvbnN0cnVjdEJvb2w7ICBicmVhazsKLSAgICAgICAgICAg
ICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0QlZlYzI7IGJyZWFrOwotICAgICAgICAgICAg
ICAgIGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RCVmVjMzsgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVjdEJWZWM0OyBicmVhazsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OiBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChvcCA9PSBFT3BOdWxsKSB7Ci0gICAgICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0pLCAiY2Fubm90IGNvbnN0
cnVjdCB0aGlzIHR5cGUiLCBnZXRCYXNpY1N0cmluZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
dHlwZSkudHlwZSkpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSA9IEVidEZsb2F0
OwotICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgVFN0cmluZyB0ZW1wU3RyaW5nOwotICAgICAgICBUVHlwZSB0
eXBlKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSk7Ci0gICAgICAgIFRGdW5jdGlvbiAq
ZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCZ0ZW1wU3RyaW5nLCB0eXBlLCBvcCk7Ci0gICAgICAg
ICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gZnVuY3Rpb247Ci0gICAgfQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgMjg6Ci0KLSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9y
Q2hlY2soKHl5bHNwWygxKSAtICgxKV0pLCAqKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcp
KQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBUVHlwZSB0eXBlKEVi
dFZvaWQsIEVicFVuZGVmaW5lZCk7Ci0gICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcg
VEZ1bmN0aW9uKCh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLCB0eXBlKTsKLSAgICAgICAg
KHl5dmFsLmludGVybS5mdW5jdGlvbikgPSBmdW5jdGlvbjsKLSAgICB9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSAyOToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgfQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgMzA6Ci0KLSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5s
VmFsdWVFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMildKSwgIisrIiwgKHl5dnNwWygyKSAtICgy
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFByZUluY3JlbWVudCwgKHl5dnNwWygyKSAtICgy
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMSkgLSAoMildKSwgY29udGV4dC0+
c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcigoeXlsc3BbKDEpIC0g
KDIpXSksICIrKyIsICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMikgLSAo
MildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFr
OwotCi0gIGNhc2UgMzE6Ci0KLSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJv
ckNoZWNrKCh5eWxzcFsoMSkgLSAoMildKSwgIi0tIiwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSkpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkVW5hcnlNYXRoKEVPcFByZURlY3JlbWVudCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMSkgLSAoMildKSwgY29udGV4dC0+c3ltYm9sVGFi
bGUpOwotICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcigoeXlsc3BbKDEpIC0gKDIpXSksICIt
LSIsICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0
ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNh
c2UgMzI6Ci0KLSAgICB7Ci0gICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLm9w
ICE9IEVPcE51bGwpIHsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoKHl5dnNwWygxKSAtICgyKV0u
aW50ZXJtKS5vcCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5
eWxzcFsoMSkgLSAoMildKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICAgICAgaWYg
KCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogZXJyb3JPcCA9ICIiOwotICAgICAgICAgICAgICAgIHN3aXRjaCgoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0pLm9wKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BOZWdhdGl2
ZTogICBlcnJvck9wID0gIi0iOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEVPcExvZ2lj
YWxOb3Q6IGVycm9yT3AgPSAiISI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb250ZXh0LT51bmFyeU9w
RXJyb3IoKHl5bHNwWygxKSAtICgyKV0pLCBlcnJvck9wLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDMzOgotCi0gICAgeyAoeXl2YWwu
aW50ZXJtKS5vcCA9IEVPcE51bGw7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDM0OgotCi0gICAg
eyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcE5lZ2F0aXZlOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSAzNToKLQotICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BMb2dpY2FsTm90OyB9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSAzNjoKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KLSAgICBi
cmVhazsKLQotICBjYXNlIDM3OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BNdWws
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0
LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIp
IC0gKDMpXSksICIqIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgMzg6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVP
cERpdiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFso
MykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNv
bnRleHQtPnN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxz
cFsoMikgLSAoMyldKSwgIi8iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzOToKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7
IH0KLSAgICBicmVhazsKLQotICBjYXNlIDQwOgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0
aChFT3BBZGQsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2
c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0p
LCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigo
eXlsc3BbKDIpIC0gKDMpXSksICIrIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICB9
Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDE6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5h
cnlNYXRoKEVPcFN1YiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0g
KDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVy
cm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIi0iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0MjoKLQotICAgIHsgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSk7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDQzOgotCi0gICAgeyAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDQ6Ci0KLSAgICB7Ci0gICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRC
aW5hcnlNYXRoKEVPcExlc3NUaGFuLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxz
cFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmJp
bmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiPCIsICh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBDb25zdGFudFVuaW9uICp1
bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICB1bmlvbkFycmF5
LT5zZXRCQ29uc3QoZmFsc2UpOwotICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJh
eSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMikgLSAo
MyldKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0NToKLQotICAg
IHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wR3JlYXRlclRoYW4sICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0g
ICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewotICAgICAg
ICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICI+IiwgKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5n
KCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0
ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAg
IENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAg
ICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3Rh
bnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0
KSwgKHl5bHNwWygyKSAtICgzKV0pKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLQot
ICBjYXNlIDQ2OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhhbkVxdWFs
LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4
dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygy
KSAtICgzKV0pLCAiPD0iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uWzFdOwotICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsK
LSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVi
cFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDc6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlN
YXRoKEVPcEdyZWF0ZXJUaGFuRXF1YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5
bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmICgoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+
YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICI+PSIsICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBDb25zdGFudFVuaW9u
ICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICB1bmlvbkFy
cmF5LT5zZXRCQ29uc3QoZmFsc2UpOwotICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25B
cnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMikg
LSAoMyldKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0ODoKLQot
ICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDQ5OgotCi0g
ICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BFcXVhbCwgKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKLSAgICAg
ICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIj09IiwgKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCks
ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0
cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIENv
bnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAg
ICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRV
bmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwg
KHl5bHNwWygyKSAtICgzKV0pKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLQotICBj
YXNlIDUwOgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BOb3RFcXVhbCwgKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJv
bFRhYmxlKTsKLSAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAw
KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyld
KSwgIiE9IiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENv
bXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlv
blsxXTsKLSAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmlu
ZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygyKSAtICgzKV0pKTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICBicmVhazsKLQotICBjYXNlIDUxOgotCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQotICAg
IGJyZWFrOwotCi0gIGNhc2UgNTI6Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSA1MzoKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KLSAgICBi
cmVhazsKLQotICBjYXNlIDU0OgotCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgNTU6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2lj
YWxBbmQsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3Bb
KDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBj
b250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXls
c3BbKDIpIC0gKDMpXSksICImJiIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3
IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFs
c2UpOwotICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9v
bCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMikgLSAoMyldKSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1NjoKLQotICAgIHsgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSk7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDU3OgotCi0gICAgewotICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmlu
YXJ5TWF0aChFT3BMb2dpY2FsWG9yLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxz
cFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmJp
bmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiXl4iLCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAq
dW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgdW5pb25BcnJh
eS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJy
YXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDIpIC0g
KDMpXSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTg6Ci0KLSAg
ICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1OToKLQotICAg
IHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbE9yLCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAg
ICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAifHwiLCAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmco
KSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRl
U3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAg
Q29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAg
ICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFu
dFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3Qp
LCAoeXlsc3BbKDIpIC0gKDMpXSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotCi0g
IGNhc2UgNjA6Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSA2MToKLQotICAgIHsKLSAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2soKHl5
bHNwWygyKSAtICg1KV0pLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFNlbGVjdGlv
bigoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAt
ICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoNSkgLSAoNSldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDUpXSkpOwotICAgICAgICBpZiAoKHl5dnNw
WygzKSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKSAhPSAoeXl2c3Bb
KDUpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpKQotICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gMDsKLQotICAgICAgICBpZiAoKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQt
PmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICg1KV0pLCAiOiIsICh5eXZzcFsoMykgLSAoNSld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDUp
IC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDYyOgotCi0gICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNjM6Ci0KLSAgICB7
Ci0gICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMyld
KSwgImFzc2lnbiIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEFzc2lnbigoeXl2c3Bb
KDIpIC0gKDMpXS5pbnRlcm0pLm9wLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxz
cFsoMikgLSAoMyldKSk7Ci0gICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+YXNzaWduRXJyb3IoKHl5bHNwWygyKSAt
ICgzKV0pLCAiYXNzaWduIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICB9Ci0gICAg
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNjQ6Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0g
RU9wQXNzaWduOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA2NToKLQotICAgIHsgKHl5dmFsLmlu
dGVybSkub3AgPSBFT3BNdWxBc3NpZ247IH0KLSAgICBicmVhazsKLQotICBjYXNlIDY2OgotCi0g
ICAgeyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcERpdkFzc2lnbjsgfQotICAgIGJyZWFrOwotCi0g
IGNhc2UgNjc6Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wQWRkQXNzaWduOyB9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSA2ODoKLQotICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BT
dWJBc3NpZ247IH0KLSAgICBicmVhazsKLQotICBjYXNlIDY5OgotCi0gICAgewotICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA3MDoKLQotICAg
IHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZENvbW1hKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygy
KSAtICgzKV0pKTsKLSAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAo
MyldKSwgIiwiLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0
Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygz
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSA3MToKLQotICAgIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPmNvbnN0
RXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCi0g
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
OwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDcyOgotCi0gICAgewotICAgICAgICBURnVu
Y3Rpb24gJmZ1bmN0aW9uID0gKigoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmZ1bmN0aW9uKTsK
LSAgICAgICAgCi0gICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUgKnByb3RvdHlwZSA9IG5ldyBUSW50
ZXJtQWdncmVnYXRlOwotICAgICAgICBwcm90b3R5cGUtPnNldFR5cGUoZnVuY3Rpb24uZ2V0UmV0
dXJuVHlwZSgpKTsKLSAgICAgICAgcHJvdG90eXBlLT5zZXROYW1lKGZ1bmN0aW9uLmdldE5hbWUo
KSk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uLmdl
dFBhcmFtQ291bnQoKTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBUUGFyYW1l
dGVyICZwYXJhbSA9IGZ1bmN0aW9uLmdldFBhcmFtKGkpOwotICAgICAgICAgICAgaWYgKHBhcmFt
Lm5hbWUgIT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUVmFyaWFibGUgdmFy
aWFibGUocGFyYW0ubmFtZSwgKnBhcmFtLnR5cGUpOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIHByb3RvdHlwZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRl
KHByb3RvdHlwZSwgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZS5nZXRV
bmlxdWVJZCgpLCB2YXJpYWJsZS5nZXROYW1lKCksIHZhcmlhYmxlLmdldFR5cGUoKSwgKHl5bHNw
WygxKSAtICgyKV0pKSwgKHl5bHNwWygxKSAtICgyKV0pKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcm90b3R5cGUgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShwcm90b3R5cGUsIGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsICpwYXJhbS50eXBlLCAoeXlsc3BbKDEpIC0gKDIp
XSkpLCAoeXlsc3BbKDEpIC0gKDIpXSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBwcm90b3R5cGUtPnNldE9wKEVPcFByb3RvdHlwZSk7Ci0gICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBwcm90b3R5cGU7Ci0KLSAgICAgICAgY29udGV4dC0+
c3ltYm9sVGFibGUucG9wKCk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNzM6Ci0KLSAg
ICB7Ci0gICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0
ZSkKLSAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMildLmludGVybSkuaW50ZXJtQWdncmVnYXRl
LT5zZXRPcChFT3BEZWNsYXJhdGlvbik7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZTsKLSAgICB9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSA3NDoKLQotICAgIHsKLSAgICAgICAgaWYgKCgoeXl2c3BbKDIp
IC0gKDQpXS5pbnRlcm0ucHJlY2lzaW9uKSA9PSBFYnBIaWdoKSAmJiAoY29udGV4dC0+c2hhZGVy
VHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpICYmICFjb250ZXh0LT5mcmFnbWVudFByZWNpc2lv
bkhpZ2gpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoNCldKSwg
InByZWNpc2lvbiBpcyBub3Qgc3VwcG9ydGVkIGluIGZyYWdtZW50IHNoYWRlciIsICJoaWdocCIp
OwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgIGlm
ICghY29udGV4dC0+c3ltYm9sVGFibGUuc2V0RGVmYXVsdFByZWNpc2lvbiggKHl5dnNwWygzKSAt
ICg0KV0uaW50ZXJtLnR5cGUpLCAoeXl2c3BbKDIpIC0gKDQpXS5pbnRlcm0ucHJlY2lzaW9uKSAp
KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDQpXSksICJpbGxl
Z2FsIHR5cGUgYXJndW1lbnQgZm9yIGRlZmF1bHQgcHJlY2lzaW9uIHF1YWxpZmllciIsIGdldEJh
c2ljU3RyaW5nKCh5eXZzcFsoMykgLSAoNCldLmludGVybS50eXBlKS50eXBlKSk7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1Ob2RlKSA9IDA7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNzU6Ci0KLSAg
ICB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIE11bHRpcGxlIGRlY2xhcmF0aW9ucyBvZiB0aGUg
c2FtZSBmdW5jdGlvbiBhcmUgYWxsb3dlZC4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gSWYgdGhp
cyBpcyBhIGRlZmluaXRpb24sIHRoZSBkZWZpbml0aW9uIHByb2R1Y3Rpb24gY29kZSB3aWxsIGNo
ZWNrIGZvciByZWRlZmluaXRpb25zCi0gICAgICAgIC8vICh3ZSBkb24ndCBrbm93IGF0IHRoaXMg
cG9pbnQgaWYgaXQncyBhIGRlZmluaXRpb24gb3Igbm90KS4KLSAgICAgICAgLy8KLSAgICAgICAg
Ly8gUmVkZWNsYXJhdGlvbnMgYXJlIGFsbG93ZWQuICBCdXQsIHJldHVybiB0eXBlcyBhbmQgcGFy
YW1ldGVyIHF1YWxpZmllcnMgbXVzdCBtYXRjaC4KLSAgICAgICAgLy8KLSAgICAgICAgVEZ1bmN0
aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9sVGFi
bGUuZmluZCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRNYW5nbGVkTmFt
ZSgpKSk7Ci0gICAgICAgIGlmIChwcmV2RGVjKSB7Ci0gICAgICAgICAgICBpZiAocHJldkRlYy0+
Z2V0UmV0dXJuVHlwZSgpICE9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdl
dFJldHVyblR5cGUoKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFso
MikgLSAoMildKSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSByZXR1
cm4gdHlwZSIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFJldHVyblR5
cGUoKS5nZXRCYXNpY1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBy
ZXZEZWMtPmdldFBhcmFtQ291bnQoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHByZXZE
ZWMtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpICE9ICh5eXZzcFsoMSkgLSAoMild
LmludGVybS5mdW5jdGlvbiktPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgIm92
ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSBwYXJhbWV0ZXIgcXVhbGlmaWVy
cyIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFBhcmFtKGkpLnR5cGUt
PmdldFF1YWxpZmllclN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIC8vCi0gICAgICAgIC8vIENoZWNrIGZvciBwcmV2aW91c2x5IGRlY2xhcmVkIHZhcmlh
YmxlcyB1c2luZyB0aGUgc2FtZSBuYW1lLgotICAgICAgICAvLwotICAgICAgICBUU3ltYm9sICpw
cmV2U3ltID0gY29udGV4dC0+c3ltYm9sVGFibGUuZmluZCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0uZnVuY3Rpb24pLT5nZXROYW1lKCkpOwotICAgICAgICBpZiAocHJldlN5bSkKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKCFwcmV2U3ltLT5pc0Z1bmN0aW9uKCkpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgyKV0pLCAicmVk
ZWZpbml0aW9uIiwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0TmFtZSgp
LmNfc3RyKCksICJmdW5jdGlvbiIpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIC8vIEluc2VydCB0aGUgdW5tYW5nbGVkIG5hbWUgdG8gZGV0ZWN0IHBvdGVudGlh
bCBmdXR1cmUgcmVkZWZpbml0aW9uIGFzIGEgdmFyaWFibGUuCi0gICAgICAgICAgICBjb250ZXh0
LT5zeW1ib2xUYWJsZS5nZXRPdXRlckxldmVsKCktPmluc2VydCgoeXl2c3BbKDEpIC0gKDIpXS5p
bnRlcm0uZnVuY3Rpb24pLT5nZXROYW1lKCksICooeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVu
Y3Rpb24pKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vCi0gICAgICAgIC8vIElmIHRoaXMgaXMg
YSByZWRlY2xhcmF0aW9uLCBpdCBjb3VsZCBhbHNvIGJlIGEgZGVmaW5pdGlvbiwKLSAgICAgICAg
Ly8gaW4gd2hpY2ggY2FzZSwgd2Ugd2FudCB0byB1c2UgdGhlIHZhcmlhYmxlIG5hbWVzIGZyb20g
dGhpcyBvbmUsIGFuZCBub3QgdGhlIG9uZSB0aGF0J3MKLSAgICAgICAgLy8gYmVpbmcgcmVkZWNs
YXJlZC4gIFNvLCBwYXNzIGJhY2sgdXAgdGhpcyBkZWNsYXJhdGlvbiwgbm90IHRoZSBvbmUgaW4g
dGhlIHN5bWJvbCB0YWJsZS4KLSAgICAgICAgLy8KLSAgICAgICAgKHl5dmFsLmludGVybSkuZnVu
Y3Rpb24gPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pOwotCi0gICAgICAgIC8v
IFdlJ3JlIGF0IHRoZSBpbm5lciBzY29wZSBsZXZlbCBvZiB0aGUgZnVuY3Rpb24ncyBhcmd1bWVu
dHMgYW5kIGJvZHkgc3RhdGVtZW50LgotICAgICAgICAvLyBBZGQgdGhlIGZ1bmN0aW9uIHByb3Rv
dHlwZSB0byB0aGUgc3Vycm91bmRpbmcgc2NvcGUgaW5zdGVhZC4KLSAgICAgICAgY29udGV4dC0+
c3ltYm9sVGFibGUuZ2V0T3V0ZXJMZXZlbCgpLT5pbnNlcnQoKih5eXZhbC5pbnRlcm0pLmZ1bmN0
aW9uKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA3NjoKLQotICAgIHsKLSAgICAgICAg
KHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rp
b24pOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDc3OgotCi0gICAgewotICAgICAgICAo
eXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5mdW5jdGlv
bik7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNzg6Ci0KLSAgICB7Ci0gICAgICAgIC8v
IEFkZCB0aGUgcGFyYW1ldGVyCi0gICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gKHl5
dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKTsKLSAgICAgICAgaWYgKCh5eXZzcFsoMikg
LSAoMildLmludGVybSkucGFyYW0udHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkKLSAg
ICAgICAgICAgICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmFkZFBhcmFtZXRl
cigoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLnBhcmFtKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgZGVsZXRlICh5eXZzcFsoMikgLSAoMildLmludGVybSkucGFyYW0udHlwZTsKLSAgICB9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA3OToKLQotICAgIHsKLSAgICAgICAgLy8KLSAgICAgICAg
Ly8gT25seSBmaXJzdCBwYXJhbWV0ZXIgb2Ygb25lLXBhcmFtZXRlciBmdW5jdGlvbnMgY2FuIGJl
IHZvaWQKLSAgICAgICAgLy8gVGhlIGNoZWNrIGZvciBuYW1lZCBwYXJhbWV0ZXJzIG5vdCBiZWlu
ZyB2b2lkIGlzIGRvbmUgaW4gcGFyYW1ldGVyX2RlY2xhcmF0b3IKLSAgICAgICAgLy8KLSAgICAg
ICAgaWYgKCh5eXZzcFsoMykgLSAoMyldLmludGVybSkucGFyYW0udHlwZS0+Z2V0QmFzaWNUeXBl
KCkgPT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFRoaXMgcGFy
YW1ldGVyID4gZmlyc3QgaXMgdm9pZAotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgImNhbm5vdCBiZSBhbiBhcmd1bWVudCB0eXBl
IGV4Y2VwdCBmb3IgJyh2b2lkKSciLCAidm9pZCIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotICAgICAgICAgICAgZGVsZXRlICh5eXZzcFsoMykgLSAoMyldLmludGVybSkucGFy
YW0udHlwZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEFkZCB0aGUgcGFyYW1l
dGVyCi0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5eXZzcFsoMSkgLSAo
MyldLmludGVybS5mdW5jdGlvbik7Ci0gICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uZnVuY3Rpb24pLT5hZGRQYXJhbWV0ZXIoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKS5wYXJh
bSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA4MDoKLQotICAgIHsK
LSAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZpZXIgIT0g
RXZxR2xvYmFsICYmICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZpZXIgIT0g
RXZxVGVtcG9yYXJ5KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0g
KDMpXSksICJubyBxdWFsaWZpZXJzIGFsbG93ZWQgZm9yIGZ1bmN0aW9uIHJldHVybiIsIGdldFF1
YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSk7
Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8g
bWFrZSBzdXJlIGEgc2FtcGxlciBpcyBub3QgaW52b2x2ZWQgYXMgd2VsbC4uLgotICAgICAgICBp
ZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDMpXSks
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKSkpCi0gICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0KLSAgICAgICAgLy8gQWRkIHRoZSBmdW5jdGlvbiBhcyBhIHByb3RvdHlwZSBh
ZnRlciBwYXJzaW5nIGl0ICh3ZSBkbyBub3Qgc3VwcG9ydCByZWN1cnNpb24pCi0gICAgICAgIFRG
dW5jdGlvbiAqZnVuY3Rpb247Ci0gICAgICAgIFRUeXBlIHR5cGUoKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLnR5cGUpKTsKLSAgICAgICAgZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCh5eXZzcFso
MikgLSAoMyldLmxleCkuc3RyaW5nLCB0eXBlKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5mdW5j
dGlvbikgPSBmdW5jdGlvbjsKLSAgICAgICAgCi0gICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxl
LnB1c2goKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA4MToKLQotICAgIHsKLSAgICAg
ICAgaWYgKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidFZvaWQpIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgImlsbGVnYWwg
dXNlIG9mIHR5cGUgJ3ZvaWQnIiwgKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmctPmNfc3Ry
KCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgyKV0pLCAqKHl5
dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyh5eXZzcFsoMikgLSAoMildLmxleCku
c3RyaW5nLCBuZXcgVFR5cGUoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpKX07Ci0gICAg
ICAgICh5eXZhbC5pbnRlcm0pLnBhcmFtID0gcGFyYW07Ci0gICAgfQotICAgIGJyZWFrOwotCi0g
IGNhc2UgODI6Ci0KLSAgICB7Ci0gICAgICAgIC8vIENoZWNrIHRoYXQgd2UgY2FuIG1ha2UgYW4g
YXJyYXkgb3V0IG9mIHRoaXMgdHlwZQotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJy
b3JDaGVjaygoeXlsc3BbKDMpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBl
KSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNvbnRl
eHQtPnJlc2VydmVkRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDUpXSksICooeXl2c3BbKDIpIC0g
KDUpXS5sZXgpLnN0cmluZykpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAg
ICAgICAgaW50IHNpemU7Ci0gICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNr
KCh5eWxzcFsoMykgLSAoNSldKSwgKHl5dnNwWyg0KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksIHNpemUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAo
eXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7Ci0KLSAg
ICAgICAgVFR5cGUqIHR5cGUgPSBuZXcgVFR5cGUoKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5
cGUpKTsKLSAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgKHl5dnNwWygyKSAtICg1KV0ubGV4
KS5zdHJpbmcsIHR5cGUgfTsKLSAgICAgICAgKHl5dmFsLmludGVybSkucGFyYW0gPSBwYXJhbTsK
LSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA4MzoKLQotICAgIHsKLSAgICAgICAgKHl5dmFs
LmludGVybSkgPSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pOwotICAgICAgICBpZiAoY29udGV4
dC0+cGFyYW1FcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoMyldKSwgKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLnR5cGUpLnF1YWxpZmllciwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLnF1YWxpZmll
ciksICh5eXZhbC5pbnRlcm0pLnBhcmFtLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDg0OgotCi0gICAgewotICAgICAg
ICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybSk7Ci0gICAgICAgIGlm
IChjb250ZXh0LT5wYXJhbWV0ZXJTYW1wbGVyRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSks
ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5xdWFsaWZpZXIpLCAqKHl5dnNwWygyKSAtICgyKV0u
aW50ZXJtKS5wYXJhbS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksIEV2
cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5p
bnRlcm0pLnBhcmFtLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
IH0KLSAgICBicmVhazsKLQotICBjYXNlIDg1OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50
ZXJtKSA9ICh5eXZzcFsoMykgLSAoMyldLmludGVybSk7Ci0gICAgICAgIGlmIChjb250ZXh0LT5w
YXJhbUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICgzKV0pLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0udHlwZSkucXVhbGlmaWVyLCAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0ucXVhbGlmaWVyKSwg
KHl5dmFsLmludGVybSkucGFyYW0udHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgODY6Ci0KLSAgICB7Ci0gICAgICAgICh5
eXZhbC5pbnRlcm0pID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKTsKLSAgICAgICAgaWYgKGNv
bnRleHQtPnBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgKHl5
dnNwWygxKSAtICgyKV0uaW50ZXJtLnF1YWxpZmllciksICooeXl2c3BbKDIpIC0gKDIpXS5pbnRl
cm0pLnBhcmFtLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAg
ICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgRXZxVGVt
cG9yYXJ5LCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0ucXVhbGlmaWVyKSwgKHl5dmFsLmludGVy
bSkucGFyYW0udHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgfQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgODc6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0u
cXVhbGlmaWVyKSA9IEV2cUluOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDg4OgotCi0g
ICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLnF1YWxpZmllcikgPSBFdnFJbjsKLSAgICB9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSA4OToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5x
dWFsaWZpZXIpID0gRXZxT3V0OwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDkwOgotCi0g
ICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLnF1YWxpZmllcikgPSBFdnFJbk91dDsKLSAgICB9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA5MToKLQotICAgIHsKLSAgICAgICAgVFBhcmFtZXRlciBw
YXJhbSA9IHsgMCwgbmV3IFRUeXBlKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSkgfTsK
LSAgICAgICAgKHl5dmFsLmludGVybSkucGFyYW0gPSBwYXJhbTsKLSAgICB9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSA5MjoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0pOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDkzOgotCi0g
ICAgewotICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS50eXBlLnR5cGUgPT0g
RWJ0SW52YXJpYW50ICYmICEoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN5bWJvbCkKLSAgICAgICAg
ewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygzKSAtICgzKV0pLCAidW5kZWNs
YXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICh5eXZzcFsoMykgLSAoMyld
LmxleCkuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCBU
VHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLnR5cGUpLCAoeXlsc3BbKDMpIC0gKDMpXSkp
OwotICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmludGVybU5v
ZGUsIHN5bWJvbCwgKHl5bHNwWygzKSAtICgzKV0pKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChj
b250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoMyldKSwgKHl5
dmFsLmludGVybSkudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAg
ICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5bHNwWygzKSAtICgz
KV0pLCAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5cGUs
IGZhbHNlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBUVmFy
aWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRFcnJvckNo
ZWNrKCh5eWxzcFsoMykgLSAoMyldKSwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAo
eXl2YWwuaW50ZXJtKS50eXBlLCB2YXJpYWJsZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgIGlmIChzeW1ib2wgJiYgdmFyaWFibGUpCi0gICAgICAgICAgICBzeW1i
b2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSA5NDoKLQotICAgIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmll
ckVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0pLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0p
LnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlmIChj
b250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwgKih5eXZz
cFsoMykgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUs
IHRydWUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgICh5eXZh
bC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKTsKLQotICAgICAgICBpZiAoY29u
dGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXlsc3BbKDQpIC0gKDUpXSksICh5eXZzcFsoMSkg
LSAoNSldLmludGVybSkudHlwZSkgfHwgY29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNr
KCh5eWxzcFsoNCkgLSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlKSkKLSAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUuc2V0QXJyYXkodHJ1ZSk7Ci0gICAgICAg
ICAgICBUVmFyaWFibGUqIHZhcmlhYmxlOwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5
RXJyb3JDaGVjaygoeXlsc3BbKDQpIC0gKDUpXSksICooeXl2c3BbKDMpIC0gKDUpXS5sZXgpLnN0
cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlLCB2YXJpYWJsZSkpCi0gICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFr
OwotCi0gIGNhc2UgOTU6Ci0KLSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFs
aWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNildKSwgKHl5dnNwWygxKSAtICg2KV0uaW50
ZXJtKS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBp
ZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDYpXSksICoo
eXl2c3BbKDMpIC0gKDYpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50
eXBlLCB0cnVlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICAo
eXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoNildLmludGVybSk7Ci0KLSAgICAgICAgaWYg
KGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5bHNwWyg0KSAtICg2KV0pLCAoeXl2c3Bb
KDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUpIHx8IGNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JD
aGVjaygoeXlsc3BbKDQpIC0gKDYpXSksICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSkp
Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgaW50IHNpemU7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JD
aGVjaygoeXlsc3BbKDQpIC0gKDYpXSksICh5eXZzcFsoNSkgLSAoNildLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLCBzaXplKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUuc2V0QXJyYXkodHJ1ZSwg
c2l6ZSk7Ci0gICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAgICAg
IGlmIChjb250ZXh0LT5hcnJheUVycm9yQ2hlY2soKHl5bHNwWyg0KSAtICg2KV0pLCAqKHl5dnNw
WygzKSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSwg
dmFyaWFibGUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
ICAgIFRUeXBlIHR5cGUgPSBUVHlwZSgoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUpOwot
ICAgICAgICAgICAgdHlwZS5zZXRBcnJheVNpemUoc2l6ZSk7Ci0gICAgICAgICAgICAoeXl2YWwu
aW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3Jl
Z2F0ZSgoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLmludGVybU5vZGUsIGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUgPyB2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSA6IDAs
ICooeXl2c3BbKDMpIC0gKDYpXS5sZXgpLnN0cmluZywgdHlwZSwgKHl5bHNwWygzKSAtICg2KV0p
KSwgKHl5bHNwWygzKSAtICg2KV0pKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLQot
ICBjYXNlIDk2OgotCi0gICAgewotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVy
RXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmludGVybSku
dHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgKHl5dmFs
LmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pOwotCi0gICAgICAgIFRJbnRlcm1O
b2RlKiBpbnRlcm1Ob2RlOwotICAgICAgICBpZiAoIWNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXpl
cigoeXlsc3BbKDMpIC0gKDUpXSksICooeXl2c3BbKDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5
dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlLCAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSwgaW50ZXJtTm9kZSkpIHsKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAg
ICAvLyBidWlsZCB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCi0gICAgICAgICAgICAv
LwotICAgICAgICAgICAgaWYgKGludGVybU5vZGUpCi0gICAgICAgICh5eXZhbC5pbnRlcm0pLmlu
dGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZz
cFsoMSkgLSAoNSldLmludGVybSkuaW50ZXJtTm9kZSwgaW50ZXJtTm9kZSwgKHl5bHNwWyg0KSAt
ICg1KV0pKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
KS5pbnRlcm1BZ2dyZWdhdGUgPSAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLmludGVybUFnZ3Jl
Z2F0ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IDA7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA5NzoKLQotICAgIHsKLSAgICAgICAgKHl5
dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsKLSAgICAg
ICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
Lm1ha2VBZ2dyZWdhdGUoY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAiIiwgVFR5
cGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpKSwgKHl5bHNwWygxKSAtICgxKV0pKSwg
KHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA5ODoKLQot
ICAgIHsKLSAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcsIFRUeXBlKCh5
eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKSksICh5eWxzcFsoMikgLSAoMildKSk7Ci0gICAg
ICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgKHl5bHNwWygyKSAtICgyKV0pKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMikg
LSAoMildKSwgKHl5dmFsLmludGVybSkudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5
bHNwWygyKSAtICgyKV0pLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcsICh5eXZhbC5p
bnRlcm0pLnR5cGUsIGZhbHNlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkg
LSAoMildLmludGVybS50eXBlKTsKLQotICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsK
LSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMild
KSwgKih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLCAoeXl2YWwuaW50ZXJtKS50eXBlLCB2
YXJpYWJsZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGlmICh2
YXJpYWJsZSAmJiBzeW1ib2wpCi0gICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5n
ZXRVbmlxdWVJZCgpKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA5OToKLQotICAgIHsK
LSAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICg0KV0pLCAidW5zaXplZCBhcnJh
eSBkZWNsYXJhdGlvbnMgbm90IHN1cHBvcnRlZCIsICh5eXZzcFsoMikgLSAoNCldLmxleCkuc3Ry
aW5nLT5jX3N0cigpKTsKLSAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIFRJ
bnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwg
Kih5eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2c3BbKDEpIC0gKDQpXS5p
bnRlcm0udHlwZSkpLCAoeXlsc3BbKDIpIC0gKDQpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJt
KS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShz
eW1ib2wsICh5eWxzcFsoMikgLSAoNCldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUg
PSAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0g
IGNhc2UgMTAwOgotCi0gICAgewotICAgICAgICBUVHlwZSB0eXBlID0gVFR5cGUoKHl5dnNwWygx
KSAtICg1KV0uaW50ZXJtLnR5cGUpKTsKLSAgICAgICAgaW50IHNpemU7Ci0gICAgICAgIGlmIChj
b250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNSldKSwgKHl5dnNwWyg0
KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNpemUpKQotICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB0eXBlLnNldEFycmF5U2l6ZShzaXplKTsKLSAgICAg
ICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJv
bCgwLCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsIHR5cGUsICh5eWxzcFsoMikgLSAo
NSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgKHl5bHNwWygyKSAtICg1KV0pKTsK
LSAgICAgICAgCi0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNr
KCh5eWxzcFsoMikgLSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKSkKLSAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+bm9u
SW5pdENvbnN0RXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDUpXSksICooeXl2c3BbKDIpIC0gKDUp
XS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpLCB0cnVlKSkKLSAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICAoeXl2YWwuaW50ZXJtKS50
eXBlID0gKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpOwotCi0gICAgICAgIGlmIChjb250
ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwgKHl5dnNwWygxKSAt
ICg1KV0uaW50ZXJtLnR5cGUpKSB8fCBjb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2so
KHl5bHNwWygzKSAtICg1KV0pLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSkpKQotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IGludCBzaXplOwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2so
KHl5bHNwWygzKSAtICg1KV0pLCAoeXl2c3BbKDQpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgc2l6ZSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAg
ICAgICAgICAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXkodHJ1ZSwgc2l6
ZSk7Ci0gICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAgICAgIGlm
IChjb250ZXh0LT5hcnJheUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0pLCAqKHl5dnNwWygy
KSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSwgdmFy
aWFibGUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAg
IGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCi0gICAgICAgICAgICAgICAgc3ltYm9sLT5zZXRJZCh2
YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSAxMDE6Ci0KLSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZp
ZXJFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNCldKSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJt
LnR5cGUpKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICAoeXl2
YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpOwotCi0gICAg
ICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOwotICAgICAgICBpZiAoIWNvbnRleHQtPmV4ZWN1
dGVJbml0aWFsaXplcigoeXlsc3BbKDIpIC0gKDQpXSksICooeXl2c3BbKDIpIC0gKDQpXS5sZXgp
LnN0cmluZywgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpLCAoeXl2c3BbKDQpIC0gKDQp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW50ZXJtTm9kZSkpIHsKLSAgICAgICAgLy8KLSAg
ICAgICAgLy8gQnVpbGQgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCi0gICAgICAgIC8vCi0g
ICAgICAgICAgICBpZihpbnRlcm1Ob2RlKQotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0p
LmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKGlu
dGVybU5vZGUsICh5eWxzcFsoMykgLSAoNCldKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gMDsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnJl
YWs7Ci0KLSAgY2FzZSAxMDI6Ci0KLSAgICB7Ci0gICAgICAgIFZFUlRFWF9PTkxZKCJpbnZhcmlh
bnQgZGVjbGFyYXRpb24iLCAoeXlsc3BbKDEpIC0gKDIpXSkpOwotICAgICAgICBpZiAoY29udGV4
dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDIpXSksIGNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSwgImludmFyaWFudCB2YXJ5aW5nIikpCi0gICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUuc2V0QmFzaWMo
RWJ0SW52YXJpYW50LCBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCAoeXlsc3BbKDIpIC0gKDIpXSkp
OwotICAgICAgICBpZiAoISh5eXZzcFsoMikgLSAoMildLmxleCkuc3ltYm9sKQotICAgICAgICB7
Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICJ1bmRlY2xh
cmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgKHl5dnNwWygyKSAtICgyKV0u
bGV4KS5zdHJpbmctPmNfc3RyKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUg
PSAwOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgVElu
dGVybVN5bWJvbCAqc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAq
KHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcsIFRUeXBlKCh5eXZhbC5pbnRlcm0pLnR5cGUp
LCAoeXlsc3BbKDIpIC0gKDIpXSkpOwotICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJt
QWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCAo
eXlsc3BbKDIpIC0gKDIpXSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNh
c2UgMTAzOgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLnR5cGUpOwotCi0gICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0udHlwZSkuYXJyYXkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFso
MSkgLSAoMSldKSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKLSAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMSld
LmludGVybS50eXBlKS5zZXRBcnJheShmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnJl
YWs7Ci0KLSAgY2FzZSAxMDQ6Ci0KLSAgICB7Ci0gICAgICAgIGlmICgoeXl2c3BbKDIpIC0gKDIp
XS5pbnRlcm0udHlwZSkuYXJyYXkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxz
cFsoMikgLSAoMildKSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKLSAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICh5eXZzcFsoMikgLSAo
MildLmludGVybS50eXBlKS5zZXRBcnJheShmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1
dGUgJiYKLSAgICAgICAgICAgICgoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9
PSBFYnRCb29sIHx8ICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidElu
dCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgImNh
bm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlw
ZSkucXVhbGlmaWVyID09IEV2cVZhcnlpbmdJbiB8fCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0u
dHlwZSkucXVhbGlmaWVyID09IEV2cVZhcnlpbmdPdXQpICYmCi0gICAgICAgICAgICAoKHl5dnNw
WygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0Qm9vbCB8fCAoeXl2c3BbKDIpIC0g
KDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRJbnQpKSB7Ci0gICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRR
dWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcikp
OwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSk7Ci0gICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkucXVhbGlmaWVyID0gKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtLnR5cGUpLnF1YWxpZmllcjsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMDU6Ci0K
LSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZx
Q29uc3QsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2Ug
MTA2OgotCi0gICAgewotICAgICAgICBWRVJURVhfT05MWSgiYXR0cmlidXRlIiwgKHl5bHNwWygx
KSAtICgxKV0pKTsKLSAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5bHNw
WygxKSAtICgxKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJhdHRy
aWJ1dGUiKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFBdHRyaWJ1dGUsICh5eWxzcFsoMSkg
LSAoMSldKSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTA3OgotCi0gICAgewotICAg
ICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDEpXSksIGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgInZhcnlpbmciKSkKLSAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUg
PT0gU0hfVkVSVEVYX1NIQURFUikKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0
QmFzaWMoRWJ0Vm9pZCwgRXZxVmFyeWluZ091dCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lk
LCBFdnFWYXJ5aW5nSW4sICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgfQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgMTA4OgotCi0gICAgewotICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JD
aGVjaygoeXlsc3BbKDEpIC0gKDIpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2
ZWwoKSwgImludmFyaWFudCB2YXJ5aW5nIikpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIp
Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUlu
dmFyaWFudFZhcnlpbmdPdXQsICh5eWxzcFsoMSkgLSAoMildKSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxSW52YXJp
YW50VmFyeWluZ0luLCAoeXlsc3BbKDEpIC0gKDIpXSkpOwotICAgIH0KLSAgICBicmVhazsKLQot
ICBjYXNlIDEwOToKLQotICAgIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hl
Y2soKHl5bHNwWygxKSAtICgxKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCksICJ1bmlmb3JtIikpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVW5pZm9ybSwgKHl5bHNw
WygxKSAtICgxKV0pKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMTA6Ci0KLSAgICB7
Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
dHlwZSk7Ci0KLSAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0udHlwZSkucHJlY2lzaW9uID09IEVi
cFVuZGVmaW5lZCkgewotICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5wcmVjaXNpb24g
PSBjb250ZXh0LT5zeW1ib2xUYWJsZS5nZXREZWZhdWx0UHJlY2lzaW9uKCh5eXZzcFsoMSkgLSAo
MSldLmludGVybS50eXBlKS50eXBlKTsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5wcmVjaXNp
b25FcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgKHl5dmFsLmludGVybS50eXBlKS5wcmVj
aXNpb24sICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS50eXBlKSkgewotICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLSAgICBicmVhazsKLQotICBjYXNlIDExMToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKTsKLSAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5wcmVjaXNpb24gPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0ucHJl
Y2lzaW9uKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMTI6Ci0KLSAgICB7Ci0gICAg
ICAgICh5eXZhbC5pbnRlcm0ucHJlY2lzaW9uKSA9IEVicEhpZ2g7Ci0gICAgfQotICAgIGJyZWFr
OwotCi0gIGNhc2UgMTEzOgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLnByZWNpc2lv
bikgPSBFYnBNZWRpdW07Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTE0OgotCi0gICAg
ewotICAgICAgICAoeXl2YWwuaW50ZXJtLnByZWNpc2lvbikgPSBFYnBMb3c7Ci0gICAgfQotICAg
IGJyZWFrOwotCi0gIGNhc2UgMTE1OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOwotICAgIH0KLSAgICBicmVhazsK
LQotICBjYXNlIDExNjoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5
eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+YXJy
YXlUeXBlRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDQpXSksICh5eXZzcFsoMSkgLSAoNCldLmlu
dGVybS50eXBlKSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgaW50IHNpemU7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJy
YXlTaXplRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDQpXSksICh5eXZzcFsoMykgLSAoNCldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCBzaXplKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFycmF5KHRydWUs
IHNpemUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTE3OgotCi0g
ICAgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsK
LSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMTg6Ci0KLSAgICB7Ci0gICAgICAgIFRRdWFs
aWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUds
b2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNp
YyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICB9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSAxMTk6Ci0KLSAgICB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFy
eTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5
eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTIwOgotCi0g
ICAgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsK
LSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMjE6Ci0KLSAgICB7Ci0gICAgICAgIFRRdWFs
aWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUds
b2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNp
YyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMik7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2Ug
MTIyOgotCi0gICAgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkg
LSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOwot
ICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDEyMzoKLQotICAgIHsKLSAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2lj
KEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAx
MjQ6Ci0KLSAgICB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXlsc3BbKDEpIC0g
KDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgyKTsKLSAg
ICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMjU6Ci0KLSAgICB7Ci0gICAgICAgIFRRdWFsaWZp
ZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2Jh
bCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhF
YnRCb29sLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnNldEFnZ3JlZ2F0ZSgzKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMjY6
Ci0KLSAgICB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEp
XSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKLSAgICB9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMjc6Ci0KLSAgICB7Ci0gICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJ
bnQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QWdncmVnYXRlKDIpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDEyODoKLQot
ICAgIHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRH
bG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEludCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsK
LSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMyk7Ci0gICAgfQotICAg
IGJyZWFrOwotCi0gIGNhc2UgMTI5OgotCi0gICAgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwg
PSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBx
dWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEFnZ3JlZ2F0ZSg0KTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMzA6Ci0KLSAgICB7
Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMiwgdHJ1ZSk7Ci0gICAgfQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgMTMxOgotCi0gICAgewotICAgICAgICBUUXVhbGlmaWVyIHF1
YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Rmxv
YXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QWdncmVnYXRlKDMsIHRydWUpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDEz
MjoKLQotICAgIHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0g
KDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0LCB0cnVl
KTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMzM6Ci0KLSAgICB7Ci0gICAgICAgIFRR
dWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2
cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRTYW1wbGVyMkQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgfQotICAg
IGJyZWFrOwotCi0gIGNhc2UgMTM0OgotCi0gICAgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwg
PSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U2FtcGxl
ckN1YmUsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0g
IGNhc2UgMTM1OgotCi0gICAgewotICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRXh0ZW5z
aW9uKCJHTF9PRVNfRUdMX2ltYWdlX2V4dGVybmFsIikpIHsKLSAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlckV4
dGVybmFsT0VTIik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxM
ZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnNldEJhc2ljKEVidFNhbXBsZXJFeHRlcm5hbE9FUywgcXVhbCwgKHl5bHNwWygxKSAt
ICgxKV0pKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMzY6Ci0KLSAgICB7Ci0gICAg
ICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNFeHRlbnNpb24oIkdMX0FSQl90ZXh0dXJlX3JlY3Rh
bmdsZSIpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSks
ICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXIyRFJlY3QiKTsKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jh
cnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U2FtcGxlcjJEUmVj
dCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSAxMzc6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0udHlwZSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucXVhbGlm
aWVyID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDog
RXZxVGVtcG9yYXJ5OwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDEzODoKLQotICAgIHsK
LSAgICAgICAgLy8KLSAgICAgICAgLy8gVGhpcyBpcyBmb3IgdXNlciBkZWZpbmVkIHR5cGUgbmFt
ZXMuICBUaGUgbGV4aWNhbCBwaGFzZSBsb29rZWQgdXAgdGhlCi0gICAgICAgIC8vIHR5cGUuCi0g
ICAgICAgIC8vCi0gICAgICAgIFRUeXBlJiBzdHJ1Y3R1cmUgPSBzdGF0aWNfY2FzdDxUVmFyaWFi
bGUqPigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN5bWJvbCktPmdldFR5cGUoKTsKLSAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEJhc2ljKEVidFN0cnVjdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS51c2VyRGVmID0gJnN0cnVjdHVyZTsKLSAgICB9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSAxMzk6Ci0KLSAgICB7IGlmIChjb250ZXh0LT5lbnRlclN0cnVjdERlY2xhcmF0
aW9uKCh5eWxzcFsoMikgLSAoMyldKSwgKih5eXZzcFsoMikgLSAoMyldLmxleCkuc3RyaW5nKSkg
Y29udGV4dC0+cmVjb3ZlcigpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNDA6Ci0KLSAgICB7
Ci0gICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg2
KV0pLCAqKHl5dnNwWygyKSAtICg2KV0ubGV4KS5zdHJpbmcpKQotICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIFRUeXBlKiBzdHJ1Y3R1cmUgPSBuZXcgVFR5cGUobmV3
IFRTdHJ1Y3R1cmUoKHl5dnNwWygyKSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoNSkgLSAo
NildLmludGVybS5maWVsZExpc3QpKSk7Ci0gICAgICAgIFRWYXJpYWJsZSogdXNlclR5cGVEZWYg
PSBuZXcgVFZhcmlhYmxlKCh5eXZzcFsoMikgLSAoNildLmxleCkuc3RyaW5nLCAqc3RydWN0dXJl
LCB0cnVlKTsKLSAgICAgICAgaWYgKCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp1c2Vy
VHlwZURlZikpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoNild
KSwgInJlZGVmaW5pdGlvbiIsICh5eXZzcFsoMikgLSAoNildLmxleCkuc3RyaW5nLT5jX3N0cigp
LCAic3RydWN0Iik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBv
cmFyeSwgKHl5bHNwWygxKSAtICg2KV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS51
c2VyRGVmID0gc3RydWN0dXJlOwotICAgICAgICBjb250ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRp
b24oKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNDE6Ci0KLSAgICB7IGlmIChjb250
ZXh0LT5lbnRlclN0cnVjdERlY2xhcmF0aW9uKCh5eWxzcFsoMikgLSAoMildKSwgKih5eXZzcFso
MikgLSAoMildLmxleCkuc3RyaW5nKSkgY29udGV4dC0+cmVjb3ZlcigpOyB9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSAxNDI6Ci0KLSAgICB7Ci0gICAgICAgIFRUeXBlKiBzdHJ1Y3R1cmUgPSBuZXcg
VFR5cGUobmV3IFRTdHJ1Y3R1cmUoTmV3UG9vbFRTdHJpbmcoIiIpLCAoeXl2c3BbKDQpIC0gKDUp
XS5pbnRlcm0uZmllbGRMaXN0KSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJh
c2ljKEVidFN0cnVjdCwgRXZxVGVtcG9yYXJ5LCAoeXlsc3BbKDEpIC0gKDUpXSkpOwotICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7Ci0gICAgICAgIGNvbnRl
eHQtPmV4aXRTdHJ1Y3REZWNsYXJhdGlvbigpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNl
IDE0MzoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5maWVsZExpc3QpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmZpZWxkTGlzdCk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNh
c2UgMTQ0OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSAoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0uZmllbGRMaXN0KTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uZmllbGRMaXN0KS0+c2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgIFRGaWVsZCogZmllbGQgPSAoKih5eXZzcFsoMikgLSAoMildLmludGVy
bS5maWVsZExpc3QpKVtpXTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgKHl5
dmFsLmludGVybS5maWVsZExpc3QpLT5zaXplKCk7ICsraikgewotICAgICAgICAgICAgICAgIGlm
ICgoKih5eXZhbC5pbnRlcm0uZmllbGRMaXN0KSlbal0tPm5hbWUoKSA9PSBmaWVsZC0+bmFtZSgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMild
KSwgImR1cGxpY2F0ZSBmaWVsZCBuYW1lIGluIHN0cnVjdHVyZToiLCAic3RydWN0IiwgZmllbGQt
Pm5hbWUoKS5jX3N0cigpKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uZmllbGRMaXN0KS0+cHVzaF9iYWNrKGZpZWxkKTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICBicmVhazsKLQotICBjYXNlIDE0NToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5m
aWVsZExpc3QpID0gKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmZpZWxkTGlzdCk7Ci0KLSAgICAg
ICAgaWYgKGNvbnRleHQtPnZvaWRFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMyldKSwgKCooeXl2
c3BbKDIpIC0gKDMpXS5pbnRlcm0uZmllbGRMaXN0KSlbMF0tPm5hbWUoKSwgKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLnR5cGUpKSkgewotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICB9Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgKHl5dmFsLmlu
dGVybS5maWVsZExpc3QpLT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgLy8KLSAgICAgICAg
ICAgIC8vIENhcmVmdWwgbm90IHRvIHJlcGxhY2UgYWxyZWFkeSBrbm93biBhc3BlY3RzIG9mIHR5
cGUsIGxpa2UgYXJyYXktbmVzcwotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIFRUeXBlKiB0
eXBlID0gKCooeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkpW2ldLT50eXBlKCk7Ci0gICAgICAgICAg
ICB0eXBlLT5zZXRCYXNpY1R5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnR5cGUp
OwotICAgICAgICAgICAgdHlwZS0+c2V0Tm9taW5hbFNpemUoKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLnR5cGUpLnNpemUpOwotICAgICAgICAgICAgdHlwZS0+c2V0TWF0cml4KCh5eXZzcFsoMSkg
LSAoMyldLmludGVybS50eXBlKS5tYXRyaXgpOwotICAgICAgICAgICAgdHlwZS0+c2V0UHJlY2lz
aW9uKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5wcmVjaXNpb24pOwotCi0gICAgICAg
ICAgICAvLyBkb24ndCBhbGxvdyBhcnJheXMgb2YgYXJyYXlzCi0gICAgICAgICAgICBpZiAodHlw
ZS0+aXNBcnJheSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVy
cm9yQ2hlY2soKHl5bHNwWygxKSAtICgzKV0pLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlw
ZSkpKQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLmFycmF5
KQotICAgICAgICAgICAgICAgIHR5cGUtPnNldEFycmF5U2l6ZSgoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0udHlwZSkuYXJyYXlTaXplKTsKLSAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0udHlwZSkudXNlckRlZikKLSAgICAgICAgICAgICAgICB0eXBlLT5zZXRTdHJ1Y3Qo
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnVzZXJEZWYtPmdldFN0cnVjdCgpKTsKLQot
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdE5lc3RpbmdFcnJvckNoZWNrKCh5eWxzcFso
MSkgLSAoMyldKSwgKigqKHl5dmFsLmludGVybS5maWVsZExpc3QpKVtpXSkpCi0gICAgICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgMTQ2OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkg
PSBOZXdQb29sVEZpZWxkTGlzdCgpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkt
PnB1c2hfYmFjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uZmllbGQpKTsKLSAgICB9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSAxNDc6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uZmll
bGRMaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMykgLSAoMyldLmludGVybS5maWVsZCkpOwotICAg
IH0KLSAgICBicmVhazsKLQotICBjYXNlIDE0ODoKLQotICAgIHsKLSAgICAgICAgaWYgKGNvbnRl
eHQtPnJlc2VydmVkRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDEpXSksICooeXl2c3BbKDEpIC0g
KDEpXS5sZXgpLnN0cmluZykpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAg
ICAgICAgVFR5cGUqIHR5cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKLSAg
ICAgICAgKHl5dmFsLmludGVybS5maWVsZCkgPSBuZXcgVEZpZWxkKHR5cGUsICh5eXZzcFsoMSkg
LSAoMSldLmxleCkuc3RyaW5nKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNDk6Ci0K
LSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5bHNwWygx
KSAtICg0KV0pLCAqKHl5dnNwWygxKSAtICg0KV0ubGV4KS5zdHJpbmcpKQotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKEVi
dFZvaWQsIEVicFVuZGVmaW5lZCk7Ci0gICAgICAgIGludCBzaXplID0gMDsKLSAgICAgICAgaWYg
KGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg0KV0pLCAoeXl2c3Bb
KDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCi0gICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIHR5cGUtPnNldEFycmF5U2l6ZShzaXplKTsKLQot
ICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkKSA9IG5ldyBURmllbGQodHlwZSwgKHl5dnNwWygx
KSAtICg0KV0ubGV4KS5zdHJpbmcpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE1MDoK
LQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDE1MToK
LQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1Ob2RlKTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTUyOgotCi0gICAgeyAo
eXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVy
bUFnZ3JlZ2F0ZSk7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDE1MzoKLQotICAgIHsgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2Rl
KTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTU0OgotCi0gICAgeyAoeXl2YWwuaW50ZXJtLmlu
dGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSAxNTU6Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KLSAgICBicmVhazsKLQot
ICBjYXNlIDE1NjoKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTU3
OgotCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybU5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNTg6Ci0KLSAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50
ZXJtTm9kZSk7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDE1OToKLQotICAgIHsgKHl5dmFsLmlu
dGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gMDsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTYwOgot
Ci0gICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0KLSAgICBicmVhazsKLQotICBj
YXNlIDE2MToKLQotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7IH0KLSAgICBicmVh
azsKLQotICBjYXNlIDE2MjoKLQotICAgIHsKLSAgICAgICAgaWYgKCh5eXZzcFsoMykgLSAoNSld
LmludGVybS5pbnRlcm1BZ2dyZWdhdGUpICE9IDApIHsKLSAgICAgICAgICAgICh5eXZzcFsoMykg
LSAoNSldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpLT5zZXRPcChFT3BTZXF1ZW5jZSk7Ci0gICAg
ICAgICAgICAoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKS0+c2V0TGlu
ZSgoeXlsb2MpKTsKLSAgICAgICAgfQotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybUFnZ3Jl
Z2F0ZSkgPSAoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKTsKLSAgICB9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNjM6Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJt
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KLSAgICBicmVh
azsKLQotICBjYXNlIDE2NDoKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQotICAgIGJyZWFrOwotCi0gIGNh
c2UgMTY1OgotCi0gICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0KLSAgICBicmVh
azsKLQotICBjYXNlIDE2NjoKLQotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7ICh5
eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJt
Tm9kZSk7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDE2NzoKLQotICAgIHsgY29udGV4dC0+c3lt
Ym9sVGFibGUucHVzaCgpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNjg6Ci0KLSAgICB7IGNv
bnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5
dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSAxNjk6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOwot
ICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE3MDoKLQotICAgIHsKLSAgICAgICAgaWYgKCh5
eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpKSB7Ci0gICAgICAgICAgICAo
eXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKS0+c2V0T3AoRU9wU2VxdWVu
Y2UpOwotICAgICAgICAgICAgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0
ZSktPnNldExpbmUoKHl5bG9jKSk7Ci0gICAgICAgIH0KLSAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1Ob2RlKSA9ICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpOwot
ICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE3MToKLQotICAgIHsKLSAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dy
ZWdhdGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXlsb2MpKTsKLSAg
ICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNzI6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtQWdncmVnYXRlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVn
YXRlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpLCAoeXl2c3BbKDIp
IC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eWxvYykpOwotICAgIH0KLSAgICBicmVhazsK
LQotICBjYXNlIDE3MzoKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IDA7IH0K
LSAgICBicmVhazsKLQotICBjYXNlIDE3NDoKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1O
b2RlKSA9IHN0YXRpY19jYXN0PFRJbnRlcm1Ob2RlKj4oKHl5dnNwWygxKSAtICgyKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSkpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNzU6Ci0KLSAgICB7
Ci0gICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDUpXSks
ICh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTZWxlY3Rpb24oKHl5dnNwWygzKSAtICg1KV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoNSkgLSAoNSldLmludGVybS5ub2RlUGFpciks
ICh5eWxzcFsoMSkgLSAoNSldKSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTc2Ogot
Ci0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1Ob2RlKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5ub2Rl
UGFpcikubm9kZTIgPSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAg
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTc3OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50
ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2Rl
KTsKLSAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTIgPSAwOwotICAgIH0KLSAg
ICBicmVhazsKLQotICBjYXNlIDE3ODoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSk7Ci0gICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0TGluZSgpLCAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTc5OgotCi0gICAgewotICAgICAgICBUSW50
ZXJtTm9kZSogaW50ZXJtTm9kZTsKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmll
ckVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg0KV0pLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0u
dHlwZSkpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBpZiAoY29u
dGV4dC0+Ym9vbEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg0KV0pLCAoeXl2c3BbKDEpIC0gKDQp
XS5pbnRlcm0udHlwZSkpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAg
ICAgIGlmICghY29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKCh5eWxzcFsoMikgLSAoNCldKSwg
Kih5eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0u
dHlwZSksICh5eXZzcFsoNCkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbnRlcm1O
b2RlKSkKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZz
cFsoNCkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSAxODA6Ci0KLSAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgKytjb250ZXh0
LT5sb29wTmVzdGluZ0xldmVsOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxODE6Ci0KLSAgICB7
Ci0gICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwotICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3AoRUxvb3BXaGls
ZSwgMCwgKHl5dnNwWyg0KSAtICg2KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIDAsICh5eXZz
cFsoNikgLSAoNildLmludGVybS5pbnRlcm1Ob2RlKSwgKHl5bHNwWygxKSAtICg2KV0pKTsKLSAg
ICAgICAgLS1jb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOwotICAgIH0KLSAgICBicmVhazsKLQot
ICBjYXNlIDE4MjoKLQotICAgIHsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyB9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSAxODM6Ci0KLSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5ib29s
RXJyb3JDaGVjaygoeXlsc3BbKDgpIC0gKDgpXSksICh5eXZzcFsoNikgLSAoOCldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZExvb3AoRUxvb3BEb1doaWxlLCAwLCAoeXl2c3BbKDYpIC0gKDgpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSwgMCwgKHl5dnNwWygzKSAtICg4KV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXlsc3Bb
KDQpIC0gKDgpXSkpOwotICAgICAgICAtLWNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7Ci0gICAg
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTg0OgotCi0gICAgeyBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5wdXNoKCk7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfQotICAgIGJyZWFrOwotCi0g
IGNhc2UgMTg1OgotCi0gICAgewotICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsK
LSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRMb29wKEVMb29wRm9yLCAoeXl2c3BbKDQpIC0gKDcpXS5pbnRlcm0uaW50ZXJtTm9kZSks
IHJlaW50ZXJwcmV0X2Nhc3Q8VEludGVybVR5cGVkKj4oKHl5dnNwWyg1KSAtICg3KV0uaW50ZXJt
Lm5vZGVQYWlyKS5ub2RlMSksIHJlaW50ZXJwcmV0X2Nhc3Q8VEludGVybVR5cGVkKj4oKHl5dnNw
Wyg1KSAtICg3KV0uaW50ZXJtLm5vZGVQYWlyKS5ub2RlMiksICh5eXZzcFsoNykgLSAoNyldLmlu
dGVybS5pbnRlcm1Ob2RlKSwgKHl5bHNwWygxKSAtICg3KV0pKTsKLSAgICAgICAgLS1jb250ZXh0
LT5sb29wTmVzdGluZ0xldmVsOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE4NjoKLQot
ICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1Ob2RlKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxODc6
Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2Ug
MTg4OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICB9Ci0gICAgYnJl
YWs7Ci0KLSAgY2FzZSAxODk6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9IDA7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTkwOgotCi0gICAg
ewotICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAo
MildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQ
YWlyKS5ub2RlMiA9IDA7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTkxOgotCi0gICAg
ewotICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQ
YWlyKS5ub2RlMiA9ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwot
ICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE5MjoKLQotICAgIHsKLSAgICAgICAgaWYgKGNv
bnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPD0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoKHl5bHNwWygxKSAtICgyKV0pLCAiY29udGludWUgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBp
biBsb29wcyIsICIiKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
fQotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZEJyYW5jaChFT3BDb250aW51ZSwgKHl5bHNwWygxKSAtICgyKV0pKTsKLSAgICB9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSAxOTM6Ci0KLSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5s
b29wTmVzdGluZ0xldmVsIDw9IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxz
cFsoMSkgLSAoMildKSwgImJyZWFrIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAi
Iik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFu
Y2goRU9wQnJlYWssICh5eWxzcFsoMSkgLSAoMildKSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0g
IGNhc2UgMTk0OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1cm4sICh5eWxzcFsoMSkgLSAo
MildKSk7Ci0gICAgICAgIGlmIChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNp
Y1R5cGUoKSAhPSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3Bb
KDEpIC0gKDIpXSksICJub24tdm9pZCBmdW5jdGlvbiBtdXN0IHJldHVybiBhIHZhbHVlIiwgInJl
dHVybiIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAg
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTk1OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1
cm4sICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDEp
IC0gKDMpXSkpOwotICAgICAgICBjb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IHRydWU7
Ci0gICAgICAgIGlmIChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUo
KSA9PSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0g
KDMpXSksICJ2b2lkIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iKTsK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfSBlbHNlIGlmICgqKGNv
bnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUpICE9ICh5eXZzcFsoMikgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eWxzcFsoMSkgLSAoMyldKSwgImZ1bmN0aW9uIHJldHVybiBpcyBub3QgbWF0Y2hpbmcgdHlw
ZToiLCAicmV0dXJuIik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxOTY6Ci0KLSAgICB7Ci0gICAgICAgIEZS
QUdfT05MWSgiZGlzY2FyZCIsICh5eWxzcFsoMSkgLSAoMildKSk7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcEtp
bGwsICh5eWxzcFsoMSkgLSAoMildKSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTk3
OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwotICAgICAgICBjb250ZXh0LT50cmVlUm9vdCA9
ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2Ug
MTk4OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmlu
dGVybU5vZGUpLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eWxvYykp
OwotICAgICAgICBjb250ZXh0LT50cmVlUm9vdCA9ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSk7
Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTk5OgotCi0gICAgewotICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5v
ZGUpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDIwMDoKLQotICAgIHsKLSAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1Ob2RlKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyMDE6Ci0KLSAgICB7Ci0gICAg
ICAgIFRGdW5jdGlvbiogZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmZ1bmN0
aW9uOwotICAgICAgICAKLSAgICAgICAgY29uc3QgVFN5bWJvbCAqYnVpbHRJbiA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKGZ1bmN0aW9uLT5nZXRNYW5nbGVkTmFtZSgpKTsKLSAg
ICAgICAgCi0gICAgICAgIGlmIChidWlsdEluKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSksICJidWlsdC1pbiBmdW5jdGlvbnMgY2Fubm90
IGJlIHJlZGVmaW5lZCIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSk7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFRGdW5j
dGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRh
YmxlLmZpbmQoZnVuY3Rpb24tPmdldE1hbmdsZWROYW1lKCkpKTsKLSAgICAgICAgLy8KLSAgICAg
ICAgLy8gTm90ZTogICdwcmV2RGVjJyBjb3VsZCBiZSAnZnVuY3Rpb24nIGlmIHRoaXMgaXMgdGhl
IGZpcnN0IHRpbWUgd2UndmUgc2VlbiBmdW5jdGlvbgotICAgICAgICAvLyBhcyBpdCB3b3VsZCBo
YXZlIGp1c3QgYmVlbiBwdXQgaW4gdGhlIHN5bWJvbCB0YWJsZS4gIE90aGVyd2lzZSwgd2UncmUg
bG9va2luZyB1cAotICAgICAgICAvLyBhbiBlYXJsaWVyIG9jY3VyYW5jZS4KLSAgICAgICAgLy8K
LSAgICAgICAgaWYgKHByZXZEZWMtPmlzRGVmaW5lZCgpKSB7Ci0gICAgICAgICAgICAvLwotICAg
ICAgICAgICAgLy8gVGhlbiB0aGlzIGZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keS4KLSAgICAg
ICAgICAgIC8vCi0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSks
ICJmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3Ry
KCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAg
IHByZXZEZWMtPnNldERlZmluZWQoKTsKLQotICAgICAgICAvLwotICAgICAgICAvLyBSYWlzZSBl
cnJvciBtZXNzYWdlIGlmIG1haW4gZnVuY3Rpb24gdGFrZXMgYW55IHBhcmFtZXRlcnMgb3IgcmV0
dXJuIGFueXRoaW5nIG90aGVyIHRoYW4gdm9pZAotICAgICAgICAvLwotICAgICAgICBpZiAoZnVu
Y3Rpb24tPmdldE5hbWUoKSA9PSAibWFpbiIpIHsKLSAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+
Z2V0UGFyYW1Db3VudCgpID4gMCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eWxzcFsoMSkgLSAoMSldKSwgImZ1bmN0aW9uIGNhbm5vdCB0YWtlIGFueSBwYXJhbWV0ZXIocyki
LCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwotICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0
UmV0dXJuVHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQpIHsKLSAgICAgICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSksICIiLCBmdW5jdGlvbi0+Z2V0UmV0
dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCksICJtYWluIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4g
YSB2YWx1ZSIpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFJlbWVtYmVyIHRoZSBy
ZXR1cm4gdHlwZSBmb3IgbGF0ZXIgY2hlY2tpbmcgZm9yIFJFVFVSTiBzdGF0ZW1lbnRzLgotICAg
ICAgICAvLwotICAgICAgICBjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlID0gJihwcmV2RGVj
LT5nZXRSZXR1cm5UeXBlKCkpOwotICAgICAgICBjb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1
ZSA9IGZhbHNlOwotCi0gICAgICAgIC8vCi0gICAgICAgIC8vIEluc2VydCBwYXJhbWV0ZXJzIGlu
dG8gdGhlIHN5bWJvbCB0YWJsZS4KLSAgICAgICAgLy8gSWYgdGhlIHBhcmFtZXRlciBoYXMgbm8g
bmFtZSwgaXQncyBub3QgYW4gZXJyb3IsIGp1c3QgZG9uJ3QgaW5zZXJ0IGl0Ci0gICAgICAgIC8v
IChjb3VsZCBiZSB1c2VkIGZvciB1bnVzZWQgYXJncykuCi0gICAgICAgIC8vCi0gICAgICAgIC8v
IEFsc28sIGFjY3VtdWxhdGUgdGhlIGxpc3Qgb2YgcGFyYW1ldGVycyBpbnRvIHRoZSBISUwsIHNv
IGxvd2VyIGxldmVsIGNvZGUKLSAgICAgICAgLy8ga25vd3Mgd2hlcmUgdG8gZmluZCBwYXJhbWV0
ZXJzLgotICAgICAgICAvLwotICAgICAgICBUSW50ZXJtQWdncmVnYXRlKiBwYXJhbU5vZGVzID0g
bmV3IFRJbnRlcm1BZ2dyZWdhdGU7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVu
Y3Rpb24tPmdldFBhcmFtQ291bnQoKTsgaSsrKSB7Ci0gICAgICAgICAgICBjb25zdCBUUGFyYW1l
dGVyJiBwYXJhbSA9IGZ1bmN0aW9uLT5nZXRQYXJhbShpKTsKLSAgICAgICAgICAgIGlmIChwYXJh
bS5uYW1lICE9IDApIHsKLSAgICAgICAgICAgICAgICBUVmFyaWFibGUgKnZhcmlhYmxlID0gbmV3
IFRWYXJpYWJsZShwYXJhbS5uYW1lLCAqcGFyYW0udHlwZSk7Ci0gICAgICAgICAgICAgICAgLy8K
LSAgICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIHBhcmFtZXRlcnMgd2l0aCBuYW1lIGluIHRo
ZSBzeW1ib2wgdGFibGUuCi0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICBpZiAo
ISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgewotICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSksICJyZWRlZmluaXRpb24i
LCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwotICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIC8v
IEFkZCB0aGUgcGFyYW1ldGVyIHRvIHRoZSBISUwKLSAgICAgICAgICAgICAgICAvLwotICAgICAg
ICAgICAgICAgIHBhcmFtTm9kZXMgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0
ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1O
b2RlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0TmFtZSgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHl5bHNw
WygxKSAtICgxKV0pKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgcGFyYW1Ob2RlcyA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRl
KHBhcmFtTm9kZXMsIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsICpwYXJh
bS50eXBlLCAoeXlsc3BbKDEpIC0gKDEpXSkpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dy
ZWdhdGVPcGVyYXRvcihwYXJhbU5vZGVzLCBFT3BQYXJhbWV0ZXJzLCAoeXlsc3BbKDEpIC0gKDEp
XSkpOwotICAgICAgICAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9
IHBhcmFtTm9kZXM7Ci0gICAgICAgIGNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPSAwOwotICAg
IH0KLSAgICBicmVhazsKLQotICBjYXNlIDIwMjoKLQotICAgIHsKLSAgICAgICAgLy8/PyBDaGVj
ayB0aGF0IGFsbCBwYXRocyByZXR1cm4gYSB2YWx1ZSBpZiByZXR1cm4gdHlwZSAhPSB2b2lkID8K
LSAgICAgICAgLy8gICBNYXkgYmUgYmVzdCBkb25lIGFzIHBvc3QgcHJvY2VzcyBwaGFzZSBvbiBp
bnRlcm1lZGlhdGUgY29kZQotICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlw
ZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCAmJiAhIGNvbnRleHQtPmZ1bmN0aW9uUmV0dXJu
c1ZhbHVlKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDMpXSks
ICJmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZToiLCAiIiwgKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtKS5mdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwotICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUsICh5eXZzcFsoMykgLSAoMyld
LmludGVybS5pbnRlcm1Ob2RlKSwgKHl5bG9jKSk7Ci0gICAgICAgIGNvbnRleHQtPmludGVybWVk
aWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcigoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLCBFT3BG
dW5jdGlvbiwgKHl5bHNwWygxKSAtICgzKV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1Ob2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0TmFtZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0pLmZ1bmN0aW9uLT5nZXRNYW5nbGVkTmFtZSgpLmNfc3RyKCkpOwotICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRUeXBlKCh5eXZzcFsoMSkg
LSAoMyldLmludGVybSkuZnVuY3Rpb24tPmdldFJldHVyblR5cGUoKSk7Ci0KLSAgICAgICAgLy8g
c3RvcmUgdGhlIHByYWdtYSBpbmZvcm1hdGlvbiBmb3IgZGVidWcgYW5kIG9wdGltaXplIGFuZCBv
dGhlciB2ZW5kb3Igc3BlY2lmaWMKLSAgICAgICAgLy8gaW5mb3JtYXRpb24uIFRoaXMgaW5mb3Jt
YXRpb24gY2FuIGJlIHF1ZXJpZWQgZnJvbSB0aGUgcGFyc2UgdHJlZQotICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRPcHRpbWl6ZShjb250ZXh0
LT5wcmFnbWEoKS5vcHRpbWl6ZSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkt
PmdldEFzQWdncmVnYXRlKCktPnNldERlYnVnKGNvbnRleHQtPnByYWdtYSgpLmRlYnVnKTsKLQot
ICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0K
LQotCi0gICAgICBkZWZhdWx0OiBicmVhazsKLSAgICB9Ci0gIC8qIFVzZXIgc2VtYW50aWMgYWN0
aW9ucyBzb21ldGltZXMgYWx0ZXIgeXljaGFyLCBhbmQgdGhhdCByZXF1aXJlcwotICAgICB0aGF0
IHl5dG9rZW4gYmUgdXBkYXRlZCB3aXRoIHRoZSBuZXcgdHJhbnNsYXRpb24uICBXZSB0YWtlIHRo
ZQotICAgICBhcHByb2FjaCBvZiB0cmFuc2xhdGluZyBpbW1lZGlhdGVseSBiZWZvcmUgZXZlcnkg
dXNlIG9mIHl5dG9rZW4uCi0gICAgIE9uZSBhbHRlcm5hdGl2ZSBpcyB0cmFuc2xhdGluZyBoZXJl
IGFmdGVyIGV2ZXJ5IHNlbWFudGljIGFjdGlvbiwKLSAgICAgYnV0IHRoYXQgdHJhbnNsYXRpb24g
d291bGQgYmUgbWlzc2VkIGlmIHRoZSBzZW1hbnRpYyBhY3Rpb24gaW52b2tlcwotICAgICBZWUFC
T1JULCBZWUFDQ0VQVCwgb3IgWVlFUlJPUiBpbW1lZGlhdGVseSBhZnRlciBhbHRlcmluZyB5eWNo
YXIgb3IKLSAgICAgaWYgaXQgaW52b2tlcyBZWUJBQ0tVUC4gIEluIHRoZSBjYXNlIG9mIFlZQUJP
UlQgb3IgWVlBQ0NFUFQsIGFuCi0gICAgIGluY29ycmVjdCBkZXN0cnVjdG9yIG1pZ2h0IHRoZW4g
YmUgaW52b2tlZCBpbW1lZGlhdGVseS4gIEluIHRoZQotICAgICBjYXNlIG9mIFlZRVJST1Igb3Ig
WVlCQUNLVVAsIHN1YnNlcXVlbnQgcGFyc2VyIGFjdGlvbnMgbWlnaHQgbGVhZAotICAgICB0byBh
biBpbmNvcnJlY3QgZGVzdHJ1Y3RvciBjYWxsIG9yIHZlcmJvc2Ugc3ludGF4IGVycm9yIG1lc3Nh
Z2UKLSAgICAgYmVmb3JlIHRoZSBsb29rYWhlYWQgaXMgdHJhbnNsYXRlZC4gICovCi0gIFlZX1NZ
TUJPTF9QUklOVCAoIi0+ICQkID0iLCB5eXIxW3l5bl0sICZ5eXZhbCwgJnl5bG9jKTsKLQotICBZ
WVBPUFNUQUNLICh5eWxlbik7Ci0gIHl5bGVuID0gMDsKLSAgWVlfU1RBQ0tfUFJJTlQgKHl5c3Ms
IHl5c3NwKTsKLQotICAqKyt5eXZzcCA9IHl5dmFsOwotICAqKyt5eWxzcCA9IHl5bG9jOwotCi0g
IC8qIE5vdyBgc2hpZnQnIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbi4gIERldGVybWluZSB3
aGF0IHN0YXRlCi0gICAgIHRoYXQgZ29lcyB0bywgYmFzZWQgb24gdGhlIHN0YXRlIHdlIHBvcHBl
ZCBiYWNrIHRvIGFuZCB0aGUgcnVsZQotICAgICBudW1iZXIgcmVkdWNlZCBieS4gICovCi0KLSAg
eXluID0geXlyMVt5eW5dOwotCi0gIHl5c3RhdGUgPSB5eXBnb3RvW3l5biAtIFlZTlRPS0VOU10g
KyAqeXlzc3A7Ci0gIGlmICgwIDw9IHl5c3RhdGUgJiYgeXlzdGF0ZSA8PSBZWUxBU1QgJiYgeXlj
aGVja1t5eXN0YXRlXSA9PSAqeXlzc3ApCi0gICAgeXlzdGF0ZSA9IHl5dGFibGVbeXlzdGF0ZV07
Ci0gIGVsc2UKLSAgICB5eXN0YXRlID0geXlkZWZnb3RvW3l5biAtIFlZTlRPS0VOU107Ci0KLSAg
Z290byB5eW5ld3N0YXRlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLgotfCB5eWVycmxhYiAtLSBoZXJlIG9uIGRldGVjdGluZyBlcnJvciB8Ci1gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZXJybGFiOgotICAvKiBNYWtlIHN1cmUg
d2UgaGF2ZSBsYXRlc3QgbG9va2FoZWFkIHRyYW5zbGF0aW9uLiAgU2VlIGNvbW1lbnRzIGF0Ci0g
ICAgIHVzZXIgc2VtYW50aWMgYWN0aW9ucyBmb3Igd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LiAgKi8K
LSAgeXl0b2tlbiA9IHl5Y2hhciA9PSBZWUVNUFRZID8gWVlFTVBUWSA6IFlZVFJBTlNMQVRFICh5
eWNoYXIpOwotCi0gIC8qIElmIG5vdCBhbHJlYWR5IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwg
cmVwb3J0IHRoaXMgZXJyb3IuICAqLwotICBpZiAoIXl5ZXJyc3RhdHVzKQotICAgIHsKLSAgICAg
ICsreXluZXJyczsKLSNpZiAhIFlZRVJST1JfVkVSQk9TRQotICAgICAgeXllcnJvciAoJnl5bGxv
YywgY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3IiKSk7Ci0jZWxzZQotIyBkZWZpbmUgWVlTWU5U
QVhfRVJST1IgeXlzeW50YXhfZXJyb3IgKCZ5eW1zZ19hbGxvYywgJnl5bXNnLCBcCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXlzc3AsIHl5dG9rZW4pCi0gICAgICB7
Ci0gICAgICAgIGNoYXIgY29uc3QgKnl5bXNncCA9IFlZXygic3ludGF4IGVycm9yIik7Ci0gICAg
ICAgIGludCB5eXN5bnRheF9lcnJvcl9zdGF0dXM7Ci0gICAgICAgIHl5c3ludGF4X2Vycm9yX3N0
YXR1cyA9IFlZU1lOVEFYX0VSUk9SOwotICAgICAgICBpZiAoeXlzeW50YXhfZXJyb3Jfc3RhdHVz
ID09IDApCi0gICAgICAgICAgeXltc2dwID0geXltc2c7Ci0gICAgICAgIGVsc2UgaWYgKHl5c3lu
dGF4X2Vycm9yX3N0YXR1cyA9PSAxKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICh5eW1z
ZyAhPSB5eW1zZ2J1ZikKLSAgICAgICAgICAgICAgWVlTVEFDS19GUkVFICh5eW1zZyk7Ci0gICAg
ICAgICAgICB5eW1zZyA9IChjaGFyICopIFlZU1RBQ0tfQUxMT0MgKHl5bXNnX2FsbG9jKTsKLSAg
ICAgICAgICAgIGlmICgheXltc2cpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB5
eW1zZyA9IHl5bXNnYnVmOwotICAgICAgICAgICAgICAgIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5
bXNnYnVmOwotICAgICAgICAgICAgICAgIHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9IDI7Ci0gICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9IFlZU1lOVEFYX0VSUk9SOwotICAgICAgICAg
ICAgICAgIHl5bXNncCA9IHl5bXNnOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAg
ICAgICB5eWVycm9yICgmeXlsbG9jLCBjb250ZXh0LCB5eW1zZ3ApOwotICAgICAgICBpZiAoeXlz
eW50YXhfZXJyb3Jfc3RhdHVzID09IDIpCi0gICAgICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsK
LSAgICAgIH0KLSMgdW5kZWYgWVlTWU5UQVhfRVJST1IKLSNlbmRpZgotICAgIH0KLQotICB5eWVy
cm9yX3JhbmdlWzFdID0geXlsbG9jOwotCi0gIGlmICh5eWVycnN0YXR1cyA9PSAzKQotICAgIHsK
LSAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rYWhlYWQgdG9r
ZW4gYWZ0ZXIgYW4KLQkgZXJyb3IsIGRpc2NhcmQgaXQuICAqLwotCi0gICAgICBpZiAoeXljaGFy
IDw9IFlZRU9GKQotCXsKLQkgIC8qIFJldHVybiBmYWlsdXJlIGlmIGF0IGVuZCBvZiBpbnB1dC4g
ICovCi0JICBpZiAoeXljaGFyID09IFlZRU9GKQotCSAgICBZWUFCT1JUOwotCX0KLSAgICAgIGVs
c2UKLQl7Ci0JICB5eWRlc3RydWN0ICgiRXJyb3I6IGRpc2NhcmRpbmciLAotCQkgICAgICB5eXRv
a2VuLCAmeXlsdmFsLCAmeXlsbG9jLCBjb250ZXh0KTsKLQkgIHl5Y2hhciA9IFlZRU1QVFk7Ci0J
fQotICAgIH0KLQotICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBh
ZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKLSAgICAgdG9rZW4uICAqLwotICBnb3RvIHl5ZXJybGFi
MTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS4KLXwgeXllcnJvcmxhYiAtLSBlcnJvciByYWlzZWQgZXhwbGljaXRseSBieSBZWUVSUk9S
LiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSovCi15eWVycm9ybGFiOgotCi0gIC8qIFBhY2lmeSBjb21waWxlcnMgbGlrZSBHQ0Mgd2hlbiB0
aGUgdXNlciBjb2RlIG5ldmVyIGludm9rZXMKLSAgICAgWVlFUlJPUiBhbmQgdGhlIGxhYmVsIHl5
ZXJyb3JsYWIgdGhlcmVmb3JlIG5ldmVyIGFwcGVhcnMgaW4gdXNlcgotICAgICBjb2RlLiAgKi8K
LSAgaWYgKC8qQ09OU1RDT05EKi8gMCkKLSAgICAgZ290byB5eWVycm9ybGFiOwotCi0gIHl5ZXJy
b3JfcmFuZ2VbMV0gPSB5eWxzcFsxLXl5bGVuXTsKLSAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5
bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAotICAgICB0aGlzIFlZRVJS
T1IuICAqLwotICBZWVBPUFNUQUNLICh5eWxlbik7Ci0gIHl5bGVuID0gMDsKLSAgWVlfU1RBQ0tf
UFJJTlQgKHl5c3MsIHl5c3NwKTsKLSAgeXlzdGF0ZSA9ICp5eXNzcDsKLSAgZ290byB5eWVycmxh
YjE7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLgotfCB5eWVycmxhYjEgLS0gY29tbW9uIGNvZGUgZm9yIGJvdGggc3lu
dGF4IGVycm9yIGFuZCBZWUVSUk9SLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXllcnJsYWIxOgotICB5eWVycnN0
YXR1cyA9IDM7CS8qIEVhY2ggcmVhbCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVudHMgdGhpcy4gICov
Ci0KLSAgZm9yICg7OykKLSAgICB7Ci0gICAgICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07Ci0gICAg
ICBpZiAoIXl5cGFjdF92YWx1ZV9pc19kZWZhdWx0ICh5eW4pKQotCXsKLQkgIHl5biArPSBZWVRF
UlJPUjsKLQkgIGlmICgwIDw9IHl5biAmJiB5eW4gPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXluXSA9
PSBZWVRFUlJPUikKLQkgICAgewotCSAgICAgIHl5biA9IHl5dGFibGVbeXluXTsKLQkgICAgICBp
ZiAoMCA8IHl5bikKLQkJYnJlYWs7Ci0JICAgIH0KLQl9Ci0KLSAgICAgIC8qIFBvcCB0aGUgY3Vy
cmVudCBzdGF0ZSBiZWNhdXNlIGl0IGNhbm5vdCBoYW5kbGUgdGhlIGVycm9yIHRva2VuLiAgKi8K
LSAgICAgIGlmICh5eXNzcCA9PSB5eXNzKQotCVlZQUJPUlQ7Ci0KLSAgICAgIHl5ZXJyb3JfcmFu
Z2VbMV0gPSAqeXlsc3A7Ci0gICAgICB5eWRlc3RydWN0ICgiRXJyb3I6IHBvcHBpbmciLAotCQkg
IHl5c3Rvc1t5eXN0YXRlXSwgeXl2c3AsIHl5bHNwLCBjb250ZXh0KTsKLSAgICAgIFlZUE9QU1RB
Q0sgKDEpOwotICAgICAgeXlzdGF0ZSA9ICp5eXNzcDsKLSAgICAgIFlZX1NUQUNLX1BSSU5UICh5
eXNzLCB5eXNzcCk7Ci0gICAgfQotCi0gIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JF
R0lOCi0gICorK3l5dnNwID0geXlsdmFsOwotICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpF
RF9FTkQKLQotICB5eWVycm9yX3JhbmdlWzJdID0geXlsbG9jOwotICAvKiBVc2luZyBZWUxMT0Mg
aXMgdGVtcHRpbmcsIGJ1dCB3b3VsZCBjaGFuZ2UgdGhlIGxvY2F0aW9uIG9mCi0gICAgIHRoZSBs
b29rYWhlYWQuICBZWUxPQyBpcyBhdmFpbGFibGUgdGhvdWdoLiAgKi8KLSAgWVlMTE9DX0RFRkFV
TFQgKHl5bG9jLCB5eWVycm9yX3JhbmdlLCAyKTsKLSAgKisreXlsc3AgPSB5eWxvYzsKLQotICAv
KiBTaGlmdCB0aGUgZXJyb3IgdG9rZW4uICAqLwotICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGlu
ZyIsIHl5c3Rvc1t5eW5dLCB5eXZzcCwgeXlsc3ApOwotCi0gIHl5c3RhdGUgPSB5eW47Ci0gIGdv
dG8geXluZXdzdGF0ZTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0uCi18IHl5YWNjZXB0bGFiIC0tIFlZQUNDRVBUIGNvbWVzIGhlcmUuICB8Ci1gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWFjY2VwdGxhYjoKLSAgeXlyZXN1bHQg
PSAwOwotICBnb3RvIHl5cmV0dXJuOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLgotfCB5eWFib3J0bGFiIC0tIFlZQUJPUlQgY29tZXMgaGVyZS4gIHwKLWAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWFib3J0bGFiOgotICB5eXJlc3VsdCA9
IDE7Ci0gIGdvdG8geXlyZXR1cm47Ci0KLSNpZiAhZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJS
T1JfVkVSQk9TRQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLgotfCB5eWV4aGF1c3RlZGxhYiAtLSBtZW1vcnkgZXhoYXVzdGlvbiBjb21lcyBoZXJl
LiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LwoteXlleGhhdXN0ZWRsYWI6Ci0gIHl5ZXJyb3IgKCZ5eWxsb2MsIGNvbnRleHQsIFlZXygibWVt
b3J5IGV4aGF1c3RlZCIpKTsKLSAgeXlyZXN1bHQgPSAyOwotICAvKiBGYWxsIHRocm91Z2guICAq
LwotI2VuZGlmCi0KLXl5cmV0dXJuOgotICBpZiAoeXljaGFyICE9IFlZRU1QVFkpCi0gICAgewot
ICAgICAgLyogTWFrZSBzdXJlIHdlIGhhdmUgbGF0ZXN0IGxvb2thaGVhZCB0cmFuc2xhdGlvbi4g
IFNlZSBjb21tZW50cyBhdAotICAgICAgICAgdXNlciBzZW1hbnRpYyBhY3Rpb25zIGZvciB3aHkg
dGhpcyBpcyBuZWNlc3NhcnkuICAqLwotICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNo
YXIpOwotICAgICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6IGRpc2NhcmRpbmcgbG9va2FoZWFkIiwK
LSAgICAgICAgICAgICAgICAgIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MsIGNvbnRleHQpOwot
ICAgIH0KLSAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2gg
YWN0aW9uIHRyaWdnZXJlZAotICAgICB0aGlzIFlZQUJPUlQgb3IgWVlBQ0NFUFQuICAqLwotICBZ
WVBPUFNUQUNLICh5eWxlbik7Ci0gIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7Ci0gIHdo
aWxlICh5eXNzcCAhPSB5eXNzKQotICAgIHsKLSAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBw
b3BwaW5nIiwKLQkJICB5eXN0b3NbKnl5c3NwXSwgeXl2c3AsIHl5bHNwLCBjb250ZXh0KTsKLSAg
ICAgIFlZUE9QU1RBQ0sgKDEpOwotICAgIH0KLSNpZm5kZWYgeXlvdmVyZmxvdwotICBpZiAoeXlz
cyAhPSB5eXNzYSkKLSAgICBZWVNUQUNLX0ZSRUUgKHl5c3MpOwotI2VuZGlmCi0jaWYgWVlFUlJP
Ul9WRVJCT1NFCi0gIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKLSAgICBZWVNUQUNLX0ZSRUUgKHl5
bXNnKTsKLSNlbmRpZgotICAvKiBNYWtlIHN1cmUgWVlJRCBpcyB1c2VkLiAgKi8KLSAgcmV0dXJu
IFlZSUQgKHl5cmVzdWx0KTsKLX0KLQotCi0KLQotCi1pbnQgZ2xzbGFuZ19wYXJzZShUUGFyc2VD
b250ZXh0KiBjb250ZXh0KSB7Ci0gICAgcmV0dXJuIHl5cGFyc2UoY29udGV4dCk7Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzViMDIxZmJmZWY0MTdjN2MzZjZhZDJmNjRj
YjY1YzYwZmZjNTc4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5oCisr
KyAvZGV2L251bGwKQEAgLTEsMjI1ICswLDAgQEAKLS8qIEFwcGxlIE5vdGU6IEZvciB0aGUgYXZv
aWRhbmNlIG9mIGRvdWJ0LCBBcHBsZSBlbGVjdHMgdG8gZGlzdHJpYnV0ZSB0aGlzIGZpbGUgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBCU0QgbGljZW5zZS4gKi8KLQotLyogQSBCaXNvbiBwYXJzZXIs
IG1hZGUgYnkgR05VIEJpc29uIDIuNy4gICovCi0KLS8qIEJpc29uIGludGVyZmFjZSBmb3IgWWFj
Yy1saWtlIHBhcnNlcnMgaW4gQwotICAgCi0gICAgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODkt
MTk5MCwgMjAwMC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotICAgCi0gICBU
aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yIG1vZGlmeQotICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0gICAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICAgCi0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
Ci0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICAgCi0g
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0
cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwotCi0vKiBBcyBhIHNwZWNpYWwgZXhjZXB0
aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKLSAgIHBhcnQg
b3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3
b3JrCi0gICB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsg
aXNuJ3QgaXRzZWxmIGEKLSAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9y
IGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9mCi0gICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFs
dGVybmF0aXZlbHksIGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlCi0gICB0aGUgcGFyc2Vy
IHNrZWxldG9uIGl0c2VsZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCi0g
ICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRo
ZSByZXN1bHRpbmcKLSAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0
aGUgR05VIEdlbmVyYWwgUHVibGljCi0gICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4
Y2VwdGlvbi4KLSAgIAotICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgotICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAq
LwotCi0jaWZuZGVmIFlZX1lZX0dMU0xBTkdfVEFCX0hfSU5DTFVERUQKLSMgZGVmaW5lIFlZX1lZ
X0dMU0xBTkdfVEFCX0hfSU5DTFVERUQKLS8qIEVuYWJsaW5nIHRyYWNlcy4gICovCi0jaWZuZGVm
IFlZREVCVUcKLSMgZGVmaW5lIFlZREVCVUcgMAotI2VuZGlmCi0jaWYgWVlERUJVRwotZXh0ZXJu
IGludCB5eWRlYnVnOwotI2VuZGlmCi0vKiAiJWNvZGUgcmVxdWlyZXMiIGJsb2Nrcy4gICovCi0K
LQotI2RlZmluZSBZWUxUWVBFIFRTb3VyY2VMb2MKLSNkZWZpbmUgWVlMVFlQRV9JU19ERUNMQVJF
RCAxCi0jZGVmaW5lIFNIX01BWF9UT0tFTl9MRU5HVEggMjU2ICAvLyBXZWJHTCBzcGVjLgotCi0K
LQotCi0vKiBUb2tlbnMuICAqLwotI2lmbmRlZiBZWVRPS0VOVFlQRQotIyBkZWZpbmUgWVlUT0tF
TlRZUEUKLSAgIC8qIFB1dCB0aGUgdG9rZW5zIGludG8gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhh
dCBHREIgYW5kIG90aGVyIGRlYnVnZ2VycwotICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8KLSAg
IGVudW0geXl0b2tlbnR5cGUgewotICAgICBJTlZBUklBTlQgPSAyNTgsCi0gICAgIEhJR0hfUFJF
Q0lTSU9OID0gMjU5LAotICAgICBNRURJVU1fUFJFQ0lTSU9OID0gMjYwLAotICAgICBMT1dfUFJF
Q0lTSU9OID0gMjYxLAotICAgICBQUkVDSVNJT04gPSAyNjIsCi0gICAgIEFUVFJJQlVURSA9IDI2
MywKLSAgICAgQ09OU1RfUVVBTCA9IDI2NCwKLSAgICAgQk9PTF9UWVBFID0gMjY1LAotICAgICBG
TE9BVF9UWVBFID0gMjY2LAotICAgICBJTlRfVFlQRSA9IDI2NywKLSAgICAgQlJFQUsgPSAyNjgs
Ci0gICAgIENPTlRJTlVFID0gMjY5LAotICAgICBETyA9IDI3MCwKLSAgICAgRUxTRSA9IDI3MSwK
LSAgICAgRk9SID0gMjcyLAotICAgICBJRiA9IDI3MywKLSAgICAgRElTQ0FSRCA9IDI3NCwKLSAg
ICAgUkVUVVJOID0gMjc1LAotICAgICBCVkVDMiA9IDI3NiwKLSAgICAgQlZFQzMgPSAyNzcsCi0g
ICAgIEJWRUM0ID0gMjc4LAotICAgICBJVkVDMiA9IDI3OSwKLSAgICAgSVZFQzMgPSAyODAsCi0g
ICAgIElWRUM0ID0gMjgxLAotICAgICBWRUMyID0gMjgyLAotICAgICBWRUMzID0gMjgzLAotICAg
ICBWRUM0ID0gMjg0LAotICAgICBNQVRSSVgyID0gMjg1LAotICAgICBNQVRSSVgzID0gMjg2LAot
ICAgICBNQVRSSVg0ID0gMjg3LAotICAgICBJTl9RVUFMID0gMjg4LAotICAgICBPVVRfUVVBTCA9
IDI4OSwKLSAgICAgSU5PVVRfUVVBTCA9IDI5MCwKLSAgICAgVU5JRk9STSA9IDI5MSwKLSAgICAg
VkFSWUlORyA9IDI5MiwKLSAgICAgU1RSVUNUID0gMjkzLAotICAgICBWT0lEX1RZUEUgPSAyOTQs
Ci0gICAgIFdISUxFID0gMjk1LAotICAgICBTQU1QTEVSMkQgPSAyOTYsCi0gICAgIFNBTVBMRVJD
VUJFID0gMjk3LAotICAgICBTQU1QTEVSX0VYVEVSTkFMX09FUyA9IDI5OCwKLSAgICAgU0FNUExF
UjJEUkVDVCA9IDI5OSwKLSAgICAgSURFTlRJRklFUiA9IDMwMCwKLSAgICAgVFlQRV9OQU1FID0g
MzAxLAotICAgICBGTE9BVENPTlNUQU5UID0gMzAyLAotICAgICBJTlRDT05TVEFOVCA9IDMwMywK
LSAgICAgQk9PTENPTlNUQU5UID0gMzA0LAotICAgICBMRUZUX09QID0gMzA1LAotICAgICBSSUdI
VF9PUCA9IDMwNiwKLSAgICAgSU5DX09QID0gMzA3LAotICAgICBERUNfT1AgPSAzMDgsCi0gICAg
IExFX09QID0gMzA5LAotICAgICBHRV9PUCA9IDMxMCwKLSAgICAgRVFfT1AgPSAzMTEsCi0gICAg
IE5FX09QID0gMzEyLAotICAgICBBTkRfT1AgPSAzMTMsCi0gICAgIE9SX09QID0gMzE0LAotICAg
ICBYT1JfT1AgPSAzMTUsCi0gICAgIE1VTF9BU1NJR04gPSAzMTYsCi0gICAgIERJVl9BU1NJR04g
PSAzMTcsCi0gICAgIEFERF9BU1NJR04gPSAzMTgsCi0gICAgIE1PRF9BU1NJR04gPSAzMTksCi0g
ICAgIExFRlRfQVNTSUdOID0gMzIwLAotICAgICBSSUdIVF9BU1NJR04gPSAzMjEsCi0gICAgIEFO
RF9BU1NJR04gPSAzMjIsCi0gICAgIFhPUl9BU1NJR04gPSAzMjMsCi0gICAgIE9SX0FTU0lHTiA9
IDMyNCwKLSAgICAgU1VCX0FTU0lHTiA9IDMyNSwKLSAgICAgTEVGVF9QQVJFTiA9IDMyNiwKLSAg
ICAgUklHSFRfUEFSRU4gPSAzMjcsCi0gICAgIExFRlRfQlJBQ0tFVCA9IDMyOCwKLSAgICAgUklH
SFRfQlJBQ0tFVCA9IDMyOSwKLSAgICAgTEVGVF9CUkFDRSA9IDMzMCwKLSAgICAgUklHSFRfQlJB
Q0UgPSAzMzEsCi0gICAgIERPVCA9IDMzMiwKLSAgICAgQ09NTUEgPSAzMzMsCi0gICAgIENPTE9O
ID0gMzM0LAotICAgICBFUVVBTCA9IDMzNSwKLSAgICAgU0VNSUNPTE9OID0gMzM2LAotICAgICBC
QU5HID0gMzM3LAotICAgICBEQVNIID0gMzM4LAotICAgICBUSUxERSA9IDMzOSwKLSAgICAgUExV
UyA9IDM0MCwKLSAgICAgU1RBUiA9IDM0MSwKLSAgICAgU0xBU0ggPSAzNDIsCi0gICAgIFBFUkNF
TlQgPSAzNDMsCi0gICAgIExFRlRfQU5HTEUgPSAzNDQsCi0gICAgIFJJR0hUX0FOR0xFID0gMzQ1
LAotICAgICBWRVJUSUNBTF9CQVIgPSAzNDYsCi0gICAgIENBUkVUID0gMzQ3LAotICAgICBBTVBF
UlNBTkQgPSAzNDgsCi0gICAgIFFVRVNUSU9OID0gMzQ5Ci0gICB9OwotI2VuZGlmCi0KLQotI2lm
ICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECi10eXBl
ZGVmIHVuaW9uIFlZU1RZUEUKLXsKLQotCi0gICAgc3RydWN0IHsKLSAgICAgICAgdW5pb24gewot
ICAgICAgICAgICAgVFN0cmluZyAqc3RyaW5nOwotICAgICAgICAgICAgZmxvYXQgZjsKLSAgICAg
ICAgICAgIGludCBpOwotICAgICAgICAgICAgYm9vbCBiOwotICAgICAgICB9OwotICAgICAgICBU
U3ltYm9sKiBzeW1ib2w7Ci0gICAgfSBsZXg7Ci0gICAgc3RydWN0IHsKLSAgICAgICAgVE9wZXJh
dG9yIG9wOwotICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJt
Tm9kZTsKLSAgICAgICAgICAgIFRJbnRlcm1Ob2RlUGFpciBub2RlUGFpcjsKLSAgICAgICAgICAg
IFRJbnRlcm1UeXBlZCogaW50ZXJtVHlwZWROb2RlOwotICAgICAgICAgICAgVEludGVybUFnZ3Jl
Z2F0ZSogaW50ZXJtQWdncmVnYXRlOwotICAgICAgICB9OwotICAgICAgICB1bmlvbiB7Ci0gICAg
ICAgICAgICBUUHVibGljVHlwZSB0eXBlOwotICAgICAgICAgICAgVFByZWNpc2lvbiBwcmVjaXNp
b247Ci0gICAgICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllcjsKLSAgICAgICAgICAgIFRGdW5j
dGlvbiogZnVuY3Rpb247Ci0gICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtOwotICAgICAgICAg
ICAgVEZpZWxkKiBmaWVsZDsKLSAgICAgICAgICAgIFRGaWVsZExpc3QqIGZpZWxkTGlzdDsKLSAg
ICAgICAgfTsKLSAgICB9IGludGVybTsKLQotCi0KLX0gWVlTVFlQRTsKLSMgZGVmaW5lIFlZU1RZ
UEVfSVNfVFJJVklBTCAxCi0jIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jzb2xlc2NlbnQ7
IHdpbGwgYmUgd2l0aGRyYXduICovCi0jIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKLSNl
bmRpZgotCi0jaWYgISBkZWZpbmVkIFlZTFRZUEUgJiYgISBkZWZpbmVkIFlZTFRZUEVfSVNfREVD
TEFSRUQKLXR5cGVkZWYgc3RydWN0IFlZTFRZUEUKLXsKLSAgaW50IGZpcnN0X2xpbmU7Ci0gIGlu
dCBmaXJzdF9jb2x1bW47Ci0gIGludCBsYXN0X2xpbmU7Ci0gIGludCBsYXN0X2NvbHVtbjsKLX0g
WVlMVFlQRTsKLSMgZGVmaW5lIHl5bHR5cGUgWVlMVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBi
ZSB3aXRoZHJhd24gKi8KLSMgZGVmaW5lIFlZTFRZUEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUg
WVlMVFlQRV9JU19UUklWSUFMIDEKLSNlbmRpZgotCi0KLSNpZmRlZiBZWVBBUlNFX1BBUkFNCi0j
aWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCi1pbnQgeXlwYXJzZSAo
dm9pZCAqWVlQQVJTRV9QQVJBTSk7Ci0jZWxzZQotaW50IHl5cGFyc2UgKCk7Ci0jZW5kaWYKLSNl
bHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLwotI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5l
ZCBfX2NwbHVzcGx1cwotaW50IHl5cGFyc2UgKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOwotI2Vs
c2UKLWludCB5eXBhcnNlICgpOwotI2VuZGlmCi0jZW5kaWYgLyogISBZWVBBUlNFX1BBUkFNICov
Ci0KLSNlbmRpZiAvKiAhWVlfWVlfR0xTTEFOR19UQUJfSF9JTkNMVURFRCAgKi8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1PdXQuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzYWE5NmFmNmQ2MmQxMGU3ZWY3MmYyZmVhYzM2NjJl
NzNkYjg2NmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw0MjQgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUg
ImNvbXBpbGVyL2xvY2FsaW50ZXJtZWRpYXRlLmgiCi0KLS8vCi0vLyBUd28gcHVycG9zZXM6Ci0v
LyAxLiAgU2hvdyBhbiBleGFtcGxlIG9mIGhvdyB0byBpdGVyYXRlIHRyZWUuICBGdW5jdGlvbnMg
Y2FuCi0vLyAgICAgYWxzbyBkaXJlY3RseSBjYWxsIFRyYXZlcnNlKCkgb24gY2hpbGRyZW4gdGhl
bXNlbHZlcyB0bwotLy8gICAgIGhhdmUgZmluZXIgZ3JhaW5lZCBjb250cm9sIG92ZXIgdGhlIHBy
b2Nlc3MgdGhhbiBzaG93biBoZXJlLgotLy8gICAgIFNlZSB0aGUgbGFzdCBmdW5jdGlvbiBmb3Ig
aG93IHRvIGdldCBzdGFydGVkLgotLy8gMi4gIFByaW50IG91dCBhIHRleHQgYmFzZWQgZGVzY3Jp
cHRpb24gb2YgdGhlIHRyZWUuCi0vLwotCi0vLwotLy8gVXNlIHRoaXMgY2xhc3MgdG8gY2Fycnkg
YWxvbmcgZGF0YSBmcm9tIG5vZGUgdG8gbm9kZSBpbgotLy8gdGhlIHRyYXZlcnNhbAotLy8KLWNs
YXNzIFRPdXRwdXRUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7Ci1wdWJsaWM6
Ci0gICAgVE91dHB1dFRyYXZlcnNlcihUSW5mb1NpbmtCYXNlJiBpKSA6IHNpbmsoaSkgeyB9Ci0g
ICAgVEluZm9TaW5rQmFzZSYgc2luazsKLQotcHJvdGVjdGVkOgotICAgIHZvaWQgdmlzaXRTeW1i
b2woVEludGVybVN5bWJvbCopOwotICAgIHZvaWQgdmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1D
b25zdGFudFVuaW9uKik7Ci0gICAgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVy
bUJpbmFyeSopOwotICAgIGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5
Kik7Ci0gICAgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlv
biopOwotICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdh
dGUqKTsKLSAgICBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqKTsKLSAg
ICBib29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKik7Ci19OwotCi1U
U3RyaW5nIFRUeXBlOjpnZXRDb21wbGV0ZVN0cmluZygpIGNvbnN0Ci17Ci0gICAgVFN0cmluZ1N0
cmVhbSBzdHJlYW07Ci0KLSAgICBpZiAocXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSAmJiBxdWFs
aWZpZXIgIT0gRXZxR2xvYmFsKQotICAgICAgICBzdHJlYW0gPDwgZ2V0UXVhbGlmaWVyU3RyaW5n
KCkgPDwgIiAiIDw8IGdldFByZWNpc2lvblN0cmluZygpIDw8ICIgIjsKLSAgICBpZiAoYXJyYXkp
Ci0gICAgICAgIHN0cmVhbSA8PCAiYXJyYXlbIiA8PCBnZXRBcnJheVNpemUoKSA8PCAiXSBvZiAi
OwotICAgIGlmIChtYXRyaXgpCi0gICAgICAgIHN0cmVhbSA8PCBzaXplIDw8ICJYIiA8PCBzaXpl
IDw8ICIgbWF0cml4IG9mICI7Ci0gICAgZWxzZSBpZiAoc2l6ZSA+IDEpCi0gICAgICAgIHN0cmVh
bSA8PCBzaXplIDw8ICItY29tcG9uZW50IHZlY3RvciBvZiAiOwotCi0gICAgc3RyZWFtIDw8IGdl
dEJhc2ljU3RyaW5nKCk7Ci0gICAgcmV0dXJuIHN0cmVhbS5zdHIoKTsKLX0KLQotLy8KLS8vIEhl
bHBlciBmdW5jdGlvbnMgZm9yIHByaW50aW5nLCBub3QgcGFydCBvZiB0cmF2ZXJzaW5nLgotLy8K
LQotdm9pZCBPdXRwdXRUcmVlVGV4dChUSW5mb1NpbmtCYXNlJiBzaW5rLCBUSW50ZXJtTm9kZSog
bm9kZSwgY29uc3QgaW50IGRlcHRoKQotewotICAgIGludCBpOwotCi0gICAgc2luay5sb2NhdGlv
bihub2RlLT5nZXRMaW5lKCkpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IGRlcHRoOyArK2kpCi0g
ICAgICAgIHNpbmsgPDwgIiAgIjsKLX0KLQotLy8KLS8vIFRoZSByZXN0IG9mIHRoZSBmaWxlIGFy
ZSB0aGUgdHJhdmVyc2FsIGZ1bmN0aW9ucy4gIFRoZSBsYXN0IG9uZQotLy8gaXMgdGhlIG9uZSB0
aGF0IHN0YXJ0cyB0aGUgdHJhdmVyc2FsLgotLy8KLS8vIFJldHVybiB0cnVlIGZyb20gaW50ZXJp
b3Igbm9kZXMgdG8gaGF2ZSB0aGUgZXh0ZXJuYWwgdHJhdmVyc2FsCi0vLyBjb250aW51ZSBvbiB0
byBjaGlsZHJlbi4gIElmIHlvdSBwcm9jZXNzIGNoaWxkcmVuIHlvdXJzZWxmLAotLy8gcmV0dXJu
IGZhbHNlLgotLy8KLQotdm9pZCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdFN5bWJvbChUSW50ZXJt
U3ltYm9sKiBub2RlKQotewotICAgIE91dHB1dFRyZWVUZXh0KHNpbmssIG5vZGUsIGRlcHRoKTsK
LQotICAgIHNpbmsgPDwgIiciIDw8IG5vZGUtPmdldFN5bWJvbCgpIDw8ICInICI7Ci0gICAgc2lu
ayA8PCAiKCIgPDwgbm9kZS0+Z2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiKVxuIjsKLX0KLQotYm9v
bCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFy
eSogbm9kZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBzaW5rOwotCi0gICAgT3V0cHV0
VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7Ci0KLSAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkp
IHsKLSAgICAgICAgY2FzZSBFT3BBc3NpZ246ICAgICAgICAgICAgICAgICAgIG91dCA8PCAibW92
ZSBzZWNvbmQgY2hpbGQgdG8gZmlyc3QgY2hpbGQiOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRU9wSW5pdGlhbGl6ZTogICAgICAgICAgICAgICBvdXQgPDwgImluaXRpYWxpemUgZmly
c3QgY2hpbGQgd2l0aCBzZWNvbmQgY2hpbGQiOyAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEFk
ZEFzc2lnbjogICAgICAgICAgICAgICAgb3V0IDw8ICJhZGQgc2Vjb25kIGNoaWxkIGludG8gZmly
c3QgY2hpbGQiOyAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246ICAg
ICAgICAgICAgICAgIG91dCA8PCAic3VidHJhY3Qgc2Vjb25kIGNoaWxkIGludG8gZmlyc3QgY2hp
bGQiOyAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTXVsQXNzaWduOiAgICAgICAgICAgICAg
ICBvdXQgPDwgIm11bHRpcGx5IHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOiAgb3V0IDw8ICJt
YXRyaXggbXVsdCBzZWNvbmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7ICBicmVhazsKLSAgICAg
ICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjogIG91dCA8PCAidmVjdG9yIHNjYWxl
IHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9w
TWF0cml4VGltZXNTY2FsYXJBc3NpZ246ICBvdXQgPDwgIm1hdHJpeCBzY2FsZSBzZWNvbmQgY2hp
bGQgaW50byBmaXJzdCBjaGlsZCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVz
TWF0cml4QXNzaWduOiAgb3V0IDw8ICJtYXRyaXggbXVsdCBzZWNvbmQgY2hpbGQgaW50byBmaXJz
dCBjaGlsZCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcERpdkFzc2lnbjogICAgICAgICAgICAg
ICAgb3V0IDw8ICJkaXZpZGUgc2Vjb25kIGNoaWxkIGludG8gZmlyc3QgY2hpbGQiOyAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDogICBvdXQgPDwgImRpcmVjdCBpbmRl
eCI7ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wSW5kZXhJbmRpcmVjdDogb3V0IDw8ICJpbmRp
cmVjdCBpbmRleCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3RydWN0OiAg
IG91dCA8PCAiZGlyZWN0IGluZGV4IGZvciBzdHJ1Y3R1cmUiOyAgIGJyZWFrOwotICAgICAgICBj
YXNlIEVPcFZlY3RvclN3aXp6bGU6IG91dCA8PCAidmVjdG9yIHN3aXp6bGUiOyBicmVhazsKLQot
ICAgICAgICBjYXNlIEVPcEFkZDogICAgb3V0IDw8ICJhZGQiOyAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEVPcFN1YjogICAgb3V0IDw8ICJzdWJ0cmFjdCI7ICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcE11bDogICAgb3V0IDw8ICJjb21wb25l
bnQtd2lzZSBtdWx0aXBseSI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcERpdjogICAgb3V0IDw8
ICJkaXZpZGUiOyAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEVxdWFs
OiAgICAgICAgICAgIG91dCA8PCAiQ29tcGFyZSBFcXVhbCI7ICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDogICAgICAgICBvdXQgPDwgIkNvbXBhcmUgTm90
IEVxdWFsIjsgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTGVzc1RoYW46ICAg
ICAgICAgb3V0IDw8ICJDb21wYXJlIExlc3MgVGhhbiI7ICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOiAgICAgIG91dCA8PCAiQ29tcGFyZSBHcmVhdGVyIFRo
YW4iOyAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOiAgICBv
dXQgPDwgIkNvbXBhcmUgTGVzcyBUaGFuIG9yIEVxdWFsIjsgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRU9wR3JlYXRlclRoYW5FcXVhbDogb3V0IDw8ICJDb21wYXJlIEdyZWF0ZXIgVGhhbiBvciBF
cXVhbCI7IGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXI6IG91dCA8
PCAidmVjdG9yLXNjYWxlIjsgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wVmVjdG9y
VGltZXNNYXRyaXg6IG91dCA8PCAidmVjdG9yLXRpbWVzLW1hdHJpeCI7ICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRU9wTWF0cml4VGltZXNWZWN0b3I6IG91dCA8PCAibWF0cml4LXRpbWVzLXZlY3Rv
ciI7ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXI6IG91dCA8PCAi
bWF0cml4LXNjYWxlIjsgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTWF0cml4VGlt
ZXNNYXRyaXg6IG91dCA8PCAibWF0cml4LW11bHRpcGx5IjsgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgY2FzZSBFT3BMb2dpY2FsT3I6ICBvdXQgPDwgImxvZ2ljYWwtb3IiOyAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6IG91dCA8PCAibG9naWNhbC14b3IiOyBicmVhazsKLSAg
ICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiBvdXQgPDwgImxvZ2ljYWwtYW5kIjsgYnJlYWs7Ci0g
ICAgICAgIGRlZmF1bHQ6IG91dCA8PCAiPHVua25vd24gb3A+IjsKLSAgICB9Ci0KLSAgICBvdXQg
PDwgIiAoIiA8PCBub2RlLT5nZXRDb21wbGV0ZVN0cmluZygpIDw8ICIpIjsKLQotICAgIG91dCA8
PCAiXG4iOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVE91dHB1dFRyYXZlcnNlcjo6
dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQotewotICAgIFRJbmZv
U2lua0Jhc2UmIG91dCA9IHNpbms7Ci0KLSAgICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUsIGRl
cHRoKTsKLQotICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkgewotICAgICAgICBjYXNlIEVPcE5l
Z2F0aXZlOiAgICAgICBvdXQgPDwgIk5lZ2F0ZSB2YWx1ZSI7ICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRU9wVmVjdG9yTG9naWNhbE5vdDoKLSAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90
OiAgICAgb3V0IDw8ICJOZWdhdGUgY29uZGl0aW9uYWwiOyAgIGJyZWFrOwotCi0gICAgICAgIGNh
c2UgRU9wUG9zdEluY3JlbWVudDogIG91dCA8PCAiUG9zdC1JbmNyZW1lbnQiOyAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OiAgb3V0IDw8ICJQb3N0LURlY3JlbWVu
dCI7ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDogICBvdXQgPDwg
IlByZS1JbmNyZW1lbnQiOyAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wUHJlRGVjcmVt
ZW50OiAgIG91dCA8PCAiUHJlLURlY3JlbWVudCI7ICAgICAgICBicmVhazsKLQotICAgICAgICBj
YXNlIEVPcENvbnZJbnRUb0Jvb2w6ICBvdXQgPDwgIkNvbnZlcnQgaW50IHRvIGJvb2wiOyAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9Cb29sOm91dCA8PCAiQ29udmVydCBmbG9h
dCB0byBib29sIjticmVhazsKLSAgICAgICAgY2FzZSBFT3BDb252Qm9vbFRvRmxvYXQ6b3V0IDw8
ICJDb252ZXJ0IGJvb2wgdG8gZmxvYXQiO2JyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnZJbnRU
b0Zsb2F0OiBvdXQgPDwgIkNvbnZlcnQgaW50IHRvIGZsb2F0IjsgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRU9wQ29udkZsb2F0VG9JbnQ6IG91dCA8PCAiQ29udmVydCBmbG9hdCB0byBpbnQiOyBicmVh
azsKLSAgICAgICAgY2FzZSBFT3BDb252Qm9vbFRvSW50OiAgb3V0IDw8ICJDb252ZXJ0IGJvb2wg
dG8gaW50IjsgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wUmFkaWFuczogICAgICAgIG91dCA8
PCAicmFkaWFucyI7ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BEZWdyZWVz
OiAgICAgICAgb3V0IDw8ICJkZWdyZWVzIjsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEVPcFNpbjogICAgICAgICAgICBvdXQgPDwgInNpbmUiOyAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgRU9wQ29zOiAgICAgICAgICAgIG91dCA8PCAiY29zaW5lIjsgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BUYW46ICAgICAgICAgICAgb3V0IDw8
ICJ0YW5nZW50IjsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEFzaW46ICAg
ICAgICAgICBvdXQgPDwgImFyYyBzaW5lIjsgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRU9wQWNvczogICAgICAgICAgIG91dCA8PCAiYXJjIGNvc2luZSI7ICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBFT3BBdGFuOiAgICAgICAgICAgb3V0IDw8ICJhcmMgdGFuZ2VudCI7
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wRXhwOiAgICAgICAgICAgIG91dCA8
PCAiZXhwIjsgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BMb2c6ICAg
ICAgICAgICAgb3V0IDw8ICJsb2ciOyAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEVPcEV4cDI6ICAgICAgICAgICBvdXQgPDwgImV4cDIiOyAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgRU9wTG9nMjogICAgICAgICAgIG91dCA8PCAibG9nMiI7ICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BTcXJ0OiAgICAgICAgICAgb3V0IDw8
ICJzcXJ0IjsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEludmVyc2VT
cXJ0OiAgICBvdXQgPDwgImludmVyc2Ugc3FydCI7ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
Y2FzZSBFT3BBYnM6ICAgICAgICAgICAgb3V0IDw8ICJBYnNvbHV0ZSB2YWx1ZSI7ICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEVPcFNpZ246ICAgICAgICAgICBvdXQgPDwgIlNpZ24iOyAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wRmxvb3I6ICAgICAgICAgIG91dCA8
PCAiRmxvb3IiOyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDZWlsOiAg
ICAgICAgICAgb3V0IDw8ICJDZWlsaW5nIjsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEVPcEZyYWN0OiAgICAgICAgICBvdXQgPDwgIkZyYWN0aW9uIjsgICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgY2FzZSBFT3BMZW5ndGg6ICAgICAgICAgb3V0IDw8ICJsZW5ndGgiOyAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcE5vcm1hbGl6ZTogICAgICBvdXQg
PDwgIm5vcm1hbGl6ZSI7ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAvLwljYXNlIEVP
cERQZHg6ICAgICAgICAgICBvdXQgPDwgImRQZHgiOyAgICAgICAgICAgICAgICAgYnJlYWs7ICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAvLwljYXNlIEVPcERQZHk6ICAgICAgICAgICBvdXQg
PDwgImRQZHkiOyAgICAgICAgICAgICAgICAgYnJlYWs7ICAgCi0gICAgICAgICAgICAvLwljYXNl
IEVPcEZ3aWR0aDogICAgICAgICBvdXQgPDwgImZ3aWR0aCI7ICAgICAgICAgICAgICAgYnJlYWs7
ICAgICAgICAgICAgICAgICAgIAotCi0gICAgICAgIGNhc2UgRU9wQW55OiAgICAgICAgICAgIG91
dCA8PCAiYW55IjsgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BBbGw6
ICAgICAgICAgICAgb3V0IDw8ICJhbGwiOyAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBvdXQucHJlZml4KEVQcmVmaXhFcnJvcik7Ci0gICAg
ICAgICAgICBvdXQgPDwgIkJhZCB1bmFyeSBvcCI7Ci0gICAgfQotCi0gICAgb3V0IDw8ICIgKCIg
PDwgbm9kZS0+Z2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiKSI7Ci0KLSAgICBvdXQgPDwgIlxuIjsK
LQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0QWdn
cmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQotewotICAgIFRJbmZv
U2lua0Jhc2UmIG91dCA9IHNpbms7Ci0KLSAgICBpZiAobm9kZS0+Z2V0T3AoKSA9PSBFT3BOdWxs
KSB7Ci0gICAgICAgIG91dC5wcmVmaXgoRVByZWZpeEVycm9yKTsKLSAgICAgICAgb3V0IDw8ICJu
b2RlIGlzIHN0aWxsIEVPcE51bGwhIjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgT3V0cHV0VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7Ci0KLSAgICBzd2l0Y2ggKG5vZGUt
PmdldE9wKCkpIHsKLSAgICAgICAgY2FzZSBFT3BTZXF1ZW5jZTogICAgICBvdXQgPDwgIlNlcXVl
bmNlXG4iOyByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBFT3BDb21tYTogICAgICAgICBvdXQg
PDwgIkNvbW1hXG4iOyByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBFT3BGdW5jdGlvbjogICAg
ICBvdXQgPDwgIkZ1bmN0aW9uIERlZmluaXRpb246ICIgPDwgbm9kZS0+Z2V0TmFtZSgpOyBicmVh
azsKLSAgICAgICAgY2FzZSBFT3BGdW5jdGlvbkNhbGw6ICBvdXQgPDwgIkZ1bmN0aW9uIENhbGw6
ICIgPDwgbm9kZS0+Z2V0TmFtZSgpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BQYXJhbWV0ZXJz
OiAgICBvdXQgPDwgIkZ1bmN0aW9uIFBhcmFtZXRlcnM6ICI7ICAgICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OiBvdXQgPDwgIkNvbnN0cnVjdCBmbG9h
dCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzI6ICBvdXQgPDwgIkNvbnN0
cnVjdCB2ZWMyIjsgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzM6ICBvdXQg
PDwgIkNvbnN0cnVjdCB2ZWMzIjsgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZl
YzQ6ICBvdXQgPDwgIkNvbnN0cnVjdCB2ZWM0IjsgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdEJvb2w6ICBvdXQgPDwgIkNvbnN0cnVjdCBib29sIjsgIGJyZWFrOwotICAgICAgICBj
YXNlIEVPcENvbnN0cnVjdEJWZWMyOiBvdXQgPDwgIkNvbnN0cnVjdCBidmVjMiI7IGJyZWFrOwot
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMzOiBvdXQgPDwgIkNvbnN0cnVjdCBidmVjMyI7
IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWM0OiBvdXQgPDwgIkNvbnN0cnVj
dCBidmVjNCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDogICBvdXQgPDwg
IkNvbnN0cnVjdCBpbnQiOyAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMy
OiBvdXQgPDwgIkNvbnN0cnVjdCBpdmVjMiI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0
cnVjdElWZWMzOiBvdXQgPDwgIkNvbnN0cnVjdCBpdmVjMyI7IGJyZWFrOwotICAgICAgICBjYXNl
IEVPcENvbnN0cnVjdElWZWM0OiBvdXQgPDwgIkNvbnN0cnVjdCBpdmVjNCI7IGJyZWFrOwotICAg
ICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6ICBvdXQgPDwgIkNvbnN0cnVjdCBtYXQyIjsgIGJy
ZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6ICBvdXQgPDwgIkNvbnN0cnVjdCBt
YXQzIjsgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6ICBvdXQgPDwgIkNv
bnN0cnVjdCBtYXQ0IjsgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFN0cnVjdDog
IG91dCA8PCAiQ29uc3RydWN0IHN0cnVjdHVyZSI7ICBicmVhazsKLQotICAgICAgICBjYXNlIEVP
cExlc3NUaGFuOiAgICAgICAgIG91dCA8PCAiQ29tcGFyZSBMZXNzIFRoYW4iOyAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjogICAgICBvdXQgPDwgIkNvbXBh
cmUgR3JlYXRlciBUaGFuIjsgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTGVzc1Ro
YW5FcXVhbDogICAgb3V0IDw8ICJDb21wYXJlIExlc3MgVGhhbiBvciBFcXVhbCI7ICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6IG91dCA8PCAiQ29tcGFyZSBHcmVh
dGVyIFRoYW4gb3IgRXF1YWwiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BWZWN0b3JFcXVhbDog
ICAgICBvdXQgPDwgIkVxdWFsIjsgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRU9wVmVjdG9yTm90RXF1YWw6ICAgb3V0IDw8ICJOb3RFcXVhbCI7ICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wTW9kOiAgICAgICAgICAgb3V0
IDw8ICJtb2QiOyAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFBvdzogICAgICAgICAg
IG91dCA8PCAicG93IjsgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEVPcEF0YW46ICAg
ICAgICAgIG91dCA8PCAiYXJjIHRhbmdlbnQiOyBicmVhazsKLQotICAgICAgICBjYXNlIEVPcE1p
bjogICAgICAgICAgIG91dCA8PCAibWluIjsgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBF
T3BNYXg6ICAgICAgICAgICBvdXQgPDwgIm1heCI7ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRU9wQ2xhbXA6ICAgICAgICAgb3V0IDw8ICJjbGFtcCI7ICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEVPcE1peDogICAgICAgICAgIG91dCA8PCAibWl4IjsgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBFT3BTdGVwOiAgICAgICAgICBvdXQgPDwgInN0ZXAiOyAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgRU9wU21vb3RoU3RlcDogICAgb3V0IDw8ICJzbW9vdGhzdGVwIjsgIGJy
ZWFrOwotCi0gICAgICAgIGNhc2UgRU9wRGlzdGFuY2U6ICAgICAgb3V0IDw8ICJkaXN0YW5jZSI7
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcERvdDogICAgICAgICAgIG91
dCA8PCAiZG90LXByb2R1Y3QiOyAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BD
cm9zczogICAgICAgICBvdXQgPDwgImNyb3NzLXByb2R1Y3QiOyAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRU9wRmFjZUZvcndhcmQ6ICAgb3V0IDw8ICJmYWNlLWZvcndhcmQiOyAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFJlZmxlY3Q6ICAgICAgIG91dCA8PCAicmVm
bGVjdCI7ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BSZWZyYWN0OiAg
ICAgICBvdXQgPDwgInJlZnJhY3QiOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRU9wTXVsOiAgICAgICAgICAgb3V0IDw8ICJjb21wb25lbnQtd2lzZSBtdWx0aXBseSI7IGJy
ZWFrOwotCi0gICAgICAgIGNhc2UgRU9wRGVjbGFyYXRpb246ICAgb3V0IDw8ICJEZWNsYXJhdGlv
bjogIjsgICBicmVhazsKLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgb3V0LnByZWZp
eChFUHJlZml4RXJyb3IpOwotICAgICAgICAgICAgb3V0IDw8ICJCYWQgYWdncmVnYXRpb24gb3Ai
OwotICAgIH0KLQotICAgIGlmIChub2RlLT5nZXRPcCgpICE9IEVPcFNlcXVlbmNlICYmIG5vZGUt
PmdldE9wKCkgIT0gRU9wUGFyYW1ldGVycykKLSAgICAgICAgb3V0IDw8ICIgKCIgPDwgbm9kZS0+
Z2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiKSI7Ci0KLSAgICBvdXQgPDwgIlxuIjsKLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0U2VsZWN0aW9uKFZp
c2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBub2RlKQotewotICAgIFRJbmZvU2lua0Jhc2Um
IG91dCA9IHNpbms7Ci0KLSAgICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUsIGRlcHRoKTsKLQot
ICAgIG91dCA8PCAiVGVzdCBjb25kaXRpb24gYW5kIHNlbGVjdCI7Ci0gICAgb3V0IDw8ICIgKCIg
PDwgbm9kZS0+Z2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiKVxuIjsKLQotICAgICsrZGVwdGg7Ci0K
LSAgICBPdXRwdXRUcmVlVGV4dChzaW5rLCBub2RlLCBkZXB0aCk7Ci0gICAgb3V0IDw8ICJDb25k
aXRpb25cbiI7Ci0gICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOwotCi0g
ICAgT3V0cHV0VHJlZVRleHQoc2luaywgbm9kZSwgZGVwdGgpOwotICAgIGlmIChub2RlLT5nZXRU
cnVlQmxvY2soKSkgewotICAgICAgICBvdXQgPDwgInRydWUgY2FzZVxuIjsKLSAgICAgICAgbm9k
ZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOwotICAgIH0gZWxzZQotICAgICAgICBv
dXQgPDwgInRydWUgY2FzZSBpcyBudWxsXG4iOwotCi0gICAgaWYgKG5vZGUtPmdldEZhbHNlQmxv
Y2soKSkgewotICAgICAgICBPdXRwdXRUcmVlVGV4dChzaW5rLCBub2RlLCBkZXB0aCk7Ci0gICAg
ICAgIG91dCA8PCAiZmFsc2UgY2FzZVxuIjsKLSAgICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9jaygp
LT50cmF2ZXJzZSh0aGlzKTsKLSAgICB9Ci0KLSAgICAtLWRlcHRoOwotCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi12b2lkIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50
ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBzaW5r
OwotCi0gICAgc2l6ZV90IHNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOwot
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgT3V0cHV0
VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0VW5p
b25BcnJheVBvaW50ZXIoKVtpXS5nZXRUeXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgRWJ0Qm9v
bDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVtpXS5n
ZXRCQ29uc3QoKSkKLSAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJ0cnVlIjsKLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZmFsc2UiOwotCi0gICAg
ICAgICAgICAgICAgb3V0IDw8ICIgKCIgPDwgImNvbnN0IGJvb2wiIDw8ICIpIjsKLSAgICAgICAg
ICAgICAgICBvdXQgPDwgIlxuIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgRWJ0RmxvYXQ6Ci0gICAgICAgICAgICAgICAgb3V0IDw8IG5vZGUtPmdldFVuaW9uQXJy
YXlQb2ludGVyKClbaV0uZ2V0RkNvbnN0KCk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIgKGNv
bnN0IGZsb2F0KVxuIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
RWJ0SW50OgotICAgICAgICAgICAgICAgIG91dCA8PCBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRl
cigpW2ldLmdldElDb25zdCgpOwotICAgICAgICAgICAgICAgIG91dCA8PCAiIChjb25zdCBpbnQp
XG4iOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICBvdXQubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGlu
ZSgpLCAiVW5rbm93biBjb25zdGFudCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfQotfQotCi1ib29sIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0TG9vcChWaXNpdCB2
aXNpdCwgVEludGVybUxvb3AqIG5vZGUpCi17Ci0gICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gc2lu
azsKLQotICAgIE91dHB1dFRyZWVUZXh0KG91dCwgbm9kZSwgZGVwdGgpOwotCi0gICAgb3V0IDw8
ICJMb29wIHdpdGggY29uZGl0aW9uICI7Ci0gICAgaWYgKG5vZGUtPmdldFR5cGUoKSA9PSBFTG9v
cERvV2hpbGUpCi0gICAgICAgIG91dCA8PCAibm90ICI7Ci0gICAgb3V0IDw8ICJ0ZXN0ZWQgZmly
c3RcbiI7Ci0KLSAgICArK2RlcHRoOwotCi0gICAgT3V0cHV0VHJlZVRleHQoc2luaywgbm9kZSwg
ZGVwdGgpOwotICAgIGlmIChub2RlLT5nZXRDb25kaXRpb24oKSkgewotICAgICAgICBvdXQgPDwg
Ikxvb3AgQ29uZGl0aW9uXG4iOwotICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVy
c2UodGhpcyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG91dCA8PCAiTm8gbG9vcCBjb25kaXRpb25c
biI7Ci0KLSAgICBPdXRwdXRUcmVlVGV4dChzaW5rLCBub2RlLCBkZXB0aCk7Ci0gICAgaWYgKG5v
ZGUtPmdldEJvZHkoKSkgewotICAgICAgICBvdXQgPDwgIkxvb3AgQm9keVxuIjsKLSAgICAgICAg
bm9kZS0+Z2V0Qm9keSgpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgb3V0
IDw8ICJObyBsb29wIGJvZHlcbiI7Ci0KLSAgICBpZiAobm9kZS0+Z2V0RXhwcmVzc2lvbigpKSB7
Ci0gICAgICAgIE91dHB1dFRyZWVUZXh0KHNpbmssIG5vZGUsIGRlcHRoKTsKLSAgICAgICAgb3V0
IDw8ICJMb29wIFRlcm1pbmFsIEV4cHJlc3Npb25cbiI7Ci0gICAgICAgIG5vZGUtPmdldEV4cHJl
c3Npb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotCi0gICAgLS1kZXB0aDsKLQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotYm9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdEJyYW5jaChWaXNp
dCB2aXNpdCwgVEludGVybUJyYW5jaCogbm9kZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlJiBvdXQg
PSBzaW5rOwotCi0gICAgT3V0cHV0VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7Ci0KLSAgICBz
d2l0Y2ggKG5vZGUtPmdldEZsb3dPcCgpKSB7Ci0gICAgICAgIGNhc2UgRU9wS2lsbDogICAgICBv
dXQgPDwgIkJyYW5jaDogS2lsbCI7ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BC
cmVhazogICAgIG91dCA8PCAiQnJhbmNoOiBCcmVhayI7ICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEVPcENvbnRpbnVlOiAgb3V0IDw8ICJCcmFuY2g6IENvbnRpbnVlIjsgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgRU9wUmV0dXJuOiAgICBvdXQgPDwgIkJyYW5jaDogUmV0dXJuIjsg
ICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDogICAgICAgICAgIG91dCA8PCAiQnJhbmNo
OiBVbmtub3duIEJyYW5jaCI7IGJyZWFrOwotICAgIH0KLQotICAgIGlmIChub2RlLT5nZXRFeHBy
ZXNzaW9uKCkpIHsKLSAgICAgICAgb3V0IDw8ICIgd2l0aCBleHByZXNzaW9uXG4iOwotICAgICAg
ICArK2RlcHRoOwotICAgICAgICBub2RlLT5nZXRFeHByZXNzaW9uKCktPnRyYXZlcnNlKHRoaXMp
OwotICAgICAgICAtLWRlcHRoOwotICAgIH0gZWxzZQotICAgICAgICBvdXQgPDwgIlxuIjsKLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8KLS8vIFRoaXMgZnVuY3Rpb24gaXMgdGhlIG9uZSB0
byBjYWxsIGV4dGVybmFsbHkgdG8gc3RhcnQgdGhlIHRyYXZlcnNhbC4KLS8vIEluZGl2aWR1YWwg
ZnVuY3Rpb25zIGNhbiBiZSBpbml0aWFsaXplZCB0byAwIHRvIHNraXAgcHJvY2Vzc2luZyBvZiB0
aGF0Ci0vLyB0eXBlIG9mIG5vZGUuICBJdCdzIGNoaWxkcmVuIHdpbGwgc3RpbGwgYmUgcHJvY2Vz
c2VkLgotLy8KLXZvaWQgVEludGVybWVkaWF0ZTo6b3V0cHV0VHJlZShUSW50ZXJtTm9kZSogcm9v
dCkKLXsKLSAgICBpZiAocm9vdCA9PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBUT3V0cHV0
VHJhdmVyc2VyIGl0KGluZm9TaW5rLmluZm8pOwotCi0gICAgcm9vdC0+dHJhdmVyc2UoJml0KTsK
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRl
cm1lZGlhdGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1l
ZGlhdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRlMzlmZDU2MmRjMDQ1NTQx
YzMxZmM0MzE5MDYzYjUwNjAyMDk5Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJt
ZWRpYXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MzUgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLQotLy8KLS8vIERlZmluaXRpb24gb2YgdGhlIGluLW1lbW9yeSBoaWdoLWxldmVsIGludGVy
bWVkaWF0ZSByZXByZXNlbnRhdGlvbgotLy8gb2Ygc2hhZGVycy4gIFRoaXMgaXMgYSB0cmVlIHRo
YXQgcGFyc2VyIGNyZWF0ZXMuCi0vLwotLy8gTm9kZXMgaW4gdGhlIHRyZWUgYXJlIGRlZmluZWQg
YXMgYSBoaWVyYXJjaHkgb2YgY2xhc3NlcyBkZXJpdmVkIGZyb20gCi0vLyBUSW50ZXJtTm9kZS4g
RWFjaCBpcyBhIG5vZGUgaW4gYSB0cmVlLiAgVGhlcmUgaXMgbm8gcHJlc2V0IGJyYW5jaGluZyBm
YWN0b3I7Ci0vLyBlYWNoIG5vZGUgY2FuIGhhdmUgaXQncyBvd24gdHlwZSBvZiBsaXN0IG9mIGNo
aWxkcmVuLgotLy8KLQotI2lmbmRlZiBfX0lOVEVSTUVESUFURV9ICi0jZGVmaW5lIF9fSU5URVJN
RURJQVRFX0gKLQotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgotCi0jaW5jbHVkZSA8
YWxnb3JpdGhtPgotI2luY2x1ZGUgImNvbXBpbGVyL0NvbW1vbi5oIgotI2luY2x1ZGUgImNvbXBp
bGVyL1R5cGVzLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvQ29uc3RhbnRVbmlvbi5oIgotCi0vLwot
Ly8gT3BlcmF0b3JzIHVzZWQgYnkgdGhlIGhpZ2gtbGV2ZWwgKHBhcnNlIHRyZWUpIHJlcHJlc2Vu
dGF0aW9uLgotLy8KLWVudW0gVE9wZXJhdG9yIHsKLSAgICBFT3BOdWxsLCAgICAgICAgICAgIC8v
IGlmIGluIGEgbm9kZSwgc2hvdWxkIG9ubHkgbWVhbiBhIG5vZGUgaXMgc3RpbGwgYmVpbmcgYnVp
bHQKLSAgICBFT3BTZXF1ZW5jZSwgICAgICAgIC8vIGRlbm90ZXMgYSBsaXN0IG9mIHN0YXRlbWVu
dHMsIG9yIHBhcmFtZXRlcnMsIGV0Yy4KLSAgICBFT3BGdW5jdGlvbkNhbGwsICAgIAotICAgIEVP
cEZ1bmN0aW9uLCAgICAgICAgLy8gRm9yIGZ1bmN0aW9uIGRlZmluaXRpb24KLSAgICBFT3BQYXJh
bWV0ZXJzLCAgICAgIC8vIGFuIGFnZ3JlZ2F0ZSBsaXN0aW5nIHRoZSBwYXJhbWV0ZXJzIHRvIGEg
ZnVuY3Rpb24KLQotICAgIEVPcERlY2xhcmF0aW9uLAotICAgIEVPcFByb3RvdHlwZSwKLQotICAg
IC8vCi0gICAgLy8gVW5hcnkgb3BlcmF0b3JzCi0gICAgLy8KLQotICAgIEVPcE5lZ2F0aXZlLAot
ICAgIEVPcExvZ2ljYWxOb3QsCi0gICAgRU9wVmVjdG9yTG9naWNhbE5vdCwKLQotICAgIEVPcFBv
c3RJbmNyZW1lbnQsCi0gICAgRU9wUG9zdERlY3JlbWVudCwKLSAgICBFT3BQcmVJbmNyZW1lbnQs
Ci0gICAgRU9wUHJlRGVjcmVtZW50LAotCi0gICAgRU9wQ29udkludFRvQm9vbCwKLSAgICBFT3BD
b252RmxvYXRUb0Jvb2wsCi0gICAgRU9wQ29udkJvb2xUb0Zsb2F0LAotICAgIEVPcENvbnZJbnRU
b0Zsb2F0LAotICAgIEVPcENvbnZGbG9hdFRvSW50LAotICAgIEVPcENvbnZCb29sVG9JbnQsCi0K
LSAgICAvLwotICAgIC8vIGJpbmFyeSBvcGVyYXRpb25zCi0gICAgLy8KLQotICAgIEVPcEFkZCwK
LSAgICBFT3BTdWIsCi0gICAgRU9wTXVsLAotICAgIEVPcERpdiwKLSAgICBFT3BFcXVhbCwKLSAg
ICBFT3BOb3RFcXVhbCwKLSAgICBFT3BWZWN0b3JFcXVhbCwKLSAgICBFT3BWZWN0b3JOb3RFcXVh
bCwKLSAgICBFT3BMZXNzVGhhbiwKLSAgICBFT3BHcmVhdGVyVGhhbiwKLSAgICBFT3BMZXNzVGhh
bkVxdWFsLAotICAgIEVPcEdyZWF0ZXJUaGFuRXF1YWwsCi0gICAgRU9wQ29tbWEsCi0KLSAgICBF
T3BWZWN0b3JUaW1lc1NjYWxhciwKLSAgICBFT3BWZWN0b3JUaW1lc01hdHJpeCwKLSAgICBFT3BN
YXRyaXhUaW1lc1ZlY3RvciwKLSAgICBFT3BNYXRyaXhUaW1lc1NjYWxhciwKLQotICAgIEVPcExv
Z2ljYWxPciwKLSAgICBFT3BMb2dpY2FsWG9yLAotICAgIEVPcExvZ2ljYWxBbmQsCi0KLSAgICBF
T3BJbmRleERpcmVjdCwKLSAgICBFT3BJbmRleEluZGlyZWN0LAotICAgIEVPcEluZGV4RGlyZWN0
U3RydWN0LAotCi0gICAgRU9wVmVjdG9yU3dpenpsZSwKLQotICAgIC8vCi0gICAgLy8gQnVpbHQt
aW4gZnVuY3Rpb25zIHBvdGVudGlhbGx5IG1hcHBlZCB0byBvcGVyYXRvcnMKLSAgICAvLwotCi0g
ICAgRU9wUmFkaWFucywKLSAgICBFT3BEZWdyZWVzLAotICAgIEVPcFNpbiwKLSAgICBFT3BDb3Ms
Ci0gICAgRU9wVGFuLAotICAgIEVPcEFzaW4sCi0gICAgRU9wQWNvcywKLSAgICBFT3BBdGFuLAot
Ci0gICAgRU9wUG93LAotICAgIEVPcEV4cCwKLSAgICBFT3BMb2csCi0gICAgRU9wRXhwMiwKLSAg
ICBFT3BMb2cyLAotICAgIEVPcFNxcnQsCi0gICAgRU9wSW52ZXJzZVNxcnQsCi0KLSAgICBFT3BB
YnMsCi0gICAgRU9wU2lnbiwKLSAgICBFT3BGbG9vciwKLSAgICBFT3BDZWlsLAotICAgIEVPcEZy
YWN0LAotICAgIEVPcE1vZCwKLSAgICBFT3BNaW4sCi0gICAgRU9wTWF4LAotICAgIEVPcENsYW1w
LAotICAgIEVPcE1peCwKLSAgICBFT3BTdGVwLAotICAgIEVPcFNtb290aFN0ZXAsCi0KLSAgICBF
T3BMZW5ndGgsCi0gICAgRU9wRGlzdGFuY2UsCi0gICAgRU9wRG90LAotICAgIEVPcENyb3NzLAot
ICAgIEVPcE5vcm1hbGl6ZSwKLSAgICBFT3BGYWNlRm9yd2FyZCwKLSAgICBFT3BSZWZsZWN0LAot
ICAgIEVPcFJlZnJhY3QsCi0KLSAgICBFT3BERmR4LCAgICAgICAgICAgIC8vIEZyYWdtZW50IG9u
bHksIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyBleHRlbnNpb24KLSAgICBFT3BERmR5LCAgICAg
ICAgICAgIC8vIEZyYWdtZW50IG9ubHksIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyBleHRlbnNp
b24KLSAgICBFT3BGd2lkdGgsICAgICAgICAgIC8vIEZyYWdtZW50IG9ubHksIE9FU19zdGFuZGFy
ZF9kZXJpdmF0aXZlcyBleHRlbnNpb24KLQotICAgIEVPcE1hdHJpeFRpbWVzTWF0cml4LAotCi0g
ICAgRU9wQW55LAotICAgIEVPcEFsbCwKLQotICAgIC8vCi0gICAgLy8gQnJhbmNoCi0gICAgLy8K
LQotICAgIEVPcEtpbGwsICAgICAgICAgICAgLy8gRnJhZ21lbnQgb25seQotICAgIEVPcFJldHVy
biwKLSAgICBFT3BCcmVhaywKLSAgICBFT3BDb250aW51ZSwKLQotICAgIC8vCi0gICAgLy8gQ29u
c3RydWN0b3JzCi0gICAgLy8KLQotICAgIEVPcENvbnN0cnVjdEludCwKLSAgICBFT3BDb25zdHJ1
Y3RCb29sLAotICAgIEVPcENvbnN0cnVjdEZsb2F0LAotICAgIEVPcENvbnN0cnVjdFZlYzIsCi0g
ICAgRU9wQ29uc3RydWN0VmVjMywKLSAgICBFT3BDb25zdHJ1Y3RWZWM0LAotICAgIEVPcENvbnN0
cnVjdEJWZWMyLAotICAgIEVPcENvbnN0cnVjdEJWZWMzLAotICAgIEVPcENvbnN0cnVjdEJWZWM0
LAotICAgIEVPcENvbnN0cnVjdElWZWMyLAotICAgIEVPcENvbnN0cnVjdElWZWMzLAotICAgIEVP
cENvbnN0cnVjdElWZWM0LAotICAgIEVPcENvbnN0cnVjdE1hdDIsCi0gICAgRU9wQ29uc3RydWN0
TWF0MywKLSAgICBFT3BDb25zdHJ1Y3RNYXQ0LAotICAgIEVPcENvbnN0cnVjdFN0cnVjdCwKLQot
ICAgIC8vCi0gICAgLy8gbW92ZXMKLSAgICAvLwotCi0gICAgRU9wQXNzaWduLAotICAgIEVPcElu
aXRpYWxpemUsCi0gICAgRU9wQWRkQXNzaWduLAotICAgIEVPcFN1YkFzc2lnbiwKLSAgICBFT3BN
dWxBc3NpZ24sCi0gICAgRU9wVmVjdG9yVGltZXNNYXRyaXhBc3NpZ24sCi0gICAgRU9wVmVjdG9y
VGltZXNTY2FsYXJBc3NpZ24sCi0gICAgRU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ24sCi0gICAg
RU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ24sCi0gICAgRU9wRGl2QXNzaWduCi19OwotCi1leHRl
cm4gY29uc3QgY2hhciogZ2V0T3BlcmF0b3JTdHJpbmcoVE9wZXJhdG9yIG9wKTsKLQotY2xhc3Mg
VEludGVybVRyYXZlcnNlcjsKLWNsYXNzIFRJbnRlcm1BZ2dyZWdhdGU7Ci1jbGFzcyBUSW50ZXJt
QmluYXJ5OwotY2xhc3MgVEludGVybVVuYXJ5OwotY2xhc3MgVEludGVybUNvbnN0YW50VW5pb247
Ci1jbGFzcyBUSW50ZXJtU2VsZWN0aW9uOwotY2xhc3MgVEludGVybVR5cGVkOwotY2xhc3MgVElu
dGVybVN5bWJvbDsKLWNsYXNzIFRJbnRlcm1Mb29wOwotY2xhc3MgVEluZm9TaW5rOwotCi0vLwot
Ly8gQmFzZSBjbGFzcyBmb3IgdGhlIHRyZWUgbm9kZXMKLS8vCi1jbGFzcyBUSW50ZXJtTm9kZSB7
Ci1wdWJsaWM6Ci0gICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSgpOwotICAgIFRJbnRlcm1O
b2RlKCkgewotICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgdG8gVFNvdXJjZUxvYyBjb25zdHJ1
Y3RvcgotICAgICAgICAvLyBhZnRlciBnZXR0aW5nIHJpZCBvZiBUUHVibGljVHlwZS4KLSAgICAg
ICAgbGluZS5maXJzdF9maWxlID0gbGluZS5sYXN0X2ZpbGUgPSAwOwotICAgICAgICBsaW5lLmZp
cnN0X2xpbmUgPSBsaW5lLmxhc3RfbGluZSA9IDA7Ci0gICAgfQotICAgIHZpcnR1YWwgflRJbnRl
cm1Ob2RlKCkgeyB9Ci0KLSAgICBjb25zdCBUU291cmNlTG9jJiBnZXRMaW5lKCkgY29uc3QgeyBy
ZXR1cm4gbGluZTsgfQotICAgIHZvaWQgc2V0TGluZShjb25zdCBUU291cmNlTG9jJiBsKSB7IGxp
bmUgPSBsOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciop
ID0gMDsKLSAgICB2aXJ0dWFsIFRJbnRlcm1UeXBlZCogZ2V0QXNUeXBlZCgpIHsgcmV0dXJuIDA7
IH0KLSAgICB2aXJ0dWFsIFRJbnRlcm1Db25zdGFudFVuaW9uKiBnZXRBc0NvbnN0YW50VW5pb24o
KSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBUSW50ZXJtQWdncmVnYXRlKiBnZXRBc0FnZ3Jl
Z2F0ZSgpIHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIFRJbnRlcm1CaW5hcnkqIGdldEFzQmlu
YXJ5Tm9kZSgpIHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIFRJbnRlcm1VbmFyeSogZ2V0QXNV
bmFyeU5vZGUoKSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBUSW50ZXJtU2VsZWN0aW9uKiBn
ZXRBc1NlbGVjdGlvbk5vZGUoKSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBUSW50ZXJtU3lt
Ym9sKiBnZXRBc1N5bWJvbE5vZGUoKSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBUSW50ZXJt
TG9vcCogZ2V0QXNMb29wTm9kZSgpIHsgcmV0dXJuIDA7IH0KLQotICAgIC8vIFJlcGxhY2UgYSBj
aGlsZCBub2RlLiBSZXR1cm4gdHJ1ZSBpZiB8b3JpZ2luYWx8IGlzIGEgY2hpbGQKLSAgICAvLyBu
b2RlIGFuZCBpdCBpcyByZXBsYWNlZDsgb3RoZXJ3aXNlLCByZXR1cm4gZmFsc2UuCi0gICAgdmly
dHVhbCBib29sIHJlcGxhY2VDaGlsZE5vZGUoCi0gICAgICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5h
bCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KSA9IDA7Ci0KLXByb3RlY3RlZDoKLSAgICBUU291
cmNlTG9jIGxpbmU7Ci19OwotCi0vLwotLy8gVGhpcyBpcyBqdXN0IHRvIGhlbHAgeWFjYy4KLS8v
Ci1zdHJ1Y3QgVEludGVybU5vZGVQYWlyIHsKLSAgICBUSW50ZXJtTm9kZSogbm9kZTE7Ci0gICAg
VEludGVybU5vZGUqIG5vZGUyOwotfTsKLQotLy8KLS8vIEludGVybWVkaWF0ZSBjbGFzcyBmb3Ig
bm9kZXMgdGhhdCBoYXZlIGEgdHlwZS4KLS8vCi1jbGFzcyBUSW50ZXJtVHlwZWQgOiBwdWJsaWMg
VEludGVybU5vZGUgewotcHVibGljOgotICAgIFRJbnRlcm1UeXBlZChjb25zdCBUVHlwZSYgdCkg
OiB0eXBlKHQpICB7IH0KLSAgICB2aXJ0dWFsIFRJbnRlcm1UeXBlZCogZ2V0QXNUeXBlZCgpIHsg
cmV0dXJuIHRoaXM7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBoYXNTaWRlRWZmZWN0cygpIGNvbnN0
ID0gMDsKLQotICAgIHZvaWQgc2V0VHlwZShjb25zdCBUVHlwZSYgdCkgeyB0eXBlID0gdDsgfQot
ICAgIGNvbnN0IFRUeXBlJiBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZTsgfQotICAgIFRU
eXBlKiBnZXRUeXBlUG9pbnRlcigpIHsgcmV0dXJuICZ0eXBlOyB9Ci0KLSAgICBUQmFzaWNUeXBl
IGdldEJhc2ljVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0QmFzaWNUeXBlKCk7IH0KLSAg
ICBUUXVhbGlmaWVyIGdldFF1YWxpZmllcigpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0UXVhbGlm
aWVyKCk7IH0KLSAgICBUUHJlY2lzaW9uIGdldFByZWNpc2lvbigpIGNvbnN0IHsgcmV0dXJuIHR5
cGUuZ2V0UHJlY2lzaW9uKCk7IH0KLSAgICBpbnQgZ2V0Tm9taW5hbFNpemUoKSBjb25zdCB7IHJl
dHVybiB0eXBlLmdldE5vbWluYWxTaXplKCk7IH0KLSAgICAKLSAgICBib29sIGlzTWF0cml4KCkg
Y29uc3QgeyByZXR1cm4gdHlwZS5pc01hdHJpeCgpOyB9Ci0gICAgYm9vbCBpc0FycmF5KCkgIGNv
bnN0IHsgcmV0dXJuIHR5cGUuaXNBcnJheSgpOyB9Ci0gICAgYm9vbCBpc1ZlY3RvcigpIGNvbnN0
IHsgcmV0dXJuIHR5cGUuaXNWZWN0b3IoKTsgfQotICAgIGJvb2wgaXNTY2FsYXIoKSBjb25zdCB7
IHJldHVybiB0eXBlLmlzU2NhbGFyKCk7IH0KLSAgICBjb25zdCBjaGFyKiBnZXRCYXNpY1N0cmlu
ZygpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0QmFzaWNTdHJpbmcoKTsgfQotICAgIGNvbnN0IGNo
YXIqIGdldFF1YWxpZmllclN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0UXVhbGlmaWVy
U3RyaW5nKCk7IH0KLSAgICBUU3RyaW5nIGdldENvbXBsZXRlU3RyaW5nKCkgY29uc3QgeyByZXR1
cm4gdHlwZS5nZXRDb21wbGV0ZVN0cmluZygpOyB9Ci0KLSAgICBpbnQgdG90YWxSZWdpc3RlckNv
dW50KCkgY29uc3QgeyByZXR1cm4gdHlwZS50b3RhbFJlZ2lzdGVyQ291bnQoKTsgfQotICAgIGlu
dCBlbGVtZW50UmVnaXN0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZWxlbWVudFJlZ2lz
dGVyQ291bnQoKTsgfQotICAgIGludCBnZXRBcnJheVNpemUoKSBjb25zdCB7IHJldHVybiB0eXBl
LmdldEFycmF5U2l6ZSgpOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBUVHlwZSB0eXBlOwotfTsKLQot
Ly8KLS8vIEhhbmRsZSBmb3IsIGRvLXdoaWxlLCBhbmQgd2hpbGUgbG9vcHMuCi0vLwotZW51bSBU
TG9vcFR5cGUgewotICAgIEVMb29wRm9yLAotICAgIEVMb29wV2hpbGUsCi0gICAgRUxvb3BEb1do
aWxlCi19OwotCi1jbGFzcyBUSW50ZXJtTG9vcCA6IHB1YmxpYyBUSW50ZXJtTm9kZSB7Ci1wdWJs
aWM6Ci0gICAgVEludGVybUxvb3AoVExvb3BUeXBlIGFUeXBlLAotICAgICAgICAgICAgICAgIFRJ
bnRlcm1Ob2RlICphSW5pdCwgVEludGVybVR5cGVkKiBhQ29uZCwgVEludGVybVR5cGVkKiBhRXhw
ciwKLSAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSogYUJvZHkpIDoKLSAgICAgICAgICAgIHR5
cGUoYVR5cGUpLAotICAgICAgICAgICAgaW5pdChhSW5pdCksCi0gICAgICAgICAgICBjb25kKGFD
b25kKSwKLSAgICAgICAgICAgIGV4cHIoYUV4cHIpLAotICAgICAgICAgICAgYm9keShhQm9keSks
Ci0gICAgICAgICAgICB1bnJvbGxGbGFnKGZhbHNlKSB7IH0KLQotICAgIHZpcnR1YWwgVEludGVy
bUxvb3AqIGdldEFzTG9vcE5vZGUoKSB7IHJldHVybiB0aGlzOyB9Ci0gICAgdmlydHVhbCB2b2lk
IHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKLSAgICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNo
aWxkTm9kZSgKLSAgICAgICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVw
bGFjZW1lbnQpOwotCi0gICAgVExvb3BUeXBlIGdldFR5cGUoKSBjb25zdCB7IHJldHVybiB0eXBl
OyB9Ci0gICAgVEludGVybU5vZGUqIGdldEluaXQoKSB7IHJldHVybiBpbml0OyB9Ci0gICAgVElu
dGVybVR5cGVkKiBnZXRDb25kaXRpb24oKSB7IHJldHVybiBjb25kOyB9Ci0gICAgVEludGVybVR5
cGVkKiBnZXRFeHByZXNzaW9uKCkgeyByZXR1cm4gZXhwcjsgfQotICAgIFRJbnRlcm1Ob2RlKiBn
ZXRCb2R5KCkgeyByZXR1cm4gYm9keTsgfQotCi0gICAgdm9pZCBzZXRVbnJvbGxGbGFnKGJvb2wg
ZmxhZykgeyB1bnJvbGxGbGFnID0gZmxhZzsgfQotICAgIGJvb2wgZ2V0VW5yb2xsRmxhZygpIHsg
cmV0dXJuIHVucm9sbEZsYWc7IH0KLQotcHJvdGVjdGVkOgotICAgIFRMb29wVHlwZSB0eXBlOwot
ICAgIFRJbnRlcm1Ob2RlKiBpbml0OyAgLy8gZm9yLWxvb3AgaW5pdGlhbGl6YXRpb24KLSAgICBU
SW50ZXJtVHlwZWQqIGNvbmQ7IC8vIGxvb3AgZXhpdCBjb25kaXRpb24KLSAgICBUSW50ZXJtVHlw
ZWQqIGV4cHI7IC8vIGZvci1sb29wIGV4cHJlc3Npb24KLSAgICBUSW50ZXJtTm9kZSogYm9keTsg
IC8vIGxvb3AgYm9keQotCi0gICAgYm9vbCB1bnJvbGxGbGFnOyAvLyBXaGV0aGVyIHRoZSBsb29w
IHNob3VsZCBiZSB1bnJvbGxlZCBvciBub3QuCi19OwotCi0vLwotLy8gSGFuZGxlIGJyZWFrLCBj
b250aW51ZSwgcmV0dXJuLCBhbmQga2lsbC4KLS8vCi1jbGFzcyBUSW50ZXJtQnJhbmNoIDogcHVi
bGljIFRJbnRlcm1Ob2RlIHsKLXB1YmxpYzoKLSAgICBUSW50ZXJtQnJhbmNoKFRPcGVyYXRvciBv
cCwgVEludGVybVR5cGVkKiBlKSA6Ci0gICAgICAgICAgICBmbG93T3Aob3ApLAotICAgICAgICAg
ICAgZXhwcmVzc2lvbihlKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJt
VHJhdmVyc2VyKik7Ci0gICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGlsZE5vZGUoCi0gICAgICAg
IFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KTsKLQotICAg
IFRPcGVyYXRvciBnZXRGbG93T3AoKSB7IHJldHVybiBmbG93T3A7IH0KLSAgICBUSW50ZXJtVHlw
ZWQqIGdldEV4cHJlc3Npb24oKSB7IHJldHVybiBleHByZXNzaW9uOyB9Ci0KLXByb3RlY3RlZDoK
LSAgICBUT3BlcmF0b3IgZmxvd09wOwotICAgIFRJbnRlcm1UeXBlZCogZXhwcmVzc2lvbjsgIC8v
IG5vbi16ZXJvIGV4Y2VwdCBmb3IgInJldHVybiBleHA7IiBzdGF0ZW1lbnRzCi19OwotCi0vLwot
Ly8gTm9kZXMgdGhhdCBjb3JyZXNwb25kIHRvIHN5bWJvbHMgb3IgY29uc3RhbnRzIGluIHRoZSBz
b3VyY2UgY29kZS4KLS8vCi1jbGFzcyBUSW50ZXJtU3ltYm9sIDogcHVibGljIFRJbnRlcm1UeXBl
ZCB7Ci1wdWJsaWM6Ci0gICAgLy8gaWYgc3ltYm9sIGlzIGluaXRpYWxpemVkIGFzIHN5bWJvbChz
eW0pLCB0aGUgbWVtb3J5IGNvbWVzIGZyb20gdGhlIHBvb2xhbGxvY2F0b3Igb2Ygc3ltLiBJZiBz
eW0gY29tZXMgZnJvbQotICAgIC8vIHBlciBwcm9jZXNzIGdsb2JhbHBvb2xhbGxvY2F0b3IsIHRo
ZW4gaXQgY2F1c2VzIGluY3JlYXNlZCBtZW1vcnkgdXNhZ2UgcGVyIGNvbXBpbGUKLSAgICAvLyBp
dCBpcyBlc3NlbnRpYWwgdG8gdXNlICJzeW1ib2wgPSBzeW0iIHRvIGFzc2lnbiB0byBzeW1ib2wK
LSAgICBUSW50ZXJtU3ltYm9sKGludCBpLCBjb25zdCBUU3RyaW5nJiBzeW0sIGNvbnN0IFRUeXBl
JiB0KSA6IAotICAgICAgICAgICAgVEludGVybVR5cGVkKHQpLCBpZChpKSAgeyBzeW1ib2wgPSBz
eW07IG9yaWdpbmFsU3ltYm9sID0gc3ltOyB9IAotCi0gICAgdmlydHVhbCBib29sIGhhc1NpZGVF
ZmZlY3RzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIGludCBnZXRJZCgpIGNvbnN0
IHsgcmV0dXJuIGlkOyB9Ci0gICAgY29uc3QgVFN0cmluZyYgZ2V0U3ltYm9sKCkgY29uc3QgeyBy
ZXR1cm4gc3ltYm9sOyB9Ci0KLSAgICB2b2lkIHNldElkKGludCBuZXdJZCkgeyBpZCA9IG5ld0lk
OyB9Ci0gICAgdm9pZCBzZXRTeW1ib2woY29uc3QgVFN0cmluZyYgc3ltKSB7IHN5bWJvbCA9IHN5
bTsgfQotCi0gICAgY29uc3QgVFN0cmluZyYgZ2V0T3JpZ2luYWxTeW1ib2woKSBjb25zdCB7IHJl
dHVybiBvcmlnaW5hbFN5bWJvbDsgfQotCi0gICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRl
cm1UcmF2ZXJzZXIqKTsKLSAgICB2aXJ0dWFsIFRJbnRlcm1TeW1ib2wqIGdldEFzU3ltYm9sTm9k
ZSgpIHsgcmV0dXJuIHRoaXM7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxkTm9kZShU
SW50ZXJtTm9kZSAqLCBUSW50ZXJtTm9kZSAqKSB7IHJldHVybiBmYWxzZTsgfQotCi1wcm90ZWN0
ZWQ6Ci0gICAgaW50IGlkOwotICAgIFRTdHJpbmcgc3ltYm9sOwotICAgIFRTdHJpbmcgb3JpZ2lu
YWxTeW1ib2w7Ci19OwotCi1jbGFzcyBUSW50ZXJtQ29uc3RhbnRVbmlvbiA6IHB1YmxpYyBUSW50
ZXJtVHlwZWQgewotcHVibGljOgotICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKENvbnN0YW50VW5p
b24gKnVuaW9uUG9pbnRlciwgY29uc3QgVFR5cGUmIHQpIDogVEludGVybVR5cGVkKHQpLCB1bmlv
bkFycmF5UG9pbnRlcih1bmlvblBvaW50ZXIpIHsgfQotCi0gICAgdmlydHVhbCBib29sIGhhc1Np
ZGVFZmZlY3RzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIENvbnN0YW50VW5pb24q
IGdldFVuaW9uQXJyYXlQb2ludGVyKCkgY29uc3QgeyByZXR1cm4gdW5pb25BcnJheVBvaW50ZXI7
IH0KLSAgICAKLSAgICBpbnQgZ2V0SUNvbnN0KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gdW5p
b25BcnJheVBvaW50ZXIgPyB1bmlvbkFycmF5UG9pbnRlcltpbmRleF0uZ2V0SUNvbnN0KCkgOiAw
OyB9Ci0gICAgZmxvYXQgZ2V0RkNvbnN0KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gdW5pb25B
cnJheVBvaW50ZXIgPyB1bmlvbkFycmF5UG9pbnRlcltpbmRleF0uZ2V0RkNvbnN0KCkgOiAwLjBm
OyB9Ci0gICAgYm9vbCBnZXRCQ29uc3QoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiB1bmlvbkFy
cmF5UG9pbnRlciA/IHVuaW9uQXJyYXlQb2ludGVyW2luZGV4XS5nZXRCQ29uc3QoKSA6IGZhbHNl
OyB9Ci0KLSAgICB2aXJ0dWFsIFRJbnRlcm1Db25zdGFudFVuaW9uKiBnZXRBc0NvbnN0YW50VW5p
b24oKSAgeyByZXR1cm4gdGhpczsgfQotICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJt
VHJhdmVyc2VyKik7Ci0gICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGlsZE5vZGUoVEludGVybU5v
ZGUgKiwgVEludGVybU5vZGUgKikgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIFRJbnRlcm1UeXBl
ZCogZm9sZChUT3BlcmF0b3IsIFRJbnRlcm1UeXBlZCosIFRJbmZvU2luayYpOwotCi1wcm90ZWN0
ZWQ6Ci0gICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheVBvaW50ZXI7Ci19OwotCi0vLwotLy8g
SW50ZXJtZWRpYXRlIGNsYXNzIGZvciBub2RlIHR5cGVzIHRoYXQgaG9sZCBvcGVyYXRvcnMuCi0v
LwotY2xhc3MgVEludGVybU9wZXJhdG9yIDogcHVibGljIFRJbnRlcm1UeXBlZCB7Ci1wdWJsaWM6
Ci0gICAgVE9wZXJhdG9yIGdldE9wKCkgY29uc3QgeyByZXR1cm4gb3A7IH0KLSAgICB2b2lkIHNl
dE9wKFRPcGVyYXRvciBvKSB7IG9wID0gbzsgfQotCi0gICAgYm9vbCBpc0Fzc2lnbm1lbnQoKSBj
b25zdDsKLSAgICBib29sIGlzQ29uc3RydWN0b3IoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgYm9v
bCBoYXNTaWRlRWZmZWN0cygpIGNvbnN0IHsgcmV0dXJuIGlzQXNzaWdubWVudCgpOyB9Ci0KLXBy
b3RlY3RlZDoKLSAgICBUSW50ZXJtT3BlcmF0b3IoVE9wZXJhdG9yIG8pIDogVEludGVybVR5cGVk
KFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQpKSwgb3Aobykge30KLSAgICBUSW50ZXJtT3Bl
cmF0b3IoVE9wZXJhdG9yIG8sIFRUeXBlJiB0KSA6IFRJbnRlcm1UeXBlZCh0KSwgb3Aobykge30g
ICAKLSAgICBUT3BlcmF0b3Igb3A7Ci19OwotCi0vLwotLy8gTm9kZXMgZm9yIGFsbCB0aGUgYmFz
aWMgYmluYXJ5IG1hdGggb3BlcmF0b3JzLgotLy8KLWNsYXNzIFRJbnRlcm1CaW5hcnkgOiBwdWJs
aWMgVEludGVybU9wZXJhdG9yIHsKLXB1YmxpYzoKLSAgICBUSW50ZXJtQmluYXJ5KFRPcGVyYXRv
ciBvKSA6IFRJbnRlcm1PcGVyYXRvcihvKSwgYWRkSW5kZXhDbGFtcChmYWxzZSkge30KLQotICAg
IHZpcnR1YWwgVEludGVybUJpbmFyeSogZ2V0QXNCaW5hcnlOb2RlKCkgeyByZXR1cm4gdGhpczsg
fQotICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7Ci0gICAgdmly
dHVhbCBib29sIHJlcGxhY2VDaGlsZE5vZGUoCi0gICAgICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5h
bCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KTsKLQotICAgIHZpcnR1YWwgYm9vbCBoYXNTaWRl
RWZmZWN0cygpIGNvbnN0IHsgcmV0dXJuIChpc0Fzc2lnbm1lbnQoKSB8fCBsZWZ0LT5oYXNTaWRl
RWZmZWN0cygpIHx8IHJpZ2h0LT5oYXNTaWRlRWZmZWN0cygpKTsgfQotCi0gICAgdm9pZCBzZXRM
ZWZ0KFRJbnRlcm1UeXBlZCogbikgeyBsZWZ0ID0gbjsgfQotICAgIHZvaWQgc2V0UmlnaHQoVElu
dGVybVR5cGVkKiBuKSB7IHJpZ2h0ID0gbjsgfQotICAgIFRJbnRlcm1UeXBlZCogZ2V0TGVmdCgp
IGNvbnN0IHsgcmV0dXJuIGxlZnQ7IH0KLSAgICBUSW50ZXJtVHlwZWQqIGdldFJpZ2h0KCkgY29u
c3QgeyByZXR1cm4gcmlnaHQ7IH0KLSAgICBib29sIHByb21vdGUoVEluZm9TaW5rJik7Ci0KLSAg
ICB2b2lkIHNldEFkZEluZGV4Q2xhbXAoKSB7IGFkZEluZGV4Q2xhbXAgPSB0cnVlOyB9Ci0gICAg
Ym9vbCBnZXRBZGRJbmRleENsYW1wKCkgeyByZXR1cm4gYWRkSW5kZXhDbGFtcDsgfQotCi1wcm90
ZWN0ZWQ6Ci0gICAgVEludGVybVR5cGVkKiBsZWZ0OwotICAgIFRJbnRlcm1UeXBlZCogcmlnaHQ7
Ci0KLSAgICAvLyBJZiBzZXQgdG8gdHJ1ZSwgd3JhcCBhbnkgRU9wSW5kZXhJbmRpcmVjdCB3aXRo
IGEgY2xhbXAgdG8gYm91bmRzLgotICAgIGJvb2wgYWRkSW5kZXhDbGFtcDsKLX07Ci0KLS8vCi0v
LyBOb2RlcyBmb3IgdW5hcnkgbWF0aCBvcGVyYXRvcnMuCi0vLwotY2xhc3MgVEludGVybVVuYXJ5
IDogcHVibGljIFRJbnRlcm1PcGVyYXRvciB7Ci1wdWJsaWM6Ci0gICAgVEludGVybVVuYXJ5KFRP
cGVyYXRvciBvLCBUVHlwZSYgdCkgOiBUSW50ZXJtT3BlcmF0b3IobywgdCksIG9wZXJhbmQoMCks
IHVzZUVtdWxhdGVkRnVuY3Rpb24oZmFsc2UpIHt9Ci0gICAgVEludGVybVVuYXJ5KFRPcGVyYXRv
ciBvKSA6IFRJbnRlcm1PcGVyYXRvcihvKSwgb3BlcmFuZCgwKSwgdXNlRW11bGF0ZWRGdW5jdGlv
bihmYWxzZSkge30KLQotICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2Vy
Kik7Ci0gICAgdmlydHVhbCBUSW50ZXJtVW5hcnkqIGdldEFzVW5hcnlOb2RlKCkgeyByZXR1cm4g
dGhpczsgfQotICAgIHZpcnR1YWwgYm9vbCByZXBsYWNlQ2hpbGROb2RlKAotICAgICAgICBUSW50
ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCk7Ci0KLSAgICB2aXJ0
dWFsIGJvb2wgaGFzU2lkZUVmZmVjdHMoKSBjb25zdCB7IHJldHVybiAoaXNBc3NpZ25tZW50KCkg
fHwgb3BlcmFuZC0+aGFzU2lkZUVmZmVjdHMoKSk7IH0KLQotICAgIHZvaWQgc2V0T3BlcmFuZChU
SW50ZXJtVHlwZWQqIG8pIHsgb3BlcmFuZCA9IG87IH0KLSAgICBUSW50ZXJtVHlwZWQqIGdldE9w
ZXJhbmQoKSB7IHJldHVybiBvcGVyYW5kOyB9ICAgIAotICAgIGJvb2wgcHJvbW90ZShUSW5mb1Np
bmsmKTsKLQotICAgIHZvaWQgc2V0VXNlRW11bGF0ZWRGdW5jdGlvbigpIHsgdXNlRW11bGF0ZWRG
dW5jdGlvbiA9IHRydWU7IH0KLSAgICBib29sIGdldFVzZUVtdWxhdGVkRnVuY3Rpb24oKSB7IHJl
dHVybiB1c2VFbXVsYXRlZEZ1bmN0aW9uOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBUSW50ZXJtVHlw
ZWQqIG9wZXJhbmQ7Ci0KLSAgICAvLyBJZiBzZXQgdG8gdHJ1ZSwgcmVwbGFjZSB0aGUgYnVpbHQt
aW4gZnVuY3Rpb24gY2FsbCB3aXRoIGFuIGVtdWxhdGVkIG9uZQotICAgIC8vIHRvIHdvcmsgYXJv
dW5kIGRyaXZlciBidWdzLgotICAgIGJvb2wgdXNlRW11bGF0ZWRGdW5jdGlvbjsKLX07Ci0KLXR5
cGVkZWYgVFZlY3RvcjxUSW50ZXJtTm9kZSo+IFRJbnRlcm1TZXF1ZW5jZTsKLXR5cGVkZWYgVFZl
Y3RvcjxpbnQ+IFRRdWFsaWZpZXJMaXN0OwotCi0vLwotLy8gTm9kZXMgdGhhdCBvcGVyYXRlIG9u
IGFuIGFyYml0cmFyeSBzaXplZCBzZXQgb2YgY2hpbGRyZW4uCi0vLwotY2xhc3MgVEludGVybUFn
Z3JlZ2F0ZSA6IHB1YmxpYyBUSW50ZXJtT3BlcmF0b3IgewotcHVibGljOgotICAgIFRJbnRlcm1B
Z2dyZWdhdGUoKSA6IFRJbnRlcm1PcGVyYXRvcihFT3BOdWxsKSwgdXNlckRlZmluZWQoZmFsc2Up
LCB1c2VFbXVsYXRlZEZ1bmN0aW9uKGZhbHNlKSB7IH0KLSAgICBUSW50ZXJtQWdncmVnYXRlKFRP
cGVyYXRvciBvKSA6IFRJbnRlcm1PcGVyYXRvcihvKSwgdXNlRW11bGF0ZWRGdW5jdGlvbihmYWxz
ZSkgeyB9Ci0gICAgflRJbnRlcm1BZ2dyZWdhdGUoKSB7IH0KLQotICAgIHZpcnR1YWwgVEludGVy
bUFnZ3JlZ2F0ZSogZ2V0QXNBZ2dyZWdhdGUoKSB7IHJldHVybiB0aGlzOyB9Ci0gICAgdmlydHVh
bCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKLSAgICB2aXJ0dWFsIGJvb2wgcmVw
bGFjZUNoaWxkTm9kZSgKLSAgICAgICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9k
ZSAqcmVwbGFjZW1lbnQpOwotCi0gICAgLy8gQ29uc2VydmF0aXZlbHkgYXNzdW1lIGZ1bmN0aW9u
IGNhbGxzIGFuZCBvdGhlciBhZ2dyZWdhdGUgb3BlcmF0b3JzIGhhdmUgc2lkZS1lZmZlY3RzCi0g
ICAgdmlydHVhbCBib29sIGhhc1NpZGVFZmZlY3RzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQot
Ci0gICAgVEludGVybVNlcXVlbmNlJiBnZXRTZXF1ZW5jZSgpIHsgcmV0dXJuIHNlcXVlbmNlOyB9
Ci0KLSAgICB2b2lkIHNldE5hbWUoY29uc3QgVFN0cmluZyYgbikgeyBuYW1lID0gbjsgfQotICAg
IGNvbnN0IFRTdHJpbmcmIGdldE5hbWUoKSBjb25zdCB7IHJldHVybiBuYW1lOyB9Ci0KLSAgICB2
b2lkIHNldFVzZXJEZWZpbmVkKCkgeyB1c2VyRGVmaW5lZCA9IHRydWU7IH0KLSAgICBib29sIGlz
VXNlckRlZmluZWQoKSBjb25zdCB7IHJldHVybiB1c2VyRGVmaW5lZDsgfQotCi0gICAgdm9pZCBz
ZXRPcHRpbWl6ZShib29sIG8pIHsgb3B0aW1pemUgPSBvOyB9Ci0gICAgYm9vbCBnZXRPcHRpbWl6
ZSgpIHsgcmV0dXJuIG9wdGltaXplOyB9Ci0gICAgdm9pZCBzZXREZWJ1Zyhib29sIGQpIHsgZGVi
dWcgPSBkOyB9Ci0gICAgYm9vbCBnZXREZWJ1ZygpIHsgcmV0dXJuIGRlYnVnOyB9Ci0KLSAgICB2
b2lkIHNldFVzZUVtdWxhdGVkRnVuY3Rpb24oKSB7IHVzZUVtdWxhdGVkRnVuY3Rpb24gPSB0cnVl
OyB9Ci0gICAgYm9vbCBnZXRVc2VFbXVsYXRlZEZ1bmN0aW9uKCkgeyByZXR1cm4gdXNlRW11bGF0
ZWRGdW5jdGlvbjsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgVEludGVybUFnZ3JlZ2F0ZShjb25zdCBU
SW50ZXJtQWdncmVnYXRlJik7IC8vIGRpc2FsbG93IGNvcHkgY29uc3RydWN0b3IKLSAgICBUSW50
ZXJtQWdncmVnYXRlJiBvcGVyYXRvcj0oY29uc3QgVEludGVybUFnZ3JlZ2F0ZSYpOyAvLyBkaXNh
bGxvdyBhc3NpZ25tZW50IG9wZXJhdG9yCi0gICAgVEludGVybVNlcXVlbmNlIHNlcXVlbmNlOwot
ICAgIFRTdHJpbmcgbmFtZTsKLSAgICBib29sIHVzZXJEZWZpbmVkOyAvLyB1c2VkIGZvciB1c2Vy
IGRlZmluZWQgZnVuY3Rpb24gbmFtZXMKLQotICAgIGJvb2wgb3B0aW1pemU7Ci0gICAgYm9vbCBk
ZWJ1ZzsKLQotICAgIC8vIElmIHNldCB0byB0cnVlLCByZXBsYWNlIHRoZSBidWlsdC1pbiBmdW5j
dGlvbiBjYWxsIHdpdGggYW4gZW11bGF0ZWQgb25lCi0gICAgLy8gdG8gd29yayBhcm91bmQgZHJp
dmVyIGJ1Z3MuCi0gICAgYm9vbCB1c2VFbXVsYXRlZEZ1bmN0aW9uOwotfTsKLQotLy8KLS8vIEZv
ciBpZiB0ZXN0cy4gIFNpbXBsaWZpZWQgc2luY2UgdGhlcmUgaXMgbm8gc3dpdGNoIHN0YXRlbWVu
dC4KLS8vCi1jbGFzcyBUSW50ZXJtU2VsZWN0aW9uIDogcHVibGljIFRJbnRlcm1UeXBlZCB7Ci1w
dWJsaWM6Ci0gICAgVEludGVybVNlbGVjdGlvbihUSW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1O
b2RlKiB0cnVlQiwgVEludGVybU5vZGUqIGZhbHNlQikgOgotICAgICAgICAgICAgVEludGVybVR5
cGVkKFRUeXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCkpLCBjb25kaXRpb24oY29uZCksIHRydWVC
bG9jayh0cnVlQiksIGZhbHNlQmxvY2soZmFsc2VCKSB7fQotICAgIFRJbnRlcm1TZWxlY3Rpb24o
VEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtTm9kZSogdHJ1ZUIsIFRJbnRlcm1Ob2RlKiBmYWxz
ZUIsIGNvbnN0IFRUeXBlJiB0eXBlKSA6Ci0gICAgICAgICAgICBUSW50ZXJtVHlwZWQodHlwZSks
IGNvbmRpdGlvbihjb25kKSwgdHJ1ZUJsb2NrKHRydWVCKSwgZmFsc2VCbG9jayhmYWxzZUIpIHt9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOwotICAgIHZp
cnR1YWwgYm9vbCByZXBsYWNlQ2hpbGROb2RlKAotICAgICAgICBUSW50ZXJtTm9kZSAqb3JpZ2lu
YWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCk7Ci0KLSAgICAvLyBDb25zZXJ2YXRpdmVseSBh
c3N1bWUgc2VsZWN0aW9ucyBoYXZlIHNpZGUtZWZmZWN0cwotICAgIHZpcnR1YWwgYm9vbCBoYXNT
aWRlRWZmZWN0cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIGJvb2wgdXNlc1Rlcm5h
cnlPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIGdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQ7IH0K
LSAgICBUSW50ZXJtTm9kZSogZ2V0Q29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9u
OyB9Ci0gICAgVEludGVybU5vZGUqIGdldFRydWVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIHRydWVC
bG9jazsgfQotICAgIFRJbnRlcm1Ob2RlKiBnZXRGYWxzZUJsb2NrKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2VCbG9jazsgfQotICAgIFRJbnRlcm1TZWxlY3Rpb24qIGdldEFzU2VsZWN0aW9uTm9kZSgp
IHsgcmV0dXJuIHRoaXM7IH0KLQotcHJvdGVjdGVkOgotICAgIFRJbnRlcm1UeXBlZCogY29uZGl0
aW9uOwotICAgIFRJbnRlcm1Ob2RlKiB0cnVlQmxvY2s7Ci0gICAgVEludGVybU5vZGUqIGZhbHNl
QmxvY2s7Ci19OwotCi1lbnVtIFZpc2l0Ci17Ci0gICAgUHJlVmlzaXQsCi0gICAgSW5WaXNpdCwK
LSAgICBQb3N0VmlzaXQKLX07Ci0KLS8vCi0vLyBGb3IgdHJhdmVyc2luZyB0aGUgdHJlZS4gIFVz
ZXIgc2hvdWxkIGRlcml2ZSBmcm9tIHRoaXMsIAotLy8gcHV0IHRoZWlyIHRyYXZlcnNhbCBzcGVj
aWZpYyBkYXRhIGluIGl0LCBhbmQgdGhlbiBwYXNzCi0vLyBpdCB0byBhIFRyYXZlcnNlIG1ldGhv
ZC4KLS8vCi0vLyBXaGVuIHVzaW5nIHRoaXMsIGp1c3QgZmlsbCBpbiB0aGUgbWV0aG9kcyBmb3Ig
bm9kZXMgeW91IHdhbnQgdmlzaXRlZC4KLS8vIFJldHVybiBmYWxzZSBmcm9tIGEgcHJlLXZpc2l0
IHRvIHNraXAgdmlzaXRpbmcgdGhhdCBub2RlJ3Mgc3VidHJlZS4KLS8vCi1jbGFzcyBUSW50ZXJt
VHJhdmVyc2VyCi17Ci1wdWJsaWM6Ci0gICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSgpOwot
ICAgIFRJbnRlcm1UcmF2ZXJzZXIoYm9vbCBwcmVWaXNpdCA9IHRydWUsIGJvb2wgaW5WaXNpdCA9
IGZhbHNlLCBib29sIHBvc3RWaXNpdCA9IGZhbHNlLCBib29sIHJpZ2h0VG9MZWZ0ID0gZmFsc2Up
IDogCi0gICAgICAgICAgICBwcmVWaXNpdChwcmVWaXNpdCksCi0gICAgICAgICAgICBpblZpc2l0
KGluVmlzaXQpLAotICAgICAgICAgICAgcG9zdFZpc2l0KHBvc3RWaXNpdCksCi0gICAgICAgICAg
ICByaWdodFRvTGVmdChyaWdodFRvTGVmdCksCi0gICAgICAgICAgICBkZXB0aCgwKSwKLSAgICAg
ICAgICAgIG1heERlcHRoKDApIHt9Ci0gICAgdmlydHVhbCB+VEludGVybVRyYXZlcnNlcigpIHt9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopIHt9Ci0gICAg
dmlydHVhbCB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiopIHt9
Ci0gICAgdmlydHVhbCBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5
Kikge3JldHVybiB0cnVlO30KLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2aXNp
dCwgVEludGVybVVuYXJ5Kikge3JldHVybiB0cnVlO30KLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRT
ZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKSB7cmV0dXJuIHRydWU7fQot
ICAgIHZpcnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3Jl
Z2F0ZSopIHtyZXR1cm4gdHJ1ZTt9Ci0gICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCB2
aXNpdCwgVEludGVybUxvb3AqKSB7cmV0dXJuIHRydWU7fQotICAgIHZpcnR1YWwgYm9vbCB2aXNp
dEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCopIHtyZXR1cm4gdHJ1ZTt9Ci0KLSAg
ICBpbnQgZ2V0TWF4RGVwdGgoKSBjb25zdCB7cmV0dXJuIG1heERlcHRoO30KLQotICAgIHZvaWQg
aW5jcmVtZW50RGVwdGgoVEludGVybU5vZGUgKmN1cnJlbnQpCi0gICAgewotICAgICAgICBkZXB0
aCsrOwotICAgICAgICBtYXhEZXB0aCA9IHN0ZDo6bWF4KG1heERlcHRoLCBkZXB0aCk7Ci0gICAg
ICAgIHBhdGgucHVzaF9iYWNrKGN1cnJlbnQpOwotICAgIH0KLQotICAgIHZvaWQgZGVjcmVtZW50
RGVwdGgoKQotICAgIHsKLSAgICAgICAgZGVwdGgtLTsKLSAgICAgICAgcGF0aC5wb3BfYmFjaygp
OwotICAgIH0KLQotICAgIFRJbnRlcm1Ob2RlICpnZXRQYXJlbnROb2RlKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBwYXRoLnNpemUoKSA9PSAwID8gTlVMTCA6IHBhdGguYmFjaygpOwotICAgIH0K
LQotICAgIC8vIFJldHVybiB0aGUgb3JpZ2luYWwgbmFtZSBpZiBoYXNoIGZ1bmN0aW9uIHBvaW50
ZXIgaXMgTlVMTDsKLSAgICAvLyBvdGhlcndpc2UgcmV0dXJuIHRoZSBoYXNoZWQgbmFtZS4KLSAg
ICBzdGF0aWMgVFN0cmluZyBoYXNoKGNvbnN0IFRTdHJpbmcmIG5hbWUsIFNoSGFzaEZ1bmN0aW9u
NjQgaGFzaEZ1bmN0aW9uKTsKLQotICAgIGNvbnN0IGJvb2wgcHJlVmlzaXQ7Ci0gICAgY29uc3Qg
Ym9vbCBpblZpc2l0OwotICAgIGNvbnN0IGJvb2wgcG9zdFZpc2l0OwotICAgIGNvbnN0IGJvb2wg
cmlnaHRUb0xlZnQ7Ci0KLXByb3RlY3RlZDoKLSAgICBpbnQgZGVwdGg7Ci0gICAgaW50IG1heERl
cHRoOwotCi0gICAgLy8gQWxsIHRoZSBub2RlcyBmcm9tIHJvb3QgdG8gdGhlIGN1cnJlbnQgbm9k
ZSdzIHBhcmVudCBkdXJpbmcgdHJhdmVyc2luZy4KLSAgICBUVmVjdG9yPFRJbnRlcm1Ob2RlICo+
IHBhdGg7Ci19OwotCi0jZW5kaWYgLy8gX19JTlRFUk1FRElBVEVfSApkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2xvY2FsaW50ZXJtZWRpYXRlLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvbG9jYWxpbnRlcm1lZGlhdGUuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NiYzQwMTc4YWNmNjNlZTRiM2RjMTU3N2Rl
M2M3MGJiM2EzYTM3YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvbG9jYWxpbnRlcm1lZGlh
dGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0K
LSNpZm5kZWYgX0xPQ0FMX0lOVEVSTUVESUFURV9JTkNMVURFRF8KLSNkZWZpbmUgX0xPQ0FMX0lO
VEVSTUVESUFURV9JTkNMVURFRF8KLQotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgot
I2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1N5
bWJvbFRhYmxlLmgiCi0KLXN0cnVjdCBUVmVjdG9yRmllbGRzIHsKLSAgICBpbnQgb2Zmc2V0c1s0
XTsKLSAgICBpbnQgbnVtOwotfTsKLQotLy8KLS8vIFNldCBvZiBoZWxwZXIgZnVuY3Rpb25zIHRv
IGhlbHAgcGFyc2UgYW5kIGJ1aWxkIHRoZSB0cmVlLgotLy8KLWNsYXNzIFRJbmZvU2luazsKLWNs
YXNzIFRJbnRlcm1lZGlhdGUgewotcHVibGljOiAgICAKLSAgICBQT09MX0FMTE9DQVRPUl9ORVdf
REVMRVRFKCk7Ci0gICAgVEludGVybWVkaWF0ZShUSW5mb1NpbmsmIGkpIDogaW5mb1NpbmsoaSkg
eyB9Ci0KLSAgICBUSW50ZXJtU3ltYm9sKiBhZGRTeW1ib2woaW50IElkLCBjb25zdCBUU3RyaW5n
JiwgY29uc3QgVFR5cGUmLCBjb25zdCBUU291cmNlTG9jJik7Ci0gICAgVEludGVybVR5cGVkKiBh
ZGRDb252ZXJzaW9uKFRPcGVyYXRvciwgY29uc3QgVFR5cGUmLCBUSW50ZXJtVHlwZWQqKTsKLSAg
ICBUSW50ZXJtVHlwZWQqIGFkZEJpbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQq
IGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmLCBUU3ltYm9sVGFi
bGUmKTsKLSAgICBUSW50ZXJtVHlwZWQqIGFkZEFzc2lnbihUT3BlcmF0b3Igb3AsIFRJbnRlcm1U
eXBlZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdodCwgY29uc3QgVFNvdXJjZUxvYyYpOwotICAg
IFRJbnRlcm1UeXBlZCogYWRkSW5kZXgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGJhc2Us
IFRJbnRlcm1UeXBlZCogaW5kZXgsIGNvbnN0IFRTb3VyY2VMb2MmKTsKLSAgICBUSW50ZXJtVHlw
ZWQqIGFkZFVuYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBjaGlsZCwgY29uc3Qg
VFNvdXJjZUxvYyYsIFRTeW1ib2xUYWJsZSYpOwotICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGdyb3dB
Z2dyZWdhdGUoVEludGVybU5vZGUqIGxlZnQsIFRJbnRlcm1Ob2RlKiByaWdodCwgY29uc3QgVFNv
dXJjZUxvYyYpOwotICAgIFRJbnRlcm1BZ2dyZWdhdGUqIG1ha2VBZ2dyZWdhdGUoVEludGVybU5v
ZGUqIG5vZGUsIGNvbnN0IFRTb3VyY2VMb2MmKTsKLSAgICBUSW50ZXJtQWdncmVnYXRlKiBzZXRB
Z2dyZWdhdGVPcGVyYXRvcihUSW50ZXJtTm9kZSosIFRPcGVyYXRvciwgY29uc3QgVFNvdXJjZUxv
YyYpOwotICAgIFRJbnRlcm1Ob2RlKiAgYWRkU2VsZWN0aW9uKFRJbnRlcm1UeXBlZCogY29uZCwg
VEludGVybU5vZGVQYWlyIGNvZGUsIGNvbnN0IFRTb3VyY2VMb2MmKTsKLSAgICBUSW50ZXJtVHlw
ZWQqIGFkZFNlbGVjdGlvbihUSW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1UeXBlZCogdHJ1ZUJs
b2NrLCBUSW50ZXJtVHlwZWQqIGZhbHNlQmxvY2ssIGNvbnN0IFRTb3VyY2VMb2MmKTsKLSAgICBU
SW50ZXJtVHlwZWQqIGFkZENvbW1hKFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVkKiBy
aWdodCwgY29uc3QgVFNvdXJjZUxvYyYpOwotICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiBhZGRD
b25zdGFudFVuaW9uKENvbnN0YW50VW5pb24qLCBjb25zdCBUVHlwZSYsIGNvbnN0IFRTb3VyY2VM
b2MmKTsKLSAgICBUSW50ZXJtVHlwZWQqIHByb21vdGVDb25zdGFudFVuaW9uKFRCYXNpY1R5cGUs
IFRJbnRlcm1Db25zdGFudFVuaW9uKikgOwotICAgIGJvb2wgcGFyc2VDb25zdFRyZWUoY29uc3Qg
VFNvdXJjZUxvYyYsIFRJbnRlcm1Ob2RlKiwgQ29uc3RhbnRVbmlvbiosIFRPcGVyYXRvciwgVFN5
bWJvbFRhYmxlJiwgVFR5cGUsIGJvb2wgc2luZ2xlQ29uc3RhbnRQYXJhbSA9IGZhbHNlKTsgICAg
ICAgIAotICAgIFRJbnRlcm1Ob2RlKiBhZGRMb29wKFRMb29wVHlwZSwgVEludGVybU5vZGUqLCBU
SW50ZXJtVHlwZWQqLCBUSW50ZXJtVHlwZWQqLCBUSW50ZXJtTm9kZSosIGNvbnN0IFRTb3VyY2VM
b2MmKTsKLSAgICBUSW50ZXJtQnJhbmNoKiBhZGRCcmFuY2goVE9wZXJhdG9yLCBjb25zdCBUU291
cmNlTG9jJik7Ci0gICAgVEludGVybUJyYW5jaCogYWRkQnJhbmNoKFRPcGVyYXRvciwgVEludGVy
bVR5cGVkKiwgY29uc3QgVFNvdXJjZUxvYyYpOwotICAgIFRJbnRlcm1UeXBlZCogYWRkU3dpenps
ZShUVmVjdG9yRmllbGRzJiwgY29uc3QgVFNvdXJjZUxvYyYpOwotICAgIGJvb2wgcG9zdFByb2Nl
c3MoVEludGVybU5vZGUqKTsKLSAgICB2b2lkIHJlbW92ZShUSW50ZXJtTm9kZSopOwotICAgIHZv
aWQgb3V0cHV0VHJlZShUSW50ZXJtTm9kZSopOwotCi1wcml2YXRlOgotICAgIHZvaWQgb3BlcmF0
b3I9KFRJbnRlcm1lZGlhdGUmKTsgLy8gcHJldmVudCBhc3NpZ25tZW50cwotCi0gICAgVEluZm9T
aW5rJiBpbmZvU2luazsKLX07Ci0KLSNlbmRpZiAvLyBfTE9DQUxfSU5URVJNRURJQVRFX0lOQ0xV
REVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL29z
aW5jbHVkZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL29zaW5jbHVk
ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGJiMWE3OTdjNGQ4ZDkyZmQ2MzU0
MmE5ZTE5NWRlNTBkZjA2ODhiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9vc2luY2x1ZGUu
aAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNp
Zm5kZWYgX19PU0lOQ0xVREVfSAotI2RlZmluZSBfX09TSU5DTFVERV9ICi0KLS8vCi0vLyBUaGlz
IGZpbGUgY29udGFpbnMgY29udGFpbnMgb3Mtc3BlY2lmaWMgZGF0YXR5cGVzIGFuZAotLy8gZGVj
bGFyZXMgYW55IG9zLXNwZWNpZmljIGZ1bmN0aW9ucy4KLS8vCi0KLSNpZiBkZWZpbmVkKF9XSU4z
MikgfHwgZGVmaW5lZChfV0lONjQpCi0jZGVmaW5lIEFOR0xFX09TX1dJTgotI2VsaWYgZGVmaW5l
ZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19saW51eF9fKSB8fCBcCi0gICAgICBkZWZpbmVkKF9f
RnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBcCi0gICAgICBkZWZpbmVkKF9f
c3VuKSB8fCBkZWZpbmVkKEFORFJPSUQpIHx8IFwKLSAgICAgIGRlZmluZWQoX19HTElCQ19fKSB8
fCBkZWZpbmVkKF9fR05VX18pIHx8IFwKLSAgICAgIGRlZmluZWQoX19RTlhfXykKLSNkZWZpbmUg
QU5HTEVfT1NfUE9TSVgKLSNlbHNlCi0jZXJyb3IgVW5zdXBwb3J0ZWQgcGxhdGZvcm0uCi0jZW5k
aWYKLQotI2lmIGRlZmluZWQoQU5HTEVfT1NfV0lOKQotI2RlZmluZSBTVFJJQ1QKLSNkZWZpbmUg
VkNfRVhUUkFMRUFOIDEKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jZWxpZiBkZWZpbmVkKEFOR0xF
X09TX1BPU0lYKQotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNpbmNsdWRlIDxzZW1hcGhvcmUuaD4K
LSNpbmNsdWRlIDxlcnJuby5oPgotI2VuZGlmICAvLyBBTkdMRV9PU19XSU4KLQotCi0jaW5jbHVk
ZSAiY29tcGlsZXIvZGVidWcuaCIKLQotLy8KLS8vIFRocmVhZCBMb2NhbCBTdG9yYWdlIE9wZXJh
dGlvbnMKLS8vCi0jaWYgZGVmaW5lZChBTkdMRV9PU19XSU4pCi10eXBlZGVmIERXT1JEIE9TX1RM
U0luZGV4OwotI2RlZmluZSBPU19JTlZBTElEX1RMU19JTkRFWCAoVExTX09VVF9PRl9JTkRFWEVT
KQotI2VsaWYgZGVmaW5lZChBTkdMRV9PU19QT1NJWCkKLXR5cGVkZWYgcHRocmVhZF9rZXlfdCBP
U19UTFNJbmRleDsKLSNkZWZpbmUgT1NfSU5WQUxJRF9UTFNfSU5ERVggKHN0YXRpY19jYXN0PE9T
X1RMU0luZGV4PigtMSkpCi0jZW5kaWYgIC8vIEFOR0xFX09TX1dJTgotCi1PU19UTFNJbmRleCBP
U19BbGxvY1RMU0luZGV4KCk7Ci1ib29sIE9TX1NldFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRl
eCwgdm9pZCAqbHB2VmFsdWUpOwotYm9vbCBPU19GcmVlVExTSW5kZXgoT1NfVExTSW5kZXggbklu
ZGV4KTsKLQotaW5saW5lIHZvaWQqIE9TX0dldFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCkK
LXsKLSAgICBBU1NFUlQobkluZGV4ICE9IE9TX0lOVkFMSURfVExTX0lOREVYKTsKLSNpZiBkZWZp
bmVkKEFOR0xFX09TX1dJTikKLSAgICByZXR1cm4gVGxzR2V0VmFsdWUobkluZGV4KTsKLSNlbGlm
IGRlZmluZWQoQU5HTEVfT1NfUE9TSVgpCi0gICAgcmV0dXJuIHB0aHJlYWRfZ2V0c3BlY2lmaWMo
bkluZGV4KTsKLSNlbmRpZiAgLy8gQU5HTEVfT1NfV0lOCi19Ci0KLSNlbmRpZiAvLyBfX09TSU5D
TFVERV9ICmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
b3Nzb3VyY2VfcG9zaXguY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L29zc291cmNlX3Bvc2l4LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWUxZTY5
OWFlYmMzYTI3YmEzZGExN2VlODEzMTVkYzY2MmI5OThlOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvb3Nzb3VyY2VfcG9zaXguY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotLy8KLQotLy8KLS8vIFRoaXMgZmlsZSBjb250YWlucyB0aGUgcG9zaXgg
c3BlY2lmaWMgZnVuY3Rpb25zCi0vLwotI2luY2x1ZGUgImNvbXBpbGVyL29zaW5jbHVkZS5oIgot
Ci0jaWYgIWRlZmluZWQoQU5HTEVfT1NfUE9TSVgpCi0jZXJyb3IgVHJ5aW5nIHRvIGJ1aWxkIGEg
cG9zaXggc3BlY2lmaWMgZmlsZSBpbiBhIG5vbi1wb3NpeCBidWlsZC4KLSNlbmRpZgotCi0vLwot
Ly8gVGhyZWFkIExvY2FsIFN0b3JhZ2UgT3BlcmF0aW9ucwotLy8KLU9TX1RMU0luZGV4IE9TX0Fs
bG9jVExTSW5kZXgoKQotewotICAgIHB0aHJlYWRfa2V5X3QgcFBvb2xJbmRleDsKLQotICAgIC8v
Ci0gICAgLy8gQ3JlYXRlIGdsb2JhbCBwb29sIGtleS4KLSAgICAvLwotICAgIGlmICgocHRocmVh
ZF9rZXlfY3JlYXRlKCZwUG9vbEluZGV4LCBOVUxMKSkgIT0gMCkgewotICAgICAgICBhc3NlcnQo
MCAmJiAiT1NfQWxsb2NUTFNJbmRleCgpOiBVbmFibGUgdG8gYWxsb2NhdGUgVGhyZWFkIExvY2Fs
IFN0b3JhZ2UiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBlbHNlIHsKLSAg
ICAgICAgcmV0dXJuIHBQb29sSW5kZXg7Ci0gICAgfQotfQotCi0KLWJvb2wgT1NfU2V0VExTVmFs
dWUoT1NfVExTSW5kZXggbkluZGV4LCB2b2lkICpscHZWYWx1ZSkKLXsKLSAgICBpZiAobkluZGV4
ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJPU19TZXRU
TFNWYWx1ZSgpOiBJbnZhbGlkIFRMUyBJbmRleCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgaWYgKHB0aHJlYWRfc2V0c3BlY2lmaWMobkluZGV4LCBscHZWYWx1ZSkgPT0g
MCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLQotYm9vbCBPU19GcmVlVExTSW5kZXgoT1NfVExTSW5kZXggbkluZGV4KQotewotICAg
IGlmIChuSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKLSAgICAgICAgYXNzZXJ0KDAg
JiYgIk9TX1NldFRMU1ZhbHVlKCk6IEludmFsaWQgVExTIEluZGV4Iik7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIERlbGV0ZSB0aGUgZ2xvYmFsIHBvb2wg
a2V5LgotICAgIC8vCi0gICAgaWYgKHB0aHJlYWRfa2V5X2RlbGV0ZShuSW5kZXgpID09IDApCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL29zc291cmNl
X3dpbi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3Nzb3VyY2Vf
d2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk5MjJmZWYzZjQxMWVkYmI4
M2I1MjI0MTJiNmNmNzI4YzNmOWYzOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3Nzb3Vy
Y2Vfd2luLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
LS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9vc2luY2x1ZGUuaCIKLS8vCi0vLyBUaGlzIGZpbGUg
Y29udGFpbnMgY29udGFpbnMgdGhlIHdpbmRvdydzIHNwZWNpZmljIGZ1bmN0aW9ucwotLy8KLQot
I2lmICFkZWZpbmVkKEFOR0xFX09TX1dJTikKLSNlcnJvciBUcnlpbmcgdG8gYnVpbGQgYSB3aW5k
b3dzIHNwZWNpZmljIGZpbGUgaW4gYSBub24gd2luZG93cyBidWlsZC4KLSNlbmRpZgotCi0KLS8v
Ci0vLyBUaHJlYWQgTG9jYWwgU3RvcmFnZSBPcGVyYXRpb25zCi0vLwotT1NfVExTSW5kZXggT1Nf
QWxsb2NUTFNJbmRleCgpCi17Ci0JRFdPUkQgZHdJbmRleCA9IFRsc0FsbG9jKCk7Ci0JaWYgKGR3
SW5kZXggPT0gVExTX09VVF9PRl9JTkRFWEVTKSB7Ci0JCWFzc2VydCgwICYmICJPU19BbGxvY1RM
U0luZGV4KCk6IFVuYWJsZSB0byBhbGxvY2F0ZSBUaHJlYWQgTG9jYWwgU3RvcmFnZSIpOwotCQly
ZXR1cm4gT1NfSU5WQUxJRF9UTFNfSU5ERVg7Ci0JfQotCi0JcmV0dXJuIGR3SW5kZXg7Ci19Ci0K
LQotYm9vbCBPU19TZXRUTFNWYWx1ZShPU19UTFNJbmRleCBuSW5kZXgsIHZvaWQgKmxwdlZhbHVl
KQotewotCWlmIChuSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKLQkJYXNzZXJ0KDAg
JiYgIk9TX1NldFRMU1ZhbHVlKCk6IEludmFsaWQgVExTIEluZGV4Iik7Ci0JCXJldHVybiBmYWxz
ZTsKLQl9Ci0KLQlpZiAoVGxzU2V0VmFsdWUobkluZGV4LCBscHZWYWx1ZSkpCi0JCXJldHVybiB0
cnVlOwotCWVsc2UKLQkJcmV0dXJuIGZhbHNlOwotfQotCi0KLWJvb2wgT1NfRnJlZVRMU0luZGV4
KE9TX1RMU0luZGV4IG5JbmRleCkKLXsKLQlpZiAobkluZGV4ID09IE9TX0lOVkFMSURfVExTX0lO
REVYKSB7Ci0JCWFzc2VydCgwICYmICJPU19TZXRUTFNWYWx1ZSgpOiBJbnZhbGlkIFRMUyBJbmRl
eCIpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JaWYgKFRsc0ZyZWUobkluZGV4KSkKLQkJcmV0
dXJuIHRydWU7Ci0JZWxzZQotCQlyZXR1cm4gZmFsc2U7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcGFyc2VDb25zdC5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcGFyc2VDb25zdC5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDY1ZWQxMTVjYmNiMzM4Nzk4N2QzMTM5YWY4Y2UzZjJlMDIwNzU0MjIu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3BhcnNlQ29uc3QuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMjQ1ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxl
ci9QYXJzZUNvbnRleHQuaCIKLQotLy8KLS8vIFVzZSB0aGlzIGNsYXNzIHRvIGNhcnJ5IGFsb25n
IGRhdGEgZnJvbSBub2RlIHRvIG5vZGUgaW4gCi0vLyB0aGUgdHJhdmVyc2FsCi0vLwotY2xhc3Mg
VENvbnN0VHJhdmVyc2VyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewotcHVibGljOgotICAg
IFRDb25zdFRyYXZlcnNlcihDb25zdGFudFVuaW9uKiBjVW5pb24sIGJvb2wgc2luZ2xlQ29uc3RQ
YXJhbSwgVE9wZXJhdG9yIGNvbnN0cnVjdFR5cGUsIFRJbmZvU2luayYgc2luaywgVFN5bWJvbFRh
YmxlJiBzeW1UYWJsZSwgVFR5cGUmIHQpCi0gICAgICAgIDogZXJyb3IoZmFsc2UpLAotICAgICAg
ICAgIGluZGV4KDApLAotICAgICAgICAgIHVuaW9uQXJyYXkoY1VuaW9uKSwKLSAgICAgICAgICB0
eXBlKHQpLAotICAgICAgICAgIGNvbnN0cnVjdG9yVHlwZShjb25zdHJ1Y3RUeXBlKSwKLSAgICAg
ICAgICBzaW5nbGVDb25zdGFudFBhcmFtKHNpbmdsZUNvbnN0UGFyYW0pLAotICAgICAgICAgIGlu
Zm9TaW5rKHNpbmspLAotICAgICAgICAgIHN5bWJvbFRhYmxlKHN5bVRhYmxlKSwKLSAgICAgICAg
ICBzaXplKDApLAotICAgICAgICAgIGlzTWF0cml4KGZhbHNlKSwKLSAgICAgICAgICBtYXRyaXhT
aXplKDApIHsKLSAgICB9Ci0KLSAgICBib29sIGVycm9yOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9p
ZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7Ci0gICAgdm9pZCB2aXNpdENvbnN0YW50VW5p
b24oVEludGVybUNvbnN0YW50VW5pb24qKTsKLSAgICBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZp
c2l0LCBUSW50ZXJtQmluYXJ5Kik7Ci0gICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBU
SW50ZXJtVW5hcnkqKTsKLSAgICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50
ZXJtU2VsZWN0aW9uKik7Ci0gICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVElu
dGVybUFnZ3JlZ2F0ZSopOwotICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJt
TG9vcCopOwotICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gq
KTsKLQotICAgIHNpemVfdCBpbmRleDsKLSAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5Owot
ICAgIFRUeXBlIHR5cGU7Ci0gICAgVE9wZXJhdG9yIGNvbnN0cnVjdG9yVHlwZTsKLSAgICBib29s
IHNpbmdsZUNvbnN0YW50UGFyYW07Ci0gICAgVEluZm9TaW5rJiBpbmZvU2luazsKLSAgICBUU3lt
Ym9sVGFibGUmIHN5bWJvbFRhYmxlOwotICAgIHNpemVfdCBzaXplOyAvLyBzaXplIG9mIHRoZSBj
b25zdHJ1Y3RvciAoIDQgZm9yIHZlYzQpCi0gICAgYm9vbCBpc01hdHJpeDsKLSAgICBzaXplX3Qg
bWF0cml4U2l6ZTsgLy8gZGltZW5zaW9uIG9mIHRoZSBtYXRyaXggKG5vbWluYWwgc2l6ZSBhbmQg
bm90IHRoZSBpbnN0YW5jZSBzaXplKQotfTsKLQotLy8KLS8vIFRoZSByZXN0IG9mIHRoZSBmaWxl
IGFyZSB0aGUgdHJhdmVyc2FsIGZ1bmN0aW9ucy4gIFRoZSBsYXN0IG9uZQotLy8gaXMgdGhlIG9u
ZSB0aGF0IHN0YXJ0cyB0aGUgdHJhdmVyc2FsLgotLy8KLS8vIFJldHVybiB0cnVlIGZyb20gaW50
ZXJpb3Igbm9kZXMgdG8gaGF2ZSB0aGUgZXh0ZXJuYWwgdHJhdmVyc2FsCi0vLyBjb250aW51ZSBv
biB0byBjaGlsZHJlbi4gIElmIHlvdSBwcm9jZXNzIGNoaWxkcmVuIHlvdXJzZWxmLAotLy8gcmV0
dXJuIGZhbHNlLgotLy8KLQotdm9pZCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0U3ltYm9sKFRJbnRl
cm1TeW1ib2wqIG5vZGUpCi17Ci0gICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRl
cm5hbEVycm9yLCBub2RlLT5nZXRMaW5lKCksICJTeW1ib2wgTm9kZSBmb3VuZCBpbiBjb25zdGFu
dCBjb25zdHJ1Y3RvciIpOwotICAgIHJldHVybjsKLQotfQotCi1ib29sIFRDb25zdFRyYXZlcnNl
cjo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5vZGUpCi17Ci0gICAg
VFF1YWxpZmllciBxdWFsaWZpZXIgPSBub2RlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCk7Ci0g
ICAgCi0gICAgaWYgKHF1YWxpZmllciAhPSBFdnFDb25zdCkgewotICAgICAgICBUU3RyaW5nIGJ1
ZjsKLSAgICAgICAgYnVmLmFwcGVuZCgiJ2NvbnN0cnVjdG9yJyA6IGFzc2lnbmluZyBub24tY29u
c3RhbnQgdG8gIik7Ci0gICAgICAgIGJ1Zi5hcHBlbmQodHlwZS5nZXRDb21wbGV0ZVN0cmluZygp
KTsKLSAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhFcnJvciwgbm9kZS0+Z2V0
TGluZSgpLCBidWYuY19zdHIoKSk7Ci0gICAgICAgIGVycm9yID0gdHJ1ZTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOyAgCi0gICAgfQotCi0gICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeElu
dGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIkJpbmFyeSBOb2RlIGZvdW5kIGluIGNvbnN0
YW50IGNvbnN0cnVjdG9yIik7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFRD
b25zdFRyYXZlcnNlcjo6dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2Rl
KQotewotICAgIFRTdHJpbmcgYnVmOwotICAgIGJ1Zi5hcHBlbmQoIidjb25zdHJ1Y3RvcicgOiBh
c3NpZ25pbmcgbm9uLWNvbnN0YW50IHRvICIpOwotICAgIGJ1Zi5hcHBlbmQodHlwZS5nZXRDb21w
bGV0ZVN0cmluZygpKTsKLSAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEVycm9yLCBu
b2RlLT5nZXRMaW5lKCksIGJ1Zi5jX3N0cigpKTsKLSAgICBlcnJvciA9IHRydWU7Ci0gICAgcmV0
dXJuIGZhbHNlOyAgCi19Ci0KLWJvb2wgVENvbnN0VHJhdmVyc2VyOjp2aXNpdEFnZ3JlZ2F0ZShW
aXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKLXsKLSAgICBpZiAoIW5vZGUtPmlz
Q29uc3RydWN0b3IoKSAmJiBub2RlLT5nZXRPcCgpICE9IEVPcENvbW1hKSB7Ci0gICAgICAgIFRT
dHJpbmcgYnVmOwotICAgICAgICBidWYuYXBwZW5kKCInY29uc3RydWN0b3InIDogYXNzaWduaW5n
IG5vbi1jb25zdGFudCB0byAiKTsKLSAgICAgICAgYnVmLmFwcGVuZCh0eXBlLmdldENvbXBsZXRl
U3RyaW5nKCkpOwotICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEVycm9yLCBu
b2RlLT5nZXRMaW5lKCksIGJ1Zi5jX3N0cigpKTsKLSAgICAgICAgZXJyb3IgPSB0cnVlOwotICAg
ICAgICByZXR1cm4gZmFsc2U7ICAKLSAgICB9Ci0KLSAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2Uo
KS5zaXplKCkgPT0gMCkgewotICAgICAgICBlcnJvciA9IHRydWU7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBib29sIGZsYWcgPSBub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUo
KSA9PSAxICYmIG5vZGUtPmdldFNlcXVlbmNlKClbMF0tPmdldEFzVHlwZWQoKS0+Z2V0QXNDb25z
dGFudFVuaW9uKCk7Ci0gICAgaWYgKGZsYWcpIAotICAgIHsKLSAgICAgICAgc2luZ2xlQ29uc3Rh
bnRQYXJhbSA9IHRydWU7IAotICAgICAgICBjb25zdHJ1Y3RvclR5cGUgPSBub2RlLT5nZXRPcCgp
OwotICAgICAgICBzaXplID0gbm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsKLQotICAg
ICAgICBpZiAobm9kZS0+Z2V0VHlwZSgpLmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgIGlzTWF0
cml4ID0gdHJ1ZTsKLSAgICAgICAgICAgIG1hdHJpeFNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0
Tm9taW5hbFNpemUoKTsKLSAgICAgICAgfQotICAgIH0gICAgICAgCi0KLSAgICBmb3IgKFRJbnRl
cm1TZXF1ZW5jZTo6aXRlcmF0b3IgcCA9IG5vZGUtPmdldFNlcXVlbmNlKCkuYmVnaW4oKTsgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgIT0gbm9kZS0+Z2V0U2VxdWVuY2Uo
KS5lbmQoKTsgcCsrKSB7Ci0KLSAgICAgICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9wQ29tbWEp
Ci0gICAgICAgICAgICBpbmRleCA9IDA7ICAgICAgICAgICAKLQotICAgICAgICAoKnApLT50cmF2
ZXJzZSh0aGlzKTsKLSAgICB9ICAgCi0gICAgaWYgKGZsYWcpIAotICAgIHsKLSAgICAgICAgc2lu
Z2xlQ29uc3RhbnRQYXJhbSA9IGZhbHNlOyAgIAotICAgICAgICBjb25zdHJ1Y3RvclR5cGUgPSBF
T3BOdWxsOwotICAgICAgICBzaXplID0gMDsKLSAgICAgICAgaXNNYXRyaXggPSBmYWxzZTsKLSAg
ICAgICAgbWF0cml4U2l6ZSA9IDA7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2Vs
ZWN0aW9uKiBub2RlKQotewotICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJu
YWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiU2VsZWN0aW9uIE5vZGUgZm91bmQgaW4gY29uc3Rh
bnQgY29uc3RydWN0b3IiKTsKLSAgICBlcnJvciA9IHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi12b2lkIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25z
dGFudFVuaW9uKiBub2RlKQotewotICAgIGlmICghbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIo
KSkKLSAgICB7Ci0gICAgICAgIC8vIFRoZSBjb25zdGFudCB3YXMgbm90IGluaXRpYWxpemVkLCB0
aGlzIHNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBsb2dnZWQKLSAgICAgICAgYXNzZXJ0KGluZm9T
aW5rLmluZm8uc2l6ZSgpICE9IDApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ29u
c3RhbnRVbmlvbiogbGVmdFVuaW9uQXJyYXkgPSB1bmlvbkFycmF5OwotICAgIHNpemVfdCBpbnN0
YW5jZVNpemUgPSB0eXBlLmdldE9iamVjdFNpemUoKTsKLQotICAgIGlmIChpbmRleCA+PSBpbnN0
YW5jZVNpemUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghc2luZ2xlQ29uc3RhbnRQYXJh
bSkgewotICAgICAgICBzaXplX3Qgc2l6ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXpl
KCk7Ci0gICAgCi0gICAgICAgIENvbnN0YW50VW5pb24gKnJpZ2h0VW5pb25BcnJheSA9IG5vZGUt
PmdldFVuaW9uQXJyYXlQb2ludGVyKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPj0gaW5zdGFuY2VTaXplKQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2luZGV4XSA9
IHJpZ2h0VW5pb25BcnJheVtpXTsKLQotICAgICAgICAgICAgKGluZGV4KSsrOwotICAgICAgICB9
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc2l6ZV90IHRvdGFsU2l6ZSA9IGluZGV4ICsgc2l6ZTsK
LSAgICAgICAgQ29uc3RhbnRVbmlvbiAqcmlnaHRVbmlvbkFycmF5ID0gbm9kZS0+Z2V0VW5pb25B
cnJheVBvaW50ZXIoKTsKLSAgICAgICAgaWYgKCFpc01hdHJpeCkgewotICAgICAgICAgICAgc2l6
ZV90IGNvdW50ID0gMDsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBpbmRleDsgaSA8IHRv
dGFsU2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGkgPj0gaW5zdGFuY2VTaXplKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICBsZWZ0VW5pb25B
cnJheVtpXSA9IHJpZ2h0VW5pb25BcnJheVtjb3VudF07Ci0KLSAgICAgICAgICAgICAgICAoaW5k
ZXgpKys7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFR5
cGUoKS5nZXRPYmplY3RTaXplKCkgPiAxKQotICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwot
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgeyAgLy8gZm9yIG1hdHJpeCBjb25zdHJ1Y3Rv
cnMKLSAgICAgICAgICAgIHNpemVfdCBjb3VudCA9IDA7Ci0gICAgICAgICAgICBzaXplX3QgZWxl
bWVudCA9IGluZGV4OwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGluZGV4OyBpIDwgdG90
YWxTaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoaSA+PSBpbnN0YW5jZVNpemUpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCAt
IGkgPT0gMCB8fCAoaSAtIGVsZW1lbnQpICUgKG1hdHJpeFNpemUgKyAxKSA9PSAwICkKLSAgICAg
ICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0gPSByaWdodFVuaW9uQXJyYXlbY291bnRd
OwotICAgICAgICAgICAgICAgIGVsc2UgCi0gICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFy
cmF5W2ldLnNldEZDb25zdCgwLjBmKTsKLQotICAgICAgICAgICAgICAgIChpbmRleCkrKzsKLQot
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpID4gMSkK
LSAgICAgICAgICAgICAgICAgICAgY291bnQrKzsgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgVENvbnN0VHJhdmVyc2VyOjp2aXNpdExv
b3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKiBub2RlKQotewotICAgIGluZm9TaW5rLmluZm8u
bWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiTG9vcCBOb2Rl
IGZvdW5kIGluIGNvbnN0YW50IGNvbnN0cnVjdG9yIik7Ci0gICAgZXJyb3IgPSB0cnVlOwotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0QnJhbmNoKFZp
c2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKiBub2RlKQotewotICAgIGluZm9TaW5rLmluZm8ubWVz
c2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQnJhbmNoIE5vZGUg
Zm91bmQgaW4gY29uc3RhbnQgY29uc3RydWN0b3IiKTsKLSAgICBlcnJvciA9IHRydWU7Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi0vLwotLy8gVGhpcyBmdW5jdGlvbiBpcyB0aGUgb25lIHRvIGNh
bGwgZXh0ZXJuYWxseSB0byBzdGFydCB0aGUgdHJhdmVyc2FsLgotLy8gSW5kaXZpZHVhbCBmdW5j
dGlvbnMgY2FuIGJlIGluaXRpYWxpemVkIHRvIDAgdG8gc2tpcCBwcm9jZXNzaW5nIG9mIHRoYXQK
LS8vIHR5cGUgb2Ygbm9kZS4gIEl0J3MgY2hpbGRyZW4gd2lsbCBzdGlsbCBiZSBwcm9jZXNzZWQu
Ci0vLwotYm9vbCBUSW50ZXJtZWRpYXRlOjpwYXJzZUNvbnN0VHJlZShjb25zdCBUU291cmNlTG9j
JiBsaW5lLCBUSW50ZXJtTm9kZSogcm9vdCwgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSwgVE9w
ZXJhdG9yIGNvbnN0cnVjdG9yVHlwZSwgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVFR5cGUg
dCwgYm9vbCBzaW5nbGVDb25zdGFudFBhcmFtKQotewotICAgIGlmIChyb290ID09IDApCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIFRDb25zdFRyYXZlcnNlciBpdCh1bmlvbkFycmF5LCBz
aW5nbGVDb25zdGFudFBhcmFtLCBjb25zdHJ1Y3RvclR5cGUsIGluZm9TaW5rLCBzeW1ib2xUYWJs
ZSwgdCk7Ci0KLSAgICByb290LT50cmF2ZXJzZSgmaXQpOwotICAgIGlmIChpdC5lcnJvcikKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL0RpYWdub3N0aWNzQmFzZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL0RpYWdub3N0aWNzQmFzZS5jcHAKaW5kZXggM2UyMmUxZjFjNTc5
ZGZjYzFjYTY1YmYyNDg0MDFiNGRlZTY5OTQwOC4uYTdjZTg2MmJjYjQ1YmQ1OTkyN2UxMDFkODFm
YWQ0Y2FlMDU5NmVlMSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9EaWFnbm9zdGljc0Jhc2UuY3BwCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NCYXNlLmNw
cApAQCAtMjUsMTQgKzI1LDE0IEBAIHZvaWQgRGlhZ25vc3RpY3M6OnJlcG9ydChJRCBpZCwKIAog
RGlhZ25vc3RpY3M6OlNldmVyaXR5IERpYWdub3N0aWNzOjpzZXZlcml0eShJRCBpZCkKIHsKLSAg
ICBpZiAoKGlkID4gRVJST1JfQkVHSU4pICYmIChpZCA8IEVSUk9SX0VORCkpCi0gICAgICAgIHJl
dHVybiBFUlJPUjsKKyAgICBpZiAoKGlkID4gUFBfRVJST1JfQkVHSU4pICYmIChpZCA8IFBQX0VS
Uk9SX0VORCkpCisgICAgICAgIHJldHVybiBQUF9FUlJPUjsKIAotICAgIGlmICgoaWQgPiBXQVJO
SU5HX0JFR0lOKSAmJiAoaWQgPCBXQVJOSU5HX0VORCkpCi0gICAgICAgIHJldHVybiBXQVJOSU5H
OworICAgIGlmICgoaWQgPiBQUF9XQVJOSU5HX0JFR0lOKSAmJiAoaWQgPCBQUF9XQVJOSU5HX0VO
RCkpCisgICAgICAgIHJldHVybiBQUF9XQVJOSU5HOwogCiAgICAgYXNzZXJ0KGZhbHNlKTsKLSAg
ICByZXR1cm4gRVJST1I7CisgICAgcmV0dXJuIFBQX0VSUk9SOwogfQogCiBzdGQ6OnN0cmluZyBE
aWFnbm9zdGljczo6bWVzc2FnZShJRCBpZCkKQEAgLTQwLDgyICs0MCw4MiBAQCBzdGQ6OnN0cmlu
ZyBEaWFnbm9zdGljczo6bWVzc2FnZShJRCBpZCkKICAgICBzd2l0Y2ggKGlkKQogICAgIHsKICAg
ICAgIC8vIEVycm9ycyBiZWdpbi4KLSAgICAgIGNhc2UgSU5URVJOQUxfRVJST1I6CisgICAgICBj
YXNlIFBQX0lOVEVSTkFMX0VSUk9SOgogICAgICAgICAgIHJldHVybiAiaW50ZXJuYWwgZXJyb3Ii
OwotICAgICAgY2FzZSBPVVRfT0ZfTUVNT1JZOgorICAgICAgY2FzZSBQUF9PVVRfT0ZfTUVNT1JZ
OgogICAgICAgICAgIHJldHVybiAib3V0IG9mIG1lbW9yeSI7Ci0gICAgICBjYXNlIElOVkFMSURf
Q0hBUkFDVEVSOgorICAgICAgY2FzZSBQUF9JTlZBTElEX0NIQVJBQ1RFUjoKICAgICAgICAgICBy
ZXR1cm4gImludmFsaWQgY2hhcmFjdGVyIjsKLSAgICAgIGNhc2UgSU5WQUxJRF9OVU1CRVI6Cisg
ICAgICBjYXNlIFBQX0lOVkFMSURfTlVNQkVSOgogICAgICAgICAgIHJldHVybiAiaW52YWxpZCBu
dW1iZXIiOwotICAgICAgY2FzZSBJTlRFR0VSX09WRVJGTE9XOgorICAgICAgY2FzZSBQUF9JTlRF
R0VSX09WRVJGTE9XOgogICAgICAgICAgIHJldHVybiAiaW50ZWdlciBvdmVyZmxvdyI7Ci0gICAg
ICBjYXNlIEZMT0FUX09WRVJGTE9XOgorICAgICAgY2FzZSBQUF9GTE9BVF9PVkVSRkxPVzoKICAg
ICAgICAgICByZXR1cm4gImZsb2F0IG92ZXJmbG93IjsKLSAgICAgIGNhc2UgVE9LRU5fVE9PX0xP
Tkc6CisgICAgICBjYXNlIFBQX1RPS0VOX1RPT19MT05HOgogICAgICAgICAgIHJldHVybiAidG9r
ZW4gdG9vIGxvbmciOwotICAgICAgY2FzZSBJTlZBTElEX0VYUFJFU1NJT046CisgICAgICBjYXNl
IFBQX0lOVkFMSURfRVhQUkVTU0lPTjoKICAgICAgICAgICByZXR1cm4gImludmFsaWQgZXhwcmVz
c2lvbiI7Ci0gICAgICBjYXNlIERJVklTSU9OX0JZX1pFUk86CisgICAgICBjYXNlIFBQX0RJVklT
SU9OX0JZX1pFUk86CiAgICAgICAgICAgcmV0dXJuICJkaXZpc2lvbiBieSB6ZXJvIjsKLSAgICAg
IGNhc2UgRU9GX0lOX0NPTU1FTlQ6CisgICAgICBjYXNlIFBQX0VPRl9JTl9DT01NRU5UOgogICAg
ICAgICAgIHJldHVybiAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSBmb3VuZCBpbiBjb21tZW50IjsK
LSAgICAgIGNhc2UgVU5FWFBFQ1RFRF9UT0tFTjoKKyAgICAgIGNhc2UgUFBfVU5FWFBFQ1RFRF9U
T0tFTjoKICAgICAgICAgICByZXR1cm4gInVuZXhwZWN0ZWQgdG9rZW4iOwotICAgICAgY2FzZSBE
SVJFQ1RJVkVfSU5WQUxJRF9OQU1FOgorICAgICAgY2FzZSBQUF9ESVJFQ1RJVkVfSU5WQUxJRF9O
QU1FOgogICAgICAgICAgIHJldHVybiAiaW52YWxpZCBkaXJlY3RpdmUgbmFtZSI7Ci0gICAgICBj
YXNlIE1BQ1JPX05BTUVfUkVTRVJWRUQ6CisgICAgICBjYXNlIFBQX01BQ1JPX05BTUVfUkVTRVJW
RUQ6CiAgICAgICAgICAgcmV0dXJuICJtYWNybyBuYW1lIGlzIHJlc2VydmVkIjsKLSAgICAgIGNh
c2UgTUFDUk9fUkVERUZJTkVEOgorICAgICAgY2FzZSBQUF9NQUNST19SRURFRklORUQ6CiAgICAg
ICAgICAgcmV0dXJuICJtYWNybyByZWRlZmluZWQiOwotICAgICAgY2FzZSBNQUNST19QUkVERUZJ
TkVEX1JFREVGSU5FRDoKKyAgICAgIGNhc2UgUFBfTUFDUk9fUFJFREVGSU5FRF9SRURFRklORUQ6
CiAgICAgICAgICAgcmV0dXJuICJwcmVkZWZpbmVkIG1hY3JvIHJlZGVmaW5lZCI7Ci0gICAgICBj
YXNlIE1BQ1JPX1BSRURFRklORURfVU5ERUZJTkVEOgorICAgICAgY2FzZSBQUF9NQUNST19QUkVE
RUZJTkVEX1VOREVGSU5FRDoKICAgICAgICAgICByZXR1cm4gInByZWRlZmluZWQgbWFjcm8gdW5k
ZWZpbmVkIjsKLSAgICAgIGNhc2UgTUFDUk9fVU5URVJNSU5BVEVEX0lOVk9DQVRJT046CisgICAg
ICBjYXNlIFBQX01BQ1JPX1VOVEVSTUlOQVRFRF9JTlZPQ0FUSU9OOgogICAgICAgICAgIHJldHVy
biAidW50ZXJtaW5hdGVkIG1hY3JvIGludm9jYXRpb24iOwotICAgICAgY2FzZSBNQUNST19UT09f
RkVXX0FSR1M6CisgICAgICBjYXNlIFBQX01BQ1JPX1RPT19GRVdfQVJHUzoKICAgICAgICAgICBy
ZXR1cm4gIk5vdCBlbm91Z2ggYXJndW1lbnRzIGZvciBtYWNybyI7Ci0gICAgICBjYXNlIE1BQ1JP
X1RPT19NQU5ZX0FSR1M6CisgICAgICBjYXNlIFBQX01BQ1JPX1RPT19NQU5ZX0FSR1M6CiAgICAg
ICAgICAgcmV0dXJuICJUb28gbWFueSBhcmd1bWVudHMgZm9yIG1hY3JvIjsKLSAgICAgIGNhc2Ug
Q09ORElUSU9OQUxfRU5ESUZfV0lUSE9VVF9JRjoKKyAgICAgIGNhc2UgUFBfQ09ORElUSU9OQUxf
RU5ESUZfV0lUSE9VVF9JRjoKICAgICAgICAgICByZXR1cm4gInVuZXhwZWN0ZWQgI2VuZGlmIGZv
dW5kIHdpdGhvdXQgYSBtYXRjaGluZyAjaWYiOwotICAgICAgY2FzZSBDT05ESVRJT05BTF9FTFNF
X1dJVEhPVVRfSUY6CisgICAgICBjYXNlIFBQX0NPTkRJVElPTkFMX0VMU0VfV0lUSE9VVF9JRjoK
ICAgICAgICAgICByZXR1cm4gInVuZXhwZWN0ZWQgI2Vsc2UgZm91bmQgd2l0aG91dCBhIG1hdGNo
aW5nICNpZiI7Ci0gICAgICBjYXNlIENPTkRJVElPTkFMX0VMU0VfQUZURVJfRUxTRToKKyAgICAg
IGNhc2UgUFBfQ09ORElUSU9OQUxfRUxTRV9BRlRFUl9FTFNFOgogICAgICAgICAgIHJldHVybiAi
dW5leHBlY3RlZCAjZWxzZSBmb3VuZCBhZnRlciBhbm90aGVyICNlbHNlIjsKLSAgICAgIGNhc2Ug
Q09ORElUSU9OQUxfRUxJRl9XSVRIT1VUX0lGOgorICAgICAgY2FzZSBQUF9DT05ESVRJT05BTF9F
TElGX1dJVEhPVVRfSUY6CiAgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkICNlbGlmIGZvdW5k
IHdpdGhvdXQgYSBtYXRjaGluZyAjaWYiOwotICAgICAgY2FzZSBDT05ESVRJT05BTF9FTElGX0FG
VEVSX0VMU0U6CisgICAgICBjYXNlIFBQX0NPTkRJVElPTkFMX0VMSUZfQUZURVJfRUxTRToKICAg
ICAgICAgICByZXR1cm4gInVuZXhwZWN0ZWQgI2VsaWYgZm91bmQgYWZ0ZXIgI2Vsc2UiOwotICAg
ICAgY2FzZSBDT05ESVRJT05BTF9VTlRFUk1JTkFURUQ6CisgICAgICBjYXNlIFBQX0NPTkRJVElP
TkFMX1VOVEVSTUlOQVRFRDoKICAgICAgICAgICByZXR1cm4gInVuZXhwZWN0ZWQgZW5kIG9mIGZp
bGUgZm91bmQgaW4gY29uZGl0aW9uYWwgYmxvY2siOwotICAgICAgY2FzZSBJTlZBTElEX0VYVEVO
U0lPTl9OQU1FOgorICAgICAgY2FzZSBQUF9JTlZBTElEX0VYVEVOU0lPTl9OQU1FOgogICAgICAg
ICAgIHJldHVybiAiaW52YWxpZCBleHRlbnNpb24gbmFtZSI7Ci0gICAgICBjYXNlIElOVkFMSURf
RVhURU5TSU9OX0JFSEFWSU9SOgorICAgICAgY2FzZSBQUF9JTlZBTElEX0VYVEVOU0lPTl9CRUhB
VklPUjoKICAgICAgICAgICByZXR1cm4gImludmFsaWQgZXh0ZW5zaW9uIGJlaGF2aW9yIjsKLSAg
ICAgIGNhc2UgSU5WQUxJRF9FWFRFTlNJT05fRElSRUNUSVZFOgorICAgICAgY2FzZSBQUF9JTlZB
TElEX0VYVEVOU0lPTl9ESVJFQ1RJVkU6CiAgICAgICAgICAgcmV0dXJuICJpbnZhbGlkIGV4dGVu
c2lvbiBkaXJlY3RpdmUiOwotICAgICAgY2FzZSBJTlZBTElEX1ZFUlNJT05fTlVNQkVSOgorICAg
ICAgY2FzZSBQUF9JTlZBTElEX1ZFUlNJT05fTlVNQkVSOgogICAgICAgICAgIHJldHVybiAiaW52
YWxpZCB2ZXJzaW9uIG51bWJlciI7Ci0gICAgICBjYXNlIElOVkFMSURfVkVSU0lPTl9ESVJFQ1RJ
VkU6CisgICAgICBjYXNlIFBQX0lOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkU6CiAgICAgICAgICAg
cmV0dXJuICJpbnZhbGlkIHZlcnNpb24gZGlyZWN0aXZlIjsKLSAgICAgIGNhc2UgVkVSU0lPTl9O
T1RfRklSU1RfU1RBVEVNRU5UOgorICAgICAgY2FzZSBQUF9WRVJTSU9OX05PVF9GSVJTVF9TVEFU
RU1FTlQ6CiAgICAgICAgIHJldHVybiAiI3ZlcnNpb24gZGlyZWN0aXZlIG11c3Qgb2NjdXIgYmVm
b3JlIGFueXRoaW5nIGVsc2UsICIKICAgICAgICAgICAgICAgICJleGNlcHQgZm9yIGNvbW1lbnRz
IGFuZCB3aGl0ZSBzcGFjZSI7Ci0gICAgICBjYXNlIElOVkFMSURfTElORV9OVU1CRVI6CisgICAg
ICBjYXNlIFBQX0lOVkFMSURfTElORV9OVU1CRVI6CiAgICAgICAgICAgcmV0dXJuICJpbnZhbGlk
IGxpbmUgbnVtYmVyIjsKLSAgICAgIGNhc2UgSU5WQUxJRF9GSUxFX05VTUJFUjoKKyAgICAgIGNh
c2UgUFBfSU5WQUxJRF9GSUxFX05VTUJFUjoKICAgICAgICAgICByZXR1cm4gImludmFsaWQgZmls
ZSBudW1iZXIiOwotICAgICAgY2FzZSBJTlZBTElEX0xJTkVfRElSRUNUSVZFOgorICAgICAgY2Fz
ZSBQUF9JTlZBTElEX0xJTkVfRElSRUNUSVZFOgogICAgICAgICAgIHJldHVybiAiaW52YWxpZCBs
aW5lIGRpcmVjdGl2ZSI7CiAgICAgICAvLyBFcnJvcnMgZW5kLgogICAgICAgLy8gV2FybmluZ3Mg
YmVnaW4uCi0gICAgICBjYXNlIEVPRl9JTl9ESVJFQ1RJVkU6CisgICAgICBjYXNlIFBQX0VPRl9J
Tl9ESVJFQ1RJVkU6CiAgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIGZv
dW5kIGluIGRpcmVjdGl2ZSI7Ci0gICAgICBjYXNlIENPTkRJVElPTkFMX1VORVhQRUNURURfVE9L
RU46CisgICAgICBjYXNlIFBQX0NPTkRJVElPTkFMX1VORVhQRUNURURfVE9LRU46CiAgICAgICAg
ICAgcmV0dXJuICJ1bmV4cGVjdGVkIHRva2VuIGFmdGVyIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24i
OwotICAgICAgY2FzZSBVTlJFQ09HTklaRURfUFJBR01BOgorICAgICAgY2FzZSBQUF9VTlJFQ09H
TklaRURfUFJBR01BOgogICAgICAgICAgIHJldHVybiAidW5yZWNvZ25pemVkIHByYWdtYSI7CiAg
ICAgICAvLyBXYXJuaW5ncyBlbmQuCiAgICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaWFnbm9zdGljc0Jh
c2UuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
RGlhZ25vc3RpY3NCYXNlLmgKaW5kZXggMDdiYzQxMTg0NjQyYTNkYzc0MmVmNGRmNDZkZjJlNDRl
ZTZlMjY0OS4uMmM4YzUzOTEzN2I5NmE3Njk2MTUxYjNjZjA3YzUwYTk0MDc0MmJhMSAxMDA2NDQK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9E
aWFnbm9zdGljc0Jhc2UuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL0RpYWdub3N0aWNzQmFzZS5oCkBAIC0yMSw1MyArMjEsNTMgQEAgY2xh
c3MgRGlhZ25vc3RpY3MKICAgcHVibGljOgogICAgIGVudW0gU2V2ZXJpdHkKICAgICB7Ci0gICAg
ICAgIEVSUk9SLAotICAgICAgICBXQVJOSU5HCisgICAgICAgIFBQX0VSUk9SLAorICAgICAgICBQ
UF9XQVJOSU5HCiAgICAgfTsKICAgICBlbnVtIElECiAgICAgewotICAgICAgICBFUlJPUl9CRUdJ
TiwKLSAgICAgICAgSU5URVJOQUxfRVJST1IsCi0gICAgICAgIE9VVF9PRl9NRU1PUlksCi0gICAg
ICAgIElOVkFMSURfQ0hBUkFDVEVSLAotICAgICAgICBJTlZBTElEX05VTUJFUiwKLSAgICAgICAg
SU5URUdFUl9PVkVSRkxPVywKLSAgICAgICAgRkxPQVRfT1ZFUkZMT1csCi0gICAgICAgIFRPS0VO
X1RPT19MT05HLAotICAgICAgICBJTlZBTElEX0VYUFJFU1NJT04sCi0gICAgICAgIERJVklTSU9O
X0JZX1pFUk8sCi0gICAgICAgIEVPRl9JTl9DT01NRU5ULAotICAgICAgICBVTkVYUEVDVEVEX1RP
S0VOLAotICAgICAgICBESVJFQ1RJVkVfSU5WQUxJRF9OQU1FLAotICAgICAgICBNQUNST19OQU1F
X1JFU0VSVkVELAotICAgICAgICBNQUNST19SRURFRklORUQsCi0gICAgICAgIE1BQ1JPX1BSRURF
RklORURfUkVERUZJTkVELAotICAgICAgICBNQUNST19QUkVERUZJTkVEX1VOREVGSU5FRCwKLSAg
ICAgICAgTUFDUk9fVU5URVJNSU5BVEVEX0lOVk9DQVRJT04sCi0gICAgICAgIE1BQ1JPX1RPT19G
RVdfQVJHUywKLSAgICAgICAgTUFDUk9fVE9PX01BTllfQVJHUywKLSAgICAgICAgQ09ORElUSU9O
QUxfRU5ESUZfV0lUSE9VVF9JRiwKLSAgICAgICAgQ09ORElUSU9OQUxfRUxTRV9XSVRIT1VUX0lG
LAotICAgICAgICBDT05ESVRJT05BTF9FTFNFX0FGVEVSX0VMU0UsCi0gICAgICAgIENPTkRJVElP
TkFMX0VMSUZfV0lUSE9VVF9JRiwKLSAgICAgICAgQ09ORElUSU9OQUxfRUxJRl9BRlRFUl9FTFNF
LAotICAgICAgICBDT05ESVRJT05BTF9VTlRFUk1JTkFURUQsCi0gICAgICAgIElOVkFMSURfRVhU
RU5TSU9OX05BTUUsCi0gICAgICAgIElOVkFMSURfRVhURU5TSU9OX0JFSEFWSU9SLAotICAgICAg
ICBJTlZBTElEX0VYVEVOU0lPTl9ESVJFQ1RJVkUsCi0gICAgICAgIElOVkFMSURfVkVSU0lPTl9O
VU1CRVIsCi0gICAgICAgIElOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkUsCi0gICAgICAgIFZFUlNJ
T05fTk9UX0ZJUlNUX1NUQVRFTUVOVCwKLSAgICAgICAgSU5WQUxJRF9MSU5FX05VTUJFUiwKLSAg
ICAgICAgSU5WQUxJRF9GSUxFX05VTUJFUiwKLSAgICAgICAgSU5WQUxJRF9MSU5FX0RJUkVDVElW
RSwKLSAgICAgICAgRVJST1JfRU5ELAorICAgICAgICBQUF9FUlJPUl9CRUdJTiwKKyAgICAgICAg
UFBfSU5URVJOQUxfRVJST1IsCisgICAgICAgIFBQX09VVF9PRl9NRU1PUlksCisgICAgICAgIFBQ
X0lOVkFMSURfQ0hBUkFDVEVSLAorICAgICAgICBQUF9JTlZBTElEX05VTUJFUiwKKyAgICAgICAg
UFBfSU5URUdFUl9PVkVSRkxPVywKKyAgICAgICAgUFBfRkxPQVRfT1ZFUkZMT1csCisgICAgICAg
IFBQX1RPS0VOX1RPT19MT05HLAorICAgICAgICBQUF9JTlZBTElEX0VYUFJFU1NJT04sCisgICAg
ICAgIFBQX0RJVklTSU9OX0JZX1pFUk8sCisgICAgICAgIFBQX0VPRl9JTl9DT01NRU5ULAorICAg
ICAgICBQUF9VTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICBQUF9ESVJFQ1RJVkVfSU5WQUxJRF9O
QU1FLAorICAgICAgICBQUF9NQUNST19OQU1FX1JFU0VSVkVELAorICAgICAgICBQUF9NQUNST19S
RURFRklORUQsCisgICAgICAgIFBQX01BQ1JPX1BSRURFRklORURfUkVERUZJTkVELAorICAgICAg
ICBQUF9NQUNST19QUkVERUZJTkVEX1VOREVGSU5FRCwKKyAgICAgICAgUFBfTUFDUk9fVU5URVJN
SU5BVEVEX0lOVk9DQVRJT04sCisgICAgICAgIFBQX01BQ1JPX1RPT19GRVdfQVJHUywKKyAgICAg
ICAgUFBfTUFDUk9fVE9PX01BTllfQVJHUywKKyAgICAgICAgUFBfQ09ORElUSU9OQUxfRU5ESUZf
V0lUSE9VVF9JRiwKKyAgICAgICAgUFBfQ09ORElUSU9OQUxfRUxTRV9XSVRIT1VUX0lGLAorICAg
ICAgICBQUF9DT05ESVRJT05BTF9FTFNFX0FGVEVSX0VMU0UsCisgICAgICAgIFBQX0NPTkRJVElP
TkFMX0VMSUZfV0lUSE9VVF9JRiwKKyAgICAgICAgUFBfQ09ORElUSU9OQUxfRUxJRl9BRlRFUl9F
TFNFLAorICAgICAgICBQUF9DT05ESVRJT05BTF9VTlRFUk1JTkFURUQsCisgICAgICAgIFBQX0lO
VkFMSURfRVhURU5TSU9OX05BTUUsCisgICAgICAgIFBQX0lOVkFMSURfRVhURU5TSU9OX0JFSEFW
SU9SLAorICAgICAgICBQUF9JTlZBTElEX0VYVEVOU0lPTl9ESVJFQ1RJVkUsCisgICAgICAgIFBQ
X0lOVkFMSURfVkVSU0lPTl9OVU1CRVIsCisgICAgICAgIFBQX0lOVkFMSURfVkVSU0lPTl9ESVJF
Q1RJVkUsCisgICAgICAgIFBQX1ZFUlNJT05fTk9UX0ZJUlNUX1NUQVRFTUVOVCwKKyAgICAgICAg
UFBfSU5WQUxJRF9MSU5FX05VTUJFUiwKKyAgICAgICAgUFBfSU5WQUxJRF9GSUxFX05VTUJFUiwK
KyAgICAgICAgUFBfSU5WQUxJRF9MSU5FX0RJUkVDVElWRSwKKyAgICAgICAgUFBfRVJST1JfRU5E
LAogCi0gICAgICAgIFdBUk5JTkdfQkVHSU4sCi0gICAgICAgIEVPRl9JTl9ESVJFQ1RJVkUsCi0g
ICAgICAgIENPTkRJVElPTkFMX1VORVhQRUNURURfVE9LRU4sCi0gICAgICAgIFVOUkVDT0dOSVpF
RF9QUkFHTUEsCi0gICAgICAgIFdBUk5JTkdfRU5ECisgICAgICAgIFBQX1dBUk5JTkdfQkVHSU4s
CisgICAgICAgIFBQX0VPRl9JTl9ESVJFQ1RJVkUsCisgICAgICAgIFBQX0NPTkRJVElPTkFMX1VO
RVhQRUNURURfVE9LRU4sCisgICAgICAgIFBQX1VOUkVDT0dOSVpFRF9QUkFHTUEsCisgICAgICAg
IFBQX1dBUk5JTkdfRU5ECiAgICAgfTsKIAogICAgIHZpcnR1YWwgfkRpYWdub3N0aWNzKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL0RpcmVjdGl2ZVBhcnNlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZVBhcnNlci5jcHAKaW5kZXggOTRkZmRmNTEzZDc1
NTM4NGM1ZjVhMWFlNWNiNjMxNjU4NGM0NjBhMy4uZWJlYzc5ODA0ZGNlZjgzNmE0YjQyZjk2NDQ3
MjM2YzcxNjM0NzAyMSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFyc2VyLmNw
cApAQCAtMTcyLDcgKzE3Miw3IEBAIGNsYXNzIERlZmluZWRQYXJzZXIgOiBwdWJsaWMgTGV4ZXIK
IAogICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVD
VEVEX1RPS0VOLAorICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OlBQX1VORVhQRUNURURfVE9LRU4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgICAgIHNraXBVbnRpbEVPRCht
TGV4ZXIsIHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE4NSw3ICsxODUsNyBAQCBj
bGFzcyBEZWZpbmVkUGFyc2VyIDogcHVibGljIExleGVyCiAgICAgICAgICAgICBtTGV4ZXItPmxl
eCh0b2tlbik7CiAgICAgICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gJyknKQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpV
TkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERp
YWdub3N0aWNzOjpQUF9VTkVYUEVDVEVEX1RPS0VOLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICAgICAg
ICAgIHNraXBVbnRpbEVPRChtTGV4ZXIsIHRva2VuKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CkBAIC0yMzMsNyArMjMzLDcgQEAgdm9pZCBEaXJlY3RpdmVQYXJzZXI6OmxleChUb2tlbiogdG9r
ZW4pCiAgICAgICAgICAgICBpZiAoIW1Db25kaXRpb25hbFN0YWNrLmVtcHR5KCkpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgY29uc3QgQ29uZGl0aW9uYWxCbG9jayYgYmxvY2sgPSBt
Q29uZGl0aW9uYWxTdGFjay5iYWNrKCk7Ci0gICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5y
ZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX1VOVEVSTUlOQVRFRCwKKyAgICAgICAgICAg
ICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfQ09ORElUSU9OQUxfVU5U
RVJNSU5BVEVELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLmxv
Y2F0aW9uLCBibG9jay50eXBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMjY4LDcgKzI2OCw3IEBAIHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZURpcmVjdGl2ZShU
b2tlbiogdG9rZW4pCiAgICAgc3dpdGNoKGRpcmVjdGl2ZSkKICAgICB7CiAgICAgICBjYXNlIERJ
UkVDVElWRV9OT05FOgotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6
RElSRUNUSVZFX0lOVkFMSURfTkFNRSwKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6OlBQX0RJUkVDVElWRV9JTlZBTElEX05BTUUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICBza2lwVW50
aWxFT0QobVRva2VuaXplciwgdG9rZW4pOwogICAgICAgICBicmVhazsKQEAgLTMxOSw3ICszMTks
NyBAQCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VEaXJlY3RpdmUoVG9rZW4qIHRva2VuKQog
ICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CiAgICAgaWYgKHRva2VuLT50eXBl
ID09IFRva2VuOjpMQVNUKQogICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6OkVPRl9JTl9ESVJFQ1RJVkUsCisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0
KERpYWdub3N0aWNzOjpQUF9FT0ZfSU5fRElSRUNUSVZFLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICB9CiB9CkBAIC0zMzEs
MTkgKzMzMSwxOSBAQCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VEZWZpbmUoVG9rZW4qIHRv
a2VuKQogICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CiAgICAgaWYgKHRva2VuLT50eXBlICE9
IFRva2VuOjpJREVOVElGSUVSKQogICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQo
RGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVw
b3J0KERpYWdub3N0aWNzOjpQUF9VTkVYUEVDVEVEX1RPS0VOLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBpZiAoaXNNYWNyb1ByZWRlZmluZWQodG9rZW4tPnRleHQsICptTWFjcm9T
ZXQpKQogICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1B
Q1JPX1BSRURFRklORURfUkVERUZJTkVELAorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6UFBfTUFDUk9fUFJFREVGSU5FRF9SRURFRklORUQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGlmIChpc01hY3JvTmFtZVJlc2VydmVkKHRva2VuLT50ZXh0KSkK
ICAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19O
QU1FX1JFU0VSVkVELAorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6
UFBfTUFDUk9fTkFNRV9SRVNFUlZFRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0z
NjgsNyArMzY4LDcgQEAgdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGVmaW5lKFRva2VuKiB0
b2tlbikKIAogICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gJyknKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tF
TiwKKyAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9VTkVY
UEVDVEVEX1RPS0VOLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxv
Y2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPnRleHQpOwog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzk2LDcgKzM5Niw3IEBAIHZvaWQgRGlyZWN0aXZlUGFy
c2VyOjpwYXJzZURlZmluZShUb2tlbiogdG9rZW4pCiAgICAgTWFjcm9TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGl0ZXIgPSBtTWFjcm9TZXQtPmZpbmQobWFjcm8ubmFtZSk7CiAgICAgaWYgKGl0ZXIgIT0g
bU1hY3JvU2V0LT5lbmQoKSAmJiAhbWFjcm8uZXF1YWxzKGl0ZXItPnNlY29uZCkpCiAgICAgewot
ICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6TUFDUk9fUkVERUZJTkVE
LAorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfTUFDUk9fUkVE
RUZJTkVELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY3JvLm5hbWUpOwogICAgICAgICByZXR1cm47
CkBAIC00MTEsNyArNDExLDcgQEAgdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVW5kZWYoVG9r
ZW4qIHRva2VuKQogICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CiAgICAgaWYgKHRva2VuLT50
eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQogICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5y
ZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9VTkVYUEVDVEVEX1RPS0VOLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTQyMSw3ICs0MjEsNyBAQCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6
cGFyc2VVbmRlZihUb2tlbiogdG9rZW4pCiAgICAgewogICAgICAgICBpZiAoaXRlci0+c2Vjb25k
LnByZWRlZmluZWQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0
KERpYWdub3N0aWNzOjpNQUNST19QUkVERUZJTkVEX1VOREVGSU5FRCwKKyAgICAgICAgICAgIG1E
aWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9NQUNST19QUkVERUZJTkVEX1VOREVG
SU5FRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwg
dG9rZW4tPnRleHQpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKQEAgLTQ1Nyw3ICs0NTcsNyBA
QCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFbHNlKFRva2VuKiB0b2tlbikKIAogICAgIGlm
IChtQ29uZGl0aW9uYWxTdGFjay5lbXB0eSgpKQogICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNz
LT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX0VMU0VfV0lUSE9VVF9JRiwKKyAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX0NPTkRJVElPTkFMX0VMU0Vf
V0lUSE9VVF9JRiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9u
LCB0b2tlbi0+dGV4dCk7CiAgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7
CiAgICAgICAgIHJldHVybjsKQEAgLTQ3Miw3ICs0NzIsNyBAQCB2b2lkIERpcmVjdGl2ZVBhcnNl
cjo6cGFyc2VFbHNlKFRva2VuKiB0b2tlbikKICAgICB9CiAgICAgaWYgKGJsb2NrLmZvdW5kRWxz
ZUdyb3VwKQogICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OkNPTkRJVElPTkFMX0VMU0VfQUZURVJfRUxTRSwKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBv
cnQoRGlhZ25vc3RpY3M6OlBQX0NPTkRJVElPTkFMX0VMU0VfQUZURVJfRUxTRSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAg
ICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CiAgICAgICAgIHJldHVybjsKQEAg
LTQ4Niw3ICs0ODYsNyBAQCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFbHNlKFRva2VuKiB0
b2tlbikKICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwogICAgIGlmICghaXNFT0QodG9rZW4p
KQogICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJ
VElPTkFMX1VORVhQRUNURURfVE9LRU4sCisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERp
YWdub3N0aWNzOjpQUF9DT05ESVRJT05BTF9VTkVYUEVDVEVEX1RPS0VOLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAg
c2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKICAgICB9CkBAIC00OTgsNyArNDk4LDcg
QEAgdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxpZihUb2tlbiogdG9rZW4pCiAKICAgICBp
ZiAobUNvbmRpdGlvbmFsU3RhY2suZW1wdHkoKSkKICAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9FTElGX1dJVEhPVVRfSUYsCisgICAg
ICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9DT05ESVRJT05BTF9FTElG
X1dJVEhPVVRfSUYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwgdG9rZW4tPnRleHQpOwogICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4p
OwogICAgICAgICByZXR1cm47CkBAIC01MTMsNyArNTEzLDcgQEAgdm9pZCBEaXJlY3RpdmVQYXJz
ZXI6OnBhcnNlRWxpZihUb2tlbiogdG9rZW4pCiAgICAgfQogICAgIGlmIChibG9jay5mb3VuZEVs
c2VHcm91cCkKICAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNz
OjpDT05ESVRJT05BTF9FTElGX0FGVEVSX0VMU0UsCisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVw
b3J0KERpYWdub3N0aWNzOjpQUF9DT05ESVRJT05BTF9FTElGX0FGVEVSX0VMU0UsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAg
ICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOwogICAgICAgICByZXR1cm47CkBA
IC01MzgsNyArNTM4LDcgQEAgdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRW5kaWYoVG9rZW4q
IHRva2VuKQogCiAgICAgaWYgKG1Db25kaXRpb25hbFN0YWNrLmVtcHR5KCkpCiAgICAgewotICAg
ICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfRU5ESUZf
V0lUSE9VVF9JRiwKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQ
X0NPTkRJVElPTkFMX0VORElGX1dJVEhPVVRfSUYsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICBza2lwVW50aWxFT0Qo
bVRva2VuaXplciwgdG9rZW4pOwogICAgICAgICByZXR1cm47CkBAIC01NTAsNyArNTUwLDcgQEAg
dm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRW5kaWYoVG9rZW4qIHRva2VuKQogICAgIG1Ub2tl
bml6ZXItPmxleCh0b2tlbik7CiAgICAgaWYgKCFpc0VPRCh0b2tlbikpCiAgICAgewotICAgICAg
ICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfVU5FWFBFQ1RF
RF9UT0tFTiwKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX0NP
TkRJVElPTkFMX1VORVhQRUNURURfVE9LRU4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICBza2lwVW50aWxFT0QobVRv
a2VuaXplciwgdG9rZW4pOwogICAgIH0KQEAgLTYxOCw3ICs2MTgsNyBAQCB2b2lkIERpcmVjdGl2
ZVBhcnNlcjo6cGFyc2VQcmFnbWEoVG9rZW4qIHRva2VuKQogICAgICAgICAgICAgICAgICAgICAg
IChzdGF0ZSA9PSBSSUdIVF9QQVJFTiArIDEpKTsgIC8vIFdpdGggdmFsdWUuCiAgICAgaWYgKCF2
YWxpZCkKICAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpV
TlJFQ09HTklaRURfUFJBR01BLAorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6UFBfVU5SRUNPR05JWkVEX1BSQUdNQSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4tPmxvY2F0aW9uLCBuYW1lKTsKICAgICB9CiAgICAgZWxzZSBpZiAoc3RhdGUgPiBQ
UkFHTUFfTkFNRSkgIC8vIERvIG5vdCBub3RpZnkgZm9yIGVtcHR5IHByYWdtYS4KQEAgLTY1MCw3
ICs2NTAsNyBAQCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFeHRlbnNpb24oVG9rZW4qIHRv
a2VuKQogICAgICAgICAgIGNhc2UgRVhUX05BTUU6CiAgICAgICAgICAgICBpZiAodmFsaWQgJiYg
KHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKSkKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9FWFRF
TlNJT05fTkFNRSwKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6UFBfSU5WQUxJRF9FWFRFTlNJT05fTkFNRSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgICAg
ICAgICB2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgfQpAQCAtNjU5LDcgKzY1OSw3IEBAIHZv
aWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4dGVuc2lvbihUb2tlbiogdG9rZW4pCiAgICAgICAg
ICAgY2FzZSBDT0xPTjoKICAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0g
JzonKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfVU5FWFBFQ1RFRF9UT0tFTiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0
KTsKICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgfQpAQCAtNjY3
LDcgKzY2Nyw3IEBAIHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4dGVuc2lvbihUb2tlbiog
dG9rZW4pCiAgICAgICAgICAgY2FzZSBFWFRfQkVIQVZJT1I6CiAgICAgICAgICAgICBpZiAodmFs
aWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKSkKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJ
RF9FWFRFTlNJT05fQkVIQVZJT1IsCisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBv
cnQoRGlhZ25vc3RpY3M6OlBQX0lOVkFMSURfRVhURU5TSU9OX0JFSEFWSU9SLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQp
OwogICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICB9CkBAIC02NzYs
NyArNjc2LDcgQEAgdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXh0ZW5zaW9uKFRva2VuKiB0
b2tlbikKICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgaWYgKHZhbGlkKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNz
OjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0
KERpYWdub3N0aWNzOjpQUF9VTkVYUEVDVEVEX1RPS0VOLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICAg
ICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICB9CkBAIC02ODYsNyArNjg2LDcgQEAg
dm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXh0ZW5zaW9uKFRva2VuKiB0b2tlbikKICAgICB9
CiAgICAgaWYgKHZhbGlkICYmIChzdGF0ZSAhPSBFWFRfQkVIQVZJT1IgKyAxKSkKICAgICB7Ci0g
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0VYVEVOU0lP
Tl9ESVJFQ1RJVkUsCisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQ
UF9JTlZBTElEX0VYVEVOU0lPTl9ESVJFQ1RJVkUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICB2YWxpZCA9IGZhbHNl
OwogICAgIH0KQEAgLTcwMCw3ICs3MDAsNyBAQCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VW
ZXJzaW9uKFRva2VuKiB0b2tlbikKIAogICAgIGlmIChtUGFzdEZpcnN0U3RhdGVtZW50KQogICAg
IHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlZFUlNJT05fTk9U
X0ZJUlNUX1NUQVRFTUVOVCwKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6OlBQX1ZFUlNJT05fTk9UX0ZJUlNUX1NUQVRFTUVOVCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgIHNraXBVbnRp
bEVPRChtVG9rZW5pemVyLCB0b2tlbik7CiAgICAgICAgIHJldHVybjsKQEAgLTcyMywxMyArNzIz
LDEzIEBAIHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZVZlcnNpb24oVG9rZW4qIHRva2VuKQog
ICAgICAgICAgIGNhc2UgVkVSU0lPTl9OVU1CRVI6CiAgICAgICAgICAgICBpZiAodmFsaWQgJiYg
KHRva2VuLT50eXBlICE9IFRva2VuOjpDT05TVF9JTlQpKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX1ZFUlNJ
T05fTlVNQkVSLAorICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpQUF9JTlZBTElEX1ZFUlNJT05fTlVNQkVSLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICAgICAg
ICAgIHZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAodmFsaWQg
JiYgIXRva2VuLT5pVmFsdWUoJnZlcnNpb24pKQogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlRFR0VSX09WRVJGTE9XLAor
ICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9JTlRF
R0VSX09WRVJGTE9XLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
LT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7
CiAgICAgICAgICAgICB9CkBAIC03MzcsNyArNzM3LDcgQEAgdm9pZCBEaXJlY3RpdmVQYXJzZXI6
OnBhcnNlVmVyc2lvbihUb2tlbiogdG9rZW4pCiAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIGlmICh2YWxpZCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGlhZ25vc3Rp
Y3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAg
ICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfVU5FWFBFQ1RFRF9UT0tFTiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRv
a2VuLT50ZXh0KTsKICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAg
fQpAQCAtNzQ3LDcgKzc0Nyw3IEBAIHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZVZlcnNpb24o
VG9rZW4qIHRva2VuKQogICAgIH0KICAgICBpZiAodmFsaWQgJiYgKHN0YXRlICE9IFZFUlNJT05f
TlVNQkVSICsgMSkpCiAgICAgewotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6SU5WQUxJRF9WRVJTSU9OX0RJUkVDVElWRSwKKyAgICAgICAgbURpYWdub3N0aWNzLT5y
ZXBvcnQoRGlhZ25vc3RpY3M6OlBQX0lOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAg
ICAgICB2YWxpZCA9IGZhbHNlOwogICAgIH0KQEAgLTc3OCwxMyArNzc4LDEzIEBAIHZvaWQgRGly
ZWN0aXZlUGFyc2VyOjpwYXJzZUxpbmUoVG9rZW4qIHRva2VuKQogICAgICAgICAgIGNhc2UgTElO
RV9OVU1CRVI6CiAgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2Vu
OjpDT05TVF9JTlQpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0xJTkVfTlVNQkVSLAorICAgICAgICAgICAg
ICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9JTlZBTElEX0xJTkVfTlVN
QkVSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwgdG9rZW4tPnRleHQpOwogICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBpZiAodmFsaWQgJiYgIXRva2VuLT5pVmFsdWUoJmxpbmUpKQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpJTlRFR0VSX09WRVJGTE9XLAorICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+
cmVwb3J0KERpYWdub3N0aWNzOjpQUF9JTlRFR0VSX09WRVJGTE9XLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAg
ICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICB9CkBAIC03OTIsMTMgKzc5
MiwxMyBAQCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VMaW5lKFRva2VuKiB0b2tlbikKICAg
ICAgICAgICBjYXNlIEZJTEVfTlVNQkVSOgogICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tl
bi0+dHlwZSAhPSBUb2tlbjo6Q09OU1RfSU5UKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9GSUxFX05VTUJF
UiwKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBf
SU5WQUxJRF9GSUxFX05VTUJFUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgICAgICAgICB2YWxpZCA9
IGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHZhbGlkICYmICF0b2tlbi0+
aVZhbHVlKCZmaWxlKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGlhZ25vc3Rp
Y3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5URUdFUl9PVkVSRkxPVywKKyAgICAgICAgICAgICAg
ICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfSU5URUdFUl9PVkVSRkxPVywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRv
a2VuLT50ZXh0KTsKICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAg
fQpAQCAtODA2LDcgKzgwNiw3IEBAIHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUxpbmUoVG9r
ZW4qIHRva2VuKQogICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBpZiAodmFsaWQpCiAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25v
c3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5y
ZXBvcnQoRGlhZ25vc3RpY3M6OlBQX1VORVhQRUNURURfVE9LRU4sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAg
ICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KQEAgLTgxNyw3ICs4MTcs
NyBAQCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VMaW5lKFRva2VuKiB0b2tlbikKIAogICAg
IGlmICh2YWxpZCAmJiAoc3RhdGUgIT0gRklMRV9OVU1CRVIpICYmIChzdGF0ZSAhPSBGSUxFX05V
TUJFUiArIDEpKQogICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6OklOVkFMSURfTElORV9ESVJFQ1RJVkUsCisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0
KERpYWdub3N0aWNzOjpQUF9JTlZBTElEX0xJTkVfRElSRUNUSVZFLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgdmFs
aWQgPSBmYWxzZTsKICAgICB9CkBAIC04OTMsNyArODkzLDcgQEAgaW50IERpcmVjdGl2ZVBhcnNl
cjo6cGFyc2VFeHByZXNzaW9uSWYoVG9rZW4qIHRva2VuKQogICAgIC8vIFdhcm4gaWYgdGhlcmUg
YXJlIHRva2VucyBhZnRlciAjaWYgZXhwcmVzc2lvbi4KICAgICBpZiAoIWlzRU9EKHRva2VuKSkK
ICAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJ
T05BTF9VTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFn
bm9zdGljczo6UFBfQ09ORElUSU9OQUxfVU5FWFBFQ1RFRF9UT0tFTiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgIHNr
aXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CiAgICAgfQpAQCAtOTA5LDcgKzkwOSw3IEBA
IGludCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXhwcmVzc2lvbklmZGVmKFRva2VuKiB0b2tlbikK
ICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwogICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tl
bjo6SURFTlRJRklFUikKICAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6UFBfVU5FWFBFQ1RFRF9UT0tFTiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgIHNraXBVbnRpbEVP
RChtVG9rZW5pemVyLCB0b2tlbik7CiAgICAgICAgIHJldHVybiAwOwpAQCAtOTIyLDcgKzkyMiw3
IEBAIGludCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXhwcmVzc2lvbklmZGVmKFRva2VuKiB0b2tl
bikKICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwogICAgIGlmICghaXNFT0QodG9rZW4pKQog
ICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElP
TkFMX1VORVhQRUNURURfVE9LRU4sCisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpQUF9DT05ESVRJT05BTF9VTkVYUEVDVEVEX1RPS0VOLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgc2tp
cFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJz
ZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9FeHByZXNzaW9uUGFyc2VyLmNwcAppbmRleCAxZmFlMDA5NDU2YTE5YTZiZGE4MGEyMzA0YzBi
OGVhYzc0YmVkZDliLi4zYjgwYjQ2NjI0YTczYjlkNjM2NWYyZjZiYzAxYWE2MTY3OTI0ODZmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL0V4cHJlc3Npb25QYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci5jcHAKQEAgLTEsMjEgKzEs
MjEgQEAKLS8qIEFwcGxlIE5vdGU6IEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBBcHBsZSBl
bGVjdHMgdG8gZGlzdHJpYnV0ZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBCU0Qg
bGljZW5zZS4gKi8KKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjcuICAq
LwogCi0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMy4wLjEuICAqLworLyog
QXBwbGUgTm90ZTogRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIEFwcGxlIGVsZWN0cyB0byBk
aXN0cmlidXRlIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEJTRCBsaWNlbnNlLiAq
LwogCiAvKiBCaXNvbiBpbXBsZW1lbnRhdGlvbiBmb3IgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwot
Ci0gICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDEzIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLgotCisgICAKKyAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4
OS0xOTkwLCAyMDAwLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAKICAg
IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKICAgIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KKyAgIAogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZQogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQor
ICAgCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQogICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNl
ZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCkBAIC0yOCw3ICsyOCw3IEBA
CiAgICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5k
IHRoZSByZXN1bHRpbmcKICAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRl
ciB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFs
IGV4Y2VwdGlvbi4KLQorICAgCiAgICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluCiAgICB2ZXJzaW9uIDIuMiBvZiBCaXNv
bi4gICovCiAKQEAgLTQ2LDcgKzQ2LDcgQEAKICNkZWZpbmUgWVlCSVNPTiAxCiAKIC8qIEJpc29u
IHZlcnNpb24uICAqLwotI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjMuMC4xIgorI2RlZmluZSBZ
WUJJU09OX1ZFUlNJT04gIjIuNyIKIAogLyogU2tlbGV0b24gbmFtZS4gICovCiAjZGVmaW5lIFlZ
U0tFTEVUT05fTkFNRSAieWFjYy5jIgpAQCAtNjUsMTAgKzY1LDExIEBACiAjZGVmaW5lIHl5cGFy
c2UgICAgICAgICBwcHBhcnNlCiAjZGVmaW5lIHl5bGV4ICAgICAgICAgICBwcGxleAogI2RlZmlu
ZSB5eWVycm9yICAgICAgICAgcHBlcnJvcgorI2RlZmluZSB5eWx2YWwgICAgICAgICAgcHBsdmFs
CisjZGVmaW5lIHl5Y2hhciAgICAgICAgICBwcGNoYXIKICNkZWZpbmUgeXlkZWJ1ZyAgICAgICAg
IHBwZGVidWcKICNkZWZpbmUgeXluZXJycyAgICAgICAgIHBwbmVycnMKIAotCiAvKiBDb3B5IHRo
ZSBmaXJzdCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KIAogCkBAIC0xMzMsMTEgKzEz
NCwxMSBAQCBzdGF0aWMgdm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIq
IHJlYXNvbik7CiAKIAogCi0jIGlmbmRlZiBZWV9OVUxMUFRSCisjIGlmbmRlZiBZWV9OVUxMCiAj
ICBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIDIwMTEwM0wgPD0gX19jcGx1c3BsdXMKLSMgICBk
ZWZpbmUgWVlfTlVMTFBUUiBudWxscHRyCisjICAgZGVmaW5lIFlZX05VTEwgbnVsbHB0cgogIyAg
ZWxzZQotIyAgIGRlZmluZSBZWV9OVUxMUFRSIDAKKyMgICBkZWZpbmUgWVlfTlVMTCAwCiAjICBl
bmRpZgogIyBlbmRpZgogCkBAIC0xNTAsNyArMTUxLDcgQEAgc3RhdGljIHZvaWQgeXllcnJvcihD
b250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pOwogI2VuZGlmCiAKIAotLyogRGVi
dWcgdHJhY2VzLiAgKi8KKy8qIEVuYWJsaW5nIHRyYWNlcy4gICovCiAjaWZuZGVmIFlZREVCVUcK
ICMgZGVmaW5lIFlZREVCVUcgMAogI2VuZGlmCkBAIC0xNTgsMzQgKzE1OSw0NyBAQCBzdGF0aWMg
dm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7CiBleHRl
cm4gaW50IHBwZGVidWc7CiAjZW5kaWYKIAotLyogVG9rZW4gdHlwZS4gICovCisvKiBUb2tlbnMu
ICAqLwogI2lmbmRlZiBZWVRPS0VOVFlQRQogIyBkZWZpbmUgWVlUT0tFTlRZUEUKLSAgZW51bSB5
eXRva2VudHlwZQotICB7Ci0gICAgVE9LX0NPTlNUX0lOVCA9IDI1OCwKLSAgICBUT0tfT1BfT1Ig
PSAyNTksCi0gICAgVE9LX09QX0FORCA9IDI2MCwKLSAgICBUT0tfT1BfRVEgPSAyNjEsCi0gICAg
VE9LX09QX05FID0gMjYyLAotICAgIFRPS19PUF9MRSA9IDI2MywKLSAgICBUT0tfT1BfR0UgPSAy
NjQsCi0gICAgVE9LX09QX0xFRlQgPSAyNjUsCi0gICAgVE9LX09QX1JJR0hUID0gMjY2LAotICAg
IFRPS19VTkFSWSA9IDI2NwotICB9OworICAgLyogUHV0IHRoZSB0b2tlbnMgaW50byB0aGUgc3lt
Ym9sIHRhYmxlLCBzbyB0aGF0IEdEQiBhbmQgb3RoZXIgZGVidWdnZXJzCisgICAgICBrbm93IGFi
b3V0IHRoZW0uICAqLworICAgZW51bSB5eXRva2VudHlwZSB7CisgICAgIFRPS19DT05TVF9JTlQg
PSAyNTgsCisgICAgIFRPS19PUF9PUiA9IDI1OSwKKyAgICAgVE9LX09QX0FORCA9IDI2MCwKKyAg
ICAgVE9LX09QX05FID0gMjYxLAorICAgICBUT0tfT1BfRVEgPSAyNjIsCisgICAgIFRPS19PUF9H
RSA9IDI2MywKKyAgICAgVE9LX09QX0xFID0gMjY0LAorICAgICBUT0tfT1BfUklHSFQgPSAyNjUs
CisgICAgIFRPS19PUF9MRUZUID0gMjY2LAorICAgICBUT0tfVU5BUlkgPSAyNjcKKyAgIH07CiAj
ZW5kaWYKIAotLyogVmFsdWUgdHlwZS4gICovCisKICNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAh
IGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAogdHlwZWRlZiBpbnQgWVlTVFlQRTsKICMgZGVm
aW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCisjIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jz
b2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCiAjIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xB
UkVEIDEKICNlbmRpZgogCiAKLQorI2lmZGVmIFlZUEFSU0VfUEFSQU0KKyNpZiBkZWZpbmVkIF9f
U1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKK2ludCBwcHBhcnNlICh2b2lkICpZWVBBUlNF
X1BBUkFNKTsKKyNlbHNlCitpbnQgcHBwYXJzZSAoKTsKKyNlbmRpZgorI2Vsc2UgLyogISBZWVBB
UlNFX1BBUkFNICovCisjaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVz
CiBpbnQgcHBwYXJzZSAoQ29udGV4dCAqY29udGV4dCk7CisjZWxzZQoraW50IHBwcGFyc2UgKCk7
CisjZW5kaWYKKyNlbmRpZiAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KIAogCiAKQEAgLTIwNSw4ICsy
MTksMTEgQEAgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHl5dHlwZV91aW50ODsKIAogI2lmZGVmIFlZ
VFlQRV9JTlQ4CiB0eXBlZGVmIFlZVFlQRV9JTlQ4IHl5dHlwZV9pbnQ4OwotI2Vsc2UKKyNlbGlm
IChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRl
ZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKIHR5cGVkZWYgc2lnbmVkIGNo
YXIgeXl0eXBlX2ludDg7CisjZWxzZQordHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDg7CiAj
ZW5kaWYKIAogI2lmZGVmIFlZVFlQRV9VSU5UMTYKQEAgLTIyNiw3ICsyNDMsOCBAQCB0eXBlZGVm
IHNob3J0IGludCB5eXR5cGVfaW50MTY7CiAjICBkZWZpbmUgWVlTSVpFX1QgX19TSVpFX1RZUEVf
XwogIyBlbGlmIGRlZmluZWQgc2l6ZV90CiAjICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90Ci0jIGVs
aWYgISBkZWZpbmVkIFlZU0laRV9UCisjIGVsaWYgISBkZWZpbmVkIFlZU0laRV9UICYmIChkZWZp
bmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQg
X19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKICMgIGluY2x1ZGUgPHN0ZGRlZi5oPiAv
KiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCiAjICBkZWZpbmUgWVlTSVpFX1Qgc2l6
ZV90CiAjIGVsc2UKQEAgLTI0OCwzMyArMjY2LDYgQEAgdHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBl
X2ludDE2OwogIyBlbmRpZgogI2VuZGlmCiAKLSNpZm5kZWYgWVlfQVRUUklCVVRFCi0jIGlmIChk
ZWZpbmVkIF9fR05VQ19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAmJiAoMiA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSAyICYmIDk2IDw9
IF9fR05VQ19NSU5PUl9fKSkpICBcCi0gICAgIHx8IGRlZmluZWQgX19TVU5QUk9fQyAmJiAweDUx
MTAgPD0gX19TVU5QUk9fQwotIyAgZGVmaW5lIFlZX0FUVFJJQlVURShTcGVjKSBfX2F0dHJpYnV0
ZV9fKFNwZWMpCi0jIGVsc2UKLSMgIGRlZmluZSBZWV9BVFRSSUJVVEUoU3BlYykgLyogZW1wdHkg
Ki8KLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIFlZX0FUVFJJQlVURV9QVVJFCi0jIGRlZmlu
ZSBZWV9BVFRSSUJVVEVfUFVSRSAgIFlZX0FUVFJJQlVURSAoKF9fcHVyZV9fKSkKLSNlbmRpZgot
Ci0jaWZuZGVmIFlZX0FUVFJJQlVURV9VTlVTRUQKLSMgZGVmaW5lIFlZX0FUVFJJQlVURV9VTlVT
RUQgWVlfQVRUUklCVVRFICgoX191bnVzZWRfXykpCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkIF9O
b3JldHVybiBcCi0gICAgICYmICghZGVmaW5lZCBfX1NURENfVkVSU0lPTl9fIHx8IF9fU1REQ19W
RVJTSU9OX18gPCAyMDExMTIpCi0jIGlmIGRlZmluZWQgX01TQ19WRVIgJiYgMTIwMCA8PSBfTVND
X1ZFUgotIyAgZGVmaW5lIF9Ob3JldHVybiBfX2RlY2xzcGVjIChub3JldHVybikKLSMgZWxzZQot
IyAgZGVmaW5lIF9Ob3JldHVybiBZWV9BVFRSSUJVVEUgKChfX25vcmV0dXJuX18pKQotIyBlbmRp
ZgotI2VuZGlmCi0KIC8qIFN1cHByZXNzIHVudXNlZC12YXJpYWJsZSB3YXJuaW5ncyBieSAidXNp
bmciIEUuICAqLwogI2lmICEgZGVmaW5lZCBsaW50IHx8IGRlZmluZWQgX19HTlVDX18KICMgZGVm
aW5lIFlZVVNFKEUpICgodm9pZCkgKEUpKQpAQCAtMjgyLDI2ICsyNzMsMjQgQEAgdHlwZWRlZiBz
aG9ydCBpbnQgeXl0eXBlX2ludDE2OwogIyBkZWZpbmUgWVlVU0UoRSkgLyogZW1wdHkgKi8KICNl
bmRpZgogCi0jaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiA0MDcgPD0gX19HTlVDX18gKiAxMDAgKyBf
X0dOVUNfTUlOT1JfXwotLyogU3VwcHJlc3MgYW4gaW5jb3JyZWN0IGRpYWdub3N0aWMgYWJvdXQg
eXlsdmFsIGJlaW5nIHVuaW5pdGlhbGl6ZWQuICAqLwotIyBkZWZpbmUgWVlfSUdOT1JFX01BWUJF
X1VOSU5JVElBTElaRURfQkVHSU4gXAotICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBwdXNo
IikgXAotICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVd1bmluaXRpYWxp
emVkXCIiKVwKLSAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XbWF5YmUt
dW5pbml0aWFsaXplZFwiIikKLSMgZGVmaW5lIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVE
X0VORCBcCi0gICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIHBvcCIpCisvKiBJZGVudGl0eSBm
dW5jdGlvbiwgdXNlZCB0byBzdXBwcmVzcyB3YXJuaW5ncyBhYm91dCBjb25zdGFudCBjb25kaXRp
b25zLiAgKi8KKyNpZm5kZWYgbGludAorIyBkZWZpbmUgWVlJRChOKSAoTikKICNlbHNlCi0jIGRl
ZmluZSBZWV9JTklUSUFMX1ZBTFVFKFZhbHVlKSBWYWx1ZQotI2VuZGlmCi0jaWZuZGVmIFlZX0lH
Tk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOCi0jIGRlZmluZSBZWV9JR05PUkVfTUFZQkVf
VU5JTklUSUFMSVpFRF9CRUdJTgotIyBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTEla
RURfRU5ECisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwK
KyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGlj
IGludAorWVlJRCAoaW50IHl5aSkKKyNlbHNlCitzdGF0aWMgaW50CitZWUlEICh5eWkpCisgICAg
aW50IHl5aTsKICNlbmRpZgotI2lmbmRlZiBZWV9JTklUSUFMX1ZBTFVFCi0jIGRlZmluZSBZWV9J
TklUSUFMX1ZBTFVFKFZhbHVlKSAvKiBOb3RoaW5nLiAqLworeworICByZXR1cm4geXlpOworfQog
I2VuZGlmCiAKLQogI2lmICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRQog
CiAvKiBUaGUgcGFyc2VyIGludm9rZXMgYWxsb2NhIG9yIG1hbGxvYzsgZGVmaW5lIHRoZSBuZWNl
c3Nhcnkgc3ltYm9scy4gICovCkBAIC0zMTksNyArMzA4LDggQEAgdHlwZWRlZiBzaG9ydCBpbnQg
eXl0eXBlX2ludDE2OwogIyAgICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKICMgICBlbHNlCiAjICAg
IGRlZmluZSBZWVNUQUNLX0FMTE9DIGFsbG9jYQotIyAgICBpZiAhIGRlZmluZWQgX0FMTE9DQV9I
ICYmICEgZGVmaW5lZCBFWElUX1NVQ0NFU1MKKyMgICAgaWYgISBkZWZpbmVkIF9BTExPQ0FfSCAm
JiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQg
X19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBf
TVNDX1ZFUikKICMgICAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBO
QU1FIFNQQUNFICovCiAgICAgICAvKiBVc2UgRVhJVF9TVUNDRVNTIGFzIGEgd2l0bmVzcyBmb3Ig
c3RkbGliLmguICAqLwogIyAgICAgaWZuZGVmIEVYSVRfU1VDQ0VTUwpAQCAtMzMxLDggKzMyMSw4
IEBAIHR5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQxNjsKICMgZW5kaWYKIAogIyBpZmRlZiBZ
WVNUQUNLX0FMTE9DCi0gICAvKiBQYWNpZnkgR0NDJ3MgJ2VtcHR5IGlmLWJvZHknIHdhcm5pbmcu
ICAqLwotIyAgZGVmaW5lIFlZU1RBQ0tfRlJFRShQdHIpIGRvIHsgLyogZW1wdHkgKi87IH0gd2hp
bGUgKDApCisgICAvKiBQYWNpZnkgR0NDJ3MgYGVtcHR5IGlmLWJvZHknIHdhcm5pbmcuICAqLwor
IyAgZGVmaW5lIFlZU1RBQ0tfRlJFRShQdHIpIGRvIHsgLyogZW1wdHkgKi87IH0gd2hpbGUgKFlZ
SUQgKDApKQogIyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQogICAgIC8qIFRoZSBPUyBt
aWdodCBndWFyYW50ZWUgb25seSBvbmUgZ3VhcmQgcGFnZSBhdCB0aGUgYm90dG9tIG9mIHRoZSBz
dGFjaywKICAgICAgICBhbmQgYSBwYWdlIHNpemUgY2FuIGJlIGFzIHNtYWxsIGFzIDQwOTYgYnl0
ZXMuICBTbyB3ZSBjYW5ub3Qgc2FmZWx5CkBAIC0zNDgsNyArMzM4LDcgQEAgdHlwZWRlZiBzaG9y
dCBpbnQgeXl0eXBlX2ludDE2OwogIyAgZW5kaWYKICMgIGlmIChkZWZpbmVkIF9fY3BsdXNwbHVz
ICYmICEgZGVmaW5lZCBFWElUX1NVQ0NFU1MgXAogICAgICAgICYmICEgKChkZWZpbmVkIFlZTUFM
TE9DIHx8IGRlZmluZWQgbWFsbG9jKSBcCi0gICAgICAgICAgICAgJiYgKGRlZmluZWQgWVlGUkVF
IHx8IGRlZmluZWQgZnJlZSkpKQorCSAgICAgJiYgKGRlZmluZWQgWVlGUkVFIHx8IGRlZmluZWQg
ZnJlZSkpKQogIyAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1F
IFNQQUNFICovCiAjICAgaWZuZGVmIEVYSVRfU1VDQ0VTUwogIyAgICBkZWZpbmUgRVhJVF9TVUND
RVNTIDAKQEAgLTM1NiwxMyArMzQ2LDE1IEBAIHR5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQx
NjsKICMgIGVuZGlmCiAjICBpZm5kZWYgWVlNQUxMT0MKICMgICBkZWZpbmUgWVlNQUxMT0MgbWFs
bG9jCi0jICAgaWYgISBkZWZpbmVkIG1hbGxvYyAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTCisj
ICAgaWYgISBkZWZpbmVkIG1hbGxvYyAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTICYmIChkZWZp
bmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQg
X19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKIHZvaWQgKm1hbGxvYyAoWVlTSVpFX1Qp
OyAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCiAjICAgZW5kaWYKICMgIGVuZGlm
CiAjICBpZm5kZWYgWVlGUkVFCiAjICAgZGVmaW5lIFlZRlJFRSBmcmVlCi0jICAgaWYgISBkZWZp
bmVkIGZyZWUgJiYgISBkZWZpbmVkIEVYSVRfU1VDQ0VTUworIyAgIGlmICEgZGVmaW5lZCBmcmVl
ICYmICEgZGVmaW5lZCBFWElUX1NVQ0NFU1MgJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5l
ZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVk
IF9NU0NfVkVSKQogdm9pZCBmcmVlICh2b2lkICopOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1F
IFNQQUNFICovCiAjICAgZW5kaWYKICMgIGVuZGlmCkBAIC0zNzIsNyArMzY0LDcgQEAgdm9pZCBm
cmVlICh2b2lkICopOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCiAKICNpZiAo
ISBkZWZpbmVkIHl5b3ZlcmZsb3cgXAogICAgICAmJiAoISBkZWZpbmVkIF9fY3BsdXNwbHVzIFwK
LSAgICAgICAgIHx8IChkZWZpbmVkIFlZU1RZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RS
SVZJQUwpKSkKKwkgfHwgKGRlZmluZWQgWVlTVFlQRV9JU19UUklWSUFMICYmIFlZU1RZUEVfSVNf
VFJJVklBTCkpKQogCiAvKiBBIHR5cGUgdGhhdCBpcyBwcm9wZXJseSBhbGlnbmVkIGZvciBhbnkg
c3RhY2sgbWVtYmVyLiAgKi8KIHVuaW9uIHl5YWxsb2MKQEAgLTM5NywxNiArMzg5LDE2IEBAIHVu
aW9uIHl5YWxsb2MKICAgIGVsZW1lbnRzIGluIHRoZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVzIHRo
ZSBuZXcgbG9jYXRpb24gb2YgdGhlCiAgICBzdGFjay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBwcm9w
ZXJseSBhbGlnbmVkIGxvY2F0aW9uIGZvciB0aGUgbmV4dAogICAgc3RhY2suICAqLwotIyBkZWZp
bmUgWVlTVEFDS19SRUxPQ0FURShTdGFja19hbGxvYywgU3RhY2spICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBZ
WVNJWkVfVCB5eW5ld2J5dGVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICBZWUNPUFkgKCZ5eXB0ci0+U3RhY2tfYWxsb2MsIFN0YWNrLCB5eXNp
emUpOyAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBTdGFjayA9ICZ5eXB0ci0+U3RhY2tf
YWxsb2M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB5eW5l
d2J5dGVzID0geXlzdGFja3NpemUgKiBzaXplb2YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJ
TVVNOyBcCi0gICAgICAgIHl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7ICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgd2hpbGUgKDAp
CisjIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrX2FsbG9jLCBTdGFjaykJCQkJXAorICAg
IGRvCQkJCQkJCQkJXAorICAgICAgewkJCQkJCQkJCVwKKwlZWVNJWkVfVCB5eW5ld2J5dGVzOwkJ
CQkJCVwKKwlZWUNPUFkgKCZ5eXB0ci0+U3RhY2tfYWxsb2MsIFN0YWNrLCB5eXNpemUpOwkJCVwK
KwlTdGFjayA9ICZ5eXB0ci0+U3RhY2tfYWxsb2M7CQkJCQlcCisJeXluZXdieXRlcyA9IHl5c3Rh
Y2tzaXplICogc2l6ZW9mICgqU3RhY2spICsgWVlTVEFDS19HQVBfTUFYSU1VTTsgXAorCXl5cHRy
ICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7CQkJCVwKKyAgICAgIH0JCQkJCQkJCQlc
CisgICAgd2hpbGUgKFlZSUQgKDApKQogCiAjZW5kaWYKIApAQCAtNDI1LDcgKzQxNyw3IEBAIHVu
aW9uIHl5YWxsb2MKICAgICAgICAgICBmb3IgKHl5aSA9IDA7IHl5aSA8IChDb3VudCk7IHl5aSsr
KSAgIFwKICAgICAgICAgICAgIChEc3QpW3l5aV0gPSAoU3JjKVt5eWldOyAgICAgICAgICAgIFwK
ICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
IHdoaWxlICgwKQorICAgICAgd2hpbGUgKFlZSUQgKDApKQogIyAgZW5kaWYKICMgZW5kaWYKICNl
bmRpZiAvKiAhWVlDT1BZX05FRURFRCAqLwpAQCAtNDQxLDE5ICs0MzMsMTcgQEAgdW5pb24geXlh
bGxvYwogI2RlZmluZSBZWU5OVFMgIDMKIC8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBydWxlcy4g
ICovCiAjZGVmaW5lIFlZTlJVTEVTICAyNgotLyogWVlOU1RBVEVTIC0tIE51bWJlciBvZiBzdGF0
ZXMuICAqLworLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHN0YXRlcy4gICovCiAjZGVmaW5lIFlZ
TlNUQVRFUyAgNTIKIAotLyogWVlUUkFOU0xBVEVbWVlYXSAtLSBTeW1ib2wgbnVtYmVyIGNvcnJl
c3BvbmRpbmcgdG8gWVlYIGFzIHJldHVybmVkCi0gICBieSB5eWxleCwgd2l0aCBvdXQtb2YtYm91
bmRzIGNoZWNraW5nLiAgKi8KKy8qIFlZVFJBTlNMQVRFKFlZTEVYKSAtLSBCaXNvbiBzeW1ib2wg
bnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLwogI2RlZmluZSBZWVVOREVGVE9LICAy
CiAjZGVmaW5lIFlZTUFYVVRPSyAgIDI2NwogCi0jZGVmaW5lIFlZVFJBTlNMQVRFKFlZWCkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIFlZ
VFJBTlNMQVRFKFlZWCkJCQkJCQlcCiAgICgodW5zaWduZWQgaW50KSAoWVlYKSA8PSBZWU1BWFVU
T0sgPyB5eXRyYW5zbGF0ZVtZWVhdIDogWVlVTkRFRlRPSykKIAotLyogWVlUUkFOU0xBVEVbVE9L
RU4tTlVNXSAtLSBTeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gVE9LRU4tTlVNCi0gICBh
cyByZXR1cm5lZCBieSB5eWxleCwgd2l0aG91dCBvdXQtb2YtYm91bmRzIGNoZWNraW5nLiAgKi8K
Ky8qIFlZVFJBTlNMQVRFW1lZTEVYXSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRp
bmcgdG8gWVlMRVguICAqLwogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRyYW5zbGF0ZVtd
ID0KIHsKICAgICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLApAQCAtNDg2LDEyICs0NzYsMzYgQEAgc3RhdGljIGNvbnN0
IHl5dHlwZV91aW50OCB5eXRyYW5zbGF0ZVtdID0KIH07CiAKICNpZiBZWURFQlVHCi0gIC8qIFlZ
UkxJTkVbWVlOXSAtLSBTb3VyY2UgbGluZSB3aGVyZSBydWxlIG51bWJlciBZWU4gd2FzIGRlZmlu
ZWQuICAqLworLyogWVlQUkhTW1lZTl0gLS0gSW5kZXggb2YgdGhlIGZpcnN0IFJIUyBzeW1ib2wg
b2YgcnVsZSBudW1iZXIgWVlOIGluCisgICBZWVJIUy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBl
X3VpbnQ4IHl5cHJoc1tdID0KK3sKKyAgICAgICAwLCAgICAgMCwgICAgIDMsICAgICA1LCAgICAg
NywgICAgMTEsICAgIDE1LCAgICAxOSwgICAgMjMsICAgIDI3LAorICAgICAgMzEsICAgIDM1LCAg
ICAzOSwgICAgNDMsICAgIDQ3LCAgICA1MSwgICAgNTUsICAgIDU5LCAgICA2MywgICAgNjcsCisg
ICAgICA3MSwgICAgNzUsICAgIDc5LCAgICA4MiwgICAgODUsICAgIDg4LCAgICA5MQorfTsKKwor
LyogWVlSSFMgLS0gQSBgLTEnLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBydWxlcycgUkhTLiAgKi8K
K3N0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eXJoc1tdID0KK3sKKyAgICAgIDI4LCAgICAgMCwg
ICAgLTEsICAgIDI5LCAgICAtMSwgICAgIDMsICAgIC0xLCAgICAyOSwgICAgIDQsICAgIDI5LAor
ICAgICAgLTEsICAgIDI5LCAgICAgNSwgICAgMjksICAgIC0xLCAgICAyOSwgICAgIDYsICAgIDI5
LCAgICAtMSwgICAgMjksCisgICAgICAgNywgICAgMjksICAgIC0xLCAgICAyOSwgICAgIDgsICAg
IDI5LCAgICAtMSwgICAgMjksICAgICA5LCAgICAyOSwKKyAgICAgIC0xLCAgICAyOSwgICAgMTAs
ICAgIDI5LCAgICAtMSwgICAgMjksICAgIDEzLCAgICAyOSwgICAgLTEsICAgIDI5LAorICAgICAg
MTQsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDEyLCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAx
MSwgICAgMjksCisgICAgICAtMSwgICAgMjksICAgIDE1LCAgICAyOSwgICAgLTEsICAgIDI5LCAg
ICAxNiwgICAgMjksICAgIC0xLCAgICAyOSwKKyAgICAgIDE4LCAgICAyOSwgICAgLTEsICAgIDI5
LCAgICAxNywgICAgMjksICAgIC0xLCAgICAyOSwgICAgMjEsICAgIDI5LAorICAgICAgLTEsICAg
IDI5LCAgICAyMCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTksICAgIDI5LCAgICAtMSwgICAg
MjMsCisgICAgICAyOSwgICAgLTEsICAgIDI0LCAgICAyOSwgICAgLTEsICAgIDE4LCAgICAyOSwg
ICAgLTEsICAgIDE3LCAgICAyOSwKKyAgICAgIC0xLCAgICAyNSwgICAgMjksICAgIDI2LCAgICAt
MQorfTsKKworLyogWVlSTElORVtZWU5dIC0tIHNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVy
IFlZTiB3YXMgZGVmaW5lZC4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cmxpbmVb
XSA9CiB7Ci0gICAgICAgMCwgICAgOTcsICAgIDk3LCAgIDEwNCwgICAxMDUsICAgMTA4LCAgIDEx
MSwgICAxMTQsICAgMTE3LCAgIDEyMCwKLSAgICAgMTIzLCAgIDEyNiwgICAxMjksICAgMTMyLCAg
IDEzNSwgICAxMzgsICAgMTQxLCAgIDE0NCwgICAxNDcsICAgMTUwLAotICAgICAxNjMsICAgMTc2
LCAgIDE3OSwgICAxODIsICAgMTg1LCAgIDE4OCwgICAxOTEKKyAgICAgICAwLCAgICA5MSwgICAg
OTEsICAgIDk4LCAgICA5OSwgICAxMDIsICAgMTA1LCAgIDEwOCwgICAxMTEsICAgMTE0LAorICAg
ICAxMTcsICAgMTIwLCAgIDEyMywgICAxMjYsICAgMTI5LCAgIDEzMiwgICAxMzUsICAgMTM4LCAg
IDE0MSwgICAxNDQsCisgICAgIDE1NywgICAxNzAsICAgMTczLCAgIDE3NiwgICAxNzksICAgMTgy
LCAgIDE4NQogfTsKICNlbmRpZgogCkBAIC01MDEsMTYgKzUxNSwxNiBAQCBzdGF0aWMgY29uc3Qg
eXl0eXBlX3VpbnQ4IHl5cmxpbmVbXSA9CiBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgeXl0bmFt
ZVtdID0KIHsKICAgIiRlbmQiLCAiZXJyb3IiLCAiJHVuZGVmaW5lZCIsICJUT0tfQ09OU1RfSU5U
IiwgIlRPS19PUF9PUiIsCi0gICJUT0tfT1BfQU5EIiwgIid8JyIsICInXiciLCAiJyYnIiwgIlRP
S19PUF9FUSIsICJUT0tfT1BfTkUiLCAiJzwnIiwKLSAgIic+JyIsICJUT0tfT1BfTEUiLCAiVE9L
X09QX0dFIiwgIlRPS19PUF9MRUZUIiwgIlRPS19PUF9SSUdIVCIsICInKyciLAorICAiVE9LX09Q
X0FORCIsICInfCciLCAiJ14nIiwgIicmJyIsICJUT0tfT1BfTkUiLCAiVE9LX09QX0VRIiwgIic8
JyIsCisgICInPiciLCAiVE9LX09QX0dFIiwgIlRPS19PUF9MRSIsICJUT0tfT1BfUklHSFQiLCAi
VE9LX09QX0xFRlQiLCAiJysnIiwKICAgIictJyIsICInKiciLCAiJy8nIiwgIiclJyIsICJUT0tf
VU5BUlkiLCAiJyEnIiwgIid+JyIsICInKCciLCAiJyknIiwKLSAgIiRhY2NlcHQiLCAiaW5wdXQi
LCAiZXhwcmVzc2lvbiIsIFlZX05VTExQVFIKKyAgIiRhY2NlcHQiLCAiaW5wdXQiLCAiZXhwcmVz
c2lvbiIsIFlZX05VTEwKIH07CiAjZW5kaWYKIAogIyBpZmRlZiBZWVBSSU5UCi0vKiBZWVRPS05V
TVtOVU1dIC0tIChFeHRlcm5hbCkgdG9rZW4gbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlCi0g
ICAoaW50ZXJuYWwpIHN5bWJvbCBudW1iZXIgTlVNICh3aGljaCBtdXN0IGJlIHRoYXQgb2YgYSB0
b2tlbikuICAqLworLyogWVlUT0tOVU1bWVlMRVgtTlVNXSAtLSBJbnRlcm5hbCB0b2tlbiBudW1i
ZXIgY29ycmVzcG9uZGluZyB0bworICAgdG9rZW4gWVlMRVgtTlVNLiAgKi8KIHN0YXRpYyBjb25z
dCB5eXR5cGVfdWludDE2IHl5dG9rbnVtW10gPQogewogICAgICAgIDAsICAgMjU2LCAgIDI1Nywg
ICAyNTgsICAgMjU5LCAgIDI2MCwgICAxMjQsICAgIDk0LCAgICAzOCwgICAyNjEsCkBAIC01MTks
MTggKzUzMyw0NCBAQCBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXRva251bVtdID0KIH07
CiAjIGVuZGlmCiAKLSNkZWZpbmUgWVlQQUNUX05JTkYgLTExCisvKiBZWVIxW1lZTl0gLS0gU3lt
Ym9sIG51bWJlciBvZiBzeW1ib2wgdGhhdCBydWxlIFlZTiBkZXJpdmVzLiAgKi8KK3N0YXRpYyBj
b25zdCB5eXR5cGVfdWludDggeXlyMVtdID0KK3sKKyAgICAgICAwLCAgICAyNywgICAgMjgsICAg
IDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LAorICAgICAgMjks
ICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwg
ICAgMjksCisgICAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAy
OQorfTsKIAotI2RlZmluZSB5eXBhY3RfdmFsdWVfaXNfZGVmYXVsdChZeXN0YXRlKSBcCi0gICgh
ISgoWXlzdGF0ZSkgPT0gKC0xMSkpKQorLyogWVlSMltZWU5dIC0tIE51bWJlciBvZiBzeW1ib2xz
IGNvbXBvc2luZyByaWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLworc3RhdGljIGNvbnN0
IHl5dHlwZV91aW50OCB5eXIyW10gPQoreworICAgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDEs
ICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsCisgICAgICAgMywgICAg
IDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAg
MywKKyAgICAgICAzLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAzCit9
OwogCi0jZGVmaW5lIFlZVEFCTEVfTklORiAtMQorLyogWVlERUZBQ1RbU1RBVEUtTkFNRV0gLS0g
RGVmYXVsdCByZWR1Y3Rpb24gbnVtYmVyIGluIHN0YXRlIFNUQVRFLU5VTS4KKyAgIFBlcmZvcm1l
ZCB3aGVuIFlZVEFCTEUgZG9lc24ndCBzcGVjaWZ5IHNvbWV0aGluZyBlbHNlIHRvIGRvLiAgWmVy
bworICAgbWVhbnMgdGhlIGRlZmF1bHQgaXMgYW4gZXJyb3IuICAqLworc3RhdGljIGNvbnN0IHl5
dHlwZV91aW50OCB5eWRlZmFjdFtdID0KK3sKKyAgICAgICAwLCAgICAgMywgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDIsICAgIDI1LAorICAgICAgMjQsICAg
IDIyLCAgICAyMywgICAgIDAsICAgICAxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI2LCAgICAg
NCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAorICAgICAgMTAsICAgIDE0LCAg
ICAxMywgICAgMTEsICAgIDEyLCAgICAxNSwgICAgMTYsICAgIDE4LCAgICAxNywgICAgMjEsCisg
ICAgICAyMCwgICAgMTkKK307CiAKLSNkZWZpbmUgeXl0YWJsZV92YWx1ZV9pc19lcnJvcihZeXRh
YmxlX3ZhbHVlKSBcCi0gIDAKKy8qIFlZREVGR09UT1tOVEVSTS1OVU1dLiAgKi8KK3N0YXRpYyBj
b25zdCB5eXR5cGVfaW50OCB5eWRlZmdvdG9bXSA9Cit7CisgICAgICAtMSwgICAgIDcsICAgICA4
Cit9OwogCi0gIC8qIFlZUEFDVFtTVEFURS1OVU1dIC0tIEluZGV4IGluIFlZVEFCTEUgb2YgdGhl
IHBvcnRpb24gZGVzY3JpYmluZwotICAgICBTVEFURS1OVU0uICAqLworLyogWVlQQUNUW1NUQVRF
LU5VTV0gLS0gSW5kZXggaW4gWVlUQUJMRSBvZiB0aGUgcG9ydGlvbiBkZXNjcmliaW5nCisgICBT
VEFURS1OVU0uICAqLworI2RlZmluZSBZWVBBQ1RfTklORiAtMTEKIHN0YXRpYyBjb25zdCB5eXR5
cGVfaW50MTYgeXlwYWN0W10gPQogewogICAgICAgNDYsICAgLTExLCAgICA0NiwgICAgNDYsICAg
IDQ2LCAgICA0NiwgICAgNDYsICAgIDEyLCAgICA2OCwgICAtMTEsCkBAIC01NDEsMzQgKzU4MSwx
NiBAQCBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cGFjdFtdID0KICAgICAgLTExLCAgIC0x
MQogfTsKIAotICAvKiBZWURFRkFDVFtTVEFURS1OVU1dIC0tIERlZmF1bHQgcmVkdWN0aW9uIG51
bWJlciBpbiBzdGF0ZSBTVEFURS1OVU0uCi0gICAgIFBlcmZvcm1lZCB3aGVuIFlZVEFCTEUgZG9l
cyBub3Qgc3BlY2lmeSBzb21ldGhpbmcgZWxzZSB0byBkby4gIFplcm8KLSAgICAgbWVhbnMgdGhl
IGRlZmF1bHQgaXMgYW4gZXJyb3IuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eWRl
ZmFjdFtdID0KLXsKLSAgICAgICAwLCAgICAgMywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDIsICAgIDI1LAotICAgICAgMjQsICAgIDIyLCAgICAyMywgICAg
IDAsICAgICAxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI2LCAgICAgNCwgICAgIDUsICAgICA2
LCAgICAgNywgICAgIDgsICAgIDEwLAotICAgICAgIDksICAgIDE0LCAgICAxMywgICAgMTIsICAg
IDExLCAgICAxNiwgICAgMTUsICAgIDE4LCAgICAxNywgICAgMjEsCi0gICAgICAyMCwgICAgMTkK
LX07Ci0KLSAgLyogWVlQR09UT1tOVEVSTS1OVU1dLiAgKi8KKy8qIFlZUEdPVE9bTlRFUk0tTlVN
XS4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlwZ290b1tdID0KIHsKICAgICAgLTEx
LCAgIC0xMSwgICAgLTIKIH07CiAKLSAgLyogWVlERUZHT1RPW05URVJNLU5VTV0uICAqLwotc3Rh
dGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5ZGVmZ290b1tdID0KLXsKLSAgICAgIC0xLCAgICAgNywg
ICAgIDgKLX07Ci0KLSAgLyogWVlUQUJMRVtZWVBBQ1RbU1RBVEUtTlVNXV0gLS0gV2hhdCB0byBk
byBpbiBzdGF0ZSBTVEFURS1OVU0uICBJZgotICAgICBwb3NpdGl2ZSwgc2hpZnQgdGhhdCB0b2tl
bi4gIElmIG5lZ2F0aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hvc2UKLSAgICAgbnVtYmVyIGlzIHRo
ZSBvcHBvc2l0ZS4gIElmIFlZVEFCTEVfTklORiwgc3ludGF4IGVycm9yLiAgKi8KKy8qIFlZVEFC
TEVbWVlQQUNUW1NUQVRFLU5VTV1dLiAgV2hhdCB0byBkbyBpbiBzdGF0ZSBTVEFURS1OVU0uICBJ
ZgorICAgcG9zaXRpdmUsIHNoaWZ0IHRoYXQgdG9rZW4uICBJZiBuZWdhdGl2ZSwgcmVkdWNlIHRo
ZSBydWxlIHdoaWNoCisgICBudW1iZXIgaXMgdGhlIG9wcG9zaXRlLiAgSWYgWVlUQUJMRV9OSU5G
LCBzeW50YXggZXJyb3IuICAqLworI2RlZmluZSBZWVRBQkxFX05JTkYgLTEKIHN0YXRpYyBjb25z
dCB5eXR5cGVfdWludDggeXl0YWJsZVtdID0KIHsKICAgICAgICA5LCAgICAxMCwgICAgMTEsICAg
IDEyLCAgICAxMywgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLApAQCAtNTkxLDYg
KzYxMywxMiBAQCBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dGFibGVbXSA9CiAgICAgICAy
NywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyCiB9OwogCisjZGVmaW5lIHl5cGFj
dF92YWx1ZV9pc19kZWZhdWx0KFl5c3RhdGUpIFwKKyAgKCEhKChZeXN0YXRlKSA9PSAoLTExKSkp
CisKKyNkZWZpbmUgeXl0YWJsZV92YWx1ZV9pc19lcnJvcihZeXRhYmxlX3ZhbHVlKSBcCisgIFlZ
SUQgKDApCisKIHN0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eWNoZWNrW10gPQogewogICAgICAg
IDIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAx
OCwgICAgMTksCkBAIC02MTMsOCArNjQxLDggQEAgc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5
Y2hlY2tbXSA9CiAgICAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxCiB9
OwogCi0gIC8qIFlZU1RPU1tTVEFURS1OVU1dIC0tIFRoZSAoaW50ZXJuYWwgbnVtYmVyIG9mIHRo
ZSkgYWNjZXNzaW5nCi0gICAgIHN5bWJvbCBvZiBzdGF0ZSBTVEFURS1OVU0uICAqLworLyogWVlT
VE9TW1NUQVRFLU5VTV0gLS0gVGhlIChpbnRlcm5hbCBudW1iZXIgb2YgdGhlKSBhY2Nlc3NpbmcK
KyAgIHN5bWJvbCBvZiBzdGF0ZSBTVEFURS1OVU0uICAqLwogc3RhdGljIGNvbnN0IHl5dHlwZV91
aW50OCB5eXN0b3NbXSA9CiB7CiAgICAgICAgMCwgICAgIDMsICAgIDE3LCAgICAxOCwgICAgMjMs
ICAgIDI0LCAgICAyNSwgICAgMjgsICAgIDI5LCAgICAyOSwKQEAgLTYyNSwzMiArNjUzLDMwIEBA
IHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlzdG9zW10gPQogICAgICAgMjksICAgIDI5CiB9
OwogCi0gIC8qIFlZUjFbWVlOXSAtLSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1bGUg
WVlOIGRlcml2ZXMuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIxW10gPQotewot
ICAgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5
LCAgICAyOSwgICAgMjksCi0gICAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAg
IDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwKLSAgICAgIDI5LCAgICAyOSwgICAgMjks
ICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5Ci19OwotCi0gIC8qIFlZUjJbWVlOXSAtLSBOdW1i
ZXIgb2Ygc3ltYm9scyBvbiB0aGUgcmlnaHQgaGFuZCBzaWRlIG9mIHJ1bGUgWVlOLiAgKi8KLXN0
YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlyMltdID0KLXsKLSAgICAgICAwLCAgICAgMiwgICAg
IDEsICAgICAxLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLAotICAg
ICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAg
ICAgMywgICAgIDMsCi0gICAgICAgMywgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMwotfTsKLQotCi0jZGVmaW5lIHl5ZXJyb2sgICAgICAgICAoeXllcnJzdGF0dXMgPSAw
KQotI2RlZmluZSB5eWNsZWFyaW4gICAgICAgKHl5Y2hhciA9IFlZRU1QVFkpCi0jZGVmaW5lIFlZ
RU1QVFkgICAgICAgICAoLTIpCi0jZGVmaW5lIFlZRU9GICAgICAgICAgICAwCi0KLSNkZWZpbmUg
WVlBQ0NFUFQgICAgICAgIGdvdG8geXlhY2NlcHRsYWIKLSNkZWZpbmUgWVlBQk9SVCAgICAgICAg
IGdvdG8geXlhYm9ydGxhYgotI2RlZmluZSBZWUVSUk9SICAgICAgICAgZ290byB5eWVycm9ybGFi
Ci0KKyNkZWZpbmUgeXllcnJvawkJKHl5ZXJyc3RhdHVzID0gMCkKKyNkZWZpbmUgeXljbGVhcmlu
CSh5eWNoYXIgPSBZWUVNUFRZKQorI2RlZmluZSBZWUVNUFRZCQkoLTIpCisjZGVmaW5lIFlZRU9G
CQkwCisKKyNkZWZpbmUgWVlBQ0NFUFQJZ290byB5eWFjY2VwdGxhYgorI2RlZmluZSBZWUFCT1JU
CQlnb3RvIHl5YWJvcnRsYWIKKyNkZWZpbmUgWVlFUlJPUgkJZ290byB5eWVycm9ybGFiCisKKwor
LyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3IuICBUaGlzIHJlbWFpbnMgaGVy
ZSB0ZW1wb3JhcmlseQorICAgdG8gZWFzZSB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1lYW5p
bmcgb2YgWVlFUlJPUiwgZm9yIEdDQy4KKyAgIE9uY2UgR0NDIHZlcnNpb24gMiBoYXMgc3VwcGxh
bnRlZCB2ZXJzaW9uIDEsIHRoaXMgY2FuIGdvLiAgSG93ZXZlciwKKyAgIFlZRkFJTCBhcHBlYXJz
IHRvIGJlIGluIHVzZS4gIE5ldmVydGhlbGVzcywgaXQgaXMgZm9ybWFsbHkgZGVwcmVjYXRlZAor
ICAgaW4gQmlzb24gMi40LjIncyBORVdTIGVudHJ5LCB3aGVyZSBhIHBsYW4gdG8gcGhhc2UgaXQg
b3V0IGlzCisgICBkaXNjdXNzZWQuICAqLworCisjZGVmaW5lIFlZRkFJTAkJZ290byB5eWVycmxh
YgorI2lmIGRlZmluZWQgWVlGQUlMCisgIC8qIFRoaXMgaXMgaGVyZSB0byBzdXBwcmVzcyB3YXJu
aW5ncyBmcm9tIHRoZSBHQ0MgY3BwJ3MKKyAgICAgLVd1bnVzZWQtbWFjcm9zLiAgTm9ybWFsbHkg
d2UgZG9uJ3Qgd29ycnkgYWJvdXQgdGhhdCB3YXJuaW5nLCBidXQKKyAgICAgc29tZSB1c2VycyBk
bywgYW5kIHdlIHdhbnQgdG8gbWFrZSBpdCBlYXN5IGZvciB1c2VycyB0byByZW1vdmUKKyAgICAg
WVlGQUlMIHVzZXMsIHdoaWNoIHdpbGwgcHJvZHVjZSB3YXJuaW5ncyBmcm9tIEJpc29uIDIuNS4g
ICovCisjZW5kaWYKIAogI2RlZmluZSBZWVJFQ09WRVJJTkcoKSAgKCEheXllcnJzdGF0dXMpCiAK
QEAgLTY2NywxNSArNjkzLDI3IEBAIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIGVsc2UgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAg
IHl5ZXJyb3IgKGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIpKTsg
XAotICAgICAgWVlFUlJPUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi13aGlsZSAoMCkKKyAgICAgIFlZRVJST1I7CQkJCQkJCVwK
KyAgICB9CQkJCQkJCQlcCit3aGlsZSAoWVlJRCAoMCkpCiAKIC8qIEVycm9yIHRva2VuIG51bWJl
ciAqLwotI2RlZmluZSBZWVRFUlJPUiAgICAgICAgMQotI2RlZmluZSBZWUVSUkNPREUgICAgICAg
MjU2CisjZGVmaW5lIFlZVEVSUk9SCTEKKyNkZWZpbmUgWVlFUlJDT0RFCTI1NgogCiAKKy8qIFRo
aXMgbWFjcm8gaXMgcHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICovCisjaWZu
ZGVmIFlZX0xPQ0FUSU9OX1BSSU5UCisjIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBM
b2MpICgodm9pZCkgMCkKKyNlbmRpZgorCisKKy8qIFlZTEVYIC0tIGNhbGxpbmcgYHl5bGV4JyB3
aXRoIHRoZSByaWdodCBhcmd1bWVudHMuICAqLworI2lmZGVmIFlZTEVYX1BBUkFNCisjIGRlZmlu
ZSBZWUxFWCB5eWxleCAoJnl5bHZhbCwgWVlMRVhfUEFSQU0pCisjZWxzZQorIyBkZWZpbmUgWVlM
RVggeXlsZXggKCZ5eWx2YWwsIGNvbnRleHQpCisjZW5kaWYKIAogLyogRW5hYmxlIGRlYnVnZ2lu
ZyBpZiByZXF1ZXN0ZWQuICAqLwogI2lmIFlZREVCVUcKQEAgLTY4NSw0NyArNzIzLDU4IEBAIHdo
aWxlICgwKQogIyAgZGVmaW5lIFlZRlBSSU5URiBmcHJpbnRmCiAjIGVuZGlmCiAKLSMgZGVmaW5l
IFlZRFBSSU5URihBcmdzKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLWRvIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5ZGVidWcpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBZWUZQUklOVEYgQXJnczsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLX0gd2hpbGUgKDApCisjIGRlZmluZSBZWURQUklOVEYo
QXJncykJCQlcCitkbyB7CQkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJCVwKKyAgICBZWUZQUklO
VEYgQXJnczsJCQkJXAorfSB3aGlsZSAoWVlJRCAoMCkpCiAKLS8qIFRoaXMgbWFjcm8gaXMgcHJv
dmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICovCi0jaWZuZGVmIFlZX0xPQ0FUSU9O
X1BSSU5UCi0jIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpICgodm9pZCkgMCkK
LSNlbmRpZgorIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9j
YXRpb24pCQkJICBcCitkbyB7CQkJCQkJCQkJICBcCisgIGlmICh5eWRlYnVnKQkJCQkJCQkJICBc
CisgICAgewkJCQkJCQkJCSAgXAorICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRs
ZSk7CQkJCQkgIFwKKyAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLAkJCQkJCSAgXAorCQkg
IFR5cGUsIFZhbHVlLCBjb250ZXh0KTsgXAorICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIp
OwkJCQkJCSAgXAorICAgIH0JCQkJCQkJCQkgIFwKK30gd2hpbGUgKFlZSUQgKDApKQogCiAKLSMg
ZGVmaW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKSAgICAg
ICAgICAgICAgICAgICAgXAotZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh5eWRlYnVnKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRs
ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB5eV9zeW1ib2xf
cHJpbnQgKHN0ZGVyciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgICAgICAgICAgIFR5cGUsIFZhbHVlLCBjb250ZXh0KTsgXAotICAgICAgWVlG
UFJJTlRGIChzdGRlcnIsICJcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gd2hpbGUgKDApCi0KLQotLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBQcmludCB0aGlzIHN5bWJvbCdz
IHZhbHVlIG9uIFlZT1VUUFVULiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0qLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUHJpbnQg
dGhpcyBzeW1ib2wgb24gWVlPVVRQVVQuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLwogCisvKkFSR1NVU0VEKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVk
IF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQg
X01TQ19WRVIpCiBzdGF0aWMgdm9pZAogeXlfc3ltYm9sX3ZhbHVlX3ByaW50IChGSUxFICp5eW91
dHB1dCwgaW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwLCBDb250ZXh0
ICpjb250ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5
b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KQorICAgIEZJTEUgKnl5b3V0cHV0Owor
ICAgIGludCB5eXR5cGU7CisgICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOworICAg
IENvbnRleHQgKmNvbnRleHQ7CisjZW5kaWYKIHsKICAgRklMRSAqeXlvID0geXlvdXRwdXQ7CiAg
IFlZVVNFICh5eW8pOwotICBZWVVTRSAoY29udGV4dCk7CiAgIGlmICgheXl2YWx1ZXApCiAgICAg
cmV0dXJuOworICBZWVVTRSAoY29udGV4dCk7CiAjIGlmZGVmIFlZUFJJTlQKICAgaWYgKHl5dHlw
ZSA8IFlZTlRPS0VOUykKICAgICBZWVBSSU5UICh5eW91dHB1dCwgeXl0b2tudW1beXl0eXBlXSwg
Knl5dmFsdWVwKTsKKyMgZWxzZQorICBZWVVTRSAoeXlvdXRwdXQpOwogIyBlbmRpZgotICBZWVVT
RSAoeXl0eXBlKTsKKyAgc3dpdGNoICh5eXR5cGUpCisgICAgeworICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgYnJlYWs7CisgICAgfQogfQogCiAKQEAgLTczMywxMSArNzgyLDIzIEBAIHl5X3N5bWJv
bF92YWx1ZV9wcmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3Qg
KiBjb25zdCB5eXZhbHVlCiB8IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAogYC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorI2lmIChkZWZpbmVkIF9fU1REQ19f
IHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMg
fHwgZGVmaW5lZCBfTVNDX1ZFUikKIHN0YXRpYyB2b2lkCiB5eV9zeW1ib2xfcHJpbnQgKEZJTEUg
Knl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXAsIENv
bnRleHQgKmNvbnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3N5bWJvbF9wcmludCAoeXlv
dXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpCisgICAgRklMRSAqeXlvdXRwdXQ7Cisg
ICAgaW50IHl5dHlwZTsKKyAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7CisgICAg
Q29udGV4dCAqY29udGV4dDsKKyNlbmRpZgogewotICBZWUZQUklOVEYgKHl5b3V0cHV0LCAiJXMg
JXMgKCIsCi0gICAgICAgICAgICAgeXl0eXBlIDwgWVlOVE9LRU5TID8gInRva2VuIiA6ICJudGVy
bSIsIHl5dG5hbWVbeXl0eXBlXSk7CisgIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCisgICAgWVlG
UFJJTlRGICh5eW91dHB1dCwgInRva2VuICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOworICBlbHNl
CisgICAgWVlGUFJJTlRGICh5eW91dHB1dCwgIm50ZXJtICVzICgiLCB5eXRuYW1lW3l5dHlwZV0p
OwogCiAgIHl5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAs
IGNvbnRleHQpOwogICBZWUZQUklOVEYgKHl5b3V0cHV0LCAiKSIpOwpAQCAtNzQ4LDggKzgwOSwx
NiBAQCB5eV9zeW1ib2xfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBF
IGNvbnN0ICogY29uc3QgeXl2YWx1ZXAsIENvbgogfCBUT1AgKGluY2x1ZGVkKS4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiBgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
IAorI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAg
IHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKIHN0YXRpYyB2b2lk
CiB5eV9zdGFja19wcmludCAoeXl0eXBlX2ludDE2ICp5eWJvdHRvbSwgeXl0eXBlX2ludDE2ICp5
eXRvcCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfc3RhY2tfcHJpbnQgKHl5Ym90dG9tLCB5eXRv
cCkKKyAgICB5eXR5cGVfaW50MTYgKnl5Ym90dG9tOworICAgIHl5dHlwZV9pbnQxNiAqeXl0b3A7
CisjZW5kaWYKIHsKICAgWVlGUFJJTlRGIChzdGRlcnIsICJTdGFjayBub3ciKTsKICAgZm9yICg7
IHl5Ym90dG9tIDw9IHl5dG9wOyB5eWJvdHRvbSsrKQpAQCAtNzYwLDQyICs4MjksNTAgQEAgeXlf
c3RhY2tfcHJpbnQgKHl5dHlwZV9pbnQxNiAqeXlib3R0b20sIHl5dHlwZV9pbnQxNiAqeXl0b3Ap
CiAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKIH0KIAotIyBkZWZpbmUgWVlfU1RBQ0tfUFJJ
TlQoQm90dG9tLCBUb3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWRvIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
IGlmICh5eWRlYnVnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIHl5X3N0YWNrX3ByaW50ICgoQm90dG9tKSwgKFRvcCkpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLX0gd2hpbGUgKDApCisjIGRlZmluZSBZWV9TVEFDS19QUklOVChC
b3R0b20sIFRvcCkJCQkJXAorZG8gewkJCQkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJCQkJXAor
ICAgIHl5X3N0YWNrX3ByaW50ICgoQm90dG9tKSwgKFRvcCkpOwkJCQlcCit9IHdoaWxlIChZWUlE
ICgwKSkKIAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS4KIHwgUmVwb3J0IHRoYXQgdGhlIFlZUlVMRSBpcyBnb2luZyB0byBiZSByZWR1Y2VkLiAg
fAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAK
KyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8
fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCiBzdGF0aWMgdm9pZAot
eXlfcmVkdWNlX3ByaW50ICh5eXR5cGVfaW50MTYgKnl5c3NwLCBZWVNUWVBFICp5eXZzcCwgaW50
IHl5cnVsZSwgQ29udGV4dCAqY29udGV4dCkKK3l5X3JlZHVjZV9wcmludCAoWVlTVFlQRSAqeXl2
c3AsIGludCB5eXJ1bGUsIENvbnRleHQgKmNvbnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5
X3JlZHVjZV9wcmludCAoeXl2c3AsIHl5cnVsZSwgY29udGV4dCkKKyAgICBZWVNUWVBFICp5eXZz
cDsKKyAgICBpbnQgeXlydWxlOworICAgIENvbnRleHQgKmNvbnRleHQ7CisjZW5kaWYKIHsKLSAg
dW5zaWduZWQgbG9uZyBpbnQgeXlsbm8gPSB5eXJsaW5lW3l5cnVsZV07CiAgIGludCB5eW5yaHMg
PSB5eXIyW3l5cnVsZV07CiAgIGludCB5eWk7CisgIHVuc2lnbmVkIGxvbmcgaW50IHl5bG5vID0g
eXlybGluZVt5eXJ1bGVdOwogICBZWUZQUklOVEYgKHN0ZGVyciwgIlJlZHVjaW5nIHN0YWNrIGJ5
IHJ1bGUgJWQgKGxpbmUgJWx1KTpcbiIsCi0gICAgICAgICAgICAgeXlydWxlIC0gMSwgeXlsbm8p
OworCSAgICAgeXlydWxlIC0gMSwgeXlsbm8pOwogICAvKiBUaGUgc3ltYm9scyBiZWluZyByZWR1
Y2VkLiAgKi8KICAgZm9yICh5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsrKQogICAgIHsKICAg
ICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsgMSk7Ci0gICAgICB5eV9z
eW1ib2xfcHJpbnQgKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgeXlzdG9zW3l5c3Nw
W3l5aSArIDEgLSB5eW5yaHNdXSwKLSAgICAgICAgICAgICAgICAgICAgICAgJih5eXZzcFsoeXlp
ICsgMSkgLSAoeXlucmhzKV0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCBjb250ZXh0KTsKKyAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJo
c1t5eXByaHNbeXlydWxlXSArIHl5aV0sCisJCSAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5
eW5yaHMpXSkKKwkJICAgICAgIAkJICAgICAgICwgY29udGV4dCk7CiAgICAgICBZWUZQUklOVEYg
KHN0ZGVyciwgIlxuIik7CiAgICAgfQogfQogCi0jIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVs
ZSkgICAgICAgICAgXAotZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeXlfcmVkdWNl
X3ByaW50ICh5eXNzcCwgeXl2c3AsIFJ1bGUsIGNvbnRleHQpOyBcCi19IHdoaWxlICgwKQorIyBk
ZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpCQlcCitkbyB7CQkJCQlcCisgIGlmICh5eWRlYnVn
KQkJCQlcCisgICAgeXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgUnVsZSwgY29udGV4dCk7IFwKK30g
d2hpbGUgKFlZSUQgKDApKQogCiAvKiBOb256ZXJvIG1lYW5zIHByaW50IHBhcnNlIHRyYWNlLiAg
SXQgaXMgbGVmdCB1bmluaXRpYWxpemVkIHNvIHRoYXQKICAgIG11bHRpcGxlIHBhcnNlcnMgY2Fu
IGNvZXhpc3QuICAqLwpAQCAtODA5LDcgKzg4Niw3IEBAIGludCB5eWRlYnVnOwogCiAKIC8qIFlZ
SU5JVERFUFRIIC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAgKi8KLSNp
Zm5kZWYgWVlJTklUREVQVEgKKyNpZm5kZWYJWVlJTklUREVQVEgKICMgZGVmaW5lIFlZSU5JVERF
UFRIIDIwMAogI2VuZGlmCiAKQEAgLTgzMiw4ICs5MDksMTUgQEAgaW50IHl5ZGVidWc7CiAjICAg
ZGVmaW5lIHl5c3RybGVuIHN0cmxlbgogIyAgZWxzZQogLyogUmV0dXJuIHRoZSBsZW5ndGggb2Yg
WVlTVFIuICAqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNf
XyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKIHN0
YXRpYyBZWVNJWkVfVAogeXlzdHJsZW4gKGNvbnN0IGNoYXIgKnl5c3RyKQorI2Vsc2UKK3N0YXRp
YyBZWVNJWkVfVAoreXlzdHJsZW4gKHl5c3RyKQorICAgIGNvbnN0IGNoYXIgKnl5c3RyOworI2Vu
ZGlmCiB7CiAgIFlZU0laRV9UIHl5bGVuOwogICBmb3IgKHl5bGVuID0gMDsgeXlzdHJbeXlsZW5d
OyB5eWxlbisrKQpAQCAtODQ5LDggKzkzMywxNiBAQCB5eXN0cmxlbiAoY29uc3QgY2hhciAqeXlz
dHIpCiAjICBlbHNlCiAvKiBDb3B5IFlZU1JDIHRvIFlZREVTVCwgcmV0dXJuaW5nIHRoZSBhZGRy
ZXNzIG9mIHRoZSB0ZXJtaW5hdGluZyAnXDAnIGluCiAgICBZWURFU1QuICAqLworI2lmIChkZWZp
bmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQg
X19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKIHN0YXRpYyBjaGFyICoKIHl5c3RwY3B5
IChjaGFyICp5eWRlc3QsIGNvbnN0IGNoYXIgKnl5c3JjKQorI2Vsc2UKK3N0YXRpYyBjaGFyICoK
K3l5c3RwY3B5ICh5eWRlc3QsIHl5c3JjKQorICAgIGNoYXIgKnl5ZGVzdDsKKyAgICBjb25zdCBj
aGFyICp5eXNyYzsKKyNlbmRpZgogewogICBjaGFyICp5eWQgPSB5eWRlc3Q7CiAgIGNvbnN0IGNo
YXIgKnl5cyA9IHl5c3JjOwpAQCAtODgwLDI3ICs5NzIsMjcgQEAgeXl0bmFtZXJyIChjaGFyICp5
eXJlcywgY29uc3QgY2hhciAqeXlzdHIpCiAgICAgICBjaGFyIGNvbnN0ICp5eXAgPSB5eXN0cjsK
IAogICAgICAgZm9yICg7OykKLSAgICAgICAgc3dpdGNoICgqKyt5eXApCi0gICAgICAgICAgewot
ICAgICAgICAgIGNhc2UgJ1wnJzoKLSAgICAgICAgICBjYXNlICcsJzoKLSAgICAgICAgICAgIGdv
dG8gZG9fbm90X3N0cmlwX3F1b3RlczsKLQotICAgICAgICAgIGNhc2UgJ1xcJzoKLSAgICAgICAg
ICAgIGlmICgqKyt5eXAgIT0gJ1xcJykKLSAgICAgICAgICAgICAgZ290byBkb19ub3Rfc3RyaXBf
cXVvdGVzOwotICAgICAgICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KLSAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgaWYgKHl5cmVzKQotICAgICAgICAgICAgICB5eXJlc1t5eW5dID0g
Knl5cDsKLSAgICAgICAgICAgIHl5bisrOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
ICBjYXNlICciJzoKLSAgICAgICAgICAgIGlmICh5eXJlcykKLSAgICAgICAgICAgICAgeXlyZXNb
eXluXSA9ICdcMCc7Ci0gICAgICAgICAgICByZXR1cm4geXluOwotICAgICAgICAgIH0KKwlzd2l0
Y2ggKCorK3l5cCkKKwkgIHsKKwkgIGNhc2UgJ1wnJzoKKwkgIGNhc2UgJywnOgorCSAgICBnb3Rv
IGRvX25vdF9zdHJpcF9xdW90ZXM7CisKKwkgIGNhc2UgJ1xcJzoKKwkgICAgaWYgKCorK3l5cCAh
PSAnXFwnKQorCSAgICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKKwkgICAgLyogRmFsbCB0
aHJvdWdoLiAgKi8KKwkgIGRlZmF1bHQ6CisJICAgIGlmICh5eXJlcykKKwkgICAgICB5eXJlc1t5
eW5dID0gKnl5cDsKKwkgICAgeXluKys7CisJICAgIGJyZWFrOworCisJICBjYXNlICciJzoKKwkg
ICAgaWYgKHl5cmVzKQorCSAgICAgIHl5cmVzW3l5bl0gPSAnXDAnOworCSAgICByZXR1cm4geXlu
OworCSAgfQogICAgIGRvX25vdF9zdHJpcF9xdW90ZXM6IDsKICAgICB9CiAKQEAgLTkyMywxMSAr
MTAxNSwxMSBAQCBzdGF0aWMgaW50CiB5eXN5bnRheF9lcnJvciAoWVlTSVpFX1QgKnl5bXNnX2Fs
bG9jLCBjaGFyICoqeXltc2csCiAgICAgICAgICAgICAgICAgeXl0eXBlX2ludDE2ICp5eXNzcCwg
aW50IHl5dG9rZW4pCiB7Ci0gIFlZU0laRV9UIHl5c2l6ZTAgPSB5eXRuYW1lcnIgKFlZX05VTExQ
VFIsIHl5dG5hbWVbeXl0b2tlbl0pOworICBZWVNJWkVfVCB5eXNpemUwID0geXl0bmFtZXJyIChZ
WV9OVUxMLCB5eXRuYW1lW3l5dG9rZW5dKTsKICAgWVlTSVpFX1QgeXlzaXplID0geXlzaXplMDsK
ICAgZW51bSB7IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0gPSA1IH07CiAgIC8qIEludGVy
bmF0aW9uYWxpemVkIGZvcm1hdCBzdHJpbmcuICovCi0gIGNvbnN0IGNoYXIgKnl5Zm9ybWF0ID0g
WVlfTlVMTFBUUjsKKyAgY29uc3QgY2hhciAqeXlmb3JtYXQgPSBZWV9OVUxMOwogICAvKiBBcmd1
bWVudHMgb2YgeXlmb3JtYXQuICovCiAgIGNoYXIgY29uc3QgKnl5YXJnW1lZRVJST1JfVkVSQk9T
RV9BUkdTX01BWElNVU1dOwogICAvKiBOdW1iZXIgb2YgcmVwb3J0ZWQgdG9rZW5zIChvbmUgZm9y
IHRoZSAidW5leHBlY3RlZCIsIG9uZSBwZXIKQEAgLTkzNSw2ICsxMDI3LDEwIEBAIHl5c3ludGF4
X2Vycm9yIChZWVNJWkVfVCAqeXltc2dfYWxsb2MsIGNoYXIgKip5eW1zZywKICAgaW50IHl5Y291
bnQgPSAwOwogCiAgIC8qIFRoZXJlIGFyZSBtYW55IHBvc3NpYmlsaXRpZXMgaGVyZSB0byBjb25z
aWRlcjoKKyAgICAgLSBBc3N1bWUgWVlGQUlMIGlzIG5vdCB1c2VkLiAgSXQncyB0b28gZmxhd2Vk
IHRvIGNvbnNpZGVyLiAgU2VlCisgICAgICAgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUv
aHRtbC9iaXNvbi1wYXRjaGVzLzIwMDktMTIvbXNnMDAwMjQuaHRtbD4KKyAgICAgICBmb3IgZGV0
YWlscy4gIFlZRVJST1IgaXMgZmluZSBhcyBpdCBkb2VzIG5vdCBpbnZva2UgdGhpcworICAgICAg
IGZ1bmN0aW9uLgogICAgICAtIElmIHRoaXMgc3RhdGUgaXMgYSBjb25zaXN0ZW50IHN0YXRlIHdp
dGggYSBkZWZhdWx0IGFjdGlvbiwgdGhlbgogICAgICAgIHRoZSBvbmx5IHdheSB0aGlzIGZ1bmN0
aW9uIHdhcyBpbnZva2VkIGlzIGlmIHRoZSBkZWZhdWx0IGFjdGlvbgogICAgICAgIGlzIGFuIGVy
cm9yIGFjdGlvbi4gIEluIHRoYXQgY2FzZSwgZG9uJ3QgY2hlY2sgZm9yIGV4cGVjdGVkCkBAIC05
ODQsNyArMTA4MCw3IEBAIHl5c3ludGF4X2Vycm9yIChZWVNJWkVfVCAqeXltc2dfYWxsb2MsIGNo
YXIgKip5eW1zZywKICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB5eWFyZ1t5
eWNvdW50KytdID0geXl0bmFtZVt5eXhdOwogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgIFlZU0laRV9UIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXRuYW1lcnIgKFlZX05VTExQVFIs
IHl5dG5hbWVbeXl4XSk7CisgICAgICAgICAgICAgICAgICBZWVNJWkVfVCB5eXNpemUxID0geXlz
aXplICsgeXl0bmFtZXJyIChZWV9OVUxMLCB5eXRuYW1lW3l5eF0pOwogICAgICAgICAgICAgICAg
ICAgaWYgKCEgKHl5c2l6ZSA8PSB5eXNpemUxCiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYg
eXlzaXplMSA8PSBZWVNUQUNLX0FMTE9DX01BWElNVU0pKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gMjsKQEAgLTEwNTEsMTggKzExNDcsMzMgQEAgeXlzeW50YXhfZXJyb3IgKFlZU0laRV9U
ICp5eW1zZ19hbGxvYywgY2hhciAqKnl5bXNnLAogfCBSZWxlYXNlIHRoZSBtZW1vcnkgYXNzb2Np
YXRlZCB0byB0aGlzIHN5bWJvbC4gIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qQVJHU1VTRUQqLworI2lmIChkZWZpbmVkIF9fU1REQ19f
IHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMg
fHwgZGVmaW5lZCBfTVNDX1ZFUikKIHN0YXRpYyB2b2lkCiB5eWRlc3RydWN0IChjb25zdCBjaGFy
ICp5eW1zZywgaW50IHl5dHlwZSwgWVlTVFlQRSAqeXl2YWx1ZXAsIENvbnRleHQgKmNvbnRleHQp
CisjZWxzZQorc3RhdGljIHZvaWQKK3l5ZGVzdHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVw
LCBjb250ZXh0KQorICAgIGNvbnN0IGNoYXIgKnl5bXNnOworICAgIGludCB5eXR5cGU7CisgICAg
WVlTVFlQRSAqeXl2YWx1ZXA7CisgICAgQ29udGV4dCAqY29udGV4dDsKKyNlbmRpZgogewogICBZ
WVVTRSAoeXl2YWx1ZXApOwogICBZWVVTRSAoY29udGV4dCk7CisKICAgaWYgKCF5eW1zZykKICAg
ICB5eW1zZyA9ICJEZWxldGluZyI7CiAgIFlZX1NZTUJPTF9QUklOVCAoeXltc2csIHl5dHlwZSwg
eXl2YWx1ZXAsIHl5bG9jYXRpb25wKTsKIAotICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpF
RF9CRUdJTgotICBZWVVTRSAoeXl0eXBlKTsKLSAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTEla
RURfRU5ECisgIHN3aXRjaCAoeXl0eXBlKQorICAgIHsKKworICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgYnJlYWs7CisgICAgfQogfQogCiAKQEAgLTEwNzIsMTggKzExODMsNTYgQEAgeXlkZXN0cnVj
dCAoY29uc3QgY2hhciAqeXltc2csIGludCB5eXR5cGUsIFlZU1RZUEUgKnl5dmFsdWVwLCBDb250
ZXh0ICpjb250ZXh0KQogfCB5eXBhcnNlLiAgfAogYC0tLS0tLS0tLS0qLwogCisjaWZkZWYgWVlQ
QVJTRV9QQVJBTQorI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNf
XyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK2lu
dAoreXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSkKKyNlbHNlCitpbnQKK3l5cGFyc2UgKFlZ
UEFSU0VfUEFSQU0pCisgICAgdm9pZCAqWVlQQVJTRV9QQVJBTTsKKyNlbmRpZgorI2Vsc2UgLyog
ISBZWVBBUlNFX1BBUkFNICovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5
OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0Nf
VkVSKQogaW50CiB5eXBhcnNlIChDb250ZXh0ICpjb250ZXh0KQorI2Vsc2UKK2ludAoreXlwYXJz
ZSAoY29udGV4dCkKKyAgICBDb250ZXh0ICpjb250ZXh0OworI2VuZGlmCisjZW5kaWYKIHsKIC8q
IFRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8KIGludCB5eWNoYXI7CiAKIAotLyogVGhlIHNlbWFu
dGljIHZhbHVlIG9mIHRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8KKyNpZiBkZWZpbmVkIF9fR05V
Q19fICYmIDQwNyA8PSBfX0dOVUNfXyAqIDEwMCArIF9fR05VQ19NSU5PUl9fCisvKiBTdXBwcmVz
cyBhbiBpbmNvcnJlY3QgZGlhZ25vc3RpYyBhYm91dCB5eWx2YWwgYmVpbmcgdW5pbml0aWFsaXpl
ZC4gICovCisjIGRlZmluZSBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTiBcCisg
ICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIHB1c2giKSBcCisgICAgX1ByYWdtYSAoIkdDQyBk
aWFnbm9zdGljIGlnbm9yZWQgXCItV3VuaW5pdGlhbGl6ZWRcIiIpXAorICAgIF9QcmFnbWEgKCJH
Q0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdtYXliZS11bmluaXRpYWxpemVkXCIiKQorIyBkZWZp
bmUgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5EIFwKKyAgICBfUHJhZ21hICgiR0ND
IGRpYWdub3N0aWMgcG9wIikKKyNlbHNlCiAvKiBEZWZhdWx0IHZhbHVlIHVzZWQgZm9yIGluaXRp
YWxpemF0aW9uLCBmb3IgcGFjaWZ5aW5nIG9sZGVyIEdDQ3MKICAgIG9yIG5vbi1HQ0MgY29tcGls
ZXJzLiAgKi8KLVlZX0lOSVRJQUxfVkFMVUUgKHN0YXRpYyBZWVNUWVBFIHl5dmFsX2RlZmF1bHQ7
KQotWVlTVFlQRSB5eWx2YWwgWVlfSU5JVElBTF9WQUxVRSAoPSB5eXZhbF9kZWZhdWx0KTsKK3N0
YXRpYyBZWVNUWVBFIHl5dmFsX2RlZmF1bHQ7CisjIGRlZmluZSBZWV9JTklUSUFMX1ZBTFVFKFZh
bHVlKSA9IFZhbHVlCisjZW5kaWYKKyNpZm5kZWYgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTEla
RURfQkVHSU4KKyMgZGVmaW5lIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOCisj
IGRlZmluZSBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9FTkQKKyNlbmRpZgorI2lmbmRl
ZiBZWV9JTklUSUFMX1ZBTFVFCisjIGRlZmluZSBZWV9JTklUSUFMX1ZBTFVFKFZhbHVlKSAvKiBO
b3RoaW5nLiAqLworI2VuZGlmCisKKy8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9va2Fo
ZWFkIHN5bWJvbC4gICovCitZWVNUWVBFIHl5bHZhbCBZWV9JTklUSUFMX1ZBTFVFKHl5dmFsX2Rl
ZmF1bHQpOwogCiAgICAgLyogTnVtYmVyIG9mIHN5bnRheCBlcnJvcnMgc28gZmFyLiAgKi8KICAg
ICBpbnQgeXluZXJyczsKQEAgLTEwOTMsOCArMTI0Miw4IEBAIFlZU1RZUEUgeXlsdmFsIFlZX0lO
SVRJQUxfVkFMVUUgKD0geXl2YWxfZGVmYXVsdCk7CiAgICAgaW50IHl5ZXJyc3RhdHVzOwogCiAg
ICAgLyogVGhlIHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6Ci0gICAgICAgJ3l5c3MnOiByZWxhdGVk
IHRvIHN0YXRlcy4KLSAgICAgICAneXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLgor
ICAgICAgIGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMuCisgICAgICAgYHl5dnMnOiByZWxhdGVk
IHRvIHNlbWFudGljIHZhbHVlcy4KIAogICAgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhyb3Vn
aCBzZXBhcmF0ZSBwb2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdwogICAgICAgIHRvIHJlYWxs
b2NhdGUgdGhlbSBlbHNld2hlcmUuICAqLwpAQCAtMTE2MiwyMyArMTMxMSwyMyBAQCBZWVNUWVBF
IHl5bHZhbCBZWV9JTklUSUFMX1ZBTFVFICg9IHl5dmFsX2RlZmF1bHQpOwogCiAjaWZkZWYgeXlv
dmVyZmxvdwogICAgICAgewotICAgICAgICAvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxv
Y2F0ZSB0aGUgc3RhY2suICBVc2UgY29waWVzIG9mCi0gICAgICAgICAgIHRoZXNlIHNvIHRoYXQg
dGhlICYncyBkb24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8KLSAgICAgICAgICAgbWVtb3J5
LiAgKi8KLSAgICAgICAgWVlTVFlQRSAqeXl2czEgPSB5eXZzOwotICAgICAgICB5eXR5cGVfaW50
MTYgKnl5c3MxID0geXlzczsKLQotICAgICAgICAvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVz
cyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKLSAgICAgICAgICAgZGF0YSBpbiB1c2Ug
aW4gdGhhdCBzdGFjaywgaW4gYnl0ZXMuICBUaGlzIHVzZWQgdG8gYmUgYQotICAgICAgICAgICBj
b25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0aGF0IG1pZ2h0
Ci0gICAgICAgICAgIGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLwot
ICAgICAgICB5eW92ZXJmbG93IChZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSwKLSAgICAgICAgICAg
ICAgICAgICAgJnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCksCi0gICAgICAgICAgICAg
ICAgICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAotICAgICAgICAgICAgICAg
ICAgICAmeXlzdGFja3NpemUpOwotCi0gICAgICAgIHl5c3MgPSB5eXNzMTsKLSAgICAgICAgeXl2
cyA9IHl5dnMxOworCS8qIEdpdmUgdXNlciBhIGNoYW5jZSB0byByZWFsbG9jYXRlIHRoZSBzdGFj
ay4gIFVzZSBjb3BpZXMgb2YKKwkgICB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2Ug
dGhlIHJlYWwgb25lcyBpbnRvCisJICAgbWVtb3J5LiAgKi8KKwlZWVNUWVBFICp5eXZzMSA9IHl5
dnM7CisJeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7CisKKwkvKiBFYWNoIHN0YWNrIHBvaW50
ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKKwkgICBkYXRhIGluIHVz
ZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4gIFRoaXMgdXNlZCB0byBiZSBhCisJICAgY29uZGl0
aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3byBleHRyYSBhcmdzLCBidXQgdGhhdCBtaWdodAorCSAg
IGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLworCXl5b3ZlcmZsb3cg
KFlZXygibWVtb3J5IGV4aGF1c3RlZCIpLAorCQkgICAgJnl5c3MxLCB5eXNpemUgKiBzaXplb2Yg
KCp5eXNzcCksCisJCSAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKKwkJICAg
ICZ5eXN0YWNrc2l6ZSk7CisKKwl5eXNzID0geXlzczE7CisJeXl2cyA9IHl5dnMxOwogICAgICAg
fQogI2Vsc2UgLyogbm8geXlvdmVyZmxvdyAqLwogIyBpZm5kZWYgWVlTVEFDS19SRUxPQ0FURQpA
QCAtMTE4NiwyMiArMTMzNSwyMiBAQCBZWVNUWVBFIHl5bHZhbCBZWV9JTklUSUFMX1ZBTFVFICg9
IHl5dmFsX2RlZmF1bHQpOwogIyBlbHNlCiAgICAgICAvKiBFeHRlbmQgdGhlIHN0YWNrIG91ciBv
d24gd2F5LiAgKi8KICAgICAgIGlmIChZWU1BWERFUFRIIDw9IHl5c3RhY2tzaXplKQotICAgICAg
ICBnb3RvIHl5ZXhoYXVzdGVkbGFiOworCWdvdG8geXlleGhhdXN0ZWRsYWI7CiAgICAgICB5eXN0
YWNrc2l6ZSAqPSAyOwogICAgICAgaWYgKFlZTUFYREVQVEggPCB5eXN0YWNrc2l6ZSkKLSAgICAg
ICAgeXlzdGFja3NpemUgPSBZWU1BWERFUFRIOworCXl5c3RhY2tzaXplID0gWVlNQVhERVBUSDsK
IAogICAgICAgewotICAgICAgICB5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKLSAgICAgICAg
dW5pb24geXlhbGxvYyAqeXlwdHIgPQotICAgICAgICAgICh1bmlvbiB5eWFsbG9jICopIFlZU1RB
Q0tfQUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7Ci0gICAgICAgIGlmICghIHl5
cHRyKQotICAgICAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7Ci0gICAgICAgIFlZU1RBQ0tfUkVM
T0NBVEUgKHl5c3NfYWxsb2MsIHl5c3MpOwotICAgICAgICBZWVNUQUNLX1JFTE9DQVRFICh5eXZz
X2FsbG9jLCB5eXZzKTsKKwl5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKKwl1bmlvbiB5eWFs
bG9jICp5eXB0ciA9CisJICAodW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZWVNUQUNL
X0JZVEVTICh5eXN0YWNrc2l6ZSkpOworCWlmICghIHl5cHRyKQorCSAgZ290byB5eWV4aGF1c3Rl
ZGxhYjsKKwlZWVNUQUNLX1JFTE9DQVRFICh5eXNzX2FsbG9jLCB5eXNzKTsKKwlZWVNUQUNLX1JF
TE9DQVRFICh5eXZzX2FsbG9jLCB5eXZzKTsKICMgIHVuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKLSAg
ICAgICAgaWYgKHl5c3MxICE9IHl5c3NhKQotICAgICAgICAgIFlZU1RBQ0tfRlJFRSAoeXlzczEp
OworCWlmICh5eXNzMSAhPSB5eXNzYSkKKwkgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOwogICAgICAg
fQogIyBlbmRpZgogI2VuZGlmIC8qIG5vIHl5b3ZlcmZsb3cgKi8KQEAgLTEyMTAsMTAgKzEzNTks
MTAgQEAgWVlTVFlQRSB5eWx2YWwgWVlfSU5JVElBTF9WQUxVRSAoPSB5eXZhbF9kZWZhdWx0KTsK
ICAgICAgIHl5dnNwID0geXl2cyArIHl5c2l6ZSAtIDE7CiAKICAgICAgIFlZRFBSSU5URiAoKHN0
ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKLSAgICAgICAgICAgICAgICAg
ICh1bnNpZ25lZCBsb25nIGludCkgeXlzdGFja3NpemUpKTsKKwkJICAodW5zaWduZWQgbG9uZyBp
bnQpIHl5c3RhY2tzaXplKSk7CiAKICAgICAgIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9
IHl5c3NwKQotICAgICAgICBZWUFCT1JUOworCVlZQUJPUlQ7CiAgICAgfQogCiAgIFlZRFBSSU5U
RiAoKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7CkBAIC0xMjQyLDcg
KzEzOTEsNyBAQCB5eWJhY2t1cDoKICAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQogICAgIHsKICAg
ICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIikpOwotICAgICAgeXlj
aGFyID0geXlsZXggKCZ5eWx2YWwsIGNvbnRleHQpOworICAgICAgeXljaGFyID0gWVlMRVg7CiAg
ICAgfQogCiAgIGlmICh5eWNoYXIgPD0gWVlFT0YpCkBAIC0xMzA3LDcgKzE0NTYsNyBAQCB5eXJl
ZHVjZToKICAgeXlsZW4gPSB5eXIyW3l5bl07CiAKICAgLyogSWYgWVlMRU4gaXMgbm9uemVybywg
aW1wbGVtZW50IHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBhY3Rpb246Ci0gICAgICckJCA9ICQx
Jy4KKyAgICAgYCQkID0gJDEnLgogCiAgICAgIE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZyBsaW5l
IHNldHMgWVlWQUwgdG8gZ2FyYmFnZS4KICAgICAgVGhpcyBiZWhhdmlvciBpcyB1bmRvY3VtZW50
ZWQgYW5kIEJpc29uCkBAIC0xMzIzLDIxNCArMTQ3MiwxOTAgQEAgeXlyZWR1Y2U6CiAgICAgICAg
IGNhc2UgMjoKIAogICAgIHsKLSAgICAgICAgKihjb250ZXh0LT5yZXN1bHQpID0gc3RhdGljX2Nh
c3Q8aW50PigoeXl2c3BbMF0pKTsKKyAgICAgICAgKihjb250ZXh0LT5yZXN1bHQpID0gc3RhdGlj
X2Nhc3Q8aW50PigoeXl2c3BbKDEpIC0gKDEpXSkpOwogICAgICAgICBZWUFDQ0VQVDsKICAgICB9
Ci0KICAgICBicmVhazsKIAogICBjYXNlIDQ6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAo
eXl2c3BbLTJdKSB8fCAoeXl2c3BbMF0pOworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAt
ICgzKV0pIHx8ICh5eXZzcFsoMykgLSAoMyldKTsKICAgICB9Ci0KICAgICBicmVhazsKIAogICBj
YXNlIDU6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3BbLTJdKSAmJiAoeXl2c3Bb
MF0pOworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICYmICh5eXZzcFsoMykg
LSAoMyldKTsKICAgICB9Ci0KICAgICBicmVhazsKIAogICBjYXNlIDY6CiAKICAgICB7Ci0gICAg
ICAgICh5eXZhbCkgPSAoeXl2c3BbLTJdKSB8ICh5eXZzcFswXSk7CisgICAgICAgICh5eXZhbCkg
PSAoeXl2c3BbKDEpIC0gKDMpXSkgfCAoeXl2c3BbKDMpIC0gKDMpXSk7CiAgICAgfQotCiAgICAg
YnJlYWs7CiAKICAgY2FzZSA3OgogCiAgICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWy0y
XSkgXiAoeXl2c3BbMF0pOworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIF4g
KHl5dnNwWygzKSAtICgzKV0pOwogICAgIH0KLQogICAgIGJyZWFrOwogCiAgIGNhc2UgODoKIAog
ICAgIHsKLSAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFstMl0pICYgKHl5dnNwWzBdKTsKKyAgICAg
ICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAmICh5eXZzcFsoMykgLSAoMyldKTsKICAg
ICB9Ci0KICAgICBicmVhazsKIAogICBjYXNlIDk6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbCkg
PSAoeXl2c3BbLTJdKSAhPSAoeXl2c3BbMF0pOworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygx
KSAtICgzKV0pICE9ICh5eXZzcFsoMykgLSAoMyldKTsKICAgICB9Ci0KICAgICBicmVhazsKIAog
ICBjYXNlIDEwOgogCiAgICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWy0yXSkgPT0gKHl5
dnNwWzBdKTsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA9PSAoeXl2c3Bb
KDMpIC0gKDMpXSk7CiAgICAgfQotCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMToKIAogICAgIHsK
LSAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFstMl0pID49ICh5eXZzcFswXSk7CisgICAgICAgICh5
eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPj0gKHl5dnNwWygzKSAtICgzKV0pOwogICAgIH0K
LQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTI6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAo
eXl2c3BbLTJdKSA8PSAoeXl2c3BbMF0pOworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAt
ICgzKV0pIDw9ICh5eXZzcFsoMykgLSAoMyldKTsKICAgICB9Ci0KICAgICBicmVhazsKIAogICBj
YXNlIDEzOgogCiAgICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWy0yXSkgPiAoeXl2c3Bb
MF0pOworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pID4gKHl5dnNwWygzKSAt
ICgzKV0pOwogICAgIH0KLQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQ6CiAKICAgICB7Ci0gICAg
ICAgICh5eXZhbCkgPSAoeXl2c3BbLTJdKSA8ICh5eXZzcFswXSk7CisgICAgICAgICh5eXZhbCkg
PSAoeXl2c3BbKDEpIC0gKDMpXSkgPCAoeXl2c3BbKDMpIC0gKDMpXSk7CiAgICAgfQotCiAgICAg
YnJlYWs7CiAKICAgY2FzZSAxNToKIAogICAgIHsKLSAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFst
Ml0pID4+ICh5eXZzcFswXSk7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkg
Pj4gKHl5dnNwWygzKSAtICgzKV0pOwogICAgIH0KLQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY6
CiAKICAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3BbLTJdKSA8PCAoeXl2c3BbMF0pOwor
ICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIDw8ICh5eXZzcFsoMykgLSAoMyld
KTsKICAgICB9Ci0KICAgICBicmVhazsKIAogICBjYXNlIDE3OgogCiAgICAgewotICAgICAgICAo
eXl2YWwpID0gKHl5dnNwWy0yXSkgLSAoeXl2c3BbMF0pOworICAgICAgICAoeXl2YWwpID0gKHl5
dnNwWygxKSAtICgzKV0pIC0gKHl5dnNwWygzKSAtICgzKV0pOwogICAgIH0KLQogICAgIGJyZWFr
OwogCiAgIGNhc2UgMTg6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3BbLTJdKSAr
ICh5eXZzcFswXSk7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgKyAoeXl2
c3BbKDMpIC0gKDMpXSk7CiAgICAgfQotCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOToKIAogICAg
IHsKLSAgICAgICAgaWYgKCh5eXZzcFswXSkgPT0gMCkgeworICAgICAgICBpZiAoKHl5dnNwWygz
KSAtICgzKV0pID09IDApIHsKICAgICAgICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBzdHJlYW07
Ci0gICAgICAgICAgICBzdHJlYW0gPDwgKHl5dnNwWy0yXSkgPDwgIiAlICIgPDwgKHl5dnNwWzBd
KTsKKyAgICAgICAgICAgIHN0cmVhbSA8PCAoeXl2c3BbKDEpIC0gKDMpXSkgPDwgIiAlICIgPDwg
KHl5dnNwWygzKSAtICgzKV0pOwogICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVh
bS5zdHIoKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRp
YWdub3N0aWNzOjpESVZJU0lPTl9CWV9aRVJPLAorICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25v
c3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OlBQX0RJVklTSU9OX0JZX1pFUk8sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2Nh
dGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0
cigpKTsKICAgICAgICAgICAgIFlZQUJPUlQ7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAoeXl2YWwpID0gKHl5dnNwWy0yXSkgJSAoeXl2c3BbMF0pOworICAgICAgICAgICAgKHl5dmFs
KSA9ICh5eXZzcFsoMSkgLSAoMyldKSAlICh5eXZzcFsoMykgLSAoMyldKTsKICAgICAgICAgfQog
ICAgIH0KLQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjA6CiAKICAgICB7Ci0gICAgICAgIGlmICgo
eXl2c3BbMF0pID09IDApIHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMykgLSAoMyldKSA9PSAwKSB7
CiAgICAgICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyZWFtOwotICAgICAgICAgICAgc3Ry
ZWFtIDw8ICh5eXZzcFstMl0pIDw8ICIgLyAiIDw8ICh5eXZzcFswXSk7CisgICAgICAgICAgICBz
dHJlYW0gPDwgKHl5dnNwWygxKSAtICgzKV0pIDw8ICIgLyAiIDw8ICh5eXZzcFsoMykgLSAoMyld
KTsKICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBzdHJlYW0uc3RyKCk7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RElWSVNJ
T05fQllfWkVSTywKKyAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6
OkRpYWdub3N0aWNzOjpQUF9ESVZJU0lPTl9CWV9aRVJPLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuY19zdHIoKSk7CiAgICAgICAgICAg
ICBZWUFCT1JUOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgKHl5dmFsKSA9ICh5eXZz
cFstMl0pIC8gKHl5dnNwWzBdKTsKKyAgICAgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0g
KDMpXSkgLyAoeXl2c3BbKDMpIC0gKDMpXSk7CiAgICAgICAgIH0KICAgICB9Ci0KICAgICBicmVh
azsKIAogICBjYXNlIDIxOgogCiAgICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWy0yXSkg
KiAoeXl2c3BbMF0pOworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICogKHl5
dnNwWygzKSAtICgzKV0pOwogICAgIH0KLQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjI6CiAKICAg
ICB7Ci0gICAgICAgICh5eXZhbCkgPSAhICh5eXZzcFswXSk7CisgICAgICAgICh5eXZhbCkgPSAh
ICh5eXZzcFsoMikgLSAoMildKTsKICAgICB9Ci0KICAgICBicmVhazsKIAogICBjYXNlIDIzOgog
CiAgICAgewotICAgICAgICAoeXl2YWwpID0gfiAoeXl2c3BbMF0pOworICAgICAgICAoeXl2YWwp
ID0gfiAoeXl2c3BbKDIpIC0gKDIpXSk7CiAgICAgfQotCiAgICAgYnJlYWs7CiAKICAgY2FzZSAy
NDoKIAogICAgIHsKLSAgICAgICAgKHl5dmFsKSA9IC0gKHl5dnNwWzBdKTsKKyAgICAgICAgKHl5
dmFsKSA9IC0gKHl5dnNwWygyKSAtICgyKV0pOwogICAgIH0KLQogICAgIGJyZWFrOwogCiAgIGNh
c2UgMjU6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbCkgPSArICh5eXZzcFswXSk7CisgICAgICAg
ICh5eXZhbCkgPSArICh5eXZzcFsoMikgLSAoMildKTsKICAgICB9Ci0KICAgICBicmVhazsKIAog
ICBjYXNlIDI2OgogCiAgICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWy0xXSk7CisgICAg
ICAgICh5eXZhbCkgPSAoeXl2c3BbKDIpIC0gKDMpXSk7CiAgICAgfQotCiAgICAgYnJlYWs7CiAK
IApAQCAtMTU1Niw3ICsxNjgxLDcgQEAgeXlyZWR1Y2U6CiAKICAgKisreXl2c3AgPSB5eXZhbDsK
IAotICAvKiBOb3cgJ3NoaWZ0JyB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24uICBEZXRlcm1p
bmUgd2hhdCBzdGF0ZQorICAvKiBOb3cgYHNoaWZ0JyB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rp
b24uICBEZXRlcm1pbmUgd2hhdCBzdGF0ZQogICAgICB0aGF0IGdvZXMgdG8sIGJhc2VkIG9uIHRo
ZSBzdGF0ZSB3ZSBwb3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUKICAgICAgbnVtYmVyIHJlZHVj
ZWQgYnkuICAqLwogCkBAIC0xNTcxLDkgKzE2OTYsOSBAQCB5eXJlZHVjZToKICAgZ290byB5eW5l
d3N0YXRlOwogCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18
IHl5ZXJybGFiIC0tIGhlcmUgb24gZGV0ZWN0aW5nIGVycm9yLiAgfAotYC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLgorfCB5eWVycmxhYiAtLSBoZXJlIG9uIGRldGVjdGluZyBlcnJvciB8CitgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHl5ZXJybGFiOgogICAvKiBNYWtl
IHN1cmUgd2UgaGF2ZSBsYXRlc3QgbG9va2FoZWFkIHRyYW5zbGF0aW9uLiAgU2VlIGNvbW1lbnRz
IGF0CiAgICAgIHVzZXIgc2VtYW50aWMgYWN0aW9ucyBmb3Igd2h5IHRoaXMgaXMgbmVjZXNzYXJ5
LiAgKi8KQEAgLTE2MjQsMjAgKzE3NDksMjAgQEAgeXllcnJsYWI6CiAgIGlmICh5eWVycnN0YXR1
cyA9PSAzKQogICAgIHsKICAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVz
ZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgYW4KLSAgICAgICAgIGVycm9yLCBkaXNjYXJkIGl0LiAg
Ki8KKwkgZXJyb3IsIGRpc2NhcmQgaXQuICAqLwogCiAgICAgICBpZiAoeXljaGFyIDw9IFlZRU9G
KQotICAgICAgICB7Ci0gICAgICAgICAgLyogUmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlu
cHV0LiAgKi8KLSAgICAgICAgICBpZiAoeXljaGFyID09IFlZRU9GKQotICAgICAgICAgICAgWVlB
Qk9SVDsKLSAgICAgICAgfQorCXsKKwkgIC8qIFJldHVybiBmYWlsdXJlIGlmIGF0IGVuZCBvZiBp
bnB1dC4gICovCisJICBpZiAoeXljaGFyID09IFlZRU9GKQorCSAgICBZWUFCT1JUOworCX0KICAg
ICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogZGlzY2Fy
ZGluZyIsCi0gICAgICAgICAgICAgICAgICAgICAgeXl0b2tlbiwgJnl5bHZhbCwgY29udGV4dCk7
Ci0gICAgICAgICAgeXljaGFyID0gWVlFTVBUWTsKLSAgICAgICAgfQorCXsKKwkgIHl5ZGVzdHJ1
Y3QgKCJFcnJvcjogZGlzY2FyZGluZyIsCisJCSAgICAgIHl5dG9rZW4sICZ5eWx2YWwsIGNvbnRl
eHQpOworCSAgeXljaGFyID0gWVlFTVBUWTsKKwl9CiAgICAgfQogCiAgIC8qIEVsc2Ugd2lsbCB0
cnkgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRoZSBlcnJvcgpAQCAt
MTY1Niw3ICsxNzgxLDcgQEAgeXllcnJvcmxhYjoKICAgaWYgKC8qQ09OU1RDT05EKi8gMCkKICAg
ICAgZ290byB5eWVycm9ybGFiOwogCi0gIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9m
IHRoZSBydWxlIHdob3NlIGFjdGlvbiB0cmlnZ2VyZWQKKyAgLyogRG8gbm90IHJlY2xhaW0gdGhl
IHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAogICAgICB0aGlzIFlZ
RVJST1IuICAqLwogICBZWVBPUFNUQUNLICh5eWxlbik7CiAgIHl5bGVuID0gMDsKQEAgLTE2Njks
MjkgKzE3OTQsMjkgQEAgeXllcnJvcmxhYjoKIHwgeXllcnJsYWIxIC0tIGNvbW1vbiBjb2RlIGZv
ciBib3RoIHN5bnRheCBlcnJvciBhbmQgWVlFUlJPUi4gIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHl5ZXJybGFiMToK
LSAgeXllcnJzdGF0dXMgPSAzOyAgICAgIC8qIEVhY2ggcmVhbCB0b2tlbiBzaGlmdGVkIGRlY3Jl
bWVudHMgdGhpcy4gICovCisgIHl5ZXJyc3RhdHVzID0gMzsJLyogRWFjaCByZWFsIHRva2VuIHNo
aWZ0ZWQgZGVjcmVtZW50cyB0aGlzLiAgKi8KIAogICBmb3IgKDs7KQogICAgIHsKICAgICAgIHl5
biA9IHl5cGFjdFt5eXN0YXRlXTsKICAgICAgIGlmICgheXlwYWN0X3ZhbHVlX2lzX2RlZmF1bHQg
KHl5bikpCi0gICAgICAgIHsKLSAgICAgICAgICB5eW4gKz0gWVlURVJST1I7Ci0gICAgICAgICAg
aWYgKDAgPD0geXluICYmIHl5biA8PSBZWUxBU1QgJiYgeXljaGVja1t5eW5dID09IFlZVEVSUk9S
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB5eW4gPSB5eXRhYmxlW3l5bl07Ci0gICAg
ICAgICAgICAgIGlmICgwIDwgeXluKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICB9CisJeworCSAgeXluICs9IFlZVEVSUk9SOworCSAgaWYgKDAgPD0geXlu
ICYmIHl5biA8PSBZWUxBU1QgJiYgeXljaGVja1t5eW5dID09IFlZVEVSUk9SKQorCSAgICB7CisJ
ICAgICAgeXluID0geXl0YWJsZVt5eW5dOworCSAgICAgIGlmICgwIDwgeXluKQorCQlicmVhazsK
KwkgICAgfQorCX0KIAogICAgICAgLyogUG9wIHRoZSBjdXJyZW50IHN0YXRlIGJlY2F1c2UgaXQg
Y2Fubm90IGhhbmRsZSB0aGUgZXJyb3IgdG9rZW4uICAqLwogICAgICAgaWYgKHl5c3NwID09IHl5
c3MpCi0gICAgICAgIFlZQUJPUlQ7CisJWVlBQk9SVDsKIAogCiAgICAgICB5eWRlc3RydWN0ICgi
RXJyb3I6IHBvcHBpbmciLAotICAgICAgICAgICAgICAgICAgeXlzdG9zW3l5c3RhdGVdLCB5eXZz
cCwgY29udGV4dCk7CisJCSAgeXlzdG9zW3l5c3RhdGVdLCB5eXZzcCwgY29udGV4dCk7CiAgICAg
ICBZWVBPUFNUQUNLICgxKTsKICAgICAgIHl5c3RhdGUgPSAqeXlzc3A7CiAgICAgICBZWV9TVEFD
S19QUklOVCAoeXlzcywgeXlzc3ApOwpAQCAtMTc0MiwxNCArMTg2NywxNCBAQCB5eXJldHVybjoK
ICAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVhZCIsCiAgICAg
ICAgICAgICAgICAgICB5eXRva2VuLCAmeXlsdmFsLCBjb250ZXh0KTsKICAgICB9Ci0gIC8qIERv
IG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdob3NlIGFjdGlvbiB0cmlnZ2Vy
ZWQKKyAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0
aW9uIHRyaWdnZXJlZAogICAgICB0aGlzIFlZQUJPUlQgb3IgWVlBQ0NFUFQuICAqLwogICBZWVBP
UFNUQUNLICh5eWxlbik7CiAgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CiAgIHdoaWxl
ICh5eXNzcCAhPSB5eXNzKQogICAgIHsKICAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBwb3Bw
aW5nIiwKLSAgICAgICAgICAgICAgICAgIHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCwgY29udGV4dCk7
CisJCSAgeXlzdG9zWyp5eXNzcF0sIHl5dnNwLCBjb250ZXh0KTsKICAgICAgIFlZUE9QU1RBQ0sg
KDEpOwogICAgIH0KICNpZm5kZWYgeXlvdmVyZmxvdwpAQCAtMTc2MCwxMSArMTg4NSwxNCBAQCB5
eXJldHVybjoKICAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQogICAgIFlZU1RBQ0tfRlJFRSAoeXlt
c2cpOwogI2VuZGlmCi0gIHJldHVybiB5eXJlc3VsdDsKKyAgLyogTWFrZSBzdXJlIFlZSUQgaXMg
dXNlZC4gICovCisgIHJldHVybiBZWUlEICh5eXJlc3VsdCk7CiB9CiAKIAogCisKKwogaW50IHl5
bGV4KFlZU1RZUEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KQogewogICAgIGludCB0eXBlID0g
MDsKQEAgLTE3NzcsNyArMTkwNSw3IEBAIGludCB5eWxleChZWVNUWVBFKiBsdmFscCwgQ29udGV4
dCogY29udGV4dCkKICAgICAgICAgdW5zaWduZWQgaW50IHZhbCA9IDA7CiAgICAgICAgIGlmICgh
dG9rZW4tPnVWYWx1ZSgmdmFsKSkKICAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+ZGlh
Z25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OklOVEVHRVJfT1ZFUkZMT1csCisgICAg
ICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6UFBf
SU5URUdFUl9PVkVSRkxPVywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgIH0KICAgICAgICAgKmx2
YWxwID0gc3RhdGljX2Nhc3Q8WVlTVFlQRT4odmFsKTsKQEAgLTE4MTgsNyArMTk0Niw3IEBAIGlu
dCB5eWxleChZWVNUWVBFKiBsdmFscCwgQ29udGV4dCogY29udGV4dCkKIAogdm9pZCB5eWVycm9y
KENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikKIHsKLSAgICBjb250ZXh0LT5k
aWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJRF9FWFBSRVNTSU9OLAor
ICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpQUF9JTlZB
TElEX0VYUFJFU1NJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT50b2tlbi0+bG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFz
b24pOwogfQpAQCAtMTg0NiwxMiArMTk3NCwxMiBAQCBib29sIEV4cHJlc3Npb25QYXJzZXI6OnBh
cnNlKFRva2VuKiB0b2tlbiwgaW50KiByZXN1bHQpCiAgICAgICAgIGJyZWFrOwogCiAgICAgICBj
YXNlIDI6Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpPVVRfT0Zf
TUVNT1JZLCB0b2tlbi0+bG9jYXRpb24sICIiKTsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBv
cnQoRGlhZ25vc3RpY3M6OlBQX09VVF9PRl9NRU1PUlksIHRva2VuLT5sb2NhdGlvbiwgIiIpOwog
ICAgICAgICBicmVhazsKIAogICAgICAgZGVmYXVsdDoKICAgICAgICAgYXNzZXJ0KGZhbHNlKTsK
LSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVEVSTkFMX0VSUk9S
LCB0b2tlbi0+bG9jYXRpb24sICIiKTsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6OlBQX0lOVEVSTkFMX0VSUk9SLCB0b2tlbi0+bG9jYXRpb24sICIiKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL01hY3JvRXhwYW5kZXIuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyb0V4cGFuZGVyLmNwcApp
bmRleCAxMTE2YzUxNmZmNjI2ODQxZGZkMzE5OTM1YjkzODJlMDhkYzIzNjYzLi5iNzg5MjYwYWY5
MTYzYTdiZGJkOGI0NTRiYjNmZDQ4NjhhNGUzMGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL01hY3JvRXhwYW5kZXIuY3BwCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvTWFj
cm9FeHBhbmRlci5jcHAKQEAgLTI1NCw3ICsyNTQsNyBAQCBib29sIE1hY3JvRXhwYW5kZXI6OmNv
bGxlY3RNYWNyb0FyZ3MoY29uc3QgTWFjcm8mIG1hY3JvLAogCiAgICAgICAgIGlmICh0b2tlbi50
eXBlID09IFRva2VuOjpMQVNUKQogICAgICAgICB7Ci0gICAgICAgICAgICBtRGlhZ25vc3RpY3Mt
PnJlcG9ydChEaWFnbm9zdGljczo6TUFDUk9fVU5URVJNSU5BVEVEX0lOVk9DQVRJT04sCisgICAg
ICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfTUFDUk9fVU5URVJN
SU5BVEVEX0lOVk9DQVRJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGVu
dGlmaWVyLmxvY2F0aW9uLCBpZGVudGlmaWVyLnRleHQpOwogICAgICAgICAgICAgLy8gRG8gbm90
IGxvc2UgRU9GIHRva2VuLgogICAgICAgICAgICAgdW5nZXRUb2tlbih0b2tlbik7CkBAIC0zMDIs
OCArMzAyLDggQEAgYm9vbCBNYWNyb0V4cGFuZGVyOjpjb2xsZWN0TWFjcm9BcmdzKGNvbnN0IE1h
Y3JvJiBtYWNybywKICAgICBpZiAoYXJncy0+c2l6ZSgpICE9IHBhcmFtcy5zaXplKCkpCiAgICAg
ewogICAgICAgICBEaWFnbm9zdGljczo6SUQgaWQgPSBhcmdzLT5zaXplKCkgPCBtYWNyby5wYXJh
bWV0ZXJzLnNpemUoKSA/Ci0gICAgICAgICAgICBEaWFnbm9zdGljczo6TUFDUk9fVE9PX0ZFV19B
UkdTIDoKLSAgICAgICAgICAgIERpYWdub3N0aWNzOjpNQUNST19UT09fTUFOWV9BUkdTOworICAg
ICAgICAgICAgRGlhZ25vc3RpY3M6OlBQX01BQ1JPX1RPT19GRVdfQVJHUyA6CisgICAgICAgICAg
ICBEaWFnbm9zdGljczo6UFBfTUFDUk9fVE9PX01BTllfQVJHUzsKICAgICAgICAgbURpYWdub3N0
aWNzLT5yZXBvcnQoaWQsIGlkZW50aWZpZXIubG9jYXRpb24sIGlkZW50aWZpZXIudGV4dCk7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1ByZXByb2Nlc3Nvci5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1ByZXByb2Nlc3Nv
ci5jcHAKaW5kZXggYjYxNWM4NWRjZTA0YWM4MWI2MWU1MjJhMDViZjJhYWViZjlkOTA5My4uNTgw
ZmZiYTQ1OWY5Y2FmYzE3NDI4YjMzYjlkMGFhYTljOTUzYTdlZSAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3Iu
Y3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvUHJlcHJvY2Vzc29yLmNwcApAQCAtMTAxLDExICsxMDEsMTEgQEAgdm9pZCBQcmVwcm9jZXNz
b3I6OmxleChUb2tlbiogdG9rZW4pCiAgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBUb2tlbjo6UFBfTlVNQkVSOgotICAgICAgICAg
ICAgbUltcGwtPmRpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfTlVNQkVS
LAorICAgICAgICAgICAgbUltcGwtPmRpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQ
X0lOVkFMSURfTlVNQkVSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICBjYXNlIFRva2VuOjpQUF9PVEhFUjoKLSAgICAgICAgICAgIG1JbXBsLT5kaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0NIQVJBQ1RFUiwKKyAgICAgICAgICAgIG1J
bXBsLT5kaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9JTlZBTElEX0NIQVJBQ1RF
UiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwgdG9rZW4tPnRleHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgZGVmYXVsdDoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvVG9rZW5pemVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmNwcAppbmRleCAzNjNhMzdiMzY1YTY0OTc2ZDkwZGI2
ZTBmNjE5YmQzOTI4YWFiMDc3Li5kZDRlZjM4MTgwNTE1ZDk1ZWU4MzYyMDAxMzdiNGRhMzIxMGIy
OWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL1Rva2VuaXplci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuY3BwCkBAIC02ODAsNiArNjgwLDE4IEBA
IHN0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciAqLHl5Y29uc3QgY2hhciAqLGludCAs
eXlzY2FuX3QgeXlzY2FubmVyKTsKIHN0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3Qg
Y2hhciAqICx5eXNjYW5fdCB5eXNjYW5uZXIpOwogI2VuZGlmCiAKKyNkZWZpbmUgWVlfTk9fSU5Q
VVQKKworI2lmbmRlZiBZWV9OT19JTlBVVAorCisjaWZkZWYgX19jcGx1c3BsdXMKK3N0YXRpYyBp
bnQgeXlpbnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZWxzZQorc3RhdGljIGludCBpbnB1
dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZW5kaWYKKworI2VuZGlmCisKIC8qIEFtb3VudCBv
ZiBzdHVmZiB0byBzbHVycCB1cCB3aXRoIGVhY2ggcmVhZC4gKi8KICNpZm5kZWYgWVlfUkVBRF9C
VUZfU0laRQogI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDgxOTIKQEAgLTExMzksNyArMTE1MSw3
IEBAIGNhc2UgWVlfU1RBVEVfRU9GKENPTU1FTlQpOgogCiAgICAgaWYgKFlZX1NUQVJUID09IENP
TU1FTlQpCiAgICAgewotICAgICAgICB5eWV4dHJhLT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpE
aWFnbm9zdGljczo6RU9GX0lOX0NPTU1FTlQsCisgICAgICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNz
LT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpQUF9FT0ZfSU5fQ09NTUVOVCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcDo6U291cmNlTG9jYXRpb24oeXlmaWxlbm8sIHl5
bGluZW5vKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIik7CiAgICAg
fQpAQCAtMTQ4MCw2ICsxNDkyLDgxIEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5
eXNjYW5fdCB5eXNjYW5uZXIpCiAJcmV0dXJuIHl5X2lzX2phbSA/IDAgOiB5eV9jdXJyZW50X3N0
YXRlOwogfQogCisjaWZuZGVmIFlZX05PX0lOUFVUCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBz
dGF0aWMgaW50IHl5aW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lcikKKyNlbHNlCisgICAgc3RhdGlj
IGludCBpbnB1dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKKyNlbmRpZgorCit7CisJaW50IGM7Cisg
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwor
CisJKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCisJaWYgKCAqeXlnLT55
eV9jX2J1Zl9wID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCisJCXsKKwkJLyogeXlfY19idWZf
cCBub3cgcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2FudCB0byByZXR1cm4uCisJCSAqIElm
IHRoaXMgb2NjdXJzICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFjdGVycywgdGhlbiBpdCdzIGEKKwkJ
ICogdmFsaWQgTlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZl
ci4KKwkJICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9wIDwgJllZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQorCQkJLyogVGhpcyB3YXMgcmVhbGx5
IGEgTlVMLiAqLworCQkJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7CisKKwkJZWxzZQorCQkJeyAv
KiBuZWVkIG1vcmUgaW5wdXQgKi8KKwkJCXl5X3NpemVfdCBvZmZzZXQgPSB5eWctPnl5X2NfYnVm
X3AgLSB5eWctPnl5dGV4dF9wdHI7CisJCQkrK3l5Zy0+eXlfY19idWZfcDsKKworCQkJc3dpdGNo
ICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCisJCQkJeworCQkJCWNhc2UgRU9C
X0FDVF9MQVNUX01BVENIOgorCQkJCQkvKiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB5eV9nX25fYigp
CisJCQkJCSAqIHNlZXMgdGhhdCB3ZSd2ZSBhY2N1bXVsYXRlZCBhCisJCQkJCSAqIHRva2VuIGFu
ZCBmbGFncyB0aGF0IHdlIG5lZWQgdG8KKwkJCQkJICogdHJ5IG1hdGNoaW5nIHRoZSB0b2tlbiBi
ZWZvcmUKKwkJCQkJICogcHJvY2VlZGluZy4gIEJ1dCBmb3IgaW5wdXQoKSwKKwkJCQkJICogdGhl
cmUncyBubyBtYXRjaGluZyB0byBjb25zaWRlci4KKwkJCQkJICogU28gY29udmVydCB0aGUgRU9C
X0FDVF9MQVNUX01BVENICisJCQkJCSAqIHRvIEVPQl9BQ1RfRU5EX09GX0ZJTEUuCisJCQkJCSAq
LworCisJCQkJCS8qIFJlc2V0IGJ1ZmZlciBzdGF0dXMuICovCisJCQkJCXBwcmVzdGFydCh5eWlu
ICx5eXNjYW5uZXIpOworCisJCQkJCS8qRkFMTFRIUk9VR0gqLworCisJCQkJY2FzZSBFT0JfQUNU
X0VORF9PRl9GSUxFOgorCQkJCQl7CisJCQkJCWlmICggcHB3cmFwKHl5c2Nhbm5lciApICkKKwkJ
CQkJCXJldHVybiBFT0Y7CisKKwkJCQkJaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hf
b25fZW9mICkKKwkJCQkJCVlZX05FV19GSUxFOworI2lmZGVmIF9fY3BsdXNwbHVzCisJCQkJCXJl
dHVybiB5eWlucHV0KHl5c2Nhbm5lcik7CisjZWxzZQorCQkJCQlyZXR1cm4gaW5wdXQoeXlzY2Fu
bmVyKTsKKyNlbmRpZgorCQkJCQl9CisKKwkJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoK
KwkJCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgb2Zmc2V0OworCQkJCQli
cmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCWMgPSAqKHVuc2lnbmVkIGNoYXIgKikgeXlnLT55
eV9jX2J1Zl9wOwkvKiBjYXN0IGZvciA4LWJpdCBjaGFyJ3MgKi8KKwkqeXlnLT55eV9jX2J1Zl9w
ID0gJ1wwJzsJLyogcHJlc2VydmUgeXl0ZXh0ICovCisJeXlnLT55eV9ob2xkX2NoYXIgPSAqKyt5
eWctPnl5X2NfYnVmX3A7CisKKwlyZXR1cm4gYzsKK30KKyNlbmRpZgkvKiBpZm5kZWYgWVlfTk9f
SU5QVVQgKi8KKwogLyoqIEltbWVkaWF0ZWx5IHN3aXRjaCB0byBhIGRpZmZlcmVudCBpbnB1dCBz
dHJlYW0uCiAgKiBAcGFyYW0gaW5wdXRfZmlsZSBBIHJlYWRhYmxlIHN0cmVhbS4KICAqIEBwYXJh
bSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgpAQCAtMjI1Miw3ICsyMzM5LDcgQEAgdm9p
ZCBUb2tlbml6ZXI6OmxleChUb2tlbiogdG9rZW4pCiAgICAgdG9rZW4tPnR5cGUgPSBwcGxleCgm
dG9rZW4tPnRleHQsJnRva2VuLT5sb2NhdGlvbixtSGFuZGxlKTsKICAgICBpZiAodG9rZW4tPnRl
eHQuc2l6ZSgpID4gbU1heFRva2VuTGVuZ3RoKQogICAgIHsKLSAgICAgICAgbUNvbnRleHQuZGlh
Z25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VE9LRU5fVE9PX0xPTkcsCisgICAgICAgIG1D
b250ZXh0LmRpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX1RPS0VOX1RPT19MT05H
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwg
dG9rZW4tPnRleHQpOwogICAgICAgICB0b2tlbi0+dGV4dC5lcmFzZShtTWF4VG9rZW5MZW5ndGgp
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmwgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5sCmluZGV4IDkwYzQyYzg3MGJlMDAwZTlh
NTczZGMxOTFkNDhiY2RmNzBlY2Q2ZTEuLjAxZjAxNzdiNmMyNjNlMjI3YTk1NDBkMzJiZGE3NDZk
MDdmNzljZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIubApAQCAtMzMsMTIgKzMzLDYgQEAg
SUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFy
c2VyLnNoLgogI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3Npbmctbm9yZXR1
cm4iCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoX19jbGFuZ19fKQotI3ByYWdtYSBjbGFuZyBkaWFn
bm9zdGljIHB1c2gKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vua25vd24t
cHJhZ21hcyIKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQt
cmVnaXN0ZXIiCi0jZW5kaWYKLQogdHlwZWRlZiBzdGQ6OnN0cmluZyBZWVNUWVBFOwogdHlwZWRl
ZiBwcDo6U291cmNlTG9jYXRpb24gWVlMVFlQRTsKIApAQCAtMjcxLDEwICsyNjUsNiBAQCBGUkFD
VElPTkFMX0NPTlNUQU5UICAoe0RJR0lUfSoiLiJ7RElHSVR9Kyl8KHtESUdJVH0rIi4iKQogCiAl
JQogCi0jaWYgZGVmaW5lZChfX2NsYW5nX18pCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9w
Ci0jZW5kaWYKLQogbmFtZXNwYWNlIHBwIHsKIAogVG9rZW5pemVyOjpUb2tlbml6ZXIoRGlhZ25v
c3RpY3MqIGRpYWdub3N0aWNzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzb3IudmN4cHJvaiBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzc29yLnZj
eHByb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhODUzMGI1MDc0YTE3M2RkMDA4
NzQyYzM4MzBkZTZjMWU4NDIzOGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9wcmVwcm9jZXNzb3IudmN4cHJvagorKysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBA
Ci3vu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTxQcm9qZWN0IERl
ZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2No
ZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPg0KLSAgPEl0ZW1Hcm91
cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4NCi0gICAgPFByb2plY3RDb25maWd1cmF0
aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4NCi0gICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1Zzwv
Q29uZmlndXJhdGlvbj4NCi0gICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPg0KLSAgICA8
L1Byb2plY3RDb25maWd1cmF0aW9uPg0KLSAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVk
ZT0iRGVidWd8eDY0Ij4NCi0gICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlv
bj4NCi0gICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4NCi0gICAgPC9Qcm9qZWN0Q29uZmln
dXJhdGlvbj4NCi0gICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2lu
MzIiPg0KLSAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+DQotICAg
ICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4NCi0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlv
bj4NCi0gICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4NCi0g
ICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPg0KLSAgICAgIDxQbGF0
Zm9ybT54NjQ8L1BsYXRmb3JtPg0KLSAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KLSAgPC9J
dGVtR3JvdXA+DQotICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+DQotICAgIDxQcm9q
ZWN0R3VpZD57RkJFMzJERjMtMEZCMC00RjJGLUE0MjQtMkMyMUJEN0JDMzI1fTwvUHJvamVjdEd1
aWQ+DQotICAgIDxSb290TmFtZXNwYWNlPnByZXByb2Nlc3NvcjwvUm9vdE5hbWVzcGFjZT4NCi0g
ICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPg0KLSAgPC9Qcm9wZXJ0eUdyb3VwPg0KLSAg
PEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5w
cm9wcyIgLz4NCi0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8
JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCi0g
ICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0K
LSAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4NCi0gICAgPFdob2xlUHJv
Z3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+DQotICA8L1By
b3BlcnR5R3JvdXA+DQotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRp
b24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0K
LSAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+
DQotICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0Pg0KLSAgPC9Qcm9wZXJ0
eUdyb3VwPg0KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCi0gICAg
PENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KLSAg
ICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4NCi0gICAgPFdob2xlUHJvZ3Jh
bU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+DQotICA8L1Byb3Bl
cnR5R3JvdXA+DQotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p
fCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCi0gICAg
PENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KLSAg
ICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4NCi0gIDwvUHJvcGVydHlHcm91
cD4NCi0gIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnBy
b3BzIiAvPg0KLSAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+DQotICA8
L0ltcG9ydEdyb3VwPg0KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlv
bil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+
DQotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBs
YXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWlj
cm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQ
bGF0Zm9ybSIgLz4NCi0gIDwvSW1wb3J0R3JvdXA+DQotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9u
PSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJQ
cm9wZXJ0eVNoZWV0cyI+DQotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWlj
cm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChV
c2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVs
PSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCi0gIDwvSW1wb3J0R3JvdXA+DQotICA8SW1wb3J0
R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNl
fHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQotICAgIDxJbXBvcnQgUHJvamVjdD0iJChV
c2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRp
b249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2Vy
LnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCi0gIDwvSW1wb3J0R3Jv
dXA+DQotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRm
b3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KLSAgICA8SW1wb3J0
IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5w
cm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQ
bGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQot
ICA8L0ltcG9ydEdyb3VwPg0KLSAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+
DQotICA8UHJvcGVydHlHcm91cD4NCi0gICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC40MDIx
OS4xPC9fUHJvamVjdEZpbGVWZXJzaW9uPg0KLSAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29u
ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4kKFNvbHV0aW9uRGlyKSQo
Q29uZmlndXJhdGlvbilcPC9PdXREaXI+DQotICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25m
aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiQoQ29uZmlndXJhdGlvbilc
PC9JbnREaXI+DQotICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pXCQoQ29uZmln
dXJhdGlvbilcPC9PdXREaXI+DQotICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4kKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRp
b24pXDwvSW50RGlyPg0KLSAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8
JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0
aW9uKVw8L091dERpcj4NCi0gICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p
fCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4kKENvbmZpZ3VyYXRpb24pXDwvSW50RGly
Pg0KLSAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nUmVsZWFzZXx4NjQnIj4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlv
bilcPC9PdXREaXI+DQotICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilc
PC9JbnREaXI+DQotICA8L1Byb3BlcnR5R3JvdXA+DQotICA8SXRlbURlZmluaXRpb25Hcm91cCBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+
DQotICAgIDxDbENvbXBpbGU+DQotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1p
emF0aW9uPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X1dJ
TkRPV1M7X1VTUkRMTDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7Tk9NSU5NQVg7JShQcmVwcm9j
ZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxNaW5p
bWFsUmVidWlsZD50cnVlPC9NaW5pbWFsUmVidWlsZD4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hl
Y2tzPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8UnVudGlt
ZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnPC9SdW50aW1lTGlicmFyeT4NCi0gICAgICA8UHJl
Y29tcGlsZWRIZWFkZXI+DQotICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4NCi0gICAgICA8V2Fy
bmluZ0xldmVsPkxldmVsNDwvV2FybmluZ0xldmVsPg0KLSAgICAgIDxUcmVhdFdhcm5pbmdBc0Vy
cm9yPnRydWU8L1RyZWF0V2FybmluZ0FzRXJyb3I+DQotICAgICAgPERlYnVnSW5mb3JtYXRpb25G
b3JtYXQ+RWRpdEFuZENvbnRpbnVlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KLSAgICAgIDxE
aXNhYmxlU3BlY2lmaWNXYXJuaW5ncz40MTAwOzQxMjc7NDE4OTs0MjM5OzQyNDQ7NDI0NTs0NTEy
OzQ3MDI7NDI2NzslKERpc2FibGVTcGVjaWZpY1dhcm5pbmdzKTwvRGlzYWJsZVNwZWNpZmljV2Fy
bmluZ3M+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KLSAg
PEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRm
b3JtKSc9PSdEZWJ1Z3x4NjQnIj4NCi0gICAgPE1pZGw+DQotICAgICAgPFRhcmdldEVudmlyb25t
ZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+DQotICAgIDwvTWlkbD4NCi0gICAgPENsQ29tcGls
ZT4NCi0gICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAg
PFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMO19D
UlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWDslKFByZXByb2Nlc3NvckRlZmluaXRpb25z
KTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPE1pbmltYWxSZWJ1aWxkPnRydWU8
L01pbmltYWxSZWJ1aWxkPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RW5hYmxlRmFzdENo
ZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRo
cmVhZGVkRGVidWc8L1J1bnRpbWVMaWJyYXJ5Pg0KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4N
Ci0gICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWw0
PC9XYXJuaW5nTGV2ZWw+DQotICAgICAgPFRyZWF0V2FybmluZ0FzRXJyb3I+dHJ1ZTwvVHJlYXRX
YXJuaW5nQXNFcnJvcj4NCi0gICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0
YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQotICAgICAgPERpc2FibGVTcGVjaWZpY1dh
cm5pbmdzPjQxMDA7NDEyNzs0MTg5OzQyMzk7NDI0NDs0MjQ1OzQ1MTI7NDcwMjs0NzE4OzQyNjc7
JShEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncyk8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPg0KLSAg
ICA8L0NsQ29tcGlsZT4NCi0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCi0gIDxJdGVtRGVmaW5p
dGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVs
ZWFzZXxXaW4zMiciPg0KLSAgICA8Q2xDb21waWxlPg0KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4
U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+QW55
U3VpdGFibGU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JE
ZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtfQ1JUX1NFQ1VSRV9OT19E
RVBSRUNBVEU7Tk9NSU5NQVg7X1NFQ1VSRV9TQ0w9MDslKFByZXByb2Nlc3NvckRlZmluaXRpb25z
KTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRp
VGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5Pg0KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4NCi0g
ICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWw0PC9X
YXJuaW5nTGV2ZWw+DQotICAgICAgPFRyZWF0V2FybmluZ0FzRXJyb3I+dHJ1ZTwvVHJlYXRXYXJu
aW5nQXNFcnJvcj4NCi0gICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJh
c2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQotICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5p
bmdzPjQxMDA7NDEyNzs0MTg5OzQyMzk7NDI0NDs0MjQ1OzQ1MTI7NDcwMjs0NzE4OzQyNjc7JShE
aXNhYmxlU3BlY2lmaWNXYXJuaW5ncyk8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPg0KLSAgICA8
L0NsQ29tcGlsZT4NCi0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCi0gIDxJdGVtRGVmaW5pdGlv
bkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFz
ZXx4NjQnIj4NCi0gICAgPE1pZGw+DQotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFy
Z2V0RW52aXJvbm1lbnQ+DQotICAgIDwvTWlkbD4NCi0gICAgPENsQ29tcGlsZT4NCi0gICAgICA8
T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPElubGluZUZ1bmN0
aW9uRXhwYW5zaW9uPkFueVN1aXRhYmxlPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCi0gICAg
ICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7
X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO05PTUlOTUFYO19TRUNVUkVfU0NMPTA7JShQcmVwcm9j
ZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxSdW50
aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4NCi0gICAgICA8UHJlY29t
cGlsZWRIZWFkZXI+DQotICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4NCi0gICAgICA8V2Fybmlu
Z0xldmVsPkxldmVsNDwvV2FybmluZ0xldmVsPg0KLSAgICAgIDxUcmVhdFdhcm5pbmdBc0Vycm9y
PnRydWU8L1RyZWF0V2FybmluZ0FzRXJyb3I+DQotICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3Jt
YXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KLSAgICAgIDxEaXNh
YmxlU3BlY2lmaWNXYXJuaW5ncz40MTAwOzQxMjc7NDE4OTs0MjM5OzQyNDQ7NDI0NTs0NTEyOzQ3
MDI7NDcxODs0MjY3OyUoRGlzYWJsZVNwZWNpZmljV2FybmluZ3MpPC9EaXNhYmxlU3BlY2lmaWNX
YXJuaW5ncz4NCi0gICAgPC9DbENvbXBpbGU+DQotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQot
ICA8SXRlbUdyb3VwPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkRpYWdub3N0aWNzQmFzZS5j
cHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iRGlyZWN0aXZlSGFuZGxlckJhc2UuY3Bw
IiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkRpcmVjdGl2ZVBhcnNlci5jcHAiIC8+DQot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iRXhwcmVzc2lvblBhcnNlci5jcHAiIC8+DQotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iSW5wdXQuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
IkxleGVyLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJNYWNyby5jcHAiIC8+DQot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iTWFjcm9FeHBhbmRlci5jcHAiIC8+DQotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iUHJlcHJvY2Vzc29yLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSJUb2tlbi5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iVG9rZW5pemVyLmNw
cCIgLz4NCi0gIDwvSXRlbUdyb3VwPg0KLSAgPEl0ZW1Hcm91cD4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSJsZW5ndGhfbGltaXRzLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iRGlh
Z25vc3RpY3NCYXNlLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iRGlyZWN0aXZlSGFu
ZGxlckJhc2UuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJEaXJlY3RpdmVQYXJzZXIu
aCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJFeHByZXNzaW9uUGFyc2VyLmgiIC8+DQot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iSW5wdXQuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSJMZXhlci5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ik1hY3JvLmgiIC8+DQot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iTWFjcm9FeHBhbmRlci5oIiAvPg0KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Im51bWVyaWNfbGV4LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
cHBfdXRpbHMuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJQcmVwcm9jZXNzb3IuaCIg
Lz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJTb3VyY2VMb2NhdGlvbi5oIiAvPg0KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9IlRva2VuLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
VG9rZW5pemVyLmgiIC8+DQotICA8L0l0ZW1Hcm91cD4NCi0gIDxJdGVtR3JvdXA+DQotICAgIDxO
b25lIEluY2x1ZGU9IlRva2VuaXplci5sIiAvPg0KLSAgPC9JdGVtR3JvdXA+DQotICA8SW1wb3J0
IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPg0KLSAg
PEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4NCi0gIDwvSW1wb3J0R3JvdXA+
DQotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vz
c29yLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzc29yLnZjeHByb2ouZmlsdGVycwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNGFjMjAyZjQwMDJhMjkyYzYxNGY5NGFkM2Q3ZDhjYzNjODE0Mzdk
My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3Nvci52
Y3hwcm9qLmZpbHRlcnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAot77u/PD94bWwg
dmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08UHJvamVjdCBUb29sc1ZlcnNpb249
IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVp
bGQvMjAwMyI+DQotICA8SXRlbUdyb3VwPg0KLSAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBG
aWxlcyI+DQotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2
LTJBMzJENzUyQTJGRn08L1VuaXF1ZUlkZW50aWZpZXI+DQotICAgICAgPEV4dGVuc2lvbnM+Y3Bw
O2M7Y2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXg8L0V4dGVuc2lvbnM+DQotICAg
IDwvRmlsdGVyPg0KLSAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlcyI+DQotICAgICAg
PFVuaXF1ZUlkZW50aWZpZXI+ezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJGQn08
L1VuaXF1ZUlkZW50aWZpZXI+DQotICAgICAgPEV4dGVuc2lvbnM+aDtocHA7aHh4O2htO2lubDtp
bmM7eHNkPC9FeHRlbnNpb25zPg0KLSAgICA8L0ZpbHRlcj4NCi0gIDwvSXRlbUdyb3VwPg0KLSAg
PEl0ZW1Hcm91cD4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJEaXJlY3RpdmVQYXJzZXIuY3Bw
Ij4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGls
ZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJFeHByZXNzaW9uUGFyc2VyLmNwcCI+DQotICAg
ICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iSW5wdXQuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBG
aWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSJMZXhlci5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAg
IDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ik1hY3JvLmNwcCI+DQotICAg
ICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iTWFjcm9FeHBhbmRlci5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+
U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9IlByZXByb2Nlc3Nvci5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVz
PC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlRv
a2VuLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9D
bENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iVG9rZW5pemVyLmNwcCI+DQotICAg
ICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iRGlhZ25vc3RpY3NCYXNlLmNwcCI+DQotICAgICAgPEZpbHRl
cj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNv
dXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gIDwvSXRlbUdyb3VwPg0K
LSAgPEl0ZW1Hcm91cD4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJEaXJlY3RpdmVQYXJzZXIu
aCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1
ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iRXhwcmVzc2lvblBhcnNlci5oIj4NCi0gICAg
ICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSJJbnB1dC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxl
czwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJM
ZXhlci5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0Ns
SW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJNYWNyby5oIj4NCi0gICAgICA8Rmls
dGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSJNYWNyb0V4cGFuZGVyLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZp
bGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Im51bWVyaWNfbGV4LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQot
ICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InBwX3V0aWxzLmgiPg0K
LSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlByZXByb2Nlc3Nvci5oIj4NCi0gICAgICA8RmlsdGVy
PkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSJTb3VyY2VMb2NhdGlvbi5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxl
czwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJU
b2tlbi5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0Ns
SW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJUb2tlbml6ZXIuaCI+DQotICAgICAg
PEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0ibGVuZ3RoX2xpbWl0cy5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRl
ciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSJEaWFnbm9zdGljc0Jhc2UuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0Zp
bHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iRGlyZWN0
aXZlSGFuZGxlckJhc2UuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4N
Ci0gICAgPC9DbEluY2x1ZGU+DQotICA8L0l0ZW1Hcm91cD4NCi0gIDxJdGVtR3JvdXA+DQotICAg
IDxOb25lIEluY2x1ZGU9IlRva2VuaXplci5sIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxl
czwvRmlsdGVyPg0KLSAgICA8L05vbmU+DQotICA8L0l0ZW1Hcm91cD4NCi08L1Byb2plY3Q+Clwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5
ZDJiYWIxN2Y4MTRhZTRjY2IzZGZhMTMxOTY0ODFiNDg3YTFlNDguLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDEyNyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBp
bGVyL0luZm9TaW5rLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VDb250ZXh0LmgiCi0jaW5j
bHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCi0jaW5jbHVk
ZSAiY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCIKLQotUmVz
dHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6UmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZyhU
SW5mb1NpbmtCYXNlJiBzaW5rKQotICAgIDogbVNpbmsoc2luaykKLSAgICAsIG1OdW1FcnJvcnMo
MCkKLXsKLSAgICAvLyBTYW1wbGluZyBvcHMgZm91bmQgb25seSBpbiBmcmFnbWVudCBzaGFkZXJz
LgotICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRChzMjE7dmYyO2YxOyIpOwotICAg
IG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFByb2ooczIxO3ZmMztmMTsiKTsKLSAgICBt
U2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRQcm9qKHMyMTt2ZjQ7ZjE7Iik7Ci0gICAgbVNh
bXBsaW5nT3BzLmluc2VydCgidGV4dHVyZUN1YmUoc0MxO3ZmMztmMTsiKTsKLSAgICAvLyBTYW1w
bGluZyBvcHMgZm91bmQgaW4gYm90aCB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMuCi0gICAg
bVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEKHMyMTt2ZjI7Iik7Ci0gICAgbVNhbXBsaW5n
T3BzLmluc2VydCgidGV4dHVyZTJEUHJvaihzMjE7dmYzOyIpOwotICAgIG1TYW1wbGluZ09wcy5p
bnNlcnQoInRleHR1cmUyRFByb2ooczIxO3ZmNDsiKTsKLSAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0
KCJ0ZXh0dXJlQ3ViZShzQzE7dmYzOyIpOwotICAgIC8vIFNhbXBsaW5nIG9wcyBwcm92aWRlZCBi
eSBPRVNfRUdMX2ltYWdlX2V4dGVybmFsLgotICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1
cmUyRCgxO3ZmMjsiKTsKLSAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRQcm9qKDE7
dmYzOyIpOwotICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFByb2ooMTt2ZjQ7Iik7
Ci0gICAgLy8gU2FtcGxpbmcgb3BzIHByb3ZpZGVkIGJ5IEFSQl90ZXh0dXJlX3JlY3RhbmdsZS4K
LSAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRSZWN0KDE7dmYyOyIpOwotICAgIG1T
YW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFJlY3RQcm9qKDE7dmYzOyIpOwotICAgIG1TYW1w
bGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFJlY3RQcm9qKDE7dmY0OyIpOwotfQotCi0vLyBGSVhN
RShtdnVqb3ZpYyk6IFdlIGRvIG5vdCBrbm93IGlmIHRoZSBleGVjdXRpb24gdGltZSBvZiBidWls
dC1pbiBvcGVyYXRpb25zIGxpa2Ugc2luLCBwb3csIGV0Yy4KLS8vIGNhbiB2YXJ5IGJhc2VkIG9u
IHRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQgYXJndW1lbnRzLiBJZiBzbywgd2Ugc2hvdWxkIHJlc3Ry
aWN0IHRob3NlIGFzIHdlbGwuCi12b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OmVu
Zm9yY2VSZXN0cmljdGlvbnMoY29uc3QgVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpCi17Ci0gICAg
bU51bUVycm9ycyA9IDA7Ci0KLSAgICAvLyBGSVhNRShtdnVqb3ZpYyk6IFRoZSBkZXBlbmRlbmN5
IGdyYXBoIGRvZXMgbm90IHN1cHBvcnQgdXNlciBkZWZpbmVkIGZ1bmN0aW9uIGNhbGxzIHJpZ2h0
IG5vdywKLSAgICAvLyBzbyB3ZSBnZW5lcmF0ZSBlcnJvcnMgZm9yIHRoZW0uCi0gICAgdmFsaWRh
dGVVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbFVzYWdlKGdyYXBoKTsKLQotICAgIC8vIFN0YXJ0aW5n
IGZyb20gZWFjaCBzYW1wbGVyLCB0cmF2ZXJzZSB0aGUgZGVwZW5kZW5jeSBncmFwaCBhbmQgZ2Vu
ZXJhdGUgYW4gZXJyb3IgZWFjaCB0aW1lIHdlCi0gICAgLy8gaGl0IGEgbm9kZSB3aGVyZSBzYW1w
bGVyIGRlcGVuZGVudCB2YWx1ZXMgYXJlIG5vdCBhbGxvd2VkLgotICAgIGZvciAoVEdyYXBoU3lt
Ym9sVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZ3JhcGguYmVnaW5TYW1wbGVyU3ltYm9s
cygpOwotICAgICAgICAgaXRlciAhPSBncmFwaC5lbmRTYW1wbGVyU3ltYm9scygpOwotICAgICAg
ICAgKytpdGVyKQotICAgIHsKLSAgICAgICAgVEdyYXBoU3ltYm9sKiBzYW1wbGVyU3ltYm9sID0g
Kml0ZXI7Ci0gICAgICAgIGNsZWFyVmlzaXRlZCgpOwotICAgICAgICBzYW1wbGVyU3ltYm9sLT50
cmF2ZXJzZSh0aGlzKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRp
bWluZzo6dmFsaWRhdGVVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbFVzYWdlKGNvbnN0IFREZXBlbmRl
bmN5R3JhcGgmIGdyYXBoKQotewotICAgIGZvciAoVEZ1bmN0aW9uQ2FsbFZlY3Rvcjo6Y29uc3Rf
aXRlcmF0b3IgaXRlciA9IGdyYXBoLmJlZ2luVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKCk7Ci0g
ICAgICAgICBpdGVyICE9IGdyYXBoLmVuZFVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpOwotICAg
ICAgICAgKytpdGVyKQotICAgIHsKLSAgICAgICAgVEdyYXBoRnVuY3Rpb25DYWxsKiBmdW5jdGlv
bkNhbGwgPSAqaXRlcjsKLSAgICAgICAgYmVnaW5FcnJvcihmdW5jdGlvbkNhbGwtPmdldEludGVy
bUZ1bmN0aW9uQ2FsbCgpKTsKLSAgICAgICAgbVNpbmsgPDwgIkEgY2FsbCB0byBhIHVzZXIgZGVm
aW5lZCBmdW5jdGlvbiBpcyBub3QgcGVybWl0dGVkLlxuIjsKLSAgICB9Ci19Ci0KLXZvaWQgUmVz
dHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6YmVnaW5FcnJvcihjb25zdCBUSW50ZXJtTm9kZSog
bm9kZSkKLXsKLSAgICArK21OdW1FcnJvcnM7Ci0gICAgbVNpbmsucHJlZml4KEVQcmVmaXhFcnJv
cik7Ci0gICAgbVNpbmsubG9jYXRpb24obm9kZS0+Z2V0TGluZSgpKTsKLX0KLQotYm9vbCBSZXN0
cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjppc1NhbXBsaW5nT3AoY29uc3QgVEludGVybUFnZ3Jl
Z2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKSBjb25zdAotewotICAgIHJldHVybiAhaW50ZXJtRnVu
Y3Rpb25DYWxsLT5pc1VzZXJEZWZpbmVkKCkgJiYKLSAgICAgICAgICAgbVNhbXBsaW5nT3BzLmZp
bmQoaW50ZXJtRnVuY3Rpb25DYWxsLT5nZXROYW1lKCkpICE9IG1TYW1wbGluZ09wcy5lbmQoKTsK
LX0KLQotdm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdEFyZ3VtZW50KFRH
cmFwaEFyZ3VtZW50KiBwYXJhbWV0ZXIpCi17Ci0gICAgLy8gVGV4dHVyZSBjYWNoZSBhY2Nlc3Mg
dGltZSBtaWdodCBsZWFrIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi4KLSAgICAvLyBUaHVzLCB3ZSBy
ZXN0cmljdCBzYW1wbGVyIGRlcGVuZGVudCB2YWx1ZXMgZnJvbSBhZmZlY3RpbmcgdGhlIGNvb3Jk
aW5hdGUgb3IgTE9EIGJpYXMgb2YgYQotICAgIC8vIHNhbXBsaW5nIG9wZXJhdGlvbi4KLSAgICBp
ZiAoaXNTYW1wbGluZ09wKHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkpKSB7Ci0g
ICAgICAgIHN3aXRjaCAocGFyYW1ldGVyLT5nZXRBcmd1bWVudE51bWJlcigpKSB7Ci0gICAgICAg
ICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgLy8gU2Vjb25kIGFyZ3VtZW50IChjb29yZCkK
LSAgICAgICAgICAgICAgICBiZWdpbkVycm9yKHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25D
YWxsKCkpOwotICAgICAgICAgICAgICAgIG1TaW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVu
dCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1pdHRlZCB0byBiZSB0aGUiCi0gICAgICAgICAgICAg
ICAgICAgICAgPDwgIiBjb29yZGluYXRlIGFyZ3VtZW50IG9mIGEgc2FtcGxpbmcgb3BlcmF0aW9u
LlxuIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMjoKLSAgICAg
ICAgICAgICAgICAvLyBUaGlyZCBhcmd1bWVudCAoYmlhcykKLSAgICAgICAgICAgICAgICBiZWdp
bkVycm9yKHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkpOwotICAgICAgICAgICAg
ICAgIG1TaW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90
IHBlcm1pdHRlZCB0byBiZSB0aGUiCi0gICAgICAgICAgICAgICAgICAgICAgPDwgIiBiaWFzIGFy
Z3VtZW50IG9mIGEgc2FtcGxpbmcgb3BlcmF0aW9uLlxuIjsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgLy8gRmlyc3QgYXJndW1l
bnQgKHNhbXBsZXIpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLXZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRTZWxlY3Rpb24oVEdy
YXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24pCi17Ci0gICAgYmVnaW5FcnJvcihzZWxlY3Rpb24tPmdl
dEludGVybVNlbGVjdGlvbigpKTsKLSAgICBtU2luayA8PCAiQW4gZXhwcmVzc2lvbiBkZXBlbmRl
bnQgb24gYSBzYW1wbGVyIGlzIG5vdCBwZXJtaXR0ZWQgaW4gYSBjb25kaXRpb25hbCBzdGF0ZW1l
bnQuXG4iOwotfQotCi12b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0TG9v
cChUR3JhcGhMb29wKiBsb29wKQotewotICAgIGJlZ2luRXJyb3IobG9vcC0+Z2V0SW50ZXJtTG9v
cCgpKTsKLSAgICBtU2luayA8PCAiQW4gZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24gYSBzYW1wbGVy
IGlzIG5vdCBwZXJtaXR0ZWQgaW4gYSBsb29wIGNvbmRpdGlvbi5cbiI7Ci19Ci0KLXZvaWQgUmVz
dHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRMb2dpY2FsT3AoVEdyYXBoTG9naWNhbE9w
KiBsb2dpY2FsT3ApCi17Ci0gICAgYmVnaW5FcnJvcihsb2dpY2FsT3AtPmdldEludGVybUxvZ2lj
YWxPcCgpKTsKLSAgICBtU2luayA8PCAiQW4gZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24gYSBzYW1w
bGVyIGlzIG5vdCBwZXJtaXR0ZWQgb24gdGhlIGxlZnQgaGFuZCBzaWRlIG9mIGEgbG9naWNhbCAi
Ci0gICAgICAgICAgPDwgbG9naWNhbE9wLT5nZXRPcFN0cmluZygpCi0gICAgICAgICAgPDwgIiBv
cGVyYXRvci5cbiI7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRl
clRpbWluZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTkxNjVjYTI4N2UzMzEw
MjU3ZDJjMDYwYjIwZmVjOWQ0ZTMwM2I3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1p
bmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAg
KzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNU
X0ZSQUdNRU5UX1NIQURFUl9USU1JTkdfSF8KLSNkZWZpbmUgQ09NUElMRVJfVElNSU5HX1JFU1RS
SUNUX0ZSQUdNRU5UX1NIQURFUl9USU1JTkdfSF8KLQotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVy
TGFuZy5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCi0jaW5jbHVkZSAi
Y29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCi0KLWNsYXNzIFRJbmZvU2lua0Jh
c2U7Ci0KLWNsYXNzIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcgOiBURGVwZW5kZW5jeUdy
YXBoVHJhdmVyc2VyIHsKLXB1YmxpYzoKLSAgICBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
KFRJbmZvU2lua0Jhc2UmIHNpbmspOwotICAgIHZvaWQgZW5mb3JjZVJlc3RyaWN0aW9ucyhjb25z
dCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCk7Ci0gICAgaW50IG51bUVycm9ycygpIGNvbnN0IHsg
cmV0dXJuIG1OdW1FcnJvcnM7IH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFyZ3VtZW50KFRH
cmFwaEFyZ3VtZW50KiBwYXJhbWV0ZXIpOwotICAgIHZpcnR1YWwgdm9pZCB2aXNpdFNlbGVjdGlv
bihUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbik7Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0TG9v
cChUR3JhcGhMb29wKiBsb29wKTsKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRMb2dpY2FsT3AoVEdy
YXBoTG9naWNhbE9wKiBsb2dpY2FsT3ApOwotCi1wcml2YXRlOgotICAgIHZvaWQgYmVnaW5FcnJv
cihjb25zdCBUSW50ZXJtTm9kZSogbm9kZSk7Ci0gICAgdm9pZCB2YWxpZGF0ZVVzZXJEZWZpbmVk
RnVuY3Rpb25DYWxsVXNhZ2UoY29uc3QgVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpOwotICAgIGJv
b2wgaXNTYW1wbGluZ09wKGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2Fs
bCkgY29uc3Q7Ci0KLSAgICBUSW5mb1NpbmtCYXNlJiBtU2luazsKLSAgICBpbnQgbU51bUVycm9y
czsKLQotICAgIHR5cGVkZWYgc3RkOjpzZXQ8VFN0cmluZz4gU3RyaW5nU2V0OwotICAgIFN0cmlu
Z1NldCBtU2FtcGxpbmdPcHM7Ci19OwotCi0jZW5kaWYgIC8vIENPTVBJTEVSX1RJTUlOR19SRVNU
UklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5n
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAz
NTVlYjYyZDY1MGI5OWRlNDY4NWFhOWQwMTQxZDRiZjI2ZTU5MDA0Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxl
ci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCIKLQotdm9pZCBSZXN0cmljdFZl
cnRleFNoYWRlclRpbWluZzo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKLXsKLSAg
ICBpZiAoSXNTYW1wbGVyKG5vZGUtPmdldEJhc2ljVHlwZSgpKSkgewotICAgICAgICArK21OdW1F
cnJvcnM7Ci0gICAgICAgIG1TaW5rLm1lc3NhZ2UoRVByZWZpeEVycm9yLAotICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmdldExpbmUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAiU2FtcGxl
cnMgYXJlIG5vdCBwZXJtaXR0ZWQgaW4gdmVydGV4IHNoYWRlcnMiKTsKLSAgICB9Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3Ry
aWN0VmVydGV4U2hhZGVyVGltaW5nLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDE5YTA1ZmE2OGJjOGJmZmY3OGI2OGI0MTk2Mjg2MzEyNDhjYjZjODEu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRp
bWluZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNp
Zm5kZWYgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX1ZFUlRFWF9TSEFERVJfVElNSU5HX0hfCi0j
ZGVmaW5lIENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9WRVJURVhfU0hBREVSX1RJTUlOR19IXwot
Ci0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCi0KLSNpbmNsdWRlICJjb21waWxlci9p
bnRlcm1lZGlhdGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgotCi1jbGFzcyBU
SW5mb1NpbmtCYXNlOwotCi1jbGFzcyBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZyA6IHB1Ymxp
YyBUSW50ZXJtVHJhdmVyc2VyIHsKLXB1YmxpYzoKLSAgICBSZXN0cmljdFZlcnRleFNoYWRlclRp
bWluZyhUSW5mb1NpbmtCYXNlJiBzaW5rKQotICAgICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1
ZSwgZmFsc2UsIGZhbHNlKQotICAgICAgICAsIG1TaW5rKHNpbmspCi0gICAgICAgICwgbU51bUVy
cm9ycygwKSB7fQotCi0gICAgdm9pZCBlbmZvcmNlUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiBy
b290KSB7IHJvb3QtPnRyYXZlcnNlKHRoaXMpOyB9Ci0gICAgaW50IG51bUVycm9ycygpIHsgcmV0
dXJuIG1OdW1FcnJvcnM7IH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJt
U3ltYm9sKik7Ci1wcml2YXRlOgotICAgIFRJbmZvU2lua0Jhc2UmIG1TaW5rOwotICAgIGludCBt
TnVtRXJyb3JzOwotfTsKLQotI2VuZGlmICAvLyBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfVkVS
VEVYX1NIQURFUl9USU1JTkdfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yLnZjeHByb2ogYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci52Y3hwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBhMjY5NDlmMDgzZGE1N2MzY2QxMjM0YjBkZGI4YjAyMDgxNzk5NTkwLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yLnZjeHByb2oKKysrIC9kZXYvbnVsbApAQCAt
MSwzMDQgKzAsMCBAQAot77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4N
Ci08UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxu
cz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4N
Ci0gIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+DQotICAgIDxQcm9q
ZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+DQotICAgICAgPENvbmZpZ3Vy
YXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+DQotICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0
Zm9ybT4NCi0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCi0gICAgPFByb2plY3RDb25maWd1
cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+DQotICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8
L0NvbmZpZ3VyYXRpb24+DQotICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+DQotICAgIDwv
UHJvamVjdENvbmZpZ3VyYXRpb24+DQotICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRl
PSJSZWxlYXNlfFdpbjMyIj4NCi0gICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1
cmF0aW9uPg0KLSAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+DQotICAgIDwvUHJvamVj
dENvbmZpZ3VyYXRpb24+DQotICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxl
YXNlfHg2NCI+DQotICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4N
Ci0gICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4NCi0gICAgPC9Qcm9qZWN0Q29uZmlndXJh
dGlvbj4NCi0gIDwvSXRlbUdyb3VwPg0KLSAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMi
Pg0KLSAgICA8UHJvamVjdEd1aWQ+ezVCM0E2REI4LTFFN0UtNDBENy05MkI5LURBOEFBRTYxOUZB
RH08L1Byb2plY3RHdWlkPg0KLSAgICA8Um9vdE5hbWVzcGFjZT5jb21waWxlcjwvUm9vdE5hbWVz
cGFjZT4NCi0gICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPg0KLSAgICA8UHJvamVjdE5h
bWU+dHJhbnNsYXRvcjwvUHJvamVjdE5hbWU+DQotICA8L1Byb3BlcnR5R3JvdXA+DQotICA8SW1w
b3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3Bz
IiAvPg0KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KLSAgICA8
Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+DQotICAg
IDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+DQotICAgIDxXaG9sZVByb2dyYW1P
cHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPg0KLSAgPC9Qcm9wZXJ0
eUdyb3VwPg0KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCi0gICAg
PENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KLSAg
ICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0Pg0KLSAgPC9Qcm9wZXJ0eUdyb3Vw
Pg0KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRm
b3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCi0gICAgPENvbmZp
Z3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KLSAgICA8Q2hh
cmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0Pg0KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1p
emF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4NCi0gIDwvUHJvcGVydHlHcm91
cD4NCi0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KLSAgICA8Q29uZmln
dXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+DQotICAgIDxDaGFy
YWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+DQotICA8L1Byb3BlcnR5R3JvdXA+DQotICA8
SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4N
Ci0gIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPg0KLSAgPC9JbXBvcnRH
cm91cD4NCi0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KLSAgICA8
SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSku
dXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5D
cHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0i
IC8+DQotICA8L0ltcG9ydEdyb3VwPg0KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29u
ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iUHJvcGVydHlT
aGVldHMiPg0KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5D
cHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3RE
aXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxB
cHBEYXRhUGxhdGZvcm0iIC8+DQotICA8L0ltcG9ydEdyb3VwPg0KLSAgPEltcG9ydEdyb3VwIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBM
YWJlbD0iUHJvcGVydHlTaGVldHMiPg0KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3RE
aXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlz
dHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycp
IiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQotICA8L0ltcG9ydEdyb3VwPg0KLSAg
PEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n
RGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCi0gICAgPEltcG9ydCBQcm9qZWN0
PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENv
bmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0p
LnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KLSAgPC9JbXBv
cnRHcm91cD4NCi0gIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPg0KLSAgPFBy
b3BlcnR5R3JvdXA+DQotICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuNDAyMTkuMTwvX1By
b2plY3RGaWxlVmVyc2lvbj4NCi0gICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRp
b24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JChTb2x1dGlvbkRpcikkKENvbmZpZ3Vy
YXRpb24pXDwvT3V0RGlyPg0KLSAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlv
bil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4kKENvbmZpZ3VyYXRpb24pXGNvbW1vblw8
L0ludERpcj4NCi0gICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJz09J0RlYnVnfHg2NCciPiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybSlcJChDb25maWd1
cmF0aW9uKVw8L091dERpcj4NCi0gICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRp
b24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlv
bilcPC9JbnREaXI+DQotICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRp
b24pXDwvT3V0RGlyPg0KLSAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8
JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiQoQ29uZmlndXJhdGlvbilcY29tbW9uXDwv
SW50RGlyPg0KLSAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pXCQoQ29uZmln
dXJhdGlvbilcPC9PdXREaXI+DQotICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiQoUGxhdGZvcm0pXCQoQ29uZmlndXJh
dGlvbilcPC9JbnREaXI+DQotICA8L1Byb3BlcnR5R3JvdXA+DQotICA8SXRlbURlZmluaXRpb25H
cm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdp
bjMyJyI+DQotICAgIDxDbENvbXBpbGU+DQotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwv
T3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQoUHJv
amVjdERpcik7JChQcm9qZWN0RGlyKS4uLzskKFByb2plY3REaXIpLi4vLi4vaW5jbHVkZTslKEFk
ZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVz
Pg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0xJQjtfQ1JU
X1NFQ1VSRV9OT19ERVBSRUNBVEU7Tk9NSU5NQVg7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8
L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxNaW5pbWFsUmVidWlsZD50cnVlPC9N
aW5pbWFsUmVidWlsZD4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkVuYWJsZUZhc3RDaGVj
a3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJl
YWRlZERlYnVnPC9SdW50aW1lTGlicmFyeT4NCi0gICAgICA8UHJlY29tcGlsZWRIZWFkZXI+DQot
ICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4NCi0gICAgICA8V2FybmluZ0xldmVsPkxldmVsNDwv
V2FybmluZ0xldmVsPg0KLSAgICAgIDxUcmVhdFdhcm5pbmdBc0Vycm9yPnRydWU8L1RyZWF0V2Fy
bmluZ0FzRXJyb3I+DQotICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+RWRpdEFuZENvbnRp
bnVlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KLSAgICAgIDxEaXNhYmxlU3BlY2lmaWNXYXJu
aW5ncz40MTAwOzQxMjc7NDE4OTs0MjM5OzQyNDQ7NDI0NTs0NTEyOzQ3MDI7NDcxODslKERpc2Fi
bGVTcGVjaWZpY1dhcm5pbmdzKTwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+DQotICAgIDwvQ2xD
b21waWxlPg0KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KLSAgPEl0ZW1EZWZpbml0aW9uR3Jv
dXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQn
Ij4NCi0gICAgPE1pZGw+DQotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52
aXJvbm1lbnQ+DQotICAgIDwvTWlkbD4NCi0gICAgPENsQ29tcGlsZT4NCi0gICAgICA8T3B0aW1p
emF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRl
RGlyZWN0b3JpZXM+JChQcm9qZWN0RGlyKTskKFByb2plY3REaXIpLi4vOyQoUHJvamVjdERpciku
Li8uLi9pbmNsdWRlOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJ
bmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMy
O19ERUJVRztfTElCO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWDslKFByZXByb2Nl
c3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPE1pbmlt
YWxSZWJ1aWxkPnRydWU8L01pbmltYWxSZWJ1aWxkPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVj
a3M+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxSdW50aW1l
TGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWc8L1J1bnRpbWVMaWJyYXJ5Pg0KLSAgICAgIDxQcmVj
b21waWxlZEhlYWRlcj4NCi0gICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDxXYXJu
aW5nTGV2ZWw+TGV2ZWw0PC9XYXJuaW5nTGV2ZWw+DQotICAgICAgPFRyZWF0V2FybmluZ0FzRXJy
b3I+dHJ1ZTwvVHJlYXRXYXJuaW5nQXNFcnJvcj4NCi0gICAgICA8RGVidWdJbmZvcm1hdGlvbkZv
cm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQotICAgICAgPERp
c2FibGVTcGVjaWZpY1dhcm5pbmdzPjQxMDA7NDEyNzs0MTg5OzQyMzk7NDI0NDs0MjQ1OzQyNjc7
NDUxMjs0NzAyOzQ3MTg7JShEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncyk8L0Rpc2FibGVTcGVjaWZp
Y1dhcm5pbmdzPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4N
Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQ
bGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPg0KLSAgICA8Q2xDb21waWxlPg0KLSAgICAgIDxP
cHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8SW5saW5lRnVuY3Rp
b25FeHBhbnNpb24+QW55U3VpdGFibGU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPg0KLSAgICAg
IDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQoUHJvamVjdERpcik7JChQcm9qZWN0RGly
KS4uLzskKFByb2plY3REaXIpLi4vLi4vaW5jbHVkZTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0
b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNz
b3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0xJQjtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7
Tk9NSU5NQVg7X1NFQ1VSRV9TQ0w9MDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJv
Y2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8
L1J1bnRpbWVMaWJyYXJ5Pg0KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4NCi0gICAgICA8L1By
ZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWw0PC9XYXJuaW5nTGV2
ZWw+DQotICAgICAgPFRyZWF0V2FybmluZ0FzRXJyb3I+dHJ1ZTwvVHJlYXRXYXJuaW5nQXNFcnJv
cj4NCi0gICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVn
SW5mb3JtYXRpb25Gb3JtYXQ+DQotICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzPjQxMDA7
NDEyNzs0MTg5OzQyMzk7NDI0NDs0MjQ1OzQ1MTI7NDcwMjs0NzE4OyUoRGlzYWJsZVNwZWNpZmlj
V2FybmluZ3MpPC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4NCi0gICAgPC9DbENvbXBpbGU+DQot
ICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRp
b249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+DQotICAg
IDxNaWRsPg0KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50
Pg0KLSAgICA8L01pZGw+DQotICAgIDxDbENvbXBpbGU+DQotICAgICAgPE9wdGltaXphdGlvbj5N
YXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5B
bnlTdWl0YWJsZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+DQotICAgICAgPEFkZGl0aW9uYWxJ
bmNsdWRlRGlyZWN0b3JpZXM+JChQcm9qZWN0RGlyKTskKFByb2plY3REaXIpLi4vOyQoUHJvamVj
dERpcikuLi8uLi9pbmNsdWRlOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0
aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25z
PldJTjMyO05ERUJVRztfTElCO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWDtfU0VD
VVJFX1NDTD0wOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0
aW9ucz4NCi0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJh
cnk+DQotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDwvUHJlY29tcGlsZWRIZWFk
ZXI+DQotICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDQ8L1dhcm5pbmdMZXZlbD4NCi0gICAgICA8
VHJlYXRXYXJuaW5nQXNFcnJvcj50cnVlPC9UcmVhdFdhcm5pbmdBc0Vycm9yPg0KLSAgICAgIDxE
ZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZv
cm1hdD4NCi0gICAgICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+NDEwMDs0MTI3OzQxODk7NDIz
OTs0MjQ0OzQyNDU7NDI2Nzs0NTEyOzQ3MDI7NDcxODslKERpc2FibGVTcGVjaWZpY1dhcm5pbmdz
KTwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgPC9JdGVt
RGVmaW5pdGlvbkdyb3VwPg0KLSAgPEl0ZW1Hcm91cD4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSJCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iQ29kZUdlbi5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iQ29tcGlsZXIuY3Bw
IiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImRlYnVnLmNwcCIgLz4NCi0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSJEZXRlY3RDYWxsRGVwdGguY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9IkRldGVjdERpc2NvbnRpbnVpdHkuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9IkRpYWdub3N0aWNzLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJEaXJlY3Rp
dmVIYW5kbGVyLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJGb3JMb29wVW5yb2xs
LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJJbmZvU2luay5jcHAiIC8+DQotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iSW5pdGlhbGl6ZS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iSW5pdGlhbGl6ZURsbC5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
SW5pdGlhbGl6ZUdMUG9zaXRpb24uY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Iklu
aXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Iklu
dGVybWVkaWF0ZS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iaW50ZXJtT3V0LmNw
cCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJJbnRlcm1UcmF2ZXJzZS5jcHAiIC8+DQot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwIiAvPg0KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Im9zc291cmNlX3dpbi5jcHAiIC8+DQotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iT3V0cHV0RVNTTC5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
T3V0cHV0R0xTTC5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iT3V0cHV0R0xTTEJh
c2UuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ik91dHB1dEhMU0wuY3BwIiAvPg0K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InBhcnNlQ29uc3QuY3BwIiAvPg0KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9IlBhcnNlQ29udGV4dC5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iUG9vbEFsbG9jLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJRdWFsaWZpZXJB
bGl2ZS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iUmVtb3ZlVHJlZS5jcHAiIC8+
DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iU2VhcmNoU3ltYm9sLmNwcCIgLz4NCi0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSJTaGFkZXJMYW5nLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSJTeW1ib2xUYWJsZS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iVHJhbnNs
YXRvckVTU0wuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlRyYW5zbGF0b3JHTFNM
LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJUcmFuc2xhdG9ySExTTC5jcHAiIC8+
DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCIgLz4NCi0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSJVbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwIiAvPg0KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9IlVuaWZvcm0uY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9InV0aWwuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlZhbGlkYXRlTGlt
aXRhdGlvbnMuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlZhcmlhYmxlSW5mby5j
cHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iVmFyaWFibGVQYWNrZXIuY3BwIiAvPg0K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Imdsc2xhbmdfbGV4LmNwcCIgLz4NCi0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSJnbHNsYW5nX3RhYi5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSJkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCIgLz4NCi0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSJkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIiAvPg0KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9ImRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNw
cCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJ0aW1pbmdcUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZy5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0idGltaW5nXFJlc3Ry
aWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
Llx0aGlyZF9wYXJ0eVxjb21waWxlclxBcnJheUJvdW5kc0NsYW1wZXIuY3BwIiAvPg0KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9IlZlcnNpb25HTFNMLmNwcCIgLz4NCi0gIDwvSXRlbUdyb3VwPg0K
LSAgPEl0ZW1Hcm91cD4NCi0gICAgPEN1c3RvbUJ1aWxkIEluY2x1ZGU9Imdsc2xhbmcubCI+DQot
ICAgICAgPE1lc3NhZ2UgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdEZWJ1Z3xXaW4zMiciPg0KLSAgICAgIDwvTWVzc2FnZT4NCi0gICAgICA8Q29tbWFuZCBDb25k
aXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+DQot
ICAgICAgPC9Db21tYW5kPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5wdXRzIENvbmRpdGlvbj0iJyQo
Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKEFkZGl0aW9uYWxJ
bnB1dHMpPC9BZGRpdGlvbmFsSW5wdXRzPg0KLSAgICAgIDxPdXRwdXRzIENvbmRpdGlvbj0iJyQo
Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKE91dHB1dHMpPC9P
dXRwdXRzPg0KLSAgICAgIDxNZXNzYWdlIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQ
bGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+DQotICAgICAgPC9NZXNzYWdlPg0KLSAgICAgIDxDb21t
YW5kIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0
JyI+DQotICAgICAgPC9Db21tYW5kPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5wdXRzIENvbmRpdGlv
bj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JShBZGRpdGlv
bmFsSW5wdXRzKTwvQWRkaXRpb25hbElucHV0cz4NCi0gICAgICA8T3V0cHV0cyBDb25kaXRpb249
IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoT3V0cHV0cyk8
L091dHB1dHM+DQotICAgICAgPE1lc3NhZ2UgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+DQotICAgICAgPC9NZXNzYWdlPg0KLSAgICAg
IDxDb21tYW5kIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVs
ZWFzZXxXaW4zMiciPg0KLSAgICAgIDwvQ29tbWFuZD4NCi0gICAgICA8QWRkaXRpb25hbElucHV0
cyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2lu
MzInIj4lKEFkZGl0aW9uYWxJbnB1dHMpPC9BZGRpdGlvbmFsSW5wdXRzPg0KLSAgICAgIDxPdXRw
dXRzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxX
aW4zMiciPiUoT3V0cHV0cyk8L091dHB1dHM+DQotICAgICAgPE1lc3NhZ2UgQ29uZGl0aW9uPSIn
JChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPg0KLSAgICAgIDwv
TWVzc2FnZT4NCi0gICAgICA8Q29tbWFuZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo
UGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+DQotICAgICAgPC9Db21tYW5kPg0KLSAgICAgIDxB
ZGRpdGlvbmFsSW5wdXRzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nUmVsZWFzZXx4NjQnIj4lKEFkZGl0aW9uYWxJbnB1dHMpPC9BZGRpdGlvbmFsSW5wdXRzPg0K
LSAgICAgIDxPdXRwdXRzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nUmVsZWFzZXx4NjQnIj4lKE91dHB1dHMpPC9PdXRwdXRzPg0KLSAgICA8L0N1c3RvbUJ1aWxk
Pg0KLSAgICA8Q3VzdG9tQnVpbGQgSW5jbHVkZT0iZ2xzbGFuZy55Ij4NCi0gICAgICA8TWVzc2Fn
ZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMy
JyI+DQotICAgICAgPC9NZXNzYWdlPg0KLSAgICAgIDxDb21tYW5kIENvbmRpdGlvbj0iJyQoQ29u
ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4NCi0gICAgICA8L0NvbW1h
bmQ+DQotICAgICAgPE91dHB1dHMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRm
b3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoT3V0cHV0cyk8L091dHB1dHM+DQotICAgICAgPE1lc3Nh
Z2UgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQn
Ij4NCi0gICAgICA8L01lc3NhZ2U+DQotICAgICAgPENvbW1hbmQgQ29uZGl0aW9uPSInJChDb25m
aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4NCi0gICAgICA8L0NvbW1hbmQ+
DQotICAgICAgPE91dHB1dHMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdEZWJ1Z3x4NjQnIj4lKE91dHB1dHMpPC9PdXRwdXRzPg0KLSAgICAgIDxNZXNzYWdlIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMici
Pg0KLSAgICAgIDwvTWVzc2FnZT4NCi0gICAgICA8Q29tbWFuZCBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4NCi0gICAgICA8L0NvbW1h
bmQ+DQotICAgICAgPE91dHB1dHMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRm
b3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JShPdXRwdXRzKTwvT3V0cHV0cz4NCi0gICAgICA8TWVz
c2FnZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8
eDY0JyI+DQotICAgICAgPC9NZXNzYWdlPg0KLSAgICAgIDxDb21tYW5kIENvbmRpdGlvbj0iJyQo
Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4NCi0gICAgICA8L0Nv
bW1hbmQ+DQotICAgICAgPE91dHB1dHMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoT3V0cHV0cyk8L091dHB1dHM+DQotICAgIDwvQ3Vz
dG9tQnVpbGQ+DQotICA8L0l0ZW1Hcm91cD4NCi0gIDxJdGVtR3JvdXA+DQotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iQmFzZVR5cGVzLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iQnVp
bHRJbkZ1bmN0aW9uRW11bGF0b3IuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJDb21t
b24uaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJDb25zdGFudFVuaW9uLmgiIC8+DQot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iZGVidWcuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSJEZXRlY3RDYWxsRGVwdGguaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJEZXRl
Y3REaXNjb250aW51aXR5LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iRGlhZ25vc3Rp
Y3MuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJEaXJlY3RpdmVIYW5kbGVyLmgiIC8+
DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iRm9yTG9vcFVucm9sbC5oIiAvPg0KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ikhhc2hOYW1lcy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
IkluZm9TaW5rLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iSW5pdGlhbGl6ZS5oIiAv
Pg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkluaXRpYWxpemVEbGwuaCIgLz4NCi0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSJJbml0aWFsaXplR2xvYmFscy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9IkluaXRpYWxpemVHTFBvc2l0aW9uLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9ImludGVybWVkaWF0ZS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImxvY2FsaW50
ZXJtZWRpYXRlLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iTWFwTG9uZ1ZhcmlhYmxl
TmFtZXMuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJNTWFwLmgiIC8+DQotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iTm9kZVNlYXJjaC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Im9zaW5jbHVkZS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ik91dHB1dEVTU0wu
aCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJPdXRwdXRHTFNMLmgiIC8+DQotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iT3V0cHV0R0xTTEJhc2UuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSJPdXRwdXRITFNMLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iUGFyc2VD
b250ZXh0LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iUG9vbEFsbG9jLmgiIC8+DQot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iUXVhbGlmaWVyQWxpdmUuaCIgLz4NCi0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSJSZW1vdmVUcmVlLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
UmVuYW1lRnVuY3Rpb24uaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNs
dWRlXEdMU0xBTkdcU2hhZGVyTGFuZy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlNl
YXJjaFN5bWJvbC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlNoSGFuZGxlLmgiIC8+
DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iU3ltYm9sVGFibGUuaCIgLz4NCi0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSJUcmFuc2xhdG9yRVNTTC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9IlRyYW5zbGF0b3JHTFNMLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iVHJhbnNs
YXRvckhMU0wuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJUeXBlcy5oIiAvPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlVuZm9sZFNob3J0Q2lyY3VpdC5oIiAvPg0KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9IlVuZm9sZFNob3J0Q2lyY3VpdEFTVC5oIiAvPg0KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9IlVuaWZvcm0uaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJ1dGls
LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iVmFsaWRhdGVMaW1pdGF0aW9ucy5oIiAv
Pg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlZhcmlhYmxlSW5mby5oIiAvPg0KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9IlZhcmlhYmxlUGFja2VyLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iZ2xzbGFuZ190YWIuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJ0aW1pbmdc
UmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9InRpbWluZ1xSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIiAvPg0KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9ImRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaC5oIiAvPg0KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9ImRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCIgLz4NCi0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSJkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCIgLz4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx0aGlyZF9wYXJ0eVxjb21waWxlclxBcnJheUJv
dW5kc0NsYW1wZXIuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJWZXJzaW9uR0xTTC5o
IiAvPg0KLSAgPC9JdGVtR3JvdXA+DQotICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0
aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPg0KLSAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRl
bnNpb25UYXJnZXRzIj4NCi0gIDwvSW1wb3J0R3JvdXA+DQotPC9Qcm9qZWN0PgpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yLnZjeHByb2ouZmlsdGVycwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMjI2MzEzN2U2MWZhZTFiODdhZjhmYWUwNTU4NzJkMGFkZmJh
M2Q2NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci52Y3hwcm9qLmZpbHRl
cnMKKysrIC9kZXYvbnVsbApAQCAtMSwzNjEgKzAsMCBAQAot77u/PD94bWwgdmVyc2lvbj0iMS4w
IiBlbmNvZGluZz0idXRmLTgiPz4NCi08UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9
Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+DQot
ICA8SXRlbUdyb3VwPg0KLSAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+DQotICAg
ICAgPFVuaXF1ZUlkZW50aWZpZXI+ezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJG
Rn08L1VuaXF1ZUlkZW50aWZpZXI+DQotICAgICAgPEV4dGVuc2lvbnM+Y3BwO2M7Y2M7Y3h4O2Rl
ZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXg8L0V4dGVuc2lvbnM+DQotICAgIDwvRmlsdGVyPg0K
LSAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlc1xnZW5lcmF0ZWQiPg0KLSAgICAgIDxV
bmlxdWVJZGVudGlmaWVyPntlYjhkYTE1Ny1iMjljLTQzYzMtODgwZC01NDY3OWUxNzZkYzV9PC9V
bmlxdWVJZGVudGlmaWVyPg0KLSAgICA8L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJbmNsdWRlPSJT
b3VyY2UgRmlsZXNcZGVwZ3JhcGgiPg0KLSAgICAgIDxVbmlxdWVJZGVudGlmaWVyPntiNTQxMGQz
YS1jM2M4LTRhZTYtODQzYS1iMDAwZDY1MjYzMmV9PC9VbmlxdWVJZGVudGlmaWVyPg0KLSAgICA8
L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXNcdGltaW5nIj4NCi0g
ICAgICA8VW5pcXVlSWRlbnRpZmllcj57YTk4NDc2MTEtZGNkNS00Yzg5LTgyNjItYTIyYjk2Yzdj
OThkfTwvVW5pcXVlSWRlbnRpZmllcj4NCi0gICAgPC9GaWx0ZXI+DQotICAgIDxGaWx0ZXIgSW5j
bHVkZT0iSGVhZGVyIEZpbGVzIj4NCi0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57OTM5OTUzODAt
ODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfTwvVW5pcXVlSWRlbnRpZmllcj4NCi0gICAgICA8
RXh0ZW5zaW9ucz5oO2hwcDtoeHg7aG07aW5sO2luYzt4c2Q8L0V4dGVuc2lvbnM+DQotICAgIDwv
RmlsdGVyPg0KLSAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlc1xnZW5lcmF0ZWQiPg0K
LSAgICAgIDxVbmlxdWVJZGVudGlmaWVyPnswOTRmNzExNS0zNWQzLTRjNjMtODcwYy1hYjVmMzkz
ZGMyYzJ9PC9VbmlxdWVJZGVudGlmaWVyPg0KLSAgICA8L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJ
bmNsdWRlPSJIZWFkZXIgRmlsZXNcdGltaW5nIj4NCi0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57
NWY1NzQyZTktMTVlMS00M2I0LWIxZTctMGMxMThiZTE0ZTA0fTwvVW5pcXVlSWRlbnRpZmllcj4N
Ci0gICAgPC9GaWx0ZXI+DQotICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzXGRlcGdy
YXBoIj4NCi0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57YzQwMDdlMzUtM2MxMS00NGQ2LTk1Zjct
YmI4MWRiNTI4MDY4fTwvVW5pcXVlSWRlbnRpZmllcj4NCi0gICAgPC9GaWx0ZXI+DQotICA8L0l0
ZW1Hcm91cD4NCi0gIDxJdGVtR3JvdXA+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0b3IuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmls
dGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJDb21waWxl
ci5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xD
b21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImRlYnVnLmNwcCI+DQotICAgICAgPEZp
bHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iRGV0ZWN0Q2FsbERlcHRoLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3Vy
Y2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iRGlhZ25vc3RpY3MuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmls
dGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJEaXJlY3Rp
dmVIYW5kbGVyLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0g
ICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iRm9yTG9vcFVucm9sbC5j
cHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21w
aWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkluZm9TaW5rLmNwcCI+DQotICAgICAgPEZp
bHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iSW5pdGlhbGl6ZS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZp
bGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
IkluaXRpYWxpemVEbGwuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVy
Pg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJJbml0aWFsaXpl
UGFyc2VDb250ZXh0LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4N
Ci0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iSW50ZXJtZWRpYXRl
LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENv
bXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iaW50ZXJtT3V0LmNwcCI+DQotICAgICAg
PEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iSW50ZXJtVHJhdmVyc2UuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNv
dXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSJNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNl
IEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Im9zc291cmNlX3dpbi5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0
ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InBhcnNlQ29u
c3QuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0Ns
Q29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJQb29sQWxsb2MuY3BwIj4NCi0gICAg
ICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSJRdWFsaWZpZXJBbGl2ZS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+
U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9IlJlbW92ZVRyZWUuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwv
RmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJTaGFk
ZXJMYW5nLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAg
PC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iU3ltYm9sVGFibGUuY3BwIj4N
Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4N
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJ1dGlsLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3Vy
Y2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZp
bGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
IlZhcmlhYmxlSW5mby5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+
DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlZhcmlhYmxlUGFj
a2VyLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9D
bENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iZ2xzbGFuZ19sZXguY3BwIj4NCi0g
ICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xnZW5lcmF0ZWQ8L0ZpbHRlcj4NCi0gICAgPC9DbENv
bXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iZ2xzbGFuZ190YWIuY3BwIj4NCi0gICAg
ICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xnZW5lcmF0ZWQ8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBp
bGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoLmNw
cCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcZGVwZ3JhcGg8L0ZpbHRlcj4NCi0gICAg
PC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iZGVwZ3JhcGhcRGVwZW5kZW5j
eUdyYXBoQnVpbGRlci5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGRlcGdyYXBo
PC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImRl
cGdyYXBoXERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNl
IEZpbGVzXGRlcGdyYXBoPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9ImRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCI+DQotICAg
ICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcZGVwZ3JhcGg8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBp
bGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0idGltaW5nXFJlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmcuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aW1pbmc8L0ZpbHRl
cj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0idGltaW5nXFJl
c3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmls
ZXNcdGltaW5nPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHRoaXJkX3BhcnR5XGNvbXBpbGVyXEFycmF5Qm91bmRzQ2xhbXBlci5jcHAiPg0K
LSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkluaXRpYWxpemVHTFBvc2l0aW9uLmNwcCI+DQotICAg
ICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iRGV0ZWN0RGlzY29udGludWl0eS5jcHAiPg0KLSAgICAgIDxG
aWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ik91dHB1dEhMU0wuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBG
aWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSJTZWFyY2hTeW1ib2wuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVy
Pg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJUcmFuc2xhdG9y
SExTTC5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwv
Q2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlVuZm9sZFNob3J0Q2lyY3VpdC5j
cHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21w
aWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlVuaWZvcm0uY3BwIj4NCi0gICAgICA8Rmls
dGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSJDb2RlR2VuLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8
L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iVHJh
bnNsYXRvckdMU0wuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0K
LSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJUcmFuc2xhdG9yRVNT
TC5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xD
b21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ik91dHB1dEVTU0wuY3BwIj4NCi0gICAg
ICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSJPdXRwdXRHTFNMLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3Vy
Y2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iT3V0cHV0R0xTTEJhc2UuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwv
RmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJWZXJz
aW9uR0xTTC5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAg
IDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlVuZm9sZFNob3J0Q2lyY3Vp
dEFTVC5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwv
Q2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlBhcnNlQ29udGV4dC5jcHAiPg0K
LSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0K
LSAgPC9JdGVtR3JvdXA+DQotICA8SXRlbUdyb3VwPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
IkJhc2VUeXBlcy5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAg
ICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJCdWlsdEluRnVuY3Rpb25F
bXVsYXRvci5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8
L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJDb21tb24uaCI+DQotICAgICAg
PEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iQ29uc3RhbnRVbmlvbi5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRl
ciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSJkZWJ1Zy5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAg
ICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJEZXRlY3RDYWxsRGVwdGgu
aCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1
ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iRGlhZ25vc3RpY3MuaCI+DQotICAgICAgPEZp
bHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iRGlyZWN0aXZlSGFuZGxlci5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRl
ciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSJGb3JMb29wVW5yb2xsLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0
ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkluZm9TaW5r
LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNs
dWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkluaXRpYWxpemUuaCI+DQotICAgICAgPEZp
bHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iSW5pdGlhbGl6ZURsbC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBG
aWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSJJbml0aWFsaXplR2xvYmFscy5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmls
dGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJJbml0aWFs
aXplUGFyc2VDb250ZXh0LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+
DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImludGVybWVkaWF0
ZS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5j
bHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJsb2NhbGludGVybWVkaWF0ZS5oIj4NCi0g
ICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSJNYXBMb25nVmFyaWFibGVOYW1lcy5oIj4NCi0gICAgICA8
RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSJNTWFwLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9G
aWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Im9zaW5j
bHVkZS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0Ns
SW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJQb29sQWxsb2MuaCI+DQotICAgICAg
PEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iUXVhbGlmaWVyQWxpdmUuaCI+DQotICAgICAgPEZpbHRlcj5IZWFk
ZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iUmVtb3ZlVHJlZS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVy
Pg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJSZW5hbWVGdW5j
dGlvbi5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0Ns
SW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXEdMU0xBTkdc
U2hhZGVyTGFuZy5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAg
ICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJTaEhhbmRsZS5oIj4NCi0g
ICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSJTeW1ib2xUYWJsZS5oIj4NCi0gICAgICA8RmlsdGVyPkhl
YWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSJUeXBlcy5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0K
LSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJ1dGlsLmgiPg0KLSAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlZhbGlkYXRlTGltaXRhdGlvbnMuaCI+DQotICAgICAgPEZp
bHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iVmFyaWFibGVJbmZvLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZp
bGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
IlZhcmlhYmxlUGFja2VyLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+
DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Imdsc2xhbmdfdGFi
LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXGdlbmVyYXRlZDwvRmlsdGVyPg0KLSAg
ICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJ0aW1pbmdcUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZy5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aW1p
bmc8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
dGltaW5nXFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVh
ZGVyIEZpbGVzXHRpbWluZzwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSJkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGguaCI+DQotICAgICAgPEZpbHRl
cj5IZWFkZXIgRmlsZXNcZGVwZ3JhcGg8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIj4N
Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xkZXBncmFwaDwvRmlsdGVyPg0KLSAgICA8L0Ns
SW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJkZXBncmFwaFxEZXBlbmRlbmN5R3Jh
cGhPdXRwdXQuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcZGVwZ3JhcGg8L0ZpbHRl
cj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iSGFzaE5hbWVz
LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNs
dWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkluaXRpYWxpemVHTFBvc2l0aW9uLmgiPg0K
LSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHRoaXJkX3BhcnR5XGNvbXBpbGVyXEFycmF5Qm91
bmRzQ2xhbXBlci5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAg
ICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJEZXRlY3REaXNjb250aW51
aXR5LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJ
bmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ik91dHB1dEhMU0wuaCI+DQotICAgICAg
PEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iU2VhcmNoU3ltYm9sLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVy
IEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9IlRyYW5zbGF0b3JITFNMLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0
ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlVuZm9sZFNo
b3J0Q2lyY3VpdC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAg
ICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJVbmlmb3JtLmgiPg0KLSAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlRyYW5zbGF0b3JHTFNMLmgiPg0KLSAgICAgIDxGaWx0ZXI+
SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9IlRyYW5zbGF0b3JFU1NMLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVz
PC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ik91
dHB1dEVTU0wuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAg
PC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iT3V0cHV0R0xTTC5oIj4NCi0g
ICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSJPdXRwdXRHTFNMQmFzZS5oIj4NCi0gICAgICA8RmlsdGVy
PkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSJWZXJzaW9uR0xTTC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwv
RmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJVbmZv
bGRTaG9ydENpcmN1aXRBU1QuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRl
cj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iUGFyc2VDb250
ZXh0LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJ
bmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ik5vZGVTZWFyY2guaCI+DQotICAgICAg
PEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICA8L0l0
ZW1Hcm91cD4NCi0gIDxJdGVtR3JvdXA+DQotICAgIDxDdXN0b21CdWlsZCBJbmNsdWRlPSJnbHNs
YW5nLmwiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ3Vz
dG9tQnVpbGQ+DQotICAgIDxDdXN0b21CdWlsZCBJbmNsdWRlPSJnbHNsYW5nLnkiPg0KLSAgICAg
IDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ3VzdG9tQnVpbGQ+DQotICA8
L0l0ZW1Hcm91cD4NCi08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
QmFzZVR5cGVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9CYXNlVHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YmRhZjE0OTgzOWQwYWY3YmI1NjQ0MGY4NDEz
YThkNDIwOTQ1MGY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQmFzZVR5cGVzLmgKQEAgLTAsMCArMSwxNDkgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX0JBU0lDVFlQRVNfSU5DTFVERURfCisjZGVmaW5l
IF9CQVNJQ1RZUEVTX0lOQ0xVREVEXworCisvLworLy8gUHJlY2lzaW9uIHF1YWxpZmllcnMKKy8v
CitlbnVtIFRQcmVjaXNpb24KK3sKKyAgICAvLyBUaGVzZSBuZWVkIHRvIGJlIGtlcHQgc29ydGVk
CisgICAgRWJwVW5kZWZpbmVkLAorICAgIEVicExvdywKKyAgICBFYnBNZWRpdW0sCisgICAgRWJw
SGlnaAorfTsKKworaW5saW5lIGNvbnN0IGNoYXIqIGdldFByZWNpc2lvblN0cmluZyhUUHJlY2lz
aW9uIHApCit7CisgICAgc3dpdGNoKHApCisgICAgeworICAgIGNhc2UgRWJwSGlnaDoJCXJldHVy
biAiaGlnaHAiOwkJYnJlYWs7CisgICAgY2FzZSBFYnBNZWRpdW06CQlyZXR1cm4gIm1lZGl1bXAi
OwlicmVhazsKKyAgICBjYXNlIEVicExvdzoJCXJldHVybiAibG93cCI7CQlicmVhazsKKyAgICBk
ZWZhdWx0OgkJCXJldHVybiAibWVkaXVtcCI7ICAgYnJlYWs7ICAgLy8gU2FmZXN0IGZhbGxiYWNr
CisgICAgfQorfQorCisvLworLy8gQmFzaWMgdHlwZS4gIEFycmF5cywgdmVjdG9ycywgZXRjLiwg
YXJlIG9ydGhvZ29uYWwgdG8gdGhpcy4KKy8vCitlbnVtIFRCYXNpY1R5cGUKK3sKKyAgICBFYnRW
b2lkLAorICAgIEVidEZsb2F0LAorICAgIEVidEludCwKKyAgICBFYnRCb29sLAorICAgIEVidEd1
YXJkU2FtcGxlckJlZ2luLCAgLy8gbm9uIHR5cGU6ICBzZWUgaW1wbGVtZW50YXRpb24gb2YgSXNT
YW1wbGVyKCkKKyAgICBFYnRTYW1wbGVyMkQsCisgICAgRWJ0U2FtcGxlckN1YmUsCisgICAgRWJ0
U2FtcGxlckV4dGVybmFsT0VTLCAgLy8gT25seSB2YWxpZCBpZiBPRVNfRUdMX2ltYWdlX2V4dGVy
bmFsIGV4aXN0cy4KKyAgICBFYnRTYW1wbGVyMkRSZWN0LCAgICAgICAvLyBPbmx5IHZhbGlkIGlm
IEdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSBleGlzdHMuCisgICAgRWJ0R3VhcmRTYW1wbGVyRW5k
LCAgICAvLyBub24gdHlwZTogIHNlZSBpbXBsZW1lbnRhdGlvbiBvZiBJc1NhbXBsZXIoKQorICAg
IEVidFN0cnVjdCwKKyAgICBFYnRBZGRyZXNzLCAgICAgICAgICAgIC8vIHNob3VsZCBiZSBkZXBy
ZWNhdGVkPz8KKyAgICBFYnRJbnZhcmlhbnQgICAgICAgICAgLy8gdXNlZCBhcyBhIHR5cGUgd2hl
biBxdWFsaWZ5aW5nIGEgcHJldmlvdXNseSBkZWNsYXJlZCB2YXJpYWJsZSBhcyBiZWluZyBpbnZh
cmlhbnQKK307CisKK2lubGluZSBjb25zdCBjaGFyKiBnZXRCYXNpY1N0cmluZyhUQmFzaWNUeXBl
IHQpCit7CisgICAgc3dpdGNoICh0KQorICAgIHsKKyAgICBjYXNlIEVidFZvaWQ6ICAgICAgICAg
ICAgICByZXR1cm4gInZvaWQiOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFYnRGbG9h
dDogICAgICAgICAgICAgcmV0dXJuICJmbG9hdCI7ICAgICAgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRWJ0SW50OiAgICAgICAgICAgICAgIHJldHVybiAiaW50IjsgICAgICAgICAgICAgICBicmVh
azsKKyAgICBjYXNlIEVidEJvb2w6ICAgICAgICAgICAgICByZXR1cm4gImJvb2wiOyAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgcmV0dXJuICJzYW1w
bGVyMkQiOyAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6ICAgICAgIHJl
dHVybiAic2FtcGxlckN1YmUiOyAgICAgICBicmVhazsKKyAgICBjYXNlIEVidFNhbXBsZXJFeHRl
cm5hbE9FUzogcmV0dXJuICJzYW1wbGVyRXh0ZXJuYWxPRVMiOyBicmVhazsKKyAgICBjYXNlIEVi
dFNhbXBsZXIyRFJlY3Q6ICAgICByZXR1cm4gInNhbXBsZXIyRFJlY3QiOyAgICAgYnJlYWs7Cisg
ICAgY2FzZSBFYnRTdHJ1Y3Q6ICAgICAgICAgICAgcmV0dXJuICJzdHJ1Y3R1cmUiOyAgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgIHJldHVybiAidW5rbm93biB0
eXBlIjsKKyAgICB9Cit9CisKK2lubGluZSBib29sIElzU2FtcGxlcihUQmFzaWNUeXBlIHR5cGUp
Cit7CisgICAgcmV0dXJuIHR5cGUgPiBFYnRHdWFyZFNhbXBsZXJCZWdpbiAmJiB0eXBlIDwgRWJ0
R3VhcmRTYW1wbGVyRW5kOworfQorCisvLworLy8gUXVhbGlmaWVycyBhbmQgYnVpbHQtaW5zLiAg
VGhlc2UgYXJlIG1haW5seSB1c2VkIHRvIHNlZSB3aGF0IGNhbiBiZSByZWFkCisvLyBvciB3cml0
dGVuLCBhbmQgYnkgdGhlIG1hY2hpbmUgZGVwZW5kZW50IHRyYW5zbGF0b3IgdG8ga25vdyB3aGlj
aCByZWdpc3RlcnMKKy8vIHRvIGFsbG9jYXRlIHZhcmlhYmxlcyBpbi4gIFNpbmNlIGJ1aWx0LWlu
cyB0ZW5kIHRvIGdvIHRvIGRpZmZlcmVudCByZWdpc3RlcnMKKy8vIHRoYW4gdmFyeWluZyBvciB1
bmlmb3JtLCBpdCBtYWtlcyBzZW5zZSB0aGV5IGFyZSBwZWVycywgbm90IHN1Yi1jbGFzc2VzLgor
Ly8KK2VudW0gVFF1YWxpZmllcgoreworICAgIEV2cVRlbXBvcmFyeSwgICAgIC8vIEZvciB0ZW1w
b3JhcmllcyAod2l0aGluIGEgZnVuY3Rpb24pLCByZWFkL3dyaXRlCisgICAgRXZxR2xvYmFsLCAg
ICAgICAgLy8gRm9yIGdsb2JhbHMgcmVhZC93cml0ZQorICAgIEV2cUludGVybmFsLCAgICAgIC8v
IEZvciBpbnRlcm5hbCB1c2UsIG5vdCB2aXNpYmxlIHRvIHRoZSB1c2VyCisgICAgRXZxQ29uc3Qs
ICAgICAgICAgLy8gVXNlciBkZWZpbmVkIGNvbnN0YW50cyBhbmQgbm9uLW91dHB1dCBwYXJhbWV0
ZXJzIGluIGZ1bmN0aW9ucworICAgIEV2cUF0dHJpYnV0ZSwgICAgIC8vIFJlYWRvbmx5CisgICAg
RXZxVmFyeWluZ0luLCAgICAgLy8gcmVhZG9ubHksIGZyYWdtZW50IHNoYWRlcnMgb25seQorICAg
IEV2cVZhcnlpbmdPdXQsICAgIC8vIHZlcnRleCBzaGFkZXJzIG9ubHkgIHJlYWQvd3JpdGUKKyAg
ICBFdnFJbnZhcmlhbnRWYXJ5aW5nSW4sICAgICAvLyByZWFkb25seSwgZnJhZ21lbnQgc2hhZGVy
cyBvbmx5CisgICAgRXZxSW52YXJpYW50VmFyeWluZ091dCwgICAgLy8gdmVydGV4IHNoYWRlcnMg
b25seSAgcmVhZC93cml0ZQorICAgIEV2cVVuaWZvcm0sICAgICAgIC8vIFJlYWRvbmx5LCB2ZXJ0
ZXggYW5kIGZyYWdtZW50CisKKyAgICAvLyBwYXJhbWV0ZXJzCisgICAgRXZxSW4sCisgICAgRXZx
T3V0LAorICAgIEV2cUluT3V0LAorICAgIEV2cUNvbnN0UmVhZE9ubHksCisKKyAgICAvLyBidWls
dC1pbnMgd3JpdHRlbiBieSB2ZXJ0ZXggc2hhZGVyCisgICAgRXZxUG9zaXRpb24sCisgICAgRXZx
UG9pbnRTaXplLAorCisgICAgLy8gYnVpbHQtaW5zIHJlYWQgYnkgZnJhZ21lbnQgc2hhZGVyCisg
ICAgRXZxRnJhZ0Nvb3JkLAorICAgIEV2cUZyb250RmFjaW5nLAorICAgIEV2cVBvaW50Q29vcmQs
CisKKyAgICAvLyBidWlsdC1pbnMgd3JpdHRlbiBieSBmcmFnbWVudCBzaGFkZXIKKyAgICBFdnFG
cmFnQ29sb3IsCisgICAgRXZxRnJhZ0RhdGEsCisgICAgRXZxRnJhZ0RlcHRoLAorCisgICAgLy8g
ZW5kIG9mIGxpc3QKKyAgICBFdnFMYXN0Cit9OworCisvLworLy8gVGhpcyBpcyBqdXN0IGZvciBk
ZWJ1ZyBwcmludCBvdXQsIGNhcnJpZWQgYWxvbmcgd2l0aCB0aGUgZGVmaW5pdGlvbnMgYWJvdmUu
CisvLworaW5saW5lIGNvbnN0IGNoYXIqIGdldFF1YWxpZmllclN0cmluZyhUUXVhbGlmaWVyIHEp
Cit7CisgICAgc3dpdGNoKHEpCisgICAgeworICAgIGNhc2UgRXZxVGVtcG9yYXJ5OiAgICAgIHJl
dHVybiAiVGVtcG9yYXJ5IjsgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUdsb2JhbDogICAgICAg
ICByZXR1cm4gIkdsb2JhbCI7ICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFDb25zdDogICAg
ICAgICAgcmV0dXJuICJjb25zdCI7ICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxQ29uc3RS
ZWFkT25seTogIHJldHVybiAiY29uc3QiOyAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUF0
dHJpYnV0ZTogICAgICByZXR1cm4gImF0dHJpYnV0ZSI7ICAgICAgYnJlYWs7CisgICAgY2FzZSBF
dnFWYXJ5aW5nSW46ICAgICAgcmV0dXJuICJ2YXJ5aW5nIjsgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRXZxVmFyeWluZ091dDogICAgIHJldHVybiAidmFyeWluZyI7ICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdJbjogcmV0dXJuICJpbnZhcmlhbnQgdmFyeWluZyI7
CWJyZWFrOworICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWluZ091dDpyZXR1cm4gImludmFyaWFu
dCB2YXJ5aW5nIjsJYnJlYWs7CisgICAgY2FzZSBFdnFVbmlmb3JtOiAgICAgICAgcmV0dXJuICJ1
bmlmb3JtIjsgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxSW46ICAgICAgICAgICAgIHJldHVy
biAiaW4iOyAgICAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cU91dDogICAgICAgICAgICBy
ZXR1cm4gIm91dCI7ICAgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFJbk91dDogICAgICAg
ICAgcmV0dXJuICJpbm91dCI7ICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxUG9zaXRpb246
ICAgICAgIHJldHVybiAiUG9zaXRpb24iOyAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cVBvaW50
U2l6ZTogICAgICByZXR1cm4gIlBvaW50U2l6ZSI7ICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFG
cmFnQ29vcmQ6ICAgICAgcmV0dXJuICJGcmFnQ29vcmQiOyAgICAgIGJyZWFrOworICAgIGNhc2Ug
RXZxRnJvbnRGYWNpbmc6ICAgIHJldHVybiAiRnJvbnRGYWNpbmciOyAgICBicmVhazsKKyAgICBj
YXNlIEV2cUZyYWdDb2xvcjogICAgICByZXR1cm4gIkZyYWdDb2xvciI7ICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBFdnFGcmFnRGF0YTogICAgICAgcmV0dXJuICJGcmFnRGF0YSI7ICAgICAgYnJlYWs7
CisgICAgY2FzZSBFdnFGcmFnRGVwdGg6ICAgICAgcmV0dXJuICJGcmFnRGVwdGgiOyAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgcmV0dXJuICJ1bmtub3duIHF1YWxpZmll
ciI7CisgICAgfQorfQorCisjZW5kaWYgLy8gX0JBU0lDVFlQRVNfSU5DTFVERURfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9CdWls
dEluRnVuY3Rpb25FbXVsYXRvci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OTJiNzFjNmJkYjE3MzdjMDEyYjY5NmQ1ZmQ5MGVmMDM3Mjc1Y2NlZAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0J1aWx0
SW5GdW5jdGlvbkVtdWxhdG9yLmNwcApAQCAtMCwwICsxLDQwNiBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuaCIKKwor
bmFtZXNwYWNlIHsKKworLy8gd2UgdXNlIG1hY3JvcyBoZXJlIGluc3RlYWQgb2YgZnVuY3Rpb24g
ZGVmaW5pdGlvbnMgdG8gd29yayBhcm91bmQgbW9yZSBHTFNMCisvLyBjb21waWxlciBidWdzLCBp
biBwYXJ0aWN1bGFyIG9uIE5WSURJQSBoYXJkd2FyZSBvbiBNYWMgT1NYLiBNYWNyb3MgYXJlCisv
LyBwcm9ibGVtYXRpYyBiZWNhdXNlIGlmIHRoZSBhcmd1bWVudCBoYXMgc2lkZS1lZmZlY3RzIHRo
ZXkgd2lsbCBiZSByZXBlYXRlZGx5CisvLyBldmFsdWF0ZWQuIFRoaXMgaXMgdW5saWtlbHkgdG8g
c2hvdyB1cCBpbiByZWFsIHNoYWRlcnMsIGJ1dCBpcyBzb21ldGhpbmcgdG8KKy8vIGNvbnNpZGVy
LgorY29uc3QgY2hhcioga0Z1bmN0aW9uRW11bGF0aW9uVmVydGV4U291cmNlW10gPSB7CisgICAg
IiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGNvcyhmbG9hdCkiLAorICAgICIjZXJyb3Igbm8gZW11
bGF0aW9uIGZvciBjb3ModmVjMikiLAorICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBjb3Mo
dmVjMykiLAorICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBjb3ModmVjNCkiLAorCisgICAg
IiNkZWZpbmUgd2ViZ2xfZGlzdGFuY2VfZW11KHgsIHkpICgoeCkgPj0gKHkpID8gKHgpIC0gKHkp
IDogKHkpIC0gKHgpKSIsCisgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRpc3RhbmNlKHZl
YzIsIHZlYzIpIiwKKyAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UodmVjMywg
dmVjMykiLAorICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkaXN0YW5jZSh2ZWM0LCB2ZWM0
KSIsCisKKyAgICAiI2RlZmluZSB3ZWJnbF9kb3RfZW11KHgsIHkpICgoeCkgKiAoeSkpIiwKKyAg
ICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZG90KHZlYzIsIHZlYzIpIiwKKyAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgZG90KHZlYzMsIHZlYzMpIiwKKyAgICAiI2Vycm9yIG5vIGVtdWxh
dGlvbiBmb3IgZG90KHZlYzQsIHZlYzQpIiwKKworICAgICIjZGVmaW5lIHdlYmdsX2xlbmd0aF9l
bXUoeCkgKCh4KSA+PSAwLjAgPyAoeCkgOiAtKHgpKSIsCisgICAgIiNlcnJvciBubyBlbXVsYXRp
b24gZm9yIGxlbmd0aCh2ZWMyKSIsCisgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0
aCh2ZWMzKSIsCisgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2ZWM0KSIsCisK
KyAgICAiI2RlZmluZSB3ZWJnbF9ub3JtYWxpemVfZW11KHgpICgoeCkgPT0gMC4wID8gMC4wIDog
KCh4KSA+IDAuMCA/IDEuMCA6IC0xLjApKSIsCisgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9y
IG5vcm1hbGl6ZSh2ZWMyKSIsCisgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6
ZSh2ZWMzKSIsCisgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2ZWM0KSIs
CisKKyAgICAiI2RlZmluZSB3ZWJnbF9yZWZsZWN0X2VtdShJLCBOKSAoKEkpIC0gMi4wICogKE4p
ICogKEkpICogKE4pKSIsCisgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIHJlZmxlY3QodmVj
MiwgdmVjMikiLAorICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciByZWZsZWN0KHZlYzMsIHZl
YzMpIiwKKyAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgcmVmbGVjdCh2ZWM0LCB2ZWM0KSIK
K307CisKK2NvbnN0IGNoYXIqIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50U291cmNlW10gPSB7
CisgICAgIndlYmdsX2VtdV9wcmVjaXNpb24gZmxvYXQgd2ViZ2xfY29zX2VtdSh3ZWJnbF9lbXVf
cHJlY2lzaW9uIGZsb2F0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCisgICAgIndlYmdsX2VtdV9w
cmVjaXNpb24gdmVjMiB3ZWJnbF9jb3NfZW11KHdlYmdsX2VtdV9wcmVjaXNpb24gdmVjMiBhKSB7
IHJldHVybiBjb3MoYSk7IH0iLAorICAgICJ3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzMgd2ViZ2xf
Y29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzMgYSkgeyByZXR1cm4gY29zKGEpOyB9IiwK
KyAgICAid2ViZ2xfZW11X3ByZWNpc2lvbiB2ZWM0IHdlYmdsX2Nvc19lbXUod2ViZ2xfZW11X3By
ZWNpc2lvbiB2ZWM0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCisKKyAgICAiI2RlZmluZSB3ZWJn
bF9kaXN0YW5jZV9lbXUoeCwgeSkgKCh4KSA+PSAoeSkgPyAoeCkgLSAoeSkgOiAoeSkgLSAoeCkp
IiwKKyAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UodmVjMiwgdmVjMikiLAor
ICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkaXN0YW5jZSh2ZWMzLCB2ZWMzKSIsCisgICAg
IiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRpc3RhbmNlKHZlYzQsIHZlYzQpIiwKKworICAgICIj
ZGVmaW5lIHdlYmdsX2RvdF9lbXUoeCwgeSkgKCh4KSAqICh5KSkiLAorICAgICIjZXJyb3Igbm8g
ZW11bGF0aW9uIGZvciBkb3QodmVjMiwgdmVjMikiLAorICAgICIjZXJyb3Igbm8gZW11bGF0aW9u
IGZvciBkb3QodmVjMywgdmVjMykiLAorICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3Qo
dmVjNCwgdmVjNCkiLAorCisgICAgIiNkZWZpbmUgd2ViZ2xfbGVuZ3RoX2VtdSh4KSAoKHgpID49
IDAuMCA/ICh4KSA6IC0oeCkpIiwKKyAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3Ro
KHZlYzIpIiwKKyAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3RoKHZlYzMpIiwKKyAg
ICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3RoKHZlYzQpIiwKKworICAgICIjZGVmaW5l
IHdlYmdsX25vcm1hbGl6ZV9lbXUoeCkgKCh4KSA9PSAwLjAgPyAwLjAgOiAoKHgpID4gMC4wID8g
MS4wIDogLTEuMCkpIiwKKyAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZl
YzIpIiwKKyAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzMpIiwKKyAg
ICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzQpIiwKKworICAgICIjZGVm
aW5lIHdlYmdsX3JlZmxlY3RfZW11KEksIE4pICgoSSkgLSAyLjAgKiAoTikgKiAoSSkgKiAoTikp
IiwKKyAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgcmVmbGVjdCh2ZWMyLCB2ZWMyKSIsCisg
ICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIHJlZmxlY3QodmVjMywgdmVjMykiLAorICAgICIj
ZXJyb3Igbm8gZW11bGF0aW9uIGZvciByZWZsZWN0KHZlYzQsIHZlYzQpIgorfTsKKworY29uc3Qg
Ym9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7CisjaWYgZGVmaW5lZChfX0FQ
UExFX18pCisgICAgLy8gV29yayBhcm91bmQgQVRJIGRyaXZlciBidWdzIGluIE1hYy4KKyAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uQ29zMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MyCisgICAg
ZmFsc2UsIC8vIFRGdW5jdGlvbkNvczMKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zNAorICAg
IHRydWUsICAvLyBURnVuY3Rpb25EaXN0YW5jZTFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25E
aXN0YW5jZTJfMgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTNfMworICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25EaXN0YW5jZTRfNAorICAgIHRydWUsICAvLyBURnVuY3Rpb25Eb3QxXzEK
KyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90Ml8yCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRv
dDNfMworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3Q0XzQKKyAgICB0cnVlLCAgLy8gVEZ1bmN0
aW9uTGVuZ3RoMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgyCisgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkxlbmd0aDMKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoNAorICAgIHRy
dWUsICAvLyBURnVuY3Rpb25Ob3JtYWxpemUxCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1h
bGl6ZTIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMworICAgIGZhbHNlLCAvLyBU
RnVuY3Rpb25Ob3JtYWxpemU0CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvblJlZmxlY3QxXzEKKyAg
ICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDJfMgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25S
ZWZsZWN0M18zCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3Q0XzQKKyNlbHNlCisgICAg
Ly8gV29yayBhcm91bmQgRDNEIGRyaXZlciBidWcgaW4gV2luLgorICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25Db3MxCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczIKKyAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uQ29zMworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3M0CisgICAgZmFsc2UsIC8vIFRG
dW5jdGlvbkRpc3RhbmNlMV8xCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlMl8yCisg
ICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlM18zCisgICAgZmFsc2UsIC8vIFRGdW5jdGlv
bkRpc3RhbmNlNF80CisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDFfMQorICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25Eb3QyXzIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90M18zCisgICAgZmFs
c2UsIC8vIFRGdW5jdGlvbkRvdDRfNAorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgxCisg
ICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVu
Z3RoMworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0CisgICAgZmFsc2UsIC8vIFRGdW5j
dGlvbk5vcm1hbGl6ZTEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMgorICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUzCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1h
bGl6ZTQKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDFfMQorICAgIGZhbHNlLCAvLyBU
RnVuY3Rpb25SZWZsZWN0Ml8yCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QzXzMKKyAg
ICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDRfNAorI2VuZGlmCisgICAgZmFsc2UgIC8vIFRG
dW5jdGlvblVua25vd24KK307CisKK2NvbnN0IGJvb2wga0Z1bmN0aW9uRW11bGF0aW9uRnJhZ21l
bnRNYXNrW10gPSB7CisjaWYgZGVmaW5lZChfX0FQUExFX18pCisgICAgLy8gV29yayBhcm91bmQg
QVRJIGRyaXZlciBidWdzIGluIE1hYy4KKyAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uQ29zMQorICAg
IHRydWUsICAvLyBURnVuY3Rpb25Db3MyCisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczMKKyAg
ICB0cnVlLCAgLy8gVEZ1bmN0aW9uQ29zNAorICAgIHRydWUsICAvLyBURnVuY3Rpb25EaXN0YW5j
ZTFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTJfMgorICAgIGZhbHNlLCAvLyBU
RnVuY3Rpb25EaXN0YW5jZTNfMworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTRfNAor
ICAgIHRydWUsICAvLyBURnVuY3Rpb25Eb3QxXzEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90
Ml8yCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDNfMworICAgIGZhbHNlLCAvLyBURnVuY3Rp
b25Eb3Q0XzQKKyAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uTGVuZ3RoMQorICAgIGZhbHNlLCAvLyBU
RnVuY3Rpb25MZW5ndGgyCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDMKKyAgICBmYWxz
ZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoNAorICAgIHRydWUsICAvLyBURnVuY3Rpb25Ob3JtYWxpemUx
CisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uTm9ybWFsaXplMworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemU0CisgICAgdHJ1
ZSwgIC8vIFRGdW5jdGlvblJlZmxlY3QxXzEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVj
dDJfMgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0M18zCisgICAgZmFsc2UsIC8vIFRG
dW5jdGlvblJlZmxlY3Q0XzQKKyNlbHNlCisgICAgLy8gV29yayBhcm91bmQgRDNEIGRyaXZlciBi
dWcgaW4gV2luLgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MxCisgICAgZmFsc2UsIC8vIFRG
dW5jdGlvbkNvczIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMworICAgIGZhbHNlLCAvLyBU
RnVuY3Rpb25Db3M0CisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlMV8xCisgICAgZmFs
c2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlMl8yCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3Rh
bmNlM18zCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlNF80CisgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkRvdDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3QyXzIKKyAgICBmYWxz
ZSwgLy8gVEZ1bmN0aW9uRG90M18zCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDRfNAorICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgxCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0
aDIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMworICAgIGZhbHNlLCAvLyBURnVuY3Rp
b25MZW5ndGg0CisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTEKKyAgICBmYWxzZSwg
Ly8gVEZ1bmN0aW9uTm9ybWFsaXplMgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUz
CisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTQKKyAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uUmVmbGVjdDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0Ml8yCisgICAgZmFs
c2UsIC8vIFRGdW5jdGlvblJlZmxlY3QzXzMKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVj
dDRfNAorI2VuZGlmCisgICAgZmFsc2UgIC8vIFRGdW5jdGlvblVua25vd24KK307CisKK2NsYXNz
IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdGlvbk1hcmtlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2Vy
IHsKK3B1YmxpYzoKKyAgICBCdWlsdEluRnVuY3Rpb25FbXVsYXRpb25NYXJrZXIoQnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3ImIGVtdWxhdG9yKQorICAgICAgICA6IG1FbXVsYXRvcihlbXVsYXRvcikK
KyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQs
IFRJbnRlcm1VbmFyeSogbm9kZSkKKyAgICB7CisgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNp
dCkgeworICAgICAgICAgICAgYm9vbCBuZWVkVG9FbXVsYXRlID0gbUVtdWxhdG9yLlNldEZ1bmN0
aW9uQ2FsbGVkKAorICAgICAgICAgICAgICAgIG5vZGUtPmdldE9wKCksIG5vZGUtPmdldE9wZXJh
bmQoKS0+Z2V0VHlwZSgpKTsKKyAgICAgICAgICAgIGlmIChuZWVkVG9FbXVsYXRlKQorICAgICAg
ICAgICAgICAgIG5vZGUtPnNldFVzZUVtdWxhdGVkRnVuY3Rpb24oKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdh
dGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCisgICAgeworICAgICAgICBp
ZiAodmlzaXQgPT0gUHJlVmlzaXQpIHsKKyAgICAgICAgICAgIC8vIEhlcmUgd2UgaGFuZGxlIGFs
bCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zIGluc3RlYWQgb2YgdGhlIG9uZXMgd2UKKyAgICAgICAg
ICAgIC8vIGN1cnJlbnRseSBpZGVudGlmaWVkIGFzIHByb2JsZW1hdGljLgorICAgICAgICAgICAg
c3dpdGNoIChub2RlLT5nZXRPcCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBFT3BMZXNzVGhh
bjoKKyAgICAgICAgICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgorICAgICAgICAgICAgICAg
IGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoKKyAgICAgICAgICAgICAgICBjYXNlIEVPcEdyZWF0ZXJU
aGFuRXF1YWw6CisgICAgICAgICAgICAgICAgY2FzZSBFT3BWZWN0b3JFcXVhbDoKKyAgICAgICAg
ICAgICAgICBjYXNlIEVPcFZlY3Rvck5vdEVxdWFsOgorICAgICAgICAgICAgICAgIGNhc2UgRU9w
TW9kOgorICAgICAgICAgICAgICAgIGNhc2UgRU9wUG93OgorICAgICAgICAgICAgICAgIGNhc2Ug
RU9wQXRhbjoKKyAgICAgICAgICAgICAgICBjYXNlIEVPcE1pbjoKKyAgICAgICAgICAgICAgICBj
YXNlIEVPcE1heDoKKyAgICAgICAgICAgICAgICBjYXNlIEVPcENsYW1wOgorICAgICAgICAgICAg
ICAgIGNhc2UgRU9wTWl4OgorICAgICAgICAgICAgICAgIGNhc2UgRU9wU3RlcDoKKyAgICAgICAg
ICAgICAgICBjYXNlIEVPcFNtb290aFN0ZXA6CisgICAgICAgICAgICAgICAgY2FzZSBFT3BEaXN0
YW5jZToKKyAgICAgICAgICAgICAgICBjYXNlIEVPcERvdDoKKyAgICAgICAgICAgICAgICBjYXNl
IEVPcENyb3NzOgorICAgICAgICAgICAgICAgIGNhc2UgRU9wRmFjZUZvcndhcmQ6CisgICAgICAg
ICAgICAgICAgY2FzZSBFT3BSZWZsZWN0OgorICAgICAgICAgICAgICAgIGNhc2UgRU9wUmVmcmFj
dDoKKyAgICAgICAgICAgICAgICBjYXNlIEVPcE11bDoKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgY29uc3QgVEludGVybVNlcXVlbmNl
JiBzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAgICAvLyBSaWdodCBu
b3cgd2Ugb25seSBoYW5kbGUgYnVpbHQtaW4gZnVuY3Rpb25zIHdpdGggdHdvIHBhcmFtZXRlcnMu
CisgICAgICAgICAgICBpZiAoc2VxdWVuY2Uuc2l6ZSgpICE9IDIpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIHBhcmFtMSA9IHNlcXVlbmNl
WzBdLT5nZXRBc1R5cGVkKCk7CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIHBhcmFtMiA9IHNl
cXVlbmNlWzFdLT5nZXRBc1R5cGVkKCk7CisgICAgICAgICAgICBpZiAoIXBhcmFtMSB8fCAhcGFy
YW0yKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgYm9vbCBuZWVk
VG9FbXVsYXRlID0gbUVtdWxhdG9yLlNldEZ1bmN0aW9uQ2FsbGVkKAorICAgICAgICAgICAgICAg
IG5vZGUtPmdldE9wKCksIHBhcmFtMS0+Z2V0VHlwZSgpLCBwYXJhbTItPmdldFR5cGUoKSk7Cisg
ICAgICAgICAgICBpZiAobmVlZFRvRW11bGF0ZSkKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRV
c2VFbXVsYXRlZEZ1bmN0aW9uKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yJiBtRW11bGF0b3I7
Cit9OworCit9ICAvLyBhbm9ueW1vdXMgbmFtZXBzYWNlCisKK0J1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yOjpCdWlsdEluRnVuY3Rpb25FbXVsYXRvcihTaFNoYWRlclR5cGUgc2hhZGVyVHlwZSkKK3sK
KyAgICBpZiAoc2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpIHsKKyAgICAgICAgbUZ1
bmN0aW9uTWFzayA9IGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50TWFzazsKKyAgICAgICAgbUZ1
bmN0aW9uU291cmNlID0ga0Z1bmN0aW9uRW11bGF0aW9uRnJhZ21lbnRTb3VyY2U7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgbUZ1bmN0aW9uTWFzayA9IGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleE1h
c2s7CisgICAgICAgIG1GdW5jdGlvblNvdXJjZSA9IGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleFNv
dXJjZTsKKyAgICB9Cit9CisKK2Jvb2wgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OlNldEZ1bmN0
aW9uQ2FsbGVkKAorICAgIFRPcGVyYXRvciBvcCwgY29uc3QgVFR5cGUmIHBhcmFtKQoreworICAg
IFRCdWlsdEluRnVuY3Rpb24gZnVuY3Rpb24gPSBJZGVudGlmeUZ1bmN0aW9uKG9wLCBwYXJhbSk7
CisgICAgcmV0dXJuIFNldEZ1bmN0aW9uQ2FsbGVkKGZ1bmN0aW9uKTsKK30KKworYm9vbCBCdWls
dEluRnVuY3Rpb25FbXVsYXRvcjo6U2V0RnVuY3Rpb25DYWxsZWQoCisgICAgVE9wZXJhdG9yIG9w
LCBjb25zdCBUVHlwZSYgcGFyYW0xLCBjb25zdCBUVHlwZSYgcGFyYW0yKQoreworICAgIFRCdWls
dEluRnVuY3Rpb24gZnVuY3Rpb24gPSBJZGVudGlmeUZ1bmN0aW9uKG9wLCBwYXJhbTEsIHBhcmFt
Mik7CisgICAgcmV0dXJuIFNldEZ1bmN0aW9uQ2FsbGVkKGZ1bmN0aW9uKTsKK30KKworYm9vbCBC
dWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6U2V0RnVuY3Rpb25DYWxsZWQoCisgICAgQnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3I6OlRCdWlsdEluRnVuY3Rpb24gZnVuY3Rpb24pIHsKKyAgICBpZiAoZnVu
Y3Rpb24gPT0gVEZ1bmN0aW9uVW5rbm93biB8fCBtRnVuY3Rpb25NYXNrW2Z1bmN0aW9uXSA9PSBm
YWxzZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bUZ1bmN0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobUZ1bmN0aW9uc1tpXSA9PSBm
dW5jdGlvbikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBtRnVuY3Rpb25z
LnB1c2hfYmFjayhmdW5jdGlvbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0b3I6Ok91dHB1dEVtdWxhdGVkRnVuY3Rpb25EZWZpbml0aW9uKAorICAg
IFRJbmZvU2lua0Jhc2UmIG91dCwgYm9vbCB3aXRoUHJlY2lzaW9uKSBjb25zdAoreworICAgIGlm
IChtRnVuY3Rpb25zLnNpemUoKSA9PSAwKQorICAgICAgICByZXR1cm47CisgICAgb3V0IDw8ICIv
LyBCRUdJTjogR2VuZXJhdGVkIGNvZGUgZm9yIGJ1aWx0LWluIGZ1bmN0aW9uIGVtdWxhdGlvblxu
XG4iOworICAgIGlmICh3aXRoUHJlY2lzaW9uKSB7CisgICAgICAgIG91dCA8PCAiI2lmIGRlZmlu
ZWQoR0xfRlJBR01FTlRfUFJFQ0lTSU9OX0hJR0gpXG4iCisgICAgICAgICAgICA8PCAiI2RlZmlu
ZSB3ZWJnbF9lbXVfcHJlY2lzaW9uIGhpZ2hwXG4iCisgICAgICAgICAgICA8PCAiI2Vsc2VcbiIK
KyAgICAgICAgICAgIDw8ICIjZGVmaW5lIHdlYmdsX2VtdV9wcmVjaXNpb24gbWVkaXVtcFxuIgor
ICAgICAgICAgICAgPDwgIiNlbmRpZlxuXG4iOworICAgIH0gZWxzZSB7CisgICAgICAgIG91dCA8
PCAiI2RlZmluZSB3ZWJnbF9lbXVfcHJlY2lzaW9uXG5cbiI7CisgICAgfQorICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbUZ1bmN0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBvdXQgPDwg
bUZ1bmN0aW9uU291cmNlW21GdW5jdGlvbnNbaV1dIDw8ICJcblxuIjsKKyAgICB9CisgICAgb3V0
IDw8ICIvLyBFTkQ6IEdlbmVyYXRlZCBjb2RlIGZvciBidWlsdC1pbiBmdW5jdGlvbiBlbXVsYXRp
b25cblxuIjsKK30KKworQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OlRCdWlsdEluRnVuY3Rpb24K
K0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpJZGVudGlmeUZ1bmN0aW9uKAorICAgIFRPcGVyYXRv
ciBvcCwgY29uc3QgVFR5cGUmIHBhcmFtKQoreworICAgIGlmIChwYXJhbS5nZXROb21pbmFsU2l6
ZSgpID4gNCkKKyAgICAgICAgcmV0dXJuIFRGdW5jdGlvblVua25vd247CisgICAgdW5zaWduZWQg
aW50IGZ1bmN0aW9uID0gVEZ1bmN0aW9uVW5rbm93bjsKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAg
ICAgIGNhc2UgRU9wQ29zOgorICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25Db3MxOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTGVuZ3RoOgorICAgICAgICAgICAg
ZnVuY3Rpb24gPSBURnVuY3Rpb25MZW5ndGgxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wTm9ybWFsaXplOgorICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25Ob3Jt
YWxpemUxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgaWYgKGZ1bmN0aW9uID09IFRGdW5jdGlvblVua25vd24pCisg
ICAgICAgIHJldHVybiBURnVuY3Rpb25Vbmtub3duOworICAgIGlmIChwYXJhbS5pc1ZlY3Rvcigp
KQorICAgICAgICBmdW5jdGlvbiArPSBwYXJhbS5nZXROb21pbmFsU2l6ZSgpIC0gMTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VEJ1aWx0SW5GdW5jdGlvbj4oZnVuY3Rpb24pOworfQorCitCdWls
dEluRnVuY3Rpb25FbXVsYXRvcjo6VEJ1aWx0SW5GdW5jdGlvbgorQnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3I6OklkZW50aWZ5RnVuY3Rpb24oCisgICAgVE9wZXJhdG9yIG9wLCBjb25zdCBUVHlwZSYg
cGFyYW0xLCBjb25zdCBUVHlwZSYgcGFyYW0yKQoreworICAgIC8vIFJpZ2h0IG5vdyBmb3IgYWxs
IHRoZSBlbXVsYXRlZCBmdW5jdGlvbnMgd2l0aCB0d28gcGFyYW1ldGVycywgdGhlIHR3bworICAg
IC8vIHBhcmFtZXRlcnMgaGF2ZSB0aGUgc2FtZSB0eXBlLgorICAgIGlmIChwYXJhbTEuaXNWZWN0
b3IoKSAhPSBwYXJhbTIuaXNWZWN0b3IoKSB8fAorICAgICAgICBwYXJhbTEuZ2V0Tm9taW5hbFNp
emUoKSAhPSBwYXJhbTIuZ2V0Tm9taW5hbFNpemUoKSB8fAorICAgICAgICBwYXJhbTEuZ2V0Tm9t
aW5hbFNpemUoKSA+IDQpCisgICAgICAgIHJldHVybiBURnVuY3Rpb25Vbmtub3duOworCisgICAg
dW5zaWduZWQgaW50IGZ1bmN0aW9uID0gVEZ1bmN0aW9uVW5rbm93bjsKKyAgICBzd2l0Y2ggKG9w
KSB7CisgICAgICAgIGNhc2UgRU9wRGlzdGFuY2U6CisgICAgICAgICAgICBmdW5jdGlvbiA9IFRG
dW5jdGlvbkRpc3RhbmNlMV8xOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
RG90OgorICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25Eb3QxXzE7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BSZWZsZWN0OgorICAgICAgICAgICAgZnVuY3Rpb24g
PSBURnVuY3Rpb25SZWZsZWN0MV8xOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKGZ1bmN0aW9uID09IFRGdW5j
dGlvblVua25vd24pCisgICAgICAgIHJldHVybiBURnVuY3Rpb25Vbmtub3duOworICAgIGlmIChw
YXJhbTEuaXNWZWN0b3IoKSkKKyAgICAgICAgZnVuY3Rpb24gKz0gcGFyYW0xLmdldE5vbWluYWxT
aXplKCkgLSAxOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUQnVpbHRJbkZ1bmN0aW9uPihmdW5j
dGlvbik7Cit9CisKK3ZvaWQgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6Ok1hcmtCdWlsdEluRnVu
Y3Rpb25zRm9yRW11bGF0aW9uKAorICAgIFRJbnRlcm1Ob2RlKiByb290KQoreworICAgIEFTU0VS
VChyb290KTsKKworICAgIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdGlvbk1hcmtlciBtYXJrZXIoKnRo
aXMpOworICAgIHJvb3QtPnRyYXZlcnNlKCZtYXJrZXIpOworfQorCit2b2lkIEJ1aWx0SW5GdW5j
dGlvbkVtdWxhdG9yOjpDbGVhbnVwKCkKK3sKKyAgICBtRnVuY3Rpb25zLmNsZWFyKCk7Cit9CisK
Ky8vc3RhdGljCitUU3RyaW5nIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpHZXRFbXVsYXRlZEZ1
bmN0aW9uTmFtZSgKKyAgICBjb25zdCBUU3RyaW5nJiBuYW1lKQoreworICAgIEFTU0VSVChuYW1l
W25hbWUubGVuZ3RoKCkgLSAxXSA9PSAnKCcpOworICAgIHJldHVybiAid2ViZ2xfIiArIG5hbWUu
c3Vic3RyKDAsIG5hbWUubGVuZ3RoKCkgLSAxKSArICJfZW11KCI7Cit9CisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0J1aWx0SW5G
dW5jdGlvbkVtdWxhdG9yLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNmYjcxYTgw
M2FjYzdkMjgzNGJmNDBmNDlmZDlmOGFiYjI0NjlkMzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9CdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5oCkBAIC0wLDAgKzEsOTMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENP
TVBJTElFUl9CVUlMVF9JTl9GVU5DVElPTl9FTVVMQVRPUl9IXworI2RlZmluZSBDT01QSUxJRVJf
QlVJTFRfSU5fRlVOQ1RJT05fRU1VTEFUT1JfSF8KKworI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVy
TGFuZy5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisKKy8vCisvLyBUaGlz
IGNsYXNzIGRlY2lkZXMgd2hpY2ggYnVpbHQtaW4gZnVuY3Rpb25zIG5lZWQgdG8gYmUgcmVwbGFj
ZWQgd2l0aCB0aGUKKy8vIGVtdWxhdGVkIG9uZXMuCisvLyBJdCdzIG9ubHkgYSB3b3JrYXJvdW5k
IGZvciBPcGVuR0wgZHJpdmVyIGJ1Z3MsIGFuZCBpc24ndCBuZWVkZWQgaW4gZ2VuZXJhbC4KKy8v
CitjbGFzcyBCdWlsdEluRnVuY3Rpb25FbXVsYXRvciB7CitwdWJsaWM6CisgICAgQnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3IoU2hTaGFkZXJUeXBlIHNoYWRlclR5cGUpOworICAgIC8vIFJlY29yZHMg
dGhhdCBhIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgc2hhZGVyIGFuZCBtaWdodCBuZWVkcyB0
byBiZQorICAgIC8vIGVtdWxhdGVkLiAgSWYgdGhlIGZ1bmN0aW9uJ3MgZ3JvdXAgaXMgbm90IGlu
IG1GdW5jdGlvbkdyb3VwRmlsdGVyLCB0aGlzCisgICAgLy8gYmVjb21lcyBhbiBuby1vcC4KKyAg
ICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGZ1bmN0aW9uIGNhbGwgbmVlZHMgdG8gYmUgcmVwbGFj
ZWQgd2l0aCBhbiBlbXVsYXRlZAorICAgIC8vIG9uZS4KKyAgICBib29sIFNldEZ1bmN0aW9uQ2Fs
bGVkKFRPcGVyYXRvciBvcCwgY29uc3QgVFR5cGUmIHBhcmFtKTsKKyAgICBib29sIFNldEZ1bmN0
aW9uQ2FsbGVkKAorICAgICAgICBUT3BlcmF0b3Igb3AsIGNvbnN0IFRUeXBlJiBwYXJhbTEsIGNv
bnN0IFRUeXBlJiBwYXJhbTIpOworCisgICAgLy8gT3V0cHV0IGZ1bmN0aW9uIGVtdWxhdGlvbiBk
ZWZpbml0aW9uLiAgVGhpcyBzaG91bGQgYmUgYmVmb3JlIGFueSBvdGhlcgorICAgIC8vIHNoYWRl
ciBzb3VyY2UuCisgICAgdm9pZCBPdXRwdXRFbXVsYXRlZEZ1bmN0aW9uRGVmaW5pdGlvbihUSW5m
b1NpbmtCYXNlJiBvdXQsIGJvb2wgd2l0aFByZWNpc2lvbikgY29uc3Q7CisKKyAgICB2b2lkIE1h
cmtCdWlsdEluRnVuY3Rpb25zRm9yRW11bGF0aW9uKFRJbnRlcm1Ob2RlKiByb290KTsKKworICAg
IHZvaWQgQ2xlYW51cCgpOworCisgICAgLy8gIm5hbWUoIiBiZWNvbWVzICJ3ZWJnbF9uYW1lX2Vt
dSgiLgorICAgIHN0YXRpYyBUU3RyaW5nIEdldEVtdWxhdGVkRnVuY3Rpb25OYW1lKGNvbnN0IFRT
dHJpbmcmIG5hbWUpOworCitwcml2YXRlOgorICAgIC8vCisgICAgLy8gQnVpbHQtaW4gZnVuY3Rp
b25zLgorICAgIC8vCisgICAgZW51bSBUQnVpbHRJbkZ1bmN0aW9uIHsKKyAgICAgICAgVEZ1bmN0
aW9uQ29zMSA9IDAsICAvLyBmbG9hdCBjb3MoZmxvYXQpOworICAgICAgICBURnVuY3Rpb25Db3My
LCAgLy8gdmVjMiBjb3ModmVjMik7CisgICAgICAgIFRGdW5jdGlvbkNvczMsICAvLyB2ZWMzIGNv
cyh2ZWMzKTsKKyAgICAgICAgVEZ1bmN0aW9uQ29zNCwgIC8vIHZlYzQgY29zKHZlYzQpOworCisg
ICAgICAgIFRGdW5jdGlvbkRpc3RhbmNlMV8xLCAgLy8gZmxvYXQgZGlzdGFuY2UoZmxvYXQsIGZs
b2F0KTsKKyAgICAgICAgVEZ1bmN0aW9uRGlzdGFuY2UyXzIsICAvLyB2ZWMyIGRpc3RhbmNlKHZl
YzIsIHZlYzIpOworICAgICAgICBURnVuY3Rpb25EaXN0YW5jZTNfMywgIC8vIHZlYzMgZGlzdGFu
Y2UodmVjMywgdmVjMyk7CisgICAgICAgIFRGdW5jdGlvbkRpc3RhbmNlNF80LCAgLy8gdmVjNCBk
aXN0YW5jZSh2ZWM0LCB2ZWM0KTsKKworICAgICAgICBURnVuY3Rpb25Eb3QxXzEsICAvLyBmbG9h
dCBkb3QoZmxvYXQsIGZsb2F0KTsKKyAgICAgICAgVEZ1bmN0aW9uRG90Ml8yLCAgLy8gdmVjMiBk
b3QodmVjMiwgdmVjMik7CisgICAgICAgIFRGdW5jdGlvbkRvdDNfMywgIC8vIHZlYzMgZG90KHZl
YzMsIHZlYzMpOworICAgICAgICBURnVuY3Rpb25Eb3Q0XzQsICAvLyB2ZWM0IGRvdCh2ZWM0LCB2
ZWM0KTsKKworICAgICAgICBURnVuY3Rpb25MZW5ndGgxLCAgLy8gZmxvYXQgbGVuZ3RoKGZsb2F0
KTsKKyAgICAgICAgVEZ1bmN0aW9uTGVuZ3RoMiwgIC8vIGZsb2F0IGxlbmd0aCh2ZWMyKTsKKyAg
ICAgICAgVEZ1bmN0aW9uTGVuZ3RoMywgIC8vIGZsb2F0IGxlbmd0aCh2ZWMzKTsKKyAgICAgICAg
VEZ1bmN0aW9uTGVuZ3RoNCwgIC8vIGZsb2F0IGxlbmd0aCh2ZWM0KTsKKworICAgICAgICBURnVu
Y3Rpb25Ob3JtYWxpemUxLCAgLy8gZmxvYXQgbm9ybWFsaXplKGZsb2F0KTsKKyAgICAgICAgVEZ1
bmN0aW9uTm9ybWFsaXplMiwgIC8vIHZlYzIgbm9ybWFsaXplKHZlYzIpOworICAgICAgICBURnVu
Y3Rpb25Ob3JtYWxpemUzLCAgLy8gdmVjMyBub3JtYWxpemUodmVjMyk7CisgICAgICAgIFRGdW5j
dGlvbk5vcm1hbGl6ZTQsICAvLyB2ZWM0IG5vcm1hbGl6ZSh2ZWM0KTsKKworICAgICAgICBURnVu
Y3Rpb25SZWZsZWN0MV8xLCAgLy8gZmxvYXQgcmVmbGVjdChmbG9hdCwgZmxvYXQpOworICAgICAg
ICBURnVuY3Rpb25SZWZsZWN0Ml8yLCAgLy8gdmVjMiByZWZsZWN0KHZlYzIsIHZlYzIpOworICAg
ICAgICBURnVuY3Rpb25SZWZsZWN0M18zLCAgLy8gdmVjMyByZWZsZWN0KHZlYzMsIHZlYzMpOwor
ICAgICAgICBURnVuY3Rpb25SZWZsZWN0NF80LCAgLy8gdmVjNCByZWZsZWN0KHZlYzQsIHZlYzQp
OworCisgICAgICAgIFRGdW5jdGlvblVua25vd24KKyAgICB9OworCisgICAgVEJ1aWx0SW5GdW5j
dGlvbiBJZGVudGlmeUZ1bmN0aW9uKFRPcGVyYXRvciBvcCwgY29uc3QgVFR5cGUmIHBhcmFtKTsK
KyAgICBUQnVpbHRJbkZ1bmN0aW9uIElkZW50aWZ5RnVuY3Rpb24oCisgICAgICAgIFRPcGVyYXRv
ciBvcCwgY29uc3QgVFR5cGUmIHBhcmFtMSwgY29uc3QgVFR5cGUmIHBhcmFtMik7CisKKyAgICBi
b29sIFNldEZ1bmN0aW9uQ2FsbGVkKFRCdWlsdEluRnVuY3Rpb24gZnVuY3Rpb24pOworCisgICAg
c3RkOjp2ZWN0b3I8VEJ1aWx0SW5GdW5jdGlvbj4gbUZ1bmN0aW9uczsKKworICAgIGNvbnN0IGJv
b2wqIG1GdW5jdGlvbk1hc2s7ICAvLyBhIGJvb2xlYW4gZmxhZyBmb3IgZWFjaCBmdW5jdGlvbi4K
KyAgICBjb25zdCBjaGFyKiogbUZ1bmN0aW9uU291cmNlOworfTsKKworI2VuZGlmICAvLyBDT01Q
SUxJRVJfQlVJTFRfSU5fRlVOQ1RJT05fRU1VTEFUT1JfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvZGVHZW4uY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29kZUdlbi5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOGY1ZDEyOTEwNDBkMDEzMjMxYzU1YmIyNGE1NjIxOTk0MDgzZDlmNAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0NvZGVHZW4uY3BwCkBAIC0wLDAgKzEsMzggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JFU1NMLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yR0xTTC5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckhMU0wuaCIKKworLy8KKy8vIFRoaXMgZnVuY3Rpb24g
bXVzdCBiZSBwcm92aWRlZCB0byBjcmVhdGUgdGhlIGFjdHVhbAorLy8gY29tcGlsZSBvYmplY3Qg
dXNlZCBieSBoaWdoZXIgbGV2ZWwgY29kZS4gIEl0IHJldHVybnMKKy8vIGEgc3ViY2xhc3Mgb2Yg
VENvbXBpbGVyLgorLy8KK1RDb21waWxlciogQ29uc3RydWN0Q29tcGlsZXIoCisgICAgU2hTaGFk
ZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBTaFNoYWRlck91dHB1dCBvdXRwdXQpCit7
CisgICAgc3dpdGNoIChvdXRwdXQpIHsKKyAgICAgIGNhc2UgU0hfRVNTTF9PVVRQVVQ6CisgICAg
ICAgIHJldHVybiBuZXcgVHJhbnNsYXRvckVTU0wodHlwZSwgc3BlYyk7CisgICAgICBjYXNlIFNI
X0dMU0xfT1VUUFVUOgorICAgICAgICByZXR1cm4gbmV3IFRyYW5zbGF0b3JHTFNMKHR5cGUsIHNw
ZWMpOworICAgICAgY2FzZSBTSF9ITFNMOV9PVVRQVVQ6CisgICAgICBjYXNlIFNIX0hMU0wxMV9P
VVRQVVQ6CisgICAgICAgIHJldHVybiBuZXcgVHJhbnNsYXRvckhMU0wodHlwZSwgc3BlYywgb3V0
cHV0KTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKwor
Ly8KKy8vIERlbGV0ZSB0aGUgY29tcGlsZXIgbWFkZSBieSBDb25zdHJ1Y3RDb21waWxlcgorLy8K
K3ZvaWQgRGVsZXRlQ29tcGlsZXIoVENvbXBpbGVyKiBjb21waWxlcikKK3sKKyAgICBkZWxldGUg
Y29tcGlsZXI7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9Db21tb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL0NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFlNDUwM2UzNDBjZjc0YjIw
OWE4MmRjYzU3ZGMwNDNjMjdkZTk0M2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21tb24uaApAQCAtMCwwICsxLDky
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9DT01NT05fSU5DTFVERURfCisjZGVm
aW5lIF9DT01NT05fSU5DTFVERURfCisKKyNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8c3N0cmVh
bT4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPGxpbWl0
cz4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Q
b29sQWxsb2MuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2NvbXBpbGVyZGVidWcu
aCIKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorCitzdHJ1Y3QgVFNvdXJjZUxvYyB7
CisgICAgaW50IGZpcnN0X2ZpbGU7CisgICAgaW50IGZpcnN0X2xpbmU7CisgICAgaW50IGxhc3Rf
ZmlsZTsKKyAgICBpbnQgbGFzdF9saW5lOworfTsKKworLy8KKy8vIFB1dCBQT09MX0FMTE9DQVRP
Ul9ORVdfREVMRVRFIGluIGJhc2UgY2xhc3NlcyB0byBtYWtlIHRoZW0gdXNlIHRoaXMgc2NoZW1l
LgorLy8KKyNkZWZpbmUgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSgpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdm9pZCogb3BlcmF0b3Ig
bmV3KHNpemVfdCBzKSB7IHJldHVybiBHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCktPmFsbG9jYXRl
KHMpOyB9ICAgXAorICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIHZvaWQgKl9XaGVyZSkg
eyByZXR1cm4gKF9XaGVyZSk7IH0gICAgICAgICAgICAgICAgICAgIFwKKyAgICB2b2lkIG9wZXJh
dG9yIGRlbGV0ZSh2b2lkKikgeyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAqLCB2b2lkICop
IHsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHZvaWQq
IG9wZXJhdG9yIG5ld1tdKHNpemVfdCBzKSB7IHJldHVybiBHZXRHbG9iYWxQb29sQWxsb2NhdG9y
KCktPmFsbG9jYXRlKHMpOyB9IFwKKyAgICB2b2lkKiBvcGVyYXRvciBuZXdbXShzaXplX3QsIHZv
aWQgKl9XaGVyZSkgeyByZXR1cm4gKF9XaGVyZSk7IH0gICAgICAgICAgICAgICAgICBcCisgICAg
dm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKikgeyB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9p
ZCAqLCB2b2lkICopIHsgfQorCisvLworLy8gUG9vbCB2ZXJzaW9uIG9mIHN0cmluZy4KKy8vCit0
eXBlZGVmIHBvb2xfYWxsb2NhdG9yPGNoYXI+IFRTdHJpbmdBbGxvY2F0b3I7Cit0eXBlZGVmIHN0
ZDo6YmFzaWNfc3RyaW5nIDxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBUU3RyaW5nQWxs
b2NhdG9yPiBUU3RyaW5nOwordHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJpbmdzdHJlYW08Y2hhciwg
c3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgVFN0cmluZ0FsbG9jYXRvcj4gVFN0cmluZ1N0cmVhbTsK
K2lubGluZSBUU3RyaW5nKiBOZXdQb29sVFN0cmluZyhjb25zdCBjaGFyKiBzKQoreworCXZvaWQq
IG1lbW9yeSA9IEdldEdsb2JhbFBvb2xBbGxvY2F0b3IoKS0+YWxsb2NhdGUoc2l6ZW9mKFRTdHJp
bmcpKTsKKwlyZXR1cm4gbmV3KG1lbW9yeSkgVFN0cmluZyhzKTsKK30KKworLy8KKy8vIFBlcnNp
c3RlbnQgc3RyaW5nIG1lbW9yeS4gIFNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHN0cmluZ3MgdGhh
dCBzdXJ2aXZlCisvLyBhY3Jvc3MgY29tcGlsZXMuCisvLworI2RlZmluZSBUUGVyc2lzdFN0cmlu
ZyBzdGQ6OnN0cmluZworI2RlZmluZSBUUGVyc2lzdFN0cmluZ1N0cmVhbSBzdGQ6Om9zdHJpbmdz
dHJlYW0KKworLy8KKy8vIFBvb2wgYWxsb2NhdG9yIHZlcnNpb25zIG9mIHZlY3RvcnMsIGxpc3Rz
LCBhbmQgbWFwcworLy8KK3RlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBUVmVjdG9yIDogcHVibGlj
IHN0ZDo6dmVjdG9yPFQsIHBvb2xfYWxsb2NhdG9yPFQ+ID4geworcHVibGljOgorICAgIHR5cGVk
ZWYgdHlwZW5hbWUgc3RkOjp2ZWN0b3I8VCwgcG9vbF9hbGxvY2F0b3I8VD4gPjo6c2l6ZV90eXBl
IHNpemVfdHlwZTsKKyAgICBUVmVjdG9yKCkgOiBzdGQ6OnZlY3RvcjxULCBwb29sX2FsbG9jYXRv
cjxUPiA+KCkge30KKyAgICBUVmVjdG9yKGNvbnN0IHBvb2xfYWxsb2NhdG9yPFQ+JiBhKSA6IHN0
ZDo6dmVjdG9yPFQsIHBvb2xfYWxsb2NhdG9yPFQ+ID4oYSkge30KKyAgICBUVmVjdG9yKHNpemVf
dHlwZSBpKTogc3RkOjp2ZWN0b3I8VCwgcG9vbF9hbGxvY2F0b3I8VD4gPihpKSB7fQorfTsKKwor
dGVtcGxhdGUgPGNsYXNzIEssIGNsYXNzIEQsIGNsYXNzIENNUCA9IHN0ZDo6bGVzczxLPiA+IAor
Y2xhc3MgVE1hcCA6IHB1YmxpYyBzdGQ6Om1hcDxLLCBELCBDTVAsIHBvb2xfYWxsb2NhdG9yPHN0
ZDo6cGFpcjxjb25zdCBLLCBEPiA+ID4geworcHVibGljOgorICAgIHR5cGVkZWYgcG9vbF9hbGxv
Y2F0b3I8c3RkOjpwYWlyPGNvbnN0IEssIEQ+ID4gdEFsbG9jYXRvcjsKKworICAgIFRNYXAoKSA6
IHN0ZDo6bWFwPEssIEQsIENNUCwgdEFsbG9jYXRvcj4oKSB7fQorICAgIC8vIHVzZSBjb3JyZWN0
IHR3by1zdGFnZSBuYW1lIGxvb2t1cCBzdXBwb3J0ZWQgaW4gZ2NjIDMuNCBhbmQgYWJvdmUKKyAg
ICBUTWFwKGNvbnN0IHRBbGxvY2F0b3ImIGEpIDogc3RkOjptYXA8SywgRCwgQ01QLCB0QWxsb2Nh
dG9yPihzdGQ6Om1hcDxLLCBELCBDTVAsIHRBbGxvY2F0b3I+OjprZXlfY29tcGFyZSgpLCBhKSB7
fQorfTsKKworLy8gSW50ZWdlciB0byBUU3RyaW5nIGNvbnZlcnNpb24KK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgoraW5saW5lIFRTdHJpbmcgc3RyKFQgaSkKK3sKKyAgICBBU1NFUlQoc3RkOjpudW1l
cmljX2xpbWl0czxUPjo6aXNfaW50ZWdlcik7CisgICAgY2hhciBidWZmZXJbKCg4ICogc2l6ZW9m
KFQpKSAvIDMpICsgM107CisgICAgY29uc3QgY2hhciAqZm9ybWF0U3RyID0gc3RkOjpudW1lcmlj
X2xpbWl0czxUPjo6aXNfc2lnbmVkID8gIiVkIiA6ICIldSI7CisgICAgc25wcmludGYoYnVmZmVy
LCBzaXplb2YoYnVmZmVyKSwgZm9ybWF0U3RyLCBpKTsKKyAgICByZXR1cm4gYnVmZmVyOworfQor
CisjZW5kaWYgLy8gX0NPTU1PTl9JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lYjc0NjVlMzVjODBmNjg5OGU1MzNmYjYxZWYwMDFlZjY2OWFkOTQ0Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvQ29tcGlsZXIuY3BwCkBAIC0wLDAgKzEsNTI3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0Q2FsbERlcHRoLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Gb3JMb29wVW5yb2xsLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9Jbml0aWFsaXplVmFyaWFibGVzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9N
YXBMb25nVmFyaWFibGVOYW1lcy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFy
c2VDb250ZXh0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9SZW5hbWVGdW5jdGlv
bi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU2hIYW5kbGUuaCIKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1VuZm9sZFNob3J0Q2lyY3VpdEFTVC5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1pdGF0aW9ucy5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVQYWNrZXIuaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hh
ZGVyVGltaW5nLmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvY29tcGlsZXIvQXJyYXlCb3VuZHND
bGFtcGVyLmgiCisKK2Jvb2wgaXNXZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNwZWMgc3BlYykKK3sK
KyAgICAgcmV0dXJuIHNwZWMgPT0gU0hfV0VCR0xfU1BFQyB8fCBzcGVjID09IFNIX0NTU19TSEFE
RVJTX1NQRUM7Cit9CisKK25hbWVzcGFjZSB7CitjbGFzcyBUU2NvcGVkUG9vbEFsbG9jYXRvcgor
eworICBwdWJsaWM6CisgICAgVFNjb3BlZFBvb2xBbGxvY2F0b3IoVFBvb2xBbGxvY2F0b3IqIGFs
bG9jYXRvcikgOiBtQWxsb2NhdG9yKGFsbG9jYXRvcikKKyAgICB7CisgICAgICAgIG1BbGxvY2F0
b3ItPnB1c2goKTsKKyAgICAgICAgU2V0R2xvYmFsUG9vbEFsbG9jYXRvcihtQWxsb2NhdG9yKTsK
KyAgICB9CisgICAgflRTY29wZWRQb29sQWxsb2NhdG9yKCkKKyAgICB7CisgICAgICAgIFNldEds
b2JhbFBvb2xBbGxvY2F0b3IoTlVMTCk7CisgICAgICAgIG1BbGxvY2F0b3ItPnBvcCgpOworICAg
IH0KKworICBwcml2YXRlOgorICAgIFRQb29sQWxsb2NhdG9yKiBtQWxsb2NhdG9yOworfTsKKwor
Y2xhc3MgVFNjb3BlZFN5bWJvbFRhYmxlTGV2ZWwKK3sKKyAgcHVibGljOgorICAgIFRTY29wZWRT
eW1ib2xUYWJsZUxldmVsKFRTeW1ib2xUYWJsZSogdGFibGUpIDogbVRhYmxlKHRhYmxlKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKG1UYWJsZS0+YXRCdWlsdEluTGV2ZWwoKSk7CisgICAgICAgIG1U
YWJsZS0+cHVzaCgpOworICAgIH0KKyAgICB+VFNjb3BlZFN5bWJvbFRhYmxlTGV2ZWwoKQorICAg
IHsKKyAgICAgICAgd2hpbGUgKCFtVGFibGUtPmF0QnVpbHRJbkxldmVsKCkpCisgICAgICAgICAg
ICBtVGFibGUtPnBvcCgpOworICAgIH0KKworICBwcml2YXRlOgorICAgIFRTeW1ib2xUYWJsZSog
bVRhYmxlOworfTsKK30gIC8vIG5hbWVzcGFjZQorCitUU2hIYW5kbGVCYXNlOjpUU2hIYW5kbGVC
YXNlKCkKK3sKKyAgICBhbGxvY2F0b3IucHVzaCgpOworICAgIFNldEdsb2JhbFBvb2xBbGxvY2F0
b3IoJmFsbG9jYXRvcik7Cit9CisKK1RTaEhhbmRsZUJhc2U6On5UU2hIYW5kbGVCYXNlKCkKK3sK
KyAgICBTZXRHbG9iYWxQb29sQWxsb2NhdG9yKE5VTEwpOworICAgIGFsbG9jYXRvci5wb3BBbGwo
KTsKK30KKworVENvbXBpbGVyOjpUQ29tcGlsZXIoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVy
U3BlYyBzcGVjKQorICAgIDogc2hhZGVyVHlwZSh0eXBlKSwKKyAgICAgIHNoYWRlclNwZWMoc3Bl
YyksCisgICAgICBtYXhVbmlmb3JtVmVjdG9ycygwKSwKKyAgICAgIG1heEV4cHJlc3Npb25Db21w
bGV4aXR5KDApLAorICAgICAgbWF4Q2FsbFN0YWNrRGVwdGgoMCksCisgICAgICBmcmFnbWVudFBy
ZWNpc2lvbkhpZ2goZmFsc2UpLAorICAgICAgY2xhbXBpbmdTdHJhdGVneShTSF9DTEFNUF9XSVRI
X0NMQU1QX0lOVFJJTlNJQyksCisgICAgICBidWlsdEluRnVuY3Rpb25FbXVsYXRvcih0eXBlKQor
eworICAgIGxvbmdOYW1lTWFwID0gTG9uZ05hbWVNYXA6OkdldEluc3RhbmNlKCk7Cit9CisKK1RD
b21waWxlcjo6flRDb21waWxlcigpCit7CisgICAgQVNTRVJUKGxvbmdOYW1lTWFwKTsKKyAgICBs
b25nTmFtZU1hcC0+UmVsZWFzZSgpOworfQorCitib29sIFRDb21waWxlcjo6SW5pdChjb25zdCBT
aEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291cmNlcykKK3sKKyAgICBtYXhVbmlmb3JtVmVjdG9ycyA9
IChzaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpID8KKyAgICAgICAgcmVzb3VyY2VzLk1h
eFZlcnRleFVuaWZvcm1WZWN0b3JzIDoKKyAgICAgICAgcmVzb3VyY2VzLk1heEZyYWdtZW50VW5p
Zm9ybVZlY3RvcnM7CisgICAgbWF4RXhwcmVzc2lvbkNvbXBsZXhpdHkgPSByZXNvdXJjZXMuTWF4
RXhwcmVzc2lvbkNvbXBsZXhpdHk7CisgICAgbWF4Q2FsbFN0YWNrRGVwdGggPSByZXNvdXJjZXMu
TWF4Q2FsbFN0YWNrRGVwdGg7CisKKyAgICBTZXRHbG9iYWxQb29sQWxsb2NhdG9yKCZhbGxvY2F0
b3IpOworCisgICAgLy8gR2VuZXJhdGUgYnVpbHQtaW4gc3ltYm9sIHRhYmxlLgorICAgIGlmICgh
SW5pdEJ1aWx0SW5TeW1ib2xUYWJsZShyZXNvdXJjZXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgSW5pdEV4dGVuc2lvbkJlaGF2aW9yKHJlc291cmNlcywgZXh0ZW5zaW9uQmVoYXZpb3Ip
OworICAgIGZyYWdtZW50UHJlY2lzaW9uSGlnaCA9IHJlc291cmNlcy5GcmFnbWVudFByZWNpc2lv
bkhpZ2ggPT0gMTsKKworICAgIGFycmF5Qm91bmRzQ2xhbXBlci5TZXRDbGFtcGluZ1N0cmF0ZWd5
KHJlc291cmNlcy5BcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSk7CisgICAgY2xhbXBpbmdTdHJh
dGVneSA9IHJlc291cmNlcy5BcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneTsKKworICAgIGhhc2hG
dW5jdGlvbiA9IHJlc291cmNlcy5IYXNoRnVuY3Rpb247CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBUQ29tcGlsZXI6OmNvbXBpbGUoY29uc3QgY2hhciogY29uc3Qgc2hhZGVyU3RyaW5n
c1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG51bVN0cmluZ3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgY29tcGlsZU9wdGlvbnMpCit7CisgICAgVFNjb3BlZFBvb2xB
bGxvY2F0b3Igc2NvcGVkQWxsb2MoJmFsbG9jYXRvcik7CisgICAgY2xlYXJSZXN1bHRzKCk7CisK
KyAgICBpZiAobnVtU3RyaW5ncyA9PSAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8v
IElmIGNvbXBpbGluZyBmb3IgV2ViR0wsIHZhbGlkYXRlIGxvb3AgYW5kIGluZGV4aW5nIGFzIHdl
bGwuCisgICAgaWYgKGlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpCisgICAgICAgIGNvbXBp
bGVPcHRpb25zIHw9IFNIX1ZBTElEQVRFX0xPT1BfSU5ERVhJTkc7CisKKyAgICAvLyBGaXJzdCBz
dHJpbmcgaXMgcGF0aCBvZiBzb3VyY2UgZmlsZSBpZiBmbGFnIGlzIHNldC4gVGhlIGFjdHVhbCBz
b3VyY2UgZm9sbG93cy4KKyAgICBjb25zdCBjaGFyKiBzb3VyY2VQYXRoID0gTlVMTDsKKyAgICBz
aXplX3QgZmlyc3RTb3VyY2UgPSAwOworICAgIGlmIChjb21waWxlT3B0aW9ucyAmIFNIX1NPVVJD
RV9QQVRIKQorICAgIHsKKyAgICAgICAgc291cmNlUGF0aCA9IHNoYWRlclN0cmluZ3NbMF07Cisg
ICAgICAgICsrZmlyc3RTb3VyY2U7CisgICAgfQorCisgICAgVEludGVybWVkaWF0ZSBpbnRlcm1l
ZGlhdGUoaW5mb1NpbmspOworICAgIFRQYXJzZUNvbnRleHQgcGFyc2VDb250ZXh0KHN5bWJvbFRh
YmxlLCBleHRlbnNpb25CZWhhdmlvciwgaW50ZXJtZWRpYXRlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNoYWRlclR5cGUsIHNoYWRlclNwZWMsIGNvbXBpbGVPcHRpb25zLCB0cnVl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVBhdGgsIGluZm9TaW5rKTsK
KyAgICBwYXJzZUNvbnRleHQuZnJhZ21lbnRQcmVjaXNpb25IaWdoID0gZnJhZ21lbnRQcmVjaXNp
b25IaWdoOworICAgIFNldEdsb2JhbFBhcnNlQ29udGV4dCgmcGFyc2VDb250ZXh0KTsKKworICAg
IC8vIFdlIHByZXNlcnZlIHN5bWJvbHMgYXQgdGhlIGJ1aWx0LWluIGxldmVsIGZyb20gY29tcGls
ZS10by1jb21waWxlLgorICAgIC8vIFN0YXJ0IHB1c2hpbmcgdGhlIHVzZXItZGVmaW5lZCBzeW1i
b2xzIGF0IGdsb2JhbCBsZXZlbC4KKyAgICBUU2NvcGVkU3ltYm9sVGFibGVMZXZlbCBzY29wZWRT
eW1ib2xMZXZlbCgmc3ltYm9sVGFibGUpOworCisgICAgLy8gUGFyc2Ugc2hhZGVyLgorICAgIGJv
b2wgc3VjY2VzcyA9CisgICAgICAgIChQYVBhcnNlU3RyaW5ncyhudW1TdHJpbmdzIC0gZmlyc3RT
b3VyY2UsICZzaGFkZXJTdHJpbmdzW2ZpcnN0U291cmNlXSwgTlVMTCwgJnBhcnNlQ29udGV4dCkg
PT0gMCkgJiYKKyAgICAgICAgKHBhcnNlQ29udGV4dC50cmVlUm9vdCAhPSBOVUxMKTsKKyAgICBp
ZiAoc3VjY2VzcykKKyAgICB7CisgICAgICAgIFRJbnRlcm1Ob2RlKiByb290ID0gcGFyc2VDb250
ZXh0LnRyZWVSb290OworICAgICAgICBzdWNjZXNzID0gaW50ZXJtZWRpYXRlLnBvc3RQcm9jZXNz
KHJvb3QpOworCisgICAgICAgIGlmIChzdWNjZXNzKQorICAgICAgICAgICAgc3VjY2VzcyA9IGRl
dGVjdENhbGxEZXB0aChyb290LCBpbmZvU2luaywgKGNvbXBpbGVPcHRpb25zICYgU0hfTElNSVRf
Q0FMTF9TVEFDS19ERVBUSCkgIT0gMCk7CisKKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBp
bGVPcHRpb25zICYgU0hfVkFMSURBVEVfTE9PUF9JTkRFWElORykpCisgICAgICAgICAgICBzdWNj
ZXNzID0gdmFsaWRhdGVMaW1pdGF0aW9ucyhyb290KTsKKworICAgICAgICBpZiAoc3VjY2VzcyAm
JiAoY29tcGlsZU9wdGlvbnMgJiBTSF9USU1JTkdfUkVTVFJJQ1RJT05TKSkKKyAgICAgICAgICAg
IHN1Y2Nlc3MgPSBlbmZvcmNlVGltaW5nUmVzdHJpY3Rpb25zKHJvb3QsIChjb21waWxlT3B0aW9u
cyAmIFNIX0RFUEVOREVOQ1lfR1JBUEgpICE9IDApOworCisgICAgICAgIGlmIChzdWNjZXNzICYm
IHNoYWRlclNwZWMgPT0gU0hfQ1NTX1NIQURFUlNfU1BFQykKKyAgICAgICAgICAgIHJld3JpdGVD
U1NTaGFkZXIocm9vdCk7CisKKyAgICAgICAgLy8gVW5yb2xsIGZvci1sb29wIG1hcmt1cCBuZWVk
cyB0byBoYXBwZW4gYWZ0ZXIgdmFsaWRhdGVMaW1pdGF0aW9ucyBwYXNzLgorICAgICAgICBpZiAo
c3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9VTlJPTExfRk9SX0xPT1BfV0lUSF9JTlRF
R0VSX0lOREVYKSkKKyAgICAgICAgICAgIEZvckxvb3BVbnJvbGw6Ok1hcmtGb3JMb29wc1dpdGhJ
bnRlZ2VySW5kaWNlc0ZvclVucm9sbGluZyhyb290KTsKKworICAgICAgICAvLyBCdWlsdC1pbiBm
dW5jdGlvbiBlbXVsYXRpb24gbmVlZHMgdG8gaGFwcGVuIGFmdGVyIHZhbGlkYXRlTGltaXRhdGlv
bnMgcGFzcy4KKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfRU1V
TEFURV9CVUlMVF9JTl9GVU5DVElPTlMpKQorICAgICAgICAgICAgYnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3IuTWFya0J1aWx0SW5GdW5jdGlvbnNGb3JFbXVsYXRpb24ocm9vdCk7CisKKyAgICAgICAg
Ly8gQ2xhbXBpbmcgdW5pZm9ybSBhcnJheSBib3VuZHMgbmVlZHMgdG8gaGFwcGVuIGFmdGVyIHZh
bGlkYXRlTGltaXRhdGlvbnMgcGFzcy4KKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVP
cHRpb25zICYgU0hfQ0xBTVBfSU5ESVJFQ1RfQVJSQVlfQk9VTkRTKSkKKyAgICAgICAgICAgIGFy
cmF5Qm91bmRzQ2xhbXBlci5NYXJrSW5kaXJlY3RBcnJheUJvdW5kc0ZvckNsYW1waW5nKHJvb3Qp
OworCisgICAgICAgIC8vIERpc2FsbG93IGV4cHJlc3Npb25zIGRlZW1lZCB0b28gY29tcGxleC4K
KyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfTElNSVRfRVhQUkVT
U0lPTl9DT01QTEVYSVRZKSkKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBsaW1pdEV4cHJlc3Npb25D
b21wbGV4aXR5KHJvb3QpOworCisgICAgICAgIC8vIENhbGwgbWFwTG9uZ1ZhcmlhYmxlTmFtZXMo
KSBiZWZvcmUgY29sbGVjdEF0dHJpYnNVbmlmb3JtcygpIHNvIGluCisgICAgICAgIC8vIGNvbGxl
Y3RBdHRyaWJzVW5pZm9ybXMoKSB3ZSBhbHJlYWR5IGhhdmUgdGhlIG1hcHBlZCBzeW1ib2wgbmFt
ZXMgYW5kCisgICAgICAgIC8vIHdlIGNvdWxkIGNvbXBvc2l0ZSBtYXBwZWQgYW5kIG9yaWdpbmFs
IHZhcmlhYmxlIG5hbWVzLgorICAgICAgICAvLyBBbHNvLCBpZiB3ZSBoYXNoIGFsbCB0aGUgbmFt
ZXMsIHRoZW4gbm8gbmVlZCB0byBkbyB0aGlzIGZvciBsb25nIG5hbWVzLgorICAgICAgICBpZiAo
c3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9NQVBfTE9OR19WQVJJQUJMRV9OQU1FUykg
JiYgaGFzaEZ1bmN0aW9uID09IE5VTEwpCisgICAgICAgICAgICBtYXBMb25nVmFyaWFibGVOYW1l
cyhyb290KTsKKworICAgICAgICBpZiAoc3VjY2VzcyAmJiBzaGFkZXJUeXBlID09IFNIX1ZFUlRF
WF9TSEFERVIgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfSU5JVF9HTF9QT1NJVElPTikpCisgICAg
ICAgICAgICBpbml0aWFsaXplR0xQb3NpdGlvbihyb290KTsKKworICAgICAgICBpZiAoc3VjY2Vz
cyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9VTkZPTERfU0hPUlRfQ0lSQ1VJVCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIFVuZm9sZFNob3J0Q2lyY3VpdEFTVCB1bmZvbGRTaG9ydENpcmN1aXQ7
CisgICAgICAgICAgICByb290LT50cmF2ZXJzZSgmdW5mb2xkU2hvcnRDaXJjdWl0KTsKKyAgICAg
ICAgICAgIHVuZm9sZFNob3J0Q2lyY3VpdC51cGRhdGVUcmVlKCk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9WQVJJQUJMRVMpKQorICAg
ICAgICB7CisgICAgICAgICAgICBjb2xsZWN0VmFyaWFibGVzKHJvb3QpOworICAgICAgICAgICAg
aWYgKGNvbXBpbGVPcHRpb25zICYgU0hfRU5GT1JDRV9QQUNLSU5HX1JFU1RSSUNUSU9OUykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gZW5mb3JjZVBhY2tpbmdSZXN0
cmljdGlvbnMoKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLnByZWZpeChFUHJlZml4RXJy
b3IpOworICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvIDw8ICJ0b28gbWFueSB1bmlm
b3JtcyI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KHN1Y2Nlc3MgJiYgc2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSICYmCisgICAgICAgICAg
ICAgICAgKGNvbXBpbGVPcHRpb25zICYgU0hfSU5JVF9WQVJZSU5HU19XSVRIT1VUX1NUQVRJQ19V
U0UpKQorICAgICAgICAgICAgICAgIGluaXRpYWxpemVWYXJ5aW5nc1dpdGhvdXRTdGF0aWNVc2Uo
cm9vdCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlv
bnMgJiBTSF9JTlRFUk1FRElBVEVfVFJFRSkpCisgICAgICAgICAgICBpbnRlcm1lZGlhdGUub3V0
cHV0VHJlZShyb290KTsKKworICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMg
JiBTSF9PQkpFQ1RfQ09ERSkpCisgICAgICAgICAgICB0cmFuc2xhdGUocm9vdCk7CisgICAgfQor
CisgICAgLy8gQ2xlYW51cCBtZW1vcnkuCisgICAgaW50ZXJtZWRpYXRlLnJlbW92ZShwYXJzZUNv
bnRleHQudHJlZVJvb3QpOworCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK2Jvb2wgVENvbXBp
bGVyOjpJbml0QnVpbHRJblN5bWJvbFRhYmxlKGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyAmcmVz
b3VyY2VzKQoreworICAgIGNvbXBpbGVSZXNvdXJjZXMgPSByZXNvdXJjZXM7CisKKyAgICBhc3Nl
cnQoc3ltYm9sVGFibGUuaXNFbXB0eSgpKTsKKyAgICBzeW1ib2xUYWJsZS5wdXNoKCk7CisKKyAg
ICBUUHVibGljVHlwZSBpbnRlZ2VyOworICAgIGludGVnZXIudHlwZSA9IEVidEludDsKKyAgICBp
bnRlZ2VyLnNpemUgPSAxOworICAgIGludGVnZXIubWF0cml4ID0gZmFsc2U7CisgICAgaW50ZWdl
ci5hcnJheSA9IGZhbHNlOworCisgICAgVFB1YmxpY1R5cGUgZmxvYXRpbmdQb2ludDsKKyAgICBm
bG9hdGluZ1BvaW50LnR5cGUgPSBFYnRGbG9hdDsKKyAgICBmbG9hdGluZ1BvaW50LnNpemUgPSAx
OworICAgIGZsb2F0aW5nUG9pbnQubWF0cml4ID0gZmFsc2U7CisgICAgZmxvYXRpbmdQb2ludC5h
cnJheSA9IGZhbHNlOworCisgICAgVFB1YmxpY1R5cGUgc2FtcGxlcjsKKyAgICBzYW1wbGVyLnNp
emUgPSAxOworICAgIHNhbXBsZXIubWF0cml4ID0gZmFsc2U7CisgICAgc2FtcGxlci5hcnJheSA9
IGZhbHNlOworCisgICAgc3dpdGNoKHNoYWRlclR5cGUpCisgICAgeworICAgICAgY2FzZSBTSF9G
UkFHTUVOVF9TSEFERVI6CisgICAgICAgIHN5bWJvbFRhYmxlLnNldERlZmF1bHRQcmVjaXNpb24o
aW50ZWdlciwgRWJwTWVkaXVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNIX1ZFUlRF
WF9TSEFERVI6CisgICAgICAgIHN5bWJvbFRhYmxlLnNldERlZmF1bHRQcmVjaXNpb24oaW50ZWdl
ciwgRWJwSGlnaCk7CisgICAgICAgIHN5bWJvbFRhYmxlLnNldERlZmF1bHRQcmVjaXNpb24oZmxv
YXRpbmdQb2ludCwgRWJwSGlnaCk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgYXNzZXJ0KGZhbHNlICYmICJMYW5ndWFnZSBub3Qgc3VwcG9ydGVkIik7CisgICAgfQor
ICAgIC8vIFdlIHNldCBkZWZhdWx0cyBmb3IgYWxsIHRoZSBzYW1wbGVyIHR5cGVzLCBldmVuIHRo
b3NlIHRoYXQgYXJlCisgICAgLy8gb25seSBhdmFpbGFibGUgaWYgYW4gZXh0ZW5zaW9uIGV4aXN0
cy4KKyAgICBmb3IgKGludCBzYW1wbGVyVHlwZSA9IEVidEd1YXJkU2FtcGxlckJlZ2luICsgMTsK
KyAgICAgICAgIHNhbXBsZXJUeXBlIDwgRWJ0R3VhcmRTYW1wbGVyRW5kOyArK3NhbXBsZXJUeXBl
KQorICAgIHsKKyAgICAgICAgc2FtcGxlci50eXBlID0gc3RhdGljX2Nhc3Q8VEJhc2ljVHlwZT4o
c2FtcGxlclR5cGUpOworICAgICAgICBzeW1ib2xUYWJsZS5zZXREZWZhdWx0UHJlY2lzaW9uKHNh
bXBsZXIsIEVicExvdyk7CisgICAgfQorCisgICAgSW5zZXJ0QnVpbHRJbkZ1bmN0aW9ucyhzaGFk
ZXJUeXBlLCBzaGFkZXJTcGVjLCByZXNvdXJjZXMsIHN5bWJvbFRhYmxlKTsKKworICAgIElkZW50
aWZ5QnVpbHRJbnMoc2hhZGVyVHlwZSwgc2hhZGVyU3BlYywgcmVzb3VyY2VzLCBzeW1ib2xUYWJs
ZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBUQ29tcGlsZXI6OmNsZWFyUmVzdWx0
cygpCit7CisgICAgYXJyYXlCb3VuZHNDbGFtcGVyLkNsZWFudXAoKTsKKyAgICBpbmZvU2luay5p
bmZvLmVyYXNlKCk7CisgICAgaW5mb1Npbmsub2JqLmVyYXNlKCk7CisgICAgaW5mb1NpbmsuZGVi
dWcuZXJhc2UoKTsKKworICAgIGF0dHJpYnMuY2xlYXIoKTsKKyAgICB1bmlmb3Jtcy5jbGVhcigp
OworICAgIHZhcnlpbmdzLmNsZWFyKCk7CisKKyAgICBidWlsdEluRnVuY3Rpb25FbXVsYXRvci5D
bGVhbnVwKCk7CisKKyAgICBuYW1lTWFwLmNsZWFyKCk7Cit9CisKK2Jvb2wgVENvbXBpbGVyOjpk
ZXRlY3RDYWxsRGVwdGgoVEludGVybU5vZGUqIHJvb3QsIFRJbmZvU2luayYgaW5mb1NpbmssIGJv
b2wgbGltaXRDYWxsU3RhY2tEZXB0aCkKK3sKKyAgICBEZXRlY3RDYWxsRGVwdGggZGV0ZWN0KGlu
Zm9TaW5rLCBsaW1pdENhbGxTdGFja0RlcHRoLCBtYXhDYWxsU3RhY2tEZXB0aCk7CisgICAgcm9v
dC0+dHJhdmVyc2UoJmRldGVjdCk7CisgICAgc3dpdGNoIChkZXRlY3QuZGV0ZWN0Q2FsbERlcHRo
KCkpCisgICAgeworICAgICAgY2FzZSBEZXRlY3RDYWxsRGVwdGg6OmtFcnJvck5vbmU6CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgY2FzZSBEZXRlY3RDYWxsRGVwdGg6OmtFcnJvck1pc3Np
bmdNYWluOgorICAgICAgICBpbmZvU2luay5pbmZvLnByZWZpeChFUHJlZml4RXJyb3IpOworICAg
ICAgICBpbmZvU2luay5pbmZvIDw8ICJNaXNzaW5nIG1haW4oKSI7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgIGNhc2UgRGV0ZWN0Q2FsbERlcHRoOjprRXJyb3JSZWN1cnNpb246CisgICAg
ICAgIGluZm9TaW5rLmluZm8ucHJlZml4KEVQcmVmaXhFcnJvcik7CisgICAgICAgIGluZm9TaW5r
LmluZm8gPDwgIkZ1bmN0aW9uIHJlY3Vyc2lvbiBkZXRlY3RlZCI7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgIGNhc2UgRGV0ZWN0Q2FsbERlcHRoOjprRXJyb3JNYXhEZXB0aEV4Y2VlZGVk
OgorICAgICAgICBpbmZvU2luay5pbmZvLnByZWZpeChFUHJlZml4RXJyb3IpOworICAgICAgICBp
bmZvU2luay5pbmZvIDw8ICJGdW5jdGlvbiBjYWxsIHN0YWNrIHRvbyBkZWVwIjsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwordm9pZCBUQ29tcGlsZXI6OnJld3JpdGVD
U1NTaGFkZXIoVEludGVybU5vZGUqIHJvb3QpCit7CisgICAgUmVuYW1lRnVuY3Rpb24gcmVuYW1l
cigibWFpbigiLCAiY3NzX21haW4oIik7CisgICAgcm9vdC0+dHJhdmVyc2UoJnJlbmFtZXIpOwor
fQorCitib29sIFRDb21waWxlcjo6dmFsaWRhdGVMaW1pdGF0aW9ucyhUSW50ZXJtTm9kZSogcm9v
dCkKK3sKKyAgICBWYWxpZGF0ZUxpbWl0YXRpb25zIHZhbGlkYXRlKHNoYWRlclR5cGUsIGluZm9T
aW5rLmluZm8pOworICAgIHJvb3QtPnRyYXZlcnNlKCZ2YWxpZGF0ZSk7CisgICAgcmV0dXJuIHZh
bGlkYXRlLm51bUVycm9ycygpID09IDA7Cit9CisKK2Jvb2wgVENvbXBpbGVyOjplbmZvcmNlVGlt
aW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290LCBib29sIG91dHB1dEdyYXBoKQorewor
ICAgIGlmIChzaGFkZXJTcGVjICE9IFNIX1dFQkdMX1NQRUMpCisgICAgeworICAgICAgICBpbmZv
U2luay5pbmZvIDw8ICJUaW1pbmcgcmVzdHJpY3Rpb25zIG11c3QgYmUgZW5mb3JjZWQgdW5kZXIg
dGhlIFdlYkdMIHNwZWMuIjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlm
IChzaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICB7CisgICAgICAgIFREZXBl
bmRlbmN5R3JhcGggZ3JhcGgocm9vdCk7CisKKyAgICAgICAgLy8gT3V0cHV0IGFueSBlcnJvcnMg
Zmlyc3QuCisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGVuZm9yY2VGcmFnbWVudFNoYWRlclRpbWlu
Z1Jlc3RyaWN0aW9ucyhncmFwaCk7CisgICAgICAgIAorICAgICAgICAvLyBUaGVuLCBvdXRwdXQg
dGhlIGRlcGVuZGVuY3kgZ3JhcGguCisgICAgICAgIGlmIChvdXRwdXRHcmFwaCkKKyAgICAgICAg
eworICAgICAgICAgICAgVERlcGVuZGVuY3lHcmFwaE91dHB1dCBvdXRwdXQoaW5mb1NpbmsuaW5m
byk7CisgICAgICAgICAgICBvdXRwdXQub3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhncmFwaCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBzdWNjZXNzOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICByZXR1cm4gZW5mb3JjZVZlcnRleFNoYWRlclRpbWluZ1Jlc3Ry
aWN0aW9ucyhyb290KTsKKyAgICB9Cit9CisKK2Jvb2wgVENvbXBpbGVyOjpsaW1pdEV4cHJlc3Np
b25Db21wbGV4aXR5KFRJbnRlcm1Ob2RlKiByb290KQoreworICAgIFRJbnRlcm1UcmF2ZXJzZXIg
dHJhdmVyc2VyOworICAgIHJvb3QtPnRyYXZlcnNlKCZ0cmF2ZXJzZXIpOworICAgIFREZXBlbmRl
bmN5R3JhcGggZ3JhcGgocm9vdCk7CisKKyAgICBmb3IgKFRGdW5jdGlvbkNhbGxWZWN0b3I6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBncmFwaC5iZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygp
OworICAgICAgICAgaXRlciAhPSBncmFwaC5lbmRVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMoKTsK
KyAgICAgICAgICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaEZ1bmN0aW9uQ2FsbCogc2Ft
cGxlclN5bWJvbCA9ICppdGVyOworICAgICAgICBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyIGdy
YXBoVHJhdmVyc2VyOworICAgICAgICBzYW1wbGVyU3ltYm9sLT50cmF2ZXJzZSgmZ3JhcGhUcmF2
ZXJzZXIpOworICAgIH0KKworICAgIGlmICh0cmF2ZXJzZXIuZ2V0TWF4RGVwdGgoKSA+IG1heEV4
cHJlc3Npb25Db21wbGV4aXR5KQorICAgIHsKKyAgICAgICAgaW5mb1NpbmsuaW5mbyA8PCAiRXhw
cmVzc2lvbiB0b28gY29tcGxleC4iOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IHJldHVybiB0cnVlOworfQorCitib29sIFRDb21waWxlcjo6ZW5mb3JjZUZyYWdtZW50U2hhZGVy
VGltaW5nUmVzdHJpY3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKQoreworICAg
IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcgcmVzdHJpY3RvcihpbmZvU2luay5pbmZvKTsK
KyAgICByZXN0cmljdG9yLmVuZm9yY2VSZXN0cmljdGlvbnMoZ3JhcGgpOworICAgIHJldHVybiBy
ZXN0cmljdG9yLm51bUVycm9ycygpID09IDA7Cit9CisKK2Jvb2wgVENvbXBpbGVyOjplbmZvcmNl
VmVydGV4U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290KQoreworICAg
IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nIHJlc3RyaWN0b3IoaW5mb1NpbmsuaW5mbyk7Cisg
ICAgcmVzdHJpY3Rvci5lbmZvcmNlUmVzdHJpY3Rpb25zKHJvb3QpOworICAgIHJldHVybiByZXN0
cmljdG9yLm51bUVycm9ycygpID09IDA7Cit9CisKK3ZvaWQgVENvbXBpbGVyOjpjb2xsZWN0VmFy
aWFibGVzKFRJbnRlcm1Ob2RlKiByb290KQoreworICAgIENvbGxlY3RWYXJpYWJsZXMgY29sbGVj
dChhdHRyaWJzLCB1bmlmb3JtcywgdmFyeWluZ3MsIGhhc2hGdW5jdGlvbik7CisgICAgcm9vdC0+
dHJhdmVyc2UoJmNvbGxlY3QpOworfQorCitib29sIFRDb21waWxlcjo6ZW5mb3JjZVBhY2tpbmdS
ZXN0cmljdGlvbnMoKQoreworICAgIFZhcmlhYmxlUGFja2VyIHBhY2tlcjsKKyAgICByZXR1cm4g
cGFja2VyLkNoZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cyhtYXhVbmlmb3JtVmVjdG9y
cywgdW5pZm9ybXMpOworfQorCit2b2lkIFRDb21waWxlcjo6aW5pdGlhbGl6ZUdMUG9zaXRpb24o
VEludGVybU5vZGUqIHJvb3QpCit7CisgICAgSW5pdGlhbGl6ZVZhcmlhYmxlczo6SW5pdFZhcmlh
YmxlSW5mb0xpc3QgdmFyaWFibGVzOworICAgIEluaXRpYWxpemVWYXJpYWJsZXM6OkluaXRWYXJp
YWJsZUluZm8gdmFyKAorICAgICAgICAiZ2xfUG9zaXRpb24iLCBUVHlwZShFYnRGbG9hdCwgRWJw
VW5kZWZpbmVkLCBFdnFQb3NpdGlvbiwgNCkpOworICAgIHZhcmlhYmxlcy5wdXNoX2JhY2sodmFy
KTsKKyAgICBJbml0aWFsaXplVmFyaWFibGVzIGluaXRpYWxpemVyKHZhcmlhYmxlcyk7CisgICAg
cm9vdC0+dHJhdmVyc2UoJmluaXRpYWxpemVyKTsKK30KKwordm9pZCBUQ29tcGlsZXI6OmluaXRp
YWxpemVWYXJ5aW5nc1dpdGhvdXRTdGF0aWNVc2UoVEludGVybU5vZGUqIHJvb3QpCit7CisgICAg
SW5pdGlhbGl6ZVZhcmlhYmxlczo6SW5pdFZhcmlhYmxlSW5mb0xpc3QgdmFyaWFibGVzOworICAg
IGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCB2YXJ5aW5ncy5zaXplKCk7ICsraWkpCisgICAgewor
ICAgICAgICBjb25zdCBUVmFyaWFibGVJbmZvJiB2YXJ5aW5nID0gdmFyeWluZ3NbaWldOworICAg
ICAgICBpZiAodmFyeWluZy5zdGF0aWNVc2UpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgdW5zaWduZWQgY2hhciBzaXplID0gMDsKKyAgICAgICAgYm9vbCBtYXRyaXggPSBmYWxzZTsK
KyAgICAgICAgc3dpdGNoICh2YXJ5aW5nLnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNl
IFNIX0ZMT0FUOgorICAgICAgICAgICAgc2l6ZSA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzI6CisgICAgICAgICAgICBzaXplID0gMjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMzoKKyAgICAgICAgICAg
IHNpemUgPSAzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBTSF9GTE9BVF9W
RUM0OgorICAgICAgICAgICAgc2l6ZSA9IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBjYXNlIFNIX0ZMT0FUX01BVDI6CisgICAgICAgICAgICBzaXplID0gMjsKKyAgICAgICAgICAg
IG1hdHJpeCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFNIX0ZM
T0FUX01BVDM6CisgICAgICAgICAgICBzaXplID0gMzsKKyAgICAgICAgICAgIG1hdHJpeCA9IHRy
dWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDQ6Cisg
ICAgICAgICAgICBzaXplID0gNDsKKyAgICAgICAgICAgIG1hdHJpeCA9IHRydWU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUKGZhbHNl
KTsKKyAgICAgICAgfQorICAgICAgICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQs
IEV2cVZhcnlpbmdPdXQsIHNpemUsIG1hdHJpeCwgdmFyeWluZy5pc0FycmF5KTsKKyAgICAgICAg
VFN0cmluZyBuYW1lID0gdmFyeWluZy5uYW1lLmNfc3RyKCk7CisgICAgICAgIGlmICh2YXJ5aW5n
LmlzQXJyYXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHR5cGUuc2V0QXJyYXlTaXplKHZhcnlp
bmcuc2l6ZSk7CisgICAgICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHIoMCwgbmFtZS5maW5kX2Zp
cnN0X29mKCdbJykpOworICAgICAgICB9CisKKyAgICAgICAgSW5pdGlhbGl6ZVZhcmlhYmxlczo6
SW5pdFZhcmlhYmxlSW5mbyB2YXIobmFtZSwgdHlwZSk7CisgICAgICAgIHZhcmlhYmxlcy5wdXNo
X2JhY2sodmFyKTsKKyAgICB9CisgICAgSW5pdGlhbGl6ZVZhcmlhYmxlcyBpbml0aWFsaXplcih2
YXJpYWJsZXMpOworICAgIHJvb3QtPnRyYXZlcnNlKCZpbml0aWFsaXplcik7Cit9CisKK3ZvaWQg
VENvbXBpbGVyOjptYXBMb25nVmFyaWFibGVOYW1lcyhUSW50ZXJtTm9kZSogcm9vdCkKK3sKKyAg
ICBBU1NFUlQobG9uZ05hbWVNYXApOworICAgIE1hcExvbmdWYXJpYWJsZU5hbWVzIG1hcChsb25n
TmFtZU1hcCk7CisgICAgcm9vdC0+dHJhdmVyc2UoJm1hcCk7Cit9CisKK2ludCBUQ29tcGlsZXI6
OmdldE1hcHBlZE5hbWVNYXhMZW5ndGgoKSBjb25zdAoreworICAgIHJldHVybiBNQVhfU0hPUlRF
TkVEX0lERU5USUZJRVJfU0laRSArIDE7Cit9CisKK2NvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYg
VENvbXBpbGVyOjpnZXRFeHRlbnNpb25CZWhhdmlvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGV4
dGVuc2lvbkJlaGF2aW9yOworfQorCitjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIFRDb21waWxl
cjo6Z2V0UmVzb3VyY2VzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29tcGlsZVJlc291cmNlczsK
K30KKworY29uc3QgQXJyYXlCb3VuZHNDbGFtcGVyJiBUQ29tcGlsZXI6OmdldEFycmF5Qm91bmRz
Q2xhbXBlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFycmF5Qm91bmRzQ2xhbXBlcjsKK30KKwor
U2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBUQ29tcGlsZXI6OmdldEFycmF5SW5kZXhDbGFt
cGluZ1N0cmF0ZWd5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2xhbXBpbmdTdHJhdGVneTsKK30K
KworY29uc3QgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3ImIFRDb21waWxlcjo6Z2V0QnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3IoKSBjb25zdAoreworICAgIHJldHVybiBidWlsdEluRnVuY3Rpb25FbXVs
YXRvcjsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMWUzNzg4
NWY5MDFiMDI0ZDYzNDY1ODQ3NzEyYmZiNjg4NjA3MzRjCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlv
bi5oCkBAIC0wLDAgKzEsMjU3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9DT05T
VEFOVF9VTklPTl9JTkNMVURFRF8KKyNkZWZpbmUgX0NPTlNUQU5UX1VOSU9OX0lOQ0xVREVEXwor
CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKK2NsYXNzIENvbnN0YW50VW5pb24geworcHVibGljOgor
ICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKKyAgICBDb25zdGFudFVuaW9uKCkKKyAg
ICB7CisgICAgICAgIGlDb25zdCA9IDA7CisgICAgICAgIHR5cGUgPSBFYnRWb2lkOworICAgIH0K
KworICAgIHZvaWQgc2V0SUNvbnN0KGludCBpKSB7aUNvbnN0ID0gaTsgdHlwZSA9IEVidEludDsg
fQorICAgIHZvaWQgc2V0RkNvbnN0KGZsb2F0IGYpIHtmQ29uc3QgPSBmOyB0eXBlID0gRWJ0Rmxv
YXQ7IH0KKyAgICB2b2lkIHNldEJDb25zdChib29sIGIpIHtiQ29uc3QgPSBiOyB0eXBlID0gRWJ0
Qm9vbDsgfQorCisgICAgaW50IGdldElDb25zdCgpIHsgcmV0dXJuIGlDb25zdDsgfQorICAgIGZs
b2F0IGdldEZDb25zdCgpIHsgcmV0dXJuIGZDb25zdDsgfQorICAgIGJvb2wgZ2V0QkNvbnN0KCkg
eyByZXR1cm4gYkNvbnN0OyB9CisgICAgaW50IGdldElDb25zdCgpIGNvbnN0IHsgcmV0dXJuIGlD
b25zdDsgfQorICAgIGZsb2F0IGdldEZDb25zdCgpIGNvbnN0IHsgcmV0dXJuIGZDb25zdDsgfQor
ICAgIGJvb2wgZ2V0QkNvbnN0KCkgY29uc3QgeyByZXR1cm4gYkNvbnN0OyB9CisKKyAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgaW50IGkpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaSA9
PSBpQ29uc3Q7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGZsb2F0IGYpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gZiA9PSBmQ29uc3Q7CisgICAgfQorCisgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IGJvb2wgYikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBi
ID09IGJDb25zdDsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29uc3RhbnRV
bmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoY29uc3RhbnQudHlwZSAh
PSB0eXBlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHN3aXRjaCAodHlw
ZSkgeworICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgIHJldHVybiBjb25zdGFudC5p
Q29uc3QgPT0gaUNvbnN0OworICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgcmV0
dXJuIGNvbnN0YW50LmZDb25zdCA9PSBmQ29uc3Q7CisgICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAg
ICAgICAgICAgIHJldHVybiBjb25zdGFudC5iQ29uc3QgPT0gYkNvbnN0OworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IGludCBpKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
ICFvcGVyYXRvcj09KGkpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBmbG9h
dCBmKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KGYpOworICAgIH0K
KworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBib29sIGIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gIW9wZXJhdG9yPT0oYik7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
ICFvcGVyYXRvcj09KGNvbnN0YW50KTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPihjb25z
dCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBhc3NlcnQo
dHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAg
IGNhc2UgRWJ0SW50OgorICAgICAgICAgICAgcmV0dXJuIGlDb25zdCA+IGNvbnN0YW50LmlDb25z
dDsKKyAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgIHJldHVybiBmQ29uc3QgPiBj
b25zdGFudC5mQ29uc3Q7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7ICAgLy8gSW52YWxpZCBvcGVyYXRpb24sIGhhbmRsZWQgYXQgc2VtYW50aWMgYW5hbHlzaXMK
KyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IENvbnN0YW50VW5p
b24mIGNvbnN0YW50KSBjb25zdAorICAgIHsgCisgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0
YW50LnR5cGUpOworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6
CisgICAgICAgICAgICByZXR1cm4gaUNvbnN0IDwgY29uc3RhbnQuaUNvbnN0OworICAgICAgICBj
YXNlIEVidEZsb2F0OgorICAgICAgICAgICAgcmV0dXJuIGZDb25zdCA8IGNvbnN0YW50LmZDb25z
dDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBJbnZh
bGlkIG9wZXJhdGlvbiwgaGFuZGxlZCBhdCBzZW1hbnRpYyBhbmFseXNpcworICAgICAgICB9Cisg
ICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvcisoY29uc3QgQ29uc3RhbnRVbmlvbiYg
Y29uc3RhbnQpIGNvbnN0CisgICAgeyAKKyAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1
ZTsKKyAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CisgICAgICAgIHN3aXRj
aCAodHlwZSkgeworICAgICAgICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlD
b25zdCArIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBjYXNlIEVidEZsb2F0OiBy
ZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0ICsgY29uc3RhbnQuZkNvbnN0KTsgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfQorCisgICAgQ29uc3Rh
bnRVbmlvbiBvcGVyYXRvci0oY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0Cisg
ICAgeyAKKyAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYXNzZXJ0
KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAg
ICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAtIGNvbnN0YW50LmlD
b25zdCk7IGJyZWFrOworICAgICAgICBjYXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29u
c3QoZkNvbnN0IC0gY29uc3RhbnQuZkNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IGFz
c2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvcioo
Y29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAKKyAgICAgICAgQ29u
c3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQu
dHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEVidEludDogcmV0
dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAqIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAg
ICAgICBjYXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0ICogY29uc3Rh
bnQuZkNvbnN0KTsgYnJlYWs7IAorICAgICAgICBkZWZhdWx0OiBhc3NlcnQoZmFsc2UgJiYgIkRl
ZmF1bHQgbWlzc2luZyIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVl
OworICAgIH0KKworICAgIENvbnN0YW50VW5pb24gb3BlcmF0b3IlKGNvbnN0IENvbnN0YW50VW5p
b24mIGNvbnN0YW50KSBjb25zdAorICAgIHsgCisgICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJu
VmFsdWU7CisgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOworICAgICAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNldElDb25z
dChpQ29uc3QgJSBjb25zdGFudC5pQ29uc3QpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogICAg
IGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRv
cj4+KGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAorICAgIHsgCisgICAgICAg
IENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7CisgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0
YW50LnR5cGUpOworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6
IHJldHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgPj4gY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIp
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0KKworICAg
IENvbnN0YW50VW5pb24gb3BlcmF0b3I8PChjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkg
Y29uc3QKKyAgICB7IAorICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOworICAgICAg
ICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7
CisgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0IDw8IGNv
bnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNl
ICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXR1
cm5WYWx1ZTsKKyAgICB9CisKKyAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yJihjb25zdCBDb25z
dGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBDb25zdGFudFVuaW9u
IHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAg
ICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50OiAgcmV0dXJuVmFsdWUu
c2V0SUNvbnN0KGlDb25zdCAmIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBkZWZh
dWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9CisKKyAgICBDb25zdGFudFVuaW9u
IG9wZXJhdG9yfChjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7IAor
ICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQodHlwZSA9
PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2Ug
RWJ0SW50OiAgcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCB8IGNvbnN0YW50LmlDb25zdCk7
IGJyZWFrOworICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1p
c3NpbmciKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9
CisKKyAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yXihjb25zdCBDb25zdGFudFVuaW9uJiBjb25z
dGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOwor
ICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50OiAgcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25z
dCBeIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0
KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biByZXR1cm5WYWx1ZTsKKyAgICB9CisKKyAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yJiYoY29u
c3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAKKyAgICAgICAgQ29uc3Rh
bnRVbmlvbiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlw
ZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEVidEJvb2w6IHJldHVy
blZhbHVlLnNldEJDb25zdChiQ29uc3QgJiYgY29uc3RhbnQuYkNvbnN0KTsgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0KKworICAgIENvbnN0
YW50VW5pb24gb3BlcmF0b3J8fChjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QK
KyAgICB7IAorICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBhc3Nl
cnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
ICAgIGNhc2UgRWJ0Qm9vbDogcmV0dXJuVmFsdWUuc2V0QkNvbnN0KGJDb25zdCB8fCBjb25zdGFu
dC5iQ29uc3QpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAi
RGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0dXJuVmFs
dWU7CisgICAgfQorCisgICAgVEJhc2ljVHlwZSBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlw
ZTsgfQorcHJpdmF0ZToKKworICAgIHVuaW9uICB7CisgICAgICAgIGludCBpQ29uc3Q7ICAvLyB1
c2VkIGZvciBpdmVjLCBzY2FsYXIgaW50cworICAgICAgICBib29sIGJDb25zdDsgLy8gdXNlZCBm
b3IgYnZlYywgc2NhbGFyIGJvb2xzCisgICAgICAgIGZsb2F0IGZDb25zdDsgICAvLyB1c2VkIGZv
ciB2ZWMsIG1hdCwgc2NhbGFyIGZsb2F0cworICAgIH0gOworCisgICAgVEJhc2ljVHlwZSB0eXBl
OworfTsKKworI2VuZGlmIC8vIF9DT05TVEFOVF9VTklPTl9JTkNMVURFRF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RldGVjdENh
bGxEZXB0aC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9EZXRlY3RDYWxsRGVwdGguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmYzFkNTg1MmZmMmRjNmZhZDMz
MGM3NTkxMGZjM2Q1NzZmOGZlMTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EZXRlY3RDYWxsRGVwdGguY3BwCkBAIC0w
LDAgKzEsMTg1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9EZXRlY3RDYWxsRGVwdGguaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L0luZm9TaW5rLmgiCisKK0RldGVjdENhbGxEZXB0aDo6RnVuY3Rpb25Ob2RlOjpGdW5jdGlvbk5v
ZGUoY29uc3QgVFN0cmluZyYgZm5hbWUpCisgICAgOiBuYW1lKGZuYW1lKSwKKyAgICAgIHZpc2l0
KFByZVZpc2l0KQoreworfQorCitjb25zdCBUU3RyaW5nJiBEZXRlY3RDYWxsRGVwdGg6OkZ1bmN0
aW9uTm9kZTo6Z2V0TmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG5hbWU7Cit9CisKK3ZvaWQg
RGV0ZWN0Q2FsbERlcHRoOjpGdW5jdGlvbk5vZGU6OmFkZENhbGxlZSgKKyAgICBEZXRlY3RDYWxs
RGVwdGg6OkZ1bmN0aW9uTm9kZSogY2FsbGVlKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY2FsbGVlcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoY2FsbGVlc1tpXSA9PSBjYWxs
ZWUpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhbGxlZXMucHVzaF9iYWNrKGNh
bGxlZSk7Cit9CisKK2ludCBEZXRlY3RDYWxsRGVwdGg6OkZ1bmN0aW9uTm9kZTo6ZGV0ZWN0Q2Fs
bERlcHRoKERldGVjdENhbGxEZXB0aCogZGV0ZWN0Q2FsbERlcHRoLCBpbnQgZGVwdGgpCit7Cisg
ICAgQVNTRVJUKHZpc2l0ID09IFByZVZpc2l0KTsKKyAgICBBU1NFUlQoZGV0ZWN0Q2FsbERlcHRo
KTsKKworICAgIGludCBtYXhEZXB0aCA9IGRlcHRoOworICAgIHZpc2l0ID0gSW5WaXNpdDsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNhbGxlZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
c3dpdGNoIChjYWxsZWVzW2ldLT52aXNpdCkgeworICAgICAgICAgICAgY2FzZSBJblZpc2l0Ogor
ICAgICAgICAgICAgICAgIC8vIGN5Y2xlIGRldGVjdGVkLCBpLmUuLCByZWN1cnNpb24gZGV0ZWN0
ZWQuCisgICAgICAgICAgICAgICAgcmV0dXJuIGtJbmZpbml0ZUNhbGxEZXB0aDsKKyAgICAgICAg
ICAgIGNhc2UgUG9zdFZpc2l0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBQcmVWaXNpdDogeworICAgICAgICAgICAgICAgIC8vIENoZWNrIGJlZm9yZSB3ZSByZWN1
cnNlIHNvIHdlIGRvbid0IGdvIHRvbyBkZXB0aAorICAgICAgICAgICAgICAgIGlmIChkZXRlY3RD
YWxsRGVwdGgtPmNoZWNrRXhjZWVkc01heERlcHRoKGRlcHRoKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGRlcHRoOworICAgICAgICAgICAgICAgIGludCBjYWxsRGVwdGggPSBjYWxsZWVz
W2ldLT5kZXRlY3RDYWxsRGVwdGgoZGV0ZWN0Q2FsbERlcHRoLCBkZXB0aCArIDEpOworICAgICAg
ICAgICAgICAgIC8vIENoZWNrIGFmdGVyIHdlIHJlY3Vyc2Ugc28gd2UgY2FuIGV4aXQgaW1tZWRp
YXRlbHkgYW5kIHByb3ZpZGUgaW5mby4KKyAgICAgICAgICAgICAgICBpZiAoZGV0ZWN0Q2FsbERl
cHRoLT5jaGVja0V4Y2VlZHNNYXhEZXB0aChjYWxsRGVwdGgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGRldGVjdENhbGxEZXB0aC0+Z2V0SW5mb1NpbmsoKS5pbmZvIDw8ICI8LSIgPDwgY2FsbGVl
c1tpXS0+Z2V0TmFtZSgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbERlcHRoOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtYXhEZXB0aCA9IHN0ZDo6bWF4KGNh
bGxEZXB0aCwgbWF4RGVwdGgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHZpc2l0ID0gUG9z
dFZpc2l0OworICAgIHJldHVybiBtYXhEZXB0aDsKK30KKwordm9pZCBEZXRlY3RDYWxsRGVwdGg6
OkZ1bmN0aW9uTm9kZTo6cmVzZXQoKQoreworICAgIHZpc2l0ID0gUHJlVmlzaXQ7Cit9CisKK0Rl
dGVjdENhbGxEZXB0aDo6RGV0ZWN0Q2FsbERlcHRoKFRJbmZvU2luayYgaW5mb1NpbmssIGJvb2wg
bGltaXRDYWxsU3RhY2tEZXB0aCwgaW50IG1heENhbGxTdGFja0RlcHRoKQorICAgIDogVEludGVy
bVRyYXZlcnNlcih0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpLAorICAgICAgY3VycmVudEZ1bmN0
aW9uKE5VTEwpLAorICAgICAgaW5mb1NpbmsoaW5mb1NpbmspLAorICAgICAgbWF4RGVwdGgobGlt
aXRDYWxsU3RhY2tEZXB0aCA/IG1heENhbGxTdGFja0RlcHRoIDogRnVuY3Rpb25Ob2RlOjprSW5m
aW5pdGVDYWxsRGVwdGgpCit7Cit9CisKK0RldGVjdENhbGxEZXB0aDo6fkRldGVjdENhbGxEZXB0
aCgpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbnMuc2l6ZSgpOyArK2kp
CisgICAgICAgIGRlbGV0ZSBmdW5jdGlvbnNbaV07Cit9CisKK2Jvb2wgRGV0ZWN0Q2FsbERlcHRo
Ojp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK3sK
KyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAgICBjYXNlIEVPcFByb3Rv
dHlwZToKKyAgICAgICAgICAgIC8vIEZ1bmN0aW9uIGRlY2xhcmF0aW9uLgorICAgICAgICAgICAg
Ly8gRG9uJ3QgYWRkIEZ1bmN0aW9uTm9kZSBoZXJlIGJlY2F1c2Ugbm9kZS0+Z2V0TmFtZSgpIGlz
IHRoZQorICAgICAgICAgICAgLy8gdW5tYW5nbGVkIGZ1bmN0aW9uIG5hbWUuCisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BGdW5jdGlvbjogeworICAgICAgICAgICAgLy8gRnVu
Y3Rpb24gZGVmaW5pdGlvbi4KKyAgICAgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkgewor
ICAgICAgICAgICAgICAgIGN1cnJlbnRGdW5jdGlvbiA9IGZpbmRGdW5jdGlvbkJ5TmFtZShub2Rl
LT5nZXROYW1lKCkpOworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50RnVuY3Rpb24gPT0gTlVM
TCkgeworICAgICAgICAgICAgICAgICAgICBjdXJyZW50RnVuY3Rpb24gPSBuZXcgRnVuY3Rpb25O
b2RlKG5vZGUtPmdldE5hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9ucy5wdXNo
X2JhY2soY3VycmVudEZ1bmN0aW9uKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
IGVsc2UgaWYgKHZpc2l0ID09IFBvc3RWaXNpdCkgeworICAgICAgICAgICAgICAgIGN1cnJlbnRG
dW5jdGlvbiA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIEVPcEZ1bmN0aW9uQ2FsbDogeworICAgICAgICAgICAgLy8gRnVu
Y3Rpb24gY2FsbC4KKyAgICAgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkgeworICAgICAg
ICAgICAgICAgIEZ1bmN0aW9uTm9kZSogZnVuYyA9IGZpbmRGdW5jdGlvbkJ5TmFtZShub2RlLT5n
ZXROYW1lKCkpOworICAgICAgICAgICAgICAgIGlmIChmdW5jID09IE5VTEwpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZnVuYyA9IG5ldyBGdW5jdGlvbk5vZGUobm9kZS0+Z2V0TmFtZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgZnVuY3Rpb25zLnB1c2hfYmFjayhmdW5jKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGdW5jdGlvbikKKyAgICAgICAgICAg
ICAgICAgICAgY3VycmVudEZ1bmN0aW9uLT5hZGRDYWxsZWUoZnVuYyk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIERldGVjdENh
bGxEZXB0aDo6Y2hlY2tFeGNlZWRzTWF4RGVwdGgoaW50IGRlcHRoKQoreworICAgIHJldHVybiBk
ZXB0aCA+PSBtYXhEZXB0aDsKK30KKwordm9pZCBEZXRlY3RDYWxsRGVwdGg6OnJlc2V0RnVuY3Rp
b25Ob2RlcygpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbnMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgZnVuY3Rpb25zW2ldLT5yZXNldCgpOworICAgIH0KK30KKworRGV0
ZWN0Q2FsbERlcHRoOjpFcnJvckNvZGUgRGV0ZWN0Q2FsbERlcHRoOjpkZXRlY3RDYWxsRGVwdGhG
b3JGdW5jdGlvbihGdW5jdGlvbk5vZGUqIGZ1bmMpCit7CisgICAgY3VycmVudEZ1bmN0aW9uID0g
TlVMTDsKKyAgICByZXNldEZ1bmN0aW9uTm9kZXMoKTsKKworICAgIGludCBtYXhDYWxsRGVwdGgg
PSBmdW5jLT5kZXRlY3RDYWxsRGVwdGgodGhpcywgMSk7CisKKyAgICBpZiAobWF4Q2FsbERlcHRo
ID09IEZ1bmN0aW9uTm9kZTo6a0luZmluaXRlQ2FsbERlcHRoKQorICAgICAgICByZXR1cm4ga0Vy
cm9yUmVjdXJzaW9uOworCisgICAgaWYgKG1heENhbGxEZXB0aCA+PSBtYXhEZXB0aCkKKyAgICAg
ICAgcmV0dXJuIGtFcnJvck1heERlcHRoRXhjZWVkZWQ7CisKKyAgICByZXR1cm4ga0Vycm9yTm9u
ZTsKK30KKworRGV0ZWN0Q2FsbERlcHRoOjpFcnJvckNvZGUgRGV0ZWN0Q2FsbERlcHRoOjpkZXRl
Y3RDYWxsRGVwdGgoKQoreworICAgIGlmIChtYXhEZXB0aCAhPSBGdW5jdGlvbk5vZGU6OmtJbmZp
bml0ZUNhbGxEZXB0aCkgeworICAgICAgICAvLyBDaGVjayBhbGwgZnVuY3Rpb25zIGJlY2F1c2Ug
dGhlIGRyaXZlciBtYXkgZmFpbCBvbiB0aGVtCisgICAgICAgIC8vIFRPRE86IEJlZm9yZSBkZXRl
Y3RpbmdSZWN1cnNpb24sIHN0cmlwIHVudXNlZCBmdW5jdGlvbnMuCisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBFcnJv
ckNvZGUgZXJyb3IgPSBkZXRlY3RDYWxsRGVwdGhGb3JGdW5jdGlvbihmdW5jdGlvbnNbaV0pOwor
ICAgICAgICAgICAgaWYgKGVycm9yICE9IGtFcnJvck5vbmUpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgRnVuY3Rpb25Ob2Rl
KiBtYWluID0gZmluZEZ1bmN0aW9uQnlOYW1lKCJtYWluKCIpOworICAgICAgICBpZiAobWFpbiA9
PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIGtFcnJvck1pc3NpbmdNYWluOworCisgICAgICAg
IHJldHVybiBkZXRlY3RDYWxsRGVwdGhGb3JGdW5jdGlvbihtYWluKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4ga0Vycm9yTm9uZTsKK30KKworRGV0ZWN0Q2FsbERlcHRoOjpGdW5jdGlvbk5vZGUqIERl
dGVjdENhbGxEZXB0aDo6ZmluZEZ1bmN0aW9uQnlOYW1lKAorICAgIGNvbnN0IFRTdHJpbmcmIG5h
bWUpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbnMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgaWYgKGZ1bmN0aW9uc1tpXS0+Z2V0TmFtZSgpID09IG5hbWUpCisgICAgICAg
ICAgICByZXR1cm4gZnVuY3Rpb25zW2ldOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvRGV0ZWN0Q2FsbERlcHRoLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9EZXRlY3RDYWxsRGVwdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZTdmMjNkMTVmOGMx
ODZmMjU3Mzc2ODEwN2QyNWIyNWJhZDNhMmJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0Q2FsbERlcHRoLmgK
QEAgLTAsMCArMSw4MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9E
RVRFQ1RfUkVDVVJTSU9OX0hfCisjZGVmaW5lIENPTVBJTEVSX0RFVEVDVF9SRUNVUlNJT05fSF8K
KworI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisjaW5jbHVkZSA8bGltaXRzLmg+
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5oIgorCitjbGFzcyBUSW5mb1Npbms7
CisKKy8vIFRyYXZlcnNlcyBpbnRlcm1lZGlhdGUgdHJlZSB0byBkZXRlY3QgZnVuY3Rpb24gcmVj
dXJzaW9uLgorY2xhc3MgRGV0ZWN0Q2FsbERlcHRoIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIg
eworcHVibGljOgorICAgIGVudW0gRXJyb3JDb2RlIHsKKyAgICAgICAga0Vycm9yTWlzc2luZ01h
aW4sCisgICAgICAgIGtFcnJvclJlY3Vyc2lvbiwKKyAgICAgICAga0Vycm9yTWF4RGVwdGhFeGNl
ZWRlZCwKKyAgICAgICAga0Vycm9yTm9uZQorICAgIH07CisKKyAgICBEZXRlY3RDYWxsRGVwdGgo
VEluZm9TaW5rJiBpbmZvU3luYywgYm9vbCBsaW1pdENhbGxTdGFja0RlcHRoLCBpbnQgbWF4Q2Fs
bFN0YWNrRGVwdGgpOworICAgIH5EZXRlY3RDYWxsRGVwdGgoKTsKKworICAgIHZpcnR1YWwgYm9v
bCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOworCisgICAgYm9vbCBj
aGVja0V4Y2VlZHNNYXhEZXB0aChpbnQgZGVwdGgpOworCisgICAgRXJyb3JDb2RlIGRldGVjdENh
bGxEZXB0aCgpOworCitwcml2YXRlOgorICAgIGNsYXNzIEZ1bmN0aW9uTm9kZSB7CisgICAgcHVi
bGljOgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtJbmZpbml0ZUNhbGxEZXB0aCA9IElOVF9N
QVg7CisKKyAgICAgICAgRnVuY3Rpb25Ob2RlKGNvbnN0IFRTdHJpbmcmIGZuYW1lKTsKKworICAg
ICAgICBjb25zdCBUU3RyaW5nJiBnZXROYW1lKCkgY29uc3Q7CisKKyAgICAgICAgLy8gSWYgYSBm
dW5jdGlvbiBpcyBhbHJlYWR5IGluIHRoZSBjYWxsZWUgbGlzdCwgdGhpcyBiZWNvbWVzIGEgbm8t
b3AuCisgICAgICAgIHZvaWQgYWRkQ2FsbGVlKEZ1bmN0aW9uTm9kZSogY2FsbGVlKTsKKworICAg
ICAgICAvLyBSZXR1cm5zIGtJbmlmaW5pdHlDYWxsRGVwdGggaWYgcmVjdXJzaXZlIGZ1bmN0aW9u
IGNhbGxzIGFyZSBkZXRlY3RlZC4KKyAgICAgICAgaW50IGRldGVjdENhbGxEZXB0aChEZXRlY3RD
YWxsRGVwdGgqIGRldGVjdENhbGxEZXB0aCwgaW50IGRlcHRoKTsKKworICAgICAgICAvLyBSZXNl
dCBzdGF0ZS4KKyAgICAgICAgdm9pZCByZXNldCgpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAg
Ly8gbWFuZ2xlZCBmdW5jdGlvbiBuYW1lIGlzIHVuaXF1ZS4KKyAgICAgICAgVFN0cmluZyBuYW1l
OworCisgICAgICAgIC8vIGZ1bmN0aW9ucyB0aGF0IGFyZSBkaXJlY3RseSBjYWxsZWQgYnkgdGhp
cyBmdW5jdGlvbi4KKyAgICAgICAgVFZlY3RvcjxGdW5jdGlvbk5vZGUqPiBjYWxsZWVzOworCisg
ICAgICAgIFZpc2l0IHZpc2l0OworICAgIH07CisKKyAgICBFcnJvckNvZGUgZGV0ZWN0Q2FsbERl
cHRoRm9yRnVuY3Rpb24oRnVuY3Rpb25Ob2RlKiBmdW5jKTsKKyAgICBGdW5jdGlvbk5vZGUqIGZp
bmRGdW5jdGlvbkJ5TmFtZShjb25zdCBUU3RyaW5nJiBuYW1lKTsKKyAgICB2b2lkIHJlc2V0RnVu
Y3Rpb25Ob2RlcygpOworCisgICAgVEluZm9TaW5rJiBnZXRJbmZvU2luaygpIHsgcmV0dXJuIGlu
Zm9TaW5rOyB9CisKKyAgICBUVmVjdG9yPEZ1bmN0aW9uTm9kZSo+IGZ1bmN0aW9uczsKKyAgICBG
dW5jdGlvbk5vZGUqIGN1cnJlbnRGdW5jdGlvbjsKKyAgICBUSW5mb1NpbmsmIGluZm9TaW5rOwor
ICAgIGludCBtYXhEZXB0aDsKKworICAgIERldGVjdENhbGxEZXB0aChjb25zdCBEZXRlY3RDYWxs
RGVwdGgmKTsKKyAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBEZXRlY3RDYWxsRGVwdGgmKTsKK307
CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfREVURUNUX1JFQ1VSU0lPTl9IXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0RGlz
Y29udGludWl0eS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9EZXRlY3REaXNjb250aW51aXR5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMzRlYjBiZmE4YmFm
NWEyNDYwYTFkMjZmNzVlMGM1NWUxMDc4MDZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0RGlzY29udGludWl0
eS5jcHAKQEAgLTAsMCArMSwxMzkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gQ29udGFpbnMgYW5hbHlz
aXMgdXRpbGl0aWVzIGZvciBkZWFsaW5nIHdpdGggSExTTCdzIGxhY2sgb2Ygc3VwcG9ydCBmb3IK
Ky8vIHRoZSB1c2Ugb2YgaW50cmluc2ljIGZ1bmN0aW9ucyB3aGljaCAoaW1wbGljaXRseSBvciBl
eHBsaWNpdGx5KSBjb21wdXRlCisvLyBncmFkaWVudHMgb2YgZnVuY3Rpb25zIHdpdGggZGlzY29u
dGludWl0aWVzLiAKKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0RldGVjdERp
c2NvbnRpbnVpdHkuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250
ZXh0LmgiCisKK25hbWVzcGFjZSBzaAoreworYm9vbCBEZXRlY3RMb29wRGlzY29udGludWl0eTo6
dHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpCit7CisgICAgbUxvb3BEZXB0aCA9IDA7CisgICAg
bUxvb3BEaXNjb250aW51aXR5ID0gZmFsc2U7CisgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7Cisg
ICAgcmV0dXJuIG1Mb29wRGlzY29udGludWl0eTsKK30KKworYm9vbCBEZXRlY3RMb29wRGlzY29u
dGludWl0eTo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbG9vcCkKK3sKKyAg
ICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAgeworICAgICAgICArK21Mb29wRGVwdGg7Cisg
ICAgfQorICAgIGVsc2UgaWYgKHZpc2l0ID09IFBvc3RWaXNpdCkKKyAgICB7CisgICAgICAgIC0t
bUxvb3BEZXB0aDsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBEZXRlY3RM
b29wRGlzY29udGludWl0eTo6dmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gg
Km5vZGUpCit7CisgICAgaWYgKG1Mb29wRGlzY29udGludWl0eSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIW1Mb29wRGVwdGgpCisgICAgeworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldEZsb3dPcCgpKQor
ICAgIHsKKyAgICAgIGNhc2UgRU9wS2lsbDoKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVP
cEJyZWFrOgorICAgICAgY2FzZSBFT3BDb250aW51ZToKKyAgICAgIGNhc2UgRU9wUmV0dXJuOgor
ICAgICAgICBtTG9vcERpc2NvbnRpbnVpdHkgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuICFtTG9vcERpc2Nv
bnRpbnVpdHk7Cit9CisKK2Jvb2wgRGV0ZWN0TG9vcERpc2NvbnRpbnVpdHk6OnZpc2l0QWdncmVn
YXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQoreworICAgIHJldHVybiAh
bUxvb3BEaXNjb250aW51aXR5OworfQorCitib29sIGNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHko
VEludGVybU5vZGUgKm5vZGUpCit7CisgICAgRGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkgZGV0ZWN0
TG9vcERpc2NvbnRpbnVpdHk7CisgICAgcmV0dXJuIGRldGVjdExvb3BEaXNjb250aW51aXR5LnRy
YXZlcnNlKG5vZGUpOworfQorCitib29sIERldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp0cmF2ZXJz
ZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBtR3JhZGllbnRPcGVyYXRpb24gPSBmYWxzZTsK
KyAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICByZXR1cm4gbUdyYWRpZW50T3BlcmF0aW9u
OworfQorCitib29sIERldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp2aXNpdFVuYXJ5KFZpc2l0IHZp
c2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUpCit7CisgICAgaWYgKG1HcmFkaWVudE9wZXJhdGlvbikK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG5vZGUt
PmdldE9wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BERmR4OgorICAgICAgY2FzZSBFT3BERmR5
OgorICAgICAgICBtR3JhZGllbnRPcGVyYXRpb24gPSB0cnVlOworICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuICFtR3JhZGllbnRPcGVyYXRpb247Cit9
CisKK2Jvb2wgRGV0ZWN0R3JhZGllbnRPcGVyYXRpb246OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZp
c2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQoreworICAgIGlmIChtR3JhZGllbnRPcGVyYXRp
b24pCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG5vZGUt
PmdldE9wKCkgPT0gRU9wRnVuY3Rpb25DYWxsKQorICAgIHsKKyAgICAgICAgaWYgKCFub2RlLT5p
c1VzZXJEZWZpbmVkKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRTdHJpbmcgbmFtZSA9IFRG
dW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7CisKKyAgICAgICAgICAgIGlm
IChuYW1lID09ICJ0ZXh0dXJlMkQiIHx8CisgICAgICAgICAgICAgICAgbmFtZSA9PSAidGV4dHVy
ZTJEUHJvaiIgfHwKKyAgICAgICAgICAgICAgICBuYW1lID09ICJ0ZXh0dXJlQ3ViZSIpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgbUdyYWRpZW50T3BlcmF0aW9uID0gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIC8vIFdoZW4gYSB1c2VyIGRlZmluZWQgZnVuY3Rpb24gaXMgY2FsbGVkLCB3ZSBoYXZlIHRv
CisgICAgICAgICAgICAvLyBjb25zZXJ2YXRpdmVseSBhc3N1bWUgaXQgdG8gY29udGFpbiBncmFk
aWVudCBvcGVyYXRpb25zCisgICAgICAgICAgICBtR3JhZGllbnRPcGVyYXRpb24gPSB0cnVlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuICFtR3JhZGllbnRPcGVyYXRpb247Cit9CisK
K2Jvb2wgY29udGFpbnNHcmFkaWVudE9wZXJhdGlvbihUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAg
ICBEZXRlY3RHcmFkaWVudE9wZXJhdGlvbiBkZXRlY3RHcmFkaWVudE9wZXJhdGlvbjsKKyAgICBy
ZXR1cm4gZGV0ZWN0R3JhZGllbnRPcGVyYXRpb24udHJhdmVyc2Uobm9kZSk7Cit9Cit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9E
ZXRlY3REaXNjb250aW51aXR5LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9EZXRlY3REaXNjb250aW51aXR5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWRkOGJlOTIz
MzU5YzNmZTZkYWM5NGY1MjcyNjBjMzM1YjMzMTM5MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RldGVjdERpc2NvbnRp
bnVpdHkuaApAQCAtMCwwICsxLDUyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIENvbnRhaW5zIGFuYWx5
c2lzIHV0aWxpdGllcyBmb3IgZGVhbGluZyB3aXRoIEhMU0wncyBsYWNrIG9mIHN1cHBvcnQgZm9y
CisvLyB0aGUgdXNlIG9mIGludHJpbnNpYyBmdW5jdGlvbnMgd2hpY2ggKGltcGxpY2l0bHkgb3Ig
ZXhwbGljaXRseSkgY29tcHV0ZQorLy8gZ3JhZGllbnRzIG9mIGZ1bmN0aW9ucyB3aXRoIGRpc2Nv
bnRpbnVpdGllcy4gCisvLworCisjaWZuZGVmIENPTVBJTEVSX0RFVEVDVERJU0NPTlRJTlVJVFlf
SF8KKyNkZWZpbmUgQ09NUElMRVJfREVURUNURElTQ09OVElOVUlUWV9IXworCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKworbmFtZXNwYWNlIHNoCit7Cisv
LyBDaGVja3Mgd2hldGhlciBhIGxvb3AgY2FuIHJ1biBmb3IgYSB2YXJpYWJsZSBudW1iZXIgb2Yg
aXRlcmF0aW9ucworY2xhc3MgRGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkgOiBwdWJsaWMgVEludGVy
bVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgYm9vbCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAq
bm9kZSk7CisKKyAgcHJvdGVjdGVkOgorICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQs
IFRJbnRlcm1CcmFuY2ggKm5vZGUpOworICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBU
SW50ZXJtTG9vcCAqbG9vcCk7CisgICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwg
VEludGVybUFnZ3JlZ2F0ZSAqbm9kZSk7CisKKyAgICBpbnQgbUxvb3BEZXB0aDsKKyAgICBib29s
IG1Mb29wRGlzY29udGludWl0eTsKK307CisKK2Jvb2wgY29udGFpbnNMb29wRGlzY29udGludWl0
eShUSW50ZXJtTm9kZSAqbm9kZSk7CisKKy8vIENoZWNrcyBmb3IgaW50cmluc2ljIGZ1bmN0aW9u
cyB3aGljaCBjb21wdXRlIGdyYWRpZW50cworY2xhc3MgRGV0ZWN0R3JhZGllbnRPcGVyYXRpb24g
OiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgYm9vbCB0cmF2ZXJz
ZShUSW50ZXJtTm9kZSAqbm9kZSk7CisKKyAgcHJvdGVjdGVkOgorICAgIGJvb2wgdmlzaXRVbmFy
eShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5ICpub2RlKTsKKyAgICBib29sIHZpc2l0QWdncmVn
YXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKTsKKworICAgIGJvb2wgbUdy
YWRpZW50T3BlcmF0aW9uOworfTsKKworYm9vbCBjb250YWluc0dyYWRpZW50T3BlcmF0aW9uKFRJ
bnRlcm1Ob2RlICpub2RlKTsKKworfQorCisjZW5kaWYgICAvLyBDT01QSUxFUl9ERVRFQ1RESVND
T05USU5VSVRZX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTk1
MDZjMDg0OTQyMmZlMWRiMzI0OWJhZmI4NzcyZGFiYzU2MTExNQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RpYWdub3N0
aWNzLmNwcApAQCAtMCwwICsxLDYzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvRGlhZ25vc3RpY3MuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvY29tcGlsZXJkZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5m
b1NpbmsuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvU291cmNlTG9jYXRpb24u
aCIKKworVERpYWdub3N0aWNzOjpURGlhZ25vc3RpY3MoVEluZm9TaW5rJiBpbmZvU2luaykgOgor
ICAgIG1JbmZvU2luayhpbmZvU2luayksCisgICAgbU51bUVycm9ycygwKSwKKyAgICBtTnVtV2Fy
bmluZ3MoMCkKK3sKK30KKworVERpYWdub3N0aWNzOjp+VERpYWdub3N0aWNzKCkKK3sKK30KKwor
dm9pZCBURGlhZ25vc3RpY3M6OndyaXRlSW5mbyhTZXZlcml0eSBzZXZlcml0eSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiByZWFzb24sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0b2tlbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGV4dHJhKQoreworICAg
IFRQcmVmaXhUeXBlIHByZWZpeCA9IEVQcmVmaXhOb25lOworICAgIHN3aXRjaCAoc2V2ZXJpdHkp
CisgICAgeworICAgICAgY2FzZSBQUF9FUlJPUjoKKyAgICAgICAgKyttTnVtRXJyb3JzOworICAg
ICAgICBwcmVmaXggPSBFUHJlZml4RXJyb3I7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBQ
UF9XQVJOSU5HOgorICAgICAgICArK21OdW1XYXJuaW5nczsKKyAgICAgICAgcHJlZml4ID0gRVBy
ZWZpeFdhcm5pbmc7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgVEluZm9TaW5rQmFzZSYg
c2luayA9IG1JbmZvU2luay5pbmZvOworICAgIC8qIFZDKysgZm9ybWF0OiBmaWxlKGxpbmVudW0p
IDogZXJyb3IgIzogJ3Rva2VuJyA6IGV4dHJhaW5mbyAqLworICAgIHNpbmsucHJlZml4KHByZWZp
eCk7CisgICAgc2luay5sb2NhdGlvbihsb2MuZmlsZSwgbG9jLmxpbmUpOworICAgIHNpbmsgPDwg
IiciIDw8IHRva2VuIDw8ICAiJyA6ICIgPDwgcmVhc29uIDw8ICIgIiA8PCBleHRyYSA8PCAiXG4i
OworfQorCit2b2lkIFREaWFnbm9zdGljczo6d3JpdGVEZWJ1Zyhjb25zdCBzdGQ6OnN0cmluZyYg
c3RyKQoreworICAgIG1JbmZvU2luay5kZWJ1ZyA8PCBzdHI7Cit9CisKK3ZvaWQgVERpYWdub3N0
aWNzOjpwcmludChJRCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcDo6U291
cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0
cmluZyYgdGV4dCkKK3sKKyAgICB3cml0ZUluZm8oc2V2ZXJpdHkoaWQpLCBsb2MsIG1lc3NhZ2Uo
aWQpLCB0ZXh0LCAiIik7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlhZ25vc3RpY3MuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
YjcxYmIxMjA0MjI4YTc0NzM3NGEyNmVmZDg5YzdjNjcyYmI1NmI4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlhZ25v
c3RpY3MuaApAQCAtMCwwICsxLDQ0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxF
Ul9ESUFHTk9TVElDU19IXworI2RlZmluZSBDT01QSUxFUl9ESUFHTk9TVElDU19IXworCisjaW5j
bHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpYWdub3N0aWNzQmFzZS5oIgorCitjbGFzcyBU
SW5mb1Npbms7CisKK2NsYXNzIFREaWFnbm9zdGljcyA6IHB1YmxpYyBwcDo6RGlhZ25vc3RpY3MK
K3sKKyAgcHVibGljOgorICAgIFREaWFnbm9zdGljcyhUSW5mb1NpbmsmIGluZm9TaW5rKTsKKyAg
ICB2aXJ0dWFsIH5URGlhZ25vc3RpY3MoKTsKKworICAgIFRJbmZvU2luayYgaW5mb1NpbmsoKSB7
IHJldHVybiBtSW5mb1Npbms7IH0KKworICAgIGludCBudW1FcnJvcnMoKSBjb25zdCB7IHJldHVy
biBtTnVtRXJyb3JzOyB9CisgICAgaW50IG51bVdhcm5pbmdzKCkgY29uc3QgeyByZXR1cm4gbU51
bVdhcm5pbmdzOyB9CisKKyAgICB2b2lkIHdyaXRlSW5mbyhTZXZlcml0eSBzZXZlcml0eSwKKyAg
ICAgICAgICAgICAgICAgICBjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAg
ICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcmVhc29uLAorICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6c3RyaW5nJiB0b2tlbiwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6
OnN0cmluZyYgZXh0cmEpOworCisgICAgdm9pZCB3cml0ZURlYnVnKGNvbnN0IHN0ZDo6c3RyaW5n
JiBzdHIpOworCisgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoSUQgaWQsCisg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdGV4dCk7CisKKyAgcHJpdmF0
ZToKKyAgICBUSW5mb1NpbmsmIG1JbmZvU2luazsKKyAgICBpbnQgbU51bUVycm9yczsKKyAgICBp
bnQgbU51bVdhcm5pbmdzOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9ESUFHTk9TVElDU19I
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvRGlyZWN0aXZlSGFuZGxlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NjJj
OGFlNjI0MDFiZmIzNjllZjBmOGVjZGE4ODVhMmRlNjQ4NWIzCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZl
SGFuZGxlci5jcHAKQEAgLTAsMCArMSwxNjEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmgiCisKKyNpbmNsdWRlIDxzc3Ry
ZWFtPgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9jb21waWxlcmRlYnVnLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5oIgorCitzdGF0aWMgVEJl
aGF2aW9yIGdldEJlaGF2aW9yKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIpCit7CisgICAgc3RhdGlj
IGNvbnN0IHN0ZDo6c3RyaW5nIGtSZXF1aXJlKCJyZXF1aXJlIik7CisgICAgc3RhdGljIGNvbnN0
IHN0ZDo6c3RyaW5nIGtFbmFibGUoImVuYWJsZSIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0
cmluZyBrRGlzYWJsZSgiZGlzYWJsZSIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBr
V2Fybigid2FybiIpOworCisgICAgaWYgKHN0ciA9PSBrUmVxdWlyZSkgcmV0dXJuIEVCaFJlcXVp
cmU7CisgICAgZWxzZSBpZiAoc3RyID09IGtFbmFibGUpIHJldHVybiBFQmhFbmFibGU7CisgICAg
ZWxzZSBpZiAoc3RyID09IGtEaXNhYmxlKSByZXR1cm4gRUJoRGlzYWJsZTsKKyAgICBlbHNlIGlm
IChzdHIgPT0ga1dhcm4pIHJldHVybiBFQmhXYXJuOworICAgIHJldHVybiBFQmhVbmRlZmluZWQ7
Cit9CisKK1REaXJlY3RpdmVIYW5kbGVyOjpURGlyZWN0aXZlSGFuZGxlcihURXh0ZW5zaW9uQmVo
YXZpb3ImIGV4dEJlaGF2aW9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFREaWFnbm9zdGljcyYgZGlhZ25vc3RpY3MpCisgICAgOiBtRXh0ZW5zaW9uQmVoYXZpb3IoZXh0
QmVoYXZpb3IpLAorICAgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQoreworfQorCitURGly
ZWN0aXZlSGFuZGxlcjo6flREaXJlY3RpdmVIYW5kbGVyKCkKK3sKK30KKwordm9pZCBURGlyZWN0
aXZlSGFuZGxlcjo6aGFuZGxlRXJyb3IoY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbXNn
KQoreworICAgIG1EaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpQUF9FUlJP
UiwgbG9jLCBtc2csICIiLCAiIik7Cit9CisKK3ZvaWQgVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRs
ZVByYWdtYShjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpCit7Cisg
ICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtTVERHTCgiU1RER0wiKTsKKyAgICBzdGF0aWMg
Y29uc3Qgc3RkOjpzdHJpbmcga09wdGltaXplKCJvcHRpbWl6ZSIpOworICAgIHN0YXRpYyBjb25z
dCBzdGQ6OnN0cmluZyBrRGVidWcoImRlYnVnIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3Ry
aW5nIGtPbigib24iKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga09mZigib2ZmIik7
CisKKyAgICBib29sIGludmFsaWRWYWx1ZSA9IGZhbHNlOworICAgIGlmIChuYW1lID09IGtTVERH
TCkKKyAgICB7CisgICAgICAgIC8vIFRoZSBTVERHTCBwcmFnbWEgaXMgdXNlZCB0byByZXNlcnZl
IHByYWdtYXMgZm9yIHVzZSBieSBmdXR1cmUKKyAgICAgICAgLy8gcmV2aXNpb25zIG9mIEdMU0wu
IElnbm9yZSBpdC4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBlbHNlIGlmIChuYW1lID09
IGtPcHRpbWl6ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSA9PSBrT24pIG1QcmFnbWEub3B0
aW1pemUgPSB0cnVlOworICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBrT2ZmKSBtUHJhZ21hLm9w
dGltaXplID0gZmFsc2U7CisgICAgICAgIGVsc2UgaW52YWxpZFZhbHVlID0gdHJ1ZTsKKyAgICB9
CisgICAgZWxzZSBpZiAobmFtZSA9PSBrRGVidWcpCisgICAgeworICAgICAgICBpZiAodmFsdWUg
PT0ga09uKSBtUHJhZ21hLmRlYnVnID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0g
a09mZikgbVByYWdtYS5kZWJ1ZyA9IGZhbHNlOworICAgICAgICBlbHNlIGludmFsaWRWYWx1ZSA9
IHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy5yZXBv
cnQocHA6OkRpYWdub3N0aWNzOjpQUF9VTlJFQ09HTklaRURfUFJBR01BLCBsb2MsIG5hbWUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGludmFsaWRWYWx1ZSkKKyAgICAgIG1E
aWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpQUF9FUlJPUiwgbG9jLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBwcmFnbWEgdmFsdWUiLCB2YWx1ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIidvbicgb3IgJ29mZicgZXhwZWN0ZWQiKTsK
K30KKwordm9pZCBURGlyZWN0aXZlSGFuZGxlcjo6aGFuZGxlRXh0ZW5zaW9uKGNvbnN0IHBwOjpT
b3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBiZWhhdmlvcikKK3sKKyAgICBzdGF0aWMg
Y29uc3Qgc3RkOjpzdHJpbmcga0V4dEFsbCgiYWxsIik7CisKKyAgICBUQmVoYXZpb3IgYmVoYXZp
b3JWYWwgPSBnZXRCZWhhdmlvcihiZWhhdmlvcik7CisgICAgaWYgKGJlaGF2aW9yVmFsID09IEVC
aFVuZGVmaW5lZCkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRp
YWdub3N0aWNzOjpQUF9FUlJPUiwgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJiZWhhdmlvciIsIG5hbWUsICJpbnZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAobmFtZSA9PSBrRXh0QWxsKQorICAgIHsKKyAgICAgICAgaWYgKGJlaGF2aW9yVmFs
ID09IEVCaFJlcXVpcmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EaWFnbm9zdGljcy53cml0
ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpQUF9FUlJPUiwgbG9jLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiZXh0ZW5zaW9uIiwgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImNhbm5vdCBoYXZlICdyZXF1aXJlJyBiZWhhdmlvciIpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKGJlaGF2aW9yVmFsID09IEVCaEVuYWJsZSkKKyAgICAgICAg
eworICAgICAgICAgICAgbURpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OlBQ
X0VSUk9SLCBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHRlbnNp
b24iLCBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IGhh
dmUgJ2VuYWJsZScgYmVoYXZpb3IiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAg
IHsKKyAgICAgICAgICAgIGZvciAoVEV4dGVuc2lvbkJlaGF2aW9yOjppdGVyYXRvciBpdGVyID0g
bUV4dGVuc2lvbkJlaGF2aW9yLmJlZ2luKCk7CisgICAgICAgICAgICAgICAgIGl0ZXIgIT0gbUV4
dGVuc2lvbkJlaGF2aW9yLmVuZCgpOyArK2l0ZXIpCisgICAgICAgICAgICAgICAgaXRlci0+c2Vj
b25kID0gYmVoYXZpb3JWYWw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIFRFeHRlbnNpb25CZWhhdmlvcjo6aXRlcmF0b3IgaXRlciA9IG1FeHRlbnNpb25CZWhhdmlv
ci5maW5kKG5hbWUpOworICAgIGlmIChpdGVyICE9IG1FeHRlbnNpb25CZWhhdmlvci5lbmQoKSkK
KyAgICB7CisgICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgcHA6OkRpYWdub3N0aWNzOjpTZXZlcml0eSBzZXZlcml0eSA9IHBw
OjpEaWFnbm9zdGljczo6UFBfRVJST1I7CisgICAgc3dpdGNoIChiZWhhdmlvclZhbCkgeworICAg
ICAgY2FzZSBFQmhSZXF1aXJlOgorICAgICAgICBzZXZlcml0eSA9IHBwOjpEaWFnbm9zdGljczo6
UFBfRVJST1I7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFQmhFbmFibGU6CisgICAgICBj
YXNlIEVCaFdhcm46CisgICAgICBjYXNlIEVCaERpc2FibGU6CisgICAgICAgIHNldmVyaXR5ID0g
cHA6OkRpYWdub3N0aWNzOjpQUF9XQVJOSU5HOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1
bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBt
RGlhZ25vc3RpY3Mud3JpdGVJbmZvKHNldmVyaXR5LCBsb2MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiZXh0ZW5zaW9uIiwgbmFtZSwgImlzIG5vdCBzdXBwb3J0ZWQiKTsKK30KKwordm9p
ZCBURGlyZWN0aXZlSGFuZGxlcjo6aGFuZGxlVmVyc2lvbihjb25zdCBwcDo6U291cmNlTG9jYXRp
b24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZlcnNp
b24pCit7CisgICAgc3RhdGljIGNvbnN0IGludCBrVmVyc2lvbiA9IDEwMDsKKworICAgIGlmICh2
ZXJzaW9uICE9IGtWZXJzaW9uKQorICAgIHsKKyAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3Ry
ZWFtOworICAgICAgICBzdHJlYW0gPDwgdmVyc2lvbjsKKyAgICAgICAgc3RkOjpzdHJpbmcgc3Ry
ID0gc3RyZWFtLnN0cigpOworICAgICAgICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZvKHBwOjpEaWFn
bm9zdGljczo6UFBfRVJST1IsIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
dmVyc2lvbiBudW1iZXIiLCBzdHIsICJub3Qgc3VwcG9ydGVkIik7CisgICAgfQorfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGly
ZWN0aXZlSGFuZGxlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvRGlyZWN0aXZlSGFuZGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmViNWYwNTU0OTQ5ODg5MTVj
MTRjMmM2YmZhY2FiMWFhNGNkY2UzMWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmgKQEAg
LTAsMCArMSw0NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfRElSRUNUSVZF
X0hBTkRMRVJfSF8KKyNkZWZpbmUgQ09NUElMRVJfRElSRUNUSVZFX0hBTkRMRVJfSF8KKworI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRXh0ZW5zaW9uQmVoYXZpb3IuaCIKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1ByYWdtYS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9EaXJlY3RpdmVIYW5kbGVyQmFzZS5oIgorCitjbGFzcyBURGlhZ25vc3RpY3M7CisK
K2NsYXNzIFREaXJlY3RpdmVIYW5kbGVyIDogcHVibGljIHBwOjpEaXJlY3RpdmVIYW5kbGVyCit7
CisgIHB1YmxpYzoKKyAgICBURGlyZWN0aXZlSGFuZGxlcihURXh0ZW5zaW9uQmVoYXZpb3ImIGV4
dEJlaGF2aW9yLAorICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9zdGljcyYgZGlhZ25vc3Rp
Y3MpOworICAgIHZpcnR1YWwgflREaXJlY3RpdmVIYW5kbGVyKCk7CisKKyAgICBjb25zdCBUUHJh
Z21hJiBwcmFnbWEoKSBjb25zdCB7IHJldHVybiBtUHJhZ21hOyB9CisgICAgY29uc3QgVEV4dGVu
c2lvbkJlaGF2aW9yJiBleHRlbnNpb25CZWhhdmlvcigpIGNvbnN0IHsgcmV0dXJuIG1FeHRlbnNp
b25CZWhhdmlvcjsgfQorCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUVycm9yKGNvbnN0IHBwOjpT
b3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz
dGQ6OnN0cmluZyYgbXNnKTsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVQcmFnbWEoY29uc3Qg
cHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXh0ZW5z
aW9uKGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgYmVoYXZpb3IpOworCisgICAgdmlydHVh
bCB2b2lkIGhhbmRsZVZlcnNpb24oY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZlcnNpb24pOworCisgIHByaXZhdGU6Cisg
ICAgVFByYWdtYSBtUHJhZ21hOworICAgIFRFeHRlbnNpb25CZWhhdmlvciYgbUV4dGVuc2lvbkJl
aGF2aW9yOworICAgIFREaWFnbm9zdGljcyYgbURpYWdub3N0aWNzOworfTsKKworI2VuZGlmICAv
LyBDT01QSUxFUl9ESVJFQ1RJVkVfSEFORExFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRXh0ZW5zaW9uQmVoYXZpb3IuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0V4dGVuc2lv
bkJlaGF2aW9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWMxNTk1ZmIyMTIxYThlYTc2YmJhMjI1N2M2ZjM2MzU2
ZWYwMGU5ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL0V4dGVuc2lvbkJlaGF2aW9yLmgKQEAgLTAsMCArMSwzNyBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfRVhURU5TSU9OX0JFSEFWSU9SX0lOQ0xVREVE
XworI2RlZmluZSBfRVhURU5TSU9OX0JFSEFWSU9SX0lOQ0xVREVEXworCisjaW5jbHVkZSA8bWFw
PgorI2luY2x1ZGUgPHN0cmluZz4KKwordHlwZWRlZiBlbnVtCit7CisgICAgRUJoUmVxdWlyZSwK
KyAgICBFQmhFbmFibGUsCisgICAgRUJoV2FybiwKKyAgICBFQmhEaXNhYmxlLAorICAgIEVCaFVu
ZGVmaW5lZAorfSBUQmVoYXZpb3I7CisKK2lubGluZSBjb25zdCBjaGFyKiBnZXRCZWhhdmlvclN0
cmluZyhUQmVoYXZpb3IgYikKK3sKKyAgICBzd2l0Y2goYikKKyAgICB7CisgICAgICBjYXNlIEVC
aFJlcXVpcmU6IHJldHVybiAicmVxdWlyZSI7CisgICAgICBjYXNlIEVCaEVuYWJsZTogcmV0dXJu
ICJlbmFibGUiOworICAgICAgY2FzZSBFQmhXYXJuOiByZXR1cm4gIndhcm4iOworICAgICAgY2Fz
ZSBFQmhEaXNhYmxlOiByZXR1cm4gImRpc2FibGUiOworICAgICAgZGVmYXVsdDogcmV0dXJuIE5V
TEw7CisgICAgfQorfQorCisvLyBNYXBwaW5nIGJldHdlZW4gZXh0ZW5zaW9uIG5hbWUgYW5kIGJl
aGF2aW9yLgordHlwZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgVEJlaGF2aW9yPiBURXh0ZW5z
aW9uQmVoYXZpb3I7CisKKyNlbmRpZiAvLyBfRVhURU5TSU9OX1RBQkxFX0lOQ0xVREVEXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Rm9yTG9vcFVucm9sbC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9Gb3JMb29wVW5yb2xsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OWU2ZjFhNjJiMWI5NTky
NzcwNjA4MDE1NWI0MWY4NjdiZDYzYzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRm9yTG9vcFVucm9sbC5jcHAKQEAg
LTAsMCArMSwyMTUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwuaCIKKworbmFtZXNwYWNlIHsKKworY2xhc3MgSW50ZWdl
ckZvckxvb3BVbnJvbGxNYXJrZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7CitwdWJsaWM6
CisKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCogbm9kZSkK
KyAgICB7CisgICAgICAgIC8vIFRoaXMgaXMgY2FsbGVkIGFmdGVyIFZhbGlkYXRlTGltaXRhdGlv
bnMgcGFzcywgc28gYWxsIHRoZSBBU1NFUlQKKyAgICAgICAgLy8gc2hvdWxkIG5ldmVyIGZhaWwu
CisgICAgICAgIC8vIFNlZSBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvb3BJbml0
KCkuCisgICAgICAgIEFTU0VSVChub2RlKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmdldFR5cGUo
KSA9PSBFTG9vcEZvcik7CisgICAgICAgIEFTU0VSVChub2RlLT5nZXRJbml0KCkpOworICAgICAg
ICBUSW50ZXJtQWdncmVnYXRlKiBkZWNsID0gbm9kZS0+Z2V0SW5pdCgpLT5nZXRBc0FnZ3JlZ2F0
ZSgpOworICAgICAgICBBU1NFUlQoZGVjbCAmJiBkZWNsLT5nZXRPcCgpID09IEVPcERlY2xhcmF0
aW9uKTsKKyAgICAgICAgVEludGVybVNlcXVlbmNlJiBkZWNsU2VxID0gZGVjbC0+Z2V0U2VxdWVu
Y2UoKTsKKyAgICAgICAgQVNTRVJUKGRlY2xTZXEuc2l6ZSgpID09IDEpOworICAgICAgICBUSW50
ZXJtQmluYXJ5KiBkZWNsSW5pdCA9IGRlY2xTZXFbMF0tPmdldEFzQmluYXJ5Tm9kZSgpOworICAg
ICAgICBBU1NFUlQoZGVjbEluaXQgJiYgZGVjbEluaXQtPmdldE9wKCkgPT0gRU9wSW5pdGlhbGl6
ZSk7CisgICAgICAgIEFTU0VSVChkZWNsSW5pdC0+Z2V0TGVmdCgpKTsKKyAgICAgICAgVEludGVy
bVN5bWJvbCogc3ltYm9sID0gZGVjbEluaXQtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7
CisgICAgICAgIEFTU0VSVChzeW1ib2wpOworICAgICAgICBUQmFzaWNUeXBlIHR5cGUgPSBzeW1i
b2wtPmdldEJhc2ljVHlwZSgpOworICAgICAgICBBU1NFUlQodHlwZSA9PSBFYnRJbnQgfHwgdHlw
ZSA9PSBFYnRGbG9hdCk7CisgICAgICAgIGlmICh0eXBlID09IEVidEludCkKKyAgICAgICAgICAg
IG5vZGUtPnNldFVucm9sbEZsYWcodHJ1ZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworfTsKKworfSAgLy8gYW5vbnltb3VzIG5hbWVwc2FjZQorCit2b2lkIEZvckxvb3BVbnJvbGw6
OkZpbGxMb29wSW5kZXhJbmZvKFRJbnRlcm1Mb29wKiBub2RlLCBUTG9vcEluZGV4SW5mbyYgaW5m
bykKK3sKKyAgICBBU1NFUlQobm9kZS0+Z2V0VHlwZSgpID09IEVMb29wRm9yKTsKKyAgICBBU1NF
UlQobm9kZS0+Z2V0VW5yb2xsRmxhZygpKTsKKworICAgIFRJbnRlcm1Ob2RlKiBpbml0ID0gbm9k
ZS0+Z2V0SW5pdCgpOworICAgIEFTU0VSVChpbml0ICE9IE5VTEwpOworICAgIFRJbnRlcm1BZ2dy
ZWdhdGUqIGRlY2wgPSBpbml0LT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAgIEFTU0VSVCgoZGVjbCAh
PSBOVUxMKSAmJiAoZGVjbC0+Z2V0T3AoKSA9PSBFT3BEZWNsYXJhdGlvbikpOworICAgIFRJbnRl
cm1TZXF1ZW5jZSYgZGVjbFNlcSA9IGRlY2wtPmdldFNlcXVlbmNlKCk7CisgICAgQVNTRVJUKGRl
Y2xTZXEuc2l6ZSgpID09IDEpOworICAgIFRJbnRlcm1CaW5hcnkqIGRlY2xJbml0ID0gZGVjbFNl
cVswXS0+Z2V0QXNCaW5hcnlOb2RlKCk7CisgICAgQVNTRVJUKChkZWNsSW5pdCAhPSBOVUxMKSAm
JiAoZGVjbEluaXQtPmdldE9wKCkgPT0gRU9wSW5pdGlhbGl6ZSkpOworICAgIFRJbnRlcm1TeW1i
b2wqIHN5bWJvbCA9IGRlY2xJbml0LT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOworICAg
IEFTU0VSVChzeW1ib2wgIT0gTlVMTCk7CisgICAgQVNTRVJUKHN5bWJvbC0+Z2V0QmFzaWNUeXBl
KCkgPT0gRWJ0SW50KTsKKworICAgIGluZm8uaWQgPSBzeW1ib2wtPmdldElkKCk7CisKKyAgICBB
U1NFUlQoZGVjbEluaXQtPmdldFJpZ2h0KCkgIT0gTlVMTCk7CisgICAgVEludGVybUNvbnN0YW50
VW5pb24qIGluaXROb2RlID0gZGVjbEluaXQtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlv
bigpOworICAgIEFTU0VSVChpbml0Tm9kZSAhPSBOVUxMKTsKKworICAgIGluZm8uaW5pdFZhbHVl
ID0gZXZhbHVhdGVJbnRDb25zdGFudChpbml0Tm9kZSk7CisgICAgaW5mby5jdXJyZW50VmFsdWUg
PSBpbmZvLmluaXRWYWx1ZTsKKworICAgIFRJbnRlcm1Ob2RlKiBjb25kID0gbm9kZS0+Z2V0Q29u
ZGl0aW9uKCk7CisgICAgQVNTRVJUKGNvbmQgIT0gTlVMTCk7CisgICAgVEludGVybUJpbmFyeSog
YmluT3AgPSBjb25kLT5nZXRBc0JpbmFyeU5vZGUoKTsKKyAgICBBU1NFUlQoYmluT3AgIT0gTlVM
TCk7CisgICAgQVNTRVJUKGJpbk9wLT5nZXRSaWdodCgpICE9IE5VTEwpOworICAgIEFTU0VSVChi
aW5PcC0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCkgIT0gTlVMTCk7CisKKyAgICBp
bmZvLmluY3JlbWVudFZhbHVlID0gZ2V0TG9vcEluY3JlbWVudChub2RlKTsKKyAgICBpbmZvLnN0
b3BWYWx1ZSA9IGV2YWx1YXRlSW50Q29uc3RhbnQoCisgICAgICAgIGJpbk9wLT5nZXRSaWdodCgp
LT5nZXRBc0NvbnN0YW50VW5pb24oKSk7CisgICAgaW5mby5vcCA9IGJpbk9wLT5nZXRPcCgpOwor
fQorCit2b2lkIEZvckxvb3BVbnJvbGw6OlN0ZXAoKQoreworICAgIEFTU0VSVChtTG9vcEluZGV4
U3RhY2suc2l6ZSgpID4gMCk7CisgICAgVExvb3BJbmRleEluZm8mIGluZm8gPSBtTG9vcEluZGV4
U3RhY2tbbUxvb3BJbmRleFN0YWNrLnNpemUoKSAtIDFdOworICAgIGluZm8uY3VycmVudFZhbHVl
ICs9IGluZm8uaW5jcmVtZW50VmFsdWU7Cit9CisKK2Jvb2wgRm9yTG9vcFVucm9sbDo6U2F0aXNm
aWVzTG9vcENvbmRpdGlvbigpCit7CisgICAgQVNTRVJUKG1Mb29wSW5kZXhTdGFjay5zaXplKCkg
PiAwKTsKKyAgICBUTG9vcEluZGV4SW5mbyYgaW5mbyA9IG1Mb29wSW5kZXhTdGFja1ttTG9vcElu
ZGV4U3RhY2suc2l6ZSgpIC0gMV07CisgICAgLy8gUmVsYXRpb25hbCBvcGVyYXRvciBpcyBvbmUg
b2Y6ID4gPj0gPCA8PSA9PSBvciAhPS4KKyAgICBzd2l0Y2ggKGluZm8ub3ApIHsKKyAgICAgIGNh
c2UgRU9wRXF1YWw6CisgICAgICAgIHJldHVybiAoaW5mby5jdXJyZW50VmFsdWUgPT0gaW5mby5z
dG9wVmFsdWUpOworICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKKyAgICAgICAgcmV0dXJuIChpbmZv
LmN1cnJlbnRWYWx1ZSAhPSBpbmZvLnN0b3BWYWx1ZSk7CisgICAgICBjYXNlIEVPcExlc3NUaGFu
OgorICAgICAgICByZXR1cm4gKGluZm8uY3VycmVudFZhbHVlIDwgaW5mby5zdG9wVmFsdWUpOwor
ICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjoKKyAgICAgICAgcmV0dXJuIChpbmZvLmN1cnJlbnRW
YWx1ZSA+IGluZm8uc3RvcFZhbHVlKTsKKyAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoKKyAg
ICAgICAgcmV0dXJuIChpbmZvLmN1cnJlbnRWYWx1ZSA8PSBpbmZvLnN0b3BWYWx1ZSk7CisgICAg
ICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6CisgICAgICAgIHJldHVybiAoaW5mby5jdXJyZW50
VmFsdWUgPj0gaW5mby5zdG9wVmFsdWUpOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFD
SEFCTEUoKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEZvckxvb3BVbnJv
bGw6Ok5lZWRzVG9SZXBsYWNlU3ltYm9sV2l0aFZhbHVlKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCkK
K3sKKyAgICBmb3IgKFRWZWN0b3I8VExvb3BJbmRleEluZm8+OjppdGVyYXRvciBpID0gbUxvb3BJ
bmRleFN0YWNrLmJlZ2luKCk7CisgICAgICAgICBpICE9IG1Mb29wSW5kZXhTdGFjay5lbmQoKTsK
KyAgICAgICAgICsraSkgeworICAgICAgICBpZiAoaS0+aWQgPT0gc3ltYm9sLT5nZXRJZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwor
aW50IEZvckxvb3BVbnJvbGw6OkdldExvb3BJbmRleFZhbHVlKFRJbnRlcm1TeW1ib2wqIHN5bWJv
bCkKK3sKKyAgICBmb3IgKFRWZWN0b3I8VExvb3BJbmRleEluZm8+OjppdGVyYXRvciBpID0gbUxv
b3BJbmRleFN0YWNrLmJlZ2luKCk7CisgICAgICAgICBpICE9IG1Mb29wSW5kZXhTdGFjay5lbmQo
KTsKKyAgICAgICAgICsraSkgeworICAgICAgICBpZiAoaS0+aWQgPT0gc3ltYm9sLT5nZXRJZCgp
KQorICAgICAgICAgICAgcmV0dXJuIGktPmN1cnJlbnRWYWx1ZTsKKyAgICB9CisgICAgVU5SRUFD
SEFCTEUoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgRm9yTG9vcFVucm9sbDo6UHVz
aChUTG9vcEluZGV4SW5mbyYgaW5mbykKK3sKKyAgICBtTG9vcEluZGV4U3RhY2sucHVzaF9iYWNr
KGluZm8pOworfQorCit2b2lkIEZvckxvb3BVbnJvbGw6OlBvcCgpCit7CisgICAgbUxvb3BJbmRl
eFN0YWNrLnBvcF9iYWNrKCk7Cit9CisKKy8vIHN0YXRpYwordm9pZCBGb3JMb29wVW5yb2xsOjpN
YXJrRm9yTG9vcHNXaXRoSW50ZWdlckluZGljZXNGb3JVbnJvbGxpbmcoCisgICAgVEludGVybU5v
ZGUqIHJvb3QpCit7CisgICAgQVNTRVJUKHJvb3QpOworCisgICAgSW50ZWdlckZvckxvb3BVbnJv
bGxNYXJrZXIgbWFya2VyOworICAgIHJvb3QtPnRyYXZlcnNlKCZtYXJrZXIpOworfQorCitpbnQg
Rm9yTG9vcFVucm9sbDo6Z2V0TG9vcEluY3JlbWVudChUSW50ZXJtTG9vcCogbm9kZSkKK3sKKyAg
ICBUSW50ZXJtTm9kZSogZXhwciA9IG5vZGUtPmdldEV4cHJlc3Npb24oKTsKKyAgICBBU1NFUlQo
ZXhwciAhPSBOVUxMKTsKKyAgICAvLyBmb3IgZXhwcmVzc2lvbiBoYXMgb25lIG9mIHRoZSBmb2xs
b3dpbmcgZm9ybXM6CisgICAgLy8gICAgIGxvb3BfaW5kZXgrKworICAgIC8vICAgICBsb29wX2lu
ZGV4LS0KKyAgICAvLyAgICAgbG9vcF9pbmRleCArPSBjb25zdGFudF9leHByZXNzaW9uCisgICAg
Ly8gICAgIGxvb3BfaW5kZXggLT0gY29uc3RhbnRfZXhwcmVzc2lvbgorICAgIC8vICAgICArK2xv
b3BfaW5kZXgKKyAgICAvLyAgICAgLS1sb29wX2luZGV4CisgICAgLy8gVGhlIGxhc3QgdHdvIGZv
cm1zIGFyZSBub3Qgc3BlY2lmaWVkIGluIHRoZSBzcGVjLCBidXQgSSBhbSBhc3N1bWluZworICAg
IC8vIGl0cyBhbiBvdmVyc2lnaHQuCisgICAgVEludGVybVVuYXJ5KiB1bk9wID0gZXhwci0+Z2V0
QXNVbmFyeU5vZGUoKTsKKyAgICBUSW50ZXJtQmluYXJ5KiBiaW5PcCA9IHVuT3AgPyBOVUxMIDog
ZXhwci0+Z2V0QXNCaW5hcnlOb2RlKCk7CisKKyAgICBUT3BlcmF0b3Igb3AgPSBFT3BOdWxsOwor
ICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiBpbmNyZW1lbnROb2RlID0gTlVMTDsKKyAgICBpZiAo
dW5PcCAhPSBOVUxMKSB7CisgICAgICAgIG9wID0gdW5PcC0+Z2V0T3AoKTsKKyAgICB9IGVsc2Ug
aWYgKGJpbk9wICE9IE5VTEwpIHsKKyAgICAgICAgb3AgPSBiaW5PcC0+Z2V0T3AoKTsKKyAgICAg
ICAgQVNTRVJUKGJpbk9wLT5nZXRSaWdodCgpICE9IE5VTEwpOworICAgICAgICBpbmNyZW1lbnRO
b2RlID0gYmluT3AtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAgICAgICBB
U1NFUlQoaW5jcmVtZW50Tm9kZSAhPSBOVUxMKTsKKyAgICB9CisKKyAgICBpbnQgaW5jcmVtZW50
ID0gMDsKKyAgICAvLyBUaGUgb3BlcmF0b3IgaXMgb25lIG9mOiArKyAtLSArPSAtPS4KKyAgICBz
d2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDoKKyAgICAgICAgY2Fz
ZSBFT3BQcmVJbmNyZW1lbnQ6CisgICAgICAgICAgICBBU1NFUlQoKHVuT3AgIT0gTlVMTCkgJiYg
KGJpbk9wID09IE5VTEwpKTsKKyAgICAgICAgICAgIGluY3JlbWVudCA9IDE7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OgorICAgICAgICBjYXNlIEVP
cFByZURlY3JlbWVudDoKKyAgICAgICAgICAgIEFTU0VSVCgodW5PcCAhPSBOVUxMKSAmJiAoYmlu
T3AgPT0gTlVMTCkpOworICAgICAgICAgICAgaW5jcmVtZW50ID0gLTE7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BBZGRBc3NpZ246CisgICAgICAgICAgICBBU1NFUlQoKHVu
T3AgPT0gTlVMTCkgJiYgKGJpbk9wICE9IE5VTEwpKTsKKyAgICAgICAgICAgIGluY3JlbWVudCA9
IGV2YWx1YXRlSW50Q29uc3RhbnQoaW5jcmVtZW50Tm9kZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246CisgICAgICAgICAgICBBU1NFUlQoKHVuT3AgPT0g
TlVMTCkgJiYgKGJpbk9wICE9IE5VTEwpKTsKKyAgICAgICAgICAgIGluY3JlbWVudCA9IC0gZXZh
bHVhdGVJbnRDb25zdGFudChpbmNyZW1lbnROb2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gaW5jcmVtZW50OworfQorCitpbnQgRm9yTG9vcFVucm9sbDo6ZXZhbHVhdGVJbnRDb25z
dGFudChUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSkKK3sKKyAgICBBU1NFUlQoKG5vZGUgIT0g
TlVMTCkgJiYgKG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCkgIT0gTlVMTCkpOworICAgIHJl
dHVybiBub2RlLT5nZXRJQ29uc3QoMCk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hZmQ3MGQxZmQyNWM5OTU0NjgwY2Q0ZGFhMDI4NWMwMDhkZWNiMDZkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvRm9yTG9vcFVucm9sbC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaWZuZGVmIENPTVBJTEVSX0ZPUkxPT1BVTlJPTExfSF8KKyNkZWZpbmUgQ09NUElMRVJfRk9S
TE9PUFVOUk9MTF9IXworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlh
dGUuaCIKKworc3RydWN0IFRMb29wSW5kZXhJbmZvIHsKKyAgICBpbnQgaWQ7CisgICAgaW50IGlu
aXRWYWx1ZTsKKyAgICBpbnQgc3RvcFZhbHVlOworICAgIGludCBpbmNyZW1lbnRWYWx1ZTsKKyAg
ICBUT3BlcmF0b3Igb3A7CisgICAgaW50IGN1cnJlbnRWYWx1ZTsKK307CisKK2NsYXNzIEZvckxv
b3BVbnJvbGwgeworcHVibGljOgorICAgIEZvckxvb3BVbnJvbGwoKSB7IH0KKworICAgIHZvaWQg
RmlsbExvb3BJbmRleEluZm8oVEludGVybUxvb3AqIG5vZGUsIFRMb29wSW5kZXhJbmZvJiBpbmZv
KTsKKworICAgIC8vIFVwZGF0ZSB0aGUgaW5mby5jdXJyZW50VmFsdWUgZm9yIHRoZSBuZXh0IGxv
b3AgaXRlcmF0aW9uLgorICAgIHZvaWQgU3RlcCgpOworCisgICAgLy8gUmV0dXJuIGZhbHNlIGlm
IGxvb3AgY29uZGl0aW9uIGlzIG5vIGxvbmdlciBzYXRpc2ZpZWQuCisgICAgYm9vbCBTYXRpc2Zp
ZXNMb29wQ29uZGl0aW9uKCk7CisKKyAgICAvLyBDaGVjayBpZiB0aGUgc3ltYm9sIGlzIHRoZSBp
bmRleCBvZiBhIGxvb3AgdGhhdCdzIHVucm9sbGVkLgorICAgIGJvb2wgTmVlZHNUb1JlcGxhY2VT
eW1ib2xXaXRoVmFsdWUoVEludGVybVN5bWJvbCogc3ltYm9sKTsKKworICAgIC8vIFJldHVybiB0
aGUgY3VycmVudCB2YWx1ZSBvZiBhIGdpdmVuIGxvb3AgaW5kZXggc3ltYm9sLgorICAgIGludCBH
ZXRMb29wSW5kZXhWYWx1ZShUSW50ZXJtU3ltYm9sKiBzeW1ib2wpOworCisgICAgdm9pZCBQdXNo
KFRMb29wSW5kZXhJbmZvJiBpbmZvKTsKKyAgICB2b2lkIFBvcCgpOworCisgICAgc3RhdGljIHZv
aWQgTWFya0Zvckxvb3BzV2l0aEludGVnZXJJbmRpY2VzRm9yVW5yb2xsaW5nKFRJbnRlcm1Ob2Rl
KiByb290KTsKKworcHJpdmF0ZToKKyAgICBpbnQgZ2V0TG9vcEluY3JlbWVudChUSW50ZXJtTG9v
cCogbm9kZSk7CisKKyAgICBpbnQgZXZhbHVhdGVJbnRDb25zdGFudChUSW50ZXJtQ29uc3RhbnRV
bmlvbiogbm9kZSk7CisKKyAgICBUVmVjdG9yPFRMb29wSW5kZXhJbmZvPiBtTG9vcEluZGV4U3Rh
Y2s7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL0hhc2hOYW1lcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSGFzaE5hbWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzUxMjY1
Yjc1OTM1NzdlY2E4ZWI4YjYzOTFmOGViMDY1ODVjMTdhOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0hhc2hOYW1lcy5o
CkBAIC0wLDAgKzEsMTkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJf
SEFTSF9OQU1FU19IXworI2RlZmluZSBDT01QSUxFUl9IQVNIX05BTUVTX0hfCisKKyNpbmNsdWRl
IDxtYXA+CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgor
I2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisjZGVmaW5lIEhBU0hFRF9OQU1FX1BS
RUZJWCAid2ViZ2xfIgorCit0eXBlZGVmIHN0ZDo6bWFwPFRQZXJzaXN0U3RyaW5nLCBUUGVyc2lz
dFN0cmluZz4gTmFtZU1hcDsKKworI2VuZGlmICAvLyBDT01QSUxFUl9IQVNIX05BTUVTX0hfCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9JbmZvU2luay5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9JbmZvU2luay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Q1OTY1OGZmNzZjOTU3NzhmNTBkNDE5
ZTlhNzQzZTYzMjJjOTJhNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luZm9TaW5rLmNwcApAQCAtMCwwICsxLDU0IEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZv
U2luay5oIgorCit2b2lkIFRJbmZvU2lua0Jhc2U6OnByZWZpeChUUHJlZml4VHlwZSBwKSB7Cisg
ICAgc3dpdGNoKHApIHsKKyAgICAgICAgY2FzZSBFUHJlZml4Tm9uZToKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEVQcmVmaXhXYXJuaW5nOgorICAgICAgICAgICAgc2luay5hcHBl
bmQoIldBUk5JTkc6ICIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVByZWZp
eEVycm9yOgorICAgICAgICAgICAgc2luay5hcHBlbmQoIkVSUk9SOiAiKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEVQcmVmaXhJbnRlcm5hbEVycm9yOgorICAgICAgICAgICAg
c2luay5hcHBlbmQoIklOVEVSTkFMIEVSUk9SOiAiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEVQcmVmaXhVbmltcGxlbWVudGVkOgorICAgICAgICAgICAgc2luay5hcHBlbmQo
IlVOSU1QTEVNRU5URUQ6ICIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVBy
ZWZpeE5vdGU6CisgICAgICAgICAgICBzaW5rLmFwcGVuZCgiTk9URTogIik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNpbmsuYXBwZW5kKCJVTktP
V04gRVJST1I6ICIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIFRJbmZv
U2lua0Jhc2U6OmxvY2F0aW9uKGludCBmaWxlLCBpbnQgbGluZSkgeworICAgIFRQZXJzaXN0U3Ry
aW5nU3RyZWFtIHN0cmVhbTsKKyAgICBpZiAobGluZSkKKyAgICAgICAgc3RyZWFtIDw8IGZpbGUg
PDwgIjoiIDw8IGxpbmU7CisgICAgZWxzZQorICAgICAgICBzdHJlYW0gPDwgZmlsZSA8PCAiOj8g
IjsKKyAgICBzdHJlYW0gPDwgIjogIjsKKworICAgIHNpbmsuYXBwZW5kKHN0cmVhbS5zdHIoKSk7
Cit9CisKK3ZvaWQgVEluZm9TaW5rQmFzZTo6bG9jYXRpb24oY29uc3QgVFNvdXJjZUxvYyYgbG9j
KSB7CisgICAgbG9jYXRpb24obG9jLmZpcnN0X2ZpbGUsIGxvYy5maXJzdF9saW5lKTsKK30KKwor
dm9pZCBUSW5mb1NpbmtCYXNlOjptZXNzYWdlKFRQcmVmaXhUeXBlIHAsIGNvbnN0IFRTb3VyY2VM
b2MmIGxvYywgY29uc3QgY2hhciogbSkgeworICAgIHByZWZpeChwKTsKKyAgICBsb2NhdGlvbihs
b2MpOworICAgIHNpbmsuYXBwZW5kKG0pOworICAgIHNpbmsuYXBwZW5kKCJcbiIpOworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
SW5mb1NpbmsuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL0luZm9TaW5rLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjk4YThiNDU0YjNjZmE5ZDRlZDJkMDBiODYxNjdl
OGMxMzJkMWZmZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL0luZm9TaW5rLmgKQEAgLTAsMCArMSwxMTYgQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX0lORk9TSU5LX0lOQ0xVREVEXworI2RlZmluZSBfSU5G
T1NJTktfSU5DTFVERURfCisKKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21tb24uaCIKKworLy8gUmV0dXJucyB0
aGUgZnJhY3Rpb25hbCBwYXJ0IG9mIHRoZSBnaXZlbiBmbG9hdGluZy1wb2ludCBudW1iZXIuCitp
bmxpbmUgZmxvYXQgZnJhY3Rpb25hbFBhcnQoZmxvYXQgZikgeworICBmbG9hdCBpbnRQYXJ0ID0g
MC4wZjsKKyAgcmV0dXJuIG1vZGZmKGYsICZpbnRQYXJ0KTsKK30KKworLy8KKy8vIFRQcmVmaXhU
eXBlIGlzIHVzZWQgdG8gY2VudHJhbGl6ZSBob3cgaW5mbyBsb2cgbWVzc2FnZXMgc3RhcnQuCisv
LyBTZWUgYmVsb3cuCisvLworZW51bSBUUHJlZml4VHlwZSB7CisgICAgRVByZWZpeE5vbmUsCisg
ICAgRVByZWZpeFdhcm5pbmcsCisgICAgRVByZWZpeEVycm9yLAorICAgIEVQcmVmaXhJbnRlcm5h
bEVycm9yLAorICAgIEVQcmVmaXhVbmltcGxlbWVudGVkLAorICAgIEVQcmVmaXhOb3RlCit9Owor
CisvLworLy8gRW5jYXBzdWxhdGUgaW5mbyBsb2dzIGZvciBhbGwgb2JqZWN0cyB0aGF0IGhhdmUg
dGhlbS4KKy8vCisvLyBUaGUgbWV0aG9kcyBhcmUgYSBnZW5lcmFsIHNldCBvZiB0b29scyBmb3Ig
Z2V0dGluZyBhIHZhcmlldHkgb2YKKy8vIG1lc3NhZ2VzIGFuZCB0eXBlcyBpbnNlcnRlZCBpbnRv
IHRoZSBsb2cuCisvLworY2xhc3MgVEluZm9TaW5rQmFzZSB7CitwdWJsaWM6CisgICAgVEluZm9T
aW5rQmFzZSgpIHt9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBUSW5mb1NpbmtC
YXNlJiBvcGVyYXRvcjw8KGNvbnN0IFQmIHQpIHsKKyAgICAgICAgVFBlcnNpc3RTdHJpbmdTdHJl
YW0gc3RyZWFtOworICAgICAgICBzdHJlYW0gPDwgdDsKKyAgICAgICAgc2luay5hcHBlbmQoc3Ry
ZWFtLnN0cigpKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICAvLyBPdmVycmlk
ZSA8PCBvcGVyYXRvciBmb3Igc3BlY2lmaWMgdHlwZXMuIEl0IGlzIGZhc3RlciB0byBhcHBlbmQg
c3RyaW5ncworICAgIC8vIGFuZCBjaGFyYWN0ZXJzIGRpcmVjdGx5IHRvIHRoZSBzaW5rLgorICAg
IFRJbmZvU2lua0Jhc2UmIG9wZXJhdG9yPDwoY2hhciBjKSB7CisgICAgICAgIHNpbmsuYXBwZW5k
KDEsIGMpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIFRJbmZvU2lua0Jhc2Um
IG9wZXJhdG9yPDwoY29uc3QgY2hhciogc3RyKSB7CisgICAgICAgIHNpbmsuYXBwZW5kKHN0cik7
CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgVEluZm9TaW5rQmFzZSYgb3BlcmF0
b3I8PChjb25zdCBUUGVyc2lzdFN0cmluZyYgc3RyKSB7CisgICAgICAgIHNpbmsuYXBwZW5kKHN0
cik7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgVEluZm9TaW5rQmFzZSYgb3Bl
cmF0b3I8PChjb25zdCBUU3RyaW5nJiBzdHIpIHsKKyAgICAgICAgc2luay5hcHBlbmQoc3RyLmNf
c3RyKCkpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIC8vIE1ha2Ugc3VyZSBm
bG9hdHMgYXJlIHdyaXR0ZW4gd2l0aCBjb3JyZWN0IHByZWNpc2lvbi4KKyAgICBUSW5mb1NpbmtC
YXNlJiBvcGVyYXRvcjw8KGZsb2F0IGYpIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYXQg
bGVhc3Qgb25lIGRlY2ltYWwgcG9pbnQgaXMgd3JpdHRlbi4gSWYgYSBudW1iZXIKKyAgICAgICAg
Ly8gZG9lcyBub3QgaGF2ZSBhIGZyYWN0aW9uYWwgcGFydCwgdGhlIGRlZmF1bHQgcHJlY2lzaW9u
IGZvcm1hdCBkb2VzCisgICAgICAgIC8vIG5vdCB3cml0ZSB0aGUgZGVjaW1hbCBwb3J0aW9uIHdo
aWNoIGdldHMgaW50ZXJwcmV0ZWQgYXMgaW50ZWdlciBieQorICAgICAgICAvLyB0aGUgY29tcGls
ZXIuCisgICAgICAgIFRQZXJzaXN0U3RyaW5nU3RyZWFtIHN0cmVhbTsKKyAgICAgICAgaWYgKGZy
YWN0aW9uYWxQYXJ0KGYpID09IDAuMGYpIHsKKyAgICAgICAgICAgIHN0cmVhbS5wcmVjaXNpb24o
MSk7CisgICAgICAgICAgICBzdHJlYW0gPDwgc3RkOjpzaG93cG9pbnQgPDwgc3RkOjpmaXhlZCA8
PCBmOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RyZWFtLnVuc2V0ZihzdGQ6Omlv
czo6Zml4ZWQpOworICAgICAgICAgICAgc3RyZWFtLnVuc2V0ZihzdGQ6Omlvczo6c2NpZW50aWZp
Yyk7CisgICAgICAgICAgICBzdHJlYW0ucHJlY2lzaW9uKDgpOworICAgICAgICAgICAgc3RyZWFt
IDw8IGY7CisgICAgICAgIH0KKyAgICAgICAgc2luay5hcHBlbmQoc3RyZWFtLnN0cigpKTsKKyAg
ICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICAvLyBXcml0ZSBib29sZWFuIHZhbHVlcyBh
cyB0aGVpciBuYW1lcyBpbnN0ZWFkIG9mIGludGVncmFsIHZhbHVlLgorICAgIFRJbmZvU2lua0Jh
c2UmIG9wZXJhdG9yPDwoYm9vbCBiKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIHN0ciA9IGIgPyAi
dHJ1ZSIgOiAiZmFsc2UiOworICAgICAgICBzaW5rLmFwcGVuZChzdHIpOworICAgICAgICByZXR1
cm4gKnRoaXM7CisgICAgfQorCisgICAgdm9pZCBlcmFzZSgpIHsgc2luay5jbGVhcigpOyB9Cisg
ICAgaW50IHNpemUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHNpbmsuc2l6ZSgpKTsgfQor
CisgICAgY29uc3QgVFBlcnNpc3RTdHJpbmcmIHN0cigpIGNvbnN0IHsgcmV0dXJuIHNpbms7IH0K
KyAgICBjb25zdCBjaGFyKiBjX3N0cigpIGNvbnN0IHsgcmV0dXJuIHNpbmsuY19zdHIoKTsgfQor
CisgICAgdm9pZCBwcmVmaXgoVFByZWZpeFR5cGUgcCk7CisgICAgdm9pZCBsb2NhdGlvbihpbnQg
ZmlsZSwgaW50IGxpbmUpOworICAgIHZvaWQgbG9jYXRpb24oY29uc3QgVFNvdXJjZUxvYyYgbG9j
KTsKKyAgICB2b2lkIG1lc3NhZ2UoVFByZWZpeFR5cGUgcCwgY29uc3QgVFNvdXJjZUxvYyYgbG9j
LCBjb25zdCBjaGFyKiBtKTsKKworcHJpdmF0ZToKKyAgICBUUGVyc2lzdFN0cmluZyBzaW5rOwor
fTsKKworY2xhc3MgVEluZm9TaW5rIHsKK3B1YmxpYzoKKyAgICBUSW5mb1NpbmtCYXNlIGluZm87
CisgICAgVEluZm9TaW5rQmFzZSBkZWJ1ZzsKKyAgICBUSW5mb1NpbmtCYXNlIG9iajsKK307CisK
KyNlbmRpZiAvLyBfSU5GT1NJTktfSU5DTFVERURfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemUuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmRiNzI4YjIxMjkzNzE2NzAxOTdkZjFkYzhkYWMyOTg0ZWU5YjI3YzgKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9Jbml0aWFsaXplLmNwcApAQCAtMCwwICsxLDU2NCBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworLy8KKy8vIENyZWF0ZSBzdHJpbmdzIHRoYXQgZGVjbGFyZSBidWlsdC1pbiBkZWZpbml0
aW9ucywgYWRkIGJ1aWx0LWlucyB0aGF0CisvLyBjYW5ub3QgYmUgZXhwcmVzc2VkIGluIHRoZSBm
aWxlcywgYW5kIGVzdGFibGlzaCBtYXBwaW5ncyBiZXR3ZWVuIAorLy8gYnVpbHQtaW4gZnVuY3Rp
b25zIGFuZCBvcGVyYXRvcnMuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9J
bml0aWFsaXplLmgiCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0
ZS5oIgorCit2b2lkIEluc2VydEJ1aWx0SW5GdW5jdGlvbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNo
U2hhZGVyU3BlYyBzcGVjLCBjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMgJnJlc291cmNlcywgVFN5
bWJvbFRhYmxlICZzeW1ib2xUYWJsZSkKK3sKKyAgICBUVHlwZSAqZmxvYXQxID0gbmV3IFRUeXBl
KEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMSk7CisgICAgVFR5cGUgKmZsb2F0
MiA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDIpOworICAg
IFRUeXBlICpmbG9hdDMgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxR2xv
YmFsLCAzKTsKKyAgICBUVHlwZSAqZmxvYXQ0ID0gbmV3IFRUeXBlKEVidEZsb2F0LCBFYnBVbmRl
ZmluZWQsIEV2cUdsb2JhbCwgNCk7CisKKyAgICBUVHlwZSAqaW50MiA9IG5ldyBUVHlwZShFYnRJ
bnQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAyKTsKKyAgICBUVHlwZSAqaW50MyA9IG5ldyBU
VHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAzKTsKKyAgICBUVHlwZSAqaW50
NCA9IG5ldyBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCA0KTsKKworICAg
IC8vCisgICAgLy8gQW5nbGUgYW5kIFRyaWdvbm9tZXRyaWMgRnVuY3Rpb25zLgorICAgIC8vCisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJyYWRpYW5zIiwgZmxvYXQxKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInJhZGlhbnMiLCBmbG9hdDIp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAicmFkaWFucyIsIGZsb2F0
Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJyYWRpYW5zIiwgZmxv
YXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZGVncmVlcyIs
IGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJkZWdyZWVz
IiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImRlZ3Jl
ZXMiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZGVn
cmVlcyIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwg
InNpbiIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJz
aW4iLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAic2lu
IiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInNpbiIs
IGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImNvcyIs
IGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJjb3MiLCBm
bG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiY29zIiwgZmxv
YXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImNvcyIsIGZsb2F0
NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInRhbiIsIGZsb2F0
MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJ0YW4iLCBmbG9hdDIp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAidGFuIiwgZmxvYXQzKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRhbiIsIGZsb2F0NCk7CisK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImFzaW4iLCBmbG9hdDEpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiYXNpbiIsIGZsb2F0Mik7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJhc2luIiwgZmxvYXQzKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImFzaW4iLCBmbG9hdDQpOworCisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJhY29zIiwgZmxvYXQxKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImFjb3MiLCBmbG9hdDIpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiYWNvcyIsIGZsb2F0Myk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJhY29zIiwgZmxvYXQ0KTsKKworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiYXRhbiIsIGZsb2F0MSwgZmxvYXQx
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImF0YW4iLCBmbG9hdDIs
IGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJhdGFuIiwg
ZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAi
YXRhbiIsIGZsb2F0NCwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQxLCAiYXRhbiIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDIsICJhdGFuIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MywgImF0YW4iLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQ0LCAiYXRhbiIsIGZsb2F0NCk7CisKKyAgICAvLworICAgIC8vIEV4cG9uZW50aWFsIEZ1bmN0
aW9ucy4KKyAgICAvLworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAicG93
IiwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQy
LCAicG93IiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQzLCAicG93IiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQ0LCAicG93IiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDEsICJleHAiLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQyLCAiZXhwIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MywgImV4cCIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDQsICJleHAiLCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDEsICJsb2ciLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQyLCAibG9nIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MywgImxvZyIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDQsICJsb2ciLCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDEsICJleHAyIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MiwgImV4cDIiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQzLCAiZXhwMiIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDQsICJleHAyIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQxLCAibG9nMiIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDIsICJsb2cyIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MywgImxvZzIiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQ0LCAibG9nMiIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MSwgInNxcnQiLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQyLCAic3FydCIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDMsICJzcXJ0IiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
NCwgInNxcnQiLCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDEsICJpbnZlcnNlc3FydCIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDIsICJpbnZlcnNlc3FydCIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDMsICJpbnZlcnNlc3FydCIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDQsICJpbnZlcnNlc3FydCIsIGZsb2F0NCk7CisKKyAgICAvLwor
ICAgIC8vIENvbW1vbiBGdW5jdGlvbnMuCisgICAgLy8KKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MSwgImFicyIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDIsICJhYnMiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQzLCAiYWJzIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0NCwgImFicyIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MSwgInNpZ24iLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQyLCAic2lnbiIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDMsICJzaWduIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0NCwgInNpZ24iLCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDEsICJmbG9vciIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDIsICJmbG9vciIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDMsICJmbG9vciIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDQsICJmbG9vciIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MSwgImNlaWwiLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQyLCAiY2VpbCIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDMsICJjZWlsIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0NCwgImNlaWwiLCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDEsICJmcmFjdCIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDIsICJmcmFjdCIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDMsICJmcmFjdCIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDQsICJmcmFjdCIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MSwgIm1vZCIsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MiwgIm1vZCIsIGZsb2F0MiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MywgIm1vZCIsIGZsb2F0MywgZmxvYXQxKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1vZCIsIGZsb2F0NCwgZmxvYXQxKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgIm1vZCIsIGZsb2F0MiwgZmxvYXQyKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgIm1vZCIsIGZsb2F0MywgZmxv
YXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1vZCIsIGZsb2F0
NCwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibWlu
IiwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQy
LCAibWluIiwgZmxvYXQyLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQzLCAibWluIiwgZmxvYXQzLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQ0LCAibWluIiwgZmxvYXQ0LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQyLCAibWluIiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAibWluIiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibWluIiwgZmxvYXQ0LCBmbG9hdDQpOwor
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJtYXgiLCBmbG9hdDEsIGZs
b2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJtYXgiLCBmbG9h
dDIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtYXgi
LCBmbG9hdDMsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQs
ICJtYXgiLCBmbG9hdDQsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDIsICJtYXgiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDMsICJtYXgiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDQsICJtYXgiLCBmbG9hdDQsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImNsYW1wIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0
MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJjbGFtcCIsIGZsb2F0
MiwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQz
LCAiY2xhbXAiLCBmbG9hdDMsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0NCwgImNsYW1wIiwgZmxvYXQ0LCBmbG9hdDEsIGZsb2F0MSk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJjbGFtcCIsIGZsb2F0MiwgZmxvYXQy
LCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiY2xhbXAi
LCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0NCwgImNsYW1wIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgIm1peCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibWl4IiwgZmxvYXQyLCBm
bG9hdDIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJt
aXgiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0NCwgIm1peCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDEpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibWl4IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtaXgiLCBmbG9hdDMsIGZs
b2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1p
eCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDEsICJzdGVwIiwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQyLCAic3RlcCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInN0ZXAiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJzdGVwIiwgZmxvYXQ0LCBmbG9hdDQp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic3RlcCIsIGZsb2F0MSwg
ZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInN0ZXAiLCBm
bG9hdDEsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJz
dGVwIiwgZmxvYXQxLCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDEsICJzbW9vdGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJzbW9vdGhzdGVwIiwgZmxvYXQyLCBmbG9hdDIs
IGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzbW9vdGhz
dGVwIiwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDQsICJzbW9vdGhzdGVwIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJzbW9vdGhzdGVwIiwgZmxvYXQxLCBm
bG9hdDEsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJz
bW9vdGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDQsICJzbW9vdGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0NCk7
CisKKyAgICAvLworICAgIC8vIEdlb21ldHJpYyBGdW5jdGlvbnMuCisgICAgLy8KKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0MSk7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJsZW5ndGgiLCBmbG9hdDIpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibGVuZ3RoIiwgZmxvYXQzKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0NCk7CisKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRpc3RhbmNlIiwgZmxvYXQxLCBm
bG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZGlzdGFuY2Ui
LCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEs
ICJkaXN0YW5jZSIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MSwgImRpc3RhbmNlIiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkb3QiLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkb3QiLCBmbG9hdDIsIGZsb2F0Mik7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkb3QiLCBmbG9hdDMsIGZsb2F0
Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkb3QiLCBmbG9hdDQs
IGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImNyb3Nz
IiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQx
LCAibm9ybWFsaXplIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MiwgIm5vcm1hbGl6ZSIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDMsICJub3JtYWxpemUiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQ0LCAibm9ybWFsaXplIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQxLCAiZmFjZWZvcndhcmQiLCBmbG9hdDEsIGZsb2F0MSwgZmxvYXQx
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImZhY2Vmb3J3YXJkIiwg
ZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDMsICJmYWNlZm9yd2FyZCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZmFjZWZvcndhcmQiLCBmbG9hdDQsIGZsb2F0
NCwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAicmVm
bGVjdCIsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MiwgInJlZmxlY3QiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDMsICJyZWZsZWN0IiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAicmVmbGVjdCIsIGZsb2F0NCwgZmxvYXQ0KTsKKwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAicmVmcmFjdCIsIGZsb2F0MSwg
ZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAi
cmVmcmFjdCIsIGZsb2F0MiwgZmxvYXQyLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQzLCAicmVmcmFjdCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDEpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAicmVmcmFjdCIsIGZsb2F0NCwgZmxv
YXQ0LCBmbG9hdDEpOworCisgICAgVFR5cGUgKm1hdDIgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIEVi
cFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAyLCB0cnVlKTsKKyAgICBUVHlwZSAqbWF0MyA9IG5ldyBU
VHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDMsIHRydWUpOworICAgIFRU
eXBlICptYXQ0ID0gbmV3IFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwg
NCwgdHJ1ZSk7CisKKyAgICAvLworICAgIC8vIE1hdHJpeCBGdW5jdGlvbnMuCisgICAgLy8KKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKG1hdDIsICJtYXRyaXhDb21wTXVsdCIsIG1hdDIs
IG1hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4obWF0MywgIm1hdHJpeENvbXBN
dWx0IiwgbWF0MywgbWF0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihtYXQ0LCAi
bWF0cml4Q29tcE11bHQiLCBtYXQ0LCBtYXQ0KTsKKworICAgIFRUeXBlICpib29sMSA9IG5ldyBU
VHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMSk7CisgICAgVFR5cGUgKmJv
b2wyID0gbmV3IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAyKTsKKyAg
ICBUVHlwZSAqYm9vbDMgPSBuZXcgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9i
YWwsIDMpOworICAgIFRUeXBlICpib29sNCA9IG5ldyBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmlu
ZWQsIEV2cUdsb2JhbCwgNCk7CisKKyAgICAvLworICAgIC8vIFZlY3RvciByZWxhdGlvbmFsIGZ1
bmN0aW9ucy4KKyAgICAvLworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJs
ZXNzVGhhbiIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGJvb2wzLCAibGVzc1RoYW4iLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihib29sNCwgImxlc3NUaGFuIiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImxlc3NUaGFuIiwgaW50MiwgaW50Mik7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImxlc3NUaGFuIiwgaW50MywgaW50
Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImxlc3NUaGFuIiwgaW50
NCwgaW50NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAibGVzc1Ro
YW5FcXVhbCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGJvb2wzLCAibGVzc1RoYW5FcXVhbCIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAibGVzc1RoYW5FcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsK
KworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJsZXNzVGhhbkVxdWFsIiwg
aW50MiwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImxlc3NU
aGFuRXF1YWwiLCBpbnQzLCBpbnQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJv
b2w0LCAibGVzc1RoYW5FcXVhbCIsIGludDQsIGludDQpOworCisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihib29sMiwgImdyZWF0ZXJUaGFuIiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJncmVhdGVyVGhhbiIsIGZsb2F0MywgZmxv
YXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAiZ3JlYXRlclRoYW4i
LCBmbG9hdDQsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wy
LCAiZ3JlYXRlclRoYW4iLCBpbnQyLCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGJvb2wzLCAiZ3JlYXRlclRoYW4iLCBpbnQzLCBpbnQzKTsKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGJvb2w0LCAiZ3JlYXRlclRoYW4iLCBpbnQ0LCBpbnQ0KTsKKworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJncmVhdGVyVGhhbkVxdWFsIiwgZmxvYXQy
LCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJncmVhdGVy
VGhhbkVxdWFsIiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oYm9vbDQsICJncmVhdGVyVGhhbkVxdWFsIiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImdyZWF0ZXJUaGFuRXF1YWwiLCBpbnQyLCBp
bnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZ3JlYXRlclRoYW5F
cXVhbCIsIGludDMsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQs
ICJncmVhdGVyVGhhbkVxdWFsIiwgaW50NCwgaW50NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGJvb2wyLCAiZXF1YWwiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihib29sMywgImVxdWFsIiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJlcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsK
KworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJlcXVhbCIsIGludDIsIGlu
dDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJlcXVhbCIsIGludDMs
IGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJlcXVhbCIsIGlu
dDQsIGludDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImVxdWFs
IiwgYm9vbDIsIGJvb2wyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAi
ZXF1YWwiLCBib29sMywgYm9vbDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9v
bDQsICJlcXVhbCIsIGJvb2w0LCBib29sNCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGJvb2wyLCAibm90RXF1YWwiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihib29sMywgIm5vdEVxdWFsIiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJub3RFcXVhbCIsIGZsb2F0NCwgZmxvYXQ0
KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJub3RFcXVhbCIsIGlu
dDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJub3RFcXVh
bCIsIGludDMsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJu
b3RFcXVhbCIsIGludDQsIGludDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihi
b29sMiwgIm5vdEVxdWFsIiwgYm9vbDIsIGJvb2wyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGJvb2wzLCAibm90RXF1YWwiLCBib29sMywgYm9vbDMpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oYm9vbDQsICJub3RFcXVhbCIsIGJvb2w0LCBib29sNCk7CisKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wxLCAiYW55IiwgYm9vbDIpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDEsICJhbnkiLCBib29sMyk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihib29sMSwgImFueSIsIGJvb2w0KTsKKworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oYm9vbDEsICJhbGwiLCBib29sMik7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihib29sMSwgImFsbCIsIGJvb2wzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGJvb2wxLCAiYWxsIiwgYm9vbDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihib29sMiwgIm5vdCIsIGJvb2wyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGJvb2wzLCAibm90IiwgYm9vbDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9v
bDQsICJub3QiLCBib29sNCk7CisKKyAgICBUVHlwZSAqc2FtcGxlcjJEID0gbmV3IFRUeXBlKEVi
dFNhbXBsZXIyRCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDEpOworICAgIFRUeXBlICpzYW1w
bGVyQ3ViZSA9IG5ldyBUVHlwZShFYnRTYW1wbGVyQ3ViZSwgRWJwVW5kZWZpbmVkLCBFdnFHbG9i
YWwsIDEpOworCisgICAgLy8KKyAgICAvLyBUZXh0dXJlIEZ1bmN0aW9ucyBmb3IgR0xTTCBFUyAx
LjAKKyAgICAvLworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVy
ZTJEIiwgc2FtcGxlcjJELCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQzKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVyMkQsIGZs
b2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlQ3Vi
ZSIsIHNhbXBsZXJDdWJlLCBmbG9hdDMpOworCisgICAgaWYgKHJlc291cmNlcy5PRVNfRUdMX2lt
YWdlX2V4dGVybmFsKQorICAgIHsKKyAgICAgICAgVFR5cGUgKnNhbXBsZXJFeHRlcm5hbE9FUyA9
IG5ldyBUVHlwZShFYnRTYW1wbGVyRXh0ZXJuYWxPRVMsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFs
LCAxKTsKKworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1
cmUyRCIsIHNhbXBsZXJFeHRlcm5hbE9FUywgZmxvYXQyKTsKKyAgICAgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlckV4dGVybmFsT0VT
LCBmbG9hdDMpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRl
eHR1cmUyRFByb2oiLCBzYW1wbGVyRXh0ZXJuYWxPRVMsIGZsb2F0NCk7CisgICAgfQorCisgICAg
aWYgKHJlc291cmNlcy5BUkJfdGV4dHVyZV9yZWN0YW5nbGUpCisgICAgeworICAgICAgICBUVHlw
ZSAqc2FtcGxlcjJEUmVjdCA9IG5ldyBUVHlwZShFYnRTYW1wbGVyMkRSZWN0LCBFYnBVbmRlZmlu
ZWQsIEV2cUdsb2JhbCwgMSk7CisKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDQsICJ0ZXh0dXJlMkRSZWN0Iiwgc2FtcGxlcjJEUmVjdCwgZmxvYXQyKTsKKyAgICAgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRSZWN0UHJvaiIsIHNh
bXBsZXIyRFJlY3QsIGZsb2F0Myk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQ0LCAidGV4dHVyZTJEUmVjdFByb2oiLCBzYW1wbGVyMkRSZWN0LCBmbG9hdDQpOworICAg
IH0KKworICAgIGlmICh0eXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICB7CisgICAgICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEIiwgc2FtcGxlcjJE
LCBmbG9hdDIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQzLCBmbG9hdDEpOworICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFByb2oiLCBzYW1w
bGVyMkQsIGZsb2F0NCwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDQsICJ0ZXh0dXJlQ3ViZSIsIHNhbXBsZXJDdWJlLCBmbG9hdDMsIGZsb2F0MSk7CisK
KyAgICAgICAgaWYgKHJlc291cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZEZkeCIs
IGZsb2F0MSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0Miwg
ImRGZHgiLCBmbG9hdDIpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDMsICJkRmR4IiwgZmxvYXQzKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQ0LCAiZEZkeCIsIGZsb2F0NCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZEZkeSIsIGZsb2F0MSk7CisgICAg
ICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImRGZHkiLCBmbG9hdDIp
OworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJkRmR5Iiwg
ZmxvYXQzKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAi
ZEZkeSIsIGZsb2F0NCk7CisKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQxLCAiZndpZHRoIiwgZmxvYXQxKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQyLCAiZndpZHRoIiwgZmxvYXQyKTsKKyAgICAgICAgICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZndpZHRoIiwgZmxvYXQzKTsKKyAgICAgICAgICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZndpZHRoIiwgZmxvYXQ0KTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmKHR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUikKKyAgICB7
CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJETG9k
Iiwgc2FtcGxlcjJELCBmbG9hdDIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUHJvakxvZCIsIHNhbXBsZXIyRCwgZmxvYXQzLCBm
bG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1
cmUyRFByb2pMb2QiLCBzYW1wbGVyMkQsIGZsb2F0NCwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlQ3ViZUxvZCIsIHNhbXBsZXJDdWJl
LCBmbG9hdDMsIGZsb2F0MSk7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBEZXB0aCByYW5nZSBp
biB3aW5kb3cgY29vcmRpbmF0ZXMKKyAgICAvLworICAgIFRGaWVsZExpc3QgKmZpZWxkcyA9IE5l
d1Bvb2xURmllbGRMaXN0KCk7CisgICAgVEZpZWxkICpuZWFyID0gbmV3IFRGaWVsZChuZXcgVFR5
cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSksIE5ld1Bvb2xUU3RyaW5nKCJuZWFy
IikpOworICAgIFRGaWVsZCAqZmFyID0gbmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVi
cEhpZ2gsIEV2cUdsb2JhbCwgMSksIE5ld1Bvb2xUU3RyaW5nKCJmYXIiKSk7CisgICAgVEZpZWxk
ICpkaWZmID0gbmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2Jh
bCwgMSksIE5ld1Bvb2xUU3RyaW5nKCJkaWZmIikpOworICAgIGZpZWxkcy0+cHVzaF9iYWNrKG5l
YXIpOworICAgIGZpZWxkcy0+cHVzaF9iYWNrKGZhcik7CisgICAgZmllbGRzLT5wdXNoX2JhY2so
ZGlmZik7CisgICAgVFN0cnVjdHVyZSAqZGVwdGhSYW5nZVN0cnVjdCA9IG5ldyBUU3RydWN0dXJl
KE5ld1Bvb2xUU3RyaW5nKCJnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyIpLCBmaWVsZHMpOworICAg
IFRWYXJpYWJsZSAqZGVwdGhSYW5nZVBhcmFtZXRlcnMgPSBuZXcgVFZhcmlhYmxlKCZkZXB0aFJh
bmdlU3RydWN0LT5uYW1lKCksIGRlcHRoUmFuZ2VTdHJ1Y3QsIHRydWUpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydCgqZGVwdGhSYW5nZVBhcmFtZXRlcnMpOworICAgIFRWYXJpYWJsZSAqZGVwdGhS
YW5nZSA9IG5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0RlcHRoUmFuZ2UiKSwgVFR5
cGUoZGVwdGhSYW5nZVN0cnVjdCkpOworICAgIGRlcHRoUmFuZ2UtPnNldFF1YWxpZmllcihFdnFV
bmlmb3JtKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKmRlcHRoUmFuZ2UpOworCisgICAgLy8K
KyAgICAvLyBJbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQgYnVpbHQtaW4gY29uc3RhbnRzLgorICAg
IC8vCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heFZlcnRleEF0dHJpYnMi
LCByZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29u
c3RJbnQoImdsX01heFZlcnRleFVuaWZvcm1WZWN0b3JzIiwgcmVzb3VyY2VzLk1heFZlcnRleFVu
aWZvcm1WZWN0b3JzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xfTWF4VmFy
eWluZ1ZlY3RvcnMiLCByZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydENvbnN0SW50KCJnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291
cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
Q29uc3RJbnQoImdsX01heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMiLCByZXNvdXJjZXMuTWF4
Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJ
bnQoImdsX01heFRleHR1cmVJbWFnZVVuaXRzIiwgcmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVu
aXRzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xfTWF4RnJhZ21lbnRVbmlm
b3JtVmVjdG9ycyIsIHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKTsKKworICAg
IGlmIChzcGVjICE9IFNIX0NTU19TSEFERVJTX1NQRUMpCisgICAgeworICAgICAgICBzeW1ib2xU
YWJsZS5pbnNlcnRDb25zdEludCgiZ2xfTWF4RHJhd0J1ZmZlcnMiLCByZXNvdXJjZXMuTWF4RHJh
d0J1ZmZlcnMpOworICAgIH0KK30KKwordm9pZCBJZGVudGlmeUJ1aWx0SW5zKFNoU2hhZGVyVHlw
ZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
aEJ1aWx0SW5SZXNvdXJjZXMgJnJlc291cmNlcywKKyAgICAgICAgICAgICAgICAgICAgICBUU3lt
Ym9sVGFibGUgJnN5bWJvbFRhYmxlKQoreworICAgIC8vCisgICAgLy8gRmlyc3QsIGluc2VydCBz
b21lIHNwZWNpYWwgYnVpbHQtaW4gdmFyaWFibGVzIHRoYXQgYXJlIG5vdCBpbiAKKyAgICAvLyB0
aGUgYnVpbHQtaW4gaGVhZGVyIGZpbGVzLgorICAgIC8vCisgICAgc3dpdGNoKHR5cGUpIHsKKyAg
ICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjoKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpu
ZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29vcmQiKSwgICAgICAgICAgICAg
ICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb29yZCwgICA0KSkp
OworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJp
bmcoImdsX0Zyb250RmFjaW5nIiksICAgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0Qm9vbCwg
IEVicFVuZGVmaW5lZCwgRXZxRnJvbnRGYWNpbmcsIDEpKSk7CisgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfUG9pbnRDb29yZCIpLCAg
ICAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludENv
b3JkLCAgMikpKTsKKworICAgICAgICAvLworICAgICAgICAvLyBJbiBDU1MgU2hhZGVycywgZ2xf
RnJhZ0NvbG9yLCBnbF9GcmFnRGF0YSwgYW5kIGdsX01heERyYXdCdWZmZXJzIGFyZSBub3QgYXZh
aWxhYmxlLgorICAgICAgICAvLyBJbnN0ZWFkLCBjc3NfTWl4Q29sb3IgYW5kIGNzc19Db2xvck1h
dHJpeCBhcmUgYXZhaWxhYmxlLgorICAgICAgICAvLworICAgICAgICBpZiAoc3BlYyAhPSBTSF9D
U1NfU0hBREVSU19TUEVDKSB7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBU
VmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb2xvciIpLCAgICAgICAgICAgICAgICAg
ICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29sb3IsICAgNCkpKTsKKyAgICAg
ICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygi
Z2xfRnJhZ0RhdGFbZ2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRp
dW0sIEV2cUZyYWdEYXRhLCAgICA0KSkpOworICAgICAgICAgICAgaWYgKHJlc291cmNlcy5FWFRf
ZnJhZ19kZXB0aCkgeworICAgICAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRW
YXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RlcHRoRVhUIiksICAgICAgICAgICAgVFR5
cGUoRWJ0RmxvYXQsIHJlc291cmNlcy5GcmFnbWVudFByZWNpc2lvbkhpZ2ggPyBFYnBIaWdoIDog
RWJwTWVkaXVtLCBFdnFGcmFnRGVwdGgsIDEpKSk7CisgICAgICAgICAgICAgICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9FeHRlbnNpb24oImdsX0ZyYWdEZXB0aEVYVCIsICJHTF9FWFRfZnJhZ19kZXB0
aCIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3ltYm9s
VGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJjc3NfTWl4Q29sb3Ii
KSwgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xvYmFs
LCAgICAgIDQpKSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFi
bGUoTmV3UG9vbFRTdHJpbmcoImNzc19Db2xvck1hdHJpeCIpLCAgICAgICAgICAgICAgICBUVHlw
ZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFHbG9iYWwsICAgICAgNCwgdHJ1ZSkpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTSF9WRVJURVhfU0hBREVSOgorICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImds
X1Bvc2l0aW9uIiksICAgIFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFQb3NpdGlvbiwgICAg
NCkpKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xU
U3RyaW5nKCJnbF9Qb2ludFNpemUiKSwgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQ
b2ludFNpemUsICAgMSkpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OiBhc3NlcnQo
ZmFsc2UgJiYgIkxhbmd1YWdlIG5vdCBzdXBwb3J0ZWQiKTsKKyAgICB9CisKKyAgICAvLworICAg
IC8vIE5leHQsIGlkZW50aWZ5IHdoaWNoIGJ1aWx0LWlucyBmcm9tIHRoZSBhbHJlYWR5IGxvYWRl
ZCBoZWFkZXJzIGhhdmUKKyAgICAvLyBhIG1hcHBpbmcgdG8gYW4gb3BlcmF0b3IuICBUaG9zZSB0
aGF0IGFyZSBub3QgaWRlbnRpZmllZCBhcyBzdWNoIGFyZQorICAgIC8vIGV4cGVjdGVkIHRvIGJl
IHJlc29sdmVkIHRocm91Z2ggYSBsaWJyYXJ5IG9mIGZ1bmN0aW9ucywgdmVyc3VzIGFzCisgICAg
Ly8gb3BlcmF0aW9ucy4KKyAgICAvLworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
Im1hdHJpeENvbXBNdWx0IiwgICBFT3BNdWwpOworCisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9P
cGVyYXRvcigiZXF1YWwiLCAgICAgICAgICAgIEVPcFZlY3RvckVxdWFsKTsKKyAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKCJub3RFcXVhbCIsICAgICAgICAgRU9wVmVjdG9yTm90RXF1
YWwpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxlc3NUaGFuIiwgICAgICAg
ICBFT3BMZXNzVGhhbik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZ3JlYXRl
clRoYW4iLCAgICAgIEVPcEdyZWF0ZXJUaGFuKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKCJsZXNzVGhhbkVxdWFsIiwgICAgRU9wTGVzc1RoYW5FcXVhbCk7CisgICAgc3ltYm9s
VGFibGUucmVsYXRlVG9PcGVyYXRvcigiZ3JlYXRlclRoYW5FcXVhbCIsIEVPcEdyZWF0ZXJUaGFu
RXF1YWwpOworICAgIAorICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInJhZGlhbnMi
LCAgICAgIEVPcFJhZGlhbnMpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImRl
Z3JlZXMiLCAgICAgIEVPcERlZ3JlZXMpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0
b3IoInNpbiIsICAgICAgICAgIEVPcFNpbik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVy
YXRvcigiY29zIiwgICAgICAgICAgRU9wQ29zKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKCJ0YW4iLCAgICAgICAgICBFT3BUYW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoImFzaW4iLCAgICAgICAgIEVPcEFzaW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoImFjb3MiLCAgICAgICAgIEVPcEFjb3MpOworICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoImF0YW4iLCAgICAgICAgIEVPcEF0YW4pOworCisgICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9PcGVyYXRvcigicG93IiwgICAgICAgICAgRU9wUG93KTsKKyAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKCJleHAyIiwgICAgICAgICBFT3BFeHAyKTsKKyAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJsb2ciLCAgICAgICAgICBFT3BMb2cpOworICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImV4cCIsICAgICAgICAgIEVPcEV4cCk7CisgICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibG9nMiIsICAgICAgICAgRU9wTG9nMik7Cisg
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigic3FydCIsICAgICAgICAgRU9wU3FydCk7
CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiaW52ZXJzZXNxcnQiLCAgRU9wSW52
ZXJzZVNxcnQpOworCisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiYWJzIiwgICAg
ICAgICAgRU9wQWJzKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzaWduIiwg
ICAgICAgICBFT3BTaWduKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJmbG9v
ciIsICAgICAgICBFT3BGbG9vcik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigi
Y2VpbCIsICAgICAgICAgRU9wQ2VpbCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cigiZnJhY3QiLCAgICAgICAgRU9wRnJhY3QpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoIm1vZCIsICAgICAgICAgIEVPcE1vZCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9P
cGVyYXRvcigibWluIiwgICAgICAgICAgRU9wTWluKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVU
b09wZXJhdG9yKCJtYXgiLCAgICAgICAgICBFT3BNYXgpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoImNsYW1wIiwgICAgICAgIEVPcENsYW1wKTsKKyAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKCJtaXgiLCAgICAgICAgICBFT3BNaXgpOworICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoInN0ZXAiLCAgICAgICAgIEVPcFN0ZXApOworICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvT3BlcmF0b3IoInNtb290aHN0ZXAiLCAgIEVPcFNtb290aFN0ZXApOworCisg
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibGVuZ3RoIiwgICAgICAgRU9wTGVuZ3Ro
KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkaXN0YW5jZSIsICAgICBFT3BE
aXN0YW5jZSk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZG90IiwgICAgICAg
ICAgRU9wRG90KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJjcm9zcyIsICAg
ICAgICBFT3BDcm9zcyk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibm9ybWFs
aXplIiwgICAgRU9wTm9ybWFsaXplKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KCJmYWNlZm9yd2FyZCIsICBFT3BGYWNlRm9yd2FyZCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcigicmVmbGVjdCIsICAgICAgRU9wUmVmbGVjdCk7CisgICAgc3ltYm9sVGFibGUu
cmVsYXRlVG9PcGVyYXRvcigicmVmcmFjdCIsICAgICAgRU9wUmVmcmFjdCk7CisgICAgCisgICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiYW55IiwgICAgICAgICAgRU9wQW55KTsKKyAg
ICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhbGwiLCAgICAgICAgICBFT3BBbGwpOwor
ICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm5vdCIsICAgICAgICAgIEVPcFZlY3Rv
ckxvZ2ljYWxOb3QpOworCisgICAgLy8gTWFwIGxhbmd1YWdlLXNwZWNpZmljIG9wZXJhdG9ycy4K
KyAgICBzd2l0Y2godHlwZSkgeworICAgIGNhc2UgU0hfVkVSVEVYX1NIQURFUjoKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBTSF9GUkFHTUVOVF9TSEFERVI6CisgICAgICAgIGlmIChyZXNvdXJj
ZXMuT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzKSB7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKCJkRmR4IiwgICBFT3BERmR4KTsKKyAgICAgICAgICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvT3BlcmF0b3IoImRGZHkiLCAgIEVPcERGZHkpOworICAgICAgICAgICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZndpZHRoIiwgRU9wRndpZHRoKTsKKworICAgICAg
ICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9FeHRlbnNpb24oImRGZHgiLCAiR0xfT0VTX3N0YW5k
YXJkX2Rlcml2YXRpdmVzIik7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVu
c2lvbigiZEZkeSIsICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKKyAgICAgICAgICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKCJmd2lkdGgiLCAiR0xfT0VTX3N0YW5kYXJk
X2Rlcml2YXRpdmVzIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDog
YnJlYWs7CisgICAgfQorCisgICAgLy8gRmluYWxseSBhZGQgcmVzb3VyY2Utc3BlY2lmaWMgdmFy
aWFibGVzLgorICAgIHN3aXRjaCh0eXBlKSB7CisgICAgY2FzZSBTSF9GUkFHTUVOVF9TSEFERVI6
CisgICAgICAgIGlmIChzcGVjICE9IFNIX0NTU19TSEFERVJTX1NQRUMpIHsKKyAgICAgICAgICAg
IC8vIFNldCB1cCBnbF9GcmFnRGF0YS4gIFRoZSBhcnJheSBzaXplLgorICAgICAgICAgICAgVFR5
cGUgZnJhZ0RhdGEoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0RhdGEsIDQsIGZhbHNlLCB0
cnVlKTsKKyAgICAgICAgICAgIGZyYWdEYXRhLnNldEFycmF5U2l6ZShyZXNvdXJjZXMuTWF4RHJh
d0J1ZmZlcnMpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxl
KE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnRGF0YSIpLCAgICBmcmFnRGF0YSkpOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KK30KKwordm9pZCBJ
bml0RXh0ZW5zaW9uQmVoYXZpb3IoY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2
aW9yKQoreworICAgIGlmIChyZXNvdXJjZXMuT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzKQorICAg
ICAgICBleHRCZWhhdmlvclsiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIl0gPSBFQmhVbmRl
ZmluZWQ7CisgICAgaWYgKHJlc291cmNlcy5PRVNfRUdMX2ltYWdlX2V4dGVybmFsKQorICAgICAg
ICBleHRCZWhhdmlvclsiR0xfT0VTX0VHTF9pbWFnZV9leHRlcm5hbCJdID0gRUJoVW5kZWZpbmVk
OworICAgIGlmIChyZXNvdXJjZXMuQVJCX3RleHR1cmVfcmVjdGFuZ2xlKQorICAgICAgICBleHRC
ZWhhdmlvclsiR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlIl0gPSBFQmhVbmRlZmluZWQ7CisgICAg
aWYgKHJlc291cmNlcy5FWFRfZHJhd19idWZmZXJzKQorICAgICAgICBleHRCZWhhdmlvclsiR0xf
RVhUX2RyYXdfYnVmZmVycyJdID0gRUJoVW5kZWZpbmVkOworICAgIGlmIChyZXNvdXJjZXMuRVhU
X2ZyYWdfZGVwdGgpCisgICAgICAgIGV4dEJlaGF2aW9yWyJHTF9FWFRfZnJhZ19kZXB0aCJdID0g
RUJoVW5kZWZpbmVkOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1NjQy
ODY5YWExOTlhOGNhZDk3MzAxYWVjMzA3NjAzMzlkZDU0MWYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXpl
LmgKQEAgLTAsMCArMSwyMyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfSU5JVElB
TElaRV9JTkNMVURFRF8KKyNkZWZpbmUgX0lOSVRJQUxJWkVfSU5DTFVERURfCisKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL0NvbW1vbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvU2hIYW5kbGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRh
YmxlLmgiCisKK3ZvaWQgSW5zZXJ0QnVpbHRJbkZ1bmN0aW9ucyhTaFNoYWRlclR5cGUgdHlwZSwg
U2hTaGFkZXJTcGVjIHNwZWMsIGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyAmcmVzb3VyY2VzLCBU
U3ltYm9sVGFibGUgJnRhYmxlKTsKKwordm9pZCBJZGVudGlmeUJ1aWx0SW5zKFNoU2hhZGVyVHlw
ZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
aEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291cmNlcywKKyAgICAgICAgICAgICAgICAgICAgICBUU3lt
Ym9sVGFibGUmIHN5bWJvbFRhYmxlKTsKKwordm9pZCBJbml0RXh0ZW5zaW9uQmVoYXZpb3IoY29u
c3QgU2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dGVuc2lvbkJlaGF2aW9yKTsKKworI2VuZGlmIC8v
IF9JTklUSUFMSVpFX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZURsbC5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplRGxsLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40M2Y4MTc4NGQwYWRlYzVhYjExNmE4YmUzNGU1N2FkZjA2MTMzYmFkCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvSW5pdGlhbGl6ZURsbC5jcHAKQEAgLTAsMCArMSwzMiBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZURsbC5oIgorCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplR2xvYmFscy5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Ivb3NpbmNsdWRlLmgiCisKK2Jvb2wgSW5pdFByb2Nlc3Mo
KQoreworICAgIGlmICghSW5pdGlhbGl6ZVBvb2xJbmRleCgpKSB7CisgICAgICAgIGFzc2VydCgw
ICYmICJJbml0UHJvY2VzcygpOiBGYWlsZWQgdG8gaW5pdGFsaXplIGdsb2JhbCBwb29sIik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIUluaXRpYWxpemVQYXJzZUNv
bnRleHRJbmRleCgpKSB7CisgICAgICAgIGFzc2VydCgwICYmICJJbml0UHJvY2VzcygpOiBGYWls
ZWQgdG8gaW5pdGFsaXplIHBhcnNlIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIERldGFjaFByb2Nlc3MoKQorewor
ICAgIEZyZWVQYXJzZUNvbnRleHRJbmRleCgpOworICAgIEZyZWVQb29sSW5kZXgoKTsKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L0luaXRpYWxpemVEbGwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL0luaXRpYWxpemVEbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MzA3MGNjM2ZmNzhmNzUzYTI0
NmM0NjA2OTg5MDg2YTYzYmYwOGJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZURsbC5oCkBAIC0wLDAg
KzEsMTMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisjaWZuZGVmIF9fSU5JVElBTElaRURMTF9ICisj
ZGVmaW5lIF9fSU5JVElBTElaRURMTF9ICisKK2Jvb2wgSW5pdFByb2Nlc3MoKTsKK3ZvaWQgRGV0
YWNoUHJvY2VzcygpOworCisjZW5kaWYgLy8gX19JTklUSUFMSVpFRExMX0gKKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlh
bGl6ZUdsb2JhbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0luaXRpYWxpemVHbG9iYWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDcxNTk0MTQyNDcxMDUzMDgw
Mzg2MjgxMzg2YTk1MDZmYWJkMDU2MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVHbG9iYWxzLmgKQEAg
LTAsMCArMSwxMyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfX0lOSVRJQUxJWkVf
R0xPQkFMU19JTkNMVURFRF8KKyNkZWZpbmUgX19JTklUSUFMSVpFX0dMT0JBTFNfSU5DTFVERURf
CisKK2Jvb2wgSW5pdGlhbGl6ZVBvb2xJbmRleCgpOwordm9pZCBGcmVlUG9vbEluZGV4KCk7CisK
KyNlbmRpZiAvLyBfX0lOSVRJQUxJWkVfR0xPQkFMU19JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVQ
YXJzZUNvbnRleHQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjRkZWZhZTU2
OTUzYTlhYjg4ODU0ZmU0NzUzYzU3ZGNlNjQwMjFkNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVQYXJz
ZUNvbnRleHQuY3BwCkBAIC0wLDAgKzEsNDAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCisKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL29zaW5jbHVkZS5oIgorCitPU19UTFNJbmRleCBHbG9iYWxQ
YXJzZUNvbnRleHRJbmRleCA9IE9TX0lOVkFMSURfVExTX0lOREVYOworCitib29sIEluaXRpYWxp
emVQYXJzZUNvbnRleHRJbmRleCgpCit7CisgICAgYXNzZXJ0KEdsb2JhbFBhcnNlQ29udGV4dElu
ZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKTsKKworICAgIEdsb2JhbFBhcnNlQ29udGV4dElu
ZGV4ID0gT1NfQWxsb2NUTFNJbmRleCgpOworICAgIHJldHVybiBHbG9iYWxQYXJzZUNvbnRleHRJ
bmRleCAhPSBPU19JTlZBTElEX1RMU19JTkRFWDsKK30KKwordm9pZCBGcmVlUGFyc2VDb250ZXh0
SW5kZXgoKQoreworICAgIGFzc2VydChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCAhPSBPU19JTlZB
TElEX1RMU19JTkRFWCk7CisKKyAgICBPU19GcmVlVExTSW5kZXgoR2xvYmFsUGFyc2VDb250ZXh0
SW5kZXgpOworICAgIEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5E
RVg7Cit9CisKK3ZvaWQgU2V0R2xvYmFsUGFyc2VDb250ZXh0KFRQYXJzZUNvbnRleHQqIGNvbnRl
eHQpCit7CisgICAgYXNzZXJ0KEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ICE9IE9TX0lOVkFMSURf
VExTX0lOREVYKTsKKyAgICBPU19TZXRUTFNWYWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCwg
Y29udGV4dCk7Cit9CisKK1RQYXJzZUNvbnRleHQqIEdldEdsb2JhbFBhcnNlQ29udGV4dCgpCit7
CisgICAgYXNzZXJ0KEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ICE9IE9TX0lOVkFMSURfVExTX0lO
REVYKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VFBhcnNlQ29udGV4dCo+KE9TX0dldFRMU1Zh
bHVlKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4KSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVQYXJzZUNv
bnRleHQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L0luaXRpYWxpemVQYXJzZUNvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZmZiYWI4N2QwNzIzYTYzMjg0
Njg0M2MzMGQ5Y2FjMzMwMjcwNzc2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5o
CkBAIC0wLDAgKzEsMTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX19JTklUSUFM
SVpFX1BBUlNFX0NPTlRFWFRfSU5DTFVERURfCisjZGVmaW5lIF9fSU5JVElBTElaRV9QQVJTRV9D
T05URVhUX0lOQ0xVREVEXworCitib29sIEluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCgpOwor
dm9pZCBGcmVlUGFyc2VDb250ZXh0SW5kZXgoKTsKKworc3RydWN0IFRQYXJzZUNvbnRleHQ7Citl
eHRlcm4gdm9pZCBTZXRHbG9iYWxQYXJzZUNvbnRleHQoVFBhcnNlQ29udGV4dCogY29udGV4dCk7
CitleHRlcm4gVFBhcnNlQ29udGV4dCogR2V0R2xvYmFsUGFyc2VDb250ZXh0KCk7CisKKyNlbmRp
ZiAvLyBfX0lOSVRJQUxJWkVfUEFSU0VfQ09OVEVYVF9JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVW
YXJpYWJsZXMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvSW5pdGlhbGl6ZVZhcmlhYmxlcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTE1YzU2MWM3NzVmMTU2
MTY3N2YxOTljNmVjMTljMzhhYTdkODdlNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVWYXJpYWJsZXMu
Y3BwCkBAIC0wLDAgKzEsMTE2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplVmFyaWFibGVzLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9jb21waWxlcmRlYnVnLmgiCisKK25hbWVzcGFjZQoreworCitUSW50ZXJt
Q29uc3RhbnRVbmlvbiogY29uc3RydWN0RmxvYXRDb25zdFVuaW9uTm9kZShjb25zdCBUVHlwZSYg
dHlwZSkKK3sKKyAgICBUVHlwZSBteVR5cGUgPSB0eXBlOworICAgIHVuc2lnbmVkIGNoYXIgc2l6
ZSA9IG15VHlwZS5nZXROb21pbmFsU2l6ZSgpOworICAgIGlmIChteVR5cGUuaXNNYXRyaXgoKSkK
KyAgICAgICAgc2l6ZSAqPSBzaXplOworICAgIENvbnN0YW50VW5pb24gKnUgPSBuZXcgQ29uc3Rh
bnRVbmlvbltzaXplXTsKKyAgICBmb3IgKGludCBpaSA9IDA7IGlpIDwgc2l6ZTsgKytpaSkKKyAg
ICAgICAgdVtpaV0uc2V0RkNvbnN0KDAuMGYpOworCisgICAgbXlUeXBlLmNsZWFyQXJyYXluZXNz
KCk7CisgICAgbXlUeXBlLnNldFF1YWxpZmllcihFdnFDb25zdCk7CisgICAgVEludGVybUNvbnN0
YW50VW5pb24gKm5vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24odSwgbXlUeXBlKTsKKyAg
ICByZXR1cm4gbm9kZTsKK30KKworVEludGVybUNvbnN0YW50VW5pb24qIGNvbnN0cnVjdEluZGV4
Tm9kZShpbnQgaW5kZXgpCit7CisgICAgQ29uc3RhbnRVbmlvbiAqdSA9IG5ldyBDb25zdGFudFVu
aW9uWzFdOworICAgIHVbMF0uc2V0SUNvbnN0KGluZGV4KTsKKworICAgIFRUeXBlIHR5cGUoRWJ0
SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0LCAxKTsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlv
biAqbm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih1LCB0eXBlKTsKKyAgICByZXR1cm4g
bm9kZTsKK30KKworfSAgLy8gbmFtZXNwYWNlIGFub255bW91cworCitib29sIEluaXRpYWxpemVW
YXJpYWJsZXM6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBu
b2RlKQoreworICAgIGJvb2wgdmlzaXRDaGlsZHJlbiA9ICFtQ29kZUluc2VydGVkOworICAgIHN3
aXRjaCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7CisgICAgICBjYXNlIEVPcFNlcXVlbmNlOgorICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRnVuY3Rpb246CisgICAgICB7CisgICAgICAgIC8v
IEZ1bmN0aW9uIGRlZmluaXRpb24uCisgICAgICAgIEFTU0VSVCh2aXNpdCA9PSBQcmVWaXNpdCk7
CisgICAgICAgIGlmIChub2RlLT5nZXROYW1lKCkgPT0gIm1haW4oIikKKyAgICAgICAgeworICAg
ICAgICAgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7
CisgICAgICAgICAgICBBU1NFUlQoKHNlcXVlbmNlLnNpemUoKSA9PSAxKSB8fCAoc2VxdWVuY2Uu
c2l6ZSgpID09IDIpKTsKKyAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUgKmJvZHkgPSBOVUxM
OworICAgICAgICAgICAgaWYgKHNlcXVlbmNlLnNpemUoKSA9PSAxKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGJvZHkgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZShFT3BTZXF1ZW5jZSk7
CisgICAgICAgICAgICAgICAgc2VxdWVuY2UucHVzaF9iYWNrKGJvZHkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvZHkg
PSBzZXF1ZW5jZVsxXS0+Z2V0QXNBZ2dyZWdhdGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIEFTU0VSVChib2R5KTsKKyAgICAgICAgICAgIGluc2VydEluaXRDb2RlKGJvZHktPmdldFNl
cXVlbmNlKCkpOworICAgICAgICAgICAgbUNvZGVJbnNlcnRlZCA9IHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBkZWZhdWx0OgorICAgICAgICB2aXNpdENo
aWxkcmVuID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gdmlzaXRD
aGlsZHJlbjsKK30KKwordm9pZCBJbml0aWFsaXplVmFyaWFibGVzOjppbnNlcnRJbml0Q29kZShU
SW50ZXJtU2VxdWVuY2UmIHNlcXVlbmNlKQoreworICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkg
PCBtVmFyaWFibGVzLnNpemUoKTsgKytpaSkKKyAgICB7CisgICAgICAgIGNvbnN0IEluaXRWYXJp
YWJsZUluZm8mIHZhckluZm8gPSBtVmFyaWFibGVzW2lpXTsKKworICAgICAgICBpZiAodmFySW5m
by50eXBlLmlzQXJyYXkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaW5kZXgg
PSB2YXJJbmZvLnR5cGUuZ2V0QXJyYXlTaXplKCkgLSAxOyBpbmRleCA+PSAwOyAtLWluZGV4KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRJbnRlcm1CaW5hcnkgKmFzc2lnbiA9IG5l
dyBUSW50ZXJtQmluYXJ5KEVPcEFzc2lnbik7CisgICAgICAgICAgICAgICAgc2VxdWVuY2UuaW5z
ZXJ0KHNlcXVlbmNlLmJlZ2luKCksIGFzc2lnbik7CisKKyAgICAgICAgICAgICAgICBUSW50ZXJt
QmluYXJ5ICppbmRleERpcmVjdCA9IG5ldyBUSW50ZXJtQmluYXJ5KEVPcEluZGV4RGlyZWN0KTsK
KyAgICAgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBuZXcgVEludGVybVN5bWJv
bCgwLCB2YXJJbmZvLm5hbWUsIHZhckluZm8udHlwZSk7CisgICAgICAgICAgICAgICAgaW5kZXhE
aXJlY3QtPnNldExlZnQoc3ltYm9sKTsKKyAgICAgICAgICAgICAgICBUSW50ZXJtQ29uc3RhbnRV
bmlvbiAqaW5kZXhOb2RlID0gY29uc3RydWN0SW5kZXhOb2RlKGluZGV4KTsKKyAgICAgICAgICAg
ICAgICBpbmRleERpcmVjdC0+c2V0UmlnaHQoaW5kZXhOb2RlKTsKKworICAgICAgICAgICAgICAg
IGFzc2lnbi0+c2V0TGVmdChpbmRleERpcmVjdCk7CisKKyAgICAgICAgICAgICAgICBUSW50ZXJt
Q29uc3RhbnRVbmlvbiAqemVyb0NvbnN0ID0gY29uc3RydWN0RmxvYXRDb25zdFVuaW9uTm9kZSh2
YXJJbmZvLnR5cGUpOworICAgICAgICAgICAgICAgIGFzc2lnbi0+c2V0UmlnaHQoemVyb0NvbnN0
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAg
ICAgICAgICAgIFRJbnRlcm1CaW5hcnkgKmFzc2lnbiA9IG5ldyBUSW50ZXJtQmluYXJ5KEVPcEFz
c2lnbik7CisgICAgICAgICAgICBzZXF1ZW5jZS5pbnNlcnQoc2VxdWVuY2UuYmVnaW4oKSwgYXNz
aWduKTsKKyAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IG5ldyBUSW50ZXJtU3lt
Ym9sKDAsIHZhckluZm8ubmFtZSwgdmFySW5mby50eXBlKTsKKyAgICAgICAgICAgIGFzc2lnbi0+
c2V0TGVmdChzeW1ib2wpOworICAgICAgICAgICAgVEludGVybUNvbnN0YW50VW5pb24gKnplcm9D
b25zdCA9IGNvbnN0cnVjdEZsb2F0Q29uc3RVbmlvbk5vZGUodmFySW5mby50eXBlKTsKKyAgICAg
ICAgICAgIGFzc2lnbi0+c2V0UmlnaHQoemVyb0NvbnN0KTsKKyAgICAgICAgfQorCisgICAgfQor
fQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9Jbml0aWFsaXplVmFyaWFibGVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplVmFyaWFibGVzLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MWNkNmQ3ZTFiNTExYWNlNDZhYzU4ZDQwZDY5NTViMzg4YjZkYTQ3NgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRp
YWxpemVWYXJpYWJsZXMuaApAQCAtMCwwICsxLDUwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aWZuZGVmIENPTVBJTEVSX0lOSVRJQUxJWkVfVkFSSUFCTEVTX0hfCisjZGVmaW5lIENPTVBJTEVS
X0lOSVRJQUxJWkVfVkFSSUFCTEVTX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L2ludGVybWVkaWF0ZS5oIgorCitjbGFzcyBJbml0aWFsaXplVmFyaWFibGVzIDogcHVibGljIFRJ
bnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIHN0cnVjdCBJbml0VmFyaWFibGVJbmZv
CisgICAgeworICAgICAgICBUU3RyaW5nIG5hbWU7CisgICAgICAgIFRUeXBlIHR5cGU7CisKKyAg
ICAgICAgSW5pdFZhcmlhYmxlSW5mbyhjb25zdCBUU3RyaW5nJiBfbmFtZSwgY29uc3QgVFR5cGUm
IF90eXBlKQorICAgICAgICAgICAgOiBuYW1lKF9uYW1lKSwKKyAgICAgICAgICAgICAgdHlwZShf
dHlwZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgfTsKKyAgICB0eXBlZGVmIFRWZWN0b3I8
SW5pdFZhcmlhYmxlSW5mbz4gSW5pdFZhcmlhYmxlSW5mb0xpc3Q7CisKKyAgICBJbml0aWFsaXpl
VmFyaWFibGVzKGNvbnN0IEluaXRWYXJpYWJsZUluZm9MaXN0JiB2YXJzKQorICAgICAgICA6IG1D
b2RlSW5zZXJ0ZWQoZmFsc2UpLAorICAgICAgICAgIG1WYXJpYWJsZXModmFycykKKyAgICB7Cisg
ICAgfQorCisgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQg
dmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5vZGUpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSogbm9kZSkgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQs
IFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBi
b29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqIG5vZGUpIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgdmlydHVhbCBib29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJt
QnJhbmNoKiBub2RlKSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVhbCBib29sIHZpc2l0
QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKTsKKworICBwcml2
YXRlOgorICAgIHZvaWQgaW5zZXJ0SW5pdENvZGUoVEludGVybVNlcXVlbmNlJiBzZXF1ZW5jZSk7
CisKKyAgICBJbml0VmFyaWFibGVJbmZvTGlzdCBtVmFyaWFibGVzOworICAgIGJvb2wgbUNvZGVJ
bnNlcnRlZDsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfSU5JVElBTElaRV9WQVJJQUJMRVNf
SF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0ludGVybVRyYXZlcnNlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL0ludGVybVRyYXZlcnNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NTRiODM0
MDlhYzAwYThiN2JjMzU0OTU3MGJkNTk4YzBjN2UyOTBjCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtVHJhdmVy
c2UuY3BwCkBAIC0wLDAgKzEsMjU5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKworLy8KKy8vIFRyYXZlcnNlIHRo
ZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24gdHJlZSwgYW5kCisvLyBjYWxsIGEgbm9kZSB0
eXBlIHNwZWNpZmljIGZ1bmN0aW9uIGZvciBlYWNoIG5vZGUuCisvLyBEb25lIHJlY3Vyc2l2ZWx5
IHRocm91Z2ggdGhlIG1lbWJlciBmdW5jdGlvbiBUcmF2ZXJzZSgpLgorLy8gTm9kZSB0eXBlcyBj
YW4gYmUgc2tpcHBlZCBpZiB0aGVpciBmdW5jdGlvbiB0byBjYWxsIGlzIDAsCisvLyBidXQgdGhl
aXIgc3VidHJlZSB3aWxsIHN0aWxsIGJlIHRyYXZlcnNlZC4KKy8vIE5vZGVzIHdpdGggY2hpbGRy
ZW4gY2FuIGhhdmUgdGhlaXIgd2hvbGUgc3VidHJlZSBza2lwcGVkCisvLyBpZiBwcmVWaXNpdCBp
cyB0dXJuZWQgb24gYW5kIHRoZSB0eXBlIHNwZWNpZmljIGZ1bmN0aW9uCisvLyByZXR1cm5zIGZh
bHNlLgorLy8KKy8vIHByZVZpc2l0LCBwb3N0VmlzaXQsIGFuZCByaWdodFRvTGVmdCBjb250cm9s
IHdoYXQgb3JkZXIKKy8vIG5vZGVzIGFyZSB2aXNpdGVkIGluLgorLy8KKworLy8KKy8vIFRyYXZl
cnNhbCBmdW5jdGlvbnMgZm9yIHRlcm1pbmFscyBhcmUgc3RyYWlnaGZvcndhcmQuLi4uCisvLwor
dm9pZCBUSW50ZXJtU3ltYm9sOjp0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyICppdCkKK3sKKyAg
ICBpdC0+dmlzaXRTeW1ib2wodGhpcyk7Cit9CisKK3ZvaWQgVEludGVybUNvbnN0YW50VW5pb246
OnRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIgKml0KQoreworICAgIGl0LT52aXNpdENvbnN0YW50
VW5pb24odGhpcyk7Cit9CisKKy8vCisvLyBUcmF2ZXJzZSBhIGJpbmFyeSBub2RlLgorLy8KK3Zv
aWQgVEludGVybUJpbmFyeTo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciAqaXQpCit7CisgICAg
Ym9vbCB2aXNpdCA9IHRydWU7CisKKyAgICAvLworICAgIC8vIHZpc2l0IHRoZSBub2RlIGJlZm9y
ZSBjaGlsZHJlbiBpZiBwcmUtdmlzaXRpbmcuCisgICAgLy8KKyAgICBpZiAoaXQtPnByZVZpc2l0
KQorICAgICAgICB2aXNpdCA9IGl0LT52aXNpdEJpbmFyeShQcmVWaXNpdCwgdGhpcyk7CisgICAg
CisgICAgLy8KKyAgICAvLyBWaXNpdCB0aGUgY2hpbGRyZW4sIGluIHRoZSByaWdodCBvcmRlci4K
KyAgICAvLworICAgIGlmICh2aXNpdCkKKyAgICB7CisgICAgICAgIGl0LT5pbmNyZW1lbnREZXB0
aCh0aGlzKTsKKworICAgICAgICBpZiAoaXQtPnJpZ2h0VG9MZWZ0KSAKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKHJpZ2h0KQorICAgICAgICAgICAgICAgIHJpZ2h0LT50cmF2ZXJzZShpdCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpdC0+aW5WaXNpdCkKKyAgICAgICAgICAg
ICAgICB2aXNpdCA9IGl0LT52aXNpdEJpbmFyeShJblZpc2l0LCB0aGlzKTsKKworICAgICAgICAg
ICAgaWYgKHZpc2l0ICYmIGxlZnQpCisgICAgICAgICAgICAgICAgbGVmdC0+dHJhdmVyc2UoaXQp
OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGxl
ZnQpCisgICAgICAgICAgICAgICAgbGVmdC0+dHJhdmVyc2UoaXQpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAoaXQtPmluVmlzaXQpCisgICAgICAgICAgICAgICAgdmlzaXQgPSBpdC0+
dmlzaXRCaW5hcnkoSW5WaXNpdCwgdGhpcyk7CisKKyAgICAgICAgICAgIGlmICh2aXNpdCAmJiBy
aWdodCkKKyAgICAgICAgICAgICAgICByaWdodC0+dHJhdmVyc2UoaXQpOworICAgICAgICB9CisK
KyAgICAgICAgaXQtPmRlY3JlbWVudERlcHRoKCk7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBW
aXNpdCB0aGUgbm9kZSBhZnRlciB0aGUgY2hpbGRyZW4sIGlmIHJlcXVlc3RlZCBhbmQgdGhlIHRy
YXZlcnNhbAorICAgIC8vIGhhc24ndCBiZWVuIGNhbmNlbGxlZCB5ZXQuCisgICAgLy8KKyAgICBp
ZiAodmlzaXQgJiYgaXQtPnBvc3RWaXNpdCkKKyAgICAgICAgaXQtPnZpc2l0QmluYXJ5KFBvc3RW
aXNpdCwgdGhpcyk7Cit9CisKKy8vCisvLyBUcmF2ZXJzZSBhIHVuYXJ5IG5vZGUuICBTYW1lIGNv
bW1lbnRzIGluIGJpbmFyeSBub2RlIGFwcGx5IGhlcmUuCisvLwordm9pZCBUSW50ZXJtVW5hcnk6
OnRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIgKml0KQoreworICAgIGJvb2wgdmlzaXQgPSB0cnVl
OworCisgICAgaWYgKGl0LT5wcmVWaXNpdCkKKyAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRVbmFy
eShQcmVWaXNpdCwgdGhpcyk7CisKKyAgICBpZiAodmlzaXQpIHsKKyAgICAgICAgaXQtPmluY3Jl
bWVudERlcHRoKHRoaXMpOworICAgICAgICBvcGVyYW5kLT50cmF2ZXJzZShpdCk7CisgICAgICAg
IGl0LT5kZWNyZW1lbnREZXB0aCgpOworICAgIH0KKyAgICAKKyAgICBpZiAodmlzaXQgJiYgaXQt
PnBvc3RWaXNpdCkKKyAgICAgICAgaXQtPnZpc2l0VW5hcnkoUG9zdFZpc2l0LCB0aGlzKTsKK30K
KworLy8KKy8vIFRyYXZlcnNlIGFuIGFnZ3JlZ2F0ZSBub2RlLiAgU2FtZSBjb21tZW50cyBpbiBi
aW5hcnkgbm9kZSBhcHBseSBoZXJlLgorLy8KK3ZvaWQgVEludGVybUFnZ3JlZ2F0ZTo6dHJhdmVy
c2UoVEludGVybVRyYXZlcnNlciAqaXQpCit7CisgICAgYm9vbCB2aXNpdCA9IHRydWU7CisgICAg
CisgICAgaWYgKGl0LT5wcmVWaXNpdCkKKyAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRBZ2dyZWdh
dGUoUHJlVmlzaXQsIHRoaXMpOworICAgIAorICAgIGlmICh2aXNpdCkKKyAgICB7CisgICAgICAg
IGl0LT5pbmNyZW1lbnREZXB0aCh0aGlzKTsKKworICAgICAgICBpZiAoaXQtPnJpZ2h0VG9MZWZ0
KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6cmV2ZXJzZV9p
dGVyYXRvciBzaXQgPSBzZXF1ZW5jZS5yYmVnaW4oKTsgc2l0ICE9IHNlcXVlbmNlLnJlbmQoKTsg
c2l0KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKCpzaXQpLT50cmF2ZXJzZShp
dCk7CisKKyAgICAgICAgICAgICAgICBpZiAodmlzaXQgJiYgaXQtPmluVmlzaXQpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoKnNpdCAhPSBzZXF1ZW5jZS5mcm9u
dCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRBZ2dyZWdhdGUo
SW5WaXNpdCwgdGhpcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChUSW50ZXJtU2Vx
dWVuY2U6Oml0ZXJhdG9yIHNpdCA9IHNlcXVlbmNlLmJlZ2luKCk7IHNpdCAhPSBzZXF1ZW5jZS5l
bmQoKTsgc2l0KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKCpzaXQpLT50cmF2
ZXJzZShpdCk7CisKKyAgICAgICAgICAgICAgICBpZiAodmlzaXQgJiYgaXQtPmluVmlzaXQpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoKnNpdCAhPSBzZXF1ZW5j
ZS5iYWNrKCkpCisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdCA9IGl0LT52aXNpdEFnZ3Jl
Z2F0ZShJblZpc2l0LCB0aGlzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGl0LT5kZWNyZW1lbnREZXB0aCgpOworICAgIH0K
KworICAgIGlmICh2aXNpdCAmJiBpdC0+cG9zdFZpc2l0KQorICAgICAgICBpdC0+dmlzaXRBZ2dy
ZWdhdGUoUG9zdFZpc2l0LCB0aGlzKTsKK30KKworLy8KKy8vIFRyYXZlcnNlIGEgc2VsZWN0aW9u
IG5vZGUuICBTYW1lIGNvbW1lbnRzIGluIGJpbmFyeSBub2RlIGFwcGx5IGhlcmUuCisvLwordm9p
ZCBUSW50ZXJtU2VsZWN0aW9uOjp0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyICppdCkKK3sKKyAg
ICBib29sIHZpc2l0ID0gdHJ1ZTsKKworICAgIGlmIChpdC0+cHJlVmlzaXQpCisgICAgICAgIHZp
c2l0ID0gaXQtPnZpc2l0U2VsZWN0aW9uKFByZVZpc2l0LCB0aGlzKTsKKyAgICAKKyAgICBpZiAo
dmlzaXQpIHsKKyAgICAgICAgaXQtPmluY3JlbWVudERlcHRoKHRoaXMpOworICAgICAgICBpZiAo
aXQtPnJpZ2h0VG9MZWZ0KSB7CisgICAgICAgICAgICBpZiAoZmFsc2VCbG9jaykKKyAgICAgICAg
ICAgICAgICBmYWxzZUJsb2NrLT50cmF2ZXJzZShpdCk7CisgICAgICAgICAgICBpZiAodHJ1ZUJs
b2NrKQorICAgICAgICAgICAgICAgIHRydWVCbG9jay0+dHJhdmVyc2UoaXQpOworICAgICAgICAg
ICAgY29uZGl0aW9uLT50cmF2ZXJzZShpdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBjb25kaXRpb24tPnRyYXZlcnNlKGl0KTsKKyAgICAgICAgICAgIGlmICh0cnVlQmxvY2spCisg
ICAgICAgICAgICAgICAgdHJ1ZUJsb2NrLT50cmF2ZXJzZShpdCk7CisgICAgICAgICAgICBpZiAo
ZmFsc2VCbG9jaykKKyAgICAgICAgICAgICAgICBmYWxzZUJsb2NrLT50cmF2ZXJzZShpdCk7Cisg
ICAgICAgIH0KKyAgICAgICAgaXQtPmRlY3JlbWVudERlcHRoKCk7CisgICAgfQorCisgICAgaWYg
KHZpc2l0ICYmIGl0LT5wb3N0VmlzaXQpCisgICAgICAgIGl0LT52aXNpdFNlbGVjdGlvbihQb3N0
VmlzaXQsIHRoaXMpOworfQorCisvLworLy8gVHJhdmVyc2UgYSBsb29wIG5vZGUuICBTYW1lIGNv
bW1lbnRzIGluIGJpbmFyeSBub2RlIGFwcGx5IGhlcmUuCisvLwordm9pZCBUSW50ZXJtTG9vcDo6
dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciAqaXQpCit7CisgICAgYm9vbCB2aXNpdCA9IHRydWU7
CisKKyAgICBpZiAoaXQtPnByZVZpc2l0KQorICAgICAgICB2aXNpdCA9IGl0LT52aXNpdExvb3Ao
UHJlVmlzaXQsIHRoaXMpOworICAgIAorICAgIGlmICh2aXNpdCkKKyAgICB7CisgICAgICAgIGl0
LT5pbmNyZW1lbnREZXB0aCh0aGlzKTsKKworICAgICAgICBpZiAoaXQtPnJpZ2h0VG9MZWZ0KQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoZXhwcikKKyAgICAgICAgICAgICAgICBleHByLT50
cmF2ZXJzZShpdCk7CisKKyAgICAgICAgICAgIGlmIChib2R5KQorICAgICAgICAgICAgICAgIGJv
ZHktPnRyYXZlcnNlKGl0KTsKKworICAgICAgICAgICAgaWYgKGNvbmQpCisgICAgICAgICAgICAg
ICAgY29uZC0+dHJhdmVyc2UoaXQpOworCisgICAgICAgICAgICBpZiAoaW5pdCkKKyAgICAgICAg
ICAgICAgICBpbml0LT50cmF2ZXJzZShpdCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoaW5pdCkKKyAgICAgICAgICAgICAgICBpbml0LT50cmF2
ZXJzZShpdCk7CisKKyAgICAgICAgICAgIGlmIChjb25kKQorICAgICAgICAgICAgICAgIGNvbmQt
PnRyYXZlcnNlKGl0KTsKKworICAgICAgICAgICAgaWYgKGJvZHkpCisgICAgICAgICAgICAgICAg
Ym9keS0+dHJhdmVyc2UoaXQpOworCisgICAgICAgICAgICBpZiAoZXhwcikKKyAgICAgICAgICAg
ICAgICBleHByLT50cmF2ZXJzZShpdCk7CisgICAgICAgIH0KKworICAgICAgICBpdC0+ZGVjcmVt
ZW50RGVwdGgoKTsKKyAgICB9CisKKyAgICBpZiAodmlzaXQgJiYgaXQtPnBvc3RWaXNpdCkKKyAg
ICAgICAgaXQtPnZpc2l0TG9vcChQb3N0VmlzaXQsIHRoaXMpOworfQorCisvLworLy8gVHJhdmVy
c2UgYSBicmFuY2ggbm9kZS4gIFNhbWUgY29tbWVudHMgaW4gYmluYXJ5IG5vZGUgYXBwbHkgaGVy
ZS4KKy8vCit2b2lkIFRJbnRlcm1CcmFuY2g6OnRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIgKml0
KQoreworICAgIGJvb2wgdmlzaXQgPSB0cnVlOworCisgICAgaWYgKGl0LT5wcmVWaXNpdCkKKyAg
ICAgICAgdmlzaXQgPSBpdC0+dmlzaXRCcmFuY2goUHJlVmlzaXQsIHRoaXMpOworICAgIAorICAg
IGlmICh2aXNpdCAmJiBleHByZXNzaW9uKSB7CisgICAgICAgIGl0LT5pbmNyZW1lbnREZXB0aCh0
aGlzKTsKKyAgICAgICAgZXhwcmVzc2lvbi0+dHJhdmVyc2UoaXQpOworICAgICAgICBpdC0+ZGVj
cmVtZW50RGVwdGgoKTsKKyAgICB9CisKKyAgICBpZiAodmlzaXQgJiYgaXQtPnBvc3RWaXNpdCkK
KyAgICAgICAgaXQtPnZpc2l0QnJhbmNoKFBvc3RWaXNpdCwgdGhpcyk7Cit9CisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVy
bWVkaWF0ZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9JbnRlcm1lZGlhdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc3N2NhYjU0NTg1MWU0NzcwZDM1ZjQy
YWRmODhkOWJmMTc1YjZlMjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1lZGlhdGUuY3BwCkBAIC0wLDAgKzEs
MTUwMCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8KKy8vIEJ1aWxkIHRoZSBpbnRlcm1lZGlh
dGUgcmVwcmVzZW50YXRpb24uCisvLworCisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxs
aW1pdHMuaD4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL0hhc2hOYW1lcy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvbG9jYWxp
bnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1F1YWxpZmllckFs
aXZlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9SZW1vdmVUcmVlLmgiCisKK2Jv
b2wgQ29tcGFyZVN0cnVjdHVyZShjb25zdCBUVHlwZSYgbGVmdE5vZGVUeXBlLCBDb25zdGFudFVu
aW9uKiByaWdodFVuaW9uQXJyYXksIENvbnN0YW50VW5pb24qIGxlZnRVbmlvbkFycmF5KTsKKwor
c3RhdGljIFRQcmVjaXNpb24gR2V0SGlnaGVyUHJlY2lzaW9uKFRQcmVjaXNpb24gbGVmdCwgVFBy
ZWNpc2lvbiByaWdodCkKK3sKKyAgICByZXR1cm4gbGVmdCA+IHJpZ2h0ID8gbGVmdCA6IHJpZ2h0
OworfQorCitjb25zdCBjaGFyKiBnZXRPcGVyYXRvclN0cmluZyhUT3BlcmF0b3Igb3ApCit7Cisg
ICAgc3dpdGNoIChvcCkgeworICAgICAgY2FzZSBFT3BJbml0aWFsaXplOiByZXR1cm4gIj0iOwor
ICAgICAgY2FzZSBFT3BBc3NpZ246IHJldHVybiAiPSI7CisgICAgICBjYXNlIEVPcEFkZEFzc2ln
bjogcmV0dXJuICIrPSI7CisgICAgICBjYXNlIEVPcFN1YkFzc2lnbjogcmV0dXJuICItPSI7Cisg
ICAgICBjYXNlIEVPcERpdkFzc2lnbjogcmV0dXJuICIvPSI7CisKKyAgICAgIC8vIEZhbGwtdGhy
b3VnaC4KKyAgICAgIGNhc2UgRU9wTXVsQXNzaWduOiAKKyAgICAgIGNhc2UgRU9wVmVjdG9yVGlt
ZXNNYXRyaXhBc3NpZ246CisgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOgor
ICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbjoKKyAgICAgIGNhc2UgRU9wTWF0
cml4VGltZXNNYXRyaXhBc3NpZ246IHJldHVybiAiKj0iOworCisgICAgICAvLyBGYWxsLXRocm91
Z2guCisgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0OgorICAgICAgY2FzZSBFT3BJbmRleEluZGly
ZWN0OiByZXR1cm4gIltdIjsKKworICAgICAgY2FzZSBFT3BJbmRleERpcmVjdFN0cnVjdDogcmV0
dXJuICIuIjsKKyAgICAgIGNhc2UgRU9wVmVjdG9yU3dpenpsZTogcmV0dXJuICIuIjsKKyAgICAg
IGNhc2UgRU9wQWRkOiByZXR1cm4gIisiOworICAgICAgY2FzZSBFT3BTdWI6IHJldHVybiAiLSI7
CisgICAgICBjYXNlIEVPcE11bDogcmV0dXJuICIqIjsKKyAgICAgIGNhc2UgRU9wRGl2OiByZXR1
cm4gIi8iOworICAgICAgY2FzZSBFT3BNb2Q6IFVOSU1QTEVNRU5URUQoKTsgYnJlYWs7CisgICAg
ICBjYXNlIEVPcEVxdWFsOiByZXR1cm4gIj09IjsKKyAgICAgIGNhc2UgRU9wTm90RXF1YWw6IHJl
dHVybiAiIT0iOworICAgICAgY2FzZSBFT3BMZXNzVGhhbjogcmV0dXJuICI8IjsKKyAgICAgIGNh
c2UgRU9wR3JlYXRlclRoYW46IHJldHVybiAiPiI7CisgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1
YWw6IHJldHVybiAiPD0iOworICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiByZXR1cm4g
Ij49IjsKKworICAgICAgLy8gRmFsbC10aHJvdWdoLgorICAgICAgY2FzZSBFT3BWZWN0b3JUaW1l
c1NjYWxhcjoKKyAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXg6CisgICAgICBjYXNlIEVP
cE1hdHJpeFRpbWVzVmVjdG9yOgorICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhcjoKKyAg
ICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXg6IHJldHVybiAiKiI7CisKKyAgICAgIGNhc2Ug
RU9wTG9naWNhbE9yOiByZXR1cm4gInx8IjsKKyAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjogcmV0
dXJuICJeXiI7CisgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6IHJldHVybiAiJiYiOworICAgICAg
Y2FzZSBFT3BOZWdhdGl2ZTogcmV0dXJuICItIjsKKyAgICAgIGNhc2UgRU9wVmVjdG9yTG9naWNh
bE5vdDogcmV0dXJuICJub3QiOworICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OiByZXR1cm4gIiEi
OworICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50OiByZXR1cm4gIisrIjsKKyAgICAgIGNhc2Ug
RU9wUG9zdERlY3JlbWVudDogcmV0dXJuICItLSI7CisgICAgICBjYXNlIEVPcFByZUluY3JlbWVu
dDogcmV0dXJuICIrKyI7CisgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDogcmV0dXJuICItLSI7
CisKKyAgICAgIC8vIEZhbGwtdGhyb3VnaC4KKyAgICAgIGNhc2UgRU9wQ29udkludFRvQm9vbDoK
KyAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9Cb29sOiByZXR1cm4gImJvb2wiOworIAorICAgICAg
Ly8gRmFsbC10aHJvdWdoLgorICAgICAgY2FzZSBFT3BDb252Qm9vbFRvRmxvYXQ6CisgICAgICBj
YXNlIEVPcENvbnZJbnRUb0Zsb2F0OiByZXR1cm4gImZsb2F0IjsKKyAKKyAgICAgIC8vIEZhbGwt
dGhyb3VnaC4KKyAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9JbnQ6CisgICAgICBjYXNlIEVPcENv
bnZCb29sVG9JbnQ6IHJldHVybiAiaW50IjsKKworICAgICAgY2FzZSBFT3BSYWRpYW5zOiByZXR1
cm4gInJhZGlhbnMiOworICAgICAgY2FzZSBFT3BEZWdyZWVzOiByZXR1cm4gImRlZ3JlZXMiOwor
ICAgICAgY2FzZSBFT3BTaW46IHJldHVybiAic2luIjsKKyAgICAgIGNhc2UgRU9wQ29zOiByZXR1
cm4gImNvcyI7CisgICAgICBjYXNlIEVPcFRhbjogcmV0dXJuICJ0YW4iOworICAgICAgY2FzZSBF
T3BBc2luOiByZXR1cm4gImFzaW4iOworICAgICAgY2FzZSBFT3BBY29zOiByZXR1cm4gImFjb3Mi
OworICAgICAgY2FzZSBFT3BBdGFuOiByZXR1cm4gImF0YW4iOworICAgICAgY2FzZSBFT3BFeHA6
IHJldHVybiAiZXhwIjsKKyAgICAgIGNhc2UgRU9wTG9nOiByZXR1cm4gImxvZyI7CisgICAgICBj
YXNlIEVPcEV4cDI6IHJldHVybiAiZXhwMiI7CisgICAgICBjYXNlIEVPcExvZzI6IHJldHVybiAi
bG9nMiI7CisgICAgICBjYXNlIEVPcFNxcnQ6IHJldHVybiAic3FydCI7CisgICAgICBjYXNlIEVP
cEludmVyc2VTcXJ0OiByZXR1cm4gImludmVyc2VzcXJ0IjsKKyAgICAgIGNhc2UgRU9wQWJzOiBy
ZXR1cm4gImFicyI7CisgICAgICBjYXNlIEVPcFNpZ246IHJldHVybiAic2lnbiI7CisgICAgICBj
YXNlIEVPcEZsb29yOiByZXR1cm4gImZsb29yIjsKKyAgICAgIGNhc2UgRU9wQ2VpbDogcmV0dXJu
ICJjZWlsIjsKKyAgICAgIGNhc2UgRU9wRnJhY3Q6IHJldHVybiAiZnJhY3QiOworICAgICAgY2Fz
ZSBFT3BMZW5ndGg6IHJldHVybiAibGVuZ3RoIjsKKyAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiBy
ZXR1cm4gIm5vcm1hbGl6ZSI7CisgICAgICBjYXNlIEVPcERGZHg6IHJldHVybiAiZEZkeCI7Cisg
ICAgICBjYXNlIEVPcERGZHk6IHJldHVybiAiZEZkeSI7CisgICAgICBjYXNlIEVPcEZ3aWR0aDog
cmV0dXJuICJmd2lkdGgiOworICAgICAgY2FzZSBFT3BBbnk6IHJldHVybiAiYW55IjsKKyAgICAg
IGNhc2UgRU9wQWxsOiByZXR1cm4gImFsbCI7CisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAg
IH0KKyAgICByZXR1cm4gIiI7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBGaXJz
dCBzZXQgb2YgZnVuY3Rpb25zIGFyZSB0byBoZWxwIGJ1aWxkIHRoZSBpbnRlcm1lZGlhdGUgcmVw
cmVzZW50YXRpb24uCisvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBtZW1iZXIgZnVuY3Rpb25z
IG9mIHRoZSBub2Rlcy4KKy8vIFRoZXkgYXJlIGNhbGxlZCBmcm9tIHBhcnNlciBwcm9kdWN0aW9u
cy4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLworLy8gQWRkIGEgdGVybWluYWwgbm9k
ZSBmb3IgYW4gaWRlbnRpZmllciBpbiBhbiBleHByZXNzaW9uLgorLy8KKy8vIFJldHVybnMgdGhl
IGFkZGVkIG5vZGUuCisvLworVEludGVybVN5bWJvbCogVEludGVybWVkaWF0ZTo6YWRkU3ltYm9s
KGludCBpZCwgY29uc3QgVFN0cmluZyYgbmFtZSwgY29uc3QgVFR5cGUmIHR5cGUsIGNvbnN0IFRT
b3VyY2VMb2MmIGxpbmUpCit7CisgICAgVEludGVybVN5bWJvbCogbm9kZSA9IG5ldyBUSW50ZXJt
U3ltYm9sKGlkLCBuYW1lLCB0eXBlKTsKKyAgICBub2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAg
cmV0dXJuIG5vZGU7Cit9CisKKy8vCisvLyBDb25uZWN0IHR3byBub2RlcyB3aXRoIGEgbmV3IHBh
cmVudCB0aGF0IGRvZXMgYSBiaW5hcnkgb3BlcmF0aW9uIG9uIHRoZSBub2Rlcy4KKy8vCisvLyBS
ZXR1cm5zIHRoZSBhZGRlZCBub2RlLgorLy8KK1RJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6
YWRkQmluYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5
cGVkKiByaWdodCwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFN5bWJvbFRhYmxlJiBzeW1ib2xU
YWJsZSkKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9wRXF1YWw6CisgICAg
ICAgIGNhc2UgRU9wTm90RXF1YWw6CisgICAgICAgICAgICBpZiAobGVmdC0+aXNBcnJheSgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wTGVzc1RoYW46CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46CisgICAgICAgIGNh
c2UgRU9wTGVzc1RoYW5FcXVhbDoKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgor
ICAgICAgICAgICAgaWYgKGxlZnQtPmlzTWF0cml4KCkgfHwgbGVmdC0+aXNBcnJheSgpIHx8IGxl
ZnQtPmlzVmVjdG9yKCkgfHwgbGVmdC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6CisgICAgICAgIGNhc2UgRU9wTG9naWNhbFhv
cjoKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOgorICAgICAgICAgICAgaWYgKGxlZnQtPmdl
dEJhc2ljVHlwZSgpICE9IEVidEJvb2wgfHwgbGVmdC0+aXNNYXRyaXgoKSB8fCBsZWZ0LT5pc0Fy
cmF5KCkgfHwgbGVmdC0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQWRkOgor
ICAgICAgICBjYXNlIEVPcFN1YjoKKyAgICAgICAgY2FzZSBFT3BEaXY6CisgICAgICAgIGNhc2Ug
RU9wTXVsOgorICAgICAgICAgICAgaWYgKGxlZnQtPmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVj
dCB8fCBsZWZ0LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRCb29sKQorICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICAvLworICAgIC8v
IEZpcnN0IHRyeSBjb252ZXJ0aW5nIHRoZSBjaGlsZHJlbiB0byBjb21wYXRpYmxlIHR5cGVzLgor
ICAgIC8vCisgICAgaWYgKGxlZnQtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKSAmJiByaWdodC0+Z2V0
VHlwZSgpLmdldFN0cnVjdCgpKSB7CisgICAgICAgIGlmIChsZWZ0LT5nZXRUeXBlKCkgIT0gcmln
aHQtPmdldFR5cGUoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSB7CisgICAg
ICAgIFRJbnRlcm1UeXBlZCogY2hpbGQgPSBhZGRDb252ZXJzaW9uKG9wLCBsZWZ0LT5nZXRUeXBl
KCksIHJpZ2h0KTsKKyAgICAgICAgaWYgKGNoaWxkKQorICAgICAgICAgICAgcmlnaHQgPSBjaGls
ZDsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjaGlsZCA9IGFkZENvbnZlcnNpb24ob3As
IHJpZ2h0LT5nZXRUeXBlKCksIGxlZnQpOworICAgICAgICAgICAgaWYgKGNoaWxkKQorICAgICAg
ICAgICAgICAgIGxlZnQgPSBjaGlsZDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vCisgICAgLy8gTmVlZCBhIG5l
dyBub2RlIGhvbGRpbmcgdGhpbmdzIHRvZ2V0aGVyIHRoZW4uICBNYWtlCisgICAgLy8gb25lIGFu
ZCBwcm9tb3RlIGl0IHRvIHRoZSByaWdodCB0eXBlLgorICAgIC8vCisgICAgVEludGVybUJpbmFy
eSogbm9kZSA9IG5ldyBUSW50ZXJtQmluYXJ5KG9wKTsKKyAgICBub2RlLT5zZXRMaW5lKGxpbmUp
OworCisgICAgbm9kZS0+c2V0TGVmdChsZWZ0KTsKKyAgICBub2RlLT5zZXRSaWdodChyaWdodCk7
CisgICAgaWYgKCFub2RlLT5wcm9tb3RlKGluZm9TaW5rKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICAvLworICAgIC8vIFNlZSBpZiB3ZSBjYW4gZm9sZCBjb25zdGFudHMuCisgICAgLy8KKyAg
ICBUSW50ZXJtVHlwZWQqIHR5cGVkUmV0dXJuTm9kZSA9IDA7CisgICAgVEludGVybUNvbnN0YW50
VW5pb24gKmxlZnRUZW1wQ29uc3RhbnQgPSBsZWZ0LT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKyAg
ICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqcmlnaHRUZW1wQ29uc3RhbnQgPSByaWdodC0+Z2V0QXND
b25zdGFudFVuaW9uKCk7CisgICAgaWYgKGxlZnRUZW1wQ29uc3RhbnQgJiYgcmlnaHRUZW1wQ29u
c3RhbnQpIHsKKyAgICAgICAgdHlwZWRSZXR1cm5Ob2RlID0gbGVmdFRlbXBDb25zdGFudC0+Zm9s
ZChub2RlLT5nZXRPcCgpLCByaWdodFRlbXBDb25zdGFudCwgaW5mb1NpbmspOworCisgICAgICAg
IGlmICh0eXBlZFJldHVybk5vZGUpCisgICAgICAgICAgICByZXR1cm4gdHlwZWRSZXR1cm5Ob2Rl
OworICAgIH0KKworICAgIHJldHVybiBub2RlOworfQorCisvLworLy8gQ29ubmVjdCB0d28gbm9k
ZXMgdGhyb3VnaCBhbiBhc3NpZ25tZW50LgorLy8KKy8vIFJldHVybnMgdGhlIGFkZGVkIG5vZGUu
CisvLworVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRBc3NpZ24oVE9wZXJhdG9yIG9w
LCBUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VM
b2MmIGxpbmUpCit7CisgICAgLy8KKyAgICAvLyBMaWtlIGFkZGluZyBiaW5hcnkgbWF0aCwgZXhj
ZXB0IHRoZSBjb252ZXJzaW9uIGNhbiBvbmx5IGdvCisgICAgLy8gZnJvbSByaWdodCB0byBsZWZ0
LgorICAgIC8vCisgICAgVEludGVybUJpbmFyeSogbm9kZSA9IG5ldyBUSW50ZXJtQmluYXJ5KG9w
KTsKKyAgICBub2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAgVEludGVybVR5cGVkKiBjaGlsZCA9
IGFkZENvbnZlcnNpb24ob3AsIGxlZnQtPmdldFR5cGUoKSwgcmlnaHQpOworICAgIGlmIChjaGls
ZCA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIG5vZGUtPnNldExlZnQobGVmdCk7Cisg
ICAgbm9kZS0+c2V0UmlnaHQoY2hpbGQpOworICAgIGlmICghIG5vZGUtPnByb21vdGUoaW5mb1Np
bmspKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBub2RlOworfQorCisvLworLy8g
Q29ubmVjdCB0d28gbm9kZXMgdGhyb3VnaCBhbiBpbmRleCBvcGVyYXRvciwgd2hlcmUgdGhlIGxl
ZnQgbm9kZSBpcyB0aGUgYmFzZQorLy8gb2YgYW4gYXJyYXkgb3Igc3RydWN0LCBhbmQgdGhlIHJp
Z2h0IG5vZGUgaXMgYSBkaXJlY3Qgb3IgaW5kaXJlY3Qgb2Zmc2V0LgorLy8KKy8vIFJldHVybnMg
dGhlIGFkZGVkIG5vZGUuCisvLyBUaGUgY2FsbGVyIHNob3VsZCBzZXQgdGhlIHR5cGUgb2YgdGhl
IHJldHVybmVkIG5vZGUuCisvLworVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRJbmRl
eChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogYmFzZSwgVEludGVybVR5cGVkKiBpbmRleCwg
Y29uc3QgVFNvdXJjZUxvYyYgbGluZSkKK3sKKyAgICBUSW50ZXJtQmluYXJ5KiBub2RlID0gbmV3
IFRJbnRlcm1CaW5hcnkob3ApOworICAgIG5vZGUtPnNldExpbmUobGluZSk7CisgICAgbm9kZS0+
c2V0TGVmdChiYXNlKTsKKyAgICBub2RlLT5zZXRSaWdodChpbmRleCk7CisKKyAgICAvLyBjYWxs
ZXIgc2hvdWxkIHNldCB0aGUgdHlwZQorCisgICAgcmV0dXJuIG5vZGU7Cit9CisKKy8vCisvLyBB
ZGQgb25lIG5vZGUgYXMgdGhlIHBhcmVudCBvZiBhbm90aGVyIHRoYXQgaXQgb3BlcmF0ZXMgb24u
CisvLworLy8gUmV0dXJucyB0aGUgYWRkZWQgbm9kZS4KKy8vCitUSW50ZXJtVHlwZWQqIFRJbnRl
cm1lZGlhdGU6OmFkZFVuYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBjaGlsZE5v
ZGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCit7
CisgICAgVEludGVybVVuYXJ5KiBub2RlOworICAgIFRJbnRlcm1UeXBlZCogY2hpbGQgPSBjaGls
ZE5vZGUtPmdldEFzVHlwZWQoKTsKKworICAgIGlmIChjaGlsZCA9PSAwKSB7CisgICAgICAgIGlu
Zm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbGluZSwgIkJhZCB0eXBl
IGluIEFkZFVuYXJ5TWF0aCIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBzd2l0
Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDoKKyAgICAgICAgICAgIGlmIChj
aGlsZC0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidEJvb2wgfHwgY2hpbGQtPmdldFR5
cGUoKS5pc01hdHJpeCgpIHx8IGNoaWxkLT5nZXRUeXBlKCkuaXNBcnJheSgpIHx8IGNoaWxkLT5n
ZXRUeXBlKCkuaXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVt
ZW50OgorICAgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQb3N0
RGVjcmVtZW50OgorICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDoKKyAgICAgICAgY2FzZSBF
T3BOZWdhdGl2ZToKKyAgICAgICAgICAgIGlmIChjaGlsZC0+Z2V0VHlwZSgpLmdldEJhc2ljVHlw
ZSgpID09IEVidFN0cnVjdCB8fCBjaGlsZC0+Z2V0VHlwZSgpLmlzQXJyYXkoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorCisgICAg
Ly8KKyAgICAvLyBEbyB3ZSBuZWVkIHRvIHByb21vdGUgdGhlIG9wZXJhbmQ/CisgICAgLy8KKyAg
ICAvLyBOb3RlOiBJbXBsaWNpdCBwcm9tb3Rpb25zIHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBsYW5n
dWFnZS4KKyAgICAvLworICAgIFRCYXNpY1R5cGUgbmV3VHlwZSA9IEVidFZvaWQ7CisgICAgc3dp
dGNoIChvcCkgeworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDogICBuZXdUeXBlID0gRWJ0
SW50OyAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6ICBuZXdUeXBlID0g
RWJ0Qm9vbDsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OiBuZXdUeXBl
ID0gRWJ0RmxvYXQ7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAg
ICBpZiAobmV3VHlwZSAhPSBFYnRWb2lkKSB7CisgICAgICAgIGNoaWxkID0gYWRkQ29udmVyc2lv
bihvcCwgVFR5cGUobmV3VHlwZSwgY2hpbGQtPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3Jhcnks
CisgICAgICAgICAgICBjaGlsZC0+Z2V0Tm9taW5hbFNpemUoKSwKKyAgICAgICAgICAgIGNoaWxk
LT5pc01hdHJpeCgpLAorICAgICAgICAgICAgY2hpbGQtPmlzQXJyYXkoKSksCisgICAgICAgICAg
ICBjaGlsZCk7CisgICAgICAgIGlmIChjaGlsZCA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorCisgICAgLy8KKyAgICAvLyBGb3IgY29uc3RydWN0b3JzLCB3ZSBhcmUgbm93IGRv
bmUsIGl0J3MgYWxsIGluIHRoZSBjb252ZXJzaW9uLgorICAgIC8vCisgICAgc3dpdGNoIChvcCkg
eworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RCb29sOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OgorICAgICAgICAgICAgcmV0
dXJuIGNoaWxkOworICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICBUSW50ZXJt
Q29uc3RhbnRVbmlvbiAqY2hpbGRUZW1wQ29uc3RhbnQgPSAwOworICAgIGlmIChjaGlsZC0+Z2V0
QXNDb25zdGFudFVuaW9uKCkpCisgICAgICAgIGNoaWxkVGVtcENvbnN0YW50ID0gY2hpbGQtPmdl
dEFzQ29uc3RhbnRVbmlvbigpOworCisgICAgLy8KKyAgICAvLyBNYWtlIGEgbmV3IG5vZGUgZm9y
IHRoZSBvcGVyYXRvci4KKyAgICAvLworICAgIG5vZGUgPSBuZXcgVEludGVybVVuYXJ5KG9wKTsK
KyAgICBub2RlLT5zZXRMaW5lKGxpbmUpOworICAgIG5vZGUtPnNldE9wZXJhbmQoY2hpbGQpOwor
CisgICAgaWYgKCEgbm9kZS0+cHJvbW90ZShpbmZvU2luaykpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgaWYgKGNoaWxkVGVtcENvbnN0YW50KSAgeworICAgICAgICBUSW50ZXJtVHlwZWQqIG5l
d0NoaWxkID0gY2hpbGRUZW1wQ29uc3RhbnQtPmZvbGQob3AsIDAsIGluZm9TaW5rKTsKKworICAg
ICAgICBpZiAobmV3Q2hpbGQpCisgICAgICAgICAgICByZXR1cm4gbmV3Q2hpbGQ7CisgICAgfQor
CisgICAgcmV0dXJuIG5vZGU7Cit9CisKKy8vCisvLyBUaGlzIGlzIHRoZSBzYWZlIHdheSB0byBj
aGFuZ2UgdGhlIG9wZXJhdG9yIG9uIGFuIGFnZ3JlZ2F0ZSwgYXMgaXQKKy8vIGRvZXMgbG90cyBv
ZiBlcnJvciBjaGVja2luZyBhbmQgZml4aW5nLiAgRXNwZWNpYWxseSBmb3IgZXN0YWJsaXNoaW5n
CisvLyBhIGZ1bmN0aW9uIGNhbGwncyBvcGVyYXRpb24gb24gaXQncyBzZXQgb2YgcGFyYW1ldGVy
cy4gIFNlcXVlbmNlcworLy8gb2YgaW5zdHJ1Y3Rpb25zIGFyZSBhbHNvIGFnZ3JlZ2F0ZXMsIGJ1
dCB0aGV5IGp1c3QgZGlyZW5jdGx5IHNldAorLy8gdGhlaXIgb3BlcmF0b3IgdG8gRU9wU2VxdWVu
Y2UuCisvLworLy8gUmV0dXJucyBhbiBhZ2dyZWdhdGUgbm9kZSwgd2hpY2ggY291bGQgYmUgdGhl
IG9uZSBwYXNzZWQgaW4gaWYKKy8vIGl0IHdhcyBhbHJlYWR5IGFuIGFnZ3JlZ2F0ZSBidXQgbm8g
b3BlcmF0b3Igd2FzIHNldC4KKy8vCitUSW50ZXJtQWdncmVnYXRlKiBUSW50ZXJtZWRpYXRlOjpz
ZXRBZ2dyZWdhdGVPcGVyYXRvcihUSW50ZXJtTm9kZSogbm9kZSwgVE9wZXJhdG9yIG9wLCBjb25z
dCBUU291cmNlTG9jJiBsaW5lKQoreworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ05vZGU7CisK
KyAgICAvLworICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIGFnZ3JlZ2F0ZS4gIElmIG5vdCB0
dXJuIGl0IGludG8gb25lLgorICAgIC8vCisgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgYWdnTm9k
ZSA9IG5vZGUtPmdldEFzQWdncmVnYXRlKCk7CisgICAgICAgIGlmIChhZ2dOb2RlID09IDAgfHwg
YWdnTm9kZS0+Z2V0T3AoKSAhPSBFT3BOdWxsKSB7CisgICAgICAgICAgICAvLworICAgICAgICAg
ICAgLy8gTWFrZSBhbiBhZ2dyZWdhdGUgY29udGFpbmluZyB0aGlzIG5vZGUuCisgICAgICAgICAg
ICAvLworICAgICAgICAgICAgYWdnTm9kZSA9IG5ldyBUSW50ZXJtQWdncmVnYXRlKCk7CisgICAg
ICAgICAgICBhZ2dOb2RlLT5nZXRTZXF1ZW5jZSgpLnB1c2hfYmFjayhub2RlKTsKKyAgICAgICAg
fQorICAgIH0gZWxzZQorICAgICAgICBhZ2dOb2RlID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGUoKTsK
KworICAgIC8vCisgICAgLy8gU2V0IHRoZSBvcGVyYXRvci4KKyAgICAvLworICAgIGFnZ05vZGUt
PnNldE9wKG9wKTsKKyAgICBhZ2dOb2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAgcmV0dXJuIGFn
Z05vZGU7Cit9CisKKy8vCisvLyBDb252ZXJ0IG9uZSB0eXBlIHRvIGFub3RoZXIuCisvLworLy8g
UmV0dXJucyB0aGUgbm9kZSByZXByZXNlbnRpbmcgdGhlIGNvbnZlcnNpb24sIHdoaWNoIGNvdWxk
IGJlIHRoZSBzYW1lCisvLyBub2RlIHBhc3NlZCBpbiBpZiBubyBjb252ZXJzaW9uIHdhcyBuZWVk
ZWQuCisvLworLy8gUmV0dXJuIDAgaWYgYSBjb252ZXJzaW9uIGNhbid0IGJlIGRvbmUuCisvLwor
VEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRDb252ZXJzaW9uKFRPcGVyYXRvciBvcCwg
Y29uc3QgVFR5cGUmIHR5cGUsIFRJbnRlcm1UeXBlZCogbm9kZSkKK3sKKyAgICAvLworICAgIC8v
IERvZXMgdGhlIGJhc2UgdHlwZSBhbGxvdyBvcGVyYXRpb24/CisgICAgLy8KKyAgICBzd2l0Y2gg
KG5vZGUtPmdldEJhc2ljVHlwZSgpKSB7CisgICAgICAgIGNhc2UgRWJ0Vm9pZDoKKyAgICAgICAg
Y2FzZSBFYnRTYW1wbGVyMkQ6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6CisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorCisgICAgLy8K
KyAgICAvLyBPdGhlcndpc2UsIGlmIHR5cGVzIGFyZSBpZGVudGljYWwsIG5vIHByb2JsZW0KKyAg
ICAvLworICAgIGlmICh0eXBlID09IG5vZGUtPmdldFR5cGUoKSkKKyAgICAgICAgcmV0dXJuIG5v
ZGU7CisKKyAgICAvLworICAgIC8vIElmIG9uZSdzIGEgc3RydWN0dXJlLCB0aGVuIG5vIGNvbnZl
cnNpb25zLgorICAgIC8vCisgICAgaWYgKHR5cGUuZ2V0U3RydWN0KCkgfHwgbm9kZS0+Z2V0VHlw
ZSgpLmdldFN0cnVjdCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vCisgICAgLy8gSWYg
b25lJ3MgYW4gYXJyYXksIHRoZW4gbm8gY29udmVyc2lvbnMuCisgICAgLy8KKyAgICBpZiAodHlw
ZS5pc0FycmF5KCkgfHwgbm9kZS0+Z2V0VHlwZSgpLmlzQXJyYXkoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBUQmFzaWNUeXBlIHByb21vdGVUbzsKKworICAgIHN3aXRjaCAob3ApIHsKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gRXhwbGljaXQgY29udmVyc2lvbnMKKyAgICAgICAgLy8KKyAg
ICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29sOgorICAgICAgICAgICAgcHJvbW90ZVRvID0gRWJ0
Qm9vbDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0
OgorICAgICAgICAgICAgcHJvbW90ZVRvID0gRWJ0RmxvYXQ7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6CisgICAgICAgICAgICBwcm9tb3RlVG8gPSBF
YnRJbnQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAvLyBpbXBsaWNpdCBjb252ZXJzaW9ucyB3ZXJlIHJlbW92ZWQgZnJv
bSB0aGUgbGFuZ3VhZ2UuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgaWYgKHR5cGUuZ2V0
QmFzaWNUeXBlKCkgIT0gbm9kZS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFNpemUgYW5k
IHN0cnVjdHVyZSBjb3VsZCBzdGlsbCBkaWZmZXIsIGJ1dCB0aGF0J3MKKyAgICAgICAgICAgIC8v
IGhhbmRsZWQgYnkgb3BlcmF0b3IgcHJvbW90aW9uLgorICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgIHJldHVybiBub2RlOworICAgIH0KKworICAgIGlmIChub2RlLT5nZXRBc0NvbnN0YW50VW5p
b24oKSkgeworCisgICAgICAgIHJldHVybiAocHJvbW90ZUNvbnN0YW50VW5pb24ocHJvbW90ZVRv
LCBub2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKSkpOworICAgIH0gZWxzZSB7CisKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gQWRkIGEgbmV3IG5ld05vZGUgZm9yIHRoZSBjb252ZXJzaW9uLgorICAg
ICAgICAvLworICAgICAgICBUSW50ZXJtVW5hcnkqIG5ld05vZGUgPSAwOworCisgICAgICAgIFRP
cGVyYXRvciBuZXdPcCA9IEVPcE51bGw7CisgICAgICAgIHN3aXRjaCAocHJvbW90ZVRvKSB7Cisg
ICAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+
Z2V0QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgbmV3
T3AgPSBFT3BDb252SW50VG9GbG9hdDsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNl
IEVidEJvb2w6ICBuZXdPcCA9IEVPcENvbnZCb29sVG9GbG9hdDsgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZv
Lm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIkJhZCBwcm9t
b3Rpb24gbm9kZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRC
b29sOgorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgbmV3T3AgPSBFT3BDb252SW50VG9Cb29s
OyAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OiBuZXdPcCA9IEVP
cENvbnZGbG9hdFRvQm9vbDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVy
bmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIkJhZCBwcm9tb3Rpb24gbm9kZSIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAgICAgICAg
c3dpdGNoIChub2RlLT5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNl
IEVidEJvb2w6ICAgbmV3T3AgPSBFT3BDb252Qm9vbFRvSW50OyAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6ICBuZXdPcCA9IEVPcENvbnZGbG9hdFRvSW50OyBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAg
IGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGlu
ZSgpLCAiQmFkIHByb21vdGlvbiBub2RlIik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQmFkIHByb21vdGlvbiB0eXBlIik7
CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBUVHlwZSB0
eXBlKHByb21vdGVUbywgbm9kZS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgbm9kZS0+
Z2V0Tm9taW5hbFNpemUoKSwgbm9kZS0+aXNNYXRyaXgoKSwgbm9kZS0+aXNBcnJheSgpKTsKKyAg
ICAgICAgbmV3Tm9kZSA9IG5ldyBUSW50ZXJtVW5hcnkobmV3T3AsIHR5cGUpOworICAgICAgICBu
ZXdOb2RlLT5zZXRMaW5lKG5vZGUtPmdldExpbmUoKSk7CisgICAgICAgIG5ld05vZGUtPnNldE9w
ZXJhbmQobm9kZSk7CisKKyAgICAgICAgcmV0dXJuIG5ld05vZGU7CisgICAgfQorfQorCisvLwor
Ly8gU2FmZSB3YXkgdG8gY29tYmluZSB0d28gbm9kZXMgaW50byBhbiBhZ2dyZWdhdGUuICBXb3Jr
cyB3aXRoIG51bGwgcG9pbnRlcnMsCisvLyBhIG5vZGUgdGhhdCdzIG5vdCBhIGFnZ3JlZ2F0ZSB5
ZXQsIGV0Yy4KKy8vCisvLyBSZXR1cm5zIHRoZSByZXN1bHRpbmcgYWdncmVnYXRlLCB1bmxlc3Mg
MCB3YXMgcGFzc2VkIGluIGZvcgorLy8gYm90aCBleGlzdGluZyBub2Rlcy4KKy8vCitUSW50ZXJt
QWdncmVnYXRlKiBUSW50ZXJtZWRpYXRlOjpncm93QWdncmVnYXRlKFRJbnRlcm1Ob2RlKiBsZWZ0
LCBUSW50ZXJtTm9kZSogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCit7CisgICAgaWYg
KGxlZnQgPT0gMCAmJiByaWdodCA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRJbnRl
cm1BZ2dyZWdhdGUqIGFnZ05vZGUgPSAwOworICAgIGlmIChsZWZ0KQorICAgICAgICBhZ2dOb2Rl
ID0gbGVmdC0+Z2V0QXNBZ2dyZWdhdGUoKTsKKyAgICBpZiAoIWFnZ05vZGUgfHwgYWdnTm9kZS0+
Z2V0T3AoKSAhPSBFT3BOdWxsKSB7CisgICAgICAgIGFnZ05vZGUgPSBuZXcgVEludGVybUFnZ3Jl
Z2F0ZTsKKyAgICAgICAgaWYgKGxlZnQpCisgICAgICAgICAgICBhZ2dOb2RlLT5nZXRTZXF1ZW5j
ZSgpLnB1c2hfYmFjayhsZWZ0KTsKKyAgICB9CisKKyAgICBpZiAocmlnaHQpCisgICAgICAgIGFn
Z05vZGUtPmdldFNlcXVlbmNlKCkucHVzaF9iYWNrKHJpZ2h0KTsKKworICAgIGFnZ05vZGUtPnNl
dExpbmUobGluZSk7CisKKyAgICByZXR1cm4gYWdnTm9kZTsKK30KKworLy8KKy8vIFR1cm4gYW4g
ZXhpc3Rpbmcgbm9kZSBpbnRvIGFuIGFnZ3JlZ2F0ZS4KKy8vCisvLyBSZXR1cm5zIGFuIGFnZ3Jl
Z2F0ZSwgdW5sZXNzIDAgd2FzIHBhc3NlZCBpbiBmb3IgdGhlIGV4aXN0aW5nIG5vZGUuCisvLwor
VEludGVybUFnZ3JlZ2F0ZSogVEludGVybWVkaWF0ZTo6bWFrZUFnZ3JlZ2F0ZShUSW50ZXJtTm9k
ZSogbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKK3sKKyAgICBpZiAobm9kZSA9PSAwKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ05vZGUgPSBuZXcg
VEludGVybUFnZ3JlZ2F0ZTsKKyAgICBhZ2dOb2RlLT5nZXRTZXF1ZW5jZSgpLnB1c2hfYmFjayhu
b2RlKTsKKyAgICBhZ2dOb2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAgcmV0dXJuIGFnZ05vZGU7
Cit9CisKKy8vCisvLyBGb3IgImlmIiB0ZXN0IG5vZGVzLiAgVGhlcmUgYXJlIHRocmVlIGNoaWxk
cmVuOyBhIGNvbmRpdGlvbiwKKy8vIGEgdHJ1ZSBwYXRoLCBhbmQgYSBmYWxzZSBwYXRoLiAgVGhl
IHR3byBwYXRocyBhcmUgaW4gdGhlCisvLyBub2RlUGFpci4KKy8vCisvLyBSZXR1cm5zIHRoZSBz
ZWxlY3Rpb24gbm9kZSBjcmVhdGVkLgorLy8KK1RJbnRlcm1Ob2RlKiBUSW50ZXJtZWRpYXRlOjph
ZGRTZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtTm9kZVBhaXIgbm9kZVBhaXIs
IGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCit7CisgICAgLy8KKyAgICAvLyBGb3IgY29tcGlsZSB0
aW1lIGNvbnN0YW50IHNlbGVjdGlvbnMsIHBydW5lIHRoZSBjb2RlIGFuZAorICAgIC8vIHRlc3Qg
bm93LgorICAgIC8vCisKKyAgICBpZiAoY29uZC0+Z2V0QXNUeXBlZCgpICYmIGNvbmQtPmdldEFz
VHlwZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCkpIHsKKyAgICAgICAgaWYgKGNvbmQtPmdldEFz
Q29uc3RhbnRVbmlvbigpLT5nZXRCQ29uc3QoMCkgPT0gdHJ1ZSkKKyAgICAgICAgICAgIHJldHVy
biBub2RlUGFpci5ub2RlMSA/IHNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5vZGVQYWlyLm5vZGUxLCBF
T3BTZXF1ZW5jZSwgbm9kZVBhaXIubm9kZTEtPmdldExpbmUoKSkgOiBOVUxMOworICAgICAgICBl
bHNlCisgICAgICAgICAgICByZXR1cm4gbm9kZVBhaXIubm9kZTIgPyBzZXRBZ2dyZWdhdGVPcGVy
YXRvcihub2RlUGFpci5ub2RlMiwgRU9wU2VxdWVuY2UsIG5vZGVQYWlyLm5vZGUyLT5nZXRMaW5l
KCkpIDogTlVMTDsKKyAgICB9CisKKyAgICBUSW50ZXJtU2VsZWN0aW9uKiBub2RlID0gbmV3IFRJ
bnRlcm1TZWxlY3Rpb24oY29uZCwgbm9kZVBhaXIubm9kZTEsIG5vZGVQYWlyLm5vZGUyKTsKKyAg
ICBub2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAgcmV0dXJuIG5vZGU7Cit9CisKKworVEludGVy
bVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRDb21tYShUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRl
cm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCit7CisgICAgaWYgKGxlZnQt
PmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCAmJiByaWdodC0+Z2V0VHlwZSgp
LmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7CisgICAgICAgIHJldHVybiByaWdodDsKKyAg
ICB9IGVsc2UgeworICAgICAgICBUSW50ZXJtVHlwZWQgKmNvbW1hQWdncmVnYXRlID0gZ3Jvd0Fn
Z3JlZ2F0ZShsZWZ0LCByaWdodCwgbGluZSk7CisgICAgICAgIGNvbW1hQWdncmVnYXRlLT5nZXRB
c0FnZ3JlZ2F0ZSgpLT5zZXRPcChFT3BDb21tYSk7CisgICAgICAgIGNvbW1hQWdncmVnYXRlLT5z
ZXRUeXBlKHJpZ2h0LT5nZXRUeXBlKCkpOworICAgICAgICBjb21tYUFnZ3JlZ2F0ZS0+Z2V0VHlw
ZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CisgICAgICAgIHJldHVybiBj
b21tYUFnZ3JlZ2F0ZTsKKyAgICB9Cit9CisKKy8vCisvLyBGb3IgIj86IiB0ZXN0IG5vZGVzLiAg
VGhlcmUgYXJlIHRocmVlIGNoaWxkcmVuOyBhIGNvbmRpdGlvbiwKKy8vIGEgdHJ1ZSBwYXRoLCBh
bmQgYSBmYWxzZSBwYXRoLiAgVGhlIHR3byBwYXRocyBhcmUgc3BlY2lmaWVkCisvLyBhcyBzZXBh
cmF0ZSBwYXJhbWV0ZXJzLgorLy8KKy8vIFJldHVybnMgdGhlIHNlbGVjdGlvbiBub2RlIGNyZWF0
ZWQsIG9yIDAgaWYgb25lIGNvdWxkIG5vdCBiZS4KKy8vCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1l
ZGlhdGU6OmFkZFNlbGVjdGlvbihUSW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1UeXBlZCogdHJ1
ZUJsb2NrLCBUSW50ZXJtVHlwZWQqIGZhbHNlQmxvY2ssIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUp
Cit7CisgICAgLy8KKyAgICAvLyBHZXQgY29tcGF0aWJsZSB0eXBlcy4KKyAgICAvLworICAgIFRJ
bnRlcm1UeXBlZCogY2hpbGQgPSBhZGRDb252ZXJzaW9uKEVPcFNlcXVlbmNlLCB0cnVlQmxvY2st
PmdldFR5cGUoKSwgZmFsc2VCbG9jayk7CisgICAgaWYgKGNoaWxkKQorICAgICAgICBmYWxzZUJs
b2NrID0gY2hpbGQ7CisgICAgZWxzZSB7CisgICAgICAgIGNoaWxkID0gYWRkQ29udmVyc2lvbihF
T3BTZXF1ZW5jZSwgZmFsc2VCbG9jay0+Z2V0VHlwZSgpLCB0cnVlQmxvY2spOworICAgICAgICBp
ZiAoY2hpbGQpCisgICAgICAgICAgICB0cnVlQmxvY2sgPSBjaGlsZDsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBTZWUgaWYgYWxs
IHRoZSBvcGVyYW5kcyBhcmUgY29uc3RhbnQsIHRoZW4gZm9sZCBpdCBvdGhlcndpc2Ugbm90Lgor
ICAgIC8vCisKKyAgICBpZiAoY29uZC0+Z2V0QXNDb25zdGFudFVuaW9uKCkgJiYgdHJ1ZUJsb2Nr
LT5nZXRBc0NvbnN0YW50VW5pb24oKSAmJiBmYWxzZUJsb2NrLT5nZXRBc0NvbnN0YW50VW5pb24o
KSkgeworICAgICAgICBpZiAoY29uZC0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldEJDb25zdCgw
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlQmxvY2s7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZUJsb2NrOworICAgIH0KKworICAgIC8vCisgICAgLy8gTWFrZSBhIHNl
bGVjdGlvbiBub2RlLgorICAgIC8vCisgICAgVEludGVybVNlbGVjdGlvbiogbm9kZSA9IG5ldyBU
SW50ZXJtU2VsZWN0aW9uKGNvbmQsIHRydWVCbG9jaywgZmFsc2VCbG9jaywgdHJ1ZUJsb2NrLT5n
ZXRUeXBlKCkpOworICAgIG5vZGUtPmdldFR5cGVQb2ludGVyKCktPnNldFF1YWxpZmllcihFdnFU
ZW1wb3JhcnkpOworICAgIG5vZGUtPnNldExpbmUobGluZSk7CisKKyAgICByZXR1cm4gbm9kZTsK
K30KKworLy8KKy8vIENvbnN0YW50IHRlcm1pbmFsIG5vZGVzLiAgSGFzIGEgdW5pb24gdGhhdCBj
b250YWlucyBib29sLCBmbG9hdCBvciBpbnQgY29uc3RhbnRzCisvLworLy8gUmV0dXJucyB0aGUg
Y29uc3RhbnQgdW5pb24gbm9kZSBjcmVhdGVkLgorLy8KKworVEludGVybUNvbnN0YW50VW5pb24q
IFRJbnRlcm1lZGlhdGU6OmFkZENvbnN0YW50VW5pb24oQ29uc3RhbnRVbmlvbiogdW5pb25BcnJh
eVBvaW50ZXIsIGNvbnN0IFRUeXBlJiB0LCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQoreworICAg
IFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHVu
aW9uQXJyYXlQb2ludGVyLCB0KTsKKyAgICBub2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAgcmV0
dXJuIG5vZGU7Cit9CisKK1RJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkU3dpenpsZShU
VmVjdG9yRmllbGRzJiBmaWVsZHMsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCit7CisKKyAgICBU
SW50ZXJtQWdncmVnYXRlKiBub2RlID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGUoRU9wU2VxdWVuY2Up
OworCisgICAgbm9kZS0+c2V0TGluZShsaW5lKTsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiog
Y29uc3RJbnROb2RlOworICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2VWZWN0b3IgPSBub2Rl
LT5nZXRTZXF1ZW5jZSgpOworICAgIENvbnN0YW50VW5pb24qIHVuaW9uQXJyYXk7CisKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IGZpZWxkcy5udW07IGkrKykgeworICAgICAgICB1bmlvbkFycmF5
ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChm
aWVsZHMub2Zmc2V0c1tpXSk7CisgICAgICAgIGNvbnN0SW50Tm9kZSA9IGFkZENvbnN0YW50VW5p
b24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgbGlu
ZSk7CisgICAgICAgIHNlcXVlbmNlVmVjdG9yLnB1c2hfYmFjayhjb25zdEludE5vZGUpOworICAg
IH0KKworICAgIHJldHVybiBub2RlOworfQorCisvLworLy8gQ3JlYXRlIGxvb3Agbm9kZXMuCisv
LworVEludGVybU5vZGUqIFRJbnRlcm1lZGlhdGU6OmFkZExvb3AoVExvb3BUeXBlIHR5cGUsIFRJ
bnRlcm1Ob2RlKiBpbml0LCBUSW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1UeXBlZCogZXhwciwg
VEludGVybU5vZGUqIGJvZHksIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCit7CisgICAgVEludGVy
bU5vZGUqIG5vZGUgPSBuZXcgVEludGVybUxvb3AodHlwZSwgaW5pdCwgY29uZCwgZXhwciwgYm9k
eSk7CisgICAgbm9kZS0+c2V0TGluZShsaW5lKTsKKworICAgIHJldHVybiBub2RlOworfQorCisv
LworLy8gQWRkIGJyYW5jaGVzLgorLy8KK1RJbnRlcm1CcmFuY2gqIFRJbnRlcm1lZGlhdGU6OmFk
ZEJyYW5jaChUT3BlcmF0b3IgYnJhbmNoT3AsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCit7Cisg
ICAgcmV0dXJuIGFkZEJyYW5jaChicmFuY2hPcCwgMCwgbGluZSk7Cit9CisKK1RJbnRlcm1CcmFu
Y2gqIFRJbnRlcm1lZGlhdGU6OmFkZEJyYW5jaChUT3BlcmF0b3IgYnJhbmNoT3AsIFRJbnRlcm1U
eXBlZCogZXhwcmVzc2lvbiwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKK3sKKyAgICBUSW50ZXJt
QnJhbmNoKiBub2RlID0gbmV3IFRJbnRlcm1CcmFuY2goYnJhbmNoT3AsIGV4cHJlc3Npb24pOwor
ICAgIG5vZGUtPnNldExpbmUobGluZSk7CisKKyAgICByZXR1cm4gbm9kZTsKK30KKworLy8KKy8v
IFRoaXMgaXMgdG8gYmUgZXhlY3V0ZWQgb25jZSB0aGUgZmluYWwgcm9vdCBpcyBwdXQgb24gdG9w
IGJ5IHRoZSBwYXJzaW5nCisvLyBwcm9jZXNzLgorLy8KK2Jvb2wgVEludGVybWVkaWF0ZTo6cG9z
dFByb2Nlc3MoVEludGVybU5vZGUqIHJvb3QpCit7CisgICAgaWYgKHJvb3QgPT0gMCkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICAvLworICAgIC8vIEZpcnN0LCBmaW5pc2ggb2ZmIHRoZSB0
b3AgbGV2ZWwgc2VxdWVuY2UsIGlmIGFueQorICAgIC8vCisgICAgVEludGVybUFnZ3JlZ2F0ZSog
YWdnUm9vdCA9IHJvb3QtPmdldEFzQWdncmVnYXRlKCk7CisgICAgaWYgKGFnZ1Jvb3QgJiYgYWdn
Um9vdC0+Z2V0T3AoKSA9PSBFT3BOdWxsKQorICAgICAgICBhZ2dSb290LT5zZXRPcChFT3BTZXF1
ZW5jZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8KKy8vIFRoaXMgZGVsZXRlcyB0aGUg
dHJlZS4KKy8vCit2b2lkIFRJbnRlcm1lZGlhdGU6OnJlbW92ZShUSW50ZXJtTm9kZSogcm9vdCkK
K3sKKyAgICBpZiAocm9vdCkKKyAgICAgICAgUmVtb3ZlQWxsVHJlZU5vZGVzKHJvb3QpOworfQor
CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCisvLworLy8gTWVtYmVyIGZ1bmN0aW9ucyBvZiB0aGUgbm9kZXMgdXNlZCBmb3Ig
YnVpbGRpbmcgdGhlIHRyZWUuCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjZGVmaW5lIFJFUExBQ0VfSUZfSVMo
bm9kZSwgdHlwZSwgb3JpZ2luYWwsIHJlcGxhY2VtZW50KSBcCisgICAgaWYgKG5vZGUgPT0gb3Jp
Z2luYWwpIHsgXAorICAgICAgICBub2RlID0gc3RhdGljX2Nhc3Q8dHlwZSAqPihyZXBsYWNlbWVu
dCk7IFwKKyAgICAgICAgcmV0dXJuIHRydWU7IFwKKyAgICB9CisKK2Jvb2wgVEludGVybUxvb3A6
OnJlcGxhY2VDaGlsZE5vZGUoCisgICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9k
ZSAqcmVwbGFjZW1lbnQpCit7CisgICAgUkVQTEFDRV9JRl9JUyhpbml0LCBUSW50ZXJtTm9kZSwg
b3JpZ2luYWwsIHJlcGxhY2VtZW50KTsKKyAgICBSRVBMQUNFX0lGX0lTKGNvbmQsIFRJbnRlcm1U
eXBlZCwgb3JpZ2luYWwsIHJlcGxhY2VtZW50KTsKKyAgICBSRVBMQUNFX0lGX0lTKGV4cHIsIFRJ
bnRlcm1UeXBlZCwgb3JpZ2luYWwsIHJlcGxhY2VtZW50KTsKKyAgICBSRVBMQUNFX0lGX0lTKGJv
ZHksIFRJbnRlcm1Ob2RlLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBUSW50ZXJtQnJhbmNoOjpyZXBsYWNlQ2hpbGROb2RlKAorICAgIFRJbnRl
cm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KQoreworICAgIFJFUExB
Q0VfSUZfSVMoZXhwcmVzc2lvbiwgVEludGVybVR5cGVkLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQp
OworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUSW50ZXJtQmluYXJ5OjpyZXBsYWNlQ2hp
bGROb2RlKAorICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2Vt
ZW50KQoreworICAgIFJFUExBQ0VfSUZfSVMobGVmdCwgVEludGVybVR5cGVkLCBvcmlnaW5hbCwg
cmVwbGFjZW1lbnQpOworICAgIFJFUExBQ0VfSUZfSVMocmlnaHQsIFRJbnRlcm1UeXBlZCwgb3Jp
Z2luYWwsIHJlcGxhY2VtZW50KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVEludGVy
bVVuYXJ5OjpyZXBsYWNlQ2hpbGROb2RlKAorICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVElu
dGVybU5vZGUgKnJlcGxhY2VtZW50KQoreworICAgIFJFUExBQ0VfSUZfSVMob3BlcmFuZCwgVElu
dGVybVR5cGVkLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpOworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBUSW50ZXJtQWdncmVnYXRlOjpyZXBsYWNlQ2hpbGROb2RlKAorICAgIFRJbnRlcm1O
b2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KQoreworICAgIGZvciAoc2l6
ZV90IGlpID0gMDsgaWkgPCBzZXF1ZW5jZS5zaXplKCk7ICsraWkpCisgICAgeworICAgICAgICBS
RVBMQUNFX0lGX0lTKHNlcXVlbmNlW2lpXSwgVEludGVybU5vZGUsIG9yaWdpbmFsLCByZXBsYWNl
bWVudCk7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUSW50ZXJtU2VsZWN0
aW9uOjpyZXBsYWNlQ2hpbGROb2RlKAorICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVy
bU5vZGUgKnJlcGxhY2VtZW50KQoreworICAgIFJFUExBQ0VfSUZfSVMoY29uZGl0aW9uLCBUSW50
ZXJtVHlwZWQsIG9yaWdpbmFsLCByZXBsYWNlbWVudCk7CisgICAgUkVQTEFDRV9JRl9JUyh0cnVl
QmxvY2ssIFRJbnRlcm1Ob2RlLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpOworICAgIFJFUExBQ0Vf
SUZfSVMoZmFsc2VCbG9jaywgVEludGVybU5vZGUsIG9yaWdpbmFsLCByZXBsYWNlbWVudCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCisvLworLy8gU2F5IHdoZXRoZXIgb3Igbm90IGFuIG9wZXJh
dGlvbiBub2RlIGNoYW5nZXMgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuCisvLworYm9vbCBUSW50
ZXJtT3BlcmF0b3I6OmlzQXNzaWdubWVudCgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChvcCkgewor
ICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6CisgICAgICAgIGNhc2UgRU9wUG9zdERlY3Jl
bWVudDoKKyAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6CisgICAgICAgIGNhc2UgRU9wUHJl
RGVjcmVtZW50OgorICAgICAgICBjYXNlIEVPcEFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BBZGRB
c3NpZ246CisgICAgICAgIGNhc2UgRU9wU3ViQXNzaWduOgorICAgICAgICBjYXNlIEVPcE11bEFz
c2lnbjoKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjoKKyAgICAgICAg
Y2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhU
aW1lc1NjYWxhckFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2ln
bjoKKyAgICAgICAgY2FzZSBFT3BEaXZBc3NpZ246CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisK
Ky8vCisvLyByZXR1cm5zIHRydWUgaWYgdGhlIG9wZXJhdG9yIGlzIGZvciBvbmUgb2YgdGhlIGNv
bnN0cnVjdG9ycworLy8KK2Jvb2wgVEludGVybU9wZXJhdG9yOjppc0NvbnN0cnVjdG9yKCkgY29u
c3QKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMjoK
KyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMzOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVj
dFZlYzQ6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MjoKKyAgICAgICAgY2FzZSBFT3BD
b25zdHJ1Y3RNYXQzOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6CisgICAgICAgIGNh
c2UgRU9wQ29uc3RydWN0RmxvYXQ6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6Cisg
ICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzM6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0
SVZlYzQ6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OgorICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdEJWZWMyOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMzOgorICAgICAgICBj
YXNlIEVPcENvbnN0cnVjdEJWZWM0OgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6Cisg
ICAgICAgIGNhc2UgRU9wQ29uc3RydWN0U3RydWN0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQor
CisvLworLy8gTWFrZSBzdXJlIHRoZSB0eXBlIG9mIGEgdW5hcnkgb3BlcmF0b3IgaXMgYXBwcm9w
cmlhdGUgZm9yIGl0cworLy8gY29tYmluYXRpb24gb2Ygb3BlcmF0aW9uIGFuZCBvcGVyYW5kIHR5
cGUuCisvLworLy8gUmV0dXJucyBmYWxzZSBpbiBub3RoaW5nIG1ha2VzIHNlbnNlLgorLy8KK2Jv
b2wgVEludGVybVVuYXJ5Ojpwcm9tb3RlKFRJbmZvU2luayYpCit7CisgICAgc3dpdGNoIChvcCkg
eworICAgICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6CisgICAgICAgICAgICBpZiAob3BlcmFuZC0+
Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Qm9vbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZToKKyAgICAgICAg
Y2FzZSBFT3BQb3N0SW5jcmVtZW50OgorICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6Cisg
ICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OgorICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVu
dDoKKyAgICAgICAgICAgIGlmIChvcGVyYW5kLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRCb29sKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICAvLyBvcGVyYXRvcnMgZm9yIGJ1aWx0LWlucyBhcmUgYWxyZWFkeSB0eXBlIGNoZWNr
ZWQgYWdhaW5zdCB0aGVpciBwcm90b3R5cGUKKyAgICAgICAgY2FzZSBFT3BBbnk6CisgICAgICAg
IGNhc2UgRU9wQWxsOgorICAgICAgICBjYXNlIEVPcFZlY3RvckxvZ2ljYWxOb3Q6CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKG9w
ZXJhbmQtPmdldEJhc2ljVHlwZSgpICE9IEVidEZsb2F0KQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBzZXRUeXBlKG9wZXJhbmQtPmdldFR5cGUoKSk7CisgICAg
dHlwZS5zZXRRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKKworICAgIHJldHVybiB0cnVlOworfQor
CisvLworLy8gRXN0YWJsaXNoZXMgdGhlIHR5cGUgb2YgdGhlIHJlc3VsdGFudCBvcGVyYXRpb24s
IGFzIHdlbGwgYXMKKy8vIG1ha2VzIHRoZSBvcGVyYXRvciB0aGUgY29ycmVjdCBvbmUgZm9yIHRo
ZSBvcGVyYW5kcy4KKy8vCisvLyBSZXR1cm5zIGZhbHNlIGlmIG9wZXJhdG9yIGNhbid0IHdvcmsg
b24gb3BlcmFuZHMuCisvLworYm9vbCBUSW50ZXJtQmluYXJ5Ojpwcm9tb3RlKFRJbmZvU2luayYg
aW5mb1NpbmspCit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBvbmx5IGhhbmRsZXMgc2NhbGFycywg
dmVjdG9ycywgYW5kIG1hdHJpY2VzLgorICAgIGlmIChsZWZ0LT5pc0FycmF5KCkgfHwgcmlnaHQt
PmlzQXJyYXkoKSkgeworICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVy
bmFsRXJyb3IsIGdldExpbmUoKSwgIkludmFsaWQgb3BlcmF0aW9uIGZvciBhcnJheXMiKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIEdMU0wgRVMgMi4wIGRvZXMgbm90
IHN1cHBvcnQgaW1wbGljaXQgdHlwZSBjYXN0aW5nLgorICAgIC8vIFNvIHRoZSBiYXNpYyB0eXBl
IHNob3VsZCBhbHdheXMgbWF0Y2guCisgICAgaWYgKGxlZnQtPmdldEJhc2ljVHlwZSgpICE9IHJp
Z2h0LT5nZXRCYXNpY1R5cGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8KKyAg
ICAvLyBCYXNlIGFzc3VtcHRpb246ICBqdXN0IG1ha2UgdGhlIHR5cGUgdGhlIHNhbWUgYXMgdGhl
IGxlZnQKKyAgICAvLyBvcGVyYW5kLiAgVGhlbiBvbmx5IGRldmlhdGlvbnMgZnJvbSB0aGlzIG5l
ZWQgYmUgY29kZWQuCisgICAgLy8KKyAgICBzZXRUeXBlKGxlZnQtPmdldFR5cGUoKSk7CisKKyAg
ICAvLyBUaGUgcmVzdWx0IGdldHMgcHJvbW90ZWQgdG8gdGhlIGhpZ2hlc3QgcHJlY2lzaW9uLgor
ICAgIFRQcmVjaXNpb24gaGlnaGVyUHJlY2lzaW9uID0gR2V0SGlnaGVyUHJlY2lzaW9uKGxlZnQt
PmdldFByZWNpc2lvbigpLCByaWdodC0+Z2V0UHJlY2lzaW9uKCkpOworICAgIGdldFR5cGVQb2lu
dGVyKCktPnNldFByZWNpc2lvbihoaWdoZXJQcmVjaXNpb24pOworCisgICAgLy8gQmluYXJ5IG9w
ZXJhdGlvbnMgcmVzdWx0cyBpbiB0ZW1wb3JhcnkgdmFyaWFibGVzIHVubGVzcyBib3RoCisgICAg
Ly8gb3BlcmFuZHMgYXJlIGNvbnN0LgorICAgIGlmIChsZWZ0LT5nZXRRdWFsaWZpZXIoKSAhPSBF
dnFDb25zdCB8fCByaWdodC0+Z2V0UXVhbGlmaWVyKCkgIT0gRXZxQ29uc3QpIHsKKyAgICAgICAg
Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CisgICAgfQorCisg
ICAgaW50IHNpemUgPSBzdGQ6Om1heChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpLCByaWdodC0+Z2V0
Tm9taW5hbFNpemUoKSk7CisKKyAgICAvLworICAgIC8vIEFsbCBzY2FsYXJzLiBDb2RlIGFmdGVy
IHRoaXMgdGVzdCBhc3N1bWVzIHRoaXMgY2FzZSBpcyByZW1vdmVkIQorICAgIC8vCisgICAgaWYg
KHNpemUgPT0gMSkgeworICAgICAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgICAgICAvLworICAg
ICAgICAgICAgLy8gUHJvbW90ZSB0byBjb25kaXRpb25hbAorICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgIGNhc2UgRU9wRXF1YWw6CisgICAgICAgICAgICBjYXNlIEVPcE5vdEVxdWFsOgorICAg
ICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjoKKyAgICAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRo
YW46CisgICAgICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6CisgICAgICAgICAgICBjYXNl
IEVPcEdyZWF0ZXJUaGFuRXF1YWw6CisgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShFYnRC
b29sLCBFYnBVbmRlZmluZWQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgIC8vIEFuZCBhbmQgT3Igb3BlcmF0ZSBvbiBjb25kaXRpb25hbHMK
KyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6CisgICAgICAg
ICAgICBjYXNlIEVPcExvZ2ljYWxPcjoKKyAgICAgICAgICAgICAgICAvLyBCb3RoIG9wZXJhbmRz
IG11c3QgYmUgb2YgdHlwZSBib29sLgorICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5nZXRCYXNp
Y1R5cGUoKSAhPSBFYnRCb29sIHx8IHJpZ2h0LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgc2V0VHlw
ZShUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSByZWFjaCBoZXJl
LCBhdCBsZWFzdCBvbmUgb2YgdGhlIG9wZXJhbmRzIGlzIHZlY3RvciBvciBtYXRyaXguCisgICAg
Ly8gVGhlIG90aGVyIG9wZXJhbmQgY291bGQgYmUgYSBzY2FsYXIsIHZlY3Rvciwgb3IgbWF0cml4
LgorICAgIC8vIEFyZSB0aGUgc2l6ZXMgY29tcGF0aWJsZT8KKyAgICAvLworICAgIGlmIChsZWZ0
LT5nZXROb21pbmFsU2l6ZSgpICE9IHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpKSB7CisgICAgICAg
IC8vIElmIHRoZSBub21pbmFsIHNpemUgb2Ygb3BlcmFuZHMgZG8gbm90IG1hdGNoOgorICAgICAg
ICAvLyBPbmUgb2YgdGhlbSBtdXN0IGJlIHNjYWxhci4KKyAgICAgICAgaWYgKGxlZnQtPmdldE5v
bWluYWxTaXplKCkgIT0gMSAmJiByaWdodC0+Z2V0Tm9taW5hbFNpemUoKSAhPSAxKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBPcGVyYXRvciBjYW5ub3QgYmUgb2YgdHlw
ZSBwdXJlIGFzc2lnbm1lbnQuCisgICAgICAgIGlmIChvcCA9PSBFT3BBc3NpZ24gfHwgb3AgPT0g
RU9wSW5pdGlhbGl6ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAv
LworICAgIC8vIENhbiB0aGVzZSB0d28gb3BlcmFuZHMgYmUgY29tYmluZWQ/CisgICAgLy8KKyAg
ICBUQmFzaWNUeXBlIGJhc2ljVHlwZSA9IGxlZnQtPmdldEJhc2ljVHlwZSgpOworICAgIHN3aXRj
aCAob3ApIHsKKyAgICAgICAgY2FzZSBFT3BNdWw6CisgICAgICAgICAgICBpZiAoIWxlZnQtPmlz
TWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobGVm
dC0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc01h
dHJpeDsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgb3AgPSBF
T3BNYXRyaXhUaW1lc1NjYWxhcjsKKyAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShi
YXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCB0cnVlKSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5pc01hdHJpeCgp
ICYmICFyaWdodC0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgICAgIGlmIChyaWdodC0+aXNW
ZWN0b3IoKSkgeworICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzVmVjdG9y
OworICAgICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJl
Y2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUsIGZhbHNlKSk7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc1NjYWxhcjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkg
JiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRp
bWVzTWF0cml4OworICAgICAgICAgICAgfSBlbHNlIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiAh
cmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobGVmdC0+aXNWZWN0b3Io
KSAmJiByaWdodC0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBsZWF2ZSBh
cyBjb21wb25lbnQgcHJvZHVjdAorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNW
ZWN0b3IoKSB8fCByaWdodC0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgICAgICBvcCA9
IEVPcFZlY3RvclRpbWVzU2NhbGFyOworICAgICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBl
KGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUsIGZhbHNlKSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwg
Ik1pc3NpbmcgZWxzZXMiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNdWxBc3NpZ246Cisg
ICAgICAgICAgICBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAobGVmdC0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICAg
ICAgb3AgPSBFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjsKKyAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0
cml4KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAocmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIG9wID0gRU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ247CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5pc01hdHJpeCgpICYm
IHJpZ2h0LT5pc01hdHJpeCgpKSB7CisgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1l
c01hdHJpeEFzc2lnbjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIWxlZnQtPmlzTWF0cml4KCkg
JiYgIXJpZ2h0LT5pc01hdHJpeCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVj
dG9yKCkgJiYgcmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gbGVh
dmUgYXMgY29tcG9uZW50IHByb2R1Y3QKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQt
PmlzVmVjdG9yKCkgfHwgcmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCEgbGVmdC0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2ln
bjsKKyAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclBy
ZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCBmYWxzZSkpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNz
YWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJNaXNzaW5nIGVsc2VzIik7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BBc3NpZ246CisgICAgICAgIGNhc2UgRU9wSW5pdGlh
bGl6ZToKKyAgICAgICAgY2FzZSBFT3BBZGQ6CisgICAgICAgIGNhc2UgRU9wU3ViOgorICAgICAg
ICBjYXNlIEVPcERpdjoKKyAgICAgICAgY2FzZSBFT3BBZGRBc3NpZ246CisgICAgICAgIGNhc2Ug
RU9wU3ViQXNzaWduOgorICAgICAgICBjYXNlIEVPcERpdkFzc2lnbjoKKyAgICAgICAgICAgIGlm
ICgobGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNWZWN0b3IoKSkgfHwKKyAgICAgICAgICAg
ICAgICAobGVmdC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUs
IGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCBsZWZ0LT5pc01hdHJpeCgpIHx8
IHJpZ2h0LT5pc01hdHJpeCgpKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
IEVPcEVxdWFsOgorICAgICAgICBjYXNlIEVPcE5vdEVxdWFsOgorICAgICAgICBjYXNlIEVPcExl
c3NUaGFuOgorICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgorICAgICAgICBjYXNlIEVPcExl
c3NUaGFuRXF1YWw6CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKKyAgICAgICAg
ICAgIGlmICgobGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNWZWN0b3IoKSkgfHwKKyAgICAg
ICAgICAgICAgICAobGVmdC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgc2V0VHlwZShUVHlwZShFYnRC
b29sLCBFYnBVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHJldHVybiB0
cnVlOworfQorCitib29sIENvbXBhcmVTdHJ1Y3QoY29uc3QgVFR5cGUmIGxlZnROb2RlVHlwZSwg
Q29uc3RhbnRVbmlvbiogcmlnaHRVbmlvbkFycmF5LCBDb25zdGFudFVuaW9uKiBsZWZ0VW5pb25B
cnJheSkKK3sKKyAgICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSBsZWZ0Tm9kZVR5cGUuZ2V0
U3RydWN0KCktPmZpZWxkcygpOworCisgICAgc2l6ZV90IHN0cnVjdFNpemUgPSBmaWVsZHMuc2l6
ZSgpOworICAgIHNpemVfdCBpbmRleCA9IDA7CisKKyAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8
IHN0cnVjdFNpemU7IGorKykgeworICAgICAgICBzaXplX3Qgc2l6ZSA9IGZpZWxkc1tqXS0+dHlw
ZSgpLT5nZXRPYmplY3RTaXplKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoZmllbGRzW2pdLT50eXBlKCktPmdldEJhc2ljVHlw
ZSgpID09IEVidFN0cnVjdCkgeworICAgICAgICAgICAgICAgIGlmICghQ29tcGFyZVN0cnVjdHVy
ZSgqKGZpZWxkc1tqXS0+dHlwZSgpKSwgJnJpZ2h0VW5pb25BcnJheVtpbmRleF0sICZsZWZ0VW5p
b25BcnJheVtpbmRleF0pKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChsZWZ0VW5pb25BcnJheVtpbmRl
eF0gIT0gcmlnaHRVbmlvbkFycmF5W2luZGV4XSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ29tcGFyZVN0cnVjdHVyZShj
b25zdCBUVHlwZSYgbGVmdE5vZGVUeXBlLCBDb25zdGFudFVuaW9uKiByaWdodFVuaW9uQXJyYXks
IENvbnN0YW50VW5pb24qIGxlZnRVbmlvbkFycmF5KQoreworICAgIGlmIChsZWZ0Tm9kZVR5cGUu
aXNBcnJheSgpKSB7CisgICAgICAgIFRUeXBlIHR5cGVXaXRob3V0QXJyYXluZXNzID0gbGVmdE5v
ZGVUeXBlOworICAgICAgICB0eXBlV2l0aG91dEFycmF5bmVzcy5jbGVhckFycmF5bmVzcygpOwor
CisgICAgICAgIHNpemVfdCBhcnJheVNpemUgPSBsZWZ0Tm9kZVR5cGUuZ2V0QXJyYXlTaXplKCk7
CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheVNpemU7ICsraSkgeworICAg
ICAgICAgICAgc2l6ZV90IG9mZnNldCA9IHR5cGVXaXRob3V0QXJyYXluZXNzLmdldE9iamVjdFNp
emUoKSAqIGk7CisgICAgICAgICAgICBpZiAoIUNvbXBhcmVTdHJ1Y3QodHlwZVdpdGhvdXRBcnJh
eW5lc3MsICZyaWdodFVuaW9uQXJyYXlbb2Zmc2V0XSwgJmxlZnRVbmlvbkFycmF5W29mZnNldF0p
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZQor
ICAgICAgICByZXR1cm4gQ29tcGFyZVN0cnVjdChsZWZ0Tm9kZVR5cGUsIHJpZ2h0VW5pb25BcnJh
eSwgbGVmdFVuaW9uQXJyYXkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vCisvLyBUaGUg
Zm9sZCBmdW5jdGlvbnMgc2VlIGlmIGFuIG9wZXJhdGlvbiBvbiBhIGNvbnN0YW50IGNhbiBiZSBk
b25lIGluIHBsYWNlLAorLy8gd2l0aG91dCBnZW5lcmF0aW5nIHJ1bi10aW1lIGNvZGUuCisvLwor
Ly8gUmV0dXJucyB0aGUgbm9kZSB0byBrZWVwIHVzaW5nLCB3aGljaCBtYXkgb3IgbWF5IG5vdCBi
ZSB0aGUgbm9kZSBwYXNzZWQgaW4uCisvLworCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1Db25zdGFu
dFVuaW9uOjpmb2xkKFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBjb25zdGFudE5vZGUsIFRJ
bmZvU2luayYgaW5mb1NpbmspCit7CisgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IGdl
dFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAgc2l6ZV90IG9iamVjdFNpemUgPSBnZXRUeXBlKCku
Z2V0T2JqZWN0U2l6ZSgpOworCisgICAgaWYgKGNvbnN0YW50Tm9kZSkgeyAgLy8gYmluYXJ5IG9w
ZXJhdGlvbnMKKyAgICAgICAgVEludGVybUNvbnN0YW50VW5pb24gKm5vZGUgPSBjb25zdGFudE5v
ZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAgICAgICBDb25zdGFudFVuaW9uICpyaWdodFVu
aW9uQXJyYXkgPSBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOworICAgICAgICBUVHlwZSBy
ZXR1cm5UeXBlID0gZ2V0VHlwZSgpOworCisgICAgICAgIC8vIGZvciBhIGNhc2UgbGlrZSBmbG9h
dCBmID0gMS4yICsgdmVjNCgyLDMsNCw1KTsKKyAgICAgICAgaWYgKGNvbnN0YW50Tm9kZS0+Z2V0
VHlwZSgpLmdldE9iamVjdFNpemUoKSA9PSAxICYmIG9iamVjdFNpemUgPiAxKSB7CisgICAgICAg
ICAgICByaWdodFVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKKyAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgKytpKQorICAgICAg
ICAgICAgICAgIHJpZ2h0VW5pb25BcnJheVtpXSA9ICpub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRl
cigpOworICAgICAgICAgICAgcmV0dXJuVHlwZSA9IGdldFR5cGUoKTsKKyAgICAgICAgfSBlbHNl
IGlmIChjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCkgPiAxICYmIG9iamVj
dFNpemUgPT0gMSkgeworICAgICAgICAgICAgLy8gZm9yIGEgY2FzZSBsaWtlIGZsb2F0IGYgPSB2
ZWM0KDIsMyw0LDUpICsgMS4yOworICAgICAgICAgICAgdW5pb25BcnJheSA9IG5ldyBDb25zdGFu
dFVuaW9uW2NvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKV07CisgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9i
amVjdFNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIHVuaW9uQXJyYXlbaV0gPSAqZ2V0VW5p
b25BcnJheVBvaW50ZXIoKTsKKyAgICAgICAgICAgIHJldHVyblR5cGUgPSBub2RlLT5nZXRUeXBl
KCk7CisgICAgICAgICAgICBvYmplY3RTaXplID0gY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0
T2JqZWN0U2l6ZSgpOworICAgICAgICB9CisKKyAgICAgICAgQ29uc3RhbnRVbmlvbiogdGVtcENv
bnN0QXJyYXkgPSAwOworICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqdGVtcE5vZGU7CisK
KyAgICAgICAgYm9vbCBib29sTm9kZUZsYWcgPSBmYWxzZTsKKyAgICAgICAgc3dpdGNoKG9wKSB7
CisgICAgICAgICAgICBjYXNlIEVPcEFkZDoKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJh
eSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOworICAgICAgICAgICAgICAgIHsvLyBz
dXBwb3J0IE1TVkMrKzYuMAorICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG9iamVjdFNpemU7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFy
cmF5W2ldID0gdW5pb25BcnJheVtpXSArIHJpZ2h0VW5pb25BcnJheVtpXTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVPcFN1YjoK
KyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVj
dFNpemVdOworICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAorICAgICAgICAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSAtIHJp
Z2h0VW5pb25BcnJheVtpXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgIGNhc2UgRU9wTXVsOgorICAgICAgICAgICAgY2FzZSBFT3BWZWN0
b3JUaW1lc1NjYWxhcjoKKyAgICAgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXI6Cisg
ICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RT
aXplXTsKKyAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKKyAgICAgICAgICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAg
ICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gKiByaWdo
dFVuaW9uQXJyYXlbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeDoKKyAgICAgICAgICAgICAg
ICBpZiAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidEZsb2F0IHx8IG5vZGUtPmdldEJh
c2ljVHlwZSgpICE9IEVidEZsb2F0KSB7CisgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmlu
Zm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiQ29uc3RhbnQgRm9s
ZGluZyBjYW5ub3QgYmUgZG9uZSBmb3IgbWF0cml4IG11bHRpcGx5Iik7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB7Ly8g
c3VwcG9ydCBNU1ZDKys2LjAKKyAgICAgICAgICAgICAgICAgICAgaW50IHNpemUgPSBnZXROb21p
bmFsU2l6ZSgpOworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uW3NpemUqc2l6ZV07CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9
IDA7IHJvdyA8IHNpemU7IHJvdysrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGlu
dCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBzaXplOyBjb2x1bW4rKykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W3NpemUgKiBjb2x1bW4gKyByb3ddLnNldEZDb25z
dCgwLjBmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHNpemU7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RB
cnJheVtzaXplICogY29sdW1uICsgcm93XS5zZXRGQ29uc3QodGVtcENvbnN0QXJyYXlbc2l6ZSAq
IGNvbHVtbiArIHJvd10uZ2V0RkNvbnN0KCkgKyB1bmlvbkFycmF5W2kgKiBzaXplICsgcm93XS5n
ZXRGQ29uc3QoKSAqIChyaWdodFVuaW9uQXJyYXlbY29sdW1uICogc2l6ZSArIGldLmdldEZDb25z
dCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFT3BEaXY6CisgICAgICAgICAgICAg
ICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKKyAgICAg
ICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKKyAgICAgICAgICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7CisgICAgICAgICAgICBj
YXNlIEVidEZsb2F0OgorICAgICAgICAgICAgICAgIGlmIChyaWdodFVuaW9uQXJyYXlbaV0gPT0g
MC4wZikgeworICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZp
eFdhcm5pbmcsIGdldExpbmUoKSwgIkRpdmlkZSBieSB6ZXJvIGVycm9yIGR1cmluZyBjb25zdGFu
dCBmb2xkaW5nIik7CisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZD
b25zdCh1bmlvbkFycmF5W2ldLmdldEZDb25zdCgpIDwgMCA/IC1GTFRfTUFYIDogRkxUX01BWCk7
CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFy
cmF5W2ldLnNldEZDb25zdCh1bmlvbkFycmF5W2ldLmdldEZDb25zdCgpIC8gcmlnaHRVbmlvbkFy
cmF5W2ldLmdldEZDb25zdCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtpXSA9
PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4
V2FybmluZywgZ2V0TGluZSgpLCAiRGl2aWRlIGJ5IHplcm8gZXJyb3IgZHVyaW5nIGNvbnN0YW50
IGZvbGRpbmciKTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0SUNv
bnN0KElOVF9NQVgpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAg
ICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRJQ29uc3QodW5pb25BcnJheVtpXS5nZXRJQ29uc3QoKSAv
IHJpZ2h0VW5pb25BcnJheVtpXS5nZXRJQ29uc3QoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVz
c2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiQ29uc3RhbnQgZm9sZGluZyBj
YW5ub3QgYmUgZG9uZSBmb3IgXCIvXCIiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBFT3BN
YXRyaXhUaW1lc1ZlY3RvcjoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0QmFzaWNUeXBl
KCkgIT0gRWJ0RmxvYXQpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNz
YWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJDb25zdGFudCBGb2xkaW5nIGNh
bm5vdCBiZSBkb25lIGZvciBtYXRyaXggdGltZXMgdmVjdG9yIik7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW2dldE5vbWluYWxTaXplKCldOworCisgICAgICAg
ICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCisgICAgICAgICAgICAgICAgICAgIGZvciAo
aW50IHNpemUgPSBnZXROb21pbmFsU2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KDAuMGYpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzaXplOyBqKyspIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3Qo
dGVtcENvbnN0QXJyYXlbaV0uZ2V0RkNvbnN0KCkgKyAoKHVuaW9uQXJyYXlbaipzaXplICsgaV0u
Z2V0RkNvbnN0KCkpICogcmlnaHRVbmlvbkFycmF5W2pdLmdldEZDb25zdCgpKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlv
bih0ZW1wQ29uc3RBcnJheSwgbm9kZS0+Z2V0VHlwZSgpKTsKKyAgICAgICAgICAgICAgICB0ZW1w
Tm9kZS0+c2V0TGluZShnZXRMaW5lKCkpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBO
b2RlOworCisgICAgICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4OgorICAgICAgICAg
ICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9y
LCBnZXRMaW5lKCksICJDb25zdGFudCBGb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciB2ZWN0b3Ig
dGltZXMgbWF0cml4Iik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50
VW5pb25bZ2V0Tm9taW5hbFNpemUoKV07CisgICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNW
QysrNi4wCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHNpemUgPSBnZXROb21pbmFsU2l6
ZSgpLCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgdGVt
cENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KDAuMGYpOworICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgaiA9IDA7IGogPCBzaXplOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QodGVtcENvbnN0QXJyYXlbaV0uZ2V0RkNv
bnN0KCkgKyAoKHVuaW9uQXJyYXlbal0uZ2V0RkNvbnN0KCkpICogcmlnaHRVbmlvbkFycmF5W2kq
c2l6ZSArIGpdLmdldEZDb25zdCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDogLy8gdGhpcyBjb2RlIGlzIHdy
aXR0ZW4gZm9yIHBvc3NpYmxlIGZ1dHVyZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJy
ZW50bHkKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
W29iamVjdFNpemVdOworICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAorICAg
ICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtp
XSAmJiByaWdodFVuaW9uQXJyYXlbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjogLy8gdGhpcyBjb2Rl
IGlzIHdyaXR0ZW4gZm9yIHBvc3NpYmxlIGZ1dHVyZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRl
ZCBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFu
dFVuaW9uW29iamVjdFNpemVdOworICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYu
MAorICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7
IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25B
cnJheVtpXSB8fCByaWdodFVuaW9uQXJyYXlbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6CisgICAg
ICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXpl
XTsKKyAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKKyAgICAgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAg
ICAgICAgY2FzZSBFYnRCb29sOiB0ZW1wQ29uc3RBcnJheVtpXS5zZXRCQ29uc3QoKHVuaW9uQXJy
YXlbaV0gPT0gcmlnaHRVbmlvbkFycmF5W2ldKSA/IGZhbHNlIDogdHJ1ZSk7IGJyZWFrOworICAg
ICAgICAgICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjoKKyAgICAgICAgICAgICAgICBh
c3NlcnQob2JqZWN0U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9
IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5z
ZXRCQ29uc3QoKnVuaW9uQXJyYXkgPCAqcmlnaHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAgICAg
ICByZXR1cm5UeXBlID0gVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgor
ICAgICAgICAgICAgICAgIGFzc2VydChvYmplY3RTaXplID09IDEpOworICAgICAgICAgICAgICAg
IHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAg
dGVtcENvbnN0QXJyYXktPnNldEJDb25zdCgqdW5pb25BcnJheSA+ICpyaWdodFVuaW9uQXJyYXkp
OworICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmlu
ZWQsIEV2cUNvbnN0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
RU9wTGVzc1RoYW5FcXVhbDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IGFzc2VydChvYmplY3RTaXplID09IDEpOworICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVu
aW9uIGNvbnN0YW50OworICAgICAgICAgICAgICAgICAgICBjb25zdGFudC5zZXRCQ29uc3QoKnVu
aW9uQXJyYXkgPiAqcmlnaHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENv
bnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICAgICAgdGVt
cENvbnN0QXJyYXktPnNldEJDb25zdCghY29uc3RhbnQuZ2V0QkNvbnN0KCkpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm5UeXBlID0gVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFD
b25zdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIGFzc2VydChvYmplY3RTaXplID09IDEpOworICAgICAgICAgICAg
ICAgICAgICBDb25zdGFudFVuaW9uIGNvbnN0YW50OworICAgICAgICAgICAgICAgICAgICBjb25z
dGFudC5zZXRCQ29uc3QoKnVuaW9uQXJyYXkgPCAqcmlnaHRVbmlvbkFycmF5KTsKKyAgICAgICAg
ICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAg
ICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCghY29uc3RhbnQuZ2V0QkNv
bnN0KCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gVFR5cGUoRWJ0Qm9vbCwg
RWJwVW5kZWZpbmVkLCBFdnFDb25zdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSBFT3BFcXVhbDoKKyAgICAgICAgICAg
ICAgICBpZiAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoIUNvbXBhcmVTdHJ1Y3R1cmUobm9kZS0+Z2V0VHlwZSgpLCBub2Rl
LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLCB1bmlvbkFycmF5KSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKysp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmlvbkFycmF5W2ldICE9IHJpZ2h0VW5p
b25BcnJheVtpXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAvLyBicmVhayBvdXQg
b2YgZm9yIGxvb3AKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5
ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgaWYgKCFib29sTm9kZUZs
YWcpIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCh0cnVl
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVu
aW9uKHRlbXBDb25zdEFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0
KSk7CisgICAgICAgICAgICAgICAgdGVtcE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKKworICAg
ICAgICAgICAgICAgIHJldHVybiB0ZW1wTm9kZTsKKworICAgICAgICAgICAgY2FzZSBFT3BOb3RF
cXVhbDoKKyAgICAgICAgICAgICAgICBpZiAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVi
dFN0cnVjdCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoQ29tcGFyZVN0cnVjdHVyZShub2Rl
LT5nZXRUeXBlKCksIG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCksIHVuaW9uQXJyYXkpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbE5vZGVGbGFnID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG9iamVjdFNpemU7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaW9uQXJy
YXlbaV0gPT0gcmlnaHRVbmlvbkFycmF5W2ldKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbE5vZGVGbGFnID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsgIC8vIGJyZWFrIG91dCBvZiBmb3IgbG9vcAorICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWJvb2xOb2RlRmxhZykgeworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJh
eS0+c2V0QkNvbnN0KHRydWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdChmYWxz
ZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdGVtcE5vZGUgPSBuZXcg
VEludGVybUNvbnN0YW50VW5pb24odGVtcENvbnN0QXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QpKTsKKyAgICAgICAgICAgICAgICB0ZW1wTm9kZS0+c2V0TGluZShn
ZXRMaW5lKCkpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOworCisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiSW52YWxpZCBvcGVyYXRvciBmb3IgY29uc3Rh
bnQgZm9sZGluZyIpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAg
ICAgIHRlbXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCBy
ZXR1cm5UeXBlKTsKKyAgICAgICAgdGVtcE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKKworICAg
ICAgICByZXR1cm4gdGVtcE5vZGU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gRG8gdW5hcnkgb3BlcmF0aW9ucworICAgICAgICAvLworICAgICAgICBUSW50ZXJtQ29uc3Rh
bnRVbmlvbiAqbmV3Tm9kZSA9IDA7CisgICAgICAgIENvbnN0YW50VW5pb24qIHRlbXBDb25zdEFy
cmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKSB7CisgICAgICAgICAgICBzd2l0Y2gob3ApIHsK
KyAgICAgICAgICAgICAgICBjYXNlIEVPcE5lZ2F0aXZlOgorICAgICAgICAgICAgICAgICAgICBz
d2l0Y2ggKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBFYnRGbG9hdDogdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KC11bmlvbkFycmF5
W2ldLmdldEZDb25zdCgpKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVi
dEludDogICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRJQ29uc3QoLXVuaW9uQXJyYXlbaV0uZ2V0SUNv
bnN0KCkpOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5h
bEVycm9yLCBnZXRMaW5lKCksICJVbmFyeSBvcGVyYXRpb24gbm90IGZvbGRlZCBpbnRvIGNvbnN0
YW50Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSBFT3BMb2dpY2FsTm90OiAvLyB0aGlzIGNvZGUgaXMgd3JpdHRlbiBmb3IgcG9zc2libGUg
ZnV0dXJlIHVzZSwgd2lsbCBub3QgZ2V0IGV4ZWN1dGVkIGN1cnJlbnRseQorICAgICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBFYnRCb29sOiAgdGVtcENvbnN0QXJyYXlbaV0uc2V0QkNvbnN0KCF1
bmlvbkFycmF5W2ldLmdldEJDb25zdCgpKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVz
c2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiVW5hcnkgb3BlcmF0aW9uIG5v
dCBmb2xkZWQgaW50byBjb25zdGFudCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG5ld05vZGUgPSBuZXcgVEludGVy
bUNvbnN0YW50VW5pb24odGVtcENvbnN0QXJyYXksIGdldFR5cGUoKSk7CisgICAgICAgIG5ld05v
ZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKKyAgICAgICAgcmV0dXJuIG5ld05vZGU7CisgICAgfQor
fQorCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OnByb21vdGVDb25zdGFudFVuaW9uKFRC
YXNpY1R5cGUgcHJvbW90ZVRvLCBUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSkKK3sKKyAgICBz
aXplX3Qgc2l6ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CisKKyAgICBDb25z
dGFudFVuaW9uICpsZWZ0VW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW3NpemVdOworCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKworICAgICAgICBzd2l0Y2gg
KHByb21vdGVUbykgeworICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAg
ICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFy
cmF5W2ldLnNldEZDb25zdChzdGF0aWNfY2FzdDxmbG9hdD4obm9kZS0+Z2V0SUNvbnN0KGkpKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBFYnRCb29sOgorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0
RkNvbnN0KHN0YXRpY19jYXN0PGZsb2F0Pihub2RlLT5nZXRCQ29uc3QoaSkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0
OgorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0RkNvbnN0KHN0
YXRpY19jYXN0PGZsb2F0Pihub2RlLT5nZXRGQ29uc3QoaSkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBu
b2RlLT5nZXRMaW5lKCksICJDYW5ub3QgcHJvbW90ZSIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5n
ZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJ
bnQ6CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRJQ29uc3Qo
c3RhdGljX2Nhc3Q8aW50Pihub2RlLT5nZXRJQ29uc3QoaSkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6CisgICAgICAg
ICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRJQ29uc3Qoc3RhdGljX2Nhc3Q8
aW50Pihub2RlLT5nZXRCQ29uc3QoaSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgICAgICAg
ICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0SUNvbnN0KHN0YXRpY19jYXN0PGludD4obm9kZS0+
Z2V0RkNvbnN0KGkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmlu
Zm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQ2Fubm90
IHByb21vdGUiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0Qm9v
bDoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUo
KSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldEJDb25zdChub2RlLT5nZXRJQ29uc3QoaSkgIT0g
MCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSBFYnRCb29sOgorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0u
c2V0QkNvbnN0KG5vZGUtPmdldEJDb25zdChpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldEJDb25zdChub2RlLT5nZXRGQ29uc3QoaSkg
IT0gMC4wZik7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVz
c2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQ2Fubm90IHByb21v
dGUiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIG5v
ZGUtPmdldExpbmUoKSwgIkluY29ycmVjdCBkYXRhIHR5cGUgZm91bmQiKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgfQorCisgICAgY29uc3QgVFR5cGUmIHQg
PSBub2RlLT5nZXRUeXBlKCk7CisKKyAgICByZXR1cm4gYWRkQ29uc3RhbnRVbmlvbihsZWZ0VW5p
b25BcnJheSwgVFR5cGUocHJvbW90ZVRvLCB0LmdldFByZWNpc2lvbigpLCB0LmdldFF1YWxpZmll
cigpLCB0LmdldE5vbWluYWxTaXplKCksIHQuaXNNYXRyaXgoKSwgdC5pc0FycmF5KCkpLCBub2Rl
LT5nZXRMaW5lKCkpOworfQorCisvLyBzdGF0aWMKK1RTdHJpbmcgVEludGVybVRyYXZlcnNlcjo6
aGFzaChjb25zdCBUU3RyaW5nJiBuYW1lLCBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbikK
K3sKKyAgICBpZiAoaGFzaEZ1bmN0aW9uID09IE5VTEwgfHwgbmFtZS5lbXB0eSgpKQorICAgICAg
ICByZXR1cm4gbmFtZTsKKyAgICBraHJvbm9zX3VpbnQ2NF90IG51bWJlciA9ICgqaGFzaEZ1bmN0
aW9uKShuYW1lLmNfc3RyKCksIG5hbWUubGVuZ3RoKCkpOworICAgIFRTdHJpbmdTdHJlYW0gc3Ry
ZWFtOworICAgIHN0cmVhbSA8PCBIQVNIRURfTkFNRV9QUkVGSVggPDwgc3RkOjpoZXggPDwgbnVt
YmVyOworICAgIFRTdHJpbmcgaGFzaGVkTmFtZSA9IHN0cmVhbS5zdHIoKTsKKyAgICByZXR1cm4g
aGFzaGVkTmFtZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL01NYXAuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL01NYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMzA4NjcxNTE0Y2M2M2U4ZTcw
YTAzZTM4NjhiNTc5NTFiODVlOTg3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTU1hcC5oCkBAIC0wLDAgKzEsNTYgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX01NQVBfSU5DTFVERURfCisjZGVmaW5lIF9N
TUFQX0lOQ0xVREVEXworCisvLworLy8gRW5jYXBzdWxhdGUgbWVtb3J5IG1hcHBlZCBmaWxlcwor
Ly8KKworY2xhc3MgVE1NYXAgeworcHVibGljOgorICAgIFRNTWFwKGNvbnN0IGNoYXIqIGZpbGVO
YW1lKSA6IAorICAgICAgICBmU2l6ZSgtMSksIC8vIC0xIGlzIHRoZSBlcnJvciB2YWx1ZSByZXR1
cm5lZCBieSBHZXRGaWxlU2l6ZSgpCisgICAgICAgIGZwKE5VTEwpLAorICAgICAgICBmQnVmZigw
KSAgIC8vIDAgaXMgdGhlIGVycm9yIHZhbHVlIHJldHVybmVkIGJ5IE1hcFZpZXdPZkZpbGUoKQor
ICAgIHsKKyAgICAgICAgaWYgKChmcCA9IGZvcGVuKGZpbGVOYW1lLCAiciIpKSA9PSBOVUxMKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjaGFyIGMgPSBnZXRjKGZwKTsKKyAgICAgICAg
ZlNpemUgPSAwOworICAgICAgICB3aGlsZSAoYyAhPSBFT0YpIHsKKyAgICAgICAgICAgIGZTaXpl
Kys7CisgICAgICAgICAgICBjID0gZ2V0YyhmcCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGMg
PT0gRU9GKQorICAgICAgICAgICAgZlNpemUrKzsKKyAgICAgICAgcmV3aW5kKGZwKTsKKyAgICAg
ICAgZkJ1ZmYgPSAoY2hhciopbWFsbG9jKHNpemVvZihjaGFyKSAqIGZTaXplKTsKKyAgICAgICAg
aW50IGNvdW50ID0gMDsKKyAgICAgICAgYyA9IGdldGMoZnApOworICAgICAgICB3aGlsZSAoYyAh
PSBFT0YpIHsKKyAgICAgICAgICAgIGZCdWZmW2NvdW50KytdID0gYzsKKyAgICAgICAgICAgIGMg
PSBnZXRjKGZwKTsKKyAgICAgICAgfQorICAgICAgICBmQnVmZltjb3VudCsrXSA9IGM7CisgICAg
fQorCisgICAgY2hhciogZ2V0RGF0YSgpIHsgcmV0dXJuIGZCdWZmOyB9CisgICAgaW50ICAgZ2V0
U2l6ZSgpIHsgcmV0dXJuIGZTaXplOyB9CisKKyAgICB+VE1NYXAoKSB7CisgICAgICAgIGlmIChm
cCAhPSBOVUxMKQorICAgICAgICAgICAgZmNsb3NlKGZwKTsKKyAgICB9CisgICAgCitwcml2YXRl
OgorICAgIGludCAgICAgICAgICAgICBmU2l6ZTsgICAgICAvLyBzaXplIG9mIGZpbGUgdG8gbWFw
IGluCisgICAgRklMRSAqZnA7CisgICAgY2hhciogICAgICAgICAgIGZCdWZmOyAgICAgIC8vIHRo
ZSBhY3R1YWwgZGF0YTsKK307CisKKyNlbmRpZiAvLyBfTU1BUF9JTkNMVURFRF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL01hcExv
bmdWYXJpYWJsZU5hbWVzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZjYyOWMy
NmIxYTQ2NDU4MGM4ZTJiM2RlODBkNzI0NGMwZDUzMjljCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTWFwTG9uZ1Zhcmlh
YmxlTmFtZXMuY3BwCkBAIC0wLDAgKzEsMTE1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5oIgorCituYW1l
c3BhY2UgeworCitUU3RyaW5nIG1hcExvbmdOYW1lKHNpemVfdCBpZCwgY29uc3QgVFN0cmluZyYg
bmFtZSwgYm9vbCBpc0dsb2JhbCkKK3sKKyAgICBBU1NFUlQobmFtZS5zaXplKCkgPiBNQVhfU0hP
UlRFTkVEX0lERU5USUZJRVJfU0laRSk7CisgICAgVFN0cmluZ1N0cmVhbSBzdHJlYW07CisgICAg
c3RyZWFtIDw8ICJ3ZWJnbF8iOworICAgIGlmIChpc0dsb2JhbCkKKyAgICAgICAgc3RyZWFtIDw8
ICJnIjsKKyAgICBzdHJlYW0gPDwgaWQ7CisgICAgaWYgKG5hbWVbMF0gIT0gJ18nKQorICAgICAg
ICBzdHJlYW0gPDwgIl8iOworICAgIHN0cmVhbSA8PCBuYW1lLnN1YnN0cigwLCBNQVhfU0hPUlRF
TkVEX0lERU5USUZJRVJfU0laRSAtIHN0cmVhbS5zdHIoKS5zaXplKCkpOworICAgIHJldHVybiBz
dHJlYW0uc3RyKCk7Cit9CisKK0xvbmdOYW1lTWFwKiBnTG9uZ05hbWVNYXBJbnN0YW5jZSA9IE5V
TEw7CisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKworTG9uZ05hbWVNYXA6OkxvbmdOYW1l
TWFwKCkKKyAgICA6IHJlZkNvdW50KDApCit7Cit9CisKK0xvbmdOYW1lTWFwOjp+TG9uZ05hbWVN
YXAoKQoreworfQorCisvLyBzdGF0aWMKK0xvbmdOYW1lTWFwKiBMb25nTmFtZU1hcDo6R2V0SW5z
dGFuY2UoKQoreworICAgIGlmIChnTG9uZ05hbWVNYXBJbnN0YW5jZSA9PSBOVUxMKQorICAgICAg
ICBnTG9uZ05hbWVNYXBJbnN0YW5jZSA9IG5ldyBMb25nTmFtZU1hcDsKKyAgICBnTG9uZ05hbWVN
YXBJbnN0YW5jZS0+cmVmQ291bnQrKzsKKyAgICByZXR1cm4gZ0xvbmdOYW1lTWFwSW5zdGFuY2U7
Cit9CisKK3ZvaWQgTG9uZ05hbWVNYXA6OlJlbGVhc2UoKQoreworICAgIEFTU0VSVChnTG9uZ05h
bWVNYXBJbnN0YW5jZSA9PSB0aGlzKTsKKyAgICBBU1NFUlQocmVmQ291bnQgPiAwKTsKKyAgICBy
ZWZDb3VudC0tOworICAgIGlmIChyZWZDb3VudCA9PSAwKSB7CisgICAgICAgIGRlbGV0ZSBnTG9u
Z05hbWVNYXBJbnN0YW5jZTsKKyAgICAgICAgZ0xvbmdOYW1lTWFwSW5zdGFuY2UgPSBOVUxMOwor
ICAgIH0KK30KKworY29uc3QgY2hhciogTG9uZ05hbWVNYXA6OkZpbmQoY29uc3QgY2hhciogb3Jp
Z2luYWxOYW1lKSBjb25zdAoreworICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmlu
Zz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbUxvbmdOYW1lTWFwLmZpbmQoCisgICAgICAgIG9yaWdp
bmFsTmFtZSk7CisgICAgaWYgKGl0ICE9IG1Mb25nTmFtZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0
dXJuICgqaXQpLnNlY29uZC5jX3N0cigpOworICAgIHJldHVybiBOVUxMOworfQorCit2b2lkIExv
bmdOYW1lTWFwOjpJbnNlcnQoY29uc3QgY2hhciogb3JpZ2luYWxOYW1lLCBjb25zdCBjaGFyKiBt
YXBwZWROYW1lKQoreworICAgIG1Mb25nTmFtZU1hcC5pbnNlcnQoc3RkOjptYXA8c3RkOjpzdHJp
bmcsIHN0ZDo6c3RyaW5nPjo6dmFsdWVfdHlwZSgKKyAgICAgICAgb3JpZ2luYWxOYW1lLCBtYXBw
ZWROYW1lKSk7Cit9CisKK3NpemVfdCBMb25nTmFtZU1hcDo6U2l6ZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1Mb25nTmFtZU1hcC5zaXplKCk7Cit9CisKK01hcExvbmdWYXJpYWJsZU5hbWVzOjpN
YXBMb25nVmFyaWFibGVOYW1lcyhMb25nTmFtZU1hcCogZ2xvYmFsTWFwKQoreworICAgIEFTU0VS
VChnbG9iYWxNYXApOworICAgIG1HbG9iYWxNYXAgPSBnbG9iYWxNYXA7Cit9CisKK3ZvaWQgTWFw
TG9uZ1ZhcmlhYmxlTmFtZXM6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCkKK3sK
KyAgICBBU1NFUlQoc3ltYm9sICE9IE5VTEwpOworICAgIGlmIChzeW1ib2wtPmdldFN5bWJvbCgp
LnNpemUoKSA+IE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFKSB7CisgICAgICAgIHN3aXRj
aCAoc3ltYm9sLT5nZXRRdWFsaWZpZXIoKSkgeworICAgICAgICAgIGNhc2UgRXZxVmFyeWluZ0lu
OgorICAgICAgICAgIGNhc2UgRXZxVmFyeWluZ091dDoKKyAgICAgICAgICBjYXNlIEV2cUludmFy
aWFudFZhcnlpbmdJbjoKKyAgICAgICAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdPdXQ6Cisg
ICAgICAgICAgY2FzZSBFdnFVbmlmb3JtOgorICAgICAgICAgICAgc3ltYm9sLT5zZXRTeW1ib2wo
CisgICAgICAgICAgICAgICAgbWFwR2xvYmFsTG9uZ05hbWUoc3ltYm9sLT5nZXRTeW1ib2woKSkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHN5
bWJvbC0+c2V0U3ltYm9sKAorICAgICAgICAgICAgICAgIG1hcExvbmdOYW1lKHN5bWJvbC0+Z2V0
SWQoKSwgc3ltYm9sLT5nZXRTeW1ib2woKSwgZmFsc2UpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9OworICAgIH0KK30KKworVFN0cmluZyBNYXBMb25nVmFyaWFibGVOYW1lczo6bWFw
R2xvYmFsTG9uZ05hbWUoY29uc3QgVFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NFUlQobUdsb2Jh
bE1hcCk7CisgICAgY29uc3QgY2hhciogbWFwcGVkTmFtZSA9IG1HbG9iYWxNYXAtPkZpbmQobmFt
ZS5jX3N0cigpKTsKKyAgICBpZiAobWFwcGVkTmFtZSAhPSBOVUxMKQorICAgICAgICByZXR1cm4g
bWFwcGVkTmFtZTsKKyAgICBzaXplX3QgaWQgPSBtR2xvYmFsTWFwLT5TaXplKCk7CisgICAgVFN0
cmluZyBydCA9IG1hcExvbmdOYW1lKGlkLCBuYW1lLCB0cnVlKTsKKyAgICBtR2xvYmFsTWFwLT5J
bnNlcnQobmFtZS5jX3N0cigpLCBydC5jX3N0cigpKTsKKyAgICByZXR1cm4gcnQ7Cit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9N
YXBMb25nVmFyaWFibGVOYW1lcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYjA4NWEz
Njg3N2IwMTA1NjA1NGRhMmQxMmU0NDAwZjgyOWVhMzllCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTWFwTG9uZ1Zhcmlh
YmxlTmFtZXMuaApAQCAtMCwwICsxLDU4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVm
IENPTVBJTEVSX01BUF9MT05HX1ZBUklBQkxFX05BTUVTX0hfCisjZGVmaW5lIENPTVBJTEVSX01B
UF9MT05HX1ZBUklBQkxFX05BTUVTX0hfCisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcu
aCIKKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZUluZm8uaCIKKworLy8gVGhpcyBzaXpl
IGRvZXMgbm90IGluY2x1ZGUgJ1wwJyBpbiB0aGUgZW5kLgorI2RlZmluZSBNQVhfU0hPUlRFTkVE
X0lERU5USUZJRVJfU0laRSAzMgorCisvLyBUaGlzIGlzIGEgcmVmLWNvdW50ZWQgc2luZ2xldG9u
LiBHZXRJbnN0YW5jZSgpIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZQorLy8gc2luZ2xldG9uLCBh
bmQgYWZ0ZXIgdXNlLCBjYWxsIFJlbGVhc2UoKS4gR2V0SW5zdGFuY2UoKSBhbmQgUmVsZWFzZSgp
IHNob3VsZAorLy8gYmUgcGFpcmVkLgorY2xhc3MgTG9uZ05hbWVNYXAgeworcHVibGljOgorICAg
IHN0YXRpYyBMb25nTmFtZU1hcCogR2V0SW5zdGFuY2UoKTsKKyAgICB2b2lkIFJlbGVhc2UoKTsK
KworICAgIC8vIFJldHVybiB0aGUgbWFwcGVkIG5hbWUgaWYgPG9yaWdpbmFsTmFtZSwgbWFwcGVk
TmFtZT4gaXMgaW4gdGhlIG1hcDsKKyAgICAvLyBvdGhlcndpc2UsIHJldHVybiBOVUxMLgorICAg
IGNvbnN0IGNoYXIqIEZpbmQoY29uc3QgY2hhciogb3JpZ2luYWxOYW1lKSBjb25zdDsKKworICAg
IC8vIEluc2VydCBhIHBhaXIgaW50byB0aGUgbWFwLgorICAgIHZvaWQgSW5zZXJ0KGNvbnN0IGNo
YXIqIG9yaWdpbmFsTmFtZSwgY29uc3QgY2hhciogbWFwcGVkTmFtZSk7CisKKyAgICAvLyBSZXR1
cm4gdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBtYXAuCisgICAgc2l6ZV90IFNpemUoKSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICBMb25nTmFtZU1hcCgpOworICAgIH5Mb25nTmFtZU1hcCgp
OworCisgICAgc2l6ZV90IHJlZkNvdW50OworICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6
OnN0cmluZz4gbUxvbmdOYW1lTWFwOworfTsKKworLy8gVHJhdmVyc2VzIGludGVybWVkaWF0ZSB0
cmVlIHRvIG1hcCBhdHRyaWJ1dGVzIGFuZCB1bmlmb3JtcyBuYW1lcyB0aGF0IGFyZQorLy8gbG9u
Z2VyIHRoYW4gTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJWkUgdG8gTUFYX1NIT1JURU5FRF9J
REVOVElGSUVSX1NJWkUuCitjbGFzcyBNYXBMb25nVmFyaWFibGVOYW1lcyA6IHB1YmxpYyBUSW50
ZXJtVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBNYXBMb25nVmFyaWFibGVOYW1lcyhMb25nTmFt
ZU1hcCogZ2xvYmFsTWFwKTsKKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJt
U3ltYm9sKik7CisKK3ByaXZhdGU6CisgICAgVFN0cmluZyBtYXBHbG9iYWxMb25nTmFtZShjb25z
dCBUU3RyaW5nJiBuYW1lKTsKKworICAgIExvbmdOYW1lTWFwKiBtR2xvYmFsTWFwOworfTsKKwor
I2VuZGlmICAvLyBDT01QSUxFUl9NQVBfTE9OR19WQVJJQUJMRV9OQU1FU19IXwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTm9kZVNl
YXJjaC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Tm9kZVNlYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1OGM3ZWM2ODk0NTg4YzA4MzUwZTg4Njk2ZTczMTQz
ZGY0OWUxMjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9Ob2RlU2VhcmNoLmgKQEAgLTAsMCArMSw4MCBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKy8vIE5vZGVTZWFyY2guaDogVXRpbGl0aWVzIGZvciBzZWFyY2hpbmcgdHJh
bnNsYXRvciBub2RlIGdyYXBocworLy8KKworI2lmbmRlZiBUUkFOU0xBVE9SX05PREVTRUFSQ0hf
SF8KKyNkZWZpbmUgVFJBTlNMQVRPUl9OT0RFU0VBUkNIX0hfCisKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgorCituYW1lc3BhY2Ugc2gKK3sKKwordGVtcGxh
dGUgPGNsYXNzIFBhcmVudD4KK2NsYXNzIE5vZGVTZWFyY2hUcmF2ZXJzZXIgOiBwdWJsaWMgVElu
dGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgTm9kZVNlYXJjaFRyYXZlcnNlcigpCisg
ICAgICAgIDogbUZvdW5kKGZhbHNlKQorICAgIHt9CisKKyAgICBib29sIGZvdW5kKCkgY29uc3Qg
eyByZXR1cm4gbUZvdW5kOyB9CisKKyAgICBzdGF0aWMgYm9vbCBzZWFyY2goVEludGVybU5vZGUg
Km5vZGUpCisgICAgeworICAgICAgICBQYXJlbnQgc2VhcmNoVHJhdmVyc2VyOworICAgICAgICBu
b2RlLT50cmF2ZXJzZSgmc2VhcmNoVHJhdmVyc2VyKTsKKyAgICAgICAgcmV0dXJuIHNlYXJjaFRy
YXZlcnNlci5mb3VuZCgpOworICAgIH0KKworICBwcm90ZWN0ZWQ6CisgICAgYm9vbCBtRm91bmQ7
Cit9OworCitjbGFzcyBGaW5kRGlzY2FyZCA6IHB1YmxpYyBOb2RlU2VhcmNoVHJhdmVyc2VyPEZp
bmREaXNjYXJkPgoreworICBwdWJsaWM6CisgICAgdmlydHVhbCBib29sIHZpc2l0QnJhbmNoKFZp
c2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChu
b2RlLT5nZXRGbG93T3AoKSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRU9wS2lsbDoKKyAg
ICAgICAgICAgIG1Gb3VuZCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
IGRlZmF1bHQ6IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICFtRm91bmQ7Cisg
ICAgfQorfTsKKworY2xhc3MgRmluZFNpZGVFZmZlY3RSZXdyaXRpbmcgOiBwdWJsaWMgTm9kZVNl
YXJjaFRyYXZlcnNlcjxGaW5kU2lkZUVmZmVjdFJld3JpdGluZz4KK3sKKyAgcHVibGljOgorICAg
IHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm9k
ZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKKyAgICAgICAgeworICAg
ICAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgorICAgICAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDoK
KyAgICAgICAgICAgIGlmIChub2RlLT5nZXRSaWdodCgpLT5oYXNTaWRlRWZmZWN0cygpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG1Gb3VuZCA9IHRydWU7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuICFtRm91bmQ7CisgICAgfQorfTsKKworfQorCisjZW5kaWYg
Ly8gVFJBTlNMQVRPUl9OT0RFU0VBUkNIX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRFU1NMLmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEVTU0wuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjgzNjc0MTI0NjIxMWE2MmQzYjQyODMwZmU2Y2M0ZDRmNzFjM2Q2MTcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9PdXRwdXRFU1NMLmNwcApAQCAtMCwwICsxLDI2IEBACisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRFU1NMLmgiCisKK1RPdXRwdXRF
U1NMOjpUT3V0cHV0RVNTTChUSW5mb1NpbmtCYXNlJiBvYmpTaW5rLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIFNoQXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJhdGVneSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lTWFwJiBuYW1lTWFwLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCisgICAgOiBUT3V0cHV0R0xT
TEJhc2Uob2JqU2luaywgY2xhbXBpbmdTdHJhdGVneSwgaGFzaEZ1bmN0aW9uLCBuYW1lTWFwLCBz
eW1ib2xUYWJsZSkKK3sKK30KKworYm9vbCBUT3V0cHV0RVNTTDo6d3JpdGVWYXJpYWJsZVByZWNp
c2lvbihUUHJlY2lzaW9uIHByZWNpc2lvbikKK3sKKyAgICBpZiAocHJlY2lzaW9uID09IEVicFVu
ZGVmaW5lZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVEluZm9TaW5rQmFzZSYgb3V0
ID0gb2JqU2luaygpOworICAgIG91dCA8PCBnZXRQcmVjaXNpb25TdHJpbmcocHJlY2lzaW9uKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEVTU0wuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEVTU0wuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4y
ZjAyOTc5YTA1MDQ0YzM0MmRiYTYxZjUwZDIzZjQ2ZTRlYmY2NTZkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0
RVNTTC5oCkBAIC0wLDAgKzEsMjUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ1JP
U1NDT01QSUxFUkdMU0xfT1VUUFVURVNTTF9IXworI2RlZmluZSBDUk9TU0NPTVBJTEVSR0xTTF9P
VVRQVVRFU1NMX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0xC
YXNlLmgiCisKK2NsYXNzIFRPdXRwdXRFU1NMIDogcHVibGljIFRPdXRwdXRHTFNMQmFzZQorewor
cHVibGljOgorICAgIFRPdXRwdXRFU1NMKFRJbmZvU2lua0Jhc2UmIG9ialNpbmssCisgICAgICAg
ICAgICAgICAgU2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAor
ICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAorICAgICAgICAg
ICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCisgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBz
eW1ib2xUYWJsZSk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIGJvb2wgd3JpdGVWYXJpYWJs
ZVByZWNpc2lvbihUUHJlY2lzaW9uIHByZWNpc2lvbik7Cit9OworCisjZW5kaWYgIC8vIENST1NT
Q09NUElMRVJHTFNMX09VVFBVVEVTU0xfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0wuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNTU4OTU2MDY4MmI2MjhiNTk2ZjNhNzU5MDg3OWY3MWM0NjdmMzlhMgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL091dHB1dEdMU0wuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0wuaCIKKworVE91dHB1dEdM
U0w6OlRPdXRwdXRHTFNMKFRJbmZvU2lua0Jhc2UmIG9ialNpbmssCisgICAgICAgICAgICAgICAg
ICAgICAgICAgU2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAor
ICAgICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKKyAgICA6IFRPdXRwdXRHTFNM
QmFzZShvYmpTaW5rLCBjbGFtcGluZ1N0cmF0ZWd5LCBoYXNoRnVuY3Rpb24sIG5hbWVNYXAsIHN5
bWJvbFRhYmxlKQoreworfQorCitib29sIFRPdXRwdXRHTFNMOjp3cml0ZVZhcmlhYmxlUHJlY2lz
aW9uKFRQcmVjaXNpb24pCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFRPdXRwdXRH
TFNMOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQoreworICAgIFRJbmZvU2lua0Jh
c2UmIG91dCA9IG9ialNpbmsoKTsKKworICAgIGlmIChub2RlLT5nZXRTeW1ib2woKSA9PSAiZ2xf
RnJhZ0RlcHRoRVhUIikKKyAgICB7CisgICAgICAgIG91dCA8PCAiZ2xfRnJhZ0RlcHRoIjsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVE91dHB1dEdMU0xCYXNlOjp2aXNpdFN5bWJv
bChub2RlKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTFm
MTE0ZDM0N2I0MTIyZDkzNDE2ZTYyNDRjYmFhZjkzMGQ0OTdjMgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdM
U0wuaApAQCAtMCwwICsxLDI2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENST1NT
Q09NUElMRVJHTFNMX09VVFBVVEdMU0xfSF8KKyNkZWZpbmUgQ1JPU1NDT01QSUxFUkdMU0xfT1VU
UFVUR0xTTF9IXworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMQmFz
ZS5oIgorCitjbGFzcyBUT3V0cHV0R0xTTCA6IHB1YmxpYyBUT3V0cHV0R0xTTEJhc2UKK3sKK3B1
YmxpYzoKKyAgICBUT3V0cHV0R0xTTChUSW5mb1NpbmtCYXNlJiBvYmpTaW5rLAorICAgICAgICAg
ICAgICAgIFNoQXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJhdGVneSwKKyAg
ICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwKKyAgICAgICAgICAg
ICAgICBOYW1lTWFwJiBuYW1lTWFwLAorICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3lt
Ym9sVGFibGUpOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBib29sIHdyaXRlVmFyaWFibGVQ
cmVjaXNpb24oVFByZWNpc2lvbik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRl
cm1TeW1ib2wqIG5vZGUpOworfTsKKworI2VuZGlmICAvLyBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQ
VVRHTFNMX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMQmFzZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMQmFzZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZjJmMGEzZDZiZTM4MDJlMzhlMDEzMTVhZjE4YWEwYTAyZDljMTQyNgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1
dEdMU0xCYXNlLmNwcApAQCAtMCwwICsxLDgxNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL2NvbXBpbGVyZGVidWcuaCIKKworI2luY2x1ZGUgPGNmbG9hdD4K
KworbmFtZXNwYWNlCit7CitUU3RyaW5nIGFycmF5QnJhY2tldHMoY29uc3QgVFR5cGUmIHR5cGUp
Cit7CisgICAgQVNTRVJUKHR5cGUuaXNBcnJheSgpKTsKKyAgICBUSW5mb1NpbmtCYXNlIG91dDsK
KyAgICBvdXQgPDwgIlsiIDw8IHR5cGUuZ2V0QXJyYXlTaXplKCkgPDwgIl0iOworICAgIHJldHVy
biBUU3RyaW5nKG91dC5jX3N0cigpKTsKK30KKworYm9vbCBpc1NpbmdsZVN0YXRlbWVudChUSW50
ZXJtTm9kZSogbm9kZSkgeworICAgIGlmIChjb25zdCBUSW50ZXJtQWdncmVnYXRlKiBhZ2dyZWdh
dGUgPSBub2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChhZ2dy
ZWdhdGUtPmdldE9wKCkgIT0gRU9wRnVuY3Rpb24pICYmCisgICAgICAgICAgICAgICAoYWdncmVn
YXRlLT5nZXRPcCgpICE9IEVPcFNlcXVlbmNlKTsKKyAgICB9CisgICAgZWxzZSBpZiAoY29uc3Qg
VEludGVybVNlbGVjdGlvbiogc2VsZWN0aW9uID0gbm9kZS0+Z2V0QXNTZWxlY3Rpb25Ob2RlKCkp
CisgICAgeworICAgICAgICAvLyBUZXJuYXJ5IG9wZXJhdG9ycyBhcmUgdXN1YWxseSBwYXJ0IG9m
IGFuIGFzc2lnbm1lbnQgb3BlcmF0b3IuCisgICAgICAgIC8vIFRoaXMgaGFuZGxlcyB0aG9zZSBy
YXJlIGNhc2VzIGluIHdoaWNoIHRoZXkgYXJlIGFsbCBieSB0aGVtc2VsdmVzLgorICAgICAgICBy
ZXR1cm4gc2VsZWN0aW9uLT51c2VzVGVybmFyeU9wZXJhdG9yKCk7CisgICAgfQorICAgIGVsc2Ug
aWYgKG5vZGUtPmdldEFzTG9vcE5vZGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9Cit9ICAvLyBuYW1lc3BhY2UKKworVE91dHB1dEdM
U0xCYXNlOjpUT3V0cHV0R0xTTEJhc2UoVEluZm9TaW5rQmFzZSYgb2JqU2luaywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNoQXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kgY2xh
bXBpbmdTdHJhdGVneSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1
bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TmFtZU1hcCYgbmFtZU1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1i
b2xUYWJsZSYgc3ltYm9sVGFibGUpCisgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIHRydWUs
IHRydWUpLAorICAgICAgbU9ialNpbmsob2JqU2luayksCisgICAgICBtRGVjbGFyaW5nVmFyaWFi
bGVzKGZhbHNlKSwKKyAgICAgIG1DbGFtcGluZ1N0cmF0ZWd5KGNsYW1waW5nU3RyYXRlZ3kpLAor
ICAgICAgbUhhc2hGdW5jdGlvbihoYXNoRnVuY3Rpb24pLAorICAgICAgbU5hbWVNYXAobmFtZU1h
cCksCisgICAgICBtU3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCit7Cit9CisKK3ZvaWQgVE91dHB1
dEdMU0xCYXNlOjp3cml0ZVRyaXBsZXQoVmlzaXQgdmlzaXQsIGNvbnN0IGNoYXIqIHByZVN0ciwg
Y29uc3QgY2hhciogaW5TdHIsIGNvbnN0IGNoYXIqIHBvc3RTdHIpCit7CisgICAgVEluZm9TaW5r
QmFzZSYgb3V0ID0gb2JqU2luaygpOworICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCAmJiBwcmVT
dHIpCisgICAgeworICAgICAgICBvdXQgPDwgcHJlU3RyOworICAgIH0KKyAgICBlbHNlIGlmICh2
aXNpdCA9PSBJblZpc2l0ICYmIGluU3RyKQorICAgIHsKKyAgICAgICAgb3V0IDw8IGluU3RyOwor
ICAgIH0KKyAgICBlbHNlIGlmICh2aXNpdCA9PSBQb3N0VmlzaXQgJiYgcG9zdFN0cikKKyAgICB7
CisgICAgICAgIG91dCA8PCBwb3N0U3RyOworICAgIH0KK30KKwordm9pZCBUT3V0cHV0R0xTTEJh
c2U6OndyaXRlVmFyaWFibGVUeXBlKGNvbnN0IFRUeXBlJiB0eXBlKQoreworICAgIFRJbmZvU2lu
a0Jhc2UmIG91dCA9IG9ialNpbmsoKTsKKyAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHR5cGUu
Z2V0UXVhbGlmaWVyKCk7CisgICAgLy8gVE9ETyhhbG9rcCk6IFZhbGlkYXRlIHF1YWxpZmllciBm
b3IgdmFyaWFibGUgZGVjbGFyYXRpb25zLgorICAgIGlmICgocXVhbGlmaWVyICE9IEV2cVRlbXBv
cmFyeSkgJiYgKHF1YWxpZmllciAhPSBFdnFHbG9iYWwpKQorICAgICAgICBvdXQgPDwgdHlwZS5n
ZXRRdWFsaWZpZXJTdHJpbmcoKSA8PCAiICI7CisgICAgLy8gRGVjbGFyZSB0aGUgc3RydWN0IGlm
IHdlIGhhdmUgbm90IGRvbmUgc28gYWxyZWFkeS4KKyAgICBpZiAoKHR5cGUuZ2V0QmFzaWNUeXBl
KCkgPT0gRWJ0U3RydWN0KSAmJiAhc3RydWN0RGVjbGFyZWQodHlwZS5nZXRTdHJ1Y3QoKSkpCisg
ICAgeworICAgICAgICBkZWNsYXJlU3RydWN0KHR5cGUuZ2V0U3RydWN0KCkpOworICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICBpZiAod3JpdGVWYXJpYWJsZVByZWNpc2lvbih0eXBlLmdl
dFByZWNpc2lvbigpKSkKKyAgICAgICAgICAgIG91dCA8PCAiICI7CisgICAgICAgIG91dCA8PCBn
ZXRUeXBlTmFtZSh0eXBlKTsKKyAgICB9Cit9CisKK3ZvaWQgVE91dHB1dEdMU0xCYXNlOjp3cml0
ZUZ1bmN0aW9uUGFyYW1ldGVycyhjb25zdCBUSW50ZXJtU2VxdWVuY2UmIGFyZ3MpCit7CisgICAg
VEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOworICAgIGZvciAoVEludGVybVNlcXVlbmNl
Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gYXJncy5iZWdpbigpOworICAgICAgICAgaXRlciAhPSBh
cmdzLmVuZCgpOyArK2l0ZXIpCisgICAgeworICAgICAgICBjb25zdCBUSW50ZXJtU3ltYm9sKiBh
cmcgPSAoKml0ZXIpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICAgICAgQVNTRVJUKGFyZyAhPSBO
VUxMKTsKKworICAgICAgICBjb25zdCBUVHlwZSYgdHlwZSA9IGFyZy0+Z2V0VHlwZSgpOworICAg
ICAgICB3cml0ZVZhcmlhYmxlVHlwZSh0eXBlKTsKKworICAgICAgICBjb25zdCBUU3RyaW5nJiBu
YW1lID0gYXJnLT5nZXRTeW1ib2woKTsKKyAgICAgICAgaWYgKCFuYW1lLmVtcHR5KCkpCisgICAg
ICAgICAgICBvdXQgPDwgIiAiIDw8IGhhc2hOYW1lKG5hbWUpOworICAgICAgICBpZiAodHlwZS5p
c0FycmF5KCkpCisgICAgICAgICAgICBvdXQgPDwgYXJyYXlCcmFja2V0cyh0eXBlKTsKKworICAg
ICAgICAvLyBQdXQgYSBjb21tYSBpZiB0aGlzIGlzIG5vdCB0aGUgbGFzdCBhcmd1bWVudC4KKyAg
ICAgICAgaWYgKGl0ZXIgIT0gYXJncy5lbmQoKSAtIDEpCisgICAgICAgICAgICBvdXQgPDwgIiwg
IjsKKyAgICB9Cit9CisKK2NvbnN0IENvbnN0YW50VW5pb24qIFRPdXRwdXRHTFNMQmFzZTo6d3Jp
dGVDb25zdGFudFVuaW9uKGNvbnN0IFRUeXBlJiB0eXBlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29uc3RhbnRVbmlvbiog
cENvbnN0VW5pb24pCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOworCisg
ICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQorICAgIHsKKyAgICAgICAg
Y29uc3QgVFN0cnVjdHVyZSogc3RydWN0dXJlID0gdHlwZS5nZXRTdHJ1Y3QoKTsKKyAgICAgICAg
b3V0IDw8IGhhc2hOYW1lKHN0cnVjdHVyZS0+bmFtZSgpKSA8PCAiKCI7CisKKyAgICAgICAgY29u
c3QgVEZpZWxkTGlzdCYgZmllbGRzID0gc3RydWN0dXJlLT5maWVsZHMoKTsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGNvbnN0IFRUeXBlKiBmaWVsZFR5cGUgPSBmaWVsZHNbaV0tPnR5cGUoKTsKKyAgICAg
ICAgICAgIEFTU0VSVChmaWVsZFR5cGUgIT0gTlVMTCk7CisgICAgICAgICAgICBwQ29uc3RVbmlv
biA9IHdyaXRlQ29uc3RhbnRVbmlvbigqZmllbGRUeXBlLCBwQ29uc3RVbmlvbik7CisgICAgICAg
ICAgICBpZiAoaSAhPSBmaWVsZHMuc2l6ZSgpIC0gMSkgb3V0IDw8ICIsICI7CisgICAgICAgIH0K
KyAgICAgICAgb3V0IDw8ICIpIjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc2l6
ZV90IHNpemUgPSB0eXBlLmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgYm9vbCB3cml0ZVR5cGUg
PSBzaXplID4gMTsKKyAgICAgICAgaWYgKHdyaXRlVHlwZSkgb3V0IDw8IGdldFR5cGVOYW1lKHR5
cGUpIDw8ICIoIjsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2ksICsr
cENvbnN0VW5pb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAocENvbnN0VW5pb24t
PmdldFR5cGUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0
OiBvdXQgPDwgc3RkOjptaW4oRkxUX01BWCwgc3RkOjptYXgoLUZMVF9NQVgsIHBDb25zdFVuaW9u
LT5nZXRGQ29uc3QoKSkpOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEVidEludDogb3V0
IDw8IHBDb25zdFVuaW9uLT5nZXRJQ29uc3QoKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz
ZSBFYnRCb29sOiBvdXQgPDwgcENvbnN0VW5pb24tPmdldEJDb25zdCgpOyBicmVhazsKKyAgICAg
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGkgIT0gc2l6ZSAtIDEpIG91dCA8PCAiLCAiOworICAgICAgICB9CisgICAgICAg
IGlmICh3cml0ZVR5cGUpIG91dCA8PCAiKSI7CisgICAgfQorICAgIHJldHVybiBwQ29uc3RVbmlv
bjsKK30KKwordm9pZCBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wq
IG5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOworICAgIGlmICht
TG9vcFVucm9sbC5OZWVkc1RvUmVwbGFjZVN5bWJvbFdpdGhWYWx1ZShub2RlKSkKKyAgICAgICAg
b3V0IDw8IG1Mb29wVW5yb2xsLkdldExvb3BJbmRleFZhbHVlKG5vZGUpOworICAgIGVsc2UKKyAg
ICAgICAgb3V0IDw8IGhhc2hWYXJpYWJsZU5hbWUobm9kZS0+Z2V0U3ltYm9sKCkpOworCisgICAg
aWYgKG1EZWNsYXJpbmdWYXJpYWJsZXMgJiYgbm9kZS0+Z2V0VHlwZSgpLmlzQXJyYXkoKSkKKyAg
ICAgICAgb3V0IDw8IGFycmF5QnJhY2tldHMobm9kZS0+Z2V0VHlwZSgpKTsKK30KKwordm9pZCBU
T3V0cHV0R0xTTEJhc2U6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiog
bm9kZSkKK3sKKyAgICB3cml0ZUNvbnN0YW50VW5pb24obm9kZS0+Z2V0VHlwZSgpLCBub2RlLT5n
ZXRVbmlvbkFycmF5UG9pbnRlcigpKTsKK30KKworYm9vbCBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0
QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBub2RlKQoreworICAgIGJvb2wgdmlz
aXRDaGlsZHJlbiA9IHRydWU7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOwor
ICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7CisgICAgICAgIGNhc2UgRU9wSW5pdGlh
bGl6ZToKKyAgICAgICAgICAgIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG91dCA8PCAiID0gIjsKKyAgICAgICAgICAgICAgICAvLyBSSFMgb2Yg
aW5pdGlhbGl6ZSBpcyBub3QgYmVpbmcgZGVjbGFyZWQuCisgICAgICAgICAgICAgICAgbURlY2xh
cmluZ1ZhcmlhYmxlcyA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wQXNzaWduOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiA9ICIs
ICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjogd3JpdGVUcmlwbGV0KHZp
c2l0LCAiKCIsICIgKz0gIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU3ViQXNzaWdu
OiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAtPSAiLCAiKSIpOyBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BEaXZBc3NpZ246IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiIC89ICIsICIpIik7
IGJyZWFrOworICAgICAgICAvLyBOb3RpY2UgdGhlIGZhbGwtdGhyb3VnaC4KKyAgICAgICAgY2Fz
ZSBFT3BNdWxBc3NpZ246IAorICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWdu
OgorICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOgorICAgICAgICBjYXNl
IEVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOgorICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVz
TWF0cml4QXNzaWduOgorICAgICAgICAgICAgd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgKj0g
IiwgIikiKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wSW5kZXhEaXJl
Y3Q6CisgICAgICAgICAgICB3cml0ZVRyaXBsZXQodmlzaXQsIE5VTEwsICJbIiwgIl0iKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6CisgICAgICAg
ICAgICBpZiAobm9kZS0+Z2V0QWRkSW5kZXhDbGFtcCgpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG1DbGFtcGluZ1N0cmF0ZWd5ID09IFNIX0NMQU1QX1dJVEhfQ0xB
TVBfSU5UUklOU0lDKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIltpbnQoY2xh
bXAoZmxvYXQoIjsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG91dCA8PCAiW3dlYmdsX2ludF9jbGFtcCgiOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09
IFBvc3RWaXNpdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGludCBt
YXhTaXplOworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgKmxlZnQgPSBub2RlLT5n
ZXRMZWZ0KCk7CisgICAgICAgICAgICAgICAgICAgIFRUeXBlIGxlZnRUeXBlID0gbGVmdC0+Z2V0
VHlwZSgpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5pc0FycmF5KCkpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBzaGFkZXIg
d2lsbCBmYWlsIHZhbGlkYXRpb24gaWYgdGhlIGFycmF5IGxlbmd0aCBpcyBub3QgPiAwLgorICAg
ICAgICAgICAgICAgICAgICAgICAgbWF4U2l6ZSA9IGxlZnRUeXBlLmdldEFycmF5U2l6ZSgpIC0g
MTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heFNpemUgPSBsZWZ0
VHlwZS5nZXROb21pbmFsU2l6ZSgpIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIGlmIChtQ2xhbXBpbmdTdHJhdGVneSA9PSBTSF9DTEFNUF9XSVRIX0NM
QU1QX0lOVFJJTlNJQykgeworICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIpLCAwLjAs
IGZsb2F0KCIgPDwgbWF4U2l6ZSA8PCAiKSkpXSI7CisgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgMCwgIiA8PCBtYXhTaXplIDw8
ICIpXSI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
d3JpdGVUcmlwbGV0KHZpc2l0LCBOVUxMLCAiWyIsICJdIik7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdFN0cnVjdDoKKyAgICAg
ICAgICAgIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIC8vIEhlcmUgd2UgYXJlIHdyaXRpbmcgb3V0ICJmb28uYmFyIiwgd2hlcmUgImZvbyIgaXMg
c3RydWN0CisgICAgICAgICAgICAgICAgLy8gYW5kICJiYXIiIGlzIGZpZWxkLiBJbiBBU1QsIGl0
IGlzIHJlcHJlc2VudGVkIGFzIGEgYmluYXJ5CisgICAgICAgICAgICAgICAgLy8gbm9kZSwgd2hl
cmUgbGVmdCBjaGlsZCByZXByZXNlbnRzICJmb28iIGFuZCByaWdodCBjaGlsZCAiYmFyIi4KKyAg
ICAgICAgICAgICAgICAvLyBUaGUgbm9kZSBpdHNlbGYgcmVwcmVzZW50cyAiLiIuIFRoZSBzdHJ1
Y3QgZmllbGQgImJhciIgaXMKKyAgICAgICAgICAgICAgICAvLyBhY3R1YWxseSBzdG9yZWQgYXMg
YW4gaW5kZXggaW50byBUU3RydWN0dXJlOjpmaWVsZHMuCisgICAgICAgICAgICAgICAgb3V0IDw8
ICIuIjsKKyAgICAgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBub2Rl
LT5nZXRMZWZ0KCktPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgICAgICAgICBjb25z
dCBUSW50ZXJtQ29uc3RhbnRVbmlvbiogaW5kZXggPSBub2RlLT5nZXRSaWdodCgpLT5nZXRBc0Nv
bnN0YW50VW5pb24oKTsKKyAgICAgICAgICAgICAgICBjb25zdCBURmllbGQqIGZpZWxkID0gc3Ry
dWN0dXJlLT5maWVsZHMoKVtpbmRleC0+Z2V0SUNvbnN0KDApXTsKKworICAgICAgICAgICAgICAg
IFRTdHJpbmcgZmllbGROYW1lID0gZmllbGQtPm5hbWUoKTsKKyAgICAgICAgICAgICAgICBpZiAo
IW1TeW1ib2xUYWJsZS5maW5kQnVpbHRJbihzdHJ1Y3R1cmUtPm5hbWUoKSkpCisgICAgICAgICAg
ICAgICAgICAgIGZpZWxkTmFtZSA9IGhhc2hOYW1lKGZpZWxkTmFtZSk7CisKKyAgICAgICAgICAg
ICAgICBvdXQgPDwgZmllbGROYW1lOworICAgICAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVP
cFZlY3RvclN3aXp6bGU6CisgICAgICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIi4iOworICAgICAgICAgICAgICAgIFRJ
bnRlcm1BZ2dyZWdhdGUqIHJpZ2h0Q2hpbGQgPSBub2RlLT5nZXRSaWdodCgpLT5nZXRBc0FnZ3Jl
Z2F0ZSgpOworICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSByaWdo
dENoaWxkLT5nZXRTZXF1ZW5jZSgpOworICAgICAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVl
bmNlOjppdGVyYXRvciBzaXQgPSBzZXF1ZW5jZS5iZWdpbigpOyBzaXQgIT0gc2VxdWVuY2UuZW5k
KCk7ICsrc2l0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVEludGVy
bUNvbnN0YW50VW5pb24qIGVsZW1lbnQgPSAoKnNpdCktPmdldEFzQ29uc3RhbnRVbmlvbigpOwor
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0
SW50KTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnQtPmdldE5vbWluYWxTaXpl
KCkgPT0gMSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbnN0YW50VW5pb24mIGRhdGEg
PSBlbGVtZW50LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpWzBdOworICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoZGF0YS5nZXRUeXBlKCkgPT0gRWJ0SW50KTsKKyAgICAgICAgICAgICAgICAgICAg
c3dpdGNoIChkYXRhLmdldElDb25zdCgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIDA6IG91dCA8PCAieCI7IGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAxOiBvdXQgPDwgInkiOyBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgMjogb3V0IDw8ICJ6IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIDM6IG91dCA8PCAidyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BBZGQ6IHdy
aXRlVHJpcGxldCh2aXNpdCwgIigiLCAiICsgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wU3ViOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAtICIsICIpIik7IGJyZWFrOworICAg
ICAgICBjYXNlIEVPcE11bDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgKiAiLCAiKSIpOyBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BEaXY6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiIC8g
IiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTW9kOiBVTklNUExFTUVOVEVEKCk7IGJy
ZWFrOworICAgICAgICBjYXNlIEVPcEVxdWFsOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiA9
PSAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDogd3JpdGVUcmlwbGV0
KHZpc2l0LCAiKCIsICIgIT0gIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTGVzc1Ro
YW46IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiIDwgIiwgIikiKTsgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wR3JlYXRlclRoYW46IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiID4gIiwgIiki
KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDogd3JpdGVUcmlwbGV0KHZp
c2l0LCAiKCIsICIgPD0gIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRo
YW5FcXVhbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgPj0gIiwgIikiKTsgYnJlYWs7CisK
KyAgICAgICAgLy8gTm90aWNlIHRoZSBmYWxsLXRocm91Z2guCisgICAgICAgIGNhc2UgRU9wVmVj
dG9yVGltZXNTY2FsYXI6CisgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXg6CisgICAg
ICAgIGNhc2UgRU9wTWF0cml4VGltZXNWZWN0b3I6CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGlt
ZXNTY2FsYXI6CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXg6CisgICAgICAgICAg
ICB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAqICIsICIpIik7CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIs
ICIgfHwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjogd3JpdGVU
cmlwbGV0KHZpc2l0LCAiKCIsICIgXl4gIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
TG9naWNhbEFuZDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgJiYgIiwgIikiKTsgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IGJyZWFrOworICAgIH0KKworICAgIHJl
dHVybiB2aXNpdENoaWxkcmVuOworfQorCitib29sIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRVbmFy
eShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQoreworICAgIFRTdHJpbmcgcHJlU3Ry
aW5nOworICAgIFRTdHJpbmcgcG9zdFN0cmluZyA9ICIpIjsKKworICAgIHN3aXRjaCAobm9kZS0+
Z2V0T3AoKSkKKyAgICB7CisgICAgICAgIGNhc2UgRU9wTmVnYXRpdmU6IHByZVN0cmluZyA9ICIo
LSI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFZlY3RvckxvZ2ljYWxOb3Q6IHByZVN0cmluZyA9
ICJub3QoIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDogcHJlU3RyaW5nID0g
IighIjsgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50OiBwcmVTdHJpbmcg
PSAiKCI7IHBvc3RTdHJpbmcgPSAiKyspIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUG9zdERl
Y3JlbWVudDogcHJlU3RyaW5nID0gIigiOyBwb3N0U3RyaW5nID0gIi0tKSI7IGJyZWFrOworICAg
ICAgICBjYXNlIEVPcFByZUluY3JlbWVudDogcHJlU3RyaW5nID0gIigrKyI7IGJyZWFrOworICAg
ICAgICBjYXNlIEVPcFByZURlY3JlbWVudDogcHJlU3RyaW5nID0gIigtLSI7IGJyZWFrOworCisg
ICAgICAgIGNhc2UgRU9wQ29udkludFRvQm9vbDoKKyAgICAgICAgY2FzZSBFT3BDb252RmxvYXRU
b0Jvb2w6CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wZXJhbmQoKS0+Z2V0VHlwZSgp
LmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSAx
OiBwcmVTdHJpbmcgPSAgImJvb2woIjsgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjog
cHJlU3RyaW5nID0gImJ2ZWMyKCI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMzogcHJl
U3RyaW5nID0gImJ2ZWMzKCI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDogcHJlU3Ry
aW5nID0gImJ2ZWM0KCI7IGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BDb252Qm9vbFRvRmxvYXQ6CisgICAgICAgIGNhc2UgRU9wQ29udkludFRvRmxvYXQ6CisgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wZXJhbmQoKS0+Z2V0VHlwZSgpLmdldE5vbWluYWxT
aXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSAxOiBwcmVTdHJpbmcg
PSAiZmxvYXQoIjsgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjogcHJlU3RyaW5nID0g
InZlYzIoIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAzOiBwcmVTdHJpbmcgPSAidmVj
MygiOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6IHByZVN0cmluZyA9ICJ2ZWM0KCI7
IGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0lu
dDoKKyAgICAgICAgY2FzZSBFT3BDb252Qm9vbFRvSW50OgorICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGNhc2UgMTogcHJlU3RyaW5nID0gImludCgiOyAgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSAyOiBwcmVTdHJpbmcgPSAiaXZlYzIoIjsgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSAzOiBwcmVTdHJpbmcgPSAiaXZlYzMoIjsgYnJlYWs7CisgICAg
ICAgICAgICAgICAgY2FzZSA0OiBwcmVTdHJpbmcgPSAiaXZlYzQoIjsgYnJlYWs7CisgICAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wUmFkaWFuczogcHJlU3RyaW5nID0gInJhZGlh
bnMoIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRGVncmVlczogcHJlU3RyaW5nID0gImRlZ3Jl
ZXMoIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU2luOiBwcmVTdHJpbmcgPSAic2luKCI7IGJy
ZWFrOworICAgICAgICBjYXNlIEVPcENvczogcHJlU3RyaW5nID0gImNvcygiOyBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BUYW46IHByZVN0cmluZyA9ICJ0YW4oIjsgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wQXNpbjogcHJlU3RyaW5nID0gImFzaW4oIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
QWNvczogcHJlU3RyaW5nID0gImFjb3MoIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQXRhbjog
cHJlU3RyaW5nID0gImF0YW4oIjsgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BFeHA6IHByZVN0
cmluZyA9ICJleHAoIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9nOiBwcmVTdHJpbmcgPSAi
bG9nKCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEV4cDI6IHByZVN0cmluZyA9ICJleHAyKCI7
IGJyZWFrOworICAgICAgICBjYXNlIEVPcExvZzI6IHByZVN0cmluZyA9ICJsb2cyKCI7IGJyZWFr
OworICAgICAgICBjYXNlIEVPcFNxcnQ6IHByZVN0cmluZyA9ICJzcXJ0KCI7IGJyZWFrOworICAg
ICAgICBjYXNlIEVPcEludmVyc2VTcXJ0OiBwcmVTdHJpbmcgPSAiaW52ZXJzZXNxcnQoIjsgYnJl
YWs7CisKKyAgICAgICAgY2FzZSBFT3BBYnM6IHByZVN0cmluZyA9ICJhYnMoIjsgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wU2lnbjogcHJlU3RyaW5nID0gInNpZ24oIjsgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wRmxvb3I6IHByZVN0cmluZyA9ICJmbG9vcigiOyBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BDZWlsOiBwcmVTdHJpbmcgPSAiY2VpbCgiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BG
cmFjdDogcHJlU3RyaW5nID0gImZyYWN0KCI7IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wTGVu
Z3RoOiBwcmVTdHJpbmcgPSAibGVuZ3RoKCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcE5vcm1h
bGl6ZTogcHJlU3RyaW5nID0gIm5vcm1hbGl6ZSgiOyBicmVhazsKKworICAgICAgICBjYXNlIEVP
cERGZHg6IHByZVN0cmluZyA9ICJkRmR4KCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcERGZHk6
IHByZVN0cmluZyA9ICJkRmR5KCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEZ3aWR0aDogcHJl
U3RyaW5nID0gImZ3aWR0aCgiOyBicmVhazsKKworICAgICAgICBjYXNlIEVPcEFueTogcHJlU3Ry
aW5nID0gImFueSgiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BBbGw6IHByZVN0cmluZyA9ICJh
bGwoIjsgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7Cisg
ICAgfQorCisgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0ICYmIG5vZGUtPmdldFVzZUVtdWxhdGVk
RnVuY3Rpb24oKSkKKyAgICAgICAgcHJlU3RyaW5nID0gQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6
OkdldEVtdWxhdGVkRnVuY3Rpb25OYW1lKHByZVN0cmluZyk7CisgICAgd3JpdGVUcmlwbGV0KHZp
c2l0LCBwcmVTdHJpbmcuY19zdHIoKSwgTlVMTCwgcG9zdFN0cmluZy5jX3N0cigpKTsKKworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRTZWxlY3Rpb24o
VmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUpCit7CisgICAgVEluZm9TaW5rQmFz
ZSYgb3V0ID0gb2JqU2luaygpOworCisgICAgaWYgKG5vZGUtPnVzZXNUZXJuYXJ5T3BlcmF0b3Io
KSkKKyAgICB7CisgICAgICAgIC8vIE5vdGljZSB0d28gYnJhY2tldHMgYXQgdGhlIGJlZ2lubmlu
ZyBhbmQgZW5kLiBUaGUgb3V0ZXIgb25lcworICAgICAgICAvLyBlbmNhcHN1bGF0ZSB0aGUgd2hv
bGUgdGVybmFyeSBleHByZXNzaW9uLiBUaGlzIHByZXNlcnZlcyB0aGUKKyAgICAgICAgLy8gb3Jk
ZXIgb2YgcHJlY2VkZW5jZSB3aGVuIHRlcm5hcnkgZXhwcmVzc2lvbnMgYXJlIHVzZWQgaW4gYQor
ICAgICAgICAvLyBjb21wb3VuZCBleHByZXNzaW9uLCBpLmUuLCBjID0gMiAqIChhIDwgYiA/IDEg
OiAyKS4KKyAgICAgICAgb3V0IDw8ICIoKCI7CisgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigp
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIpID8gKCI7CisgICAgICAgIG5vZGUt
PmdldFRydWVCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIpIDogKCI7
CisgICAgICAgIG5vZGUtPmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAg
IG91dCA8PCAiKSkiOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBvdXQgPDwgImlm
ICgiOworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAg
ICAgIG91dCA8PCAiKVxuIjsKKworICAgICAgICBpbmNyZW1lbnREZXB0aChub2RlKTsKKyAgICAg
ICAgdmlzaXRDb2RlQmxvY2sobm9kZS0+Z2V0VHJ1ZUJsb2NrKCkpOworCisgICAgICAgIGlmIChu
b2RlLT5nZXRGYWxzZUJsb2NrKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZWxz
ZVxuIjsKKyAgICAgICAgICAgIHZpc2l0Q29kZUJsb2NrKG5vZGUtPmdldEZhbHNlQmxvY2soKSk7
CisgICAgICAgIH0KKyAgICAgICAgZGVjcmVtZW50RGVwdGgoKTsKKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQg
dmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCit7CisgICAgYm9vbCB2aXNpdENoaWxkcmVu
ID0gdHJ1ZTsKKyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7CisgICAgVFN0cmlu
ZyBwcmVTdHJpbmc7CisgICAgYm9vbCBkZWxheWVkV3JpdGUgPSBmYWxzZTsKKyAgICBzd2l0Y2gg
KG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAgICBjYXNlIEVPcFNlcXVlbmNlOiB7CisgICAg
ICAgICAgICAvLyBTY29wZSB0aGUgc2VxdWVuY2VzIGV4Y2VwdCB3aGVuIGF0IHRoZSBnbG9iYWwg
c2NvcGUuCisgICAgICAgICAgICBpZiAoZGVwdGggPiAwKSBvdXQgPDwgIntcbiI7CisKKyAgICAg
ICAgICAgIGluY3JlbWVudERlcHRoKG5vZGUpOworICAgICAgICAgICAgY29uc3QgVEludGVybVNl
cXVlbmNlJiBzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAgICBmb3Ig
KFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHNlcXVlbmNlLmJlZ2luKCk7
CisgICAgICAgICAgICAgICAgIGl0ZXIgIT0gc2VxdWVuY2UuZW5kKCk7ICsraXRlcikKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSogbm9kZSA9ICppdGVyOworICAg
ICAgICAgICAgICAgIEFTU0VSVChub2RlICE9IE5VTEwpOworICAgICAgICAgICAgICAgIG5vZGUt
PnRyYXZlcnNlKHRoaXMpOworCisgICAgICAgICAgICAgICAgaWYgKGlzU2luZ2xlU3RhdGVtZW50
KG5vZGUpKQorICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIjtcbiI7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBkZWNyZW1lbnREZXB0aCgpOworCisgICAgICAgICAgICAvLyBTY29wZSB0
aGUgc2VxdWVuY2VzIGV4Y2VwdCB3aGVuIGF0IHRoZSBnbG9iYWwgc2NvcGUuCisgICAgICAgICAg
ICBpZiAoZGVwdGggPiAwKSBvdXQgPDwgIn1cbiI7CisgICAgICAgICAgICB2aXNpdENoaWxkcmVu
ID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEVP
cFByb3RvdHlwZTogeworICAgICAgICAgICAgLy8gRnVuY3Rpb24gZGVjbGFyYXRpb24uCisgICAg
ICAgICAgICBBU1NFUlQodmlzaXQgPT0gUHJlVmlzaXQpOworICAgICAgICAgICAgd3JpdGVWYXJp
YWJsZVR5cGUobm9kZS0+Z2V0VHlwZSgpKTsKKyAgICAgICAgICAgIG91dCA8PCAiICIgPDwgaGFz
aE5hbWUobm9kZS0+Z2V0TmFtZSgpKTsKKworICAgICAgICAgICAgb3V0IDw8ICIoIjsKKyAgICAg
ICAgICAgIHdyaXRlRnVuY3Rpb25QYXJhbWV0ZXJzKG5vZGUtPmdldFNlcXVlbmNlKCkpOworICAg
ICAgICAgICAgb3V0IDw8ICIpIjsKKworICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBFT3BGdW5jdGlv
bjogeworICAgICAgICAgICAgLy8gRnVuY3Rpb24gZGVmaW5pdGlvbi4KKyAgICAgICAgICAgIEFT
U0VSVCh2aXNpdCA9PSBQcmVWaXNpdCk7CisgICAgICAgICAgICB3cml0ZVZhcmlhYmxlVHlwZShu
b2RlLT5nZXRUeXBlKCkpOworICAgICAgICAgICAgb3V0IDw8ICIgIiA8PCBoYXNoRnVuY3Rpb25O
YW1lKG5vZGUtPmdldE5hbWUoKSk7CisKKyAgICAgICAgICAgIGluY3JlbWVudERlcHRoKG5vZGUp
OworICAgICAgICAgICAgLy8gRnVuY3Rpb24gZGVmaW5pdGlvbiBub2RlIGNvbnRhaW5zIG9uZSBv
ciB0d28gY2hpbGRyZW4gbm9kZXMKKyAgICAgICAgICAgIC8vIHJlcHJlc2VudGluZyBmdW5jdGlv
biBwYXJhbWV0ZXJzIGFuZCBmdW5jdGlvbiBib2R5LiBUaGUgbGF0dGVyCisgICAgICAgICAgICAv
LyBpcyBub3QgcHJlc2VudCBpbiBjYXNlIG9mIGVtcHR5IGZ1bmN0aW9uIGJvZGllcy4KKyAgICAg
ICAgICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5j
ZSgpOworICAgICAgICAgICAgQVNTRVJUKChzZXF1ZW5jZS5zaXplKCkgPT0gMSkgfHwgKHNlcXVl
bmNlLnNpemUoKSA9PSAyKSk7CisgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0
ZXJhdG9yIHNlcUl0ZXIgPSBzZXF1ZW5jZS5iZWdpbigpOworCisgICAgICAgICAgICAvLyBUcmF2
ZXJzZSBmdW5jdGlvbiBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSog
cGFyYW1zID0gKCpzZXFJdGVyKS0+Z2V0QXNBZ2dyZWdhdGUoKTsKKyAgICAgICAgICAgIEFTU0VS
VChwYXJhbXMgIT0gTlVMTCk7CisgICAgICAgICAgICBBU1NFUlQocGFyYW1zLT5nZXRPcCgpID09
IEVPcFBhcmFtZXRlcnMpOworICAgICAgICAgICAgcGFyYW1zLT50cmF2ZXJzZSh0aGlzKTsKKwor
ICAgICAgICAgICAgLy8gVHJhdmVyc2UgZnVuY3Rpb24gYm9keS4KKyAgICAgICAgICAgIFRJbnRl
cm1BZ2dyZWdhdGUqIGJvZHkgPSArK3NlcUl0ZXIgIT0gc2VxdWVuY2UuZW5kKCkgPworICAgICAg
ICAgICAgICAgICgqc2VxSXRlciktPmdldEFzQWdncmVnYXRlKCkgOiBOVUxMOworICAgICAgICAg
ICAgdmlzaXRDb2RlQmxvY2soYm9keSk7CisgICAgICAgICAgICBkZWNyZW1lbnREZXB0aCgpOwor
IAorICAgICAgICAgICAgLy8gRnVsbHkgcHJvY2Vzc2VkOyBubyBuZWVkIHRvIHZpc2l0IGNoaWxk
cmVuLgorICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBFT3BGdW5jdGlvbkNhbGw6CisgICAgICAgICAg
ICAvLyBGdW5jdGlvbiBjYWxsLgorICAgICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCBoYXNoRnVuY3Rpb25OYW1lKG5v
ZGUtPmdldE5hbWUoKSkgPDwgIigiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBp
ZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQg
PDwgIiwgIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgIikiOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wUGFyYW1ldGVyczogeworICAgICAgICAgICAgLy8gRnVu
Y3Rpb24gcGFyYW1ldGVycy4KKyAgICAgICAgICAgIEFTU0VSVCh2aXNpdCA9PSBQcmVWaXNpdCk7
CisgICAgICAgICAgICBvdXQgPDwgIigiOworICAgICAgICAgICAgd3JpdGVGdW5jdGlvblBhcmFt
ZXRlcnMobm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgICAgICBvdXQgPDwgIikiOworICAg
ICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBFT3BEZWNsYXJhdGlvbjogeworICAgICAgICAgICAgLy8gVmFy
aWFibGUgZGVjbGFyYXRpb24uCisgICAgICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVEludGVybVNlcXVlbmNlJiBzZXF1
ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAgICAgICAgY29uc3QgVEludGVy
bVR5cGVkKiB2YXJpYWJsZSA9IHNlcXVlbmNlLmZyb250KCktPmdldEFzVHlwZWQoKTsKKyAgICAg
ICAgICAgICAgICB3cml0ZVZhcmlhYmxlVHlwZSh2YXJpYWJsZS0+Z2V0VHlwZSgpKTsKKyAgICAg
ICAgICAgICAgICBvdXQgPDwgIiAiOworICAgICAgICAgICAgICAgIG1EZWNsYXJpbmdWYXJpYWJs
ZXMgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0g
SW5WaXNpdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAg
ICAgICAgICAgICAgICBtRGVjbGFyaW5nVmFyaWFibGVzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGVjbGFy
aW5nVmFyaWFibGVzID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OiB3cml0ZVRyaXBsZXQo
dmlzaXQsICJmbG9hdCgiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25z
dHJ1Y3RWZWMyOiB3cml0ZVRyaXBsZXQodmlzaXQsICJ2ZWMyKCIsICIsICIsICIpIik7IGJyZWFr
OworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzM6IHdyaXRlVHJpcGxldCh2aXNpdCwgInZl
YzMoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjNDog
d3JpdGVUcmlwbGV0KHZpc2l0LCAidmVjNCgiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BDb25zdHJ1Y3RCb29sOiB3cml0ZVRyaXBsZXQodmlzaXQsICJib29sKCIsIE5VTEws
ICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMyOiB3cml0ZVRyaXBs
ZXQodmlzaXQsICJidmVjMigiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BD
b25zdHJ1Y3RCVmVjMzogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYnZlYzMoIiwgIiwgIiwgIikiKTsg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6IHdyaXRlVHJpcGxldCh2aXNp
dCwgImJ2ZWM0KCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVj
dEludDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiaW50KCIsIE5VTEwsICIpIik7IGJyZWFrOworICAg
ICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMyOiB3cml0ZVRyaXBsZXQodmlzaXQsICJpdmVjMigi
LCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMzogd3Jp
dGVUcmlwbGV0KHZpc2l0LCAiaXZlYzMoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wQ29uc3RydWN0SVZlYzQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgIml2ZWM0KCIsICIsICIs
ICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6IHdyaXRlVHJpcGxl
dCh2aXNpdCwgIm1hdDIoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29u
c3RydWN0TWF0Mzogd3JpdGVUcmlwbGV0KHZpc2l0LCAibWF0MygiLCAiLCAiLCAiKSIpOyBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQ0OiB3cml0ZVRyaXBsZXQodmlzaXQsICJt
YXQ0KCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFN0cnVj
dDoKKyAgICAgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBjb25zdCBUVHlwZSYgdHlwZSA9IG5vZGUtPmdldFR5cGUoKTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpOworICAg
ICAgICAgICAgICAgIG91dCA8PCBoYXNoTmFtZSh0eXBlLmdldFN0cnVjdCgpLT5uYW1lKCkpIDw8
ICIoIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlz
aXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
b3V0IDw8ICIpIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGNhc2UgRU9wTGVzc1RoYW46IHByZVN0cmluZyA9ICJsZXNzVGhhbigiOyBkZWxheWVkV3JpdGUg
PSB0cnVlOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjogcHJlU3RyaW5nID0g
ImdyZWF0ZXJUaGFuKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOworICAgICAgICBjYXNl
IEVPcExlc3NUaGFuRXF1YWw6IHByZVN0cmluZyA9ICJsZXNzVGhhbkVxdWFsKCI7IGRlbGF5ZWRX
cml0ZSA9IHRydWU7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6IHBy
ZVN0cmluZyA9ICJncmVhdGVyVGhhbkVxdWFsKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFr
OworICAgICAgICBjYXNlIEVPcFZlY3RvckVxdWFsOiBwcmVTdHJpbmcgPSAiZXF1YWwoIjsgZGVs
YXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVjdG9yTm90RXF1YWw6
IHByZVN0cmluZyA9ICJub3RFcXVhbCgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BDb21tYTogd3JpdGVUcmlwbGV0KHZpc2l0LCBOVUxMLCAiLCAiLCBOVUxM
KTsgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BNb2Q6IHByZVN0cmluZyA9ICJtb2QoIjsgZGVs
YXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUG93OiBwcmVTdHJpbmcg
PSAicG93KCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEF0
YW46IHByZVN0cmluZyA9ICJhdGFuKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOworICAg
ICAgICBjYXNlIEVPcE1pbjogcHJlU3RyaW5nID0gIm1pbigiOyBkZWxheWVkV3JpdGUgPSB0cnVl
OyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNYXg6IHByZVN0cmluZyA9ICJtYXgoIjsgZGVsYXll
ZFdyaXRlID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ2xhbXA6IHByZVN0cmluZyA9
ICJjbGFtcCgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BN
aXg6IHByZVN0cmluZyA9ICJtaXgoIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wU3RlcDogcHJlU3RyaW5nID0gInN0ZXAoIjsgZGVsYXllZFdyaXRlID0gdHJ1
ZTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU21vb3RoU3RlcDogcHJlU3RyaW5nID0gInNtb290
aHN0ZXAoIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BE
aXN0YW5jZTogcHJlU3RyaW5nID0gImRpc3RhbmNlKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJy
ZWFrOworICAgICAgICBjYXNlIEVPcERvdDogcHJlU3RyaW5nID0gImRvdCgiOyBkZWxheWVkV3Jp
dGUgPSB0cnVlOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDcm9zczogcHJlU3RyaW5nID0gImNy
b3NzKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEZhY2VG
b3J3YXJkOiBwcmVTdHJpbmcgPSAiZmFjZWZvcndhcmQoIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wUmVmbGVjdDogcHJlU3RyaW5nID0gInJlZmxlY3QoIjsg
ZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUmVmcmFjdDogcHJl
U3RyaW5nID0gInJlZnJhY3QoIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wTXVsOiBwcmVTdHJpbmcgPSAibWF0cml4Q29tcE11bHQoIjsgZGVsYXllZFdyaXRl
ID0gdHJ1ZTsgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7
CisgICAgfQorICAgIGlmIChkZWxheWVkV3JpdGUgJiYgdmlzaXQgPT0gUHJlVmlzaXQgJiYgbm9k
ZS0+Z2V0VXNlRW11bGF0ZWRGdW5jdGlvbigpKQorICAgICAgICBwcmVTdHJpbmcgPSBCdWlsdElu
RnVuY3Rpb25FbXVsYXRvcjo6R2V0RW11bGF0ZWRGdW5jdGlvbk5hbWUocHJlU3RyaW5nKTsKKyAg
ICBpZiAoZGVsYXllZFdyaXRlKQorICAgICAgICB3cml0ZVRyaXBsZXQodmlzaXQsIHByZVN0cmlu
Zy5jX3N0cigpLCAiLCAiLCAiKSIpOworICAgIHJldHVybiB2aXNpdENoaWxkcmVuOworfQorCiti
b29sIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCog
bm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7CisKKyAgICBpbmNy
ZW1lbnREZXB0aChub2RlKTsKKyAgICAvLyBMb29wIGhlYWRlci4KKyAgICBUTG9vcFR5cGUgbG9v
cFR5cGUgPSBub2RlLT5nZXRUeXBlKCk7CisgICAgaWYgKGxvb3BUeXBlID09IEVMb29wRm9yKSAg
Ly8gZm9yIGxvb3AKKyAgICB7CisgICAgICAgIGlmICghbm9kZS0+Z2V0VW5yb2xsRmxhZygpKSB7
CisgICAgICAgICAgICBvdXQgPDwgImZvciAoIjsKKyAgICAgICAgICAgIGlmIChub2RlLT5nZXRJ
bml0KCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Z2V0SW5pdCgpLT50cmF2ZXJzZSh0aGlzKTsK
KyAgICAgICAgICAgIG91dCA8PCAiOyAiOworCisgICAgICAgICAgICBpZiAobm9kZS0+Z2V0Q29u
ZGl0aW9uKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNl
KHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICI7ICI7CisKKyAgICAgICAgICAgIGlmIChub2Rl
LT5nZXRFeHByZXNzaW9uKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Z2V0RXhwcmVzc2lvbigp
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAiKVxuIjsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBlbHNlIGlmIChsb29wVHlwZSA9PSBFTG9vcFdoaWxlKSAgLy8gd2hpbGUgbG9v
cAorICAgIHsKKyAgICAgICAgb3V0IDw8ICJ3aGlsZSAoIjsKKyAgICAgICAgQVNTRVJUKG5vZGUt
PmdldENvbmRpdGlvbigpICE9IE5VTEwpOworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+
dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG91dCA8PCAiKVxuIjsKKyAgICB9CisgICAgZWxzZSAg
Ly8gZG8td2hpbGUgbG9vcAorICAgIHsKKyAgICAgICAgQVNTRVJUKGxvb3BUeXBlID09IEVMb29w
RG9XaGlsZSk7CisgICAgICAgIG91dCA8PCAiZG9cbiI7CisgICAgfQorCisgICAgLy8gTG9vcCBi
b2R5LgorICAgIGlmIChub2RlLT5nZXRVbnJvbGxGbGFnKCkpCisgICAgeworICAgICAgICBUTG9v
cEluZGV4SW5mbyBpbmRleEluZm87CisgICAgICAgIG1Mb29wVW5yb2xsLkZpbGxMb29wSW5kZXhJ
bmZvKG5vZGUsIGluZGV4SW5mbyk7CisgICAgICAgIG1Mb29wVW5yb2xsLlB1c2goaW5kZXhJbmZv
KTsKKyAgICAgICAgd2hpbGUgKG1Mb29wVW5yb2xsLlNhdGlzZmllc0xvb3BDb25kaXRpb24oKSkK
KyAgICAgICAgeworICAgICAgICAgICAgdmlzaXRDb2RlQmxvY2sobm9kZS0+Z2V0Qm9keSgpKTsK
KyAgICAgICAgICAgIG1Mb29wVW5yb2xsLlN0ZXAoKTsKKyAgICAgICAgfQorICAgICAgICBtTG9v
cFVucm9sbC5Qb3AoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdmlzaXRDb2Rl
QmxvY2sobm9kZS0+Z2V0Qm9keSgpKTsKKyAgICB9CisKKyAgICAvLyBMb29wIGZvb3Rlci4KKyAg
ICBpZiAobG9vcFR5cGUgPT0gRUxvb3BEb1doaWxlKSAgLy8gZG8td2hpbGUgbG9vcAorICAgIHsK
KyAgICAgICAgb3V0IDw8ICJ3aGlsZSAoIjsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmdldENvbmRp
dGlvbigpICE9IE5VTEwpOworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2Uo
dGhpcyk7CisgICAgICAgIG91dCA8PCAiKTtcbiI7CisgICAgfQorICAgIGRlY3JlbWVudERlcHRo
KCk7CisKKyAgICAvLyBObyBuZWVkIHRvIHZpc2l0IGNoaWxkcmVuLiBUaGV5IGhhdmUgYmVlbiBh
bHJlYWR5IHByb2Nlc3NlZCBpbgorICAgIC8vIHRoaXMgZnVuY3Rpb24uCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRCcmFuY2goVmlzaXQgdmlzaXQs
IFRJbnRlcm1CcmFuY2gqIG5vZGUpCit7CisgICAgc3dpdGNoIChub2RlLT5nZXRGbG93T3AoKSkK
KyAgICB7CisgICAgICAgIGNhc2UgRU9wS2lsbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZGlzY2Fy
ZCIsIE5VTEwsIE5VTEwpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BCcmVhazogd3JpdGVUcmlw
bGV0KHZpc2l0LCAiYnJlYWsiLCBOVUxMLCBOVUxMKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
Q29udGludWU6IHdyaXRlVHJpcGxldCh2aXNpdCwgImNvbnRpbnVlIiwgTlVMTCwgTlVMTCk7IGJy
ZWFrOworICAgICAgICBjYXNlIEVPcFJldHVybjogd3JpdGVUcmlwbGV0KHZpc2l0LCAicmV0dXJu
ICIsIE5VTEwsIE5VTEwpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsg
YnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgVE91dHB1dEdMU0xC
YXNlOjp2aXNpdENvZGVCbG9jayhUSW50ZXJtTm9kZSogbm9kZSkgeworICAgIFRJbmZvU2lua0Jh
c2UgJm91dCA9IG9ialNpbmsoKTsKKyAgICBpZiAobm9kZSAhPSBOVUxMKQorICAgIHsKKyAgICAg
ICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIC8vIFNpbmdsZSBzdGF0ZW1lbnRzIG5v
dCBwYXJ0IG9mIGEgc2VxdWVuY2UgbmVlZCB0byBiZSB0ZXJtaW5hdGVkCisgICAgICAgIC8vIHdp
dGggc2VtaS1jb2xvbi4KKyAgICAgICAgaWYgKGlzU2luZ2xlU3RhdGVtZW50KG5vZGUpKQorICAg
ICAgICAgICAgb3V0IDw8ICI7XG4iOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBv
dXQgPDwgIntcbn1cbiI7ICAvLyBFbXB0eSBjb2RlIGJsb2NrLgorICAgIH0KK30KKworVFN0cmlu
ZyBUT3V0cHV0R0xTTEJhc2U6OmdldFR5cGVOYW1lKGNvbnN0IFRUeXBlJiB0eXBlKQoreworICAg
IFRJbmZvU2lua0Jhc2Ugb3V0OworICAgIGlmICh0eXBlLmlzTWF0cml4KCkpCisgICAgeworICAg
ICAgICBvdXQgPDwgIm1hdCI7CisgICAgICAgIG91dCA8PCB0eXBlLmdldE5vbWluYWxTaXplKCk7
CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUuaXNWZWN0b3IoKSkKKyAgICB7CisgICAgICAgIHN3
aXRjaCAodHlwZS5nZXRCYXNpY1R5cGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBF
YnRGbG9hdDogb3V0IDw8ICJ2ZWMiOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0SW50OiBv
dXQgPDwgIml2ZWMiOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogb3V0IDw8ICJi
dmVjIjsgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBvdXQgPDwgdHlwZS5nZXROb21pbmFsU2l6ZSgpOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRT
dHJ1Y3QpCisgICAgICAgICAgICBvdXQgPDwgaGFzaE5hbWUodHlwZS5nZXRTdHJ1Y3QoKS0+bmFt
ZSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0IDw8IHR5cGUuZ2V0QmFzaWNTdHJp
bmcoKTsKKyAgICB9CisgICAgcmV0dXJuIFRTdHJpbmcob3V0LmNfc3RyKCkpOworfQorCitUU3Ry
aW5nIFRPdXRwdXRHTFNMQmFzZTo6aGFzaE5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSkKK3sKKyAg
ICBpZiAobUhhc2hGdW5jdGlvbiA9PSBOVUxMIHx8IG5hbWUuZW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIG5hbWU7CisgICAgTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtTmFtZU1hcC5maW5k
KG5hbWUuY19zdHIoKSk7CisgICAgaWYgKGl0ICE9IG1OYW1lTWFwLmVuZCgpKQorICAgICAgICBy
ZXR1cm4gaXQtPnNlY29uZC5jX3N0cigpOworICAgIFRTdHJpbmcgaGFzaGVkTmFtZSA9IFRJbnRl
cm1UcmF2ZXJzZXI6Omhhc2gobmFtZSwgbUhhc2hGdW5jdGlvbik7CisgICAgbU5hbWVNYXBbbmFt
ZS5jX3N0cigpXSA9IGhhc2hlZE5hbWUuY19zdHIoKTsKKyAgICByZXR1cm4gaGFzaGVkTmFtZTsK
K30KKworVFN0cmluZyBUT3V0cHV0R0xTTEJhc2U6Omhhc2hWYXJpYWJsZU5hbWUoY29uc3QgVFN0
cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobVN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKG5hbWUpICE9
IE5VTEwpCisgICAgICAgIHJldHVybiBuYW1lOworICAgIHJldHVybiBoYXNoTmFtZShuYW1lKTsK
K30KKworVFN0cmluZyBUT3V0cHV0R0xTTEJhc2U6Omhhc2hGdW5jdGlvbk5hbWUoY29uc3QgVFN0
cmluZyYgbWFuZ2xlZF9uYW1lKQoreworICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5t
YW5nbGVOYW1lKG1hbmdsZWRfbmFtZSk7CisgICAgaWYgKG1TeW1ib2xUYWJsZS5maW5kQnVpbHRJ
bihtYW5nbGVkX25hbWUpICE9IE5VTEwgfHwgbmFtZSA9PSAibWFpbiIpCisgICAgICAgIHJldHVy
biBuYW1lOworICAgIHJldHVybiBoYXNoTmFtZShuYW1lKTsKK30KKworYm9vbCBUT3V0cHV0R0xT
TEJhc2U6OnN0cnVjdERlY2xhcmVkKGNvbnN0IFRTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QK
K3sKKyAgICByZXR1cm4gbURlY2xhcmVkU3RydWN0cy5maW5kKHN0cnVjdHVyZS0+bmFtZSgpKSAh
PSBtRGVjbGFyZWRTdHJ1Y3RzLmVuZCgpOworfQorCit2b2lkIFRPdXRwdXRHTFNMQmFzZTo6ZGVj
bGFyZVN0cnVjdChjb25zdCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgVEluZm9TaW5r
QmFzZSYgb3V0ID0gb2JqU2luaygpOworCisgICAgb3V0IDw8ICJzdHJ1Y3QgIiA8PCBoYXNoTmFt
ZShzdHJ1Y3R1cmUtPm5hbWUoKSkgPDwgIntcbiI7CisgICAgY29uc3QgVEZpZWxkTGlzdCYgZmll
bGRzID0gc3RydWN0dXJlLT5maWVsZHMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZp
ZWxkcy5zaXplKCk7ICsraSkKKyAgICB7CisgICAgICAgIGNvbnN0IFRGaWVsZCogZmllbGQgPSBm
aWVsZHNbaV07CisgICAgICAgIGlmICh3cml0ZVZhcmlhYmxlUHJlY2lzaW9uKGZpZWxkLT50eXBl
KCktPmdldFByZWNpc2lvbigpKSkKKyAgICAgICAgICAgIG91dCA8PCAiICI7CisgICAgICAgIG91
dCA8PCBnZXRUeXBlTmFtZSgqZmllbGQtPnR5cGUoKSkgPDwgIiAiIDw8IGhhc2hOYW1lKGZpZWxk
LT5uYW1lKCkpOworICAgICAgICBpZiAoZmllbGQtPnR5cGUoKS0+aXNBcnJheSgpKQorICAgICAg
ICAgICAgb3V0IDw8IGFycmF5QnJhY2tldHMoKmZpZWxkLT50eXBlKCkpOworICAgICAgICBvdXQg
PDwgIjtcbiI7CisgICAgfQorICAgIG91dCA8PCAifSI7CisKKyAgICBtRGVjbGFyZWRTdHJ1Y3Rz
Lmluc2VydChzdHJ1Y3R1cmUtPm5hbWUoKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMQmFzZS5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJh
c2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi43NmJlYzRkZTYxZTA0MWFjMThkYWVmMTIwZmVkYzNmZGJjZDlkOTgz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuaApAQCAtMCwwICsxLDc5IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisjaWZuZGVmIENST1NTQ09NUElMRVJHTFNMX09VVFBVVEdMU0xCQVNFX0hfCisj
ZGVmaW5lIENST1NTQ09NUElMRVJHTFNMX09VVFBVVEdMU0xCQVNFX0hfCisKKyNpbmNsdWRlIDxz
ZXQ+CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwuaCIKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCisKK2NsYXNzIFRPdXRwdXRHTFNMQmFz
ZSA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CitwdWJsaWM6CisgICAgVE91dHB1dEdMU0xC
YXNlKFRJbmZvU2lua0Jhc2UmIG9ialNpbmssCisgICAgICAgICAgICAgICAgICAgIFNoQXJyYXlJ
bmRleENsYW1waW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJhdGVneSwKKyAgICAgICAgICAgICAgICAg
ICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgIE5h
bWVNYXAmIG5hbWVNYXAsCisgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9s
VGFibGUpOworCitwcm90ZWN0ZWQ6CisgICAgVEluZm9TaW5rQmFzZSYgb2JqU2luaygpIHsgcmV0
dXJuIG1PYmpTaW5rOyB9CisgICAgdm9pZCB3cml0ZVRyaXBsZXQoVmlzaXQgdmlzaXQsIGNvbnN0
IGNoYXIqIHByZVN0ciwgY29uc3QgY2hhciogaW5TdHIsIGNvbnN0IGNoYXIqIHBvc3RTdHIpOwor
ICAgIHZvaWQgd3JpdGVWYXJpYWJsZVR5cGUoY29uc3QgVFR5cGUmIHR5cGUpOworICAgIHZpcnR1
YWwgYm9vbCB3cml0ZVZhcmlhYmxlUHJlY2lzaW9uKFRQcmVjaXNpb24gcHJlY2lzaW9uKSA9IDA7
CisgICAgdm9pZCB3cml0ZUZ1bmN0aW9uUGFyYW1ldGVycyhjb25zdCBUSW50ZXJtU2VxdWVuY2Um
IGFyZ3MpOworICAgIGNvbnN0IENvbnN0YW50VW5pb24qIHdyaXRlQ29uc3RhbnRVbmlvbihjb25z
dCBUVHlwZSYgdHlwZSwgY29uc3QgQ29uc3RhbnRVbmlvbiogcENvbnN0VW5pb24pOworICAgIFRT
dHJpbmcgZ2V0VHlwZU5hbWUoY29uc3QgVFR5cGUmIHR5cGUpOworCisgICAgdmlydHVhbCB2b2lk
IHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpOworICAgIHZpcnR1YWwgdm9pZCB2aXNp
dENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qIG5vZGUpOworICAgIHZpcnR1YWwg
Ym9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSogbm9kZSk7CisgICAg
dmlydHVhbCBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSogbm9kZSk7
CisgICAgdmlydHVhbCBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2Vs
ZWN0aW9uKiBub2RlKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlz
aXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdExvb3Ao
VmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKiBub2RlKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRC
cmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqIG5vZGUpOworCisgICAgdm9pZCB2aXNp
dENvZGVCbG9jayhUSW50ZXJtTm9kZSogbm9kZSk7CisKKworICAgIC8vIFJldHVybiB0aGUgb3Jp
Z2luYWwgbmFtZSBpZiBoYXNoIGZ1bmN0aW9uIHBvaW50ZXIgaXMgTlVMTDsKKyAgICAvLyBvdGhl
cndpc2UgcmV0dXJuIHRoZSBoYXNoZWQgbmFtZS4KKyAgICBUU3RyaW5nIGhhc2hOYW1lKGNvbnN0
IFRTdHJpbmcmIG5hbWUpOworICAgIC8vIFNhbWUgYXMgaGFzaE5hbWUoKSwgYnV0IHdpdGhvdXQg
aGFzaGluZyBidWlsdC1pbiB2YXJpYWJsZXMuCisgICAgVFN0cmluZyBoYXNoVmFyaWFibGVOYW1l
KGNvbnN0IFRTdHJpbmcmIG5hbWUpOworICAgIC8vIFNhbWUgYXMgaGFzaE5hbWUoKSwgYnV0IHdp
dGhvdXQgaGFzaGluZyBidWlsdC1pbiBmdW5jdGlvbnMuCisgICAgVFN0cmluZyBoYXNoRnVuY3Rp
b25OYW1lKGNvbnN0IFRTdHJpbmcmIG1hbmdsZWRfbmFtZSk7CisKK3ByaXZhdGU6CisgICAgYm9v
bCBzdHJ1Y3REZWNsYXJlZChjb25zdCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0OworICAg
IHZvaWQgZGVjbGFyZVN0cnVjdChjb25zdCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUpOworCisgICAg
VEluZm9TaW5rQmFzZSYgbU9ialNpbms7CisgICAgYm9vbCBtRGVjbGFyaW5nVmFyaWFibGVzOwor
CisgICAgLy8gU3RydWN0cyBhcmUgZGVjbGFyZWQgYXMgdGhlIHRyZWUgaXMgdHJhdmVyc2VkLiBU
aGlzIHNldCBjb250YWlucyBhbGwKKyAgICAvLyB0aGUgc3RydWN0cyBhbHJlYWR5IGRlY2xhcmVk
LiBJdCBpcyBtYWludGFpbmVkIHNvIHRoYXQgYSBzdHJ1Y3QgaXMKKyAgICAvLyBkZWNsYXJlZCBv
bmx5IG9uY2UuCisgICAgdHlwZWRlZiBzdGQ6OnNldDxUU3RyaW5nPiBEZWNsYXJlZFN0cnVjdHM7
CisgICAgRGVjbGFyZWRTdHJ1Y3RzIG1EZWNsYXJlZFN0cnVjdHM7CisKKyAgICBGb3JMb29wVW5y
b2xsIG1Mb29wVW5yb2xsOworCisgICAgU2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBtQ2xh
bXBpbmdTdHJhdGVneTsKKworICAgIC8vIG5hbWUgaGFzaGluZy4KKyAgICBTaEhhc2hGdW5jdGlv
bjY0IG1IYXNoRnVuY3Rpb247CisKKyAgICBOYW1lTWFwJiBtTmFtZU1hcDsKKworICAgIFRTeW1i
b2xUYWJsZSYgbVN5bWJvbFRhYmxlOworfTsKKworI2VuZGlmICAvLyBDUk9TU0NPTVBJTEVSR0xT
TF9PVVRQVVRHTFNMQkFTRV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0SExTTC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRITFNMLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hZjk5NmRmNzE5ZmM0ZmFmZjhhMGE1MjBjYzdlODNhOGMyZDdhNzc5Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0
cHV0SExTTC5jcHAKQEAgLTAsMCArMSwzMTM4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRITFNMLmgiCisKKyNpbmNsdWRlICJjb21t
b24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvY29tcGlsZXJk
ZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0RGlzY29udGludWl0
eS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1NlYXJjaFN5bWJvbC5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9Ob2RlU2VhcmNoLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9SZXdy
aXRlRWxzZUJsb2Nrcy5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNmbG9h
dD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCituYW1lc3BhY2Ugc2gKK3sKKworT3V0cHV0SExTTDo6
T3V0cHV0SExTTChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBjb25zdCBTaEJ1aWx0SW5SZXNvdXJj
ZXMmIHJlc291cmNlcywgU2hTaGFkZXJPdXRwdXQgb3V0cHV0VHlwZSkKKyAgICA6IFRJbnRlcm1U
cmF2ZXJzZXIodHJ1ZSwgdHJ1ZSwgdHJ1ZSksIG1Db250ZXh0KGNvbnRleHQpLCBtT3V0cHV0VHlw
ZShvdXRwdXRUeXBlKQoreworICAgIG1VbmZvbGRTaG9ydENpcmN1aXQgPSBuZXcgVW5mb2xkU2hv
cnRDaXJjdWl0KGNvbnRleHQsIHRoaXMpOworICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNlOwor
CisgICAgbVVzZXNUZXh0dXJlMkQgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmUyRF9iaWFzID0g
ZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRQcm9qID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJl
MkRQcm9qX2JpYXMgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QgPSBmYWxzZTsK
KyAgICBtVXNlc1RleHR1cmUyRExvZCA9IGZhbHNlOworICAgIG1Vc2VzVGV4dHVyZUN1YmUgPSBm
YWxzZTsKKyAgICBtVXNlc1RleHR1cmVDdWJlX2JpYXMgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1
cmVDdWJlTG9kID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRMb2QwID0gZmFsc2U7CisgICAg
bVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmUyRFByb2pM
b2QwID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzID0gZmFsc2U7Cisg
ICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDAgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmVDdWJlTG9k
MF9iaWFzID0gZmFsc2U7CisgICAgbVVzZXNGcmFnQ29sb3IgPSBmYWxzZTsKKyAgICBtVXNlc0Zy
YWdEYXRhID0gZmFsc2U7CisgICAgbVVzZXNEZXB0aFJhbmdlID0gZmFsc2U7CisgICAgbVVzZXNG
cmFnQ29vcmQgPSBmYWxzZTsKKyAgICBtVXNlc1BvaW50Q29vcmQgPSBmYWxzZTsKKyAgICBtVXNl
c0Zyb250RmFjaW5nID0gZmFsc2U7CisgICAgbVVzZXNQb2ludFNpemUgPSBmYWxzZTsKKyAgICBt
VXNlc0ZyYWdEZXB0aCA9IGZhbHNlOworICAgIG1Vc2VzWG9yID0gZmFsc2U7CisgICAgbVVzZXNN
b2QxID0gZmFsc2U7CisgICAgbVVzZXNNb2QydiA9IGZhbHNlOworICAgIG1Vc2VzTW9kMmYgPSBm
YWxzZTsKKyAgICBtVXNlc01vZDN2ID0gZmFsc2U7CisgICAgbVVzZXNNb2QzZiA9IGZhbHNlOwor
ICAgIG1Vc2VzTW9kNHYgPSBmYWxzZTsKKyAgICBtVXNlc01vZDRmID0gZmFsc2U7CisgICAgbVVz
ZXNGYWNlZm9yd2FyZDEgPSBmYWxzZTsKKyAgICBtVXNlc0ZhY2Vmb3J3YXJkMiA9IGZhbHNlOwor
ICAgIG1Vc2VzRmFjZWZvcndhcmQzID0gZmFsc2U7CisgICAgbVVzZXNGYWNlZm9yd2FyZDQgPSBm
YWxzZTsKKyAgICBtVXNlc0F0YW4yXzEgPSBmYWxzZTsKKyAgICBtVXNlc0F0YW4yXzIgPSBmYWxz
ZTsKKyAgICBtVXNlc0F0YW4yXzMgPSBmYWxzZTsKKyAgICBtVXNlc0F0YW4yXzQgPSBmYWxzZTsK
KyAgICBtVXNlc0Rpc2NhcmRSZXdyaXRpbmcgPSBmYWxzZTsKKworICAgIG1OdW1SZW5kZXJUYXJn
ZXRzID0gcmVzb3VyY2VzLkVYVF9kcmF3X2J1ZmZlcnMgPyByZXNvdXJjZXMuTWF4RHJhd0J1ZmZl
cnMgOiAxOworCisgICAgbVNjb3BlRGVwdGggPSAwOworCisgICAgbVVuaXF1ZUluZGV4ID0gMDsK
KworICAgIG1Db250YWluc0xvb3BEaXNjb250aW51aXR5ID0gZmFsc2U7CisgICAgbU91dHB1dExv
ZDBGdW5jdGlvbiA9IGZhbHNlOworICAgIG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCA9IGZhbHNl
OworCisgICAgbUV4Y2Vzc2l2ZUxvb3BJbmRleCA9IE5VTEw7CisKKyAgICBpZiAobU91dHB1dFR5
cGUgPT0gU0hfSExTTDlfT1VUUFVUKQorICAgIHsKKyAgICAgICAgaWYgKG1Db250ZXh0LnNoYWRl
clR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKQorICAgICAgICB7CisgICAgICAgICAgICBtVW5p
Zm9ybVJlZ2lzdGVyID0gMzsgICAvLyBSZXNlcnZlIHJlZ2lzdGVycyBmb3IgZHhfRGVwdGhSYW5n
ZSwgZHhfVmlld0Nvb3JkcyBhbmQgZHhfRGVwdGhGcm9udAorICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgbVVuaWZvcm1SZWdpc3RlciA9IDI7ICAgLy8gUmVz
ZXJ2ZSByZWdpc3RlcnMgZm9yIGR4X0RlcHRoUmFuZ2UgYW5kIGR4X1ZpZXdBZGp1c3QKKyAgICAg
ICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtVW5pZm9ybVJlZ2lzdGVyID0g
MDsKKyAgICB9CisKKyAgICBtU2FtcGxlclJlZ2lzdGVyID0gMDsKK30KKworT3V0cHV0SExTTDo6
fk91dHB1dEhMU0woKQoreworICAgIGRlbGV0ZSBtVW5mb2xkU2hvcnRDaXJjdWl0OworfQorCit2
b2lkIE91dHB1dEhMU0w6Om91dHB1dCgpCit7CisgICAgbUNvbnRhaW5zTG9vcERpc2NvbnRpbnVp
dHkgPSBtQ29udGV4dC5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUiAmJiBjb250YWlu
c0xvb3BEaXNjb250aW51aXR5KG1Db250ZXh0LnRyZWVSb290KTsKKworICAgIC8vIFdvcmsgYXJv
dW5kIEQzRDkgYnVnIHRoYXQgd291bGQgbWFuaWZlc3QgaW4gdmVydGV4IHNoYWRlcnMgd2l0aCBz
ZWxlY3Rpb24gYmxvY2tzIHdoaWNoCisgICAgLy8gdXNlIGEgdmVydGV4IGF0dHJpYnV0ZSBhcyBh
IGNvbmRpdGlvbiwgYW5kIHNvbWUgcmVsYXRlZCBjb21wdXRhdGlvbiBpbiB0aGUgZWxzZSBibG9j
ay4KKyAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUICYmIG1Db250ZXh0LnNo
YWRlclR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUikKKyAgICB7CisgICAgICAgIFJld3JpdGVFbHNl
QmxvY2tzKG1Db250ZXh0LnRyZWVSb290KTsKKyAgICB9CisKKyAgICBtQ29udGV4dC50cmVlUm9v
dC0+dHJhdmVyc2UodGhpcyk7ICAgLy8gT3V0cHV0IHRoZSBib2R5IGZpcnN0IHRvIGRldGVybWlu
ZSB3aGF0IGhhcyB0byBnbyBpbiB0aGUgaGVhZGVyCisgICAgaGVhZGVyKCk7CisKKyAgICBtQ29u
dGV4dC5pbmZvU2luaygpLm9iaiA8PCBtSGVhZGVyLmNfc3RyKCk7CisgICAgbUNvbnRleHQuaW5m
b1NpbmsoKS5vYmogPDwgbUJvZHkuY19zdHIoKTsKK30KKworVEluZm9TaW5rQmFzZSAmT3V0cHV0
SExTTDo6Z2V0Qm9keVN0cmVhbSgpCit7CisgICAgcmV0dXJuIG1Cb2R5OworfQorCitjb25zdCBB
Y3RpdmVVbmlmb3JtcyAmT3V0cHV0SExTTDo6Z2V0VW5pZm9ybXMoKQoreworICAgIHJldHVybiBt
QWN0aXZlVW5pZm9ybXM7Cit9CisKK2ludCBPdXRwdXRITFNMOjp2ZWN0b3JTaXplKGNvbnN0IFRU
eXBlICZ0eXBlKSBjb25zdAoreworICAgIGludCBlbGVtZW50U2l6ZSA9IHR5cGUuaXNNYXRyaXgo
KSA/IHR5cGUuZ2V0Tm9taW5hbFNpemUoKSA6IDE7CisgICAgaW50IGFycmF5U2l6ZSA9IHR5cGUu
aXNBcnJheSgpID8gdHlwZS5nZXRBcnJheVNpemUoKSA6IDE7CisKKyAgICByZXR1cm4gZWxlbWVu
dFNpemUgKiBhcnJheVNpemU7Cit9CisKK3ZvaWQgT3V0cHV0SExTTDo6aGVhZGVyKCkKK3sKKyAg
ICBTaFNoYWRlclR5cGUgc2hhZGVyVHlwZSA9IG1Db250ZXh0LnNoYWRlclR5cGU7CisgICAgVElu
Zm9TaW5rQmFzZSAmb3V0ID0gbUhlYWRlcjsKKworICAgIGZvciAoU3RydWN0RGVjbGFyYXRpb25z
OjppdGVyYXRvciBzdHJ1Y3REZWNsYXJhdGlvbiA9IG1TdHJ1Y3REZWNsYXJhdGlvbnMuYmVnaW4o
KTsgc3RydWN0RGVjbGFyYXRpb24gIT0gbVN0cnVjdERlY2xhcmF0aW9ucy5lbmQoKTsgc3RydWN0
RGVjbGFyYXRpb24rKykKKyAgICB7CisgICAgICAgIG91dCA8PCAqc3RydWN0RGVjbGFyYXRpb247
CisgICAgfQorCisgICAgZm9yIChDb25zdHJ1Y3RvcnM6Oml0ZXJhdG9yIGNvbnN0cnVjdG9yID0g
bUNvbnN0cnVjdG9ycy5iZWdpbigpOyBjb25zdHJ1Y3RvciAhPSBtQ29uc3RydWN0b3JzLmVuZCgp
OyBjb25zdHJ1Y3RvcisrKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICpjb25zdHJ1Y3RvcjsKKyAg
ICB9CisKKyAgICBUU3RyaW5nIHVuaWZvcm1zOworICAgIFRTdHJpbmcgdmFyeWluZ3M7CisgICAg
VFN0cmluZyBhdHRyaWJ1dGVzOworCisgICAgZm9yIChSZWZlcmVuY2VkU3ltYm9sczo6Y29uc3Rf
aXRlcmF0b3IgdW5pZm9ybSA9IG1SZWZlcmVuY2VkVW5pZm9ybXMuYmVnaW4oKTsgdW5pZm9ybSAh
PSBtUmVmZXJlbmNlZFVuaWZvcm1zLmVuZCgpOyB1bmlmb3JtKyspCisgICAgeworICAgICAgICBj
b25zdCBUVHlwZSAmdHlwZSA9IHVuaWZvcm0tPnNlY29uZC0+Z2V0VHlwZSgpOworICAgICAgICBj
b25zdCBUU3RyaW5nICZuYW1lID0gdW5pZm9ybS0+c2Vjb25kLT5nZXRTeW1ib2woKTsKKworICAg
ICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCAmJiBJc1NhbXBsZXIodHlw
ZS5nZXRCYXNpY1R5cGUoKSkpICAgLy8gQWxzbyBkZWNsYXJlIHRoZSB0ZXh0dXJlCisgICAgICAg
IHsKKyAgICAgICAgICAgIGludCBpbmRleCA9IHNhbXBsZXJSZWdpc3RlcihtUmVmZXJlbmNlZFVu
aWZvcm1zW25hbWVdKTsKKworICAgICAgICAgICAgdW5pZm9ybXMgKz0gInVuaWZvcm0gU2FtcGxl
clN0YXRlIHNhbXBsZXJfIiArIGRlY29yYXRlVW5pZm9ybShuYW1lLCB0eXBlKSArIGFycmF5U3Ry
aW5nKHR5cGUpICsgCisgICAgICAgICAgICAgICAgICAgICAgICAiIDogcmVnaXN0ZXIocyIgKyBz
dHIoaW5kZXgpICsgIik7XG4iOworCisgICAgICAgICAgICB1bmlmb3JtcyArPSAidW5pZm9ybSAi
ICsgdGV4dHVyZVN0cmluZyh0eXBlKSArICIgdGV4dHVyZV8iICsgZGVjb3JhdGVVbmlmb3JtKG5h
bWUsIHR5cGUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICIgOiByZWdpc3Rlcih0IiArIHN0cihpbmRleCkgKyAiKTtcbiI7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB1bmlmb3JtcyArPSAidW5pZm9ybSAiICsg
dHlwZVN0cmluZyh0eXBlKSArICIgIiArIGRlY29yYXRlVW5pZm9ybShuYW1lLCB0eXBlKSArIGFy
cmF5U3RyaW5nKHR5cGUpICsgCisgICAgICAgICAgICAgICAgICAgICAgICAiIDogcmVnaXN0ZXIo
IiArIHJlZ2lzdGVyU3RyaW5nKG1SZWZlcmVuY2VkVW5pZm9ybXNbbmFtZV0pICsgIik7XG4iOwor
ICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChSZWZlcmVuY2VkU3ltYm9sczo6Y29uc3RfaXRl
cmF0b3IgdmFyeWluZyA9IG1SZWZlcmVuY2VkVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBt
UmVmZXJlbmNlZFZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCisgICAgeworICAgICAgICBjb25z
dCBUVHlwZSAmdHlwZSA9IHZhcnlpbmctPnNlY29uZC0+Z2V0VHlwZSgpOworICAgICAgICBjb25z
dCBUU3RyaW5nICZuYW1lID0gdmFyeWluZy0+c2Vjb25kLT5nZXRTeW1ib2woKTsKKworICAgICAg
ICAvLyBQcm9ncmFtIGxpbmtpbmcgZGVwZW5kcyBvbiB0aGlzIGV4YWN0IGZvcm1hdAorICAgICAg
ICB2YXJ5aW5ncyArPSAic3RhdGljICIgKyB0eXBlU3RyaW5nKHR5cGUpICsgIiAiICsgZGVjb3Jh
dGUobmFtZSkgKyBhcnJheVN0cmluZyh0eXBlKSArICIgPSAiICsgaW5pdGlhbGl6ZXIodHlwZSkg
KyAiO1xuIjsKKyAgICB9CisKKyAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpjb25zdF9pdGVy
YXRvciBhdHRyaWJ1dGUgPSBtUmVmZXJlbmNlZEF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRl
ICE9IG1SZWZlcmVuY2VkQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgeworICAg
ICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IGF0dHJpYnV0ZS0+c2Vjb25kLT5nZXRUeXBlKCk7Cisg
ICAgICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSBhdHRyaWJ1dGUtPnNlY29uZC0+Z2V0U3ltYm9s
KCk7CisKKyAgICAgICAgYXR0cmlidXRlcyArPSAic3RhdGljICIgKyB0eXBlU3RyaW5nKHR5cGUp
ICsgIiAiICsgZGVjb3JhdGUobmFtZSkgKyBhcnJheVN0cmluZyh0eXBlKSArICIgPSAiICsgaW5p
dGlhbGl6ZXIodHlwZSkgKyAiO1xuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNEaXNjYXJkUmV3
cml0aW5nKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICIjZGVmaW5lIEFOR0xFX1VTRVNfRElTQ0FS
RF9SRVdSSVRJTkciIDw8ICJcbiI7CisgICAgfQorCisgICAgaWYgKHNoYWRlclR5cGUgPT0gU0hf
RlJBR01FTlRfU0hBREVSKQorICAgIHsKKyAgICAgICAgVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25z
dF9pdGVyYXRvciBpdGVyID0gbUNvbnRleHQuZXh0ZW5zaW9uQmVoYXZpb3IoKS5maW5kKCJHTF9F
WFRfZHJhd19idWZmZXJzIik7CisgICAgICAgIGNvbnN0IGJvb2wgdXNpbmdNUlRFeHRlbnNpb24g
PSAoaXRlciAhPSBtQ29udGV4dC5leHRlbnNpb25CZWhhdmlvcigpLmVuZCgpICYmIChpdGVyLT5z
ZWNvbmQgPT0gRUJoRW5hYmxlIHx8IGl0ZXItPnNlY29uZCA9PSBFQmhSZXF1aXJlKSk7CisKKyAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IG51bUNvbG9yVmFsdWVzID0gdXNpbmdNUlRFeHRlbnNp
b24gPyBtTnVtUmVuZGVyVGFyZ2V0cyA6IDE7CisKKyAgICAgICAgb3V0IDw8ICIvLyBWYXJ5aW5n
c1xuIjsKKyAgICAgICAgb3V0IDw8ICB2YXJ5aW5nczsKKyAgICAgICAgb3V0IDw8ICJcbiIKKyAg
ICAgICAgICAgICAgICJzdGF0aWMgZmxvYXQ0IGdsX0NvbG9yWyIgPDwgbnVtQ29sb3JWYWx1ZXMg
PDwgIl0gPVxuIgorICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgbnVtQ29sb3JWYWx1ZXM7IGkrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgb3V0IDw8ICIgICAgZmxvYXQ0KDAsIDAsIDAsIDApIjsKKyAgICAgICAgICAgIGlmIChpICsg
MSAhPSBudW1Db2xvclZhbHVlcykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQg
PDwgIiwiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0IDw8ICJcbiI7CisgICAgICAg
IH0KKyAgICAgICAgb3V0IDw8ICJ9O1xuIjsKKworICAgICAgICBpZiAobVVzZXNGcmFnRGVwdGgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGZsb2F0IGdsX0RlcHRoID0g
MC4wO1xuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc0ZyYWdDb29yZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgZmxvYXQ0IGdsX0ZyYWdDb29yZCA9IGZs
b2F0NCgwLCAwLCAwLCAwKTtcbiI7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNQb2lu
dENvb3JkKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgInN0YXRpYyBmbG9hdDIgZ2xf
UG9pbnRDb29yZCA9IGZsb2F0MigwLjUsIDAuNSk7XG4iOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKG1Vc2VzRnJvbnRGYWNpbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAic3Rh
dGljIGJvb2wgZ2xfRnJvbnRGYWNpbmcgPSBmYWxzZTtcbiI7CisgICAgICAgIH0KKworICAgICAg
ICBvdXQgPDwgIlxuIjsKKworICAgICAgICBpZiAobVVzZXNEZXB0aFJhbmdlKQorICAgICAgICB7
CisgICAgICAgICAgICBvdXQgPDwgInN0cnVjdCBnbF9EZXB0aFJhbmdlUGFyYW1ldGVyc1xuIgor
ICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBu
ZWFyO1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZmFyO1xuIgorICAgICAgICAg
ICAgICAgICAgICIgICAgZmxvYXQgZGlmZjtcbiIKKyAgICAgICAgICAgICAgICAgICAifTtcbiIK
KyAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1PdXRw
dXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8
PCAiY2J1ZmZlciBEcml2ZXJDb25zdGFudHMgOiByZWdpc3RlcihiMSlcbiIKKyAgICAgICAgICAg
ICAgICAgICAie1xuIjsKKworICAgICAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdDMgZHhfRGVwdGhSYW5n
ZSA6IHBhY2tvZmZzZXQoYzApO1xuIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KG1Vc2VzRnJhZ0Nvb3JkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAi
ICAgIGZsb2F0NCBkeF9WaWV3Q29vcmRzIDogcGFja29mZnNldChjMSk7XG4iOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAobVVzZXNGcmFnQ29vcmQgfHwgbVVzZXNGcm9udEZhY2lu
ZykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdDMgZHhf
RGVwdGhGcm9udCA6IHBhY2tvZmZzZXQoYzIpO1xuIjsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgb3V0IDw8ICJ9O1xuIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChtVXNlc0RlcHRoUmFuZ2UpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgb3V0IDw8ICJ1bmlmb3JtIGZsb2F0MyBkeF9EZXB0aFJhbmdlIDogcmVnaXN0ZXIo
YzApOyI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtVXNlc0ZyYWdDb29yZCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgInVuaWZvcm0gZmxvYXQ0IGR4
X1ZpZXdDb29yZHMgOiByZWdpc3RlcihjMSk7XG4iOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAobVVzZXNGcmFnQ29vcmQgfHwgbVVzZXNGcm9udEZhY2luZykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgInVuaWZvcm0gZmxvYXQzIGR4X0RlcHRoRnJvbnQg
OiByZWdpc3RlcihjMik7XG4iOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
b3V0IDw8ICJcbiI7CisKKyAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgZ2xfRGVwdGhSYW5nZVBhcmFtZXRlcnMgZ2xfRGVw
dGhSYW5nZSA9IHtkeF9EZXB0aFJhbmdlLngsIGR4X0RlcHRoUmFuZ2UueSwgZHhfRGVwdGhSYW5n
ZS56fTtcbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBvdXQgPDwgIHVuaWZvcm1zOworICAgICAgICBvdXQgPDwgIlxuIjsKKworICAgICAg
ICBpZiAobVVzZXNUZXh0dXJlMkQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtT3V0cHV0
VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
b3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKHNhbXBsZXIyRCBzLCBmbG9hdDIgdClcbiIKKyAg
ICAgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gdGV4MkQocywgdCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChUZXh0dXJlMkQgdCwgU2Ft
cGxlclN0YXRlIHMsIGZsb2F0MiB1dilcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIntcbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGUocywgdXYpO1xuIgor
ICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICAgICAiXG4i
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEX2JpYXMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKHNhbXBsZXIyRCBz
LCBmbG9hdDIgdCwgZmxvYXQgYmlhcylcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIntcbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRiaWFzKHMsIGZsb2F0NCh0
LngsIHQueSwgMCwgYmlhcykpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAg
ICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoVGV4dHVyZTJEIHQsIFNh
bXBsZXJTdGF0ZSBzLCBmbG9hdDIgdXYsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxl
QmlhcyhzLCB1diwgYmlhcyk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRQ
cm9qKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlf
T1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGds
X3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0MyB0KVxuIgorICAgICAgICAgICAgICAg
ICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRHBy
b2oocywgZmxvYXQ0KHQueCwgdC55LCAwLCB0LnopKTtcbiIKKyAgICAgICAgICAgICAgICAgICAg
ICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAg
ICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxuIgor
ICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0ZXgyRHByb2oocywgdCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4i
CisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVy
ZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3KVxuIgorICAgICAgICAgICAgICAgICAg
ICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZShz
LCBmbG9hdDIodXZ3LnggLyB1dncueiwgdXZ3LnkgLyB1dncueikpO1xuIgorICAgICAgICAgICAg
ICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAg
ICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihUZXh0dXJlMkQgdCwgU2FtcGxl
clN0YXRlIHMsIGZsb2F0NCB1dncpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisg
ICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlKHMsIGZsb2F0Mih1dncu
eCAvIHV2dy53LCB1dncueSAvIHV2dy53KSk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNU
ZXh0dXJlMkRQcm9qX2JpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtT3V0cHV0VHlw
ZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0
IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQzIHQsIGZsb2F0
IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHRleDJEYmlhcyhzLCBmbG9hdDQodC54IC8gdC56LCB0LnkgLyB0
LnosIDAsIGJpYXMpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3Rl
eHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0NCB0LCBmbG9hdCBiaWFzKVxuIgorICAgICAg
ICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVy
biB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53LCAwLCBiaWFzKSk7XG4i
CisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJc
biI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBT
SF9ITFNMMTFfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAi
ZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9h
dDMgdXZ3LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAg
ICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUJpYXMocywgZmxvYXQyKHV2
dy54IC8gdXZ3LnosIHV2dy55IC8gdXZ3LnopLCBiaWFzKTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAg
ICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0
ZSBzLCBmbG9hdDQgdXZ3LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAi
e1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUJpYXMocywg
ZmxvYXQyKHV2dy54IC8gdXZ3LncsIHV2dy55IC8gdXZ3LncpLCBiaWFzKTtcbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChtVXNlc1RleHR1cmVDdWJlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
bU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlKHNhbXBsZXJDVUJFIHMsIGZsb2F0
MyB0KVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0ZXhDVUJFKHMsIHQpO1xuIgorICAgICAgICAgICAgICAgICAgICAg
ICAifVxuIgorICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShU
ZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dylcbiIKKyAgICAgICAgICAg
ICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5T
YW1wbGUocywgdXZ3KTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmVDdWJlX2Jp
YXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9P
VVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xf
dGV4dHVyZUN1YmUoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHRleENVQkViaWFzKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCBiaWFzKSk7XG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNM
MTFfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0
IGdsX3RleHR1cmVDdWJlKFRleHR1cmVDdWJlIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3
LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAg
ICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUJpYXMocywgdXZ3LCBiaWFzKTtcbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxu
IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIFRoZXNlICpMb2QwIGludHJpbnNpY3MgYXJlIG5vdCBhdmFpbGFi
bGUgaW4gR0wgZnJhZ21lbnQgc2hhZGVycy4KKyAgICAgICAgLy8gVGhleSBhcmUgdXNlZCB0byBz
YW1wbGUgdXNpbmcgZGlzY29udGludW91cyB0ZXh0dXJlIGNvb3JkaW5hdGVzLgorICAgICAgICBp
ZiAobVVzZXNUZXh0dXJlMkRMb2QwKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobU91dHB1
dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoc2FtcGxlcjJEIHMsIGZsb2F0MiB0KVxu
IgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAi
ICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCB0LnksIDAsIDApKTtcbiIKKyAgICAg
ICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wx
MV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQg
Z2xfdGV4dHVyZTJETG9kMChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MiB1dilc
biIKKyAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAg
IiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1diwgMCk7XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAobVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICht
T3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kMChzYW1wbGVyMkQgcywgZmxvYXQy
IHQsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAg
ICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LngsIHQueSwg
MCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAg
ICAgICAgICAiXG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1
dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRMb2QwKFRleHR1cmUyRCB0LCBTYW1wbGVyU3Rh
dGUgcywgZmxvYXQyIHV2LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAi
e1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMs
IHV2LCAwKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAg
ICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pMb2QwKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVU
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1
cmUyRFByb2pMb2QwKHNhbXBsZXIyRCBzLCBmbG9hdDMgdClcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2Qo
cywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAg
ICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBzLCBmbG9h
dDQgdClcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53
LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtT3V0
cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwKFRleHR1cmUyRCB0LCBTYW1w
bGVyU3RhdGUgcywgZmxvYXQzIHV2dylcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIntcbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9h
dDIodXZ3LnggLyB1dncueiwgdXZ3LnkgLyB1dncueiksIDApO1xuIgorICAgICAgICAgICAgICAg
ICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZDAoVGV4dHVyZTJEIHQsIFNhbXBs
ZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3KVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgor
ICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0
Mih1dncueCAvIHV2dy53LCB1dncueSAvIHV2dy53KSwgMCk7XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAobVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwX2JpYXMoc2FtcGxl
cjJEIHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAi
e1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9h
dDQodC54IC8gdC56LCB0LnkgLyB0LnosIDAsIDApKTtcbiIKKyAgICAgICAgICAgICAgICAgICAg
ICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAg
ICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2RfYmlhcyhzYW1wbGVyMkQgcywgZmxvYXQ0
IHQsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAg
ICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0Lncs
IHQueSAvIHQudywgMCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAg
ICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kX2JpYXMoVGV4
dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3LCBmbG9hdCBiaWFzKVxuIgorICAg
ICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy56LCB1dncueSAvIHV2dy56
KSwgMCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQ
cm9qTG9kX2JpYXMoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3LCBmbG9h
dCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy53
LCB1dncueSAvIHV2dy53KSwgMCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisg
ICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJl
Q3ViZUxvZDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9I
TFNMOV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9h
dDQgZ2xfdGV4dHVyZUN1YmVMb2QwKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0KVxuIgorICAgICAg
ICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVy
biB0ZXhDVUJFbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCAwKSk7XG4iCisgICAgICAgICAg
ICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VU
UFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3Rl
eHR1cmVDdWJlTG9kMChUZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dylc
biIKKyAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAg
IiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1dncsIDApO1xuIgorICAgICAgICAgICAgICAg
ICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmVMb2QwKHNhbXBsZXJDVUJFIHMs
IGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgor
ICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFbG9kKHMsIGZsb2F0NCh0
LngsIHQueSwgdC56LCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChUZXh0dXJlQ3Vi
ZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQgYmlhcylcbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4g
dC5TYW1wbGVMZXZlbChzLCB1dncsIDApO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxu
IgorICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzaW5nTVJU
RXh0ZW5zaW9uICYmIG1OdW1SZW5kZXJUYXJnZXRzID4gMSkKKyAgICAgICAgeworICAgICAgICAg
ICAgb3V0IDw8ICIjZGVmaW5lIEdMX1VTRVNfTVJUXG4iOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKG1Vc2VzRnJhZ0NvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIiNkZWZp
bmUgR0xfVVNFU19GUkFHX0NPTE9SXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2Vz
RnJhZ0RhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VT
X0ZSQUdfREFUQVxuIjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlICAgLy8gVmVydGV4IHNo
YWRlcgorICAgIHsKKyAgICAgICAgb3V0IDw8ICIvLyBBdHRyaWJ1dGVzXG4iOworICAgICAgICBv
dXQgPDwgIGF0dHJpYnV0ZXM7CisgICAgICAgIG91dCA8PCAiXG4iCisgICAgICAgICAgICAgICAi
c3RhdGljIGZsb2F0NCBnbF9Qb3NpdGlvbiA9IGZsb2F0NCgwLCAwLCAwLCAwKTtcbiI7CisgICAg
ICAgIAorICAgICAgICBpZiAobVVzZXNQb2ludFNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG91dCA8PCAic3RhdGljIGZsb2F0IGdsX1BvaW50U2l6ZSA9IGZsb2F0KDEpO1xuIjsKKyAgICAg
ICAgfQorCisgICAgICAgIG91dCA8PCAiXG4iCisgICAgICAgICAgICAgICAiLy8gVmFyeWluZ3Nc
biI7CisgICAgICAgIG91dCA8PCAgdmFyeWluZ3M7CisgICAgICAgIG91dCA8PCAiXG4iOworCisg
ICAgICAgIGlmIChtVXNlc0RlcHRoUmFuZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8
PCAic3RydWN0IGdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJzXG4iCisgICAgICAgICAgICAgICAgICAg
IntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IG5lYXI7XG4iCisgICAgICAgICAg
ICAgICAgICAgIiAgICBmbG9hdCBmYXI7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBmbG9h
dCBkaWZmO1xuIgorICAgICAgICAgICAgICAgICAgICJ9O1xuIgorICAgICAgICAgICAgICAgICAg
ICJcbiI7CisgICAgICAgIH0KKworICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDEx
X09VVFBVVCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgImNidWZmZXIgRHJpdmVyQ29uc3Rh
bnRzIDogcmVnaXN0ZXIoYjEpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQzIGR4X0RlcHRoUmFuZ2UgOiBwYWNrb2Zmc2V0
KGMwKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn07XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAobVVzZXNEZXB0aFJhbmdlKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG91dCA8PCAidW5pZm9ybSBmbG9hdDMgZHhfRGVwdGhSYW5nZSA6IHJl
Z2lzdGVyKGMwKTtcbiI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dCA8PCAidW5p
Zm9ybSBmbG9hdDQgZHhfVmlld0FkanVzdCA6IHJlZ2lzdGVyKGMxKTtcbiIKKyAgICAgICAgICAg
ICAgICAgICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkK
KyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgZ2xfRGVwdGhSYW5nZVBhcmFt
ZXRlcnMgZ2xfRGVwdGhSYW5nZSA9IHtkeF9EZXB0aFJhbmdlLngsIGR4X0RlcHRoUmFuZ2UueSwg
ZHhfRGVwdGhSYW5nZS56fTtcbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9
CisKKyAgICAgICAgb3V0IDw8IHVuaWZvcm1zOworICAgICAgICBvdXQgPDwgIlxuIjsKKyAgICAg
ICAgCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoc2FtcGxlcjJEIHMsIGZsb2F0
MiB0KVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCB0LnksIDAsIDApKTtcbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxu
IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNI
X0hMU0wxMV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJm
bG9hdDQgZ2xfdGV4dHVyZTJEKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2
KVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAg
ICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIHV2LCAwKTtcbiIKKyAgICAgICAgICAgICAg
ICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChtVXNlc1RleHR1cmUyRExvZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1PdXRw
dXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRMb2Qoc2FtcGxlcjJEIHMsIGZsb2F0MiB0LCBm
bG9hdCBsb2QpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgbG9k
KSk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAg
ICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlw
ZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91
dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMs
IGZsb2F0MiB1diwgZmxvYXQgbG9kKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgor
ICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIHV2LCBs
b2QpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAg
ICAgICAiXG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJvaikKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9q
KHNhbXBsZXIyRCBzLCBmbG9hdDMgdClcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIntcbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQu
eCAvIHQueiwgdC55IC8gdC56LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAg
ImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDQgdClcbiIKKyAgICAg
ICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53LCAwLCAwKSk7XG4iCisg
ICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9I
TFNMMTFfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxv
YXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMg
dXZ3KVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy56LCB1
dncueSAvIHV2dy56KSwgMCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBn
bF90ZXh0dXJlMkRQcm9qKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQ0IHV2dylc
biIKKyAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAg
IiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIodXZ3LnggLyB1dncudywgdXZ3Lnkg
LyB1dncudyksIDApO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAg
ICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBVTlJF
QUNIQUJMRSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJvakxv
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09V
VFBVVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90
ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBzLCBmbG9hdDMgdCwgZmxvYXQgbG9kKVxuIgorICAg
ICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC56LCB0LnkgLyB0LnosIDAsIGxvZCkpO1xu
IgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICAgICAi
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZChz
YW1wbGVyMkQgcywgZmxvYXQ0IHQsIGZsb2F0IGxvZClcbiIKKyAgICAgICAgICAgICAgICAgICAg
ICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2Qocywg
ZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53LCAwLCBsb2QpKTtcbiIKKyAgICAgICAgICAgICAg
ICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVy
ZTJEUHJvakxvZChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncsIGZsb2F0
IGxvZClcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIodXZ3LnggLyB1dncueiwg
dXZ3LnkgLyB1dncueiksIGxvZCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisg
ICAgICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0
NCBnbF90ZXh0dXJlMkRQcm9qTG9kKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQ0
IHV2dywgZmxvYXQgbG9kKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncu
eCAvIHV2dy53LCB1dncueSAvIHV2dy53KSwgbG9kKTtcbiIKKyAgICAgICAgICAgICAgICAgICAg
ICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICht
VXNlc1RleHR1cmVDdWJlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobU91dHB1dFR5cGUg
PT0gU0hfSExTTDlfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8
PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0KVxuIgorICAg
ICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0ZXhDVUJFbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCAwKSk7XG4iCisgICAgICAg
ICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFf
T1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGds
X3RleHR1cmVDdWJlKFRleHR1cmVDdWJlIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3KVxu
IgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAi
ICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIHV2dywgMCk7XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAobVVzZXNUZXh0dXJlQ3ViZUxvZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1PdXRw
dXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxvZChzYW1wbGVyQ1VCRSBzLCBmbG9hdDMg
dCwgZmxvYXQgbG9kKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAg
ICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFbG9kKHMsIGZsb2F0NCh0LngsIHQueSwg
dC56LCBsb2QpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAg
ICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1P
dXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmVMb2QoVGV4dHVyZUN1YmUgdCwgU2Ft
cGxlclN0YXRlIHMsIGZsb2F0MyB1dncsIGZsb2F0IGxvZClcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVM
ZXZlbChzLCB1dncsIGxvZCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobVVzZXNGcmFnQ29v
cmQpCisgICAgeworICAgICAgICBvdXQgPDwgIiNkZWZpbmUgR0xfVVNFU19GUkFHX0NPT1JEXG4i
OworICAgIH0KKworICAgIGlmIChtVXNlc1BvaW50Q29vcmQpCisgICAgeworICAgICAgICBvdXQg
PDwgIiNkZWZpbmUgR0xfVVNFU19QT0lOVF9DT09SRFxuIjsKKyAgICB9CisKKyAgICBpZiAobVVz
ZXNGcm9udEZhY2luZykKKyAgICB7CisgICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX0ZS
T05UX0ZBQ0lOR1xuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNQb2ludFNpemUpCisgICAgewor
ICAgICAgICBvdXQgPDwgIiNkZWZpbmUgR0xfVVNFU19QT0lOVF9TSVpFXG4iOworICAgIH0KKwor
ICAgIGlmIChtVXNlc0ZyYWdEZXB0aCkKKyAgICB7CisgICAgICAgIG91dCA8PCAiI2RlZmluZSBH
TF9VU0VTX0ZSQUdfREVQVEhcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkK
KyAgICB7CisgICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX0RFUFRIX1JBTkdFXG4iOwor
ICAgIH0KKworICAgIGlmIChtVXNlc1hvcikKKyAgICB7CisgICAgICAgIG91dCA8PCAiYm9vbCB4
b3IoYm9vbCBwLCBib29sIHEpXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gKHAgfHwgcSkgJiYgIShwICYmIHEpO1xuIgorICAgICAgICAgICAgICAg
In1cbiIKKyAgICAgICAgICAgICAgICJcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzTW9kMSkK
KyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQgbW9kKGZsb2F0IHgsIGZsb2F0IHkpXG4iCisg
ICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4geCAtIHkgKiBm
bG9vcih4IC8geSk7XG4iCisgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgIlxu
IjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNNb2QydikKKyAgICB7CisgICAgICAgIG91dCA8PCAi
ZmxvYXQyIG1vZChmbG9hdDIgeCwgZmxvYXQyIHkpXG4iCisgICAgICAgICAgICAgICAie1xuIgor
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4geCAtIHkgKiBmbG9vcih4IC8geSk7XG4iCisgICAg
ICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgIlxuIjsKKyAgICB9CisKKyAgICBpZiAo
bVVzZXNNb2QyZikKKyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQyIG1vZChmbG9hdDIgeCwg
ZmxvYXQgeSlcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB4IC0geSAqIGZsb29yKHggLyB5KTtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iCisgICAg
ICAgICAgICAgICAiXG4iOworICAgIH0KKyAgICAKKyAgICBpZiAobVVzZXNNb2QzdikKKyAgICB7
CisgICAgICAgIG91dCA8PCAiZmxvYXQzIG1vZChmbG9hdDMgeCwgZmxvYXQzIHkpXG4iCisgICAg
ICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4geCAtIHkgKiBmbG9v
cih4IC8geSk7XG4iCisgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgIlxuIjsK
KyAgICB9CisKKyAgICBpZiAobVVzZXNNb2QzZikKKyAgICB7CisgICAgICAgIG91dCA8PCAiZmxv
YXQzIG1vZChmbG9hdDMgeCwgZmxvYXQgeSlcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAg
ICAgICAgICAgICAiICAgIHJldHVybiB4IC0geSAqIGZsb29yKHggLyB5KTtcbiIKKyAgICAgICAg
ICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAiXG4iOworICAgIH0KKworICAgIGlmIChtVXNl
c01vZDR2KQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJmbG9hdDQgbW9kKGZsb2F0NCB4LCBmbG9h
dDQgeSlcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIHJldHVy
biB4IC0geSAqIGZsb29yKHggLyB5KTtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAg
ICAgICAgICAiXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc01vZDRmKQorICAgIHsKKyAgICAg
ICAgb3V0IDw8ICJmbG9hdDQgbW9kKGZsb2F0NCB4LCBmbG9hdCB5KVxuIgorICAgICAgICAgICAg
ICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHggLSB5ICogZmxvb3IoeCAvIHkp
O1xuIgorICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICJcbiI7CisgICAgfQor
CisgICAgaWYgKG1Vc2VzRmFjZWZvcndhcmQxKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJmbG9h
dCBmYWNlZm9yd2FyZChmbG9hdCBOLCBmbG9hdCBJLCBmbG9hdCBOcmVmKVxuIgorICAgICAgICAg
ICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgaWYoZG90KE5yZWYsIEkpID49IDApXG4i
CisgICAgICAgICAgICAgICAiICAgIHtcbiIKKyAgICAgICAgICAgICAgICIgICAgICAgIHJldHVy
biAtTjtcbiIKKyAgICAgICAgICAgICAgICIgICAgfVxuIgorICAgICAgICAgICAgICAgIiAgICBl
bHNlXG4iCisgICAgICAgICAgICAgICAiICAgIHtcbiIKKyAgICAgICAgICAgICAgICIgICAgICAg
IHJldHVybiBOO1xuIgorICAgICAgICAgICAgICAgIiAgICB9XG4iCisgICAgICAgICAgICAgICAi
fVxuIgorICAgICAgICAgICAgICAgIlxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNGYWNlZm9y
d2FyZDIpCisgICAgeworICAgICAgICBvdXQgPDwgImZsb2F0MiBmYWNlZm9yd2FyZChmbG9hdDIg
TiwgZmxvYXQyIEksIGZsb2F0MiBOcmVmKVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAg
ICAgICAgICAgICIgICAgaWYoZG90KE5yZWYsIEkpID49IDApXG4iCisgICAgICAgICAgICAgICAi
ICAgIHtcbiIKKyAgICAgICAgICAgICAgICIgICAgICAgIHJldHVybiAtTjtcbiIKKyAgICAgICAg
ICAgICAgICIgICAgfVxuIgorICAgICAgICAgICAgICAgIiAgICBlbHNlXG4iCisgICAgICAgICAg
ICAgICAiICAgIHtcbiIKKyAgICAgICAgICAgICAgICIgICAgICAgIHJldHVybiBOO1xuIgorICAg
ICAgICAgICAgICAgIiAgICB9XG4iCisgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAg
ICAgIlxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNGYWNlZm9yd2FyZDMpCisgICAgeworICAg
ICAgICBvdXQgPDwgImZsb2F0MyBmYWNlZm9yd2FyZChmbG9hdDMgTiwgZmxvYXQzIEksIGZsb2F0
MyBOcmVmKVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgaWYo
ZG90KE5yZWYsIEkpID49IDApXG4iCisgICAgICAgICAgICAgICAiICAgIHtcbiIKKyAgICAgICAg
ICAgICAgICIgICAgICAgIHJldHVybiAtTjtcbiIKKyAgICAgICAgICAgICAgICIgICAgfVxuIgor
ICAgICAgICAgICAgICAgIiAgICBlbHNlXG4iCisgICAgICAgICAgICAgICAiICAgIHtcbiIKKyAg
ICAgICAgICAgICAgICIgICAgICAgIHJldHVybiBOO1xuIgorICAgICAgICAgICAgICAgIiAgICB9
XG4iCisgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgIlxuIjsKKyAgICB9CisK
KyAgICBpZiAobVVzZXNGYWNlZm9yd2FyZDQpCisgICAgeworICAgICAgICBvdXQgPDwgImZsb2F0
NCBmYWNlZm9yd2FyZChmbG9hdDQgTiwgZmxvYXQ0IEksIGZsb2F0NCBOcmVmKVxuIgorICAgICAg
ICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgaWYoZG90KE5yZWYsIEkpID49IDAp
XG4iCisgICAgICAgICAgICAgICAiICAgIHtcbiIKKyAgICAgICAgICAgICAgICIgICAgICAgIHJl
dHVybiAtTjtcbiIKKyAgICAgICAgICAgICAgICIgICAgfVxuIgorICAgICAgICAgICAgICAgIiAg
ICBlbHNlXG4iCisgICAgICAgICAgICAgICAiICAgIHtcbiIKKyAgICAgICAgICAgICAgICIgICAg
ICAgIHJldHVybiBOO1xuIgorICAgICAgICAgICAgICAgIiAgICB9XG4iCisgICAgICAgICAgICAg
ICAifVxuIgorICAgICAgICAgICAgICAgIlxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNBdGFu
Ml8xKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJmbG9hdCBhdGFueXgoZmxvYXQgeSwgZmxvYXQg
eClcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIGlmKHggPT0g
MCAmJiB5ID09IDApIHggPSAxO1xuIiAgIC8vIEF2b2lkIHByb2R1Y2luZyBhIE5hTgorICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gYXRhbjIoeSwgeCk7XG4iCisgICAgICAgICAgICAgICAifVxu
IjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNBdGFuMl8yKQorICAgIHsKKyAgICAgICAgb3V0IDw8
ICJmbG9hdDIgYXRhbnl4KGZsb2F0MiB5LCBmbG9hdDIgeClcbiIKKyAgICAgICAgICAgICAgICJ7
XG4iCisgICAgICAgICAgICAgICAiICAgIGlmKHhbMF0gPT0gMCAmJiB5WzBdID09IDApIHhbMF0g
PSAxO1xuIgorICAgICAgICAgICAgICAgIiAgICBpZih4WzFdID09IDAgJiYgeVsxXSA9PSAwKSB4
WzFdID0gMTtcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIGZsb2F0MihhdGFuMih5WzBd
LCB4WzBdKSwgYXRhbjIoeVsxXSwgeFsxXSkpO1xuIgorICAgICAgICAgICAgICAgIn1cbiI7Cisg
ICAgfQorCisgICAgaWYgKG1Vc2VzQXRhbjJfMykKKyAgICB7CisgICAgICAgIG91dCA8PCAiZmxv
YXQzIGF0YW55eChmbG9hdDMgeSwgZmxvYXQzIHgpXG4iCisgICAgICAgICAgICAgICAie1xuIgor
ICAgICAgICAgICAgICAgIiAgICBpZih4WzBdID09IDAgJiYgeVswXSA9PSAwKSB4WzBdID0gMTtc
biIKKyAgICAgICAgICAgICAgICIgICAgaWYoeFsxXSA9PSAwICYmIHlbMV0gPT0gMCkgeFsxXSA9
IDE7XG4iCisgICAgICAgICAgICAgICAiICAgIGlmKHhbMl0gPT0gMCAmJiB5WzJdID09IDApIHhb
Ml0gPSAxO1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4gZmxvYXQzKGF0YW4yKHlbMF0s
IHhbMF0pLCBhdGFuMih5WzFdLCB4WzFdKSwgYXRhbjIoeVsyXSwgeFsyXSkpO1xuIgorICAgICAg
ICAgICAgICAgIn1cbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzQXRhbjJfNCkKKyAgICB7Cisg
ICAgICAgIG91dCA8PCAiZmxvYXQ0IGF0YW55eChmbG9hdDQgeSwgZmxvYXQ0IHgpXG4iCisgICAg
ICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICBpZih4WzBdID09IDAgJiYgeVsw
XSA9PSAwKSB4WzBdID0gMTtcbiIKKyAgICAgICAgICAgICAgICIgICAgaWYoeFsxXSA9PSAwICYm
IHlbMV0gPT0gMCkgeFsxXSA9IDE7XG4iCisgICAgICAgICAgICAgICAiICAgIGlmKHhbMl0gPT0g
MCAmJiB5WzJdID09IDApIHhbMl0gPSAxO1xuIgorICAgICAgICAgICAgICAgIiAgICBpZih4WzNd
ID09IDAgJiYgeVszXSA9PSAwKSB4WzNdID0gMTtcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIGZsb2F0NChhdGFuMih5WzBdLCB4WzBdKSwgYXRhbjIoeVsxXSwgeFsxXSksIGF0YW4yKHlb
Ml0sIHhbMl0pLCBhdGFuMih5WzNdLCB4WzNdKSk7XG4iCisgICAgICAgICAgICAgICAifVxuIjsK
KyAgICB9Cit9CisKK3ZvaWQgT3V0cHV0SExTTDo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAq
bm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKKworICAgIFRTdHJpbmcg
bmFtZSA9IG5vZGUtPmdldFN5bWJvbCgpOworCisgICAgaWYgKG5hbWUgPT0gImdsX0ZyYWdDb2xv
ciIpCisgICAgeworICAgICAgICBvdXQgPDwgImdsX0NvbG9yWzBdIjsKKyAgICAgICAgbVVzZXNG
cmFnQ29sb3IgPSB0cnVlOworICAgIH0KKyAgICBlbHNlIGlmIChuYW1lID09ICJnbF9GcmFnRGF0
YSIpCisgICAgeworICAgICAgICBvdXQgPDwgImdsX0NvbG9yIjsKKyAgICAgICAgbVVzZXNGcmFn
RGF0YSA9IHRydWU7CisgICAgfQorICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX0RlcHRoUmFuZ2Ui
KQorICAgIHsKKyAgICAgICAgbVVzZXNEZXB0aFJhbmdlID0gdHJ1ZTsKKyAgICAgICAgb3V0IDw8
IG5hbWU7CisgICAgfQorICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX0ZyYWdDb29yZCIpCisgICAg
eworICAgICAgICBtVXNlc0ZyYWdDb29yZCA9IHRydWU7CisgICAgICAgIG91dCA8PCBuYW1lOwor
ICAgIH0KKyAgICBlbHNlIGlmIChuYW1lID09ICJnbF9Qb2ludENvb3JkIikKKyAgICB7CisgICAg
ICAgIG1Vc2VzUG9pbnRDb29yZCA9IHRydWU7CisgICAgICAgIG91dCA8PCBuYW1lOworICAgIH0K
KyAgICBlbHNlIGlmIChuYW1lID09ICJnbF9Gcm9udEZhY2luZyIpCisgICAgeworICAgICAgICBt
VXNlc0Zyb250RmFjaW5nID0gdHJ1ZTsKKyAgICAgICAgb3V0IDw8IG5hbWU7CisgICAgfQorICAg
IGVsc2UgaWYgKG5hbWUgPT0gImdsX1BvaW50U2l6ZSIpCisgICAgeworICAgICAgICBtVXNlc1Bv
aW50U2l6ZSA9IHRydWU7CisgICAgICAgIG91dCA8PCBuYW1lOworICAgIH0KKyAgICBlbHNlIGlm
IChuYW1lID09ICJnbF9GcmFnRGVwdGhFWFQiKQorICAgIHsKKyAgICAgICAgbVVzZXNGcmFnRGVw
dGggPSB0cnVlOworICAgICAgICBvdXQgPDwgImdsX0RlcHRoIjsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBub2RlLT5nZXRRdWFsaWZpZXIo
KTsKKworICAgICAgICBpZiAocXVhbGlmaWVyID09IEV2cVVuaWZvcm0pCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1SZWZlcmVuY2VkVW5pZm9ybXNbbmFtZV0gPSBub2RlOworICAgICAgICAgICAg
b3V0IDw8IGRlY29yYXRlVW5pZm9ybShuYW1lLCBub2RlLT5nZXRUeXBlKCkpOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1SZWZlcmVuY2VkQXR0cmlidXRlc1tuYW1lXSA9IG5vZGU7CisgICAgICAg
ICAgICBvdXQgPDwgZGVjb3JhdGUobmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAo
cXVhbGlmaWVyID09IEV2cVZhcnlpbmdPdXQgfHwgcXVhbGlmaWVyID09IEV2cUludmFyaWFudFZh
cnlpbmdPdXQgfHwgcXVhbGlmaWVyID09IEV2cVZhcnlpbmdJbiB8fCBxdWFsaWZpZXIgPT0gRXZx
SW52YXJpYW50VmFyeWluZ0luKQorICAgICAgICB7CisgICAgICAgICAgICBtUmVmZXJlbmNlZFZh
cnlpbmdzW25hbWVdID0gbm9kZTsKKyAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxSW50ZXJuYWwpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCBuYW1lOworICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8IGRlY29yYXRlKG5hbWUpOworICAgICAg
ICB9CisgICAgfQorfQorCitib29sIE91dHB1dEhMU0w6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0
LCBUSW50ZXJtQmluYXJ5ICpub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5
OworCisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wQXNz
aWduOiAgICAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA9ICIsICIp
Iik7ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wSW5pdGlhbGl6ZToKKyAgICAgICAg
aWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBHTFNMIGFs
bG93cyB0byB3cml0ZSB0aGluZ3MgbGlrZSAiZmxvYXQgeCA9IHg7IiB3aGVyZSBhIG5ldyB2YXJp
YWJsZSB4IGlzIGRlZmluZWQKKyAgICAgICAgICAgIC8vIGFuZCB0aGUgdmFsdWUgb2YgYW4gZXhp
c3RpbmcgdmFyaWFibGUgeCBpcyBhc3NpZ25lZC4gSExTTCB1c2VzIEMgc2VtYW50aWNzICh0aGUK
KyAgICAgICAgICAgIC8vIG5ldyB2YXJpYWJsZSBpcyBjcmVhdGVkIGJlZm9yZSB0aGUgYXNzaWdu
bWVudCBpcyBldmFsdWF0ZWQpLCBzbyB3ZSBuZWVkIHRvIGNvbnZlcnQKKyAgICAgICAgICAgIC8v
IHRoaXMgdG8gImZsb2F0IHQgPSB4LCB4ID0gdDsiLgorCisgICAgICAgICAgICBUSW50ZXJtU3lt
Ym9sICpzeW1ib2xOb2RlID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAg
ICAgICAgICAgIFRJbnRlcm1UeXBlZCAqZXhwcmVzc2lvbiA9IG5vZGUtPmdldFJpZ2h0KCk7CisK
KyAgICAgICAgICAgIHNoOjpTZWFyY2hTeW1ib2wgc2VhcmNoU3ltYm9sKHN5bWJvbE5vZGUtPmdl
dFN5bWJvbCgpKTsKKyAgICAgICAgICAgIGV4cHJlc3Npb24tPnRyYXZlcnNlKCZzZWFyY2hTeW1i
b2wpOworICAgICAgICAgICAgYm9vbCBzYW1lU3ltYm9sID0gc2VhcmNoU3ltYm9sLmZvdW5kTWF0
Y2goKTsKKworICAgICAgICAgICAgaWYgKHNhbWVTeW1ib2wpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgLy8gVHlwZSBhbHJlYWR5IHByaW50ZWQKKyAgICAgICAgICAgICAgICBvdXQg
PDwgInQiICsgc3RyKG1VbmlxdWVJbmRleCkgKyAiID0gIjsKKyAgICAgICAgICAgICAgICBleHBy
ZXNzaW9uLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAg
ICAgICAgICAgICAgICBzeW1ib2xOb2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAg
ICBvdXQgPDwgIiA9IHQiICsgc3RyKG1VbmlxdWVJbmRleCk7CisKKyAgICAgICAgICAgICAgICBt
VW5pcXVlSW5kZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAg
ICAgeworICAgICAgICAgICAgb3V0IDw8ICIgPSAiOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBFT3BBZGRBc3NpZ246ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgIigiLCAiICs9ICIsICIpIik7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BT
dWJBc3NpZ246ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIC09ICIs
ICIpIik7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BNdWxBc3NpZ246ICAgICAgICAg
ICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICo9ICIsICIpIik7ICAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjogb3V0cHV0VHJpcGxl
dCh2aXNpdCwgIigiLCAiICo9ICIsICIpIik7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
T3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbjogb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICo9
ICIsICIpIik7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJp
eEFzc2lnbjoKKyAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAgICB7CisgICAg
ICAgICAgICBvdXQgPDwgIigiOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09
IEluVmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiID0gbXVsKCI7CisgICAg
ICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0
IDw8ICIsIHRyYW5zcG9zZSgiOyAgIAorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgb3V0IDw8ICIpKSkiOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjoKKyAgICAgICAgaWYgKHZpc2l0
ID09IFByZVZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIigiOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG91dCA8PCAiID0gbXVsKCI7CisgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRy
YXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICIsICI7ICAgCisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIikpIjsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRGl2QXNzaWduOiAgICAgICAgICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAvPSAiLCAiKSIpOyAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICIiLCAiWyIsICJdIik7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wSW5k
ZXhJbmRpcmVjdDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIiLCAiWyIsICJdIik7
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6Cisg
ICAgICAgIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBjb25z
dCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKS5nZXRT
dHJ1Y3QoKTsKKyAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1Db25zdGFudFVuaW9uKiBpbmRleCA9
IG5vZGUtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAgICAgICAgICAgY29u
c3QgVEZpZWxkKiBmaWVsZCA9IHN0cnVjdHVyZS0+ZmllbGRzKClbaW5kZXgtPmdldElDb25zdCgw
KV07CisgICAgICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3JhdGVGaWVsZChmaWVsZC0+bmFtZSgp
LCBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKSk7CisKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wVmVjdG9yU3dpenps
ZToKKyAgICAgICAgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG91dCA8PCAiLiI7CisKKyAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUgKnN3aXp6bGUgPSBu
b2RlLT5nZXRSaWdodCgpLT5nZXRBc0FnZ3JlZ2F0ZSgpOworCisgICAgICAgICAgICBpZiAoc3dp
enpsZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJnNl
cXVlbmNlID0gc3dpenpsZS0+Z2V0U2VxdWVuY2UoKTsKKworICAgICAgICAgICAgICAgIGZvciAo
VEludGVybVNlcXVlbmNlOjppdGVyYXRvciBzaXQgPSBzZXF1ZW5jZS5iZWdpbigpOyBzaXQgIT0g
c2VxdWVuY2UuZW5kKCk7IHNpdCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgVEludGVybUNvbnN0YW50VW5pb24gKmVsZW1lbnQgPSAoKnNpdCktPmdldEFzQ29uc3Rh
bnRVbmlvbigpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50KQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaSA9IGVsZW1lbnQtPmdl
dElDb25zdCgwKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiBvdXQg
PDwgIngiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogb3V0IDw8ICJ5
IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IG91dCA8PCAieiI7IGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvdXQgPDwgInciOyBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyAgIC8vIEZ1bGx5IHByb2Nlc3NlZAorICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFT3BBZGQ6ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigi
LCAiICsgIiwgIikiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcFN1YjogICAgICAgICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgLSAiLCAiKSIpOyBicmVhazsKKyAgICAgIGNhc2Ug
RU9wTXVsOiAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAqICIsICIp
Iik7IGJyZWFrOworICAgICAgY2FzZSBFT3BEaXY6ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgIigiLCAiIC8gIiwgIikiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcEVxdWFsOgor
ICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKKyAgICAgICAgaWYgKG5vZGUtPmdldExlZnQoKS0+aXNT
Y2FsYXIoKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9w
RXF1YWwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgIigiLCAiID09ICIsICIpIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAi
ICE9ICIsICIpIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAo
bm9kZS0+Z2V0TGVmdCgpLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChub2RlLT5nZXRPcCgpID09IEVPcEVxdWFsKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG91dCA8PCAiKCI7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIhKCI7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IG5vZGUt
PmdldExlZnQoKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKKworICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICpmaWVsZCA9IGZpZWxkc1tpXTsKKwor
ICAgICAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAg
ICAgICAgICAgb3V0IDw8ICIuIiArIGRlY29yYXRlRmllbGQoZmllbGQtPm5hbWUoKSwgbm9kZS0+
Z2V0TGVmdCgpLT5nZXRUeXBlKCkpICsgIiA9PSAiOworICAgICAgICAgICAgICAgIG5vZGUtPmdl
dFJpZ2h0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBk
ZWNvcmF0ZUZpZWxkKGZpZWxkLT5uYW1lKCksIG5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpKTsK
KworICAgICAgICAgICAgICAgIGlmIChpIDwgZmllbGRzLnNpemUoKSAtIDEpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAmJiAiOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgb3V0IDw8ICIpIjsKKworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor
ICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmdldExlZnQoKS0+aXNNYXRyaXgoKSB8fCBub2RlLT5n
ZXRMZWZ0KCktPmlzVmVjdG9yKCkpOworCisgICAgICAgICAgICBpZiAobm9kZS0+Z2V0T3AoKSA9
PSBFT3BFcXVhbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0
KHZpc2l0LCAiYWxsKCIsICIgPT0gIiwgIikiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAiIWFsbCgiLCAiID09ICIsICIpIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVPcExlc3NUaGFuOiAgICAgICAgICBvdXRwdXRUcmlwbGV0
KHZpc2l0LCAiKCIsICIgPCAiLCAiKSIpOyAgIGJyZWFrOworICAgICAgY2FzZSBFT3BHcmVhdGVy
VGhhbjogICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiID4gIiwgIikiKTsgICBicmVh
azsKKyAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDogICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICIoIiwgIiA8PSAiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1
YWw6ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPj0gIiwgIikiKTsgIGJyZWFrOworICAg
ICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjogb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAi
ICogIiwgIikiKTsgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXI6IG91
dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAqICIsICIpIik7ICAgYnJlYWs7CisgICAgICBjYXNl
IEVPcFZlY3RvclRpbWVzTWF0cml4OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibXVsKCIsICIsIHRy
YW5zcG9zZSgiLCAiKSkiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVjdG9y
OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibXVsKHRyYW5zcG9zZSgiLCAiKSwgIiwgIikiKTsgYnJl
YWs7CisgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4OiBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAidHJhbnNwb3NlKG11bCh0cmFuc3Bvc2UoIiwgIiksIHRyYW5zcG9zZSgiLCAiKSkpIik7IGJy
ZWFrOworICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6CisgICAgICAgIGlmIChub2RlLT5nZXRSaWdo
dCgpLT5oYXNTaWRlRWZmZWN0cygpKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgInMi
IDw8IG1VbmZvbGRTaG9ydENpcmN1aXQtPmdldE5leHRUZW1wb3JhcnlJbmRleCgpOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor
ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgfHwgIiwgIikiKTsKKyAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjoK
KyAgICAgICAgbVVzZXNYb3IgPSB0cnVlOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
eG9yKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BMb2dpY2Fs
QW5kOgorICAgICAgICBpZiAobm9kZS0+Z2V0UmlnaHQoKS0+aGFzU2lkZUVmZmVjdHMoKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xkU2hvcnRDaXJjdWl0LT5n
ZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgIigiLCAiICYmICIsICIpIik7CisgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIE91dHB1dEhMU0w6OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRl
cm1VbmFyeSAqbm9kZSkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgeworICAg
ICAgY2FzZSBFT3BOZWdhdGl2ZTogICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKC0iLCAi
IiwgIikiKTsgIGJyZWFrOworICAgICAgY2FzZSBFT3BWZWN0b3JMb2dpY2FsTm90OiBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiKCEiLCAiIiwgIikiKTsgIGJyZWFrOworICAgICAgY2FzZSBFT3BMb2dp
Y2FsTm90OiAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCEiLCAiIiwgIikiKTsgIGJyZWFr
OworICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50OiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
KCIsICIiLCAiKyspIik7IGJyZWFrOworICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OiAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIiLCAiLS0pIik7IGJyZWFrOworICAgICAgY2FzZSBF
T3BQcmVJbmNyZW1lbnQ6ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCsrIiwgIiIsICIpIik7
IGJyZWFrOworICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6ICAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAiKC0tIiwgIiIsICIpIik7IGJyZWFrOworICAgICAgY2FzZSBFT3BDb252SW50VG9Cb29s
OgorICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0Jvb2w6CisgICAgICAgIHN3aXRjaCAobm9kZS0+
Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgeworICAg
ICAgICAgIGNhc2UgMTogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImJvb2woIiwgIiIsICIpIik7
ICBicmVhazsKKyAgICAgICAgICBjYXNlIDI6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJib29s
MigiLCAiIiwgIikiKTsgYnJlYWs7CisgICAgICAgICAgY2FzZSAzOiAgICBvdXRwdXRUcmlwbGV0
KHZpc2l0LCAiYm9vbDMoIiwgIiIsICIpIik7IGJyZWFrOworICAgICAgICAgIGNhc2UgNDogICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgImJvb2w0KCIsICIiLCAiKSIpOyBicmVhazsKKyAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBFT3BDb252Qm9vbFRvRmxvYXQ6CisgICAgICBjYXNlIEVPcENvbnZJbnRUb0Zsb2F0
OgorICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wZXJhbmQoKS0+Z2V0VHlwZSgpLmdldE5vbWlu
YWxTaXplKCkpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIDE6ICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJmbG9hdCgiLCAiIiwgIikiKTsgIGJyZWFrOworICAgICAgICAgIGNhc2UgMjogICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgImZsb2F0MigiLCAiIiwgIikiKTsgYnJlYWs7CisgICAgICAg
ICAgY2FzZSAzOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZmxvYXQzKCIsICIiLCAiKSIpOyBi
cmVhazsKKyAgICAgICAgICBjYXNlIDQ6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJmbG9hdDQo
IiwgIiIsICIpIik7IGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnZGbG9hdFRvSW50Ogor
ICAgICAgY2FzZSBFT3BDb252Qm9vbFRvSW50OgorICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9w
ZXJhbmQoKS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICBjYXNlIDE6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJpbnQoIiwgIiIsICIpIik7ICBicmVh
azsKKyAgICAgICAgICBjYXNlIDI6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJpbnQyKCIsICIi
LCAiKSIpOyBicmVhazsKKyAgICAgICAgICBjYXNlIDM6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICJpbnQzKCIsICIiLCAiKSIpOyBicmVhazsKKyAgICAgICAgICBjYXNlIDQ6ICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICJpbnQ0KCIsICIiLCAiKSIpOyBicmVhazsKKyAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
T3BSYWRpYW5zOiAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAicmFkaWFucygiLCAiIiwg
IikiKTsgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRGVncmVlczogICAgICAgICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgImRlZ3JlZXMoIiwgIiIsICIpIik7ICAgYnJlYWs7CisgICAgICBjYXNlIEVP
cFNpbjogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJzaW4oIiwgIiIsICIpIik7
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb3M6ICAgICAgICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiY29zKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9w
VGFuOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInRhbigiLCAiIiwgIikiKTsg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEFzaW46ICAgICAgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICJhc2luKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BB
Y29zOiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYWNvcygiLCAiIiwgIikiKTsg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQXRhbjogICAgICAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgImF0YW4oIiwgIiIsICIpIik7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEV4
cDogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJleHAoIiwgIiIsICIpIik7ICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BMb2c6ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0
KHZpc2l0LCAibG9nKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRXhw
MjogICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImV4cDIoIiwgIiIsICIpIik7ICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVPcExvZzI6ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJsb2cyKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BTcXJ0
OiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAic3FydCgiLCAiIiwgIikiKTsgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wSW52ZXJzZVNxcnQ6ICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgInJzcXJ0KCIsICIiLCAiKSIpOyAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEFiczog
ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJhYnMoIiwgIiIsICIpIik7ICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBFT3BTaWduOiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAic2lnbigiLCAiIiwgIikiKTsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRmxvb3I6
ICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZsb29yKCIsICIiLCAiKSIpOyAgICAg
YnJlYWs7CisgICAgICBjYXNlIEVPcENlaWw6ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICJjZWlsKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BGcmFjdDog
ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZnJhYygiLCAiIiwgIikiKTsgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRU9wTGVuZ3RoOiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgImxlbmd0aCgiLCAiIiwgIikiKTsgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcE5vcm1hbGl6
ZTogICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJub3JtYWxpemUoIiwgIiIsICIpIik7IGJy
ZWFrOworICAgICAgY2FzZSBFT3BERmR4OgorICAgICAgICBpZihtSW5zaWRlRGlzY29udGludW91
c0xvb3AgfHwgbU91dHB1dExvZDBGdW5jdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIiwgIiwgMC4wKSIpOworICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImRkeCgi
LCAiIiwgIikiKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wREZk
eToKKyAgICAgICAgaWYobUluc2lkZURpc2NvbnRpbnVvdXNMb29wIHx8IG1PdXRwdXRMb2QwRnVu
Y3Rpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwg
IiIsICIsIDAuMCkiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAg
ICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImRkeSgiLCAiIiwgIikiKTsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRndpZHRoOgorICAgICAgICBpZihtSW5zaWRl
RGlzY29udGludW91c0xvb3AgfHwgbU91dHB1dExvZDBGdW5jdGlvbikKKyAgICAgICAgeworICAg
ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIiwgIiwgMC4wKSIpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgImZ3aWR0aCgiLCAiIiwgIikiKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRU9wQW55OiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFueSgi
LCAiIiwgIikiKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEFsbDogICAgICAgICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICJhbGwoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOworICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFn
Z3JlZ2F0ZSAqbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKKworICAg
IHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7CisgICAgICBjYXNlIEVPcFNlcXVlbmNlOgor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAobUluc2lkZUZ1bmN0aW9uKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0TGluZSgpLmZp
cnN0X2xpbmUpOworICAgICAgICAgICAgICAgIG91dCA8PCAie1xuIjsKKworICAgICAgICAgICAg
ICAgIG1TY29wZURlcHRoKys7CisKKyAgICAgICAgICAgICAgICBpZiAobVNjb3BlQnJhY2tldC5z
aXplKCkgPCBtU2NvcGVEZXB0aCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIG1TY29wZUJyYWNrZXQucHVzaF9iYWNrKDApOyAgIC8vIE5ldyBzY29wZSBsZXZlbAorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBtU2NvcGVCcmFja2V0W21TY29wZURlcHRoIC0gMV0rKzsgICAv
LyBOZXcgc2NvcGUgYXQgZXhpc3RpbmcgbGV2ZWwKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBzaXQg
PSBub2RlLT5nZXRTZXF1ZW5jZSgpLmJlZ2luKCk7IHNpdCAhPSBub2RlLT5nZXRTZXF1ZW5jZSgp
LmVuZCgpOyBzaXQrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRMaW5l
RGlyZWN0aXZlKCgqc2l0KS0+Z2V0TGluZSgpLmZpcnN0X2xpbmUpOworCisgICAgICAgICAgICAg
ICAgdHJhdmVyc2VTdGF0ZW1lbnRzKCpzaXQpOworCisgICAgICAgICAgICAgICAgb3V0IDw8ICI7
XG4iOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobUluc2lkZUZ1bmN0aW9uKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+
Z2V0TGluZSgpLmxhc3RfbGluZSk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJ9XG4iOworCisg
ICAgICAgICAgICAgICAgbVNjb3BlRGVwdGgtLTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICBjYXNlIEVPcERlY2xhcmF0aW9uOgor
ICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRJ
bnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOworICAgICAgICAg
ICAgVEludGVybVR5cGVkICp2YXJpYWJsZSA9IHNlcXVlbmNlWzBdLT5nZXRBc1R5cGVkKCk7CisK
KyAgICAgICAgICAgIGlmICh2YXJpYWJsZSAmJiAodmFyaWFibGUtPmdldFF1YWxpZmllcigpID09
IEV2cVRlbXBvcmFyeSB8fCB2YXJpYWJsZS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxR2xvYmFsKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmdldFR5cGUoKS5n
ZXRTdHJ1Y3QoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFkZENv
bnN0cnVjdG9yKHZhcmlhYmxlLT5nZXRUeXBlKCksIHNjb3BlZFN0cnVjdCh2YXJpYWJsZS0+Z2V0
VHlwZSgpLmdldFN0cnVjdCgpLT5uYW1lKCkpLCBOVUxMKTsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlLT5nZXRBc1N5bWJvbE5vZGUoKSB8fCB2YXJp
YWJsZS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpICE9ICIiKSAgIC8vIFZhcmlhYmxl
IGRlY2xhcmF0aW9uCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAo
IW1JbnNpZGVGdW5jdGlvbikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0IDw8ICJzdGF0aWMgIjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCB0eXBlU3RyaW5nKHZhcmlhYmxlLT5nZXRUeXBlKCkpICsg
IiAiOworCisgICAgICAgICAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRv
ciBzaXQgPSBzZXF1ZW5jZS5iZWdpbigpOyBzaXQgIT0gc2VxdWVuY2UuZW5kKCk7IHNpdCsrKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtU3lt
Ym9sICpzeW1ib2wgPSAoKnNpdCktPmdldEFzU3ltYm9sTm9kZSgpOworCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoc3ltYm9sKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8IGFycmF5U3RyaW5nKHN5bWJvbC0+Z2V0VHlwZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiA9ICIgKyBpbml0aWFsaXplcihz
eW1ib2wtPmdldFR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKCpzaXQpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpzaXQgIT0gc2VxdWVu
Y2UuYmFjaygpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG91dCA8PCAiLCAiOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKHZhcmlhYmxlLT5nZXRBc1N5bWJvbE5vZGUoKSAmJiB2YXJpYWJsZS0+Z2V0QXNTeW1ib2xO
b2RlKCktPmdldFN5bWJvbCgpID09ICIiKSAgIC8vIFR5cGUgKHN0cnVjdCkgZGVjbGFyYXRpb24K
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIEFscmVhZHkgYWRkZWQg
dG8gY29uc3RydWN0b3IgbWFwCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHZh
cmlhYmxlICYmICh2YXJpYWJsZS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxVmFyeWluZ091dCB8fCB2
YXJpYWJsZS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxSW52YXJpYW50VmFyeWluZ091dCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9y
IHNpdCA9IHNlcXVlbmNlLmJlZ2luKCk7IHNpdCAhPSBzZXF1ZW5jZS5lbmQoKTsgc2l0KyspCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1i
b2wgPSAoKnNpdCktPmdldEFzU3ltYm9sTm9kZSgpOworCisgICAgICAgICAgICAgICAgICAgIGlm
IChzeW1ib2wpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFZlcnRleCAob3V0cHV0KSB2YXJ5aW5ncyB3aGljaCBhcmUgZGVjbGFyZWQgYnV0IG5vdCB3
cml0dGVuIHRvIHNob3VsZCBzdGlsbCBiZSBkZWNsYXJlZCB0byBhbGxvdyBzdWNjZXNzZnVsIGxp
bmtpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIG1SZWZlcmVuY2VkVmFyeWluZ3Nbc3ltYm9s
LT5nZXRTeW1ib2woKV0gPSBzeW1ib2w7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAoKnNpdCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAg
ICAgeworICAgICAgICAgICAgb3V0IDw8ICIsICI7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEVPcFByb3RvdHlwZToKKyAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0
KQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgdHlwZVN0cmluZyhub2RlLT5nZXRUeXBl
KCkpIDw8ICIgIiA8PCBkZWNvcmF0ZShub2RlLT5nZXROYW1lKCkpIDw8IChtT3V0cHV0TG9kMEZ1
bmN0aW9uID8gIkxvZDAoIiA6ICIoIik7CisKKyAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAm
YXJndW1lbnRzID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKKworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gYXJndW1lbnRzW2ldLT5n
ZXRBc1N5bWJvbE5vZGUoKTsKKworICAgICAgICAgICAgICAgIGlmIChzeW1ib2wpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgYXJndW1lbnRTdHJpbmcoc3lt
Ym9sKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGFyZ3VtZW50cy5zaXplKCkgLSAx
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwg
IiwgIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IG91dCA8PCAiKTtcbiI7CisKKyAgICAgICAgICAgIC8vIEFsc28gcHJvdG90eXBlIHRoZSBMb2Qw
IHZhcmlhbnQgaWYgbmVlZGVkCisgICAgICAgICAgICBpZiAobUNvbnRhaW5zTG9vcERpc2NvbnRp
bnVpdHkgJiYgIW1PdXRwdXRMb2QwRnVuY3Rpb24pCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgbU91dHB1dExvZDBGdW5jdGlvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgbm9kZS0+
dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgbU91dHB1dExvZDBGdW5jdGlvbiA9IGZh
bHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbW1hOiAgICAgICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICIoIiwgIiwgIiwgIikiKTsgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEVPcEZ1bmN0aW9uOgorICAgICAgICB7CisgICAgICAgICAgICBUU3RyaW5nIG5h
bWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShub2RlLT5nZXROYW1lKCkpOworCisgICAgICAg
ICAgICBvdXQgPDwgdHlwZVN0cmluZyhub2RlLT5nZXRUeXBlKCkpIDw8ICIgIjsKKworICAgICAg
ICAgICAgaWYgKG5hbWUgPT0gIm1haW4iKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG91dCA8PCAiZ2xfbWFpbigiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAobU91
dHB1dExvZDBGdW5jdGlvbiA/ICJMb2QwKCIgOiAiKCIpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJnNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsK
KyAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJndW1lbnRzID0gc2VxdWVuY2VbMF0tPmdl
dEFzQWdncmVnYXRlKCktPmdldFNlcXVlbmNlKCk7CisKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IGFyZ3VtZW50c1tpXS0+Z2V0
QXNTeW1ib2xOb2RlKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoc3ltYm9sKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbC0+Z2V0VHlwZSgpLmdldFN0
cnVjdCgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBh
ZGRDb25zdHJ1Y3RvcihzeW1ib2wtPmdldFR5cGUoKSwgc2NvcGVkU3RydWN0KHN5bWJvbC0+Z2V0
VHlwZSgpLmdldFN0cnVjdCgpLT5uYW1lKCkpLCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIG91dCA8PCBhcmd1bWVudFN0cmluZyhzeW1ib2wpOwor
CisgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgYXJndW1lbnRzLnNpemUoKSAtIDEpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgb3V0IDw8
ICIpXG4iCisgICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmIChzZXF1ZW5jZS5zaXplKCkgPiAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG1JbnNpZGVGdW5jdGlvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgc2VxdWVuY2VbMV0tPnRy
YXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBvdXQgPDwgIn1cbiI7CisK
KyAgICAgICAgICAgIGlmIChtQ29udGFpbnNMb29wRGlzY29udGludWl0eSAmJiAhbU91dHB1dExv
ZDBGdW5jdGlvbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobmFtZSAhPSAi
bWFpbiIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtT3V0cHV0TG9k
MEZ1bmN0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+dHJhdmVyc2UodGhp
cyk7CisgICAgICAgICAgICAgICAgICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRnVuY3Rpb25DYWxs
OgorICAgICAgICB7CisgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVubWFu
Z2xlTmFtZShub2RlLT5nZXROYW1lKCkpOworICAgICAgICAgICAgYm9vbCBsb2QwID0gbUluc2lk
ZURpc2NvbnRpbnVvdXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb247CisKKyAgICAgICAgICAg
IGlmIChub2RlLT5pc1VzZXJEZWZpbmVkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgb3V0IDw8IGRlY29yYXRlKG5hbWUpIDw8IChsb2QwID8gIkxvZDAoIiA6ICIoIik7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgaWYgKG5hbWUgPT0gInRleHR1cmUyRCIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWxvZDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4
dHVyZTJEID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNU
ZXh0dXJlMkRfYmlhcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEKCI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1Rl
eHR1cmUyRExvZDAgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykK
KyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
VXNlc1RleHR1cmUyRExvZDBfYmlhcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJETG9kMCgiOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5h
bWUgPT0gInRleHR1cmUyRFByb2oiKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFsb2QwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUy
RFByb2ogPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1Rl
eHR1cmUyRFByb2pfYmlhcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvaigiOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIp
CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bVVzZXNUZXh0dXJlMkRQcm9qTG9kMCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNp
emUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDBfYmlhcyA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxF
KCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvakxv
ZDAoIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlQ3ViZSIpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBpZiAoIWxvZDApCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9
PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1Vc2VzVGV4dHVyZUN1YmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXpl
KCkgPT0gMykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtVXNlc1RleHR1cmVDdWJlX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmVDdWJlKCI7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5z
aXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlTG9kMCA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1
ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXMgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJF
QUNIQUJMRSgpOworCisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmVD
dWJlTG9kMCgiOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmUyRExvZCIpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXpl
KCkgPT0gMykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
bVVzZXNUZXh0dXJlMkRMb2QgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAgICAgICAgICAgICBv
dXQgPDwgImdsX3RleHR1cmUyRExvZCgiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlMkRQcm9qTG9kIikKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9
PSAzKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtVXNl
c1RleHR1cmUyRFByb2pMb2QgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAgICAgICAgICAgICBv
dXQgPDwgImdsX3RleHR1cmUyRFByb2pMb2QoIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZUN1YmVMb2QiKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgp
ID09IDMpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1V
c2VzVGV4dHVyZUN1YmVMb2QgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAgICAgICAgICAgICBv
dXQgPDwgImdsX3RleHR1cmVDdWJlTG9kKCI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
VEludGVybVNlcXVlbmNlICZhcmd1bWVudHMgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOworCisgICAg
ICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3IgYXJnID0gYXJndW1lbnRzLmJl
Z2luKCk7IGFyZyAhPSBhcmd1bWVudHMuZW5kKCk7IGFyZysrKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUICYmIElzU2Ft
cGxlcigoKmFyZyktPmdldEFzVHlwZWQoKS0+Z2V0QmFzaWNUeXBlKCkpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJ0ZXh0dXJlXyI7CisgICAgICAgICAg
ICAgICAgICAgICgqYXJnKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgICAgIG91
dCA8PCAiLCBzYW1wbGVyXyI7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
KCphcmcpLT50cmF2ZXJzZSh0aGlzKTsKKworICAgICAgICAgICAgICAgIGlmIChhcmcgPCBhcmd1
bWVudHMuZW5kKCkgLSAxKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
b3V0IDw8ICIsICI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBvdXQgPDwgIikiOworCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFBhcmFtZXRlcnM6ICAgICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICIoIiwgIiwgIiwgIilcbntcbiIpOyAgICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUt
PmdldFR5cGUoKSwgInZlYzEiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICJ2ZWMxKCIsICIiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgRU9wQ29uc3RydWN0VmVjMjoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0
VHlwZSgpLCAidmVjMiIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgInZlYzIoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEVPcENvbnN0cnVjdFZlYzM6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5
cGUoKSwgInZlYzMiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICJ2ZWMzKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RWZWM0OgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBl
KCksICJ2ZWM0IiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0
KHZpc2l0LCAidmVjNCgiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0Qm9vbDoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgp
LCAiYnZlYzEiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJidmVjMSgiLCAiIiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVP
cENvbnN0cnVjdEJWZWMyOgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCks
ICJidmVjMiIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgImJ2ZWMyKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RCVmVjMzoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgp
LCAiYnZlYzMiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJidmVjMygiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0QlZlYzQ6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUo
KSwgImJ2ZWM0IiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0
KHZpc2l0LCAiYnZlYzQoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEVPcENvbnN0cnVjdEludDoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgp
LCAiaXZlYzEiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJpdmVjMSgiLCAiIiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVP
cENvbnN0cnVjdElWZWMyOgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCks
ICJpdmVjMiIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgIml2ZWMyKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RJVmVjMzoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgp
LCAiaXZlYzMiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJpdmVjMygiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0SVZlYzQ6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUo
KSwgIml2ZWM0IiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0
KHZpc2l0LCAiaXZlYzQoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEVPcENvbnN0cnVjdE1hdDI6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUo
KSwgIm1hdDIiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJtYXQyKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RNYXQzOgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCks
ICJtYXQzIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAibWF0MygiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9w
Q29uc3RydWN0TWF0NDogCisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwg
Im1hdDQiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICJtYXQ0KCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BD
b25zdHJ1Y3RTdHJ1Y3Q6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwg
c2NvcGVkU3RydWN0KG5vZGUtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+bmFtZSgpKSwgJm5vZGUt
PmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCBzdHJ1Y3RMb29r
dXAobm9kZS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpLT5uYW1lKCkpICsgIl9jdG9yKCIsICIsICIs
ICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BMZXNzVGhhbjogICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPCAiLCAiKSIpOyAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOiAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICIoIiwgIiA+ICIsICIpIik7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9w
TGVzc1RoYW5FcXVhbDogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIDw9ICIsICIpIik7
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPj0gIiwgIikiKTsgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEVPcFZlY3RvckVxdWFsOiAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICIoIiwgIiA9PSAiLCAiKSIpOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9w
VmVjdG9yTm90RXF1YWw6ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICE9ICIsICIpIik7
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BNb2Q6CisgICAgICAgIHsKKyAg
ICAgICAgICAgIC8vIFdlIG5lZWQgdG8gbG9vayBhdCB0aGUgbnVtYmVyIG9mIGNvbXBvbmVudHMg
aW4gYm90aCBhcmd1bWVudHMKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0U2VxdWVuY2Uo
KVswXS0+Z2V0QXNUeXBlZCgpLT5nZXROb21pbmFsU2l6ZSgpICogMTAKKyAgICAgICAgICAgICAg
ICAgICAgICsgbm9kZS0+Z2V0U2VxdWVuY2UoKVsxXS0+Z2V0QXNUeXBlZCgpLT5nZXROb21pbmFs
U2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDExOiBtVXNlc01vZDEg
PSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAyMjogbVVzZXNNb2QydiA9IHRydWU7
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDIxOiBtVXNlc01vZDJmID0gdHJ1ZTsgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgMzM6IG1Vc2VzTW9kM3YgPSB0cnVlOyBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSAzMTogbVVzZXNNb2QzZiA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIDQ0OiBtVXNlc01vZDR2ID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
NDE6IG1Vc2VzTW9kNGYgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgIm1vZCgiLCAiLCAiLCAiKSIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBFT3BQb3c6ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAicG93KCIs
ICIsICIsICIpIik7ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEF0YW46Cisg
ICAgICAgIEFTU0VSVChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKTsgICAvLyBhdGFu
KHgpIGlzIGEgdW5hcnkgb3BlcmF0b3IKKyAgICAgICAgc3dpdGNoIChub2RlLT5nZXRTZXF1ZW5j
ZSgpWzBdLT5nZXRBc1R5cGVkKCktPmdldE5vbWluYWxTaXplKCkpCisgICAgICAgIHsKKyAgICAg
ICAgICBjYXNlIDE6IG1Vc2VzQXRhbjJfMSA9IHRydWU7IGJyZWFrOworICAgICAgICAgIGNhc2Ug
MjogbVVzZXNBdGFuMl8yID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgY2FzZSAzOiBtVXNlc0F0
YW4yXzMgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICBjYXNlIDQ6IG1Vc2VzQXRhbjJfNCA9IHRy
dWU7IGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0K
KyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImF0YW55eCgiLCAiLCAiLCAiKSIpOworICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTWluOiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgIm1pbigiLCAiLCAiLCAiKSIpOyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVP
cE1heDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJtYXgoIiwgIiwgIiwgIikiKTsg
ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDbGFtcDogICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiY2xhbXAoIiwgIiwgIiwgIikiKTsgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRU9wTWl4OiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImxlcnAoIiwgIiwgIiwg
IikiKTsgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFN0ZXA6ICAgICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICJzdGVwKCIsICIsICIsICIpIik7ICAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBFT3BTbW9vdGhTdGVwOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAic21vb3Roc3Rl
cCgiLCAiLCAiLCAiKSIpOyAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRGlzdGFuY2U6ICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgImRpc3RhbmNlKCIsICIsICIsICIpIik7ICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEVPcERvdDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkb3Qo
IiwgIiwgIiwgIikiKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDcm9zczogICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiY3Jvc3MoIiwgIiwgIiwgIikiKTsgICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRU9wRmFjZUZvcndhcmQ6CisgICAgICAgIHsKKyAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+Z2V0U2VxdWVuY2UoKVswXS0+Z2V0QXNUeXBlZCgpLT5nZXROb21pbmFs
U2l6ZSgpKSAgIC8vIE51bWJlciBvZiBjb21wb25lbnRzIGluIHRoZSBmaXJzdCBhcmd1bWVudAor
ICAgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSAxOiBtVXNlc0ZhY2Vmb3J3YXJkMSA9IHRy
dWU7IGJyZWFrOworICAgICAgICAgICAgY2FzZSAyOiBtVXNlc0ZhY2Vmb3J3YXJkMiA9IHRydWU7
IGJyZWFrOworICAgICAgICAgICAgY2FzZSAzOiBtVXNlc0ZhY2Vmb3J3YXJkMyA9IHRydWU7IGJy
ZWFrOworICAgICAgICAgICAgY2FzZSA0OiBtVXNlc0ZhY2Vmb3J3YXJkNCA9IHRydWU7IGJyZWFr
OworICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZhY2Vmb3J3YXJk
KCIsICIsICIsICIpIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVP
cFJlZmxlY3Q6ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJyZWZsZWN0KCIsICIsICIsICIp
Iik7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BSZWZyYWN0OiAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAicmVmcmFjdCgiLCAiLCAiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRU9wTXVsOiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICogIiwgIiki
KTsgICAgICAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE91dHB1dEhMU0w6OnZpc2l0U2VsZWN0
aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uICpub2RlKQoreworICAgIFRJbmZvU2lu
a0Jhc2UgJm91dCA9IG1Cb2R5OworCisgICAgaWYgKG5vZGUtPnVzZXNUZXJuYXJ5T3BlcmF0b3Io
KSkKKyAgICB7CisgICAgICAgIG91dCA8PCAicyIgPDwgbVVuZm9sZFNob3J0Q2lyY3VpdC0+Z2V0
TmV4dFRlbXBvcmFyeUluZGV4KCk7CisgICAgfQorICAgIGVsc2UgIC8vIGlmL2Vsc2Ugc3RhdGVt
ZW50CisgICAgeworICAgICAgICBtVW5mb2xkU2hvcnRDaXJjdWl0LT50cmF2ZXJzZShub2RlLT5n
ZXRDb25kaXRpb24oKSk7CisKKyAgICAgICAgb3V0IDw8ICJpZiAoIjsKKworICAgICAgICBub2Rl
LT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CisKKyAgICAgICAgb3V0IDw8ICIpXG4i
OworICAgICAgICAKKyAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRMaW5lKCku
Zmlyc3RfbGluZSk7CisgICAgICAgIG91dCA8PCAie1xuIjsKKworICAgICAgICBib29sIGRpc2Nh
cmQgPSBmYWxzZTsKKworICAgICAgICBpZiAobm9kZS0+Z2V0VHJ1ZUJsb2NrKCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHRyYXZlcnNlU3RhdGVtZW50cyhub2RlLT5nZXRUcnVlQmxvY2soKSk7
CisKKyAgICAgICAgICAgIC8vIERldGVjdCB0cnVlIGRpc2NhcmQKKyAgICAgICAgICAgIGRpc2Nh
cmQgPSAoZGlzY2FyZCB8fCBGaW5kRGlzY2FyZDo6c2VhcmNoKG5vZGUtPmdldFRydWVCbG9jaygp
KSk7CisgICAgICAgIH0KKworICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExp
bmUoKS5maXJzdF9saW5lKTsKKyAgICAgICAgb3V0IDw8ICI7XG59XG4iOworCisgICAgICAgIGlm
IChub2RlLT5nZXRGYWxzZUJsb2NrKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAi
ZWxzZVxuIjsKKworICAgICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRGYWxz
ZUJsb2NrKCktPmdldExpbmUoKS5maXJzdF9saW5lKTsKKyAgICAgICAgICAgIG91dCA8PCAie1xu
IjsKKworICAgICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRGYWxzZUJsb2Nr
KCktPmdldExpbmUoKS5maXJzdF9saW5lKTsKKyAgICAgICAgICAgIHRyYXZlcnNlU3RhdGVtZW50
cyhub2RlLT5nZXRGYWxzZUJsb2NrKCkpOworCisgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0
aXZlKG5vZGUtPmdldEZhbHNlQmxvY2soKS0+Z2V0TGluZSgpLmZpcnN0X2xpbmUpOworICAgICAg
ICAgICAgb3V0IDw8ICI7XG59XG4iOworCisgICAgICAgICAgICAvLyBEZXRlY3QgZmFsc2UgZGlz
Y2FyZAorICAgICAgICAgICAgZGlzY2FyZCA9IChkaXNjYXJkIHx8IEZpbmREaXNjYXJkOjpzZWFy
Y2gobm9kZS0+Z2V0RmFsc2VCbG9jaygpKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBBTkdM
RSBpc3N1ZSA0ODY6IERldGVjdCBwcm9ibGVtYXRpYyBjb25kaXRpb25hbCBkaXNjYXJkCisgICAg
ICAgIGlmIChkaXNjYXJkICYmIEZpbmRTaWRlRWZmZWN0UmV3cml0aW5nOjpzZWFyY2gobm9kZSkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1Vc2VzRGlzY2FyZFJld3JpdGluZyA9IHRydWU7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgT3V0cHV0SExT
TDo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uICpub2RlKQoreworICAg
IHdyaXRlQ29uc3RhbnRVbmlvbihub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdldFVuaW9uQXJyYXlQ
b2ludGVyKCkpOworfQorCitib29sIE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwg
VEludGVybUxvb3AgKm5vZGUpCit7CisgICAgYm9vbCB3YXNEaXNjb250aW51b3VzID0gbUluc2lk
ZURpc2NvbnRpbnVvdXNMb29wOworCisgICAgaWYgKG1Db250YWluc0xvb3BEaXNjb250aW51aXR5
ICYmICFtSW5zaWRlRGlzY29udGludW91c0xvb3ApCisgICAgeworICAgICAgICBtSW5zaWRlRGlz
Y29udGludW91c0xvb3AgPSBjb250YWluc0xvb3BEaXNjb250aW51aXR5KG5vZGUpOworICAgIH0K
KworICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgeworICAgICAg
ICBpZiAoaGFuZGxlRXhjZXNzaXZlTG9vcChub2RlKSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgVEluZm9TaW5rQmFzZSAmb3V0
ID0gbUJvZHk7CisKKyAgICBpZiAobm9kZS0+Z2V0VHlwZSgpID09IEVMb29wRG9XaGlsZSkKKyAg
ICB7CisgICAgICAgIG91dCA8PCAie2RvXG4iOworCisgICAgICAgIG91dHB1dExpbmVEaXJlY3Rp
dmUobm9kZS0+Z2V0TGluZSgpLmZpcnN0X2xpbmUpOworICAgICAgICBvdXQgPDwgIntcbiI7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG91dCA8PCAie2ZvcigiOworICAgICAgICAK
KyAgICAgICAgaWYgKG5vZGUtPmdldEluaXQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbm9k
ZS0+Z2V0SW5pdCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIG91dCA8
PCAiOyAiOworCisgICAgICAgIGlmIChub2RlLT5nZXRDb25kaXRpb24oKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAg
ICB9CisKKyAgICAgICAgb3V0IDw8ICI7ICI7CisKKyAgICAgICAgaWYgKG5vZGUtPmdldEV4cHJl
c3Npb24oKSkKKyAgICAgICAgeworICAgICAgICAgICAgbm9kZS0+Z2V0RXhwcmVzc2lvbigpLT50
cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIG91dCA8PCAiKVxuIjsKKyAgICAg
ICAgCisgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0TGluZSgpLmZpcnN0X2xp
bmUpOworICAgICAgICBvdXQgPDwgIntcbiI7CisgICAgfQorCisgICAgaWYgKG5vZGUtPmdldEJv
ZHkoKSkKKyAgICB7CisgICAgICAgIHRyYXZlcnNlU3RhdGVtZW50cyhub2RlLT5nZXRCb2R5KCkp
OworICAgIH0KKworICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0TGluZSgpLmZpcnN0
X2xpbmUpOworICAgIG91dCA8PCAiO31cbiI7CisKKyAgICBpZiAobm9kZS0+Z2V0VHlwZSgpID09
IEVMb29wRG9XaGlsZSkKKyAgICB7CisgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+
Z2V0Q29uZGl0aW9uKCktPmdldExpbmUoKS5maXJzdF9saW5lKTsKKyAgICAgICAgb3V0IDw8ICJ3
aGlsZShcbiI7CisKKyAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMp
OworCisgICAgICAgIG91dCA8PCAiKTsiOworICAgIH0KKworICAgIG91dCA8PCAifVxuIjsKKwor
ICAgIG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCA9IHdhc0Rpc2NvbnRpbnVvdXM7CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgT3V0cHV0SExTTDo6dmlzaXRCcmFuY2goVmlzaXQgdmlz
aXQsIFRJbnRlcm1CcmFuY2ggKm5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJv
ZHk7CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldEZsb3dPcCgpKQorICAgIHsKKyAgICAgIGNhc2Ug
RU9wS2lsbDoKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImRpc2NhcmQ7XG4iLCAiIiwg
IiIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQnJlYWs6CisgICAgICAgIGlmICh2
aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1FeGNlc3NpdmVM
b29wSW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJ7QnJlYWsi
OworICAgICAgICAgICAgICAgIG1FeGNlc3NpdmVMb29wSW5kZXgtPnRyYXZlcnNlKHRoaXMpOwor
ICAgICAgICAgICAgICAgIG91dCA8PCAiID0gdHJ1ZTsgYnJlYWs7fVxuIjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQg
PDwgImJyZWFrO1xuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRU9wQ29udGludWU6IG91dHB1dFRyaXBsZXQodmlzaXQsICJjb250aW51ZTtc
biIsICIiLCAiIik7IGJyZWFrOworICAgICAgY2FzZSBFT3BSZXR1cm46CisgICAgICAgIGlmICh2
aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vZGUtPmdldEV4
cHJlc3Npb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgInJldHVy
biAiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG91dCA8PCAicmV0dXJuO1xuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBQb3N0VmlzaXQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgb3V0IDw8ICI7XG4iOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBPdXRwdXRITFNMOjp0cmF2ZXJzZVN0YXRlbWVudHMoVEludGVy
bU5vZGUgKm5vZGUpCit7CisgICAgaWYgKGlzU2luZ2xlU3RhdGVtZW50KG5vZGUpKQorICAgIHsK
KyAgICAgICAgbVVuZm9sZFNob3J0Q2lyY3VpdC0+dHJhdmVyc2Uobm9kZSk7CisgICAgfQorCisg
ICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7Cit9CisKK2Jvb2wgT3V0cHV0SExTTDo6aXNTaW5nbGVT
dGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpCit7CisgICAgVEludGVybUFnZ3JlZ2F0ZSAqYWdn
cmVnYXRlID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsKKworICAgIGlmIChhZ2dyZWdhdGUpCisg
ICAgeworICAgICAgICBpZiAoYWdncmVnYXRlLT5nZXRPcCgpID09IEVPcFNlcXVlbmNlKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Ig
c2l0ID0gYWdncmVnYXRlLT5nZXRTZXF1ZW5jZSgpLmJlZ2luKCk7IHNpdCAhPSBhZ2dyZWdhdGUt
PmdldFNlcXVlbmNlKCkuZW5kKCk7IHNpdCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGlmICghaXNTaW5nbGVTdGF0ZW1lbnQoKnNpdCkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCisvLyBIYW5kbGUgbG9vcHMgd2l0aCBtb3JlIHRoYW4gMjU0
IGl0ZXJhdGlvbnMgKHVuc3VwcG9ydGVkIGJ5IEQzRDkpIGJ5IHNwbGl0dGluZyB0aGVtCisvLyAo
VGhlIEQzRCBkb2N1bWVudGF0aW9uIHNheXMgMjU1IGl0ZXJhdGlvbnMsIGJ1dCB0aGUgY29tcGls
ZXIgY29tcGxhaW5zIGF0IGFueXRoaW5nIG1vcmUgdGhhbiAyNTQpLgorYm9vbCBPdXRwdXRITFNM
OjpoYW5kbGVFeGNlc3NpdmVMb29wKFRJbnRlcm1Mb29wICpub2RlKQoreworICAgIGNvbnN0IGlu
dCBNQVhfTE9PUF9JVEVSQVRJT05TID0gMjU0OworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1C
b2R5OworCisgICAgLy8gUGFyc2UgbG9vcHMgb2YgdGhlIGZvcm06CisgICAgLy8gZm9yKGludCBp
bmRleCA9IGluaXRpYWw7IGluZGV4IFtjb21wYXJhdG9yXSBsaW1pdDsgaW5kZXggKz0gaW5jcmVt
ZW50KQorICAgIFRJbnRlcm1TeW1ib2wgKmluZGV4ID0gTlVMTDsKKyAgICBUT3BlcmF0b3IgY29t
cGFyYXRvciA9IEVPcE51bGw7CisgICAgaW50IGluaXRpYWwgPSAwOworICAgIGludCBsaW1pdCA9
IDA7CisgICAgaW50IGluY3JlbWVudCA9IDA7CisKKyAgICAvLyBQYXJzZSBpbmRleCBuYW1lIGFu
ZCBpbnRpYWwgdmFsdWUKKyAgICBpZiAobm9kZS0+Z2V0SW5pdCgpKQorICAgIHsKKyAgICAgICAg
VEludGVybUFnZ3JlZ2F0ZSAqaW5pdCA9IG5vZGUtPmdldEluaXQoKS0+Z2V0QXNBZ2dyZWdhdGUo
KTsKKworICAgICAgICBpZiAoaW5pdCkKKyAgICAgICAgeworICAgICAgICAgICAgVEludGVybVNl
cXVlbmNlICZzZXF1ZW5jZSA9IGluaXQtPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAgICBUSW50
ZXJtVHlwZWQgKnZhcmlhYmxlID0gc2VxdWVuY2VbMF0tPmdldEFzVHlwZWQoKTsKKworICAgICAg
ICAgICAgaWYgKHZhcmlhYmxlICYmIHZhcmlhYmxlLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFUZW1w
b3JhcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVEludGVybUJpbmFyeSAqYXNz
aWduID0gdmFyaWFibGUtPmdldEFzQmluYXJ5Tm9kZSgpOworCisgICAgICAgICAgICAgICAgaWYg
KGFzc2lnbi0+Z2V0T3AoKSA9PSBFT3BJbml0aWFsaXplKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gYXNzaWduLT5nZXRMZWZ0
KCktPmdldEFzU3ltYm9sTm9kZSgpOworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQ29uc3Rh
bnRVbmlvbiAqY29uc3RhbnQgPSBhc3NpZ24tPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlv
bigpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wgJiYgY29uc3RhbnQpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdGFudC0+
Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5nZXROb21pbmFsU2l6ZSgpID09
IDEpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kZXggPSBzeW1ib2w7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbCA9
IGNvbnN0YW50LT5nZXRJQ29uc3QoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBQYXJzZSBjb21wYXJhdG9yIGFuZCBsaW1pdCB2YWx1ZQor
ICAgIGlmIChpbmRleCAhPSBOVUxMICYmIG5vZGUtPmdldENvbmRpdGlvbigpKQorICAgIHsKKyAg
ICAgICAgVEludGVybUJpbmFyeSAqdGVzdCA9IG5vZGUtPmdldENvbmRpdGlvbigpLT5nZXRBc0Jp
bmFyeU5vZGUoKTsKKyAgICAgICAgCisgICAgICAgIGlmICh0ZXN0ICYmIHRlc3QtPmdldExlZnQo
KS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldElkKCkgPT0gaW5kZXgtPmdldElkKCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpjb25zdGFudCA9IHRlc3QtPmdl
dFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpOworCisgICAgICAgICAgICBpZiAoY29uc3Rh
bnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50LT5nZXRCYXNp
Y1R5cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmdldE5vbWluYWxTaXplKCkgPT0gMSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbXBhcmF0b3IgPSB0ZXN0LT5n
ZXRPcCgpOworICAgICAgICAgICAgICAgICAgICBsaW1pdCA9IGNvbnN0YW50LT5nZXRJQ29uc3Qo
MCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgLy8gUGFyc2UgaW5jcmVtZW50CisgICAgaWYgKGluZGV4ICE9IE5VTEwgJiYgY29tcGFy
YXRvciAhPSBFT3BOdWxsICYmIG5vZGUtPmdldEV4cHJlc3Npb24oKSkKKyAgICB7CisgICAgICAg
IFRJbnRlcm1CaW5hcnkgKmJpbmFyeVRlcm1pbmFsID0gbm9kZS0+Z2V0RXhwcmVzc2lvbigpLT5n
ZXRBc0JpbmFyeU5vZGUoKTsKKyAgICAgICAgVEludGVybVVuYXJ5ICp1bmFyeVRlcm1pbmFsID0g
bm9kZS0+Z2V0RXhwcmVzc2lvbigpLT5nZXRBc1VuYXJ5Tm9kZSgpOworICAgICAgICAKKyAgICAg
ICAgaWYgKGJpbmFyeVRlcm1pbmFsKQorICAgICAgICB7CisgICAgICAgICAgICBUT3BlcmF0b3Ig
b3AgPSBiaW5hcnlUZXJtaW5hbC0+Z2V0T3AoKTsKKyAgICAgICAgICAgIFRJbnRlcm1Db25zdGFu
dFVuaW9uICpjb25zdGFudCA9IGJpbmFyeVRlcm1pbmFsLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0
YW50VW5pb24oKTsKKworICAgICAgICAgICAgaWYgKGNvbnN0YW50KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGlmIChjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYm
IGNvbnN0YW50LT5nZXROb21pbmFsU2l6ZSgpID09IDEpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBpbnQgdmFsdWUgPSBjb25zdGFudC0+Z2V0SUNvbnN0KDApOworCisg
ICAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3ApCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjogaW5jcmVtZW50ID0gdmFsdWU7
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjogaW5jcmVt
ZW50ID0gLXZhbHVlOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTklN
UExFTUVOVEVEKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodW5hcnlUZXJtaW5hbCkK
KyAgICAgICAgeworICAgICAgICAgICAgVE9wZXJhdG9yIG9wID0gdW5hcnlUZXJtaW5hbC0+Z2V0
T3AoKTsKKworICAgICAgICAgICAgc3dpdGNoIChvcCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50OiBpbmNyZW1lbnQgPSAxOyAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDogaW5jcmVtZW50ID0gLTE7IGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDogIGluY3JlbWVudCA9IDE7ICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6ICBpbmNyZW1lbnQgPSAtMTsg
YnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOSU1QTEVNRU5URUQoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChpbmRleCAhPSBOVUxMICYmIGNvbXBh
cmF0b3IgIT0gRU9wTnVsbCAmJiBpbmNyZW1lbnQgIT0gMCkKKyAgICB7CisgICAgICAgIGlmIChj
b21wYXJhdG9yID09IEVPcExlc3NUaGFuRXF1YWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNv
bXBhcmF0b3IgPSBFT3BMZXNzVGhhbjsKKyAgICAgICAgICAgIGxpbWl0ICs9IDE7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoY29tcGFyYXRvciA9PSBFT3BMZXNzVGhhbikKKyAgICAgICAgewor
ICAgICAgICAgICAgaW50IGl0ZXJhdGlvbnMgPSAobGltaXQgLSBpbml0aWFsKSAvIGluY3JlbWVu
dDsKKworICAgICAgICAgICAgaWYgKGl0ZXJhdGlvbnMgPD0gTUFYX0xPT1BfSVRFUkFUSU9OUykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gTm90IGFu
IGV4Y2Vzc2l2ZSBsb29wCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFRJbnRlcm1TeW1i
b2wgKnJlc3RvcmVJbmRleCA9IG1FeGNlc3NpdmVMb29wSW5kZXg7CisgICAgICAgICAgICBtRXhj
ZXNzaXZlTG9vcEluZGV4ID0gaW5kZXg7CisKKyAgICAgICAgICAgIG91dCA8PCAie2ludCAiOwor
ICAgICAgICAgICAgaW5kZXgtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICI7
XG4iCisgICAgICAgICAgICAgICAgICAgImJvb2wgQnJlYWsiOworICAgICAgICAgICAgaW5kZXgt
PnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICIgPSBmYWxzZTtcbiI7CisKKyAg
ICAgICAgICAgIGJvb2wgZmlyc3RMb29wRnJhZ21lbnQgPSB0cnVlOworCisgICAgICAgICAgICB3
aGlsZSAoaXRlcmF0aW9ucyA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50
IGNsYW1wZWRMaW1pdCA9IGluaXRpYWwgKyBpbmNyZW1lbnQgKiBzdGQ6Om1pbihNQVhfTE9PUF9J
VEVSQVRJT05TLCBpdGVyYXRpb25zKTsKKworICAgICAgICAgICAgICAgIGlmICghZmlyc3RMb29w
RnJhZ21lbnQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwg
ImlmICghQnJlYWsiOworICAgICAgICAgICAgICAgICAgICBpbmRleC0+dHJhdmVyc2UodGhpcyk7
CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiKSB7XG4iOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIGlmIChpdGVyYXRpb25zIDw9IE1BWF9MT09QX0lURVJBVElPTlMp
ICAgLy8gTGFzdCBsb29wIGZyYWdtZW50CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBtRXhjZXNzaXZlTG9vcEluZGV4ID0gTlVMTDsgICAvLyBTdG9wcyBzZXR0aW5nIHRo
ZSBCcmVhayBmbGFnCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIC8vIGZvcihpbnQgaW5kZXggPSBpbml0aWFsOyBpbmRleCA8IGNsYW1wZWRMaW1p
dDsgaW5kZXggKz0gaW5jcmVtZW50KQorCisgICAgICAgICAgICAgICAgb3V0IDw8ICJmb3IoIjsK
KyAgICAgICAgICAgICAgICBpbmRleC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAg
b3V0IDw8ICIgPSAiOworICAgICAgICAgICAgICAgIG91dCA8PCBpbml0aWFsOworCisgICAgICAg
ICAgICAgICAgb3V0IDw8ICI7ICI7CisgICAgICAgICAgICAgICAgaW5kZXgtPnRyYXZlcnNlKHRo
aXMpOworICAgICAgICAgICAgICAgIG91dCA8PCAiIDwgIjsKKyAgICAgICAgICAgICAgICBvdXQg
PDwgY2xhbXBlZExpbWl0OworCisgICAgICAgICAgICAgICAgb3V0IDw8ICI7ICI7CisgICAgICAg
ICAgICAgICAgaW5kZXgtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAgIG91dCA8PCAi
ICs9ICI7CisgICAgICAgICAgICAgICAgb3V0IDw8IGluY3JlbWVudDsKKyAgICAgICAgICAgICAg
ICBvdXQgPDwgIilcbiI7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgb3V0cHV0
TGluZURpcmVjdGl2ZShub2RlLT5nZXRMaW5lKCkuZmlyc3RfbGluZSk7CisgICAgICAgICAgICAg
ICAgb3V0IDw8ICJ7XG4iOworCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldEJvZHkoKSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmdldEJvZHkoKS0+
dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgb3V0
cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRMaW5lKCkuZmlyc3RfbGluZSk7CisgICAgICAgICAg
ICAgICAgb3V0IDw8ICI7fVxuIjsKKworICAgICAgICAgICAgICAgIGlmICghZmlyc3RMb29wRnJh
Z21lbnQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIn1c
biI7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZmlyc3RMb29wRnJhZ21l
bnQgPSBmYWxzZTsKKworICAgICAgICAgICAgICAgIGluaXRpYWwgKz0gTUFYX0xPT1BfSVRFUkFU
SU9OUyAqIGluY3JlbWVudDsKKyAgICAgICAgICAgICAgICBpdGVyYXRpb25zIC09IE1BWF9MT09Q
X0lURVJBVElPTlM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG91
dCA8PCAifSI7CisKKyAgICAgICAgICAgIG1FeGNlc3NpdmVMb29wSW5kZXggPSByZXN0b3JlSW5k
ZXg7CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
VU5JTVBMRU1FTlRFRCgpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsgICAvLyBOb3QgaGFu
ZGxlZCBhcyBhbiBleGNlc3NpdmUgbG9vcAorfQorCit2b2lkIE91dHB1dEhMU0w6Om91dHB1dFRy
aXBsZXQoVmlzaXQgdmlzaXQsIGNvbnN0IFRTdHJpbmcgJnByZVN0cmluZywgY29uc3QgVFN0cmlu
ZyAmaW5TdHJpbmcsIGNvbnN0IFRTdHJpbmcgJnBvc3RTdHJpbmcpCit7CisgICAgVEluZm9TaW5r
QmFzZSAmb3V0ID0gbUJvZHk7CisKKyAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAgewor
ICAgICAgICBvdXQgPDwgcHJlU3RyaW5nOworICAgIH0KKyAgICBlbHNlIGlmICh2aXNpdCA9PSBJ
blZpc2l0KQorICAgIHsKKyAgICAgICAgb3V0IDw8IGluU3RyaW5nOworICAgIH0KKyAgICBlbHNl
IGlmICh2aXNpdCA9PSBQb3N0VmlzaXQpCisgICAgeworICAgICAgICBvdXQgPDwgcG9zdFN0cmlu
ZzsKKyAgICB9Cit9CisKK3ZvaWQgT3V0cHV0SExTTDo6b3V0cHV0TGluZURpcmVjdGl2ZShpbnQg
bGluZSkKK3sKKyAgICBpZiAoKG1Db250ZXh0LmNvbXBpbGVPcHRpb25zICYgU0hfTElORV9ESVJF
Q1RJVkVTKSAmJiAobGluZSA+IDApKQorICAgIHsKKyAgICAgICAgbUJvZHkgPDwgIlxuIjsKKyAg
ICAgICAgbUJvZHkgPDwgIiNsaW5lICIgPDwgbGluZTsKKworICAgICAgICBpZiAobUNvbnRleHQu
c291cmNlUGF0aCkKKyAgICAgICAgeworICAgICAgICAgICAgbUJvZHkgPDwgIiBcIiIgPDwgbUNv
bnRleHQuc291cmNlUGF0aCA8PCAiXCIiOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBt
Qm9keSA8PCAiXG4iOworICAgIH0KK30KKworVFN0cmluZyBPdXRwdXRITFNMOjphcmd1bWVudFN0
cmluZyhjb25zdCBUSW50ZXJtU3ltYm9sICpzeW1ib2wpCit7CisgICAgVFF1YWxpZmllciBxdWFs
aWZpZXIgPSBzeW1ib2wtPmdldFF1YWxpZmllcigpOworICAgIGNvbnN0IFRUeXBlICZ0eXBlID0g
c3ltYm9sLT5nZXRUeXBlKCk7CisgICAgVFN0cmluZyBuYW1lID0gc3ltYm9sLT5nZXRTeW1ib2wo
KTsKKworICAgIGlmIChuYW1lLmVtcHR5KCkpICAgLy8gSExTTCBkZW1hbmRzIG5hbWVkIGFyZ3Vt
ZW50cywgYWxzbyBmb3IgcHJvdG90eXBlcworICAgIHsKKyAgICAgICAgbmFtZSA9ICJ4IiArIHN0
cihtVW5pcXVlSW5kZXgrKyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG5hbWUg
PSBkZWNvcmF0ZShuYW1lKTsKKyAgICB9CisKKyAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExT
TDExX09VVFBVVCAmJiBJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpCisgICAgeworICAg
ICAgIHJldHVybiBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIgIiArIHRleHR1cmVTdHJp
bmcodHlwZSkgKyAiIHRleHR1cmVfIiArIG5hbWUgKyBhcnJheVN0cmluZyh0eXBlKSArICIsICIg
KworICAgICAgICAgICAgICBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIgU2FtcGxlclN0
YXRlIHNhbXBsZXJfIiArIG5hbWUgKyBhcnJheVN0cmluZyh0eXBlKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gcXVhbGlmaWVyU3RyaW5nKHF1YWxpZmllcikgKyAiICIgKyB0eXBlU3RyaW5nKHR5cGUp
ICsgIiAiICsgbmFtZSArIGFycmF5U3RyaW5nKHR5cGUpOworfQorCitUU3RyaW5nIE91dHB1dEhM
U0w6OnF1YWxpZmllclN0cmluZyhUUXVhbGlmaWVyIHF1YWxpZmllcikKK3sKKyAgICBzd2l0Y2go
cXVhbGlmaWVyKQorICAgIHsKKyAgICAgIGNhc2UgRXZxSW46ICAgICAgICAgICAgcmV0dXJuICJp
biI7CisgICAgICBjYXNlIEV2cU91dDogICAgICAgICAgIHJldHVybiAib3V0IjsKKyAgICAgIGNh
c2UgRXZxSW5PdXQ6ICAgICAgICAgcmV0dXJuICJpbm91dCI7CisgICAgICBjYXNlIEV2cUNvbnN0
UmVhZE9ubHk6IHJldHVybiAiY29uc3QiOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
KyAgICB9CisKKyAgICByZXR1cm4gIiI7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6dHlwZVN0
cmluZyhjb25zdCBUVHlwZSAmdHlwZSkKK3sKKyAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9
PSBFYnRTdHJ1Y3QpCisgICAgeworICAgICAgICBjb25zdCBUU3RyaW5nJiB0eXBlTmFtZSA9IHR5
cGUuZ2V0U3RydWN0KCktPm5hbWUoKTsKKyAgICAgICAgaWYgKHR5cGVOYW1lICE9ICIiKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3RydWN0TG9va3VwKHR5cGVOYW1lKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlICAgLy8gTmFtZWxlc3Mgc3RydWN0dXJlLCBkZWZpbmUgaW4gcGxh
Y2UKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gdHlw
ZS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7CisKKyAgICAgICAgICAgIFRTdHJpbmcgc3RyaW5nID0g
InN0cnVjdFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAie1xuIjsKKworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICpmaWVsZCA9IGZpZWxk
c1tpXTsKKworICAgICAgICAgICAgICAgIHN0cmluZyArPSAiICAgICIgKyB0eXBlU3RyaW5nKCpm
aWVsZC0+dHlwZSgpKSArICIgIiArIGRlY29yYXRlKGZpZWxkLT5uYW1lKCkpICsgYXJyYXlTdHJp
bmcoKmZpZWxkLT50eXBlKCkpICsgIjtcbiI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHN0cmluZyArPSAifSAiOworCisgICAgICAgICAgICByZXR1cm4gc3RyaW5nOworICAgICAgICB9
CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUuaXNNYXRyaXgoKSkKKyAgICB7CisgICAgICAgIHN3
aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSAy
OiByZXR1cm4gImZsb2F0MngyIjsKKyAgICAgICAgICBjYXNlIDM6IHJldHVybiAiZmxvYXQzeDMi
OworICAgICAgICAgIGNhc2UgNDogcmV0dXJuICJmbG9hdDR4NCI7CisgICAgICAgIH0KKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlLmdldEJhc2ljVHlwZSgpKQor
ICAgICAgICB7CisgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgIHN3aXRjaCAo
dHlwZS5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNl
IDE6IHJldHVybiAiZmxvYXQiOworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiAiZmxvYXQy
IjsKKyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gImZsb2F0MyI7CisgICAgICAgICAgICAg
IGNhc2UgNDogcmV0dXJuICJmbG9hdDQiOworICAgICAgICAgICAgfQorICAgICAgICAgIGNhc2Ug
RWJ0SW50OgorICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldE5vbWluYWxTaXplKCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuICJpbnQiOworICAgICAgICAg
ICAgICBjYXNlIDI6IHJldHVybiAiaW50MiI7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJu
ICJpbnQzIjsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gImludDQiOworICAgICAgICAg
ICAgfQorICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZS5n
ZXROb21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IHJl
dHVybiAiYm9vbCI7CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuICJib29sMiI7CisgICAg
ICAgICAgICAgIGNhc2UgMzogcmV0dXJuICJib29sMyI7CisgICAgICAgICAgICAgIGNhc2UgNDog
cmV0dXJuICJib29sNCI7CisgICAgICAgICAgICB9CisgICAgICAgICAgY2FzZSBFYnRWb2lkOgor
ICAgICAgICAgICAgcmV0dXJuICJ2b2lkIjsKKyAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDoK
KyAgICAgICAgICAgIHJldHVybiAic2FtcGxlcjJEIjsKKyAgICAgICAgICBjYXNlIEVidFNhbXBs
ZXJDdWJlOgorICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyQ1VCRSI7CisgICAgICAgICAgY2Fz
ZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6CisgICAgICAgICAgICByZXR1cm4gInNhbXBsZXIyRCI7
CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorCisgICAgVU5SRUFDSEFCTEUoKTsKKyAgICByZXR1cm4gIjx1bmtub3duIHR5cGU+IjsKK30K
KworVFN0cmluZyBPdXRwdXRITFNMOjp0ZXh0dXJlU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQor
eworICAgIHN3aXRjaCAodHlwZS5nZXRCYXNpY1R5cGUoKSkKKyAgICB7CisgICAgICBjYXNlIEVi
dFNhbXBsZXIyRDoKKyAgICAgICAgcmV0dXJuICJUZXh0dXJlMkQiOworICAgICAgY2FzZSBFYnRT
YW1wbGVyQ3ViZToKKyAgICAgICAgcmV0dXJuICJUZXh0dXJlQ3ViZSI7CisgICAgICBjYXNlIEVi
dFNhbXBsZXJFeHRlcm5hbE9FUzoKKyAgICAgICAgcmV0dXJuICJUZXh0dXJlMkQiOworICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICByZXR1cm4gIjx1bmtub3duIHRleHR1cmUgdHlwZT4iOworfQorCitUU3RyaW5nIE91dHB1dEhM
U0w6OmFycmF5U3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQoreworICAgIGlmICghdHlwZS5pc0Fy
cmF5KCkpCisgICAgeworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAgcmV0dXJuICJb
IiArIHN0cih0eXBlLmdldEFycmF5U2l6ZSgpKSArICJdIjsKK30KKworVFN0cmluZyBPdXRwdXRI
TFNMOjppbml0aWFsaXplcihjb25zdCBUVHlwZSAmdHlwZSkKK3sKKyAgICBUU3RyaW5nIHN0cmlu
ZzsKKworICAgIHNpemVfdCBzaXplID0gdHlwZS5nZXRPYmplY3RTaXplKCk7CisgICAgZm9yIChz
aXplX3QgY29tcG9uZW50ID0gMDsgY29tcG9uZW50IDwgc2l6ZTsgY29tcG9uZW50KyspCisgICAg
eworICAgICAgICBzdHJpbmcgKz0gIjAiOworCisgICAgICAgIGlmIChjb21wb25lbnQgKyAxIDwg
c2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgc3RyaW5nICs9ICIsICI7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gInsiICsgc3RyaW5nICsgIn0iOworfQorCit2b2lkIE91dHB1
dEhMU0w6OmFkZENvbnN0cnVjdG9yKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5nICZu
YW1lLCBjb25zdCBUSW50ZXJtU2VxdWVuY2UgKnBhcmFtZXRlcnMpCit7CisgICAgaWYgKG5hbWUg
PT0gIiIpCisgICAgeworICAgICAgICByZXR1cm47ICAgLy8gTmFtZWxlc3Mgc3RydWN0dXJlcyBk
b24ndCBoYXZlIGNvbnN0cnVjdG9ycworICAgIH0KKworICAgIGlmICh0eXBlLmdldFN0cnVjdCgp
ICYmIG1TdHJ1Y3ROYW1lcy5maW5kKGRlY29yYXRlKG5hbWUpKSAhPSBtU3RydWN0TmFtZXMuZW5k
KCkpCisgICAgeworICAgICAgICByZXR1cm47ICAgLy8gQWxyZWFkeSBhZGRlZAorICAgIH0KKwor
ICAgIFRUeXBlIGN0b3JUeXBlID0gdHlwZTsKKyAgICBjdG9yVHlwZS5jbGVhckFycmF5bmVzcygp
OworICAgIGN0b3JUeXBlLnNldFByZWNpc2lvbihFYnBIaWdoKTsKKyAgICBjdG9yVHlwZS5zZXRR
dWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKKworICAgIFRTdHJpbmcgY3Rvck5hbWUgPSB0eXBlLmdl
dFN0cnVjdCgpID8gZGVjb3JhdGUobmFtZSkgOiBuYW1lOworCisgICAgdHlwZWRlZiBzdGQ6OnZl
Y3RvcjxUVHlwZT4gUGFyYW1ldGVyQXJyYXk7CisgICAgUGFyYW1ldGVyQXJyYXkgY3RvclBhcmFt
ZXRlcnM7CisKKyAgICBpZiAodHlwZS5nZXRTdHJ1Y3QoKSkKKyAgICB7CisgICAgICAgIG1TdHJ1
Y3ROYW1lcy5pbnNlcnQoZGVjb3JhdGUobmFtZSkpOworCisgICAgICAgIFRTdHJpbmcgc3RydWN0
dXJlOworICAgICAgICBzdHJ1Y3R1cmUgKz0gInN0cnVjdCAiICsgZGVjb3JhdGUobmFtZSkgKyAi
XG4iCisgICAgICAgICAgICAgICAgICAgICAie1xuIjsKKworICAgICAgICBjb25zdCBURmllbGRM
aXN0ICZmaWVsZHMgPSB0eXBlLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKKworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKKyAgICAgICAgewor
ICAgICAgICAgICAgY29uc3QgVEZpZWxkICpmaWVsZCA9IGZpZWxkc1tpXTsKKworICAgICAgICAg
ICAgc3RydWN0dXJlICs9ICIgICAgIiArIHR5cGVTdHJpbmcoKmZpZWxkLT50eXBlKCkpICsgIiAi
ICsgZGVjb3JhdGVGaWVsZChmaWVsZC0+bmFtZSgpLCB0eXBlKSArIGFycmF5U3RyaW5nKCpmaWVs
ZC0+dHlwZSgpKSArICI7XG4iOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0dXJlICs9ICJ9
O1xuIjsKKworICAgICAgICBpZiAoc3RkOjpmaW5kKG1TdHJ1Y3REZWNsYXJhdGlvbnMuYmVnaW4o
KSwgbVN0cnVjdERlY2xhcmF0aW9ucy5lbmQoKSwgc3RydWN0dXJlKSA9PSBtU3RydWN0RGVjbGFy
YXRpb25zLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBtU3RydWN0RGVjbGFyYXRpb25z
LnB1c2hfYmFjayhzdHJ1Y3R1cmUpOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGN0b3JQYXJhbWV0ZXJzLnB1c2hfYmFjaygqZmllbGRzW2ldLT50eXBlKCkpOworICAgICAg
ICB9CisgICAgfQorICAgIGVsc2UgaWYgKHBhcmFtZXRlcnMpCisgICAgeworICAgICAgICBmb3Ig
KFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgcGFyYW1ldGVyID0gcGFyYW1ldGVycy0+
YmVnaW4oKTsgcGFyYW1ldGVyICE9IHBhcmFtZXRlcnMtPmVuZCgpOyBwYXJhbWV0ZXIrKykKKyAg
ICAgICAgeworICAgICAgICAgICAgY3RvclBhcmFtZXRlcnMucHVzaF9iYWNrKCgqcGFyYW1ldGVy
KS0+Z2V0QXNUeXBlZCgpLT5nZXRUeXBlKCkpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2Ug
VU5SRUFDSEFCTEUoKTsKKworICAgIFRTdHJpbmcgY29uc3RydWN0b3I7CisKKyAgICBpZiAoY3Rv
clR5cGUuZ2V0U3RydWN0KCkpCisgICAgeworICAgICAgICBjb25zdHJ1Y3RvciArPSBjdG9yTmFt
ZSArICIgIiArIGN0b3JOYW1lICsgIl9jdG9yKCI7CisgICAgfQorICAgIGVsc2UgICAvLyBCdWls
dC1pbiB0eXBlCisgICAgeworICAgICAgICBjb25zdHJ1Y3RvciArPSB0eXBlU3RyaW5nKGN0b3JU
eXBlKSArICIgIiArIGN0b3JOYW1lICsgIigiOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQg
aW50IHBhcmFtZXRlciA9IDA7IHBhcmFtZXRlciA8IGN0b3JQYXJhbWV0ZXJzLnNpemUoKTsgcGFy
YW1ldGVyKyspCisgICAgeworICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IGN0b3JQYXJhbWV0
ZXJzW3BhcmFtZXRlcl07CisKKyAgICAgICAgY29uc3RydWN0b3IgKz0gdHlwZVN0cmluZyh0eXBl
KSArICIgeCIgKyBzdHIocGFyYW1ldGVyKSArIGFycmF5U3RyaW5nKHR5cGUpOworCisgICAgICAg
IGlmIChwYXJhbWV0ZXIgPCBjdG9yUGFyYW1ldGVycy5zaXplKCkgLSAxKQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb25zdHJ1Y3RvciArPSAiLCAiOworICAgICAgICB9CisgICAgfQorCisgICAg
Y29uc3RydWN0b3IgKz0gIilcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIjsKKworICAgIGlm
IChjdG9yVHlwZS5nZXRTdHJ1Y3QoKSkKKyAgICB7CisgICAgICAgIGNvbnN0cnVjdG9yICs9ICIg
ICAgIiArIGN0b3JOYW1lICsgIiBzdHJ1Y3R1cmUgPSB7IjsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgY29uc3RydWN0b3IgKz0gIiAgICByZXR1cm4gIiArIHR5cGVTdHJpbmcoY3Rv
clR5cGUpICsgIigiOworICAgIH0KKworICAgIGlmIChjdG9yVHlwZS5pc01hdHJpeCgpICYmIGN0
b3JQYXJhbWV0ZXJzLnNpemUoKSA9PSAxKQorICAgIHsKKyAgICAgICAgaW50IGRpbSA9IGN0b3JU
eXBlLmdldE5vbWluYWxTaXplKCk7CisgICAgICAgIGNvbnN0IFRUeXBlICZwYXJhbWV0ZXIgPSBj
dG9yUGFyYW1ldGVyc1swXTsKKworICAgICAgICBpZiAocGFyYW1ldGVyLmlzU2NhbGFyKCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGRpbTsgcm93Kysp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwg
ZGltOyBjb2wrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0
cnVjdG9yICs9IFRTdHJpbmcoKHJvdyA9PSBjb2wpID8gIngwIiA6ICIwLjAiKTsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChyb3cgPCBkaW0gLSAxIHx8IGNv
bCA8IGRpbSAtIDEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0cnVjdG9yICs9ICIsICI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocGFy
YW1ldGVyLmlzTWF0cml4KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IHJvdyA9
IDA7IHJvdyA8IGRpbTsgcm93KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9y
IChpbnQgY29sID0gMDsgY29sIDwgZGltOyBjb2wrKykKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChyb3cgPCBwYXJhbWV0ZXIuZ2V0Tm9taW5hbFNpemUoKSAmJiBj
b2wgPCBwYXJhbWV0ZXIuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gVFN0cmluZygieDAiKSArICJb
IiArIHN0cihyb3cpICsgIl0iICsgIlsiICsgc3RyKGNvbCkgKyAiXSI7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSBUU3RyaW5nKChyb3cgPT0g
Y29sKSA/ICIxLjAiIDogIjAuMCIpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHJvdyA8IGRpbSAtIDEgfHwgY29sIDwgZGltIC0gMSkKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gIiwg
IjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIHNpemVfdCByZW1haW5pbmdDb21wb25lbnRzID0gY3RvclR5cGUu
Z2V0T2JqZWN0U2l6ZSgpOworICAgICAgICBzaXplX3QgcGFyYW1ldGVySW5kZXggPSAwOworCisg
ICAgICAgIHdoaWxlIChyZW1haW5pbmdDb21wb25lbnRzID4gMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgY29uc3QgVFR5cGUgJnBhcmFtZXRlciA9IGN0b3JQYXJhbWV0ZXJzW3BhcmFtZXRlcklu
ZGV4XTsKKyAgICAgICAgICAgIGNvbnN0IHNpemVfdCBwYXJhbWV0ZXJTaXplID0gcGFyYW1ldGVy
LmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgICAgIGJvb2wgbW9yZVBhcmFtZXRlcnMgPSBwYXJh
bWV0ZXJJbmRleCArIDEgPCBjdG9yUGFyYW1ldGVycy5zaXplKCk7CisKKyAgICAgICAgICAgIGNv
bnN0cnVjdG9yICs9ICJ4IiArIHN0cihwYXJhbWV0ZXJJbmRleCk7CisKKyAgICAgICAgICAgIGlm
IChwYXJhbWV0ZXIuaXNTY2FsYXIoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBB
U1NFUlQocGFyYW1ldGVyU2l6ZSA8PSByZW1haW5pbmdDb21wb25lbnRzKTsKKyAgICAgICAgICAg
ICAgICByZW1haW5pbmdDb21wb25lbnRzIC09IHBhcmFtZXRlclNpemU7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIGlmIChwYXJhbWV0ZXIuaXNWZWN0b3IoKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZiAocmVtYWluaW5nQ29tcG9uZW50cyA9PSBwYXJhbWV0ZXJT
aXplIHx8IG1vcmVQYXJhbWV0ZXJzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKHBhcmFtZXRlclNpemUgPD0gcmVtYWluaW5nQ29tcG9uZW50cyk7CisgICAg
ICAgICAgICAgICAgICAgIHJlbWFpbmluZ0NvbXBvbmVudHMgLT0gcGFyYW1ldGVyU2l6ZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVtYWluaW5nQ29tcG9u
ZW50cyA8IHN0YXRpY19jYXN0PHNpemVfdD4ocGFyYW1ldGVyLmdldE5vbWluYWxTaXplKCkpKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChyZW1haW5pbmdD
b21wb25lbnRzKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAxOiBjb25zdHJ1Y3RvciArPSAiLngiOyAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIDI6IGNvbnN0cnVjdG9yICs9ICIueHkiOyAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgMzogY29uc3RydWN0b3IgKz0gIi54eXoiOyAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSA0OiBjb25zdHJ1Y3RvciArPSAiLnh5enciOyBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nQ29tcG9uZW50cyA9IDA7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHBhcmFtZXRlci5pc01hdHJpeCgp
IHx8IHBhcmFtZXRlci5nZXRTdHJ1Y3QoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQocmVtYWluaW5nQ29tcG9uZW50cyA9PSBwYXJhbWV0ZXJTaXplIHx8IG1vcmVQYXJh
bWV0ZXJzKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQocGFyYW1ldGVyU2l6ZSA8PSByZW1haW5p
bmdDb21wb25lbnRzKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZW1haW5p
bmdDb21wb25lbnRzIC09IHBhcmFtZXRlclNpemU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgIGlmIChtb3JlUGFyYW1ldGVycykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJJbmRleCsrOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAocmVtYWluaW5nQ29tcG9uZW50cykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSAiLCAiOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGN0b3JUeXBlLmdldFN0cnVjdCgpKQorICAg
IHsKKyAgICAgICAgY29uc3RydWN0b3IgKz0gIn07XG4iCisgICAgICAgICAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIHN0cnVjdHVyZTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiI7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNvbnN0cnVjdG9yICs9ICIpO1xuIgor
ICAgICAgICAgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisKKyAgICBtQ29uc3RydWN0b3Jz
Lmluc2VydChjb25zdHJ1Y3Rvcik7Cit9CisKK2NvbnN0IENvbnN0YW50VW5pb24gKk91dHB1dEhM
U0w6OndyaXRlQ29uc3RhbnRVbmlvbihjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgQ29uc3RhbnRV
bmlvbiAqY29uc3RVbmlvbikKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKKwor
ICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAgICB7CisgICAgICAg
IG91dCA8PCBzdHJ1Y3RMb29rdXAodHlwZS5nZXRTdHJ1Y3QoKS0+bmFtZSgpKSArICJfY3Rvcigi
OworICAgICAgICAKKyAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gdHlwZS5nZXRT
dHJ1Y3QoKS0+ZmllbGRzKCk7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWVs
ZHMuc2l6ZSgpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICpmaWVs
ZFR5cGUgPSBmaWVsZHNbaV0tPnR5cGUoKTsKKworICAgICAgICAgICAgY29uc3RVbmlvbiA9IHdy
aXRlQ29uc3RhbnRVbmlvbigqZmllbGRUeXBlLCBjb25zdFVuaW9uKTsKKworICAgICAgICAgICAg
aWYgKGkgIT0gZmllbGRzLnNpemUoKSAtIDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgb3V0IDw8ICIsICI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBvdXQg
PDwgIikiOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzaXplX3Qgc2l6ZSA9IHR5
cGUuZ2V0T2JqZWN0U2l6ZSgpOworICAgICAgICBib29sIHdyaXRlVHlwZSA9IHNpemUgPiAxOwor
ICAgICAgICAKKyAgICAgICAgaWYgKHdyaXRlVHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAg
b3V0IDw8IHR5cGVTdHJpbmcodHlwZSkgPDwgIigiOworICAgICAgICB9CisKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyssIGNvbnN0VW5pb24rKykKKyAgICAgICAgewor
ICAgICAgICAgICAgc3dpdGNoIChjb25zdFVuaW9uLT5nZXRUeXBlKCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IG91dCA8PCBzdGQ6Om1pbihGTFRfTUFYLCBz
dGQ6Om1heCgtRkxUX01BWCwgY29uc3RVbmlvbi0+Z2V0RkNvbnN0KCkpKTsgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgRWJ0SW50OiAgIG91dCA8PCBjb25zdFVuaW9uLT5nZXRJQ29uc3QoKTsg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogIG91dCA8PCBjb25zdFVuaW9uLT5n
ZXRCQ29uc3QoKTsgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpICE9IHNpemUgLSAxKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHdyaXRlVHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAg
b3V0IDw8ICIpIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBjb25zdFVuaW9uOwor
fQorCitUU3RyaW5nIE91dHB1dEhMU0w6OnNjb3BlU3RyaW5nKHVuc2lnbmVkIGludCBkZXB0aExp
bWl0KQoreworICAgIFRTdHJpbmcgc3RyaW5nOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBtU2NvcGVCcmFja2V0LnNpemUoKSAmJiBpIDwgZGVwdGhMaW1pdDsgaSsrKQorICAg
IHsKKyAgICAgICAgc3RyaW5nICs9ICJfIiArIHN0cihpKTsKKyAgICB9CisKKyAgICByZXR1cm4g
c3RyaW5nOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OnNjb3BlZFN0cnVjdChjb25zdCBUU3Ry
aW5nICZ0eXBlTmFtZSkKK3sKKyAgICBpZiAodHlwZU5hbWUgPT0gIiIpCisgICAgeworICAgICAg
ICByZXR1cm4gdHlwZU5hbWU7CisgICAgfQorCisgICAgcmV0dXJuIHR5cGVOYW1lICsgc2NvcGVT
dHJpbmcobVNjb3BlRGVwdGgpOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OnN0cnVjdExvb2t1
cChjb25zdCBUU3RyaW5nICZ0eXBlTmFtZSkKK3sKKyAgICBmb3IgKGludCBkZXB0aCA9IG1TY29w
ZURlcHRoOyBkZXB0aCA+PSAwOyBkZXB0aC0tKQorICAgIHsKKyAgICAgICAgVFN0cmluZyBzY29w
ZWROYW1lID0gZGVjb3JhdGUodHlwZU5hbWUgKyBzY29wZVN0cmluZyhkZXB0aCkpOworCisgICAg
ICAgIGZvciAoU3RydWN0TmFtZXM6Oml0ZXJhdG9yIHN0cnVjdE5hbWUgPSBtU3RydWN0TmFtZXMu
YmVnaW4oKTsgc3RydWN0TmFtZSAhPSBtU3RydWN0TmFtZXMuZW5kKCk7IHN0cnVjdE5hbWUrKykK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKCpzdHJ1Y3ROYW1lID09IHNjb3BlZE5hbWUpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNjb3BlZE5hbWU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBVTlJFQUNIQUJMRSgpOyAgIC8vIFNob3Vs
ZCBoYXZlIGZvdW5kIGEgbWF0Y2hpbmcgY29uc3RydWN0b3IKKworICAgIHJldHVybiB0eXBlTmFt
ZTsKK30KKworVFN0cmluZyBPdXRwdXRITFNMOjpkZWNvcmF0ZShjb25zdCBUU3RyaW5nICZzdHJp
bmcpCit7CisgICAgaWYgKHN0cmluZy5jb21wYXJlKDAsIDMsICJnbF8iKSAhPSAwICYmIHN0cmlu
Zy5jb21wYXJlKDAsIDMsICJkeF8iKSAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJfIiAr
IHN0cmluZzsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHN0cmluZzsKK30KKworVFN0cmluZyBP
dXRwdXRITFNMOjpkZWNvcmF0ZVVuaWZvcm0oY29uc3QgVFN0cmluZyAmc3RyaW5nLCBjb25zdCBU
VHlwZSAmdHlwZSkKK3sKKyAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTYW1wbGVy
RXh0ZXJuYWxPRVMpCisgICAgeworICAgICAgICByZXR1cm4gImV4XyIgKyBzdHJpbmc7CisgICAg
fQorICAgIAorICAgIHJldHVybiBkZWNvcmF0ZShzdHJpbmcpOworfQorCitUU3RyaW5nIE91dHB1
dEhMU0w6OmRlY29yYXRlRmllbGQoY29uc3QgVFN0cmluZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAm
c3RydWN0dXJlKQoreworICAgIGlmIChzdHJ1Y3R1cmUuZ2V0U3RydWN0KCktPm5hbWUoKS5jb21w
YXJlKDAsIDMsICJnbF8iKSAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29yYXRlKHN0
cmluZyk7CisgICAgfQorCisgICAgcmV0dXJuIHN0cmluZzsKK30KKworVFN0cmluZyBPdXRwdXRI
TFNMOjpyZWdpc3RlclN0cmluZyhUSW50ZXJtU3ltYm9sICpvcGVyYW5kKQoreworICAgIEFTU0VS
VChvcGVyYW5kLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFVbmlmb3JtKTsKKworICAgIGlmIChJc1Nh
bXBsZXIob3BlcmFuZC0+Z2V0QmFzaWNUeXBlKCkpKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJz
IiArIHN0cihzYW1wbGVyUmVnaXN0ZXIob3BlcmFuZCkpOworICAgIH0KKworICAgIHJldHVybiAi
YyIgKyBzdHIodW5pZm9ybVJlZ2lzdGVyKG9wZXJhbmQpKTsKK30KKworaW50IE91dHB1dEhMU0w6
OnNhbXBsZXJSZWdpc3RlcihUSW50ZXJtU3ltYm9sICpzYW1wbGVyKQoreworICAgIGNvbnN0IFRU
eXBlICZ0eXBlID0gc2FtcGxlci0+Z2V0VHlwZSgpOworICAgIEFTU0VSVChJc1NhbXBsZXIodHlw
ZS5nZXRCYXNpY1R5cGUoKSkpOworCisgICAgaW50IGluZGV4ID0gbVNhbXBsZXJSZWdpc3RlcjsK
KyAgICBtU2FtcGxlclJlZ2lzdGVyICs9IHNhbXBsZXItPnRvdGFsUmVnaXN0ZXJDb3VudCgpOwor
CisgICAgZGVjbGFyZVVuaWZvcm0odHlwZSwgc2FtcGxlci0+Z2V0U3ltYm9sKCksIGluZGV4KTsK
KworICAgIHJldHVybiBpbmRleDsKK30KKworaW50IE91dHB1dEhMU0w6OnVuaWZvcm1SZWdpc3Rl
cihUSW50ZXJtU3ltYm9sICp1bmlmb3JtKQoreworICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gdW5p
Zm9ybS0+Z2V0VHlwZSgpOworICAgIEFTU0VSVCghSXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBl
KCkpKTsKKworICAgIGludCBpbmRleCA9IG1Vbmlmb3JtUmVnaXN0ZXI7CisgICAgbVVuaWZvcm1S
ZWdpc3RlciArPSB1bmlmb3JtLT50b3RhbFJlZ2lzdGVyQ291bnQoKTsKKworICAgIGRlY2xhcmVV
bmlmb3JtKHR5cGUsIHVuaWZvcm0tPmdldFN5bWJvbCgpLCBpbmRleCk7CisKKyAgICByZXR1cm4g
aW5kZXg7Cit9CisKK3ZvaWQgT3V0cHV0SExTTDo6ZGVjbGFyZVVuaWZvcm0oY29uc3QgVFR5cGUg
JnR5cGUsIGNvbnN0IFRTdHJpbmcgJm5hbWUsIGludCBpbmRleCkKK3sKKyAgICBUU3RydWN0dXJl
ICpzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgpOworCisgICAgaWYgKCFzdHJ1Y3R1cmUpCisg
ICAgeworICAgICAgICBtQWN0aXZlVW5pZm9ybXMucHVzaF9iYWNrKFVuaWZvcm0oZ2xWYXJpYWJs
ZVR5cGUodHlwZSksIGdsVmFyaWFibGVQcmVjaXNpb24odHlwZSksIG5hbWUuY19zdHIoKSwgdHlw
ZS5nZXRBcnJheVNpemUoKSwgaW5kZXgpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gc3RydWN0dXJlLT5maWVsZHMoKTsKKworICAg
ICAgICBpZiAodHlwZS5pc0FycmF5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBlbGVt
ZW50SW5kZXggPSBpbmRleDsKKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBl
LmdldEFycmF5U2l6ZSgpOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9y
IChzaXplX3QgaiA9IDA7IGogPCBmaWVsZHMuc2l6ZSgpOyBqKyspCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAmZmllbGRUeXBlID0gKmZpZWxkc1tq
XS0+dHlwZSgpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nIHVuaWZvcm1OYW1l
ID0gbmFtZSArICJbIiArIHN0cihpKSArICJdLiIgKyBmaWVsZHNbal0tPm5hbWUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgZGVjbGFyZVVuaWZvcm0oZmllbGRUeXBlLCB1bmlmb3JtTmFtZSwgZWxl
bWVudEluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudEluZGV4ICs9IGZpZWxkVHlw
ZS50b3RhbFJlZ2lzdGVyQ291bnQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgZmll
bGRJbmRleCA9IGluZGV4OworCisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZp
ZWxkcy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBU
VHlwZSAmZmllbGRUeXBlID0gKmZpZWxkc1tpXS0+dHlwZSgpOworICAgICAgICAgICAgICAgIGNv
bnN0IFRTdHJpbmcgdW5pZm9ybU5hbWUgPSBuYW1lICsgIi4iICsgZmllbGRzW2ldLT5uYW1lKCk7
CisgICAgICAgICAgICAgICAgZGVjbGFyZVVuaWZvcm0oZmllbGRUeXBlLCB1bmlmb3JtTmFtZSwg
ZmllbGRJbmRleCk7CisgICAgICAgICAgICAgICAgZmllbGRJbmRleCArPSBmaWVsZFR5cGUudG90
YWxSZWdpc3RlckNvdW50KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisK
K0dMZW51bSBPdXRwdXRITFNMOjpnbFZhcmlhYmxlVHlwZShjb25zdCBUVHlwZSAmdHlwZSkKK3sK
KyAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRGbG9hdCkKKyAgICB7CisgICAgICAg
IGlmICh0eXBlLmlzU2NhbGFyKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHTF9G
TE9BVDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0eXBlLmlzVmVjdG9yKCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCh0eXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIEdMX0ZMT0FUX1ZFQzI7CisgICAg
ICAgICAgICAgIGNhc2UgMzogcmV0dXJuIEdMX0ZMT0FUX1ZFQzM7CisgICAgICAgICAgICAgIGNh
c2UgNDogcmV0dXJuIEdMX0ZMT0FUX1ZFQzQ7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodHlw
ZS5pc01hdHJpeCgpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2godHlwZS5nZXROb21p
bmFsU2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBH
TF9GTE9BVF9NQVQyOworICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBHTF9GTE9BVF9NQVQz
OworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBHTF9GTE9BVF9NQVQ0OworICAgICAgICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZS5nZXRC
YXNpY1R5cGUoKSA9PSBFYnRJbnQpCisgICAgeworICAgICAgICBpZiAodHlwZS5pc1NjYWxhcigp
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gR0xfSU5UOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKHR5cGUuaXNWZWN0b3IoKSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dp
dGNoKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
Y2FzZSAyOiByZXR1cm4gR0xfSU5UX1ZFQzI7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJu
IEdMX0lOVF9WRUMzOworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBHTF9JTlRfVkVDNDsK
KyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIGVsc2UgaWYg
KHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0Qm9vbCkKKyAgICB7CisgICAgICAgIGlmICh0eXBl
LmlzU2NhbGFyKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHTF9CT09MOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKHR5cGUuaXNWZWN0b3IoKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgc3dpdGNoKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gR0xfQk9PTF9WRUMyOworICAgICAgICAgICAgICBj
YXNlIDM6IHJldHVybiBHTF9CT09MX1ZFQzM7CisgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJu
IEdMX0JPT0xfVkVDNDsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAg
fQorICAgIGVsc2UgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U2FtcGxlcjJEKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEdMX1NBTVBMRVJfMkQ7CisgICAgfQorICAgIGVsc2UgaWYgKHR5
cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U2FtcGxlckN1YmUpCisgICAgeworICAgICAgICByZXR1
cm4gR0xfU0FNUExFUl9DVUJFOworICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAg
ICByZXR1cm4gR0xfTk9ORTsKK30KKworR0xlbnVtIE91dHB1dEhMU0w6OmdsVmFyaWFibGVQcmVj
aXNpb24oY29uc3QgVFR5cGUgJnR5cGUpCit7CisgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkg
PT0gRWJ0RmxvYXQpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0UHJlY2lzaW9uKCkp
CisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEVicEhpZ2g6ICAgcmV0dXJuIEdMX0hJR0hfRkxP
QVQ7CisgICAgICAgICAgY2FzZSBFYnBNZWRpdW06IHJldHVybiBHTF9NRURJVU1fRkxPQVQ7Cisg
ICAgICAgICAgY2FzZSBFYnBMb3c6ICAgIHJldHVybiBHTF9MT1dfRkxPQVQ7CisgICAgICAgICAg
Y2FzZSBFYnBVbmRlZmluZWQ6CisgICAgICAgICAgICAvLyBTaG91bGQgYmUgZGVmaW5lZCBhcyB0
aGUgZGVmYXVsdCBwcmVjaXNpb24gYnkgdGhlIHBhcnNlcgorICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAodHlwZS5nZXRCYXNp
Y1R5cGUoKSA9PSBFYnRJbnQpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0UHJlY2lz
aW9uKCkpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEVicEhpZ2g6ICAgcmV0dXJuIEdMX0hJ
R0hfSU5UOworICAgICAgICAgIGNhc2UgRWJwTWVkaXVtOiByZXR1cm4gR0xfTUVESVVNX0lOVDsK
KyAgICAgICAgICBjYXNlIEVicExvdzogICAgcmV0dXJuIEdMX0xPV19JTlQ7CisgICAgICAgICAg
Y2FzZSBFYnBVbmRlZmluZWQ6CisgICAgICAgICAgICAvLyBTaG91bGQgYmUgZGVmaW5lZCBhcyB0
aGUgZGVmYXVsdCBwcmVjaXNpb24gYnkgdGhlIHBhcnNlcgorICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBPdGhlciB0eXBlcyAoYm9v
bGVhbiwgc2FtcGxlcikgZG9uJ3QgaGF2ZSBhIHByZWNpc2lvbgorICAgIHJldHVybiBHTF9OT05F
OworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9PdXRwdXRITFNMLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRITFNMLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2FmZDhlOWFkYWIw
MTE3YzQ5OWZiYzcxZWUzZmM5Y2JkMzZiMmRmZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuaApAQCAt
MCwwICsxLDE2NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9PVVRQ
VVRITFNMX0hfCisjZGVmaW5lIENPTVBJTEVSX09VVFBVVEhMU0xfSF8KKworI2luY2x1ZGUgPGxp
c3Q+CisjaW5jbHVkZSA8c2V0PgorI2luY2x1ZGUgPG1hcD4KKworI2RlZmluZSBHTF9BUElDQUxM
CisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250
ZXh0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmgiCisKK25hbWVz
cGFjZSBzaAoreworY2xhc3MgVW5mb2xkU2hvcnRDaXJjdWl0OworCitjbGFzcyBPdXRwdXRITFNM
IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIE91dHB1dEhMU0wo
VFBhcnNlQ29udGV4dCAmY29udGV4dCwgY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJj
ZXMsIFNoU2hhZGVyT3V0cHV0IG91dHB1dFR5cGUpOworICAgIH5PdXRwdXRITFNMKCk7CisKKyAg
ICB2b2lkIG91dHB1dCgpOworCisgICAgVEluZm9TaW5rQmFzZSAmZ2V0Qm9keVN0cmVhbSgpOwor
ICAgIGNvbnN0IEFjdGl2ZVVuaWZvcm1zICZnZXRVbmlmb3JtcygpOworCisgICAgVFN0cmluZyB0
eXBlU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKTsKKyAgICBUU3RyaW5nIHRleHR1cmVTdHJpbmco
Y29uc3QgVFR5cGUgJnR5cGUpOworICAgIHN0YXRpYyBUU3RyaW5nIHF1YWxpZmllclN0cmluZyhU
UXVhbGlmaWVyIHF1YWxpZmllcik7CisgICAgc3RhdGljIFRTdHJpbmcgYXJyYXlTdHJpbmcoY29u
c3QgVFR5cGUgJnR5cGUpOworICAgIHN0YXRpYyBUU3RyaW5nIGluaXRpYWxpemVyKGNvbnN0IFRU
eXBlICZ0eXBlKTsKKyAgICBzdGF0aWMgVFN0cmluZyBkZWNvcmF0ZShjb25zdCBUU3RyaW5nICZz
dHJpbmcpOyAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVwZW5kcyBhbiB1bmRlcnNjb3JlIHRv
IGF2b2lkIG5hbWluZyBjbGFzaGVzCisgICAgc3RhdGljIFRTdHJpbmcgZGVjb3JhdGVVbmlmb3Jt
KGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFR5cGUgJnR5cGUpOworICAgIHN0YXRpYyBU
U3RyaW5nIGRlY29yYXRlRmllbGQoY29uc3QgVFN0cmluZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAm
c3RydWN0dXJlKTsKKworICBwcm90ZWN0ZWQ6CisgICAgdm9pZCBoZWFkZXIoKTsKKworICAgIC8v
IFZpc2l0IEFTVCBub2RlcyBhbmQgb3V0cHV0IHRoZWlyIGNvZGUgdG8gdGhlIGJvZHkgc3RyZWFt
CisgICAgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7CisgICAgdm9pZCB2aXNpdENv
bnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qKTsKKyAgICBib29sIHZpc2l0QmluYXJ5
KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7CisgICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0
IHZpc2l0LCBUSW50ZXJtVW5hcnkqKTsKKyAgICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZp
c2l0LCBUSW50ZXJtU2VsZWN0aW9uKik7CisgICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2
aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOworICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0
LCBUSW50ZXJtTG9vcCopOworICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRl
cm1CcmFuY2gqKTsKKworICAgIHZvaWQgdHJhdmVyc2VTdGF0ZW1lbnRzKFRJbnRlcm1Ob2RlICpu
b2RlKTsKKyAgICBib29sIGlzU2luZ2xlU3RhdGVtZW50KFRJbnRlcm1Ob2RlICpub2RlKTsKKyAg
ICBib29sIGhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxvb3AgKm5vZGUpOworICAgIHZvaWQg
b3V0cHV0VHJpcGxldChWaXNpdCB2aXNpdCwgY29uc3QgVFN0cmluZyAmcHJlU3RyaW5nLCBjb25z
dCBUU3RyaW5nICZpblN0cmluZywgY29uc3QgVFN0cmluZyAmcG9zdFN0cmluZyk7CisgICAgdm9p
ZCBvdXRwdXRMaW5lRGlyZWN0aXZlKGludCBsaW5lKTsKKyAgICBUU3RyaW5nIGFyZ3VtZW50U3Ry
aW5nKGNvbnN0IFRJbnRlcm1TeW1ib2wgKnN5bWJvbCk7CisgICAgaW50IHZlY3RvclNpemUoY29u
c3QgVFR5cGUgJnR5cGUpIGNvbnN0OworCisgICAgdm9pZCBhZGRDb25zdHJ1Y3Rvcihjb25zdCBU
VHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSwgY29uc3QgVEludGVybVNlcXVlbmNlICpw
YXJhbWV0ZXJzKTsKKyAgICBjb25zdCBDb25zdGFudFVuaW9uICp3cml0ZUNvbnN0YW50VW5pb24o
Y29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IENvbnN0YW50VW5pb24gKmNvbnN0VW5pb24pOworCisg
ICAgVFN0cmluZyBzY29wZVN0cmluZyh1bnNpZ25lZCBpbnQgZGVwdGhMaW1pdCk7CisgICAgVFN0
cmluZyBzY29wZWRTdHJ1Y3QoY29uc3QgVFN0cmluZyAmdHlwZU5hbWUpOworICAgIFRTdHJpbmcg
c3RydWN0TG9va3VwKGNvbnN0IFRTdHJpbmcgJnR5cGVOYW1lKTsKKworICAgIFRQYXJzZUNvbnRl
eHQgJm1Db250ZXh0OworICAgIGNvbnN0IFNoU2hhZGVyT3V0cHV0IG1PdXRwdXRUeXBlOworICAg
IFVuZm9sZFNob3J0Q2lyY3VpdCAqbVVuZm9sZFNob3J0Q2lyY3VpdDsKKyAgICBib29sIG1JbnNp
ZGVGdW5jdGlvbjsKKworICAgIC8vIE91dHB1dCBzdHJlYW1zCisgICAgVEluZm9TaW5rQmFzZSBt
SGVhZGVyOworICAgIFRJbmZvU2lua0Jhc2UgbUJvZHk7CisgICAgVEluZm9TaW5rQmFzZSBtRm9v
dGVyOworCisgICAgdHlwZWRlZiBzdGQ6Om1hcDxUU3RyaW5nLCBUSW50ZXJtU3ltYm9sKj4gUmVm
ZXJlbmNlZFN5bWJvbHM7CisgICAgUmVmZXJlbmNlZFN5bWJvbHMgbVJlZmVyZW5jZWRVbmlmb3Jt
czsKKyAgICBSZWZlcmVuY2VkU3ltYm9scyBtUmVmZXJlbmNlZEF0dHJpYnV0ZXM7CisgICAgUmVm
ZXJlbmNlZFN5bWJvbHMgbVJlZmVyZW5jZWRWYXJ5aW5nczsKKworICAgIC8vIFBhcmFtZXRlcnMg
ZGV0ZXJtaW5pbmcgd2hhdCBnb2VzIGluIHRoZSBoZWFkZXIgb3V0cHV0CisgICAgYm9vbCBtVXNl
c1RleHR1cmUyRDsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJEX2JpYXM7CisgICAgYm9vbCBtVXNl
c1RleHR1cmUyRExvZDsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJEUHJvajsKKyAgICBib29sIG1V
c2VzVGV4dHVyZTJEUHJval9iaWFzOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kOwor
ICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZTsKKyAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmVfYmlh
czsKKyAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmVMb2Q7CisgICAgYm9vbCBtVXNlc1RleHR1cmUy
RExvZDA7CisgICAgYm9vbCBtVXNlc1RleHR1cmUyRExvZDBfYmlhczsKKyAgICBib29sIG1Vc2Vz
VGV4dHVyZTJEUHJvakxvZDA7CisgICAgYm9vbCBtVXNlc1RleHR1cmUyRFByb2pMb2QwX2JpYXM7
CisgICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlTG9kMDsKKyAgICBib29sIG1Vc2VzVGV4dHVyZUN1
YmVMb2QwX2JpYXM7CisgICAgYm9vbCBtVXNlc0ZyYWdDb2xvcjsKKyAgICBib29sIG1Vc2VzRnJh
Z0RhdGE7CisgICAgYm9vbCBtVXNlc0RlcHRoUmFuZ2U7CisgICAgYm9vbCBtVXNlc0ZyYWdDb29y
ZDsKKyAgICBib29sIG1Vc2VzUG9pbnRDb29yZDsKKyAgICBib29sIG1Vc2VzRnJvbnRGYWNpbmc7
CisgICAgYm9vbCBtVXNlc1BvaW50U2l6ZTsKKyAgICBib29sIG1Vc2VzRnJhZ0RlcHRoOworICAg
IGJvb2wgbVVzZXNYb3I7CisgICAgYm9vbCBtVXNlc01vZDE7CisgICAgYm9vbCBtVXNlc01vZDJ2
OworICAgIGJvb2wgbVVzZXNNb2QyZjsKKyAgICBib29sIG1Vc2VzTW9kM3Y7CisgICAgYm9vbCBt
VXNlc01vZDNmOworICAgIGJvb2wgbVVzZXNNb2Q0djsKKyAgICBib29sIG1Vc2VzTW9kNGY7Cisg
ICAgYm9vbCBtVXNlc0ZhY2Vmb3J3YXJkMTsKKyAgICBib29sIG1Vc2VzRmFjZWZvcndhcmQyOwor
ICAgIGJvb2wgbVVzZXNGYWNlZm9yd2FyZDM7CisgICAgYm9vbCBtVXNlc0ZhY2Vmb3J3YXJkNDsK
KyAgICBib29sIG1Vc2VzQXRhbjJfMTsKKyAgICBib29sIG1Vc2VzQXRhbjJfMjsKKyAgICBib29s
IG1Vc2VzQXRhbjJfMzsKKyAgICBib29sIG1Vc2VzQXRhbjJfNDsKKyAgICBib29sIG1Vc2VzRGlz
Y2FyZFJld3JpdGluZzsKKworICAgIGludCBtTnVtUmVuZGVyVGFyZ2V0czsKKworICAgIHR5cGVk
ZWYgc3RkOjpzZXQ8VFN0cmluZz4gQ29uc3RydWN0b3JzOworICAgIENvbnN0cnVjdG9ycyBtQ29u
c3RydWN0b3JzOworCisgICAgdHlwZWRlZiBzdGQ6OnNldDxUU3RyaW5nPiBTdHJ1Y3ROYW1lczsK
KyAgICBTdHJ1Y3ROYW1lcyBtU3RydWN0TmFtZXM7CisKKyAgICB0eXBlZGVmIHN0ZDo6bGlzdDxU
U3RyaW5nPiBTdHJ1Y3REZWNsYXJhdGlvbnM7CisgICAgU3RydWN0RGVjbGFyYXRpb25zIG1TdHJ1
Y3REZWNsYXJhdGlvbnM7CisKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPGludD4gU2NvcGVCcmFj
a2V0OworICAgIFNjb3BlQnJhY2tldCBtU2NvcGVCcmFja2V0OworICAgIHVuc2lnbmVkIGludCBt
U2NvcGVEZXB0aDsKKworICAgIGludCBtVW5pcXVlSW5kZXg7ICAgLy8gRm9yIGNyZWF0aW5nIHVu
aXF1ZSBuYW1lcworCisgICAgYm9vbCBtQ29udGFpbnNMb29wRGlzY29udGludWl0eTsKKyAgICBi
b29sIG1PdXRwdXRMb2QwRnVuY3Rpb247CisgICAgYm9vbCBtSW5zaWRlRGlzY29udGludW91c0xv
b3A7CisKKyAgICBUSW50ZXJtU3ltYm9sICptRXhjZXNzaXZlTG9vcEluZGV4OworCisgICAgaW50
IG1Vbmlmb3JtUmVnaXN0ZXI7CisgICAgaW50IG1TYW1wbGVyUmVnaXN0ZXI7CisKKyAgICBUU3Ry
aW5nIHJlZ2lzdGVyU3RyaW5nKFRJbnRlcm1TeW1ib2wgKm9wZXJhbmQpOworICAgIGludCBzYW1w
bGVyUmVnaXN0ZXIoVEludGVybVN5bWJvbCAqc2FtcGxlcik7CisgICAgaW50IHVuaWZvcm1SZWdp
c3RlcihUSW50ZXJtU3ltYm9sICp1bmlmb3JtKTsKKyAgICB2b2lkIGRlY2xhcmVVbmlmb3JtKGNv
bnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5nICZuYW1lLCBpbnQgaW5kZXgpOworICAgIHN0
YXRpYyBHTGVudW0gZ2xWYXJpYWJsZVR5cGUoY29uc3QgVFR5cGUgJnR5cGUpOworICAgIHN0YXRp
YyBHTGVudW0gZ2xWYXJpYWJsZVByZWNpc2lvbihjb25zdCBUVHlwZSAmdHlwZSk7CisKKyAgICBB
Y3RpdmVVbmlmb3JtcyBtQWN0aXZlVW5pZm9ybXM7Cit9OworfQorCisjZW5kaWYgICAvLyBDT01Q
SUxFUl9PVVRQVVRITFNMX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4xYTFlMGQxNDBjNWE2MWViOGQ2ZGUyMWUxOTVmODYzNzAwYTRiOGY3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
UGFyc2VDb250ZXh0LmNwcApAQCAtMCwwICsxLDE2MDIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5oIgorCisjaW5jbHVk
ZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvZ2xzbGFuZy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9Tb3Vy
Y2VMb2NhdGlvbi5oIgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFN1Yi0gdmVjdG9yIGFuZCBt
YXRyaXggZmllbGRzCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vCisvLyBMb29rIGF0IGEgJy4n
IGZpZWxkIHNlbGVjdG9yIHN0cmluZyBhbmQgY2hhbmdlIGl0IGludG8gb2Zmc2V0cworLy8gZm9y
IGEgdmVjdG9yLgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VWZWN0b3JGaWVsZHMoY29u
c3QgVFN0cmluZyYgY29tcFN0cmluZywgaW50IHZlY1NpemUsIFRWZWN0b3JGaWVsZHMmIGZpZWxk
cywgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKK3sKKyAgICBmaWVsZHMubnVtID0gKGludCkgY29t
cFN0cmluZy5zaXplKCk7CisgICAgaWYgKGZpZWxkcy5udW0gPiA0KSB7CisgICAgICAgIGVycm9y
KGxpbmUsICJpbGxlZ2FsIHZlY3RvciBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3Ry
KCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZW51bSB7CisgICAgICAg
IGV4eXp3LAorICAgICAgICBlcmdiYSwKKyAgICAgICAgZXN0cHEKKyAgICB9IGZpZWxkU2V0WzRd
OworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZHMubnVtOyArK2kpIHsKKyAgICAgICAg
c3dpdGNoIChjb21wU3RyaW5nW2ldKSAgeworICAgICAgICBjYXNlICd4JzogCisgICAgICAgICAg
ICBmaWVsZHMub2Zmc2V0c1tpXSA9IDA7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGV4eXp3
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3InOiAKKyAgICAgICAgICAgIGZp
ZWxkcy5vZmZzZXRzW2ldID0gMDsKKyAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXJnYmE7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAncyc6CisgICAgICAgICAgICBmaWVsZHMu
b2Zmc2V0c1tpXSA9IDA7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGVzdHBxOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3knOiAKKyAgICAgICAgICAgIGZpZWxkcy5vZmZz
ZXRzW2ldID0gMTsKKyAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXh5enc7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSAnZyc6IAorICAgICAgICAgICAgZmllbGRzLm9mZnNldHNb
aV0gPSAxOworICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBlcmdiYTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlICd0JzoKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0g
MTsKKyAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXN0cHE7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSAneic6IAorICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAyOwor
ICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBleHl6dzsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlICdiJzogCisgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDI7CisgICAg
ICAgICAgICBmaWVsZFNldFtpXSA9IGVyZ2JhOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgJ3AnOgorICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAyOworICAgICAgICAg
ICAgZmllbGRTZXRbaV0gPSBlc3RwcTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAg
ICAgICAgY2FzZSAndyc6IAorICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAzOworICAg
ICAgICAgICAgZmllbGRTZXRbaV0gPSBleHl6dzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlICdhJzogCisgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDM7CisgICAgICAg
ICAgICBmaWVsZFNldFtpXSA9IGVyZ2JhOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgJ3EnOgorICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAzOworICAgICAgICAgICAg
ZmllbGRTZXRbaV0gPSBlc3RwcTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgdmVjdG9yIGZpZWxkIHNlbGVjdGlv
biIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpZWxkcy5udW07ICsraSkg
eworICAgICAgICBpZiAoZmllbGRzLm9mZnNldHNbaV0gPj0gdmVjU2l6ZSkgeworICAgICAgICAg
ICAgZXJyb3IobGluZSwgInZlY3RvciBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlIiwgIGNv
bXBTdHJpbmcuY19zdHIoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoaSA+IDApIHsKKyAgICAgICAgICAgIGlmIChmaWVsZFNldFtpXSAhPSBm
aWVsZFNldFtpLTFdKSB7CisgICAgICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgLSB2
ZWN0b3IgY29tcG9uZW50IGZpZWxkcyBub3QgZnJvbSB0aGUgc2FtZSBzZXQiLCBjb21wU3RyaW5n
LmNfc3RyKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCisKKy8vCisvLyBMb29r
IGF0IGEgJy4nIGZpZWxkIHNlbGVjdG9yIHN0cmluZyBhbmQgY2hhbmdlIGl0IGludG8gb2Zmc2V0
cworLy8gZm9yIGEgbWF0cml4LgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VNYXRyaXhG
aWVsZHMoY29uc3QgVFN0cmluZyYgY29tcFN0cmluZywgaW50IG1hdFNpemUsIFRNYXRyaXhGaWVs
ZHMmIGZpZWxkcywgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKK3sKKyAgICBmaWVsZHMud2hvbGVS
b3cgPSBmYWxzZTsKKyAgICBmaWVsZHMud2hvbGVDb2wgPSBmYWxzZTsKKyAgICBmaWVsZHMucm93
ID0gLTE7CisgICAgZmllbGRzLmNvbCA9IC0xOworCisgICAgaWYgKGNvbXBTdHJpbmcuc2l6ZSgp
ICE9IDIpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbGVuZ3RoIG9mIG1hdHJpeCBm
aWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCkpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKGNvbXBTdHJpbmdbMF0gPT0gJ18nKSB7CisgICAgICAgIGlm
IChjb21wU3RyaW5nWzFdIDwgJzAnIHx8IGNvbXBTdHJpbmdbMV0gPiAnMycpIHsKKyAgICAgICAg
ICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3Ry
aW5nLmNfc3RyKCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIGZpZWxkcy53aG9sZUNvbCA9IHRydWU7CisgICAgICAgIGZpZWxkcy5jb2wgPSBjb21wU3Ry
aW5nWzFdIC0gJzAnOworICAgIH0gZWxzZSBpZiAoY29tcFN0cmluZ1sxXSA9PSAnXycpIHsKKyAg
ICAgICAgaWYgKGNvbXBTdHJpbmdbMF0gPCAnMCcgfHwgY29tcFN0cmluZ1swXSA+ICczJykgewor
ICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIs
IGNvbXBTdHJpbmcuY19zdHIoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgZmllbGRzLndob2xlUm93ID0gdHJ1ZTsKKyAgICAgICAgZmllbGRzLnJvdyA9
IGNvbXBTdHJpbmdbMF0gLSAnMCc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGNvbXBTdHJp
bmdbMF0gPCAnMCcgfHwgY29tcFN0cmluZ1swXSA+ICczJyB8fAorICAgICAgICAgICAgY29tcFN0
cmluZ1sxXSA8ICcwJyB8fCBjb21wU3RyaW5nWzFdID4gJzMnKSB7CisgICAgICAgICAgICBlcnJv
cihsaW5lLCAiaWxsZWdhbCBtYXRyaXggZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0
cigpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBmaWVs
ZHMucm93ID0gY29tcFN0cmluZ1swXSAtICcwJzsKKyAgICAgICAgZmllbGRzLmNvbCA9IGNvbXBT
dHJpbmdbMV0gLSAnMCc7CisgICAgfQorCisgICAgaWYgKGZpZWxkcy5yb3cgPj0gbWF0U2l6ZSB8
fCBmaWVsZHMuY29sID49IG1hdFNpemUpIHsKKyAgICAgICAgZXJyb3IobGluZSwgIm1hdHJpeCBm
aWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlIiwgY29tcFN0cmluZy5jX3N0cigpKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCisvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLworLy8KKy8vIEVycm9ycworLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLworLy8gVHJh
Y2sgd2hldGhlciBlcnJvcnMgaGF2ZSBvY2N1cnJlZC4KKy8vCit2b2lkIFRQYXJzZUNvbnRleHQ6
OnJlY292ZXIoKQoreworfQorCisvLworLy8gVXNlZCBieSBmbGV4L2Jpc29uIHRvIG91dHB1dCBh
bGwgc3ludGF4IGFuZCBwYXJzaW5nIGVycm9ycy4KKy8vCit2b2lkIFRQYXJzZUNvbnRleHQ6OmVy
cm9yKGNvbnN0IFRTb3VyY2VMb2MmIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciogcmVhc29uLCBjb25zdCBjaGFyKiB0b2tlbiwgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mbykKK3sKKyAgICBwcDo6U291cmNlTG9jYXRpb24g
c3JjTG9jOworICAgIHNyY0xvYy5maWxlID0gbG9jLmZpcnN0X2ZpbGU7CisgICAgc3JjTG9jLmxp
bmUgPSBsb2MuZmlyc3RfbGluZTsKKyAgICBkaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdu
b3N0aWNzOjpQUF9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjTG9jLCByZWFz
b24sIHRva2VuLCBleHRyYUluZm8pOworCit9CisKK3ZvaWQgVFBhcnNlQ29udGV4dDo6d2Fybmlu
Zyhjb25zdCBUU291cmNlTG9jJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciogcmVhc29uLCBjb25zdCBjaGFyKiB0b2tlbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm8pIHsKKyAgICBwcDo6U291cmNlTG9jYXRpb24g
c3JjTG9jOworICAgIHNyY0xvYy5maWxlID0gbG9jLmZpcnN0X2ZpbGU7CisgICAgc3JjTG9jLmxp
bmUgPSBsb2MuZmlyc3RfbGluZTsKKyAgICBkaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdu
b3N0aWNzOjpQUF9XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNMb2MsIHJl
YXNvbiwgdG9rZW4sIGV4dHJhSW5mbyk7Cit9CisKK3ZvaWQgVFBhcnNlQ29udGV4dDo6dHJhY2Uo
Y29uc3QgY2hhciogc3RyKQoreworICAgIGRpYWdub3N0aWNzLndyaXRlRGVidWcoc3RyKTsKK30K
KworLy8KKy8vIFNhbWUgZXJyb3IgbWVzc2FnZSBmb3IgYWxsIHBsYWNlcyBhc3NpZ25tZW50cyBk
b24ndCB3b3JrLgorLy8KK3ZvaWQgVFBhcnNlQ29udGV4dDo6YXNzaWduRXJyb3IoY29uc3QgVFNv
dXJjZUxvYyYgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgbGVmdCwgVFN0cmluZyByaWdo
dCkKK3sKKyAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgZXh0cmFJ
bmZvU3RyZWFtIDw8ICJjYW5ub3QgY29udmVydCBmcm9tICciIDw8IHJpZ2h0IDw8ICInIHRvICci
IDw8IGxlZnQgPDwgIiciOworICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0
cmVhbS5zdHIoKTsKKyAgICBlcnJvcihsaW5lLCAiIiwgb3AsIGV4dHJhSW5mby5jX3N0cigpKTsK
K30KKworLy8KKy8vIFNhbWUgZXJyb3IgbWVzc2FnZSBmb3IgYWxsIHBsYWNlcyB1bmFyeSBvcGVy
YXRpb25zIGRvbid0IHdvcmsuCisvLwordm9pZCBUUGFyc2VDb250ZXh0Ojp1bmFyeU9wRXJyb3Io
Y29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgb3BlcmFuZCkK
K3sKKyAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgZXh0cmFJbmZv
U3RyZWFtIDw8ICJubyBvcGVyYXRpb24gJyIgPDwgb3AgPDwgIicgZXhpc3RzIHRoYXQgdGFrZXMg
YW4gb3BlcmFuZCBvZiB0eXBlICIgPDwgb3BlcmFuZCAKKyAgICAgICAgICAgICAgICAgICAgPDwg
IiAob3IgdGhlcmUgaXMgbm8gYWNjZXB0YWJsZSBjb252ZXJzaW9uKSI7CisgICAgc3RkOjpzdHJp
bmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgIGVycm9yKGxpbmUsICIg
d3Jvbmcgb3BlcmFuZCB0eXBlIiwgb3AsIGV4dHJhSW5mby5jX3N0cigpKTsKK30KKworLy8KKy8v
IFNhbWUgZXJyb3IgbWVzc2FnZSBmb3IgYWxsIGJpbmFyeSBvcGVyYXRpb25zIGRvbid0IHdvcmsu
CisvLwordm9pZCBUUGFyc2VDb250ZXh0OjpiaW5hcnlPcEVycm9yKGNvbnN0IFRTb3VyY2VMb2Mm
IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5nIGxlZnQsIFRTdHJpbmcgcmlnaHQpCit7Cisg
ICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgIGV4dHJhSW5mb1N0cmVh
bSA8PCAibm8gb3BlcmF0aW9uICciIDw8IG9wIDw8ICInIGV4aXN0cyB0aGF0IHRha2VzIGEgbGVm
dC1oYW5kIG9wZXJhbmQgb2YgdHlwZSAnIiA8PCBsZWZ0IAorICAgICAgICAgICAgICAgICAgICA8
PCAiJyBhbmQgYSByaWdodCBvcGVyYW5kIG9mIHR5cGUgJyIgPDwgcmlnaHQgPDwgIicgKG9yIHRo
ZXJlIGlzIG5vIGFjY2VwdGFibGUgY29udmVyc2lvbikiOworICAgIHN0ZDo6c3RyaW5nIGV4dHJh
SW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICBlcnJvcihsaW5lLCAiIHdyb25nIG9w
ZXJhbmQgdHlwZXMgIiwgb3AsIGV4dHJhSW5mby5jX3N0cigpKTsgCit9CisKK2Jvb2wgVFBhcnNl
Q29udGV4dDo6cHJlY2lzaW9uRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUHJl
Y2lzaW9uIHByZWNpc2lvbiwgVEJhc2ljVHlwZSB0eXBlKXsKKyAgICBpZiAoIWNoZWNrc1ByZWNp
c2lvbkVycm9ycykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHN3aXRjaCggdHlwZSApewor
ICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgIGlmKCBwcmVjaXNpb24gPT0gRWJwVW5kZWZpbmVk
ICl7CisgICAgICAgICAgICBlcnJvciggbGluZSwgIk5vIHByZWNpc2lvbiBzcGVjaWZpZWQgZm9y
IChmbG9hdCkiLCAiIiApOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgIGlmKCBwcmVjaXNpb24gPT0g
RWJwVW5kZWZpbmVkICl7CisgICAgICAgICAgICBlcnJvciggbGluZSwgIk5vIHByZWNpc2lvbiBz
cGVjaWZpZWQgKGludCkiLCAiIiApOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vCisvLyBCb3RoIHRlc3QgYW5kIGlmIG5l
Y2Vzc2FyeSwgc3BpdCBvdXQgYW4gZXJyb3IsIHRvIHNlZSBpZiB0aGUgbm9kZSBpcyByZWFsbHkK
Ky8vIGFuIGwtdmFsdWUgdGhhdCBjYW4gYmUgb3BlcmF0ZWQgb24gdGhpcyB3YXkuCisvLworLy8g
UmV0dXJucyB0cnVlIGlmIHRoZSB3YXMgYW4gZXJyb3IuCisvLworYm9vbCBUUGFyc2VDb250ZXh0
OjpsVmFsdWVFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IGNoYXIqIG9w
LCBUSW50ZXJtVHlwZWQqIG5vZGUpCit7CisgICAgVEludGVybVN5bWJvbCogc3ltTm9kZSA9IG5v
ZGUtPmdldEFzU3ltYm9sTm9kZSgpOworICAgIFRJbnRlcm1CaW5hcnkqIGJpbmFyeU5vZGUgPSBu
b2RlLT5nZXRBc0JpbmFyeU5vZGUoKTsKKworICAgIGlmIChiaW5hcnlOb2RlKSB7CisgICAgICAg
IGJvb2wgZXJyb3JSZXR1cm47CisKKyAgICAgICAgc3dpdGNoKGJpbmFyeU5vZGUtPmdldE9wKCkp
IHsKKyAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDoKKyAgICAgICAgY2FzZSBFT3BJbmRleElu
ZGlyZWN0OgorICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3RydWN0OgorICAgICAgICAgICAg
cmV0dXJuIGxWYWx1ZUVycm9yQ2hlY2sobGluZSwgb3AsIGJpbmFyeU5vZGUtPmdldExlZnQoKSk7
CisgICAgICAgIGNhc2UgRU9wVmVjdG9yU3dpenpsZToKKyAgICAgICAgICAgIGVycm9yUmV0dXJu
ID0gbFZhbHVlRXJyb3JDaGVjayhsaW5lLCBvcCwgYmluYXJ5Tm9kZS0+Z2V0TGVmdCgpKTsKKyAg
ICAgICAgICAgIGlmICghZXJyb3JSZXR1cm4pIHsKKyAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0
WzRdID0gezAsMCwwLDB9OworCisgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiByaWdodE5v
ZGUgPSBiaW5hcnlOb2RlLT5nZXRSaWdodCgpOworICAgICAgICAgICAgICAgIFRJbnRlcm1BZ2dy
ZWdhdGUgKmFnZ3JOb2RlID0gcmlnaHROb2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBw
ID0gYWdnck5vZGUtPmdldFNlcXVlbmNlKCkuYmVnaW4oKTsgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgIT0gYWdnck5vZGUtPmdldFNlcXVlbmNlKCku
ZW5kKCk7IHArKykgeworICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWUgPSAoKnApLT5nZXRB
c1R5cGVkKCktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRJQ29uc3QoMCk7CisgICAgICAgICAg
ICAgICAgICAgIG9mZnNldFt2YWx1ZV0rKzsgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAo
b2Zmc2V0W3ZhbHVlXSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKGxpbmUs
ICIgbC12YWx1ZSBvZiBzd2l6emxlIGNhbm5vdCBoYXZlIGR1cGxpY2F0ZSBjb21wb25lbnRzIiwg
b3ApOworCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gCisKKyAgICAgICAg
ICAgIHJldHVybiBlcnJvclJldHVybjsKKyAgICAgICAgZGVmYXVsdDogCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQi
LCBvcCk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisKKyAgICBjb25zdCBjaGFy
KiBzeW1ib2wgPSAwOworICAgIGlmIChzeW1Ob2RlICE9IDApCisgICAgICAgIHN5bWJvbCA9IHN5
bU5vZGUtPmdldFN5bWJvbCgpLmNfc3RyKCk7CisKKyAgICBjb25zdCBjaGFyKiBtZXNzYWdlID0g
MDsKKyAgICBzd2l0Y2ggKG5vZGUtPmdldFF1YWxpZmllcigpKSB7CisgICAgY2FzZSBFdnFDb25z
dDogICAgICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYSBjb25zdCI7ICAgICAgICBicmVh
azsKKyAgICBjYXNlIEV2cUNvbnN0UmVhZE9ubHk6ICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBh
IGNvbnN0IjsgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxQXR0cmlidXRlOiAgICAgIG1lc3Nh
Z2UgPSAiY2FuJ3QgbW9kaWZ5IGFuIGF0dHJpYnV0ZSI7ICAgYnJlYWs7CisgICAgY2FzZSBFdnFV
bmlmb3JtOiAgICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYSB1bmlmb3JtIjsgICAgICBi
cmVhazsKKyAgICBjYXNlIEV2cVZhcnlpbmdJbjogICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlm
eSBhIHZhcnlpbmciOyAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxRnJhZ0Nvb3JkOiAgICAgIG1l
c3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGdsX0ZyYWdDb29yZCI7ICAgYnJlYWs7CisgICAgY2FzZSBF
dnFGcm9udEZhY2luZzogICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgZ2xfRnJvbnRGYWNpbmci
OyBicmVhazsKKyAgICBjYXNlIEV2cVBvaW50Q29vcmQ6ICAgICBtZXNzYWdlID0gImNhbid0IG1v
ZGlmeSBnbF9Qb2ludENvb3JkIjsgIGJyZWFrOworICAgIGRlZmF1bHQ6CisKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gVHlwZSB0aGF0IGNhbid0IGJlIHdyaXR0ZW4gdG8/CisgICAgICAgIC8vCisg
ICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBFYnRT
YW1wbGVyMkQ6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6CisgICAgICAgICAgICBtZXNz
YWdlID0gImNhbid0IG1vZGlmeSBhIHNhbXBsZXIiOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRWJ0Vm9pZDoKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IHZv
aWQiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IAorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobWVzc2FnZSA9PSAwICYmIGJpbmFy
eU5vZGUgPT0gMCAmJiBzeW1Ob2RlID09IDApIHsKKyAgICAgICAgZXJyb3IobGluZSwgIiBsLXZh
bHVlIHJlcXVpcmVkIiwgb3ApOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworCisg
ICAgLy8KKyAgICAvLyBFdmVyeXRoaW5nIGVsc2UgaXMgb2theSwgbm8gZXJyb3IuCisgICAgLy8K
KyAgICBpZiAobWVzc2FnZSA9PSAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLwor
ICAgIC8vIElmIHdlIGdldCBoZXJlLCB3ZSBoYXZlIGFuIGVycm9yIGFuZCBhIG1lc3NhZ2UuCisg
ICAgLy8KKyAgICBpZiAoc3ltTm9kZSkgeworICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRy
YUluZm9TdHJlYW07CisgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiXCIiIDw8IHN5bWJvbCA8
PCAiXCIgKCIgPDwgbWVzc2FnZSA8PCAiKSI7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5m
byA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVl
IHJlcXVpcmVkIiwgb3AsIGV4dHJhSW5mby5jX3N0cigpKTsKKyAgICB9CisgICAgZWxzZSB7Cisg
ICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgZXh0cmFJ
bmZvU3RyZWFtIDw8ICIoIiA8PCBtZXNzYWdlIDw8ICIpIjsKKyAgICAgICAgc3RkOjpzdHJpbmcg
ZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICBlcnJvcihsaW5lLCAi
IGwtdmFsdWUgcmVxdWlyZWQiLCBvcCwgZXh0cmFJbmZvLmNfc3RyKCkpOworICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCisvLworLy8gQm90aCB0ZXN0LCBhbmQgaWYgbmVjZXNzYXJ5IHNw
aXQgb3V0IGFuIGVycm9yLCB0byBzZWUgaWYgdGhlIG5vZGUgaXMgcmVhbGx5CisvLyBhIGNvbnN0
YW50LgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgd2FzIGFuIGVycm9yLgorLy8KK2Jvb2wg
VFBhcnNlQ29udGV4dDo6Y29uc3RFcnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSkKK3sKKyAg
ICBpZiAobm9kZS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImNvbnN0YW50IGV4cHJlc3Npb24g
cmVxdWlyZWQiLCAiIik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8KKy8vIEJvdGggdGVz
dCwgYW5kIGlmIG5lY2Vzc2FyeSBzcGl0IG91dCBhbiBlcnJvciwgdG8gc2VlIGlmIHRoZSBub2Rl
IGlzIHJlYWxseQorLy8gYW4gaW50ZWdlci4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHdh
cyBhbiBlcnJvci4KKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OmludGVnZXJFcnJvckNoZWNrKFRJ
bnRlcm1UeXBlZCogbm9kZSwgY29uc3QgY2hhciogdG9rZW4pCit7CisgICAgaWYgKG5vZGUtPmdl
dEJhc2ljVHlwZSgpID09IEVidEludCAmJiBub2RlLT5nZXROb21pbmFsU2l6ZSgpID09IDEpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImludGVn
ZXIgZXhwcmVzc2lvbiByZXF1aXJlZCIsIHRva2VuKTsKKworICAgIHJldHVybiB0cnVlOworfQor
CisvLworLy8gQm90aCB0ZXN0LCBhbmQgaWYgbmVjZXNzYXJ5IHNwaXQgb3V0IGFuIGVycm9yLCB0
byBzZWUgaWYgd2UgYXJlIGN1cnJlbnRseQorLy8gZ2xvYmFsbHkgc2NvcGVkLgorLy8KKy8vIFJl
dHVybnMgdHJ1ZSBpZiB0aGUgd2FzIGFuIGVycm9yLgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6
Z2xvYmFsRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBib29sIGdsb2JhbCwgY29u
c3QgY2hhciogdG9rZW4pCit7CisgICAgaWYgKGdsb2JhbCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgZXJyb3IobGluZSwgIm9ubHkgYWxsb3dlZCBhdCBnbG9iYWwgc2NvcGUiLCB0b2tl
bik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8KKy8vIEZvciBub3csIGtlZXAgaXQgc2lt
cGxlOiAgaWYgaXQgc3RhcnRzICJnbF8iLCBpdCdzIHJlc2VydmVkLCBpbmRlcGVuZGVudAorLy8g
b2Ygc2NvcGUuICBFeGNlcHQsIGlmIHRoZSBzeW1ib2wgdGFibGUgaXMgYXQgdGhlIGJ1aWx0LWlu
IHB1c2gtbGV2ZWwsCisvLyB3aGljaCBpcyB3aGVuIHdlIGFyZSBwYXJzaW5nIGJ1aWx0LWlucy4K
Ky8vIEFsc28gY2hlY2tzIGZvciAid2ViZ2xfIiBhbmQgIl93ZWJnbF8iIHJlc2VydmVkIGlkZW50
aWZpZXJzIGlmIHBhcnNpbmcgYQorLy8gd2ViZ2wgc2hhZGVyLgorLy8KKy8vIFJldHVybnMgdHJ1
ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCisvLworYm9vbCBUUGFyc2VDb250ZXh0OjpyZXNlcnZl
ZEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRp
ZmllcikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogcmVzZXJ2ZWRFcnJNc2cgPSAicmVzZXJ2
ZWQgYnVpbHQtaW4gbmFtZSI7CisgICAgaWYgKCFzeW1ib2xUYWJsZS5hdEJ1aWx0SW5MZXZlbCgp
KSB7CisgICAgICAgIGlmIChpZGVudGlmaWVyLmNvbXBhcmUoMCwgMywgImdsXyIpID09IDApIHsK
KyAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAiZ2xfIik7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNXZWJHTEJhc2VkU3Bl
YyhzaGFkZXJTcGVjKSkgeworICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuY29tcGFyZSgwLCA2
LCAid2ViZ2xfIikgPT0gMCkgeworICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlc2VydmVk
RXJyTXNnLCAid2ViZ2xfIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5jb21wYXJlKDAsIDcsICJfd2ViZ2xf
IikgPT0gMCkgeworICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAi
X3dlYmdsXyIpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKHNoYWRlclNwZWMgPT0gU0hfQ1NTX1NIQURFUlNfU1BFQyAmJiBpZGVu
dGlmaWVyLmNvbXBhcmUoMCwgNCwgImNzc18iKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgZXJy
b3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJjc3NfIik7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlkZW50aWZpZXIu
ZmluZCgiX18iKSAhPSBUU3RyaW5nOjpucG9zKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAi
aWRlbnRpZmllcnMgY29udGFpbmluZyB0d28gY29uc2VjdXRpdmUgdW5kZXJzY29yZXMgKF9fKSBh
cmUgcmVzZXJ2ZWQgYXMgcG9zc2libGUgZnV0dXJlIGtleXdvcmRzIiwgaWRlbnRpZmllci5jX3N0
cigpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIGZhbHNlOworfQorCisvLworLy8gTWFrZSBzdXJlIHRoZXJlIGlzIGVub3VnaCBkYXRh
IHByb3ZpZGVkIHRvIHRoZSBjb25zdHJ1Y3RvciB0byBidWlsZAorLy8gc29tZXRoaW5nIG9mIHRo
ZSB0eXBlIG9mIHRoZSBjb25zdHJ1Y3Rvci4gIEFsc28gcmV0dXJucyB0aGUgdHlwZSBvZgorLy8g
dGhlIGNvbnN0cnVjdG9yLgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJy
b3IgaW4gY29uc3RydWN0aW9uLgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6Y29uc3RydWN0b3JF
cnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRJbnRlcm1Ob2RlKiBub2RlLCBURnVu
Y3Rpb24mIGZ1bmN0aW9uLCBUT3BlcmF0b3Igb3AsIFRUeXBlKiB0eXBlKQoreworICAgICp0eXBl
ID0gZnVuY3Rpb24uZ2V0UmV0dXJuVHlwZSgpOworCisgICAgYm9vbCBjb25zdHJ1Y3RpbmdNYXRy
aXggPSBmYWxzZTsKKyAgICBzd2l0Y2gob3ApIHsKKyAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6
CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQzOgorICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0NDoK
KyAgICAgICAgY29uc3RydWN0aW5nTWF0cml4ID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDogCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vCisgICAgLy8gTm90ZTog
SXQncyBva2F5IHRvIGhhdmUgdG9vIG1hbnkgY29tcG9uZW50cyBhdmFpbGFibGUsIGJ1dCBub3Qg
b2theSB0byBoYXZlIHVudXNlZAorICAgIC8vIGFyZ3VtZW50cy4gICdmdWxsJyB3aWxsIGdvIHRv
IHRydWUgd2hlbiBlbm91Z2ggYXJncyBoYXZlIGJlZW4gc2Vlbi4gIElmIHdlIGxvb3AKKyAgICAv
LyBhZ2FpbiwgdGhlcmUgaXMgYW4gZXh0cmEgYXJndW1lbnQsIHNvICdvdmVyZnVsbCcgd2lsbCBi
ZWNvbWUgdHJ1ZS4KKyAgICAvLworCisgICAgc2l6ZV90IHNpemUgPSAwOworICAgIGJvb2wgY29u
c3RUeXBlID0gdHJ1ZTsKKyAgICBib29sIGZ1bGwgPSBmYWxzZTsKKyAgICBib29sIG92ZXJGdWxs
ID0gZmFsc2U7CisgICAgYm9vbCBtYXRyaXhJbk1hdHJpeCA9IGZhbHNlOworICAgIGJvb2wgYXJy
YXlBcmcgPSBmYWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uLmdldFBh
cmFtQ291bnQoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IFRQYXJhbWV0ZXImIHBhcmFtID0gZnVu
Y3Rpb24uZ2V0UGFyYW0oaSk7CisgICAgICAgIHNpemUgKz0gcGFyYW0udHlwZS0+Z2V0T2JqZWN0
U2l6ZSgpOworICAgICAgICAKKyAgICAgICAgaWYgKGNvbnN0cnVjdGluZ01hdHJpeCAmJiBwYXJh
bS50eXBlLT5pc01hdHJpeCgpKQorICAgICAgICAgICAgbWF0cml4SW5NYXRyaXggPSB0cnVlOwor
ICAgICAgICBpZiAoZnVsbCkKKyAgICAgICAgICAgIG92ZXJGdWxsID0gdHJ1ZTsKKyAgICAgICAg
aWYgKG9wICE9IEVPcENvbnN0cnVjdFN0cnVjdCAmJiAhdHlwZS0+aXNBcnJheSgpICYmIHNpemUg
Pj0gdHlwZS0+Z2V0T2JqZWN0U2l6ZSgpKQorICAgICAgICAgICAgZnVsbCA9IHRydWU7CisgICAg
ICAgIGlmIChwYXJhbS50eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFDb25zdCkKKyAgICAgICAg
ICAgIGNvbnN0VHlwZSA9IGZhbHNlOworICAgICAgICBpZiAocGFyYW0udHlwZS0+aXNBcnJheSgp
KQorICAgICAgICAgICAgYXJyYXlBcmcgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAoY29u
c3RUeXBlKQorICAgICAgICB0eXBlLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3QpOworCisgICAgaWYg
KHR5cGUtPmlzQXJyYXkoKSAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KHR5cGUtPmdldEFycmF5U2l6
ZSgpKSAhPSBmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCkpIHsKKyAgICAgICAgZXJyb3IobGluZSwg
ImFycmF5IGNvbnN0cnVjdG9yIG5lZWRzIG9uZSBhcmd1bWVudCBwZXIgYXJyYXkgZWxlbWVudCIs
ICJjb25zdHJ1Y3RvciIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAo
YXJyYXlBcmcgJiYgb3AgIT0gRU9wQ29uc3RydWN0U3RydWN0KSB7CisgICAgICAgIGVycm9yKGxp
bmUsICJjb25zdHJ1Y3RpbmcgZnJvbSBhIG5vbi1kZXJlZmVyZW5jZWQgYXJyYXkiLCAiY29uc3Ry
dWN0b3IiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKG1hdHJpeElu
TWF0cml4ICYmICF0eXBlLT5pc0FycmF5KCkpIHsKKyAgICAgICAgaWYgKGZ1bmN0aW9uLmdldFBh
cmFtQ291bnQoKSAhPSAxKSB7CisgICAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBt
YXRyaXggZnJvbSBtYXRyaXggY2FuIG9ubHkgdGFrZSBvbmUgYXJndW1lbnQiLCAiY29uc3RydWN0
b3IiKTsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChvdmVyRnVsbCkgeworICAgICAgICBlcnJvcihsaW5lLCAidG9vIG1hbnkgYXJndW1lbnRzIiwg
ImNvbnN0cnVjdG9yIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBp
ZiAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0ICYmICF0eXBlLT5pc0FycmF5KCkgJiYgdHlwZS0+
Z2V0U3RydWN0KCktPmZpZWxkcygpLnNpemUoKSAhPSBmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCkp
IHsKKyAgICAgICAgZXJyb3IobGluZSwgIk51bWJlciBvZiBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJz
IGRvZXMgbm90IG1hdGNoIHRoZSBudW1iZXIgb2Ygc3RydWN0dXJlIGZpZWxkcyIsICJjb25zdHJ1
Y3RvciIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIXR5cGUtPmlz
TWF0cml4KCkgfHwgIW1hdHJpeEluTWF0cml4KSB7CisgICAgICAgIGlmICgob3AgIT0gRU9wQ29u
c3RydWN0U3RydWN0ICYmIHNpemUgIT0gMSAmJiBzaXplIDwgdHlwZS0+Z2V0T2JqZWN0U2l6ZSgp
KSB8fAorICAgICAgICAgICAgKG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCAmJiBzaXplIDwgdHlw
ZS0+Z2V0T2JqZWN0U2l6ZSgpKSkgeworICAgICAgICAgICAgZXJyb3IobGluZSwgIm5vdCBlbm91
Z2ggZGF0YSBwcm92aWRlZCBmb3IgY29uc3RydWN0aW9uIiwgImNvbnN0cnVjdG9yIik7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFRJbnRlcm1UeXBl
ZCAqdHlwZWQgPSBub2RlID8gbm9kZS0+Z2V0QXNUeXBlZCgpIDogMDsKKyAgICBpZiAodHlwZWQg
PT0gMCkgeworICAgICAgICBlcnJvcihsaW5lLCAiY29uc3RydWN0b3IgYXJndW1lbnQgZG9lcyBu
b3QgaGF2ZSBhIHR5cGUiLCAiY29uc3RydWN0b3IiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIGlmIChvcCAhPSBFT3BDb25zdHJ1Y3RTdHJ1Y3QgJiYgSXNTYW1wbGVyKHR5cGVk
LT5nZXRCYXNpY1R5cGUoKSkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBjb252ZXJ0
IGEgc2FtcGxlciIsICJjb25zdHJ1Y3RvciIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgaWYgKHR5cGVkLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkKSB7CisgICAgICAgIGVy
cm9yKGxpbmUsICJjYW5ub3QgY29udmVydCBhIHZvaWQiLCAiY29uc3RydWN0b3IiKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBUaGlz
IGZ1bmN0aW9uIGNoZWNrcyB0byBzZWUgaWYgYSB2b2lkIHZhcmlhYmxlIGhhcyBiZWVuIGRlY2xh
cmVkIGFuZCByYWlzZSBhbiBlcnJvciBtZXNzYWdlIGZvciBzdWNoIGEgY2FzZQorLy8KKy8vIHJl
dHVybnMgdHJ1ZSBpbiBjYXNlIG9mIGFuIGVycm9yCisvLworYm9vbCBUUGFyc2VDb250ZXh0Ojp2
b2lkRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVu
dGlmaWVyLCBjb25zdCBUUHVibGljVHlwZSYgcHViVHlwZSkKK3sKKyAgICBpZiAocHViVHlwZS50
eXBlID09IEVidFZvaWQpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgdXNlIG9mIHR5
cGUgJ3ZvaWQnIiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfSAKKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gVGhpcyBmdW5jdGlvbiBjaGVja3Mg
dG8gc2VlIGlmIHRoZSBub2RlIChmb3IgdGhlIGV4cHJlc3Npb24pIGNvbnRhaW5zIGEgc2NhbGFy
IGJvb2xlYW4gZXhwcmVzc2lvbiBvciBub3QKKy8vCisvLyByZXR1cm5zIHRydWUgaW4gY2FzZSBv
ZiBhbiBlcnJvcgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6Ym9vbEVycm9yQ2hlY2soY29uc3Qg
VFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVEludGVybVR5cGVkKiB0eXBlKQoreworICAgIGlmICh0
eXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sIHx8IHR5cGUtPmlzQXJyYXkoKSB8fCB0eXBl
LT5pc01hdHJpeCgpIHx8IHR5cGUtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgZXJyb3IobGluZSwg
ImJvb2xlYW4gZXhwcmVzc2lvbiBleHBlY3RlZCIsICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfSAKKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gVGhpcyBmdW5jdGlvbiBjaGVj
a3MgdG8gc2VlIGlmIHRoZSBub2RlIChmb3IgdGhlIGV4cHJlc3Npb24pIGNvbnRhaW5zIGEgc2Nh
bGFyIGJvb2xlYW4gZXhwcmVzc2lvbiBvciBub3QKKy8vCisvLyByZXR1cm5zIHRydWUgaW4gY2Fz
ZSBvZiBhbiBlcnJvcgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6Ym9vbEVycm9yQ2hlY2soY29u
c3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlKQoreworICAgIGlm
IChwVHlwZS50eXBlICE9IEVidEJvb2wgfHwgcFR5cGUuYXJyYXkgfHwgcFR5cGUubWF0cml4IHx8
IChwVHlwZS5zaXplID4gMSkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImJvb2xlYW4gZXhwcmVz
c2lvbiBleHBlY3RlZCIsICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSAKKworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0OjpzYW1wbGVyRXJyb3JDaGVj
ayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUsIGNvbnN0
IGNoYXIqIHJlYXNvbikKK3sKKyAgICBpZiAocFR5cGUudHlwZSA9PSBFYnRTdHJ1Y3QpIHsKKyAg
ICAgICAgaWYgKGNvbnRhaW5zU2FtcGxlcigqcFR5cGUudXNlckRlZikpIHsKKyAgICAgICAgICAg
IGVycm9yKGxpbmUsIHJlYXNvbiwgZ2V0QmFzaWNTdHJpbmcocFR5cGUudHlwZSksICIoc3RydWN0
dXJlIGNvbnRhaW5zIGEgc2FtcGxlcikiKTsKKyAgICAgICAgCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0g
ZWxzZSBpZiAoSXNTYW1wbGVyKHBUeXBlLnR5cGUpKSB7CisgICAgICAgIGVycm9yKGxpbmUsIHJl
YXNvbiwgZ2V0QmFzaWNTdHJpbmcocFR5cGUudHlwZSkpOworCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0Ojpz
dHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRQ
dWJsaWNUeXBlJiBwVHlwZSkKK3sKKyAgICBpZiAoKHBUeXBlLnF1YWxpZmllciA9PSBFdnFWYXJ5
aW5nSW4gfHwgcFR5cGUucXVhbGlmaWVyID09IEV2cVZhcnlpbmdPdXQgfHwgcFR5cGUucXVhbGlm
aWVyID09IEV2cUF0dHJpYnV0ZSkgJiYKKyAgICAgICAgcFR5cGUudHlwZSA9PSBFYnRTdHJ1Y3Qp
IHsKKyAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBiZSB1c2VkIHdpdGggYSBzdHJ1Y3R1cmUi
LCBnZXRRdWFsaWZpZXJTdHJpbmcocFR5cGUucXVhbGlmaWVyKSk7CisgICAgICAgIAorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAocFR5cGUucXVhbGlmaWVyICE9IEV2cVVu
aWZvcm0gJiYgc2FtcGxlckVycm9yQ2hlY2sobGluZSwgcFR5cGUsICJzYW1wbGVycyBtdXN0IGJl
IHVuaWZvcm0iKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1ldGVyU2FtcGxlckVycm9yQ2hlY2soY29uc3Qg
VFNvdXJjZUxvYyYgbGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIGNvbnN0IFRUeXBlJiB0eXBl
KQoreworICAgIGlmICgocXVhbGlmaWVyID09IEV2cU91dCB8fCBxdWFsaWZpZXIgPT0gRXZxSW5P
dXQpICYmIAorICAgICAgICAgICAgIHR5cGUuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0U3RydWN0ICYm
IElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSkgeworICAgICAgICBlcnJvcihsaW5lLCAi
c2FtcGxlcnMgY2Fubm90IGJlIG91dHB1dCBwYXJhbWV0ZXJzIiwgdHlwZS5nZXRCYXNpY1N0cmlu
ZygpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIFRQYXJzZUNvbnRleHQ6OmNvbnRhaW5zU2FtcGxlcihUVHlwZSYgdHlwZSkKK3sK
KyAgICBpZiAoSXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgeworICAg
ICAgICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSB0eXBlLmdldFN0cnVjdCgpLT5maWVsZHMo
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgIGlmIChjb250YWluc1NhbXBsZXIoKmZpZWxkc1tpXS0+dHlwZSgp
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKK30KKworLy8KKy8vIERvIHNpemUgY2hlY2tpbmcgZm9yIGFuIGFycmF5
IHR5cGUncyBzaXplLgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3Iu
CisvLworYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVNpemVFcnJvckNoZWNrKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxpbmUsIFRJbnRlcm1UeXBlZCogZXhwciwgaW50JiBzaXplKQoreworICAgIFRJbnRl
cm1Db25zdGFudFVuaW9uKiBjb25zdGFudCA9IGV4cHItPmdldEFzQ29uc3RhbnRVbmlvbigpOwor
ICAgIGlmIChjb25zdGFudCA9PSAwIHx8IGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRJ
bnQpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImFycmF5IHNpemUgbXVzdCBiZSBhIGNvbnN0YW50
IGludGVnZXIgZXhwcmVzc2lvbiIsICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgc2l6ZSA9IGNvbnN0YW50LT5nZXRJQ29uc3QoMCk7CisKKyAgICBpZiAoc2l6ZSA8PSAw
KSB7CisgICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBp
bnRlZ2VyIiwgIiIpOworICAgICAgICBzaXplID0gMTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLworLy8gU2VlIGlmIHRoaXMgcXVhbGlm
aWVyIGNhbiBiZSBhbiBhcnJheS4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYW4g
ZXJyb3IuCisvLworYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVF1YWxpZmllckVycm9yQ2hlY2so
Y29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFB1YmxpY1R5cGUgdHlwZSkKK3sKKyAgICBpZiAoKHR5
cGUucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSkgfHwgKHR5cGUucXVhbGlmaWVyID09IEV2cUNv
bnN0KSkgeworICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGRlY2xhcmUgYXJyYXlzIG9mIHRo
aXMgcXVhbGlmaWVyIiwgVFR5cGUodHlwZSkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisv
LworLy8gU2VlIGlmIHRoaXMgdHlwZSBjYW4gYmUgYW4gYXJyYXkuCisvLworLy8gUmV0dXJucyB0
cnVlIGlmIHRoZXJlIGlzIGFuIGVycm9yLgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlU
eXBlRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUHVibGljVHlwZSB0eXBlKQor
eworICAgIC8vCisgICAgLy8gQ2FuIHRoZSB0eXBlIGJlIGFuIGFycmF5PworICAgIC8vCisgICAg
aWYgKHR5cGUuYXJyYXkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBkZWNsYXJlIGFy
cmF5cyBvZiBhcnJheXMiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
Ky8vCisvLyBEbyBhbGwgdGhlIHNlbWFudGljIGNoZWNraW5nIGZvciBkZWNsYXJpbmcgYW4gYXJy
YXksIHdpdGggYW5kIAorLy8gd2l0aG91dCBhIHNpemUsIGFuZCBtYWtlIHRoZSByaWdodCBjaGFu
Z2VzIHRvIHRoZSBzeW1ib2wgdGFibGUuCisvLworLy8gc2l6ZSA9PSAwIG1lYW5zIG5vIHNwZWNp
ZmllZCBzaXplLgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCisv
LworYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYg
bGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUgdHlwZSwgVFZhcmlhYmxlKiYg
dmFyaWFibGUpCit7CisgICAgLy8KKyAgICAvLyBEb24ndCBjaGVjayBmb3IgcmVzZXJ2ZWQgd29y
ZCB1c2UgdW50aWwgYWZ0ZXIgd2Uga25vdyBpdCdzIG5vdCBpbiB0aGUgc3ltYm9sIHRhYmxlLAor
ICAgIC8vIGJlY2F1c2UgcmVzZXJ2ZWQgYXJyYXlzIGNhbiBiZSByZWRlY2xhcmVkLgorICAgIC8v
CisKKyAgICBib29sIGJ1aWx0SW4gPSBmYWxzZTsgCisgICAgYm9vbCBzYW1lU2NvcGUgPSBmYWxz
ZTsKKyAgICBUU3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKGlkZW50aWZpZXIsICZi
dWlsdEluLCAmc2FtZVNjb3BlKTsKKyAgICBpZiAoc3ltYm9sID09IDAgfHwgIXNhbWVTY29wZSkg
eworICAgICAgICBpZiAocmVzZXJ2ZWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIpKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgICAgICB2YXJpYWJsZSA9IG5ldyBU
VmFyaWFibGUoJmlkZW50aWZpZXIsIFRUeXBlKHR5cGUpKTsKKworICAgICAgICBpZiAodHlwZS5h
cnJheVNpemUpCisgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldEFycmF5U2l6ZSh0
eXBlLmFycmF5U2l6ZSk7CisKKyAgICAgICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJp
YWJsZSkpIHsKKyAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKKyAgICAgICAgICAgIGVycm9y
KGxpbmUsICJJTlRFUk5BTCBFUlJPUiBpbnNlcnRpbmcgbmV3IHN5bWJvbCIsIGlkZW50aWZpZXIu
Y19zdHIoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSB7CisgICAgICAgIGlmICghIHN5bWJvbC0+aXNWYXJpYWJsZSgpKSB7CisgICAgICAgICAgICBl
cnJvcihsaW5lLCAidmFyaWFibGUgZXhwZWN0ZWQiLCBpZGVudGlmaWVyLmNfc3RyKCkpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICB2YXJpYWJsZSA9IHN0
YXRpY19jYXN0PFRWYXJpYWJsZSo+KHN5bWJvbCk7CisgICAgICAgIGlmICghIHZhcmlhYmxlLT5n
ZXRUeXBlKCkuaXNBcnJheSgpKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAicmVkZWNsYXJp
bmcgbm9uLWFycmF5IGFzIGFycmF5IiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh2YXJpYWJsZS0+Z2V0VHlwZSgp
LmdldEFycmF5U2l6ZSgpID4gMCkgeworICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFy
YXRpb24gb2YgYXJyYXkgd2l0aCBzaXplIiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoISB2YXJp
YWJsZS0+Z2V0VHlwZSgpLnNhbWVFbGVtZW50VHlwZShUVHlwZSh0eXBlKSkpIHsKKyAgICAgICAg
ICAgIGVycm9yKGxpbmUsICJyZWRlY2xhcmF0aW9uIG9mIGFycmF5IHdpdGggYSBkaWZmZXJlbnQg
dHlwZSIsIGlkZW50aWZpZXIuY19zdHIoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICh0eXBlLmFycmF5U2l6ZSkKKyAgICAgICAgICAgIHZhcmlh
YmxlLT5nZXRUeXBlKCkuc2V0QXJyYXlTaXplKHR5cGUuYXJyYXlTaXplKTsKKyAgICB9IAorCisg
ICAgaWYgKHZvaWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIsIHR5cGUpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8KKy8vIEVuZm9yY2Ugbm9u
LWluaXRpYWxpemVyIHR5cGUvcXVhbGlmaWVyIHJ1bGVzLgorLy8KKy8vIFJldHVybnMgdHJ1ZSBp
ZiB0aGVyZSB3YXMgYW4gZXJyb3IuCisvLworYm9vbCBUUGFyc2VDb250ZXh0Ojpub25Jbml0Q29u
c3RFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIs
IFRQdWJsaWNUeXBlJiB0eXBlLCBib29sIGFycmF5KQoreworICAgIGlmICh0eXBlLnF1YWxpZmll
ciA9PSBFdnFDb25zdCkKKyAgICB7CisgICAgICAgIC8vIE1ha2UgdGhlIHF1YWxpZmllciBtYWtl
IHNlbnNlLgorICAgICAgICB0eXBlLnF1YWxpZmllciA9IEV2cVRlbXBvcmFyeTsKKyAgICAgICAg
CisgICAgICAgIGlmIChhcnJheSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IobGluZSwg
ImFycmF5cyBtYXkgbm90IGJlIGRlY2xhcmVkIGNvbnN0YW50IHNpbmNlIHRoZXkgY2Fubm90IGJl
IGluaXRpYWxpemVkIiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIGlmICh0eXBlLmlzU3RydWN0dXJlQ29udGFpbmluZ0FycmF5cygpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBlcnJvcihsaW5lLCAic3RydWN0dXJlcyBjb250YWluaW5nIGFycmF5cyBtYXkg
bm90IGJlIGRlY2xhcmVkIGNvbnN0YW50IHNpbmNlIHRoZXkgY2Fubm90IGJlIGluaXRpYWxpemVk
IiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAg
IHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJ2YXJpYWJsZXMgd2l0aCBxdWFsaWZpZXIgJ2Nv
bnN0JyBtdXN0IGJlIGluaXRpYWxpemVkIiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30K
KworLy8KKy8vIERvIHNlbWFudGljIGNoZWNraW5nIGZvciBhIHZhcmlhYmxlIGRlY2xhcmF0aW9u
IHRoYXQgaGFzIG5vIGluaXRpYWxpemVyLAorLy8gYW5kIHVwZGF0ZSB0aGUgc3ltYm9sIHRhYmxl
LgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCisvLworYm9vbCBU
UGFyc2VDb250ZXh0Ojpub25Jbml0RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBU
U3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSwgVFZhcmlhYmxlKiYgdmFyaWFi
bGUpCit7CisgICAgaWYgKHJlc2VydmVkRXJyb3JDaGVjayhsaW5lLCBpZGVudGlmaWVyKSkKKyAg
ICAgICAgcmVjb3ZlcigpOworCisgICAgdmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCZpZGVudGlm
aWVyLCBUVHlwZSh0eXBlKSk7CisKKyAgICBpZiAoISBzeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlh
YmxlKSkgeworICAgICAgICBlcnJvcihsaW5lLCAicmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdl
dE5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgZGVsZXRlIHZhcmlhYmxlOworICAgICAgICB2YXJp
YWJsZSA9IDA7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICh2b2lkRXJy
b3JDaGVjayhsaW5lLCBpZGVudGlmaWVyLCB0eXBlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1FcnJvckNo
ZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlm
aWVyIHBhcmFtUXVhbGlmaWVyLCBUVHlwZSogdHlwZSkKK3sgICAgCisgICAgaWYgKHF1YWxpZmll
ciAhPSBFdnFDb25zdCAmJiBxdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7CisgICAgICAgIGVy
cm9yKGxpbmUsICJxdWFsaWZpZXIgbm90IGFsbG93ZWQgb24gZnVuY3Rpb24gcGFyYW1ldGVyIiwg
Z2V0UXVhbGlmaWVyU3RyaW5nKHF1YWxpZmllcikpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgaWYgKHF1YWxpZmllciA9PSBFdnFDb25zdCAmJiBwYXJhbVF1YWxpZmllciAhPSBF
dnFJbikgeworICAgICAgICBlcnJvcihsaW5lLCAicXVhbGlmaWVyIG5vdCBhbGxvd2VkIHdpdGgg
IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHF1YWxpZmllciksIGdldFF1YWxpZmllclN0cmluZyhwYXJh
bVF1YWxpZmllcikpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAocXVh
bGlmaWVyID09IEV2cUNvbnN0KQorICAgICAgICB0eXBlLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3RS
ZWFkT25seSk7CisgICAgZWxzZQorICAgICAgICB0eXBlLT5zZXRRdWFsaWZpZXIocGFyYW1RdWFs
aWZpZXIpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRQYXJzZUNvbnRleHQ6OmV4
dGVuc2lvbkVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYg
ZXh0ZW5zaW9uKQoreworICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0QmVoYXZpb3Ig
PSBleHRlbnNpb25CZWhhdmlvcigpOworICAgIFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IGV4dEJlaGF2aW9yLmZpbmQoZXh0ZW5zaW9uLmNfc3RyKCkpOworICAgIGlm
IChpdGVyID09IGV4dEJlaGF2aW9yLmVuZCgpKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJleHRl
bnNpb24iLCBleHRlbnNpb24uY19zdHIoKSwgImlzIG5vdCBzdXBwb3J0ZWQiKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIC8vIEluIEdMU0wgRVMsIGFuIGV4dGVuc2lvbidzIGRl
ZmF1bHQgYmVoYXZpb3IgaXMgImRpc2FibGUiLgorICAgIGlmIChpdGVyLT5zZWNvbmQgPT0gRUJo
RGlzYWJsZSB8fCBpdGVyLT5zZWNvbmQgPT0gRUJoVW5kZWZpbmVkKSB7CisgICAgICAgIGVycm9y
KGxpbmUsICJleHRlbnNpb24iLCBleHRlbnNpb24uY19zdHIoKSwgImlzIGRpc2FibGVkIik7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAoaXRlci0+c2Vjb25kID09IEVCaFdh
cm4pIHsKKyAgICAgICAgd2FybmluZyhsaW5lLCAiZXh0ZW5zaW9uIiwgZXh0ZW5zaW9uLmNfc3Ry
KCksICJpcyBiZWluZyB1c2VkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVFBhcnNlQ29udGV4dDo6c3VwcG9ydHNFeHRlbnNp
b24oY29uc3QgY2hhciogZXh0ZW5zaW9uKQoreworICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlv
ciYgZXh0YmVoYXZpb3IgPSBleHRlbnNpb25CZWhhdmlvcigpOworICAgIFRFeHRlbnNpb25CZWhh
dmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dGJlaGF2aW9yLmZpbmQoZXh0ZW5zaW9uKTsK
KyAgICByZXR1cm4gKGl0ZXIgIT0gZXh0YmVoYXZpb3IuZW5kKCkpOworfQorCitib29sIFRQYXJz
ZUNvbnRleHQ6OmlzRXh0ZW5zaW9uRW5hYmxlZChjb25zdCBjaGFyKiBleHRlbnNpb24pIGNvbnN0
Cit7CisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRiZWhhdmlvciA9IGV4dGVuc2lv
bkJlaGF2aW9yKCk7CisgICAgVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVy
ID0gZXh0YmVoYXZpb3IuZmluZChleHRlbnNpb24pOworCisgICAgaWYgKGl0ZXIgPT0gZXh0YmVo
YXZpb3IuZW5kKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
cmV0dXJuIChpdGVyLT5zZWNvbmQgPT0gRUJoRW5hYmxlIHx8IGl0ZXItPnNlY29uZCA9PSBFQmhS
ZXF1aXJlKTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTm9uLUVycm9y
cy4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8KKy8vIExvb2sgdXAgYSBmdW5j
dGlvbiBuYW1lIGluIHRoZSBzeW1ib2wgdGFibGUsIGFuZCBtYWtlIHN1cmUgaXQgaXMgYSBmdW5j
dGlvbi4KKy8vCisvLyBSZXR1cm4gdGhlIGZ1bmN0aW9uIHN5bWJvbCBpZiBmb3VuZCwgb3RoZXJ3
aXNlIDAuCisvLworY29uc3QgVEZ1bmN0aW9uKiBUUGFyc2VDb250ZXh0OjpmaW5kRnVuY3Rpb24o
Y29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVEZ1bmN0aW9uKiBjYWxsLCBib29sICpidWlsdEluKQor
eworICAgIC8vIEZpcnN0IGZpbmQgYnkgdW5tYW5nbGVkIG5hbWUgdG8gY2hlY2sgd2hldGhlciB0
aGUgZnVuY3Rpb24gbmFtZSBoYXMgYmVlbgorICAgIC8vIGhpZGRlbiBieSBhIHZhcmlhYmxlIG5h
bWUgb3Igc3RydWN0IHR5cGVuYW1lLgorICAgIC8vIElmIGEgZnVuY3Rpb24gaXMgZm91bmQsIGNo
ZWNrIGZvciBvbmUgd2l0aCBhIG1hdGNoaW5nIGFyZ3VtZW50IGxpc3QuCisgICAgY29uc3QgVFN5
bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChjYWxsLT5nZXROYW1lKCksIGJ1aWx0SW4p
OworICAgIGlmIChzeW1ib2wgPT0gMCB8fCBzeW1ib2wtPmlzRnVuY3Rpb24oKSkgeworICAgICAg
ICBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKGNhbGwtPmdldE1hbmdsZWROYW1lKCksIGJ1aWx0
SW4pOworICAgIH0KKworICAgIGlmIChzeW1ib2wgPT0gMCkgeworICAgICAgICBlcnJvcihsaW5l
LCAibm8gbWF0Y2hpbmcgb3ZlcmxvYWRlZCBmdW5jdGlvbiBmb3VuZCIsIGNhbGwtPmdldE5hbWUo
KS5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCFzeW1ib2wt
PmlzRnVuY3Rpb24oKSkgeworICAgICAgICBlcnJvcihsaW5lLCAiZnVuY3Rpb24gbmFtZSBleHBl
Y3RlZCIsIGNhbGwtPmdldE5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFRGdW5jdGlvbio+KHN5bWJvbCk7Cit9
CisKKy8vCisvLyBJbml0aWFsaXplcnMgc2hvdyB1cCBpbiBzZXZlcmFsIHBsYWNlcyBpbiB0aGUg
Z3JhbW1hci4gIEhhdmUgb25lIHNldCBvZgorLy8gY29kZSB0byBoYW5kbGUgdGhlbSBoZXJlLgor
Ly8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6ZXhlY3V0ZUluaXRpYWxpemVyKGNvbnN0IFRTb3VyY2VM
b2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiBwVHlwZSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluaXRpYWxp
emVyLCBUSW50ZXJtTm9kZSomIGludGVybU5vZGUsIFRWYXJpYWJsZSogdmFyaWFibGUpCit7Cisg
ICAgVFR5cGUgdHlwZSA9IFRUeXBlKHBUeXBlKTsKKworICAgIGlmICh2YXJpYWJsZSA9PSAwKSB7
CisgICAgICAgIGlmIChyZXNlcnZlZEVycm9yQ2hlY2sobGluZSwgaWRlbnRpZmllcikpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBpZiAodm9pZEVycm9yQ2hlY2sobGluZSwg
aWRlbnRpZmllciwgcFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gYWRkIHZhcmlhYmxlIHRvIHN5bWJvbCB0YWJsZQorICAgICAgICAvLwor
ICAgICAgICB2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50aWZpZXIsIHR5cGUpOworICAg
ICAgICBpZiAoISBzeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgeworICAgICAgICAgICAg
ZXJyb3IobGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIC8vIGRvbid0IGRlbGV0ZSB2
YXJpYWJsZSwgaXQncyB1c2VkIGJ5IGVycm9yIHJlY292ZXJ5LCBhbmQgdGhlIHBvb2wgCisgICAg
ICAgICAgICAvLyBwb3Agd2lsbCB0YWtlIGNhcmUgb2YgdGhlIG1lbW9yeQorICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8KKyAgICAvLyBpZGVudGlmaWVyIG11c3QgYmUgb2YgdHlwZSBjb25zdGFu
dCwgYSBnbG9iYWwsIG9yIGEgdGVtcG9yYXJ5CisgICAgLy8KKyAgICBUUXVhbGlmaWVyIHF1YWxp
ZmllciA9IHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCk7CisgICAgaWYgKChxdWFs
aWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSAmJiAocXVhbGlmaWVyICE9IEV2cUdsb2JhbCkgJiYgKHF1
YWxpZmllciAhPSBFdnFDb25zdCkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgIiBjYW5ub3QgaW5p
dGlhbGl6ZSB0aGlzIHR5cGUgb2YgcXVhbGlmaWVyICIsIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0
UXVhbGlmaWVyU3RyaW5nKCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgLy8K
KyAgICAvLyB0ZXN0IGZvciBhbmQgcHJvcGFnYXRlIGNvbnN0YW50CisgICAgLy8KKworICAgIGlm
IChxdWFsaWZpZXIgPT0gRXZxQ29uc3QpIHsKKyAgICAgICAgaWYgKHF1YWxpZmllciAhPSBpbml0
aWFsaXplci0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpKSB7CisgICAgICAgICAgICBzdGQ6OnN0
cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0g
PDwgIiciIDw8IHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiJyI7
CisgICAgICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3Ry
KCk7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiIGFzc2lnbmluZyBub24tY29uc3RhbnQgdG8i
LCAiPSIsIGV4dHJhSW5mby5jX3N0cigpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBl
KCkuc2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAodHlwZSAhPSBpbml0aWFsaXplci0+Z2V0VHlwZSgpKSB7
CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiIG5vbi1tYXRjaGluZyB0eXBlcyBmb3IgY29uc3Qg
aW5pdGlhbGl6ZXIgIiwgCisgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRR
dWFsaWZpZXJTdHJpbmcoKSk7CisgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldFF1
YWxpZmllcihFdnFUZW1wb3JhcnkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGluaXRpYWxpemVyLT5nZXRBc0NvbnN0YW50VW5pb24oKSkgeyAKKyAg
ICAgICAgICAgIHZhcmlhYmxlLT5zaGFyZUNvbnN0UG9pbnRlcihpbml0aWFsaXplci0+Z2V0QXND
b25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCkpOworICAgICAgICB9IGVsc2Ug
aWYgKGluaXRpYWxpemVyLT5nZXRBc1N5bWJvbE5vZGUoKSkgeworICAgICAgICAgICAgY29uc3Qg
VFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChpbml0aWFsaXplci0+Z2V0QXNTeW1i
b2xOb2RlKCktPmdldFN5bWJvbCgpKTsKKyAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSogdFZh
ciA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSo+KHN5bWJvbCk7CisKKyAgICAgICAgICAg
IENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSB0VmFyLT5nZXRDb25zdFBvaW50ZXIoKTsKKyAg
ICAgICAgICAgIHZhcmlhYmxlLT5zaGFyZUNvbnN0UG9pbnRlcihjb25zdEFycmF5KTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVh
bTsKKyAgICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiJyIgPDwgdmFyaWFibGUtPmdldFR5
cGUoKS5nZXRDb21wbGV0ZVN0cmluZygpIDw8ICInIjsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5n
IGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGVycm9yKGxp
bmUsICIgY2Fubm90IGFzc2lnbiB0byIsICI9IiwgZXh0cmFJbmZvLmNfc3RyKCkpOworICAgICAg
ICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5zZXRRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorIAorICAgIGlmIChxdWFs
aWZpZXIgIT0gRXZxQ29uc3QpIHsKKyAgICAgICAgVEludGVybVN5bWJvbCogaW50ZXJtU3ltYm9s
ID0gaW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwgdmFyaWFi
bGUtPmdldE5hbWUoKSwgdmFyaWFibGUtPmdldFR5cGUoKSwgbGluZSk7CisgICAgICAgIGludGVy
bU5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQXNzaWduKEVPcEluaXRpYWxpemUsIGludGVybVN5bWJv
bCwgaW5pdGlhbGl6ZXIsIGxpbmUpOworICAgICAgICBpZiAoaW50ZXJtTm9kZSA9PSAwKSB7Cisg
ICAgICAgICAgICBhc3NpZ25FcnJvcihsaW5lLCAiPSIsIGludGVybVN5bWJvbC0+Z2V0Q29tcGxl
dGVTdHJpbmcoKSwgaW5pdGlhbGl6ZXItPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAgICAgIGludGVybU5v
ZGUgPSAwOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRQYXJzZUNvbnRleHQ6OmFy
ZUFsbENoaWxkQ29uc3QoVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUpCit7CisgICAgQVNTRVJU
KGFnZ3JOb2RlICE9IE5VTEwpOworICAgIGlmICghYWdnck5vZGUtPmlzQ29uc3RydWN0b3IoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBhbGxDb25zdGFudCA9IHRydWU7CisK
KyAgICAvLyBjaGVjayBpZiBhbGwgdGhlIGNoaWxkIG5vZGVzIGFyZSBjb25zdGFudHMgc28gdGhh
dCB0aGV5IGNhbiBiZSBpbnNlcnRlZCBpbnRvIAorICAgIC8vIHRoZSBwYXJlbnQgbm9kZQorICAg
IFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2UgPSBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKSA7Cisg
ICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHAgPSBzZXF1ZW5jZS5iZWdpbigpOyBw
ICE9IHNlcXVlbmNlLmVuZCgpOyArK3ApIHsKKyAgICAgICAgaWYgKCEoKnApLT5nZXRBc1R5cGVk
KCktPmdldEFzQ29uc3RhbnRVbmlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHJldHVybiBhbGxDb25zdGFudDsKK30KKworLy8gVGhpcyBmdW5jdGlvbiBpcyB1
c2VkIHRvIHRlc3QgZm9yIHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgcGFyYW1ldGVycyBwYXNzZWQg
dG8gdmFyaW91cyBjb25zdHJ1Y3RvciBmdW5jdGlvbnMKKy8vIGFuZCBhbHNvIGNvbnZlcnQgdGhl
bSB0byB0aGUgcmlnaHQgZGF0YXR5cGUgaWYgaXQgaXMgYWxsb3dlZCBhbmQgcmVxdWlyZWQuIAor
Ly8KKy8vIFJldHVybnMgMCBmb3IgYW4gZXJyb3Igb3IgdGhlIGNvbnN0cnVjdGVkIG5vZGUgKGFn
Z3JlZ2F0ZSBvciB0eXBlZCkgZm9yIG5vIGVycm9yLgorLy8KK1RJbnRlcm1UeXBlZCogVFBhcnNl
Q29udGV4dDo6YWRkQ29uc3RydWN0b3IoVEludGVybU5vZGUqIG5vZGUsIGNvbnN0IFRUeXBlKiB0
eXBlLCBUT3BlcmF0b3Igb3AsIFRGdW5jdGlvbiogZm5DYWxsLCBjb25zdCBUU291cmNlTG9jJiBs
aW5lKQoreworICAgIGlmIChub2RlID09IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgVElu
dGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUgPSBub2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAgIAor
ICAgIFRGaWVsZExpc3Q6OmNvbnN0X2l0ZXJhdG9yIG1lbWJlckZpZWxkczsKKyAgICBpZiAob3Ag
PT0gRU9wQ29uc3RydWN0U3RydWN0KQorICAgICAgICBtZW1iZXJGaWVsZHMgPSB0eXBlLT5nZXRT
dHJ1Y3QoKS0+ZmllbGRzKCkuYmVnaW4oKTsKKyAgICAKKyAgICBUVHlwZSBlbGVtZW50VHlwZSA9
ICp0eXBlOworICAgIGlmICh0eXBlLT5pc0FycmF5KCkpCisgICAgICAgIGVsZW1lbnRUeXBlLmNs
ZWFyQXJyYXluZXNzKCk7CisKKyAgICBib29sIHNpbmdsZUFyZzsKKyAgICBpZiAoYWdnck5vZGUp
IHsKKyAgICAgICAgaWYgKGFnZ3JOb2RlLT5nZXRPcCgpICE9IEVPcE51bGwgfHwgYWdnck5vZGUt
PmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDEpCisgICAgICAgICAgICBzaW5nbGVBcmcgPSB0cnVl
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBzaW5nbGVBcmcgPSBmYWxzZTsKKyAgICB9IGVs
c2UKKyAgICAgICAgc2luZ2xlQXJnID0gdHJ1ZTsKKworICAgIFRJbnRlcm1UeXBlZCAqbmV3Tm9k
ZTsKKyAgICBpZiAoc2luZ2xlQXJnKSB7CisgICAgICAgIC8vIElmIHN0cnVjdHVyZSBjb25zdHJ1
Y3RvciBvciBhcnJheSBjb25zdHJ1Y3RvciBpcyBiZWluZyBjYWxsZWQgCisgICAgICAgIC8vIGZv
ciBvbmx5IG9uZSBwYXJhbWV0ZXIgaW5zaWRlIHRoZSBzdHJ1Y3R1cmUsIHdlIG5lZWQgdG8gY2Fs
bCBjb25zdHJ1Y3RTdHJ1Y3QgZnVuY3Rpb24gb25jZS4KKyAgICAgICAgaWYgKHR5cGUtPmlzQXJy
YXkoKSkKKyAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RTdHJ1Y3Qobm9kZSwgJmVsZW1l
bnRUeXBlLCAxLCBub2RlLT5nZXRMaW5lKCksIGZhbHNlKTsKKyAgICAgICAgZWxzZSBpZiAob3Ag
PT0gRU9wQ29uc3RydWN0U3RydWN0KQorICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdFN0
cnVjdChub2RlLCAoKm1lbWJlckZpZWxkcyktPnR5cGUoKSwgMSwgbm9kZS0+Z2V0TGluZSgpLCBm
YWxzZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RCdWls
dEluKHR5cGUsIG9wLCBub2RlLCBub2RlLT5nZXRMaW5lKCksIGZhbHNlKTsKKworICAgICAgICBp
ZiAobmV3Tm9kZSAmJiBuZXdOb2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpKSB7CisgICAgICAgICAgICBU
SW50ZXJtVHlwZWQqIGNvbnN0Q29uc3RydWN0b3IgPSBmb2xkQ29uc3RDb25zdHJ1Y3RvcihuZXdO
b2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpLCAqdHlwZSk7CisgICAgICAgICAgICBpZiAoY29uc3RDb25z
dHJ1Y3RvcikKKyAgICAgICAgICAgICAgICByZXR1cm4gY29uc3RDb25zdHJ1Y3RvcjsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBuZXdOb2RlOworICAgIH0KKyAgICAKKyAgICAvLworICAg
IC8vIEhhbmRsZSBsaXN0IG9mIGFyZ3VtZW50cy4KKyAgICAvLworICAgIFRJbnRlcm1TZXF1ZW5j
ZSAmc2VxdWVuY2VWZWN0b3IgPSBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKSA7ICAgIC8vIFN0b3Jl
cyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0b3IK
KyAgICAvLyBpZiB0aGUgc3RydWN0dXJlIGNvbnN0cnVjdG9yIGNvbnRhaW5zIG1vcmUgdGhhbiBv
bmUgcGFyYW1ldGVyLCB0aGVuIGNvbnN0cnVjdAorICAgIC8vIGVhY2ggcGFyYW1ldGVyCisgICAg
CisgICAgaW50IHBhcmFtQ291bnQgPSAwOyAgLy8ga2VlcHMgYSB0cmFjayBvZiB0aGUgY29uc3Ry
dWN0b3IgcGFyYW1ldGVyIG51bWJlciBiZWluZyBjaGVja2VkICAgIAorICAgIAorICAgIC8vIGZv
ciBlYWNoIHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0b3IgY2FsbCwgY2hlY2sgdG8gc2VlIGlm
IHRoZSByaWdodCB0eXBlIGlzIHBhc3NlZCBvciBjb252ZXJ0IHRoZW0gCisgICAgLy8gdG8gdGhl
IHJpZ2h0IHR5cGUgaWYgcG9zc2libGUgKGFuZCBhbGxvd2VkKS4KKyAgICAvLyBmb3Igc3RydWN0
dXJlIGNvbnN0cnVjdG9ycywganVzdCBjaGVjayBpZiB0aGUgcmlnaHQgdHlwZSBpcyBwYXNzZWQs
IG5vIGNvbnZlcnNpb24gaXMgYWxsb3dlZC4KKyAgICAKKyAgICBmb3IgKFRJbnRlcm1TZXF1ZW5j
ZTo6aXRlcmF0b3IgcCA9IHNlcXVlbmNlVmVjdG9yLmJlZ2luKCk7IAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwICE9IHNlcXVlbmNlVmVjdG9yLmVuZCgpOyBwKyssIHBhcmFt
Q291bnQrKykgeworICAgICAgICBpZiAodHlwZS0+aXNBcnJheSgpKQorICAgICAgICAgICAgbmV3
Tm9kZSA9IGNvbnN0cnVjdFN0cnVjdCgqcCwgJmVsZW1lbnRUeXBlLCBwYXJhbUNvdW50KzEsIG5v
ZGUtPmdldExpbmUoKSwgdHJ1ZSk7CisgICAgICAgIGVsc2UgaWYgKG9wID09IEVPcENvbnN0cnVj
dFN0cnVjdCkKKyAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RTdHJ1Y3QoKnAsIG1lbWJl
ckZpZWxkc1twYXJhbUNvdW50XS0+dHlwZSgpLCBwYXJhbUNvdW50KzEsIG5vZGUtPmdldExpbmUo
KSwgdHJ1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RC
dWlsdEluKHR5cGUsIG9wLCAqcCwgbm9kZS0+Z2V0TGluZSgpLCB0cnVlKTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChuZXdOb2RlKSB7CisgICAgICAgICAgICAqcCA9IG5ld05vZGU7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBUSW50ZXJtVHlwZWQqIGNvbnN0cnVjdG9yID0gaW50ZXJtZWRpYXRl
LnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKGFnZ3JOb2RlLCBvcCwgbGluZSk7CisgICAgVEludGVybVR5
cGVkKiBjb25zdENvbnN0cnVjdG9yID0gZm9sZENvbnN0Q29uc3RydWN0b3IoY29uc3RydWN0b3It
PmdldEFzQWdncmVnYXRlKCksICp0eXBlKTsKKyAgICBpZiAoY29uc3RDb25zdHJ1Y3RvcikKKyAg
ICAgICAgcmV0dXJuIGNvbnN0Q29uc3RydWN0b3I7CisKKyAgICByZXR1cm4gY29uc3RydWN0b3I7
Cit9CisKK1RJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6Zm9sZENvbnN0Q29uc3RydWN0b3Io
VEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUsIGNvbnN0IFRUeXBlJiB0eXBlKQoreworICAgIGJv
b2wgY2FuQmVGb2xkZWQgPSBhcmVBbGxDaGlsZENvbnN0KGFnZ3JOb2RlKTsKKyAgICBhZ2dyTm9k
ZS0+c2V0VHlwZSh0eXBlKTsKKyAgICBpZiAoY2FuQmVGb2xkZWQpIHsKKyAgICAgICAgYm9vbCBy
ZXR1cm5WYWwgPSBmYWxzZTsKKyAgICAgICAgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uW3R5cGUuZ2V0T2JqZWN0U2l6ZSgpXTsKKyAgICAgICAgaWYgKGFnZ3JO
b2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAxKSAgeworICAgICAgICAgICAgcmV0dXJuVmFs
ID0gaW50ZXJtZWRpYXRlLnBhcnNlQ29uc3RUcmVlKGFnZ3JOb2RlLT5nZXRMaW5lKCksIGFnZ3JO
b2RlLCB1bmlvbkFycmF5LCBhZ2dyTm9kZS0+Z2V0T3AoKSwgc3ltYm9sVGFibGUsICB0eXBlLCB0
cnVlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVyblZhbCA9
IGludGVybWVkaWF0ZS5wYXJzZUNvbnN0VHJlZShhZ2dyTm9kZS0+Z2V0TGluZSgpLCBhZ2dyTm9k
ZSwgdW5pb25BcnJheSwgYWdnck5vZGUtPmdldE9wKCksIHN5bWJvbFRhYmxlLCAgdHlwZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHJldHVyblZhbCkKKyAgICAgICAgICAgIHJldHVybiAwOwor
CisgICAgICAgIHJldHVybiBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5
LCB0eXBlLCBhZ2dyTm9kZS0+Z2V0TGluZSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30K
KworLy8gRnVuY3Rpb24gZm9yIGNvbnN0cnVjdG9yIGltcGxlbWVudGF0aW9uLiBDYWxscyBhZGRV
bmFyeU1hdGggd2l0aCBhcHByb3ByaWF0ZSBFT3AgdmFsdWUKKy8vIGZvciB0aGUgcGFyYW1ldGVy
IHRvIHRoZSBjb25zdHJ1Y3RvciAocGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24pLiBFc3NlbnRpYWxs
eSwgaXQgY29udmVydHMKKy8vIHRoZSBwYXJhbWV0ZXIgdHlwZXMgY29ycmVjdGx5LiBJZiBhIGNv
bnN0cnVjdG9yIGV4cGVjdHMgYW4gaW50IChsaWtlIGl2ZWMyKSBhbmQgaXMgcGFzc2VkIGEgCisv
LyBmbG9hdCwgdGhlbiBmbG9hdCBpcyBjb252ZXJ0ZWQgdG8gaW50LgorLy8KKy8vIFJldHVybnMg
MCBmb3IgYW4gZXJyb3Igb3IgdGhlIGNvbnN0cnVjdGVkIG5vZGUuCisvLworVEludGVybVR5cGVk
KiBUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RCdWlsdEluKGNvbnN0IFRUeXBlKiB0eXBlLCBUT3Bl
cmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBub2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lLCBib29s
IHN1YnNldCkKK3sKKyAgICBUSW50ZXJtVHlwZWQqIG5ld05vZGU7CisgICAgVE9wZXJhdG9yIGJh
c2ljT3A7CisKKyAgICAvLworICAgIC8vIEZpcnN0LCBjb252ZXJ0IHR5cGVzIGFzIG5lZWRlZC4K
KyAgICAvLworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzI6Cisg
ICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMzOgorICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjNDoKKyAg
ICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQzOgorICAg
IGNhc2UgRU9wQ29uc3RydWN0TWF0NDoKKyAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OgorICAg
ICAgICBiYXNpY09wID0gRU9wQ29uc3RydWN0RmxvYXQ7CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSBFT3BDb25zdHJ1Y3RJVmVjMjoKKyAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMzOgorICAg
IGNhc2UgRU9wQ29uc3RydWN0SVZlYzQ6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6CisgICAg
ICAgIGJhc2ljT3AgPSBFT3BDb25zdHJ1Y3RJbnQ7CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RCVmVjMjoKKyAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMzOgorICAgIGNh
c2UgRU9wQ29uc3RydWN0QlZlYzQ6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29sOgorICAgICAg
ICBiYXNpY09wID0gRU9wQ29uc3RydWN0Qm9vbDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZh
dWx0OgorICAgICAgICBlcnJvcihsaW5lLCAidW5zdXBwb3J0ZWQgY29uc3RydWN0aW9uIiwgIiIp
OworICAgICAgICByZWNvdmVyKCk7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIG5l
d05vZGUgPSBpbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKGJhc2ljT3AsIG5vZGUsIG5vZGUtPmdl
dExpbmUoKSwgc3ltYm9sVGFibGUpOworICAgIGlmIChuZXdOb2RlID09IDApIHsKKyAgICAgICAg
ZXJyb3IobGluZSwgImNhbid0IGNvbnZlcnQiLCAiY29uc3RydWN0b3IiKTsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBOb3csIGlmIHRoZXJlIHN0aWxsIGlzbid0
IGFuIG9wZXJhdGlvbiB0byBkbyB0aGUgY29uc3RydWN0aW9uLCBhbmQgd2UgbmVlZCBvbmUsIGFk
ZCBvbmUuCisgICAgLy8KKyAgICAKKyAgICAvLyBPdGhlcndpc2UsIHNraXAgb3V0IGVhcmx5Lgor
ICAgIGlmIChzdWJzZXQgfHwgKG5ld05vZGUgIT0gbm9kZSAmJiBuZXdOb2RlLT5nZXRUeXBlKCkg
PT0gKnR5cGUpKQorICAgICAgICByZXR1cm4gbmV3Tm9kZTsKKworICAgIC8vIHNldEFnZ3JlZ2F0
ZU9wZXJhdG9yIHdpbGwgaW5zZXJ0IGEgbmV3IG5vZGUgZm9yIHRoZSBjb25zdHJ1Y3RvciwgYXMg
bmVlZGVkLgorICAgIHJldHVybiBpbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IobmV3
Tm9kZSwgb3AsIGxpbmUpOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIHRlc3RzIGZvciB0aGUgdHlw
ZSBvZiB0aGUgcGFyYW1ldGVycyB0byB0aGUgc3RydWN0dXJlcyBjb25zdHJ1Y3RvcnMuIFJhaXNl
cworLy8gYW4gZXJyb3IgbWVzc2FnZSBpZiB0aGUgZXhwZWN0ZWQgdHlwZSBkb2VzIG5vdCBtYXRj
aCB0aGUgcGFyYW1ldGVyIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IuCisvLworLy8gUmV0dXJu
cyAwIGZvciBhbiBlcnJvciBvciB0aGUgaW5wdXQgbm9kZSBpdHNlbGYgaWYgdGhlIGV4cGVjdGVk
IGFuZCB0aGUgZ2l2ZW4gcGFyYW1ldGVyIHR5cGVzIG1hdGNoLgorLy8KK1RJbnRlcm1UeXBlZCog
VFBhcnNlQ29udGV4dDo6Y29uc3RydWN0U3RydWN0KFRJbnRlcm1Ob2RlKiBub2RlLCBUVHlwZSog
dHlwZSwgaW50IHBhcmFtQ291bnQsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGJvb2wgc3Vic2V0
KQoreworICAgIGlmICgqdHlwZSA9PSBub2RlLT5nZXRBc1R5cGVkKCktPmdldFR5cGUoKSkgewor
ICAgICAgICBpZiAoc3Vic2V0KQorICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmdldEFzVHlwZWQo
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIGludGVybWVkaWF0ZS5zZXRBZ2dy
ZWdhdGVPcGVyYXRvcihub2RlLT5nZXRBc1R5cGVkKCksIEVPcENvbnN0cnVjdFN0cnVjdCwgbGlu
ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3Ry
ZWFtOworICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImNhbm5vdCBjb252ZXJ0IHBhcmFtZXRl
ciAiIDw8IHBhcmFtQ291bnQgCisgICAgICAgICAgICAgICAgICAgICAgICA8PCAiIGZyb20gJyIg
PDwgbm9kZS0+Z2V0QXNUeXBlZCgpLT5nZXRUeXBlKCkuZ2V0QmFzaWNTdHJpbmcoKQorICAgICAg
ICAgICAgICAgICAgICAgICAgPDwgIicgdG8gJyIgPDwgdHlwZS0+Z2V0QmFzaWNTdHJpbmcoKSA8
PCAiJyI7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5z
dHIoKTsKKyAgICAgICAgZXJyb3IobGluZSwgIiIsICJjb25zdHJ1Y3RvciIsIGV4dHJhSW5mby5j
X3N0cigpKTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKworICAgIHJldHVybiAwOworfQor
CisvLworLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0cmVlIHJlcHJlc2VudGF0aW9uIGZv
ciB0aGUgdmVjdG9yIGZpZWxkKHMpIGJlaW5nIGFjY2Vzc2VkIGZyb20gY29udGFudCB2ZWN0b3Iu
CisvLyBJZiBvbmx5IG9uZSBjb21wb25lbnQgb2YgdmVjdG9yIGlzIGFjY2Vzc2VkICh2Lnggb3Ig
dlswXSB3aGVyZSB2IGlzIGEgY29udGFudCB2ZWN0b3IpLCB0aGVuIGEgY29udGFudCBub2RlIGlz
CisvLyByZXR1cm5lZCwgZWxzZSBhbiBhZ2dyZWdhdGUgbm9kZSBpcyByZXR1cm5lZCAoZm9yIHYu
eHkpLiBUaGUgaW5wdXQgdG8gdGhpcyBmdW5jdGlvbiBjb3VsZCBlaXRoZXIgYmUgdGhlIHN5bWJv
bAorLy8gbm9kZSBvciBpdCBjb3VsZCBiZSB0aGUgaW50ZXJtZWRpYXRlIHRyZWUgcmVwcmVzZW50
YXRpb24gb2YgYWNjZXNzaW5nIGZpZWxkcyBpbiBhIGNvbnN0YW50IHN0cnVjdHVyZSBvciBjb2x1
bW4gb2YgCisvLyBhIGNvbnN0YW50IG1hdHJpeC4KKy8vCitUSW50ZXJtVHlwZWQqIFRQYXJzZUNv
bnRleHQ6OmFkZENvbnN0VmVjdG9yTm9kZShUVmVjdG9yRmllbGRzJiBmaWVsZHMsIFRJbnRlcm1U
eXBlZCogbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKK3sKKyAgICBUSW50ZXJtVHlwZWQq
IHR5cGVkTm9kZTsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0YW50Tm9kZSA9
IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOworCisgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25B
cnJheTsKKyAgICBpZiAodGVtcENvbnN0YW50Tm9kZSkgeworICAgICAgICB1bmlvbkFycmF5ID0g
dGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKworICAgICAgICBpZiAo
IXVuaW9uQXJyYXkpIHsKKyAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICB9CisgICAg
fSBlbHNlIHsgLy8gVGhlIG5vZGUgaGFzIHRvIGJlIGVpdGhlciBhIHN5bWJvbCBub2RlIG9yIGFu
IGFnZ3JlZ2F0ZSBub2RlIG9yIGEgdGVtcENvbnN0YW50IG5vZGUsIGVsc2UsIGl0cyBhbiBlcnJv
cgorICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSB2ZWN0b3IiLCAi
RXJyb3IiKTsKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgICAgIHJldHVybiAwOworICAgIH0K
KworICAgIENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltmaWVs
ZHMubnVtXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgaSsrKSB7Cisg
ICAgICAgIGlmIChmaWVsZHMub2Zmc2V0c1tpXSA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0Tm9taW5h
bFNpemUoKSkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFt
OworICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJ2ZWN0b3IgZmllbGQgc2VsZWN0aW9u
IG91dCBvZiByYW5nZSAnIiA8PCBmaWVsZHMub2Zmc2V0c1tpXSA8PCAiJyI7CisgICAgICAgICAg
ICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAg
ICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7CisgICAgICAgICAg
ICByZWNvdmVyKCk7CisgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDA7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGNvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ZpZWxkcy5v
ZmZzZXRzW2ldXTsKKworICAgIH0gCisgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENv
bnN0YW50VW5pb24oY29uc3RBcnJheSwgbm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsKKyAgICByZXR1
cm4gdHlwZWROb2RlOworfQorCisvLworLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjb2x1
bW4gYmVpbmcgYWNjZXNzZWQgZnJvbSBhIGNvbnN0YW50IG1hdHJpeC4gVGhlIHZhbHVlcyBhcmUg
cmV0cmlldmVkIGZyb20KKy8vIHRoZSBzeW1ib2wgdGFibGUgYW5kIHBhcnNlLXRyZWUgaXMgYnVp
bHQgZm9yIGEgdmVjdG9yIChlYWNoIGNvbHVtbiBvZiBhIG1hdHJpeCBpcyBhIHZlY3RvcikuIFRo
ZSBpbnB1dCAKKy8vIHRvIHRoZSBmdW5jdGlvbiBjb3VsZCBlaXRoZXIgYmUgYSBzeW1ib2wgbm9k
ZSAobVswXSB3aGVyZSBtIGlzIGEgY29uc3RhbnQgbWF0cml4KXRoYXQgcmVwcmVzZW50cyBhIAor
Ly8gY29uc3RhbnQgbWF0cml4IG9yIGl0IGNvdWxkIGJlIHRoZSB0cmVlIHJlcHJlc2VudGF0aW9u
IG9mIHRoZSBjb25zdGFudCBtYXRyaXggKHMubTFbMF0gd2hlcmUgcyBpcyBhIGNvbnN0YW50IHN0
cnVjdHVyZSkKKy8vCitUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0TWF0cml4
Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBlZCogbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYgbGlu
ZSkKK3sKKyAgICBUSW50ZXJtVHlwZWQqIHR5cGVkTm9kZTsKKyAgICBUSW50ZXJtQ29uc3RhbnRV
bmlvbiogdGVtcENvbnN0YW50Tm9kZSA9IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOworCisg
ICAgaWYgKGluZGV4ID49IG5vZGUtPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKSB7CisgICAg
ICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgZXh0cmFJbmZv
U3RyZWFtIDw8ICJtYXRyaXggZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnIiA8PCBpbmRl
eCA8PCAiJyI7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVh
bS5zdHIoKTsKKyAgICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwgZXh0cmFJbmZvLmNfc3RyKCkp
OworICAgICAgICByZWNvdmVyKCk7CisgICAgICAgIGluZGV4ID0gMDsKKyAgICB9CisKKyAgICBp
ZiAodGVtcENvbnN0YW50Tm9kZSkgeworICAgICAgICAgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJh
eSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAgICAgICBp
bnQgc2l6ZSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpOwor
ICAgICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24oJnVuaW9u
QXJyYXlbc2l6ZSppbmRleF0sIHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKSwgbGluZSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUg
bWF0cml4IiwgIkVycm9yIik7CisgICAgICAgIHJlY292ZXIoKTsKKworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICByZXR1cm4gdHlwZWROb2RlOworfQorCisKKy8vCisvLyBUaGlzIGZ1
bmN0aW9uIHJldHVybnMgYW4gZWxlbWVudCBvZiBhbiBhcnJheSBhY2Nlc3NlZCBmcm9tIGEgY29u
c3RhbnQgYXJyYXkuIFRoZSB2YWx1ZXMgYXJlIHJldHJpZXZlZCBmcm9tCisvLyB0aGUgc3ltYm9s
IHRhYmxlIGFuZCBwYXJzZS10cmVlIGlzIGJ1aWx0IGZvciB0aGUgdHlwZSBvZiB0aGUgZWxlbWVu
dC4gVGhlIGlucHV0IAorLy8gdG8gdGhlIGZ1bmN0aW9uIGNvdWxkIGVpdGhlciBiZSBhIHN5bWJv
bCBub2RlIChhWzBdIHdoZXJlIGEgaXMgYSBjb25zdGFudCBhcnJheSl0aGF0IHJlcHJlc2VudHMg
YSAKKy8vIGNvbnN0YW50IGFycmF5IG9yIGl0IGNvdWxkIGJlIHRoZSB0cmVlIHJlcHJlc2VudGF0
aW9uIG9mIHRoZSBjb25zdGFudCBhcnJheSAocy5hMVswXSB3aGVyZSBzIGlzIGEgY29uc3RhbnQg
c3RydWN0dXJlKQorLy8KK1RJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RBcnJh
eU5vZGUoaW50IGluZGV4LCBUSW50ZXJtVHlwZWQqIG5vZGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUpCit7CisgICAgVEludGVybVR5cGVkKiB0eXBlZE5vZGU7CisgICAgVEludGVybUNvbnN0YW50
VW5pb24qIHRlbXBDb25zdGFudE5vZGUgPSBub2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKyAg
ICBUVHlwZSBhcnJheUVsZW1lbnRUeXBlID0gbm9kZS0+Z2V0VHlwZSgpOworICAgIGFycmF5RWxl
bWVudFR5cGUuY2xlYXJBcnJheW5lc3MoKTsKKworICAgIGlmIChpbmRleCA+PSBub2RlLT5nZXRU
eXBlKCkuZ2V0QXJyYXlTaXplKCkpIHsKKyAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJ
bmZvU3RyZWFtOworICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImFycmF5IGZpZWxkIHNlbGVj
dGlvbiBvdXQgb2YgcmFuZ2UgJyIgPDwgaW5kZXggPDwgIiciOworICAgICAgICBzdGQ6OnN0cmlu
ZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgIGVycm9yKGxpbmUs
ICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgICAg
ICBpbmRleCA9IDA7CisgICAgfQorCisgICAgaWYgKHRlbXBDb25zdGFudE5vZGUpIHsKKyAgICAg
ICAgIHNpemVfdCBhcnJheUVsZW1lbnRTaXplID0gYXJyYXlFbGVtZW50VHlwZS5nZXRPYmplY3RT
aXplKCk7CisgICAgICAgICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gdGVtcENvbnN0YW50
Tm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKyAgICAgICAgIHR5cGVkTm9kZSA9IGludGVy
bWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKCZ1bmlvbkFycmF5W2FycmF5RWxlbWVudFNpemUgKiBp
bmRleF0sIHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKSwgbGluZSk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgYXJyYXkiLCAiRXJy
b3IiKTsKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgICAgIHJldHVybiAwOworICAgIH0KKwor
ICAgIHJldHVybiB0eXBlZE5vZGU7Cit9CisKKworLy8KKy8vIFRoaXMgZnVuY3Rpb24gcmV0dXJu
cyB0aGUgdmFsdWUgb2YgYSBwYXJ0aWN1bGFyIGZpZWxkIGluc2lkZSBhIGNvbnN0YW50IHN0cnVj
dHVyZSBmcm9tIHRoZSBzeW1ib2wgdGFibGUuIAorLy8gSWYgdGhlcmUgaXMgYW4gZW1iZWRkZWQv
bmVzdGVkIHN0cnVjdCwgaXQgYXBwcm9wcmlhdGVseSBjYWxscyBhZGRDb25zdFN0cnVjdE5lc3Rl
ZCBvciBhZGRDb25zdFN0cnVjdEZyb21BZ2dyCisvLyBmdW5jdGlvbiBhbmQgcmV0dXJucyB0aGUg
cGFyc2UtdHJlZSB3aXRoIHRoZSB2YWx1ZXMgb2YgdGhlIGVtYmVkZGVkL25lc3RlZCBzdHJ1Y3Qu
CisvLworVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdFN0cnVjdChUU3RyaW5n
JiBpZGVudGlmaWVyLCBUSW50ZXJtVHlwZWQqIG5vZGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUp
Cit7CisgICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRzID0gbm9kZS0+Z2V0VHlwZSgpLmdldFN0
cnVjdCgpLT5maWVsZHMoKTsKKworICAgIHNpemVfdCBpbnN0YW5jZVNpemUgPSAwOworICAgIGZv
ciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBmaWVsZHMuc2l6ZSgpOyArK2luZGV4KSB7Cisg
ICAgICAgIGlmIChmaWVsZHNbaW5kZXhdLT5uYW1lKCkgPT0gaWRlbnRpZmllcikgeworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbnN0YW5jZVNpemUg
Kz0gZmllbGRzW2luZGV4XS0+dHlwZSgpLT5nZXRPYmplY3RTaXplKCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBUSW50ZXJtVHlwZWQqIHR5cGVkTm9kZSA9IDA7CisgICAgVEludGVybUNvbnN0
YW50VW5pb24qIHRlbXBDb25zdGFudE5vZGUgPSBub2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKTsK
KyAgICBpZiAodGVtcENvbnN0YW50Tm9kZSkgeworICAgICAgICAgQ29uc3RhbnRVbmlvbiogY29u
c3RBcnJheSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisKKyAg
ICAgICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJy
YXkraW5zdGFuY2VTaXplLCB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOyAvLyB0
eXBlIHdpbGwgYmUgY2hhbmdlZCBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbgorICAgIH0gZWxzZSB7
CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIHN0cnVjdHVyZSIs
ICJFcnJvciIpOworICAgICAgICByZWNvdmVyKCk7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgcmV0dXJuIHR5cGVkTm9kZTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0OjplbnRl
clN0cnVjdERlY2xhcmF0aW9uKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcm
IGlkZW50aWZpZXIpCit7CisgICAgKytzdHJ1Y3ROZXN0aW5nTGV2ZWw7CisKKyAgICAvLyBFbWJl
ZGRlZCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgcGVyIEdMU0wgRVMg
c3BlYy4KKyAgICAvLyBUaGV5IGFyZW4ndCBhbGxvd2VkIGluIEdMU0wgZWl0aGVyLCBidXQgd2Ug
bmVlZCB0byBkZXRlY3QgdGhpcyBoZXJlCisgICAgLy8gc28gd2UgZG9uJ3QgcmVseSBvbiB0aGUg
R0xTTCBjb21waWxlciB0byBjYXRjaCBpdC4KKyAgICBpZiAoc3RydWN0TmVzdGluZ0xldmVsID4g
MSkgeworICAgICAgICBlcnJvcihsaW5lLCAiIiwgIkVtYmVkZGVkIHN0cnVjdCBkZWZpbml0aW9u
cyBhcmUgbm90IGFsbG93ZWQiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIFRQYXJzZUNvbnRleHQ6OmV4aXRTdHJ1Y3REZWNsYXJh
dGlvbigpCit7CisgICAgLS1zdHJ1Y3ROZXN0aW5nTGV2ZWw7Cit9CisKK25hbWVzcGFjZSB7CisK
K2NvbnN0IGludCBrV2ViR0xNYXhTdHJ1Y3ROZXN0aW5nID0gNDsKKworfSAgLy8gbmFtZXNwYWNl
CisKK2Jvb2wgVFBhcnNlQ29udGV4dDo6c3RydWN0TmVzdGluZ0Vycm9yQ2hlY2soY29uc3QgVFNv
dXJjZUxvYyYgbGluZSwgY29uc3QgVEZpZWxkJiBmaWVsZCkKK3sKKyAgICBpZiAoIWlzV2ViR0xC
YXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGlmIChmaWVsZC50eXBlKCktPmdldEJhc2ljVHlwZSgpICE9IEVidFN0cnVjdCkgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gV2UncmUgYWxyZWFkeSBpbnNpZGUg
YSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBhdCB0aGlzIHBvaW50LCBzbyBhZGQKKyAgICAvLyBvbmUg
dG8gdGhlIGZpZWxkJ3Mgc3RydWN0IG5lc3RpbmcuCisgICAgaWYgKDEgKyBmaWVsZC50eXBlKCkt
PmdldERlZXBlc3RTdHJ1Y3ROZXN0aW5nKCkgPiBrV2ViR0xNYXhTdHJ1Y3ROZXN0aW5nKSB7Cisg
ICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHJlYXNvblN0cmVhbTsKKyAgICAgICAgcmVhc29uU3Ry
ZWFtIDw8ICJSZWZlcmVuY2Ugb2Ygc3RydWN0IHR5cGUgIgorICAgICAgICAgICAgICAgICAgICAg
PDwgZmllbGQudHlwZSgpLT5nZXRTdHJ1Y3QoKS0+bmFtZSgpLmNfc3RyKCkKKyAgICAgICAgICAg
ICAgICAgICAgIDw8ICIgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgbmVzdGluZyBsZXZlbCBvZiAi
CisgICAgICAgICAgICAgICAgICAgICA8PCBrV2ViR0xNYXhTdHJ1Y3ROZXN0aW5nOworICAgICAg
ICBzdGQ6OnN0cmluZyByZWFzb24gPSByZWFzb25TdHJlYW0uc3RyKCk7CisgICAgICAgIGVycm9y
KGxpbmUsIHJlYXNvbi5jX3N0cigpLCBmaWVsZC5uYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vCisvLyBQ
YXJzZSBhbiBhcnJheSBpbmRleCBleHByZXNzaW9uCisvLworVEludGVybVR5cGVkKiBUUGFyc2VD
b250ZXh0OjphZGRJbmRleEV4cHJlc3Npb24oVEludGVybVR5cGVkICpiYXNlRXhwcmVzc2lvbiwg
Y29uc3QgVFNvdXJjZUxvYyYgbG9jYXRpb24sIFRJbnRlcm1UeXBlZCAqaW5kZXhFeHByZXNzaW9u
KQoreworICAgIFRJbnRlcm1UeXBlZCAqaW5kZXhlZEV4cHJlc3Npb24gPSBOVUxMOworCisgICAg
aWYgKCFiYXNlRXhwcmVzc2lvbi0+aXNBcnJheSgpICYmICFiYXNlRXhwcmVzc2lvbi0+aXNNYXRy
aXgoKSAmJiAhYmFzZUV4cHJlc3Npb24tPmlzVmVjdG9yKCkpCisgICAgeworICAgICAgICBpZiAo
YmFzZUV4cHJlc3Npb24tPmdldEFzU3ltYm9sTm9kZSgpKQorICAgICAgICB7CisgICAgICAgICAg
ICBlcnJvcihsb2NhdGlvbiwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0
cml4LCBvciB2ZWN0b3IgIiwgYmFzZUV4cHJlc3Npb24tPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRT
eW1ib2woKS5jX3N0cigpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGVycm9yKGxvY2F0aW9uLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFy
cmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAiZXhwcmVzc2lvbiIpOworICAgICAgICB9CisgICAg
ICAgIHJlY292ZXIoKTsKKyAgICB9CisKKyAgICBpZiAoaW5kZXhFeHByZXNzaW9uLT5nZXRRdWFs
aWZpZXIoKSA9PSBFdnFDb25zdCkKKyAgICB7CisgICAgICAgIGludCBpbmRleCA9IGluZGV4RXhw
cmVzc2lvbi0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldElDb25zdCgwKTsKKyAgICAgICAgaWYg
KGluZGV4IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gaW5m
b1N0cmVhbTsKKyAgICAgICAgICAgIGluZm9TdHJlYW0gPDwgaW5kZXg7CisgICAgICAgICAgICBz
dGQ6OnN0cmluZyBpbmZvID0gaW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGVycm9yKGxv
Y2F0aW9uLCAibmVnYXRpdmUgaW5kZXgiLCBpbmZvLmNfc3RyKCkpOworICAgICAgICAgICAgcmVj
b3ZlcigpOworICAgICAgICAgICAgaW5kZXggPSAwOworICAgICAgICB9CisgICAgICAgIGlmIChi
YXNlRXhwcmVzc2lvbi0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoYmFzZUV4cHJlc3Npb24tPmlzQXJyYXkoKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBjb25zdGFudCBmb2xkaW5nIGZvciBhcnJheXMK
KyAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGFkZENvbnN0QXJyYXlOb2RlKGlu
ZGV4LCBiYXNlRXhwcmVzc2lvbiwgbG9jYXRpb24pOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZSBpZiAoYmFzZUV4cHJlc3Npb24tPmlzVmVjdG9yKCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgLy8gY29uc3RhbnQgZm9sZGluZyBmb3IgdmVjdG9ycworICAgICAgICAg
ICAgICAgIFRWZWN0b3JGaWVsZHMgZmllbGRzOworICAgICAgICAgICAgICAgIGZpZWxkcy5udW0g
PSAxOworICAgICAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzWzBdID0gaW5kZXg7IC8vIG5lZWQg
dG8gZG8gaXQgdGhpcyB3YXkgYmVjYXVzZSB2Lnh5IHNlbmRzIGZpZWxkcyBpbnRlZ2VyIGFycmF5
CisgICAgICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBhZGRDb25zdFZlY3Rvck5vZGUo
ZmllbGRzLCBiYXNlRXhwcmVzc2lvbiwgbG9jYXRpb24pOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSBpZiAoYmFzZUV4cHJlc3Npb24tPmlzTWF0cml4KCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgLy8gY29uc3RhbnQgZm9sZGluZyBmb3IgbWF0cmljZXMKKyAgICAg
ICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGFkZENvbnN0TWF0cml4Tm9kZShpbmRleCwg
YmFzZUV4cHJlc3Npb24sIGxvY2F0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNB
cnJheSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBiYXNl
RXhwcmVzc2lvbi0+Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOwor
ICAgICAgICAgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImFycmF5IGluZGV4IG91dCBv
ZiByYW5nZSAnIiA8PCBpbmRleCA8PCAiJyI7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3Ry
aW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgICAgICAg
ICAgZXJyb3IobG9jYXRpb24sICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGJhc2VF
eHByZXNzaW9uLT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkgLSAxOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChiYXNlRXhwcmVzc2lvbi0+Z2V0UXVhbGlmaWVy
KCkgPT0gRXZxRnJhZ0RhdGEgJiYgaW5kZXggPiAwICYmICFpc0V4dGVuc2lvbkVuYWJsZWQoIkdM
X0VYVF9kcmF3X2J1ZmZlcnMiKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIGVycm9yKGxvY2F0aW9uLCAiIiwgIlsiLCAiYXJyYXkgaW5kZXhlcyBmb3IgZ2xfRnJhZ0Rh
dGEgbXVzdCBiZSB6ZXJvIHdoZW4gR0xfRVhUX2RyYXdfYnVmZmVycyBpcyBkaXNhYmxlZCIpOwor
ICAgICAgICAgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgIGluZGV4
ID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IGlmICgoYmFzZUV4cHJlc3Npb24tPmlzVmVjdG9yKCkgfHwgYmFzZUV4cHJlc3Npb24tPmlzTWF0
cml4KCkpICYmIGJhc2VFeHByZXNzaW9uLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSA8PSBp
bmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBl
eHRyYUluZm9TdHJlYW07CisgICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJmaWVs
ZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICciIDw8IGluZGV4IDw8ICInIjsKKyAgICAgICAgICAg
ICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAg
ICAgICAgICAgICAgZXJyb3IobG9jYXRpb24sICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsK
KyAgICAgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgaW5kZXggPSBiYXNl
RXhwcmVzc2lvbi0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkgLSAxOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpbmRleEV4cHJlc3Npb24tPmdldEFzQ29uc3RhbnRVbmlvbigpLT5n
ZXRVbmlvbkFycmF5UG9pbnRlcigpLT5zZXRJQ29uc3QoaW5kZXgpOworICAgICAgICAgICAgaW5k
ZXhlZEV4cHJlc3Npb24gPSBpbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsIGJh
c2VFeHByZXNzaW9uLCBpbmRleEV4cHJlc3Npb24sIGxvY2F0aW9uKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGludGVybWVk
aWF0ZS5hZGRJbmRleChFT3BJbmRleEluZGlyZWN0LCBiYXNlRXhwcmVzc2lvbiwgaW5kZXhFeHBy
ZXNzaW9uLCBsb2NhdGlvbik7CisgICAgfQorCisgICAgaWYgKGluZGV4ZWRFeHByZXNzaW9uID09
IDApCisgICAgeworICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bMV07CisgICAgICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgwLjBmKTsKKyAgICAg
ICAgaW5kZXhlZEV4cHJlc3Npb24gPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlv
bkFycmF5LCBUVHlwZShFYnRGbG9hdCwgRWJwSGlnaCwgRXZxQ29uc3QpLCBsb2NhdGlvbik7Cisg
ICAgfQorICAgIGVsc2UgaWYgKGJhc2VFeHByZXNzaW9uLT5pc0FycmF5KCkpCisgICAgeworICAg
ICAgICBjb25zdCBUVHlwZSAmYmFzZVR5cGUgPSBiYXNlRXhwcmVzc2lvbi0+Z2V0VHlwZSgpOwor
ICAgICAgICBpZiAoYmFzZVR5cGUuZ2V0U3RydWN0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IFRUeXBlIGNvcHlPZlR5cGUoYmFzZVR5cGUuZ2V0U3RydWN0KCkpOworICAgICAgICAgICAgaW5k
ZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoY29weU9mVHlwZSk7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0VHlwZShU
VHlwZShiYXNlRXhwcmVzc2lvbi0+Z2V0QmFzaWNUeXBlKCksIGJhc2VFeHByZXNzaW9uLT5nZXRQ
cmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCBiYXNlRXhwcmVzc2lvbi0+Z2V0Tm9taW5hbFNpemUo
KSwgYmFzZUV4cHJlc3Npb24tPmlzTWF0cml4KCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChiYXNlRXhwcmVzc2lvbi0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQor
ICAgICAgICB7CisgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+Z2V0VHlwZVBvaW50ZXIo
KS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlm
IChiYXNlRXhwcmVzc2lvbi0+aXNNYXRyaXgoKSkKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIg
cXVhbGlmaWVyID0gYmFzZUV4cHJlc3Npb24tPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBF
dnFDb25zdCA/IEV2cUNvbnN0IDogRXZxVGVtcG9yYXJ5OworICAgICAgICBpbmRleGVkRXhwcmVz
c2lvbi0+c2V0VHlwZShUVHlwZShiYXNlRXhwcmVzc2lvbi0+Z2V0QmFzaWNUeXBlKCksIGJhc2VF
eHByZXNzaW9uLT5nZXRQcmVjaXNpb24oKSwgcXVhbGlmaWVyLCBiYXNlRXhwcmVzc2lvbi0+Z2V0
Tm9taW5hbFNpemUoKSkpOworICAgIH0KKyAgICBlbHNlIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNW
ZWN0b3IoKSkKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gYmFzZUV4cHJl
c3Npb24tPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCA/IEV2cUNvbnN0IDog
RXZxVGVtcG9yYXJ5OworICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0VHlwZShUVHlwZShi
YXNlRXhwcmVzc2lvbi0+Z2V0QmFzaWNUeXBlKCksIGJhc2VFeHByZXNzaW9uLT5nZXRQcmVjaXNp
b24oKSwgcXVhbGlmaWVyKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGluZGV4
ZWRFeHByZXNzaW9uLT5zZXRUeXBlKGJhc2VFeHByZXNzaW9uLT5nZXRUeXBlKCkpOworICAgIH0K
KworICAgIHJldHVybiBpbmRleGVkRXhwcmVzc2lvbjsKK30KKworLy8KKy8vIFBhcnNlIGFuIGFy
cmF5IG9mIHN0cmluZ3MgdXNpbmcgeXlwYXJzZS4KKy8vCisvLyBSZXR1cm5zIDAgZm9yIHN1Y2Nl
c3MuCisvLworaW50IFBhUGFyc2VTdHJpbmdzKHNpemVfdCBjb3VudCwgY29uc3QgY2hhciogY29u
c3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKKyAgICAgICAgICAgICAgICAgICBUUGFy
c2VDb250ZXh0KiBjb250ZXh0KSB7CisgICAgaWYgKChjb3VudCA9PSAwKSB8fCAoc3RyaW5nID09
IE5VTEwpKQorICAgICAgICByZXR1cm4gMTsKKworICAgIGlmIChnbHNsYW5nX2luaXRpYWxpemUo
Y29udGV4dCkpCisgICAgICAgIHJldHVybiAxOworCisgICAgaW50IGVycm9yID0gZ2xzbGFuZ19z
Y2FuKGNvdW50LCBzdHJpbmcsIGxlbmd0aCwgY29udGV4dCk7CisgICAgaWYgKCFlcnJvcikKKyAg
ICAgICAgZXJyb3IgPSBnbHNsYW5nX3BhcnNlKGNvbnRleHQpOworCisgICAgZ2xzbGFuZ19maW5h
bGl6ZShjb250ZXh0KTsKKworICAgIHJldHVybiAoZXJyb3IgPT0gMCkgJiYgKGNvbnRleHQtPm51
bUVycm9ycygpID09IDApID8gMCA6IDE7Cit9CisKKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmIzMjRlNTc1ZDM1YjM5OWQ1ODlmNDdjZmVjZDYzNGE1YTQ5N2U2YmIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaApAQCAtMCwwICsxLDEzNCBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKyNpZm5kZWYgX1BBUlNFUl9IRUxQRVJfSU5DTFVERURfCisjZGVmaW5lIF9QQVJTRVJf
SEVMUEVSX0lOQ0xVREVEXworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9EaWFnbm9z
dGljcy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFuZGxlci5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvbG9jYWxpbnRlcm1lZGlhdGUuaCIKKyNp
bmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvU3ltYm9sVGFibGUuaCIKKworc3RydWN0IFRNYXRyaXhGaWVsZHMgeworICAgIGJvb2wg
d2hvbGVSb3c7CisgICAgYm9vbCB3aG9sZUNvbDsKKyAgICBpbnQgcm93OworICAgIGludCBjb2w7
Cit9OworCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZXh0cmEgdmFyaWFibGVzIG5lZWRlZCBk
dXJpbmcgcGFyc2luZywgZ3JvdXBlZCB0b2dldGhlciBzbworLy8gdGhleSBjYW4gYmUgcGFzc2Vk
IHRvIHRoZSBwYXJzZXIgd2l0aG91dCBuZWVkaW5nIGEgZ2xvYmFsLgorLy8KK3N0cnVjdCBUUGFy
c2VDb250ZXh0IHsKKyAgICBUUGFyc2VDb250ZXh0KFRTeW1ib2xUYWJsZSYgc3ltdCwgVEV4dGVu
c2lvbkJlaGF2aW9yJiBleHQsIFRJbnRlcm1lZGlhdGUmIGludGVybSwgU2hTaGFkZXJUeXBlIHR5
cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBpbnQgb3B0aW9ucywgYm9vbCBjaGVja3NQcmVjRXJyb3Jz
LCBjb25zdCBjaGFyKiBzb3VyY2VQYXRoLCBUSW5mb1NpbmsmIGlzKSA6CisgICAgICAgICAgICBp
bnRlcm1lZGlhdGUoaW50ZXJtKSwKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlKHN5bXQpLAorICAg
ICAgICAgICAgc2hhZGVyVHlwZSh0eXBlKSwKKyAgICAgICAgICAgIHNoYWRlclNwZWMoc3BlYyks
CisgICAgICAgICAgICBjb21waWxlT3B0aW9ucyhvcHRpb25zKSwKKyAgICAgICAgICAgIHNvdXJj
ZVBhdGgoc291cmNlUGF0aCksCisgICAgICAgICAgICB0cmVlUm9vdCgwKSwKKyAgICAgICAgICAg
IGxvb3BOZXN0aW5nTGV2ZWwoMCksCisgICAgICAgICAgICBzdHJ1Y3ROZXN0aW5nTGV2ZWwoMCks
CisgICAgICAgICAgICBjdXJyZW50RnVuY3Rpb25UeXBlKE5VTEwpLAorICAgICAgICAgICAgZnVu
Y3Rpb25SZXR1cm5zVmFsdWUoZmFsc2UpLAorICAgICAgICAgICAgY2hlY2tzUHJlY2lzaW9uRXJy
b3JzKGNoZWNrc1ByZWNFcnJvcnMpLAorICAgICAgICAgICAgZGlhZ25vc3RpY3MoaXMpLAorICAg
ICAgICAgICAgZGlyZWN0aXZlSGFuZGxlcihleHQsIGRpYWdub3N0aWNzKSwKKyAgICAgICAgICAg
IHByZXByb2Nlc3NvcigmZGlhZ25vc3RpY3MsICZkaXJlY3RpdmVIYW5kbGVyKSwKKyAgICAgICAg
ICAgIHNjYW5uZXIoTlVMTCkgeyAgfQorICAgIFRJbnRlcm1lZGlhdGUmIGludGVybWVkaWF0ZTsg
Ly8gdG8gaG9sZCBhbmQgYnVpbGQgYSBwYXJzZSB0cmVlCisgICAgVFN5bWJvbFRhYmxlJiBzeW1i
b2xUYWJsZTsgICAvLyBzeW1ib2wgdGFibGUgdGhhdCBnb2VzIHdpdGggdGhlIGxhbmd1YWdlIGN1
cnJlbnRseSBiZWluZyBwYXJzZWQKKyAgICBTaFNoYWRlclR5cGUgc2hhZGVyVHlwZTsgICAgICAg
ICAgICAgIC8vIHZlcnRleCBvciBmcmFnbWVudCBsYW5ndWFnZSAoZnV0dXJlOiBwYWNrIG9yIHVu
cGFjaykKKyAgICBTaFNoYWRlclNwZWMgc2hhZGVyU3BlYzsgICAgICAgICAgICAgIC8vIFRoZSBs
YW5ndWFnZSBzcGVjaWZpY2F0aW9uIGNvbXBpbGVyIGNvbmZvcm1zIHRvIC0gR0xFUzIgb3IgV2Vi
R0wuCisgICAgaW50IGNvbXBpbGVPcHRpb25zOworICAgIGNvbnN0IGNoYXIqIHNvdXJjZVBhdGg7
ICAgICAgLy8gUGF0aCBvZiBzb3VyY2UgZmlsZSBvciBOVUxMLgorICAgIFRJbnRlcm1Ob2RlKiB0
cmVlUm9vdDsgICAgICAgLy8gcm9vdCBvZiBwYXJzZSB0cmVlIGJlaW5nIGNyZWF0ZWQKKyAgICBp
bnQgbG9vcE5lc3RpbmdMZXZlbDsgICAgICAgIC8vIDAgaWYgb3V0c2lkZSBhbGwgbG9vcHMKKyAg
ICBpbnQgc3RydWN0TmVzdGluZ0xldmVsOyAgICAgIC8vIGluY3JlbWVudGVkIHdoaWxlIHBhcnNp
bmcgYSBzdHJ1Y3QgZGVjbGFyYXRpb24KKyAgICBjb25zdCBUVHlwZSogY3VycmVudEZ1bmN0aW9u
VHlwZTsgIC8vIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCdzIGN1cnJlbnRs
eSBiZWluZyBwYXJzZWQKKyAgICBib29sIGZ1bmN0aW9uUmV0dXJuc1ZhbHVlOyAgIC8vIHRydWUg
aWYgYSBub24tdm9pZCBmdW5jdGlvbiBoYXMgYSByZXR1cm4KKyAgICBib29sIGNoZWNrc1ByZWNp
c2lvbkVycm9yczsgIC8vIHRydWUgaWYgYW4gZXJyb3Igd2lsbCBiZSBnZW5lcmF0ZWQgd2hlbiBh
IHZhcmlhYmxlIGlzIGRlY2xhcmVkIHdpdGhvdXQgcHJlY2lzaW9uLCBleHBsaWNpdCBvciBpbXBs
aWNpdC4KKyAgICBib29sIGZyYWdtZW50UHJlY2lzaW9uSGlnaDsgIC8vIHRydWUgaWYgaGlnaHAg
cHJlY2lzaW9uIGlzIHN1cHBvcnRlZCBpbiB0aGUgZnJhZ21lbnQgbGFuZ3VhZ2UuCisgICAgVFN0
cmluZyBIYXNoRXJyTXNnOworICAgIFREaWFnbm9zdGljcyBkaWFnbm9zdGljczsKKyAgICBURGly
ZWN0aXZlSGFuZGxlciBkaXJlY3RpdmVIYW5kbGVyOworICAgIHBwOjpQcmVwcm9jZXNzb3IgcHJl
cHJvY2Vzc29yOworICAgIHZvaWQqIHNjYW5uZXI7CisKKyAgICBpbnQgbnVtRXJyb3JzKCkgY29u
c3QgeyByZXR1cm4gZGlhZ25vc3RpY3MubnVtRXJyb3JzKCk7IH0KKyAgICBUSW5mb1NpbmsmIGlu
Zm9TaW5rKCkgeyByZXR1cm4gZGlhZ25vc3RpY3MuaW5mb1NpbmsoKTsgfQorICAgIHZvaWQgZXJy
b3IoY29uc3QgVFNvdXJjZUxvYyYgbG9jLCBjb25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIq
IHRva2VuLAorICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXh0cmFJbmZvPSIiKTsKKyAgICB2
b2lkIHdhcm5pbmcoY29uc3QgVFNvdXJjZUxvYyYgbG9jLCBjb25zdCBjaGFyKiByZWFzb24sIGNv
bnN0IGNoYXIqIHRva2VuLAorICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm89
IiIpOworICAgIHZvaWQgdHJhY2UoY29uc3QgY2hhciogc3RyKTsKKyAgICB2b2lkIHJlY292ZXIo
KTsKKworICAgIGJvb2wgcGFyc2VWZWN0b3JGaWVsZHMoY29uc3QgVFN0cmluZyYsIGludCB2ZWNT
aXplLCBUVmVjdG9yRmllbGRzJiwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSk7CisgICAgYm9vbCBw
YXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiwgaW50IG1hdFNpemUsIFRNYXRyaXhGaWVs
ZHMmLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKTsKKworICAgIGJvb2wgcmVzZXJ2ZWRFcnJvckNo
ZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIpOwor
ICAgIHZvaWQgYXNzaWduRXJyb3IoY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgY2hhciog
b3AsIFRTdHJpbmcgbGVmdCwgVFN0cmluZyByaWdodCk7CisgICAgdm9pZCB1bmFyeU9wRXJyb3Io
Y29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgb3BlcmFuZCk7
CisgICAgdm9pZCBiaW5hcnlPcEVycm9yKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IGNo
YXIqIG9wLCBUU3RyaW5nIGxlZnQsIFRTdHJpbmcgcmlnaHQpOworICAgIGJvb2wgcHJlY2lzaW9u
RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUHJlY2lzaW9uIHByZWNpc2lvbiwg
VEJhc2ljVHlwZSB0eXBlKTsKKyAgICBib29sIGxWYWx1ZUVycm9yQ2hlY2soY29uc3QgVFNvdXJj
ZUxvYyYgbGluZSwgY29uc3QgY2hhciogb3AsIFRJbnRlcm1UeXBlZCopOworICAgIGJvb2wgY29u
c3RFcnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSk7CisgICAgYm9vbCBpbnRlZ2VyRXJyb3JD
aGVjayhUSW50ZXJtVHlwZWQqIG5vZGUsIGNvbnN0IGNoYXIqIHRva2VuKTsKKyAgICBib29sIGds
b2JhbEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgYm9vbCBnbG9iYWwsIGNvbnN0
IGNoYXIqIHRva2VuKTsKKyAgICBib29sIGNvbnN0cnVjdG9yRXJyb3JDaGVjayhjb25zdCBUU291
cmNlTG9jJiBsaW5lLCBUSW50ZXJtTm9kZSosIFRGdW5jdGlvbiYsIFRPcGVyYXRvciwgVFR5cGUq
KTsKKyAgICBib29sIGFycmF5U2l6ZUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwg
VEludGVybVR5cGVkKiBleHByLCBpbnQmIHNpemUpOworICAgIGJvb2wgYXJyYXlRdWFsaWZpZXJF
cnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpOworICAg
IGJvb2wgYXJyYXlUeXBlRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUHVibGlj
VHlwZSB0eXBlKTsKKyAgICBib29sIGFycmF5RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBs
aW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSB0eXBlLCBUVmFyaWFibGUqJiB2
YXJpYWJsZSk7CisgICAgYm9vbCB2b2lkRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiwgY29u
c3QgVFN0cmluZyYsIGNvbnN0IFRQdWJsaWNUeXBlJik7CisgICAgYm9vbCBib29sRXJyb3JDaGVj
ayhjb25zdCBUU291cmNlTG9jJiwgY29uc3QgVEludGVybVR5cGVkKik7CisgICAgYm9vbCBib29s
RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiwgY29uc3QgVFB1YmxpY1R5cGUmKTsKKyAgICBi
b29sIHNhbXBsZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRQdWJs
aWNUeXBlJiBwVHlwZSwgY29uc3QgY2hhciogcmVhc29uKTsKKyAgICBib29sIHN0cnVjdFF1YWxp
ZmllckVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUm
IHBUeXBlKTsKKyAgICBib29sIHBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBjb25zdCBUVHlwZSYgdHlwZSk7Cisg
ICAgYm9vbCBub25Jbml0Q29uc3RFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRT
dHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBib29sIGFycmF5KTsKKyAgICBi
b29sIG5vbkluaXRFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlk
ZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSk7CisgICAg
Ym9vbCBwYXJhbUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFF1YWxpZmllciBx
dWFsaWZpZXIsIFRRdWFsaWZpZXIgcGFyYW1RdWFsaWZpZXIsIFRUeXBlKiB0eXBlKTsKKyAgICBi
b29sIGV4dGVuc2lvbkVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0
cmluZyYpOworCisgICAgY29uc3QgVFByYWdtYSYgcHJhZ21hKCkgY29uc3QgeyByZXR1cm4gZGly
ZWN0aXZlSGFuZGxlci5wcmFnbWEoKTsgfQorICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYg
ZXh0ZW5zaW9uQmVoYXZpb3IoKSBjb25zdCB7IHJldHVybiBkaXJlY3RpdmVIYW5kbGVyLmV4dGVu
c2lvbkJlaGF2aW9yKCk7IH0KKyAgICBib29sIHN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IGNoYXIq
IGV4dGVuc2lvbik7CisgICAgYm9vbCBpc0V4dGVuc2lvbkVuYWJsZWQoY29uc3QgY2hhciogZXh0
ZW5zaW9uKSBjb25zdDsKKworICAgIGJvb2wgY29udGFpbnNTYW1wbGVyKFRUeXBlJiB0eXBlKTsK
KyAgICBib29sIGFyZUFsbENoaWxkQ29uc3QoVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUpOwor
ICAgIGNvbnN0IFRGdW5jdGlvbiogZmluZEZ1bmN0aW9uKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUs
IFRGdW5jdGlvbiogcGZuQ2FsbCwgYm9vbCAqYnVpbHRJbiA9IDApOworICAgIGJvb2wgZXhlY3V0
ZUluaXRpYWxpemVyKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIs
IFRQdWJsaWNUeXBlJiBwVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJt
VHlwZWQqIGluaXRpYWxpemVyLCBUSW50ZXJtTm9kZSomIGludGVybU5vZGUsIFRWYXJpYWJsZSog
dmFyaWFibGUgPSAwKTsKKworICAgIFRJbnRlcm1UeXBlZCogYWRkQ29uc3RydWN0b3IoVEludGVy
bU5vZGUqLCBjb25zdCBUVHlwZSosIFRPcGVyYXRvciwgVEZ1bmN0aW9uKiwgY29uc3QgVFNvdXJj
ZUxvYyYpOworICAgIFRJbnRlcm1UeXBlZCogZm9sZENvbnN0Q29uc3RydWN0b3IoVEludGVybUFn
Z3JlZ2F0ZSogYWdnck5vZGUsIGNvbnN0IFRUeXBlJiB0eXBlKTsKKyAgICBUSW50ZXJtVHlwZWQq
IGNvbnN0cnVjdFN0cnVjdChUSW50ZXJtTm9kZSosIFRUeXBlKiwgaW50LCBjb25zdCBUU291cmNl
TG9jJiwgYm9vbCBzdWJzZXQpOworICAgIFRJbnRlcm1UeXBlZCogY29uc3RydWN0QnVpbHRJbihj
b25zdCBUVHlwZSosIFRPcGVyYXRvciwgVEludGVybU5vZGUqLCBjb25zdCBUU291cmNlTG9jJiwg
Ym9vbCBzdWJzZXQpOworICAgIFRJbnRlcm1UeXBlZCogYWRkQ29uc3RWZWN0b3JOb2RlKFRWZWN0
b3JGaWVsZHMmLCBUSW50ZXJtVHlwZWQqLCBjb25zdCBUU291cmNlTG9jJik7CisgICAgVEludGVy
bVR5cGVkKiBhZGRDb25zdE1hdHJpeE5vZGUoaW50ICwgVEludGVybVR5cGVkKiwgY29uc3QgVFNv
dXJjZUxvYyYpOworICAgIFRJbnRlcm1UeXBlZCogYWRkQ29uc3RBcnJheU5vZGUoaW50IGluZGV4
LCBUSW50ZXJtVHlwZWQqIG5vZGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpOworICAgIFRJbnRl
cm1UeXBlZCogYWRkQ29uc3RTdHJ1Y3QoVFN0cmluZyYgLCBUSW50ZXJtVHlwZWQqLCBjb25zdCBU
U291cmNlTG9jJik7CisgICAgVEludGVybVR5cGVkKiBhZGRJbmRleEV4cHJlc3Npb24oVEludGVy
bVR5cGVkICpiYXNlRXhwcmVzc2lvbiwgY29uc3QgVFNvdXJjZUxvYyYgbG9jYXRpb24sIFRJbnRl
cm1UeXBlZCAqaW5kZXhFeHByZXNzaW9uKTsKKworICAgIC8vIFBlcmZvcm1zIGFuIGVycm9yIGNo
ZWNrIGZvciBlbWJlZGRlZCBzdHJ1Y3QgZGVjbGFyYXRpb25zLgorICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiBhbiBlcnJvciB3YXMgcmFpc2VkIGR1ZSB0byB0aGUgZGVjbGFyYXRpb24gb2YKKyAgICAv
LyB0aGlzIHN0cnVjdC4KKyAgICBib29sIGVudGVyU3RydWN0RGVjbGFyYXRpb24oY29uc3QgVFNv
dXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllcik7CisgICAgdm9pZCBleGl0
U3RydWN0RGVjbGFyYXRpb24oKTsKKworICAgIGJvb2wgc3RydWN0TmVzdGluZ0Vycm9yQ2hlY2so
Y29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVEZpZWxkJiBmaWVsZCk7Cit9OworCitpbnQg
UGFQYXJzZVN0cmluZ3Moc2l6ZV90IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwg
Y29uc3QgaW50IGxlbmd0aFtdLAorICAgICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNv
bnRleHQpOworCisjZW5kaWYgLy8gX1BBUlNFUl9IRUxQRVJfSU5DTFVERURfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Qb29sQWxs
b2MuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
UG9vbEFsbG9jLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYmU3MDI2MmYyZDBkOWVmMDE1MDI1NWEzM2U2NWZk
ZDBlOTMzZjU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvUG9vbEFsbG9jLmNwcApAQCAtMCwwICsxLDI5NCBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUG9vbEFsbG9j
LmgiCisKKyNpZm5kZWYgX01TQ19WRVIKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorI2lu
Y2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZUdsb2JhbHMuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL29zaW5jbHVkZS5oIgorCitPU19UTFNJbmRleCBQb29sSW5kZXgg
PSBPU19JTlZBTElEX1RMU19JTkRFWDsKKworYm9vbCBJbml0aWFsaXplUG9vbEluZGV4KCkKK3sK
KyAgICBhc3NlcnQoUG9vbEluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKTsKKworICAgIFBv
b2xJbmRleCA9IE9TX0FsbG9jVExTSW5kZXgoKTsKKyAgICByZXR1cm4gUG9vbEluZGV4ICE9IE9T
X0lOVkFMSURfVExTX0lOREVYOworfQorCit2b2lkIEZyZWVQb29sSW5kZXgoKQoreworICAgIGFz
c2VydChQb29sSW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpOworCisgICAgT1NfRnJlZVRM
U0luZGV4KFBvb2xJbmRleCk7CisgICAgUG9vbEluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7
Cit9CisKK1RQb29sQWxsb2NhdG9yKiBHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCkKK3sKKyAgICBh
c3NlcnQoUG9vbEluZGV4ICE9IE9TX0lOVkFMSURfVExTX0lOREVYKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8VFBvb2xBbGxvY2F0b3IqPihPU19HZXRUTFNWYWx1ZShQb29sSW5kZXgpKTsKK30K
Kwordm9pZCBTZXRHbG9iYWxQb29sQWxsb2NhdG9yKFRQb29sQWxsb2NhdG9yKiBwb29sQWxsb2Nh
dG9yKQoreworICAgIGFzc2VydChQb29sSW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpOwor
ICAgIE9TX1NldFRMU1ZhbHVlKFBvb2xJbmRleCwgcG9vbEFsbG9jYXRvcik7Cit9CisKKy8vCisv
LyBJbXBsZW1lbnQgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIFRQb29sQWxsb2NhdG9yIGNsYXNz
LCB3aGljaAorLy8gaXMgZG9jdW1lbnRlZCBpbiBQb29sQWxsb2MuaC4KKy8vCitUUG9vbEFsbG9j
YXRvcjo6VFBvb2xBbGxvY2F0b3IoaW50IGdyb3d0aEluY3JlbWVudCwgaW50IGFsbG9jYXRpb25B
bGlnbm1lbnQpIDogCisgICAgcGFnZVNpemUoZ3Jvd3RoSW5jcmVtZW50KSwKKyAgICBhbGlnbm1l
bnQoYWxsb2NhdGlvbkFsaWdubWVudCksCisgICAgZnJlZUxpc3QoMCksCisgICAgaW5Vc2VMaXN0
KDApLAorICAgIG51bUNhbGxzKDApLAorICAgIHRvdGFsQnl0ZXMoMCkKK3sKKyAgICAvLworICAg
IC8vIERvbid0IGFsbG93IHBhZ2Ugc2l6ZXMgd2Uga25vdyBhcmUgc21hbGxlciB0aGFuIGFsbCBj
b21tb24KKyAgICAvLyBPUyBwYWdlIHNpemVzLgorICAgIC8vCisgICAgaWYgKHBhZ2VTaXplIDwg
NCoxMDI0KQorICAgICAgICBwYWdlU2l6ZSA9IDQqMTAyNDsKKworICAgIC8vCisgICAgLy8gQSBs
YXJnZSBjdXJyZW50UGFnZU9mZnNldCBpbmRpY2F0ZXMgYSBuZXcgcGFnZSBuZWVkcyB0bworICAg
IC8vIGJlIG9idGFpbmVkIHRvIGFsbG9jYXRlIG1lbW9yeS4KKyAgICAvLworICAgIGN1cnJlbnRQ
YWdlT2Zmc2V0ID0gcGFnZVNpemU7CisKKyAgICAvLworICAgIC8vIEFkanVzdCBhbGlnbm1lbnQg
dG8gYmUgYXQgbGVhc3QgcG9pbnRlciBhbGlnbmVkIGFuZAorICAgIC8vIHBvd2VyIG9mIDIuCisg
ICAgLy8KKyAgICBzaXplX3QgbWluQWxpZ24gPSBzaXplb2Yodm9pZCopOworICAgIGFsaWdubWVu
dCAmPSB+KG1pbkFsaWduIC0gMSk7CisgICAgaWYgKGFsaWdubWVudCA8IG1pbkFsaWduKQorICAg
ICAgICBhbGlnbm1lbnQgPSBtaW5BbGlnbjsKKyAgICBzaXplX3QgYSA9IDE7CisgICAgd2hpbGUg
KGEgPCBhbGlnbm1lbnQpCisgICAgICAgIGEgPDw9IDE7CisgICAgYWxpZ25tZW50ID0gYTsKKyAg
ICBhbGlnbm1lbnRNYXNrID0gYSAtIDE7CisKKyAgICAvLworICAgIC8vIEFsaWduIGhlYWRlciBz
a2lwCisgICAgLy8KKyAgICBoZWFkZXJTa2lwID0gbWluQWxpZ247CisgICAgaWYgKGhlYWRlclNr
aXAgPCBzaXplb2YodEhlYWRlcikpIHsKKyAgICAgICAgaGVhZGVyU2tpcCA9IChzaXplb2YodEhl
YWRlcikgKyBhbGlnbm1lbnRNYXNrKSAmIH5hbGlnbm1lbnRNYXNrOworICAgIH0KK30KKworVFBv
b2xBbGxvY2F0b3I6On5UUG9vbEFsbG9jYXRvcigpCit7CisgICAgd2hpbGUgKGluVXNlTGlzdCkg
eworICAgICAgICB0SGVhZGVyKiBuZXh0ID0gaW5Vc2VMaXN0LT5uZXh0UGFnZTsKKyAgICAgICAg
aW5Vc2VMaXN0LT5+dEhlYWRlcigpOworICAgICAgICBkZWxldGUgW10gcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oaW5Vc2VMaXN0KTsKKyAgICAgICAgaW5Vc2VMaXN0ID0gbmV4dDsKKyAgICB9CisK
KyAgICAvLyBXZSBzaG91bGQgbm90IGNoZWNrIHRoZSBndWFyZCBibG9ja3MKKyAgICAvLyBoZXJl
LCBiZWNhdXNlIHdlIGRpZCBpdCBhbHJlYWR5IHdoZW4gdGhlIGJsb2NrIHdhcworICAgIC8vIHBs
YWNlZCBpbnRvIHRoZSBmcmVlIGxpc3QuCisgICAgLy8KKyAgICB3aGlsZSAoZnJlZUxpc3QpIHsK
KyAgICAgICAgdEhlYWRlciogbmV4dCA9IGZyZWVMaXN0LT5uZXh0UGFnZTsKKyAgICAgICAgZGVs
ZXRlIFtdIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGZyZWVMaXN0KTsKKyAgICAgICAgZnJlZUxp
c3QgPSBuZXh0OworICAgIH0KK30KKworLy8gU3VwcG9ydCBNU1ZDKysgNi4wCitjb25zdCB1bnNp
Z25lZCBjaGFyIFRBbGxvY2F0aW9uOjpndWFyZEJsb2NrQmVnaW5WYWwgPSAweGZiOworY29uc3Qg
dW5zaWduZWQgY2hhciBUQWxsb2NhdGlvbjo6Z3VhcmRCbG9ja0VuZFZhbCAgID0gMHhmZTsKK2Nv
bnN0IHVuc2lnbmVkIGNoYXIgVEFsbG9jYXRpb246OnVzZXJEYXRhRmlsbCAgICAgICA9IDB4Y2Q7
CisKKyNpZmRlZiBHVUFSRF9CTE9DS1MKKyAgICBjb25zdCBzaXplX3QgVEFsbG9jYXRpb246Omd1
YXJkQmxvY2tTaXplID0gMTY7CisjZWxzZQorICAgIGNvbnN0IHNpemVfdCBUQWxsb2NhdGlvbjo6
Z3VhcmRCbG9ja1NpemUgPSAwOworI2VuZGlmCisKKy8vCisvLyBDaGVjayBhIHNpbmdsZSBndWFy
ZCBibG9jayBmb3IgZGFtYWdlCisvLwordm9pZCBUQWxsb2NhdGlvbjo6Y2hlY2tHdWFyZEJsb2Nr
KHVuc2lnbmVkIGNoYXIqIGJsb2NrTWVtLCB1bnNpZ25lZCBjaGFyIHZhbCwgY29uc3QgY2hhciog
bG9jVGV4dCkgY29uc3QKK3sKKyNpZmRlZiBHVUFSRF9CTE9DS1MKKyAgICBmb3IgKHNpemVfdCB4
ID0gMDsgeCA8IGd1YXJkQmxvY2tTaXplOyB4KyspIHsKKyAgICAgICAgaWYgKGJsb2NrTWVtW3hd
ICE9IHZhbCkgeworICAgICAgICAgICAgY2hhciBhc3NlcnRNc2dbODBdOworCisgICAgICAgICAg
ICAvLyBXZSBkb24ndCBwcmludCB0aGUgYXNzZXJ0IG1lc3NhZ2UuICBJdCdzIGhlcmUganVzdCB0
byBiZSBoZWxwZnVsLgorI2lmIGRlZmluZWQoX01TQ19WRVIpCisgICAgICAgICAgICBzbnByaW50
Zihhc3NlcnRNc2csIHNpemVvZihhc3NlcnRNc2cpLCAiUG9vbEFsbG9jOiBEYW1hZ2UgJXMgJUl1
IGJ5dGUgYWxsb2NhdGlvbiBhdCAweCVwXG4iLAorICAgICAgICAgICAgICAgICAgICBsb2NUZXh0
LCBzaXplLCBkYXRhKCkpOworI2Vsc2UKKyAgICAgICAgICAgIHNucHJpbnRmKGFzc2VydE1zZywg
c2l6ZW9mKGFzc2VydE1zZyksICJQb29sQWxsb2M6IERhbWFnZSAlcyAlenUgYnl0ZSBhbGxvY2F0
aW9uIGF0IDB4JXBcbiIsCisgICAgICAgICAgICAgICAgICAgIGxvY1RleHQsIHNpemUsIGRhdGEo
KSk7CisjZW5kaWYKKyAgICAgICAgICAgIGFzc2VydCgwICYmICJQb29sQWxsb2M6IERhbWFnZSBp
biBndWFyZCBibG9jayIpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCit9CisKKwordm9pZCBU
UG9vbEFsbG9jYXRvcjo6cHVzaCgpCit7CisgICAgdEFsbG9jU3RhdGUgc3RhdGUgPSB7IGN1cnJl
bnRQYWdlT2Zmc2V0LCBpblVzZUxpc3QgfTsKKworICAgIHN0YWNrLnB1c2hfYmFjayhzdGF0ZSk7
CisgICAgICAgIAorICAgIC8vCisgICAgLy8gSW5kaWNhdGUgdGhlcmUgaXMgbm8gY3VycmVudCBw
YWdlIHRvIGFsbG9jYXRlIGZyb20uCisgICAgLy8KKyAgICBjdXJyZW50UGFnZU9mZnNldCA9IHBh
Z2VTaXplOworfQorCisvLworLy8gRG8gYSBtYXNzLWRlYWxsb2NhdGlvbiBvZiBhbGwgdGhlIGlu
ZGl2aWR1YWwgYWxsb2NhdGlvbnMKKy8vIHRoYXQgaGF2ZSBvY2N1cnJlZCBzaW5jZSB0aGUgbGFz
dCBwdXNoKCksIG9yIHNpbmNlIHRoZQorLy8gbGFzdCBwb3AoKSwgb3Igc2luY2UgdGhlIG9iamVj
dCdzIGNyZWF0aW9uLgorLy8KKy8vIFRoZSBkZWFsbG9jYXRlZCBwYWdlcyBhcmUgc2F2ZWQgZm9y
IGZ1dHVyZSBhbGxvY2F0aW9ucy4KKy8vCit2b2lkIFRQb29sQWxsb2NhdG9yOjpwb3AoKQorewor
ICAgIGlmIChzdGFjay5zaXplKCkgPCAxKQorICAgICAgICByZXR1cm47CisKKyAgICB0SGVhZGVy
KiBwYWdlID0gc3RhY2suYmFjaygpLnBhZ2U7CisgICAgY3VycmVudFBhZ2VPZmZzZXQgPSBzdGFj
ay5iYWNrKCkub2Zmc2V0OworCisgICAgd2hpbGUgKGluVXNlTGlzdCAhPSBwYWdlKSB7CisgICAg
ICAgIC8vIGludm9rZSBkZXN0cnVjdG9yIHRvIGZyZWUgYWxsb2NhdGlvbiBsaXN0CisgICAgICAg
IGluVXNlTGlzdC0+fnRIZWFkZXIoKTsKKyAgICAgICAgCisgICAgICAgIHRIZWFkZXIqIG5leHRJ
blVzZSA9IGluVXNlTGlzdC0+bmV4dFBhZ2U7CisgICAgICAgIGlmIChpblVzZUxpc3QtPnBhZ2VD
b3VudCA+IDEpCisgICAgICAgICAgICBkZWxldGUgW10gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
aW5Vc2VMaXN0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpblVzZUxpc3QtPm5leHRQ
YWdlID0gZnJlZUxpc3Q7CisgICAgICAgICAgICBmcmVlTGlzdCA9IGluVXNlTGlzdDsKKyAgICAg
ICAgfQorICAgICAgICBpblVzZUxpc3QgPSBuZXh0SW5Vc2U7CisgICAgfQorCisgICAgc3RhY2su
cG9wX2JhY2soKTsKK30KKworLy8KKy8vIERvIGEgbWFzcy1kZWFsbG9jYXRpb24gb2YgYWxsIHRo
ZSBpbmRpdmlkdWFsIGFsbG9jYXRpb25zCisvLyB0aGF0IGhhdmUgb2NjdXJyZWQuCisvLwordm9p
ZCBUUG9vbEFsbG9jYXRvcjo6cG9wQWxsKCkKK3sKKyAgICB3aGlsZSAoc3RhY2suc2l6ZSgpID4g
MCkKKyAgICAgICAgcG9wKCk7Cit9CisKK3ZvaWQqIFRQb29sQWxsb2NhdG9yOjphbGxvY2F0ZShz
aXplX3QgbnVtQnl0ZXMpCit7CisgICAgLy8KKyAgICAvLyBKdXN0IGtlZXAgc29tZSBpbnRlcmVz
dGluZyBzdGF0aXN0aWNzLgorICAgIC8vCisgICAgKytudW1DYWxsczsKKyAgICB0b3RhbEJ5dGVz
ICs9IG51bUJ5dGVzOworCisgICAgLy8gSWYgd2UgYXJlIHVzaW5nIGd1YXJkIGJsb2NrcywgYWxs
IGFsbG9jYXRpb25zIGFyZSBicmFja2V0ZWQgYnkKKyAgICAvLyB0aGVtOiBbZ3VhcmRibG9ja11b
YWxsb2NhdGlvbl1bZ3VhcmRibG9ja10uICBudW1CeXRlcyBpcyBob3cKKyAgICAvLyBtdWNoIG1l
bW9yeSB0aGUgY2FsbGVyIGFza2VkIGZvci4gIGFsbG9jYXRpb25TaXplIGlzIHRoZSB0b3RhbAor
ICAgIC8vIHNpemUgaW5jbHVkaW5nIGd1YXJkIGJsb2Nrcy4gIEluIHJlbGVhc2UgYnVpbGQsCisg
ICAgLy8gZ3VhcmRCbG9ja1NpemU9MCBhbmQgdGhpcyBhbGwgZ2V0cyBvcHRpbWl6ZWQgYXdheS4K
KyAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBUQWxsb2NhdGlvbjo6YWxsb2NhdGlvblNpemUo
bnVtQnl0ZXMpOworICAgIC8vIERldGVjdCBpbnRlZ2VyIG92ZXJmbG93LgorICAgIGlmIChhbGxv
Y2F0aW9uU2l6ZSA8IG51bUJ5dGVzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vCisgICAg
Ly8gRG8gdGhlIGFsbG9jYXRpb24sIG1vc3QgbGlrZWx5IGNhc2UgZmlyc3QsIGZvciBlZmZpY2ll
bmN5LgorICAgIC8vIFRoaXMgc3RlcCBjb3VsZCBiZSBtb3ZlZCB0byBiZSBpbmxpbmUgc29tZXRp
bWUuCisgICAgLy8KKyAgICBpZiAoYWxsb2NhdGlvblNpemUgPD0gcGFnZVNpemUgLSBjdXJyZW50
UGFnZU9mZnNldCkgeworICAgICAgICAvLworICAgICAgICAvLyBTYWZlIHRvIGFsbG9jYXRlIGZy
b20gY3VycmVudFBhZ2VPZmZzZXQuCisgICAgICAgIC8vCisgICAgICAgIHVuc2lnbmVkIGNoYXIq
IG1lbW9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhciAqPihpblVzZUxpc3QpICsg
Y3VycmVudFBhZ2VPZmZzZXQ7CisgICAgICAgIGN1cnJlbnRQYWdlT2Zmc2V0ICs9IGFsbG9jYXRp
b25TaXplOworICAgICAgICBjdXJyZW50UGFnZU9mZnNldCA9IChjdXJyZW50UGFnZU9mZnNldCAr
IGFsaWdubWVudE1hc2spICYgfmFsaWdubWVudE1hc2s7CisKKyAgICAgICAgcmV0dXJuIGluaXRp
YWxpemVBbGxvY2F0aW9uKGluVXNlTGlzdCwgbWVtb3J5LCBudW1CeXRlcyk7CisgICAgfQorCisg
ICAgaWYgKGFsbG9jYXRpb25TaXplID4gcGFnZVNpemUgLSBoZWFkZXJTa2lwKSB7CisgICAgICAg
IC8vCisgICAgICAgIC8vIERvIGEgbXVsdGktcGFnZSBhbGxvY2F0aW9uLiAgRG9uJ3QgbWl4IHRo
ZXNlIHdpdGggdGhlIG90aGVycy4KKyAgICAgICAgLy8gVGhlIE9TIGlzIGVmZmljaWVudCBhbmQg
YWxsb2NhdGluZyBhbmQgZnJlZS1pbmcgbXVsdGlwbGUgcGFnZXMuCisgICAgICAgIC8vCisgICAg
ICAgIHNpemVfdCBudW1CeXRlc1RvQWxsb2MgPSBhbGxvY2F0aW9uU2l6ZSArIGhlYWRlclNraXA7
CisgICAgICAgIC8vIERldGVjdCBpbnRlZ2VyIG92ZXJmbG93LgorICAgICAgICBpZiAobnVtQnl0
ZXNUb0FsbG9jIDwgYWxsb2NhdGlvblNpemUpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAg
ICAgICB0SGVhZGVyKiBtZW1vcnkgPSByZWludGVycHJldF9jYXN0PHRIZWFkZXIqPig6Om5ldyBj
aGFyW251bUJ5dGVzVG9BbGxvY10pOworICAgICAgICBpZiAobWVtb3J5ID09IDApCisgICAgICAg
ICAgICByZXR1cm4gMDsKKworICAgICAgICAvLyBVc2UgcGxhY2VtZW50LW5ldyB0byBpbml0aWFs
aXplIGhlYWRlcgorICAgICAgICBuZXcobWVtb3J5KSB0SGVhZGVyKGluVXNlTGlzdCwgKG51bUJ5
dGVzVG9BbGxvYyArIHBhZ2VTaXplIC0gMSkgLyBwYWdlU2l6ZSk7CisgICAgICAgIGluVXNlTGlz
dCA9IG1lbW9yeTsKKworICAgICAgICBjdXJyZW50UGFnZU9mZnNldCA9IHBhZ2VTaXplOyAgLy8g
bWFrZSBuZXh0IGFsbG9jYXRpb24gY29tZSBmcm9tIGEgbmV3IHBhZ2UKKworICAgICAgICAvLyBO
byBndWFyZCBibG9ja3MgZm9yIG11bHRpLXBhZ2UgYWxsb2NhdGlvbnMgKHlldCkKKyAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
PihtZW1vcnkpICsgaGVhZGVyU2tpcCk7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBOZWVkIGEg
c2ltcGxlIHBhZ2UgdG8gYWxsb2NhdGUgZnJvbS4KKyAgICAvLworICAgIHRIZWFkZXIqIG1lbW9y
eTsKKyAgICBpZiAoZnJlZUxpc3QpIHsKKyAgICAgICAgbWVtb3J5ID0gZnJlZUxpc3Q7CisgICAg
ICAgIGZyZWVMaXN0ID0gZnJlZUxpc3QtPm5leHRQYWdlOworICAgIH0gZWxzZSB7CisgICAgICAg
IG1lbW9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dEhlYWRlcio+KDo6bmV3IGNoYXJbcGFnZVNpemVd
KTsKKyAgICAgICAgaWYgKG1lbW9yeSA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgLy8gVXNlIHBsYWNlbWVudC1uZXcgdG8gaW5pdGlhbGl6ZSBoZWFkZXIKKyAgICBu
ZXcobWVtb3J5KSB0SGVhZGVyKGluVXNlTGlzdCwgMSk7CisgICAgaW5Vc2VMaXN0ID0gbWVtb3J5
OworICAgIAorICAgIHVuc2lnbmVkIGNoYXIqIHJldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQgY2hhciAqPihpblVzZUxpc3QpICsgaGVhZGVyU2tpcDsKKyAgICBjdXJyZW50UGFnZU9mZnNl
dCA9IChoZWFkZXJTa2lwICsgYWxsb2NhdGlvblNpemUgKyBhbGlnbm1lbnRNYXNrKSAmIH5hbGln
bm1lbnRNYXNrOworCisgICAgcmV0dXJuIGluaXRpYWxpemVBbGxvY2F0aW9uKGluVXNlTGlzdCwg
cmV0LCBudW1CeXRlcyk7Cit9CisKKworLy8KKy8vIENoZWNrIGFsbCBhbGxvY2F0aW9ucyBpbiBh
IGxpc3QgZm9yIGRhbWFnZSBieSBjYWxsaW5nIGNoZWNrIG9uIGVhY2guCisvLwordm9pZCBUQWxs
b2NhdGlvbjo6Y2hlY2tBbGxvY0xpc3QoKSBjb25zdAoreworICAgIGZvciAoY29uc3QgVEFsbG9j
YXRpb24qIGFsbG9jID0gdGhpczsgYWxsb2MgIT0gMDsgYWxsb2MgPSBhbGxvYy0+cHJldkFsbG9j
KQorICAgICAgICBhbGxvYy0+Y2hlY2soKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Bvb2xBbGxvYy5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUG9vbEFsbG9jLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZWRkMjQ5YzRkM2EzOWJiMjAxYzM4NTU0MjM5OTA4MDhmNTVmMDdlNQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1Bvb2xBbGxvYy5oCkBAIC0wLDAgKzEsMzAwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZu
ZGVmIF9QT09MQUxMT0NfSU5DTFVERURfCisjZGVmaW5lIF9QT09MQUxMT0NfSU5DTFVERURfCisK
KyNpZmRlZiBfREVCVUcKKyNkZWZpbmUgR1VBUkRfQkxPQ0tTICAvLyBkZWZpbmUgdG8gZW5hYmxl
IGd1YXJkIGJsb2NrIHNhbml0eSBjaGVja2luZworI2VuZGlmCisKKy8vCisvLyBUaGlzIGhlYWRl
ciBkZWZpbmVzIGFuIGFsbG9jYXRvciB0aGF0IGNhbiBiZSB1c2VkIHRvIGVmZmljaWVudGx5Cisv
LyBhbGxvY2F0ZSBhIGxhcmdlIG51bWJlciBvZiBzbWFsbCByZXF1ZXN0cyBmb3IgaGVhcCBtZW1v
cnksIHdpdGggdGhlIAorLy8gaW50ZW50aW9uIHRoYXQgdGhleSBhcmUgbm90IGluZGl2aWR1YWxs
eSBkZWFsbG9jYXRlZCwgYnV0IHJhdGhlciAKKy8vIGNvbGxlY3RpdmVseSBkZWFsbG9jYXRlZCBh
dCBvbmUgdGltZS4KKy8vCisvLyBUaGlzIHNpbXVsdGFuZW91c2x5CisvLworLy8gKiBNYWtlcyBl
YWNoIGluZGl2aWR1YWwgYWxsb2NhdGlvbiBtdWNoIG1vcmUgZWZmaWNpZW50OyB0aGUKKy8vICAg
ICB0eXBpY2FsIGFsbG9jYXRpb24gaXMgdHJpdmlhbC4KKy8vICogQ29tcGxldGVseSBhdm9pZHMg
dGhlIGNvc3Qgb2YgZG9pbmcgaW5kaXZpZHVhbCBkZWFsbG9jYXRpb24uCisvLyAqIFNhdmVzIHRo
ZSB0cm91YmxlIG9mIHRyYWNraW5nIGRvd24gYW5kIHBsdWdnaW5nIGEgbGFyZ2UgY2xhc3Mgb2Yg
bGVha3MuCisvLworLy8gSW5kaXZpZHVhbCBjbGFzc2VzIGNhbiB1c2UgdGhpcyBhbGxvY2F0b3Ig
Ynkgc3VwcGx5aW5nIHRoZWlyIG93bgorLy8gbmV3IGFuZCBkZWxldGUgbWV0aG9kcy4KKy8vCisv
LyBTVEwgY29udGFpbmVycyBjYW4gdXNlIHRoaXMgYWxsb2NhdG9yIGJ5IHVzaW5nIHRoZSBwb29s
X2FsbG9jYXRvcgorLy8gY2xhc3MgYXMgdGhlIGFsbG9jYXRvciAoc2Vjb25kKSB0ZW1wbGF0ZSBh
cmd1bWVudC4KKy8vCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4K
KyNpbmNsdWRlIDx2ZWN0b3I+CisKKy8vIElmIHdlIGFyZSB1c2luZyBndWFyZCBibG9ja3MsIHdl
IG11c3QgdHJhY2sgZWFjaCBpbmRpdnVhbAorLy8gYWxsb2NhdGlvbi4gIElmIHdlIGFyZW4ndCB1
c2luZyBndWFyZCBibG9ja3MsIHRoZXNlCisvLyBuZXZlciBnZXQgaW5zdGFudGlhdGVkLCBzbyB3
b24ndCBoYXZlIGFueSBpbXBhY3QuCisvLyAKKworY2xhc3MgVEFsbG9jYXRpb24geworcHVibGlj
OgorICAgIFRBbGxvY2F0aW9uKHNpemVfdCBzaXplLCB1bnNpZ25lZCBjaGFyKiBtZW0sIFRBbGxv
Y2F0aW9uKiBwcmV2ID0gMCkgOgorICAgICAgICBzaXplKHNpemUpLCBtZW0obWVtKSwgcHJldkFs
bG9jKHByZXYpIHsKKyAgICAgICAgLy8gQWxsb2NhdGlvbnMgYXJlIGJyYWNrZXRlZDoKKyAgICAg
ICAgLy8gICAgW2FsbG9jYXRpb25IZWFkZXJdW2luaXRpYWxHdWFyZEJsb2NrXVt1c2VyRGF0YV1b
ZmluYWxHdWFyZEJsb2NrXQorICAgICAgICAvLyBUaGlzIHdvdWxkIGJlIGNsZWFuZXIgd2l0aCBp
ZiAoZ3VhcmRCbG9ja1NpemUpLi4uLCBidXQgdGhhdAorICAgICAgICAvLyBtYWtlcyB0aGUgY29t
cGlsZXIgcHJpbnQgd2FybmluZ3MgYWJvdXQgMCBsZW5ndGggbWVtc2V0cywKKyAgICAgICAgLy8g
ZXZlbiB3aXRoIHRoZSBpZigpIHByb3RlY3RpbmcgdGhlbS4KKyNpZmRlZiBHVUFSRF9CTE9DS1MK
KyAgICAgICAgbWVtc2V0KHByZUd1YXJkKCksIGd1YXJkQmxvY2tCZWdpblZhbCwgZ3VhcmRCbG9j
a1NpemUpOworICAgICAgICBtZW1zZXQoZGF0YSgpLCAgICAgIHVzZXJEYXRhRmlsbCwgICAgICAg
c2l6ZSk7CisgICAgICAgIG1lbXNldChwb3N0R3VhcmQoKSwgZ3VhcmRCbG9ja0VuZFZhbCwgICBn
dWFyZEJsb2NrU2l6ZSk7CisjZW5kaWYKKyAgICB9CisKKyAgICB2b2lkIGNoZWNrKCkgY29uc3Qg
eworICAgICAgICBjaGVja0d1YXJkQmxvY2socHJlR3VhcmQoKSwgIGd1YXJkQmxvY2tCZWdpblZh
bCwgImJlZm9yZSIpOworICAgICAgICBjaGVja0d1YXJkQmxvY2socG9zdEd1YXJkKCksIGd1YXJk
QmxvY2tFbmRWYWwsICAgImFmdGVyIik7CisgICAgfQorCisgICAgdm9pZCBjaGVja0FsbG9jTGlz
dCgpIGNvbnN0OworCisgICAgLy8gUmV0dXJuIHRvdGFsIHNpemUgbmVlZGVkIHRvIGFjY29tb2Rh
dGUgdXNlciBidWZmZXIgb2YgJ3NpemUnLAorICAgIC8vIHBsdXMgb3VyIHRyYWNraW5nIGRhdGEu
CisgICAgaW5saW5lIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUoc2l6ZV90IHNpemUpIHsK
KyAgICAgICAgcmV0dXJuIHNpemUgKyAyICogZ3VhcmRCbG9ja1NpemUgKyBoZWFkZXJTaXplKCk7
CisgICAgfQorCisgICAgLy8gT2Zmc2V0IGZyb20gc3Vycm91bmRpbmcgYnVmZmVyIHRvIGdldCB0
byB1c2VyIGRhdGEgYnVmZmVyLgorICAgIGlubGluZSBzdGF0aWMgdW5zaWduZWQgY2hhciogb2Zm
c2V0QWxsb2NhdGlvbih1bnNpZ25lZCBjaGFyKiBtKSB7CisgICAgICAgIHJldHVybiBtICsgZ3Vh
cmRCbG9ja1NpemUgKyBoZWFkZXJTaXplKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQg
Y2hlY2tHdWFyZEJsb2NrKHVuc2lnbmVkIGNoYXIqIGJsb2NrTWVtLCB1bnNpZ25lZCBjaGFyIHZh
bCwgY29uc3QgY2hhciogbG9jVGV4dCkgY29uc3Q7CisKKyAgICAvLyBGaW5kIG9mZnNldHMgdG8g
cHJlIGFuZCBwb3N0IGd1YXJkIGJsb2NrcywgYW5kIHVzZXIgZGF0YSBidWZmZXIKKyAgICB1bnNp
Z25lZCBjaGFyKiBwcmVHdWFyZCgpICBjb25zdCB7IHJldHVybiBtZW0gKyBoZWFkZXJTaXplKCk7
IH0KKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhKCkgICAgICBjb25zdCB7IHJldHVybiBwcmVHdWFy
ZCgpICsgZ3VhcmRCbG9ja1NpemU7IH0KKyAgICB1bnNpZ25lZCBjaGFyKiBwb3N0R3VhcmQoKSBj
b25zdCB7IHJldHVybiBkYXRhKCkgKyBzaXplOyB9CisKKyAgICBzaXplX3Qgc2l6ZTsgICAgICAg
ICAgICAgICAgICAvLyBzaXplIG9mIHRoZSB1c2VyIGRhdGEgYXJlYQorICAgIHVuc2lnbmVkIGNo
YXIqIG1lbTsgICAgICAgICAgIC8vIGJlZ2lubmluZyBvZiBvdXIgYWxsb2NhdGlvbiAocHRzIHRv
IGhlYWRlcikKKyAgICBUQWxsb2NhdGlvbiogcHJldkFsbG9jOyAgICAgICAvLyBwcmlvciBhbGxv
Y2F0aW9uIGluIHRoZSBjaGFpbgorCisgICAgLy8gU3VwcG9ydCBNU1ZDKysgNi4wCisgICAgY29u
c3Qgc3RhdGljIHVuc2lnbmVkIGNoYXIgZ3VhcmRCbG9ja0JlZ2luVmFsOworICAgIGNvbnN0IHN0
YXRpYyB1bnNpZ25lZCBjaGFyIGd1YXJkQmxvY2tFbmRWYWw7CisgICAgY29uc3Qgc3RhdGljIHVu
c2lnbmVkIGNoYXIgdXNlckRhdGFGaWxsOworCisgICAgY29uc3Qgc3RhdGljIHNpemVfdCBndWFy
ZEJsb2NrU2l6ZTsKKyNpZmRlZiBHVUFSRF9CTE9DS1MKKyAgICBpbmxpbmUgc3RhdGljIHNpemVf
dCBoZWFkZXJTaXplKCkgeyByZXR1cm4gc2l6ZW9mKFRBbGxvY2F0aW9uKTsgfQorI2Vsc2UKKyAg
ICBpbmxpbmUgc3RhdGljIHNpemVfdCBoZWFkZXJTaXplKCkgeyByZXR1cm4gMDsgfQorI2VuZGlm
Cit9OworCisvLworLy8gVGhlcmUgYXJlIHNldmVyYWwgc3RhY2tzLiAgT25lIGlzIHRvIHRyYWNr
IHRoZSBwdXNoaW5nIGFuZCBwb3BwaW5nCisvLyBvZiB0aGUgdXNlciwgYW5kIG5vdCB5ZXQgaW1w
bGVtZW50ZWQuICBUaGUgb3RoZXJzIGFyZSBzaW1wbHkgYSAKKy8vIHJlcG9zaXRvcmllcyBvZiBm
cmVlIHBhZ2VzIG9yIHVzZWQgcGFnZXMuCisvLworLy8gUGFnZSBzdGFja3MgYXJlIGxpbmtlZCB0
b2dldGhlciB3aXRoIGEgc2ltcGxlIGhlYWRlciBhdCB0aGUgYmVnaW5uaW5nCisvLyBvZiBlYWNo
IGFsbG9jYXRpb24gb2J0YWluZWQgZnJvbSB0aGUgdW5kZXJseWluZyBPUy4gIE11bHRpLXBhZ2Ug
YWxsb2NhdGlvbnMKKy8vIGFyZSByZXR1cm5lZCB0byB0aGUgT1MuICBJbmRpdmlkdWFsIHBhZ2Ug
YWxsb2NhdGlvbnMgYXJlIGtlcHQgZm9yIGZ1dHVyZQorLy8gcmUtdXNlLgorLy8KKy8vIFRoZSAi
cGFnZSBzaXplIiB1c2VkIGlzIG5vdCwgbm9yIG11c3QgaXQgbWF0Y2gsIHRoZSB1bmRlcmx5aW5n
IE9TCisvLyBwYWdlIHNpemUuICBCdXQsIGhhdmluZyBpdCBiZSBhYm91dCB0aGF0IHNpemUgb3Ig
ZXF1YWwgdG8gYSBzZXQgb2YgCisvLyBwYWdlcyBpcyBsaWtlbHkgbW9zdCBvcHRpbWFsLgorLy8K
K2NsYXNzIFRQb29sQWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAgICBUUG9vbEFsbG9jYXRvcihpbnQg
Z3Jvd3RoSW5jcmVtZW50ID0gOCoxMDI0LCBpbnQgYWxsb2NhdGlvbkFsaWdubWVudCA9IDE2KTsK
KworICAgIC8vCisgICAgLy8gRG9uJ3QgY2FsbCB0aGUgZGVzdHJ1Y3RvciBqdXN0IHRvIGZyZWUg
dXAgdGhlIG1lbW9yeSwgY2FsbCBwb3AoKQorICAgIC8vCisgICAgflRQb29sQWxsb2NhdG9yKCk7
CisKKyAgICAvLworICAgIC8vIENhbGwgcHVzaCgpIHRvIGVzdGFibGlzaCBhIG5ldyBwbGFjZSB0
byBwb3AgbWVtb3J5IHRvby4gIERvZXMgbm90CisgICAgLy8gaGF2ZSB0byBiZSBjYWxsZWQgdG8g
Z2V0IHRoaW5ncyBzdGFydGVkLgorICAgIC8vCisgICAgdm9pZCBwdXNoKCk7CisKKyAgICAvLwor
ICAgIC8vIENhbGwgcG9wKCkgdG8gZnJlZSBhbGwgbWVtb3J5IGFsbG9jYXRlZCBzaW5jZSB0aGUg
bGFzdCBjYWxsIHRvIHB1c2goKSwKKyAgICAvLyBvciBpZiBubyBsYXN0IGNhbGwgdG8gcHVzaCwg
ZnJlZXMgYWxsIG1lbW9yeSBzaW5jZSBmaXJzdCBhbGxvY2F0aW9uLgorICAgIC8vCisgICAgdm9p
ZCBwb3AoKTsKKworICAgIC8vCisgICAgLy8gQ2FsbCBwb3BBbGwoKSB0byBmcmVlIGFsbCBtZW1v
cnkgYWxsb2NhdGVkLgorICAgIC8vCisgICAgdm9pZCBwb3BBbGwoKTsKKworICAgIC8vCisgICAg
Ly8gQ2FsbCBhbGxvY2F0ZSgpIHRvIGFjdHVhbGx5IGFjcXVpcmUgbWVtb3J5LiAgUmV0dXJucyAw
IGlmIG5vIG1lbW9yeQorICAgIC8vIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGEgcHJvcGVybHkgYWxp
Z25lZCBwb2ludGVyIHRvICdudW1CeXRlcycgb2YgbWVtb3J5LgorICAgIC8vCisgICAgdm9pZCog
YWxsb2NhdGUoc2l6ZV90IG51bUJ5dGVzKTsKKworICAgIC8vCisgICAgLy8gVGhlcmUgaXMgbm8g
ZGVhbGxvY2F0ZS4gIFRoZSBwb2ludCBvZiB0aGlzIGNsYXNzIGlzIHRoYXQKKyAgICAvLyBkZWFs
bG9jYXRpb24gY2FuIGJlIHNraXBwZWQgYnkgdGhlIHVzZXIgb2YgaXQsIGFzIHRoZSBtb2RlbAor
ICAgIC8vIG9mIHVzZSBpcyB0byBzaW11bHRhbmVvdXNseSBkZWFsbG9jYXRlIGV2ZXJ5dGhpbmcg
YXQgb25jZQorICAgIC8vIGJ5IGNhbGxpbmcgcG9wKCksIGFuZCB0byBub3QgaGF2ZSB0byBzb2x2
ZSBtZW1vcnkgbGVhayBwcm9ibGVtcy4KKyAgICAvLworCitwcm90ZWN0ZWQ6CisgICAgZnJpZW5k
IHN0cnVjdCB0SGVhZGVyOworICAgIAorICAgIHN0cnVjdCB0SGVhZGVyIHsKKyAgICAgICAgdEhl
YWRlcih0SGVhZGVyKiBuZXh0UGFnZSwgc2l6ZV90IHBhZ2VDb3VudCkgOgorICAgICAgICAgICAg
bmV4dFBhZ2UobmV4dFBhZ2UpLAorICAgICAgICAgICAgcGFnZUNvdW50KHBhZ2VDb3VudCkKKyNp
ZmRlZiBHVUFSRF9CTE9DS1MKKyAgICAgICAgICAsIGxhc3RBbGxvY2F0aW9uKDApCisjZW5kaWYK
KyAgICAgICAgICAgIHsgfQorCisgICAgICAgIH50SGVhZGVyKCkgeworI2lmZGVmIEdVQVJEX0JM
T0NLUworICAgICAgICAgICAgaWYgKGxhc3RBbGxvY2F0aW9uKQorICAgICAgICAgICAgICAgIGxh
c3RBbGxvY2F0aW9uLT5jaGVja0FsbG9jTGlzdCgpOworI2VuZGlmCisgICAgICAgIH0KKworICAg
ICAgICB0SGVhZGVyKiBuZXh0UGFnZTsKKyAgICAgICAgc2l6ZV90IHBhZ2VDb3VudDsKKyNpZmRl
ZiBHVUFSRF9CTE9DS1MKKyAgICAgICAgVEFsbG9jYXRpb24qIGxhc3RBbGxvY2F0aW9uOworI2Vu
ZGlmCisgICAgfTsKKworICAgIHN0cnVjdCB0QWxsb2NTdGF0ZSB7CisgICAgICAgIHNpemVfdCBv
ZmZzZXQ7CisgICAgICAgIHRIZWFkZXIqIHBhZ2U7CisgICAgfTsKKyAgICB0eXBlZGVmIHN0ZDo6
dmVjdG9yPHRBbGxvY1N0YXRlPiB0QWxsb2NTdGFjazsKKworICAgIC8vIFRyYWNrIGFsbG9jYXRp
b25zIGlmIGFuZCBvbmx5IGlmIHdlJ3JlIHVzaW5nIGd1YXJkIGJsb2NrcworICAgIHZvaWQqIGlu
aXRpYWxpemVBbGxvY2F0aW9uKHRIZWFkZXIqIGJsb2NrLCB1bnNpZ25lZCBjaGFyKiBtZW1vcnks
IHNpemVfdCBudW1CeXRlcykgeworI2lmZGVmIEdVQVJEX0JMT0NLUworICAgICAgICBuZXcobWVt
b3J5KSBUQWxsb2NhdGlvbihudW1CeXRlcywgbWVtb3J5LCBibG9jay0+bGFzdEFsbG9jYXRpb24p
OworICAgICAgICBibG9jay0+bGFzdEFsbG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PFRBbGxv
Y2F0aW9uKj4obWVtb3J5KTsKKyNlbmRpZgorICAgICAgICAvLyBUaGlzIGlzIG9wdGltaXplZCBl
bnRpcmVseSBhd2F5IGlmIEdVQVJEX0JMT0NLUyBpcyBub3QgZGVmaW5lZC4KKyAgICAgICAgcmV0
dXJuIFRBbGxvY2F0aW9uOjpvZmZzZXRBbGxvY2F0aW9uKG1lbW9yeSk7CisgICAgfQorCisgICAg
c2l6ZV90IHBhZ2VTaXplOyAgICAgICAgLy8gZ3JhbnVsYXJpdHkgb2YgYWxsb2NhdGlvbiBmcm9t
IHRoZSBPUworICAgIHNpemVfdCBhbGlnbm1lbnQ7ICAgICAgIC8vIGFsbCByZXR1cm5lZCBhbGxv
Y2F0aW9ucyB3aWxsIGJlIGFsaWduZWQgYXQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gdGhpcyBncmFudWxhcml0eSwgd2hpY2ggd2lsbCBiZSBhIHBvd2VyIG9mIDIKKyAgICBzaXpl
X3QgYWxpZ25tZW50TWFzazsKKyAgICBzaXplX3QgaGVhZGVyU2tpcDsgICAgICAvLyBhbW91bnQg
b2YgbWVtb3J5IHRvIHNraXAgdG8gbWFrZSByb29tIGZvciB0aGUKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgIGhlYWRlciAoYmFzaWNhbGx5LCBzaXplIG9mIGhlYWRlciwgcm91
bmRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgdXAgdG8gbWFrZSBpdCBh
bGlnbmVkCisgICAgc2l6ZV90IGN1cnJlbnRQYWdlT2Zmc2V0OyAgLy8gbmV4dCBvZmZzZXQgaW4g
dG9wIG9mIGluVXNlTGlzdCB0byBhbGxvY2F0ZSBmcm9tCisgICAgdEhlYWRlciogZnJlZUxpc3Q7
ICAgICAgLy8gbGlzdCBvZiBwb3BwZWQgbWVtb3J5CisgICAgdEhlYWRlciogaW5Vc2VMaXN0OyAg
ICAgLy8gbGlzdCBvZiBhbGwgbWVtb3J5IGN1cnJlbnRseSBiZWluZyB1c2VkCisgICAgdEFsbG9j
U3RhY2sgc3RhY2s7ICAgICAgLy8gc3RhY2sgb2Ygd2hlcmUgdG8gYWxsb2NhdGUgZnJvbSwgdG8g
cGFydGl0aW9uIHBvb2wKKworICAgIGludCBudW1DYWxsczsgICAgICAgICAgIC8vIGp1c3QgYW4g
aW50ZXJlc3Rpbmcgc3RhdGlzdGljCisgICAgc2l6ZV90IHRvdGFsQnl0ZXM7ICAgICAgLy8ganVz
dCBhbiBpbnRlcmVzdGluZyBzdGF0aXN0aWMKK3ByaXZhdGU6CisgICAgVFBvb2xBbGxvY2F0b3Im
IG9wZXJhdG9yPShjb25zdCBUUG9vbEFsbG9jYXRvciYpOyAgLy8gZG9udCBhbGxvdyBhc3NpZ25t
ZW50IG9wZXJhdG9yCisgICAgVFBvb2xBbGxvY2F0b3IoY29uc3QgVFBvb2xBbGxvY2F0b3ImKTsg
IC8vIGRvbnQgYWxsb3cgZGVmYXVsdCBjb3B5IGNvbnN0cnVjdG9yCit9OworCisKKy8vCisvLyBU
aGVyZSBjb3VsZCBwb3RlbnRpYWxseSBiZSBtYW55IHBvb2xzIHdpdGggcG9wcyBoYXBwZW5pbmcg
YXQKKy8vIGRpZmZlcmVudCB0aW1lcy4gIEJ1dCBhIHNpbXBsZSB1c2UgaXMgdG8gaGF2ZSBhIGds
b2JhbCBwb3AKKy8vIHdpdGggZXZlcnlvbmUgdXNpbmcgdGhlIHNhbWUgZ2xvYmFsIGFsbG9jYXRv
ci4KKy8vCitleHRlcm4gVFBvb2xBbGxvY2F0b3IqIEdldEdsb2JhbFBvb2xBbGxvY2F0b3IoKTsK
K2V4dGVybiB2b2lkIFNldEdsb2JhbFBvb2xBbGxvY2F0b3IoVFBvb2xBbGxvY2F0b3IqIHBvb2xB
bGxvY2F0b3IpOworCisvLworLy8gVGhpcyBTVEwgY29tcGF0aWJsZSBhbGxvY2F0b3IgaXMgaW50
ZW5kZWQgdG8gYmUgdXNlZCBhcyB0aGUgYWxsb2NhdG9yCisvLyBwYXJhbWV0ZXIgdG8gdGVtcGxh
dGl6ZWQgU1RMIGNvbnRhaW5lcnMsIGxpa2UgdmVjdG9yIGFuZCBtYXAuCisvLworLy8gSXQgd2ls
bCB1c2UgdGhlIHBvb2xzIGZvciBhbGxvY2F0aW9uLCBhbmQgbm90CisvLyBkbyBhbnkgZGVhbGxv
Y2F0aW9uLCBidXQgd2lsbCBzdGlsbCBkbyBkZXN0cnVjdGlvbi4KKy8vCit0ZW1wbGF0ZTxjbGFz
cyBUPgorY2xhc3MgcG9vbF9hbGxvY2F0b3IgeworcHVibGljOgorICAgIHR5cGVkZWYgc2l6ZV90
IHNpemVfdHlwZTsKKyAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CisgICAg
dHlwZWRlZiBUKiBwb2ludGVyOworICAgIHR5cGVkZWYgY29uc3QgVCogY29uc3RfcG9pbnRlcjsK
KyAgICB0eXBlZGVmIFQmIHJlZmVyZW5jZTsKKyAgICB0eXBlZGVmIGNvbnN0IFQmIGNvbnN0X3Jl
ZmVyZW5jZTsKKyAgICB0eXBlZGVmIFQgdmFsdWVfdHlwZTsKKworICAgIHRlbXBsYXRlPGNsYXNz
IE90aGVyPiAKKyAgICBzdHJ1Y3QgcmViaW5kIHsKKyAgICAgICAgdHlwZWRlZiBwb29sX2FsbG9j
YXRvcjxPdGhlcj4gb3RoZXI7CisgICAgfTsKKyAgICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNl
IHgpIGNvbnN0IHsgcmV0dXJuICZ4OyB9CisgICAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0
X3JlZmVyZW5jZSB4KSBjb25zdCB7IHJldHVybiAmeDsgfQorCisgICAgcG9vbF9hbGxvY2F0b3Io
KSA6IGFsbG9jYXRvcihHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCkpIHsgfQorICAgIHBvb2xfYWxs
b2NhdG9yKFRQb29sQWxsb2NhdG9yJiBhKSA6IGFsbG9jYXRvcigmYSkgeyB9CisgICAgcG9vbF9h
bGxvY2F0b3IoY29uc3QgcG9vbF9hbGxvY2F0b3I8VD4mIHApIDogYWxsb2NhdG9yKHAuYWxsb2Nh
dG9yKSB7IH0KKworICAgIHRlbXBsYXRlIDxjbGFzcyBPdGhlcj4KKyAgICBwb29sX2FsbG9jYXRv
cjxUPiYgb3BlcmF0b3I9KGNvbnN0IHBvb2xfYWxsb2NhdG9yPE90aGVyPiYgcCkgeworICAgICAg
YWxsb2NhdG9yID0gcC5hbGxvY2F0b3I7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisg
ICAgdGVtcGxhdGU8Y2xhc3MgT3RoZXI+CisgICAgcG9vbF9hbGxvY2F0b3IoY29uc3QgcG9vbF9h
bGxvY2F0b3I8T3RoZXI+JiBwKSA6IGFsbG9jYXRvcigmcC5nZXRBbGxvY2F0b3IoKSkgeyB9CisK
KyNpZiBkZWZpbmVkKF9fU1VOUFJPX0NDKSAmJiAhZGVmaW5lZChfUldTVERfQUxMT0NBVE9SKQor
ICAgIC8vIGxpYkNTdGQgb24gc29tZSBwbGF0Zm9ybXMgaGF2ZSBhIGRpZmZlcmVudCBhbGxvY2F0
ZS9kZWFsbG9jYXRlIGludGVyZmFjZS4KKyAgICAvLyBDYWxsZXIgcHJlLWJha2VzIHNpemVvZihU
KSBpbnRvICduJyB3aGljaCBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlCisgICAgLy8gYWxs
b2NhdGVkLCBub3QgdGhlIG51bWJlciBvZiBlbGVtZW50cy4KKyAgICB2b2lkKiBhbGxvY2F0ZShz
aXplX3R5cGUgbikgeyAKKyAgICAgICAgcmV0dXJuIGdldEFsbG9jYXRvcigpLmFsbG9jYXRlKG4p
OworICAgIH0KKyAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3R5cGUgbiwgY29uc3Qgdm9pZCopIHsK
KyAgICAgICAgcmV0dXJuIGdldEFsbG9jYXRvcigpLmFsbG9jYXRlKG4pOworICAgIH0KKyAgICB2
b2lkIGRlYWxsb2NhdGUodm9pZCosIHNpemVfdHlwZSkge30KKyNlbHNlCisgICAgcG9pbnRlciBh
bGxvY2F0ZShzaXplX3R5cGUgbikgeyAKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
cG9pbnRlcj4oZ2V0QWxsb2NhdG9yKCkuYWxsb2NhdGUobiAqIHNpemVvZihUKSkpOworICAgIH0K
KyAgICBwb2ludGVyIGFsbG9jYXRlKHNpemVfdHlwZSBuLCBjb25zdCB2b2lkKikgeyAKKyAgICAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8cG9pbnRlcj4oZ2V0QWxsb2NhdG9yKCkuYWxsb2Nh
dGUobiAqIHNpemVvZihUKSkpOworICAgIH0KKyAgICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciwg
c2l6ZV90eXBlKSB7fQorI2VuZGlmICAvLyBfUldTVERfQUxMT0NBVE9SCisKKyAgICB2b2lkIGNv
bnN0cnVjdChwb2ludGVyIHAsIGNvbnN0IFQmIHZhbCkgeyBuZXcgKCh2b2lkICopcCkgVCh2YWwp
OyB9CisgICAgdm9pZCBkZXN0cm95KHBvaW50ZXIgcCkgeyBwLT5UOjp+VCgpOyB9CisKKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgcG9vbF9hbGxvY2F0b3ImIHJocykgY29uc3QgeyByZXR1cm4g
JmdldEFsbG9jYXRvcigpID09ICZyaHMuZ2V0QWxsb2NhdG9yKCk7IH0KKyAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgcG9vbF9hbGxvY2F0b3ImIHJocykgY29uc3QgeyByZXR1cm4gJmdldEFsbG9j
YXRvcigpICE9ICZyaHMuZ2V0QWxsb2NhdG9yKCk7IH0KKworICAgIHNpemVfdHlwZSBtYXhfc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdHlwZT4oLTEpIC8gc2l6ZW9mKFQp
OyB9CisgICAgc2l6ZV90eXBlIG1heF9zaXplKGludCBzaXplKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxzaXplX3R5cGU+KC0xKSAvIHNpemU7IH0KKworICAgIHZvaWQgc2V0QWxsb2NhdG9y
KFRQb29sQWxsb2NhdG9yKiBhKSB7IGFsbG9jYXRvciA9IGE7IH0KKyAgICBUUG9vbEFsbG9jYXRv
ciYgZ2V0QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gKmFsbG9jYXRvcjsgfQorCitwcm90ZWN0
ZWQ6CisgICAgVFBvb2xBbGxvY2F0b3IqIGFsbG9jYXRvcjsKK307CisKKyNlbmRpZiAvLyBfUE9P
TEFMTE9DX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvUHJhZ21hLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9QcmFnbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZjc0NDEyM2I4Mjg5
NDk4YzMxNzkxNGVhZDNkZjEzNjNhZTg2MTZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUHJhZ21hLmgKQEAgLTAsMCAr
MSwxOSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJBR01BX0hfCisjZGVm
aW5lIENPTVBJTEVSX1BSQUdNQV9IXworCitzdHJ1Y3QgVFByYWdtYSB7CisgICAgLy8gQnkgZGVm
YXVsdCBvcHRpbWl6YXRpb24gaXMgdHVybmVkIG9uIGFuZCBkZWJ1ZyBpcyB0dXJuZWQgb2ZmLgor
ICAgIFRQcmFnbWEoKSA6IG9wdGltaXplKHRydWUpLCBkZWJ1ZyhmYWxzZSkgeyB9CisgICAgVFBy
YWdtYShib29sIG8sIGJvb2wgZCkgOiBvcHRpbWl6ZShvKSwgZGVidWcoZCkgeyB9CisKKyAgICBi
b29sIG9wdGltaXplOworICAgIGJvb2wgZGVidWc7Cit9OworCisjZW5kaWYgLy8gQ09NUElMRVJf
UFJBR01BX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9RdWFsaWZpZXJBbGl2ZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9RdWFsaWZpZXJBbGl2ZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MWJhMDg3ZTE3NjU4ZGQ0NTU1NmQyYmRkMzUwYjhiNzZlYjdmN2MzYwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1F1YWxp
ZmllckFsaXZlLmNwcApAQCAtMCwwICsxLDU4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKworY2xhc3MgVEFsaXZl
VHJhdmVyc2VyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgorICAgIFRBbGl2
ZVRyYXZlcnNlcihUUXVhbGlmaWVyIHEpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwg
ZmFsc2UsIHRydWUpLCBmb3VuZChmYWxzZSksIHF1YWxpZmllcihxKQorICAgIHsKKyAgICB9CisK
Kwlib29sIHdhc0ZvdW5kKCkgeyByZXR1cm4gZm91bmQ7IH0KKworcHJvdGVjdGVkOgorICAgIGJv
b2wgZm91bmQ7CisgICAgVFF1YWxpZmllciBxdWFsaWZpZXI7CisKKyAgICB2b2lkIHZpc2l0U3lt
Ym9sKFRJbnRlcm1TeW1ib2wqKTsKKyAgICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0LCBUSW50
ZXJtU2VsZWN0aW9uKik7Cit9OworCisvLworLy8gUmVwb3J0IHdoZXRoZXIgb3Igbm90IGEgdmFy
aWFibGUgb2YgdGhlIGdpdmVuIHF1YWxpZmllciB0eXBlCisvLyBpcyBndWFyYW50ZWVkIHdyaXR0
ZW4uICBOb3QgYWx3YXlzIHBvc3NpYmxlIHRvIGRldGVybWluZSBpZgorLy8gaXQgaXMgd3JpdHRl
biBjb25kaXRpb25hbGx5LgorLy8KKy8vID8/IEl0IGRvZXMgbm90IGRvIHRoaXMgd2VsbCB5ZXQs
IHRoaXMgaXMganVzdCBhIHBsYWNlIGhvbGRlcgorLy8gdGhhdCBzaW1wbHkgZGV0ZXJtaW5lcyBp
ZiBpdCB3YXMgcmVmZXJlbmNlIGF0IGFsbCwgYW55d2hlcmUuCisvLworYm9vbCBRdWFsaWZpZXJX
cml0dGVuKFRJbnRlcm1Ob2RlKiBub2RlLCBUUXVhbGlmaWVyIHF1YWxpZmllcikKK3sKKyAgICBU
QWxpdmVUcmF2ZXJzZXIgaXQocXVhbGlmaWVyKTsKKworICAgIGlmIChub2RlKQorICAgICAgICBu
b2RlLT50cmF2ZXJzZSgmaXQpOworCisgICAgcmV0dXJuIGl0Lndhc0ZvdW5kKCk7Cit9CisKK3Zv
aWQgVEFsaXZlVHJhdmVyc2VyOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQorewor
ICAgIC8vCisgICAgLy8gSWYgaXQncyB3aGF0IHdlJ3JlIGxvb2tpbmcgZm9yLCByZWNvcmQgaXQu
CisgICAgLy8KKyAgICBpZiAobm9kZS0+Z2V0UXVhbGlmaWVyKCkgPT0gcXVhbGlmaWVyKQorICAg
ICAgICBmb3VuZCA9IHRydWU7Cit9CisKK2Jvb2wgVEFsaXZlVHJhdmVyc2VyOjp2aXNpdFNlbGVj
dGlvbihWaXNpdCBwcmVWaXNpdCwgVEludGVybVNlbGVjdGlvbiogbm9kZSkKK3sKKyAgICBpZiAo
d2FzRm91bmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9RdWFsaWZpZXJBbGl2ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvUXVhbGlmaWVyQWxpdmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NzJhMDZmNzIxOTJh
ZjFkMzc4ZjcyZDFlYTIxMGRhZTg5OWJiZjRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUXVhbGlmaWVyQWxpdmUuaApA
QCAtMCwwICsxLDcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK2Jvb2wgUXVhbGlmaWVyV3JpdHRl
bihUSW50ZXJtTm9kZSogcm9vdCwgVFF1YWxpZmllcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZW1vdmVUcmVlLmNwcCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1JlbW92ZVRyZWUu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjkyZTVkYmJmZTE0OGU1Y2MzOTk0NzFiNzc4ZGE2NzlhMTkyN2U3NTcK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9SZW1vdmVUcmVlLmNwcApAQCAtMCwwICsxLDc3IEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1JlbW92ZVRyZWUuaCIKKworLy8KKy8vIENvZGUg
dG8gcmVjdXJzaXZlbHkgZGVsZXRlIHRoZSBpbnRlcm1lZGlhdGUgdHJlZS4KKy8vCisKK2NsYXNz
IFJlbW92ZVRyZWUgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworcHVibGljOgorCVJlbW92
ZVRyZWUoKSA6IFRJbnRlcm1UcmF2ZXJzZXIoZmFsc2UsIGZhbHNlLCB0cnVlKQorCXsKKwl9CisK
K3Byb3RlY3RlZDoKKwl2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKKwl2b2lkIHZp
c2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiopOworCWJvb2wgdmlzaXRCaW5h
cnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKwlib29sIHZpc2l0VW5hcnkoVmlzaXQg
dmlzaXQsIFRJbnRlcm1VbmFyeSopOworCWJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQs
IFRJbnRlcm1TZWxlY3Rpb24qKTsKKwlib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBU
SW50ZXJtQWdncmVnYXRlKik7Cit9OworCit2b2lkIFJlbW92ZVRyZWU6OnZpc2l0U3ltYm9sKFRJ
bnRlcm1TeW1ib2wqIG5vZGUpCit7CisJZGVsZXRlIG5vZGU7Cit9CisKK2Jvb2wgUmVtb3ZlVHJl
ZTo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5vZGUpCit7CisJZGVs
ZXRlIG5vZGU7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW1vdmVUcmVlOjp2aXNpdFVu
YXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUpCit7CisgICAgZGVsZXRlIG5vZGU7
CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW1vdmVUcmVlOjp2aXNpdEFnZ3JlZ2F0ZShW
aXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK3sKKwlkZWxldGUgbm9kZTsKKwor
CXJldHVybiB0cnVlOworfQorCitib29sIFJlbW92ZVRyZWU6OnZpc2l0U2VsZWN0aW9uKFZpc2l0
IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBub2RlKQoreworCWRlbGV0ZSBub2RlOworCisJcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVtb3ZlVHJlZTo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnRl
cm1Db25zdGFudFVuaW9uKiBub2RlKQoreworCWRlbGV0ZSBub2RlOworfQorCisvLworLy8gRW50
cnkgcG9pbnQuCisvLwordm9pZCBSZW1vdmVBbGxUcmVlTm9kZXMoVEludGVybU5vZGUqIHJvb3Qp
Cit7CisgICAgUmVtb3ZlVHJlZSBpdDsKKworICAgIHJvb3QtPnRyYXZlcnNlKCZpdCk7Cit9CisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1JlbW92ZVRyZWUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1JlbW92ZVRyZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45N2E4MjE2NzljMjNmYjkyODBiM2Vk
ZjRhN2U4ZmNiZTQxNTYxNDY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUmVtb3ZlVHJlZS5oCkBAIC0wLDAgKzEsNyBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKwordm9pZCBSZW1vdmVBbGxUcmVlTm9kZXMoVEludGVybU5v
ZGUqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1JlbmFtZUZ1bmN0aW9uLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9SZW5hbWVGdW5jdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFmN2ZiMTZj
NDU5NzljZDFkYTJiZjE5ZWE4NjE3OWQyNjRkNWZmYWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZW5hbWVGdW5jdGlv
bi5oCkBAIC0wLDAgKzEsMzYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1JF
TkFNRV9GVU5DVElPTgorI2RlZmluZSBDT01QSUxFUl9SRU5BTUVfRlVOQ1RJT04KKworI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisKKy8vCisvLyBSZW5hbWVz
IGEgZnVuY3Rpb24sIGluY2x1ZGluZyBpdHMgZGVjbGFyYXRpb24gYW5kIGFueSBjYWxscyB0byBp
dC4KKy8vCitjbGFzcyBSZW5hbWVGdW5jdGlvbiA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7
CitwdWJsaWM6CisgICAgUmVuYW1lRnVuY3Rpb24oY29uc3QgVFN0cmluZyYgb2xkRnVuY3Rpb25O
YW1lLCBjb25zdCBUU3RyaW5nJiBuZXdGdW5jdGlvbk5hbWUpCisgICAgOiBUSW50ZXJtVHJhdmVy
c2VyKHRydWUsIGZhbHNlLCBmYWxzZSkKKyAgICAsIG1PbGRGdW5jdGlvbk5hbWUob2xkRnVuY3Rp
b25OYW1lKQorICAgICwgbU5ld0Z1bmN0aW9uTmFtZShuZXdGdW5jdGlvbk5hbWUpIHt9CisKKyAg
ICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdh
dGUqIG5vZGUpCisgICAgeworICAgICAgICBUT3BlcmF0b3Igb3AgPSBub2RlLT5nZXRPcCgpOwor
ICAgICAgICBpZiAoKG9wID09IEVPcEZ1bmN0aW9uIHx8IG9wID09IEVPcEZ1bmN0aW9uQ2FsbCkg
JiYgbm9kZS0+Z2V0TmFtZSgpID09IG1PbGRGdW5jdGlvbk5hbWUpCisgICAgICAgICAgICBub2Rl
LT5zZXROYW1lKG1OZXdGdW5jdGlvbk5hbWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgY29uc3QgVFN0cmluZyBtT2xkRnVuY3Rpb25OYW1lOworICAgIGNv
bnN0IFRTdHJpbmcgbU5ld0Z1bmN0aW9uTmFtZTsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJf
UkVOQU1FX0ZVTkNUSU9OCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9SZXdyaXRlRWxzZUJsb2Nrcy5jcHAgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZXdyaXRlRWxzZUJsb2Nrcy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNDhlODdjZDU3YTg4MjhhYmY2Nzc3NzlhMjI5N2NiOWIwNjMwMzJmNgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1Jld3JpdGVFbHNlQmxvY2tzLmNwcApAQCAtMCwwICsxLDk4IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKy8vIFJld3JpdGVFbHNlQmxvY2tzLmNwcDogSW1wbGVtZW50YXRpb24gZm9yIHRyZWUgdHJh
bnNmb3JtIHRvIGNoYW5nZQorLy8gICBhbGwgaWYtZWxzZSBibG9ja3MgdG8gaWYtaWYgYmxvY2tz
LgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUmV3cml0ZUVsc2VCbG9ja3Mu
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL05vZGVTZWFyY2guaCIKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgiCisKK25hbWVzcGFjZSBzaAorewor
CitUSW50ZXJtU3ltYm9sICpNYWtlTmV3VGVtcG9yYXJ5KGNvbnN0IFRTdHJpbmcgJm5hbWUsIFRC
YXNpY1R5cGUgdHlwZSkKK3sKKyAgICBUVHlwZSB2YXJpYWJsZVR5cGUodHlwZSwgRWJwSGlnaCwg
RXZxSW50ZXJuYWwpOworICAgIHJldHVybiBuZXcgVEludGVybVN5bWJvbCgtMSwgbmFtZSwgdmFy
aWFibGVUeXBlKTsKK30KKworVEludGVybUJpbmFyeSAqTWFrZU5ld0JpbmFyeShUT3BlcmF0b3Ig
b3AsIFRJbnRlcm1UeXBlZCAqbGVmdCwgVEludGVybVR5cGVkICpyaWdodCwgY29uc3QgVFR5cGUg
JnJlc3VsdFR5cGUpCit7CisgICAgVEludGVybUJpbmFyeSAqYmluYXJ5ID0gbmV3IFRJbnRlcm1C
aW5hcnkob3ApOworICAgIGJpbmFyeS0+c2V0TGVmdChsZWZ0KTsKKyAgICBiaW5hcnktPnNldFJp
Z2h0KHJpZ2h0KTsKKyAgICBiaW5hcnktPnNldFR5cGUocmVzdWx0VHlwZSk7CisgICAgcmV0dXJu
IGJpbmFyeTsKK30KKworVEludGVybVVuYXJ5ICpNYWtlTmV3VW5hcnkoVE9wZXJhdG9yIG9wLCBU
SW50ZXJtVHlwZWQgKm9wZXJhbmQpCit7CisgICAgVEludGVybVVuYXJ5ICp1bmFyeSA9IG5ldyBU
SW50ZXJtVW5hcnkob3AsIG9wZXJhbmQtPmdldFR5cGUoKSk7CisgICAgdW5hcnktPnNldE9wZXJh
bmQob3BlcmFuZCk7CisgICAgcmV0dXJuIHVuYXJ5OworfQorCitib29sIEVsc2VCbG9ja1Jld3Jp
dGVyOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSkK
K3sKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BTZXF1
ZW5jZToKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChzaXplX3Qgc3RhdGVtZW50SW5kZXgg
PSAwOyBzdGF0ZW1lbnRJbmRleCAhPSBub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKTsgc3RhdGVt
ZW50SW5kZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSAq
c3RhdGVtZW50ID0gbm9kZS0+Z2V0U2VxdWVuY2UoKVtzdGF0ZW1lbnRJbmRleF07CisgICAgICAg
ICAgICAgICAgVEludGVybVNlbGVjdGlvbiAqc2VsZWN0aW9uID0gc3RhdGVtZW50LT5nZXRBc1Nl
bGVjdGlvbk5vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlv
bi0+Z2V0RmFsc2VCbG9jaygpICE9IE5VTEwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBub2RlLT5nZXRTZXF1ZW5jZSgpW3N0YXRlbWVudEluZGV4XSA9IHJld3JpdGVT
ZWxlY3Rpb24oc2VsZWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNlbGVjdGlv
bjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitUSW50ZXJtTm9kZSAqRWxzZUJsb2NrUmV3cml0ZXI6OnJld3JpdGVTZWxlY3Rpb24o
VEludGVybVNlbGVjdGlvbiAqc2VsZWN0aW9uKQoreworICAgIEFTU0VSVChzZWxlY3Rpb24tPmdl
dEZhbHNlQmxvY2soKSAhPSBOVUxMKTsKKworICAgIFRTdHJpbmcgdGVtcG9yYXJ5TmFtZSA9ICJj
b25kXyIgKyBzdHIobVRlbXBvcmFyeUluZGV4KyspOworICAgIFRJbnRlcm1UeXBlZCAqdHlwZWRD
b25kaXRpb24gPSBzZWxlY3Rpb24tPmdldENvbmRpdGlvbigpLT5nZXRBc1R5cGVkKCk7CisgICAg
VFR5cGUgcmVzdWx0VHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQpOworICAgIFRJbnRlcm1TeW1i
b2wgKmNvbmRpdGlvblN5bWJvbEEgPSBNYWtlTmV3VGVtcG9yYXJ5KHRlbXBvcmFyeU5hbWUsIEVi
dEJvb2wpOworICAgIFRJbnRlcm1TeW1ib2wgKmNvbmRpdGlvblN5bWJvbEIgPSBNYWtlTmV3VGVt
cG9yYXJ5KHRlbXBvcmFyeU5hbWUsIEVidEJvb2wpOworICAgIFRJbnRlcm1TeW1ib2wgKmNvbmRp
dGlvblN5bWJvbEMgPSBNYWtlTmV3VGVtcG9yYXJ5KHRlbXBvcmFyeU5hbWUsIEVidEJvb2wpOwor
ICAgIFRJbnRlcm1CaW5hcnkgKnN0b3JlQ29uZGl0aW9uID0gTWFrZU5ld0JpbmFyeShFT3BJbml0
aWFsaXplLCBjb25kaXRpb25TeW1ib2xBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlZENvbmRpdGlvbiwgcmVzdWx0VHlwZSk7CisgICAgVElu
dGVybVVuYXJ5ICpuZWdhdGVkQ29uZGl0aW9uID0gTWFrZU5ld1VuYXJ5KEVPcExvZ2ljYWxOb3Qs
IGNvbmRpdGlvblN5bWJvbEIpOworICAgIFRJbnRlcm1TZWxlY3Rpb24gKmZhbHNlQmxvY2sgPSBu
ZXcgVEludGVybVNlbGVjdGlvbihuZWdhdGVkQ29uZGl0aW9uLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24tPmdldEZhbHNl
QmxvY2soKSwgTlVMTCk7CisgICAgVEludGVybVNlbGVjdGlvbiAqbmV3SWZFbHNlID0gbmV3IFRJ
bnRlcm1TZWxlY3Rpb24oY29uZGl0aW9uU3ltYm9sQywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24tPmdldFRydWVCbG9jaygp
LCBmYWxzZUJsb2NrKTsKKworICAgIFRJbnRlcm1BZ2dyZWdhdGUgKmRlY2xhcmF0aW9uID0gbmV3
IFRJbnRlcm1BZ2dyZWdhdGUoRU9wRGVjbGFyYXRpb24pOworICAgIGRlY2xhcmF0aW9uLT5nZXRT
ZXF1ZW5jZSgpLnB1c2hfYmFjayhzdG9yZUNvbmRpdGlvbik7CisKKyAgICBUSW50ZXJtQWdncmVn
YXRlICpibG9jayA9IG5ldyBUSW50ZXJtQWdncmVnYXRlKEVPcFNlcXVlbmNlKTsKKyAgICBibG9j
ay0+Z2V0U2VxdWVuY2UoKS5wdXNoX2JhY2soZGVjbGFyYXRpb24pOworICAgIGJsb2NrLT5nZXRT
ZXF1ZW5jZSgpLnB1c2hfYmFjayhuZXdJZkVsc2UpOworCisgICAgcmV0dXJuIGJsb2NrOworfQor
Cit2b2lkIFJld3JpdGVFbHNlQmxvY2tzKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIEVsc2VC
bG9ja1Jld3JpdGVyIHJld3JpdGVyOworICAgIG5vZGUtPnRyYXZlcnNlKCZyZXdyaXRlcik7Cit9
CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1Jld3JpdGVFbHNlQmxvY2tzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZXdyaXRlRWxzZUJsb2Nrcy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEw
MjIxMzM1Y2U3MGZjOTZkZjIzYTkwOGM0ZGU1YzA3NWUwNDljMWUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZXdyaXRl
RWxzZUJsb2Nrcy5oCkBAIC0wLDAgKzEsMzkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTQg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gUmV3cml0ZUVs
c2VCbG9ja3MuaDogUHJvdG90eXBlIGZvciB0cmVlIHRyYW5zZm9ybSB0byBjaGFuZ2UKKy8vICAg
YWxsIGlmLWVsc2UgYmxvY2tzIHRvIGlmLWlmIGJsb2Nrcy4KKy8vCisKKyNpZm5kZWYgQ09NUElM
RVJfUkVXUklURV9FTFNFX0JMT0NLU19IXworI2RlZmluZSBDT01QSUxFUl9SRVdSSVRFX0VMU0Vf
QkxPQ0tTX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5o
IgorCituYW1lc3BhY2Ugc2gKK3sKKworY2xhc3MgRWxzZUJsb2NrUmV3cml0ZXIgOiBwdWJsaWMg
VEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgICBFbHNlQmxvY2tSZXdyaXRlcigp
CisgICAgICAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2Up
CisgICAgICAgICAgLCBtVGVtcG9yYXJ5SW5kZXgoMCkKKyAgICAgIHt9CisKKyAgcHJvdGVjdGVk
OgorICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUg
KmFnZ3JlZ2F0ZSk7CisKKyAgcHJpdmF0ZToKKyAgICBpbnQgbVRlbXBvcmFyeUluZGV4OworCisg
ICAgVEludGVybU5vZGUgKnJld3JpdGVTZWxlY3Rpb24oVEludGVybVNlbGVjdGlvbiAqc2VsZWN0
aW9uKTsKK307CisKK3ZvaWQgUmV3cml0ZUVsc2VCbG9ja3MoVEludGVybU5vZGUgKm5vZGUpOwor
Cit9CisKKyNlbmRpZiAvLyBDT01QSUxFUl9SRVdSSVRFX0VMU0VfQkxPQ0tTX0hfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TZWFy
Y2hTeW1ib2wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvU2VhcmNoU3ltYm9sLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNzhjODRlMzcwZGFmNzNhNDYxNWYy
OGNiZWRhN2YwYjMzOTMxYzU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU2VhcmNoU3ltYm9sLmNwcApAQCAtMCwwICsx
LDM4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gU2VhcmNoU3ltYm9sIGlzIGFuIEFTVCB0cmF2
ZXJzZXIgdG8gZGV0ZWN0IHRoZSB1c2Ugb2YgYSBnaXZlbiBzeW1ib2wgbmFtZQorLy8KKworI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU2VhcmNoU3ltYm9sLmgiCisKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL0luZm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9PdXRwdXRITFNMLmgiCisKK25hbWVzcGFjZSBzaAoreworU2VhcmNoU3ltYm9sOjpTZWFy
Y2hTeW1ib2woY29uc3QgVFN0cmluZyAmc3ltYm9sKSA6IG1TeW1ib2woc3ltYm9sKQoreworICAg
IG1hdGNoID0gZmFsc2U7Cit9CisKK3ZvaWQgU2VhcmNoU3ltYm9sOjp0cmF2ZXJzZShUSW50ZXJt
Tm9kZSAqbm9kZSkKK3sKKyAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKK30KKwordm9pZCBTZWFy
Y2hTeW1ib2w6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUpCit7CisgICAg
aWYgKHN5bWJvbE5vZGUtPmdldFN5bWJvbCgpID09IG1TeW1ib2wpCisgICAgeworICAgICAgICBt
YXRjaCA9IHRydWU7CisgICAgfQorfQorCitib29sIFNlYXJjaFN5bWJvbDo6Zm91bmRNYXRjaCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1hdGNoOworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU2VhcmNoU3ltYm9sLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TZWFyY2hTeW1i
b2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44ZGRkM2NiMWFjM2ExODJkZTllMjkxZjE1MWZjM2IxZWQxYWE5OWFm
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvU2VhcmNoU3ltYm9sLmgKQEAgLTAsMCArMSwzMyBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKy8vIFNlYXJjaFN5bWJvbCBpcyBhbiBBU1QgdHJhdmVyc2VyIHRvIGRldGVjdCB0aGUg
dXNlIG9mIGEgZ2l2ZW4gc3ltYm9sIG5hbWUKKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfU0VBUkNI
U1lNQk9MX0hfCisjZGVmaW5lIENPTVBJTEVSX1NFQVJDSFNZTUJPTF9IXworCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5oIgorCituYW1lc3BhY2Ugc2gKK3sKK2NsYXNzIFNlYXJj
aFN5bWJvbCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBTZWFy
Y2hTeW1ib2woY29uc3QgVFN0cmluZyAmc3ltYm9sKTsKKworICAgIHZvaWQgdHJhdmVyc2UoVElu
dGVybU5vZGUgKm5vZGUpOworICAgIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqc3lt
Ym9sTm9kZSk7CisKKyAgICBib29sIGZvdW5kTWF0Y2goKSBjb25zdDsKKworICBwcm90ZWN0ZWQ6
CisgICAgY29uc3QgVFN0cmluZyAmbVN5bWJvbDsKKyAgICBib29sIG1hdGNoOworfTsKK30KKwor
I2VuZGlmICAgLy8gQ09NUElMRVJfU0VBUkNIU1lNQk9MX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU2hIYW5kbGUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi41NGFlMjc4NTJkZDUzMjliMGQ4ZTNkZGFjNGUwM2JjYjE4MDY1ZWNhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvU2hIYW5kbGUuaApAQCAtMCwwICsxLDE3OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2lmbmRlZiBfU0hIQU5ETEVfSU5DTFVERURfCisjZGVmaW5lIF9TSEhBTkRMRV9JTkNMVURFRF8K
KworLy8KKy8vIE1hY2hpbmUgaW5kZXBlbmRlbnQgcGFydCBvZiB0aGUgY29tcGlsZXIgcHJpdmF0
ZSBvYmplY3RzCisvLyBzZW50IGFzIFNoSGFuZGxlIHRvIHRoZSBkcml2ZXIuCisvLworLy8gVGhp
cyBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGJ5IGRyaXZlciBjb2RlLgorLy8KKworI2luY2x1ZGUg
IkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9C
dWlsdEluRnVuY3Rpb25FbXVsYXRvci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
RXh0ZW5zaW9uQmVoYXZpb3IuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0hhc2hO
YW1lcy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9WYXJpYWJsZUluZm8uaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jb21w
aWxlci9BcnJheUJvdW5kc0NsYW1wZXIuaCIKKworY2xhc3MgTG9uZ05hbWVNYXA7CitjbGFzcyBU
Q29tcGlsZXI7CitjbGFzcyBURGVwZW5kZW5jeUdyYXBoOworY2xhc3MgVHJhbnNsYXRvckhMU0w7
CisKKy8vCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gaWRlbnRpZnkgc3BlY3MgdGhhdCBhcmUgYmFz
ZWQgb24gdGhlIFdlYkdMIHNwZWMsCisvLyBsaWtlIHRoZSBDU1MgU2hhZGVycyBzcGVjLgorLy8K
K2Jvb2wgaXNXZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNwZWMgc3BlYyk7CisKKy8vCisvLyBUaGUg
YmFzZSBjbGFzcyB1c2VkIHRvIGJhY2sgaGFuZGxlcyByZXR1cm5lZCB0byB0aGUgZHJpdmVyLgor
Ly8KK2NsYXNzIFRTaEhhbmRsZUJhc2UgeworcHVibGljOgorICAgIFRTaEhhbmRsZUJhc2UoKTsK
KyAgICB2aXJ0dWFsIH5UU2hIYW5kbGVCYXNlKCk7CisgICAgdmlydHVhbCBUQ29tcGlsZXIqIGdl
dEFzQ29tcGlsZXIoKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBUcmFuc2xhdG9ySExTTCog
Z2V0QXNUcmFuc2xhdG9ySExTTCgpIHsgcmV0dXJuIDA7IH0KKworcHJvdGVjdGVkOgorICAgIC8v
IE1lbW9yeSBhbGxvY2F0b3IuIEFsbG9jYXRlcyBhbmQgdHJhY2tzIG1lbW9yeSByZXF1aXJlZCBi
eSB0aGUgY29tcGlsZXIuCisgICAgLy8gRGVhbGxvY2F0ZXMgYWxsIG1lbW9yeSB3aGVuIGNvbXBp
bGVyIGlzIGRlc3RydWN0ZWQuCisgICAgVFBvb2xBbGxvY2F0b3IgYWxsb2NhdG9yOworfTsKKwor
Ly8KKy8vIFRoZSBiYXNlIGNsYXNzIGZvciB0aGUgbWFjaGluZSBkZXBlbmRlbnQgY29tcGlsZXIg
dG8gZGVyaXZlIGZyb20KKy8vIGZvciBtYW5hZ2luZyBvYmplY3QgY29kZSBmcm9tIHRoZSBjb21w
aWxlLgorLy8KK2NsYXNzIFRDb21waWxlciA6IHB1YmxpYyBUU2hIYW5kbGVCYXNlIHsKK3B1Ymxp
YzoKKyAgICBUQ29tcGlsZXIoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjKTsK
KyAgICB2aXJ0dWFsIH5UQ29tcGlsZXIoKTsKKyAgICB2aXJ0dWFsIFRDb21waWxlciogZ2V0QXND
b21waWxlcigpIHsgcmV0dXJuIHRoaXM7IH0KKworICAgIGJvb2wgSW5pdChjb25zdCBTaEJ1aWx0
SW5SZXNvdXJjZXMmIHJlc291cmNlcyk7CisgICAgYm9vbCBjb21waWxlKGNvbnN0IGNoYXIqIGNv
bnN0IHNoYWRlclN0cmluZ3NbXSwKKyAgICAgICAgICAgICAgICAgc2l6ZV90IG51bVN0cmluZ3Ms
CisgICAgICAgICAgICAgICAgIGludCBjb21waWxlT3B0aW9ucyk7CisKKyAgICAvLyBHZXQgcmVz
dWx0cyBvZiB0aGUgbGFzdCBjb21waWxhdGlvbi4KKyAgICBUSW5mb1NpbmsmIGdldEluZm9TaW5r
KCkgeyByZXR1cm4gaW5mb1Npbms7IH0KKyAgICBjb25zdCBUVmFyaWFibGVJbmZvTGlzdCYgZ2V0
QXR0cmlicygpIGNvbnN0IHsgcmV0dXJuIGF0dHJpYnM7IH0KKyAgICBjb25zdCBUVmFyaWFibGVJ
bmZvTGlzdCYgZ2V0VW5pZm9ybXMoKSBjb25zdCB7IHJldHVybiB1bmlmb3JtczsgfQorICAgIGNv
bnN0IFRWYXJpYWJsZUluZm9MaXN0JiBnZXRWYXJ5aW5ncygpIGNvbnN0IHsgcmV0dXJuIHZhcnlp
bmdzOyB9CisgICAgaW50IGdldE1hcHBlZE5hbWVNYXhMZW5ndGgoKSBjb25zdDsKKworICAgIFNo
SGFzaEZ1bmN0aW9uNjQgZ2V0SGFzaEZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gaGFzaEZ1bmN0
aW9uOyB9CisgICAgTmFtZU1hcCYgZ2V0TmFtZU1hcCgpIHsgcmV0dXJuIG5hbWVNYXA7IH0KKyAg
ICBUU3ltYm9sVGFibGUmIGdldFN5bWJvbFRhYmxlKCkgeyByZXR1cm4gc3ltYm9sVGFibGU7IH0K
KworcHJvdGVjdGVkOgorICAgIFNoU2hhZGVyVHlwZSBnZXRTaGFkZXJUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gc2hhZGVyVHlwZTsgfQorICAgIFNoU2hhZGVyU3BlYyBnZXRTaGFkZXJTcGVjKCkgY29u
c3QgeyByZXR1cm4gc2hhZGVyU3BlYzsgfQorICAgIC8vIEluaXRpYWxpemUgc3ltYm9sLXRhYmxl
IHdpdGggYnVpbHQtaW4gc3ltYm9scy4KKyAgICBib29sIEluaXRCdWlsdEluU3ltYm9sVGFibGUo
Y29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMpOworICAgIC8vIENsZWFycyB0aGUg
cmVzdWx0cyBmcm9tIHRoZSBwcmV2aW91cyBjb21waWxhdGlvbi4KKyAgICB2b2lkIGNsZWFyUmVz
dWx0cygpOworICAgIC8vIFJldHVybiB0cnVlIGlmIGZ1bmN0aW9uIHJlY3Vyc2lvbiBpcyBkZXRl
Y3RlZCBvciBjYWxsIGRlcHRoIGV4Y2VlZGVkLgorICAgIGJvb2wgZGV0ZWN0Q2FsbERlcHRoKFRJ
bnRlcm1Ob2RlKiByb290LCBUSW5mb1NpbmsmIGluZm9TaW5rLCBib29sIGxpbWl0Q2FsbFN0YWNr
RGVwdGgpOworICAgIC8vIFJld3JpdGVzIGEgc2hhZGVyJ3MgaW50ZXJtZWRpYXRlIHRyZWUgYWNj
b3JkaW5nIHRvIHRoZSBDU1MgU2hhZGVycyBzcGVjLgorICAgIHZvaWQgcmV3cml0ZUNTU1NoYWRl
cihUSW50ZXJtTm9kZSogcm9vdCk7CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBz
aGFkZXIgZG9lcyBub3QgZXhjZWVkIHRoZSBtaW5pbXVtCisgICAgLy8gZnVuY3Rpb25hbGl0eSBt
YW5kYXRlZCBpbiBHTFNMIDEuMCBzcGVjIEFwcGVuZGl4IEEuCisgICAgYm9vbCB2YWxpZGF0ZUxp
bWl0YXRpb25zKFRJbnRlcm1Ob2RlKiByb290KTsKKyAgICAvLyBDb2xsZWN0IGluZm8gZm9yIGFs
bCBhdHRyaWJzLCB1bmlmb3JtcywgdmFyeWluZ3MuCisgICAgdm9pZCBjb2xsZWN0VmFyaWFibGVz
KFRJbnRlcm1Ob2RlKiByb290KTsKKyAgICAvLyBNYXAgbG9uZyB2YXJpYWJsZSBuYW1lcyBpbnRv
IHNob3J0ZXIgb25lcy4KKyAgICB2b2lkIG1hcExvbmdWYXJpYWJsZU5hbWVzKFRJbnRlcm1Ob2Rl
KiByb290KTsKKyAgICAvLyBUcmFuc2xhdGUgdG8gb2JqZWN0IGNvZGUuCisgICAgdmlydHVhbCB2
b2lkIHRyYW5zbGF0ZShUSW50ZXJtTm9kZSogcm9vdCkgPSAwOworICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiwgYWZ0ZXIgYXBwbHlpbmcgdGhlIHBhY2tpbmcgcnVsZXMgaW4gdGhlIEdMU0wgMS4wMTcg
c3BlYworICAgIC8vIEFwcGVuZGl4IEEsIHNlY3Rpb24gNywgdGhlIHNoYWRlciBkb2VzIG5vdCB1
c2UgdG9vIG1hbnkgdW5pZm9ybXMuCisgICAgYm9vbCBlbmZvcmNlUGFja2luZ1Jlc3RyaWN0aW9u
cygpOworICAgIC8vIEluc2VydCBzdGF0ZW1lbnRzIHRvIGluaXRpYWxpemUgdmFyeWluZ3Mgd2l0
aG91dCBzdGF0aWMgdXNlIGluIHRoZSBiZWdpbm5pbmcKKyAgICAvLyBvZiBtYWluKCkuIEl0IGlz
IHRvIHdvcmsgYXJvdW5kIGEgTWFjIGRyaXZlciB3aGVyZSBzdWNoIHZhcnlpbmdzIGluIGEgdmVy
dGV4CisgICAgLy8gc2hhZGVyIG1heSBiZSBvcHRpbWl6ZWQgb3V0IGluY29ycmVjdGx5IGF0IGNv
bXBpbGUgdGltZSwgY2F1c2luZyBhIGxpbmsgZmFpbHVyZS4KKyAgICAvLyBUaGlzIGZ1bmN0aW9u
IHNob3VsZCBvbmx5IGJlIGFwcGxpZWQgdG8gdmVydGV4IHNoYWRlcnMuCisgICAgdm9pZCBpbml0
aWFsaXplVmFyeWluZ3NXaXRob3V0U3RhdGljVXNlKFRJbnRlcm1Ob2RlKiByb290KTsKKyAgICAv
LyBJbnNlcnQgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApIHRvIHRoZSBiZWdpbm5pbmcgb2Yg
bWFpbigpLgorICAgIC8vIEl0IGlzIHRvIHdvcmsgYXJvdW5kIGEgTGludXggZHJpdmVyIGJ1ZyB3
aGVyZSBtaXNzaW5nIHRoaXMgY2F1c2VzIGNvbXBpbGUgZmFpbHVyZQorICAgIC8vIHdoaWxlIHNw
ZWMgc2F5cyBpdCBpcyBhbGxvd2VkLgorICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkg
YmUgYXBwbGllZCB0byB2ZXJ0ZXggc2hhZGVycy4KKyAgICB2b2lkIGluaXRpYWxpemVHTFBvc2l0
aW9uKFRJbnRlcm1Ob2RlKiByb290KTsKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRl
ciBwYXNzZXMgdGhlIHJlc3RyaWN0aW9ucyB0aGF0IGFpbSB0byBwcmV2ZW50IHRpbWluZyBhdHRh
Y2tzLgorICAgIGJvb2wgZW5mb3JjZVRpbWluZ1Jlc3RyaWN0aW9ucyhUSW50ZXJtTm9kZSogcm9v
dCwgYm9vbCBvdXRwdXRHcmFwaCk7CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzaGFkZXIg
ZG9lcyBub3QgdXNlIHNhbXBsZXJzLgorICAgIGJvb2wgZW5mb3JjZVZlcnRleFNoYWRlclRpbWlu
Z1Jlc3RyaWN0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCk7CisgICAgLy8gUmV0dXJucyB0cnVlIGlm
IHRoZSBzaGFkZXIgZG9lcyBub3QgdXNlIHNhbXBsZXIgZGVwZW5kZW50IHZhbHVlcyB0byBhZmZl
Y3QgY29udHJvbCAKKyAgICAvLyBmbG93IG9yIGluIG9wZXJhdGlvbnMgd2hvc2UgdGltZSBjYW4g
ZGVwZW5kIG9uIHRoZSBpbnB1dCB2YWx1ZXMuCisgICAgYm9vbCBlbmZvcmNlRnJhZ21lbnRTaGFk
ZXJUaW1pbmdSZXN0cmljdGlvbnMoY29uc3QgVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpOworICAg
IC8vIFJldHVybiB0cnVlIGlmIHRoZSBtYXhpbXVtIGV4cHJlc3Npb24gY29tcGxleGl0eSBiZWxv
dyB0aGUgbGltaXQuCisgICAgYm9vbCBsaW1pdEV4cHJlc3Npb25Db21wbGV4aXR5KFRJbnRlcm1O
b2RlKiByb290KTsKKyAgICAvLyBHZXQgYnVpbHQtaW4gZXh0ZW5zaW9ucyB3aXRoIGRlZmF1bHQg
YmVoYXZpb3IuCisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBnZXRFeHRlbnNpb25CZWhh
dmlvcigpIGNvbnN0OworICAgIC8vIEdldCB0aGUgcmVzb3VyY2VzIHNldCBieSBJbml0QnVpbHRJ
blN5bWJvbFRhYmxlCisgICAgY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiBnZXRSZXNvdXJjZXMo
KSBjb25zdDsKKworICAgIGNvbnN0IEFycmF5Qm91bmRzQ2xhbXBlciYgZ2V0QXJyYXlCb3VuZHND
bGFtcGVyKCkgY29uc3Q7CisgICAgU2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBnZXRBcnJh
eUluZGV4Q2xhbXBpbmdTdHJhdGVneSgpIGNvbnN0OworICAgIGNvbnN0IEJ1aWx0SW5GdW5jdGlv
bkVtdWxhdG9yJiBnZXRCdWlsdEluRnVuY3Rpb25FbXVsYXRvcigpIGNvbnN0OworCitwcml2YXRl
OgorICAgIFNoU2hhZGVyVHlwZSBzaGFkZXJUeXBlOworICAgIFNoU2hhZGVyU3BlYyBzaGFkZXJT
cGVjOworCisgICAgaW50IG1heFVuaWZvcm1WZWN0b3JzOworICAgIGludCBtYXhFeHByZXNzaW9u
Q29tcGxleGl0eTsKKyAgICBpbnQgbWF4Q2FsbFN0YWNrRGVwdGg7CisKKyAgICBTaEJ1aWx0SW5S
ZXNvdXJjZXMgY29tcGlsZVJlc291cmNlczsKKworICAgIC8vIEJ1aWx0LWluIHN5bWJvbCB0YWJs
ZSBmb3IgdGhlIGdpdmVuIGxhbmd1YWdlLCBzcGVjLCBhbmQgcmVzb3VyY2VzLgorICAgIC8vIEl0
IGlzIHByZXNlcnZlZCBmcm9tIGNvbXBpbGUtdG8tY29tcGlsZS4KKyAgICBUU3ltYm9sVGFibGUg
c3ltYm9sVGFibGU7CisgICAgLy8gQnVpbHQtaW4gZXh0ZW5zaW9ucyB3aXRoIGRlZmF1bHQgYmVo
YXZpb3IuCisgICAgVEV4dGVuc2lvbkJlaGF2aW9yIGV4dGVuc2lvbkJlaGF2aW9yOworICAgIGJv
b2wgZnJhZ21lbnRQcmVjaXNpb25IaWdoOworCisgICAgQXJyYXlCb3VuZHNDbGFtcGVyIGFycmF5
Qm91bmRzQ2xhbXBlcjsKKyAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IGNsYW1waW5n
U3RyYXRlZ3k7CisgICAgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IgYnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3I7CisKKyAgICAvLyBSZXN1bHRzIG9mIGNvbXBpbGF0aW9uLgorICAgIFRJbmZvU2luayBp
bmZvU2luazsgIC8vIE91dHB1dCBzaW5rLgorICAgIFRWYXJpYWJsZUluZm9MaXN0IGF0dHJpYnM7
ICAvLyBBY3RpdmUgYXR0cmlidXRlcyBpbiB0aGUgY29tcGlsZWQgc2hhZGVyLgorICAgIFRWYXJp
YWJsZUluZm9MaXN0IHVuaWZvcm1zOyAgLy8gQWN0aXZlIHVuaWZvcm1zIGluIHRoZSBjb21waWxl
ZCBzaGFkZXIuCisgICAgVFZhcmlhYmxlSW5mb0xpc3QgdmFyeWluZ3M7ICAvLyBWYXJ5aW5ncyBp
biB0aGUgY29tcGlsZWQgc2hhZGVyLgorCisgICAgLy8gQ2FjaGVkIGNvcHkgb2YgdGhlIHJlZi1j
b3VudGVkIHNpbmdsZXRvbi4KKyAgICBMb25nTmFtZU1hcCogbG9uZ05hbWVNYXA7CisKKyAgICAv
LyBuYW1lIGhhc2hpbmcuCisgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb247CisgICAg
TmFtZU1hcCBuYW1lTWFwOworfTsKKworLy8KKy8vIFRoaXMgaXMgdGhlIGludGVyZmFjZSBiZXR3
ZWVuIHRoZSBtYWNoaW5lIGluZGVwZW5kZW50IGNvZGUKKy8vIGFuZCB0aGUgbWFjaGluZSBkZXBl
bmRlbnQgY29kZS4KKy8vCisvLyBUaGUgbWFjaGluZSBkZXBlbmRlbnQgY29kZSBzaG91bGQgZGVy
aXZlIGZyb20gdGhlIGNsYXNzZXMKKy8vIGFib3ZlLiBUaGVuIENvbnN0cnVjdCooKSBhbmQgRGVs
ZXRlKigpIHdpbGwgY3JlYXRlIGFuZCAKKy8vIGRlc3Ryb3kgdGhlIG1hY2hpbmUgZGVwZW5kZW50
IG9iamVjdHMsIHdoaWNoIGNvbnRhaW4gdGhlCisvLyBhYm92ZSBtYWNoaW5lIGluZGVwZW5kZW50
IGluZm9ybWF0aW9uLgorLy8KK1RDb21waWxlciogQ29uc3RydWN0Q29tcGlsZXIoCisgICAgU2hT
aGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBTaFNoYWRlck91dHB1dCBvdXRwdXQp
Owordm9pZCBEZWxldGVDb21waWxlcihUQ29tcGlsZXIqKTsKKworI2VuZGlmIC8vIF9TSEhBTkRM
RV9JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1NoYWRlckxhbmcuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU2hhZGVyTGFuZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjA4MjM3
ODYwYzE1ODE2ZTdmNDlhZDI1NWViYWYwNTdmNGJjZjczMgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1NoYWRlckxhbmcu
Y3BwCkBAIC0wLDAgKzEsMzkwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLworLy8gSW1wbGVt
ZW50IHRoZSB0b3AtbGV2ZWwgb2YgaW50ZXJmYWNlIHRvIHRoZSBjb21waWxlciwKKy8vIGFzIGRl
ZmluZWQgaW4gU2hhZGVyTGFuZy5oCisvLworCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5n
LmgiCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVEbGwuaCIKKyNp
bmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvbGVuZ3RoX2xpbWl0cy5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvU2hIYW5kbGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JITFNMLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9W
YXJpYWJsZVBhY2tlci5oIgorCisvLworLy8gVGhpcyBpcyB0aGUgcGxhdGZvcm0gaW5kZXBlbmRl
bnQgaW50ZXJmYWNlIGJldHdlZW4gYW4gT0dMIGRyaXZlcgorLy8gYW5kIHRoZSBzaGFkaW5nIGxh
bmd1YWdlIGNvbXBpbGVyLgorLy8KKworc3RhdGljIGJvb2wgY2hlY2tWYXJpYWJsZU1heExlbmd0
aHMoY29uc3QgU2hIYW5kbGUgaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IGV4cGVjdGVkVmFsdWUpCit7CisgICAgc2l6ZV90IGFjdGl2ZVVuaWZvcm1M
aW1pdCA9IDA7CisgICAgU2hHZXRJbmZvKGhhbmRsZSwgU0hfQUNUSVZFX1VOSUZPUk1fTUFYX0xF
TkdUSCwgJmFjdGl2ZVVuaWZvcm1MaW1pdCk7CisgICAgc2l6ZV90IGFjdGl2ZUF0dHJpYkxpbWl0
ID0gMDsKKyAgICBTaEdldEluZm8oaGFuZGxlLCBTSF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5H
VEgsICZhY3RpdmVBdHRyaWJMaW1pdCk7CisgICAgc2l6ZV90IHZhcnlpbmdMaW1pdCA9IDA7Cisg
ICAgU2hHZXRJbmZvKGhhbmRsZSwgU0hfVkFSWUlOR19NQVhfTEVOR1RILCAmdmFyeWluZ0xpbWl0
KTsKKyAgICByZXR1cm4gKGV4cGVjdGVkVmFsdWUgPT0gYWN0aXZlVW5pZm9ybUxpbWl0ICYmCisg
ICAgICAgICAgICBleHBlY3RlZFZhbHVlID09IGFjdGl2ZUF0dHJpYkxpbWl0ICYmCisgICAgICAg
ICAgICBleHBlY3RlZFZhbHVlID09IHZhcnlpbmdMaW1pdCk7Cit9CisKK3N0YXRpYyBib29sIGNo
ZWNrTWFwcGVkTmFtZU1heExlbmd0aChjb25zdCBTaEhhbmRsZSBoYW5kbGUsIHNpemVfdCBleHBl
Y3RlZFZhbHVlKQoreworICAgIHNpemVfdCBtYXBwZWROYW1lTWF4TGVuZ3RoID0gMDsKKyAgICBT
aEdldEluZm8oaGFuZGxlLCBTSF9NQVBQRURfTkFNRV9NQVhfTEVOR1RILCAmbWFwcGVkTmFtZU1h
eExlbmd0aCk7CisgICAgcmV0dXJuIChleHBlY3RlZFZhbHVlID09IG1hcHBlZE5hbWVNYXhMZW5n
dGgpOworfQorCisvLworLy8gRHJpdmVyIG11c3QgY2FsbCB0aGlzIGZpcnN0LCBvbmNlLCBiZWZv
cmUgZG9pbmcgYW55IG90aGVyIGNvbXBpbGVyIG9wZXJhdGlvbnMuCisvLyBTdWJzZXF1ZW50IGNh
bGxzIHRvIHRoaXMgZnVuY3Rpb24gYXJlIG5vLW9wLgorLy8KK2ludCBTaEluaXRpYWxpemUoKQor
eworICAgIHN0YXRpYyBjb25zdCBib29sIGtJbml0aWFsaXplZCA9IEluaXRQcm9jZXNzKCk7Cisg
ICAgcmV0dXJuIGtJbml0aWFsaXplZCA/IDEgOiAwOworfQorCisvLworLy8gQ2xlYW51cCBzeW1i
b2wgdGFibGVzCisvLworaW50IFNoRmluYWxpemUoKQoreworICAgIERldGFjaFByb2Nlc3MoKTsK
KyAgICByZXR1cm4gMTsKK30KKworLy8KKy8vIEluaXRpYWxpemUgYnVpbHQtaW4gcmVzb3VyY2Vz
IHdpdGggbWluaW11bSBleHBlY3RlZCB2YWx1ZXMuCisvLwordm9pZCBTaEluaXRCdWlsdEluUmVz
b3VyY2VzKFNoQnVpbHRJblJlc291cmNlcyogcmVzb3VyY2VzKQoreworICAgIC8vIENvbnN0YW50
cy4KKyAgICByZXNvdXJjZXMtPk1heFZlcnRleEF0dHJpYnMgPSA4OworICAgIHJlc291cmNlcy0+
TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMgPSAxMjg7CisgICAgcmVzb3VyY2VzLT5NYXhWYXJ5aW5n
VmVjdG9ycyA9IDg7CisgICAgcmVzb3VyY2VzLT5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyA9
IDA7CisgICAgcmVzb3VyY2VzLT5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gODsKKyAg
ICByZXNvdXJjZXMtPk1heFRleHR1cmVJbWFnZVVuaXRzID0gODsKKyAgICByZXNvdXJjZXMtPk1h
eEZyYWdtZW50VW5pZm9ybVZlY3RvcnMgPSAxNjsKKyAgICByZXNvdXJjZXMtPk1heERyYXdCdWZm
ZXJzID0gMTsKKworICAgIC8vIEV4dGVuc2lvbnMuCisgICAgcmVzb3VyY2VzLT5PRVNfc3RhbmRh
cmRfZGVyaXZhdGl2ZXMgPSAwOworICAgIHJlc291cmNlcy0+T0VTX0VHTF9pbWFnZV9leHRlcm5h
bCA9IDA7CisgICAgcmVzb3VyY2VzLT5BUkJfdGV4dHVyZV9yZWN0YW5nbGUgPSAwOworICAgIHJl
c291cmNlcy0+RVhUX2RyYXdfYnVmZmVycyA9IDA7CisgICAgcmVzb3VyY2VzLT5FWFRfZnJhZ19k
ZXB0aCA9IDA7CisKKyAgICAvLyBEaXNhYmxlIGhpZ2hwIHByZWNpc2lvbiBpbiBmcmFnbWVudCBz
aGFkZXIgYnkgZGVmYXVsdC4KKyAgICByZXNvdXJjZXMtPkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9
IDA7CisKKyAgICAvLyBEaXNhYmxlIG5hbWUgaGFzaGluZyBieSBkZWZhdWx0LgorICAgIHJlc291
cmNlcy0+SGFzaEZ1bmN0aW9uID0gTlVMTDsKKworICAgIHJlc291cmNlcy0+QXJyYXlJbmRleENs
YW1waW5nU3RyYXRlZ3kgPSBTSF9DTEFNUF9XSVRIX0NMQU1QX0lOVFJJTlNJQzsKKworICAgIHJl
c291cmNlcy0+TWF4RXhwcmVzc2lvbkNvbXBsZXhpdHkgPSAyNTY7CisgICAgcmVzb3VyY2VzLT5N
YXhDYWxsU3RhY2tEZXB0aCA9IDI1NjsKK30KKworLy8KKy8vIERyaXZlciBjYWxscyB0aGVzZSB0
byBjcmVhdGUgYW5kIGRlc3Ryb3kgY29tcGlsZXIgb2JqZWN0cy4KKy8vCitTaEhhbmRsZSBTaENv
bnN0cnVjdENvbXBpbGVyKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hTaGFkZXJPdXRwdXQgb3V0cHV0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMqIHJlc291cmNl
cykKK3sKKyAgICBUU2hIYW5kbGVCYXNlKiBiYXNlID0gc3RhdGljX2Nhc3Q8VFNoSGFuZGxlQmFz
ZSo+KENvbnN0cnVjdENvbXBpbGVyKHR5cGUsIHNwZWMsIG91dHB1dCkpOworICAgIFRDb21waWxl
ciogY29tcGlsZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7CisgICAgaWYgKGNvbXBpbGVyID09
IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gR2VuZXJhdGUgYnVpbHQtaW4gc3ltYm9s
IHRhYmxlLgorICAgIGlmICghY29tcGlsZXItPkluaXQoKnJlc291cmNlcykpIHsKKyAgICAgICAg
U2hEZXN0cnVjdChiYXNlKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2UpOworfQorCit2b2lkIFNoRGVzdHJ1Y3QoU2hI
YW5kbGUgaGFuZGxlKQoreworICAgIGlmIChoYW5kbGUgPT0gMCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHN0YXRpY19jYXN0PFRTaEhhbmRsZUJhc2UqPiho
YW5kbGUpOworCisgICAgaWYgKGJhc2UtPmdldEFzQ29tcGlsZXIoKSkKKyAgICAgICAgRGVsZXRl
Q29tcGlsZXIoYmFzZS0+Z2V0QXNDb21waWxlcigpKTsKK30KKworLy8KKy8vIERvIGFuIGFjdHVh
bCBjb21waWxlIG9uIHRoZSBnaXZlbiBzdHJpbmdzLiAgVGhlIHJlc3VsdCBpcyBsZWZ0IAorLy8g
aW4gdGhlIGdpdmVuIGNvbXBpbGUgb2JqZWN0LgorLy8KKy8vIFJldHVybjogIFRoZSByZXR1cm4g
dmFsdWUgb2YgU2hDb21waWxlIGlzIHJlYWxseSBib29sZWFuLCBpbmRpY2F0aW5nCisvLyBzdWNj
ZXNzIG9yIGZhaWx1cmUuCisvLworaW50IFNoQ29tcGlsZSgKKyAgICBjb25zdCBTaEhhbmRsZSBo
YW5kbGUsCisgICAgY29uc3QgY2hhciogY29uc3Qgc2hhZGVyU3RyaW5nc1tdLAorICAgIHNpemVf
dCBudW1TdHJpbmdzLAorICAgIGludCBjb21waWxlT3B0aW9ucykKK3sKKyAgICBpZiAoaGFuZGxl
ID09IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8VFNoSGFuZGxlQmFzZSo+KGhhbmRsZSk7CisgICAgVENvbXBpbGVyKiBj
b21waWxlciA9IGJhc2UtPmdldEFzQ29tcGlsZXIoKTsKKyAgICBpZiAoY29tcGlsZXIgPT0gMCkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBib29sIHN1Y2Nlc3MgPSBjb21waWxlci0+Y29tcGls
ZShzaGFkZXJTdHJpbmdzLCBudW1TdHJpbmdzLCBjb21waWxlT3B0aW9ucyk7CisgICAgcmV0dXJu
IHN1Y2Nlc3MgPyAxIDogMDsKK30KKwordm9pZCBTaEdldEluZm8oY29uc3QgU2hIYW5kbGUgaGFu
ZGxlLCBTaFNoYWRlckluZm8gcG5hbWUsIHNpemVfdCogcGFyYW1zKQoreworICAgIGlmICghaGFu
ZGxlIHx8ICFwYXJhbXMpCisgICAgICAgIHJldHVybjsKKworICAgIFRTaEhhbmRsZUJhc2UqIGJh
c2UgPSBzdGF0aWNfY2FzdDxUU2hIYW5kbGVCYXNlKj4oaGFuZGxlKTsKKyAgICBUQ29tcGlsZXIq
IGNvbXBpbGVyID0gYmFzZS0+Z2V0QXNDb21waWxlcigpOworICAgIGlmICghY29tcGlsZXIpIHJl
dHVybjsKKworICAgIHN3aXRjaChwbmFtZSkKKyAgICB7CisgICAgY2FzZSBTSF9JTkZPX0xPR19M
RU5HVEg6CisgICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0SW5mb1NpbmsoKS5pbmZvLnNp
emUoKSArIDE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hfT0JKRUNUX0NPREVfTEVOR1RI
OgorICAgICAgICAqcGFyYW1zID0gY29tcGlsZXItPmdldEluZm9TaW5rKCkub2JqLnNpemUoKSAr
IDE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hfQUNUSVZFX1VOSUZPUk1TOgorICAgICAg
ICAqcGFyYW1zID0gY29tcGlsZXItPmdldFVuaWZvcm1zKCkuc2l6ZSgpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFNIX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEg6CisgICAgICAgICpwYXJh
bXMgPSAxICsgIE1BWF9TWU1CT0xfTkFNRV9MRU47CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
U0hfQUNUSVZFX0FUVFJJQlVURVM6CisgICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0QXR0
cmlicygpLnNpemUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSF9BQ1RJVkVfQVRUUklC
VVRFX01BWF9MRU5HVEg6CisgICAgICAgICpwYXJhbXMgPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xF
TjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSF9WQVJZSU5HUzoKKyAgICAgICAgKnBhcmFt
cyA9IGNvbXBpbGVyLT5nZXRWYXJ5aW5ncygpLnNpemUoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBTSF9WQVJZSU5HX01BWF9MRU5HVEg6CisgICAgICAgICpwYXJhbXMgPSAxICsgTUFYX1NZ
TUJPTF9OQU1FX0xFTjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSF9NQVBQRURfTkFNRV9N
QVhfTEVOR1RIOgorICAgICAgICAvLyBVc2UgbG9uZ2VyIGxlbmd0aCB0aGFuIE1BWF9TSE9SVEVO
RURfSURFTlRJRklFUl9TSVpFIHRvCisgICAgICAgIC8vIGhhbmRsZSBhcnJheSBhbmQgc3RydWN0
IGRlcmVmZXJlbmNlcy4KKyAgICAgICAgKnBhcmFtcyA9IDEgKyBNQVhfU1lNQk9MX05BTUVfTEVO
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNIX05BTUVfTUFYX0xFTkdUSDoKKyAgICAgICAg
KnBhcmFtcyA9IDEgKyBNQVhfU1lNQk9MX05BTUVfTEVOOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFNIX0hBU0hFRF9OQU1FX01BWF9MRU5HVEg6CisgICAgICAgIGlmIChjb21waWxlci0+Z2V0
SGFzaEZ1bmN0aW9uKCkgPT0gTlVMTCkgeworICAgICAgICAgICAgKnBhcmFtcyA9IDA7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyA2NCBiaXRzIGhhc2hpbmcgb3V0cHV0IHJlcXVp
cmVzIDE2IGJ5dGVzIGZvciBoZXggCisgICAgICAgICAgICAvLyByZXByZXNlbnRhdGlvbi4KKyAg
ICAgICAgICAgIGNvbnN0IGNoYXIgSGFzaGVkTmFtZVByZWZpeFtdID0gSEFTSEVEX05BTUVfUFJF
RklYOworICAgICAgICAgICAgKnBhcmFtcyA9IDE2ICsgc2l6ZW9mKEhhc2hlZE5hbWVQcmVmaXgp
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hfSEFTSEVEX05BTUVTX0NP
VU5UOgorICAgICAgICAqcGFyYW1zID0gY29tcGlsZXItPmdldE5hbWVNYXAoKS5zaXplKCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorfQorCisv
LworLy8gUmV0dXJuIGFueSBjb21waWxlciBsb2cgb2YgbWVzc2FnZXMgZm9yIHRoZSBhcHBsaWNh
dGlvbi4KKy8vCit2b2lkIFNoR2V0SW5mb0xvZyhjb25zdCBTaEhhbmRsZSBoYW5kbGUsIGNoYXIq
IGluZm9Mb2cpCit7CisgICAgaWYgKCFoYW5kbGUgfHwgIWluZm9Mb2cpCisgICAgICAgIHJldHVy
bjsKKworICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2FzdDxUU2hIYW5kbGVCYXNl
Kj4oaGFuZGxlKTsKKyAgICBUQ29tcGlsZXIqIGNvbXBpbGVyID0gYmFzZS0+Z2V0QXNDb21waWxl
cigpOworICAgIGlmICghY29tcGlsZXIpIHJldHVybjsKKworICAgIFRJbmZvU2luayYgaW5mb1Np
bmsgPSBjb21waWxlci0+Z2V0SW5mb1NpbmsoKTsKKyAgICBzdHJjcHkoaW5mb0xvZywgaW5mb1Np
bmsuaW5mby5jX3N0cigpKTsKK30KKworLy8KKy8vIFJldHVybiBhbnkgb2JqZWN0IGNvZGUuCisv
Lwordm9pZCBTaEdldE9iamVjdENvZGUoY29uc3QgU2hIYW5kbGUgaGFuZGxlLCBjaGFyKiBvYmpD
b2RlKQoreworICAgIGlmICghaGFuZGxlIHx8ICFvYmpDb2RlKQorICAgICAgICByZXR1cm47CisK
KyAgICBUU2hIYW5kbGVCYXNlKiBiYXNlID0gc3RhdGljX2Nhc3Q8VFNoSGFuZGxlQmFzZSo+KGhh
bmRsZSk7CisgICAgVENvbXBpbGVyKiBjb21waWxlciA9IGJhc2UtPmdldEFzQ29tcGlsZXIoKTsK
KyAgICBpZiAoIWNvbXBpbGVyKSByZXR1cm47CisKKyAgICBUSW5mb1NpbmsmIGluZm9TaW5rID0g
Y29tcGlsZXItPmdldEluZm9TaW5rKCk7CisgICAgc3RyY3B5KG9iakNvZGUsIGluZm9TaW5rLm9i
ai5jX3N0cigpKTsKK30KKwordm9pZCBTaEdldFZhcmlhYmxlSW5mbyhjb25zdCBTaEhhbmRsZSBo
YW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgIFNoU2hhZGVySW5mbyB2YXJUeXBlLAorICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCogbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHNpemUsCisgICAgICAg
ICAgICAgICAgICAgICAgIFNoRGF0YVR5cGUqIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAg
IFNoUHJlY2lzaW9uVHlwZSogcHJlY2lzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQq
IHN0YXRpY1VzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY2hhciogbmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciogbWFwcGVkTmFtZSkKK3sKKyAgICBpZiAoIWhhbmRsZSB8fCAh
c2l6ZSB8fCAhdHlwZSB8fCAhcHJlY2lzaW9uIHx8ICFzdGF0aWNVc2UgfHwgIW5hbWUpCisgICAg
ICAgIHJldHVybjsKKyAgICBBU1NFUlQoKHZhclR5cGUgPT0gU0hfQUNUSVZFX0FUVFJJQlVURVMp
IHx8CisgICAgICAgICAgICh2YXJUeXBlID09IFNIX0FDVElWRV9VTklGT1JNUykgfHwKKyAgICAg
ICAgICAgKHZhclR5cGUgPT0gU0hfVkFSWUlOR1MpKTsKKworICAgIFRTaEhhbmRsZUJhc2UqIGJh
c2UgPSByZWludGVycHJldF9jYXN0PFRTaEhhbmRsZUJhc2UqPihoYW5kbGUpOworICAgIFRDb21w
aWxlciogY29tcGlsZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7CisgICAgaWYgKGNvbXBpbGVy
ID09IDApCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IFRWYXJpYWJsZUluZm9MaXN0JiB2
YXJMaXN0ID0KKyAgICAgICAgdmFyVHlwZSA9PSBTSF9BQ1RJVkVfQVRUUklCVVRFUyA/IGNvbXBp
bGVyLT5nZXRBdHRyaWJzKCkgOgorICAgICAgICAgICAgKHZhclR5cGUgPT0gU0hfQUNUSVZFX1VO
SUZPUk1TID8gY29tcGlsZXItPmdldFVuaWZvcm1zKCkgOgorICAgICAgICAgICAgICAgIGNvbXBp
bGVyLT5nZXRWYXJ5aW5ncygpKTsKKyAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHN0YXRp
Y19jYXN0PGludD4odmFyTGlzdC5zaXplKCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25z
dCBUVmFyaWFibGVJbmZvJiB2YXJJbmZvID0gdmFyTGlzdFtpbmRleF07CisgICAgaWYgKGxlbmd0
aCkgKmxlbmd0aCA9IHZhckluZm8ubmFtZS5zaXplKCk7CisgICAgKnNpemUgPSB2YXJJbmZvLnNp
emU7CisgICAgKnR5cGUgPSB2YXJJbmZvLnR5cGU7CisgICAgc3dpdGNoICh2YXJJbmZvLnByZWNp
c2lvbikgeworICAgIGNhc2UgRWJwTG93OgorICAgICAgICAqcHJlY2lzaW9uID0gU0hfUFJFQ0lT
SU9OX0xPV1A7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRWJwTWVkaXVtOgorICAgICAgICAq
cHJlY2lzaW9uID0gU0hfUFJFQ0lTSU9OX01FRElVTVA7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRWJwSGlnaDoKKyAgICAgICAgKnByZWNpc2lvbiA9IFNIX1BSRUNJU0lPTl9ISUdIUDsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gU29tZSB0eXBlcyBkb2VzIG5v
dCBzdXBwb3J0IHByZWNpc2lvbiwgZm9yIGV4YW1wbGUsIGJvb2xlYW4uCisgICAgICAgICpwcmVj
aXNpb24gPSBTSF9QUkVDSVNJT05fVU5ERUZJTkVEOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgKnN0YXRpY1VzZSA9IHZhckluZm8uc3RhdGljVXNlID8gMSA6IDA7CisKKyAgICAvLyBUaGlz
IHNpemUgbXVzdCBtYXRjaCB0aGF0IHF1ZXJpZWQgYnkKKyAgICAvLyBTSF9BQ1RJVkVfVU5JRk9S
TV9NQVhfTEVOR1RILCBTSF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsIFNIX1ZBUllJTkdf
TUFYX0xFTkdUSAorICAgIC8vIGluIFNoR2V0SW5mbywgYmVsb3cuCisgICAgc2l6ZV90IHZhcmlh
YmxlTGVuZ3RoID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CisgICAgQVNTRVJUKGNoZWNrVmFy
aWFibGVNYXhMZW5ndGhzKGhhbmRsZSwgdmFyaWFibGVMZW5ndGgpKTsKKyAgICBzdHJuY3B5KG5h
bWUsIHZhckluZm8ubmFtZS5jX3N0cigpLCB2YXJpYWJsZUxlbmd0aCk7CisgICAgbmFtZVt2YXJp
YWJsZUxlbmd0aCAtIDFdID0gMDsKKyAgICBpZiAobWFwcGVkTmFtZSkgeworICAgICAgICAvLyBU
aGlzIHNpemUgbXVzdCBtYXRjaCB0aGF0IHF1ZXJpZWQgYnkKKyAgICAgICAgLy8gU0hfTUFQUEVE
X05BTUVfTUFYX0xFTkdUSCBpbiBTaEdldEluZm8sIGJlbG93LgorICAgICAgICBzaXplX3QgbWF4
TWFwcGVkTmFtZUxlbmd0aCA9IDEgKyBNQVhfU1lNQk9MX05BTUVfTEVOOworICAgICAgICBBU1NF
UlQoY2hlY2tNYXBwZWROYW1lTWF4TGVuZ3RoKGhhbmRsZSwgbWF4TWFwcGVkTmFtZUxlbmd0aCkp
OworICAgICAgICBzdHJuY3B5KG1hcHBlZE5hbWUsIHZhckluZm8ubWFwcGVkTmFtZS5jX3N0cigp
LCBtYXhNYXBwZWROYW1lTGVuZ3RoKTsKKyAgICAgICAgbWFwcGVkTmFtZVttYXhNYXBwZWROYW1l
TGVuZ3RoIC0gMV0gPSAwOworICAgIH0KK30KKwordm9pZCBTaEdldE5hbWVIYXNoaW5nRW50cnko
Y29uc3QgU2hIYW5kbGUgaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
ZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogbmFtZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYXIqIGhhc2hlZE5hbWUpCit7CisgICAgaWYgKCFoYW5kbGUgfHwg
IW5hbWUgfHwgIWhhc2hlZE5hbWUgfHwgaW5kZXggPCAwKQorICAgICAgICByZXR1cm47CisKKyAg
ICBUU2hIYW5kbGVCYXNlKiBiYXNlID0gc3RhdGljX2Nhc3Q8VFNoSGFuZGxlQmFzZSo+KGhhbmRs
ZSk7CisgICAgVENvbXBpbGVyKiBjb21waWxlciA9IGJhc2UtPmdldEFzQ29tcGlsZXIoKTsKKyAg
ICBpZiAoIWNvbXBpbGVyKSByZXR1cm47CisKKyAgICBjb25zdCBOYW1lTWFwJiBuYW1lTWFwID0g
Y29tcGlsZXItPmdldE5hbWVNYXAoKTsKKyAgICBpZiAoaW5kZXggPj0gc3RhdGljX2Nhc3Q8aW50
PihuYW1lTWFwLnNpemUoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIE5hbWVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbmFtZU1hcC5iZWdpbigpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
aW5kZXg7ICsraSkKKyAgICAgICAgKytpdDsKKworICAgIHNpemVfdCBsZW4gPSBpdC0+Zmlyc3Qu
bGVuZ3RoKCkgKyAxOworICAgIHNpemVfdCBtYXhfbGVuID0gMDsKKyAgICBTaEdldEluZm8oaGFu
ZGxlLCBTSF9OQU1FX01BWF9MRU5HVEgsICZtYXhfbGVuKTsKKyAgICBpZiAobGVuID4gbWF4X2xl
bikgeworICAgICAgICBBU1NFUlQoZmFsc2UpOworICAgICAgICBsZW4gPSBtYXhfbGVuOworICAg
IH0KKyAgICBzdHJuY3B5KG5hbWUsIGl0LT5maXJzdC5jX3N0cigpLCBsZW4pOworICAgIC8vIFRv
IGJlIG9uIHRoZSBzYWZlIHNpZGUgaW4gY2FzZSB0aGUgc291cmNlIGlzIGxvbmdlciB0aGFuIGV4
cGVjdGVkLgorICAgIG5hbWVbbGVuIC0gMV0gPSAnXDAnOworCisgICAgbGVuID0gaXQtPnNlY29u
ZC5sZW5ndGgoKSArIDE7CisgICAgbWF4X2xlbiA9IDA7CisgICAgU2hHZXRJbmZvKGhhbmRsZSwg
U0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSCwgJm1heF9sZW4pOworICAgIGlmIChsZW4gPiBtYXhf
bGVuKSB7CisgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgIGxlbiA9IG1heF9sZW47Cisg
ICAgfQorICAgIHN0cm5jcHkoaGFzaGVkTmFtZSwgaXQtPnNlY29uZC5jX3N0cigpLCBsZW4pOwor
ICAgIC8vIFRvIGJlIG9uIHRoZSBzYWZlIHNpZGUgaW4gY2FzZSB0aGUgc291cmNlIGlzIGxvbmdl
ciB0aGFuIGV4cGVjdGVkLgorICAgIGhhc2hlZE5hbWVbbGVuIC0gMV0gPSAnXDAnOworfQorCit2
b2lkIFNoR2V0SW5mb1BvaW50ZXIoY29uc3QgU2hIYW5kbGUgaGFuZGxlLCBTaFNoYWRlckluZm8g
cG5hbWUsIHZvaWQqKiBwYXJhbXMpCit7CisgICAgaWYgKCFoYW5kbGUgfHwgIXBhcmFtcykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHN0YXRpY19jYXN0PFRT
aEhhbmRsZUJhc2UqPihoYW5kbGUpOworICAgIFRyYW5zbGF0b3JITFNMKiB0cmFuc2xhdG9yID0g
YmFzZS0+Z2V0QXNUcmFuc2xhdG9ySExTTCgpOworICAgIGlmICghdHJhbnNsYXRvcikgcmV0dXJu
OworCisgICAgc3dpdGNoKHBuYW1lKQorICAgIHsKKyAgICBjYXNlIFNIX0FDVElWRV9VTklGT1JN
U19BUlJBWToKKyAgICAgICAgKnBhcmFtcyA9ICh2b2lkKikmdHJhbnNsYXRvci0+Z2V0VW5pZm9y
bXMoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9
Cit9CisKK2ludCBTaENoZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cygKKyAgICBpbnQg
bWF4VmVjdG9ycywgU2hWYXJpYWJsZUluZm8qIHZhckluZm9BcnJheSwgc2l6ZV90IHZhckluZm9B
cnJheVNpemUpCit7CisgICAgaWYgKHZhckluZm9BcnJheVNpemUgPT0gMCkKKyAgICAgICAgcmV0
dXJuIDE7CisgICAgQVNTRVJUKHZhckluZm9BcnJheSk7CisgICAgVFZhcmlhYmxlSW5mb0xpc3Qg
dmFyaWFibGVzOworICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCB2YXJJbmZvQXJyYXlTaXpl
OyArK2lpKQorICAgIHsKKyAgICAgICAgVFZhcmlhYmxlSW5mbyB2YXIodmFySW5mb0FycmF5W2lp
XS50eXBlLCB2YXJJbmZvQXJyYXlbaWldLnNpemUpOworICAgICAgICB2YXJpYWJsZXMucHVzaF9i
YWNrKHZhcik7CisgICAgfQorICAgIFZhcmlhYmxlUGFja2VyIHBhY2tlcjsKKyAgICByZXR1cm4g
cGFja2VyLkNoZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cyhtYXhWZWN0b3JzLCB2YXJp
YWJsZXMpID8gMSA6IDA7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJsZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJsZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZDA0ZmU1ZDM1NTZjOWZhZjkxYjM1ODMxNjkyMzJiODU4NTQ3MWFmMgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5
bWJvbFRhYmxlLmNwcApAQCAtMCwwICsxLDIxNiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8K
Ky8vIFN5bWJvbCB0YWJsZSBmb3IgcGFyc2luZy4gIE1vc3QgZnVuY3Rpb25hbGl5IGFuZCBtYWlu
IGlkZWFzCisvLyBhcmUgZG9jdW1lbnRlZCBpbiB0aGUgaGVhZGVyIGZpbGUuCisvLworCisjaWYg
ZGVmaW5lZChfTVNDX1ZFUikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzE4KQorI2VuZGlm
CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgiCisKKyNpbmNs
dWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjbGltaXRzPgor
CitUVHlwZTo6VFR5cGUoY29uc3QgVFB1YmxpY1R5cGUgJnApIDoKKyAgICAgICAgICAgIHR5cGUo
cC50eXBlKSwgcHJlY2lzaW9uKHAucHJlY2lzaW9uKSwgcXVhbGlmaWVyKHAucXVhbGlmaWVyKSwg
c2l6ZShwLnNpemUpLCBtYXRyaXgocC5tYXRyaXgpLCBhcnJheShwLmFycmF5KSwgYXJyYXlTaXpl
KHAuYXJyYXlTaXplKSwgc3RydWN0dXJlKDApCit7CisgICAgaWYgKHAudXNlckRlZikKKyAgICAg
ICAgc3RydWN0dXJlID0gcC51c2VyRGVmLT5nZXRTdHJ1Y3QoKTsKK30KKworLy8KKy8vIFJlY3Vy
c2l2ZWx5IGdlbmVyYXRlIG1hbmdsZWQgbmFtZXMuCisvLworVFN0cmluZyBUVHlwZTo6YnVpbGRN
YW5nbGVkTmFtZSgpIGNvbnN0Cit7CisgICAgVFN0cmluZyBtYW5nbGVkTmFtZTsKKyAgICBpZiAo
aXNNYXRyaXgoKSkKKyAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ20nOworICAgIGVsc2UgaWYgKGlz
VmVjdG9yKCkpCisgICAgICAgIG1hbmdsZWROYW1lICs9ICd2JzsKKworICAgIHN3aXRjaCAodHlw
ZSkgeworICAgIGNhc2UgRWJ0RmxvYXQ6ICAgICAgIG1hbmdsZWROYW1lICs9ICdmJzsgICAgICBi
cmVhazsKKyAgICBjYXNlIEVidEludDogICAgICAgICBtYW5nbGVkTmFtZSArPSAnaSc7ICAgICAg
YnJlYWs7CisgICAgY2FzZSBFYnRCb29sOiAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ2InOyAgICAg
IGJyZWFrOworICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgIG1hbmdsZWROYW1lICs9ICJzMiI7ICAg
ICBicmVhazsKKyAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiBtYW5nbGVkTmFtZSArPSAic0MiOyAg
ICAgYnJlYWs7CisgICAgY2FzZSBFYnRTdHJ1Y3Q6ICAgICAgbWFuZ2xlZE5hbWUgKz0gc3RydWN0
dXJlLT5tYW5nbGVkTmFtZSgpOyBicmVhazsKKyAgICBkZWZhdWx0OiAgICAgICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBtYW5nbGVkTmFtZSArPSBzdGF0aWNfY2FzdDxjaGFyPignMCcgKyBn
ZXROb21pbmFsU2l6ZSgpKTsKKyAgICBpZiAoaXNBcnJheSgpKSB7CisgICAgICAgIGNoYXIgYnVm
WzIwXTsKKyAgICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwgYXJyYXlTaXpl
KTsKKyAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ1snOworICAgICAgICBtYW5nbGVkTmFtZSArPSBi
dWY7CisgICAgICAgIG1hbmdsZWROYW1lICs9ICddJzsKKyAgICB9CisgICAgcmV0dXJuIG1hbmds
ZWROYW1lOworfQorCitzaXplX3QgVFR5cGU6OmdldE9iamVjdFNpemUoKSBjb25zdAoreworICAg
IHNpemVfdCB0b3RhbFNpemUgPSAwOworCisgICAgaWYgKGdldEJhc2ljVHlwZSgpID09IEVidFN0
cnVjdCkKKyAgICAgICAgdG90YWxTaXplID0gc3RydWN0dXJlLT5vYmplY3RTaXplKCk7CisgICAg
ZWxzZSBpZiAobWF0cml4KQorICAgICAgICB0b3RhbFNpemUgPSBzaXplICogc2l6ZTsKKyAgICBl
bHNlCisgICAgICAgIHRvdGFsU2l6ZSA9IHNpemU7CisKKyAgICBpZiAoaXNBcnJheSgpKSB7Cisg
ICAgICAgIHNpemVfdCBhcnJheVNpemUgPSBnZXRBcnJheVNpemUoKTsKKyAgICAgICAgaWYgKGFy
cmF5U2l6ZSA+IElOVF9NQVggLyB0b3RhbFNpemUpCisgICAgICAgICAgICB0b3RhbFNpemUgPSBJ
TlRfTUFYOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0b3RhbFNpemUgKj0gYXJyYXlTaXpl
OworICAgIH0KKworICAgIHJldHVybiB0b3RhbFNpemU7Cit9CisKK2Jvb2wgVFN0cnVjdHVyZTo6
Y29udGFpbnNBcnJheXMoKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUZp
ZWxkcy0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgVFR5cGUqIGZpZWxkVHlwZSA9ICgq
bUZpZWxkcylbaV0tPnR5cGUoKTsKKyAgICAgICAgaWYgKGZpZWxkVHlwZS0+aXNBcnJheSgpIHx8
IGZpZWxkVHlwZS0+aXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlzKCkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitUU3RyaW5nIFRTdHJ1
Y3R1cmU6OmJ1aWxkTWFuZ2xlZE5hbWUoKSBjb25zdAoreworICAgIFRTdHJpbmcgbWFuZ2xlZE5h
bWUoInN0cnVjdC0iKTsKKyAgICBtYW5nbGVkTmFtZSArPSAqbU5hbWU7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtRmllbGRzLT5zaXplKCk7ICsraSkgeworICAgICAgICBtYW5nbGVkTmFt
ZSArPSAnLSc7CisgICAgICAgIG1hbmdsZWROYW1lICs9ICgqbUZpZWxkcylbaV0tPnR5cGUoKS0+
Z2V0TWFuZ2xlZE5hbWUoKTsKKyAgICB9CisgICAgcmV0dXJuIG1hbmdsZWROYW1lOworfQorCitz
aXplX3QgVFN0cnVjdHVyZTo6Y2FsY3VsYXRlT2JqZWN0U2l6ZSgpIGNvbnN0Cit7CisgICAgc2l6
ZV90IHNpemUgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUZpZWxkcy0+c2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgc2l6ZV90IGZpZWxkU2l6ZSA9ICgqbUZpZWxkcylbaV0tPnR5cGUo
KS0+Z2V0T2JqZWN0U2l6ZSgpOworICAgICAgICBpZiAoZmllbGRTaXplID4gSU5UX01BWCAtIHNp
emUpCisgICAgICAgICAgICBzaXplID0gSU5UX01BWDsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgc2l6ZSArPSBmaWVsZFNpemU7CisgICAgfQorICAgIHJldHVybiBzaXplOworfQorCitpbnQg
VFN0cnVjdHVyZTo6Y2FsY3VsYXRlRGVlcGVzdE5lc3RpbmcoKSBjb25zdAoreworICAgIGludCBt
YXhOZXN0aW5nID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1GaWVsZHMtPnNpemUo
KTsgKytpKSB7CisgICAgICAgIG1heE5lc3RpbmcgPSBzdGQ6Om1heChtYXhOZXN0aW5nLCAoKm1G
aWVsZHMpW2ldLT50eXBlKCktPmdldERlZXBlc3RTdHJ1Y3ROZXN0aW5nKCkpOworICAgIH0KKyAg
ICByZXR1cm4gMSArIG1heE5lc3Rpbmc7Cit9CisKKy8vCisvLyBEdW1wIGZ1bmN0aW9ucy4KKy8v
CisKK3ZvaWQgVFZhcmlhYmxlOjpkdW1wKFRJbmZvU2luayYgaW5mb1NpbmspIGNvbnN0Cit7Cisg
ICAgaW5mb1NpbmsuZGVidWcgPDwgZ2V0TmFtZSgpLmNfc3RyKCkgPDwgIjogIiA8PCB0eXBlLmdl
dFF1YWxpZmllclN0cmluZygpIDw8ICIgIiA8PCB0eXBlLmdldFByZWNpc2lvblN0cmluZygpIDw8
ICIgIiA8PCB0eXBlLmdldEJhc2ljU3RyaW5nKCk7CisgICAgaWYgKHR5cGUuaXNBcnJheSgpKSB7
CisgICAgICAgIGluZm9TaW5rLmRlYnVnIDw8ICJbMF0iOworICAgIH0KKyAgICBpbmZvU2luay5k
ZWJ1ZyA8PCAiXG4iOworfQorCit2b2lkIFRGdW5jdGlvbjo6ZHVtcChUSW5mb1NpbmsgJmluZm9T
aW5rKSBjb25zdAoreworICAgIGluZm9TaW5rLmRlYnVnIDw8IGdldE5hbWUoKS5jX3N0cigpIDw8
ICI6ICIgPDwgIHJldHVyblR5cGUuZ2V0QmFzaWNTdHJpbmcoKSA8PCAiICIgPDwgZ2V0TWFuZ2xl
ZE5hbWUoKS5jX3N0cigpIDw8ICJcbiI7Cit9CisKK3ZvaWQgVFN5bWJvbFRhYmxlTGV2ZWw6OmR1
bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3QKK3sKKyAgICB0TGV2ZWw6OmNvbnN0X2l0ZXJh
dG9yIGl0OworICAgIGZvciAoaXQgPSBsZXZlbC5iZWdpbigpOyBpdCAhPSBsZXZlbC5lbmQoKTsg
KytpdCkKKyAgICAgICAgKCppdCkuc2Vjb25kLT5kdW1wKGluZm9TaW5rKTsKK30KKwordm9pZCBU
U3ltYm9sVGFibGU6OmR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3QKK3sKKyAgICBmb3Ig
KGludCBsZXZlbCA9IGN1cnJlbnRMZXZlbCgpOyBsZXZlbCA+PSAwOyAtLWxldmVsKSB7CisgICAg
ICAgIGluZm9TaW5rLmRlYnVnIDw8ICJMRVZFTCAiIDw8IGxldmVsIDw8ICJcbiI7CisgICAgICAg
IHRhYmxlW2xldmVsXS0+ZHVtcChpbmZvU2luayk7CisgICAgfQorfQorCisvLworLy8gRnVuY3Rp
b25zIGhhdmUgYnVyaWVkIHBvaW50ZXJzIHRvIGRlbGV0ZS4KKy8vCitURnVuY3Rpb246On5URnVu
Y3Rpb24oKQoreworICAgIGZvciAoVFBhcmFtTGlzdDo6aXRlcmF0b3IgaSA9IHBhcmFtZXRlcnMu
YmVnaW4oKTsgaSAhPSBwYXJhbWV0ZXJzLmVuZCgpOyArK2kpCisgICAgICAgIGRlbGV0ZSAoKmkp
LnR5cGU7Cit9CisKKy8vCisvLyBTeW1ib2wgdGFibGUgbGV2ZWxzIGFyZSBhIG1hcCBvZiBwb2lu
dGVycyB0byBzeW1ib2xzIHRoYXQgaGF2ZSB0byBiZSBkZWxldGVkLgorLy8KK1RTeW1ib2xUYWJs
ZUxldmVsOjp+VFN5bWJvbFRhYmxlTGV2ZWwoKQoreworICAgIGZvciAodExldmVsOjppdGVyYXRv
ciBpdCA9IGxldmVsLmJlZ2luKCk7IGl0ICE9IGxldmVsLmVuZCgpOyArK2l0KQorICAgICAgICBk
ZWxldGUgKCppdCkuc2Vjb25kOworfQorCisvLworLy8gQ2hhbmdlIGFsbCBmdW5jdGlvbiBlbnRy
aWVzIGluIHRoZSB0YWJsZSB3aXRoIHRoZSBub24tbWFuZ2xlZCBuYW1lCisvLyB0byBiZSByZWxh
dGVkIHRvIHRoZSBwcm92aWRlZCBidWlsdC1pbiBvcGVyYXRpb24uICBUaGlzIGlzIGEgbG93Cisv
LyBwZXJmb3JtYW5jZSBvcGVyYXRpb24sIGFuZCBvbmx5IGludGVuZGVkIGZvciBzeW1ib2wgdGFi
bGVzIHRoYXQKKy8vIGxpdmUgYWNyb3NzIGEgbGFyZ2UgbnVtYmVyIG9mIGNvbXBpbGVzLgorLy8K
K3ZvaWQgVFN5bWJvbFRhYmxlTGV2ZWw6OnJlbGF0ZVRvT3BlcmF0b3IoY29uc3QgY2hhciogbmFt
ZSwgVE9wZXJhdG9yIG9wKQoreworICAgIHRMZXZlbDo6aXRlcmF0b3IgaXQ7CisgICAgZm9yIChp
dCA9IGxldmVsLmJlZ2luKCk7IGl0ICE9IGxldmVsLmVuZCgpOyArK2l0KSB7CisgICAgICAgIGlm
ICgoKml0KS5zZWNvbmQtPmlzRnVuY3Rpb24oKSkgeworICAgICAgICAgICAgVEZ1bmN0aW9uKiBm
dW5jdGlvbiA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KCgqaXQpLnNlY29uZCk7CisgICAgICAg
ICAgICBpZiAoZnVuY3Rpb24tPmdldE5hbWUoKSA9PSBuYW1lKQorICAgICAgICAgICAgICAgIGZ1
bmN0aW9uLT5yZWxhdGVUb09wZXJhdG9yKG9wKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8K
Ky8vIENoYW5nZSBhbGwgZnVuY3Rpb24gZW50cmllcyBpbiB0aGUgdGFibGUgd2l0aCB0aGUgbm9u
LW1hbmdsZWQgbmFtZQorLy8gdG8gYmUgcmVsYXRlZCB0byB0aGUgcHJvdmlkZWQgYnVpbHQtaW4g
ZXh0ZW5zaW9uLiBUaGlzIGlzIGEgbG93CisvLyBwZXJmb3JtYW5jZSBvcGVyYXRpb24sIGFuZCBv
bmx5IGludGVuZGVkIGZvciBzeW1ib2wgdGFibGVzIHRoYXQKKy8vIGxpdmUgYWNyb3NzIGEgbGFy
Z2UgbnVtYmVyIG9mIGNvbXBpbGVzLgorLy8KK3ZvaWQgVFN5bWJvbFRhYmxlTGV2ZWw6OnJlbGF0
ZVRvRXh0ZW5zaW9uKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFRTdHJpbmcmIGV4dCkKK3sKKyAg
ICBmb3IgKHRMZXZlbDo6aXRlcmF0b3IgaXQgPSBsZXZlbC5iZWdpbigpOyBpdCAhPSBsZXZlbC5l
bmQoKTsgKytpdCkgeworICAgICAgICBUU3ltYm9sKiBzeW1ib2wgPSBpdC0+c2Vjb25kOworICAg
ICAgICBpZiAoc3ltYm9sLT5nZXROYW1lKCkgPT0gbmFtZSkKKyAgICAgICAgICAgIHN5bWJvbC0+
cmVsYXRlVG9FeHRlbnNpb24oZXh0KTsKKyAgICB9Cit9CisKK1RTeW1ib2xUYWJsZTo6flRTeW1i
b2xUYWJsZSgpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YWJsZS5zaXplKCk7ICsr
aSkKKyAgICAgICAgZGVsZXRlIHRhYmxlW2ldOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cHJlY2lzaW9uU3RhY2suc2l6ZSgpOyArK2kpCisgICAgICAgIGRlbGV0ZSBwcmVjaXNpb25TdGFj
a1tpXTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZjNzIxMWYyYTk1
MmM4OTUxNzgzNTE1MjU3NmQ2OGM5Mzg4Njc3YjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJsZS5oCkBA
IC0wLDAgKzEsMzgyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9TWU1CT0xfVEFC
TEVfSU5DTFVERURfCisjZGVmaW5lIF9TWU1CT0xfVEFCTEVfSU5DTFVERURfCisKKy8vCisvLyBT
eW1ib2wgdGFibGUgZm9yIHBhcnNpbmcuICBIYXMgdGhlc2UgZGVzaWduIGNoYXJhY3RlcmlzdGlj
czoKKy8vCisvLyAqIFNhbWUgc3ltYm9sIHRhYmxlIGNhbiBiZSB1c2VkIHRvIGNvbXBpbGUgbWFu
eSBzaGFkZXJzLCB0byBwcmVzZXJ2ZQorLy8gICBlZmZvcnQgb2YgY3JlYXRpbmcgYW5kIGxvYWRp
bmcgd2l0aCB0aGUgbGFyZ2UgbnVtYmVycyBvZiBidWlsdC1pbgorLy8gICBzeW1ib2xzLgorLy8K
Ky8vICogTmFtZSBtYW5nbGluZyB3aWxsIGJlIHVzZWQgdG8gZ2l2ZSBlYWNoIGZ1bmN0aW9uIGEg
dW5pcXVlIG5hbWUKKy8vICAgc28gdGhhdCBzeW1ib2wgdGFibGUgbG9va3VwcyBhcmUgbmV2ZXIg
YW1iaWd1b3VzLiAgVGhpcyBhbGxvd3MKKy8vICAgYSBzaW1wbGVyIHN5bWJvbCB0YWJsZSBzdHJ1
Y3R1cmUuCisvLworLy8gKiBQdXNoaW5nIGFuZCBwb3BwaW5nIG9mIHNjb3BlLCBzbyBzeW1ib2wg
dGFibGUgd2lsbCByZWFsbHkgYmUgYSBzdGFjayAKKy8vICAgb2Ygc3ltYm9sIHRhYmxlcy4gIFNl
YXJjaGVkIGZyb20gdGhlIHRvcCwgd2l0aCBuZXcgaW5zZXJ0cyBnb2luZyBpbnRvCisvLyAgIHRo
ZSB0b3AuCisvLworLy8gKiBDb25zdGFudHM6ICBDb21waWxlIHRpbWUgY29uc3RhbnQgc3ltYm9s
cyB3aWxsIGtlZXAgdGhlaXIgdmFsdWVzCisvLyAgIGluIHRoZSBzeW1ib2wgdGFibGUuICBUaGUg
cGFyc2VyIGNhbiBzdWJzdGl0dXRlIGNvbnN0YW50cyBhdCBwYXJzZQorLy8gICB0aW1lLCBpbmNs
dWRpbmcgZG9pbmcgY29uc3RhbnQgZm9sZGluZyBhbmQgY29uc3RhbnQgcHJvcGFnYXRpb24uCisv
LworLy8gKiBObyB0ZW1wb3JhcmllczogIFRlbXBvcmFyaWVzIG1hZGUgZnJvbSBvcGVyYXRpb25z
ICgrLCAtLSwgLnh5LCBldGMuKQorLy8gICBhcmUgdHJhY2tlZCBpbiB0aGUgaW50ZXJtZWRpYXRl
IHJlcHJlc2VudGF0aW9uLCBub3QgdGhlIHN5bWJvbCB0YWJsZS4KKy8vCisKKyNpbmNsdWRlIDxh
c3NlcnQuaD4KKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvaW50ZXJtZWRpYXRlLmgiCisKKy8vCisvLyBTeW1ib2wgYmFzZSBjbGFzcy4gIChDYW4gYnVp
bGQgZnVuY3Rpb25zIG9yIHZhcmlhYmxlcyBvdXQgb2YgdGhlc2UuLi4pCisvLworY2xhc3MgVFN5
bWJvbCB7ICAgIAorcHVibGljOgorICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKKyAg
ICBUU3ltYm9sKGNvbnN0IFRTdHJpbmcqIG4pIDogIHVuaXF1ZUlkKDApLCBuYW1lKG4pIHsgfQor
ICAgIHZpcnR1YWwgflRTeW1ib2woKSB7IC8qIGRvbid0IGRlbGV0ZSBuYW1lLCBpdCdzIGZyb20g
dGhlIHBvb2wgKi8gfQorCisgICAgY29uc3QgVFN0cmluZyYgZ2V0TmFtZSgpIGNvbnN0IHsgcmV0
dXJuICpuYW1lOyB9CisgICAgdmlydHVhbCBjb25zdCBUU3RyaW5nJiBnZXRNYW5nbGVkTmFtZSgp
IGNvbnN0IHsgcmV0dXJuIGdldE5hbWUoKTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0Z1bmN0aW9u
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNWYXJpYWJsZSgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBzZXRVbmlxdWVJZChpbnQgaWQpIHsg
dW5pcXVlSWQgPSBpZDsgfQorICAgIGludCBnZXRVbmlxdWVJZCgpIGNvbnN0IHsgcmV0dXJuIHVu
aXF1ZUlkOyB9CisgICAgdmlydHVhbCB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29u
c3QgPSAwOworICAgIHZvaWQgcmVsYXRlVG9FeHRlbnNpb24oY29uc3QgVFN0cmluZyYgZXh0KSB7
IGV4dGVuc2lvbiA9IGV4dDsgfQorICAgIGNvbnN0IFRTdHJpbmcmIGdldEV4dGVuc2lvbigpIGNv
bnN0IHsgcmV0dXJuIGV4dGVuc2lvbjsgfQorCitwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihUU3ltYm9sKTsKKworICAgIGludCB1bmlxdWVJZDsgICAgICAvLyBGb3IgcmVh
bCBjb21wYXJpbmcgZHVyaW5nIGNvZGUgZ2VuZXJhdGlvbgorICAgIGNvbnN0IFRTdHJpbmcgKm5h
bWU7CisgICAgVFN0cmluZyBleHRlbnNpb247Cit9OworCisvLworLy8gVmFyaWFibGUgY2xhc3Ms
IG1lYW5pbmcgYSBzeW1ib2wgdGhhdCdzIG5vdCBhIGZ1bmN0aW9uLgorLy8gCisvLyBUaGVyZSBj
b3VsZCBiZSBhIHNlcGFyYXRlIGNsYXNzIGhlaXJhcmNoeSBmb3IgQ29uc3RhbnQgdmFyaWFibGVz
OworLy8gT25seSBvbmUgb2YgaW50LCBib29sLCBvciBmbG9hdCwgKG9yIG5vbmUpIGlzIGNvcnJl
Y3QgZm9yCisvLyBhbnkgcGFydGljdWxhciB1c2UsIGJ1dCBpdCdzIGVhc3kgdG8gZG8gdGhpcyB3
YXksIGFuZCBkb2Vzbid0CisvLyBzZWVtIHdvcnRoIGhhdmluZyBzZXBhcmF0ZSBjbGFzc2VzLCBh
bmQgImdldENvbnN0IiBjYW4ndCBzaW1wbHkgcmV0dXJuCisvLyBkaWZmZXJlbnQgdmFsdWVzIGZv
ciBkaWZmZXJlbnQgdHlwZXMgcG9seW1vcnBoaWNhbGx5LCBzbyB0aGlzIGlzIAorLy8ganVzdCBz
aW1wbGUgYW5kIHByYWdtYXRpYy4KKy8vCitjbGFzcyBUVmFyaWFibGUgOiBwdWJsaWMgVFN5bWJv
bCB7CitwdWJsaWM6CisgICAgVFZhcmlhYmxlKGNvbnN0IFRTdHJpbmcgKm5hbWUsIGNvbnN0IFRU
eXBlJiB0LCBib29sIHVUID0gZmFsc2UgKSA6IFRTeW1ib2wobmFtZSksIHR5cGUodCksIHVzZXJU
eXBlKHVUKSwgdW5pb25BcnJheSgwKSB7IH0KKyAgICB2aXJ0dWFsIH5UVmFyaWFibGUoKSB7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgaXNWYXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0gICAg
CisgICAgVFR5cGUmIGdldFR5cGUoKSB7IHJldHVybiB0eXBlOyB9ICAgIAorICAgIGNvbnN0IFRU
eXBlJiBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZTsgfQorICAgIGJvb2wgaXNVc2VyVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIHVzZXJUeXBlOyB9CisgICAgdm9pZCBzZXRRdWFsaWZpZXIoVFF1
YWxpZmllciBxdWFsaWZpZXIpIHsgdHlwZS5zZXRRdWFsaWZpZXIocXVhbGlmaWVyKTsgfQorCisg
ICAgdmlydHVhbCB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7CisKKyAgICBD
b25zdGFudFVuaW9uKiBnZXRDb25zdFBvaW50ZXIoKQorICAgIHsgCisgICAgICAgIGlmICghdW5p
b25BcnJheSkKKyAgICAgICAgICAgIHVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblt0eXBl
LmdldE9iamVjdFNpemUoKV07CisKKyAgICAgICAgcmV0dXJuIHVuaW9uQXJyYXk7CisgICAgfQor
CisgICAgQ29uc3RhbnRVbmlvbiogZ2V0Q29uc3RQb2ludGVyKCkgY29uc3QgeyByZXR1cm4gdW5p
b25BcnJheTsgfQorCisgICAgdm9pZCBzaGFyZUNvbnN0UG9pbnRlciggQ29uc3RhbnRVbmlvbiAq
Y29uc3RBcnJheSkKKyAgICB7CisgICAgICAgIGlmICh1bmlvbkFycmF5ID09IGNvbnN0QXJyYXkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZGVsZXRlW10gdW5pb25BcnJheTsKKyAg
ICAgICAgdW5pb25BcnJheSA9IGNvbnN0QXJyYXk7ICAKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRWYXJpYWJsZSk7CisKKyAgICBUVHlwZSB0eXBlOwor
ICAgIGJvb2wgdXNlclR5cGU7CisgICAgLy8gd2UgYXJlIGFzc3VtaW5nIHRoYXQgUG9vbCBBbGxv
Y2F0b3Igd2lsbCBmcmVlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIHRvIHVuaW9uQXJyYXkKKyAgICAv
LyB3aGVuIHRoaXMgb2JqZWN0IGlzIGRlc3Ryb3llZAorICAgIENvbnN0YW50VW5pb24gKnVuaW9u
QXJyYXk7Cit9OworCisvLworLy8gVGhlIGZ1bmN0aW9uIHN1Yi1jbGFzcyBvZiBzeW1ib2xzIGFu
ZCB0aGUgcGFyc2VyIHdpbGwgbmVlZCB0bworLy8gc2hhcmUgdGhpcyBkZWZpbml0aW9uIG9mIGEg
ZnVuY3Rpb24gcGFyYW1ldGVyLgorLy8KK3N0cnVjdCBUUGFyYW1ldGVyIHsKKyAgICBUU3RyaW5n
ICpuYW1lOworICAgIFRUeXBlKiB0eXBlOworfTsKKworLy8KKy8vIFRoZSBmdW5jdGlvbiBzdWIt
Y2xhc3Mgb2YgYSBzeW1ib2wuICAKKy8vCitjbGFzcyBURnVuY3Rpb24gOiBwdWJsaWMgVFN5bWJv
bCB7CitwdWJsaWM6CisgICAgVEZ1bmN0aW9uKFRPcGVyYXRvciBvKSA6CisgICAgICAgIFRTeW1i
b2woMCksCisgICAgICAgIHJldHVyblR5cGUoVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKSks
CisgICAgICAgIG9wKG8pLAorICAgICAgICBkZWZpbmVkKGZhbHNlKSB7IH0KKyAgICBURnVuY3Rp
b24oY29uc3QgVFN0cmluZyAqbmFtZSwgVFR5cGUmIHJldFR5cGUsIFRPcGVyYXRvciB0T3AgPSBF
T3BOdWxsKSA6IAorICAgICAgICBUU3ltYm9sKG5hbWUpLCAKKyAgICAgICAgcmV0dXJuVHlwZShy
ZXRUeXBlKSwKKyAgICAgICAgbWFuZ2xlZE5hbWUoVEZ1bmN0aW9uOjptYW5nbGVOYW1lKCpuYW1l
KSksCisgICAgICAgIG9wKHRPcCksCisgICAgICAgIGRlZmluZWQoZmFsc2UpIHsgfQorICAgIHZp
cnR1YWwgflRGdW5jdGlvbigpOworICAgIHZpcnR1YWwgYm9vbCBpc0Z1bmN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfSAgICAKKworICAgIHN0YXRpYyBUU3RyaW5nIG1hbmdsZU5hbWUoY29u
c3QgVFN0cmluZyYgbmFtZSkgeyByZXR1cm4gbmFtZSArICcoJzsgfQorICAgIHN0YXRpYyBUU3Ry
aW5nIHVubWFuZ2xlTmFtZShjb25zdCBUU3RyaW5nJiBtYW5nbGVkTmFtZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBUU3RyaW5nKG1hbmdsZWROYW1lLmNfc3RyKCksIG1hbmdsZWROYW1lLmZpbmRf
Zmlyc3Rfb2YoJygnKSk7CisgICAgfQorCisgICAgdm9pZCBhZGRQYXJhbWV0ZXIoVFBhcmFtZXRl
ciYgcCkgCisgICAgeyAKKyAgICAgICAgcGFyYW1ldGVycy5wdXNoX2JhY2socCk7CisgICAgICAg
IG1hbmdsZWROYW1lID0gbWFuZ2xlZE5hbWUgKyBwLnR5cGUtPmdldE1hbmdsZWROYW1lKCk7Cisg
ICAgfQorCisgICAgY29uc3QgVFN0cmluZyYgZ2V0TWFuZ2xlZE5hbWUoKSBjb25zdCB7IHJldHVy
biBtYW5nbGVkTmFtZTsgfQorICAgIGNvbnN0IFRUeXBlJiBnZXRSZXR1cm5UeXBlKCkgY29uc3Qg
eyByZXR1cm4gcmV0dXJuVHlwZTsgfQorCisgICAgdm9pZCByZWxhdGVUb09wZXJhdG9yKFRPcGVy
YXRvciBvKSB7IG9wID0gbzsgfQorICAgIFRPcGVyYXRvciBnZXRCdWlsdEluT3AoKSBjb25zdCB7
IHJldHVybiBvcDsgfQorCisgICAgdm9pZCBzZXREZWZpbmVkKCkgeyBkZWZpbmVkID0gdHJ1ZTsg
fQorICAgIGJvb2wgaXNEZWZpbmVkKCkgeyByZXR1cm4gZGVmaW5lZDsgfQorCisgICAgc2l6ZV90
IGdldFBhcmFtQ291bnQoKSBjb25zdCB7IHJldHVybiBwYXJhbWV0ZXJzLnNpemUoKTsgfSAgCisg
ICAgY29uc3QgVFBhcmFtZXRlciYgZ2V0UGFyYW0oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIHBh
cmFtZXRlcnNbaV07IH0KKworICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1Np
bmspIGNvbnN0OworCitwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihURnVu
Y3Rpb24pOworCisgICAgdHlwZWRlZiBUVmVjdG9yPFRQYXJhbWV0ZXI+IFRQYXJhbUxpc3Q7Cisg
ICAgVFBhcmFtTGlzdCBwYXJhbWV0ZXJzOworICAgIFRUeXBlIHJldHVyblR5cGU7CisgICAgVFN0
cmluZyBtYW5nbGVkTmFtZTsKKyAgICBUT3BlcmF0b3Igb3A7CisgICAgYm9vbCBkZWZpbmVkOwor
fTsKKworCitjbGFzcyBUU3ltYm9sVGFibGVMZXZlbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBU
TWFwPFRTdHJpbmcsIFRTeW1ib2wqPiB0TGV2ZWw7CisgICAgdHlwZWRlZiB0TGV2ZWw6OmNvbnN0
X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgY29uc3QgdExldmVsOjp2YWx1
ZV90eXBlIHRMZXZlbFBhaXI7CisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8dExldmVsOjppdGVyYXRv
ciwgYm9vbD4gdEluc2VydFJlc3VsdDsKKworICAgIFRTeW1ib2xUYWJsZUxldmVsKCkgeyB9Cisg
ICAgflRTeW1ib2xUYWJsZUxldmVsKCk7CisKKyAgICBib29sIGluc2VydChjb25zdCBUU3RyaW5n
ICZuYW1lLCBUU3ltYm9sICZzeW1ib2wpCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBy
ZXR1cm5pbmcgdHJ1ZSBtZWFucyBzeW1ib2wgd2FzIGFkZGVkIHRvIHRoZSB0YWJsZQorICAgICAg
ICAvLworICAgICAgICB0SW5zZXJ0UmVzdWx0IHJlc3VsdCA9IGxldmVsLmluc2VydCh0TGV2ZWxQ
YWlyKG5hbWUsICZzeW1ib2wpKTsKKworICAgICAgICByZXR1cm4gcmVzdWx0LnNlY29uZDsKKyAg
ICB9CisKKyAgICBib29sIGluc2VydChUU3ltYm9sICZzeW1ib2wpCisgICAgeworICAgICAgICBy
ZXR1cm4gaW5zZXJ0KHN5bWJvbC5nZXRNYW5nbGVkTmFtZSgpLCBzeW1ib2wpOworICAgIH0KKwor
ICAgIFRTeW1ib2wqIGZpbmQoY29uc3QgVFN0cmluZyYgbmFtZSkgY29uc3QKKyAgICB7CisgICAg
ICAgIHRMZXZlbDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsZXZlbC5maW5kKG5hbWUpOworICAgICAg
ICBpZiAoaXQgPT0gbGV2ZWwuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcmV0dXJuICgqaXQpLnNlY29uZDsKKyAgICB9CisKKyAgICBjb25z
dF9pdGVyYXRvciBiZWdpbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbGV2ZWwuYmVn
aW4oKTsKKyAgICB9CisKKyAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGxldmVsLmVuZCgpOworICAgIH0KKworICAgIHZvaWQgcmVsYXRlVG9PcGVy
YXRvcihjb25zdCBjaGFyKiBuYW1lLCBUT3BlcmF0b3Igb3ApOworICAgIHZvaWQgcmVsYXRlVG9F
eHRlbnNpb24oY29uc3QgY2hhciogbmFtZSwgY29uc3QgVFN0cmluZyYgZXh0KTsKKyAgICB2b2lk
IGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICB0TGV2
ZWwgbGV2ZWw7Cit9OworCitjbGFzcyBUU3ltYm9sVGFibGUgeworcHVibGljOgorICAgIFRTeW1i
b2xUYWJsZSgpIDogdW5pcXVlSWQoMCkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFRo
ZSBzeW1ib2wgdGFibGUgY2Fubm90IGJlIHVzZWQgdW50aWwgcHVzaCgpIGlzIGNhbGxlZCwgYnV0
CisgICAgICAgIC8vIHRoZSBsYWNrIG9mIGFuIGluaXRpYWwgY2FsbCB0byBwdXNoKCkgY2FuIGJl
IHVzZWQgdG8gZGV0ZWN0CisgICAgICAgIC8vIHRoYXQgdGhlIHN5bWJvbCB0YWJsZSBoYXMgbm90
IGJlZW4gcHJlbG9hZGVkIHdpdGggYnVpbHQtaW5zLgorICAgICAgICAvLworICAgIH0KKyAgICB+
VFN5bWJvbFRhYmxlKCk7CisKKyAgICAvLworICAgIC8vIFdoZW4gdGhlIHN5bWJvbCB0YWJsZSBp
cyBpbml0aWFsaXplZCB3aXRoIHRoZSBidWlsdC1pbnMsIHRoZXJlIHNob3VsZAorICAgIC8vICdw
dXNoJyBjYWxscywgc28gdGhhdCBidWlsdC1pbnMgYXJlIGF0IGxldmVsIDAgYW5kIHRoZSBzaGFk
ZXIKKyAgICAvLyBnbG9iYWxzIGFyZSBhdCBsZXZlbCAxLgorICAgIC8vCisgICAgYm9vbCBpc0Vt
cHR5KCkgeyByZXR1cm4gdGFibGUuc2l6ZSgpID09IDA7IH0KKyAgICBib29sIGF0QnVpbHRJbkxl
dmVsKCkgeyByZXR1cm4gdGFibGUuc2l6ZSgpID09IDE7IH0KKyAgICBib29sIGF0R2xvYmFsTGV2
ZWwoKSB7IHJldHVybiB0YWJsZS5zaXplKCkgPD0gMjsgfQorICAgIHZvaWQgcHVzaCgpCisgICAg
eworICAgICAgICB0YWJsZS5wdXNoX2JhY2sobmV3IFRTeW1ib2xUYWJsZUxldmVsKTsKKyAgICAg
ICAgcHJlY2lzaW9uU3RhY2sucHVzaF9iYWNrKG5ldyBQcmVjaXNpb25TdGFja0xldmVsKTsKKyAg
ICB9CisKKyAgICB2b2lkIHBvcCgpCisgICAgeworICAgICAgICBkZWxldGUgdGFibGUuYmFjaygp
OworICAgICAgICB0YWJsZS5wb3BfYmFjaygpOworCisgICAgICAgIGRlbGV0ZSBwcmVjaXNpb25T
dGFjay5iYWNrKCk7CisgICAgICAgIHByZWNpc2lvblN0YWNrLnBvcF9iYWNrKCk7CisgICAgfQor
CisgICAgYm9vbCBpbnNlcnQoVFN5bWJvbCYgc3ltYm9sKQorICAgIHsKKyAgICAgICAgc3ltYm9s
LnNldFVuaXF1ZUlkKCsrdW5pcXVlSWQpOworICAgICAgICByZXR1cm4gdGFibGVbY3VycmVudExl
dmVsKCldLT5pbnNlcnQoc3ltYm9sKTsKKyAgICB9CisKKyAgICBib29sIGluc2VydENvbnN0SW50
KGNvbnN0IGNoYXIgKm5hbWUsIGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIFRWYXJpYWJsZSAq
Y29uc3RhbnQgPSBuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKG5hbWUpLCBUVHlwZShFYnRJ
bnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QsIDEpKTsKKyAgICAgICAgY29uc3RhbnQtPmdldENv
bnN0UG9pbnRlcigpLT5zZXRJQ29uc3QodmFsdWUpOworICAgICAgICByZXR1cm4gaW5zZXJ0KCpj
b25zdGFudCk7CisgICAgfQorCisgICAgYm9vbCBpbnNlcnRCdWlsdEluKFRUeXBlICpydmFsdWUs
IGNvbnN0IGNoYXIgKm5hbWUsIFRUeXBlICpwdHlwZTEsIFRUeXBlICpwdHlwZTIgPSAwLCBUVHlw
ZSAqcHR5cGUzID0gMCkKKyAgICB7CisgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcg
VEZ1bmN0aW9uKE5ld1Bvb2xUU3RyaW5nKG5hbWUpLCAqcnZhbHVlKTsKKworICAgICAgICBUUGFy
YW1ldGVyIHBhcmFtMSA9IHtOVUxMLCBwdHlwZTF9OworICAgICAgICBmdW5jdGlvbi0+YWRkUGFy
YW1ldGVyKHBhcmFtMSk7CisKKyAgICAgICAgaWYocHR5cGUyKQorICAgICAgICB7CisgICAgICAg
ICAgICBUUGFyYW1ldGVyIHBhcmFtMiA9IHtOVUxMLCBwdHlwZTJ9OworICAgICAgICAgICAgZnVu
Y3Rpb24tPmFkZFBhcmFtZXRlcihwYXJhbTIpOworICAgICAgICB9CisKKyAgICAgICAgaWYocHR5
cGUzKQorICAgICAgICB7CisgICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtMyA9IHtOVUxMLCBw
dHlwZTN9OworICAgICAgICAgICAgZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJhbTMpOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIGluc2VydCgqZnVuY3Rpb24pOworICAgIH0KKworICAg
IFRTeW1ib2wqIGZpbmQoY29uc3QgVFN0cmluZyYgbmFtZSwgYm9vbCogYnVpbHRJbiA9IDAsIGJv
b2wgKnNhbWVTY29wZSA9IDApIAorICAgIHsKKyAgICAgICAgaW50IGxldmVsID0gY3VycmVudExl
dmVsKCk7CisgICAgICAgIFRTeW1ib2wqIHN5bWJvbDsKKyAgICAgICAgZG8geworICAgICAgICAg
ICAgc3ltYm9sID0gdGFibGVbbGV2ZWxdLT5maW5kKG5hbWUpOworICAgICAgICAgICAgLS1sZXZl
bDsKKyAgICAgICAgfSB3aGlsZSAoc3ltYm9sID09IDAgJiYgbGV2ZWwgPj0gMCk7CisgICAgICAg
IGxldmVsKys7CisgICAgICAgIGlmIChidWlsdEluKQorICAgICAgICAgICAgKmJ1aWx0SW4gPSBs
ZXZlbCA9PSAwOworICAgICAgICBpZiAoc2FtZVNjb3BlKQorICAgICAgICAgICAgKnNhbWVTY29w
ZSA9IGxldmVsID09IGN1cnJlbnRMZXZlbCgpOworICAgICAgICByZXR1cm4gc3ltYm9sOworICAg
IH0KKworICAgIFRTeW1ib2wqIGZpbmRCdWlsdEluKGNvbnN0IFRTdHJpbmcgJm5hbWUpCisgICAg
eworICAgICAgICByZXR1cm4gdGFibGVbMF0tPmZpbmQobmFtZSk7CisgICAgfQorCisgICAgVFN5
bWJvbFRhYmxlTGV2ZWwqIGdldE91dGVyTGV2ZWwoKSB7CisgICAgICAgIGFzc2VydCh0YWJsZS5z
aXplKCkgPj0gMik7CisgICAgICAgIHJldHVybiB0YWJsZVtjdXJyZW50TGV2ZWwoKSAtIDFdOwor
ICAgIH0KKworICAgIHZvaWQgcmVsYXRlVG9PcGVyYXRvcihjb25zdCBjaGFyKiBuYW1lLCBUT3Bl
cmF0b3Igb3ApIHsKKyAgICAgICAgdGFibGVbMF0tPnJlbGF0ZVRvT3BlcmF0b3IobmFtZSwgb3Ap
OworICAgIH0KKyAgICB2b2lkIHJlbGF0ZVRvRXh0ZW5zaW9uKGNvbnN0IGNoYXIqIG5hbWUsIGNv
bnN0IFRTdHJpbmcmIGV4dCkgeworICAgICAgICB0YWJsZVswXS0+cmVsYXRlVG9FeHRlbnNpb24o
bmFtZSwgZXh0KTsKKyAgICB9CisgICAgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNv
bnN0OworCisgICAgYm9vbCBzZXREZWZhdWx0UHJlY2lzaW9uKGNvbnN0IFRQdWJsaWNUeXBlJiB0
eXBlLCBUUHJlY2lzaW9uIHByZWMpIHsKKyAgICAgICAgaWYgKCFzdXBwb3J0c1ByZWNpc2lvbih0
eXBlLnR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAodHlwZS5z
aXplICE9IDEgfHwgdHlwZS5tYXRyaXggfHwgdHlwZS5hcnJheSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgLy8gTm90IGFsbG93ZWQgdG8gc2V0IGZvciBhZ2dyZWdhdGUgdHlwZXMKKyAgICAg
ICAgaW50IGluZGV4T2ZMYXN0RWxlbWVudCA9IHN0YXRpY19jYXN0PGludD4ocHJlY2lzaW9uU3Rh
Y2suc2l6ZSgpKSAtIDE7CisgICAgICAgICgqcHJlY2lzaW9uU3RhY2tbaW5kZXhPZkxhc3RFbGVt
ZW50XSlbdHlwZS50eXBlXSA9IHByZWM7IC8vIFVzZXMgbWFwIG9wZXJhdG9yIFtdLCBvdmVyd3Jp
dGVzIHRoZSBjdXJyZW50IHZhbHVlCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IC8vIFNlYXJjaGVzIGRvd24gdGhlIHByZWNpc2lvblN0YWNrIGZvciBhIHByZWNpc2lvbiBxdWFs
aWZpZXIgZm9yIHRoZSBzcGVjaWZpZWQgVEJhc2ljVHlwZQorICAgIFRQcmVjaXNpb24gZ2V0RGVm
YXVsdFByZWNpc2lvbihUQmFzaWNUeXBlIHR5cGUpIHsKKyAgICAgICAgaWYgKCFzdXBwb3J0c1By
ZWNpc2lvbih0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBFYnBVbmRlZmluZWQ7CisgICAgICAg
IGludCBsZXZlbCA9IHN0YXRpY19jYXN0PGludD4ocHJlY2lzaW9uU3RhY2suc2l6ZSgpKSAtIDE7
CisgICAgICAgIGFzc2VydChsZXZlbCA+PSAwKTsgLy8gSnVzdCB0byBiZSBzYWZlLiBTaG91bGQg
bm90IGhhcHBlbi4KKyAgICAgICAgUHJlY2lzaW9uU3RhY2tMZXZlbDo6aXRlcmF0b3IgaXQ7Cisg
ICAgICAgIFRQcmVjaXNpb24gcHJlYyA9IEVicFVuZGVmaW5lZDsgLy8gSWYgd2UgZG9udCBmaW5k
IGFueXRoaW5nIHdlIHJldHVybiB0aGlzLiBTaG91bGQgd2UgZXJyb3IgY2hlY2sgdGhpcz8KKyAg
ICAgICAgd2hpbGUgKGxldmVsID49IDApIHsKKyAgICAgICAgICAgIGl0ID0gcHJlY2lzaW9uU3Rh
Y2tbbGV2ZWxdLT5maW5kKHR5cGUpOworICAgICAgICAgICAgaWYgKGl0ICE9IHByZWNpc2lvblN0
YWNrW2xldmVsXS0+ZW5kKCkpIHsKKyAgICAgICAgICAgICAgICBwcmVjID0gKCppdCkuc2Vjb25k
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGV2
ZWwtLTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcHJlYzsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgaW50IGN1cnJlbnRMZXZlbCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o
dGFibGUuc2l6ZSgpKSAtIDE7IH0KKworICAgIGJvb2wgc3VwcG9ydHNQcmVjaXNpb24oVEJhc2lj
VHlwZSB0eXBlKSB7CisgICAgICAvLyBPbmx5IHN1cHBvcnRzIHByZWNpc2lvbiBmb3IgaW50LCBm
bG9hdCwgYW5kIHNhbXBsZXIgdHlwZXMuCisgICAgICByZXR1cm4gdHlwZSA9PSBFYnRGbG9hdCB8
fCB0eXBlID09IEVidEludCB8fCBJc1NhbXBsZXIodHlwZSk7CisgICAgfQorCisgICAgaW50IHVu
aXF1ZUlkOyAgICAgLy8gZm9yIHVuaXF1ZSBpZGVudGlmaWNhdGlvbiBpbiBjb2RlIGdlbmVyYXRp
b24KKyAgICBzdGQ6OnZlY3RvcjxUU3ltYm9sVGFibGVMZXZlbCo+IHRhYmxlOworICAgIHR5cGVk
ZWYgVE1hcDxUQmFzaWNUeXBlLCBUUHJlY2lzaW9uPiBQcmVjaXNpb25TdGFja0xldmVsOworICAg
IHN0ZDo6dmVjdG9yPFByZWNpc2lvblN0YWNrTGV2ZWwqPiBwcmVjaXNpb25TdGFjazsKK307CisK
KyNlbmRpZiAvLyBfU1lNQk9MX1RBQkxFX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckVTU0wuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvckVTU0wuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkyNjJmN2FmOGNiODVhNjIzYzg4MGM3MTM1ODIzZTBl
MzI0OTY2MWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yRVNTTC5jcHAKQEAgLTAsMCArMSw0MyBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvckVTU0wuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0RVNTTC5o
IgorCitUcmFuc2xhdG9yRVNTTDo6VHJhbnNsYXRvckVTU0woU2hTaGFkZXJUeXBlIHR5cGUsIFNo
U2hhZGVyU3BlYyBzcGVjKQorICAgIDogVENvbXBpbGVyKHR5cGUsIHNwZWMpIHsKK30KKwordm9p
ZCBUcmFuc2xhdG9yRVNTTDo6dHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KSB7CisgICAgVElu
Zm9TaW5rQmFzZSYgc2luayA9IGdldEluZm9TaW5rKCkub2JqOworCisgICAgLy8gV3JpdGUgYnVp
bHQtaW4gZXh0ZW5zaW9uIGJlaGF2aW9ycy4KKyAgICB3cml0ZUV4dGVuc2lvbkJlaGF2aW9yKCk7
CisKKyAgICAvLyBXcml0ZSBlbXVsYXRlZCBidWlsdC1pbiBmdW5jdGlvbnMgaWYgbmVlZGVkLgor
ICAgIGdldEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yKCkuT3V0cHV0RW11bGF0ZWRGdW5jdGlvbkRl
ZmluaXRpb24oCisgICAgICAgIHNpbmssIGdldFNoYWRlclR5cGUoKSA9PSBTSF9GUkFHTUVOVF9T
SEFERVIpOworCisgICAgLy8gV3JpdGUgYXJyYXkgYm91bmRzIGNsYW1waW5nIGVtdWxhdGlvbiBp
ZiBuZWVkZWQuCisgICAgZ2V0QXJyYXlCb3VuZHNDbGFtcGVyKCkuT3V0cHV0Q2xhbXBpbmdGdW5j
dGlvbkRlZmluaXRpb24oc2luayk7CisKKyAgICAvLyBXcml0ZSB0cmFuc2xhdGVkIHNoYWRlci4K
KyAgICBUT3V0cHV0RVNTTCBvdXRwdXRFU1NMKHNpbmssIGdldEFycmF5SW5kZXhDbGFtcGluZ1N0
cmF0ZWd5KCksIGdldEhhc2hGdW5jdGlvbigpLCBnZXROYW1lTWFwKCksIGdldFN5bWJvbFRhYmxl
KCkpOworICAgIHJvb3QtPnRyYXZlcnNlKCZvdXRwdXRFU1NMKTsKK30KKwordm9pZCBUcmFuc2xh
dG9yRVNTTDo6d3JpdGVFeHRlbnNpb25CZWhhdmlvcigpIHsKKyAgICBUSW5mb1NpbmtCYXNlJiBz
aW5rID0gZ2V0SW5mb1NpbmsoKS5vYmo7CisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBl
eHRlbnNpb25CZWhhdmlvciA9IGdldEV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgZm9yIChURXh0
ZW5zaW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRlbnNpb25CZWhhdmlvci5i
ZWdpbigpOworICAgICAgICAgaXRlciAhPSBleHRlbnNpb25CZWhhdmlvci5lbmQoKTsgKytpdGVy
KSB7CisgICAgICAgIGlmIChpdGVyLT5zZWNvbmQgIT0gRUJoVW5kZWZpbmVkKSB7CisgICAgICAg
ICAgICBzaW5rIDw8ICIjZXh0ZW5zaW9uICIgPDwgaXRlci0+Zmlyc3QgPDwgIiA6ICIKKyAgICAg
ICAgICAgICAgICAgPDwgZ2V0QmVoYXZpb3JTdHJpbmcoaXRlci0+c2Vjb25kKSA8PCAiXG4iOwor
ICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckVTU0wuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JFU1NMLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZTE4ZjNjMjVlYzhiOWVlNTI5NmRkODhhZGRkNWUxM2Q2NjMyZjJhMwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JFU1NMLmgKQEAgLTAsMCArMSwyMyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SRVNTTF9IXworI2RlZmluZSBDT01QSUxFUl9UUkFO
U0xBVE9SRVNTTF9IXworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5o
IgorCitjbGFzcyBUcmFuc2xhdG9yRVNTTCA6IHB1YmxpYyBUQ29tcGlsZXIgeworcHVibGljOgor
ICAgIFRyYW5zbGF0b3JFU1NMKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYyk7
CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiBy
b290KTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHdyaXRlRXh0ZW5zaW9uQmVoYXZpb3IoKTsKK307
CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUkVTU0xfSF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JH
TFNMLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JHTFNMLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42Njg4ZDdmMzYyZTkwYmRjYzdhZjhmMWE0
YWQ1MWE2MDRiNTJjMGExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckdMU0wuY3BwCkBAIC0wLDAgKzEs
NDQgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JHTFNMLmgiCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL091dHB1
dEdMU0wuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1ZlcnNpb25HTFNMLmgiCisK
K3N0YXRpYyB2b2lkIHdyaXRlVmVyc2lvbihTaFNoYWRlclR5cGUgdHlwZSwgVEludGVybU5vZGUq
IHJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgVEluZm9TaW5rQmFzZSYgc2luaykgewor
ICAgIFRWZXJzaW9uR0xTTCB2ZXJzaW9uR0xTTCh0eXBlKTsKKyAgICByb290LT50cmF2ZXJzZSgm
dmVyc2lvbkdMU0wpOworICAgIGludCB2ZXJzaW9uID0gdmVyc2lvbkdMU0wuZ2V0VmVyc2lvbigp
OworICAgIC8vIFdlIG5lZWQgdG8gd3JpdGUgdmVyc2lvbiBkaXJlY3RpdmUgb25seSBpZiBpdCBp
cyBncmVhdGVyIHRoYW4gMTEwLgorICAgIC8vIElmIHRoZXJlIGlzIG5vIHZlcnNpb24gZGlyZWN0
aXZlIGluIHRoZSBzaGFkZXIsIDExMCBpcyBpbXBsaWVkLgorICAgIGlmICh2ZXJzaW9uID4gMTEw
KSB7CisgICAgICAgIHNpbmsgPDwgIiN2ZXJzaW9uICIgPDwgdmVyc2lvbiA8PCAiXG4iOworICAg
IH0KK30KKworVHJhbnNsYXRvckdMU0w6OlRyYW5zbGF0b3JHTFNMKFNoU2hhZGVyVHlwZSB0eXBl
LCBTaFNoYWRlclNwZWMgc3BlYykKKyAgICA6IFRDb21waWxlcih0eXBlLCBzcGVjKSB7Cit9CisK
K3ZvaWQgVHJhbnNsYXRvckdMU0w6OnRyYW5zbGF0ZShUSW50ZXJtTm9kZSogcm9vdCkgeworICAg
IFRJbmZvU2lua0Jhc2UmIHNpbmsgPSBnZXRJbmZvU2luaygpLm9iajsKKworICAgIC8vIFdyaXRl
IEdMU0wgdmVyc2lvbi4KKyAgICB3cml0ZVZlcnNpb24oZ2V0U2hhZGVyVHlwZSgpLCByb290LCBz
aW5rKTsKKworICAgIC8vIFdyaXRlIGVtdWxhdGVkIGJ1aWx0LWluIGZ1bmN0aW9ucyBpZiBuZWVk
ZWQuCisgICAgZ2V0QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IoKS5PdXRwdXRFbXVsYXRlZEZ1bmN0
aW9uRGVmaW5pdGlvbigKKyAgICAgICAgc2luaywgZmFsc2UpOworCisgICAgLy8gV3JpdGUgYXJy
YXkgYm91bmRzIGNsYW1waW5nIGVtdWxhdGlvbiBpZiBuZWVkZWQuCisgICAgZ2V0QXJyYXlCb3Vu
ZHNDbGFtcGVyKCkuT3V0cHV0Q2xhbXBpbmdGdW5jdGlvbkRlZmluaXRpb24oc2luayk7CisKKyAg
ICAvLyBXcml0ZSB0cmFuc2xhdGVkIHNoYWRlci4KKyAgICBUT3V0cHV0R0xTTCBvdXRwdXRHTFNM
KHNpbmssIGdldEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5KCksIGdldEhhc2hGdW5jdGlvbigp
LCBnZXROYW1lTWFwKCksIGdldFN5bWJvbFRhYmxlKCkpOworICAgIHJvb3QtPnRyYXZlcnNlKCZv
dXRwdXRHTFNMKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JHTFNMLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yR0xTTC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjQwYmIzMTQ1ZTgwZjdiMjIyYzUzY2JkMzgzMmUxOGZlYmU3OTc2YzcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yR0xTTC5oCkBAIC0wLDAgKzEsMjAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5k
ZWYgQ09NUElMRVJfVFJBTlNMQVRPUkdMU0xfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRP
UkdMU0xfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU2hIYW5kbGUuaCIKKwor
Y2xhc3MgVHJhbnNsYXRvckdMU0wgOiBwdWJsaWMgVENvbXBpbGVyIHsKK3B1YmxpYzoKKyAgICBU
cmFuc2xhdG9yR0xTTChTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMpOworCitw
cm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShUSW50ZXJtTm9kZSogcm9vdCk7
Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JHTFNMX0hfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9ySExTTC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9ySExTTC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2MxZGIwMTFiNjZhMjJlYTI2NGZl
OWIxZDY3NTFkMmE5OWQ3ZGY3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JITFNMLmNwcApAQCAtMCww
ICsxLDI0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9ySExTTC5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9J
bml0aWFsaXplUGFyc2VDb250ZXh0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9P
dXRwdXRITFNMLmgiCisKK1RyYW5zbGF0b3JITFNMOjpUcmFuc2xhdG9ySExTTChTaFNoYWRlclR5
cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsIFNoU2hhZGVyT3V0cHV0IG91dHB1dCkKKyAgICA6
IFRDb21waWxlcih0eXBlLCBzcGVjKSwgbU91dHB1dFR5cGUob3V0cHV0KQoreworfQorCit2b2lk
IFRyYW5zbGF0b3JITFNMOjp0cmFuc2xhdGUoVEludGVybU5vZGUgKnJvb3QpCit7CisgICAgVFBh
cnNlQ29udGV4dCYgcGFyc2VDb250ZXh0ID0gKkdldEdsb2JhbFBhcnNlQ29udGV4dCgpOworICAg
IHNoOjpPdXRwdXRITFNMIG91dHB1dEhMU0wocGFyc2VDb250ZXh0LCBnZXRSZXNvdXJjZXMoKSwg
bU91dHB1dFR5cGUpOworCisgICAgb3V0cHV0SExTTC5vdXRwdXQoKTsKKyAgICBtQWN0aXZlVW5p
Zm9ybXMgPSBvdXRwdXRITFNMLmdldFVuaWZvcm1zKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9ySExTTC5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvckhMU0wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MjA0YjMwY2MyNDFhYzc5MGYzNjZjZjIzZGNlZDdmZWIx
NzA5NDYzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckhMU0wuaApAQCAtMCwwICsxLDI3IEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JITFNMX0hfCisjZGVm
aW5lIENPTVBJTEVSX1RSQU5TTEFUT1JITFNMX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1NoSGFuZGxlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3Jt
LmgiCisKK2NsYXNzIFRyYW5zbGF0b3JITFNMIDogcHVibGljIFRDb21waWxlciB7CitwdWJsaWM6
CisgICAgVHJhbnNsYXRvckhMU0woU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVj
LCBTaFNoYWRlck91dHB1dCBvdXRwdXQpOworCisgICAgdmlydHVhbCBUcmFuc2xhdG9ySExTTCAq
Z2V0QXNUcmFuc2xhdG9ySExTTCgpIHsgcmV0dXJuIHRoaXM7IH0KKyAgICBjb25zdCBzaDo6QWN0
aXZlVW5pZm9ybXMgJmdldFVuaWZvcm1zKCkgeyByZXR1cm4gbUFjdGl2ZVVuaWZvcm1zOyB9CisK
K3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290
KTsKKworICAgIHNoOjpBY3RpdmVVbmlmb3JtcyBtQWN0aXZlVW5pZm9ybXM7CisgICAgU2hTaGFk
ZXJPdXRwdXQgbU91dHB1dFR5cGU7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFU
T1JITFNMX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UeXBlcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMTlmNGYyOWU1NWZmMWY2Nzc4Yzg5
MDJmMmFlZTZjNTNhOGQwYmI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHlwZXMuaApAQCAtMCwwICsxLDMwNyBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfVFlQRVNfSU5DTFVERUQKKyNkZWZpbmUgX1RZ
UEVTX0lOQ0xVREVECisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9CYXNlVHlwZXMuaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL0NvbW1vbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvY29tcGls
ZXJkZWJ1Zy5oIgorCitzdHJ1Y3QgVFB1YmxpY1R5cGU7CitjbGFzcyBUVHlwZTsKKworY2xhc3Mg
VEZpZWxkCit7CitwdWJsaWM6CisgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSgpOworICAg
IFRGaWVsZChUVHlwZSogdHlwZSwgVFN0cmluZyogbmFtZSkgOiBtVHlwZSh0eXBlKSwgbU5hbWUo
bmFtZSkge30KKworICAgIC8vIFRPRE8oYWxva3ApOiBXZSBzaG91bGQgb25seSByZXR1cm4gY29u
c3QgdHlwZS4KKyAgICAvLyBGaXggaXQgYnkgdHdlYWtpbmcgZ3JhbW1hci4KKyAgICBUVHlwZSog
dHlwZSgpIHsgcmV0dXJuIG1UeXBlOyB9CisgICAgY29uc3QgVFR5cGUqIHR5cGUoKSBjb25zdCB7
IHJldHVybiBtVHlwZTsgfQorCisgICAgY29uc3QgVFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0
dXJuICptTmFtZTsgfQorCitwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihU
RmllbGQpOworICAgIFRUeXBlKiBtVHlwZTsKKyAgICBUU3RyaW5nKiBtTmFtZTsKK307CisKK3R5
cGVkZWYgVFZlY3RvcjxURmllbGQqPiBURmllbGRMaXN0OworaW5saW5lIFRGaWVsZExpc3QqIE5l
d1Bvb2xURmllbGRMaXN0KCkKK3sKKyAgICB2b2lkKiBtZW1vcnkgPSBHZXRHbG9iYWxQb29sQWxs
b2NhdG9yKCktPmFsbG9jYXRlKHNpemVvZihURmllbGRMaXN0KSk7CisgICAgcmV0dXJuIG5ldyht
ZW1vcnkpIFRGaWVsZExpc3Q7Cit9CisKK2NsYXNzIFRTdHJ1Y3R1cmUKK3sKK3B1YmxpYzoKKyAg
ICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKCk7CisgICAgVFN0cnVjdHVyZShUU3RyaW5nKiBu
YW1lLCBURmllbGRMaXN0KiBmaWVsZHMpCisgICAgICAgIDogbU5hbWUobmFtZSksCisgICAgICAg
ICAgbUZpZWxkcyhmaWVsZHMpLAorICAgICAgICAgIG1PYmplY3RTaXplKDApLAorICAgICAgICAg
IG1EZWVwZXN0TmVzdGluZygwKSB7CisgICAgfQorCisgICAgY29uc3QgVFN0cmluZyYgbmFtZSgp
IGNvbnN0IHsgcmV0dXJuICptTmFtZTsgfQorICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcygp
IGNvbnN0IHsgcmV0dXJuICptRmllbGRzOyB9CisKKyAgICBjb25zdCBUU3RyaW5nJiBtYW5nbGVk
TmFtZSgpIGNvbnN0IHsKKyAgICAgICAgaWYgKG1NYW5nbGVkTmFtZS5lbXB0eSgpKQorICAgICAg
ICAgICAgbU1hbmdsZWROYW1lID0gYnVpbGRNYW5nbGVkTmFtZSgpOworICAgICAgICByZXR1cm4g
bU1hbmdsZWROYW1lOworICAgIH0KKyAgICBzaXplX3Qgb2JqZWN0U2l6ZSgpIGNvbnN0IHsKKyAg
ICAgICAgaWYgKG1PYmplY3RTaXplID09IDApCisgICAgICAgICAgICBtT2JqZWN0U2l6ZSA9IGNh
bGN1bGF0ZU9iamVjdFNpemUoKTsKKyAgICAgICAgcmV0dXJuIG1PYmplY3RTaXplOworICAgIH07
CisgICAgaW50IGRlZXBlc3ROZXN0aW5nKCkgY29uc3QgeworICAgICAgICBpZiAobURlZXBlc3RO
ZXN0aW5nID09IDApCisgICAgICAgICAgICBtRGVlcGVzdE5lc3RpbmcgPSBjYWxjdWxhdGVEZWVw
ZXN0TmVzdGluZygpOworICAgICAgICByZXR1cm4gbURlZXBlc3ROZXN0aW5nOworICAgIH0KKyAg
ICBib29sIGNvbnRhaW5zQXJyYXlzKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgRElTQUxMT1df
Q09QWV9BTkRfQVNTSUdOKFRTdHJ1Y3R1cmUpOworICAgIFRTdHJpbmcgYnVpbGRNYW5nbGVkTmFt
ZSgpIGNvbnN0OworICAgIHNpemVfdCBjYWxjdWxhdGVPYmplY3RTaXplKCkgY29uc3Q7CisgICAg
aW50IGNhbGN1bGF0ZURlZXBlc3ROZXN0aW5nKCkgY29uc3Q7CisKKyAgICBUU3RyaW5nKiBtTmFt
ZTsKKyAgICBURmllbGRMaXN0KiBtRmllbGRzOworCisgICAgbXV0YWJsZSBUU3RyaW5nIG1NYW5n
bGVkTmFtZTsKKyAgICBtdXRhYmxlIHNpemVfdCBtT2JqZWN0U2l6ZTsKKyAgICBtdXRhYmxlIGlu
dCBtRGVlcGVzdE5lc3Rpbmc7Cit9OworCisvLworLy8gQmFzZSBjbGFzcyBmb3IgdGhpbmdzIHRo
YXQgaGF2ZSBhIHR5cGUuCisvLworY2xhc3MgVFR5cGUKK3sKK3B1YmxpYzoKKyAgICBQT09MX0FM
TE9DQVRPUl9ORVdfREVMRVRFKCk7CisgICAgVFR5cGUoKSB7fQorICAgIFRUeXBlKFRCYXNpY1R5
cGUgdCwgVFByZWNpc2lvbiBwLCBUUXVhbGlmaWVyIHEgPSBFdnFUZW1wb3JhcnksIHVuc2lnbmVk
IGNoYXIgcyA9IDEsIGJvb2wgbSA9IGZhbHNlLCBib29sIGEgPSBmYWxzZSkgOgorICAgICAgICAg
ICAgdHlwZSh0KSwgcHJlY2lzaW9uKHApLCBxdWFsaWZpZXIocSksIHNpemUocyksIG1hdHJpeCht
KSwgYXJyYXkoYSksIGFycmF5U2l6ZSgwKSwgc3RydWN0dXJlKDApCisgICAgeworICAgIH0KKyAg
ICBleHBsaWNpdCBUVHlwZShjb25zdCBUUHVibGljVHlwZSAmcCk7CisgICAgVFR5cGUoVFN0cnVj
dHVyZSogdXNlckRlZiwgVFByZWNpc2lvbiBwID0gRWJwVW5kZWZpbmVkKSA6CisgICAgICAgICAg
ICB0eXBlKEVidFN0cnVjdCksIHByZWNpc2lvbihwKSwgcXVhbGlmaWVyKEV2cVRlbXBvcmFyeSks
IHNpemUoMSksIG1hdHJpeChmYWxzZSksIGFycmF5KGZhbHNlKSwgYXJyYXlTaXplKDApLCBzdHJ1
Y3R1cmUodXNlckRlZikKKyAgICB7CisgICAgfQorCisgICAgVEJhc2ljVHlwZSBnZXRCYXNpY1R5
cGUoKSBjb25zdCB7IHJldHVybiB0eXBlOyB9CisgICAgdm9pZCBzZXRCYXNpY1R5cGUoVEJhc2lj
VHlwZSB0KSB7IHR5cGUgPSB0OyB9CisKKyAgICBUUHJlY2lzaW9uIGdldFByZWNpc2lvbigpIGNv
bnN0IHsgcmV0dXJuIHByZWNpc2lvbjsgfQorICAgIHZvaWQgc2V0UHJlY2lzaW9uKFRQcmVjaXNp
b24gcCkgeyBwcmVjaXNpb24gPSBwOyB9CisKKyAgICBUUXVhbGlmaWVyIGdldFF1YWxpZmllcigp
IGNvbnN0IHsgcmV0dXJuIHF1YWxpZmllcjsgfQorICAgIHZvaWQgc2V0UXVhbGlmaWVyKFRRdWFs
aWZpZXIgcSkgeyBxdWFsaWZpZXIgPSBxOyB9CisKKyAgICAvLyBPbmUtZGltZW5zaW9uYWwgc2l6
ZSBvZiBzaW5nbGUgaW5zdGFuY2UgdHlwZQorICAgIGludCBnZXROb21pbmFsU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIHNpemU7IH0KKyAgICB2b2lkIHNldE5vbWluYWxTaXplKHVuc2lnbmVkIGNoYXIg
cykgeyBzaXplID0gczsgfQorICAgIC8vIEZ1bGwgc2l6ZSBvZiBzaW5nbGUgaW5zdGFuY2Ugb2Yg
dHlwZQorICAgIHNpemVfdCBnZXRPYmplY3RTaXplKCkgY29uc3Q7CisKKyAgICBpbnQgZWxlbWVu
dFJlZ2lzdGVyQ291bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gZ2V0U3RydWN0
KCktPmZpZWxkcygpOworICAgICAgICAgICAgaW50IHJlZ2lzdGVyQ291bnQgPSAwOworCisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZWdpc3RlckNvdW50ICs9IGZpZWxkc1tpXS0+dHlw
ZSgpLT50b3RhbFJlZ2lzdGVyQ291bnQoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
cmV0dXJuIHJlZ2lzdGVyQ291bnQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaXNNYXRy
aXgoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdldE5vbWluYWxTaXplKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gMTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGludCB0b3RhbFJlZ2lzdGVyQ291bnQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKGFycmF5KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
YXJyYXlTaXplICogZWxlbWVudFJlZ2lzdGVyQ291bnQoKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50UmVnaXN0ZXJDb3VudCgp
OworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBpc01hdHJpeCgpIGNvbnN0IHsgcmV0dXJu
IG1hdHJpeCA/IHRydWUgOiBmYWxzZTsgfQorICAgIHZvaWQgc2V0TWF0cml4KGJvb2wgbSkgeyBt
YXRyaXggPSBtOyB9CisKKyAgICBib29sIGlzQXJyYXkoKSBjb25zdCAgeyByZXR1cm4gYXJyYXkg
PyB0cnVlIDogZmFsc2U7IH0KKyAgICBpbnQgZ2V0QXJyYXlTaXplKCkgY29uc3QgeyByZXR1cm4g
YXJyYXlTaXplOyB9CisgICAgdm9pZCBzZXRBcnJheVNpemUoaW50IHMpIHsgYXJyYXkgPSB0cnVl
OyBhcnJheVNpemUgPSBzOyB9CisgICAgdm9pZCBjbGVhckFycmF5bmVzcygpIHsgYXJyYXkgPSBm
YWxzZTsgYXJyYXlTaXplID0gMDsgfQorCisgICAgYm9vbCBpc1ZlY3RvcigpIGNvbnN0IHsgcmV0
dXJuIHNpemUgPiAxICYmICFtYXRyaXg7IH0KKyAgICBib29sIGlzU2NhbGFyKCkgY29uc3QgeyBy
ZXR1cm4gc2l6ZSA9PSAxICYmICFtYXRyaXggJiYgIXN0cnVjdHVyZTsgfQorCisgICAgVFN0cnVj
dHVyZSogZ2V0U3RydWN0KCkgY29uc3QgeyByZXR1cm4gc3RydWN0dXJlOyB9CisgICAgdm9pZCBz
ZXRTdHJ1Y3QoVFN0cnVjdHVyZSogcykgeyBzdHJ1Y3R1cmUgPSBzOyB9CisKKyAgICBjb25zdCBU
U3RyaW5nJiBnZXRNYW5nbGVkTmFtZSgpIGNvbnN0IHsKKyAgICAgICAgaWYgKG1hbmdsZWQuZW1w
dHkoKSkgeworICAgICAgICAgICAgbWFuZ2xlZCA9IGJ1aWxkTWFuZ2xlZE5hbWUoKTsKKyAgICAg
ICAgICAgIG1hbmdsZWQgKz0gJzsnOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtYW5nbGVk
OworICAgIH0KKworICAgIGJvb2wgc2FtZUVsZW1lbnRUeXBlKGNvbnN0IFRUeXBlJiByaWdodCkg
Y29uc3QgeworICAgICAgICByZXR1cm4gICAgICB0eXBlID09IHJpZ2h0LnR5cGUgICAmJgorICAg
ICAgICAgICAgICAgICAgICBzaXplID09IHJpZ2h0LnNpemUgICAmJgorICAgICAgICAgICAgICAg
ICAgbWF0cml4ID09IHJpZ2h0Lm1hdHJpeCAmJgorICAgICAgICAgICAgICAgc3RydWN0dXJlID09
IHJpZ2h0LnN0cnVjdHVyZTsKKyAgICB9CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRUeXBl
JiByaWdodCkgY29uc3QgeworICAgICAgICByZXR1cm4gICAgICB0eXBlID09IHJpZ2h0LnR5cGUg
ICAmJgorICAgICAgICAgICAgICAgICAgICBzaXplID09IHJpZ2h0LnNpemUgICAmJgorICAgICAg
ICAgICAgICAgICAgbWF0cml4ID09IHJpZ2h0Lm1hdHJpeCAmJgorICAgICAgICAgICAgICAgICAg
IGFycmF5ID09IHJpZ2h0LmFycmF5ICAmJiAoIWFycmF5IHx8IGFycmF5U2l6ZSA9PSByaWdodC5h
cnJheVNpemUpICYmCisgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPT0gcmlnaHQuc3RydWN0dXJl
OworICAgICAgICAvLyBkb24ndCBjaGVjayB0aGUgcXVhbGlmaWVyLCBpdCdzIG5vdCBldmVyIHdo
YXQncyBiZWluZyBzb3VnaHQgYWZ0ZXIKKyAgICB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IFRUeXBlJiByaWdodCkgY29uc3QgeworICAgICAgICByZXR1cm4gIW9wZXJhdG9yPT0ocmlnaHQp
OworICAgIH0KKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBUVHlwZSYgcmlnaHQpIGNvbnN0IHsK
KyAgICAgICAgaWYgKHR5cGUgIT0gcmlnaHQudHlwZSkgcmV0dXJuIHR5cGUgPCByaWdodC50eXBl
OworICAgICAgICBpZiAoc2l6ZSAhPSByaWdodC5zaXplKSByZXR1cm4gc2l6ZSA8IHJpZ2h0LnNp
emU7CisgICAgICAgIGlmIChtYXRyaXggIT0gcmlnaHQubWF0cml4KSByZXR1cm4gbWF0cml4IDwg
cmlnaHQubWF0cml4OworICAgICAgICBpZiAoYXJyYXkgIT0gcmlnaHQuYXJyYXkpIHJldHVybiBh
cnJheSA8IHJpZ2h0LmFycmF5OworICAgICAgICBpZiAoYXJyYXlTaXplICE9IHJpZ2h0LmFycmF5
U2l6ZSkgcmV0dXJuIGFycmF5U2l6ZSA8IHJpZ2h0LmFycmF5U2l6ZTsKKyAgICAgICAgaWYgKHN0
cnVjdHVyZSAhPSByaWdodC5zdHJ1Y3R1cmUpIHJldHVybiBzdHJ1Y3R1cmUgPCByaWdodC5zdHJ1
Y3R1cmU7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGNvbnN0IGNoYXIq
IGdldEJhc2ljU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gOjpnZXRCYXNpY1N0cmluZyh0eXBlKTsg
fQorICAgIGNvbnN0IGNoYXIqIGdldFByZWNpc2lvblN0cmluZygpIGNvbnN0IHsgcmV0dXJuIDo6
Z2V0UHJlY2lzaW9uU3RyaW5nKHByZWNpc2lvbik7IH0KKyAgICBjb25zdCBjaGFyKiBnZXRRdWFs
aWZpZXJTdHJpbmcoKSBjb25zdCB7IHJldHVybiA6OmdldFF1YWxpZmllclN0cmluZyhxdWFsaWZp
ZXIpOyB9CisgICAgVFN0cmluZyBnZXRDb21wbGV0ZVN0cmluZygpIGNvbnN0OworCisgICAgLy8g
SWYgdGhpcyB0eXBlIGlzIGEgc3RydWN0LCByZXR1cm5zIHRoZSBkZWVwZXN0IHN0cnVjdCBuZXN0
aW5nIG9mCisgICAgLy8gYW55IGZpZWxkIGluIHRoZSBzdHJ1Y3QuIEZvciBleGFtcGxlOgorICAg
IC8vICAgc3RydWN0IG5lc3RpbmcxIHsKKyAgICAvLyAgICAgdmVjNCBwb3NpdGlvbjsKKyAgICAv
LyAgIH07CisgICAgLy8gICBzdHJ1Y3QgbmVzdGluZzIgeworICAgIC8vICAgICBuZXN0aW5nMSBm
aWVsZDE7CisgICAgLy8gICAgIHZlYzQgZmllbGQyOworICAgIC8vICAgfTsKKyAgICAvLyBGb3Ig
dHlwZSAibmVzdGluZzIiLCB0aGlzIG1ldGhvZCB3b3VsZCByZXR1cm4gMiAtLSB0aGUgbnVtYmVy
CisgICAgLy8gb2Ygc3RydWN0dXJlcyB0aHJvdWdoIHdoaWNoIGluZGlyZWN0aW9uIG11c3Qgb2Nj
dXIgdG8gcmVhY2ggdGhlCisgICAgLy8gZGVlcGVzdCBmaWVsZCAobmVzdGluZzIuZmllbGQxLnBv
c2l0aW9uKS4KKyAgICBpbnQgZ2V0RGVlcGVzdFN0cnVjdE5lc3RpbmcoKSBjb25zdCB7CisgICAg
ICAgIHJldHVybiBzdHJ1Y3R1cmUgPyBzdHJ1Y3R1cmUtPmRlZXBlc3ROZXN0aW5nKCkgOiAwOwor
ICAgIH0KKworICAgIGJvb2wgaXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlzKCkgY29uc3Qgewor
ICAgICAgICByZXR1cm4gc3RydWN0dXJlID8gc3RydWN0dXJlLT5jb250YWluc0FycmF5cygpIDog
ZmFsc2U7CisgICAgfQorCitwcml2YXRlOgorICAgIFRTdHJpbmcgYnVpbGRNYW5nbGVkTmFtZSgp
IGNvbnN0OworCisgICAgVEJhc2ljVHlwZSB0eXBlOworICAgIFRQcmVjaXNpb24gcHJlY2lzaW9u
OworICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyOworICAgIHVuc2lnbmVkIGNoYXIgc2l6ZTsKKyAg
ICBib29sIG1hdHJpeDsKKyAgICBib29sIGFycmF5OworICAgIGludCBhcnJheVNpemU7CisKKyAg
ICBUU3RydWN0dXJlKiBzdHJ1Y3R1cmU7ICAgICAgLy8gMCB1bmxlc3MgdGhpcyBpcyBhIHN0cnVj
dAorCisgICAgbXV0YWJsZSBUU3RyaW5nIG1hbmdsZWQ7Cit9OworCisvLworLy8gVGhpcyBpcyBh
IHdvcmthcm91bmQgZm9yIGEgcHJvYmxlbSB3aXRoIHRoZSB5YWNjIHN0YWNrLCAgSXQgY2FuJ3Qg
aGF2ZQorLy8gdHlwZXMgdGhhdCBpdCB0aGlua3MgaGF2ZSBub24tdHJpdmlhbCBjb25zdHJ1Y3Rv
cnMuICBJdCBzaG91bGQKKy8vIGp1c3QgYmUgdXNlZCB3aGlsZSByZWNvZ25pemluZyB0aGUgZ3Jh
bW1hciwgbm90IGFueXRoaW5nIGVsc2UuICBQb2ludGVycworLy8gY291bGQgYmUgdXNlZCwgYnV0
IGFsc28gdHJ5aW5nIHRvIGF2b2lkIGxvdHMgb2YgbWVtb3J5IG1hbmFnZW1lbnQgb3ZlcmhlYWQu
CisvLworLy8gTm90IGFzIGJhZCBhcyBpdCBsb29rcywgdGhlcmUgaXMgbm8gYWN0dWFsIGFzc3Vt
cHRpb24gdGhhdCB0aGUgZmllbGRzCisvLyBtYXRjaCB1cCBvciBhcmUgbmFtZSB0aGUgc2FtZSBv
ciBhbnl0aGluZyBsaWtlIHRoYXQuCisvLworc3RydWN0IFRQdWJsaWNUeXBlCit7CisgICAgVEJh
c2ljVHlwZSB0eXBlOworICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyOworICAgIFRQcmVjaXNpb24g
cHJlY2lzaW9uOworICAgIHVuc2lnbmVkIGNoYXIgc2l6ZTsgICAgICAgICAgLy8gc2l6ZSBvZiB2
ZWN0b3Igb3IgbWF0cml4LCBub3Qgc2l6ZSBvZiBhcnJheQorICAgIGJvb2wgbWF0cml4OworICAg
IGJvb2wgYXJyYXk7CisgICAgaW50IGFycmF5U2l6ZTsKKyAgICBUVHlwZSogdXNlckRlZjsKKyAg
ICBUU291cmNlTG9jIGxpbmU7CisKKyAgICB2b2lkIHNldEJhc2ljKFRCYXNpY1R5cGUgYnQsIFRR
dWFsaWZpZXIgcSwgY29uc3QgVFNvdXJjZUxvYyYgbG4pCisgICAgeworICAgICAgICB0eXBlID0g
YnQ7CisgICAgICAgIHF1YWxpZmllciA9IHE7CisgICAgICAgIHByZWNpc2lvbiA9IEVicFVuZGVm
aW5lZDsKKyAgICAgICAgc2l6ZSA9IDE7CisgICAgICAgIG1hdHJpeCA9IGZhbHNlOworICAgICAg
ICBhcnJheSA9IGZhbHNlOworICAgICAgICBhcnJheVNpemUgPSAwOworICAgICAgICB1c2VyRGVm
ID0gMDsKKyAgICAgICAgbGluZSA9IGxuOworICAgIH0KKworICAgIHZvaWQgc2V0QWdncmVnYXRl
KHVuc2lnbmVkIGNoYXIgcywgYm9vbCBtID0gZmFsc2UpCisgICAgeworICAgICAgICBzaXplID0g
czsKKyAgICAgICAgbWF0cml4ID0gbTsKKyAgICB9CisKKyAgICB2b2lkIHNldEFycmF5KGJvb2wg
YSwgaW50IHMgPSAwKQorICAgIHsKKyAgICAgICAgYXJyYXkgPSBhOworICAgICAgICBhcnJheVNp
emUgPSBzOworICAgIH0KKworICAgIGJvb2wgaXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlzKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmICghdXNlckRlZikKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHVzZXJEZWYtPmlz
U3RydWN0dXJlQ29udGFpbmluZ0FycmF5cygpOworICAgIH0KK307CisKKyNlbmRpZiAvLyBfVFlQ
RVNfSU5DTFVERURfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iNzgyNjExOWFlYTAwNzRkNGZjY2MwNDg1NTdkMDExMWY3ODkwODMyCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcApAQCAtMCwwICsxLDE4NCBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKy8vIFVuZm9sZFNob3J0Q2lyY3VpdCBpcyBhbiBBU1QgdHJhdmVyc2VyIHRvIG91
dHB1dCBzaG9ydC1jaXJjdWl0aW5nIG9wZXJhdG9ycyBhcyBpZi1lbHNlIHN0YXRlbWVudHMuCisv
LyBUaGUgcmVzdWx0cyBhcmUgYXNzaWduZWQgdG8gcyMgdGVtcG9yYXJpZXMsIHdoaWNoIGFyZSB1
c2VkIGJ5IHRoZSBtYWluIHRyYW5zbGF0b3IgaW5zdGVhZCBvZgorLy8gdGhlIG9yaWdpbmFsIGV4
cHJlc3Npb24uCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9y
dENpcmN1aXQuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuaCIKKworbmFtZXNwYWNl
IHNoCit7CitVbmZvbGRTaG9ydENpcmN1aXQ6OlVuZm9sZFNob3J0Q2lyY3VpdChUUGFyc2VDb250
ZXh0ICZjb250ZXh0LCBPdXRwdXRITFNMICpvdXRwdXRITFNMKSA6IG1Db250ZXh0KGNvbnRleHQp
LCBtT3V0cHV0SExTTChvdXRwdXRITFNMKQoreworICAgIG1UZW1wb3JhcnlJbmRleCA9IDA7Cit9
CisKK3ZvaWQgVW5mb2xkU2hvcnRDaXJjdWl0Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkK
K3sKKyAgICBpbnQgcmV3aW5kSW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7CisgICAgbm9kZS0+dHJh
dmVyc2UodGhpcyk7CisgICAgbVRlbXBvcmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7Cit9CisKK2Jv
b2wgVW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJp
bmFyeSAqbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtT3V0cHV0SExTTC0+Z2V0
Qm9keVN0cmVhbSgpOworCisgICAgLy8gSWYgb3VyIHJpZ2h0IG5vZGUgZG9lc24ndCBoYXZlIHNp
ZGUgZWZmZWN0cywgd2Uga25vdyB3ZSBkb24ndCBuZWVkIHRvIHVuZm9sZCB0aGlzCisgICAgLy8g
ZXhwcmVzc2lvbjogdGhlcmUgd2lsbCBiZSBubyBzaG9ydC1jaXJjdWl0aW5nIHNpZGUgZWZmZWN0
cyB0byBhdm9pZAorICAgIC8vIChub3RlOiB1bmZvbGRpbmcgZG9lc24ndCBkZXBlbmQgb24gdGhl
IGxlZnQgbm9kZSAtLSBpdCB3aWxsIGFsd2F5cyBiZSBldmFsdWF0ZWQpCisgICAgaWYgKCFub2Rl
LT5nZXRSaWdodCgpLT5oYXNTaWRlRWZmZWN0cygpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAgIGNh
c2UgRU9wTG9naWNhbE9yOgorICAgICAgICAvLyAieCB8fCB5IiBpcyBlcXVpdmFsZW50IHRvICJ4
ID8gdHJ1ZSA6IHkiLCB3aGljaCB1bmZvbGRzIHRvICJib29sIHM7IGlmKHgpIHMgPSB0cnVlOyBl
bHNlIHMgPSB5OyIsCisgICAgICAgIC8vIGFuZCB0aGVuIGZ1cnRoZXIgc2ltcGxpZmllcyBkb3du
IHRvICJib29sIHMgPSB4OyBpZighcykgcyA9IHk7Ii4KKyAgICAgICAgeworICAgICAgICAgICAg
aW50IGkgPSBtVGVtcG9yYXJ5SW5kZXg7CisKKyAgICAgICAgICAgIG91dCA8PCAiYm9vbCBzIiA8
PCBpIDw8ICI7XG4iOworCisgICAgICAgICAgICBvdXQgPDwgIntcbiI7CisKKyAgICAgICAgICAg
IG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50
cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAicyIgPDwgaSA8PCAiID0gIjsKKyAg
ICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0
TGVmdCgpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgICAgICBvdXQgPDwgIjtcbiI7
CisgICAgICAgICAgICBvdXQgPDwgImlmICghcyIgPDwgaSA8PCAiKVxuIgorICAgICAgICAgICAg
ICAgICAgICJ7XG4iOworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAg
ICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG91
dCA8PCAiICAgIHMiIDw8IGkgPDwgIiA9ICI7CisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXgg
PSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdldFJpZ2h0KCktPnRyYXZlcnNlKG1PdXRwdXRI
TFNMKTsKKyAgICAgICAgICAgIG91dCA8PCAiO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4i
OworCisgICAgICAgICAgICBvdXQgPDwgIn1cbiI7CisKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJ
bmRleCA9IGkgKyAxOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGNh
c2UgRU9wTG9naWNhbEFuZDoKKyAgICAgICAgLy8gInggJiYgeSIgaXMgZXF1aXZhbGVudCB0byAi
eCA/IHkgOiBmYWxzZSIsIHdoaWNoIHVuZm9sZHMgdG8gImJvb2wgczsgaWYoeCkgcyA9IHk7IGVs
c2UgcyA9IGZhbHNlOyIsCisgICAgICAgIC8vIGFuZCB0aGVuIGZ1cnRoZXIgc2ltcGxpZmllcyBk
b3duIHRvICJib29sIHMgPSB4OyBpZihzKSBzID0geTsiLgorICAgICAgICB7CisgICAgICAgICAg
ICBpbnQgaSA9IG1UZW1wb3JhcnlJbmRleDsKKworICAgICAgICAgICAgb3V0IDw8ICJib29sIHMi
IDw8IGkgPDwgIjtcbiI7CisKKyAgICAgICAgICAgIG91dCA8PCAie1xuIjsKKworICAgICAgICAg
ICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCkt
PnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICJzIiA8PCBpIDw8ICIgPSAiOwor
ICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5n
ZXRMZWZ0KCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKKyAgICAgICAgICAgIG91dCA8PCAiO1xu
IjsKKyAgICAgICAgICAgIG91dCA8PCAiaWYgKHMiIDw8IGkgPDwgIilcbiIKKyAgICAgICAgICAg
ICAgICAgICAie1xuIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAg
ICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICBv
dXQgPDwgIiAgICBzIiA8PCBpIDw8ICIgPSAiOworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4
ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZShtT3V0cHV0
SExTTCk7CisgICAgICAgICAgICBvdXQgPDwgIjtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxu
IjsKKworICAgICAgICAgICAgb3V0IDw8ICJ9XG4iOworCisgICAgICAgICAgICBtVGVtcG9yYXJ5
SW5kZXggPSBpICsgMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgVW5mb2xkU2hv
cnRDaXJjdWl0Ojp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAq
bm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtT3V0cHV0SExTTC0+Z2V0Qm9keVN0
cmVhbSgpOworCisgICAgLy8gVW5mb2xkICJiID8geCA6IHkiIGludG8gInR5cGUgczsgaWYoYikg
cyA9IHg7IGVsc2UgcyA9IHk7IgorICAgIGlmIChub2RlLT51c2VzVGVybmFyeU9wZXJhdG9yKCkp
CisgICAgeworICAgICAgICBpbnQgaSA9IG1UZW1wb3JhcnlJbmRleDsKKworICAgICAgICBvdXQg
PDwgbU91dHB1dEhMU0wtPnR5cGVTdHJpbmcobm9kZS0+Z2V0VHlwZSgpKSA8PCAiIHMiIDw8IGkg
PDwgIjtcbiI7CisKKyAgICAgICAgb3V0IDw8ICJ7XG4iOworCisgICAgICAgIG1UZW1wb3JhcnlJ
bmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhp
cyk7CisgICAgICAgIG91dCA8PCAiaWYgKCI7CisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkg
KyAxOworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UobU91dHB1dEhMU0wp
OworICAgICAgICBvdXQgPDwgIilcbiIKKyAgICAgICAgICAgICAgICJ7XG4iOworICAgICAgICBt
VGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRy
YXZlcnNlKHRoaXMpOworICAgICAgICBvdXQgPDwgIiAgICBzIiA8PCBpIDw8ICIgPSAiOworICAg
ICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2Nr
KCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKKyAgICAgICAgb3V0IDw8ICI7XG4iCisgICAgICAg
ICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgImVsc2VcbiIKKyAgICAgICAgICAgICAgICJ7
XG4iOworICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+Z2V0
RmFsc2VCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwg
aSA8PCAiID0gIjsKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgIG5v
ZGUtPmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICBvdXQg
PDwgIjtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iOworCisgICAgICAgIG91dCA8PCAifVxuIjsK
KworICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgVW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdExvb3AoVmlzaXQgdmlz
aXQsIFRJbnRlcm1Mb29wICpub2RlKQoreworICAgIGludCByZXdpbmRJbmRleCA9IG1UZW1wb3Jh
cnlJbmRleDsKKworICAgIGlmIChub2RlLT5nZXRJbml0KCkpCisgICAgeworICAgICAgICBub2Rl
LT5nZXRJbml0KCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKyAgICAKKyAgICBpZiAobm9kZS0+
Z2V0Q29uZGl0aW9uKCkpCisgICAgeworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJh
dmVyc2UodGhpcyk7CisgICAgfQorCisgICAgaWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkKKyAg
ICB7CisgICAgICAgIG5vZGUtPmdldEV4cHJlc3Npb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAg
fQorCisgICAgbVRlbXBvcmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2ludCBVbmZvbGRTaG9ydENpcmN1aXQ6OmdldE5leHRUZW1wb3JhcnlJbmRleCgp
Cit7CisgICAgcmV0dXJuIG1UZW1wb3JhcnlJbmRleCsrOworfQorfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRD
aXJjdWl0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9VbmZvbGRTaG9ydENpcmN1aXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZTQxNmJjMDRjMTRmNTNjYTA0Yjg1
Yjk3YTlkOTI0NWRjMGY3MmMwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0LmgKQEAgLTAs
MCArMSwzOSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIFVuZm9sZFNob3J0Q2lyY3VpdCBpcyBh
biBBU1QgdHJhdmVyc2VyIHRvIG91dHB1dCBzaG9ydC1jaXJjdWl0aW5nIG9wZXJhdG9ycyBhcyBp
Zi1lbHNlIHN0YXRlbWVudHMKKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVU5GT0xEU0hPUlRDSVJD
VUlUX0hfCisjZGVmaW5lIENPTVBJTEVSX1VORk9MRFNIT1JUQ0lSQ1VJVF9IXworCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5oIgorCituYW1lc3BhY2Ugc2gKK3sKK2NsYXNzIE91
dHB1dEhMU0w7CisKK2NsYXNzIFVuZm9sZFNob3J0Q2lyY3VpdCA6IHB1YmxpYyBUSW50ZXJtVHJh
dmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBVbmZvbGRTaG9ydENpcmN1aXQoVFBhcnNlQ29udGV4
dCAmY29udGV4dCwgT3V0cHV0SExTTCAqb3V0cHV0SExTTCk7CisKKyAgICB2b2lkIHRyYXZlcnNl
KFRJbnRlcm1Ob2RlICpub2RlKTsKKyAgICBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBU
SW50ZXJtQmluYXJ5Kik7CisgICAgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVElu
dGVybVNlbGVjdGlvbiAqbm9kZSk7CisgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1Mb29wICpub2RlKTsKKworICAgIGludCBnZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKKwor
ICBwcm90ZWN0ZWQ6CisgICAgVFBhcnNlQ29udGV4dCAmbUNvbnRleHQ7CisgICAgT3V0cHV0SExT
TCAqY29uc3QgbU91dHB1dEhMU0w7CisKKyAgICBpbnQgbVRlbXBvcmFyeUluZGV4OworfTsKK30K
KworI2VuZGlmICAgLy8gQ09NUElMRVJfVU5GT0xEU0hPUlRDSVJDVUlUX0hfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRT
aG9ydENpcmN1aXRBU1QuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOWM0Mzk3
ZDU2MWVhMmFhZGYzOTk4NDhlMDQ2MDU0ZTQzYzM5MjcyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRD
aXJjdWl0QVNULmNwcApAQCAtMCwwICsxLDgxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuaCIKKworbmFt
ZXNwYWNlCit7CisKKy8vICJ4IHx8IHkiIGlzIGVxdWl2YWxlbnQgdG8gInggPyB0cnVlIDogeSIu
CitUSW50ZXJtU2VsZWN0aW9uICpVbmZvbGRPUihUSW50ZXJtVHlwZWQgKngsIFRJbnRlcm1UeXBl
ZCAqeSkKK3sKKyAgICBjb25zdCBUVHlwZSBib29sVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQp
OworICAgIENvbnN0YW50VW5pb24gKnUgPSBuZXcgQ29uc3RhbnRVbmlvbjsKKyAgICB1LT5zZXRC
Q29uc3QodHJ1ZSk7CisgICAgVEludGVybUNvbnN0YW50VW5pb24gKnRydWVOb2RlID0gbmV3IFRJ
bnRlcm1Db25zdGFudFVuaW9uKAorICAgICAgICB1LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmlu
ZWQsIEV2cUNvbnN0LCAxKSk7CisgICAgcmV0dXJuIG5ldyBUSW50ZXJtU2VsZWN0aW9uKHgsIHRy
dWVOb2RlLCB5LCBib29sVHlwZSk7Cit9CisKKy8vICJ4ICYmIHkiIGlzIGVxdWl2YWxlbnQgdG8g
InggPyB5IDogZmFsc2UiLgorVEludGVybVNlbGVjdGlvbiAqVW5mb2xkQU5EKFRJbnRlcm1UeXBl
ZCAqeCwgVEludGVybVR5cGVkICp5KQoreworICAgIGNvbnN0IFRUeXBlIGJvb2xUeXBlKEVidEJv
b2wsIEVicFVuZGVmaW5lZCk7CisgICAgQ29uc3RhbnRVbmlvbiAqdSA9IG5ldyBDb25zdGFudFVu
aW9uOworICAgIHUtPnNldEJDb25zdChmYWxzZSk7CisgICAgVEludGVybUNvbnN0YW50VW5pb24g
KmZhbHNlTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbigKKyAgICAgICAgdSwgVFR5cGUo
RWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCwgMSkpOworICAgIHJldHVybiBuZXcgVElu
dGVybVNlbGVjdGlvbih4LCB5LCBmYWxzZU5vZGUsIGJvb2xUeXBlKTsKK30KKworfSAgLy8gbmFt
ZXNwYWNlIGFub255bW91cworCitib29sIFVuZm9sZFNob3J0Q2lyY3VpdEFTVDo6dmlzaXRCaW5h
cnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCit7CisgICAgVEludGVybVNlbGVj
dGlvbiAqcmVwbGFjZW1lbnQgPSBOVUxMOworCisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQor
ICAgIHsKKyAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgorICAgICAgICByZXBsYWNlbWVudCA9IFVu
Zm9sZE9SKG5vZGUtPmdldExlZnQoKSwgbm9kZS0+Z2V0UmlnaHQoKSk7CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOgorICAgICAgICByZXBsYWNlbWVudCA9IFVuZm9s
ZEFORChub2RlLT5nZXRMZWZ0KCksIG5vZGUtPmdldFJpZ2h0KCkpOworICAgICAgICBicmVhazsK
KyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAocmVwbGFjZW1l
bnQpCisgICAgeworICAgICAgICByZXBsYWNlbWVudHMucHVzaF9iYWNrKAorICAgICAgICAgICAg
Tm9kZVVwZGF0ZUVudHJ5KGdldFBhcmVudE5vZGUoKSwgbm9kZSwgcmVwbGFjZW1lbnQpKTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgVW5mb2xkU2hvcnRDaXJjdWl0QVNUOjp1
cGRhdGVUcmVlKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgcmVwbGFjZW1lbnRz
LnNpemUoKTsgKytpaSkKKyAgICB7CisgICAgICAgIGNvbnN0IE5vZGVVcGRhdGVFbnRyeSYgZW50
cnkgPSByZXBsYWNlbWVudHNbaWldOworICAgICAgICBBU1NFUlQoZW50cnkucGFyZW50KTsKKyAg
ICAgICAgYm9vbCByZXBsYWNlZCA9IGVudHJ5LnBhcmVudC0+cmVwbGFjZUNoaWxkTm9kZSgKKyAg
ICAgICAgICAgIGVudHJ5Lm9yaWdpbmFsLCBlbnRyeS5yZXBsYWNlbWVudCk7CisgICAgICAgIEFT
U0VSVChyZXBsYWNlZCk7CisKKyAgICAgICAgLy8gSW4gQVNUIHRyYXZlcnNpbmcsIGEgcGFyZW50
IGlzIHZpc2l0ZWQgYmVmb3JlIGl0cyBjaGlsZHJlbi4KKyAgICAgICAgLy8gQWZ0ZXIgd2UgcmVw
bGFjZSBhIG5vZGUsIGlmIGFuIGltbWVkaWF0ZSBjaGlsZCBpcyB0bworICAgICAgICAvLyBiZSBy
ZXBsYWNlZCwgd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgdXBkYXRlIHRoZSByZXBsYWNl
ZAorCS8vIG5vZGU7IGluc3RlYWQsIHdlIHVwZGF0ZSB0aGUgcmVwbGFjZW1lbnQgbm9kZS4KKyAg
ICAgICAgZm9yIChzaXplX3QgamogPSBpaSArIDE7IGpqIDwgcmVwbGFjZW1lbnRzLnNpemUoKTsg
KytqaikKKyAgICAgICAgeworICAgICAgICAgICAgTm9kZVVwZGF0ZUVudHJ5JiBlbnRyeTIgPSBy
ZXBsYWNlbWVudHNbampdOworICAgICAgICAgICAgaWYgKGVudHJ5Mi5wYXJlbnQgPT0gZW50cnku
b3JpZ2luYWwpCisgICAgICAgICAgICAgICAgZW50cnkyLnBhcmVudCA9IGVudHJ5LnJlcGxhY2Vt
ZW50OworICAgICAgICB9CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1VuZm9sZFNo
b3J0Q2lyY3VpdEFTVC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0YzE0YTYwZTM3ZmVkYjIyMmNmOTI2ZDA4NjNi
YmQyMjM1Nzc5YzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuaApAQCAtMCwwICsx
LDUxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gVW5mb2xkU2hvcnRDaXJjdWl0QVNUIGlzIGFu
IEFTVCB0cmF2ZXJzZXIgdG8gcmVwbGFjZSBzaG9ydC1jaXJjdWl0aW5nCisvLyBvcGVyYXRpb25z
IHdpdGggdGVybmFyeSBvcGVyYXRpb25zLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9VTkZPTERf
U0hPUlRfQ0lSQ1VJVF9BU1RfSF8KKyNkZWZpbmUgQ09NUElMRVJfVU5GT0xEX1NIT1JUX0NJUkNV
SVRfQVNUX0hfCisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisKKy8vIFRoaXMgdHJhdmVyc2VyIGlk
ZW50aWZpZXMgYWxsIHRoZSBzaG9ydCBjaXJjdWl0IGJpbmFyeSAgbm9kZXMgdGhhdCBuZWVkIHRv
CisvLyBiZSByZXBsYWNlZCwgYW5kIGNyZWF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgcmVwbGFjZW1l
bnQgbm9kZXMuIEhvd2V2ZXIsCisvLyB0aGUgYWN0dWFsIHJlcGxhY2VtZW50cyBoYXBwZW4gYWZ0
ZXIgdGhlIHRyYXZlcnNlIHRocm91Z2ggdXBkYXRlVHJlZSgpLgorCitjbGFzcyBVbmZvbGRTaG9y
dENpcmN1aXRBU1QgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAg
VW5mb2xkU2hvcnRDaXJjdWl0QVNUKCkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5h
cnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKik7CisKKyAgICB2b2lkIHVwZGF0ZVRyZWUo
KTsKKworICBwcml2YXRlOgorICAgIHN0cnVjdCBOb2RlVXBkYXRlRW50cnkKKyAgICB7CisgICAg
ICAgIE5vZGVVcGRhdGVFbnRyeShUSW50ZXJtTm9kZSAqX3BhcmVudCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFRJbnRlcm1Ob2RlICpfb3JpZ2luYWwsCisgICAgICAgICAgICAgICAgICAgICAg
ICBUSW50ZXJtTm9kZSAqX3JlcGxhY2VtZW50KQorICAgICAgICAgICAgOiBwYXJlbnQoX3BhcmVu
dCksCisgICAgICAgICAgICAgIG9yaWdpbmFsKF9vcmlnaW5hbCksCisgICAgICAgICAgICAgIHJl
cGxhY2VtZW50KF9yZXBsYWNlbWVudCkge30KKworICAgICAgICBUSW50ZXJtTm9kZSAqcGFyZW50
OworICAgICAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWw7CisgICAgICAgIFRJbnRlcm1Ob2RlICpy
ZXBsYWNlbWVudDsKKyAgICB9OworCisgICAgLy8gRHVyaW5nIHRyYXZlcnNpbmcsIHNhdmUgYWxs
IHRoZSByZXBsYWNlbWVudHMgdGhhdCBuZWVkIHRvIGhhcHBlbjsKKyAgICAvLyB0aGVuIHJlcGxh
Y2UgdGhlbSBieSBjYWxsaW5nIHVwZGF0ZU5vZGVzKCkuCisgICAgc3RkOjp2ZWN0b3I8Tm9kZVVw
ZGF0ZUVudHJ5PiByZXBsYWNlbWVudHM7CisKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04o
VW5mb2xkU2hvcnRDaXJjdWl0QVNUKTsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVU5GT0xE
X1NIT1JUX0NJUkNVSVRfQVNUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1VuaWZvcm0uY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjky
MmUxM2YwNzEyMDgxZTU1NzRjODBkNDlkNWY3NGRlMDUzN2E5ZGQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3Jt
LmNwcApAQCAtMCwwICsxLDIxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvVW5pZm9ybS5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworVW5pZm9ybTo6VW5p
Zm9ybShHTGVudW0gdHlwZSwgR0xlbnVtIHByZWNpc2lvbiwgY29uc3QgY2hhciAqbmFtZSwgaW50
IGFycmF5U2l6ZSwgaW50IHJlZ2lzdGVySW5kZXgpCit7CisgICAgdGhpcy0+dHlwZSA9IHR5cGU7
CisgICAgdGhpcy0+cHJlY2lzaW9uID0gcHJlY2lzaW9uOworICAgIHRoaXMtPm5hbWUgPSBuYW1l
OworICAgIHRoaXMtPmFycmF5U2l6ZSA9IGFycmF5U2l6ZTsKKyAgICB0aGlzLT5yZWdpc3Rlcklu
ZGV4ID0gcmVnaXN0ZXJJbmRleDsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5pZm9ybS5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5pZm9ybS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjRjNTNmZmE3ZDJmYzU4NGU0MDBjMmNmMDRkMDEyZTZhZjFlMjUyZDcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlm
b3JtLmgKQEAgLTAsMCArMSwzNSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJf
VU5JRk9STV9IXworI2RlZmluZSBDT01QSUxFUl9VTklGT1JNX0hfCisKKyNpbmNsdWRlIDxzdHJp
bmc+CisjaW5jbHVkZSA8dmVjdG9yPgorCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxH
TEVTMi9nbDIuaD4KKworbmFtZXNwYWNlIHNoCit7CisKK3N0cnVjdCBVbmlmb3JtCit7CisgICAg
VW5pZm9ybShHTGVudW0gdHlwZSwgR0xlbnVtIHByZWNpc2lvbiwgY29uc3QgY2hhciAqbmFtZSwg
aW50IGFycmF5U2l6ZSwgaW50IHJlZ2lzdGVySW5kZXgpOworCisgICAgR0xlbnVtIHR5cGU7Cisg
ICAgR0xlbnVtIHByZWNpc2lvbjsKKyAgICBzdGQ6OnN0cmluZyBuYW1lOworICAgIHVuc2lnbmVk
IGludCBhcnJheVNpemU7CisgICAgCisgICAgaW50IHJlZ2lzdGVySW5kZXg7Cit9OworCit0eXBl
ZGVmIHN0ZDo6dmVjdG9yPFVuaWZvcm0+IEFjdGl2ZVVuaWZvcm1zOworCit9CisKKyNlbmRpZiAg
IC8vIENPTVBJTEVSX1VOSUZPUk1fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1p
dGF0aW9ucy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2MyY2M0MWNkYTM2ZjgxMzcxMWZmMzY4ODRmMjViMDY2
YmJjODg0OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwCkBAIC0wLDAgKzEsNTEy
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9W
YWxpZGF0ZUxpbWl0YXRpb25zLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZv
U2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVBhcnNlQ29u
dGV4dC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCisK
K25hbWVzcGFjZSB7Citib29sIElzTG9vcEluZGV4KGNvbnN0IFRJbnRlcm1TeW1ib2wqIHN5bWJv
bCwgY29uc3QgVExvb3BTdGFjayYgc3RhY2spIHsKKyAgICBmb3IgKFRMb29wU3RhY2s6OmNvbnN0
X2l0ZXJhdG9yIGkgPSBzdGFjay5iZWdpbigpOyBpICE9IHN0YWNrLmVuZCgpOyArK2kpIHsKKyAg
ICAgICAgaWYgKGktPmluZGV4LmlkID09IHN5bWJvbC0+Z2V0SWQoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgTWFya0xvb3BG
b3JVbnJvbGwoY29uc3QgVEludGVybVN5bWJvbCogc3ltYm9sLCBUTG9vcFN0YWNrJiBzdGFjaykg
eworICAgIGZvciAoVExvb3BTdGFjazo6aXRlcmF0b3IgaSA9IHN0YWNrLmJlZ2luKCk7IGkgIT0g
c3RhY2suZW5kKCk7ICsraSkgeworICAgICAgICBpZiAoaS0+aW5kZXguaWQgPT0gc3ltYm9sLT5n
ZXRJZCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoaS0+bG9vcCAhPSBOVUxMKTsKKyAgICAgICAg
ICAgIGktPmxvb3AtPnNldFVucm9sbEZsYWcodHJ1ZSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICB9CisgICAgVU5SRUFDSEFCTEUoKTsKK30KKworLy8gVHJhdmVyc2VzIGEg
bm9kZSB0byBjaGVjayBpZiBpdCByZXByZXNlbnRzIGEgY29uc3RhbnQgaW5kZXggZXhwcmVzc2lv
bi4KKy8vIERlZmluaXRpb246CisvLyBjb25zdGFudC1pbmRleC1leHByZXNzaW9ucyBhcmUgYSBz
dXBlcnNldCBvZiBjb25zdGFudC1leHByZXNzaW9ucy4KKy8vIENvbnN0YW50LWluZGV4LWV4cHJl
c3Npb25zIGNhbiBpbmNsdWRlIGxvb3AgaW5kaWNlcyBhcyBkZWZpbmVkIGluCisvLyBHTFNMIEVT
IDEuMCBzcGVjLCBBcHBlbmRpeCBBLCBzZWN0aW9uIDQuCisvLyBUaGUgZm9sbG93aW5nIGFyZSBj
b25zdGFudC1pbmRleC1leHByZXNzaW9uczoKKy8vIC0gQ29uc3RhbnQgZXhwcmVzc2lvbnMKKy8v
IC0gTG9vcCBpbmRpY2VzIGFzIGRlZmluZWQgaW4gc2VjdGlvbiA0CisvLyAtIEV4cHJlc3Npb25z
IGNvbXBvc2VkIG9mIGJvdGggb2YgdGhlIGFib3ZlCitjbGFzcyBWYWxpZGF0ZUNvbnN0SW5kZXhF
eHByIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgorICAgIFZhbGlkYXRlQ29u
c3RJbmRleEV4cHIoY29uc3QgVExvb3BTdGFjayYgc3RhY2spCisgICAgICAgIDogbVZhbGlkKHRy
dWUpLCBtTG9vcFN0YWNrKHN0YWNrKSB7fQorCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBw
YXJzZWQgbm9kZSByZXByZXNlbnRzIGEgY29uc3RhbnQgaW5kZXggZXhwcmVzc2lvbi4KKyAgICBi
b29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtVmFsaWQ7IH0KKworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBzeW1ib2wpIHsKKyAgICAgICAgLy8gT25seSBj
b25zdGFudHMgYW5kIGxvb3AgaW5kaWNlcyBhcmUgYWxsb3dlZCBpbiBhCisgICAgICAgIC8vIGNv
bnN0YW50IGluZGV4IGV4cHJlc3Npb24uCisgICAgICAgIGlmIChtVmFsaWQpIHsKKyAgICAgICAg
ICAgIG1WYWxpZCA9IChzeW1ib2wtPmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB8fAorICAg
ICAgICAgICAgICAgICAgICAgSXNMb29wSW5kZXgoc3ltYm9sLCBtTG9vcFN0YWNrKTsKKyAgICAg
ICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIG1WYWxpZDsKKyAgICBjb25zdCBUTG9v
cFN0YWNrJiBtTG9vcFN0YWNrOworfTsKKworLy8gVHJhdmVyc2VzIGEgbm9kZSB0byBjaGVjayBp
ZiBpdCB1c2VzIGEgbG9vcCBpbmRleC4KKy8vIElmIGFuIGludCBsb29wIGluZGV4IGlzIHVzZWQg
aW4gaXRzIGJvZHkgYXMgYSBzYW1wbGVyIGFycmF5IGluZGV4LAorLy8gbWFyayB0aGUgbG9vcCBm
b3IgdW5yb2xsLgorY2xhc3MgVmFsaWRhdGVMb29wSW5kZXhFeHByIDogcHVibGljIFRJbnRlcm1U
cmF2ZXJzZXIgeworcHVibGljOgorICAgIFZhbGlkYXRlTG9vcEluZGV4RXhwcihUTG9vcFN0YWNr
JiBzdGFjaykKKyAgICAgICAgOiBtVXNlc0Zsb2F0TG9vcEluZGV4KGZhbHNlKSwKKyAgICAgICAg
ICBtVXNlc0ludExvb3BJbmRleChmYWxzZSksCisgICAgICAgICAgbUxvb3BTdGFjayhzdGFjaykg
e30KKworICAgIGJvb2wgdXNlc0Zsb2F0TG9vcEluZGV4KCkgY29uc3QgeyByZXR1cm4gbVVzZXNG
bG9hdExvb3BJbmRleDsgfQorICAgIGJvb2wgdXNlc0ludExvb3BJbmRleCgpIGNvbnN0IHsgcmV0
dXJuIG1Vc2VzSW50TG9vcEluZGV4OyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2wo
VEludGVybVN5bWJvbCogc3ltYm9sKSB7CisgICAgICAgIGlmIChJc0xvb3BJbmRleChzeW1ib2ws
IG1Mb29wU3RhY2spKSB7CisgICAgICAgICAgICBzd2l0Y2ggKHN5bWJvbC0+Z2V0QmFzaWNUeXBl
KCkpIHsKKyAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAgICBtVXNl
c0Zsb2F0TG9vcEluZGV4ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAgICAgICAgbVVzZXNJbnRMb29wSW5kZXggPSB0
cnVlOworICAgICAgICAgICAgICAgIE1hcmtMb29wRm9yVW5yb2xsKHN5bWJvbCwgbUxvb3BTdGFj
ayk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworcHJpdmF0ZToKKyAgICBib29sIG1Vc2VzRmxvYXRMb29wSW5kZXg7CisgICAgYm9vbCBt
VXNlc0ludExvb3BJbmRleDsKKyAgICBUTG9vcFN0YWNrJiBtTG9vcFN0YWNrOworfTsKK30gIC8v
IG5hbWVzcGFjZQorCitWYWxpZGF0ZUxpbWl0YXRpb25zOjpWYWxpZGF0ZUxpbWl0YXRpb25zKFNo
U2hhZGVyVHlwZSBzaGFkZXJUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUSW5mb1NpbmtCYXNlJiBzaW5rKQorICAgIDogbVNoYWRlclR5cGUoc2hhZGVyVHlw
ZSksCisgICAgICBtU2luayhzaW5rKSwKKyAgICAgIG1OdW1FcnJvcnMoMCkKK3sKK30KKworYm9v
bCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSog
bm9kZSkKK3sKKyAgICAvLyBDaGVjayBpZiBsb29wIGluZGV4IGlzIG1vZGlmaWVkIGluIHRoZSBs
b29wIGJvZHkuCisgICAgdmFsaWRhdGVPcGVyYXRpb24obm9kZSwgbm9kZS0+Z2V0TGVmdCgpKTsK
KworICAgIC8vIENoZWNrIGluZGV4aW5nLgorICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkgewor
ICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDoKKyAgICAgICAgdmFsaWRhdGVJbmRleGluZyhub2Rl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6CisjaWYgZGVm
aW5lZChfX0FQUExFX18pCisgICAgICAgIC8vIExvb3AgdW5yb2xsaW5nIGlzIGEgd29yay1hcm91
bmQgZm9yIGEgTWFjIENnIGNvbXBpbGVyIGJ1ZyB3aGVyZSBpdAorICAgICAgICAvLyBjcmFzaGVz
IHdoZW4gYSBzYW1wbGVyIGFycmF5J3MgaW5kZXggaXMgYWxzbyB0aGUgbG9vcCBpbmRleC4KKyAg
ICAgICAgLy8gT25jZSBBcHBsZSBmaXhlcyB0aGlzIGJ1Zywgd2Ugc2hvdWxkIHJlbW92ZSB0aGUg
Y29kZSBpbiB0aGlzIENMLgorICAgICAgICAvLyBTZWUgaHR0cDovL2NvZGVyZXZpZXcuYXBwc3Bv
dC5jb20vNDMzMTA0OC8uCisgICAgICAgIGlmICgobm9kZS0+Z2V0TGVmdCgpICE9IE5VTEwpICYm
IChub2RlLT5nZXRSaWdodCgpICE9IE5VTEwpICYmCisgICAgICAgICAgICAobm9kZS0+Z2V0TGVm
dCgpLT5nZXRBc1N5bWJvbE5vZGUoKSkpIHsKKyAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5
bWJvbCA9IG5vZGUtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgICAgICAgICBp
ZiAoSXNTYW1wbGVyKHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCkpICYmIHN5bWJvbC0+aXNBcnJheSgp
KSB7CisgICAgICAgICAgICAgICAgVmFsaWRhdGVMb29wSW5kZXhFeHByIHZhbGlkYXRlKG1Mb29w
U3RhY2spOworICAgICAgICAgICAgICAgIG5vZGUtPmdldFJpZ2h0KCktPnRyYXZlcnNlKCZ2YWxp
ZGF0ZSk7CisgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlLnVzZXNGbG9hdExvb3BJbmRleCgp
KSB7CisgICAgICAgICAgICAgICAgICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgInNhbXBsZXIgYXJyYXkgaW5kZXggaXMgZmxvYXQgbG9vcCBpbmRl
eCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3IiKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICB2YWxpZGF0ZUluZGV4
aW5nKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdFVu
YXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUpCit7CisgICAgLy8gQ2hlY2sgaWYgbG9vcCBp
bmRleCBpcyBtb2RpZmllZCBpbiB0aGUgbG9vcCBib2R5LgorICAgIHZhbGlkYXRlT3BlcmF0aW9u
KG5vZGUsIG5vZGUtPmdldE9wZXJhbmQoKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3Jl
Z2F0ZSogbm9kZSkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpIHsKKyAgICAgIGNhc2Ug
RU9wRnVuY3Rpb25DYWxsOgorICAgICAgICB2YWxpZGF0ZUZ1bmN0aW9uQ2FsbChub2RlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRMb29wKFZp
c2l0LCBUSW50ZXJtTG9vcCogbm9kZSkKK3sKKyAgICBpZiAoIXZhbGlkYXRlTG9vcFR5cGUobm9k
ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFRMb29wSW5mbyBpbmZvOworICAgIG1l
bXNldCgmaW5mbywgMCwgc2l6ZW9mKFRMb29wSW5mbykpOworICAgIGluZm8ubG9vcCA9IG5vZGU7
CisgICAgaWYgKCF2YWxpZGF0ZUZvckxvb3BIZWFkZXIobm9kZSwgJmluZm8pKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBUSW50ZXJtTm9kZSogYm9keSA9IG5vZGUtPmdldEJvZHkoKTsK
KyAgICBpZiAoYm9keSAhPSBOVUxMKSB7CisgICAgICAgIG1Mb29wU3RhY2sucHVzaF9iYWNrKGlu
Zm8pOworICAgICAgICBib2R5LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgbUxvb3BTdGFjay5w
b3BfYmFjaygpOworICAgIH0KKworICAgIC8vIFRoZSBsb29wIGlzIGZ1bGx5IHByb2Nlc3NlZCAt
IG5vIG5lZWQgdG8gdmlzaXQgY2hpbGRyZW4uCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IFZhbGlkYXRlTGltaXRhdGlvbnM6OmVycm9yKFRTb3VyY2VMb2MgbG9jLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIqIHRva2Vu
KQoreworICAgIG1TaW5rLnByZWZpeChFUHJlZml4RXJyb3IpOworICAgIG1TaW5rLmxvY2F0aW9u
KGxvYyk7CisgICAgbVNpbmsgPDwgIiciIDw8IHRva2VuIDw8ICInIDogIiA8PCByZWFzb24gPDwg
IlxuIjsKKyAgICArK21OdW1FcnJvcnM7Cit9CisKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6
d2l0aGluTG9vcEJvZHkoKSBjb25zdAoreworICAgIHJldHVybiAhbUxvb3BTdGFjay5lbXB0eSgp
OworfQorCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OmlzTG9vcEluZGV4KGNvbnN0IFRJbnRl
cm1TeW1ib2wqIHN5bWJvbCkgY29uc3QKK3sKKyAgICByZXR1cm4gSXNMb29wSW5kZXgoc3ltYm9s
LCBtTG9vcFN0YWNrKTsKK30KKworYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUxv
b3BUeXBlKFRJbnRlcm1Mb29wKiBub2RlKSB7CisgICAgVExvb3BUeXBlIHR5cGUgPSBub2RlLT5n
ZXRUeXBlKCk7CisgICAgaWYgKHR5cGUgPT0gRUxvb3BGb3IpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgLy8gUmVqZWN0IHdoaWxlIGFuZCBkby13aGlsZSBsb29wcy4KKyAgICBlcnJvcihu
b2RlLT5nZXRMaW5lKCksCisgICAgICAgICAgIlRoaXMgdHlwZSBvZiBsb29wIGlzIG5vdCBhbGxv
d2VkIiwKKyAgICAgICAgICB0eXBlID09IEVMb29wV2hpbGUgPyAid2hpbGUiIDogImRvIik7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRl
Rm9yTG9vcEhlYWRlcihUSW50ZXJtTG9vcCogbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRMb29wSW5mbyogaW5mbykKK3sKKyAgICBBU1NFUlQo
bm9kZS0+Z2V0VHlwZSgpID09IEVMb29wRm9yKTsKKworICAgIC8vCisgICAgLy8gVGhlIGZvciBz
dGF0ZW1lbnQgaGFzIHRoZSBmb3JtOgorICAgIC8vICAgIGZvciAoIGluaXQtZGVjbGFyYXRpb24g
OyBjb25kaXRpb24gOyBleHByZXNzaW9uICkgc3RhdGVtZW50CisgICAgLy8KKyAgICBpZiAoIXZh
bGlkYXRlRm9yTG9vcEluaXQobm9kZSwgaW5mbykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIXZhbGlkYXRlRm9yTG9vcENvbmQobm9kZSwgaW5mbykpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoIXZhbGlkYXRlRm9yTG9vcEV4cHIobm9kZSwgaW5mbykpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFZhbGlkYXRlTGlt
aXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcEluaXQoVEludGVybUxvb3AqIG5vZGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVExvb3BJbmZvKiBpbmZvKQor
eworICAgIFRJbnRlcm1Ob2RlKiBpbml0ID0gbm9kZS0+Z2V0SW5pdCgpOworICAgIGlmIChpbml0
ID09IE5VTEwpIHsKKyAgICAgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiTWlzc2luZyBpbml0
IGRlY2xhcmF0aW9uIiwgImZvciIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgLy8KKyAgICAvLyBpbml0LWRlY2xhcmF0aW9uIGhhcyB0aGUgZm9ybToKKyAgICAvLyAgICAg
dHlwZS1zcGVjaWZpZXIgaWRlbnRpZmllciA9IGNvbnN0YW50LWV4cHJlc3Npb24KKyAgICAvLwor
ICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGRlY2wgPSBpbml0LT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAg
IGlmICgoZGVjbCA9PSBOVUxMKSB8fCAoZGVjbC0+Z2V0T3AoKSAhPSBFT3BEZWNsYXJhdGlvbikp
IHsKKyAgICAgICAgZXJyb3IoaW5pdC0+Z2V0TGluZSgpLCAiSW52YWxpZCBpbml0IGRlY2xhcmF0
aW9uIiwgImZvciIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8vIFRvIGtl
ZXAgdGhpbmdzIHNpbXBsZSBkbyBub3QgYWxsb3cgZGVjbGFyYXRpb24gbGlzdC4KKyAgICBUSW50
ZXJtU2VxdWVuY2UmIGRlY2xTZXEgPSBkZWNsLT5nZXRTZXF1ZW5jZSgpOworICAgIGlmIChkZWNs
U2VxLnNpemUoKSAhPSAxKSB7CisgICAgICAgIGVycm9yKGRlY2wtPmdldExpbmUoKSwgIkludmFs
aWQgaW5pdCBkZWNsYXJhdGlvbiIsICJmb3IiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICBUSW50ZXJtQmluYXJ5KiBkZWNsSW5pdCA9IGRlY2xTZXFbMF0tPmdldEFzQmluYXJ5
Tm9kZSgpOworICAgIGlmICgoZGVjbEluaXQgPT0gTlVMTCkgfHwgKGRlY2xJbml0LT5nZXRPcCgp
ICE9IEVPcEluaXRpYWxpemUpKSB7CisgICAgICAgIGVycm9yKGRlY2wtPmdldExpbmUoKSwgIklu
dmFsaWQgaW5pdCBkZWNsYXJhdGlvbiIsICJmb3IiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBkZWNsSW5pdC0+Z2V0TGVmdCgpLT5n
ZXRBc1N5bWJvbE5vZGUoKTsKKyAgICBpZiAoc3ltYm9sID09IE5VTEwpIHsKKyAgICAgICAgZXJy
b3IoZGVjbEluaXQtPmdldExpbmUoKSwgIkludmFsaWQgaW5pdCBkZWNsYXJhdGlvbiIsICJmb3Ii
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBUaGUgbG9vcCBpbmRleCBo
YXMgdHlwZSBpbnQgb3IgZmxvYXQuCisgICAgVEJhc2ljVHlwZSB0eXBlID0gc3ltYm9sLT5nZXRC
YXNpY1R5cGUoKTsKKyAgICBpZiAoKHR5cGUgIT0gRWJ0SW50KSAmJiAodHlwZSAhPSBFYnRGbG9h
dCkpIHsKKyAgICAgICAgZXJyb3Ioc3ltYm9sLT5nZXRMaW5lKCksCisgICAgICAgICAgICAgICJJ
bnZhbGlkIHR5cGUgZm9yIGxvb3AgaW5kZXgiLCBnZXRCYXNpY1N0cmluZyh0eXBlKSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgLy8gVGhlIGxvb3AgaW5kZXggaXMgaW5pdGlh
bGl6ZWQgd2l0aCBjb25zdGFudCBleHByZXNzaW9uLgorICAgIGlmICghaXNDb25zdEV4cHIoZGVj
bEluaXQtPmdldFJpZ2h0KCkpKSB7CisgICAgICAgIGVycm9yKGRlY2xJbml0LT5nZXRMaW5lKCks
CisgICAgICAgICAgICAgICJMb29wIGluZGV4IGNhbm5vdCBiZSBpbml0aWFsaXplZCB3aXRoIG5v
bi1jb25zdGFudCBleHByZXNzaW9uIiwKKyAgICAgICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2wo
KS5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGluZm8tPmlu
ZGV4LmlkID0gc3ltYm9sLT5nZXRJZCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFZh
bGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcENvbmQoVEludGVybUxvb3AqIG5vZGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVExvb3BJbmZv
KiBpbmZvKQoreworICAgIFRJbnRlcm1Ob2RlKiBjb25kID0gbm9kZS0+Z2V0Q29uZGl0aW9uKCk7
CisgICAgaWYgKGNvbmQgPT0gTlVMTCkgeworICAgICAgICBlcnJvcihub2RlLT5nZXRMaW5lKCks
ICJNaXNzaW5nIGNvbmRpdGlvbiIsICJmb3IiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICAvLworICAgIC8vIGNvbmRpdGlvbiBoYXMgdGhlIGZvcm06CisgICAgLy8gICAgIGxv
b3BfaW5kZXggcmVsYXRpb25hbF9vcGVyYXRvciBjb25zdGFudF9leHByZXNzaW9uCisgICAgLy8K
KyAgICBUSW50ZXJtQmluYXJ5KiBiaW5PcCA9IGNvbmQtPmdldEFzQmluYXJ5Tm9kZSgpOworICAg
IGlmIChiaW5PcCA9PSBOVUxMKSB7CisgICAgICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgIklu
dmFsaWQgY29uZGl0aW9uIiwgImZvciIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIC8vIExvb3AgaW5kZXggc2hvdWxkIGJlIHRvIHRoZSBsZWZ0IG9mIHJlbGF0aW9uYWwgb3Bl
cmF0b3IuCisgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gYmluT3AtPmdldExlZnQoKS0+Z2V0
QXNTeW1ib2xOb2RlKCk7CisgICAgaWYgKHN5bWJvbCA9PSBOVUxMKSB7CisgICAgICAgIGVycm9y
KGJpbk9wLT5nZXRMaW5lKCksICJJbnZhbGlkIGNvbmRpdGlvbiIsICJmb3IiKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoc3ltYm9sLT5nZXRJZCgpICE9IGluZm8tPmlu
ZGV4LmlkKSB7CisgICAgICAgIGVycm9yKHN5bWJvbC0+Z2V0TGluZSgpLAorICAgICAgICAgICAg
ICAiRXhwZWN0ZWQgbG9vcCBpbmRleCIsIHN5bWJvbC0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgLy8gUmVsYXRpb25hbCBvcGVyYXRvciBp
cyBvbmUgb2Y6ID4gPj0gPCA8PSA9PSBvciAhPS4KKyAgICBzd2l0Y2ggKGJpbk9wLT5nZXRPcCgp
KSB7CisgICAgICBjYXNlIEVPcEVxdWFsOgorICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKKyAgICAg
IGNhc2UgRU9wTGVzc1RoYW46CisgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgorICAgICAgY2Fz
ZSBFT3BMZXNzVGhhbkVxdWFsOgorICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgorICAg
ICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGVycm9yKGJpbk9wLT5nZXRMaW5l
KCksCisgICAgICAgICAgICAgICJJbnZhbGlkIHJlbGF0aW9uYWwgb3BlcmF0b3IiLAorICAgICAg
ICAgICAgICBnZXRPcGVyYXRvclN0cmluZyhiaW5PcC0+Z2V0T3AoKSkpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgLy8gTG9vcCBpbmRleCBtdXN0IGJlIGNvbXBhcmVkIHdpdGggYSBjb25z
dGFudC4KKyAgICBpZiAoIWlzQ29uc3RFeHByKGJpbk9wLT5nZXRSaWdodCgpKSkgeworICAgICAg
ICBlcnJvcihiaW5PcC0+Z2V0TGluZSgpLAorICAgICAgICAgICAgICAiTG9vcCBpbmRleCBjYW5u
b3QgYmUgY29tcGFyZWQgd2l0aCBub24tY29uc3RhbnQgZXhwcmVzc2lvbiIsCisgICAgICAgICAg
ICAgIHN5bWJvbC0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25z
Ojp2YWxpZGF0ZUZvckxvb3BFeHByKFRJbnRlcm1Mb29wKiBub2RlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRMb29wSW5mbyogaW5mbykKK3sKKyAgICBU
SW50ZXJtTm9kZSogZXhwciA9IG5vZGUtPmdldEV4cHJlc3Npb24oKTsKKyAgICBpZiAoZXhwciA9
PSBOVUxMKSB7CisgICAgICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgIk1pc3NpbmcgZXhwcmVz
c2lvbiIsICJmb3IiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIGZv
ciBleHByZXNzaW9uIGhhcyBvbmUgb2YgdGhlIGZvbGxvd2luZyBmb3JtczoKKyAgICAvLyAgICAg
bG9vcF9pbmRleCsrCisgICAgLy8gICAgIGxvb3BfaW5kZXgtLQorICAgIC8vICAgICBsb29wX2lu
ZGV4ICs9IGNvbnN0YW50X2V4cHJlc3Npb24KKyAgICAvLyAgICAgbG9vcF9pbmRleCAtPSBjb25z
dGFudF9leHByZXNzaW9uCisgICAgLy8gICAgICsrbG9vcF9pbmRleAorICAgIC8vICAgICAtLWxv
b3BfaW5kZXgKKyAgICAvLyBUaGUgbGFzdCB0d28gZm9ybXMgYXJlIG5vdCBzcGVjaWZpZWQgaW4g
dGhlIHNwZWMsIGJ1dCBJIGFtIGFzc3VtaW5nCisgICAgLy8gaXRzIGFuIG92ZXJzaWdodC4KKyAg
ICBUSW50ZXJtVW5hcnkqIHVuT3AgPSBleHByLT5nZXRBc1VuYXJ5Tm9kZSgpOworICAgIFRJbnRl
cm1CaW5hcnkqIGJpbk9wID0gdW5PcCA/IE5VTEwgOiBleHByLT5nZXRBc0JpbmFyeU5vZGUoKTsK
KworICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7CisgICAgVEludGVybVN5bWJvbCogc3ltYm9s
ID0gTlVMTDsKKyAgICBpZiAodW5PcCAhPSBOVUxMKSB7CisgICAgICAgIG9wID0gdW5PcC0+Z2V0
T3AoKTsKKyAgICAgICAgc3ltYm9sID0gdW5PcC0+Z2V0T3BlcmFuZCgpLT5nZXRBc1N5bWJvbE5v
ZGUoKTsKKyAgICB9IGVsc2UgaWYgKGJpbk9wICE9IE5VTEwpIHsKKyAgICAgICAgb3AgPSBiaW5P
cC0+Z2V0T3AoKTsKKyAgICAgICAgc3ltYm9sID0gYmluT3AtPmdldExlZnQoKS0+Z2V0QXNTeW1i
b2xOb2RlKCk7CisgICAgfQorCisgICAgLy8gVGhlIG9wZXJhbmQgbXVzdCBiZSBsb29wIGluZGV4
LgorICAgIGlmIChzeW1ib2wgPT0gTlVMTCkgeworICAgICAgICBlcnJvcihleHByLT5nZXRMaW5l
KCksICJJbnZhbGlkIGV4cHJlc3Npb24iLCAiZm9yIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgaWYgKHN5bWJvbC0+Z2V0SWQoKSAhPSBpbmZvLT5pbmRleC5pZCkgeworICAg
ICAgICBlcnJvcihzeW1ib2wtPmdldExpbmUoKSwKKyAgICAgICAgICAgICAgIkV4cGVjdGVkIGxv
b3AgaW5kZXgiLCBzeW1ib2wtPmdldFN5bWJvbCgpLmNfc3RyKCkpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgLy8gVGhlIG9wZXJhdG9yIGlzIG9uZSBvZjogKysgLS0gKz0g
LT0uCisgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6Cisg
ICAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1l
bnQ6CisgICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OgorICAgICAgICAgICAgQVNTRVJUKCh1
bk9wICE9IE5VTEwpICYmIChiaW5PcCA9PSBOVUxMKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BBZGRBc3NpZ246CisgICAgICAgIGNhc2UgRU9wU3ViQXNzaWduOgorICAg
ICAgICAgICAgQVNTRVJUKCh1bk9wID09IE5VTEwpICYmIChiaW5PcCAhPSBOVUxMKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGVycm9yKGV4cHIt
PmdldExpbmUoKSwgIkludmFsaWQgb3BlcmF0b3IiLCBnZXRPcGVyYXRvclN0cmluZyhvcCkpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIExvb3AgaW5kZXggbXVz
dCBiZSBpbmNyZW1lbnRlZC9kZWNyZW1lbnRlZCB3aXRoIGEgY29uc3RhbnQuCisgICAgaWYgKGJp
bk9wICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKCFpc0NvbnN0RXhwcihiaW5PcC0+Z2V0UmlnaHQo
KSkpIHsKKyAgICAgICAgICAgIGVycm9yKGJpbk9wLT5nZXRMaW5lKCksCisgICAgICAgICAgICAg
ICAgICAiTG9vcCBpbmRleCBjYW5ub3QgYmUgbW9kaWZpZWQgYnkgbm9uLWNvbnN0YW50IGV4cHJl
c3Npb24iLAorICAgICAgICAgICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigpKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRnVuY3Rpb25D
YWxsKFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUtPmdldE9wKCkg
PT0gRU9wRnVuY3Rpb25DYWxsKTsKKworICAgIC8vIElmIG5vdCB3aXRoaW4gbG9vcCBib2R5LCB0
aGVyZSBpcyBub3RoaW5nIHRvIGNoZWNrLgorICAgIGlmICghd2l0aGluTG9vcEJvZHkoKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBMaXN0IG9mIHBhcmFtIGluZGljZXMgZm9yIHdo
aWNoIGxvb3AgaW5kaWNlcyBhcmUgdXNlZCBhcyBhcmd1bWVudC4KKyAgICB0eXBlZGVmIHN0ZDo6
dmVjdG9yPHNpemVfdD4gUGFyYW1JbmRleDsKKyAgICBQYXJhbUluZGV4IHBJbmRleDsKKyAgICBU
SW50ZXJtU2VxdWVuY2UmIHBhcmFtcyA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CisgICAgZm9yIChU
SW50ZXJtU2VxdWVuY2U6OnNpemVfdHlwZSBpID0gMDsgaSA8IHBhcmFtcy5zaXplKCk7ICsraSkg
eworICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBwYXJhbXNbaV0tPmdldEFzU3ltYm9s
Tm9kZSgpOworICAgICAgICBpZiAoc3ltYm9sICYmIGlzTG9vcEluZGV4KHN5bWJvbCkpCisgICAg
ICAgICAgICBwSW5kZXgucHVzaF9iYWNrKGkpOworICAgIH0KKyAgICAvLyBJZiBub25lIG9mIHRo
ZSBsb29wIGluZGljZXMgYXJlIHVzZWQgYXMgYXJndW1lbnRzLAorICAgIC8vIHRoZXJlIGlzIG5v
dGhpbmcgdG8gY2hlY2suCisgICAgaWYgKHBJbmRleC5lbXB0eSgpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIGJvb2wgdmFsaWQgPSB0cnVlOworICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9s
VGFibGUgPSBHZXRHbG9iYWxQYXJzZUNvbnRleHQoKS0+c3ltYm9sVGFibGU7CisgICAgVFN5bWJv
bCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChub2RlLT5nZXROYW1lKCkpOworICAgIEFTU0VS
VChzeW1ib2wgJiYgc3ltYm9sLT5pc0Z1bmN0aW9uKCkpOworICAgIFRGdW5jdGlvbiogZnVuY3Rp
b24gPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihzeW1ib2wpOworICAgIGZvciAoUGFyYW1JbmRl
eDo6Y29uc3RfaXRlcmF0b3IgaSA9IHBJbmRleC5iZWdpbigpOworICAgICAgICAgaSAhPSBwSW5k
ZXguZW5kKCk7ICsraSkgeworICAgICAgICBjb25zdCBUUGFyYW1ldGVyJiBwYXJhbSA9IGZ1bmN0
aW9uLT5nZXRQYXJhbSgqaSk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcmFtLnR5cGUt
PmdldFF1YWxpZmllcigpOworICAgICAgICBpZiAoKHF1YWwgPT0gRXZxT3V0KSB8fCAocXVhbCA9
PSBFdnFJbk91dCkpIHsKKyAgICAgICAgICAgIGVycm9yKHBhcmFtc1sqaV0tPmdldExpbmUoKSwK
KyAgICAgICAgICAgICAgICAgICJMb29wIGluZGV4IGNhbm5vdCBiZSB1c2VkIGFzIGFyZ3VtZW50
IHRvIGEgZnVuY3Rpb24gb3V0IG9yIGlub3V0IHBhcmFtZXRlciIsCisgICAgICAgICAgICAgICAg
ICBwYXJhbXNbKmldLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7Cisg
ICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IHZhbGlkOworfQorCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlT3BlcmF0aW9u
KFRJbnRlcm1PcGVyYXRvciogbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVEludGVybU5vZGUqIG9wZXJhbmQpIHsKKyAgICAvLyBDaGVjayBpZiBsb29w
IGluZGV4IGlzIG1vZGlmaWVkIGluIHRoZSBsb29wIGJvZHkuCisgICAgaWYgKCF3aXRoaW5Mb29w
Qm9keSgpIHx8ICFub2RlLT5pc0Fzc2lnbm1lbnQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBjb25zdCBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBvcGVyYW5kLT5nZXRBc1N5bWJvbE5v
ZGUoKTsKKyAgICBpZiAoc3ltYm9sICYmIGlzTG9vcEluZGV4KHN5bWJvbCkpIHsKKyAgICAgICAg
ZXJyb3Iobm9kZS0+Z2V0TGluZSgpLAorICAgICAgICAgICAgICAiTG9vcCBpbmRleCBjYW5ub3Qg
YmUgc3RhdGljYWxseSBhc3NpZ25lZCB0byB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIGxvb3AiLAor
ICAgICAgICAgICAgICBzeW1ib2wtPmdldFN5bWJvbCgpLmNfc3RyKCkpOworICAgIH0KKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjppc0NvbnN0RXhwcihU
SW50ZXJtTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZSAhPSBOVUxMKTsKKyAgICByZXR1
cm4gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCkgIT0gTlVMTDsKK30KKworYm9vbCBWYWxpZGF0
ZUxpbWl0YXRpb25zOjppc0NvbnN0SW5kZXhFeHByKFRJbnRlcm1Ob2RlKiBub2RlKQoreworICAg
IEFTU0VSVChub2RlICE9IE5VTEwpOworCisgICAgVmFsaWRhdGVDb25zdEluZGV4RXhwciB2YWxp
ZGF0ZShtTG9vcFN0YWNrKTsKKyAgICBub2RlLT50cmF2ZXJzZSgmdmFsaWRhdGUpOworICAgIHJl
dHVybiB2YWxpZGF0ZS5pc1ZhbGlkKCk7Cit9CisKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6
dmFsaWRhdGVJbmRleGluZyhUSW50ZXJtQmluYXJ5KiBub2RlKQoreworICAgIEFTU0VSVCgobm9k
ZS0+Z2V0T3AoKSA9PSBFT3BJbmRleERpcmVjdCkgfHwKKyAgICAgICAgICAgKG5vZGUtPmdldE9w
KCkgPT0gRU9wSW5kZXhJbmRpcmVjdCkpOworCisgICAgYm9vbCB2YWxpZCA9IHRydWU7CisgICAg
VEludGVybVR5cGVkKiBpbmRleCA9IG5vZGUtPmdldFJpZ2h0KCk7CisgICAgLy8gVGhlIGluZGV4
IGV4cHJlc3Npb24gbXVzdCBoYXZlIGludGVncmFsIHR5cGUuCisgICAgaWYgKCFpbmRleC0+aXNT
Y2FsYXIoKSB8fCAoaW5kZXgtPmdldEJhc2ljVHlwZSgpICE9IEVidEludCkpIHsKKyAgICAgICAg
ZXJyb3IoaW5kZXgtPmdldExpbmUoKSwKKyAgICAgICAgICAgICAgIkluZGV4IGV4cHJlc3Npb24g
bXVzdCBoYXZlIGludGVncmFsIHR5cGUiLAorICAgICAgICAgICAgICBpbmRleC0+Z2V0Q29tcGxl
dGVTdHJpbmcoKS5jX3N0cigpKTsKKyAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICB9CisgICAg
Ly8gVGhlIGluZGV4IGV4cGVzc2lvbiBtdXN0IGJlIGEgY29uc3RhbnQtaW5kZXgtZXhwcmVzc2lv
biB1bmxlc3MKKyAgICAvLyB0aGUgb3BlcmFuZCBpcyBhIHVuaWZvcm0gaW4gYSB2ZXJ0ZXggc2hh
ZGVyLgorICAgIFRJbnRlcm1UeXBlZCogb3BlcmFuZCA9IG5vZGUtPmdldExlZnQoKTsKKyAgICBi
b29sIHNraXAgPSAobVNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUikgJiYKKyAgICAgICAg
ICAgICAgICAob3BlcmFuZC0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxVW5pZm9ybSk7CisgICAgaWYg
KCFza2lwICYmICFpc0NvbnN0SW5kZXhFeHByKGluZGV4KSkgeworICAgICAgICBlcnJvcihpbmRl
eC0+Z2V0TGluZSgpLCAiSW5kZXggZXhwcmVzc2lvbiBtdXN0IGJlIGNvbnN0YW50IiwgIltdIik7
CisgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB2YWxpZDsKK30KKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVmFsaWRhdGVMaW1pdGF0aW9ucy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1pdGF0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg4Mzlk
ZDhiOGFmMzY1NmQxMzMyNDFkMDE2MTc4ODM3OTgxODExZmIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUxp
bWl0YXRpb25zLmgKQEAgLTAsMCArMSw1OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJH
TFNMQU5HL1NoYWRlckxhbmcuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVy
bWVkaWF0ZS5oIgorCitjbGFzcyBUSW5mb1NpbmtCYXNlOworCitzdHJ1Y3QgVExvb3BJbmZvIHsK
KyAgICBzdHJ1Y3QgVEluZGV4IHsKKyAgICAgICAgaW50IGlkOyAgLy8gc3ltYm9sIGlkLgorICAg
IH0gaW5kZXg7CisgICAgVEludGVybUxvb3AqIGxvb3A7Cit9OwordHlwZWRlZiBUVmVjdG9yPFRM
b29wSW5mbz4gVExvb3BTdGFjazsKKworLy8gVHJhdmVyc2VzIGludGVybWVkaWF0ZSB0cmVlIHRv
IGVuc3VyZSB0aGF0IHRoZSBzaGFkZXIgZG9lcyBub3QgZXhjZWVkIHRoZQorLy8gbWluaW11bSBm
dW5jdGlvbmFsaXR5IG1hbmRhdGVkIGluIEdMU0wgMS4wIHNwZWMsIEFwcGVuZGl4IEEuCitjbGFz
cyBWYWxpZGF0ZUxpbWl0YXRpb25zIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGlj
OgorICAgIFZhbGlkYXRlTGltaXRhdGlvbnMoU2hTaGFkZXJUeXBlIHNoYWRlclR5cGUsIFRJbmZv
U2lua0Jhc2UmIHNpbmspOworCisgICAgaW50IG51bUVycm9ycygpIGNvbnN0IHsgcmV0dXJuIG1O
dW1FcnJvcnM7IH0KKworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCwgVEludGVy
bUJpbmFyeSopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5h
cnkqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dy
ZWdhdGUqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCop
OworCitwcml2YXRlOgorICAgIHZvaWQgZXJyb3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIg
KnJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4pOworCisgICAgYm9vbCB3aXRoaW5Mb29wQm9keSgp
IGNvbnN0OworICAgIGJvb2wgaXNMb29wSW5kZXgoY29uc3QgVEludGVybVN5bWJvbCogc3ltYm9s
KSBjb25zdDsKKyAgICBib29sIHZhbGlkYXRlTG9vcFR5cGUoVEludGVybUxvb3AqIG5vZGUpOwor
ICAgIGJvb2wgdmFsaWRhdGVGb3JMb29wSGVhZGVyKFRJbnRlcm1Mb29wKiBub2RlLCBUTG9vcElu
Zm8qIGluZm8pOworICAgIGJvb2wgdmFsaWRhdGVGb3JMb29wSW5pdChUSW50ZXJtTG9vcCogbm9k
ZSwgVExvb3BJbmZvKiBpbmZvKTsKKyAgICBib29sIHZhbGlkYXRlRm9yTG9vcENvbmQoVEludGVy
bUxvb3AqIG5vZGUsIFRMb29wSW5mbyogaW5mbyk7CisgICAgYm9vbCB2YWxpZGF0ZUZvckxvb3BF
eHByKFRJbnRlcm1Mb29wKiBub2RlLCBUTG9vcEluZm8qIGluZm8pOworICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiBub25lIG9mIHRoZSBsb29wIGluZGljZXMgaXMgdXNlZCBhcyB0aGUgYXJndW1lbnQg
dG8KKyAgICAvLyB0aGUgZ2l2ZW4gZnVuY3Rpb24gb3V0IG9yIGlub3V0IHBhcmFtZXRlci4KKyAg
ICBib29sIHZhbGlkYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpOworICAg
IGJvb2wgdmFsaWRhdGVPcGVyYXRpb24oVEludGVybU9wZXJhdG9yKiBub2RlLCBUSW50ZXJtTm9k
ZSogb3BlcmFuZCk7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgaW5kZXhpbmcgZG9lcyBub3Qg
ZXhjZWVkIHRoZSBtaW5pbXVtIGZ1bmN0aW9uYWxpdHkKKyAgICAvLyBtYW5kYXRlZCBpbiBHTFNM
IDEuMCBzcGVjLCBBcHBlbmRpeCBBLCBTZWN0aW9uIDUuCisgICAgYm9vbCBpc0NvbnN0RXhwcihU
SW50ZXJtTm9kZSogbm9kZSk7CisgICAgYm9vbCBpc0NvbnN0SW5kZXhFeHByKFRJbnRlcm1Ob2Rl
KiBub2RlKTsKKyAgICBib29sIHZhbGlkYXRlSW5kZXhpbmcoVEludGVybUJpbmFyeSogbm9kZSk7
CisKKyAgICBTaFNoYWRlclR5cGUgbVNoYWRlclR5cGU7CisgICAgVEluZm9TaW5rQmFzZSYgbVNp
bms7CisgICAgaW50IG1OdW1FcnJvcnM7CisgICAgVExvb3BTdGFjayBtTG9vcFN0YWNrOworfTsK
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVmFyaWFibGVJbmZvLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWY4ODhhZmYxMTA0
NzMzZGEzOWU2M2Q0ZjE4MWE2NmI0MThhNTVkYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5jcHAK
QEAgLTAsMCArMSwzMTIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5oIgorCituYW1lc3BhY2UgeworCitUU3RyaW5nIGFy
cmF5QnJhY2tldHMoaW50IGluZGV4KQoreworICAgIFRTdHJpbmdTdHJlYW0gc3RyZWFtOworICAg
IHN0cmVhbSA8PCAiWyIgPDwgaW5kZXggPDwgIl0iOworICAgIHJldHVybiBzdHJlYW0uc3RyKCk7
Cit9CisKKy8vIFJldHVybnMgdGhlIGRhdGEgdHlwZSBmb3IgYW4gYXR0cmlidXRlLCB1bmlmb3Jt
LCBvciB2YXJ5aW5nLgorU2hEYXRhVHlwZSBnZXRWYXJpYWJsZURhdGFUeXBlKGNvbnN0IFRUeXBl
JiB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgY2Fz
ZSBFYnRGbG9hdDoKKyAgICAgICAgICBpZiAodHlwZS5pc01hdHJpeCgpKSB7CisgICAgICAgICAg
ICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgY2Fz
ZSAyOiByZXR1cm4gU0hfRkxPQVRfTUFUMjsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVy
biBTSF9GTE9BVF9NQVQzOworICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFNIX0ZMT0FU
X01BVDQ7CisgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgICAgfQorICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5pc1ZlY3RvcigpKSB7CisgICAgICAg
ICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSAyOiByZXR1cm4gU0hfRkxPQVRfVkVDMjsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IHJl
dHVybiBTSF9GTE9BVF9WRUMzOworICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFNIX0ZM
T0FUX1ZFQzQ7CisgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHJldHVybiBTSF9G
TE9BVDsKKyAgICAgICAgICB9CisgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICBpZiAodHlw
ZS5pc01hdHJpeCgpKSB7CisgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAg
fSBlbHNlIGlmICh0eXBlLmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgc3dpdGNoICh0eXBl
LmdldE5vbWluYWxTaXplKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBTSF9J
TlRfVkVDMjsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBTSF9JTlRfVkVDMzsKKyAg
ICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBTSF9JTlRfVkVDNDsKKyAgICAgICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgcmV0dXJuIFNIX0lOVDsKKyAgICAgICAgICB9CisgICAgICBj
YXNlIEVidEJvb2w6CisgICAgICAgICAgaWYgKHR5cGUuaXNNYXRyaXgoKSkgeworICAgICAgICAg
ICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5pc1ZlY3Rvcigp
KSB7CisgICAgICAgICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKSB7CisgICAg
ICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gU0hfQk9PTF9WRUMyOworICAgICAgICAgICAgICAg
IGNhc2UgMzogcmV0dXJuIFNIX0JPT0xfVkVDMzsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6IHJl
dHVybiBTSF9CT09MX1ZFQzQ7CisgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHJl
dHVybiBTSF9CT09MOworICAgICAgICAgIH0KKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiByZXR1
cm4gU0hfU0FNUExFUl8yRDsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6IHJldHVybiBTSF9T
QU1QTEVSX0NVQkU7CisgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzogcmV0dXJuIFNI
X1NBTVBMRVJfRVhURVJOQUxfT0VTOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OiByZXR1
cm4gU0hfU0FNUExFUl8yRF9SRUNUX0FSQjsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgfQorICAgIHJldHVybiBTSF9OT05FOworfQorCit2b2lkIGdldEJ1aWx0SW5WYXJpYWJs
ZUluZm8oY29uc3QgVFR5cGUmIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVFN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3Ry
aW5nJiBtYXBwZWROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJsZUlu
Zm9MaXN0JiBpbmZvTGlzdCk7Cit2b2lkIGdldFVzZXJEZWZpbmVkVmFyaWFibGVJbmZvKGNvbnN0
IFRUeXBlJiB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3Ry
aW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5n
JiBtYXBwZWROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFyaWFibGVJ
bmZvTGlzdCYgaW5mb0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoSGFz
aEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uKTsKKworLy8gUmV0dXJucyBpbmZvIGZvciBhbiBhdHRy
aWJ1dGUsIHVuaWZvcm0sIG9yIHZhcnlpbmcuCit2b2lkIGdldFZhcmlhYmxlSW5mbyhjb25zdCBU
VHlwZSYgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUsCisg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nJiBtYXBwZWROYW1lLAorICAgICAgICAg
ICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIGluZm9MaXN0LAorICAgICAgICAgICAgICAg
ICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24pCit7CisgICAgaWYgKHR5cGUuZ2V0
QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7CisgICAgICAgIGlmICh0eXBlLmlzQXJyYXkoKSkg
eworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlLmdldEFycmF5U2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICBUU3RyaW5nIGxuYW1lID0gbmFtZSArIGFycmF5QnJhY2tl
dHMoaSk7CisgICAgICAgICAgICAgICAgVFN0cmluZyBsbWFwcGVkTmFtZSA9IG1hcHBlZE5hbWUg
KyBhcnJheUJyYWNrZXRzKGkpOworICAgICAgICAgICAgICAgIGdldFVzZXJEZWZpbmVkVmFyaWFi
bGVJbmZvKHR5cGUsIGxuYW1lLCBsbWFwcGVkTmFtZSwgaW5mb0xpc3QsIGhhc2hGdW5jdGlvbik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBnZXRVc2VyRGVm
aW5lZFZhcmlhYmxlSW5mbyh0eXBlLCBuYW1lLCBtYXBwZWROYW1lLCBpbmZvTGlzdCwgaGFzaEZ1
bmN0aW9uKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGdldEJ1aWx0SW5WYXJp
YWJsZUluZm8odHlwZSwgbmFtZSwgbWFwcGVkTmFtZSwgaW5mb0xpc3QpOworICAgIH0KK30KKwor
dm9pZCBnZXRCdWlsdEluVmFyaWFibGVJbmZvKGNvbnN0IFRUeXBlJiB0eXBlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVFN0cmluZyYgbWFwcGVkTmFtZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYgaW5mb0xpc3QpCit7CisgICAgQVNTRVJUKHR5
cGUuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0U3RydWN0KTsKKworICAgIFRWYXJpYWJsZUluZm8gdmFy
SW5mbzsKKyAgICBpZiAodHlwZS5pc0FycmF5KCkpIHsKKyAgICAgICAgdmFySW5mby5uYW1lID0g
KG5hbWUgKyAiWzBdIikuY19zdHIoKTsKKyAgICAgICAgdmFySW5mby5tYXBwZWROYW1lID0gKG1h
cHBlZE5hbWUgKyAiWzBdIikuY19zdHIoKTsKKyAgICAgICAgdmFySW5mby5zaXplID0gdHlwZS5n
ZXRBcnJheVNpemUoKTsKKyAgICAgICAgdmFySW5mby5pc0FycmF5ID0gdHJ1ZTsKKyAgICB9IGVs
c2UgeworICAgICAgICB2YXJJbmZvLm5hbWUgPSBuYW1lLmNfc3RyKCk7CisgICAgICAgIHZhcklu
Zm8ubWFwcGVkTmFtZSA9IG1hcHBlZE5hbWUuY19zdHIoKTsKKyAgICAgICAgdmFySW5mby5zaXpl
ID0gMTsKKyAgICAgICAgdmFySW5mby5pc0FycmF5ID0gZmFsc2U7CisgICAgfQorICAgIHZhcklu
Zm8ucHJlY2lzaW9uID0gdHlwZS5nZXRQcmVjaXNpb24oKTsKKyAgICB2YXJJbmZvLnR5cGUgPSBn
ZXRWYXJpYWJsZURhdGFUeXBlKHR5cGUpOworICAgIGluZm9MaXN0LnB1c2hfYmFjayh2YXJJbmZv
KTsKK30KKwordm9pZCBnZXRVc2VyRGVmaW5lZFZhcmlhYmxlSW5mbyhjb25zdCBUVHlwZSYgdHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyYgbmFtZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyYgbWFwcGVkTmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIGlu
Zm9MaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0
IGhhc2hGdW5jdGlvbikKK3sKKyAgICBBU1NFUlQodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRT
dHJ1Y3QpOworCisgICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRzID0gdHlwZS5nZXRTdHJ1Y3Qo
KS0+ZmllbGRzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgY29uc3QgVFR5cGUmIGZpZWxkVHlwZSA9ICooZmllbGRzW2ldLT50eXBl
KCkpOworICAgICAgICBjb25zdCBUU3RyaW5nJiBmaWVsZE5hbWUgPSBmaWVsZHNbaV0tPm5hbWUo
KTsKKyAgICAgICAgZ2V0VmFyaWFibGVJbmZvKGZpZWxkVHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG5hbWUgKyAiLiIgKyBmaWVsZE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBt
YXBwZWROYW1lICsgIi4iICsgVEludGVybVRyYXZlcnNlcjo6aGFzaChmaWVsZE5hbWUsIGhhc2hG
dW5jdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvTGlzdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGhhc2hGdW5jdGlvbik7CisgICAgfQorfQorCitUVmFyaWFibGVJbmZvKiBm
aW5kVmFyaWFibGUoY29uc3QgVFR5cGUmIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVFN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFy
aWFibGVJbmZvTGlzdCYgaW5mb0xpc3QpCit7CisgICAgLy8gVE9ETyh6bW8pOiBvcHRpbWl6ZSB0
aGlzIGZ1bmN0aW9uLgorICAgIFRTdHJpbmcgbXlOYW1lID0gbmFtZTsKKyAgICBpZiAodHlwZS5p
c0FycmF5KCkpCisgICAgICAgIG15TmFtZSArPSAiWzBdIjsKKyAgICBmb3IgKHNpemVfdCBpaSA9
IDA7IGlpIDwgaW5mb0xpc3Quc2l6ZSgpOyArK2lpKQorICAgIHsKKyAgICAgICAgaWYgKGluZm9M
aXN0W2lpXS5uYW1lLmNfc3RyKCkgPT0gbXlOYW1lKQorICAgICAgICAgICAgcmV0dXJuICYoaW5m
b0xpc3RbaWldKTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK30gIC8vIG5hbWVzcGFj
ZSBhbm9ueW1vdXMKKworVFZhcmlhYmxlSW5mbzo6VFZhcmlhYmxlSW5mbygpCisgICAgOiB0eXBl
KFNIX05PTkUpLAorICAgICAgc2l6ZSgwKSwKKyAgICAgIGlzQXJyYXkoZmFsc2UpLAorICAgICAg
cHJlY2lzaW9uKEVicFVuZGVmaW5lZCksCisgICAgICBzdGF0aWNVc2UoZmFsc2UpCit7Cit9CisK
K1RWYXJpYWJsZUluZm86OlRWYXJpYWJsZUluZm8oU2hEYXRhVHlwZSB0eXBlLCBpbnQgc2l6ZSkK
KyAgICA6IHR5cGUodHlwZSksCisgICAgICBzaXplKHNpemUpLAorICAgICAgaXNBcnJheShmYWxz
ZSksCisgICAgICBwcmVjaXNpb24oRWJwVW5kZWZpbmVkKSwKKyAgICAgIHN0YXRpY1VzZShmYWxz
ZSkKK3sKK30KKworQ29sbGVjdFZhcmlhYmxlczo6Q29sbGVjdFZhcmlhYmxlcyhUVmFyaWFibGVJ
bmZvTGlzdCYgYXR0cmlicywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZh
cmlhYmxlSW5mb0xpc3QmIHVuaWZvcm1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUVmFyaWFibGVJbmZvTGlzdCYgdmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uKQorICAgIDogbUF0dHJp
YnMoYXR0cmlicyksCisgICAgICBtVW5pZm9ybXModW5pZm9ybXMpLAorICAgICAgbVZhcnlpbmdz
KHZhcnlpbmdzKSwKKyAgICAgIG1Qb2ludENvb3JkQWRkZWQoZmFsc2UpLAorICAgICAgbUZyb250
RmFjaW5nQWRkZWQoZmFsc2UpLAorICAgICAgbUZyYWdDb29yZEFkZGVkKGZhbHNlKSwKKyAgICAg
IG1IYXNoRnVuY3Rpb24oaGFzaEZ1bmN0aW9uKQoreworfQorCisvLyBXZSB3YW50IHRvIGNoZWNr
IHdoZXRoZXIgYSB1bmlmb3JtL3ZhcnlpbmcgaXMgc3RhdGljYWxseSB1c2VkCisvLyBiZWNhdXNl
IHdlIG9ubHkgY291bnQgdGhlIHVzZWQgb25lcyBpbiBwYWNraW5nIGNvbXB1dGluZy4KKy8vIEFs
c28sIGdsX0ZyYWdDb29yZCwgZ2xfUG9pbnRDb29yZCwgYW5kIGdsX0Zyb250RmFjaW5nIGNvdW50
CisvLyB0b3dhcmQgdmFyeWluZyBjb3VudGluZyBpZiB0aGV5IGFyZSBzdGF0aWNhbGx5IHVzZWQg
aW4gYSBmcmFnbWVudAorLy8gc2hhZGVyLgordm9pZCBDb2xsZWN0VmFyaWFibGVzOjp2aXNpdFN5
bWJvbChUSW50ZXJtU3ltYm9sKiBzeW1ib2wpCit7CisgICAgQVNTRVJUKHN5bWJvbCAhPSBOVUxM
KTsKKyAgICBUVmFyaWFibGVJbmZvKiB2YXIgPSBOVUxMOworICAgIHN3aXRjaCAoc3ltYm9sLT5n
ZXRRdWFsaWZpZXIoKSkKKyAgICB7CisgICAgY2FzZSBFdnFWYXJ5aW5nT3V0OgorICAgIGNhc2Ug
RXZxSW52YXJpYW50VmFyeWluZ091dDoKKyAgICBjYXNlIEV2cVZhcnlpbmdJbjoKKyAgICBjYXNl
IEV2cUludmFyaWFudFZhcnlpbmdJbjoKKyAgICAgICAgdmFyID0gZmluZFZhcmlhYmxlKHN5bWJv
bC0+Z2V0VHlwZSgpLCBzeW1ib2wtPmdldFN5bWJvbCgpLCBtVmFyeWluZ3MpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEV2cVVuaWZvcm06CisgICAgICAgIHZhciA9IGZpbmRWYXJpYWJsZShz
eW1ib2wtPmdldFR5cGUoKSwgc3ltYm9sLT5nZXRTeW1ib2woKSwgbVVuaWZvcm1zKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBFdnFGcmFnQ29vcmQ6CisgICAgICAgIGlmICghbUZyYWdDb29y
ZEFkZGVkKSB7CisgICAgICAgICAgICBUVmFyaWFibGVJbmZvIGluZm87CisgICAgICAgICAgICBp
bmZvLm5hbWUgPSAiZ2xfRnJhZ0Nvb3JkIjsKKyAgICAgICAgICAgIGluZm8ubWFwcGVkTmFtZSA9
ICJnbF9GcmFnQ29vcmQiOworICAgICAgICAgICAgaW5mby50eXBlID0gU0hfRkxPQVRfVkVDNDsK
KyAgICAgICAgICAgIGluZm8uc2l6ZSA9IDE7CisgICAgICAgICAgICBpbmZvLnByZWNpc2lvbiA9
IEVicE1lZGl1bTsgIC8vIFVzZSBtZWRpdW1wIGFzIGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlci4K
KyAgICAgICAgICAgIGluZm8uc3RhdGljVXNlID0gdHJ1ZTsKKwkgICAgbVZhcnlpbmdzLnB1c2hf
YmFjayhpbmZvKTsKKyAgICAgICAgICAgIG1GcmFnQ29vcmRBZGRlZCA9IHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXZxRnJvbnRGYWNpbmc6CisgICAgICAgIGlm
ICghbUZyb250RmFjaW5nQWRkZWQpIHsKKyAgICAgICAgICAgIFRWYXJpYWJsZUluZm8gaW5mbzsK
KyAgICAgICAgICAgIGluZm8ubmFtZSA9ICJnbF9Gcm9udEZhY2luZyI7CisgICAgICAgICAgICBp
bmZvLm1hcHBlZE5hbWUgPSAiZ2xfRnJvbnRGYWNpbmciOworICAgICAgICAgICAgaW5mby50eXBl
ID0gU0hfQk9PTDsKKyAgICAgICAgICAgIGluZm8uc2l6ZSA9IDE7CisgICAgICAgICAgICBpbmZv
LnByZWNpc2lvbiA9IEVicFVuZGVmaW5lZDsKKyAgICAgICAgICAgIGluZm8uc3RhdGljVXNlID0g
dHJ1ZTsKKwkgICAgbVZhcnlpbmdzLnB1c2hfYmFjayhpbmZvKTsKKyAgICAgICAgICAgIG1Gcm9u
dEZhY2luZ0FkZGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBFdnFQb2ludENvb3JkOgorICAgICAgICBpZiAoIW1Qb2ludENvb3JkQWRkZWQpIHsKKyAgICAg
ICAgICAgIFRWYXJpYWJsZUluZm8gaW5mbzsKKyAgICAgICAgICAgIGluZm8ubmFtZSA9ICJnbF9Q
b2ludENvb3JkIjsKKyAgICAgICAgICAgIGluZm8ubWFwcGVkTmFtZSA9ICJnbF9Qb2ludENvb3Jk
IjsKKyAgICAgICAgICAgIGluZm8udHlwZSA9IFNIX0ZMT0FUX1ZFQzI7CisgICAgICAgICAgICBp
bmZvLnNpemUgPSAxOworICAgICAgICAgICAgaW5mby5wcmVjaXNpb24gPSBFYnBNZWRpdW07ICAv
LyBVc2UgbWVkaXVtcCBhcyBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIuCisgICAgICAgICAgICBp
bmZvLnN0YXRpY1VzZSA9IHRydWU7CisJICAgIG1WYXJ5aW5ncy5wdXNoX2JhY2soaW5mbyk7Cisg
ICAgICAgICAgICBtUG9pbnRDb29yZEFkZGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm47CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmICh2YXIp
CisgICAgICAgIHZhci0+c3RhdGljVXNlID0gdHJ1ZTsKK30KKworYm9vbCBDb2xsZWN0VmFyaWFi
bGVzOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK3sKKyAg
ICBib29sIHZpc2l0Q2hpbGRyZW4gPSB0cnVlOworCisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgp
KQorICAgIHsKKyAgICBjYXNlIEVPcERlY2xhcmF0aW9uOiB7CisgICAgICAgIGNvbnN0IFRJbnRl
cm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOworICAgICAgICBUUXVh
bGlmaWVyIHF1YWxpZmllciA9IHNlcXVlbmNlLmZyb250KCktPmdldEFzVHlwZWQoKS0+Z2V0UXVh
bGlmaWVyKCk7CisgICAgICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlIHx8IHF1YWxp
ZmllciA9PSBFdnFVbmlmb3JtIHx8CisgICAgICAgICAgICBxdWFsaWZpZXIgPT0gRXZxVmFyeWlu
Z0luIHx8IHF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8CisgICAgICAgICAgICBxdWFsaWZp
ZXIgPT0gRXZxSW52YXJpYW50VmFyeWluZ0luIHx8IHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRW
YXJ5aW5nT3V0KQorICAgICAgICB7CisgICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYgaW5m
b0xpc3QgPSBxdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlID8gbUF0dHJpYnMgOgorICAgICAgICAg
ICAgICAgIChxdWFsaWZpZXIgPT0gRXZxVW5pZm9ybSA/IG1Vbmlmb3JtcyA6IG1WYXJ5aW5ncyk7
CisgICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgaSA9IHNl
cXVlbmNlLmJlZ2luKCk7CisgICAgICAgICAgICAgICAgIGkgIT0gc2VxdWVuY2UuZW5kKCk7ICsr
aSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBUSW50ZXJtU3ltYm9sKiB2
YXJpYWJsZSA9ICgqaSktPmdldEFzU3ltYm9sTm9kZSgpOworICAgICAgICAgICAgICAgIC8vIFRo
ZSBvbmx5IGNhc2UgaW4gd2hpY2ggdGhlIHNlcXVlbmNlIHdpbGwgbm90IGNvbnRhaW4gYQorICAg
ICAgICAgICAgICAgIC8vIFRJbnRlcm1TeW1ib2wgbm9kZSBpcyBpbml0aWFsaXphdGlvbi4gSXQg
d2lsbCBjb250YWluIGEKKyAgICAgICAgICAgICAgICAvLyBUSW50ZXJCaW5hcnkgbm9kZSBpbiB0
aGF0IGNhc2UuIFNpbmNlIGF0dHJpYnV0ZXMsIHVuaWZvcm1zLAorICAgICAgICAgICAgICAgIC8v
IGFuZCB2YXJ5aW5ncyBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgaW4gYSBzaGFkZXIsIHdlIG11c3Qg
aGF2ZQorICAgICAgICAgICAgICAgIC8vIG9ubHkgVEludGVybVN5bWJvbCBub2RlcyBpbiB0aGUg
c2VxdWVuY2UuCisgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhYmxlICE9IE5VTEwpOworICAg
ICAgICAgICAgICAgIFRTdHJpbmcgcHJvY2Vzc2VkU3ltYm9sOworICAgICAgICAgICAgICAgIGlm
IChtSGFzaEZ1bmN0aW9uID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZFN5
bWJvbCA9IHZhcmlhYmxlLT5nZXRTeW1ib2woKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIHByb2Nlc3NlZFN5bWJvbCA9IFRJbnRlcm1UcmF2ZXJzZXI6Omhhc2go
dmFyaWFibGUtPmdldE9yaWdpbmFsU3ltYm9sKCksIG1IYXNoRnVuY3Rpb24pOworICAgICAgICAg
ICAgICAgIGdldFZhcmlhYmxlSW5mbyh2YXJpYWJsZS0+Z2V0VHlwZSgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0T3JpZ2luYWxTeW1ib2woKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkU3ltYm9sLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbmZvTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbUhhc2hGdW5jdGlvbik7CisgICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZh
bHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gdmlzaXRDaGlsZHJlbjsKK30K
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVmFyaWFibGVJbmZvLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9WYXJpYWJsZUluZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNzIxNmNkMTQyOGYyZGNk
MjBiMWNjZjBmNmYwNTg5ZTllYjk4ZTQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVJbmZvLmgKQEAgLTAs
MCArMSw1MiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9WQVJJQUJM
RV9JTkZPX0hfCisjZGVmaW5lIENPTVBJTEVSX1ZBUklBQkxFX0lORk9fSF8KKworI2luY2x1ZGUg
IkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50
ZXJtZWRpYXRlLmgiCisKKy8vIFByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IGEgdmFyaWFibGUu
CisvLyBJdCBpcyBjdXJyZW50bHkgYmVpbmcgdXNlZCB0byBzdG9yZSBpbmZvIGFib3V0IGFjdGl2
ZSBhdHRyaWJzIGFuZCB1bmlmb3Jtcy4KK3N0cnVjdCBUVmFyaWFibGVJbmZvIHsKKyAgICBUVmFy
aWFibGVJbmZvKFNoRGF0YVR5cGUgdHlwZSwgaW50IHNpemUpOworICAgIFRWYXJpYWJsZUluZm8o
KTsKKworICAgIFRQZXJzaXN0U3RyaW5nIG5hbWU7CisgICAgVFBlcnNpc3RTdHJpbmcgbWFwcGVk
TmFtZTsKKyAgICBTaERhdGFUeXBlIHR5cGU7CisgICAgaW50IHNpemU7CisgICAgYm9vbCBpc0Fy
cmF5OworICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOworICAgIGJvb2wgc3RhdGljVXNlOworfTsK
K3R5cGVkZWYgc3RkOjp2ZWN0b3I8VFZhcmlhYmxlSW5mbz4gVFZhcmlhYmxlSW5mb0xpc3Q7CisK
Ky8vIFRyYXZlcnNlcyBpbnRlcm1lZGlhdGUgdHJlZSB0byBjb2xsZWN0IGFsbCBhdHRyaWJ1dGVz
LCB1bmlmb3JtcywgdmFyeWluZ3MuCitjbGFzcyBDb2xsZWN0VmFyaWFibGVzIDogcHVibGljIFRJ
bnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgorICAgIENvbGxlY3RWYXJpYWJsZXMoVFZhcmlhYmxl
SW5mb0xpc3QmIGF0dHJpYnMsCisgICAgICAgICAgICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlz
dCYgdW5pZm9ybXMsCisgICAgICAgICAgICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYgdmFy
eWluZ3MsCisgICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlv
bik7CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOworICAg
IHZpcnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOwor
Citwcml2YXRlOgorICAgIFRWYXJpYWJsZUluZm9MaXN0JiBtQXR0cmliczsKKyAgICBUVmFyaWFi
bGVJbmZvTGlzdCYgbVVuaWZvcm1zOworICAgIFRWYXJpYWJsZUluZm9MaXN0JiBtVmFyeWluZ3M7
CisKKyAgICBib29sIG1Qb2ludENvb3JkQWRkZWQ7CisgICAgYm9vbCBtRnJvbnRGYWNpbmdBZGRl
ZDsKKyAgICBib29sIG1GcmFnQ29vcmRBZGRlZDsKKworICAgIFNoSGFzaEZ1bmN0aW9uNjQgbUhh
c2hGdW5jdGlvbjsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVkFSSUFCTEVfSU5GT19IXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVmFyaWFibGVQYWNrZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVmFyaWFibGVQYWNrZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2MzRkODYzMzc3
YzlmOTcxYTUyZTcyNzFmZTk3OGVlZGMzNWViMWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZVBhY2tlci5j
cHAKQEAgLTAsMCArMSwyOTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9WYXJpYWJsZVBhY2tlci5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU2hIYW5kbGUuaCIKKworbmFtZXNwYWNlIHsK
K2ludCBHZXRTb3J0T3JkZXIoU2hEYXRhVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkg
eworICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDQ6CisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgY2FzZSBTSF9GTE9BVF9NQVQyOgorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAg
IGNhc2UgU0hfRkxPQVRfVkVDNDoKKyAgICAgICAgY2FzZSBTSF9JTlRfVkVDNDoKKyAgICAgICAg
Y2FzZSBTSF9CT09MX1ZFQzQ6CisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgY2FzZSBT
SF9GTE9BVF9NQVQzOgorICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIGNhc2UgU0hfRkxP
QVRfVkVDMzoKKyAgICAgICAgY2FzZSBTSF9JTlRfVkVDMzoKKyAgICAgICAgY2FzZSBTSF9CT09M
X1ZFQzM6CisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUMy
OgorICAgICAgICBjYXNlIFNIX0lOVF9WRUMyOgorICAgICAgICBjYXNlIFNIX0JPT0xfVkVDMjoK
KyAgICAgICAgICAgIHJldHVybiA1OworICAgICAgICBjYXNlIFNIX0ZMT0FUOgorICAgICAgICBj
YXNlIFNIX0lOVDoKKyAgICAgICAgY2FzZSBTSF9CT09MOgorICAgICAgICBjYXNlIFNIX1NBTVBM
RVJfMkQ6CisgICAgICAgIGNhc2UgU0hfU0FNUExFUl9DVUJFOgorICAgICAgICBjYXNlIFNIX1NB
TVBMRVJfRVhURVJOQUxfT0VTOgorICAgICAgICBjYXNlIFNIX1NBTVBMRVJfMkRfUkVDVF9BUkI6
CisgICAgICAgICAgICByZXR1cm4gNjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFT
U0VSVChmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gNzsKKyAgICB9Cit9Cit9ICAgIC8vIG5h
bWVzcGFjZQorCitpbnQgVmFyaWFibGVQYWNrZXI6OkdldE51bUNvbXBvbmVudHNQZXJSb3coU2hE
YXRhVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFNIX0ZM
T0FUX01BVDQ6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMjoKKyAgICAgICAgY2FzZSBTSF9G
TE9BVF9WRUM0OgorICAgICAgICBjYXNlIFNIX0lOVF9WRUM0OgorICAgICAgICBjYXNlIFNIX0JP
T0xfVkVDNDoKKyAgICAgICAgICAgIHJldHVybiA0OworICAgICAgICBjYXNlIFNIX0ZMT0FUX01B
VDM6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMzoKKyAgICAgICAgY2FzZSBTSF9JTlRfVkVD
MzoKKyAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzM6CisgICAgICAgICAgICByZXR1cm4gMzsKKyAg
ICAgICAgY2FzZSBTSF9GTE9BVF9WRUMyOgorICAgICAgICBjYXNlIFNIX0lOVF9WRUMyOgorICAg
ICAgICBjYXNlIFNIX0JPT0xfVkVDMjoKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICBj
YXNlIFNIX0ZMT0FUOgorICAgICAgICBjYXNlIFNIX0lOVDoKKyAgICAgICAgY2FzZSBTSF9CT09M
OgorICAgICAgICBjYXNlIFNIX1NBTVBMRVJfMkQ6CisgICAgICAgIGNhc2UgU0hfU0FNUExFUl9D
VUJFOgorICAgICAgICBjYXNlIFNIX1NBTVBMRVJfRVhURVJOQUxfT0VTOgorICAgICAgICBjYXNl
IFNIX1NBTVBMRVJfMkRfUkVDVF9BUkI6CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4g
NTsKKyAgICB9Cit9CisKK2ludCBWYXJpYWJsZVBhY2tlcjo6R2V0TnVtUm93cyhTaERhdGFUeXBl
IHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFU
NDoKKyAgICAgICAgICAgIHJldHVybiA0OworICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDM6Cisg
ICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQyOgorICAgICAg
ICAgICAgcmV0dXJuIDI7CisgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDNDoKKyAgICAgICAgY2Fz
ZSBTSF9JTlRfVkVDNDoKKyAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzQ6CisgICAgICAgIGNhc2Ug
U0hfRkxPQVRfVkVDMzoKKyAgICAgICAgY2FzZSBTSF9JTlRfVkVDMzoKKyAgICAgICAgY2FzZSBT
SF9CT09MX1ZFQzM6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMjoKKyAgICAgICAgY2FzZSBT
SF9JTlRfVkVDMjoKKyAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzI6CisgICAgICAgIGNhc2UgU0hf
RkxPQVQ6CisgICAgICAgIGNhc2UgU0hfSU5UOgorICAgICAgICBjYXNlIFNIX0JPT0w6CisgICAg
ICAgIGNhc2UgU0hfU0FNUExFUl8yRDoKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSX0NVQkU6Cisg
ICAgICAgIGNhc2UgU0hfU0FNUExFUl9FWFRFUk5BTF9PRVM6CisgICAgICAgIGNhc2UgU0hfU0FN
UExFUl8yRF9SRUNUX0FSQjoKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybiAxMDAwMDA7
CisgICAgfQorfQorCitzdHJ1Y3QgVFZhcmlhYmxlSW5mb0NvbXBhcmVyIHsKKyAgICBib29sIG9w
ZXJhdG9yKCkoY29uc3QgVFZhcmlhYmxlSW5mbyYgbGhzLCBjb25zdCBUVmFyaWFibGVJbmZvJiBy
aHMpIGNvbnN0CisgICAgeworICAgICAgICBpbnQgbGhzU29ydE9yZGVyID0gR2V0U29ydE9yZGVy
KGxocy50eXBlKTsKKyAgICAgICAgaW50IHJoc1NvcnRPcmRlciA9IEdldFNvcnRPcmRlcihyaHMu
dHlwZSk7CisgICAgICAgIGlmIChsaHNTb3J0T3JkZXIgIT0gcmhzU29ydE9yZGVyKSB7CisgICAg
ICAgICAgICByZXR1cm4gbGhzU29ydE9yZGVyIDwgcmhzU29ydE9yZGVyOworICAgICAgICB9Cisg
ICAgICAgIC8vIFNvcnQgYnkgbGFyZ2VzdCBmaXJzdC4KKyAgICAgICAgcmV0dXJuIGxocy5zaXpl
ID4gcmhzLnNpemU7CisgICAgfQorfTsKKwordW5zaWduZWQgVmFyaWFibGVQYWNrZXI6Om1ha2VD
b2x1bW5GbGFncyhpbnQgY29sdW1uLCBpbnQgbnVtQ29tcG9uZW50c1BlclJvdykKK3sKKyAgICBy
ZXR1cm4gKChrQ29sdW1uTWFzayA8PCAoa051bUNvbHVtbnMgLSBudW1Db21wb25lbnRzUGVyUm93
KSkgJgorICAgICAgICAgICAgICAgICAgICBrQ29sdW1uTWFzaykgPj4gY29sdW1uOworfQorCit2
b2lkIFZhcmlhYmxlUGFja2VyOjpmaWxsQ29sdW1ucyhpbnQgdG9wUm93LCBpbnQgbnVtUm93cywg
aW50IGNvbHVtbiwgaW50IG51bUNvbXBvbmVudHNQZXJSb3cpCit7CisgICAgdW5zaWduZWQgY29s
dW1uRmxhZ3MgPSBtYWtlQ29sdW1uRmxhZ3MoY29sdW1uLCBudW1Db21wb25lbnRzUGVyUm93KTsK
KyAgICBmb3IgKGludCByID0gMDsgciA8IG51bVJvd3M7ICsrcikgeworICAgICAgICBpbnQgcm93
ID0gdG9wUm93ICsgcjsKKyAgICAgICAgQVNTRVJUKChyb3dzX1tyb3ddICYgY29sdW1uRmxhZ3Mp
ID09IDApOworICAgICAgICByb3dzX1tyb3ddIHw9IGNvbHVtbkZsYWdzOworICAgIH0KK30KKwor
Ym9vbCBWYXJpYWJsZVBhY2tlcjo6c2VhcmNoQ29sdW1uKGludCBjb2x1bW4sIGludCBudW1Sb3dz
LCBpbnQqIGRlc3RSb3csIGludCogZGVzdFNpemUpCit7CisgICAgQVNTRVJUKGRlc3RSb3cpOwor
CisgICAgZm9yICg7IHRvcE5vbkZ1bGxSb3dfIDwgbWF4Um93c18gJiYgcm93c19bdG9wTm9uRnVs
bFJvd19dID09IGtDb2x1bW5NYXNrOworICAgICAgICAgKyt0b3BOb25GdWxsUm93XykgeworICAg
IH0KKworICAgIGZvciAoOyBib3R0b21Ob25GdWxsUm93XyA+PSAwICYmIHJvd3NfW2JvdHRvbU5v
bkZ1bGxSb3dfXSA9PSBrQ29sdW1uTWFzazsKKyAgICAgICAgIC0tYm90dG9tTm9uRnVsbFJvd18p
IHsKKyAgICB9CisKKyAgICBpZiAoYm90dG9tTm9uRnVsbFJvd18gLSB0b3BOb25GdWxsUm93XyAr
IDEgPCBudW1Sb3dzKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB1bnNp
Z25lZCBjb2x1bW5GbGFncyA9IG1ha2VDb2x1bW5GbGFncyhjb2x1bW4sIDEpOworICAgIGludCB0
b3BHb29kUm93ID0gMDsKKyAgICBpbnQgc21hbGxlc3RHb29kVG9wID0gLTE7CisgICAgaW50IHNt
YWxsZXN0R29vZFNpemUgPSBtYXhSb3dzXyArIDE7CisgICAgaW50IGJvdHRvbVJvdyA9IGJvdHRv
bU5vbkZ1bGxSb3dfICsgMTsKKyAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgZm9yIChpbnQg
cm93ID0gdG9wTm9uRnVsbFJvd187IHJvdyA8PSBib3R0b21Sb3c7ICsrcm93KSB7CisgICAgICAg
IGJvb2wgcm93RW1wdHkgPSByb3cgPCBib3R0b21Sb3cgPyAoKHJvd3NfW3Jvd10gJiBjb2x1bW5G
bGFncykgPT0gMCkgOiBmYWxzZTsKKyAgICAgICAgaWYgKHJvd0VtcHR5KSB7CisgICAgICAgICAg
ICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICAgICAgdG9wR29vZFJvdyA9IHJvdzsKKyAgICAg
ICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBpZiAoZm91bmQpIHsKKyAgICAgICAgICAgICAgICBpbnQgc2l6ZSA9IHJv
dyAtIHRvcEdvb2RSb3c7CisgICAgICAgICAgICAgICAgaWYgKHNpemUgPj0gbnVtUm93cyAmJiBz
aXplIDwgc21hbGxlc3RHb29kU2l6ZSkgeworICAgICAgICAgICAgICAgICAgICBzbWFsbGVzdEdv
b2RTaXplID0gc2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgc21hbGxlc3RHb29kVG9wID0gdG9w
R29vZFJvdzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBm
b3VuZCA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIGlmIChzbWFsbGVzdEdvb2RUb3Ag
PCAwKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAqZGVzdFJvdyA9IHNt
YWxsZXN0R29vZFRvcDsKKyAgICBpZiAoZGVzdFNpemUpIHsKKyAgICAgICAgKmRlc3RTaXplID0g
c21hbGxlc3RHb29kU2l6ZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVmFy
aWFibGVQYWNrZXI6OkNoZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cyhpbnQgbWF4VmVj
dG9ycywgY29uc3QgVFZhcmlhYmxlSW5mb0xpc3QmIGluX3ZhcmlhYmxlcykKK3sKKyAgICBBU1NF
UlQobWF4VmVjdG9ycyA+IDApOworICAgIG1heFJvd3NfID0gbWF4VmVjdG9yczsKKyAgICB0b3BO
b25GdWxsUm93XyA9IDA7CisgICAgYm90dG9tTm9uRnVsbFJvd18gPSBtYXhSb3dzXyAtIDE7Cisg
ICAgVFZhcmlhYmxlSW5mb0xpc3QgdmFyaWFibGVzKGluX3ZhcmlhYmxlcyk7CisKKyAgICAvLyBB
cyBwZXIgR0xTTCAxLjAxNyBBcHBlbmRpeCBBLCBTZWN0aW9uIDcgdmFyaWFibGVzIGFyZSBwYWNr
ZWQgaW4gc3BlY2lmaWMKKyAgICAvLyBvcmRlciBieSB0eXBlLCB0aGVuIGJ5IHNpemUgb2YgYXJy
YXksIGxhcmdlc3QgZmlyc3QuCisgICAgc3RkOjpzb3J0KHZhcmlhYmxlcy5iZWdpbigpLCB2YXJp
YWJsZXMuZW5kKCksIFRWYXJpYWJsZUluZm9Db21wYXJlcigpKTsKKyAgICByb3dzXy5jbGVhcigp
OworICAgIHJvd3NfLnJlc2l6ZShtYXhWZWN0b3JzLCAwKTsKKworICAgIC8vIFBhY2tzIHRoZSA0
IGNvbHVtbiB2YXJpYWJsZXMuCisgICAgc2l6ZV90IGlpID0gMDsKKyAgICBmb3IgKDsgaWkgPCB2
YXJpYWJsZXMuc2l6ZSgpOyArK2lpKSB7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZUluZm8mIHZh
cmlhYmxlID0gdmFyaWFibGVzW2lpXTsKKyAgICAgICAgaWYgKEdldE51bUNvbXBvbmVudHNQZXJS
b3codmFyaWFibGUudHlwZSkgIT0gNCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgdG9wTm9uRnVsbFJvd18gKz0gR2V0TnVtUm93cyh2YXJpYWJsZS50eXBlKSAqIHZh
cmlhYmxlLnNpemU7CisgICAgfQorCisgICAgaWYgKHRvcE5vbkZ1bGxSb3dfID4gbWF4Um93c18p
IHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFBhY2tzIHRoZSAzIGNv
bHVtbiB2YXJpYWJsZXMuCisgICAgaW50IG51bTNDb2x1bW5Sb3dzID0gMDsKKyAgICBmb3IgKDsg
aWkgPCB2YXJpYWJsZXMuc2l6ZSgpOyArK2lpKSB7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZUlu
Zm8mIHZhcmlhYmxlID0gdmFyaWFibGVzW2lpXTsKKyAgICAgICAgaWYgKEdldE51bUNvbXBvbmVu
dHNQZXJSb3codmFyaWFibGUudHlwZSkgIT0gMykgeworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgbnVtM0NvbHVtblJvd3MgKz0gR2V0TnVtUm93cyh2YXJpYWJsZS50eXBl
KSAqIHZhcmlhYmxlLnNpemU7CisgICAgfQorCisgICAgaWYgKHRvcE5vbkZ1bGxSb3dfICsgbnVt
M0NvbHVtblJvd3MgPiBtYXhSb3dzXykgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgZmlsbENvbHVtbnModG9wTm9uRnVsbFJvd18sIG51bTNDb2x1bW5Sb3dzLCAwLCAzKTsK
KworICAgIC8vIFBhY2tzIHRoZSAyIGNvbHVtbiB2YXJpYWJsZXMuCisgICAgaW50IHRvcDJDb2x1
bW5Sb3cgPSB0b3BOb25GdWxsUm93XyArIG51bTNDb2x1bW5Sb3dzOworICAgIGludCB0d29Db2x1
bW5Sb3dzQXZhaWxhYmxlID0gbWF4Um93c18gLSB0b3AyQ29sdW1uUm93OworICAgIGludCByb3dz
QXZhaWxhYmxlSW5Db2x1bW5zMDEgPSB0d29Db2x1bW5Sb3dzQXZhaWxhYmxlOworICAgIGludCBy
b3dzQXZhaWxhYmxlSW5Db2x1bW5zMjMgPSB0d29Db2x1bW5Sb3dzQXZhaWxhYmxlOworICAgIGZv
ciAoOyBpaSA8IHZhcmlhYmxlcy5zaXplKCk7ICsraWkpIHsKKyAgICAgICAgY29uc3QgVFZhcmlh
YmxlSW5mbyYgdmFyaWFibGUgPSB2YXJpYWJsZXNbaWldOworICAgICAgICBpZiAoR2V0TnVtQ29t
cG9uZW50c1BlclJvdyh2YXJpYWJsZS50eXBlKSAhPSAyKSB7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBpbnQgbnVtUm93cyA9IEdldE51bVJvd3ModmFyaWFibGUudHlw
ZSkgKiB2YXJpYWJsZS5zaXplOworICAgICAgICBpZiAobnVtUm93cyA8PSByb3dzQXZhaWxhYmxl
SW5Db2x1bW5zMDEpIHsKKyAgICAgICAgICAgIHJvd3NBdmFpbGFibGVJbkNvbHVtbnMwMSAtPSBu
dW1Sb3dzOworICAgICAgICB9IGVsc2UgaWYgKG51bVJvd3MgPD0gcm93c0F2YWlsYWJsZUluQ29s
dW1uczIzKSB7CisgICAgICAgICAgICByb3dzQXZhaWxhYmxlSW5Db2x1bW5zMjMgLT0gbnVtUm93
czsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGludCBudW1Sb3dzVXNlZEluQ29sdW1uczAxID0KKyAgICAgICAgdHdv
Q29sdW1uUm93c0F2YWlsYWJsZSAtIHJvd3NBdmFpbGFibGVJbkNvbHVtbnMwMTsKKyAgICBpbnQg
bnVtUm93c1VzZWRJbkNvbHVtbnMyMyA9CisgICAgICAgIHR3b0NvbHVtblJvd3NBdmFpbGFibGUg
LSByb3dzQXZhaWxhYmxlSW5Db2x1bW5zMjM7CisgICAgZmlsbENvbHVtbnModG9wMkNvbHVtblJv
dywgbnVtUm93c1VzZWRJbkNvbHVtbnMwMSwgMCwgMik7CisgICAgZmlsbENvbHVtbnMobWF4Um93
c18gLSBudW1Sb3dzVXNlZEluQ29sdW1uczIzLCBudW1Sb3dzVXNlZEluQ29sdW1uczIzLAorICAg
ICAgICAgICAgICAgIDIsIDIpOworCisgICAgLy8gUGFja3MgdGhlIDEgY29sdW1uIHZhcmlhYmxl
cy4KKyAgICBmb3IgKDsgaWkgPCB2YXJpYWJsZXMuc2l6ZSgpOyArK2lpKSB7CisgICAgICAgIGNv
bnN0IFRWYXJpYWJsZUluZm8mIHZhcmlhYmxlID0gdmFyaWFibGVzW2lpXTsKKyAgICAgICAgQVNT
RVJUKDEgPT0gR2V0TnVtQ29tcG9uZW50c1BlclJvdyh2YXJpYWJsZS50eXBlKSk7CisgICAgICAg
IGludCBudW1Sb3dzID0gR2V0TnVtUm93cyh2YXJpYWJsZS50eXBlKSAqIHZhcmlhYmxlLnNpemU7
CisgICAgICAgIGludCBzbWFsbGVzdENvbHVtbiA9IC0xOworICAgICAgICBpbnQgc21hbGxlc3RT
aXplID0gbWF4Um93c18gKyAxOworICAgICAgICBpbnQgdG9wUm93ID0gLTE7CisgICAgICAgIGZv
ciAoaW50IGNvbHVtbiA9IDA7IGNvbHVtbiA8IGtOdW1Db2x1bW5zOyArK2NvbHVtbikgeworICAg
ICAgICAgICAgaW50IHJvdyA9IDA7CisgICAgICAgICAgICBpbnQgc2l6ZSA9IDA7CisgICAgICAg
ICAgICBpZiAoc2VhcmNoQ29sdW1uKGNvbHVtbiwgbnVtUm93cywgJnJvdywgJnNpemUpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHNpemUgPCBzbWFsbGVzdFNpemUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgc21hbGxlc3RTaXplID0gc2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgc21hbGxlc3RD
b2x1bW4gPSBjb2x1bW47CisgICAgICAgICAgICAgICAgICAgIHRvcFJvdyA9IHJvdzsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoc21h
bGxlc3RDb2x1bW4gPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KworICAgICAgICBmaWxsQ29sdW1ucyh0b3BSb3csIG51bVJvd3MsIHNtYWxsZXN0Q29sdW1uLCAx
KTsKKyAgICB9CisKKyAgICBBU1NFUlQodmFyaWFibGVzLnNpemUoKSA9PSBpaSk7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlUGFja2VyLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZVBhY2tlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmZkNjA5MDgyN2NkOGUxOTU5MzhjZTQ1OTVjZjkzNzFlNzRkMTZhNTcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9WYXJpYWJsZVBhY2tlci5oCkBAIC0wLDAgKzEsNDEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
KyNpZm5kZWYgX1ZBUklBQkxFUEFDS0VSX0lOQ0xVREVEXworI2RlZmluZSBfVkFSSUFCTEVQQUNL
RVJfSU5DTFVERURfCisKKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9TaEhhbmRsZS5oIgorCitjbGFzcyBWYXJpYWJsZVBhY2tlciB7CisgcHVibGljOgor
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGFzc2VkIGluIHZhcmlhYmxlcyBwYWNrIGluIG1h
eFZlY3RvcnMgZm9sbG93aW5nCisgICAgLy8gdGhlIHBhY2tpbmcgcnVsZXMgZnJvbSB0aGUgR0xT
TCAxLjAxNyBzcGVjLCBBcHBlbmRpeCBBLCBzZWN0aW9uIDcuCisgICAgYm9vbCBDaGVja1Zhcmlh
Ymxlc1dpdGhpblBhY2tpbmdMaW1pdHMoCisgICAgICAgIGludCBtYXhWZWN0b3JzLAorICAgICAg
ICBjb25zdCBUVmFyaWFibGVJbmZvTGlzdCYgaW5fdmFyaWFibGVzKTsKKworICAgIC8vIEdldHMg
aG93IG1hbnkgY29tcG9uZW50cyBpbiBhIHJvdyBhIGRhdGEgdHlwZSB0YWtlcy4KKyAgICBzdGF0
aWMgaW50IEdldE51bUNvbXBvbmVudHNQZXJSb3coU2hEYXRhVHlwZSB0eXBlKTsKKworICAgIC8v
IEdldHMgaG93IG1hbnkgcm93cyBhIGRhdGEgdHlwZSB0YWtlcy4KKyAgICBzdGF0aWMgaW50IEdl
dE51bVJvd3MoU2hEYXRhVHlwZSB0eXBlKTsKKworIHByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0
IGludCBrTnVtQ29sdW1ucyA9IDQ7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGtDb2x1bW5N
YXNrID0gKDEgPDwga051bUNvbHVtbnMpIC0gMTsKKworICAgIHVuc2lnbmVkIG1ha2VDb2x1bW5G
bGFncyhpbnQgY29sdW1uLCBpbnQgbnVtQ29tcG9uZW50c1BlclJvdyk7CisgICAgdm9pZCBmaWxs
Q29sdW1ucyhpbnQgdG9wUm93LCBpbnQgbnVtUm93cywgaW50IGNvbHVtbiwgaW50IG51bUNvbXBv
bmVudHNQZXJSb3cpOworICAgIGJvb2wgc2VhcmNoQ29sdW1uKGludCBjb2x1bW4sIGludCBudW1S
b3dzLCBpbnQqIGRlc3RSb3csIGludCogZGVzdFNpemUpOworCisgICAgaW50IHRvcE5vbkZ1bGxS
b3dfOworICAgIGludCBib3R0b21Ob25GdWxsUm93XzsKKyAgICBpbnQgbWF4Um93c187CisgICAg
c3RkOjp2ZWN0b3I8dW5zaWduZWQ+IHJvd3NfOworfTsKKworI2VuZGlmIC8vIF9WQVJJQUJMRVBB
Q0tFUl9JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1ZlcnNpb25HTFNMLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZlcnNpb25HTFNMLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
ZDExZjk5ZWI4OWM2YTU1YTA5MTVhZjA4ODMwNzZhZDZkZGU0NzM3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmVyc2lv
bkdMU0wuY3BwCkBAIC0wLDAgKzEsMTQwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9WZXJzaW9uR0xTTC5oIgorCitzdGF0aWMgY29uc3QgaW50
IEdMU0xfVkVSU0lPTl8xMTAgPSAxMTA7CitzdGF0aWMgY29uc3QgaW50IEdMU0xfVkVSU0lPTl8x
MjAgPSAxMjA7CisKKy8vIFdlIG5lZWQgdG8gc2NhbiBmb3IgdGhlIGZvbGxvd2luZzoKKy8vIDEu
ICJpbnZhcmlhbnQiIGtleXdvcmQ6IFRoaXMgY2FuIG9jY3VyIGluIGJvdGggLSB2ZXJ0ZXggYW5k
IGZyYWdtZW50IHNoYWRlcnMKKy8vICAgIGJ1dCBvbmx5IGF0IHRoZSBnbG9iYWwgc2NvcGUuCisv
LyAyLiAiZ2xfUG9pbnRDb29yZCIgYnVpbHQtaW4gdmFyaWFibGU6IFRoaXMgY2FuIG9ubHkgb2Nj
dXIgaW4gZnJhZ21lbnQgc2hhZGVyCisvLyAgICBidXQgaW5zaWRlIGFueSBzY29wZS4KKy8vIDMu
IENhbGwgdG8gYSBtYXRyaXggY29uc3RydWN0b3Igd2l0aCBhbm90aGVyIG1hdHJpeCBhcyBhcmd1
bWVudC4KKy8vICAgIChUaGVzZSBjb25zdHJ1Y3RvcnMgd2VyZSByZXNlcnZlZCBpbiBHTFNMIHZl
cnNpb24gMS4xMC4pCisvLyA0LiBBcnJheXMgYXMgIm91dCIgZnVuY3Rpb24gcGFyYW1ldGVycy4K
Ky8vICAgIEdMU0wgc3BlYyBzZWN0aW9uIDYuMS4xOiAiV2hlbiBjYWxsaW5nIGEgZnVuY3Rpb24s
IGV4cHJlc3Npb25zIHRoYXQgZG8KKy8vICAgIG5vdCBldmFsdWF0ZSB0byBsLXZhbHVlcyBjYW5u
b3QgYmUgcGFzc2VkIHRvIHBhcmFtZXRlcnMgZGVjbGFyZWQgYXMKKy8vICAgIG91dCBvciBpbm91
dC4iCisvLyAgICBHTFNMIDEuMSBzZWN0aW9uIDUuODogIk90aGVyIGJpbmFyeSBvciB1bmFyeSBl
eHByZXNzaW9ucywKKy8vICAgIG5vbi1kZXJlZmVyZW5jZWQgYXJyYXlzLCBmdW5jdGlvbiBuYW1l
cywgc3dpenpsZXMgd2l0aCByZXBlYXRlZCBmaWVsZHMsCisvLyAgICBhbmQgY29uc3RhbnRzIGNh
bm5vdCBiZSBsLXZhbHVlcy4iCisvLyAgICBHTFNMIDEuMiByZWxheGVkIHRoZSByZXN0cmljdGlv
biBvbiBhcnJheXMsIHNlY3Rpb24gNS44OiAiVmFyaWFibGVzIHRoYXQKKy8vICAgIGFyZSBidWls
dC1pbiB0eXBlcywgZW50aXJlIHN0cnVjdHVyZXMgb3IgYXJyYXlzLi4uIGFyZSBhbGwgbC12YWx1
ZXMuIgorLy8KKy8vIFRPRE8oYWxva3ApOiBUaGUgZm9sbG93aW5nIHR3byBjYXNlcyBvZiBpbnZh
cmlhbnQgZGVjYWxhcmF0aW9uIGdldCBsb3N0CisvLyBkdXJpbmcgcGFyc2luZyAtIHRoZXkgZG8g
bm90IGdldCBjYXJyaWVkIG92ZXIgdG8gdGhlIGludGVybWVkaWF0ZSB0cmVlLgorLy8gSGFuZGxl
IHRoZXNlIGNhc2VzOgorLy8gMS4gV2hlbiBhIHByYWdtYSBpcyB1c2VkIHRvIGZvcmNlIGFsbCBv
dXRwdXQgdmFyaWFibGVzIHRvIGJlIGludmFyaWFudDoKKy8vICAgIC0gI3ByYWdtYSBTVERHTCBp
bnZhcmlhbnQoYWxsKQorLy8gMi4gV2hlbiBhIHByZXZpb3VzbHkgZGVjYWxhcmVkIG9yIGJ1aWx0
LWluIHZhcmlhYmxlIGlzIG1hcmtlZCBpbnZhcmlhbnQ6CisvLyAgICAtIGludmFyaWFudCBnbF9Q
b3NpdGlvbjsKKy8vICAgIC0gdmFyeWluZyB2ZWMzIGNvbG9yOyBpbnZhcmlhbnQgY29sb3I7Cisv
LworVFZlcnNpb25HTFNMOjpUVmVyc2lvbkdMU0woU2hTaGFkZXJUeXBlIHR5cGUpCisgICAgOiBt
U2hhZGVyVHlwZSh0eXBlKSwKKyAgICAgIG1WZXJzaW9uKEdMU0xfVkVSU0lPTl8xMTApCit7Cit9
CisKK3ZvaWQgVFZlcnNpb25HTFNMOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQor
eworICAgIGlmIChub2RlLT5nZXRTeW1ib2woKSA9PSAiZ2xfUG9pbnRDb29yZCIpCisgICAgICAg
IHVwZGF0ZVZlcnNpb24oR0xTTF9WRVJTSU9OXzEyMCk7Cit9CisKK3ZvaWQgVFZlcnNpb25HTFNM
Ojp2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qKQoreworfQorCitib29s
IFRWZXJzaW9uR0xTTDo6dmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkqKQoreworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIFRWZXJzaW9uR0xTTDo6dmlzaXRVbmFyeShWaXNpdCwg
VEludGVybVVuYXJ5KikKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUVmVyc2lvbkdM
U0w6OnZpc2l0U2VsZWN0aW9uKFZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKikKK3sKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBUVmVyc2lvbkdMU0w6OnZpc2l0QWdncmVnYXRlKFZpc2l0LCBU
SW50ZXJtQWdncmVnYXRlKiBub2RlKQoreworICAgIGJvb2wgdmlzaXRDaGlsZHJlbiA9IHRydWU7
CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpIHsKKyAgICAgIGNhc2UgRU9wU2VxdWVuY2U6
CisgICAgICAgIC8vIFdlIG5lZWQgdG8gdmlzaXQgc2VxdWVuY2UgY2hpbGRyZW4gdG8gZ2V0IHRv
IGdsb2JhbCBvciBpbm5lciBzY29wZS4KKyAgICAgICAgdmlzaXRDaGlsZHJlbiA9IHRydWU7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BEZWNsYXJhdGlvbjogeworICAgICAgICBjb25z
dCBUSW50ZXJtU2VxdWVuY2UmIHNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAg
ICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBzZXF1ZW5jZS5mcm9udCgpLT5nZXRBc1R5cGVkKCkt
PmdldFF1YWxpZmllcigpOworICAgICAgICBpZiAoKHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRW
YXJ5aW5nSW4pIHx8CisgICAgICAgICAgICAocXVhbGlmaWVyID09IEV2cUludmFyaWFudFZhcnlp
bmdPdXQpKSB7CisgICAgICAgICAgICB1cGRhdGVWZXJzaW9uKEdMU0xfVkVSU0lPTl8xMjApOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBFT3BQYXJhbWV0
ZXJzOiB7CisgICAgICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgcGFyYW1zID0gbm9kZS0+Z2V0
U2VxdWVuY2UoKTsKKyAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSBwYXJhbXMuYmVnaW4oKTsKKyAgICAgICAgICAgICBpdGVyICE9IHBhcmFtcy5lbmQo
KTsgKytpdGVyKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUSW50ZXJtVHlwZWQqIHBh
cmFtID0gKCppdGVyKS0+Z2V0QXNUeXBlZCgpOworICAgICAgICAgICAgaWYgKHBhcmFtLT5pc0Fy
cmF5KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVFF1YWxpZmllciBxdWFsaWZp
ZXIgPSBwYXJhbS0+Z2V0UXVhbGlmaWVyKCk7CisgICAgICAgICAgICAgICAgaWYgKChxdWFsaWZp
ZXIgPT0gRXZxT3V0KSB8fCAocXVhbGlmaWVyID09ICBFdnFJbk91dCkpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICB1cGRhdGVWZXJzaW9uKEdMU0xfVkVSU0lPTl8xMjAp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gRnVsbHkgcHJvY2Vzc2VkLiBObyBuZWVkIHRv
IHZpc2l0IGNoaWxkcmVuLgorICAgICAgICB2aXNpdENoaWxkcmVuID0gZmFsc2U7CisgICAgICAg
IGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQyOgorICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RNYXQzOgorICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQ0OiB7CisgICAg
ICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgp
OworICAgICAgICBpZiAoc2VxdWVuY2Uuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgICBUSW50ZXJt
VHlwZWQqIHR5cGVkID0gc2VxdWVuY2UuZnJvbnQoKS0+Z2V0QXNUeXBlZCgpOworICAgICAgICAg
IGlmICh0eXBlZCAmJiB0eXBlZC0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgdXBkYXRlVmVy
c2lvbihHTFNMX1ZFUlNJT05fMTIwKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgICB9CisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAgIHJl
dHVybiB2aXNpdENoaWxkcmVuOworfQorCitib29sIFRWZXJzaW9uR0xTTDo6dmlzaXRMb29wKFZp
c2l0LCBUSW50ZXJtTG9vcCopCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVFZlcnNp
b25HTFNMOjp2aXNpdEJyYW5jaChWaXNpdCwgVEludGVybUJyYW5jaCopCit7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgVFZlcnNpb25HTFNMOjp1cGRhdGVWZXJzaW9uKGludCB2ZXJzaW9u
KQoreworICAgIG1WZXJzaW9uID0gc3RkOjptYXgodmVyc2lvbiwgbVZlcnNpb24pOworfQorCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9WZXJzaW9uR0xTTC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVmVyc2lvbkdMU0wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMzEwMDY2MTcxMTQ1N2ZiNjk4ZDAx
NDE2MTk5YTZkZjJmMGFhZjBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmVyc2lvbkdMU0wuaApAQCAtMCwwICsxLDU2
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1ZFUlNJT05HTFNMX0hf
CisjZGVmaW5lIENPTVBJTEVSX1ZFUlNJT05HTFNMX0hfCisKKyNpbmNsdWRlICJHTFNMQU5HL1No
YWRlckxhbmcuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5o
IgorCisvLyBUcmF2ZXJzZXMgdGhlIGludGVybWVkaWF0ZSB0cmVlIHRvIHJldHVybiB0aGUgbWlu
aW11bSBHTFNMIHZlcnNpb24KKy8vIHJlcXVpcmVkIHRvIGxlZ2FsbHkgYWNjZXNzIGFsbCBidWls
dC1pbiBmZWF0dXJlcyB1c2VkIGluIHRoZSBzaGFkZXIuCisvLyBHTFNMIDEuMSB3aGljaCBpcyBt
YW5kYXRlZCBieSBPcGVuR0wgMi4wIHByb3ZpZGVzOgorLy8gICAtICN2ZXJzaW9uIGFuZCAjZXh0
ZW5zaW9uIHRvIGRlY2xhcmUgdmVyc2lvbiBhbmQgZXh0ZW5zaW9ucy4KKy8vICAgLSBidWlsdC1p
biBmdW5jdGlvbnMgcmVmcmFjdCwgZXhwLCBhbmQgbG9nLgorLy8gICAtIHVwZGF0ZWQgc3RlcCgp
IHRvIGNvbXBhcmUgeCA8IGVkZ2UgaW5zdGVhZCBvZiB4IDw9IGVkZ2UuCisvLyBHTFNMIDEuMiB3
aGljaCBpcyBtYW5kYXRlZCBieSBPcGVuR0wgMi4xIHByb3ZpZGVzOgorLy8gICAtIG1hbnkgY2hh
bmdlcyB0byByZWR1Y2UgZGlmZmVyZW5jZXMgd2hlbiBjb21wYXJlZCB0byB0aGUgRVMgc3BlY2lm
aWNhdGlvbi4KKy8vICAgLSBpbnZhcmlhbnQga2V5d29yZCBhbmQgaXRzIHN1cHBvcnQuCisvLyAg
IC0gYysrIHN0eWxlIG5hbWUgaGlkaW5nIHJ1bGVzLgorLy8gICAtIGJ1aWx0LWluIHZhcmlhYmxl
IGdsX1BvaW50Q29vcmQgZm9yIGZyYWdtZW50IHNoYWRlcnMuCisvLyAgIC0gbWF0cml4IGNvbnN0
cnVjdG9ycyB0YWtpbmcgbWF0cml4IGFzIGFyZ3VtZW50LgorLy8gICAtIGFycmF5IGFzICJvdXQi
IGZ1bmN0aW9uIHBhcmFtZXRlcnMKKy8vCitjbGFzcyBUVmVyc2lvbkdMU0wgOiBwdWJsaWMgVElu
dGVybVRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgVFZlcnNpb25HTFNMKFNoU2hhZGVyVHlwZSB0
eXBlKTsKKworICAgIC8vIFJldHVybnMgMTIwIGlmIHRoZSBmb2xsb3dpbmcgaXMgdXNlZCB0aGUg
c2hhZGVyOgorICAgIC8vIC0gImludmFyaWFudCIsCisgICAgLy8gLSAiZ2xfUG9pbnRDb29yZCIs
CisgICAgLy8gLSBtYXRyaXgvbWF0cml4IGNvbnN0cnVjdG9ycworICAgIC8vIC0gYXJyYXkgIm91
dCIgcGFyYW1ldGVycworICAgIC8vIEVsc2UgMTEwIGlzIHJldHVybmVkLgorICAgIGludCBnZXRW
ZXJzaW9uKCkgeyByZXR1cm4gbVZlcnNpb247IH0KKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5
bWJvbChUSW50ZXJtU3ltYm9sKik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0Q29uc3RhbnRVbmlv
bihUSW50ZXJtQ29uc3RhbnRVbmlvbiopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShW
aXNpdCwgVEludGVybUJpbmFyeSopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0
LCBUSW50ZXJtVW5hcnkqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQs
IFRJbnRlcm1TZWxlY3Rpb24qKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlz
aXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRMb29wKFZpc2l0
LCBUSW50ZXJtTG9vcCopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCwgVElu
dGVybUJyYW5jaCopOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCB1cGRhdGVWZXJzaW9uKGludCB2
ZXJzaW9uKTsKKworcHJpdmF0ZToKKyAgICBTaFNoYWRlclR5cGUgbVNoYWRlclR5cGU7CisgICAg
aW50IG1WZXJzaW9uOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9WRVJTSU9OR0xTTF9IXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvY29tcGlsZXJkZWJ1Zy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9jb21waWxlcmRlYnVnLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMGNiZTQzYjhkNTQ4
YjhlMjYxODU4YTc5NzRmMjg0MzYzNGNkODRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvY29tcGlsZXJkZWJ1Zy5jcHAK
QEAgLTAsMCArMSwzNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gZGVidWcuY3BwOiBEZWJ1
Z2dpbmcgdXRpbGl0aWVzLgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9jb21waWxl
cmRlYnVnLmgiCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaCIKKworI2lmZGVmIFRS
QUNFX0VOQUJMRUQKK3N0YXRpYyBjb25zdCBpbnQga1RyYWNlQnVmZmVyTGVuID0gMTAyNDsKKwor
ZXh0ZXJuICJDIiB7Cit2b2lkIFRyYWNlKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSB7CisgICAg
aWYgKCFmb3JtYXQpIHJldHVybjsKKworICAgIFRQYXJzZUNvbnRleHQqIHBhcnNlQ29udGV4dCA9
IEdldEdsb2JhbFBhcnNlQ29udGV4dCgpOworICAgIGlmIChwYXJzZUNvbnRleHQpIHsKKyAgICAg
ICAgY2hhciBidWZba1RyYWNlQnVmZmVyTGVuXTsKKyAgICAgICAgdmFfbGlzdCBhcmdzOworICAg
ICAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOworICAgICAgICB2c25wcmludGYoYnVmLCBrVHJh
Y2VCdWZmZXJMZW4sIGZvcm1hdCwgYXJncyk7CisgICAgICAgIHZhX2VuZChhcmdzKTsKKworICAg
ICAgICBwYXJzZUNvbnRleHQtPnRyYWNlKGJ1Zik7CisgICAgfQorfQorfSAgLy8gZXh0ZXJuICJD
IgorI2VuZGlmICAvLyBUUkFDRV9FTkFCTEVECisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2NvbXBpbGVyZGVidWcuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2NvbXBpbGVyZGVidWcu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi43YTM3MTUxNmFmMGZlZWM2MWY0NmVlMTE4MjFiYTI4ZDM1MWRkNDllCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvY29tcGlsZXJkZWJ1Zy5oCkBAIC0wLDAgKzEsNTMgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKy8vIGRlYnVnLmg6IERlYnVnZ2luZyB1dGlsaXRpZXMuCisKKyNpZm5kZWYgQ09NUElM
RVJfREVCVUdfSF8KKyNkZWZpbmUgQ09NUElMRVJfREVCVUdfSF8KKworI2luY2x1ZGUgPGFzc2Vy
dC5oPgorCisjaWZkZWYgX0RFQlVHCisjZGVmaW5lIFRSQUNFX0VOQUJMRUQgIC8vIGRlZmluZSB0
byBlbmFibGUgZGVidWcgbWVzc2FnZSB0cmFjaW5nCisjZW5kaWYgIC8vIF9ERUJVRworCisvLyBP
dXRwdXRzIHRleHQgdG8gdGhlIGRlYnVnIGxvZworI2lmZGVmIFRSQUNFX0VOQUJMRUQKKworI2lm
ZGVmICBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgIC8vIF9fY3BsdXNwbHVzCit2
b2lkIFRyYWNlKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKTsKKyNpZmRlZiAgX19jcGx1c3BsdXMK
K30KKyNlbmRpZiAgLy8gX19jcGx1c3BsdXMKKworI2Vsc2UgICAvLyBUUkFDRV9FTkFCTEVECisK
KyNkZWZpbmUgVHJhY2UoLi4uKSAoKHZvaWQpMCkKKworI2VuZGlmICAvLyBUUkFDRV9FTkFCTEVE
CisKKy8vIEEgbWFjcm8gYXNzZXJ0aW5nIGEgY29uZGl0aW9uIGFuZCBvdXRwdXR0aW5nIGZhaWx1
cmVzIHRvIHRoZSBkZWJ1ZyBsb2cKKyNkZWZpbmUgQVNTRVJUKGV4cHJlc3Npb24pIGRvIHsgXAor
ICAgIGlmKCEoZXhwcmVzc2lvbikpIFwKKyAgICAgICAgVHJhY2UoIkFzc2VydCBmYWlsZWQ6ICVz
KCVkKTogIiNleHByZXNzaW9uIlxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7IFwKKyAgICBh
c3NlcnQoZXhwcmVzc2lvbik7IFwKK30gd2hpbGUoMCkKKworI2RlZmluZSBVTklNUExFTUVOVEVE
KCkgZG8geyBcCisgICAgVHJhY2UoIlVuaW1wbGVtZW50ZWQgaW52b2tlZDogJXMoJWQpXG4iLCBf
X0ZVTkNUSU9OX18sIF9fTElORV9fKTsgXAorICAgIGFzc2VydChmYWxzZSk7IFwKK30gd2hpbGUo
MCkKKworI2RlZmluZSBVTlJFQUNIQUJMRSgpIGRvIHsgXAorICAgIFRyYWNlKCJVbnJlYWNoYWJs
ZSByZWFjaGVkOiAlcyglZClcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOyBcCisgICAgYXNz
ZXJ0KGZhbHNlKTsgXAorfSB3aGlsZSgwKQorCisjZW5kaWYgICAvLyBDT01QSUxFUl9ERUJVR19I
XworCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xOWRkZjVjNDM5MjU4ODNjNzk0YzcxNGU3OTk4NmUyM2FiYjUxNDdhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNwcApAQCAtMCwwICsxLDk3IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MTgpCisKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5o
IgorCitURGVwZW5kZW5jeUdyYXBoOjpURGVwZW5kZW5jeUdyYXBoKFRJbnRlcm1Ob2RlKiBpbnRl
cm1Ob2RlKQoreworICAgIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpidWlsZChpbnRlcm1Ob2Rl
LCB0aGlzKTsKK30KKworVERlcGVuZGVuY3lHcmFwaDo6flREZXBlbmRlbmN5R3JhcGgoKQorewor
ICAgIGZvciAoVEdyYXBoTm9kZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1BbGxOb2Rl
cy5iZWdpbigpOyBpdGVyICE9IG1BbGxOb2Rlcy5lbmQoKTsgKytpdGVyKQorICAgIHsKKyAgICAg
ICAgVEdyYXBoTm9kZSogbm9kZSA9ICppdGVyOworICAgICAgICBkZWxldGUgbm9kZTsKKyAgICB9
Cit9CisKK1RHcmFwaEFyZ3VtZW50KiBURGVwZW5kZW5jeUdyYXBoOjpjcmVhdGVBcmd1bWVudChU
SW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50TnVtYmVyKQoreworICAg
IFRHcmFwaEFyZ3VtZW50KiBhcmd1bWVudCA9IG5ldyBUR3JhcGhBcmd1bWVudChpbnRlcm1GdW5j
dGlvbkNhbGwsIGFyZ3VtZW50TnVtYmVyKTsKKyAgICBtQWxsTm9kZXMucHVzaF9iYWNrKGFyZ3Vt
ZW50KTsKKyAgICByZXR1cm4gYXJndW1lbnQ7Cit9CisKK1RHcmFwaEZ1bmN0aW9uQ2FsbCogVERl
cGVuZGVuY3lHcmFwaDo6Y3JlYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVy
bUZ1bmN0aW9uQ2FsbCkKK3sKKyAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCA9
IG5ldyBUR3JhcGhGdW5jdGlvbkNhbGwoaW50ZXJtRnVuY3Rpb25DYWxsKTsKKyAgICBtQWxsTm9k
ZXMucHVzaF9iYWNrKGZ1bmN0aW9uQ2FsbCk7CisgICAgaWYgKGZ1bmN0aW9uQ2FsbC0+Z2V0SW50
ZXJtRnVuY3Rpb25DYWxsKCktPmlzVXNlckRlZmluZWQoKSkKKyAgICAgICAgbVVzZXJEZWZpbmVk
RnVuY3Rpb25DYWxscy5wdXNoX2JhY2soZnVuY3Rpb25DYWxsKTsKKyAgICByZXR1cm4gZnVuY3Rp
b25DYWxsOworfQorCitUR3JhcGhTeW1ib2wqIFREZXBlbmRlbmN5R3JhcGg6OmdldE9yQ3JlYXRl
U3ltYm9sKFRJbnRlcm1TeW1ib2wqIGludGVybVN5bWJvbCkKK3sKKyAgICBUU3ltYm9sSWRNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtU3ltYm9sSWRNYXAuZmluZChpbnRlcm1TeW1ib2wtPmdl
dElkKCkpOworCisgICAgVEdyYXBoU3ltYm9sKiBzeW1ib2wgPSBOVUxMOworCisgICAgaWYgKGl0
ZXIgIT0gbVN5bWJvbElkTWFwLmVuZCgpKSB7CisgICAgICAgIFRTeW1ib2xJZFBhaXIgcGFpciA9
ICppdGVyOworICAgICAgICBzeW1ib2wgPSBwYWlyLnNlY29uZDsKKyAgICB9IGVsc2UgeworICAg
ICAgICBzeW1ib2wgPSBuZXcgVEdyYXBoU3ltYm9sKGludGVybVN5bWJvbCk7CisgICAgICAgIG1B
bGxOb2Rlcy5wdXNoX2JhY2soc3ltYm9sKTsKKworICAgICAgICBUU3ltYm9sSWRQYWlyIHBhaXIo
aW50ZXJtU3ltYm9sLT5nZXRJZCgpLCBzeW1ib2wpOworICAgICAgICBtU3ltYm9sSWRNYXAuaW5z
ZXJ0KHBhaXIpOworCisgICAgICAgIC8vIFdlIHNhdmUgYWxsIHNhbXBsZXIgc3ltYm9scyBpbiBh
IGNvbGxlY3Rpb24sIHNvIHdlIGNhbiBzdGFydCBncmFwaCB0cmF2ZXJzYWxzIGZyb20gdGhlbSBx
dWlja2x5LgorICAgICAgICBpZiAoSXNTYW1wbGVyKGludGVybVN5bWJvbC0+Z2V0QmFzaWNUeXBl
KCkpKQorICAgICAgICAgICAgbVNhbXBsZXJTeW1ib2xzLnB1c2hfYmFjayhzeW1ib2wpOworICAg
IH0KKworICAgIHJldHVybiBzeW1ib2w7Cit9CisKK1RHcmFwaFNlbGVjdGlvbiogVERlcGVuZGVu
Y3lHcmFwaDo6Y3JlYXRlU2VsZWN0aW9uKFRJbnRlcm1TZWxlY3Rpb24qIGludGVybVNlbGVjdGlv
bikKK3sKKyAgICBUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbiA9IG5ldyBUR3JhcGhTZWxlY3Rp
b24oaW50ZXJtU2VsZWN0aW9uKTsKKyAgICBtQWxsTm9kZXMucHVzaF9iYWNrKHNlbGVjdGlvbik7
CisgICAgcmV0dXJuIHNlbGVjdGlvbjsKK30KKworVEdyYXBoTG9vcCogVERlcGVuZGVuY3lHcmFw
aDo6Y3JlYXRlTG9vcChUSW50ZXJtTG9vcCogaW50ZXJtTG9vcCkKK3sKKyAgICBUR3JhcGhMb29w
KiBsb29wID0gbmV3IFRHcmFwaExvb3AoaW50ZXJtTG9vcCk7CisgICAgbUFsbE5vZGVzLnB1c2hf
YmFjayhsb29wKTsKKyAgICByZXR1cm4gbG9vcDsKK30KKworVEdyYXBoTG9naWNhbE9wKiBURGVw
ZW5kZW5jeUdyYXBoOjpjcmVhdGVMb2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJtTG9naWNh
bE9wKQoreworICAgIFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wID0gbmV3IFRHcmFwaExvZ2lj
YWxPcChpbnRlcm1Mb2dpY2FsT3ApOworICAgIG1BbGxOb2Rlcy5wdXNoX2JhY2sobG9naWNhbE9w
KTsKKyAgICByZXR1cm4gbG9naWNhbE9wOworfQorCitjb25zdCBjaGFyKiBUR3JhcGhMb2dpY2Fs
T3A6OmdldE9wU3RyaW5nKCkgY29uc3QKK3sKKyAgICBjb25zdCBjaGFyKiBvcFN0cmluZyA9IE5V
TEw7CisgICAgc3dpdGNoIChnZXRJbnRlcm1Mb2dpY2FsT3AoKS0+Z2V0T3AoKSkgeworICAgICAg
ICBjYXNlIEVPcExvZ2ljYWxBbmQ6IG9wU3RyaW5nID0gImFuZCI7IGJyZWFrOworICAgICAgICBj
YXNlIEVPcExvZ2ljYWxPcjogb3BTdHJpbmcgPSAib3IiOyBicmVhazsKKyAgICAgICAgZGVmYXVs
dDogb3BTdHJpbmcgPSAidW5rbm93biI7IGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gb3BTdHJp
bmc7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjVlYTFjYmI4MzdkY2I0NGRmZjFiMTIyNTFmZTg4ZmMwZjNkOGEwNTYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaApAQCAtMCwwICsxLDIxMiBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9I
CisjZGVmaW5lIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfSAorCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKworI2luY2x1ZGUgPHNldD4K
KyNpbmNsdWRlIDxzdGFjaz4KKworY2xhc3MgVEdyYXBoTm9kZTsKK2NsYXNzIFRHcmFwaFBhcmVu
dE5vZGU7CitjbGFzcyBUR3JhcGhBcmd1bWVudDsKK2NsYXNzIFRHcmFwaEZ1bmN0aW9uQ2FsbDsK
K2NsYXNzIFRHcmFwaFN5bWJvbDsKK2NsYXNzIFRHcmFwaFNlbGVjdGlvbjsKK2NsYXNzIFRHcmFw
aExvb3A7CitjbGFzcyBUR3JhcGhMb2dpY2FsT3A7CitjbGFzcyBURGVwZW5kZW5jeUdyYXBoVHJh
dmVyc2VyOworY2xhc3MgVERlcGVuZGVuY3lHcmFwaE91dHB1dDsKKwordHlwZWRlZiBzdGQ6OnNl
dDxUR3JhcGhOb2RlKj4gVEdyYXBoTm9kZVNldDsKK3R5cGVkZWYgc3RkOjp2ZWN0b3I8VEdyYXBo
Tm9kZSo+IFRHcmFwaE5vZGVWZWN0b3I7Cit0eXBlZGVmIHN0ZDo6dmVjdG9yPFRHcmFwaFN5bWJv
bCo+IFRHcmFwaFN5bWJvbFZlY3RvcjsKK3R5cGVkZWYgc3RkOjp2ZWN0b3I8VEdyYXBoRnVuY3Rp
b25DYWxsKj4gVEZ1bmN0aW9uQ2FsbFZlY3RvcjsKKworLy8KKy8vIEJhc2UgY2xhc3MgZm9yIGFs
bCBkZXBlbmRlbmN5IGdyYXBoIG5vZGVzLgorLy8KK2NsYXNzIFRHcmFwaE5vZGUgeworcHVibGlj
OgorICAgIFRHcmFwaE5vZGUoVEludGVybU5vZGUqIG5vZGUpIDogaW50ZXJtTm9kZShub2RlKSB7
fQorICAgIHZpcnR1YWwgflRHcmFwaE5vZGUoKSB7fQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJz
ZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Citwcm90ZWN0ZWQ6
CisgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7Cit9OworCisvLworLy8gQmFzZSBjbGFzcyBm
b3IgZGVwZW5kZW5jeSBncmFwaCBub2RlcyB0aGF0IG1heSBoYXZlIGNoaWxkcmVuLgorLy8KK2Ns
YXNzIFRHcmFwaFBhcmVudE5vZGUgOiBwdWJsaWMgVEdyYXBoTm9kZSB7CitwdWJsaWM6CisgICAg
VEdyYXBoUGFyZW50Tm9kZShUSW50ZXJtTm9kZSogbm9kZSkgOiBUR3JhcGhOb2RlKG5vZGUpIHt9
CisgICAgdmlydHVhbCB+VEdyYXBoUGFyZW50Tm9kZSgpIHt9CisgICAgdm9pZCBhZGREZXBlbmRl
bnROb2RlKFRHcmFwaE5vZGUqIG5vZGUpIHsgaWYgKG5vZGUgIT0gdGhpcykgbURlcGVuZGVudE5v
ZGVzLmluc2VydChub2RlKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Citwcml2YXRlOgorICAgIFRHcmFwaE5v
ZGVTZXQgbURlcGVuZGVudE5vZGVzOworfTsKKworLy8KKy8vIEhhbmRsZSBmdW5jdGlvbiBjYWxs
IGFyZ3VtZW50cy4KKy8vCitjbGFzcyBUR3JhcGhBcmd1bWVudCA6IHB1YmxpYyBUR3JhcGhQYXJl
bnROb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhBcmd1bWVudChUSW50ZXJtQWdncmVnYXRlKiBp
bnRlcm1GdW5jdGlvbkNhbGwsIGludCBhcmd1bWVudE51bWJlcikKKyAgICAgICAgOiBUR3JhcGhQ
YXJlbnROb2RlKGludGVybUZ1bmN0aW9uQ2FsbCkKKyAgICAgICAgLCBtQXJndW1lbnROdW1iZXIo
YXJndW1lbnROdW1iZXIpIHt9CisgICAgdmlydHVhbCB+VEdyYXBoQXJndW1lbnQoKSB7fQorICAg
IGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUqIGdldEludGVybUZ1bmN0aW9uQ2FsbCgpIGNvbnN0IHsg
cmV0dXJuIGludGVybU5vZGUtPmdldEFzQWdncmVnYXRlKCk7IH0KKyAgICBpbnQgZ2V0QXJndW1l
bnROdW1iZXIoKSBjb25zdCB7IHJldHVybiBtQXJndW1lbnROdW1iZXI7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIp
OworcHJpdmF0ZToKKyAgICBpbnQgbUFyZ3VtZW50TnVtYmVyOworfTsKKworLy8KKy8vIEhhbmRs
ZSBmdW5jdGlvbiBjYWxscy4KKy8vCitjbGFzcyBUR3JhcGhGdW5jdGlvbkNhbGwgOiBwdWJsaWMg
VEdyYXBoUGFyZW50Tm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoRnVuY3Rpb25DYWxsKFRJbnRl
cm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCkKKyAgICAgICAgOiBUR3JhcGhQYXJlbnRO
b2RlKGludGVybUZ1bmN0aW9uQ2FsbCkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhGdW5jdGlvbkNh
bGwoKSB7fQorICAgIGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUqIGdldEludGVybUZ1bmN0aW9uQ2Fs
bCgpIGNvbnN0IHsgcmV0dXJuIGludGVybU5vZGUtPmdldEFzQWdncmVnYXRlKCk7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2
ZXJzZXIpOworfTsKKworLy8KKy8vIEhhbmRsZSBzeW1ib2xzLgorLy8KK2NsYXNzIFRHcmFwaFN5
bWJvbCA6IHB1YmxpYyBUR3JhcGhQYXJlbnROb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhTeW1i
b2woVEludGVybVN5bWJvbCogaW50ZXJtU3ltYm9sKSA6IFRHcmFwaFBhcmVudE5vZGUoaW50ZXJt
U3ltYm9sKSB7fQorICAgIHZpcnR1YWwgflRHcmFwaFN5bWJvbCgpIHt9CisgICAgY29uc3QgVElu
dGVybVN5bWJvbCogZ2V0SW50ZXJtU3ltYm9sKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+
Z2V0QXNTeW1ib2xOb2RlKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVu
Y3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOworfTsKKworLy8KKy8vIEhhbmRsZSBp
ZiBzdGF0ZW1lbnRzIGFuZCB0ZXJuYXJ5IG9wZXJhdG9ycy4KKy8vCitjbGFzcyBUR3JhcGhTZWxl
Y3Rpb24gOiBwdWJsaWMgVEdyYXBoTm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoU2VsZWN0aW9u
KFRJbnRlcm1TZWxlY3Rpb24qIGludGVybVNlbGVjdGlvbikgOiBUR3JhcGhOb2RlKGludGVybVNl
bGVjdGlvbikge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhTZWxlY3Rpb24oKSB7fQorICAgIGNvbnN0
IFRJbnRlcm1TZWxlY3Rpb24qIGdldEludGVybVNlbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGlu
dGVybU5vZGUtPmdldEFzU2VsZWN0aW9uTm9kZSgpOyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZl
cnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK307CisKKy8v
CisvLyBIYW5kbGUgZm9yLCBkby13aGlsZSwgYW5kIHdoaWxlIGxvb3BzLgorLy8KK2NsYXNzIFRH
cmFwaExvb3AgOiBwdWJsaWMgVEdyYXBoTm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoTG9vcChU
SW50ZXJtTG9vcCogaW50ZXJtTG9vcCkgOiBUR3JhcGhOb2RlKGludGVybUxvb3ApIHt9CisgICAg
dmlydHVhbCB+VEdyYXBoTG9vcCgpIHt9CisgICAgY29uc3QgVEludGVybUxvb3AqIGdldEludGVy
bUxvb3AoKSBjb25zdCB7IHJldHVybiBpbnRlcm1Ob2RlLT5nZXRBc0xvb3BOb2RlKCk7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhU
cmF2ZXJzZXIpOworfTsKKworLy8KKy8vIEhhbmRsZSBsb2dpY2FsIGFuZCwgb3IuCisvLworY2xh
c3MgVEdyYXBoTG9naWNhbE9wIDogcHVibGljIFRHcmFwaE5vZGUgeworcHVibGljOgorICAgIFRH
cmFwaExvZ2ljYWxPcChUSW50ZXJtQmluYXJ5KiBpbnRlcm1Mb2dpY2FsT3ApIDogVEdyYXBoTm9k
ZShpbnRlcm1Mb2dpY2FsT3ApIHt9CisgICAgdmlydHVhbCB+VEdyYXBoTG9naWNhbE9wKCkge30K
KyAgICBjb25zdCBUSW50ZXJtQmluYXJ5KiBnZXRJbnRlcm1Mb2dpY2FsT3AoKSBjb25zdCB7IHJl
dHVybiBpbnRlcm1Ob2RlLT5nZXRBc0JpbmFyeU5vZGUoKTsgfQorICAgIGNvbnN0IGNoYXIqIGdl
dE9wU3RyaW5nKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK307CisKKy8vCisvLyBBIGRlcGVuZGVu
Y3kgZ3JhcGggb2Ygc3ltYm9scywgZnVuY3Rpb24gY2FsbHMsIGNvbmRpdGlvbnMgZXRjLgorLy8K
Ky8vIFRoaXMgY2xhc3MgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIHRvIHRoZSBlbnRyeSBwb2ludHMg
b2YgdGhlIGRlcGVuZGVuY3kgZ3JhcGguCisvLworLy8gRGVwZW5kZW5jeSBncmFwaCBub2RlcyBz
aG91bGQgYmUgY3JlYXRlZCBieSB1c2luZyBvbmUgb2YgdGhlIHByb3ZpZGVkICJjcmVhdGUuLi4i
IG1ldGhvZHMuCisvLyBUaGlzIGNsYXNzIChhbmQgbm9ib2R5IGVsc2UpIG1hbmFnZXMgdGhlIG1l
bW9yeSBvZiB0aGUgY3JlYXRlZCBub2Rlcy4KKy8vIE5vZGVzIG1heSBub3QgYmUgcmVtb3ZlZCBh
ZnRlciBiZWluZyBhZGRlZCwgc28gYWxsIGNyZWF0ZWQgbm9kZXMgd2lsbCBleGlzdCB3aGlsZSB0
aGUKKy8vIFREZXBlbmRlbmN5R3JhcGggaW5zdGFuY2UgZXhpc3RzLgorLy8KK2NsYXNzIFREZXBl
bmRlbmN5R3JhcGggeworcHVibGljOgorICAgIFREZXBlbmRlbmN5R3JhcGgoVEludGVybU5vZGUq
IGludGVybU5vZGUpOworICAgIH5URGVwZW5kZW5jeUdyYXBoKCk7CisgICAgVEdyYXBoTm9kZVZl
Y3Rvcjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtQWxsTm9kZXMuYmVn
aW4oKTsgfQorICAgIFRHcmFwaE5vZGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0
IHsgcmV0dXJuIG1BbGxOb2Rlcy5lbmQoKTsgfQorCisgICAgVEdyYXBoU3ltYm9sVmVjdG9yOjpj
b25zdF9pdGVyYXRvciBiZWdpblNhbXBsZXJTeW1ib2xzKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtU2FtcGxlclN5bWJvbHMuYmVnaW4oKTsKKyAgICB9CisKKyAgICBUR3JhcGhTeW1i
b2xWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZFNhbXBsZXJTeW1ib2xzKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtU2FtcGxlclN5bWJvbHMuZW5kKCk7CisgICAgfQorCisgICAgVEZ1
bmN0aW9uQ2FsbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgYmVnaW5Vc2VyRGVmaW5lZEZ1bmN0aW9u
Q2FsbHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1Vc2VyRGVmaW5lZEZ1bmN0aW9u
Q2FsbHMuYmVnaW4oKTsKKyAgICB9CisKKyAgICBURnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9p
dGVyYXRvciBlbmRVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMuZW5kKCk7CisgICAgfQorCisgICAg
VEdyYXBoQXJndW1lbnQqIGNyZWF0ZUFyZ3VtZW50KFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1
bmN0aW9uQ2FsbCwgaW50IGFyZ3VtZW50TnVtYmVyKTsKKyAgICBUR3JhcGhGdW5jdGlvbkNhbGwq
IGNyZWF0ZUZ1bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwp
OworICAgIFRHcmFwaFN5bWJvbCogZ2V0T3JDcmVhdGVTeW1ib2woVEludGVybVN5bWJvbCogaW50
ZXJtU3ltYm9sKTsKKyAgICBUR3JhcGhTZWxlY3Rpb24qIGNyZWF0ZVNlbGVjdGlvbihUSW50ZXJt
U2VsZWN0aW9uKiBpbnRlcm1TZWxlY3Rpb24pOworICAgIFRHcmFwaExvb3AqIGNyZWF0ZUxvb3Ao
VEludGVybUxvb3AqIGludGVybUxvb3ApOworICAgIFRHcmFwaExvZ2ljYWxPcCogY3JlYXRlTG9n
aWNhbE9wKFRJbnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxPcCk7Citwcml2YXRlOgorICAgIHR5
cGVkZWYgVE1hcDxpbnQsIFRHcmFwaFN5bWJvbCo+IFRTeW1ib2xJZE1hcDsKKyAgICB0eXBlZGVm
IHN0ZDo6cGFpcjxpbnQsIFRHcmFwaFN5bWJvbCo+IFRTeW1ib2xJZFBhaXI7CisKKyAgICBUR3Jh
cGhOb2RlVmVjdG9yIG1BbGxOb2RlczsKKyAgICBUR3JhcGhTeW1ib2xWZWN0b3IgbVNhbXBsZXJT
eW1ib2xzOworICAgIFRGdW5jdGlvbkNhbGxWZWN0b3IgbVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxs
czsKKyAgICBUU3ltYm9sSWRNYXAgbVN5bWJvbElkTWFwOworfTsKKworLy8KKy8vIEZvciB0cmF2
ZXJzaW5nIHRoZSBkZXBlbmRlbmN5IGdyYXBoLiBVc2VycyBzaG91bGQgZGVyaXZlIGZyb20gdGhp
cywKKy8vIHB1dCB0aGVpciB0cmF2ZXJzYWwgc3BlY2lmaWMgZGF0YSBpbiBpdCwgYW5kIHRoZW4g
cGFzcyBpdCB0byBhCisvLyB0cmF2ZXJzZSBtZXRob2QuCisvLworLy8gV2hlbiB1c2luZyB0aGlz
LCBqdXN0IGZpbGwgaW4gdGhlIG1ldGhvZHMgZm9yIG5vZGVzIHlvdSB3YW50IHZpc2l0ZWQuCisv
LworY2xhc3MgVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgVERlcGVu
ZGVuY3lHcmFwaFRyYXZlcnNlcigpIDogbURlcHRoKDApIHt9CisKKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXRTeW1ib2woVEdyYXBoU3ltYm9sKiBzeW1ib2wpIHt9OworICAgIHZpcnR1YWwgdm9pZCB2
aXNpdEFyZ3VtZW50KFRHcmFwaEFyZ3VtZW50KiBzZWxlY3Rpb24pIHt9OworICAgIHZpcnR1YWwg
dm9pZCB2aXNpdEZ1bmN0aW9uQ2FsbChUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCkg
e307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2Vs
ZWN0aW9uKSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3Ap
IHt9OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxv
Z2ljYWxPcCkge307CisKKyAgICBpbnQgZ2V0RGVwdGgoKSBjb25zdCB7IHJldHVybiBtRGVwdGg7
IH0KKyAgICB2b2lkIGluY3JlbWVudERlcHRoKCkgeyArK21EZXB0aDsgfQorICAgIHZvaWQgZGVj
cmVtZW50RGVwdGgoKSB7IC0tbURlcHRoOyB9CisKKyAgICB2b2lkIGNsZWFyVmlzaXRlZCgpIHsg
bVZpc2l0ZWQuY2xlYXIoKTsgfQorICAgIHZvaWQgbWFya1Zpc2l0ZWQoVEdyYXBoTm9kZSogbm9k
ZSkgeyBtVmlzaXRlZC5pbnNlcnQobm9kZSk7IH0KKyAgICBib29sIGlzVmlzaXRlZChUR3JhcGhO
b2RlKiBub2RlKSBjb25zdCB7IHJldHVybiBtVmlzaXRlZC5maW5kKG5vZGUpICE9IG1WaXNpdGVk
LmVuZCgpOyB9Citwcml2YXRlOgorICAgIGludCBtRGVwdGg7CisgICAgVEdyYXBoTm9kZVNldCBt
VmlzaXRlZDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRl
ci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9k
ZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNWYyY2JhNWZj
MDE4NzM0ZDE4NTdmZDhkNTk5ZTcwYTVmMjY3ODU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5k
ZW5jeUdyYXBoQnVpbGRlci5jcHAKQEAgLTAsMCArMSwyMjcgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWls
ZGVyLmgiCisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OmJ1aWxkKFRJbnRlcm1Ob2Rl
KiBub2RlLCBURGVwZW5kZW5jeUdyYXBoKiBncmFwaCkKK3sKKyAgICBURGVwZW5kZW5jeUdyYXBo
QnVpbGRlciBidWlsZGVyKGdyYXBoKTsKKyAgICBidWlsZGVyLmJ1aWxkKG5vZGUpOworfQorCiti
b29sIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwg
VEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtQWdncmVnYXRlKQoreworICAgIHN3aXRjaCAoaW50ZXJt
QWdncmVnYXRlLT5nZXRPcCgpKSB7CisgICAgICAgIGNhc2UgRU9wRnVuY3Rpb246IHZpc2l0RnVu
Y3Rpb25EZWZpbml0aW9uKGludGVybUFnZ3JlZ2F0ZSk7IGJyZWFrOworICAgICAgICBjYXNlIEVP
cEZ1bmN0aW9uQ2FsbDogdmlzaXRGdW5jdGlvbkNhbGwoaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6IHZpc2l0QWdncmVnYXRlQ2hpbGRyZW4oaW50ZXJtQWdncmVnYXRl
KTsgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFREZXBlbmRl
bmN5R3JhcGhCdWlsZGVyOjp2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbihUSW50ZXJtQWdncmVnYXRl
KiBpbnRlcm1BZ2dyZWdhdGUpCit7CisgICAgLy8gQ3VycmVudGx5LCB3ZSBkbyBub3Qgc3VwcG9y
dCB1c2VyIGRlZmluZWQgZnVuY3Rpb25zLgorICAgIGlmIChpbnRlcm1BZ2dyZWdhdGUtPmdldE5h
bWUoKSAhPSAibWFpbigiKQorICAgICAgICByZXR1cm47CisKKyAgICB2aXNpdEFnZ3JlZ2F0ZUNo
aWxkcmVuKGludGVybUFnZ3JlZ2F0ZSk7Cit9CisKKy8vIFRha2VzIGFuIGV4cHJlc3Npb24gbGlr
ZSAiZih4KSIgYW5kIGNyZWF0ZXMgYSBkZXBlbmRlbmN5IGdyYXBoIGxpa2UKKy8vICJ4IC0+IGFy
Z3VtZW50IDAgLT4gZnVuY3Rpb24gY2FsbCIuCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVy
Ojp2aXNpdEZ1bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwp
Cit7CisgICAgVEdyYXBoRnVuY3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwgPSBtR3JhcGgtPmNyZWF0
ZUZ1bmN0aW9uQ2FsbChpbnRlcm1GdW5jdGlvbkNhbGwpOworCisgICAgLy8gUnVuIHRocm91Z2gg
dGhlIGZ1bmN0aW9uIGNhbGwgYXJndW1lbnRzLgorICAgIGludCBhcmd1bWVudE51bWJlciA9IDA7
CisgICAgVEludGVybVNlcXVlbmNlJiBpbnRlcm1Bcmd1bWVudHMgPSBpbnRlcm1GdW5jdGlvbkNh
bGwtPmdldFNlcXVlbmNlKCk7CisgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJh
dG9yIGl0ZXIgPSBpbnRlcm1Bcmd1bWVudHMuYmVnaW4oKTsKKyAgICAgICAgIGl0ZXIgIT0gaW50
ZXJtQXJndW1lbnRzLmVuZCgpOworICAgICAgICAgKytpdGVyLCArK2FyZ3VtZW50TnVtYmVyKQor
ICAgIHsKKyAgICAgICAgVE5vZGVTZXRNYWludGFpbmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMp
OworCisgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Bcmd1bWVudCA9ICppdGVyOworICAgICAg
ICBpbnRlcm1Bcmd1bWVudC0+dHJhdmVyc2UodGhpcyk7CisKKyAgICAgICAgaWYgKFRQYXJlbnRO
b2RlU2V0KiBhcmd1bWVudE5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKSB7CisgICAgICAg
ICAgICBUR3JhcGhBcmd1bWVudCogYXJndW1lbnQgPSBtR3JhcGgtPmNyZWF0ZUFyZ3VtZW50KGlu
dGVybUZ1bmN0aW9uQ2FsbCwgYXJndW1lbnROdW1iZXIpOworICAgICAgICAgICAgY29ubmVjdE11
bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoYXJndW1lbnROb2RlcywgYXJndW1lbnQpOworICAgICAg
ICAgICAgYXJndW1lbnQtPmFkZERlcGVuZGVudE5vZGUoZnVuY3Rpb25DYWxsKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIFB1c2ggdGhlIGxlZnRtb3N0IHN5bWJvbCBvZiB0aGlzIGZ1bmN0
aW9uIGNhbGwgaW50byB0aGUgY3VycmVudCBzZXQgb2YgZGVwZW5kZW50IHN5bWJvbHMgdG8KKyAg
ICAvLyByZXByZXNlbnQgdGhlIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwuCisgICAgLy8g
VGh1cywgYW4gZXhwcmVzc2lvbiBsaWtlICJ5ID0gZih4KSIgd2lsbCB5aWVsZCBhIGRlcGVuZGVu
Y3kgZ3JhcGggbGlrZQorICAgIC8vICJ4IC0+IGFyZ3VtZW50IDAgLT4gZnVuY3Rpb24gY2FsbCAt
PiB5Ii4KKyAgICAvLyBUaGlzIGxpbmUgZXNzZW50aWFsbHkgcGFzc2VzIHRoZSBmdW5jdGlvbiBj
YWxsIG5vZGUgYmFjayB1cCB0byBhbiBlYXJsaWVyIHZpc2l0QXNzaWdubWVudAorICAgIC8vIGNh
bGwsIHdoaWNoIHdpbGwgY3JlYXRlIHRoZSBjb25uZWN0aW9uICJmdW5jdGlvbiBjYWxsIC0+IHki
LgorICAgIG1Ob2RlU2V0cy5pbnNlcnRJbnRvVG9wU2V0KGZ1bmN0aW9uQ2FsbCk7Cit9CisKK3Zv
aWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdncmVnYXRlQ2hpbGRyZW4oVEludGVy
bUFnZ3JlZ2F0ZSogaW50ZXJtQWdncmVnYXRlKQoreworICAgIFRJbnRlcm1TZXF1ZW5jZSYgc2Vx
dWVuY2UgPSBpbnRlcm1BZ2dyZWdhdGUtPmdldFNlcXVlbmNlKCk7CisgICAgZm9yKFRJbnRlcm1T
ZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHNlcXVlbmNlLmJlZ2luKCk7IGl0ZXIgIT0g
c2VxdWVuY2UuZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRl
cm1DaGlsZCA9ICppdGVyOworICAgICAgICBpbnRlcm1DaGlsZC0+dHJhdmVyc2UodGhpcyk7Cisg
ICAgfQorfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdFN5bWJvbChUSW50
ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wpCit7CisgICAgLy8gUHVzaCB0aGlzIHN5bWJvbCBpbnRv
IHRoZSBzZXQgb2YgZGVwZW5kZW50IHN5bWJvbHMgZm9yIHRoZSBjdXJyZW50IGFzc2lnbm1lbnQg
b3IgY29uZGl0aW9uCisgICAgLy8gdGhhdCB3ZSBhcmUgdHJhdmVyc2luZy4KKyAgICBUR3JhcGhT
eW1ib2wqIHN5bWJvbCA9IG1HcmFwaC0+Z2V0T3JDcmVhdGVTeW1ib2woaW50ZXJtU3ltYm9sKTsK
KyAgICBtTm9kZVNldHMuaW5zZXJ0SW50b1RvcFNldChzeW1ib2wpOworCisgICAgLy8gSWYgdGhp
cyBzeW1ib2wgaXMgdGhlIGN1cnJlbnQgbGVmdG1vc3Qgc3ltYm9sIHVuZGVyIGFuIGFzc2lnbm1l
bnQsIHJlcGxhY2UgdGhlIHByZXZpb3VzCisgICAgLy8gbGVmdG1vc3Qgc3ltYm9sIHdpdGggdGhp
cyBzeW1ib2wuCisgICAgaWYgKCFtTGVmdG1vc3RTeW1ib2xzLmVtcHR5KCkgJiYgbUxlZnRtb3N0
U3ltYm9scy50b3AoKSAhPSAmbVJpZ2h0U3VidHJlZSkgeworICAgICAgICBtTGVmdG1vc3RTeW1i
b2xzLnBvcCgpOworICAgICAgICBtTGVmdG1vc3RTeW1ib2xzLnB1c2goc3ltYm9sKTsKKyAgICB9
Cit9CisKK2Jvb2wgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QmluYXJ5KFZpc2l0IHZp
c2l0LCBUSW50ZXJtQmluYXJ5KiBpbnRlcm1CaW5hcnkpCit7CisgICAgVE9wZXJhdG9yIG9wID0g
aW50ZXJtQmluYXJ5LT5nZXRPcCgpOworICAgIGlmIChvcCA9PSBFT3BJbml0aWFsaXplIHx8IGlu
dGVybUJpbmFyeS0+aXNBc3NpZ25tZW50KCkpCisgICAgICAgIHZpc2l0QXNzaWdubWVudChpbnRl
cm1CaW5hcnkpOworICAgIGVsc2UgaWYgKG9wID09IEVPcExvZ2ljYWxBbmQgfHwgb3AgPT0gRU9w
TG9naWNhbE9yKQorICAgICAgICB2aXNpdExvZ2ljYWxPcChpbnRlcm1CaW5hcnkpOworICAgIGVs
c2UKKyAgICAgICAgdmlzaXRCaW5hcnlDaGlsZHJlbihpbnRlcm1CaW5hcnkpOworCisgICAgcmV0
dXJuIGZhbHNlOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEFzc2ln
bm1lbnQoVEludGVybUJpbmFyeSogaW50ZXJtQXNzaWdubWVudCkKK3sKKyAgICBUSW50ZXJtVHlw
ZWQqIGludGVybUxlZnQgPSBpbnRlcm1Bc3NpZ25tZW50LT5nZXRMZWZ0KCk7CisgICAgaWYgKCFp
bnRlcm1MZWZ0KQorICAgICAgICByZXR1cm47CisKKyAgICBUR3JhcGhTeW1ib2wqIGxlZnRtb3N0
U3ltYm9sID0gTlVMTDsKKworICAgIHsKKyAgICAgICAgVE5vZGVTZXRNYWludGFpbmVyIG5vZGVT
ZXRNYWludGFpbmVyKHRoaXMpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIFRMZWZ0bW9zdFN5
bWJvbE1haW50YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIG1MZWZ0U3VidHJl
ZSk7CisgICAgICAgICAgICBpbnRlcm1MZWZ0LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAg
IGxlZnRtb3N0U3ltYm9sID0gbUxlZnRtb3N0U3ltYm9scy50b3AoKTsKKworICAgICAgICAgICAg
Ly8gQWZ0ZXIgdHJhdmVyc2luZyB0aGUgbGVmdCBzdWJ0cmVlIG9mIHRoaXMgYXNzaWdubWVudCwg
d2Ugc2hvdWxkIGhhdmUgZm91bmQgYSByZWFsCisgICAgICAgICAgICAvLyBsZWZ0bW9zdCBzeW1i
b2wsIGFuZCB0aGUgbGVmdG1vc3Qgc3ltYm9sIHNob3VsZCBub3QgYmUgYSBwbGFjZWhvbGRlci4K
KyAgICAgICAgICAgIEFTU0VSVChsZWZ0bW9zdFN5bWJvbCAhPSAmbUxlZnRTdWJ0cmVlKTsKKyAg
ICAgICAgICAgIEFTU0VSVChsZWZ0bW9zdFN5bWJvbCAhPSAmbVJpZ2h0U3VidHJlZSk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1SaWdodCA9IGludGVybUFz
c2lnbm1lbnQtPmdldFJpZ2h0KCkpIHsKKyAgICAgICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50
YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIG1SaWdodFN1YnRyZWUpOworICAg
ICAgICAgICAgaW50ZXJtUmlnaHQtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKFRQYXJlbnROb2RlU2V0KiBhc3NpZ25tZW50Tm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9w
U2V0KCkpCisgICAgICAgICAgICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShhc3Np
Z25tZW50Tm9kZXMsIGxlZnRtb3N0U3ltYm9sKTsKKyAgICB9CisKKyAgICAvLyBQdXNoIHRoZSBs
ZWZ0bW9zdCBzeW1ib2wgb2YgdGhpcyBhc3NpZ25tZW50IGludG8gdGhlIGN1cnJlbnQgc2V0IG9m
IGRlcGVuZGVudCBzeW1ib2xzIHRvCisgICAgLy8gcmVwcmVzZW50IHRoZSByZXN1bHQgb2YgdGhp
cyBhc3NpZ25tZW50LgorICAgIC8vIEFuIGV4cHJlc3Npb24gbGlrZSAiYSA9IChiID0gYykiIHdp
bGwgeWllbGQgYSBkZXBlbmRlbmN5IGdyYXBoIGxpa2UgImMgLT4gYiAtPiBhIi4KKyAgICAvLyBU
aGlzIGxpbmUgZXNzZW50aWFsbHkgcGFzc2VzIHRoZSBsZWZ0bW9zdCBzeW1ib2wgb2YgdGhlIG5l
c3RlZCBhc3NpZ25tZW50ICgiYiIgaW4gdGhpcworICAgIC8vIGV4YW1wbGUpIGJhY2sgdXAgdG8g
dGhlIGVhcmxpZXIgdmlzaXRBc3NpZ25tZW50IGNhbGwgZm9yIHRoZSBvdXRlciBhc3NpZ25tZW50
LCB3aGljaCB3aWxsCisgICAgLy8gY3JlYXRlIHRoZSBjb25uZWN0aW9uICJiIC0+IGEiLgorICAg
IG1Ob2RlU2V0cy5pbnNlcnRJbnRvVG9wU2V0KGxlZnRtb3N0U3ltYm9sKTsKK30KKwordm9pZCBU
RGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRMb2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50
ZXJtTG9naWNhbE9wKQoreworICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybUxlZnQgPSBpbnRl
cm1Mb2dpY2FsT3AtPmdldExlZnQoKSkgeworICAgICAgICBUTm9kZVNldFByb3BhZ2F0aW5nTWFp
bnRhaW5lciBub2RlU2V0TWFpbnRhaW5lcih0aGlzKTsKKworICAgICAgICBpbnRlcm1MZWZ0LT50
cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBsZWZ0Tm9kZXMgPSBt
Tm9kZVNldHMuZ2V0VG9wU2V0KCkpIHsKKyAgICAgICAgICAgIFRHcmFwaExvZ2ljYWxPcCogbG9n
aWNhbE9wID0gbUdyYXBoLT5jcmVhdGVMb2dpY2FsT3AoaW50ZXJtTG9naWNhbE9wKTsKKyAgICAg
ICAgICAgIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGxlZnROb2RlcywgbG9naWNh
bE9wKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybVJp
Z2h0ID0gaW50ZXJtTG9naWNhbE9wLT5nZXRSaWdodCgpKSB7CisgICAgICAgIFRMZWZ0bW9zdFN5
bWJvbE1haW50YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIG1SaWdodFN1YnRy
ZWUpOworICAgICAgICBpbnRlcm1SaWdodC0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorfQorCit2
b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEJpbmFyeUNoaWxkcmVuKFRJbnRlcm1C
aW5hcnkqIGludGVybUJpbmFyeSkKK3sKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1MZWZ0
ID0gaW50ZXJtQmluYXJ5LT5nZXRMZWZ0KCkpCisgICAgICAgIGludGVybUxlZnQtPnRyYXZlcnNl
KHRoaXMpOworCisgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtUmlnaHQgPSBpbnRlcm1CaW5h
cnktPmdldFJpZ2h0KCkpIHsKKyAgICAgICAgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lciBsZWZ0
bW9zdFN5bWJvbE1haW50YWluZXIodGhpcywgbVJpZ2h0U3VidHJlZSk7CisgICAgICAgIGludGVy
bVJpZ2h0LT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9Cit9CisKK2Jvb2wgVERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXI6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBp
bnRlcm1TZWxlY3Rpb24pCit7CisgICAgaWYgKFRJbnRlcm1Ob2RlKiBpbnRlcm1Db25kaXRpb24g
PSBpbnRlcm1TZWxlY3Rpb24tPmdldENvbmRpdGlvbigpKSB7CisgICAgICAgIFROb2RlU2V0TWFp
bnRhaW5lciBub2RlU2V0TWFpbnRhaW5lcih0aGlzKTsKKworICAgICAgICBpbnRlcm1Db25kaXRp
b24tPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBpZiAoVFBhcmVudE5vZGVTZXQqIGNvbmRpdGlv
bk5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKSB7CisgICAgICAgICAgICBUR3JhcGhTZWxl
Y3Rpb24qIHNlbGVjdGlvbiA9IG1HcmFwaC0+Y3JlYXRlU2VsZWN0aW9uKGludGVybVNlbGVjdGlv
bik7CisgICAgICAgICAgICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShjb25kaXRp
b25Ob2Rlcywgc2VsZWN0aW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJt
Tm9kZSogaW50ZXJtVHJ1ZUJsb2NrID0gaW50ZXJtU2VsZWN0aW9uLT5nZXRUcnVlQmxvY2soKSkK
KyAgICAgICAgaW50ZXJtVHJ1ZUJsb2NrLT50cmF2ZXJzZSh0aGlzKTsKKworICAgIGlmIChUSW50
ZXJtTm9kZSogaW50ZXJtRmFsc2VCbG9jayA9IGludGVybVNlbGVjdGlvbi0+Z2V0RmFsc2VCbG9j
aygpKQorICAgICAgICBpbnRlcm1GYWxzZUJsb2NrLT50cmF2ZXJzZSh0aGlzKTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRMb29w
KFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCogaW50ZXJtTG9vcCkKK3sKKyAgICBpZiAoVEludGVy
bVR5cGVkKiBpbnRlcm1Db25kaXRpb24gPSBpbnRlcm1Mb29wLT5nZXRDb25kaXRpb24oKSkgewor
ICAgICAgICBUTm9kZVNldE1haW50YWluZXIgbm9kZVNldE1haW50YWluZXIodGhpcyk7CisKKyAg
ICAgICAgaW50ZXJtQ29uZGl0aW9uLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgaWYgKFRQYXJl
bnROb2RlU2V0KiBjb25kaXRpb25Ob2RlcyA9IG1Ob2RlU2V0cy5nZXRUb3BTZXQoKSkgeworICAg
ICAgICAgICAgVEdyYXBoTG9vcCogbG9vcCA9IG1HcmFwaC0+Y3JlYXRlTG9vcChpbnRlcm1Mb29w
KTsKKyAgICAgICAgICAgIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGNvbmRpdGlv
bk5vZGVzLCBsb29wKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJtTm9kZSog
aW50ZXJtQm9keSA9IGludGVybUxvb3AtPmdldEJvZHkoKSkKKyAgICAgICAgaW50ZXJtQm9keS0+
dHJhdmVyc2UodGhpcyk7CisKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1FeHByZXNzaW9u
ID0gaW50ZXJtTG9vcC0+Z2V0RXhwcmVzc2lvbigpKQorICAgICAgICBpbnRlcm1FeHByZXNzaW9u
LT50cmF2ZXJzZSh0aGlzKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworCit2b2lkIFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyOjpjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShUUGFy
ZW50Tm9kZVNldCogbm9kZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUR3JhcGhOb2RlKiBub2RlKSBjb25zdAoreworICAg
IGZvciAoVFBhcmVudE5vZGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBub2Rlcy0+YmVnaW4o
KTsgaXRlciAhPSBub2Rlcy0+ZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaFBh
cmVudE5vZGUqIGN1cnJlbnROb2RlID0gKml0ZXI7CisgICAgICAgIGN1cnJlbnROb2RlLT5hZGRE
ZXBlbmRlbnROb2RlKG5vZGUpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aEJ1aWxkZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZTkyOGZi
NzdlYjQ4MWQ4M2NmODVmNWZlNmMzNWZkZWExOGVjNTY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5oCkBAIC0wLDAgKzEsMTgxIEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2lmbmRlZiBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0JVSUxERVJfSAorI2Rl
ZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0JVSUxERVJfSAorCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCIKKwor
Ly8KKy8vIENyZWF0ZXMgYSBkZXBlbmRlbmN5IGdyYXBoIG9mIHN5bWJvbHMsIGZ1bmN0aW9uIGNh
bGxzLCBjb25kaXRpb25zIGV0Yy4gYnkgdHJhdmVyc2luZyBhCisvLyBpbnRlcm1lZGlhdGUgdHJl
ZS4KKy8vCitjbGFzcyBURGVwZW5kZW5jeUdyYXBoQnVpbGRlciA6IHB1YmxpYyBUSW50ZXJtVHJh
dmVyc2VyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBidWlsZChUSW50ZXJtTm9kZSogbm9k
ZSwgVERlcGVuZGVuY3lHcmFwaCogZ3JhcGgpOworCisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3lt
Ym9sKFRJbnRlcm1TeW1ib2wqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQg
dmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRTZWxlY3Rpb24o
VmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRB
Z2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKKyAgICB2aXJ0dWFsIGJv
b2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCopOworCitwcml2YXRlOgorICAg
IHR5cGVkZWYgc3RkOjpzdGFjazxUR3JhcGhTeW1ib2wqPiBUU3ltYm9sU3RhY2s7CisgICAgdHlw
ZWRlZiBzdGQ6OnNldDxUR3JhcGhQYXJlbnROb2RlKj4gVFBhcmVudE5vZGVTZXQ7CisKKyAgICAv
LworICAgIC8vIEZvciBjb2xsZWN0aW5nIHRoZSBkZXBlbmRlbnQgbm9kZXMgb2YgYXNzaWdubWVu
dHMsIGNvbmRpdGlvbnMsIGV0Yy4KKyAgICAvLyB3aGlsZSB0cmF2ZXJzaW5nIHRoZSBpbnRlcm1l
ZGlhdGUgdHJlZS4KKyAgICAvLworICAgIC8vIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgaXMgc3RhY2sg
b2Ygc2V0cy4gRWFjaCBzZXQgY29udGFpbnMgZGVwZW5kZW5jeSBncmFwaCBwYXJlbnQgbm9kZXMu
CisgICAgLy8KKyAgICBjbGFzcyBUTm9kZVNldFN0YWNrIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IFROb2RlU2V0U3RhY2soKSB7fTsKKyAgICAgICAgflROb2RlU2V0U3RhY2soKSB7IGNsZWFyKCk7
IH0KKworICAgICAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBhZnRlciBhIHB1c2hT
ZXQuCisgICAgICAgIC8vIFJldHVybnMgTlVMTCBpZiB0aGUgdG9wIHNldCBpcyBlbXB0eS4KKyAg
ICAgICAgVFBhcmVudE5vZGVTZXQqIGdldFRvcFNldCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIEFTU0VSVCghbm9kZVNldHMuZW1wdHkoKSk7CisgICAgICAgICAgICBUUGFyZW50Tm9k
ZVNldCogdG9wU2V0ID0gbm9kZVNldHMudG9wKCk7CisgICAgICAgICAgICByZXR1cm4gIXRvcFNl
dC0+ZW1wdHkoKSA/IHRvcFNldCA6IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHB1
c2hTZXQoKSB7IG5vZGVTZXRzLnB1c2gobmV3IFRQYXJlbnROb2RlU2V0KCkpOyB9CisgICAgICAg
IHZvaWQgcG9wU2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKCFub2RlU2V0cy5l
bXB0eSgpKTsKKyAgICAgICAgICAgIGRlbGV0ZSBub2RlU2V0cy50b3AoKTsKKyAgICAgICAgICAg
IG5vZGVTZXRzLnBvcCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gUG9wcyB0aGUgdG9wIHNl
dCBhbmQgYWRkcyBpdHMgY29udGVudHMgdG8gdGhlIG5ldyB0b3Agc2V0LgorICAgICAgICAvLyBU
aGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBhZnRlciBhIHB1c2hTZXQuCisgICAgICAgIC8vIElm
IHRoZXJlIGlzIG5vIHNldCBiZWxvdyB0aGUgdG9wIHNldCwgdGhlIHRvcCBzZXQgaXMganVzdCBk
ZWxldGVkLgorICAgICAgICB2b2lkIHBvcFNldEludG9OZXh0KCkKKyAgICAgICAgeworICAgICAg
ICAgICAgQVNTRVJUKCFub2RlU2V0cy5lbXB0eSgpKTsKKyAgICAgICAgICAgIFRQYXJlbnROb2Rl
U2V0KiBvbGRUb3BTZXQgPSBub2RlU2V0cy50b3AoKTsKKyAgICAgICAgICAgIG5vZGVTZXRzLnBv
cCgpOworCisgICAgICAgICAgICBpZiAoIW5vZGVTZXRzLmVtcHR5KCkpIHsKKyAgICAgICAgICAg
ICAgICBUUGFyZW50Tm9kZVNldCogbmV3VG9wU2V0ID0gbm9kZVNldHMudG9wKCk7CisgICAgICAg
ICAgICAgICAgbmV3VG9wU2V0LT5pbnNlcnQob2xkVG9wU2V0LT5iZWdpbigpLCBvbGRUb3BTZXQt
PmVuZCgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVsZXRlIG9sZFRvcFNldDsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIERvZXMgbm90aGluZyBpZiB0aGVyZSBpcyBubyB0b3Ag
c2V0LgorICAgICAgICAvLyBUaGlzIGNhbiBiZSBjYWxsZWQgd2hlbiB0aGVyZSBpcyBubyB0b3Ag
c2V0IGlmIHdlIGFyZSB2aXNpdGluZworICAgICAgICAvLyBzeW1ib2xzIHRoYXQgYXJlIG5vdCB1
bmRlciBhbiBhc3NpZ25tZW50IG9yIGNvbmRpdGlvbi4KKyAgICAgICAgLy8gV2UgZG9uJ3QgbmVl
ZCB0byB0cmFjayB0aG9zZSBzeW1ib2xzLgorICAgICAgICB2b2lkIGluc2VydEludG9Ub3BTZXQo
VEdyYXBoUGFyZW50Tm9kZSogbm9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vZGVT
ZXRzLmVtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBub2Rl
U2V0cy50b3AoKS0+aW5zZXJ0KG5vZGUpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBjbGVh
cigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlICghbm9kZVNldHMuZW1wdHkoKSkKKyAg
ICAgICAgICAgICAgICBwb3BTZXQoKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgdHlwZWRlZiBzdGQ6OnN0YWNrPFRQYXJlbnROb2RlU2V0Kj4gVFBhcmVudE5vZGVTZXRTdGFj
azsKKworICAgICAgICBUUGFyZW50Tm9kZVNldFN0YWNrIG5vZGVTZXRzOworICAgIH07CisKKyAg
ICAvLworICAgIC8vIEFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgcHVzaGVzIGEgbmV3IG5vZGUg
c2V0IHdoZW4gaW5zdGFudGlhdGVkLgorICAgIC8vIFdoZW4gdGhlIGluc3RhbmNlIGdvZXMgb3V0
IG9mIHNjb3BlLCBpdCBhbmQgcG9wcyB0aGUgbm9kZSBzZXQuCisgICAgLy8KKyAgICBjbGFzcyBU
Tm9kZVNldE1haW50YWluZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgVE5vZGVTZXRNYWludGFp
bmVyKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyKiBmYWN0b3J5KQorICAgICAgICAgICAgOiBzZXRz
KGZhY3RvcnktPm1Ob2RlU2V0cykgeyBzZXRzLnB1c2hTZXQoKTsgfQorICAgICAgICB+VE5vZGVT
ZXRNYWludGFpbmVyKCkgeyBzZXRzLnBvcFNldCgpOyB9CisgICAgcHJvdGVjdGVkOgorICAgICAg
ICBUTm9kZVNldFN0YWNrJiBzZXRzOworICAgIH07CisKKyAgICAvLworICAgIC8vIEFuIGluc3Rh
bmNlIG9mIHRoaXMgY2xhc3MgcHVzaGVzIGEgbmV3IG5vZGUgc2V0IHdoZW4gaW5zdGFudGlhdGVk
LgorICAgIC8vIFdoZW4gdGhlIGluc3RhbmNlIGdvZXMgb3V0IG9mIHNjb3BlLCBpdCBhbmQgcG9w
cyB0aGUgdG9wIG5vZGUgc2V0IGFuZCBhZGRzIGl0cyBjb250ZW50cyB0bworICAgIC8vIHRoZSBu
ZXcgdG9wIG5vZGUgc2V0LgorICAgIC8vCisgICAgY2xhc3MgVE5vZGVTZXRQcm9wYWdhdGluZ01h
aW50YWluZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgVE5vZGVTZXRQcm9wYWdhdGluZ01haW50
YWluZXIoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIqIGZhY3RvcnkpCisgICAgICAgICAgICA6IHNl
dHMoZmFjdG9yeS0+bU5vZGVTZXRzKSB7IHNldHMucHVzaFNldCgpOyB9CisgICAgICAgIH5UTm9k
ZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lcigpIHsgc2V0cy5wb3BTZXRJbnRvTmV4dCgpOyB9Cisg
ICAgcHJvdGVjdGVkOgorICAgICAgICBUTm9kZVNldFN0YWNrJiBzZXRzOworICAgIH07CisKKyAg
ICAvLworICAgIC8vIEFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3Mga2VlcHMgdHJhY2sgb2YgdGhl
IGxlZnRtb3N0IHN5bWJvbCB3aGlsZSB3ZSdyZSBleHBsb3JpbmcgYW4KKyAgICAvLyBhc3NpZ25t
ZW50LgorICAgIC8vIEl0IHdpbGwgcHVzaCB0aGUgcGxhY2Vob2xkZXIgc3ltYm9sIGtMZWZ0U3Vi
dHJlZSB3aGVuIGluc3RhbnRpYXRlZCB1bmRlciBhIGxlZnQgc3VidHJlZSwKKyAgICAvLyBhbmQg
a1JpZ2h0U3VidHJlZSB1bmRlciBhIHJpZ2h0IHN1YnRyZWUuCisgICAgLy8gV2hlbiBpdCBnb2Vz
IG91dCBvZiBzY29wZSwgaXQgd2lsbCBwb3AgdGhlIGxlZnRtb3N0IHN5bWJvbCBhdCB0aGUgdG9w
IG9mIHRoZSBzY29wZS4KKyAgICAvLyBEdXJpbmcgdHJhdmVyc2FsLCB0aGUgVERlcGVuZGVuY3lH
cmFwaEJ1aWxkZXIgd2lsbCByZXBsYWNlIGtMZWZ0U3VidHJlZSB3aXRoIGEgcmVhbCBzeW1ib2wu
CisgICAgLy8ga1JpZ2h0U3VidHJlZSB3aWxsIG5ldmVyIGJlIHJlcGxhY2VkIGJ5IGEgcmVhbCBz
eW1ib2wgYmVjYXVzZSB3ZSBhcmUgdHJhY2tpbmcgdGhlIGxlZnRtb3N0CisgICAgLy8gc3ltYm9s
LgorICAgIC8vCisgICAgY2xhc3MgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lciB7CisgICAgcHVi
bGljOgorICAgICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKFREZXBlbmRlbmN5R3JhcGhC
dWlsZGVyKiBmYWN0b3J5LCBUR3JhcGhTeW1ib2wmIHN1YnRyZWUpCisgICAgICAgICAgICA6IGxl
ZnRtb3N0U3ltYm9scyhmYWN0b3J5LT5tTGVmdG1vc3RTeW1ib2xzKQorICAgICAgICB7CisgICAg
ICAgICAgICBuZWVkc1BsYWNlaG9sZGVyU3ltYm9sID0gbGVmdG1vc3RTeW1ib2xzLmVtcHR5KCkg
fHwgbGVmdG1vc3RTeW1ib2xzLnRvcCgpICE9ICZzdWJ0cmVlOworICAgICAgICAgICAgaWYgKG5l
ZWRzUGxhY2Vob2xkZXJTeW1ib2wpCisgICAgICAgICAgICAgICAgbGVmdG1vc3RTeW1ib2xzLnB1
c2goJnN1YnRyZWUpOworICAgICAgICB9CisKKyAgICAgICAgflRMZWZ0bW9zdFN5bWJvbE1haW50
YWluZXIoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobmVlZHNQbGFjZWhvbGRlclN5bWJv
bCkKKyAgICAgICAgICAgICAgICBsZWZ0bW9zdFN5bWJvbHMucG9wKCk7CisgICAgICAgIH0KKwor
ICAgIHByb3RlY3RlZDoKKyAgICAgICAgVFN5bWJvbFN0YWNrJiBsZWZ0bW9zdFN5bWJvbHM7Cisg
ICAgICAgIGJvb2wgbmVlZHNQbGFjZWhvbGRlclN5bWJvbDsKKyAgICB9OworCisgICAgVERlcGVu
ZGVuY3lHcmFwaEJ1aWxkZXIoVERlcGVuZGVuY3lHcmFwaCogZ3JhcGgpCisgICAgICAgIDogVElu
dGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwgZmFsc2UpCisgICAgICAgICwgbUxlZnRTdWJ0cmVl
KE5VTEwpCisgICAgICAgICwgbVJpZ2h0U3VidHJlZShOVUxMKQorICAgICAgICAsIG1HcmFwaChn
cmFwaCkge30KKyAgICB2b2lkIGJ1aWxkKFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlKSB7IGludGVy
bU5vZGUtPnRyYXZlcnNlKHRoaXMpOyB9CisKKyAgICB2b2lkIGNvbm5lY3RNdWx0aXBsZU5vZGVz
VG9TaW5nbGVOb2RlKFRQYXJlbnROb2RlU2V0KiBub2RlcywgVEdyYXBoTm9kZSogbm9kZSkgY29u
c3Q7CisKKyAgICB2b2lkIHZpc2l0QXNzaWdubWVudChUSW50ZXJtQmluYXJ5Kik7CisgICAgdm9p
ZCB2aXNpdExvZ2ljYWxPcChUSW50ZXJtQmluYXJ5Kik7CisgICAgdm9pZCB2aXNpdEJpbmFyeUNo
aWxkcmVuKFRJbnRlcm1CaW5hcnkqKTsKKyAgICB2b2lkIHZpc2l0RnVuY3Rpb25EZWZpbml0aW9u
KFRJbnRlcm1BZ2dyZWdhdGUqKTsKKyAgICB2b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRJbnRlcm1B
Z2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCk7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZUNo
aWxkcmVuKFRJbnRlcm1BZ2dyZWdhdGUqKTsKKworICAgIFRHcmFwaFN5bWJvbCBtTGVmdFN1YnRy
ZWU7CisgICAgVEdyYXBoU3ltYm9sIG1SaWdodFN1YnRyZWU7CisKKyAgICBURGVwZW5kZW5jeUdy
YXBoKiBtR3JhcGg7CisgICAgVE5vZGVTZXRTdGFjayBtTm9kZVNldHM7CisgICAgVFN5bWJvbFN0
YWNrIG1MZWZ0bW9zdFN5bWJvbHM7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX0RFUEdSQVBI
X0RFUEVOREVOQ1lfR1JBUEhfQlVJTERFUl9ICmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhP
dXRwdXQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMjI2MzMz
NTQ1ZjczYTdkODVkZmI3NDIwYjQ1YzFhNzkzZTQ4MGI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVw
ZW5kZW5jeUdyYXBoT3V0cHV0LmNwcApAQCAtMCwwICsxLDY1IEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0
cHV0LmgiCisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6b3V0cHV0SW5kZW50YXRpb24o
KQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ2V0RGVwdGgoKTsgKytpKQorICAgICAgICBt
U2luayA8PCAiICAiOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0QXJn
dW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFtZXRlcikKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlv
bigpOworICAgIG1TaW5rIDw8ICJhcmd1bWVudCAiIDw8IHBhcmFtZXRlci0+Z2V0QXJndW1lbnRO
dW1iZXIoKSA8PCAiIG9mIGNhbGwgdG8gIgorICAgICAgICAgIDw8IHBhcmFtZXRlci0+Z2V0SW50
ZXJtRnVuY3Rpb25DYWxsKCktPmdldE5hbWUoKSA8PCAiXG4iOworfQorCit2b2lkIFREZXBlbmRl
bmN5R3JhcGhPdXRwdXQ6OnZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVu
Y3Rpb25DYWxsKQoreworICAgIG91dHB1dEluZGVudGF0aW9uKCk7CisgICAgbVNpbmsgPDwgImZ1
bmN0aW9uIGNhbGwgIiA8PCAgZnVuY3Rpb25DYWxsLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKS0+
Z2V0TmFtZSgpIDw8ICJcbiI7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlz
aXRTeW1ib2woVEdyYXBoU3ltYm9sKiBzeW1ib2wpCit7CisgICAgb3V0cHV0SW5kZW50YXRpb24o
KTsKKyAgICBtU2luayA8PCBzeW1ib2wtPmdldEludGVybVN5bWJvbCgpLT5nZXRTeW1ib2woKSA8
PCAiIChzeW1ib2wgaWQ6ICIKKyAgICAgICAgICA8PCBzeW1ib2wtPmdldEludGVybVN5bWJvbCgp
LT5nZXRJZCgpIDw8ICIpXG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZp
c2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKQoreworICAgIG91dHB1dElu
ZGVudGF0aW9uKCk7CisgICAgbVNpbmsgPDwgInNlbGVjdGlvblxuIjsKK30KKwordm9pZCBURGVw
ZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCkKK3sKKyAgICBv
dXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5rIDw8ICJsb29wIGNvbmRpdGlvblxuIjsKK30K
Kwordm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dp
Y2FsT3AqIGxvZ2ljYWxPcCkKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5r
IDw8ICJsb2dpY2FsICIgPDwgbG9naWNhbE9wLT5nZXRPcFN0cmluZygpIDw8ICJcbiI7Cit9CisK
K3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6b3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhURGVw
ZW5kZW5jeUdyYXBoJiBncmFwaCkKK3sKKyAgICBtU2luayA8PCAiXG4iOworCisgICAgZm9yIChU
R3JhcGhOb2RlVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZ3JhcGguYmVnaW4oKTsgaXRl
ciAhPSBncmFwaC5lbmQoKTsgKytpdGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBoTm9kZSogc3lt
Ym9sID0gKml0ZXI7CisgICAgICAgIG1TaW5rIDw8ICItLS0gRGVwZW5kZW5jeSBncmFwaCBzcGFu
bmluZyB0cmVlIC0tLVxuIjsKKyAgICAgICAgY2xlYXJWaXNpdGVkKCk7CisgICAgICAgIHN5bWJv
bC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG1TaW5rIDw8ICJcbiI7CisgICAgfQorfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jM2E0MTEyMjc4ZmJiZDRmMDkxNzUzZThkNDQ0NTQxNTVjYzE3MjVhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgKQEAgLTAsMCArMSwzMCBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9H
UkFQSF9PVVRQVVRfSAorI2RlZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBI
X09VVFBVVF9ICisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVu
ZGVuY3lHcmFwaC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIK
KworY2xhc3MgVERlcGVuZGVuY3lHcmFwaE91dHB1dCA6IHB1YmxpYyBURGVwZW5kZW5jeUdyYXBo
VHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBURGVwZW5kZW5jeUdyYXBoT3V0cHV0KFRJbmZvU2lu
a0Jhc2UmIHNpbmspIDogbVNpbmsoc2luaykge30KKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1i
b2woVEdyYXBoU3ltYm9sKiBzeW1ib2wpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFyZ3VtZW50
KFRHcmFwaEFyZ3VtZW50KiBwYXJhbWV0ZXIpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdEZ1bmN0
aW9uQ2FsbChUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCk7CisgICAgdmlydHVhbCB2
b2lkIHZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3ApOworICAgIHZpcnR1YWwgdm9pZCB2
aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCk7CisKKyAgICB2b2lkIG91
dHB1dEFsbFNwYW5uaW5nVHJlZXMoVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpOworcHJpdmF0ZToK
KyAgICB2b2lkIG91dHB1dEluZGVudGF0aW9uKCk7CisKKyAgICBUSW5mb1NpbmtCYXNlJiBtU2lu
azsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9P
VVRQVVRfSApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5k
ZW5jeUdyYXBoVHJhdmVyc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5N2ZkZTk3ZTI2MGQwYjUwMmUxNGQ5
ODBjNWU2ZmNkMTg4MDc2MWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2
ZXJzZS5jcHAKQEAgLTAsMCArMSw2OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorCisvLyBUaGVzZSBt
ZXRob2RzIGRvIGEgYnJlYWR0aC1maXJzdCB0cmF2ZXJzYWwgdGhyb3VnaCB0aGUgZ3JhcGggYW5k
IG1hcmsgdmlzaXRlZCBub2Rlcy4KKwordm9pZCBUR3JhcGhOb2RlOjp0cmF2ZXJzZShURGVwZW5k
ZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNl
ci0+bWFya1Zpc2l0ZWQodGhpcyk7Cit9CisKK3ZvaWQgVEdyYXBoUGFyZW50Tm9kZTo6dHJhdmVy
c2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCit7CisgICAgVEdy
YXBoTm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworCisgICAgZ3JhcGhUcmF2ZXJzZXIt
PmluY3JlbWVudERlcHRoKCk7CisKKyAgICAvLyBWaXNpdCB0aGUgcGFyZW50IG5vZGUncyBjaGls
ZHJlbi4KKyAgICBmb3IgKFRHcmFwaE5vZGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtRGVw
ZW5kZW50Tm9kZXMuYmVnaW4oKTsKKyAgICAgICAgIGl0ZXIgIT0gbURlcGVuZGVudE5vZGVzLmVu
ZCgpOworICAgICAgICAgKytpdGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBoTm9kZSogbm9kZSA9
ICppdGVyOworICAgICAgICBpZiAoIWdyYXBoVHJhdmVyc2VyLT5pc1Zpc2l0ZWQobm9kZSkpCisg
ICAgICAgICAgICBub2RlLT50cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7CisgICAgfQorCisgICAg
Z3JhcGhUcmF2ZXJzZXItPmRlY3JlbWVudERlcHRoKCk7Cit9CisKK3ZvaWQgVEdyYXBoQXJndW1l
bnQ6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQor
eworICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdEFyZ3VtZW50KHRoaXMpOworICAgIFRHcmFwaFBh
cmVudE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhGdW5j
dGlvbkNhbGw6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVy
c2VyKQoreworICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdEZ1bmN0aW9uQ2FsbCh0aGlzKTsKKyAg
ICBUR3JhcGhQYXJlbnROb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CisKK3ZvaWQg
VEdyYXBoU3ltYm9sOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRy
YXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRTeW1ib2wodGhpcyk7CisgICAg
VEdyYXBoUGFyZW50Tm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworfQorCit2b2lkIFRH
cmFwaFNlbGVjdGlvbjo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhU
cmF2ZXJzZXIpCit7CisgICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0U2VsZWN0aW9uKHRoaXMpOwor
ICAgIFRHcmFwaE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3Jh
cGhMb29wOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNl
cikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRMb29wKHRoaXMpOworICAgIFRHcmFwaE5v
ZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhMb2dpY2FsT3A6
OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQorewor
ICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdExvZ2ljYWxPcCh0aGlzKTsKKyAgICBUR3JhcGhOb2Rl
Ojp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nZW5lcmF0ZV9wYXJzZXIuc2ggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nZW5lcmF0ZV9w
YXJzZXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZTQ3MjE5MTVlM2NmYjI3Yzg3ZmY5M2EwZjk1M2FkOTE2NDNj
YzZiNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL2dlbmVyYXRlX3BhcnNlci5zaApAQCAtMCwwICsxLDI3IEBACisjIS9i
aW4vYmFzaAorIyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorIyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorCisjIEdlbmVyYXRlcyBHTFNMIEVTIHBhcnNlciAtIGdsc2xhbmdfbGV4LmNw
cCwgZ2xzbGFuZ190YWIuaCwgYW5kIGdsc2xhbmdfdGFiLmNwcAorCitydW5fZmxleCgpCit7Citp
bnB1dF9maWxlPSRzY3JpcHRfZGlyLyQxLmwKK291dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIvJDFf
bGV4LmNwcAorZmxleCAtLW5vbGluZSAtLW5vdW5pc3RkIC0tb3V0ZmlsZT0kb3V0cHV0X3NvdXJj
ZSAkaW5wdXRfZmlsZQorfQorCitydW5fYmlzb24oKQoreworaW5wdXRfZmlsZT0kc2NyaXB0X2Rp
ci8kMS55CitvdXRwdXRfaGVhZGVyPSRzY3JpcHRfZGlyLyQxX3RhYi5oCitvdXRwdXRfc291cmNl
PSRzY3JpcHRfZGlyLyQxX3RhYi5jcHAKK2Jpc29uIC0tbm8tbGluZXMgLS1za2VsZXRvbj15YWNj
LmMgLS1kZWZpbmVzPSRvdXRwdXRfaGVhZGVyIC0tb3V0cHV0PSRvdXRwdXRfc291cmNlICRpbnB1
dF9maWxlCit9CisKK3NjcmlwdF9kaXI9JChkaXJuYW1lICQwKQorCisjIEdlbmVyYXRlIFBhcnNl
cgorcnVuX2ZsZXggZ2xzbGFuZworcnVuX2Jpc29uIGdsc2xhbmcKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mMjIxMTk5MDkzYzIxYWI5N2Y4MjFhNmZiNmIxODQ4MjE2ZTIyODUxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvZ2xzbGFuZy5oCkBAIC0wLDAgKzEsMTYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCitzdHJ1Y3Qg
VFBhcnNlQ29udGV4dDsKK2V4dGVybiBpbnQgZ2xzbGFuZ19pbml0aWFsaXplKFRQYXJzZUNvbnRl
eHQqIGNvbnRleHQpOworZXh0ZXJuIGludCBnbHNsYW5nX2ZpbmFsaXplKFRQYXJzZUNvbnRleHQq
IGNvbnRleHQpOworCitleHRlcm4gaW50IGdsc2xhbmdfc2NhbihzaXplX3QgY291bnQsCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGludCBsZW5ndGhbXSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOworZXh0ZXJuIGludCBnbHNsYW5nX3BhcnNlKFRQ
YXJzZUNvbnRleHQqIGNvbnRleHQpOworCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nLmwgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nLmwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmI2
MjNlYzQxMDYyYmU2Y2E4OWQ4MjU4NDczYWI4MGJhNzdhZDFkZQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcu
bApAQCAtMCwwICsxLDM1NSBAQAorLyoKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK1RoaXMgZmlsZSBj
b250YWlucyB0aGUgTGV4IHNwZWNpZmljYXRpb24gZm9yIEdMU0wgRVMuCitCYXNlZCBvbiBBTlNJ
IEMgZ3JhbW1hciwgTGV4IHNwZWNpZmljYXRpb246CitodHRwOi8vd3d3Lmx5c2F0b3IubGl1LnNl
L2MvQU5TSS1DLWdyYW1tYXItbC5odG1sCisKK0lGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBB
TFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaCwKK1dISUNIIEdFTkVSQVRFUyBUSEUg
R0xTTCBFUyBMRVhFUiAoZ2xzbGFuZ19sZXguY3BwKS4KKyovCisKKyV0b3B7CisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5z
aC4gRE8gTk9UIEVESVQhCisKKy8vIElnbm9yZSBlcnJvcnMgaW4gYXV0by1nZW5lcmF0ZWQgY29k
ZS4KKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVk
ICItV3VudXNlZC1mdW5jdGlvbiIKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1
bnVzZWQtdmFyaWFibGUiCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc3dpdGNo
LWVudW0iCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6
IDQwNjUpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDE4OSkKKyNwcmFnbWEgd2FybmluZyhk
aXNhYmxlOiA0NTA1KQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEpCisjZW5kaWYKK30K
KworJXsKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcuaCIKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L3ByZXByb2Nlc3Nvci9Ub2tlbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdXRp
bC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuaCIKKworLyog
d2luZG93cyBvbmx5IHByYWdtYSAqLworI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmco
ZGlzYWJsZSA6IDQxMDIpCisjZW5kaWYKKworI2RlZmluZSBZWV9VU0VSX0FDVElPTiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB5eWxsb2MtPmZpcnN0X2ZpbGUgPSB5eWxs
b2MtPmxhc3RfZmlsZSA9IHl5Y29sdW1uOyBcCisgICAgeXlsbG9jLT5maXJzdF9saW5lID0geXls
bG9jLT5sYXN0X2xpbmUgPSB5eWxpbmVubzsKKworI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3Vs
dCwgbWF4X3NpemUpIFwKKyAgICByZXN1bHQgPSBzdHJpbmdfaW5wdXQoYnVmLCBtYXhfc2l6ZSwg
eXlzY2FubmVyKTsKKworc3RhdGljIHl5X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCB5
eV9zaXplX3QgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcik7CitzdGF0aWMgaW50IGNoZWNr
X3R5cGUoeXlzY2FuX3QgeXlzY2FubmVyKTsKK3N0YXRpYyBpbnQgcmVzZXJ2ZWRfd29yZCh5eXNj
YW5fdCB5eXNjYW5uZXIpOworc3RhdGljIGludCBpbnRfY29uc3RhbnQoeXlzY2FuX3QgeXlzY2Fu
bmVyKTsKK3N0YXRpYyBpbnQgZmxvYXRfY29uc3RhbnQoeXlzY2FuX3QgeXlzY2FubmVyKTsKKyV9
CisKKyVvcHRpb24gbm95eXdyYXAgbm91bnB1dCBuZXZlci1pbnRlcmFjdGl2ZQorJW9wdGlvbiB5
eWxpbmVubyByZWVudHJhbnQgYmlzb24tYnJpZGdlIGJpc29uLWxvY2F0aW9ucworJW9wdGlvbiBl
eHRyYS10eXBlPSJUUGFyc2VDb250ZXh0KiIKKworRCAgICAgICAgICAgWzAtOV0KK0wgICAgICAg
ICAgIFthLXpBLVpfXQorSCAgICAgICAgICAgW2EtZkEtRjAtOV0KK0UgICAgICAgICAgIFtFZV1b
Ky1dP3tEfSsKK08gICAgICAgICAgIFswLTddCisKKyUlCisKKyJpbnZhcmlhbnQiICAgIHsgcmV0
dXJuIElOVkFSSUFOVDsgfQorImhpZ2hwIiAgICAgICAgeyByZXR1cm4gSElHSF9QUkVDSVNJT047
IH0KKyJtZWRpdW1wIiAgICAgIHsgcmV0dXJuIE1FRElVTV9QUkVDSVNJT047IH0KKyJsb3dwIiAg
ICAgICAgIHsgcmV0dXJuIExPV19QUkVDSVNJT047IH0KKyJwcmVjaXNpb24iICAgIHsgcmV0dXJu
IFBSRUNJU0lPTjsgfQorCisiYXR0cmlidXRlIiAgICB7IHJldHVybiBBVFRSSUJVVEU7IH0KKyJj
b25zdCIgICAgICAgIHsgcmV0dXJuIENPTlNUX1FVQUw7IH0KKyJ1bmlmb3JtIiAgICAgIHsgcmV0
dXJuIFVOSUZPUk07IH0KKyJ2YXJ5aW5nIiAgICAgIHsgcmV0dXJuIFZBUllJTkc7IH0KKworImJy
ZWFrIiAgICAgICAgeyByZXR1cm4gQlJFQUs7IH0KKyJjb250aW51ZSIgICAgIHsgcmV0dXJuIENP
TlRJTlVFOyB9CisiZG8iICAgICAgICAgICB7IHJldHVybiBETzsgfQorImZvciIgICAgICAgICAg
eyByZXR1cm4gRk9SOyB9Cisid2hpbGUiICAgICAgICB7IHJldHVybiBXSElMRTsgfQorCisiaWYi
ICAgICAgICAgICB7IHJldHVybiBJRjsgfQorImVsc2UiICAgICAgICAgeyByZXR1cm4gRUxTRTsg
fQorCisiaW4iICAgICAgICAgICB7IHJldHVybiBJTl9RVUFMOyB9Cisib3V0IiAgICAgICAgICB7
IHJldHVybiBPVVRfUVVBTDsgfQorImlub3V0IiAgICAgICAgeyByZXR1cm4gSU5PVVRfUVVBTDsg
fQorCisiZmxvYXQiICAgICAgICB7IHJldHVybiBGTE9BVF9UWVBFOyB9CisiaW50IiAgICAgICAg
ICB7IHJldHVybiBJTlRfVFlQRTsgfQorInZvaWQiICAgICAgICAgeyByZXR1cm4gVk9JRF9UWVBF
OyB9CisiYm9vbCIgICAgICAgICB7IHJldHVybiBCT09MX1RZUEU7IH0KKyJ0cnVlIiAgICAgICAg
IHsgeXlsdmFsLT5sZXguYiA9IHRydWU7ICByZXR1cm4gQk9PTENPTlNUQU5UOyB9CisiZmFsc2Ui
ICAgICAgICB7IHl5bHZhbC0+bGV4LmIgPSBmYWxzZTsgcmV0dXJuIEJPT0xDT05TVEFOVDsgfQor
CisiZGlzY2FyZCIgICAgICB7IHJldHVybiBESVNDQVJEOyB9CisicmV0dXJuIiAgICAgICB7IHJl
dHVybiBSRVRVUk47IH0KKworIm1hdDIiICAgICAgICAgeyByZXR1cm4gTUFUUklYMjsgfQorIm1h
dDMiICAgICAgICAgeyByZXR1cm4gTUFUUklYMzsgfQorIm1hdDQiICAgICAgICAgeyByZXR1cm4g
TUFUUklYNDsgfQorCisidmVjMiIgICAgICAgICB7IHJldHVybiBWRUMyOyB9CisidmVjMyIgICAg
ICAgICB7IHJldHVybiBWRUMzOyB9CisidmVjNCIgICAgICAgICB7IHJldHVybiBWRUM0OyB9Cisi
aXZlYzIiICAgICAgICB7IHJldHVybiBJVkVDMjsgfQorIml2ZWMzIiAgICAgICAgeyByZXR1cm4g
SVZFQzM7IH0KKyJpdmVjNCIgICAgICAgIHsgcmV0dXJuIElWRUM0OyB9CisiYnZlYzIiICAgICAg
ICB7IHJldHVybiBCVkVDMjsgfQorImJ2ZWMzIiAgICAgICAgeyByZXR1cm4gQlZFQzM7IH0KKyJi
dmVjNCIgICAgICAgIHsgcmV0dXJuIEJWRUM0OyB9CisKKyJzYW1wbGVyMkQiICAgICAgICAgIHsg
cmV0dXJuIFNBTVBMRVIyRDsgfQorInNhbXBsZXJDdWJlIiAgICAgICAgeyByZXR1cm4gU0FNUExF
UkNVQkU7IH0KKyJzYW1wbGVyRXh0ZXJuYWxPRVMiIHsgcmV0dXJuIFNBTVBMRVJfRVhURVJOQUxf
T0VTOyB9Cisic2FtcGxlcjJEUmVjdCIgICAgICB7IHJldHVybiBTQU1QTEVSMkRSRUNUOyB9CisK
KyJzdHJ1Y3QiICAgICAgIHsgcmV0dXJuIFNUUlVDVDsgfQorCisiYXNtIiAgICAgICAgICB7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworImNsYXNzIiAgICAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisidW5pb24iICAgICAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJlbnVtIiAgICAgICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInR5cGVkZWYiICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9CisidGVtcGxhdGUiICAgICB7IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KKyJ0aGlzIiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQorInBhY2tlZCIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9CisKKyJnb3RvIiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQorInN3aXRjaCIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
CisiZGVmYXVsdCIgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwor
ImlubGluZSIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisibm9p
bmxpbmUiICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJ2b2xhdGls
ZSIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInB1YmxpYyIgICAg
ICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic3RhdGljIiAgICAgICB7
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJleHRlcm4iICAgICAgIHsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImV4dGVybmFsIiAgICAgeyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiaW50ZXJmYWNlIiAgICB7IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJmbGF0IiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQorCisibG9uZyIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KKyJzaG9ydCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQorImRvdWJsZSIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9CisiaGFsZiIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KKyJmaXhlZCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQorInVuc2lnbmVkIiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisi
c3VwZXJwIiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworImlu
cHV0IiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisib3V0cHV0
IiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworImh2ZWMyIiAg
ICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiaHZlYzMiICAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJodmVjNCIgICAgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImR2ZWMyIiAgICAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZHZlYzMiICAgICAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJkdmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImZ2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9CisiZnZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KKyJmdmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQorCisic2FtcGxlcjFEIiAgICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxlcjNEIiAgICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxlcjFEU2hhZG93IiAgICAgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxlcjJEU2hhZG93IiAgICAgeyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxlcjNEUmVjdCIgICAgICAgeyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxlcjJEUmVjdFNoYWRvdyIgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisKKyJzaXplb2YiICAgICAgIHsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImNhc3QiICAgICAgICAgeyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisKKyJuYW1lc3BhY2UiICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInVzaW5nIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9CisKK3tMfSh7TH18e0R9KSogICAgICAgeworICAgeXlsdmFsLT5s
ZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsgCisgICByZXR1cm4gY2hlY2tfdHlw
ZSh5eXNjYW5uZXIpOworfQorCiswW3hYXXtIfSsgICAgICAgICB7IHJldHVybiBpbnRfY29uc3Rh
bnQoeXlzY2FubmVyKTsgfQorMHtPfSsgICAgICAgICAgICAgeyByZXR1cm4gaW50X2NvbnN0YW50
KHl5c2Nhbm5lcik7IH0KK3tEfSsgICAgICAgICAgICAgIHsgcmV0dXJuIGludF9jb25zdGFudCh5
eXNjYW5uZXIpOyB9CisKK3tEfSt7RX0gICAgICAgICAgIHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50
KHl5c2Nhbm5lcik7IH0KK3tEfSsiLiJ7RH0qKHtFfSk/IHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50
KHl5c2Nhbm5lcik7IH0KKyIuIntEfSsoe0V9KT8gICAgIHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50
KHl5c2Nhbm5lcik7IH0KKworIis9IiAgICAgICAgICAgIHsgcmV0dXJuIEFERF9BU1NJR047IH0K
KyItPSIgICAgICAgICAgICB7IHJldHVybiBTVUJfQVNTSUdOOyB9CisiKj0iICAgICAgICAgICAg
eyByZXR1cm4gTVVMX0FTU0lHTjsgfQorIi89IiAgICAgICAgICAgIHsgcmV0dXJuIERJVl9BU1NJ
R047IH0KKyIlPSIgICAgICAgICAgICB7IHJldHVybiBNT0RfQVNTSUdOOyB9CisiPDw9IiAgICAg
ICAgICAgeyByZXR1cm4gTEVGVF9BU1NJR047IH0KKyI+Pj0iICAgICAgICAgICB7IHJldHVybiBS
SUdIVF9BU1NJR047IH0KKyImPSIgICAgICAgICAgICB7IHJldHVybiBBTkRfQVNTSUdOOyB9Cisi
Xj0iICAgICAgICAgICAgeyByZXR1cm4gWE9SX0FTU0lHTjsgfQorInw9IiAgICAgICAgICAgIHsg
cmV0dXJuIE9SX0FTU0lHTjsgfQorCisiKysiICAgICAgICAgICAgeyByZXR1cm4gSU5DX09QOyB9
CisiLS0iICAgICAgICAgICAgeyByZXR1cm4gREVDX09QOyB9CisiJiYiICAgICAgICAgICAgeyBy
ZXR1cm4gQU5EX09QOyB9CisifHwiICAgICAgICAgICAgeyByZXR1cm4gT1JfT1A7IH0KKyJeXiIg
ICAgICAgICAgICB7IHJldHVybiBYT1JfT1A7IH0KKyI8PSIgICAgICAgICAgICB7IHJldHVybiBM
RV9PUDsgfQorIj49IiAgICAgICAgICAgIHsgcmV0dXJuIEdFX09QOyB9CisiPT0iICAgICAgICAg
ICAgeyByZXR1cm4gRVFfT1A7IH0KKyIhPSIgICAgICAgICAgICB7IHJldHVybiBORV9PUDsgfQor
Ijw8IiAgICAgICAgICAgIHsgcmV0dXJuIExFRlRfT1A7IH0KKyI+PiIgICAgICAgICAgICB7IHJl
dHVybiBSSUdIVF9PUDsgfQorIjsiICAgICAgICAgICAgIHsgcmV0dXJuIFNFTUlDT0xPTjsgfQor
KCJ7InwiPCUiKSAgICAgIHsgcmV0dXJuIExFRlRfQlJBQ0U7IH0KKygifSJ8IiU+IikgICAgICB7
IHJldHVybiBSSUdIVF9CUkFDRTsgfQorIiwiICAgICAgICAgeyByZXR1cm4gQ09NTUE7IH0KKyI6
IiAgICAgICAgIHsgcmV0dXJuIENPTE9OOyB9CisiPSIgICAgICAgICB7IHJldHVybiBFUVVBTDsg
fQorIigiICAgICAgICAgeyByZXR1cm4gTEVGVF9QQVJFTjsgfQorIikiICAgICAgICAgeyByZXR1
cm4gUklHSFRfUEFSRU47IH0KKygiWyJ8Ijw6IikgIHsgcmV0dXJuIExFRlRfQlJBQ0tFVDsgfQor
KCJdInwiOj4iKSAgeyByZXR1cm4gUklHSFRfQlJBQ0tFVDsgfQorIi4iICAgICAgICAgeyByZXR1
cm4gRE9UOyB9CisiISIgICAgICAgICB7IHJldHVybiBCQU5HOyB9CisiLSIgICAgICAgICB7IHJl
dHVybiBEQVNIOyB9CisifiIgICAgICAgICB7IHJldHVybiBUSUxERTsgfQorIisiICAgICAgICAg
eyByZXR1cm4gUExVUzsgfQorIioiICAgICAgICAgeyByZXR1cm4gU1RBUjsgfQorIi8iICAgICAg
ICAgeyByZXR1cm4gU0xBU0g7IH0KKyIlIiAgICAgICAgIHsgcmV0dXJuIFBFUkNFTlQ7IH0KKyI8
IiAgICAgICAgIHsgcmV0dXJuIExFRlRfQU5HTEU7IH0KKyI+IiAgICAgICAgIHsgcmV0dXJuIFJJ
R0hUX0FOR0xFOyB9CisifCIgICAgICAgICB7IHJldHVybiBWRVJUSUNBTF9CQVI7IH0KKyJeIiAg
ICAgICAgIHsgcmV0dXJuIENBUkVUOyB9CisiJiIgICAgICAgICB7IHJldHVybiBBTVBFUlNBTkQ7
IH0KKyI/IiAgICAgICAgIHsgcmV0dXJuIFFVRVNUSU9OOyB9CisKK1sgXHRcdlxuXGZccl0geyB9
Cis8PEVPRj4+ICAgIHsgeXl0ZXJtaW5hdGUoKTsgfQorLiAgICAgICAgICB7IGFzc2VydChmYWxz
ZSk7IHJldHVybiAwOyB9CisKKyUlCisKK3l5X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciogYnVm
LCB5eV9zaXplX3QgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikgeworICAgIHBwOjpUb2tl
biB0b2tlbjsKKyAgICB5eWdldF9leHRyYSh5eXNjYW5uZXIpLT5wcmVwcm9jZXNzb3IubGV4KCZ0
b2tlbik7CisgICAgeXlfc2l6ZV90IGxlbiA9IHRva2VuLnR5cGUgPT0gcHA6OlRva2VuOjpMQVNU
ID8gMCA6IHRva2VuLnRleHQuc2l6ZSgpOworICAgIGlmIChsZW4gPCBtYXhfc2l6ZSkKKyAgICAg
ICAgbWVtY3B5KGJ1ZiwgdG9rZW4udGV4dC5jX3N0cigpLCBsZW4pOworICAgIHl5c2V0X2NvbHVt
bih0b2tlbi5sb2NhdGlvbi5maWxlLCB5eXNjYW5uZXIpOworICAgIHl5c2V0X2xpbmVubyh0b2tl
bi5sb2NhdGlvbi5saW5lLCB5eXNjYW5uZXIpOworCisgICAgaWYgKGxlbiA+PSBtYXhfc2l6ZSkK
KyAgICAgICAgWVlfRkFUQUxfRVJST1IoIklucHV0IGJ1ZmZlciBvdmVyZmxvdyIpOworICAgIGVs
c2UgaWYgKGxlbiA+IDApCisgICAgICAgIGJ1ZltsZW4rK10gPSAnICc7CisgICAgcmV0dXJuIGxl
bjsKK30KKworaW50IGNoZWNrX3R5cGUoeXlzY2FuX3QgeXlzY2FubmVyKSB7CisgICAgc3RydWN0
IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgeXlzY2FubmVyOworICAgIAorICAg
IGludCB0b2tlbiA9IElERU5USUZJRVI7CisgICAgVFN5bWJvbCogc3ltYm9sID0geXlleHRyYS0+
c3ltYm9sVGFibGUuZmluZCh5eXRleHQpOworICAgIGlmIChzeW1ib2wgJiYgc3ltYm9sLT5pc1Zh
cmlhYmxlKCkpIHsKKyAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PFRW
YXJpYWJsZSo+KHN5bWJvbCk7CisgICAgICAgIGlmICh2YXJpYWJsZS0+aXNVc2VyVHlwZSgpKQor
ICAgICAgICAgICAgdG9rZW4gPSBUWVBFX05BTUU7CisgICAgfQorICAgIHl5bHZhbC0+bGV4LnN5
bWJvbCA9IHN5bWJvbDsKKyAgICByZXR1cm4gdG9rZW47Cit9CisKK2ludCByZXNlcnZlZF93b3Jk
KHl5c2Nhbl90IHl5c2Nhbm5lcikgeworICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopIHl5c2Nhbm5lcjsKKworICAgIHl5ZXh0cmEtPmVycm9yKCp5eWxsb2MsICJJ
bGxlZ2FsIHVzZSBvZiByZXNlcnZlZCB3b3JkIiwgeXl0ZXh0LCAiIik7CisgICAgeXlleHRyYS0+
cmVjb3ZlcigpOworICAgIHJldHVybiAwOworfQorCit2b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxv
YywgVFBhcnNlQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKSB7CisgICAgY29u
dGV4dC0+ZXJyb3IoKmxsb2MsIHJlYXNvbiwgeXlnZXRfdGV4dChjb250ZXh0LT5zY2FubmVyKSk7
CisgICAgY29udGV4dC0+cmVjb3ZlcigpOworfQorCitpbnQgaW50X2NvbnN0YW50KHl5c2Nhbl90
IHl5c2Nhbm5lcikgeworICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopIHl5c2Nhbm5lcjsKKworICAgIGlmICghYXRvaV9jbGFtcCh5eXRleHQsICYoeXlsdmFsLT5s
ZXguaSkpKQorICAgICAgICB5eWV4dHJhLT53YXJuaW5nKCp5eWxsb2MsICJJbnRlZ2VyIG92ZXJm
bG93IiwgeXl0ZXh0LCAiIik7CisgICAgcmV0dXJuIElOVENPTlNUQU5UOworfQorCitpbnQgZmxv
YXRfY29uc3RhbnQoeXlzY2FuX3QgeXlzY2FubmVyKSB7CisgICAgc3RydWN0IHl5Z3V0c190KiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190KikgeXlzY2FubmVyOworCisgICAgaWYgKCFhdG9mX2NsYW1w
KHl5dGV4dCwgJih5eWx2YWwtPmxleC5mKSkpCisgICAgICAgIHl5ZXh0cmEtPndhcm5pbmcoKnl5
bGxvYywgIkZsb2F0IG92ZXJmbG93IiwgeXl0ZXh0LCAiIik7CisgICAgcmV0dXJuIEZMT0FUQ09O
U1RBTlQ7Cit9CisKK2ludCBnbHNsYW5nX2luaXRpYWxpemUoVFBhcnNlQ29udGV4dCogY29udGV4
dCkgeworICAgIHl5c2Nhbl90IHNjYW5uZXIgPSBOVUxMOworICAgIGlmICh5eWxleF9pbml0X2V4
dHJhKGNvbnRleHQsICZzY2FubmVyKSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBjb250ZXh0
LT5zY2FubmVyID0gc2Nhbm5lcjsKKyAgICByZXR1cm4gMDsKK30KKworaW50IGdsc2xhbmdfZmlu
YWxpemUoVFBhcnNlQ29udGV4dCogY29udGV4dCkgeworICAgIHl5c2Nhbl90IHNjYW5uZXIgPSBj
b250ZXh0LT5zY2FubmVyOworICAgIGlmIChzY2FubmVyID09IE5VTEwpIHJldHVybiAwOworICAg
IAorICAgIGNvbnRleHQtPnNjYW5uZXIgPSBOVUxMOworICAgIHl5bGV4X2Rlc3Ryb3koc2Nhbm5l
cik7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IGdsc2xhbmdfc2NhbihzaXplX3QgY291bnQs
IGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAg
ICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKKyAgICB5eXJlc3RhcnQoTlVMTCwg
Y29udGV4dC0+c2Nhbm5lcik7CisgICAgeXlzZXRfY29sdW1uKDAsIGNvbnRleHQtPnNjYW5uZXIp
OworICAgIHl5c2V0X2xpbmVubygxLCBjb250ZXh0LT5zY2FubmVyKTsKKworICAgIC8vIEluaXRp
YWxpemUgcHJlcHJvY2Vzc29yLgorICAgIGlmICghY29udGV4dC0+cHJlcHJvY2Vzc29yLmluaXQo
Y291bnQsIHN0cmluZywgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY29udGV4dC0+
cHJlcHJvY2Vzc29yLnNldE1heFRva2VuTGVuZ3RoKFNIX01BWF9UT0tFTl9MRU5HVEgpOworCisg
ICAgLy8gRGVmaW5lIGV4dGVuc2lvbiBtYWNyb3MuCisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2
aW9yJiBleHRCZWhhdmlvciA9IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgZm9y
IChURXh0ZW5zaW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRCZWhhdmlvci5i
ZWdpbigpOworICAgICAgICAgaXRlciAhPSBleHRCZWhhdmlvci5lbmQoKTsgKytpdGVyKSB7Cisg
ICAgICAgIGNvbnRleHQtPnByZXByb2Nlc3Nvci5wcmVkZWZpbmVNYWNybyhpdGVyLT5maXJzdC5j
X3N0cigpLCAxKTsKKyAgICB9CisgICAgaWYgKGNvbnRleHQtPmZyYWdtZW50UHJlY2lzaW9uSGln
aCkKKyAgICAgICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnByZWRlZmluZU1hY3JvKCJHTF9GUkFH
TUVOVF9QUkVDSVNJT05fSElHSCIsIDEpOworCisgICAgcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xh
bmcueSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2ds
c2xhbmcueQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43NjE0ZmYzNDQ3ZjVjZDE2YzQxZWM0ZjFjNDZhNDA5ZTdlMWM5
MjA5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvZ2xzbGFuZy55CkBAIC0wLDAgKzEsMjAxNCBAQAorLyoKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgWWFjYyBncmFtbWFyIGZvciBHTFNM
IEVTLgorQmFzZWQgb24gQU5TSSBDIFlhY2MgZ3JhbW1hcjoKK2h0dHA6Ly93d3cubHlzYXRvci5s
aXUuc2UvYy9BTlNJLUMtZ3JhbW1hci15Lmh0bWwKKworSUYgWU9VIE1PRElGWSBUSElTIEZJTEUg
WU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNoLAorV0hJQ0ggR0VORVJBVEVT
IFRIRSBHTFNMIEVTIFBBUlNFUiAoZ2xzbGFuZ190YWIuY3BwIEFORCBnbHNsYW5nX3RhYi5oKS4K
KyovCisKKyV7CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5l
cmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKKworLy8gSWdub3JlIGVy
cm9ycyBpbiBhdXRvLWdlbmVyYXRlZCBjb2RlLgorI2lmIGRlZmluZWQoX19HTlVDX18pCisjcHJh
Z21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLWZ1bmN0aW9uIgorI3ByYWdtYSBH
Q0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC12YXJpYWJsZSIKKyNwcmFnbWEgR0NDIGRp
YWdub3N0aWMgaWdub3JlZCAiLVdzd2l0Y2gtZW51bSIKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIp
CisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDA2NSkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxl
OiA0MTg5KQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ1MDUpCisjcHJhZ21hIHdhcm5pbmco
ZGlzYWJsZTogNDcwMSkKKyNlbmRpZgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9T
eW1ib2xUYWJsZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0
LmgiCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisKKyNkZWZpbmUgWVlFTkFCTEVf
TkxTIDAKKworI2RlZmluZSBZWUxFWF9QQVJBTSBjb250ZXh0LT5zY2FubmVyCislfQorCislZXhw
ZWN0IDEgLyogT25lIHNoaWZ0IHJlZHVjZSBjb25mbGljdCBiZWNhdXNlIG9mIGlmIHwgZWxzZSAq
LworJXB1cmUtcGFyc2VyCislcGFyc2UtcGFyYW0ge1RQYXJzZUNvbnRleHQqIGNvbnRleHR9Cisl
bG9jYXRpb25zCisKKyVjb2RlIHJlcXVpcmVzIHsKKyNkZWZpbmUgWVlMVFlQRSBUU291cmNlTG9j
CisjZGVmaW5lIFlZTFRZUEVfSVNfREVDTEFSRUQgMQorI2RlZmluZSBTSF9NQVhfVE9LRU5fTEVO
R1RIIDI1NiAgLy8gV2ViR0wgc3BlYy4KK30KKworJXVuaW9uIHsKKyAgICBzdHJ1Y3QgeworICAg
ICAgICB1bmlvbiB7CisgICAgICAgICAgICBUU3RyaW5nICpzdHJpbmc7CisgICAgICAgICAgICBm
bG9hdCBmOworICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICBib29sIGI7CisgICAgICAg
IH07CisgICAgICAgIFRTeW1ib2wqIHN5bWJvbDsKKyAgICB9IGxleDsKKyAgICBzdHJ1Y3Qgewor
ICAgICAgICBUT3BlcmF0b3Igb3A7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFRJbnRl
cm1Ob2RlKiBpbnRlcm1Ob2RlOworICAgICAgICAgICAgVEludGVybU5vZGVQYWlyIG5vZGVQYWly
OworICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbnRlcm1UeXBlZE5vZGU7CisgICAgICAgICAg
ICBUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGU7CisgICAgICAgIH07CisgICAgICAg
IHVuaW9uIHsKKyAgICAgICAgICAgIFRQdWJsaWNUeXBlIHR5cGU7CisgICAgICAgICAgICBUUHJl
Y2lzaW9uIHByZWNpc2lvbjsKKyAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyOworICAg
ICAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlvbjsKKyAgICAgICAgICAgIFRQYXJhbWV0ZXIgcGFy
YW07CisgICAgICAgICAgICBURmllbGQqIGZpZWxkOworICAgICAgICAgICAgVEZpZWxkTGlzdCog
ZmllbGRMaXN0OworICAgICAgICB9OworICAgIH0gaW50ZXJtOworfQorCisleworZXh0ZXJuIGlu
dCB5eWxleChZWVNUWVBFKiB5eWx2YWwsIFlZTFRZUEUqIHl5bGxvYywgdm9pZCogeXlzY2FubmVy
KTsKK2V4dGVybiB2b2lkIHl5ZXJyb3IoWVlMVFlQRSogeXlsbG9jLCBUUGFyc2VDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pOworCisjZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1
cnJlbnQsIFJocywgTikgICAgICAgICAgICAgICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmIChZ
WUlEKE4pKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIChDdXJyZW50KS5maXJzdF9maWxlID0gWVlSSFNMT0MoUmhzLCAxKS5maXJzdF9maWxlOyAg
XAorICAgICAgICAoQ3VycmVudCkuZmlyc3RfbGluZSA9IFlZUkhTTE9DKFJocywgMSkuZmlyc3Rf
bGluZTsgIFwKKyAgICAgICAgKEN1cnJlbnQpLmxhc3RfZmlsZSA9IFlZUkhTTE9DKFJocywgTiku
bGFzdF9maWxlOyAgICBcCisgICAgICAgIChDdXJyZW50KS5sYXN0X2xpbmUgPSBZWVJIU0xPQyhS
aHMsIE4pLmxhc3RfbGluZTsgICAgXAorICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGVsc2UgeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChDdXJyZW50KS5m
aXJzdF9maWxlID0gWVlSSFNMT0MoUmhzLCAwKS5sYXN0X2ZpbGU7ICAgXAorICAgICAgICAoQ3Vy
cmVudCkuZmlyc3RfbGluZSA9IFlZUkhTTE9DKFJocywgMCkubGFzdF9saW5lOyAgIFwKKyAgICAg
ICAgKEN1cnJlbnQpLmxhc3RfZmlsZSA9IFlZUkhTTE9DKFJocywgMCkubGFzdF9maWxlOyAgICBc
CisgICAgICAgIChDdXJyZW50KS5sYXN0X2xpbmUgPSBZWVJIU0xPQyhSaHMsIDApLmxhc3RfbGlu
ZTsgICAgXAorICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBWRVJURVhfT05MWShTLCBM
KSB7ICBcCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgIT0gU0hfVkVSVEVYX1NIQURFUikg
eyAgXAorICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXggc2hh
ZGVycyBvbmx5ICIsIFMpOyAgXAorICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCisgICAg
fSAgXAorfQorCisjZGVmaW5lIEZSQUdfT05MWShTLCBMKSB7ICBcCisgICAgaWYgKGNvbnRleHQt
PnNoYWRlclR5cGUgIT0gU0hfRlJBR01FTlRfU0hBREVSKSB7ICBcCisgICAgICAgIGNvbnRleHQt
PmVycm9yKEwsICIgc3VwcG9ydGVkIGluIGZyYWdtZW50IHNoYWRlcnMgb25seSAiLCBTKTsgIFwK
KyAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAorICAgIH0gIFwKK30KKyV9CisKKyV0b2tl
biA8bGV4PiBJTlZBUklBTlQgSElHSF9QUkVDSVNJT04gTUVESVVNX1BSRUNJU0lPTiBMT1dfUFJF
Q0lTSU9OIFBSRUNJU0lPTgorJXRva2VuIDxsZXg+IEFUVFJJQlVURSBDT05TVF9RVUFMIEJPT0xf
VFlQRSBGTE9BVF9UWVBFIElOVF9UWVBFCisldG9rZW4gPGxleD4gQlJFQUsgQ09OVElOVUUgRE8g
RUxTRSBGT1IgSUYgRElTQ0FSRCBSRVRVUk4KKyV0b2tlbiA8bGV4PiBCVkVDMiBCVkVDMyBCVkVD
NCBJVkVDMiBJVkVDMyBJVkVDNCBWRUMyIFZFQzMgVkVDNAorJXRva2VuIDxsZXg+IE1BVFJJWDIg
TUFUUklYMyBNQVRSSVg0IElOX1FVQUwgT1VUX1FVQUwgSU5PVVRfUVVBTCBVTklGT1JNIFZBUllJ
TkcKKyV0b2tlbiA8bGV4PiBTVFJVQ1QgVk9JRF9UWVBFIFdISUxFCisldG9rZW4gPGxleD4gU0FN
UExFUjJEIFNBTVBMRVJDVUJFIFNBTVBMRVJfRVhURVJOQUxfT0VTIFNBTVBMRVIyRFJFQ1QKKwor
JXRva2VuIDxsZXg+IElERU5USUZJRVIgVFlQRV9OQU1FIEZMT0FUQ09OU1RBTlQgSU5UQ09OU1RB
TlQgQk9PTENPTlNUQU5UCisldG9rZW4gPGxleD4gTEVGVF9PUCBSSUdIVF9PUAorJXRva2VuIDxs
ZXg+IElOQ19PUCBERUNfT1AgTEVfT1AgR0VfT1AgRVFfT1AgTkVfT1AKKyV0b2tlbiA8bGV4PiBB
TkRfT1AgT1JfT1AgWE9SX09QIE1VTF9BU1NJR04gRElWX0FTU0lHTiBBRERfQVNTSUdOCisldG9r
ZW4gPGxleD4gTU9EX0FTU0lHTiBMRUZUX0FTU0lHTiBSSUdIVF9BU1NJR04gQU5EX0FTU0lHTiBY
T1JfQVNTSUdOIE9SX0FTU0lHTgorJXRva2VuIDxsZXg+IFNVQl9BU1NJR04KKworJXRva2VuIDxs
ZXg+IExFRlRfUEFSRU4gUklHSFRfUEFSRU4gTEVGVF9CUkFDS0VUIFJJR0hUX0JSQUNLRVQgTEVG
VF9CUkFDRSBSSUdIVF9CUkFDRSBET1QKKyV0b2tlbiA8bGV4PiBDT01NQSBDT0xPTiBFUVVBTCBT
RU1JQ09MT04gQkFORyBEQVNIIFRJTERFIFBMVVMgU1RBUiBTTEFTSCBQRVJDRU5UCisldG9rZW4g
PGxleD4gTEVGVF9BTkdMRSBSSUdIVF9BTkdMRSBWRVJUSUNBTF9CQVIgQ0FSRVQgQU1QRVJTQU5E
IFFVRVNUSU9OCisKKyV0eXBlIDxsZXg+IGlkZW50aWZpZXIKKyV0eXBlIDxpbnRlcm0+IGFzc2ln
bm1lbnRfb3BlcmF0b3IgdW5hcnlfb3BlcmF0b3IKKyV0eXBlIDxpbnRlcm0uaW50ZXJtVHlwZWRO
b2RlPiB2YXJpYWJsZV9pZGVudGlmaWVyIHByaW1hcnlfZXhwcmVzc2lvbiBwb3N0Zml4X2V4cHJl
c3Npb24KKyV0eXBlIDxpbnRlcm0uaW50ZXJtVHlwZWROb2RlPiBleHByZXNzaW9uIGludGVnZXJf
ZXhwcmVzc2lvbiBhc3NpZ25tZW50X2V4cHJlc3Npb24KKyV0eXBlIDxpbnRlcm0uaW50ZXJtVHlw
ZWROb2RlPiB1bmFyeV9leHByZXNzaW9uIG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24gYWRkaXRp
dmVfZXhwcmVzc2lvbgorJXR5cGUgPGludGVybS5pbnRlcm1UeXBlZE5vZGU+IHJlbGF0aW9uYWxf
ZXhwcmVzc2lvbiBlcXVhbGl0eV9leHByZXNzaW9uCisldHlwZSA8aW50ZXJtLmludGVybVR5cGVk
Tm9kZT4gY29uZGl0aW9uYWxfZXhwcmVzc2lvbiBjb25zdGFudF9leHByZXNzaW9uCisldHlwZSA8
aW50ZXJtLmludGVybVR5cGVkTm9kZT4gbG9naWNhbF9vcl9leHByZXNzaW9uIGxvZ2ljYWxfeG9y
X2V4cHJlc3Npb24gbG9naWNhbF9hbmRfZXhwcmVzc2lvbgorJXR5cGUgPGludGVybS5pbnRlcm1U
eXBlZE5vZGU+IHNoaWZ0X2V4cHJlc3Npb24gYW5kX2V4cHJlc3Npb24gZXhjbHVzaXZlX29yX2V4
cHJlc3Npb24gaW5jbHVzaXZlX29yX2V4cHJlc3Npb24KKyV0eXBlIDxpbnRlcm0uaW50ZXJtVHlw
ZWROb2RlPiBmdW5jdGlvbl9jYWxsIGluaXRpYWxpemVyIGNvbmRpdGlvbiBjb25kaXRpb25vcHQK
KworJXR5cGUgPGludGVybS5pbnRlcm1Ob2RlPiB0cmFuc2xhdGlvbl91bml0IGZ1bmN0aW9uX2Rl
ZmluaXRpb24KKyV0eXBlIDxpbnRlcm0uaW50ZXJtTm9kZT4gc3RhdGVtZW50IHNpbXBsZV9zdGF0
ZW1lbnQKKyV0eXBlIDxpbnRlcm0uaW50ZXJtQWdncmVnYXRlPiAgc3RhdGVtZW50X2xpc3QgY29t
cG91bmRfc3RhdGVtZW50CisldHlwZSA8aW50ZXJtLmludGVybU5vZGU+IGRlY2xhcmF0aW9uX3N0
YXRlbWVudCBzZWxlY3Rpb25fc3RhdGVtZW50IGV4cHJlc3Npb25fc3RhdGVtZW50CisldHlwZSA8
aW50ZXJtLmludGVybU5vZGU+IGRlY2xhcmF0aW9uIGV4dGVybmFsX2RlY2xhcmF0aW9uCisldHlw
ZSA8aW50ZXJtLmludGVybU5vZGU+IGZvcl9pbml0X3N0YXRlbWVudCBjb21wb3VuZF9zdGF0ZW1l
bnRfbm9fbmV3X3Njb3BlCisldHlwZSA8aW50ZXJtLm5vZGVQYWlyPiBzZWxlY3Rpb25fcmVzdF9z
dGF0ZW1lbnQgZm9yX3Jlc3Rfc3RhdGVtZW50CisldHlwZSA8aW50ZXJtLmludGVybU5vZGU+IGl0
ZXJhdGlvbl9zdGF0ZW1lbnQganVtcF9zdGF0ZW1lbnQgc3RhdGVtZW50X25vX25ld19zY29wZSBz
dGF0ZW1lbnRfd2l0aF9zY29wZQorJXR5cGUgPGludGVybT4gc2luZ2xlX2RlY2xhcmF0aW9uIGlu
aXRfZGVjbGFyYXRvcl9saXN0CisKKyV0eXBlIDxpbnRlcm0+IHBhcmFtZXRlcl9kZWNsYXJhdGlv
biBwYXJhbWV0ZXJfZGVjbGFyYXRvciBwYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIKKyV0eXBlIDxp
bnRlcm0ucXVhbGlmaWVyPiBwYXJhbWV0ZXJfcXVhbGlmaWVyCisKKyV0eXBlIDxpbnRlcm0ucHJl
Y2lzaW9uPiBwcmVjaXNpb25fcXVhbGlmaWVyCisldHlwZSA8aW50ZXJtLnR5cGU+IHR5cGVfcXVh
bGlmaWVyIGZ1bGx5X3NwZWNpZmllZF90eXBlIHR5cGVfc3BlY2lmaWVyCisldHlwZSA8aW50ZXJt
LnR5cGU+IHR5cGVfc3BlY2lmaWVyX25vX3ByZWMgdHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkKKyV0
eXBlIDxpbnRlcm0udHlwZT4gc3RydWN0X3NwZWNpZmllcgorJXR5cGUgPGludGVybS5maWVsZD4g
c3RydWN0X2RlY2xhcmF0b3IKKyV0eXBlIDxpbnRlcm0uZmllbGRMaXN0PiBzdHJ1Y3RfZGVjbGFy
YXRvcl9saXN0IHN0cnVjdF9kZWNsYXJhdGlvbiBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdAorJXR5
cGUgPGludGVybS5mdW5jdGlvbj4gZnVuY3Rpb25faGVhZGVyIGZ1bmN0aW9uX2RlY2xhcmF0b3Ig
ZnVuY3Rpb25faWRlbnRpZmllcgorJXR5cGUgPGludGVybS5mdW5jdGlvbj4gZnVuY3Rpb25faGVh
ZGVyX3dpdGhfcGFyYW1ldGVycyBmdW5jdGlvbl9jYWxsX2hlYWRlcgorJXR5cGUgPGludGVybT4g
ZnVuY3Rpb25fY2FsbF9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIGZ1bmN0aW9uX2NhbGxfaGVhZGVy
X25vX3BhcmFtZXRlcnMgZnVuY3Rpb25fY2FsbF9nZW5lcmljIGZ1bmN0aW9uX3Byb3RvdHlwZQor
JXR5cGUgPGludGVybT4gZnVuY3Rpb25fY2FsbF9vcl9tZXRob2QKKworJXN0YXJ0IHRyYW5zbGF0
aW9uX3VuaXQKKyUlCisKK2lkZW50aWZpZXIKKyAgICA6IElERU5USUZJRVIKKyAgICB8IFRZUEVf
TkFNRQorCit2YXJpYWJsZV9pZGVudGlmaWVyCisgICAgOiBJREVOVElGSUVSIHsKKyAgICAgICAg
Ly8gVGhlIHN5bWJvbCB0YWJsZSBzZWFyY2ggd2FzIGRvbmUgaW4gdGhlIGxleGljYWwgcGhhc2UK
KyAgICAgICAgY29uc3QgVFN5bWJvbCAqc3ltYm9sID0gJDEuc3ltYm9sOworICAgICAgICBjb25z
dCBUVmFyaWFibGUgKnZhcmlhYmxlID0gMDsKKworICAgICAgICBpZiAoIXN5bWJvbCkKKyAgICAg
ICAgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJ1bmRlY2xhcmVkIGlkZW50aWZp
ZXIiLCAkMS5zdHJpbmctPmNfc3RyKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCFzeW1ib2wtPmlzVmFyaWFibGUoKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJ2YXJpYWJsZSBleHBlY3Rl
ZCIsICQxLnN0cmluZy0+Y19zdHIoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB2YXJpYWJs
ZSA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSo+KHN5bWJvbCk7CisKKyAgICAgICAgICAg
IGlmIChjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbih2YXJpYWJsZS0+Z2V0TmFtZSgp
KSAmJgorICAgICAgICAgICAgICAgICF2YXJpYWJsZS0+Z2V0RXh0ZW5zaW9uKCkuZW1wdHkoKSAm
JgorICAgICAgICAgICAgICAgIGNvbnRleHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soQDEsIHZhcmlh
YmxlLT5nZXRFeHRlbnNpb24oKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYg
KCF2YXJpYWJsZSkKKyAgICAgICAgeworICAgICAgICAgICAgVFR5cGUgdHlwZShFYnRGbG9hdCwg
RWJwVW5kZWZpbmVkKTsKKyAgICAgICAgICAgIFRWYXJpYWJsZSAqZmFrZVZhcmlhYmxlID0gbmV3
IFRWYXJpYWJsZSgkMS5zdHJpbmcsIHR5cGUpOworICAgICAgICAgICAgY29udGV4dC0+c3ltYm9s
VGFibGUuaW5zZXJ0KCpmYWtlVmFyaWFibGUpOworICAgICAgICAgICAgdmFyaWFibGUgPSBmYWtl
VmFyaWFibGU7CisgICAgICAgIH0KKworICAgICAgICBpZiAodmFyaWFibGUtPmdldFR5cGUoKS5n
ZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkKKyAgICAgICAgeworICAgICAgICAgICAgQ29uc3Rh
bnRVbmlvbiogY29uc3RBcnJheSA9IHZhcmlhYmxlLT5nZXRDb25zdFBvaW50ZXIoKTsKKyAgICAg
ICAgICAgIFRUeXBlIHQodmFyaWFibGUtPmdldFR5cGUoKSk7CisgICAgICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXksIHQsIEAxKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgICQkID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+
Z2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhcmlhYmxlLT5nZXRUeXBlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQDEpOworICAgICAgICB9CisKKyAgICAgICAgLy8gZG9uJ3QgZGVs
ZXRlICQxLnN0cmluZywgaXQncyB1c2VkIGJ5IGVycm9yIHJlY292ZXJ5LCBhbmQgdGhlIHBvb2wK
KyAgICAgICAgLy8gcG9wIHdpbGwgcmVjbGFpbSB0aGUgbWVtb3J5CisgICAgfQorICAgIDsKKwor
cHJpbWFyeV9leHByZXNzaW9uCisgICAgOiB2YXJpYWJsZV9pZGVudGlmaWVyIHsKKyAgICAgICAg
JCQgPSAkMTsKKyAgICB9CisgICAgfCBJTlRDT05TVEFOVCB7CisgICAgICAgIENvbnN0YW50VW5p
b24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgdW5pb25BcnJh
eS0+c2V0SUNvbnN0KCQxLmkpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBF
dnFDb25zdCksIEAxKTsKKyAgICB9CisgICAgfCBGTE9BVENPTlNUQU5UIHsKKyAgICAgICAgQ29u
c3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICB1
bmlvbkFycmF5LT5zZXRGQ29uc3QoJDEuZik7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QpLCBAMSk7CisgICAgfQorICAgIHwgQk9PTENPTlNUQU5UIHsKKyAg
ICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwor
ICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoJDEuYik7CisgICAgICAgICQkID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9v
bCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAxKTsKKyAgICB9CisgICAgfCBMRUZUX1BBUkVO
IGV4cHJlc3Npb24gUklHSFRfUEFSRU4geworICAgICAgICAkJCA9ICQyOworICAgIH0KKyAgICA7
CisKK3Bvc3RmaXhfZXhwcmVzc2lvbgorICAgIDogcHJpbWFyeV9leHByZXNzaW9uIHsKKyAgICAg
ICAgJCQgPSAkMTsKKyAgICB9CisgICAgfCBwb3N0Zml4X2V4cHJlc3Npb24gTEVGVF9CUkFDS0VU
IGludGVnZXJfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKKyAgICAgICAgJCQgPSBjb250ZXh0
LT5hZGRJbmRleEV4cHJlc3Npb24oJDEsIEAyLCAkMyk7CisgICAgfQorICAgIHwgZnVuY3Rpb25f
Y2FsbCB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgcG9zdGZpeF9leHByZXNzaW9u
IERPVCBpZGVudGlmaWVyIHsKKyAgICAgICAgaWYgKCQxLT5pc0FycmF5KCkpIHsKKyAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKEAzLCAiY2Fubm90IGFwcGx5IGRvdCBvcGVyYXRvciB0byBhbiBh
cnJheSIsICIuIik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoJDEtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgIFRWZWN0b3JGaWVs
ZHMgZmllbGRzOworICAgICAgICAgICAgaWYgKCEgY29udGV4dC0+cGFyc2VWZWN0b3JGaWVsZHMo
KiQzLnN0cmluZywgJDEtPmdldE5vbWluYWxTaXplKCksIGZpZWxkcywgQDMpKSB7CisgICAgICAg
ICAgICAgICAgZmllbGRzLm51bSA9IDE7CisgICAgICAgICAgICAgICAgZmllbGRzLm9mZnNldHNb
MF0gPSAwOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCQxLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZx
Q29uc3QpIHsgLy8gY29uc3RhbnQgZm9sZGluZyBmb3IgdmVjdG9yIGZpZWxkcworICAgICAgICAg
ICAgICAgICQkID0gY29udGV4dC0+YWRkQ29uc3RWZWN0b3JOb2RlKGZpZWxkcywgJDEsIEAzKTsK
KyAgICAgICAgICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgICQkID0gJDE7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgJCQtPnNl
dFR5cGUoVFR5cGUoJDEtPmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCksIEV2cUNv
bnN0LCAoaW50KSAoKiQzLnN0cmluZykuc2l6ZSgpKSk7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIFRTdHJpbmcgdmVjdG9yU3RyaW5nID0gKiQzLnN0cmluZzsKKyAgICAg
ICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZFN3aXp6bGUoZmllbGRzLCBAMyk7CisgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkSW5kZXgoRU9wVmVjdG9yU3dpenpsZSwgJDEsIGluZGV4LCBAMik7CisgICAg
ICAgICAgICAgICAgJCQtPnNldFR5cGUoVFR5cGUoJDEtPmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0
UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgKGludCkgdmVjdG9yU3RyaW5nLnNpemUoKSkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKCQxLT5pc01hdHJpeCgpKSB7CisgICAg
ICAgICAgICBUTWF0cml4RmllbGRzIGZpZWxkczsKKyAgICAgICAgICAgIGlmICghIGNvbnRleHQt
PnBhcnNlTWF0cml4RmllbGRzKCokMy5zdHJpbmcsICQxLT5nZXROb21pbmFsU2l6ZSgpLCBmaWVs
ZHMsIEAzKSkgeworICAgICAgICAgICAgICAgIGZpZWxkcy53aG9sZVJvdyA9IGZhbHNlOworICAg
ICAgICAgICAgICAgIGZpZWxkcy53aG9sZUNvbCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGZp
ZWxkcy5yb3cgPSAwOworICAgICAgICAgICAgICAgIGZpZWxkcy5jb2wgPSAwOworICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKGZpZWxkcy53aG9sZVJvdyB8fCBmaWVsZHMud2hvbGVDb2wpIHsKKyAgICAgICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcihAMiwgIiBub24tc2NhbGFyIGZpZWxkcyBub3QgaW1wbGVtZW50ZWQg
eWV0IiwgIi4iKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
ICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFd
OworICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdCgwKTsKKyAgICAgICAgICAg
ICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0
YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0
KSwgQDMpOworICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZElu
ZGV4KEVPcEluZGV4RGlyZWN0LCAkMSwgaW5kZXgsIEAyKTsKKyAgICAgICAgICAgICAgICAkJC0+
c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSxFdnFU
ZW1wb3JhcnksICQxLT5nZXROb21pbmFsU2l6ZSgpKSk7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvblsxXTsKKyAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoZmllbGRzLmNv
bCAqICQxLT5nZXROb21pbmFsU2l6ZSgpICsgZmllbGRzLnJvdyk7CisgICAgICAgICAgICAgICAg
VEludGVybVR5cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVu
aW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAz
KTsKKyAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChF
T3BJbmRleERpcmVjdCwgJDEsIGluZGV4LCBAMik7CisgICAgICAgICAgICAgICAgJCQtPnNldFR5
cGUoVFR5cGUoJDEtPmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCkpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICgkMS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3Ry
dWN0KSB7CisgICAgICAgICAgICBib29sIGZpZWxkRm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAg
IGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9ICQxLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCktPmZp
ZWxkcygpOworICAgICAgICAgICAgdW5zaWduZWQgaW50IGk7CisgICAgICAgICAgICBmb3IgKGkg
PSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZpZWxk
c1tpXS0+bmFtZSgpID09ICokMy5zdHJpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgZmllbGRG
b3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmaWVsZEZvdW5kKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCQxLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsK
KyAgICAgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRDb25zdFN0cnVjdCgqJDMuc3Ry
aW5nLCAkMSwgQDIpOworICAgICAgICAgICAgICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICAg
ICAgICAgJCQgPSAkMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKCpmaWVsZHNbaV0t
PnR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UgdGhlIHF1YWxpZmll
ciBvZiB0aGUgcmV0dXJuIHR5cGUsIG5vdCBvZiB0aGUgc3RydWN0dXJlIGZpZWxkCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBhcyB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24gaXMgc2hhcmVk
IGJldHdlZW4gdmFyaW91cyBzdHJ1Y3R1cmVzLgorICAgICAgICAgICAgICAgICAgICAgICAgJCQt
PmdldFR5cGVQb2ludGVyKCktPnNldFF1YWxpZmllcihFdnFDb25zdCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBD
b25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAg
ICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChpKTsKKyAgICAgICAgICAgICAgICAg
ICAgVEludGVybVR5cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFu
dFVuaW9uKHVuaW9uQXJyYXksICpmaWVsZHNbaV0tPnR5cGUoKSwgQDMpOworICAgICAgICAgICAg
ICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVj
dFN0cnVjdCwgJDEsIGluZGV4LCBAMik7CisgICAgICAgICAgICAgICAgICAgICQkLT5zZXRUeXBl
KCpmaWVsZHNbaV0tPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgIiBubyBzdWNoIGZpZWxk
IGluIHN0cnVjdHVyZSIsICQzLnN0cmluZy0+Y19zdHIoKSk7CisgICAgICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICQkID0gJDE7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgIiBmaWVs
ZCBzZWxlY3Rpb24gcmVxdWlyZXMgc3RydWN0dXJlLCB2ZWN0b3IsIG9yIG1hdHJpeCBvbiBsZWZ0
IGhhbmQgc2lkZSIsICQzLnN0cmluZy0+Y19zdHIoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9ICQxOworICAgICAgICB9CisgICAgICAgIC8vIGRv
bid0IGRlbGV0ZSAkMy5zdHJpbmcsIGl0J3MgZnJvbSB0aGUgcG9vbAorICAgIH0KKyAgICB8IHBv
c3RmaXhfZXhwcmVzc2lvbiBJTkNfT1AgeworICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJy
b3JDaGVjayhAMiwgIisrIiwgJDEpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdElu
Y3JlbWVudCwgJDEsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9
PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoQDIsICIrKyIsICQxLT5n
ZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgICAgICQkID0gJDE7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBwb3N0Zml4X2V4cHJl
c3Npb24gREVDX09QIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soQDIs
ICItLSIsICQxKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFBvc3REZWNyZW1lbnQsICQx
LCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAg
ICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKEAyLCAiLS0iLCAkMS0+Z2V0Q29tcGxldGVT
dHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAk
JCA9ICQxOworICAgICAgICB9CisgICAgfQorICAgIDsKKworaW50ZWdlcl9leHByZXNzaW9uCisg
ICAgOiBleHByZXNzaW9uIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPmludGVnZXJFcnJvckNoZWNr
KCQxLCAiW10iKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQg
PSAkMTsKKyAgICB9CisgICAgOworCitmdW5jdGlvbl9jYWxsCisgICAgOiBmdW5jdGlvbl9jYWxs
X29yX21ldGhvZCB7CisgICAgICAgIFRGdW5jdGlvbiogZm5DYWxsID0gJDEuZnVuY3Rpb247Cisg
ICAgICAgIFRPcGVyYXRvciBvcCA9IGZuQ2FsbC0+Z2V0QnVpbHRJbk9wKCk7CisKKyAgICAgICAg
aWYgKG9wICE9IEVPcE51bGwpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAvLyBUaGVuIHRoaXMgc2hvdWxkIGJlIGEgY29uc3RydWN0b3IuCisgICAgICAgICAgICAvLyBE
b24ndCBnbyB0aHJvdWdoIHRoZSBzeW1ib2wgdGFibGUgZm9yIGNvbnN0cnVjdG9ycy4KKyAgICAg
ICAgICAgIC8vIFRoZWlyIHBhcmFtZXRlcnMgd2lsbCBiZSB2ZXJpZmllZCBhbGdvcml0aG1pY2Fs
bHkuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgVFR5cGUgdHlwZShFYnRWb2lkLCBFYnBV
bmRlZmluZWQpOyAgLy8gdXNlIHRoaXMgdG8gZ2V0IHRoZSB0eXBlIGJhY2sKKyAgICAgICAgICAg
IGlmIChjb250ZXh0LT5jb25zdHJ1Y3RvckVycm9yQ2hlY2soQDEsICQxLmludGVybU5vZGUsICpm
bkNhbGwsIG9wLCAmdHlwZSkpIHsKKyAgICAgICAgICAgICAgICAkJCA9IDA7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gSXQncyBh
IGNvbnN0cnVjdG9yLCBvZiB0eXBlICd0eXBlJy4KKyAgICAgICAgICAgICAgICAvLworICAgICAg
ICAgICAgICAgICQkID0gY29udGV4dC0+YWRkQ29uc3RydWN0b3IoJDEuaW50ZXJtTm9kZSwgJnR5
cGUsIG9wLCBmbkNhbGwsIEAxKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCQk
ID09IDApIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAg
ICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IoMCwg
b3AsIEAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICQkLT5zZXRUeXBlKHR5cGUpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIE5vdCBhIGNv
bnN0cnVjdG9yLiAgRmluZCBpdCBpbiB0aGUgc3ltYm9sIHRhYmxlLgorICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiogZm5DYW5kaWRhdGU7CisgICAgICAgICAgICBi
b29sIGJ1aWx0SW47CisgICAgICAgICAgICBmbkNhbmRpZGF0ZSA9IGNvbnRleHQtPmZpbmRGdW5j
dGlvbihAMSwgZm5DYWxsLCAmYnVpbHRJbik7CisgICAgICAgICAgICBpZiAoZm5DYW5kaWRhdGUp
IHsKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIEEgZGVjbGFyZWQgZnVu
Y3Rpb24uCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICBpZiAoYnVpbHRJbiAm
JiAhZm5DYW5kaWRhdGUtPmdldEV4dGVuc2lvbigpLmVtcHR5KCkgJiYKKyAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjayhAMSwgZm5DYW5kaWRhdGUtPmdldEV4
dGVuc2lvbigpKSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG9wID0gZm5DYW5kaWRhdGUtPmdldEJ1
aWx0SW5PcCgpOworICAgICAgICAgICAgICAgIGlmIChidWlsdEluICYmIG9wICE9IEVPcE51bGwp
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gQSBmdW5j
dGlvbiBjYWxsIG1hcHBlZCB0byBhIGJ1aWx0LWluIG9wZXJhdGlvbi4KKyAgICAgICAgICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGZuQ2FuZGlkYXRlLT5nZXRQYXJhbUNv
dW50KCkgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFRyZWF0IGl0IGxpa2UgYSBidWlsdC1pbiB1bmFyeSBvcGVyYXRvci4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgob3AsICQxLmludGVybU5vZGUsIEAxLCBj
b250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJCQgPT0g
MCkgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRy
YUluZm9TdHJlYW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFt
IDw8ICJidWlsdCBpbiB1bmFyeSBvcGVyYXRvciBmdW5jdGlvbi4gIFR5cGU6ICIgPDwgc3RhdGlj
X2Nhc3Q8VEludGVybVR5cGVkKj4oJDEuaW50ZXJtTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0
cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCQxLmludGVybU5vZGUtPmdldExpbmUoKSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCAi
SW50ZXJuYWwgRXJyb3IiLCBleHRyYUluZm8uY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgWVlFUlJPUjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKCQxLmludGVybUFnZ3JlZ2F0ZSwgb3As
IEAxKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSByZWFsIGZ1bmN0aW9uIGNhbGwKKworICAg
ICAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVP
cGVyYXRvcigkMS5pbnRlcm1BZ2dyZWdhdGUsIEVPcEZ1bmN0aW9uQ2FsbCwgQDEpOworICAgICAg
ICAgICAgICAgICAgICAkJC0+c2V0VHlwZShmbkNhbmRpZGF0ZS0+Z2V0UmV0dXJuVHlwZSgpKTsK
KworICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGhvdyB3ZSBrbm93IHdoZXRoZXIgdGhl
IGdpdmVuIGZ1bmN0aW9uIGlzIGEgYnVpbHRJbiBmdW5jdGlvbiBvciBhIHVzZXIgZGVmaW5lZCBm
dW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAvLyBpZiBidWlsdEluID09IGZhbHNlLCBpdCdz
IGEgdXNlckRlZmluZWQgLT4gY291bGQgYmUgYW4gb3ZlcmxvYWRlZCBidWlsdEluIGZ1bmN0aW9u
IGFsc28KKyAgICAgICAgICAgICAgICAgICAgLy8gaWYgYnVpbHRJbiA9PSB0cnVlLCBpdCdzIGRl
ZmluaXRlbHkgYSBidWlsdEluIGZ1bmN0aW9uIHdpdGggRU9wTnVsbAorICAgICAgICAgICAgICAg
ICAgICBpZiAoIWJ1aWx0SW4pCisgICAgICAgICAgICAgICAgICAgICAgICAkJC0+Z2V0QXNBZ2dy
ZWdhdGUoKS0+c2V0VXNlckRlZmluZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgJCQtPmdldEFz
QWdncmVnYXRlKCktPnNldE5hbWUoZm5DYW5kaWRhdGUtPmdldE1hbmdsZWROYW1lKCkpOworCisg
ICAgICAgICAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbDsKKyAgICAgICAgICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBmbkNhbmRpZGF0ZS0+Z2V0UGFyYW1Db3VudCgpOyArK2kp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHF1YWwgPSBmbkNhbmRpZGF0ZS0+Z2V0UGFyYW0o
aSkudHlwZS0+Z2V0UXVhbGlmaWVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVh
bCA9PSBFdnFPdXQgfHwgcXVhbCA9PSBFdnFJbk91dCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCQkLT5nZXRMaW5lKCksICJhc3Np
Z24iLCAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKVtpXS0+Z2V0QXNUeXBlZCgp
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5p
bnRlcm1Ob2RlLT5nZXRMaW5lKCksICJDb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFzc2VkIGZv
ciAnb3V0JyBvciAnaW5vdXQnIHBhcmFtZXRlcnMuIiwgIkVycm9yIik7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoZm5D
YW5kaWRhdGUtPmdldFJldHVyblR5cGUoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIC8vIGVycm9yIG1lc3NhZ2Ugd2FzIHB1dCBvdXQgYnkgUGFGaW5kRnVuY3Rpb24o
KQorICAgICAgICAgICAgICAgIC8vIFB1dCBvbiBhIGR1bW15IG5vZGUgZm9yIGVycm9yIHJlY292
ZXJ5CisgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgwLjBm
KTsKKyAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFu
dFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0
KSwgQDEpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBkZWxldGUgZm5DYWxsOworICAgIH0KKyAgICA7CisKK2Z1
bmN0aW9uX2NhbGxfb3JfbWV0aG9kCisgICAgOiBmdW5jdGlvbl9jYWxsX2dlbmVyaWMgeworICAg
ICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBET1QgZnVuY3Rp
b25fY2FsbF9nZW5lcmljIHsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoQDMsICJtZXRob2RzIGFy
ZSBub3Qgc3VwcG9ydGVkIiwgIiIpOworICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICQkID0gJDM7CisgICAgfQorICAgIDsKKworZnVuY3Rpb25fY2FsbF9nZW5lcmljCisgICAg
OiBmdW5jdGlvbl9jYWxsX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMgUklHSFRfUEFSRU4geworICAg
ICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IGZ1bmN0aW9uX2NhbGxfaGVhZGVyX25vX3BhcmFt
ZXRlcnMgUklHSFRfUEFSRU4geworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICA7CisKK2Z1
bmN0aW9uX2NhbGxfaGVhZGVyX25vX3BhcmFtZXRlcnMKKyAgICA6IGZ1bmN0aW9uX2NhbGxfaGVh
ZGVyIFZPSURfVFlQRSB7CisgICAgICAgICQkLmZ1bmN0aW9uID0gJDE7CisgICAgICAgICQkLmlu
dGVybU5vZGUgPSAwOworICAgIH0KKyAgICB8IGZ1bmN0aW9uX2NhbGxfaGVhZGVyIHsKKyAgICAg
ICAgJCQuZnVuY3Rpb24gPSAkMTsKKyAgICAgICAgJCQuaW50ZXJtTm9kZSA9IDA7CisgICAgfQor
ICAgIDsKKworZnVuY3Rpb25fY2FsbF9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzCisgICAgOiBmdW5j
dGlvbl9jYWxsX2hlYWRlciBhc3NpZ25tZW50X2V4cHJlc3Npb24geworICAgICAgICBUUGFyYW1l
dGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUoJDItPmdldFR5cGUoKSkgfTsKKyAgICAgICAgJDEt
PmFkZFBhcmFtZXRlcihwYXJhbSk7CisgICAgICAgICQkLmZ1bmN0aW9uID0gJDE7CisgICAgICAg
ICQkLmludGVybU5vZGUgPSAkMjsKKyAgICB9CisgICAgfCBmdW5jdGlvbl9jYWxsX2hlYWRlcl93
aXRoX3BhcmFtZXRlcnMgQ09NTUEgYXNzaWdubWVudF9leHByZXNzaW9uIHsKKyAgICAgICAgVFBh
cmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBlKCQzLT5nZXRUeXBlKCkpIH07CisgICAgICAg
ICQxLmZ1bmN0aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW0pOworICAgICAgICAkJC5mdW5jdGlvbiA9
ICQxLmZ1bmN0aW9uOworICAgICAgICAkJC5pbnRlcm1Ob2RlID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJtTm9kZSwgJDMsIEAyKTsKKyAgICB9CisgICAgOwor
CitmdW5jdGlvbl9jYWxsX2hlYWRlcgorICAgIDogZnVuY3Rpb25faWRlbnRpZmllciBMRUZUX1BB
UkVOIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgOworCisvLyBHcmFtbWFyIE5vdGU6
ICBDb25zdHJ1Y3RvcnMgbG9vayBsaWtlIGZ1bmN0aW9ucywgYnV0IGFyZSByZWNvZ25pemVkIGFz
IHR5cGVzLgorCitmdW5jdGlvbl9pZGVudGlmaWVyCisgICAgOiB0eXBlX3NwZWNpZmllcl9ub25h
cnJheSB7CisgICAgICAgIC8vCisgICAgICAgIC8vIENvbnN0cnVjdG9yCisgICAgICAgIC8vCisg
ICAgICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7CisgICAgICAgIGlmICgkMS51c2VyRGVmKSB7
CisgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdFN0cnVjdDsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHN3aXRjaCAoJDEudHlwZSkgeworICAgICAgICAgICAgY2FzZSBFYnRGbG9h
dDoKKyAgICAgICAgICAgICAgICBpZiAoJDEubWF0cml4KSB7CisgICAgICAgICAgICAgICAgICAg
IHN3aXRjaCgkMS5zaXplKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBFT3BD
b25zdHJ1Y3RNYXQyOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogb3AgPSBF
T3BDb25zdHJ1Y3RNYXQzOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogb3Ag
PSBFT3BDb25zdHJ1Y3RNYXQ0OyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2goJDEuc2l6ZSkg
eworICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7IGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0VmVjMjsg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0VmVj
MzsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0
VmVjNDsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAg
ICAgICAgICAgc3dpdGNoKCQxLnNpemUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDE6IG9wID0g
RU9wQ29uc3RydWN0SW50OyAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBF
T3BDb25zdHJ1Y3RJVmVjMjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAzOiBvcCA9IEVP
cENvbnN0cnVjdElWZWMzOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9w
Q29uc3RydWN0SVZlYzQ7IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICAgICAgICBzd2l0
Y2goJDEuc2l6ZSkgeworICAgICAgICAgICAgICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RC
b29sOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdEJW
ZWMyOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0QlZl
YzM7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RCVmVj
NDsgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
b3AgPT0gRU9wTnVsbCkgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAiY2Fu
bm90IGNvbnN0cnVjdCB0aGlzIHR5cGUiLCBnZXRCYXNpY1N0cmluZygkMS50eXBlKSk7CisgICAg
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICQxLnR5cGUg
PSBFYnRGbG9hdDsKKyAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIFRTdHJpbmcgdGVtcFN0cmluZzsKKyAgICAg
ICAgVFR5cGUgdHlwZSgkMSk7CisgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1
bmN0aW9uKCZ0ZW1wU3RyaW5nLCB0eXBlLCBvcCk7CisgICAgICAgICQkID0gZnVuY3Rpb247Cisg
ICAgfQorICAgIHwgSURFTlRJRklFUiB7CisgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVy
cm9yQ2hlY2soQDEsICokMS5zdHJpbmcpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICBUVHlwZSB0eXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7CisgICAgICAgIFRG
dW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCQxLnN0cmluZywgdHlwZSk7CisgICAg
ICAgICQkID0gZnVuY3Rpb247CisgICAgfQorICAgIDsKKwordW5hcnlfZXhwcmVzc2lvbgorICAg
IDogcG9zdGZpeF9leHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgfCBJ
TkNfT1AgdW5hcnlfZXhwcmVzc2lvbiB7CisgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJv
ckNoZWNrKEAxLCAiKysiLCAkMikpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQcmVJbmNy
ZW1lbnQsICQyLCBAMSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0g
MCkgeworICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKEAxLCAiKysiLCAkMi0+Z2V0
Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICAkJCA9ICQyOworICAgICAgICB9CisgICAgfQorICAgIHwgREVDX09QIHVuYXJ5X2V4
cHJlc3Npb24geworICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjayhAMSwgIi0t
IiwgJDIpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUHJlRGVjcmVtZW50LCAkMiwgQDEs
IGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAg
ICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcihAMSwgIi0tIiwgJDItPmdldENvbXBsZXRlU3RyaW5n
KCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQgPSAk
MjsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IHVuYXJ5X29wZXJhdG9yIHVuYXJ5X2V4cHJlc3Np
b24geworICAgICAgICBpZiAoJDEub3AgIT0gRU9wTnVsbCkgeworICAgICAgICAgICAgJCQgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKCQxLm9wLCAkMiwgQDEsIGNvbnRleHQt
PnN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciogZXJyb3JPcCA9ICIiOworICAgICAgICAgICAgICAgIHN3aXRjaCgkMS5v
cCkgeworICAgICAgICAgICAgICAgIGNhc2UgRU9wTmVnYXRpdmU6ICAgZXJyb3JPcCA9ICItIjsg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OiBlcnJvck9wID0gIiEi
OyBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKEAxLCBlcnJvck9wLCAk
Mi0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAgICAgICAgICQkID0gJDI7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgJCQgPSAkMjsKKyAgICB9CisgICAgOworLy8gR3JhbW1hciBOb3Rl
OiAgTm8gdHJhZGl0aW9uYWwgc3R5bGUgdHlwZSBjYXN0cy4KKwordW5hcnlfb3BlcmF0b3IKKyAg
ICA6IFBMVVMgIHsgJCQub3AgPSBFT3BOdWxsOyB9CisgICAgfCBEQVNIICB7ICQkLm9wID0gRU9w
TmVnYXRpdmU7IH0KKyAgICB8IEJBTkcgIHsgJCQub3AgPSBFT3BMb2dpY2FsTm90OyB9CisgICAg
OworLy8gR3JhbW1hciBOb3RlOiAgTm8gJyonIG9yICcmJyB1bmFyeSBvcHMuICBQb2ludGVycyBh
cmUgbm90IHN1cHBvcnRlZC4KKworbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbgorICAgIDogdW5h
cnlfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICB8IG11bHRpcGxpY2F0aXZlX2V4cHJlc3Np
b24gU1RBUiB1bmFyeV9leHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BNdWwsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRh
YmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFy
eU9wRXJyb3IoQDIsICIqIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0
ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAg
ICQkID0gJDE7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBtdWx0aXBsaWNhdGl2ZV9leHByZXNz
aW9uIFNMQVNIIHVuYXJ5X2V4cHJlc3Npb24geworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcERpdiwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9s
VGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+Ymlu
YXJ5T3BFcnJvcihAMiwgIi8iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBs
ZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAg
ICAgJCQgPSAkMTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisKK2FkZGl0aXZlX2V4cHJlc3Np
b24KKyAgICA6IG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAgfCBh
ZGRpdGl2ZV9leHByZXNzaW9uIFBMVVMgbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbiB7CisgICAg
ICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wQWRkLCAkMSwg
JDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7Cisg
ICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiKyIsICQxLT5nZXRDb21wbGV0
ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9ICQxOworICAgICAgICB9CisgICAgfQorICAg
IHwgYWRkaXRpdmVfZXhwcmVzc2lvbiBEQVNIIG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24gewor
ICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcFN1Yiwg
JDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkg
eworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIi0iLCAkMS0+Z2V0Q29t
cGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgfQorICAgIH0K
KyAgICA7CisKK3NoaWZ0X2V4cHJlc3Npb24KKyAgICA6IGFkZGl0aXZlX2V4cHJlc3Npb24geyAk
JCA9ICQxOyB9CisgICAgOworCityZWxhdGlvbmFsX2V4cHJlc3Npb24KKyAgICA6IHNoaWZ0X2V4
cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAgfCByZWxhdGlvbmFsX2V4cHJlc3Npb24gTEVGVF9B
TkdMRSBzaGlmdF9leHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhhbiwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9s
VGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+Ymlu
YXJ5T3BFcnJvcihAMiwgIjwiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBs
ZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAg
ICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAg
ICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICQkID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUo
RWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAyKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICB8IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiBSSUdIVF9BTkdMRSBzaGlmdF9leHByZXNzaW9u
ICB7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9w
R3JlYXRlclRoYW4sICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAg
aWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICI+
IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24g
KnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJy
YXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVm
aW5lZCwgRXZxQ29uc3QpLCBAMik7CisgICAgICAgIH0KKyAgICB9CisgICAgfCByZWxhdGlvbmFs
X2V4cHJlc3Npb24gTEVfT1Agc2hpZnRfZXhwcmVzc2lvbiAgeworICAgICAgICAkJCA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExlc3NUaGFuRXF1YWwsICQxLCAkMywg
QDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICI8PSIsICQxLT5nZXRDb21wbGV0ZVN0
cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2Up
OworICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlv
bih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDIp
OworICAgICAgICB9CisgICAgfQorICAgIHwgcmVsYXRpb25hbF9leHByZXNzaW9uIEdFX09QIHNo
aWZ0X2V4cHJlc3Npb24gIHsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
QmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbkVxdWFsLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1i
b2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5i
aW5hcnlPcEVycm9yKEAyLCAiPj0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENv
bXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwor
ICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICQk
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5
cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAyKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICA7CisKK2VxdWFsaXR5X2V4cHJlc3Npb24KKyAgICA6IHJlbGF0aW9uYWxfZXhwcmVz
c2lvbiB7ICQkID0gJDE7IH0KKyAgICB8IGVxdWFsaXR5X2V4cHJlc3Npb24gRVFfT1AgcmVsYXRp
b25hbF9leHByZXNzaW9uICB7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZEJpbmFyeU1hdGgoRU9wRXF1YWwsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsK
KyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJy
b3IoQDIsICI9PSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJp
bmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBDb25z
dGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAg
ICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgJCQgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29s
LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDIpOworICAgICAgICB9CisgICAgfQorICAgIHwg
ZXF1YWxpdHlfZXhwcmVzc2lvbiBORV9PUCByZWxhdGlvbmFsX2V4cHJlc3Npb24geworICAgICAg
ICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcE5vdEVxdWFsLCAk
MSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7
CisgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiIT0iLCAkMS0+Z2V0Q29t
cGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9
IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0
KGZhbHNlKTsKKyAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0
YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25z
dCksIEAyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisKK2FuZF9leHByZXNzaW9uCisgICAg
OiBlcXVhbGl0eV9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIDsKKworZXhjbHVzaXZlX29y
X2V4cHJlc3Npb24KKyAgICA6IGFuZF9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIDsKKwor
aW5jbHVzaXZlX29yX2V4cHJlc3Npb24KKyAgICA6IGV4Y2x1c2l2ZV9vcl9leHByZXNzaW9uIHsg
JCQgPSAkMTsgfQorICAgIDsKKworbG9naWNhbF9hbmRfZXhwcmVzc2lvbgorICAgIDogaW5jbHVz
aXZlX29yX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAgfCBsb2dpY2FsX2FuZF9leHByZXNz
aW9uIEFORF9PUCBpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbEFuZCwgJDEsICQzLCBAMiwg
Y29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAg
ICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIiYmIiwgJDEtPmdldENvbXBsZXRlU3RyaW5n
KCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3Rh
bnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7Cisg
ICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVu
aW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMik7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgOworCitsb2dpY2FsX3hvcl9leHByZXNzaW9uCisgICAgOiBs
b2dpY2FsX2FuZF9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIHwgbG9naWNhbF94b3JfZXhw
cmVzc2lvbiBYT1JfT1AgbG9naWNhbF9hbmRfZXhwcmVzc2lvbiAgeworICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxYb3IsICQxLCAkMywg
QDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICJeXiIsICQxLT5nZXRDb21wbGV0ZVN0
cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2Up
OworICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlv
bih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDIp
OworICAgICAgICB9CisgICAgfQorICAgIDsKKworbG9naWNhbF9vcl9leHByZXNzaW9uCisgICAg
OiBsb2dpY2FsX3hvcl9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIHwgbG9naWNhbF9vcl9l
eHByZXNzaW9uIE9SX09QIGxvZ2ljYWxfeG9yX2V4cHJlc3Npb24gIHsKKyAgICAgICAgJCQgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2FsT3IsICQxLCAkMywg
QDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICJ8fCIsICQxLT5nZXRDb21wbGV0ZVN0
cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2Up
OworICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlv
bih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDIp
OworICAgICAgICB9CisgICAgfQorICAgIDsKKworY29uZGl0aW9uYWxfZXhwcmVzc2lvbgorICAg
IDogbG9naWNhbF9vcl9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIHwgbG9naWNhbF9vcl9l
eHByZXNzaW9uIFFVRVNUSU9OIGV4cHJlc3Npb24gQ09MT04gYXNzaWdubWVudF9leHByZXNzaW9u
IHsKKyAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2soQDIsICQxKSkKKyAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRTZWxlY3Rpb24oJDEsICQzLCAkNSwgQDIpOworICAgICAgICBpZiAoJDMtPmdldFR5
cGUoKSAhPSAkNS0+Z2V0VHlwZSgpKQorICAgICAgICAgICAgJCQgPSAwOworCisgICAgICAgIGlm
ICgkJCA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiOiIs
ICQzLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkNS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9ICQ1OworICAgICAg
ICB9CisgICAgfQorICAgIDsKKworYXNzaWdubWVudF9leHByZXNzaW9uCisgICAgOiBjb25kaXRp
b25hbF9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIHwgdW5hcnlfZXhwcmVzc2lvbiBhc3Np
Z25tZW50X29wZXJhdG9yIGFzc2lnbm1lbnRfZXhwcmVzc2lvbiB7CisgICAgICAgIGlmIChjb250
ZXh0LT5sVmFsdWVFcnJvckNoZWNrKEAyLCAiYXNzaWduIiwgJDEpKQorICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRB
c3NpZ24oJDIub3AsICQxLCAkMywgQDIpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAg
ICAgICAgY29udGV4dC0+YXNzaWduRXJyb3IoQDIsICJhc3NpZ24iLCAkMS0+Z2V0Q29tcGxldGVT
dHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7
CisKK2Fzc2lnbm1lbnRfb3BlcmF0b3IKKyAgICA6IEVRVUFMICAgICAgICB7ICQkLm9wID0gRU9w
QXNzaWduOyB9CisgICAgfCBNVUxfQVNTSUdOICAgeyAkJC5vcCA9IEVPcE11bEFzc2lnbjsgfQor
ICAgIHwgRElWX0FTU0lHTiAgIHsgJCQub3AgPSBFT3BEaXZBc3NpZ247IH0KKyAgICB8IEFERF9B
U1NJR04gICB7ICQkLm9wID0gRU9wQWRkQXNzaWduOyB9CisgICAgfCBTVUJfQVNTSUdOICAgeyAk
JC5vcCA9IEVPcFN1YkFzc2lnbjsgfQorICAgIDsKKworZXhwcmVzc2lvbgorICAgIDogYXNzaWdu
bWVudF9leHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgfCBleHByZXNz
aW9uIENPTU1BIGFzc2lnbm1lbnRfZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZENvbW1hKCQxLCAkMywgQDIpOworICAgICAgICBpZiAoJCQgPT0gMCkg
eworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIiwiLCAkMS0+Z2V0Q29t
cGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQgPSAkMzsKKyAgICAgICAgfQorICAgIH0K
KyAgICA7CisKK2NvbnN0YW50X2V4cHJlc3Npb24KKyAgICA6IGNvbmRpdGlvbmFsX2V4cHJlc3Np
b24geworICAgICAgICBpZiAoY29udGV4dC0+Y29uc3RFcnJvckNoZWNrKCQxKSkKKyAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgOwor
CitkZWNsYXJhdGlvbgorICAgIDogZnVuY3Rpb25fcHJvdG90eXBlIFNFTUlDT0xPTiAgIHsKKyAg
ICAgICAgVEZ1bmN0aW9uICZmdW5jdGlvbiA9ICooJDEuZnVuY3Rpb24pOworICAgICAgICAKKyAg
ICAgICAgVEludGVybUFnZ3JlZ2F0ZSAqcHJvdG90eXBlID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGU7
CisgICAgICAgIHByb3RvdHlwZS0+c2V0VHlwZShmdW5jdGlvbi5nZXRSZXR1cm5UeXBlKCkpOwor
ICAgICAgICBwcm90b3R5cGUtPnNldE5hbWUoZnVuY3Rpb24uZ2V0TmFtZSgpKTsKKyAgICAgICAg
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgp
OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRQYXJhbWV0ZXIgJnBhcmFtID0g
ZnVuY3Rpb24uZ2V0UGFyYW0oaSk7CisgICAgICAgICAgICBpZiAocGFyYW0ubmFtZSAhPSAwKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRWYXJpYWJsZSB2YXJpYWJsZShwYXJhbS5u
YW1lLCAqcGFyYW0udHlwZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcHJv
dG90eXBlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUocHJvdG90eXBlLCBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLmdldFVuaXF1ZUlkKCksIHZh
cmlhYmxlLmdldE5hbWUoKSwgdmFyaWFibGUuZ2V0VHlwZSgpLCBAMSksIEAxKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBw
cm90b3R5cGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShwcm90b3R5cGUs
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsICpwYXJhbS50eXBlLCBAMSks
IEAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcHJvdG90
eXBlLT5zZXRPcChFT3BQcm90b3R5cGUpOworICAgICAgICAkJCA9IHByb3RvdHlwZTsKKworICAg
ICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKKyAgICB9CisgICAgfCBpbml0X2RlY2xh
cmF0b3JfbGlzdCBTRU1JQ09MT04geworICAgICAgICBpZiAoJDEuaW50ZXJtQWdncmVnYXRlKQor
ICAgICAgICAgICAgJDEuaW50ZXJtQWdncmVnYXRlLT5zZXRPcChFT3BEZWNsYXJhdGlvbik7Cisg
ICAgICAgICQkID0gJDEuaW50ZXJtQWdncmVnYXRlOworICAgIH0KKyAgICB8IFBSRUNJU0lPTiBw
cmVjaXNpb25fcXVhbGlmaWVyIHR5cGVfc3BlY2lmaWVyX25vX3ByZWMgU0VNSUNPTE9OIHsKKyAg
ICAgICAgaWYgKCgkMiA9PSBFYnBIaWdoKSAmJiAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9G
UkFHTUVOVF9TSEFERVIpICYmICFjb250ZXh0LT5mcmFnbWVudFByZWNpc2lvbkhpZ2gpIHsKKyAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAicHJlY2lzaW9uIGlzIG5vdCBzdXBwb3J0ZWQg
aW4gZnJhZ21lbnQgc2hhZGVyIiwgImhpZ2hwIik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFjb250ZXh0LT5zeW1ib2xUYWJsZS5zZXRE
ZWZhdWx0UHJlY2lzaW9uKCAkMywgJDIgKSkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
QDEsICJpbGxlZ2FsIHR5cGUgYXJndW1lbnQgZm9yIGRlZmF1bHQgcHJlY2lzaW9uIHF1YWxpZmll
ciIsIGdldEJhc2ljU3RyaW5nKCQzLnR5cGUpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAkJCA9IDA7CisgICAgfQorICAgIDsKKworZnVuY3Rp
b25fcHJvdG90eXBlCisgICAgOiBmdW5jdGlvbl9kZWNsYXJhdG9yIFJJR0hUX1BBUkVOICB7Cisg
ICAgICAgIC8vCisgICAgICAgIC8vIE11bHRpcGxlIGRlY2xhcmF0aW9ucyBvZiB0aGUgc2FtZSBm
dW5jdGlvbiBhcmUgYWxsb3dlZC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgdGhpcyBpcyBh
IGRlZmluaXRpb24sIHRoZSBkZWZpbml0aW9uIHByb2R1Y3Rpb24gY29kZSB3aWxsIGNoZWNrIGZv
ciByZWRlZmluaXRpb25zCisgICAgICAgIC8vICh3ZSBkb24ndCBrbm93IGF0IHRoaXMgcG9pbnQg
aWYgaXQncyBhIGRlZmluaXRpb24gb3Igbm90KS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gUmVk
ZWNsYXJhdGlvbnMgYXJlIGFsbG93ZWQuICBCdXQsIHJldHVybiB0eXBlcyBhbmQgcGFyYW1ldGVy
IHF1YWxpZmllcnMgbXVzdCBtYXRjaC4KKyAgICAgICAgLy8KKyAgICAgICAgVEZ1bmN0aW9uKiBw
cmV2RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9sVGFibGUuZmlu
ZCgkMS0+Z2V0TWFuZ2xlZE5hbWUoKSkpOworICAgICAgICBpZiAocHJldkRlYykgeworICAgICAg
ICAgICAgaWYgKHByZXZEZWMtPmdldFJldHVyblR5cGUoKSAhPSAkMS0+Z2V0UmV0dXJuVHlwZSgp
KSB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJvdmVybG9hZGVkIGZ1bmN0
aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0dXJuIHR5cGUiLCAkMS0+Z2V0UmV0dXJuVHlwZSgp
LmdldEJhc2ljU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJldkRl
Yy0+Z2V0UGFyYW1Db3VudCgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAocHJldkRlYy0+
Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCkgIT0gJDEtPmdldFBhcmFtKGkpLnR5cGUt
PmdldFF1YWxpZmllcigpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAy
LCAib3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHBhcmFtZXRlciBxdWFs
aWZpZXJzIiwgJDEtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllclN0cmluZygpKTsKKyAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vCisgICAgICAgIC8vIENoZWNr
IGZvciBwcmV2aW91c2x5IGRlY2xhcmVkIHZhcmlhYmxlcyB1c2luZyB0aGUgc2FtZSBuYW1lLgor
ICAgICAgICAvLworICAgICAgICBUU3ltYm9sICpwcmV2U3ltID0gY29udGV4dC0+c3ltYm9sVGFi
bGUuZmluZCgkMS0+Z2V0TmFtZSgpKTsKKyAgICAgICAgaWYgKHByZXZTeW0pCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmICghcHJldlN5bS0+aXNGdW5jdGlvbigpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAicmVkZWZpbml0aW9uIiwgJDEtPmdl
dE5hbWUoKS5jX3N0cigpLCAiZnVuY3Rpb24iKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg
ICB7CisgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIHVubWFuZ2xlZCBuYW1lIHRvIGRldGVjdCBw
b3RlbnRpYWwgZnV0dXJlIHJlZGVmaW5pdGlvbiBhcyBhIHZhcmlhYmxlLgorICAgICAgICAgICAg
Y29udGV4dC0+c3ltYm9sVGFibGUuZ2V0T3V0ZXJMZXZlbCgpLT5pbnNlcnQoJDEtPmdldE5hbWUo
KSwgKiQxKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vCisgICAgICAgIC8vIElmIHRoaXMgaXMg
YSByZWRlY2xhcmF0aW9uLCBpdCBjb3VsZCBhbHNvIGJlIGEgZGVmaW5pdGlvbiwKKyAgICAgICAg
Ly8gaW4gd2hpY2ggY2FzZSwgd2Ugd2FudCB0byB1c2UgdGhlIHZhcmlhYmxlIG5hbWVzIGZyb20g
dGhpcyBvbmUsIGFuZCBub3QgdGhlIG9uZSB0aGF0J3MKKyAgICAgICAgLy8gYmVpbmcgcmVkZWNs
YXJlZC4gIFNvLCBwYXNzIGJhY2sgdXAgdGhpcyBkZWNsYXJhdGlvbiwgbm90IHRoZSBvbmUgaW4g
dGhlIHN5bWJvbCB0YWJsZS4KKyAgICAgICAgLy8KKyAgICAgICAgJCQuZnVuY3Rpb24gPSAkMTsK
KworICAgICAgICAvLyBXZSdyZSBhdCB0aGUgaW5uZXIgc2NvcGUgbGV2ZWwgb2YgdGhlIGZ1bmN0
aW9uJ3MgYXJndW1lbnRzIGFuZCBib2R5IHN0YXRlbWVudC4KKyAgICAgICAgLy8gQWRkIHRoZSBm
dW5jdGlvbiBwcm90b3R5cGUgdG8gdGhlIHN1cnJvdW5kaW5nIHNjb3BlIGluc3RlYWQuCisgICAg
ICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLmdldE91dGVyTGV2ZWwoKS0+aW5zZXJ0KCokJC5mdW5j
dGlvbik7CisgICAgfQorICAgIDsKKworZnVuY3Rpb25fZGVjbGFyYXRvcgorICAgIDogZnVuY3Rp
b25faGVhZGVyIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgfCBmdW5jdGlvbl9oZWFk
ZXJfd2l0aF9wYXJhbWV0ZXJzIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgOworCisK
K2Z1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMKKyAgICA6IGZ1bmN0aW9uX2hlYWRlciBw
YXJhbWV0ZXJfZGVjbGFyYXRpb24geworICAgICAgICAvLyBBZGQgdGhlIHBhcmFtZXRlcgorICAg
ICAgICAkJCA9ICQxOworICAgICAgICBpZiAoJDIucGFyYW0udHlwZS0+Z2V0QmFzaWNUeXBlKCkg
IT0gRWJ0Vm9pZCkKKyAgICAgICAgICAgICQxLT5hZGRQYXJhbWV0ZXIoJDIucGFyYW0pOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBkZWxldGUgJDIucGFyYW0udHlwZTsKKyAgICB9CisgICAg
fCBmdW5jdGlvbl9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIENPTU1BIHBhcmFtZXRlcl9kZWNsYXJh
dGlvbiB7CisgICAgICAgIC8vCisgICAgICAgIC8vIE9ubHkgZmlyc3QgcGFyYW1ldGVyIG9mIG9u
ZS1wYXJhbWV0ZXIgZnVuY3Rpb25zIGNhbiBiZSB2b2lkCisgICAgICAgIC8vIFRoZSBjaGVjayBm
b3IgbmFtZWQgcGFyYW1ldGVycyBub3QgYmVpbmcgdm9pZCBpcyBkb25lIGluIHBhcmFtZXRlcl9k
ZWNsYXJhdG9yCisgICAgICAgIC8vCisgICAgICAgIGlmICgkMy5wYXJhbS50eXBlLT5nZXRCYXNp
Y1R5cGUoKSA9PSBFYnRWb2lkKSB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVGhp
cyBwYXJhbWV0ZXIgPiBmaXJzdCBpcyB2b2lkCisgICAgICAgICAgICAvLworICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoQDIsICJjYW5ub3QgYmUgYW4gYXJndW1lbnQgdHlwZSBleGNlcHQgZm9y
ICcodm9pZCknIiwgInZvaWQiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgICAgIGRlbGV0ZSAkMy5wYXJhbS50eXBlOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgLy8gQWRkIHRoZSBwYXJhbWV0ZXIKKyAgICAgICAgICAgICQkID0gJDE7CisgICAgICAg
ICAgICAkMS0+YWRkUGFyYW1ldGVyKCQzLnBhcmFtKTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7
CisKK2Z1bmN0aW9uX2hlYWRlcgorICAgIDogZnVsbHlfc3BlY2lmaWVkX3R5cGUgSURFTlRJRklF
UiBMRUZUX1BBUkVOIHsKKyAgICAgICAgaWYgKCQxLnF1YWxpZmllciAhPSBFdnFHbG9iYWwgJiYg
JDEucXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoQDIsICJubyBxdWFsaWZpZXJzIGFsbG93ZWQgZm9yIGZ1bmN0aW9uIHJldHVybiIsIGdldFF1
YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBtYWtlIHN1cmUgYSBzYW1wbGVyIGlzIG5vdCBp
bnZvbHZlZCBhcyB3ZWxsLi4uCisgICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJF
cnJvckNoZWNrKEAyLCAkMSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAg
ICAgICAgLy8gQWRkIHRoZSBmdW5jdGlvbiBhcyBhIHByb3RvdHlwZSBhZnRlciBwYXJzaW5nIGl0
ICh3ZSBkbyBub3Qgc3VwcG9ydCByZWN1cnNpb24pCisgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rp
b247CisgICAgICAgIFRUeXBlIHR5cGUoJDEpOworICAgICAgICBmdW5jdGlvbiA9IG5ldyBURnVu
Y3Rpb24oJDIuc3RyaW5nLCB0eXBlKTsKKyAgICAgICAgJCQgPSBmdW5jdGlvbjsKKyAgICAgICAg
CisgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsKKyAgICB9CisgICAgOworCitw
YXJhbWV0ZXJfZGVjbGFyYXRvcgorICAgIC8vIFR5cGUgKyBuYW1lCisgICAgOiB0eXBlX3NwZWNp
ZmllciBpZGVudGlmaWVyIHsKKyAgICAgICAgaWYgKCQxLnR5cGUgPT0gRWJ0Vm9pZCkgeworICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2b2lkJyIs
ICQyLnN0cmluZy0+Y19zdHIoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjayhAMiwgKiQy
LnN0cmluZykpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIFRQYXJh
bWV0ZXIgcGFyYW0gPSB7JDIuc3RyaW5nLCBuZXcgVFR5cGUoJDEpfTsKKyAgICAgICAgJCQucGFy
YW0gPSBwYXJhbTsKKyAgICB9CisgICAgfCB0eXBlX3NwZWNpZmllciBpZGVudGlmaWVyIExFRlRf
QlJBQ0tFVCBjb25zdGFudF9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQgeworICAgICAgICAvLyBD
aGVjayB0aGF0IHdlIGNhbiBtYWtlIGFuIGFycmF5IG91dCBvZiB0aGlzIHR5cGUKKyAgICAgICAg
aWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soQDMsICQxKSkKKyAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNo
ZWNrKEAyLCAqJDIuc3RyaW5nKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKwor
ICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hl
Y2soQDMsICQ0LCBzaXplKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgJDEuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CisKKyAgICAgICAgVFR5cGUqIHR5cGUgPSBuZXcg
VFR5cGUoJDEpOworICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAkMi5zdHJpbmcsIHR5cGUg
fTsKKyAgICAgICAgJCQucGFyYW0gPSBwYXJhbTsKKyAgICB9CisgICAgOworCitwYXJhbWV0ZXJf
ZGVjbGFyYXRpb24KKyAgICAvLworICAgIC8vIFRoZSBvbmx5IHBhcmFtZXRlciBxdWFsaWZpZXIg
YSBwYXJhbWV0ZXIgY2FuIGhhdmUgYXJlCisgICAgLy8gSU5fUVVBTCwgT1VUX1FVQUwsIElOT1VU
X1FVQUwsIG9yIENPTlNULgorICAgIC8vCisKKyAgICAvLworICAgIC8vIFR5cGUgKyBuYW1lCisg
ICAgLy8KKyAgICA6IHR5cGVfcXVhbGlmaWVyIHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVy
X2RlY2xhcmF0b3IgeworICAgICAgICAkJCA9ICQzOworICAgICAgICBpZiAoY29udGV4dC0+cGFy
YW1FcnJvckNoZWNrKEAzLCAkMS5xdWFsaWZpZXIsICQyLCAkJC5wYXJhbS50eXBlKSkKKyAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICB9CisgICAgfCBwYXJhbWV0ZXJfcXVhbGlm
aWVyIHBhcmFtZXRlcl9kZWNsYXJhdG9yIHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICAgICAgaWYg
KGNvbnRleHQtPnBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKEAyLCAkMSwgKiQyLnBhcmFtLnR5
cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAoY29udGV4
dC0+cGFyYW1FcnJvckNoZWNrKEAyLCBFdnFUZW1wb3JhcnksICQxLCAkJC5wYXJhbS50eXBlKSkK
KyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICB9CisgICAgLy8KKyAgICAvLyBP
bmx5IHR5cGUKKyAgICAvLworICAgIHwgdHlwZV9xdWFsaWZpZXIgcGFyYW1ldGVyX3F1YWxpZmll
ciBwYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIgeworICAgICAgICAkJCA9ICQzOworICAgICAgICBp
ZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKEAzLCAkMS5xdWFsaWZpZXIsICQyLCAkJC5wYXJh
bS50eXBlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICB9CisgICAgfCBw
YXJhbWV0ZXJfcXVhbGlmaWVyIHBhcmFtZXRlcl90eXBlX3NwZWNpZmllciB7CisgICAgICAgICQk
ID0gJDI7CisgICAgICAgIGlmIChjb250ZXh0LT5wYXJhbWV0ZXJTYW1wbGVyRXJyb3JDaGVjayhA
MiwgJDEsICokMi5wYXJhbS50eXBlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjayhAMiwgRXZxVGVtcG9yYXJ5LCAk
MSwgJCQucGFyYW0udHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
fQorICAgIDsKKworcGFyYW1ldGVyX3F1YWxpZmllcgorICAgIDogLyogZW1wdHkgKi8geworICAg
ICAgICAkJCA9IEV2cUluOworICAgIH0KKyAgICB8IElOX1FVQUwgeworICAgICAgICAkJCA9IEV2
cUluOworICAgIH0KKyAgICB8IE9VVF9RVUFMIHsKKyAgICAgICAgJCQgPSBFdnFPdXQ7CisgICAg
fQorICAgIHwgSU5PVVRfUVVBTCB7CisgICAgICAgICQkID0gRXZxSW5PdXQ7CisgICAgfQorICAg
IDsKKworcGFyYW1ldGVyX3R5cGVfc3BlY2lmaWVyCisgICAgOiB0eXBlX3NwZWNpZmllciB7Cisg
ICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7IDAsIG5ldyBUVHlwZSgkMSkgfTsKKyAgICAgICAg
JCQucGFyYW0gPSBwYXJhbTsKKyAgICB9CisgICAgOworCitpbml0X2RlY2xhcmF0b3JfbGlzdAor
ICAgIDogc2luZ2xlX2RlY2xhcmF0aW9uIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAg
fCBpbml0X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBpZGVudGlmaWVyIHsKKyAgICAgICAgaWYgKCQx
LnR5cGUudHlwZSA9PSBFYnRJbnZhcmlhbnQgJiYgISQzLnN5bWJvbCkKKyAgICAgICAgeworICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDMsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFy
ZWQgYXMgaW52YXJpYW50IiwgJDMuc3RyaW5nLT5jX3N0cigpKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJv
bCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQzLnN0cmluZywgVFR5cGUo
JDEudHlwZSksIEAzKTsKKyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJtTm9kZSwgc3ltYm9sLCBAMyk7CisgICAg
ICAgIAorICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhAMywg
JCQudHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soQDMsICokMy5zdHJpbmcsICQkLnR5cGUs
IGZhbHNlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBUVmFy
aWFibGUqIHZhcmlhYmxlID0gMDsKKyAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRFcnJvckNo
ZWNrKEAzLCAqJDMuc3RyaW5nLCAkJC50eXBlLCB2YXJpYWJsZSkpCisgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChzeW1ib2wgJiYgdmFyaWFibGUpCisgICAgICAg
ICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKKyAgICB9CisgICAg
fCBpbml0X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBpZGVudGlmaWVyIExFRlRfQlJBQ0tFVCBSSUdI
VF9CUkFDS0VUIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hl
Y2soQDMsICQxLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAg
ICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKEAzLCAqJDMuc3RyaW5nLCAk
MS50eXBlLCB0cnVlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAg
ICAkJCA9ICQxOworCisgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKEA0
LCAkMS50eXBlKSB8fCBjb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soQDQsICQxLnR5
cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICQxLnR5cGUuc2V0QXJyYXkodHJ1ZSk7CisgICAgICAgICAgICBUVmFyaWFibGUq
IHZhcmlhYmxlOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVjayhANCwg
KiQzLnN0cmluZywgJDEudHlwZSwgdmFyaWFibGUpKQorICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0
IENPTU1BIGlkZW50aWZpZXIgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRf
QlJBQ0tFVCB7CisgICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNr
KEAzLCAkMS50eXBlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAg
ICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjayhAMywgKiQzLnN0cmluZywgJDEu
dHlwZSwgdHJ1ZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAg
JCQgPSAkMTsKKworICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjayhANCwg
JDEudHlwZSkgfHwgY29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKEA0LCAkMS50eXBl
KSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJv
ckNoZWNrKEA0LCAkNSwgc2l6ZSkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICAgICAgJDEudHlwZS5zZXRBcnJheSh0cnVlLCBzaXplKTsKKyAgICAgICAgICAg
IFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5
RXJyb3JDaGVjayhANCwgKiQzLnN0cmluZywgJDEudHlwZSwgdmFyaWFibGUpKQorICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIFRUeXBlIHR5cGUgPSBUVHlw
ZSgkMS50eXBlKTsKKyAgICAgICAgICAgIHR5cGUuc2V0QXJyYXlTaXplKHNpemUpOworICAgICAg
ICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dy
ZWdhdGUoJDEuaW50ZXJtTm9kZSwgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJp
YWJsZSA/IHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpIDogMCwgKiQzLnN0cmluZywgdHlwZSwgQDMp
LCBAMyk7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBpbml0X2RlY2xhcmF0b3JfbGlzdCBDT01N
QSBpZGVudGlmaWVyIEVRVUFMIGluaXRpYWxpemVyIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPnN0
cnVjdFF1YWxpZmllckVycm9yQ2hlY2soQDMsICQxLnR5cGUpKQorICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworCisgICAgICAgICQkID0gJDE7CisKKyAgICAgICAgVEludGVybU5vZGUq
IGludGVybU5vZGU7CisgICAgICAgIGlmICghY29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKEAz
LCAqJDMuc3RyaW5nLCAkMS50eXBlLCAkNSwgaW50ZXJtTm9kZSkpIHsKKyAgICAgICAgICAgIC8v
CisgICAgICAgICAgICAvLyBidWlsZCB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCisg
ICAgICAgICAgICAvLworICAgICAgICAgICAgaWYgKGludGVybU5vZGUpCisgICAgICAgICQkLmlu
dGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLmlu
dGVybU5vZGUsIGludGVybU5vZGUsIEA0KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAkMS5pbnRlcm1BZ2dyZWdhdGU7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJC5p
bnRlcm1BZ2dyZWdhdGUgPSAwOworICAgICAgICB9CisgICAgfQorICAgIDsKKworc2luZ2xlX2Rl
Y2xhcmF0aW9uCisgICAgOiBmdWxseV9zcGVjaWZpZWRfdHlwZSB7CisgICAgICAgICQkLnR5cGUg
PSAkMTsKKyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
Lm1ha2VBZ2dyZWdhdGUoY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAiIiwgVFR5
cGUoJDEpLCBAMSksIEAxKTsKKyAgICB9CisgICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBpZGVu
dGlmaWVyIHsKKyAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDIuc3RyaW5nLCBUVHlwZSgkMSksIEAyKTsKKyAgICAgICAg
JCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUo
c3ltYm9sLCBAMik7CisgICAgICAgIAorICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlm
aWVyRXJyb3JDaGVjayhAMiwgJCQudHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soQDIsICok
Mi5zdHJpbmcsICQkLnR5cGUsIGZhbHNlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgJCQudHlwZSA9ICQxOworCisgICAgICAgIFRW
YXJpYWJsZSogdmFyaWFibGUgPSAwOworICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdEVycm9y
Q2hlY2soQDIsICokMi5zdHJpbmcsICQkLnR5cGUsIHZhcmlhYmxlKSkKKyAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKHZhcmlhYmxlICYmIHN5bWJvbCkKKyAgICAg
ICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUtPmdldFVuaXF1ZUlkKCkpOworICAgIH0KKyAg
ICB8IGZ1bGx5X3NwZWNpZmllZF90eXBlIGlkZW50aWZpZXIgTEVGVF9CUkFDS0VUIFJJR0hUX0JS
QUNLRVQgeworICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgInVuc2l6ZWQgYXJyYXkgZGVjbGFy
YXRpb25zIG5vdCBzdXBwb3J0ZWQiLCAkMi5zdHJpbmctPmNfc3RyKCkpOworICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDIuc3RyaW5nLCBUVHlwZSgkMSksIEAyKTsK
KyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VB
Z2dyZWdhdGUoc3ltYm9sLCBAMik7CisgICAgICAgICQkLnR5cGUgPSAkMTsKKyAgICB9CisgICAg
fCBmdWxseV9zcGVjaWZpZWRfdHlwZSBpZGVudGlmaWVyIExFRlRfQlJBQ0tFVCBjb25zdGFudF9l
eHByZXNzaW9uIFJJR0hUX0JSQUNLRVQgeworICAgICAgICBUVHlwZSB0eXBlID0gVFR5cGUoJDEp
OworICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9y
Q2hlY2soQDIsICQ0LCBzaXplKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgdHlwZS5zZXRBcnJheVNpemUoc2l6ZSk7CisgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5
bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQyLnN0cmluZywgdHlw
ZSwgQDIpOworICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsIEAyKTsKKyAgICAgICAgCisgICAgICAgIGlmIChjb250
ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAyLCAkMSkpCisgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9y
Q2hlY2soQDIsICokMi5zdHJpbmcsICQxLCB0cnVlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKKworICAgICAgICAkJC50eXBlID0gJDE7CisKKyAgICAgICAgaWYgKGNvbnRleHQt
PmFycmF5VHlwZUVycm9yQ2hlY2soQDMsICQxKSB8fCBjb250ZXh0LT5hcnJheVF1YWxpZmllckVy
cm9yQ2hlY2soQDMsICQxKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0
LT5hcnJheVNpemVFcnJvckNoZWNrKEAzLCAkNCwgc2l6ZSkpCisgICAgICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICAgICAkMS5zZXRBcnJheSh0cnVlLCBzaXplKTsK
KyAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOworICAgICAgICAgICAgaWYgKGNv
bnRleHQtPmFycmF5RXJyb3JDaGVjayhAMywgKiQyLnN0cmluZywgJDEsIHZhcmlhYmxlKSkKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBpZiAodmFyaWFi
bGUgJiYgc3ltYm9sKQorICAgICAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUtPmdl
dFVuaXF1ZUlkKCkpOworICAgICAgICB9CisgICAgfQorICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5
cGUgaWRlbnRpZmllciBFUVVBTCBpbml0aWFsaXplciB7CisgICAgICAgIGlmIChjb250ZXh0LT5z
dHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAyLCAkMSkpCisgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisKKyAgICAgICAgJCQudHlwZSA9ICQxOworCisgICAgICAgIFRJbnRlcm1Ob2Rl
KiBpbnRlcm1Ob2RlOworICAgICAgICBpZiAoIWNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcihA
MiwgKiQyLnN0cmluZywgJDEsICQ0LCBpbnRlcm1Ob2RlKSkgeworICAgICAgICAvLworICAgICAg
ICAvLyBCdWlsZCBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24KKyAgICAgICAgLy8KKyAgICAg
ICAgICAgIGlmKGludGVybU5vZGUpCisgICAgICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRl
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoaW50ZXJtTm9kZSwgQDMpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAwOworICAgICAgICB9CisgICAgfQorICAgIHwg
SU5WQVJJQU5UIElERU5USUZJRVIgeworICAgICAgICBWRVJURVhfT05MWSgiaW52YXJpYW50IGRl
Y2xhcmF0aW9uIiwgQDEpOworICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjayhA
MSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAiaW52YXJpYW50IHZhcnlp
bmciKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQudHlwZS5z
ZXRCYXNpYyhFYnRJbnZhcmlhbnQsIEV2cUludmFyaWFudFZhcnlpbmdPdXQsIEAyKTsKKyAgICAg
ICAgaWYgKCEkMi5zeW1ib2wpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KEAyLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICQyLnN0
cmluZy0+Y19zdHIoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICokMi5zdHJpbmcsIFRUeXBlKCQk
LnR5cGUpLCBAMik7CisgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsIEAyKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICA7CisKK2Z1bGx5X3NwZWNpZmllZF90eXBlCisgICAgOiB0eXBlX3NwZWNpZmllciB7Cisg
ICAgICAgICQkID0gJDE7CisKKyAgICAgICAgaWYgKCQxLmFycmF5KSB7CisgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcihAMSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsK
KyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQxLnNldEFycmF5
KGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IHR5cGVfcXVhbGlmaWVyIHR5cGVfc3Bl
Y2lmaWVyICB7CisgICAgICAgIGlmICgkMi5hcnJheSkgeworICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoQDIsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5Iik7CisgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkMi5zZXRBcnJheShmYWxzZSk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoJDEucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSAm
JgorICAgICAgICAgICAgKCQyLnR5cGUgPT0gRWJ0Qm9vbCB8fCAkMi50eXBlID09IEVidEludCkp
IHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50
IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikpOworICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIGlmICgoJDEucXVhbGlmaWVyID09IEV2
cVZhcnlpbmdJbiB8fCAkMS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKKyAgICAgICAg
ICAgICgkMi50eXBlID09IEVidEJvb2wgfHwgJDIudHlwZSA9PSBFYnRJbnQpKSB7CisgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcihAMiwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxp
ZmllclN0cmluZygkMS5xdWFsaWZpZXIpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgfQorICAgICAgICAkJCA9ICQyOworICAgICAgICAkJC5xdWFsaWZpZXIgPSAk
MS5xdWFsaWZpZXI7CisgICAgfQorICAgIDsKKwordHlwZV9xdWFsaWZpZXIKKyAgICA6IENPTlNU
X1FVQUwgeworICAgICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFDb25zdCwgQDEpOworICAg
IH0KKyAgICB8IEFUVFJJQlVURSB7CisgICAgICAgIFZFUlRFWF9PTkxZKCJhdHRyaWJ1dGUiLCBA
MSk7CisgICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKEAxLCBjb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJhdHRyaWJ1dGUiKSkKKyAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxQXR0cmli
dXRlLCBAMSk7CisgICAgfQorICAgIHwgVkFSWUlORyB7CisgICAgICAgIGlmIChjb250ZXh0LT5n
bG9iYWxFcnJvckNoZWNrKEAxLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCks
ICJ2YXJ5aW5nIikpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlm
IChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCisgICAgICAgICAgICAk
JC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFWYXJ5aW5nT3V0LCBAMSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cVZhcnlpbmdJbiwgQDEpOworICAgIH0K
KyAgICB8IElOVkFSSUFOVCBWQVJZSU5HIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVy
cm9yQ2hlY2soQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImludmFy
aWFudCB2YXJ5aW5nIikpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
IGlmIChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCisgICAgICAgICAg
ICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCBAMSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFyaWFudFZh
cnlpbmdJbiwgQDEpOworICAgIH0KKyAgICB8IFVOSUZPUk0geworICAgICAgICBpZiAoY29udGV4
dC0+Z2xvYmFsRXJyb3JDaGVjayhAMSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpLCAidW5pZm9ybSIpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFVbmlmb3JtLCBAMSk7CisgICAgfQorICAgIDsKKwor
dHlwZV9zcGVjaWZpZXIKKyAgICA6IHR5cGVfc3BlY2lmaWVyX25vX3ByZWMgeworICAgICAgICAk
JCA9ICQxOworCisgICAgICAgIGlmICgkJC5wcmVjaXNpb24gPT0gRWJwVW5kZWZpbmVkKSB7Cisg
ICAgICAgICAgICAkJC5wcmVjaXNpb24gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5nZXREZWZhdWx0
UHJlY2lzaW9uKCQxLnR5cGUpOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPnByZWNpc2lvbkVy
cm9yQ2hlY2soQDEsICQkLnByZWNpc2lvbiwgJDEudHlwZSkpIHsKKyAgICAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
fCBwcmVjaXNpb25fcXVhbGlmaWVyIHR5cGVfc3BlY2lmaWVyX25vX3ByZWMgeworICAgICAgICAk
JCA9ICQyOworICAgICAgICAkJC5wcmVjaXNpb24gPSAkMTsKKyAgICB9CisgICAgOworCitwcmVj
aXNpb25fcXVhbGlmaWVyCisgICAgOiBISUdIX1BSRUNJU0lPTiB7CisgICAgICAgICQkID0gRWJw
SGlnaDsKKyAgICB9CisgICAgfCBNRURJVU1fUFJFQ0lTSU9OIHsKKyAgICAgICAgJCQgPSBFYnBN
ZWRpdW07CisgICAgfQorICAgIHwgTE9XX1BSRUNJU0lPTiAgeworICAgICAgICAkJCA9IEVicExv
dzsKKyAgICB9CisgICAgOworCit0eXBlX3NwZWNpZmllcl9ub19wcmVjCisgICAgOiB0eXBlX3Nw
ZWNpZmllcl9ub25hcnJheSB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgdHlwZV9z
cGVjaWZpZXJfbm9uYXJyYXkgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRf
QlJBQ0tFVCB7CisgICAgICAgICQkID0gJDE7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5
VHlwZUVycm9yQ2hlY2soQDIsICQxKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgICAgIGlmIChj
b250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKEAyLCAkMywgc2l6ZSkpCisgICAgICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQuc2V0QXJyYXkodHJ1ZSwgc2l6
ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCit0eXBlX3NwZWNpZmllcl9ub25hcnJheQor
ICAgIDogVk9JRF9UWVBFIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAg
ICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgRkxPQVRf
VFlQRSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0
R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0
QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBJTlRfVFlQRSB7CisgICAg
ICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50
LCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgQk9PTF9UWVBFIHsKKyAgICAgICAgVFF1YWxpZmll
ciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFs
IDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCBAMSk7
CisgICAgfQorICAgIHwgVkVDMiB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
KyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0
QWdncmVnYXRlKDIpOworICAgIH0KKyAgICB8IFZFQzMgeworICAgICAgICBUUXVhbGlmaWVyIHF1
YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7Cisg
ICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgzKTsKKyAgICB9CisgICAgfCBWRUM0IHsKKyAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwg
cXVhbCwgQDEpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoNCk7CisgICAgfQorICAgIHwgQlZF
QzIgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJh
c2ljKEVidEJvb2wsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRlKDIpOworICAg
IH0KKyAgICB8IEJWRUMzIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAg
ICAgICAkJC5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNldEFnZ3Jl
Z2F0ZSgzKTsKKyAgICB9CisgICAgfCBCVkVDNCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgQDEpOworICAgICAg
ICAkJC5zZXRBZ2dyZWdhdGUoNCk7CisgICAgfQorICAgIHwgSVZFQzIgeworICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEludCwgcXVhbCwg
QDEpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMik7CisgICAgfQorICAgIHwgSVZFQzMgewor
ICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVi
dEludCwgcXVhbCwgQDEpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMyk7CisgICAgfQorICAg
IHwgSVZFQzQgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQk
LnNldEJhc2ljKEVidEludCwgcXVhbCwgQDEpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoNCk7
CisgICAgfQorICAgIHwgTUFUUklYMiB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFy
eTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQu
c2V0QWdncmVnYXRlKDIsIHRydWUpOworICAgIH0KKyAgICB8IE1BVFJJWDMgeworICAgICAgICBU
UXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBF
dnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBx
dWFsLCBAMSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgzLCB0cnVlKTsKKyAgICB9CisgICAg
fCBNQVRSSVg0IHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAk
JC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgQDEpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUo
NCwgdHJ1ZSk7CisgICAgfQorICAgIHwgU0FNUExFUjJEIHsKKyAgICAgICAgVFF1YWxpZmllciBx
dWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDog
RXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyMkQsIHF1YWwsIEAx
KTsKKyAgICB9CisgICAgfCBTQU1QTEVSQ1VCRSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxlckN1YmUsIHF1YWwsIEAxKTsK
KyAgICB9CisgICAgfCBTQU1QTEVSX0VYVEVSTkFMX09FUyB7CisgICAgICAgIGlmICghY29udGV4
dC0+c3VwcG9ydHNFeHRlbnNpb24oIkdMX09FU19FR0xfaW1hZ2VfZXh0ZXJuYWwiKSkgeworICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXJF
eHRlcm5hbE9FUyIpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9
CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMo
RWJ0U2FtcGxlckV4dGVybmFsT0VTLCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgU0FNUExFUjJE
UkVDVCB7CisgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNFeHRlbnNpb24oIkdMX0FSQl90
ZXh0dXJlX3JlY3RhbmdsZSIpKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgInVu
c3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlcjJEUmVjdCIpOworICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
KyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxlcjJEUmVjdCwgcXVhbCwgQDEpOworICAgIH0K
KyAgICB8IHN0cnVjdF9zcGVjaWZpZXIgeworICAgICAgICAkJCA9ICQxOworICAgICAgICAkJC5x
dWFsaWZpZXIgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgfQorICAgIHwgVFlQRV9OQU1FIHsKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gVGhpcyBpcyBmb3IgdXNlciBkZWZpbmVkIHR5cGUgbmFtZXMuICBUaGUgbGV4
aWNhbCBwaGFzZSBsb29rZWQgdXAgdGhlCisgICAgICAgIC8vIHR5cGUuCisgICAgICAgIC8vCisg
ICAgICAgIFRUeXBlJiBzdHJ1Y3R1cmUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPigkMS5zeW1i
b2wpLT5nZXRUeXBlKCk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAg
ICAgJCQuc2V0QmFzaWMoRWJ0U3RydWN0LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnVzZXJEZWYg
PSAmc3RydWN0dXJlOworICAgIH0KKyAgICA7CisKK3N0cnVjdF9zcGVjaWZpZXIKKyAgICA6IFNU
UlVDVCBpZGVudGlmaWVyIExFRlRfQlJBQ0UgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNs
YXJhdGlvbihAMiwgKiQyLnN0cmluZykpIGNvbnRleHQtPnJlY292ZXIoKTsgfSBzdHJ1Y3RfZGVj
bGFyYXRpb25fbGlzdCBSSUdIVF9CUkFDRSB7CisgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZl
ZEVycm9yQ2hlY2soQDIsICokMi5zdHJpbmcpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworCisgICAgICAgIFRUeXBlKiBzdHJ1Y3R1cmUgPSBuZXcgVFR5cGUobmV3IFRTdHJ1Y3R1
cmUoJDIuc3RyaW5nLCAkNSkpOworICAgICAgICBUVmFyaWFibGUqIHVzZXJUeXBlRGVmID0gbmV3
IFRWYXJpYWJsZSgkMi5zdHJpbmcsICpzdHJ1Y3R1cmUsIHRydWUpOworICAgICAgICBpZiAoISBj
b250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnVzZXJUeXBlRGVmKSkgeworICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoQDIsICJyZWRlZmluaXRpb24iLCAkMi5zdHJpbmctPmNfc3RyKCksICJz
dHJ1Y3QiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAg
ICAgICAkJC5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgQDEpOworICAgICAgICAk
JC51c2VyRGVmID0gc3RydWN0dXJlOworICAgICAgICBjb250ZXh0LT5leGl0U3RydWN0RGVjbGFy
YXRpb24oKTsKKyAgICB9CisgICAgfCBTVFJVQ1QgTEVGVF9CUkFDRSB7IGlmIChjb250ZXh0LT5l
bnRlclN0cnVjdERlY2xhcmF0aW9uKEAyLCAqJDIuc3RyaW5nKSkgY29udGV4dC0+cmVjb3Zlcigp
OyB9IHN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IFJJR0hUX0JSQUNFIHsKKyAgICAgICAgVFR5cGUq
IHN0cnVjdHVyZSA9IG5ldyBUVHlwZShuZXcgVFN0cnVjdHVyZShOZXdQb29sVFN0cmluZygiIiks
ICQ0KSk7CisgICAgICAgICQkLnNldEJhc2ljKEVidFN0cnVjdCwgRXZxVGVtcG9yYXJ5LCBAMSk7
CisgICAgICAgICQkLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7CisgICAgICAgIGNvbnRleHQtPmV4aXRT
dHJ1Y3REZWNsYXJhdGlvbigpOworICAgIH0KKyAgICA7CisKK3N0cnVjdF9kZWNsYXJhdGlvbl9s
aXN0CisgICAgOiBzdHJ1Y3RfZGVjbGFyYXRpb24geworICAgICAgICAkJCA9ICQxOworICAgIH0K
KyAgICB8IHN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IHN0cnVjdF9kZWNsYXJhdGlvbiB7CisgICAg
ICAgICQkID0gJDE7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgJDItPnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBURmllbGQqIGZpZWxkID0gKCokMilbaV07CisgICAgICAgICAg
ICBmb3IgKHNpemVfdCBqID0gMDsgaiA8ICQkLT5zaXplKCk7ICsraikgeworICAgICAgICAgICAg
ICAgIGlmICgoKiQkKVtqXS0+bmFtZSgpID09IGZpZWxkLT5uYW1lKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJkdXBsaWNhdGUgZmllbGQgbmFtZSBpbiBzdHJ1
Y3R1cmU6IiwgInN0cnVjdCIsIGZpZWxkLT5uYW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAkJC0+cHVzaF9iYWNrKGZpZWxkKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICA7CisKK3N0cnVjdF9kZWNsYXJhdGlvbgorICAgIDogdHlwZV9zcGVjaWZpZXIgc3RydWN0
X2RlY2xhcmF0b3JfbGlzdCBTRU1JQ09MT04geworICAgICAgICAkJCA9ICQyOworCisgICAgICAg
IGlmIChjb250ZXh0LT52b2lkRXJyb3JDaGVjayhAMSwgKCokMilbMF0tPm5hbWUoKSwgJDEpKSB7
CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCAkJC0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAvLyBDYXJlZnVsIG5vdCB0byByZXBsYWNlIGFscmVhZHkga25vd24g
YXNwZWN0cyBvZiB0eXBlLCBsaWtlIGFycmF5LW5lc3MKKyAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICBUVHlwZSogdHlwZSA9ICgqJCQpW2ldLT50eXBlKCk7CisgICAgICAgICAgICB0eXBlLT5z
ZXRCYXNpY1R5cGUoJDEudHlwZSk7CisgICAgICAgICAgICB0eXBlLT5zZXROb21pbmFsU2l6ZSgk
MS5zaXplKTsKKyAgICAgICAgICAgIHR5cGUtPnNldE1hdHJpeCgkMS5tYXRyaXgpOworICAgICAg
ICAgICAgdHlwZS0+c2V0UHJlY2lzaW9uKCQxLnByZWNpc2lvbik7CisKKyAgICAgICAgICAgIC8v
IGRvbid0IGFsbG93IGFycmF5cyBvZiBhcnJheXMKKyAgICAgICAgICAgIGlmICh0eXBlLT5pc0Fy
cmF5KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVj
ayhAMSwgJDEpKQorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoJDEuYXJyYXkpCisgICAgICAgICAgICAgICAgdHlw
ZS0+c2V0QXJyYXlTaXplKCQxLmFycmF5U2l6ZSk7CisgICAgICAgICAgICBpZiAoJDEudXNlckRl
ZikKKyAgICAgICAgICAgICAgICB0eXBlLT5zZXRTdHJ1Y3QoJDEudXNlckRlZi0+Z2V0U3RydWN0
KCkpOworCisgICAgICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0TmVzdGluZ0Vycm9yQ2hlY2so
QDEsICooKiQkKVtpXSkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICB9CisgICAgfQorICAgIDsKKworc3RydWN0X2RlY2xhcmF0b3JfbGlzdAorICAgIDogc3Ry
dWN0X2RlY2xhcmF0b3IgeworICAgICAgICAkJCA9IE5ld1Bvb2xURmllbGRMaXN0KCk7CisgICAg
ICAgICQkLT5wdXNoX2JhY2soJDEpOworICAgIH0KKyAgICB8IHN0cnVjdF9kZWNsYXJhdG9yX2xp
c3QgQ09NTUEgc3RydWN0X2RlY2xhcmF0b3IgeworICAgICAgICAkJC0+cHVzaF9iYWNrKCQzKTsK
KyAgICB9CisgICAgOworCitzdHJ1Y3RfZGVjbGFyYXRvcgorICAgIDogaWRlbnRpZmllciB7Cisg
ICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soQDEsICokMS5zdHJpbmcpKQor
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIFRUeXBlKiB0eXBlID0g
bmV3IFRUeXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7CisgICAgICAgICQkID0gbmV3IFRGaWVs
ZCh0eXBlLCAkMS5zdHJpbmcpOworICAgIH0KKyAgICB8IGlkZW50aWZpZXIgTEVGVF9CUkFDS0VU
IGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7CisgICAgICAgIGlmIChjb250ZXh0
LT5yZXNlcnZlZEVycm9yQ2hlY2soQDEsICokMS5zdHJpbmcpKQorICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworCisgICAgICAgIFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKEVidFZvaWQs
IEVicFVuZGVmaW5lZCk7CisgICAgICAgIGludCBzaXplID0gMDsKKyAgICAgICAgaWYgKGNvbnRl
eHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soQDMsICQzLCBzaXplKSkKKyAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgdHlwZS0+c2V0QXJyYXlTaXplKHNpemUpOworCisgICAg
ICAgICQkID0gbmV3IFRGaWVsZCh0eXBlLCAkMS5zdHJpbmcpOworICAgIH0KKyAgICA7CisKK2lu
aXRpYWxpemVyCisgICAgOiBhc3NpZ25tZW50X2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAg
OworCitkZWNsYXJhdGlvbl9zdGF0ZW1lbnQKKyAgICA6IGRlY2xhcmF0aW9uIHsgJCQgPSAkMTsg
fQorICAgIDsKKworc3RhdGVtZW50CisgICAgOiBjb21wb3VuZF9zdGF0ZW1lbnQgIHsgJCQgPSAk
MTsgfQorICAgIHwgc2ltcGxlX3N0YXRlbWVudCAgICB7ICQkID0gJDE7IH0KKyAgICA7CisKKy8v
IEdyYW1tYXIgTm90ZTogIE5vIGxhYmVsZWQgc3RhdGVtZW50czsgJ2dvdG8nIGlzIG5vdCBzdXBw
b3J0ZWQuCisKK3NpbXBsZV9zdGF0ZW1lbnQKKyAgICA6IGRlY2xhcmF0aW9uX3N0YXRlbWVudCB7
ICQkID0gJDE7IH0KKyAgICB8IGV4cHJlc3Npb25fc3RhdGVtZW50ICB7ICQkID0gJDE7IH0KKyAg
ICB8IHNlbGVjdGlvbl9zdGF0ZW1lbnQgICB7ICQkID0gJDE7IH0KKyAgICB8IGl0ZXJhdGlvbl9z
dGF0ZW1lbnQgICB7ICQkID0gJDE7IH0KKyAgICB8IGp1bXBfc3RhdGVtZW50ICAgICAgICB7ICQk
ID0gJDE7IH0KKyAgICA7CisKK2NvbXBvdW5kX3N0YXRlbWVudAorICAgIDogTEVGVF9CUkFDRSBS
SUdIVF9CUkFDRSB7ICQkID0gMDsgfQorICAgIHwgTEVGVF9CUkFDRSB7IGNvbnRleHQtPnN5bWJv
bFRhYmxlLnB1c2goKTsgfSBzdGF0ZW1lbnRfbGlzdCB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBv
cCgpOyB9IFJJR0hUX0JSQUNFIHsKKyAgICAgICAgaWYgKCQzICE9IDApIHsKKyAgICAgICAgICAg
ICQzLT5zZXRPcChFT3BTZXF1ZW5jZSk7CisgICAgICAgICAgICAkMy0+c2V0TGluZShAJCk7Cisg
ICAgICAgIH0KKyAgICAgICAgJCQgPSAkMzsKKyAgICB9CisgICAgOworCitzdGF0ZW1lbnRfbm9f
bmV3X3Njb3BlCisgICAgOiBjb21wb3VuZF9zdGF0ZW1lbnRfbm9fbmV3X3Njb3BlIHsgJCQgPSAk
MTsgfQorICAgIHwgc2ltcGxlX3N0YXRlbWVudCAgICAgICAgICAgICAgICB7ICQkID0gJDE7IH0K
KyAgICA7CisKK3N0YXRlbWVudF93aXRoX3Njb3BlCisgICAgOiB7IGNvbnRleHQtPnN5bWJvbFRh
YmxlLnB1c2goKTsgfSBjb21wb3VuZF9zdGF0ZW1lbnRfbm9fbmV3X3Njb3BlIHsgY29udGV4dC0+
c3ltYm9sVGFibGUucG9wKCk7ICQkID0gJDI7IH0KKyAgICB8IHsgY29udGV4dC0+c3ltYm9sVGFi
bGUucHVzaCgpOyB9IHNpbXBsZV9zdGF0ZW1lbnQgICAgICAgICAgICAgICAgeyBjb250ZXh0LT5z
eW1ib2xUYWJsZS5wb3AoKTsgJCQgPSAkMjsgfQorICAgIDsKKworY29tcG91bmRfc3RhdGVtZW50
X25vX25ld19zY29wZQorICAgIC8vIFN0YXRlbWVudCB0aGF0IGRvZXNuJ3QgY3JlYXRlIGEgbmV3
IHNjb3BlLCBmb3Igc2VsZWN0aW9uX3N0YXRlbWVudCwgaXRlcmF0aW9uX3N0YXRlbWVudAorICAg
IDogTEVGVF9CUkFDRSBSSUdIVF9CUkFDRSB7CisgICAgICAgICQkID0gMDsKKyAgICB9CisgICAg
fCBMRUZUX0JSQUNFIHN0YXRlbWVudF9saXN0IFJJR0hUX0JSQUNFIHsKKyAgICAgICAgaWYgKCQy
KSB7CisgICAgICAgICAgICAkMi0+c2V0T3AoRU9wU2VxdWVuY2UpOworICAgICAgICAgICAgJDIt
PnNldExpbmUoQCQpOworICAgICAgICB9CisgICAgICAgICQkID0gJDI7CisgICAgfQorICAgIDsK
Kworc3RhdGVtZW50X2xpc3QKKyAgICA6IHN0YXRlbWVudCB7CisgICAgICAgICQkID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoJDEsIEAkKTsKKyAgICB9CisgICAgfCBzdGF0
ZW1lbnRfbGlzdCBzdGF0ZW1lbnQgeworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5ncm93QWdncmVnYXRlKCQxLCAkMiwgQCQpOworICAgIH0KKyAgICA7CisKK2V4cHJlc3Npb25f
c3RhdGVtZW50CisgICAgOiBTRU1JQ09MT04gIHsgJCQgPSAwOyB9CisgICAgfCBleHByZXNzaW9u
IFNFTUlDT0xPTiAgeyAkJCA9IHN0YXRpY19jYXN0PFRJbnRlcm1Ob2RlKj4oJDEpOyB9CisgICAg
OworCitzZWxlY3Rpb25fc3RhdGVtZW50CisgICAgOiBJRiBMRUZUX1BBUkVOIGV4cHJlc3Npb24g
UklHSFRfUEFSRU4gc2VsZWN0aW9uX3Jlc3Rfc3RhdGVtZW50IHsKKyAgICAgICAgaWYgKGNvbnRl
eHQtPmJvb2xFcnJvckNoZWNrKEAxLCAkMykpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFNlbGVjdGlvbigkMywg
JDUsIEAxKTsKKyAgICB9CisgICAgOworCitzZWxlY3Rpb25fcmVzdF9zdGF0ZW1lbnQKKyAgICA6
IHN0YXRlbWVudF93aXRoX3Njb3BlIEVMU0Ugc3RhdGVtZW50X3dpdGhfc2NvcGUgeworICAgICAg
ICAkJC5ub2RlMSA9ICQxOworICAgICAgICAkJC5ub2RlMiA9ICQzOworICAgIH0KKyAgICB8IHN0
YXRlbWVudF93aXRoX3Njb3BlIHsKKyAgICAgICAgJCQubm9kZTEgPSAkMTsKKyAgICAgICAgJCQu
bm9kZTIgPSAwOworICAgIH0KKyAgICA7CisKKy8vIEdyYW1tYXIgTm90ZTogIE5vICdzd2l0Y2gn
LiAgU3dpdGNoIHN0YXRlbWVudHMgbm90IHN1cHBvcnRlZC4KKworY29uZGl0aW9uCisgICAgLy8g
SW4gMTk5NiBjKysgZHJhZnQsIGNvbmRpdGlvbnMgY2FuIGluY2x1ZGUgc2luZ2xlIGRlY2xhcmF0
aW9ucworICAgIDogZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDE7CisgICAgICAgIGlmIChj
b250ZXh0LT5ib29sRXJyb3JDaGVjaygkMS0+Z2V0TGluZSgpLCAkMSkpCisgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgfQorICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUgaWRl
bnRpZmllciBFUVVBTCBpbml0aWFsaXplciB7CisgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1O
b2RlOworICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhAMiwg
JDEpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAoY29udGV4
dC0+Ym9vbEVycm9yQ2hlY2soQDIsICQxKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKKworICAgICAgICBpZiAoIWNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcihAMiwgKiQyLnN0
cmluZywgJDEsICQ0LCBpbnRlcm1Ob2RlKSkKKyAgICAgICAgICAgICQkID0gJDQ7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQg
PSAwOworICAgICAgICB9CisgICAgfQorICAgIDsKKworaXRlcmF0aW9uX3N0YXRlbWVudAorICAg
IDogV0hJTEUgTEVGVF9QQVJFTiB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgKytjb250
ZXh0LT5sb29wTmVzdGluZ0xldmVsOyB9IGNvbmRpdGlvbiBSSUdIVF9QQVJFTiBzdGF0ZW1lbnRf
bm9fbmV3X3Njb3BlIHsKKyAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7CisgICAg
ICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3AoRUxvb3BXaGlsZSwgMCwgJDQs
IDAsICQ2LCBAMSk7CisgICAgICAgIC0tY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsKKyAgICB9
CisgICAgfCBETyB7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfSBzdGF0ZW1lbnRfd2l0
aF9zY29wZSBXSElMRSBMRUZUX1BBUkVOIGV4cHJlc3Npb24gUklHSFRfUEFSRU4gU0VNSUNPTE9O
IHsKKyAgICAgICAgaWYgKGNvbnRleHQtPmJvb2xFcnJvckNoZWNrKEA4LCAkNikpCisgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkTG9vcChFTG9vcERvV2hpbGUsIDAsICQ2LCAwLCAkMywgQDQpOworICAgICAgICAt
LWNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7CisgICAgfQorICAgIHwgRk9SIExFRlRfUEFSRU4g
eyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZl
bDsgfSBmb3JfaW5pdF9zdGF0ZW1lbnQgZm9yX3Jlc3Rfc3RhdGVtZW50IFJJR0hUX1BBUkVOIHN0
YXRlbWVudF9ub19uZXdfc2NvcGUgeworICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3Ao
KTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkTG9vcChFTG9vcEZvciwg
JDQsIHJlaW50ZXJwcmV0X2Nhc3Q8VEludGVybVR5cGVkKj4oJDUubm9kZTEpLCByZWludGVycHJl
dF9jYXN0PFRJbnRlcm1UeXBlZCo+KCQ1Lm5vZGUyKSwgJDcsIEAxKTsKKyAgICAgICAgLS1jb250
ZXh0LT5sb29wTmVzdGluZ0xldmVsOworICAgIH0KKyAgICA7CisKK2Zvcl9pbml0X3N0YXRlbWVu
dAorICAgIDogZXhwcmVzc2lvbl9zdGF0ZW1lbnQgeworICAgICAgICAkJCA9ICQxOworICAgIH0K
KyAgICB8IGRlY2xhcmF0aW9uX3N0YXRlbWVudCB7CisgICAgICAgICQkID0gJDE7CisgICAgfQor
ICAgIDsKKworY29uZGl0aW9ub3B0CisgICAgOiBjb25kaXRpb24geworICAgICAgICAkJCA9ICQx
OworICAgIH0KKyAgICB8IC8qIE1heSBiZSBudWxsICovIHsKKyAgICAgICAgJCQgPSAwOworICAg
IH0KKyAgICA7CisKK2Zvcl9yZXN0X3N0YXRlbWVudAorICAgIDogY29uZGl0aW9ub3B0IFNFTUlD
T0xPTiB7CisgICAgICAgICQkLm5vZGUxID0gJDE7CisgICAgICAgICQkLm5vZGUyID0gMDsKKyAg
ICB9CisgICAgfCBjb25kaXRpb25vcHQgU0VNSUNPTE9OIGV4cHJlc3Npb24gIHsKKyAgICAgICAg
JCQubm9kZTEgPSAkMTsKKyAgICAgICAgJCQubm9kZTIgPSAkMzsKKyAgICB9CisgICAgOworCitq
dW1wX3N0YXRlbWVudAorICAgIDogQ09OVElOVUUgU0VNSUNPTE9OIHsKKyAgICAgICAgaWYgKGNv
bnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPD0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoQDEsICJjb250aW51ZSBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIpOwor
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgICQkID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BDb250aW51ZSwgQDEpOworICAgIH0K
KyAgICB8IEJSRUFLIFNFTUlDT0xPTiB7CisgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGlu
Z0xldmVsIDw9IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAiYnJlYWsgc3Rh
dGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRCcmFuY2goRU9wQnJlYWssIEAxKTsKKyAgICB9CisgICAgfCBSRVRVUk4gU0VNSUNPTE9O
IHsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVy
biwgQDEpOworICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+Z2V0QmFz
aWNUeXBlKCkgIT0gRWJ0Vm9pZCkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJu
b24tdm9pZCBmdW5jdGlvbiBtdXN0IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIpOworICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgfQorICAgIHwgUkVUVVJO
IGV4cHJlc3Npb24gU0VNSUNPTE9OIHsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQnJhbmNoKEVPcFJldHVybiwgJDIsIEAxKTsKKyAgICAgICAgY29udGV4dC0+ZnVuY3Rp
b25SZXR1cm5zVmFsdWUgPSB0cnVlOworICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0
aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgeworICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoQDEsICJ2b2lkIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1
cm4iKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfSBlbHNlIGlm
ICgqKGNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUpICE9ICQyLT5nZXRUeXBlKCkpIHsKKyAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAiZnVuY3Rpb24gcmV0dXJuIGlzIG5vdCBtYXRj
aGluZyB0eXBlOiIsICJyZXR1cm4iKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICB8IERJU0NBUkQgU0VNSUNPTE9OIHsKKyAgICAgICAgRlJB
R19PTkxZKCJkaXNjYXJkIiwgQDEpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRCcmFuY2goRU9wS2lsbCwgQDEpOworICAgIH0KKyAgICA7CisKKy8vIEdyYW1tYXIgTm90
ZTogIE5vICdnb3RvJy4gIEdvdG9zIGFyZSBub3Qgc3VwcG9ydGVkLgorCit0cmFuc2xhdGlvbl91
bml0CisgICAgOiBleHRlcm5hbF9kZWNsYXJhdGlvbiB7CisgICAgICAgICQkID0gJDE7CisgICAg
ICAgIGNvbnRleHQtPnRyZWVSb290ID0gJCQ7CisgICAgfQorICAgIHwgdHJhbnNsYXRpb25fdW5p
dCBleHRlcm5hbF9kZWNsYXJhdGlvbiB7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmdyb3dBZ2dyZWdhdGUoJDEsICQyLCBAJCk7CisgICAgICAgIGNvbnRleHQtPnRyZWVSb290
ID0gJCQ7CisgICAgfQorICAgIDsKKworZXh0ZXJuYWxfZGVjbGFyYXRpb24KKyAgICA6IGZ1bmN0
aW9uX2RlZmluaXRpb24geworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IGRlY2xhcmF0
aW9uIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgOworCitmdW5jdGlvbl9kZWZpbml0
aW9uCisgICAgOiBmdW5jdGlvbl9wcm90b3R5cGUgeworICAgICAgICBURnVuY3Rpb24qIGZ1bmN0
aW9uID0gJDEuZnVuY3Rpb247CisgICAgICAgIAorICAgICAgICBjb25zdCBUU3ltYm9sICpidWls
dEluID0gY29udGV4dC0+c3ltYm9sVGFibGUuZmluZEJ1aWx0SW4oZnVuY3Rpb24tPmdldE1hbmds
ZWROYW1lKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKGJ1aWx0SW4pCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAiYnVpbHQtaW4gZnVuY3Rpb25zIGNhbm5vdCBi
ZSByZWRlZmluZWQiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOworICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBURnVuY3Rp
b24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJs
ZS5maW5kKGZ1bmN0aW9uLT5nZXRNYW5nbGVkTmFtZSgpKSk7CisgICAgICAgIC8vCisgICAgICAg
IC8vIE5vdGU6ICAncHJldkRlYycgY291bGQgYmUgJ2Z1bmN0aW9uJyBpZiB0aGlzIGlzIHRoZSBm
aXJzdCB0aW1lIHdlJ3ZlIHNlZW4gZnVuY3Rpb24KKyAgICAgICAgLy8gYXMgaXQgd291bGQgaGF2
ZSBqdXN0IGJlZW4gcHV0IGluIHRoZSBzeW1ib2wgdGFibGUuICBPdGhlcndpc2UsIHdlJ3JlIGxv
b2tpbmcgdXAKKyAgICAgICAgLy8gYW4gZWFybGllciBvY2N1cmFuY2UuCisgICAgICAgIC8vCisg
ICAgICAgIGlmIChwcmV2RGVjLT5pc0RlZmluZWQoKSkgeworICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgIC8vIFRoZW4gdGhpcyBmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkuCisgICAgICAg
ICAgICAvLworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJmdW5jdGlvbiBhbHJlYWR5
IGhhcyBhIGJvZHkiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOworICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIHByZXZEZWMtPnNldERlZmlu
ZWQoKTsKKworICAgICAgICAvLworICAgICAgICAvLyBSYWlzZSBlcnJvciBtZXNzYWdlIGlmIG1h
aW4gZnVuY3Rpb24gdGFrZXMgYW55IHBhcmFtZXRlcnMgb3IgcmV0dXJuIGFueXRoaW5nIG90aGVy
IHRoYW4gdm9pZAorICAgICAgICAvLworICAgICAgICBpZiAoZnVuY3Rpb24tPmdldE5hbWUoKSA9
PSAibWFpbiIpIHsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0UGFyYW1Db3VudCgpID4g
MCkgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAiZnVuY3Rpb24gY2Fubm90
IHRha2UgYW55IHBhcmFtZXRlcihzKSIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSk7Cisg
ICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGZ1bmN0aW9uLT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0
Vm9pZCkgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAiIiwgZnVuY3Rpb24t
PmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpLCAibWFpbiBmdW5jdGlvbiBjYW5ub3Qg
cmV0dXJuIGEgdmFsdWUiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLworICAgICAgICAvLyBSZW1lbWJl
ciB0aGUgcmV0dXJuIHR5cGUgZm9yIGxhdGVyIGNoZWNraW5nIGZvciBSRVRVUk4gc3RhdGVtZW50
cy4KKyAgICAgICAgLy8KKyAgICAgICAgY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZSA9ICYo
cHJldkRlYy0+Z2V0UmV0dXJuVHlwZSgpKTsKKyAgICAgICAgY29udGV4dC0+ZnVuY3Rpb25SZXR1
cm5zVmFsdWUgPSBmYWxzZTsKKworICAgICAgICAvLworICAgICAgICAvLyBJbnNlcnQgcGFyYW1l
dGVycyBpbnRvIHRoZSBzeW1ib2wgdGFibGUuCisgICAgICAgIC8vIElmIHRoZSBwYXJhbWV0ZXIg
aGFzIG5vIG5hbWUsIGl0J3Mgbm90IGFuIGVycm9yLCBqdXN0IGRvbid0IGluc2VydCBpdAorICAg
ICAgICAvLyAoY291bGQgYmUgdXNlZCBmb3IgdW51c2VkIGFyZ3MpLgorICAgICAgICAvLworICAg
ICAgICAvLyBBbHNvLCBhY2N1bXVsYXRlIHRoZSBsaXN0IG9mIHBhcmFtZXRlcnMgaW50byB0aGUg
SElMLCBzbyBsb3dlciBsZXZlbCBjb2RlCisgICAgICAgIC8vIGtub3dzIHdoZXJlIHRvIGZpbmQg
cGFyYW1ldGVycy4KKyAgICAgICAgLy8KKyAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSogcGFyYW1O
b2RlcyA9IG5ldyBUSW50ZXJtQWdncmVnYXRlOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGZ1bmN0aW9uLT5nZXRQYXJhbUNvdW50KCk7IGkrKykgeworICAgICAgICAgICAgY29uc3Qg
VFBhcmFtZXRlciYgcGFyYW0gPSBmdW5jdGlvbi0+Z2V0UGFyYW0oaSk7CisgICAgICAgICAgICBp
ZiAocGFyYW0ubmFtZSAhPSAwKSB7CisgICAgICAgICAgICAgICAgVFZhcmlhYmxlICp2YXJpYWJs
ZSA9IG5ldyBUVmFyaWFibGUocGFyYW0ubmFtZSwgKnBhcmFtLnR5cGUpOworICAgICAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IHRoZSBwYXJhbWV0ZXJzIHdpdGggbmFt
ZSBpbiB0aGUgc3ltYm9sIHRhYmxlLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAg
ICAgaWYgKCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJyZWRlZmluaXRpb24iLCB2YXJpYWJs
ZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUg
cGFyYW1ldGVyIHRvIHRoZSBISUwKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAg
IHBhcmFtTm9kZXMgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXJpYWJsZS0+Z2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
cmlhYmxlLT5nZXRUeXBlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDEpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMSk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIHBhcmFtTm9kZXMgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuZ3Jvd0FnZ3JlZ2F0ZShwYXJhbU5vZGVzLCBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3lt
Ym9sKDAsICIiLCAqcGFyYW0udHlwZSwgQDEpLCBAMSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgY29udGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKHBh
cmFtTm9kZXMsIEVPcFBhcmFtZXRlcnMsIEAxKTsKKyAgICAgICAgJDEuaW50ZXJtQWdncmVnYXRl
ID0gcGFyYW1Ob2RlczsKKyAgICAgICAgY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA9IDA7Cisg
ICAgfQorICAgIGNvbXBvdW5kX3N0YXRlbWVudF9ub19uZXdfc2NvcGUgeworICAgICAgICAvLz8/
IENoZWNrIHRoYXQgYWxsIHBhdGhzIHJldHVybiBhIHZhbHVlIGlmIHJldHVybiB0eXBlICE9IHZv
aWQgPworICAgICAgICAvLyAgIE1heSBiZSBiZXN0IGRvbmUgYXMgcG9zdCBwcm9jZXNzIHBoYXNl
IG9uIGludGVybWVkaWF0ZSBjb2RlCisgICAgICAgIGlmIChjb250ZXh0LT5jdXJyZW50RnVuY3Rp
b25UeXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkICYmICEgY29udGV4dC0+ZnVuY3Rpb25S
ZXR1cm5zVmFsdWUpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAiZnVuY3Rpb24g
ZG9lcyBub3QgcmV0dXJuIGEgdmFsdWU6IiwgIiIsICQxLmZ1bmN0aW9uLT5nZXROYW1lKCkuY19z
dHIoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEu
aW50ZXJtQWdncmVnYXRlLCAkMywgQCQpOworICAgICAgICBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
c2V0QWdncmVnYXRlT3BlcmF0b3IoJCQsIEVPcEZ1bmN0aW9uLCBAMSk7CisgICAgICAgICQkLT5n
ZXRBc0FnZ3JlZ2F0ZSgpLT5zZXROYW1lKCQxLmZ1bmN0aW9uLT5nZXRNYW5nbGVkTmFtZSgpLmNf
c3RyKCkpOworICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0VHlwZSgkMS5mdW5jdGlv
bi0+Z2V0UmV0dXJuVHlwZSgpKTsKKworICAgICAgICAvLyBzdG9yZSB0aGUgcHJhZ21hIGluZm9y
bWF0aW9uIGZvciBkZWJ1ZyBhbmQgb3B0aW1pemUgYW5kIG90aGVyIHZlbmRvciBzcGVjaWZpYwor
ICAgICAgICAvLyBpbmZvcm1hdGlvbi4gVGhpcyBpbmZvcm1hdGlvbiBjYW4gYmUgcXVlcmllZCBm
cm9tIHRoZSBwYXJzZSB0cmVlCisgICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRPcHRp
bWl6ZShjb250ZXh0LT5wcmFnbWEoKS5vcHRpbWl6ZSk7CisgICAgICAgICQkLT5nZXRBc0FnZ3Jl
Z2F0ZSgpLT5zZXREZWJ1Zyhjb250ZXh0LT5wcmFnbWEoKS5kZWJ1Zyk7CisKKyAgICAgICAgY29u
dGV4dC0+c3ltYm9sVGFibGUucG9wKCk7CisgICAgfQorICAgIDsKKworJSUKKworaW50IGdsc2xh
bmdfcGFyc2UoVFBhcnNlQ29udGV4dCogY29udGV4dCkgeworICAgIHJldHVybiB5eXBhcnNlKGNv
bnRleHQpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ19sZXguY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ19sZXguY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY0OGU3
NjEwNjYzZjI3NzkwNTU2NWI0Mzk3ZmUxNGE0OTc1MzNiNGYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX2xl
eC5jcHAKQEAgLTAsMCArMSwyOTc4IEBACisjbGluZSAxNyAiLi9nbHNsYW5nLmwiCisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNl
ci5zaC4gRE8gTk9UIEVESVQhCisKKy8vIElnbm9yZSBlcnJvcnMgaW4gYXV0by1nZW5lcmF0ZWQg
Y29kZS4KKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25v
cmVkICItV3VudXNlZC1mdW5jdGlvbiIKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAi
LVd1bnVzZWQtdmFyaWFibGUiCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc3dp
dGNoLWVudW0iCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorI3ByYWdtYSB3YXJuaW5nKGRpc2Fi
bGU6IDQwNjUpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDE4OSkKKyNwcmFnbWEgd2Fybmlu
ZyhkaXNhYmxlOiA0NTA1KQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEpCisjZW5kaWYK
KworI2lmIGRlZmluZWQoX19jbGFuZ19fKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gK
KyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vua25vd24tcHJhZ21hcyIKKyNw
cmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtcmVnaXN0ZXIiCisj
ZW5kaWYKKworI2xpbmUgMjUgIi4vZ2xzbGFuZ19sZXguY3BwIgorCisjZGVmaW5lICBZWV9JTlRf
QUxJR05FRCBzaG9ydCBpbnQKKworLyogQSBsZXhpY2FsIHNjYW5uZXIgZ2VuZXJhdGVkIGJ5IGZs
ZXggKi8KKworI2RlZmluZSBGTEVYX1NDQU5ORVIKKyNkZWZpbmUgWVlfRkxFWF9NQUpPUl9WRVJT
SU9OIDIKKyNkZWZpbmUgWVlfRkxFWF9NSU5PUl9WRVJTSU9OIDUKKyNkZWZpbmUgWVlfRkxFWF9T
VUJNSU5PUl9WRVJTSU9OIDM3CisjaWYgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OID4gMAorI2Rl
ZmluZSBGTEVYX0JFVEEKKyNlbmRpZgorCisvKiBGaXJzdCwgd2UgZGVhbCB3aXRoICBwbGF0Zm9y
bS1zcGVjaWZpYyBvciBjb21waWxlci1zcGVjaWZpYyBpc3N1ZXMuICovCisKKy8qIGJlZ2luIHN0
YW5kYXJkIEMgaGVhZGVycy4gKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmlu
Zy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8qIGVuZCBz
dGFuZGFyZCBDIGhlYWRlcnMuICovCisKKy8qIGZsZXggaW50ZWdlciB0eXBlIGRlZmluaXRpb25z
ICovCisKKyNpZm5kZWYgRkxFWElOVF9ICisjZGVmaW5lIEZMRVhJTlRfSAorCisvKiBDOTkgc3lz
dGVtcyBoYXZlIDxpbnR0eXBlcy5oPi4gTm9uLUM5OSBzeXN0ZW1zIG1heSBvciBtYXkgbm90LiAq
LworCisjaWYgZGVmaW5lZCAoX19TVERDX1ZFUlNJT05fXykgJiYgX19TVERDX1ZFUlNJT05fXyA+
PSAxOTk5MDFMCisKKy8qIEM5OSBzYXlzIHRvIGRlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIGJl
Zm9yZSBpbmNsdWRpbmcgc3RkaW50LmgsCisgKiBpZiB5b3Ugd2FudCB0aGUgbGltaXQgKG1heC9t
aW4pIG1hY3JvcyBmb3IgaW50IHR5cGVzLiAKKyAqLworI2lmbmRlZiBfX1NURENfTElNSVRfTUFD
Uk9TCisjZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgMQorI2VuZGlmCisKKyNpbmNsdWRlIDxp
bnR0eXBlcy5oPgordHlwZWRlZiBpbnQ4X3QgZmxleF9pbnQ4X3Q7Cit0eXBlZGVmIHVpbnQ4X3Qg
ZmxleF91aW50OF90OwordHlwZWRlZiBpbnQxNl90IGZsZXhfaW50MTZfdDsKK3R5cGVkZWYgdWlu
dDE2X3QgZmxleF91aW50MTZfdDsKK3R5cGVkZWYgaW50MzJfdCBmbGV4X2ludDMyX3Q7Cit0eXBl
ZGVmIHVpbnQzMl90IGZsZXhfdWludDMyX3Q7CisjZWxzZQordHlwZWRlZiBzaWduZWQgY2hhciBm
bGV4X2ludDhfdDsKK3R5cGVkZWYgc2hvcnQgaW50IGZsZXhfaW50MTZfdDsKK3R5cGVkZWYgaW50
IGZsZXhfaW50MzJfdDsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBmbGV4X3VpbnQ4X3Q7IAordHlw
ZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgZmxleF91aW50MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQg
aW50IGZsZXhfdWludDMyX3Q7CisKKy8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8KKyNp
Zm5kZWYgSU5UOF9NSU4KKyNkZWZpbmUgSU5UOF9NSU4gICAgICAgICAgICAgICAoLTEyOCkKKyNl
bmRpZgorI2lmbmRlZiBJTlQxNl9NSU4KKyNkZWZpbmUgSU5UMTZfTUlOICAgICAgICAgICAgICAo
LTMyNzY3LTEpCisjZW5kaWYKKyNpZm5kZWYgSU5UMzJfTUlOCisjZGVmaW5lIElOVDMyX01JTiAg
ICAgICAgICAgICAgKC0yMTQ3NDgzNjQ3LTEpCisjZW5kaWYKKyNpZm5kZWYgSU5UOF9NQVgKKyNk
ZWZpbmUgSU5UOF9NQVggICAgICAgICAgICAgICAoMTI3KQorI2VuZGlmCisjaWZuZGVmIElOVDE2
X01BWAorI2RlZmluZSBJTlQxNl9NQVggICAgICAgICAgICAgICgzMjc2NykKKyNlbmRpZgorI2lm
bmRlZiBJTlQzMl9NQVgKKyNkZWZpbmUgSU5UMzJfTUFYICAgICAgICAgICAgICAoMjE0NzQ4MzY0
NykKKyNlbmRpZgorI2lmbmRlZiBVSU5UOF9NQVgKKyNkZWZpbmUgVUlOVDhfTUFYICAgICAgICAg
ICAgICAoMjU1VSkKKyNlbmRpZgorI2lmbmRlZiBVSU5UMTZfTUFYCisjZGVmaW5lIFVJTlQxNl9N
QVggICAgICAgICAgICAgKDY1NTM1VSkKKyNlbmRpZgorI2lmbmRlZiBVSU5UMzJfTUFYCisjZGVm
aW5lIFVJTlQzMl9NQVggICAgICAgICAgICAgKDQyOTQ5NjcyOTVVKQorI2VuZGlmCisKKyNlbmRp
ZiAvKiAhIEM5OSAqLworCisjZW5kaWYgLyogISBGTEVYSU5UX0ggKi8KKworI2lmZGVmIF9fY3Bs
dXNwbHVzCisKKy8qIFRoZSAiY29uc3QiIHN0b3JhZ2UtY2xhc3MtbW9kaWZpZXIgaXMgdmFsaWQu
ICovCisjZGVmaW5lIFlZX1VTRV9DT05TVAorCisjZWxzZQkvKiAhIF9fY3BsdXNwbHVzICovCisK
Ky8qIEM5OSByZXF1aXJlcyBfX1NURENfXyB0byBiZSBkZWZpbmVkIGFzIDEuICovCisjaWYgZGVm
aW5lZCAoX19TVERDX18pCisKKyNkZWZpbmUgWVlfVVNFX0NPTlNUCisKKyNlbmRpZgkvKiBkZWZp
bmVkIChfX1NURENfXykgKi8KKyNlbmRpZgkvKiAhIF9fY3BsdXNwbHVzICovCisKKyNpZmRlZiBZ
WV9VU0VfQ09OU1QKKyNkZWZpbmUgeXljb25zdCBjb25zdAorI2Vsc2UKKyNkZWZpbmUgeXljb25z
dAorI2VuZGlmCisKKy8qIFJldHVybmVkIHVwb24gZW5kLW9mLWZpbGUuICovCisjZGVmaW5lIFlZ
X05VTEwgMAorCisvKiBQcm9tb3RlcyBhIHBvc3NpYmx5IG5lZ2F0aXZlLCBwb3NzaWJseSBzaWdu
ZWQgY2hhciB0byBhbiB1bnNpZ25lZAorICogaW50ZWdlciBmb3IgdXNlIGFzIGFuIGFycmF5IGlu
ZGV4LiAgSWYgdGhlIHNpZ25lZCBjaGFyIGlzIG5lZ2F0aXZlLAorICogd2Ugd2FudCB0byBpbnN0
ZWFkIHRyZWF0IGl0IGFzIGFuIDgtYml0IHVuc2lnbmVkIGNoYXIsIGhlbmNlIHRoZQorICogZG91
YmxlIGNhc3QuCisgKi8KKyNkZWZpbmUgWVlfU0NfVE9fVUkoYykgKCh1bnNpZ25lZCBpbnQpICh1
bnNpZ25lZCBjaGFyKSBjKQorCisvKiBBbiBvcGFxdWUgcG9pbnRlci4gKi8KKyNpZm5kZWYgWVlf
VFlQRURFRl9ZWV9TQ0FOTkVSX1QKKyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TQ0FOTkVSX1QKK3R5
cGVkZWYgdm9pZCogeXlzY2FuX3Q7CisjZW5kaWYKKworLyogRm9yIGNvbnZlbmllbmNlLCB0aGVz
ZSB2YXJzIChwbHVzIHRoZSBiaXNvbiB2YXJzIGZhciBiZWxvdykKKyAgIGFyZSBtYWNyb3MgaW4g
dGhlIHJlZW50cmFudCBzY2FubmVyLiAqLworI2RlZmluZSB5eWluIHl5Zy0+eXlpbl9yCisjZGVm
aW5lIHl5b3V0IHl5Zy0+eXlvdXRfcgorI2RlZmluZSB5eWV4dHJhIHl5Zy0+eXlleHRyYV9yCisj
ZGVmaW5lIHl5bGVuZyB5eWctPnl5bGVuZ19yCisjZGVmaW5lIHl5dGV4dCB5eWctPnl5dGV4dF9y
CisjZGVmaW5lIHl5bGluZW5vIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2JzX2xpbmVu
bykKKyNkZWZpbmUgeXljb2x1bW4gKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnNfY29s
dW1uKQorI2RlZmluZSB5eV9mbGV4X2RlYnVnIHl5Zy0+eXlfZmxleF9kZWJ1Z19yCisKKy8qIEVu
dGVyIGEgc3RhcnQgY29uZGl0aW9uLiAgVGhpcyBtYWNybyByZWFsbHkgb3VnaHQgdG8gdGFrZSBh
IHBhcmFtZXRlciwKKyAqIGJ1dCB3ZSBkbyBpdCB0aGUgZGlzZ3VzdGluZyBjcnVmdHkgd2F5IGZv
cmNlZCBvbiB1cyBieSB0aGUgKCktbGVzcworICogZGVmaW5pdGlvbiBvZiBCRUdJTi4KKyAqLwor
I2RlZmluZSBCRUdJTiB5eWctPnl5X3N0YXJ0ID0gMSArIDIgKgorCisvKiBUcmFuc2xhdGUgdGhl
IGN1cnJlbnQgc3RhcnQgc3RhdGUgaW50byBhIHZhbHVlIHRoYXQgY2FuIGJlIGxhdGVyIGhhbmRl
ZAorICogdG8gQkVHSU4gdG8gcmV0dXJuIHRvIHRoZSBzdGF0ZS4gIFRoZSBZWVNUQVRFIGFsaWFz
IGlzIGZvciBsZXgKKyAqIGNvbXBhdGliaWxpdHkuCisgKi8KKyNkZWZpbmUgWVlfU1RBUlQgKCh5
eWctPnl5X3N0YXJ0IC0gMSkgLyAyKQorI2RlZmluZSBZWVNUQVRFIFlZX1NUQVJUCisKKy8qIEFj
dGlvbiBudW1iZXIgZm9yIEVPRiBydWxlIG9mIGEgZ2l2ZW4gc3RhcnQgc3RhdGUuICovCisjZGVm
aW5lIFlZX1NUQVRFX0VPRihzdGF0ZSkgKFlZX0VORF9PRl9CVUZGRVIgKyBzdGF0ZSArIDEpCisK
Ky8qIFNwZWNpYWwgYWN0aW9uIG1lYW5pbmcgInN0YXJ0IHByb2Nlc3NpbmcgYSBuZXcgZmlsZSIu
ICovCisjZGVmaW5lIFlZX05FV19GSUxFIHl5cmVzdGFydCh5eWluICx5eXNjYW5uZXIgKQorCisj
ZGVmaW5lIFlZX0VORF9PRl9CVUZGRVJfQ0hBUiAwCisKKy8qIFNpemUgb2YgZGVmYXVsdCBpbnB1
dCBidWZmZXIuICovCisjaWZuZGVmIFlZX0JVRl9TSVpFCisjZGVmaW5lIFlZX0JVRl9TSVpFIDE2
Mzg0CisjZW5kaWYKKworLyogVGhlIHN0YXRlIGJ1ZiBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBo
b2xkIG9uZSBzdGF0ZSBwZXIgY2hhcmFjdGVyIGluIHRoZSBtYWluIGJ1ZmZlci4KKyAqLworI2Rl
ZmluZSBZWV9TVEFURV9CVUZfU0laRSAgICgoWVlfQlVGX1NJWkUgKyAyKSAqIHNpemVvZih5eV9z
dGF0ZV90eXBlKSkKKworI2lmbmRlZiBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQorI2RlZmlu
ZSBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQordHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0
YXRlICpZWV9CVUZGRVJfU1RBVEU7CisjZW5kaWYKKworI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJ
WkVfVAorI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAordHlwZWRlZiBzaXplX3QgeXlfc2l6
ZV90OworI2VuZGlmCisKKyNkZWZpbmUgRU9CX0FDVF9DT05USU5VRV9TQ0FOIDAKKyNkZWZpbmUg
RU9CX0FDVF9FTkRfT0ZfRklMRSAxCisjZGVmaW5lIEVPQl9BQ1RfTEFTVF9NQVRDSCAyCisKKyAg
ICAvKiBOb3RlOiBXZSBzcGVjaWZpY2FsbHkgb21pdCB0aGUgdGVzdCBmb3IgeXlfcnVsZV9jYW5f
bWF0Y2hfZW9sIGJlY2F1c2UgaXQgcmVxdWlyZXMKKyAgICAgKiAgICAgICBhY2Nlc3MgdG8gdGhl
IGxvY2FsIHZhcmlhYmxlIHl5X2FjdC4gU2luY2UgeXlsZXNzKCkgaXMgYSBtYWNybywgaXQgd291
bGQgYnJlYWsKKyAgICAgKiAgICAgICBleGlzdGluZyBzY2FubmVycyB0aGF0IGNhbGwgeXlsZXNz
KCkgZnJvbSBPVVRTSURFIHl5bGV4LiAKKyAgICAgKiAgICAgICBPbmUgb2J2aW91cyBzb2x1dGlv
biBpdCB0byBtYWtlIHl5X2FjdCBhIGdsb2JhbC4gSSB0cmllZCB0aGF0LCBhbmQgc2F3CisgICAg
ICogICAgICAgYSA1JSBwZXJmb3JtYW5jZSBoaXQgaW4gYSBub24teXlsaW5lbm8gc2Nhbm5lciwg
YmVjYXVzZSB5eV9hY3QgaXMKKyAgICAgKiAgICAgICBub3JtYWxseSBkZWNsYXJlZCBhcyBhIHJl
Z2lzdGVyIHZhcmlhYmxlLS0gc28gaXQgaXMgbm90IHdvcnRoIGl0LgorICAgICAqLworICAgICNk
ZWZpbmUgIFlZX0xFU1NfTElORU5PKG4pIFwKKyAgICAgICAgICAgIGRvIHsgXAorICAgICAgICAg
ICAgICAgIGludCB5eWw7XAorICAgICAgICAgICAgICAgIGZvciAoIHl5bCA9IG47IHl5bCA8IHl5
bGVuZzsgKyt5eWwgKVwKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAn
XG4nIClcCisgICAgICAgICAgICAgICAgICAgICAgICAtLXl5bGluZW5vO1wKKyAgICAgICAgICAg
IH13aGlsZSgwKQorICAgIAorLyogUmV0dXJuIGFsbCBidXQgdGhlIGZpcnN0ICJuIiBtYXRjaGVk
IGNoYXJhY3RlcnMgYmFjayB0byB0aGUgaW5wdXQgc3RyZWFtLiAqLworI2RlZmluZSB5eWxlc3Mo
bikgXAorCWRvIFwKKwkJeyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4
dC4gKi8gXAorICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAorICAgICAgICBZ
WV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9s
ZF9jaGFyOyBcCisJCVlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQgXAorCQl5eWctPnl5X2NfYnVm
X3AgPSB5eV9jcCA9IHl5X2JwICsgeXlsZXNzX21hY3JvX2FyZyAtIFlZX01PUkVfQURKOyBcCisJ
CVlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8gXAorCQl9IFwK
Kwl3aGlsZSAoIDAgKQorCisjZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQoIGMsIHl5Zy0+eXl0ZXh0
X3B0ciAsIHl5c2Nhbm5lciApCisKKyNpZm5kZWYgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQor
I2RlZmluZSBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCitzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRl
CisJeworCUZJTEUgKnl5X2lucHV0X2ZpbGU7CisKKwljaGFyICp5eV9jaF9idWY7CQkvKiBpbnB1
dCBidWZmZXIgKi8KKwljaGFyICp5eV9idWZfcG9zOwkJLyogY3VycmVudCBwb3NpdGlvbiBpbiBp
bnB1dCBidWZmZXIgKi8KKworCS8qIFNpemUgb2YgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLCBub3Qg
aW5jbHVkaW5nIHJvb20gZm9yIEVPQgorCSAqIGNoYXJhY3RlcnMuCisJICovCisJeXlfc2l6ZV90
IHl5X2J1Zl9zaXplOworCisJLyogTnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2No
X2J1Ziwgbm90IGluY2x1ZGluZyBFT0IKKwkgKiBjaGFyYWN0ZXJzLgorCSAqLworCXl5X3NpemVf
dCB5eV9uX2NoYXJzOworCisJLyogV2hldGhlciB3ZSAib3duIiB0aGUgYnVmZmVyIC0gaS5lLiwg
d2Uga25vdyB3ZSBjcmVhdGVkIGl0LAorCSAqIGFuZCBjYW4gcmVhbGxvYygpIGl0IHRvIGdyb3cg
aXQsIGFuZCBzaG91bGQgZnJlZSgpIGl0IHRvCisJICogZGVsZXRlIGl0LgorCSAqLworCWludCB5
eV9pc19vdXJfYnVmZmVyOworCisJLyogV2hldGhlciB0aGlzIGlzIGFuICJpbnRlcmFjdGl2ZSIg
aW5wdXQgc291cmNlOyBpZiBzbywgYW5kCisJICogaWYgd2UncmUgdXNpbmcgc3RkaW8gZm9yIGlu
cHV0LCB0aGVuIHdlIHdhbnQgdG8gdXNlIGdldGMoKQorCSAqIGluc3RlYWQgb2YgZnJlYWQoKSwg
dG8gbWFrZSBzdXJlIHdlIHN0b3AgZmV0Y2hpbmcgaW5wdXQgYWZ0ZXIKKwkgKiBlYWNoIG5ld2xp
bmUuCisJICovCisJaW50IHl5X2lzX2ludGVyYWN0aXZlOworCisJLyogV2hldGhlciB3ZSdyZSBj
b25zaWRlcmVkIHRvIGJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLgorCSAqIElmIHNvLCAn
XicgcnVsZXMgd2lsbCBiZSBhY3RpdmUgb24gdGhlIG5leHQgbWF0Y2gsIG90aGVyd2lzZQorCSAq
IG5vdC4KKwkgKi8KKwlpbnQgeXlfYXRfYm9sOworCisgICAgaW50IHl5X2JzX2xpbmVubzsgLyoq
PCBUaGUgbGluZSBjb3VudC4gKi8KKyAgICBpbnQgeXlfYnNfY29sdW1uOyAvKio8IFRoZSBjb2x1
bW4gY291bnQuICovCisgICAgCisJLyogV2hldGhlciB0byB0cnkgdG8gZmlsbCB0aGUgaW5wdXQg
YnVmZmVyIHdoZW4gd2UgcmVhY2ggdGhlCisJICogZW5kIG9mIGl0LgorCSAqLworCWludCB5eV9m
aWxsX2J1ZmZlcjsKKworCWludCB5eV9idWZmZXJfc3RhdHVzOworCisjZGVmaW5lIFlZX0JVRkZF
Ul9ORVcgMAorI2RlZmluZSBZWV9CVUZGRVJfTk9STUFMIDEKKwkvKiBXaGVuIGFuIEVPRidzIGJl
ZW4gc2VlbiBidXQgdGhlcmUncyBzdGlsbCBzb21lIHRleHQgdG8gcHJvY2VzcworCSAqIHRoZW4g
d2UgbWFyayB0aGUgYnVmZmVyIGFzIFlZX0VPRl9QRU5ESU5HLCB0byBpbmRpY2F0ZSB0aGF0IHdl
CisJICogc2hvdWxkbid0IHRyeSByZWFkaW5nIGZyb20gdGhlIGlucHV0IHNvdXJjZSBhbnkgbW9y
ZS4gIFdlIG1pZ2h0CisJICogc3RpbGwgaGF2ZSBhIGJ1bmNoIG9mIHRva2VucyB0byBtYXRjaCwg
dGhvdWdoLCBiZWNhdXNlIG9mCisJICogcG9zc2libGUgYmFja2luZy11cC4KKwkgKgorCSAqIFdo
ZW4gd2UgYWN0dWFsbHkgc2VlIHRoZSBFT0YsIHdlIGNoYW5nZSB0aGUgc3RhdHVzIHRvICJuZXci
CisJICogKHZpYSB5eXJlc3RhcnQoKSksIHNvIHRoYXQgdGhlIHVzZXIgY2FuIGNvbnRpbnVlIHNj
YW5uaW5nIGJ5CisJICoganVzdCBwb2ludGluZyB5eWluIGF0IGEgbmV3IGlucHV0IGZpbGUuCisJ
ICovCisjZGVmaW5lIFlZX0JVRkZFUl9FT0ZfUEVORElORyAyCisKKwl9OworI2VuZGlmIC8qICFZ
WV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFICovCisKKy8qIFdlIHByb3ZpZGUgbWFjcm9zIGZvciBh
Y2Nlc3NpbmcgYnVmZmVyIHN0YXRlcyBpbiBjYXNlIGluIHRoZQorICogZnV0dXJlIHdlIHdhbnQg
dG8gcHV0IHRoZSBidWZmZXIgc3RhdGVzIGluIGEgbW9yZSBnZW5lcmFsCisgKiAic2Nhbm5lciBz
dGF0ZSIuCisgKgorICogUmV0dXJucyB0aGUgdG9wIG9mIHRoZSBzdGFjaywgb3IgTlVMTC4KKyAq
LworI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUiAoIHl5Zy0+eXlfYnVmZmVyX3N0YWNrIFwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgPyB5eWctPnl5X2J1ZmZlcl9zdGFja1t5eWctPnl5X2J1
ZmZlcl9zdGFja190b3BdIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiBOVUxMKQorCisv
KiBTYW1lIGFzIHByZXZpb3VzIG1hY3JvLCBidXQgdXNlZnVsIHdoZW4gd2Uga25vdyB0aGF0IHRo
ZSBidWZmZXIgc3RhY2sgaXMgbm90CisgKiBOVUxMIG9yIHdoZW4gd2UgbmVlZCBhbiBsdmFsdWUu
IEZvciBpbnRlcm5hbCB1c2Ugb25seS4KKyAqLworI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUgeXlnLT55eV9idWZmZXJfc3RhY2tbeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wXQorCit2
b2lkIHl5cmVzdGFydCAoRklMRSAqaW5wdXRfZmlsZSAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2
b2lkIHl5X3N3aXRjaF90b19idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICx5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKK1lZX0JVRkZFUl9TVEFURSB5eV9jcmVhdGVfYnVmZmVyIChGSUxF
ICpmaWxlLGludCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgeXlfZGVsZXRlX2J1
ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCB5eV9m
bHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3Zv
aWQgeXlwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLHl5c2Nh
bl90IHl5c2Nhbm5lciApOwordm9pZCB5eXBvcF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nh
bm5lciApOworCitzdGF0aWMgdm9pZCB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5
c2Nhbm5lciApOworc3RhdGljIHZvaWQgeXlfbG9hZF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5
c2Nhbm5lciApOworc3RhdGljIHZvaWQgeXlfaW5pdF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBi
LEZJTEUgKmZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisjZGVmaW5lIFlZX0ZMVVNIX0JV
RkZFUiB5eV9mbHVzaF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lcikKKworWVlf
QlVGRkVSX1NUQVRFIHl5X3NjYW5fYnVmZmVyIChjaGFyICpiYXNlLHl5X3NpemVfdCBzaXplICx5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX3N0cmluZyAoeXlj
b25zdCBjaGFyICp5eV9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworWVlfQlVGRkVSX1NUQVRF
IHl5X3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMseXlfc2l6ZV90IGxlbiAseXlzY2Fu
X3QgeXlzY2FubmVyICk7CisKK3ZvaWQgKnl5YWxsb2MgKHl5X3NpemVfdCAseXlzY2FuX3QgeXlz
Y2FubmVyICk7Cit2b2lkICp5eXJlYWxsb2MgKHZvaWQgKix5eV9zaXplX3QgLHl5c2Nhbl90IHl5
c2Nhbm5lciApOwordm9pZCB5eWZyZWUgKHZvaWQgKiAseXlzY2FuX3QgeXlzY2FubmVyICk7CisK
KyNkZWZpbmUgeXlfbmV3X2J1ZmZlciB5eV9jcmVhdGVfYnVmZmVyCisKKyNkZWZpbmUgeXlfc2V0
X2ludGVyYWN0aXZlKGlzX2ludGVyYWN0aXZlKSBcCisJeyBcCisJaWYgKCAhIFlZX0NVUlJFTlRf
QlVGRkVSICl7IFwKKyAgICAgICAgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOyBc
CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKKyAgICAgICAgICAgIHl5X2NyZWF0
ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsgXAorCX0gXAorCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgPSBpc19pbnRlcmFjdGl2ZTsgXAor
CX0KKworI2RlZmluZSB5eV9zZXRfYm9sKGF0X2JvbCkgXAorCXsgXAorCWlmICggISBZWV9DVVJS
RU5UX0JVRkZFUiApe1wKKyAgICAgICAgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIp
OyBcCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKKyAgICAgICAgICAgIHl5X2Ny
ZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsgXAorCX0gXAorCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gYXRfYm9sOyBcCisJfQorCisjZGVmaW5l
IFlZX0FUX0JPTCgpIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCkKKworLyog
QmVnaW4gdXNlciBzZWN0MyAqLworCisjZGVmaW5lIHl5d3JhcCh5eXNjYW5uZXIpIDEKKyNkZWZp
bmUgWVlfU0tJUF9ZWVdSQVAKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIFlZX0NIQVI7CisKK3R5
cGVkZWYgaW50IHl5X3N0YXRlX3R5cGU7CisKKyNkZWZpbmUgeXl0ZXh0X3B0ciB5eXRleHRfcgor
CitzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUgKHl5c2Nhbl90IHl5
c2Nhbm5lciApOworc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAoeXlfc3Rh
dGVfdHlwZSBjdXJyZW50X3N0YXRlICAseXlzY2FuX3QgeXlzY2FubmVyKTsKK3N0YXRpYyBpbnQg
eXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3N0YXRpYyB2b2lkIHl5
X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIgbXNnW10gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwor
CisvKiBEb25lIGFmdGVyIHRoZSBjdXJyZW50IHBhdHRlcm4gaGFzIGJlZW4gbWF0Y2hlZCBhbmQg
YmVmb3JlIHRoZQorICogY29ycmVzcG9uZGluZyBhY3Rpb24gLSBzZXRzIHVwIHl5dGV4dC4KKyAq
LworI2RlZmluZSBZWV9ET19CRUZPUkVfQUNUSU9OIFwKKwl5eWctPnl5dGV4dF9wdHIgPSB5eV9i
cDsgXAorCXl5bGVuZyA9IChzaXplX3QpICh5eV9jcCAtIHl5X2JwKTsgXAorCXl5Zy0+eXlfaG9s
ZF9jaGFyID0gKnl5X2NwOyBcCisJKnl5X2NwID0gJ1wwJzsgXAorCXl5Zy0+eXlfY19idWZfcCA9
IHl5X2NwOworCisjZGVmaW5lIFlZX05VTV9SVUxFUyAxNDcKKyNkZWZpbmUgWVlfRU5EX09GX0JV
RkZFUiAxNDgKKy8qIFRoaXMgc3RydWN0IGlzIG5vdCB1c2VkIGluIHRoaXMgc2Nhbm5lciwKKyAg
IGJ1dCBpdHMgcHJlc2VuY2UgaXMgbmVjZXNzYXJ5LiAqLworc3RydWN0IHl5X3RyYW5zX2luZm8K
Kwl7CisJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKKwlmbGV4X2ludDMyX3QgeXlfbnh0OworCX07
CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0WzQ0M10gPQorICAgIHsgICAw
LAorICAgICAgICAwLCAgICAwLCAgMTQ4LCAgMTQ2LCAgMTQ1LCAgMTQ1LCAgMTMyLCAgMTM4LCAg
MTQzLCAgMTI3LAorICAgICAgMTI4LCAgMTM2LCAgMTM1LCAgMTI0LCAgMTMzLCAgMTMxLCAgMTM3
LCAgIDk2LCAgIDk2LCAgMTI1LAorICAgICAgMTIxLCAgMTM5LCAgMTI2LCAgMTQwLCAgMTQ0LCAg
IDkzLCAgMTI5LCAgMTMwLCAgMTQyLCAgIDkzLAorICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAorICAgICAgIDkzLCAgIDkzLCAg
IDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgMTIyLAorICAgICAgMTQx
LCAgMTIzLCAgMTM0LCAgMTE4LCAgMTA0LCAgMTIzLCAgMTEyLCAgMTA3LCAgMTAyLCAgMTEwLAor
ICAgICAgMTAwLCAgMTExLCAgMTAxLCAgIDk5LCAgMTAzLCAgIDk4LCAgIDk1LCAgIDk2LCAgICAw
LCAgICAwLAorICAgICAgMTMwLCAgMTIyLCAgMTI5LCAgMTE5LCAgMTE1LCAgMTE3LCAgMTE2LCAg
MTIwLCAgIDkzLCAgMTA4LAorICAgICAgMTE0LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAorICAgICAgIDkzLCAgIDEyLCAgIDkzLCAgIDkzLCAg
IDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAorCisgICAgICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgMTUsICAgMTcsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCisg
ICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsCisgICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAxMDksICAxMTMsICAgIDAsICAg
OTgsICAgIDAsICAgIDAsCisgICAgICAgOTcsICAgOTQsICAxMDUsICAxMDYsICAgNDUsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgOTMsICAgOTMsICAgOTMs
ICAgMTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgOTMsICAg
OTMsICAgMjEsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCisgICAg
ICAgOTMsICAgMTgsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsCisgICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsICAgOTMsCisKKyAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICAgMCwg
ICA5OSwgICAgMCwgICA5OCwgICA5MywKKyAgICAgICAyMywgICA5MywgICA5MywgICA5MCwgICA5
MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKKyAgICAgICA5MywgICAxNiwgICA0OCwg
ICA5MywgICA5MywgICA5MywgICA2NCwgICA5MywgICA5MywgICA1MywKKyAgICAgICA2OCwgICA5
MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA2NSwKKyAgICAg
ICAgNCwgICAyOCwgICAyOSwgICAzMCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5
MywKKyAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5Mywg
ICA5MywgICA5MywKKyAgICAgICA1MSwgICAyNCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5
MywgICA5MywgICAzMSwgICAzMiwKKyAgICAgICAzMywgICAyMiwgICA5MywgICA5MywgICA5Mywg
ICAxMCwgICAzNywgICAzOCwgICAzOSwgICA0NiwKKyAgICAgICAgNywgICA5MywgICA5MywgICA5
MywgICA5MywgICA3NywgICA3OCwgICA3OSwgICA5MywgICAyNSwKKyAgICAgICA2OSwgICAyMCwg
ICA4MCwgICA4MSwgICA4MiwgICAgMiwgICA3NCwgICA3NSwgICA3NiwgICA5MywKKworICAgICAg
IDE5LCAgIDcyLCAgIDkzLCAgIDkzLCAgIDM0LCAgIDM1LCAgIDM2LCAgIDkzLCAgIDkzLCAgIDkz
LAorICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDY2LCAgIDkzLCAg
IDkzLCAgIDkzLAorICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDQ3LCAgIDkz
LCAgIDkyLCAgIDkzLCAgIDkzLAorICAgICAgIDE0LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAg
IDY3LCAgIDYxLCAgIDU2LCAgIDkzLCAgIDkzLAorICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDcz
LCAgIDUyLCAgIDkzLCAgIDU5LCAgIDI3LCAgIDkzLCAgIDg5LAorICAgICAgIDYwLCAgIDQ0LCAg
IDcxLCAgIDU0LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAorICAgICAgIDkz
LCAgIDkzLCAgIDU1LCAgIDI2LCAgIDkzLCAgIDkzLCAgIDkzLCAgICAzLCAgIDkzLCAgIDkzLAor
ICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDQ5LCAgICA4LCAgIDkzLCAgICA5LCAgIDkzLCAgIDkz
LCAgIDExLAorICAgICAgIDYyLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDU3LCAgIDkzLCAgIDkzLCAg
IDkzLCAgIDkzLCAgIDkzLAorICAgICAgIDkzLCAgIDUwLCAgIDcwLCAgIDU4LCAgICA2LCAgIDYz
LCAgICAxLCAgIDkxLCAgICA1LCAgIDgzLAorCisgICAgICAgNDAsICAgODQsICAgOTMsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgNDEsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgOTMs
ICAgOTMsICAgNDMsICAgOTMsICAgODcsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCisg
ICAgICAgODUsICAgOTMsICAgODYsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgNDIsCisgICAgICAgODgsICAgIDAKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQzMl90IHl5X2VjWzI1Nl0gPQorICAgIHsgICAwLAorICAgICAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAyLCAgICAzLAorICAgICAgICAyLCAgICAy
LCAgICAyLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LAorICAgICAgICAxLCAgICAyLCAgICA0LCAgICAxLCAgICAxLCAgICAxLCAgICA1LCAgICA2LCAg
ICAxLCAgICA3LAorICAgICAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLCAgIDE0
LCAgIDE1LCAgIDE2LCAgIDE3LAorICAgICAgIDE4LCAgIDE5LCAgIDIwLCAgIDIwLCAgIDIwLCAg
IDIxLCAgIDIxLCAgIDIyLCAgIDIzLCAgIDI0LAorICAgICAgIDI1LCAgIDI2LCAgIDI3LCAgICAx
LCAgIDI4LCAgIDI4LCAgIDI5LCAgIDMwLCAgIDMxLCAgIDI4LAorICAgICAgIDMyLCAgIDMyLCAg
IDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMzLCAgIDMyLAorICAgICAgIDMy
LCAgIDM0LCAgIDM1LCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDM2LCAgIDMyLCAgIDMyLAor
ICAgICAgIDM3LCAgICAxLCAgIDM4LCAgIDM5LCAgIDMyLCAgICAxLCAgIDQwLCAgIDQxLCAgIDQy
LCAgIDQzLAorCisgICAgICAgNDQsICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAgMzIsICAgNDks
ICAgNTAsICAgNTEsICAgNTIsCisgICAgICAgNTMsICAgNTQsICAgMzIsICAgNTUsICAgNTYsICAg
NTcsICAgNTgsICAgNTksICAgNjAsICAgNjEsCisgICAgICAgNjIsICAgNjMsICAgNjQsICAgNjUs
ICAgNjYsICAgNjcsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisg
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisKKyAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMQorICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfbWV0
YVs2OF0gPQorICAgIHsgICAwLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLAorICAgICAgICAyLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAyLCAgICAyLCAgICAyLAorICAgICAgICAy
LCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAxLCAgICAxLCAgICAxLCAgICAyLAor
ICAgICAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAzLCAgICAzLCAgICAzLCAgICAz
LCAgICAzLAorICAgICAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAg
ICAzLCAgICAzLCAgICAzLAorICAgICAgICAzLCAgICAzLCAgICAzLCAgICAxLCAgICAxLCAgICAx
LCAgICAxCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzQ0
NV0gPQorICAgIHsgICAwLAorICAgICAgICAwLCAgICAwLCAgNTg3LCAgNTg4LCAgNTg4LCAgNTg4
LCAgNTYxLCAgIDQzLCAgIDY0LCAgNTg4LAorICAgICAgNTg4LCAgNTYwLCAgIDYxLCAgNTg4LCAg
IDYwLCAgIDU4LCAgNTU5LCAgIDc3LCAgIDg2LCAgNTU3LAorICAgICAgNTg4LCAgMTA0LCAgNTU3
LCAgIDU1LCAgNTg4LCAgICAwLCAgNTg4LCAgNTg4LCAgIDc1LCAgIDI2LAorICAgICAgIDU3LCAg
IDgyLCAgIDgzLCAgIDczLCAgIDkzLCAgNTI4LCAgIDk3LCAgIDk1LCAgNTI3LCAgIDQ0LAorICAg
ICAgIDcxLCAgNTIxLCAgMTA0LCAgNTM0LCAgMTEwLCAgMTE2LCAgIDM1LCAgMTExLCAgNTMwLCAg
NTg4LAorICAgICAgMTE0LCAgNTg4LCAgNTg4LCAgNTg4LCAgNTg4LCAgNTg4LCAgNTg4LCAgNTg4
LCAgNTg4LCAgNTg4LAorICAgICAgNTg4LCAgNTg4LCAgNTg4LCAgMTY1LCAgNTg4LCAgMTcyLCAg
MjAyLCAgMjExLCAgMjMzLCAgICAwLAorICAgICAgNTg4LCAgNTg4LCAgNTg4LCAgNTUxLCAgNTg4
LCAgNTg4LCAgNTg4LCAgNTUwLCAgICAwLCAgNTg4LAorICAgICAgNTg4LCAgNTIzLCAgNTE2LCAg
NTE5LCAgNTI3LCAgNTI2LCAgNTEzLCAgNTI4LCAgNTE1LCAgNTIxLAorICAgICAgNTA5LCAgNTA2
LCAgNTE5LCAgNTA2LCAgNTAzLCAgNTAzLCAgNTA5LCAgNDk3LCAgMTA4LCAgNTAyLAorCisgICAg
ICA1MTIsICA0OTgsICA1MDQsICA1MDcsICA1MDgsICAgIDAsICAxNDUsICA1MDcsICAxMTMsICA0
OTMsCisgICAgICA1MDYsICA0OTcsICA0OTksICA0ODksICA1MDMsICA1MDAsICA1MDIsICA0ODUs
ICA0OTAsICA0ODcsCisgICAgICA0NzYsICAxNTcsICA0ODQsICA0ODksICA0ODUsICA0ODcsICA0
NzYsICA0NzksICAxMTgsICA0ODQsCisgICAgICA0NzYsICA0ODgsICAgNzAsICA0ODEsICA1ODgs
ICA1ODgsICAyNDYsICAyNTMsICAyNzAsICAyMTksCisgICAgICAyODMsICAgIDAsICA1ODgsICA1
ODgsICAgIDAsICA0NzMsICA0NzcsICA0ODYsICA0ODMsICA0NjcsCisgICAgICA0NjcsICAxMTks
ICA0ODIsICA0NzksICA0NzksICA0NzcsICA0NzQsICA0NjYsICA0NzIsICA0NTksCisgICAgICA0
NzAsICA0NTYsICA0NzIsICAgIDAsICA0NjksICA0NTcsICA0NjQsICA0NjEsICA0NjUsICA0NTgs
CisgICAgICA0NDcsICA0NDYsICA0NTksICA0NjIsICA0NTksICA0NTQsICA0NDUsICAxODgsICA0
NTAsICA0NTMsCisgICAgICA0NDQsICA0NDEsICA0NDUsICA0NTEsICA0NDIsICA0MzMsICA0MzYs
ICA0MzQsICA0NDQsICA0MzAsCisgICAgICA0MjgsICA0NDEsICA0MjcsICA0MjksICA0MjYsICA0
MzcsICA0MzYsICAxMjQsICA0MzEsICA0MjYsCisKKyAgICAgIDQxNSwgIDI1OCwgIDQzMywgIDQz
NSwgIDQyNCwgIDI5MCwgIDI5NywgIDMwNCwgIDMxMSwgIDQyNSwKKyAgICAgICAgMCwgIDQyMywg
IDI3NSwgICAgMCwgIDQxNSwgIDQxMywgIDQyMSwgIDQxMCwgIDQyNywgIDQxNiwKKyAgICAgIDMx
NiwgICAgMCwgICAgMCwgIDQxMCwgIDQyMCwgIDQyMCwgICAgMCwgIDQwNSwgIDMxOSwgICAgMCwK
KyAgICAgICAgMCwgIDQwNywgIDMyMiwgIDQwOCwgIDQwMiwgIDQwMSwgIDQwMiwgIDQwMSwgIDMy
NSwgICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDM5NywgIDM5OCwgIDQwMywg
IDM5NCwgIDQwNywgIDQwMiwKKyAgICAgIDQwMSwgIDM5MywgIDM5NywgIDM4OSwgIDM5MiwgIDM5
NiwgIDQwMSwgIDM4NywgIDM5OSwgIDM5MCwKKyAgICAgICAgMCwgICAgMCwgIDM5NiwgIDM4NSwg
IDM4NSwgIDM5MCwgIDM4OSwgIDM4NiwgICAgMCwgICAgMCwKKyAgICAgICAgMCwgICAgMCwgIDM3
NiwgIDM4OCwgIDM5MCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgICAgMCwg
IDM3OCwgIDM3OSwgIDM3MywgIDM4MywgICAgMCwgICAgMCwgICAgMCwgIDM3NCwgICAgMCwKKyAg
ICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwg
IDM4MSwKKworICAgICAgICAwLCAgICAwLCAgMzc5LCAgMzc1LCAgICAwLCAgICAwLCAgICAwLCAg
MzcxLCAgMzY3LCAgMzcyLAorICAgICAgMzYyLCAgMzc1LCAgMzYxLCAgMzc0LCAgMzYzLCAgMzcw
LCAgICAwLCAgMzY4LCAgMzcwLCAgMzU0LAorICAgICAgMzU2LCAgMzYyLCAgMzY4LCAgMzYzLCAg
MzUxLCAgICAwLCAgMzUzLCAgICAwLCAgMzUyLCAgMzU1LAorICAgICAgICAwLCAgMzQ0LCAgMzQz
LCAgMzQzLCAgMzU2LCAgICAwLCAgMzU4LCAgICAwLCAgMzU3LCAgMzU2LAorICAgICAgMzQxLCAg
MzU0LCAgMzQxLCAgICAwLCAgICAwLCAgMzQ0LCAgICAwLCAgICAwLCAgMzM2LCAgICAwLAorICAg
ICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMzMzLCAgMzQ0LCAgMzM3LCAgMzQzLCAgMzQwLCAg
MzM1LAorICAgICAgMzI3LCAgMzM5LCAgICAwLCAgICAwLCAgMzMyLCAgMzM5LCAgMzI4LCAgICAw
LCAgMzM3LCAgMzM0LAorICAgICAgMzI0LCAgMzI5LCAgMzMyLCAgICAwLCAgICAwLCAgMzMyLCAg
ICAwLCAgMzMwLCAgMzI5LCAgICAwLAorICAgICAgICAwLCAgMzI4LCAgMzE0LCAgMzI2LCAgICAw
LCAgMzE3LCAgMzM4LCAgMzM3LCAgMzM2LCAgMzA3LAorICAgICAgMzAzLCAgICAwLCAgICAwLCAg
ICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMzI4LAorCisgICAgICAxNjYsICAz
MjUsICAzMTYsICAyOTksICAzMDgsICAzMTAsICAzMDYsICAzMDgsICAzMDcsICAzMDYsCisgICAg
ICAzMDksICAzMDYsICAyNTYsICAyNTMsICAgIDAsICAyMjgsICAyMzgsICAyMjIsICAyMzUsICAy
MDMsCisgICAgICAyMDcsICAyMDQsICAyMTIsICAxOTEsICAgIDAsICAyMDEsICAxNjUsICAxNjcs
ICAxNTMsICAxNjEsCisgICAgICAgIDAsICAxNzAsICAgIDAsICAxNzUsICAxNTEsICAxNDEsICAx
MDAsICAxMTQsICAgNTksICAgIDAsCisgICAgICAgIDAsICA1ODgsICAzNTksICAxMTMKKyAgICB9
IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZls0NDVdID0KKyAgICB7ICAg
MCwKKyAgICAgIDQ0MiwgICAgMSwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwKKyAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKKyAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MywgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MywKKyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKKyAgICAgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MiwKKyAgICAgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwK
KyAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwgIDQ0NCwKKyAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MywgIDQ0MiwKKyAgICAgIDQ0MiwgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKKyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKKworICAgICAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAor
ICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLAorICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLAorICAgICAgNDQyLCAgNDQ0LCAgNDQyLCAgNDQyLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAg
ICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLAorICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLAorCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisgICAgICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisgICAg
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisgICAgICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisKKyAgICAg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywKKyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywKKyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywKKyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKKyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKKyAgICAgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKKyAgICAgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywK
KyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywKKyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywKKyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKKworICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAor
ICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLAorICAgICAgNDQzLCAgICAwLCAgNDQyLCAgNDQyCisgICAgfSA7CisKK3N0YXRpYyB5
eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRbNjU2XSA9CisgICAgeyAgIDAsCisgICAgICAgIDQs
ICAgIDUsICAgIDYsICAgIDcsICAgIDgsICAgIDksICAgMTAsICAgMTEsICAgMTIsICAgMTMsCisg
ICAgICAgMTQsICAgMTUsICAgMTYsICAgMTcsICAgMTgsICAgMTksICAgMTksICAgMTksICAgMTks
ICAgMTksCisgICAgICAgMTksICAgMjAsICAgMjEsICAgMjIsICAgMjMsICAgMjQsICAgMjUsICAg
MjYsICAgMjYsICAgMjYsCisgICAgICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYs
ICAgMjcsICAgMjgsICAgMjksICAgMzAsCisgICAgICAgMzEsICAgMzIsICAgMzMsICAgMzQsICAg
MzUsICAgMzYsICAgMzcsICAgMzgsICAgMjYsICAgMzksCisgICAgICAgNDAsICAgNDEsICAgNDIs
ICAgNDMsICAgNDQsICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAgNDksCisgICAgICAgMjYsICAg
MjYsICAgMjYsICAgNTAsICAgNTEsICAgNTIsICAgNTMsICAgNTUsICAgNTYsICAgNTcsCisgICAg
ICAgNjAsICAgNjIsICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAg
NzcsCisgICAgICAgNzgsICAgODIsICAgODMsICAxMTAsICAgNjMsICAgNjEsICAxMjksICAxMTEs
ICAgNTgsICAgNjYsCisgICAgICAxMzAsICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAg
NjcsICAgNjgsICAgNjYsICAgODAsCisKKyAgICAgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2
OCwgICA2OCwgICA2OCwgICA2OSwgICA3MiwgICA4NCwKKyAgICAgIDExMiwgICA4NSwgICA3MCwg
ICA4MSwgIDE0MiwgICA4NiwgICA2OSwgIDIwMywgIDQ0MSwgIDIwNCwKKyAgICAgICA2OSwgICA4
NywgICA5NCwgIDExMywgICA5NSwgICA3MywgICA5MCwgICA3NCwgICA3NSwgICA2OSwKKyAgICAg
ICA5MSwgICA4OCwgICA5NywgICA5NiwgICA4OSwgICA5MiwgIDEwMywgICA3MCwgIDEzNSwgIDEw
NiwKKyAgICAgICA5OCwgICA5MywgICA5OSwgIDExNSwgIDEwNCwgIDEwMCwgIDEwNywgIDE2Miwg
IDQ0MCwgIDExOSwKKyAgICAgIDEzMSwgIDEwMSwgIDQzOSwgIDEwOCwgIDEzMiwgIDEwNSwgIDEy
MCwgIDEyMSwgIDExNiwgIDEyNSwKKyAgICAgIDE2MywgIDExNywgIDEyNiwgIDEzMywgIDE3Niwg
IDE5OCwgIDEyMiwgIDEyMywgIDI2NCwgIDEyNCwKKyAgICAgIDEyNywgIDQzOCwgIDE3NywgIDE5
OSwgIDIxNiwgIDIxNywgIDI2NSwgIDEyOCwgIDEzNiwgICA2NCwKKyAgICAgICA2NCwgICA2NCwg
ICA2NCwgICA2NCwgICA2NCwgICA2NCwgIDEzOCwgIDEzOCwgIDEzOCwgIDEzOCwKKyAgICAgIDEz
OCwgIDEzOCwgIDEzOCwgIDQzNywgIDE3MCwgIDEzNywgIDE5MCwgIDE3MSwgIDE3MiwgIDQwNiwK
KworICAgICAgNDA3LCAgMTczLCAgMTM5LCAgMTc0LCAgMjQyLCAgMjQzLCAgMjQ0LCAgNDM2LCAg
MTM3LCAgNDM1LAorICAgICAgNDM0LCAgMTkxLCAgNDMzLCAgNDMyLCAgIDY2LCAgMTM5LCAgIDY3
LCAgIDY3LCAgIDY3LCAgIDY3LAorICAgICAgIDY3LCAgIDY3LCAgIDY4LCAgIDY2LCAgNDMxLCAg
IDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LAorICAgICAgIDY4LCAgIDY4LCAgIDY5LCAgMTQx
LCAgMTQxLCAgMTQxLCAgMTQxLCAgMTQxLCAgMTQxLCAgMTQxLAorICAgICAgNDMwLCAgIDY5LCAg
MTQwLCAgNDI5LCAgMTQwLCAgIDY5LCAgNDI4LCAgMTQxLCAgMTQxLCAgMTQxLAorICAgICAgMTQx
LCAgMTQxLCAgMTQxLCAgMTQxLCAgIDY5LCAgMjA2LCAgNDI3LCAgMjA2LCAgNDI2LCAgNDI1LAor
ICAgICAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMTM4LCAgMTM4
LCAgMTM4LAorICAgICAgMTM4LCAgMTM4LCAgMTM4LCAgMTM4LCAgMjY5LCAgMjcwLCAgMjcxLCAg
NDI0LCAgNDIzLCAgMjA4LAorICAgICAgNDIyLCAgMjA4LCAgNDIxLCAgMTM5LCAgMjA5LCAgMjA5
LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LAorICAgICAgMjA5LCAgMjc3LCAgMjc4LCAgMjc5LCAg
NDIwLCAgNDE5LCAgMTM5LCAgMTQxLCAgMTQxLCAgMTQxLAorCisgICAgICAxNDEsICAxNDEsICAx
NDEsICAxNDEsICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDcsCisgICAgICAyMDcs
ICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDksICAyMDksCisg
ICAgICAyMDksICAyMDksICAyMDksICAyMDksICAyMDksICAyMDksICAyMDksICAyMDksICAyMDks
ICAyMDksCisgICAgICAyMDksICAyMDksICAyODYsICAyODcsICAyODgsICAyOTMsICAyOTQsICAy
OTUsICAyOTcsICAyOTgsCisgICAgICAyOTksICAzMDUsICAzMDYsICAzMDcsICAzODcsICAzODgs
ICAzODksICA0MTgsICA0MTcsICA0MTYsCisgICAgICA0MTUsICA0MTQsICA0MTMsICA0MTIsICA0
MTEsICA0MTAsICA0MDksICAzOTAsICA0MDgsICAzOTEsCisgICAgICAgNzksICAgNzksICA0MDUs
ICA0MDQsICA0MDMsICA0MDIsICA0MDEsICA0MDAsICAzOTksICAzOTgsCisgICAgICAzOTcsICAz
OTYsICAzOTUsICAzOTQsICAzOTMsICAzOTIsICAzODYsICAzODUsICAzODQsICAzODMsCisgICAg
ICAzODIsICAzODEsICAzODAsICAzNzksICAzNzgsICAzNzcsICAzNzYsICAzNzUsICAzNzQsICAz
NzMsCisgICAgICAzNzIsICAzNzEsICAzNzAsICAzNjksICAzNjgsICAzNjcsICAzNjYsICAzNjUs
ICAzNjQsICAzNjMsCisKKyAgICAgIDM2MiwgIDM2MSwgIDM2MCwgIDM1OSwgIDM1OCwgIDM1Nywg
IDM1NiwgIDM1NSwgIDM1NCwgIDM1MywKKyAgICAgIDM1MiwgIDM1MSwgIDM1MCwgIDM0OSwgIDM0
OCwgIDM0NywgIDM0NiwgIDM0NSwgIDM0NCwgIDM0MywKKyAgICAgIDM0MiwgIDM0MSwgIDM0MCwg
IDMzOSwgIDMzOCwgIDMzNywgIDMzNiwgIDMzNSwgIDMzNCwgIDMzMywKKyAgICAgIDMzMiwgIDMz
MSwgIDMzMCwgIDMyOSwgIDMyOCwgIDMyNywgIDMyNiwgIDMyNSwgIDMyNCwgIDMyMywKKyAgICAg
IDMyMiwgIDMyMSwgIDMyMCwgIDMxOSwgIDMxOCwgIDMxNywgIDMxNiwgIDMxNSwgIDMxNCwgIDMx
MywKKyAgICAgIDMxMiwgIDMxMSwgIDMxMCwgIDMwOSwgIDMwOCwgIDMwNCwgIDMwMywgIDMwMiwg
IDMwMSwgIDMwMCwKKyAgICAgIDI5NiwgIDI5MiwgIDI5MSwgIDI5MCwgIDI4OSwgIDI4NSwgIDI4
NCwgIDI4MywgIDI4MiwgIDI4MSwKKyAgICAgIDI4MCwgIDI3NiwgIDI3NSwgIDI3NCwgIDI3Mywg
IDI3MiwgIDI2OCwgIDI2NywgIDI2NiwgIDI2MywKKyAgICAgIDI2MiwgIDI2MSwgIDI2MCwgIDI1
OSwgIDI1OCwgIDI1NywgIDI1NiwgIDI1NSwgIDI1NCwgIDI1MywKKyAgICAgIDI1MiwgIDI1MSwg
IDI1MCwgIDI0OSwgIDI0OCwgIDI0NywgIDI0NiwgIDI0NSwgIDI0MSwgIDI0MCwKKworICAgICAg
MjM5LCAgMjM4LCAgMjM3LCAgMjM2LCAgMjM1LCAgMjM0LCAgMjMzLCAgMjMyLCAgMjMxLCAgMjMw
LAorICAgICAgMjI5LCAgMjI4LCAgMjI3LCAgMjI2LCAgMjI1LCAgMjI0LCAgMjIzLCAgMjIyLCAg
MjIxLCAgMjIwLAorICAgICAgMjE5LCAgMjE4LCAgMjE1LCAgMjE0LCAgMjEzLCAgMjEyLCAgMjEx
LCAgMjEwLCAgMjA1LCAgMjAyLAorICAgICAgMjAxLCAgMjAwLCAgMTk3LCAgMTk2LCAgMTk1LCAg
MTk0LCAgMTkzLCAgMTkyLCAgMTg5LCAgMTg4LAorICAgICAgMTg3LCAgMTg2LCAgMTg1LCAgMTg0
LCAgMTgzLCAgMTgyLCAgMTgxLCAgMTgwLCAgMTc5LCAgMTc4LAorICAgICAgMTc1LCAgMTY5LCAg
MTY4LCAgMTY3LCAgMTY2LCAgMTY1LCAgMTY0LCAgMTYxLCAgMTYwLCAgMTU5LAorICAgICAgMTU4
LCAgMTU3LCAgMTU2LCAgMTU1LCAgMTU0LCAgMTUzLCAgMTUyLCAgMTUxLCAgMTUwLCAgMTQ5LAor
ICAgICAgMTQ4LCAgMTQ3LCAgMTQ2LCAgMTQ1LCAgMTQ0LCAgMTQzLCAgMTM0LCAgMTE4LCAgMTE0
LCAgMTA5LAorICAgICAgMTAyLCAgIDc2LCAgIDcxLCAgIDY1LCAgIDU5LCAgIDU0LCAgNDQyLCAg
ICAzLCAgNDQyLCAgNDQyLAorICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAorCisgICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCisgICAgICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCisgICAgICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCisg
ICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsCisgICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsCisgICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIKKyAgICB9
IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1s2NTZdID0KKyAgICB7ICAg
MCwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwK
KyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgOCwgICAg
OCwgICAgOSwKKyAgICAgICAxMywgICAxNSwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwg
ICAxNiwgICAxNiwgICAyNCwKKyAgICAgICAyNCwgICAzMCwgICAzMCwgICA0MCwgICAxNSwgICAx
MywgICA0NywgICA0MCwgICAgOSwgICAxOCwKKyAgICAgICA0NywgICAxOCwgICAxOCwgICAxOCwg
ICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOSwgICAyOSwKKworICAgICAgIDE5LCAgIDE5LCAg
IDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE4LCAgIDIyLCAgIDMxLAorICAgICAgIDQx
LCAgIDMxLCAgIDE4LCAgIDI5LCAgNDQ0LCAgIDMxLCAgIDE5LCAgMTMzLCAgNDM5LCAgMTMzLAor
ICAgICAgIDE4LCAgIDMyLCAgIDM0LCAgIDQxLCAgIDM0LCAgIDIyLCAgIDMzLCAgIDIyLCAgIDIy
LCAgIDE5LAorICAgICAgIDMzLCAgIDMyLCAgIDM1LCAgIDM0LCAgIDMyLCAgIDMzLCAgIDM3LCAg
IDE4LCAgIDUxLCAgIDM4LAorICAgICAgIDM1LCAgIDMzLCAgIDM1LCAgIDQzLCAgIDM3LCAgIDM1
LCAgIDM4LCAgIDk5LCAgNDM4LCAgIDQ1LAorICAgICAgIDQ4LCAgIDM1LCAgNDM3LCAgIDM4LCAg
IDQ4LCAgIDM3LCAgIDQ1LCAgIDQ1LCAgIDQzLCAgIDQ2LAorICAgICAgIDk5LCAgIDQzLCAgIDQ2
LCAgIDQ4LCAgMTA5LCAgMTI5LCAgIDQ1LCAgIDQ1LCAgMTk4LCAgIDQ1LAorICAgICAgIDQ2LCAg
NDM2LCAgMTA5LCAgMTI5LCAgMTUyLCAgMTUyLCAgMTk4LCAgIDQ2LCAgIDUxLCAgIDY0LAorICAg
ICAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY2LCAgIDY2LCAgIDY2LCAg
IDY2LAorICAgICAgIDY2LCAgIDY2LCAgIDY2LCAgNDM1LCAgMTA3LCAgIDY0LCAgMTIyLCAgMTA3
LCAgMTA3LCAgNDAxLAorCisgICAgICA0MDEsICAxMDcsICAgNjYsICAxMDcsICAxNzgsICAxNzgs
ICAxNzgsICA0MzQsICAgNjQsICA0MzIsCisgICAgICA0MzAsICAxMjIsICA0MjksICA0MjgsICAg
NjcsICAgNjYsICAgNjcsICAgNjcsICAgNjcsICAgNjcsCisgICAgICAgNjcsICAgNjcsICAgNjcs
ICAgNjgsICA0MjcsICAgNjgsICAgNjgsICAgNjgsICAgNjgsICAgNjgsCisgICAgICAgNjgsICAg
NjgsICAgNjcsICAxNDAsICAxNDAsICAxNDAsICAxNDAsICAxNDAsICAxNDAsICAxNDAsCisgICAg
ICA0MjYsICAgNjgsICAgNjksICA0MjQsICAgNjksICAgNjcsICA0MjMsICAgNjksICAgNjksICAg
NjksCisgICAgICAgNjksICAgNjksICAgNjksICAgNjksICAgNjgsICAxMzcsICA0MjIsICAxMzcs
ICA0MjEsICA0MjAsCisgICAgICAxMzcsICAxMzcsICAxMzcsICAxMzcsICAxMzcsICAxMzcsICAx
MzcsICAxMzgsICAxMzgsICAxMzgsCisgICAgICAxMzgsICAxMzgsICAxMzgsICAxMzgsICAyMDIs
ICAyMDIsICAyMDIsICA0MTksICA0MTgsICAxMzksCisgICAgICA0MTcsICAxMzksICA0MTYsICAx
MzgsICAxMzksICAxMzksICAxMzksICAxMzksICAxMzksICAxMzksCisgICAgICAxMzksICAyMTMs
ICAyMTMsICAyMTMsICA0MTQsICA0MTMsICAxMzgsICAxNDEsICAxNDEsICAxNDEsCisKKyAgICAg
IDE0MSwgIDE0MSwgIDE0MSwgIDE0MSwgIDIwNiwgIDIwNiwgIDIwNiwgIDIwNiwgIDIwNiwgIDIw
NiwKKyAgICAgIDIwNiwgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywg
IDIwOCwgIDIwOCwKKyAgICAgIDIwOCwgIDIwOCwgIDIwOCwgIDIwOCwgIDIwOCwgIDIwOSwgIDIw
OSwgIDIwOSwgIDIwOSwgIDIwOSwKKyAgICAgIDIwOSwgIDIwOSwgIDIyMSwgIDIyMSwgIDIyMSwg
IDIyOSwgIDIyOSwgIDIyOSwgIDIzMywgIDIzMywKKyAgICAgIDIzMywgIDIzOSwgIDIzOSwgIDIz
OSwgIDM3MiwgIDM3MiwgIDM3MiwgIDQxMiwgIDQxMSwgIDQxMCwKKyAgICAgIDQwOSwgIDQwOCwg
IDQwNywgIDQwNiwgIDQwNSwgIDQwNCwgIDQwMywgIDM3MiwgIDQwMiwgIDM3MiwKKyAgICAgIDQ0
MywgIDQ0MywgIDQwMCwgIDM5MSwgIDM5MCwgIDM4OSwgIDM4OCwgIDM4NywgIDM4NiwgIDM4NCwK
KyAgICAgIDM4MywgIDM4MiwgIDM3OSwgIDM3OCwgIDM3NiwgIDM3MywgIDM3MSwgIDM3MCwgIDM2
OSwgIDM2NywKKyAgICAgIDM2NiwgIDM2NSwgIDM2MiwgIDM2MSwgIDM2MCwgIDM1OSwgIDM1OCwg
IDM1NywgIDM1NiwgIDM1NSwKKyAgICAgIDM0OSwgIDM0NiwgIDM0MywgIDM0MiwgIDM0MSwgIDM0
MCwgIDMzOSwgIDMzNywgIDMzNSwgIDMzNCwKKworICAgICAgMzMzLCAgMzMyLCAgMzMwLCAgMzI5
LCAgMzI3LCAgMzI1LCAgMzI0LCAgMzIzLCAgMzIyLCAgMzIxLAorICAgICAgMzIwLCAgMzE5LCAg
MzE4LCAgMzE2LCAgMzE1LCAgMzE0LCAgMzEzLCAgMzEyLCAgMzExLCAgMzEwLAorICAgICAgMzA5
LCAgMzA4LCAgMzA0LCAgMzAzLCAgMzAwLCAgMjg5LCAgMjg1LCAgMjg0LCAgMjgzLCAgMjgyLAor
ICAgICAgMjc1LCAgMjc0LCAgMjczLCAgMjY4LCAgMjY3LCAgMjY2LCAgMjY1LCAgMjY0LCAgMjYz
LCAgMjYwLAorICAgICAgMjU5LCAgMjU4LCAgMjU3LCAgMjU2LCAgMjU1LCAgMjU0LCAgMjUzLCAg
MjUyLCAgMjUxLCAgMjUwLAorICAgICAgMjQ5LCAgMjQ4LCAgMjQ3LCAgMjQ2LCAgMjQ1LCAgMjM4
LCAgMjM3LCAgMjM2LCAgMjM1LCAgMjM0LAorICAgICAgMjMyLCAgMjI4LCAgMjI2LCAgMjI1LCAg
MjI0LCAgMjIwLCAgMjE5LCAgMjE4LCAgMjE3LCAgMjE2LAorICAgICAgMjE1LCAgMjEyLCAgMjEw
LCAgMjA1LCAgMjA0LCAgMjAzLCAgMjAxLCAgMjAwLCAgMTk5LCAgMTk3LAorICAgICAgMTk2LCAg
MTk1LCAgMTk0LCAgMTkzLCAgMTkyLCAgMTkxLCAgMTkwLCAgMTg5LCAgMTg4LCAgMTg3LAorICAg
ICAgMTg2LCAgMTg1LCAgMTg0LCAgMTgzLCAgMTgyLCAgMTgxLCAgMTgwLCAgMTc5LCAgMTc3LCAg
MTc2LAorCisgICAgICAxNzUsICAxNzQsICAxNzMsICAxNzIsICAxNzEsICAxNzAsICAxNjksICAx
NjgsICAxNjcsICAxNjYsCisgICAgICAxNjUsICAxNjMsICAxNjIsICAxNjEsICAxNjAsICAxNTks
ICAxNTgsICAxNTcsICAxNTYsICAxNTUsCisgICAgICAxNTQsICAxNTMsICAxNTEsICAxNTAsICAx
NDksICAxNDgsICAxNDcsICAxNDYsICAxMzQsICAxMzIsCisgICAgICAxMzEsICAxMzAsICAxMjgs
ICAxMjcsICAxMjYsICAxMjUsICAxMjQsICAxMjMsICAxMjEsICAxMjAsCisgICAgICAxMTksICAx
MTgsICAxMTcsICAxMTYsICAxMTUsICAxMTQsICAxMTMsICAxMTIsICAxMTEsICAxMTAsCisgICAg
ICAxMDgsICAxMDUsICAxMDQsICAxMDMsICAxMDIsICAxMDEsICAxMDAsICAgOTgsICAgOTcsICAg
OTYsCisgICAgICAgOTUsICAgOTQsICAgOTMsICAgOTIsICAgOTEsICAgOTAsICAgODksICAgODgs
ICAgODcsICAgODYsCisgICAgICAgODUsICAgODQsICAgODMsICAgODIsICAgNzgsICAgNzQsICAg
NDksICAgNDQsICAgNDIsICAgMzksCisgICAgICAgMzYsICAgMjMsICAgMjAsICAgMTcsICAgMTIs
ICAgIDcsICAgIDMsICA0NDIsICA0NDIsICA0NDIsCisgICAgICA0NDIsICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCisKKyAgICAgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKKyAgICAg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwKKyAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwKKyAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKKyAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKKyAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwgIDQ0MgorICAgIH0gOworCisvKiBUYWJsZSBvZiBib29sZWFucywgdHJ1ZSBpZiBydWxlIGNv
dWxkIG1hdGNoIGVvbC4gKi8KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nh
bl9tYXRjaF9lb2xbMTQ4XSA9CisgICAgeyAgIDAsCiswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxLCAwLCAw
LCAgICAgfTsKKworLyogVGhlIGludGVudCBiZWhpbmQgdGhpcyBkZWZpbml0aW9uIGlzIHRoYXQg
aXQnbGwgY2F0Y2gKKyAqIGFueSB1c2VzIG9mIFJFSkVDVCB3aGljaCBmbGV4IG1pc3NlZC4KKyAq
LworI2RlZmluZSBSRUpFQ1QgcmVqZWN0X3VzZWRfYnV0X25vdF9kZXRlY3RlZAorI2RlZmluZSB5
eW1vcmUoKSB5eW1vcmVfdXNlZF9idXRfbm90X2RldGVjdGVkCisjZGVmaW5lIFlZX01PUkVfQURK
IDAKKyNkZWZpbmUgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAorLyoKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgTGV4IHNwZWNpZmljYXRpb24gZm9yIEdMU0wg
RVMuCitCYXNlZCBvbiBBTlNJIEMgZ3JhbW1hciwgTGV4IHNwZWNpZmljYXRpb246CitodHRwOi8v
d3d3Lmx5c2F0b3IubGl1LnNlL2MvQU5TSS1DLWdyYW1tYXItbC5odG1sCisKK0lGIFlPVSBNT0RJ
RlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaCwKK1dI
SUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBMRVhFUiAoZ2xzbGFuZ19sZXguY3BwKS4KKyovCisK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9Ub2tlbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuaCIKKworLyogd2luZG93
cyBvbmx5IHByYWdtYSAqLworI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJs
ZSA6IDQxMDIpCisjZW5kaWYKKworI2RlZmluZSBZWV9VU0VSX0FDVElPTiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICB5eWxsb2MtPmZpcnN0X2ZpbGUgPSB5eWxsb2MtPmxh
c3RfZmlsZSA9IHl5Y29sdW1uOyBcCisgICAgeXlsbG9jLT5maXJzdF9saW5lID0geXlsbG9jLT5s
YXN0X2xpbmUgPSB5eWxpbmVubzsKKworI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4
X3NpemUpIFwKKyAgICByZXN1bHQgPSBzdHJpbmdfaW5wdXQoYnVmLCBtYXhfc2l6ZSwgeXlzY2Fu
bmVyKTsKKworc3RhdGljIHl5X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCB5eV9zaXpl
X3QgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcik7CitzdGF0aWMgaW50IGNoZWNrX3R5cGUo
eXlzY2FuX3QgeXlzY2FubmVyKTsKK3N0YXRpYyBpbnQgcmVzZXJ2ZWRfd29yZCh5eXNjYW5fdCB5
eXNjYW5uZXIpOworc3RhdGljIGludCBpbnRfY29uc3RhbnQoeXlzY2FuX3QgeXlzY2FubmVyKTsK
K3N0YXRpYyBpbnQgZmxvYXRfY29uc3RhbnQoeXlzY2FuX3QgeXlzY2FubmVyKTsKKworI2RlZmlu
ZSBJTklUSUFMIDAKKworI2RlZmluZSBZWV9FWFRSQV9UWVBFIFRQYXJzZUNvbnRleHQqCisKKy8q
IEhvbGRzIHRoZSBlbnRpcmUgc3RhdGUgb2YgdGhlIHJlZW50cmFudCBzY2FubmVyLiAqLworc3Ry
dWN0IHl5Z3V0c190CisgICAgeworCisgICAgLyogVXNlci1kZWZpbmVkLiBOb3QgdG91Y2hlZCBi
eSBmbGV4LiAqLworICAgIFlZX0VYVFJBX1RZUEUgeXlleHRyYV9yOworCisgICAgLyogVGhlIHJl
c3QgYXJlIHRoZSBzYW1lIGFzIHRoZSBnbG9iYWxzIGRlY2xhcmVkIGluIHRoZSBub24tcmVlbnRy
YW50IHNjYW5uZXIuICovCisgICAgRklMRSAqeXlpbl9yLCAqeXlvdXRfcjsKKyAgICBzaXplX3Qg
eXlfYnVmZmVyX3N0YWNrX3RvcDsgLyoqPCBpbmRleCBvZiB0b3Agb2Ygc3RhY2suICovCisgICAg
c2l6ZV90IHl5X2J1ZmZlcl9zdGFja19tYXg7IC8qKjwgY2FwYWNpdHkgb2Ygc3RhY2suICovCisg
ICAgWVlfQlVGRkVSX1NUQVRFICogeXlfYnVmZmVyX3N0YWNrOyAvKio8IFN0YWNrIGFzIGFuIGFy
cmF5LiAqLworICAgIGNoYXIgeXlfaG9sZF9jaGFyOworICAgIHl5X3NpemVfdCB5eV9uX2NoYXJz
OworICAgIHl5X3NpemVfdCB5eWxlbmdfcjsKKyAgICBjaGFyICp5eV9jX2J1Zl9wOworICAgIGlu
dCB5eV9pbml0OworICAgIGludCB5eV9zdGFydDsKKyAgICBpbnQgeXlfZGlkX2J1ZmZlcl9zd2l0
Y2hfb25fZW9mOworICAgIGludCB5eV9zdGFydF9zdGFja19wdHI7CisgICAgaW50IHl5X3N0YXJ0
X3N0YWNrX2RlcHRoOworICAgIGludCAqeXlfc3RhcnRfc3RhY2s7CisgICAgeXlfc3RhdGVfdHlw
ZSB5eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKKyAgICBjaGFyKiB5eV9sYXN0X2FjY2VwdGluZ19j
cG9zOworCisgICAgaW50IHl5bGluZW5vX3I7CisgICAgaW50IHl5X2ZsZXhfZGVidWdfcjsKKwor
ICAgIGNoYXIgKnl5dGV4dF9yOworICAgIGludCB5eV9tb3JlX2ZsYWc7CisgICAgaW50IHl5X21v
cmVfbGVuOworCisgICAgWVlTVFlQRSAqIHl5bHZhbF9yOworCisgICAgWVlMVFlQRSAqIHl5bGxv
Y19yOworCisgICAgfTsgLyogZW5kIHN0cnVjdCB5eWd1dHNfdCAqLworCitzdGF0aWMgaW50IHl5
X2luaXRfZ2xvYmFscyAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKKyAgICAvKiBUaGlzIG11c3Qg
Z28gaGVyZSBiZWNhdXNlIFlZU1RZUEUgYW5kIFlZTFRZUEUgYXJlIGluY2x1ZGVkCisgICAgICog
ZnJvbSBiaXNvbiBvdXRwdXQgaW4gc2VjdGlvbiAxLiovCisgICAgIyAgICBkZWZpbmUgeXlsdmFs
IHl5Zy0+eXlsdmFsX3IKKyAgICAKKyAgICAjICAgIGRlZmluZSB5eWxsb2MgeXlnLT55eWxsb2Nf
cgorICAgIAoraW50IHl5bGV4X2luaXQgKHl5c2Nhbl90KiBzY2FubmVyKTsKKworaW50IHl5bGV4
X2luaXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkLHl5c2Nhbl90KiBzY2FubmVy
KTsKKworLyogQWNjZXNzb3IgbWV0aG9kcyB0byBnbG9iYWxzLgorICAgVGhlc2UgYXJlIG1hZGUg
dmlzaWJsZSB0byBub24tcmVlbnRyYW50IHNjYW5uZXJzIGZvciBjb252ZW5pZW5jZS4gKi8KKwor
aW50IHl5bGV4X2Rlc3Ryb3kgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitpbnQgeXlnZXRfZGVi
dWcgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHl5c2V0X2RlYnVnIChpbnQgZGVidWdf
ZmxhZyAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKK1lZX0VYVFJBX1RZUEUgeXlnZXRfZXh0cmEg
KHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHl5c2V0X2V4dHJhIChZWV9FWFRSQV9UWVBF
IHVzZXJfZGVmaW5lZCAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKK0ZJTEUgKnl5Z2V0X2luICh5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCB5eXNldF9pbiAgKEZJTEUgKiBpbl9zdHIgLHl5
c2Nhbl90IHl5c2Nhbm5lciApOworCitGSUxFICp5eWdldF9vdXQgKHl5c2Nhbl90IHl5c2Nhbm5l
ciApOworCit2b2lkIHl5c2V0X291dCAgKEZJTEUgKiBvdXRfc3RyICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKKworeXlfc2l6ZV90IHl5Z2V0X2xlbmcgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitj
aGFyICp5eWdldF90ZXh0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworaW50IHl5Z2V0X2xpbmVu
byAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgeXlzZXRfbGluZW5vIChpbnQgbGluZV9u
dW1iZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitpbnQgeXlnZXRfY29sdW1uICAoeXlzY2Fu
X3QgeXlzY2FubmVyICk7CisKK3ZvaWQgeXlzZXRfY29sdW1uIChpbnQgY29sdW1uX25vICx5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKKworWVlTVFlQRSAqIHl5Z2V0X2x2YWwgKHl5c2Nhbl90IHl5c2Nh
bm5lciApOworCit2b2lkIHl5c2V0X2x2YWwgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0gLHl5c2Nh
bl90IHl5c2Nhbm5lciApOworCisgICAgICAgWVlMVFlQRSAqeXlnZXRfbGxvYyAoeXlzY2FuX3Qg
eXlzY2FubmVyICk7CisgICAgCisgICAgICAgIHZvaWQgeXlzZXRfbGxvYyAoWVlMVFlQRSAqIHl5
bGxvY19wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyICk7CisgICAgCisvKiBNYWNyb3MgYWZ0ZXIg
dGhpcyBwb2ludCBjYW4gYWxsIGJlIG92ZXJyaWRkZW4gYnkgdXNlciBkZWZpbml0aW9ucyBpbgor
ICogc2VjdGlvbiAxLgorICovCisKKyNpZm5kZWYgWVlfU0tJUF9ZWVdSQVAKKyNpZmRlZiBfX2Nw
bHVzcGx1cworZXh0ZXJuICJDIiBpbnQgeXl3cmFwICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyNl
bHNlCitleHRlcm4gaW50IHl5d3JhcCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZW5kaWYKKyNl
bmRpZgorCisjaWZuZGVmIHl5dGV4dF9wdHIKK3N0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAo
Y2hhciAqLHl5Y29uc3QgY2hhciAqLGludCAseXlzY2FuX3QgeXlzY2FubmVyKTsKKyNlbmRpZgor
CisjaWZkZWYgWVlfTkVFRF9TVFJMRU4KK3N0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29u
c3QgY2hhciAqICx5eXNjYW5fdCB5eXNjYW5uZXIpOworI2VuZGlmCisKKyNpZm5kZWYgWVlfTk9f
SU5QVVQKKworI2lmZGVmIF9fY3BsdXNwbHVzCitzdGF0aWMgaW50IHl5aW5wdXQgKHl5c2Nhbl90
IHl5c2Nhbm5lciApOworI2Vsc2UKK3N0YXRpYyBpbnQgaW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5l
ciApOworI2VuZGlmCisKKyNlbmRpZgorCisvKiBBbW91bnQgb2Ygc3R1ZmYgdG8gc2x1cnAgdXAg
d2l0aCBlYWNoIHJlYWQuICovCisjaWZuZGVmIFlZX1JFQURfQlVGX1NJWkUKKyNkZWZpbmUgWVlf
UkVBRF9CVUZfU0laRSA4MTkyCisjZW5kaWYKKworLyogQ29weSB3aGF0ZXZlciB0aGUgbGFzdCBy
dWxlIG1hdGNoZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gKi8KKyNpZm5kZWYgRUNITworLyog
VGhpcyB1c2VkIHRvIGJlIGFuIGZwdXRzKCksIGJ1dCBzaW5jZSB0aGUgc3RyaW5nIG1pZ2h0IGNv
bnRhaW4gTlVMJ3MsCisgKiB3ZSBub3cgdXNlIGZ3cml0ZSgpLgorICovCisjZGVmaW5lIEVDSE8g
ZG8geyBpZiAoZndyaXRlKCB5eXRleHQsIHl5bGVuZywgMSwgeXlvdXQgKSkge30gfSB3aGlsZSAo
MCkKKyNlbmRpZgorCisvKiBHZXRzIGlucHV0IGFuZCBzdHVmZnMgaXQgaW50byAiYnVmIi4gIG51
bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQsIG9yIFlZX05VTEwsCisgKiBpcyByZXR1cm5lZCBpbiAi
cmVzdWx0Ii4KKyAqLworI2lmbmRlZiBZWV9JTlBVVAorI2RlZmluZSBZWV9JTlBVVChidWYscmVz
dWx0LG1heF9zaXplKSBcCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2lu
dGVyYWN0aXZlICkgXAorCQl7IFwKKwkJaW50IGMgPSAnKic7IFwKKwkJc2l6ZV90IG47IFwKKwkJ
Zm9yICggbiA9IDA7IG4gPCBtYXhfc2l6ZSAmJiBcCisJCQkgICAgIChjID0gZ2V0YyggeXlpbiAp
KSAhPSBFT0YgJiYgYyAhPSAnXG4nOyArK24gKSBcCisJCQlidWZbbl0gPSAoY2hhcikgYzsgXAor
CQlpZiAoIGMgPT0gJ1xuJyApIFwKKwkJCWJ1ZltuKytdID0gKGNoYXIpIGM7IFwKKwkJaWYgKCBj
ID09IEVPRiAmJiBmZXJyb3IoIHl5aW4gKSApIFwKKwkJCVlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQg
aW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAorCQlyZXN1bHQgPSBuOyBcCisJCX0gXAorCWVs
c2UgXAorCQl7IFwKKwkJZXJybm89MDsgXAorCQl3aGlsZSAoIChyZXN1bHQgPSBmcmVhZChidWYs
IDEsIG1heF9zaXplLCB5eWluKSk9PTAgJiYgZmVycm9yKHl5aW4pKSBcCisJCQl7IFwKKwkJCWlm
KCBlcnJubyAhPSBFSU5UUikgXAorCQkJCXsgXAorCQkJCVlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQg
aW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAorCQkJCWJyZWFrOyBcCisJCQkJfSBcCisJCQll
cnJubz0wOyBcCisJCQljbGVhcmVycih5eWluKTsgXAorCQkJfSBcCisJCX1cCitcCisKKyNlbmRp
ZgorCisvKiBObyBzZW1pLWNvbG9uIGFmdGVyIHJldHVybjsgY29ycmVjdCB1c2FnZSBpcyB0byB3
cml0ZSAieXl0ZXJtaW5hdGUoKTsiIC0KKyAqIHdlIGRvbid0IHdhbnQgYW4gZXh0cmEgJzsnIGFm
dGVyIHRoZSAicmV0dXJuIiBiZWNhdXNlIHRoYXQgd2lsbCBjYXVzZQorICogc29tZSBjb21waWxl
cnMgdG8gY29tcGxhaW4gYWJvdXQgdW5yZWFjaGFibGUgc3RhdGVtZW50cy4KKyAqLworI2lmbmRl
ZiB5eXRlcm1pbmF0ZQorI2RlZmluZSB5eXRlcm1pbmF0ZSgpIHJldHVybiBZWV9OVUxMCisjZW5k
aWYKKworLyogTnVtYmVyIG9mIGVudHJpZXMgYnkgd2hpY2ggc3RhcnQtY29uZGl0aW9uIHN0YWNr
IGdyb3dzLiAqLworI2lmbmRlZiBZWV9TVEFSVF9TVEFDS19JTkNSCisjZGVmaW5lIFlZX1NUQVJU
X1NUQUNLX0lOQ1IgMjUKKyNlbmRpZgorCisvKiBSZXBvcnQgYSBmYXRhbCBlcnJvci4gKi8KKyNp
Zm5kZWYgWVlfRkFUQUxfRVJST1IKKyNkZWZpbmUgWVlfRkFUQUxfRVJST1IobXNnKSB5eV9mYXRh
bF9lcnJvciggbXNnICwgeXlzY2FubmVyKQorI2VuZGlmCisKKy8qIGVuZCB0YWJsZXMgc2VyaWFs
aXphdGlvbiBzdHJ1Y3R1cmVzIGFuZCBwcm90b3R5cGVzICovCisKKy8qIERlZmF1bHQgZGVjbGFy
YXRpb24gb2YgZ2VuZXJhdGVkIHNjYW5uZXIgLSBhIGRlZmluZSBzbyB0aGUgdXNlciBjYW4KKyAq
IGVhc2lseSBhZGQgcGFyYW1ldGVycy4KKyAqLworI2lmbmRlZiBZWV9ERUNMCisjZGVmaW5lIFlZ
X0RFQ0xfSVNfT1VSUyAxCisKK2V4dGVybiBpbnQgeXlsZXggXAorICAgICAgICAgICAgICAgKFlZ
U1RZUEUgKiB5eWx2YWxfcGFyYW0sWVlMVFlQRSAqIHl5bGxvY19wYXJhbSAseXlzY2FuX3QgeXlz
Y2FubmVyKTsKKworI2RlZmluZSBZWV9ERUNMIGludCB5eWxleCBcCisgICAgICAgICAgICAgICAo
WVlTVFlQRSAqIHl5bHZhbF9wYXJhbSwgWVlMVFlQRSAqIHl5bGxvY19wYXJhbSAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKKyNlbmRpZiAvKiAhWVlfREVDTCAqLworCisvKiBDb2RlIGV4ZWN1dGVkIGF0
IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBydWxlLCBhZnRlciB5eXRleHQgYW5kIHl5bGVuZworICog
aGF2ZSBiZWVuIHNldCB1cC4KKyAqLworI2lmbmRlZiBZWV9VU0VSX0FDVElPTgorI2RlZmluZSBZ
WV9VU0VSX0FDVElPTgorI2VuZGlmCisKKy8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGVuZCBvZiBl
YWNoIHJ1bGUuICovCisjaWZuZGVmIFlZX0JSRUFLCisjZGVmaW5lIFlZX0JSRUFLIGJyZWFrOwor
I2VuZGlmCisKKyNkZWZpbmUgWVlfUlVMRV9TRVRVUCBcCisJWVlfVVNFUl9BQ1RJT04KKworLyoq
IFRoZSBtYWluIHNjYW5uZXIgZnVuY3Rpb24gd2hpY2ggZG9lcyBhbGwgdGhlIHdvcmsuCisgKi8K
K1lZX0RFQ0wKK3sKKwlyZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7CisJ
cmVnaXN0ZXIgY2hhciAqeXlfY3AsICp5eV9icDsKKwlyZWdpc3RlciBpbnQgeXlfYWN0OworICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwor
ICAgIHl5bHZhbCA9IHl5bHZhbF9wYXJhbTsKKworICAgIHl5bGxvYyA9IHl5bGxvY19wYXJhbTsK
KworCWlmICggIXl5Zy0+eXlfaW5pdCApCisJCXsKKwkJeXlnLT55eV9pbml0ID0gMTsKKworI2lm
ZGVmIFlZX1VTRVJfSU5JVAorCQlZWV9VU0VSX0lOSVQ7CisjZW5kaWYKKworCQlpZiAoICEgeXln
LT55eV9zdGFydCApCisJCQl5eWctPnl5X3N0YXJ0ID0gMTsJLyogZmlyc3Qgc3RhcnQgc3RhdGUg
Ki8KKworCQlpZiAoICEgeXlpbiApCisJCQl5eWluID0gc3RkaW47CisKKwkJaWYgKCAhIHl5b3V0
ICkKKwkJCXl5b3V0ID0gc3Rkb3V0OworCisJCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApIHsK
KwkJCXl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKKwkJCVlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRSA9CisJCQkJeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNj
YW5uZXIpOworCQl9CisKKwkJeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisJCX0K
KworCXdoaWxlICggMSApCQkvKiBsb29wcyB1bnRpbCBlbmQtb2YtZmlsZSBpcyByZWFjaGVkICov
CisJCXsKKwkJeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7CisKKwkJLyogU3VwcG9ydCBvZiB5eXRl
eHQuICovCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCisJCS8qIHl5X2JwIHBvaW50
cyB0byB0aGUgcG9zaXRpb24gaW4geXlfY2hfYnVmIG9mIHRoZSBzdGFydCBvZgorCQkgKiB0aGUg
Y3VycmVudCBydW4uCisJCSAqLworCQl5eV9icCA9IHl5X2NwOworCisJCXl5X2N1cnJlbnRfc3Rh
dGUgPSB5eWctPnl5X3N0YXJ0OworeXlfbWF0Y2g6CisJCWRvCisJCQl7CisJCQlyZWdpc3RlciBZ
WV9DSEFSIHl5X2MgPSB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXTsKKwkJCWlmICggeXlfYWNj
ZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKKwkJCQl7CisJCQkJeXlnLT55eV9sYXN0X2FjY2VwdGlu
Z19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19j
cG9zID0geXlfY3A7CisJCQkJfQorCQkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50
X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQorCQkJCXsKKwkJCQl5eV9jdXJy
ZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOworCQkJCWlmICggeXlf
Y3VycmVudF9zdGF0ZSA+PSA0NDMgKQorCQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50
KSB5eV9jXTsKKwkJCQl9CisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlf
Y3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCSsreXlfY3A7CisJCQl9
CisJCXdoaWxlICggeXlfY3VycmVudF9zdGF0ZSAhPSA0NDIgKTsKKwkJeXlfY3AgPSB5eWctPnl5
X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3Rf
YWNjZXB0aW5nX3N0YXRlOworCit5eV9maW5kX2FjdGlvbjoKKwkJeXlfYWN0ID0geXlfYWNjZXB0
W3l5X2N1cnJlbnRfc3RhdGVdOworCisJCVlZX0RPX0JFRk9SRV9BQ1RJT047CisKKwkJaWYgKCB5
eV9hY3QgIT0gWVlfRU5EX09GX0JVRkZFUiAmJiB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbeXlfYWN0
XSApCisJCQl7CisJCQl5eV9zaXplX3QgeXlsOworCQkJZm9yICggeXlsID0gMDsgeXlsIDwgeXls
ZW5nOyArK3l5bCApCisJCQkJaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nICkKKwkJCQkJICAgCisg
ICAgZG97IHl5bGluZW5vKys7CisgICAgICAgIHl5Y29sdW1uPTA7CisgICAgfXdoaWxlKDApCis7
CisJCQl9CisKK2RvX2FjdGlvbjoJLyogVGhpcyBsYWJlbCBpcyB1c2VkIG9ubHkgdG8gYWNjZXNz
IEVPRiBhY3Rpb25zLiAqLworCisJCXN3aXRjaCAoIHl5X2FjdCApCisJeyAvKiBiZWdpbm5pbmcg
b2YgYWN0aW9uIHN3aXRjaCAqLworCQkJY2FzZSAwOiAvKiBtdXN0IGJhY2sgdXAgKi8KKwkJCS8q
IHVuZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVGT1JFX0FDVElPTiAqLworCQkJKnl5X2NwID0g
eXlnLT55eV9ob2xkX2NoYXI7CisJCQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3Bv
czsKKwkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwor
CQkJZ290byB5eV9maW5kX2FjdGlvbjsKKworY2FzZSAxOgorWVlfUlVMRV9TRVRVUAoreyByZXR1
cm4gSU5WQVJJQU5UOyB9CisJWVlfQlJFQUsKK2Nhc2UgMjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0
dXJuIEhJR0hfUFJFQ0lTSU9OOyB9CisJWVlfQlJFQUsKK2Nhc2UgMzoKK1lZX1JVTEVfU0VUVVAK
K3sgcmV0dXJuIE1FRElVTV9QUkVDSVNJT047IH0KKwlZWV9CUkVBSworY2FzZSA0OgorWVlfUlVM
RV9TRVRVUAoreyByZXR1cm4gTE9XX1BSRUNJU0lPTjsgfQorCVlZX0JSRUFLCitjYXNlIDU6CitZ
WV9SVUxFX1NFVFVQCit7IHJldHVybiBQUkVDSVNJT047IH0KKwlZWV9CUkVBSworY2FzZSA2Ogor
WVlfUlVMRV9TRVRVUAoreyByZXR1cm4gQVRUUklCVVRFOyB9CisJWVlfQlJFQUsKK2Nhc2UgNzoK
K1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIENPTlNUX1FVQUw7IH0KKwlZWV9CUkVBSworY2FzZSA4
OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gVU5JRk9STTsgfQorCVlZX0JSRUFLCitjYXNlIDk6
CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBWQVJZSU5HOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTA6
CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBCUkVBSzsgfQorCVlZX0JSRUFLCitjYXNlIDExOgor
WVlfUlVMRV9TRVRVUAoreyByZXR1cm4gQ09OVElOVUU7IH0KKwlZWV9CUkVBSworY2FzZSAxMjoK
K1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIERPOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTM6CitZWV9S
VUxFX1NFVFVQCit7IHJldHVybiBGT1I7IH0KKwlZWV9CUkVBSworY2FzZSAxNDoKK1lZX1JVTEVf
U0VUVVAKK3sgcmV0dXJuIFdISUxFOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTU6CitZWV9SVUxFX1NF
VFVQCit7IHJldHVybiBJRjsgfQorCVlZX0JSRUFLCitjYXNlIDE2OgorWVlfUlVMRV9TRVRVUAor
eyByZXR1cm4gRUxTRTsgfQorCVlZX0JSRUFLCitjYXNlIDE3OgorWVlfUlVMRV9TRVRVUAoreyBy
ZXR1cm4gSU5fUVVBTDsgfQorCVlZX0JSRUFLCitjYXNlIDE4OgorWVlfUlVMRV9TRVRVUAoreyBy
ZXR1cm4gT1VUX1FVQUw7IH0KKwlZWV9CUkVBSworY2FzZSAxOToKK1lZX1JVTEVfU0VUVVAKK3sg
cmV0dXJuIElOT1VUX1FVQUw7IH0KKwlZWV9CUkVBSworY2FzZSAyMDoKK1lZX1JVTEVfU0VUVVAK
K3sgcmV0dXJuIEZMT0FUX1RZUEU7IH0KKwlZWV9CUkVBSworY2FzZSAyMToKK1lZX1JVTEVfU0VU
VVAKK3sgcmV0dXJuIElOVF9UWVBFOyB9CisJWVlfQlJFQUsKK2Nhc2UgMjI6CitZWV9SVUxFX1NF
VFVQCit7IHJldHVybiBWT0lEX1RZUEU7IH0KKwlZWV9CUkVBSworY2FzZSAyMzoKK1lZX1JVTEVf
U0VUVVAKK3sgcmV0dXJuIEJPT0xfVFlQRTsgfQorCVlZX0JSRUFLCitjYXNlIDI0OgorWVlfUlVM
RV9TRVRVUAoreyB5eWx2YWwtPmxleC5iID0gdHJ1ZTsgIHJldHVybiBCT09MQ09OU1RBTlQ7IH0K
KwlZWV9CUkVBSworY2FzZSAyNToKK1lZX1JVTEVfU0VUVVAKK3sgeXlsdmFsLT5sZXguYiA9IGZh
bHNlOyByZXR1cm4gQk9PTENPTlNUQU5UOyB9CisJWVlfQlJFQUsKK2Nhc2UgMjY6CitZWV9SVUxF
X1NFVFVQCit7IHJldHVybiBESVNDQVJEOyB9CisJWVlfQlJFQUsKK2Nhc2UgMjc6CitZWV9SVUxF
X1NFVFVQCit7IHJldHVybiBSRVRVUk47IH0KKwlZWV9CUkVBSworY2FzZSAyODoKK1lZX1JVTEVf
U0VUVVAKK3sgcmV0dXJuIE1BVFJJWDI7IH0KKwlZWV9CUkVBSworY2FzZSAyOToKK1lZX1JVTEVf
U0VUVVAKK3sgcmV0dXJuIE1BVFJJWDM7IH0KKwlZWV9CUkVBSworY2FzZSAzMDoKK1lZX1JVTEVf
U0VUVVAKK3sgcmV0dXJuIE1BVFJJWDQ7IH0KKwlZWV9CUkVBSworY2FzZSAzMToKK1lZX1JVTEVf
U0VUVVAKK3sgcmV0dXJuIFZFQzI7IH0KKwlZWV9CUkVBSworY2FzZSAzMjoKK1lZX1JVTEVfU0VU
VVAKK3sgcmV0dXJuIFZFQzM7IH0KKwlZWV9CUkVBSworY2FzZSAzMzoKK1lZX1JVTEVfU0VUVVAK
K3sgcmV0dXJuIFZFQzQ7IH0KKwlZWV9CUkVBSworY2FzZSAzNDoKK1lZX1JVTEVfU0VUVVAKK3sg
cmV0dXJuIElWRUMyOyB9CisJWVlfQlJFQUsKK2Nhc2UgMzU6CitZWV9SVUxFX1NFVFVQCit7IHJl
dHVybiBJVkVDMzsgfQorCVlZX0JSRUFLCitjYXNlIDM2OgorWVlfUlVMRV9TRVRVUAoreyByZXR1
cm4gSVZFQzQ7IH0KKwlZWV9CUkVBSworY2FzZSAzNzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJu
IEJWRUMyOyB9CisJWVlfQlJFQUsKK2Nhc2UgMzg6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBC
VkVDMzsgfQorCVlZX0JSRUFLCitjYXNlIDM5OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gQlZF
QzQ7IH0KKwlZWV9CUkVBSworY2FzZSA0MDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIFNBTVBM
RVIyRDsgfQorCVlZX0JSRUFLCitjYXNlIDQxOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gU0FN
UExFUkNVQkU7IH0KKwlZWV9CUkVBSworY2FzZSA0MjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJu
IFNBTVBMRVJfRVhURVJOQUxfT0VTOyB9CisJWVlfQlJFQUsKK2Nhc2UgNDM6CitZWV9SVUxFX1NF
VFVQCit7IHJldHVybiBTQU1QTEVSMkRSRUNUOyB9CisJWVlfQlJFQUsKK2Nhc2UgNDQ6CitZWV9S
VUxFX1NFVFVQCit7IHJldHVybiBTVFJVQ1Q7IH0KKwlZWV9CUkVBSworY2FzZSA0NToKK1lZX1JV
TEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFL
CitjYXNlIDQ2OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNDc6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA0ODoKK1lZX1JVTEVfU0VU
VVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNl
IDQ5OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
CisJWVlfQlJFQUsKK2Nhc2UgNTA6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA1MToKK1lZX1JVTEVfU0VUVVAKK3sg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDUyOgor
WVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlf
QlJFQUsKK2Nhc2UgNTM6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA1NDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDU1OgorWVlfUlVM
RV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsK
K2Nhc2UgNTY6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KKwlZWV9CUkVBSworY2FzZSA1NzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDU4OgorWVlfUlVMRV9TRVRV
UAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2Ug
NTk6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
KwlZWV9CUkVBSworY2FzZSA2MDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDYxOgorWVlfUlVMRV9TRVRVUAoreyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNjI6CitZ
WV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9C
UkVBSworY2FzZSA2MzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDY0OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNjU6CitZWV9SVUxF
X1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSwor
Y2FzZSA2NjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQorCVlZX0JSRUFLCitjYXNlIDY3OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNjg6CitZWV9SVUxFX1NFVFVQ
Cit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA2
OToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQor
CVlZX0JSRUFLCitjYXNlIDcwOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNzE6CitZWV9SVUxFX1NFVFVQCit7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA3MjoKK1lZ
X1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JS
RUFLCitjYXNlIDczOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNzQ6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA3NToKK1lZX1JVTEVf
U0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitj
YXNlIDc2OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9CisJWVlfQlJFQUsKK2Nhc2UgNzc6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA3ODoKK1lZX1JVTEVfU0VUVVAK
K3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDc5
OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJ
WVlfQlJFQUsKK2Nhc2UgODA6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA4MToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDgyOgorWVlf
UlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJF
QUsKK2Nhc2UgODM6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA4NDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDg1OgorWVlfUlVMRV9T
RVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nh
c2UgODY6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KKwlZWV9CUkVBSworY2FzZSA4NzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDg4OgorWVlfUlVMRV9TRVRVUAor
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgODk6
CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZ
WV9CUkVBSworY2FzZSA5MDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDkxOgorWVlfUlVMRV9TRVRVUAoreyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTI6CitZWV9S
VUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVB
SworY2FzZSA5MzoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgIHl5bHZhbC0+bGV4LnN0cmluZyA9IE5l
d1Bvb2xUU3RyaW5nKHl5dGV4dCk7IAorICAgcmV0dXJuIGNoZWNrX3R5cGUoeXlzY2FubmVyKTsK
K30KKwlZWV9CUkVBSworY2FzZSA5NDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIGludF9jb25z
dGFudCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTU6CitZWV9SVUxFX1NFVFVQCit7
IHJldHVybiBpbnRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDk2Ogor
WVlfUlVMRV9TRVRVUAoreyByZXR1cm4gaW50X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KKwlZWV9C
UkVBSworY2FzZSA5NzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5
c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5ODoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJu
IGZsb2F0X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5OToKK1lZX1JV
TEVfU0VUVVAKK3sgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVB
SworY2FzZSAxMDA6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBBRERfQVNTSUdOOyB9CisJWVlf
QlJFQUsKK2Nhc2UgMTAxOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gU1VCX0FTU0lHTjsgfQor
CVlZX0JSRUFLCitjYXNlIDEwMjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIE1VTF9BU1NJR047
IH0KKwlZWV9CUkVBSworY2FzZSAxMDM6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBESVZfQVNT
SUdOOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTA0OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gTU9E
X0FTU0lHTjsgfQorCVlZX0JSRUFLCitjYXNlIDEwNToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJu
IExFRlRfQVNTSUdOOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTA2OgorWVlfUlVMRV9TRVRVUAoreyBy
ZXR1cm4gUklHSFRfQVNTSUdOOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTA3OgorWVlfUlVMRV9TRVRV
UAoreyByZXR1cm4gQU5EX0FTU0lHTjsgfQorCVlZX0JSRUFLCitjYXNlIDEwODoKK1lZX1JVTEVf
U0VUVVAKK3sgcmV0dXJuIFhPUl9BU1NJR047IH0KKwlZWV9CUkVBSworY2FzZSAxMDk6CitZWV9S
VUxFX1NFVFVQCit7IHJldHVybiBPUl9BU1NJR047IH0KKwlZWV9CUkVBSworY2FzZSAxMTA6CitZ
WV9SVUxFX1NFVFVQCit7IHJldHVybiBJTkNfT1A7IH0KKwlZWV9CUkVBSworY2FzZSAxMTE6CitZ
WV9SVUxFX1NFVFVQCit7IHJldHVybiBERUNfT1A7IH0KKwlZWV9CUkVBSworY2FzZSAxMTI6CitZ
WV9SVUxFX1NFVFVQCit7IHJldHVybiBBTkRfT1A7IH0KKwlZWV9CUkVBSworY2FzZSAxMTM6CitZ
WV9SVUxFX1NFVFVQCit7IHJldHVybiBPUl9PUDsgfQorCVlZX0JSRUFLCitjYXNlIDExNDoKK1lZ
X1JVTEVfU0VUVVAKK3sgcmV0dXJuIFhPUl9PUDsgfQorCVlZX0JSRUFLCitjYXNlIDExNToKK1lZ
X1JVTEVfU0VUVVAKK3sgcmV0dXJuIExFX09QOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTE2OgorWVlf
UlVMRV9TRVRVUAoreyByZXR1cm4gR0VfT1A7IH0KKwlZWV9CUkVBSworY2FzZSAxMTc6CitZWV9S
VUxFX1NFVFVQCit7IHJldHVybiBFUV9PUDsgfQorCVlZX0JSRUFLCitjYXNlIDExODoKK1lZX1JV
TEVfU0VUVVAKK3sgcmV0dXJuIE5FX09QOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTE5OgorWVlfUlVM
RV9TRVRVUAoreyByZXR1cm4gTEVGVF9PUDsgfQorCVlZX0JSRUFLCitjYXNlIDEyMDoKK1lZX1JV
TEVfU0VUVVAKK3sgcmV0dXJuIFJJR0hUX09QOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTIxOgorWVlf
UlVMRV9TRVRVUAoreyByZXR1cm4gU0VNSUNPTE9OOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTIyOgor
WVlfUlVMRV9TRVRVUAoreyByZXR1cm4gTEVGVF9CUkFDRTsgfQorCVlZX0JSRUFLCitjYXNlIDEy
MzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIFJJR0hUX0JSQUNFOyB9CisJWVlfQlJFQUsKK2Nh
c2UgMTI0OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gQ09NTUE7IH0KKwlZWV9CUkVBSworY2Fz
ZSAxMjU6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBDT0xPTjsgfQorCVlZX0JSRUFLCitjYXNl
IDEyNjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIEVRVUFMOyB9CisJWVlfQlJFQUsKK2Nhc2Ug
MTI3OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gTEVGVF9QQVJFTjsgfQorCVlZX0JSRUFLCitj
YXNlIDEyODoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIFJJR0hUX1BBUkVOOyB9CisJWVlfQlJF
QUsKK2Nhc2UgMTI5OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gTEVGVF9CUkFDS0VUOyB9CisJ
WVlfQlJFQUsKK2Nhc2UgMTMwOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gUklHSFRfQlJBQ0tF
VDsgfQorCVlZX0JSRUFLCitjYXNlIDEzMToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIERPVDsg
fQorCVlZX0JSRUFLCitjYXNlIDEzMjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIEJBTkc7IH0K
KwlZWV9CUkVBSworY2FzZSAxMzM6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBEQVNIOyB9CisJ
WVlfQlJFQUsKK2Nhc2UgMTM0OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gVElMREU7IH0KKwlZ
WV9CUkVBSworY2FzZSAxMzU6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBQTFVTOyB9CisJWVlf
QlJFQUsKK2Nhc2UgMTM2OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gU1RBUjsgfQorCVlZX0JS
RUFLCitjYXNlIDEzNzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIFNMQVNIOyB9CisJWVlfQlJF
QUsKK2Nhc2UgMTM4OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gUEVSQ0VOVDsgfQorCVlZX0JS
RUFLCitjYXNlIDEzOToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIExFRlRfQU5HTEU7IH0KKwlZ
WV9CUkVBSworY2FzZSAxNDA6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBSSUdIVF9BTkdMRTsg
fQorCVlZX0JSRUFLCitjYXNlIDE0MToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIFZFUlRJQ0FM
X0JBUjsgfQorCVlZX0JSRUFLCitjYXNlIDE0MjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIENB
UkVUOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTQzOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gQU1Q
RVJTQU5EOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTQ0OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4g
UVVFU1RJT047IH0KKwlZWV9CUkVBSworY2FzZSAxNDU6CisvKiBydWxlIDE0NSBjYW4gbWF0Y2gg
ZW9sICovCitZWV9SVUxFX1NFVFVQCit7IH0KKwlZWV9CUkVBSworY2FzZSBZWV9TVEFURV9FT0Yo
SU5JVElBTCk6Cit7IHl5dGVybWluYXRlKCk7IH0KKwlZWV9CUkVBSworY2FzZSAxNDY6CitZWV9S
VUxFX1NFVFVQCit7IGFzc2VydChmYWxzZSk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2Ug
MTQ3OgorWVlfUlVMRV9TRVRVUAorRUNITzsKKwlZWV9CUkVBSworCisJY2FzZSBZWV9FTkRfT0Zf
QlVGRkVSOgorCQl7CisJCS8qIEFtb3VudCBvZiB0ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0
aGUgRU9CIGNoYXIuICovCisJCWludCB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkg
KHl5X2NwIC0geXlnLT55eXRleHRfcHRyKSAtIDE7CisKKwkJLyogVW5kbyB0aGUgZWZmZWN0cyBv
ZiBZWV9ET19CRUZPUkVfQUNUSU9OLiAqLworCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsK
KwkJWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAorCisJCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9ORVcgKQorCQkJeworCQkJLyog
V2UncmUgc2Nhbm5pbmcgYSBuZXcgZmlsZSBvciBpbnB1dCBzb3VyY2UuICBJdCdzCisJCQkgKiBw
b3NzaWJsZSB0aGF0IHRoaXMgaGFwcGVuZWQgYmVjYXVzZSB0aGUgdXNlcgorCQkJICoganVzdCBw
b2ludGVkIHl5aW4gYXQgYSBuZXcgc291cmNlIGFuZCBjYWxsZWQKKwkJCSAqIHl5bGV4KCkuICBJ
ZiBzbywgdGhlbiB3ZSBoYXZlIHRvIGFzc3VyZQorCQkJICogY29uc2lzdGVuY3kgYmV0d2VlbiBZ
WV9DVVJSRU5UX0JVRkZFUiBhbmQgb3VyCisJCQkgKiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUgcmln
aHQgcGxhY2UgdG8gZG8gc28sIGJlY2F1c2UKKwkJCSAqIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGlv
biAob3RoZXIgdGhhbiBwb3NzaWJseSBhCisJCQkgKiBiYWNrLXVwKSB0aGF0IHdpbGwgbWF0Y2gg
Zm9yIHRoZSBuZXcgaW5wdXQgc291cmNlLgorCQkJICovCisJCQl5eWctPnl5X25fY2hhcnMgPSBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7CisJCQlZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2lucHV0X2ZpbGUgPSB5eWluOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05PUk1BTDsKKwkJCX0KKworCQkvKiBO
b3RlIHRoYXQgaGVyZSB3ZSB0ZXN0IGZvciB5eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9u
CisJCSAqIG9mIHRoZSBmaXJzdCBFT0IgaW4gdGhlIGJ1ZmZlciwgc2luY2UgeXlfY19idWZfcCB3
aWxsCisJCSAqIGFscmVhZHkgaGF2ZSBiZWVuIGluY3JlbWVudGVkIHBhc3QgdGhlIE5VTCBjaGFy
YWN0ZXIKKwkJICogKHNpbmNlIGFsbCBzdGF0ZXMgbWFrZSB0cmFuc2l0aW9ucyBvbiBFT0IgdG8g
dGhlCisJCSAqIGVuZC1vZi1idWZmZXIgc3RhdGUpLiAgQ29udHJhc3QgdGhpcyB3aXRoIHRoZSB0
ZXN0CisJCSAqIGluIGlucHV0KCkuCisJCSAqLworCQlpZiAoIHl5Zy0+eXlfY19idWZfcCA8PSAm
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSApCisJ
CQl7IC8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KKwkJCXl5X3N0YXRlX3R5cGUgeXlfbmV4
dF9zdGF0ZTsKKworCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgeXlfYW1v
dW50X29mX21hdGNoZWRfdGV4dDsKKworCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2
aW91c19zdGF0ZSggeXlzY2FubmVyICk7CisKKwkJCS8qIE9rYXksIHdlJ3JlIG5vdyBwb3NpdGlv
bmVkIHRvIG1ha2UgdGhlIE5VTAorCQkJICogdHJhbnNpdGlvbi4gIFdlIGNvdWxkbid0IGhhdmUK
KwkJCSAqIHl5X2dldF9wcmV2aW91c19zdGF0ZSgpIGdvIGFoZWFkIGFuZCBkbyBpdAorCQkJICog
Zm9yIHVzIGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IGhvdyB0byBkZWFsCisJCQkgKiB3aXRoIHRo
ZSBwb3NzaWJpbGl0eSBvZiBqYW1taW5nIChhbmQgd2UgZG9uJ3QKKwkJCSAqIHdhbnQgdG8gYnVp
bGQgamFtbWluZyBpbnRvIGl0IGJlY2F1c2UgdGhlbiBpdAorCQkJICogd2lsbCBydW4gbW9yZSBz
bG93bHkpLgorCQkJICovCisKKwkJCXl5X25leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5
eV9jdXJyZW50X3N0YXRlICwgeXlzY2FubmVyKTsKKworCQkJeXlfYnAgPSB5eWctPnl5dGV4dF9w
dHIgKyBZWV9NT1JFX0FESjsKKworCQkJaWYgKCB5eV9uZXh0X3N0YXRlICkKKwkJCQl7CisJCQkJ
LyogQ29uc3VtZSB0aGUgTlVMLiAqLworCQkJCXl5X2NwID0gKyt5eWctPnl5X2NfYnVmX3A7CisJ
CQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X25leHRfc3RhdGU7CisJCQkJZ290byB5eV9tYXRjaDsK
KwkJCQl9CisKKwkJCWVsc2UKKwkJCQl7CisJCQkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0
aW5nX2Nwb3M7CisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdf
c3RhdGU7CisJCQkJZ290byB5eV9maW5kX2FjdGlvbjsKKwkJCQl9CisJCQl9CisKKwkJZWxzZSBz
d2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKKwkJCXsKKwkJCWNhc2Ug
RU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJCQl7CisJCQkJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRj
aF9vbl9lb2YgPSAwOworCisJCQkJaWYgKCB5eXdyYXAoeXlzY2FubmVyICkgKQorCQkJCQl7CisJ
CQkJCS8qIE5vdGU6IGJlY2F1c2Ugd2UndmUgdGFrZW4gY2FyZSBpbgorCQkJCQkgKiB5eV9nZXRf
bmV4dF9idWZmZXIoKSB0byBoYXZlIHNldCB1cAorCQkJCQkgKiB5eXRleHQsIHdlIGNhbiBub3cg
c2V0IHVwCisJCQkJCSAqIHl5X2NfYnVmX3Agc28gdGhhdCBpZiBzb21lIHRvdGFsCisJCQkJCSAq
IGhvc2VyIChsaWtlIGZsZXggaXRzZWxmKSB3YW50cyB0bworCQkJCQkgKiBjYWxsIHRoZSBzY2Fu
bmVyIGFmdGVyIHdlIHJldHVybiB0aGUKKwkJCQkJICogWVlfTlVMTCwgaXQnbGwgc3RpbGwgd29y
ayAtIGFub3RoZXIKKwkJCQkJICogWVlfTlVMTCB3aWxsIGdldCByZXR1cm5lZC4KKwkJCQkJICov
CisJCQkJCXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOwor
CisJCQkJCXl5X2FjdCA9IFlZX1NUQVRFX0VPRihZWV9TVEFSVCk7CisJCQkJCWdvdG8gZG9fYWN0
aW9uOworCQkJCQl9CisKKwkJCQllbHNlCisJCQkJCXsKKwkJCQkJaWYgKCAhIHl5Zy0+eXlfZGlk
X2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKKwkJCQkJCVlZX05FV19GSUxFOworCQkJCQl9CisJCQkJ
YnJlYWs7CisJCQkJfQorCisJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJCQl5eWct
Pnl5X2NfYnVmX3AgPQorCQkJCQl5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hl
ZF90ZXh0OworCisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSgg
eXlzY2FubmVyICk7CisKKwkJCQl5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKKwkJCQl5eV9icCA9
IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOworCQkJCWdvdG8geXlfbWF0Y2g7CisKKwkJ
CWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgorCQkJCXl5Zy0+eXlfY19idWZfcCA9CisJCQkJJllZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc107CisKKwkJ
CQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsK
KworCQkJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCQkJCXl5X2JwID0geXlnLT55eXRleHRf
cHRyICsgWVlfTU9SRV9BREo7CisJCQkJZ290byB5eV9maW5kX2FjdGlvbjsKKwkJCX0KKwkJYnJl
YWs7CisJCX0KKworCWRlZmF1bHQ6CisJCVlZX0ZBVEFMX0VSUk9SKAorCQkJImZhdGFsIGZsZXgg
c2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kIiApOworCX0gLyogZW5kIG9m
IGFjdGlvbiBzd2l0Y2ggKi8KKwkJfSAvKiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCit9
IC8qIGVuZCBvZiB5eWxleCAqLworCisvKiB5eV9nZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8gcmVh
ZCBpbiBhIG5ldyBidWZmZXIKKyAqCisgKiBSZXR1cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4g
YWN0aW9uOgorICoJRU9CX0FDVF9MQVNUX01BVENIIC0KKyAqCUVPQl9BQ1RfQ09OVElOVUVfU0NB
TiAtIGNvbnRpbnVlIHNjYW5uaW5nIGZyb20gY3VycmVudCBwb3NpdGlvbgorICoJRU9CX0FDVF9F
TkRfT0ZfRklMRSAtIGVuZCBvZiBmaWxlCisgKi8KK3N0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVm
ZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCXJlZ2lzdGVyIGNoYXIgKmRlc3QgPSBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZjsKKwlyZWdpc3RlciBjaGFyICpzb3VyY2Ug
PSB5eWctPnl5dGV4dF9wdHI7CisJcmVnaXN0ZXIgaW50IG51bWJlcl90b19tb3ZlLCBpOworCWlu
dCByZXRfdmFsOworCisJaWYgKCB5eWctPnl5X2NfYnVmX3AgPiAmWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gKQorCQlZWV9GQVRBTF9FUlJP
UigKKwkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tZW5kIG9mIGJ1ZmZlciBt
aXNzZWQiICk7CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfZmlsbF9idWZm
ZXIgPT0gMCApCisJCXsgLyogRG9uJ3QgdHJ5IHRvIGZpbGwgdGhlIGJ1ZmZlciwgc28gdGhpcyBp
cyBhbiBFT0YuICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyIC0g
WVlfTU9SRV9BREogPT0gMSApCisJCQl7CisJCQkvKiBXZSBtYXRjaGVkIGEgc2luZ2xlIGNoYXJh
Y3RlciwgdGhlIEVPQiwgc28KKwkJCSAqIHRyZWF0IHRoaXMgYXMgYSBmaW5hbCBFT0YuCisJCQkg
Ki8KKwkJCXJldHVybiBFT0JfQUNUX0VORF9PRl9GSUxFOworCQkJfQorCisJCWVsc2UKKwkJCXsK
KwkJCS8qIFdlIG1hdGNoZWQgc29tZSB0ZXh0IHByaW9yIHRvIHRoZSBFT0IsIGZpcnN0CisJCQkg
KiBwcm9jZXNzIGl0LgorCQkJICovCisJCQlyZXR1cm4gRU9CX0FDVF9MQVNUX01BVENIOworCQkJ
fQorCQl9CisKKwkvKiBUcnkgdG8gcmVhZCBtb3JlIGRhdGEuICovCisKKwkvKiBGaXJzdCBtb3Zl
IGxhc3QgY2hhcnMgdG8gc3RhcnQgb2YgYnVmZmVyLiAqLworCW51bWJlcl90b19tb3ZlID0gKGlu
dCkgKHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cikgLSAxOworCisJZm9yICggaSA9
IDA7IGkgPCBudW1iZXJfdG9fbW92ZTsgKytpICkKKwkJKihkZXN0KyspID0gKihzb3VyY2UrKyk7
CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9PSBZ
WV9CVUZGRVJfRU9GX1BFTkRJTkcgKQorCQkvKiBkb24ndCBkbyB0aGUgcmVhZCwgaXQncyBub3Qg
Z3VhcmFudGVlZCB0byByZXR1cm4gYW4gRU9GLAorCQkgKiBqdXN0IGZvcmNlIGFuIEVPRgorCQkg
Ki8KKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2No
YXJzID0gMDsKKworCWVsc2UKKwkJeworCQkJeXlfc2l6ZV90IG51bV90b19yZWFkID0KKwkJCVlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7
CisKKwkJd2hpbGUgKCBudW1fdG9fcmVhZCA8PSAwICkKKwkJCXsgLyogTm90IGVub3VnaCByb29t
IGluIHRoZSBidWZmZXIgLSBncm93IGl0LiAqLworCisJCQkvKiBqdXN0IGEgc2hvcnRlciBuYW1l
IGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8KKwkJCVlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFOworCisJCQlpbnQgeXlfY19idWZfcF9vZmZzZXQgPQorCQkJCShp
bnQpICh5eWctPnl5X2NfYnVmX3AgLSBiLT55eV9jaF9idWYpOworCisJCQlpZiAoIGItPnl5X2lz
X291cl9idWZmZXIgKQorCQkJCXsKKwkJCQl5eV9zaXplX3QgbmV3X3NpemUgPSBiLT55eV9idWZf
c2l6ZSAqIDI7CisKKwkJCQlpZiAoIG5ld19zaXplIDw9IDAgKQorCQkJCQliLT55eV9idWZfc2l6
ZSArPSBiLT55eV9idWZfc2l6ZSAvIDg7CisJCQkJZWxzZQorCQkJCQliLT55eV9idWZfc2l6ZSAq
PSAyOworCisJCQkJYi0+eXlfY2hfYnVmID0gKGNoYXIgKikKKwkJCQkJLyogSW5jbHVkZSByb29t
IGluIGZvciAyIEVPQiBjaGFycy4gKi8KKwkJCQkJeXlyZWFsbG9jKCh2b2lkICopIGItPnl5X2No
X2J1ZixiLT55eV9idWZfc2l6ZSArIDIgLHl5c2Nhbm5lciApOworCQkJCX0KKwkJCWVsc2UKKwkJ
CQkvKiBDYW4ndCBncm93IGl0LCB3ZSBkb24ndCBvd24gaXQuICovCisJCQkJYi0+eXlfY2hfYnVm
ID0gMDsKKworCQkJaWYgKCAhIGItPnl5X2NoX2J1ZiApCisJCQkJWVlfRkFUQUxfRVJST1IoCisJ
CQkJImZhdGFsIGVycm9yIC0gc2Nhbm5lciBpbnB1dCBidWZmZXIgb3ZlcmZsb3ciICk7CisKKwkJ
CXl5Zy0+eXlfY19idWZfcCA9ICZiLT55eV9jaF9idWZbeXlfY19idWZfcF9vZmZzZXRdOworCisJ
CQludW1fdG9fcmVhZCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLQor
CQkJCQkJbnVtYmVyX3RvX21vdmUgLSAxOworCisJCQl9CisKKwkJaWYgKCBudW1fdG9fcmVhZCA+
IFlZX1JFQURfQlVGX1NJWkUgKQorCQkJbnVtX3RvX3JlYWQgPSBZWV9SRUFEX0JVRl9TSVpFOwor
CisJCS8qIFJlYWQgaW4gbW9yZSBkYXRhLiAqLworCQlZWV9JTlBVVCggKCZZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2NoX2J1ZltudW1iZXJfdG9fbW92ZV0pLAorCQkJeXlnLT55eV9uX2No
YXJzLCBudW1fdG9fcmVhZCApOworCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9j
aGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKKwkJfQorCisJaWYgKCB5eWctPnl5X25fY2hhcnMgPT0g
MCApCisJCXsKKwkJaWYgKCBudW1iZXJfdG9fbW92ZSA9PSBZWV9NT1JFX0FESiApCisJCQl7CisJ
CQlyZXRfdmFsID0gRU9CX0FDVF9FTkRfT0ZfRklMRTsKKwkJCXl5cmVzdGFydCh5eWluICAseXlz
Y2FubmVyKTsKKwkJCX0KKworCQllbHNlCisJCQl7CisJCQlyZXRfdmFsID0gRU9CX0FDVF9MQVNU
X01BVENIOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0K
KwkJCQlZWV9CVUZGRVJfRU9GX1BFTkRJTkc7CisJCQl9CisJCX0KKworCWVsc2UKKwkJcmV0X3Zh
bCA9IEVPQl9BQ1RfQ09OVElOVUVfU0NBTjsKKworCWlmICgoeXlfc2l6ZV90KSAoeXlnLT55eV9u
X2NoYXJzICsgbnVtYmVyX3RvX21vdmUpID4gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9i
dWZfc2l6ZSkgeworCQkvKiBFeHRlbmQgdGhlIGFycmF5IGJ5IDUwJSwgcGx1cyB0aGUgbnVtYmVy
IHdlIHJlYWxseSBuZWVkLiAqLworCQl5eV9zaXplX3QgbmV3X3NpemUgPSB5eWctPnl5X25fY2hh
cnMgKyBudW1iZXJfdG9fbW92ZSArICh5eWctPnl5X25fY2hhcnMgPj4gMSk7CisJCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmID0gKGNoYXIgKikgeXlyZWFsbG9jKCh2b2lkICop
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmLG5ld19zaXplICx5eXNjYW5uZXIg
KTsKKwkJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmICkKKwkJCVlZ
X0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2dldF9uZXh0X2J1ZmZl
cigpIiApOworCX0KKworCXl5Zy0+eXlfbl9jaGFycyArPSBudW1iZXJfdG9fbW92ZTsKKwlZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdID0gWVlfRU5E
X09GX0JVRkZFUl9DSEFSOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5
Zy0+eXlfbl9jaGFycyArIDFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCisJeXlnLT55eXRl
eHRfcHRyID0gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWzBdOworCisJcmV0
dXJuIHJldF92YWw7Cit9CisKKy8qIHl5X2dldF9wcmV2aW91c19zdGF0ZSAtIGdldCB0aGUgc3Rh
dGUganVzdCBiZWZvcmUgdGhlIEVPQiBjaGFyIHdhcyByZWFjaGVkICovCisKKyAgICBzdGF0aWMg
eXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lcikK
K3sKKwlyZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7CisJcmVnaXN0ZXIg
Y2hhciAqeXlfY3A7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOworCisJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7CisKKwlm
b3IgKCB5eV9jcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOyB5eV9jcCA8IHl5Zy0+
eXlfY19idWZfcDsgKyt5eV9jcCApCisJCXsKKwkJcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gKCp5
eV9jcCA/IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldIDogMSk7CisJCWlmICggeXlfYWNjZXB0
W3l5X2N1cnJlbnRfc3RhdGVdICkKKwkJCXsKKwkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3Rh
dGUgPSB5eV9jdXJyZW50X3N0YXRlOworCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0g
eXlfY3A7CisJCQl9CisJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0g
KyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKKwkJCXsKKwkJCXl5X2N1cnJlbnRfc3RhdGUg
PSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJCQlpZiAoIHl5X2N1cnJlbnRfc3Rh
dGUgPj0gNDQzICkKKwkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJ
CX0KKwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVd
ICsgKHVuc2lnbmVkIGludCkgeXlfY107CisJCX0KKworCXJldHVybiB5eV9jdXJyZW50X3N0YXRl
OworfQorCisvKiB5eV90cnlfTlVMX3RyYW5zIC0gdHJ5IHRvIG1ha2UgYSB0cmFuc2l0aW9uIG9u
IHRoZSBOVUwgY2hhcmFjdGVyCisgKgorICogc3lub3BzaXMKKyAqCW5leHRfc3RhdGUgPSB5eV90
cnlfTlVMX3RyYW5zKCBjdXJyZW50X3N0YXRlICk7CisgKi8KKyAgICBzdGF0aWMgeXlfc3RhdGVf
dHlwZSB5eV90cnlfTlVMX3RyYW5zICAoeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlICwg
eXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJlZ2lzdGVyIGludCB5eV9pc19qYW07CisgICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOyAvKiBUaGlz
IHZhciBtYXkgYmUgdW51c2VkIGRlcGVuZGluZyB1cG9uIG9wdGlvbnMuICovCisJcmVnaXN0ZXIg
Y2hhciAqeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7CisKKwlyZWdpc3RlciBZWV9DSEFSIHl5X2Mg
PSAxOworCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKKwkJeworCQl5eWctPnl5
X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKKwkJeXlnLT55eV9sYXN0
X2FjY2VwdGluZ19jcG9zID0geXlfY3A7CisJCX0KKwl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5
X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCisJCXsKKwkJeXlf
Y3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKKwkJaWYgKCB5
eV9jdXJyZW50X3N0YXRlID49IDQ0MyApCisJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50
KSB5eV9jXTsKKwkJfQorCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJy
ZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOworCXl5X2lzX2phbSA9ICh5eV9jdXJy
ZW50X3N0YXRlID09IDQ0Mik7CisKKwkodm9pZCl5eWc7CisJcmV0dXJuIHl5X2lzX2phbSA/IDAg
OiB5eV9jdXJyZW50X3N0YXRlOworfQorCisjaWZuZGVmIFlZX05PX0lOUFVUCisjaWZkZWYgX19j
cGx1c3BsdXMKKyAgICBzdGF0aWMgaW50IHl5aW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lcikKKyNl
bHNlCisgICAgc3RhdGljIGludCBpbnB1dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKKyNlbmRpZgor
Cit7CisJaW50IGM7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOworCisJKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwor
CisJaWYgKCAqeXlnLT55eV9jX2J1Zl9wID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCisJCXsK
KwkJLyogeXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2FudCB0byBy
ZXR1cm4uCisJCSAqIElmIHRoaXMgb2NjdXJzICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFjdGVycywg
dGhlbiBpdCdzIGEKKwkJICogdmFsaWQgTlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0IHRoZSBl
bmQgb2YgdGhlIGJ1ZmZlci4KKwkJICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9wIDwgJllZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQorCQkJLyog
VGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLworCQkJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7CisK
KwkJZWxzZQorCQkJeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8KKwkJCXl5X3NpemVfdCBvZmZzZXQg
PSB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHI7CisJCQkrK3l5Zy0+eXlfY19idWZf
cDsKKworCQkJc3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCisJCQkJ
eworCQkJCWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgorCQkJCQkvKiBUaGlzIGhhcHBlbnMgYmVj
YXVzZSB5eV9nX25fYigpCisJCQkJCSAqIHNlZXMgdGhhdCB3ZSd2ZSBhY2N1bXVsYXRlZCBhCisJ
CQkJCSAqIHRva2VuIGFuZCBmbGFncyB0aGF0IHdlIG5lZWQgdG8KKwkJCQkJICogdHJ5IG1hdGNo
aW5nIHRoZSB0b2tlbiBiZWZvcmUKKwkJCQkJICogcHJvY2VlZGluZy4gIEJ1dCBmb3IgaW5wdXQo
KSwKKwkJCQkJICogdGhlcmUncyBubyBtYXRjaGluZyB0byBjb25zaWRlci4KKwkJCQkJICogU28g
Y29udmVydCB0aGUgRU9CX0FDVF9MQVNUX01BVENICisJCQkJCSAqIHRvIEVPQl9BQ1RfRU5EX09G
X0ZJTEUuCisJCQkJCSAqLworCisJCQkJCS8qIFJlc2V0IGJ1ZmZlciBzdGF0dXMuICovCisJCQkJ
CXl5cmVzdGFydCh5eWluICx5eXNjYW5uZXIpOworCisJCQkJCS8qRkFMTFRIUk9VR0gqLworCisJ
CQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgorCQkJCQl7CisJCQkJCWlmICggeXl3cmFwKHl5
c2Nhbm5lciApICkKKwkJCQkJCXJldHVybiBFT0Y7CisKKwkJCQkJaWYgKCAhIHl5Zy0+eXlfZGlk
X2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKKwkJCQkJCVlZX05FV19GSUxFOworI2lmZGVmIF9fY3Bs
dXNwbHVzCisJCQkJCXJldHVybiB5eWlucHV0KHl5c2Nhbm5lcik7CisjZWxzZQorCQkJCQlyZXR1
cm4gaW5wdXQoeXlzY2FubmVyKTsKKyNlbmRpZgorCQkJCQl9CisKKwkJCQljYXNlIEVPQl9BQ1Rf
Q09OVElOVUVfU0NBTjoKKwkJCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsg
b2Zmc2V0OworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCWMgPSAqKHVuc2lnbmVk
IGNoYXIgKikgeXlnLT55eV9jX2J1Zl9wOwkvKiBjYXN0IGZvciA4LWJpdCBjaGFyJ3MgKi8KKwkq
eXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsJLyogcHJlc2VydmUgeXl0ZXh0ICovCisJeXlnLT55eV9o
b2xkX2NoYXIgPSAqKyt5eWctPnl5X2NfYnVmX3A7CisKKwlpZiAoIGMgPT0gJ1xuJyApCisJCSAg
IAorICAgIGRveyB5eWxpbmVubysrOworICAgICAgICB5eWNvbHVtbj0wOworICAgIH13aGlsZSgw
KQorOworCisJcmV0dXJuIGM7Cit9CisjZW5kaWYJLyogaWZuZGVmIFlZX05PX0lOUFVUICovCisK
Ky8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgc3RyZWFtLgorICog
QHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVy
IFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVz
ZXQgdGhlIHN0YXJ0IGNvbmRpdGlvbiB0byBAYyBJTklUSUFMIC4KKyAqLworICAgIHZvaWQgeXly
ZXN0YXJ0ICAoRklMRSAqIGlucHV0X2ZpbGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJ
aWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7CisgICAgICAgIHl5ZW5zdXJlX2J1ZmZlcl9zdGFj
ayAoeXlzY2FubmVyKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KKyAgICAgICAgICAg
IHl5X2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsKKwl9CisKKwl5
eV9pbml0X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUixpbnB1dF9maWxlICx5eXNjYW5uZXIpOwor
CXl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworfQorCisvKiogU3dpdGNoIHRvIGEg
ZGlmZmVyZW50IGlucHV0IGJ1ZmZlci4KKyAqIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgaW5w
dXQgYnVmZmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8K
KyAgICB2b2lkIHl5X3N3aXRjaF90b19idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIG5ld19idWZm
ZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFi
bGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5CisJICogd2l0aAorCSAqCQl5
eXBvcF9idWZmZXJfc3RhdGUoKTsKKwkgKgkJeXlwdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVy
KTsKKyAgICAgKi8KKwl5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7CisJaWYgKCBZ
WV9DVVJSRU5UX0JVRkZFUiA9PSBuZXdfYnVmZmVyICkKKwkJcmV0dXJuOworCisJaWYgKCBZWV9D
VVJSRU5UX0JVRkZFUiApCisJCXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQg
YnVmZmVyLiAqLworCQkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKKwkJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOwor
CQl9CisKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOworCXl5X2xvYWRf
YnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCisJLyogV2UgZG9uJ3QgYWN0dWFsbHkga25vdyB3
aGV0aGVyIHdlIGRpZCB0aGlzIHN3aXRjaCBkdXJpbmcKKwkgKiBFT0YgKHl5d3JhcCgpKSBwcm9j
ZXNzaW5nLCBidXQgdGhlIG9ubHkgdGltZSB0aGlzIGZsYWcKKwkgKiBpcyBsb29rZWQgYXQgaXMg
YWZ0ZXIgeXl3cmFwKCkgaXMgY2FsbGVkLCBzbyBpdCdzIHNhZmUKKwkgKiB0byBnbyBhaGVhZCBh
bmQgYWx3YXlzIHNldCBpdC4KKwkgKi8KKwl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2Vv
ZiA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIHl5X2xvYWRfYnVmZmVyX3N0YXRlICAoeXlzY2FuX3Qg
eXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKKwl5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X25fY2hhcnM7CisJeXlnLT55eXRleHRfcHRyID0geXlnLT55eV9jX2J1Zl9wID0gWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zOworCXl5aW4gPSBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGU7CisJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55
eV9jX2J1Zl9wOworfQorCisvKiogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gaW5wdXQgYnVm
ZmVyIHN0YXRlLgorICogQHBhcmFtIGZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFyYW0g
c2l6ZSBUaGUgY2hhcmFjdGVyIGJ1ZmZlciBzaXplIGluIGJ5dGVzLiBXaGVuIGluIGRvdWJ0LCB1
c2UgQGMgWVlfQlVGX1NJWkUuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVj
dC4KKyAqIEByZXR1cm4gdGhlIGFsbG9jYXRlZCBidWZmZXIgc3RhdGUuCisgKi8KKyAgICBZWV9C
VUZGRVJfU1RBVEUgeXlfY3JlYXRlX2J1ZmZlciAgKEZJTEUgKiBmaWxlLCBpbnQgIHNpemUgLCB5
eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJWVlfQlVGRkVSX1NUQVRFIGI7CisgICAgCisJYiA9IChZ
WV9CVUZGRVJfU1RBVEUpIHl5YWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkg
LHl5c2Nhbm5lciApOworCWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHlu
YW1pYyBtZW1vcnkgaW4geXlfY3JlYXRlX2J1ZmZlcigpIiApOworCisJYi0+eXlfYnVmX3NpemUg
PSBzaXplOworCisJLyogeXlfY2hfYnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2VyIHRo
YW4gdGhlIHNpemUgZ2l2ZW4gYmVjYXVzZQorCSAqIHdlIG5lZWQgdG8gcHV0IGluIDIgZW5kLW9m
LWJ1ZmZlciBjaGFyYWN0ZXJzLgorCSAqLworCWItPnl5X2NoX2J1ZiA9IChjaGFyICopIHl5YWxs
b2MoYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYi0+eXlfY2hfYnVm
ICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfY3JlYXRl
X2J1ZmZlcigpIiApOworCisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7CisKKwl5eV9pbml0X2J1
ZmZlcihiLGZpbGUgLHl5c2Nhbm5lcik7CisKKwlyZXR1cm4gYjsKK30KKworLyoqIERlc3Ryb3kg
dGhlIGJ1ZmZlci4KKyAqIEBwYXJhbSBiIGEgYnVmZmVyIGNyZWF0ZWQgd2l0aCB5eV9jcmVhdGVf
YnVmZmVyKCkKKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCisg
ICAgdm9pZCB5eV9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOworCisJaWYgKCAhIGIgKQorCQlyZXR1cm47CisKKwlpZiAoIGIgPT0gWVlf
Q1VSUkVOVF9CVUZGRVIgKSAvKiBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgcG9wIGhlcmUuICovCisJ
CVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IChZWV9CVUZGRVJfU1RBVEUpIDA7CisKKwlpZiAo
IGItPnl5X2lzX291cl9idWZmZXIgKQorCQl5eWZyZWUoKHZvaWQgKikgYi0+eXlfY2hfYnVmICx5
eXNjYW5uZXIgKTsKKworCXl5ZnJlZSgodm9pZCAqKSBiICx5eXNjYW5uZXIgKTsKK30KKworLyog
SW5pdGlhbGl6ZXMgb3IgcmVpbml0aWFsaXplcyBhIGJ1ZmZlci4KKyAqIFRoaXMgZnVuY3Rpb24g
aXMgc29tZXRpbWVzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSBidWZmZXIsCisg
KiBzdWNoIGFzIGR1cmluZyBhIHl5cmVzdGFydCgpIG9yIGF0IEVPRi4KKyAqLworICAgIHN0YXRp
YyB2b2lkIHl5X2luaXRfYnVmZmVyICAoWVlfQlVGRkVSX1NUQVRFICBiLCBGSUxFICogZmlsZSAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKKworeworCWludCBvZXJybm8gPSBlcnJubzsKKyAgICBzdHJ1
Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwl5eV9m
bHVzaF9idWZmZXIoYiAseXlzY2FubmVyKTsKKworCWItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOwor
CWItPnl5X2ZpbGxfYnVmZmVyID0gMTsKKworICAgIC8qIElmIGIgaXMgdGhlIGN1cnJlbnQgYnVm
ZmVyLCB0aGVuIHl5X2luaXRfYnVmZmVyIHdhcyBfcHJvYmFibHlfCisgICAgICogY2FsbGVkIGZy
b20geXlyZXN0YXJ0KCkgb3IgdGhyb3VnaCB5eV9nZXRfbmV4dF9idWZmZXIuCisgICAgICogSW4g
dGhhdCBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIHJlc2V0IHRoZSBsaW5lbm8gb3IgY29sdW1uLgor
ICAgICAqLworICAgIGlmIChiICE9IFlZX0NVUlJFTlRfQlVGRkVSKXsKKyAgICAgICAgYi0+eXlf
YnNfbGluZW5vID0gMTsKKyAgICAgICAgYi0+eXlfYnNfY29sdW1uID0gMDsKKyAgICB9CisKKyAg
ICAgICAgYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAwOworICAgIAorCWVycm5vID0gb2Vycm5vOwor
fQorCisvKiogRGlzY2FyZCBhbGwgYnVmZmVyZWQgY2hhcmFjdGVycy4gT24gdGhlIG5leHQgc2Nh
biwgWVlfSU5QVVQgd2lsbCBiZSBjYWxsZWQuCisgKiBAcGFyYW0gYiB0aGUgYnVmZmVyIHN0YXRl
IHRvIGJlIGZsdXNoZWQsIHVzdWFsbHkgQGMgWVlfQ1VSUkVOVF9CVUZGRVIuCisgKiBAcGFyYW0g
eXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworICAgIHZvaWQgeXlfZmx1c2hfYnVm
ZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCWlmICgg
ISBiICkKKwkJcmV0dXJuOworCisJYi0+eXlfbl9jaGFycyA9IDA7CisKKwkvKiBXZSBhbHdheXMg
bmVlZCB0d28gZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLiAgVGhlIGZpcnN0IGNhdXNlcworCSAq
IGEgdHJhbnNpdGlvbiB0byB0aGUgZW5kLW9mLWJ1ZmZlciBzdGF0ZS4gIFRoZSBzZWNvbmQgY2F1
c2VzCisJICogYSBqYW0gaW4gdGhhdCBzdGF0ZS4KKwkgKi8KKwliLT55eV9jaF9idWZbMF0gPSBZ
WV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJYi0+eXlfY2hfYnVmWzFdID0gWVlfRU5EX09GX0JVRkZF
Ul9DSEFSOworCisJYi0+eXlfYnVmX3BvcyA9ICZiLT55eV9jaF9idWZbMF07CisKKwliLT55eV9h
dF9ib2wgPSAxOworCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOworCisJaWYg
KCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2Fu
bmVyICk7Cit9CisKKy8qKiBQdXNoZXMgdGhlIG5ldyBzdGF0ZSBvbnRvIHRoZSBzdGFjay4gVGhl
IG5ldyBzdGF0ZSBiZWNvbWVzCisgKiAgdGhlIGN1cnJlbnQgc3RhdGUuIFRoaXMgZnVuY3Rpb24g
d2lsbCBhbGxvY2F0ZSB0aGUgc3RhY2sKKyAqICBpZiBuZWNlc3NhcnkuCisgKiAgQHBhcmFtIG5l
d19idWZmZXIgVGhlIG5ldyBzdGF0ZS4KKyAqICBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVy
IG9iamVjdC4KKyAqLwordm9pZCB5eXB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUg
bmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisJaWYgKG5ld19idWZmZXIgPT0g
TlVMTCkKKwkJcmV0dXJuOworCisJeXllbnN1cmVfYnVmZmVyX3N0YWNrKHl5c2Nhbm5lcik7CisK
KwkvKiBUaGlzIGJsb2NrIGlzIGNvcGllZCBmcm9tIHl5X3N3aXRjaF90b19idWZmZXIuICovCisJ
aWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCisJCXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9u
IGZvciBvbGQgYnVmZmVyLiAqLworCQkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2No
YXI7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19i
dWZfcDsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9u
X2NoYXJzOworCQl9CisKKwkvKiBPbmx5IHB1c2ggaWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNlLCBy
ZXBsYWNlIHRvcC4gKi8KKwlpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpCisJCXl5Zy0+eXlfYnVmZmVy
X3N0YWNrX3RvcCsrOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7CisK
KwkvKiBjb3BpZWQgZnJvbSB5eV9zd2l0Y2hfdG9fYnVmZmVyLiAqLworCXl5X2xvYWRfYnVmZmVy
X3N0YXRlKHl5c2Nhbm5lciApOworCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0g
MTsKK30KKworLyoqIFJlbW92ZXMgYW5kIGRlbGV0ZXMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIGlm
IHByZXNlbnQuCisgKiAgVGhlIG5leHQgZWxlbWVudCBiZWNvbWVzIHRoZSBuZXcgdG9wLgorICog
IEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHl5cG9wX2J1
ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwlpZiAoIVlZX0NVUlJFTlRfQlVG
RkVSKQorCQlyZXR1cm47CisKKwl5eV9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5
eXNjYW5uZXIpOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7CisJaWYgKHl5Zy0+
eXlfYnVmZmVyX3N0YWNrX3RvcCA+IDApCisJCS0teXlnLT55eV9idWZmZXJfc3RhY2tfdG9wOwor
CisJaWYgKFlZX0NVUlJFTlRfQlVGRkVSKSB7CisJCXl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nh
bm5lciApOworCQl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7CisJfQorfQor
CisvKiBBbGxvY2F0ZXMgdGhlIHN0YWNrIGlmIGl0IGRvZXMgbm90IGV4aXN0LgorICogIEd1YXJh
bnRlZXMgc3BhY2UgZm9yIGF0IGxlYXN0IG9uZSBwdXNoLgorICovCitzdGF0aWMgdm9pZCB5eWVu
c3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwl5eV9zaXplX3QgbnVt
X3RvX2FsbG9jOworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsKKworCWlmICgheXlnLT55eV9idWZmZXJfc3RhY2spIHsKKworCQkvKiBGaXJz
dCBhbGxvY2F0aW9uIGlzIGp1c3QgZm9yIDIgZWxlbWVudHMsIHNpbmNlIHdlIGRvbid0IGtub3cg
aWYgdGhpcworCQkgKiBzY2FubmVyIHdpbGwgZXZlbiBuZWVkIGEgc3RhY2suIFdlIHVzZSAyIGlu
c3RlYWQgb2YgMSB0byBhdm9pZCBhbgorCQkgKiBpbW1lZGlhdGUgcmVhbGxvYyBvbiB0aGUgbmV4
dCBjYWxsLgorICAgICAgICAgKi8KKwkJbnVtX3RvX2FsbG9jID0gMTsKKwkJeXlnLT55eV9idWZm
ZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXl5YWxsb2MKKwkJCQkJCQkJKG51
bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKKwkJCQkJCQkJLCB5
eXNjYW5uZXIpOworCQlpZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQorCQkJWVlfRkFUQUxf
RVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXllbnN1cmVfYnVmZmVyX3N0YWNrKCki
ICk7CisJCQkJCQkJCSAgCisJCW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjaywgMCwgbnVtX3Rv
X2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CisJCQkJCisJCXl5Zy0+
eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKKwkJeXlnLT55eV9idWZmZXJfc3Rh
Y2tfdG9wID0gMDsKKwkJcmV0dXJuOworCX0KKworCWlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190
b3AgPj0gKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCkgLSAxKXsKKworCQkvKiBJbmNyZWFzZSB0
aGUgYnVmZmVyIHRvIHByZXBhcmUgZm9yIGEgcG9zc2libGUgcHVzaC4gKi8KKwkJaW50IGdyb3df
c2l6ZSA9IDggLyogYXJiaXRyYXJ5IGdyb3cgc2l6ZSAqLzsKKworCQludW1fdG9fYWxsb2MgPSB5
eWctPnl5X2J1ZmZlcl9zdGFja19tYXggKyBncm93X3NpemU7CisJCXl5Zy0+eXlfYnVmZmVyX3N0
YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKil5eXJlYWxsb2MKKwkJCQkJCQkJKHl5Zy0+
eXlfYnVmZmVyX3N0YWNrLAorCQkJCQkJCQludW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5
X2J1ZmZlcl9zdGF0ZSopCisJCQkJCQkJCSwgeXlzY2FubmVyKTsKKwkJaWYgKCAhIHl5Zy0+eXlf
YnVmZmVyX3N0YWNrICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5
IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOworCisJCS8qIHplcm8gb25seSB0aGUgbmV3
IHNsb3RzLiovCisJCW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+eXlfYnVmZmVy
X3N0YWNrX21heCwgMCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUq
KSk7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKKwl9Cit9CisK
Ky8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gZGlyZWN0bHkgZnJvbSBh
IHVzZXItc3BlY2lmaWVkIGNoYXJhY3RlciBidWZmZXIuCisgKiBAcGFyYW0gYmFzZSB0aGUgY2hh
cmFjdGVyIGJ1ZmZlcgorICogQHBhcmFtIHNpemUgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGNo
YXJhY3RlciBidWZmZXIKKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0Lgor
ICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuIAorICov
CitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9idWZmZXIgIChjaGFyICogYmFzZSwgeXlfc2l6ZV90
ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCVlZX0JVRkZFUl9TVEFURSBiOworICAg
IAorCWlmICggc2l6ZSA8IDIgfHwKKwkgICAgIGJhc2Vbc2l6ZS0yXSAhPSBZWV9FTkRfT0ZfQlVG
RkVSX0NIQVIgfHwKKwkgICAgIGJhc2Vbc2l6ZS0xXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIg
KQorCQkvKiBUaGV5IGZvcmdvdCB0byBsZWF2ZSByb29tIGZvciB0aGUgRU9CJ3MuICovCisJCXJl
dHVybiAwOworCisJYiA9IChZWV9CVUZGRVJfU1RBVEUpIHl5YWxsb2Moc2l6ZW9mKCBzdHJ1Y3Qg
eXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciApOworCWlmICggISBiICkKKwkJWVlfRkFUQUxf
RVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfc2Nhbl9idWZmZXIoKSIgKTsKKwor
CWItPnl5X2J1Zl9zaXplID0gc2l6ZSAtIDI7CS8qICItIDIiIHRvIHRha2UgY2FyZSBvZiBFT0In
cyAqLworCWItPnl5X2J1Zl9wb3MgPSBiLT55eV9jaF9idWYgPSBiYXNlOworCWItPnl5X2lzX291
cl9idWZmZXIgPSAwOworCWItPnl5X2lucHV0X2ZpbGUgPSAwOworCWItPnl5X25fY2hhcnMgPSBi
LT55eV9idWZfc2l6ZTsKKwliLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7CisJYi0+eXlfYXRfYm9s
ID0gMTsKKwliLT55eV9maWxsX2J1ZmZlciA9IDA7CisJYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZ
X0JVRkZFUl9ORVc7CisKKwl5eV9zd2l0Y2hfdG9fYnVmZmVyKGIgLHl5c2Nhbm5lciApOworCisJ
cmV0dXJuIGI7Cit9CisKKy8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4g
YSBzdHJpbmcuIFRoZSBuZXh0IGNhbGwgdG8geXlsZXgoKSB3aWxsCisgKiBzY2FuIGZyb20gYSBA
ZSBjb3B5IG9mIEBhIHN0ci4KKyAqIEBwYXJhbSB5eXN0ciBhIE5VTC10ZXJtaW5hdGVkIHN0cmlu
ZyB0byBzY2FuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEBy
ZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgorICogQG5vdGUg
SWYgeW91IHdhbnQgdG8gc2NhbiBieXRlcyB0aGF0IG1heSBjb250YWluIE5VTCB2YWx1ZXMsIHRo
ZW4gdXNlCisgKiAgICAgICB5eV9zY2FuX2J5dGVzKCkgaW5zdGVhZC4KKyAqLworWVlfQlVGRkVS
X1NUQVRFIHl5X3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0ciAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKK3sKKyAgICAKKwlyZXR1cm4geXlfc2Nhbl9ieXRlcyh5eXN0cixzdHJsZW4oeXlz
dHIpICx5eXNjYW5uZXIpOworfQorCisvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0
byBzY2FuIHRoZSBnaXZlbiBieXRlcy4gVGhlIG5leHQgY2FsbCB0byB5eWxleCgpIHdpbGwKKyAq
IHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgYnl0ZXMuCisgKiBAcGFyYW0geXlieXRlcyB0aGUg
Ynl0ZSBidWZmZXIgdG8gc2NhbgorICogQHBhcmFtIF95eWJ5dGVzX2xlbiB0aGUgbnVtYmVyIG9m
IGJ5dGVzIGluIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBAYSBieXRlcy4KKyAqIEBwYXJhbSB5
eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2Nh
dGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCisgKi8KK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J5
dGVzICAoeXljb25zdCBjaGFyICogeXlieXRlcywgeXlfc2l6ZV90ICBfeXlieXRlc19sZW4gLCB5
eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJWVlfQlVGRkVSX1NUQVRFIGI7CisJY2hhciAqYnVmOwor
CXl5X3NpemVfdCBuOworCXl5X3NpemVfdCBpOworICAgIAorCS8qIEdldCBtZW1vcnkgZm9yIGZ1
bGwgYnVmZmVyLCBpbmNsdWRpbmcgc3BhY2UgZm9yIHRyYWlsaW5nIEVPQidzLiAqLworCW4gPSBf
eXlieXRlc19sZW4gKyAyOworCWJ1ZiA9IChjaGFyICopIHl5YWxsb2MobiAseXlzY2FubmVyICk7
CisJaWYgKCAhIGJ1ZiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5
IGluIHl5X3NjYW5fYnl0ZXMoKSIgKTsKKworCWZvciAoIGkgPSAwOyBpIDwgX3l5Ynl0ZXNfbGVu
OyArK2kgKQorCQlidWZbaV0gPSB5eWJ5dGVzW2ldOworCisJYnVmW195eWJ5dGVzX2xlbl0gPSBi
dWZbX3l5Ynl0ZXNfbGVuKzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCisJYiA9IHl5X3Nj
YW5fYnVmZmVyKGJ1ZixuICx5eXNjYW5uZXIpOworCWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJS
T1IoICJiYWQgYnVmZmVyIGluIHl5X3NjYW5fYnl0ZXMoKSIgKTsKKworCS8qIEl0J3Mgb2theSB0
byBncm93IGV0Yy4gdGhpcyBidWZmZXIsIGFuZCB3ZSBzaG91bGQgdGhyb3cgaXQKKwkgKiBhd2F5
IHdoZW4gd2UncmUgZG9uZS4KKwkgKi8KKwliLT55eV9pc19vdXJfYnVmZmVyID0gMTsKKworCXJl
dHVybiBiOworfQorCisjaWZuZGVmIFlZX0VYSVRfRkFJTFVSRQorI2RlZmluZSBZWV9FWElUX0ZB
SUxVUkUgMgorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNo
YXIqIG1zZyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICAJKHZvaWQpIGZwcmludGYoIHN0
ZGVyciwgIiVzXG4iLCBtc2cgKTsKKwlleGl0KCBZWV9FWElUX0ZBSUxVUkUgKTsKK30KKworLyog
UmVkZWZpbmUgeXlsZXNzKCkgc28gaXQgd29ya3MgaW4gc2VjdGlvbiAzIGNvZGUuICovCisKKyN1
bmRlZiB5eWxlc3MKKyNkZWZpbmUgeXlsZXNzKG4pIFwKKwlkbyBcCisJCXsgXAorCQkvKiBVbmRv
IGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQuICovIFwKKyAgICAgICAgaW50IHl5bGVzc19t
YWNyb19hcmcgPSAobik7IFwKKyAgICAgICAgWVlfTEVTU19MSU5FTk8oeXlsZXNzX21hY3JvX2Fy
Zyk7XAorCQl5eXRleHRbeXlsZW5nXSA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBcCisJCXl5Zy0+eXlf
Y19idWZfcCA9IHl5dGV4dCArIHl5bGVzc19tYWNyb19hcmc7IFwKKwkJeXlnLT55eV9ob2xkX2No
YXIgPSAqeXlnLT55eV9jX2J1Zl9wOyBcCisJCSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOyBcCisJ
CXl5bGVuZyA9IHl5bGVzc19tYWNyb19hcmc7IFwKKwkJfSBcCisJd2hpbGUgKCAwICkKKworLyog
QWNjZXNzb3IgIG1ldGhvZHMgKGdldC9zZXQgZnVuY3Rpb25zKSB0byBzdHJ1Y3QgbWVtYmVycy4g
Ki8KKworLyoqIEdldCB0aGUgdXNlci1kZWZpbmVkIGRhdGEgZm9yIHRoaXMgc2Nhbm5lci4KKyAq
IEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCitZWV9FWFRSQV9UWVBF
IHl5Z2V0X2V4dHJhICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlleHRy
YTsKK30KKworLyoqIEdldCB0aGUgY3VycmVudCBsaW5lIG51bWJlci4KKyAqIEBwYXJhbSB5eXNj
YW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCitpbnQgeXlnZXRfbGluZW5vICAoeXlzY2Fu
X3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKKyAgICAKKyAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIp
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4geXlsaW5lbm87Cit9CisK
Ky8qKiBHZXQgdGhlIGN1cnJlbnQgY29sdW1uIG51bWJlci4KKyAqIEBwYXJhbSB5eXNjYW5uZXIg
VGhlIHNjYW5uZXIgb2JqZWN0LgorICovCitpbnQgeXlnZXRfY29sdW1uICAoeXlzY2FuX3QgeXlz
Y2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsKKyAgICAKKyAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIpCisgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4geXljb2x1bW47Cit9CisKKy8qKiBH
ZXQgdGhlIGlucHV0IHN0cmVhbS4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2Jq
ZWN0LgorICovCitGSUxFICp5eWdldF9pbiAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBz
dHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAg
cmV0dXJuIHl5aW47Cit9CisKKy8qKiBHZXQgdGhlIG91dHB1dCBzdHJlYW0uCisgKiBAcGFyYW0g
eXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworRklMRSAqeXlnZXRfb3V0ICAoeXlz
Y2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlvdXQ7Cit9CisKKy8qKiBHZXQgdGhl
IGxlbmd0aCBvZiB0aGUgY3VycmVudCB0b2tlbi4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNj
YW5uZXIgb2JqZWN0LgorICovCit5eV9zaXplX3QgeXlnZXRfbGVuZyAgKHl5c2Nhbl90IHl5c2Nh
bm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5bGVuZzsKK30KKworLyoqIEdldCB0aGUgY3VycmVudCB0
b2tlbi4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCisKK2No
YXIgKnl5Z2V0X3RleHQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eXRl
eHQ7Cit9CisKKy8qKiBTZXQgdGhlIHVzZXItZGVmaW5lZCBkYXRhLiBUaGlzIGRhdGEgaXMgbmV2
ZXIgdG91Y2hlZCBieSB0aGUgc2Nhbm5lci4KKyAqIEBwYXJhbSB1c2VyX2RlZmluZWQgVGhlIGRh
dGEgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Nhbm5lci4KKyAqIEBwYXJhbSB5eXNjYW5u
ZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHl5c2V0X2V4dHJhIChZWV9FWFRSQV9U
WVBFICB1c2VyX2RlZmluZWQgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5ZXh0cmEg
PSB1c2VyX2RlZmluZWQgOworfQorCisvKiogU2V0IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgor
ICogQHBhcmFtIGxpbmVfbnVtYmVyCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9i
amVjdC4KKyAqLwordm9pZCB5eXNldF9saW5lbm8gKGludCAgbGluZV9udW1iZXIgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOworCisgICAgICAgIC8qIGxpbmVubyBpcyBvbmx5IHZhbGlkIGlmIGFu
IGlucHV0IGJ1ZmZlciBleGlzdHMuICovCisgICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVS
ICkKKyAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJ5eXNldF9saW5lbm8gY2FsbGVkIHdpdGgg
bm8gYnVmZmVyIiApOworICAgIAorICAgIHl5bGluZW5vID0gbGluZV9udW1iZXI7Cit9CisKKy8q
KiBTZXQgdGhlIGN1cnJlbnQgY29sdW1uLgorICogQHBhcmFtIGxpbmVfbnVtYmVyCisgKiBAcGFy
YW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCB5eXNldF9jb2x1bW4g
KGludCAgY29sdW1uX25vICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworICAgICAgICAvKiBj
b2x1bW4gaXMgb25seSB2YWxpZCBpZiBhbiBpbnB1dCBidWZmZXIgZXhpc3RzLiAqLworICAgICAg
ICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUiApCisgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAi
eXlzZXRfY29sdW1uIGNhbGxlZCB3aXRoIG5vIGJ1ZmZlciIgKTsKKyAgICAKKyAgICB5eWNvbHVt
biA9IGNvbHVtbl9ubzsKK30KKworLyoqIFNldCB0aGUgaW5wdXQgc3RyZWFtLiBUaGlzIGRvZXMg
bm90IGRpc2NhcmQgdGhlIGN1cnJlbnQKKyAqIGlucHV0IGJ1ZmZlci4KKyAqIEBwYXJhbSBpbl9z
dHIgQSByZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9i
amVjdC4KKyAqIEBzZWUgeXlfc3dpdGNoX3RvX2J1ZmZlcgorICovCit2b2lkIHl5c2V0X2luIChG
SUxFICogIGluX3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlpbiA9IGluX3N0
ciA7Cit9CisKK3ZvaWQgeXlzZXRfb3V0IChGSUxFICogIG91dF9zdHIgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOworICAgIHl5b3V0ID0gb3V0X3N0ciA7Cit9CisKK2ludCB5eWdldF9kZWJ1ZyAg
KHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5X2ZsZXhfZGVidWc7Cit9CisK
K3ZvaWQgeXlzZXRfZGVidWcgKGludCAgYmRlYnVnICwgeXlzY2FuX3QgeXlzY2FubmVyKQorewor
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
KyAgICB5eV9mbGV4X2RlYnVnID0gYmRlYnVnIDsKK30KKworLyogQWNjZXNzb3IgbWV0aG9kcyBm
b3IgeXlsdmFsIGFuZCB5eWxsb2MgKi8KKworWVlTVFlQRSAqIHl5Z2V0X2x2YWwgICh5eXNjYW5f
dCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eWx2YWw7Cit9CisKK3ZvaWQgeXlzZXRfbHZh
bCAoWVlTVFlQRSAqICB5eWx2YWxfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAg
IHl5bHZhbCA9IHl5bHZhbF9wYXJhbTsKK30KKworWVlMVFlQRSAqeXlnZXRfbGxvYyAgKHl5c2Nh
bl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5bGxvYzsKK30KKyAgICAKK3ZvaWQgeXlz
ZXRfbGxvYyAoWVlMVFlQRSAqICB5eWxsb2NfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7
CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OworICAgIHl5bGxvYyA9IHl5bGxvY19wYXJhbTsKK30KKyAgICAKKy8qIFVzZXItdmlzaWJsZSBB
UEkgKi8KKworLyogeXlsZXhfaW5pdCBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgY3JlYXRlcyB0aGUg
c2Nhbm5lciBpdHNlbGYsIHNvIGl0IGlzCisgKiB0aGUgT05MWSByZWVudHJhbnQgZnVuY3Rpb24g
dGhhdCBkb2Vzbid0IHRha2UgdGhlIHNjYW5uZXIgYXMgdGhlIGxhc3QgYXJndW1lbnQuCisgKiBU
aGF0J3Mgd2h5IHdlIGV4cGxpY2l0bHkgaGFuZGxlIHRoZSBkZWNsYXJhdGlvbiwgaW5zdGVhZCBv
ZiB1c2luZyBvdXIgbWFjcm9zLgorICovCisKK2ludCB5eWxleF9pbml0KHl5c2Nhbl90KiBwdHJf
eXlfZ2xvYmFscykKKworeworICAgIGlmIChwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKKyAgICAg
ICAgZXJybm8gPSBFSU5WQUw7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgICpwdHJf
eXlfZ2xvYmFscyA9ICh5eXNjYW5fdCkgeXlhbGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0c190
ICksIE5VTEwgKTsKKworICAgIGlmICgqcHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAg
IGVycm5vID0gRU5PTUVNOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAvKiBCeSBz
ZXR0aW5nIHRvIDB4QUEsIHdlIGV4cG9zZSBidWdzIGluIHl5X2luaXRfZ2xvYmFscy4gTGVhdmUg
YXQgMHgwMCBmb3IgcmVsZWFzZXMuICovCisgICAgbWVtc2V0KCpwdHJfeXlfZ2xvYmFscywweDAw
LHNpemVvZihzdHJ1Y3QgeXlndXRzX3QpKTsKKworICAgIHJldHVybiB5eV9pbml0X2dsb2JhbHMg
KCAqcHRyX3l5X2dsb2JhbHMgKTsKK30KKworLyogeXlsZXhfaW5pdF9leHRyYSBoYXMgdGhlIHNh
bWUgZnVuY3Rpb25hbGl0eSBhcyB5eWxleF9pbml0LCBidXQgZm9sbG93cyB0aGUKKyAqIGNvbnZl
bnRpb24gb2YgdGFraW5nIHRoZSBzY2FubmVyIGFzIHRoZSBsYXN0IGFyZ3VtZW50LiBOb3RlIGhv
d2V2ZXIsIHRoYXQKKyAqIHRoaXMgaXMgYSAqcG9pbnRlciogdG8gYSBzY2FubmVyLCBhcyBpdCB3
aWxsIGJlIGFsbG9jYXRlZCBieSB0aGlzIGNhbGwgKGFuZAorICogaXMgdGhlIHJlYXNvbiwgdG9v
LCB3aHkgdGhpcyBmdW5jdGlvbiBhbHNvIG11c3QgaGFuZGxlIGl0cyBvd24gZGVjbGFyYXRpb24p
LgorICogVGhlIHVzZXIgZGVmaW5lZCB2YWx1ZSBpbiB0aGUgZmlyc3QgYXJndW1lbnQgd2lsbCBi
ZSBhdmFpbGFibGUgdG8geXlhbGxvYyBpbgorICogdGhlIHl5ZXh0cmEgZmllbGQuCisgKi8KKwor
aW50IHl5bGV4X2luaXRfZXh0cmEoWVlfRVhUUkFfVFlQRSB5eV91c2VyX2RlZmluZWQseXlzY2Fu
X3QqIHB0cl95eV9nbG9iYWxzICkKKworeworICAgIHN0cnVjdCB5eWd1dHNfdCBkdW1teV95eWd1
dHM7CisKKyAgICB5eXNldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAmZHVtbXlfeXlndXRzKTsK
KworICAgIGlmIChwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKKyAgICAgICAgZXJybm8gPSBFSU5W
QUw7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKwkKKyAgICAqcHRyX3l5X2dsb2JhbHMgPSAo
eXlzY2FuX3QpIHl5YWxsb2MgKCBzaXplb2YoIHN0cnVjdCB5eWd1dHNfdCApLCAmZHVtbXlfeXln
dXRzICk7CisJCisgICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKKyAgICAgICAgZXJy
bm8gPSBFTk9NRU07CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICAKKyAgICAvKiBCeSBz
ZXR0aW5nIHRvIDB4QUEsIHdlIGV4cG9zZSBidWdzIGluCisgICAgeXlfaW5pdF9nbG9iYWxzLiBM
ZWF2ZSBhdCAweDAwIGZvciByZWxlYXNlcy4gKi8KKyAgICBtZW1zZXQoKnB0cl95eV9nbG9iYWxz
LDB4MDAsc2l6ZW9mKHN0cnVjdCB5eWd1dHNfdCkpOworICAgIAorICAgIHl5c2V0X2V4dHJhICh5
eV91c2VyX2RlZmluZWQsICpwdHJfeXlfZ2xvYmFscyk7CisgICAgCisgICAgcmV0dXJuIHl5X2lu
aXRfZ2xvYmFscyAoICpwdHJfeXlfZ2xvYmFscyApOworfQorCitzdGF0aWMgaW50IHl5X2luaXRf
Z2xvYmFscyAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICAvKiBJbml0aWFsaXphdGlvbiBp
cyB0aGUgc2FtZSBhcyBmb3IgdGhlIG5vbi1yZWVudHJhbnQgc2Nhbm5lci4KKyAgICAgKiBUaGlz
IGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHl5bGV4X2Rlc3Ryb3koKSwgc28gZG9uJ3QgYWxsb2Nh
dGUgaGVyZS4KKyAgICAgKi8KKworICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gMDsKKyAgICB5
eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPSAwOworICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21h
eCA9IDA7CisgICAgeXlnLT55eV9jX2J1Zl9wID0gKGNoYXIgKikgMDsKKyAgICB5eWctPnl5X2lu
aXQgPSAwOworICAgIHl5Zy0+eXlfc3RhcnQgPSAwOworCisgICAgeXlnLT55eV9zdGFydF9zdGFj
a19wdHIgPSAwOworICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tfZGVwdGggPSAwOworICAgIHl5Zy0+
eXlfc3RhcnRfc3RhY2sgPSAgTlVMTDsKKworLyogRGVmaW5lZCBpbiBtYWluLmMgKi8KKyNpZmRl
ZiBZWV9TVERJTklUCisgICAgeXlpbiA9IHN0ZGluOworICAgIHl5b3V0ID0gc3Rkb3V0OworI2Vs
c2UKKyAgICB5eWluID0gKEZJTEUgKikgMDsKKyAgICB5eW91dCA9IChGSUxFICopIDA7CisjZW5k
aWYKKworICAgIC8qIEZvciBmdXR1cmUgcmVmZXJlbmNlOiBTZXQgZXJybm8gb24gZXJyb3IsIHNp
bmNlIHdlIGFyZSBjYWxsZWQgYnkKKyAgICAgKiB5eWxleF9pbml0KCkKKyAgICAgKi8KKyAgICBy
ZXR1cm4gMDsKK30KKworLyogeXlsZXhfZGVzdHJveSBpcyBmb3IgYm90aCByZWVudHJhbnQgYW5k
IG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMuICovCitpbnQgeXlsZXhfZGVzdHJveSAgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7CisKKyAgICAvKiBQb3AgdGhlIGJ1ZmZlciBzdGFjaywgZGVzdHJveWlu
ZyBlYWNoIGVsZW1lbnQuICovCisJd2hpbGUoWVlfQ1VSUkVOVF9CVUZGRVIpeworCQl5eV9kZWxl
dGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIgKTsKKwkJWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFID0gTlVMTDsKKwkJeXlwb3BfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lcik7CisJ
fQorCisJLyogRGVzdHJveSB0aGUgc3RhY2sgaXRzZWxmLiAqLworCXl5ZnJlZSh5eWctPnl5X2J1
ZmZlcl9zdGFjayAseXlzY2FubmVyKTsKKwl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IE5VTEw7CisK
KyAgICAvKiBEZXN0cm95IHRoZSBzdGFydCBjb25kaXRpb24gc3RhY2suICovCisgICAgICAgIHl5
ZnJlZSh5eWctPnl5X3N0YXJ0X3N0YWNrICx5eXNjYW5uZXIgKTsKKyAgICAgICAgeXlnLT55eV9z
dGFydF9zdGFjayA9IE5VTEw7CisKKyAgICAvKiBSZXNldCB0aGUgZ2xvYmFscy4gVGhpcyBpcyBp
bXBvcnRhbnQgaW4gYSBub24tcmVlbnRyYW50IHNjYW5uZXIgc28gdGhlIG5leHQgdGltZQorICAg
ICAqIHl5bGV4KCkgaXMgY2FsbGVkLCBpbml0aWFsaXphdGlvbiB3aWxsIG9jY3VyLiAqLworICAg
IHl5X2luaXRfZ2xvYmFscyggeXlzY2FubmVyKTsKKworICAgIC8qIERlc3Ryb3kgdGhlIG1haW4g
c3RydWN0IChyZWVudHJhbnQgb25seSkuICovCisgICAgeXlmcmVlICggeXlzY2FubmVyICwgeXlz
Y2FubmVyICk7CisgICAgeXlzY2FubmVyID0gTlVMTDsKKyAgICByZXR1cm4gMDsKK30KKworLyoK
KyAqIEludGVybmFsIHV0aWxpdHkgcm91dGluZXMuCisgKi8KKworI2lmbmRlZiB5eXRleHRfcHRy
CitzdGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5jcHkgKGNoYXIqIHMxLCB5eWNvbnN0IGNoYXIgKiBz
MiwgaW50IG4gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJcmVnaXN0ZXIgaW50IGk7CisJZm9y
ICggaSA9IDA7IGkgPCBuOyArK2kgKQorCQlzMVtpXSA9IHMyW2ldOworfQorI2VuZGlmCisKKyNp
ZmRlZiBZWV9ORUVEX1NUUkxFTgorc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBj
aGFyICogcyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZWdpc3RlciBpbnQgbjsKKwlmb3Ig
KCBuID0gMDsgc1tuXTsgKytuICkKKwkJOworCisJcmV0dXJuIG47Cit9CisjZW5kaWYKKwordm9p
ZCAqeXlhbGxvYyAoeXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJl
dHVybiAodm9pZCAqKSBtYWxsb2MoIHNpemUgKTsKK30KKwordm9pZCAqeXlyZWFsbG9jICAodm9p
ZCAqIHB0ciwgeXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCS8qIFRo
ZSBjYXN0IHRvIChjaGFyICopIGluIHRoZSBmb2xsb3dpbmcgYWNjb21tb2RhdGVzIGJvdGgKKwkg
KiBpbXBsZW1lbnRhdGlvbnMgdGhhdCB1c2UgY2hhciogZ2VuZXJpYyBwb2ludGVycywgYW5kIHRo
b3NlCisJICogdGhhdCB1c2Ugdm9pZCogZ2VuZXJpYyBwb2ludGVycy4gIEl0IHdvcmtzIHdpdGgg
dGhlIGxhdHRlcgorCSAqIGJlY2F1c2UgYm90aCBBTlNJIEMgYW5kIEMrKyBhbGxvdyBjYXN0bGVz
cyBhc3NpZ25tZW50IGZyb20KKwkgKiBhbnkgcG9pbnRlciB0eXBlIHRvIHZvaWQqLCBhbmQgZGVh
bCB3aXRoIGFyZ3VtZW50IGNvbnZlcnNpb25zCisJICogYXMgdGhvdWdoIGRvaW5nIGFuIGFzc2ln
bm1lbnQuCisJICovCisJcmV0dXJuICh2b2lkICopIHJlYWxsb2MoIChjaGFyICopIHB0ciwgc2l6
ZSApOworfQorCit2b2lkIHl5ZnJlZSAodm9pZCAqIHB0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikK
K3sKKwlmcmVlKCAoY2hhciAqKSBwdHIgKTsJLyogc2VlIHl5cmVhbGxvYygpIGZvciAoY2hhciAq
KSBjYXN0ICovCit9CisKKyNkZWZpbmUgWVlUQUJMRVNfTkFNRSAieXl0YWJsZXMiCisKKyNpZiBk
ZWZpbmVkKF9fY2xhbmdfXykKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKKyNlbmRpZgor
Cit5eV9zaXplX3Qgc3RyaW5nX2lucHV0KGNoYXIqIGJ1ZiwgeXlfc2l6ZV90IG1heF9zaXplLCB5
eXNjYW5fdCB5eXNjYW5uZXIpIHsKKyAgICBwcDo6VG9rZW4gdG9rZW47CisgICAgeXlnZXRfZXh0
cmEoeXlzY2FubmVyKS0+cHJlcHJvY2Vzc29yLmxleCgmdG9rZW4pOworICAgIHl5X3NpemVfdCBs
ZW4gPSB0b2tlbi50eXBlID09IHBwOjpUb2tlbjo6TEFTVCA/IDAgOiB0b2tlbi50ZXh0LnNpemUo
KTsKKyAgICBpZiAobGVuIDwgbWF4X3NpemUpCisgICAgICAgIG1lbWNweShidWYsIHRva2VuLnRl
eHQuY19zdHIoKSwgbGVuKTsKKyAgICB5eXNldF9jb2x1bW4odG9rZW4ubG9jYXRpb24uZmlsZSx5
eXNjYW5uZXIpOworICAgIHl5c2V0X2xpbmVubyh0b2tlbi5sb2NhdGlvbi5saW5lLHl5c2Nhbm5l
cik7CisKKyAgICBpZiAobGVuID49IG1heF9zaXplKQorICAgICAgICBZWV9GQVRBTF9FUlJPUigi
SW5wdXQgYnVmZmVyIG92ZXJmbG93Iik7CisgICAgZWxzZSBpZiAobGVuID4gMCkKKyAgICAgICAg
YnVmW2xlbisrXSA9ICcgJzsKKyAgICByZXR1cm4gbGVuOworfQorCitpbnQgY2hlY2tfdHlwZSh5
eXNjYW5fdCB5eXNjYW5uZXIpIHsKKyAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKSB5eXNjYW5uZXI7CisgICAgCisgICAgaW50IHRva2VuID0gSURFTlRJRklFUjsK
KyAgICBUU3ltYm9sKiBzeW1ib2wgPSB5eWV4dHJhLT5zeW1ib2xUYWJsZS5maW5kKHl5dGV4dCk7
CisgICAgaWYgKHN5bWJvbCAmJiBzeW1ib2wtPmlzVmFyaWFibGUoKSkgeworICAgICAgICBUVmFy
aWFibGUqIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4oc3ltYm9sKTsKKyAgICAg
ICAgaWYgKHZhcmlhYmxlLT5pc1VzZXJUeXBlKCkpCisgICAgICAgICAgICB0b2tlbiA9IFRZUEVf
TkFNRTsKKyAgICB9CisgICAgeXlsdmFsLT5sZXguc3ltYm9sID0gc3ltYm9sOworICAgIHJldHVy
biB0b2tlbjsKK30KKworaW50IHJlc2VydmVkX3dvcmQoeXlzY2FuX3QgeXlzY2FubmVyKSB7Cisg
ICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgeXlzY2FubmVyOwor
CisgICAgeXlleHRyYS0+ZXJyb3IoKnl5bGxvYywgIklsbGVnYWwgdXNlIG9mIHJlc2VydmVkIHdv
cmQiLCB5eXRleHQsICIiKTsKKyAgICB5eWV4dHJhLT5yZWNvdmVyKCk7CisgICAgcmV0dXJuIDA7
Cit9CisKK3ZvaWQgeXllcnJvcihZWUxUWVBFKiBsbG9jLCBUUGFyc2VDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBjaGFyKiByZWFzb24pIHsKKyAgICBjb250ZXh0LT5lcnJvcigqbGxvYywgcmVhc29u
LCB5eWdldF90ZXh0KGNvbnRleHQtPnNjYW5uZXIpKTsKKyAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Cit9CisKK2ludCBpbnRfY29uc3RhbnQoeXlzY2FuX3QgeXlzY2FubmVyKSB7CisgICAgc3RydWN0
IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgeXlzY2FubmVyOworCisgICAgaWYg
KCFhdG9pX2NsYW1wKHl5dGV4dCwgJih5eWx2YWwtPmxleC5pKSkpCisgICAgICAgIHl5ZXh0cmEt
Pndhcm5pbmcoKnl5bGxvYywgIkludGVnZXIgb3ZlcmZsb3ciLCB5eXRleHQsICIiKTsKKyAgICBy
ZXR1cm4gSU5UQ09OU1RBTlQ7Cit9CisKK2ludCBmbG9hdF9jb25zdGFudCh5eXNjYW5fdCB5eXNj
YW5uZXIpIHsKKyAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSB5
eXNjYW5uZXI7CisKKyAgICBpZiAoIWF0b2ZfY2xhbXAoeXl0ZXh0LCAmKHl5bHZhbC0+bGV4LmYp
KSkKKyAgICAgICAgeXlleHRyYS0+d2FybmluZygqeXlsbG9jLCAiRmxvYXQgb3ZlcmZsb3ciLCB5
eXRleHQsICIiKTsKKyAgICByZXR1cm4gRkxPQVRDT05TVEFOVDsKK30KKworaW50IGdsc2xhbmdf
aW5pdGlhbGl6ZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7CisgICAgeXlzY2FuX3Qgc2Nhbm5l
ciA9IE5VTEw7CisgICAgaWYgKHl5bGV4X2luaXRfZXh0cmEoY29udGV4dCwmc2Nhbm5lcikpCisg
ICAgICAgIHJldHVybiAxOworCisgICAgY29udGV4dC0+c2Nhbm5lciA9IHNjYW5uZXI7CisgICAg
cmV0dXJuIDA7Cit9CisKK2ludCBnbHNsYW5nX2ZpbmFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRl
eHQpIHsKKyAgICB5eXNjYW5fdCBzY2FubmVyID0gY29udGV4dC0+c2Nhbm5lcjsKKyAgICBpZiAo
c2Nhbm5lciA9PSBOVUxMKSByZXR1cm4gMDsKKyAgICAKKyAgICBjb250ZXh0LT5zY2FubmVyID0g
TlVMTDsKKyAgICB5eWxleF9kZXN0cm95KHNjYW5uZXIpOworCisgICAgcmV0dXJuIDA7Cit9CisK
K2ludCBnbHNsYW5nX3NjYW4oc2l6ZV90IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdb
XSwgY29uc3QgaW50IGxlbmd0aFtdLAorICAgICAgICAgICAgICAgICBUUGFyc2VDb250ZXh0KiBj
b250ZXh0KSB7CisgICAgeXlyZXN0YXJ0KE5VTEwsY29udGV4dC0+c2Nhbm5lcik7CisgICAgeXlz
ZXRfY29sdW1uKDAsY29udGV4dC0+c2Nhbm5lcik7CisgICAgeXlzZXRfbGluZW5vKDEsY29udGV4
dC0+c2Nhbm5lcik7CisKKyAgICAvLyBJbml0aWFsaXplIHByZXByb2Nlc3Nvci4KKyAgICBpZiAo
IWNvbnRleHQtPnByZXByb2Nlc3Nvci5pbml0KGNvdW50LCBzdHJpbmcsIGxlbmd0aCkpCisgICAg
ICAgIHJldHVybiAxOworICAgIGNvbnRleHQtPnByZXByb2Nlc3Nvci5zZXRNYXhUb2tlbkxlbmd0
aChTSF9NQVhfVE9LRU5fTEVOR1RIKTsKKworICAgIC8vIERlZmluZSBleHRlbnNpb24gbWFjcm9z
LgorICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0QmVoYXZpb3IgPSBjb250ZXh0LT5l
eHRlbnNpb25CZWhhdmlvcigpOworICAgIGZvciAoVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9p
dGVyYXRvciBpdGVyID0gZXh0QmVoYXZpb3IuYmVnaW4oKTsKKyAgICAgICAgIGl0ZXIgIT0gZXh0
QmVoYXZpb3IuZW5kKCk7ICsraXRlcikgeworICAgICAgICBjb250ZXh0LT5wcmVwcm9jZXNzb3Iu
cHJlZGVmaW5lTWFjcm8oaXRlci0+Zmlyc3QuY19zdHIoKSwgMSk7CisgICAgfQorICAgIGlmIChj
b250ZXh0LT5mcmFnbWVudFByZWNpc2lvbkhpZ2gpCisgICAgICAgIGNvbnRleHQtPnByZXByb2Nl
c3Nvci5wcmVkZWZpbmVNYWNybygiR0xfRlJBR01FTlRfUFJFQ0lTSU9OX0hJR0giLCAxKTsKKwor
ICAgIHJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMGZhZjYyYTQ1YjBhZjI5NWUzZGQxZmExMjBjZmU1NmYyOWE2OTdhZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2ds
c2xhbmdfdGFiLmNwcApAQCAtMCwwICsxLDQ4ODQgQEAKKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRl
IGJ5IEdOVSBCaXNvbiAyLjcuMS4gICovCisKKy8qIEFwcGxlIE5vdGU6IEZvciB0aGUgYXZvaWRh
bmNlIG9mIGRvdWJ0LCBBcHBsZSBlbGVjdHMgdG8gZGlzdHJpYnV0ZSB0aGlzIGZpbGUgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBCU0QgbGljZW5zZS4gKi8KKworLyogQmlzb24gaW1wbGVtZW50YXRp
b24gZm9yIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKKyAgIAorICAgICAgQ29weXJpZ2h0IChDKSAx
OTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K
KyAgIAorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIAorICAgVGhpcyBwcm9ncmFtIGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90
LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogQXMgYSBzcGVj
aWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNvbnRhaW5z
CisgICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmli
dXRlIHRoYXQgd29yaworICAgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHNvIGxvbmcgYXMg
dGhhdCB3b3JrIGlzbid0IGl0c2VsZiBhCisgICBwYXJzZXIgZ2VuZXJhdG9yIHVzaW5nIHRoZSBz
a2VsZXRvbiBvciBhIG1vZGlmaWVkIHZlcnNpb24gdGhlcmVvZgorICAgYXMgYSBwYXJzZXIgc2tl
bGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZQorICAg
dGhlIHBhcnNlciBza2VsZXRvbiBpdHNlbGYsIHlvdSBtYXkgKGF0IHlvdXIgb3B0aW9uKSByZW1v
dmUgdGhpcworICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxl
dG9uIGFuZCB0aGUgcmVzdWx0aW5nCisgICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5z
ZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSB3aXRob3V0IHRoaXMg
c3BlY2lhbCBleGNlcHRpb24uCisgICAKKyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFk
ZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KKyAgIHZlcnNpb24gMi4yIG9m
IEJpc29uLiAgKi8KKworLyogQyBMQUxSKDEpIHBhcnNlciBza2VsZXRvbiB3cml0dGVuIGJ5IFJp
Y2hhcmQgU3RhbGxtYW4sIGJ5CisgICBzaW1wbGlmeWluZyB0aGUgb3JpZ2luYWwgc28tY2FsbGVk
ICJzZW1hbnRpYyIgcGFyc2VyLiAgKi8KKworLyogQWxsIHN5bWJvbHMgZGVmaW5lZCBiZWxvdyBz
aG91bGQgYmVnaW4gd2l0aCB5eSBvciBZWSwgdG8gYXZvaWQKKyAgIGluZnJpbmdpbmcgb24gdXNl
ciBuYW1lIHNwYWNlLiAgVGhpcyBzaG91bGQgYmUgZG9uZSBldmVuIGZvciBsb2NhbAorICAgdmFy
aWFibGVzLCBhcyB0aGV5IG1pZ2h0IG90aGVyd2lzZSBiZSBleHBhbmRlZCBieSB1c2VyIG1hY3Jv
cy4KKyAgIFRoZXJlIGFyZSBzb21lIHVuYXZvaWRhYmxlIGV4Y2VwdGlvbnMgd2l0aGluIGluY2x1
ZGUgZmlsZXMgdG8KKyAgIGRlZmluZSBuZWNlc3NhcnkgbGlicmFyeSBzeW1ib2xzOyB0aGV5IGFy
ZSBub3RlZCAiSU5GUklOR0VTIE9OCisgICBVU0VSIE5BTUUgU1BBQ0UiIGJlbG93LiAgKi8KKwor
LyogSWRlbnRpZnkgQmlzb24gb3V0cHV0LiAgKi8KKyNkZWZpbmUgWVlCSVNPTiAxCisKKy8qIEJp
c29uIHZlcnNpb24uICAqLworI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjIuNy4xIgorCisvKiBT
a2VsZXRvbiBuYW1lLiAgKi8KKyNkZWZpbmUgWVlTS0VMRVRPTl9OQU1FICJ5YWNjLmMiCisKKy8q
IFB1cmUgcGFyc2Vycy4gICovCisjZGVmaW5lIFlZUFVSRSAxCisKKy8qIFB1c2ggcGFyc2Vycy4g
ICovCisjZGVmaW5lIFlZUFVTSCAwCisKKy8qIFB1bGwgcGFyc2Vycy4gICovCisjZGVmaW5lIFlZ
UFVMTCAxCisKKworCisKKy8qIENvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlv
bnMuICAqLworCisKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFRoaXMgZmlsZSBpcyBhdXRvLWdl
bmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQorCisvLyBJZ25vcmUg
ZXJyb3JzIGluIGF1dG8tZ2VuZXJhdGVkIGNvZGUuCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKyNw
cmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtZnVuY3Rpb24iCisjcHJhZ21h
IEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLXZhcmlhYmxlIgorI3ByYWdtYSBHQ0Mg
ZGlhZ25vc3RpYyBpZ25vcmVkICItV3N3aXRjaC1lbnVtIgorI2VsaWYgZGVmaW5lZChfTVNDX1ZF
UikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MDY1KQorI3ByYWdtYSB3YXJuaW5nKGRpc2Fi
bGU6IDQxODkpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUwNSkKKyNwcmFnbWEgd2Fybmlu
ZyhkaXNhYmxlOiA0NzAxKQorI2VuZGlmCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1N5bWJvbFRhYmxlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRl
eHQuaCIKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2RlZmluZSBZWUVOQUJM
RV9OTFMgMAorCisjZGVmaW5lIFlZTEVYX1BBUkFNIGNvbnRleHQtPnNjYW5uZXIKKworCisKKyMg
aWZuZGVmIFlZX05VTEwKKyMgIGlmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgMjAxMTAzTCA8PSBf
X2NwbHVzcGx1cworIyAgIGRlZmluZSBZWV9OVUxMIG51bGxwdHIKKyMgIGVsc2UKKyMgICBkZWZp
bmUgWVlfTlVMTCAwCisjICBlbmRpZgorIyBlbmRpZgorCisvKiBFbmFibGluZyB2ZXJib3NlIGVy
cm9yIG1lc3NhZ2VzLiAgKi8KKyNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyMgdW5kZWYgWVlFUlJP
Ul9WRVJCT1NFCisjIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQorI2Vsc2UKKyMgZGVmaW5lIFlZ
RVJST1JfVkVSQk9TRSAwCisjZW5kaWYKKworLyogSW4gYSBmdXR1cmUgcmVsZWFzZSBvZiBCaXNv
biwgdGhpcyBzZWN0aW9uIHdpbGwgYmUgcmVwbGFjZWQKKyAgIGJ5ICNpbmNsdWRlICJnbHNsYW5n
X3RhYi5oIi4gICovCisjaWZuZGVmIFlZX1lZX0dMU0xBTkdfVEFCX0hfSU5DTFVERUQKKyMgZGVm
aW5lIFlZX1lZX0dMU0xBTkdfVEFCX0hfSU5DTFVERUQKKy8qIEVuYWJsaW5nIHRyYWNlcy4gICov
CisjaWZuZGVmIFlZREVCVUcKKyMgZGVmaW5lIFlZREVCVUcgMAorI2VuZGlmCisjaWYgWVlERUJV
RworZXh0ZXJuIGludCB5eWRlYnVnOworI2VuZGlmCisvKiAiJWNvZGUgcmVxdWlyZXMiIGJsb2Nr
cy4gICovCisKKworI2RlZmluZSBZWUxUWVBFIFRTb3VyY2VMb2MKKyNkZWZpbmUgWVlMVFlQRV9J
U19ERUNMQVJFRCAxCisjZGVmaW5lIFNIX01BWF9UT0tFTl9MRU5HVEggMjU2ICAvLyBXZWJHTCBz
cGVjLgorCisKKworCisvKiBUb2tlbnMuICAqLworI2lmbmRlZiBZWVRPS0VOVFlQRQorIyBkZWZp
bmUgWVlUT0tFTlRZUEUKKyAgIC8qIFB1dCB0aGUgdG9rZW5zIGludG8gdGhlIHN5bWJvbCB0YWJs
ZSwgc28gdGhhdCBHREIgYW5kIG90aGVyIGRlYnVnZ2VycworICAgICAga25vdyBhYm91dCB0aGVt
LiAgKi8KKyAgIGVudW0geXl0b2tlbnR5cGUgeworICAgICBJTlZBUklBTlQgPSAyNTgsCisgICAg
IEhJR0hfUFJFQ0lTSU9OID0gMjU5LAorICAgICBNRURJVU1fUFJFQ0lTSU9OID0gMjYwLAorICAg
ICBMT1dfUFJFQ0lTSU9OID0gMjYxLAorICAgICBQUkVDSVNJT04gPSAyNjIsCisgICAgIEFUVFJJ
QlVURSA9IDI2MywKKyAgICAgQ09OU1RfUVVBTCA9IDI2NCwKKyAgICAgQk9PTF9UWVBFID0gMjY1
LAorICAgICBGTE9BVF9UWVBFID0gMjY2LAorICAgICBJTlRfVFlQRSA9IDI2NywKKyAgICAgQlJF
QUsgPSAyNjgsCisgICAgIENPTlRJTlVFID0gMjY5LAorICAgICBETyA9IDI3MCwKKyAgICAgRUxT
RSA9IDI3MSwKKyAgICAgRk9SID0gMjcyLAorICAgICBJRiA9IDI3MywKKyAgICAgRElTQ0FSRCA9
IDI3NCwKKyAgICAgUkVUVVJOID0gMjc1LAorICAgICBCVkVDMiA9IDI3NiwKKyAgICAgQlZFQzMg
PSAyNzcsCisgICAgIEJWRUM0ID0gMjc4LAorICAgICBJVkVDMiA9IDI3OSwKKyAgICAgSVZFQzMg
PSAyODAsCisgICAgIElWRUM0ID0gMjgxLAorICAgICBWRUMyID0gMjgyLAorICAgICBWRUMzID0g
MjgzLAorICAgICBWRUM0ID0gMjg0LAorICAgICBNQVRSSVgyID0gMjg1LAorICAgICBNQVRSSVgz
ID0gMjg2LAorICAgICBNQVRSSVg0ID0gMjg3LAorICAgICBJTl9RVUFMID0gMjg4LAorICAgICBP
VVRfUVVBTCA9IDI4OSwKKyAgICAgSU5PVVRfUVVBTCA9IDI5MCwKKyAgICAgVU5JRk9STSA9IDI5
MSwKKyAgICAgVkFSWUlORyA9IDI5MiwKKyAgICAgU1RSVUNUID0gMjkzLAorICAgICBWT0lEX1RZ
UEUgPSAyOTQsCisgICAgIFdISUxFID0gMjk1LAorICAgICBTQU1QTEVSMkQgPSAyOTYsCisgICAg
IFNBTVBMRVJDVUJFID0gMjk3LAorICAgICBTQU1QTEVSX0VYVEVSTkFMX09FUyA9IDI5OCwKKyAg
ICAgU0FNUExFUjJEUkVDVCA9IDI5OSwKKyAgICAgSURFTlRJRklFUiA9IDMwMCwKKyAgICAgVFlQ
RV9OQU1FID0gMzAxLAorICAgICBGTE9BVENPTlNUQU5UID0gMzAyLAorICAgICBJTlRDT05TVEFO
VCA9IDMwMywKKyAgICAgQk9PTENPTlNUQU5UID0gMzA0LAorICAgICBMRUZUX09QID0gMzA1LAor
ICAgICBSSUdIVF9PUCA9IDMwNiwKKyAgICAgSU5DX09QID0gMzA3LAorICAgICBERUNfT1AgPSAz
MDgsCisgICAgIExFX09QID0gMzA5LAorICAgICBHRV9PUCA9IDMxMCwKKyAgICAgRVFfT1AgPSAz
MTEsCisgICAgIE5FX09QID0gMzEyLAorICAgICBBTkRfT1AgPSAzMTMsCisgICAgIE9SX09QID0g
MzE0LAorICAgICBYT1JfT1AgPSAzMTUsCisgICAgIE1VTF9BU1NJR04gPSAzMTYsCisgICAgIERJ
Vl9BU1NJR04gPSAzMTcsCisgICAgIEFERF9BU1NJR04gPSAzMTgsCisgICAgIE1PRF9BU1NJR04g
PSAzMTksCisgICAgIExFRlRfQVNTSUdOID0gMzIwLAorICAgICBSSUdIVF9BU1NJR04gPSAzMjEs
CisgICAgIEFORF9BU1NJR04gPSAzMjIsCisgICAgIFhPUl9BU1NJR04gPSAzMjMsCisgICAgIE9S
X0FTU0lHTiA9IDMyNCwKKyAgICAgU1VCX0FTU0lHTiA9IDMyNSwKKyAgICAgTEVGVF9QQVJFTiA9
IDMyNiwKKyAgICAgUklHSFRfUEFSRU4gPSAzMjcsCisgICAgIExFRlRfQlJBQ0tFVCA9IDMyOCwK
KyAgICAgUklHSFRfQlJBQ0tFVCA9IDMyOSwKKyAgICAgTEVGVF9CUkFDRSA9IDMzMCwKKyAgICAg
UklHSFRfQlJBQ0UgPSAzMzEsCisgICAgIERPVCA9IDMzMiwKKyAgICAgQ09NTUEgPSAzMzMsCisg
ICAgIENPTE9OID0gMzM0LAorICAgICBFUVVBTCA9IDMzNSwKKyAgICAgU0VNSUNPTE9OID0gMzM2
LAorICAgICBCQU5HID0gMzM3LAorICAgICBEQVNIID0gMzM4LAorICAgICBUSUxERSA9IDMzOSwK
KyAgICAgUExVUyA9IDM0MCwKKyAgICAgU1RBUiA9IDM0MSwKKyAgICAgU0xBU0ggPSAzNDIsCisg
ICAgIFBFUkNFTlQgPSAzNDMsCisgICAgIExFRlRfQU5HTEUgPSAzNDQsCisgICAgIFJJR0hUX0FO
R0xFID0gMzQ1LAorICAgICBWRVJUSUNBTF9CQVIgPSAzNDYsCisgICAgIENBUkVUID0gMzQ3LAor
ICAgICBBTVBFUlNBTkQgPSAzNDgsCisgICAgIFFVRVNUSU9OID0gMzQ5CisgICB9OworI2VuZGlm
CisKKworI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xB
UkVECit0eXBlZGVmIHVuaW9uIFlZU1RZUEUKK3sKKworCisgICAgc3RydWN0IHsKKyAgICAgICAg
dW5pb24geworICAgICAgICAgICAgVFN0cmluZyAqc3RyaW5nOworICAgICAgICAgICAgZmxvYXQg
ZjsKKyAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgYm9vbCBiOworICAgICAgICB9Owor
ICAgICAgICBUU3ltYm9sKiBzeW1ib2w7CisgICAgfSBsZXg7CisgICAgc3RydWN0IHsKKyAgICAg
ICAgVE9wZXJhdG9yIG9wOworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBUSW50ZXJtTm9k
ZSogaW50ZXJtTm9kZTsKKyAgICAgICAgICAgIFRJbnRlcm1Ob2RlUGFpciBub2RlUGFpcjsKKyAg
ICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW50ZXJtVHlwZWROb2RlOworICAgICAgICAgICAgVElu
dGVybUFnZ3JlZ2F0ZSogaW50ZXJtQWdncmVnYXRlOworICAgICAgICB9OworICAgICAgICB1bmlv
biB7CisgICAgICAgICAgICBUUHVibGljVHlwZSB0eXBlOworICAgICAgICAgICAgVFByZWNpc2lv
biBwcmVjaXNpb247CisgICAgICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllcjsKKyAgICAgICAg
ICAgIFRGdW5jdGlvbiogZnVuY3Rpb247CisgICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtOwor
ICAgICAgICAgICAgVEZpZWxkKiBmaWVsZDsKKyAgICAgICAgICAgIFRGaWVsZExpc3QqIGZpZWxk
TGlzdDsKKyAgICAgICAgfTsKKyAgICB9IGludGVybTsKKworCisKK30gWVlTVFlQRTsKKyMgZGVm
aW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCisjIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jz
b2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCisjIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xB
UkVEIDEKKyNlbmRpZgorCisjaWYgISBkZWZpbmVkIFlZTFRZUEUgJiYgISBkZWZpbmVkIFlZTFRZ
UEVfSVNfREVDTEFSRUQKK3R5cGVkZWYgc3RydWN0IFlZTFRZUEUKK3sKKyAgaW50IGZpcnN0X2xp
bmU7CisgIGludCBmaXJzdF9jb2x1bW47CisgIGludCBsYXN0X2xpbmU7CisgIGludCBsYXN0X2Nv
bHVtbjsKK30gWVlMVFlQRTsKKyMgZGVmaW5lIHl5bHR5cGUgWVlMVFlQRSAvKiBvYnNvbGVzY2Vu
dDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KKyMgZGVmaW5lIFlZTFRZUEVfSVNfREVDTEFSRUQgMQor
IyBkZWZpbmUgWVlMVFlQRV9JU19UUklWSUFMIDEKKyNlbmRpZgorCisKKyNpZmRlZiBZWVBBUlNF
X1BBUkFNCisjaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCitpbnQg
eXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSk7CisjZWxzZQoraW50IHl5cGFyc2UgKCk7Cisj
ZW5kaWYKKyNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLworI2lmIGRlZmluZWQgX19TVERDX18g
fHwgZGVmaW5lZCBfX2NwbHVzcGx1cworaW50IHl5cGFyc2UgKFRQYXJzZUNvbnRleHQqIGNvbnRl
eHQpOworI2Vsc2UKK2ludCB5eXBhcnNlICgpOworI2VuZGlmCisjZW5kaWYgLyogISBZWVBBUlNF
X1BBUkFNICovCisKKyNlbmRpZiAvKiAhWVlfWVlfR0xTTEFOR19UQUJfSF9JTkNMVURFRCAgKi8K
KworLyogQ29weSB0aGUgc2Vjb25kIHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLworCisK
K2V4dGVybiBpbnQgeXlsZXgoWVlTVFlQRSogeXlsdmFsLCBZWUxUWVBFKiB5eWxsb2MsIHZvaWQq
IHl5c2Nhbm5lcik7CitleHRlcm4gdm9pZCB5eWVycm9yKFlZTFRZUEUqIHl5bGxvYywgVFBhcnNl
Q29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKTsKKworI2RlZmluZSBZWUxMT0Nf
REVGQVVMVChDdXJyZW50LCBSaHMsIE4pICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8geyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICBpZiAoWVlJRChOKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICAoQ3VycmVudCkuZmlyc3RfZmlsZSA9IFlZUkhTTE9DKFJocywgMSkuZmly
c3RfZmlsZTsgIFwKKyAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgPSBZWVJIU0xPQyhSaHMs
IDEpLmZpcnN0X2xpbmU7ICBcCisgICAgICAgIChDdXJyZW50KS5sYXN0X2ZpbGUgPSBZWVJIU0xP
QyhSaHMsIE4pLmxhc3RfZmlsZTsgICAgXAorICAgICAgICAoQ3VycmVudCkubGFzdF9saW5lID0g
WVlSSFNMT0MoUmhzLCBOKS5sYXN0X2xpbmU7ICAgIFwKKyAgICAgIH0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBlbHNlIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAo
Q3VycmVudCkuZmlyc3RfZmlsZSA9IFlZUkhTTE9DKFJocywgMCkubGFzdF9maWxlOyAgIFwKKyAg
ICAgICAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgPSBZWVJIU0xPQyhSaHMsIDApLmxhc3RfbGluZTsg
ICBcCisgICAgICAgIChDdXJyZW50KS5sYXN0X2ZpbGUgPSBZWVJIU0xPQyhSaHMsIDApLmxhc3Rf
ZmlsZTsgICAgXAorICAgICAgICAoQ3VycmVudCkubGFzdF9saW5lID0gWVlSSFNMT0MoUmhzLCAw
KS5sYXN0X2xpbmU7ICAgIFwKKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgVkVSVEVY
X09OTFkoUywgTCkgeyAgXAorICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNIX1ZFUlRF
WF9TSEFERVIpIHsgIFwKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4g
dmVydGV4IHNoYWRlcnMgb25seSAiLCBTKTsgIFwKKyAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OyAgXAorICAgIH0gIFwKK30KKworI2RlZmluZSBGUkFHX09OTFkoUywgTCkgeyAgXAorICAgIGlm
IChjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNIX0ZSQUdNRU5UX1NIQURFUikgeyAgXAorICAgICAg
ICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXJzIG9ubHkg
IiwgUyk7ICBcCisgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwKKyAgICB9ICBcCit9CisK
KworCisjaWZkZWYgc2hvcnQKKyMgdW5kZWYgc2hvcnQKKyNlbmRpZgorCisjaWZkZWYgWVlUWVBF
X1VJTlQ4Cit0eXBlZGVmIFlZVFlQRV9VSU5UOCB5eXR5cGVfdWludDg7CisjZWxzZQordHlwZWRl
ZiB1bnNpZ25lZCBjaGFyIHl5dHlwZV91aW50ODsKKyNlbmRpZgorCisjaWZkZWYgWVlUWVBFX0lO
VDgKK3R5cGVkZWYgWVlUWVBFX0lOVDggeXl0eXBlX2ludDg7CisjZWxpZiAoZGVmaW5lZCBfX1NU
RENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNw
bHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCit0eXBlZGVmIHNpZ25lZCBjaGFyIHl5dHlwZV9pbnQ4
OworI2Vsc2UKK3R5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQ4OworI2VuZGlmCisKKyNpZmRl
ZiBZWVRZUEVfVUlOVDE2Cit0eXBlZGVmIFlZVFlQRV9VSU5UMTYgeXl0eXBlX3VpbnQxNjsKKyNl
bHNlCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB5eXR5cGVfdWludDE2OworI2VuZGlmCisK
KyNpZmRlZiBZWVRZUEVfSU5UMTYKK3R5cGVkZWYgWVlUWVBFX0lOVDE2IHl5dHlwZV9pbnQxNjsK
KyNlbHNlCit0eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50MTY7CisjZW5kaWYKKworI2lmbmRl
ZiBZWVNJWkVfVAorIyBpZmRlZiBfX1NJWkVfVFlQRV9fCisjICBkZWZpbmUgWVlTSVpFX1QgX19T
SVpFX1RZUEVfXworIyBlbGlmIGRlZmluZWQgc2l6ZV90CisjICBkZWZpbmUgWVlTSVpFX1Qgc2l6
ZV90CisjIGVsaWYgISBkZWZpbmVkIFlZU0laRV9UICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRl
ZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVm
aW5lZCBfTVNDX1ZFUikKKyMgIGluY2x1ZGUgPHN0ZGRlZi5oPiAvKiBJTkZSSU5HRVMgT04gVVNF
UiBOQU1FIFNQQUNFICovCisjICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90CisjIGVsc2UKKyMgIGRl
ZmluZSBZWVNJWkVfVCB1bnNpZ25lZCBpbnQKKyMgZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIFlZ
U0laRV9NQVhJTVVNICgoWVlTSVpFX1QpIC0xKQorCisjaWZuZGVmIFlZXworIyBpZiBkZWZpbmVk
IFlZRU5BQkxFX05MUyAmJiBZWUVOQUJMRV9OTFMKKyMgIGlmIEVOQUJMRV9OTFMKKyMgICBpbmNs
dWRlIDxsaWJpbnRsLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBk
ZWZpbmUgWVlfKE1zZ2lkKSBkZ2V0dGV4dCAoImJpc29uLXJ1bnRpbWUiLCBNc2dpZCkKKyMgIGVu
ZGlmCisjIGVuZGlmCisjIGlmbmRlZiBZWV8KKyMgIGRlZmluZSBZWV8oTXNnaWQpIE1zZ2lkCisj
IGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBfX2F0dHJpYnV0ZV9fCisvKiBUaGlzIGZlYXR1cmUg
aXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyAyLjUgYW5kIGxhdGVyLiAgKi8KKyMgaWYgKCEg
ZGVmaW5lZCBfX0dOVUNfXyB8fCBfX0dOVUNfXyA8IDIgXAorICAgICAgfHwgKF9fR05VQ19fID09
IDIgJiYgX19HTlVDX01JTk9SX18gPCA1KSkKKyMgIGRlZmluZSBfX2F0dHJpYnV0ZV9fKFNwZWMp
IC8qIGVtcHR5ICovCisjIGVuZGlmCisjZW5kaWYKKworLyogU3VwcHJlc3MgdW51c2VkLXZhcmlh
YmxlIHdhcm5pbmdzIGJ5ICJ1c2luZyIgRS4gICovCisjaWYgISBkZWZpbmVkIGxpbnQgfHwgZGVm
aW5lZCBfX0dOVUNfXworIyBkZWZpbmUgWVlVU0UoRSkgKCh2b2lkKSAoRSkpCisjZWxzZQorIyBk
ZWZpbmUgWVlVU0UoRSkgLyogZW1wdHkgKi8KKyNlbmRpZgorCisKKy8qIElkZW50aXR5IGZ1bmN0
aW9uLCB1c2VkIHRvIHN1cHByZXNzIHdhcm5pbmdzIGFib3V0IGNvbnN0YW50IGNvbmRpdGlvbnMu
ICAqLworI2lmbmRlZiBsaW50CisjIGRlZmluZSBZWUlEKE4pIChOKQorI2Vsc2UKKyNpZiAoZGVm
aW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVk
IF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgaW50CitZWUlEIChpbnQg
eXlpKQorI2Vsc2UKK3N0YXRpYyBpbnQKK1lZSUQgKHl5aSkKKyAgICBpbnQgeXlpOworI2VuZGlm
Cit7CisgIHJldHVybiB5eWk7Cit9CisjZW5kaWYKKworI2lmICEgZGVmaW5lZCB5eW92ZXJmbG93
IHx8IFlZRVJST1JfVkVSQk9TRQorCisvKiBUaGUgcGFyc2VyIGludm9rZXMgYWxsb2NhIG9yIG1h
bGxvYzsgZGVmaW5lIHRoZSBuZWNlc3Nhcnkgc3ltYm9scy4gICovCisKKyMgaWZkZWYgWVlTVEFD
S19VU0VfQUxMT0NBCisjICBpZiBZWVNUQUNLX1VTRV9BTExPQ0EKKyMgICBpZmRlZiBfX0dOVUNf
XworIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBfX2J1aWx0aW5fYWxsb2NhCisjICAgZWxpZiBk
ZWZpbmVkIF9fQlVJTFRJTl9WQV9BUkdfSU5DUgorIyAgICBpbmNsdWRlIDxhbGxvY2EuaD4gLyog
SU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGVsaWYgZGVmaW5lZCBfQUlYCisj
ICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYWxsb2NhCisjICAgZWxpZiBkZWZpbmVkIF9NU0Nf
VkVSCisjICAgIGluY2x1ZGUgPG1hbGxvYy5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQ
QUNFICovCisjICAgIGRlZmluZSBhbGxvY2EgX2FsbG9jYQorIyAgIGVsc2UKKyMgICAgZGVmaW5l
IFlZU1RBQ0tfQUxMT0MgYWxsb2NhCisjICAgIGlmICEgZGVmaW5lZCBfQUxMT0NBX0ggJiYgISBk
ZWZpbmVkIEVYSVRfU1VDQ0VTUyAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5
X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19W
RVIpCisjICAgICBpbmNsdWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBT
UEFDRSAqLworICAgICAgLyogVXNlIEVYSVRfU1VDQ0VTUyBhcyBhIHdpdG5lc3MgZm9yIHN0ZGxp
Yi5oLiAgKi8KKyMgICAgIGlmbmRlZiBFWElUX1NVQ0NFU1MKKyMgICAgICBkZWZpbmUgRVhJVF9T
VUNDRVNTIDAKKyMgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICAgZW5kaWYKKyMgIGVuZGlmCisj
IGVuZGlmCisKKyMgaWZkZWYgWVlTVEFDS19BTExPQworICAgLyogUGFjaWZ5IEdDQydzIGBlbXB0
eSBpZi1ib2R5JyB3YXJuaW5nLiAgKi8KKyMgIGRlZmluZSBZWVNUQUNLX0ZSRUUoUHRyKSBkbyB7
IC8qIGVtcHR5ICovOyB9IHdoaWxlIChZWUlEICgwKSkKKyMgIGlmbmRlZiBZWVNUQUNLX0FMTE9D
X01BWElNVU0KKyAgICAvKiBUaGUgT1MgbWlnaHQgZ3VhcmFudGVlIG9ubHkgb25lIGd1YXJkIHBh
Z2UgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2ssCisgICAgICAgYW5kIGEgcGFnZSBzaXplIGNh
biBiZSBhcyBzbWFsbCBhcyA0MDk2IGJ5dGVzLiAgU28gd2UgY2Fubm90IHNhZmVseQorICAgICAg
IGludm9rZSBhbGxvY2EgKE4pIGlmIE4gZXhjZWVkcyA0MDk2LiAgVXNlIGEgc2xpZ2h0bHkgc21h
bGxlciBudW1iZXIKKyAgICAgICB0byBhbGxvdyBmb3IgYSBmZXcgY29tcGlsZXItYWxsb2NhdGVk
IHRlbXBvcmFyeSBzdGFjayBzbG90cy4gICovCisjICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFY
SU1VTSA0MDMyIC8qIHJlYXNvbmFibGUgY2lyY2EgMjAwNiAqLworIyAgZW5kaWYKKyMgZWxzZQor
IyAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgWVlNQUxMT0MKKyMgIGRlZmluZSBZWVNUQUNLX0ZSRUUg
WVlGUkVFCisjICBpZm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNCisjICAgZGVmaW5lIFlZU1RB
Q0tfQUxMT0NfTUFYSU1VTSBZWVNJWkVfTUFYSU1VTQorIyAgZW5kaWYKKyMgIGlmIChkZWZpbmVk
IF9fY3BsdXNwbHVzICYmICEgZGVmaW5lZCBFWElUX1NVQ0NFU1MgXAorICAgICAgICYmICEgKChk
ZWZpbmVkIFlZTUFMTE9DIHx8IGRlZmluZWQgbWFsbG9jKSBcCisJICAgICAmJiAoZGVmaW5lZCBZ
WUZSRUUgfHwgZGVmaW5lZCBmcmVlKSkpCisjICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJ
TkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBpZm5kZWYgRVhJVF9TVUNDRVNTCisjICAg
IGRlZmluZSBFWElUX1NVQ0NFU1MgMAorIyAgIGVuZGlmCisjICBlbmRpZgorIyAgaWZuZGVmIFlZ
TUFMTE9DCisjICAgZGVmaW5lIFlZTUFMTE9DIG1hbGxvYworIyAgIGlmICEgZGVmaW5lZCBtYWxs
b2MgJiYgISBkZWZpbmVkIEVYSVRfU1VDQ0VTUyAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZp
bmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmlu
ZWQgX01TQ19WRVIpCit2b2lkICptYWxsb2MgKFlZU0laRV9UKTsgLyogSU5GUklOR0VTIE9OIFVT
RVIgTkFNRSBTUEFDRSAqLworIyAgIGVuZGlmCisjICBlbmRpZgorIyAgaWZuZGVmIFlZRlJFRQor
IyAgIGRlZmluZSBZWUZSRUUgZnJlZQorIyAgIGlmICEgZGVmaW5lZCBmcmVlICYmICEgZGVmaW5l
ZCBFWElUX1NVQ0NFU1MgJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVO
Q19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQor
dm9pZCBmcmVlICh2b2lkICopOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisj
ICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYgLyogISBkZWZpbmVkIHl5b3ZlcmZs
b3cgfHwgWVlFUlJPUl9WRVJCT1NFICovCisKKworI2lmICghIGRlZmluZWQgeXlvdmVyZmxvdyBc
CisgICAgICYmICghIGRlZmluZWQgX19jcGx1c3BsdXMgXAorCSB8fCAoZGVmaW5lZCBZWUxUWVBF
X0lTX1RSSVZJQUwgJiYgWVlMVFlQRV9JU19UUklWSUFMIFwKKwkgICAgICYmIGRlZmluZWQgWVlT
VFlQRV9JU19UUklWSUFMICYmIFlZU1RZUEVfSVNfVFJJVklBTCkpKQorCisvKiBBIHR5cGUgdGhh
dCBpcyBwcm9wZXJseSBhbGlnbmVkIGZvciBhbnkgc3RhY2sgbWVtYmVyLiAgKi8KK3VuaW9uIHl5
YWxsb2MKK3sKKyAgeXl0eXBlX2ludDE2IHl5c3NfYWxsb2M7CisgIFlZU1RZUEUgeXl2c19hbGxv
YzsKKyAgWVlMVFlQRSB5eWxzX2FsbG9jOworfTsKKworLyogVGhlIHNpemUgb2YgdGhlIG1heGlt
dW0gZ2FwIGJldHdlZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRoZSBuZXh0LiAgKi8KKyMgZGVm
aW5lIFlZU1RBQ0tfR0FQX01BWElNVU0gKHNpemVvZiAodW5pb24geXlhbGxvYykgLSAxKQorCisv
KiBUaGUgc2l6ZSBvZiBhbiBhcnJheSBsYXJnZSB0byBlbm91Z2ggdG8gaG9sZCBhbGwgc3RhY2tz
LCBlYWNoIHdpdGgKKyAgIE4gZWxlbWVudHMuICAqLworIyBkZWZpbmUgWVlTVEFDS19CWVRFUyhO
KSBcCisgICAgICgoTikgKiAoc2l6ZW9mICh5eXR5cGVfaW50MTYpICsgc2l6ZW9mIChZWVNUWVBF
KSArIHNpemVvZiAoWVlMVFlQRSkpIFwKKyAgICAgICsgMiAqIFlZU1RBQ0tfR0FQX01BWElNVU0p
CisKKyMgZGVmaW5lIFlZQ09QWV9ORUVERUQgMQorCisvKiBSZWxvY2F0ZSBTVEFDSyBmcm9tIGl0
cyBvbGQgbG9jYXRpb24gdG8gdGhlIG5ldyBvbmUuICBUaGUKKyAgIGxvY2FsIHZhcmlhYmxlcyBZ
WVNJWkUgYW5kIFlZU1RBQ0tTSVpFIGdpdmUgdGhlIG9sZCBhbmQgbmV3IG51bWJlciBvZgorICAg
ZWxlbWVudHMgaW4gdGhlIHN0YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBv
ZiB0aGUKKyAgIHN0YWNrLiAgQWR2YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9j
YXRpb24gZm9yIHRoZSBuZXh0CisgICBzdGFjay4gICovCisjIGRlZmluZSBZWVNUQUNLX1JFTE9D
QVRFKFN0YWNrX2FsbG9jLCBTdGFjaykJCQkJXAorICAgIGRvCQkJCQkJCQkJXAorICAgICAgewkJ
CQkJCQkJCVwKKwlZWVNJWkVfVCB5eW5ld2J5dGVzOwkJCQkJCVwKKwlZWUNPUFkgKCZ5eXB0ci0+
U3RhY2tfYWxsb2MsIFN0YWNrLCB5eXNpemUpOwkJCVwKKwlTdGFjayA9ICZ5eXB0ci0+U3RhY2tf
YWxsb2M7CQkJCQlcCisJeXluZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9mICgqU3RhY2sp
ICsgWVlTVEFDS19HQVBfTUFYSU1VTTsgXAorCXl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2Yg
KCp5eXB0cik7CQkJCVwKKyAgICAgIH0JCQkJCQkJCQlcCisgICAgd2hpbGUgKFlZSUQgKDApKQor
CisjZW5kaWYKKworI2lmIGRlZmluZWQgWVlDT1BZX05FRURFRCAmJiBZWUNPUFlfTkVFREVECisv
KiBDb3B5IENPVU5UIG9iamVjdHMgZnJvbSBTUkMgdG8gRFNULiAgVGhlIHNvdXJjZSBhbmQgZGVz
dGluYXRpb24gZG8KKyAgIG5vdCBvdmVybGFwLiAgKi8KKyMgaWZuZGVmIFlZQ09QWQorIyAgaWYg
ZGVmaW5lZCBfX0dOVUNfXyAmJiAxIDwgX19HTlVDX18KKyMgICBkZWZpbmUgWVlDT1BZKERzdCwg
U3JjLCBDb3VudCkgXAorICAgICAgX19idWlsdGluX21lbWNweSAoRHN0LCBTcmMsIChDb3VudCkg
KiBzaXplb2YgKCooU3JjKSkpCisjICBlbHNlCisjICAgZGVmaW5lIFlZQ09QWShEc3QsIFNyYywg
Q291bnQpICAgICAgICAgICAgICBcCisgICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgICAgWVlTSVpFX1QgeXlpOyAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgICAgZm9yICh5eWkgPSAwOyB5eWkgPCAoQ291bnQpOyB5eWkrKykgICBcCisg
ICAgICAgICAgICAoRHN0KVt5eWldID0gKFNyYylbeXlpXTsgICAgICAgICAgICBcCisgICAgICAg
IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB3aGlsZSAo
WVlJRCAoMCkpCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmIC8qICFZWUNPUFlfTkVFREVEICov
CisKKy8qIFlZRklOQUwgLS0gU3RhdGUgbnVtYmVyIG9mIHRoZSB0ZXJtaW5hdGlvbiBzdGF0ZS4g
ICovCisjZGVmaW5lIFlZRklOQUwgIDc0CisvKiBZWUxBU1QgLS0gTGFzdCBpbmRleCBpbiBZWVRB
QkxFLiAgKi8KKyNkZWZpbmUgWVlMQVNUICAgMTQ5MAorCisvKiBZWU5UT0tFTlMgLS0gTnVtYmVy
IG9mIHRlcm1pbmFscy4gICovCisjZGVmaW5lIFlZTlRPS0VOUyAgOTUKKy8qIFlZTk5UUyAtLSBO
dW1iZXIgb2Ygbm9udGVybWluYWxzLiAgKi8KKyNkZWZpbmUgWVlOTlRTICA4NAorLyogWVlOUlVM
RVMgLS0gTnVtYmVyIG9mIHJ1bGVzLiAgKi8KKyNkZWZpbmUgWVlOUlVMRVMgIDIwMgorLyogWVlO
UlVMRVMgLS0gTnVtYmVyIG9mIHN0YXRlcy4gICovCisjZGVmaW5lIFlZTlNUQVRFUyAgMzA3CisK
Ky8qIFlZVFJBTlNMQVRFKFlZTEVYKSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRp
bmcgdG8gWVlMRVguICAqLworI2RlZmluZSBZWVVOREVGVE9LICAyCisjZGVmaW5lIFlZTUFYVVRP
SyAgIDM0OQorCisjZGVmaW5lIFlZVFJBTlNMQVRFKFlZWCkJCQkJCQlcCisgICgodW5zaWduZWQg
aW50KSAoWVlYKSA8PSBZWU1BWFVUT0sgPyB5eXRyYW5zbGF0ZVtZWVhdIDogWVlVTkRFRlRPSykK
KworLyogWVlUUkFOU0xBVEVbWVlMRVhdIC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9u
ZGluZyB0byBZWUxFWC4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dHJhbnNsYXRl
W10gPQoreworICAgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
CisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwK
KyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwKKyAgICAg
ICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAg
MTMsICAgIDE0LAorICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwg
ICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsCisgICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwKKyAgICAgIDM1LCAg
ICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAg
IDQ0LAorICAgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEs
ICAgIDUyLCAgICA1MywgICAgNTQsCisgICAgICA1NSwgICAgNTYsICAgIDU3LCAgICA1OCwgICAg
NTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwKKyAgICAgIDY1LCAgICA2Niwg
ICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcxLCAgICA3MiwgICAgNzMsICAgIDc0LAor
ICAgICAgNzUsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIDgy
LCAgICA4MywgICAgODQsCisgICAgICA4NSwgICAgODYsICAgIDg3LCAgICA4OCwgICAgODksICAg
IDkwLCAgICA5MSwgICAgOTIsICAgIDkzLCAgICA5NAorfTsKKworI2lmIFlZREVCVUcKKy8qIFlZ
UFJIU1tZWU5dIC0tIEluZGV4IG9mIHRoZSBmaXJzdCBSSFMgc3ltYm9sIG9mIHJ1bGUgbnVtYmVy
IFlZTiBpbgorICAgWVlSSFMuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXlwcmhz
W10gPQoreworICAgICAgIDAsICAgICAwLCAgICAgMywgICAgIDUsICAgICA3LCAgICAgOSwgICAg
MTEsICAgIDEzLCAgICAxNSwgICAgMTcsCisgICAgICAyMSwgICAgMjMsICAgIDI4LCAgICAzMCwg
ICAgMzQsICAgIDM3LCAgICA0MCwgICAgNDIsICAgIDQ0LCAgICA0NiwKKyAgICAgIDUwLCAgICA1
MywgICAgNTYsICAgIDU5LCAgICA2MSwgICAgNjQsICAgIDY4LCAgICA3MSwgICAgNzMsICAgIDc1
LAorICAgICAgNzcsICAgIDgwLCAgICA4MywgICAgODYsICAgIDg4LCAgICA5MCwgICAgOTIsICAg
IDk0LCAgICA5OCwgICAxMDIsCisgICAgIDEwNCwgICAxMDgsICAgMTEyLCAgIDExNCwgICAxMTYs
ICAgMTIwLCAgIDEyNCwgICAxMjgsICAgMTMyLCAgIDEzNCwKKyAgICAgMTM4LCAgIDE0MiwgICAx
NDQsICAgMTQ2LCAgIDE0OCwgICAxNTAsICAgMTU0LCAgIDE1NiwgICAxNjAsICAgMTYyLAorICAg
ICAxNjYsICAgMTY4LCAgIDE3NCwgICAxNzYsICAgMTgwLCAgIDE4MiwgICAxODQsICAgMTg2LCAg
IDE4OCwgICAxOTAsCisgICAgIDE5MiwgICAxOTYsICAgMTk4LCAgIDIwMSwgICAyMDQsICAgMjA5
LCAgIDIxMiwgICAyMTQsICAgMjE2LCAgIDIxOSwKKyAgICAgMjIzLCAgIDIyNywgICAyMzAsICAg
MjM2LCAgIDI0MCwgICAyNDMsICAgMjQ3LCAgIDI1MCwgICAyNTEsICAgMjUzLAorICAgICAyNTUs
ICAgMjU3LCAgIDI1OSwgICAyNjEsICAgMjY1LCAgIDI3MSwgICAyNzgsICAgMjg0LCAgIDI4Niwg
ICAyODksCisgICAgIDI5NCwgICAzMDAsICAgMzA1LCAgIDMwOCwgICAzMTAsICAgMzEzLCAgIDMx
NSwgICAzMTcsICAgMzE5LCAgIDMyMiwKKyAgICAgMzI0LCAgIDMyNiwgICAzMjksICAgMzMxLCAg
IDMzMywgICAzMzUsICAgMzM3LCAgIDM0MiwgICAzNDQsICAgMzQ2LAorICAgICAzNDgsICAgMzUw
LCAgIDM1MiwgICAzNTQsICAgMzU2LCAgIDM1OCwgICAzNjAsICAgMzYyLCAgIDM2NCwgICAzNjYs
CisgICAgIDM2OCwgICAzNzAsICAgMzcyLCAgIDM3NCwgICAzNzYsICAgMzc4LCAgIDM4MCwgICAz
ODIsICAgMzg0LCAgIDM4NiwKKyAgICAgMzg3LCAgIDM5NCwgICAzOTUsICAgNDAxLCAgIDQwMywg
ICA0MDYsICAgNDEwLCAgIDQxMiwgICA0MTYsICAgNDE4LAorICAgICA0MjMsICAgNDI1LCAgIDQy
NywgICA0MjksICAgNDMxLCAgIDQzMywgICA0MzUsICAgNDM3LCAgIDQzOSwgICA0NDEsCisgICAg
IDQ0NCwgICA0NDUsICAgNDQ2LCAgIDQ1MiwgICA0NTQsICAgNDU2LCAgIDQ1NywgICA0NjAsICAg
NDYxLCAgIDQ2NCwKKyAgICAgNDY3LCAgIDQ3MSwgICA0NzMsICAgNDc2LCAgIDQ3OCwgICA0ODEs
ICAgNDg3LCAgIDQ5MSwgICA0OTMsICAgNDk1LAorICAgICA1MDAsICAgNTAxLCAgIDUwOCwgICA1
MDksICAgNTE4LCAgIDUxOSwgICA1MjcsICAgNTI5LCAgIDUzMSwgICA1MzMsCisgICAgIDUzNCwg
ICA1MzcsICAgNTQxLCAgIDU0NCwgICA1NDcsICAgNTUwLCAgIDU1NCwgICA1NTcsICAgNTU5LCAg
IDU2MiwKKyAgICAgNTY0LCAgIDU2NiwgICA1NjcKK307CisKKy8qIFlZUkhTIC0tIEEgYC0xJy1z
ZXBhcmF0ZWQgbGlzdCBvZiB0aGUgcnVsZXMnIFJIUy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBl
X2ludDE2IHl5cmhzW10gPQoreworICAgICAxNzUsICAgICAwLCAgICAtMSwgICAgNDUsICAgIC0x
LCAgICA0NiwgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgOTcsCisgICAgICAtMSwgICAgNDgsICAg
IC0xLCAgICA0NywgICAgLTEsICAgIDQ5LCAgICAtMSwgICAgNzEsICAgMTI0LCAgICA3MiwKKyAg
ICAgIC0xLCAgICA5OCwgICAgLTEsICAgIDk5LCAgICA3MywgICAxMDAsICAgIDc0LCAgICAtMSwg
ICAxMDEsICAgIC0xLAorICAgICAgOTksICAgIDc3LCAgICA5NiwgICAgLTEsICAgIDk5LCAgICA1
MiwgICAgLTEsICAgIDk5LCAgICA1MywgICAgLTEsCisgICAgIDEyNCwgICAgLTEsICAgMTAyLCAg
ICAtMSwgICAxMDMsICAgIC0xLCAgICA5OSwgICAgNzcsICAgMTAzLCAgICAtMSwKKyAgICAgMTA1
LCAgICA3MiwgICAgLTEsICAgMTA0LCAgICA3MiwgICAgLTEsICAgMTA2LCAgICAzOSwgICAgLTEs
ICAgMTA2LAorICAgICAgLTEsICAgMTA2LCAgIDEyMiwgICAgLTEsICAgMTA1LCAgICA3OCwgICAx
MjIsICAgIC0xLCAgIDEwNywgICAgNzEsCisgICAgICAtMSwgICAxNDIsICAgIC0xLCAgICA0NSwg
ICAgLTEsICAgIDk5LCAgICAtMSwgICAgNTIsICAgMTA4LCAgICAtMSwKKyAgICAgIDUzLCAgIDEw
OCwgICAgLTEsICAgMTA5LCAgIDEwOCwgICAgLTEsICAgIDg1LCAgICAtMSwgICAgODMsICAgIC0x
LAorICAgICAgODIsICAgIC0xLCAgIDEwOCwgICAgLTEsICAgMTEwLCAgICA4NiwgICAxMDgsICAg
IC0xLCAgIDExMCwgICAgODcsCisgICAgIDEwOCwgICAgLTEsICAgMTEwLCAgICAtMSwgICAxMTEs
ICAgIDg1LCAgIDExMCwgICAgLTEsICAgMTExLCAgICA4MywKKyAgICAgMTEwLCAgICAtMSwgICAx
MTEsICAgIC0xLCAgIDExMiwgICAgLTEsICAgMTEzLCAgICA4OSwgICAxMTIsICAgIC0xLAorICAg
ICAxMTMsICAgIDkwLCAgIDExMiwgICAgLTEsICAgMTEzLCAgICA1NCwgICAxMTIsICAgIC0xLCAg
IDExMywgICAgNTUsCisgICAgIDExMiwgICAgLTEsICAgMTEzLCAgICAtMSwgICAxMTQsICAgIDU2
LCAgIDExMywgICAgLTEsICAgMTE0LCAgICA1NywKKyAgICAgMTEzLCAgICAtMSwgICAxMTQsICAg
IC0xLCAgIDExNSwgICAgLTEsICAgMTE2LCAgICAtMSwgICAxMTcsICAgIC0xLAorICAgICAxMTgs
ICAgIDU4LCAgIDExNywgICAgLTEsICAgMTE4LCAgICAtMSwgICAxMTksICAgIDYwLCAgIDExOCwg
ICAgLTEsCisgICAgIDExOSwgICAgLTEsICAgMTIwLCAgICA1OSwgICAxMTksICAgIC0xLCAgIDEy
MCwgICAgLTEsICAgMTIwLCAgICA5NCwKKyAgICAgMTI0LCAgICA3OSwgICAxMjIsICAgIC0xLCAg
IDEyMSwgICAgLTEsICAgMTA4LCAgIDEyMywgICAxMjIsICAgIC0xLAorICAgICAgODAsICAgIC0x
LCAgICA2MSwgICAgLTEsICAgIDYyLCAgICAtMSwgICAgNjMsICAgIC0xLCAgICA3MCwgICAgLTEs
CisgICAgIDEyMiwgICAgLTEsICAgMTI0LCAgICA3OCwgICAxMjIsICAgIC0xLCAgIDEyMSwgICAg
LTEsICAgMTI3LCAgICA4MSwKKyAgICAgIC0xLCAgIDEzNSwgICAgODEsICAgIC0xLCAgICAgNywg
ICAxNDAsICAgMTQxLCAgICA4MSwgICAgLTEsICAgMTI4LAorICAgICAgNzIsICAgIC0xLCAgIDEz
MCwgICAgLTEsICAgMTI5LCAgICAtMSwgICAxMzAsICAgMTMyLCAgICAtMSwgICAxMjksCisgICAg
ICA3OCwgICAxMzIsICAgIC0xLCAgIDEzNywgICAgNDUsICAgIDcxLCAgICAtMSwgICAxMzksICAg
IDk2LCAgICAtMSwKKyAgICAgMTM5LCAgICA5NiwgICAgNzMsICAgMTI1LCAgICA3NCwgICAgLTEs
ICAgMTM4LCAgIDEzMywgICAxMzEsICAgIC0xLAorICAgICAxMzMsICAgMTMxLCAgICAtMSwgICAx
MzgsICAgMTMzLCAgIDEzNCwgICAgLTEsICAgMTMzLCAgIDEzNCwgICAgLTEsCisgICAgICAtMSwg
ICAgMzMsICAgIC0xLCAgICAzNCwgICAgLTEsICAgIDM1LCAgICAtMSwgICAxMzksICAgIC0xLCAg
IDEzNiwKKyAgICAgIC0xLCAgIDEzNSwgICAgNzgsICAgIDk2LCAgICAtMSwgICAxMzUsICAgIDc4
LCAgICA5NiwgICAgNzMsICAgIDc0LAorICAgICAgLTEsICAgMTM1LCAgICA3OCwgICAgOTYsICAg
IDczLCAgIDEyNSwgICAgNzQsICAgIC0xLCAgIDEzNSwgICAgNzgsCisgICAgICA5NiwgICAgODAs
ICAgMTUwLCAgICAtMSwgICAxMzcsICAgIC0xLCAgIDEzNywgICAgOTYsICAgIC0xLCAgIDEzNywK
KyAgICAgIDk2LCAgICA3MywgICAgNzQsICAgIC0xLCAgIDEzNywgICAgOTYsICAgIDczLCAgIDEy
NSwgICAgNzQsICAgIC0xLAorICAgICAxMzcsICAgIDk2LCAgICA4MCwgICAxNTAsICAgIC0xLCAg
ICAgMywgICAgNDUsICAgIC0xLCAgIDEzOSwgICAgLTEsCisgICAgIDEzOCwgICAxMzksICAgIC0x
LCAgICAgOSwgICAgLTEsICAgICA4LCAgICAtMSwgICAgMzcsICAgIC0xLCAgICAgMywKKyAgICAg
IDM3LCAgICAtMSwgICAgMzYsICAgIC0xLCAgIDE0MSwgICAgLTEsICAgMTQwLCAgIDE0MSwgICAg
LTEsICAgICA0LAorICAgICAgLTEsICAgICA1LCAgICAtMSwgICAgIDYsICAgIC0xLCAgIDE0Miwg
ICAgLTEsICAgMTQyLCAgICA3MywgICAxMjUsCisgICAgICA3NCwgICAgLTEsICAgIDM5LCAgICAt
MSwgICAgMTEsICAgIC0xLCAgICAxMiwgICAgLTEsICAgIDEwLCAgICAtMSwKKyAgICAgIDI3LCAg
ICAtMSwgICAgMjgsICAgIC0xLCAgICAyOSwgICAgLTEsICAgIDIxLCAgICAtMSwgICAgMjIsICAg
IC0xLAorICAgICAgMjMsICAgIC0xLCAgICAyNCwgICAgLTEsICAgIDI1LCAgICAtMSwgICAgMjYs
ICAgIC0xLCAgICAzMCwgICAgLTEsCisgICAgICAzMSwgICAgLTEsICAgIDMyLCAgICAtMSwgICAg
NDEsICAgIC0xLCAgICA0MiwgICAgLTEsICAgIDQzLCAgICAtMSwKKyAgICAgIDQ0LCAgICAtMSwg
ICAxNDMsICAgIC0xLCAgICA0NiwgICAgLTEsICAgIC0xLCAgICAzOCwgICAgOTYsICAgIDc1LAor
ICAgICAxNDQsICAgMTQ2LCAgICA3NiwgICAgLTEsICAgIC0xLCAgICAzOCwgICAgNzUsICAgMTQ1
LCAgIDE0NiwgICAgNzYsCisgICAgICAtMSwgICAxNDcsICAgIC0xLCAgIDE0NiwgICAxNDcsICAg
IC0xLCAgIDEzOSwgICAxNDgsICAgIDgxLCAgICAtMSwKKyAgICAgMTQ5LCAgICAtMSwgICAxNDgs
ICAgIDc4LCAgIDE0OSwgICAgLTEsICAgIDk2LCAgICAtMSwgICAgOTYsICAgIDczLAorICAgICAx
MjUsICAgIDc0LCAgICAtMSwgICAxMjIsICAgIC0xLCAgIDEyNiwgICAgLTEsICAgMTU0LCAgICAt
MSwgICAxNTMsCisgICAgICAtMSwgICAxNTEsICAgIC0xLCAgIDE2MywgICAgLTEsICAgMTY0LCAg
ICAtMSwgICAxNjcsICAgIC0xLCAgIDE3NCwKKyAgICAgIC0xLCAgICA3NSwgICAgNzYsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDc1LCAgIDE1NSwgICAxNjIsICAgMTU2LAorICAgICAgNzYsICAg
IC0xLCAgIDE2MSwgICAgLTEsICAgMTUzLCAgICAtMSwgICAgLTEsICAgMTU5LCAgIDE2MSwgICAg
LTEsCisgICAgICAtMSwgICAxNjAsICAgMTUzLCAgICAtMSwgICAgNzUsICAgIDc2LCAgICAtMSwg
ICAgNzUsICAgMTYyLCAgICA3NiwKKyAgICAgIC0xLCAgIDE1MiwgICAgLTEsICAgMTYyLCAgIDE1
MiwgICAgLTEsICAgIDgxLCAgICAtMSwgICAxMjQsICAgIDgxLAorICAgICAgLTEsICAgIDE4LCAg
ICA3MSwgICAxMjQsICAgIDcyLCAgIDE2NSwgICAgLTEsICAgMTU4LCAgICAxNiwgICAxNTgsCisg
ICAgICAtMSwgICAxNTgsICAgIC0xLCAgIDEyNCwgICAgLTEsICAgMTM3LCAgICA5NiwgICAgODAs
ICAgMTUwLCAgICAtMSwKKyAgICAgIC0xLCAgICA0MCwgICAgNzEsICAgMTY4LCAgIDE2NiwgICAg
NzIsICAgMTU3LCAgICAtMSwgICAgLTEsICAgIDE1LAorICAgICAxNjksICAgMTU4LCAgICA0MCwg
ICAgNzEsICAgMTI0LCAgICA3MiwgICAgODEsICAgIC0xLCAgICAtMSwgICAgMTcsCisgICAgICA3
MSwgICAxNzAsICAgMTcxLCAgIDE3MywgICAgNzIsICAgMTU3LCAgICAtMSwgICAxNjMsICAgIC0x
LCAgIDE1MSwKKyAgICAgIC0xLCAgIDE2NiwgICAgLTEsICAgIC0xLCAgIDE3MiwgICAgODEsICAg
IC0xLCAgIDE3MiwgICAgODEsICAgMTI0LAorICAgICAgLTEsICAgIDE0LCAgICA4MSwgICAgLTEs
ICAgIDEzLCAgICA4MSwgICAgLTEsICAgIDIwLCAgICA4MSwgICAgLTEsCisgICAgICAyMCwgICAx
MjQsICAgIDgxLCAgICAtMSwgICAgMTksICAgIDgxLCAgICAtMSwgICAxNzYsICAgIC0xLCAgIDE3
NSwKKyAgICAgMTc2LCAgICAtMSwgICAxNzcsICAgIC0xLCAgIDEyNiwgICAgLTEsICAgIC0xLCAg
IDEyNywgICAxNzgsICAgMTYxLAorICAgICAgLTEKK307CisKKy8qIFlZUkxJTkVbWVlOXSAtLSBz
b3VyY2UgbGluZSB3aGVyZSBydWxlIG51bWJlciBZWU4gd2FzIGRlZmluZWQuICAqLworc3RhdGlj
IGNvbnN0IHl5dHlwZV91aW50MTYgeXlybGluZVtdID0KK3sKKyAgICAgICAwLCAgIDE4MCwgICAx
ODAsICAgMTgxLCAgIDE4NCwgICAyMzksICAgMjQyLCAgIDI0NywgICAyNTIsICAgMjU3LAorICAg
ICAyNjMsICAgMjY2LCAgIDI2OSwgICAyNzIsICAgMzY3LCAgIDM3NywgICAzOTAsICAgMzk4LCAg
IDQ5OCwgICA1MDEsCisgICAgIDUwOSwgICA1MTIsICAgNTE4LCAgIDUyMiwgICA1MjksICAgNTM1
LCAgIDU0NCwgICA1NTIsICAgNjA3LCAgIDYxNywKKyAgICAgNjIwLCAgIDYzMCwgICA2NDAsICAg
NjYxLCAgIDY2MiwgICA2NjMsICAgNjY4LCAgIDY2OSwgICA2NzcsICAgNjg4LAorICAgICA2ODks
ICAgNjk3LCAgIDcwOCwgICA3MTIsICAgNzEzLCAgIDcyMywgICA3MzMsICAgNzQzLCAgIDc1Niwg
ICA3NTcsCisgICAgIDc2NywgICA3ODAsICAgNzg0LCAgIDc4OCwgICA3OTIsICAgNzkzLCAgIDgw
NiwgICA4MDcsICAgODIwLCAgIDgyMSwKKyAgICAgODM0LCAgIDgzNSwgICA4NTIsICAgODUzLCAg
IDg2NiwgICA4NjcsICAgODY4LCAgIDg2OSwgICA4NzAsICAgODc0LAorICAgICA4NzcsICAgODg4
LCAgIDg5NiwgICA5MjMsICAgOTI4LCAgIDk0MiwgICA5OTcsICAxMDAwLCAgMTAwNywgIDEwMTUs
CisgICAgMTAzNiwgIDEwNTcsICAxMDY3LCAgMTA5NSwgIDExMDAsICAxMTEwLCAgMTExNSwgIDEx
MjUsICAxMTI4LCAgMTEzMSwKKyAgICAxMTM0LCAgMTE0MCwgIDExNDcsICAxMTUwLCAgMTE3Miwg
IDExOTAsICAxMjE0LCAgMTIzNywgIDEyNDEsICAxMjU5LAorICAgIDEyNjcsICAxMjk5LCAgMTMx
OSwgIDEzNDAsICAxMzQ5LCAgMTM3MiwgIDEzNzUsICAxMzgxLCAgMTM4OSwgIDEzOTcsCisgICAg
MTQwNSwgIDE0MTUsICAxNDIyLCAgMTQyNSwgIDE0MjgsICAxNDM0LCAgMTQzNywgIDE0NTIsICAx
NDU2LCAgMTQ2MCwKKyAgICAxNDY0LCAgMTQ2OCwgIDE0NzMsICAxNDc4LCAgMTQ4MywgIDE0ODgs
ICAxNDkzLCAgMTQ5OCwgIDE1MDMsICAxNTA4LAorICAgIDE1MTMsICAxNTE4LCAgMTUyMywgIDE1
MjgsICAxNTMyLCAgMTUzNiwgIDE1NDQsICAxNTUyLCAgMTU1NiwgIDE1NjksCisgICAgMTU2OSwg
IDE1ODMsICAxNTgzLCAgMTU5MiwgIDE1OTUsICAxNjExLCAgMTY0NCwgIDE2NDgsICAxNjU0LCAg
MTY2MSwKKyAgICAxNjc2LCAgMTY4MCwgIDE2ODQsICAxNjg1LCAgMTY5MSwgIDE2OTIsICAxNjkz
LCAgMTY5NCwgIDE2OTUsICAxNjk5LAorICAgIDE3MDAsICAxNzAwLCAgMTcwMCwgIDE3MTAsICAx
NzExLCAgMTcxNSwgIDE3MTUsICAxNzE2LCAgMTcxNiwgIDE3MjEsCisgICAgMTcyNCwgIDE3MzQs
ICAxNzM3LCAgMTc0MywgIDE3NDQsICAxNzQ4LCAgMTc1NiwgIDE3NjAsICAxNzcwLCAgMTc3NSwK
KyAgICAxNzkyLCAgMTc5MiwgIDE3OTcsICAxNzk3LCAgMTgwNCwgIDE4MDQsICAxODEyLCAgMTgx
NSwgIDE4MjEsICAxODI0LAorICAgIDE4MzAsICAxODM0LCAgMTg0MSwgIDE4NDgsICAxODU1LCAg
MTg2MiwgIDE4NzMsICAxODgyLCAgMTg4NiwgIDE4OTMsCisgICAgMTg5NiwgIDE5MDIsICAxOTAy
Cit9OworI2VuZGlmCisKKyNpZiBZWURFQlVHIHx8IFlZRVJST1JfVkVSQk9TRSB8fCAwCisvKiBZ
WVROQU1FW1NZTUJPTC1OVU1dIC0tIFN0cmluZyBuYW1lIG9mIHRoZSBzeW1ib2wgU1lNQk9MLU5V
TS4KKyAgIEZpcnN0LCB0aGUgdGVybWluYWxzLCB0aGVuLCBzdGFydGluZyBhdCBZWU5UT0tFTlMs
IG5vbnRlcm1pbmFscy4gICovCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgeXl0bmFtZVtdID0K
K3sKKyAgIiRlbmQiLCAiZXJyb3IiLCAiJHVuZGVmaW5lZCIsICJJTlZBUklBTlQiLCAiSElHSF9Q
UkVDSVNJT04iLAorICAiTUVESVVNX1BSRUNJU0lPTiIsICJMT1dfUFJFQ0lTSU9OIiwgIlBSRUNJ
U0lPTiIsICJBVFRSSUJVVEUiLAorICAiQ09OU1RfUVVBTCIsICJCT09MX1RZUEUiLCAiRkxPQVRf
VFlQRSIsICJJTlRfVFlQRSIsICJCUkVBSyIsICJDT05USU5VRSIsCisgICJETyIsICJFTFNFIiwg
IkZPUiIsICJJRiIsICJESVNDQVJEIiwgIlJFVFVSTiIsICJCVkVDMiIsICJCVkVDMyIsCisgICJC
VkVDNCIsICJJVkVDMiIsICJJVkVDMyIsICJJVkVDNCIsICJWRUMyIiwgIlZFQzMiLCAiVkVDNCIs
ICJNQVRSSVgyIiwKKyAgIk1BVFJJWDMiLCAiTUFUUklYNCIsICJJTl9RVUFMIiwgIk9VVF9RVUFM
IiwgIklOT1VUX1FVQUwiLCAiVU5JRk9STSIsCisgICJWQVJZSU5HIiwgIlNUUlVDVCIsICJWT0lE
X1RZUEUiLCAiV0hJTEUiLCAiU0FNUExFUjJEIiwgIlNBTVBMRVJDVUJFIiwKKyAgIlNBTVBMRVJf
RVhURVJOQUxfT0VTIiwgIlNBTVBMRVIyRFJFQ1QiLCAiSURFTlRJRklFUiIsICJUWVBFX05BTUUi
LAorICAiRkxPQVRDT05TVEFOVCIsICJJTlRDT05TVEFOVCIsICJCT09MQ09OU1RBTlQiLCAiTEVG
VF9PUCIsICJSSUdIVF9PUCIsCisgICJJTkNfT1AiLCAiREVDX09QIiwgIkxFX09QIiwgIkdFX09Q
IiwgIkVRX09QIiwgIk5FX09QIiwgIkFORF9PUCIsCisgICJPUl9PUCIsICJYT1JfT1AiLCAiTVVM
X0FTU0lHTiIsICJESVZfQVNTSUdOIiwgIkFERF9BU1NJR04iLAorICAiTU9EX0FTU0lHTiIsICJM
RUZUX0FTU0lHTiIsICJSSUdIVF9BU1NJR04iLCAiQU5EX0FTU0lHTiIsICJYT1JfQVNTSUdOIiwK
KyAgIk9SX0FTU0lHTiIsICJTVUJfQVNTSUdOIiwgIkxFRlRfUEFSRU4iLCAiUklHSFRfUEFSRU4i
LCAiTEVGVF9CUkFDS0VUIiwKKyAgIlJJR0hUX0JSQUNLRVQiLCAiTEVGVF9CUkFDRSIsICJSSUdI
VF9CUkFDRSIsICJET1QiLCAiQ09NTUEiLCAiQ09MT04iLAorICAiRVFVQUwiLCAiU0VNSUNPTE9O
IiwgIkJBTkciLCAiREFTSCIsICJUSUxERSIsICJQTFVTIiwgIlNUQVIiLCAiU0xBU0giLAorICAi
UEVSQ0VOVCIsICJMRUZUX0FOR0xFIiwgIlJJR0hUX0FOR0xFIiwgIlZFUlRJQ0FMX0JBUiIsICJD
QVJFVCIsCisgICJBTVBFUlNBTkQiLCAiUVVFU1RJT04iLCAiJGFjY2VwdCIsICJpZGVudGlmaWVy
IiwgInZhcmlhYmxlX2lkZW50aWZpZXIiLAorICAicHJpbWFyeV9leHByZXNzaW9uIiwgInBvc3Rm
aXhfZXhwcmVzc2lvbiIsICJpbnRlZ2VyX2V4cHJlc3Npb24iLAorICAiZnVuY3Rpb25fY2FsbCIs
ICJmdW5jdGlvbl9jYWxsX29yX21ldGhvZCIsICJmdW5jdGlvbl9jYWxsX2dlbmVyaWMiLAorICAi
ZnVuY3Rpb25fY2FsbF9oZWFkZXJfbm9fcGFyYW1ldGVycyIsCisgICJmdW5jdGlvbl9jYWxsX2hl
YWRlcl93aXRoX3BhcmFtZXRlcnMiLCAiZnVuY3Rpb25fY2FsbF9oZWFkZXIiLAorICAiZnVuY3Rp
b25faWRlbnRpZmllciIsICJ1bmFyeV9leHByZXNzaW9uIiwgInVuYXJ5X29wZXJhdG9yIiwKKyAg
Im11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24iLCAiYWRkaXRpdmVfZXhwcmVzc2lvbiIsICJzaGlm
dF9leHByZXNzaW9uIiwKKyAgInJlbGF0aW9uYWxfZXhwcmVzc2lvbiIsICJlcXVhbGl0eV9leHBy
ZXNzaW9uIiwgImFuZF9leHByZXNzaW9uIiwKKyAgImV4Y2x1c2l2ZV9vcl9leHByZXNzaW9uIiwg
ImluY2x1c2l2ZV9vcl9leHByZXNzaW9uIiwKKyAgImxvZ2ljYWxfYW5kX2V4cHJlc3Npb24iLCAi
bG9naWNhbF94b3JfZXhwcmVzc2lvbiIsCisgICJsb2dpY2FsX29yX2V4cHJlc3Npb24iLCAiY29u
ZGl0aW9uYWxfZXhwcmVzc2lvbiIsCisgICJhc3NpZ25tZW50X2V4cHJlc3Npb24iLCAiYXNzaWdu
bWVudF9vcGVyYXRvciIsICJleHByZXNzaW9uIiwKKyAgImNvbnN0YW50X2V4cHJlc3Npb24iLCAi
ZGVjbGFyYXRpb24iLCAiZnVuY3Rpb25fcHJvdG90eXBlIiwKKyAgImZ1bmN0aW9uX2RlY2xhcmF0
b3IiLCAiZnVuY3Rpb25faGVhZGVyX3dpdGhfcGFyYW1ldGVycyIsCisgICJmdW5jdGlvbl9oZWFk
ZXIiLCAicGFyYW1ldGVyX2RlY2xhcmF0b3IiLCAicGFyYW1ldGVyX2RlY2xhcmF0aW9uIiwKKyAg
InBhcmFtZXRlcl9xdWFsaWZpZXIiLCAicGFyYW1ldGVyX3R5cGVfc3BlY2lmaWVyIiwKKyAgImlu
aXRfZGVjbGFyYXRvcl9saXN0IiwgInNpbmdsZV9kZWNsYXJhdGlvbiIsICJmdWxseV9zcGVjaWZp
ZWRfdHlwZSIsCisgICJ0eXBlX3F1YWxpZmllciIsICJ0eXBlX3NwZWNpZmllciIsICJwcmVjaXNp
b25fcXVhbGlmaWVyIiwKKyAgInR5cGVfc3BlY2lmaWVyX25vX3ByZWMiLCAidHlwZV9zcGVjaWZp
ZXJfbm9uYXJyYXkiLCAic3RydWN0X3NwZWNpZmllciIsCisgICIkQDEiLCAiJEAyIiwgInN0cnVj
dF9kZWNsYXJhdGlvbl9saXN0IiwgInN0cnVjdF9kZWNsYXJhdGlvbiIsCisgICJzdHJ1Y3RfZGVj
bGFyYXRvcl9saXN0IiwgInN0cnVjdF9kZWNsYXJhdG9yIiwgImluaXRpYWxpemVyIiwKKyAgImRl
Y2xhcmF0aW9uX3N0YXRlbWVudCIsICJzdGF0ZW1lbnQiLCAic2ltcGxlX3N0YXRlbWVudCIsCisg
ICJjb21wb3VuZF9zdGF0ZW1lbnQiLCAiJEAzIiwgIiRANCIsICJzdGF0ZW1lbnRfbm9fbmV3X3Nj
b3BlIiwKKyAgInN0YXRlbWVudF93aXRoX3Njb3BlIiwgIiRANSIsICIkQDYiLCAiY29tcG91bmRf
c3RhdGVtZW50X25vX25ld19zY29wZSIsCisgICJzdGF0ZW1lbnRfbGlzdCIsICJleHByZXNzaW9u
X3N0YXRlbWVudCIsICJzZWxlY3Rpb25fc3RhdGVtZW50IiwKKyAgInNlbGVjdGlvbl9yZXN0X3N0
YXRlbWVudCIsICJjb25kaXRpb24iLCAiaXRlcmF0aW9uX3N0YXRlbWVudCIsICIkQDciLAorICAi
JEA4IiwgIiRAOSIsICJmb3JfaW5pdF9zdGF0ZW1lbnQiLCAiY29uZGl0aW9ub3B0IiwgImZvcl9y
ZXN0X3N0YXRlbWVudCIsCisgICJqdW1wX3N0YXRlbWVudCIsICJ0cmFuc2xhdGlvbl91bml0Iiwg
ImV4dGVybmFsX2RlY2xhcmF0aW9uIiwKKyAgImZ1bmN0aW9uX2RlZmluaXRpb24iLCAiJEAxMCIs
IFlZX05VTEwKK307CisjZW5kaWYKKworIyBpZmRlZiBZWVBSSU5UCisvKiBZWVRPS05VTVtZWUxF
WC1OVU1dIC0tIEludGVybmFsIHRva2VuIG51bWJlciBjb3JyZXNwb25kaW5nIHRvCisgICB0b2tl
biBZWUxFWC1OVU0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXl0b2tudW1bXSA9
Cit7CisgICAgICAgMCwgICAyNTYsICAgMjU3LCAgIDI1OCwgICAyNTksICAgMjYwLCAgIDI2MSwg
ICAyNjIsICAgMjYzLCAgIDI2NCwKKyAgICAgMjY1LCAgIDI2NiwgICAyNjcsICAgMjY4LCAgIDI2
OSwgICAyNzAsICAgMjcxLCAgIDI3MiwgICAyNzMsICAgMjc0LAorICAgICAyNzUsICAgMjc2LCAg
IDI3NywgICAyNzgsICAgMjc5LCAgIDI4MCwgICAyODEsICAgMjgyLCAgIDI4MywgICAyODQsCisg
ICAgIDI4NSwgICAyODYsICAgMjg3LCAgIDI4OCwgICAyODksICAgMjkwLCAgIDI5MSwgICAyOTIs
ICAgMjkzLCAgIDI5NCwKKyAgICAgMjk1LCAgIDI5NiwgICAyOTcsICAgMjk4LCAgIDI5OSwgICAz
MDAsICAgMzAxLCAgIDMwMiwgICAzMDMsICAgMzA0LAorICAgICAzMDUsICAgMzA2LCAgIDMwNywg
ICAzMDgsICAgMzA5LCAgIDMxMCwgICAzMTEsICAgMzEyLCAgIDMxMywgICAzMTQsCisgICAgIDMx
NSwgICAzMTYsICAgMzE3LCAgIDMxOCwgICAzMTksICAgMzIwLCAgIDMyMSwgICAzMjIsICAgMzIz
LCAgIDMyNCwKKyAgICAgMzI1LCAgIDMyNiwgICAzMjcsICAgMzI4LCAgIDMyOSwgICAzMzAsICAg
MzMxLCAgIDMzMiwgICAzMzMsICAgMzM0LAorICAgICAzMzUsICAgMzM2LCAgIDMzNywgICAzMzgs
ICAgMzM5LCAgIDM0MCwgICAzNDEsICAgMzQyLCAgIDM0MywgICAzNDQsCisgICAgIDM0NSwgICAz
NDYsICAgMzQ3LCAgIDM0OCwgICAzNDkKK307CisjIGVuZGlmCisKKy8qIFlZUjFbWVlOXSAtLSBT
eW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1bGUgWVlOIGRlcml2ZXMuICAqLworc3RhdGlj
IGNvbnN0IHl5dHlwZV91aW50OCB5eXIxW10gPQoreworICAgICAgIDAsICAgIDk1LCAgICA5Niwg
ICAgOTYsICAgIDk3LCAgICA5OCwgICAgOTgsICAgIDk4LCAgICA5OCwgICAgOTgsCisgICAgICA5
OSwgICAgOTksICAgIDk5LCAgICA5OSwgICAgOTksICAgIDk5LCAgIDEwMCwgICAxMDEsICAgMTAy
LCAgIDEwMiwKKyAgICAgMTAzLCAgIDEwMywgICAxMDQsICAgMTA0LCAgIDEwNSwgICAxMDUsICAg
MTA2LCAgIDEwNywgICAxMDcsICAgMTA4LAorICAgICAxMDgsICAgMTA4LCAgIDEwOCwgICAxMDks
ICAgMTA5LCAgIDEwOSwgICAxMTAsICAgMTEwLCAgIDExMCwgICAxMTEsCisgICAgIDExMSwgICAx
MTEsICAgMTEyLCAgIDExMywgICAxMTMsICAgMTEzLCAgIDExMywgICAxMTMsICAgMTE0LCAgIDEx
NCwKKyAgICAgMTE0LCAgIDExNSwgICAxMTYsICAgMTE3LCAgIDExOCwgICAxMTgsICAgMTE5LCAg
IDExOSwgICAxMjAsICAgMTIwLAorICAgICAxMjEsICAgMTIxLCAgIDEyMiwgICAxMjIsICAgMTIz
LCAgIDEyMywgICAxMjMsICAgMTIzLCAgIDEyMywgICAxMjQsCisgICAgIDEyNCwgICAxMjUsICAg
MTI2LCAgIDEyNiwgICAxMjYsICAgMTI3LCAgIDEyOCwgICAxMjgsICAgMTI5LCAgIDEyOSwKKyAg
ICAgMTMwLCAgIDEzMSwgICAxMzEsICAgMTMyLCAgIDEzMiwgICAxMzIsICAgMTMyLCAgIDEzMywg
ICAxMzMsICAgMTMzLAorICAgICAxMzMsICAgMTM0LCAgIDEzNSwgICAxMzUsICAgMTM1LCAgIDEz
NSwgICAxMzUsICAgMTM2LCAgIDEzNiwgICAxMzYsCisgICAgIDEzNiwgICAxMzYsICAgMTM2LCAg
IDEzNywgICAxMzcsICAgMTM4LCAgIDEzOCwgICAxMzgsICAgMTM4LCAgIDEzOCwKKyAgICAgMTM5
LCAgIDEzOSwgICAxNDAsICAgMTQwLCAgIDE0MCwgICAxNDEsICAgMTQxLCAgIDE0MiwgICAxNDIs
ICAgMTQyLAorICAgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAx
NDIsICAgMTQyLCAgIDE0MiwgICAxNDIsCisgICAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0Miwg
ICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0NCwKKyAgICAgMTQzLCAgIDE0
NSwgICAxNDMsICAgMTQ2LCAgIDE0NiwgICAxNDcsICAgMTQ4LCAgIDE0OCwgICAxNDksICAgMTQ5
LAorICAgICAxNTAsICAgMTUxLCAgIDE1MiwgICAxNTIsICAgMTUzLCAgIDE1MywgICAxNTMsICAg
MTUzLCAgIDE1MywgICAxNTQsCisgICAgIDE1NSwgICAxNTYsICAgMTU0LCAgIDE1NywgICAxNTcs
ICAgMTU5LCAgIDE1OCwgICAxNjAsICAgMTU4LCAgIDE2MSwKKyAgICAgMTYxLCAgIDE2MiwgICAx
NjIsICAgMTYzLCAgIDE2MywgICAxNjQsICAgMTY1LCAgIDE2NSwgICAxNjYsICAgMTY2LAorICAg
ICAxNjgsICAgMTY3LCAgIDE2OSwgICAxNjcsICAgMTcwLCAgIDE2NywgICAxNzEsICAgMTcxLCAg
IDE3MiwgICAxNzIsCisgICAgIDE3MywgICAxNzMsICAgMTc0LCAgIDE3NCwgICAxNzQsICAgMTc0
LCAgIDE3NCwgICAxNzUsICAgMTc1LCAgIDE3NiwKKyAgICAgMTc2LCAgIDE3OCwgICAxNzcKK307
CisKKy8qIFlZUjJbWVlOXSAtLSBOdW1iZXIgb2Ygc3ltYm9scyBjb21wb3NpbmcgcmlnaHQgaGFu
ZCBzaWRlIG9mIHJ1bGUgWVlOLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlyMltd
ID0KK3sKKyAgICAgICAwLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAzLAorICAgICAgIDEsICAgICA0LCAgICAgMSwgICAgIDMsICAg
ICAyLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsCisgICAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwK
KyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MywgICAgIDMsICAgICAxLAorICAgICAgIDMsICAgICAzLCAgICAgMSwgICAgIDEsICAgICAzLCAg
ICAgMywgICAgIDMsICAgICAzLCAgICAgMSwgICAgIDMsCisgICAgICAgMywgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDMsICAgICAxLCAgICAgMywKKyAgICAg
ICAxLCAgICAgNSwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDEsICAgICAxLAorICAgICAgIDMsICAgICAxLCAgICAgMiwgICAgIDIsICAgICA0LCAgICAgMiwg
ICAgIDEsICAgICAxLCAgICAgMiwgICAgIDMsCisgICAgICAgMywgICAgIDIsICAgICA1LCAgICAg
MywgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDAsICAgICAxLCAgICAgMSwKKyAgICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAzLCAgICAgNSwgICAgIDYsICAgICA1LCAgICAgMSwgICAgIDIsICAg
ICA0LAorICAgICAgIDUsICAgICA0LCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMiwgICAgIDEsCisgICAgICAgMSwgICAgIDIsICAgICAxLCAgICAgMSwgICAg
IDEsICAgICAxLCAgICAgNCwgICAgIDEsICAgICAxLCAgICAgMSwKKyAgICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAor
ICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDAsCisgICAgICAgNiwgICAgIDAsICAgICA1LCAgICAgMSwgICAgIDIsICAg
ICAzLCAgICAgMSwgICAgIDMsICAgICAxLCAgICAgNCwKKyAgICAgICAxLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLAorICAgICAg
IDAsICAgICAwLCAgICAgNSwgICAgIDEsICAgICAxLCAgICAgMCwgICAgIDIsICAgICAwLCAgICAg
MiwgICAgIDIsCisgICAgICAgMywgICAgIDEsICAgICAyLCAgICAgMSwgICAgIDIsICAgICA1LCAg
ICAgMywgICAgIDEsICAgICAxLCAgICAgNCwKKyAgICAgICAwLCAgICAgNiwgICAgIDAsICAgICA4
LCAgICAgMCwgICAgIDcsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAwLAorICAgICAgIDIsICAg
ICAzLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMywgICAgIDIsICAgICAxLCAgICAgMiwgICAg
IDEsCisgICAgICAgMSwgICAgIDAsICAgICAzCit9OworCisvKiBZWURFRkFDVFtTVEFURS1OQU1F
XSAtLSBEZWZhdWx0IHJlZHVjdGlvbiBudW1iZXIgaW4gc3RhdGUgU1RBVEUtTlVNLgorICAgUGVy
Zm9ybWVkIHdoZW4gWVlUQUJMRSBkb2Vzbid0IHNwZWNpZnkgc29tZXRoaW5nIGVsc2UgdG8gZG8u
ICBaZXJvCisgICBtZWFucyB0aGUgZGVmYXVsdCBpcyBhbiBlcnJvci4gICovCitzdGF0aWMgY29u
c3QgeXl0eXBlX3VpbnQ4IHl5ZGVmYWN0W10gPQoreworICAgICAgIDAsICAgICAwLCAgIDExMiwg
ICAxMTMsICAgMTE0LCAgICAgMCwgICAxMDYsICAgMTA1LCAgIDEyMCwgICAxMTgsCisgICAgIDEx
OSwgICAxMjQsICAgMTI1LCAgIDEyNiwgICAxMjcsICAgMTI4LCAgIDEyOSwgICAxMjEsICAgMTIy
LCAgIDEyMywKKyAgICAgMTMwLCAgIDEzMSwgICAxMzIsICAgMTA5LCAgIDEwNywgICAgIDAsICAg
MTE3LCAgIDEzMywgICAxMzQsICAgMTM1LAorICAgICAxMzYsICAgMTM4LCAgIDIwMCwgICAyMDEs
ICAgICAwLCAgICA3NywgICAgODcsICAgICAwLCAgICA5MiwgICAgOTcsCisgICAgICAgMCwgICAx
MDMsICAgICAwLCAgIDExMCwgICAxMTUsICAgMTM3LCAgICAgMCwgICAxOTcsICAgMTk5LCAgIDEw
OCwKKyAgICAgMTAyLCAgICAgMCwgICAgIDIsICAgICAzLCAgIDE0MSwgICAgIDAsICAgIDcyLCAg
ICAgMCwgICAgNzUsICAgIDg3LAorICAgICAgIDAsICAgIDg4LCAgICA4OSwgICAgOTAsICAgIDc4
LCAgICAgMCwgICAgODcsICAgICAwLCAgICA3MywgICAgIDIsCisgICAgICA5OCwgICAxMDQsICAg
MTExLCAgICAgMCwgICAgIDEsICAgMTk4LCAgICAgMCwgICAgIDAsICAgMTM5LCAgICAgMCwKKyAg
ICAgMjAyLCAgICA3OSwgICAgODQsICAgIDg2LCAgICA5MSwgICAgIDAsICAgIDkzLCAgICA4MCwg
ICAgIDAsICAgICAwLAorICAgICAgIDQsICAgICA3LCAgICAgNiwgICAgIDgsICAgICAwLCAgICAg
MCwgICAgIDAsICAgIDM1LCAgICAzNCwgICAgMzMsCisgICAgICAgNSwgICAgMTAsICAgIDI5LCAg
ICAxMiwgICAgMTcsICAgIDE4LCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAgMCwKKyAgICAgIDM2
LCAgICAgMCwgICAgMzksICAgIDQyLCAgICA0MywgICAgNDgsICAgIDUxLCAgICA1MiwgICAgNTMs
ICAgIDU0LAorICAgICAgNTYsICAgIDU4LCAgICA2MCwgICAgNzEsICAgICAwLCAgICAyNywgICAg
NzQsICAgICAwLCAgICAgMCwgICAxNDMsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgIDE4Miwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE2MCwKKyAgICAgMTY5LCAgIDE3
MywgICAgMzYsICAgIDYyLCAgICA2OSwgICAgIDAsICAgMTUxLCAgICAgMCwgICAxMTUsICAgMTU0
LAorICAgICAxNzEsICAgMTUzLCAgIDE1MiwgICAgIDAsICAgMTU1LCAgIDE1NiwgICAxNTcsICAg
MTU4LCAgICA4MSwgICAgODMsCisgICAgICA4NSwgICAgIDAsICAgICAwLCAgICA5OSwgICAgIDAs
ICAgMTUwLCAgIDEwMSwgICAgMzAsICAgIDMxLCAgICAgMCwKKyAgICAgIDE0LCAgICAxNSwgICAg
IDAsICAgICAwLCAgICAyMSwgICAgMjAsICAgICAwLCAgICAyMiwgICAgMjQsICAgIDI2LAorICAg
ICAgMzIsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTE2
LCAgIDE0OCwgICAgIDAsICAgMTQ2LCAgIDE0MiwKKyAgICAgMTQ0LCAgICAgMCwgICAxOTMsICAg
MTkyLCAgIDE2NywgICAxODQsICAgICAwLCAgIDE5NiwgICAxOTQsICAgICAwLAorICAgICAxODAs
ICAgMTU5LCAgICAgMCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY0LCAgICAgMCwg
ICAgIDAsCisgICAgIDE3NCwgICAxNzAsICAgMTcyLCAgICAgMCwgICAgOTQsICAgICAwLCAgICA5
NiwgICAxMDAsICAgICA5LCAgICAgMCwKKyAgICAgIDE2LCAgICAgMiwgICAgIDMsICAgIDEzLCAg
ICAxOSwgICAgMjUsICAgIDM3LCAgICAzOCwgICAgNDEsICAgIDQwLAorICAgICAgNDYsICAgIDQ3
LCAgICA0NCwgICAgNDUsICAgIDQ5LCAgICA1MCwgICAgNTUsICAgIDU3LCAgICA1OSwgICAgIDAs
CisgICAgICAgMCwgICAgIDAsICAgMTQ1LCAgIDE0MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgIDE5NSwKKyAgICAgICAwLCAgIDE2MSwgICAgNjMsICAgIDcwLCAgICAgMCwg
ICAgOTUsICAgIDExLCAgICAgMCwgICAgIDAsICAgMTQ3LAorICAgICAgIDAsICAgMTY2LCAgIDE2
OCwgICAxODcsICAgMTg2LCAgIDE4OSwgICAxNjcsICAgMTc4LCAgICAgMCwgICAgIDAsCisgICAg
ICAgMCwgICAgODIsICAgIDYxLCAgIDE0OSwgICAgIDAsICAgMTg4LCAgICAgMCwgICAgIDAsICAg
MTc3LCAgIDE3NSwKKyAgICAgICAwLCAgICAgMCwgICAxNjIsICAgICAwLCAgIDE5MCwgICAgIDAs
ICAgMTY3LCAgICAgMCwgICAxNjQsICAgMTgxLAorICAgICAxNjMsICAgICAwLCAgIDE5MSwgICAx
ODUsICAgMTc2LCAgIDE3OSwgICAxODMKK307CisKKy8qIFlZREVGR09UT1tOVEVSTS1OVU1dLiAg
Ki8KK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlkZWZnb3RvW10gPQoreworICAgICAgLTEs
ICAgMTk2LCAgIDEwMCwgICAxMDEsICAgMTAyLCAgIDIyOSwgICAxMDMsICAgMTA0LCAgIDEwNSwg
ICAxMDYsCisgICAgIDEwNywgICAxMDgsICAgMTA5LCAgIDE0MiwgICAxMTEsICAgMTEyLCAgIDEx
MywgICAxMTQsICAgMTE1LCAgIDExNiwKKyAgICAgMTE3LCAgIDExOCwgICAxMTksICAgMTIwLCAg
IDEyMSwgICAxMjIsICAgMTQzLCAgIDE0NCwgICAyMTgsICAgMTQ1LAorICAgICAxMjQsICAgMTQ2
LCAgIDE0NywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgODIsICAgIDY0LCAgICA2NSwgICAgODMs
CisgICAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAx
MjUsICAgIDQ1LCAgIDEzMCwKKyAgICAgIDc3LCAgIDEyOCwgICAxMjksICAgMTk3LCAgIDE5OCwg
ICAxNjYsICAgMTQ5LCAgIDE1MCwgICAxNTEsICAgMTUyLAorICAgICAyMTIsICAgMjgwLCAgIDI5
OSwgICAyNTQsICAgMjU1LCAgIDI1NiwgICAzMDAsICAgMTUzLCAgIDE1NCwgICAxNTUsCisgICAg
IDI4OSwgICAyNzksICAgMTU2LCAgIDI2MCwgICAyMDQsICAgMjU3LCAgIDI3NSwgICAyODYsICAg
Mjg3LCAgIDE1NywKKyAgICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDU3Cit9OworCisvKiBZWVBB
Q1RbU1RBVEUtTlVNXSAtLSBJbmRleCBpbiBZWVRBQkxFIG9mIHRoZSBwb3J0aW9uIGRlc2NyaWJp
bmcKKyAgIFNUQVRFLU5VTS4gICovCisjZGVmaW5lIFlZUEFDVF9OSU5GIC0yNjEKK3N0YXRpYyBj
b25zdCB5eXR5cGVfaW50MTYgeXlwYWN0W10gPQoreworICAgIDEzMjcsICAgLTIwLCAgLTI2MSwg
IC0yNjEsICAtMjYxLCAgIDExMywgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsCisgICAgLTI2
MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYx
LCAgLTI2MSwKKyAgICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAtMTksICAt
MjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLAorICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAtNjEs
ICAgLTQwLCAgIC0yOCwgICAgNzUsICAgIC03LCAgLTI2MSwgICAgMjQsCisgICAgMTM3MCwgIC0y
NjEsICAxNDQ0LCAgLTI2MSwgICAtMTEsICAtMjYxLCAgMTI4MywgIC0yNjEsICAtMjYxLCAgLTI2
MSwKKyAgICAtMjYxLCAgMTQ0NCwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAgIDYsICAtMjYxLCAg
ICA1NCwgIC0yNjEsICAgIDg4LAorICAgICAgNjIsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYx
LCAgMTM3MCwgICAgNTksICAgIDkxLCAgLTI2MSwgICAgMzYsCisgICAgIC01MCwgIC0yNjEsICAt
MjYxLCAgMTA1MSwgIC0yNjEsICAtMjYxLCAgICA2MywgIDEzNzAsICAtMjYxLCAgIDI5MywKKyAg
ICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgICA5MSwgIDEzNzAsICAgLTEyLCAgLTI2MSwg
ICA4NTYsICAxMDUxLAorICAgICAgNzcsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAxMDUxLCAgMTA1
MSwgIDEwNTEsICAtMjYxLCAgLTI2MSwgIC0yNjEsCisgICAgLTI2MSwgIC0yNjEsICAgLTE0LCAg
LTI2MSwgIC0yNjEsICAtMjYxLCAgICA4NCwgICAtNDQsICAxMTE2LCAgICA5NSwKKyAgICAtMjYx
LCAgMTA1MSwgICAgNTMsICAgICAzLCAgLTI2MSwgICAtMzYsICAgIDg5LCAgLTI2MSwgIC0yNjEs
ICAtMjYxLAorICAgICAxMDQsICAgMTA3LCAgIC00NSwgIC0yNjEsICAgIDk2LCAgLTI2MSwgIC0y
NjEsICAgIDkxLCAgMTE4NCwgIC0yNjEsCisgICAgMTM3MCwgICAgOTIsICAgIDkzLCAgLTI2MSwg
ICAgOTgsICAgMTAxLCAgICA5NCwgICA5MjEsICAgMTA1LCAgIDEwMiwKKyAgICAtMjYxLCAgLTI2
MSwgICAgNzIsICAtMjYxLCAgLTI2MSwgICAgIDksICAtMjYxLCAgIC02MSwgICAgNDIsICAtMjYx
LAorICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAzNzYsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAt
MjYxLCAgIDEwNiwgIC0yNjEsCisgICAgLTI2MSwgICA5ODYsICAxMDUxLCAgLTI2MSwgICAxMDMs
ICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgIC00MSwKKyAgICAtMjYxLCAgLTI2MSwgIDEw
NTEsICAxNDA3LCAgLTI2MSwgIC0yNjEsICAxMDUxLCAgIDExMCwgIC0yNjEsICAtMjYxLAorICAg
IC0yNjEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAxMDUxLCAg
MTA1MSwgIDEwNTEsCisgICAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAtMjYx
LCAgIDEwOSwgICAgMjMsICAtMjYxLCAgLTI2MSwKKyAgICAtMjYxLCAgMTIyNywgIC0yNjEsICAt
MjYxLCAgIDExMSwgIC0yNjEsICAxMDUxLCAgLTI2MSwgIC0yNjEsICAgIDI1LAorICAgIC0yNjEs
ICAtMjYxLCAgIDQ1OSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgMTA1MSwg
IDEwNTEsCisgICAgLTI2MSwgIC0yNjEsICAtMjYxLCAgMTA1MSwgIC0yNjEsICAgMTE0LCAgLTI2
MSwgIC0yNjEsICAtMjYxLCAgIDExNSwKKyAgICAgMTEyLCAgICA3NywgICAxMTYsICAtMjYxLCAg
LTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAgNTMsICAgIDUzLAorICAgIC0yNjEsICAtMjYx
LCAgLTI2MSwgIC0yNjEsICAgLTM2LCAgIC0zNiwgIC0yNjEsICAgMTA0LCAgIDEwNywgICAgNzYs
CisgICAgMTA1MSwgICAgOTEsICAtMjYxLCAgLTI2MSwgICAxNDUsICAgIDU0LCAgIDYyNSwgICA3
MDgsICAgIC02LCAgLTI2MSwKKyAgICAgNzkxLCAgIDQ1OSwgIC0yNjEsICAtMjYxLCAgIDExNywg
IC0yNjEsICAtMjYxLCAgMTA1MSwgICAxMjAsICAtMjYxLAorICAgICAxMjQsICAtMjYxLCAgLTI2
MSwgIC0yNjEsICAtMjYxLCAgIDc5MSwgICAxMTEsICAgMTEyLCAgICA5MSwgICAxMjUsCisgICAg
IDEyMiwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIDEwNTEsICAtMjYxLCAgIDExOCwgICAxMjgsICAg
MTgwLCAgLTI2MSwKKyAgICAgMTI2LCAgIDU0MiwgIC0yNjEsICAgIC01LCAgMTA1MSwgICA1NDIs
ICAgMTExLCAgMTA1MSwgIC0yNjEsICAtMjYxLAorICAgIC0yNjEsICAgMTIzLCAgIDExMiwgIC0y
NjEsICAtMjYxLCAgLTI2MSwgIC0yNjEKK307CisKKy8qIFlZUEdPVE9bTlRFUk0tTlVNXS4gICov
CitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cGdvdG9bXSA9Cit7CisgICAgLTI2MSwgICAt
MjQsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgIDM0LCAgLTI2
MSwKKyAgICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgIDMyLCAgLTI2MSwgICAtMzMsICAtMjYxLCAg
IC0yNywgICAtMjYsICAtMjYxLAorICAgIC0yNjEsICAtMjYxLCAgICAxNCwgICAgMTYsICAgIDE4
LCAgLTI2MSwgICAtNjYsICAgLTg3LCAgLTI2MSwgICAtOTIsCisgICAgIC04NSwgICAgMTEsICAg
IDEyLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgIDE0MSwgICAxNTAsICAgMTYxLCAgIDE0MywKKyAg
ICAtMjYxLCAgLTI2MSwgIC0yMzEsICAgICA1LCAgIC0zMCwgICAyMjQsICAgLTE4LCAgICAgMCwg
IC0yNjEsICAtMjYxLAorICAgIC0yNjEsICAgMTAwLCAgLTExOSwgIC0yNjEsICAgLTE3LCAgLTE1
NiwgICAtMjUsICAtMTQ1LCAgLTI0MywgIC0yNjEsCisgICAgLTI2MSwgIC0yNjEsICAgLTY0LCAg
LTI2MCwgIC0yNjEsICAtMjYxLCAgIC01MiwgICAgMjEsICAgLTIyLCAgLTI2MSwKKyAgICAtMjYx
LCAgIC0zOSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEs
ICAtMjYxLAorICAgIC0yNjEsICAgMTkxLCAgLTI2MSwgIC0yNjEKK307CisKKy8qIFlZVEFCTEVb
WVlQQUNUW1NUQVRFLU5VTV1dLiAgV2hhdCB0byBkbyBpbiBzdGF0ZSBTVEFURS1OVU0uICBJZgor
ICAgcG9zaXRpdmUsIHNoaWZ0IHRoYXQgdG9rZW4uICBJZiBuZWdhdGl2ZSwgcmVkdWNlIHRoZSBy
dWxlIHdoaWNoCisgICBudW1iZXIgaXMgdGhlIG9wcG9zaXRlLiAgSWYgWVlUQUJMRV9OSU5GLCBz
eW50YXggZXJyb3IuICAqLworI2RlZmluZSBZWVRBQkxFX05JTkYgLTE2Ngorc3RhdGljIGNvbnN0
IHl5dHlwZV9pbnQxNiB5eXRhYmxlW10gPQoreworICAgICAgNDQsICAgIDU1LCAgIDE2NSwgICAx
NjQsICAgMTY5LCAgICA4MCwgICAyMjYsICAgMTIzLCAgIDIyMiwgICAyMDAsCisgICAgICA3MSwg
ICAgMzIsICAgIDMzLCAgIDI3MiwgICAxOTMsICAgIDcwLCAgIDI4OCwgICAgNDksICAgMTg1LCAg
IDE4NiwKKyAgICAgIDU2LCAgIDE3OCwgICAxMjMsICAgIDg4LCAgICA3MiwgICAgNTAsICAgIDUy
LCAgICA1MywgICAxNzUsICAgMjc4LAorICAgICAgODksICAgMjI4LCAgICA1OCwgICAgNzYsICAg
MTc2LCAgICA4NCwgICAzMDQsICAgMjE5LCAgIDE3MCwgICAxNzEsCisgICAgICA0NCwgICAgNjYs
ICAgIDQ0LCAgICA4NiwgICAyNzgsICAgMjA5LCAgICA0NCwgICAxMjcsICAgMjk4LCAgIDE5NCwK
KyAgICAgIDU5LCAgICA0NCwgICAyOTgsICAgMTg3LCAgIDE4OCwgICAgODQsICAgIDU0LCAgICAz
MiwgICAgMzMsICAgMTcyLAorICAgICAxNTgsICAgMTYxLCAgICA3MywgICAxNzMsICAgIDY2LCAg
ICA0NCwgICAyNzYsICAgMzAxLCAgIDE2MiwgICAgNjksCisgICAgICA1MywgICAgNjcsICAgMjE5
LCAgIDIxOSwgICAgNjgsICAgMTY1LCAgIDIyNSwgICAgNDQsICAgIDYwLCAgIDE0OCwKKyAgICAg
MjMwLCAgICA3OCwgICAyMDAsICAgICA2LCAgICAgNywgICAgNDQsICAgMTgzLCAgIDIxOSwgICAx
ODQsICAgMjM1LAorICAgICAyMjAsICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgIDEyMywg
ICAgIDYsICAgICA3LCAgIDEyNywgICAgNDksCisgICAgIDEyNywgICAyNTEsICAgMjQ5LCAgIDIx
OSwgICAyNTIsICAgMTEwLCAgIDI1OSwgICAgODcsICAgIDYxLCAgICA2MiwKKyAgICAgIDYzLCAg
ICAyMywgICAgMjQsICAgLTI3LCAgIDI1OCwgICAgNzMsICAgMjIyLCAgICAgMiwgICAgIDMsICAg
ICA0LAorICAgICAxMTAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDIzLCAgICAyNCwgICAxNjcs
ICAgMTY4LCAgICA0NCwgICAgNzksCisgICAgICA0NCwgICAyNjIsICAgMjYzLCAgIDIxMywgICAy
MTQsICAgMjE1LCAgICA1MiwgICAgNTMsICAgMjY0LCAgIDE4MSwKKyAgICAgMTgyLCAgIDMwNSwg
ICAyMTYsICAgMTgwLCAgIDEyNiwgICAxODksICAgMTkwLCAgIC03NiwgICAtMjgsICAgMjMzLAor
ICAgICAyMzgsICAgMjM5LCAgIDIxNywgICAxNDgsICAgMjE5LCAgIDI2NywgICAxNzQsICAgMTIz
LCAgIDI0MCwgICAyNDEsCisgICAgIDI0MiwgICAyNDMsICAgMTkxLCAgIDI0NCwgICAyNDUsICAg
MjY4LCAgIDE3OSwgICAxOTIsICAgMjc3LCAgIDIwNSwKKyAgICAgMTk1LCAgIDEyNywgICAyMDYs
ICAgMjAyLCAgIDIwMywgICAyMDcsICAgMjEwLCAgIDIyNywgICAyMTEsICAgMjIzLAorICAgICAy
ODIsICAtMTE3LCAgIDI1MCwgICAyNzcsICAgMTIzLCAgIDI3MCwgIC0xNjUsICAtMTM4LCAgIDI2
NSwgICAyNjYsCisgICAgIDIxOSwgICAyODEsICAgMjkzLCAgIDExMCwgICAyODMsICAgMjg0LCAg
IDI5NiwgICAyOTEsICAgMjkyLCAgIDI5NCwKKyAgICAgMjk1LCAgICA0NCwgICAzMDIsICAgMjcx
LCAgIDMwNiwgICAyNDYsICAgMjk3LCAgIDIzNCwgICAyNDcsICAgIDgxLAorICAgICAxNjUsICAg
MjQ4LCAgIDE0OCwgICAyMzYsICAgMjM3LCAgIDExMCwgICAxMTAsICAgMTEwLCAgIDExMCwgICAx
MTAsCisgICAgIDExMCwgICAxMTAsICAgMTEwLCAgIDExMCwgICAxMTAsICAgMTEwLCAgIDE1OSwg
ICAgODUsICAgMTYwLCAgICA1MSwKKyAgICAgMjAxLCAgIDMwMywgICAyNzMsICAgMjYxLCAgIDI2
OSwgICAyNzQsICAgMjg1LCAgICA3NSwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisg
ICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyOTAsICAgMTEwLCAgIDE0OCwgICAxNDgs
ICAgICAwLCAgICAgMCwKKyAgICAgMTQ4LCAgIDE0OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgIDE0OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAg
MCwgICAgIDAsICAgMTEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwKKyAgICAgICAwLCAgIDE0OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDgsICAg
ICAxLCAgICAgMiwgICAgIDMsICAgICA0LAorICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgs
ICAgICA5LCAgICAxMCwgICAxMzEsICAgMTMyLCAgIDEzMywgICAgIDAsCisgICAgIDEzNCwgICAx
MzUsICAgMTM2LCAgIDEzNywgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAx
NiwKKyAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgIDIzLAorICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAxMzgsICAgIDI3
LCAgICAyOCwgICAgMjksICAgIDMwLCAgICA5MCwgICAgMzEsCisgICAgICA5MSwgICAgOTIsICAg
IDkzLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICA5NSwgICAgIDAsICAgICAwLCAgICAgMCwKKyAg
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk2LCAgICAg
MCwgICAgIDAsICAgICAwLCAgIDEzOSwgICAxNDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAxNDEsICAgIDk3LCAgICA5OCwgICAgIDAsICAgIDk5LCAgICAgMSwKKyAgICAgICAy
LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAs
ICAgMTMxLAorICAgICAxMzIsICAgMTMzLCAgICAgMCwgICAxMzQsICAgMTM1LCAgIDEzNiwgICAx
MzcsICAgIDExLCAgICAxMiwgICAgMTMsCisgICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywg
ICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwKKyAgICAgICAwLCAgICAg
MCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgMTM4LCAgICAyNywgICAgMjgsICAgIDI5
LAorICAgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAsICAg
ICAwLCAgICA5NCwgICAgOTUsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLAorICAg
ICAgIDAsICAgMTM5LCAgIDIyMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQxLCAg
ICA5NywgICAgOTgsCisgICAgICAgMCwgICAgOTksICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0
LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwKKyAgICAgICA5LCAgICAxMCwgICAxMzEsICAg
MTMyLCAgIDEzMywgICAgIDAsICAgMTM0LCAgIDEzNSwgICAxMzYsICAgMTM3LAorICAgICAgMTEs
ICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwg
ICAgMjAsCisgICAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAy
NCwgICAgMjUsICAgIDI2LCAgIDEzOCwKKyAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAg
ICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLAorICAgICAgIDAsICAgIDk0
LCAgICA5NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
CisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwKKyAgICAgIDk2LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEzOSwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAxNDEsICAgIDk3LCAgICA5
OCwgICAgIDAsICAgIDk5LCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsCisgICAg
ICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgMTMxLCAgIDEzMiwgICAxMzMsICAg
ICAwLCAgIDEzNCwKKyAgICAgMTM1LCAgIDEzNiwgICAxMzcsICAgIDExLCAgICAxMiwgICAgMTMs
ICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LAorICAgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
MjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywgICAgMjQsCisgICAgICAyNSwg
ICAgMjYsICAgMTM4LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAsICAgIDMxLCAg
ICA5MSwKKyAgICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAs
ICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNzksICAgICAwLCAgICAgMCwK
KyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQxLCAgICA5NywgICAgOTgsICAgICAwLCAgICA5
OSwgICAgIDEsICAgICAyLAorICAgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAg
ICAgOCwgICAgIDksICAgIDEwLCAgIDEzMSwgICAxMzIsCisgICAgIDEzMywgICAgIDAsICAgMTM0
LCAgIDEzNSwgICAxMzYsICAgMTM3LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwKKyAgICAg
IDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAg
IDAsICAgICAwLAorICAgICAgIDAsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgIDEzOCwg
ICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCisgICAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5
MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LCAgICAgMCwKKyAgICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTYs
ICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgIDE0MSwgICAgOTcsICAgIDk4LCAgICAgMCwKKyAgICAgIDk5LCAgICAgMSwg
ICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAor
ICAgICAgMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgMTEsCisgICAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAg
IDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwKKyAgICAgIDIyLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LAorICAgICAg
MjgsICAgIDI5LCAgICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwgICAgOTIsICAgIDkzLCAgICAg
MCwgICAgIDAsCisgICAgICA5NCwgICAgOTUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk2LAorICAgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAx
NDEsCisgICAgICA5NywgICAgOTgsICAgICAwLCAgICA5OSwgICAgNjAsICAgICAyLCAgICAgMywg
ICAgIDQsICAgICAwLCAgICAgNiwKKyAgICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAg
ICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCisg
ICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMs
ICAgIDI0LCAgICAyNSwKKyAgICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAg
MzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLAorICAgICAgOTMsICAgICAwLCAgICAgMCwg
ICAgOTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICA4LCAgICAgOSwgICAgMTAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTcs
ICAgIDk4LCAgICAgMCwgICAgOTksICAgIDExLCAgICAxMiwgICAgMTMsCisgICAgICAxNCwgICAg
MTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAg
MCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwgICAgMjYsICAgICAwLCAg
ICAyNywgICAgMjgsICAgIDI5LAorICAgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDky
LCAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsCisgICAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAg
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5Niwg
ICAgIDAsICAgICAwLAorICAgICAxNjMsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICA5NywgICAgOTgsCisgICAgICAgMCwgICAgOTksICAgIDExLCAg
ICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5
LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgIDI1LAorICAgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAg
OTAsICAgIDMxLCAgICA5MSwgICAgOTIsCisgICAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwg
ICAgOTUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LAorICAgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDgsICAg
ICA5LCAgICAxMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgMjA4LCAgICA5NywgICAgOTgs
ICAgICAwLCAgICA5OSwgICAgMTEsICAgIDEyLCAgICAxMywKKyAgICAgIDE0LCAgICAxNSwgICAg
MTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLAorICAg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAg
ICAyOCwgICAgMjksCisgICAgICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwgICAgOTIsICAgIDkz
LCAgICAgMCwgICAgIDAsICAgIDk0LCAgICA5NSwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMCwg
ICAgIDAsCisgICAgIDIyNCwgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgIDk3LCAgICA5OCwKKyAgICAgICAwLCAgICA5OSwgICAgMTEsICAgIDEyLCAg
ICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIw
LCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjUs
CisgICAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICA5MCwgICAg
MzEsICAgIDkxLCAgICA5MiwKKyAgICAgIDkzLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICA5NSwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAg
ICAgMCwgICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgOCwgICAgIDksICAg
IDEwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk3LCAgICA5OCwgICAgIDAs
ICAgIDk5LCAgICAxMSwgICAgMTIsICAgIDEzLAorICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAg
MTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsCisgICAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgMjUsICAgMTc3LCAgICAgMCwgICAgMjcsICAgIDI4LCAg
ICAyOSwKKyAgICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAw
LCAgICAgMCwgICAgOTQsICAgIDk1LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTYsICAgICAyLCAgICAgMywK
KyAgICAgICA0LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAg
MCwgICAgOTcsICAgIDk4LAorICAgICAgIDAsICAgIDk5LCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsCisgICAgICAxNiwgICAgMTcsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAg
ICAwLCAgICAgMCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAg
MzAsICAgICAwLAorICAgICAgMzEsICAgICAyLCAgICAgMywgICAgIDQsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwKKyAgICAgIDEzLCAg
ICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLAorICAgICAxOTksICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwgICAgMjYs
ICAgICAwLCAgICAyNywgICAgMjgsCisgICAgICAyOSwgICAgMzAsICAgICAwLCAgICAzMSwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwg
ICAgIDAsICAgIDc0LCAgICAgMCwgICAgIDAsICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LAor
ICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgIDI1MywgICAgMTEsICAg
IDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwKKyAgICAgIDE3LCAgICAxOCwgICAgMTks
ICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLAorICAgICAg
MjQsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAg
MCwgICAgMzEsCisgICAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAg
ICAgNywgICAgIDgsICAgICA5LCAgICAxMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTEsICAgIDEyLAorICAgICAgMTMsICAg
IDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAg
MjIsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwg
ICAgIDAsICAgIDI3LCAgICAyOCwKKyAgICAgIDI5LCAgICAzMCwgICAgIDAsICAgIDMxLCAgICAg
MiwgICAgIDMsICAgICA0LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDgsICAgICA5LCAg
ICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisg
ICAgICAgMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcs
ICAgIDE4LCAgICAxOSwKKyAgICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgMjUsICAgIDI2LAorICAgICAgIDAsICAgIDI3LCAgICAyOCwg
ICAgMjksICAgIDMwLCAgICAgMCwgICAgMzEsICAgICA4LCAgICAgOSwgICAgMTAsCisgICAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEx
LCAgICAxMiwKKyAgICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAg
IDE5LCAgICAyMCwgICAgMjEsICAgIDIyLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsCisgICAgICAyOSwgICAg
MzAsICAgMjMxLCAgIDIzMiwgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAgICAwLCAgICAg
MCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTEsICAgIDEyLCAg
ICAxMywgICAgMTQsICAgIDE1LAorICAgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIw
LCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAg
IDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAgMCwKKyAg
ICAgIDMxCit9OworCisjZGVmaW5lIHl5cGFjdF92YWx1ZV9pc19kZWZhdWx0KFl5c3RhdGUpIFwK
KyAgKCEhKChZeXN0YXRlKSA9PSAoLTI2MSkpKQorCisjZGVmaW5lIHl5dGFibGVfdmFsdWVfaXNf
ZXJyb3IoWXl0YWJsZV92YWx1ZSkgXAorICBZWUlEICgwKQorCitzdGF0aWMgY29uc3QgeXl0eXBl
X2ludDE2IHl5Y2hlY2tbXSA9Cit7CisgICAgICAgMCwgICAgMjUsICAgIDg5LCAgICA4OCwgICAg
OTYsICAgIDU3LCAgIDE2MiwgICAgNzMsICAgMTUzLCAgIDEyOCwKKyAgICAgIDQwLCAgICAgMCwg
ICAgIDAsICAgMjU2LCAgICA1OSwgICAgMzksICAgMjc2LCAgICAzNywgICAgNTQsICAgIDU1LAor
ICAgICAgODEsICAgMTA4LCAgICA4OCwgICAgNzMsICAgIDQyLCAgICA0NSwgICAgNDUsICAgIDQ2
LCAgICA3MiwgICAyNjAsCisgICAgICA4MCwgICAgNzIsICAgIDcyLCAgICA1MSwgICAgNzgsICAg
IDY1LCAgIDI5NiwgICAgNzgsICAgIDUyLCAgICA1MywKKyAgICAgIDQwLCAgICAzNiwgICAgNDIs
ICAgIDY3LCAgIDI3NSwgICAxMzcsICAgIDQ2LCAgICA3NywgICAyOTEsICAgIDk0LAorICAgICAg
NzgsICAgIDUxLCAgIDI5NSwgICAgODksICAgIDkwLCAgICA4NSwgICAgNzUsICAgIDQ2LCAgICA0
NiwgICAgNzMsCisgICAgICA4NCwgICAgNzMsICAgIDczLCAgICA3NywgICAgNTksICAgIDY1LCAg
ICA3MiwgICAgNzIsICAgIDgwLCAgICA0NSwKKyAgICAgIDQ2LCAgICA3OCwgICAgNzgsICAgIDc4
LCAgICA4MSwgICAxNjIsICAgMTYxLCAgICA3NywgICAgIDMsICAgIDc5LAorICAgICAxNzIsICAg
IDc1LCAgIDIwMSwgICAgIDgsICAgICA5LCAgICA4NSwgICAgODMsICAgIDc4LCAgICA4NSwgICAx
NzYsCisgICAgICA4MSwgICAgIDMsICAgIDMzLCAgICAzNCwgICAgMzUsICAgMTYxLCAgICAgOCwg
ICAgIDksICAgMTI4LCAgICAzNywKKyAgICAgMTMwLCAgICA3OCwgICAxOTQsICAgIDc4LCAgICA4
MSwgICAgNzMsICAgIDgxLCAgICA3MSwgICAgMzMsICAgIDM0LAorICAgICAgMzUsICAgIDM2LCAg
ICAzNywgICAgNzEsICAgMjA2LCAgICA3MywgICAyNjEsICAgICA0LCAgICAgNSwgICAgIDYsCisg
ICAgICA4OCwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICA5NCwgICAgOTUs
ICAgMTI4LCAgICA3NSwKKyAgICAgMTMwLCAgIDIxOCwgICAyMTksICAgIDYxLCAgICA2MiwgICAg
NjMsICAgIDQ1LCAgICA0NiwgICAyMjMsICAgIDg2LAorICAgICAgODcsICAgMjk3LCAgICA3MCwg
ICAxMTEsICAgIDgxLCAgICA1NiwgICAgNTcsICAgIDcyLCAgICA3MSwgICAxNzMsCisgICAgIDE4
MywgICAxODQsICAgIDgwLCAgIDE1MywgICAgNzgsICAgIDc5LCAgICA3MiwgICAyMjMsICAgMTg1
LCAgIDE4NiwKKyAgICAgMTg3LCAgIDE4OCwgICAgNTgsICAgMTg5LCAgIDE5MCwgICAyNTAsICAg
IDcxLCAgICA2MCwgICAyNjAsICAgIDcxLAorICAgICAgNzQsICAgMjAxLCAgICA3MSwgICAgODEs
ICAgIDgxLCAgICA4MSwgICAgNzEsICAgIDc0LCAgICA3NiwgICAgNzMsCisgICAgIDI2NywgICAg
NzEsICAgIDczLCAgIDI3NSwgICAyNTAsICAgIDQwLCAgICA3NSwgICAgNzEsICAgIDc0LCAgICA3
NCwKKyAgICAgIDc4LCAgICA3NCwgICAyODQsICAgMTYxLCAgICA3NCwgICAgNzEsICAgIDE2LCAg
ICA3MiwgICAgNzYsICAgIDgxLAorICAgICAgNzIsICAgMjAxLCAgIDI5NCwgICAyNTUsICAgIDgx
LCAgIDE5MSwgICAgODAsICAgMTczLCAgIDE5MiwgICAgNTksCisgICAgIDI5NywgICAxOTMsICAg
MjEyLCAgIDE4MSwgICAxODIsICAgMTgzLCAgIDE4NCwgICAxODUsICAgMTg2LCAgIDE4NywKKyAg
ICAgMTg4LCAgIDE4OSwgICAxOTAsICAgMTkxLCAgIDE5MiwgICAxOTMsICAgIDg1LCAgICA2Niwg
ICAgODUsICAgICA1LAorICAgICAxMzAsICAgMjk1LCAgIDI1NywgICAyMTIsICAgMjUxLCAgIDI1
NywgICAyNzUsICAgIDQ2LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDI3OCwgICAyMjMsICAgMjU2LCAgIDI1NywgICAgLTEs
ICAgIC0xLAorICAgICAyNjAsICAgMjYxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgMjc1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAt
MSwgICAyNTAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LAorICAgICAgLTEsICAgMjkxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDI5NSwgICAgIDMsICAg
ICA0LCAgICAgNSwgICAgIDYsCisgICAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEs
ICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAtMSwKKyAgICAgIDE3LCAgICAxOCwgICAg
MTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAorICAg
ICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgMzYsCisgICAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQy
LCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwKKyAgICAgIDQ3LCAgICA0OCwgICAgNDksICAg
IC0xLCAgICAtMSwgICAgNTIsICAgIDUzLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDc1LCAgICA3NiwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICA4MSwgICAgODIsICAgIDgzLCAgICAtMSwgICAgODUsICAgICAzLAorICAgICAgIDQsICAgICA1
LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMs
CisgICAgICAxNCwgICAgMTUsICAgIC0xLCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
MjEsICAgIDIyLCAgICAyMywKKyAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwg
ICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAz
NiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsCisgICAg
ICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgLTEsICAg
IDUyLCAgICA1MywKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwg
ICAgNzUsICAgIDc2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODEsICAgIDgyLCAg
ICA4MywKKyAgICAgIC0xLCAgICA4NSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3
LCAgICAgOCwgICAgIDksICAgIDEwLAorICAgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAg
IDE1LCAgICAtMSwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsCisgICAgICAyMSwgICAgMjIs
ICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwK
KyAgICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDM3LCAgICAz
OCwgICAgMzksICAgIDQwLAorICAgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAg
ICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgLTEsCisgICAgICAtMSwgICAgNTIsICAgIDUz
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLAorICAgICAgNzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc1LCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICA4MSwgICAgODIsICAgIDgzLCAgICAt
MSwgICAgODUsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywKKyAgICAgICA4LCAg
ICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgLTEsICAg
IDE3LAorICAgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQs
ICAgIDI1LCAgICAyNiwgICAgMjcsCisgICAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAg
MzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywKKyAgICAgIDM4LCAgICAzOSwg
ICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LAor
ICAgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3NSwgICAgLTEsICAgIC0xLAorICAgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgODEsICAgIDgyLCAgICA4MywgICAgLTEsICAgIDg1LCAgICAg
MywgICAgIDQsCisgICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAg
ICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwKKyAgICAgIDE1LCAgICAtMSwgICAgMTcsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LAorICAgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAg
LTEsCisgICAgICAtMSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwg
ICAgNDIsICAgIDQzLCAgICA0NCwKKyAgICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0
OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisg
ICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEs
ICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDgxLCAgICA4MiwgICAgODMsICAgIC0xLAorICAgICAgODUsICAgICAzLCAgICAgNCwg
ICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAx
MiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAyMSwKKyAgICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAg
IDI4LCAgICAyOSwgICAgMzAsICAgIDMxLAorICAgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsCisgICAgICA0MiwgICAg
NDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIC0xLCAgICAt
MSwKKyAgICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsCisgICAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MSwKKyAg
ICAgIDgyLCAgICA4MywgICAgLTEsICAgIDg1LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwg
ICAgLTEsICAgICA4LAorICAgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIDIxLCAg
ICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwKKyAgICAgIDI5
LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzNiwgICAgMzcs
ICAgIDM4LAorICAgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAg
NDUsICAgIDQ2LCAgICA0NywgICAgNDgsCisgICAgICA0OSwgICAgLTEsICAgIC0xLCAgICA1Miwg
ICAgNTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LAorICAgICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTAsICAg
IDExLCAgICAxMiwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MiwgICAgODMs
ICAgIC0xLCAgICA4NSwgICAgMjEsICAgIDIyLCAgICAyMywKKyAgICAgIDI0LCAgICAyNSwgICAg
MjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLAorICAg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAg
ICA0MiwgICAgNDMsCisgICAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5
LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwg
ICAgLTEsCisgICAgICA3NCwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDgyLCAgICA4MywKKyAgICAgIC0xLCAgICA4NSwgICAgMjEsICAgIDIyLCAg
ICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LAorICAgICAgMjksICAgIDMw
LCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgs
CisgICAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAg
NDYsICAgIDQ3LCAgICA0OCwKKyAgICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1Mywg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAg
ICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxMCwgICAgMTEsICAg
IDEyLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgODEsICAgIDgyLCAgICA4MywgICAgLTEs
ICAgIDg1LCAgICAyMSwgICAgMjIsICAgIDIzLAorICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAg
MjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsCisgICAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAg
ICA0MywKKyAgICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIC0x
LCAgICAtMSwgICAgNTIsICAgIDUzLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAtMSwK
KyAgICAgIDc0LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgODIsICAgIDgzLAorICAgICAgLTEsICAgIDg1LCAgICAyMSwgICAgMjIsICAgIDIzLCAg
ICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCisgICAgICAyOSwgICAgMzAsICAgIDMx
LCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwKKyAgICAg
IDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAg
NDcsICAgIDQ4LAorICAgICAgNDksICAgIC0xLCAgICAtMSwgICAgNTIsICAgIDUzLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAg
ICAtMSwgICAgNzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDEwLCAgICAxMSwgICAgMTIsICAg
IC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODIsICAgIDgzLCAgICAtMSwgICAgODUs
ICAgIDIxLCAgICAyMiwgICAgMjMsCisgICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAg
MjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQzLAor
ICAgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIC0x
LCAgICA1MiwgICAgNTMsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MSwgICAgIDQsICAgICA1LAorICAgICAg
IDYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAgICA4
MiwgICAgODMsCisgICAgICAtMSwgICAgODUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIxLCAg
ICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwKKyAgICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5
LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAg
IC0xLCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAg
LTEsCisgICAgICA0NiwgICAgIDQsICAgICA1LCAgICAgNiwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgMTAsICAgIDExLCAgICAxMiwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjEsICAgIDIyLAorICAgICAgMjMsICAgIDI0LCAg
ICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsCisg
ICAgICA3NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEs
ICAgIDQxLCAgICA0MiwKKyAgICAgIDQzLCAgICA0NCwgICAgLTEsICAgIDQ2LCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgIDAsICAgIC0xLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsCisgICAgICAg
NywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc2LCAgICAyMSwgICAgMjIsICAg
IDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAorICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAs
ICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsCisgICAgICAzNywgICAg
MzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIC0xLCAgICA0
NiwKKyAgICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAg
ICAxMCwgICAgMTEsICAgIDEyLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsCisgICAgICAyMywgICAgMjQsICAg
IDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwKKyAg
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICAtMSwg
ICAgNDEsICAgIDQyLAorICAgICAgNDMsICAgIDQ0LCAgICAtMSwgICAgNDYsICAgICA0LCAgICAg
NSwgICAgIDYsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAxMCwgICAgMTEsICAgIDEyLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0x
LCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgs
ICAgIDI5LAorICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAzOCwgICAgMzksCisgICAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0Mywg
ICAgNDQsICAgIC0xLCAgICA0NiwgICAgMTAsICAgIDExLCAgICAxMiwKKyAgICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjEsICAgIDIy
LAorICAgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAg
IDMwLCAgICAzMSwgICAgMzIsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwKKyAgICAgIDQzLCAgICA0NCwgICAg
NDUsICAgIDQ2LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsICAgIDIzLCAg
ICAyNCwgICAgMjUsCisgICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMx
LCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgMzgsICAg
IDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIC0xLAorICAgICAgNDYK
K307CisKKy8qIFlZU1RPU1tTVEFURS1OVU1dIC0tIFRoZSAoaW50ZXJuYWwgbnVtYmVyIG9mIHRo
ZSkgYWNjZXNzaW5nCisgICBzeW1ib2wgb2Ygc3RhdGUgU1RBVEUtTlVNLiAgKi8KK3N0YXRpYyBj
b25zdCB5eXR5cGVfdWludDggeXlzdG9zW10gPQoreworICAgICAgIDAsICAgICAzLCAgICAgNCwg
ICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAx
MiwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4
LCAgICAyOSwKKyAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDM2LCAgICAzNywgICAgMzgsICAg
IDM5LCAgICA0MSwgICAgNDIsICAgIDQzLAorICAgICAgNDQsICAgIDQ2LCAgIDEyNiwgICAxMjcs
ICAgMTI4LCAgIDEyOSwgICAxMzAsICAgMTM1LCAgIDEzNiwgICAxMzcsCisgICAgIDEzOCwgICAx
MzksICAgMTQwLCAgIDE0MSwgICAxNDIsICAgMTQzLCAgIDE3NSwgICAxNzYsICAgMTc3LCAgICAz
NywKKyAgICAgIDQ1LCAgIDE0MCwgICAgNDUsICAgIDQ2LCAgICA3NSwgICAgOTYsICAgIDgxLCAg
IDE3OCwgICAgNzIsICAgIDc4LAorICAgICAgIDMsICAgIDMzLCAgICAzNCwgICAgMzUsICAgMTMy
LCAgIDEzMywgICAxMzgsICAgIDc4LCAgICA4MSwgICAgNDUsCisgICAgICA5NiwgICAxMzksICAg
MTQxLCAgICA3MywgICAgIDAsICAgMTc2LCAgIDE0MSwgICAxNDUsICAgIDc1LCAgICA3NSwKKyAg
ICAgMTYxLCAgIDEzMiwgICAxMzEsICAgMTM0LCAgIDEzOSwgICAxMzMsICAgIDk2LCAgICA3MSwg
ICAgNzMsICAgIDgwLAorICAgICAgNDUsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUyLCAgICA1
MywgICAgNzEsICAgIDgyLCAgICA4MywgICAgODUsCisgICAgICA5NywgICAgOTgsICAgIDk5LCAg
IDEwMSwgICAxMDIsICAgMTAzLCAgIDEwNCwgICAxMDUsICAgMTA2LCAgIDEwNywKKyAgICAgMTA4
LCAgIDEwOSwgICAxMTAsICAgMTExLCAgIDExMiwgICAxMTMsICAgMTE0LCAgIDExNSwgICAxMTYs
ICAgMTE3LAorICAgICAxMTgsICAgMTE5LCAgIDEyMCwgICAxMjEsICAgMTI1LCAgIDE0MiwgICAg
ODEsICAgMTM5LCAgIDE0NiwgICAxNDcsCisgICAgIDE0NCwgICAgMTMsICAgIDE0LCAgICAxNSwg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDQwLCAgICA3NSwKKyAgICAgIDc2LCAgICA4
MSwgICAxMDgsICAgMTIxLCAgIDEyMiwgICAxMjQsICAgMTI2LCAgIDEyNywgICAxNDIsICAgMTUx
LAorICAgICAxNTIsICAgMTUzLCAgIDE1NCwgICAxNjIsICAgMTYzLCAgIDE2NCwgICAxNjcsICAg
MTc0LCAgICA5NiwgICAxMzEsCisgICAgIDEzNCwgICAgNzMsICAgIDgwLCAgICA3NCwgICAxMjUs
ICAgMTIyLCAgIDE1MCwgICAxMDgsICAgMTA4LCAgIDEyNCwKKyAgICAgIDUyLCAgICA1MywgICAg
NzMsICAgIDc3LCAgICA3MiwgICAgNzIsICAgIDc4LCAgICAzOSwgICAxMjIsICAgIDcxLAorICAg
ICAxMDgsICAgIDg2LCAgICA4NywgICAgODMsICAgIDg1LCAgICA1NCwgICAgNTUsICAgIDg5LCAg
ICA5MCwgICAgNTYsCisgICAgICA1NywgICAgNTgsICAgIDYwLCAgICA1OSwgICAgOTQsICAgIDc0
LCAgICA5NiwgICAxNDgsICAgMTQ5LCAgICA3NiwKKyAgICAgMTQ3LCAgIDE0NiwgICAgODEsICAg
IDgxLCAgIDE2OSwgICAgNzEsICAgIDcxLCAgICA4MSwgICAgODEsICAgMTI0LAorICAgICAgNzEs
ICAgIDc2LCAgIDE1NSwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNzAsICAgIDgwLCAgIDEyMywg
ICAgNzgsCisgICAgICA4MSwgICAgNzYsICAgMTUyLCAgICA3MywgICAgNzQsICAgMTI1LCAgIDE1
MCwgICAgNzQsICAgIDcyLCAgIDEwMCwKKyAgICAgMTI0LCAgICA0NSwgICAgNDYsICAgIDk2LCAg
IDEwMywgICAxMjIsICAgMTA4LCAgIDEwOCwgICAxMTAsICAgMTEwLAorICAgICAxMTIsICAgMTEy
LCAgIDExMiwgICAxMTIsICAgMTEzLCAgIDExMywgICAxMTcsICAgMTE4LCAgIDExOSwgICAxMjQs
CisgICAgICA3MywgICAgNzgsICAgIDgxLCAgICA3NiwgICAxNTgsICAgMTU5LCAgIDE2MCwgICAx
NzAsICAgMTI0LCAgICA4MSwKKyAgICAgMTY4LCAgIDE2MiwgICAxMjIsICAgMTIyLCAgIDEyNSwg
ICAgNzQsICAgIDc0LCAgICA3OSwgICAxMjUsICAgMTQ5LAorICAgICAgNDAsICAgMTYxLCAgIDE1
MywgICAxNTEsICAgMTYzLCAgIDE3MSwgICAgNzIsICAgMTI0LCAgIDEzNywgICAxNjYsCisgICAg
IDE1NiwgICAgNzQsICAgMTIyLCAgICA3NCwgICAgNzEsICAgMTY2LCAgIDE3MiwgICAxNzMsICAg
MTU4LCAgIDE2NSwKKyAgICAgIDk2LCAgICA3MiwgICAgNzYsICAgMTI0LCAgICA4MSwgICAgNzIs
ICAgIDE2LCAgICA4MCwgICAxNTMsICAgMTU3LAorICAgICAxNjEsICAgIDcyLCAgIDEyNCwgICAx
NTcsICAgMTU4LCAgIDE1MCwgICAgODEKK307CisKKyNkZWZpbmUgeXllcnJvawkJKHl5ZXJyc3Rh
dHVzID0gMCkKKyNkZWZpbmUgeXljbGVhcmluCSh5eWNoYXIgPSBZWUVNUFRZKQorI2RlZmluZSBZ
WUVNUFRZCQkoLTIpCisjZGVmaW5lIFlZRU9GCQkwCisKKyNkZWZpbmUgWVlBQ0NFUFQJZ290byB5
eWFjY2VwdGxhYgorI2RlZmluZSBZWUFCT1JUCQlnb3RvIHl5YWJvcnRsYWIKKyNkZWZpbmUgWVlF
UlJPUgkJZ290byB5eWVycm9ybGFiCisKKworLyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxs
IHl5ZXJyb3IuICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseQorICAgdG8gZWFzZSB0aGUg
dHJhbnNpdGlvbiB0byB0aGUgbmV3IG1lYW5pbmcgb2YgWVlFUlJPUiwgZm9yIEdDQy4KKyAgIE9u
Y2UgR0NDIHZlcnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJzaW9uIDEsIHRoaXMgY2FuIGdvLiAg
SG93ZXZlciwKKyAgIFlZRkFJTCBhcHBlYXJzIHRvIGJlIGluIHVzZS4gIE5ldmVydGhlbGVzcywg
aXQgaXMgZm9ybWFsbHkgZGVwcmVjYXRlZAorICAgaW4gQmlzb24gMi40LjIncyBORVdTIGVudHJ5
LCB3aGVyZSBhIHBsYW4gdG8gcGhhc2UgaXQgb3V0IGlzCisgICBkaXNjdXNzZWQuICAqLworCisj
ZGVmaW5lIFlZRkFJTAkJZ290byB5eWVycmxhYgorI2lmIGRlZmluZWQgWVlGQUlMCisgIC8qIFRo
aXMgaXMgaGVyZSB0byBzdXBwcmVzcyB3YXJuaW5ncyBmcm9tIHRoZSBHQ0MgY3BwJ3MKKyAgICAg
LVd1bnVzZWQtbWFjcm9zLiAgTm9ybWFsbHkgd2UgZG9uJ3Qgd29ycnkgYWJvdXQgdGhhdCB3YXJu
aW5nLCBidXQKKyAgICAgc29tZSB1c2VycyBkbywgYW5kIHdlIHdhbnQgdG8gbWFrZSBpdCBlYXN5
IGZvciB1c2VycyB0byByZW1vdmUKKyAgICAgWVlGQUlMIHVzZXMsIHdoaWNoIHdpbGwgcHJvZHVj
ZSB3YXJuaW5ncyBmcm9tIEJpc29uIDIuNS4gICovCisjZW5kaWYKKworI2RlZmluZSBZWVJFQ09W
RVJJTkcoKSAgKCEheXllcnJzdGF0dXMpCisKKyNkZWZpbmUgWVlCQUNLVVAoVG9rZW4sIFZhbHVl
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitkbyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAoeXlj
aGFyID09IFlZRU1QVFkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICB5eWNoYXIgPSAoVG9rZW4pOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgeXlsdmFsID0gKFZhbHVlKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIFlZUE9QU1RBQ0sgKHl5bGVuKTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB5eXN0YXRlID0g
Knl5c3NwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
Z290byB5eWJhY2t1cDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHl5ZXJyb3IgKCZ5eWxsb2Ms
IGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIpKTsgXAorICAgICAg
WVlFUlJPUjsJCQkJCQkJXAorICAgIH0JCQkJCQkJCVwKK3doaWxlIChZWUlEICgwKSkKKworLyog
RXJyb3IgdG9rZW4gbnVtYmVyICovCisjZGVmaW5lIFlZVEVSUk9SCTEKKyNkZWZpbmUgWVlFUlJD
T0RFCTI1NgorCisKKy8qIFlZTExPQ19ERUZBVUxUIC0tIFNldCBDVVJSRU5UIHRvIHNwYW4gZnJv
bSBSSFNbMV0gdG8gUkhTW05dLgorICAgSWYgTiBpcyAwLCB0aGVuIHNldCBDVVJSRU5UIHRvIHRo
ZSBlbXB0eSBsb2NhdGlvbiB3aGljaCBlbmRzCisgICB0aGUgcHJldmlvdXMgc3ltYm9sOiBSSFNb
MF0gKGFsd2F5cyBkZWZpbmVkKS4gICovCisKKyNpZm5kZWYgWVlMTE9DX0RFRkFVTFQKKyMgZGVm
aW5lIFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJocywgTikgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmIChZWUlEIChOKSkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gWVlSSFNMT0MgKFJo
cywgMSkuZmlyc3RfbGluZTsgICAgICAgIFwKKyAgICAgICAgICAoQ3VycmVudCkuZmlyc3RfY29s
dW1uID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3RfY29sdW1uOyAgICAgIFwKKyAgICAgICAgICAo
Q3VycmVudCkubGFzdF9saW5lICAgID0gWVlSSFNMT0MgKFJocywgTikubGFzdF9saW5lOyAgICAg
ICAgIFwKKyAgICAgICAgICAoQ3VycmVudCkubGFzdF9jb2x1bW4gID0gWVlSSFNMT0MgKFJocywg
TikubGFzdF9jb2x1bW47ICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGVsc2UgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0g
KEN1cnJlbnQpLmxhc3RfbGluZSAgID0gICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFlZUkhT
TE9DIChSaHMsIDApLmxhc3RfbGluZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0gKEN1cnJlbnQpLmxhc3RfY29sdW1u
ID0gICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFlZUkhTTE9DIChSaHMsIDApLmxhc3RfY29s
dW1uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICB3aGlsZSAoWVlJRCAoMCkpCisjZW5kaWYKKworI2RlZmluZSBZWVJIU0xPQyhSaHMsIEspICgo
UmhzKVtLXSkKKworCisvKiBZWV9MT0NBVElPTl9QUklOVCAtLSBQcmludCB0aGUgbG9jYXRpb24g
b24gdGhlIHN0cmVhbS4KKyAgIFRoaXMgbWFjcm8gd2FzIG5vdCBtYW5kYXRlZCBvcmlnaW5hbGx5
OiBkZWZpbmUgb25seSBpZiB3ZSBrbm93CisgICB3ZSB3b24ndCBicmVhayB1c2VyIGNvZGU6IHdo
ZW4gdGhlc2UgYXJlIHRoZSBsb2NhdGlvbnMgd2Uga25vdy4gICovCisKKyNpZm5kZWYgWVlfTE9D
QVRJT05fUFJJTlQKKyMgaWYgZGVmaW5lZCBZWUxUWVBFX0lTX1RSSVZJQUwgJiYgWVlMVFlQRV9J
U19UUklWSUFMCisKKy8qIFByaW50ICpZWUxPQ1Agb24gWVlPLiAgUHJpdmF0ZSwgZG8gbm90IHJl
bHkgb24gaXRzIGV4aXN0ZW5jZS4gKi8KKworX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpCisj
aWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwg
ZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHVuc2lnbmVk
Cit5eV9sb2NhdGlvbl9wcmludF8gKEZJTEUgKnl5bywgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5
bG9jcCkKKyNlbHNlCitzdGF0aWMgdW5zaWduZWQKK3l5X2xvY2F0aW9uX3ByaW50XyAoeXlvLCB5
eWxvY3ApCisgICAgRklMRSAqeXlvOworICAgIFlZTFRZUEUgY29uc3QgKiBjb25zdCB5eWxvY3A7
CisjZW5kaWYKK3sKKyAgdW5zaWduZWQgcmVzID0gMDsKKyAgaW50IGVuZF9jb2wgPSAwICE9IHl5
bG9jcC0+bGFzdF9jb2x1bW4gPyB5eWxvY3AtPmxhc3RfY29sdW1uIC0gMSA6IDA7CisgIGlmICgw
IDw9IHl5bG9jcC0+Zmlyc3RfbGluZSkKKyAgICB7CisgICAgICByZXMgKz0gZnByaW50ZiAoeXlv
LCAiJWQiLCB5eWxvY3AtPmZpcnN0X2xpbmUpOworICAgICAgaWYgKDAgPD0geXlsb2NwLT5maXJz
dF9jb2x1bW4pCisgICAgICAgIHJlcyArPSBmcHJpbnRmICh5eW8sICIuJWQiLCB5eWxvY3AtPmZp
cnN0X2NvbHVtbik7CisgICAgfQorICBpZiAoMCA8PSB5eWxvY3AtPmxhc3RfbGluZSkKKyAgICB7
CisgICAgICBpZiAoeXlsb2NwLT5maXJzdF9saW5lIDwgeXlsb2NwLT5sYXN0X2xpbmUpCisgICAg
ICAgIHsKKyAgICAgICAgICByZXMgKz0gZnByaW50ZiAoeXlvLCAiLSVkIiwgeXlsb2NwLT5sYXN0
X2xpbmUpOworICAgICAgICAgIGlmICgwIDw9IGVuZF9jb2wpCisgICAgICAgICAgICByZXMgKz0g
ZnByaW50ZiAoeXlvLCAiLiVkIiwgZW5kX2NvbCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYg
KDAgPD0gZW5kX2NvbCAmJiB5eWxvY3AtPmZpcnN0X2NvbHVtbiA8IGVuZF9jb2wpCisgICAgICAg
IHJlcyArPSBmcHJpbnRmICh5eW8sICItJWQiLCBlbmRfY29sKTsKKyAgICB9CisgIHJldHVybiBy
ZXM7CisgfQorCisjICBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKSAgICAgICAg
ICBcCisgIHl5X2xvY2F0aW9uX3ByaW50XyAoRmlsZSwgJihMb2MpKQorCisjIGVsc2UKKyMgIGRl
ZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpICgodm9pZCkgMCkKKyMgZW5kaWYKKyNl
bmRpZgorCisKKy8qIFlZTEVYIC0tIGNhbGxpbmcgYHl5bGV4JyB3aXRoIHRoZSByaWdodCBhcmd1
bWVudHMuICAqLworI2lmZGVmIFlZTEVYX1BBUkFNCisjIGRlZmluZSBZWUxFWCB5eWxleCAoJnl5
bHZhbCwgJnl5bGxvYywgWVlMRVhfUEFSQU0pCisjZWxzZQorIyBkZWZpbmUgWVlMRVggeXlsZXgg
KCZ5eWx2YWwsICZ5eWxsb2MpCisjZW5kaWYKKworLyogRW5hYmxlIGRlYnVnZ2luZyBpZiByZXF1
ZXN0ZWQuICAqLworI2lmIFlZREVCVUcKKworIyBpZm5kZWYgWVlGUFJJTlRGCisjICBpbmNsdWRl
IDxzdGRpby5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICBkZWZpbmUg
WVlGUFJJTlRGIGZwcmludGYKKyMgZW5kaWYKKworIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCQkJ
XAorZG8gewkJCQkJCVwKKyAgaWYgKHl5ZGVidWcpCQkJCQlcCisgICAgWVlGUFJJTlRGIEFyZ3M7
CQkJCVwKK30gd2hpbGUgKFlZSUQgKDApKQorCisjIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0
bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikJCQkgIFwKK2RvIHsJCQkJCQkJCQkgIFwKKyAgaWYg
KHl5ZGVidWcpCQkJCQkJCQkgIFwKKyAgICB7CQkJCQkJCQkJICBcCisgICAgICBZWUZQUklOVEYg
KHN0ZGVyciwgIiVzICIsIFRpdGxlKTsJCQkJCSAgXAorICAgICAgeXlfc3ltYm9sX3ByaW50IChz
dGRlcnIsCQkJCQkJICBcCisJCSAgVHlwZSwgVmFsdWUsIExvY2F0aW9uLCBjb250ZXh0KTsgXAor
ICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwkJCQkJCSAgXAorICAgIH0JCQkJCQkJCQkg
IFwKK30gd2hpbGUgKFlZSUQgKDApKQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0uCit8IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAorYC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLypBUkdTVVNFRCovCisjaWYgKGRlZmluZWQgX19T
VERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVz
cGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5X3N5bWJvbF92YWx1ZV9w
cmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5
eXZhbHVlcCwgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jYXRpb25wLCBUUGFyc2VDb250ZXh0
KiBjb250ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5
b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCwgY29udGV4dCkKKyAgICBGSUxF
ICp5eW91dHB1dDsKKyAgICBpbnQgeXl0eXBlOworICAgIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5
eXZhbHVlcDsKKyAgICBZWUxUWVBFIGNvbnN0ICogY29uc3QgeXlsb2NhdGlvbnA7CisgICAgVFBh
cnNlQ29udGV4dCogY29udGV4dDsKKyNlbmRpZgoreworICBGSUxFICp5eW8gPSB5eW91dHB1dDsK
KyAgWVlVU0UgKHl5byk7CisgIGlmICgheXl2YWx1ZXApCisgICAgcmV0dXJuOworICBZWVVTRSAo
eXlsb2NhdGlvbnApOworICBZWVVTRSAoY29udGV4dCk7CisjIGlmZGVmIFlZUFJJTlQKKyAgaWYg
KHl5dHlwZSA8IFlZTlRPS0VOUykKKyAgICBZWVBSSU5UICh5eW91dHB1dCwgeXl0b2tudW1beXl0
eXBlXSwgKnl5dmFsdWVwKTsKKyMgZWxzZQorICBZWVVTRSAoeXlvdXRwdXQpOworIyBlbmRpZgor
ICBZWVVTRSAoeXl0eXBlKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLgorfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKK2AtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVk
IF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQg
X01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ByaW50IChGSUxFICp5eW91dHB1dCwg
aW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwLCBZWUxUWVBFIGNvbnN0
ICogY29uc3QgeXlsb2NhdGlvbnAsIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpCisjZWxzZQorc3Rh
dGljIHZvaWQKK3l5X3N5bWJvbF9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIHl5
bG9jYXRpb25wLCBjb250ZXh0KQorICAgIEZJTEUgKnl5b3V0cHV0OworICAgIGludCB5eXR5cGU7
CisgICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOworICAgIFlZTFRZUEUgY29uc3Qg
KiBjb25zdCB5eWxvY2F0aW9ucDsKKyAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0OworI2VuZGlm
Cit7CisgIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCisgICAgWVlGUFJJTlRGICh5eW91dHB1dCwg
InRva2VuICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOworICBlbHNlCisgICAgWVlGUFJJTlRGICh5
eW91dHB1dCwgIm50ZXJtICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOworCisgIFlZX0xPQ0FUSU9O
X1BSSU5UICh5eW91dHB1dCwgKnl5bG9jYXRpb25wKTsKKyAgWVlGUFJJTlRGICh5eW91dHB1dCwg
IjogIik7CisgIHl5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1
ZXAsIHl5bG9jYXRpb25wLCBjb250ZXh0KTsKKyAgWVlGUFJJTlRGICh5eW91dHB1dCwgIikiKTsK
K30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5X3N0YWNrX3ByaW50IC0tIFByaW50IHRoZSBzdGF0ZSBz
dGFjayBmcm9tIGl0cyBCT1RUT00gdXAgdG8gaXRzIHwKK3wgVE9QIChpbmNsdWRlZCkuICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorYC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSovCisKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAor
ICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMg
dm9pZAoreXlfc3RhY2tfcHJpbnQgKHl5dHlwZV9pbnQxNiAqeXlib3R0b20sIHl5dHlwZV9pbnQx
NiAqeXl0b3ApCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3N0YWNrX3ByaW50ICh5eWJvdHRvbSwg
eXl0b3ApCisgICAgeXl0eXBlX2ludDE2ICp5eWJvdHRvbTsKKyAgICB5eXR5cGVfaW50MTYgKnl5
dG9wOworI2VuZGlmCit7CisgIFlZRlBSSU5URiAoc3RkZXJyLCAiU3RhY2sgbm93Iik7CisgIGZv
ciAoOyB5eWJvdHRvbSA8PSB5eXRvcDsgeXlib3R0b20rKykKKyAgICB7CisgICAgICBpbnQgeXli
b3QgPSAqeXlib3R0b207CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsIHl5Ym90KTsK
KyAgICB9CisgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKK30KKworIyBkZWZpbmUgWVlfU1RB
Q0tfUFJJTlQoQm90dG9tLCBUb3ApCQkJCVwKK2RvIHsJCQkJCQkJCVwKKyAgaWYgKHl5ZGVidWcp
CQkJCQkJCVwKKyAgICB5eV9zdGFja19wcmludCAoKEJvdHRvbSksIChUb3ApKTsJCQkJXAorfSB3
aGlsZSAoWVlJRCAoMCkpCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0uCit8IFJlcG9ydCB0aGF0IHRoZSBZWVJVTEUgaXMgZ29pbmcgdG8gYmUg
cmVkdWNlZC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLworCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19f
IFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3Rh
dGljIHZvaWQKK3l5X3JlZHVjZV9wcmludCAoWVlTVFlQRSAqeXl2c3AsIFlZTFRZUEUgKnl5bHNw
LCBpbnQgeXlydWxlLCBUUGFyc2VDb250ZXh0KiBjb250ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lk
Cit5eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCB5eWxzcCwgeXlydWxlLCBjb250ZXh0KQorICAgIFlZ
U1RZUEUgKnl5dnNwOworICAgIFlZTFRZUEUgKnl5bHNwOworICAgIGludCB5eXJ1bGU7CisgICAg
VFBhcnNlQ29udGV4dCogY29udGV4dDsKKyNlbmRpZgoreworICBpbnQgeXlucmhzID0geXlyMlt5
eXJ1bGVdOworICBpbnQgeXlpOworICB1bnNpZ25lZCBsb25nIGludCB5eWxubyA9IHl5cmxpbmVb
eXlydWxlXTsKKyAgWVlGUFJJTlRGIChzdGRlcnIsICJSZWR1Y2luZyBzdGFjayBieSBydWxlICVk
IChsaW5lICVsdSk6XG4iLAorCSAgICAgeXlydWxlIC0gMSwgeXlsbm8pOworICAvKiBUaGUgc3lt
Ym9scyBiZWluZyByZWR1Y2VkLiAgKi8KKyAgZm9yICh5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5
aSsrKQorICAgIHsKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsg
MSk7CisgICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwgeXlyaHNbeXlwcmhzW3l5cnVsZV0g
KyB5eWldLAorCQkgICAgICAgJih5eXZzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0pCisJCSAgICAg
ICAsICYoeXlsc3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQkJICAgICAgICwgY29udGV4dCk7Cisg
ICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CisgICAgfQorfQorCisjIGRlZmluZSBZWV9S
RURVQ0VfUFJJTlQoUnVsZSkJCVwKK2RvIHsJCQkJCVwKKyAgaWYgKHl5ZGVidWcpCQkJCVwKKyAg
ICB5eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCB5eWxzcCwgUnVsZSwgY29udGV4dCk7IFwKK30gd2hp
bGUgKFlZSUQgKDApKQorCisvKiBOb256ZXJvIG1lYW5zIHByaW50IHBhcnNlIHRyYWNlLiAgSXQg
aXMgbGVmdCB1bmluaXRpYWxpemVkIHNvIHRoYXQKKyAgIG11bHRpcGxlIHBhcnNlcnMgY2FuIGNv
ZXhpc3QuICAqLworaW50IHl5ZGVidWc7CisjZWxzZSAvKiAhWVlERUJVRyAqLworIyBkZWZpbmUg
WVlEUFJJTlRGKEFyZ3MpCisjIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZh
bHVlLCBMb2NhdGlvbikKKyMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKQorIyBk
ZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpCisjZW5kaWYgLyogIVlZREVCVUcgKi8KKworCisv
KiBZWUlOSVRERVBUSCAtLSBpbml0aWFsIHNpemUgb2YgdGhlIHBhcnNlcidzIHN0YWNrcy4gICov
CisjaWZuZGVmCVlZSU5JVERFUFRICisjIGRlZmluZSBZWUlOSVRERVBUSCAyMDAKKyNlbmRpZgor
CisvKiBZWU1BWERFUFRIIC0tIG1heGltdW0gc2l6ZSB0aGUgc3RhY2tzIGNhbiBncm93IHRvIChl
ZmZlY3RpdmUgb25seQorICAgaWYgdGhlIGJ1aWx0LWluIHN0YWNrIGV4dGVuc2lvbiBtZXRob2Qg
aXMgdXNlZCkuCisKKyAgIERvIG5vdCBtYWtlIHRoaXMgdmFsdWUgdG9vIGxhcmdlOyB0aGUgcmVz
dWx0cyBhcmUgdW5kZWZpbmVkIGlmCisgICBZWVNUQUNLX0FMTE9DX01BWElNVU0gPCBZWVNUQUNL
X0JZVEVTIChZWU1BWERFUFRIKQorICAgZXZhbHVhdGVkIHdpdGggaW5maW5pdGUtcHJlY2lzaW9u
IGludGVnZXIgYXJpdGhtZXRpYy4gICovCisKKyNpZm5kZWYgWVlNQVhERVBUSAorIyBkZWZpbmUg
WVlNQVhERVBUSCAxMDAwMAorI2VuZGlmCisKKworI2lmIFlZRVJST1JfVkVSQk9TRQorCisjIGlm
bmRlZiB5eXN0cmxlbgorIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RSSU5H
X0gKKyMgICBkZWZpbmUgeXlzdHJsZW4gc3RybGVuCisjICBlbHNlCisvKiBSZXR1cm4gdGhlIGxl
bmd0aCBvZiBZWVNUUi4gICovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5
OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0Nf
VkVSKQorc3RhdGljIFlZU0laRV9UCit5eXN0cmxlbiAoY29uc3QgY2hhciAqeXlzdHIpCisjZWxz
ZQorc3RhdGljIFlZU0laRV9UCit5eXN0cmxlbiAoeXlzdHIpCisgICAgY29uc3QgY2hhciAqeXlz
dHI7CisjZW5kaWYKK3sKKyAgWVlTSVpFX1QgeXlsZW47CisgIGZvciAoeXlsZW4gPSAwOyB5eXN0
clt5eWxlbl07IHl5bGVuKyspCisgICAgY29udGludWU7CisgIHJldHVybiB5eWxlbjsKK30KKyMg
IGVuZGlmCisjIGVuZGlmCisKKyMgaWZuZGVmIHl5c3RwY3B5CisjICBpZiBkZWZpbmVkIF9fR0xJ
QkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdfSCAmJiBkZWZpbmVkIF9HTlVfU09VUkNFCisjICAgZGVm
aW5lIHl5c3RwY3B5IHN0cGNweQorIyAgZWxzZQorLyogQ29weSBZWVNSQyB0byBZWURFU1QsIHJl
dHVybmluZyB0aGUgYWRkcmVzcyBvZiB0aGUgdGVybWluYXRpbmcgJ1wwJyBpbgorICAgWVlERVNU
LiAgKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAor
ICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMg
Y2hhciAqCit5eXN0cGNweSAoY2hhciAqeXlkZXN0LCBjb25zdCBjaGFyICp5eXNyYykKKyNlbHNl
CitzdGF0aWMgY2hhciAqCit5eXN0cGNweSAoeXlkZXN0LCB5eXNyYykKKyAgICBjaGFyICp5eWRl
c3Q7CisgICAgY29uc3QgY2hhciAqeXlzcmM7CisjZW5kaWYKK3sKKyAgY2hhciAqeXlkID0geXlk
ZXN0OworICBjb25zdCBjaGFyICp5eXMgPSB5eXNyYzsKKworICB3aGlsZSAoKCp5eWQrKyA9ICp5
eXMrKykgIT0gJ1wwJykKKyAgICBjb250aW51ZTsKKworICByZXR1cm4geXlkIC0gMTsKK30KKyMg
IGVuZGlmCisjIGVuZGlmCisKKyMgaWZuZGVmIHl5dG5hbWVycgorLyogQ29weSB0byBZWVJFUyB0
aGUgY29udGVudHMgb2YgWVlTVFIgYWZ0ZXIgc3RyaXBwaW5nIGF3YXkgdW5uZWNlc3NhcnkKKyAg
IHF1b3RlcyBhbmQgYmFja3NsYXNoZXMsIHNvIHRoYXQgaXQncyBzdWl0YWJsZSBmb3IgeXllcnJv
ci4gIFRoZQorICAgaGV1cmlzdGljIGlzIHRoYXQgZG91YmxlLXF1b3RpbmcgaXMgdW5uZWNlc3Nh
cnkgdW5sZXNzIHRoZSBzdHJpbmcKKyAgIGNvbnRhaW5zIGFuIGFwb3N0cm9waGUsIGEgY29tbWEs
IG9yIGJhY2tzbGFzaCAob3RoZXIgdGhhbgorICAgYmFja3NsYXNoLWJhY2tzbGFzaCkuICBZWVNU
UiBpcyB0YWtlbiBmcm9tIHl5dG5hbWUuICBJZiBZWVJFUyBpcworICAgbnVsbCwgZG8gbm90IGNv
cHk7IGluc3RlYWQsIHJldHVybiB0aGUgbGVuZ3RoIG9mIHdoYXQgdGhlIHJlc3VsdAorICAgd291
bGQgaGF2ZSBiZWVuLiAgKi8KK3N0YXRpYyBZWVNJWkVfVAoreXl0bmFtZXJyIChjaGFyICp5eXJl
cywgY29uc3QgY2hhciAqeXlzdHIpCit7CisgIGlmICgqeXlzdHIgPT0gJyInKQorICAgIHsKKyAg
ICAgIFlZU0laRV9UIHl5biA9IDA7CisgICAgICBjaGFyIGNvbnN0ICp5eXAgPSB5eXN0cjsKKwor
ICAgICAgZm9yICg7OykKKwlzd2l0Y2ggKCorK3l5cCkKKwkgIHsKKwkgIGNhc2UgJ1wnJzoKKwkg
IGNhc2UgJywnOgorCSAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7CisKKwkgIGNhc2UgJ1xc
JzoKKwkgICAgaWYgKCorK3l5cCAhPSAnXFwnKQorCSAgICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1
b3RlczsKKwkgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKwkgIGRlZmF1bHQ6CisJICAgIGlmICh5
eXJlcykKKwkgICAgICB5eXJlc1t5eW5dID0gKnl5cDsKKwkgICAgeXluKys7CisJICAgIGJyZWFr
OworCisJICBjYXNlICciJzoKKwkgICAgaWYgKHl5cmVzKQorCSAgICAgIHl5cmVzW3l5bl0gPSAn
XDAnOworCSAgICByZXR1cm4geXluOworCSAgfQorICAgIGRvX25vdF9zdHJpcF9xdW90ZXM6IDsK
KyAgICB9CisKKyAgaWYgKCEgeXlyZXMpCisgICAgcmV0dXJuIHl5c3RybGVuICh5eXN0cik7CisK
KyAgcmV0dXJuIHl5c3RwY3B5ICh5eXJlcywgeXlzdHIpIC0geXlyZXM7Cit9CisjIGVuZGlmCisK
Ky8qIENvcHkgaW50byAqWVlNU0csIHdoaWNoIGlzIG9mIHNpemUgKllZTVNHX0FMTE9DLCBhbiBl
cnJvciBtZXNzYWdlCisgICBhYm91dCB0aGUgdW5leHBlY3RlZCB0b2tlbiBZWVRPS0VOIGZvciB0
aGUgc3RhdGUgc3RhY2sgd2hvc2UgdG9wIGlzCisgICBZWVNTUC4KKworICAgUmV0dXJuIDAgaWYg
KllZTVNHIHdhcyBzdWNjZXNzZnVsbHkgd3JpdHRlbi4gIFJldHVybiAxIGlmICpZWU1TRyBpcwor
ICAgbm90IGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSBtZXNzYWdlLiAgSW4gdGhhdCBjYXNlLCBh
bHNvIHNldAorICAgKllZTVNHX0FMTE9DIHRvIHRoZSByZXF1aXJlZCBudW1iZXIgb2YgYnl0ZXMu
ICBSZXR1cm4gMiBpZiB0aGUKKyAgIHJlcXVpcmVkIG51bWJlciBvZiBieXRlcyBpcyB0b28gbGFy
Z2UgdG8gc3RvcmUuICAqLworc3RhdGljIGludAoreXlzeW50YXhfZXJyb3IgKFlZU0laRV9UICp5
eW1zZ19hbGxvYywgY2hhciAqKnl5bXNnLAorICAgICAgICAgICAgICAgIHl5dHlwZV9pbnQxNiAq
eXlzc3AsIGludCB5eXRva2VuKQoreworICBZWVNJWkVfVCB5eXNpemUwID0geXl0bmFtZXJyIChZ
WV9OVUxMLCB5eXRuYW1lW3l5dG9rZW5dKTsKKyAgWVlTSVpFX1QgeXlzaXplID0geXlzaXplMDsK
KyAgZW51bSB7IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0gPSA1IH07CisgIC8qIEludGVy
bmF0aW9uYWxpemVkIGZvcm1hdCBzdHJpbmcuICovCisgIGNvbnN0IGNoYXIgKnl5Zm9ybWF0ID0g
WVlfTlVMTDsKKyAgLyogQXJndW1lbnRzIG9mIHl5Zm9ybWF0LiAqLworICBjaGFyIGNvbnN0ICp5
eWFyZ1tZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNXTsKKyAgLyogTnVtYmVyIG9mIHJlcG9y
dGVkIHRva2VucyAob25lIGZvciB0aGUgInVuZXhwZWN0ZWQiLCBvbmUgcGVyCisgICAgICJleHBl
Y3RlZCIpLiAqLworICBpbnQgeXljb3VudCA9IDA7CisKKyAgLyogVGhlcmUgYXJlIG1hbnkgcG9z
c2liaWxpdGllcyBoZXJlIHRvIGNvbnNpZGVyOgorICAgICAtIEFzc3VtZSBZWUZBSUwgaXMgbm90
IHVzZWQuICBJdCdzIHRvbyBmbGF3ZWQgdG8gY29uc2lkZXIuICBTZWUKKyAgICAgICA8aHR0cDov
L2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwOS0xMi9tc2cwMDAy
NC5odG1sPgorICAgICAgIGZvciBkZXRhaWxzLiAgWVlFUlJPUiBpcyBmaW5lIGFzIGl0IGRvZXMg
bm90IGludm9rZSB0aGlzCisgICAgICAgZnVuY3Rpb24uCisgICAgIC0gSWYgdGhpcyBzdGF0ZSBp
cyBhIGNvbnNpc3RlbnQgc3RhdGUgd2l0aCBhIGRlZmF1bHQgYWN0aW9uLCB0aGVuCisgICAgICAg
dGhlIG9ubHkgd2F5IHRoaXMgZnVuY3Rpb24gd2FzIGludm9rZWQgaXMgaWYgdGhlIGRlZmF1bHQg
YWN0aW9uCisgICAgICAgaXMgYW4gZXJyb3IgYWN0aW9uLiAgSW4gdGhhdCBjYXNlLCBkb24ndCBj
aGVjayBmb3IgZXhwZWN0ZWQKKyAgICAgICB0b2tlbnMgYmVjYXVzZSB0aGVyZSBhcmUgbm9uZS4K
KyAgICAgLSBUaGUgb25seSB3YXkgdGhlcmUgY2FuIGJlIG5vIGxvb2thaGVhZCBwcmVzZW50IChp
biB5eWNoYXIpIGlzIGlmCisgICAgICAgdGhpcyBzdGF0ZSBpcyBhIGNvbnNpc3RlbnQgc3RhdGUg
d2l0aCBhIGRlZmF1bHQgYWN0aW9uLiAgVGh1cywKKyAgICAgICBkZXRlY3RpbmcgdGhlIGFic2Vu
Y2Ugb2YgYSBsb29rYWhlYWQgaXMgc3VmZmljaWVudCB0byBkZXRlcm1pbmUKKyAgICAgICB0aGF0
IHRoZXJlIGlzIG5vIHVuZXhwZWN0ZWQgb3IgZXhwZWN0ZWQgdG9rZW4gdG8gcmVwb3J0LiAgSW4g
dGhhdAorICAgICAgIGNhc2UsIGp1c3QgcmVwb3J0IGEgc2ltcGxlICJzeW50YXggZXJyb3IiLgor
ICAgICAtIERvbid0IGFzc3VtZSB0aGVyZSBpc24ndCBhIGxvb2thaGVhZCBqdXN0IGJlY2F1c2Ug
dGhpcyBzdGF0ZSBpcyBhCisgICAgICAgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgZGVmYXVsdCBh
Y3Rpb24uICBUaGVyZSBtaWdodCBoYXZlIGJlZW4gYQorICAgICAgIHByZXZpb3VzIGluY29uc2lz
dGVudCBzdGF0ZSwgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgbm9uLWRlZmF1bHQKKyAgICAgICBh
Y3Rpb24sIG9yIHVzZXIgc2VtYW50aWMgYWN0aW9uIHRoYXQgbWFuaXB1bGF0ZWQgeXljaGFyLgor
ICAgICAtIE9mIGNvdXJzZSwgdGhlIGV4cGVjdGVkIHRva2VuIGxpc3QgZGVwZW5kcyBvbiBzdGF0
ZXMgdG8gaGF2ZQorICAgICAgIGNvcnJlY3QgbG9va2FoZWFkIGluZm9ybWF0aW9uLCBhbmQgaXQg
ZGVwZW5kcyBvbiB0aGUgcGFyc2VyIG5vdAorICAgICAgIHRvIHBlcmZvcm0gZXh0cmEgcmVkdWN0
aW9ucyBhZnRlciBmZXRjaGluZyBhIGxvb2thaGVhZCBmcm9tIHRoZQorICAgICAgIHNjYW5uZXIg
YW5kIGJlZm9yZSBkZXRlY3RpbmcgYSBzeW50YXggZXJyb3IuICBUaHVzLCBzdGF0ZSBtZXJnaW5n
CisgICAgICAgKGZyb20gTEFMUiBvciBJRUxSKSBhbmQgZGVmYXVsdCByZWR1Y3Rpb25zIGNvcnJ1
cHQgdGhlIGV4cGVjdGVkCisgICAgICAgdG9rZW4gbGlzdC4gIEhvd2V2ZXIsIHRoZSBsaXN0IGlz
IGNvcnJlY3QgZm9yIGNhbm9uaWNhbCBMUiB3aXRoCisgICAgICAgb25lIGV4Y2VwdGlvbjogaXQg
d2lsbCBzdGlsbCBjb250YWluIGFueSB0b2tlbiB0aGF0IHdpbGwgbm90IGJlCisgICAgICAgYWNj
ZXB0ZWQgZHVlIHRvIGFuIGVycm9yIGFjdGlvbiBpbiBhIGxhdGVyIHN0YXRlLgorICAqLworICBp
ZiAoeXl0b2tlbiAhPSBZWUVNUFRZKQorICAgIHsKKyAgICAgIGludCB5eW4gPSB5eXBhY3RbKnl5
c3NwXTsKKyAgICAgIHl5YXJnW3l5Y291bnQrK10gPSB5eXRuYW1lW3l5dG9rZW5dOworICAgICAg
aWYgKCF5eXBhY3RfdmFsdWVfaXNfZGVmYXVsdCAoeXluKSkKKyAgICAgICAgeworICAgICAgICAg
IC8qIFN0YXJ0IFlZWCBhdCAtWVlOIGlmIG5lZ2F0aXZlIHRvIGF2b2lkIG5lZ2F0aXZlIGluZGV4
ZXMgaW4KKyAgICAgICAgICAgICBZWUNIRUNLLiAgSW4gb3RoZXIgd29yZHMsIHNraXAgdGhlIGZp
cnN0IC1ZWU4gYWN0aW9ucyBmb3IKKyAgICAgICAgICAgICB0aGlzIHN0YXRlIGJlY2F1c2UgdGhl
eSBhcmUgZGVmYXVsdCBhY3Rpb25zLiAgKi8KKyAgICAgICAgICBpbnQgeXl4YmVnaW4gPSB5eW4g
PCAwID8gLXl5biA6IDA7CisgICAgICAgICAgLyogU3RheSB3aXRoaW4gYm91bmRzIG9mIGJvdGgg
eXljaGVjayBhbmQgeXl0bmFtZS4gICovCisgICAgICAgICAgaW50IHl5Y2hlY2tsaW0gPSBZWUxB
U1QgLSB5eW4gKyAxOworICAgICAgICAgIGludCB5eXhlbmQgPSB5eWNoZWNrbGltIDwgWVlOVE9L
RU5TID8geXljaGVja2xpbSA6IFlZTlRPS0VOUzsKKyAgICAgICAgICBpbnQgeXl4OworCisgICAg
ICAgICAgZm9yICh5eXggPSB5eXhiZWdpbjsgeXl4IDwgeXl4ZW5kOyArK3l5eCkKKyAgICAgICAg
ICAgIGlmICh5eWNoZWNrW3l5eCArIHl5bl0gPT0geXl4ICYmIHl5eCAhPSBZWVRFUlJPUgorICAg
ICAgICAgICAgICAgICYmICF5eXRhYmxlX3ZhbHVlX2lzX2Vycm9yICh5eXRhYmxlW3l5eCArIHl5
bl0pKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHl5Y291bnQgPT0gWVlF
UlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgeXljb3VudCA9IDE7CisgICAgICAgICAgICAgICAgICAgIHl5c2l6ZSA9IHl5
c2l6ZTA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHl5YXJnW3l5Y291bnQrK10gPSB5eXRuYW1lW3l5eF07CisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgWVlTSVpFX1QgeXlzaXplMSA9IHl5c2l6ZSAr
IHl5dG5hbWVyciAoWVlfTlVMTCwgeXl0bmFtZVt5eXhdKTsKKyAgICAgICAgICAgICAgICAgIGlm
ICghICh5eXNpemUgPD0geXlzaXplMQorICAgICAgICAgICAgICAgICAgICAgICAgICYmIHl5c2l6
ZTEgPD0gWVlTVEFDS19BTExPQ19NQVhJTVVNKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IDI7CisgICAgICAgICAgICAgICAgICB5eXNpemUgPSB5eXNpemUxOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgIHN3aXRjaCAoeXljb3Vu
dCkKKyAgICB7CisjIGRlZmluZSBZWUNBU0VfKE4sIFMpICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgIGNhc2UgTjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5
eWZvcm1hdCA9IFM7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBicmVhaworICAgICAg
WVlDQVNFXygwLCBZWV8oInN5bnRheCBlcnJvciIpKTsKKyAgICAgIFlZQ0FTRV8oMSwgWVlfKCJz
eW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiKSk7CisgICAgICBZWUNBU0VfKDIsIFlZXygic3lu
dGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMiKSk7CisgICAgICBZWUNBU0Vf
KDMsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMi
KSk7CisgICAgICBZWUNBU0VfKDQsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBl
eHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMiKSk7CisgICAgICBZWUNBU0VfKDUsIFlZXygic3ludGF4
IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMgb3IgJXMiKSk7
CisjIHVuZGVmIFlZQ0FTRV8KKyAgICB9CisKKyAgeworICAgIFlZU0laRV9UIHl5c2l6ZTEgPSB5
eXNpemUgKyB5eXN0cmxlbiAoeXlmb3JtYXQpOworICAgIGlmICghICh5eXNpemUgPD0geXlzaXpl
MSAmJiB5eXNpemUxIDw9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkpCisgICAgICByZXR1cm4gMjsK
KyAgICB5eXNpemUgPSB5eXNpemUxOworICB9CisKKyAgaWYgKCp5eW1zZ19hbGxvYyA8IHl5c2l6
ZSkKKyAgICB7CisgICAgICAqeXltc2dfYWxsb2MgPSAyICogeXlzaXplOworICAgICAgaWYgKCEg
KHl5c2l6ZSA8PSAqeXltc2dfYWxsb2MKKyAgICAgICAgICAgICAmJiAqeXltc2dfYWxsb2MgPD0g
WVlTVEFDS19BTExPQ19NQVhJTVVNKSkKKyAgICAgICAgKnl5bXNnX2FsbG9jID0gWVlTVEFDS19B
TExPQ19NQVhJTVVNOworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgIC8qIEF2b2lkIHNwcmlu
dGYsIGFzIHRoYXQgaW5mcmluZ2VzIG9uIHRoZSB1c2VyJ3MgbmFtZSBzcGFjZS4KKyAgICAgRG9u
J3QgaGF2ZSB1bmRlZmluZWQgYmVoYXZpb3IgZXZlbiBpZiB0aGUgdHJhbnNsYXRpb24KKyAgICAg
cHJvZHVjZWQgYSBzdHJpbmcgd2l0aCB0aGUgd3JvbmcgbnVtYmVyIG9mICIlcyJzLiAgKi8KKyAg
eworICAgIGNoYXIgKnl5cCA9ICp5eW1zZzsKKyAgICBpbnQgeXlpID0gMDsKKyAgICB3aGlsZSAo
KCp5eXAgPSAqeXlmb3JtYXQpICE9ICdcMCcpCisgICAgICBpZiAoKnl5cCA9PSAnJScgJiYgeXlm
b3JtYXRbMV0gPT0gJ3MnICYmIHl5aSA8IHl5Y291bnQpCisgICAgICAgIHsKKyAgICAgICAgICB5
eXAgKz0geXl0bmFtZXJyICh5eXAsIHl5YXJnW3l5aSsrXSk7CisgICAgICAgICAgeXlmb3JtYXQg
Kz0gMjsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgeXlwKys7
CisgICAgICAgICAgeXlmb3JtYXQrKzsKKyAgICAgICAgfQorICB9CisgIHJldHVybiAwOworfQor
I2VuZGlmIC8qIFlZRVJST1JfVkVSQk9TRSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBSZWxlYXNlIHRoZSBtZW1vcnkgYXNzb2NpYXRl
ZCB0byB0aGlzIHN5bWJvbC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovCisKKy8qQVJHU1VTRUQqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8
IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwg
ZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eWRlc3RydWN0IChjb25zdCBjaGFyICp5
eW1zZywgaW50IHl5dHlwZSwgWVlTVFlQRSAqeXl2YWx1ZXAsIFlZTFRZUEUgKnl5bG9jYXRpb25w
LCBUUGFyc2VDb250ZXh0KiBjb250ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eWRlc3RydWN0
ICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAsIGNvbnRleHQpCisgICAgY29u
c3QgY2hhciAqeXltc2c7CisgICAgaW50IHl5dHlwZTsKKyAgICBZWVNUWVBFICp5eXZhbHVlcDsK
KyAgICBZWUxUWVBFICp5eWxvY2F0aW9ucDsKKyAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0Owor
I2VuZGlmCit7CisgIFlZVVNFICh5eXZhbHVlcCk7CisgIFlZVVNFICh5eWxvY2F0aW9ucCk7Cisg
IFlZVVNFIChjb250ZXh0KTsKKworICBpZiAoIXl5bXNnKQorICAgIHl5bXNnID0gIkRlbGV0aW5n
IjsKKyAgWVlfU1lNQk9MX1BSSU5UICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlv
bnApOworCisgIFlZVVNFICh5eXR5cGUpOworfQorCisKKworCisvKi0tLS0tLS0tLS0uCit8IHl5
cGFyc2UuICB8CitgLS0tLS0tLS0tLSovCisKKyNpZmRlZiBZWVBBUlNFX1BBUkFNCisjaWYgKGRl
ZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5l
ZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQoraW50Cit5eXBhcnNlICh2b2lkICpZ
WVBBUlNFX1BBUkFNKQorI2Vsc2UKK2ludAoreXlwYXJzZSAoWVlQQVJTRV9QQVJBTSkKKyAgICB2
b2lkICpZWVBBUlNFX1BBUkFNOworI2VuZGlmCisjZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0gKi8K
KyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8
fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitpbnQKK3l5cGFyc2Ug
KFRQYXJzZUNvbnRleHQqIGNvbnRleHQpCisjZWxzZQoraW50Cit5eXBhcnNlIChjb250ZXh0KQor
ICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQ7CisjZW5kaWYKKyNlbmRpZgoreworLyogVGhlIGxv
b2thaGVhZCBzeW1ib2wuICAqLworaW50IHl5Y2hhcjsKKworCisjaWYgZGVmaW5lZCBfX0dOVUNf
XyAmJiA0MDcgPD0gX19HTlVDX18gKiAxMDAgKyBfX0dOVUNfTUlOT1JfXworLyogU3VwcHJlc3Mg
YW4gaW5jb3JyZWN0IGRpYWdub3N0aWMgYWJvdXQgeXlsdmFsIGJlaW5nIHVuaW5pdGlhbGl6ZWQu
ICAqLworIyBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4gXAorICAg
IF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBwdXNoIikgXAorICAgIF9QcmFnbWEgKCJHQ0MgZGlh
Z25vc3RpYyBpZ25vcmVkIFwiLVd1bmluaXRpYWxpemVkXCIiKVwKKyAgICBfUHJhZ21hICgiR0ND
IGRpYWdub3N0aWMgaWdub3JlZCBcIi1XbWF5YmUtdW5pbml0aWFsaXplZFwiIikKKyMgZGVmaW5l
IFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORCBcCisgICAgX1ByYWdtYSAoIkdDQyBk
aWFnbm9zdGljIHBvcCIpCisjZWxzZQorLyogRGVmYXVsdCB2YWx1ZSB1c2VkIGZvciBpbml0aWFs
aXphdGlvbiwgZm9yIHBhY2lmeWluZyBvbGRlciBHQ0NzCisgICBvciBub24tR0NDIGNvbXBpbGVy
cy4gICovCitzdGF0aWMgWVlTVFlQRSB5eXZhbF9kZWZhdWx0OworIyBkZWZpbmUgWVlfSU5JVElB
TF9WQUxVRShWYWx1ZSkgPSBWYWx1ZQorI2VuZGlmCitzdGF0aWMgWVlMVFlQRSB5eWxvY19kZWZh
dWx0CisjIGlmIGRlZmluZWQgWVlMVFlQRV9JU19UUklWSUFMICYmIFlZTFRZUEVfSVNfVFJJVklB
TAorICA9IHsgMSwgMSwgMSwgMSB9CisjIGVuZGlmCis7CisjaWZuZGVmIFlZX0lHTk9SRV9NQVlC
RV9VTklOSVRJQUxJWkVEX0JFR0lOCisjIGRlZmluZSBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFM
SVpFRF9CRUdJTgorIyBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5ECisj
ZW5kaWYKKyNpZm5kZWYgWVlfSU5JVElBTF9WQUxVRQorIyBkZWZpbmUgWVlfSU5JVElBTF9WQUxV
RShWYWx1ZSkgLyogTm90aGluZy4gKi8KKyNlbmRpZgorCisvKiBUaGUgc2VtYW50aWMgdmFsdWUg
b2YgdGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLworWVlTVFlQRSB5eWx2YWwgWVlfSU5JVElBTF9W
QUxVRSh5eXZhbF9kZWZhdWx0KTsKKworLyogTG9jYXRpb24gZGF0YSBmb3IgdGhlIGxvb2thaGVh
ZCBzeW1ib2wuICAqLworWVlMVFlQRSB5eWxsb2MgPSB5eWxvY19kZWZhdWx0OworCisKKyAgICAv
KiBOdW1iZXIgb2Ygc3ludGF4IGVycm9ycyBzbyBmYXIuICAqLworICAgIGludCB5eW5lcnJzOwor
CisgICAgaW50IHl5c3RhdGU7CisgICAgLyogTnVtYmVyIG9mIHRva2VucyB0byBzaGlmdCBiZWZv
cmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCisgICAgaW50IHl5ZXJyc3RhdHVzOworCisg
ICAgLyogVGhlIHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6CisgICAgICAgYHl5c3MnOiByZWxhdGVk
IHRvIHN0YXRlcy4KKyAgICAgICBgeXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLgor
ICAgICAgIGB5eWxzJzogcmVsYXRlZCB0byBsb2NhdGlvbnMuCisKKyAgICAgICBSZWZlciB0byB0
aGUgc3RhY2tzIHRocm91Z2ggc2VwYXJhdGUgcG9pbnRlcnMsIHRvIGFsbG93IHl5b3ZlcmZsb3cK
KyAgICAgICB0byByZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlLiAgKi8KKworICAgIC8qIFRoZSBz
dGF0ZSBzdGFjay4gICovCisgICAgeXl0eXBlX2ludDE2IHl5c3NhW1lZSU5JVERFUFRIXTsKKyAg
ICB5eXR5cGVfaW50MTYgKnl5c3M7CisgICAgeXl0eXBlX2ludDE2ICp5eXNzcDsKKworICAgIC8q
IFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCisgICAgWVlTVFlQRSB5eXZzYVtZWUlOSVRE
RVBUSF07CisgICAgWVlTVFlQRSAqeXl2czsKKyAgICBZWVNUWVBFICp5eXZzcDsKKworICAgIC8q
IFRoZSBsb2NhdGlvbiBzdGFjay4gICovCisgICAgWVlMVFlQRSB5eWxzYVtZWUlOSVRERVBUSF07
CisgICAgWVlMVFlQRSAqeXlsczsKKyAgICBZWUxUWVBFICp5eWxzcDsKKworICAgIC8qIFRoZSBs
b2NhdGlvbnMgd2hlcmUgdGhlIGVycm9yIHN0YXJ0ZWQgYW5kIGVuZGVkLiAgKi8KKyAgICBZWUxU
WVBFIHl5ZXJyb3JfcmFuZ2VbM107CisKKyAgICBZWVNJWkVfVCB5eXN0YWNrc2l6ZTsKKworICBp
bnQgeXluOworICBpbnQgeXlyZXN1bHQ7CisgIC8qIExvb2thaGVhZCB0b2tlbiBhcyBhbiBpbnRl
cm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KKyAgaW50IHl5dG9rZW4gPSAwOwor
ICAvKiBUaGUgdmFyaWFibGVzIHVzZWQgdG8gcmV0dXJuIHNlbWFudGljIHZhbHVlIGFuZCBsb2Nh
dGlvbiBmcm9tIHRoZQorICAgICBhY3Rpb24gcm91dGluZXMuICAqLworICBZWVNUWVBFIHl5dmFs
OworICBZWUxUWVBFIHl5bG9jOworCisjaWYgWVlFUlJPUl9WRVJCT1NFCisgIC8qIEJ1ZmZlciBm
b3IgZXJyb3IgbWVzc2FnZXMsIGFuZCBpdHMgYWxsb2NhdGVkIHNpemUuICAqLworICBjaGFyIHl5
bXNnYnVmWzEyOF07CisgIGNoYXIgKnl5bXNnID0geXltc2didWY7CisgIFlZU0laRV9UIHl5bXNn
X2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOworI2VuZGlmCisKKyNkZWZpbmUgWVlQT1BTVEFDSyhO
KSAgICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChOKSwgeXlsc3AgLT0gKE4pKQorCisgIC8qIFRo
ZSBudW1iZXIgb2Ygc3ltYm9scyBvbiB0aGUgUkhTIG9mIHRoZSByZWR1Y2VkIHJ1bGUuCisgICAg
IEtlZXAgdG8gemVybyB3aGVuIG5vIHN5bWJvbCBzaG91bGQgYmUgcG9wcGVkLiAgKi8KKyAgaW50
IHl5bGVuID0gMDsKKworICB5eXNzcCA9IHl5c3MgPSB5eXNzYTsKKyAgeXl2c3AgPSB5eXZzID0g
eXl2c2E7CisgIHl5bHNwID0geXlscyA9IHl5bHNhOworICB5eXN0YWNrc2l6ZSA9IFlZSU5JVERF
UFRIOworCisgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YXJ0aW5nIHBhcnNlXG4iKSk7CisKKyAg
eXlzdGF0ZSA9IDA7CisgIHl5ZXJyc3RhdHVzID0gMDsKKyAgeXluZXJycyA9IDA7CisgIHl5Y2hh
ciA9IFlZRU1QVFk7IC8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCisgIHl5bHNwWzBd
ID0geXlsbG9jOworICBnb3RvIHl5c2V0c3RhdGU7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eW5ld3N0YXRlIC0t
IFB1c2ggYSBuZXcgc3RhdGUsIHdoaWNoIGlzIGZvdW5kIGluIHl5c3RhdGUuICB8CitgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
KyB5eW5ld3N0YXRlOgorICAvKiBJbiBhbGwgY2FzZXMsIHdoZW4geW91IGdldCBoZXJlLCB0aGUg
dmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrcworICAgICBoYXZlIGp1c3QgYmVlbiBwdXNoZWQuICBT
byBwdXNoaW5nIGEgc3RhdGUgaGVyZSBldmVucyB0aGUgc3RhY2tzLiAgKi8KKyAgeXlzc3ArKzsK
KworIHl5c2V0c3RhdGU6CisgICp5eXNzcCA9IHl5c3RhdGU7CisKKyAgaWYgKHl5c3MgKyB5eXN0
YWNrc2l6ZSAtIDEgPD0geXlzc3ApCisgICAgeworICAgICAgLyogR2V0IHRoZSBjdXJyZW50IHVz
ZWQgc2l6ZSBvZiB0aGUgdGhyZWUgc3RhY2tzLCBpbiBlbGVtZW50cy4gICovCisgICAgICBZWVNJ
WkVfVCB5eXNpemUgPSB5eXNzcCAtIHl5c3MgKyAxOworCisjaWZkZWYgeXlvdmVyZmxvdworICAg
ICAgeworCS8qIEdpdmUgdXNlciBhIGNoYW5jZSB0byByZWFsbG9jYXRlIHRoZSBzdGFjay4gIFVz
ZSBjb3BpZXMgb2YKKwkgICB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJl
YWwgb25lcyBpbnRvCisJICAgbWVtb3J5LiAgKi8KKwlZWVNUWVBFICp5eXZzMSA9IHl5dnM7CisJ
eXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7CisJWVlMVFlQRSAqeXlsczEgPSB5eWxzOworCisJ
LyogRWFjaCBzdGFjayBwb2ludGVyIGFkZHJlc3MgaXMgZm9sbG93ZWQgYnkgdGhlIHNpemUgb2Yg
dGhlCisJICAgZGF0YSBpbiB1c2UgaW4gdGhhdCBzdGFjaywgaW4gYnl0ZXMuICBUaGlzIHVzZWQg
dG8gYmUgYQorCSAgIGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0IHRoZSB0d28gZXh0cmEgYXJncywg
YnV0IHRoYXQgbWlnaHQKKwkgICBiZSB1bmRlZmluZWQgaWYgeXlvdmVyZmxvdyBpcyBhIG1hY3Jv
LiAgKi8KKwl5eW92ZXJmbG93IChZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSwKKwkJICAgICZ5eXNz
MSwgeXlzaXplICogc2l6ZW9mICgqeXlzc3ApLAorCQkgICAgJnl5dnMxLCB5eXNpemUgKiBzaXpl
b2YgKCp5eXZzcCksCisJCSAgICAmeXlsczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5bHNwKSwKKwkJ
ICAgICZ5eXN0YWNrc2l6ZSk7CisKKwl5eWxzID0geXlsczE7CisJeXlzcyA9IHl5c3MxOworCXl5
dnMgPSB5eXZzMTsKKyAgICAgIH0KKyNlbHNlIC8qIG5vIHl5b3ZlcmZsb3cgKi8KKyMgaWZuZGVm
IFlZU1RBQ0tfUkVMT0NBVEUKKyAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7CisjIGVsc2UKKyAg
ICAgIC8qIEV4dGVuZCB0aGUgc3RhY2sgb3VyIG93biB3YXkuICAqLworICAgICAgaWYgKFlZTUFY
REVQVEggPD0geXlzdGFja3NpemUpCisJZ290byB5eWV4aGF1c3RlZGxhYjsKKyAgICAgIHl5c3Rh
Y2tzaXplICo9IDI7CisgICAgICBpZiAoWVlNQVhERVBUSCA8IHl5c3RhY2tzaXplKQorCXl5c3Rh
Y2tzaXplID0gWVlNQVhERVBUSDsKKworICAgICAgeworCXl5dHlwZV9pbnQxNiAqeXlzczEgPSB5
eXNzOworCXVuaW9uIHl5YWxsb2MgKnl5cHRyID0KKwkgICh1bmlvbiB5eWFsbG9jICopIFlZU1RB
Q0tfQUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7CisJaWYgKCEgeXlwdHIpCisJ
ICBnb3RvIHl5ZXhoYXVzdGVkbGFiOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3NfYWxsb2MsIHl5
c3MpOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnNfYWxsb2MsIHl5dnMpOworCVlZU1RBQ0tfUkVM
T0NBVEUgKHl5bHNfYWxsb2MsIHl5bHMpOworIyAgdW5kZWYgWVlTVEFDS19SRUxPQ0FURQorCWlm
ICh5eXNzMSAhPSB5eXNzYSkKKwkgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOworICAgICAgfQorIyBl
bmRpZgorI2VuZGlmIC8qIG5vIHl5b3ZlcmZsb3cgKi8KKworICAgICAgeXlzc3AgPSB5eXNzICsg
eXlzaXplIC0gMTsKKyAgICAgIHl5dnNwID0geXl2cyArIHl5c2l6ZSAtIDE7CisgICAgICB5eWxz
cCA9IHl5bHMgKyB5eXNpemUgLSAxOworCisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFj
ayBzaXplIGluY3JlYXNlZCB0byAlbHVcbiIsCisJCSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0
YWNrc2l6ZSkpOworCisgICAgICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkK
KwlZWUFCT1JUOworICAgIH0KKworICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0
ZSAlZFxuIiwgeXlzdGF0ZSkpOworCisgIGlmICh5eXN0YXRlID09IFlZRklOQUwpCisgICAgWVlB
Q0NFUFQ7CisKKyAgZ290byB5eWJhY2t1cDsKKworLyotLS0tLS0tLS0tLS4KK3wgeXliYWNrdXAu
ICB8CitgLS0tLS0tLS0tLS0qLworeXliYWNrdXA6CisKKyAgLyogRG8gYXBwcm9wcmlhdGUgcHJv
Y2Vzc2luZyBnaXZlbiB0aGUgY3VycmVudCBzdGF0ZS4gIFJlYWQgYQorICAgICBsb29rYWhlYWQg
dG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworCisg
IC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0IHJlZmVyZW5jZSB0byBs
b29rYWhlYWQgdG9rZW4uICAqLworICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisgIGlmICh5eXBh
Y3RfdmFsdWVfaXNfZGVmYXVsdCAoeXluKSkKKyAgICBnb3RvIHl5ZGVmYXVsdDsKKworICAvKiBO
b3Qga25vd24gPT4gZ2V0IGEgbG9va2FoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBv
bmUuICAqLworCisgIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRiBvciBhIHZh
bGlkIGxvb2thaGVhZCBzeW1ib2wuICAqLworICBpZiAoeXljaGFyID09IFlZRU1QVFkpCisgICAg
eworICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiUmVhZGluZyBhIHRva2VuOiAiKSk7CisgICAg
ICB5eWNoYXIgPSBZWUxFWDsKKyAgICB9CisKKyAgaWYgKHl5Y2hhciA8PSBZWUVPRikKKyAgICB7
CisgICAgICB5eWNoYXIgPSB5eXRva2VuID0gWVlFT0Y7CisgICAgICBZWURQUklOVEYgKChzdGRl
cnIsICJOb3cgYXQgZW5kIG9mIGlucHV0LlxuIikpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAg
ICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXljaGFyKTsKKyAgICAgIFlZX1NZTUJPTF9QUklO
VCAoIk5leHQgdG9rZW4gaXMiLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKKyAgICB9CisK
KyAgLyogSWYgdGhlIHByb3BlciBhY3Rpb24gb24gc2VlaW5nIHRva2VuIFlZVE9LRU4gaXMgdG8g
cmVkdWNlIG9yIHRvCisgICAgIGRldGVjdCBhbiBlcnJvciwgdGFrZSB0aGF0IGFjdGlvbi4gICov
CisgIHl5biArPSB5eXRva2VuOworICBpZiAoeXluIDwgMCB8fCBZWUxBU1QgPCB5eW4gfHwgeXlj
aGVja1t5eW5dICE9IHl5dG9rZW4pCisgICAgZ290byB5eWRlZmF1bHQ7CisgIHl5biA9IHl5dGFi
bGVbeXluXTsKKyAgaWYgKHl5biA8PSAwKQorICAgIHsKKyAgICAgIGlmICh5eXRhYmxlX3ZhbHVl
X2lzX2Vycm9yICh5eW4pKQorICAgICAgICBnb3RvIHl5ZXJybGFiOworICAgICAgeXluID0gLXl5
bjsKKyAgICAgIGdvdG8geXlyZWR1Y2U7CisgICAgfQorCisgIC8qIENvdW50IHRva2VucyBzaGlm
dGVkIHNpbmNlIGVycm9yOyBhZnRlciB0aHJlZSwgdHVybiBvZmYgZXJyb3IKKyAgICAgc3RhdHVz
LiAgKi8KKyAgaWYgKHl5ZXJyc3RhdHVzKQorICAgIHl5ZXJyc3RhdHVzLS07CisKKyAgLyogU2hp
ZnQgdGhlIGxvb2thaGVhZCB0b2tlbi4gICovCisgIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5n
IiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7CisKKyAgLyogRGlzY2FyZCB0aGUgc2hpZnRl
ZCB0b2tlbi4gICovCisgIHl5Y2hhciA9IFlZRU1QVFk7CisKKyAgeXlzdGF0ZSA9IHl5bjsKKyAg
WVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4KKyAgKisreXl2c3AgPSB5eWx2YWw7
CisgIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORAorICAqKyt5eWxzcCA9IHl5bGxv
YzsKKyAgZ290byB5eW5ld3N0YXRlOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZGVmYXVsdCAtLSBkbyB0aGUg
ZGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBjdXJyZW50IHN0YXRlLiAgfAorYC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZGVmYXVs
dDoKKyAgeXluID0geXlkZWZhY3RbeXlzdGF0ZV07CisgIGlmICh5eW4gPT0gMCkKKyAgICBnb3Rv
IHl5ZXJybGFiOworICBnb3RvIHl5cmVkdWNlOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0uCit8IHl5cmVkdWNlIC0tIERvIGEgcmVkdWN0aW9uLiAgfAorYC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5cmVkdWNlOgorICAvKiB5eW4gaXMgdGhlIG51bWJlciBv
ZiBhIHJ1bGUgdG8gcmVkdWNlIHdpdGguICAqLworICB5eWxlbiA9IHl5cjJbeXluXTsKKworICAv
KiBJZiBZWUxFTiBpcyBub256ZXJvLCBpbXBsZW1lbnQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhl
IGFjdGlvbjoKKyAgICAgYCQkID0gJDEnLgorCisgICAgIE90aGVyd2lzZSwgdGhlIGZvbGxvd2lu
ZyBsaW5lIHNldHMgWVlWQUwgdG8gZ2FyYmFnZS4KKyAgICAgVGhpcyBiZWhhdmlvciBpcyB1bmRv
Y3VtZW50ZWQgYW5kIEJpc29uCisgICAgIHVzZXJzIHNob3VsZCBub3QgcmVseSB1cG9uIGl0LiAg
QXNzaWduaW5nIHRvIFlZVkFMCisgICAgIHVuY29uZGl0aW9uYWxseSBtYWtlcyB0aGUgcGFyc2Vy
IGEgYml0IHNtYWxsZXIsIGFuZCBpdCBhdm9pZHMgYQorICAgICBHQ0Mgd2FybmluZyB0aGF0IFlZ
VkFMIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQuICAqLworICB5eXZhbCA9IHl5dnNwWzEteXls
ZW5dOworCisgIC8qIERlZmF1bHQgbG9jYXRpb24uICAqLworICBZWUxMT0NfREVGQVVMVCAoeXls
b2MsICh5eWxzcCAtIHl5bGVuKSwgeXlsZW4pOworICBZWV9SRURVQ0VfUFJJTlQgKHl5bik7Cisg
IHN3aXRjaCAoeXluKQorICAgIHsKKyAgICAgICAgY2FzZSA0OgorCisgICAgeworICAgICAgICAv
LyBUaGUgc3ltYm9sIHRhYmxlIHNlYXJjaCB3YXMgZG9uZSBpbiB0aGUgbGV4aWNhbCBwaGFzZQor
ICAgICAgICBjb25zdCBUU3ltYm9sICpzeW1ib2wgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN5
bWJvbDsKKyAgICAgICAgY29uc3QgVFZhcmlhYmxlICp2YXJpYWJsZSA9IDA7CisKKyAgICAgICAg
aWYgKCFzeW1ib2wpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxz
cFsoMSkgLSAoMSldKSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciIsICh5eXZzcFsoMSkgLSAoMSld
LmxleCkuc3RyaW5nLT5jX3N0cigpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICghc3ltYm9sLT5pc1ZhcmlhYmxlKCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgInZh
cmlhYmxlIGV4cGVjdGVkIiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkp
OworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxjb25zdCBU
VmFyaWFibGUqPihzeW1ib2wpOworCisgICAgICAgICAgICBpZiAoY29udGV4dC0+c3ltYm9sVGFi
bGUuZmluZEJ1aWx0SW4odmFyaWFibGUtPmdldE5hbWUoKSkgJiYKKyAgICAgICAgICAgICAgICAh
dmFyaWFibGUtPmdldEV4dGVuc2lvbigpLmVtcHR5KCkgJiYKKyAgICAgICAgICAgICAgICBjb250
ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgdmFyaWFibGUtPmdl
dEV4dGVuc2lvbigpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXZhcmlh
YmxlKQorICAgICAgICB7CisgICAgICAgICAgICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRl
ZmluZWQpOworICAgICAgICAgICAgVFZhcmlhYmxlICpmYWtlVmFyaWFibGUgPSBuZXcgVFZhcmlh
YmxlKCh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLCB0eXBlKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgqZmFrZVZhcmlhYmxlKTsKKyAgICAgICAgICAgIHZh
cmlhYmxlID0gZmFrZVZhcmlhYmxlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHZhcmlhYmxl
LT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSB2YXJpYWJsZS0+Z2V0Q29uc3RQb2lu
dGVyKCk7CisgICAgICAgICAgICBUVHlwZSB0KHZhcmlhYmxlLT5nZXRUeXBlKCkpOworICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24oY29uc3RBcnJheSwgdCwgKHl5bHNwWygxKSAtICgxKV0pKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wo
dmFyaWFibGUtPmdldFVuaXF1ZUlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldE5hbWUoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eWxzcFsoMSkg
LSAoMSldKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBkb24ndCBkZWxldGUgJDEuc3RyaW5n
LCBpdCdzIHVzZWQgYnkgZXJyb3IgcmVjb3ZlcnksIGFuZCB0aGUgcG9vbAorICAgICAgICAvLyBw
b3Agd2lsbCByZWNsYWltIHRoZSBtZW1vcnkKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA1
OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICB9CisgICAgYnJlYWs7
CisKKyAgY2FzZSA2OgorCisgICAgeworICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5
ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdCgo
eXl2c3BbKDEpIC0gKDEpXS5sZXgpLmkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFy
cmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDEpIC0g
KDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDc6CisKKyAgICB7CisgICAgICAg
IENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAg
ICAgdW5pb25BcnJheS0+c2V0RkNvbnN0KCh5eXZzcFsoMSkgLSAoMSldLmxleCkuZik7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmlu
ZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSA4OgorCisgICAgeworICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0g
bmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdCgoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLmIpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5
LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygxKSAtICgx
KV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5OgorCisgICAgeworICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDoKKworICAg
IHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNh
c2UgMTE6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmFkZEluZGV4RXhwcmVzc2lvbigoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICg0KV0pLCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTI6CisK
KyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgIH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDEzOgorCisgICAgeworICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmlzQXJyYXkoKSkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoKHl5bHNwWygzKSAtICgzKV0pLCAiY2Fubm90IGFwcGx5IGRvdCBvcGVyYXRvciB0byBhbiBh
cnJheSIsICIuIik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgIFRWZWN0b3JGaWVsZHMgZmllbGRzOworICAgICAg
ICAgICAgaWYgKCEgY29udGV4dC0+cGFyc2VWZWN0b3JGaWVsZHMoKih5eXZzcFsoMykgLSAoMyld
LmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0Tm9taW5hbFNpemUoKSwgZmllbGRzLCAoeXlsc3BbKDMpIC0gKDMpXSkpKSB7CisgICAgICAg
ICAgICAgICAgZmllbGRzLm51bSA9IDE7CisgICAgICAgICAgICAgICAgZmllbGRzLm9mZnNldHNb
MF0gPSAwOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsgLy8gY29uc3Rh
bnQgZm9sZGluZyBmb3IgdmVjdG9yIGZpZWxkcworICAgICAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmFkZENvbnN0VmVjdG9yTm9kZShmaWVsZHMs
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDMpIC0g
KDMpXSkpOworICAgICAgICAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSwgRXZxQ29uc3QsIChpbnQpICgqKHl5dnNw
WygzKSAtICgzKV0ubGV4KS5zdHJpbmcpLnNpemUoKSkpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBUU3RyaW5nIHZlY3RvclN0cmluZyA9ICooeXl2c3BbKDMpIC0gKDMp
XS5sZXgpLnN0cmluZzsKKyAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN3aXp6bGUoZmllbGRzLCAoeXlsc3BbKDMpIC0gKDMpXSkp
OworICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BWZWN0b3JTd2l6emxlLCAoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eWxzcFsoMikgLSAoMyldKSk7
CisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBl
KFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRCYXNp
Y1R5cGUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFBy
ZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksIChpbnQpIHZlY3RvclN0cmluZy5zaXplKCkpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgVE1hdHJpeEZpZWxk
cyBmaWVsZHM7CisgICAgICAgICAgICBpZiAoISBjb250ZXh0LT5wYXJzZU1hdHJpeEZpZWxkcygq
KHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXROb21pbmFsU2l6ZSgpLCBmaWVsZHMsICh5eWxzcFsoMykgLSAo
MyldKSkpIHsKKyAgICAgICAgICAgICAgICBmaWVsZHMud2hvbGVSb3cgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICBmaWVsZHMud2hvbGVDb2wgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmaWVs
ZHMucm93ID0gMDsKKyAgICAgICAgICAgICAgICBmaWVsZHMuY29sID0gMDsKKyAgICAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChmaWVsZHMud2hvbGVSb3cgfHwgZmllbGRzLndob2xlQ29sKSB7CisgICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5v
dCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDAp
OworICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVm
aW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDMpIC0gKDMpXSkpOworICAgICAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJ
bmRleChFT3BJbmRleERpcmVjdCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksIGluZGV4LCAoeXlsc3BbKDIpIC0gKDMpXSkpOworICAgICAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5eXZzcFsoMSkgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSxFdnFUZW1wb3Jhcnks
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXROb21pbmFsU2l6
ZSgpKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIENvbnN0YW50VW5p
b24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICB1
bmlvbkFycmF5LT5zZXRJQ29uc3QoZmllbGRzLmNvbCAqICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXROb21pbmFsU2l6ZSgpICsgZmllbGRzLnJvdyk7CisgICAg
ICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBF
dnFDb25zdCksICh5eWxzcFsoMykgLSAoMyldKSk7CisgICAgICAgICAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVP
cEluZGV4RGlyZWN0LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
aW5kZXgsICh5eWxzcFsoMikgLSAoMyldKSk7CisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRCYXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFByZWNpc2lvbigpKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgeworICAgICAgICAgICAgYm9vbCBmaWVs
ZEZvdW5kID0gZmFsc2U7CisgICAgICAgICAgICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldFN0
cnVjdCgpLT5maWVsZHMoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBpOworICAgICAgICAg
ICAgZm9yIChpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAg
IGlmIChmaWVsZHNbaV0tPm5hbWUoKSA9PSAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcp
IHsKKyAgICAgICAgICAgICAgICAgICAgZmllbGRGb3VuZCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChmaWVsZEZvdW5kKSB7CisgICAgICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0g
RXZxQ29uc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gY29udGV4dC0+YWRkQ29uc3RTdHJ1Y3QoKih5eXZzcFsoMykgLSAoMyldLmxleCku
c3RyaW5nLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNw
WygyKSAtICgzKV0pKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZSgq
ZmllbGRzW2ldLT50eXBlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlIHRo
ZSBxdWFsaWZpZXIgb2YgdGhlIHJldHVybiB0eXBlLCBub3Qgb2YgdGhlIHN0cnVjdHVyZSBmaWVs
ZAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXMgdGhlIHN0cnVjdHVyZSBkZWZpbml0aW9u
IGlzIHNoYXJlZCBiZXR3ZWVuIHZhcmlvdXMgc3RydWN0dXJlcy4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZVBvaW50ZXIoKS0+
c2V0UXVhbGlmaWVyKEV2cUNvbnN0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9u
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICAgICAgdW5pb25B
cnJheS0+c2V0SUNvbnN0KGkpOworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGlu
ZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwg
KmZpZWxkc1tpXS0+dHlwZSgpLCAoeXlsc3BbKDMpIC0gKDMpXSkpOworICAgICAgICAgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3RTdHJ1Y3QsICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5bHNwWygyKSAtICgzKV0pKTsKKyAgICAgICAg
ICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKCpmaWVs
ZHNbaV0tPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICIgbm8g
c3VjaCBmaWVsZCBpbiBzdHJ1Y3R1cmUiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+
Y19zdHIoKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiIGZpZWxk
IHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1cmUsIHZlY3Rvciwgb3IgbWF0cml4IG9uIGxlZnQg
aGFuZCBzaWRlIiwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOworICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gZG9uJ3QgZGVsZXRlICQzLnN0cmluZywgaXQncyBm
cm9tIHRoZSBwb29sCisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTQ6CisKKyAgICB7Cisg
ICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwg
IisrIiwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQorICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFBvc3RJbmNy
ZW1lbnQsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3Bb
KDIpIC0gKDIpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT51bmFy
eU9wRXJyb3IoKHl5bHNwWygyKSAtICgyKV0pLCAiKysiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE1OgorCisgICAgeworICAgICAgICBp
ZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksICItLSIsICh5
eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKKyAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQb3N0RGVjcmVtZW50LCAo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgy
KV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9y
KCh5eWxzcFsoMikgLSAoMildKSwgIi0tIiwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNjoKKworICAgIHsKKyAgICAgICAgaWYgKGNvbnRl
eHQtPmludGVnZXJFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLCAiW10iKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTc6CisKKyAg
ICB7CisgICAgICAgIFRGdW5jdGlvbiogZm5DYWxsID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
KS5mdW5jdGlvbjsKKyAgICAgICAgVE9wZXJhdG9yIG9wID0gZm5DYWxsLT5nZXRCdWlsdEluT3Ao
KTsKKworICAgICAgICBpZiAob3AgIT0gRU9wTnVsbCkKKyAgICAgICAgeworICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgIC8vIFRoZW4gdGhpcyBzaG91bGQgYmUgYSBjb25zdHJ1Y3Rvci4KKyAg
ICAgICAgICAgIC8vIERvbid0IGdvIHRocm91Z2ggdGhlIHN5bWJvbCB0YWJsZSBmb3IgY29uc3Ry
dWN0b3JzLgorICAgICAgICAgICAgLy8gVGhlaXIgcGFyYW1ldGVycyB3aWxsIGJlIHZlcmlmaWVk
IGFsZ29yaXRobWljYWxseS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBUVHlwZSB0eXBl
KEVidFZvaWQsIEVicFVuZGVmaW5lZCk7ICAvLyB1c2UgdGhpcyB0byBnZXQgdGhlIHR5cGUgYmFj
aworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmNvbnN0cnVjdG9yRXJyb3JDaGVjaygoeXlsc3Bb
KDEpIC0gKDEpXSksICh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZSwgKmZuQ2Fs
bCwgb3AsICZ0eXBlKSkgeworICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9IDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vCisg
ICAgICAgICAgICAgICAgLy8gSXQncyBhIGNvbnN0cnVjdG9yLCBvZiB0eXBlICd0eXBlJy4KKyAg
ICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9IGNvbnRleHQtPmFkZENvbnN0cnVjdG9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVy
bSkuaW50ZXJtTm9kZSwgJnR5cGUsIG9wLCBmbkNhbGwsICh5eWxzcFsoMSkgLSAoMSldKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPT0gMCkgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IoMCwgb3AsICh5eWxzcFsoMSkgLSAoMSldKSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPnNldFR5cGUodHlwZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLworICAg
ICAgICAgICAgLy8gTm90IGEgY29uc3RydWN0b3IuICBGaW5kIGl0IGluIHRoZSBzeW1ib2wgdGFi
bGUuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uKiBmbkNhbmRp
ZGF0ZTsKKyAgICAgICAgICAgIGJvb2wgYnVpbHRJbjsKKyAgICAgICAgICAgIGZuQ2FuZGlkYXRl
ID0gY29udGV4dC0+ZmluZEZ1bmN0aW9uKCh5eWxzcFsoMSkgLSAoMSldKSwgZm5DYWxsLCAmYnVp
bHRJbik7CisgICAgICAgICAgICBpZiAoZm5DYW5kaWRhdGUpIHsKKyAgICAgICAgICAgICAgICAv
LworICAgICAgICAgICAgICAgIC8vIEEgZGVjbGFyZWQgZnVuY3Rpb24uCisgICAgICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgICAgICBpZiAoYnVpbHRJbiAmJiAhZm5DYW5kaWRhdGUtPmdldEV4
dGVuc2lvbigpLmVtcHR5KCkgJiYKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXh0ZW5z
aW9uRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDEpXSksIGZuQ2FuZGlkYXRlLT5nZXRFeHRlbnNp
b24oKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBvcCA9IGZuQ2FuZGlkYXRlLT5nZXRCdWlsdElu
T3AoKTsKKyAgICAgICAgICAgICAgICBpZiAoYnVpbHRJbiAmJiBvcCAhPSBFT3BOdWxsKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8vIEEgZnVuY3Rpb24g
Y2FsbCBtYXBwZWQgdG8gYSBidWlsdC1pbiBvcGVyYXRpb24uCisgICAgICAgICAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAgICAgICAgIGlmIChmbkNhbmRpZGF0ZS0+Z2V0UGFyYW1Db3VudCgp
ID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBUcmVhdCBpdCBsaWtlIGEgYnVpbHQtaW4gdW5hcnkgb3BlcmF0b3IuCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChv
cCwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCAoeXlsc3BbKDEpIC0gKDEp
XSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJidWlsdCBpbiB1bmFyeSBvcGVy
YXRvciBmdW5jdGlvbi4gIFR5cGU6ICIgPDwgc3RhdGljX2Nhc3Q8VEludGVybVR5cGVkKj4oKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRy
YUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCksICIg
d3Jvbmcgb3BlcmFuZCB0eXBlIiwgIkludGVybmFsIEVycm9yIiwgZXh0cmFJbmZvLmNfc3RyKCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlZRVJST1I7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRl
cm1BZ2dyZWdhdGUsIG9wLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhp
cyBpcyBhIHJlYWwgZnVuY3Rpb24gY2FsbAorCisgICAgICAgICAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdh
dGVPcGVyYXRvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSwgRU9w
RnVuY3Rpb25DYWxsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAgICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoZm5DYW5kaWRhdGUtPmdldFJl
dHVyblR5cGUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBob3cgd2Uga25v
dyB3aGV0aGVyIHRoZSBnaXZlbiBmdW5jdGlvbiBpcyBhIGJ1aWx0SW4gZnVuY3Rpb24gb3IgYSB1
c2VyIGRlZmluZWQgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgLy8gaWYgYnVpbHRJbiA9
PSBmYWxzZSwgaXQncyBhIHVzZXJEZWZpbmVkIC0+IGNvdWxkIGJlIGFuIG92ZXJsb2FkZWQgYnVp
bHRJbiBmdW5jdGlvbiBhbHNvCisgICAgICAgICAgICAgICAgICAgIC8vIGlmIGJ1aWx0SW4gPT0g
dHJ1ZSwgaXQncyBkZWZpbml0ZWx5IGEgYnVpbHRJbiBmdW5jdGlvbiB3aXRoIEVPcE51bGwKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFidWlsdEluKQorICAgICAgICAgICAgICAgICAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRVc2Vy
RGVmaW5lZCgpOworICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNldE5hbWUoZm5DYW5kaWRhdGUtPmdldE1hbmdsZWRO
YW1lKCkpOworCisgICAgICAgICAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbDsKKyAgICAgICAg
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmbkNhbmRpZGF0ZS0+Z2V0UGFyYW1D
b3VudCgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHF1YWwgPSBmbkNhbmRpZGF0
ZS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocXVhbCA9PSBFdnFPdXQgfHwgcXVhbCA9PSBFdnFJbk91dCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0TGluZSgpLCAiYXNzaWduIiwgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgpW2ldLT5n
ZXRBc1R5cGVkKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAi
Q29uc3RhbnQgdmFsdWUgY2Fubm90IGJlIHBhc3NlZCBmb3IgJ291dCcgb3IgJ2lub3V0JyBwYXJh
bWV0ZXJzLiIsICJFcnJvciIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlw
ZShmbkNhbmRpZGF0ZS0+Z2V0UmV0dXJuVHlwZSgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgLy8gZXJyb3IgbWVzc2FnZSB3YXMgcHV0IG91dCBieSBQYUZpbmRGdW5j
dGlvbigpCisgICAgICAgICAgICAgICAgLy8gUHV0IG9uIGEgZHVtbXkgbm9kZSBmb3IgZXJyb3Ig
cmVjb3ZlcnkKKyAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3
IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0RkNvbnN0
KDAuMGYpOworICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBl
KEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygxKSAtICgxKV0pKTsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgZGVsZXRlIGZuQ2FsbDsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAxODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE5OgorCisgICAgeworICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDMpIC0gKDMpXSksICJtZXRob2RzIGFyZSBub3Qg
c3VwcG9ydGVkIiwgIiIpOworICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0pID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKTsKKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAyMDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDIxOgor
CisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVy
bSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMjI6CisKKyAgICB7CisgICAgICAgICh5
eXZhbC5pbnRlcm0pLmZ1bmN0aW9uID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9u
KTsKKyAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtTm9kZSA9IDA7CisgICAgfQorICAgIGJy
ZWFrOworCisgIGNhc2UgMjM6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmZ1bmN0
aW9uID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmZ1bmN0aW9uKTsKKyAgICAgICAgKHl5dmFs
LmludGVybSkuaW50ZXJtTm9kZSA9IDA7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMjQ6
CisKKyAgICB7CisgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7IDAsIG5ldyBUVHlwZSgoeXl2
c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpKSB9OworICAg
ICAgICAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5hZGRQYXJhbWV0ZXIocGFy
YW0pOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5mdW5jdGlvbiA9ICh5eXZzcFsoMSkgLSAoMild
LmludGVybS5mdW5jdGlvbik7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybU5vZGUgPSAo
eXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAyNToKKworICAgIHsKKyAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsg
MCwgbmV3IFRUeXBlKCh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRUeXBlKCkpIH07CisgICAgICAgICh5eXZzcFsoMSkgLSAoMyldLmludGVybSkuZnVuY3Rpb24t
PmFkZFBhcmFtZXRlcihwYXJhbSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uID0g
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5mdW5jdGlvbjsKKyAgICAgICAgKHl5dmFsLmludGVy
bSkuaW50ZXJtTm9kZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZz
cFsoMSkgLSAoMyldLmludGVybSkuaW50ZXJtTm9kZSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CisgICAgfQorICAgIGJyZWFr
OworCisgIGNhc2UgMjY6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24p
ID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKTsKKyAgICB9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAyNzoKKworICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQ29uc3RydWN0
b3IKKyAgICAgICAgLy8KKyAgICAgICAgVE9wZXJhdG9yIG9wID0gRU9wTnVsbDsKKyAgICAgICAg
aWYgKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS51c2VyRGVmKSB7CisgICAgICAgICAg
ICBvcCA9IEVPcENvbnN0cnVjdFN0cnVjdDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHN3aXRjaCAoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5cGUpIHsKKyAgICAgICAg
ICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMSld
LmludGVybS50eXBlKS5tYXRyaXgpIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoKCh5eXZz
cFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zaXplKSB7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgMjogb3AgPSBFT3BDb25zdHJ1Y3RNYXQyOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RNYXQzOyAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RNYXQ0OyAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBz
d2l0Y2goKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnNpemUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSAxOiBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OyBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdFZlYzI7ICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVjdFZlYzM7ICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVjdFZlYzQ7ICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0SW50OgorICAgICAgICAgICAgICAgIHN3aXRj
aCgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuc2l6ZSkgeworICAgICAgICAgICAgICAg
IGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RJbnQ7ICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdElWZWMyOyBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlIDM6IG9wID0gRU9wQ29uc3RydWN0SVZlYzM7IGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RJVmVjNDsgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRCb29sOgorICAgICAg
ICAgICAgICAgIHN3aXRjaCgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuc2l6ZSkgewor
ICAgICAgICAgICAgICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RCb29sOyAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdEJWZWMyOyBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0QlZlYzM7IGJyZWFrOworICAg
ICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RCVmVjNDsgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVs
dDogYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob3AgPT0gRU9wTnVsbCkg
eworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgImNh
bm5vdCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwgZ2V0QmFzaWNTdHJpbmcoKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLnR5cGUpLnR5cGUpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICAgICAgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5cGUg
PSBFYnRGbG9hdDsKKyAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIFRTdHJpbmcgdGVtcFN0cmluZzsKKyAgICAg
ICAgVFR5cGUgdHlwZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkpOworICAgICAgICBU
RnVuY3Rpb24gKmZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigmdGVtcFN0cmluZywgdHlwZSwgb3Ap
OworICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9IGZ1bmN0aW9uOworICAgIH0KKyAg
ICBicmVhazsKKworICBjYXNlIDI4OgorCisgICAgeworICAgICAgICBpZiAoY29udGV4dC0+cmVz
ZXJ2ZWRFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgKih5eXZzcFsoMSkgLSAoMSldLmxl
eCkuc3RyaW5nKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgVFR5
cGUgdHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpOworICAgICAgICBURnVuY3Rpb24gKmZ1bmN0
aW9uID0gbmV3IFRGdW5jdGlvbigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZywgdHlwZSk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gZnVuY3Rpb247CisgICAgfQorICAg
IGJyZWFrOworCisgIGNhc2UgMjk6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDMwOgorCisgICAgeworICAgICAgICBpZiAo
Y29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDIpXSksICIrKyIsICh5eXZz
cFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKKyAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQcmVJbmNyZW1lbnQsICh5eXZz
cFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDEpIC0gKDIpXSks
IGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoKHl5
bHNwWygxKSAtICgyKV0pLCAiKysiLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2
c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBicmVhazsKKworICBjYXNlIDMxOgorCisgICAgeworICAgICAgICBpZiAoY29udGV4dC0+
bFZhbHVlRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDIpXSksICItLSIsICh5eXZzcFsoMikgLSAo
MildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQcmVEZWNyZW1lbnQsICh5eXZzcFsoMikgLSAo
MildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDEpIC0gKDIpXSksIGNvbnRleHQt
PnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoKHl5bHNwWygxKSAt
ICgyKV0pLCAiLS0iLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0g
KDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVh
azsKKworICBjYXNlIDMyOgorCisgICAgeworICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0u
aW50ZXJtKS5vcCAhPSBFT3BOdWxsKSB7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKCh5eXZzcFso
MSkgLSAoMildLmludGVybSkub3AsICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLCAoeXlsc3BbKDEpIC0gKDIpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAg
ICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIGVycm9yT3AgPSAiIjsKKyAgICAgICAgICAgICAgICBzd2l0
Y2goKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5vcCkgeworICAgICAgICAgICAgICAgIGNhc2Ug
RU9wTmVnYXRpdmU6ICAgZXJyb3JPcCA9ICItIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz
ZSBFT3BMb2dpY2FsTm90OiBlcnJvck9wID0gIiEiOyBicmVhazsKKyAgICAgICAgICAgICAgICBk
ZWZhdWx0OiBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udGV4
dC0+dW5hcnlPcEVycm9yKCh5eWxzcFsoMSkgLSAoMildKSwgZXJyb3JPcCwgKHl5dnNwWygyKSAt
ICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAzMzoKKworICAg
IHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BOdWxsOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAz
NDoKKworICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BOZWdhdGl2ZTsgfQorICAgIGJyZWFr
OworCisgIGNhc2UgMzU6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTG9naWNhbE5v
dDsgfQorICAgIGJyZWFrOworCisgIGNhc2UgMzY6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
OyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAzNzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1h
dGgoRU9wTXVsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5
dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyld
KSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3Io
KHl5bHNwWygyKSAtICgzKV0pLCAiKiIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDM4OgorCisgICAgeworICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmlu
YXJ5TWF0aChFT3BEaXYsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAt
ICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BF
cnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICIvIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAg
ICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMzk6CisKKyAgICB7ICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA0MDoKKworICAgIHsKKyAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZEJpbmFyeU1hdGgoRU9wQWRkLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFso
MikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFy
eU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiKyIsICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDQxOgorCisgICAgeworICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQmluYXJ5TWF0aChFT3BTdWIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5
bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+
YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICItIiwgKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNDI6CisKKyAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA0MzoKKworICAgIHsg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDQ0OgorCisgICAgewor
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhhbiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAg
aWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBj
b250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIjwiLCAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5
dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5n
KCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3Rh
bnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAg
dW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9u
KHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXls
c3BbKDIpIC0gKDMpXSkpOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2Ug
NDU6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9s
VGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDAp
IHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0p
LCAiPiIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21w
bGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25b
MV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVk
LCBFdnFDb25zdCksICh5eWxzcFsoMikgLSAoMyldKSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSA0NjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTGVz
c1RoYW5FcXVhbCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5
eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMp
XSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9y
KCh5eWxzcFsoMikgLSAoMyldKSwgIjw9IiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkg
PSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25z
dChmYWxzZSk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShF
YnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygyKSAtICgzKV0pKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDQ3OgorCisgICAgeworICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAg
ICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAg
IGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiPj0iLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwg
KHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3Ry
aW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29u
c3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAg
ICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVu
aW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAo
eXlsc3BbKDIpIC0gKDMpXSkpOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNh
c2UgNDg6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSA0OToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wRXF1YWwsICh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJs
ZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewor
ICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICI9
PSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0
ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0
Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07
CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBF
dnFDb25zdCksICh5eWxzcFsoMikgLSAoMyldKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSA1MDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTm90RXF1
YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250
ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3Bb
KDIpIC0gKDMpXSksICIhPSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2Up
OworICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwg
RWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMikgLSAoMyldKSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA1MToKKworICAgIHsgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDUyOgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KTsgfQorICAgIGJyZWFrOworCisgIGNhc2UgNTM6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
OyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA1NDoKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7
IH0KKyAgICBicmVhazsKKworICBjYXNlIDU1OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0
aChFT3BMb2dpY2FsQW5kLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikg
LSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9w
RXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiJiYiLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25B
cnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0
QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRU
eXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDIpIC0gKDMpXSkp
OworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNTY6CisKKyAgICB7ICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA1NzoKKworICAgIHsKKyAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbFhvciwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAg
aWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBj
b250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIl5eIiwgKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5
eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmlu
ZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0
YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAg
IHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlv
bih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5
bHNwWygyKSAtICgzKV0pKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNl
IDU4OgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQorICAgIGJyZWFrOworCisgIGNhc2Ug
NTk6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxPciwgKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRh
YmxlKTsKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7
CisgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwg
Inx8IiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBs
ZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsx
XTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQs
IEV2cUNvbnN0KSwgKHl5bHNwWygyKSAtICgzKV0pKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBi
cmVhazsKKworICBjYXNlIDYwOgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQorICAgIGJy
ZWFrOworCisgIGNhc2UgNjE6CisKKyAgICB7CisgICAgICAgaWYgKGNvbnRleHQtPmJvb2xFcnJv
ckNoZWNrKCh5eWxzcFsoMikgLSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRTZWxlY3Rpb24oKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5
eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDUpIC0gKDUp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICg1KV0pKTsKKyAgICAgICAg
aWYgKCh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkg
IT0gKHl5dnNwWyg1KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKSkK
KyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IDA7CisKKyAgICAg
ICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAg
ICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoNSldKSwgIjoiLCAoeXl2c3Bb
KDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwg
KHl5dnNwWyg1KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3Ry
aW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWyg1KSAtICg1KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2
MjoKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDYz
OgorCisgICAgeworICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXlsc3Bb
KDIpIC0gKDMpXSksICJhc3NpZ24iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRBc3Np
Z24oKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtKS5vcCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmFzc2lnbkVycm9yKCh5
eWxzcFsoMikgLSAoMyldKSwgImFzc2lnbiIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDY0OgorCisgICAgeyAoeXl2YWwuaW50
ZXJtKS5vcCA9IEVPcEFzc2lnbjsgfQorICAgIGJyZWFrOworCisgIGNhc2UgNjU6CisKKyAgICB7
ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTXVsQXNzaWduOyB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSA2NjoKKworICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BEaXZBc3NpZ247IH0KKyAgICBi
cmVhazsKKworICBjYXNlIDY3OgorCisgICAgeyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcEFkZEFz
c2lnbjsgfQorICAgIGJyZWFrOworCisgIGNhc2UgNjg6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0p
Lm9wID0gRU9wU3ViQXNzaWduOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2OToKKworICAgIHsK
KyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2Ug
NzA6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRDb21tYSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eWxzcFsoMikgLSAoMyldKSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXls
c3BbKDIpIC0gKDMpXSksICIsIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICB9Cisg
ICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNzE6CisKKyAgICB7CisgICAgICAgIGlmIChjb250
ZXh0LT5jb25zdEVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3MjoKKworICAgIHsKKyAg
ICAgICAgVEZ1bmN0aW9uICZmdW5jdGlvbiA9ICooKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5m
dW5jdGlvbik7CisgICAgICAgIAorICAgICAgICBUSW50ZXJtQWdncmVnYXRlICpwcm90b3R5cGUg
PSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgcHJvdG90eXBlLT5zZXRUeXBlKGZ1bmN0
aW9uLmdldFJldHVyblR5cGUoKSk7CisgICAgICAgIHByb3RvdHlwZS0+c2V0TmFtZShmdW5jdGlv
bi5nZXROYW1lKCkpOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBm
dW5jdGlvbi5nZXRQYXJhbUNvdW50KCk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY29u
c3QgVFBhcmFtZXRlciAmcGFyYW0gPSBmdW5jdGlvbi5nZXRQYXJhbShpKTsKKyAgICAgICAgICAg
IGlmIChwYXJhbS5uYW1lICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVFZh
cmlhYmxlIHZhcmlhYmxlKHBhcmFtLm5hbWUsICpwYXJhbS50eXBlKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBwcm90b3R5cGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jv
d0FnZ3JlZ2F0ZShwcm90b3R5cGUsIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFy
aWFibGUuZ2V0VW5pcXVlSWQoKSwgdmFyaWFibGUuZ2V0TmFtZSgpLCB2YXJpYWJsZS5nZXRUeXBl
KCksICh5eWxzcFsoMSkgLSAoMildKSksICh5eWxzcFsoMSkgLSAoMildKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJv
dG90eXBlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUocHJvdG90eXBlLCBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICIiLCAqcGFyYW0udHlwZSwgKHl5bHNw
WygxKSAtICgyKV0pKSwgKHl5bHNwWygxKSAtICgyKV0pKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgcHJvdG90eXBlLT5zZXRPcChFT3BQcm90b3R5cGUpOwor
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gcHJvdG90eXBlOworCisgICAgICAg
IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNl
IDczOgorCisgICAgeworICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5pbnRl
cm1BZ2dyZWdhdGUpCisgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmludGVy
bUFnZ3JlZ2F0ZS0+c2V0T3AoRU9wRGVjbGFyYXRpb24pOworICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGU7
CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNzQ6CisKKyAgICB7CisgICAgICAgIGlmICgo
KHl5dnNwWygyKSAtICg0KV0uaW50ZXJtLnByZWNpc2lvbikgPT0gRWJwSGlnaCkgJiYgKGNvbnRl
eHQtPnNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKSAmJiAhY29udGV4dC0+ZnJhZ21l
bnRQcmVjaXNpb25IaWdoKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEp
IC0gKDQpXSksICJwcmVjaXNpb24gaXMgbm90IHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXIi
LCAiaGlnaHAiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoIWNvbnRleHQtPnN5bWJvbFRhYmxlLnNldERlZmF1bHRQcmVjaXNpb24oICh5
eXZzcFsoMykgLSAoNCldLmludGVybS50eXBlKSwgKHl5dnNwWygyKSAtICg0KV0uaW50ZXJtLnBy
ZWNpc2lvbikgKSkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICg0
KV0pLCAiaWxsZWdhbCB0eXBlIGFyZ3VtZW50IGZvciBkZWZhdWx0IHByZWNpc2lvbiBxdWFsaWZp
ZXIiLCBnZXRCYXNpY1N0cmluZygoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0udHlwZSkudHlwZSkp
OworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNl
IDc1OgorCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBNdWx0aXBsZSBkZWNsYXJhdGlv
bnMgb2YgdGhlIHNhbWUgZnVuY3Rpb24gYXJlIGFsbG93ZWQuCisgICAgICAgIC8vCisgICAgICAg
IC8vIElmIHRoaXMgaXMgYSBkZWZpbml0aW9uLCB0aGUgZGVmaW5pdGlvbiBwcm9kdWN0aW9uIGNv
ZGUgd2lsbCBjaGVjayBmb3IgcmVkZWZpbml0aW9ucworICAgICAgICAvLyAod2UgZG9uJ3Qga25v
dyBhdCB0aGlzIHBvaW50IGlmIGl0J3MgYSBkZWZpbml0aW9uIG9yIG5vdCkuCisgICAgICAgIC8v
CisgICAgICAgIC8vIFJlZGVjbGFyYXRpb25zIGFyZSBhbGxvd2VkLiAgQnV0LCByZXR1cm4gdHlw
ZXMgYW5kIHBhcmFtZXRlciBxdWFsaWZpZXJzIG11c3QgbWF0Y2guCisgICAgICAgIC8vCisgICAg
ICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQt
PnN5bWJvbFRhYmxlLmZpbmQoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0
TWFuZ2xlZE5hbWUoKSkpOworICAgICAgICBpZiAocHJldkRlYykgeworICAgICAgICAgICAgaWYg
KHByZXZEZWMtPmdldFJldHVyblR5cGUoKSAhPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVu
Y3Rpb24pLT5nZXRSZXR1cm5UeXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXlsc3BbKDIpIC0gKDIpXSksICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhl
IHNhbWUgcmV0dXJuIHR5cGUiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5n
ZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBwcmV2RGVjLT5nZXRQYXJhbUNvdW50KCk7ICsraSkgeworICAgICAgICAgICAgICAg
IGlmIChwcmV2RGVjLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSAoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZp
ZXIoKSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0g
KDIpXSksICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVy
IHF1YWxpZmllcnMiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJh
bShpKS50eXBlLT5nZXRRdWFsaWZpZXJTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICAvLworICAgICAgICAvLyBDaGVjayBmb3IgcHJldmlvdXNseSBkZWNs
YXJlZCB2YXJpYWJsZXMgdXNpbmcgdGhlIHNhbWUgbmFtZS4KKyAgICAgICAgLy8KKyAgICAgICAg
VFN5bWJvbCAqcHJldlN5bSA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0TmFtZSgpKTsKKyAgICAgICAgaWYgKHByZXZTeW0p
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghcHJldlN5bS0+aXNGdW5jdGlvbigpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAo
MildKSwgInJlZGVmaW5pdGlvbiIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbikt
PmdldE5hbWUoKS5jX3N0cigpLCAiZnVuY3Rpb24iKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIHVubWFuZ2xlZCBuYW1lIHRvIGRldGVj
dCBwb3RlbnRpYWwgZnV0dXJlIHJlZGVmaW5pdGlvbiBhcyBhIHZhcmlhYmxlLgorICAgICAgICAg
ICAgY29udGV4dC0+c3ltYm9sVGFibGUuZ2V0T3V0ZXJMZXZlbCgpLT5pbnNlcnQoKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0TmFtZSgpLCAqKHl5dnNwWygxKSAtICgyKV0u
aW50ZXJtLmZ1bmN0aW9uKSk7CisgICAgICAgIH0KKworICAgICAgICAvLworICAgICAgICAvLyBJ
ZiB0aGlzIGlzIGEgcmVkZWNsYXJhdGlvbiwgaXQgY291bGQgYWxzbyBiZSBhIGRlZmluaXRpb24s
CisgICAgICAgIC8vIGluIHdoaWNoIGNhc2UsIHdlIHdhbnQgdG8gdXNlIHRoZSB2YXJpYWJsZSBu
YW1lcyBmcm9tIHRoaXMgb25lLCBhbmQgbm90IHRoZSBvbmUgdGhhdCdzCisgICAgICAgIC8vIGJl
aW5nIHJlZGVjbGFyZWQuICBTbywgcGFzcyBiYWNrIHVwIHRoaXMgZGVjbGFyYXRpb24sIG5vdCB0
aGUgb25lIGluIHRoZSBzeW1ib2wgdGFibGUuCisgICAgICAgIC8vCisgICAgICAgICh5eXZhbC5p
bnRlcm0pLmZ1bmN0aW9uID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKTsKKwor
ICAgICAgICAvLyBXZSdyZSBhdCB0aGUgaW5uZXIgc2NvcGUgbGV2ZWwgb2YgdGhlIGZ1bmN0aW9u
J3MgYXJndW1lbnRzIGFuZCBib2R5IHN0YXRlbWVudC4KKyAgICAgICAgLy8gQWRkIHRoZSBmdW5j
dGlvbiBwcm90b3R5cGUgdG8gdGhlIHN1cnJvdW5kaW5nIHNjb3BlIGluc3RlYWQuCisgICAgICAg
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmdldE91dGVyTGV2ZWwoKS0+aW5zZXJ0KCooeXl2YWwuaW50
ZXJtKS5mdW5jdGlvbik7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNzY6CisKKyAgICB7
CisgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmZ1bmN0aW9uKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3NzoKKworICAgIHsK
KyAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uZnVuY3Rpb24pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDc4OgorCisgICAgewor
ICAgICAgICAvLyBBZGQgdGhlIHBhcmFtZXRlcgorICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0
aW9uKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbik7CisgICAgICAgIGlmICgo
eXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLnBhcmFtLnR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVi
dFZvaWQpCisgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5h
ZGRQYXJhbWV0ZXIoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKS5wYXJhbSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGRlbGV0ZSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLnBhcmFtLnR5
cGU7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNzk6CisKKyAgICB7CisgICAgICAgIC8v
CisgICAgICAgIC8vIE9ubHkgZmlyc3QgcGFyYW1ldGVyIG9mIG9uZS1wYXJhbWV0ZXIgZnVuY3Rp
b25zIGNhbiBiZSB2b2lkCisgICAgICAgIC8vIFRoZSBjaGVjayBmb3IgbmFtZWQgcGFyYW1ldGVy
cyBub3QgYmVpbmcgdm9pZCBpcyBkb25lIGluIHBhcmFtZXRlcl9kZWNsYXJhdG9yCisgICAgICAg
IC8vCisgICAgICAgIGlmICgoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pLnBhcmFtLnR5cGUtPmdl
dEJhc2ljVHlwZSgpID09IEVidFZvaWQpIHsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAv
LyBUaGlzIHBhcmFtZXRlciA+IGZpcnN0IGlzIHZvaWQKKyAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICJjYW5ub3QgYmUgYW4gYXJn
dW1lbnQgdHlwZSBleGNlcHQgZm9yICcodm9pZCknIiwgInZvaWQiKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIGRlbGV0ZSAoeXl2c3BbKDMpIC0gKDMpXS5p
bnRlcm0pLnBhcmFtLnR5cGU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBBZGQg
dGhlIHBhcmFtZXRlcgorICAgICAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uZnVuY3Rpb24pOworICAgICAgICAgICAgKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmZ1bmN0aW9uKS0+YWRkUGFyYW1ldGVyKCh5eXZzcFsoMykgLSAoMyldLmlu
dGVybSkucGFyYW0pOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgODA6
CisKKyAgICB7CisgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVh
bGlmaWVyICE9IEV2cUdsb2JhbCAmJiAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVh
bGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5
bHNwWygyKSAtICgzKV0pLCAibm8gcXVhbGlmaWVycyBhbGxvd2VkIGZvciBmdW5jdGlvbiByZXR1
cm4iLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnF1
YWxpZmllcikpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9Cisg
ICAgICAgIC8vIG1ha2Ugc3VyZSBhIHNhbXBsZXIgaXMgbm90IGludm9sdmVkIGFzIHdlbGwuLi4K
KyAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygy
KSAtICgzKV0pLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkpKQorICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIC8vIEFkZCB0aGUgZnVuY3Rpb24gYXMgYSBw
cm90b3R5cGUgYWZ0ZXIgcGFyc2luZyBpdCAod2UgZG8gbm90IHN1cHBvcnQgcmVjdXJzaW9uKQor
ICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uOworICAgICAgICBUVHlwZSB0eXBlKCh5eXZzcFso
MSkgLSAoMyldLmludGVybS50eXBlKSk7CisgICAgICAgIGZ1bmN0aW9uID0gbmV3IFRGdW5jdGlv
bigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLnN0cmluZywgdHlwZSk7CisgICAgICAgICh5eXZhbC5p
bnRlcm0uZnVuY3Rpb24pID0gZnVuY3Rpb247CisgICAgICAgIAorICAgICAgICBjb250ZXh0LT5z
eW1ib2xUYWJsZS5wdXNoKCk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgODE6CisKKyAg
ICB7CisgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBF
YnRWb2lkKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIpXSks
ICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2b2lkJyIsICh5eXZzcFsoMikgLSAoMildLmxleCkuc3Ry
aW5nLT5jX3N0cigpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAo
MildKSwgKih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nKSkKKyAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsoeXl2c3BbKDIpIC0g
KDIpXS5sZXgpLnN0cmluZywgbmV3IFRUeXBlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBl
KSl9OworICAgICAgICAoeXl2YWwuaW50ZXJtKS5wYXJhbSA9IHBhcmFtOworICAgIH0KKyAgICBi
cmVhazsKKworICBjYXNlIDgyOgorCisgICAgeworICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGNh
biBtYWtlIGFuIGFycmF5IG91dCBvZiB0aGlzIHR5cGUKKyAgICAgICAgaWYgKGNvbnRleHQtPmFy
cmF5VHlwZUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0pLCAoeXl2c3BbKDEpIC0gKDUpXS5p
bnRlcm0udHlwZSkpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAg
IGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg1KV0pLCAqKHl5
dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworCisgICAgICAgIGludCBzaXplOworICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXpl
RXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDUpXSksICh5eXZzcFsoNCkgLSAoNSldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLCBzaXplKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpLnNldEFycmF5KHRydWUsIHNp
emUpOworCisgICAgICAgIFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKCh5eXZzcFsoMSkgLSAoNSld
LmludGVybS50eXBlKSk7CisgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7ICh5eXZzcFsoMikg
LSAoNSldLmxleCkuc3RyaW5nLCB0eXBlIH07CisgICAgICAgICh5eXZhbC5pbnRlcm0pLnBhcmFt
ID0gcGFyYW07CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgODM6CisKKyAgICB7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKTsKKyAgICAgICAg
aWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDMpXSksICh5eXZzcFso
MSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZpZXIsICh5eXZzcFsoMikgLSAoMyldLmludGVy
bS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJhbS50eXBlKSkKKyAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA4NDoKKworICAg
IHsKKyAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pOwor
ICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1ldGVyU2FtcGxlckVycm9yQ2hlY2soKHl5bHNwWygy
KSAtICgyKV0pLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0ucXVhbGlmaWVyKSwgKih5eXZzcFso
MikgLSAoMildLmludGVybSkucGFyYW0udHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soKHl5bHNwWygyKSAt
ICgyKV0pLCBFdnFUZW1wb3JhcnksICh5eXZzcFsoMSkgLSAoMildLmludGVybS5xdWFsaWZpZXIp
LCAoeXl2YWwuaW50ZXJtKS5wYXJhbS50eXBlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA4NToKKworICAgIHsKKyAgICAgICAg
KHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pOworICAgICAgICBpZiAo
Y29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoMyldKSwgKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLnF1
YWxpZmllciksICh5eXZhbC5pbnRlcm0pLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDg2OgorCisgICAgewor
ICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybSk7CisgICAg
ICAgIGlmIChjb250ZXh0LT5wYXJhbWV0ZXJTYW1wbGVyRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0g
KDIpXSksICh5eXZzcFsoMSkgLSAoMildLmludGVybS5xdWFsaWZpZXIpLCAqKHl5dnNwWygyKSAt
ICgyKV0uaW50ZXJtKS5wYXJhbS50eXBlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDIp
XSksIEV2cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnF1YWxpZmllciksICh5
eXZhbC5pbnRlcm0pLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDg3OgorCisgICAgeworICAgICAgICAoeXl2
YWwuaW50ZXJtLnF1YWxpZmllcikgPSBFdnFJbjsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSA4ODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5xdWFsaWZpZXIpID0gRXZxSW47
CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgODk6CisKKyAgICB7CisgICAgICAgICh5eXZh
bC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cU91dDsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSA5MDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5xdWFsaWZpZXIpID0gRXZxSW5P
dXQ7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgOTE6CisKKyAgICB7CisgICAgICAgIFRQ
YXJhbWV0ZXIgcGFyYW0gPSB7IDAsIG5ldyBUVHlwZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
dHlwZSkpIH07CisgICAgICAgICh5eXZhbC5pbnRlcm0pLnBhcmFtID0gcGFyYW07CisgICAgfQor
ICAgIGJyZWFrOworCisgIGNhc2UgOTI6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0p
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSA5MzoKKworICAgIHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybSkudHlw
ZS50eXBlID09IEVidEludmFyaWFudCAmJiAhKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zeW1ib2wp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMykgLSAoMyld
KSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCAoeXl2c3Bb
KDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgIH0KKworICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICooeXl2c3BbKDMpIC0gKDMpXS5sZXgp
LnN0cmluZywgVFR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS50eXBlKSwgKHl5bHNwWygz
KSAtICgzKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
KS5pbnRlcm1Ob2RlLCBzeW1ib2wsICh5eWxzcFsoMykgLSAoMyldKSk7CisgICAgICAgIAorICAg
ICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0g
KDMpXSksICh5eXZhbC5pbnRlcm0pLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eWxz
cFsoMykgLSAoMyldKSwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2YWwuaW50
ZXJtKS50eXBlLCBmYWxzZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAg
ICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7CisgICAgICAgIGlmIChjb250ZXh0LT5ub25J
bml0RXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDMpXSksICooeXl2c3BbKDMpIC0gKDMpXS5sZXgp
LnN0cmluZywgKHl5dmFsLmludGVybSkudHlwZSwgdmFyaWFibGUpKQorICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAoc3ltYm9sICYmIHZhcmlhYmxlKQorICAgICAg
ICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7CisgICAgfQorICAg
IGJyZWFrOworCisgIGNhc2UgOTQ6CisKKyAgICB7CisgICAgICAgIGlmIChjb250ZXh0LT5zdHJ1
Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwgKHl5dnNwWygxKSAtICg1
KV0uaW50ZXJtKS50eXBlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAg
ICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDUp
XSksICooeXl2c3BbKDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50
ZXJtKS50eXBlLCB0cnVlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAg
ICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoNSldLmludGVybSk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5bHNwWyg0KSAtICg1KV0pLCAo
eXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUpIHx8IGNvbnRleHQtPmFycmF5UXVhbGlmaWVy
RXJyb3JDaGVjaygoeXlsc3BbKDQpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmludGVybSku
dHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlLnNldEFycmF5KHRydWUp
OworICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZTsKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5hcnJheUVycm9yQ2hlY2soKHl5bHNwWyg0KSAtICg1KV0pLCAqKHl5dnNwWygzKSAtICg1
KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSwgdmFyaWFibGUp
KQorICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBicmVhazsKKworICBjYXNlIDk1OgorCisgICAgeworICAgICAgICBpZiAoY29udGV4dC0+
c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDYpXSksICh5eXZzcFsoMSkg
LSAoNildLmludGVybSkudHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5bHNwWygzKSAt
ICg2KV0pLCAqKHl5dnNwWygzKSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNild
LmludGVybSkudHlwZSwgdHJ1ZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisK
KyAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pOworCisg
ICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eWxzcFsoNCkgLSAoNild
KSwgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50eXBlKSB8fCBjb250ZXh0LT5hcnJheVF1YWxp
ZmllckVycm9yQ2hlY2soKHl5bHNwWyg0KSAtICg2KV0pLCAoeXl2c3BbKDEpIC0gKDYpXS5pbnRl
cm0pLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIGludCBzaXplOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5
U2l6ZUVycm9yQ2hlY2soKHl5bHNwWyg0KSAtICg2KV0pLCAoeXl2c3BbKDUpIC0gKDYpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICAgICAgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50eXBlLnNldEFy
cmF5KHRydWUsIHNpemUpOworICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7Cisg
ICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCh5eWxzcFsoNCkgLSAoNild
KSwgKih5eXZzcFsoMykgLSAoNildLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDYpXS5pbnRl
cm0pLnR5cGUsIHZhcmlhYmxlKSkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgICAgICBUVHlwZSB0eXBlID0gVFR5cGUoKHl5dnNwWygxKSAtICg2KV0uaW50ZXJt
KS50eXBlKTsKKyAgICAgICAgICAgIHR5cGUuc2V0QXJyYXlTaXplKHNpemUpOworICAgICAgICAg
ICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
Lmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlID8gdmFyaWFibGUtPmdldFVuaXF1
ZUlkKCkgOiAwLCAqKHl5dnNwWygzKSAtICg2KV0ubGV4KS5zdHJpbmcsIHR5cGUsICh5eWxzcFso
MykgLSAoNildKSksICh5eWxzcFsoMykgLSAoNildKSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSA5NjoKKworICAgIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVj
dFF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0pLCAoeXl2c3BbKDEpIC0gKDUp
XS5pbnRlcm0pLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAg
ICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKTsKKworICAgICAg
ICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKKyAgICAgICAgaWYgKCFjb250ZXh0LT5leGVjdXRl
SW5pdGlhbGl6ZXIoKHl5bHNwWygzKSAtICg1KV0pLCAqKHl5dnNwWygzKSAtICg1KV0ubGV4KS5z
dHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSwgKHl5dnNwWyg1KSAtICg1KV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSksIGludGVybU5vZGUpKSB7CisgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgLy8gYnVpbGQgdGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgorICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgIGlmIChpbnRlcm1Ob2RlKQorICAgICAgICAoeXl2YWwu
aW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3Jl
Z2F0ZSgoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLmludGVybU5vZGUsIGludGVybU5vZGUsICh5
eWxzcFsoNCkgLSAoNSldKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgKHl5
dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS5p
bnRlcm1BZ2dyZWdhdGU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAw
OworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgOTc6CisKKyAgICB7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlw
ZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wo
MCwgIiIsIFRUeXBlKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSksICh5eWxzcFsoMSkg
LSAoMSldKSksICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNh
c2UgOTg6CisKKyAgICB7CisgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5n
LCBUVHlwZSgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkpLCAoeXlsc3BbKDIpIC0gKDIp
XSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsICh5eWxzcFsoMikgLSAoMildKSk7Cisg
ICAgICAgIAorICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygo
eXlsc3BbKDIpIC0gKDIpXSksICh5eXZhbC5pbnRlcm0pLnR5cGUpKQorICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJv
ckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgKih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5n
LCAoeXl2YWwuaW50ZXJtKS50eXBlLCBmYWxzZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSk7CisKKyAgICAgICAgVFZhcmlhYmxlKiB2YXJp
YWJsZSA9IDA7CisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0RXJyb3JDaGVjaygoeXlsc3Bb
KDIpIC0gKDIpXSksICooeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZywgKHl5dmFsLmludGVy
bSkudHlwZSwgdmFyaWFibGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICBpZiAodmFyaWFibGUgJiYgc3ltYm9sKQorICAgICAgICAgICAgc3ltYm9sLT5zZXRJZCh2
YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgOTk6
CisKKyAgICB7CisgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoNCldKSwgInVu
c2l6ZWQgYXJyYXkgZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0ZWQiLCAoeXl2c3BbKDIpIC0gKDQp
XS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CisgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKwor
ICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
U3ltYm9sKDAsICooeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZywgVFR5cGUoKHl5dnNwWygx
KSAtICg0KV0uaW50ZXJtLnR5cGUpKSwgKHl5bHNwWygyKSAtICg0KV0pKTsKKyAgICAgICAgKHl5
dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VB
Z2dyZWdhdGUoc3ltYm9sLCAoeXlsc3BbKDIpIC0gKDQpXSkpOworICAgICAgICAoeXl2YWwuaW50
ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpOworICAgIH0KKyAgICBi
cmVhazsKKworICBjYXNlIDEwMDoKKworICAgIHsKKyAgICAgICAgVFR5cGUgdHlwZSA9IFRUeXBl
KCh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSk7CisgICAgICAgIGludCBzaXplOworICAg
ICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDUpXSks
ICh5eXZzcFsoNCkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBzaXplKSkKKyAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgdHlwZS5zZXRBcnJheVNpemUoc2l6
ZSk7CisgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMikgLSAoNSldLmxleCkuc3RyaW5nLCB0eXBlLCAoeXls
c3BbKDIpIC0gKDUpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsICh5eWxzcFsoMikg
LSAoNSldKSk7CisgICAgICAgIAorICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVy
RXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50
eXBlKSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg1KV0pLCAqKHl5dnNw
WygyKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSwg
dHJ1ZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgKHl5dmFs
LmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKTsKKworICAgICAg
ICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDUpXSksICh5
eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSkgfHwgY29udGV4dC0+YXJyYXlRdWFsaWZpZXJF
cnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5
cGUpKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVF
cnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwgKHl5dnNwWyg0KSAtICg1KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSksIHNpemUpKQorICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKKworICAgICAgICAgICAgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpLnNldEFycmF5
KHRydWUsIHNpemUpOworICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7CisgICAg
ICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwg
Kih5eXZzcFsoMikgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0u
dHlwZSksIHZhcmlhYmxlKSkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICBpZiAodmFyaWFibGUgJiYgc3ltYm9sKQorICAgICAgICAgICAgICAgIHN5bWJv
bC0+c2V0SWQodmFyaWFibGUtPmdldFVuaXF1ZUlkKCkpOworICAgICAgICB9CisgICAgfQorICAg
IGJyZWFrOworCisgIGNhc2UgMTAxOgorCisgICAgeworICAgICAgICBpZiAoY29udGV4dC0+c3Ry
dWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDQpXSksICh5eXZzcFsoMSkgLSAo
NCldLmludGVybS50eXBlKSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAg
ICAgICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBl
KTsKKworICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKKyAgICAgICAgaWYgKCFjb250
ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoKHl5bHNwWygyKSAtICg0KV0pLCAqKHl5dnNwWygyKSAt
ICg0KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSwgKHl5dnNw
Wyg0KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGludGVybU5vZGUpKSB7CisgICAg
ICAgIC8vCisgICAgICAgIC8vIEJ1aWxkIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgorICAg
ICAgICAvLworICAgICAgICAgICAgaWYoaW50ZXJtTm9kZSkKKyAgICAgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFn
Z3JlZ2F0ZShpbnRlcm1Ob2RlLCAoeXlsc3BbKDMpIC0gKDQpXSkpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IDA7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAwOworICAgICAgICB9CisgICAg
fQorICAgIGJyZWFrOworCisgIGNhc2UgMTAyOgorCisgICAgeworICAgICAgICBWRVJURVhfT05M
WSgiaW52YXJpYW50IGRlY2xhcmF0aW9uIiwgKHl5bHNwWygxKSAtICgyKV0pKTsKKyAgICAgICAg
aWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgyKV0pLCBjb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJpbnZhcmlhbnQgdmFyeWluZyIpKQorICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAoeXl2YWwuaW50ZXJtKS50eXBl
LnNldEJhc2ljKEVidEludmFyaWFudCwgRXZxSW52YXJpYW50VmFyeWluZ091dCwgKHl5bHNwWygy
KSAtICgyKV0pKTsKKyAgICAgICAgaWYgKCEoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN5bWJvbCkK
KyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgyKV0p
LCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICh5eXZzcFso
MikgLSAoMildLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJt
QWdncmVnYXRlID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRT
eW1ib2woMCwgKih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2YWwuaW50
ZXJtKS50eXBlKSwgKHl5bHNwWygyKSAtICgyKV0pKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRl
KHN5bWJvbCwgKHl5bHNwWygyKSAtICgyKV0pKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVh
azsKKworICBjYXNlIDEwMzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsKKworICAgICAgICBpZiAoKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLnR5cGUpLmFycmF5KSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXlsc3BbKDEpIC0gKDEpXSksICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXkoZmFsc2UpOworICAgICAgICB9CisgICAg
fQorICAgIGJyZWFrOworCisgIGNhc2UgMTA0OgorCisgICAgeworICAgICAgICBpZiAoKHl5dnNw
WygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmFycmF5KSB7CisgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFy
cmF5Iik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2
c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXkoZmFsc2UpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIgPT0g
RXZxQXR0cmlidXRlICYmCisgICAgICAgICAgICAoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5
cGUpLnR5cGUgPT0gRWJ0Qm9vbCB8fCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlw
ZSA9PSBFYnRJbnQpKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0g
KDIpXSksICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcikpOworICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIGlmICgoKHl5dnNwWygxKSAtICgyKV0u
aW50ZXJtLnR5cGUpLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgKHl5dnNwWygxKSAtICgy
KV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0KSAmJgorICAgICAgICAg
ICAgKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidEJvb2wgfHwgKHl5
dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0SW50KSkgeworICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgyKV0pLCAiY2Fubm90IGJlIGJvb2wgb3Ig
aW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5x
dWFsaWZpZXIpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQor
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5
cGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9ICh5eXZzcFsoMSkg
LSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXI7CisgICAgfQorICAgIGJyZWFrOworCisgIGNh
c2UgMTA1OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVi
dFZvaWQsIEV2cUNvbnN0LCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsK
KworICBjYXNlIDEwNjoKKworICAgIHsKKyAgICAgICAgVkVSVEVYX09OTFkoImF0dHJpYnV0ZSIs
ICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNo
ZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpLCAiYXR0cmlidXRlIikpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxQXR0cmlidXRlLCAo
eXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEwNzoKKwor
ICAgIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5bHNwWygxKSAt
ICgxKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ2YXJ5aW5nIikp
CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChjb250ZXh0LT5z
aGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCisgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cVZhcnlpbmdPdXQsICh5eWxzcFsoMSkgLSAoMSld
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFz
aWMoRWJ0Vm9pZCwgRXZxVmFyeWluZ0luLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAg
ICBicmVhazsKKworICBjYXNlIDEwODoKKworICAgIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPmds
b2JhbEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgyKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCksICJpbnZhcmlhbnQgdmFyeWluZyIpKQorICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9WRVJU
RVhfU0hBREVSKQorICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRW
b2lkLCBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCAoeXlsc3BbKDEpIC0gKDIpXSkpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQs
IEV2cUludmFyaWFudFZhcnlpbmdJbiwgKHl5bHNwWygxKSAtICgyKV0pKTsKKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAxMDk6CisKKyAgICB7CisgICAgICAgIGlmIChjb250ZXh0LT5nbG9i
YWxFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRH
bG9iYWxMZXZlbCgpLCAidW5pZm9ybSIpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cVVuaWZv
cm0sICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTEw
OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLnR5cGUpOworCisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLnR5cGUpLnByZWNp
c2lvbiA9PSBFYnBVbmRlZmluZWQpIHsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSku
cHJlY2lzaW9uID0gY29udGV4dC0+c3ltYm9sVGFibGUuZ2V0RGVmYXVsdFByZWNpc2lvbigoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSk7CisgICAgICAgICAgICBpZiAoY29udGV4
dC0+cHJlY2lzaW9uRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDEpXSksICh5eXZhbC5pbnRlcm0u
dHlwZSkucHJlY2lzaW9uLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSkpIHsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTE6CisKKyAgICB7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSk7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucHJlY2lzaW9uID0gKHl5dnNwWygxKSAtICgyKV0u
aW50ZXJtLnByZWNpc2lvbik7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTEyOgorCisg
ICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnByZWNpc2lvbikgPSBFYnBIaWdoOworICAgIH0K
KyAgICBicmVhazsKKworICBjYXNlIDExMzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVy
bS5wcmVjaXNpb24pID0gRWJwTWVkaXVtOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEx
NDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5wcmVjaXNpb24pID0gRWJwTG93Owor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDExNToKKworICAgIHsKKyAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxMTY6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkgPSAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg0KV0pLCAoeXl2c3BbKDEp
IC0gKDQpXS5pbnRlcm0udHlwZSkpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludCBzaXplOworICAgICAgICAgICAgaWYgKGNv
bnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg0KV0pLCAoeXl2c3BbKDMp
IC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCisgICAgICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRB
cnJheSh0cnVlLCBzaXplKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNl
IDExNzoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIHF1YWwsICh5eWxzcFsoMSkg
LSAoMSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTE4OgorCisgICAgeworICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQor
ICAgIGJyZWFrOworCisgIGNhc2UgMTE5OgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1
YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50
LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNl
IDEyMDoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEJvb2wsIHF1YWwsICh5eWxzcFsoMSkg
LSAoMSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTIxOgorCisgICAgeworICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDIpOworICAgIH0KKyAgICBicmVhazsK
KworICBjYXNlIDEyMjoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4
dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5
OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAo
eXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3Jl
Z2F0ZSgzKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjM6CisKKyAgICB7CisgICAg
ICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoNCk7CisgICAgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgMTI0OgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5
bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdh
dGUoMik7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTI1OgorCisgICAgeworICAgICAg
ICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkg
PyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSku
c2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMyk7CisgICAgfQorICAgIGJyZWFrOworCisg
IGNhc2UgMTI2OgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5bHNw
WygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUo
NCk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTI3OgorCisgICAgeworICAgICAgICBU
UXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBF
dnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0
QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgyKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAxMjg6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5eWxzcFsoMSkg
LSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEyOToKKworICAgIHsKKyAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2lj
KEVidEludCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRBZ2dyZWdhdGUoNCk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTMw
OgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAo
MSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDIsIHRydWUp
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzMToKKworICAgIHsKKyAgICAgICAgVFF1
YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZx
R2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJh
c2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgzLCB0cnVlKTsKKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxMzI6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
KyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5
bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdh
dGUoNCwgdHJ1ZSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTMzOgorCisgICAgewor
ICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkuc2V0QmFzaWMoRWJ0U2FtcGxlcjJELCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzNDoKKworICAgIHsKKyAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2lj
KEVidFNhbXBsZXJDdWJlLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBi
cmVhazsKKworICBjYXNlIDEzNToKKworICAgIHsKKyAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBw
b3J0c0V4dGVuc2lvbigiR0xfT0VTX0VHTF9pbWFnZV9leHRlcm5hbCIpKSB7CisgICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSksICJ1bnN1cHBvcnRlZCB0eXBlIiwg
InNhbXBsZXJFeHRlcm5hbE9FUyIpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICB9CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyRXh0ZXJuYWxPRVMsIHF1YWwsICh5
eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTM2OgorCisg
ICAgeworICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRXh0ZW5zaW9uKCJHTF9BUkJfdGV4
dHVyZV9yZWN0YW5nbGUiKSkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygx
KSAtICgxKV0pLCAidW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyMkRSZWN0Iik7CisgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgVFF1YWxpZmllciBx
dWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDog
RXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNh
bXBsZXIyRFJlY3QsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAgIGJyZWFr
OworCisgIGNhc2UgMTM3OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnF1YWxpZmllciA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2
cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzg6
CisKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFRoaXMgaXMgZm9yIHVzZXIgZGVmaW5l
ZCB0eXBlIG5hbWVzLiAgVGhlIGxleGljYWwgcGhhc2UgbG9va2VkIHVwIHRoZQorICAgICAgICAv
LyB0eXBlLgorICAgICAgICAvLworICAgICAgICBUVHlwZSYgc3RydWN0dXJlID0gc3RhdGljX2Nh
c3Q8VFZhcmlhYmxlKj4oKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zeW1ib2wpLT5nZXRUeXBlKCk7
CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRCYXNpYyhFYnRTdHJ1Y3QsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkudXNlckRlZiA9ICZzdHJ1Y3R1cmU7CisgICAgfQor
ICAgIGJyZWFrOworCisgIGNhc2UgMTM5OgorCisgICAgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1
Y3REZWNsYXJhdGlvbigoeXlsc3BbKDIpIC0gKDMpXSksICooeXl2c3BbKDIpIC0gKDMpXS5sZXgp
LnN0cmluZykpIGNvbnRleHQtPnJlY292ZXIoKTsgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTQw
OgorCisgICAgeworICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCh5eWxz
cFsoMikgLSAoNildKSwgKih5eXZzcFsoMikgLSAoNildLmxleCkuc3RyaW5nKSkKKyAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBUVHlwZSogc3RydWN0dXJlID0gbmV3
IFRUeXBlKG5ldyBUU3RydWN0dXJlKCh5eXZzcFsoMikgLSAoNildLmxleCkuc3RyaW5nLCAoeXl2
c3BbKDUpIC0gKDYpXS5pbnRlcm0uZmllbGRMaXN0KSkpOworICAgICAgICBUVmFyaWFibGUqIHVz
ZXJUeXBlRGVmID0gbmV3IFRWYXJpYWJsZSgoeXl2c3BbKDIpIC0gKDYpXS5sZXgpLnN0cmluZywg
KnN0cnVjdHVyZSwgdHJ1ZSk7CisgICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxlLmlu
c2VydCgqdXNlclR5cGVEZWYpKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3Bb
KDIpIC0gKDYpXSksICJyZWRlZmluaXRpb24iLCAoeXl2c3BbKDIpIC0gKDYpXS5sZXgpLnN0cmlu
Zy0+Y19zdHIoKSwgInN0cnVjdCIpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICB9CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U3RydWN0
LCBFdnFUZW1wb3JhcnksICh5eWxzcFsoMSkgLSAoNildKSk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkudXNlckRlZiA9IHN0cnVjdHVyZTsKKyAgICAgICAgY29udGV4dC0+ZXhpdFN0cnVj
dERlY2xhcmF0aW9uKCk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTQxOgorCisgICAg
eyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbigoeXlsc3BbKDIpIC0gKDIpXSks
ICooeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZykpIGNvbnRleHQtPnJlY292ZXIoKTsgfQor
ICAgIGJyZWFrOworCisgIGNhc2UgMTQyOgorCisgICAgeworICAgICAgICBUVHlwZSogc3RydWN0
dXJlID0gbmV3IFRUeXBlKG5ldyBUU3RydWN0dXJlKE5ld1Bvb2xUU3RyaW5nKCIiKSwgKHl5dnNw
Wyg0KSAtICg1KV0uaW50ZXJtLmZpZWxkTGlzdCkpKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKS5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgKHl5bHNwWygxKSAtICg1KV0p
KTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS51c2VyRGVmID0gc3RydWN0dXJlOworICAg
ICAgICBjb250ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsKKyAgICB9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAxNDM6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5maWVsZExpc3QpOworICAgIH0KKyAgICBicmVh
azsKKworICBjYXNlIDE0NDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5maWVsZExp
c3QpID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZpZWxkTGlzdCk7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmZpZWxkTGlzdCktPnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICBURmllbGQqIGZpZWxkID0gKCooeXl2c3BbKDIpIC0g
KDIpXS5pbnRlcm0uZmllbGRMaXN0KSlbaV07CisgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0g
MDsgaiA8ICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0KS0+c2l6ZSgpOyArK2opIHsKKyAgICAgICAg
ICAgICAgICBpZiAoKCooeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkpW2pdLT5uYW1lKCkgPT0gZmll
bGQtPm5hbWUoKSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3Bb
KDIpIC0gKDIpXSksICJkdXBsaWNhdGUgZmllbGQgbmFtZSBpbiBzdHJ1Y3R1cmU6IiwgInN0cnVj
dCIsIGZpZWxkLT5uYW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCktPnB1c2hfYmFjayhmaWVsZCk7CisgICAgICAgIH0K
KyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDU6CisKKyAgICB7CisgICAgICAgICh5eXZh
bC5pbnRlcm0uZmllbGRMaXN0KSA9ICh5eXZzcFsoMikgLSAoMyldLmludGVybS5maWVsZExpc3Qp
OworCisgICAgICAgIGlmIChjb250ZXh0LT52b2lkRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDMp
XSksICgqKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmZpZWxkTGlzdCkpWzBdLT5uYW1lKCksICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKSkpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
ICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0KS0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIC8v
CisgICAgICAgICAgICAvLyBDYXJlZnVsIG5vdCB0byByZXBsYWNlIGFscmVhZHkga25vd24gYXNw
ZWN0cyBvZiB0eXBlLCBsaWtlIGFycmF5LW5lc3MKKyAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICBUVHlwZSogdHlwZSA9ICgqKHl5dmFsLmludGVybS5maWVsZExpc3QpKVtpXS0+dHlwZSgpOwor
ICAgICAgICAgICAgdHlwZS0+c2V0QmFzaWNUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50
eXBlKS50eXBlKTsKKyAgICAgICAgICAgIHR5cGUtPnNldE5vbWluYWxTaXplKCh5eXZzcFsoMSkg
LSAoMyldLmludGVybS50eXBlKS5zaXplKTsKKyAgICAgICAgICAgIHR5cGUtPnNldE1hdHJpeCgo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkubWF0cml4KTsKKyAgICAgICAgICAgIHR5cGUt
PnNldFByZWNpc2lvbigoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucHJlY2lzaW9uKTsK
KworICAgICAgICAgICAgLy8gZG9uJ3QgYWxsb3cgYXJyYXlzIG9mIGFycmF5cworICAgICAgICAg
ICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5h
cnJheVR5cGVFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMyldKSwgKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50
eXBlKS5hcnJheSkKKyAgICAgICAgICAgICAgICB0eXBlLT5zZXRBcnJheVNpemUoKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLnR5cGUpLmFycmF5U2l6ZSk7CisgICAgICAgICAgICBpZiAoKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnVzZXJEZWYpCisgICAgICAgICAgICAgICAgdHlwZS0+
c2V0U3RydWN0KCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS51c2VyRGVmLT5nZXRTdHJ1
Y3QoKSk7CisKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3ROZXN0aW5nRXJyb3JDaGVj
aygoeXlsc3BbKDEpIC0gKDMpXSksICooKih5eXZhbC5pbnRlcm0uZmllbGRMaXN0KSlbaV0pKQor
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBicmVhazsKKworICBjYXNlIDE0NjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5m
aWVsZExpc3QpID0gTmV3UG9vbFRGaWVsZExpc3QoKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5m
aWVsZExpc3QpLT5wdXNoX2JhY2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmZpZWxkKSk7Cisg
ICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTQ3OgorCisgICAgeworICAgICAgICAoeXl2YWwu
aW50ZXJtLmZpZWxkTGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uZmll
bGQpKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDg6CisKKyAgICB7CisgICAgICAg
IGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgxKV0pLCAqKHl5
dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworCisgICAgICAgIFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKEVidFZvaWQsIEVicFVuZGVm
aW5lZCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGQpID0gbmV3IFRGaWVsZCh0eXBlLCAo
eXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZyk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNh
c2UgMTQ5OgorCisgICAgeworICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNr
KCh5eWxzcFsoMSkgLSAoNCldKSwgKih5eXZzcFsoMSkgLSAoNCldLmxleCkuc3RyaW5nKSkKKyAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBUVHlwZSogdHlwZSA9IG5l
dyBUVHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpOworICAgICAgICBpbnQgc2l6ZSA9IDA7Cisg
ICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNCld
KSwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNpemUpKQorICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB0eXBlLT5zZXRBcnJheVNpemUo
c2l6ZSk7CisKKyAgICAgICAgKHl5dmFsLmludGVybS5maWVsZCkgPSBuZXcgVEZpZWxkKHR5cGUs
ICh5eXZzcFsoMSkgLSAoNCldLmxleCkuc3RyaW5nKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAxNTA6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAxNTE6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDE1MjoK
KworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1BZ2dyZWdhdGUpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNTM6CisKKyAg
ICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtTm9kZSk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDE1NDoKKworICAgIHsgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2Rl
KTsgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTU1OgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmlu
dGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAxNTY6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDE1NzoKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTU4
OgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybU5vZGUpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNTk6CisKKyAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSA9IDA7IH0KKyAgICBicmVhazsKKworICBj
YXNlIDE2MDoKKworICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxNjE6CisKKyAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOyB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNjI6CisKKyAgICB7CisgICAgICAgIGlmICgoeXl2c3Bb
KDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSAhPSAwKSB7CisgICAgICAgICAgICAo
eXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKS0+c2V0T3AoRU9wU2VxdWVu
Y2UpOworICAgICAgICAgICAgKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0
ZSktPnNldExpbmUoKHl5bG9jKSk7CisgICAgICAgIH0KKyAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1BZ2dyZWdhdGUpID0gKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0
ZSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTYzOgorCisgICAgeyAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNjQ6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJt
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KKyAgICBicmVh
azsKKworICBjYXNlIDE2NToKKworICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNjY6CisKKyAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxl
LnBvcCgpOyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50
ZXJtLmludGVybU5vZGUpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNjc6CisKKyAgICB7IGNv
bnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTY4Ogor
CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgKHl5dmFsLmludGVybS5pbnRlcm1O
b2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1Ob2RlKTsgfQorICAgIGJyZWFr
OworCisgIGNhc2UgMTY5OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5v
ZGUpID0gMDsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNzA6CisKKyAgICB7CisgICAg
ICAgIGlmICgoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSkgeworICAg
ICAgICAgICAgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSktPnNldE9w
KEVPcFNlcXVlbmNlKTsKKyAgICAgICAgICAgICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRl
cm1BZ2dyZWdhdGUpLT5zZXRMaW5lKCh5eWxvYykpOworICAgICAgICB9CisgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtQWdn
cmVnYXRlKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNzE6CisKKyAgICB7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5tYWtlQWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKSwgKHl5
bG9jKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTcyOgorCisgICAgeworICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
Z3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSwg
KHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXlsb2MpKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxNzM6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9k
ZSkgPSAwOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNzQ6CisKKyAgICB7ICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSkgPSBzdGF0aWNfY2FzdDxUSW50ZXJtTm9kZSo+KCh5eXZzcFsoMSkgLSAo
MildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKTsgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTc1
OgorCisgICAgeworICAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2soKHl5bHNwWygx
KSAtICg1KV0pLCAoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU2VsZWN0aW9uKCh5eXZzcFsoMykg
LSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0u
bm9kZVBhaXIpLCAoeXlsc3BbKDEpIC0gKDUpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDE3NjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTEg
PSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtTm9kZSk7CisgICAgICAgICh5eXZhbC5p
bnRlcm0ubm9kZVBhaXIpLm5vZGUyID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybU5v
ZGUpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE3NzoKKworICAgIHsKKyAgICAgICAg
KHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTEgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtTm9kZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUyID0gMDsK
KyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNzg6CisKKyAgICB7CisgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpOworICAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2soKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldExpbmUoKSwgKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQorICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE3OToKKworICAgIHsKKyAg
ICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CisgICAgICAgIGlmIChjb250ZXh0LT5zdHJ1
Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNCldKSwgKHl5dnNwWygxKSAtICg0
KV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgaWYgKGNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNCldKSwgKHl5dnNw
WygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKKworICAgICAgICBpZiAoIWNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigoeXlsc3BbKDIp
IC0gKDQpXSksICooeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg0
KV0uaW50ZXJtLnR5cGUpLCAoeXl2c3BbKDQpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSwgaW50ZXJtTm9kZSkpCisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDQpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAwOworICAgICAgICB9CisgICAgfQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTgwOgorCisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7
ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTgx
OgorCisgICAgeworICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKKyAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRMb29w
KEVMb29wV2hpbGUsIDAsICh5eXZzcFsoNCkgLSAoNildLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCAwLCAoeXl2c3BbKDYpIC0gKDYpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eWxzcFsoMSkgLSAo
NildKSk7CisgICAgICAgIC0tY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsKKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAxODI6CisKKyAgICB7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZl
bDsgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTgzOgorCisgICAgeworICAgICAgICBpZiAoY29u
dGV4dC0+Ym9vbEVycm9yQ2hlY2soKHl5bHNwWyg4KSAtICg4KV0pLCAoeXl2c3BbKDYpIC0gKDgp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CisKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRMb29wKEVMb29wRG9XaGlsZSwgMCwgKHl5dnNwWyg2KSAtICg4KV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksIDAsICh5eXZzcFsoMykgLSAoOCldLmludGVybS5pbnRlcm1Ob2Rl
KSwgKHl5bHNwWyg0KSAtICg4KV0pKTsKKyAgICAgICAgLS1jb250ZXh0LT5sb29wTmVzdGluZ0xl
dmVsOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE4NDoKKworICAgIHsgY29udGV4dC0+
c3ltYm9sVGFibGUucHVzaCgpOyArK2NvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0KKyAgICBi
cmVhazsKKworICBjYXNlIDE4NToKKworICAgIHsKKyAgICAgICAgY29udGV4dC0+c3ltYm9sVGFi
bGUucG9wKCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkTG9vcChFTG9vcEZvciwgKHl5dnNwWyg0KSAtICg3KV0uaW50ZXJtLmlu
dGVybU5vZGUpLCByZWludGVycHJldF9jYXN0PFRJbnRlcm1UeXBlZCo+KCh5eXZzcFsoNSkgLSAo
NyldLmludGVybS5ub2RlUGFpcikubm9kZTEpLCByZWludGVycHJldF9jYXN0PFRJbnRlcm1UeXBl
ZCo+KCh5eXZzcFsoNSkgLSAoNyldLmludGVybS5ub2RlUGFpcikubm9kZTIpLCAoeXl2c3BbKDcp
IC0gKDcpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eWxzcFsoMSkgLSAoNyldKSk7CisgICAgICAg
IC0tY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAxODY6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7CisgICAgfQorICAgIGJyZWFrOworCisg
IGNhc2UgMTg3OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOworICAgIH0KKyAgICBicmVhazsK
KworICBjYXNlIDE4ODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAg
fQorICAgIGJyZWFrOworCisgIGNhc2UgMTg5OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSAwOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE5
MDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTEgPSAoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS5ub2RlUGFpcikubm9kZTIgPSAwOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE5
MToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTEgPSAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS5ub2RlUGFpcikubm9kZTIgPSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxOTI6CisKKyAgICB7CisgICAg
ICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9IDApIHsKKyAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMildKSwgImNvbnRpbnVlIHN0YXRlbWVudCBvbmx5
IGFsbG93ZWQgaW4gbG9vcHMiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgIH0KKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wQ29udGludWUsICh5eWxzcFsoMSkgLSAoMildKSk7
CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTkzOgorCisgICAgeworICAgICAgICBpZiAo
Y29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXlsc3BbKDEpIC0gKDIpXSksICJicmVhayBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGlu
IGxvb3BzIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9
CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQnJhbmNoKEVPcEJyZWFrLCAoeXlsc3BbKDEpIC0gKDIpXSkpOworICAgIH0KKyAgICBi
cmVhazsKKworICBjYXNlIDE5NDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCAoeXls
c3BbKDEpIC0gKDIpXSkpOworICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlw
ZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoKHl5bHNwWygxKSAtICgyKV0pLCAibm9uLXZvaWQgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSB2
YWx1ZSIsICJyZXR1cm4iKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE5NToKKworICAgIHsKKyAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFu
Y2goRU9wUmV0dXJuLCAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5bHNwWygxKSAtICgzKV0pKTsKKyAgICAgICAgY29udGV4dC0+ZnVuY3Rpb25SZXR1cm5zVmFs
dWUgPSB0cnVlOworICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+Z2V0
QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5
bHNwWygxKSAtICgzKV0pLCAidm9pZCBmdW5jdGlvbiBjYW5ub3QgcmV0dXJuIGEgdmFsdWUiLCAi
cmV0dXJuIik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0gZWxz
ZSBpZiAoKihjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlKSAhPSAoeXl2c3BbKDIpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpKSB7CisgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDMpXSksICJmdW5jdGlvbiByZXR1cm4gaXMgbm90IG1h
dGNoaW5nIHR5cGU6IiwgInJldHVybiIpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTk2OgorCisgICAgewor
ICAgICAgICBGUkFHX09OTFkoImRpc2NhcmQiLCAoeXlsc3BbKDEpIC0gKDIpXSkpOworICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJy
YW5jaChFT3BLaWxsLCAoeXlsc3BbKDEpIC0gKDIpXSkpOworICAgIH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDE5NzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKKyAgICAgICAgY29udGV4dC0+
dHJlZVJvb3QgPSAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpOworICAgIH0KKyAgICBicmVhazsK
KworICBjYXNlIDE5ODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2Rl
KSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoMild
LmludGVybS5pbnRlcm1Ob2RlKSwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUp
LCAoeXlsb2MpKTsKKyAgICAgICAgY29udGV4dC0+dHJlZVJvb3QgPSAoeXl2YWwuaW50ZXJtLmlu
dGVybU5vZGUpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE5OToKKworICAgIHsKKyAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1Ob2RlKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMDA6CisKKyAgICB7
CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uaW50ZXJtTm9kZSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMjAxOgorCisg
ICAgeworICAgICAgICBURnVuY3Rpb24qIGZ1bmN0aW9uID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtKS5mdW5jdGlvbjsKKyAgICAgICAgCisgICAgICAgIGNvbnN0IFRTeW1ib2wgKmJ1aWx0SW4g
PSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbihmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5h
bWUoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoYnVpbHRJbikKKyAgICAgICAgeworICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0pLCAiYnVpbHQtaW4gZnVuY3Rp
b25zIGNhbm5vdCBiZSByZWRlZmluZWQiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwor
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihjb250ZXh0
LT5zeW1ib2xUYWJsZS5maW5kKGZ1bmN0aW9uLT5nZXRNYW5nbGVkTmFtZSgpKSk7CisgICAgICAg
IC8vCisgICAgICAgIC8vIE5vdGU6ICAncHJldkRlYycgY291bGQgYmUgJ2Z1bmN0aW9uJyBpZiB0
aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3ZlIHNlZW4gZnVuY3Rpb24KKyAgICAgICAgLy8gYXMg
aXQgd291bGQgaGF2ZSBqdXN0IGJlZW4gcHV0IGluIHRoZSBzeW1ib2wgdGFibGUuICBPdGhlcndp
c2UsIHdlJ3JlIGxvb2tpbmcgdXAKKyAgICAgICAgLy8gYW4gZWFybGllciBvY2N1cmFuY2UuCisg
ICAgICAgIC8vCisgICAgICAgIGlmIChwcmV2RGVjLT5pc0RlZmluZWQoKSkgeworICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgIC8vIFRoZW4gdGhpcyBmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJv
ZHkuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygx
KSAtICgxKV0pLCAiZnVuY3Rpb24gYWxyZWFkeSBoYXMgYSBib2R5IiwgZnVuY3Rpb24tPmdldE5h
bWUoKS5jX3N0cigpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
fQorICAgICAgICBwcmV2RGVjLT5zZXREZWZpbmVkKCk7CisKKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gUmFpc2UgZXJyb3IgbWVzc2FnZSBpZiBtYWluIGZ1bmN0aW9uIHRha2VzIGFueSBwYXJhbWV0
ZXJzIG9yIHJldHVybiBhbnl0aGluZyBvdGhlciB0aGFuIHZvaWQKKyAgICAgICAgLy8KKyAgICAg
ICAgaWYgKGZ1bmN0aW9uLT5nZXROYW1lKCkgPT0gIm1haW4iKSB7CisgICAgICAgICAgICBpZiAo
ZnVuY3Rpb24tPmdldFBhcmFtQ291bnQoKSA+IDApIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSksICJmdW5jdGlvbiBjYW5ub3QgdGFrZSBhbnkgcGFy
YW1ldGVyKHMpIiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZnVu
Y3Rpb24tPmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7CisgICAg
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0pLCAiIiwgZnVuY3Rp
b24tPmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpLCAibWFpbiBmdW5jdGlvbiBjYW5u
b3QgcmV0dXJuIGEgdmFsdWUiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLworICAgICAgICAvLyBSZW1l
bWJlciB0aGUgcmV0dXJuIHR5cGUgZm9yIGxhdGVyIGNoZWNraW5nIGZvciBSRVRVUk4gc3RhdGVt
ZW50cy4KKyAgICAgICAgLy8KKyAgICAgICAgY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZSA9
ICYocHJldkRlYy0+Z2V0UmV0dXJuVHlwZSgpKTsKKyAgICAgICAgY29udGV4dC0+ZnVuY3Rpb25S
ZXR1cm5zVmFsdWUgPSBmYWxzZTsKKworICAgICAgICAvLworICAgICAgICAvLyBJbnNlcnQgcGFy
YW1ldGVycyBpbnRvIHRoZSBzeW1ib2wgdGFibGUuCisgICAgICAgIC8vIElmIHRoZSBwYXJhbWV0
ZXIgaGFzIG5vIG5hbWUsIGl0J3Mgbm90IGFuIGVycm9yLCBqdXN0IGRvbid0IGluc2VydCBpdAor
ICAgICAgICAvLyAoY291bGQgYmUgdXNlZCBmb3IgdW51c2VkIGFyZ3MpLgorICAgICAgICAvLwor
ICAgICAgICAvLyBBbHNvLCBhY2N1bXVsYXRlIHRoZSBsaXN0IG9mIHBhcmFtZXRlcnMgaW50byB0
aGUgSElMLCBzbyBsb3dlciBsZXZlbCBjb2RlCisgICAgICAgIC8vIGtub3dzIHdoZXJlIHRvIGZp
bmQgcGFyYW1ldGVycy4KKyAgICAgICAgLy8KKyAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSogcGFy
YW1Ob2RlcyA9IG5ldyBUSW50ZXJtQWdncmVnYXRlOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGZ1bmN0aW9uLT5nZXRQYXJhbUNvdW50KCk7IGkrKykgeworICAgICAgICAgICAgY29u
c3QgVFBhcmFtZXRlciYgcGFyYW0gPSBmdW5jdGlvbi0+Z2V0UGFyYW0oaSk7CisgICAgICAgICAg
ICBpZiAocGFyYW0ubmFtZSAhPSAwKSB7CisgICAgICAgICAgICAgICAgVFZhcmlhYmxlICp2YXJp
YWJsZSA9IG5ldyBUVmFyaWFibGUocGFyYW0ubmFtZSwgKnBhcmFtLnR5cGUpOworICAgICAgICAg
ICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IHRoZSBwYXJhbWV0ZXJzIHdpdGgg
bmFtZSBpbiB0aGUgc3ltYm9sIHRhYmxlLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAgICAgaWYgKCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0pLCAicmVk
ZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICAgICBkZWxldGUgdmFy
aWFibGU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgICAgICAvLyBBZGQgdGhlIHBhcmFtZXRlciB0byB0aGUgSElMCisgICAgICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgICAgICBwYXJhbU5vZGVzID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdy
b3dBZ2dyZWdhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmFtTm9kZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUtPmdldFVuaXF1
ZUlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldE5hbWUoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICh5eWxzcFsoMSkgLSAoMSldKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHBhcmFtTm9kZXMgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jv
d0FnZ3JlZ2F0ZShwYXJhbU5vZGVzLCBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAs
ICIiLCAqcGFyYW0udHlwZSwgKHl5bHNwWygxKSAtICgxKV0pKSwgKHl5bHNwWygxKSAtICgxKV0p
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuc2V0QWdncmVnYXRlT3BlcmF0b3IocGFyYW1Ob2RlcywgRU9wUGFyYW1ldGVycywgKHl5bHNw
WygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1B
Z2dyZWdhdGUgPSBwYXJhbU5vZGVzOworICAgICAgICBjb250ZXh0LT5sb29wTmVzdGluZ0xldmVs
ID0gMDsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMDI6CisKKyAgICB7CisgICAgICAg
IC8vPz8gQ2hlY2sgdGhhdCBhbGwgcGF0aHMgcmV0dXJuIGEgdmFsdWUgaWYgcmV0dXJuIHR5cGUg
IT0gdm9pZCA/CisgICAgICAgIC8vICAgTWF5IGJlIGJlc3QgZG9uZSBhcyBwb3N0IHByb2Nlc3Mg
cGhhc2Ugb24gaW50ZXJtZWRpYXRlIGNvZGUKKyAgICAgICAgaWYgKGNvbnRleHQtPmN1cnJlbnRG
dW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQgJiYgISBjb250ZXh0LT5mdW5j
dGlvblJldHVybnNWYWx1ZSkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygx
KSAtICgzKV0pLCAiZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIGEgdmFsdWU6IiwgIiIsICh5eXZz
cFsoMSkgLSAoMyldLmludGVybSkuZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdn
cmVnYXRlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybSkuaW50ZXJtQWdncmVnYXRlLCAoeXl2c3Bb
KDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eWxvYykpOworICAgICAgICBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IoKHl5dmFsLmludGVybS5pbnRlcm1O
b2RlKSwgRU9wRnVuY3Rpb24sICh5eWxzcFsoMSkgLSAoMyldKSk7CisgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtTm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNldE5hbWUoKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtKS5mdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKS5jX3N0cigpKTsKKyAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0VHlwZSgo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmZ1bmN0aW9uLT5nZXRSZXR1cm5UeXBlKCkpOworCisg
ICAgICAgIC8vIHN0b3JlIHRoZSBwcmFnbWEgaW5mb3JtYXRpb24gZm9yIGRlYnVnIGFuZCBvcHRp
bWl6ZSBhbmQgb3RoZXIgdmVuZG9yIHNwZWNpZmljCisgICAgICAgIC8vIGluZm9ybWF0aW9uLiBU
aGlzIGluZm9ybWF0aW9uIGNhbiBiZSBxdWVyaWVkIGZyb20gdGhlIHBhcnNlIHRyZWUKKyAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0T3B0aW1p
emUoY29udGV4dC0+cHJhZ21hKCkub3B0aW1pemUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXREZWJ1Zyhjb250ZXh0LT5wcmFnbWEoKS5k
ZWJ1Zyk7CisKKyAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7CisgICAgfQorICAg
IGJyZWFrOworCisKKworICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorICAvKiBVc2VyIHNl
bWFudGljIGFjdGlvbnMgc29tZXRpbWVzIGFsdGVyIHl5Y2hhciwgYW5kIHRoYXQgcmVxdWlyZXMK
KyAgICAgdGhhdCB5eXRva2VuIGJlIHVwZGF0ZWQgd2l0aCB0aGUgbmV3IHRyYW5zbGF0aW9uLiAg
V2UgdGFrZSB0aGUKKyAgICAgYXBwcm9hY2ggb2YgdHJhbnNsYXRpbmcgaW1tZWRpYXRlbHkgYmVm
b3JlIGV2ZXJ5IHVzZSBvZiB5eXRva2VuLgorICAgICBPbmUgYWx0ZXJuYXRpdmUgaXMgdHJhbnNs
YXRpbmcgaGVyZSBhZnRlciBldmVyeSBzZW1hbnRpYyBhY3Rpb24sCisgICAgIGJ1dCB0aGF0IHRy
YW5zbGF0aW9uIHdvdWxkIGJlIG1pc3NlZCBpZiB0aGUgc2VtYW50aWMgYWN0aW9uIGludm9rZXMK
KyAgICAgWVlBQk9SVCwgWVlBQ0NFUFQsIG9yIFlZRVJST1IgaW1tZWRpYXRlbHkgYWZ0ZXIgYWx0
ZXJpbmcgeXljaGFyIG9yCisgICAgIGlmIGl0IGludm9rZXMgWVlCQUNLVVAuICBJbiB0aGUgY2Fz
ZSBvZiBZWUFCT1JUIG9yIFlZQUNDRVBULCBhbgorICAgICBpbmNvcnJlY3QgZGVzdHJ1Y3RvciBt
aWdodCB0aGVuIGJlIGludm9rZWQgaW1tZWRpYXRlbHkuICBJbiB0aGUKKyAgICAgY2FzZSBvZiBZ
WUVSUk9SIG9yIFlZQkFDS1VQLCBzdWJzZXF1ZW50IHBhcnNlciBhY3Rpb25zIG1pZ2h0IGxlYWQK
KyAgICAgdG8gYW4gaW5jb3JyZWN0IGRlc3RydWN0b3IgY2FsbCBvciB2ZXJib3NlIHN5bnRheCBl
cnJvciBtZXNzYWdlCisgICAgIGJlZm9yZSB0aGUgbG9va2FoZWFkIGlzIHRyYW5zbGF0ZWQuICAq
LworICBZWV9TWU1CT0xfUFJJTlQgKCItPiAkJCA9IiwgeXlyMVt5eW5dLCAmeXl2YWwsICZ5eWxv
Yyk7CisKKyAgWVlQT1BTVEFDSyAoeXlsZW4pOworICB5eWxlbiA9IDA7CisgIFlZX1NUQUNLX1BS
SU5UICh5eXNzLCB5eXNzcCk7CisKKyAgKisreXl2c3AgPSB5eXZhbDsKKyAgKisreXlsc3AgPSB5
eWxvYzsKKworICAvKiBOb3cgYHNoaWZ0JyB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24uICBE
ZXRlcm1pbmUgd2hhdCBzdGF0ZQorICAgICB0aGF0IGdvZXMgdG8sIGJhc2VkIG9uIHRoZSBzdGF0
ZSB3ZSBwb3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUKKyAgICAgbnVtYmVyIHJlZHVjZWQgYnku
ICAqLworCisgIHl5biA9IHl5cjFbeXluXTsKKworICB5eXN0YXRlID0geXlwZ290b1t5eW4gLSBZ
WU5UT0tFTlNdICsgKnl5c3NwOworICBpZiAoMCA8PSB5eXN0YXRlICYmIHl5c3RhdGUgPD0gWVlM
QVNUICYmIHl5Y2hlY2tbeXlzdGF0ZV0gPT0gKnl5c3NwKQorICAgIHl5c3RhdGUgPSB5eXRhYmxl
W3l5c3RhdGVdOworICBlbHNlCisgICAgeXlzdGF0ZSA9IHl5ZGVmZ290b1t5eW4gLSBZWU5UT0tF
TlNdOworCisgIGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS4KK3wgeXllcnJsYWIgLS0gaGVyZSBvbiBkZXRlY3RpbmcgZXJyb3IgfAor
YC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWVycmxhYjoKKyAgLyog
TWFrZSBzdXJlIHdlIGhhdmUgbGF0ZXN0IGxvb2thaGVhZCB0cmFuc2xhdGlvbi4gIFNlZSBjb21t
ZW50cyBhdAorICAgICB1c2VyIHNlbWFudGljIGFjdGlvbnMgZm9yIHdoeSB0aGlzIGlzIG5lY2Vz
c2FyeS4gICovCisgIHl5dG9rZW4gPSB5eWNoYXIgPT0gWVlFTVBUWSA/IFlZRU1QVFkgOiBZWVRS
QU5TTEFURSAoeXljaGFyKTsKKworICAvKiBJZiBub3QgYWxyZWFkeSByZWNvdmVyaW5nIGZyb20g
YW4gZXJyb3IsIHJlcG9ydCB0aGlzIGVycm9yLiAgKi8KKyAgaWYgKCF5eWVycnN0YXR1cykKKyAg
ICB7CisgICAgICArK3l5bmVycnM7CisjaWYgISBZWUVSUk9SX1ZFUkJPU0UKKyAgICAgIHl5ZXJy
b3IgKCZ5eWxsb2MsIGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yIikpOworI2Vsc2UKKyMgZGVm
aW5lIFlZU1lOVEFYX0VSUk9SIHl5c3ludGF4X2Vycm9yICgmeXltc2dfYWxsb2MsICZ5eW1zZywg
XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl5c3NwLCB5eXRva2Vu
KQorICAgICAgeworICAgICAgICBjaGFyIGNvbnN0ICp5eW1zZ3AgPSBZWV8oInN5bnRheCBlcnJv
ciIpOworICAgICAgICBpbnQgeXlzeW50YXhfZXJyb3Jfc3RhdHVzOworICAgICAgICB5eXN5bnRh
eF9lcnJvcl9zdGF0dXMgPSBZWVNZTlRBWF9FUlJPUjsKKyAgICAgICAgaWYgKHl5c3ludGF4X2Vy
cm9yX3N0YXR1cyA9PSAwKQorICAgICAgICAgIHl5bXNncCA9IHl5bXNnOworICAgICAgICBlbHNl
IGlmICh5eXN5bnRheF9lcnJvcl9zdGF0dXMgPT0gMSkKKyAgICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoeXltc2cgIT0geXltc2didWYpCisgICAgICAgICAgICAgIFlZU1RBQ0tfRlJFRSAoeXlt
c2cpOworICAgICAgICAgICAgeXltc2cgPSAoY2hhciAqKSBZWVNUQUNLX0FMTE9DICh5eW1zZ19h
bGxvYyk7CisgICAgICAgICAgICBpZiAoIXl5bXNnKQorICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgeXltc2cgPSB5eW1zZ2J1ZjsKKyAgICAgICAgICAgICAgICB5eW1zZ19hbGxvYyA9
IHNpemVvZiB5eW1zZ2J1ZjsKKyAgICAgICAgICAgICAgICB5eXN5bnRheF9lcnJvcl9zdGF0dXMg
PSAyOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICB5eXN5bnRheF9lcnJvcl9zdGF0dXMgPSBZWVNZTlRBWF9FUlJPUjsK
KyAgICAgICAgICAgICAgICB5eW1zZ3AgPSB5eW1zZzsKKyAgICAgICAgICAgICAgfQorICAgICAg
ICAgIH0KKyAgICAgICAgeXllcnJvciAoJnl5bGxvYywgY29udGV4dCwgeXltc2dwKTsKKyAgICAg
ICAgaWYgKHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9PSAyKQorICAgICAgICAgIGdvdG8geXlleGhh
dXN0ZWRsYWI7CisgICAgICB9CisjIHVuZGVmIFlZU1lOVEFYX0VSUk9SCisjZW5kaWYKKyAgICB9
CisKKyAgeXllcnJvcl9yYW5nZVsxXSA9IHl5bGxvYzsKKworICBpZiAoeXllcnJzdGF0dXMgPT0g
MykKKyAgICB7CisgICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9v
a2FoZWFkIHRva2VuIGFmdGVyIGFuCisJIGVycm9yLCBkaXNjYXJkIGl0LiAgKi8KKworICAgICAg
aWYgKHl5Y2hhciA8PSBZWUVPRikKKwl7CisJICAvKiBSZXR1cm4gZmFpbHVyZSBpZiBhdCBlbmQg
b2YgaW5wdXQuICAqLworCSAgaWYgKHl5Y2hhciA9PSBZWUVPRikKKwkgICAgWVlBQk9SVDsKKwl9
CisgICAgICBlbHNlCisJeworCSAgeXlkZXN0cnVjdCAoIkVycm9yOiBkaXNjYXJkaW5nIiwKKwkJ
ICAgICAgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYywgY29udGV4dCk7CisJICB5eWNoYXIgPSBZ
WUVNUFRZOworCX0KKyAgICB9CisKKyAgLyogRWxzZSB3aWxsIHRyeSB0byByZXVzZSBsb29rYWhl
YWQgdG9rZW4gYWZ0ZXIgc2hpZnRpbmcgdGhlIGVycm9yCisgICAgIHRva2VuLiAgKi8KKyAgZ290
byB5eWVycmxhYjE7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0uCit8IHl5ZXJyb3JsYWIgLS0gZXJyb3IgcmFpc2VkIGV4cGxpY2l0bHkg
YnkgWVlFUlJPUi4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLworeXllcnJvcmxhYjoKKworICAvKiBQYWNpZnkgY29tcGlsZXJzIGxpa2Ug
R0NDIHdoZW4gdGhlIHVzZXIgY29kZSBuZXZlciBpbnZva2VzCisgICAgIFlZRVJST1IgYW5kIHRo
ZSBsYWJlbCB5eWVycm9ybGFiIHRoZXJlZm9yZSBuZXZlciBhcHBlYXJzIGluIHVzZXIKKyAgICAg
Y29kZS4gICovCisgIGlmICgvKkNPTlNUQ09ORCovIDApCisgICAgIGdvdG8geXllcnJvcmxhYjsK
KworICB5eWVycm9yX3JhbmdlWzFdID0geXlsc3BbMS15eWxlbl07CisgIC8qIERvIG5vdCByZWNs
YWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKKyAgICAg
dGhpcyBZWUVSUk9SLiAgKi8KKyAgWVlQT1BTVEFDSyAoeXlsZW4pOworICB5eWxlbiA9IDA7Cisg
IFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CisgIHl5c3RhdGUgPSAqeXlzc3A7CisgIGdv
dG8geXllcnJsYWIxOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJsYWIxIC0tIGNvbW1vbiBjb2RlIGZv
ciBib3RoIHN5bnRheCBlcnJvciBhbmQgWVlFUlJPUi4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXJybGFiMToK
KyAgeXllcnJzdGF0dXMgPSAzOwkvKiBFYWNoIHJlYWwgdG9rZW4gc2hpZnRlZCBkZWNyZW1lbnRz
IHRoaXMuICAqLworCisgIGZvciAoOzspCisgICAgeworICAgICAgeXluID0geXlwYWN0W3l5c3Rh
dGVdOworICAgICAgaWYgKCF5eXBhY3RfdmFsdWVfaXNfZGVmYXVsdCAoeXluKSkKKwl7CisJICB5
eW4gKz0gWVlURVJST1I7CisJICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5eWNo
ZWNrW3l5bl0gPT0gWVlURVJST1IpCisJICAgIHsKKwkgICAgICB5eW4gPSB5eXRhYmxlW3l5bl07
CisJICAgICAgaWYgKDAgPCB5eW4pCisJCWJyZWFrOworCSAgICB9CisJfQorCisgICAgICAvKiBQ
b3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0
b2tlbi4gICovCisgICAgICBpZiAoeXlzc3AgPT0geXlzcykKKwlZWUFCT1JUOworCisgICAgICB5
eWVycm9yX3JhbmdlWzFdID0gKnl5bHNwOworICAgICAgeXlkZXN0cnVjdCAoIkVycm9yOiBwb3Bw
aW5nIiwKKwkJICB5eXN0b3NbeXlzdGF0ZV0sIHl5dnNwLCB5eWxzcCwgY29udGV4dCk7CisgICAg
ICBZWVBPUFNUQUNLICgxKTsKKyAgICAgIHl5c3RhdGUgPSAqeXlzc3A7CisgICAgICBZWV9TVEFD
S19QUklOVCAoeXlzcywgeXlzc3ApOworICAgIH0KKworICBZWV9JR05PUkVfTUFZQkVfVU5JTklU
SUFMSVpFRF9CRUdJTgorICAqKyt5eXZzcCA9IHl5bHZhbDsKKyAgWVlfSUdOT1JFX01BWUJFX1VO
SU5JVElBTElaRURfRU5ECisKKyAgeXllcnJvcl9yYW5nZVsyXSA9IHl5bGxvYzsKKyAgLyogVXNp
bmcgWVlMTE9DIGlzIHRlbXB0aW5nLCBidXQgd291bGQgY2hhbmdlIHRoZSBsb2NhdGlvbiBvZgor
ICAgICB0aGUgbG9va2FoZWFkLiAgWVlMT0MgaXMgYXZhaWxhYmxlIHRob3VnaC4gICovCisgIFlZ
TExPQ19ERUZBVUxUICh5eWxvYywgeXllcnJvcl9yYW5nZSwgMik7CisgICorK3l5bHNwID0geXls
b2M7CisKKyAgLyogU2hpZnQgdGhlIGVycm9yIHRva2VuLiAgKi8KKyAgWVlfU1lNQk9MX1BSSU5U
ICgiU2hpZnRpbmciLCB5eXN0b3NbeXluXSwgeXl2c3AsIHl5bHNwKTsKKworICB5eXN0YXRlID0g
eXluOworICBnb3RvIHl5bmV3c3RhdGU7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLgorfCB5eWFjY2VwdGxhYiAtLSBZWUFDQ0VQVCBjb21lcyBoZXJlLiAgfAor
YC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlhY2NlcHRsYWI6Cisg
IHl5cmVzdWx0ID0gMDsKKyAgZ290byB5eXJldHVybjsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlhYm9ydGxhYiAtLSBZWUFCT1JUIGNvbWVzIGhlcmUuICB8
CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlhYm9ydGxhYjoKKyAg
eXlyZXN1bHQgPSAxOworICBnb3RvIHl5cmV0dXJuOworCisjaWYgIWRlZmluZWQgeXlvdmVyZmxv
dyB8fCBZWUVSUk9SX1ZFUkJPU0UKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlleGhhdXN0ZWRsYWIgLS0gbWVtb3J5IGV4aGF1c3Rpb24g
Y29tZXMgaGVyZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKi8KK3l5ZXhoYXVzdGVkbGFiOgorICB5eWVycm9yICgmeXlsbG9jLCBjb250ZXh0
LCBZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSk7CisgIHl5cmVzdWx0ID0gMjsKKyAgLyogRmFsbCB0
aHJvdWdoLiAgKi8KKyNlbmRpZgorCit5eXJldHVybjoKKyAgaWYgKHl5Y2hhciAhPSBZWUVNUFRZ
KQorICAgIHsKKyAgICAgIC8qIE1ha2Ugc3VyZSB3ZSBoYXZlIGxhdGVzdCBsb29rYWhlYWQgdHJh
bnNsYXRpb24uICBTZWUgY29tbWVudHMgYXQKKyAgICAgICAgIHVzZXIgc2VtYW50aWMgYWN0aW9u
cyBmb3Igd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LiAgKi8KKyAgICAgIHl5dG9rZW4gPSBZWVRSQU5T
TEFURSAoeXljaGFyKTsKKyAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBkaXNjYXJkaW5nIGxv
b2thaGVhZCIsCisgICAgICAgICAgICAgICAgICB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jLCBj
b250ZXh0KTsKKyAgICB9CisgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBy
dWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKKyAgICAgdGhpcyBZWUFCT1JUIG9yIFlZQUNDRVBU
LiAgKi8KKyAgWVlQT1BTVEFDSyAoeXlsZW4pOworICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlz
c3ApOworICB3aGlsZSAoeXlzc3AgIT0geXlzcykKKyAgICB7CisgICAgICB5eWRlc3RydWN0ICgi
Q2xlYW51cDogcG9wcGluZyIsCisJCSAgeXlzdG9zWyp5eXNzcF0sIHl5dnNwLCB5eWxzcCwgY29u
dGV4dCk7CisgICAgICBZWVBPUFNUQUNLICgxKTsKKyAgICB9CisjaWZuZGVmIHl5b3ZlcmZsb3cK
KyAgaWYgKHl5c3MgIT0geXlzc2EpCisgICAgWVlTVEFDS19GUkVFICh5eXNzKTsKKyNlbmRpZgor
I2lmIFlZRVJST1JfVkVSQk9TRQorICBpZiAoeXltc2cgIT0geXltc2didWYpCisgICAgWVlTVEFD
S19GUkVFICh5eW1zZyk7CisjZW5kaWYKKyAgLyogTWFrZSBzdXJlIFlZSUQgaXMgdXNlZC4gICov
CisgIHJldHVybiBZWUlEICh5eXJlc3VsdCk7Cit9CisKKworCisKKworaW50IGdsc2xhbmdfcGFy
c2UoVFBhcnNlQ29udGV4dCogY29udGV4dCkgeworICAgIHJldHVybiB5eXBhcnNlKGNvbnRleHQp
OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvZ2xzbGFuZ190YWIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDE0NDE5YTc2NWI5ZjI0
NjVlZWQxZmRmNDk4YzkwZmNkY2I0NWEzNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmgKQEAgLTAs
MCArMSwyMjUgQEAKKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjcuMS4g
ICovCisKKy8qIEFwcGxlIE5vdGU6IEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBBcHBsZSBl
bGVjdHMgdG8gZGlzdHJpYnV0ZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBCU0Qg
bGljZW5zZS4gKi8KKworLyogQmlzb24gaW50ZXJmYWNlIGZvciBZYWNjLWxpa2UgcGFyc2VycyBp
biBDCisgICAKKyAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAyMDAwLTIwMTMg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBm
cmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNp
b24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgICAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAKKyAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBh
bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcv
bGljZW5zZXMvPi4gICovCisKKy8qIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgY3Jl
YXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucworICAgcGFydCBvciBhbGwgb2YgdGhlIEJp
c29uIHBhcnNlciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKKyAgIHVuZGVyIHRl
cm1zIG9mIHlvdXIgY2hvaWNlLCBzbyBsb25nIGFzIHRoYXQgd29yayBpc24ndCBpdHNlbGYgYQor
ICAgcGFyc2VyIGdlbmVyYXRvciB1c2luZyB0aGUgc2tlbGV0b24gb3IgYSBtb2RpZmllZCB2ZXJz
aW9uIHRoZXJlb2YKKyAgIGFzIGEgcGFyc2VyIHNrZWxldG9uLiAgQWx0ZXJuYXRpdmVseSwgaWYg
eW91IG1vZGlmeSBvciByZWRpc3RyaWJ1dGUKKyAgIHRoZSBwYXJzZXIgc2tlbGV0b24gaXRzZWxm
LCB5b3UgbWF5IChhdCB5b3VyIG9wdGlvbikgcmVtb3ZlIHRoaXMKKyAgIHNwZWNpYWwgZXhjZXB0
aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQgdGhlIHJlc3VsdGluZworICAg
Qmlzb24gb3V0cHV0IGZpbGVzIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQ
dWJsaWMKKyAgIExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uLgorICAgCisg
ICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uIGluCisgICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICovCisKKyNpZm5kZWYgWVlf
WVlfR0xTTEFOR19UQUJfSF9JTkNMVURFRAorIyBkZWZpbmUgWVlfWVlfR0xTTEFOR19UQUJfSF9J
TkNMVURFRAorLyogRW5hYmxpbmcgdHJhY2VzLiAgKi8KKyNpZm5kZWYgWVlERUJVRworIyBkZWZp
bmUgWVlERUJVRyAwCisjZW5kaWYKKyNpZiBZWURFQlVHCitleHRlcm4gaW50IHl5ZGVidWc7Cisj
ZW5kaWYKKy8qICIlY29kZSByZXF1aXJlcyIgYmxvY2tzLiAgKi8KKworCisjZGVmaW5lIFlZTFRZ
UEUgVFNvdXJjZUxvYworI2RlZmluZSBZWUxUWVBFX0lTX0RFQ0xBUkVEIDEKKyNkZWZpbmUgU0hf
TUFYX1RPS0VOX0xFTkdUSCAyNTYgIC8vIFdlYkdMIHNwZWMuCisKKworCisKKy8qIFRva2Vucy4g
ICovCisjaWZuZGVmIFlZVE9LRU5UWVBFCisjIGRlZmluZSBZWVRPS0VOVFlQRQorICAgLyogUHV0
IHRoZSB0b2tlbnMgaW50byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdEQiBhbmQgb3RoZXIg
ZGVidWdnZXJzCisgICAgICBrbm93IGFib3V0IHRoZW0uICAqLworICAgZW51bSB5eXRva2VudHlw
ZSB7CisgICAgIElOVkFSSUFOVCA9IDI1OCwKKyAgICAgSElHSF9QUkVDSVNJT04gPSAyNTksCisg
ICAgIE1FRElVTV9QUkVDSVNJT04gPSAyNjAsCisgICAgIExPV19QUkVDSVNJT04gPSAyNjEsCisg
ICAgIFBSRUNJU0lPTiA9IDI2MiwKKyAgICAgQVRUUklCVVRFID0gMjYzLAorICAgICBDT05TVF9R
VUFMID0gMjY0LAorICAgICBCT09MX1RZUEUgPSAyNjUsCisgICAgIEZMT0FUX1RZUEUgPSAyNjYs
CisgICAgIElOVF9UWVBFID0gMjY3LAorICAgICBCUkVBSyA9IDI2OCwKKyAgICAgQ09OVElOVUUg
PSAyNjksCisgICAgIERPID0gMjcwLAorICAgICBFTFNFID0gMjcxLAorICAgICBGT1IgPSAyNzIs
CisgICAgIElGID0gMjczLAorICAgICBESVNDQVJEID0gMjc0LAorICAgICBSRVRVUk4gPSAyNzUs
CisgICAgIEJWRUMyID0gMjc2LAorICAgICBCVkVDMyA9IDI3NywKKyAgICAgQlZFQzQgPSAyNzgs
CisgICAgIElWRUMyID0gMjc5LAorICAgICBJVkVDMyA9IDI4MCwKKyAgICAgSVZFQzQgPSAyODEs
CisgICAgIFZFQzIgPSAyODIsCisgICAgIFZFQzMgPSAyODMsCisgICAgIFZFQzQgPSAyODQsCisg
ICAgIE1BVFJJWDIgPSAyODUsCisgICAgIE1BVFJJWDMgPSAyODYsCisgICAgIE1BVFJJWDQgPSAy
ODcsCisgICAgIElOX1FVQUwgPSAyODgsCisgICAgIE9VVF9RVUFMID0gMjg5LAorICAgICBJTk9V
VF9RVUFMID0gMjkwLAorICAgICBVTklGT1JNID0gMjkxLAorICAgICBWQVJZSU5HID0gMjkyLAor
ICAgICBTVFJVQ1QgPSAyOTMsCisgICAgIFZPSURfVFlQRSA9IDI5NCwKKyAgICAgV0hJTEUgPSAy
OTUsCisgICAgIFNBTVBMRVIyRCA9IDI5NiwKKyAgICAgU0FNUExFUkNVQkUgPSAyOTcsCisgICAg
IFNBTVBMRVJfRVhURVJOQUxfT0VTID0gMjk4LAorICAgICBTQU1QTEVSMkRSRUNUID0gMjk5LAor
ICAgICBJREVOVElGSUVSID0gMzAwLAorICAgICBUWVBFX05BTUUgPSAzMDEsCisgICAgIEZMT0FU
Q09OU1RBTlQgPSAzMDIsCisgICAgIElOVENPTlNUQU5UID0gMzAzLAorICAgICBCT09MQ09OU1RB
TlQgPSAzMDQsCisgICAgIExFRlRfT1AgPSAzMDUsCisgICAgIFJJR0hUX09QID0gMzA2LAorICAg
ICBJTkNfT1AgPSAzMDcsCisgICAgIERFQ19PUCA9IDMwOCwKKyAgICAgTEVfT1AgPSAzMDksCisg
ICAgIEdFX09QID0gMzEwLAorICAgICBFUV9PUCA9IDMxMSwKKyAgICAgTkVfT1AgPSAzMTIsCisg
ICAgIEFORF9PUCA9IDMxMywKKyAgICAgT1JfT1AgPSAzMTQsCisgICAgIFhPUl9PUCA9IDMxNSwK
KyAgICAgTVVMX0FTU0lHTiA9IDMxNiwKKyAgICAgRElWX0FTU0lHTiA9IDMxNywKKyAgICAgQURE
X0FTU0lHTiA9IDMxOCwKKyAgICAgTU9EX0FTU0lHTiA9IDMxOSwKKyAgICAgTEVGVF9BU1NJR04g
PSAzMjAsCisgICAgIFJJR0hUX0FTU0lHTiA9IDMyMSwKKyAgICAgQU5EX0FTU0lHTiA9IDMyMiwK
KyAgICAgWE9SX0FTU0lHTiA9IDMyMywKKyAgICAgT1JfQVNTSUdOID0gMzI0LAorICAgICBTVUJf
QVNTSUdOID0gMzI1LAorICAgICBMRUZUX1BBUkVOID0gMzI2LAorICAgICBSSUdIVF9QQVJFTiA9
IDMyNywKKyAgICAgTEVGVF9CUkFDS0VUID0gMzI4LAorICAgICBSSUdIVF9CUkFDS0VUID0gMzI5
LAorICAgICBMRUZUX0JSQUNFID0gMzMwLAorICAgICBSSUdIVF9CUkFDRSA9IDMzMSwKKyAgICAg
RE9UID0gMzMyLAorICAgICBDT01NQSA9IDMzMywKKyAgICAgQ09MT04gPSAzMzQsCisgICAgIEVR
VUFMID0gMzM1LAorICAgICBTRU1JQ09MT04gPSAzMzYsCisgICAgIEJBTkcgPSAzMzcsCisgICAg
IERBU0ggPSAzMzgsCisgICAgIFRJTERFID0gMzM5LAorICAgICBQTFVTID0gMzQwLAorICAgICBT
VEFSID0gMzQxLAorICAgICBTTEFTSCA9IDM0MiwKKyAgICAgUEVSQ0VOVCA9IDM0MywKKyAgICAg
TEVGVF9BTkdMRSA9IDM0NCwKKyAgICAgUklHSFRfQU5HTEUgPSAzNDUsCisgICAgIFZFUlRJQ0FM
X0JBUiA9IDM0NiwKKyAgICAgQ0FSRVQgPSAzNDcsCisgICAgIEFNUEVSU0FORCA9IDM0OCwKKyAg
ICAgUVVFU1RJT04gPSAzNDkKKyAgIH07CisjZW5kaWYKKworCisjaWYgISBkZWZpbmVkIFlZU1RZ
UEUgJiYgISBkZWZpbmVkIFlZU1RZUEVfSVNfREVDTEFSRUQKK3R5cGVkZWYgdW5pb24gWVlTVFlQ
RQoreworCisKKyAgICBzdHJ1Y3QgeworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBUU3Ry
aW5nICpzdHJpbmc7CisgICAgICAgICAgICBmbG9hdCBmOworICAgICAgICAgICAgaW50IGk7Cisg
ICAgICAgICAgICBib29sIGI7CisgICAgICAgIH07CisgICAgICAgIFRTeW1ib2wqIHN5bWJvbDsK
KyAgICB9IGxleDsKKyAgICBzdHJ1Y3QgeworICAgICAgICBUT3BlcmF0b3Igb3A7CisgICAgICAg
IHVuaW9uIHsKKyAgICAgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOworICAgICAgICAg
ICAgVEludGVybU5vZGVQYWlyIG5vZGVQYWlyOworICAgICAgICAgICAgVEludGVybVR5cGVkKiBp
bnRlcm1UeXBlZE5vZGU7CisgICAgICAgICAgICBUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dy
ZWdhdGU7CisgICAgICAgIH07CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFRQdWJsaWNU
eXBlIHR5cGU7CisgICAgICAgICAgICBUUHJlY2lzaW9uIHByZWNpc2lvbjsKKyAgICAgICAgICAg
IFRRdWFsaWZpZXIgcXVhbGlmaWVyOworICAgICAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlvbjsK
KyAgICAgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW07CisgICAgICAgICAgICBURmllbGQqIGZpZWxk
OworICAgICAgICAgICAgVEZpZWxkTGlzdCogZmllbGRMaXN0OworICAgICAgICB9OworICAgIH0g
aW50ZXJtOworCisKKworfSBZWVNUWVBFOworIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEK
KyMgZGVmaW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJh
d24gKi8KKyMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQorI2VuZGlmCisKKyNpZiAhIGRl
ZmluZWQgWVlMVFlQRSAmJiAhIGRlZmluZWQgWVlMVFlQRV9JU19ERUNMQVJFRAordHlwZWRlZiBz
dHJ1Y3QgWVlMVFlQRQoreworICBpbnQgZmlyc3RfbGluZTsKKyAgaW50IGZpcnN0X2NvbHVtbjsK
KyAgaW50IGxhc3RfbGluZTsKKyAgaW50IGxhc3RfY29sdW1uOworfSBZWUxUWVBFOworIyBkZWZp
bmUgeXlsdHlwZSBZWUxUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLwor
IyBkZWZpbmUgWVlMVFlQRV9JU19ERUNMQVJFRCAxCisjIGRlZmluZSBZWUxUWVBFX0lTX1RSSVZJ
QUwgMQorI2VuZGlmCisKKworI2lmZGVmIFlZUEFSU0VfUEFSQU0KKyNpZiBkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKK2ludCB5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BB
UkFNKTsKKyNlbHNlCitpbnQgeXlwYXJzZSAoKTsKKyNlbmRpZgorI2Vsc2UgLyogISBZWVBBUlNF
X1BBUkFNICovCisjaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCitp
bnQgeXlwYXJzZSAoVFBhcnNlQ29udGV4dCogY29udGV4dCk7CisjZWxzZQoraW50IHl5cGFyc2Ug
KCk7CisjZW5kaWYKKyNlbmRpZiAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KKworI2VuZGlmIC8qICFZ
WV9ZWV9HTFNMQU5HX1RBQl9IX0lOQ0xVREVEICAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtT3V0LmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2ludGVybU91dC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZjJmOTE4ZDc3YTc4MmY4ZTIxZWM4NTU1NDMyMGY0YWRkZjg0NGVhZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL2ludGVybU91dC5jcHAKQEAgLTAsMCArMSw0MjQgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2xvY2FsaW50ZXJtZWRpYXRlLmgiCisK
Ky8vCisvLyBUd28gcHVycG9zZXM6CisvLyAxLiAgU2hvdyBhbiBleGFtcGxlIG9mIGhvdyB0byBp
dGVyYXRlIHRyZWUuICBGdW5jdGlvbnMgY2FuCisvLyAgICAgYWxzbyBkaXJlY3RseSBjYWxsIFRy
YXZlcnNlKCkgb24gY2hpbGRyZW4gdGhlbXNlbHZlcyB0bworLy8gICAgIGhhdmUgZmluZXIgZ3Jh
aW5lZCBjb250cm9sIG92ZXIgdGhlIHByb2Nlc3MgdGhhbiBzaG93biBoZXJlLgorLy8gICAgIFNl
ZSB0aGUgbGFzdCBmdW5jdGlvbiBmb3IgaG93IHRvIGdldCBzdGFydGVkLgorLy8gMi4gIFByaW50
IG91dCBhIHRleHQgYmFzZWQgZGVzY3JpcHRpb24gb2YgdGhlIHRyZWUuCisvLworCisvLworLy8g
VXNlIHRoaXMgY2xhc3MgdG8gY2FycnkgYWxvbmcgZGF0YSBmcm9tIG5vZGUgdG8gbm9kZSBpbgor
Ly8gdGhlIHRyYXZlcnNhbAorLy8KK2NsYXNzIFRPdXRwdXRUcmF2ZXJzZXIgOiBwdWJsaWMgVElu
dGVybVRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgVE91dHB1dFRyYXZlcnNlcihUSW5mb1NpbmtC
YXNlJiBpKSA6IHNpbmsoaSkgeyB9CisgICAgVEluZm9TaW5rQmFzZSYgc2luazsKKworcHJvdGVj
dGVkOgorICAgIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOworICAgIHZvaWQgdmlz
aXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKik7CisgICAgYm9vbCB2aXNpdEJp
bmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSopOworICAgIGJvb2wgdmlzaXRVbmFyeShW
aXNpdCB2aXNpdCwgVEludGVybVVuYXJ5Kik7CisgICAgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNp
dCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiopOworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlz
aXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKKyAgICBib29sIHZpc2l0TG9vcChWaXNpdCB2
aXNpdCwgVEludGVybUxvb3AqKTsKKyAgICBib29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBU
SW50ZXJtQnJhbmNoKik7Cit9OworCitUU3RyaW5nIFRUeXBlOjpnZXRDb21wbGV0ZVN0cmluZygp
IGNvbnN0Cit7CisgICAgVFN0cmluZ1N0cmVhbSBzdHJlYW07CisKKyAgICBpZiAocXVhbGlmaWVy
ICE9IEV2cVRlbXBvcmFyeSAmJiBxdWFsaWZpZXIgIT0gRXZxR2xvYmFsKQorICAgICAgICBzdHJl
YW0gPDwgZ2V0UXVhbGlmaWVyU3RyaW5nKCkgPDwgIiAiIDw8IGdldFByZWNpc2lvblN0cmluZygp
IDw8ICIgIjsKKyAgICBpZiAoYXJyYXkpCisgICAgICAgIHN0cmVhbSA8PCAiYXJyYXlbIiA8PCBn
ZXRBcnJheVNpemUoKSA8PCAiXSBvZiAiOworICAgIGlmIChtYXRyaXgpCisgICAgICAgIHN0cmVh
bSA8PCBzdGF0aWNfY2FzdDxpbnQ+KHNpemUpIDw8ICJYIiA8PCBzdGF0aWNfY2FzdDxpbnQ+KHNp
emUpIDw8ICIgbWF0cml4IG9mICI7CisgICAgZWxzZSBpZiAoc2l6ZSA+IDEpCisgICAgICAgIHN0
cmVhbSA8PCBzdGF0aWNfY2FzdDxpbnQ+KHNpemUpIDw8ICItY29tcG9uZW50IHZlY3RvciBvZiAi
OworCisgICAgc3RyZWFtIDw8IGdldEJhc2ljU3RyaW5nKCk7CisgICAgcmV0dXJuIHN0cmVhbS5z
dHIoKTsKK30KKworLy8KKy8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIHByaW50aW5nLCBub3QgcGFy
dCBvZiB0cmF2ZXJzaW5nLgorLy8KKwordm9pZCBPdXRwdXRUcmVlVGV4dChUSW5mb1NpbmtCYXNl
JiBzaW5rLCBUSW50ZXJtTm9kZSogbm9kZSwgY29uc3QgaW50IGRlcHRoKQoreworICAgIGludCBp
OworCisgICAgc2luay5sb2NhdGlvbihub2RlLT5nZXRMaW5lKCkpOworCisgICAgZm9yIChpID0g
MDsgaSA8IGRlcHRoOyArK2kpCisgICAgICAgIHNpbmsgPDwgIiAgIjsKK30KKworLy8KKy8vIFRo
ZSByZXN0IG9mIHRoZSBmaWxlIGFyZSB0aGUgdHJhdmVyc2FsIGZ1bmN0aW9ucy4gIFRoZSBsYXN0
IG9uZQorLy8gaXMgdGhlIG9uZSB0aGF0IHN0YXJ0cyB0aGUgdHJhdmVyc2FsLgorLy8KKy8vIFJl
dHVybiB0cnVlIGZyb20gaW50ZXJpb3Igbm9kZXMgdG8gaGF2ZSB0aGUgZXh0ZXJuYWwgdHJhdmVy
c2FsCisvLyBjb250aW51ZSBvbiB0byBjaGlsZHJlbi4gIElmIHlvdSBwcm9jZXNzIGNoaWxkcmVu
IHlvdXJzZWxmLAorLy8gcmV0dXJuIGZhbHNlLgorLy8KKwordm9pZCBUT3V0cHV0VHJhdmVyc2Vy
Ojp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQoreworICAgIE91dHB1dFRyZWVUZXh0
KHNpbmssIG5vZGUsIGRlcHRoKTsKKworICAgIHNpbmsgPDwgIiciIDw8IG5vZGUtPmdldFN5bWJv
bCgpIDw8ICInICI7CisgICAgc2luayA8PCAiKCIgPDwgbm9kZS0+Z2V0Q29tcGxldGVTdHJpbmco
KSA8PCAiKVxuIjsKK30KKworYm9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdEJpbmFyeShWaXNp
dCB2aXNpdCwgVEludGVybUJpbmFyeSogbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlJiBvdXQg
PSBzaW5rOworCisgICAgT3V0cHV0VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7CisKKyAgICBz
d2l0Y2ggKG5vZGUtPmdldE9wKCkpIHsKKyAgICAgICAgY2FzZSBFT3BBc3NpZ246ICAgICAgICAg
ICAgICAgICAgIG91dCA8PCAibW92ZSBzZWNvbmQgY2hpbGQgdG8gZmlyc3QgY2hpbGQiOyAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wSW5pdGlhbGl6ZTogICAgICAgICAgICAgICBv
dXQgPDwgImluaXRpYWxpemUgZmlyc3QgY2hpbGQgd2l0aCBzZWNvbmQgY2hpbGQiOyAgIGJyZWFr
OworICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjogICAgICAgICAgICAgICAgb3V0IDw8ICJhZGQg
c2Vjb25kIGNoaWxkIGludG8gZmlyc3QgY2hpbGQiOyAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BTdWJBc3NpZ246ICAgICAgICAgICAgICAgIG91dCA8PCAic3VidHJhY3Qgc2Vjb25k
IGNoaWxkIGludG8gZmlyc3QgY2hpbGQiOyAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTXVs
QXNzaWduOiAgICAgICAgICAgICAgICBvdXQgPDwgIm11bHRpcGx5IHNlY29uZCBjaGlsZCBpbnRv
IGZpcnN0IGNoaWxkIjsgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0
cml4QXNzaWduOiAgb3V0IDw8ICJtYXRyaXggbXVsdCBzZWNvbmQgY2hpbGQgaW50byBmaXJzdCBj
aGlsZCI7ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjog
IG91dCA8PCAidmVjdG9yIHNjYWxlIHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ246ICBvdXQgPDwgIm1h
dHJpeCBzY2FsZSBzZWNvbmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7IGJyZWFrOworICAgICAg
ICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4QXNzaWduOiAgb3V0IDw8ICJtYXRyaXggbXVsdCBz
ZWNvbmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcERp
dkFzc2lnbjogICAgICAgICAgICAgICAgb3V0IDw8ICJkaXZpZGUgc2Vjb25kIGNoaWxkIGludG8g
Zmlyc3QgY2hpbGQiOyAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDog
ICBvdXQgPDwgImRpcmVjdCBpbmRleCI7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wSW5kZXhJ
bmRpcmVjdDogb3V0IDw8ICJpbmRpcmVjdCBpbmRleCI7IGJyZWFrOworICAgICAgICBjYXNlIEVP
cEluZGV4RGlyZWN0U3RydWN0OiAgIG91dCA8PCAiZGlyZWN0IGluZGV4IGZvciBzdHJ1Y3R1cmUi
OyAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFZlY3RvclN3aXp6bGU6IG91dCA8PCAidmVjdG9y
IHN3aXp6bGUiOyBicmVhazsKKworICAgICAgICBjYXNlIEVPcEFkZDogICAgb3V0IDw8ICJhZGQi
OyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFN1YjogICAgb3V0
IDw8ICJzdWJ0cmFjdCI7ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcE11
bDogICAgb3V0IDw8ICJjb21wb25lbnQtd2lzZSBtdWx0aXBseSI7IGJyZWFrOworICAgICAgICBj
YXNlIEVPcERpdjogICAgb3V0IDw8ICJkaXZpZGUiOyAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcEVxdWFsOiAgICAgICAgICAgIG91dCA8PCAiQ29tcGFyZSBFcXVhbCI7
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDogICAgICAg
ICBvdXQgPDwgIkNvbXBhcmUgTm90IEVxdWFsIjsgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wTGVzc1RoYW46ICAgICAgICAgb3V0IDw8ICJDb21wYXJlIExlc3MgVGhhbiI7ICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOiAgICAgIG91dCA8
PCAiQ29tcGFyZSBHcmVhdGVyIFRoYW4iOyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BMZXNzVGhhbkVxdWFsOiAgICBvdXQgPDwgIkNvbXBhcmUgTGVzcyBUaGFuIG9yIEVxdWFsIjsg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDogb3V0IDw8ICJDb21w
YXJlIEdyZWF0ZXIgVGhhbiBvciBFcXVhbCI7IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wVmVj
dG9yVGltZXNTY2FsYXI6IG91dCA8PCAidmVjdG9yLXNjYWxlIjsgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXg6IG91dCA8PCAidmVjdG9yLXRpbWVzLW1h
dHJpeCI7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNWZWN0b3I6IG91dCA8
PCAibWF0cml4LXRpbWVzLXZlY3RvciI7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTWF0cml4
VGltZXNTY2FsYXI6IG91dCA8PCAibWF0cml4LXNjYWxlIjsgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXg6IG91dCA8PCAibWF0cml4LW11bHRpcGx5Ijsg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6ICBvdXQgPDwgImxvZ2lj
YWwtb3IiOyAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6IG91dCA8PCAibG9n
aWNhbC14b3IiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiBvdXQgPDwgImxv
Z2ljYWwtYW5kIjsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IG91dCA8PCAiPHVua25vd24gb3A+
IjsKKyAgICB9CisKKyAgICBvdXQgPDwgIiAoIiA8PCBub2RlLT5nZXRDb21wbGV0ZVN0cmluZygp
IDw8ICIpIjsKKworICAgIG91dCA8PCAiXG4iOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5
KiBub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IHNpbms7CisKKyAgICBPdXRwdXRU
cmVlVGV4dChvdXQsIG5vZGUsIGRlcHRoKTsKKworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkg
eworICAgICAgICBjYXNlIEVPcE5lZ2F0aXZlOiAgICAgICBvdXQgPDwgIk5lZ2F0ZSB2YWx1ZSI7
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVjdG9yTG9naWNhbE5vdDoKKyAgICAg
ICAgY2FzZSBFT3BMb2dpY2FsTm90OiAgICAgb3V0IDw8ICJOZWdhdGUgY29uZGl0aW9uYWwiOyAg
IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDogIG91dCA8PCAiUG9zdC1J
bmNyZW1lbnQiOyAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OiAg
b3V0IDw8ICJQb3N0LURlY3JlbWVudCI7ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFBy
ZUluY3JlbWVudDogICBvdXQgPDwgIlByZS1JbmNyZW1lbnQiOyAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OiAgIG91dCA8PCAiUHJlLURlY3JlbWVudCI7ICAgICAg
ICBicmVhazsKKworICAgICAgICBjYXNlIEVPcENvbnZJbnRUb0Jvb2w6ICBvdXQgPDwgIkNvbnZl
cnQgaW50IHRvIGJvb2wiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9Cb29s
Om91dCA8PCAiQ29udmVydCBmbG9hdCB0byBib29sIjticmVhazsKKyAgICAgICAgY2FzZSBFT3BD
b252Qm9vbFRvRmxvYXQ6b3V0IDw8ICJDb252ZXJ0IGJvb2wgdG8gZmxvYXQiO2JyZWFrOworICAg
ICAgICBjYXNlIEVPcENvbnZJbnRUb0Zsb2F0OiBvdXQgPDwgIkNvbnZlcnQgaW50IHRvIGZsb2F0
IjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9JbnQ6IG91dCA8PCAiQ29udmVy
dCBmbG9hdCB0byBpbnQiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb252Qm9vbFRvSW50OiAg
b3V0IDw8ICJDb252ZXJ0IGJvb2wgdG8gaW50IjsgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9w
UmFkaWFuczogICAgICAgIG91dCA8PCAicmFkaWFucyI7ICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BEZWdyZWVzOiAgICAgICAgb3V0IDw8ICJkZWdyZWVzIjsgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFNpbjogICAgICAgICAgICBvdXQgPDwgInNpbmUi
OyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29zOiAgICAgICAgICAg
IG91dCA8PCAiY29zaW5lIjsgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BU
YW46ICAgICAgICAgICAgb3V0IDw8ICJ0YW5nZW50IjsgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEVPcEFzaW46ICAgICAgICAgICBvdXQgPDwgImFyYyBzaW5lIjsgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQWNvczogICAgICAgICAgIG91dCA8PCAiYXJjIGNv
c2luZSI7ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BBdGFuOiAgICAgICAgICAg
b3V0IDw8ICJhcmMgdGFuZ2VudCI7ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9w
RXhwOiAgICAgICAgICAgIG91dCA8PCAiZXhwIjsgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BMb2c6ICAgICAgICAgICAgb3V0IDw8ICJsb2ciOyAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEV4cDI6ICAgICAgICAgICBvdXQgPDwgImV4cDIi
OyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9nMjogICAgICAgICAg
IG91dCA8PCAibG9nMiI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BT
cXJ0OiAgICAgICAgICAgb3V0IDw8ICJzcXJ0IjsgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEVPcEludmVyc2VTcXJ0OiAgICBvdXQgPDwgImludmVyc2Ugc3FydCI7ICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BBYnM6ICAgICAgICAgICAgb3V0IDw8ICJBYnNv
bHV0ZSB2YWx1ZSI7ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFNpZ246ICAgICAgICAg
ICBvdXQgPDwgIlNpZ24iOyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
Rmxvb3I6ICAgICAgICAgIG91dCA8PCAiRmxvb3IiOyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BDZWlsOiAgICAgICAgICAgb3V0IDw8ICJDZWlsaW5nIjsgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEZyYWN0OiAgICAgICAgICBvdXQgPDwgIkZyYWN0
aW9uIjsgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BMZW5ndGg6ICAgICAg
ICAgb3V0IDw8ICJsZW5ndGgiOyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVP
cE5vcm1hbGl6ZTogICAgICBvdXQgPDwgIm5vcm1hbGl6ZSI7ICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAvLwljYXNlIEVPcERQZHg6ICAgICAgICAgICBvdXQgPDwgImRQZHgiOyAgICAg
ICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLwljYXNlIEVP
cERQZHk6ICAgICAgICAgICBvdXQgPDwgImRQZHkiOyAgICAgICAgICAgICAgICAgYnJlYWs7ICAg
CisgICAgICAgICAgICAvLwljYXNlIEVPcEZ3aWR0aDogICAgICAgICBvdXQgPDwgImZ3aWR0aCI7
ICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgIAorCisgICAgICAgIGNhc2Ug
RU9wQW55OiAgICAgICAgICAgIG91dCA8PCAiYW55IjsgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BBbGw6ICAgICAgICAgICAgb3V0IDw8ICJhbGwiOyAgICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBvdXQucHJlZml4
KEVQcmVmaXhFcnJvcik7CisgICAgICAgICAgICBvdXQgPDwgIkJhZCB1bmFyeSBvcCI7CisgICAg
fQorCisgICAgb3V0IDw8ICIgKCIgPDwgbm9kZS0+Z2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiKSI7
CisKKyAgICBvdXQgPDwgIlxuIjsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFRPdXRw
dXRUcmF2ZXJzZXI6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRl
KiBub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IHNpbms7CisKKyAgICBpZiAobm9k
ZS0+Z2V0T3AoKSA9PSBFT3BOdWxsKSB7CisgICAgICAgIG91dC5wcmVmaXgoRVByZWZpeEVycm9y
KTsKKyAgICAgICAgb3V0IDw8ICJub2RlIGlzIHN0aWxsIEVPcE51bGwhIjsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgT3V0cHV0VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7
CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpIHsKKyAgICAgICAgY2FzZSBFT3BTZXF1ZW5j
ZTogICAgICBvdXQgPDwgIlNlcXVlbmNlXG4iOyByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBF
T3BDb21tYTogICAgICAgICBvdXQgPDwgIkNvbW1hXG4iOyByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
Y2FzZSBFT3BGdW5jdGlvbjogICAgICBvdXQgPDwgIkZ1bmN0aW9uIERlZmluaXRpb246ICIgPDwg
bm9kZS0+Z2V0TmFtZSgpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BGdW5jdGlvbkNhbGw6ICBv
dXQgPDwgIkZ1bmN0aW9uIENhbGw6ICIgPDwgbm9kZS0+Z2V0TmFtZSgpOyBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BQYXJhbWV0ZXJzOiAgICBvdXQgPDwgIkZ1bmN0aW9uIFBhcmFtZXRlcnM6ICI7
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OiBv
dXQgPDwgIkNvbnN0cnVjdCBmbG9hdCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVj
dFZlYzI6ICBvdXQgPDwgIkNvbnN0cnVjdCB2ZWMyIjsgIGJyZWFrOworICAgICAgICBjYXNlIEVP
cENvbnN0cnVjdFZlYzM6ICBvdXQgPDwgIkNvbnN0cnVjdCB2ZWMzIjsgIGJyZWFrOworICAgICAg
ICBjYXNlIEVPcENvbnN0cnVjdFZlYzQ6ICBvdXQgPDwgIkNvbnN0cnVjdCB2ZWM0IjsgIGJyZWFr
OworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6ICBvdXQgPDwgIkNvbnN0cnVjdCBib29s
IjsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMyOiBvdXQgPDwgIkNvbnN0
cnVjdCBidmVjMiI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMzOiBvdXQg
PDwgIkNvbnN0cnVjdCBidmVjMyI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJW
ZWM0OiBvdXQgPDwgIkNvbnN0cnVjdCBidmVjNCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdEludDogICBvdXQgPDwgIkNvbnN0cnVjdCBpbnQiOyAgIGJyZWFrOworICAgICAgICBj
YXNlIEVPcENvbnN0cnVjdElWZWMyOiBvdXQgPDwgIkNvbnN0cnVjdCBpdmVjMiI7IGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMzOiBvdXQgPDwgIkNvbnN0cnVjdCBpdmVjMyI7
IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWM0OiBvdXQgPDwgIkNvbnN0cnVj
dCBpdmVjNCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6ICBvdXQgPDwg
IkNvbnN0cnVjdCBtYXQyIjsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6
ICBvdXQgPDwgIkNvbnN0cnVjdCBtYXQzIjsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0
cnVjdE1hdDQ6ICBvdXQgPDwgIkNvbnN0cnVjdCBtYXQ0IjsgIGJyZWFrOworICAgICAgICBjYXNl
IEVPcENvbnN0cnVjdFN0cnVjdDogIG91dCA8PCAiQ29uc3RydWN0IHN0cnVjdHVyZSI7ICBicmVh
azsKKworICAgICAgICBjYXNlIEVPcExlc3NUaGFuOiAgICAgICAgIG91dCA8PCAiQ29tcGFyZSBM
ZXNzIFRoYW4iOyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhh
bjogICAgICBvdXQgPDwgIkNvbXBhcmUgR3JlYXRlciBUaGFuIjsgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDogICAgb3V0IDw8ICJDb21wYXJlIExlc3MgVGhh
biBvciBFcXVhbCI7ICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6
IG91dCA8PCAiQ29tcGFyZSBHcmVhdGVyIFRoYW4gb3IgRXF1YWwiOyBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BWZWN0b3JFcXVhbDogICAgICBvdXQgPDwgIkVxdWFsIjsgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVjdG9yTm90RXF1YWw6ICAgb3V0IDw8
ICJOb3RFcXVhbCI7ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ug
RU9wTW9kOiAgICAgICAgICAgb3V0IDw8ICJtb2QiOyAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEVPcFBvdzogICAgICAgICAgIG91dCA8PCAicG93IjsgICAgICAgICBicmVhazsKKworICAg
ICAgICBjYXNlIEVPcEF0YW46ICAgICAgICAgIG91dCA8PCAiYXJjIHRhbmdlbnQiOyBicmVhazsK
KworICAgICAgICBjYXNlIEVPcE1pbjogICAgICAgICAgIG91dCA8PCAibWluIjsgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BNYXg6ICAgICAgICAgICBvdXQgPDwgIm1heCI7ICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ2xhbXA6ICAgICAgICAgb3V0IDw8ICJjbGFtcCI7
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcE1peDogICAgICAgICAgIG91dCA8PCAibWl4
IjsgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BTdGVwOiAgICAgICAgICBvdXQgPDwg
InN0ZXAiOyAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU21vb3RoU3RlcDogICAgb3V0
IDw8ICJzbW9vdGhzdGVwIjsgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wRGlzdGFuY2U6ICAg
ICAgb3V0IDw8ICJkaXN0YW5jZSI7ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEVPcERvdDogICAgICAgICAgIG91dCA8PCAiZG90LXByb2R1Y3QiOyAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BDcm9zczogICAgICAgICBvdXQgPDwgImNyb3NzLXByb2R1Y3Qi
OyAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRmFjZUZvcndhcmQ6ICAgb3V0IDw8
ICJmYWNlLWZvcndhcmQiOyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFJlZmxl
Y3Q6ICAgICAgIG91dCA8PCAicmVmbGVjdCI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BSZWZyYWN0OiAgICAgICBvdXQgPDwgInJlZnJhY3QiOyAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTXVsOiAgICAgICAgICAgb3V0IDw8ICJjb21wb25l
bnQtd2lzZSBtdWx0aXBseSI7IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wRGVjbGFyYXRpb246
ICAgb3V0IDw8ICJEZWNsYXJhdGlvbjogIjsgICBicmVhazsKKworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgb3V0LnByZWZpeChFUHJlZml4RXJyb3IpOworICAgICAgICAgICAgb3V0IDw8
ICJCYWQgYWdncmVnYXRpb24gb3AiOworICAgIH0KKworICAgIGlmIChub2RlLT5nZXRPcCgpICE9
IEVPcFNlcXVlbmNlICYmIG5vZGUtPmdldE9wKCkgIT0gRU9wUGFyYW1ldGVycykKKyAgICAgICAg
b3V0IDw8ICIgKCIgPDwgbm9kZS0+Z2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiKSI7CisKKyAgICBv
dXQgPDwgIlxuIjsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFRPdXRwdXRUcmF2ZXJz
ZXI6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBub2RlKQor
eworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IHNpbms7CisKKyAgICBPdXRwdXRUcmVlVGV4dChv
dXQsIG5vZGUsIGRlcHRoKTsKKworICAgIG91dCA8PCAiVGVzdCBjb25kaXRpb24gYW5kIHNlbGVj
dCI7CisgICAgb3V0IDw8ICIgKCIgPDwgbm9kZS0+Z2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiKVxu
IjsKKworICAgICsrZGVwdGg7CisKKyAgICBPdXRwdXRUcmVlVGV4dChzaW5rLCBub2RlLCBkZXB0
aCk7CisgICAgb3V0IDw8ICJDb25kaXRpb25cbiI7CisgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCkt
PnRyYXZlcnNlKHRoaXMpOworCisgICAgT3V0cHV0VHJlZVRleHQoc2luaywgbm9kZSwgZGVwdGgp
OworICAgIGlmIChub2RlLT5nZXRUcnVlQmxvY2soKSkgeworICAgICAgICBvdXQgPDwgInRydWUg
Y2FzZVxuIjsKKyAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOwor
ICAgIH0gZWxzZQorICAgICAgICBvdXQgPDwgInRydWUgY2FzZSBpcyBudWxsXG4iOworCisgICAg
aWYgKG5vZGUtPmdldEZhbHNlQmxvY2soKSkgeworICAgICAgICBPdXRwdXRUcmVlVGV4dChzaW5r
LCBub2RlLCBkZXB0aCk7CisgICAgICAgIG91dCA8PCAiZmFsc2UgY2FzZVxuIjsKKyAgICAgICAg
bm9kZS0+Z2V0RmFsc2VCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9CisKKyAgICAtLWRl
cHRoOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFRPdXRwdXRUcmF2ZXJzZXI6OnZp
c2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSkKK3sKKyAgICBUSW5m
b1NpbmtCYXNlJiBvdXQgPSBzaW5rOworCisgICAgc2l6ZV90IHNpemUgPSBub2RlLT5nZXRUeXBl
KCkuZ2V0T2JqZWN0U2l6ZSgpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBp
KyspIHsKKyAgICAgICAgT3V0cHV0VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7CisgICAgICAg
IHN3aXRjaCAobm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVtpXS5nZXRUeXBlKCkpIHsKKyAg
ICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0VW5p
b25BcnJheVBvaW50ZXIoKVtpXS5nZXRCQ29uc3QoKSkKKyAgICAgICAgICAgICAgICAgICAgb3V0
IDw8ICJ0cnVlIjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG91
dCA8PCAiZmFsc2UiOworCisgICAgICAgICAgICAgICAgb3V0IDw8ICIgKCIgPDwgImNvbnN0IGJv
b2wiIDw8ICIpIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIlxuIjsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICAgICAgb3V0
IDw8IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKClbaV0uZ2V0RkNvbnN0KCk7CisgICAgICAg
ICAgICAgICAgb3V0IDw8ICIgKGNvbnN0IGZsb2F0KVxuIjsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgRWJ0SW50OgorICAgICAgICAgICAgICAgIG91dCA8PCBub2Rl
LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpW2ldLmdldElDb25zdCgpOworICAgICAgICAgICAgICAg
IG91dCA8PCAiIChjb25zdCBpbnQpXG4iOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBvdXQubWVzc2FnZShFUHJlZml4SW50ZXJu
YWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiVW5rbm93biBjb25zdGFudCIpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCitib29sIFRPdXRwdXRUcmF2ZXJz
ZXI6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqIG5vZGUpCit7CisgICAgVElu
Zm9TaW5rQmFzZSYgb3V0ID0gc2luazsKKworICAgIE91dHB1dFRyZWVUZXh0KG91dCwgbm9kZSwg
ZGVwdGgpOworCisgICAgb3V0IDw8ICJMb29wIHdpdGggY29uZGl0aW9uICI7CisgICAgaWYgKG5v
ZGUtPmdldFR5cGUoKSA9PSBFTG9vcERvV2hpbGUpCisgICAgICAgIG91dCA8PCAibm90ICI7Cisg
ICAgb3V0IDw8ICJ0ZXN0ZWQgZmlyc3RcbiI7CisKKyAgICArK2RlcHRoOworCisgICAgT3V0cHV0
VHJlZVRleHQoc2luaywgbm9kZSwgZGVwdGgpOworICAgIGlmIChub2RlLT5nZXRDb25kaXRpb24o
KSkgeworICAgICAgICBvdXQgPDwgIkxvb3AgQ29uZGl0aW9uXG4iOworICAgICAgICBub2RlLT5n
ZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIG91dCA8
PCAiTm8gbG9vcCBjb25kaXRpb25cbiI7CisKKyAgICBPdXRwdXRUcmVlVGV4dChzaW5rLCBub2Rl
LCBkZXB0aCk7CisgICAgaWYgKG5vZGUtPmdldEJvZHkoKSkgeworICAgICAgICBvdXQgPDwgIkxv
b3AgQm9keVxuIjsKKyAgICAgICAgbm9kZS0+Z2V0Qm9keSgpLT50cmF2ZXJzZSh0aGlzKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgb3V0IDw8ICJObyBsb29wIGJvZHlcbiI7CisKKyAgICBpZiAobm9k
ZS0+Z2V0RXhwcmVzc2lvbigpKSB7CisgICAgICAgIE91dHB1dFRyZWVUZXh0KHNpbmssIG5vZGUs
IGRlcHRoKTsKKyAgICAgICAgb3V0IDw8ICJMb29wIFRlcm1pbmFsIEV4cHJlc3Npb25cbiI7Cisg
ICAgICAgIG5vZGUtPmdldEV4cHJlc3Npb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorCisg
ICAgLS1kZXB0aDsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUT3V0cHV0VHJhdmVy
c2VyOjp2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCogbm9kZSkKK3sKKyAg
ICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBzaW5rOworCisgICAgT3V0cHV0VHJlZVRleHQob3V0LCBu
b2RlLCBkZXB0aCk7CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldEZsb3dPcCgpKSB7CisgICAgICAg
IGNhc2UgRU9wS2lsbDogICAgICBvdXQgPDwgIkJyYW5jaDogS2lsbCI7ICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BCcmVhazogICAgIG91dCA8PCAiQnJhbmNoOiBCcmVhayI7ICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnRpbnVlOiAgb3V0IDw8ICJCcmFuY2g6
IENvbnRpbnVlIjsgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUmV0dXJuOiAgICBvdXQg
PDwgIkJyYW5jaDogUmV0dXJuIjsgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogICAg
ICAgICAgIG91dCA8PCAiQnJhbmNoOiBVbmtub3duIEJyYW5jaCI7IGJyZWFrOworICAgIH0KKwor
ICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkpIHsKKyAgICAgICAgb3V0IDw8ICIgd2l0aCBl
eHByZXNzaW9uXG4iOworICAgICAgICArK2RlcHRoOworICAgICAgICBub2RlLT5nZXRFeHByZXNz
aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAtLWRlcHRoOworICAgIH0gZWxzZQorICAg
ICAgICBvdXQgPDwgIlxuIjsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8KKy8vIFRoaXMg
ZnVuY3Rpb24gaXMgdGhlIG9uZSB0byBjYWxsIGV4dGVybmFsbHkgdG8gc3RhcnQgdGhlIHRyYXZl
cnNhbC4KKy8vIEluZGl2aWR1YWwgZnVuY3Rpb25zIGNhbiBiZSBpbml0aWFsaXplZCB0byAwIHRv
IHNraXAgcHJvY2Vzc2luZyBvZiB0aGF0CisvLyB0eXBlIG9mIG5vZGUuICBJdCdzIGNoaWxkcmVu
IHdpbGwgc3RpbGwgYmUgcHJvY2Vzc2VkLgorLy8KK3ZvaWQgVEludGVybWVkaWF0ZTo6b3V0cHV0
VHJlZShUSW50ZXJtTm9kZSogcm9vdCkKK3sKKyAgICBpZiAocm9vdCA9PSAwKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBUT3V0cHV0VHJhdmVyc2VyIGl0KGluZm9TaW5rLmluZm8pOworCisgICAg
cm9vdC0+dHJhdmVyc2UoJml0KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOGY5ZmUyM2QzYjQ4ZWNiMDJlMWFhNWYxMDc2MDRiMzUxODRhZmJiOQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L2ludGVybWVkaWF0ZS5oCkBAIC0wLDAgKzEsNjM1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisv
LworLy8gRGVmaW5pdGlvbiBvZiB0aGUgaW4tbWVtb3J5IGhpZ2gtbGV2ZWwgaW50ZXJtZWRpYXRl
IHJlcHJlc2VudGF0aW9uCisvLyBvZiBzaGFkZXJzLiAgVGhpcyBpcyBhIHRyZWUgdGhhdCBwYXJz
ZXIgY3JlYXRlcy4KKy8vCisvLyBOb2RlcyBpbiB0aGUgdHJlZSBhcmUgZGVmaW5lZCBhcyBhIGhp
ZXJhcmNoeSBvZiBjbGFzc2VzIGRlcml2ZWQgZnJvbSAKKy8vIFRJbnRlcm1Ob2RlLiBFYWNoIGlz
IGEgbm9kZSBpbiBhIHRyZWUuICBUaGVyZSBpcyBubyBwcmVzZXQgYnJhbmNoaW5nIGZhY3RvcjsK
Ky8vIGVhY2ggbm9kZSBjYW4gaGF2ZSBpdCdzIG93biB0eXBlIG9mIGxpc3Qgb2YgY2hpbGRyZW4u
CisvLworCisjaWZuZGVmIF9fSU5URVJNRURJQVRFX0gKKyNkZWZpbmUgX19JTlRFUk1FRElBVEVf
SAorCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisKKyNpbmNsdWRlIDxhbGdvcml0
aG0+CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21tb24uaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1R5cGVzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9Db25zdGFudFVuaW9uLmgiCisKKy8vCisvLyBPcGVyYXRvcnMgdXNlZCBieSB0aGUgaGlnaC1s
ZXZlbCAocGFyc2UgdHJlZSkgcmVwcmVzZW50YXRpb24uCisvLworZW51bSBUT3BlcmF0b3Igewor
ICAgIEVPcE51bGwsICAgICAgICAgICAgLy8gaWYgaW4gYSBub2RlLCBzaG91bGQgb25seSBtZWFu
IGEgbm9kZSBpcyBzdGlsbCBiZWluZyBidWlsdAorICAgIEVPcFNlcXVlbmNlLCAgICAgICAgLy8g
ZGVub3RlcyBhIGxpc3Qgb2Ygc3RhdGVtZW50cywgb3IgcGFyYW1ldGVycywgZXRjLgorICAgIEVP
cEZ1bmN0aW9uQ2FsbCwgICAgCisgICAgRU9wRnVuY3Rpb24sICAgICAgICAvLyBGb3IgZnVuY3Rp
b24gZGVmaW5pdGlvbgorICAgIEVPcFBhcmFtZXRlcnMsICAgICAgLy8gYW4gYWdncmVnYXRlIGxp
c3RpbmcgdGhlIHBhcmFtZXRlcnMgdG8gYSBmdW5jdGlvbgorCisgICAgRU9wRGVjbGFyYXRpb24s
CisgICAgRU9wUHJvdG90eXBlLAorCisgICAgLy8KKyAgICAvLyBVbmFyeSBvcGVyYXRvcnMKKyAg
ICAvLworCisgICAgRU9wTmVnYXRpdmUsCisgICAgRU9wTG9naWNhbE5vdCwKKyAgICBFT3BWZWN0
b3JMb2dpY2FsTm90LAorCisgICAgRU9wUG9zdEluY3JlbWVudCwKKyAgICBFT3BQb3N0RGVjcmVt
ZW50LAorICAgIEVPcFByZUluY3JlbWVudCwKKyAgICBFT3BQcmVEZWNyZW1lbnQsCisKKyAgICBF
T3BDb252SW50VG9Cb29sLAorICAgIEVPcENvbnZGbG9hdFRvQm9vbCwKKyAgICBFT3BDb252Qm9v
bFRvRmxvYXQsCisgICAgRU9wQ29udkludFRvRmxvYXQsCisgICAgRU9wQ29udkZsb2F0VG9JbnQs
CisgICAgRU9wQ29udkJvb2xUb0ludCwKKworICAgIC8vCisgICAgLy8gYmluYXJ5IG9wZXJhdGlv
bnMKKyAgICAvLworCisgICAgRU9wQWRkLAorICAgIEVPcFN1YiwKKyAgICBFT3BNdWwsCisgICAg
RU9wRGl2LAorICAgIEVPcEVxdWFsLAorICAgIEVPcE5vdEVxdWFsLAorICAgIEVPcFZlY3RvckVx
dWFsLAorICAgIEVPcFZlY3Rvck5vdEVxdWFsLAorICAgIEVPcExlc3NUaGFuLAorICAgIEVPcEdy
ZWF0ZXJUaGFuLAorICAgIEVPcExlc3NUaGFuRXF1YWwsCisgICAgRU9wR3JlYXRlclRoYW5FcXVh
bCwKKyAgICBFT3BDb21tYSwKKworICAgIEVPcFZlY3RvclRpbWVzU2NhbGFyLAorICAgIEVPcFZl
Y3RvclRpbWVzTWF0cml4LAorICAgIEVPcE1hdHJpeFRpbWVzVmVjdG9yLAorICAgIEVPcE1hdHJp
eFRpbWVzU2NhbGFyLAorCisgICAgRU9wTG9naWNhbE9yLAorICAgIEVPcExvZ2ljYWxYb3IsCisg
ICAgRU9wTG9naWNhbEFuZCwKKworICAgIEVPcEluZGV4RGlyZWN0LAorICAgIEVPcEluZGV4SW5k
aXJlY3QsCisgICAgRU9wSW5kZXhEaXJlY3RTdHJ1Y3QsCisKKyAgICBFT3BWZWN0b3JTd2l6emxl
LAorCisgICAgLy8KKyAgICAvLyBCdWlsdC1pbiBmdW5jdGlvbnMgcG90ZW50aWFsbHkgbWFwcGVk
IHRvIG9wZXJhdG9ycworICAgIC8vCisKKyAgICBFT3BSYWRpYW5zLAorICAgIEVPcERlZ3JlZXMs
CisgICAgRU9wU2luLAorICAgIEVPcENvcywKKyAgICBFT3BUYW4sCisgICAgRU9wQXNpbiwKKyAg
ICBFT3BBY29zLAorICAgIEVPcEF0YW4sCisKKyAgICBFT3BQb3csCisgICAgRU9wRXhwLAorICAg
IEVPcExvZywKKyAgICBFT3BFeHAyLAorICAgIEVPcExvZzIsCisgICAgRU9wU3FydCwKKyAgICBF
T3BJbnZlcnNlU3FydCwKKworICAgIEVPcEFicywKKyAgICBFT3BTaWduLAorICAgIEVPcEZsb29y
LAorICAgIEVPcENlaWwsCisgICAgRU9wRnJhY3QsCisgICAgRU9wTW9kLAorICAgIEVPcE1pbiwK
KyAgICBFT3BNYXgsCisgICAgRU9wQ2xhbXAsCisgICAgRU9wTWl4LAorICAgIEVPcFN0ZXAsCisg
ICAgRU9wU21vb3RoU3RlcCwKKworICAgIEVPcExlbmd0aCwKKyAgICBFT3BEaXN0YW5jZSwKKyAg
ICBFT3BEb3QsCisgICAgRU9wQ3Jvc3MsCisgICAgRU9wTm9ybWFsaXplLAorICAgIEVPcEZhY2VG
b3J3YXJkLAorICAgIEVPcFJlZmxlY3QsCisgICAgRU9wUmVmcmFjdCwKKworICAgIEVPcERGZHgs
ICAgICAgICAgICAgLy8gRnJhZ21lbnQgb25seSwgT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIGV4
dGVuc2lvbgorICAgIEVPcERGZHksICAgICAgICAgICAgLy8gRnJhZ21lbnQgb25seSwgT0VTX3N0
YW5kYXJkX2Rlcml2YXRpdmVzIGV4dGVuc2lvbgorICAgIEVPcEZ3aWR0aCwgICAgICAgICAgLy8g
RnJhZ21lbnQgb25seSwgT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIGV4dGVuc2lvbgorCisgICAg
RU9wTWF0cml4VGltZXNNYXRyaXgsCisKKyAgICBFT3BBbnksCisgICAgRU9wQWxsLAorCisgICAg
Ly8KKyAgICAvLyBCcmFuY2gKKyAgICAvLworCisgICAgRU9wS2lsbCwgICAgICAgICAgICAvLyBG
cmFnbWVudCBvbmx5CisgICAgRU9wUmV0dXJuLAorICAgIEVPcEJyZWFrLAorICAgIEVPcENvbnRp
bnVlLAorCisgICAgLy8KKyAgICAvLyBDb25zdHJ1Y3RvcnMKKyAgICAvLworCisgICAgRU9wQ29u
c3RydWN0SW50LAorICAgIEVPcENvbnN0cnVjdEJvb2wsCisgICAgRU9wQ29uc3RydWN0RmxvYXQs
CisgICAgRU9wQ29uc3RydWN0VmVjMiwKKyAgICBFT3BDb25zdHJ1Y3RWZWMzLAorICAgIEVPcENv
bnN0cnVjdFZlYzQsCisgICAgRU9wQ29uc3RydWN0QlZlYzIsCisgICAgRU9wQ29uc3RydWN0QlZl
YzMsCisgICAgRU9wQ29uc3RydWN0QlZlYzQsCisgICAgRU9wQ29uc3RydWN0SVZlYzIsCisgICAg
RU9wQ29uc3RydWN0SVZlYzMsCisgICAgRU9wQ29uc3RydWN0SVZlYzQsCisgICAgRU9wQ29uc3Ry
dWN0TWF0MiwKKyAgICBFT3BDb25zdHJ1Y3RNYXQzLAorICAgIEVPcENvbnN0cnVjdE1hdDQsCisg
ICAgRU9wQ29uc3RydWN0U3RydWN0LAorCisgICAgLy8KKyAgICAvLyBtb3ZlcworICAgIC8vCisK
KyAgICBFT3BBc3NpZ24sCisgICAgRU9wSW5pdGlhbGl6ZSwKKyAgICBFT3BBZGRBc3NpZ24sCisg
ICAgRU9wU3ViQXNzaWduLAorICAgIEVPcE11bEFzc2lnbiwKKyAgICBFT3BWZWN0b3JUaW1lc01h
dHJpeEFzc2lnbiwKKyAgICBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbiwKKyAgICBFT3BNYXRy
aXhUaW1lc1NjYWxhckFzc2lnbiwKKyAgICBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbiwKKyAg
ICBFT3BEaXZBc3NpZ24KK307CisKK2V4dGVybiBjb25zdCBjaGFyKiBnZXRPcGVyYXRvclN0cmlu
ZyhUT3BlcmF0b3Igb3ApOworCitjbGFzcyBUSW50ZXJtVHJhdmVyc2VyOworY2xhc3MgVEludGVy
bUFnZ3JlZ2F0ZTsKK2NsYXNzIFRJbnRlcm1CaW5hcnk7CitjbGFzcyBUSW50ZXJtVW5hcnk7Citj
bGFzcyBUSW50ZXJtQ29uc3RhbnRVbmlvbjsKK2NsYXNzIFRJbnRlcm1TZWxlY3Rpb247CitjbGFz
cyBUSW50ZXJtVHlwZWQ7CitjbGFzcyBUSW50ZXJtU3ltYm9sOworY2xhc3MgVEludGVybUxvb3A7
CitjbGFzcyBUSW5mb1Npbms7CisKKy8vCisvLyBCYXNlIGNsYXNzIGZvciB0aGUgdHJlZSBub2Rl
cworLy8KK2NsYXNzIFRJbnRlcm1Ob2RlIHsKK3B1YmxpYzoKKyAgICBQT09MX0FMTE9DQVRPUl9O
RVdfREVMRVRFKCk7CisgICAgVEludGVybU5vZGUoKSB7CisgICAgICAgIC8vIFRPRE86IE1vdmUg
dGhpcyB0byBUU291cmNlTG9jIGNvbnN0cnVjdG9yCisgICAgICAgIC8vIGFmdGVyIGdldHRpbmcg
cmlkIG9mIFRQdWJsaWNUeXBlLgorICAgICAgICBsaW5lLmZpcnN0X2ZpbGUgPSBsaW5lLmxhc3Rf
ZmlsZSA9IDA7CisgICAgICAgIGxpbmUuZmlyc3RfbGluZSA9IGxpbmUubGFzdF9saW5lID0gMDsK
KyAgICB9CisgICAgdmlydHVhbCB+VEludGVybU5vZGUoKSB7IH0KKworICAgIGNvbnN0IFRTb3Vy
Y2VMb2MmIGdldExpbmUoKSBjb25zdCB7IHJldHVybiBsaW5lOyB9CisgICAgdm9pZCBzZXRMaW5l
KGNvbnN0IFRTb3VyY2VMb2MmIGwpIHsgbGluZSA9IGw7IH0KKworICAgIHZpcnR1YWwgdm9pZCB0
cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKikgPSAwOworICAgIHZpcnR1YWwgVEludGVybVR5cGVk
KiBnZXRBc1R5cGVkKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgVEludGVybUNvbnN0YW50
VW5pb24qIGdldEFzQ29uc3RhbnRVbmlvbigpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFRJ
bnRlcm1BZ2dyZWdhdGUqIGdldEFzQWdncmVnYXRlKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1
YWwgVEludGVybUJpbmFyeSogZ2V0QXNCaW5hcnlOb2RlKCkgeyByZXR1cm4gMDsgfQorICAgIHZp
cnR1YWwgVEludGVybVVuYXJ5KiBnZXRBc1VuYXJ5Tm9kZSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2
aXJ0dWFsIFRJbnRlcm1TZWxlY3Rpb24qIGdldEFzU2VsZWN0aW9uTm9kZSgpIHsgcmV0dXJuIDA7
IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1TeW1ib2wqIGdldEFzU3ltYm9sTm9kZSgpIHsgcmV0dXJu
IDA7IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1Mb29wKiBnZXRBc0xvb3BOb2RlKCkgeyByZXR1cm4g
MDsgfQorCisgICAgLy8gUmVwbGFjZSBhIGNoaWxkIG5vZGUuIFJldHVybiB0cnVlIGlmIHxvcmln
aW5hbHwgaXMgYSBjaGlsZAorICAgIC8vIG5vZGUgYW5kIGl0IGlzIHJlcGxhY2VkOyBvdGhlcndp
c2UsIHJldHVybiBmYWxzZS4KKyAgICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxkTm9kZSgKKyAg
ICAgICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFjZW1lbnQpID0g
MDsKKworcHJvdGVjdGVkOgorICAgIFRTb3VyY2VMb2MgbGluZTsKK307CisKKy8vCisvLyBUaGlz
IGlzIGp1c3QgdG8gaGVscCB5YWNjLgorLy8KK3N0cnVjdCBUSW50ZXJtTm9kZVBhaXIgeworICAg
IFRJbnRlcm1Ob2RlKiBub2RlMTsKKyAgICBUSW50ZXJtTm9kZSogbm9kZTI7Cit9OworCisvLwor
Ly8gSW50ZXJtZWRpYXRlIGNsYXNzIGZvciBub2RlcyB0aGF0IGhhdmUgYSB0eXBlLgorLy8KK2Ns
YXNzIFRJbnRlcm1UeXBlZCA6IHB1YmxpYyBUSW50ZXJtTm9kZSB7CitwdWJsaWM6CisgICAgVElu
dGVybVR5cGVkKGNvbnN0IFRUeXBlJiB0KSA6IHR5cGUodCkgIHsgfQorICAgIHZpcnR1YWwgVElu
dGVybVR5cGVkKiBnZXRBc1R5cGVkKCkgeyByZXR1cm4gdGhpczsgfQorCisgICAgdmlydHVhbCBi
b29sIGhhc1NpZGVFZmZlY3RzKCkgY29uc3QgPSAwOworCisgICAgdm9pZCBzZXRUeXBlKGNvbnN0
IFRUeXBlJiB0KSB7IHR5cGUgPSB0OyB9CisgICAgY29uc3QgVFR5cGUmIGdldFR5cGUoKSBjb25z
dCB7IHJldHVybiB0eXBlOyB9CisgICAgVFR5cGUqIGdldFR5cGVQb2ludGVyKCkgeyByZXR1cm4g
JnR5cGU7IH0KKworICAgIFRCYXNpY1R5cGUgZ2V0QmFzaWNUeXBlKCkgY29uc3QgeyByZXR1cm4g
dHlwZS5nZXRCYXNpY1R5cGUoKTsgfQorICAgIFRRdWFsaWZpZXIgZ2V0UXVhbGlmaWVyKCkgY29u
c3QgeyByZXR1cm4gdHlwZS5nZXRRdWFsaWZpZXIoKTsgfQorICAgIFRQcmVjaXNpb24gZ2V0UHJl
Y2lzaW9uKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRQcmVjaXNpb24oKTsgfQorICAgIGludCBn
ZXROb21pbmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0Tm9taW5hbFNpemUoKTsgfQor
ICAgIAorICAgIGJvb2wgaXNNYXRyaXgoKSBjb25zdCB7IHJldHVybiB0eXBlLmlzTWF0cml4KCk7
IH0KKyAgICBib29sIGlzQXJyYXkoKSAgY29uc3QgeyByZXR1cm4gdHlwZS5pc0FycmF5KCk7IH0K
KyAgICBib29sIGlzVmVjdG9yKCkgY29uc3QgeyByZXR1cm4gdHlwZS5pc1ZlY3RvcigpOyB9Cisg
ICAgYm9vbCBpc1NjYWxhcigpIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNTY2FsYXIoKTsgfQorICAg
IGNvbnN0IGNoYXIqIGdldEJhc2ljU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRCYXNp
Y1N0cmluZygpOyB9CisgICAgY29uc3QgY2hhciogZ2V0UXVhbGlmaWVyU3RyaW5nKCkgY29uc3Qg
eyByZXR1cm4gdHlwZS5nZXRRdWFsaWZpZXJTdHJpbmcoKTsgfQorICAgIFRTdHJpbmcgZ2V0Q29t
cGxldGVTdHJpbmcoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldENvbXBsZXRlU3RyaW5nKCk7IH0K
KworICAgIGludCB0b3RhbFJlZ2lzdGVyQ291bnQoKSBjb25zdCB7IHJldHVybiB0eXBlLnRvdGFs
UmVnaXN0ZXJDb3VudCgpOyB9CisgICAgaW50IGVsZW1lbnRSZWdpc3RlckNvdW50KCkgY29uc3Qg
eyByZXR1cm4gdHlwZS5lbGVtZW50UmVnaXN0ZXJDb3VudCgpOyB9CisgICAgaW50IGdldEFycmF5
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0QXJyYXlTaXplKCk7IH0KKworcHJvdGVjdGVk
OgorICAgIFRUeXBlIHR5cGU7Cit9OworCisvLworLy8gSGFuZGxlIGZvciwgZG8td2hpbGUsIGFu
ZCB3aGlsZSBsb29wcy4KKy8vCitlbnVtIFRMb29wVHlwZSB7CisgICAgRUxvb3BGb3IsCisgICAg
RUxvb3BXaGlsZSwKKyAgICBFTG9vcERvV2hpbGUKK307CisKK2NsYXNzIFRJbnRlcm1Mb29wIDog
cHVibGljIFRJbnRlcm1Ob2RlIHsKK3B1YmxpYzoKKyAgICBUSW50ZXJtTG9vcChUTG9vcFR5cGUg
YVR5cGUsCisgICAgICAgICAgICAgICAgVEludGVybU5vZGUgKmFJbml0LCBUSW50ZXJtVHlwZWQq
IGFDb25kLCBUSW50ZXJtVHlwZWQqIGFFeHByLAorICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2Rl
KiBhQm9keSkgOgorICAgICAgICAgICAgdHlwZShhVHlwZSksCisgICAgICAgICAgICBpbml0KGFJ
bml0KSwKKyAgICAgICAgICAgIGNvbmQoYUNvbmQpLAorICAgICAgICAgICAgZXhwcihhRXhwciks
CisgICAgICAgICAgICBib2R5KGFCb2R5KSwKKyAgICAgICAgICAgIHVucm9sbEZsYWcoZmFsc2Up
IHsgfQorCisgICAgdmlydHVhbCBUSW50ZXJtTG9vcCogZ2V0QXNMb29wTm9kZSgpIHsgcmV0dXJu
IHRoaXM7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOwor
ICAgIHZpcnR1YWwgYm9vbCByZXBsYWNlQ2hpbGROb2RlKAorICAgICAgICBUSW50ZXJtTm9kZSAq
b3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCk7CisKKyAgICBUTG9vcFR5cGUgZ2V0
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGU7IH0KKyAgICBUSW50ZXJtTm9kZSogZ2V0SW5pdCgp
IHsgcmV0dXJuIGluaXQ7IH0KKyAgICBUSW50ZXJtVHlwZWQqIGdldENvbmRpdGlvbigpIHsgcmV0
dXJuIGNvbmQ7IH0KKyAgICBUSW50ZXJtVHlwZWQqIGdldEV4cHJlc3Npb24oKSB7IHJldHVybiBl
eHByOyB9CisgICAgVEludGVybU5vZGUqIGdldEJvZHkoKSB7IHJldHVybiBib2R5OyB9CisKKyAg
ICB2b2lkIHNldFVucm9sbEZsYWcoYm9vbCBmbGFnKSB7IHVucm9sbEZsYWcgPSBmbGFnOyB9Cisg
ICAgYm9vbCBnZXRVbnJvbGxGbGFnKCkgeyByZXR1cm4gdW5yb2xsRmxhZzsgfQorCitwcm90ZWN0
ZWQ6CisgICAgVExvb3BUeXBlIHR5cGU7CisgICAgVEludGVybU5vZGUqIGluaXQ7ICAvLyBmb3It
bG9vcCBpbml0aWFsaXphdGlvbgorICAgIFRJbnRlcm1UeXBlZCogY29uZDsgLy8gbG9vcCBleGl0
IGNvbmRpdGlvbgorICAgIFRJbnRlcm1UeXBlZCogZXhwcjsgLy8gZm9yLWxvb3AgZXhwcmVzc2lv
bgorICAgIFRJbnRlcm1Ob2RlKiBib2R5OyAgLy8gbG9vcCBib2R5CisKKyAgICBib29sIHVucm9s
bEZsYWc7IC8vIFdoZXRoZXIgdGhlIGxvb3Agc2hvdWxkIGJlIHVucm9sbGVkIG9yIG5vdC4KK307
CisKKy8vCisvLyBIYW5kbGUgYnJlYWssIGNvbnRpbnVlLCByZXR1cm4sIGFuZCBraWxsLgorLy8K
K2NsYXNzIFRJbnRlcm1CcmFuY2ggOiBwdWJsaWMgVEludGVybU5vZGUgeworcHVibGljOgorICAg
IFRJbnRlcm1CcmFuY2goVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGUpIDoKKyAgICAgICAg
ICAgIGZsb3dPcChvcCksCisgICAgICAgICAgICBleHByZXNzaW9uKGUpIHsgfQorCisgICAgdmly
dHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKKyAgICB2aXJ0dWFsIGJvb2wg
cmVwbGFjZUNoaWxkTm9kZSgKKyAgICAgICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJt
Tm9kZSAqcmVwbGFjZW1lbnQpOworCisgICAgVE9wZXJhdG9yIGdldEZsb3dPcCgpIHsgcmV0dXJu
IGZsb3dPcDsgfQorICAgIFRJbnRlcm1UeXBlZCogZ2V0RXhwcmVzc2lvbigpIHsgcmV0dXJuIGV4
cHJlc3Npb247IH0KKworcHJvdGVjdGVkOgorICAgIFRPcGVyYXRvciBmbG93T3A7CisgICAgVElu
dGVybVR5cGVkKiBleHByZXNzaW9uOyAgLy8gbm9uLXplcm8gZXhjZXB0IGZvciAicmV0dXJuIGV4
cDsiIHN0YXRlbWVudHMKK307CisKKy8vCisvLyBOb2RlcyB0aGF0IGNvcnJlc3BvbmQgdG8gc3lt
Ym9scyBvciBjb25zdGFudHMgaW4gdGhlIHNvdXJjZSBjb2RlLgorLy8KK2NsYXNzIFRJbnRlcm1T
eW1ib2wgOiBwdWJsaWMgVEludGVybVR5cGVkIHsKK3B1YmxpYzoKKyAgICAvLyBpZiBzeW1ib2wg
aXMgaW5pdGlhbGl6ZWQgYXMgc3ltYm9sKHN5bSksIHRoZSBtZW1vcnkgY29tZXMgZnJvbSB0aGUg
cG9vbGFsbG9jYXRvciBvZiBzeW0uIElmIHN5bSBjb21lcyBmcm9tCisgICAgLy8gcGVyIHByb2Nl
c3MgZ2xvYmFscG9vbGFsbG9jYXRvciwgdGhlbiBpdCBjYXVzZXMgaW5jcmVhc2VkIG1lbW9yeSB1
c2FnZSBwZXIgY29tcGlsZQorICAgIC8vIGl0IGlzIGVzc2VudGlhbCB0byB1c2UgInN5bWJvbCA9
IHN5bSIgdG8gYXNzaWduIHRvIHN5bWJvbAorICAgIFRJbnRlcm1TeW1ib2woaW50IGksIGNvbnN0
IFRTdHJpbmcmIHN5bSwgY29uc3QgVFR5cGUmIHQpIDogCisgICAgICAgICAgICBUSW50ZXJtVHlw
ZWQodCksIGlkKGkpICB7IHN5bWJvbCA9IHN5bTsgb3JpZ2luYWxTeW1ib2wgPSBzeW07IH0gCisK
KyAgICB2aXJ0dWFsIGJvb2wgaGFzU2lkZUVmZmVjdHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorCisgICAgaW50IGdldElkKCkgY29uc3QgeyByZXR1cm4gaWQ7IH0KKyAgICBjb25zdCBUU3Ry
aW5nJiBnZXRTeW1ib2woKSBjb25zdCB7IHJldHVybiBzeW1ib2w7IH0KKworICAgIHZvaWQgc2V0
SWQoaW50IG5ld0lkKSB7IGlkID0gbmV3SWQ7IH0KKyAgICB2b2lkIHNldFN5bWJvbChjb25zdCBU
U3RyaW5nJiBzeW0pIHsgc3ltYm9sID0gc3ltOyB9CisKKyAgICBjb25zdCBUU3RyaW5nJiBnZXRP
cmlnaW5hbFN5bWJvbCgpIGNvbnN0IHsgcmV0dXJuIG9yaWdpbmFsU3ltYm9sOyB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOworICAgIHZpcnR1YWwgVElu
dGVybVN5bWJvbCogZ2V0QXNTeW1ib2xOb2RlKCkgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1
YWwgYm9vbCByZXBsYWNlQ2hpbGROb2RlKFRJbnRlcm1Ob2RlICosIFRJbnRlcm1Ob2RlICopIHsg
cmV0dXJuIGZhbHNlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBpbnQgaWQ7CisgICAgVFN0cmluZyBz
eW1ib2w7CisgICAgVFN0cmluZyBvcmlnaW5hbFN5bWJvbDsKK307CisKK2NsYXNzIFRJbnRlcm1D
b25zdGFudFVuaW9uIDogcHVibGljIFRJbnRlcm1UeXBlZCB7CitwdWJsaWM6CisgICAgVEludGVy
bUNvbnN0YW50VW5pb24oQ29uc3RhbnRVbmlvbiAqdW5pb25Qb2ludGVyLCBjb25zdCBUVHlwZSYg
dCkgOiBUSW50ZXJtVHlwZWQodCksIHVuaW9uQXJyYXlQb2ludGVyKHVuaW9uUG9pbnRlcikgeyB9
CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzU2lkZUVmZmVjdHMoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorCisgICAgQ29uc3RhbnRVbmlvbiogZ2V0VW5pb25BcnJheVBvaW50ZXIoKSBjb25zdCB7
IHJldHVybiB1bmlvbkFycmF5UG9pbnRlcjsgfQorICAgIAorICAgIGludCBnZXRJQ29uc3Qoc2l6
ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiB1bmlvbkFycmF5UG9pbnRlciA/IHVuaW9uQXJyYXlQ
b2ludGVyW2luZGV4XS5nZXRJQ29uc3QoKSA6IDA7IH0KKyAgICBmbG9hdCBnZXRGQ29uc3Qoc2l6
ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiB1bmlvbkFycmF5UG9pbnRlciA/IHVuaW9uQXJyYXlQ
b2ludGVyW2luZGV4XS5nZXRGQ29uc3QoKSA6IDAuMGY7IH0KKyAgICBib29sIGdldEJDb25zdChz
aXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIHVuaW9uQXJyYXlQb2ludGVyID8gdW5pb25BcnJh
eVBvaW50ZXJbaW5kZXhdLmdldEJDb25zdCgpIDogZmFsc2U7IH0KKworICAgIHZpcnR1YWwgVElu
dGVybUNvbnN0YW50VW5pb24qIGdldEFzQ29uc3RhbnRVbmlvbigpICB7IHJldHVybiB0aGlzOyB9
CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKKyAgICB2aXJ0
dWFsIGJvb2wgcmVwbGFjZUNoaWxkTm9kZShUSW50ZXJtTm9kZSAqLCBUSW50ZXJtTm9kZSAqKSB7
IHJldHVybiBmYWxzZTsgfQorCisgICAgVEludGVybVR5cGVkKiBmb2xkKFRPcGVyYXRvciwgVElu
dGVybVR5cGVkKiwgVEluZm9TaW5rJik7CisKK3Byb3RlY3RlZDoKKyAgICBDb25zdGFudFVuaW9u
ICp1bmlvbkFycmF5UG9pbnRlcjsKK307CisKKy8vCisvLyBJbnRlcm1lZGlhdGUgY2xhc3MgZm9y
IG5vZGUgdHlwZXMgdGhhdCBob2xkIG9wZXJhdG9ycy4KKy8vCitjbGFzcyBUSW50ZXJtT3BlcmF0
b3IgOiBwdWJsaWMgVEludGVybVR5cGVkIHsKK3B1YmxpYzoKKyAgICBUT3BlcmF0b3IgZ2V0T3Ao
KSBjb25zdCB7IHJldHVybiBvcDsgfQorICAgIHZvaWQgc2V0T3AoVE9wZXJhdG9yIG8pIHsgb3Ag
PSBvOyB9CisKKyAgICBib29sIGlzQXNzaWdubWVudCgpIGNvbnN0OworICAgIGJvb2wgaXNDb25z
dHJ1Y3RvcigpIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIGhhc1NpZGVFZmZlY3RzKCkgY29u
c3QgeyByZXR1cm4gaXNBc3NpZ25tZW50KCk7IH0KKworcHJvdGVjdGVkOgorICAgIFRJbnRlcm1P
cGVyYXRvcihUT3BlcmF0b3IgbykgOiBUSW50ZXJtVHlwZWQoVFR5cGUoRWJ0RmxvYXQsIEVicFVu
ZGVmaW5lZCkpLCBvcChvKSB7fQorICAgIFRJbnRlcm1PcGVyYXRvcihUT3BlcmF0b3IgbywgY29u
c3QgVFR5cGUmIHQpIDogVEludGVybVR5cGVkKHQpLCBvcChvKSB7fQorICAgIFRPcGVyYXRvciBv
cDsKK307CisKKy8vCisvLyBOb2RlcyBmb3IgYWxsIHRoZSBiYXNpYyBiaW5hcnkgbWF0aCBvcGVy
YXRvcnMuCisvLworY2xhc3MgVEludGVybUJpbmFyeSA6IHB1YmxpYyBUSW50ZXJtT3BlcmF0b3Ig
eworcHVibGljOgorICAgIFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yIG8pIDogVEludGVybU9wZXJh
dG9yKG8pLCBhZGRJbmRleENsYW1wKGZhbHNlKSB7fQorCisgICAgdmlydHVhbCBUSW50ZXJtQmlu
YXJ5KiBnZXRBc0JpbmFyeU5vZGUoKSB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCB2b2lk
IHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNo
aWxkTm9kZSgKKyAgICAgICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVw
bGFjZW1lbnQpOworCisgICAgdmlydHVhbCBib29sIGhhc1NpZGVFZmZlY3RzKCkgY29uc3QgeyBy
ZXR1cm4gKGlzQXNzaWdubWVudCgpIHx8IGxlZnQtPmhhc1NpZGVFZmZlY3RzKCkgfHwgcmlnaHQt
Pmhhc1NpZGVFZmZlY3RzKCkpOyB9CisKKyAgICB2b2lkIHNldExlZnQoVEludGVybVR5cGVkKiBu
KSB7IGxlZnQgPSBuOyB9CisgICAgdm9pZCBzZXRSaWdodChUSW50ZXJtVHlwZWQqIG4pIHsgcmln
aHQgPSBuOyB9CisgICAgVEludGVybVR5cGVkKiBnZXRMZWZ0KCkgY29uc3QgeyByZXR1cm4gbGVm
dDsgfQorICAgIFRJbnRlcm1UeXBlZCogZ2V0UmlnaHQoKSBjb25zdCB7IHJldHVybiByaWdodDsg
fQorICAgIGJvb2wgcHJvbW90ZShUSW5mb1NpbmsmKTsKKworICAgIHZvaWQgc2V0QWRkSW5kZXhD
bGFtcCgpIHsgYWRkSW5kZXhDbGFtcCA9IHRydWU7IH0KKyAgICBib29sIGdldEFkZEluZGV4Q2xh
bXAoKSB7IHJldHVybiBhZGRJbmRleENsYW1wOyB9CisKK3Byb3RlY3RlZDoKKyAgICBUSW50ZXJt
VHlwZWQqIGxlZnQ7CisgICAgVEludGVybVR5cGVkKiByaWdodDsKKworICAgIC8vIElmIHNldCB0
byB0cnVlLCB3cmFwIGFueSBFT3BJbmRleEluZGlyZWN0IHdpdGggYSBjbGFtcCB0byBib3VuZHMu
CisgICAgYm9vbCBhZGRJbmRleENsYW1wOworfTsKKworLy8KKy8vIE5vZGVzIGZvciB1bmFyeSBt
YXRoIG9wZXJhdG9ycy4KKy8vCitjbGFzcyBUSW50ZXJtVW5hcnkgOiBwdWJsaWMgVEludGVybU9w
ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBUSW50ZXJtVW5hcnkoVE9wZXJhdG9yIG8sIGNvbnN0IFRU
eXBlJiB0KSA6IFRJbnRlcm1PcGVyYXRvcihvLCB0KSwgb3BlcmFuZCgwKSwgdXNlRW11bGF0ZWRG
dW5jdGlvbihmYWxzZSkge30KKyAgICBUSW50ZXJtVW5hcnkoVE9wZXJhdG9yIG8pIDogVEludGVy
bU9wZXJhdG9yKG8pLCBvcGVyYW5kKDApLCB1c2VFbXVsYXRlZEZ1bmN0aW9uKGZhbHNlKSB7fQor
CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKKyAgICB2aXJ0
dWFsIFRJbnRlcm1VbmFyeSogZ2V0QXNVbmFyeU5vZGUoKSB7IHJldHVybiB0aGlzOyB9CisgICAg
dmlydHVhbCBib29sIHJlcGxhY2VDaGlsZE5vZGUoCisgICAgICAgIFRJbnRlcm1Ob2RlICpvcmln
aW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KTsKKworICAgIHZpcnR1YWwgYm9vbCBoYXNT
aWRlRWZmZWN0cygpIGNvbnN0IHsgcmV0dXJuIChpc0Fzc2lnbm1lbnQoKSB8fCBvcGVyYW5kLT5o
YXNTaWRlRWZmZWN0cygpKTsgfQorCisgICAgdm9pZCBzZXRPcGVyYW5kKFRJbnRlcm1UeXBlZCog
bykgeyBvcGVyYW5kID0gbzsgfQorICAgIFRJbnRlcm1UeXBlZCogZ2V0T3BlcmFuZCgpIHsgcmV0
dXJuIG9wZXJhbmQ7IH0gICAgCisgICAgYm9vbCBwcm9tb3RlKFRJbmZvU2luayYpOworCisgICAg
dm9pZCBzZXRVc2VFbXVsYXRlZEZ1bmN0aW9uKCkgeyB1c2VFbXVsYXRlZEZ1bmN0aW9uID0gdHJ1
ZTsgfQorICAgIGJvb2wgZ2V0VXNlRW11bGF0ZWRGdW5jdGlvbigpIHsgcmV0dXJuIHVzZUVtdWxh
dGVkRnVuY3Rpb247IH0KKworcHJvdGVjdGVkOgorICAgIFRJbnRlcm1UeXBlZCogb3BlcmFuZDsK
KworICAgIC8vIElmIHNldCB0byB0cnVlLCByZXBsYWNlIHRoZSBidWlsdC1pbiBmdW5jdGlvbiBj
YWxsIHdpdGggYW4gZW11bGF0ZWQgb25lCisgICAgLy8gdG8gd29yayBhcm91bmQgZHJpdmVyIGJ1
Z3MuCisgICAgYm9vbCB1c2VFbXVsYXRlZEZ1bmN0aW9uOworfTsKKwordHlwZWRlZiBUVmVjdG9y
PFRJbnRlcm1Ob2RlKj4gVEludGVybVNlcXVlbmNlOwordHlwZWRlZiBUVmVjdG9yPGludD4gVFF1
YWxpZmllckxpc3Q7CisKKy8vCisvLyBOb2RlcyB0aGF0IG9wZXJhdGUgb24gYW4gYXJiaXRyYXJ5
IHNpemVkIHNldCBvZiBjaGlsZHJlbi4KKy8vCitjbGFzcyBUSW50ZXJtQWdncmVnYXRlIDogcHVi
bGljIFRJbnRlcm1PcGVyYXRvciB7CitwdWJsaWM6CisgICAgVEludGVybUFnZ3JlZ2F0ZSgpIDog
VEludGVybU9wZXJhdG9yKEVPcE51bGwpLCB1c2VyRGVmaW5lZChmYWxzZSksIHVzZUVtdWxhdGVk
RnVuY3Rpb24oZmFsc2UpIHsgfQorICAgIFRJbnRlcm1BZ2dyZWdhdGUoVE9wZXJhdG9yIG8pIDog
VEludGVybU9wZXJhdG9yKG8pLCB1c2VFbXVsYXRlZEZ1bmN0aW9uKGZhbHNlKSB7IH0KKyAgICB+
VEludGVybUFnZ3JlZ2F0ZSgpIHsgfQorCisgICAgdmlydHVhbCBUSW50ZXJtQWdncmVnYXRlKiBn
ZXRBc0FnZ3JlZ2F0ZSgpIHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVy
c2UoVEludGVybVRyYXZlcnNlciopOworICAgIHZpcnR1YWwgYm9vbCByZXBsYWNlQ2hpbGROb2Rl
KAorICAgICAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVu
dCk7CisKKyAgICAvLyBDb25zZXJ2YXRpdmVseSBhc3N1bWUgZnVuY3Rpb24gY2FsbHMgYW5kIG90
aGVyIGFnZ3JlZ2F0ZSBvcGVyYXRvcnMgaGF2ZSBzaWRlLWVmZmVjdHMKKyAgICB2aXJ0dWFsIGJv
b2wgaGFzU2lkZUVmZmVjdHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBUSW50ZXJt
U2VxdWVuY2UmIGdldFNlcXVlbmNlKCkgeyByZXR1cm4gc2VxdWVuY2U7IH0KKworICAgIHZvaWQg
c2V0TmFtZShjb25zdCBUU3RyaW5nJiBuKSB7IG5hbWUgPSBuOyB9CisgICAgY29uc3QgVFN0cmlu
ZyYgZ2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG5hbWU7IH0KKworICAgIHZvaWQgc2V0VXNlckRl
ZmluZWQoKSB7IHVzZXJEZWZpbmVkID0gdHJ1ZTsgfQorICAgIGJvb2wgaXNVc2VyRGVmaW5lZCgp
IGNvbnN0IHsgcmV0dXJuIHVzZXJEZWZpbmVkOyB9CisKKyAgICB2b2lkIHNldE9wdGltaXplKGJv
b2wgbykgeyBvcHRpbWl6ZSA9IG87IH0KKyAgICBib29sIGdldE9wdGltaXplKCkgeyByZXR1cm4g
b3B0aW1pemU7IH0KKyAgICB2b2lkIHNldERlYnVnKGJvb2wgZCkgeyBkZWJ1ZyA9IGQ7IH0KKyAg
ICBib29sIGdldERlYnVnKCkgeyByZXR1cm4gZGVidWc7IH0KKworICAgIHZvaWQgc2V0VXNlRW11
bGF0ZWRGdW5jdGlvbigpIHsgdXNlRW11bGF0ZWRGdW5jdGlvbiA9IHRydWU7IH0KKyAgICBib29s
IGdldFVzZUVtdWxhdGVkRnVuY3Rpb24oKSB7IHJldHVybiB1c2VFbXVsYXRlZEZ1bmN0aW9uOyB9
CisKK3Byb3RlY3RlZDoKKyAgICBUSW50ZXJtQWdncmVnYXRlKGNvbnN0IFRJbnRlcm1BZ2dyZWdh
dGUmKTsgLy8gZGlzYWxsb3cgY29weSBjb25zdHJ1Y3RvcgorICAgIFRJbnRlcm1BZ2dyZWdhdGUm
IG9wZXJhdG9yPShjb25zdCBUSW50ZXJtQWdncmVnYXRlJik7IC8vIGRpc2FsbG93IGFzc2lnbm1l
bnQgb3BlcmF0b3IKKyAgICBUSW50ZXJtU2VxdWVuY2Ugc2VxdWVuY2U7CisgICAgVFN0cmluZyBu
YW1lOworICAgIGJvb2wgdXNlckRlZmluZWQ7IC8vIHVzZWQgZm9yIHVzZXIgZGVmaW5lZCBmdW5j
dGlvbiBuYW1lcworCisgICAgYm9vbCBvcHRpbWl6ZTsKKyAgICBib29sIGRlYnVnOworCisgICAg
Ly8gSWYgc2V0IHRvIHRydWUsIHJlcGxhY2UgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGNhbGwgd2l0
aCBhbiBlbXVsYXRlZCBvbmUKKyAgICAvLyB0byB3b3JrIGFyb3VuZCBkcml2ZXIgYnVncy4KKyAg
ICBib29sIHVzZUVtdWxhdGVkRnVuY3Rpb247Cit9OworCisvLworLy8gRm9yIGlmIHRlc3RzLiAg
U2ltcGxpZmllZCBzaW5jZSB0aGVyZSBpcyBubyBzd2l0Y2ggc3RhdGVtZW50LgorLy8KK2NsYXNz
IFRJbnRlcm1TZWxlY3Rpb24gOiBwdWJsaWMgVEludGVybVR5cGVkIHsKK3B1YmxpYzoKKyAgICBU
SW50ZXJtU2VsZWN0aW9uKFRJbnRlcm1UeXBlZCogY29uZCwgVEludGVybU5vZGUqIHRydWVCLCBU
SW50ZXJtTm9kZSogZmFsc2VCKSA6CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQoVFR5cGUoRWJ0
Vm9pZCwgRWJwVW5kZWZpbmVkKSksIGNvbmRpdGlvbihjb25kKSwgdHJ1ZUJsb2NrKHRydWVCKSwg
ZmFsc2VCbG9jayhmYWxzZUIpIHt9CisgICAgVEludGVybVNlbGVjdGlvbihUSW50ZXJtVHlwZWQq
IGNvbmQsIFRJbnRlcm1Ob2RlKiB0cnVlQiwgVEludGVybU5vZGUqIGZhbHNlQiwgY29uc3QgVFR5
cGUmIHR5cGUpIDoKKyAgICAgICAgICAgIFRJbnRlcm1UeXBlZCh0eXBlKSwgY29uZGl0aW9uKGNv
bmQpLCB0cnVlQmxvY2sodHJ1ZUIpLCBmYWxzZUJsb2NrKGZhbHNlQikge30KKworICAgIHZpcnR1
YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7CisgICAgdmlydHVhbCBib29sIHJl
cGxhY2VDaGlsZE5vZGUoCisgICAgICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5v
ZGUgKnJlcGxhY2VtZW50KTsKKworICAgIC8vIENvbnNlcnZhdGl2ZWx5IGFzc3VtZSBzZWxlY3Rp
b25zIGhhdmUgc2lkZS1lZmZlY3RzCisgICAgdmlydHVhbCBib29sIGhhc1NpZGVFZmZlY3RzKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgYm9vbCB1c2VzVGVybmFyeU9wZXJhdG9yKCkg
Y29uc3QgeyByZXR1cm4gZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZDsgfQorICAgIFRJbnRlcm1O
b2RlKiBnZXRDb25kaXRpb24oKSBjb25zdCB7IHJldHVybiBjb25kaXRpb247IH0KKyAgICBUSW50
ZXJtTm9kZSogZ2V0VHJ1ZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gdHJ1ZUJsb2NrOyB9CisgICAg
VEludGVybU5vZGUqIGdldEZhbHNlQmxvY2soKSBjb25zdCB7IHJldHVybiBmYWxzZUJsb2NrOyB9
CisgICAgVEludGVybVNlbGVjdGlvbiogZ2V0QXNTZWxlY3Rpb25Ob2RlKCkgeyByZXR1cm4gdGhp
czsgfQorCitwcm90ZWN0ZWQ6CisgICAgVEludGVybVR5cGVkKiBjb25kaXRpb247CisgICAgVElu
dGVybU5vZGUqIHRydWVCbG9jazsKKyAgICBUSW50ZXJtTm9kZSogZmFsc2VCbG9jazsKK307CisK
K2VudW0gVmlzaXQKK3sKKyAgICBQcmVWaXNpdCwKKyAgICBJblZpc2l0LAorICAgIFBvc3RWaXNp
dAorfTsKKworLy8KKy8vIEZvciB0cmF2ZXJzaW5nIHRoZSB0cmVlLiAgVXNlciBzaG91bGQgZGVy
aXZlIGZyb20gdGhpcywgCisvLyBwdXQgdGhlaXIgdHJhdmVyc2FsIHNwZWNpZmljIGRhdGEgaW4g
aXQsIGFuZCB0aGVuIHBhc3MKKy8vIGl0IHRvIGEgVHJhdmVyc2UgbWV0aG9kLgorLy8KKy8vIFdo
ZW4gdXNpbmcgdGhpcywganVzdCBmaWxsIGluIHRoZSBtZXRob2RzIGZvciBub2RlcyB5b3Ugd2Fu
dCB2aXNpdGVkLgorLy8gUmV0dXJuIGZhbHNlIGZyb20gYSBwcmUtdmlzaXQgdG8gc2tpcCB2aXNp
dGluZyB0aGF0IG5vZGUncyBzdWJ0cmVlLgorLy8KK2NsYXNzIFRJbnRlcm1UcmF2ZXJzZXIKK3sK
K3B1YmxpYzoKKyAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKCk7CisgICAgVEludGVybVRy
YXZlcnNlcihib29sIHByZVZpc2l0ID0gdHJ1ZSwgYm9vbCBpblZpc2l0ID0gZmFsc2UsIGJvb2wg
cG9zdFZpc2l0ID0gZmFsc2UsIGJvb2wgcmlnaHRUb0xlZnQgPSBmYWxzZSkgOiAKKyAgICAgICAg
ICAgIHByZVZpc2l0KHByZVZpc2l0KSwKKyAgICAgICAgICAgIGluVmlzaXQoaW5WaXNpdCksCisg
ICAgICAgICAgICBwb3N0VmlzaXQocG9zdFZpc2l0KSwKKyAgICAgICAgICAgIHJpZ2h0VG9MZWZ0
KHJpZ2h0VG9MZWZ0KSwKKyAgICAgICAgICAgIGRlcHRoKDApLAorICAgICAgICAgICAgbWF4RGVw
dGgoMCkge30KKyAgICB2aXJ0dWFsIH5USW50ZXJtVHJhdmVyc2VyKCkge30KKworICAgIHZpcnR1
YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKikge30KKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKikge30KKyAgICB2aXJ0dWFs
IGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKSB7cmV0dXJuIHRy
dWU7fQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5h
cnkqKSB7cmV0dXJuIHRydWU7fQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNp
dCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiopIHtyZXR1cm4gdHJ1ZTt9CisgICAgdmlydHVhbCBi
b29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKikge3JldHVy
biB0cnVlO30KKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJt
TG9vcCopIHtyZXR1cm4gdHJ1ZTt9CisgICAgdmlydHVhbCBib29sIHZpc2l0QnJhbmNoKFZpc2l0
IHZpc2l0LCBUSW50ZXJtQnJhbmNoKikge3JldHVybiB0cnVlO30KKworICAgIGludCBnZXRNYXhE
ZXB0aCgpIGNvbnN0IHtyZXR1cm4gbWF4RGVwdGg7fQorCisgICAgdm9pZCBpbmNyZW1lbnREZXB0
aChUSW50ZXJtTm9kZSAqY3VycmVudCkKKyAgICB7CisgICAgICAgIGRlcHRoKys7CisgICAgICAg
IG1heERlcHRoID0gc3RkOjptYXgobWF4RGVwdGgsIGRlcHRoKTsKKyAgICAgICAgcGF0aC5wdXNo
X2JhY2soY3VycmVudCk7CisgICAgfQorCisgICAgdm9pZCBkZWNyZW1lbnREZXB0aCgpCisgICAg
eworICAgICAgICBkZXB0aC0tOworICAgICAgICBwYXRoLnBvcF9iYWNrKCk7CisgICAgfQorCisg
ICAgVEludGVybU5vZGUgKmdldFBhcmVudE5vZGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHBh
dGguc2l6ZSgpID09IDAgPyBOVUxMIDogcGF0aC5iYWNrKCk7CisgICAgfQorCisgICAgLy8gUmV0
dXJuIHRoZSBvcmlnaW5hbCBuYW1lIGlmIGhhc2ggZnVuY3Rpb24gcG9pbnRlciBpcyBOVUxMOwor
ICAgIC8vIG90aGVyd2lzZSByZXR1cm4gdGhlIGhhc2hlZCBuYW1lLgorICAgIHN0YXRpYyBUU3Ry
aW5nIGhhc2goY29uc3QgVFN0cmluZyYgbmFtZSwgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rp
b24pOworCisgICAgY29uc3QgYm9vbCBwcmVWaXNpdDsKKyAgICBjb25zdCBib29sIGluVmlzaXQ7
CisgICAgY29uc3QgYm9vbCBwb3N0VmlzaXQ7CisgICAgY29uc3QgYm9vbCByaWdodFRvTGVmdDsK
KworcHJvdGVjdGVkOgorICAgIGludCBkZXB0aDsKKyAgICBpbnQgbWF4RGVwdGg7CisKKyAgICAv
LyBBbGwgdGhlIG5vZGVzIGZyb20gcm9vdCB0byB0aGUgY3VycmVudCBub2RlJ3MgcGFyZW50IGR1
cmluZyB0cmF2ZXJzaW5nLgorICAgIFRWZWN0b3I8VEludGVybU5vZGUgKj4gcGF0aDsKK307CisK
KyNlbmRpZiAvLyBfX0lOVEVSTUVESUFURV9ICmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9sb2NhbGludGVybWVkaWF0ZS5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvbG9jYWxpbnRlcm1l
ZGlhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iNTgyZTAyZjVkODU0MWU3Y2IzMzcwMzRlMGU2Yzk4MmUxZWY1
ZjY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvbG9jYWxpbnRlcm1lZGlhdGUuaApAQCAtMCwwICsxLDU3IEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9MT0NBTF9JTlRFUk1FRElBVEVfSU5DTFVERURfCisj
ZGVmaW5lIF9MT0NBTF9JTlRFUk1FRElBVEVfSU5DTFVERURfCisKKyNpbmNsdWRlICJHTFNMQU5H
L1NoYWRlckxhbmcuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0
ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuaCIKKworc3Ry
dWN0IFRWZWN0b3JGaWVsZHMgeworICAgIGludCBvZmZzZXRzWzRdOworICAgIGludCBudW07Cit9
OworCisvLworLy8gU2V0IG9mIGhlbHBlciBmdW5jdGlvbnMgdG8gaGVscCBwYXJzZSBhbmQgYnVp
bGQgdGhlIHRyZWUuCisvLworY2xhc3MgVEluZm9TaW5rOworY2xhc3MgVEludGVybWVkaWF0ZSB7
CitwdWJsaWM6ICAgIAorICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKKyAgICBUSW50
ZXJtZWRpYXRlKFRJbmZvU2luayYgaSkgOiBpbmZvU2luayhpKSB7IH0KKworICAgIFRJbnRlcm1T
eW1ib2wqIGFkZFN5bWJvbChpbnQgSWQsIGNvbnN0IFRTdHJpbmcmLCBjb25zdCBUVHlwZSYsIGNv
bnN0IFRTb3VyY2VMb2MmKTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnZlcnNpb24oVE9wZXJh
dG9yLCBjb25zdCBUVHlwZSYsIFRJbnRlcm1UeXBlZCopOworICAgIFRJbnRlcm1UeXBlZCogYWRk
QmluYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVk
KiByaWdodCwgY29uc3QgVFNvdXJjZUxvYyYsIFRTeW1ib2xUYWJsZSYpOworICAgIFRJbnRlcm1U
eXBlZCogYWRkQXNzaWduKFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBsZWZ0LCBUSW50ZXJt
VHlwZWQqIHJpZ2h0LCBjb25zdCBUU291cmNlTG9jJik7CisgICAgVEludGVybVR5cGVkKiBhZGRJ
bmRleChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogYmFzZSwgVEludGVybVR5cGVkKiBpbmRl
eCwgY29uc3QgVFNvdXJjZUxvYyYpOworICAgIFRJbnRlcm1UeXBlZCogYWRkVW5hcnlNYXRoKFRP
cGVyYXRvciBvcCwgVEludGVybU5vZGUqIGNoaWxkLCBjb25zdCBUU291cmNlTG9jJiwgVFN5bWJv
bFRhYmxlJik7CisgICAgVEludGVybUFnZ3JlZ2F0ZSogZ3Jvd0FnZ3JlZ2F0ZShUSW50ZXJtTm9k
ZSogbGVmdCwgVEludGVybU5vZGUqIHJpZ2h0LCBjb25zdCBUU291cmNlTG9jJik7CisgICAgVElu
dGVybUFnZ3JlZ2F0ZSogbWFrZUFnZ3JlZ2F0ZShUSW50ZXJtTm9kZSogbm9kZSwgY29uc3QgVFNv
dXJjZUxvYyYpOworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHNldEFnZ3JlZ2F0ZU9wZXJhdG9yKFRJ
bnRlcm1Ob2RlKiwgVE9wZXJhdG9yLCBjb25zdCBUU291cmNlTG9jJik7CisgICAgVEludGVybU5v
ZGUqICBhZGRTZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtTm9kZVBhaXIgY29k
ZSwgY29uc3QgVFNvdXJjZUxvYyYpOworICAgIFRJbnRlcm1UeXBlZCogYWRkU2VsZWN0aW9uKFRJ
bnRlcm1UeXBlZCogY29uZCwgVEludGVybVR5cGVkKiB0cnVlQmxvY2ssIFRJbnRlcm1UeXBlZCog
ZmFsc2VCbG9jaywgY29uc3QgVFNvdXJjZUxvYyYpOworICAgIFRJbnRlcm1UeXBlZCogYWRkQ29t
bWEoVEludGVybVR5cGVkKiBsZWZ0LCBUSW50ZXJtVHlwZWQqIHJpZ2h0LCBjb25zdCBUU291cmNl
TG9jJik7CisgICAgVEludGVybUNvbnN0YW50VW5pb24qIGFkZENvbnN0YW50VW5pb24oQ29uc3Rh
bnRVbmlvbiosIGNvbnN0IFRUeXBlJiwgY29uc3QgVFNvdXJjZUxvYyYpOworICAgIFRJbnRlcm1U
eXBlZCogcHJvbW90ZUNvbnN0YW50VW5pb24oVEJhc2ljVHlwZSwgVEludGVybUNvbnN0YW50VW5p
b24qKSA7CisgICAgYm9vbCBwYXJzZUNvbnN0VHJlZShjb25zdCBUU291cmNlTG9jJiwgVEludGVy
bU5vZGUqLCBDb25zdGFudFVuaW9uKiwgVE9wZXJhdG9yLCBUU3ltYm9sVGFibGUmLCBUVHlwZSwg
Ym9vbCBzaW5nbGVDb25zdGFudFBhcmFtID0gZmFsc2UpOyAgICAgICAgCisgICAgVEludGVybU5v
ZGUqIGFkZExvb3AoVExvb3BUeXBlLCBUSW50ZXJtTm9kZSosIFRJbnRlcm1UeXBlZCosIFRJbnRl
cm1UeXBlZCosIFRJbnRlcm1Ob2RlKiwgY29uc3QgVFNvdXJjZUxvYyYpOworICAgIFRJbnRlcm1C
cmFuY2gqIGFkZEJyYW5jaChUT3BlcmF0b3IsIGNvbnN0IFRTb3VyY2VMb2MmKTsKKyAgICBUSW50
ZXJtQnJhbmNoKiBhZGRCcmFuY2goVE9wZXJhdG9yLCBUSW50ZXJtVHlwZWQqLCBjb25zdCBUU291
cmNlTG9jJik7CisgICAgVEludGVybVR5cGVkKiBhZGRTd2l6emxlKFRWZWN0b3JGaWVsZHMmLCBj
b25zdCBUU291cmNlTG9jJik7CisgICAgYm9vbCBwb3N0UHJvY2VzcyhUSW50ZXJtTm9kZSopOwor
ICAgIHZvaWQgcmVtb3ZlKFRJbnRlcm1Ob2RlKik7CisgICAgdm9pZCBvdXRwdXRUcmVlKFRJbnRl
cm1Ob2RlKik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBvcGVyYXRvcj0oVEludGVybWVkaWF0ZSYp
OyAvLyBwcmV2ZW50IGFzc2lnbm1lbnRzCisKKyAgICBUSW5mb1NpbmsmIGluZm9TaW5rOworfTsK
KworI2VuZGlmIC8vIF9MT0NBTF9JTlRFUk1FRElBVEVfSU5DTFVERURfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9vc2luY2x1ZGUu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL29zaW5j
bHVkZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmMzMDYzZDYyNGE4NzIxODZjNGUyN2E4MjIyNDc1YWRkMzg4YTcz
ODEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9vc2luY2x1ZGUuaApAQCAtMCwwICsxLDY2IEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaWZuZGVmIF9fT1NJTkNMVURFX0gKKyNkZWZpbmUgX19PU0lOQ0xVREVfSAorCisv
LworLy8gVGhpcyBmaWxlIGNvbnRhaW5zIGNvbnRhaW5zIG9zLXNwZWNpZmljIGRhdGF0eXBlcyBh
bmQKKy8vIGRlY2xhcmVzIGFueSBvcy1zcGVjaWZpYyBmdW5jdGlvbnMuCisvLworCisjaWYgZGVm
aW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX1dJTjY0KQorI2RlZmluZSBBTkdMRV9PU19XSU4KKyNl
bGlmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fbGludXhfXykgfHwgXAorICAgICAg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX09wZW5CU0RfXykgfHwgXAorICAgICAg
ZGVmaW5lZChfX05ldEJTRF9fKSB8fCBkZWZpbmVkKF9fRHJhZ29uRmx5X18pIHx8IFwKKyAgICAg
IGRlZmluZWQoX19zdW4pIHx8IGRlZmluZWQoQU5EUk9JRCkgfHwgXAorICAgICAgZGVmaW5lZChf
X0dMSUJDX18pIHx8IGRlZmluZWQoX19HTlVfXykgfHwgXAorICAgICAgZGVmaW5lZChfX1FOWF9f
KQorI2RlZmluZSBBTkdMRV9PU19QT1NJWAorI2Vsc2UKKyNlcnJvciBVbnN1cHBvcnRlZCBwbGF0
Zm9ybS4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChBTkdMRV9PU19XSU4pCisjZGVmaW5lIFNUUklD
VAorI2RlZmluZSBWQ19FWFRSQUxFQU4gMQorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbGlmIGRl
ZmluZWQoQU5HTEVfT1NfUE9TSVgpCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHNl
bWFwaG9yZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYgIC8vIEFOR0xFX09TX1dJTgor
CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2NvbXBpbGVyZGVidWcuaCIKKworLy8K
Ky8vIFRocmVhZCBMb2NhbCBTdG9yYWdlIE9wZXJhdGlvbnMKKy8vCisjaWYgZGVmaW5lZChBTkdM
RV9PU19XSU4pCit0eXBlZGVmIERXT1JEIE9TX1RMU0luZGV4OworI2RlZmluZSBPU19JTlZBTElE
X1RMU19JTkRFWCAoVExTX09VVF9PRl9JTkRFWEVTKQorI2VsaWYgZGVmaW5lZChBTkdMRV9PU19Q
T1NJWCkKK3R5cGVkZWYgcHRocmVhZF9rZXlfdCBPU19UTFNJbmRleDsKKyNkZWZpbmUgT1NfSU5W
QUxJRF9UTFNfSU5ERVggKHN0YXRpY19jYXN0PE9TX1RMU0luZGV4PigtMSkpCisjZW5kaWYgIC8v
IEFOR0xFX09TX1dJTgorCitPU19UTFNJbmRleCBPU19BbGxvY1RMU0luZGV4KCk7Citib29sIE9T
X1NldFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCwgdm9pZCAqbHB2VmFsdWUpOworYm9vbCBP
U19GcmVlVExTSW5kZXgoT1NfVExTSW5kZXggbkluZGV4KTsKKworaW5saW5lIHZvaWQqIE9TX0dl
dFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCkKK3sKKyAgICBBU1NFUlQobkluZGV4ICE9IE9T
X0lOVkFMSURfVExTX0lOREVYKTsKKyNpZiBkZWZpbmVkKEFOR0xFX09TX1dJTikKKyAgICByZXR1
cm4gVGxzR2V0VmFsdWUobkluZGV4KTsKKyNlbGlmIGRlZmluZWQoQU5HTEVfT1NfUE9TSVgpCisg
ICAgcmV0dXJuIHB0aHJlYWRfZ2V0c3BlY2lmaWMobkluZGV4KTsKKyNlbmRpZiAgLy8gQU5HTEVf
T1NfV0lOCit9CisKKyNlbmRpZiAvLyBfX09TSU5DTFVERV9ICmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9vc3NvdXJjZV9wb3NpeC5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9vc3Nv
dXJjZV9wb3NpeC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTBhMzc1NzQ0NDFjMDEzNDZlNzMxZWU3MjUzMjFl
YjE1ZWNlMmRjMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL29zc291cmNlX3Bvc2l4LmNwcApAQCAtMCwwICsxLDY0IEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisvLworLy8gVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBwb3Np
eCBzcGVjaWZpYyBmdW5jdGlvbnMKKy8vCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9v
c2luY2x1ZGUuaCIKKworI2lmICFkZWZpbmVkKEFOR0xFX09TX1BPU0lYKQorI2Vycm9yIFRyeWlu
ZyB0byBidWlsZCBhIHBvc2l4IHNwZWNpZmljIGZpbGUgaW4gYSBub24tcG9zaXggYnVpbGQuCisj
ZW5kaWYKKworLy8KKy8vIFRocmVhZCBMb2NhbCBTdG9yYWdlIE9wZXJhdGlvbnMKKy8vCitPU19U
TFNJbmRleCBPU19BbGxvY1RMU0luZGV4KCkKK3sKKyAgICBwdGhyZWFkX2tleV90IHBQb29sSW5k
ZXg7CisKKyAgICAvLworICAgIC8vIENyZWF0ZSBnbG9iYWwgcG9vbCBrZXkuCisgICAgLy8KKyAg
ICBpZiAoKHB0aHJlYWRfa2V5X2NyZWF0ZSgmcFBvb2xJbmRleCwgTlVMTCkpICE9IDApIHsKKyAg
ICAgICAgYXNzZXJ0KDAgJiYgIk9TX0FsbG9jVExTSW5kZXgoKTogVW5hYmxlIHRvIGFsbG9jYXRl
IFRocmVhZCBMb2NhbCBTdG9yYWdlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgZWxzZSB7CisgICAgICAgIHJldHVybiBwUG9vbEluZGV4OworICAgIH0KK30KKworCitib29s
IE9TX1NldFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCwgdm9pZCAqbHB2VmFsdWUpCit7Cisg
ICAgaWYgKG5JbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworICAgICAgICBhc3NlcnQo
MCAmJiAiT1NfU2V0VExTVmFsdWUoKTogSW52YWxpZCBUTFMgSW5kZXgiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChwdGhyZWFkX3NldHNwZWNpZmljKG5JbmRleCwg
bHB2VmFsdWUpID09IDApCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGVsc2UKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworfQorCisKK2Jvb2wgT1NfRnJlZVRMU0luZGV4KE9TX1RMU0luZGV4IG5J
bmRleCkKK3sKKyAgICBpZiAobkluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisgICAg
ICAgIGFzc2VydCgwICYmICJPU19TZXRUTFNWYWx1ZSgpOiBJbnZhbGlkIFRMUyBJbmRleCIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBEZWxldGUgdGhl
IGdsb2JhbCBwb29sIGtleS4KKyAgICAvLworICAgIGlmIChwdGhyZWFkX2tleV9kZWxldGUobklu
ZGV4KSA9PSAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBlbHNlCisgICAgICAgIHJldHVy
biBmYWxzZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL29zc291cmNlX3dpbi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9vc3NvdXJjZV93aW4uY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJj
YzU4NzFiNzFkM2VlZmQyMTU2MTkzNjVlYWFjZDYyNTUwOGI4ODMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9vc3NvdXJj
ZV93aW4uY3BwCkBAIC0wLDAgKzEsNTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL29zaW5jbHVkZS5oIgorLy8KKy8vIFRoaXMgZmlsZSBjb250
YWlucyBjb250YWlucyB0aGUgd2luZG93J3Mgc3BlY2lmaWMgZnVuY3Rpb25zCisvLworCisjaWYg
IWRlZmluZWQoQU5HTEVfT1NfV0lOKQorI2Vycm9yIFRyeWluZyB0byBidWlsZCBhIHdpbmRvd3Mg
c3BlY2lmaWMgZmlsZSBpbiBhIG5vbiB3aW5kb3dzIGJ1aWxkLgorI2VuZGlmCisKKworLy8KKy8v
IFRocmVhZCBMb2NhbCBTdG9yYWdlIE9wZXJhdGlvbnMKKy8vCitPU19UTFNJbmRleCBPU19BbGxv
Y1RMU0luZGV4KCkKK3sKKwlEV09SRCBkd0luZGV4ID0gVGxzQWxsb2MoKTsKKwlpZiAoZHdJbmRl
eCA9PSBUTFNfT1VUX09GX0lOREVYRVMpIHsKKwkJYXNzZXJ0KDAgJiYgIk9TX0FsbG9jVExTSW5k
ZXgoKTogVW5hYmxlIHRvIGFsbG9jYXRlIFRocmVhZCBMb2NhbCBTdG9yYWdlIik7CisJCXJldHVy
biBPU19JTlZBTElEX1RMU19JTkRFWDsKKwl9CisKKwlyZXR1cm4gZHdJbmRleDsKK30KKworCiti
b29sIE9TX1NldFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCwgdm9pZCAqbHB2VmFsdWUpCit7
CisJaWYgKG5JbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworCQlhc3NlcnQoMCAmJiAi
T1NfU2V0VExTVmFsdWUoKTogSW52YWxpZCBUTFMgSW5kZXgiKTsKKwkJcmV0dXJuIGZhbHNlOwor
CX0KKworCWlmIChUbHNTZXRWYWx1ZShuSW5kZXgsIGxwdlZhbHVlKSkKKwkJcmV0dXJuIHRydWU7
CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7Cit9CisKKworYm9vbCBPU19GcmVlVExTSW5kZXgoT1Nf
VExTSW5kZXggbkluZGV4KQoreworCWlmIChuSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgp
IHsKKwkJYXNzZXJ0KDAgJiYgIk9TX1NldFRMU1ZhbHVlKCk6IEludmFsaWQgVExTIEluZGV4Iik7
CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAoVGxzRnJlZShuSW5kZXgpKQorCQlyZXR1cm4g
dHJ1ZTsKKwllbHNlCisJCXJldHVybiBmYWxzZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3BhcnNlQ29uc3QuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvcGFyc2VDb25zdC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYTU5ZjBiZTlkOGMwMDZmYzkyMjJjNDk4ZjA0ZTZiZTRmNjViMTU3OAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL3BhcnNlQ29uc3QuY3BwCkBAIC0wLDAgKzEsMjQ1IEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaCIKKwor
Ly8KKy8vIFVzZSB0aGlzIGNsYXNzIHRvIGNhcnJ5IGFsb25nIGRhdGEgZnJvbSBub2RlIHRvIG5v
ZGUgaW4gCisvLyB0aGUgdHJhdmVyc2FsCisvLworY2xhc3MgVENvbnN0VHJhdmVyc2VyIDogcHVi
bGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgorICAgIFRDb25zdFRyYXZlcnNlcihDb25z
dGFudFVuaW9uKiBjVW5pb24sIGJvb2wgc2luZ2xlQ29uc3RQYXJhbSwgVE9wZXJhdG9yIGNvbnN0
cnVjdFR5cGUsIFRJbmZvU2luayYgc2luaywgVFN5bWJvbFRhYmxlJiBzeW1UYWJsZSwgVFR5cGUm
IHQpCisgICAgICAgIDogZXJyb3IoZmFsc2UpLAorICAgICAgICAgIGluZGV4KDApLAorICAgICAg
ICAgIHVuaW9uQXJyYXkoY1VuaW9uKSwKKyAgICAgICAgICB0eXBlKHQpLAorICAgICAgICAgIGNv
bnN0cnVjdG9yVHlwZShjb25zdHJ1Y3RUeXBlKSwKKyAgICAgICAgICBzaW5nbGVDb25zdGFudFBh
cmFtKHNpbmdsZUNvbnN0UGFyYW0pLAorICAgICAgICAgIGluZm9TaW5rKHNpbmspLAorICAgICAg
ICAgIHN5bWJvbFRhYmxlKHN5bVRhYmxlKSwKKyAgICAgICAgICBzaXplKDApLAorICAgICAgICAg
IGlzTWF0cml4KGZhbHNlKSwKKyAgICAgICAgICBtYXRyaXhTaXplKDApIHsKKyAgICB9CisKKyAg
ICBib29sIGVycm9yOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJt
U3ltYm9sKik7CisgICAgdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5p
b24qKTsKKyAgICBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7
CisgICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqKTsKKyAgICBi
b29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKik7CisgICAg
Ym9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOworICAg
IGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCopOworICAgIGJvb2wgdmlz
aXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqKTsKKworICAgIHNpemVfdCBpbmRl
eDsKKyAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5OworICAgIFRUeXBlIHR5cGU7CisgICAg
VE9wZXJhdG9yIGNvbnN0cnVjdG9yVHlwZTsKKyAgICBib29sIHNpbmdsZUNvbnN0YW50UGFyYW07
CisgICAgVEluZm9TaW5rJiBpbmZvU2luazsKKyAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxl
OworICAgIHNpemVfdCBzaXplOyAvLyBzaXplIG9mIHRoZSBjb25zdHJ1Y3RvciAoIDQgZm9yIHZl
YzQpCisgICAgYm9vbCBpc01hdHJpeDsKKyAgICBzaXplX3QgbWF0cml4U2l6ZTsgLy8gZGltZW5z
aW9uIG9mIHRoZSBtYXRyaXggKG5vbWluYWwgc2l6ZSBhbmQgbm90IHRoZSBpbnN0YW5jZSBzaXpl
KQorfTsKKworLy8KKy8vIFRoZSByZXN0IG9mIHRoZSBmaWxlIGFyZSB0aGUgdHJhdmVyc2FsIGZ1
bmN0aW9ucy4gIFRoZSBsYXN0IG9uZQorLy8gaXMgdGhlIG9uZSB0aGF0IHN0YXJ0cyB0aGUgdHJh
dmVyc2FsLgorLy8KKy8vIFJldHVybiB0cnVlIGZyb20gaW50ZXJpb3Igbm9kZXMgdG8gaGF2ZSB0
aGUgZXh0ZXJuYWwgdHJhdmVyc2FsCisvLyBjb250aW51ZSBvbiB0byBjaGlsZHJlbi4gIElmIHlv
dSBwcm9jZXNzIGNoaWxkcmVuIHlvdXJzZWxmLAorLy8gcmV0dXJuIGZhbHNlLgorLy8KKwordm9p
ZCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCit7Cisg
ICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRM
aW5lKCksICJTeW1ib2wgTm9kZSBmb3VuZCBpbiBjb25zdGFudCBjb25zdHJ1Y3RvciIpOworICAg
IHJldHVybjsKKworfQorCitib29sIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRCaW5hcnkoVmlzaXQg
dmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5vZGUpCit7CisgICAgVFF1YWxpZmllciBxdWFsaWZpZXIg
PSBub2RlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCk7CisgICAgCisgICAgaWYgKHF1YWxpZmll
ciAhPSBFdnFDb25zdCkgeworICAgICAgICBUU3RyaW5nIGJ1ZjsKKyAgICAgICAgYnVmLmFwcGVu
ZCgiJ2NvbnN0cnVjdG9yJyA6IGFzc2lnbmluZyBub24tY29uc3RhbnQgdG8gIik7CisgICAgICAg
IGJ1Zi5hcHBlbmQodHlwZS5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgaW5mb1Npbmsu
aW5mby5tZXNzYWdlKEVQcmVmaXhFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCBidWYuY19zdHIoKSk7
CisgICAgICAgIGVycm9yID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAgCisgICAgfQor
CisgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdl
dExpbmUoKSwgIkJpbmFyeSBOb2RlIGZvdW5kIGluIGNvbnN0YW50IGNvbnN0cnVjdG9yIik7Cisg
ICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRV
bmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQoreworICAgIFRTdHJpbmcgYnVm
OworICAgIGJ1Zi5hcHBlbmQoIidjb25zdHJ1Y3RvcicgOiBhc3NpZ25pbmcgbm9uLWNvbnN0YW50
IHRvICIpOworICAgIGJ1Zi5hcHBlbmQodHlwZS5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICBp
bmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEVycm9yLCBub2RlLT5nZXRMaW5lKCksIGJ1Zi5j
X3N0cigpKTsKKyAgICBlcnJvciA9IHRydWU7CisgICAgcmV0dXJuIGZhbHNlOyAgCit9CisKK2Jv
b2wgVENvbnN0VHJhdmVyc2VyOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFn
Z3JlZ2F0ZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUtPmlzQ29uc3RydWN0b3IoKSAmJiBub2Rl
LT5nZXRPcCgpICE9IEVPcENvbW1hKSB7CisgICAgICAgIFRTdHJpbmcgYnVmOworICAgICAgICBi
dWYuYXBwZW5kKCInY29uc3RydWN0b3InIDogYXNzaWduaW5nIG5vbi1jb25zdGFudCB0byAiKTsK
KyAgICAgICAgYnVmLmFwcGVuZCh0eXBlLmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICBp
bmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEVycm9yLCBub2RlLT5nZXRMaW5lKCksIGJ1Zi5j
X3N0cigpKTsKKyAgICAgICAgZXJyb3IgPSB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7ICAK
KyAgICB9CisKKyAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMCkgeworICAg
ICAgICBlcnJvciA9IHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBi
b29sIGZsYWcgPSBub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAxICYmIG5vZGUtPmdldFNl
cXVlbmNlKClbMF0tPmdldEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisgICAgaWYg
KGZsYWcpIAorICAgIHsKKyAgICAgICAgc2luZ2xlQ29uc3RhbnRQYXJhbSA9IHRydWU7IAorICAg
ICAgICBjb25zdHJ1Y3RvclR5cGUgPSBub2RlLT5nZXRPcCgpOworICAgICAgICBzaXplID0gbm9k
ZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsKKworICAgICAgICBpZiAobm9kZS0+Z2V0VHlw
ZSgpLmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgIGlzTWF0cml4ID0gdHJ1ZTsKKyAgICAgICAg
ICAgIG1hdHJpeFNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKTsKKyAgICAg
ICAgfQorICAgIH0gICAgICAgCisKKyAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Ig
cCA9IG5vZGUtPmdldFNlcXVlbmNlKCkuYmVnaW4oKTsgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHAgIT0gbm9kZS0+Z2V0U2VxdWVuY2UoKS5lbmQoKTsgcCsrKSB7CisKKyAg
ICAgICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9wQ29tbWEpCisgICAgICAgICAgICBpbmRleCA9
IDA7ICAgICAgICAgICAKKworICAgICAgICAoKnApLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9ICAg
CisgICAgaWYgKGZsYWcpIAorICAgIHsKKyAgICAgICAgc2luZ2xlQ29uc3RhbnRQYXJhbSA9IGZh
bHNlOyAgIAorICAgICAgICBjb25zdHJ1Y3RvclR5cGUgPSBFT3BOdWxsOworICAgICAgICBzaXpl
ID0gMDsKKyAgICAgICAgaXNNYXRyaXggPSBmYWxzZTsKKyAgICAgICAgbWF0cml4U2l6ZSA9IDA7
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUQ29uc3RUcmF2ZXJzZXI6OnZp
c2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBub2RlKQoreworICAg
IGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGlu
ZSgpLCAiU2VsZWN0aW9uIE5vZGUgZm91bmQgaW4gY29uc3RhbnQgY29uc3RydWN0b3IiKTsKKyAg
ICBlcnJvciA9IHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFRDb25zdFRyYXZl
cnNlcjo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKQorewor
ICAgIGlmICghbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSkKKyAgICB7CisgICAgICAgIC8v
IFRoZSBjb25zdGFudCB3YXMgbm90IGluaXRpYWxpemVkLCB0aGlzIHNob3VsZCBhbHJlYWR5IGhh
dmUgYmVlbiBsb2dnZWQKKyAgICAgICAgYXNzZXJ0KGluZm9TaW5rLmluZm8uc2l6ZSgpICE9IDAp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiogbGVmdFVuaW9u
QXJyYXkgPSB1bmlvbkFycmF5OworICAgIHNpemVfdCBpbnN0YW5jZVNpemUgPSB0eXBlLmdldE9i
amVjdFNpemUoKTsKKworICAgIGlmIChpbmRleCA+PSBpbnN0YW5jZVNpemUpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmICghc2luZ2xlQ29uc3RhbnRQYXJhbSkgeworICAgICAgICBzaXplX3Qg
c2l6ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CisgICAgCisgICAgICAgIENv
bnN0YW50VW5pb24gKnJpZ2h0VW5pb25BcnJheSA9IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVy
KCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAg
ICAgICBpZiAoaW5kZXggPj0gaW5zdGFuY2VTaXplKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2luZGV4XSA9IHJpZ2h0VW5pb25BcnJheVtpXTsK
KworICAgICAgICAgICAgKGluZGV4KSsrOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgc2l6ZV90IHRvdGFsU2l6ZSA9IGluZGV4ICsgc2l6ZTsKKyAgICAgICAgQ29uc3RhbnRVbmlv
biAqcmlnaHRVbmlvbkFycmF5ID0gbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKyAgICAg
ICAgaWYgKCFpc01hdHJpeCkgeworICAgICAgICAgICAgc2l6ZV90IGNvdW50ID0gMDsKKyAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSBpbmRleDsgaSA8IHRvdGFsU2l6ZTsgaSsrKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGkgPj0gaW5zdGFuY2VTaXplKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXSA9IHJpZ2h0VW5pb25B
cnJheVtjb3VudF07CisKKyAgICAgICAgICAgICAgICAoaW5kZXgpKys7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCkg
PiAxKQorICAgICAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgeyAgLy8gZm9yIG1hdHJpeCBjb25zdHJ1Y3RvcnMKKyAgICAgICAgICAgIHNpemVf
dCBjb3VudCA9IDA7CisgICAgICAgICAgICBzaXplX3QgZWxlbWVudCA9IGluZGV4OworICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IGluZGV4OyBpIDwgdG90YWxTaXplOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICBpZiAoaSA+PSBpbnN0YW5jZVNpemUpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCAtIGkgPT0gMCB8fCAoaSAtIGVsZW1l
bnQpICUgKG1hdHJpeFNpemUgKyAxKSA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgbGVmdFVu
aW9uQXJyYXlbaV0gPSByaWdodFVuaW9uQXJyYXlbY291bnRdOworICAgICAgICAgICAgICAgIGVs
c2UgCisgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldEZDb25zdCgwLjBm
KTsKKworICAgICAgICAgICAgICAgIChpbmRleCkrKzsKKworICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpID4gMSkKKyAgICAgICAgICAgICAgICAgICAg
Y291bnQrKzsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
Cit9CisKK2Jvb2wgVENvbnN0VHJhdmVyc2VyOjp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRl
cm1Mb29wKiBub2RlKQoreworICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJu
YWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiTG9vcCBOb2RlIGZvdW5kIGluIGNvbnN0YW50IGNv
bnN0cnVjdG9yIik7CisgICAgZXJyb3IgPSB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJh
bmNoKiBub2RlKQoreworICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxF
cnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQnJhbmNoIE5vZGUgZm91bmQgaW4gY29uc3RhbnQgY29u
c3RydWN0b3IiKTsKKyAgICBlcnJvciA9IHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCisv
LworLy8gVGhpcyBmdW5jdGlvbiBpcyB0aGUgb25lIHRvIGNhbGwgZXh0ZXJuYWxseSB0byBzdGFy
dCB0aGUgdHJhdmVyc2FsLgorLy8gSW5kaXZpZHVhbCBmdW5jdGlvbnMgY2FuIGJlIGluaXRpYWxp
emVkIHRvIDAgdG8gc2tpcCBwcm9jZXNzaW5nIG9mIHRoYXQKKy8vIHR5cGUgb2Ygbm9kZS4gIEl0
J3MgY2hpbGRyZW4gd2lsbCBzdGlsbCBiZSBwcm9jZXNzZWQuCisvLworYm9vbCBUSW50ZXJtZWRp
YXRlOjpwYXJzZUNvbnN0VHJlZShjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUSW50ZXJtTm9kZSog
cm9vdCwgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSwgVE9wZXJhdG9yIGNvbnN0cnVjdG9yVHlw
ZSwgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVFR5cGUgdCwgYm9vbCBzaW5nbGVDb25zdGFu
dFBhcmFtKQoreworICAgIGlmIChyb290ID09IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIFRDb25zdFRyYXZlcnNlciBpdCh1bmlvbkFycmF5LCBzaW5nbGVDb25zdGFudFBhcmFtLCBj
b25zdHJ1Y3RvclR5cGUsIGluZm9TaW5rLCBzeW1ib2xUYWJsZSwgdCk7CisKKyAgICByb290LT50
cmF2ZXJzZSgmaXQpOworICAgIGlmIChpdC5lcnJvcikKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RGcmFn
bWVudFNoYWRlclRpbWluZy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYTlmM2Y0OWVmMzhlZDk5Y2ViNTBhNzg5NzMyYTA4MzExODY1NDlkZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcApAQCAtMCwwICsxLDEy
NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luZm9T
aW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaCIKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1
dC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmcuaCIKKworUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6UmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZyhUSW5mb1NpbmtCYXNlJiBzaW5rKQorICAgIDogbVNpbmso
c2luaykKKyAgICAsIG1OdW1FcnJvcnMoMCkKK3sKKyAgICAvLyBTYW1wbGluZyBvcHMgZm91bmQg
b25seSBpbiBmcmFnbWVudCBzaGFkZXJzLgorICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1
cmUyRChzMjE7dmYyO2YxOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFBy
b2ooczIxO3ZmMztmMTsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRQcm9q
KHMyMTt2ZjQ7ZjE7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZUN1YmUoc0Mx
O3ZmMztmMTsiKTsKKyAgICAvLyBTYW1wbGluZyBvcHMgZm91bmQgaW4gYm90aCB2ZXJ0ZXggYW5k
IGZyYWdtZW50IHNoYWRlcnMuCisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEKHMy
MTt2ZjI7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUHJvaihzMjE7dmYz
OyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFByb2ooczIxO3ZmNDsiKTsK
KyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlQ3ViZShzQzE7dmYzOyIpOworICAgIC8v
IFNhbXBsaW5nIG9wcyBwcm92aWRlZCBieSBPRVNfRUdMX2ltYWdlX2V4dGVybmFsLgorICAgIG1T
YW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRCgxO3ZmMjsiKTsKKyAgICBtU2FtcGxpbmdPcHMu
aW5zZXJ0KCJ0ZXh0dXJlMkRQcm9qKDE7dmYzOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQo
InRleHR1cmUyRFByb2ooMTt2ZjQ7Iik7CisgICAgLy8gU2FtcGxpbmcgb3BzIHByb3ZpZGVkIGJ5
IEFSQl90ZXh0dXJlX3JlY3RhbmdsZS4KKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJl
MkRSZWN0KDE7dmYyOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFJlY3RQ
cm9qKDE7dmYzOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFJlY3RQcm9q
KDE7dmY0OyIpOworfQorCisvLyBGSVhNRShtdnVqb3ZpYyk6IFdlIGRvIG5vdCBrbm93IGlmIHRo
ZSBleGVjdXRpb24gdGltZSBvZiBidWlsdC1pbiBvcGVyYXRpb25zIGxpa2Ugc2luLCBwb3csIGV0
Yy4KKy8vIGNhbiB2YXJ5IGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQgYXJndW1lbnRz
LiBJZiBzbywgd2Ugc2hvdWxkIHJlc3RyaWN0IHRob3NlIGFzIHdlbGwuCit2b2lkIFJlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmc6OmVuZm9yY2VSZXN0cmljdGlvbnMoY29uc3QgVERlcGVuZGVu
Y3lHcmFwaCYgZ3JhcGgpCit7CisgICAgbU51bUVycm9ycyA9IDA7CisKKyAgICAvLyBGSVhNRSht
dnVqb3ZpYyk6IFRoZSBkZXBlbmRlbmN5IGdyYXBoIGRvZXMgbm90IHN1cHBvcnQgdXNlciBkZWZp
bmVkIGZ1bmN0aW9uIGNhbGxzIHJpZ2h0IG5vdywKKyAgICAvLyBzbyB3ZSBnZW5lcmF0ZSBlcnJv
cnMgZm9yIHRoZW0uCisgICAgdmFsaWRhdGVVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbFVzYWdlKGdy
YXBoKTsKKworICAgIC8vIFN0YXJ0aW5nIGZyb20gZWFjaCBzYW1wbGVyLCB0cmF2ZXJzZSB0aGUg
ZGVwZW5kZW5jeSBncmFwaCBhbmQgZ2VuZXJhdGUgYW4gZXJyb3IgZWFjaCB0aW1lIHdlCisgICAg
Ly8gaGl0IGEgbm9kZSB3aGVyZSBzYW1wbGVyIGRlcGVuZGVudCB2YWx1ZXMgYXJlIG5vdCBhbGxv
d2VkLgorICAgIGZvciAoVEdyYXBoU3ltYm9sVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0g
Z3JhcGguYmVnaW5TYW1wbGVyU3ltYm9scygpOworICAgICAgICAgaXRlciAhPSBncmFwaC5lbmRT
YW1wbGVyU3ltYm9scygpOworICAgICAgICAgKytpdGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBo
U3ltYm9sKiBzYW1wbGVyU3ltYm9sID0gKml0ZXI7CisgICAgICAgIGNsZWFyVmlzaXRlZCgpOwor
ICAgICAgICBzYW1wbGVyU3ltYm9sLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQg
UmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmFsaWRhdGVVc2VyRGVmaW5lZEZ1bmN0aW9u
Q2FsbFVzYWdlKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKQoreworICAgIGZvciAoVEZ1
bmN0aW9uQ2FsbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGdyYXBoLmJlZ2luVXNlckRl
ZmluZWRGdW5jdGlvbkNhbGxzKCk7CisgICAgICAgICBpdGVyICE9IGdyYXBoLmVuZFVzZXJEZWZp
bmVkRnVuY3Rpb25DYWxscygpOworICAgICAgICAgKytpdGVyKQorICAgIHsKKyAgICAgICAgVEdy
YXBoRnVuY3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwgPSAqaXRlcjsKKyAgICAgICAgYmVnaW5FcnJv
cihmdW5jdGlvbkNhbGwtPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpKTsKKyAgICAgICAgbVNpbmsg
PDwgIkEgY2FsbCB0byBhIHVzZXIgZGVmaW5lZCBmdW5jdGlvbiBpcyBub3QgcGVybWl0dGVkLlxu
IjsKKyAgICB9Cit9CisKK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6YmVnaW5F
cnJvcihjb25zdCBUSW50ZXJtTm9kZSogbm9kZSkKK3sKKyAgICArK21OdW1FcnJvcnM7CisgICAg
bVNpbmsucHJlZml4KEVQcmVmaXhFcnJvcik7CisgICAgbVNpbmsubG9jYXRpb24obm9kZS0+Z2V0
TGluZSgpKTsKK30KKworYm9vbCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjppc1NhbXBs
aW5nT3AoY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKSBjb25zdAor
eworICAgIHJldHVybiAhaW50ZXJtRnVuY3Rpb25DYWxsLT5pc1VzZXJEZWZpbmVkKCkgJiYKKyAg
ICAgICAgICAgbVNhbXBsaW5nT3BzLmZpbmQoaW50ZXJtRnVuY3Rpb25DYWxsLT5nZXROYW1lKCkp
ICE9IG1TYW1wbGluZ09wcy5lbmQoKTsKK30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVy
VGltaW5nOjp2aXNpdEFyZ3VtZW50KFRHcmFwaEFyZ3VtZW50KiBwYXJhbWV0ZXIpCit7CisgICAg
Ly8gVGV4dHVyZSBjYWNoZSBhY2Nlc3MgdGltZSBtaWdodCBsZWFrIHNlbnNpdGl2ZSBpbmZvcm1h
dGlvbi4KKyAgICAvLyBUaHVzLCB3ZSByZXN0cmljdCBzYW1wbGVyIGRlcGVuZGVudCB2YWx1ZXMg
ZnJvbSBhZmZlY3RpbmcgdGhlIGNvb3JkaW5hdGUgb3IgTE9EIGJpYXMgb2YgYQorICAgIC8vIHNh
bXBsaW5nIG9wZXJhdGlvbi4KKyAgICBpZiAoaXNTYW1wbGluZ09wKHBhcmFtZXRlci0+Z2V0SW50
ZXJtRnVuY3Rpb25DYWxsKCkpKSB7CisgICAgICAgIHN3aXRjaCAocGFyYW1ldGVyLT5nZXRBcmd1
bWVudE51bWJlcigpKSB7CisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgLy8g
U2Vjb25kIGFyZ3VtZW50IChjb29yZCkKKyAgICAgICAgICAgICAgICBiZWdpbkVycm9yKHBhcmFt
ZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkpOworICAgICAgICAgICAgICAgIG1TaW5rIDw8
ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1pdHRlZCB0
byBiZSB0aGUiCisgICAgICAgICAgICAgICAgICAgICAgPDwgIiBjb29yZGluYXRlIGFyZ3VtZW50
IG9mIGEgc2FtcGxpbmcgb3BlcmF0aW9uLlxuIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAvLyBUaGlyZCBhcmd1bWVudCAoYmlh
cykKKyAgICAgICAgICAgICAgICBiZWdpbkVycm9yKHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rp
b25DYWxsKCkpOworICAgICAgICAgICAgICAgIG1TaW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVu
ZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1pdHRlZCB0byBiZSB0aGUiCisgICAgICAgICAg
ICAgICAgICAgICAgPDwgIiBiaWFzIGFyZ3VtZW50IG9mIGEgc2FtcGxpbmcgb3BlcmF0aW9uLlxu
IjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgLy8gRmlyc3QgYXJndW1lbnQgKHNhbXBsZXIpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRp
bWluZzo6dmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24pCit7CisgICAg
YmVnaW5FcnJvcihzZWxlY3Rpb24tPmdldEludGVybVNlbGVjdGlvbigpKTsKKyAgICBtU2luayA8
PCAiQW4gZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24gYSBzYW1wbGVyIGlzIG5vdCBwZXJtaXR0ZWQg
aW4gYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQuXG4iOworfQorCit2b2lkIFJlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmc6OnZpc2l0TG9vcChUR3JhcGhMb29wKiBsb29wKQoreworICAgIGJlZ2lu
RXJyb3IobG9vcC0+Z2V0SW50ZXJtTG9vcCgpKTsKKyAgICBtU2luayA8PCAiQW4gZXhwcmVzc2lv
biBkZXBlbmRlbnQgb24gYSBzYW1wbGVyIGlzIG5vdCBwZXJtaXR0ZWQgaW4gYSBsb29wIGNvbmRp
dGlvbi5cbiI7Cit9CisKK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRM
b2dpY2FsT3AoVEdyYXBoTG9naWNhbE9wKiBsb2dpY2FsT3ApCit7CisgICAgYmVnaW5FcnJvcihs
b2dpY2FsT3AtPmdldEludGVybUxvZ2ljYWxPcCgpKTsKKyAgICBtU2luayA8PCAiQW4gZXhwcmVz
c2lvbiBkZXBlbmRlbnQgb24gYSBzYW1wbGVyIGlzIG5vdCBwZXJtaXR0ZWQgb24gdGhlIGxlZnQg
aGFuZCBzaWRlIG9mIGEgbG9naWNhbCAiCisgICAgICAgICAgPDwgbG9naWNhbE9wLT5nZXRPcFN0
cmluZygpCisgICAgICAgICAgPDwgIiBvcGVyYXRvci5cbiI7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zMjNjYjYyZDhhMzg2ZTI1YWUwMDUwYWU0MmU5MTM0YzgwNTc2MThlCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaApAQCAtMCwwICsxLDQw
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfRlJB
R01FTlRfU0hBREVSX1RJTUlOR19IXworI2RlZmluZSBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1Rf
RlJBR01FTlRfU0hBREVSX1RJTUlOR19IXworCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5n
LmgiCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisK
K2NsYXNzIFRJbmZvU2lua0Jhc2U7CisKK2NsYXNzIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1p
bmcgOiBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nKFRJbmZvU2lua0Jhc2UmIHNpbmspOworICAgIHZvaWQgZW5mb3Jj
ZVJlc3RyaWN0aW9ucyhjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCk7CisgICAgaW50IG51
bUVycm9ycygpIGNvbnN0IHsgcmV0dXJuIG1OdW1FcnJvcnM7IH0KKworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdEFyZ3VtZW50KFRHcmFwaEFyZ3VtZW50KiBwYXJhbWV0ZXIpOworICAgIHZpcnR1YWwg
dm9pZCB2aXNpdFNlbGVjdGlvbihUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbik7CisgICAgdmly
dHVhbCB2b2lkIHZpc2l0TG9vcChUR3JhcGhMb29wKiBsb29wKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXRMb2dpY2FsT3AoVEdyYXBoTG9naWNhbE9wKiBsb2dpY2FsT3ApOworCitwcml2YXRlOgor
ICAgIHZvaWQgYmVnaW5FcnJvcihjb25zdCBUSW50ZXJtTm9kZSogbm9kZSk7CisgICAgdm9pZCB2
YWxpZGF0ZVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxsVXNhZ2UoY29uc3QgVERlcGVuZGVuY3lHcmFw
aCYgZ3JhcGgpOworICAgIGJvb2wgaXNTYW1wbGluZ09wKGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUq
IGludGVybUZ1bmN0aW9uQ2FsbCkgY29uc3Q7CisKKyAgICBUSW5mb1NpbmtCYXNlJiBtU2luazsK
KyAgICBpbnQgbU51bUVycm9yczsKKworICAgIHR5cGVkZWYgc3RkOjpzZXQ8VFN0cmluZz4gU3Ry
aW5nU2V0OworICAgIFN0cmluZ1NldCBtU2FtcGxpbmdPcHM7Cit9OworCisjZW5kaWYgIC8vIENP
TVBJTEVSX1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1p
bmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5lZTc4YzM1NDUwMTdiZGMxZThlOTk4ZjE5MTgyZjYxMzlmYzFh
NmRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcApAQCAt
MCwwICsxLDE3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgiCisKK3ZvaWQgUmVzdHJpY3RW
ZXJ0ZXhTaGFkZXJUaW1pbmc6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCit7Cisg
ICAgaWYgKElzU2FtcGxlcihub2RlLT5nZXRCYXNpY1R5cGUoKSkpIHsKKyAgICAgICAgKyttTnVt
RXJyb3JzOworICAgICAgICBtU2luay5tZXNzYWdlKEVQcmVmaXhFcnJvciwKKyAgICAgICAgICAg
ICAgICAgICAgICBub2RlLT5nZXRMaW5lKCksCisgICAgICAgICAgICAgICAgICAgICAgIlNhbXBs
ZXJzIGFyZSBub3QgcGVybWl0dGVkIGluIHZlcnRleCBzaGFkZXJzIik7CisgICAgfQorfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
dGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJU
aW1pbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41ZjBkZDMxOTdhMjM5N2JjYjEyMzk1NTg3OWMxODQ0NTNmZDYy
OGQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgKQEAgLTAs
MCArMSwzMyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVElNSU5HX1JFU1RS
SUNUX1ZFUlRFWF9TSEFERVJfVElNSU5HX0hfCisjZGVmaW5lIENPTVBJTEVSX1RJTUlOR19SRVNU
UklDVF9WRVJURVhfU0hBREVSX1RJTUlOR19IXworCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJM
YW5nLmgiCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKKworY2xhc3MgVEluZm9T
aW5rQmFzZTsKKworY2xhc3MgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcgOiBwdWJsaWMgVElu
dGVybVRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmco
VEluZm9TaW5rQmFzZSYgc2luaykKKyAgICAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZh
bHNlLCBmYWxzZSkKKyAgICAgICAgLCBtU2luayhzaW5rKQorICAgICAgICAsIG1OdW1FcnJvcnMo
MCkge30KKworICAgIHZvaWQgZW5mb3JjZVJlc3RyaWN0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCkg
eyByb290LT50cmF2ZXJzZSh0aGlzKTsgfQorICAgIGludCBudW1FcnJvcnMoKSB7IHJldHVybiBt
TnVtRXJyb3JzOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJv
bCopOworcHJpdmF0ZToKKyAgICBUSW5mb1NpbmtCYXNlJiBtU2luazsKKyAgICBpbnQgbU51bUVy
cm9yczsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX1ZFUlRFWF9T
SEFERVJfVElNSU5HX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci91dGlsLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL3V0aWwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3N2JkY2M0OGI4Njdl
NDEzZTBkZTkzN2U0ODc0NjQ4NTRjNGRiNGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci91dGlsLmNwcApAQCAtMCwwICsx
LDI4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdXRp
bC5oIgorCisjaW5jbHVkZSA8bGltaXRzPgorCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vz
c29yL251bWVyaWNfbGV4LmgiCisKK2Jvb2wgYXRvZl9jbGFtcChjb25zdCBjaGFyICpzdHIsIGZs
b2F0ICp2YWx1ZSkKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSBwcDo6bnVtZXJpY19sZXhfZmxvYXQo
c3RyLCB2YWx1ZSk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICAqdmFsdWUgPSBzdGQ6Om51
bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCk7CisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK2Jv
b2wgYXRvaV9jbGFtcChjb25zdCBjaGFyICpzdHIsIGludCAqdmFsdWUpCit7CisgICAgYm9vbCBz
dWNjZXNzID0gcHA6Om51bWVyaWNfbGV4X2ludChzdHIsIHZhbHVlKTsKKyAgICBpZiAoIXN1Y2Nl
c3MpCisgICAgICAgICp2YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7Cisg
ICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3V0aWwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3V0aWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYzY5ZjM5MDYw
ZDIwNTFmM2EyMDA2NTk1ZjMwNjAwZmVjMmU3Zjc3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oCkBAIC0wLDAg
KzEsMjAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVVRJTF9ICisj
ZGVmaW5lIENPTVBJTEVSX1VUSUxfSAorCisvLyBhdG9mX2NsYW1wIGlzIGxpa2UgYXRvZiBidXQK
Ky8vICAgMS4gaXQgZm9yY2VzIEMgbG9jYWxlLCBpLmUuIGZvcmNpbmcgJy4nIGFzIGRlY2ltYWwg
cG9pbnQuCisvLyAgIDIuIGl0IGNsYW1wcyB0aGUgdmFsdWUgdG8gLUZMVF9NQVggb3IgRkxUX01B
WCBpZiBvdmVyZmxvdyBoYXBwZW5zLgorLy8gUmV0dXJuIGZhbHNlIGlmIG92ZXJmbG93IGhhcHBl
bnMuCitleHRlcm4gYm9vbCBhdG9mX2NsYW1wKGNvbnN0IGNoYXIgKnN0ciwgZmxvYXQgKnZhbHVl
KTsKKworLy8gSWYgb3ZlcmZsb3cgaGFwcGVucywgY2xhbXAgdGhlIHZhbHVlIHRvIElOVF9NSU4g
b3IgSU5UX01BWC4KKy8vIFJldHVybiBmYWxzZSBpZiBvdmVyZmxvdyBoYXBwZW5zLgorZXh0ZXJu
IGJvb2wgYXRvaV9jbGFtcChjb25zdCBjaGFyICpzdHIsIGludCAqdmFsdWUpOworCisjZW5kaWYg
Ly8gQ09NUElMRVJfVVRJTF9ICmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdXRpbC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdXRpbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2ZTVlZWVkOTFmOGY1
YTU5MmU1MzI3M2YwOWE4NzhmNTRiODYwZWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3V0
aWwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNp
bmNsdWRlICJjb21waWxlci91dGlsLmgiCi0KLSNpbmNsdWRlIDxsaW1pdHM+Ci0KLSNpbmNsdWRl
ICJjb21waWxlci9wcmVwcm9jZXNzb3IvbnVtZXJpY19sZXguaCIKLQotYm9vbCBhdG9mX2NsYW1w
KGNvbnN0IGNoYXIgKnN0ciwgZmxvYXQgKnZhbHVlKQotewotICAgIGJvb2wgc3VjY2VzcyA9IHBw
OjpudW1lcmljX2xleF9mbG9hdChzdHIsIHZhbHVlKTsKLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAg
ICAgICp2YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKTsKLSAgICByZXR1
cm4gc3VjY2VzczsKLX0KLQotYm9vbCBhdG9pX2NsYW1wKGNvbnN0IGNoYXIgKnN0ciwgaW50ICp2
YWx1ZSkKLXsKLSAgICBib29sIHN1Y2Nlc3MgPSBwcDo6bnVtZXJpY19sZXhfaW50KHN0ciwgdmFs
dWUpOwotICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgKnZhbHVlID0gc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptYXgoKTsKLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3V0aWwuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci91dGlsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGRjNjlmMzkwNjBkMjA1MWYzYTIwMDY1OTVmMzA2MDBmZWMyZTdmNzcuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3V0aWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAK
LS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfVVRJTF9ICi0jZGVmaW5lIENP
TVBJTEVSX1VUSUxfSAotCi0vLyBhdG9mX2NsYW1wIGlzIGxpa2UgYXRvZiBidXQKLS8vICAgMS4g
aXQgZm9yY2VzIEMgbG9jYWxlLCBpLmUuIGZvcmNpbmcgJy4nIGFzIGRlY2ltYWwgcG9pbnQuCi0v
LyAgIDIuIGl0IGNsYW1wcyB0aGUgdmFsdWUgdG8gLUZMVF9NQVggb3IgRkxUX01BWCBpZiBvdmVy
ZmxvdyBoYXBwZW5zLgotLy8gUmV0dXJuIGZhbHNlIGlmIG92ZXJmbG93IGhhcHBlbnMuCi1leHRl
cm4gYm9vbCBhdG9mX2NsYW1wKGNvbnN0IGNoYXIgKnN0ciwgZmxvYXQgKnZhbHVlKTsKLQotLy8g
SWYgb3ZlcmZsb3cgaGFwcGVucywgY2xhbXAgdGhlIHZhbHVlIHRvIElOVF9NSU4gb3IgSU5UX01B
WC4KLS8vIFJldHVybiBmYWxzZSBpZiBvdmVyZmxvdyBoYXBwZW5zLgotZXh0ZXJuIGJvb2wgYXRv
aV9jbGFtcChjb25zdCBjaGFyICpzdHIsIGludCAqdmFsdWUpOwotCi0jZW5kaWYgLy8gQ09NUElM
RVJfVVRJTF9ICmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdM
L0Rpc3BsYXkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5o
CmluZGV4IDU4YzM5NDAzMzFiMzYzZmZjMjRiZGQ0OTAxNTQ0Mzc3ZmM3MWNlNDAuLmM4MTZlNGUx
YTU1YWExY2FkMjI3MGIzZjdmOGFkNmI2ZjMzOGUwYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5oCkBAIC0xMSw4ICsxMSw2IEBACiAjaWZuZGVmIExJ
QkVHTF9ESVNQTEFZX0hfCiAjZGVmaW5lIExJQkVHTF9ESVNQTEFZX0hfCiAKLSNpbmNsdWRlICJj
b21tb24vc3lzdGVtLmgiCi0KICNpbmNsdWRlIDxzZXQ+CiAjaW5jbHVkZSA8dmVjdG9yPgogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcAppbmRleCAw
MWI0MDE3MTc5MWM3ZTExZWZlMmE5YTJkMzhhZTNhZjM3MmE3ODM3Li4xMmY4ZGZkZjI1MDI0YjIx
NzMyYzM4ZDFkOWNiZDRjNjRmNjI2YzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliRUdML1N1cmZhY2UuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJFR0wvU3VyZmFjZS5jcHAKQEAgLTMxOCw2ICszMTgsOCBAQCBib29sIFN1cmZhY2U6
OmNoZWNrRm9yT3V0T2ZEYXRlU3dhcENoYWluKCkKICAgICAgICAgc2l6ZURpcnR5ID0gZmFsc2U7
CiAgICAgfQogCisgICAgYm9vbCB3YXNEaXJ0eSA9IChtU3dhcEludGVydmFsRGlydHkgfHwgc2l6
ZURpcnR5KTsKKwogICAgIGlmIChtU3dhcEludGVydmFsRGlydHkpCiAgICAgewogICAgICAgICBy
ZXNldFN3YXBDaGFpbihjbGllbnRXaWR0aCwgY2xpZW50SGVpZ2h0KTsKQEAgLTMyNyw3ICszMjks
NyBAQCBib29sIFN1cmZhY2U6OmNoZWNrRm9yT3V0T2ZEYXRlU3dhcENoYWluKCkKICAgICAgICAg
cmVzaXplU3dhcENoYWluKGNsaWVudFdpZHRoLCBjbGllbnRIZWlnaHQpOwogICAgIH0KIAotICAg
IGlmIChtU3dhcEludGVydmFsRGlydHkgfHwgc2l6ZURpcnR5KQorICAgIGlmICh3YXNEaXJ0eSkK
ICAgICB7CiAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihnZXRDdXJyZW50
RHJhd1N1cmZhY2UoKSkgPT0gdGhpcykKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuY3BwCmluZGV4IDMyMDY3MGRhMGM5NmQxOTJlNTNkOWE3
Mzk2YWU0NjY5YTM4MmY3NjIuLjBlYTQ2ZDRiMzllZmIxNzkzZDk0ZTM3ZjI4YzA4ZjZlYmQ0OGUz
Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdM
LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAK
QEAgLTE4NCw3ICsxODQsNyBAQCBjb25zdCBjaGFyICpfX3N0ZGNhbGwgZWdsUXVlcnlTdHJpbmco
RUdMRGlzcGxheSBkcHksIEVHTGludCBuYW1lKQogICAgICAgICAgIGNhc2UgRUdMX1ZFTkRPUjoK
ICAgICAgICAgICAgIHJldHVybiBlZ2w6OnN1Y2Nlc3MoZGlzcGxheS0+Z2V0VmVuZG9yU3RyaW5n
KCkpOwogICAgICAgICAgIGNhc2UgRUdMX1ZFUlNJT046Ci0gICAgICAgICAgICByZXR1cm4gZWds
OjpzdWNjZXNzKCIxLjQgKEFOR0xFICIgVkVSU0lPTl9TVFJJTkcgIikiKTsKKyAgICAgICAgICAg
IHJldHVybiBlZ2w6OnN1Y2Nlc3MoIjEuNCAoQU5HTEUgIiBBTkdMRV9WRVJTSU9OX1NUUklORyAi
KSIpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGVnbDo6ZXJyb3IoRUdMX0JBRF9QQVJB
TUVURVIsIChjb25zdCBjaGFyKilOVUxMKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLnJjIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkVHTC9saWJFR0wucmMKaW5kZXggZTJjNDcyZjNiYjMzYjgyMTkzNjE2Njk2NGZjODQ4ZDNm
ZTVlYjAzYi4uNTVlMWI4MzhjODc2NDFkMTlhMDQ1NTY1ZWU3MGE1NTYzY2I4YTA0MiAxMDA2NDQK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wucmMKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wucmMKQEAgLTU0LDggKzU0
LDggQEAgRU5ECiAvLw0KIA0KIFZTX1ZFUlNJT05fSU5GTyBWRVJTSU9OSU5GTw0KLSBGSUxFVkVS
U0lPTiBNQUpPUl9WRVJTSU9OLE1JTk9SX1ZFUlNJT04sQlVJTERfVkVSU0lPTixCVUlMRF9SRVZJ
U0lPTg0KLSBQUk9EVUNUVkVSU0lPTiBNQUpPUl9WRVJTSU9OLE1JTk9SX1ZFUlNJT04sQlVJTERf
VkVSU0lPTixCVUlMRF9SRVZJU0lPTg0KKyBGSUxFVkVSU0lPTiBBTkdMRV9NQUpPUl9WRVJTSU9O
LEFOR0xFX01JTk9SX1ZFUlNJT04sMCwwDQorIFBST0RVQ1RWRVJTSU9OIEFOR0xFX01BSk9SX1ZF
UlNJT04sQU5HTEVfTUlOT1JfVkVSU0lPTiwwLDANCiAgRklMRUZMQUdTTUFTSyAweDE3TA0KICNp
ZmRlZiBfREVCVUcNCiAgRklMRUZMQUdTIDB4MUwNCkBAIC03MSwxMyArNzEsMTQgQEAgQkVHSU4K
ICAgICAgICAgQkxPQ0sgIjA0MDkwNGIwIg0KICAgICAgICAgQkVHSU4NCiAgICAgICAgICAgICBW
QUxVRSAiRmlsZURlc2NyaXB0aW9uIiwgIkFOR0xFIGxpYkVHTCBEeW5hbWljIExpbmsgTGlicmFy
eSINCi0gICAgICAgICAgICBWQUxVRSAiRmlsZVZlcnNpb24iLCBWRVJTSU9OX1NUUklORw0KKyAg
ICAgICAgICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsIEFOR0xFX1ZFUlNJT05fU1RSSU5HDQogICAg
ICAgICAgICAgVkFMVUUgIkludGVybmFsTmFtZSIsICJsaWJFR0wiDQogICAgICAgICAgICAgVkFM
VUUgIkxlZ2FsQ29weXJpZ2h0IiwgIkNvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiINCiAg
ICAgICAgICAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsICJsaWJFR0wuZGxsIg0KLSAgICAg
ICAgICAgIFZBTFVFICJQcml2YXRlQnVpbGQiLCBWRVJTSU9OX1NUUklORw0KKyAgICAgICAgICAg
IFZBTFVFICJQcml2YXRlQnVpbGQiLCBBTkdMRV9WRVJTSU9OX1NUUklORw0KICAgICAgICAgICAg
IFZBTFVFICJQcm9kdWN0TmFtZSIsICJBTkdMRSBsaWJFR0wgRHluYW1pYyBMaW5rIExpYnJhcnki
DQotICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgVkVSU0lPTl9TVFJJTkcNCisg
ICAgICAgICAgICBWQUxVRSAiUHJvZHVjdFZlcnNpb24iLCBBTkdMRV9WRVJTSU9OX1NUUklORw0K
KyAgICAgICAgICAgIFZBTFVFICJDb21tZW50cyIsICJCdWlsZCBEYXRlOiAiIEFOR0xFX0NPTU1J
VF9EQVRFDQogICAgICAgICBFTkQNCiAgICAgRU5EDQogICAgIEJMT0NLICJWYXJGaWxlSW5mbyIN
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML21haW4uY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9tYWluLmNwcAppbmRleCA0MjRl
YzNmY2QxZDk4NjM1MWJmNWVhNGJhYmJiMTE2YzBmZDFhZWU3Li44MGRjYzM0NTgwNzU2MGVmNmE0
MTE3NGYxNGI3YzlmMGQ3OGM2ZjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliRUdML21haW4uY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJFR0wvbWFpbi5jcHAKQEAgLTEyLDEzICsxMiw1MCBAQAogCiBzdGF0aWMgRFdPUkQgY3VycmVu
dFRMUyA9IFRMU19PVVRfT0ZfSU5ERVhFUzsKIAorbmFtZXNwYWNlIGVnbAoreworCitDdXJyZW50
ICpBbGxvY2F0ZUN1cnJlbnQoKQoreworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoZWdsOjpDdXJy
ZW50KilMb2NhbEFsbG9jKExQVFIsIHNpemVvZihlZ2w6OkN1cnJlbnQpKTsKKworICAgIGlmICgh
Y3VycmVudCkKKyAgICB7CisgICAgICAgIEVSUigiQ291bGQgbm90IGFsbG9jYXRlIHRocmVhZCBs
b2NhbCBzdG9yYWdlLiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBBU1NF
UlQoY3VycmVudFRMUyAhPSBUTFNfT1VUX09GX0lOREVYRVMpOworICAgIFRsc1NldFZhbHVlKGN1
cnJlbnRUTFMsIGN1cnJlbnQpOworCisgICAgY3VycmVudC0+ZXJyb3IgPSBFR0xfU1VDQ0VTUzsK
KyAgICBjdXJyZW50LT5BUEkgPSBFR0xfT1BFTkdMX0VTX0FQSTsKKyAgICBjdXJyZW50LT5kaXNw
bGF5ID0gRUdMX05PX0RJU1BMQVk7CisgICAgY3VycmVudC0+ZHJhd1N1cmZhY2UgPSBFR0xfTk9f
U1VSRkFDRTsKKyAgICBjdXJyZW50LT5yZWFkU3VyZmFjZSA9IEVHTF9OT19TVVJGQUNFOworCisg
ICAgcmV0dXJuIGN1cnJlbnQ7Cit9CisKK3ZvaWQgRGVhbGxvY2F0ZUN1cnJlbnQoKQoreworICAg
IHZvaWQgKmN1cnJlbnQgPSBUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKworICAgIGlmIChjdXJy
ZW50KQorICAgIHsKKyAgICAgICAgTG9jYWxGcmVlKChITE9DQUwpY3VycmVudCk7CisgICAgfQor
fQorCit9CisKIGV4dGVybiAiQyIgQk9PTCBXSU5BUEkgRGxsTWFpbihISU5TVEFOQ0UgaW5zdGFu
Y2UsIERXT1JEIHJlYXNvbiwgTFBWT0lEIHJlc2VydmVkKQogewogICAgIHN3aXRjaCAocmVhc29u
KQogICAgIHsKICAgICAgIGNhc2UgRExMX1BST0NFU1NfQVRUQUNIOgogICAgICAgICB7Ci0jaWYg
IWRlZmluZWQoQU5HTEVfRElTQUJMRV9UUkFDRSkKKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9U
UkFDRSkKICAgICAgICAgICAgIEZJTEUgKmRlYnVnID0gZm9wZW4oVFJBQ0VfT1VUUFVUX0ZJTEUs
ICJydCIpOwogCiAgICAgICAgICAgICBpZiAoZGVidWcpCkBAIC00MywzOSArODAsMTcgQEAgZXh0
ZXJuICJDIiBCT09MIFdJTkFQSSBEbGxNYWluKEhJTlNUQU5DRSBpbnN0YW5jZSwgRFdPUkQgcmVh
c29uLCBMUFZPSUQgcmVzZXJ2ZWQKICAgICAgICAgLy8gRmFsbCB0aHJvdWdodCB0byBpbml0aWFs
aXplIGluZGV4CiAgICAgICBjYXNlIERMTF9USFJFQURfQVRUQUNIOgogICAgICAgICB7Ci0gICAg
ICAgICAgICBlZ2w6OkN1cnJlbnQgKmN1cnJlbnQgPSAoZWdsOjpDdXJyZW50KilMb2NhbEFsbG9j
KExQVFIsIHNpemVvZihlZ2w6OkN1cnJlbnQpKTsKLQotICAgICAgICAgICAgaWYgKGN1cnJlbnQp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVGxzU2V0VmFsdWUoY3VycmVudFRMUywg
Y3VycmVudCk7Ci0KLSAgICAgICAgICAgICAgICBjdXJyZW50LT5lcnJvciA9IEVHTF9TVUNDRVNT
OwotICAgICAgICAgICAgICAgIGN1cnJlbnQtPkFQSSA9IEVHTF9PUEVOR0xfRVNfQVBJOwotICAg
ICAgICAgICAgICAgIGN1cnJlbnQtPmRpc3BsYXkgPSBFR0xfTk9fRElTUExBWTsKLSAgICAgICAg
ICAgICAgICBjdXJyZW50LT5kcmF3U3VyZmFjZSA9IEVHTF9OT19TVVJGQUNFOwotICAgICAgICAg
ICAgICAgIGN1cnJlbnQtPnJlYWRTdXJmYWNlID0gRUdMX05PX1NVUkZBQ0U7Ci0gICAgICAgICAg
ICB9CisgICAgICAgICAgICBlZ2w6OkFsbG9jYXRlQ3VycmVudCgpOwogICAgICAgICB9CiAgICAg
ICAgIGJyZWFrOwogICAgICAgY2FzZSBETExfVEhSRUFEX0RFVEFDSDoKICAgICAgICAgewotICAg
ICAgICAgICAgdm9pZCAqY3VycmVudCA9IFRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOwotCi0gICAg
ICAgICAgICBpZiAoY3VycmVudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMb2Nh
bEZyZWUoKEhMT0NBTCljdXJyZW50KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVnbDo6
RGVhbGxvY2F0ZUN1cnJlbnQoKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICAgIGNh
c2UgRExMX1BST0NFU1NfREVUQUNIOgogICAgICAgICB7Ci0gICAgICAgICAgICB2b2lkICpjdXJy
ZW50ID0gVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICAgICAgICAgIGlmIChjdXJyZW50
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIExvY2FsRnJlZSgoSExPQ0FMKWN1cnJl
bnQpOwotICAgICAgICAgICAgfQotCisgICAgICAgICAgICBlZ2w6OkRlYWxsb2NhdGVDdXJyZW50
KCk7CiAgICAgICAgICAgICBUbHNGcmVlKGN1cnJlbnRUTFMpOwogICAgICAgICB9CiAgICAgICAg
IGJyZWFrOwpAQCAtODgsNzIgKzEwMyw4MiBAQCBleHRlcm4gIkMiIEJPT0wgV0lOQVBJIERsbE1h
aW4oSElOU1RBTkNFIGluc3RhbmNlLCBEV09SRCByZWFzb24sIExQVk9JRCByZXNlcnZlZAogCiBu
YW1lc3BhY2UgZWdsCiB7Ci12b2lkIHNldEN1cnJlbnRFcnJvcihFR0xpbnQgZXJyb3IpCisKK0N1
cnJlbnQgKkdldEN1cnJlbnREYXRhKCkKIHsKICAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJl
bnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOwogCisgICAgLy8gQU5HTEUgaXNzdWUgNDg4OiB3
aGVuIHRoZSBkbGwgaXMgbG9hZGVkIGFmdGVyIHRocmVhZCBpbml0aWFsaXphdGlvbiwKKyAgICAv
LyB0aHJlYWQgbG9jYWwgc3RvcmFnZSAoY3VycmVudCkgbWlnaHQgbm90IGV4aXN0IHlldC4KKyAg
ICByZXR1cm4gKGN1cnJlbnQgPyBjdXJyZW50IDogQWxsb2NhdGVDdXJyZW50KCkpOworfQorCit2
b2lkIHNldEN1cnJlbnRFcnJvcihFR0xpbnQgZXJyb3IpCit7CisgICAgQ3VycmVudCAqY3VycmVu
dCA9IEdldEN1cnJlbnREYXRhKCk7CisKICAgICBjdXJyZW50LT5lcnJvciA9IGVycm9yOwogfQog
CiBFR0xpbnQgZ2V0Q3VycmVudEVycm9yKCkKIHsKLSAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1
cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSBH
ZXRDdXJyZW50RGF0YSgpOwogCiAgICAgcmV0dXJuIGN1cnJlbnQtPmVycm9yOwogfQogCiB2b2lk
IHNldEN1cnJlbnRBUEkoRUdMZW51bSBBUEkpCiB7Ci0gICAgQ3VycmVudCAqY3VycmVudCA9IChD
dXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKyAgICBDdXJyZW50ICpjdXJyZW50ID0g
R2V0Q3VycmVudERhdGEoKTsKIAogICAgIGN1cnJlbnQtPkFQSSA9IEFQSTsKIH0KIAogRUdMZW51
bSBnZXRDdXJyZW50QVBJKCkKIHsKLSAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRs
c0dldFZhbHVlKGN1cnJlbnRUTFMpOworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSBHZXRDdXJyZW50
RGF0YSgpOwogCiAgICAgcmV0dXJuIGN1cnJlbnQtPkFQSTsKIH0KIAogdm9pZCBzZXRDdXJyZW50
RGlzcGxheShFR0xEaXNwbGF5IGRweSkKIHsKLSAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJl
bnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSBHZXRD
dXJyZW50RGF0YSgpOwogCiAgICAgY3VycmVudC0+ZGlzcGxheSA9IGRweTsKIH0KIAogRUdMRGlz
cGxheSBnZXRDdXJyZW50RGlzcGxheSgpCiB7Ci0gICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJy
ZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKyAgICBDdXJyZW50ICpjdXJyZW50ID0gR2V0
Q3VycmVudERhdGEoKTsKIAogICAgIHJldHVybiBjdXJyZW50LT5kaXNwbGF5OwogfQogCiB2b2lk
IHNldEN1cnJlbnREcmF3U3VyZmFjZShFR0xTdXJmYWNlIHN1cmZhY2UpCiB7Ci0gICAgQ3VycmVu
dCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKyAgICBDdXJy
ZW50ICpjdXJyZW50ID0gR2V0Q3VycmVudERhdGEoKTsKIAogICAgIGN1cnJlbnQtPmRyYXdTdXJm
YWNlID0gc3VyZmFjZTsKIH0KIAogRUdMU3VyZmFjZSBnZXRDdXJyZW50RHJhd1N1cmZhY2UoKQog
ewotICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRM
Uyk7CisgICAgQ3VycmVudCAqY3VycmVudCA9IEdldEN1cnJlbnREYXRhKCk7CiAKICAgICByZXR1
cm4gY3VycmVudC0+ZHJhd1N1cmZhY2U7CiB9CiAKIHZvaWQgc2V0Q3VycmVudFJlYWRTdXJmYWNl
KEVHTFN1cmZhY2Ugc3VyZmFjZSkKIHsKLSAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQq
KVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSBHZXRDdXJy
ZW50RGF0YSgpOwogCiAgICAgY3VycmVudC0+cmVhZFN1cmZhY2UgPSBzdXJmYWNlOwogfQogCiBF
R0xTdXJmYWNlIGdldEN1cnJlbnRSZWFkU3VyZmFjZSgpCiB7Ci0gICAgQ3VycmVudCAqY3VycmVu
dCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKyAgICBDdXJyZW50ICpjdXJy
ZW50ID0gR2V0Q3VycmVudERhdGEoKTsKIAogICAgIHJldHVybiBjdXJyZW50LT5yZWFkU3VyZmFj
ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
Q29uc3RhbnRzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnN0
YW50cy5oCmluZGV4IGQ5MDJkNDU2YjEyNjliMzVjN2JiMjJlNTI2Nzc1NWMwOTIyNWVmMzMuLjlm
MjRkNjZhN2RjNzRjNjA3Zjk2MTc3ZjdlYjRmNWNlOTcyZmQzNDIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29uc3RhbnRzLmgKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db25zdGFudHMuaApAQCAtMSwzNCArMSwz
NCBAQAotLy8NCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4NCi0vLw0KLQ0KLS8vIENvbnRhbnRzLmg6IERlZmluZXMgc29tZSBp
bXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBhbmQgZ2wgY29uc3RhbnRzDQotDQotI2lmbmRlZiBMSUJH
TEVTVjJfQ09OU1RBTlRTX0hfDQotI2RlZmluZSBMSUJHTEVTVjJfQ09OU1RBTlRTX0hfDQotDQot
bmFtZXNwYWNlIGdsDQotew0KLQ0KLWVudW0NCi17DQotICAgIE1BWF9WRVJURVhfQVRUUklCUyA9
IDE2LA0KLSAgICBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDE2LA0KLQ0KLSAgICAvLyBJbXBs
ZW1lbnRhdGlvbiB1cHBlciBsaW1pdHMsIHJlYWwgbWF4aW11bXMgZGVwZW5kIG9uIHRoZSBoYXJk
d2FyZQ0KLSAgICBJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMg
PSAxNiwNCi0gICAgSU1QTEVNRU5UQVRJT05fTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5J
VFMgPSBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyArIElNUExFTUVOVEFUSU9OX01BWF9WRVJURVhf
VEVYVFVSRV9JTUFHRV9VTklUUywgICAgDQotDQotICAgIElNUExFTUVOVEFUSU9OX01BWF9WQVJZ
SU5HX1ZFQ1RPUlMgPSAzMiwNCi0gICAgSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSUyA9
IDgNCi19Ow0KLQ0KLWNvbnN0IGZsb2F0IEFMSUFTRURfTElORV9XSURUSF9SQU5HRV9NSU4gPSAx
LjBmOw0KLWNvbnN0IGZsb2F0IEFMSUFTRURfTElORV9XSURUSF9SQU5HRV9NQVggPSAxLjBmOw0K
LWNvbnN0IGZsb2F0IEFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NSU4gPSAxLjBmOw0KLQ0KLX0N
Ci0NCi0jZW5kaWYgLy8gTElCR0xFU1YyX0NPTlNUQU5UU19IXw0KKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisv
LyBDb250YW50cy5oOiBEZWZpbmVzIHNvbWUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgYW5kIGds
IGNvbnN0YW50cworCisjaWZuZGVmIExJQkdMRVNWMl9DT05TVEFOVFNfSF8KKyNkZWZpbmUgTElC
R0xFU1YyX0NPTlNUQU5UU19IXworCituYW1lc3BhY2UgZ2wKK3sKKworZW51bQoreworICAgIE1B
WF9WRVJURVhfQVRUUklCUyA9IDE2LAorICAgIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTID0gMTYs
CisKKyAgICAvLyBJbXBsZW1lbnRhdGlvbiB1cHBlciBsaW1pdHMsIHJlYWwgbWF4aW11bXMgZGVw
ZW5kIG9uIHRoZSBoYXJkd2FyZQorICAgIElNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVS
RV9JTUFHRV9VTklUUyA9IDE2LAorICAgIElNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9URVhU
VVJFX0lNQUdFX1VOSVRTID0gTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKyBJTVBMRU1FTlRBVElP
Tl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICAgIAorCisgICAgSU1QTEVNRU5UQVRJ
T05fTUFYX1ZBUllJTkdfVkVDVE9SUyA9IDMyLAorICAgIElNUExFTUVOVEFUSU9OX01BWF9EUkFX
X0JVRkZFUlMgPSA4Cit9OworCitjb25zdCBmbG9hdCBBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0Vf
TUlOID0gMS4wZjsKK2NvbnN0IGZsb2F0IEFMSUFTRURfTElORV9XSURUSF9SQU5HRV9NQVggPSAx
LjBmOworY29uc3QgZmxvYXQgQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01JTiA9IDEuMGY7CisK
K30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9DT05TVEFOVFNfSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwCmluZGV4IGZiYTQxMDRkMWUx
MTI5ZDM2ZjFmZTlkMTYyZTFkNWNkZmI5YmM5ZGIuLjZiYzRjNzZjM2Q0MWMyZWE2ZTA1MjE4YWNl
NTRlMmY1MGFhNjA5YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9Db250ZXh0LmNwcApAQCAtMTc3OCw3ICsxNzc4LDcgQEAgdm9pZCBDb250ZXh0Ojph
cHBseVN0YXRlKEdMZW51bSBkcmF3TW9kZSkKICAgICB7CiAgICAgICAgIG1hc2sgPSAweEZGRkZG
RkZGOwogICAgIH0KLSAgICBtUmVuZGVyZXItPnNldEJsZW5kU3RhdGUobVN0YXRlLmJsZW5kLCBt
U3RhdGUuYmxlbmRDb2xvciwgbWFzayk7CisgICAgbVJlbmRlcmVyLT5zZXRCbGVuZFN0YXRlKGZy
YW1lYnVmZmVyT2JqZWN0LCBtU3RhdGUuYmxlbmQsIG1TdGF0ZS5ibGVuZENvbG9yLCBtYXNrKTsK
IAogICAgIG1SZW5kZXJlci0+c2V0RGVwdGhTdGVuY2lsU3RhdGUobVN0YXRlLmRlcHRoU3RlbmNp
bCwgbVN0YXRlLnN0ZW5jaWxSZWYsIG1TdGF0ZS5zdGVuY2lsQmFja1JlZiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZS5yYXN0ZXJpemVyLmZyb250RmFjZSA9PSBH
TF9DQ1cpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9Db250ZXh0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRl
eHQuaAppbmRleCAwOWVlZGU5ZmY5NDIyMTJiZjVkMmY4MzMyY2RkOWVlMzM2OGJhMDNiLi4zZGM5
NWUzYjk1MmRjOGYwNmNiMjljNDMwM2FjYmNkYjgzY2VkZjI0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaApAQCAtNzMsNyArNzMsNyBAQCBl
bnVtIFF1ZXJ5VHlwZQogY2xhc3MgVmVydGV4QXR0cmlidXRlCiB7CiAgIHB1YmxpYzoKLSAgICBW
ZXJ0ZXhBdHRyaWJ1dGUoKSA6IG1UeXBlKEdMX0ZMT0FUKSwgbVNpemUoMCksIG1Ob3JtYWxpemVk
KGZhbHNlKSwgbVN0cmlkZSgwKSwgbVBvaW50ZXIoTlVMTCksIG1BcnJheUVuYWJsZWQoZmFsc2Up
LCBtRGl2aXNvcigwKQorICAgIFZlcnRleEF0dHJpYnV0ZSgpIDogbVR5cGUoR0xfRkxPQVQpLCBt
U2l6ZSg0KSwgbU5vcm1hbGl6ZWQoZmFsc2UpLCBtU3RyaWRlKDApLCBtUG9pbnRlcihOVUxMKSwg
bUFycmF5RW5hYmxlZChmYWxzZSksIG1EaXZpc29yKDApCiAgICAgewogICAgICAgICBtQ3VycmVu
dFZhbHVlWzBdID0gMC4wZjsKICAgICAgICAgbUN1cnJlbnRWYWx1ZVsxXSA9IDAuMGY7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5h
cnkuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmlu
YXJ5LmNwcAppbmRleCBlZTBlYzhlMDNmMWQ5MjgzMWVkNjViMjM2YTllNWVjYTEzYmRkMzE5Li4y
NWVmYzQwOTczYjMzNzU0MDU5NzRjOTMzMTc0YmZmYTU1YjcxZWUzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5jcHAK
QEAgLTE2MjcsOSArMTYyNywxOSBAQCBib29sIFByb2dyYW1CaW5hcnk6OmxvYWQoSW5mb0xvZyAm
aW5mb0xvZywgY29uc3Qgdm9pZCAqYmluYXJ5LCBHTHNpemVpIGxlbmd0aCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGludCB2ZXJzaW9uID0gMDsKLSAgICBzdHJlYW0ucmVh
ZCgmdmVyc2lvbik7Ci0gICAgaWYgKHZlcnNpb24gIT0gVkVSU0lPTl9EV09SRCkKKyAgICBpbnQg
bWFqb3JWZXJzaW9uID0gMDsKKyAgICBpbnQgbWlub3JWZXJzaW9uID0gMDsKKyAgICBzdHJlYW0u
cmVhZCgmbWFqb3JWZXJzaW9uKTsKKyAgICBzdHJlYW0ucmVhZCgmbWlub3JWZXJzaW9uKTsKKyAg
ICBpZiAobWFqb3JWZXJzaW9uICE9IEFOR0xFX01BSk9SX1ZFUlNJT04gfHwgbWlub3JWZXJzaW9u
ICE9IEFOR0xFX01JTk9SX1ZFUlNJT04pCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgi
SW52YWxpZCBwcm9ncmFtIGJpbmFyeSB2ZXJzaW9uLiIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgdW5zaWduZWQgY2hhciBjb21taXRTdHJpbmdbQU5HTEVfQ09NTUlUX0hB
U0hfU0laRV07CisgICAgc3RyZWFtLnJlYWQoY29tbWl0U3RyaW5nLCBBTkdMRV9DT01NSVRfSEFT
SF9TSVpFKTsKKyAgICBpZiAobWVtY21wKGNvbW1pdFN0cmluZywgQU5HTEVfQ09NTUlUX0hBU0gs
IHNpemVvZih1bnNpZ25lZCBjaGFyKSAqIEFOR0xFX0NPTU1JVF9IQVNIX1NJWkUpICE9IDApCiAg
ICAgewogICAgICAgICBpbmZvTG9nLmFwcGVuZCgiSW52YWxpZCBwcm9ncmFtIGJpbmFyeSB2ZXJz
aW9uLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNzk2LDcgKzE4MDYsOSBAQCBib29s
IFByb2dyYW1CaW5hcnk6OnNhdmUodm9pZCogYmluYXJ5LCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6
ZWkgKmxlbmd0aCkKICAgICBCaW5hcnlPdXRwdXRTdHJlYW0gc3RyZWFtOwogCiAgICAgc3RyZWFt
LndyaXRlKEdMX1BST0dSQU1fQklOQVJZX0FOR0xFKTsKLSAgICBzdHJlYW0ud3JpdGUoVkVSU0lP
Tl9EV09SRCk7CisgICAgc3RyZWFtLndyaXRlKEFOR0xFX01BSk9SX1ZFUlNJT04pOworICAgIHN0
cmVhbS53cml0ZShBTkdMRV9NSU5PUl9WRVJTSU9OKTsKKyAgICBzdHJlYW0ud3JpdGUoQU5HTEVf
Q09NTUlUX0hBU0gsIEFOR0xFX0NPTU1JVF9IQVNIX1NJWkUpOwogICAgIHN0cmVhbS53cml0ZShB
TkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgKytpKQpAQCAtMjU5Miw3ICsyNjA0LDkg
QEAgc3RydWN0IEF0dHJpYnV0ZVNvcnRlcgogCiAgICAgYm9vbCBvcGVyYXRvcigpKGludCBhLCBp
bnQgYikKICAgICB7Ci0gICAgICAgIHJldHVybiBvcmlnaW5hbEluZGljZXNbYV0gPT0gLTEgPyBm
YWxzZSA6IG9yaWdpbmFsSW5kaWNlc1thXSA8IG9yaWdpbmFsSW5kaWNlc1tiXTsKKyAgICAgICAg
aWYgKG9yaWdpbmFsSW5kaWNlc1thXSA9PSAtMSkgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
b3JpZ2luYWxJbmRpY2VzW2JdID09IC0xKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIChv
cmlnaW5hbEluZGljZXNbYV0gPCBvcmlnaW5hbEluZGljZXNbYl0pOwogICAgIH0KIAogICAgIGNv
bnN0IGludCAoJm9yaWdpbmFsSW5kaWNlcylbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5oCmluZGV4IDg0OGQ0Yzk5
YTcxMzg4MzBkNmIyYmNlNzhhOTY3NTM1OTNmODljZTkuLjIwMTVhZGRkMTFkMjQ2YmFlNjJkNjE0
YWQxMDcyMjc4NDAzZmE2ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvU2hhZGVyLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9TaGFkZXIuaApAQCAtMTgsNyArMTgsNyBAQAogI2luY2x1ZGUgPGxpc3Q+CiAjaW5j
bHVkZSA8dmVjdG9yPgogCi0jaW5jbHVkZSAiY29tcGlsZXIvVW5pZm9ybS5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVW5pZm9ybS5oIgogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0
aWxzLmgiCiAKIG5hbWVzcGFjZSByeApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvVGV4dHVyZS5jcHAKaW5kZXggY2VlOWM1N2RhY2Y1MDhhZDJiNjhlNjhjOGQ3
NzRiNmZmNDNlNTQyYy4uM2RlZWNhZjExMmNiYmE1MDFlMTNmZTcwYzRhMDc2ZjMwOTlkZjE1NCAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJl
LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUu
Y3BwCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKICNpbmNs
dWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVz
LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0JsaXQuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9CbGl0LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1
ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZS5oIgogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwCmluZGV4IDFlN2NmOWQwY2ZhZWEz
YmZlN2Q0MzYxZWQ1M2JlZjViYjU2ODZkOGYuLmEzMzQ4MWUxNWMxM2M0ZTkzZjY1ZmFjYzU3YTFk
MGZkOWYyMWYwNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvbGliR0xFU3YyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL2xpYkdMRVN2Mi5jcHAKQEAgLTM4NDQsOSArMzg0NCw5IEBAIGNvbnN0IEdMdWJ5dGUq
IF9fc3RkY2FsbCBnbEdldFN0cmluZyhHTGVudW0gbmFtZSkKICAgICAgICAgICBjYXNlIEdMX1JF
TkRFUkVSOgogICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikoKGNvbnRleHQgIT0gTlVMTCkg
PyBjb250ZXh0LT5nZXRSZW5kZXJlclN0cmluZygpIDogIkFOR0xFIik7CiAgICAgICAgICAgY2Fz
ZSBHTF9WRVJTSU9OOgotICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikiT3BlbkdMIEVTIDIu
MCAoQU5HTEUgIiBWRVJTSU9OX1NUUklORyAiKSI7CisgICAgICAgICAgICByZXR1cm4gKEdMdWJ5
dGUqKSJPcGVuR0wgRVMgMi4wIChBTkdMRSAiIEFOR0xFX1ZFUlNJT05fU1RSSU5HICIpIjsKICAg
ICAgICAgICBjYXNlIEdMX1NIQURJTkdfTEFOR1VBR0VfVkVSU0lPTjoKLSAgICAgICAgICAgIHJl
dHVybiAoR0x1Ynl0ZSopIk9wZW5HTCBFUyBHTFNMIEVTIDEuMDAgKEFOR0xFICIgVkVSU0lPTl9T
VFJJTkcgIikiOworICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikiT3BlbkdMIEVTIEdMU0wg
RVMgMS4wMCAoQU5HTEUgIiBBTkdMRV9WRVJTSU9OX1NUUklORyAiKSI7CiAgICAgICAgICAgY2Fz
ZSBHTF9FWFRFTlNJT05TOgogICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikoKGNvbnRleHQg
IT0gTlVMTCkgPyBjb250ZXh0LT5nZXRFeHRlbnNpb25TdHJpbmcoKSA6ICIiKTsKICAgICAgICAg
ICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9saWJHTEVTdjIuZGVmIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9saWJHTEVTdjIuZGVmCmluZGV4IDJjZDhlY2UyYjIyYzRhYzEwNTVmNDkyZWE4NzM1Mjg0YTZl
NTA2M2IuLmI4MzIwYzhmMjU2M2I5ZWYxOTY2ZWYzYTQ0NWJjNThiNTAwOGJjZGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmRlZgor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5kZWYK
QEAgLTE4MywzICsxODMsNiBAQCBFWFBPUlRTCiAgICAgZ2xCaW5kVGV4SW1hZ2UgICAgICAgICAg
ICAgICAgICBAMTU4IE5PTkFNRQogICAgIGdsQ3JlYXRlUmVuZGVyZXIgICAgICAgICAgICAgICAg
QDE3NyBOT05BTUUKICAgICBnbERlc3Ryb3lSZW5kZXJlciAgICAgICAgICAgICAgIEAxNzggTk9O
QU1FCisKKyAgICA7IFNldHRpbmcgdXAgVFJBQ0UgbWFjcm8gY2FsbGJhY2tzCisgICAgU2V0VHJh
Y2VGdW5jdGlvblBvaW50ZXJzICAgICAgICBAMTgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5yYyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnJjCmluZGV4IGYxYjAxYjliNzk1OWViYzlm
ZjA1M2E1YWQ3ZGE0MTNmZDY1YmJhNGUuLjRjYTMxZjk3MjFlNzk4MWViYzQxNmYxOWZkZTU0Mjcw
NDIyOWJhNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvbGliR0xFU3YyLnJjCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvbGliR0xFU3YyLnJjCkBAIC01NCw4ICs1NCw4IEBAIEVORAogLy8NCiANCiBWU19WRVJTSU9O
X0lORk8gVkVSU0lPTklORk8NCi0gRklMRVZFUlNJT04gTUFKT1JfVkVSU0lPTixNSU5PUl9WRVJT
SU9OLEJVSUxEX1ZFUlNJT04sQlVJTERfUkVWSVNJT04NCi0gUFJPRFVDVFZFUlNJT04gTUFKT1Jf
VkVSU0lPTixNSU5PUl9WRVJTSU9OLEJVSUxEX1ZFUlNJT04sQlVJTERfUkVWSVNJT04NCisgRklM
RVZFUlNJT04gQU5HTEVfTUFKT1JfVkVSU0lPTixBTkdMRV9NSU5PUl9WRVJTSU9OLDAsMA0KKyBQ
Uk9EVUNUVkVSU0lPTiBBTkdMRV9NQUpPUl9WRVJTSU9OLEFOR0xFX01JTk9SX1ZFUlNJT04sMCww
DQogIEZJTEVGTEFHU01BU0sgMHgxN0wNCiAjaWZkZWYgX0RFQlVHDQogIEZJTEVGTEFHUyAweDFM
DQpAQCAtNzEsMTMgKzcxLDE0IEBAIEJFR0lOCiAgICAgICAgIEJMT0NLICIwNDA5MDRiMCINCiAg
ICAgICAgIEJFR0lODQogICAgICAgICAgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJBTkdM
RSBsaWJHTEVTdjIgRHluYW1pYyBMaW5rIExpYnJhcnkiDQotICAgICAgICAgICAgVkFMVUUgIkZp
bGVWZXJzaW9uIiwgVkVSU0lPTl9TVFJJTkcNCisgICAgICAgICAgICBWQUxVRSAiRmlsZVZlcnNp
b24iLCBBTkdMRV9WRVJTSU9OX1NUUklORw0KICAgICAgICAgICAgIFZBTFVFICJJbnRlcm5hbE5h
bWUiLCAibGliR0xFU3YyIg0KICAgICAgICAgICAgIFZBTFVFICJMZWdhbENvcHlyaWdodCIsICJD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4iDQogICAgICAgICAgICAgVkFMVUUgIk9yaWdp
bmFsRmlsZW5hbWUiLCAibGliR0xFU3YyLmRsbCINCi0gICAgICAgICAgICBWQUxVRSAiUHJpdmF0
ZUJ1aWxkIiwgVkVSU0lPTl9TVFJJTkcNCisgICAgICAgICAgICBWQUxVRSAiUHJpdmF0ZUJ1aWxk
IiwgQU5HTEVfVkVSU0lPTl9TVFJJTkcNCiAgICAgICAgICAgICBWQUxVRSAiUHJvZHVjdE5hbWUi
LCAiQU5HTEUgbGliR0xFU3YyIER5bmFtaWMgTGluayBMaWJyYXJ5Ig0KLSAgICAgICAgICAgIFZB
TFVFICJQcm9kdWN0VmVyc2lvbiIsIFZFUlNJT05fU1RSSU5HDQorICAgICAgICAgICAgVkFMVUUg
IlByb2R1Y3RWZXJzaW9uIiwgQU5HTEVfVkVSU0lPTl9TVFJJTkcNCisgICAgICAgICAgICBWQUxV
RSAiQ29tbWVudHMiLCAiQnVpbGQgRGF0ZTogIiBBTkdMRV9DT01NSVRfREFURQ0KICAgICAgICAg
RU5EDQogICAgIEVORA0KICAgICBCTE9DSyAiVmFyRmlsZUluZm8iDQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmN4cHJvaiBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjeHByb2oKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMDBlMTcwZTQ2YmVjNjU1ODY1NWNmMjhhYmE2
ODAxNzhjZWNkYjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmN4cHJv
agorKysgL2Rldi9udWxsCkBAIC0xLDQyNSArMCwwIEBACi3vu788P3htbCB2ZXJzaW9uPSIxLjAi
IGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9v
bHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVs
b3Blci9tc2J1aWxkLzIwMDMiPg0KLSAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3Vy
YXRpb25zIj4NCi0gICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMy
Ij4NCi0gICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4NCi0gICAgICA8
UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPg0KLSAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0K
LSAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4NCi0gICAgICA8
Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4NCi0gICAgICA8UGxhdGZvcm0+eDY0
PC9QbGF0Zm9ybT4NCi0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCi0gICAgPFByb2plY3RD
b25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPg0KLSAgICAgIDxDb25maWd1cmF0
aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+DQotICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0
Zm9ybT4NCi0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCi0gICAgPFByb2plY3RDb25maWd1
cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4NCi0gICAgICA8Q29uZmlndXJhdGlvbj5SZWxl
YXNlPC9Db25maWd1cmF0aW9uPg0KLSAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPg0KLSAg
ICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KLSAgPC9JdGVtR3JvdXA+DQotICA8UHJvcGVydHlH
cm91cCBMYWJlbD0iR2xvYmFscyI+DQotICAgIDxQcm9qZWN0R3VpZD57QjU4NzFBN0EtOTY4Qy00
MkUzLUEzM0ItOTgxRTZGNDQ4RTc4fTwvUHJvamVjdEd1aWQ+DQotICAgIDxSb290TmFtZXNwYWNl
PmxpYkdMRVN2MjwvUm9vdE5hbWVzcGFjZT4NCi0gICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3
b3JkPg0KLSAgPC9Qcm9wZXJ0eUdyb3VwPg0KLSAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0
c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4NCi0gIDxQcm9wZXJ0eUdyb3Vw
IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4z
MiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCi0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFt
aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCi0gICAgPENoYXJhY3RlclNldD5Vbmljb2Rl
PC9DaGFyYWN0ZXJTZXQ+DQotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hv
bGVQcm9ncmFtT3B0aW1pemF0aW9uPg0KLSAgPC9Qcm9wZXJ0eUdyb3VwPg0KLSAgPFByb3BlcnR5
R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xX
aW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCi0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5
bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCi0gICAgPENoYXJhY3RlclNldD5Vbmlj
b2RlPC9DaGFyYWN0ZXJTZXQ+DQotICA8L1Byb3BlcnR5R3JvdXA+DQotICA8UHJvcGVydHlHcm91
cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0
JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1p
Y0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KLSAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8
L0NoYXJhY3RlclNldD4NCi0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9s
ZVByb2dyYW1PcHRpbWl6YXRpb24+DQotICA8L1Byb3BlcnR5R3JvdXA+DQotICA8UHJvcGVydHlH
cm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2
NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCi0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFt
aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCi0gICAgPENoYXJhY3RlclNldD5Vbmljb2Rl
PC9DaGFyYWN0ZXJTZXQ+DQotICA8L1Byb3BlcnR5R3JvdXA+DQotICA8SW1wb3J0IFByb2plY3Q9
IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4NCi0gIDxJbXBvcnRHcm91
cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPg0KLSAgPC9JbXBvcnRHcm91cD4NCi0gIDxJbXBv
cnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVh
c2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KLSAgICA8SW1wb3J0IFByb2plY3Q9
IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29u
ZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSku
dXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQotICA8L0ltcG9y
dEdyb3VwPg0KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQ
bGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KLSAgICA8
SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSku
dXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5D
cHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0i
IC8+DQotICA8L0ltcG9ydEdyb3VwPg0KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29u
ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlT
aGVldHMiPg0KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5D
cHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3RE
aXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxB
cHBEYXRhUGxhdGZvcm0iIC8+DQotICA8L0ltcG9ydEdyb3VwPg0KLSAgPEltcG9ydEdyb3VwIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFi
ZWw9IlByb3BlcnR5U2hlZXRzIj4NCi0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGly
KVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3Rz
KCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIg
TGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KLSAgPC9JbXBvcnRHcm91cD4NCi0gIDxQ
cm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPg0KLSAgPFByb3BlcnR5R3JvdXA+DQot
ICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuNDAyMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lv
bj4NCi0gICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p
Jz09J0RlYnVnfFdpbjMyJyI+JChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGly
Pg0KLSAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nRGVidWd8V2luMzInIj4kKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPg0KLSAgICA8TGlua0lu
Y3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVi
dWd8V2luMzInIj50cnVlPC9MaW5rSW5jcmVtZW50YWw+DQotICAgIDxPdXREaXIgQ29uZGl0aW9u
PSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JChTb2x1
dGlvbkRpcikkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KLSAgICA8SW50RGlyIENvbmRpdGlv
bj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiQoQ29u
ZmlndXJhdGlvbilcPC9JbnREaXI+DQotICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSIn
JChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+ZmFsc2U8L0xp
bmtJbmNyZW1lbnRhbD4NCi0gICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p
fCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybSlcJChD
b25maWd1cmF0aW9uKVw8L091dERpcj4NCi0gICAgPEludERpciBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiQoUGxhdGZvcm0pXCQoQ29uZmln
dXJhdGlvbilcPC9JbnREaXI+DQotICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChD
b25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj50cnVlPC9MaW5rSW5jcmVt
ZW50YWw+DQotICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRm
b3JtKSc9PSdSZWxlYXNlfHg2NCciPiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybSlcJChDb25maWd1
cmF0aW9uKVw8L091dERpcj4NCi0gICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRp
b24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JChQbGF0Zm9ybSlcJChDb25maWd1cmF0
aW9uKVw8L0ludERpcj4NCi0gICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+ZmFsc2U8L0xpbmtJbmNyZW1l
bnRhbD4NCi0gICAgPEluY2x1ZGVQYXRoIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQ
bGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4kKEluY2x1ZGVQYXRoKTwvSW5jbHVkZVBhdGg+DQot
ICAgIDxMaWJyYXJ5UGF0aCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p
Jz09J1JlbGVhc2V8eDY0JyI+JChMaWJyYXJ5UGF0aCk8L0xpYnJhcnlQYXRoPg0KLSAgICA8SW5j
bHVkZVBhdGggQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1
Z3x4NjQnIj4kKEluY2x1ZGVQYXRoKTwvSW5jbHVkZVBhdGg+DQotICAgIDxMaWJyYXJ5UGF0aCBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiQo
TGlicmFyeVBhdGgpPC9MaWJyYXJ5UGF0aD4NCi0gICAgPEluY2x1ZGVQYXRoIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4kKEluY2x1ZGVQ
YXRoKTwvSW5jbHVkZVBhdGg+DQotICAgIDxJbmNsdWRlUGF0aCBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4kKEluY2x1ZGVQYXRoKTwv
SW5jbHVkZVBhdGg+DQotICAgIDxMaWJyYXJ5UGF0aCBDb25kaXRpb249IickKENvbmZpZ3VyYXRp
b24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JChMaWJyYXJ5UGF0aCk8L0xpYnJhcnlQ
YXRoPg0KLSAgICA8TGlicmFyeVBhdGggQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JChMaWJyYXJ5UGF0aCk8L0xpYnJhcnlQYXRoPg0K
LSAgPC9Qcm9wZXJ0eUdyb3VwPg0KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSIn
JChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPg0KLSAgICA8Q2xD
b21waWxlPg0KLSAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0g
ICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKFByb2plY3REaXIpOyQoUHJvamVj
dERpcikvLi47ICQoUHJvamVjdERpcikvLi4vLi4vaW5jbHVkZTslKEFkZGl0aW9uYWxJbmNsdWRl
RGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVw
cm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtMSUJHTEVT
VjJfRVhQT1JUUztfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7Tk9NSU5NQVg7JShQcmVwcm9jZXNz
b3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxNaW5pbWFs
UmVidWlsZD50cnVlPC9NaW5pbWFsUmVidWlsZD4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tz
PkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8UnVudGltZUxp
YnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnPC9SdW50aW1lTGlicmFyeT4NCi0gICAgICA8UHJlY29t
cGlsZWRIZWFkZXI+VXNlPC9QcmVjb21waWxlZEhlYWRlcj4NCi0gICAgICA8V2FybmluZ0xldmVs
PkxldmVsNDwvV2FybmluZ0xldmVsPg0KLSAgICAgIDxUcmVhdFdhcm5pbmdBc0Vycm9yPnRydWU8
L1RyZWF0V2FybmluZ0FzRXJyb3I+DQotICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+RWRp
dEFuZENvbnRpbnVlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KLSAgICAgIDxEaXNhYmxlU3Bl
Y2lmaWNXYXJuaW5ncz40MTAwOzQxMjc7NDE4OTs0MjM5OzQyNDQ7NDI0NTs0NTEyOzQ3MDI7NDk5
NjslKERpc2FibGVTcGVjaWZpY1dhcm5pbmdzKTwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+DQot
ICAgICAgPFByZWNvbXBpbGVkSGVhZGVyRmlsZT5wcmVjb21waWxlZC5oPC9QcmVjb21waWxlZEhl
YWRlckZpbGU+DQotICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPiQoRXh0ZXJuYWxDb21waWxlck9w
dGlvbnMpICUoQWRkaXRpb25hbE9wdGlvbnMpPC9BZGRpdGlvbmFsT3B0aW9ucz4NCi0gICAgPC9D
bENvbXBpbGU+DQotICAgIDxMaW5rPg0KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmQz
ZDkubGliO2R4Z3VpZC5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERl
cGVuZGVuY2llcz4NCi0gICAgICA8TW9kdWxlRGVmaW5pdGlvbkZpbGU+bGliR0xFU3YyLmRlZjwv
TW9kdWxlRGVmaW5pdGlvbkZpbGU+DQotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50
cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+DQotICAgICAgPFN1YlN5c3RlbT5XaW5kb3dz
PC9TdWJTeXN0ZW0+DQotICAgICAgPERhdGFFeGVjdXRpb25QcmV2ZW50aW9uPg0KLSAgICAgIDwv
RGF0YUV4ZWN1dGlvblByZXZlbnRpb24+DQotICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg4
NjwvVGFyZ2V0TWFjaGluZT4NCi0gICAgPC9MaW5rPg0KLSAgICA8UG9zdEJ1aWxkRXZlbnQ+DQot
ICAgICAgPENvbW1hbmQ+JTQwZWNobyBvbg0KLW1rZGlyICIkKFByb2plY3REaXIpLi5cLi5cbGli
XCQoQ29uZmlndXJhdGlvbilcIg0KLWNvcHkgIiQoT3V0RGlyKWxpYkdMRVN2Mi5kbGwiICIkKFBy
b2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbilcIg0KLWNvcHkgIiQoT3V0RGlyKWxp
YkdMRVN2Mi5saWIiICIkKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbilcIg0K
LSU0MGVjaG8gb2ZmDQotPC9Db21tYW5kPg0KLSAgICA8L1Bvc3RCdWlsZEV2ZW50Pg0KLSAgPC9J
dGVtRGVmaW5pdGlvbkdyb3VwPg0KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSIn
JChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+DQotICAgIDxD
bENvbXBpbGU+DQotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0K
LSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5BbnlTdWl0YWJsZTwvSW5saW5lRnVuY3Rp
b25FeHBhbnNpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChQcm9q
ZWN0RGlyKTskKFByb2plY3REaXIpLy4uOyAkKFByb2plY3REaXIpLy4uLy4uL2luY2x1ZGU7JShB
ZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmll
cz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+QU5HTEVfRElTQUJMRV9UUkFDRTtX
SU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtMSUJHTEVTVjJfRVhQT1JUUztfQ1JUX1NFQ1VS
RV9OT19ERVBSRUNBVEU7Tk9NSU5NQVg7X1NFQ1VSRV9TQ0w9MDslKFByZXByb2Nlc3NvckRlZmlu
aXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFJ1bnRpbWVMaWJyYXJ5
Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5Pg0KLSAgICAgIDxQcmVjb21waWxlZEhlYWRl
cj5Vc2U8L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWw0PC9X
YXJuaW5nTGV2ZWw+DQotICAgICAgPFRyZWF0V2FybmluZ0FzRXJyb3I+dHJ1ZTwvVHJlYXRXYXJu
aW5nQXNFcnJvcj4NCi0gICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJh
c2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQotICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5p
bmdzPjQxMDA7NDEyNzs0MTg5OzQyMzk7NDI0NDs0MjQ1OzQ1MTI7NDcwMjs0NzE4OzQ5OTY7JShE
aXNhYmxlU3BlY2lmaWNXYXJuaW5ncyk8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPg0KLSAgICAg
IDxQcmVjb21waWxlZEhlYWRlckZpbGU+cHJlY29tcGlsZWQuaDwvUHJlY29tcGlsZWRIZWFkZXJG
aWxlPg0KLSAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4kKEV4dGVybmFsQ29tcGlsZXJPcHRpb25z
KSAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlvbnM+DQotICAgIDwvQ2xDb21w
aWxlPg0KLSAgICA8TGluaz4NCi0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5kM2Q5Lmxp
YjtkeGd1aWQubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRl
bmNpZXM+DQotICAgICAgPElnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM+ZmFsc2U8L0lnbm9yZUFs
bERlZmF1bHRMaWJyYXJpZXM+DQotICAgICAgPE1vZHVsZURlZmluaXRpb25GaWxlPmxpYkdMRVN2
Mi5kZWY8L01vZHVsZURlZmluaXRpb25GaWxlPg0KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3Jt
YXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPg0KLSAgICAgIDxTdWJTeXN0ZW0+
V2luZG93czwvU3ViU3lzdGVtPg0KLSAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0
aW1pemVSZWZlcmVuY2VzPg0KLSAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJs
ZUNPTURBVEZvbGRpbmc+DQotICAgICAgPERhdGFFeGVjdXRpb25QcmV2ZW50aW9uPg0KLSAgICAg
IDwvRGF0YUV4ZWN1dGlvblByZXZlbnRpb24+DQotICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGlu
ZVg4NjwvVGFyZ2V0TWFjaGluZT4NCi0gICAgPC9MaW5rPg0KLSAgICA8UG9zdEJ1aWxkRXZlbnQ+
DQotICAgICAgPENvbW1hbmQ+JTQwZWNobyBvbg0KLW1rZGlyICIkKFByb2plY3REaXIpLi5cLi5c
bGliXCQoQ29uZmlndXJhdGlvbilcIg0KLWNvcHkgIiQoT3V0RGlyKWxpYkdMRVN2Mi5kbGwiICIk
KFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbilcIg0KLWNvcHkgIiQoT3V0RGly
KWxpYkdMRVN2Mi5saWIiICIkKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbilc
Ig0KLSU0MGVjaG8gb2ZmDQotPC9Db21tYW5kPg0KLSAgICA8L1Bvc3RCdWlsZEV2ZW50Pg0KLSAg
PC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9u
PSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4NCi0gICAgPE1p
ZGw+DQotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+DQot
ICAgIDwvTWlkbD4NCi0gICAgPENsQ29tcGlsZT4NCi0gICAgICA8T3B0aW1pemF0aW9uPkRpc2Fi
bGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+
JChQcm9qZWN0RGlyKS8uLjsgJChQcm9qZWN0RGlyKS8uLi8uLi9pbmNsdWRlOyUoQWRkaXRpb25h
bEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAg
ICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExM
O0xJQkdMRVNWMl9FWFBPUlRTO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWDslKFBy
ZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAg
PE1pbmltYWxSZWJ1aWxkPnRydWU8L01pbmltYWxSZWJ1aWxkPg0KLSAgICAgIDxCYXNpY1J1bnRp
bWVDaGVja3M+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxS
dW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWc8L1J1bnRpbWVMaWJyYXJ5Pg0KLSAgICAg
IDxQcmVjb21waWxlZEhlYWRlcj5Vc2U8L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDxXYXJu
aW5nTGV2ZWw+TGV2ZWw0PC9XYXJuaW5nTGV2ZWw+DQotICAgICAgPERpc2FibGVTcGVjaWZpY1dh
cm5pbmdzPjQxMDA7NDEyNzs0MTg5OzQyMzk7NDI0NDs0MjQ1OzQ1MTI7NDcwMjs0NzE4OzQ5OTY7
JShEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncyk8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPg0KLSAg
ICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1h
dGlvbkZvcm1hdD4NCi0gICAgICA8VHJlYXRXYXJuaW5nQXNFcnJvcj50cnVlPC9UcmVhdFdhcm5p
bmdBc0Vycm9yPg0KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlckZpbGU+cHJlY29tcGlsZWQuaDwv
UHJlY29tcGlsZWRIZWFkZXJGaWxlPg0KLSAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4kKEV4dGVy
bmFsQ29tcGlsZXJPcHRpb25zKSAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlv
bnM+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8TGluaz4NCi0gICAgICA8QWRkaXRpb25hbERl
cGVuZGVuY2llcz5kM2Q5LmxpYjtkeGd1aWQubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8
L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQotICAgICAgPE1vZHVsZURlZmluaXRpb25GaWxlPmxp
YkdMRVN2Mi5kZWY8L01vZHVsZURlZmluaXRpb25GaWxlPg0KLSAgICAgIDxHZW5lcmF0ZURlYnVn
SW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPg0KLSAgICAgIDxTdWJT
eXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPg0KLSAgICAgIDxEYXRhRXhlY3V0aW9uUHJldmVudGlv
bj4NCi0gICAgICA8L0RhdGFFeGVjdXRpb25QcmV2ZW50aW9uPg0KLSAgICAgIDxUYXJnZXRNYWNo
aW5lPk1hY2hpbmVYNjQ8L1RhcmdldE1hY2hpbmU+DQotICAgIDwvTGluaz4NCi0gICAgPFBvc3RC
dWlsZEV2ZW50Pg0KLSAgICAgIDxDb21tYW5kPiU0MGVjaG8gb24NCi1ta2RpciAiJChQcm9qZWN0
RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb24pXCINCi1jb3B5ICIkKE91dERpcilsaWJHTEVT
djIuZGxsIiAiJChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb24pXCINCi1jb3B5
ICIkKE91dERpcilsaWJHTEVTdjIubGliIiAiJChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZp
Z3VyYXRpb24pXCINCi0lNDBlY2hvIG9mZg0KLTwvQ29tbWFuZD4NCi0gICAgPC9Qb3N0QnVpbGRF
dmVudD4NCi0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCi0gIDxJdGVtRGVmaW5pdGlvbkdyb3Vw
IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQn
Ij4NCi0gICAgPE1pZGw+DQotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52
aXJvbm1lbnQ+DQotICAgIDwvTWlkbD4NCi0gICAgPENsQ29tcGlsZT4NCi0gICAgICA8T3B0aW1p
emF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPElubGluZUZ1bmN0aW9uRXhw
YW5zaW9uPkFueVN1aXRhYmxlPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCi0gICAgICA8QWRk
aXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKFByb2plY3REaXIpLy4uOyAkKFByb2plY3REaXIp
Ly4uLy4uL2luY2x1ZGU7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25h
bEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lO
MzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7TElCR0xFU1YyX0VYUE9SVFM7X0NSVF9TRUNVUkVf
Tk9fREVQUkVDQVRFO05PTUlOTUFYO19TRUNVUkVfU0NMPTA7JShQcmVwcm9jZXNzb3JEZWZpbml0
aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxSdW50aW1lTGlicmFyeT5N
dWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4NCi0gICAgICA8UHJlY29tcGlsZWRIZWFkZXI+
VXNlPC9QcmVjb21waWxlZEhlYWRlcj4NCi0gICAgICA8V2FybmluZ0xldmVsPkxldmVsNDwvV2Fy
bmluZ0xldmVsPg0KLSAgICAgIDxEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz40MTAwOzQxMjc7NDE4
OTs0MjM5OzQyNDQ7NDI0NTs0NTEyOzQ3MDI7NDcxODs0OTk2OyUoRGlzYWJsZVNwZWNpZmljV2Fy
bmluZ3MpPC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4NCi0gICAgICA8RGVidWdJbmZvcm1hdGlv
bkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQotICAgICAg
PFRyZWF0V2FybmluZ0FzRXJyb3I+dHJ1ZTwvVHJlYXRXYXJuaW5nQXNFcnJvcj4NCi0gICAgICA8
UHJlY29tcGlsZWRIZWFkZXJGaWxlPnByZWNvbXBpbGVkLmg8L1ByZWNvbXBpbGVkSGVhZGVyRmls
ZT4NCi0gICAgICA8QWRkaXRpb25hbE9wdGlvbnM+JChFeHRlcm5hbENvbXBpbGVyT3B0aW9ucykg
JShBZGRpdGlvbmFsT3B0aW9ucyk8L0FkZGl0aW9uYWxPcHRpb25zPg0KLSAgICA8L0NsQ29tcGls
ZT4NCi0gICAgPExpbms+DQotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+ZDNkOS5saWI7
ZHhndWlkLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5j
aWVzPg0KLSAgICAgIDxJZ25vcmVBbGxEZWZhdWx0TGlicmFyaWVzPmZhbHNlPC9JZ25vcmVBbGxE
ZWZhdWx0TGlicmFyaWVzPg0KLSAgICAgIDxNb2R1bGVEZWZpbml0aW9uRmlsZT5saWJHTEVTdjIu
ZGVmPC9Nb2R1bGVEZWZpbml0aW9uRmlsZT4NCi0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0
aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4NCi0gICAgICA8U3ViU3lzdGVtPldp
bmRvd3M8L1N1YlN5c3RlbT4NCi0gICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGlt
aXplUmVmZXJlbmNlcz4NCi0gICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVD
T01EQVRGb2xkaW5nPg0KLSAgICAgIDxEYXRhRXhlY3V0aW9uUHJldmVudGlvbj4NCi0gICAgICA8
L0RhdGFFeGVjdXRpb25QcmV2ZW50aW9uPg0KLSAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVY
NjQ8L1RhcmdldE1hY2hpbmU+DQotICAgIDwvTGluaz4NCi0gICAgPFBvc3RCdWlsZEV2ZW50Pg0K
LSAgICAgIDxDb21tYW5kPiU0MGVjaG8gb24NCi1ta2RpciAiJChQcm9qZWN0RGlyKS4uXC4uXGxp
YlwkKENvbmZpZ3VyYXRpb24pXCINCi1jb3B5ICIkKE91dERpcilsaWJHTEVTdjIuZGxsIiAiJChQ
cm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb24pXCINCi1jb3B5ICIkKE91dERpcils
aWJHTEVTdjIubGliIiAiJChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb24pXCIN
Ci0lNDBlY2hvIG9mZg0KLTwvQ29tbWFuZD4NCi0gICAgPC9Qb3N0QnVpbGRFdmVudD4NCi0gIDwv
SXRlbURlZmluaXRpb25Hcm91cD4NCi0gIDxJdGVtR3JvdXA+DQotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cdGhpcmRfcGFydHlcbXVybXVyaGFzaFxNdXJtdXJIYXNoMy5jcHAiPg0KLSAgICAg
IDxQcmVjb21waWxlZEhlYWRlciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZv
cm0pJz09J0RlYnVnfFdpbjMyJyI+Tm90VXNpbmc8L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAg
IDxQcmVjb21waWxlZEhlYWRlciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZv
cm0pJz09J1JlbGVhc2V8V2luMzInIj5Ob3RVc2luZzwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAg
ICAgPFByZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nRGVidWd8eDY0JyI+Tm90VXNpbmc8L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAg
IDxQcmVjb21waWxlZEhlYWRlciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZv
cm0pJz09J1JlbGVhc2V8eDY0JyI+Tm90VXNpbmc8L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICA8
L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJCdWZmZXIuY3BwIiAvPg0KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9IkNvbnRleHQuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGNvbW1vblxkZWJ1Zy5jcHAiPg0KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlciBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+
Tm90VXNpbmc8L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlciBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzIn
Ij5Ob3RVc2luZzwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAgICAgPFByZWNvbXBpbGVkSGVhZGVy
IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+
Tm90VXNpbmc8L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlciBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+
Tm90VXNpbmc8L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxjb21tb25cZXZlbnRfdHJhY2VyLmNwcCI+DQotICAgICAgPFBy
ZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nRGVidWd8V2luMzInIj5Ob3RVc2luZzwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAgICAgPFBy
ZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nUmVsZWFzZXxXaW4zMiciPk5vdFVzaW5nPC9QcmVjb21waWxlZEhlYWRlcj4NCi0gICAgICA8
UHJlY29tcGlsZWRIZWFkZXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdEZWJ1Z3x4NjQnIj5Ob3RVc2luZzwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAgICAgPFBy
ZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nUmVsZWFzZXx4NjQnIj5Ob3RVc2luZzwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAgIDwvQ2xD
b21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkZlbmNlLmNwcCIgLz4NCi0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSJGbG9hdDE2VG9GbG9hdDMyLmNwcCIgLz4NCi0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSJGcmFtZWJ1ZmZlci5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
SGFuZGxlQWxsb2NhdG9yLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJsaWJHTEVT
djIuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Im1haW4uY3BwIiAvPg0KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9InByZWNvbXBpbGVkLmNwcCI+DQotICAgICAgPFByZWNvbXBpbGVk
SGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8
V2luMzInIj5DcmVhdGU8L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDxQcmVjb21waWxlZEhl
YWRlciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8
V2luMzInIj5DcmVhdGU8L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDxQcmVjb21waWxlZEhl
YWRlciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2
NCciPkNyZWF0ZTwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAgICAgPFByZWNvbXBpbGVkSGVhZGVy
IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQn
Ij5DcmVhdGU8L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSJQcm9ncmFtLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSJQcm9ncmFtQmluYXJ5LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJRdWVyeS5j
cHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cY29tbW9uXFJlZkNvdW50T2JqZWN0
LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJSZW5kZXJidWZmZXIuY3BwIiAvPg0K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXEJsaXQuY3BwIiAvPg0KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9InJlbmRlcmVyXEZlbmNlMTEuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9InJlbmRlcmVyXEZlbmNlOS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0icmVuZGVyZXJcQnVmZmVyU3RvcmFnZS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0icmVuZGVyZXJcQnVmZmVyU3RvcmFnZTExLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSJyZW5kZXJlclxCdWZmZXJTdG9yYWdlOS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0icmVuZGVyZXJcSW1hZ2UuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJl
bmRlcmVyXEltYWdlOS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJc
SW5kZXhCdWZmZXIuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXElu
ZGV4QnVmZmVyMTEuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXElu
ZGV4QnVmZmVyOS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcSW5k
ZXhEYXRhTWFuYWdlci5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJc
SW1hZ2VTU0UyLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxJbWFn
ZTExLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxJbmRleFJhbmdl
Q2FjaGUuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXElucHV0TGF5
b3V0Q2FjaGUuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFF1ZXJ5
MTEuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFF1ZXJ5OS5jcHAi
IC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcUmVuZGVyZXIuY3BwIiAvPg0K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFJlbmRlcmVyMTEuY3BwIiAvPg0KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXHJlbmRlcmVyMTFfdXRpbHMuY3BwIiAvPg0K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFJlbmRlcmVyOS5jcHAiIC8+DQotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJccmVuZGVyZXI5X3V0aWxzLmNwcCIgLz4NCi0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxSZW5kZXJUYXJnZXQxMS5jcHAiIC8+DQot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcUmVuZGVyVGFyZ2V0OS5jcHAiIC8+DQot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcUmVuZGVyU3RhdGVDYWNoZS5jcHAiIC8+
DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcU2hhZGVyRXhlY3V0YWJsZTExLmNw
cCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxTaGFkZXJFeGVjdXRhYmxl
OS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcU3dhcENoYWluMTEu
Y3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFN3YXBDaGFpbjkuY3Bw
IiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFRleHR1cmVTdG9yYWdlLmNw
cCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxUZXh0dXJlU3RvcmFnZTEx
LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxUZXh0dXJlU3RvcmFn
ZTkuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFZlcnRleEJ1ZmZl
ci5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcVmVydGV4QnVmZmVy
MTEuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFZlcnRleEJ1ZmZl
cjkuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFZlcnRleERhdGFN
YW5hZ2VyLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxWZXJ0ZXhE
ZWNsYXJhdGlvbkNhY2hlLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJSZXNvdXJj
ZU1hbmFnZXIuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlNoYWRlci5jcHAiIC8+
DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iVGV4dHVyZS5jcHAiIC8+DQotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iVW5pZm9ybS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0idXRp
bGl0aWVzLmNwcCIgLz4NCi0gIDwvSXRlbUdyb3VwPg0KLSAgPEl0ZW1Hcm91cD4NCi0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxjb21tb25cZGVidWcuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxjb21tb25cZXZlbnRfdHJhY2VyLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cY29tbW9uXHN5c3RlbS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHRoaXJkX3BhcnR5XG11cm11cmhhc2hcTXVybXVySGFzaDMuaCIgLz4NCi0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlx0aGlyZF9wYXJ0eVx0cmFjZV9ldmVudFx0cmFjZV9ldmVudC5oIiAvPg0K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImFuZ2xldHlwZXMuaCIgLz4NCi0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSJCaW5hcnlTdHJlYW0uaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJC
dWZmZXIuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJjb25zdGFudHMuaCIgLz4NCi0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSJDb250ZXh0LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iRmVuY2UuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJGcmFtZWJ1ZmZlci5o
IiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcR0xFUzJcZ2wyLmgi
IC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxHTEVTMlxnbDJleHQu
aCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXEdMRVMyXGdsMnBs
YXRmb3JtLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iSGFuZGxlQWxsb2NhdG9yLmgi
IC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0ibWFpbi5oIiAvPg0KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Im1hdGh1dGlsLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icHJlY29t
cGlsZWQuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJQcm9ncmFtLmgiIC8+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iUHJvZ3JhbUJpbmFyeS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9IlF1ZXJ5LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cY29tbW9u
XFJlZkNvdW50T2JqZWN0LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iUmVuZGVyYnVm
ZmVyLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcQmxpdC5oIiAvPg0K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEZlbmNlMTEuaCIgLz4NCi0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxGZW5jZTkuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSJyZW5kZXJlclxGZW5jZUltcGwuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSJyZW5kZXJlclxCdWZmZXJTdG9yYWdlLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
cmVuZGVyZXJcQnVmZmVyU3RvcmFnZTExLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
cmVuZGVyZXJcQnVmZmVyU3RvcmFnZTkuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJy
ZW5kZXJlclxnZW5lcmF0ZW1pcC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRl
cmVyXEltYWdlLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcSW1hZ2Ux
MS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEltYWdlOS5oIiAvPg0K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEluZGV4QnVmZmVyLmgiIC8+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcSW5kZXhCdWZmZXIxMS5oIiAvPg0KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEluZGV4QnVmZmVyOS5oIiAvPg0KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEluZGV4RGF0YU1hbmFnZXIuaCIgLz4NCi0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxJbmRleFJhbmdlQ2FjaGUuaCIgLz4NCi0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxJbnB1dExheW91dENhY2hlLmgiIC8+DQotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcUXVlcnkxMS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9InJlbmRlcmVyXFF1ZXJ5SW1wbC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9InJlbmRlcmVyXFF1ZXJ5OS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRl
cmVyXFJlbmRlcmVyLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcUmVu
ZGVyZXIxMS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXHJlbmRlcmVy
MTFfdXRpbHMuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxSZW5kZXJl
cjkuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxyZW5kZXJlcjlfdXRp
bHMuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxSZW5kZXJUYXJnZXQu
aCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxSZW5kZXJUYXJnZXQxMS5o
IiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFJlbmRlclRhcmdldDkuaCIg
Lz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxSZW5kZXJTdGF0ZUNhY2hlLmgi
IC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcU2hhZGVyQ2FjaGUuaCIgLz4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxTaGFkZXJFeGVjdXRhYmxlLmgiIC8+
DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcU2hhZGVyRXhlY3V0YWJsZTExLmgi
IC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcU2hhZGVyRXhlY3V0YWJsZTku
aCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVk
XGNsZWFyMTF2cy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXHNoYWRl
cnNcY29tcGlsZWRcY2xlYXJtdWx0aXBsZTExcHMuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSJyZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVkXGNsZWFyc2luZ2xlMTFwcy5oIiAvPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRcY29tcG9uZW50
bWFza3BzLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xj
b21waWxlZFxmbGlweXZzLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJc
c2hhZGVyc1xjb21waWxlZFxsdW1pbmFuY2Vwcy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9InJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRccGFzc3Rocm91Z2gxMXZzLmgiIC8+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xjb21waWxlZFxwYXNzdGhyb3Vn
aGx1bTExcHMuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJz
XGNvbXBpbGVkXHBhc3N0aHJvdWdobHVtYWxwaGExMXBzLmgiIC8+DQotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xjb21waWxlZFxwYXNzdGhyb3VnaHBzLmgiIC8+DQot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xjb21waWxlZFxwYXNzdGhy
b3VnaHJnYjExcHMuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFk
ZXJzXGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTExcHMuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVkXHN0YW5kYXJkdnMuaCIgLz4NCi0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxTd2FwQ2hhaW4uaCIgLz4NCi0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSJyZW5kZXJlclxTd2FwQ2hhaW4xMS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9InJlbmRlcmVyXFN3YXBDaGFpbjkuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSJyZW5kZXJlclxUZXh0dXJlU3RvcmFnZS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9InJlbmRlcmVyXFRleHR1cmVTdG9yYWdlMTEuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSJyZW5kZXJlclxUZXh0dXJlU3RvcmFnZTkuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSJyZW5kZXJlclxWZXJ0ZXhCdWZmZXIuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSJyZW5kZXJlclxWZXJ0ZXhCdWZmZXIxMS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
InJlbmRlcmVyXFZlcnRleEJ1ZmZlcjkuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJy
ZW5kZXJlclx2ZXJ0ZXhjb252ZXJzaW9uLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
cmVuZGVyZXJcVmVydGV4RGF0YU1hbmFnZXIuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSJyZW5kZXJlclxWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmgiIC8+DQotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0icmVzb3VyY2UuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJSZXNvdXJj
ZU1hbmFnZXIuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJTaGFkZXIuaCIgLz4NCi0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSJUZXh0dXJlLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iVW5pZm9ybS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InV0aWxpdGllcy5o
IiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGNvbW1vblx2ZXJzaW9uLmgiIC8+DQot
ICA8L0l0ZW1Hcm91cD4NCi0gIDxJdGVtR3JvdXA+DQotICAgIDxOb25lIEluY2x1ZGU9ImxpYkdM
RVN2Mi5kZWYiIC8+DQotICAgIDxOb25lIEluY2x1ZGU9InJlbmRlcmVyXHNoYWRlcnNcQmxpdC5w
cyIgLz4NCi0gICAgPE5vbmUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xCbGl0LnZzIiAvPg0K
LSAgICA8Tm9uZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXENsZWFyMTEuaGxzbCIgLz4NCi0g
ICAgPE5vbmUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xnZW5lcmF0ZV9zaGFkZXJzLmJhdCIg
Lz4NCi0gICAgPE5vbmUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xQYXNzdGhyb3VnaDExLmhs
c2wiIC8+DQotICA8L0l0ZW1Hcm91cD4NCi0gIDxJdGVtR3JvdXA+DQotICAgIDxSZXNvdXJjZUNv
bXBpbGUgSW5jbHVkZT0ibGliR0xFU3YyLnJjIiAvPg0KLSAgPC9JdGVtR3JvdXA+DQotICA8SXRl
bUdyb3VwPg0KLSAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSIuLlxjb21waWxlclxwcmVw
cm9jZXNzb3JccHJlcHJvY2Vzc29yLnZjeHByb2oiPg0KLSAgICAgIDxQcm9qZWN0PntmYmUzMmRm
My0wZmIwLTRmMmYtYTQyNC0yYzIxYmQ3YmMzMjV9PC9Qcm9qZWN0Pg0KLSAgICA8L1Byb2plY3RS
ZWZlcmVuY2U+DQotICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Ii4uXGNvbXBpbGVyXHRy
YW5zbGF0b3IudmN4cHJvaiI+DQotICAgICAgPFByb2plY3Q+ezViM2E2ZGI4LTFlN2UtNDBkNy05
MmI5LWRhOGFhZTYxOWZhZH08L1Byb2plY3Q+DQotICAgIDwvUHJvamVjdFJlZmVyZW5jZT4NCi0g
IDwvSXRlbUdyb3VwPg0KLSAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jv
c29mdC5DcHAudGFyZ2V0cyIgLz4NCi0gIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFy
Z2V0cyI+DQotICA8L0ltcG9ydEdyb3VwPg0KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL2xpYkdMRVN2Mi52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52Y3hwcm9qLmZpbHRlcnMKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGEyMjliYWYxMjRlMWU5ZWY1MzhhMjVmMzM2YzZlZmY1M2E4ZTU1OGUuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmN4cHJvai5maWx0ZXJzCisrKyAv
ZGV2L251bGwKQEAgLTEsNTI3ICswLDAgQEAKLe+7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rp
bmc9InV0Zi04Ij8+DQotPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8v
c2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPg0KLSAgPEl0ZW1H
cm91cD4NCi0gICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXMiPg0KLSAgICAgIDxVbmlx
dWVJZGVudGlmaWVyPns0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9PC9Vbmlx
dWVJZGVudGlmaWVyPg0KLSAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2NjO2N4eDtkZWY7b2RsO2lk
bDtocGo7YmF0O2FzbTthc214PC9FeHRlbnNpb25zPg0KLSAgICA8L0ZpbHRlcj4NCi0gICAgPEZp
bHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXMiPg0KLSAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns5
Mzk5NTM4MC04OUJELTRiMDQtODhFQi02MjVGQkU1MkVCRkJ9PC9VbmlxdWVJZGVudGlmaWVyPg0K
LSAgICAgIDxFeHRlbnNpb25zPmg7aHBwO2h4eDtobTtpbmw7aW5jO3hzZDwvRXh0ZW5zaW9ucz4N
Ci0gICAgPC9GaWx0ZXI+DQotICAgIDxGaWx0ZXIgSW5jbHVkZT0iVGhpcmQgUGFydHkiPg0KLSAg
ICAgIDxVbmlxdWVJZGVudGlmaWVyPntkYzFkYWM0MC0zNTYzLTQxYmUtOWUyZC1jMjU4OGQ4Njcw
ZmJ9PC9VbmlxdWVJZGVudGlmaWVyPg0KLSAgICA8L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJbmNs
dWRlPSJUaGlyZCBQYXJ0eVxNdXJtdXJIYXNoIj4NCi0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57
YjAwMDVkMmYtOWI0YS00NjU5LWEyNzAtMTM4ODExMTc0ZjczfTwvVW5pcXVlSWRlbnRpZmllcj4N
Ci0gICAgPC9GaWx0ZXI+DQotICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzXFJlbmRl
cmVyIj4NCi0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57NTYyZTQ2OWQtMWFiYi00NGJjLWI3ZmEt
NTVlZWZiZjc1YWNjfTwvVW5pcXVlSWRlbnRpZmllcj4NCi0gICAgPC9GaWx0ZXI+DQotICAgIDxG
aWx0ZXIgSW5jbHVkZT0iU2hhZGVycyI+DQotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezZkYzAz
MDZmLTYzOTYtNGU4MC05ZWY5LTA5YjU4YWE1M2M0ZH08L1VuaXF1ZUlkZW50aWZpZXI+DQotICAg
IDwvRmlsdGVyPg0KLSAgICA8RmlsdGVyIEluY2x1ZGU9IlNoYWRlcnNcQ29tcGlsZWQiPg0KLSAg
ICAgIDxVbmlxdWVJZGVudGlmaWVyPns2MzMyNzA1Yi0xOTk5LTQyOTItYTM4Yi1kZDQ3MzI5NzM0
YWF9PC9VbmlxdWVJZGVudGlmaWVyPg0KLSAgICA8L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJbmNs
dWRlPSJTb3VyY2UgRmlsZXNcUmVuZGVyZXIiPg0KLSAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns5
M2E3Njk2NC03N2EzLTRiMjAtYTZmNS1lMTRlNzYyZDRlMTR9PC9VbmlxdWVJZGVudGlmaWVyPg0K
LSAgICA8L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXNcUmVuZGVy
ZXI5Ij4NCi0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57Mzg3N2YzNWUtODQ1Yy00ZTk1LWI5YTUt
YzdkOGI5ZjMwN2M1fTwvVW5pcXVlSWRlbnRpZmllcj4NCi0gICAgPC9GaWx0ZXI+DQotICAgIDxG
aWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzXFJlbmRlcmVyMTEiPg0KLSAgICAgIDxVbmlxdWVJ
ZGVudGlmaWVyPnsyZDcwZmQ2MC02ZGVhLTQ4OWYtYWMwOS0xNjg5MGQzMjU2Njl9PC9VbmlxdWVJ
ZGVudGlmaWVyPg0KLSAgICA8L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2Ug
RmlsZXNcUmVuZGVyZXI5Ij4NCi0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57NjBlMTRmMDQtMmNm
Mi00YTA3LWIzZWYtN2M2OGE4MmJhMmQ5fTwvVW5pcXVlSWRlbnRpZmllcj4NCi0gICAgPC9GaWx0
ZXI+DQotICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzXFJlbmRlcmVyMTEiPg0KLSAg
ICAgIDxVbmlxdWVJZGVudGlmaWVyPns3MmRiNjFkMy1lMDgxLTRiNTgtYmM2My1hMDRhOGE3MDU4
NWZ9PC9VbmlxdWVJZGVudGlmaWVyPg0KLSAgICA8L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJbmNs
dWRlPSJUaGlyZCBQYXJ0eVx0cmFjZV9ldmVudCI+DQotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+
e2ViZmMxNjE0LThmMGItNDhjNy1iNmJkLTI5NWJmOTFlZjg1Y308L1VuaXF1ZUlkZW50aWZpZXI+
DQotICAgIDwvRmlsdGVyPg0KLSAgPC9JdGVtR3JvdXA+DQotICA8SXRlbUdyb3VwPg0KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9IkJ1ZmZlci5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZp
bGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
IkNvbnRleHQuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAg
ICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxjb21tb25cZGVidWcu
Y3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29t
cGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJGZW5jZS5jcHAiPg0KLSAgICAgIDxGaWx0
ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9IkZsb2F0MTZUb0Zsb2F0MzIuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJj
ZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSJGcmFtZWJ1ZmZlci5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0
ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkhhbmRsZUFs
bG9jYXRvci5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAg
IDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImxpYkdMRVN2Mi5jcHAiPg0K
LSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Im1haW4uY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJj
ZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSJQcm9ncmFtLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4N
Ci0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iUHJvZ3JhbUJpbmFy
eS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xD
b21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlF1ZXJ5LmNwcCI+DQotICAgICAgPEZp
bHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cY29tbW9uXFJlZkNvdW50T2JqZWN0LmNwcCI+DQotICAgICAgPEZp
bHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iUmVuZGVyYnVmZmVyLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2Ug
RmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iUmVzb3VyY2VNYW5hZ2VyLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0Zp
bHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iU2hhZGVy
LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENv
bXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iVGV4dHVyZS5jcHAiPg0KLSAgICAgIDxG
aWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9InV0aWxpdGllcy5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZp
bGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
InJlbmRlcmVyXEltYWdlLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVy
ZXI8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
cmVuZGVyZXJcVGV4dHVyZVN0b3JhZ2UuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxl
c1xSZW5kZXJlcjwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSJyZW5kZXJlclxSZW5kZXJlci5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZp
bGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHRoaXJkX3BhcnR5XG11cm11cmhhc2hcTXVybXVySGFzaDMuY3BwIj4NCi0g
ICAgICA8RmlsdGVyPlRoaXJkIFBhcnR5XE11cm11ckhhc2g8L0ZpbHRlcj4NCi0gICAgPC9DbENv
bXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcSW5kZXhEYXRhTWFuYWdl
ci5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQot
ICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFZlcnRl
eERhdGFNYW5hZ2VyLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI8
L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVu
ZGVyZXJcSW1hZ2UuY3BwIj4NCi0gICAgICA8RmlsdGVyPlJlbmRlcmVyPC9GaWx0ZXI+DQotICAg
IDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXEltYWdlU1NF
Mi5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQot
ICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFZlcnRl
eEJ1ZmZlci5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyPC9GaWx0
ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVy
XEluZGV4QnVmZmVyLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI8
L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iVW5p
Zm9ybS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwv
Q2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXEJ1ZmZlclN0b3Jh
Z2UuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjwvRmlsdGVyPg0K
LSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxCdWZm
ZXJTdG9yYWdlMTEuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjEx
PC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJl
bmRlcmVyXEZlbmNlMTEuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJl
cjExPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
InJlbmRlcmVyXEltYWdlMTEuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5k
ZXJlcjExPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9InJlbmRlcmVyXEluZGV4QnVmZmVyMTEuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBG
aWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9InJlbmRlcmVyXFF1ZXJ5MTEuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJj
ZSBGaWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFJlbmRlcmVyMTEuY3BwIj4NCi0gICAgICA8RmlsdGVy
PlNvdXJjZSBGaWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXHJlbmRlcmVyMTFfdXRpbHMuY3BwIj4NCi0g
ICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+DQotICAgIDwvQ2xD
b21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFJlbmRlclRhcmdldDEx
LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPg0K
LSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxTaGFk
ZXJFeGVjdXRhYmxlMTEuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJl
cjExPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
InJlbmRlcmVyXFN3YXBDaGFpbjExLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNc
UmVuZGVyZXIxMTwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSJyZW5kZXJlclxUZXh0dXJlU3RvcmFnZTExLmNwcCI+DQotICAgICAgPEZpbHRlcj5T
b3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxWZXJ0ZXhCdWZmZXIxMS5jcHAiPg0KLSAgICAg
IDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBp
bGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcQnVmZmVyU3RvcmFnZTkuY3Bw
Ij4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4NCi0gICAg
PC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcRmVuY2U5LmNw
cCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAg
IDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXEltYWdlOS5j
cHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPg0KLSAg
ICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxJbmRleEJ1
ZmZlcjkuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRl
cj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJc
UXVlcnk5LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI5PC9GaWx0
ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVy
XFJlbmRlcmVyOS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyOTwv
RmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5k
ZXJlclxyZW5kZXJlcjlfdXRpbHMuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xS
ZW5kZXJlcjk8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0icmVuZGVyZXJcUmVuZGVyVGFyZ2V0OS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNl
IEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSJyZW5kZXJlclxTaGFkZXJFeGVjdXRhYmxlOS5jcHAiPg0KLSAgICAgIDxG
aWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4N
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxTd2FwQ2hhaW45LmNwcCI+DQotICAg
ICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xDb21w
aWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFRleHR1cmVTdG9yYWdlOS5j
cHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPg0KLSAg
ICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxWZXJ0ZXhC
dWZmZXI5LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI5PC9GaWx0
ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVy
XEJsaXQuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRl
cj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJc
SW5wdXRMYXlvdXRDYWNoZS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRl
cmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0icmVuZGVyZXJcUmVuZGVyU3RhdGVDYWNoZS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNl
IEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcVmVydGV4RGVjbGFyYXRpb25DYWNoZS5jcHAiPg0KLSAg
ICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPg0KLSAgICA8L0NsQ29t
cGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJwcmVjb21waWxlZC5jcHAiPg0KLSAgICAg
IDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXEluZGV4UmFuZ2VDYWNoZS5jcHAiPg0KLSAgICAg
IDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxl
Pg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGNvbW1vblxldmVudF90cmFjZXIuY3BwIj4N
Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4N
Ci0gIDwvSXRlbUdyb3VwPg0KLSAgPEl0ZW1Hcm91cD4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSJCaW5hcnlTdHJlYW0uaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4N
Ci0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iQnVmZmVyLmgiPg0K
LSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkNvbnRleHQuaCI+DQotICAgICAgPEZpbHRlcj5IZWFk
ZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iRmVuY2UuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0g
ICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iRnJhbWVidWZmZXIuaCI+
DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+
DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxHTEVTMlxnbDIuaCI+DQot
ICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxHTEVTMlxnbDJleHQuaCI+DQot
ICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxHTEVTMlxnbDJwbGF0Zm9ybS5o
Ij4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVk
ZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJIYW5kbGVBbGxvY2F0b3IuaCI+DQotICAgICAg
PEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0ibWFpbi5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwv
RmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJtYXRo
dXRpbC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0Ns
SW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJQcm9ncmFtLmgiPg0KLSAgICAgIDxG
aWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9IlByb2dyYW1CaW5hcnkuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIg
RmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iUXVlcnkuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAg
PC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cY29tbW9uXFJlZkNvdW50
T2JqZWN0LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwv
Q2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlJlbmRlcmJ1ZmZlci5oIj4NCi0g
ICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZXNvdXJjZS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRl
ciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSJSZXNvdXJjZU1hbmFnZXIuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0Zp
bHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iU2hhZGVy
LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNs
dWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlRleHR1cmUuaCI+DQotICAgICAgPEZpbHRl
cj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0idXRpbGl0aWVzLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9G
aWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGNv
bW1vblx2ZXJzaW9uLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQot
ICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImFuZ2xldHlwZXMuaCI+
DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+
DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cdGhpcmRfcGFydHlcbXVybXVyaGFzaFxNdXJt
dXJIYXNoMy5oIj4NCi0gICAgICA8RmlsdGVyPlRoaXJkIFBhcnR5XE11cm11ckhhc2g8L0ZpbHRl
cj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iVW5pZm9ybS5o
Ij4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVk
ZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVkXHBh
c3N0aHJvdWdoMTF2cy5oIj4NCi0gICAgICA8RmlsdGVyPlNoYWRlcnNcQ29tcGlsZWQ8L0ZpbHRl
cj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJc
c2hhZGVyc1xjb21waWxlZFxwYXNzdGhyb3VnaHBzLmgiPg0KLSAgICAgIDxGaWx0ZXI+U2hhZGVy
c1xDb21waWxlZDwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVkXHN0YW5kYXJkdnMuaCI+DQotICAgICAg
PEZpbHRlcj5TaGFkZXJzXENvbXBpbGVkPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRcY29tcG9uZW50
bWFza3BzLmgiPg0KLSAgICAgIDxGaWx0ZXI+U2hhZGVyc1xDb21waWxlZDwvRmlsdGVyPg0KLSAg
ICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJz
XGNvbXBpbGVkXGZsaXB5dnMuaCI+DQotICAgICAgPEZpbHRlcj5TaGFkZXJzXENvbXBpbGVkPC9G
aWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRl
cmVyXHNoYWRlcnNcY29tcGlsZWRcbHVtaW5hbmNlcHMuaCI+DQotICAgICAgPEZpbHRlcj5TaGFk
ZXJzXENvbXBpbGVkPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9InJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRccGFzc3Rocm91Z2hyZ2JhMTFwcy5o
Ij4NCi0gICAgICA8RmlsdGVyPlNoYWRlcnNcQ29tcGlsZWQ8L0ZpbHRlcj4NCi0gICAgPC9DbElu
Y2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xjb21waWxl
ZFxwYXNzdGhyb3VnaHJnYjExcHMuaCI+DQotICAgICAgPEZpbHRlcj5TaGFkZXJzXENvbXBpbGVk
PC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJl
bmRlcmVyXHNoYWRlcnNcY29tcGlsZWRccGFzc3Rocm91Z2hsdW0xMXBzLmgiPg0KLSAgICAgIDxG
aWx0ZXI+U2hhZGVyc1xDb21waWxlZDwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVkXHBhc3N0aHJvdWdo
bHVtYWxwaGExMXBzLmgiPg0KLSAgICAgIDxGaWx0ZXI+U2hhZGVyc1xDb21waWxlZDwvRmlsdGVy
Pg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxz
aGFkZXJzXGNvbXBpbGVkXGNsZWFyMTF2cy5oIj4NCi0gICAgICA8RmlsdGVyPlNoYWRlcnNcQ29t
cGlsZWQ8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0icmVuZGVyZXJcc2hhZGVyc1xjb21waWxlZFxjbGVhcm11bHRpcGxlMTFwcy5oIj4NCi0gICAg
ICA8RmlsdGVyPlNoYWRlcnNcQ29tcGlsZWQ8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xjb21waWxlZFxjbGVhcnNp
bmdsZTExcHMuaCI+DQotICAgICAgPEZpbHRlcj5TaGFkZXJzXENvbXBpbGVkPC9GaWx0ZXI+DQot
ICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGNvbW1vblxzeXN0
ZW0uaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbElu
Y2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cY29tbW9uXGRlYnVnLmgiPg0KLSAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEJ1ZmZlclN0b3JhZ2UuaCI+DQotICAgICAg
PEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+
DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcRmVuY2VJbXBsLmgiPg0KLSAgICAg
IDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRl
Pg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXGdlbmVyYXRlbWlwLmgiPg0KLSAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNs
dWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEltYWdlLmgiPg0KLSAgICAg
IDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRl
Pg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEluZGV4QnVmZmVyLmgiPg0KLSAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNs
dWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEluZGV4RGF0YU1hbmFnZXIu
aCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI8L0ZpbHRlcj4NCi0gICAg
PC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcUXVlcnlJbXBs
LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAg
IDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFJlbmRlcmVy
LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAg
IDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFJlbmRlclRh
cmdldC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjwvRmlsdGVyPg0K
LSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxTaGFk
ZXJFeGVjdXRhYmxlLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyPC9G
aWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRl
cmVyXFN3YXBDaGFpbi5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjwv
RmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5k
ZXJlclxUZXh0dXJlU3RvcmFnZS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5k
ZXJlcjwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSJyZW5kZXJlclxWZXJ0ZXhCdWZmZXIuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNc
UmVuZGVyZXI8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0icmVuZGVyZXJcdmVydGV4Y29udmVyc2lvbi5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRl
ciBGaWxlc1xSZW5kZXJlcjwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSJyZW5kZXJlclxWZXJ0ZXhEYXRhTWFuYWdlci5oIj4NCi0gICAgICA8Rmls
dGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxCdWZmZXJTdG9yYWdlMTEuaCI+DQotICAg
ICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPg0KLSAgICA8L0NsSW5j
bHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxJbmRleEJ1ZmZlcjExLmgi
Pg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAg
PC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcUXVlcnkxMS5o
Ij4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+DQotICAg
IDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFJlbmRlcmVy
MTEuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPg0K
LSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxSZW5k
ZXJUYXJnZXQxMS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjExPC9G
aWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRl
cmVyXFNoYWRlckV4ZWN1dGFibGUxMS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xS
ZW5kZXJlcjExPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9InJlbmRlcmVyXFN3YXBDaGFpbjExLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZp
bGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0icmVuZGVyZXJcVGV4dHVyZVN0b3JhZ2UxMS5oIj4NCi0gICAgICA8RmlsdGVy
PkhlYWRlciBGaWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFZlcnRleEJ1ZmZlcjExLmgiPg0KLSAgICAg
IDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1
ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcQnVmZmVyU3RvcmFnZTkuaCI+
DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAgIDwv
Q2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEZlbmNlOS5oIj4N
Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4NCi0gICAgPC9D
bEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcSW1hZ2U5LmgiPg0K
LSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPg0KLSAgICA8L0Ns
SW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxJbmRleEJ1ZmZlcjku
aCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAg
IDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFF1ZXJ5OS5o
Ij4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4NCi0gICAg
PC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcUmVuZGVyZXI5
LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPg0KLSAg
ICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxyZW5kZXJl
cjlfdXRpbHMuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0
ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVy
XFJlbmRlclRhcmdldDkuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5
PC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJl
bmRlcmVyXFNoYWRlckV4ZWN1dGFibGU5LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVz
XFJlbmRlcmVyOTwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSJyZW5kZXJlclxTd2FwQ2hhaW45LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZp
bGVzXFJlbmRlcmVyOTwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSJyZW5kZXJlclxUZXh0dXJlU3RvcmFnZTkuaCI+DQotICAgICAgPEZpbHRlcj5I
ZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFZlcnRleEJ1ZmZlcjkuaCI+DQotICAgICAgPEZp
bHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEZlbmNlMTEuaCI+DQotICAgICAgPEZp
bHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxJbWFnZTExLmgiPg0KLSAgICAgIDxG
aWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+
DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJccmVuZGVyZXIxMV91dGlscy5oIj4N
Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+DQotICAgIDwv
Q2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEZlbmNlOS5oIj4N
Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlclxSZW5kZXJlcjk8L0ZpbHRlcj4N
Ci0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcUXVl
cnkxMS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlclxSZW5kZXJlcjEx
PC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJl
bmRlcmVyXEJsaXQuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9G
aWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRl
cmVyXFNoYWRlckNhY2hlLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVy
OTwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJy
ZW5kZXJlclxJbnB1dExheW91dENhY2hlLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVz
XFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0icmVuZGVyZXJcUmVuZGVyU3RhdGVDYWNoZS5oIj4NCi0gICAgICA8RmlsdGVyPkhl
YWRlciBGaWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFZlcnRleERlY2xhcmF0aW9uQ2FjaGUuaCI+DQot
ICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xJ
bmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImNvbnN0YW50cy5oIj4NCi0gICAgICA8
RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSJwcmVjb21waWxlZC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBG
aWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSJyZW5kZXJlclxJbmRleFJhbmdlQ2FjaGUuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmls
ZXNcUmVuZGVyZXI8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cY29tbW9uXGV2ZW50X3RyYWNlci5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRl
ciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlx0aGlyZF9wYXJ0eVx0cmFjZV9ldmVudFx0cmFjZV9ldmVudC5oIj4NCi0gICAgICA8
RmlsdGVyPlRoaXJkIFBhcnR5XHRyYWNlX2V2ZW50PC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRl
Pg0KLSAgPC9JdGVtR3JvdXA+DQotICA8SXRlbUdyb3VwPg0KLSAgICA8Tm9uZSBJbmNsdWRlPSJy
ZW5kZXJlclxzaGFkZXJzXEJsaXQucHMiPg0KLSAgICAgIDxGaWx0ZXI+U2hhZGVyczwvRmlsdGVy
Pg0KLSAgICA8L05vbmU+DQotICAgIDxOb25lIEluY2x1ZGU9InJlbmRlcmVyXHNoYWRlcnNcQmxp
dC52cyI+DQotICAgICAgPEZpbHRlcj5TaGFkZXJzPC9GaWx0ZXI+DQotICAgIDwvTm9uZT4NCi0g
ICAgPE5vbmUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xnZW5lcmF0ZV9zaGFkZXJzLmJhdCI+
DQotICAgICAgPEZpbHRlcj5TaGFkZXJzPC9GaWx0ZXI+DQotICAgIDwvTm9uZT4NCi0gICAgPE5v
bmUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xQYXNzdGhyb3VnaDExLmhsc2wiPg0KLSAgICAg
IDxGaWx0ZXI+U2hhZGVyczwvRmlsdGVyPg0KLSAgICA8L05vbmU+DQotICAgIDxOb25lIEluY2x1
ZGU9InJlbmRlcmVyXHNoYWRlcnNcQ2xlYXIxMS5obHNsIj4NCi0gICAgICA8RmlsdGVyPlNoYWRl
cnM8L0ZpbHRlcj4NCi0gICAgPC9Ob25lPg0KLSAgICA8Tm9uZSBJbmNsdWRlPSJsaWJHTEVTdjIu
ZGVmIiAvPg0KLSAgPC9JdGVtR3JvdXA+DQotICA8SXRlbUdyb3VwPg0KLSAgICA8UmVzb3VyY2VD
b21waWxlIEluY2x1ZGU9ImxpYkdMRVN2Mi5yYyIgLz4NCi0gIDwvSXRlbUdyb3VwPg0KLTwvUHJv
amVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21haW4uY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmNwcAppbmRleCA2ZDdhMjQxMzQwZjllN2I5NDdiMzE3
OTU4OWI2NTMyZWUxMDczYmNjLi41MGUyNTkzMzI4ZDE4OGMxMzFlZGVmZmZhYzFkNjRmNjZlN2Fm
ZDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21h
aW4uY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5j
cHAKQEAgLTEzLDYgKzEzLDQwIEBACiAKIHN0YXRpYyBEV09SRCBjdXJyZW50VExTID0gVExTX09V
VF9PRl9JTkRFWEVTOwogCituYW1lc3BhY2UgZ2wKK3sKKworQ3VycmVudCAqQWxsb2NhdGVDdXJy
ZW50KCkKK3sKKyAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKUxvY2FsQWxsb2MoTFBU
Uiwgc2l6ZW9mKEN1cnJlbnQpKTsKKworICAgIGlmICghY3VycmVudCkKKyAgICB7CisgICAgICAg
IEVSUigiQ291bGQgbm90IGFsbG9jYXRlIHRocmVhZCBsb2NhbCBzdG9yYWdlLiIpOworICAgICAg
ICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBBU1NFUlQoY3VycmVudFRMUyAhPSBUTFNfT1VU
X09GX0lOREVYRVMpOworICAgIFRsc1NldFZhbHVlKGN1cnJlbnRUTFMsIGN1cnJlbnQpOworCisg
ICAgY3VycmVudC0+Y29udGV4dCA9IE5VTEw7CisgICAgY3VycmVudC0+ZGlzcGxheSA9IE5VTEw7
CisKKyAgICByZXR1cm4gY3VycmVudDsKK30KKwordm9pZCBEZWFsbG9jYXRlQ3VycmVudCgpCit7
CisgICAgdm9pZCAqY3VycmVudCA9IFRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworCisgICAgaWYg
KGN1cnJlbnQpCisgICAgeworICAgICAgICBMb2NhbEZyZWUoKEhMT0NBTCljdXJyZW50KTsKKyAg
ICB9Cit9CisKK30KKwogZXh0ZXJuICJDIiBCT09MIFdJTkFQSSBEbGxNYWluKEhJTlNUQU5DRSBp
bnN0YW5jZSwgRFdPUkQgcmVhc29uLCBMUFZPSUQgcmVzZXJ2ZWQpCiB7CiAgICAgc3dpdGNoIChy
ZWFzb24pCkBAIC0yOSwzNiArNjMsMTcgQEAgZXh0ZXJuICJDIiBCT09MIFdJTkFQSSBEbGxNYWlu
KEhJTlNUQU5DRSBpbnN0YW5jZSwgRFdPUkQgcmVhc29uLCBMUFZPSUQgcmVzZXJ2ZWQKICAgICAg
ICAgLy8gRmFsbCB0aHJvdWdodCB0byBpbml0aWFsaXplIGluZGV4CiAgICAgICBjYXNlIERMTF9U
SFJFQURfQVRUQUNIOgogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6Q3VycmVudCAqY3VycmVu
dCA9IChnbDo6Q3VycmVudCopTG9jYWxBbGxvYyhMUFRSLCBzaXplb2YoZ2w6OkN1cnJlbnQpKTsK
LQotICAgICAgICAgICAgaWYgKGN1cnJlbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgVGxzU2V0VmFsdWUoY3VycmVudFRMUywgY3VycmVudCk7Ci0KLSAgICAgICAgICAgICAgICBj
dXJyZW50LT5jb250ZXh0ID0gTlVMTDsKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5kaXNwbGF5
ID0gTlVMTDsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdsOjpBbGxvY2F0ZUN1cnJlbnQo
KTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgRExMX1RIUkVBRF9ERVRB
Q0g6CiAgICAgICAgIHsKLSAgICAgICAgICAgIHZvaWQgKmN1cnJlbnQgPSBUbHNHZXRWYWx1ZShj
dXJyZW50VExTKTsKLQotICAgICAgICAgICAgaWYgKGN1cnJlbnQpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgTG9jYWxGcmVlKChITE9DQUwpY3VycmVudCk7Ci0gICAgICAgICAgICB9
CisgICAgICAgICAgICBnbDo6RGVhbGxvY2F0ZUN1cnJlbnQoKTsKICAgICAgICAgfQogICAgICAg
ICBicmVhazsKICAgICAgIGNhc2UgRExMX1BST0NFU1NfREVUQUNIOgogICAgICAgICB7Ci0gICAg
ICAgICAgICB2b2lkICpjdXJyZW50ID0gVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICAg
ICAgICAgIGlmIChjdXJyZW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIExvY2Fs
RnJlZSgoSExPQ0FMKWN1cnJlbnQpOwotICAgICAgICAgICAgfQotCisgICAgICAgICAgICBnbDo6
RGVhbGxvY2F0ZUN1cnJlbnQoKTsKICAgICAgICAgICAgIFRsc0ZyZWUoY3VycmVudFRMUyk7CiAg
ICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC03MSwxMCArODYsMjAgQEAgZXh0ZXJuICJDIiBC
T09MIFdJTkFQSSBEbGxNYWluKEhJTlNUQU5DRSBpbnN0YW5jZSwgRFdPUkQgcmVhc29uLCBMUFZP
SUQgcmVzZXJ2ZWQKIAogbmFtZXNwYWNlIGdsCiB7Ci12b2lkIG1ha2VDdXJyZW50KENvbnRleHQg
KmNvbnRleHQsIGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKQor
CitDdXJyZW50ICpHZXRDdXJyZW50RGF0YSgpCiB7CiAgICAgQ3VycmVudCAqY3VycmVudCA9IChD
dXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKIAorICAgIC8vIEFOR0xFIGlzc3VlIDQ4
ODogd2hlbiB0aGUgZGxsIGlzIGxvYWRlZCBhZnRlciB0aHJlYWQgaW5pdGlhbGl6YXRpb24sCisg
ICAgLy8gdGhyZWFkIGxvY2FsIHN0b3JhZ2UgKGN1cnJlbnQpIG1pZ2h0IG5vdCBleGlzdCB5ZXQu
CisgICAgcmV0dXJuIChjdXJyZW50ID8gY3VycmVudCA6IEFsbG9jYXRlQ3VycmVudCgpKTsKK30K
Kwordm9pZCBtYWtlQ3VycmVudChDb250ZXh0ICpjb250ZXh0LCBlZ2w6OkRpc3BsYXkgKmRpc3Bs
YXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkKK3sKKyAgICBDdXJyZW50ICpjdXJyZW50ID0gR2V0
Q3VycmVudERhdGEoKTsKKwogICAgIGN1cnJlbnQtPmNvbnRleHQgPSBjb250ZXh0OwogICAgIGN1
cnJlbnQtPmRpc3BsYXkgPSBkaXNwbGF5OwogCkBAIC04Niw3ICsxMTEsNyBAQCB2b2lkIG1ha2VD
dXJyZW50KENvbnRleHQgKmNvbnRleHQsIGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZWdsOjpTdXJm
YWNlICpzdXJmYWNlKQogCiBDb250ZXh0ICpnZXRDb250ZXh0KCkKIHsKLSAgICBDdXJyZW50ICpj
dXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworICAgIEN1cnJlbnQg
KmN1cnJlbnQgPSBHZXRDdXJyZW50RGF0YSgpOwogCiAgICAgcmV0dXJuIGN1cnJlbnQtPmNvbnRl
eHQ7CiB9CkBAIC0xMTIsNyArMTM3LDcgQEAgQ29udGV4dCAqZ2V0Tm9uTG9zdENvbnRleHQoKQog
CiBlZ2w6OkRpc3BsYXkgKmdldERpc3BsYXkoKQogewotICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAo
Q3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisgICAgQ3VycmVudCAqY3VycmVudCA9
IEdldEN1cnJlbnREYXRhKCk7CiAKICAgICByZXR1cm4gY3VycmVudC0+ZGlzcGxheTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmgKaW5kZXggMTk2YWZh
ZWFiNjdlNzQyZjc5MjNkOTFkYjA1NjMxY2U5ZDkzZTBkZC4uYjQxM2YyMzIwYzE1MWZkNzIwYTNm
ZjM4ZGI0YWRmNjA1MmZiYmY4NiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9tYWluLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9tYWluLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNkZWZpbmUgTElCR0xFU1YyX01BSU5f
SF8KIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgotI2luY2x1ZGUgImNvbW1vbi9zeXN0ZW0u
aCIKIAogbmFtZXNwYWNlIGVnbAogewpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9tYXRodXRpbC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9tYXRodXRpbC5oCmluZGV4IGJiNDhiOTRlYWY3MWE0OWQwNTMxMmMxMzliNGU1
NzcyYmJiOGExZTguLmY5MDIxMzFhMzUyMjFiZjYwZjc3MjAyZDk5YWMwYjhkYTYxODEyYmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWF0aHV0aWwu
aAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21hdGh1dGlsLmgK
QEAgLTExLDcgKzExLDYgQEAKIAogI2luY2x1ZGUgPGludHJpbi5oPgogCi0jaW5jbHVkZSAiY29t
bW9uL3N5c3RlbS5oIgogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgogCiBuYW1lc3BhY2UgZ2wK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcHJlY29t
cGlsZWQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcHJlY29tcGls
ZWQuaAppbmRleCA1OGFkMTgxODc0YjMyZmE1YzMzNGYzNjFhNDc2Njk3ZDMwNmQzMjRlLi40Yjlh
Y2M3OTlkYzFmMzViZDQ2Y2Q0ZThmODRhMzM1MjllNWQzZWMyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3ByZWNvbXBpbGVkLmgKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9wcmVjb21waWxlZC5oCkBAIC0zNSw2ICsz
NSw3IEBACiAjaW5jbHVkZSA8ZDNkOS5oPgogI2luY2x1ZGUgPGQzZDExLmg+CiAjaW5jbHVkZSA8
ZHhnaS5oPgorI2luY2x1ZGUgPGR4Z2kxXzIuaD4KICNpbmNsdWRlIDxkM2Rjb21waWxlci5oPgog
CiAjaWZkZWYgX01TQ19WRVIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvQmxpdC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL0JsaXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAyYTNjZTM5YzYzMjRiMDgyNDI2YzkyNmE3NWJmMDU5YTg3YTVkOWQyLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQmxpdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1
OTUgKzAsMCBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwot
Ci0vLyBCbGl0LmNwcDogU3VyZmFjZSBjb3B5IHV0aWxpdHkgY2xhc3MuCi0KLSNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvQmxpdC5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIK
LSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXI5X3V0aWxzLmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlOS5oIgotI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQ5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL1JlbmRlcmVyOS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCIKLQotbmFtZXNwYWNlCi17Ci0jaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvc3RhbmRhcmR2cy5oIgotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL2ZsaXB5dnMuaCIKLSNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHBz
LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvbHVtaW5h
bmNlcHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9j
b21wb25lbnRtYXNrcHMuaCIKLQotY29uc3QgQllURSogY29uc3QgZ19zaGFkZXJDb2RlW10gPQot
ewotICAgIGdfdnMyMF9zdGFuZGFyZHZzLAotICAgIGdfdnMyMF9mbGlweXZzLAotICAgIGdfcHMy
MF9wYXNzdGhyb3VnaHBzLAotICAgIGdfcHMyMF9sdW1pbmFuY2VwcywKLSAgICBnX3BzMjBfY29t
cG9uZW50bWFza3BzCi19OwotCi1jb25zdCBzaXplX3QgZ19zaGFkZXJTaXplW10gPQotewotICAg
IHNpemVvZihnX3ZzMjBfc3RhbmRhcmR2cyksCi0gICAgc2l6ZW9mKGdfdnMyMF9mbGlweXZzKSwK
LSAgICBzaXplb2YoZ19wczIwX3Bhc3N0aHJvdWdocHMpLAotICAgIHNpemVvZihnX3BzMjBfbHVt
aW5hbmNlcHMpLAotICAgIHNpemVvZihnX3BzMjBfY29tcG9uZW50bWFza3BzKQotfTsKLX0KLQot
bmFtZXNwYWNlIHJ4Ci17Ci1CbGl0OjpCbGl0KHJ4OjpSZW5kZXJlcjkgKnJlbmRlcmVyKQotICA6
IG1SZW5kZXJlcihyZW5kZXJlciksIG1RdWFkVmVydGV4QnVmZmVyKE5VTEwpLCBtUXVhZFZlcnRl
eERlY2xhcmF0aW9uKE5VTEwpLCBtU2F2ZWRTdGF0ZUJsb2NrKE5VTEwpLCBtU2F2ZWRSZW5kZXJU
YXJnZXQoTlVMTCksIG1TYXZlZERlcHRoU3RlbmNpbChOVUxMKQotewotICAgIGluaXRHZW9tZXRy
eSgpOwotICAgIG1lbXNldChtQ29tcGlsZWRTaGFkZXJzLCAwLCBzaXplb2YobUNvbXBpbGVkU2hh
ZGVycykpOwotfQotCi1CbGl0Ojp+QmxpdCgpCi17Ci0gICAgaWYgKG1TYXZlZFN0YXRlQmxvY2sp
IG1TYXZlZFN0YXRlQmxvY2stPlJlbGVhc2UoKTsKLSAgICBpZiAobVF1YWRWZXJ0ZXhCdWZmZXIp
IG1RdWFkVmVydGV4QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgaWYgKG1RdWFkVmVydGV4RGVjbGFy
YXRpb24pIG1RdWFkVmVydGV4RGVjbGFyYXRpb24tPlJlbGVhc2UoKTsKLQotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgU0hBREVSX0NPVU5UOyBpKyspCi0gICAgewotICAgICAgICBpZiAobUNvbXBp
bGVkU2hhZGVyc1tpXSkKLSAgICAgICAgewotICAgICAgICAgICAgbUNvbXBpbGVkU2hhZGVyc1tp
XS0+UmVsZWFzZSgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEJsaXQ6OmluaXRHZW9t
ZXRyeSgpCi17Ci0gICAgc3RhdGljIGNvbnN0IGZsb2F0IHF1YWRbXSA9Ci0gICAgewotICAgICAg
ICAtMSwgLTEsCi0gICAgICAgIC0xLCAgMSwKLSAgICAgICAgIDEsIC0xLAotICAgICAgICAgMSwg
IDEKLSAgICB9OwotCi0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5n
ZXREZXZpY2UoKTsKLQotICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVWZXJ0ZXhC
dWZmZXIoc2l6ZW9mKHF1YWQpLCBEM0RVU0FHRV9XUklURU9OTFksIDAsIEQzRFBPT0xfREVGQVVM
VCwgJm1RdWFkVmVydGV4QnVmZmVyLCBOVUxMKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkg
fHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAgIHZvaWQgKmxvY2tQdHIgPSBOVUxMOwotICAg
IHJlc3VsdCA9IG1RdWFkVmVydGV4QnVmZmVyLT5Mb2NrKDAsIDAsICZsb2NrUHRyLCAwKTsKLQot
ICAgIGlmIChGQUlMRUQocmVzdWx0KSB8fCBsb2NrUHRyID09IE5VTEwpCi0gICAgewotICAgICAg
ICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBF
X09VVE9GTUVNT1JZKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLSAgICB9Ci0KLSAgICBtZW1jcHkobG9ja1B0ciwgcXVhZCwgc2l6ZW9mKHF1YWQpKTsKLSAg
ICBtUXVhZFZlcnRleEJ1ZmZlci0+VW5sb2NrKCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgRDNEVkVS
VEVYRUxFTUVOVDkgZWxlbWVudHNbXSA9Ci0gICAgewotICAgICAgICB7IDAsIDAsIEQzRERFQ0xU
WVBFX0ZMT0FUMiwgRDNEREVDTE1FVEhPRF9ERUZBVUxULCBEM0RERUNMVVNBR0VfUE9TSVRJT04s
IDAgfSwKLSAgICAgICAgRDNEREVDTF9FTkQoKQotICAgIH07Ci0KLSAgICByZXN1bHQgPSBkZXZp
Y2UtPkNyZWF0ZVZlcnRleERlY2xhcmF0aW9uKGVsZW1lbnRzLCAmbVF1YWRWZXJ0ZXhEZWNsYXJh
dGlvbik7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBBU1NFUlQo
cmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVN
T1JZKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9
Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBEM0RTaGFkZXJUeXBlPgotYm9vbCBCbGl0OjpzZXRTaGFk
ZXIoU2hhZGVySWQgc291cmNlLCBjb25zdCBjaGFyICpwcm9maWxlLAotICAgICAgICAgICAgICAg
ICAgICAgRDNEU2hhZGVyVHlwZSAqKHJ4OjpSZW5kZXJlcjk6OipjcmVhdGVTaGFkZXIpKGNvbnN0
IERXT1JEICosIHNpemVfdCBsZW5ndGgpLAotICAgICAgICAgICAgICAgICAgICAgSFJFU1VMVCAo
V0lOQVBJIElEaXJlY3QzRERldmljZTk6OipzZXRTaGFkZXIpKEQzRFNoYWRlclR5cGUqKSkKLXsK
LSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwot
Ci0gICAgRDNEU2hhZGVyVHlwZSAqc2hhZGVyOwotCi0gICAgaWYgKG1Db21waWxlZFNoYWRlcnNb
c291cmNlXSAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgc2hhZGVyID0gc3RhdGljX2Nhc3Q8RDNE
U2hhZGVyVHlwZSo+KG1Db21waWxlZFNoYWRlcnNbc291cmNlXSk7Ci0gICAgfQotICAgIGVsc2UK
LSAgICB7Ci0gICAgICAgIGNvbnN0IEJZVEUqIHNoYWRlckNvZGUgPSBnX3NoYWRlckNvZGVbc291
cmNlXTsKLSAgICAgICAgc2l6ZV90IHNoYWRlclNpemUgPSBnX3NoYWRlclNpemVbc291cmNlXTsK
LQotICAgICAgICBzaGFkZXIgPSAobVJlbmRlcmVyLT4qY3JlYXRlU2hhZGVyKShyZWludGVycHJl
dF9jYXN0PGNvbnN0IERXT1JEKj4oc2hhZGVyQ29kZSksIHNoYWRlclNpemUpOwotICAgICAgICBp
ZiAoIXNoYWRlcikKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gY3JlYXRl
IHNoYWRlciBmb3IgYmxpdCBvcGVyYXRpb24iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotCi0gICAgICAgIG1Db21waWxlZFNoYWRlcnNbc291cmNlXSA9IHNoYWRlcjsK
LSAgICB9Ci0KLSAgICBIUkVTVUxUIGhyID0gKGRldmljZS0+KnNldFNoYWRlcikoc2hhZGVyKTsK
LQotICAgIGlmIChGQUlMRUQoaHIpKQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gc2V0
IHNoYWRlciBmb3IgYmxpdCBvcGVyYXRpb24iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEJsaXQ6OnNldFZlcnRleFNoYWRlcihT
aGFkZXJJZCBzaGFkZXIpCi17Ci0gICAgcmV0dXJuIHNldFNoYWRlcjxJRGlyZWN0M0RWZXJ0ZXhT
aGFkZXI5PihzaGFkZXIsICJ2c18yXzAiLCAmcng6OlJlbmRlcmVyOTo6Y3JlYXRlVmVydGV4U2hh
ZGVyLCAmSURpcmVjdDNERGV2aWNlOTo6U2V0VmVydGV4U2hhZGVyKTsKLX0KLQotYm9vbCBCbGl0
OjpzZXRQaXhlbFNoYWRlcihTaGFkZXJJZCBzaGFkZXIpCi17Ci0gICAgcmV0dXJuIHNldFNoYWRl
cjxJRGlyZWN0M0RQaXhlbFNoYWRlcjk+KHNoYWRlciwgInBzXzJfMCIsICZyeDo6UmVuZGVyZXI5
OjpjcmVhdGVQaXhlbFNoYWRlciwgJklEaXJlY3QzRERldmljZTk6OlNldFBpeGVsU2hhZGVyKTsK
LX0KLQotUkVDVCBCbGl0OjpnZXRTdXJmYWNlUmVjdChJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFj
ZSkgY29uc3QKLXsKLSAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKLSAgICBzdXJmYWNlLT5HZXRE
ZXNjKCZkZXNjKTsKLQotICAgIFJFQ1QgcmVjdDsKLSAgICByZWN0LmxlZnQgPSAwOwotICAgIHJl
Y3QudG9wID0gMDsKLSAgICByZWN0LnJpZ2h0ID0gZGVzYy5XaWR0aDsKLSAgICByZWN0LmJvdHRv
bSA9IGRlc2MuSGVpZ2h0OwotCi0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLWJvb2wgQmxpdDo6Ym94
RmlsdGVyKElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0
KQotewotICAgIElEaXJlY3QzRFRleHR1cmU5ICp0ZXh0dXJlID0gY29weVN1cmZhY2VUb1RleHR1
cmUoc291cmNlLCBnZXRTdXJmYWNlUmVjdChzb3VyY2UpKTsKLSAgICBpZiAoIXRleHR1cmUpCi0g
ICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgSURpcmVjdDNERGV2aWNl
OSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLQotICAgIHNhdmVTdGF0ZSgpOwot
Ci0gICAgZGV2aWNlLT5TZXRUZXh0dXJlKDAsIHRleHR1cmUpOwotICAgIGRldmljZS0+U2V0UmVu
ZGVyVGFyZ2V0KDAsIGRlc3QpOwotCi0gICAgc2V0VmVydGV4U2hhZGVyKFNIQURFUl9WU19TVEFO
REFSRCk7Ci0gICAgc2V0UGl4ZWxTaGFkZXIoU0hBREVSX1BTX1BBU1NUSFJPVUdIKTsKLQotICAg
IHNldENvbW1vbkJsaXRTdGF0ZSgpOwotICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQz
RFNBTVBfTUlORklMVEVSLCBEM0RURVhGX0xJTkVBUik7Ci0gICAgZGV2aWNlLT5TZXRTYW1wbGVy
U3RhdGUoMCwgRDNEU0FNUF9NQUdGSUxURVIsIEQzRFRFWEZfTElORUFSKTsKLQotICAgIHNldFZp
ZXdwb3J0KGdldFN1cmZhY2VSZWN0KGRlc3QpLCAwLCAwKTsKLQotICAgIHJlbmRlcigpOwotCi0g
ICAgdGV4dHVyZS0+UmVsZWFzZSgpOwotCi0gICAgcmVzdG9yZVN0YXRlKCk7Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBCbGl0Ojpjb3B5KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZm
ZXIsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBH
TGludCBsZXZlbCkKLXsKLSAgICBSZW5kZXJUYXJnZXQ5ICpyZW5kZXJUYXJnZXQgPSBOVUxMOwot
ICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UgPSBOVUxMOwotICAgIGdsOjpSZW5kZXJidWZm
ZXIgKmNvbG9yYnVmZmVyID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKDApOwotCi0gICAg
aWYgKGNvbG9yYnVmZmVyKQotICAgIHsKLSAgICAgICAgcmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFy
Z2V0OTo6bWFrZVJlbmRlclRhcmdldDkoY29sb3JidWZmZXItPmdldFJlbmRlclRhcmdldCgpKTsK
LSAgICB9Ci0gICAgCi0gICAgaWYgKHJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIHNvdXJj
ZSA9IHJlbmRlclRhcmdldC0+Z2V0U3VyZmFjZSgpOwotICAgIH0KLQotICAgIGlmICghc291cmNl
KQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJn
ZXQuIik7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2Up
OwotICAgIH0KLQotICAgIFRleHR1cmVTdG9yYWdlOV8yRCAqc3RvcmFnZTkgPSBUZXh0dXJlU3Rv
cmFnZTlfMkQ6Om1ha2VUZXh0dXJlU3RvcmFnZTlfMkQoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3Rh
bmNlKCkpOwotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0U3VyZmFjZSA9IHN0b3JhZ2U5LT5n
ZXRTdXJmYWNlTGV2ZWwobGV2ZWwsIHRydWUpOwotICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0g
ICAgICAgIAotICAgIGlmIChkZXN0U3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIHJlc3VsdCA9IGNv
cHkoc291cmNlLCBzb3VyY2VSZWN0LCBkZXN0Rm9ybWF0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBkZXN0
U3VyZmFjZSk7Ci0gICAgICAgIGRlc3RTdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgfQotCi0gICAg
c291cmNlLT5SZWxlYXNlKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBCbGl0Ojpj
b3B5KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3Qs
IEdMZW51bSBkZXN0Rm9ybWF0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJl
U3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
KQotewotICAgIFJlbmRlclRhcmdldDkgKnJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgSURpcmVj
dDNEU3VyZmFjZTkgKnNvdXJjZSA9IE5VTEw7Ci0gICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3Ji
dWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoMCk7Ci0KLSAgICBpZiAoY29sb3Ji
dWZmZXIpCi0gICAgewotICAgICAgICByZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQ5OjptYWtl
UmVuZGVyVGFyZ2V0OShjb2xvcmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOwotICAgIH0KLSAg
ICAKLSAgICBpZiAocmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVuZGVy
VGFyZ2V0LT5nZXRTdXJmYWNlKCk7Ci0gICAgfQotCi0gICAgaWYgKCFzb3VyY2UpCi0gICAgewot
ICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldC4iKTsKLSAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7Ci0gICAgfQot
Ci0gICAgVGV4dHVyZVN0b3JhZ2U5X0N1YmUgKnN0b3JhZ2U5ID0gVGV4dHVyZVN0b3JhZ2U5X0N1
YmU6Om1ha2VUZXh0dXJlU3RvcmFnZTlfQ3ViZShzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2Uo
KSk7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJmYWNlID0gc3RvcmFnZTktPmdldEN1
YmVNYXBTdXJmYWNlKHRhcmdldCwgbGV2ZWwsIHRydWUpOwotICAgIGJvb2wgcmVzdWx0ID0gZmFs
c2U7Ci0KLSAgICBpZiAoZGVzdFN1cmZhY2UpCi0gICAgewotICAgICAgICByZXN1bHQgPSBjb3B5
KHNvdXJjZSwgc291cmNlUmVjdCwgZGVzdEZvcm1hdCwgeG9mZnNldCwgeW9mZnNldCwgZGVzdFN1
cmZhY2UpOwotICAgICAgICBkZXN0U3VyZmFjZS0+UmVsZWFzZSgpOwotICAgIH0KLQotICAgIHNv
dXJjZS0+UmVsZWFzZSgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgQmxpdDo6Y29w
eShJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBjb25zdCBSRUNUICZzb3VyY2VSZWN0LCBHTGVu
dW0gZGVzdEZvcm1hdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgSURpcmVjdDNEU3Vy
ZmFjZTkgKmRlc3QpCi17Ci0gICAgaWYgKCFkZXN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+
Z2V0RGV2aWNlKCk7Ci0KLSAgICBEM0RTVVJGQUNFX0RFU0Mgc291cmNlRGVzYzsKLSAgICBEM0RT
VVJGQUNFX0RFU0MgZGVzdERlc2M7Ci0gICAgc291cmNlLT5HZXREZXNjKCZzb3VyY2VEZXNjKTsK
LSAgICBkZXN0LT5HZXREZXNjKCZkZXN0RGVzYyk7Ci0KLSAgICBpZiAoc291cmNlRGVzYy5Gb3Jt
YXQgPT0gZGVzdERlc2MuRm9ybWF0ICYmIGRlc3REZXNjLlVzYWdlICYgRDNEVVNBR0VfUkVOREVS
VEFSR0VUICYmCi0gICAgICAgIGQzZDlfZ2w6OklzRm9ybWF0Q2hhbm5lbEVxdWl2YWxlbnQoZGVz
dERlc2MuRm9ybWF0LCBkZXN0Rm9ybWF0KSkgICAvLyBDYW4gdXNlIFN0cmV0Y2hSZWN0Ci0gICAg
ewotICAgICAgICBSRUNUIGRlc3RSZWN0ID0ge3hvZmZzZXQsIHlvZmZzZXQsIHhvZmZzZXQgKyAo
c291cmNlUmVjdC5yaWdodCAtIHNvdXJjZVJlY3QubGVmdCksIHlvZmZzZXQgKyAoc291cmNlUmVj
dC5ib3R0b20gLSBzb3VyY2VSZWN0LnRvcCl9OwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRl
dmljZS0+U3RyZXRjaFJlY3Qoc291cmNlLCAmc291cmNlUmVjdCwgZGVzdCwgJmRlc3RSZWN0LCBE
M0RURVhGX1BPSU5UKTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwg
cmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGZvcm1hdENvbnZlcnQoc291cmNlLCBzb3VyY2VSZWN0LCBkZXN0
Rm9ybWF0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBkZXN0KTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgQmxpdDo6Zm9ybWF0Q29udmVydChJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNl
LCBjb25zdCBSRUNUICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpCi17Ci0gICAgSURpcmVj
dDNEVGV4dHVyZTkgKnRleHR1cmUgPSBjb3B5U3VyZmFjZVRvVGV4dHVyZShzb3VyY2UsIHNvdXJj
ZVJlY3QpOwotICAgIGlmICghdGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERl
dmljZSgpOwotCi0gICAgc2F2ZVN0YXRlKCk7Ci0KLSAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwg
dGV4dHVyZSk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgZGVzdCk7Ci0KLSAgICBz
ZXRWaWV3cG9ydChzb3VyY2VSZWN0LCB4b2Zmc2V0LCB5b2Zmc2V0KTsKLQotICAgIHNldENvbW1v
bkJsaXRTdGF0ZSgpOwotICAgIGlmIChzZXRGb3JtYXRDb252ZXJ0U2hhZGVycyhkZXN0Rm9ybWF0
KSkKLSAgICB7Ci0gICAgICAgIHJlbmRlcigpOwotICAgIH0KLQotICAgIHRleHR1cmUtPlJlbGVh
c2UoKTsKLQotICAgIHJlc3RvcmVTdGF0ZSgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgQmxpdDo6c2V0Rm9ybWF0Q29udmVydFNoYWRlcnMoR0xlbnVtIGRlc3RGb3JtYXQpCi17Ci0g
ICAgYm9vbCBva2F5ID0gc2V0VmVydGV4U2hhZGVyKFNIQURFUl9WU19TVEFOREFSRCk7Ci0KLSAg
ICBzd2l0Y2ggKGRlc3RGb3JtYXQpCi0gICAgewotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKLSAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICBj
YXNlIEdMX1JHQjoKLSAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgIG9rYXkgPSBva2F5ICYm
IHNldFBpeGVsU2hhZGVyKFNIQURFUl9QU19DT01QT05FTlRNQVNLKTsKLSAgICAgICAgYnJlYWs7
Ci0KLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQ
SEE6Ci0gICAgICAgIG9rYXkgPSBva2F5ICYmIHNldFBpeGVsU2hhZGVyKFNIQURFUl9QU19MVU1J
TkFOQ0UpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoIW9rYXkpCi0gICAgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZW51bSB7IFggPSAwLCBZID0gMSwg
WiA9IDIsIFcgPSAzIH07Ci0KLSAgICAvLyBUaGUgbWVhbmluZyBvZiB0aGlzIGNvbnN0YW50IGRl
cGVuZHMgb24gdGhlIHNoYWRlciB0aGF0IHdhcyBzZWxlY3RlZC4KLSAgICAvLyBTZWUgdGhlIHNo
YWRlciBhc3NlbWJseSBjb2RlIGFib3ZlIGZvciBkZXRhaWxzLgotICAgIGZsb2F0IHBzQ29uc3Qw
WzRdID0geyAwLCAwLCAwLCAwIH07Ci0KLSAgICBzd2l0Y2ggKGRlc3RGb3JtYXQpCi0gICAgewot
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAg
IGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICAgIHBzQ29uc3QwW1hdID0gMTsKLSAgICAgICAgcHND
b25zdDBbWl0gPSAxOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBHTF9SR0I6Ci0gICAg
ICAgIHBzQ29uc3QwW1hdID0gMTsKLSAgICAgICAgcHNDb25zdDBbV10gPSAxOwotICAgICAgICBi
cmVhazsKLQotICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgcHNDb25zdDBbWl0gPSAxOwot
ICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgIHBzQ29u
c3QwW1ldID0gMTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FM
UEhBOgotICAgICAgICBwc0NvbnN0MFtYXSA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQot
ICAgIG1SZW5kZXJlci0+Z2V0RGV2aWNlKCktPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKDAsIHBz
Q29uc3QwLCAxKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1JRGlyZWN0M0RUZXh0dXJlOSAq
QmxpdDo6Y29weVN1cmZhY2VUb1RleHR1cmUoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UsIGNv
bnN0IFJFQ1QgJnNvdXJjZVJlY3QpCi17Ci0gICAgaWYgKCFzdXJmYWNlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0g
bVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLQotICAgIEQzRFNVUkZBQ0VfREVTQyBzb3VyY2VEZXNj
OwotICAgIHN1cmZhY2UtPkdldERlc2MoJnNvdXJjZURlc2MpOwotCi0gICAgLy8gQ29weSB0aGUg
cmVuZGVyIHRhcmdldCBpbnRvIGEgdGV4dHVyZQotICAgIElEaXJlY3QzRFRleHR1cmU5ICp0ZXh0
dXJlOwotICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKHNvdXJjZVJl
Y3QucmlnaHQgLSBzb3VyY2VSZWN0LmxlZnQsIHNvdXJjZVJlY3QuYm90dG9tIC0gc291cmNlUmVj
dC50b3AsIDEsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgc291cmNlRGVzYy5Gb3JtYXQsIEQzRFBP
T0xfREVGQVVMVCwgJnRleHR1cmUsIE5VTEwpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8
fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgKElEaXJlY3QzRFRleHR1cmU5KilOVUxMKTsKLSAgICB9Ci0KLSAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqdGV4dHVyZVN1cmZhY2U7Ci0gICAgcmVzdWx0ID0gdGV4dHVyZS0+
R2V0U3VyZmFjZUxldmVsKDAsICZ0ZXh0dXJlU3VyZmFjZSk7Ci0KLSAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCi0gICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVP
TUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgdGV4dHVyZS0+UmVs
ZWFzZSgpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIChJRGly
ZWN0M0RUZXh0dXJlOSopTlVMTCk7Ci0gICAgfQotCi0gICAgbVJlbmRlcmVyLT5lbmRTY2VuZSgp
OwotICAgIHJlc3VsdCA9IGRldmljZS0+U3RyZXRjaFJlY3Qoc3VyZmFjZSwgJnNvdXJjZVJlY3Qs
IHRleHR1cmVTdXJmYWNlLCBOVUxMLCBEM0RURVhGX05PTkUpOwotCi0gICAgdGV4dHVyZVN1cmZh
Y2UtPlJlbGVhc2UoKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVf
T1VUT0ZNRU1PUlkpOwotICAgICAgICB0ZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgKElEaXJlY3QzRFRleHR1cmU5KilOVUxMKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gdGV4dHVyZTsKLX0KLQotdm9pZCBCbGl0OjpzZXRWaWV3cG9y
dChjb25zdCBSRUNUICZzb3VyY2VSZWN0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0KQot
ewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7
Ci0KLSAgICBEM0RWSUVXUE9SVDkgdnA7Ci0gICAgdnAuWCAgICAgID0geG9mZnNldDsKLSAgICB2
cC5ZICAgICAgPSB5b2Zmc2V0OwotICAgIHZwLldpZHRoICA9IHNvdXJjZVJlY3QucmlnaHQgLSBz
b3VyY2VSZWN0LmxlZnQ7Ci0gICAgdnAuSGVpZ2h0ID0gc291cmNlUmVjdC5ib3R0b20gLSBzb3Vy
Y2VSZWN0LnRvcDsKLSAgICB2cC5NaW5aICAgPSAwLjBmOwotICAgIHZwLk1heFogICA9IDEuMGY7
Ci0gICAgZGV2aWNlLT5TZXRWaWV3cG9ydCgmdnApOwotCi0gICAgZmxvYXQgaGFsZlBpeGVsQWRq
dXN0WzRdID0geyAtMS4wZi92cC5XaWR0aCwgMS4wZi92cC5IZWlnaHQsIDAsIDAgfTsKLSAgICBk
ZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50RigwLCBoYWxmUGl4ZWxBZGp1c3QsIDEpOwot
fQotCi12b2lkIEJsaXQ6OnNldENvbW1vbkJsaXRTdGF0ZSgpCi17Ci0gICAgSURpcmVjdDNERGV2
aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLQotICAgIGRldmljZS0+U2V0
RGVwdGhTdGVuY2lsU3VyZmFjZShOVUxMKTsKLQotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfRklMTE1PREUsIEQzREZJTExfU09MSUQpOwotICAgIGRldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfQUxQSEFURVNURU5BQkxFLCBGQUxTRSk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7Ci0gICAgZGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsKLSAgICBkZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0NMSVBQTEFORUVOQUJMRSwgMCk7Ci0gICAgZGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCBEM0RDT0xPUldSSVRFRU5BQkxFX0FMUEhB
IHwgRDNEQ09MT1JXUklURUVOQUJMRV9CTFVFIHwgRDNEQ09MT1JXUklURUVOQUJMRV9HUkVFTiB8
IEQzRENPTE9SV1JJVEVFTkFCTEVfUkVEKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX1NSR0JXUklURUVOQUJMRSwgRkFMU0UpOwotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfU0NJU1NPUlRFU1RFTkFCTEUsIEZBTFNFKTsKLQotICAgIGRldmljZS0+U2V0U2FtcGxl
clN0YXRlKDAsIEQzRFNBTVBfTUFHRklMVEVSLCBEM0RURVhGX1BPSU5UKTsKLSAgICBkZXZpY2Ut
PlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01JTkZJTFRFUiwgRDNEVEVYRl9QT0lOVCk7Ci0g
ICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9TUkdCVEVYVFVSRSwgRkFMU0Up
OwotICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfQUREUkVTU1UsIEQzRFRB
RERSRVNTX0NMQU1QKTsKLSAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX0FE
RFJFU1NWLCBEM0RUQUREUkVTU19DTEFNUCk7Ci0KLSAgICBSRUNUIHNjaXNzb3JSZWN0ID0gezB9
OyAgIC8vIFNjaXNzb3JpbmcgaXMgZGlzYWJsZWQgZm9yIGZsaXBwaW5nLCBidXQgd2UgbmVlZCB0
aGlzIHRvIGNhcHR1cmUgYW5kIHJlc3RvcmUgdGhlIG9sZCByZWN0YW5nbGUKLSAgICBkZXZpY2Ut
PlNldFNjaXNzb3JSZWN0KCZzY2lzc29yUmVjdCk7Ci0KLSAgICBmb3IoaW50IGkgPSAwOyBpIDwg
Z2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAgICAgICAgZGV2aWNlLT5TZXRT
dHJlYW1Tb3VyY2VGcmVxKGksIDEpOwotICAgIH0KLX0KLQotdm9pZCBCbGl0OjpyZW5kZXIoKQot
ewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7
Ci0KLSAgICBIUkVTVUxUIGhyID0gZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2UoMCwgbVF1YWRWZXJ0
ZXhCdWZmZXIsIDAsIDIgKiBzaXplb2YoZmxvYXQpKTsKLSAgICBociA9IGRldmljZS0+U2V0VmVy
dGV4RGVjbGFyYXRpb24obVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbik7Ci0KLSAgICBtUmVuZGVyZXIt
PnN0YXJ0U2NlbmUoKTsKLSAgICBociA9IGRldmljZS0+RHJhd1ByaW1pdGl2ZShEM0RQVF9UUklB
TkdMRVNUUklQLCAwLCAyKTsKLX0KLQotdm9pZCBCbGl0OjpzYXZlU3RhdGUoKQotewotICAgIElE
aXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0KLSAgICBI
UkVTVUxUIGhyOwotCi0gICAgZGV2aWNlLT5HZXREZXB0aFN0ZW5jaWxTdXJmYWNlKCZtU2F2ZWRE
ZXB0aFN0ZW5jaWwpOwotICAgIGRldmljZS0+R2V0UmVuZGVyVGFyZ2V0KDAsICZtU2F2ZWRSZW5k
ZXJUYXJnZXQpOwotCi0gICAgaWYgKG1TYXZlZFN0YXRlQmxvY2sgPT0gTlVMTCkKLSAgICB7Ci0g
ICAgICAgIGhyID0gZGV2aWNlLT5CZWdpblN0YXRlQmxvY2soKTsKLSAgICAgICAgQVNTRVJUKFNV
Q0NFRURFRChocikgfHwgaHIgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgaHIgPT0gRV9P
VVRPRk1FTU9SWSk7Ci0KLSAgICAgICAgc2V0Q29tbW9uQmxpdFN0YXRlKCk7Ci0KLSAgICAgICAg
c3RhdGljIGNvbnN0IGZsb2F0IGR1bW15Q29uc3RbNF0gPSB7IDAsIDAsIDAsIDAgfTsKLQotICAg
ICAgICBkZXZpY2UtPlNldFZlcnRleFNoYWRlcihOVUxMKTsKLSAgICAgICAgZGV2aWNlLT5TZXRW
ZXJ0ZXhTaGFkZXJDb25zdGFudEYoMCwgZHVtbXlDb25zdCwgMSk7Ci0gICAgICAgIGRldmljZS0+
U2V0UGl4ZWxTaGFkZXIoTlVMTCk7Ci0gICAgICAgIGRldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25z
dGFudEYoMCwgZHVtbXlDb25zdCwgMSk7Ci0KLSAgICAgICAgRDNEVklFV1BPUlQ5IGR1bW15VnA7
Ci0gICAgICAgIGR1bW15VnAuWCA9IDA7Ci0gICAgICAgIGR1bW15VnAuWSA9IDA7Ci0gICAgICAg
IGR1bW15VnAuV2lkdGggPSAxOwotICAgICAgICBkdW1teVZwLkhlaWdodCA9IDE7Ci0gICAgICAg
IGR1bW15VnAuTWluWiA9IDA7Ci0gICAgICAgIGR1bW15VnAuTWF4WiA9IDE7Ci0KLSAgICAgICAg
ZGV2aWNlLT5TZXRWaWV3cG9ydCgmZHVtbXlWcCk7Ci0KLSAgICAgICAgZGV2aWNlLT5TZXRUZXh0
dXJlKDAsIE5VTEwpOwotCi0gICAgICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlKDAsIG1RdWFk
VmVydGV4QnVmZmVyLCAwLCAwKTsKLQotICAgICAgICBkZXZpY2UtPlNldFZlcnRleERlY2xhcmF0
aW9uKG1RdWFkVmVydGV4RGVjbGFyYXRpb24pOwotCi0gICAgICAgIGhyID0gZGV2aWNlLT5FbmRT
dGF0ZUJsb2NrKCZtU2F2ZWRTdGF0ZUJsb2NrKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRCho
cikgfHwgaHIgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgaHIgPT0gRV9PVVRPRk1FTU9S
WSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKG1TYXZlZFN0YXRlQmxvY2sgIT0gTlVMTCk7Ci0KLSAg
ICBpZiAobVNhdmVkU3RhdGVCbG9jayAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgaHIgPSBtU2F2
ZWRTdGF0ZUJsb2NrLT5DYXB0dXJlKCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsK
LSAgICB9Ci19Ci0KLXZvaWQgQmxpdDo6cmVzdG9yZVN0YXRlKCkKLXsKLSAgICBJRGlyZWN0M0RE
ZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0gICAgZGV2aWNlLT5T
ZXREZXB0aFN0ZW5jaWxTdXJmYWNlKG1TYXZlZERlcHRoU3RlbmNpbCk7Ci0gICAgaWYgKG1TYXZl
ZERlcHRoU3RlbmNpbCAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgbVNhdmVkRGVwdGhTdGVuY2ls
LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1TYXZlZERlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgfQot
Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgbVNhdmVkUmVuZGVyVGFyZ2V0KTsKLSAg
ICBpZiAobVNhdmVkUmVuZGVyVGFyZ2V0ICE9IE5VTEwpCi0gICAgewotICAgICAgICBtU2F2ZWRS
ZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgbVNhdmVkUmVuZGVyVGFyZ2V0ID0gTlVM
TDsKLSAgICB9Ci0KLSAgICBBU1NFUlQobVNhdmVkU3RhdGVCbG9jayAhPSBOVUxMKTsKLQotICAg
IGlmIChtU2F2ZWRTdGF0ZUJsb2NrICE9IE5VTEwpCi0gICAgewotICAgICAgICBtU2F2ZWRTdGF0
ZUJsb2NrLT5BcHBseSgpOwotICAgIH0KLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9CbGl0LmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0JsaXQuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMzcxODAyOGU2NjJkM2Q1NjFjNzZjZDBjYTZmNTJlODEzZTY3MjVjMy4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0JsaXQuaAorKysgL2Rldi9udWxs
CkBAIC0xLDk0ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIEJsaXQuY3BwOiBTdXJm
YWNlIGNvcHkgdXRpbGl0eSBjbGFzcy4KLQotI2lmbmRlZiBMSUJHTEVTVjJfQkxJVF9IXwotI2Rl
ZmluZSBMSUJHTEVTVjJfQkxJVF9IXwotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIK
LQotbmFtZXNwYWNlIGdsCi17Ci1jbGFzcyBGcmFtZWJ1ZmZlcjsKLX0KLQotbmFtZXNwYWNlIHJ4
Ci17Ci1jbGFzcyBSZW5kZXJlcjk7Ci1jbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOwot
Y2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlOwotCi1jbGFzcyBCbGl0Ci17Ci0gIHB1
YmxpYzoKLSAgICBleHBsaWNpdCBCbGl0KFJlbmRlcmVyOSAqcmVuZGVyZXIpOwotICAgIH5CbGl0
KCk7Ci0KLSAgICAvLyBDb3B5IGZyb20gc291cmNlIHN1cmZhY2UgdG8gZGVzdCBzdXJmYWNlLgot
ICAgIC8vIHNvdXJjZVJlY3QsIHhvZmZzZXQsIHlvZmZzZXQgYXJlIGluIEQzRCBjb29yZGluYXRl
cyAoMCwwIGluIHVwcGVyLWxlZnQpCi0gICAgYm9vbCBjb3B5KGdsOjpGcmFtZWJ1ZmZlciAqZnJh
bWVidWZmZXIsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9y
YWdlLCBHTGludCBsZXZlbCk7Ci0gICAgYm9vbCBjb3B5KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3Jh
Z2UsIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKTsKLQotICAgIC8vIENvcHkgZnJvbSBzb3Vy
Y2Ugc3VyZmFjZSB0byBkZXN0IHN1cmZhY2UuCi0gICAgLy8gc291cmNlUmVjdCwgeG9mZnNldCwg
eW9mZnNldCBhcmUgaW4gRDNEIGNvb3JkaW5hdGVzICgwLDAgaW4gdXBwZXItbGVmdCkKLSAgICAv
LyBzb3VyY2UgaXMgaW50ZXJwcmV0ZWQgYXMgUkdCQSBhbmQgZGVzdEZvcm1hdCBzcGVjaWZpZXMg
dGhlIGRlc2lyZWQgcmVzdWx0IGZvcm1hdC4gRm9yIGV4YW1wbGUsIGlmIGRlc3RGb3JtYXQgPSBH
TF9SR0IsIHRoZSBhbHBoYSBjaGFubmVsIHdpbGwgYmUgZm9yY2VkIHRvIDAuCi0gICAgYm9vbCBm
b3JtYXRDb252ZXJ0KElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGNvbnN0IFJFQ1QgJnNvdXJj
ZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBJ
RGlyZWN0M0RTdXJmYWNlOSAqZGVzdCk7Ci0KLSAgICAvLyAyeDIgYm94IGZpbHRlciBzYW1wbGUg
ZnJvbSBzb3VyY2UgdG8gZGVzdC4KLSAgICAvLyBSZXF1aXJlcyB0aGF0IHNvdXJjZSBpcyBSR0Io
QSkgYW5kIGRlc3QgaGFzIHRoZSBzYW1lIGZvcm1hdCBhcyBzb3VyY2UuCi0gICAgYm9vbCBib3hG
aWx0ZXIoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3Qp
OwotCi0gIHByaXZhdGU6Ci0gICAgcng6OlJlbmRlcmVyOSAqbVJlbmRlcmVyOwotCi0gICAgSURp
cmVjdDNEVmVydGV4QnVmZmVyOSAqbVF1YWRWZXJ0ZXhCdWZmZXI7Ci0gICAgSURpcmVjdDNEVmVy
dGV4RGVjbGFyYXRpb245ICptUXVhZFZlcnRleERlY2xhcmF0aW9uOwotCi0gICAgdm9pZCBpbml0
R2VvbWV0cnkoKTsKLQotICAgIGJvb2wgc2V0Rm9ybWF0Q29udmVydFNoYWRlcnMoR0xlbnVtIGRl
c3RGb3JtYXQpOwotCi0gICAgYm9vbCBjb3B5KElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGNv
bnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCk7Ci0gICAgSURpcmVjdDNEVGV4
dHVyZTkgKmNvcHlTdXJmYWNlVG9UZXh0dXJlKElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlLCBj
b25zdCBSRUNUICZzb3VyY2VSZWN0KTsKLSAgICB2b2lkIHNldFZpZXdwb3J0KGNvbnN0IFJFQ1Qg
JnNvdXJjZVJlY3QsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQpOwotICAgIHZvaWQgc2V0
Q29tbW9uQmxpdFN0YXRlKCk7Ci0gICAgUkVDVCBnZXRTdXJmYWNlUmVjdChJRGlyZWN0M0RTdXJm
YWNlOSAqc3VyZmFjZSkgY29uc3Q7Ci0KLSAgICAvLyBUaGlzIGVudW0gaXMgdXNlZCB0byBpbmRl
eCBtQ29tcGlsZWRTaGFkZXJzIGFuZCBtU2hhZGVyU291cmNlLgotICAgIGVudW0gU2hhZGVySWQK
LSAgICB7Ci0gICAgICAgIFNIQURFUl9WU19TVEFOREFSRCwKLSAgICAgICAgU0hBREVSX1ZTX0ZM
SVBZLAotICAgICAgICBTSEFERVJfUFNfUEFTU1RIUk9VR0gsCi0gICAgICAgIFNIQURFUl9QU19M
VU1JTkFOQ0UsCi0gICAgICAgIFNIQURFUl9QU19DT01QT05FTlRNQVNLLAotICAgICAgICBTSEFE
RVJfQ09VTlQKLSAgICB9OwotCi0gICAgLy8gVGhpcyBhY3R1YWxseSBjb250YWlucyBJRGlyZWN0
M0RWZXJ0ZXhTaGFkZXI5IG9yIElEaXJlY3QzRFBpeGVsU2hhZGVyOSBjYXN0ZWQgdG8gSVVua25v
d24uCi0gICAgSVVua25vd24gKm1Db21waWxlZFNoYWRlcnNbU0hBREVSX0NPVU5UXTsKLQotICAg
IHRlbXBsYXRlIDxjbGFzcyBEM0RTaGFkZXJUeXBlPgotICAgIGJvb2wgc2V0U2hhZGVyKFNoYWRl
cklkIHNvdXJjZSwgY29uc3QgY2hhciAqcHJvZmlsZSwKLSAgICAgICAgICAgICAgICAgICBEM0RT
aGFkZXJUeXBlICooUmVuZGVyZXI5OjoqY3JlYXRlU2hhZGVyKShjb25zdCBEV09SRCAqLCBzaXpl
X3QgbGVuZ3RoKSwKLSAgICAgICAgICAgICAgICAgICBIUkVTVUxUIChXSU5BUEkgSURpcmVjdDNE
RGV2aWNlOTo6KnNldFNoYWRlcikoRDNEU2hhZGVyVHlwZSopKTsKLQotICAgIGJvb2wgc2V0VmVy
dGV4U2hhZGVyKFNoYWRlcklkIHNoYWRlcik7Ci0gICAgYm9vbCBzZXRQaXhlbFNoYWRlcihTaGFk
ZXJJZCBzaGFkZXIpOwotICAgIHZvaWQgcmVuZGVyKCk7Ci0KLSAgICB2b2lkIHNhdmVTdGF0ZSgp
OwotICAgIHZvaWQgcmVzdG9yZVN0YXRlKCk7Ci0gICAgSURpcmVjdDNEU3RhdGVCbG9jazkgKm1T
YXZlZFN0YXRlQmxvY2s7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKm1TYXZlZFJlbmRlclRhcmdl
dDsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVNhdmVkRGVwdGhTdGVuY2lsOwotCi0gICAgRElT
QUxMT1dfQ09QWV9BTkRfQVNTSUdOKEJsaXQpOwotfTsKLX0KLQotI2VuZGlmICAgLy8gTElCR0xF
U1YyX0JMSVRfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZTExLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZTExLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMzY0N2Q4YTg5ODU1NGI5ODQ3N2I2ZmQ0OGVhODM3YzZkZjhi
YmEzYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2Ux
MS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNTggKzAsMCBAQAotI2luY2x1ZGUgInByZWNvbXBp
bGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gQnVmZmVyU3RvcmFnZTExLmNwcCBEZWZpbmVzIHRo
ZSBCdWZmZXJTdG9yYWdlMTEgY2xhc3MuCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
QnVmZmVyU3RvcmFnZTExLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIxMS5oIgotCi1uYW1lc3BhY2UgcngKLXsKLQot
QnVmZmVyU3RvcmFnZTExOjpCdWZmZXJTdG9yYWdlMTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIpCi17
Ci0gICAgbVJlbmRlcmVyID0gcmVuZGVyZXI7Ci0KLSAgICBtU3RhZ2luZ0J1ZmZlciA9IE5VTEw7
Ci0gICAgbVN0YWdpbmdCdWZmZXJTaXplID0gMDsKLQotICAgIG1CdWZmZXIgPSBOVUxMOwotICAg
IG1CdWZmZXJTaXplID0gMDsKLQotICAgIG1TaXplID0gMDsKLQotICAgIG1SZXNvbHZlZERhdGEg
PSBOVUxMOwotICAgIG1SZXNvbHZlZERhdGFTaXplID0gMDsKLSAgICBtUmVzb2x2ZWREYXRhVmFs
aWQgPSBmYWxzZTsKLQotICAgIG1SZWFkVXNhZ2VDb3VudCA9IDA7Ci0gICAgbVdyaXRlVXNhZ2VD
b3VudCA9IDA7Ci19Ci0KLUJ1ZmZlclN0b3JhZ2UxMTo6fkJ1ZmZlclN0b3JhZ2UxMSgpCi17Ci0g
ICAgaWYgKG1TdGFnaW5nQnVmZmVyKQotICAgIHsKLSAgICAgICAgbVN0YWdpbmdCdWZmZXItPlJl
bGVhc2UoKTsKLSAgICAgICAgbVN0YWdpbmdCdWZmZXIgPSBOVUxMOwotICAgIH0KLQotICAgIGlm
IChtQnVmZmVyKQotICAgIHsKLSAgICAgICAgbUJ1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBt
QnVmZmVyID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVJlc29sdmVkRGF0YSkKLSAgICB7Ci0g
ICAgICAgIGZyZWUobVJlc29sdmVkRGF0YSk7Ci0gICAgICAgIG1SZXNvbHZlZERhdGEgPSBOVUxM
OwotICAgIH0KLX0KLQotQnVmZmVyU3RvcmFnZTExICpCdWZmZXJTdG9yYWdlMTE6Om1ha2VCdWZm
ZXJTdG9yYWdlMTEoQnVmZmVyU3RvcmFnZSAqYnVmZmVyU3RvcmFnZSkKLXsKLSAgICBBU1NFUlQo
SEFTX0RZTkFNSUNfVFlQRShCdWZmZXJTdG9yYWdlMTEqLCBidWZmZXJTdG9yYWdlKSk7Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PEJ1ZmZlclN0b3JhZ2UxMSo+KGJ1ZmZlclN0b3JhZ2UpOwotfQot
Ci12b2lkICpCdWZmZXJTdG9yYWdlMTE6OmdldERhdGEoKQotewotICAgIGlmICghbVJlc29sdmVk
RGF0YVZhbGlkKQotICAgIHsKLSAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVy
ZXItPmdldERldmljZSgpOwotICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0g
bVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0Owot
Ci0gICAgICAgIGlmICghbVN0YWdpbmdCdWZmZXIgfHwgbVN0YWdpbmdCdWZmZXJTaXplIDwgbUJ1
ZmZlclNpemUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtU3RhZ2luZ0J1ZmZlcikKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtU3RhZ2luZ0J1ZmZlci0+UmVsZWFzZSgpOwot
ICAgICAgICAgICAgICAgIG1TdGFnaW5nQnVmZmVyID0gTlVMTDsKLSAgICAgICAgICAgICAgICBt
U3RhZ2luZ0J1ZmZlclNpemUgPSAwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBEM0Qx
MV9CVUZGRVJfREVTQyBidWZmZXJEZXNjOwotICAgICAgICAgICAgYnVmZmVyRGVzYy5CeXRlV2lk
dGggPSBtU2l6ZTsKLSAgICAgICAgICAgIGJ1ZmZlckRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9T
VEFHSU5HOwotICAgICAgICAgICAgYnVmZmVyRGVzYy5CaW5kRmxhZ3MgPSAwOwotICAgICAgICAg
ICAgYnVmZmVyRGVzYy5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfUkVBRCB8IEQz
RDExX0NQVV9BQ0NFU1NfV1JJVEU7Ci0gICAgICAgICAgICBidWZmZXJEZXNjLk1pc2NGbGFncyA9
IDA7Ci0gICAgICAgICAgICBidWZmZXJEZXNjLlN0cnVjdHVyZUJ5dGVTdHJpZGUgPSAwOwotCi0g
ICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmYnVmZmVyRGVzYywgTlVM
TCwgJm1TdGFnaW5nQnVmZmVyKTsKLSAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlksICh2b2lkKilOVUxMKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbVN0YWdp
bmdCdWZmZXJTaXplID0gYnVmZmVyRGVzYy5CeXRlV2lkdGg7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoIW1SZXNvbHZlZERhdGEgfHwgbVJlc29sdmVkRGF0YVNpemUgPCBtQnVmZmVyU2l6ZSkK
LSAgICAgICAgewotICAgICAgICAgICAgZnJlZShtUmVzb2x2ZWREYXRhKTsKLSAgICAgICAgICAg
IG1SZXNvbHZlZERhdGEgPSBtYWxsb2MobVNpemUpOwotICAgICAgICAgICAgbVJlc29sdmVkRGF0
YVNpemUgPSBtU2l6ZTsKLSAgICAgICAgfQotCi0gICAgICAgIEQzRDExX0JPWCBzcmNCb3g7Ci0g
ICAgICAgIHNyY0JveC5sZWZ0ID0gMDsKLSAgICAgICAgc3JjQm94LnJpZ2h0ID0gbVNpemU7Ci0g
ICAgICAgIHNyY0JveC50b3AgPSAwOwotICAgICAgICBzcmNCb3guYm90dG9tID0gMTsKLSAgICAg
ICAgc3JjQm94LmZyb250ID0gMDsKLSAgICAgICAgc3JjQm94LmJhY2sgPSAxOwotCi0gICAgICAg
IGNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihtU3RhZ2luZ0J1ZmZlciwgMCwgMCwgMCwg
MCwgbUJ1ZmZlciwgMCwgJnNyY0JveCk7Ci0KLSAgICAgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09V
UkNFIG1hcHBlZFJlc291cmNlOwotICAgICAgICByZXN1bHQgPSBjb250ZXh0LT5NYXAobVN0YWdp
bmdCdWZmZXIsIDAsIEQzRDExX01BUF9SRUFELCAwLCAmbWFwcGVkUmVzb3VyY2UpOwotICAgICAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgKHZvaWQqKU5VTEwpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgbWVtY3B5KG1SZXNvbHZlZERhdGEsIG1hcHBlZFJlc291cmNlLnBEYXRhLCBtU2l6ZSk7Ci0K
LSAgICAgICAgY29udGV4dC0+VW5tYXAobVN0YWdpbmdCdWZmZXIsIDApOwotCi0gICAgICAgIG1S
ZXNvbHZlZERhdGFWYWxpZCA9IHRydWU7Ci0gICAgfQotCi0gICAgbVJlYWRVc2FnZUNvdW50ID0g
MDsKLQotICAgIHJldHVybiBtUmVzb2x2ZWREYXRhOwotfQotCi12b2lkIEJ1ZmZlclN0b3JhZ2Ux
MTo6c2V0RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQg
aW50IG9mZnNldCkKLXsKLSAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0
RGV2aWNlKCk7Ci0gICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+
Z2V0RGV2aWNlQ29udGV4dCgpOwotICAgIEhSRVNVTFQgcmVzdWx0OwotCi0gICAgdW5zaWduZWQg
aW50IHJlcXVpcmVkQnVmZmVyU2l6ZSA9IHNpemUgKyBvZmZzZXQ7Ci0gICAgdW5zaWduZWQgaW50
IHJlcXVpcmVkU3RhZ2luZ1NpemUgPSBzaXplOwotICAgIGJvb2wgZGlyZWN0SW5pdGlhbGl6YXRp
b24gPSBvZmZzZXQgPT0gMCAmJiAoIW1CdWZmZXIgfHwgbUJ1ZmZlclNpemUgPCBzaXplICsgb2Zm
c2V0KTsKLQotICAgIGlmICghZGlyZWN0SW5pdGlhbGl6YXRpb24pCi0gICAgewotICAgICAgICBp
ZiAoIW1TdGFnaW5nQnVmZmVyIHx8IG1TdGFnaW5nQnVmZmVyU2l6ZSA8IHJlcXVpcmVkU3RhZ2lu
Z1NpemUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtU3RhZ2luZ0J1ZmZlcikKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBtU3RhZ2luZ0J1ZmZlci0+UmVsZWFzZSgpOwotICAg
ICAgICAgICAgICAgIG1TdGFnaW5nQnVmZmVyID0gTlVMTDsKLSAgICAgICAgICAgICAgICBtU3Rh
Z2luZ0J1ZmZlclNpemUgPSAwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBEM0QxMV9C
VUZGRVJfREVTQyBidWZmZXJEZXNjOwotICAgICAgICAgICAgYnVmZmVyRGVzYy5CeXRlV2lkdGgg
PSBzaXplOwotICAgICAgICAgICAgYnVmZmVyRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX1NUQUdJ
Tkc7Ci0gICAgICAgICAgICBidWZmZXJEZXNjLkJpbmRGbGFncyA9IDA7Ci0gICAgICAgICAgICBi
dWZmZXJEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19SRUFEIHwgRDNEMTFf
Q1BVX0FDQ0VTU19XUklURTsKLSAgICAgICAgICAgIGJ1ZmZlckRlc2MuTWlzY0ZsYWdzID0gMDsK
LSAgICAgICAgICAgIGJ1ZmZlckRlc2MuU3RydWN0dXJlQnl0ZVN0cmlkZSA9IDA7Ci0KLSAgICAg
ICAgICAgIGlmIChkYXRhKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEQzRDExX1NV
QlJFU09VUkNFX0RBVEEgaW5pdGlhbERhdGE7Ci0gICAgICAgICAgICAgICAgaW5pdGlhbERhdGEu
cFN5c01lbSA9IGRhdGE7Ci0gICAgICAgICAgICAgICAgaW5pdGlhbERhdGEuU3lzTWVtUGl0Y2gg
PSBzaXplOwotICAgICAgICAgICAgICAgIGluaXRpYWxEYXRhLlN5c01lbVNsaWNlUGl0Y2ggPSAw
OwotCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVCdWZmZXIoJmJ1ZmZl
ckRlc2MsICZpbml0aWFsRGF0YSwgJm1TdGFnaW5nQnVmZmVyKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBk
ZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmYnVmZmVyRGVzYywgTlVMTCwgJm1TdGFnaW5nQnVmZmVyKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1TdGFnaW5nQnVmZmVyU2l6ZSA9IHNp
emU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoZGF0YSkKLSAgICAgICAgewotICAgICAg
ICAgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwotICAgICAgICAg
ICAgcmVzdWx0ID0gY29udGV4dC0+TWFwKG1TdGFnaW5nQnVmZmVyLCAwLCBEM0QxMV9NQVBfV1JJ
VEUsIDAsICZtYXBwZWRSZXNvdXJjZSk7Ci0gICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbWVtY3B5KG1hcHBlZFJl
c291cmNlLnBEYXRhLCBkYXRhLCBzaXplKTsKLQotICAgICAgICAgICAgY29udGV4dC0+VW5tYXAo
bVN0YWdpbmdCdWZmZXIsIDApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFtQnVmZmVy
IHx8IG1CdWZmZXJTaXplIDwgc2l6ZSArIG9mZnNldCkKLSAgICB7Ci0gICAgICAgIEQzRDExX0JV
RkZFUl9ERVNDIGJ1ZmZlckRlc2M7Ci0gICAgICAgIGJ1ZmZlckRlc2MuQnl0ZVdpZHRoID0gcmVx
dWlyZWRCdWZmZXJTaXplOwotICAgICAgICBidWZmZXJEZXNjLlVzYWdlID0gRDNEMTFfVVNBR0Vf
REVGQVVMVDsKLSAgICAgICAgYnVmZmVyRGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1ZFUlRF
WF9CVUZGRVIgfCBEM0QxMV9CSU5EX0lOREVYX0JVRkZFUjsKLSAgICAgICAgYnVmZmVyRGVzYy5D
UFVBY2Nlc3NGbGFncyA9IDA7Ci0gICAgICAgIGJ1ZmZlckRlc2MuTWlzY0ZsYWdzID0gMDsKLSAg
ICAgICAgYnVmZmVyRGVzYy5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKLQotICAgICAgICBpZiAo
ZGlyZWN0SW5pdGlhbGl6YXRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFNpbmNlIHRo
ZSBkYXRhIHdpbGwgZmlsbCB0aGUgZW50aXJlIGJ1ZmZlciAoYmVpbmcgbGFyZ2VyIHRoYW4gdGhl
IGluaXRpYWwgc2l6ZSBhbmQgaGF2aW5nCi0gICAgICAgICAgICAvLyBubyBvZmZzZXQpLCB0aGUg
YnVmZmVyIGNhbiBiZSBpbml0aWFsaXplZCB3aXRoIHRoZSBkYXRhIHNvIG5vIHN0YWdpbmcgYnVm
ZmVyIGlzIHJlcXVpcmVkCi0KLSAgICAgICAgICAgIC8vIE5vIGxvbmdlciBuZWVkIHRoZSBvbGQg
YnVmZmVyCi0gICAgICAgICAgICBpZiAobUJ1ZmZlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBtQnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgbUJ1ZmZlciA9IE5V
TEw7Ci0gICAgICAgICAgICAgICAgbUJ1ZmZlclNpemUgPSAwOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAoZGF0YSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBEM0Qx
MV9TVUJSRVNPVVJDRV9EQVRBIGluaXRpYWxEYXRhOwotICAgICAgICAgICAgICAgIGluaXRpYWxE
YXRhLnBTeXNNZW0gPSBkYXRhOwotICAgICAgICAgICAgICAgIGluaXRpYWxEYXRhLlN5c01lbVBp
dGNoID0gc2l6ZTsKLSAgICAgICAgICAgICAgICBpbml0aWFsRGF0YS5TeXNNZW1TbGljZVBpdGNo
ID0gMDsKLQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZi
dWZmZXJEZXNjLCAmaW5pdGlhbERhdGEsICZtQnVmZmVyKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZp
Y2UtPkNyZWF0ZUJ1ZmZlcigmYnVmZmVyRGVzYywgTlVMTCwgJm1CdWZmZXIpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChtQnVmZmVyICYmIG9mZnNldCA+
IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIElmIG9mZnNldCBpcyBncmVhdGVyIHRoYW4g
emVybyBhbmQgdGhlIGJ1ZmZlciBpcyBub24tbnVsbCwgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgZGF0
YSBmcm9tCi0gICAgICAgICAgICAvLyB0aGUgb2xkIGJ1ZmZlciB1cCB0byBvZmZzZXQKLSAgICAg
ICAgICAgIElEM0QxMUJ1ZmZlciAqbmV3QnVmZmVyID0gTlVMTDsKLQotICAgICAgICAgICAgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVCdWZmZXIoJmJ1ZmZlckRlc2MsIE5VTEwsICZuZXdCdWZmZXIp
OwotICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIEQzRDExX0JPWCBzcmNCb3g7Ci0gICAgICAgICAgICBzcmNCb3gu
bGVmdCA9IDA7Ci0gICAgICAgICAgICBzcmNCb3gucmlnaHQgPSBzdGQ6Om1pbihvZmZzZXQsIG1C
dWZmZXJTaXplKTsKLSAgICAgICAgICAgIHNyY0JveC50b3AgPSAwOwotICAgICAgICAgICAgc3Jj
Qm94LmJvdHRvbSA9IDE7Ci0gICAgICAgICAgICBzcmNCb3guZnJvbnQgPSAwOwotICAgICAgICAg
ICAgc3JjQm94LmJhY2sgPSAxOwotCi0gICAgICAgICAgICBjb250ZXh0LT5Db3B5U3VicmVzb3Vy
Y2VSZWdpb24obmV3QnVmZmVyLCAwLCAwLCAwLCAwLCBtQnVmZmVyLCAwLCAmc3JjQm94KTsKLQot
ICAgICAgICAgICAgbUJ1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICAgICAgbUJ1ZmZlciA9IG5l
d0J1ZmZlcjsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAg
IC8vIFNpbXBsZSBjYXNlLCBub3RoaW5nIG5lZWRzIHRvIGJlIGNvcGllZCBmcm9tIHRoZSBvbGQg
YnVmZmVyIHRvIHRoZSBuZXcgb25lLCBqdXN0IGNyZWF0ZQotICAgICAgICAgICAgLy8gYSBuZXcg
YnVmZmVyCi0KLSAgICAgICAgICAgIC8vIE5vIGxvbmdlciBuZWVkIHRoZSBvbGQgYnVmZmVyCi0g
ICAgICAgICAgICBpZiAobUJ1ZmZlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBt
QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgbUJ1ZmZlciA9IE5VTEw7Ci0gICAg
ICAgICAgICAgICAgbUJ1ZmZlclNpemUgPSAwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAvLyBDcmVhdGUgYSBuZXcgYnVmZmVyIGZvciBkYXRhIHN0b3JhZ2UKLSAgICAgICAgICAgIHJl
c3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJEZXNjLCBOVUxMLCAmbUJ1ZmZlcik7
Ci0gICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIHVwZGF0ZVNlcmlhbCgpOwotICAgICAgICBtQnVmZmVy
U2l6ZSA9IGJ1ZmZlckRlc2MuQnl0ZVdpZHRoOwotICAgIH0KLQotICAgIGlmICghZGlyZWN0SW5p
dGlhbGl6YXRpb24pCi0gICAgewotICAgICAgICBBU1NFUlQobVN0YWdpbmdCdWZmZXIgJiYgbVN0
YWdpbmdCdWZmZXJTaXplID49IHJlcXVpcmVkU3RhZ2luZ1NpemUpOwotCi0gICAgICAgIC8vIERh
dGEgaXMgYWxyZWFkeSBwdXQgaW50byB0aGUgc3RhZ2luZyBidWZmZXIsIGNvcHkgaXQgb3ZlciB0
byB0aGUgZGF0YSBidWZmZXIKLSAgICAgICAgRDNEMTFfQk9YIHNyY0JveDsKLSAgICAgICAgc3Jj
Qm94LmxlZnQgPSAwOwotICAgICAgICBzcmNCb3gucmlnaHQgPSBzaXplOwotICAgICAgICBzcmNC
b3gudG9wID0gMDsKLSAgICAgICAgc3JjQm94LmJvdHRvbSA9IDE7Ci0gICAgICAgIHNyY0JveC5m
cm9udCA9IDA7Ci0gICAgICAgIHNyY0JveC5iYWNrID0gMTsKLQotICAgICAgICBjb250ZXh0LT5D
b3B5U3VicmVzb3VyY2VSZWdpb24obUJ1ZmZlciwgMCwgb2Zmc2V0LCAwLCAwLCBtU3RhZ2luZ0J1
ZmZlciwgMCwgJnNyY0JveCk7Ci0gICAgfQotCi0gICAgbVNpemUgPSBzdGQ6Om1heChtU2l6ZSwg
b2Zmc2V0ICsgc2l6ZSk7Ci0KLSAgICBtV3JpdGVVc2FnZUNvdW50ID0gMDsKLQotICAgIG1SZXNv
bHZlZERhdGFWYWxpZCA9IGZhbHNlOwotfQotCi12b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6Y2xlYXIo
KQotewotICAgIG1SZXNvbHZlZERhdGFWYWxpZCA9IGZhbHNlOwotICAgIG1TaXplID0gMDsKLX0K
LQotdW5zaWduZWQgaW50IEJ1ZmZlclN0b3JhZ2UxMTo6Z2V0U2l6ZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1TaXplOwotfQotCi1ib29sIEJ1ZmZlclN0b3JhZ2UxMTo6c3VwcG9ydHNEaXJlY3RC
aW5kaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBCdWZmZXJTdG9y
YWdlMTE6Om1hcmtCdWZmZXJVc2FnZSgpCi17Ci0gICAgbVJlYWRVc2FnZUNvdW50Kys7Ci0gICAg
bVdyaXRlVXNhZ2VDb3VudCsrOwotCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1c2Fn
ZUxpbWl0ID0gNTsKLQotICAgIGlmIChtUmVhZFVzYWdlQ291bnQgPiB1c2FnZUxpbWl0ICYmIG1S
ZXNvbHZlZERhdGEpCi0gICAgewotICAgICAgICBmcmVlKG1SZXNvbHZlZERhdGEpOwotICAgICAg
ICBtUmVzb2x2ZWREYXRhID0gTlVMTDsKLSAgICAgICAgbVJlc29sdmVkRGF0YVNpemUgPSAwOwot
ICAgICAgICBtUmVzb2x2ZWREYXRhVmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobVJl
YWRVc2FnZUNvdW50ID4gdXNhZ2VMaW1pdCAmJiBtV3JpdGVVc2FnZUNvdW50ID4gdXNhZ2VMaW1p
dCAmJiBtU3RhZ2luZ0J1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1TdGFnaW5nQnVmZmVyLT5SZWxl
YXNlKCk7Ci0gICAgICAgIG1TdGFnaW5nQnVmZmVyID0gTlVMTDsKLSAgICAgICAgbVN0YWdpbmdC
dWZmZXJTaXplID0gMDsKLSAgICB9Ci19Ci0KLUlEM0QxMUJ1ZmZlciAqQnVmZmVyU3RvcmFnZTEx
OjpnZXRCdWZmZXIoKSBjb25zdAotewotICAgIHJldHVybiBtQnVmZmVyOwotfQotCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0J1
ZmZlclN0b3JhZ2UxMS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9CdWZmZXJTdG9yYWdlMTEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YjYyMzQ4YjBjOTM2ZmVkODNhOTA0NWNlMThlYjdhOWEyZDYyODU5Mi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UxMS5oCisrKyAvZGV2L251bGwKQEAg
LTEsNTYgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIEJ1ZmZlclN0b3JhZ2UxMS5oIERlZmlu
ZXMgdGhlIEJ1ZmZlclN0b3JhZ2UxMSBjbGFzcy4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVS
RVJfQlVGRkVSU1RPUkFHRTExX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9CVUZGRVJT
VE9SQUdFMTFfSF8KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdl
LmgiCi0KLW5hbWVzcGFjZSByeAotewotY2xhc3MgUmVuZGVyZXIxMTsKLQotY2xhc3MgQnVmZmVy
U3RvcmFnZTExIDogcHVibGljIEJ1ZmZlclN0b3JhZ2UKLXsKLSAgcHVibGljOgotICAgIGV4cGxp
Y2l0IEJ1ZmZlclN0b3JhZ2UxMShSZW5kZXJlcjExICpyZW5kZXJlcik7Ci0gICAgdmlydHVhbCB+
QnVmZmVyU3RvcmFnZTExKCk7Ci0KLSAgICBzdGF0aWMgQnVmZmVyU3RvcmFnZTExICptYWtlQnVm
ZmVyU3RvcmFnZTExKEJ1ZmZlclN0b3JhZ2UgKmJ1ZmZlclN0b3JhZ2UpOwotCi0gICAgdmlydHVh
bCB2b2lkICpnZXREYXRhKCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldERhdGEoY29uc3Qgdm9pZCog
ZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBvZmZzZXQpOwotICAgIHZpcnR1
YWwgdm9pZCBjbGVhcigpOwotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFNpemUoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNEaXJlY3RCaW5kaW5nKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCB2b2lkIG1hcmtCdWZmZXJVc2FnZSgpOwotCi0gICAgSUQzRDExQnVmZmVyICpnZXRC
dWZmZXIoKSBjb25zdDsKLQotICBwcml2YXRlOgotICAgIFJlbmRlcmVyMTEgKm1SZW5kZXJlcjsK
LQotICAgIElEM0QxMUJ1ZmZlciAqbVN0YWdpbmdCdWZmZXI7Ci0gICAgdW5zaWduZWQgaW50IG1T
dGFnaW5nQnVmZmVyU2l6ZTsKLQotICAgIElEM0QxMUJ1ZmZlciAqbUJ1ZmZlcjsKLSAgICB1bnNp
Z25lZCBpbnQgbUJ1ZmZlclNpemU7Ci0KLSAgICB1bnNpZ25lZCBpbnQgbVNpemU7Ci0KLSAgICB2
b2lkICptUmVzb2x2ZWREYXRhOwotICAgIHVuc2lnbmVkIGludCBtUmVzb2x2ZWREYXRhU2l6ZTsK
LSAgICBib29sIG1SZXNvbHZlZERhdGFWYWxpZDsKLQotICAgIHVuc2lnbmVkIGludCBtUmVhZFVz
YWdlQ291bnQ7Ci0gICAgdW5zaWduZWQgaW50IG1Xcml0ZVVzYWdlQ291bnQ7Ci19OwotCi19Ci0K
LSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfQlVGRkVSU1RPUkFHRTExX0hfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZl
clN0b3JhZ2U5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvQnVmZmVyU3RvcmFnZTkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBl
NjllN2E4OTIxZTNmM2ViMGY3ZTY5ZDNmNWI2ZjcxYzNmOTlmYTM5Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZTkuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNzggKzAsMCBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
Ly8gQnVmZmVyU3RvcmFnZTkuY3BwIERlZmluZXMgdGhlIEJ1ZmZlclN0b3JhZ2U5IGNsYXNzLgot
Ci0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2U5LmgiCi0jaW5jbHVk
ZSAiY29tbW9uL2RlYnVnLmgiCi0KLW5hbWVzcGFjZSByeAotewotCi1CdWZmZXJTdG9yYWdlOTo6
QnVmZmVyU3RvcmFnZTkoKQotewotICAgIG1NZW1vcnkgPSBOVUxMOwotICAgIG1BbGxvY2F0ZWRT
aXplID0gMDsKLSAgICBtU2l6ZSA9IDA7Ci19Ci0KLUJ1ZmZlclN0b3JhZ2U5Ojp+QnVmZmVyU3Rv
cmFnZTkoKQotewotICAgIGRlbGV0ZVtdIG1NZW1vcnk7Ci19Ci0KLUJ1ZmZlclN0b3JhZ2U5ICpC
dWZmZXJTdG9yYWdlOTo6bWFrZUJ1ZmZlclN0b3JhZ2U5KEJ1ZmZlclN0b3JhZ2UgKmJ1ZmZlclN0
b3JhZ2UpCi17Ci0gICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoQnVmZmVyU3RvcmFnZTkqLCBi
dWZmZXJTdG9yYWdlKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEJ1ZmZlclN0b3JhZ2U5Kj4o
YnVmZmVyU3RvcmFnZSk7Ci19Ci0KLXZvaWQgKkJ1ZmZlclN0b3JhZ2U5OjpnZXREYXRhKCkKLXsK
LSAgICByZXR1cm4gbU1lbW9yeTsKLX0KLQotdm9pZCBCdWZmZXJTdG9yYWdlOTo6c2V0RGF0YShj
b25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNldCkK
LXsKLSAgICBpZiAoIW1NZW1vcnkgfHwgb2Zmc2V0ICsgc2l6ZSA+IG1BbGxvY2F0ZWRTaXplKQot
ICAgIHsKLSAgICAgICAgdW5zaWduZWQgaW50IG5ld0FsbG9jYXRlZFNpemUgPSBvZmZzZXQgKyBz
aXplOwotICAgICAgICB2b2lkICpuZXdNZW1vcnkgPSBuZXcgY2hhcltuZXdBbGxvY2F0ZWRTaXpl
XTsKLQotICAgICAgICBpZiAob2Zmc2V0ID4gMCAmJiBtTWVtb3J5ICYmIG1BbGxvY2F0ZWRTaXpl
ID4gMCkKLSAgICAgICAgewotICAgICAgICAgICAgbWVtY3B5KG5ld01lbW9yeSwgbU1lbW9yeSwg
c3RkOjptaW4ob2Zmc2V0LCBtQWxsb2NhdGVkU2l6ZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
ZGVsZXRlW10gbU1lbW9yeTsKLSAgICAgICAgbU1lbW9yeSA9IG5ld01lbW9yeTsKLSAgICAgICAg
bUFsbG9jYXRlZFNpemUgPSBuZXdBbGxvY2F0ZWRTaXplOwotICAgIH0KLQotICAgIG1TaXplID0g
c3RkOjptYXgobVNpemUsIG9mZnNldCArIHNpemUpOwotICAgIGlmIChkYXRhKQotICAgIHsKLSAg
ICAgICAgbWVtY3B5KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1NZW1vcnkpICsgb2Zmc2V0LCBk
YXRhLCBzaXplKTsKLSAgICB9Ci19Ci0KLXZvaWQgQnVmZmVyU3RvcmFnZTk6OmNsZWFyKCkKLXsK
LSAgICBtU2l6ZSA9IDA7Ci19Ci0KLXVuc2lnbmVkIGludCBCdWZmZXJTdG9yYWdlOTo6Z2V0U2l6
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TaXplOwotfQotCi1ib29sIEJ1ZmZlclN0b3JhZ2U5
OjpzdXBwb3J0c0RpcmVjdEJpbmRpbmcoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9CdWZmZXJTdG9yYWdlOS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdlOS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAzZTgwMzk2OWJjMzVkNGVhMTExZGEyMjgxZjI1YjNlMTcxZGRjMjM0Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZTkuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDQyICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBCdWZmZXJTdG9yYWdlOS5o
IERlZmluZXMgdGhlIEJ1ZmZlclN0b3JhZ2U5IGNsYXNzLgotCi0jaWZuZGVmIExJQkdMRVNWMl9S
RU5ERVJFUl9CVUZGRVJTVE9SQUdFOV9IXwotI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfQlVG
RkVSU1RPUkFHRTlfSF8KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9y
YWdlLmgiCi0KLW5hbWVzcGFjZSByeAotewotCi1jbGFzcyBCdWZmZXJTdG9yYWdlOSA6IHB1Ymxp
YyBCdWZmZXJTdG9yYWdlCi17Ci0gIHB1YmxpYzoKLSAgICBCdWZmZXJTdG9yYWdlOSgpOwotICAg
IHZpcnR1YWwgfkJ1ZmZlclN0b3JhZ2U5KCk7Ci0KLSAgICBzdGF0aWMgQnVmZmVyU3RvcmFnZTkg
Km1ha2VCdWZmZXJTdG9yYWdlOShCdWZmZXJTdG9yYWdlICpidWZmZXJTdG9yYWdlKTsKLQotICAg
IHZpcnR1YWwgdm9pZCAqZ2V0RGF0YSgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhKGNvbnN0
IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKLSAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXIoKTsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRTaXpl
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRGlyZWN0QmluZGluZygpIGNvbnN0
OwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEJ1ZmZlclN0b3Jh
Z2U5KTsKLQotICAgIHZvaWQgKm1NZW1vcnk7Ci0gICAgdW5zaWduZWQgaW50IG1BbGxvY2F0ZWRT
aXplOwotCi0gICAgdW5zaWduZWQgaW50IG1TaXplOwotfTsKLQotfQotCi0jZW5kaWYgLy8gTElC
R0xFU1YyX1JFTkRFUkVSX0JVRkZFUlNUT1JBR0U5X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ZlbmNlMTEuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZTExLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQxMWM5YTBmYzgyZThjZTU2MWYwMGYxNDYwNjEw
MjRiZmY0MmRjNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ZlbmNlMTEu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTM0ICswLDAgQEAKLSNpbmNsdWRlICJwcmVjb21waWxl
ZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIEZlbmNlMTEuY3BwOiBEZWZpbmVzIHRoZSByeDo6RmVu
Y2UxMSBjbGFzcyB3aGljaCBpbXBsZW1lbnRzIHJ4OjpGZW5jZUltcGwuCi0KLSNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvRmVuY2UxMS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgi
Ci0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyMTEuaCIKLQotbmFtZXNwYWNl
IHJ4Ci17Ci0KLUZlbmNlMTE6OkZlbmNlMTEocng6OlJlbmRlcmVyMTEgKnJlbmRlcmVyKQotewot
ICAgIG1SZW5kZXJlciA9IHJlbmRlcmVyOwotICAgIG1RdWVyeSA9IE5VTEw7Ci19Ci0KLUZlbmNl
MTE6On5GZW5jZTExKCkKLXsKLSAgICBpZiAobVF1ZXJ5KQotICAgIHsKLSAgICAgICAgbVF1ZXJ5
LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1RdWVyeSA9IE5VTEw7Ci0gICAgfQotfQotCi1HTGJvb2xl
YW4gRmVuY2UxMTo6aXNGZW5jZSgpCi17Ci0gICAgLy8gR0xfTlZfZmVuY2Ugc3BlYzoKLSAgICAv
LyBBIG5hbWUgcmV0dXJuZWQgYnkgR2VuRmVuY2VzTlYsIGJ1dCBub3QgeWV0IHNldCB2aWEgU2V0
RmVuY2VOViwgaXMgbm90IHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGZlbmNlLgotICAgIHJldHVy
biBtUXVlcnkgIT0gTlVMTDsKLX0KLQotdm9pZCBGZW5jZTExOjpzZXRGZW5jZShHTGVudW0gY29u
ZGl0aW9uKQotewotICAgIGlmICghbVF1ZXJ5KQotICAgIHsKLSAgICAgICAgRDNEMTFfUVVFUllf
REVTQyBxdWVyeURlc2M7Ci0gICAgICAgIHF1ZXJ5RGVzYy5RdWVyeSA9IEQzRDExX1FVRVJZX0VW
RU5UOwotICAgICAgICBxdWVyeURlc2MuTWlzY0ZsYWdzID0gMDsKLQotICAgICAgICBpZiAoRkFJ
TEVEKG1SZW5kZXJlci0+Z2V0RGV2aWNlKCktPkNyZWF0ZVF1ZXJ5KCZxdWVyeURlc2MsICZtUXVl
cnkpKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29u
dGV4dCgpLT5FbmQobVF1ZXJ5KTsKLQotICAgIHNldENvbmRpdGlvbihjb25kaXRpb24pOwotICAg
IHNldFN0YXR1cyhHTF9GQUxTRSk7Ci19Ci0KLUdMYm9vbGVhbiBGZW5jZTExOjp0ZXN0RmVuY2Uo
KQotewotICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX1RSVUUpOwotICAgIH0KLQotICAgIEhSRVNV
TFQgcmVzdWx0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCktPkdldERhdGEobVF1ZXJ5
LCBOVUxMLCAwLCAwKTsKLQotICAgIGlmIChtUmVuZGVyZXItPmlzRGV2aWNlTG9zdCgpKQotICAg
IHsKLSAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX1RSVUUpOwot
ICAgIH0KLQotICAgIEFTU0VSVChyZXN1bHQgPT0gU19PSyB8fCByZXN1bHQgPT0gU19GQUxTRSk7
Ci0gICAgc2V0U3RhdHVzKHJlc3VsdCA9PSBTX09LKTsKLSAgICByZXR1cm4gZ2V0U3RhdHVzKCk7
Ci19Ci0KLXZvaWQgRmVuY2UxMTo6ZmluaXNoRmVuY2UoKQotewotICAgIGlmIChtUXVlcnkgPT0g
TlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgIH0KLQotICAgIHdoaWxlICghdGVzdEZlbmNlKCkpCi0gICAgewotICAgICAgICBT
bGVlcCgwKTsKLSAgICB9Ci19Ci0KLXZvaWQgRmVuY2UxMTo6Z2V0RmVuY2VpdihHTGVudW0gcG5h
bWUsIEdMaW50ICpwYXJhbXMpCi17Ci0gICAgaWYgKG1RdWVyeSA9PSBOVUxMKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0g
ICAgc3dpdGNoIChwbmFtZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0ZFTkNFX1NUQVRVU19OVjoK
LSAgICAgICAgewotICAgICAgICAgICAgLy8gR0xfTlZfZmVuY2Ugc3BlYzoKLSAgICAgICAgICAg
IC8vIE9uY2UgdGhlIHN0YXR1cyBvZiBhIGZlbmNlIGhhcyBiZWVuIGZpbmlzaGVkICh2aWEgRmlu
aXNoRmVuY2VOVikgb3IgdGVzdGVkIGFuZCB0aGUgcmV0dXJuZWQgc3RhdHVzIGlzIFRSVUUgKHZp
YSBlaXRoZXIgVGVzdEZlbmNlTlYKLSAgICAgICAgICAgIC8vIG9yIEdldEZlbmNlaXZOViBxdWVy
eWluZyB0aGUgRkVOQ0VfU1RBVFVTX05WKSwgdGhlIHN0YXR1cyByZW1haW5zIFRSVUUgdW50aWwg
dGhlIG5leHQgU2V0RmVuY2VOViBvZiB0aGUgZmVuY2UuCi0gICAgICAgICAgICBpZiAoZ2V0U3Rh
dHVzKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcGFyYW1zWzBdID0gR0xfVFJV
RTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IEhSRVNVTFQgcmVzdWx0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCktPkdldERhdGEo
bVF1ZXJ5LCBOVUxMLCAwLCBEM0QxMV9BU1lOQ19HRVREQVRBX0RPTk9URkxVU0gpOwotCi0gICAg
ICAgICAgICBpZiAobVJlbmRlcmVyLT5pc0RldmljZUxvc3QoKSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBwYXJhbXNbMF0gPSBHTF9UUlVFOwotICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIEFTU0VSVChyZXN1bHQgPT0gU19PSyB8fCByZXN1bHQgPT0gU19GQUxTRSk7Ci0gICAgICAg
ICAgICBzZXRTdGF0dXMocmVzdWx0ID09IFNfT0spOwotICAgICAgICAgICAgcGFyYW1zWzBdID0g
Z2V0U3RhdHVzKCk7Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICBjYXNl
IEdMX0ZFTkNFX0NPTkRJVElPTl9OVjoKLSAgICAgICAgcGFyYW1zWzBdID0gZ2V0Q29uZGl0aW9u
KCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
RmVuY2UxMS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9GZW5jZTExLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1Mzk4YmNhMTQ5MDA2
NDdiMDNkZjI3YTEwMTkxZDkwNjkxOTExMTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9GZW5jZTExLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vLwotLy8g
Q29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgotLy8KLQotLy8gRmVuY2UxMS5oOiBEZWZpbmVzIHRoZSByeDo6RmVuY2UxMSBjbGFzcyB3aGlj
aCBpbXBsZW1lbnRzIHJ4OjpGZW5jZUltcGwuCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVS
X0ZlbmNlMTFfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX0ZlbmNlMTFfSF8KLQotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZUltcGwuaCIKLQotbmFtZXNwYWNlIHJ4Ci17
Ci1jbGFzcyBSZW5kZXJlcjExOwotCi1jbGFzcyBGZW5jZTExIDogcHVibGljIEZlbmNlSW1wbAot
ewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgRmVuY2UxMShyeDo6UmVuZGVyZXIxMSAqcmVuZGVy
ZXIpOwotICAgIHZpcnR1YWwgfkZlbmNlMTEoKTsKLQotICAgIEdMYm9vbGVhbiBpc0ZlbmNlKCk7
Ci0gICAgdm9pZCBzZXRGZW5jZShHTGVudW0gY29uZGl0aW9uKTsKLSAgICBHTGJvb2xlYW4gdGVz
dEZlbmNlKCk7Ci0gICAgdm9pZCBmaW5pc2hGZW5jZSgpOwotICAgIHZvaWQgZ2V0RmVuY2VpdihH
TGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1df
Q09QWV9BTkRfQVNTSUdOKEZlbmNlMTEpOwotCi0gICAgcng6OlJlbmRlcmVyMTEgKm1SZW5kZXJl
cjsKLSAgICBJRDNEMTFRdWVyeSAqbVF1ZXJ5OwotfTsKLQotfQotCi0jZW5kaWYgLy8gTElCR0xF
U1YyX1JFTkRFUkVSX0ZFTkNFMTFfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvRmVuY2U5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvRmVuY2U5LmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggODYwNjRkN2U1MmJhZmFlOTc1MTUwODRhODNhYmI2MjhhNGI4YjNmNC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ZlbmNlOS5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwxMzUgKzAsMCBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCi0vLwotLy8g
Q29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgotLy8KLQotLy8gRmVuY2U5LmNwcDogRGVmaW5lcyB0aGUgcng6OkZlbmNlOSBjbGFzcy4KLQot
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZTkuaCIKLSNpbmNsdWRlICJsaWJHTEVT
djIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9yZW5kZXJlcjlfdXRpbHMu
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXI5LmgiCi0KLW5hbWVzcGFj
ZSByeAotewotCi1GZW5jZTk6OkZlbmNlOShyeDo6UmVuZGVyZXI5ICpyZW5kZXJlcikKLXsKLSAg
ICBtUmVuZGVyZXIgPSByZW5kZXJlcjsKLSAgICBtUXVlcnkgPSBOVUxMOwotfQotCi1GZW5jZTk6
On5GZW5jZTkoKQotewotICAgIGlmIChtUXVlcnkpCi0gICAgewotICAgICAgICBtUmVuZGVyZXIt
PmZyZWVFdmVudFF1ZXJ5KG1RdWVyeSk7Ci0gICAgICAgIG1RdWVyeSA9IE5VTEw7Ci0gICAgfQot
fQotCi1HTGJvb2xlYW4gRmVuY2U5Ojppc0ZlbmNlKCkKLXsKLSAgICAvLyBHTF9OVl9mZW5jZSBz
cGVjOgotICAgIC8vIEEgbmFtZSByZXR1cm5lZCBieSBHZW5GZW5jZXNOViwgYnV0IG5vdCB5ZXQg
c2V0IHZpYSBTZXRGZW5jZU5WLCBpcyBub3QgdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgZmVuY2Uu
Ci0gICAgcmV0dXJuIG1RdWVyeSAhPSBOVUxMOwotfQotCi12b2lkIEZlbmNlOTo6c2V0RmVuY2Uo
R0xlbnVtIGNvbmRpdGlvbikKLXsKLSAgICBpZiAoIW1RdWVyeSkKLSAgICB7Ci0gICAgICAgIG1R
dWVyeSA9IG1SZW5kZXJlci0+YWxsb2NhdGVFdmVudFF1ZXJ5KCk7Ci0gICAgICAgIGlmICghbVF1
ZXJ5KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgSFJFU1VMVCByZXN1bHQgPSBtUXVlcnkt
Pklzc3VlKEQzRElTU1VFX0VORCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQot
ICAgIHNldENvbmRpdGlvbihjb25kaXRpb24pOwotICAgIHNldFN0YXR1cyhHTF9GQUxTRSk7Ci19
Ci0KLUdMYm9vbGVhbiBGZW5jZTk6OnRlc3RGZW5jZSgpCi17Ci0gICAgaWYgKG1RdWVyeSA9PSBO
VUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
TiwgR0xfVFJVRSk7Ci0gICAgfQotCi0gICAgSFJFU1VMVCByZXN1bHQgPSBtUXVlcnktPkdldERh
dGEoTlVMTCwgMCwgRDNER0VUREFUQV9GTFVTSCk7Ci0KLSAgICBpZiAoZDNkOTo6aXNEZXZpY2VM
b3N0RXJyb3IocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJlci0+bm90aWZ5RGV2aWNl
TG9zdCgpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX1RS
VUUpOwotICAgIH0KLQotICAgIEFTU0VSVChyZXN1bHQgPT0gU19PSyB8fCByZXN1bHQgPT0gU19G
QUxTRSk7Ci0gICAgc2V0U3RhdHVzKHJlc3VsdCA9PSBTX09LKTsKLSAgICByZXR1cm4gZ2V0U3Rh
dHVzKCk7Ci19Ci0KLXZvaWQgRmVuY2U5OjpmaW5pc2hGZW5jZSgpCi17Ci0gICAgaWYgKG1RdWVy
eSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgfQotCi0gICAgd2hpbGUgKCF0ZXN0RmVuY2UoKSkKLSAgICB7Ci0gICAg
ICAgIFNsZWVwKDApOwotICAgIH0KLX0KLQotdm9pZCBGZW5jZTk6OmdldEZlbmNlaXYoR0xlbnVt
IHBuYW1lLCBHTGludCAqcGFyYW1zKQotewotICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0K
LQotICAgIHN3aXRjaCAocG5hbWUpCi0gICAgewotICAgICAgICBjYXNlIEdMX0ZFTkNFX1NUQVRV
U19OVjoKLSAgICAgICAgewotICAgICAgICAgICAgLy8gR0xfTlZfZmVuY2Ugc3BlYzoKLSAgICAg
ICAgICAgIC8vIE9uY2UgdGhlIHN0YXR1cyBvZiBhIGZlbmNlIGhhcyBiZWVuIGZpbmlzaGVkICh2
aWEgRmluaXNoRmVuY2VOVikgb3IgdGVzdGVkIGFuZCB0aGUgcmV0dXJuZWQgc3RhdHVzIGlzIFRS
VUUgKHZpYSBlaXRoZXIgVGVzdEZlbmNlTlYKLSAgICAgICAgICAgIC8vIG9yIEdldEZlbmNlaXZO
ViBxdWVyeWluZyB0aGUgRkVOQ0VfU1RBVFVTX05WKSwgdGhlIHN0YXR1cyByZW1haW5zIFRSVUUg
dW50aWwgdGhlIG5leHQgU2V0RmVuY2VOViBvZiB0aGUgZmVuY2UuCi0gICAgICAgICAgICBpZiAo
Z2V0U3RhdHVzKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcGFyYW1zWzBdID0g
R0xfVFJVRTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVF1ZXJ5LT5HZXREYXRhKE5VTEws
IDAsIDApOwotCi0gICAgICAgICAgICBpZiAoZDNkOTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwYXJhbXNbMF0gPSBHTF9UUlVFOwot
ICAgICAgICAgICAgICAgIG1SZW5kZXJlci0+bm90aWZ5RGV2aWNlTG9zdCgpOwotICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gU19PSyB8fCByZXN1bHQgPT0gU19GQUxT
RSk7Ci0gICAgICAgICAgICBzZXRTdGF0dXMocmVzdWx0ID09IFNfT0spOwotICAgICAgICAgICAg
cGFyYW1zWzBdID0gZ2V0U3RhdHVzKCk7Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgR0xfRkVOQ0VfQ09ORElUSU9OX05WOgotICAgICAgICAgICAgcGFyYW1z
WzBdID0gZ2V0Q29uZGl0aW9uKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZTkuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvRmVuY2U5LmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDlmMTc2NDFlNTE5YWI0Nzg0MDdlODBjY2JmZDI1MzgwYTNkY2M4YmMu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZTkuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDM5ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBGZW5jZTkuaDogRGVmaW5l
cyB0aGUgcng6OkZlbmNlOSBjbGFzcyB3aGljaCBpbXBsZW1lbnRzIHJ4OjpGZW5jZUltcGwuCi0K
LSNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0ZFTkNFOV9IXwotI2RlZmluZSBMSUJHTEVTVjJf
UkVOREVSRVJfRkVOQ0U5X0hfCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvRmVuY2VJ
bXBsLmgiCi0KLW5hbWVzcGFjZSByeAotewotY2xhc3MgUmVuZGVyZXI5OwotCi1jbGFzcyBGZW5j
ZTkgOiBwdWJsaWMgRmVuY2VJbXBsCi17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBGZW5jZTko
cng6OlJlbmRlcmVyOSAqcmVuZGVyZXIpOwotICAgIHZpcnR1YWwgfkZlbmNlOSgpOwotCi0gICAg
R0xib29sZWFuIGlzRmVuY2UoKTsKLSAgICB2b2lkIHNldEZlbmNlKEdMZW51bSBjb25kaXRpb24p
OwotICAgIEdMYm9vbGVhbiB0ZXN0RmVuY2UoKTsKLSAgICB2b2lkIGZpbmlzaEZlbmNlKCk7Ci0g
ICAgdm9pZCBnZXRGZW5jZWl2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7Ci0KLSAgcHJp
dmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRmVuY2U5KTsKLQotICAgIHJ4OjpS
ZW5kZXJlcjkgKm1SZW5kZXJlcjsKLSAgICBJRGlyZWN0M0RRdWVyeTkgKm1RdWVyeTsKLX07Ci0K
LX0KLQotI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9GRU5DRTlfSF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW1hZ2UxMS5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ltYWdl
MTEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWM4OTIyZDA3M2QwYTQxYTc5
MDQ2NGJmMmE4YWY0YWMzOTQxYzI0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvSW1hZ2UxMS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NTcgKzAsMCBAQAotI2luY2x1ZGUg
InByZWNvbXBpbGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gSW1hZ2UxMS5oOiBJbXBsZW1lbnRz
IHRoZSByeDo6SW1hZ2UxMSBjbGFzcywgd2hpY2ggYWN0cyBhcyB0aGUgaW50ZXJmYWNlIHRvCi0v
LyB0aGUgYWN0dWFsIHVuZGVybHlpbmcgcmVzb3VyY2VzIG9mIGEgVGV4dHVyZQotCi0jaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyMTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvSW1hZ2UxMS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJl
U3RvcmFnZTExLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4u
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL3JlbmRlcmVyMTFfdXRpbHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvZ2VuZXJhdGVtaXAuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLUltYWdlMTE6OkltYWdlMTEo
KQotewotICAgIG1TdGFnaW5nVGV4dHVyZSA9IE5VTEw7Ci0gICAgbVJlbmRlcmVyID0gTlVMTDsK
LSAgICBtRFhHSUZvcm1hdCA9IERYR0lfRk9STUFUX1VOS05PV047Ci19Ci0KLUltYWdlMTE6On5J
bWFnZTExKCkKLXsKLSAgICBpZiAobVN0YWdpbmdUZXh0dXJlKQotICAgIHsKLSAgICAgICAgbVN0
YWdpbmdUZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgfQotfQotCi1JbWFnZTExICpJbWFnZTExOjpt
YWtlSW1hZ2UxMShJbWFnZSAqaW1nKQotewotICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKHJ4
OjpJbWFnZTExKiwgaW1nKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHJ4OjpJbWFnZTExKj4o
aW1nKTsKLX0KLQotdm9pZCBJbWFnZTExOjpnZW5lcmF0ZU1pcG1hcChJbWFnZTExICpkZXN0LCBJ
bWFnZTExICpzcmMpCi17Ci0gICAgQVNTRVJUKHNyYy0+Z2V0RFhHSUZvcm1hdCgpID09IGRlc3Qt
PmdldERYR0lGb3JtYXQoKSk7Ci0gICAgQVNTRVJUKHNyYy0+Z2V0V2lkdGgoKSA9PSAxIHx8IHNy
Yy0+Z2V0V2lkdGgoKSAvIDIgPT0gZGVzdC0+Z2V0V2lkdGgoKSk7Ci0gICAgQVNTRVJUKHNyYy0+
Z2V0SGVpZ2h0KCkgPT0gMSB8fCBzcmMtPmdldEhlaWdodCgpIC8gMiA9PSBkZXN0LT5nZXRIZWln
aHQoKSk7Ci0KLSAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgZGVzdE1hcHBlZCwgc3JjTWFw
cGVkOwotICAgIGRlc3QtPm1hcChEM0QxMV9NQVBfV1JJVEUsICZkZXN0TWFwcGVkKTsKLSAgICBz
cmMtPm1hcChEM0QxMV9NQVBfUkVBRCwgJnNyY01hcHBlZCk7Ci0KLSAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyICpzb3VyY2VEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFy
Kj4oc3JjTWFwcGVkLnBEYXRhKTsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0YSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRlc3RNYXBwZWQucERhdGEpOwotCi0gICAgaWYg
KHNvdXJjZURhdGEgJiYgZGVzdERhdGEpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHNyYy0+Z2V0
RFhHSUZvcm1hdCgpKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4
QjhBOF9VTk9STToKLSAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOgot
ICAgICAgICAgICAgR2VuZXJhdGVNaXA8UjhHOEI4QTg+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5n
ZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVz
dE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERY
R0lfRk9STUFUX0E4X1VOT1JNOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8QTg+KHNyYy0+Z2V0
V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNo
LCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1VOT1JNOgotICAgICAgICAgICAgR2VuZXJhdGVN
aXA8Ujg+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3Jj
TWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9B
VDoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPEEzMkIzMkczMlIzMkY+KHNyYy0+Z2V0V2lkdGgo
KSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0
RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVDoKLSAgICAgICAgICAgIEdlbmVyYXRl
TWlwPFIzMkczMkIzMkY+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNl
RGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIx
NkExNl9GTE9BVDoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPEExNkIxNkcxNlIxNkY+KHNyYy0+
Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1Bp
dGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfVU5PUk06Ci0gICAgICAgICAgICBHZW5l
cmF0ZU1pcDxSOEc4PihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURh
dGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfRkxPQVQ6
Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxSMTZGPihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0
SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RN
YXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SMTZHMTZfRkxPQVQ6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxSMTZHMTZGPihz
cmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5S
b3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQ6Ci0gICAgICAgICAgICBH
ZW5lcmF0ZU1pcDxSMzJGPihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJj
ZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJf
RkxPQVQ6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxSMzJHMzJGPihzcmMtPmdldFdpZHRoKCks
IHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERh
dGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotCi0gICAgICAgIGRlc3QtPnVubWFwKCk7Ci0gICAgICAgIHNyYy0+dW5tYXAo
KTsKLSAgICB9Ci0KLSAgICBkZXN0LT5tYXJrRGlydHkoKTsKLX0KLQotYm9vbCBJbWFnZTExOjpp
c0RpcnR5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gKG1TdGFnaW5nVGV4dHVyZSAmJiBtRGlydHkp
OwotfQotCi1ib29sIEltYWdlMTE6OnVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBUZXh0dXJlU3RvcmFnZTExXzJE
ICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFnZTExXzJEOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8y
RChzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgcmV0dXJuIHN0b3JhZ2UxMS0+
dXBkYXRlU3VicmVzb3VyY2VMZXZlbChnZXRTdGFnaW5nVGV4dHVyZSgpLCBnZXRTdGFnaW5nU3Vi
cmVzb3VyY2UoKSwgbGV2ZWwsIDAsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOwot
fQotCi1ib29sIEltYWdlMTE6OnVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VD
dWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBUZXh0dXJlU3Rv
cmFnZTExX0N1YmUgKnN0b3JhZ2UxMSA9IFRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6bWFrZVRleHR1
cmVTdG9yYWdlMTFfQ3ViZShzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgcmV0
dXJuIHN0b3JhZ2UxMS0+dXBkYXRlU3VicmVzb3VyY2VMZXZlbChnZXRTdGFnaW5nVGV4dHVyZSgp
LCBnZXRTdGFnaW5nU3VicmVzb3VyY2UoKSwgbGV2ZWwsIGZhY2UsIHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQpOwotfQotCi1ib29sIEltYWdlMTE6OnJlZGVmaW5lKFJlbmRlcmVyICpy
ZW5kZXJlciwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBib29sIGZvcmNlUmVsZWFzZSkKLXsKLSAgICBpZiAobVdpZHRoICE9IHdpZHRoIHx8Ci0g
ICAgICAgIG1IZWlnaHQgIT0gaGVpZ2h0IHx8Ci0gICAgICAgIG1JbnRlcm5hbEZvcm1hdCAhPSBp
bnRlcm5hbGZvcm1hdCB8fAotICAgICAgICBmb3JjZVJlbGVhc2UpCi0gICAgewotICAgICAgICBt
UmVuZGVyZXIgPSBSZW5kZXJlcjExOjptYWtlUmVuZGVyZXIxMShyZW5kZXJlcik7Ci0KLSAgICAg
ICAgbVdpZHRoID0gd2lkdGg7Ci0gICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIG1J
bnRlcm5hbEZvcm1hdCA9IGludGVybmFsZm9ybWF0OwotICAgICAgICAvLyBjb21wdXRlIHRoZSBk
M2QgZm9ybWF0IHRoYXQgd2lsbCBiZSB1c2VkCi0gICAgICAgIG1EWEdJRm9ybWF0ID0gZ2xfZDNk
MTE6OkNvbnZlcnRUZXh0dXJlRm9ybWF0KGludGVybmFsZm9ybWF0KTsKLSAgICAgICAgbUFjdHVh
bEZvcm1hdCA9IGQzZDExX2dsOjpDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KG1EWEdJRm9y
bWF0KTsKLQotICAgICAgICBpZiAobVN0YWdpbmdUZXh0dXJlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBtU3RhZ2luZ1RleHR1cmUtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1TdGFnaW5nVGV4
dHVyZSA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBJbWFnZTExOjppc1JlbmRlcmFi
bGVGb3JtYXQoKSBjb25zdAotewotICAgIHJldHVybiBUZXh0dXJlU3RvcmFnZTExOjpJc1RleHR1
cmVGb3JtYXRSZW5kZXJhYmxlKG1EWEdJRm9ybWF0KTsKLX0KLQotRFhHSV9GT1JNQVQgSW1hZ2Ux
MTo6Z2V0RFhHSUZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgLy8gdGhpcyBzaG91bGQgb25seSBoYXBw
ZW4gaWYgdGhlIGltYWdlIGhhc24ndCBiZWVuIHJlZGVmaW5lZCBmaXJzdAotICAgIC8vIHdoaWNo
IHdvdWxkIGJlIGEgYnVnIGJ5IHRoZSBjYWxsZXIKLSAgICBBU1NFUlQobURYR0lGb3JtYXQgIT0g
RFhHSV9GT1JNQVRfVU5LTk9XTik7Ci0KLSAgICByZXR1cm4gbURYR0lGb3JtYXQ7Ci19Ci0KLS8v
IFN0b3JlIHRoZSBwaXhlbCByZWN0YW5nbGUgZGVzaWduYXRlZCBieSB4b2Zmc2V0LHlvZmZzZXQs
d2lkdGgsaGVpZ2h0IHdpdGggcGl4ZWxzIHN0b3JlZCBhcyBmb3JtYXQvdHlwZSBhdCBpbnB1dAot
Ly8gaW50byB0aGUgdGFyZ2V0IHBpeGVsIHJlY3RhbmdsZS4KLXZvaWQgSW1hZ2UxMTo6bG9hZERh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29u
c3Qgdm9pZCAqaW5wdXQpCi17Ci0gICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZElt
YWdlOwotICAgIEhSRVNVTFQgcmVzdWx0ID0gbWFwKEQzRDExX01BUF9XUklURSwgJm1hcHBlZElt
YWdlKTsKLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIoIkNvdWxk
IG5vdCBtYXAgaW1hZ2UgZm9yIGxvYWRpbmcuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgCi0gICAgR0xzaXplaSBpbnB1dFBpdGNoID0gZ2w6OkNvbXB1dGVQaXRjaCh3aWR0aCwgbUlu
dGVybmFsRm9ybWF0LCB1bnBhY2tBbGlnbm1lbnQpOwotICAgIHNpemVfdCBwaXhlbFNpemUgPSBk
M2QxMTo6Q29tcHV0ZVBpeGVsU2l6ZUJpdHMobURYR0lGb3JtYXQpIC8gODsKLSAgICB2b2lkKiBv
ZmZzZXRNYXBwZWREYXRhID0gKHZvaWQqKSgoQllURSAqKW1hcHBlZEltYWdlLnBEYXRhICsgKHlv
ZmZzZXQgKiBtYXBwZWRJbWFnZS5Sb3dQaXRjaCArIHhvZmZzZXQgKiBwaXhlbFNpemUpKTsKLQot
ICAgIHN3aXRjaCAobUludGVybmFsRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfQUxQSEE4
X0VYVDoKLSAgICAgICAgbG9hZEFscGhhRGF0YVRvTmF0aXZlKHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0VYVDoKLSAgICAgICAgbG9h
ZEx1bWluYW5jZURhdGFUb05hdGl2ZU9yQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEsIGZhbHNlKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FMUEhBMzJGX0VYVDoKLSAgICAgICAgbG9hZEFs
cGhhRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBw
ZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9MVU1JTkFOQ0UzMkZfRVhUOgotICAgICAgICBsb2FkTHVtaW5hbmNlRmxvYXRE
YXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5S
b3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9BTFBIQTE2Rl9FWFQ6Ci0gICAgICAgIGxvYWRBbHBoYUhhbGZGbG9hdERhdGFUb1JHQkEod2lk
dGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZz
ZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2
Rl9FWFQ6Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFw
cGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0FMUEhB
OF9FWFQ6Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYURhdGFUb05hdGl2ZU9yQkdSQSh3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNl
dE1hcHBlZERhdGEsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlO
QU5DRV9BTFBIQTMyRl9FWFQ6Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YVRv
UkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0
Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVN
SU5BTkNFX0FMUEhBMTZGX0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0
RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2Uu
Um93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfUkdCOF9PRVM6Ci0gICAgICAgIGxvYWRSR0JVQnl0ZURhdGFUb1JHQkEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWRE
YXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQjU2NToKLSAgICAgICAgbG9h
ZFJHQjU2NURhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBl
ZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX1JHQkE4X09FUzoKLSAgICAgICAgbG9hZFJHQkFVQnl0ZURhdGFUb05hdGl2ZSh3
aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9m
ZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQTQ6Ci0g
ICAgICAgIGxvYWRSR0JBNDQ0NERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQjVfQTE6Ci0gICAgICAgIGxvYWRSR0JBNTU1MURhdGFU
b1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1Bp
dGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JH
UkE4X0VYVDoKLSAgICAgICAgbG9hZEJHUkFEYXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0IzMkZfRVhUOgotICAgICAgICBsb2FkUkdC
RmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJ
bWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9SR0IxNkZfRVhUOgotICAgICAgICBsb2FkUkdCSGFsZkZsb2F0RGF0YVRvUkdCQSh3
aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9m
ZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQTMyRl9F
WFQ6Ci0gICAgICAgIGxvYWRSR0JBRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0JBMTZGX0VYVDoKLSAgICAgICAgbG9hZFJH
QkFIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBt
YXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgCi0gICAgfQotCi0gICAgdW5tYXAoKTsKLX0K
LQotdm9pZCBJbWFnZTExOjpsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0KQotewotICAgIEFTU0VSVCh4b2Zmc2V0
ICUgNCA9PSAwKTsKLSAgICBBU1NFUlQoeW9mZnNldCAlIDQgPT0gMCk7Ci0KLSAgICBEM0QxMV9N
QVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkSW1hZ2U7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBtYXAo
RDNEMTFfTUFQX1dSSVRFLCAmbWFwcGVkSW1hZ2UpOwotICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
LSAgICB7Ci0gICAgICAgIEVSUigiQ291bGQgbm90IG1hcCBpbWFnZSBmb3IgbG9hZGluZy4iKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFNpemUgY29tcHV0YXRpb24gYXNzdW1l
cyBhIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0Ci0gICAgc2l6ZV90IGJsb2Nr
U2l6ZSA9IGQzZDExOjpDb21wdXRlQmxvY2tTaXplQml0cyhtRFhHSUZvcm1hdCkgLyA4OwotICAg
IHZvaWQqIG9mZnNldE1hcHBlZERhdGEgPSAodm9pZCopKChCWVRFICopbWFwcGVkSW1hZ2UucERh
dGEgKyAoKHlvZmZzZXQgLyA0KSAqIG1hcHBlZEltYWdlLlJvd1BpdGNoICsgKHhvZmZzZXQgLyA0
KSAqIGJsb2NrU2l6ZSkpOwotCi0gICAgR0xzaXplaSBpbnB1dFNpemUgPSBnbDo6Q29tcHV0ZUNv
bXByZXNzZWRTaXplKHdpZHRoLCBoZWlnaHQsIG1JbnRlcm5hbEZvcm1hdCk7Ci0gICAgR0xzaXpl
aSBpbnB1dFBpdGNoID0gZ2w6OkNvbXB1dGVDb21wcmVzc2VkUGl0Y2god2lkdGgsIG1JbnRlcm5h
bEZvcm1hdCk7Ci0gICAgaW50IHJvd3MgPSBpbnB1dFNpemUgLyBpbnB1dFBpdGNoOwotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgcm93czsgKytpKQotICAgIHsKLSAgICAgICAgbWVtY3B5KCh2b2lk
KikoKEJZVEUqKW9mZnNldE1hcHBlZERhdGEgKyBpICogbWFwcGVkSW1hZ2UuUm93UGl0Y2gpLCAo
dm9pZCopKChCWVRFKilpbnB1dCArIGkgKiBpbnB1dFBpdGNoKSwgaW5wdXRQaXRjaCk7Ci0gICAg
fQotCi0gICAgdW5tYXAoKTsKLX0KLQotdm9pZCBJbWFnZTExOjpjb3B5KEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSkKLXsKLSAgICBnbDo6UmVuZGVyYnVmZmVy
ICpjb2xvcmJ1ZmZlciA9IHNvdXJjZS0+Z2V0UmVhZENvbG9yYnVmZmVyKCk7Ci0KLSAgICBpZiAo
Y29sb3JidWZmZXIgJiYgY29sb3JidWZmZXItPmdldEFjdHVhbEZvcm1hdCgpID09IChHTHVpbnQp
bUFjdHVhbEZvcm1hdCkKLSAgICB7Ci0gICAgICAgIC8vIE5vIGNvbnZlcnNpb24gbmVlZGVkLS0g
dXNlIGNvcHliYWNrIGZhc3RwYXRoCi0gICAgICAgIElEM0QxMVRleHR1cmUyRCAqY29sb3JCdWZm
ZXJUZXh0dXJlID0gTlVMTDsKLSAgICAgICAgdW5zaWduZWQgaW50IHN1YnJlc291cmNlSW5kZXgg
PSAwOwotCi0gICAgICAgIGlmIChtUmVuZGVyZXItPmdldFJlbmRlclRhcmdldFJlc291cmNlKGNv
bG9yYnVmZmVyLCAmc3VicmVzb3VyY2VJbmRleCwgJmNvbG9yQnVmZmVyVGV4dHVyZSkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleHR1cmVEZXNjOwotICAg
ICAgICAgICAgY29sb3JCdWZmZXJUZXh0dXJlLT5HZXREZXNjKCZ0ZXh0dXJlRGVzYyk7Ci0KLSAg
ICAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsK
LSAgICAgICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmRldmljZUNvbnRleHQgPSBtUmVuZGVy
ZXItPmdldERldmljZUNvbnRleHQoKTsKLQotICAgICAgICAgICAgSUQzRDExVGV4dHVyZTJEKiBz
cmNUZXggPSBOVUxMOwotICAgICAgICAgICAgaWYgKHRleHR1cmVEZXNjLlNhbXBsZURlc2MuQ291
bnQgPiAxKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEQzRDExX1RFWFRVUkUyRF9E
RVNDIHJlc29sdmVEZXNjOwotICAgICAgICAgICAgICAgIHJlc29sdmVEZXNjLldpZHRoID0gdGV4
dHVyZURlc2MuV2lkdGg7Ci0gICAgICAgICAgICAgICAgcmVzb2x2ZURlc2MuSGVpZ2h0ID0gdGV4
dHVyZURlc2MuSGVpZ2h0OwotICAgICAgICAgICAgICAgIHJlc29sdmVEZXNjLk1pcExldmVscyA9
IDE7Ci0gICAgICAgICAgICAgICAgcmVzb2x2ZURlc2MuQXJyYXlTaXplID0gMTsKLSAgICAgICAg
ICAgICAgICByZXNvbHZlRGVzYy5Gb3JtYXQgPSB0ZXh0dXJlRGVzYy5Gb3JtYXQ7Ci0gICAgICAg
ICAgICAgICAgcmVzb2x2ZURlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7Ci0gICAgICAgICAgICAg
ICAgcmVzb2x2ZURlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKLSAgICAgICAgICAgICAgICBy
ZXNvbHZlRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7Ci0gICAgICAgICAgICAgICAg
cmVzb2x2ZURlc2MuQmluZEZsYWdzID0gMDsKLSAgICAgICAgICAgICAgICByZXNvbHZlRGVzYy5D
UFVBY2Nlc3NGbGFncyA9IDA7Ci0gICAgICAgICAgICAgICAgcmVzb2x2ZURlc2MuTWlzY0ZsYWdz
ID0gMDsKLQotICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVU
ZXh0dXJlMkQoJnJlc29sdmVEZXNjLCBOVUxMLCAmc3JjVGV4KTsKLSAgICAgICAgICAgICAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBFUlIoIkZhaWxlZCB0byBjcmVhdGUgcmVzb2x2ZSB0ZXh0dXJlIGZvciBJbWFnZTExOjpjb3B5
LCBIUkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBkZXZpY2VDb250ZXh0LT5SZXNv
bHZlU3VicmVzb3VyY2Uoc3JjVGV4LCAwLCBjb2xvckJ1ZmZlclRleHR1cmUsIHN1YnJlc291cmNl
SW5kZXgsIHRleHR1cmVEZXNjLkZvcm1hdCk7Ci0gICAgICAgICAgICAgICAgc3VicmVzb3VyY2VJ
bmRleCA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgc3JjVGV4ID0gY29sb3JCdWZmZXJUZXh0dXJlOwotICAgICAgICAg
ICAgICAgIHNyY1RleC0+QWRkUmVmKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEQz
RDExX0JPWCBzcmNCb3g7Ci0gICAgICAgICAgICBzcmNCb3gubGVmdCA9IHg7Ci0gICAgICAgICAg
ICBzcmNCb3gucmlnaHQgPSB4ICsgd2lkdGg7Ci0gICAgICAgICAgICBzcmNCb3gudG9wID0geTsK
LSAgICAgICAgICAgIHNyY0JveC5ib3R0b20gPSB5ICsgaGVpZ2h0OwotICAgICAgICAgICAgc3Jj
Qm94LmZyb250ID0gMDsKLSAgICAgICAgICAgIHNyY0JveC5iYWNrID0gMTsKLQotICAgICAgICAg
ICAgZGV2aWNlQ29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKG1TdGFnaW5nVGV4dHVyZSwg
MCwgeG9mZnNldCwgeW9mZnNldCwgMCwgc3JjVGV4LCBzdWJyZXNvdXJjZUluZGV4LCAmc3JjQm94
KTsKLQotICAgICAgICAgICAgc3JjVGV4LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBjb2xvckJ1
ZmZlclRleHR1cmUtPlJlbGVhc2UoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAg
ewotICAgICAgICAvLyBUaGlzIGZvcm1hdCByZXF1aXJlcyBjb252ZXJzaW9uLCBzbyB3ZSBtdXN0
IGNvcHkgdGhlIHRleHR1cmUgdG8gc3RhZ2luZyBhbmQgbWFudWFsbHkgY29udmVydCB2aWEgcmVh
ZFBpeGVscwotICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkSW1hZ2U7Ci0g
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbWFwKEQzRDExX01BUF9XUklURSwgJm1hcHBlZEltYWdl
KTsKLQotICAgICAgICAvLyBkZXRlcm1pbmUgdGhlIG9mZnNldCBjb29yZGluYXRlIGludG8gdGhl
IGRlc3RpbmF0aW9uIGJ1ZmZlcgotICAgICAgICBHTHNpemVpIHJvd09mZnNldCA9IGdsOjpDb21w
dXRlUGl4ZWxTaXplKG1BY3R1YWxGb3JtYXQpICogeG9mZnNldDsKLSAgICAgICAgdm9pZCAqZGF0
YU9mZnNldCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihtYXBwZWRJbWFnZS5wRGF0YSkg
KyBtYXBwZWRJbWFnZS5Sb3dQaXRjaCAqIHlvZmZzZXQgKyByb3dPZmZzZXQ7Ci0KLSAgICAgICAg
bVJlbmRlcmVyLT5yZWFkUGl4ZWxzKHNvdXJjZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZ2w6OkV4
dHJhY3RGb3JtYXQobUludGVybmFsRm9ybWF0KSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6RXh0cmFjdFR5cGUobUludGVybmFsRm9ybWF0KSwgbWFwcGVkSW1hZ2UuUm93UGl0
Y2gsIGZhbHNlLCA0LCBkYXRhT2Zmc2V0KTsKLQotICAgICAgICB1bm1hcCgpOwotICAgIH0KLX0K
LQotSUQzRDExVGV4dHVyZTJEICpJbWFnZTExOjpnZXRTdGFnaW5nVGV4dHVyZSgpCi17Ci0gICAg
Y3JlYXRlU3RhZ2luZ1RleHR1cmUoKTsKLQotICAgIHJldHVybiBtU3RhZ2luZ1RleHR1cmU7Ci19
Ci0KLXVuc2lnbmVkIGludCBJbWFnZTExOjpnZXRTdGFnaW5nU3VicmVzb3VyY2UoKQotewotICAg
IGNyZWF0ZVN0YWdpbmdUZXh0dXJlKCk7Ci0KLSAgICByZXR1cm4gbVN0YWdpbmdTdWJyZXNvdXJj
ZTsKLX0KLQotdm9pZCBJbWFnZTExOjpjcmVhdGVTdGFnaW5nVGV4dHVyZSgpCi17Ci0gICAgaWYg
KG1TdGFnaW5nVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJ
RDNEMTFUZXh0dXJlMkQgKm5ld1RleHR1cmUgPSBOVUxMOwotICAgIGludCBsb2RPZmZzZXQgPSAx
OwotICAgIGNvbnN0IERYR0lfRk9STUFUIGR4Z2lGb3JtYXQgPSBnZXREWEdJRm9ybWF0KCk7Ci0g
ICAgQVNTRVJUKCFkM2QxMTo6SXNEZXB0aFN0ZW5jaWxGb3JtYXQoZHhnaUZvcm1hdCkpOyAvLyBX
ZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgZm9yIGRlcHRoIHRleHR1cmVzCi0KLSAgICBpZiAobVdp
ZHRoICE9IDAgJiYgbUhlaWdodCAhPSAwKQotICAgIHsKLSAgICAgICAgR0xzaXplaSB3aWR0aCA9
IG1XaWR0aDsKLSAgICAgICAgR0xzaXplaSBoZWlnaHQgPSBtSGVpZ2h0OwotCi0gICAgICAgIC8v
IGFkanVzdCBzaXplIGlmIG5lZWRlZCBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlcwotICAgICAgICBn
bDo6TWFrZVZhbGlkU2l6ZShmYWxzZSwgZDNkMTE6OklzQ29tcHJlc3NlZChkeGdpRm9ybWF0KSwg
JndpZHRoLCAmaGVpZ2h0LCAmbG9kT2Zmc2V0KTsKLSAgICAgICAgSUQzRDExRGV2aWNlICpkZXZp
Y2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0gICAgICAgIEQzRDExX1RFWFRVUkUyRF9E
RVNDIGRlc2M7Ci0gICAgICAgIGRlc2MuV2lkdGggPSB3aWR0aDsKLSAgICAgICAgZGVzYy5IZWln
aHQgPSBoZWlnaHQ7Ci0gICAgICAgIGRlc2MuTWlwTGV2ZWxzID0gbG9kT2Zmc2V0ICsgMTsKLSAg
ICAgICAgZGVzYy5BcnJheVNpemUgPSAxOwotICAgICAgICBkZXNjLkZvcm1hdCA9IGR4Z2lGb3Jt
YXQ7Ci0gICAgICAgIGRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7Ci0gICAgICAgIGRlc2MuU2Ft
cGxlRGVzYy5RdWFsaXR5ID0gMDsKLSAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX1NU
QUdJTkc7Ci0gICAgICAgIGRlc2MuQmluZEZsYWdzID0gMDsKLSAgICAgICAgZGVzYy5DUFVBY2Nl
c3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfUkVBRCB8IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7
Ci0gICAgICAgIGRlc2MuTWlzY0ZsYWdzID0gMDsKLQotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXNjLCBOVUxMLCAmbmV3VGV4dHVyZSk7Ci0KLSAg
ICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQo
cmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICAgICAgRVJSKCJDcmVhdGluZyBpbWFn
ZSBmYWlsZWQuIik7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbVN0YWdpbmdUZXh0dXJlID0gbmV3VGV4dHVy
ZTsKLSAgICBtU3RhZ2luZ1N1YnJlc291cmNlID0gRDNEMTFDYWxjU3VicmVzb3VyY2UobG9kT2Zm
c2V0LCAwLCBsb2RPZmZzZXQgKyAxKTsKLSAgICBtRGlydHkgPSBmYWxzZTsKLX0KLQotSFJFU1VM
VCBJbWFnZTExOjptYXAoRDNEMTFfTUFQIG1hcFR5cGUsIEQzRDExX01BUFBFRF9TVUJSRVNPVVJD
RSAqbWFwKQotewotICAgIGNyZWF0ZVN0YWdpbmdUZXh0dXJlKCk7Ci0KLSAgICBIUkVTVUxUIHJl
c3VsdCA9IEVfRkFJTDsKLQotICAgIGlmIChtU3RhZ2luZ1RleHR1cmUpCi0gICAgewotICAgICAg
ICBJRDNEMTFEZXZpY2VDb250ZXh0ICpkZXZpY2VDb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZp
Y2VDb250ZXh0KCk7Ci0gICAgICAgIHJlc3VsdCA9IGRldmljZUNvbnRleHQtPk1hcChtU3RhZ2lu
Z1RleHR1cmUsIG1TdGFnaW5nU3VicmVzb3VyY2UsIG1hcFR5cGUsIDAsIG1hcCk7Ci0KLSAgICAg
ICAgLy8gdGhpcyBjYW4gZmFpbCBpZiB0aGUgZGV2aWNlIGlzIHJlbW92ZWQgKGZyb20gVERSKQot
ICAgICAgICBpZiAoZDNkMTE6OmlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1SZW5kZXJlci0+bm90aWZ5RGV2aWNlTG9zdCgpOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtRGlydHkgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotdm9pZCBJbWFnZTExOjp1bm1hcCgpCi17Ci0gICAgaWYgKG1TdGFnaW5nVGV4dHVyZSkK
LSAgICB7Ci0gICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmRldmljZUNvbnRleHQgPSBtUmVu
ZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKLSAgICAgICAgZGV2aWNlQ29udGV4dC0+VW5tYXAo
bVN0YWdpbmdUZXh0dXJlLCBtU3RhZ2luZ1N1YnJlc291cmNlKTsKLSAgICB9Ci19Ci0KLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
SW1hZ2UxMS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9JbWFnZTExLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExYTY0OTJkYzg2M2E5
MTY0MTliNWJjZDE2NGNhN2Q3YmI1ZDk1ZGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9JbWFnZTExLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vLwotLy8g
Q29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgotLy8KLQotLy8gSW1hZ2UxMS5oOiBEZWZpbmVzIHRoZSByeDo6SW1hZ2UxMSBjbGFzcywgd2hp
Y2ggYWN0cyBhcyB0aGUgaW50ZXJmYWNlIHRvCi0vLyB0aGUgYWN0dWFsIHVuZGVybHlpbmcgcmVz
b3VyY2VzIG9mIGEgVGV4dHVyZQotCi0jaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9JTUFHRTEx
X0hfCi0jZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9JTUFHRTExX0hfCi0KLSNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvSW1hZ2UuaCIKLQotI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgot
Ci1uYW1lc3BhY2UgZ2wKLXsKLWNsYXNzIEZyYW1lYnVmZmVyOwotfQotCi1uYW1lc3BhY2UgcngK
LXsKLWNsYXNzIFJlbmRlcmVyOwotY2xhc3MgUmVuZGVyZXIxMTsKLWNsYXNzIFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlMkQ7Ci1jbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU7Ci0KLWNs
YXNzIEltYWdlMTEgOiBwdWJsaWMgSW1hZ2UKLXsKLSAgcHVibGljOgotICAgIEltYWdlMTEoKTsK
LSAgICB2aXJ0dWFsIH5JbWFnZTExKCk7Ci0KLSAgICBzdGF0aWMgSW1hZ2UxMSAqbWFrZUltYWdl
MTEoSW1hZ2UgKmltZyk7Ci0KLSAgICBzdGF0aWMgdm9pZCBnZW5lcmF0ZU1pcG1hcChJbWFnZTEx
ICpkZXN0LCBJbWFnZTExICpzcmMpOwotCi0gICAgdmlydHVhbCBib29sIGlzRGlydHkoKSBjb25z
dDsKLQotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlMkQgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVT
dXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgaW50IGZhY2UsIGlu
dCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpOwotCi0gICAgdmlydHVhbCBib29sIHJlZGVmaW5lKFJlbmRlcmVyICpyZW5k
ZXJlciwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBib29sIGZvcmNlUmVsZWFzZSk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJhYmxlRm9y
bWF0KCkgY29uc3Q7Ci0gICAgRFhHSV9GT1JNQVQgZ2V0RFhHSUZvcm1hdCgpIGNvbnN0OwotICAg
IAotICAgIHZpcnR1YWwgdm9pZCBsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgIEdMaW50
IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQpOwotICAgIHZpcnR1YWwgdm9pZCBs
b2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCB2b2lkICppbnB1dCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29weShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgZ2w6OkZyYW1lYnVmZmVyICpzb3VyY2UpOwotCi0gIHByb3RlY3RlZDoKLSAg
ICBIUkVTVUxUIG1hcChEM0QxMV9NQVAgbWFwVHlwZSwgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNF
ICptYXApOwotICAgIHZvaWQgdW5tYXAoKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihJbWFnZTExKTsKLQotICAgIElEM0QxMVRleHR1cmUyRCAqZ2V0U3RhZ2lu
Z1RleHR1cmUoKTsKLSAgICB1bnNpZ25lZCBpbnQgZ2V0U3RhZ2luZ1N1YnJlc291cmNlKCk7Ci0g
ICAgdm9pZCBjcmVhdGVTdGFnaW5nVGV4dHVyZSgpOwotCi0gICAgUmVuZGVyZXIxMSAqbVJlbmRl
cmVyOwotCi0gICAgRFhHSV9GT1JNQVQgbURYR0lGb3JtYXQ7Ci0gICAgSUQzRDExVGV4dHVyZTJE
ICptU3RhZ2luZ1RleHR1cmU7Ci0gICAgdW5zaWduZWQgaW50IG1TdGFnaW5nU3VicmVzb3VyY2U7
Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfSU1BR0UxMV9IXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9J
bWFnZTkuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9JbWFnZTkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2RjYzU5YjZiZDk5
OTg5OWVjOGMwZDllMmZjMmVjYmFiMWI3YmYyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvSW1hZ2U5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDczMiArMCwwIEBACi0jaW5j
bHVkZSAicHJlY29tcGlsZWQuaCIKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIEltYWdlOS5jcHA6
IEltcGxlbWVudHMgdGhlIHJ4OjpJbWFnZTkgY2xhc3MsIHdoaWNoIGFjdHMgYXMgdGhlIGludGVy
ZmFjZSB0bwotLy8gdGhlIGFjdHVhbCB1bmRlcmx5aW5nIHN1cmZhY2VzIG9mIGEgVGV4dHVyZS4K
LQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZTkuaCIKLQotI2luY2x1ZGUgImxp
YkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9SZW5kZXJlcjkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFy
Z2V0OS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZTkuaCIK
LQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9yZW5kZXJlcjlfdXRpbHMuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZ2VuZXJhdGVtaXAuaCIKLQotbmFtZXNwYWNlIHJ4Ci17
Ci0KLUltYWdlOTo6SW1hZ2U5KCkKLXsKLSAgICBtU3VyZmFjZSA9IE5VTEw7Ci0gICAgbVJlbmRl
cmVyID0gTlVMTDsKLQotICAgIG1EM0RQb29sID0gRDNEUE9PTF9TWVNURU1NRU07Ci0gICAgbUQz
REZvcm1hdCA9IEQzREZNVF9VTktOT1dOOwotfQotCi1JbWFnZTk6On5JbWFnZTkoKQotewotICAg
IGlmIChtU3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIG1TdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAg
fQotfQotCi12b2lkIEltYWdlOTo6Z2VuZXJhdGVNaXAoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RT
dXJmYWNlLCBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlU3VyZmFjZSkKLXsKLSAgICBEM0RTVVJG
QUNFX0RFU0MgZGVzdERlc2M7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXN0U3VyZmFjZS0+R2V0
RGVzYygmZGVzdERlc2MpOwotICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICBE
M0RTVVJGQUNFX0RFU0Mgc291cmNlRGVzYzsKLSAgICByZXN1bHQgPSBzb3VyY2VTdXJmYWNlLT5H
ZXREZXNjKCZzb3VyY2VEZXNjKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0g
ICAgQVNTRVJUKHNvdXJjZURlc2MuRm9ybWF0ID09IGRlc3REZXNjLkZvcm1hdCk7Ci0gICAgQVNT
RVJUKHNvdXJjZURlc2MuV2lkdGggPT0gMSB8fCBzb3VyY2VEZXNjLldpZHRoIC8gMiA9PSBkZXN0
RGVzYy5XaWR0aCk7Ci0gICAgQVNTRVJUKHNvdXJjZURlc2MuSGVpZ2h0ID09IDEgfHwgc291cmNl
RGVzYy5IZWlnaHQgLyAyID09IGRlc3REZXNjLkhlaWdodCk7Ci0KLSAgICBEM0RMT0NLRURfUkVD
VCBzb3VyY2VMb2NrZWQgPSB7MH07Ci0gICAgcmVzdWx0ID0gc291cmNlU3VyZmFjZS0+TG9ja1Jl
Y3QoJnNvdXJjZUxvY2tlZCwgTlVMTCwgRDNETE9DS19SRUFET05MWSk7Ci0gICAgQVNTRVJUKFNV
Q0NFRURFRChyZXN1bHQpKTsKLQotICAgIEQzRExPQ0tFRF9SRUNUIGRlc3RMb2NrZWQgPSB7MH07
Ci0gICAgcmVzdWx0ID0gZGVzdFN1cmZhY2UtPkxvY2tSZWN0KCZkZXN0TG9ja2VkLCBOVUxMLCAw
KTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgY29uc3QgdW5zaWduZWQg
Y2hhciAqc291cmNlRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KHNvdXJjZUxvY2tlZC5wQml0cyk7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEgPSByZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihkZXN0TG9ja2VkLnBCaXRzKTsKLQotICAgIGlm
IChzb3VyY2VEYXRhICYmIGRlc3REYXRhKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChzb3VyY2VE
ZXNjLkZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgRDNERk1UX0w4OgotICAgICAg
ICAgICAgR2VuZXJhdGVNaXA8TDg+KHNvdXJjZURlc2MuV2lkdGgsIHNvdXJjZURlc2MuSGVpZ2h0
LCBzb3VyY2VEYXRhLCBzb3VyY2VMb2NrZWQuUGl0Y2gsIGRlc3REYXRhLCBkZXN0TG9ja2VkLlBp
dGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNERk1UX0E4TDg6Ci0g
ICAgICAgICAgICBHZW5lcmF0ZU1pcDxBOEw4Pihzb3VyY2VEZXNjLldpZHRoLCBzb3VyY2VEZXNj
LkhlaWdodCwgc291cmNlRGF0YSwgc291cmNlTG9ja2VkLlBpdGNoLCBkZXN0RGF0YSwgZGVzdExv
Y2tlZC5QaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzREZNVF9B
OFI4RzhCODoKLSAgICAgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAgICAgICAgICAgIEdl
bmVyYXRlTWlwPEE4UjhHOEI4Pihzb3VyY2VEZXNjLldpZHRoLCBzb3VyY2VEZXNjLkhlaWdodCwg
c291cmNlRGF0YSwgc291cmNlTG9ja2VkLlBpdGNoLCBkZXN0RGF0YSwgZGVzdExvY2tlZC5QaXRj
aCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZS
MTZGOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8QTE2QjE2RzE2UjE2Rj4oc291cmNlRGVzYy5X
aWR0aCwgc291cmNlRGVzYy5IZWlnaHQsIHNvdXJjZURhdGEsIHNvdXJjZUxvY2tlZC5QaXRjaCwg
ZGVzdERhdGEsIGRlc3RMb2NrZWQuUGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPEEz
MkIzMkczMlIzMkY+KHNvdXJjZURlc2MuV2lkdGgsIHNvdXJjZURlc2MuSGVpZ2h0LCBzb3VyY2VE
YXRhLCBzb3VyY2VMb2NrZWQuUGl0Y2gsIGRlc3REYXRhLCBkZXN0TG9ja2VkLlBpdGNoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBVTlJFQUNI
QUJMRSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBkZXN0U3Vy
ZmFjZS0+VW5sb2NrUmVjdCgpOwotICAgICAgICBzb3VyY2VTdXJmYWNlLT5VbmxvY2tSZWN0KCk7
Ci0gICAgfQotfQotCi1JbWFnZTkgKkltYWdlOTo6bWFrZUltYWdlOShJbWFnZSAqaW1nKQotewot
ICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKHJ4OjpJbWFnZTkqLCBpbWcpKTsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8cng6OkltYWdlOSo+KGltZyk7Ci19Ci0KLXZvaWQgSW1hZ2U5OjpnZW5l
cmF0ZU1pcG1hcChJbWFnZTkgKmRlc3QsIEltYWdlOSAqc291cmNlKQotewotICAgIElEaXJlY3Qz
RFN1cmZhY2U5ICpzb3VyY2VTdXJmYWNlID0gc291cmNlLT5nZXRTdXJmYWNlKCk7Ci0gICAgaWYg
KHNvdXJjZVN1cmZhY2UgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0U3VyZmFjZSA9IGRlc3Qt
PmdldFN1cmZhY2UoKTsKLSAgICBnZW5lcmF0ZU1pcChkZXN0U3VyZmFjZSwgc291cmNlU3VyZmFj
ZSk7Ci0KLSAgICBkZXN0LT5tYXJrRGlydHkoKTsKLX0KLQotdm9pZCBJbWFnZTk6OmNvcHlMb2Nr
YWJsZVN1cmZhY2VzKElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0LCBJRGlyZWN0M0RTdXJmYWNlOSAq
c291cmNlKQotewotICAgIEQzRExPQ0tFRF9SRUNUIHNvdXJjZUxvY2sgPSB7MH07Ci0gICAgRDNE
TE9DS0VEX1JFQ1QgZGVzdExvY2sgPSB7MH07Ci0gICAgCi0gICAgc291cmNlLT5Mb2NrUmVjdCgm
c291cmNlTG9jaywgTlVMTCwgMCk7Ci0gICAgZGVzdC0+TG9ja1JlY3QoJmRlc3RMb2NrLCBOVUxM
LCAwKTsKLSAgICAKLSAgICBpZiAoc291cmNlTG9jay5wQml0cyAmJiBkZXN0TG9jay5wQml0cykK
LSAgICB7Ci0gICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOwotICAgICAgICBzb3VyY2UtPkdl
dERlc2MoJmRlc2MpOwotCi0gICAgICAgIGludCByb3dzID0gZDNkOTo6SXNDb21wcmVzc2VkRm9y
bWF0KGRlc2MuRm9ybWF0KSA/IGRlc2MuSGVpZ2h0IC8gNCA6IGRlc2MuSGVpZ2h0OwotICAgICAg
ICBpbnQgYnl0ZXMgPSBkM2Q5OjpDb21wdXRlUm93U2l6ZShkZXNjLkZvcm1hdCwgZGVzYy5XaWR0
aCk7Ci0gICAgICAgIEFTU0VSVChieXRlcyA8PSBzb3VyY2VMb2NrLlBpdGNoICYmIGJ5dGVzIDw9
IGRlc3RMb2NrLlBpdGNoKTsKLQotICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgcm93czsgaSsr
KQotICAgICAgICB7Ci0gICAgICAgICAgICBtZW1jcHkoKGNoYXIqKWRlc3RMb2NrLnBCaXRzICsg
ZGVzdExvY2suUGl0Y2ggKiBpLCAoY2hhciopc291cmNlTG9jay5wQml0cyArIHNvdXJjZUxvY2su
UGl0Y2ggKiBpLCBieXRlcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBzb3VyY2UtPlVubG9ja1Jl
Y3QoKTsKLSAgICAgICAgZGVzdC0+VW5sb2NrUmVjdCgpOwotICAgIH0KLSAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7Ci19Ci0KLWJvb2wgSW1hZ2U5OjpyZWRlZmluZShyeDo6UmVuZGVyZXIgKnJlbmRl
cmVyLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IGJvb2wgZm9yY2VSZWxlYXNlKQotewotICAgIGlmIChtV2lkdGggIT0gd2lkdGggfHwKLSAgICAg
ICAgbUhlaWdodCAhPSBoZWlnaHQgfHwKLSAgICAgICAgbUludGVybmFsRm9ybWF0ICE9IGludGVy
bmFsZm9ybWF0IHx8Ci0gICAgICAgIGZvcmNlUmVsZWFzZSkKLSAgICB7Ci0gICAgICAgIG1SZW5k
ZXJlciA9IFJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShyZW5kZXJlcik7Ci0KLSAgICAgICAgbVdp
ZHRoID0gd2lkdGg7Ci0gICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIG1JbnRlcm5h
bEZvcm1hdCA9IGludGVybmFsZm9ybWF0OwotICAgICAgICAvLyBjb21wdXRlIHRoZSBkM2QgZm9y
bWF0IHRoYXQgd2lsbCBiZSB1c2VkCi0gICAgICAgIG1EM0RGb3JtYXQgPSBtUmVuZGVyZXItPkNv
bnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwotICAgICAgICBtQWN0
dWFsRm9ybWF0ID0gZDNkOV9nbDo6R2V0RXF1aXZhbGVudEZvcm1hdChtRDNERm9ybWF0KTsKLQot
ICAgICAgICBpZiAobVN1cmZhY2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1TdXJmYWNlLT5S
ZWxlYXNlKCk7Ci0gICAgICAgICAgICBtU3VyZmFjZSA9IE5VTEw7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQg
SW1hZ2U5OjpjcmVhdGVTdXJmYWNlKCkKLXsKLSAgICBpZihtU3VyZmFjZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJRGlyZWN0M0RUZXh0dXJlOSAqbmV3VGV4dHVyZSA9
IE5VTEw7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKm5ld1N1cmZhY2UgPSBOVUxMOwotICAgIGNv
bnN0IEQzRFBPT0wgcG9vbFRvVXNlID0gRDNEUE9PTF9TWVNURU1NRU07Ci0gICAgY29uc3QgRDNE
Rk9STUFUIGQzZEZvcm1hdCA9IGdldEQzREZvcm1hdCgpOwotICAgIEFTU0VSVChkM2RGb3JtYXQg
IT0gRDNERk1UX0lOVFopOyAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgZm9yIGRlcHRoIHRl
eHR1cmVzCi0KLSAgICBpZiAobVdpZHRoICE9IDAgJiYgbUhlaWdodCAhPSAwKQotICAgIHsKLSAg
ICAgICAgaW50IGxldmVsVG9GZXRjaCA9IDA7Ci0gICAgICAgIEdMc2l6ZWkgcmVxdWVzdFdpZHRo
ID0gbVdpZHRoOwotICAgICAgICBHTHNpemVpIHJlcXVlc3RIZWlnaHQgPSBtSGVpZ2h0OwotICAg
ICAgICBnbDo6TWFrZVZhbGlkU2l6ZSh0cnVlLCBnbDo6SXNDb21wcmVzc2VkKG1JbnRlcm5hbEZv
cm1hdCksICZyZXF1ZXN0V2lkdGgsICZyZXF1ZXN0SGVpZ2h0LCAmbGV2ZWxUb0ZldGNoKTsKLQot
ICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgp
OwotCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKHJlcXVl
c3RXaWR0aCwgcmVxdWVzdEhlaWdodCwgbGV2ZWxUb0ZldGNoICsgMSwgMCwgZDNkRm9ybWF0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvb2xU
b1VzZSwgJm5ld1RleHR1cmUsIE5VTEwpOwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
LSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgICAgICBFUlIoIkNy
ZWF0aW5nIGltYWdlIHN1cmZhY2UgZmFpbGVkLiIpOwotICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotCi0gICAgICAgIG5ld1RleHR1cmUt
PkdldFN1cmZhY2VMZXZlbChsZXZlbFRvRmV0Y2gsICZuZXdTdXJmYWNlKTsKLSAgICAgICAgbmV3
VGV4dHVyZS0+UmVsZWFzZSgpOwotICAgIH0KLQotICAgIG1TdXJmYWNlID0gbmV3U3VyZmFjZTsK
LSAgICBtRGlydHkgPSBmYWxzZTsKLSAgICBtRDNEUG9vbCA9IHBvb2xUb1VzZTsKLX0KLQotSFJF
U1VMVCBJbWFnZTk6OmxvY2soRDNETE9DS0VEX1JFQ1QgKmxvY2tlZFJlY3QsIGNvbnN0IFJFQ1Qg
KnJlY3QpCi17Ci0gICAgY3JlYXRlU3VyZmFjZSgpOwotCi0gICAgSFJFU1VMVCByZXN1bHQgPSBE
M0RFUlJfSU5WQUxJRENBTEw7Ci0KLSAgICBpZiAobVN1cmZhY2UpCi0gICAgewotICAgICAgICBy
ZXN1bHQgPSBtU3VyZmFjZS0+TG9ja1JlY3QobG9ja2VkUmVjdCwgcmVjdCwgMCk7Ci0gICAgICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAgbURpcnR5ID0gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEltYWdlOTo6dW5sb2NrKCkKLXsK
LSAgICBpZiAobVN1cmZhY2UpCi0gICAgewotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1TdXJm
YWNlLT5VbmxvY2tSZWN0KCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0g
ICAgfQotfQotCi1ib29sIEltYWdlOTo6aXNSZW5kZXJhYmxlRm9ybWF0KCkgY29uc3QKLXsgICAg
Ci0gICAgcmV0dXJuIFRleHR1cmVTdG9yYWdlOTo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShn
ZXREM0RGb3JtYXQoKSk7Ci19Ci0KLUQzREZPUk1BVCBJbWFnZTk6OmdldEQzREZvcm1hdCgpIGNv
bnN0Ci17Ci0gICAgLy8gdGhpcyBzaG91bGQgb25seSBoYXBwZW4gaWYgdGhlIGltYWdlIGhhc24n
dCBiZWVuIHJlZGVmaW5lZCBmaXJzdAotICAgIC8vIHdoaWNoIHdvdWxkIGJlIGEgYnVnIGJ5IHRo
ZSBjYWxsZXIKLSAgICBBU1NFUlQobUQzREZvcm1hdCAhPSBEM0RGTVRfVU5LTk9XTik7Ci0KLSAg
ICByZXR1cm4gbUQzREZvcm1hdDsKLX0KLQotSURpcmVjdDNEU3VyZmFjZTkgKkltYWdlOTo6Z2V0
U3VyZmFjZSgpCi17Ci0gICAgY3JlYXRlU3VyZmFjZSgpOwotCi0gICAgcmV0dXJuIG1TdXJmYWNl
OwotfQotCi12b2lkIEltYWdlOTo6c2V0TWFuYWdlZFN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsKQotewotICAgIFRleHR1cmVTdG9yYWdlOV8yRCAq
c3RvcmFnZTkgPSBUZXh0dXJlU3RvcmFnZTlfMkQ6Om1ha2VUZXh0dXJlU3RvcmFnZTlfMkQoc3Rv
cmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwotICAgIHNldE1hbmFnZWRTdXJmYWNlKHN0b3Jh
Z2U5LT5nZXRTdXJmYWNlTGV2ZWwobGV2ZWwsIGZhbHNlKSk7Ci19Ci0KLXZvaWQgSW1hZ2U5Ojpz
ZXRNYW5hZ2VkU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGlu
dCBmYWNlLCBpbnQgbGV2ZWwpCi17Ci0gICAgVGV4dHVyZVN0b3JhZ2U5X0N1YmUgKnN0b3JhZ2U5
ID0gVGV4dHVyZVN0b3JhZ2U5X0N1YmU6Om1ha2VUZXh0dXJlU3RvcmFnZTlfQ3ViZShzdG9yYWdl
LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgc2V0TWFuYWdlZFN1cmZhY2Uoc3RvcmFnZTkt
PmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2Us
IGxldmVsLCBmYWxzZSkpOwotfQotCi12b2lkIEltYWdlOTo6c2V0TWFuYWdlZFN1cmZhY2UoSURp
cmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UpCi17Ci0gICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7Ci0g
ICAgc3VyZmFjZS0+R2V0RGVzYygmZGVzYyk7Ci0gICAgQVNTRVJUKGRlc2MuUG9vbCA9PSBEM0RQ
T09MX01BTkFHRUQpOwotCi0gICAgaWYgKChHTHNpemVpKWRlc2MuV2lkdGggPT0gbVdpZHRoICYm
IChHTHNpemVpKWRlc2MuSGVpZ2h0ID09IG1IZWlnaHQpCi0gICAgewotICAgICAgICBpZiAobVN1
cmZhY2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvcHlMb2NrYWJsZVN1cmZhY2VzKHN1cmZh
Y2UsIG1TdXJmYWNlKTsKLSAgICAgICAgICAgIG1TdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBtU3VyZmFjZSA9IHN1cmZhY2U7Ci0gICAgICAgIG1EM0RQb29sID0gZGVz
Yy5Qb29sOwotICAgIH0KLX0KLQotYm9vbCBJbWFnZTk6OnVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBBU1NFUlQo
Z2V0U3VyZmFjZSgpICE9IE5VTEwpOwotICAgIFRleHR1cmVTdG9yYWdlOV8yRCAqc3RvcmFnZTkg
PSBUZXh0dXJlU3RvcmFnZTlfMkQ6Om1ha2VUZXh0dXJlU3RvcmFnZTlfMkQoc3RvcmFnZS0+Z2V0
U3RvcmFnZUluc3RhbmNlKCkpOwotICAgIHJldHVybiB1cGRhdGVTdXJmYWNlKHN0b3JhZ2U5LT5n
ZXRTdXJmYWNlTGV2ZWwobGV2ZWwsIHRydWUpLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0KTsKLX0KLQotYm9vbCBJbWFnZTk6OnVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBBU1NF
UlQoZ2V0U3VyZmFjZSgpICE9IE5VTEwpOwotICAgIFRleHR1cmVTdG9yYWdlOV9DdWJlICpzdG9y
YWdlOSA9IFRleHR1cmVTdG9yYWdlOV9DdWJlOjptYWtlVGV4dHVyZVN0b3JhZ2U5X0N1YmUoc3Rv
cmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwotICAgIHJldHVybiB1cGRhdGVTdXJmYWNlKHN0
b3JhZ2U5LT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gg
KyBmYWNlLCBsZXZlbCwgdHJ1ZSksIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOwot
fQotCi1ib29sIEltYWdlOTo6dXBkYXRlU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdFN1
cmZhY2UsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0KQotewotICAgIGlmICghZGVzdFN1cmZhY2UpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2VTdXJmYWNlID0gZ2V0U3VyZmFjZSgp
OwotCi0gICAgaWYgKHNvdXJjZVN1cmZhY2UgJiYgc291cmNlU3VyZmFjZSAhPSBkZXN0U3VyZmFj
ZSkKLSAgICB7Ci0gICAgICAgIFJFQ1QgcmVjdDsKLSAgICAgICAgcmVjdC5sZWZ0ID0geG9mZnNl
dDsKLSAgICAgICAgcmVjdC50b3AgPSB5b2Zmc2V0OwotICAgICAgICByZWN0LnJpZ2h0ID0geG9m
ZnNldCArIHdpZHRoOwotICAgICAgICByZWN0LmJvdHRvbSA9IHlvZmZzZXQgKyBoZWlnaHQ7Ci0K
LSAgICAgICAgUE9JTlQgcG9pbnQgPSB7cmVjdC5sZWZ0LCByZWN0LnRvcH07Ci0KLSAgICAgICAg
SURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLQotICAg
ICAgICBpZiAobUQzRFBvb2wgPT0gRDNEUE9PTF9NQU5BR0VEKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKLSAgICAgICAgICAgIHNvdXJjZVN1cmZhY2UtPkdl
dERlc2MoJmRlc2MpOwotCi0gICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZiA9IDA7
Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxh
aW5TdXJmYWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBkZXNjLkZvcm1hdCwgRDNEUE9PTF9T
WVNURU1NRU0sICZzdXJmLCBOVUxMKTsKLQotICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1
bHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvcHlMb2NrYWJsZVN1cmZhY2Vz
KHN1cmYsIHNvdXJjZVN1cmZhY2UpOwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+
VXBkYXRlU3VyZmFjZShzdXJmLCAmcmVjdCwgZGVzdFN1cmZhY2UsICZwb2ludCk7Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgICAgICAgICBzdXJm
LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAg
ICAgICB7Ci0gICAgICAgICAgICAvLyBVcGRhdGVTdXJmYWNlOiBzb3VyY2UgbXVzdCBiZSBTWVNU
RU1NRU0sIGRlc3QgbXVzdCBiZSBERUZBVUxUIHBvb2xzIAotICAgICAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBkZXZpY2UtPlVwZGF0ZVN1cmZhY2Uoc291cmNlU3VyZmFjZSwgJnJlY3QsIGRlc3RT
dXJmYWNlLCAmcG9pbnQpOwotICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGRlc3RTdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLS8vIFN0b3JlIHRoZSBwaXhlbCByZWN0YW5nbGUgZGVzaWduYXRlZCBi
eSB4b2Zmc2V0LHlvZmZzZXQsd2lkdGgsaGVpZ2h0IHdpdGggcGl4ZWxzIHN0b3JlZCBhcyBmb3Jt
YXQvdHlwZSBhdCBpbnB1dAotLy8gaW50byB0aGUgdGFyZ2V0IHBpeGVsIHJlY3RhbmdsZS4KLXZv
aWQgSW1hZ2U5Ojpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICBHTGludCB1bnBh
Y2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0KQotewotICAgIFJFQ1QgbG9ja1JlY3QgPQot
ICAgIHsKLSAgICAgICAgeG9mZnNldCwgeW9mZnNldCwKLSAgICAgICAgeG9mZnNldCArIHdpZHRo
LCB5b2Zmc2V0ICsgaGVpZ2h0Ci0gICAgfTsKLQotICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsK
LSAgICBIUkVTVUxUIHJlc3VsdCA9IGxvY2soJmxvY2tlZCwgJmxvY2tSZWN0KTsKLSAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0KLSAgICBH
THNpemVpIGlucHV0UGl0Y2ggPSBnbDo6Q29tcHV0ZVBpdGNoKHdpZHRoLCBtSW50ZXJuYWxGb3Jt
YXQsIHVucGFja0FsaWdubWVudCk7Ci0KLSAgICBzd2l0Y2ggKG1JbnRlcm5hbEZvcm1hdCkKLSAg
ICB7Ci0gICAgICBjYXNlIEdMX0FMUEhBOF9FWFQ6Ci0gICAgICAgIGlmIChnbDo6c3VwcG9ydHNT
U0UyKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRBbHBoYURhdGFUb0JHUkFTU0UyKHdp
ZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0
cyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBsb2Fk
QWxwaGFEYXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQu
UGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0xVTUlOQU5DRThfRVhUOgotICAgICAgICBsb2FkTHVtaW5hbmNlRGF0YVRvTmF0aXZl
T3JCR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxv
Y2tlZC5wQml0cywgZ2V0RDNERm9ybWF0KCkgPT0gRDNERk1UX0w4KTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0FMUEhBMzJGX0VYVDoKLSAgICAgICAgbG9hZEFscGhhRmxvYXREYXRh
VG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxv
Y2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UzMkZf
RVhUOgotICAgICAgICBsb2FkTHVtaW5hbmNlRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9BTFBIQTE2Rl9FWFQ6Ci0gICAgICAgIGxvYWRBbHBoYUhh
bGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tl
ZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xV
TUlOQU5DRTE2Rl9FWFQ6Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhVG9SR0JB
KHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5w
Qml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0FMUEhBOF9F
WFQ6Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYURhdGFUb05hdGl2ZU9yQkdSQSh3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMsIGdl
dEQzREZvcm1hdCgpID09IEQzREZNVF9BOEw4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQ6Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYUZs
b2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBp
dGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5B
TkNFX0FMUEhBMTZGX0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0
YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBs
b2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6Ci0g
ICAgICAgIGxvYWRSR0JVQnl0ZURhdGFUb0JHUlgod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX1JHQjU2NToKLSAgICAgICAgbG9hZFJHQjU2NURhdGFUb0JHUkEod2lkdGgsIGhl
aWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQkE4X09FUzoKLSAgICAgICAgaWYgKGdsOjpz
dXBwb3J0c1NTRTIoKSkKLSAgICAgICAgewotICAgICAgICAgICAgbG9hZFJHQkFVQnl0ZURhdGFU
b0JHUkFTU0UyKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gs
IGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAg
ICAgICAgICBsb2FkUkdCQVVCeXRlRGF0YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNo
LCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0JBNDoKLSAgICAgICAgbG9hZFJHQkE0NDQ0RGF0YVRv
QkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2Nr
ZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCNV9BMToKLSAgICAg
ICAgbG9hZFJHQkE1NTUxRGF0YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1
dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfQkdSQThfRVhUOgotICAgICAgICBsb2FkQkdSQURhdGFUb0JHUkEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICAvLyBmbG9hdCB0ZXh0dXJlcyBhcmUgY29udmVydGVkIHRvIFJHQkEs
IG5vdCBCR1JBLCBhcyB0aGV5J3JlIHN0b3JlZCB0aGF0IHdheSBpbiBEM0QKLSAgICAgIGNhc2Ug
R0xfUkdCMzJGX0VYVDoKLSAgICAgICAgbG9hZFJHQkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCMTZGX0VYVDoKLSAgICAgICAgbG9hZFJHQkhh
bGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tl
ZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JH
QkEzMkZfRVhUOgotICAgICAgICBsb2FkUkdCQUZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQTE2Rl9FWFQ6Ci0gICAgICAgIGxvYWRSR0JBSGFs
ZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2Vk
LlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7IAotICAgIH0KLQotICAgIHVubG9jaygpOwotfQotCi12b2lkIEltYWdlOTo6
bG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCB2b2lkICppbnB1dCkKLXsKLSAgICBBU1NFUlQoeG9mZnNldCAlIDQgPT0gMCk7Ci0gICAg
QVNTRVJUKHlvZmZzZXQgJSA0ID09IDApOwotCi0gICAgUkVDVCBsb2NrUmVjdCA9IHsKLSAgICAg
ICAgeG9mZnNldCwgeW9mZnNldCwKLSAgICAgICAgeG9mZnNldCArIHdpZHRoLCB5b2Zmc2V0ICsg
aGVpZ2h0Ci0gICAgfTsKLQotICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsKLSAgICBIUkVTVUxU
IHJlc3VsdCA9IGxvY2soJmxvY2tlZCwgJmxvY2tSZWN0KTsKLSAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgR0xzaXplaSBpbnB1dFNp
emUgPSBnbDo6Q29tcHV0ZUNvbXByZXNzZWRTaXplKHdpZHRoLCBoZWlnaHQsIG1JbnRlcm5hbEZv
cm1hdCk7Ci0gICAgR0xzaXplaSBpbnB1dFBpdGNoID0gZ2w6OkNvbXB1dGVDb21wcmVzc2VkUGl0
Y2god2lkdGgsIG1JbnRlcm5hbEZvcm1hdCk7Ci0gICAgaW50IHJvd3MgPSBpbnB1dFNpemUgLyBp
bnB1dFBpdGNoOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgKytpKQotICAgIHsKLSAg
ICAgICAgbWVtY3B5KCh2b2lkKikoKEJZVEUqKWxvY2tlZC5wQml0cyArIGkgKiBsb2NrZWQuUGl0
Y2gpLCAodm9pZCopKChCWVRFKilpbnB1dCArIGkgKiBpbnB1dFBpdGNoKSwgaW5wdXRQaXRjaCk7
Ci0gICAgfQotCi0gICAgdW5sb2NrKCk7Ci19Ci0KLS8vIFRoaXMgaW1wbGVtZW50cyBnbENvcHlU
ZXhbU3ViXUltYWdlMkQgZm9yIG5vbi1yZW5kZXJhYmxlIGludGVybmFsIHRleHR1cmUgZm9ybWF0
cyBhbmQgaW5jb21wbGV0ZSB0ZXh0dXJlcwotdm9pZCBJbWFnZTk6OmNvcHkoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAqc291cmNlKQotewotICAgIFJlbmRlclRhcmdldDkg
KnJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBO
VUxMOwotICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gc291cmNlLT5nZXRDb2xv
cmJ1ZmZlcigwKTsKLQotICAgIGlmIChjb2xvcmJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIHJlbmRl
clRhcmdldCA9IFJlbmRlclRhcmdldDk6Om1ha2VSZW5kZXJUYXJnZXQ5KGNvbG9yYnVmZmVyLT5n
ZXRSZW5kZXJUYXJnZXQoKSk7Ci0gICAgfQotICAgIAotICAgIGlmIChyZW5kZXJUYXJnZXQpCi0g
ICAgewotICAgICAgICBzdXJmYWNlID0gcmVuZGVyVGFyZ2V0LT5nZXRTdXJmYWNlKCk7Ci0gICAg
fQotCi0gICAgaWYgKCFzdXJmYWNlKQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0
cmlldmUgdGhlIHJlbmRlciB0YXJnZXQuIik7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7Ci0gICAgfQotCi0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0g
bVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJU
YXJnZXREYXRhID0gTlVMTDsKLSAgICBEM0RTVVJGQUNFX0RFU0MgZGVzY3JpcHRpb247Ci0gICAg
c3VyZmFjZS0+R2V0RGVzYygmZGVzY3JpcHRpb24pOwotICAgIAotICAgIEhSRVNVTFQgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVPZmZzY3JlZW5QbGFpblN1cmZhY2UoZGVzY3JpcHRpb24uV2lkdGgs
IGRlc2NyaXB0aW9uLkhlaWdodCwgZGVzY3JpcHRpb24uRm9ybWF0LCBEM0RQT09MX1NZU1RFTU1F
TSwgJnJlbmRlclRhcmdldERhdGEsIE5VTEwpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQot
ICAgIHsKLSAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG1hdGNoaW5nIGRlc3RpbmF0aW9u
IHN1cmZhY2UuIik7Ci0gICAgICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICByZXN1bHQgPSBkZXZp
Y2UtPkdldFJlbmRlclRhcmdldERhdGEoc3VyZmFjZSwgcmVuZGVyVGFyZ2V0RGF0YSk7Ci0KLSAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIoIkdldFJlbmRlclRhcmdl
dERhdGEgdW5leHBlY3RlZGx5IGZhaWxlZC4iKTsKLSAgICAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+
UmVsZWFzZSgpOwotICAgICAgICBzdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotCi0gICAgUkVDVCBzb3VyY2VSZWN0
ID0ge3gsIHksIHggKyB3aWR0aCwgeSArIGhlaWdodH07Ci0gICAgUkVDVCBkZXN0UmVjdCA9IHt4
b2Zmc2V0LCB5b2Zmc2V0LCB4b2Zmc2V0ICsgd2lkdGgsIHlvZmZzZXQgKyBoZWlnaHR9OwotCi0g
ICAgRDNETE9DS0VEX1JFQ1Qgc291cmNlTG9jayA9IHswfTsKLSAgICByZXN1bHQgPSByZW5kZXJU
YXJnZXREYXRhLT5Mb2NrUmVjdCgmc291cmNlTG9jaywgJnNvdXJjZVJlY3QsIDApOwotCi0gICAg
aWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gbG9jayB0
aGUgc291cmNlIHN1cmZhY2UgKHJlY3RhbmdsZSBtaWdodCBiZSBpbnZhbGlkKS4iKTsKLSAgICAg
ICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgpOwotICAgICAgICBzdXJmYWNlLT5SZWxlYXNl
KCk7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQot
Ci0gICAgRDNETE9DS0VEX1JFQ1QgZGVzdExvY2sgPSB7MH07Ci0gICAgcmVzdWx0ID0gbG9jaygm
ZGVzdExvY2ssICZkZXN0UmVjdCk7Ci0gICAgCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAg
IHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gbG9jayB0aGUgZGVzdGluYXRpb24gc3VyZmFjZSAo
cmVjdGFuZ2xlIG1pZ2h0IGJlIGludmFsaWQpLiIpOwotICAgICAgICByZW5kZXJUYXJnZXREYXRh
LT5VbmxvY2tSZWN0KCk7Ci0gICAgICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsKLSAg
ICAgICAgc3VyZmFjZS0+UmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAgIGlmIChkZXN0TG9jay5wQml0cyAmJiBzb3VyY2VM
b2NrLnBCaXRzKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciAqc291cmNlID0gKHVuc2ln
bmVkIGNoYXIqKXNvdXJjZUxvY2sucEJpdHM7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3Qg
PSAodW5zaWduZWQgY2hhciopZGVzdExvY2sucEJpdHM7Ci0KLSAgICAgICAgc3dpdGNoIChkZXNj
cmlwdGlvbi5Gb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEQzREZNVF9YOFI4RzhC
ODoKLSAgICAgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgICAgICAgIHN3aXRjaChn
ZXREM0RGb3JtYXQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRf
WDhSOEc4Qjg6Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgICAg
ICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIDQgKiB3aWR0aCk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7Ci0gICAgICAg
ICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9MODoKLSAg
ICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgr
KykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4
XSA9IHNvdXJjZVt4ICogNCArIDJdOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BOEw4OgotICAgICAgICAg
ICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKiAyICsg
MF0gPSBzb3VyY2VbeCAqIDQgKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCAq
IDIgKyAxXSA9IHNvdXJjZVt4ICogNCArIDNdOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7Ci0gICAgICAgICAg
ICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6Ci0gICAgICAgICAgICBzd2l0Y2goZ2V0RDNERm9y
bWF0KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4
OgotICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0
aDsgeCsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBzaG9ydCByZ2IgPSAoKHVuc2lnbmVkIHNob3J0Kilzb3VyY2UpW3hdOwotICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZWQgPSAocmdiICYgMHhGODAwKSA+PiA4
OwotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBncmVlbiA9IChyZ2IgJiAw
eDA3RTApID4+IDM7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJsdWUg
PSAocmdiICYgMHgwMDFGKSA8PCAzOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICsg
MF0gPSBibHVlIHwgKGJsdWUgPj4gNSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3gg
KyAxXSA9IGdyZWVuIHwgKGdyZWVuID4+IDYpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dFt4ICsgMl0gPSByZWQgfCAocmVkID4+IDUpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dFt4ICsgM10gPSAweEZGOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAgIGRl
c3QgKz0gZGVzdExvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9MODoKLSAgICAgICAgICAgICAgICBm
b3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZWQgPSBz
b3VyY2VbeCAqIDIgKyAxXSAmIDB4Rjg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3hd
ID0gcmVkIHwgKHJlZCA+PiA1KTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAg
ICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBVTlJF
QUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
Y2FzZSBEM0RGTVRfQTFSNUc1QjU6Ci0gICAgICAgICAgICBzd2l0Y2goZ2V0RDNERm9ybWF0KCkp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAg
ICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsr
KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBzaG9ydCBhcmdiID0gKCh1bnNpZ25lZCBzaG9ydCopc291cmNlKVt4XTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVkID0gKGFyZ2IgJiAweDdDMDApID4+IDc7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGdyZWVuID0gKGFyZ2IgJiAweDAz
RTApID4+IDI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJsdWUgPSAo
YXJnYiAmIDB4MDAxRikgPDwgMzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCArIDBd
ID0gYmx1ZSB8IChibHVlID4+IDUpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICsg
MV0gPSBncmVlbiB8IChncmVlbiA+PiA1KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rb
eCArIDJdID0gcmVkIHwgKHJlZCA+PiA1KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rb
eCArIDNdID0gMHhGRjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAgICBkZXN0
ICs9IGRlc3RMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Ci0gICAgICAgICAgICAg
ICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGFy
Z2IgPSAoKHVuc2lnbmVkIHNob3J0Kilzb3VyY2UpW3hdOwotICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgY2hhciByZWQgPSAoYXJnYiAmIDB4N0MwMCkgPj4gNzsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZ3JlZW4gPSAoYXJnYiAmIDB4MDNFMCkgPj4gMjsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYmx1ZSA9IChhcmdiICYgMHgw
MDFGKSA8PCAzOwotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBhbHBoYSA9
IChzaWduZWQgc2hvcnQpYXJnYiA+PiAxNTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rb
eCArIDBdID0gYmx1ZSB8IChibHVlID4+IDUpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dFt4ICsgMV0gPSBncmVlbiB8IChncmVlbiA+PiA1KTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RbeCArIDJdID0gcmVkIHwgKHJlZCA+PiA1KTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RbeCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5QaXRjaDsKLSAgICAgICAgICAgICAgICAg
ICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0w4OgotICAgICAgICAgICAg
ICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHJl
ZCA9IHNvdXJjZVt4ICogMiArIDFdICYgMHg3QzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RbeF0gPSAocmVkIDw8IDEpIHwgKHJlZCA+PiA0KTsKLSAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOwotICAgICAg
ICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQThMODoK
LSAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7
IHgrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgY2hhciByZWQgPSBzb3VyY2VbeCAqIDIgKyAxXSAmIDB4N0M7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBkZXN0W3ggKiAyICsgMF0gPSAocmVkIDw8IDEpIHwgKHJlZCA+PiA0KTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCAqIDIgKyAxXSA9IChzaWduZWQgY2hhcilzb3Vy
Y2VbeCAqIDIgKyAxXSA+PiA3OwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAg
IGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFVOUkVB
Q0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHVubG9jaygpOwotICAgIHJlbmRlclRhcmdldERhdGEtPlVubG9ja1JlY3QoKTsKLQotICAg
IHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsKLSAgICBzdXJmYWNlLT5SZWxlYXNlKCk7Ci0K
LSAgICBtRGlydHkgPSB0cnVlOwotfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9JbWFnZTkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvSW1hZ2U5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmYmJjYTMxMjQzZDJh
YzQ3ZDU3NDhkNWExYzdmYWY3ZDVjYTgyMDYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9JbWFnZTkuaAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLS8vIEltYWdlOS5oOiBEZWZpbmVzIHRoZSByeDo6SW1hZ2U5IGNsYXNzLCB3
aGljaCBhY3RzIGFzIHRoZSBpbnRlcmZhY2UgdG8KLS8vIHRoZSBhY3R1YWwgdW5kZXJseWluZyBz
dXJmYWNlcyBvZiBhIFRleHR1cmUuCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0lNQUdF
OV9IXwotI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfSU1BR0U5X0hfCi0KLSNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvSW1hZ2UuaCIKLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLQot
bmFtZXNwYWNlIGdsCi17Ci1jbGFzcyBGcmFtZWJ1ZmZlcjsKLX0KLQotbmFtZXNwYWNlIHJ4Ci17
Ci1jbGFzcyBSZW5kZXJlcjsKLWNsYXNzIFJlbmRlcmVyOTsKLWNsYXNzIFRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlMkQ7Ci1jbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU7Ci0KLWNsYXNz
IEltYWdlOSA6IHB1YmxpYyBJbWFnZQotewotICBwdWJsaWM6Ci0gICAgSW1hZ2U5KCk7Ci0gICAg
fkltYWdlOSgpOwotCi0gICAgc3RhdGljIEltYWdlOSAqbWFrZUltYWdlOShJbWFnZSAqaW1nKTsK
LQotICAgIHN0YXRpYyB2b2lkIGdlbmVyYXRlTWlwbWFwKEltYWdlOSAqZGVzdCwgSW1hZ2U5ICpz
b3VyY2UpOwotICAgIHN0YXRpYyB2b2lkIGdlbmVyYXRlTWlwKElEaXJlY3QzRFN1cmZhY2U5ICpk
ZXN0U3VyZmFjZSwgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZVN1cmZhY2UpOwotICAgIHN0YXRp
YyB2b2lkIGNvcHlMb2NrYWJsZVN1cmZhY2VzKElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0LCBJRGly
ZWN0M0RTdXJmYWNlOSAqc291cmNlKTsKLQotICAgIHZpcnR1YWwgYm9vbCByZWRlZmluZShSZW5k
ZXJlciAqcmVuZGVyZXIsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgYm9vbCBmb3JjZVJlbGVhc2UpOwotCi0gICAgdmlydHVhbCBib29sIGlzUmVu
ZGVyYWJsZUZvcm1hdCgpIGNvbnN0OwotICAgIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25z
dDsKLQotICAgIHZpcnR1YWwgYm9vbCBpc0RpcnR5KCkgY29uc3Qge3JldHVybiBtU3VyZmFjZSAm
JiBtRGlydHk7fQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRTdXJmYWNlKCk7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgc2V0TWFuYWdlZFN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAq
c3RvcmFnZSwgaW50IGxldmVsKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TWFuYWdlZFN1cmZhY2Uo
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVs
KTsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlU3Vy
ZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0KTsKLQotICAgIHZpcnR1YWwgdm9pZCBsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQpOwotICAgIHZp
cnR1YWwgdm9pZCBsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29w
eShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgZ2w6OkZyYW1lYnVmZmVyICpzb3VyY2UpOwotCi0gIHBy
aXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEltYWdlOSk7Ci0KLSAgICB2b2lk
IGNyZWF0ZVN1cmZhY2UoKTsKLSAgICB2b2lkIHNldE1hbmFnZWRTdXJmYWNlKElEaXJlY3QzRFN1
cmZhY2U5ICpzdXJmYWNlKTsKLSAgICBib29sIHVwZGF0ZVN1cmZhY2UoSURpcmVjdDNEU3VyZmFj
ZTkgKmRlc3QsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KTsKLQotICAgIEhSRVNVTFQgbG9jayhEM0RMT0NLRURfUkVDVCAqbG9ja2Vk
UmVjdCwgY29uc3QgUkVDVCAqcmVjdCk7Ci0gICAgdm9pZCB1bmxvY2soKTsKLSAgICAKLSAgICBS
ZW5kZXJlcjkgKm1SZW5kZXJlcjsKLQotICAgIEQzRFBPT0wgbUQzRFBvb2w7ICAgLy8gY2FuIG9u
bHkgYmUgRDNEUE9PTF9TWVNURU1NRU0gb3IgRDNEUE9PTF9NQU5BR0VEIHNpbmNlIGl0IG5lZWRz
IHRvIGJlIGxvY2thYmxlLgotICAgIEQzREZPUk1BVCBtRDNERm9ybWF0OwotCi0gICAgSURpcmVj
dDNEU3VyZmFjZTkgKm1TdXJmYWNlOwotfTsKLX0KLQotI2VuZGlmICAgLy8gTElCR0xFU1YyX1JF
TkRFUkVSX0lNQUdFOV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZlcjExLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhCdWZmZXIxMS5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2NjA0YzQ1NTgyNGNmNmE0YTc3NmIwNjE5ODJjNTkxOGU1
Yzk2YmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZlcjEx
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE4MyArMCwwIEBACi0jaW5jbHVkZSAicHJlY29tcGls
ZWQuaCIKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBJbmRleEJ1ZmZlcjExLmNwcDogRGVmaW5lcyB0aGUg
RDNEMTEgSW5kZXhCdWZmZXIgaW1wbGVtZW50YXRpb24uCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvSW5kZXhCdWZmZXIxMS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9S
ZW5kZXJlcjExLmgiCi0KLW5hbWVzcGFjZSByeAotewotCi1JbmRleEJ1ZmZlcjExOjpJbmRleEJ1
ZmZlcjExKFJlbmRlcmVyMTEgKmNvbnN0IHJlbmRlcmVyKSA6IG1SZW5kZXJlcihyZW5kZXJlcikK
LXsKLSAgICBtQnVmZmVyID0gTlVMTDsKLSAgICBtQnVmZmVyU2l6ZSA9IDA7Ci0gICAgbUR5bmFt
aWNVc2FnZSA9IGZhbHNlOwotfQotCi1JbmRleEJ1ZmZlcjExOjp+SW5kZXhCdWZmZXIxMSgpCi17
Ci0gICAgaWYgKG1CdWZmZXIpCi0gICAgewotICAgICAgICBtQnVmZmVyLT5SZWxlYXNlKCk7Ci0g
ICAgICAgIG1CdWZmZXIgPSBOVUxMOwotICAgIH0KLX0KLQotYm9vbCBJbmRleEJ1ZmZlcjExOjpp
bml0aWFsaXplKHVuc2lnbmVkIGludCBidWZmZXJTaXplLCBHTGVudW0gaW5kZXhUeXBlLCBib29s
IGR5bmFtaWMpCi17Ci0gICAgaWYgKG1CdWZmZXIpCi0gICAgewotICAgICAgICBtQnVmZmVyLT5S
ZWxlYXNlKCk7Ci0gICAgICAgIG1CdWZmZXIgPSBOVUxMOwotICAgIH0KLQotICAgIHVwZGF0ZVNl
cmlhbCgpOwotCi0gICAgaWYgKGJ1ZmZlclNpemUgPiAwKQotICAgIHsKLSAgICAgICAgSUQzRDEx
RGV2aWNlKiBkeERldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0KLSAgICAgICAgRDNE
MTFfQlVGRkVSX0RFU0MgYnVmZmVyRGVzYzsKLSAgICAgICAgYnVmZmVyRGVzYy5CeXRlV2lkdGgg
PSBidWZmZXJTaXplOwotICAgICAgICBidWZmZXJEZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfRFlO
QU1JQzsKLSAgICAgICAgYnVmZmVyRGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX0lOREVYX0JV
RkZFUjsKLSAgICAgICAgYnVmZmVyRGVzYy5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NF
U1NfV1JJVEU7Ci0gICAgICAgIGJ1ZmZlckRlc2MuTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgYnVm
ZmVyRGVzYy5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKLQotICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IGR4RGV2aWNlLT5DcmVhdGVCdWZmZXIoJmJ1ZmZlckRlc2MsIE5VTEwsICZtQnVmZmVyKTsK
LSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtQnVmZmVyU2l6ZSA9IGJ1ZmZlclNp
emU7Ci0gICAgbUluZGV4VHlwZSA9IGluZGV4VHlwZTsKLSAgICBtRHluYW1pY1VzYWdlID0gZHlu
YW1pYzsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1JbmRleEJ1ZmZlcjExICpJbmRleEJ1ZmZl
cjExOjptYWtlSW5kZXhCdWZmZXIxMShJbmRleEJ1ZmZlciAqaW5kZXhCdWZmZXIpCi17Ci0gICAg
QVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoSW5kZXhCdWZmZXIxMSosIGluZGV4QnVmZmVyKSk7Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEluZGV4QnVmZmVyMTEqPihpbmRleEJ1ZmZlcik7Ci19Ci0K
LWJvb2wgSW5kZXhCdWZmZXIxMTo6bWFwQnVmZmVyKHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2ln
bmVkIGludCBzaXplLCB2b2lkKiogb3V0TWFwcGVkTWVtb3J5KQotewotICAgIGlmIChtQnVmZmVy
KQotICAgIHsKLSAgICAgICAgLy8gQ2hlY2sgZm9yIGludGVnZXIgb3ZlcmZsb3dzIGFuZCBvdXQt
b3V0LWJvdW5kcyBtYXAgcmVxdWVzdHMKLSAgICAgICAgaWYgKG9mZnNldCArIHNpemUgPCBvZmZz
ZXQgfHwgb2Zmc2V0ICsgc2l6ZSA+IG1CdWZmZXJTaXplKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBFUlIoIkluZGV4IGJ1ZmZlciBtYXAgcmFuZ2UgaXMgbm90IGluc2lkZSB0aGUgYnVmZmVyLiIp
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgSUQzRDEx
RGV2aWNlQ29udGV4dCAqZHhDb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7
Ci0KLSAgICAgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwotICAg
ICAgICBIUkVTVUxUIHJlc3VsdCA9IGR4Q29udGV4dC0+TWFwKG1CdWZmZXIsIDAsIEQzRDExX01B
UF9XUklURV9OT19PVkVSV1JJVEUsIDAsICZtYXBwZWRSZXNvdXJjZSk7Ci0gICAgICAgIGlmIChG
QUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJJbmRleCBidWZmZXIg
bWFwIGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICAqb3V0TWFwcGVkTWVtb3J5ID0gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4obWFwcGVkUmVzb3VyY2UucERhdGEpICsgb2Zmc2V0OwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgRVJSKCJJbmRl
eCBidWZmZXIgbm90IGluaXRpYWxpemVkLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotfQotCi1ib29sIEluZGV4QnVmZmVyMTE6OnVubWFwQnVmZmVyKCkKLXsKLSAgICBpZiAobUJ1
ZmZlcikKLSAgICB7Ci0gICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmR4Q29udGV4dCA9IG1S
ZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotICAgICAgICBkeENvbnRleHQtPlVubWFwKG1C
dWZmZXIsIDApOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsK
LSAgICAgICAgRVJSKCJJbmRleCBidWZmZXIgbm90IGluaXRpYWxpemVkLiIpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1HTGVudW0gSW5kZXhCdWZmZXIxMTo6Z2V0SW5kZXhU
eXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUluZGV4VHlwZTsKLX0KLQotdW5zaWduZWQgaW50
IEluZGV4QnVmZmVyMTE6OmdldEJ1ZmZlclNpemUoKSBjb25zdAotewotICAgIHJldHVybiBtQnVm
ZmVyU2l6ZTsKLX0KLQotYm9vbCBJbmRleEJ1ZmZlcjExOjpzZXRTaXplKHVuc2lnbmVkIGludCBi
dWZmZXJTaXplLCBHTGVudW0gaW5kZXhUeXBlKQotewotICAgIGlmIChidWZmZXJTaXplID4gbUJ1
ZmZlclNpemUgfHwgaW5kZXhUeXBlICE9IG1JbmRleFR5cGUpCi0gICAgewotICAgICAgICByZXR1
cm4gaW5pdGlhbGl6ZShidWZmZXJTaXplLCBpbmRleFR5cGUsIG1EeW5hbWljVXNhZ2UpOwotICAg
IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJv
b2wgSW5kZXhCdWZmZXIxMTo6ZGlzY2FyZCgpCi17Ci0gICAgaWYgKG1CdWZmZXIpCi0gICAgewot
ICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpkeENvbnRleHQgPSBtUmVuZGVyZXItPmdldERl
dmljZUNvbnRleHQoKTsKLQotICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVk
UmVzb3VyY2U7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZHhDb250ZXh0LT5NYXAobUJ1ZmZl
ciwgMCwgRDNEMTFfTUFQX1dSSVRFX0RJU0NBUkQsIDAsICZtYXBwZWRSZXNvdXJjZSk7Ci0gICAg
ICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJJbmRl
eCBidWZmZXIgbWFwIGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBkeENvbnRleHQtPlVubWFw
KG1CdWZmZXIsIDApOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgICBFUlIoIkluZGV4IGJ1ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLURYR0lfRk9STUFUIEluZGV4QnVmZmVyMTE6
OmdldEluZGV4Rm9ybWF0KCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1JbmRleFR5cGUpCi0gICAg
ewotICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOiAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjE2
X1VJTlQ7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOiAgIHJldHVybiBEWEdJX0ZPUk1B
VF9SMTZfVUlOVDsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOiAgICAgcmV0dXJuIERYR0lf
Rk9STUFUX1IzMl9VSU5UOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICByZXR1cm4g
RFhHSV9GT1JNQVRfVU5LTk9XTjsKLSAgICB9Ci19Ci0KLUlEM0QxMUJ1ZmZlciAqSW5kZXhCdWZm
ZXIxMTo6Z2V0QnVmZmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUJ1ZmZlcjsKLX0KLQotfQpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhCdWZmZXIxMS5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZlcjExLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5YTYxOTQ2YWQ2ZWY4OTJjNGNhNjZiNjA3ZTY1
OWEzNWNjMDlkZTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1
ZmZlcjExLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
Ly8gSW5kZXhCdWZmZXIxMS5oOiBEZWZpbmVzIHRoZSBEM0QxMSBJbmRleEJ1ZmZlciBpbXBsZW1l
bnRhdGlvbi4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfSU5ERVhCVUZGRVIxMV9IXwot
I2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfSU5ERVhCVUZGRVIxMV9IXwotCi0jaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL0luZGV4QnVmZmVyLmgiCi0KLW5hbWVzcGFjZSByeAotewotY2xh
c3MgUmVuZGVyZXIxMTsKLQotY2xhc3MgSW5kZXhCdWZmZXIxMSA6IHB1YmxpYyBJbmRleEJ1ZmZl
cgotewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgSW5kZXhCdWZmZXIxMShSZW5kZXJlcjExICpj
b25zdCByZW5kZXJlcik7Ci0gICAgdmlydHVhbCB+SW5kZXhCdWZmZXIxMSgpOwotCi0gICAgdmly
dHVhbCBib29sIGluaXRpYWxpemUodW5zaWduZWQgaW50IGJ1ZmZlclNpemUsIEdMZW51bSBpbmRl
eFR5cGUsIGJvb2wgZHluYW1pYyk7Ci0KLSAgICBzdGF0aWMgSW5kZXhCdWZmZXIxMSAqbWFrZUlu
ZGV4QnVmZmVyMTEoSW5kZXhCdWZmZXIgKmluZGV4QnVmZmVyKTsKLQotICAgIHZpcnR1YWwgYm9v
bCBtYXBCdWZmZXIodW5zaWduZWQgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IHNpemUsIHZvaWQq
KiBvdXRNYXBwZWRNZW1vcnkpOwotICAgIHZpcnR1YWwgYm9vbCB1bm1hcEJ1ZmZlcigpOwotCi0g
ICAgdmlydHVhbCBHTGVudW0gZ2V0SW5kZXhUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNp
Z25lZCBpbnQgZ2V0QnVmZmVyU2l6ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBzZXRTaXpl
KHVuc2lnbmVkIGludCBidWZmZXJTaXplLCBHTGVudW0gaW5kZXhUeXBlKTsKLQotICAgIHZpcnR1
YWwgYm9vbCBkaXNjYXJkKCk7Ci0KLSAgICBEWEdJX0ZPUk1BVCBnZXRJbmRleEZvcm1hdCgpIGNv
bnN0OwotICAgIElEM0QxMUJ1ZmZlciAqZ2V0QnVmZmVyKCkgY29uc3Q7Ci0KLSAgcHJpdmF0ZToK
LSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oSW5kZXhCdWZmZXIxMSk7Ci0KLSAgICByeDo6
UmVuZGVyZXIxMSAqY29uc3QgbVJlbmRlcmVyOwotCi0gICAgSUQzRDExQnVmZmVyICptQnVmZmVy
OwotICAgIHVuc2lnbmVkIGludCBtQnVmZmVyU2l6ZTsKLSAgICBHTGVudW0gbUluZGV4VHlwZTsK
LSAgICBib29sIG1EeW5hbWljVXNhZ2U7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJf
UkVOREVSRVJfSU5ERVhCVUZGRVIxMV9IXwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
SW5kZXhCdWZmZXI5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvSW5kZXhCdWZmZXI5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YzZkODNjNWRjYTdhZjM4ZTYwOWIzNGUyOWEzODA2NmZhYWMxNmE1MC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4QnVmZmVyOS5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwyMDcgKzAsMCBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwotCi0vLyBJbmRleGZmZXI5LmNwcDogRGVmaW5lcyB0aGUgRDNEOSBJbmRleEJ1ZmZlciBpbXBs
ZW1lbnRhdGlvbi4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZlcjku
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXI5LmgiCi0KLW5hbWVzcGFj
ZSByeAotewotCi1JbmRleEJ1ZmZlcjk6OkluZGV4QnVmZmVyOShSZW5kZXJlcjkgKmNvbnN0IHJl
bmRlcmVyKSA6IG1SZW5kZXJlcihyZW5kZXJlcikKLXsKLSAgICBtSW5kZXhCdWZmZXIgPSBOVUxM
OwotICAgIG1CdWZmZXJTaXplID0gMDsKLSAgICBtSW5kZXhUeXBlID0gMDsKLSAgICBtRHluYW1p
YyA9IGZhbHNlOwotfQotCi1JbmRleEJ1ZmZlcjk6On5JbmRleEJ1ZmZlcjkoKQotewotICAgIGlm
IChtSW5kZXhCdWZmZXIpCi0gICAgewotICAgICAgICBtSW5kZXhCdWZmZXItPlJlbGVhc2UoKTsK
LSAgICAgICAgbUluZGV4QnVmZmVyID0gTlVMTDsKLSAgICB9Ci19Ci0KLWJvb2wgSW5kZXhCdWZm
ZXI5Ojppbml0aWFsaXplKHVuc2lnbmVkIGludCBidWZmZXJTaXplLCBHTGVudW0gaW5kZXhUeXBl
LCBib29sIGR5bmFtaWMpCi17Ci0gICAgaWYgKG1JbmRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAg
IG1JbmRleEJ1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtSW5kZXhCdWZmZXIgPSBOVUxMOwot
ICAgIH0KLQotICAgIHVwZGF0ZVNlcmlhbCgpOwotCi0gICAgaWYgKGJ1ZmZlclNpemUgPiAwKQot
ICAgIHsKLSAgICAgICAgRDNERk9STUFUIGZvcm1hdDsKLSAgICAgICAgaWYgKGluZGV4VHlwZSA9
PSBHTF9VTlNJR05FRF9TSE9SVCB8fCBpbmRleFR5cGUgPT0gR0xfVU5TSUdORURfQllURSkKLSAg
ICAgICAgewotICAgICAgICAgICAgZm9ybWF0ID0gRDNERk1UX0lOREVYMTY7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZSBpZiAoaW5kZXhUeXBlID09IEdMX1VOU0lHTkVEX0lOVCkKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKG1SZW5kZXJlci0+Z2V0MzJCaXRJbmRleFN1cHBvcnQoKSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3JtYXQgPSBEM0RGTVRfSU5ERVgzMjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBFUlIoIkF0dGVtcHRlZCB0byBjcmVhdGUgYSAzMi1iaXQgaW5kZXggYnVmZmVyIGJ1dCBy
ZW5kZXJlciBkb2VzIG5vdCBzdXBwb3J0IDMyLWJpdCBpbmRpY2VzLiIpOwotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNl
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiSW52YWxpZCBpbmRleCB0eXBlICV1LiIsIGlu
ZGV4VHlwZSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAg
ICBEV09SRCB1c2FnZUZsYWdzID0gRDNEVVNBR0VfV1JJVEVPTkxZOwotICAgICAgICBpZiAoZHlu
YW1pYykKLSAgICAgICAgewotICAgICAgICAgICAgdXNhZ2VGbGFncyB8PSBEM0RVU0FHRV9EWU5B
TUlDOwotICAgICAgICB9Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXItPmNy
ZWF0ZUluZGV4QnVmZmVyKGJ1ZmZlclNpemUsIHVzYWdlRmxhZ3MsIGZvcm1hdCwgJm1JbmRleEJ1
ZmZlcik7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAg
ICAgRVJSKCJGYWlsZWQgdG8gY3JlYXRlIGFuIGluZGV4IGJ1ZmZlciBvZiBzaXplICV1LCByZXN1
bHQ6IDB4JTA4eC4iLCBtQnVmZmVyU2l6ZSwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1CdWZmZXJTaXplID0gYnVmZmVyU2l6ZTsK
LSAgICBtSW5kZXhUeXBlID0gaW5kZXhUeXBlOwotICAgIG1EeW5hbWljID0gZHluYW1pYzsKLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1JbmRleEJ1ZmZlcjkgKkluZGV4QnVmZmVyOTo6bWFrZUlu
ZGV4QnVmZmVyOShJbmRleEJ1ZmZlciAqaW5kZXhCdWZmZXIpCi17Ci0gICAgQVNTRVJUKEhBU19E
WU5BTUlDX1RZUEUoSW5kZXhCdWZmZXI5KiwgaW5kZXhCdWZmZXIpKTsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8SW5kZXhCdWZmZXI5Kj4oaW5kZXhCdWZmZXIpOwotfQotCi1ib29sIEluZGV4QnVm
ZmVyOTo6bWFwQnVmZmVyKHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBzaXplLCB2
b2lkKiogb3V0TWFwcGVkTWVtb3J5KQotewotICAgIGlmIChtSW5kZXhCdWZmZXIpCi0gICAgewot
ICAgICAgICBEV09SRCBsb2NrRmxhZ3MgPSBtRHluYW1pYyA/IEQzRExPQ0tfTk9PVkVSV1JJVEUg
OiAwOwotCi0gICAgICAgIHZvaWQgKm1hcFB0ciA9IE5VTEw7Ci0gICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gbUluZGV4QnVmZmVyLT5Mb2NrKG9mZnNldCwgc2l6ZSwgJm1hcFB0ciwgbG9ja0ZsYWdz
KTsKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBF
UlIoIkluZGV4IGJ1ZmZlciBsb2NrIGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICAqb3V0TWFw
cGVkTWVtb3J5ID0gbWFwUHRyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxz
ZQotICAgIHsKLSAgICAgICAgRVJSKCJJbmRleCBidWZmZXIgbm90IGluaXRpYWxpemVkLiIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIEluZGV4QnVmZmVyOTo6dW5t
YXBCdWZmZXIoKQotewotICAgIGlmIChtSW5kZXhCdWZmZXIpCi0gICAgewotICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IG1JbmRleEJ1ZmZlci0+VW5sb2NrKCk7Ci0gICAgICAgIGlmIChGQUlMRUQo
cmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJJbmRleCBidWZmZXIgdW5sb2Nr
IGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxz
ZQotICAgIHsKLSAgICAgICAgRVJSKCJJbmRleCBidWZmZXIgbm90IGluaXRpYWxpemVkLiIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1HTGVudW0gSW5kZXhCdWZmZXI5Ojpn
ZXRJbmRleFR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBtSW5kZXhUeXBlOwotfQotCi11bnNp
Z25lZCBpbnQgSW5kZXhCdWZmZXI5OjpnZXRCdWZmZXJTaXplKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbUJ1ZmZlclNpemU7Ci19Ci0KLWJvb2wgSW5kZXhCdWZmZXI5OjpzZXRTaXplKHVuc2lnbmVk
IGludCBidWZmZXJTaXplLCBHTGVudW0gaW5kZXhUeXBlKQotewotICAgIGlmIChidWZmZXJTaXpl
ID4gbUJ1ZmZlclNpemUgfHwgaW5kZXhUeXBlICE9IG1JbmRleFR5cGUpCi0gICAgewotICAgICAg
ICByZXR1cm4gaW5pdGlhbGl6ZShidWZmZXJTaXplLCBpbmRleFR5cGUsIG1EeW5hbWljKTsKLSAg
ICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfQotCi1i
b29sIEluZGV4QnVmZmVyOTo6ZGlzY2FyZCgpCi17Ci0gICAgaWYgKG1JbmRleEJ1ZmZlcikKLSAg
ICB7Ci0gICAgICAgIHZvaWQgKmR1bW15OwotICAgICAgICBIUkVTVUxUIHJlc3VsdDsKLQotICAg
ICAgICByZXN1bHQgPSBtSW5kZXhCdWZmZXItPkxvY2soMCwgMSwgJmR1bW15LCBEM0RMT0NLX0RJ
U0NBUkQpOwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEVSUigiRGlzY2FyZCBsb2NrIGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHQg
PSBtSW5kZXhCdWZmZXItPlVubG9jaygpOwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiRGlzY2FyZCB1bmxvY2sgZmFpbGVkIHdpdGggZXJy
b3IgMHglMDh4IiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAg
ICBFUlIoIkluZGV4IGJ1ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci19Ci0KLUQzREZPUk1BVCBJbmRleEJ1ZmZlcjk6OmdldEluZGV4Rm9ybWF0
KCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1JbmRleFR5cGUpCi0gICAgewotICAgICAgY2FzZSBH
TF9VTlNJR05FRF9CWVRFOiAgICByZXR1cm4gRDNERk1UX0lOREVYMTY7Ci0gICAgICBjYXNlIEdM
X1VOU0lHTkVEX1NIT1JUOiAgIHJldHVybiBEM0RGTVRfSU5ERVgxNjsKLSAgICAgIGNhc2UgR0xf
VU5TSUdORURfSU5UOiAgICAgcmV0dXJuIEQzREZNVF9JTkRFWDMyOwotICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsgICByZXR1cm4gRDNERk1UX1VOS05PV047Ci0gICAgfQotfQotCi1JRGly
ZWN0M0RJbmRleEJ1ZmZlcjkgKiBJbmRleEJ1ZmZlcjk6OmdldEJ1ZmZlcigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1JbmRleEJ1ZmZlcjsKLX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvSW5kZXhCdWZmZXI5LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL0luZGV4QnVmZmVyOS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA2ODAxODY3NTMyNDU1NzNiMzdhODhkOWE1ZGRhZjVjNDA3NGUwZTI3Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhCdWZmZXI5LmgKKysrIC9kZXYvbnVsbApAQCAt
MSw1MyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBJbmRleGZmZXI5Lmg6IERlZmlu
ZXMgdGhlIEQzRDkgSW5kZXhCdWZmZXIgaW1wbGVtZW50YXRpb24uCi0KLSNpZm5kZWYgTElCR0xF
U1YyX1JFTkRFUkVSX0lOREVYQlVGRkVSOV9IXwotI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJf
SU5ERVhCVUZGRVI5X0hfCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhCdWZm
ZXIuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci1jbGFzcyBSZW5kZXJlcjk7Ci0KLWNsYXNzIEluZGV4
QnVmZmVyOSA6IHB1YmxpYyBJbmRleEJ1ZmZlcgotewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQg
SW5kZXhCdWZmZXI5KFJlbmRlcmVyOSAqY29uc3QgcmVuZGVyZXIpOwotICAgIHZpcnR1YWwgfklu
ZGV4QnVmZmVyOSgpOwotCi0gICAgdmlydHVhbCBib29sIGluaXRpYWxpemUodW5zaWduZWQgaW50
IGJ1ZmZlclNpemUsIEdMZW51bSBpbmRleFR5cGUsIGJvb2wgZHluYW1pYyk7Ci0KLSAgICBzdGF0
aWMgSW5kZXhCdWZmZXI5ICptYWtlSW5kZXhCdWZmZXI5KEluZGV4QnVmZmVyICppbmRleEJ1ZmZl
cik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbWFwQnVmZmVyKHVuc2lnbmVkIGludCBvZmZzZXQsIHVu
c2lnbmVkIGludCBzaXplLCB2b2lkKiogb3V0TWFwcGVkTWVtb3J5KTsKLSAgICB2aXJ0dWFsIGJv
b2wgdW5tYXBCdWZmZXIoKTsKLQotICAgIHZpcnR1YWwgR0xlbnVtIGdldEluZGV4VHlwZSgpIGNv
bnN0OwotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldEJ1ZmZlclNpemUoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGJvb2wgc2V0U2l6ZSh1bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSwgR0xlbnVtIGlu
ZGV4VHlwZSk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZGlzY2FyZCgpOwotCi0gICAgRDNERk9STUFU
IGdldEluZGV4Rm9ybWF0KCkgY29uc3Q7Ci0gICAgSURpcmVjdDNESW5kZXhCdWZmZXI5ICpnZXRC
dWZmZXIoKSBjb25zdDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihJbmRleEJ1ZmZlcjkpOwotCi0gICAgcng6OlJlbmRlcmVyOSAqY29uc3QgbVJlbmRlcmVyOwot
Ci0gICAgSURpcmVjdDNESW5kZXhCdWZmZXI5ICptSW5kZXhCdWZmZXI7Ci0gICAgdW5zaWduZWQg
aW50IG1CdWZmZXJTaXplOwotICAgIEdMZW51bSBtSW5kZXhUeXBlOwotICAgIGJvb2wgbUR5bmFt
aWM7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfSU5ERVhCVUZGRVI5
X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL0lucHV0TGF5b3V0Q2FjaGUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9JbnB1dExheW91dENhY2hlLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMTU1MmYzYTMyNmVhZGE1MThiZTQzZDA4MDNkN2U2MWUxMWUwZmY5NS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0lucHV0TGF5b3V0Q2FjaGUuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMjEzICswLDAgQEAKLSNpbmNsdWRlICJwcmVjb21waWxlZC5o
IgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLS8vCi0KLS8vIElucHV0TGF5b3V0Q2FjaGUuY3BwOiBEZWZpbmVzIElucHV0
TGF5b3V0Q2FjaGUsIGEgY2xhc3MgdGhhdCBidWlsZHMgYW5kIGNhY2hlcwotLy8gRDNEMTEgaW5w
dXQgbGF5b3V0cy4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbnB1dExheW91dENh
Y2hlLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlcjExLmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UxMS5oIgotI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlMTEuaCIKLSNpbmNsdWRlICJsaWJH
TEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERhdGFNYW5hZ2VyLmgiCi0KLSNpbmNs
dWRlICJ0aGlyZF9wYXJ0eS9tdXJtdXJoYXNoL011cm11ckhhc2gzLmgiCi0KLW5hbWVzcGFjZSBy
eAotewotCi1jb25zdCB1bnNpZ25lZCBpbnQgSW5wdXRMYXlvdXRDYWNoZTo6a01heElucHV0TGF5
b3V0cyA9IDEwMjQ7Ci0KLUlucHV0TGF5b3V0Q2FjaGU6OklucHV0TGF5b3V0Q2FjaGUoKSA6IG1J
bnB1dExheW91dE1hcChrTWF4SW5wdXRMYXlvdXRzLCBoYXNoSW5wdXRMYXlvdXQsIGNvbXBhcmVJ
bnB1dExheW91dHMpCi17Ci0gICAgbUNvdW50ZXIgPSAwOwotICAgIG1EZXZpY2UgPSBOVUxMOwot
ICAgIG1EZXZpY2VDb250ZXh0ID0gTlVMTDsKLSAgICBtQ3VycmVudElMID0gTlVMTDsKLSAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykK
LSAgICB7Ci0gICAgICAgIG1DdXJyZW50QnVmZmVyc1tpXSA9IC0xOwotICAgICAgICBtQ3VycmVu
dFZlcnRleFN0cmlkZXNbaV0gPSAtMTsKLSAgICAgICAgbUN1cnJlbnRWZXJ0ZXhPZmZzZXRzW2ld
ID0gLTE7Ci0gICAgfQotfQotCi1JbnB1dExheW91dENhY2hlOjp+SW5wdXRMYXlvdXRDYWNoZSgp
Ci17Ci0gICAgY2xlYXIoKTsKLX0KLQotdm9pZCBJbnB1dExheW91dENhY2hlOjppbml0aWFsaXpl
KElEM0QxMURldmljZSAqZGV2aWNlLCBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0KQotewot
ICAgIGNsZWFyKCk7Ci0gICAgbURldmljZSA9IGRldmljZTsKLSAgICBtRGV2aWNlQ29udGV4dCA9
IGNvbnRleHQ7Ci19Ci0KLXZvaWQgSW5wdXRMYXlvdXRDYWNoZTo6Y2xlYXIoKQotewotICAgIGZv
ciAoSW5wdXRMYXlvdXRNYXA6Oml0ZXJhdG9yIGkgPSBtSW5wdXRMYXlvdXRNYXAuYmVnaW4oKTsg
aSAhPSBtSW5wdXRMYXlvdXRNYXAuZW5kKCk7IGkrKykKLSAgICB7Ci0gICAgICAgIGktPnNlY29u
ZC5pbnB1dExheW91dC0+UmVsZWFzZSgpOwotICAgIH0KLSAgICBtSW5wdXRMYXlvdXRNYXAuY2xl
YXIoKTsKLSAgICBtYXJrRGlydHkoKTsKLX0KLQotdm9pZCBJbnB1dExheW91dENhY2hlOjptYXJr
RGlydHkoKQotewotICAgIG1DdXJyZW50SUwgPSBOVUxMOwotICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAgICAgICAg
bUN1cnJlbnRCdWZmZXJzW2ldID0gLTE7Ci0gICAgICAgIG1DdXJyZW50VmVydGV4U3RyaWRlc1tp
XSA9IC0xOwotICAgICAgICBtQ3VycmVudFZlcnRleE9mZnNldHNbaV0gPSAtMTsKLSAgICB9Ci19
Ci0KLUdMZW51bSBJbnB1dExheW91dENhY2hlOjphcHBseVZlcnRleEJ1ZmZlcnMoVHJhbnNsYXRl
ZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSkKLXsKLSAgICBpbnQgc29ydGVkU2VtYW50aWNJbmRpY2VzW2dsOjpNQVhfVkVS
VEVYX0FUVFJJQlNdOwotICAgIHByb2dyYW1CaW5hcnktPnNvcnRBdHRyaWJ1dGVzQnlMYXlvdXQo
YXR0cmlidXRlcywgc29ydGVkU2VtYW50aWNJbmRpY2VzKTsKLQotICAgIGlmICghbURldmljZSB8
fCAhbURldmljZUNvbnRleHQpCi0gICAgewotICAgICAgICBFUlIoIklucHV0TGF5b3V0Q2FjaGUg
aXMgbm90IGluaXRpYWxpemVkLiIpOwotICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJ
T047Ci0gICAgfQotCi0gICAgSW5wdXRMYXlvdXRLZXkgaWxLZXkgPSB7IDAgfTsKLQotICAgIElE
M0QxMUJ1ZmZlciAqdmVydGV4QnVmZmVyc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSA9IHsgTlVM
TCB9OwotICAgIHVuc2lnbmVkIGludCB2ZXJ0ZXhCdWZmZXJTZXJpYWxzW2dsOjpNQVhfVkVSVEVY
X0FUVFJJQlNdID0geyAwIH07Ci0gICAgVUlOVCB2ZXJ0ZXhTdHJpZGVzW2dsOjpNQVhfVkVSVEVY
X0FUVFJJQlNdID0geyAwIH07Ci0gICAgVUlOVCB2ZXJ0ZXhPZmZzZXRzW2dsOjpNQVhfVkVSVEVY
X0FUVFJJQlNdID0geyAwIH07Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogc2VtYW50aWNOYW1l
ID0gIlRFWENPT1JEIjsKLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6Ok1B
WF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0u
YWN0aXZlKQotICAgICAgICB7Ci0gICAgICAgICAgICBWZXJ0ZXhCdWZmZXIxMSAqdmVydGV4QnVm
ZmVyID0gVmVydGV4QnVmZmVyMTE6Om1ha2VWZXJ0ZXhCdWZmZXIxMShhdHRyaWJ1dGVzW2ldLnZl
cnRleEJ1ZmZlcik7Ci0gICAgICAgICAgICBCdWZmZXJTdG9yYWdlMTEgKmJ1ZmZlclN0b3JhZ2Ug
PSBhdHRyaWJ1dGVzW2ldLnN0b3JhZ2UgPyBCdWZmZXJTdG9yYWdlMTE6Om1ha2VCdWZmZXJTdG9y
YWdlMTEoYXR0cmlidXRlc1tpXS5zdG9yYWdlKSA6IE5VTEw7Ci0KLSAgICAgICAgICAgIEQzRDEx
X0lOUFVUX0NMQVNTSUZJQ0FUSU9OIGlucHV0Q2xhc3MgPSBhdHRyaWJ1dGVzW2ldLmRpdmlzb3Ig
PiAwID8gRDNEMTFfSU5QVVRfUEVSX0lOU1RBTkNFX0RBVEEgOiBEM0QxMV9JTlBVVF9QRVJfVkVS
VEVYX0RBVEE7Ci0KLSAgICAgICAgICAgIC8vIFJlY29yZCB0aGUgdHlwZSBvZiB0aGUgYXNzb2Np
YXRlZCB2ZXJ0ZXggc2hhZGVyIHZlY3RvciBpbiBvdXIga2V5Ci0gICAgICAgICAgICAvLyBUaGlz
IHdpbGwgcHJldmVudCBtaXNtYXRjaGVkIHZlcnRleCBzaGFkZXJzIGZyb20gdXNpbmcgdGhlIHNh
bWUgaW5wdXQgbGF5b3V0Ci0gICAgICAgICAgICBHTGludCBhdHRyaWJ1dGVTaXplOwotICAgICAg
ICAgICAgcHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlQXR0cmlidXRlKGlsS2V5LmVsZW1lbnRDb3Vu
dCwgMCwgTlVMTCwgJmF0dHJpYnV0ZVNpemUsICZpbEtleS5lbGVtZW50c1tpbEtleS5lbGVtZW50
Q291bnRdLmdsc2xFbGVtZW50VHlwZSwgTlVMTCk7Ci0KLSAgICAgICAgICAgIGlsS2V5LmVsZW1l
bnRzW2lsS2V5LmVsZW1lbnRDb3VudF0uZGVzYy5TZW1hbnRpY05hbWUgPSBzZW1hbnRpY05hbWU7
Ci0gICAgICAgICAgICBpbEtleS5lbGVtZW50c1tpbEtleS5lbGVtZW50Q291bnRdLmRlc2MuU2Vt
YW50aWNJbmRleCA9IHNvcnRlZFNlbWFudGljSW5kaWNlc1tpXTsKLSAgICAgICAgICAgIGlsS2V5
LmVsZW1lbnRzW2lsS2V5LmVsZW1lbnRDb3VudF0uZGVzYy5Gb3JtYXQgPSBhdHRyaWJ1dGVzW2ld
LmF0dHJpYnV0ZS0+bUFycmF5RW5hYmxlZCA/IHZlcnRleEJ1ZmZlci0+Z2V0RFhHSUZvcm1hdCgq
YXR0cmlidXRlc1tpXS5hdHRyaWJ1dGUpIDogRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FU
OwotICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5kZXNjLklu
cHV0U2xvdCA9IGk7Ci0gICAgICAgICAgICBpbEtleS5lbGVtZW50c1tpbEtleS5lbGVtZW50Q291
bnRdLmRlc2MuQWxpZ25lZEJ5dGVPZmZzZXQgPSAwOwotICAgICAgICAgICAgaWxLZXkuZWxlbWVu
dHNbaWxLZXkuZWxlbWVudENvdW50XS5kZXNjLklucHV0U2xvdENsYXNzID0gaW5wdXRDbGFzczsK
LSAgICAgICAgICAgIGlsS2V5LmVsZW1lbnRzW2lsS2V5LmVsZW1lbnRDb3VudF0uZGVzYy5JbnN0
YW5jZURhdGFTdGVwUmF0ZSA9IGF0dHJpYnV0ZXNbaV0uZGl2aXNvcjsKLSAgICAgICAgICAgIGls
S2V5LmVsZW1lbnRDb3VudCsrOwotCi0gICAgICAgICAgICB2ZXJ0ZXhCdWZmZXJzW2ldID0gYnVm
ZmVyU3RvcmFnZSA/IGJ1ZmZlclN0b3JhZ2UtPmdldEJ1ZmZlcigpIDogdmVydGV4QnVmZmVyLT5n
ZXRCdWZmZXIoKTsKLSAgICAgICAgICAgIHZlcnRleEJ1ZmZlclNlcmlhbHNbaV0gPSBidWZmZXJT
dG9yYWdlID8gYnVmZmVyU3RvcmFnZS0+Z2V0U2VyaWFsKCkgOiB2ZXJ0ZXhCdWZmZXItPmdldFNl
cmlhbCgpOwotICAgICAgICAgICAgdmVydGV4U3RyaWRlc1tpXSA9IGF0dHJpYnV0ZXNbaV0uc3Ry
aWRlOwotICAgICAgICAgICAgdmVydGV4T2Zmc2V0c1tpXSA9IGF0dHJpYnV0ZXNbaV0ub2Zmc2V0
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgSUQzRDExSW5wdXRMYXlvdXQgKmlucHV0TGF5b3V0
ID0gTlVMTDsKLQotICAgIElucHV0TGF5b3V0TWFwOjppdGVyYXRvciBpID0gbUlucHV0TGF5b3V0
TWFwLmZpbmQoaWxLZXkpOwotICAgIGlmIChpICE9IG1JbnB1dExheW91dE1hcC5lbmQoKSkKLSAg
ICB7Ci0gICAgICAgIGlucHV0TGF5b3V0ID0gaS0+c2Vjb25kLmlucHV0TGF5b3V0OwotICAgICAg
ICBpLT5zZWNvbmQubGFzdFVzZWRUaW1lID0gbUNvdW50ZXIrKzsKLSAgICB9Ci0gICAgZWxzZQot
ICAgIHsKLSAgICAgICAgU2hhZGVyRXhlY3V0YWJsZTExICpzaGFkZXIgPSBTaGFkZXJFeGVjdXRh
YmxlMTE6Om1ha2VTaGFkZXJFeGVjdXRhYmxlMTEocHJvZ3JhbUJpbmFyeS0+Z2V0VmVydGV4RXhl
Y3V0YWJsZSgpKTsKLQotICAgICAgICBEM0QxMV9JTlBVVF9FTEVNRU5UX0RFU0MgZGVzY3NbZ2w6
Ok1BWF9WRVJURVhfQVRUUklCU107Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBq
IDwgaWxLZXkuZWxlbWVudENvdW50OyArK2opCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc2Nz
W2pdID0gaWxLZXkuZWxlbWVudHNbal0uZGVzYzsKLSAgICAgICAgfQotCi0gICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlSW5wdXRMYXlvdXQoZGVzY3MsIGlsS2V5LmVsZW1l
bnRDb3VudCwgc2hhZGVyLT5nZXRGdW5jdGlvbigpLCBzaGFkZXItPmdldExlbmd0aCgpLCAmaW5w
dXRMYXlvdXQpOwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEVSUigiRmFpbGVkIHRvIGNyYXRlIGlucHV0IGxheW91dCwgcmVzdWx0OiAweCUwOHgi
LCByZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKG1JbnB1dExheW91dE1hcC5zaXplKCkgPj0ga01heElucHV0
TGF5b3V0cykKLSAgICAgICAgewotICAgICAgICAgICAgVFJBQ0UoIk92ZXJmbG93ZWQgdGhlIGxp
bWl0IG9mICV1IGlucHV0IGxheW91dHMsIHJlbW92aW5nIHRoZSBsZWFzdCByZWNlbnRseSB1c2Vk
ICIKLSAgICAgICAgICAgICAgICAgICJ0byBtYWtlIHJvb20uIiwga01heElucHV0TGF5b3V0cyk7
Ci0KLSAgICAgICAgICAgIElucHV0TGF5b3V0TWFwOjppdGVyYXRvciBsZWFzdFJlY2VudGx5VXNl
ZCA9IG1JbnB1dExheW91dE1hcC5iZWdpbigpOwotICAgICAgICAgICAgZm9yIChJbnB1dExheW91
dE1hcDo6aXRlcmF0b3IgaSA9IG1JbnB1dExheW91dE1hcC5iZWdpbigpOyBpICE9IG1JbnB1dExh
eW91dE1hcC5lbmQoKTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChp
LT5zZWNvbmQubGFzdFVzZWRUaW1lIDwgbGVhc3RSZWNlbnRseVVzZWQtPnNlY29uZC5sYXN0VXNl
ZFRpbWUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBsZWFzdFJlY2Vu
dGx5VXNlZCA9IGk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgbGVhc3RSZWNlbnRseVVzZWQtPnNlY29uZC5pbnB1dExheW91dC0+UmVsZWFzZSgpOwotICAg
ICAgICAgICAgbUlucHV0TGF5b3V0TWFwLmVyYXNlKGxlYXN0UmVjZW50bHlVc2VkKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIElucHV0TGF5b3V0Q291bnRlclBhaXIgaW5wdXRDb3VudGVyUGFpcjsK
LSAgICAgICAgaW5wdXRDb3VudGVyUGFpci5pbnB1dExheW91dCA9IGlucHV0TGF5b3V0OwotICAg
ICAgICBpbnB1dENvdW50ZXJQYWlyLmxhc3RVc2VkVGltZSA9IG1Db3VudGVyKys7Ci0KLSAgICAg
ICAgbUlucHV0TGF5b3V0TWFwLmluc2VydChzdGQ6Om1ha2VfcGFpcihpbEtleSwgaW5wdXRDb3Vu
dGVyUGFpcikpOwotICAgIH0KLQotICAgIGlmIChpbnB1dExheW91dCAhPSBtQ3VycmVudElMKQot
ICAgIHsKLSAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0SW5wdXRMYXlvdXQoaW5wdXRMYXlv
dXQpOwotICAgICAgICBtQ3VycmVudElMID0gaW5wdXRMYXlvdXQ7Ci0gICAgfQotCi0gICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0g
ICAgewotICAgICAgICBpZiAodmVydGV4QnVmZmVyU2VyaWFsc1tpXSAhPSBtQ3VycmVudEJ1ZmZl
cnNbaV0gfHwgdmVydGV4U3RyaWRlc1tpXSAhPSBtQ3VycmVudFZlcnRleFN0cmlkZXNbaV0gfHwK
LSAgICAgICAgICAgIHZlcnRleE9mZnNldHNbaV0gIT0gbUN1cnJlbnRWZXJ0ZXhPZmZzZXRzW2ld
KQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRWZXJ0ZXhCdWZm
ZXJzKGksIDEsICZ2ZXJ0ZXhCdWZmZXJzW2ldLCAmdmVydGV4U3RyaWRlc1tpXSwgJnZlcnRleE9m
ZnNldHNbaV0pOwotICAgICAgICAgICAgbUN1cnJlbnRCdWZmZXJzW2ldID0gdmVydGV4QnVmZmVy
U2VyaWFsc1tpXTsKLSAgICAgICAgICAgIG1DdXJyZW50VmVydGV4U3RyaWRlc1tpXSA9IHZlcnRl
eFN0cmlkZXNbaV07Ci0gICAgICAgICAgICBtQ3VycmVudFZlcnRleE9mZnNldHNbaV0gPSB2ZXJ0
ZXhPZmZzZXRzW2ldOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX05PX0VSUk9S
OwotfQotCi1zdGQ6OnNpemVfdCBJbnB1dExheW91dENhY2hlOjpoYXNoSW5wdXRMYXlvdXQoY29u
c3QgSW5wdXRMYXlvdXRLZXkgJmlucHV0TGF5b3V0KQotewotICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBpbnQgc2VlZCA9IDB4REVBREJFRUY7Ci0KLSAgICBzdGQ6OnNpemVfdCBoYXNoID0gMDsK
LSAgICBNdXJtdXJIYXNoM194ODZfMzIoaW5wdXRMYXlvdXQuYmVnaW4oKSwgaW5wdXRMYXlvdXQu
ZW5kKCkgLSBpbnB1dExheW91dC5iZWdpbigpLCBzZWVkLCAmaGFzaCk7Ci0gICAgcmV0dXJuIGhh
c2g7Ci19Ci0KLWJvb2wgSW5wdXRMYXlvdXRDYWNoZTo6Y29tcGFyZUlucHV0TGF5b3V0cyhjb25z
dCBJbnB1dExheW91dEtleSAmYSwgY29uc3QgSW5wdXRMYXlvdXRLZXkgJmIpCi17Ci0gICAgaWYg
KGEuZWxlbWVudENvdW50ICE9IGIuZWxlbWVudENvdW50KQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiBzdGQ6OmVxdWFsKGEuYmVnaW4oKSwgYS5lbmQo
KSwgYi5iZWdpbigpKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbnB1dExheW91dENhY2hlLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0lucHV0TGF5b3V0Q2FjaGUuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmIxYThlZWJjZjdhNmNhOTkwY2FiOTM4MjU1
OGYzMzk3ODE0N2EwMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0lucHV0
TGF5b3V0Q2FjaGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwotCi0vLyBJbnB1dExheW91dENhY2hlLmg6IERlZmluZXMgSW5wdXRMYXlvdXRDYWNoZSwgYSBj
bGFzcyB0aGF0IGJ1aWxkcyBhbmQgY2FjaGVzCi0vLyBEM0QxMSBpbnB1dCBsYXlvdXRzLgotCi0j
aWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9JTlBVVExBWU9VVENBQ0hFX0hfCi0jZGVmaW5lIExJ
QkdMRVNWMl9SRU5ERVJFUl9JTlBVVExBWU9VVENBQ0hFX0hfCi0KLSNpbmNsdWRlICJsaWJHTEVT
djIvQ29uc3RhbnRzLmgiCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLQotbmFtZXNw
YWNlIGdsCi17Ci1jbGFzcyBQcm9ncmFtQmluYXJ5OwotfQotCi1uYW1lc3BhY2UgcngKLXsKLXN0
cnVjdCBUcmFuc2xhdGVkQXR0cmlidXRlOwotCi1jbGFzcyBJbnB1dExheW91dENhY2hlCi17Ci0g
IHB1YmxpYzoKLSAgICBJbnB1dExheW91dENhY2hlKCk7Ci0gICAgdmlydHVhbCB+SW5wdXRMYXlv
dXRDYWNoZSgpOwotCi0gICAgdm9pZCBpbml0aWFsaXplKElEM0QxMURldmljZSAqZGV2aWNlLCBJ
RDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0KTsKLSAgICB2b2lkIGNsZWFyKCk7Ci0gICAgdm9p
ZCBtYXJrRGlydHkoKTsKLQotICAgIEdMZW51bSBhcHBseVZlcnRleEJ1ZmZlcnMoVHJhbnNsYXRl
ZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpOwot
Ci0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKElucHV0TGF5b3V0Q2Fj
aGUpOwotCi0gICAgc3RydWN0IElucHV0TGF5b3V0RWxlbWVudAotICAgIHsKLSAgICAgICAgRDNE
MTFfSU5QVVRfRUxFTUVOVF9ERVNDIGRlc2M7Ci0gICAgICAgIEdMZW51bSBnbHNsRWxlbWVudFR5
cGU7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBJbnB1dExheW91dEtleQotICAgIHsKLSAgICAgICAg
dW5zaWduZWQgaW50IGVsZW1lbnRDb3VudDsKLSAgICAgICAgSW5wdXRMYXlvdXRFbGVtZW50IGVs
ZW1lbnRzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdOwotCi0gICAgICAgIGNvbnN0IGNoYXIgKmJl
Z2luKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgY2hhcio+KCZlbGVtZW50Q291bnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29u
c3QgY2hhciAqZW5kKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KCZlbGVtZW50c1tlbGVtZW50Q291bnRdKTsKLSAgICAg
ICAgfQotICAgIH07Ci0KLSAgICBzdHJ1Y3QgSW5wdXRMYXlvdXRDb3VudGVyUGFpcgotICAgIHsK
LSAgICAgICAgSUQzRDExSW5wdXRMYXlvdXQgKmlucHV0TGF5b3V0OwotICAgICAgICB1bnNpZ25l
ZCBsb25nIGxvbmcgbGFzdFVzZWRUaW1lOwotICAgIH07Ci0KLSAgICBJRDNEMTFJbnB1dExheW91
dCAqbUN1cnJlbnRJTDsKLSAgICB1bnNpZ25lZCBpbnQgbUN1cnJlbnRCdWZmZXJzW2dsOjpNQVhf
VkVSVEVYX0FUVFJJQlNdOwotICAgIFVJTlQgbUN1cnJlbnRWZXJ0ZXhTdHJpZGVzW2dsOjpNQVhf
VkVSVEVYX0FUVFJJQlNdOwotICAgIFVJTlQgbUN1cnJlbnRWZXJ0ZXhPZmZzZXRzW2dsOjpNQVhf
VkVSVEVYX0FUVFJJQlNdOwotCi0gICAgc3RhdGljIHN0ZDo6c2l6ZV90IGhhc2hJbnB1dExheW91
dChjb25zdCBJbnB1dExheW91dEtleSAmaW5wdXRMYXlvdXQpOwotICAgIHN0YXRpYyBib29sIGNv
bXBhcmVJbnB1dExheW91dHMoY29uc3QgSW5wdXRMYXlvdXRLZXkgJmEsIGNvbnN0IElucHV0TGF5
b3V0S2V5ICZiKTsKLQotICAgIHR5cGVkZWYgc3RkOjpzaXplX3QgKCpJbnB1dExheW91dEhhc2hG
dW5jdGlvbikoY29uc3QgSW5wdXRMYXlvdXRLZXkgJik7Ci0gICAgdHlwZWRlZiBib29sICgqSW5w
dXRMYXlvdXRFcXVhbGl0eUZ1bmN0aW9uKShjb25zdCBJbnB1dExheW91dEtleSAmLCBjb25zdCBJ
bnB1dExheW91dEtleSAmKTsKLSAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxJbnB1dExh
eW91dEtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnB1dExheW91dENvdW50
ZXJQYWlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElucHV0TGF5b3V0SGFzaEZ1
bmN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElucHV0TGF5b3V0RXF1YWxp
dHlGdW5jdGlvbj4gSW5wdXRMYXlvdXRNYXA7Ci0gICAgSW5wdXRMYXlvdXRNYXAgbUlucHV0TGF5
b3V0TWFwOwotCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBrTWF4SW5wdXRMYXlvdXRz
OwotCi0gICAgdW5zaWduZWQgbG9uZyBsb25nIG1Db3VudGVyOwotCi0gICAgSUQzRDExRGV2aWNl
ICptRGV2aWNlOwotICAgIElEM0QxMURldmljZUNvbnRleHQgKm1EZXZpY2VDb250ZXh0OwotfTsK
LQotfQotCi0jZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX0lOUFVUTEFZT1VUQ0FDSEVfSF8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvUXVlcnkxMS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL1F1ZXJ5MTEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzIxMGZj
OTI5MTMwMzA3NjI4YTRjOWQxYWVlZmQ0MDFkOTIyMDQ4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvUXVlcnkxMS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBA
QAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gUXVlcnkxMS5j
cHA6IERlZmluZXMgdGhlIHJ4OjpRdWVyeTExIGNsYXNzIHdoaWNoIGltcGxlbWVudHMgcng6OlF1
ZXJ5SW1wbC4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9RdWVyeTExLmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyMTEuaCIKLSNpbmNsdWRlICJsaWJHTEVT
djIvbWFpbi5oIgotCi1uYW1lc3BhY2UgcngKLXsKLQotUXVlcnkxMTo6UXVlcnkxMShyeDo6UmVu
ZGVyZXIxMSAqcmVuZGVyZXIsIEdMZW51bSB0eXBlKSA6IFF1ZXJ5SW1wbCh0eXBlKQotewotICAg
IG1SZW5kZXJlciA9IHJlbmRlcmVyOwotICAgIG1RdWVyeSA9IE5VTEw7Ci19Ci0KLVF1ZXJ5MTE6
On5RdWVyeTExKCkKLXsKLSAgICBpZiAobVF1ZXJ5KQotICAgIHsKLSAgICAgICAgbVF1ZXJ5LT5S
ZWxlYXNlKCk7Ci0gICAgICAgIG1RdWVyeSA9IE5VTEw7Ci0gICAgfQotfQotCi12b2lkIFF1ZXJ5
MTE6OmJlZ2luKCkKLXsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICBE
M0QxMV9RVUVSWV9ERVNDIHF1ZXJ5RGVzYzsKLSAgICAgICAgcXVlcnlEZXNjLlF1ZXJ5ID0gRDNE
MTFfUVVFUllfT0NDTFVTSU9OOwotICAgICAgICBxdWVyeURlc2MuTWlzY0ZsYWdzID0gMDsKLQot
ICAgICAgICBpZiAoRkFJTEVEKG1SZW5kZXJlci0+Z2V0RGV2aWNlKCktPkNyZWF0ZVF1ZXJ5KCZx
dWVyeURlc2MsICZtUXVlcnkpKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1SZW5kZXJl
ci0+Z2V0RGV2aWNlQ29udGV4dCgpLT5CZWdpbihtUXVlcnkpOwotfQotCi12b2lkIFF1ZXJ5MTE6
OmVuZCgpCi17Ci0gICAgaWYgKG1RdWVyeSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgbVJlbmRlcmVy
LT5nZXREZXZpY2VDb250ZXh0KCktPkVuZChtUXVlcnkpOwotCi0gICAgbVN0YXR1cyA9IEdMX0ZB
TFNFOwotICAgIG1SZXN1bHQgPSBHTF9GQUxTRTsKLX0KLQotR0x1aW50IFF1ZXJ5MTE6OmdldFJl
c3VsdCgpCi17Ci0gICAgaWYgKG1RdWVyeSAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgd2hpbGUg
KCF0ZXN0UXVlcnkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgU2xlZXAoMCk7Ci0gICAgICAg
ICAgICAvLyBleHBsaWNpdGx5IGNoZWNrIGZvciBkZXZpY2UgbG9zcywgc29tZSBkcml2ZXJzIHNl
ZW0gdG8gcmV0dXJuIFNfRkFMU0UKLSAgICAgICAgICAgIC8vIGlmIHRoZSBkZXZpY2UgaXMgbG9z
dAotICAgICAgICAgICAgaWYgKG1SZW5kZXJlci0+dGVzdERldmljZUxvc3QodHJ1ZSkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZLCAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBt
UmVzdWx0OwotfQotCi1HTGJvb2xlYW4gUXVlcnkxMTo6aXNSZXN1bHRBdmFpbGFibGUoKQotewot
ICAgIGlmIChtUXVlcnkgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHRlc3RRdWVyeSgpOwotICAg
IH0KLQotICAgIHJldHVybiBtU3RhdHVzOwotfQotCi1HTGJvb2xlYW4gUXVlcnkxMTo6dGVzdFF1
ZXJ5KCkKLXsKLSAgICBpZiAobVF1ZXJ5ICE9IE5VTEwgJiYgbVN0YXR1cyAhPSBHTF9UUlVFKQot
ICAgIHsKLSAgICAgICAgVUlOVDY0IG51bVBpeGVscyA9IDA7Ci0gICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCktPkdldERhdGEobVF1ZXJ5LCAmbnVt
UGl4ZWxzLCBzaXplb2YoVUlOVDY0KSwgMCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gU19PSykK
LSAgICAgICAgewotICAgICAgICAgICAgbVN0YXR1cyA9IEdMX1RSVUU7Ci0KLSAgICAgICAgICAg
IHN3aXRjaCAoZ2V0VHlwZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdM
X0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBM
RVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6Ci0gICAgICAgICAgICAgICAgbVJlc3VsdCA9IChu
dW1QaXhlbHMgPiAwKSA/IEdMX1RSVUUgOiBHTF9GQUxTRTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG1SZW5kZXJlci0+
dGVzdERldmljZUxvc3QodHJ1ZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfVFJVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBy
ZXR1cm4gbVN0YXR1czsKLSAgICB9Ci0KLSAgICByZXR1cm4gR0xfVFJVRTsgLy8gcHJldmVudCBi
bG9ja2luZyB3aGVuIHF1ZXJ5IGlzIG51bGwKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9RdWVyeTExLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1F1ZXJ5MTEuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGEwM2RlNzdjYTMyODU1ZGJjZDE5YjEzYmM0NGQ5Nzgz
Nzk0YTY3NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1F1ZXJ5MTEuaAor
KysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBRdWVyeTEx
Lmg6IERlZmluZXMgdGhlIHJ4OjpRdWVyeTExIGNsYXNzIHdoaWNoIGltcGxlbWVudHMgcng6OlF1
ZXJ5SW1wbC4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfUVVFUlkxMV9IXwotI2RlZmlu
ZSBMSUJHTEVTVjJfUkVOREVSRVJfUVVFUlkxMV9IXwotCi0jaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL1F1ZXJ5SW1wbC5oIgotCi1uYW1lc3BhY2UgcngKLXsKLWNsYXNzIFJlbmRlcmVyMTE7
Ci0KLWNsYXNzIFF1ZXJ5MTEgOiBwdWJsaWMgUXVlcnlJbXBsCi17Ci0gIHB1YmxpYzoKLSAgICBR
dWVyeTExKHJ4OjpSZW5kZXJlcjExICpyZW5kZXJlciwgR0xlbnVtIHR5cGUpOwotICAgIHZpcnR1
YWwgflF1ZXJ5MTEoKTsKLQotICAgIHZvaWQgYmVnaW4oKTsKLSAgICB2b2lkIGVuZCgpOwotICAg
IEdMdWludCBnZXRSZXN1bHQoKTsKLSAgICBHTGJvb2xlYW4gaXNSZXN1bHRBdmFpbGFibGUoKTsK
LQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihRdWVyeTExKTsKLQot
ICAgIEdMYm9vbGVhbiB0ZXN0UXVlcnkoKTsKLQotICAgIHJ4OjpSZW5kZXJlcjExICptUmVuZGVy
ZXI7Ci0gICAgSUQzRDExUXVlcnkgKm1RdWVyeTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIExJQkdM
RVNWMl9SRU5ERVJFUl9RVUVSWTExX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1F1ZXJ5OS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1F1ZXJ5OS5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGVmNjk0MjY3ZGQxZTE1OWMwOTUzOGJiYmNiZWE3ZmFiMDAwOWQ1YzEu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9RdWVyeTkuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTI1ICswLDAgQEAKLSNpbmNsdWRlICJwcmVjb21waWxlZC5oIgotLy8KLS8v
IENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCi0KLS8vIFF1ZXJ5OS5jcHA6IERlZmluZXMgdGhlIHJ4OjpRdWVyeTkgY2xhc3Mgd2hp
Y2ggaW1wbGVtZW50cyByeDo6UXVlcnlJbXBsLgotCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvUXVlcnk5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXI5X3V0aWxzLmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL1JlbmRlcmVyOS5oIgotCi1uYW1lc3BhY2UgcngKLXsKLQotUXVlcnk5OjpRdWVy
eTkocng6OlJlbmRlcmVyOSAqcmVuZGVyZXIsIEdMZW51bSB0eXBlKSA6IFF1ZXJ5SW1wbCh0eXBl
KQotewotICAgIG1SZW5kZXJlciA9IHJlbmRlcmVyOwotICAgIG1RdWVyeSA9IE5VTEw7Ci19Ci0K
LVF1ZXJ5OTo6flF1ZXJ5OSgpCi17Ci0gICAgaWYgKG1RdWVyeSkKLSAgICB7Ci0gICAgICAgIG1R
dWVyeS0+UmVsZWFzZSgpOwotICAgICAgICBtUXVlcnkgPSBOVUxMOwotICAgIH0KLX0KLQotdm9p
ZCBRdWVyeTk6OmJlZ2luKCkKLXsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAg
ICAgICBpZiAoRkFJTEVEKG1SZW5kZXJlci0+Z2V0RGV2aWNlKCktPkNyZWF0ZVF1ZXJ5KEQzRFFV
RVJZVFlQRV9PQ0NMVVNJT04sICZtUXVlcnkpKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IEhSRVNVTFQgcmVzdWx0ID0gbVF1ZXJ5LT5Jc3N1ZShEM0RJU1NVRV9CRUdJTik7Ci0gICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLX0KLQotdm9pZCBRdWVyeTk6OmVuZCgpCi17Ci0gICAg
aWYgKG1RdWVyeSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgSFJFU1VMVCByZXN1bHQgPSBtUXVlcnkt
Pklzc3VlKEQzRElTU1VFX0VORCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQot
ICAgIG1TdGF0dXMgPSBHTF9GQUxTRTsKLSAgICBtUmVzdWx0ID0gR0xfRkFMU0U7Ci19Ci0KLUdM
dWludCBRdWVyeTk6OmdldFJlc3VsdCgpCi17Ci0gICAgaWYgKG1RdWVyeSAhPSBOVUxMKQotICAg
IHsKLSAgICAgICAgd2hpbGUgKCF0ZXN0UXVlcnkoKSkKLSAgICAgICAgewotICAgICAgICAgICAg
U2xlZXAoMCk7Ci0gICAgICAgICAgICAvLyBleHBsaWNpdGx5IGNoZWNrIGZvciBkZXZpY2UgbG9z
cwotICAgICAgICAgICAgLy8gc29tZSBkcml2ZXJzIHNlZW0gdG8gcmV0dXJuIFNfRkFMU0UgZXZl
biBpZiB0aGUgZGV2aWNlIGlzIGxvc3QKLSAgICAgICAgICAgIC8vIGluc3RlYWQgb2YgRDNERVJS
X0RFVklDRUxPU1QgbGlrZSB0aGV5IHNob3VsZAotICAgICAgICAgICAgaWYgKG1SZW5kZXJlci0+
dGVzdERldmljZUxvc3QodHJ1ZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAwKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiBtUmVzdWx0OwotfQotCi1HTGJvb2xlYW4gUXVlcnk5
Ojppc1Jlc3VsdEF2YWlsYWJsZSgpCi17Ci0gICAgaWYgKG1RdWVyeSAhPSBOVUxMKQotICAgIHsK
LSAgICAgICAgdGVzdFF1ZXJ5KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1TdGF0dXM7Ci19Ci0K
LUdMYm9vbGVhbiBRdWVyeTk6OnRlc3RRdWVyeSgpCi17Ci0gICAgaWYgKG1RdWVyeSAhPSBOVUxM
ICYmIG1TdGF0dXMgIT0gR0xfVFJVRSkKLSAgICB7Ci0gICAgICAgIERXT1JEIG51bVBpeGVscyA9
IDA7Ci0KLSAgICAgICAgSFJFU1VMVCBocmVzID0gbVF1ZXJ5LT5HZXREYXRhKCZudW1QaXhlbHMs
IHNpemVvZihEV09SRCksIEQzREdFVERBVEFfRkxVU0gpOwotICAgICAgICBpZiAoaHJlcyA9PSBT
X09LKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU3RhdHVzID0gIEdMX1RSVUU7Ci0KLSAgICAg
ICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBj
YXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQU5Z
X1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6Ci0gICAgICAgICAgICAgICAgbVJlc3Vs
dCA9IChudW1QaXhlbHMgPiAwKSA/IEdMX1RSVUUgOiBHTF9GQUxTRTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlQo
ZmFsc2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGQzZDk6
OmlzRGV2aWNlTG9zdEVycm9yKGhyZXMpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtUmVuZGVy
ZXItPm5vdGlmeURldmljZUxvc3QoKTsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgR0xfVFJVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbVN0
YXR1czsKLSAgICB9Ci0KLSAgICByZXR1cm4gR0xfVFJVRTsgLy8gcHJldmVudCBibG9ja2luZyB3
aGVuIHF1ZXJ5IGlzIG51bGwKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9RdWVyeTkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUXVlcnk5LmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDQ3ZWVmODkzMzZlZjhjMzQ0YWE1MTY3YjRmNDAyMWIxMDQxYzA3MGMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9RdWVyeTkuaAorKysgL2Rldi9udWxs
CkBAIC0xLDQwICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBRdWVyeTkuaDogRGVmaW5lcyB0
aGUgcng6OlF1ZXJ5OSBjbGFzcyB3aGljaCBpbXBsZW1lbnRzIHJ4OjpRdWVyeUltcGwuCi0KLSNp
Zm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX1FVRVJZOV9IXwotI2RlZmluZSBMSUJHTEVTVjJfUkVO
REVSRVJfUVVFUlk5X0hfCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUXVlcnlJbXBs
LmgiCi0KLW5hbWVzcGFjZSByeAotewotY2xhc3MgUmVuZGVyZXI5OwotCi1jbGFzcyBRdWVyeTkg
OiBwdWJsaWMgUXVlcnlJbXBsCi17Ci0gIHB1YmxpYzoKLSAgICBRdWVyeTkocng6OlJlbmRlcmVy
OSAqcmVuZGVyZXIsIEdMZW51bSB0eXBlKTsKLSAgICB2aXJ0dWFsIH5RdWVyeTkoKTsKLQotICAg
IHZvaWQgYmVnaW4oKTsKLSAgICB2b2lkIGVuZCgpOwotICAgIEdMdWludCBnZXRSZXN1bHQoKTsK
LSAgICBHTGJvb2xlYW4gaXNSZXN1bHRBdmFpbGFibGUoKTsKLQotICBwcml2YXRlOgotICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihRdWVyeTkpOwotCi0gICAgR0xib29sZWFuIHRlc3RRdWVy
eSgpOwotCi0gICAgcng6OlJlbmRlcmVyOSAqbVJlbmRlcmVyOwotICAgIElEaXJlY3QzRFF1ZXJ5
OSAqbVF1ZXJ5OwotfTsKLQotfQotCi0jZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1FVRVJZ
OV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9SZW5kZXJTdGF0ZUNhY2hlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyU3RhdGVDYWNoZS5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGIzMTExYWY3MmJlMGNiMmQ3MmZmYTBlY2I3YWY0NTYzN2E1ZDY5NDku
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJTdGF0ZUNhY2hlLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDQwNiArMCwwIEBACi0jaW5jbHVkZSAicHJlY29tcGlsZWQu
aCIKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFJlbmRlclN0YXRlQ2FjaGUuY3BwOiBEZWZpbmVz
IHJ4OjpSZW5kZXJTdGF0ZUNhY2hlLCBhIGNhY2hlIG9mIERpcmVjdDNEIHJlbmRlcgotLy8gc3Rh
dGUgb2JqZWN0cy4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJTdGF0ZUNh
Y2hlLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL3JlbmRlcmVyMTFfdXRpbHMuaCIK
LQotI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgotI2luY2x1ZGUgInRoaXJkX3BhcnR5L211cm11
cmhhc2gvTXVybXVySGFzaDMuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLS8vIE1TRE4ncyBkb2N1
bWVudGF0aW9uIG9mIElEM0QxMURldmljZTo6Q3JlYXRlQmxlbmRTdGF0ZSwgSUQzRDExRGV2aWNl
OjpDcmVhdGVSYXN0ZXJpemVyU3RhdGUsCi0vLyBJRDNEMTFEZXZpY2U6OkNyZWF0ZURlcHRoU3Rl
bmNpbFN0YXRlIGFuZCBJRDNEMTFEZXZpY2U6OkNyZWF0ZVNhbXBsZXJTdGF0ZSBjbGFpbXMgdGhl
IG1heGltdW0KLS8vIG51bWJlciBvZiB1bmlxdWUgc3RhdGVzIG9mIGVhY2ggdHlwZSBhbiBhcHBs
aWNhdGlvbiBjYW4gY3JlYXRlIGlzIDQwOTYKLWNvbnN0IHVuc2lnbmVkIGludCBSZW5kZXJTdGF0
ZUNhY2hlOjprTWF4QmxlbmRTdGF0ZXMgPSA0MDk2OwotY29uc3QgdW5zaWduZWQgaW50IFJlbmRl
clN0YXRlQ2FjaGU6OmtNYXhSYXN0ZXJpemVyU3RhdGVzID0gNDA5NjsKLWNvbnN0IHVuc2lnbmVk
IGludCBSZW5kZXJTdGF0ZUNhY2hlOjprTWF4RGVwdGhTdGVuY2lsU3RhdGVzID0gNDA5NjsKLWNv
bnN0IHVuc2lnbmVkIGludCBSZW5kZXJTdGF0ZUNhY2hlOjprTWF4U2FtcGxlclN0YXRlcyA9IDQw
OTY7Ci0KLVJlbmRlclN0YXRlQ2FjaGU6OlJlbmRlclN0YXRlQ2FjaGUoKSA6IG1EZXZpY2UoTlVM
TCksIG1Db3VudGVyKDApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bUJsZW5kU3RhdGVDYWNoZShrTWF4QmxlbmRTdGF0ZXMsIGhhc2hCbGVuZFN0YXRlLCBjb21wYXJl
QmxlbmRTdGF0ZXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJh
c3Rlcml6ZXJTdGF0ZUNhY2hlKGtNYXhSYXN0ZXJpemVyU3RhdGVzLCBoYXNoUmFzdGVyaXplclN0
YXRlLCBjb21wYXJlUmFzdGVyaXplclN0YXRlcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZShrTWF4RGVwdGhTdGVuY2lsU3Rh
dGVzLCBoYXNoRGVwdGhTdGVuY2lsU3RhdGUsIGNvbXBhcmVEZXB0aFN0ZW5jaWxTdGF0ZXMpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJTdGF0ZUNhY2hl
KGtNYXhTYW1wbGVyU3RhdGVzLCBoYXNoU2FtcGxlclN0YXRlLCBjb21wYXJlU2FtcGxlclN0YXRl
cykKLXsKLX0KLQotUmVuZGVyU3RhdGVDYWNoZTo6flJlbmRlclN0YXRlQ2FjaGUoKQotewotICAg
IGNsZWFyKCk7Ci19Ci0KLXZvaWQgUmVuZGVyU3RhdGVDYWNoZTo6aW5pdGlhbGl6ZShJRDNEMTFE
ZXZpY2UgKmRldmljZSkKLXsKLSAgICBjbGVhcigpOwotICAgIG1EZXZpY2UgPSBkZXZpY2U7Ci19
Ci0KLXZvaWQgUmVuZGVyU3RhdGVDYWNoZTo6Y2xlYXIoKQotewotICAgIGZvciAoQmxlbmRTdGF0
ZU1hcDo6aXRlcmF0b3IgaSA9IG1CbGVuZFN0YXRlQ2FjaGUuYmVnaW4oKTsgaSAhPSBtQmxlbmRT
dGF0ZUNhY2hlLmVuZCgpOyBpKyspCi0gICAgewotICAgICAgICBpLT5zZWNvbmQuZmlyc3QtPlJl
bGVhc2UoKTsKLSAgICB9Ci0gICAgbUJsZW5kU3RhdGVDYWNoZS5jbGVhcigpOwotCi0gICAgZm9y
IChSYXN0ZXJpemVyU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtUmFzdGVyaXplclN0YXRlQ2FjaGUu
YmVnaW4oKTsgaSAhPSBtUmFzdGVyaXplclN0YXRlQ2FjaGUuZW5kKCk7IGkrKykKLSAgICB7Ci0g
ICAgICAgIGktPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOwotICAgIH0KLSAgICBtUmFzdGVyaXpl
clN0YXRlQ2FjaGUuY2xlYXIoKTsKLQotICAgIGZvciAoRGVwdGhTdGVuY2lsU3RhdGVNYXA6Oml0
ZXJhdG9yIGkgPSBtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5iZWdpbigpOyBpICE9IG1EZXB0aFN0
ZW5jaWxTdGF0ZUNhY2hlLmVuZCgpOyBpKyspCi0gICAgewotICAgICAgICBpLT5zZWNvbmQuZmly
c3QtPlJlbGVhc2UoKTsKLSAgICB9Ci0gICAgbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuY2xlYXIo
KTsKLQotICAgIGZvciAoU2FtcGxlclN0YXRlTWFwOjppdGVyYXRvciBpID0gbVNhbXBsZXJTdGF0
ZUNhY2hlLmJlZ2luKCk7IGkgIT0gbVNhbXBsZXJTdGF0ZUNhY2hlLmVuZCgpOyBpKyspCi0gICAg
ewotICAgICAgICBpLT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKLSAgICB9Ci0gICAgbVNhbXBs
ZXJTdGF0ZUNhY2hlLmNsZWFyKCk7Ci19Ci0KLXN0ZDo6c2l6ZV90IFJlbmRlclN0YXRlQ2FjaGU6
Omhhc2hCbGVuZFN0YXRlKGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRlKQotewotICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2VlZCA9IDB4QUJDREVGOTg7Ci0KLSAgICBzdGQ6
OnNpemVfdCBoYXNoID0gMDsKLSAgICBNdXJtdXJIYXNoM194ODZfMzIoJmJsZW5kU3RhdGUsIHNp
emVvZihnbDo6QmxlbmRTdGF0ZSksIHNlZWQsICZoYXNoKTsKLSAgICByZXR1cm4gaGFzaDsKLX0K
LQotYm9vbCBSZW5kZXJTdGF0ZUNhY2hlOjpjb21wYXJlQmxlbmRTdGF0ZXMoY29uc3QgZ2w6OkJs
ZW5kU3RhdGUgJmEsIGNvbnN0IGdsOjpCbGVuZFN0YXRlICZiKQotewotICAgIHJldHVybiBtZW1j
bXAoJmEsICZiLCBzaXplb2YoZ2w6OkJsZW5kU3RhdGUpKSA9PSAwOwotfQotCi1JRDNEMTFCbGVu
ZFN0YXRlICpSZW5kZXJTdGF0ZUNhY2hlOjpnZXRCbGVuZFN0YXRlKGNvbnN0IGdsOjpCbGVuZFN0
YXRlICZibGVuZFN0YXRlKQotewotICAgIGlmICghbURldmljZSkKLSAgICB7Ci0gICAgICAgIEVS
UigiUmVuZGVyU3RhdGVDYWNoZSBpcyBub3QgaW5pdGlhbGl6ZWQuIik7Ci0gICAgICAgIHJldHVy
biBOVUxMOwotICAgIH0KLQotICAgIEJsZW5kU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtQmxlbmRT
dGF0ZUNhY2hlLmZpbmQoYmxlbmRTdGF0ZSk7Ci0gICAgaWYgKGkgIT0gbUJsZW5kU3RhdGVDYWNo
ZS5lbmQoKSkKLSAgICB7Ci0gICAgICAgIEJsZW5kU3RhdGVDb3VudGVyUGFpciAmc3RhdGUgPSBp
LT5zZWNvbmQ7Ci0gICAgICAgIHN0YXRlLnNlY29uZCA9IG1Db3VudGVyKys7Ci0gICAgICAgIHJl
dHVybiBzdGF0ZS5maXJzdDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKG1C
bGVuZFN0YXRlQ2FjaGUuc2l6ZSgpID49IGtNYXhCbGVuZFN0YXRlcykKLSAgICAgICAgewotICAg
ICAgICAgICAgVFJBQ0UoIk92ZXJmbG93ZWQgdGhlIGxpbWl0IG9mICV1IGJsZW5kIHN0YXRlcywg
cmVtb3ZpbmcgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWQgIgotICAgICAgICAgICAgICAgICAgInRv
IG1ha2Ugcm9vbS4iLCBrTWF4QmxlbmRTdGF0ZXMpOwotCi0gICAgICAgICAgICBCbGVuZFN0YXRl
TWFwOjppdGVyYXRvciBsZWFzdFJlY2VudGx5VXNlZCA9IG1CbGVuZFN0YXRlQ2FjaGUuYmVnaW4o
KTsKLSAgICAgICAgICAgIGZvciAoQmxlbmRTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1CbGVuZFN0
YXRlQ2FjaGUuYmVnaW4oKTsgaSAhPSBtQmxlbmRTdGF0ZUNhY2hlLmVuZCgpOyBpKyspCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGktPnNlY29uZC5zZWNvbmQgPCBsZWFzdFJl
Y2VudGx5VXNlZC0+c2Vjb25kLnNlY29uZCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkID0gaTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmZpcnN0LT5S
ZWxlYXNlKCk7Ci0gICAgICAgICAgICBtQmxlbmRTdGF0ZUNhY2hlLmVyYXNlKGxlYXN0UmVjZW50
bHlVc2VkKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBibGVuZCBzdGF0
ZSBhbmQgaW5zZXJ0IGl0IGludG8gdGhlIGNhY2hlCi0gICAgICAgIEQzRDExX0JMRU5EX0RFU0Mg
YmxlbmREZXNjID0geyAwIH07Ci0gICAgICAgIGJsZW5kRGVzYy5BbHBoYVRvQ292ZXJhZ2VFbmFi
bGUgPSBibGVuZFN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZTsKLSAgICAgICAgYmxlbmREZXNj
LkluZGVwZW5kZW50QmxlbmRFbmFibGUgPSBGQUxTRTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IEQzRDExX1NJTVVMVEFORU9VU19SRU5ERVJfVEFSR0VUX0NPVU5UOyBp
KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfQkxFTkRfREVT
QyAmcnRCbGVuZCA9IGJsZW5kRGVzYy5SZW5kZXJUYXJnZXRbaV07Ci0KLSAgICAgICAgICAgIHJ0
QmxlbmQuQmxlbmRFbmFibGUgPSBibGVuZFN0YXRlLmJsZW5kOwotICAgICAgICAgICAgaWYgKGJs
ZW5kU3RhdGUuYmxlbmQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcnRCbGVuZC5T
cmNCbGVuZCA9IGdsX2QzZDExOjpDb252ZXJ0QmxlbmRGdW5jKGJsZW5kU3RhdGUuc291cmNlQmxl
bmRSR0IsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICBydEJsZW5kLkRlc3RCbGVuZCA9IGdsX2Qz
ZDExOjpDb252ZXJ0QmxlbmRGdW5jKGJsZW5kU3RhdGUuZGVzdEJsZW5kUkdCLCBmYWxzZSk7Ci0g
ICAgICAgICAgICAgICAgcnRCbGVuZC5CbGVuZE9wID0gZ2xfZDNkMTE6OkNvbnZlcnRCbGVuZE9w
KGJsZW5kU3RhdGUuYmxlbmRFcXVhdGlvblJHQik7Ci0KLSAgICAgICAgICAgICAgICBydEJsZW5k
LlNyY0JsZW5kQWxwaGEgPSBnbF9kM2QxMTo6Q29udmVydEJsZW5kRnVuYyhibGVuZFN0YXRlLnNv
dXJjZUJsZW5kQWxwaGEsIHRydWUpOwotICAgICAgICAgICAgICAgIHJ0QmxlbmQuRGVzdEJsZW5k
QWxwaGEgPSBnbF9kM2QxMTo6Q29udmVydEJsZW5kRnVuYyhibGVuZFN0YXRlLmRlc3RCbGVuZEFs
cGhhLCB0cnVlKTsKLSAgICAgICAgICAgICAgICBydEJsZW5kLkJsZW5kT3BBbHBoYSA9IGdsX2Qz
ZDExOjpDb252ZXJ0QmxlbmRPcChibGVuZFN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJ0QmxlbmQuUmVuZGVyVGFyZ2V0V3JpdGVNYXNrID0g
Z2xfZDNkMTE6OkNvbnZlcnRDb2xvck1hc2soYmxlbmRTdGF0ZS5jb2xvck1hc2tSZWQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJsZW5kU3RhdGUuY29sb3JNYXNrR3JlZW4sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5k
U3RhdGUuY29sb3JNYXNrQmx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRTdGF0ZS5jb2xvck1hc2tB
bHBoYSk7Ci0gICAgICAgIH0KLQotICAgICAgICBJRDNEMTFCbGVuZFN0YXRlICpkeDExQmxlbmRT
dGF0ZSA9IE5VTEw7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlQmxl
bmRTdGF0ZSgmYmxlbmREZXNjLCAmZHgxMUJsZW5kU3RhdGUpOwotICAgICAgICBpZiAoRkFJTEVE
KHJlc3VsdCkgfHwgIWR4MTFCbGVuZFN0YXRlKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIo
IlVuYWJsZSB0byBjcmVhdGUgYSBJRDNEMTFCbGVuZFN0YXRlLCBIUkVTVUxUOiAweCVYLiIsIHJl
c3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIG1C
bGVuZFN0YXRlQ2FjaGUuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGJsZW5kU3RhdGUsIHN0ZDo6bWFr
ZV9wYWlyKGR4MTFCbGVuZFN0YXRlLCBtQ291bnRlcisrKSkpOwotCi0gICAgICAgIHJldHVybiBk
eDExQmxlbmRTdGF0ZTsKLSAgICB9Ci19Ci0KLXN0ZDo6c2l6ZV90IFJlbmRlclN0YXRlQ2FjaGU6
Omhhc2hSYXN0ZXJpemVyU3RhdGUoY29uc3QgUmFzdGVyaXplclN0YXRlS2V5ICZyYXN0ZXJTdGF0
ZSkKLXsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNlZWQgPSAweEFCQ0RFRjk4Owot
Ci0gICAgc3RkOjpzaXplX3QgaGFzaCA9IDA7Ci0gICAgTXVybXVySGFzaDNfeDg2XzMyKCZyYXN0
ZXJTdGF0ZSwgc2l6ZW9mKFJhc3Rlcml6ZXJTdGF0ZUtleSksIHNlZWQsICZoYXNoKTsKLSAgICBy
ZXR1cm4gaGFzaDsKLX0KLQotYm9vbCBSZW5kZXJTdGF0ZUNhY2hlOjpjb21wYXJlUmFzdGVyaXpl
clN0YXRlcyhjb25zdCBSYXN0ZXJpemVyU3RhdGVLZXkgJmEsIGNvbnN0IFJhc3Rlcml6ZXJTdGF0
ZUtleSAmYikKLXsKLSAgICByZXR1cm4gbWVtY21wKCZhLCAmYiwgc2l6ZW9mKFJhc3Rlcml6ZXJT
dGF0ZUtleSkpID09IDA7Ci19Ci0KLUlEM0QxMVJhc3Rlcml6ZXJTdGF0ZSAqUmVuZGVyU3RhdGVD
YWNoZTo6Z2V0UmFzdGVyaXplclN0YXRlKGNvbnN0IGdsOjpSYXN0ZXJpemVyU3RhdGUgJnJhc3Rl
clN0YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBzY2lzc29yRW5hYmxlZCwgdW5zaWduZWQgaW50IGRlcHRoU2l6ZSkK
LXsKLSAgICBpZiAoIW1EZXZpY2UpCi0gICAgewotICAgICAgICBFUlIoIlJlbmRlclN0YXRlQ2Fj
aGUgaXMgbm90IGluaXRpYWxpemVkLiIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0K
LSAgICBSYXN0ZXJpemVyU3RhdGVLZXkga2V5OwotICAgIGtleS5yYXN0ZXJpemVyU3RhdGUgPSBy
YXN0ZXJTdGF0ZTsKLSAgICBrZXkuc2Npc3NvckVuYWJsZWQgPSBzY2lzc29yRW5hYmxlZDsKLSAg
ICBrZXkuZGVwdGhTaXplID0gZGVwdGhTaXplOwotCi0gICAgUmFzdGVyaXplclN0YXRlTWFwOjpp
dGVyYXRvciBpID0gbVJhc3Rlcml6ZXJTdGF0ZUNhY2hlLmZpbmQoa2V5KTsKLSAgICBpZiAoaSAh
PSBtUmFzdGVyaXplclN0YXRlQ2FjaGUuZW5kKCkpCi0gICAgewotICAgICAgICBSYXN0ZXJpemVy
U3RhdGVDb3VudGVyUGFpciAmc3RhdGUgPSBpLT5zZWNvbmQ7Ci0gICAgICAgIHN0YXRlLnNlY29u
ZCA9IG1Db3VudGVyKys7Ci0gICAgICAgIHJldHVybiBzdGF0ZS5maXJzdDsKLSAgICB9Ci0gICAg
ZWxzZQotICAgIHsKLSAgICAgICAgaWYgKG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5zaXplKCkgPj0g
a01heFJhc3Rlcml6ZXJTdGF0ZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFRSQUNFKCJPdmVy
Zmxvd2VkIHRoZSBsaW1pdCBvZiAldSByYXN0ZXJpemVyIHN0YXRlcywgcmVtb3ZpbmcgdGhlIGxl
YXN0IHJlY2VudGx5IHVzZWQgIgotICAgICAgICAgICAgICAgICAgInRvIG1ha2Ugcm9vbS4iLCBr
TWF4UmFzdGVyaXplclN0YXRlcyk7Ci0KLSAgICAgICAgICAgIFJhc3Rlcml6ZXJTdGF0ZU1hcDo6
aXRlcmF0b3IgbGVhc3RSZWNlbnRseVVzZWQgPSBtUmFzdGVyaXplclN0YXRlQ2FjaGUuYmVnaW4o
KTsKLSAgICAgICAgICAgIGZvciAoUmFzdGVyaXplclN0YXRlTWFwOjppdGVyYXRvciBpID0gbVJh
c3Rlcml6ZXJTdGF0ZUNhY2hlLmJlZ2luKCk7IGkgIT0gbVJhc3Rlcml6ZXJTdGF0ZUNhY2hlLmVu
ZCgpOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGktPnNlY29uZC5z
ZWNvbmQgPCBsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLnNlY29uZCkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkID0gaTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZC0+
c2Vjb25kLmZpcnN0LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBtUmFzdGVyaXplclN0YXRlQ2Fj
aGUuZXJhc2UobGVhc3RSZWNlbnRseVVzZWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgRDNEMTFf
Q1VMTF9NT0RFIGN1bGxNb2RlID0gZ2xfZDNkMTE6OkNvbnZlcnRDdWxsTW9kZShyYXN0ZXJTdGF0
ZS5jdWxsRmFjZSwgcmFzdGVyU3RhdGUuY3VsbE1vZGUpOwotCi0gICAgICAgIC8vIERpc2FibGUg
Y3VsbGluZyBpZiBkcmF3aW5nIHBvaW50cwotICAgICAgICBpZiAocmFzdGVyU3RhdGUucG9pbnRE
cmF3TW9kZSkKLSAgICAgICAgewotICAgICAgICAgICAgY3VsbE1vZGUgPSBEM0QxMV9DVUxMX05P
TkU7Ci0gICAgICAgIH0KLQotICAgICAgICBEM0QxMV9SQVNURVJJWkVSX0RFU0MgcmFzdGVyRGVz
YzsKLSAgICAgICAgcmFzdGVyRGVzYy5GaWxsTW9kZSA9IEQzRDExX0ZJTExfU09MSUQ7Ci0gICAg
ICAgIHJhc3RlckRlc2MuQ3VsbE1vZGUgPSBjdWxsTW9kZTsKLSAgICAgICAgcmFzdGVyRGVzYy5G
cm9udENvdW50ZXJDbG9ja3dpc2UgPSAocmFzdGVyU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVykg
PyBGQUxTRTogVFJVRTsKLSAgICAgICAgcmFzdGVyRGVzYy5EZXB0aEJpYXMgPSBsZGV4cChyYXN0
ZXJTdGF0ZS5wb2x5Z29uT2Zmc2V0VW5pdHMsIC1zdGF0aWNfY2FzdDxpbnQ+KGRlcHRoU2l6ZSkp
OwotICAgICAgICByYXN0ZXJEZXNjLkRlcHRoQmlhc0NsYW1wID0gMC4wZjsgLy8gTVNETiBkb2N1
bWVudGF0aW9uIG9mIERlcHRoQmlhc0NsYW1wIGltcGxpZXMgYSB2YWx1ZSBvZiB6ZXJvIHdpbGwg
cHJlZm9ybSBubyBjbGFtcGluZywgbXVzdCBiZSB0ZXN0ZWQgdGhvdWdoLgotICAgICAgICByYXN0
ZXJEZXNjLlNsb3BlU2NhbGVkRGVwdGhCaWFzID0gcmFzdGVyU3RhdGUucG9seWdvbk9mZnNldEZh
Y3RvcjsKLSAgICAgICAgcmFzdGVyRGVzYy5EZXB0aENsaXBFbmFibGUgPSBUUlVFOwotICAgICAg
ICByYXN0ZXJEZXNjLlNjaXNzb3JFbmFibGUgPSBzY2lzc29yRW5hYmxlZCA/IFRSVUUgOiBGQUxT
RTsKLSAgICAgICAgcmFzdGVyRGVzYy5NdWx0aXNhbXBsZUVuYWJsZSA9IHJhc3RlclN0YXRlLm11
bHRpU2FtcGxlOwotICAgICAgICByYXN0ZXJEZXNjLkFudGlhbGlhc2VkTGluZUVuYWJsZSA9IEZB
TFNFOwotCi0gICAgICAgIElEM0QxMVJhc3Rlcml6ZXJTdGF0ZSAqZHgxMVJhc3Rlcml6ZXJTdGF0
ZSA9IE5VTEw7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUmFzdGVy
aXplclN0YXRlKCZyYXN0ZXJEZXNjLCAmZHgxMVJhc3Rlcml6ZXJTdGF0ZSk7Ci0gICAgICAgIGlm
IChGQUlMRUQocmVzdWx0KSB8fCAhZHgxMVJhc3Rlcml6ZXJTdGF0ZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgRVJSKCJVbmFibGUgdG8gY3JlYXRlIGEgSUQzRDExUmFzdGVyaXplclN0YXRlLCBI
UkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAg
ICAgfQotCi0gICAgICAgIG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5pbnNlcnQoc3RkOjptYWtlX3Bh
aXIoa2V5LCBzdGQ6Om1ha2VfcGFpcihkeDExUmFzdGVyaXplclN0YXRlLCBtQ291bnRlcisrKSkp
OwotCi0gICAgICAgIHJldHVybiBkeDExUmFzdGVyaXplclN0YXRlOwotICAgIH0KLX0KLQotc3Rk
OjpzaXplX3QgUmVuZGVyU3RhdGVDYWNoZTo6aGFzaERlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGds
OjpEZXB0aFN0ZW5jaWxTdGF0ZSAmZHNTdGF0ZSkKLXsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgaW50IHNlZWQgPSAweEFCQ0RFRjk4OwotCi0gICAgc3RkOjpzaXplX3QgaGFzaCA9IDA7Ci0g
ICAgTXVybXVySGFzaDNfeDg2XzMyKCZkc1N0YXRlLCBzaXplb2YoZ2w6OkRlcHRoU3RlbmNpbFN0
YXRlKSwgc2VlZCwgJmhhc2gpOwotICAgIHJldHVybiBoYXNoOwotfQotCi1ib29sIFJlbmRlclN0
YXRlQ2FjaGU6OmNvbXBhcmVEZXB0aFN0ZW5jaWxTdGF0ZXMoY29uc3QgZ2w6OkRlcHRoU3RlbmNp
bFN0YXRlICZhLCBjb25zdCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmIpCi17Ci0gICAgcmV0dXJu
IG1lbWNtcCgmYSwgJmIsIHNpemVvZihnbDo6RGVwdGhTdGVuY2lsU3RhdGUpKSA9PSAwOwotfQot
Ci1JRDNEMTFEZXB0aFN0ZW5jaWxTdGF0ZSAqUmVuZGVyU3RhdGVDYWNoZTo6Z2V0RGVwdGhTdGVu
Y2lsU3RhdGUoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZkc1N0YXRlKQotewotICAgIGlm
ICghbURldmljZSkKLSAgICB7Ci0gICAgICAgIEVSUigiUmVuZGVyU3RhdGVDYWNoZSBpcyBub3Qg
aW5pdGlhbGl6ZWQuIik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIERlcHRo
U3RlbmNpbFN0YXRlTWFwOjppdGVyYXRvciBpID0gbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuZmlu
ZChkc1N0YXRlKTsKLSAgICBpZiAoaSAhPSBtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5lbmQoKSkK
LSAgICB7Ci0gICAgICAgIERlcHRoU3RlbmNpbFN0YXRlQ291bnRlclBhaXIgJnN0YXRlID0gaS0+
c2Vjb25kOwotICAgICAgICBzdGF0ZS5zZWNvbmQgPSBtQ291bnRlcisrOwotICAgICAgICByZXR1
cm4gc3RhdGUuZmlyc3Q7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmIChtRGVw
dGhTdGVuY2lsU3RhdGVDYWNoZS5zaXplKCkgPj0ga01heERlcHRoU3RlbmNpbFN0YXRlcykKLSAg
ICAgICAgewotICAgICAgICAgICAgVFJBQ0UoIk92ZXJmbG93ZWQgdGhlIGxpbWl0IG9mICV1IGRl
cHRoIHN0ZW5jaWwgc3RhdGVzLCByZW1vdmluZyB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCAiCi0g
ICAgICAgICAgICAgICAgICAidG8gbWFrZSByb29tLiIsIGtNYXhEZXB0aFN0ZW5jaWxTdGF0ZXMp
OwotCi0gICAgICAgICAgICBEZXB0aFN0ZW5jaWxTdGF0ZU1hcDo6aXRlcmF0b3IgbGVhc3RSZWNl
bnRseVVzZWQgPSBtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5iZWdpbigpOwotICAgICAgICAgICAg
Zm9yIChEZXB0aFN0ZW5jaWxTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1EZXB0aFN0ZW5jaWxTdGF0
ZUNhY2hlLmJlZ2luKCk7IGkgIT0gbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuZW5kKCk7IGkrKykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoaS0+c2Vjb25kLnNlY29uZCA8IGxl
YXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuc2Vjb25kKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQgPSBpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuZmly
c3QtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmVyYXNl
KGxlYXN0UmVjZW50bHlVc2VkKTsKLSAgICAgICAgfQotCi0gICAgICAgIEQzRDExX0RFUFRIX1NU
RU5DSUxfREVTQyBkc0Rlc2MgPSB7IDAgfTsKLSAgICAgICAgZHNEZXNjLkRlcHRoRW5hYmxlID0g
ZHNTdGF0ZS5kZXB0aFRlc3QgPyBUUlVFIDogRkFMU0U7Ci0gICAgICAgIGRzRGVzYy5EZXB0aFdy
aXRlTWFzayA9IGdsX2QzZDExOjpDb252ZXJ0RGVwdGhNYXNrKGRzU3RhdGUuZGVwdGhNYXNrKTsK
LSAgICAgICAgZHNEZXNjLkRlcHRoRnVuYyA9IGdsX2QzZDExOjpDb252ZXJ0Q29tcGFyaXNvbihk
c1N0YXRlLmRlcHRoRnVuYyk7Ci0gICAgICAgIGRzRGVzYy5TdGVuY2lsRW5hYmxlID0gZHNTdGF0
ZS5zdGVuY2lsVGVzdCA/IFRSVUUgOiBGQUxTRTsKLSAgICAgICAgZHNEZXNjLlN0ZW5jaWxSZWFk
TWFzayA9IGdsX2QzZDExOjpDb252ZXJ0U3RlbmNpbE1hc2soZHNTdGF0ZS5zdGVuY2lsTWFzayk7
Ci0gICAgICAgIGRzRGVzYy5TdGVuY2lsV3JpdGVNYXNrID0gZ2xfZDNkMTE6OkNvbnZlcnRTdGVu
Y2lsTWFzayhkc1N0YXRlLnN0ZW5jaWxXcml0ZW1hc2spOwotICAgICAgICBkc0Rlc2MuRnJvbnRG
YWNlLlN0ZW5jaWxGYWlsT3AgPSBnbF9kM2QxMTo6Q29udmVydFN0ZW5jaWxPcChkc1N0YXRlLnN0
ZW5jaWxGYWlsKTsKLSAgICAgICAgZHNEZXNjLkZyb250RmFjZS5TdGVuY2lsRGVwdGhGYWlsT3Ag
PSBnbF9kM2QxMTo6Q29udmVydFN0ZW5jaWxPcChkc1N0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWls
KTsKLSAgICAgICAgZHNEZXNjLkZyb250RmFjZS5TdGVuY2lsUGFzc09wID0gZ2xfZDNkMTE6OkNv
bnZlcnRTdGVuY2lsT3AoZHNTdGF0ZS5zdGVuY2lsUGFzc0RlcHRoUGFzcyk7Ci0gICAgICAgIGRz
RGVzYy5Gcm9udEZhY2UuU3RlbmNpbEZ1bmMgPSBnbF9kM2QxMTo6Q29udmVydENvbXBhcmlzb24o
ZHNTdGF0ZS5zdGVuY2lsRnVuYyk7Ci0gICAgICAgIGRzRGVzYy5CYWNrRmFjZS5TdGVuY2lsRmFp
bE9wID0gZ2xfZDNkMTE6OkNvbnZlcnRTdGVuY2lsT3AoZHNTdGF0ZS5zdGVuY2lsQmFja0ZhaWwp
OwotICAgICAgICBkc0Rlc2MuQmFja0ZhY2UuU3RlbmNpbERlcHRoRmFpbE9wID0gZ2xfZDNkMTE6
OkNvbnZlcnRTdGVuY2lsT3AoZHNTdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwpOwotICAg
ICAgICBkc0Rlc2MuQmFja0ZhY2UuU3RlbmNpbFBhc3NPcCA9IGdsX2QzZDExOjpDb252ZXJ0U3Rl
bmNpbE9wKGRzU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzKTsKLSAgICAgICAgZHNEZXNj
LkJhY2tGYWNlLlN0ZW5jaWxGdW5jID0gZ2xfZDNkMTE6OkNvbnZlcnRDb21wYXJpc29uKGRzU3Rh
dGUuc3RlbmNpbEJhY2tGdW5jKTsKLQotICAgICAgICBJRDNEMTFEZXB0aFN0ZW5jaWxTdGF0ZSAq
ZHgxMURlcHRoU3RlbmNpbFN0YXRlID0gTlVMTDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBt
RGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxTdGF0ZSgmZHNEZXNjLCAmZHgxMURlcHRoU3RlbmNp
bFN0YXRlKTsKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpIHx8ICFkeDExRGVwdGhTdGVuY2ls
U3RhdGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiVW5hYmxlIHRvIGNyZWF0ZSBhIElE
M0QxMURlcHRoU3RlbmNpbFN0YXRlLCBIUkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7Ci0gICAgICAg
ICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIG1EZXB0aFN0ZW5jaWxTdGF0
ZUNhY2hlLmluc2VydChzdGQ6Om1ha2VfcGFpcihkc1N0YXRlLCBzdGQ6Om1ha2VfcGFpcihkeDEx
RGVwdGhTdGVuY2lsU3RhdGUsIG1Db3VudGVyKyspKSk7Ci0KLSAgICAgICAgcmV0dXJuIGR4MTFE
ZXB0aFN0ZW5jaWxTdGF0ZTsKLSAgICB9Ci19Ci0KLXN0ZDo6c2l6ZV90IFJlbmRlclN0YXRlQ2Fj
aGU6Omhhc2hTYW1wbGVyU3RhdGUoY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRl
KQotewotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2VlZCA9IDB4QUJDREVGOTg7Ci0K
LSAgICBzdGQ6OnNpemVfdCBoYXNoID0gMDsKLSAgICBNdXJtdXJIYXNoM194ODZfMzIoJnNhbXBs
ZXJTdGF0ZSwgc2l6ZW9mKGdsOjpTYW1wbGVyU3RhdGUpLCBzZWVkLCAmaGFzaCk7Ci0gICAgcmV0
dXJuIGhhc2g7Ci19Ci0KLWJvb2wgUmVuZGVyU3RhdGVDYWNoZTo6Y29tcGFyZVNhbXBsZXJTdGF0
ZXMoY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmYSwgY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmYikK
LXsKLSAgICByZXR1cm4gbWVtY21wKCZhLCAmYiwgc2l6ZW9mKGdsOjpTYW1wbGVyU3RhdGUpKSA9
PSAwOwotfQotCi1JRDNEMTFTYW1wbGVyU3RhdGUgKlJlbmRlclN0YXRlQ2FjaGU6OmdldFNhbXBs
ZXJTdGF0ZShjb25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpCi17Ci0gICAgaWYg
KCFtRGV2aWNlKQotICAgIHsKLSAgICAgICAgRVJSKCJSZW5kZXJTdGF0ZUNhY2hlIGlzIG5vdCBp
bml0aWFsaXplZC4iKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgU2FtcGxl
clN0YXRlTWFwOjppdGVyYXRvciBpID0gbVNhbXBsZXJTdGF0ZUNhY2hlLmZpbmQoc2FtcGxlclN0
YXRlKTsKLSAgICBpZiAoaSAhPSBtU2FtcGxlclN0YXRlQ2FjaGUuZW5kKCkpCi0gICAgewotICAg
ICAgICBTYW1wbGVyU3RhdGVDb3VudGVyUGFpciAmc3RhdGUgPSBpLT5zZWNvbmQ7Ci0gICAgICAg
IHN0YXRlLnNlY29uZCA9IG1Db3VudGVyKys7Ci0gICAgICAgIHJldHVybiBzdGF0ZS5maXJzdDsK
LSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKG1TYW1wbGVyU3RhdGVDYWNoZS5z
aXplKCkgPj0ga01heFNhbXBsZXJTdGF0ZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFRSQUNF
KCJPdmVyZmxvd2VkIHRoZSBsaW1pdCBvZiAldSBzYW1wbGVyIHN0YXRlcywgcmVtb3ZpbmcgdGhl
IGxlYXN0IHJlY2VudGx5IHVzZWQgIgotICAgICAgICAgICAgICAgICAgInRvIG1ha2Ugcm9vbS4i
LCBrTWF4U2FtcGxlclN0YXRlcyk7Ci0KLSAgICAgICAgICAgIFNhbXBsZXJTdGF0ZU1hcDo6aXRl
cmF0b3IgbGVhc3RSZWNlbnRseVVzZWQgPSBtU2FtcGxlclN0YXRlQ2FjaGUuYmVnaW4oKTsKLSAg
ICAgICAgICAgIGZvciAoU2FtcGxlclN0YXRlTWFwOjppdGVyYXRvciBpID0gbVNhbXBsZXJTdGF0
ZUNhY2hlLmJlZ2luKCk7IGkgIT0gbVNhbXBsZXJTdGF0ZUNhY2hlLmVuZCgpOyBpKyspCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGktPnNlY29uZC5zZWNvbmQgPCBsZWFzdFJl
Y2VudGx5VXNlZC0+c2Vjb25kLnNlY29uZCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkID0gaTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmZpcnN0LT5S
ZWxlYXNlKCk7Ci0gICAgICAgICAgICBtU2FtcGxlclN0YXRlQ2FjaGUuZXJhc2UobGVhc3RSZWNl
bnRseVVzZWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgRDNEMTFfU0FNUExFUl9ERVNDIHNhbXBs
ZXJEZXNjOwotICAgICAgICBzYW1wbGVyRGVzYy5GaWx0ZXIgPSBnbF9kM2QxMTo6Q29udmVydEZp
bHRlcihzYW1wbGVyU3RhdGUubWluRmlsdGVyLCBzYW1wbGVyU3RhdGUubWFnRmlsdGVyLCBzYW1w
bGVyU3RhdGUubWF4QW5pc290cm9weSk7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkFkZHJlc3NVID0g
Z2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlV3JhcChzYW1wbGVyU3RhdGUud3JhcFMpOwotICAgICAg
ICBzYW1wbGVyRGVzYy5BZGRyZXNzViA9IGdsX2QzZDExOjpDb252ZXJ0VGV4dHVyZVdyYXAoc2Ft
cGxlclN0YXRlLndyYXBUKTsKLSAgICAgICAgc2FtcGxlckRlc2MuQWRkcmVzc1cgPSBEM0QxMV9U
RVhUVVJFX0FERFJFU1NfQ0xBTVA7Ci0gICAgICAgIHNhbXBsZXJEZXNjLk1pcExPREJpYXMgPSBz
dGF0aWNfY2FzdDxmbG9hdD4oc2FtcGxlclN0YXRlLmxvZE9mZnNldCk7Ci0gICAgICAgIHNhbXBs
ZXJEZXNjLk1heEFuaXNvdHJvcHkgPSBzYW1wbGVyU3RhdGUubWF4QW5pc290cm9weTsKLSAgICAg
ICAgc2FtcGxlckRlc2MuQ29tcGFyaXNvbkZ1bmMgPSBEM0QxMV9DT01QQVJJU09OX05FVkVSOwot
ICAgICAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclswXSA9IDAuMGY7Ci0gICAgICAgIHNhbXBs
ZXJEZXNjLkJvcmRlckNvbG9yWzFdID0gMC4wZjsKLSAgICAgICAgc2FtcGxlckRlc2MuQm9yZGVy
Q29sb3JbMl0gPSAwLjBmOwotICAgICAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclszXSA9IDAu
MGY7Ci0gICAgICAgIHNhbXBsZXJEZXNjLk1pbkxPRCA9IGdsX2QzZDExOjpDb252ZXJ0TWluTE9E
KHNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIsIHNhbXBsZXJTdGF0ZS5sb2RPZmZzZXQpOwotICAgICAg
ICBzYW1wbGVyRGVzYy5NYXhMT0QgPSBnbF9kM2QxMTo6Q29udmVydE1heExPRChzYW1wbGVyU3Rh
dGUubWluRmlsdGVyLCBzYW1wbGVyU3RhdGUubG9kT2Zmc2V0KTsKLQotICAgICAgICBJRDNEMTFT
YW1wbGVyU3RhdGUgKmR4MTFTYW1wbGVyU3RhdGUgPSBOVUxMOwotICAgICAgICBIUkVTVUxUIHJl
c3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVNhbXBsZXJTdGF0ZSgmc2FtcGxlckRlc2MsICZkeDExU2Ft
cGxlclN0YXRlKTsKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpIHx8ICFkeDExU2FtcGxlclN0
YXRlKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIlVuYWJsZSB0byBjcmVhdGUgYSBJRDNE
MTFEZXB0aFN0ZW5jaWxTdGF0ZSwgSFJFU1VMVDogMHglWC4iLCByZXN1bHQpOwotICAgICAgICAg
ICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICBtU2FtcGxlclN0YXRlQ2FjaGUu
aW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKHNhbXBsZXJTdGF0ZSwgc3RkOjptYWtlX3BhaXIoZHgxMVNh
bXBsZXJTdGF0ZSwgbUNvdW50ZXIrKykpKTsKLQotICAgICAgICByZXR1cm4gZHgxMVNhbXBsZXJT
dGF0ZTsKLSAgICB9Ci19Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRl
clN0YXRlQ2FjaGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvUmVuZGVyU3RhdGVDYWNoZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBm
OGI1MTExZGU0OGYzMjg4MzE0YmQ1MjRhMDdlNDM3MDVkOWJjMzI5Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyU3RhdGVDYWNoZS5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTAxICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQot
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFJlbmRlclN0YXRlQ2FjaGUu
aDogRGVmaW5lcyByeDo6UmVuZGVyU3RhdGVDYWNoZSwgYSBjYWNoZSBvZiBEaXJlY3QzRCByZW5k
ZXIKLS8vIHN0YXRlIG9iamVjdHMuCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRF
UlNUQVRFQ0FDSEVfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUlNUQVRFQ0FD
SEVfSF8KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgiCi0jaW5jbHVkZSAiY29t
bW9uL2FuZ2xldXRpbHMuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLWNsYXNzIFJlbmRlclN0YXRl
Q2FjaGUKLXsKLSAgcHVibGljOgotICAgIFJlbmRlclN0YXRlQ2FjaGUoKTsKLSAgICB2aXJ0dWFs
IH5SZW5kZXJTdGF0ZUNhY2hlKCk7Ci0KLSAgICB2b2lkIGluaXRpYWxpemUoSUQzRDExRGV2aWNl
ICpkZXZpY2UpOwotICAgIHZvaWQgY2xlYXIoKTsKLQotICAgIC8vIEluY3JlbWVudHMgcmVmY291
bnQgb24gdGhlIHJldHVybmVkIGJsZW5kIHN0YXRlLCBSZWxlYXNlKCkgbXVzdCBiZSBjYWxsZWQu
Ci0gICAgSUQzRDExQmxlbmRTdGF0ZSAqZ2V0QmxlbmRTdGF0ZShjb25zdCBnbDo6QmxlbmRTdGF0
ZSAmYmxlbmRTdGF0ZSk7Ci0gICAgSUQzRDExUmFzdGVyaXplclN0YXRlICpnZXRSYXN0ZXJpemVy
U3RhdGUoY29uc3QgZ2w6OlJhc3Rlcml6ZXJTdGF0ZSAmcmFzdGVyU3RhdGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzY2lzc29yRW5hYmxlZCwg
dW5zaWduZWQgaW50IGRlcHRoU2l6ZSk7Ci0gICAgSUQzRDExRGVwdGhTdGVuY2lsU3RhdGUgKmdl
dERlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmZHNTdGF0ZSk7
Ci0gICAgSUQzRDExU2FtcGxlclN0YXRlICpnZXRTYW1wbGVyU3RhdGUoY29uc3QgZ2w6OlNhbXBs
ZXJTdGF0ZSAmc2FtcGxlclN0YXRlKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihSZW5kZXJTdGF0ZUNhY2hlKTsKLQotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBt
Q291bnRlcjsKLQotICAgIC8vIEJsZW5kIHN0YXRlIGNhY2hlCi0gICAgc3RhdGljIHN0ZDo6c2l6
ZV90IGhhc2hCbGVuZFN0YXRlKGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRlKTsKLSAg
ICBzdGF0aWMgYm9vbCBjb21wYXJlQmxlbmRTdGF0ZXMoY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmEs
IGNvbnN0IGdsOjpCbGVuZFN0YXRlICZiKTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50
IGtNYXhCbGVuZFN0YXRlczsKLQotICAgIHR5cGVkZWYgc3RkOjpzaXplX3QgKCpCbGVuZFN0YXRl
SGFzaEZ1bmN0aW9uKShjb25zdCBnbDo6QmxlbmRTdGF0ZSAmKTsKLSAgICB0eXBlZGVmIGJvb2wg
KCpCbGVuZFN0YXRlRXF1YWxpdHlGdW5jdGlvbikoY29uc3QgZ2w6OkJsZW5kU3RhdGUgJiwgY29u
c3QgZ2w6OkJsZW5kU3RhdGUgJik7Ci0gICAgdHlwZWRlZiBzdGQ6OnBhaXI8SUQzRDExQmxlbmRT
dGF0ZSosIHVuc2lnbmVkIGxvbmcgbG9uZz4gQmxlbmRTdGF0ZUNvdW50ZXJQYWlyOwotICAgIHR5
cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPGdsOjpCbGVuZFN0YXRlLCBCbGVuZFN0YXRlQ291bnRl
clBhaXIsIEJsZW5kU3RhdGVIYXNoRnVuY3Rpb24sIEJsZW5kU3RhdGVFcXVhbGl0eUZ1bmN0aW9u
PiBCbGVuZFN0YXRlTWFwOwotICAgIEJsZW5kU3RhdGVNYXAgbUJsZW5kU3RhdGVDYWNoZTsKLQot
ICAgIC8vIFJhc3Rlcml6ZXIgc3RhdGUgY2FjaGUKLSAgICBzdHJ1Y3QgUmFzdGVyaXplclN0YXRl
S2V5Ci0gICAgewotICAgICAgICBnbDo6UmFzdGVyaXplclN0YXRlIHJhc3Rlcml6ZXJTdGF0ZTsK
LSAgICAgICAgYm9vbCBzY2lzc29yRW5hYmxlZDsKLSAgICAgICAgdW5zaWduZWQgaW50IGRlcHRo
U2l6ZTsKLSAgICB9OwotICAgIHN0YXRpYyBzdGQ6OnNpemVfdCBoYXNoUmFzdGVyaXplclN0YXRl
KGNvbnN0IFJhc3Rlcml6ZXJTdGF0ZUtleSAmcmFzdGVyU3RhdGUpOwotICAgIHN0YXRpYyBib29s
IGNvbXBhcmVSYXN0ZXJpemVyU3RhdGVzKGNvbnN0IFJhc3Rlcml6ZXJTdGF0ZUtleSAmYSwgY29u
c3QgUmFzdGVyaXplclN0YXRlS2V5ICZiKTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50
IGtNYXhSYXN0ZXJpemVyU3RhdGVzOwotCi0gICAgdHlwZWRlZiBzdGQ6OnNpemVfdCAoKlJhc3Rl
cml6ZXJTdGF0ZUhhc2hGdW5jdGlvbikoY29uc3QgUmFzdGVyaXplclN0YXRlS2V5ICYpOwotICAg
IHR5cGVkZWYgYm9vbCAoKlJhc3Rlcml6ZXJTdGF0ZUVxdWFsaXR5RnVuY3Rpb24pKGNvbnN0IFJh
c3Rlcml6ZXJTdGF0ZUtleSAmLCBjb25zdCBSYXN0ZXJpemVyU3RhdGVLZXkgJik7Ci0gICAgdHlw
ZWRlZiBzdGQ6OnBhaXI8SUQzRDExUmFzdGVyaXplclN0YXRlKiwgdW5zaWduZWQgbG9uZyBsb25n
PiBSYXN0ZXJpemVyU3RhdGVDb3VudGVyUGFpcjsKLSAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVk
X21hcDxSYXN0ZXJpemVyU3RhdGVLZXksIFJhc3Rlcml6ZXJTdGF0ZUNvdW50ZXJQYWlyLCBSYXN0
ZXJpemVyU3RhdGVIYXNoRnVuY3Rpb24sIFJhc3Rlcml6ZXJTdGF0ZUVxdWFsaXR5RnVuY3Rpb24+
IFJhc3Rlcml6ZXJTdGF0ZU1hcDsKLSAgICBSYXN0ZXJpemVyU3RhdGVNYXAgbVJhc3Rlcml6ZXJT
dGF0ZUNhY2hlOwotCi0gICAgLy8gRGVwdGggc3RlbmNpbCBzdGF0ZSBjYWNoZQotICAgIHN0YXRp
YyBzdGQ6OnNpemVfdCBoYXNoRGVwdGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6OkRlcHRoU3RlbmNp
bFN0YXRlICZkc1N0YXRlKTsKLSAgICBzdGF0aWMgYm9vbCBjb21wYXJlRGVwdGhTdGVuY2lsU3Rh
dGVzKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmYSwgY29uc3QgZ2w6OkRlcHRoU3RlbmNp
bFN0YXRlICZiKTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGtNYXhEZXB0aFN0ZW5j
aWxTdGF0ZXM7Ci0KLSAgICB0eXBlZGVmIHN0ZDo6c2l6ZV90ICgqRGVwdGhTdGVuY2lsU3RhdGVI
YXNoRnVuY3Rpb24pKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmKTsKLSAgICB0eXBlZGVm
IGJvb2wgKCpEZXB0aFN0ZW5jaWxTdGF0ZUVxdWFsaXR5RnVuY3Rpb24pKGNvbnN0IGdsOjpEZXB0
aFN0ZW5jaWxTdGF0ZSAmLCBjb25zdCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJik7Ci0gICAgdHlw
ZWRlZiBzdGQ6OnBhaXI8SUQzRDExRGVwdGhTdGVuY2lsU3RhdGUqLCB1bnNpZ25lZCBsb25nIGxv
bmc+IERlcHRoU3RlbmNpbFN0YXRlQ291bnRlclBhaXI7Ci0gICAgdHlwZWRlZiBzdGQ6OnVub3Jk
ZXJlZF9tYXA8Z2w6OkRlcHRoU3RlbmNpbFN0YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIERlcHRoU3RlbmNpbFN0YXRlQ291bnRlclBhaXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRGVwdGhTdGVuY2lsU3RhdGVIYXNoRnVuY3Rpb24sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRGVwdGhTdGVuY2lsU3RhdGVFcXVhbGl0eUZ1bmN0aW9uPiBEZXB0
aFN0ZW5jaWxTdGF0ZU1hcDsKLSAgICBEZXB0aFN0ZW5jaWxTdGF0ZU1hcCBtRGVwdGhTdGVuY2ls
U3RhdGVDYWNoZTsKLQotICAgIC8vIFNhbXBsZSBzdGF0ZSBjYWNoZQotICAgIHN0YXRpYyBzdGQ6
OnNpemVfdCBoYXNoU2FtcGxlclN0YXRlKGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXJT
dGF0ZSk7Ci0gICAgc3RhdGljIGJvb2wgY29tcGFyZVNhbXBsZXJTdGF0ZXMoY29uc3QgZ2w6OlNh
bXBsZXJTdGF0ZSAmYSwgY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmYik7Ci0gICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGludCBrTWF4U2FtcGxlclN0YXRlczsKLQotICAgIHR5cGVkZWYgc3RkOjpz
aXplX3QgKCpTYW1wbGVyU3RhdGVIYXNoRnVuY3Rpb24pKGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUg
Jik7Ci0gICAgdHlwZWRlZiBib29sICgqU2FtcGxlclN0YXRlRXF1YWxpdHlGdW5jdGlvbikoY29u
c3QgZ2w6OlNhbXBsZXJTdGF0ZSAmLCBjb25zdCBnbDo6U2FtcGxlclN0YXRlICYpOwotICAgIHR5
cGVkZWYgc3RkOjpwYWlyPElEM0QxMVNhbXBsZXJTdGF0ZSosIHVuc2lnbmVkIGxvbmcgbG9uZz4g
U2FtcGxlclN0YXRlQ291bnRlclBhaXI7Ci0gICAgdHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8
Z2w6OlNhbXBsZXJTdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYW1wbGVy
U3RhdGVDb3VudGVyUGFpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYW1wbGVy
U3RhdGVIYXNoRnVuY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2FtcGxl
clN0YXRlRXF1YWxpdHlGdW5jdGlvbj4gU2FtcGxlclN0YXRlTWFwOwotICAgIFNhbXBsZXJTdGF0
ZU1hcCBtU2FtcGxlclN0YXRlQ2FjaGU7Ci0KLSAgICBJRDNEMTFEZXZpY2UgKm1EZXZpY2U7Ci19
OwotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSU1RBVEVDQUNIRV9I
XwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0MTEuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQx
MS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2NjdjYzZmYTc4MWM3ODA0MzQ3
ZDYwMjdkMTM5ODVjMzhjMGZkY2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9SZW5kZXJUYXJnZXQxMS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNTUgKzAsMCBAQAotI2lu
Y2x1ZGUgInByZWNvbXBpbGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gUmVuZGVyVGFyZ2V0MTEu
Y3BwOiBJbXBsZW1lbnRzIGEgRFgxMS1zcGVjaWZpYyB3cmFwcGVyIGZvciBJRDNEMTFWaWV3IHBv
aW50ZXJzCi0vLyByZXRhaW5lZCBieSBSZW5kZXJidWZmZXJzLgotCi0jaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldDExLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL1JlbmRlcmVyMTEuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9yZW5kZXJl
cjExX3V0aWxzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLQotbmFtZXNwYWNlIHJ4
Ci17Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0UlRWU3VicmVzb3VyY2VJbmRleChJRDNEMTFU
ZXh0dXJlMkQgKnRleHR1cmUsIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnZpZXcpCi17Ci0gICAg
RDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVzYzsKLSAgICB2aWV3LT5HZXREZXNj
KCZydHZEZXNjKTsKLQotICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleERlc2M7Ci0gICAgdGV4
dHVyZS0+R2V0RGVzYygmdGV4RGVzYyk7Ci0KLSAgICB1bnNpZ25lZCBpbnQgbWlwU2xpY2UgPSAw
OwotICAgIHVuc2lnbmVkIGludCBhcnJheVNsaWNlID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgbWlw
TGV2ZWxzID0gdGV4RGVzYy5NaXBMZXZlbHM7Ci0KLSAgICBzd2l0Y2ggKHJ0dkRlc2MuVmlld0Rp
bWVuc2lvbikKLSAgICB7Ci0gICAgICBjYXNlIEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTFE
OgotICAgICAgICBtaXBTbGljZSA9IHJ0dkRlc2MuVGV4dHVyZTFELk1pcFNsaWNlOwotICAgICAg
ICBhcnJheVNsaWNlID0gMDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRDNEMTFfUlRW
X0RJTUVOU0lPTl9URVhUVVJFMURBUlJBWToKLSAgICAgICAgbWlwU2xpY2UgPSBydHZEZXNjLlRl
eHR1cmUxREFycmF5Lk1pcFNsaWNlOwotICAgICAgICBhcnJheVNsaWNlID0gcnR2RGVzYy5UZXh0
dXJlMURBcnJheS5GaXJzdEFycmF5U2xpY2U7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNl
IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJEOgotICAgICAgICBtaXBTbGljZSA9IHJ0dkRl
c2MuVGV4dHVyZTJELk1pcFNsaWNlOwotICAgICAgICBhcnJheVNsaWNlID0gMDsKLSAgICAgICAg
YnJlYWs7Ci0KLSAgICAgIGNhc2UgRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMkRBUlJBWToK
LSAgICAgICAgbWlwU2xpY2UgPSBydHZEZXNjLlRleHR1cmUyREFycmF5Lk1pcFNsaWNlOwotICAg
ICAgICBhcnJheVNsaWNlID0gcnR2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2U7
Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVS
RTJETVM6Ci0gICAgICAgIG1pcFNsaWNlID0gMDsKLSAgICAgICAgYXJyYXlTbGljZSA9IDA7Ci0g
ICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJE
TVNBUlJBWToKLSAgICAgICAgbWlwU2xpY2UgPSAwOwotICAgICAgICBhcnJheVNsaWNlID0gcnR2
RGVzYy5UZXh0dXJlMkRNU0FycmF5LkZpcnN0QXJyYXlTbGljZTsKLSAgICAgICAgYnJlYWs7Ci0K
LSAgICAgIGNhc2UgRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFM0Q6Ci0gICAgICAgIG1pcFNs
aWNlID0gcnR2RGVzYy5UZXh0dXJlM0QuTWlwU2xpY2U7Ci0gICAgICAgIGFycmF5U2xpY2UgPSAw
OwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBEM0QxMV9SVFZfRElNRU5TSU9OX1VOS05P
V046Ci0gICAgICBjYXNlIEQzRDExX1JUVl9ESU1FTlNJT05fQlVGRkVSOgotICAgICAgICBVTklN
UExFTUVOVEVEKCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICBV
TlJFQUNIQUJMRSgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gRDNEMTFD
YWxjU3VicmVzb3VyY2UobWlwU2xpY2UsIGFycmF5U2xpY2UsIG1pcExldmVscyk7Ci19Ci0KLXN0
YXRpYyB1bnNpZ25lZCBpbnQgZ2V0RFNWU3VicmVzb3VyY2VJbmRleChJRDNEMTFUZXh0dXJlMkQg
KnRleHR1cmUsIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKnZpZXcpCi17Ci0gICAgRDNEMTFfREVQ
VEhfU1RFTkNJTF9WSUVXX0RFU0MgZHN2RGVzYzsKLSAgICB2aWV3LT5HZXREZXNjKCZkc3ZEZXNj
KTsKLQotICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleERlc2M7Ci0gICAgdGV4dHVyZS0+R2V0
RGVzYygmdGV4RGVzYyk7Ci0KLSAgICB1bnNpZ25lZCBpbnQgbWlwU2xpY2UgPSAwOwotICAgIHVu
c2lnbmVkIGludCBhcnJheVNsaWNlID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgbWlwTGV2ZWxzID0g
dGV4RGVzYy5NaXBMZXZlbHM7Ci0KLSAgICBzd2l0Y2ggKGRzdkRlc2MuVmlld0RpbWVuc2lvbikK
LSAgICB7Ci0gICAgICBjYXNlIEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTFEOgotICAgICAg
ICBtaXBTbGljZSA9IGRzdkRlc2MuVGV4dHVyZTFELk1pcFNsaWNlOwotICAgICAgICBhcnJheVNs
aWNlID0gMDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRDNEMTFfRFNWX0RJTUVOU0lP
Tl9URVhUVVJFMURBUlJBWToKLSAgICAgICAgbWlwU2xpY2UgPSBkc3ZEZXNjLlRleHR1cmUxREFy
cmF5Lk1pcFNsaWNlOwotICAgICAgICBhcnJheVNsaWNlID0gZHN2RGVzYy5UZXh0dXJlMURBcnJh
eS5GaXJzdEFycmF5U2xpY2U7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEQzRDExX0RT
Vl9ESU1FTlNJT05fVEVYVFVSRTJEOgotICAgICAgICBtaXBTbGljZSA9IGRzdkRlc2MuVGV4dHVy
ZTJELk1pcFNsaWNlOwotICAgICAgICBhcnJheVNsaWNlID0gMDsKLSAgICAgICAgYnJlYWs7Ci0K
LSAgICAgIGNhc2UgRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMkRBUlJBWToKLSAgICAgICAg
bWlwU2xpY2UgPSBkc3ZEZXNjLlRleHR1cmUyREFycmF5Lk1pcFNsaWNlOwotICAgICAgICBhcnJh
eVNsaWNlID0gZHN2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2U7Ci0gICAgICAg
IGJyZWFrOwotCi0gICAgICBjYXNlIEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTJETVM6Ci0g
ICAgICAgIG1pcFNsaWNlID0gMDsKLSAgICAgICAgYXJyYXlTbGljZSA9IDA7Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgICBjYXNlIEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTJETVNBUlJBWToK
LSAgICAgICAgbWlwU2xpY2UgPSAwOwotICAgICAgICBhcnJheVNsaWNlID0gZHN2RGVzYy5UZXh0
dXJlMkRNU0FycmF5LkZpcnN0QXJyYXlTbGljZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNh
c2UgRDNEMTFfUlRWX0RJTUVOU0lPTl9VTktOT1dOOgotICAgICAgICBVTklNUExFTUVOVEVEKCk7
Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gRDNEMTFDYWxjU3VicmVzb3Vy
Y2UobWlwU2xpY2UsIGFycmF5U2xpY2UsIG1pcExldmVscyk7Ci19Ci0KLVJlbmRlclRhcmdldDEx
OjpSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIElEM0QxMVJlbmRlclRhcmdldFZp
ZXcgKnJ0diwgSUQzRDExVGV4dHVyZTJEICp0ZXgsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAq
c3J2LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBtUmVuZGVyZXIgPSBS
ZW5kZXJlcjExOjptYWtlUmVuZGVyZXIxMShyZW5kZXJlcik7Ci0gICAgbVRleHR1cmUgPSB0ZXg7
Ci0gICAgbVJlbmRlclRhcmdldCA9IHJ0djsKLSAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKLSAg
ICBtU2hhZGVyUmVzb3VyY2UgPSBzcnY7Ci0gICAgbVN1YnJlc291cmNlSW5kZXggPSAwOwotCi0g
ICAgaWYgKG1SZW5kZXJUYXJnZXQgJiYgbVRleHR1cmUpCi0gICAgewotICAgICAgICBEM0QxMV9S
RU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBkZXNjOwotICAgICAgICBtUmVuZGVyVGFyZ2V0LT5HZXRE
ZXNjKCZkZXNjKTsKLQotICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyB0ZXhEZXNjOwotICAg
ICAgICBtVGV4dHVyZS0+R2V0RGVzYygmdGV4RGVzYyk7Ci0KLSAgICAgICAgbVN1YnJlc291cmNl
SW5kZXggPSBnZXRSVFZTdWJyZXNvdXJjZUluZGV4KG1UZXh0dXJlLCBtUmVuZGVyVGFyZ2V0KTsK
LSAgICAgICAgbVdpZHRoID0gd2lkdGg7Ci0gICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7Ci0gICAg
ICAgIG1TYW1wbGVzID0gKHRleERlc2MuU2FtcGxlRGVzYy5Db3VudCA+IDEpID8gdGV4RGVzYy5T
YW1wbGVEZXNjLkNvdW50IDogMDsKLQotICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBkM2QxMV9n
bDo6Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChkZXNjLkZvcm1hdCk7Ci0gICAgICAgIG1B
Y3R1YWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChkZXNj
LkZvcm1hdCk7Ci0gICAgfQotfQotCi1SZW5kZXJUYXJnZXQxMTo6UmVuZGVyVGFyZ2V0MTEoUmVu
ZGVyZXIgKnJlbmRlcmVyLCBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpkc3YsIElEM0QxMVRleHR1
cmUyRCAqdGV4LCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydiwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpCi17Ci0gICAgbVJlbmRlcmVyID0gUmVuZGVyZXIxMTo6bWFrZVJlbmRl
cmVyMTEocmVuZGVyZXIpOwotICAgIG1UZXh0dXJlID0gdGV4OwotICAgIG1SZW5kZXJUYXJnZXQg
PSBOVUxMOwotICAgIG1EZXB0aFN0ZW5jaWwgPSBkc3Y7Ci0gICAgbVNoYWRlclJlc291cmNlID0g
c3J2OwotICAgIG1TdWJyZXNvdXJjZUluZGV4ID0gMDsKLQotICAgIGlmIChtRGVwdGhTdGVuY2ls
ICYmIG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAgRDNEMTFfREVQVEhfU1RFTkNJTF9WSUVXX0RF
U0MgZGVzYzsKLSAgICAgICAgbURlcHRoU3RlbmNpbC0+R2V0RGVzYygmZGVzYyk7Ci0KLSAgICAg
ICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4RGVzYzsKLSAgICAgICAgbVRleHR1cmUtPkdldERl
c2MoJnRleERlc2MpOwotCi0gICAgICAgIG1TdWJyZXNvdXJjZUluZGV4ID0gZ2V0RFNWU3VicmVz
b3VyY2VJbmRleChtVGV4dHVyZSwgbURlcHRoU3RlbmNpbCk7Ci0gICAgICAgIG1XaWR0aCA9IHdp
ZHRoOwotICAgICAgICBtSGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBtU2FtcGxlcyA9ICh0ZXhE
ZXNjLlNhbXBsZURlc2MuQ291bnQgPiAxKSA/IHRleERlc2MuU2FtcGxlRGVzYy5Db3VudCA6IDA7
Ci0KLSAgICAgICAgbUludGVybmFsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRUZXh0dXJlSW50
ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQpOwotICAgICAgICBtQWN0dWFsRm9ybWF0ID0gZDNkMTFf
Z2w6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQpOwotICAgIH0KLX0K
LQotUmVuZGVyVGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxl
cywgYm9vbCBkZXB0aCkKLXsKLSAgICBtUmVuZGVyZXIgPSBSZW5kZXJlcjExOjptYWtlUmVuZGVy
ZXIxMShyZW5kZXJlcik7Ci0gICAgbVRleHR1cmUgPSBOVUxMOwotICAgIG1SZW5kZXJUYXJnZXQg
PSBOVUxMOwotICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIG1TaGFkZXJSZXNvdXJjZSA9
IE5VTEw7Ci0KLSAgICBEWEdJX0ZPUk1BVCByZXF1ZXN0ZWRGb3JtYXQgPSBnbF9kM2QxMTo6Q29u
dmVydFJlbmRlcmJ1ZmZlckZvcm1hdChmb3JtYXQpOwotCi0gICAgaW50IHN1cHBvcnRlZFNhbXBs
ZXMgPSBtUmVuZGVyZXItPmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKHJlcXVlc3RlZEZvcm1h
dCwgc2FtcGxlcyk7Ci0gICAgaWYgKHN1cHBvcnRlZFNhbXBsZXMgPCAwKQotICAgIHsKLSAgICAg
ICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKQotICAgIHsKLSAgICAgICAgLy8gQ3Jl
YXRlIHRleHR1cmUgcmVzb3VyY2UKLSAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgZGVzYzsK
LSAgICAgICAgZGVzYy5XaWR0aCA9IHdpZHRoOyAKLSAgICAgICAgZGVzYy5IZWlnaHQgPSBoZWln
aHQ7Ci0gICAgICAgIGRlc2MuTWlwTGV2ZWxzID0gMTsKLSAgICAgICAgZGVzYy5BcnJheVNpemUg
PSAxOwotICAgICAgICBkZXNjLkZvcm1hdCA9IHJlcXVlc3RlZEZvcm1hdDsKLSAgICAgICAgZGVz
Yy5TYW1wbGVEZXNjLkNvdW50ID0gKHN1cHBvcnRlZFNhbXBsZXMgPT0gMCkgPyAxIDogc3VwcG9y
dGVkU2FtcGxlczsKLSAgICAgICAgZGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOwotICAgICAg
ICBkZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKLSAgICAgICAgZGVzYy5DUFVBY2Nl
c3NGbGFncyA9IDA7Ci0gICAgICAgIGRlc2MuTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgZGVzYy5C
aW5kRmxhZ3MgPSAoZGVwdGggPyBEM0QxMV9CSU5EX0RFUFRIX1NURU5DSUwgOiAoRDNEMTFfQklO
RF9SRU5ERVJfVEFSR0VUIHwgRDNEMTFfQklORF9TSEFERVJfUkVTT1VSQ0UpKTsKLQotICAgICAg
ICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0gICAgICAg
IEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRlc2MsIE5VTEwsICZt
VGV4dHVyZSk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
LQotICAgICAgICBpZiAoZGVwdGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEQzRDExX0RFUFRI
X1NURU5DSUxfVklFV19ERVNDIGRzdkRlc2M7Ci0gICAgICAgICAgICBkc3ZEZXNjLkZvcm1hdCA9
IHJlcXVlc3RlZEZvcm1hdDsKLSAgICAgICAgICAgIGRzdkRlc2MuVmlld0RpbWVuc2lvbiA9IChz
dXBwb3J0ZWRTYW1wbGVzID09IDApID8gRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMkQgOiBE
M0QxMV9EU1ZfRElNRU5TSU9OX1RFWFRVUkUyRE1TOwotICAgICAgICAgICAgZHN2RGVzYy5UZXh0
dXJlMkQuTWlwU2xpY2UgPSAwOwotICAgICAgICAgICAgZHN2RGVzYy5GbGFncyA9IDA7Ci0gICAg
ICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFZpZXcobVRleHR1cmUs
ICZkc3ZEZXNjLCAmbURlcHRoU3RlbmNpbCk7Ci0KLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0g
RV9PVVRPRk1FTU9SWSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtVGV4dHVyZS0+
UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICAgICAgICAg
ICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgewotICAgICAgICAgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgcnR2
RGVzYzsKLSAgICAgICAgICAgIHJ0dkRlc2MuRm9ybWF0ID0gcmVxdWVzdGVkRm9ybWF0OwotICAg
ICAgICAgICAgcnR2RGVzYy5WaWV3RGltZW5zaW9uID0gKHN1cHBvcnRlZFNhbXBsZXMgPT0gMCkg
PyBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyRCA6IEQzRDExX1JUVl9ESU1FTlNJT05fVEVY
VFVSRTJETVM7Ci0gICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IDA7Ci0g
ICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobVRleHR1
cmUsICZydHZEZXNjLCAmbVJlbmRlclRhcmdldCk7Ci0KLSAgICAgICAgICAgIGlmIChyZXN1bHQg
PT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtVGV4dHVy
ZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICAgICAg
ICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKLQotICAgICAgICAgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNj
OwotICAgICAgICAgICAgc3J2RGVzYy5Gb3JtYXQgPSByZXF1ZXN0ZWRGb3JtYXQ7Ci0gICAgICAg
ICAgICBzcnZEZXNjLlZpZXdEaW1lbnNpb24gPSAoc3VwcG9ydGVkU2FtcGxlcyA9PSAwKSA/IEQz
RDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTJEIDogRDNEMTFfU1JWX0RJTUVOU0lPTl9URVhUVVJF
MkRNUzsKLSAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJELk1vc3REZXRhaWxlZE1pcCA9IDA7
Ci0gICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyRC5NaXBMZXZlbHMgPSAxOwotICAgICAgICAg
ICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcobVRleHR1cmUsICZz
cnZEZXNjLCAmbVNoYWRlclJlc291cmNlKTsKLQotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBF
X09VVE9GTUVNT1JZKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1UZXh0dXJlLT5S
ZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgbVRleHR1cmUgPSBOVUxMOwotICAgICAgICAgICAg
ICAgIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBtUmVuZGVyVGFy
Z2V0ID0gTlVMTDsKLSAgICAgICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1XaWR0aCA9
IHdpZHRoOwotICAgIG1IZWlnaHQgPSBoZWlnaHQ7Ci0gICAgbUludGVybmFsRm9ybWF0ID0gZm9y
bWF0OwotICAgIG1TYW1wbGVzID0gc3VwcG9ydGVkU2FtcGxlczsKLSAgICBtQWN0dWFsRm9ybWF0
ID0gZDNkMTFfZ2w6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQocmVxdWVzdGVkRm9ybWF0
KTsKLSAgICBtU3VicmVzb3VyY2VJbmRleCA9IEQzRDExQ2FsY1N1YnJlc291cmNlKDAsIDAsIDEp
OwotfQotCi1SZW5kZXJUYXJnZXQxMTo6flJlbmRlclRhcmdldDExKCkKLXsKLSAgICBpZiAobVRl
eHR1cmUpCi0gICAgewotICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICBtVGV4
dHVyZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1SZW5kZXJUYXJnZXQpCi0gICAgewotICAg
ICAgICBtUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXQgPSBO
VUxMOwotICAgIH0KLQotICAgIGlmIChtRGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbURl
cHRoU3RlbmNpbC0+UmVsZWFzZSgpOwotICAgICAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKLSAg
ICB9Ci0KLSAgICBpZiAobVNoYWRlclJlc291cmNlKQotICAgIHsKLSAgICAgICAgbVNoYWRlclJl
c291cmNlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1TaGFkZXJSZXNvdXJjZSA9IE5VTEw7Ci0gICAg
fQotfQotCi1SZW5kZXJUYXJnZXQxMSAqUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQx
MShSZW5kZXJUYXJnZXQgKnRhcmdldCkKLXsKLSAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShy
eDo6UmVuZGVyVGFyZ2V0MTEqLCB0YXJnZXQpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8cng6
OlJlbmRlclRhcmdldDExKj4odGFyZ2V0KTsKLX0KLQotSUQzRDExVGV4dHVyZTJEICpSZW5kZXJU
YXJnZXQxMTo6Z2V0VGV4dHVyZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlOwotfQot
Ci1JRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpSZW5kZXJUYXJnZXQxMTo6Z2V0UmVuZGVyVGFyZ2V0
VmlldygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7Ci19Ci0KLUlEM0QxMURl
cHRoU3RlbmNpbFZpZXcgKlJlbmRlclRhcmdldDExOjpnZXREZXB0aFN0ZW5jaWxWaWV3KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbURlcHRoU3RlbmNpbDsKLX0KLQotSUQzRDExU2hhZGVyUmVzb3Vy
Y2VWaWV3ICpSZW5kZXJUYXJnZXQxMTo6Z2V0U2hhZGVyUmVzb3VyY2VWaWV3KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbVNoYWRlclJlc291cmNlOwotfQotCi11bnNpZ25lZCBpbnQgUmVuZGVyVGFy
Z2V0MTE6OmdldFN1YnJlc291cmNlSW5kZXgoKSBjb25zdAotewotICAgIHJldHVybiBtU3VicmVz
b3VyY2VJbmRleDsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQxMS5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQxMS5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzgyN2YyNjM5NzA3Mjk0Mjg0YTJjY2QzNDgxYzk3YmVk
ZTg5YjA3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0
MTEuaAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBS
ZW5kZXJUYXJnZXQxMS5oOiBEZWZpbmVzIGEgRFgxMS1zcGVjaWZpYyB3cmFwcGVyIGZvciBJRDNE
MTFWaWV3IHBvaW50ZXJzCi0vLyByZXRhaW5lZCBieSBSZW5kZXJidWZmZXJzLgotCi0jaWZuZGVm
IExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJUQVJHRVQxMV9IXwotI2RlZmluZSBMSUJHTEVTVjJf
UkVOREVSRVJfUkVOREVSVEFSR0VUMTFfSF8KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9SZW5kZXJUYXJnZXQuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci1jbGFzcyBSZW5kZXJlcjsKLWNs
YXNzIFJlbmRlcmVyMTE7Ci0KLWNsYXNzIFJlbmRlclRhcmdldDExIDogcHVibGljIFJlbmRlclRh
cmdldAotewotICBwdWJsaWM6Ci0gICAgUmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVy
LCBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpydHYsIElEM0QxMVRleHR1cmUyRCAqdGV4LCBJRDNE
MTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
OwotICAgIFJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgSUQzRDExRGVwdGhTdGVu
Y2lsVmlldyAqZHN2LCBJRDNEMTFUZXh0dXJlMkQgKnRleCwgSUQzRDExU2hhZGVyUmVzb3VyY2VW
aWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICBSZW5kZXJUYXJn
ZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMsIGJvb2wgZGVwdGgpOwotICAgIHZpcnR1YWwg
flJlbmRlclRhcmdldDExKCk7Ci0KLSAgICBzdGF0aWMgUmVuZGVyVGFyZ2V0MTEgKm1ha2VSZW5k
ZXJUYXJnZXQxMShSZW5kZXJUYXJnZXQgKnJlbmRlclRhcmdldCk7Ci0KLSAgICBJRDNEMTFUZXh0
dXJlMkQgKmdldFRleHR1cmUoKSBjb25zdDsKLSAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpn
ZXRSZW5kZXJUYXJnZXRWaWV3KCkgY29uc3Q7Ci0gICAgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAq
Z2V0RGVwdGhTdGVuY2lsVmlldygpIGNvbnN0OwotICAgIElEM0QxMVNoYWRlclJlc291cmNlVmll
dyAqZ2V0U2hhZGVyUmVzb3VyY2VWaWV3KCkgY29uc3Q7Ci0KLSAgICB1bnNpZ25lZCBpbnQgZ2V0
U3VicmVzb3VyY2VJbmRleCgpIGNvbnN0OwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKFJlbmRlclRhcmdldDExKTsKLQotICAgIHVuc2lnbmVkIGludCBtU3VicmVz
b3VyY2VJbmRleDsKLSAgICBJRDNEMTFUZXh0dXJlMkQgKm1UZXh0dXJlOwotICAgIElEM0QxMVJl
bmRlclRhcmdldFZpZXcgKm1SZW5kZXJUYXJnZXQ7Ci0gICAgSUQzRDExRGVwdGhTdGVuY2lsVmll
dyAqbURlcHRoU3RlbmNpbDsKLSAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKm1TaGFkZXJS
ZXNvdXJjZTsKLQotICAgIFJlbmRlcmVyMTEgKm1SZW5kZXJlcjsKLX07Ci0KLX0KLQotI2VuZGlm
IExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJUQVJHRVQxMV9IXwpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0OS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldDkuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBhODRjNzA5MDU5OWM5MGVjMzA3ODk2NWZjYTllMWEwNjMyM2M3OThiLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0OS5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLQotLy8gUmVuZGVyVGFyZ2V0OS5jcHA6IEltcGxlbWVudHMgYSBEM0Q5LXNw
ZWNpZmljIHdyYXBwZXIgZm9yIElEaXJlY3QzRFN1cmZhY2U5Ci0vLyBwb2ludGVycyByZXRhaW5l
ZCBieSByZW5kZXJidWZmZXJzLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRl
clRhcmdldDkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXI5LmgiCi0K
LSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXI5X3V0aWxzLmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL21haW4uaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLVJlbmRlclRhcmdldDk6
OlJlbmRlclRhcmdldDkoUmVuZGVyZXIgKnJlbmRlcmVyLCBJRGlyZWN0M0RTdXJmYWNlOSAqc3Vy
ZmFjZSkKLXsKLSAgICBtUmVuZGVyZXIgPSBSZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjkocmVuZGVy
ZXIpOwotICAgIG1SZW5kZXJUYXJnZXQgPSBzdXJmYWNlOwotCi0gICAgaWYgKG1SZW5kZXJUYXJn
ZXQpCi0gICAgewotICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzY3JpcHRpb247Ci0gICAgICAg
IG1SZW5kZXJUYXJnZXQtPkdldERlc2MoJmRlc2NyaXB0aW9uKTsKLQotICAgICAgICBtV2lkdGgg
PSBkZXNjcmlwdGlvbi5XaWR0aDsKLSAgICAgICAgbUhlaWdodCA9IGRlc2NyaXB0aW9uLkhlaWdo
dDsKLSAgICAgICAgCi0gICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEVxdWl2
YWxlbnRGb3JtYXQoZGVzY3JpcHRpb24uRm9ybWF0KTsKLSAgICAgICAgbUFjdHVhbEZvcm1hdCA9
IGQzZDlfZ2w6OkdldEVxdWl2YWxlbnRGb3JtYXQoZGVzY3JpcHRpb24uRm9ybWF0KTsKLSAgICAg
ICAgbVNhbXBsZXMgPSBkM2Q5X2dsOjpHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShkZXNj
cmlwdGlvbi5NdWx0aVNhbXBsZVR5cGUpOwotICAgIH0KLX0KLQotUmVuZGVyVGFyZ2V0OTo6UmVu
ZGVyVGFyZ2V0OShSZW5kZXJlciAqcmVuZGVyZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpCi17Ci0gICAgbVJlbmRlcmVyID0g
UmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5KHJlbmRlcmVyKTsKLSAgICBtUmVuZGVyVGFyZ2V0ID0g
TlVMTDsKLQotICAgIEQzREZPUk1BVCByZXF1ZXN0ZWRGb3JtYXQgPSBnbF9kM2Q5OjpDb252ZXJ0
UmVuZGVyYnVmZmVyRm9ybWF0KGZvcm1hdCk7Ci0gICAgaW50IHN1cHBvcnRlZFNhbXBsZXMgPSBt
UmVuZGVyZXItPmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKHJlcXVlc3RlZEZvcm1hdCwgc2Ft
cGxlcyk7Ci0KLSAgICBpZiAoc3VwcG9ydGVkU2FtcGxlcyA9PSAtMSkKLSAgICB7Ci0gICAgICAg
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLQotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBEM0RFUlJfSU5WQUxJRENBTEw7Ci0gICAgCi0gICAgaWYg
KHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKQotICAgIHsKLSAgICAgICAgaWYgKHJlcXVlc3RlZEZv
cm1hdCA9PSBEM0RGTVRfRDI0UzgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IG1S
ZW5kZXJlci0+Z2V0RGV2aWNlKCktPkNyZWF0ZURlcHRoU3RlbmNpbFN1cmZhY2Uod2lkdGgsIGhl
aWdodCwgcmVxdWVzdGVkRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9kM2Q5OjpHZXRNdWx0aXNh
bXBsZVR5cGVGcm9tU2FtcGxlcyhzdXBwb3J0ZWRTYW1wbGVzKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwg
RkFMU0UsICZtUmVuZGVyVGFyZ2V0LCBOVUxMKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCktPkNy
ZWF0ZVJlbmRlclRhcmdldCh3aWR0aCwgaGVpZ2h0LCByZXF1ZXN0ZWRGb3JtYXQsIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsX2QzZDk6OkdldE11bHRpc2FtcGxlVHlwZUZyb21TYW1wbGVzKHN1cHBvcnRlZFNhbXBsZXMp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAsIEZBTFNFLCAmbVJlbmRlclRhcmdldCwgTlVMTCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgfQotCi0gICAgbVdpZHRoID0gd2lkdGg7
Ci0gICAgbUhlaWdodCA9IGhlaWdodDsKLSAgICBtSW50ZXJuYWxGb3JtYXQgPSBmb3JtYXQ7Ci0g
ICAgbVNhbXBsZXMgPSBzdXBwb3J0ZWRTYW1wbGVzOwotICAgIG1BY3R1YWxGb3JtYXQgPSBkM2Q5
X2dsOjpHZXRFcXVpdmFsZW50Rm9ybWF0KHJlcXVlc3RlZEZvcm1hdCk7Ci19Ci0KLVJlbmRlclRh
cmdldDk6On5SZW5kZXJUYXJnZXQ5KCkKLXsKLSAgICBpZiAobVJlbmRlclRhcmdldCkKLSAgICB7
Ci0gICAgICAgIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICB9Ci19Ci0KLVJlbmRlclRh
cmdldDkgKlJlbmRlclRhcmdldDk6Om1ha2VSZW5kZXJUYXJnZXQ5KFJlbmRlclRhcmdldCAqdGFy
Z2V0KQotewotICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKHJ4OjpSZW5kZXJUYXJnZXQ5Kiwg
dGFyZ2V0KSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHJ4OjpSZW5kZXJUYXJnZXQ5Kj4odGFy
Z2V0KTsKLX0KLQotSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlclRhcmdldDk6OmdldFN1cmZhY2Uo
KQotewotICAgIC8vIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgcmVsZWFzaW5nIHRoZSByZXR1
cm5lZCBzdXJmYWNlIHJlZmVyZW5jZS4KLSAgICBpZiAobVJlbmRlclRhcmdldCkKLSAgICB7Ci0g
ICAgICAgIG1SZW5kZXJUYXJnZXQtPkFkZFJlZigpOwotICAgIH0KLQotICAgIHJldHVybiBtUmVu
ZGVyVGFyZ2V0OwotfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJU
YXJnZXQ5LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L1JlbmRlclRhcmdldDkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmFmOGFkMWM2
ZDJkNjI0Mjk0MDBmZTMzY2I4Y2RkZTcxZjdkMzI1ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldDkuaAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAg
QEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0vLwotCi0vLyBSZW5kZXJUYXJnZXQ5Lmg6IERlZmluZXMgYSBEM0Q5LXNw
ZWNpZmljIHdyYXBwZXIgZm9yIElEaXJlY3QzRFN1cmZhY2U5IHBvaW50ZXJzCi0vLyByZXRhaW5l
ZCBieSBSZW5kZXJidWZmZXJzLgotCi0jaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJU
QVJHRVQ5X0hfCi0jZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJUQVJHRVQ5X0hfCi0K
LSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0LmgiCi0KLW5hbWVzcGFj
ZSByeAotewotY2xhc3MgUmVuZGVyZXI7Ci1jbGFzcyBSZW5kZXJlcjk7Ci0KLWNsYXNzIFJlbmRl
clRhcmdldDkgOiBwdWJsaWMgUmVuZGVyVGFyZ2V0Ci17Ci0gIHB1YmxpYzoKLSAgICBSZW5kZXJU
YXJnZXQ5KFJlbmRlcmVyICpyZW5kZXJlciwgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UpOwot
ICAgIFJlbmRlclRhcmdldDkoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzKTsKLSAgICB2aXJ0dWFs
IH5SZW5kZXJUYXJnZXQ5KCk7Ci0KLSAgICBzdGF0aWMgUmVuZGVyVGFyZ2V0OSAqbWFrZVJlbmRl
clRhcmdldDkoUmVuZGVyVGFyZ2V0ICpyZW5kZXJUYXJnZXQpOwotICAgIElEaXJlY3QzRFN1cmZh
Y2U5ICpnZXRTdXJmYWNlKCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9B
U1NJR04oUmVuZGVyVGFyZ2V0OSk7Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVJlbmRlclRh
cmdldDsKLQotICAgIFJlbmRlcmVyOSAqbVJlbmRlcmVyOwotfTsKLQotfQotCi0jZW5kaWYgLy8g
TElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUlRBUkdFVDlfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5jcHAK
aW5kZXggZTBiM2FiY2Y4Nzk5ZWMyYzZjMDk1NjQ2NGQzZDVmOTFkODg3ZDg2YS4uNGJkNGRjZjgy
NjdlNDQyZGYxYjBhN2RjYWM4OTliNTllOTU0ZDE4MCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5jcHAKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5jcHAK
QEAgLTExLDggKzExLDggQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRl
cmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyOS5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlcjExLmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL1JlbmRlcmVyMTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCiAj
aW5jbHVkZSAidGhpcmRfcGFydHkvdHJhY2VfZXZlbnQvdHJhY2VfZXZlbnQuaCIKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5k
ZXJlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9S
ZW5kZXJlci5oCmluZGV4IGUxODYxZjAxZWIxZGFiOTAzMjMxOTVkMThmMGNjZTliYWMyZDMyYTAu
LjcyNDRhMGEzZDYxMWYwOTEyODFkOTU2ODg2MzU3ZmYwYWE5Y2M4ZWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRl
cmVyLmgKQEAgLTExOSw3ICsxMTksNyBAQCBjbGFzcyBSZW5kZXJlcgogICAgIHZpcnR1YWwgdm9p
ZCBzZXRUZXh0dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGdsOjpUZXh0dXJl
ICp0ZXh0dXJlKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0UmFzdGVyaXplclN0YXRlKGNv
bnN0IGdsOjpSYXN0ZXJpemVyU3RhdGUgJnJhc3RlclN0YXRlKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHNldEJsZW5kU3RhdGUoY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0
IGdsOjpDb2xvciAmYmxlbmRDb2xvciwKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0ZShn
bDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRT
dGF0ZSwgY29uc3QgZ2w6OkNvbG9yICZibGVuZENvbG9yLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVNYXNrKSA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IHNldERlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmZGVwdGhT
dGVuY2lsU3RhdGUsIGludCBzdGVuY2lsUmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgc3RlbmNpbEJhY2tSZWYsIGJvb2wgZnJvbnRGYWNlQ0NXKSA9IDA7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L1JlbmRlcmVyMTEuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9SZW5kZXJlcjExLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNi
YTM1NWQ1ODIyZjBmYzk3ZWVkMDNkNzI4YWUwZDc3ZWQ0NmU1Ny4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyMTEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzU1
MSArMCwwIEBACi0jaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0K
LS8vIFJlbmRlcmVyMTEuY3BwOiBJbXBsZW1lbnRzIGEgYmFjay1lbmQgc3BlY2lmaWMgY2xhc3Mg
Zm9yIHRoZSBEM0QxMSByZW5kZXJlci4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZm
ZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgotI2luY2x1ZGUgImxp
YkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZmZXIu
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIxMS5oIgotI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQxMS5oIgotI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9yZW5kZXJlcjExX3V0aWxzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL1NoYWRlckV4ZWN1dGFibGUxMS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9T
d2FwQ2hhaW4xMS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZTExLmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlcjExLmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL0luZGV4QnVmZmVyMTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvQnVmZmVyU3RvcmFnZTExLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L1ZlcnRleERhdGFNYW5hZ2VyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0luZGV4
RGF0YU1hbmFnZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0b3Jh
Z2UxMS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9RdWVyeTExLmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL0ZlbmNlMTEuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdoMTF2cy5oIgotI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTExcHMuaCIK
LSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3Vn
aHJnYjExcHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxl
ZC9wYXNzdGhyb3VnaGx1bTExcHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvc2hh
ZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaGx1bWFscGhhMTFwcy5oIgotCi0jaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvY2xlYXIxMXZzLmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJzaW5nbGUxMXBzLmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJtdWx0aXBs
ZTExcHMuaCIKLQotI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiCi0KLSNpZmRlZiBfREVCVUcK
LS8vIHRoaXMgZmxhZyBlbmFibGVzIHN1cHByZXNzaW5nIHNvbWUgc3B1cmlvdXMgd2FybmluZ3Mg
dGhhdCBwb3AgdXAgaW4gY2VydGFpbiBXZWJHTCBzYW1wbGVzCi0vLyBhbmQgY29uZm9ybWFuY2Ug
dGVzdHMuIHRvIGVuYWJsZSBhbGwgd2FybmluZ3MsIHJlbW92ZSB0aGlzIGRlZmluZS4KLSNkZWZp
bmUgQU5HTEVfU1VQUFJFU1NfRDNEMTFfSEFaQVJEX1dBUk5JTkdTIDEKLSNlbmRpZgotCi1uYW1l
c3BhY2UgcngKLXsKLXN0YXRpYyBjb25zdCBEWEdJX0ZPUk1BVCBSZW5kZXJUYXJnZXRGb3JtYXRz
W10gPQotICAgIHsKLSAgICAgICAgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk0sCi0gICAgICAg
IERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNCi0gICAgfTsKLQotc3RhdGljIGNvbnN0IERYR0lf
Rk9STUFUIERlcHRoU3RlbmNpbEZvcm1hdHNbXSA9Ci0gICAgewotICAgICAgICBEWEdJX0ZPUk1B
VF9VTktOT1dOLAotICAgICAgICBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVCwKLSAgICAg
ICAgRFhHSV9GT1JNQVRfRDE2X1VOT1JNCi0gICAgfTsKLQotZW51bQotewotICAgIE1BWF9URVhU
VVJFX0lNQUdFX1VOSVRTX1ZURl9TTTQgPSAxNgotfTsKLQotUmVuZGVyZXIxMTo6UmVuZGVyZXIx
MShlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIEhEQyBoRGMpIDogUmVuZGVyZXIoZGlzcGxheSksIG1E
YyhoRGMpCi17Ci0gICAgbVZlcnRleERhdGFNYW5hZ2VyID0gTlVMTDsKLSAgICBtSW5kZXhEYXRh
TWFuYWdlciA9IE5VTEw7Ci0KLSAgICBtTGluZUxvb3BJQiA9IE5VTEw7Ci0gICAgbVRyaWFuZ2xl
RmFuSUIgPSBOVUxMOwotCi0gICAgbUNvcHlSZXNvdXJjZXNJbml0aWFsaXplZCA9IGZhbHNlOwot
ICAgIG1Db3B5VkIgPSBOVUxMOwotICAgIG1Db3B5U2FtcGxlciA9IE5VTEw7Ci0gICAgbUNvcHlJ
TCA9IE5VTEw7Ci0gICAgbUNvcHlWUyA9IE5VTEw7Ci0gICAgbUNvcHlSR0JBUFMgPSBOVUxMOwot
ICAgIG1Db3B5UkdCUFMgPSBOVUxMOwotICAgIG1Db3B5THVtUFMgPSBOVUxMOwotICAgIG1Db3B5
THVtQWxwaGFQUyA9IE5VTEw7Ci0KLSAgICBtQ2xlYXJSZXNvdXJjZXNJbml0aWFsaXplZCA9IGZh
bHNlOwotICAgIG1DbGVhclZCID0gTlVMTDsKLSAgICBtQ2xlYXJJTCA9IE5VTEw7Ci0gICAgbUNs
ZWFyVlMgPSBOVUxMOwotICAgIG1DbGVhclNpbmdsZVBTID0gTlVMTDsKLSAgICBtQ2xlYXJNdWx0
aXBsZVBTID0gTlVMTDsKLSAgICBtQ2xlYXJTY2lzc29yUlMgPSBOVUxMOwotICAgIG1DbGVhck5v
U2Npc3NvclJTID0gTlVMTDsKLQotICAgIG1TeW5jUXVlcnkgPSBOVUxMOwotCi0gICAgbUQzZDEx
TW9kdWxlID0gTlVMTDsKLSAgICBtRHhnaU1vZHVsZSA9IE5VTEw7Ci0KLSAgICBtRGV2aWNlTG9z
dCA9IGZhbHNlOwotCi0gICAgbU1heFN1cHBvcnRlZFNhbXBsZXMgPSAwOwotCi0gICAgbURldmlj
ZSA9IE5VTEw7Ci0gICAgbURldmljZUNvbnRleHQgPSBOVUxMOwotICAgIG1EeGdpQWRhcHRlciA9
IE5VTEw7Ci0gICAgbUR4Z2lGYWN0b3J5ID0gTlVMTDsKLQotICAgIG1Ecml2ZXJDb25zdGFudEJ1
ZmZlclZTID0gTlVMTDsKLSAgICBtRHJpdmVyQ29uc3RhbnRCdWZmZXJQUyA9IE5VTEw7Ci0KLSAg
ICBtQkdSQVRleHR1cmVTdXBwb3J0ID0gZmFsc2U7Ci0KLSAgICBtSXNHZW9tZXRyeVNoYWRlckFj
dGl2ZSA9IGZhbHNlOwotfQotCi1SZW5kZXJlcjExOjp+UmVuZGVyZXIxMSgpCi17Ci0gICAgcmVs
ZWFzZSgpOwotfQotCi1SZW5kZXJlcjExICpSZW5kZXJlcjExOjptYWtlUmVuZGVyZXIxMShSZW5k
ZXJlciAqcmVuZGVyZXIpCi17Ci0gICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUocng6OlJlbmRl
cmVyMTEqLCByZW5kZXJlcikpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxyeDo6UmVuZGVyZXIx
MSo+KHJlbmRlcmVyKTsKLX0KLQotI2lmbmRlZiBfX2QzZDExXzFfaF9fCi0jZGVmaW5lIEQzRDEx
X01FU1NBR0VfSURfREVWSUNFX0RSQVdfUkVOREVSVEFSR0VUVklFV19OT1RfU0VUICgoRDNEMTFf
TUVTU0FHRV9JRCkzMTQ2MDgxKQotI2VuZGlmCi0KLUVHTGludCBSZW5kZXJlcjExOjppbml0aWFs
aXplKCkKLXsKLSAgICBpZiAoIWluaXRpYWxpemVDb21waWxlcigpKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7Ci0gICAgfQotCi0gICAgbUR4Z2lNb2R1bGUgPSBM
b2FkTGlicmFyeShURVhUKCJkeGdpLmRsbCIpKTsKLSAgICBtRDNkMTFNb2R1bGUgPSBMb2FkTGli
cmFyeShURVhUKCJkM2QxMS5kbGwiKSk7Ci0KLSAgICBpZiAobUQzZDExTW9kdWxlID09IE5VTEwg
fHwgbUR4Z2lNb2R1bGUgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIEVSUigiQ291bGQgbm90IGxv
YWQgRDNEMTEgb3IgRFhHSSBsaWJyYXJ5IC0gYWJvcnRpbmchXG4iKTsKLSAgICAgICAgcmV0dXJu
IEVHTF9OT1RfSU5JVElBTElaRUQ7Ci0gICAgfQotCi0gICAgLy8gY3JlYXRlIHRoZSBEM0QxMSBk
ZXZpY2UKLSAgICBBU1NFUlQobURldmljZSA9PSBOVUxMKTsKLSAgICBQRk5fRDNEMTFfQ1JFQVRF
X0RFVklDRSBEM0QxMUNyZWF0ZURldmljZSA9IChQRk5fRDNEMTFfQ1JFQVRFX0RFVklDRSlHZXRQ
cm9jQWRkcmVzcyhtRDNkMTFNb2R1bGUsICJEM0QxMUNyZWF0ZURldmljZSIpOwotCi0gICAgaWYg
KEQzRDExQ3JlYXRlRGV2aWNlID09IE5VTEwpCi0gICAgewotICAgICAgICBFUlIoIkNvdWxkIG5v
dCByZXRyaWV2ZSBEM0QxMUNyZWF0ZURldmljZSBhZGRyZXNzIC0gYWJvcnRpbmchXG4iKTsKLSAg
ICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7Ci0gICAgfQotCi0gICAgRDNEX0ZFQVRV
UkVfTEVWRUwgZmVhdHVyZUxldmVsc1tdID0KLSAgICB7Ci0gICAgICAgIEQzRF9GRUFUVVJFX0xF
VkVMXzExXzAsCi0gICAgICAgIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzEsCi0gICAgICAgIEQzRF9G
RUFUVVJFX0xFVkVMXzEwXzAsCi0gICAgfTsKLQotICAgIEhSRVNVTFQgcmVzdWx0ID0gU19PSzsK
LQotI2lmZGVmIF9ERUJVRwotICAgIHJlc3VsdCA9IEQzRDExQ3JlYXRlRGV2aWNlKE5VTEwsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEX0RSSVZFUl9UWVBFX0hBUkRXQVJFLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRDNEMTFfQ1JFQVRFX0RFVklDRV9ERUJVRywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmZWF0dXJlTGV2ZWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFycmF5U2l6ZShmZWF0dXJlTGV2ZWxzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBEM0QxMV9TREtfVkVSU0lPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
bURldmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbUZlYXR1cmVMZXZlbCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbURldmljZUNvbnRleHQpOwotCi0gICAg
aWYgKCFtRGV2aWNlIHx8IEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgRVJSKCJGYWls
ZWQgY3JlYXRpbmcgRGVidWcgRDNEMTEgZGV2aWNlIC0gZmFsbGluZyBiYWNrIHRvIHJlbGVhc2Ug
cnVudGltZS5cbiIpOwotICAgIH0KLQotICAgIGlmICghbURldmljZSB8fCBGQUlMRUQocmVzdWx0
KSkKLSNlbmRpZgotICAgIHsKLSAgICAgICAgcmVzdWx0ID0gRDNEMTFDcmVhdGVEZXZpY2UoTlVM
TCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEX0RSSVZFUl9UWVBFX0hB
UkRXQVJFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmZWF0dXJlTGV2ZWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBcnJheVNpemUoZmVhdHVyZUxldmVscyksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEQzRDExX1NES19WRVJTSU9OLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmbURldmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1G
ZWF0dXJlTGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtRGV2aWNl
Q29udGV4dCk7Ci0KLSAgICAgICAgaWYgKCFtRGV2aWNlIHx8IEZBSUxFRChyZXN1bHQpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgRDNEMTEgZGV2aWNlIC0g
YWJvcnRpbmchXG4iKTsKLSAgICAgICAgICAgIHJldHVybiBFR0xfTk9UX0lOSVRJQUxJWkVEOyAg
IC8vIENsZWFudXAgZG9uZSBieSBkZXN0cnVjdG9yIHRocm91Z2ggZ2xEZXN0cm95UmVuZGVyZXIK
LSAgICAgICAgfQotICAgIH0KLQotICAgIElEWEdJRGV2aWNlICpkeGdpRGV2aWNlID0gTlVMTDsK
LSAgICByZXN1bHQgPSBtRGV2aWNlLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRFhHSURldmlj
ZSksICh2b2lkKiopJmR4Z2lEZXZpY2UpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAg
IHsKLSAgICAgICAgRVJSKCJDb3VsZCBub3QgcXVlcnkgRFhHSSBkZXZpY2UgLSBhYm9ydGluZyFc
biIpOwotICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsKLSAgICB9Ci0KLSAgICBy
ZXN1bHQgPSBkeGdpRGV2aWNlLT5HZXRQYXJlbnQoX191dWlkb2YoSURYR0lBZGFwdGVyKSwgKHZv
aWQqKikmbUR4Z2lBZGFwdGVyKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0g
ICAgICAgIEVSUigiQ291bGQgbm90IHJldHJpZXZlIERYR0kgYWRhcHRlciAtIGFib3J0aW5nIVxu
Iik7Ci0gICAgICAgIHJldHVybiBFR0xfTk9UX0lOSVRJQUxJWkVEOwotICAgIH0KLQotICAgIGR4
Z2lEZXZpY2UtPlJlbGVhc2UoKTsKLQotICAgIG1EeGdpQWRhcHRlci0+R2V0RGVzYygmbUFkYXB0
ZXJEZXNjcmlwdGlvbik7Ci0gICAgbWVtc2V0KG1EZXNjcmlwdGlvbiwgMCwgc2l6ZW9mKG1EZXNj
cmlwdGlvbikpOwotICAgIHdjc3RvbWJzKG1EZXNjcmlwdGlvbiwgbUFkYXB0ZXJEZXNjcmlwdGlv
bi5EZXNjcmlwdGlvbiwgc2l6ZW9mKG1EZXNjcmlwdGlvbikgLSAxKTsKLQotICAgIHJlc3VsdCA9
IG1EeGdpQWRhcHRlci0+R2V0UGFyZW50KF9fdXVpZG9mKElEWEdJRmFjdG9yeSksICh2b2lkKiop
Jm1EeGdpRmFjdG9yeSk7Ci0KLSAgICBpZiAoIW1EeGdpRmFjdG9yeSB8fCBGQUlMRUQocmVzdWx0
KSkKLSAgICB7Ci0gICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBEWEdJIGZhY3RvcnkgLSBh
Ym9ydGluZyFcbiIpOwotICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsKLSAgICB9
Ci0KLSAgICAvLyBEaXNhYmxlIHNvbWUgc3B1cmlvdXMgRDNEMTEgZGVidWcgd2FybmluZ3MgdG8g
cHJldmVudCB0aGVtIGZyb20gZmxvb2RpbmcgdGhlIG91dHB1dCBsb2cKLSNpZiBkZWZpbmVkKEFO
R0xFX1NVUFBSRVNTX0QzRDExX0hBWkFSRF9XQVJOSU5HUykgJiYgZGVmaW5lZChfREVCVUcpCi0g
ICAgSUQzRDExSW5mb1F1ZXVlICppbmZvUXVldWU7Ci0gICAgcmVzdWx0ID0gbURldmljZS0+UXVl
cnlJbnRlcmZhY2UoX191dWlkb2YoSUQzRDExSW5mb1F1ZXVlKSwgICh2b2lkICoqKSZpbmZvUXVl
dWUpOwotCi0gICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgRDNEMTFf
TUVTU0FHRV9JRCBoaWRlTWVzc2FnZXNbXSA9Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEQzRDEx
X01FU1NBR0VfSURfREVWSUNFX0RSQVdfUkVOREVSVEFSR0VUVklFV19OT1RfU0VUCi0gICAgICAg
IH07Ci0KLSAgICAgICAgRDNEMTFfSU5GT19RVUVVRV9GSUxURVIgZmlsdGVyID0gezB9OwotICAg
ICAgICBmaWx0ZXIuRGVueUxpc3QuTnVtSURzID0gQXJyYXlTaXplKGhpZGVNZXNzYWdlcyk7Ci0g
ICAgICAgIGZpbHRlci5EZW55TGlzdC5wSURMaXN0ID0gaGlkZU1lc3NhZ2VzOwotCi0gICAgICAg
IGluZm9RdWV1ZS0+QWRkU3RvcmFnZUZpbHRlckVudHJpZXMoJmZpbHRlcik7Ci0KLSAgICAgICAg
aW5mb1F1ZXVlLT5SZWxlYXNlKCk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICB1bnNpZ25lZCBpbnQg
bWF4U3VwcG9ydGVkU2FtcGxlcyA9IDA7Ci0gICAgdW5zaWduZWQgaW50IHJ0Rm9ybWF0Q291bnQg
PSBBcnJheVNpemUoUmVuZGVyVGFyZ2V0Rm9ybWF0cyk7Ci0gICAgdW5zaWduZWQgaW50IGRzRm9y
bWF0Q291bnQgPSBBcnJheVNpemUoRGVwdGhTdGVuY2lsRm9ybWF0cyk7Ci0gICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBydEZvcm1hdENvdW50ICsgZHNGb3JtYXRDb3VudDsgKytpKQot
ICAgIHsKLSAgICAgICAgRFhHSV9GT1JNQVQgZm9ybWF0ID0gKGkgPCBydEZvcm1hdENvdW50KSA/
IFJlbmRlclRhcmdldEZvcm1hdHNbaV0gOiBEZXB0aFN0ZW5jaWxGb3JtYXRzW2kgLSBydEZvcm1h
dENvdW50XTsKLSAgICAgICAgaWYgKGZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBVSU5UIGZvcm1hdFN1cHBvcnQ7Ci0gICAgICAgICAgICByZXN1
bHQgPSBtRGV2aWNlLT5DaGVja0Zvcm1hdFN1cHBvcnQoZm9ybWF0LCAmZm9ybWF0U3VwcG9ydCk7
Ci0gICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkgJiYgKGZvcm1hdFN1cHBvcnQgJiBE
M0QxMV9GT1JNQVRfU1VQUE9SVF9NVUxUSVNBTVBMRV9SRU5ERVJUQVJHRVQpKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIE11bHRpc2FtcGxlU3VwcG9ydEluZm8gc3VwcG9ydEluZm87
Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMTsgaiA8PSBEM0QxMV9N
QVhfTVVMVElTQU1QTEVfU0FNUExFX0NPVU5UOyBqKyspCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DaGVja011bHRpc2FtcGxlUXVhbGl0
eUxldmVscyhmb3JtYXQsIGosICZzdXBwb3J0SW5mby5xdWFsaXR5TGV2ZWxzW2ogLSAxXSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSAmJiBzdXBwb3J0SW5mby5x
dWFsaXR5TGV2ZWxzW2ogLSAxXSA+IDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1heFN1cHBvcnRlZFNhbXBsZXMgPSBzdGQ6Om1heChqLCBtYXhTdXBw
b3J0ZWRTYW1wbGVzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1
cHBvcnRJbmZvLnF1YWxpdHlMZXZlbHNbaiAtIDFdID0gMDsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG1NdWx0aXNhbXBsZVN1cHBv
cnRNYXAuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGZvcm1hdCwgc3VwcG9ydEluZm8pKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9IG1h
eFN1cHBvcnRlZFNhbXBsZXM7Ci0KLSAgICBpbml0aWFsaXplRGV2aWNlKCk7Ci0KLSAgICAvLyBC
R1JBIHRleHR1cmUgc3VwcG9ydCBpcyBvcHRpb25hbCBpbiBmZWF0dXJlIGxldmVscyAxMCBhbmQg
MTBfMQotICAgIFVJTlQgZm9ybWF0U3VwcG9ydDsKLSAgICByZXN1bHQgPSBtRGV2aWNlLT5DaGVj
a0Zvcm1hdFN1cHBvcnQoRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk0sICZmb3JtYXRTdXBwb3J0
KTsKLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIoIkVycm9yIGNo
ZWNraW5nIEJHUkEgZm9ybWF0IHN1cHBvcnQ6IDB4JTA4WCIsIHJlc3VsdCk7Ci0gICAgfQotICAg
IGVsc2UKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBmbGFncyA9IChEM0QxMV9GT1JNQVRfU1VQ
UE9SVF9URVhUVVJFMkQgfCBEM0QxMV9GT1JNQVRfU1VQUE9SVF9SRU5ERVJfVEFSR0VUKTsKLSAg
ICAgICAgbUJHUkFUZXh0dXJlU3VwcG9ydCA9IChmb3JtYXRTdXBwb3J0ICYgZmxhZ3MpID09IGZs
YWdzOwotICAgIH0KLQotICAgIC8vIENoZWNrIGZsb2F0aW5nIHBvaW50IHRleHR1cmUgc3VwcG9y
dAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcmVxdWlyZWRUZXh0dXJlRmxhZ3MgPSBE
M0QxMV9GT1JNQVRfU1VQUE9SVF9URVhUVVJFMkQgfCBEM0QxMV9GT1JNQVRfU1VQUE9SVF9URVhU
VVJFQ1VCRTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHJlcXVpcmVkUmVuZGVyYWJs
ZUZsYWdzID0gRDNEMTFfRk9STUFUX1NVUFBPUlRfUkVOREVSX1RBUkdFVDsKLSAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgaW50IHJlcXVpcmVkRmlsdGVyRmxhZ3MgPSBEM0QxMV9GT1JNQVRfU1VQ
UE9SVF9TSEFERVJfU0FNUExFOwotCi0gICAgRFhHSV9GT1JNQVQgZmxvYXQxNkZvcm1hdHNbXSA9
Ci0gICAgewotICAgICAgICBEWEdJX0ZPUk1BVF9SMTZfRkxPQVQsCi0gICAgICAgIERYR0lfRk9S
TUFUX1IxNkcxNl9GTE9BVCwKLSAgICAgICAgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X0ZMT0FU
LAotICAgIH07Ci0KLSAgICBEWEdJX0ZPUk1BVCBmbG9hdDMyRm9ybWF0c1tdID0KLSAgICB7Ci0g
ICAgICAgIERYR0lfRk9STUFUX1IzMl9GTE9BVCwKLSAgICAgICAgRFhHSV9GT1JNQVRfUjMyRzMy
X0ZMT0FULAotICAgICAgICBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsCi0gICAgfTsK
LQotICAgIG1GbG9hdDE2VGV4dHVyZVN1cHBvcnQgPSB0cnVlOwotICAgIG1GbG9hdDE2RmlsdGVy
U3VwcG9ydCA9IHRydWU7Ci0gICAgbUZsb2F0MTZSZW5kZXJTdXBwb3J0ID0gdHJ1ZTsKLSAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShmbG9hdDE2Rm9ybWF0cyk7IGkr
KykKLSAgICB7Ci0gICAgICAgIGlmIChTVUNDRUVERUQobURldmljZS0+Q2hlY2tGb3JtYXRTdXBw
b3J0KGZsb2F0MTZGb3JtYXRzW2ldLCAmZm9ybWF0U3VwcG9ydCkpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBtRmxvYXQxNlRleHR1cmVTdXBwb3J0ID0gbUZsb2F0MTZUZXh0dXJlU3VwcG9ydCAm
JiAoZm9ybWF0U3VwcG9ydCAmIHJlcXVpcmVkVGV4dHVyZUZsYWdzKSA9PSByZXF1aXJlZFRleHR1
cmVGbGFnczsKLSAgICAgICAgICAgIG1GbG9hdDE2RmlsdGVyU3VwcG9ydCA9IG1GbG9hdDE2Rmls
dGVyU3VwcG9ydCAmJiAoZm9ybWF0U3VwcG9ydCAmIHJlcXVpcmVkRmlsdGVyRmxhZ3MpID09IHJl
cXVpcmVkRmlsdGVyRmxhZ3M7Ci0gICAgICAgICAgICBtRmxvYXQxNlJlbmRlclN1cHBvcnQgPSBt
RmxvYXQxNlJlbmRlclN1cHBvcnQgJiYgKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZFJlbmRlcmFi
bGVGbGFncykgPT0gcmVxdWlyZWRSZW5kZXJhYmxlRmxhZ3M7Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRmxvYXQxNlRleHR1cmVTdXBwb3J0ID0gZmFs
c2U7Ci0gICAgICAgICAgICBtRmxvYXQxNlJlbmRlclN1cHBvcnQgPSBmYWxzZTsKLSAgICAgICAg
ICAgIG1GbG9hdDE2RmlsdGVyU3VwcG9ydCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgbUZsb2F0MzJUZXh0dXJlU3VwcG9ydCA9IHRydWU7Ci0gICAgbUZsb2F0MzJGaWx0ZXJTdXBw
b3J0ID0gdHJ1ZTsKLSAgICBtRmxvYXQzMlJlbmRlclN1cHBvcnQgPSB0cnVlOwotICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgQXJyYXlTaXplKGZsb2F0MzJGb3JtYXRzKTsgaSsrKQot
ICAgIHsKLSAgICAgICAgaWYgKFNVQ0NFRURFRChtRGV2aWNlLT5DaGVja0Zvcm1hdFN1cHBvcnQo
ZmxvYXQzMkZvcm1hdHNbaV0sICZmb3JtYXRTdXBwb3J0KSkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQgPSBtRmxvYXQzMlRleHR1cmVTdXBwb3J0ICYmIChm
b3JtYXRTdXBwb3J0ICYgcmVxdWlyZWRUZXh0dXJlRmxhZ3MpID09IHJlcXVpcmVkVGV4dHVyZUZs
YWdzOwotICAgICAgICAgICAgbUZsb2F0MzJGaWx0ZXJTdXBwb3J0ID0gbUZsb2F0MzJGaWx0ZXJT
dXBwb3J0ICYmIChmb3JtYXRTdXBwb3J0ICYgcmVxdWlyZWRGaWx0ZXJGbGFncykgPT0gcmVxdWly
ZWRGaWx0ZXJGbGFnczsKLSAgICAgICAgICAgIG1GbG9hdDMyUmVuZGVyU3VwcG9ydCA9IG1GbG9h
dDMyUmVuZGVyU3VwcG9ydCAmJiAoZm9ybWF0U3VwcG9ydCAmIHJlcXVpcmVkUmVuZGVyYWJsZUZs
YWdzKSA9PSByZXF1aXJlZFJlbmRlcmFibGVGbGFnczsKLSAgICAgICAgfQotICAgICAgICBlbHNl
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQgPSBmYWxzZTsK
LSAgICAgICAgICAgIG1GbG9hdDMyRmlsdGVyU3VwcG9ydCA9IGZhbHNlOwotICAgICAgICAgICAg
bUZsb2F0MzJSZW5kZXJTdXBwb3J0ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAv
LyBDaGVjayBjb21wcmVzc2VkIHRleHR1cmUgc3VwcG9ydAotICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCByZXF1aXJlZENvbXByZXNzZWRUZXh0dXJlRmxhZ3MgPSBEM0QxMV9GT1JNQVRfU1VQUE9SVF9U
RVhUVVJFMkQ7Ci0KLSAgICBpZiAoU1VDQ0VFREVEKG1EZXZpY2UtPkNoZWNrRm9ybWF0U3VwcG9y
dChEWEdJX0ZPUk1BVF9CQzFfVU5PUk0sICZmb3JtYXRTdXBwb3J0KSkpCi0gICAgewotICAgICAg
ICBtRFhUMVRleHR1cmVTdXBwb3J0ID0gKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZENvbXByZXNz
ZWRUZXh0dXJlRmxhZ3MpID09IHJlcXVpcmVkQ29tcHJlc3NlZFRleHR1cmVGbGFnczsKLSAgICB9
Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgbURYVDFUZXh0dXJlU3VwcG9ydCA9IGZhbHNlOwot
ICAgIH0KLQotICAgIGlmIChTVUNDRUVERUQobURldmljZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KERY
R0lfRk9STUFUX0JDM19VTk9STSwgJmZvcm1hdFN1cHBvcnQpKSkKLSAgICB7Ci0gICAgICAgIG1E
WFQzVGV4dHVyZVN1cHBvcnQgPSAoZm9ybWF0U3VwcG9ydCAmIHJlcXVpcmVkQ29tcHJlc3NlZFRl
eHR1cmVGbGFncykgPT0gcmVxdWlyZWRDb21wcmVzc2VkVGV4dHVyZUZsYWdzOwotICAgIH0KLSAg
ICBlbHNlCi0gICAgewotICAgICAgICBtRFhUM1RleHR1cmVTdXBwb3J0ID0gZmFsc2U7Ci0gICAg
fQotCi0gICAgaWYgKFNVQ0NFRURFRChtRGV2aWNlLT5DaGVja0Zvcm1hdFN1cHBvcnQoRFhHSV9G
T1JNQVRfQkM1X1VOT1JNLCAmZm9ybWF0U3VwcG9ydCkpKQotICAgIHsKLSAgICAgICAgbURYVDVU
ZXh0dXJlU3VwcG9ydCA9IChmb3JtYXRTdXBwb3J0ICYgcmVxdWlyZWRDb21wcmVzc2VkVGV4dHVy
ZUZsYWdzKSA9PSByZXF1aXJlZENvbXByZXNzZWRUZXh0dXJlRmxhZ3M7Ci0gICAgfQotICAgIGVs
c2UKLSAgICB7Ci0gICAgICAgIG1EWFQ1VGV4dHVyZVN1cHBvcnQgPSBmYWxzZTsKLSAgICB9Ci0K
LSAgICAvLyBDaGVjayBkZXB0aCB0ZXh0dXJlIHN1cHBvcnQKLSAgICBEWEdJX0ZPUk1BVCBkZXB0
aFRleHR1cmVGb3JtYXRzW10gPQotICAgIHsKLSAgICAgICAgRFhHSV9GT1JNQVRfRDE2X1VOT1JN
LAotICAgICAgICBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVCwKLSAgICB9OwotCi0gICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCByZXF1aXJlZERlcHRoVGV4dHVyZUZsYWdzID0gRDNE
MTFfRk9STUFUX1NVUFBPUlRfREVQVEhfU1RFTkNJTCB8Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEMTFfRk9STUFUX1NVUFBPUlRf
VEVYVFVSRTJEOwotCi0gICAgbURlcHRoVGV4dHVyZVN1cHBvcnQgPSB0cnVlOwotICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgQXJyYXlTaXplKGRlcHRoVGV4dHVyZUZvcm1hdHMpOyBp
KyspCi0gICAgewotICAgICAgICBpZiAoU1VDQ0VFREVEKG1EZXZpY2UtPkNoZWNrRm9ybWF0U3Vw
cG9ydChkZXB0aFRleHR1cmVGb3JtYXRzW2ldLCAmZm9ybWF0U3VwcG9ydCkpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBtRGVwdGhUZXh0dXJlU3VwcG9ydCA9IG1EZXB0aFRleHR1cmVTdXBwb3J0
ICYmICgoZm9ybWF0U3VwcG9ydCAmIHJlcXVpcmVkRGVwdGhUZXh0dXJlRmxhZ3MpID09IHJlcXVp
cmVkRGVwdGhUZXh0dXJlRmxhZ3MpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ewotICAgICAgICAgICAgbURlcHRoVGV4dHVyZVN1cHBvcnQgPSBmYWxzZTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiBFR0xfU1VDQ0VTUzsKLX0KLQotLy8gZG8gYW55IG9uZS10aW1l
IGRldmljZSBpbml0aWFsaXphdGlvbgotLy8gTk9URTogdGhpcyBpcyBhbHNvIG5lZWRlZCBhZnRl
ciBhIGRldmljZSBsb3N0L3Jlc2V0Ci0vLyB0byByZXNldCB0aGUgc2NlbmUgc3RhdHVzIGFuZCBl
bnN1cmUgdGhlIGRlZmF1bHQgc3RhdGVzIGFyZSByZXNldC4KLXZvaWQgUmVuZGVyZXIxMTo6aW5p
dGlhbGl6ZURldmljZSgpCi17Ci0gICAgbVN0YXRlQ2FjaGUuaW5pdGlhbGl6ZShtRGV2aWNlKTsK
LSAgICBtSW5wdXRMYXlvdXRDYWNoZS5pbml0aWFsaXplKG1EZXZpY2UsIG1EZXZpY2VDb250ZXh0
KTsKLQotICAgIEFTU0VSVCghbVZlcnRleERhdGFNYW5hZ2VyICYmICFtSW5kZXhEYXRhTWFuYWdl
cik7Ci0gICAgbVZlcnRleERhdGFNYW5hZ2VyID0gbmV3IFZlcnRleERhdGFNYW5hZ2VyKHRoaXMp
OwotICAgIG1JbmRleERhdGFNYW5hZ2VyID0gbmV3IEluZGV4RGF0YU1hbmFnZXIodGhpcyk7Ci0K
LSAgICBtYXJrQWxsU3RhdGVEaXJ0eSgpOwotfQotCi1pbnQgUmVuZGVyZXIxMTo6Z2VuZXJhdGVD
b25maWdzKENvbmZpZ0Rlc2MgKipjb25maWdEZXNjTGlzdCkKLXsKLSAgICB1bnNpZ25lZCBpbnQg
bnVtUmVuZGVyRm9ybWF0cyA9IEFycmF5U2l6ZShSZW5kZXJUYXJnZXRGb3JtYXRzKTsKLSAgICB1
bnNpZ25lZCBpbnQgbnVtRGVwdGhGb3JtYXRzID0gQXJyYXlTaXplKERlcHRoU3RlbmNpbEZvcm1h
dHMpOwotICAgICgqY29uZmlnRGVzY0xpc3QpID0gbmV3IENvbmZpZ0Rlc2NbbnVtUmVuZGVyRm9y
bWF0cyAqIG51bURlcHRoRm9ybWF0c107Ci0gICAgaW50IG51bUNvbmZpZ3MgPSAwOwotICAgIAot
ICAgIGZvciAodW5zaWduZWQgaW50IGZvcm1hdEluZGV4ID0gMDsgZm9ybWF0SW5kZXggPCBudW1S
ZW5kZXJGb3JtYXRzOyBmb3JtYXRJbmRleCsrKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgZGVwdGhTdGVuY2lsSW5kZXggPSAwOyBkZXB0aFN0ZW5jaWxJbmRleCA8IG51bURlcHRo
Rm9ybWF0czsgZGVwdGhTdGVuY2lsSW5kZXgrKykKLSAgICAgICAgewotICAgICAgICAgICAgRFhH
SV9GT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0ID0gUmVuZGVyVGFyZ2V0Rm9ybWF0c1tmb3JtYXRJ
bmRleF07Ci0KLSAgICAgICAgICAgIFVJTlQgZm9ybWF0U3VwcG9ydCA9IDA7Ci0gICAgICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNoZWNrRm9ybWF0U3VwcG9ydChyZW5kZXJUYXJn
ZXRGb3JtYXQsICZmb3JtYXRTdXBwb3J0KTsKLQotICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChy
ZXN1bHQpICYmIChmb3JtYXRTdXBwb3J0ICYgRDNEMTFfRk9STUFUX1NVUFBPUlRfUkVOREVSX1RB
UkdFVCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRFhHSV9GT1JNQVQgZGVwdGhT
dGVuY2lsRm9ybWF0ID0gRGVwdGhTdGVuY2lsRm9ybWF0c1tkZXB0aFN0ZW5jaWxJbmRleF07Ci0K
LSAgICAgICAgICAgICAgICBib29sIGRlcHRoU3RlbmNpbEZvcm1hdE9LID0gdHJ1ZTsKLQotICAg
ICAgICAgICAgICAgIGlmIChkZXB0aFN0ZW5jaWxGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9X
TikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFVJTlQgZm9ybWF0U3Vw
cG9ydCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNoZWNrRm9y
bWF0U3VwcG9ydChkZXB0aFN0ZW5jaWxGb3JtYXQsICZmb3JtYXRTdXBwb3J0KTsKLSAgICAgICAg
ICAgICAgICAgICAgZGVwdGhTdGVuY2lsRm9ybWF0T0sgPSBTVUNDRUVERUQocmVzdWx0KSAmJiAo
Zm9ybWF0U3VwcG9ydCAmIEQzRDExX0ZPUk1BVF9TVVBQT1JUX0RFUFRIX1NURU5DSUwpOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChkZXB0aFN0ZW5jaWxGb3JtYXRP
SykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIENvbmZpZ0Rlc2MgbmV3
Q29uZmlnOwotICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcucmVuZGVyVGFyZ2V0Rm9ybWF0
ID0gZDNkMTFfZ2w6OkNvbnZlcnRCYWNrQnVmZmVyRm9ybWF0KHJlbmRlclRhcmdldEZvcm1hdCk7
Ci0gICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5kZXB0aFN0ZW5jaWxGb3JtYXQgPSBkM2Qx
MV9nbDo6Q29udmVydERlcHRoU3RlbmNpbEZvcm1hdChkZXB0aFN0ZW5jaWxGb3JtYXQpOwotICAg
ICAgICAgICAgICAgICAgICBuZXdDb25maWcubXVsdGlTYW1wbGUgPSAwOyAgICAgLy8gRklYTUU6
IGVudW1lcmF0ZSBtdWx0aS1zYW1wbGluZwotICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcu
ZmFzdENvbmZpZyA9IHRydWU7ICAgLy8gQXNzdW1lIGFsbCBEWDExIGZvcm1hdCBjb252ZXJzaW9u
cyB0byBiZSBmYXN0Ci0KLSAgICAgICAgICAgICAgICAgICAgKCpjb25maWdEZXNjTGlzdClbbnVt
Q29uZmlncysrXSA9IG5ld0NvbmZpZzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbnVtQ29uZmlnczsKLX0KLQotdm9pZCBS
ZW5kZXJlcjExOjpkZWxldGVDb25maWdzKENvbmZpZ0Rlc2MgKmNvbmZpZ0Rlc2NMaXN0KQotewot
ICAgIGRlbGV0ZSBbXSAoY29uZmlnRGVzY0xpc3QpOwotfQotCi12b2lkIFJlbmRlcmVyMTE6OnN5
bmMoYm9vbCBibG9jaykKLXsKLSAgICBpZiAoYmxvY2spCi0gICAgewotICAgICAgICBIUkVTVUxU
IHJlc3VsdDsKLQotICAgICAgICBpZiAoIW1TeW5jUXVlcnkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEQzRDExX1FVRVJZX0RFU0MgcXVlcnlEZXNjOwotICAgICAgICAgICAgcXVlcnlEZXNjLlF1
ZXJ5ID0gRDNEMTFfUVVFUllfRVZFTlQ7Ci0gICAgICAgICAgICBxdWVyeURlc2MuTWlzY0ZsYWdz
ID0gMDsKLQotICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUXVlcnkoJnF1ZXJ5
RGVzYywgJm1TeW5jUXVlcnkpOwotICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKLSAgICAgICAgfQotCi0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5FbmQobVN5bmNRdWVyeSk7
Ci0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5GbHVzaCgpOwotCi0gICAgICAgIGRvCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2VDb250ZXh0LT5HZXREYXRhKG1TeW5jUXVl
cnksIE5VTEwsIDAsIEQzRDExX0FTWU5DX0dFVERBVEFfRE9OT1RGTFVTSCk7Ci0KLSAgICAgICAg
ICAgIC8vIEtlZXAgcG9sbGluZywgYnV0IGFsbG93IG90aGVyIHRocmVhZHMgdG8gZG8gc29tZXRo
aW5nIHVzZWZ1bCBmaXJzdAotICAgICAgICAgICAgU2xlZXAoMCk7Ci0KLSAgICAgICAgICAgIGlm
ICh0ZXN0RGV2aWNlTG9zdCh0cnVlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgd2hpbGUgKHJlc3VsdCA9
PSBTX0ZBTFNFKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgbURldmljZUNvbnRl
eHQtPkZsdXNoKCk7Ci0gICAgfQotfQotCi1Td2FwQ2hhaW4gKlJlbmRlcmVyMTE6OmNyZWF0ZVN3
YXBDaGFpbihIV05EIHdpbmRvdywgSEFORExFIHNoYXJlSGFuZGxlLCBHTGVudW0gYmFja0J1ZmZl
ckZvcm1hdCwgR0xlbnVtIGRlcHRoQnVmZmVyRm9ybWF0KQotewotICAgIHJldHVybiBuZXcgcng6
OlN3YXBDaGFpbjExKHRoaXMsIHdpbmRvdywgc2hhcmVIYW5kbGUsIGJhY2tCdWZmZXJGb3JtYXQs
IGRlcHRoQnVmZmVyRm9ybWF0KTsKLX0KLQotdm9pZCBSZW5kZXJlcjExOjpzZXRTYW1wbGVyU3Rh
dGUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRleCwgY29uc3QgZ2w6OlNhbXBsZXJTdGF0
ZSAmc2FtcGxlclN0YXRlKQotewotICAgIGlmICh0eXBlID09IGdsOjpTQU1QTEVSX1BJWEVMKQot
ICAgIHsKLSAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBnbDo6TUFYX1RFWFRVUkVf
SU1BR0VfVU5JVFMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiUGl4ZWwgc2hhZGVyIHNh
bXBsZXIgaW5kZXggJWkgaXMgbm90IHZhbGlkLiIsIGluZGV4KTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0ZXNb
aW5kZXhdIHx8IG1lbWNtcCgmc2FtcGxlclN0YXRlLCAmbUN1clBpeGVsU2FtcGxlclN0YXRlc1tp
bmRleF0sIHNpemVvZihnbDo6U2FtcGxlclN0YXRlKSkgIT0gMCkKLSAgICAgICAgewotICAgICAg
ICAgICAgSUQzRDExU2FtcGxlclN0YXRlICpkeFNhbXBsZXJTdGF0ZSA9IG1TdGF0ZUNhY2hlLmdl
dFNhbXBsZXJTdGF0ZShzYW1wbGVyU3RhdGUpOwotCi0gICAgICAgICAgICBpZiAoIWR4U2FtcGxl
clN0YXRlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigiTlVMTCBzYW1wbGVy
IHN0YXRlIHJldHVybmVkIGJ5IFJlbmRlclN0YXRlQ2FjaGU6OmdldFNhbXBsZXJTdGF0ZSwgc2V0
dGluZyB0aGUgZGVmYXVsdCIKLSAgICAgICAgICAgICAgICAgICAgInNhbXBsZXIgc3RhdGUgZm9y
IHBpeGVsIHNoYWRlcnMgYXQgc2xvdCAlaS4iLCBpbmRleCk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNhbXBsZXJzKGluZGV4LCAxLCAmZHhTYW1w
bGVyU3RhdGUpOwotCi0gICAgICAgICAgICBtQ3VyUGl4ZWxTYW1wbGVyU3RhdGVzW2luZGV4XSA9
IHNhbXBsZXJTdGF0ZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1Gb3JjZVNldFBpeGVsU2FtcGxl
clN0YXRlc1tpbmRleF0gPSBmYWxzZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBnbDo6
U0FNUExFUl9WRVJURVgpCi0gICAgewotICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49
IChpbnQpZ2V0TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgRVJSKCJWZXJ0ZXggc2hhZGVyIHNhbXBsZXIgaW5kZXggJWkgaXMgbm90IHZhbGlkLiIs
IGluZGV4KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICht
Rm9yY2VTZXRWZXJ0ZXhTYW1wbGVyU3RhdGVzW2luZGV4XSB8fCBtZW1jbXAoJnNhbXBsZXJTdGF0
ZSwgJm1DdXJWZXJ0ZXhTYW1wbGVyU3RhdGVzW2luZGV4XSwgc2l6ZW9mKGdsOjpTYW1wbGVyU3Rh
dGUpKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBJRDNEMTFTYW1wbGVyU3RhdGUgKmR4
U2FtcGxlclN0YXRlID0gbVN0YXRlQ2FjaGUuZ2V0U2FtcGxlclN0YXRlKHNhbXBsZXJTdGF0ZSk7
Ci0KLSAgICAgICAgICAgIGlmICghZHhTYW1wbGVyU3RhdGUpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgRVJSKCJOVUxMIHNhbXBsZXIgc3RhdGUgcmV0dXJuZWQgYnkgUmVuZGVyU3Rh
dGVDYWNoZTo6Z2V0U2FtcGxlclN0YXRlLCBzZXR0aW5nIHRoZSBkZWZhdWx0IgotICAgICAgICAg
ICAgICAgICAgICAic2FtcGxlciBzdGF0ZSBmb3IgdmVydGV4IHNoYWRlcnMgYXQgc2xvdCAlaS4i
LCBpbmRleCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5W
U1NldFNhbXBsZXJzKGluZGV4LCAxLCAmZHhTYW1wbGVyU3RhdGUpOwotCi0gICAgICAgICAgICBt
Q3VyVmVydGV4U2FtcGxlclN0YXRlc1tpbmRleF0gPSBzYW1wbGVyU3RhdGU7Ci0gICAgICAgIH0K
LQotICAgICAgICBtRm9yY2VTZXRWZXJ0ZXhTYW1wbGVyU3RhdGVzW2luZGV4XSA9IGZhbHNlOwot
ICAgIH0KLSAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci19Ci0KLXZvaWQgUmVuZGVyZXIxMTo6c2V0
VGV4dHVyZShnbDo6U2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBnbDo6VGV4dHVyZSAqdGV4
dHVyZSkKLXsKLSAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnRleHR1cmVTUlYgPSBOVUxM
OwotICAgIHVuc2lnbmVkIGludCBzZXJpYWwgPSAwOwotICAgIGJvb2wgZm9yY2VTZXRUZXh0dXJl
ID0gZmFsc2U7Ci0KLSAgICBpZiAodGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlICp0ZXhTdG9yYWdlID0gdGV4dHVyZS0+Z2V0TmF0aXZlVGV4dHVyZSgpOwot
ICAgICAgICBpZiAodGV4U3RvcmFnZSkKLSAgICAgICAgewotICAgICAgICAgICAgVGV4dHVyZVN0
b3JhZ2UxMSAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMTo6bWFrZVRleHR1cmVTdG9yYWdl
MTEodGV4U3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwotICAgICAgICAgICAgdGV4dHVy
ZVNSViA9IHN0b3JhZ2UxMS0+Z2V0U1JWKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB3
ZSBnZXQgTlVMTCBiYWNrIGZyb20gZ2V0U1JWIGhlcmUsIHNvbWV0aGluZyB3ZW50IHdyb25nIGlu
IHRoZSB0ZXh0dXJlIGNsYXNzIGFuZCB3ZSdyZSB1bmV4cGVjdGVkbHkKLSAgICAgICAgLy8gbWlz
c2luZyB0aGUgc2hhZGVyIHJlc291cmNlIHZpZXcKLSAgICAgICAgQVNTRVJUKHRleHR1cmVTUlYg
IT0gTlVMTCk7Ci0KLSAgICAgICAgc2VyaWFsID0gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgp
OwotICAgICAgICBmb3JjZVNldFRleHR1cmUgPSB0ZXh0dXJlLT5oYXNEaXJ0eUltYWdlcygpOwot
ICAgIH0KLQotICAgIGlmICh0eXBlID09IGdsOjpTQU1QTEVSX1BJWEVMKQotICAgIHsKLSAgICAg
ICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiUGl4ZWwgc2hhZGVyIHNhbXBsZXIgaW5kZXgg
JWkgaXMgbm90IHZhbGlkLiIsIGluZGV4KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChmb3JjZVNldFRleHR1cmUgfHwgbUN1clBpeGVsVGV4dHVyZVNlcmlh
bHNbaW5kZXhdICE9IHNlcmlhbCkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZUNvbnRl
eHQtPlBTU2V0U2hhZGVyUmVzb3VyY2VzKGluZGV4LCAxLCAmdGV4dHVyZVNSVik7Ci0gICAgICAg
IH0KLQotICAgICAgICBtQ3VyUGl4ZWxUZXh0dXJlU2VyaWFsc1tpbmRleF0gPSBzZXJpYWw7Ci0g
ICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0gZ2w6OlNBTVBMRVJfVkVSVEVYKQotICAgIHsKLSAg
ICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSAoaW50KWdldE1heFZlcnRleFRleHR1cmVJ
bWFnZVVuaXRzKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiVmVydGV4IHNoYWRlciBz
YW1wbGVyIGluZGV4ICVpIGlzIG5vdCB2YWxpZC4iLCBpbmRleCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZm9yY2VTZXRUZXh0dXJlIHx8IG1DdXJWZXJ0
ZXhUZXh0dXJlU2VyaWFsc1tpbmRleF0gIT0gc2VyaWFsKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtRGV2aWNlQ29udGV4dC0+VlNTZXRTaGFkZXJSZXNvdXJjZXMoaW5kZXgsIDEsICZ0ZXh0dXJl
U1JWKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1tpbmRl
eF0gPSBzZXJpYWw7Ci0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLX0KLQotdm9pZCBS
ZW5kZXJlcjExOjpzZXRSYXN0ZXJpemVyU3RhdGUoY29uc3QgZ2w6OlJhc3Rlcml6ZXJTdGF0ZSAm
cmFzdGVyU3RhdGUpCi17Ci0gICAgaWYgKG1Gb3JjZVNldFJhc3RlclN0YXRlIHx8IG1lbWNtcCgm
cmFzdGVyU3RhdGUsICZtQ3VyUmFzdGVyU3RhdGUsIHNpemVvZihnbDo6UmFzdGVyaXplclN0YXRl
KSkgIT0gMCkKLSAgICB7Ci0gICAgICAgIElEM0QxMVJhc3Rlcml6ZXJTdGF0ZSAqZHhSYXN0ZXJT
dGF0ZSA9IG1TdGF0ZUNhY2hlLmdldFJhc3Rlcml6ZXJTdGF0ZShyYXN0ZXJTdGF0ZSwgbVNjaXNz
b3JFbmFibGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUN1ckRlcHRoU2l6ZSk7Ci0gICAgICAg
IGlmICghZHhSYXN0ZXJTdGF0ZSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJOVUxMIHJh
c3Rlcml6ZXIgc3RhdGUgcmV0dXJuZWQgYnkgUmVuZGVyU3RhdGVDYWNoZTo6Z2V0UmFzdGVyaXpl
clN0YXRlLCBzZXR0aW5nIHRoZSBkZWZhdWx0IgotICAgICAgICAgICAgICAgICJyYXN0ZXJpemVy
IHN0YXRlLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgbURldmljZUNvbnRleHQtPlJTU2V0U3Rh
dGUoZHhSYXN0ZXJTdGF0ZSk7Ci0KLSAgICAgICAgbUN1clJhc3RlclN0YXRlID0gcmFzdGVyU3Rh
dGU7Ci0gICAgfQotCi0gICAgbUZvcmNlU2V0UmFzdGVyU3RhdGUgPSBmYWxzZTsKLX0KLQotdm9p
ZCBSZW5kZXJlcjExOjpzZXRCbGVuZFN0YXRlKGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0
YXRlLCBjb25zdCBnbDo6Q29sb3IgJmJsZW5kQ29sb3IsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZU1hc2spCi17Ci0gICAgaWYgKG1Gb3JjZVNldEJs
ZW5kU3RhdGUgfHwKLSAgICAgICAgbWVtY21wKCZibGVuZFN0YXRlLCAmbUN1ckJsZW5kU3RhdGUs
IHNpemVvZihnbDo6QmxlbmRTdGF0ZSkpICE9IDAgfHwKLSAgICAgICAgbWVtY21wKCZibGVuZENv
bG9yLCAmbUN1ckJsZW5kQ29sb3IsIHNpemVvZihnbDo6Q29sb3IpKSAhPSAwIHx8Ci0gICAgICAg
IHNhbXBsZU1hc2sgIT0gbUN1clNhbXBsZU1hc2spCi0gICAgewotICAgICAgICBJRDNEMTFCbGVu
ZFN0YXRlICpkeEJsZW5kU3RhdGUgPSBtU3RhdGVDYWNoZS5nZXRCbGVuZFN0YXRlKGJsZW5kU3Rh
dGUpOwotICAgICAgICBpZiAoIWR4QmxlbmRTdGF0ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
RVJSKCJOVUxMIGJsZW5kIHN0YXRlIHJldHVybmVkIGJ5IFJlbmRlclN0YXRlQ2FjaGU6OmdldEJs
ZW5kU3RhdGUsIHNldHRpbmcgdGhlIGRlZmF1bHQgIgotICAgICAgICAgICAgICAgICJibGVuZCBz
dGF0ZS4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0IGJsZW5kQ29sb3JzWzRdID0gezAu
MGZ9OwotICAgICAgICBpZiAoYmxlbmRTdGF0ZS5zb3VyY2VCbGVuZFJHQiAhPSBHTF9DT05TVEFO
VF9BTFBIQSAmJiBibGVuZFN0YXRlLnNvdXJjZUJsZW5kUkdCICE9IEdMX09ORV9NSU5VU19DT05T
VEFOVF9BTFBIQSAmJgotICAgICAgICAgICAgYmxlbmRTdGF0ZS5kZXN0QmxlbmRSR0IgIT0gR0xf
Q09OU1RBTlRfQUxQSEEgJiYgYmxlbmRTdGF0ZS5kZXN0QmxlbmRSR0IgIT0gR0xfT05FX01JTlVT
X0NPTlNUQU5UX0FMUEhBKQotICAgICAgICB7Ci0gICAgICAgICAgICBibGVuZENvbG9yc1swXSA9
IGJsZW5kQ29sb3IucmVkOwotICAgICAgICAgICAgYmxlbmRDb2xvcnNbMV0gPSBibGVuZENvbG9y
LmdyZWVuOwotICAgICAgICAgICAgYmxlbmRDb2xvcnNbMl0gPSBibGVuZENvbG9yLmJsdWU7Ci0g
ICAgICAgICAgICBibGVuZENvbG9yc1szXSA9IGJsZW5kQ29sb3IuYWxwaGE7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBibGVuZENvbG9yc1swXSA9IGJs
ZW5kQ29sb3IuYWxwaGE7Ci0gICAgICAgICAgICBibGVuZENvbG9yc1sxXSA9IGJsZW5kQ29sb3Iu
YWxwaGE7Ci0gICAgICAgICAgICBibGVuZENvbG9yc1syXSA9IGJsZW5kQ29sb3IuYWxwaGE7Ci0g
ICAgICAgICAgICBibGVuZENvbG9yc1szXSA9IGJsZW5kQ29sb3IuYWxwaGE7Ci0gICAgICAgIH0K
LQotICAgICAgICBtRGV2aWNlQ29udGV4dC0+T01TZXRCbGVuZFN0YXRlKGR4QmxlbmRTdGF0ZSwg
YmxlbmRDb2xvcnMsIHNhbXBsZU1hc2spOwotCi0gICAgICAgIG1DdXJCbGVuZFN0YXRlID0gYmxl
bmRTdGF0ZTsKLSAgICAgICAgbUN1ckJsZW5kQ29sb3IgPSBibGVuZENvbG9yOwotICAgICAgICBt
Q3VyU2FtcGxlTWFzayA9IHNhbXBsZU1hc2s7Ci0gICAgfQotCi0gICAgbUZvcmNlU2V0QmxlbmRT
dGF0ZSA9IGZhbHNlOwotfQotCi12b2lkIFJlbmRlcmVyMTE6OnNldERlcHRoU3RlbmNpbFN0YXRl
KGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmZGVwdGhTdGVuY2lsU3RhdGUsIGludCBzdGVu
Y2lsUmVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RlbmNp
bEJhY2tSZWYsIGJvb2wgZnJvbnRGYWNlQ0NXKQotewotICAgIGlmIChtRm9yY2VTZXREZXB0aFN0
ZW5jaWxTdGF0ZSB8fAotICAgICAgICBtZW1jbXAoJmRlcHRoU3RlbmNpbFN0YXRlLCAmbUN1ckRl
cHRoU3RlbmNpbFN0YXRlLCBzaXplb2YoZ2w6OkRlcHRoU3RlbmNpbFN0YXRlKSkgIT0gMCB8fAot
ICAgICAgICBzdGVuY2lsUmVmICE9IG1DdXJTdGVuY2lsUmVmIHx8IHN0ZW5jaWxCYWNrUmVmICE9
IG1DdXJTdGVuY2lsQmFja1JlZikKLSAgICB7Ci0gICAgICAgIGlmIChkZXB0aFN0ZW5jaWxTdGF0
ZS5zdGVuY2lsV3JpdGVtYXNrICE9IGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVt
YXNrIHx8Ci0gICAgICAgICAgICBzdGVuY2lsUmVmICE9IHN0ZW5jaWxCYWNrUmVmIHx8Ci0gICAg
ICAgICAgICBkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsTWFzayAhPSBkZXB0aFN0ZW5jaWxTdGF0
ZS5zdGVuY2lsQmFja01hc2spCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiU2VwYXJhdGUg
ZnJvbnQvYmFjayBzdGVuY2lsIHdyaXRlbWFza3MsIHJlZmVyZW5jZSB2YWx1ZXMsIG9yIHN0ZW5j
aWwgbWFzayB2YWx1ZXMgYXJlICIKLSAgICAgICAgICAgICAgICAiaW52YWxpZCB1bmRlciBXZWJH
TC4iKTsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgICAgICB9Ci0KLSAgICAgICAgSUQzRDExRGVwdGhTdGVuY2lsU3RhdGUgKmR4RGVwdGhT
dGVuY2lsU3RhdGUgPSBtU3RhdGVDYWNoZS5nZXREZXB0aFN0ZW5jaWxTdGF0ZShkZXB0aFN0ZW5j
aWxTdGF0ZSk7Ci0gICAgICAgIGlmICghZHhEZXB0aFN0ZW5jaWxTdGF0ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgRVJSKCJOVUxMIGRlcHRoIHN0ZW5jaWwgc3RhdGUgcmV0dXJuZWQgYnkgUmVu
ZGVyU3RhdGVDYWNoZTo6Z2V0RGVwdGhTdGVuY2lsU3RhdGUsICIKLSAgICAgICAgICAgICAgICAi
c2V0dGluZyB0aGUgZGVmYXVsdCBkZXB0aCBzdGVuY2lsIHN0YXRlLiIpOwotICAgICAgICB9Ci0K
LSAgICAgICAgbURldmljZUNvbnRleHQtPk9NU2V0RGVwdGhTdGVuY2lsU3RhdGUoZHhEZXB0aFN0
ZW5jaWxTdGF0ZSwgc3RhdGljX2Nhc3Q8VUlOVD4oc3RlbmNpbFJlZikpOwotCi0gICAgICAgIG1D
dXJEZXB0aFN0ZW5jaWxTdGF0ZSA9IGRlcHRoU3RlbmNpbFN0YXRlOwotICAgICAgICBtQ3VyU3Rl
bmNpbFJlZiA9IHN0ZW5jaWxSZWY7Ci0gICAgICAgIG1DdXJTdGVuY2lsQmFja1JlZiA9IHN0ZW5j
aWxCYWNrUmVmOwotICAgIH0KLQotICAgIG1Gb3JjZVNldERlcHRoU3RlbmNpbFN0YXRlID0gZmFs
c2U7Ci19Ci0KLXZvaWQgUmVuZGVyZXIxMTo6c2V0U2Npc3NvclJlY3RhbmdsZShjb25zdCBnbDo6
UmVjdGFuZ2xlICZzY2lzc29yLCBib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKG1Gb3JjZVNldFNj
aXNzb3IgfHwgbWVtY21wKCZzY2lzc29yLCAmbUN1clNjaXNzb3IsIHNpemVvZihnbDo6UmVjdGFu
Z2xlKSkgIT0gMCB8fAotICAgICAgICBlbmFibGVkICE9IG1TY2lzc29yRW5hYmxlZCkKLSAgICB7
Ci0gICAgICAgIGlmIChlbmFibGVkKQotICAgICAgICB7Ci0gICAgICAgICAgICBEM0QxMV9SRUNU
IHJlY3Q7Ci0gICAgICAgICAgICByZWN0LmxlZnQgPSBzdGQ6Om1heCgwLCBzY2lzc29yLngpOwot
ICAgICAgICAgICAgcmVjdC50b3AgPSBzdGQ6Om1heCgwLCBzY2lzc29yLnkpOwotICAgICAgICAg
ICAgcmVjdC5yaWdodCA9IHNjaXNzb3IueCArIHN0ZDo6bWF4KDAsIHNjaXNzb3Iud2lkdGgpOwot
ICAgICAgICAgICAgcmVjdC5ib3R0b20gPSBzY2lzc29yLnkgKyBzdGQ6Om1heCgwLCBzY2lzc29y
LmhlaWdodCk7Ci0KLSAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5SU1NldFNjaXNzb3JSZWN0
cygxLCAmcmVjdCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZW5hYmxlZCAhPSBtU2Npc3Nv
ckVuYWJsZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1Gb3JjZVNldFJhc3RlclN0YXRlID0g
dHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1DdXJTY2lzc29yID0gc2Npc3NvcjsKLSAgICAg
ICAgbVNjaXNzb3JFbmFibGVkID0gZW5hYmxlZDsKLSAgICB9Ci0KLSAgICBtRm9yY2VTZXRTY2lz
c29yID0gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyZXIxMTo6c2V0Vmlld3BvcnQoY29uc3QgZ2w6
OlJlY3RhbmdsZSAmdmlld3BvcnQsIGZsb2F0IHpOZWFyLCBmbG9hdCB6RmFyLCBHTGVudW0gZHJh
d01vZGUsIEdMZW51bSBmcm9udEZhY2UsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGlnbm9yZVZpZXdwb3J0KQotewotICAgIGdsOjpSZWN0YW5nbGUgYWN0dWFsVmlld3BvcnQg
PSB2aWV3cG9ydDsKLSAgICBmbG9hdCBhY3R1YWxaTmVhciA9IGdsOjpjbGFtcDAxKHpOZWFyKTsK
LSAgICBmbG9hdCBhY3R1YWxaRmFyID0gZ2w6OmNsYW1wMDEoekZhcik7Ci0gICAgaWYgKGlnbm9y
ZVZpZXdwb3J0KQotICAgIHsKLSAgICAgICAgYWN0dWFsVmlld3BvcnQueCA9IDA7Ci0gICAgICAg
IGFjdHVhbFZpZXdwb3J0LnkgPSAwOwotICAgICAgICBhY3R1YWxWaWV3cG9ydC53aWR0aCA9IG1S
ZW5kZXJUYXJnZXREZXNjLndpZHRoOwotICAgICAgICBhY3R1YWxWaWV3cG9ydC5oZWlnaHQgPSBt
UmVuZGVyVGFyZ2V0RGVzYy5oZWlnaHQ7Ci0gICAgICAgIGFjdHVhbFpOZWFyID0gMC4wZjsKLSAg
ICAgICAgYWN0dWFsWkZhciA9IDEuMGY7Ci0gICAgfQotCi0gICAgLy8gR2V0IEQzRCB2aWV3cG9y
dCBib3VuZHMsIHdoaWNoIGRlcGVuZHMgb24gdGhlIGZlYXR1cmUgbGV2ZWwKLSAgICBjb25zdCBS
YW5nZSYgdmlld3BvcnRCb3VuZHMgPSBnZXRWaWV3cG9ydEJvdW5kcygpOwotCi0gICAgLy8gQ2xh
bXAgd2lkdGggYW5kIGhlaWdodCBmaXJzdCB0byB0aGUgZ2wgbWF4aW11bSwgdGhlbiBjbGFtcCBm
dXJ0aGVyIGlmIHdlIGV4dGVuZCBwYXN0IHRoZSBEM0QgbWF4aW11bSBib3VuZHMKLSAgICBEM0Qx
MV9WSUVXUE9SVCBkeFZpZXdwb3J0OwotICAgIGR4Vmlld3BvcnQuVG9wTGVmdFggPSBnbDo6Y2xh
bXAoYWN0dWFsVmlld3BvcnQueCwgdmlld3BvcnRCb3VuZHMuc3RhcnQsIHZpZXdwb3J0Qm91bmRz
LmVuZCk7Ci0gICAgZHhWaWV3cG9ydC5Ub3BMZWZ0WSA9IGdsOjpjbGFtcChhY3R1YWxWaWV3cG9y
dC55LCB2aWV3cG9ydEJvdW5kcy5zdGFydCwgdmlld3BvcnRCb3VuZHMuZW5kKTsKLSAgICBkeFZp
ZXdwb3J0LldpZHRoID0gZ2w6OmNsYW1wKGFjdHVhbFZpZXdwb3J0LndpZHRoLCAwLCBnZXRNYXhW
aWV3cG9ydERpbWVuc2lvbigpKTsKLSAgICBkeFZpZXdwb3J0LkhlaWdodCA9IGdsOjpjbGFtcChh
Y3R1YWxWaWV3cG9ydC5oZWlnaHQsIDAsIGdldE1heFZpZXdwb3J0RGltZW5zaW9uKCkpOwotICAg
IGR4Vmlld3BvcnQuV2lkdGggPSBzdGQ6Om1pbigoaW50KWR4Vmlld3BvcnQuV2lkdGgsIHZpZXdw
b3J0Qm91bmRzLmVuZCAtIHN0YXRpY19jYXN0PGludD4oZHhWaWV3cG9ydC5Ub3BMZWZ0WCkpOwot
ICAgIGR4Vmlld3BvcnQuSGVpZ2h0ID0gc3RkOjptaW4oKGludClkeFZpZXdwb3J0LkhlaWdodCwg
dmlld3BvcnRCb3VuZHMuZW5kIC0gc3RhdGljX2Nhc3Q8aW50PihkeFZpZXdwb3J0LlRvcExlZnRZ
KSk7Ci0gICAgZHhWaWV3cG9ydC5NaW5EZXB0aCA9IGFjdHVhbFpOZWFyOwotICAgIGR4Vmlld3Bv
cnQuTWF4RGVwdGggPSBhY3R1YWxaRmFyOwotCi0gICAgaWYgKGR4Vmlld3BvcnQuV2lkdGggPD0g
MCB8fCBkeFZpZXdwb3J0LkhlaWdodCA8PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OyAgIC8vIE5vdGhpbmcgdG8gcmVuZGVyCi0gICAgfQotCi0gICAgYm9vbCB2aWV3cG9ydENoYW5n
ZWQgPSBtRm9yY2VTZXRWaWV3cG9ydCB8fCBtZW1jbXAoJmFjdHVhbFZpZXdwb3J0LCAmbUN1clZp
ZXdwb3J0LCBzaXplb2YoZ2w6OlJlY3RhbmdsZSkpICE9IDAgfHwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFjdHVhbFpOZWFyICE9IG1DdXJOZWFyIHx8IGFjdHVhbFpGYXIgIT0gbUN1ckZh
cjsKLQotICAgIGlmICh2aWV3cG9ydENoYW5nZWQpCi0gICAgewotICAgICAgICBtRGV2aWNlQ29u
dGV4dC0+UlNTZXRWaWV3cG9ydHMoMSwgJmR4Vmlld3BvcnQpOwotCi0gICAgICAgIG1DdXJWaWV3
cG9ydCA9IGFjdHVhbFZpZXdwb3J0OwotICAgICAgICBtQ3VyTmVhciA9IGFjdHVhbFpOZWFyOwot
ICAgICAgICBtQ3VyRmFyID0gYWN0dWFsWkZhcjsKLQotICAgICAgICBtUGl4ZWxDb25zdGFudHMu
dmlld0Nvb3Jkc1swXSA9IGFjdHVhbFZpZXdwb3J0LndpZHRoICAqIDAuNWY7Ci0gICAgICAgIG1Q
aXhlbENvbnN0YW50cy52aWV3Q29vcmRzWzFdID0gYWN0dWFsVmlld3BvcnQuaGVpZ2h0ICogMC41
ZjsKLSAgICAgICAgbVBpeGVsQ29uc3RhbnRzLnZpZXdDb29yZHNbMl0gPSBhY3R1YWxWaWV3cG9y
dC54ICsgKGFjdHVhbFZpZXdwb3J0LndpZHRoICAqIDAuNWYpOwotICAgICAgICBtUGl4ZWxDb25z
dGFudHMudmlld0Nvb3Jkc1szXSA9IGFjdHVhbFZpZXdwb3J0LnkgKyAoYWN0dWFsVmlld3BvcnQu
aGVpZ2h0ICogMC41Zik7Ci0KLSAgICAgICAgbVBpeGVsQ29uc3RhbnRzLmRlcHRoRnJvbnRbMF0g
PSAoYWN0dWFsWkZhciAtIGFjdHVhbFpOZWFyKSAqIDAuNWY7Ci0gICAgICAgIG1QaXhlbENvbnN0
YW50cy5kZXB0aEZyb250WzFdID0gKGFjdHVhbFpOZWFyICsgYWN0dWFsWkZhcikgKiAwLjVmOwot
Ci0gICAgICAgIG1WZXJ0ZXhDb25zdGFudHMuZGVwdGhSYW5nZVswXSA9IGFjdHVhbFpOZWFyOwot
ICAgICAgICBtVmVydGV4Q29uc3RhbnRzLmRlcHRoUmFuZ2VbMV0gPSBhY3R1YWxaRmFyOwotICAg
ICAgICBtVmVydGV4Q29uc3RhbnRzLmRlcHRoUmFuZ2VbMl0gPSBhY3R1YWxaRmFyIC0gYWN0dWFs
Wk5lYXI7Ci0KLSAgICAgICAgbVBpeGVsQ29uc3RhbnRzLmRlcHRoUmFuZ2VbMF0gPSBhY3R1YWxa
TmVhcjsKLSAgICAgICAgbVBpeGVsQ29uc3RhbnRzLmRlcHRoUmFuZ2VbMV0gPSBhY3R1YWxaRmFy
OwotICAgICAgICBtUGl4ZWxDb25zdGFudHMuZGVwdGhSYW5nZVsyXSA9IGFjdHVhbFpGYXIgLSBh
Y3R1YWxaTmVhcjsKLSAgICB9Ci0KLSAgICBtRm9yY2VTZXRWaWV3cG9ydCA9IGZhbHNlOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIFJlbmRlcmVyMTE6OmFwcGx5UHJpbWl0aXZlVHlwZShH
TGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCkKLXsKLSAgICBEM0QxMV9QUklNSVRJVkVfVE9QT0xP
R1kgcHJpbWl0aXZlVG9wb2xvZ3kgPSBEM0RfUFJJTUlUSVZFX1RPUE9MT0dZX1VOREVGSU5FRDsK
LQotICAgIEdMc2l6ZWkgbWluQ291bnQgPSAwOwotCi0gICAgc3dpdGNoIChtb2RlKQotICAgIHsK
LSAgICAgIGNhc2UgR0xfUE9JTlRTOiAgICAgICAgIHByaW1pdGl2ZVRvcG9sb2d5ID0gRDNEMTFf
UFJJTUlUSVZFX1RPUE9MT0dZX1BPSU5UTElTVDsgICBtaW5Db3VudCA9IDE7IGJyZWFrOwotICAg
ICAgY2FzZSBHTF9MSU5FUzogICAgICAgICAgcHJpbWl0aXZlVG9wb2xvZ3kgPSBEM0RfUFJJTUlU
SVZFX1RPUE9MT0dZX0xJTkVMSVNUOyAgICAgIG1pbkNvdW50ID0gMjsgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0xJTkVfTE9PUDogICAgICBwcmltaXRpdmVUb3BvbG9neSA9IEQzRF9QUklNSVRJVkVf
VE9QT0xPR1lfTElORVNUUklQOyAgICAgbWluQ291bnQgPSAyOyBicmVhazsKLSAgICAgIGNhc2Ug
R0xfTElORV9TVFJJUDogICAgIHByaW1pdGl2ZVRvcG9sb2d5ID0gRDNEX1BSSU1JVElWRV9UT1BP
TE9HWV9MSU5FU1RSSVA7ICAgICBtaW5Db3VudCA9IDI7IGJyZWFrOwotICAgICAgY2FzZSBHTF9U
UklBTkdMRVM6ICAgICAgcHJpbWl0aXZlVG9wb2xvZ3kgPSBEM0RfUFJJTUlUSVZFX1RPUE9MT0dZ
X1RSSUFOR0xFTElTVDsgIG1pbkNvdW50ID0gMzsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1RSSUFO
R0xFX1NUUklQOiBwcmltaXRpdmVUb3BvbG9neSA9IEQzRF9QUklNSVRJVkVfVE9QT0xPR1lfVFJJ
QU5HTEVTVFJJUDsgbWluQ291bnQgPSAzOyBicmVhazsKLSAgICAgICAgICAvLyBlbXVsYXRlIGZh
bnMgdmlhIHJld3JpdGluZyBpbmRleCBidWZmZXIKLSAgICAgIGNhc2UgR0xfVFJJQU5HTEVfRkFO
OiAgIHByaW1pdGl2ZVRvcG9sb2d5ID0gRDNEX1BSSU1JVElWRV9UT1BPTE9HWV9UUklBTkdMRUxJ
U1Q7ICBtaW5Db3VudCA9IDM7IGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0sIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAocHJp
bWl0aXZlVG9wb2xvZ3kgIT0gbUN1cnJlbnRQcmltaXRpdmVUb3BvbG9neSkKLSAgICB7Ci0gICAg
ICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldFByaW1pdGl2ZVRvcG9sb2d5KHByaW1pdGl2ZVRvcG9s
b2d5KTsKLSAgICAgICAgbUN1cnJlbnRQcmltaXRpdmVUb3BvbG9neSA9IHByaW1pdGl2ZVRvcG9s
b2d5OwotICAgIH0KLQotICAgIHJldHVybiBjb3VudCA+PSBtaW5Db3VudDsKLX0KLQotYm9vbCBS
ZW5kZXJlcjExOjphcHBseVJlbmRlclRhcmdldChnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVy
KQotewotICAgIC8vIEdldCB0aGUgY29sb3IgcmVuZGVyIGJ1ZmZlciBhbmQgc2VyaWFsCi0gICAg
Ly8gQWxzbyBleHRyYWN0IHRoZSByZW5kZXIgdGFyZ2V0IGRpbWVuc2lvbnMgYW5kIHZpZXcKLSAg
ICB1bnNpZ25lZCBpbnQgcmVuZGVyVGFyZ2V0V2lkdGggPSAwOwotICAgIHVuc2lnbmVkIGludCBy
ZW5kZXJUYXJnZXRIZWlnaHQgPSAwOwotICAgIEdMZW51bSByZW5kZXJUYXJnZXRGb3JtYXQgPSAw
OwotICAgIHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRTZXJpYWxzW2dsOjpJTVBMRU1FTlRBVElP
Tl9NQVhfRFJBV19CVUZGRVJTXSA9IHswfTsKLSAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3KiBm
cmFtZWJ1ZmZlclJUVnNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlNdID0ge05V
TEx9OwotICAgIGJvb2wgbWlzc2luZ0NvbG9yUmVuZGVyVGFyZ2V0ID0gdHJ1ZTsKLQotICAgIGZv
ciAodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNobWVudCA8IGds
OjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQrKykKLSAg
ICB7Ci0gICAgICAgIGNvbnN0IEdMZW51bSBkcmF3QnVmZmVyU3RhdGUgPSBmcmFtZWJ1ZmZlci0+
Z2V0RHJhd0J1ZmZlclN0YXRlKGNvbG9yQXR0YWNobWVudCk7Ci0KLSAgICAgICAgaWYgKGZyYW1l
YnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoY29sb3JBdHRhY2htZW50KSAhPSBHTF9OT05FICYm
IGRyYXdCdWZmZXJTdGF0ZSAhPSBHTF9OT05FKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyB0
aGUgZHJhdyBidWZmZXIgbXVzdCBiZSBlaXRoZXIgIm5vbmUiLCAiYmFjayIgZm9yIHRoZSBkZWZh
dWx0IGJ1ZmZlciBvciB0aGUgc2FtZSBpbmRleCBhcyB0aGlzIGNvbG9yIChpbiBvcmRlcikKLSAg
ICAgICAgICAgIEFTU0VSVChkcmF3QnVmZmVyU3RhdGUgPT0gR0xfQkFDSyB8fCBkcmF3QnVmZmVy
U3RhdGUgPT0gKEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCArIGNvbG9yQXR0YWNobWVudCkpOwot
Ci0gICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVy
LT5nZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQpOwotCi0gICAgICAgICAgICBpZiAoIWNv
bG9yYnVmZmVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigicmVuZGVyIHRh
cmdldCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gY2hlY2sgZm9yIHplcm8t
c2l6ZWQgZGVmYXVsdCBmcmFtZWJ1ZmZlciwgd2hpY2ggaXMgYSBzcGVjaWFsIGNhc2UuCi0gICAg
ICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2UgZG8gbm90IHdpc2ggdG8gbW9kaWZ5IGFueSBzdGF0
ZSBhbmQganVzdCBzaWxlbnRseSByZXR1cm4gZmFsc2UuCi0gICAgICAgICAgICAvLyB0aGlzIHdp
bGwgbm90IHJlcG9ydCBhbnkgZ2wgZXJyb3IgYnV0IHdpbGwgY2F1c2UgdGhlIGNhbGxpbmcgbWV0
aG9kIHRvIHJldHVybi4KLSAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlci0+Z2V0V2lkdGgoKSA9
PSAwIHx8IGNvbG9yYnVmZmVyLT5nZXRIZWlnaHQoKSA9PSAwKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
cmVuZGVyVGFyZ2V0U2VyaWFsc1tjb2xvckF0dGFjaG1lbnRdID0gY29sb3JidWZmZXItPmdldFNl
cmlhbCgpOwotCi0gICAgICAgICAgICAvLyBFeHRyYWN0IHRoZSByZW5kZXIgdGFyZ2V0IGRpbWVu
c2lvbnMgYW5kIHZpZXcKLSAgICAgICAgICAgIFJlbmRlclRhcmdldDExICpyZW5kZXJUYXJnZXQg
PSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGNvbG9yYnVmZmVyLT5nZXRSZW5k
ZXJUYXJnZXQoKSk7Ci0gICAgICAgICAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBFUlIoInJlbmRlciB0YXJnZXQgcG9pbnRlciB1bmV4cGVjdGVk
bHkgbnVsbC4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGZyYW1lYnVmZmVyUlRWc1tjb2xvckF0dGFjaG1lbnRdID0gcmVuZGVy
VGFyZ2V0LT5nZXRSZW5kZXJUYXJnZXRWaWV3KCk7Ci0gICAgICAgICAgICBpZiAoIWZyYW1lYnVm
ZmVyUlRWc1tjb2xvckF0dGFjaG1lbnRdKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IEVSUigicmVuZGVyIHRhcmdldCB2aWV3IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAobWlzc2luZ0NvbG9yUmVuZGVyVGFyZ2V0KQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJlbmRlclRhcmdldFdpZHRoID0gY29sb3JidWZmZXItPmdldFdpZHRoKCk7Ci0gICAg
ICAgICAgICAgICAgcmVuZGVyVGFyZ2V0SGVpZ2h0ID0gY29sb3JidWZmZXItPmdldEhlaWdodCgp
OwotICAgICAgICAgICAgICAgIHJlbmRlclRhcmdldEZvcm1hdCA9IGNvbG9yYnVmZmVyLT5nZXRB
Y3R1YWxGb3JtYXQoKTsKLSAgICAgICAgICAgICAgICBtaXNzaW5nQ29sb3JSZW5kZXJUYXJnZXQg
PSBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotI2lmZGVmIF9ERUJVRwotICAgICAgICAgICAgLy8g
V29ya2Fyb3VuZCBmb3IgRGVidWcgU0VUU0hBREVSUkVTT1VSQ0VTX0hBWkFSRCBEM0QxMSB3YXJu
aW5ncwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgdmVydGV4U2VyaWFsSW5kZXggPSAw
OyB2ZXJ0ZXhTZXJpYWxJbmRleCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRV
UkVfSU1BR0VfVU5JVFM7IHZlcnRleFNlcmlhbEluZGV4KyspCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyLT5nZXRUZXh0dXJlU2VyaWFsKCkgIT0gMCAmJiBt
Q3VyVmVydGV4VGV4dHVyZVNlcmlhbHNbdmVydGV4U2VyaWFsSW5kZXhdID09IGNvbG9yYnVmZmVy
LT5nZXRUZXh0dXJlU2VyaWFsKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBzZXRUZXh0dXJlKGdsOjpTQU1QTEVSX1ZFUlRFWCwgdmVydGV4U2VyaWFsSW5kZXgsIE5V
TEwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgcGl4ZWxTZXJpYWxJbmRleCA9IDA7IHBpeGVsU2VyaWFsSW5kZXggPCBn
bDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IHBpeGVsU2VyaWFsSW5kZXgrKykKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29sb3JidWZmZXItPmdldFRleHR1cmVTZXJpYWwo
KSAhPSAwICYmIG1DdXJQaXhlbFRleHR1cmVTZXJpYWxzW3BpeGVsU2VyaWFsSW5kZXhdID09IGNv
bG9yYnVmZmVyLT5nZXRUZXh0dXJlU2VyaWFsKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBzZXRUZXh0dXJlKGdsOjpTQU1QTEVSX1BJWEVMLCBwaXhlbFNlcmlhbElu
ZGV4LCBOVUxMKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIC8vIEdldCB0aGUgZGVwdGggc3RlbmNpbCByZW5kZXIgYnVm
ZmVyIGFuZCBzZXJpYWxzCi0gICAgZ2w6OlJlbmRlcmJ1ZmZlciAqZGVwdGhTdGVuY2lsID0gTlVM
TDsKLSAgICB1bnNpZ25lZCBpbnQgZGVwdGhidWZmZXJTZXJpYWwgPSAwOwotICAgIHVuc2lnbmVk
IGludCBzdGVuY2lsYnVmZmVyU2VyaWFsID0gMDsKLSAgICBpZiAoZnJhbWVidWZmZXItPmdldERl
cHRoYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCi0gICAgewotICAgICAgICBkZXB0aFN0ZW5jaWwg
PSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsKLSAgICAgICAgaWYgKCFkZXB0aFN0ZW5j
aWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVu
ZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAgICAgU2FmZVJlbGVhc2UoZnJhbWVidWZmZXJS
VFZzKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGRl
cHRoYnVmZmVyU2VyaWFsID0gZGVwdGhTdGVuY2lsLT5nZXRTZXJpYWwoKTsKLSAgICB9Ci0gICAg
ZWxzZSBpZiAoZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkK
LSAgICB7Ci0gICAgICAgIGRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVm
ZmVyKCk7Ci0gICAgICAgIGlmICghZGVwdGhTdGVuY2lsKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBFUlIoIkRlcHRoIHN0ZW5jaWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAg
ICAgICAgIFNhZmVSZWxlYXNlKGZyYW1lYnVmZmVyUlRWcyk7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGVuY2lsYnVmZmVyU2VyaWFsID0gZGVwdGhT
dGVuY2lsLT5nZXRTZXJpYWwoKTsKLSAgICB9Ci0KLSAgICAvLyBFeHRyYWN0IHRoZSBkZXB0aCBz
dGVuY2lsIHNpemVzIGFuZCB2aWV3Ci0gICAgdW5zaWduZWQgaW50IGRlcHRoU2l6ZSA9IDA7Ci0g
ICAgdW5zaWduZWQgaW50IHN0ZW5jaWxTaXplID0gMDsKLSAgICBJRDNEMTFEZXB0aFN0ZW5jaWxW
aWV3KiBmcmFtZWJ1ZmZlckRTViA9IE5VTEw7Ci0gICAgaWYgKGRlcHRoU3RlbmNpbCkKLSAgICB7
Ci0gICAgICAgIFJlbmRlclRhcmdldDExICpkZXB0aFN0ZW5jaWxSZW5kZXJUYXJnZXQgPSBSZW5k
ZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGRlcHRoU3RlbmNpbC0+Z2V0RGVwdGhTdGVu
Y2lsKCkpOwotICAgICAgICBpZiAoIWRlcHRoU3RlbmNpbFJlbmRlclRhcmdldCkKLSAgICAgICAg
ewotICAgICAgICAgICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51
bGwuIik7Ci0gICAgICAgICAgICBTYWZlUmVsZWFzZShmcmFtZWJ1ZmZlclJUVnMpOwotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgZnJhbWVidWZmZXJEU1Yg
PSBkZXB0aFN0ZW5jaWxSZW5kZXJUYXJnZXQtPmdldERlcHRoU3RlbmNpbFZpZXcoKTsKLSAgICAg
ICAgaWYgKCFmcmFtZWJ1ZmZlckRTVikKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJkZXB0
aCBzdGVuY2lsIHZpZXcgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAg
IFNhZmVSZWxlYXNlKGZyYW1lYnVmZmVyUlRWcyk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyByZW5kZXIgYnVmZmVyLCB0
aGUgd2lkdGgsIGhlaWdodCBhbmQgZm9ybWF0IHZhbHVlcyBjb21lIGZyb20KLSAgICAgICAgLy8g
dGhlIGRlcHRoIHN0ZW5jaWwKLSAgICAgICAgaWYgKG1pc3NpbmdDb2xvclJlbmRlclRhcmdldCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmVuZGVyVGFyZ2V0V2lkdGggPSBkZXB0aFN0ZW5jaWwt
PmdldFdpZHRoKCk7Ci0gICAgICAgICAgICByZW5kZXJUYXJnZXRIZWlnaHQgPSBkZXB0aFN0ZW5j
aWwtPmdldEhlaWdodCgpOwotICAgICAgICAgICAgcmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZGVwdGhT
dGVuY2lsLT5nZXRBY3R1YWxGb3JtYXQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGRlcHRoU2l6
ZSA9IGRlcHRoU3RlbmNpbC0+Z2V0RGVwdGhTaXplKCk7Ci0gICAgICAgIHN0ZW5jaWxTaXplID0g
ZGVwdGhTdGVuY2lsLT5nZXRTdGVuY2lsU2l6ZSgpOwotICAgIH0KLQotICAgIC8vIEFwcGx5IHRo
ZSByZW5kZXIgdGFyZ2V0IGFuZCBkZXB0aCBzdGVuY2lsCi0gICAgaWYgKCFtUmVuZGVyVGFyZ2V0
RGVzY0luaXRpYWxpemVkIHx8ICFtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgfHwKLSAgICAgICAg
bWVtY21wKHJlbmRlclRhcmdldFNlcmlhbHMsIG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFscywg
c2l6ZW9mKHJlbmRlclRhcmdldFNlcmlhbHMpKSAhPSAwIHx8Ci0gICAgICAgIGRlcHRoYnVmZmVy
U2VyaWFsICE9IG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWwgfHwKLSAgICAgICAgc3RlbmNpbGJ1
ZmZlclNlcmlhbCAhPSBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwpCi0gICAgewotICAgICAg
ICBtRGV2aWNlQ29udGV4dC0+T01TZXRSZW5kZXJUYXJnZXRzKGdldE1heFJlbmRlclRhcmdldHMo
KSwgZnJhbWVidWZmZXJSVFZzLCBmcmFtZWJ1ZmZlckRTVik7Ci0KLSAgICAgICAgbVJlbmRlclRh
cmdldERlc2Mud2lkdGggPSByZW5kZXJUYXJnZXRXaWR0aDsKLSAgICAgICAgbVJlbmRlclRhcmdl
dERlc2MuaGVpZ2h0ID0gcmVuZGVyVGFyZ2V0SGVpZ2h0OwotICAgICAgICBtUmVuZGVyVGFyZ2V0
RGVzYy5mb3JtYXQgPSByZW5kZXJUYXJnZXRGb3JtYXQ7Ci0gICAgICAgIG1Gb3JjZVNldFZpZXdw
b3J0ID0gdHJ1ZTsKLSAgICAgICAgbUZvcmNlU2V0U2Npc3NvciA9IHRydWU7Ci0KLSAgICAgICAg
aWYgKCFtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgfHwgZGVwdGhTaXplICE9IG1DdXJEZXB0aFNp
emUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1DdXJEZXB0aFNpemUgPSBkZXB0aFNpemU7Ci0g
ICAgICAgICAgICBtRm9yY2VTZXRSYXN0ZXJTdGF0ZSA9IHRydWU7Ci0gICAgICAgIH0KLQotICAg
ICAgICBtQ3VyU3RlbmNpbFNpemUgPSBzdGVuY2lsU2l6ZTsKLQotICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBydEluZGV4ID0gMDsgcnRJbmRleCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJB
V19CVUZGRVJTOyBydEluZGV4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1BcHBsaWVkUmVu
ZGVyVGFyZ2V0U2VyaWFsc1tydEluZGV4XSA9IHJlbmRlclRhcmdldFNlcmlhbHNbcnRJbmRleF07
Ci0gICAgICAgIH0KLSAgICAgICAgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCA9IGRlcHRoYnVm
ZmVyU2VyaWFsOwotICAgICAgICBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwgPSBzdGVuY2ls
YnVmZmVyU2VyaWFsOwotICAgICAgICBtUmVuZGVyVGFyZ2V0RGVzY0luaXRpYWxpemVkID0gdHJ1
ZTsKLSAgICAgICAgbURlcHRoU3RlbmNpbEluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotR0xlbnVtIFJlbmRlcmVyMTE6OmFwcGx5VmVydGV4QnVmZmVy
KGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBnbDo6VmVydGV4QXR0cmlidXRlIHZl
cnRleEF0dHJpYnV0ZXNbXSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5z
dGFuY2VzKQotewotICAgIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0cmlidXRlc1tnbDo6TUFYX1ZF
UlRFWF9BVFRSSUJTXTsKLSAgICBHTGVudW0gZXJyID0gbVZlcnRleERhdGFNYW5hZ2VyLT5wcmVw
YXJlVmVydGV4RGF0YSh2ZXJ0ZXhBdHRyaWJ1dGVzLCBwcm9ncmFtQmluYXJ5LCBmaXJzdCwgY291
bnQsIGF0dHJpYnV0ZXMsIGluc3RhbmNlcyk7Ci0gICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1JbnB1dExh
eW91dENhY2hlLmFwcGx5VmVydGV4QnVmZmVycyhhdHRyaWJ1dGVzLCBwcm9ncmFtQmluYXJ5KTsK
LX0KLQotR0xlbnVtIFJlbmRlcmVyMTE6OmFwcGx5SW5kZXhCdWZmZXIoY29uc3QgR0x2b2lkICpp
bmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIEdMc2l6ZWkgY291bnQsIEdM
ZW51bSBtb2RlLCBHTGVudW0gdHlwZSwgVHJhbnNsYXRlZEluZGV4RGF0YSAqaW5kZXhJbmZvKQot
ewotICAgIEdMZW51bSBlcnIgPSBtSW5kZXhEYXRhTWFuYWdlci0+cHJlcGFyZUluZGV4RGF0YSh0
eXBlLCBjb3VudCwgZWxlbWVudEFycmF5QnVmZmVyLCBpbmRpY2VzLCBpbmRleEluZm8pOwotCi0g
ICAgaWYgKGVyciA9PSBHTF9OT19FUlJPUikKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleEluZm8t
PnN0b3JhZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpbmRleEluZm8tPnNlcmlhbCAh
PSBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbCB8fCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0ICE9IG1B
cHBsaWVkSUJPZmZzZXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQnVmZmVyU3Rv
cmFnZTExICpzdG9yYWdlID0gQnVmZmVyU3RvcmFnZTExOjptYWtlQnVmZmVyU3RvcmFnZTExKGlu
ZGV4SW5mby0+c3RvcmFnZSk7Ci0gICAgICAgICAgICAgICAgSW5kZXhCdWZmZXIxMSogaW5kZXhC
dWZmZXIgPSBJbmRleEJ1ZmZlcjExOjptYWtlSW5kZXhCdWZmZXIxMShpbmRleEluZm8tPmluZGV4
QnVmZmVyKTsKLQotICAgICAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldEluZGV4QnVm
ZmVyKHN0b3JhZ2UtPmdldEJ1ZmZlcigpLCBpbmRleEJ1ZmZlci0+Z2V0SW5kZXhGb3JtYXQoKSwg
aW5kZXhJbmZvLT5zdGFydE9mZnNldCk7Ci0KLSAgICAgICAgICAgICAgICBtQXBwbGllZElCU2Vy
aWFsID0gMDsKLSAgICAgICAgICAgICAgICBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbCA9IHN0b3Jh
Z2UtPmdldFNlcmlhbCgpOwotICAgICAgICAgICAgICAgIG1BcHBsaWVkSUJPZmZzZXQgPSBpbmRl
eEluZm8tPnN0YXJ0T2Zmc2V0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVs
c2UgaWYgKGluZGV4SW5mby0+c2VyaWFsICE9IG1BcHBsaWVkSUJTZXJpYWwgfHwgaW5kZXhJbmZv
LT5zdGFydE9mZnNldCAhPSBtQXBwbGllZElCT2Zmc2V0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBJbmRleEJ1ZmZlcjExKiBpbmRleEJ1ZmZlciA9IEluZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1
ZmZlcjExKGluZGV4SW5mby0+aW5kZXhCdWZmZXIpOwotCi0gICAgICAgICAgICBtRGV2aWNlQ29u
dGV4dC0+SUFTZXRJbmRleEJ1ZmZlcihpbmRleEJ1ZmZlci0+Z2V0QnVmZmVyKCksIGluZGV4QnVm
ZmVyLT5nZXRJbmRleEZvcm1hdCgpLCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0KTsKLQotICAgICAg
ICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IGluZGV4SW5mby0+c2VyaWFsOwotICAgICAgICAgICAg
bUFwcGxpZWRTdG9yYWdlSUJTZXJpYWwgPSAwOwotICAgICAgICAgICAgbUFwcGxpZWRJQk9mZnNl
dCA9IGluZGV4SW5mby0+c3RhcnRPZmZzZXQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1
cm4gZXJyOwotfQotCi12b2lkIFJlbmRlcmVyMTE6OmRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdM
c2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQotewotICAgIGlmIChtb2RlID09IEdMX0xJ
TkVfTE9PUCkKLSAgICB7Ci0gICAgICAgIGRyYXdMaW5lTG9vcChjb3VudCwgR0xfTk9ORSwgTlVM
TCwgMCwgTlVMTCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1vZGUgPT0gR0xfVFJJQU5HTEVfRkFO
KQotICAgIHsKLSAgICAgICAgZHJhd1RyaWFuZ2xlRmFuKGNvdW50LCBHTF9OT05FLCBOVUxMLCAw
LCBOVUxMLCBpbnN0YW5jZXMpOwotICAgIH0KLSAgICBlbHNlIGlmIChpbnN0YW5jZXMgPiAwKQot
ICAgIHsKLSAgICAgICAgbURldmljZUNvbnRleHQtPkRyYXdJbnN0YW5jZWQoY291bnQsIGluc3Rh
bmNlcywgMCwgMCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG1EZXZpY2VDb250
ZXh0LT5EcmF3KGNvdW50LCAwKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyZXIxMTo6ZHJhd0Vs
ZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2
b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5z
bGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMpCi17Ci0gICAgaWYg
KG1vZGUgPT0gR0xfTElORV9MT09QKQotICAgIHsKLSAgICAgICAgZHJhd0xpbmVMb29wKGNvdW50
LCB0eXBlLCBpbmRpY2VzLCBpbmRleEluZm8ubWluSW5kZXgsIGVsZW1lbnRBcnJheUJ1ZmZlcik7
Ci0gICAgfQotICAgIGVsc2UgaWYgKG1vZGUgPT0gR0xfVFJJQU5HTEVfRkFOKQotICAgIHsKLSAg
ICAgICAgZHJhd1RyaWFuZ2xlRmFuKGNvdW50LCB0eXBlLCBpbmRpY2VzLCBpbmRleEluZm8ubWlu
SW5kZXgsIGVsZW1lbnRBcnJheUJ1ZmZlciwgaW5zdGFuY2VzKTsKLSAgICB9Ci0gICAgZWxzZSBp
ZiAoaW5zdGFuY2VzID4gMCkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5EcmF3SW5k
ZXhlZEluc3RhbmNlZChjb3VudCwgaW5zdGFuY2VzLCAwLCAtc3RhdGljX2Nhc3Q8aW50PihpbmRl
eEluZm8ubWluSW5kZXgpLCAwKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgbURl
dmljZUNvbnRleHQtPkRyYXdJbmRleGVkKGNvdW50LCAwLCAtc3RhdGljX2Nhc3Q8aW50PihpbmRl
eEluZm8ubWluSW5kZXgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyZXIxMTo6ZHJhd0xpbmVM
b29wKEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGlu
dCBtaW5JbmRleCwgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyKQotewotICAgIC8vIEdl
dCB0aGUgcmF3IGluZGljZXMgZm9yIGFuIGluZGV4ZWQgZHJhdwotICAgIGlmICh0eXBlICE9IEdM
X05PTkUgJiYgZWxlbWVudEFycmF5QnVmZmVyKQotICAgIHsKLSAgICAgICAgZ2w6OkJ1ZmZlciAq
aW5kZXhCdWZmZXIgPSBlbGVtZW50QXJyYXlCdWZmZXI7Ci0gICAgICAgIEJ1ZmZlclN0b3JhZ2Ug
KnN0b3JhZ2UgPSBpbmRleEJ1ZmZlci0+Z2V0U3RvcmFnZSgpOwotICAgICAgICBpbnRwdHJfdCBv
ZmZzZXQgPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmRpY2VzKTsKLSAgICAgICAgaW5k
aWNlcyA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihzdG9yYWdlLT5nZXREYXRhKCkpICsg
b2Zmc2V0OwotICAgIH0KLQotICAgIGlmICghbUxpbmVMb29wSUIpCi0gICAgewotICAgICAgICBt
TGluZUxvb3BJQiA9IG5ldyBTdHJlYW1pbmdJbmRleEJ1ZmZlckludGVyZmFjZSh0aGlzKTsKLSAg
ICAgICAgaWYgKCFtTGluZUxvb3BJQi0+cmVzZXJ2ZUJ1ZmZlclNwYWNlKElOSVRJQUxfSU5ERVhf
QlVGRkVSX1NJWkUsIEdMX1VOU0lHTkVEX0lOVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRl
bGV0ZSBtTGluZUxvb3BJQjsKLSAgICAgICAgICAgIG1MaW5lTG9vcElCID0gTlVMTDsKLQotICAg
ICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGEgMzItYml0IGxvb3BpbmcgaW5kZXggYnVm
ZmVyIGZvciBHTF9MSU5FX0xPT1AuIik7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQ2hlY2tlZCBieSBS
ZW5kZXJlcjExOjphcHBseVByaW1pdGl2ZVR5cGUKLSAgICBBU1NFUlQoY291bnQgPj0gMCk7Ci0K
LSAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihjb3VudCkgKyAxID4gKHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLyBzaXplb2YodW5zaWduZWQgaW50KSkp
Ci0gICAgewotICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSAzMi1iaXQgbG9vcGluZyBp
bmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUCwgdG9vIG1hbnkgaW5kaWNlcyByZXF1aXJlZC4i
KTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0K
LSAgICBjb25zdCB1bnNpZ25lZCBpbnQgc3BhY2VOZWVkZWQgPSAoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgaW50Pihjb3VudCkgKyAxKSAqIHNpemVvZih1bnNpZ25lZCBpbnQpOwotICAgIGlmICghbUxp
bmVMb29wSUItPnJlc2VydmVCdWZmZXJTcGFjZShzcGFjZU5lZWRlZCwgR0xfVU5TSUdORURfSU5U
KSkKLSAgICB7Ci0gICAgICAgIEVSUigiQ291bGQgbm90IHJlc2VydmUgZW5vdWdoIHNwYWNlIGlu
IGxvb3BpbmcgaW5kZXggYnVmZmVyIGZvciBHTF9MSU5FX0xPT1AuIik7Ci0gICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotCi0gICAgdm9pZCogbWFwcGVk
TWVtb3J5ID0gTlVMTDsKLSAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0OwotICAgIGlmICghbUxpbmVM
b29wSUItPm1hcEJ1ZmZlcihzcGFjZU5lZWRlZCwgJm1hcHBlZE1lbW9yeSwgJm9mZnNldCkpCi0g
ICAgewotICAgICAgICBFUlIoIkNvdWxkIG5vdCBtYXAgaW5kZXggYnVmZmVyIGZvciBHTF9MSU5F
X0xPT1AuIik7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgfQotCi0gICAgdW5zaWduZWQgaW50ICpkYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZCBpbnQqPihtYXBwZWRNZW1vcnkpOwotICAgIHVuc2lnbmVkIGludCBpbmRleEJ1ZmZlck9mZnNl
dCA9IG9mZnNldDsKLQotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX05P
TkU6ICAgLy8gTm9uLWluZGV4ZWQgZHJhdwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRhdGFbaV0gPSBpOwotICAgICAgICB9
Ci0gICAgICAgIGRhdGFbY291bnRdID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykK
LSAgICAgICAgewotICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5
dGUqPihpbmRpY2VzKVtpXTsKLSAgICAgICAgfQotICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRp
Y19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKVswXTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxj
b25zdCBHTHVzaG9ydCo+KGluZGljZXMpW2ldOwotICAgICAgICB9Ci0gICAgICAgIGRhdGFbY291
bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVswXTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKLSAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkYXRhW2ldID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgR0x1aW50Kj4oaW5kaWNlcylbaV07Ci0gICAgICAgIH0KLSAgICAgICAg
ZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVswXTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAg
IGlmICghbUxpbmVMb29wSUItPnVubWFwQnVmZmVyKCkpCi0gICAgewotICAgICAgICBFUlIoIkNv
dWxkIG5vdCB1bm1hcCBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKLSAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICBpZiAobUFw
cGxpZWRJQlNlcmlhbCAhPSBtTGluZUxvb3BJQi0+Z2V0U2VyaWFsKCkgfHwgbUFwcGxpZWRJQk9m
ZnNldCAhPSBpbmRleEJ1ZmZlck9mZnNldCkKLSAgICB7Ci0gICAgICAgIEluZGV4QnVmZmVyMTEg
KmluZGV4QnVmZmVyID0gSW5kZXhCdWZmZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEobUxpbmVMb29w
SUItPmdldEluZGV4QnVmZmVyKCkpOwotCi0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldElu
ZGV4QnVmZmVyKGluZGV4QnVmZmVyLT5nZXRCdWZmZXIoKSwgaW5kZXhCdWZmZXItPmdldEluZGV4
Rm9ybWF0KCksIGluZGV4QnVmZmVyT2Zmc2V0KTsKLSAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9
IG1MaW5lTG9vcElCLT5nZXRTZXJpYWwoKTsKLSAgICAgICAgbUFwcGxpZWRTdG9yYWdlSUJTZXJp
YWwgPSAwOwotICAgICAgICBtQXBwbGllZElCT2Zmc2V0ID0gaW5kZXhCdWZmZXJPZmZzZXQ7Ci0g
ICAgfQotCi0gICAgbURldmljZUNvbnRleHQtPkRyYXdJbmRleGVkKGNvdW50ICsgMSwgMCwgLW1p
bkluZGV4KTsKLX0KLQotdm9pZCBSZW5kZXJlcjExOjpkcmF3VHJpYW5nbGVGYW4oR0xzaXplaSBj
b3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgaW50IG1pbkluZGV4LCBn
bDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGludCBpbnN0YW5jZXMpCi17Ci0gICAgLy8g
R2V0IHRoZSByYXcgaW5kaWNlcyBmb3IgYW4gaW5kZXhlZCBkcmF3Ci0gICAgaWYgKHR5cGUgIT0g
R0xfTk9ORSAmJiBlbGVtZW50QXJyYXlCdWZmZXIpCi0gICAgewotICAgICAgICBnbDo6QnVmZmVy
ICppbmRleEJ1ZmZlciA9IGVsZW1lbnRBcnJheUJ1ZmZlcjsKLSAgICAgICAgQnVmZmVyU3RvcmFn
ZSAqc3RvcmFnZSA9IGluZGV4QnVmZmVyLT5nZXRTdG9yYWdlKCk7Ci0gICAgICAgIGludHB0cl90
IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZGljZXMpOwotICAgICAgICBp
bmRpY2VzID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KHN0b3JhZ2UtPmdldERhdGEoKSkg
KyBvZmZzZXQ7Ci0gICAgfQotCi0gICAgaWYgKCFtVHJpYW5nbGVGYW5JQikKLSAgICB7Ci0gICAg
ICAgIG1UcmlhbmdsZUZhbklCID0gbmV3IFN0cmVhbWluZ0luZGV4QnVmZmVySW50ZXJmYWNlKHRo
aXMpOwotICAgICAgICBpZiAoIW1UcmlhbmdsZUZhbklCLT5yZXNlcnZlQnVmZmVyU3BhY2UoSU5J
VElBTF9JTkRFWF9CVUZGRVJfU0laRSwgR0xfVU5TSUdORURfSU5UKSkKLSAgICAgICAgewotICAg
ICAgICAgICAgZGVsZXRlIG1UcmlhbmdsZUZhbklCOwotICAgICAgICAgICAgbVRyaWFuZ2xlRmFu
SUIgPSBOVUxMOwotCi0gICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSBzY3JhdGNo
IGluZGV4IGJ1ZmZlciBmb3IgR0xfVFJJQU5HTEVfRkFOLiIpOwotICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8v
IENoZWNrZWQgYnkgUmVuZGVyZXIxMTo6YXBwbHlQcmltaXRpdmVUeXBlCi0gICAgQVNTRVJUKGNv
dW50ID49IDMpOwotCi0gICAgY29uc3QgdW5zaWduZWQgaW50IG51bVRyaXMgPSBjb3VudCAtIDI7
Ci0KLSAgICBpZiAobnVtVHJpcyA+IChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46
Om1heCgpIC8gKHNpemVvZih1bnNpZ25lZCBpbnQpICogMykpKQotICAgIHsKLSAgICAgICAgRVJS
KCJDb3VsZCBub3QgY3JlYXRlIGEgc2NyYXRjaCBpbmRleCBidWZmZXIgZm9yIEdMX1RSSUFOR0xF
X0ZBTiwgdG9vIG1hbnkgaW5kaWNlcyByZXF1aXJlZC4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBpbnQg
c3BhY2VOZWVkZWQgPSAobnVtVHJpcyAqIDMpICogc2l6ZW9mKHVuc2lnbmVkIGludCk7Ci0gICAg
aWYgKCFtVHJpYW5nbGVGYW5JQi0+cmVzZXJ2ZUJ1ZmZlclNwYWNlKHNwYWNlTmVlZGVkLCBHTF9V
TlNJR05FRF9JTlQpKQotICAgIHsKLSAgICAgICAgRVJSKCJDb3VsZCBub3QgcmVzZXJ2ZSBlbm91
Z2ggc3BhY2UgaW4gc2NyYXRjaCBpbmRleCBidWZmZXIgZm9yIEdMX1RSSUFOR0xFX0ZBTi4iKTsK
LSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAg
ICB2b2lkKiBtYXBwZWRNZW1vcnkgPSBOVUxMOwotICAgIHVuc2lnbmVkIGludCBvZmZzZXQ7Ci0g
ICAgaWYgKCFtVHJpYW5nbGVGYW5JQi0+bWFwQnVmZmVyKHNwYWNlTmVlZGVkLCAmbWFwcGVkTWVt
b3J5LCAmb2Zmc2V0KSkKLSAgICB7Ci0gICAgICAgIEVSUigiQ291bGQgbm90IG1hcCBzY3JhdGNo
IGluZGV4IGJ1ZmZlciBmb3IgR0xfVFJJQU5HTEVfRkFOLiIpOwotICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGludCAqZGF0
YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4obWFwcGVkTWVtb3J5KTsKLSAgICB1
bnNpZ25lZCBpbnQgaW5kZXhCdWZmZXJPZmZzZXQgPSBvZmZzZXQ7Ci0KLSAgICBzd2l0Y2ggKHR5
cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9OT05FOiAgIC8vIE5vbi1pbmRleGVkIGRyYXcKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1UcmlzOyBpKyspCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGRhdGFbaSozICsgMF0gPSAwOwotICAgICAgICAgICAgZGF0YVtpKjMg
KyAxXSA9IGkgKyAxOwotICAgICAgICAgICAgZGF0YVtpKjMgKyAyXSA9IGkgKyAyOwotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVRyaXM7IGkrKykKLSAgICAgICAgewot
ICAgICAgICAgICAgZGF0YVtpKjMgKyAwXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihp
bmRpY2VzKVswXTsKLSAgICAgICAgICAgIGRhdGFbaSozICsgMV0gPSBzdGF0aWNfY2FzdDxjb25z
dCBHTHVieXRlKj4oaW5kaWNlcylbaSArIDFdOwotICAgICAgICAgICAgZGF0YVtpKjMgKyAyXSA9
IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKVtpICsgMl07Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVRyaXM7IGkrKykKLSAgICAgICAgewotICAg
ICAgICAgICAgZGF0YVtpKjMgKyAwXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4oaW5k
aWNlcylbMF07Ci0gICAgICAgICAgICBkYXRhW2kqMyArIDFdID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
R0x1c2hvcnQqPihpbmRpY2VzKVtpICsgMV07Ci0gICAgICAgICAgICBkYXRhW2kqMyArIDJdID0g
c3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVtpICsgMl07Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1UcmlzOyBpKyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGRhdGFbaSozICsgMF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2Vz
KVswXTsKLSAgICAgICAgICAgIGRhdGFbaSozICsgMV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVp
bnQqPihpbmRpY2VzKVtpICsgMV07Ci0gICAgICAgICAgICBkYXRhW2kqMyArIDJdID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgR0x1aW50Kj4oaW5kaWNlcylbaSArIDJdOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBpZiAo
IW1UcmlhbmdsZUZhbklCLT51bm1hcEJ1ZmZlcigpKQotICAgIHsKLSAgICAgICAgRVJSKCJDb3Vs
ZCBub3QgdW5tYXAgc2NyYXRjaCBpbmRleCBidWZmZXIgZm9yIEdMX1RSSUFOR0xFX0ZBTi4iKTsK
LSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAg
ICBpZiAobUFwcGxpZWRJQlNlcmlhbCAhPSBtVHJpYW5nbGVGYW5JQi0+Z2V0U2VyaWFsKCkgfHwg
bUFwcGxpZWRJQk9mZnNldCAhPSBpbmRleEJ1ZmZlck9mZnNldCkKLSAgICB7Ci0gICAgICAgIElu
ZGV4QnVmZmVyMTEgKmluZGV4QnVmZmVyID0gSW5kZXhCdWZmZXIxMTo6bWFrZUluZGV4QnVmZmVy
MTEobVRyaWFuZ2xlRmFuSUItPmdldEluZGV4QnVmZmVyKCkpOwotCi0gICAgICAgIG1EZXZpY2VD
b250ZXh0LT5JQVNldEluZGV4QnVmZmVyKGluZGV4QnVmZmVyLT5nZXRCdWZmZXIoKSwgaW5kZXhC
dWZmZXItPmdldEluZGV4Rm9ybWF0KCksIGluZGV4QnVmZmVyT2Zmc2V0KTsKLSAgICAgICAgbUFw
cGxpZWRJQlNlcmlhbCA9IG1UcmlhbmdsZUZhbklCLT5nZXRTZXJpYWwoKTsKLSAgICAgICAgbUFw
cGxpZWRTdG9yYWdlSUJTZXJpYWwgPSAwOwotICAgICAgICBtQXBwbGllZElCT2Zmc2V0ID0gaW5k
ZXhCdWZmZXJPZmZzZXQ7Ci0gICAgfQotCi0gICAgaWYgKGluc3RhbmNlcyA+IDApCi0gICAgewot
ICAgICAgICBtRGV2aWNlQ29udGV4dC0+RHJhd0luZGV4ZWRJbnN0YW5jZWQobnVtVHJpcyAqIDMs
IGluc3RhbmNlcywgMCwgLW1pbkluZGV4LCAwKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAg
ICAgICAgbURldmljZUNvbnRleHQtPkRyYXdJbmRleGVkKG51bVRyaXMgKiAzLCAwLCAtbWluSW5k
ZXgpOwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJlcjExOjphcHBseVNoYWRlcnMoZ2w6OlByb2dy
YW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpCi17Ci0gICAgdW5zaWduZWQgaW50IHByb2dyYW1CaW5h
cnlTZXJpYWwgPSBwcm9ncmFtQmluYXJ5LT5nZXRTZXJpYWwoKTsKLSAgICBjb25zdCBib29sIHVw
ZGF0ZVByb2dyYW1TdGF0ZSA9IChwcm9ncmFtQmluYXJ5U2VyaWFsICE9IG1BcHBsaWVkUHJvZ3Jh
bUJpbmFyeVNlcmlhbCk7Ci0KLSAgICBpZiAodXBkYXRlUHJvZ3JhbVN0YXRlKQotICAgIHsKLSAg
ICAgICAgU2hhZGVyRXhlY3V0YWJsZSAqdmVydGV4RXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0VmVy
dGV4RXhlY3V0YWJsZSgpOwotICAgICAgICBTaGFkZXJFeGVjdXRhYmxlICpwaXhlbEV4ZSA9IHBy
b2dyYW1CaW5hcnktPmdldFBpeGVsRXhlY3V0YWJsZSgpOwotCi0gICAgICAgIElEM0QxMVZlcnRl
eFNoYWRlciAqdmVydGV4U2hhZGVyID0gTlVMTDsKLSAgICAgICAgaWYgKHZlcnRleEV4ZSkgdmVy
dGV4U2hhZGVyID0gU2hhZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKHZl
cnRleEV4ZSktPmdldFZlcnRleFNoYWRlcigpOwotCi0gICAgICAgIElEM0QxMVBpeGVsU2hhZGVy
ICpwaXhlbFNoYWRlciA9IE5VTEw7Ci0gICAgICAgIGlmIChwaXhlbEV4ZSkgcGl4ZWxTaGFkZXIg
PSBTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VTaGFkZXJFeGVjdXRhYmxlMTEocGl4ZWxFeGUpLT5n
ZXRQaXhlbFNoYWRlcigpOwotCi0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlcihw
aXhlbFNoYWRlciwgTlVMTCwgMCk7Ci0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5WU1NldFNoYWRl
cih2ZXJ0ZXhTaGFkZXIsIE5VTEwsIDApOwotCi0gICAgICAgIHByb2dyYW1CaW5hcnktPmRpcnR5
QWxsVW5pZm9ybXMoKTsKLQotICAgICAgICBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWwgPSBw
cm9ncmFtQmluYXJ5U2VyaWFsOwotICAgIH0KLQotICAgIC8vIE9ubHkgdXNlIHRoZSBnZW9tZXRy
eSBzaGFkZXIgY3VycmVudGx5IGZvciBwb2ludCBzcHJpdGUgZHJhd2luZwotICAgIGNvbnN0IGJv
b2wgdXNlc0dlb21ldHJ5U2hhZGVyID0gKHByb2dyYW1CaW5hcnktPnVzZXNHZW9tZXRyeVNoYWRl
cigpICYmIG1DdXJSYXN0ZXJTdGF0ZS5wb2ludERyYXdNb2RlKTsKLQotICAgIGlmICh1cGRhdGVQ
cm9ncmFtU3RhdGUgfHwgdXNlc0dlb21ldHJ5U2hhZGVyICE9IG1Jc0dlb21ldHJ5U2hhZGVyQWN0
aXZlKQotICAgIHsKLSAgICAgICAgaWYgKHVzZXNHZW9tZXRyeVNoYWRlcikKLSAgICAgICAgewot
ICAgICAgICAgICAgU2hhZGVyRXhlY3V0YWJsZSAqZ2VvbWV0cnlFeGUgPSBwcm9ncmFtQmluYXJ5
LT5nZXRHZW9tZXRyeUV4ZWN1dGFibGUoKTsKLSAgICAgICAgICAgIElEM0QxMUdlb21ldHJ5U2hh
ZGVyICpnZW9tZXRyeVNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1
dGFibGUxMShnZW9tZXRyeUV4ZSktPmdldEdlb21ldHJ5U2hhZGVyKCk7Ci0gICAgICAgICAgICBt
RGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIoZ2VvbWV0cnlTaGFkZXIsIE5VTEwsIDApOwotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZUNvbnRl
eHQtPkdTU2V0U2hhZGVyKE5VTEwsIE5VTEwsIDApOwotICAgICAgICB9Ci0KLSAgICAgICAgbUlz
R2VvbWV0cnlTaGFkZXJBY3RpdmUgPSB1c2VzR2VvbWV0cnlTaGFkZXI7Ci0gICAgfQotfQotCi12
b2lkIFJlbmRlcmVyMTE6OmFwcGx5VW5pZm9ybXMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1C
aW5hcnksIGdsOjpVbmlmb3JtQXJyYXkgKnVuaWZvcm1BcnJheSkKLXsKLSAgICBTaGFkZXJFeGVj
dXRhYmxlMTEgKnZlcnRleEV4ZWN1dGFibGUgPSBTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VTaGFk
ZXJFeGVjdXRhYmxlMTEocHJvZ3JhbUJpbmFyeS0+Z2V0VmVydGV4RXhlY3V0YWJsZSgpKTsKLSAg
ICBTaGFkZXJFeGVjdXRhYmxlMTEgKnBpeGVsRXhlY3V0YWJsZSA9IFNoYWRlckV4ZWN1dGFibGUx
MTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShwcm9ncmFtQmluYXJ5LT5nZXRQaXhlbEV4ZWN1dGFi
bGUoKSk7Ci0KLSAgICB1bnNpZ25lZCBpbnQgdG90YWxSZWdpc3RlckNvdW50VlMgPSAwOwotICAg
IHVuc2lnbmVkIGludCB0b3RhbFJlZ2lzdGVyQ291bnRQUyA9IDA7Ci0KLSAgICBib29sIHZlcnRl
eFVuaWZvcm1zRGlydHkgPSBmYWxzZTsKLSAgICBib29sIHBpeGVsVW5pZm9ybXNEaXJ0eSA9IGZh
bHNlOwotCi0gICAgZm9yIChnbDo6VW5pZm9ybUFycmF5Ojpjb25zdF9pdGVyYXRvciB1bmlmb3Jt
X2l0ZXJhdG9yID0gdW5pZm9ybUFycmF5LT5iZWdpbigpOyB1bmlmb3JtX2l0ZXJhdG9yICE9IHVu
aWZvcm1BcnJheS0+ZW5kKCk7IHVuaWZvcm1faXRlcmF0b3IrKykKLSAgICB7Ci0gICAgICAgIGNv
bnN0IGdsOjpVbmlmb3JtICp1bmlmb3JtID0gKnVuaWZvcm1faXRlcmF0b3I7Ci0KLSAgICAgICAg
aWYgKHVuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleCA+PSAwKQotICAgICAgICB7Ci0gICAgICAgICAg
ICB0b3RhbFJlZ2lzdGVyQ291bnRWUyArPSB1bmlmb3JtLT5yZWdpc3RlckNvdW50OwotICAgICAg
ICAgICAgdmVydGV4VW5pZm9ybXNEaXJ0eSA9IHZlcnRleFVuaWZvcm1zRGlydHkgfHwgdW5pZm9y
bS0+ZGlydHk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodW5pZm9ybS0+cHNSZWdpc3Rlcklu
ZGV4ID49IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRvdGFsUmVnaXN0ZXJDb3VudFBTICs9
IHVuaWZvcm0tPnJlZ2lzdGVyQ291bnQ7Ci0gICAgICAgICAgICBwaXhlbFVuaWZvcm1zRGlydHkg
PSBwaXhlbFVuaWZvcm1zRGlydHkgfHwgdW5pZm9ybS0+ZGlydHk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBJRDNEMTFCdWZmZXIgKnZlcnRleENvbnN0YW50QnVmZmVyID0gdmVydGV4RXhlY3V0
YWJsZS0+Z2V0Q29uc3RhbnRCdWZmZXIobURldmljZSwgdG90YWxSZWdpc3RlckNvdW50VlMpOwot
ICAgIElEM0QxMUJ1ZmZlciAqcGl4ZWxDb25zdGFudEJ1ZmZlciA9IHBpeGVsRXhlY3V0YWJsZS0+
Z2V0Q29uc3RhbnRCdWZmZXIobURldmljZSwgdG90YWxSZWdpc3RlckNvdW50UFMpOwotCi0gICAg
ZmxvYXQgKCptYXBWUylbNF0gPSBOVUxMOwotICAgIGZsb2F0ICgqbWFwUFMpWzRdID0gTlVMTDsK
LQotICAgIGlmICh0b3RhbFJlZ2lzdGVyQ291bnRWUyA+IDAgJiYgdmVydGV4VW5pZm9ybXNEaXJ0
eSkKLSAgICB7Ci0gICAgICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXAgPSB7MH07Ci0g
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZUNvbnRleHQtPk1hcCh2ZXJ0ZXhDb25zdGFu
dEJ1ZmZlciwgMCwgRDNEMTFfTUFQX1dSSVRFX0RJU0NBUkQsIDAsICZtYXApOwotICAgICAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBtYXBWUyA9IChmbG9hdCgqKVs0XSlt
YXAucERhdGE7Ci0gICAgfQotCi0gICAgaWYgKHRvdGFsUmVnaXN0ZXJDb3VudFBTID4gMCAmJiBw
aXhlbFVuaWZvcm1zRGlydHkpCi0gICAgewotICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VS
Q0UgbWFwID0gezB9OwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2VDb250ZXh0LT5N
YXAocGl4ZWxDb25zdGFudEJ1ZmZlciwgMCwgRDNEMTFfTUFQX1dSSVRFX0RJU0NBUkQsIDAsICZt
YXApOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBtYXBQUyA9
IChmbG9hdCgqKVs0XSltYXAucERhdGE7Ci0gICAgfQotCi0gICAgZm9yIChnbDo6VW5pZm9ybUFy
cmF5OjppdGVyYXRvciB1bmlmb3JtX2l0ZXJhdG9yID0gdW5pZm9ybUFycmF5LT5iZWdpbigpOyB1
bmlmb3JtX2l0ZXJhdG9yICE9IHVuaWZvcm1BcnJheS0+ZW5kKCk7IHVuaWZvcm1faXRlcmF0b3Ir
KykKLSAgICB7Ci0gICAgICAgIGdsOjpVbmlmb3JtICp1bmlmb3JtID0gKnVuaWZvcm1faXRlcmF0
b3I7Ci0KLSAgICAgICAgaWYgKHVuaWZvcm0tPnR5cGUgIT0gIEdMX1NBTVBMRVJfMkQgJiYgdW5p
Zm9ybS0+dHlwZSAhPSBHTF9TQU1QTEVSX0NVQkUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
ICh1bmlmb3JtLT52c1JlZ2lzdGVySW5kZXggPj0gMCAmJiBtYXBWUykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBtZW1jcHkobWFwVlMgKyB1bmlmb3JtLT52c1JlZ2lzdGVySW5kZXgs
IHVuaWZvcm0tPmRhdGEsIHVuaWZvcm0tPnJlZ2lzdGVyQ291bnQgKiBzaXplb2YoZmxvYXRbNF0p
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHVuaWZvcm0tPnBzUmVnaXN0ZXJJ
bmRleCA+PSAwICYmIG1hcFBTKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1lbWNw
eShtYXBQUyArIHVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleCwgdW5pZm9ybS0+ZGF0YSwgdW5pZm9y
bS0+cmVnaXN0ZXJDb3VudCAqIHNpemVvZihmbG9hdFs0XSkpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgdW5pZm9ybS0+ZGlydHkgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBp
ZiAobWFwVlMpCi0gICAgewotICAgICAgICBtRGV2aWNlQ29udGV4dC0+VW5tYXAodmVydGV4Q29u
c3RhbnRCdWZmZXIsIDApOwotICAgIH0KLQotICAgIGlmIChtYXBQUykKLSAgICB7Ci0gICAgICAg
IG1EZXZpY2VDb250ZXh0LT5Vbm1hcChwaXhlbENvbnN0YW50QnVmZmVyLCAwKTsKLSAgICB9Ci0K
LSAgICBpZiAobUN1cnJlbnRWZXJ0ZXhDb25zdGFudEJ1ZmZlciAhPSB2ZXJ0ZXhDb25zdGFudEJ1
ZmZlcikKLSAgICB7Ci0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5WU1NldENvbnN0YW50QnVmZmVy
cygwLCAxLCAmdmVydGV4Q29uc3RhbnRCdWZmZXIpOwotICAgICAgICBtQ3VycmVudFZlcnRleENv
bnN0YW50QnVmZmVyID0gdmVydGV4Q29uc3RhbnRCdWZmZXI7Ci0gICAgfQotCi0gICAgaWYgKG1D
dXJyZW50UGl4ZWxDb25zdGFudEJ1ZmZlciAhPSBwaXhlbENvbnN0YW50QnVmZmVyKQotICAgIHsK
LSAgICAgICAgbURldmljZUNvbnRleHQtPlBTU2V0Q29uc3RhbnRCdWZmZXJzKDAsIDEsICZwaXhl
bENvbnN0YW50QnVmZmVyKTsKLSAgICAgICAgbUN1cnJlbnRQaXhlbENvbnN0YW50QnVmZmVyID0g
cGl4ZWxDb25zdGFudEJ1ZmZlcjsKLSAgICB9Ci0KLSAgICAvLyBEcml2ZXIgdW5pZm9ybXMKLSAg
ICBpZiAoIW1Ecml2ZXJDb25zdGFudEJ1ZmZlclZTKQotICAgIHsKLSAgICAgICAgRDNEMTFfQlVG
RkVSX0RFU0MgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbiA9IHswfTsKLSAgICAgICAgY29uc3Rh
bnRCdWZmZXJEZXNjcmlwdGlvbi5CeXRlV2lkdGggPSBzaXplb2YoZHhfVmVydGV4Q29uc3RhbnRz
KTsKLSAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5Vc2FnZSA9IEQzRDExX1VTQUdF
X0RFRkFVTFQ7Ci0gICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uQmluZEZsYWdzID0g
RDNEMTFfQklORF9DT05TVEFOVF9CVUZGRVI7Ci0gICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3Jp
cHRpb24uQ1BVQWNjZXNzRmxhZ3MgPSAwOwotICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0
aW9uLk1pc2NGbGFncyA9IDA7Ci0gICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uU3Ry
dWN0dXJlQnl0ZVN0cmlkZSA9IDA7Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNl
LT5DcmVhdGVCdWZmZXIoJmNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24sIE5VTEwsICZtRHJpdmVy
Q29uc3RhbnRCdWZmZXJWUyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0K
LSAgICAgICAgbURldmljZUNvbnRleHQtPlZTU2V0Q29uc3RhbnRCdWZmZXJzKDEsIDEsICZtRHJp
dmVyQ29uc3RhbnRCdWZmZXJWUyk7Ci0gICAgfQotCi0gICAgaWYgKCFtRHJpdmVyQ29uc3RhbnRC
dWZmZXJQUykKLSAgICB7Ci0gICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIGNvbnN0YW50QnVmZmVy
RGVzY3JpcHRpb24gPSB7MH07Ci0gICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uQnl0
ZVdpZHRoID0gc2l6ZW9mKGR4X1BpeGVsQ29uc3RhbnRzKTsKLSAgICAgICAgY29uc3RhbnRCdWZm
ZXJEZXNjcmlwdGlvbi5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7Ci0gICAgICAgIGNvbnN0
YW50QnVmZmVyRGVzY3JpcHRpb24uQmluZEZsYWdzID0gRDNEMTFfQklORF9DT05TVEFOVF9CVUZG
RVI7Ci0gICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uQ1BVQWNjZXNzRmxhZ3MgPSAw
OwotICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLk1pc2NGbGFncyA9IDA7Ci0gICAg
ICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uU3RydWN0dXJlQnl0ZVN0cmlkZSA9IDA7Ci0K
LSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVCdWZmZXIoJmNvbnN0YW50
QnVmZmVyRGVzY3JpcHRpb24sIE5VTEwsICZtRHJpdmVyQ29uc3RhbnRCdWZmZXJQUyk7Ci0gICAg
ICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAgbURldmljZUNvbnRleHQt
PlBTU2V0Q29uc3RhbnRCdWZmZXJzKDEsIDEsICZtRHJpdmVyQ29uc3RhbnRCdWZmZXJQUyk7Ci0g
ICAgfQotCi0gICAgaWYgKG1lbWNtcCgmbVZlcnRleENvbnN0YW50cywgJm1BcHBsaWVkVmVydGV4
Q29uc3RhbnRzLCBzaXplb2YoZHhfVmVydGV4Q29uc3RhbnRzKSkgIT0gMCkKLSAgICB7Ci0gICAg
ICAgIG1EZXZpY2VDb250ZXh0LT5VcGRhdGVTdWJyZXNvdXJjZShtRHJpdmVyQ29uc3RhbnRCdWZm
ZXJWUywgMCwgTlVMTCwgJm1WZXJ0ZXhDb25zdGFudHMsIDE2LCAwKTsKLSAgICAgICAgbWVtY3B5
KCZtQXBwbGllZFZlcnRleENvbnN0YW50cywgJm1WZXJ0ZXhDb25zdGFudHMsIHNpemVvZihkeF9W
ZXJ0ZXhDb25zdGFudHMpKTsKLSAgICB9Ci0KLSAgICBpZiAobWVtY21wKCZtUGl4ZWxDb25zdGFu
dHMsICZtQXBwbGllZFBpeGVsQ29uc3RhbnRzLCBzaXplb2YoZHhfUGl4ZWxDb25zdGFudHMpKSAh
PSAwKQotICAgIHsKLSAgICAgICAgbURldmljZUNvbnRleHQtPlVwZGF0ZVN1YnJlc291cmNlKG1E
cml2ZXJDb25zdGFudEJ1ZmZlclBTLCAwLCBOVUxMLCAmbVBpeGVsQ29uc3RhbnRzLCAxNiwgMCk7
Ci0gICAgICAgIG1lbWNweSgmbUFwcGxpZWRQaXhlbENvbnN0YW50cywgJm1QaXhlbENvbnN0YW50
cywgc2l6ZW9mKGR4X1BpeGVsQ29uc3RhbnRzKSk7Ci0gICAgfQotCi0gICAgLy8gbmVlZGVkIGZv
ciB0aGUgcG9pbnQgc3ByaXRlIGdlb21ldHJ5IHNoYWRlcgotICAgIGlmIChtQ3VycmVudEdlb21l
dHJ5Q29uc3RhbnRCdWZmZXIgIT0gbURyaXZlckNvbnN0YW50QnVmZmVyUFMpCi0gICAgewotICAg
ICAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRDb25zdGFudEJ1ZmZlcnMoMCwgMSwgJm1Ecml2ZXJD
b25zdGFudEJ1ZmZlclBTKTsKLSAgICAgICAgbUN1cnJlbnRHZW9tZXRyeUNvbnN0YW50QnVmZmVy
ID0gbURyaXZlckNvbnN0YW50QnVmZmVyUFM7Ci0gICAgfQotfQotCi12b2lkIFJlbmRlcmVyMTE6
OmNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBnbDo6RnJhbWVi
dWZmZXIgKmZyYW1lQnVmZmVyKQotewotICAgICBib29sIGFscGhhVW5tYXNrZWQgPSAoZ2w6Okdl
dEFscGhhU2l6ZShtUmVuZGVyVGFyZ2V0RGVzYy5mb3JtYXQpID09IDApIHx8IGNsZWFyUGFyYW1z
LmNvbG9yTWFza0FscGhhOwotICAgICBib29sIG5lZWRNYXNrZWRDb2xvckNsZWFyID0gKGNsZWFy
UGFyYW1zLm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSAmJgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIShjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQgJiYgY2xlYXJQYXJhbXMu
Y29sb3JNYXNrR3JlZW4gJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xl
YXJQYXJhbXMuY29sb3JNYXNrQmx1ZSAmJiBhbHBoYVVubWFza2VkKTsKLQotICAgICB1bnNpZ25l
ZCBpbnQgc3RlbmNpbFVubWFza2VkID0gMHgwOwotICAgICBpZiAoZnJhbWVCdWZmZXItPmhhc1N0
ZW5jaWwoKSkKLSAgICAgewotICAgICAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxTaXplID0gZ2w6
OkdldFN0ZW5jaWxTaXplKGZyYW1lQnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldEFjdHVh
bEZvcm1hdCgpKTsKLSAgICAgICAgIHN0ZW5jaWxVbm1hc2tlZCA9ICgweDEgPDwgc3RlbmNpbFNp
emUpIC0gMTsKLSAgICAgfQotICAgICBib29sIG5lZWRNYXNrZWRTdGVuY2lsQ2xlYXIgPSAoY2xl
YXJQYXJhbXMubWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkgJiYKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKGNsZWFyUGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2sgJiBzdGVu
Y2lsVW5tYXNrZWQpICE9IHN0ZW5jaWxVbm1hc2tlZDsKLQotICAgICBib29sIG5lZWRTY2lzc29y
ZWRDbGVhciA9IG1TY2lzc29yRW5hYmxlZCAmJiAobUN1clNjaXNzb3IueCA+IDAgfHwgbUN1clNj
aXNzb3IueSA+IDAgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1DdXJTY2lzc29yLnggKyBtQ3VyU2Npc3Nvci53aWR0aCA8IG1SZW5kZXJUYXJn
ZXREZXNjLndpZHRoIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtQ3VyU2Npc3Nvci55ICsgbUN1clNjaXNzb3IuaGVpZ2h0IDwgbVJlbmRlclRh
cmdldERlc2MuaGVpZ2h0KTsKLQotICAgICBpZiAobmVlZE1hc2tlZENvbG9yQ2xlYXIgfHwgbmVl
ZE1hc2tlZFN0ZW5jaWxDbGVhciB8fCBuZWVkU2Npc3NvcmVkQ2xlYXIpCi0gICAgIHsKLSAgICAg
ICAgIG1hc2tlZENsZWFyKGNsZWFyUGFyYW1zLCBmcmFtZUJ1ZmZlci0+dXNpbmdFeHRlbmRlZERy
YXdCdWZmZXJzKCkpOwotICAgICB9Ci0gICAgIGVsc2UKLSAgICAgewotICAgICAgICAgaWYgKGNs
ZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKQotICAgICAgICAgewotICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNo
bWVudCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1l
bnQrKykKLSAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIGlmIChmcmFtZUJ1ZmZlci0+
aXNFbmFibGVkQ29sb3JBdHRhY2htZW50KGNvbG9yQXR0YWNobWVudCkpCi0gICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZl
ck9iamVjdCA9IGZyYW1lQnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQpOwot
ICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlck9iamVjdCkKLSAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclRhcmdldDExICpyZW5k
ZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKHJlbmRlcmJ1ZmZl
ck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFyZW5kZXJUYXJnZXQpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51
bGwuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBJRDNEMTFSZW5kZXJUYXJn
ZXRWaWV3ICpmcmFtZWJ1ZmZlclJUViA9IHJlbmRlclRhcmdldC0+Z2V0UmVuZGVyVGFyZ2V0Vmll
dygpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmcmFtZWJ1ZmZlclJUVikKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUlIoInJl
bmRlciB0YXJnZXQgdmlldyBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgY2xlYXJWYWx1ZXNbNF0gPSB7IGNs
ZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5yZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVl
LmdyZWVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5ibHVlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyUGFyYW1zLmNvbG9y
Q2xlYXJWYWx1ZS5hbHBoYSB9OwotICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZUNvbnRl
eHQtPkNsZWFyUmVuZGVyVGFyZ2V0VmlldyhmcmFtZWJ1ZmZlclJUViwgY2xlYXJWYWx1ZXMpOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9ERVBUSF9CVUZG
RVJfQklUIHx8IGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9
IGZyYW1lQnVmZmVyLT5nZXREZXB0aE9yU3RlbmNpbGJ1ZmZlcigpOwotICAgICAgICAgICAgaWYg
KHJlbmRlcmJ1ZmZlck9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBSZW5k
ZXJUYXJnZXQxMSAqcmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJn
ZXQxMShyZW5kZXJidWZmZXJPYmplY3QtPmdldERlcHRoU3RlbmNpbCgpKTsKLSAgICAgICAgICAg
ICAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIEVSUigicmVuZGVyIHRhcmdldCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwot
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZnJhbWVidWZmZXJEU1YgPSByZW5kZXJU
YXJnZXQtPmdldERlcHRoU3RlbmNpbFZpZXcoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWZyYW1l
YnVmZmVyRFNWKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgRVJSKCJk
ZXB0aCBzdGVuY2lsIHZpZXcgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IFVJTlQgY2xlYXJGbGFncyA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1h
c2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgY2xlYXJGbGFncyB8PSBEM0QxMV9DTEVBUl9ERVBUSDsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JV
RkZFUl9CSVQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjbGVhckZs
YWdzIHw9IEQzRDExX0NMRUFSX1NURU5DSUw7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgZmxvYXQgZGVwdGhDbGVhciA9IGdsOjpjbGFtcDAxKGNsZWFyUGFyYW1zLmRlcHRo
Q2xlYXJWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgVUlOVDggc3RlbmNpbENsZWFyID0gY2xlYXJQ
YXJhbXMuc3RlbmNpbENsZWFyVmFsdWUgJiAweDAwMDAwMEZGOwotCi0gICAgICAgICAgICAgICAg
bURldmljZUNvbnRleHQtPkNsZWFyRGVwdGhTdGVuY2lsVmlldyhmcmFtZWJ1ZmZlckRTViwgY2xl
YXJGbGFncywgZGVwdGhDbGVhciwgc3RlbmNpbENsZWFyKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJlcjExOjptYXNrZWRDbGVhcihjb25zdCBnbDo6
Q2xlYXJQYXJhbWV0ZXJzICZjbGVhclBhcmFtcywgYm9vbCB1c2luZ0V4dGVuZGVkRHJhd0J1ZmZl
cnMpCi17Ci0gICAgSFJFU1VMVCByZXN1bHQ7Ci0KLSAgICBpZiAoIW1DbGVhclJlc291cmNlc0lu
aXRpYWxpemVkKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFtQ2xlYXJWQiAmJiAhbUNsZWFyVlMg
JiYgIW1DbGVhclNpbmdsZVBTICYmICFtQ2xlYXJNdWx0aXBsZVBTICYmICFtQ2xlYXJTY2lzc29y
UlMgJiYgIW1DbGVhck5vU2Npc3NvclJTKTsKLQotICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyB2
YkRlc2M7Ci0gICAgICAgIHZiRGVzYy5CeXRlV2lkdGggPSBzaXplb2YoZDNkMTE6OlBvc2l0aW9u
RGVwdGhDb2xvclZlcnRleCkgKiA0OwotICAgICAgICB2YkRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FH
RV9EWU5BTUlDOwotICAgICAgICB2YkRlc2MuQmluZEZsYWdzID0gRDNEMTFfQklORF9WRVJURVhf
QlVGRkVSOwotICAgICAgICB2YkRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUNDRVNT
X1dSSVRFOwotICAgICAgICB2YkRlc2MuTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgdmJEZXNjLlN0
cnVjdHVyZUJ5dGVTdHJpZGUgPSAwOwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0
ZUJ1ZmZlcigmdmJEZXNjLCBOVUxMLCAmbUNsZWFyVkIpOwotICAgICAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhclZCLCAiUmVu
ZGVyZXIxMSBtYXNrZWQgY2xlYXIgdmVydGV4IGJ1ZmZlciIpOwotCi0gICAgICAgIEQzRDExX0lO
UFVUX0VMRU1FTlRfREVTQyBxdWFkTGF5b3V0W10gPQotICAgICAgICB7Ci0gICAgICAgICAgICB7
ICJQT1NJVElPTiIsIDAsIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCwgICAgMCwgIDAsIEQz
RDExX0lOUFVUX1BFUl9WRVJURVhfREFUQSwgMCB9LAotICAgICAgICAgICAgeyAiQ09MT1IiLCAg
ICAwLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsIDAsIDEyLCBEM0QxMV9JTlBVVF9Q
RVJfVkVSVEVYX0RBVEEsIDAgfSwKLSAgICAgICAgfTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2
aWNlLT5DcmVhdGVJbnB1dExheW91dChxdWFkTGF5b3V0LCAyLCBnX1ZTX0NsZWFyLCBzaXplb2Yo
Z19WU19DbGVhciksICZtQ2xlYXJJTCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNsZWFySUwsICJSZW5kZXJlcjExIG1h
c2tlZCBjbGVhciBpbnB1dCBsYXlvdXQiKTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5D
cmVhdGVWZXJ0ZXhTaGFkZXIoZ19WU19DbGVhciwgc2l6ZW9mKGdfVlNfQ2xlYXIpLCBOVUxMLCAm
bUNsZWFyVlMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBk
M2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhclZTLCAiUmVuZGVyZXIxMSBtYXNrZWQgY2xlYXIgdmVy
dGV4IHNoYWRlciIpOwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hh
ZGVyKGdfUFNfQ2xlYXJTaW5nbGUsIHNpemVvZihnX1BTX0NsZWFyU2luZ2xlKSwgTlVMTCwgJm1D
bGVhclNpbmdsZVBTKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAg
ICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ2xlYXJTaW5nbGVQUywgIlJlbmRlcmVyMTEgbWFza2Vk
IGNsZWFyIHBpeGVsIHNoYWRlciAoMSBSVCkiKTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNl
LT5DcmVhdGVQaXhlbFNoYWRlcihnX1BTX0NsZWFyTXVsdGlwbGUsIHNpemVvZihnX1BTX0NsZWFy
TXVsdGlwbGUpLCBOVUxMLCAmbUNsZWFyTXVsdGlwbGVQUyk7Ci0gICAgICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNsZWFyTXVsdGlw
bGVQUywgIlJlbmRlcmVyMTEgbWFza2VkIGNsZWFyIHBpeGVsIHNoYWRlciAoTVJUKSIpOwotCi0g
ICAgICAgIEQzRDExX1JBU1RFUklaRVJfREVTQyByc1NjaXNzb3JEZXNjOwotICAgICAgICByc1Nj
aXNzb3JEZXNjLkZpbGxNb2RlID0gRDNEMTFfRklMTF9TT0xJRDsKLSAgICAgICAgcnNTY2lzc29y
RGVzYy5DdWxsTW9kZSA9IEQzRDExX0NVTExfTk9ORTsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5G
cm9udENvdW50ZXJDbG9ja3dpc2UgPSBGQUxTRTsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5EZXB0
aEJpYXMgPSAwOwotICAgICAgICByc1NjaXNzb3JEZXNjLkRlcHRoQmlhc0NsYW1wID0gMC4wZjsK
LSAgICAgICAgcnNTY2lzc29yRGVzYy5TbG9wZVNjYWxlZERlcHRoQmlhcyA9IDAuMGY7Ci0gICAg
ICAgIHJzU2Npc3NvckRlc2MuRGVwdGhDbGlwRW5hYmxlID0gRkFMU0U7Ci0gICAgICAgIHJzU2Np
c3NvckRlc2MuU2Npc3NvckVuYWJsZSA9IFRSVUU7Ci0gICAgICAgIHJzU2Npc3NvckRlc2MuTXVs
dGlzYW1wbGVFbmFibGUgPSBGQUxTRTsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5BbnRpYWxpYXNl
ZExpbmVFbmFibGUgPSBGQUxTRTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVS
YXN0ZXJpemVyU3RhdGUoJnJzU2Npc3NvckRlc2MsICZtQ2xlYXJTY2lzc29yUlMpOwotICAgICAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1l
KG1DbGVhclNjaXNzb3JSUywgIlJlbmRlcmVyMTEgbWFza2VkIGNsZWFyIHNjaXNzb3IgcmFzdGVy
aXplciBzdGF0ZSIpOwotCi0gICAgICAgIEQzRDExX1JBU1RFUklaRVJfREVTQyByc05vU2Npc3Nv
ckRlc2M7Ci0gICAgICAgIHJzTm9TY2lzc29yRGVzYy5GaWxsTW9kZSA9IEQzRDExX0ZJTExfU09M
SUQ7Ci0gICAgICAgIHJzTm9TY2lzc29yRGVzYy5DdWxsTW9kZSA9IEQzRDExX0NVTExfTk9ORTsK
LSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLkZyb250Q291bnRlckNsb2Nrd2lzZSA9IEZBTFNFOwot
ICAgICAgICByc05vU2Npc3NvckRlc2MuRGVwdGhCaWFzID0gMDsKLSAgICAgICAgcnNOb1NjaXNz
b3JEZXNjLkRlcHRoQmlhc0NsYW1wID0gMC4wZjsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLlNs
b3BlU2NhbGVkRGVwdGhCaWFzID0gMC4wZjsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLkRlcHRo
Q2xpcEVuYWJsZSA9IEZBTFNFOwotICAgICAgICByc05vU2Npc3NvckRlc2MuU2Npc3NvckVuYWJs
ZSA9IEZBTFNFOwotICAgICAgICByc05vU2Npc3NvckRlc2MuTXVsdGlzYW1wbGVFbmFibGUgPSBG
QUxTRTsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLkFudGlhbGlhc2VkTGluZUVuYWJsZSA9IEZB
TFNFOwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVJhc3Rlcml6ZXJTdGF0ZSgm
cnNOb1NjaXNzb3JEZXNjLCAmbUNsZWFyTm9TY2lzc29yUlMpOwotICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhck5vU2Np
c3NvclJTLCAiUmVuZGVyZXIxMSBtYXNrZWQgY2xlYXIgbm8gc2Npc3NvciByYXN0ZXJpemVyIHN0
YXRlIik7Ci0KLSAgICAgICAgbUNsZWFyUmVzb3VyY2VzSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAg
IH0KLQotICAgIC8vIFByZXBhcmUgdGhlIGRlcHRoIHN0ZW5jaWwgc3RhdGUgdG8gd3JpdGUgZGVw
dGggdmFsdWVzIGlmIHRoZSBkZXB0aCBzaG91bGQgYmUgY2xlYXJlZAotICAgIC8vIGFuZCBzdGVu
Y2lsIHZhbHVlcyBpZiB0aGUgc3RlbmNpbCBzaG91bGQgYmUgY2xlYXJlZAotICAgIGdsOjpEZXB0
aFN0ZW5jaWxTdGF0ZSBnbERTU3RhdGU7Ci0gICAgZ2xEU1N0YXRlLmRlcHRoVGVzdCA9IChjbGVh
clBhcmFtcy5tYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCkgIT0gMDsKLSAgICBnbERTU3RhdGUu
ZGVwdGhGdW5jID0gR0xfQUxXQVlTOwotICAgIGdsRFNTdGF0ZS5kZXB0aE1hc2sgPSAoY2xlYXJQ
YXJhbXMubWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpICE9IDA7Ci0gICAgZ2xEU1N0YXRlLnN0
ZW5jaWxUZXN0ID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpICE9
IDA7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxGdW5jID0gR0xfQUxXQVlTOwotICAgIGdsRFNTdGF0
ZS5zdGVuY2lsTWFzayA9IDA7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxGYWlsID0gR0xfUkVQTEFD
RTsKLSAgICBnbERTU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwgPSBHTF9SRVBMQUNFOwotICAg
IGdsRFNTdGF0ZS5zdGVuY2lsUGFzc0RlcHRoUGFzcyA9IEdMX1JFUExBQ0U7Ci0gICAgZ2xEU1N0
YXRlLnN0ZW5jaWxXcml0ZW1hc2sgPSBjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrOwotICAg
IGdsRFNTdGF0ZS5zdGVuY2lsQmFja0Z1bmMgPSBHTF9BTFdBWVM7Ci0gICAgZ2xEU1N0YXRlLnN0
ZW5jaWxCYWNrTWFzayA9IDA7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxCYWNrRmFpbCA9IEdMX1JF
UExBQ0U7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCA9IEdMX1JFUExB
Q0U7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcyA9IEdMX1JFUExBQ0U7
Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrID0gY2xlYXJQYXJhbXMuc3RlbmNp
bFdyaXRlTWFzazsKLQotICAgIGludCBzdGVuY2lsQ2xlYXIgPSBjbGVhclBhcmFtcy5zdGVuY2ls
Q2xlYXJWYWx1ZSAmIDB4MDAwMDAwRkY7Ci0KLSAgICBJRDNEMTFEZXB0aFN0ZW5jaWxTdGF0ZSAq
ZHNTdGF0ZSA9IG1TdGF0ZUNhY2hlLmdldERlcHRoU3RlbmNpbFN0YXRlKGdsRFNTdGF0ZSk7Ci0K
LSAgICAvLyBQcmVwYXJlIHRoZSBibGVuZCBzdGF0ZSB0byB1c2UgYSB3cml0ZSBtYXNrIGlmIHRo
ZSBjb2xvciBidWZmZXIgc2hvdWxkIGJlIGNsZWFyZWQKLSAgICBnbDo6QmxlbmRTdGF0ZSBnbEJs
ZW5kU3RhdGU7Ci0gICAgZ2xCbGVuZFN0YXRlLmJsZW5kID0gZmFsc2U7Ci0gICAgZ2xCbGVuZFN0
YXRlLnNvdXJjZUJsZW5kUkdCID0gR0xfT05FOwotICAgIGdsQmxlbmRTdGF0ZS5kZXN0QmxlbmRS
R0IgPSBHTF9aRVJPOwotICAgIGdsQmxlbmRTdGF0ZS5zb3VyY2VCbGVuZEFscGhhID0gR0xfT05F
OwotICAgIGdsQmxlbmRTdGF0ZS5kZXN0QmxlbmRBbHBoYSA9IEdMX1pFUk87Ci0gICAgZ2xCbGVu
ZFN0YXRlLmJsZW5kRXF1YXRpb25SR0IgPSBHTF9GVU5DX0FERDsKLSAgICBnbEJsZW5kU3RhdGUu
YmxlbmRFcXVhdGlvbkFscGhhID0gR0xfRlVOQ19BREQ7Ci0gICAgZ2xCbGVuZFN0YXRlLmNvbG9y
TWFza1JlZCA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkgPyBjbGVh
clBhcmFtcy5jb2xvck1hc2tSZWQgOiBmYWxzZTsKLSAgICBnbEJsZW5kU3RhdGUuY29sb3JNYXNr
R3JlZW4gPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpID8gY2xlYXJQ
YXJhbXMuY29sb3JNYXNrR3JlZW4gOiBmYWxzZTsKLSAgICBnbEJsZW5kU3RhdGUuY29sb3JNYXNr
Qmx1ZSA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkgPyBjbGVhclBh
cmFtcy5jb2xvck1hc2tCbHVlIDogZmFsc2U7Ci0gICAgZ2xCbGVuZFN0YXRlLmNvbG9yTWFza0Fs
cGhhID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSA/IGNsZWFyUGFy
YW1zLmNvbG9yTWFza0FscGhhIDogZmFsc2U7Ci0gICAgZ2xCbGVuZFN0YXRlLnNhbXBsZUFscGhh
VG9Db3ZlcmFnZSA9IGZhbHNlOwotICAgIGdsQmxlbmRTdGF0ZS5kaXRoZXIgPSBmYWxzZTsKLQot
ICAgIHN0YXRpYyBjb25zdCBmbG9hdCBibGVuZEZhY3RvcnNbNF0gPSB7IDEuMGYsIDEuMGYsIDEu
MGYsIDEuMGYgfTsKLSAgICBzdGF0aWMgY29uc3QgVUlOVCBzYW1wbGVNYXNrID0gMHhGRkZGRkZG
RjsKLQotICAgIElEM0QxMUJsZW5kU3RhdGUgKmJsZW5kU3RhdGUgPSBtU3RhdGVDYWNoZS5nZXRC
bGVuZFN0YXRlKGdsQmxlbmRTdGF0ZSk7Ci0KLSAgICAvLyBTZXQgdGhlIHZlcnRpY2VzCi0gICAg
RDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwotICAgIHJlc3VsdCA9IG1E
ZXZpY2VDb250ZXh0LT5NYXAobUNsZWFyVkIsIDAsIEQzRDExX01BUF9XUklURV9ESVNDQVJELCAw
LCAmbWFwcGVkUmVzb3VyY2UpOwotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAg
ICAgIEVSUigiRmFpbGVkIHRvIG1hcCBtYXNrZWQgY2xlYXIgdmVydGV4IGJ1ZmZlciwgSFJFU1VM
VDogMHglWC4iLCByZXN1bHQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZDNkMTE6
OlBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCAqdmVydGljZXMgPSByZWludGVycHJldF9jYXN0PGQz
ZDExOjpQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgqPihtYXBwZWRSZXNvdXJjZS5wRGF0YSk7Ci0K
LSAgICBmbG9hdCBkZXB0aENsZWFyID0gZ2w6OmNsYW1wMDEoY2xlYXJQYXJhbXMuZGVwdGhDbGVh
clZhbHVlKTsKLSAgICBkM2QxMTo6U2V0UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KCZ2ZXJ0aWNl
c1swXSwgLTEuMGYsICAxLjBmLCBkZXB0aENsZWFyLCBjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFs
dWUpOwotICAgIGQzZDExOjpTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgoJnZlcnRpY2VzWzFd
LCAtMS4wZiwgLTEuMGYsIGRlcHRoQ2xlYXIsIGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZSk7
Ci0gICAgZDNkMTE6OlNldFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCgmdmVydGljZXNbMl0sICAx
LjBmLCAgMS4wZiwgZGVwdGhDbGVhciwgY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlKTsKLSAg
ICBkM2QxMTo6U2V0UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KCZ2ZXJ0aWNlc1szXSwgIDEuMGYs
IC0xLjBmLCBkZXB0aENsZWFyLCBjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUpOwotCi0gICAg
bURldmljZUNvbnRleHQtPlVubWFwKG1DbGVhclZCLCAwKTsKLQotICAgIC8vIEFwcGx5IHN0YXRl
Ci0gICAgbURldmljZUNvbnRleHQtPk9NU2V0QmxlbmRTdGF0ZShibGVuZFN0YXRlLCBibGVuZEZh
Y3RvcnMsIHNhbXBsZU1hc2spOwotICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldERlcHRoU3RlbmNp
bFN0YXRlKGRzU3RhdGUsIHN0ZW5jaWxDbGVhcik7Ci0gICAgbURldmljZUNvbnRleHQtPlJTU2V0
U3RhdGUobVNjaXNzb3JFbmFibGVkID8gbUNsZWFyU2Npc3NvclJTIDogbUNsZWFyTm9TY2lzc29y
UlMpOwotCi0gICAgLy8gQXBwbHkgc2hhZGVycwotICAgIElEM0QxMVBpeGVsU2hhZGVyICpwaXhl
bFNoYWRlciA9IHVzaW5nRXh0ZW5kZWREcmF3QnVmZmVycyA/IG1DbGVhck11bHRpcGxlUFMgOiBt
Q2xlYXJTaW5nbGVQUzsKLQotICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldElucHV0TGF5b3V0KG1D
bGVhcklMKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+VlNTZXRTaGFkZXIobUNsZWFyVlMsIE5VTEws
IDApOwotICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlcihwaXhlbFNoYWRlciwgTlVMTCwg
MCk7Ci0gICAgbURldmljZUNvbnRleHQtPkdTU2V0U2hhZGVyKE5VTEwsIE5VTEwsIDApOwotCi0g
ICAgLy8gQXBwbHkgdmVydGV4IGJ1ZmZlcgotICAgIHN0YXRpYyBVSU5UIHN0cmlkZSA9IHNpemVv
ZihkM2QxMTo6UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KTsKLSAgICBzdGF0aWMgVUlOVCBzdGFy
dElkeCA9IDA7Ci0gICAgbURldmljZUNvbnRleHQtPklBU2V0VmVydGV4QnVmZmVycygwLCAxLCAm
bUNsZWFyVkIsICZzdHJpZGUsICZzdGFydElkeCk7Ci0gICAgbURldmljZUNvbnRleHQtPklBU2V0
UHJpbWl0aXZlVG9wb2xvZ3koRDNEX1BSSU1JVElWRV9UT1BPTE9HWV9UUklBTkdMRVNUUklQKTsK
LQotICAgIC8vIERyYXcgdGhlIGNsZWFyIHF1YWQKLSAgICBtRGV2aWNlQ29udGV4dC0+RHJhdyg0
LCAwKTsKLQotICAgIC8vIENsZWFuIHVwCi0gICAgbWFya0FsbFN0YXRlRGlydHkoKTsKLX0KLQot
dm9pZCBSZW5kZXJlcjExOjptYXJrQWxsU3RhdGVEaXJ0eSgpCi17Ci0gICAgZm9yICh1bnNpZ25l
ZCBpbnQgcnRJbmRleCA9IDA7IHJ0SW5kZXggPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0RSQVdf
QlVGRkVSUzsgcnRJbmRleCsrKQotICAgIHsKLSAgICAgICAgbUFwcGxpZWRSZW5kZXJUYXJnZXRT
ZXJpYWxzW3J0SW5kZXhdID0gMDsKLSAgICB9Ci0gICAgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlh
bCA9IDA7Ci0gICAgbUFwcGxpZWRTdGVuY2lsYnVmZmVyU2VyaWFsID0gMDsKLSAgICBtRGVwdGhT
dGVuY2lsSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBtUmVuZGVyVGFyZ2V0RGVzY0luaXRpYWxp
emVkID0gZmFsc2U7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElP
Tl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IGkrKykKLSAgICB7Ci0gICAgICAgIG1G
b3JjZVNldFZlcnRleFNhbXBsZXJTdGF0ZXNbaV0gPSB0cnVlOwotICAgICAgICBtQ3VyVmVydGV4
VGV4dHVyZVNlcmlhbHNbaV0gPSAwOwotICAgIH0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGds
OjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgaSsrKQotICAgIHsKLSAgICAgICAgbUZvcmNlU2V0
UGl4ZWxTYW1wbGVyU3RhdGVzW2ldID0gdHJ1ZTsKLSAgICAgICAgbUN1clBpeGVsVGV4dHVyZVNl
cmlhbHNbaV0gPSAwOwotICAgIH0KLQotICAgIG1Gb3JjZVNldEJsZW5kU3RhdGUgPSB0cnVlOwot
ICAgIG1Gb3JjZVNldFJhc3RlclN0YXRlID0gdHJ1ZTsKLSAgICBtRm9yY2VTZXREZXB0aFN0ZW5j
aWxTdGF0ZSA9IHRydWU7Ci0gICAgbUZvcmNlU2V0U2Npc3NvciA9IHRydWU7Ci0gICAgbUZvcmNl
U2V0Vmlld3BvcnQgPSB0cnVlOwotCi0gICAgbUFwcGxpZWRJQlNlcmlhbCA9IDA7Ci0gICAgbUFw
cGxpZWRTdG9yYWdlSUJTZXJpYWwgPSAwOwotICAgIG1BcHBsaWVkSUJPZmZzZXQgPSAwOwotCi0g
ICAgbUFwcGxpZWRQcm9ncmFtQmluYXJ5U2VyaWFsID0gMDsKLSAgICBtZW1zZXQoJm1BcHBsaWVk
VmVydGV4Q29uc3RhbnRzLCAwLCBzaXplb2YoZHhfVmVydGV4Q29uc3RhbnRzKSk7Ci0gICAgbWVt
c2V0KCZtQXBwbGllZFBpeGVsQ29uc3RhbnRzLCAwLCBzaXplb2YoZHhfUGl4ZWxDb25zdGFudHMp
KTsKLQotICAgIG1JbnB1dExheW91dENhY2hlLm1hcmtEaXJ0eSgpOwotCi0gICAgbUN1cnJlbnRW
ZXJ0ZXhDb25zdGFudEJ1ZmZlciA9IE5VTEw7Ci0gICAgbUN1cnJlbnRQaXhlbENvbnN0YW50QnVm
ZmVyID0gTlVMTDsKLSAgICBtQ3VycmVudEdlb21ldHJ5Q29uc3RhbnRCdWZmZXIgPSBOVUxMOwot
Ci0gICAgbUN1cnJlbnRQcmltaXRpdmVUb3BvbG9neSA9IEQzRF9QUklNSVRJVkVfVE9QT0xPR1lf
VU5ERUZJTkVEOwotfQotCi12b2lkIFJlbmRlcmVyMTE6OnJlbGVhc2VEZXZpY2VSZXNvdXJjZXMo
KQotewotICAgIG1TdGF0ZUNhY2hlLmNsZWFyKCk7Ci0gICAgbUlucHV0TGF5b3V0Q2FjaGUuY2xl
YXIoKTsKLQotICAgIGRlbGV0ZSBtVmVydGV4RGF0YU1hbmFnZXI7Ci0gICAgbVZlcnRleERhdGFN
YW5hZ2VyID0gTlVMTDsKLQotICAgIGRlbGV0ZSBtSW5kZXhEYXRhTWFuYWdlcjsKLSAgICBtSW5k
ZXhEYXRhTWFuYWdlciA9IE5VTEw7Ci0KLSAgICBkZWxldGUgbUxpbmVMb29wSUI7Ci0gICAgbUxp
bmVMb29wSUIgPSBOVUxMOwotCi0gICAgZGVsZXRlIG1UcmlhbmdsZUZhbklCOwotICAgIG1Ucmlh
bmdsZUZhbklCID0gTlVMTDsKLQotICAgIFNhZmVSZWxlYXNlKG1Db3B5VkIpOwotICAgIFNhZmVS
ZWxlYXNlKG1Db3B5U2FtcGxlcik7Ci0gICAgU2FmZVJlbGVhc2UobUNvcHlJTCk7Ci0gICAgU2Fm
ZVJlbGVhc2UobUNvcHlJTCk7Ci0gICAgU2FmZVJlbGVhc2UobUNvcHlWUyk7Ci0gICAgU2FmZVJl
bGVhc2UobUNvcHlSR0JBUFMpOwotICAgIFNhZmVSZWxlYXNlKG1Db3B5UkdCUFMpOwotICAgIFNh
ZmVSZWxlYXNlKG1Db3B5THVtUFMpOwotICAgIFNhZmVSZWxlYXNlKG1Db3B5THVtQWxwaGFQUyk7
Ci0KLSAgICBtQ29weVJlc291cmNlc0luaXRpYWxpemVkID0gZmFsc2U7Ci0KLSAgICBTYWZlUmVs
ZWFzZShtQ2xlYXJWQik7Ci0gICAgU2FmZVJlbGVhc2UobUNsZWFySUwpOwotICAgIFNhZmVSZWxl
YXNlKG1DbGVhclZTKTsKLSAgICBTYWZlUmVsZWFzZShtQ2xlYXJTaW5nbGVQUyk7Ci0gICAgU2Fm
ZVJlbGVhc2UobUNsZWFyTXVsdGlwbGVQUyk7Ci0gICAgU2FmZVJlbGVhc2UobUNsZWFyU2Npc3Nv
clJTKTsKLSAgICBTYWZlUmVsZWFzZShtQ2xlYXJOb1NjaXNzb3JSUyk7Ci0KLSAgICBtQ2xlYXJS
ZXNvdXJjZXNJbml0aWFsaXplZCA9IGZhbHNlOwotCi0gICAgU2FmZVJlbGVhc2UobURyaXZlckNv
bnN0YW50QnVmZmVyVlMpOwotICAgIFNhZmVSZWxlYXNlKG1Ecml2ZXJDb25zdGFudEJ1ZmZlclBT
KTsKLSAgICBTYWZlUmVsZWFzZShtU3luY1F1ZXJ5KTsKLX0KLQotdm9pZCBSZW5kZXJlcjExOjpu
b3RpZnlEZXZpY2VMb3N0KCkKLXsKLSAgICBtRGV2aWNlTG9zdCA9IHRydWU7Ci0gICAgbURpc3Bs
YXktPm5vdGlmeURldmljZUxvc3QoKTsKLX0KLQotYm9vbCBSZW5kZXJlcjExOjppc0RldmljZUxv
c3QoKQotewotICAgIHJldHVybiBtRGV2aWNlTG9zdDsKLX0KLQotLy8gc2V0IG5vdGlmeSB0byB0
cnVlIHRvIGJyb2FkY2FzdCBhIG1lc3NhZ2UgdG8gYWxsIGNvbnRleHRzIG9mIHRoZSBkZXZpY2Ug
bG9zcwotYm9vbCBSZW5kZXJlcjExOjp0ZXN0RGV2aWNlTG9zdChib29sIG5vdGlmeSkKLXsKLSAg
ICBib29sIGlzTG9zdCA9IGZhbHNlOwotCi0gICAgLy8gR2V0UmVtb3ZlZFJlYXNvbiBpcyB1c2Vk
IHRvIHRlc3QgaWYgdGhlIGRldmljZSBpcyByZW1vdmVkCi0gICAgSFJFU1VMVCByZXN1bHQgPSBt
RGV2aWNlLT5HZXREZXZpY2VSZW1vdmVkUmVhc29uKCk7Ci0gICAgaXNMb3N0ID0gZDNkMTE6Omlz
RGV2aWNlTG9zdEVycm9yKHJlc3VsdCk7Ci0KLSAgICBpZiAoaXNMb3N0KQotICAgIHsKLSAgICAg
ICAgLy8gTG9nIGVycm9yIGlmIHRoaXMgaXMgYSBuZXcgZGV2aWNlIGxvc3QgZXZlbnQKLSAgICAg
ICAgaWYgKG1EZXZpY2VMb3N0ID09IGZhbHNlKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIo
IlRoZSBEM0QxMSBkZXZpY2Ugd2FzIHJlbW92ZWQ6IDB4JTA4WCIsIHJlc3VsdCk7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBlbnN1cmUgd2Ugbm90ZSB0aGUgZGV2aWNlIGxvc3MgLS0KLSAgICAg
ICAgLy8gd2UnbGwgcHJvYmFibHkgZ2V0IHRoaXMgZG9uZSBhZ2FpbiBieSBub3RpZnlEZXZpY2VM
b3N0Ci0gICAgICAgIC8vIGJ1dCBiZXN0IHRvIHJlbWVtYmVyIGl0IQotICAgICAgICAvLyBOb3Rl
IHRoYXQgd2UgZG9uJ3Qgd2FudCB0byBjbGVhciB0aGUgZGV2aWNlIGxvc3Mgc3RhdHVzIGhlcmUK
LSAgICAgICAgLy8gLS0gdGhpcyBuZWVkcyB0byBiZSBkb25lIGJ5IHJlc2V0RGV2aWNlCi0gICAg
ICAgIG1EZXZpY2VMb3N0ID0gdHJ1ZTsKLSAgICAgICAgaWYgKG5vdGlmeSkKLSAgICAgICAgewot
ICAgICAgICAgICAgbm90aWZ5RGV2aWNlTG9zdCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
cmV0dXJuIGlzTG9zdDsKLX0KLQotYm9vbCBSZW5kZXJlcjExOjp0ZXN0RGV2aWNlUmVzZXR0YWJs
ZSgpCi17Ci0gICAgLy8gZGV0ZXJtaW5lIGlmIHRoZSBkZXZpY2UgaXMgcmVzZXR0YWJsZSBieSBj
cmVhdGluZyBhIGR1bW15IGRldmljZQotICAgIFBGTl9EM0QxMV9DUkVBVEVfREVWSUNFIEQzRDEx
Q3JlYXRlRGV2aWNlID0gKFBGTl9EM0QxMV9DUkVBVEVfREVWSUNFKUdldFByb2NBZGRyZXNzKG1E
M2QxMU1vZHVsZSwgIkQzRDExQ3JlYXRlRGV2aWNlIik7Ci0KLSAgICBpZiAoRDNEMTFDcmVhdGVE
ZXZpY2UgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBEM0RfRkVBVFVSRV9MRVZFTCBmZWF0dXJlTGV2ZWxzW10gPQotICAgIHsKLSAgICAgICAgRDNE
X0ZFQVRVUkVfTEVWRUxfMTFfMCwKLSAgICAgICAgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMSwKLSAg
ICAgICAgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMCwKLSAgICB9OwotCi0gICAgSUQzRDExRGV2aWNl
KiBkdW1teURldmljZTsKLSAgICBEM0RfRkVBVFVSRV9MRVZFTCBkdW1teUZlYXR1cmVMZXZlbDsK
LSAgICBJRDNEMTFEZXZpY2VDb250ZXh0KiBkdW1teUNvbnRleHQ7Ci0KLSAgICBIUkVTVUxUIHJl
c3VsdCA9IEQzRDExQ3JlYXRlRGV2aWNlKE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBEM0RfRFJJVkVSX1RZUEVfSEFSRFdBUkUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgI2lmIGRlZmluZWQoX0RFQlVHKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRDNEMTFfQ1JFQVRFX0RFVklDRV9ERUJVRywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICNlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
I2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlTGV2
ZWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlTaXplKGZl
YXR1cmVMZXZlbHMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNE
MTFfU0RLX1ZFUlNJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
ZHVtbXlEZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZHVt
bXlGZWF0dXJlTGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
ZHVtbXlDb250ZXh0KTsKLQotICAgIGlmICghbURldmljZSB8fCBGQUlMRUQocmVzdWx0KSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBkdW1teUNvbnRleHQtPlJl
bGVhc2UoKTsKLSAgICBkdW1teURldmljZS0+UmVsZWFzZSgpOwotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXZvaWQgUmVuZGVyZXIxMTo6cmVsZWFzZSgpCi17Ci0gICAgcmVsZWFzZURldmljZVJl
c291cmNlcygpOwotCi0gICAgaWYgKG1EeGdpRmFjdG9yeSkKLSAgICB7Ci0gICAgICAgIG1EeGdp
RmFjdG9yeS0+UmVsZWFzZSgpOwotICAgICAgICBtRHhnaUZhY3RvcnkgPSBOVUxMOwotICAgIH0K
LQotICAgIGlmIChtRHhnaUFkYXB0ZXIpCi0gICAgewotICAgICAgICBtRHhnaUFkYXB0ZXItPlJl
bGVhc2UoKTsKLSAgICAgICAgbUR4Z2lBZGFwdGVyID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAo
bURldmljZUNvbnRleHQpCi0gICAgewotICAgICAgICBtRGV2aWNlQ29udGV4dC0+Q2xlYXJTdGF0
ZSgpOwotICAgICAgICBtRGV2aWNlQ29udGV4dC0+Rmx1c2goKTsKLSAgICAgICAgbURldmljZUNv
bnRleHQtPlJlbGVhc2UoKTsKLSAgICAgICAgbURldmljZUNvbnRleHQgPSBOVUxMOwotICAgIH0K
LQotICAgIGlmIChtRGV2aWNlKQotICAgIHsKLSAgICAgICAgbURldmljZS0+UmVsZWFzZSgpOwot
ICAgICAgICBtRGV2aWNlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobUQzZDExTW9kdWxlKQot
ICAgIHsKLSAgICAgICAgRnJlZUxpYnJhcnkobUQzZDExTW9kdWxlKTsKLSAgICAgICAgbUQzZDEx
TW9kdWxlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobUR4Z2lNb2R1bGUpCi0gICAgewotICAg
ICAgICBGcmVlTGlicmFyeShtRHhnaU1vZHVsZSk7Ci0gICAgICAgIG1EeGdpTW9kdWxlID0gTlVM
TDsKLSAgICB9Ci19Ci0KLWJvb2wgUmVuZGVyZXIxMTo6cmVzZXREZXZpY2UoKQotewotICAgIC8v
IHJlY3JlYXRlIGV2ZXJ5dGhpbmcKLSAgICByZWxlYXNlKCk7Ci0gICAgRUdMaW50IHJlc3VsdCA9
IGluaXRpYWxpemUoKTsKLQotICAgIGlmIChyZXN1bHQgIT0gRUdMX1NVQ0NFU1MpCi0gICAgewot
ICAgICAgICBFUlIoIkNvdWxkIG5vdCByZWluaXRpYWxpemUgRDNEMTEgZGV2aWNlOiAlMDhYIiwg
cmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG1EZXZpY2VMb3N0
ID0gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotRFdPUkQgUmVuZGVyZXIxMTo6Z2V0
QWRhcHRlclZlbmRvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1BZGFwdGVyRGVzY3JpcHRpb24u
VmVuZG9ySWQ7Ci19Ci0KLXN0ZDo6c3RyaW5nIFJlbmRlcmVyMTE6OmdldFJlbmRlcmVyRGVzY3Jp
cHRpb24oKSBjb25zdAotewotICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSByZW5kZXJlclN0cmluZzsK
LQotICAgIHJlbmRlcmVyU3RyaW5nIDw8IG1EZXNjcmlwdGlvbjsKLSAgICByZW5kZXJlclN0cmlu
ZyA8PCAiIERpcmVjdDNEMTEiOwotCi0gICAgcmVuZGVyZXJTdHJpbmcgPDwgIiB2c18iIDw8IGdl
dE1ham9yU2hhZGVyTW9kZWwoKSA8PCAiXyIgPDwgZ2V0TWlub3JTaGFkZXJNb2RlbCgpOwotICAg
IHJlbmRlcmVyU3RyaW5nIDw8ICIgcHNfIiA8PCBnZXRNYWpvclNoYWRlck1vZGVsKCkgPDwgIl8i
IDw8IGdldE1pbm9yU2hhZGVyTW9kZWwoKTsKLQotICAgIHJldHVybiByZW5kZXJlclN0cmluZy5z
dHIoKTsKLX0KLQotR1VJRCBSZW5kZXJlcjExOjpnZXRBZGFwdGVySWRlbnRpZmllcigpIGNvbnN0
Ci17Ci0gICAgLy8gVXNlIHRoZSBhZGFwdGVyIExVSUQgYXMgb3VyIGFkYXB0ZXIgSUQKLSAgICAv
LyBUaGlzIG51bWJlciBpcyBsb2NhbCB0byBhIG1hY2hpbmUgaXMgb25seSBndWFyYW50ZWVkIHRv
IGJlIHVuaXF1ZSBiZXR3ZWVuIHJlc3RhcnRzCi0gICAgTUVUQV9BU1NFUlQoc2l6ZW9mKExVSUQp
IDw9IHNpemVvZihHVUlEKSk7Ci0gICAgR1VJRCBhZGFwdGVySWQgPSB7MH07Ci0gICAgbWVtY3B5
KCZhZGFwdGVySWQsICZtQWRhcHRlckRlc2NyaXB0aW9uLkFkYXB0ZXJMdWlkLCBzaXplb2YoTFVJ
RCkpOwotICAgIHJldHVybiBhZGFwdGVySWQ7Ci19Ci0KLWJvb2wgUmVuZGVyZXIxMTo6Z2V0QkdS
QVRleHR1cmVTdXBwb3J0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUJHUkFUZXh0dXJlU3VwcG9y
dDsKLX0KLQotYm9vbCBSZW5kZXJlcjExOjpnZXREWFQxVGV4dHVyZVN1cHBvcnQoKQotewotICAg
IHJldHVybiBtRFhUMVRleHR1cmVTdXBwb3J0OwotfQotCi1ib29sIFJlbmRlcmVyMTE6OmdldERY
VDNUZXh0dXJlU3VwcG9ydCgpCi17Ci0gICAgcmV0dXJuIG1EWFQzVGV4dHVyZVN1cHBvcnQ7Ci19
Ci0KLWJvb2wgUmVuZGVyZXIxMTo6Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCkKLXsKLSAgICByZXR1
cm4gbURYVDVUZXh0dXJlU3VwcG9ydDsKLX0KLQotYm9vbCBSZW5kZXJlcjExOjpnZXREZXB0aFRl
eHR1cmVTdXBwb3J0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbURlcHRoVGV4dHVyZVN1cHBvcnQ7
Ci19Ci0KLWJvb2wgUmVuZGVyZXIxMTo6Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJvb2wgKmZp
bHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSkKLXsKLSAgICAqcmVuZGVyYWJsZSA9IG1GbG9hdDMy
UmVuZGVyU3VwcG9ydDsKLSAgICAqZmlsdGVyaW5nID0gbUZsb2F0MzJGaWx0ZXJTdXBwb3J0Owot
ICAgIHJldHVybiBtRmxvYXQzMlRleHR1cmVTdXBwb3J0OwotfQotCi1ib29sIFJlbmRlcmVyMTE6
OmdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFi
bGUpCi17Ci0gICAgKnJlbmRlcmFibGUgPSBtRmxvYXQxNlJlbmRlclN1cHBvcnQ7Ci0gICAgKmZp
bHRlcmluZyA9IG1GbG9hdDE2RmlsdGVyU3VwcG9ydDsKLSAgICByZXR1cm4gbUZsb2F0MTZUZXh0
dXJlU3VwcG9ydDsKLX0KLQotYm9vbCBSZW5kZXJlcjExOjpnZXRMdW1pbmFuY2VUZXh0dXJlU3Vw
cG9ydCgpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlcmVyMTE6OmdldEx1
bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Ym9vbCBSZW5kZXJlcjExOjpnZXRUZXh0dXJlRmlsdGVyQW5pc290cm9weVN1cHBvcnQoKSBjb25z
dAotewotICAgIHJldHVybiB0cnVlOwotfQotCi1mbG9hdCBSZW5kZXJlcjExOjpnZXRUZXh0dXJl
TWF4QW5pc290cm9weSgpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQotICAg
IHsKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDoKLSAgICAgICAgcmV0dXJuIEQz
RDExX01BWF9NQVhBTklTT1RST1BZOwotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8x
OgotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgotICAgICAgICByZXR1cm4gRDNE
MTBfTUFYX01BWEFOSVNPVFJPUFk7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLWJvb2wgUmVuZGVyZXIxMTo6Z2V0RXZlbnRRdWVy
eVN1cHBvcnQoKQotewotICAgIHJldHVybiB0cnVlOwotfQotCi1SYW5nZSBSZW5kZXJlcjExOjpn
ZXRWaWV3cG9ydEJvdW5kcygpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQot
ICAgIHsKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDoKLSAgICAgICAgcmV0dXJu
IFJhbmdlKEQzRDExX1ZJRVdQT1JUX0JPVU5EU19NSU4sIEQzRDExX1ZJRVdQT1JUX0JPVU5EU19N
QVgpOwotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgotICAgICAgY2FzZSBEM0Rf
RkVBVFVSRV9MRVZFTF8xMF8wOgotICAgICAgICByZXR1cm4gUmFuZ2UoRDNEMTBfVklFV1BPUlRf
Qk9VTkRTX01JTiwgRDNEMTBfVklFV1BPUlRfQk9VTkRTX01BWCk7Ci0gICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gUmFuZ2UoMCwgMCk7Ci0gICAgfQotfQotCi11
bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSBj
b25zdAotewotICAgIE1FVEFfQVNTRVJUKE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl9TTTQg
PD0gZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7Ci0g
ICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQotICAgIHsKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVf
TEVWRUxfMTFfMDoKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKLSAgICAgIGNh
c2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKLSAgICAgICAgcmV0dXJuIE1BWF9URVhUVVJFX0lN
QUdFX1VOSVRTX1ZURl9TTTQ7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJlcjExOjpnZXRNYXhD
b21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2w6Ok1BWF9U
RVhUVVJFX0lNQUdFX1VOSVRTICsgZ2V0TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKTsKLX0K
LQotdW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldFJlc2VydmVkVmVydGV4VW5pZm9ybVZlY3Rv
cnMoKSBjb25zdAotewotICAgIHJldHVybiAwOyAgIC8vIERyaXZlciB1bmlmb3JtcyBhcmUgc3Rv
cmVkIGluIGEgc2VwYXJhdGUgY29uc3RhbnQgYnVmZmVyCi19Ci0KLXVuc2lnbmVkIGludCBSZW5k
ZXJlcjExOjpnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdAotewotICAg
IHJldHVybiAwOyAgIC8vIERyaXZlciB1bmlmb3JtcyBhcmUgc3RvcmVkIGluIGEgc2VwYXJhdGUg
Y29uc3RhbnQgYnVmZmVyCi19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJlcjExOjpnZXRNYXhWZXJ0
ZXhVbmlmb3JtVmVjdG9ycygpIGNvbnN0Ci17Ci0gICAgTUVUQV9BU1NFUlQoTUFYX1ZFUlRFWF9V
TklGT1JNX1ZFQ1RPUlNfRDNEMTEgPD0gRDNEMTBfUkVRX0NPTlNUQU5UX0JVRkZFUl9FTEVNRU5U
X0NPVU5UKTsKLSAgICBBU1NFUlQobUZlYXR1cmVMZXZlbCA+PSBEM0RfRkVBVFVSRV9MRVZFTF8x
MF8wKTsKLSAgICByZXR1cm4gTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlNfRDNEMTE7Ci19Ci0K
LXVuc2lnbmVkIGludCBSZW5kZXJlcjExOjpnZXRNYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkg
Y29uc3QKLXsKLSAgICBNRVRBX0FTU0VSVChNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTX0Qz
RDExIDw9IEQzRDEwX1JFUV9DT05TVEFOVF9CVUZGRVJfRUxFTUVOVF9DT1VOVCk7Ci0gICAgQVNT
RVJUKG1GZWF0dXJlTGV2ZWwgPj0gRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMCk7Ci0gICAgcmV0dXJu
IE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlNfRDNEMTE7Ci19Ci0KLXVuc2lnbmVkIGludCBS
ZW5kZXJlcjExOjpnZXRNYXhWYXJ5aW5nVmVjdG9ycygpIGNvbnN0Ci17Ci0gICAgTUVUQV9BU1NF
UlQoZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WQVJZSU5HX1ZFQ1RPUlMgPT0gRDNEMTFfVlNfT1VU
UFVUX1JFR0lTVEVSX0NPVU5UKTsKLSAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCi0gICAgewot
ICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgotICAgICAgICByZXR1cm4gRDNEMTFf
VlNfT1VUUFVUX1JFR0lTVEVSX0NPVU5UOwotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8x
MF8xOgotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgotICAgICAgICByZXR1cm4g
RDNEMTBfVlNfT1VUUFVUX1JFR0lTVEVSX0NPVU5UOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1ib29sIFJlbmRlcmVyMTE6Omdl
dE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1GZWF0dXJl
TGV2ZWwpCi0gICAgewotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgotICAgICAg
Y2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZF
TF8xMF8wOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgUmVuZGVyZXIxMTo6
Z2V0T2NjbHVzaW9uUXVlcnlTdXBwb3J0KCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1GZWF0dXJl
TGV2ZWwpCi0gICAgewotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgotICAgICAg
Y2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZF
TF8xMF8wOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgUmVuZGVyZXIxMTo6
Z2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdAotewotICAgIHN3aXRjaCAobUZlYXR1cmVMZXZl
bCkKLSAgICB7Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6Ci0gICAgICBjYXNl
IEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEw
XzA6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJlcjExOjpnZXRT
aGFyZUhhbmRsZVN1cHBvcnQoKSBjb25zdAotewotICAgIC8vIFdlIG9ubHkgY3VycmVudGx5IHN1
cHBvcnQgc2hhcmUgaGFuZGxlcyB3aXRoIEJHUkEgc3VyZmFjZXMsIGJlY2F1c2UKLSAgICAvLyBj
aHJvbWUgbmVlZHMgQkdSQS4gT25jZSBjaHJvbWUgZml4ZXMgdGhpcywgd2Ugc2hvdWxkIGFsd2F5
cyBzdXBwb3J0IHRoZW0uCi0gICAgLy8gUElYIGRvZXNuJ3Qgc2VlbSB0byBzdXBwb3J0IHVzaW5n
IHNoYXJlIGhhbmRsZXMsIHNvIGRpc2FibGUgdGhlbS4KLSAgICByZXR1cm4gZ2V0QkdSQVRleHR1
cmVTdXBwb3J0KCkgJiYgIWdsOjpwZXJmQWN0aXZlKCk7Ci19Ci0KLWJvb2wgUmVuZGVyZXIxMTo6
Z2V0RGVyaXZhdGl2ZUluc3RydWN0aW9uU3VwcG9ydCgpIGNvbnN0Ci17Ci0gICAgc3dpdGNoICht
RmVhdHVyZUxldmVsKQotICAgIHsKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDoK
LSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKLSAgICAgIGNhc2UgRDNEX0ZFQVRV
UkVfTEVWRUxfMTBfMDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFJlbmRl
cmVyMTE6OmdldFBvc3RTdWJCdWZmZXJTdXBwb3J0KCkgY29uc3QKLXsKLSAgICAvLyBEM0QxMSBk
b2VzIG5vdCBzdXBwb3J0IHByZXNlbnQgd2l0aCBkaXJ0eSByZWN0YW5nbGVzIHVudGlsIEQzRDEx
LjEgYW5kIERYR0kgMS4yLgotICAgIHJldHVybiBmYWxzZTsKLX0KLQotaW50IFJlbmRlcmVyMTE6
OmdldE1ham9yU2hhZGVyTW9kZWwoKSBjb25zdAotewotICAgIHN3aXRjaCAobUZlYXR1cmVMZXZl
bCkKLSAgICB7Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6IHJldHVybiBEM0Qx
MV9TSEFERVJfTUFKT1JfVkVSU0lPTjsgICAvLyA1Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xF
VkVMXzEwXzE6IHJldHVybiBEM0QxMF8xX1NIQURFUl9NQUpPUl9WRVJTSU9OOyAvLyA0Ci0gICAg
ICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6IHJldHVybiBEM0QxMF9TSEFERVJfTUFKT1Jf
VkVSU0lPTjsgICAvLyA0Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgICAgIHJldHVy
biAwOwotICAgIH0KLX0KLQotaW50IFJlbmRlcmVyMTE6OmdldE1pbm9yU2hhZGVyTW9kZWwoKSBj
b25zdAotewotICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKLSAgICB7Ci0gICAgICBjYXNlIEQz
RF9GRUFUVVJFX0xFVkVMXzExXzA6IHJldHVybiBEM0QxMV9TSEFERVJfTUlOT1JfVkVSU0lPTjsg
ICAvLyAwCi0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6IHJldHVybiBEM0QxMF8x
X1NIQURFUl9NSU5PUl9WRVJTSU9OOyAvLyAxCi0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVM
XzEwXzA6IHJldHVybiBEM0QxMF9TSEFERVJfTUlOT1JfVkVSU0lPTjsgICAvLyAwCi0gICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotZmxvYXQg
UmVuZGVyZXIxMTo6Z2V0TWF4UG9pbnRTaXplKCkgY29uc3QKLXsKLSAgICAvLyBjaG9vc2UgYSBy
ZWFzb25hYmxlIG1heGltdW0uIHdlIGVuZm9yY2UgdGhpcyBpbiB0aGUgc2hhZGVyLgotICAgIC8v
IChuYjogb24gYSBSYWRlb24gMjYwMHh0LCBEWDkgcmVwb3J0cyBhIDI1NiBtYXggcG9pbnQgc2l6
ZSkKLSAgICByZXR1cm4gMTAyNC4wZjsKLX0KLQotaW50IFJlbmRlcmVyMTE6OmdldE1heFZpZXdw
b3J0RGltZW5zaW9uKCkgY29uc3QKLXsKLSAgICAvLyBNYXhpbXVtIHZpZXdwb3J0IHNpemUgbXVz
dCBiZSBhdCBsZWFzdCBhcyBsYXJnZSBhcyB0aGUgbGFyZ2VzdCByZW5kZXIgYnVmZmVyIChvciBs
YXJnZXIpLgotICAgIC8vIEluIG91ciBjYXNlIHJldHVybiB0aGUgbWF4aW11bSB0ZXh0dXJlIHNp
emUsIHdoaWNoIGlzIHRoZSBtYXhpbXVtIHJlbmRlciBidWZmZXIgc2l6ZS4KLSAgICBNRVRBX0FT
U0VSVChEM0QxMV9SRVFfVEVYVFVSRTJEX1VfT1JfVl9ESU1FTlNJT04gKiAyIC0gMSA8PSBEM0Qx
MV9WSUVXUE9SVF9CT1VORFNfTUFYKTsKLSAgICBNRVRBX0FTU0VSVChEM0QxMF9SRVFfVEVYVFVS
RTJEX1VfT1JfVl9ESU1FTlNJT04gKiAyIC0gMSA8PSBEM0QxMF9WSUVXUE9SVF9CT1VORFNfTUFY
KTsKLQotICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKLSAgICB7Ci0gICAgICBjYXNlIEQzRF9G
RUFUVVJFX0xFVkVMXzExXzA6IAotICAgICAgICByZXR1cm4gRDNEMTFfUkVRX1RFWFRVUkUyRF9V
X09SX1ZfRElNRU5TSU9OOyAgIC8vIDE2Mzg0Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVM
XzEwXzE6Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6IAotICAgICAgICByZXR1
cm4gRDNEMTBfUkVRX1RFWFRVUkUyRF9VX09SX1ZfRElNRU5TSU9OOyAgIC8vIDgxOTIKLSAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgCi0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LX0KLQotaW50IFJlbmRlcmVyMTE6OmdldE1heFRleHR1cmVXaWR0aCgpIGNvbnN0Ci17Ci0gICAg
c3dpdGNoIChtRmVhdHVyZUxldmVsKQotICAgIHsKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVW
RUxfMTFfMDogcmV0dXJuIEQzRDExX1JFUV9URVhUVVJFMkRfVV9PUl9WX0RJTUVOU0lPTjsgICAv
LyAxNjM4NAotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgotICAgICAgY2FzZSBE
M0RfRkVBVFVSRV9MRVZFTF8xMF8wOiByZXR1cm4gRDNEMTBfUkVRX1RFWFRVUkUyRF9VX09SX1Zf
RElNRU5TSU9OOyAgIC8vIDgxOTIKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotfQotCi1pbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VGV4dHVyZUhlaWdo
dCgpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQotICAgIHsKLSAgICAgIGNh
c2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDogcmV0dXJuIEQzRDExX1JFUV9URVhUVVJFMkRfVV9P
Ul9WX0RJTUVOU0lPTjsgICAvLyAxNjM4NAotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8x
MF8xOgotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOiByZXR1cm4gRDNEMTBfUkVR
X1RFWFRVUkUyRF9VX09SX1ZfRElNRU5TSU9OOyAgIC8vIDgxOTIKLSAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1ib29sIFJlbmRlcmVyMTE6
OmdldDMyQml0SW5kZXhTdXBwb3J0KCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2
ZWwpCi0gICAgewotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOiAKLSAgICAgIGNh
c2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxf
MTBfMDogcmV0dXJuIEQzRDEwX1JFUV9EUkFXSU5ERVhFRF9JTkRFWF9DT1VOVF8yX1RPX0VYUCA+
PSAzMjsgICAvLyB0cnVlCi0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci19Ci0KLWludCBSZW5kZXJlcjExOjpnZXRNaW5Td2FwSW50ZXJ2YWwo
KSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi1pbnQgUmVuZGVyZXIxMTo6Z2V0TWF4U3dh
cEludGVydmFsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gNDsKLX0KLQotaW50IFJlbmRlcmVyMTE6
OmdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSBjb25zdAotewotICAgIHJldHVybiBtTWF4U3VwcG9y
dGVkU2FtcGxlczsKLX0KLQotaW50IFJlbmRlcmVyMTE6OmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1w
bGVzKERYR0lfRk9STUFUIGZvcm1hdCwgdW5zaWduZWQgaW50IHJlcXVlc3RlZCkgY29uc3QKLXsK
LSAgICBpZiAocmVxdWVzdGVkID09IDApCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0KLSAgICBNdWx0aXNhbXBsZVN1cHBvcnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTXVs
dGlzYW1wbGVTdXBwb3J0TWFwLmZpbmQoZm9ybWF0KTsKLSAgICBpZiAoaXRlciAhPSBtTXVsdGlz
YW1wbGVTdXBwb3J0TWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgY29uc3QgTXVsdGlzYW1wbGVT
dXBwb3J0SW5mbyYgaW5mbyA9IGl0ZXItPnNlY29uZDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IHJlcXVlc3RlZCAtIDE7IGkgPCBEM0QxMV9NQVhfTVVMVElTQU1QTEVfU0FNUExFX0NP
VU5UOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpbmZvLnF1YWxpdHlMZXZlbHNb
aV0gPiAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBpICsgMTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotdW5z
aWduZWQgaW50IFJlbmRlcmVyMTE6OmdldE1heFJlbmRlclRhcmdldHMoKSBjb25zdAotewotICAg
IE1FVEFfQVNTRVJUKEQzRDExX1NJTVVMVEFORU9VU19SRU5ERVJfVEFSR0VUX0NPVU5UIDw9IGds
OjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTKTsKLSAgICBNRVRBX0FTU0VSVChEM0Qx
MF9TSU1VTFRBTkVPVVNfUkVOREVSX1RBUkdFVF9DT1VOVCA8PSBnbDo6SU1QTEVNRU5UQVRJT05f
TUFYX0RSQVdfQlVGRkVSUyk7Ci0KLSAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCi0gICAgewot
ICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgotICAgICAgICByZXR1cm4gRDNEMTFf
U0lNVUxUQU5FT1VTX1JFTkRFUl9UQVJHRVRfQ09VTlQ7ICAvLyA4Ci0gICAgICBjYXNlIEQzRF9G
RUFUVVJFX0xFVkVMXzEwXzE6Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6Ci0g
ICAgICAgIHJldHVybiBEM0QxMF9TSU1VTFRBTkVPVVNfUkVOREVSX1RBUkdFVF9DT1VOVDsgIC8v
IDgKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVy
biAxOwotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJlcjExOjpjb3B5VG9SZW5kZXJUYXJnZXQoVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAq
c291cmNlKQotewotICAgIGlmIChzb3VyY2UgJiYgZGVzdCkKLSAgICB7Ci0gICAgICAgIFRleHR1
cmVTdG9yYWdlMTFfMkQgKnNvdXJjZTExID0gVGV4dHVyZVN0b3JhZ2UxMV8yRDo6bWFrZVRleHR1
cmVTdG9yYWdlMTFfMkQoc291cmNlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgICAgIFRl
eHR1cmVTdG9yYWdlMTFfMkQgKmRlc3QxMSA9IFRleHR1cmVTdG9yYWdlMTFfMkQ6Om1ha2VUZXh0
dXJlU3RvcmFnZTExXzJEKGRlc3QtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKLQotICAgICAgICBt
RGV2aWNlQ29udGV4dC0+Q29weVJlc291cmNlKGRlc3QxMS0+Z2V0QmFzZVRleHR1cmUoKSwgc291
cmNlMTEtPmdldEJhc2VUZXh0dXJlKCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyZXIxMTo6Y29weVRvUmVuZGVyVGFy
Z2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2VDdWJlICpzb3VyY2UpCi17Ci0gICAgaWYgKHNvdXJjZSAmJiBkZXN0KQotICAgIHsKLSAg
ICAgICAgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlICpzb3VyY2UxMSA9IFRleHR1cmVTdG9yYWdlMTFf
Q3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlMTFfQ3ViZShzb3VyY2UtPmdldFN0b3JhZ2VJbnN0YW5j
ZSgpKTsKLSAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlICpkZXN0MTEgPSBUZXh0dXJlU3Rv
cmFnZTExX0N1YmU6Om1ha2VUZXh0dXJlU3RvcmFnZTExX0N1YmUoZGVzdC0+Z2V0U3RvcmFnZUlu
c3RhbmNlKCkpOwotCi0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5Db3B5UmVzb3VyY2UoZGVzdDEx
LT5nZXRCYXNlVGV4dHVyZSgpLCBzb3VyY2UxMS0+Z2V0QmFzZVRleHR1cmUoKSk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5k
ZXJlcjExOjpjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6
OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZTJEICpzdG9yYWdlLCBHTGludCBsZXZlbCkKLXsKLSAgICBnbDo6UmVuZGVyYnVm
ZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRSZWFkQ29sb3JidWZmZXIoKTsKLSAg
ICBpZiAoIWNvbG9yYnVmZmVyKQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmll
dmUgdGhlIGNvbG9yIGJ1ZmZlciBmcm9tIHRoZSBmcmFtZSBidWZmZXIuIik7Ci0gICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAgIH0KLQotICAgIFJl
bmRlclRhcmdldDExICpzb3VyY2VSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJl
bmRlclRhcmdldDExKGNvbG9yYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSk7Ci0gICAgaWYgKCFz
b3VyY2VSZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2
ZSB0aGUgcmVuZGVyIHRhcmdldCBmcm9tIHRoZSBmcmFtZSBidWZmZXIuIik7Ci0gICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAgIH0KLQotICAgIElE
M0QxMVNoYWRlclJlc291cmNlVmlldyAqc291cmNlID0gc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRT
aGFkZXJSZXNvdXJjZVZpZXcoKTsKLSAgICBpZiAoIXNvdXJjZSkKLSAgICB7Ci0gICAgICAgIEVS
UigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0IHZpZXcgZnJvbSB0aGUgcmVu
ZGVyIHRhcmdldC4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
LCBmYWxzZSk7Ci0gICAgfQotCi0gICAgVGV4dHVyZVN0b3JhZ2UxMV8yRCAqc3RvcmFnZTExID0g
VGV4dHVyZVN0b3JhZ2UxMV8yRDo6bWFrZVRleHR1cmVTdG9yYWdlMTFfMkQoc3RvcmFnZS0+Z2V0
U3RvcmFnZUluc3RhbmNlKCkpOwotICAgIGlmICghc3RvcmFnZTExKQotICAgIHsKLSAgICAgICAg
RVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHRleHR1cmUgc3RvcmFnZSBmcm9tIHRoZSBkZXN0
aW5hdGlvbi4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBm
YWxzZSk7Ci0gICAgfQotCi0gICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3RSZW5kZXJUYXJnZXQgPSBS
ZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKHN0b3JhZ2UxMS0+Z2V0UmVuZGVyVGFy
Z2V0KGxldmVsKSk7Ci0gICAgaWYgKCFkZXN0UmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAg
RVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgZGVzdGlu
YXRpb24gc3RvcmFnZS4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZGVzdCA9
IGRlc3RSZW5kZXJUYXJnZXQtPmdldFJlbmRlclRhcmdldFZpZXcoKTsKLSAgICBpZiAoIWRlc3Qp
Ci0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdl
dCB2aWV3IGZyb20gdGhlIGRlc3RpbmF0aW9uIHJlbmRlciB0YXJnZXQuIik7Ci0gICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAgIH0KLQotICAgIGds
OjpSZWN0YW5nbGUgZGVzdFJlY3Q7Ci0gICAgZGVzdFJlY3QueCA9IHhvZmZzZXQ7Ci0gICAgZGVz
dFJlY3QueSA9IHlvZmZzZXQ7Ci0gICAgZGVzdFJlY3Qud2lkdGggPSBzb3VyY2VSZWN0LndpZHRo
OwotICAgIGRlc3RSZWN0LmhlaWdodCA9IHNvdXJjZVJlY3QuaGVpZ2h0OwotCi0gICAgYm9vbCBy
ZXQgPSBjb3B5VGV4dHVyZShzb3VyY2UsIHNvdXJjZVJlY3QsIHNvdXJjZVJlbmRlclRhcmdldC0+
Z2V0V2lkdGgoKSwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3QsIGRlc3RSZWN0LCBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRXaWR0
aCgpLCBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgZGVzdEZvcm1hdCk7Ci0KLSAgICBy
ZXR1cm4gcmV0OwotfQotCi1ib29sIFJlbmRlcmVyMTE6OmNvcHlJbWFnZShnbDo6RnJhbWVidWZm
ZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0g
ZGVzdEZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwpCi17Ci0gICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZm
ZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVyKCk7Ci0gICAgaWYgKCFjb2xvcmJ1
ZmZlcikKLSAgICB7Ci0gICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSBjb2xvciBi
dWZmZXIgZnJvbSB0aGUgZnJhbWUgYnVmZmVyLiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBSZW5kZXJUYXJnZXQxMSAq
c291cmNlUmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShj
b2xvcmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOwotICAgIGlmICghc291cmNlUmVuZGVyVGFy
Z2V0KQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0
YXJnZXQgZnJvbSB0aGUgZnJhbWUgYnVmZmVyLiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBJRDNEMTFTaGFkZXJSZXNv
dXJjZVZpZXcgKnNvdXJjZSA9IHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0U2hhZGVyUmVzb3VyY2VW
aWV3KCk7Ci0gICAgaWYgKCFzb3VyY2UpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byBy
ZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCB2aWV3IGZyb20gdGhlIHJlbmRlciB0YXJnZXQuIik7
Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAg
IH0KLQotICAgIFRleHR1cmVTdG9yYWdlMTFfQ3ViZSAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3Jh
Z2UxMV9DdWJlOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKHN0b3JhZ2UtPmdldFN0b3JhZ2VJ
bnN0YW5jZSgpKTsKLSAgICBpZiAoIXN0b3JhZ2UxMSkKLSAgICB7Ci0gICAgICAgIEVSUigiRmFp
bGVkIHRvIHJldHJpZXZlIHRoZSB0ZXh0dXJlIHN0b3JhZ2UgZnJvbSB0aGUgZGVzdGluYXRpb24u
Iik7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwot
ICAgIH0KLQotICAgIFJlbmRlclRhcmdldDExICpkZXN0UmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFy
Z2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShzdG9yYWdlMTEtPmdldFJlbmRlclRhcmdldCh0YXJn
ZXQsIGxldmVsKSk7Ci0gICAgaWYgKCFkZXN0UmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAg
RVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgZGVzdGlu
YXRpb24gc3RvcmFnZS4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZGVzdCA9
IGRlc3RSZW5kZXJUYXJnZXQtPmdldFJlbmRlclRhcmdldFZpZXcoKTsKLSAgICBpZiAoIWRlc3Qp
Ci0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdl
dCB2aWV3IGZyb20gdGhlIGRlc3RpbmF0aW9uIHJlbmRlciB0YXJnZXQuIik7Ci0gICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAgIH0KLQotICAgIGds
OjpSZWN0YW5nbGUgZGVzdFJlY3Q7Ci0gICAgZGVzdFJlY3QueCA9IHhvZmZzZXQ7Ci0gICAgZGVz
dFJlY3QueSA9IHlvZmZzZXQ7Ci0gICAgZGVzdFJlY3Qud2lkdGggPSBzb3VyY2VSZWN0LndpZHRo
OwotICAgIGRlc3RSZWN0LmhlaWdodCA9IHNvdXJjZVJlY3QuaGVpZ2h0OwotCi0gICAgYm9vbCBy
ZXQgPSBjb3B5VGV4dHVyZShzb3VyY2UsIHNvdXJjZVJlY3QsIHNvdXJjZVJlbmRlclRhcmdldC0+
Z2V0V2lkdGgoKSwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3QsIGRlc3RSZWN0LCBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRXaWR0
aCgpLCBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgZGVzdEZvcm1hdCk7Ci0KLSAgICBy
ZXR1cm4gcmV0OwotfQotCi1ib29sIFJlbmRlcmVyMTE6OmNvcHlUZXh0dXJlKElEM0QxMVNoYWRl
clJlc291cmNlVmlldyAqc291cmNlLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VBcmVhLCB1
bnNpZ25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3VyY2VIZWlnaHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmRlc3QsIGNv
bnN0IGdsOjpSZWN0YW5nbGUgJmRlc3RBcmVhLCB1bnNpZ25lZCBpbnQgZGVzdFdpZHRoLCB1bnNp
Z25lZCBpbnQgZGVzdEhlaWdodCwgR0xlbnVtIGRlc3RGb3JtYXQpCi17Ci0gICAgSFJFU1VMVCBy
ZXN1bHQ7Ci0KLSAgICBpZiAoIW1Db3B5UmVzb3VyY2VzSW5pdGlhbGl6ZWQpCi0gICAgewotICAg
ICAgICBBU1NFUlQoIW1Db3B5VkIgJiYgIW1Db3B5U2FtcGxlciAmJiAhbUNvcHlJTCAmJiAhbUNv
cHlWUyAmJiAhbUNvcHlSR0JBUFMgJiYgIW1Db3B5UkdCUFMgJiYgIW1Db3B5THVtUFMgJiYgIW1D
b3B5THVtQWxwaGFQUyk7Ci0KLSAgICAgICAgRDNEMTFfQlVGRkVSX0RFU0MgdmJEZXNjOwotICAg
ICAgICB2YkRlc2MuQnl0ZVdpZHRoID0gc2l6ZW9mKGQzZDExOjpQb3NpdGlvblRleENvb3JkVmVy
dGV4KSAqIDQ7Ci0gICAgICAgIHZiRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZTkFNSUM7Ci0g
ICAgICAgIHZiRGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1ZFUlRFWF9CVUZGRVI7Ci0gICAg
ICAgIHZiRGVzYy5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7Ci0gICAg
ICAgIHZiRGVzYy5NaXNjRmxhZ3MgPSAwOwotICAgICAgICB2YkRlc2MuU3RydWN0dXJlQnl0ZVN0
cmlkZSA9IDA7Ci0KLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlQnVmZmVyKCZ2YkRl
c2MsIE5VTEwsICZtQ29weVZCKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
LSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ29weVZCLCAiUmVuZGVyZXIxMSBjb3B5IHRl
eHR1cmUgdmVydGV4IGJ1ZmZlciIpOwotCi0gICAgICAgIEQzRDExX1NBTVBMRVJfREVTQyBzYW1w
bGVyRGVzYzsKLSAgICAgICAgc2FtcGxlckRlc2MuRmlsdGVyID0gRDNEMTFfRklMVEVSX01JTl9N
QUdfTUlQX0xJTkVBUjsKLSAgICAgICAgc2FtcGxlckRlc2MuQWRkcmVzc1UgPSBEM0QxMV9URVhU
VVJFX0FERFJFU1NfQ0xBTVA7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkFkZHJlc3NWID0gRDNEMTFf
VEVYVFVSRV9BRERSRVNTX0NMQU1QOwotICAgICAgICBzYW1wbGVyRGVzYy5BZGRyZXNzVyA9IEQz
RDExX1RFWFRVUkVfQUREUkVTU19DTEFNUDsKLSAgICAgICAgc2FtcGxlckRlc2MuTWlwTE9EQmlh
cyA9IDAuMGY7Ci0gICAgICAgIHNhbXBsZXJEZXNjLk1heEFuaXNvdHJvcHkgPSAwOwotICAgICAg
ICBzYW1wbGVyRGVzYy5Db21wYXJpc29uRnVuYyA9IEQzRDExX0NPTVBBUklTT05fTkVWRVI7Ci0g
ICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzBdID0gMC4wZjsKLSAgICAgICAgc2FtcGxl
ckRlc2MuQm9yZGVyQ29sb3JbMV0gPSAwLjBmOwotICAgICAgICBzYW1wbGVyRGVzYy5Cb3JkZXJD
b2xvclsyXSA9IDAuMGY7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzNdID0gMC4w
ZjsKLSAgICAgICAgc2FtcGxlckRlc2MuTWluTE9EID0gMC4wZjsKLSAgICAgICAgc2FtcGxlckRl
c2MuTWF4TE9EID0gMC4wZjsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVTYW1w
bGVyU3RhdGUoJnNhbXBsZXJEZXNjLCAmbUNvcHlTYW1wbGVyKTsKLSAgICAgICAgQVNTRVJUKFNV
Q0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ29weVNhbXBs
ZXIsICJSZW5kZXJlcjExIGNvcHkgc2FtcGxlciIpOwotCi0gICAgICAgIEQzRDExX0lOUFVUX0VM
RU1FTlRfREVTQyBxdWFkTGF5b3V0W10gPQotICAgICAgICB7Ci0gICAgICAgICAgICB7ICJQT1NJ
VElPTiIsIDAsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgMCwgMCwgRDNEMTFfSU5QVVRfUEVS
X1ZFUlRFWF9EQVRBLCAwIH0sCi0gICAgICAgICAgICB7ICJURVhDT09SRCIsIDAsIERYR0lfRk9S
TUFUX1IzMkczMl9GTE9BVCwgMCwgOCwgRDNEMTFfSU5QVVRfUEVSX1ZFUlRFWF9EQVRBLCAwIH0s
Ci0gICAgICAgIH07Ci0KLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlSW5wdXRMYXlv
dXQocXVhZExheW91dCwgMiwgZ19WU19QYXNzdGhyb3VnaCwgc2l6ZW9mKGdfVlNfUGFzc3Rocm91
Z2gpLCAmbUNvcHlJTCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAg
ICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNvcHlJTCwgIlJlbmRlcmVyMTEgY29weSB0ZXh0dXJl
IGlucHV0IGxheW91dCIpOwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVZlcnRl
eFNoYWRlcihnX1ZTX1Bhc3N0aHJvdWdoLCBzaXplb2YoZ19WU19QYXNzdGhyb3VnaCksIE5VTEws
ICZtQ29weVZTKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAg
ZDNkMTE6OlNldERlYnVnTmFtZShtQ29weVZTLCAiUmVuZGVyZXIxMSBjb3B5IHRleHR1cmUgdmVy
dGV4IHNoYWRlciIpOwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hh
ZGVyKGdfUFNfUGFzc3Rocm91Z2hSR0JBLCBzaXplb2YoZ19QU19QYXNzdGhyb3VnaFJHQkEpLCBO
VUxMLCAmbUNvcHlSR0JBUFMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwot
ICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5UkdCQVBTLCAiUmVuZGVyZXIxMSBjb3B5
IHRleHR1cmUgUkdCQSBwaXhlbCBzaGFkZXIiKTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNl
LT5DcmVhdGVQaXhlbFNoYWRlcihnX1BTX1Bhc3N0aHJvdWdoUkdCLCBzaXplb2YoZ19QU19QYXNz
dGhyb3VnaFJHQiksIE5VTEwsICZtQ29weVJHQlBTKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURF
RChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ29weVJHQlBTLCAiUmVu
ZGVyZXIxMSBjb3B5IHRleHR1cmUgUkdCIHBpeGVsIHNoYWRlciIpOwotCi0gICAgICAgIHJlc3Vs
dCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdfUFNfUGFzc3Rocm91Z2hMdW0sIHNpemVv
ZihnX1BTX1Bhc3N0aHJvdWdoTHVtKSwgTlVMTCwgJm1Db3B5THVtUFMpOwotICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5
THVtUFMsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSBsdW1pbmFuY2UgcGl4ZWwgc2hhZGVyIik7
Ci0KLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19QYXNz
dGhyb3VnaEx1bUFscGhhLCBzaXplb2YoZ19QU19QYXNzdGhyb3VnaEx1bUFscGhhKSwgTlVMTCwg
Jm1Db3B5THVtQWxwaGFQUyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0g
ICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNvcHlMdW1BbHBoYVBTLCAiUmVuZGVyZXIxMSBj
b3B5IHRleHR1cmUgbHVtaW5hbmNlIGFscGhhIHBpeGVsIHNoYWRlciIpOwotCi0gICAgICAgIG1D
b3B5UmVzb3VyY2VzSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KLQotICAgIC8vIFZlcmlmeSB0
aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmVhIHNpemVzCi0gICAgaWYgKHNvdXJjZUFyZWEu
eCA8IDAgfHwgc291cmNlQXJlYS54ICsgc291cmNlQXJlYS53aWR0aCA+IHN0YXRpY19jYXN0PGlu
dD4oc291cmNlV2lkdGgpIHx8Ci0gICAgICAgIHNvdXJjZUFyZWEueSA8IDAgfHwgc291cmNlQXJl
YS55ICsgc291cmNlQXJlYS5oZWlnaHQgPiBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUhlaWdodCkg
fHwKLSAgICAgICAgZGVzdEFyZWEueCA8IDAgfHwgZGVzdEFyZWEueCArIGRlc3RBcmVhLndpZHRo
ID4gc3RhdGljX2Nhc3Q8aW50PihkZXN0V2lkdGgpIHx8Ci0gICAgICAgIGRlc3RBcmVhLnkgPCAw
IHx8IGRlc3RBcmVhLnkgKyBkZXN0QXJlYS5oZWlnaHQgPiBzdGF0aWNfY2FzdDxpbnQ+KGRlc3RI
ZWlnaHQpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
LCBmYWxzZSk7Ci0gICAgfQotCi0gICAgLy8gU2V0IHZlcnRpY2VzCi0gICAgRDNEMTFfTUFQUEVE
X1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwotICAgIHJlc3VsdCA9IG1EZXZpY2VDb250ZXh0
LT5NYXAobUNvcHlWQiwgMCwgRDNEMTFfTUFQX1dSSVRFX0RJU0NBUkQsIDAsICZtYXBwZWRSZXNv
dXJjZSk7Ci0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgRVJSKCJGYWls
ZWQgdG8gbWFwIHZlcnRleCBidWZmZXIgZm9yIHRleHR1cmUgY29weSwgSFJFU1VMVDogMHglWC4i
LCByZXN1bHQpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZh
bHNlKTsKLSAgICB9Ci0KLSAgICBkM2QxMTo6UG9zaXRpb25UZXhDb29yZFZlcnRleCAqdmVydGlj
ZXMgPSBzdGF0aWNfY2FzdDxkM2QxMTo6UG9zaXRpb25UZXhDb29yZFZlcnRleCo+KG1hcHBlZFJl
c291cmNlLnBEYXRhKTsKLQotICAgIC8vIENyZWF0ZSBhIHF1YWQgaW4gaG9tb2dlbmVvdXMgY29v
cmRpbmF0ZXMKLSAgICBmbG9hdCB4MSA9IChkZXN0QXJlYS54IC8gZmxvYXQoZGVzdFdpZHRoKSkg
KiAyLjBmIC0gMS4wZjsKLSAgICBmbG9hdCB5MSA9ICgoZGVzdEhlaWdodCAtIGRlc3RBcmVhLnkg
LSBkZXN0QXJlYS5oZWlnaHQpIC8gZmxvYXQoZGVzdEhlaWdodCkpICogMi4wZiAtIDEuMGY7Ci0g
ICAgZmxvYXQgeDIgPSAoKGRlc3RBcmVhLnggKyBkZXN0QXJlYS53aWR0aCkgLyBmbG9hdChkZXN0
V2lkdGgpKSAqIDIuMGYgLSAxLjBmOwotICAgIGZsb2F0IHkyID0gKChkZXN0SGVpZ2h0IC0gZGVz
dEFyZWEueSkgLyBmbG9hdChkZXN0SGVpZ2h0KSkgKiAyLjBmIC0gMS4wZjsKLQotICAgIGZsb2F0
IHUxID0gc291cmNlQXJlYS54IC8gZmxvYXQoc291cmNlV2lkdGgpOwotICAgIGZsb2F0IHYxID0g
c291cmNlQXJlYS55IC8gZmxvYXQoc291cmNlSGVpZ2h0KTsKLSAgICBmbG9hdCB1MiA9IChzb3Vy
Y2VBcmVhLnggKyBzb3VyY2VBcmVhLndpZHRoKSAvIGZsb2F0KHNvdXJjZVdpZHRoKTsKLSAgICBm
bG9hdCB2MiA9IChzb3VyY2VBcmVhLnkgKyBzb3VyY2VBcmVhLmhlaWdodCkgLyBmbG9hdChzb3Vy
Y2VIZWlnaHQpOwotCi0gICAgZDNkMTE6OlNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgoJnZlcnRp
Y2VzWzBdLCB4MSwgeTEsIHUxLCB2Mik7Ci0gICAgZDNkMTE6OlNldFBvc2l0aW9uVGV4Q29vcmRW
ZXJ0ZXgoJnZlcnRpY2VzWzFdLCB4MSwgeTIsIHUxLCB2MSk7Ci0gICAgZDNkMTE6OlNldFBvc2l0
aW9uVGV4Q29vcmRWZXJ0ZXgoJnZlcnRpY2VzWzJdLCB4MiwgeTEsIHUyLCB2Mik7Ci0gICAgZDNk
MTE6OlNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgoJnZlcnRpY2VzWzNdLCB4MiwgeTIsIHUyLCB2
MSk7Ci0KLSAgICBtRGV2aWNlQ29udGV4dC0+VW5tYXAobUNvcHlWQiwgMCk7Ci0KLSAgICBzdGF0
aWMgVUlOVCBzdHJpZGUgPSBzaXplb2YoZDNkMTE6OlBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgpOwot
ICAgIHN0YXRpYyBVSU5UIHN0YXJ0SWR4ID0gMDsKLSAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRW
ZXJ0ZXhCdWZmZXJzKDAsIDEsICZtQ29weVZCLCAmc3RyaWRlLCAmc3RhcnRJZHgpOwotCi0gICAg
Ly8gQXBwbHkgc3RhdGUKLSAgICBtRGV2aWNlQ29udGV4dC0+T01TZXRCbGVuZFN0YXRlKE5VTEws
IE5VTEwsIDB4RkZGRkZGRik7Ci0gICAgbURldmljZUNvbnRleHQtPk9NU2V0RGVwdGhTdGVuY2ls
U3RhdGUoTlVMTCwgMHhGRkZGRkZGRik7Ci0gICAgbURldmljZUNvbnRleHQtPlJTU2V0U3RhdGUo
TlVMTCk7Ci0KLSAgICAvLyBBcHBseSBzaGFkZXJzCi0gICAgbURldmljZUNvbnRleHQtPklBU2V0
SW5wdXRMYXlvdXQobUNvcHlJTCk7Ci0gICAgbURldmljZUNvbnRleHQtPklBU2V0UHJpbWl0aXZl
VG9wb2xvZ3koRDNEX1BSSU1JVElWRV9UT1BPTE9HWV9UUklBTkdMRVNUUklQKTsKLSAgICBtRGV2
aWNlQ29udGV4dC0+VlNTZXRTaGFkZXIobUNvcHlWUywgTlVMTCwgMCk7Ci0KLSAgICBJRDNEMTFQ
aXhlbFNoYWRlciAqcHMgPSBOVUxMOwotICAgIHN3aXRjaChkZXN0Rm9ybWF0KQotICAgIHsKLSAg
ICAgIGNhc2UgR0xfUkdCQTogICAgICAgICAgICBwcyA9IG1Db3B5UkdCQVBTOyAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX1JHQjogICAgICAgICAgICAgcHMgPSBtQ29weVJHQlBTOyAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9BTFBIQTogICAgICAgICAgIHBzID0gbUNvcHlSR0JBUFM7ICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6ICAgICAgICBwcyA9IG1Db3B5UkdCQVBT
OyAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTogICAgICAgcHMgPSBtQ29weUx1
bVBTOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6IHBzID0gbUNv
cHlMdW1BbHBoYVBTOyBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICBwcyA9
IE5VTEw7ICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgbURldmljZUNvbnRleHQtPlBT
U2V0U2hhZGVyKHBzLCBOVUxMLCAwKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIo
TlVMTCwgTlVMTCwgMCk7Ci0KLSAgICAvLyBVbnNldCB0aGUgY3VycmVudGx5IGJvdW5kIHNoYWRl
ciByZXNvdXJjZSB0byBhdm9pZCBjb25mbGljdHMKLSAgICBzdGF0aWMgSUQzRDExU2hhZGVyUmVz
b3VyY2VWaWV3ICpjb25zdCBudWxsU1JWID0gTlVMTDsKLSAgICBtRGV2aWNlQ29udGV4dC0+UFNT
ZXRTaGFkZXJSZXNvdXJjZXMoMCwgMSwgJm51bGxTUlYpOwotCi0gICAgLy8gQXBwbHkgcmVuZGVy
IHRhcmdldAotICAgIHNldE9uZVRpbWVSZW5kZXJUYXJnZXQoZGVzdCk7Ci0KLSAgICAvLyBTZXQg
dGhlIHZpZXdwb3J0Ci0gICAgRDNEMTFfVklFV1BPUlQgdmlld3BvcnQ7Ci0gICAgdmlld3BvcnQu
VG9wTGVmdFggPSAwOwotICAgIHZpZXdwb3J0LlRvcExlZnRZID0gMDsKLSAgICB2aWV3cG9ydC5X
aWR0aCA9IGRlc3RXaWR0aDsKLSAgICB2aWV3cG9ydC5IZWlnaHQgPSBkZXN0SGVpZ2h0OwotICAg
IHZpZXdwb3J0Lk1pbkRlcHRoID0gMC4wZjsKLSAgICB2aWV3cG9ydC5NYXhEZXB0aCA9IDEuMGY7
Ci0gICAgbURldmljZUNvbnRleHQtPlJTU2V0Vmlld3BvcnRzKDEsICZ2aWV3cG9ydCk7Ci0KLSAg
ICAvLyBBcHBseSB0ZXh0dXJlcwotICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlclJlc291
cmNlcygwLCAxLCAmc291cmNlKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTYW1wbGVycygw
LCAxLCAmbUNvcHlTYW1wbGVyKTsKLQotICAgIC8vIERyYXcgdGhlIHF1YWQKLSAgICBtRGV2aWNl
Q29udGV4dC0+RHJhdyg0LCAwKTsKLQotICAgIC8vIFVuYmluZCB0ZXh0dXJlcyBhbmQgcmVuZGVy
IHRhcmdldHMgYW5kIHZlcnRleCBidWZmZXIKLSAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFk
ZXJSZXNvdXJjZXMoMCwgMSwgJm51bGxTUlYpOwotCi0gICAgdW5hcHBseVJlbmRlclRhcmdldHMo
KTsKLQotICAgIFVJTlQgemVybyA9IDA7Ci0gICAgSUQzRDExQnVmZmVyICpjb25zdCBudWxsQnVm
ZmVyID0gTlVMTDsKLSAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRWZXJ0ZXhCdWZmZXJzKDAsIDEs
ICZudWxsQnVmZmVyLCAmemVybywgJnplcm8pOwotCi0gICAgbWFya0FsbFN0YXRlRGlydHkoKTsK
LQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFJlbmRlcmVyMTE6OnVuYXBwbHlSZW5kZXJU
YXJnZXRzKCkKLXsKLSAgICBzZXRPbmVUaW1lUmVuZGVyVGFyZ2V0KE5VTEwpOwotfQotCi12b2lk
IFJlbmRlcmVyMTE6OnNldE9uZVRpbWVSZW5kZXJUYXJnZXQoSUQzRDExUmVuZGVyVGFyZ2V0Vmll
dyAqcmVuZGVyVGFyZ2V0VmlldykKLXsKLSAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpydHZB
cnJheVtnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSU10gPSB7TlVMTH07Ci0KLSAg
ICBydHZBcnJheVswXSA9IHJlbmRlclRhcmdldFZpZXc7Ci0KLSAgICBtRGV2aWNlQ29udGV4dC0+
T01TZXRSZW5kZXJUYXJnZXRzKGdldE1heFJlbmRlclRhcmdldHMoKSwgcnR2QXJyYXksIE5VTEwp
OwotCi0gICAgLy8gRG8gbm90IHByZXNlcnZlIHRoZSBzZXJpYWwgZm9yIHRoaXMgb25lLXRpbWUt
dXNlIHJlbmRlciB0YXJnZXQKLSAgICBmb3IgKHVuc2lnbmVkIGludCBydEluZGV4ID0gMDsgcnRJ
bmRleCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTOyBydEluZGV4KyspCi0g
ICAgewotICAgICAgICBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbHNbcnRJbmRleF0gPSAwOwot
ICAgIH0KLX0KLQotUmVuZGVyVGFyZ2V0ICpSZW5kZXJlcjExOjpjcmVhdGVSZW5kZXJUYXJnZXQo
U3dhcENoYWluICpzd2FwQ2hhaW4sIGJvb2wgZGVwdGgpCi17Ci0gICAgU3dhcENoYWluMTEgKnN3
YXBDaGFpbjExID0gU3dhcENoYWluMTE6Om1ha2VTd2FwQ2hhaW4xMShzd2FwQ2hhaW4pOwotICAg
IFJlbmRlclRhcmdldDExICpyZW5kZXJUYXJnZXQgPSBOVUxMOwotCi0gICAgaWYgKGRlcHRoKQot
ICAgIHsKLSAgICAgICAgLy8gTm90ZTogZGVwdGggc3RlbmNpbCBtYXkgYmUgTlVMTCBmb3IgMCBz
aXplZCBzdXJmYWNlcwotICAgICAgICByZW5kZXJUYXJnZXQgPSBuZXcgUmVuZGVyVGFyZ2V0MTEo
dGhpcywgc3dhcENoYWluMTEtPmdldERlcHRoU3RlbmNpbCgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldERlcHRoU3RlbmNpbFRleHR1
cmUoKSwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3
YXBDaGFpbjExLT5nZXRXaWR0aCgpLCBzd2FwQ2hhaW4xMS0+Z2V0SGVpZ2h0KCkpOwotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICAvLyBOb3RlOiByZW5kZXIgdGFyZ2V0IG1heSBiZSBO
VUxMIGZvciAwIHNpemVkIHN1cmZhY2VzCi0gICAgICAgIHJlbmRlclRhcmdldCA9IG5ldyBSZW5k
ZXJUYXJnZXQxMSh0aGlzLCBzd2FwQ2hhaW4xMS0+Z2V0UmVuZGVyVGFyZ2V0KCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwQ2hhaW4xMS0+Z2V0T2Zmc2Ny
ZWVuVGV4dHVyZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3dhcENoYWluMTEtPmdldFJlbmRlclRhcmdldFNoYWRlclJlc291cmNlKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwQ2hhaW4xMS0+Z2V0V2lkdGgoKSwg
c3dhcENoYWluMTEtPmdldEhlaWdodCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlbmRlclRhcmdl
dDsKLX0KLQotUmVuZGVyVGFyZ2V0ICpSZW5kZXJlcjExOjpjcmVhdGVSZW5kZXJUYXJnZXQoaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMsIGJvb2wg
ZGVwdGgpCi17Ci0gICAgUmVuZGVyVGFyZ2V0MTEgKnJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJU
YXJnZXQxMSh0aGlzLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHNhbXBsZXMsIGRlcHRoKTsKLSAg
ICByZXR1cm4gcmVuZGVyVGFyZ2V0OwotfQotCi1TaGFkZXJFeGVjdXRhYmxlICpSZW5kZXJlcjEx
Ojpsb2FkRXhlY3V0YWJsZShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgcng6
OlNoYWRlclR5cGUgdHlwZSkKLXsKLSAgICBTaGFkZXJFeGVjdXRhYmxlMTEgKmV4ZWN1dGFibGUg
PSBOVUxMOwotCi0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2Ugcng6OlNIQURF
Ul9WRVJURVg6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIElEM0QxMVZlcnRleFNoYWRlciAqdnNo
YWRlciA9IE5VTEw7Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0
ZVZlcnRleFNoYWRlcihmdW5jdGlvbiwgbGVuZ3RoLCBOVUxMLCAmdnNoYWRlcik7Ci0gICAgICAg
ICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgICAgICBpZiAodnNoYWRl
cikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3IFNoYWRl
ckV4ZWN1dGFibGUxMShmdW5jdGlvbiwgbGVuZ3RoLCB2c2hhZGVyKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ugcng6OlNIQURFUl9QSVhFTDoK
LSAgICAgICAgewotICAgICAgICAgICAgSUQzRDExUGl4ZWxTaGFkZXIgKnBzaGFkZXIgPSBOVUxM
OwotICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRl
cihmdW5jdGlvbiwgbGVuZ3RoLCBOVUxMLCAmcHNoYWRlcik7Ci0gICAgICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgICAgICBpZiAocHNoYWRlcikKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3IFNoYWRlckV4ZWN1dGFibGUx
MShmdW5jdGlvbiwgbGVuZ3RoLCBwc2hhZGVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ugcng6OlNIQURFUl9HRU9NRVRSWToKLSAgICAgICAg
ewotICAgICAgICAgICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmdzaGFkZXIgPSBOVUxMOwotICAg
ICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVHZW9tZXRyeVNoYWRlcihm
dW5jdGlvbiwgbGVuZ3RoLCBOVUxMLCAmZ3NoYWRlcik7Ci0gICAgICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgICAgICBpZiAoZ3NoYWRlcikKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3IFNoYWRlckV4ZWN1dGFibGUxMShm
dW5jdGlvbiwgbGVuZ3RoLCBnc2hhZGVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBleGVjdXRhYmxlOwotfQotCi1TaGFkZXJF
eGVjdXRhYmxlICpSZW5kZXJlcjExOjpjb21waWxlVG9FeGVjdXRhYmxlKGdsOjpJbmZvTG9nICZp
bmZvTG9nLCBjb25zdCBjaGFyICpzaGFkZXJITFNMLCByeDo6U2hhZGVyVHlwZSB0eXBlLCBEM0RX
b3JrYXJvdW5kVHlwZSB3b3JrYXJvdW5kKQotewotICAgIGNvbnN0IGNoYXIgKnByb2ZpbGUgPSBO
VUxMOwotCi0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2Ugcng6OlNIQURFUl9W
RVJURVg6Ci0gICAgICAgIHByb2ZpbGUgPSAidnNfNF8wIjsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIHJ4OjpTSEFERVJfUElYRUw6Ci0gICAgICAgIHByb2ZpbGUgPSAicHNfNF8wIjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIHJ4OjpTSEFERVJfR0VPTUVUUlk6Ci0gICAgICAgIHBy
b2ZpbGUgPSAiZ3NfNF8wIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAg
ICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBJRDNE
QmxvYiAqYmluYXJ5ID0gKElEM0RCbG9iKiljb21waWxlVG9CaW5hcnkoaW5mb0xvZywgc2hhZGVy
SExTTCwgcHJvZmlsZSwgRDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwwLCBmYWxzZSk7Ci0g
ICAgaWYgKCFiaW5hcnkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgU2hhZGVyRXhlY3V0
YWJsZSAqZXhlY3V0YWJsZSA9IGxvYWRFeGVjdXRhYmxlKChEV09SRCAqKWJpbmFyeS0+R2V0QnVm
ZmVyUG9pbnRlcigpLCBiaW5hcnktPkdldEJ1ZmZlclNpemUoKSwgdHlwZSk7Ci0gICAgYmluYXJ5
LT5SZWxlYXNlKCk7Ci0KLSAgICByZXR1cm4gZXhlY3V0YWJsZTsKLX0KLQotVmVydGV4QnVmZmVy
ICpSZW5kZXJlcjExOjpjcmVhdGVWZXJ0ZXhCdWZmZXIoKQotewotICAgIHJldHVybiBuZXcgVmVy
dGV4QnVmZmVyMTEodGhpcyk7Ci19Ci0KLUluZGV4QnVmZmVyICpSZW5kZXJlcjExOjpjcmVhdGVJ
bmRleEJ1ZmZlcigpCi17Ci0gICAgcmV0dXJuIG5ldyBJbmRleEJ1ZmZlcjExKHRoaXMpOwotfQot
Ci1CdWZmZXJTdG9yYWdlICpSZW5kZXJlcjExOjpjcmVhdGVCdWZmZXJTdG9yYWdlKCkKLXsKLSAg
ICByZXR1cm4gbmV3IEJ1ZmZlclN0b3JhZ2UxMSh0aGlzKTsKLX0KLQotUXVlcnlJbXBsICpSZW5k
ZXJlcjExOjpjcmVhdGVRdWVyeShHTGVudW0gdHlwZSkKLXsKLSAgICByZXR1cm4gbmV3IFF1ZXJ5
MTEodGhpcywgdHlwZSk7Ci19Ci0KLUZlbmNlSW1wbCAqUmVuZGVyZXIxMTo6Y3JlYXRlRmVuY2Uo
KQotewotICAgIHJldHVybiBuZXcgRmVuY2UxMSh0aGlzKTsKLX0KLQotYm9vbCBSZW5kZXJlcjEx
OjpnZXRSZW5kZXJUYXJnZXRSZXNvdXJjZShnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciwg
dW5zaWduZWQgaW50ICpzdWJyZXNvdXJjZUluZGV4LCBJRDNEMTFUZXh0dXJlMkQgKipyZXNvdXJj
ZSkKLXsKLSAgICBBU1NFUlQoY29sb3JidWZmZXIgIT0gTlVMTCk7Ci0KLSAgICBSZW5kZXJUYXJn
ZXQxMSAqcmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShj
b2xvcmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOwotICAgIGlmIChyZW5kZXJUYXJnZXQpCi0g
ICAgewotICAgICAgICAqc3VicmVzb3VyY2VJbmRleCA9IHJlbmRlclRhcmdldC0+Z2V0U3VicmVz
b3VyY2VJbmRleCgpOwotCi0gICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmNvbG9yQnVm
ZmVyUlRWID0gcmVuZGVyVGFyZ2V0LT5nZXRSZW5kZXJUYXJnZXRWaWV3KCk7Ci0gICAgICAgIGlm
IChjb2xvckJ1ZmZlclJUVikKLSAgICAgICAgewotICAgICAgICAgICAgSUQzRDExUmVzb3VyY2Ug
KnRleHR1cmVSZXNvdXJjZSA9IE5VTEw7Ci0gICAgICAgICAgICBjb2xvckJ1ZmZlclJUVi0+R2V0
UmVzb3VyY2UoJnRleHR1cmVSZXNvdXJjZSk7Ci0KLSAgICAgICAgICAgIGlmICh0ZXh0dXJlUmVz
b3VyY2UpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSB0
ZXh0dXJlUmVzb3VyY2UtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JRDNEMTFUZXh0dXJlMkQsICh2b2lk
KiopcmVzb3VyY2UpOwotICAgICAgICAgICAgICAgIHRleHR1cmVSZXNvdXJjZS0+UmVsZWFzZSgp
OwotCi0gICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIEVSUigiRmFpbGVkIHRvIGV4dHJhY3QgdGhlIElEM0QxMVRleHR1cmUyRCBmcm9tIHRo
ZSByZW5kZXIgdGFyZ2V0IHJlc291cmNlLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAiSFJF
U1VMVDogMHglWC4iLCByZXN1bHQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJl
cjExOjpibGl0UmVjdChnbDo6RnJhbWVidWZmZXIgKnJlYWRUYXJnZXQsIGNvbnN0IGdsOjpSZWN0
YW5nbGUgJnJlYWRSZWN0LCBnbDo6RnJhbWVidWZmZXIgKmRyYXdUYXJnZXQsIGNvbnN0IGdsOjpS
ZWN0YW5nbGUgJmRyYXdSZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJsaXRS
ZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERlcHRoU3RlbmNpbCkKLXsKLSAgICBpZiAoYmxpdFJlbmRl
clRhcmdldCkKLSAgICB7Ci0gICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlYWRCdWZmZXIgPSBy
ZWFkVGFyZ2V0LT5nZXRSZWFkQ29sb3JidWZmZXIoKTsKLQotICAgICAgICBpZiAoIXJlYWRCdWZm
ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSBy
ZWFkIGJ1ZmZlciBmcm9tIHRoZSByZWFkIGZyYW1lYnVmZmVyLiIpOwotICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBSZW5kZXJUYXJnZXQgKnJlYWRSZW5kZXJUYXJnZXQgPSByZWFkQnVmZmVyLT5nZXRSZW5k
ZXJUYXJnZXQoKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQg
PSAwOyBjb2xvckF0dGFjaG1lbnQgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVS
UzsgY29sb3JBdHRhY2htZW50KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChkcmF3VGFy
Z2V0LT5pc0VuYWJsZWRDb2xvckF0dGFjaG1lbnQoY29sb3JBdHRhY2htZW50KSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpkcmF3QnVmZmVyID0gZHJh
d1RhcmdldC0+Z2V0Q29sb3JidWZmZXIoY29sb3JBdHRhY2htZW50KTsKLQotICAgICAgICAgICAg
ICAgIGlmICghZHJhd0J1ZmZlcikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSBkcmF3IGJ1ZmZlciBmcm9tIHRoZSBkcmF3
IGZyYW1lYnVmZmVyLiIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlksIGZhbHNlKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBSZW5kZXJUYXJnZXQgKmRyYXdSZW5kZXJUYXJnZXQgPSBkcmF3QnVmZmVyLT5nZXRSZW5k
ZXJUYXJnZXQoKTsKLQotICAgICAgICAgICAgICAgIGlmICghYmxpdFJlbmRlcmJ1ZmZlclJlY3Qo
cmVhZFJlY3QsIGRyYXdSZWN0LCByZWFkUmVuZGVyVGFyZ2V0LCBkcmF3UmVuZGVyVGFyZ2V0LCBm
YWxzZSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKGJsaXREZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBnbDo6UmVuZGVyYnVm
ZmVyICpyZWFkQnVmZmVyID0gcmVhZFRhcmdldC0+Z2V0RGVwdGhPclN0ZW5jaWxidWZmZXIoKTsK
LSAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqZHJhd0J1ZmZlciA9IGRyYXdUYXJnZXQtPmdldERl
cHRoT3JTdGVuY2lsYnVmZmVyKCk7Ci0KLSAgICAgICAgaWYgKCFyZWFkQnVmZmVyKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVhZCBkZXB0aC1z
dGVuY2lsIGJ1ZmZlciBmcm9tIHRoZSByZWFkIGZyYW1lYnVmZmVyLiIpOwotICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoIWRyYXdCdWZmZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiRmFp
bGVkIHRvIHJldHJpZXZlIHRoZSBkcmF3IGRlcHRoLXN0ZW5jaWwgYnVmZmVyIGZyb20gdGhlIGRy
YXcgZnJhbWVidWZmZXIuIik7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlksIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlbmRlclRhcmdldCAqcmVh
ZFJlbmRlclRhcmdldCA9IHJlYWRCdWZmZXItPmdldERlcHRoU3RlbmNpbCgpOwotICAgICAgICBS
ZW5kZXJUYXJnZXQgKmRyYXdSZW5kZXJUYXJnZXQgPSBkcmF3QnVmZmVyLT5nZXREZXB0aFN0ZW5j
aWwoKTsKLQotICAgICAgICBpZiAoIWJsaXRSZW5kZXJidWZmZXJSZWN0KHJlYWRSZWN0LCBkcmF3
UmVjdCwgcmVhZFJlbmRlclRhcmdldCwgZHJhd1JlbmRlclRhcmdldCwgdHJ1ZSkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi12b2lkIFJlbmRlcmVyMTE6OnJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVm
ZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2gsIGJvb2wgcGFja1JldmVyc2VSb3dPcmRlciwg
R0xpbnQgcGFja0FsaWdubWVudCwgdm9pZCogcGl4ZWxzKQotewotICAgIElEM0QxMVRleHR1cmUy
RCAqY29sb3JCdWZmZXJUZXh0dXJlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBpbnQgc3VicmVzb3Vy
Y2VJbmRleCA9IDA7Ci0KLSAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1l
YnVmZmVyLT5nZXRSZWFkQ29sb3JidWZmZXIoKTsKLQotICAgIGlmIChjb2xvcmJ1ZmZlciAmJiBn
ZXRSZW5kZXJUYXJnZXRSZXNvdXJjZShjb2xvcmJ1ZmZlciwgJnN1YnJlc291cmNlSW5kZXgsICZj
b2xvckJ1ZmZlclRleHR1cmUpKQotICAgIHsKLSAgICAgICAgZ2w6OlJlY3RhbmdsZSBhcmVhOwot
ICAgICAgICBhcmVhLnggPSB4OwotICAgICAgICBhcmVhLnkgPSB5OwotICAgICAgICBhcmVhLndp
ZHRoID0gd2lkdGg7Ci0gICAgICAgIGFyZWEuaGVpZ2h0ID0gaGVpZ2h0OwotCi0gICAgICAgIHJl
YWRUZXh0dXJlRGF0YShjb2xvckJ1ZmZlclRleHR1cmUsIHN1YnJlc291cmNlSW5kZXgsIGFyZWEs
IGZvcm1hdCwgdHlwZSwgb3V0cHV0UGl0Y2gsCi0gICAgICAgICAgICAgICAgICAgICAgICBwYWNr
UmV2ZXJzZVJvd09yZGVyLCBwYWNrQWxpZ25tZW50LCBwaXhlbHMpOwotCi0gICAgICAgIGNvbG9y
QnVmZmVyVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICBjb2xvckJ1ZmZlclRleHR1cmUgPSBO
VUxMOwotICAgIH0KLX0KLQotSW1hZ2UgKlJlbmRlcmVyMTE6OmNyZWF0ZUltYWdlKCkKLXsKLSAg
ICByZXR1cm4gbmV3IEltYWdlMTEoKTsKLX0KLQotdm9pZCBSZW5kZXJlcjExOjpnZW5lcmF0ZU1p
cG1hcChJbWFnZSAqZGVzdCwgSW1hZ2UgKnNyYykKLXsKLSAgICBJbWFnZTExICpkZXN0MTEgPSBJ
bWFnZTExOjptYWtlSW1hZ2UxMShkZXN0KTsKLSAgICBJbWFnZTExICpzcmMxMSA9IEltYWdlMTE6
Om1ha2VJbWFnZTExKHNyYyk7Ci0gICAgSW1hZ2UxMTo6Z2VuZXJhdGVNaXBtYXAoZGVzdDExLCBz
cmMxMSk7Ci19Ci0KLVRleHR1cmVTdG9yYWdlICpSZW5kZXJlcjExOjpjcmVhdGVUZXh0dXJlU3Rv
cmFnZTJEKFN3YXBDaGFpbiAqc3dhcENoYWluKQotewotICAgIFN3YXBDaGFpbjExICpzd2FwQ2hh
aW4xMSA9IFN3YXBDaGFpbjExOjptYWtlU3dhcENoYWluMTEoc3dhcENoYWluKTsKLSAgICByZXR1
cm4gbmV3IFRleHR1cmVTdG9yYWdlMTFfMkQodGhpcywgc3dhcENoYWluMTEpOwotfQotCi1UZXh0
dXJlU3RvcmFnZSAqUmVuZGVyZXIxMTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChpbnQgbGV2ZWxz
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFi
bGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIHJldHVybiBuZXcgVGV4
dHVyZVN0b3JhZ2UxMV8yRCh0aGlzLCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB1c2FnZSwgZm9y
Y2VSZW5kZXJhYmxlLCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotVGV4dHVyZVN0b3JhZ2UgKlJlbmRl
cmVyMTE6OmNyZWF0ZVRleHR1cmVTdG9yYWdlQ3ViZShpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKQot
ewotICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKHRoaXMsIGxldmVscywgaW50
ZXJuYWxmb3JtYXQsIHVzYWdlLCBmb3JjZVJlbmRlcmFibGUsIHNpemUpOwotfQotCi1zdGF0aWMg
aW5saW5lIHVuc2lnbmVkIGludCBnZXRGYXN0UGl4ZWxDb3B5U2l6ZShEWEdJX0ZPUk1BVCBzb3Vy
Y2VGb3JtYXQsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTGVudW0gZGVzdFR5cGUpCi17Ci0gICAgaWYg
KHNvdXJjZUZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9BOF9VTk9STSAmJgotICAgICAgICBkZXN0Rm9y
bWF0ICAgPT0gR0xfQUxQSEEgJiYKLSAgICAgICAgZGVzdFR5cGUgICAgID09IEdMX1VOU0lHTkVE
X0JZVEUpCi0gICAgewotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc291
cmNlRm9ybWF0ID09IERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNICYmCi0gICAgICAgICAgICAg
ZGVzdEZvcm1hdCAgID09IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICBkZXN0VHlwZSAgICAgPT0g
R0xfVU5TSUdORURfQllURSkKLSAgICB7Ci0gICAgICAgIHJldHVybiA0OwotICAgIH0KLSAgICBl
bHNlIGlmIChzb3VyY2VGb3JtYXQgPT0gRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk0gJiYKLSAg
ICAgICAgICAgICBkZXN0Rm9ybWF0ICAgPT0gR0xfQkdSQV9FWFQgJiYKLSAgICAgICAgICAgICBk
ZXN0VHlwZSAgICAgPT0gR0xfVU5TSUdORURfQllURSkKLSAgICB7Ci0gICAgICAgIHJldHVybiA0
OwotICAgIH0KLSAgICBlbHNlIGlmIChzb3VyY2VGb3JtYXQgPT0gRFhHSV9GT1JNQVRfUjE2RzE2
QjE2QTE2X0ZMT0FUICYmCi0gICAgICAgICAgICAgZGVzdEZvcm1hdCAgID09IEdMX1JHQkEgJiYK
LSAgICAgICAgICAgICBkZXN0VHlwZSAgICAgPT0gR0xfSEFMRl9GTE9BVF9PRVMpCi0gICAgewot
ICAgICAgICByZXR1cm4gODsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc291cmNlRm9ybWF0ID09IERY
R0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCAmJgotICAgICAgICAgICAgIGRlc3RGb3JtYXQgICA9
PSBHTF9SR0IgJiYKLSAgICAgICAgICAgICBkZXN0VHlwZSAgICAgPT0gR0xfRkxPQVQpCi0gICAg
ewotICAgICAgICByZXR1cm4gMTI7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNvdXJjZUZvcm1hdCA9
PSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQgJiYKLSAgICAgICAgICAgICBkZXN0Rm9y
bWF0ICAgPT0gR0xfUkdCQSAmJgotICAgICAgICAgICAgIGRlc3RUeXBlICAgICA9PSBHTF9GTE9B
VCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAxNjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVhZFBpeGVs
Q29sb3IoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgRFhHSV9GT1JNQVQgZm9ybWF0LCB1bnNp
Z25lZCBpbnQgeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgeSwgaW50IGlucHV0UGl0Y2gsIGdsOjpDb2xvciAqb3V0Q29sb3IpCi17Ci0gICAgc3dpdGNo
IChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STToK
LSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHJnYmEgPSAqcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihkYXRhICsgNCAqIHggKyB5ICogaW5wdXRQaXRjaCk7
Ci0gICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICAocmdiYSAmIDB4MDAwMDAwRkYpICogKDEu
MGYgLyAweDAwMDAwMEZGKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5ncmVlbiA9IChyZ2JhICYg
MHgwMDAwRkYwMCkgKiAoMS4wZiAvIDB4MDAwMEZGMDApOwotICAgICAgICAgICAgb3V0Q29sb3It
PmJsdWUgPSAgKHJnYmEgJiAweDAwRkYwMDAwKSAqICgxLjBmIC8gMHgwMEZGMDAwMCk7Ci0gICAg
ICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAocmdiYSAmIDB4RkYwMDAwMDApICogKDEuMGYgLyAw
eEZGMDAwMDAwKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9BOF9VTk9STToKLSAgICAgICAgewotICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9
ICAgMC4wZjsKLSAgICAgICAgICAgIG91dENvbG9yLT5ncmVlbiA9IDAuMGY7Ci0gICAgICAgICAg
ICBvdXRDb2xvci0+Ymx1ZSA9ICAwLjBmOwotICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0g
KihkYXRhICsgeCArIHkgKiBpbnB1dFBpdGNoKSAvIDI1NS4wZjsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQ6Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgICoocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBmbG9hdCo+KGRhdGEgKyAxNiAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAwKTsKLSAg
ICAgICAgICAgIG91dENvbG9yLT5ncmVlbiA9ICoocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9h
dCo+KGRhdGEgKyAxNiAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAxKTsKLSAgICAgICAgICAgIG91
dENvbG9yLT5ibHVlID0gICoocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KGRhdGEgKyAx
NiAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAyKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5hbHBo
YSA9ICoocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KGRhdGEgKyAxNiAqIHggKyB5ICog
aW5wdXRQaXRjaCkgKyAzKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG91
dENvbG9yLT5yZWQgPSAgICoocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KGRhdGEgKyAx
MiAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAwKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5ncmVl
biA9ICoocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KGRhdGEgKyAxMiAqIHggKyB5ICog
aW5wdXRQaXRjaCkgKyAxKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gICoocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KGRhdGEgKyAxMiAqIHggKyB5ICogaW5wdXRQaXRjaCkg
KyAyKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IDEuMGY7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X0ZMT0FU
OgotICAgICAgICB7Ci0gICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICBnbDo6ZmxvYXQxNlRv
RmxvYXQzMigqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsg
OCAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAwKSk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Z3Jl
ZW4gPSBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgc2hvcnQqPihkYXRhICsgOCAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAxKSk7Ci0gICAgICAg
ICAgICBvdXRDb2xvci0+Ymx1ZSA9ICBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgOCAqIHggKyB5ICogaW5wdXRQaXRj
aCkgKyAyKSk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSBnbDo6ZmxvYXQxNlRvRmxv
YXQzMigqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgOCAq
IHggKyB5ICogaW5wdXRQaXRjaCkgKyAzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0K
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBiZ3JhID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgaW50Kj4oZGF0YSArIDQgKiB4ICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICAgICAgb3V0
Q29sb3ItPnJlZCA9ICAgKGJncmEgJiAweDAwRkYwMDAwKSAqICgxLjBmIC8gMHgwMEZGMDAwMCk7
Ci0gICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAoYmdyYSAmIDB4MDAwMDAwRkYpICogKDEu
MGYgLyAweDAwMDAwMEZGKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5ncmVlbiA9IChiZ3JhICYg
MHgwMDAwRkYwMCkgKiAoMS4wZiAvIDB4MDAwMEZGMDApOwotICAgICAgICAgICAgb3V0Q29sb3It
PmFscGhhID0gKGJncmEgJiAweEZGMDAwMDAwKSAqICgxLjBmIC8gMHhGRjAwMDAwMCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVU5PUk06
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgICooZGF0YSArIHggKyB5
ICogaW5wdXRQaXRjaCkgLyAyNTUuMGY7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAw
LjBmOwotICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAgMC4wZjsKLSAgICAgICAgICAgIG91
dENvbG9yLT5hbHBoYSA9IDEuMGY7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9VTk9STToKLSAgICAgICAgewotICAgICAgICAgICAgdW5z
aWduZWQgc2hvcnQgcmcgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+
KGRhdGEgKyAyICogeCArIHkgKiBpbnB1dFBpdGNoKTsKLQotICAgICAgICAgICAgb3V0Q29sb3It
PnJlZCA9ICAgKHJnICYgMHhGRjAwKSAqICgxLjBmIC8gMHhGRjAwKTsKLSAgICAgICAgICAgIG91
dENvbG9yLT5ncmVlbiA9IChyZyAmIDB4MDBGRikgKiAoMS4wZiAvIDB4MDBGRik7Ci0gICAgICAg
ICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAwLjBmOwotICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhh
ID0gMS4wZjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SMTZfRkxPQVQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAg
IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNo
b3J0Kj4oZGF0YSArIDIgKiB4ICsgeSAqIGlucHV0UGl0Y2gpKTsKLSAgICAgICAgICAgIG91dENv
bG9yLT5ncmVlbiA9IDAuMGY7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAwLjBmOwot
ICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gMS4wZjsKLSAgICAgICAgfQotICAgICAgICBi
cmVhazsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfRkxPQVQ6Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgIGdsOjpmbG9hdDE2VG9GbG9hdDMyKCoocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyA0ICogeCArIHkgKiBp
bnB1dFBpdGNoKSArIDApKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5ncmVlbiA9IGdsOjpmbG9h
dDE2VG9GbG9hdDMyKCoocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRh
dGEgKyA0ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDEpKTsKLSAgICAgICAgICAgIG91dENvbG9y
LT5ibHVlID0gIDAuMGY7Ci0gICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICBFUlIoIlJl
YWRQaXhlbENvbG9yIG5vdCBpbXBsZW1lbnRlZCBmb3IgRFhHSSBmb3JtYXQgJXUuIiwgZm9ybWF0
KTsKLSAgICAgICAgVU5JTVBMRU1FTlRFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZVBpeGVsQ29sb3IoY29uc3QgZ2w6OkNvbG9yICZjb2xv
ciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCB4LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgeSwgaW50IG91dHB1dFBpdGNo
LCB2b2lkICpvdXREYXRhKQotewotICAgIHVuc2lnbmVkIGNoYXIqIGJ5dGVEYXRhID0gcmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0RGF0YSk7Ci0gICAgdW5zaWduZWQgc2hvcnQq
IHNob3J0RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihvdXREYXRhKTsK
LQotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAg
ICAgc3dpdGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9C
WVRFOgotICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAwXSA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLnJlZCAgICsgMC41Zik7Ci0g
ICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDFdID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuZ3JlZW4gKyAwLjVmKTsKLSAgICAgICAg
ICAgIGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMl0gPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5ibHVlICArIDAuNWYpOwotICAgICAgICAgICAgYnl0
ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAzXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KDI1NSAqIGNvbG9yLmFscGhhICsgMC41Zik7Ci0gICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBFUlIoIldyaXRlUGl4ZWxDb2xvciBub3Qg
aW1wbGVtZW50ZWQgZm9yIGZvcm1hdCBHTF9SR0JBIGFuZCB0eXBlIDB4JVguIiwgdHlwZSk7Ci0g
ICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgc3dp
dGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgot
ICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAwXSA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLmJsdWUgICsgMC41Zik7Ci0gICAgICAg
ICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDFdID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuZ3JlZW4gKyAwLjVmKTsKLSAgICAgICAgICAgIGJ5
dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMl0gPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyPigyNTUgKiBjb2xvci5yZWQgICArIDAuNWYpOwotICAgICAgICAgICAgYnl0ZURhdGFb
NCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAzXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+
KDI1NSAqIGNvbG9yLmFscGhhICsgMC41Zik7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhUOgotICAgICAgICAgICAg
Ly8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhlICJUcmFuc2ZlciBvZiBQ
aXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCi0gICAgICAgICAgICAvLyB0aGlzIHR5cGUgaXMgcGFj
a2VkIGFzIGZvbGxvd3M6Ci0gICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAgIDEyICAgMTEg
ICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAgMSAgICAwCi0g
ICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgIC8vIHwg
ICAgICAgNHRoICAgICAgICAgfCAgICAgICAgM3JkICAgICAgICAgfCAgICAgICAgMm5kICAgICAg
ICB8ICAgMXN0IGNvbXBvbmVudCAgIHwKLSAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgQkdSQV9FWFQsIEIgaXMgdGhl
IGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28gZm9ydGguCi0gICAgICAgICAg
ICBzaG9ydERhdGFbeCArIHkgKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCld
ID0KLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDE1ICogY29s
b3IuYWxwaGEgKyAwLjVmKSA8PCAxMikgfAotICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1
bnNpZ25lZCBzaG9ydD4oMTUgKiBjb2xvci5yZWQgICArIDAuNWYpIDw8ICA4KSB8Ci0gICAgICAg
ICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigxNSAqIGNvbG9yLmdyZWVuICsg
MC41ZikgPDwgIDQpIHwKLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hv
cnQ+KDE1ICogY29sb3IuYmx1ZSAgKyAwLjVmKSA8PCAgMCk7Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUOgotICAg
ICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhlICJUcmFu
c2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCi0gICAgICAgICAgICAvLyB0aGlzIHR5
cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6Ci0gICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAg
IDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAg
MSAgICAwCi0gICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAg
ICAgIC8vIHwgNHRoIHwgICAgICAgICAgM3JkICAgICAgICAgICB8ICAgICAgICAgICAybmQgICAg
ICAgICAgfCAgICAgIDFzdCBjb21wb25lbnQgICAgIHwKLSAgICAgICAgICAgIC8vICAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgQkdSQV9FWFQs
IEIgaXMgdGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28gZm9ydGguCi0g
ICAgICAgICAgICBzaG9ydERhdGFbeCArIHkgKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25l
ZCBzaG9ydCldID0KLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+
KCAgICAgY29sb3IuYWxwaGEgKyAwLjVmKSA8PCAxNSkgfAotICAgICAgICAgICAgICAgIChzdGF0
aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMzEgKiBjb2xvci5yZWQgICArIDAuNWYpIDw8IDEwKSB8
Ci0gICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigzMSAqIGNvbG9y
LmdyZWVuICsgMC41ZikgPDwgIDUpIHwKLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5z
aWduZWQgc2hvcnQ+KDMxICogY29sb3IuYmx1ZSAgKyAwLjVmKSA8PCAgMCk7Ci0gICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBFUlIoIldyaXRlUGl4
ZWxDb2xvciBub3QgaW1wbGVtZW50ZWQgZm9yIGZvcm1hdCBHTF9CR1JBX0VYVCBhbmQgdHlwZSAw
eCVYLiIsIHR5cGUpOwotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgR0xfUkdCOgot
ICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX1NIT1JUXzVfNl81OgotICAgICAgICAgICAgc2hvcnREYXRhW3ggKyB5ICogb3V0cHV0UGl0
Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9Ci0gICAgICAgICAgICAgICAgKHN0YXRpY19j
YXN0PHVuc2lnbmVkIHNob3J0PigzMSAqIGNvbG9yLmJsdWUgICsgMC41ZikgPDwgIDApIHwKLSAg
ICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDYzICogY29sb3IuZ3Jl
ZW4gKyAwLjVmKSA8PCAgNSkgfAotICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBzaG9ydD4oMzEgKiBjb2xvci5yZWQgICArIDAuNWYpIDw8IDExKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgYnl0
ZURhdGFbMyAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAwXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KDI1NSAqIGNvbG9yLnJlZCArICAgMC41Zik7Ci0gICAgICAgICAgICBieXRlRGF0YVsz
ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDFdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4o
MjU1ICogY29sb3IuZ3JlZW4gKyAwLjVmKTsKLSAgICAgICAgICAgIGJ5dGVEYXRhWzMgKiB4ICsg
eSAqIG91dHB1dFBpdGNoICsgMl0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBj
b2xvci5ibHVlICsgIDAuNWYpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgRVJSKCJXcml0ZVBpeGVsQ29sb3Igbm90IGltcGxlbWVudGVkIGZv
ciBmb3JtYXQgR0xfUkdCIGFuZCB0eXBlIDB4JVguIiwgdHlwZSk7Ci0gICAgICAgICAgICBVTklN
UExFTUVOVEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgRVJSKCJXcml0ZVBpeGVsQ29sb3Igbm90IGlt
cGxlbWVudGVkIGZvciBmb3JtYXQgMHglWC4iLCBmb3JtYXQpOwotICAgICAgICBVTklNUExFTUVO
VEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJlcjExOjpyZWFk
VGV4dHVyZURhdGEoSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCB1bnNpZ25lZCBpbnQgc3ViUmVz
b3VyY2UsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmFyZWEsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xzaXplaSBvdXRwdXRQaXRj
aCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xpbnQgcGFja0FsaWdubWVudCwgdm9pZCAqcGl4ZWxzKQotewotICAgIEQzRDExX1RF
WFRVUkUyRF9ERVNDIHRleHR1cmVEZXNjOwotICAgIHRleHR1cmUtPkdldERlc2MoJnRleHR1cmVE
ZXNjKTsKLQotICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHN0YWdpbmdEZXNjOwotICAgIHN0YWdp
bmdEZXNjLldpZHRoID0gYXJlYS53aWR0aDsKLSAgICBzdGFnaW5nRGVzYy5IZWlnaHQgPSBhcmVh
LmhlaWdodDsKLSAgICBzdGFnaW5nRGVzYy5NaXBMZXZlbHMgPSAxOwotICAgIHN0YWdpbmdEZXNj
LkFycmF5U2l6ZSA9IDE7Ci0gICAgc3RhZ2luZ0Rlc2MuRm9ybWF0ID0gdGV4dHVyZURlc2MuRm9y
bWF0OwotICAgIHN0YWdpbmdEZXNjLlNhbXBsZURlc2MuQ291bnQgPSAxOwotICAgIHN0YWdpbmdE
ZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7Ci0gICAgc3RhZ2luZ0Rlc2MuVXNhZ2UgPSBEM0Qx
MV9VU0FHRV9TVEFHSU5HOwotICAgIHN0YWdpbmdEZXNjLkJpbmRGbGFncyA9IDA7Ci0gICAgc3Rh
Z2luZ0Rlc2MuQ1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUNDRVNTX1JFQUQ7Ci0gICAgc3Rh
Z2luZ0Rlc2MuTWlzY0ZsYWdzID0gMDsKLQotICAgIElEM0QxMVRleHR1cmUyRCogc3RhZ2luZ1Rl
eCA9IE5VTEw7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQo
JnN0YWdpbmdEZXNjLCBOVUxMLCAmc3RhZ2luZ1RleCk7Ci0gICAgaWYgKEZBSUxFRChyZXN1bHQp
KQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gY3JlYXRlIHN0YWdpbmcgdGV4dHVyZSBm
b3IgcmVhZFBpeGVscywgSFJFU1VMVDogMHglWC4iLCByZXN1bHQpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgSUQzRDExVGV4dHVyZTJEKiBzcmNUZXggPSBOVUxMOwotICAgIGlmICh0
ZXh0dXJlRGVzYy5TYW1wbGVEZXNjLkNvdW50ID4gMSkKLSAgICB7Ci0gICAgICAgIEQzRDExX1RF
WFRVUkUyRF9ERVNDIHJlc29sdmVEZXNjOwotICAgICAgICByZXNvbHZlRGVzYy5XaWR0aCA9IHRl
eHR1cmVEZXNjLldpZHRoOwotICAgICAgICByZXNvbHZlRGVzYy5IZWlnaHQgPSB0ZXh0dXJlRGVz
Yy5IZWlnaHQ7Ci0gICAgICAgIHJlc29sdmVEZXNjLk1pcExldmVscyA9IDE7Ci0gICAgICAgIHJl
c29sdmVEZXNjLkFycmF5U2l6ZSA9IDE7Ci0gICAgICAgIHJlc29sdmVEZXNjLkZvcm1hdCA9IHRl
eHR1cmVEZXNjLkZvcm1hdDsKLSAgICAgICAgcmVzb2x2ZURlc2MuU2FtcGxlRGVzYy5Db3VudCA9
IDE7Ci0gICAgICAgIHJlc29sdmVEZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7Ci0gICAgICAg
IHJlc29sdmVEZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKLSAgICAgICAgcmVzb2x2
ZURlc2MuQmluZEZsYWdzID0gMDsKLSAgICAgICAgcmVzb2x2ZURlc2MuQ1BVQWNjZXNzRmxhZ3Mg
PSAwOwotICAgICAgICByZXNvbHZlRGVzYy5NaXNjRmxhZ3MgPSAwOwotCi0gICAgICAgIHJlc3Vs
dCA9IG1EZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmcmVzb2x2ZURlc2MsIE5VTEwsICZzcmNUZXgp
OwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVS
UigiRmFpbGVkIHRvIGNyZWF0ZSByZXNvbHZlIHRleHR1cmUgZm9yIHJlYWRQaXhlbHMsIEhSRVNV
TFQ6IDB4JVguIiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHN0YWdpbmdUZXgtPlJlbGVhc2UoKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIG1EZXZpY2VDb250ZXh0
LT5SZXNvbHZlU3VicmVzb3VyY2Uoc3JjVGV4LCAwLCB0ZXh0dXJlLCBzdWJSZXNvdXJjZSwgdGV4
dHVyZURlc2MuRm9ybWF0KTsKLSAgICAgICAgc3ViUmVzb3VyY2UgPSAwOwotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICBzcmNUZXggPSB0ZXh0dXJlOwotICAgICAgICBzcmNUZXgtPkFk
ZFJlZigpOwotICAgIH0KLQotICAgIEQzRDExX0JPWCBzcmNCb3g7Ci0gICAgc3JjQm94LmxlZnQg
PSBhcmVhLng7Ci0gICAgc3JjQm94LnJpZ2h0ID0gYXJlYS54ICsgYXJlYS53aWR0aDsKLSAgICBz
cmNCb3gudG9wID0gYXJlYS55OwotICAgIHNyY0JveC5ib3R0b20gPSBhcmVhLnkgKyBhcmVhLmhl
aWdodDsKLSAgICBzcmNCb3guZnJvbnQgPSAwOwotICAgIHNyY0JveC5iYWNrID0gMTsKLQotICAg
IG1EZXZpY2VDb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24oc3RhZ2luZ1RleCwgMCwgMCwg
MCwgMCwgc3JjVGV4LCBzdWJSZXNvdXJjZSwgJnNyY0JveCk7Ci0KLSAgICBzcmNUZXgtPlJlbGVh
c2UoKTsKLSAgICBzcmNUZXggPSBOVUxMOwotCi0gICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNF
IG1hcHBpbmc7Ci0gICAgbURldmljZUNvbnRleHQtPk1hcChzdGFnaW5nVGV4LCAwLCBEM0QxMV9N
QVBfUkVBRCwgMCwgJm1hcHBpbmcpOwotCi0gICAgdW5zaWduZWQgY2hhciAqc291cmNlOwotICAg
IGludCBpbnB1dFBpdGNoOwotICAgIGlmIChwYWNrUmV2ZXJzZVJvd09yZGVyKQotICAgIHsKLSAg
ICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG1hcHBpbmcucERhdGEp
ICsgbWFwcGluZy5Sb3dQaXRjaCAqIChhcmVhLmhlaWdodCAtIDEpOwotICAgICAgICBpbnB1dFBp
dGNoID0gLXN0YXRpY19jYXN0PGludD4obWFwcGluZy5Sb3dQaXRjaCk7Ci0gICAgfQotICAgIGVs
c2UKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPiht
YXBwaW5nLnBEYXRhKTsKLSAgICAgICAgaW5wdXRQaXRjaCA9IHN0YXRpY19jYXN0PGludD4obWFw
cGluZy5Sb3dQaXRjaCk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaW50IGZhc3RQaXhlbFNpemUg
PSBnZXRGYXN0UGl4ZWxDb3B5U2l6ZSh0ZXh0dXJlRGVzYy5Gb3JtYXQsIGZvcm1hdCwgdHlwZSk7
Ci0gICAgaWYgKGZhc3RQaXhlbFNpemUgIT0gMCkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGNo
YXIgKmRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxzKTsKLSAgICAgICAg
Zm9yIChpbnQgaiA9IDA7IGogPCBhcmVhLmhlaWdodDsgaisrKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBtZW1jcHkoZGVzdCArIGogKiBvdXRwdXRQaXRjaCwgc291cmNlICsgaiAqIGlucHV0UGl0
Y2gsIGFyZWEud2lkdGggKiBmYXN0UGl4ZWxTaXplKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBl
bHNlIGlmICh0ZXh0dXJlRGVzYy5Gb3JtYXQgPT0gRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk0g
JiYKLSAgICAgICAgICAgICBmb3JtYXQgPT0gR0xfUkdCQSAmJgotICAgICAgICAgICAgIHR5cGUg
PT0gR0xfVU5TSUdORURfQllURSkKLSAgICB7Ci0gICAgICAgIC8vIEZhc3QgcGF0aCBmb3Igc3dh
cHBpbmcgcmVkIHdpdGggYmx1ZQotICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KHBpeGVscyk7Ci0KLSAgICAgICAgZm9yIChpbnQgaiA9IDA7
IGogPCBhcmVhLmhlaWdodDsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGFyZWEud2lkdGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBq
ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgICAgICAgICAgKih1bnNpZ25lZCBpbnQqKShkZXN0ICsg
NCAqIGkgKyBqICogb3V0cHV0UGl0Y2gpID0KLSAgICAgICAgICAgICAgICAgICAgKGFyZ2IgJiAw
eEZGMDBGRjAwKSB8ICAgICAgIC8vIEtlZXAgYWxwaGEgYW5kIGdyZWVuCi0gICAgICAgICAgICAg
ICAgICAgIChhcmdiICYgMHgwMEZGMDAwMCkgPj4gMTYgfCAvLyBNb3ZlIHJlZCB0byBibHVlCi0g
ICAgICAgICAgICAgICAgICAgIChhcmdiICYgMHgwMDAwMDBGRikgPDwgMTY7ICAvLyBNb3ZlIGJs
dWUgdG8gcmVkCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAg
IHsKLSAgICAgICAgZ2w6OkNvbG9yIHBpeGVsQ29sb3I7Ci0gICAgICAgIGZvciAoaW50IGogPSAw
OyBqIDwgYXJlYS5oZWlnaHQ7IGorKykKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBhcmVhLndpZHRoOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgcmVhZFBpeGVsQ29sb3Ioc291cmNlLCB0ZXh0dXJlRGVzYy5Gb3JtYXQsIGksIGosIGlucHV0
UGl0Y2gsICZwaXhlbENvbG9yKTsKLSAgICAgICAgICAgICAgICB3cml0ZVBpeGVsQ29sb3IocGl4
ZWxDb2xvciwgZm9ybWF0LCB0eXBlLCBpLCBqLCBvdXRwdXRQaXRjaCwgcGl4ZWxzKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIG1EZXZpY2VDb250ZXh0LT5Vbm1hcChz
dGFnaW5nVGV4LCAwKTsKLQotICAgIHN0YWdpbmdUZXgtPlJlbGVhc2UoKTsKLSAgICBzdGFnaW5n
VGV4ID0gTlVMTDsKLX0KLQotYm9vbCBSZW5kZXJlcjExOjpibGl0UmVuZGVyYnVmZmVyUmVjdChj
b25zdCBnbDo6UmVjdGFuZ2xlICZyZWFkUmVjdCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1Jl
Y3QsIFJlbmRlclRhcmdldCAqcmVhZFJlbmRlclRhcmdldCwgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFJlbmRlclRhcmdldCAqZHJhd1JlbmRlclRhcmdldCwgYm9vbCB3
aG9sZUJ1ZmZlckNvcHkpCi17Ci0gICAgQVNTRVJUKHJlYWRSZWN0LndpZHRoID09IGRyYXdSZWN0
LndpZHRoICYmIHJlYWRSZWN0LmhlaWdodCA9PSBkcmF3UmVjdC5oZWlnaHQpOwotCi0gICAgUmVu
ZGVyVGFyZ2V0MTEgKmRyYXdSZW5kZXJUYXJnZXQxMSA9IFJlbmRlclRhcmdldDExOjptYWtlUmVu
ZGVyVGFyZ2V0MTEoZHJhd1JlbmRlclRhcmdldCk7Ci0gICAgaWYgKCFkcmF3UmVuZGVyVGFyZ2V0
KQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIGRyYXcgcmVuZGVy
IHRhcmdldCBmcm9tIHRoZSBkcmF3IGZyYW1lYnVmZmVyLiIpOwotICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBJRDNEMTFUZXh0
dXJlMkQgKmRyYXdUZXh0dXJlID0gZHJhd1JlbmRlclRhcmdldDExLT5nZXRUZXh0dXJlKCk7Ci0g
ICAgdW5zaWduZWQgaW50IGRyYXdTdWJyZXNvdXJjZSA9IGRyYXdSZW5kZXJUYXJnZXQxMS0+Z2V0
U3VicmVzb3VyY2VJbmRleCgpOwotCi0gICAgUmVuZGVyVGFyZ2V0MTEgKnJlYWRSZW5kZXJUYXJn
ZXQxMSA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEocmVhZFJlbmRlclRhcmdl
dCk7Ci0gICAgaWYgKCFyZWFkUmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgRVJSKCJGYWls
ZWQgdG8gcmV0cmlldmUgdGhlIHJlYWQgcmVuZGVyIHRhcmdldCBmcm9tIHRoZSByZWFkIGZyYW1l
YnVmZmVyLiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZh
bHNlKTsKLSAgICB9Ci0KLSAgICBJRDNEMTFUZXh0dXJlMkQgKnJlYWRUZXh0dXJlID0gTlVMTDsK
LSAgICB1bnNpZ25lZCBpbnQgcmVhZFN1YnJlc291cmNlID0gMDsKLSAgICBpZiAocmVhZFJlbmRl
clRhcmdldC0+Z2V0U2FtcGxlcygpID4gMCkKLSAgICB7Ci0gICAgICAgIHJlYWRUZXh0dXJlID0g
cmVzb2x2ZU11bHRpc2FtcGxlZFRleHR1cmUocmVhZFJlbmRlclRhcmdldDExLT5nZXRUZXh0dXJl
KCksIHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0U3VicmVzb3VyY2VJbmRleCgpKTsKLSAgICAgICAg
cmVhZFN1YnJlc291cmNlID0gMDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmVh
ZFRleHR1cmUgPSByZWFkUmVuZGVyVGFyZ2V0MTEtPmdldFRleHR1cmUoKTsKLSAgICAgICAgcmVh
ZFRleHR1cmUtPkFkZFJlZigpOwotICAgICAgICByZWFkU3VicmVzb3VyY2UgPSByZWFkUmVuZGVy
VGFyZ2V0MTEtPmdldFN1YnJlc291cmNlSW5kZXgoKTsKLSAgICB9Ci0KLSAgICBpZiAoIXJlYWRU
ZXh0dXJlKQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlYWQg
cmVuZGVyIHRhcmdldCB2aWV3IGZyb20gdGhlIHJlYWQgcmVuZGVyIHRhcmdldC4iKTsKLSAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7Ci0gICAgfQotCi0g
ICAgRDNEMTFfQk9YIHJlYWRCb3g7Ci0gICAgcmVhZEJveC5sZWZ0ID0gcmVhZFJlY3QueDsKLSAg
ICByZWFkQm94LnJpZ2h0ID0gcmVhZFJlY3QueCArIHJlYWRSZWN0LndpZHRoOwotICAgIHJlYWRC
b3gudG9wID0gcmVhZFJlY3QueTsKLSAgICByZWFkQm94LmJvdHRvbSA9IHJlYWRSZWN0LnkgKyBy
ZWFkUmVjdC5oZWlnaHQ7Ci0gICAgcmVhZEJveC5mcm9udCA9IDA7Ci0gICAgcmVhZEJveC5iYWNr
ID0gMTsKLQotICAgIC8vIEQzRDExIG5lZWRzIGRlcHRoLXN0ZW5jaWwgQ29weVN1YnJlc291cmNl
UmVnaW9ucyB0byBoYXZlIGEgTlVMTCBwU3JjQm94Ci0gICAgLy8gV2UgYWxzbyByZXF1aXJlIGNv
bXBsZXRlIGZyYW1lYnVmZmVyIGNvcGllcyBmb3IgZGVwdGgtc3RlbmNpbCBibGl0LgotICAgIEQz
RDExX0JPWCAqcFNyY0JveCA9IHdob2xlQnVmZmVyQ29weSA/IE5VTEwgOiAmcmVhZEJveDsKLQot
ICAgIG1EZXZpY2VDb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24oZHJhd1RleHR1cmUsIGRy
YXdTdWJyZXNvdXJjZSwgZHJhd1JlY3QueCwgZHJhd1JlY3QueSwgMCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRUZXh0dXJlLCByZWFkU3VicmVzb3VyY2Us
IHBTcmNCb3gpOwotCi0gICAgU2FmZVJlbGVhc2UocmVhZFRleHR1cmUpOwotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLUlEM0QxMVRleHR1cmUyRCAqUmVuZGVyZXIxMTo6cmVzb2x2ZU11bHRpc2Ft
cGxlZFRleHR1cmUoSUQzRDExVGV4dHVyZTJEICpzb3VyY2UsIHVuc2lnbmVkIGludCBzdWJyZXNv
dXJjZSkKLXsKLSAgICBEM0QxMV9URVhUVVJFMkRfREVTQyB0ZXh0dXJlRGVzYzsKLSAgICBzb3Vy
Y2UtPkdldERlc2MoJnRleHR1cmVEZXNjKTsKLQotICAgIGlmICh0ZXh0dXJlRGVzYy5TYW1wbGVE
ZXNjLkNvdW50ID4gMSkKLSAgICB7Ci0gICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHJlc29s
dmVEZXNjOwotICAgICAgICByZXNvbHZlRGVzYy5XaWR0aCA9IHRleHR1cmVEZXNjLldpZHRoOwot
ICAgICAgICByZXNvbHZlRGVzYy5IZWlnaHQgPSB0ZXh0dXJlRGVzYy5IZWlnaHQ7Ci0gICAgICAg
IHJlc29sdmVEZXNjLk1pcExldmVscyA9IDE7Ci0gICAgICAgIHJlc29sdmVEZXNjLkFycmF5U2l6
ZSA9IDE7Ci0gICAgICAgIHJlc29sdmVEZXNjLkZvcm1hdCA9IHRleHR1cmVEZXNjLkZvcm1hdDsK
LSAgICAgICAgcmVzb2x2ZURlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7Ci0gICAgICAgIHJlc29s
dmVEZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7Ci0gICAgICAgIHJlc29sdmVEZXNjLlVzYWdl
ID0gdGV4dHVyZURlc2MuVXNhZ2U7Ci0gICAgICAgIHJlc29sdmVEZXNjLkJpbmRGbGFncyA9IHRl
eHR1cmVEZXNjLkJpbmRGbGFnczsKLSAgICAgICAgcmVzb2x2ZURlc2MuQ1BVQWNjZXNzRmxhZ3Mg
PSAwOwotICAgICAgICByZXNvbHZlRGVzYy5NaXNjRmxhZ3MgPSAwOwotCi0gICAgICAgIElEM0Qx
MVRleHR1cmUyRCAqcmVzb2x2ZVRleHR1cmUgPSBOVUxMOwotICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IG1EZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmcmVzb2x2ZURlc2MsIE5VTEwsICZyZXNvbHZl
VGV4dHVyZSk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAg
ICAgICAgRVJSKCJGYWlsZWQgdG8gY3JlYXRlIGEgbXVsdGlzYW1wbGUgcmVzb2x2ZSB0ZXh0dXJl
LCBIUkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAg
ICAgICAgfQotCi0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5SZXNvbHZlU3VicmVzb3VyY2UocmVz
b2x2ZVRleHR1cmUsIDAsIHNvdXJjZSwgc3VicmVzb3VyY2UsIHRleHR1cmVEZXNjLkZvcm1hdCk7
Ci0gICAgICAgIHJldHVybiByZXNvbHZlVGV4dHVyZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsK
LSAgICAgICAgc291cmNlLT5BZGRSZWYoKTsKLSAgICAgICAgcmV0dXJuIHNvdXJjZTsKLSAgICB9
Ci19Ci0KLWJvb2wgUmVuZGVyZXIxMTo6Z2V0TFVJRChMVUlEICphZGFwdGVyTHVpZCkgY29uc3QK
LXsKLSAgICBhZGFwdGVyTHVpZC0+SGlnaFBhcnQgPSAwOwotICAgIGFkYXB0ZXJMdWlkLT5Mb3dQ
YXJ0ID0gMDsKLQotICAgIGlmICghbUR4Z2lBZGFwdGVyKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIERYR0lfQURBUFRFUl9ERVNDIGFkYXB0ZXJEZXNjOwotICAg
IGlmIChGQUlMRUQobUR4Z2lBZGFwdGVyLT5HZXREZXNjKCZhZGFwdGVyRGVzYykpKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgICphZGFwdGVyTHVpZCA9IGFkYXB0
ZXJEZXNjLkFkYXB0ZXJMdWlkOwotICAgIHJldHVybiB0cnVlOwotfQotCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVy
MTEuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVu
ZGVyZXIxMS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODZmNDg1ZjQwYzU4Yzk0
MGRjOWEzZTRhZmM1ODI1YjRlMjllOGJmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvUmVuZGVyZXIxMS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzU4ICswLDAgQEAKLS8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KLS8vCi0KLS8vIFJlbmRlcmVyMTEuaDogRGVmaW5lcyBhIGJhY2stZW5kIHNwZWNp
ZmljIGNsYXNzIGZvciB0aGUgRDNEMTEgcmVuZGVyZXIuCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JF
TkRFUkVSX1JFTkRFUkVSMTFfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUkVS
MTFfSF8KLQotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL2FuZ2xldHlwZXMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKLQotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9SZW5kZXJTdGF0ZUNhY2hlLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL0lucHV0TGF5b3V0Q2FjaGUuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVu
ZGVyVGFyZ2V0LmgiCi0KLW5hbWVzcGFjZSBnbAotewotY2xhc3MgUmVuZGVyYnVmZmVyOwotfQot
Ci1uYW1lc3BhY2UgcngKLXsKLQotY2xhc3MgVmVydGV4RGF0YU1hbmFnZXI7Ci1jbGFzcyBJbmRl
eERhdGFNYW5hZ2VyOwotY2xhc3MgU3RyZWFtaW5nSW5kZXhCdWZmZXJJbnRlcmZhY2U7Ci0KLWVu
dW0KLXsKLSAgICBNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SU19EM0QxMSA9IDEwMjQsCi0gICAg
TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SU19EM0QxMSA9IDEwMjQKLX07Ci0KLWNsYXNzIFJl
bmRlcmVyMTEgOiBwdWJsaWMgUmVuZGVyZXIKLXsKLSAgcHVibGljOgotICAgIFJlbmRlcmVyMTEo
ZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBIREMgaERjKTsKLSAgICB2aXJ0dWFsIH5SZW5kZXJlcjEx
KCk7Ci0KLSAgICBzdGF0aWMgUmVuZGVyZXIxMSAqbWFrZVJlbmRlcmVyMTEoUmVuZGVyZXIgKnJl
bmRlcmVyKTsKLQotICAgIHZpcnR1YWwgRUdMaW50IGluaXRpYWxpemUoKTsKLSAgICB2aXJ0dWFs
IGJvb2wgcmVzZXREZXZpY2UoKTsKLQotICAgIHZpcnR1YWwgaW50IGdlbmVyYXRlQ29uZmlncyhD
b25maWdEZXNjICoqY29uZmlnRGVzY0xpc3QpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVDb25m
aWdzKENvbmZpZ0Rlc2MgKmNvbmZpZ0Rlc2NMaXN0KTsKLQotICAgIHZpcnR1YWwgdm9pZCBzeW5j
KGJvb2wgYmxvY2spOwotCi0gICAgdmlydHVhbCBTd2FwQ2hhaW4gKmNyZWF0ZVN3YXBDaGFpbihI
V05EIHdpbmRvdywgSEFORExFIHNoYXJlSGFuZGxlLCBHTGVudW0gYmFja0J1ZmZlckZvcm1hdCwg
R0xlbnVtIGRlcHRoQnVmZmVyRm9ybWF0KTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRTYW1wbGVy
U3RhdGUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRleCwgY29uc3QgZ2w6OlNhbXBsZXJT
dGF0ZSAmc2FtcGxlcik7Ci0gICAgdmlydHVhbCB2b2lkIHNldFRleHR1cmUoZ2w6OlNhbXBsZXJU
eXBlIHR5cGUsIGludCBpbmRleCwgZ2w6OlRleHR1cmUgKnRleHR1cmUpOwotCi0gICAgdmlydHVh
bCB2b2lkIHNldFJhc3Rlcml6ZXJTdGF0ZShjb25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZyYXN0
ZXJTdGF0ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHNldEJsZW5kU3RhdGUoY29uc3QgZ2w6OkJsZW5k
U3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xvciAmYmxlbmRDb2xvciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlTWFzayk7Ci0gICAgdmly
dHVhbCB2b2lkIHNldERlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0
ZSAmZGVwdGhTdGVuY2lsU3RhdGUsIGludCBzdGVuY2lsUmVmLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgc3RlbmNpbEJhY2tSZWYsIGJvb2wgZnJvbnRGYWNlQ0NX
KTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRTY2lzc29yUmVjdGFuZ2xlKGNvbnN0IGdsOjpSZWN0
YW5nbGUgJnNjaXNzb3IsIGJvb2wgZW5hYmxlZCk7Ci0gICAgdmlydHVhbCBib29sIHNldFZpZXdw
b3J0KGNvbnN0IGdsOjpSZWN0YW5nbGUgJnZpZXdwb3J0LCBmbG9hdCB6TmVhciwgZmxvYXQgekZh
ciwgR0xlbnVtIGRyYXdNb2RlLCBHTGVudW0gZnJvbnRGYWNlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGlnbm9yZVZpZXdwb3J0KTsKLQotICAgIHZpcnR1YWwgYm9vbCBhcHBs
eVByaW1pdGl2ZVR5cGUoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQpOwotICAgIHZpcnR1YWwg
Ym9vbCBhcHBseVJlbmRlclRhcmdldChnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHlTaGFkZXJzKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5KTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlVbmlmb3JtcyhnbDo6UHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSwgZ2w6OlVuaWZvcm1BcnJheSAqdW5pZm9ybUFycmF5KTsKLSAgICB2aXJ0
dWFsIEdMZW51bSBhcHBseVZlcnRleEJ1ZmZlcihnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSwgZ2w6OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0ZXhBdHRyaWJ1dGVzW10sIEdMaW50IGZpcnN0
LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcyk7Ci0gICAgdmlydHVhbCBHTGVudW0g
YXBwbHlJbmRleEJ1ZmZlcihjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1l
bnRBcnJheUJ1ZmZlciwgR0xzaXplaSBjb3VudCwgR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBU
cmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pOwotCi0gICAgdmlydHVhbCB2b2lkIGRyYXdB
cnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBH
TGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJy
YXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbywgR0xzaXplaSBp
bnN0YW5jZXMpOwotCi0gICAgdmlydHVhbCB2b2lkIGNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFt
ZXRlcnMgJmNsZWFyUGFyYW1zLCBnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKTsKLQotICAg
IHZpcnR1YWwgdm9pZCBtYXJrQWxsU3RhdGVEaXJ0eSgpOwotCi0gICAgLy8gbG9zdCBkZXZpY2UK
LSAgICB2b2lkIG5vdGlmeURldmljZUxvc3QoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNEZXZpY2VM
b3N0KCk7Ci0gICAgdmlydHVhbCBib29sIHRlc3REZXZpY2VMb3N0KGJvb2wgbm90aWZ5KTsKLSAg
ICB2aXJ0dWFsIGJvb2wgdGVzdERldmljZVJlc2V0dGFibGUoKTsKLQotICAgIC8vIFJlbmRlcmVy
IGNhcGFiaWxpdGllcwotICAgIHZpcnR1YWwgRFdPUkQgZ2V0QWRhcHRlclZlbmRvcigpIGNvbnN0
OwotICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgZ2V0UmVuZGVyZXJEZXNjcmlwdGlvbigpIGNvbnN0
OwotICAgIHZpcnR1YWwgR1VJRCBnZXRBZGFwdGVySWRlbnRpZmllcigpIGNvbnN0OwotCi0gICAg
dmlydHVhbCBib29sIGdldEJHUkFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwotICAgIHZpcnR1YWwg
Ym9vbCBnZXREWFQxVGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUM1Rl
eHR1cmVTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldERYVDVUZXh0dXJlU3VwcG9ydCgp
OwotICAgIHZpcnR1YWwgYm9vbCBnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpOwotICAgIHZpcnR1YWwg
Ym9vbCBnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5k
ZXJhYmxlKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KGJvb2wg
KmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSk7Ci0gICAgdmlydHVhbCBib29sIGdldEx1bWlu
YW5jZVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZUFscGhh
VGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhU
ZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0OwotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1h
eENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVk
IGludCBnZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29uc3Q7Ci0gICAgdmlydHVh
bCB1bnNpZ25lZCBpbnQgZ2V0UmVzZXJ2ZWRGcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhGcmFnbWVudFVuaWZvcm1WZWN0
b3JzKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmFyeWluZ1ZlY3Rv
cnMoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpIGNvbnN0
OwotICAgIHZpcnR1YWwgYm9vbCBnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGJvb2wgZ2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgZ2V0VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBmbG9hdCBnZXRUZXh0dXJlTWF4QW5pc290cm9weSgpIGNvbnN0OwotICAgIHZpcnR1YWwg
Ym9vbCBnZXRTaGFyZUhhbmRsZVN1cHBvcnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0
RGVyaXZhdGl2ZUluc3RydWN0aW9uU3VwcG9ydCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBn
ZXRQb3N0U3ViQnVmZmVyU3VwcG9ydCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBpbnQgZ2V0TWFq
b3JTaGFkZXJNb2RlbCgpIGNvbnN0OwotICAgIHZpcnR1YWwgZmxvYXQgZ2V0TWF4UG9pbnRTaXpl
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgZ2V0TWF4Vmlld3BvcnREaW1lbnNpb24oKSBjb25z
dDsKLSAgICB2aXJ0dWFsIGludCBnZXRNYXhUZXh0dXJlV2lkdGgoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGludCBnZXRNYXhUZXh0dXJlSGVpZ2h0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdl
dDMyQml0SW5kZXhTdXBwb3J0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgZ2V0TWluU3dhcElu
dGVydmFsKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgZ2V0TWF4U3dhcEludGVydmFsKCkgY29u
c3Q7Ci0KLSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpIGNvbnN0
OwotICAgIGludCBnZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhEWEdJX0ZPUk1BVCBmb3JtYXQs
IHVuc2lnbmVkIGludCByZXF1ZXN0ZWQpIGNvbnN0OwotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBp
bnQgZ2V0TWF4UmVuZGVyVGFyZ2V0cygpIGNvbnN0OwotCi0gICAgLy8gUGl4ZWwgb3BlcmF0aW9u
cwotICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UyRCAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc291cmNlKTsKLSAgICB2
aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3Vi
ZSAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzb3VyY2UpOwotCi0gICAgdmly
dHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBn
bDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIEdMaW50IGxldmVsKTsKLSAgICB2aXJ0dWFsIGJvb2wg
Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5n
bGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2VDdWJlICpzdG9yYWdlLCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCk7Ci0KLSAgICBib29s
IGNvcHlUZXh0dXJlKElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc291cmNlLCBjb25zdCBnbDo6
UmVjdGFuZ2xlICZzb3VyY2VBcmVhLCB1bnNpZ25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVk
IGludCBzb3VyY2VIZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICBJRDNEMTFSZW5kZXJUYXJn
ZXRWaWV3ICpkZXN0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkZXN0QXJlYSwgdW5zaWduZWQgaW50
IGRlc3RXaWR0aCwgdW5zaWduZWQgaW50IGRlc3RIZWlnaHQsIEdMZW51bSBkZXN0Rm9ybWF0KTsK
LQotICAgIHZpcnR1YWwgYm9vbCBibGl0UmVjdChnbDo6RnJhbWVidWZmZXIgKnJlYWRUYXJnZXQs
IGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRSZWN0LCBnbDo6RnJhbWVidWZmZXIgKmRyYXdUYXJn
ZXQsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRyYXdSZWN0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERlcHRoU3RlbmNpbCk7Ci0gICAg
dmlydHVhbCB2b2lkIHJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xp
bnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgb3V0
cHV0UGl0Y2gsIGJvb2wgcGFja1JldmVyc2VSb3dPcmRlciwgR0xpbnQgcGFja0FsaWdubWVudCwg
dm9pZCogcGl4ZWxzKTsKLQotICAgIC8vIFJlbmRlclRhcmdldCBjcmVhdGlvbgotICAgIHZpcnR1
YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJnZXQoU3dhcENoYWluICpzd2FwQ2hhaW4s
IGJvb2wgZGVwdGgpOwotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJn
ZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMs
IGJvb2wgZGVwdGgpOwotCi0gICAgLy8gU2hhZGVyIG9wZXJhdGlvbnMKLSAgICB2aXJ0dWFsIFNo
YWRlckV4ZWN1dGFibGUgKmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXpl
X3QgbGVuZ3RoLCByeDo6U2hhZGVyVHlwZSB0eXBlKTsKLSAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1
dGFibGUgKmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNo
YXIgKnNoYWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsIEQzRFdvcmthcm91bmRUeXBlIHdv
cmthcm91bmQpOwotCi0gICAgLy8gSW1hZ2Ugb3BlcmF0aW9ucwotICAgIHZpcnR1YWwgSW1hZ2Ug
KmNyZWF0ZUltYWdlKCk7Ci0gICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKEltYWdlICpk
ZXN0LCBJbWFnZSAqc291cmNlKTsKLSAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVU
ZXh0dXJlU3RvcmFnZTJEKFN3YXBDaGFpbiAqc3dhcENoYWluKTsKLSAgICB2aXJ0dWFsIFRleHR1
cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEdMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0
ZVRleHR1cmVTdG9yYWdlQ3ViZShpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdM
ZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKTsKLQotICAgIC8vIEJ1
ZmZlciBjcmVhdGlvbgotICAgIHZpcnR1YWwgVmVydGV4QnVmZmVyICpjcmVhdGVWZXJ0ZXhCdWZm
ZXIoKTsKLSAgICB2aXJ0dWFsIEluZGV4QnVmZmVyICpjcmVhdGVJbmRleEJ1ZmZlcigpOwotICAg
IHZpcnR1YWwgQnVmZmVyU3RvcmFnZSAqY3JlYXRlQnVmZmVyU3RvcmFnZSgpOwotCi0gICAgLy8g
UXVlcnkgYW5kIEZlbmNlIGNyZWF0aW9uCi0gICAgdmlydHVhbCBRdWVyeUltcGwgKmNyZWF0ZVF1
ZXJ5KEdMZW51bSB0eXBlKTsKLSAgICB2aXJ0dWFsIEZlbmNlSW1wbCAqY3JlYXRlRmVuY2UoKTsK
LQotICAgIC8vIEQzRDExLXJlbmRlcmVyIHNwZWNpZmljIG1ldGhvZHMKLSAgICBJRDNEMTFEZXZp
Y2UgKmdldERldmljZSgpIHsgcmV0dXJuIG1EZXZpY2U7IH0KLSAgICBJRDNEMTFEZXZpY2VDb250
ZXh0ICpnZXREZXZpY2VDb250ZXh0KCkgeyByZXR1cm4gbURldmljZUNvbnRleHQ7IH07Ci0gICAg
SURYR0lGYWN0b3J5ICpnZXREeGdpRmFjdG9yeSgpIHsgcmV0dXJuIG1EeGdpRmFjdG9yeTsgfTsK
LQotICAgIGJvb2wgZ2V0UmVuZGVyVGFyZ2V0UmVzb3VyY2UoZ2w6OlJlbmRlcmJ1ZmZlciAqY29s
b3JidWZmZXIsIHVuc2lnbmVkIGludCAqc3VicmVzb3VyY2VJbmRleCwgSUQzRDExVGV4dHVyZTJE
ICoqcmVzb3VyY2UpOwotICAgIHZvaWQgdW5hcHBseVJlbmRlclRhcmdldHMoKTsKLSAgICB2b2lk
IHNldE9uZVRpbWVSZW5kZXJUYXJnZXQoSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqcmVuZGVyVGFy
Z2V0Vmlldyk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0TFVJRChMVUlEICphZGFwdGVyTHVpZCkg
Y29uc3Q7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVy
ZXIxMSk7Ci0KLSAgICB2b2lkIGRyYXdMaW5lTG9vcChHTHNpemVpIGNvdW50LCBHTGVudW0gdHlw
ZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBpbnQgbWluSW5kZXgsIGdsOjpCdWZmZXIgKmVsZW1l
bnRBcnJheUJ1ZmZlcik7Ci0gICAgdm9pZCBkcmF3VHJpYW5nbGVGYW4oR0xzaXplaSBjb3VudCwg
R0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgaW50IG1pbkluZGV4LCBnbDo6QnVm
ZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGludCBpbnN0YW5jZXMpOwotCi0gICAgdm9pZCByZWFk
VGV4dHVyZURhdGEoSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCB1bnNpZ25lZCBpbnQgc3ViUmVz
b3VyY2UsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmFyZWEsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgb3V0cHV0UGl0Y2gsIGJvb2wg
cGFja1JldmVyc2VSb3dPcmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBwYWNr
QWxpZ25tZW50LCB2b2lkICpwaXhlbHMpOwotCi0gICAgdm9pZCBtYXNrZWRDbGVhcihjb25zdCBn
bDo6Q2xlYXJQYXJhbWV0ZXJzICZjbGVhclBhcmFtcywgYm9vbCB1c2luZ0V4dGVuZGVkRHJhd0J1
ZmZlcnMpOwotICAgIHJ4OjpSYW5nZSBnZXRWaWV3cG9ydEJvdW5kcygpIGNvbnN0OwotCi0gICAg
Ym9vbCBibGl0UmVuZGVyYnVmZmVyUmVjdChjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFkUmVjdCwg
Y29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsIFJlbmRlclRhcmdldCAqcmVhZFJlbmRlclRh
cmdldCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJUYXJnZXQgKmRyYXdS
ZW5kZXJUYXJnZXQsIGJvb2wgd2hvbGVCdWZmZXJDb3B5KTsKLSAgICBJRDNEMTFUZXh0dXJlMkQg
KnJlc29sdmVNdWx0aXNhbXBsZWRUZXh0dXJlKElEM0QxMVRleHR1cmUyRCAqc291cmNlLCB1bnNp
Z25lZCBpbnQgc3VicmVzb3VyY2UpOwotCi0gICAgSE1PRFVMRSBtRDNkMTFNb2R1bGU7Ci0gICAg
SE1PRFVMRSBtRHhnaU1vZHVsZTsKLSAgICBIREMgbURjOwotCi0gICAgYm9vbCBtRGV2aWNlTG9z
dDsKLQotICAgIHZvaWQgaW5pdGlhbGl6ZURldmljZSgpOwotICAgIHZvaWQgcmVsZWFzZURldmlj
ZVJlc291cmNlcygpOwotICAgIGludCBnZXRNaW5vclNoYWRlck1vZGVsKCkgY29uc3Q7Ci0gICAg
dm9pZCByZWxlYXNlKCk7Ci0KLSAgICBSZW5kZXJTdGF0ZUNhY2hlIG1TdGF0ZUNhY2hlOwotCi0g
ICAgLy8gU3VwcG9ydCBmbGFncwotICAgIGJvb2wgbUZsb2F0MTZUZXh0dXJlU3VwcG9ydDsKLSAg
ICBib29sIG1GbG9hdDE2RmlsdGVyU3VwcG9ydDsKLSAgICBib29sIG1GbG9hdDE2UmVuZGVyU3Vw
cG9ydDsKLQotICAgIGJvb2wgbUZsb2F0MzJUZXh0dXJlU3VwcG9ydDsKLSAgICBib29sIG1GbG9h
dDMyRmlsdGVyU3VwcG9ydDsKLSAgICBib29sIG1GbG9hdDMyUmVuZGVyU3VwcG9ydDsKLQotICAg
IGJvb2wgbURYVDFUZXh0dXJlU3VwcG9ydDsKLSAgICBib29sIG1EWFQzVGV4dHVyZVN1cHBvcnQ7
Ci0gICAgYm9vbCBtRFhUNVRleHR1cmVTdXBwb3J0OwotCi0gICAgYm9vbCBtRGVwdGhUZXh0dXJl
U3VwcG9ydDsKLQotICAgIC8vIE11bHRpc2FtcGxlIGZvcm1hdCBzdXBwb3J0Ci0gICAgc3RydWN0
IE11bHRpc2FtcGxlU3VwcG9ydEluZm8KLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBxdWFs
aXR5TGV2ZWxzW0QzRDExX01BWF9NVUxUSVNBTVBMRV9TQU1QTEVfQ09VTlRdOwotICAgIH07Ci0K
LSAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxEWEdJX0ZPUk1BVCwgTXVsdGlzYW1wbGVT
dXBwb3J0SW5mbywgc3RkOjpoYXNoPGludD4gPiBNdWx0aXNhbXBsZVN1cHBvcnRNYXA7Ci0gICAg
TXVsdGlzYW1wbGVTdXBwb3J0TWFwIG1NdWx0aXNhbXBsZVN1cHBvcnRNYXA7Ci0KLSAgICB1bnNp
Z25lZCBpbnQgbU1heFN1cHBvcnRlZFNhbXBsZXM7Ci0KLSAgICAvLyBjdXJyZW50IHJlbmRlciB0
YXJnZXQgc3RhdGVzCi0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFs
c1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSU107Ci0gICAgdW5zaWduZWQgaW50
IG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWw7Ci0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVkU3Rl
bmNpbGJ1ZmZlclNlcmlhbDsKLSAgICBib29sIG1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZDsKLSAg
ICBib29sIG1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQ7Ci0gICAgcng6OlJlbmRlclRhcmdl
dDo6RGVzYyBtUmVuZGVyVGFyZ2V0RGVzYzsKLSAgICB1bnNpZ25lZCBpbnQgbUN1ckRlcHRoU2l6
ZTsKLSAgICB1bnNpZ25lZCBpbnQgbUN1clN0ZW5jaWxTaXplOwotCi0gICAgLy8gQ3VycmVudGx5
IGFwcGxpZWQgc2FtcGxlciBzdGF0ZXMKLSAgICBib29sIG1Gb3JjZVNldFZlcnRleFNhbXBsZXJT
dGF0ZXNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU107
Ci0gICAgZ2w6OlNhbXBsZXJTdGF0ZSBtQ3VyVmVydGV4U2FtcGxlclN0YXRlc1tnbDo6SU1QTEVN
RU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKLQotICAgIGJvb2wgbUZv
cmNlU2V0UGl4ZWxTYW1wbGVyU3RhdGVzW2dsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUU107Ci0g
ICAgZ2w6OlNhbXBsZXJTdGF0ZSBtQ3VyUGl4ZWxTYW1wbGVyU3RhdGVzW2dsOjpNQVhfVEVYVFVS
RV9JTUFHRV9VTklUU107Ci0KLSAgICAvLyBDdXJyZW50bHkgYXBwbGllZCB0ZXh0dXJlcwotICAg
IHVuc2lnbmVkIGludCBtQ3VyVmVydGV4VGV4dHVyZVNlcmlhbHNbZ2w6OklNUExFTUVOVEFUSU9O
X01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU107Ci0gICAgdW5zaWduZWQgaW50IG1DdXJQ
aXhlbFRleHR1cmVTZXJpYWxzW2dsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUU107Ci0KLSAgICAv
LyBDdXJyZW50bHkgYXBwbGllZCBibGVuZCBzdGF0ZQotICAgIGJvb2wgbUZvcmNlU2V0QmxlbmRT
dGF0ZTsKLSAgICBnbDo6QmxlbmRTdGF0ZSBtQ3VyQmxlbmRTdGF0ZTsKLSAgICBnbDo6Q29sb3Ig
bUN1ckJsZW5kQ29sb3I7Ci0gICAgdW5zaWduZWQgaW50IG1DdXJTYW1wbGVNYXNrOwotCi0gICAg
Ly8gQ3VycmVudGx5IGFwcGxpZWQgcmFzdGVyaXplciBzdGF0ZQotICAgIGJvb2wgbUZvcmNlU2V0
UmFzdGVyU3RhdGU7Ci0gICAgZ2w6OlJhc3Rlcml6ZXJTdGF0ZSBtQ3VyUmFzdGVyU3RhdGU7Ci0K
LSAgICAvLyBDdXJyZW50bHkgYXBwbGllZCBkZXB0aCBzdGVuY2lsIHN0YXRlCi0gICAgYm9vbCBt
Rm9yY2VTZXREZXB0aFN0ZW5jaWxTdGF0ZTsKLSAgICBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgbUN1
ckRlcHRoU3RlbmNpbFN0YXRlOwotICAgIGludCBtQ3VyU3RlbmNpbFJlZjsKLSAgICBpbnQgbUN1
clN0ZW5jaWxCYWNrUmVmOwotCi0gICAgLy8gQ3VycmVudGx5IGFwcGxpZWQgc2Npc3NvciByZWN0
YW5nbGUKLSAgICBib29sIG1Gb3JjZVNldFNjaXNzb3I7Ci0gICAgYm9vbCBtU2Npc3NvckVuYWJs
ZWQ7Ci0gICAgZ2w6OlJlY3RhbmdsZSBtQ3VyU2Npc3NvcjsKLQotICAgIC8vIEN1cnJlbnRseSBh
cHBsaWVkIHZpZXdwb3J0Ci0gICAgYm9vbCBtRm9yY2VTZXRWaWV3cG9ydDsKLSAgICBnbDo6UmVj
dGFuZ2xlIG1DdXJWaWV3cG9ydDsKLSAgICBmbG9hdCBtQ3VyTmVhcjsKLSAgICBmbG9hdCBtQ3Vy
RmFyOwotCi0gICAgLy8gQ3VycmVudGx5IGFwcGxpZWQgcHJpbWl0aXZlIHRvcG9sb2d5Ci0gICAg
RDNEMTFfUFJJTUlUSVZFX1RPUE9MT0dZIG1DdXJyZW50UHJpbWl0aXZlVG9wb2xvZ3k7Ci0KLSAg
ICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRJQlNlcmlhbDsKLSAgICB1bnNpZ25lZCBpbnQgbUFwcGxp
ZWRTdG9yYWdlSUJTZXJpYWw7Ci0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVkSUJPZmZzZXQ7Ci0K
LSAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRQcm9ncmFtQmluYXJ5U2VyaWFsOwotICAgIGJvb2wg
bUlzR2VvbWV0cnlTaGFkZXJBY3RpdmU7Ci0KLSAgICBkeF9WZXJ0ZXhDb25zdGFudHMgbVZlcnRl
eENvbnN0YW50czsKLSAgICBkeF9WZXJ0ZXhDb25zdGFudHMgbUFwcGxpZWRWZXJ0ZXhDb25zdGFu
dHM7Ci0gICAgSUQzRDExQnVmZmVyICptRHJpdmVyQ29uc3RhbnRCdWZmZXJWUzsKLSAgICBJRDNE
MTFCdWZmZXIgKm1DdXJyZW50VmVydGV4Q29uc3RhbnRCdWZmZXI7Ci0KLSAgICBkeF9QaXhlbENv
bnN0YW50cyBtUGl4ZWxDb25zdGFudHM7Ci0gICAgZHhfUGl4ZWxDb25zdGFudHMgbUFwcGxpZWRQ
aXhlbENvbnN0YW50czsKLSAgICBJRDNEMTFCdWZmZXIgKm1Ecml2ZXJDb25zdGFudEJ1ZmZlclBT
OwotICAgIElEM0QxMUJ1ZmZlciAqbUN1cnJlbnRQaXhlbENvbnN0YW50QnVmZmVyOwotCi0gICAg
SUQzRDExQnVmZmVyICptQ3VycmVudEdlb21ldHJ5Q29uc3RhbnRCdWZmZXI7Ci0KLSAgICAvLyBW
ZXJ0ZXgsIGluZGV4IGFuZCBpbnB1dCBsYXlvdXRzCi0gICAgVmVydGV4RGF0YU1hbmFnZXIgKm1W
ZXJ0ZXhEYXRhTWFuYWdlcjsKLSAgICBJbmRleERhdGFNYW5hZ2VyICptSW5kZXhEYXRhTWFuYWdl
cjsKLSAgICBJbnB1dExheW91dENhY2hlIG1JbnB1dExheW91dENhY2hlOwotCi0gICAgU3RyZWFt
aW5nSW5kZXhCdWZmZXJJbnRlcmZhY2UgKm1MaW5lTG9vcElCOwotICAgIFN0cmVhbWluZ0luZGV4
QnVmZmVySW50ZXJmYWNlICptVHJpYW5nbGVGYW5JQjsKLQotICAgIC8vIFRleHR1cmUgY29weSBy
ZXNvdXJjZXMKLSAgICBib29sIG1Db3B5UmVzb3VyY2VzSW5pdGlhbGl6ZWQ7Ci0gICAgSUQzRDEx
QnVmZmVyICptQ29weVZCOwotICAgIElEM0QxMVNhbXBsZXJTdGF0ZSAqbUNvcHlTYW1wbGVyOwot
ICAgIElEM0QxMUlucHV0TGF5b3V0ICptQ29weUlMOwotICAgIElEM0QxMVZlcnRleFNoYWRlciAq
bUNvcHlWUzsKLSAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUNvcHlSR0JBUFM7Ci0gICAgSUQzRDEx
UGl4ZWxTaGFkZXIgKm1Db3B5UkdCUFM7Ci0gICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1Db3B5THVt
UFM7Ci0gICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1Db3B5THVtQWxwaGFQUzsKLQotICAgIC8vIE1h
c2tlZCBjbGVhciByZXNvdXJjZXMKLSAgICBib29sIG1DbGVhclJlc291cmNlc0luaXRpYWxpemVk
OwotICAgIElEM0QxMUJ1ZmZlciAqbUNsZWFyVkI7Ci0gICAgSUQzRDExSW5wdXRMYXlvdXQgKm1D
bGVhcklMOwotICAgIElEM0QxMVZlcnRleFNoYWRlciAqbUNsZWFyVlM7Ci0gICAgSUQzRDExUGl4
ZWxTaGFkZXIgKm1DbGVhclNpbmdsZVBTOwotICAgIElEM0QxMVBpeGVsU2hhZGVyICptQ2xlYXJN
dWx0aXBsZVBTOwotICAgIElEM0QxMVJhc3Rlcml6ZXJTdGF0ZSAqbUNsZWFyU2Npc3NvclJTOwot
ICAgIElEM0QxMVJhc3Rlcml6ZXJTdGF0ZSAqbUNsZWFyTm9TY2lzc29yUlM7Ci0KLSAgICAvLyBT
eW5jIHF1ZXJ5Ci0gICAgSUQzRDExUXVlcnkgKm1TeW5jUXVlcnk7Ci0KLSAgICBJRDNEMTFEZXZp
Y2UgKm1EZXZpY2U7Ci0gICAgRDNEX0ZFQVRVUkVfTEVWRUwgbUZlYXR1cmVMZXZlbDsKLSAgICBJ
RDNEMTFEZXZpY2VDb250ZXh0ICptRGV2aWNlQ29udGV4dDsKLSAgICBJRFhHSUFkYXB0ZXIgKm1E
eGdpQWRhcHRlcjsKLSAgICBEWEdJX0FEQVBURVJfREVTQyBtQWRhcHRlckRlc2NyaXB0aW9uOwot
ICAgIGNoYXIgbURlc2NyaXB0aW9uWzEyOF07Ci0gICAgSURYR0lGYWN0b3J5ICptRHhnaUZhY3Rv
cnk7Ci0KLSAgICAvLyBDYWNoZWQgZGV2aWNlIGNhcHMKLSAgICBib29sIG1CR1JBVGV4dHVyZVN1
cHBvcnQ7Ci19OwotCi19Ci0jZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUkVSMTFf
SF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvUmVuZGVyZXI5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvUmVuZGVyZXI5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZTg5ZjhiZGRjOGQ2Y2ZlYjEyOGE0MzNlZDBmN2UxNGVmZThkMzExOS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyOS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwz
MjY0ICswLDAgQEAKLSNpbmNsdWRlICJwcmVjb21waWxlZC5oIgotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LQotLy8gUmVuZGVyZXI5LmNwcDogSW1wbGVtZW50cyBhIGJhY2stZW5kIHNwZWNpZmljIGNsYXNz
IGZvciB0aGUgRDNEOSByZW5kZXJlci4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJl
LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL1JlbmRlcmJ1ZmZlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5Lmgi
Ci0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0luZGV4RGF0YU1hbmFnZXIuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXI5LmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL3JlbmRlcmVyOV91dGlscy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9TaGFkZXJFeGVjdXRhYmxlOS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9Td2Fw
Q2hhaW45LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlOS5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZTkuaCIKLSNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvQmxpdC5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5k
ZXJUYXJnZXQ5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlcjku
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhCdWZmZXI5LmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2U5LmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL1F1ZXJ5OS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9GZW5j
ZTkuaCIKLQotI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiCi0KLSNpbmNsdWRlICJ0aGlyZF9w
YXJ0eS90cmFjZV9ldmVudC90cmFjZV9ldmVudC5oIgotCi0vLyBDYW4gYWxzbyBiZSBlbmFibGVk
IGJ5IGRlZmluaW5nIEZPUkNFX1JFRl9SQVNUIGluIHRoZSBwcm9qZWN0J3MgcHJlZGVmaW5lZCBt
YWNyb3MKLSNkZWZpbmUgUkVGX1JBU1QgMAotCi0vLyBUaGUgIkRlYnVnIFRoaXMgUGl4ZWwuLi4i
IGZlYXR1cmUgaW4gUElYIG9mdGVuIGZhaWxzIHdoZW4gdXNpbmcgdGhlCi0vLyBEM0Q5RXggaW50
ZXJmYWNlcy4gIEluIG9yZGVyIHRvIGdldCBkZWJ1ZyBwaXhlbCB0byB3b3JrIG9uIGEgVmlzdGEv
V2luIDcKLS8vIG1hY2hpbmUsIGRlZmluZSAiQU5HTEVfRU5BQkxFX0QzRDlFWD0wIiBpbiB5b3Vy
IHByb2plY3QgZmlsZS4KLSNpZiAhZGVmaW5lZChBTkdMRV9FTkFCTEVfRDNEOUVYKQotLy8gRW5h
YmxlcyB1c2Ugb2YgdGhlIElEaXJlY3QzRDlFeCBpbnRlcmZhY2UsIHdoZW4gYXZhaWxhYmxlCi0j
ZGVmaW5lIEFOR0xFX0VOQUJMRV9EM0Q5RVggMQotI2VuZGlmIC8vICFkZWZpbmVkKEFOR0xFX0VO
QUJMRV9EM0Q5RVgpCi0KLW5hbWVzcGFjZSByeAotewotc3RhdGljIGNvbnN0IEQzREZPUk1BVCBS
ZW5kZXJUYXJnZXRGb3JtYXRzW10gPQotICAgIHsKLSAgICAgICAgRDNERk1UX0ExUjVHNUI1LAot
ICAgIC8vICBEM0RGTVRfQTJSMTBHMTBCMTAsICAgLy8gVGhlIGNvbG9yX3JhbXAgY29uZm9ybWFu
Y2UgdGVzdCB1c2VzIFJlYWRQaXhlbHMgd2l0aCBVTlNJR05FRF9CWVRFIGNhdXNpbmcgaXQgdG8g
dGhpbmsgdGhhdCByZW5kZXJpbmcgc2tpcHBlZCBhIGNvbG91ciB2YWx1ZS4KLSAgICAgICAgRDNE
Rk1UX0E4UjhHOEI4LAotICAgICAgICBEM0RGTVRfUjVHNkI1LAotICAgIC8vICBEM0RGTVRfWDFS
NUc1QjUsICAgICAgLy8gSGFzIG5vIGNvbXBhdGlibGUgT3BlbkdMIEVTIHJlbmRlcmJ1ZmZlciBm
b3JtYXQKLSAgICAgICAgRDNERk1UX1g4UjhHOEI4Ci0gICAgfTsKLQotc3RhdGljIGNvbnN0IEQz
REZPUk1BVCBEZXB0aFN0ZW5jaWxGb3JtYXRzW10gPQotICAgIHsKLSAgICAgICAgRDNERk1UX1VO
S05PV04sCi0gICAgLy8gIEQzREZNVF9EMTZfTE9DS0FCTEUsCi0gICAgICAgIEQzREZNVF9EMzIs
Ci0gICAgLy8gIEQzREZNVF9EMTVTMSwKLSAgICAgICAgRDNERk1UX0QyNFM4LAotICAgICAgICBE
M0RGTVRfRDI0WDgsCi0gICAgLy8gIEQzREZNVF9EMjRYNFM0LAotICAgICAgICBEM0RGTVRfRDE2
LAotICAgIC8vICBEM0RGTVRfRDMyRl9MT0NLQUJMRSwKLSAgICAvLyAgRDNERk1UX0QyNEZTOAot
ICAgIH07Ci0KLWVudW0KLXsKLSAgICBNQVhfVkVSVEVYX0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOSA9
IDI1NiwKLSAgICBNQVhfUElYRUxfQ09OU1RBTlRfVkVDVE9SU19TTTIgPSAzMiwKLSAgICBNQVhf
UElYRUxfQ09OU1RBTlRfVkVDVE9SU19TTTMgPSAyMjQsCi0gICAgTUFYX1ZBUllJTkdfVkVDVE9S
U19TTTIgPSA4LAotICAgIE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00zID0gMTAsCi0KLSAgICBNQVhf
VEVYVFVSRV9JTUFHRV9VTklUU19WVEZfU00zID0gNAotfTsKLQotUmVuZGVyZXI5OjpSZW5kZXJl
cjkoZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBIREMgaERjLCBib29sIHNvZnR3YXJlRGV2aWNlKSA6
IFJlbmRlcmVyKGRpc3BsYXkpLCBtRGMoaERjKSwgbVNvZnR3YXJlRGV2aWNlKHNvZnR3YXJlRGV2
aWNlKQotewotICAgIG1EM2Q5TW9kdWxlID0gTlVMTDsKLQotICAgIG1EM2Q5ID0gTlVMTDsKLSAg
ICBtRDNkOUV4ID0gTlVMTDsKLSAgICBtRGV2aWNlID0gTlVMTDsKLSAgICBtRGV2aWNlRXggPSBO
VUxMOwotICAgIG1EZXZpY2VXaW5kb3cgPSBOVUxMOwotICAgIG1CbGl0ID0gTlVMTDsKLQotICAg
IG1BZGFwdGVyID0gRDNEQURBUFRFUl9ERUZBVUxUOwotCi0gICAgI2lmIFJFRl9SQVNUID09IDEg
fHwgZGVmaW5lZChGT1JDRV9SRUZfUkFTVCkKLSAgICAgICAgbURldmljZVR5cGUgPSBEM0RERVZU
WVBFX1JFRjsKLSAgICAjZWxzZQotICAgICAgICBtRGV2aWNlVHlwZSA9IEQzRERFVlRZUEVfSEFM
OwotICAgICNlbmRpZgotCi0gICAgbURldmljZUxvc3QgPSBmYWxzZTsKLQotICAgIG1NYXhTdXBw
b3J0ZWRTYW1wbGVzID0gMDsKLQotICAgIG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgPSBOVUxMOwot
Ci0gICAgbVZlcnRleERhdGFNYW5hZ2VyID0gTlVMTDsKLSAgICBtSW5kZXhEYXRhTWFuYWdlciA9
IE5VTEw7Ci0gICAgbUxpbmVMb29wSUIgPSBOVUxMOwotCi0gICAgbU1heE51bGxDb2xvcmJ1ZmZl
ckxSVSA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fTlVMTF9DT0xPUkJVRkZFUl9D
QUNIRV9FTlRSSUVTOyBpKyspCi0gICAgewotICAgICAgICBtTnVsbENvbG9yYnVmZmVyQ2FjaGVb
aV0ubHJ1Q291bnQgPSAwOwotICAgICAgICBtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0ud2lkdGgg
PSAwOwotICAgICAgICBtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0uaGVpZ2h0ID0gMDsKLSAgICAg
ICAgbU51bGxDb2xvcmJ1ZmZlckNhY2hlW2ldLmJ1ZmZlciA9IE5VTEw7Ci0gICAgfQotfQotCi1S
ZW5kZXJlcjk6On5SZW5kZXJlcjkoKQotewotICAgIHJlbGVhc2VEZXZpY2VSZXNvdXJjZXMoKTsK
LQotICAgIGlmIChtRGV2aWNlKQotICAgIHsKLSAgICAgICAgLy8gSWYgdGhlIGRldmljZSBpcyBs
b3N0LCByZXNldCBpdCBmaXJzdCB0byBwcmV2ZW50IGxlYXZpbmcgdGhlIGRyaXZlciBpbiBhbiB1
bnN0YWJsZSBzdGF0ZQotICAgICAgICBpZiAodGVzdERldmljZUxvc3QoZmFsc2UpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXNldERldmljZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgbURl
dmljZS0+UmVsZWFzZSgpOwotICAgICAgICBtRGV2aWNlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBp
ZiAobURldmljZUV4KQotICAgIHsKLSAgICAgICAgbURldmljZUV4LT5SZWxlYXNlKCk7Ci0gICAg
ICAgIG1EZXZpY2VFeCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1EM2Q5KQotICAgIHsKLSAg
ICAgICAgbUQzZDktPlJlbGVhc2UoKTsKLSAgICAgICAgbUQzZDkgPSBOVUxMOwotICAgIH0KLQot
ICAgIGlmIChtRGV2aWNlV2luZG93KQotICAgIHsKLSAgICAgICAgRGVzdHJveVdpbmRvdyhtRGV2
aWNlV2luZG93KTsKLSAgICAgICAgbURldmljZVdpbmRvdyA9IE5VTEw7Ci0gICAgfQotCi0gICAg
aWYgKG1EM2Q5RXgpCi0gICAgewotICAgICAgICBtRDNkOUV4LT5SZWxlYXNlKCk7Ci0gICAgICAg
IG1EM2Q5RXggPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtRDNkOU1vZHVsZSkKLSAgICB7Ci0g
ICAgICAgIG1EM2Q5TW9kdWxlID0gTlVMTDsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIW1NdWx0aVNh
bXBsZVN1cHBvcnQuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZSBbXSBtTXVsdGlTYW1w
bGVTdXBwb3J0LmJlZ2luKCktPnNlY29uZDsKLSAgICAgICAgbU11bHRpU2FtcGxlU3VwcG9ydC5l
cmFzZShtTXVsdGlTYW1wbGVTdXBwb3J0LmJlZ2luKCkpOwotICAgIH0KLX0KLQotUmVuZGVyZXI5
ICpSZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjkoUmVuZGVyZXIgKnJlbmRlcmVyKQotewotICAgIEFT
U0VSVChIQVNfRFlOQU1JQ19UWVBFKHJ4OjpSZW5kZXJlcjkqLCByZW5kZXJlcikpOwotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxyeDo6UmVuZGVyZXI5Kj4ocmVuZGVyZXIpOwotfQotCi1FR0xpbnQg
UmVuZGVyZXI5Ojppbml0aWFsaXplKCkKLXsKLSAgICBpZiAoIWluaXRpYWxpemVDb21waWxlcigp
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7Ci0gICAgfQotCi0g
ICAgaWYgKG1Tb2Z0d2FyZURldmljZSkKLSAgICB7Ci0gICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1
IiwgIkdldE1vZHVsZUhhbmRsZV9zd2lmdHNoYWRlciIpOwotICAgICAgICBtRDNkOU1vZHVsZSA9
IEdldE1vZHVsZUhhbmRsZShURVhUKCJzd2lmdHNoYWRlcl9kM2Q5LmRsbCIpKTsKLSAgICB9Ci0g
ICAgZWxzZQotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiR2V0TW9kdWxlSGFu
ZGxlX2QzZDkiKTsKLSAgICAgICAgbUQzZDlNb2R1bGUgPSBHZXRNb2R1bGVIYW5kbGUoVEVYVCgi
ZDNkOS5kbGwiKSk7Ci0gICAgfQotCi0gICAgaWYgKG1EM2Q5TW9kdWxlID09IE5VTEwpCi0gICAg
ewotICAgICAgICBFUlIoIk5vIEQzRDkgbW9kdWxlIGZvdW5kIC0gYWJvcnRpbmchXG4iKTsKLSAg
ICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7Ci0gICAgfQotCi0gICAgdHlwZWRlZiBI
UkVTVUxUIChXSU5BUEkgKkRpcmVjdDNEQ3JlYXRlOUV4RnVuYykoVUlOVCwgSURpcmVjdDNEOUV4
KiopOwotICAgIERpcmVjdDNEQ3JlYXRlOUV4RnVuYyBEaXJlY3QzRENyZWF0ZTlFeFB0ciA9IHJl
aW50ZXJwcmV0X2Nhc3Q8RGlyZWN0M0RDcmVhdGU5RXhGdW5jPihHZXRQcm9jQWRkcmVzcyhtRDNk
OU1vZHVsZSwgIkRpcmVjdDNEQ3JlYXRlOUV4IikpOwotCi0gICAgLy8gVXNlIERpcmVjdDNEOUV4
IGlmIGF2YWlsYWJsZS4gQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIHZlcnNpb24gaXMgbGVzcwot
ICAgIC8vIGluY2xpbmVkIHRvIHJlcG9ydCBhIGxvc3QgY29udGV4dCwgZm9yIGV4YW1wbGUgd2hl
biB0aGUgdXNlciBzd2l0Y2hlcwotICAgIC8vIGRlc2t0b3AuIERpcmVjdDNEOUV4IGlzIGF2YWls
YWJsZSBpbiBXaW5kb3dzIFZpc3RhIGFuZCBsYXRlciBpZiBzdWl0YWJsZSBkcml2ZXJzIGFyZSBh
dmFpbGFibGUuCi0gICAgaWYgKEFOR0xFX0VOQUJMRV9EM0Q5RVggJiYgRGlyZWN0M0RDcmVhdGU5
RXhQdHIgJiYgU1VDQ0VFREVEKERpcmVjdDNEQ3JlYXRlOUV4UHRyKEQzRF9TREtfVkVSU0lPTiwg
Jm1EM2Q5RXgpKSkKLSAgICB7Ci0gICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgIkQzZDlFeF9R
dWVyeUludGVyZmFjZSIpOwotICAgICAgICBBU1NFUlQobUQzZDlFeCk7Ci0gICAgICAgIG1EM2Q5
RXgtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JRGlyZWN0M0Q5LCByZWludGVycHJldF9jYXN0PHZvaWQq
Kj4oJm1EM2Q5KSk7Ci0gICAgICAgIEFTU0VSVChtRDNkOSk7Ci0gICAgfQotICAgIGVsc2UKLSAg
ICB7Ci0gICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgIkRpcmVjdDNEQ3JlYXRlOSIpOwotICAg
ICAgICBtRDNkOSA9IERpcmVjdDNEQ3JlYXRlOShEM0RfU0RLX1ZFUlNJT04pOwotICAgIH0KLQot
ICAgIGlmICghbUQzZDkpCi0gICAgewotICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgRDNE
OSBkZXZpY2UgLSBhYm9ydGluZyFcbiIpOwotICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFM
SVpFRDsKLSAgICB9Ci0KLSAgICBpZiAobURjICE9IE5VTEwpCi0gICAgewotICAgIC8vICBVTklN
UExFTUVOVEVEKCk7ICAgLy8gRklYTUU6IERldGVybWluZSB3aGljaCBhZGFwdGVyIGluZGV4IHRo
ZSBkZXZpY2UgY29udGV4dCBjb3JyZXNwb25kcyB0bwotICAgIH0KLQotICAgIEhSRVNVTFQgcmVz
dWx0OwotCi0gICAgLy8gR2l2ZSB1cCBvbiBnZXR0aW5nIGRldmljZSBjYXBzIGFmdGVyIGFib3V0
IG9uZSBzZWNvbmQuCi0gICAgewotICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJHZXREZXZp
Y2VDYXBzIik7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7ICsraSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmVzdWx0ID0gbUQzZDktPkdldERldmljZUNhcHMobUFkYXB0ZXIsIG1E
ZXZpY2VUeXBlLCAmbURldmljZUNhcHMpOwotICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1
bHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0ID09IEQzREVSUl9OT1RBVkFJTEFCTEUpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU2xlZXAoMTAwKTsgICAvLyBHaXZlIHRoZSBk
cml2ZXIgc29tZSB0aW1lIHRvIGluaXRpYWxpemUvcmVjb3ZlcgotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZSBpZiAoRkFJTEVEKHJlc3VsdCkpICAgLy8gRDNERVJSX09VVE9GVklERU9N
RU1PUlksIEVfT1VUT0ZNRU1PUlksIEQzREVSUl9JTlZBTElEREVWSUNFLCBvciBhbm90aGVyIGVy
cm9yIHdlIGNhbid0IHJlY292ZXIgZnJvbQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IEVSUigiZmFpbGVkIHRvIGdldCBkZXZpY2UgY2FwcyAoMHgleClcbiIsIHJlc3VsdCk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobURldmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJzaW9u
IDwgRDNEUFNfVkVSU0lPTigyLCAwKSkKLSAgICB7Ci0gICAgICAgIEVSUigiUmVuZGVyZXIgZG9l
cyBub3Qgc3VwcG9ydCBQUyAyLjAuIGFib3J0aW5nIVxuIik7Ci0gICAgICAgIHJldHVybiBFR0xf
Tk9UX0lOSVRJQUxJWkVEOwotICAgIH0KLQotICAgIC8vIFdoZW4gRGlyZWN0WDkgaXMgcnVubmlu
ZyB3aXRoIGFuIG9sZGVyIERpcmVjdFg4IGRyaXZlciwgYSBTdHJldGNoUmVjdCBmcm9tIGEgcmVn
dWxhciB0ZXh0dXJlIHRvIGEgcmVuZGVyIHRhcmdldCB0ZXh0dXJlIGlzIG5vdCBzdXBwb3J0ZWQu
Ci0gICAgLy8gVGhpcyBpcyByZXF1aXJlZCBieSBUZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRlclRh
cmdldC4KLSAgICBpZiAoKG1EZXZpY2VDYXBzLkRldkNhcHMyICYgRDNEREVWQ0FQUzJfQ0FOX1NU
UkVUQ0hSRUNUX0ZST01fVEVYVFVSRVMpID09IDApCi0gICAgewotICAgICAgICBFUlIoIlJlbmRl
cmVyIGRvZXMgbm90IHN1cHBvcnQgc3RyZXRjdHJlY3QgZnJvbSB0ZXh0dXJlcyFcbiIpOwotICAg
ICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAg
IFRSQUNFX0VWRU5UMCgiZ3B1IiwgIkdldEFkYXB0ZXJJZGVudGlmaWVyIik7Ci0gICAgICAgIG1E
M2Q5LT5HZXRBZGFwdGVySWRlbnRpZmllcihtQWRhcHRlciwgMCwgJm1BZGFwdGVySWRlbnRpZmll
cik7Ci0gICAgfQotCi0gICAgLy8gQVRJIGNhcmRzIG9uIFhQIGhhdmUgcHJvYmxlbXMgd2l0aCBu
b24tcG93ZXItb2YtdHdvIHRleHR1cmVzLgotICAgIG1TdXBwb3J0c05vblBvd2VyMlRleHR1cmVz
ID0gIShtRGV2aWNlQ2Fwcy5UZXh0dXJlQ2FwcyAmIEQzRFBURVhUVVJFQ0FQU19QT1cyKSAmJgot
ICAgICAgICAhKG1EZXZpY2VDYXBzLlRleHR1cmVDYXBzICYgRDNEUFRFWFRVUkVDQVBTX0NVQkVN
QVBfUE9XMikgJiYKLSAgICAgICAgIShtRGV2aWNlQ2Fwcy5UZXh0dXJlQ2FwcyAmIEQzRFBURVhU
VVJFQ0FQU19OT05QT1cyQ09ORElUSU9OQUwpICYmCi0gICAgICAgICEoZ2V0Q29tcGFyYWJsZU9T
VmVyc2lvbigpIDwgdmVyc2lvbldpbmRvd3NWaXN0YSAmJiBtQWRhcHRlcklkZW50aWZpZXIuVmVu
ZG9ySWQgPT0gVkVORE9SX0lEX0FNRCk7Ci0KLSAgICAvLyBNdXN0IHN1cHBvcnQgYSBtaW5pbXVt
IG9mIDI6MSBhbmlzb3Ryb3B5IGZvciBtYXggYW5pc290cm9weSB0byBiZSBjb25zaWRlcmVkIHN1
cHBvcnRlZCwgcGVyIHRoZSBzcGVjCi0gICAgbVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJv
cHkgPSAoKG1EZXZpY2VDYXBzLlJhc3RlckNhcHMgJiBEM0RQUkFTVEVSQ0FQU19BTklTT1RST1BZ
KSAmJiAobURldmljZUNhcHMuTWF4QW5pc290cm9weSA+PSAyKSk7Ci0KLSAgICBtTWluU3dhcElu
dGVydmFsID0gNDsKLSAgICBtTWF4U3dhcEludGVydmFsID0gMDsKLQotICAgIGlmIChtRGV2aWNl
Q2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX0lNTUVESUFU
RSkKLSAgICB7Ci0gICAgICAgIG1NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dhcElu
dGVydmFsLCAwKTsKLSAgICAgICAgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2Fw
SW50ZXJ2YWwsIDApOwotICAgIH0KLSAgICBpZiAobURldmljZUNhcHMuUHJlc2VudGF0aW9uSW50
ZXJ2YWxzICYgRDNEUFJFU0VOVF9JTlRFUlZBTF9PTkUpCi0gICAgewotICAgICAgICBtTWluU3dh
cEludGVydmFsID0gc3RkOjptaW4obU1pblN3YXBJbnRlcnZhbCwgMSk7Ci0gICAgICAgIG1NYXhT
d2FwSW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4U3dhcEludGVydmFsLCAxKTsKLSAgICB9Ci0gICAg
aWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJW
QUxfVFdPKQotICAgIHsKLSAgICAgICAgbU1pblN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5T
d2FwSW50ZXJ2YWwsIDIpOwotICAgICAgICBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1h
eFN3YXBJbnRlcnZhbCwgMik7Ci0gICAgfQotICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRp
b25JbnRlcnZhbHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX1RIUkVFKQotICAgIHsKLSAgICAgICAg
bU1pblN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDMpOwotICAgICAg
ICBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgMyk7Ci0gICAg
fQotICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVTRU5U
X0lOVEVSVkFMX0ZPVVIpCi0gICAgewotICAgICAgICBtTWluU3dhcEludGVydmFsID0gc3RkOjpt
aW4obU1pblN3YXBJbnRlcnZhbCwgNCk7Ci0gICAgICAgIG1NYXhTd2FwSW50ZXJ2YWwgPSBzdGQ6
Om1heChtTWF4U3dhcEludGVydmFsLCA0KTsKLSAgICB9Ci0KLSAgICBpbnQgbWF4ID0gMDsKLSAg
ICB7Ci0gICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgImdldE11bHRpU2FtcGxlU3VwcG9ydCIp
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShSZW5kZXJU
YXJnZXRGb3JtYXRzKTsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBib29sICptdWx0aXNh
bXBsZUFycmF5ID0gbmV3IGJvb2xbRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUyArIDFdOwotICAg
ICAgICAgICAgZ2V0TXVsdGlTYW1wbGVTdXBwb3J0KFJlbmRlclRhcmdldEZvcm1hdHNbaV0sIG11
bHRpc2FtcGxlQXJyYXkpOwotICAgICAgICAgICAgbU11bHRpU2FtcGxlU3VwcG9ydFtSZW5kZXJU
YXJnZXRGb3JtYXRzW2ldXSA9IG11bHRpc2FtcGxlQXJyYXk7Ci0KLSAgICAgICAgICAgIGZvciAo
aW50IGogPSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTOyBqID49IDA7IC0taikKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobXVsdGlzYW1wbGVBcnJheVtqXSAmJiBqICE9IEQz
RE1VTFRJU0FNUExFX05PTk1BU0tBQkxFICYmIGogPiBtYXgpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBtYXggPSBqOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQwKCJn
cHUiLCAiZ2V0TXVsdGlTYW1wbGVTdXBwb3J0MiIpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IEFycmF5U2l6ZShEZXB0aFN0ZW5jaWxGb3JtYXRzKTsgKytpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAoRGVwdGhTdGVuY2lsRm9ybWF0c1tpXSA9PSBEM0RGTVRfVU5L
Tk9XTikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgYm9vbCAqbXVs
dGlzYW1wbGVBcnJheSA9IG5ldyBib29sW0QzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVMgKyAxXTsK
LSAgICAgICAgICAgIGdldE11bHRpU2FtcGxlU3VwcG9ydChEZXB0aFN0ZW5jaWxGb3JtYXRzW2ld
LCBtdWx0aXNhbXBsZUFycmF5KTsKLSAgICAgICAgICAgIG1NdWx0aVNhbXBsZVN1cHBvcnRbRGVw
dGhTdGVuY2lsRm9ybWF0c1tpXV0gPSBtdWx0aXNhbXBsZUFycmF5OwotCi0gICAgICAgICAgICBm
b3IgKGludCBqID0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgaiA+PSAwOyAtLWopCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG11bHRpc2FtcGxlQXJyYXlbal0gJiYgaiAh
PSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSAmJiBqID4gbWF4KQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgbWF4ID0gajsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9
IG1heDsKLQotICAgIHN0YXRpYyBjb25zdCBUQ0hBUiB3aW5kb3dOYW1lW10gPSBURVhUKCJBbmds
ZUhpZGRlbldpbmRvdyIpOwotICAgIHN0YXRpYyBjb25zdCBUQ0hBUiBjbGFzc05hbWVbXSA9IFRF
WFQoIlNUQVRJQyIpOwotCi0gICAgewotICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJDcmVh
dGVXaW5kb3dFeCIpOwotICAgICAgICBtRGV2aWNlV2luZG93ID0gQ3JlYXRlV2luZG93RXgoV1Nf
RVhfTk9BQ1RJVkFURSwgY2xhc3NOYW1lLCB3aW5kb3dOYW1lLCBXU19ESVNBQkxFRCB8IFdTX1BP
UFVQLCAwLCAwLCAxLCAxLCBIV05EX01FU1NBR0UsIE5VTEwsIEdldE1vZHVsZUhhbmRsZShOVUxM
KSwgTlVMTCk7Ci0gICAgfQotCi0gICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJh
bWV0ZXJzID0gZ2V0RGVmYXVsdFByZXNlbnRQYXJhbWV0ZXJzKCk7Ci0gICAgRFdPUkQgYmVoYXZp
b3JGbGFncyA9IEQzRENSRUFURV9GUFVfUFJFU0VSVkUgfCBEM0RDUkVBVEVfTk9XSU5ET1dDSEFO
R0VTOwotCi0gICAgewotICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJEM2Q5X0NyZWF0ZURl
dmljZSIpOwotICAgICAgICByZXN1bHQgPSBtRDNkOS0+Q3JlYXRlRGV2aWNlKG1BZGFwdGVyLCBt
RGV2aWNlVHlwZSwgbURldmljZVdpbmRvdywgYmVoYXZpb3JGbGFncyB8IEQzRENSRUFURV9IQVJE
V0FSRV9WRVJURVhQUk9DRVNTSU5HIHwgRDNEQ1JFQVRFX1BVUkVERVZJQ0UsICZwcmVzZW50UGFy
YW1ldGVycywgJm1EZXZpY2UpOwotICAgIH0KLSAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRP
RlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RF
UlJfREVWSUNFTE9TVCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBFR0xfQkFEX0FMTE9DOwotICAg
IH0KLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIFRSQUNFX0VWRU5U
MCgiZ3B1IiwgIkQzZDlfQ3JlYXRlRGV2aWNlMiIpOwotICAgICAgICByZXN1bHQgPSBtRDNkOS0+
Q3JlYXRlRGV2aWNlKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgbURldmljZVdpbmRvdywgYmVoYXZp
b3JGbGFncyB8IEQzRENSRUFURV9TT0ZUV0FSRV9WRVJURVhQUk9DRVNTSU5HLCAmcHJlc2VudFBh
cmFtZXRlcnMsICZtRGV2aWNlKTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1P
UlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcmVzdWx0ID09IEQzREVSUl9OT1RBVkFJ
TEFCTEUgfHwgcmVzdWx0ID09IEQzREVSUl9ERVZJQ0VMT1NUKTsKLSAgICAgICAgICAgIHJldHVy
biBFR0xfQkFEX0FMTE9DOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1EM2Q5RXgpCi0g
ICAgewotICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJtRGV2aWNlX1F1ZXJ5SW50ZXJmYWNl
Iik7Ci0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JRGlyZWN0
M0REZXZpY2U5RXgsICh2b2lkKiopICZtRGV2aWNlRXgpOwotICAgICAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUi
LCAiU2hhZGVyQ2FjaGUgaW5pdGlhbGl6ZSIpOwotICAgICAgICBtVmVydGV4U2hhZGVyQ2FjaGUu
aW5pdGlhbGl6ZShtRGV2aWNlKTsKLSAgICAgICAgbVBpeGVsU2hhZGVyQ2FjaGUuaW5pdGlhbGl6
ZShtRGV2aWNlKTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBvY2NsdXNpb24gcXVlcnkgc3VwcG9y
dAotICAgIElEaXJlY3QzRFF1ZXJ5OSAqb2NjbHVzaW9uUXVlcnkgPSBOVUxMOwotICAgIHsKLSAg
ICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiZGV2aWNlX0NyZWF0ZVF1ZXJ5Iik7Ci0gICAgICAg
IGlmIChTVUNDRUVERUQobURldmljZS0+Q3JlYXRlUXVlcnkoRDNEUVVFUllUWVBFX09DQ0xVU0lP
TiwgJm9jY2x1c2lvblF1ZXJ5KSkgJiYgb2NjbHVzaW9uUXVlcnkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG9jY2x1c2lvblF1ZXJ5LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBtT2NjbHVzaW9u
UXVlcnlTdXBwb3J0ID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1PY2NsdXNpb25RdWVyeVN1cHBvcnQgPSBmYWxzZTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIC8vIENoZWNrIGV2ZW50IHF1ZXJ5IHN1cHBvcnQKLSAgICBJRGlyZWN0M0RR
dWVyeTkgKmV2ZW50UXVlcnkgPSBOVUxMOwotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQwKCJn
cHUiLCAiZGV2aWNlX0NyZWF0ZVF1ZXJ5MiIpOwotICAgICAgICBpZiAoU1VDQ0VFREVEKG1EZXZp
Y2UtPkNyZWF0ZVF1ZXJ5KEQzRFFVRVJZVFlQRV9FVkVOVCwgJmV2ZW50UXVlcnkpKSAmJiBldmVu
dFF1ZXJ5KQotICAgICAgICB7Ci0gICAgICAgICAgICBldmVudFF1ZXJ5LT5SZWxlYXNlKCk7Ci0g
ICAgICAgICAgICBtRXZlbnRRdWVyeVN1cHBvcnQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbUV2ZW50UXVlcnlTdXBwb3J0ID0gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1v
ZGU7Ci0gICAgbUQzZDktPkdldEFkYXB0ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnRE
aXNwbGF5TW9kZSk7Ci0KLSAgICAvLyBDaGVjayB2ZXJ0ZXggdGV4dHVyZSBzdXBwb3J0Ci0gICAg
Ly8gT25seSBEaXJlY3QzRCAxMCByZWFkeSBkZXZpY2VzIHN1cHBvcnQgYWxsIHRoZSBuZWNlc3Nh
cnkgdmVydGV4IHRleHR1cmUgZm9ybWF0cy4KLSAgICAvLyBXZSB0ZXN0IHRoaXMgdXNpbmcgRDNE
OSBieSBjaGVja2luZyBzdXBwb3J0IGZvciB0aGUgUjE2RiBmb3JtYXQuCi0gICAgbVZlcnRleFRl
eHR1cmVTdXBwb3J0ID0gbURldmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJzaW9uID49IEQzRFBTX1ZF
UlNJT04oMywgMCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQz
ZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3Bs
YXlNb2RlLkZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEQzRFVTQUdFX1FVRVJZX1ZFUlRFWFRFWFRVUkUsIEQzRFJU
WVBFX1RFWFRVUkUsIEQzREZNVF9SMTZGKSk7Ci0KLSAgICAvLyBDaGVjayBkZXB0aCB0ZXh0dXJl
IHN1cHBvcnQKLSAgICAvLyB3ZSB1c2UgSU5UWiBmb3IgZGVwdGggdGV4dHVyZXMgaW4gRGlyZWN0
M0Q5Ci0gICAgLy8gd2UgYWxzbyB3YW50IE5VTEwgdGV4dHVyZSBzdXBwb3J0IHRvIGVuc3VyZSB0
aGUgd2UgY2FuIG1ha2UgZGVwdGgtb25seSBGQk9zCi0gICAgLy8gc2VlIGh0dHA6Ly9hcmFzLXAu
aW5mby90ZXh0cy9EM0Q5R1BVSGFja3MuaHRtbAotICAgIG1EZXB0aFRleHR1cmVTdXBwb3J0ID0g
U1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUs
IGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFVTQUdFX0RFUFRIU1RFTkNJTCwg
RDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0lOVFopKSAmJgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmlj
ZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFVTQUdFX1JFTkRFUlRB
UkdFVCwgRDNEUlRZUEVfU1VSRkFDRSwgRDNERk1UX05VTEwpKTsKLQotICAgIC8vIENoZWNrIDMy
IGJpdCBmbG9hdGluZyBwb2ludCB0ZXh0dXJlIHN1cHBvcnQKLSAgICBtRmxvYXQzMkZpbHRlclN1
cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2
aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUVVFUllfRklMVEVS
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0EzMkIzMkczMlIzMkYpKSAmJgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3Jt
YXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RV
U0FHRV9RVUVSWV9GSUxURVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9DVUJFVEVYVFVSRSwgRDNERk1UX0Ez
MkIzMkczMlIzMkYpKTsKLQotICAgIG1GbG9hdDMyUmVuZGVyU3VwcG9ydCA9IFNVQ0NFRURFRCht
RDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlz
cGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9U
RVhUVVJFLCBEM0RGTVRfQTMyQjMyRzMyUjMyRikpICYmCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmlj
ZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEQzRFJUWVBFX0NVQkVURVhUVVJFLCBEM0RGTVRfQTMyQjMyRzMyUjMyRikpOwotCi0g
ICAgaWYgKCFtRmxvYXQzMkZpbHRlclN1cHBvcnQgJiYgIW1GbG9hdDMyUmVuZGVyU3VwcG9ydCkK
LSAgICB7Ci0gICAgICAgIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDkt
PkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlN
b2RlLkZvcm1hdCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0EzMkIz
MkczMlIzMkYpKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VDQ0VFREVE
KG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnRE
aXNwbGF5TW9kZS5Gb3JtYXQsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX0NVQkVURVhUVVJFLCBE
M0RGTVRfQTMyQjMyRzMyUjMyRikpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBt
RmxvYXQzMlRleHR1cmVTdXBwb3J0ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayAxNiBi
aXQgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZSBzdXBwb3J0Ci0gICAgbUZsb2F0MTZGaWx0ZXJTdXBw
b3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmlj
ZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1FVRVJZX0ZJTFRFUiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9BMTZCMTZHMTZSMTZGKSkgJiYKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0
KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNB
R0VfUVVFUllfRklMVEVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfQ1VCRVRFWFRVUkUsIEQzREZNVF9BMTZC
MTZHMTZSMTZGKSk7Ci0KLSAgICBtRmxvYXQxNlJlbmRlclN1cHBvcnQgPSBTVUNDRUVERUQobUQz
ZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3Bs
YXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUkVOREVSVEFSR0VULAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfVEVY
VFVSRSwgRDNERk1UX0ExNkIxNkcxNlIxNkYpKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VU
eXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBEM0RSVFlQRV9DVUJFVEVYVFVSRSwgRDNERk1UX0ExNkIxNkcxNlIxNkYpKTsKLQotICAg
IGlmICghbUZsb2F0MTZGaWx0ZXJTdXBwb3J0ICYmICFtRmxvYXQxNlJlbmRlclN1cHBvcnQpCi0g
ICAgewotICAgICAgICBtRmxvYXQxNlRleHR1cmVTdXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5D
aGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9k
ZS5Gb3JtYXQsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9BMTZCMTZH
MTZSMTZGKSkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVQ0NFRURFRCht
RDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlz
cGxheU1vZGUuRm9ybWF0LCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9DVUJFVEVYVFVSRSwgRDNE
Rk1UX0ExNkIxNkcxNlIxNkYpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgbUZs
b2F0MTZUZXh0dXJlU3VwcG9ydCA9IHRydWU7Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgRFhUIHRl
eHR1cmUgc3VwcG9ydAotICAgIG1EWFQxVGV4dHVyZVN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDkt
PkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlN
b2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0RYVDEpKTsKLSAgICBtRFhU
M1RleHR1cmVTdXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRh
cHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsIEQzRFJUWVBF
X1RFWFRVUkUsIEQzREZNVF9EWFQzKSk7Ci0gICAgbURYVDVUZXh0dXJlU3VwcG9ydCA9IFNVQ0NF
RURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJy
ZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfRFhUNSkp
OwotCi0gICAgLy8gQ2hlY2sgbHVtaW5hbmNlW2FscGhhXSB0ZXh0dXJlIHN1cHBvcnQKLSAgICBt
THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9y
bWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwg
RDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0w4KSk7Ci0gICAgbUx1bWluYW5jZUFscGhhVGV4dHVy
ZVN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBt
RGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVS
RSwgRDNERk1UX0E4TDgpKTsKLQotICAgIGluaXRpYWxpemVEZXZpY2UoKTsKLQotICAgIHJldHVy
biBFR0xfU1VDQ0VTUzsKLX0KLQotLy8gZG8gYW55IG9uZS10aW1lIGRldmljZSBpbml0aWFsaXph
dGlvbgotLy8gTk9URTogdGhpcyBpcyBhbHNvIG5lZWRlZCBhZnRlciBhIGRldmljZSBsb3N0L3Jl
c2V0Ci0vLyB0byByZXNldCB0aGUgc2NlbmUgc3RhdHVzIGFuZCBlbnN1cmUgdGhlIGRlZmF1bHQg
c3RhdGVzIGFyZSByZXNldC4KLXZvaWQgUmVuZGVyZXI5Ojppbml0aWFsaXplRGV2aWNlKCkKLXsK
LSAgICAvLyBQZXJtYW5lbnQgbm9uLWRlZmF1bHQgc3RhdGVzCi0gICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfUE9JTlRTUFJJVEVFTkFCTEUsIFRSVUUpOwotICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0xBU1RQSVhFTCwgRkFMU0UpOwotCi0gICAgaWYgKG1EZXZpY2VD
YXBzLlBpeGVsU2hhZGVyVmVyc2lvbiA+PSBEM0RQU19WRVJTSU9OKDMsIDApKQotICAgIHsKLSAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfUE9JTlRTSVpFX01BWCwgKERXT1JE
JiltRGV2aWNlQ2Fwcy5NYXhQb2ludFNpemUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19QT0lOVFNJWkVfTUFYLCAweDNGODAw
MDAwKTsgICAvLyAxLjBmCi0gICAgfQotCi0gICAgbWFya0FsbFN0YXRlRGlydHkoKTsKLQotICAg
IG1TY2VuZVN0YXJ0ZWQgPSBmYWxzZTsKLQotICAgIEFTU0VSVCghbUJsaXQgJiYgIW1WZXJ0ZXhE
YXRhTWFuYWdlciAmJiAhbUluZGV4RGF0YU1hbmFnZXIpOwotICAgIG1CbGl0ID0gbmV3IEJsaXQo
dGhpcyk7Ci0gICAgbVZlcnRleERhdGFNYW5hZ2VyID0gbmV3IHJ4OjpWZXJ0ZXhEYXRhTWFuYWdl
cih0aGlzKTsKLSAgICBtSW5kZXhEYXRhTWFuYWdlciA9IG5ldyByeDo6SW5kZXhEYXRhTWFuYWdl
cih0aGlzKTsKLX0KLQotRDNEUFJFU0VOVF9QQVJBTUVURVJTIFJlbmRlcmVyOTo6Z2V0RGVmYXVs
dFByZXNlbnRQYXJhbWV0ZXJzKCkKLXsKLSAgICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2Vu
dFBhcmFtZXRlcnMgPSB7MH07Ci0KLSAgICAvLyBUaGUgZGVmYXVsdCBzd2FwIGNoYWluIGlzIG5l
dmVyIGFjdHVhbGx5IHVzZWQuIFN1cmZhY2Ugd2lsbCBjcmVhdGUgYSBuZXcgc3dhcCBjaGFpbiB3
aXRoIHRoZSBwcm9wZXIgcGFyYW1ldGVycy4KLSAgICBwcmVzZW50UGFyYW1ldGVycy5BdXRvRGVw
dGhTdGVuY2lsRm9ybWF0ID0gRDNERk1UX1VOS05PV047Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMu
QmFja0J1ZmZlckNvdW50ID0gMTsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyRm9y
bWF0ID0gRDNERk1UX1VOS05PV047Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldp
ZHRoID0gMTsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0ID0gMTsKLSAg
ICBwcmVzZW50UGFyYW1ldGVycy5FbmFibGVBdXRvRGVwdGhTdGVuY2lsID0gRkFMU0U7Ci0gICAg
cHJlc2VudFBhcmFtZXRlcnMuRmxhZ3MgPSAwOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLmhEZXZp
Y2VXaW5kb3cgPSBtRGV2aWNlV2luZG93OwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2Ft
cGxlUXVhbGl0eSA9IDA7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVUeXBlID0g
RDNETVVMVElTQU1QTEVfTk9ORTsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5QcmVzZW50YXRpb25J
bnRlcnZhbCA9IEQzRFBSRVNFTlRfSU5URVJWQUxfREVGQVVMVDsKLSAgICBwcmVzZW50UGFyYW1l
dGVycy5Td2FwRWZmZWN0ID0gRDNEU1dBUEVGRkVDVF9ESVNDQVJEOwotICAgIHByZXNlbnRQYXJh
bWV0ZXJzLldpbmRvd2VkID0gVFJVRTsKLQotICAgIHJldHVybiBwcmVzZW50UGFyYW1ldGVyczsK
LX0KLQotaW50IFJlbmRlcmVyOTo6Z2VuZXJhdGVDb25maWdzKENvbmZpZ0Rlc2MgKipjb25maWdE
ZXNjTGlzdCkKLXsKLSAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7Ci0gICAg
bUQzZDktPkdldEFkYXB0ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnREaXNwbGF5TW9k
ZSk7Ci0KLSAgICB1bnNpZ25lZCBpbnQgbnVtUmVuZGVyRm9ybWF0cyA9IEFycmF5U2l6ZShSZW5k
ZXJUYXJnZXRGb3JtYXRzKTsKLSAgICB1bnNpZ25lZCBpbnQgbnVtRGVwdGhGb3JtYXRzID0gQXJy
YXlTaXplKERlcHRoU3RlbmNpbEZvcm1hdHMpOwotICAgICgqY29uZmlnRGVzY0xpc3QpID0gbmV3
IENvbmZpZ0Rlc2NbbnVtUmVuZGVyRm9ybWF0cyAqIG51bURlcHRoRm9ybWF0c107Ci0gICAgaW50
IG51bUNvbmZpZ3MgPSAwOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgZm9ybWF0SW5kZXggPSAw
OyBmb3JtYXRJbmRleCA8IG51bVJlbmRlckZvcm1hdHM7IGZvcm1hdEluZGV4KyspCi0gICAgewot
ICAgICAgICBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0ID0gUmVuZGVyVGFyZ2V0Rm9ybWF0
c1tmb3JtYXRJbmRleF07Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRDNkOS0+Q2hlY2tE
ZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9y
bWF0LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsIEQzRFJUWVBFX1NVUkZBQ0UsIHJlbmRlclRhcmdl
dEZvcm1hdCk7Ci0KLSAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBkZXB0aFN0ZW5jaWxJbmRleCA9IDA7IGRlcHRo
U3RlbmNpbEluZGV4IDwgbnVtRGVwdGhGb3JtYXRzOyBkZXB0aFN0ZW5jaWxJbmRleCsrKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIEQzREZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXQg
PSBEZXB0aFN0ZW5jaWxGb3JtYXRzW2RlcHRoU3RlbmNpbEluZGV4XTsKLSAgICAgICAgICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IEQzRF9PSzsKLQotICAgICAgICAgICAgICAgIGlmKGRlcHRoU3Rl
bmNpbEZvcm1hdCAhPSBEM0RGTVRfVU5LTk9XTikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwg
bURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX0RFUFRIU1RF
TkNJTCwgRDNEUlRZUEVfU1VSRkFDRSwgZGVwdGhTdGVuY2lsRm9ybWF0KTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZihkZXB0aFN0ZW5jaWxGb3JtYXQgIT0g
RDNERk1UX1VOS05PV04pCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IG1EM2Q5LT5DaGVja0RlcHRoU3RlbmNpbE1hdGNoKG1BZGFwdGVyLCBt
RGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgcmVuZGVyVGFyZ2V0Rm9ybWF0
LCBkZXB0aFN0ZW5jaWxGb3JtYXQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBDb25maWdEZXNjIG5ld0NvbmZpZzsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5yZW5kZXJUYXJnZXRGb3JtYXQgPSBkM2Q5X2dsOjpD
b252ZXJ0QmFja0J1ZmZlckZvcm1hdChyZW5kZXJUYXJnZXRGb3JtYXQpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgbmV3Q29uZmlnLmRlcHRoU3RlbmNpbEZvcm1hdCA9IGQzZDlfZ2w6OkNvbnZl
cnREZXB0aFN0ZW5jaWxGb3JtYXQoZGVwdGhTdGVuY2lsRm9ybWF0KTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG5ld0NvbmZpZy5tdWx0aVNhbXBsZSA9IDA7IC8vIEZJWE1FOiBlbnVtZXJhdGUg
bXVsdGktc2FtcGxpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5mYXN0Q29u
ZmlnID0gKGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQgPT0gcmVuZGVyVGFyZ2V0Rm9ybWF0KTsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgKCpjb25maWdEZXNjTGlzdClbbnVtQ29uZmlncysr
XSA9IG5ld0NvbmZpZzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBudW1Db25maWdz
OwotfQotCi12b2lkIFJlbmRlcmVyOTo6ZGVsZXRlQ29uZmlncyhDb25maWdEZXNjICpjb25maWdE
ZXNjTGlzdCkKLXsKLSAgICBkZWxldGUgW10gKGNvbmZpZ0Rlc2NMaXN0KTsKLX0KLQotdm9pZCBS
ZW5kZXJlcjk6OnN0YXJ0U2NlbmUoKQotewotICAgIGlmICghbVNjZW5lU3RhcnRlZCkKLSAgICB7
Ci0gICAgICAgIGxvbmcgcmVzdWx0ID0gbURldmljZS0+QmVnaW5TY2VuZSgpOwotICAgICAgICBp
ZiAoU1VDQ0VFREVEKHJlc3VsdCkpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgZGVmZW5zaXZl
IGNoZWNraW5nIGFnYWluc3QgdGhlIGRldmljZSBiZWluZwotICAgICAgICAgICAgLy8gbG9zdCBh
dCB1bmV4cGVjdGVkIHRpbWVzLgotICAgICAgICAgICAgbVNjZW5lU3RhcnRlZCA9IHRydWU7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyZXI5OjplbmRTY2VuZSgpCi17Ci0gICAg
aWYgKG1TY2VuZVN0YXJ0ZWQpCi0gICAgewotICAgICAgICAvLyBFbmRTY2VuZSBjYW4gZmFpbCBp
ZiB0aGUgZGV2aWNlIHdhcyBsb3N0LCBmb3IgZXhhbXBsZSBkdWUKLSAgICAgICAgLy8gdG8gYSBU
RFIgZHVyaW5nIGEgZHJhdyBjYWxsLgotICAgICAgICBtRGV2aWNlLT5FbmRTY2VuZSgpOwotICAg
ICAgICBtU2NlbmVTdGFydGVkID0gZmFsc2U7Ci0gICAgfQotfQotCi12b2lkIFJlbmRlcmVyOTo6
c3luYyhib29sIGJsb2NrKQotewotICAgIEhSRVNVTFQgcmVzdWx0OwotCi0gICAgSURpcmVjdDNE
UXVlcnk5KiBxdWVyeSA9IGFsbG9jYXRlRXZlbnRRdWVyeSgpOwotICAgIGlmICghcXVlcnkpCi0g
ICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gcXVlcnktPklzc3Vl
KEQzRElTU1VFX0VORCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgIGRv
Ci0gICAgewotICAgICAgICByZXN1bHQgPSBxdWVyeS0+R2V0RGF0YShOVUxMLCAwLCBEM0RHRVRE
QVRBX0ZMVVNIKTsKLQotICAgICAgICBpZihibG9jayAmJiByZXN1bHQgPT0gU19GQUxTRSkKLSAg
ICAgICAgewotICAgICAgICAgICAgLy8gS2VlcCBwb2xsaW5nLCBidXQgYWxsb3cgb3RoZXIgdGhy
ZWFkcyB0byBkbyBzb21ldGhpbmcgdXNlZnVsIGZpcnN0Ci0gICAgICAgICAgICBTbGVlcCgwKTsK
LSAgICAgICAgICAgIC8vIGV4cGxpY2l0bHkgY2hlY2sgZm9yIGRldmljZSBsb3NzCi0gICAgICAg
ICAgICAvLyBzb21lIGRyaXZlcnMgc2VlbSB0byByZXR1cm4gU19GQUxTRSBldmVuIGlmIHRoZSBk
ZXZpY2UgaXMgbG9zdAotICAgICAgICAgICAgLy8gaW5zdGVhZCBvZiBEM0RFUlJfREVWSUNFTE9T
VCBsaWtlIHRoZXkgc2hvdWxkCi0gICAgICAgICAgICBpZiAodGVzdERldmljZUxvc3QoZmFsc2Up
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IEQzREVSUl9ERVZJQ0VM
T1NUOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHdoaWxlKGJsb2NrICYm
IHJlc3VsdCA9PSBTX0ZBTFNFKTsKLQotICAgIGZyZWVFdmVudFF1ZXJ5KHF1ZXJ5KTsKLQotICAg
IGlmIChkM2Q5Ojppc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQotICAgIHsKLSAgICAgICAgbm90
aWZ5RGV2aWNlTG9zdCgpOwotICAgIH0KLX0KLQotU3dhcENoYWluICpSZW5kZXJlcjk6OmNyZWF0
ZVN3YXBDaGFpbihIV05EIHdpbmRvdywgSEFORExFIHNoYXJlSGFuZGxlLCBHTGVudW0gYmFja0J1
ZmZlckZvcm1hdCwgR0xlbnVtIGRlcHRoQnVmZmVyRm9ybWF0KQotewotICAgIHJldHVybiBuZXcg
cng6OlN3YXBDaGFpbjkodGhpcywgd2luZG93LCBzaGFyZUhhbmRsZSwgYmFja0J1ZmZlckZvcm1h
dCwgZGVwdGhCdWZmZXJGb3JtYXQpOwotfQotCi1JRGlyZWN0M0RRdWVyeTkqIFJlbmRlcmVyOTo6
YWxsb2NhdGVFdmVudFF1ZXJ5KCkKLXsKLSAgICBJRGlyZWN0M0RRdWVyeTkgKnF1ZXJ5ID0gTlVM
TDsKLQotICAgIGlmIChtRXZlbnRRdWVyeVBvb2wuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUXVlcnkoRDNEUVVFUllUWVBFX0VWRU5ULCAm
cXVlcnkpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICBxdWVyeSA9IG1FdmVudFF1ZXJ5UG9vbC5iYWNrKCk7Ci0gICAg
ICAgIG1FdmVudFF1ZXJ5UG9vbC5wb3BfYmFjaygpOwotICAgIH0KLQotICAgIHJldHVybiBxdWVy
eTsKLX0KLQotdm9pZCBSZW5kZXJlcjk6OmZyZWVFdmVudFF1ZXJ5KElEaXJlY3QzRFF1ZXJ5OSog
cXVlcnkpCi17Ci0gICAgaWYgKG1FdmVudFF1ZXJ5UG9vbC5zaXplKCkgPiAxMDAwKQotICAgIHsK
LSAgICAgICAgcXVlcnktPlJlbGVhc2UoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAg
ICAgbUV2ZW50UXVlcnlQb29sLnB1c2hfYmFjayhxdWVyeSk7Ci0gICAgfQotfQotCi1JRGlyZWN0
M0RWZXJ0ZXhTaGFkZXI5ICpSZW5kZXJlcjk6OmNyZWF0ZVZlcnRleFNoYWRlcihjb25zdCBEV09S
RCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIG1WZXJ0ZXhTaGFkZXJD
YWNoZS5jcmVhdGUoZnVuY3Rpb24sIGxlbmd0aCk7Ci19Ci0KLUlEaXJlY3QzRFBpeGVsU2hhZGVy
OSAqUmVuZGVyZXI5OjpjcmVhdGVQaXhlbFNoYWRlcihjb25zdCBEV09SRCAqZnVuY3Rpb24sIHNp
emVfdCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIG1QaXhlbFNoYWRlckNhY2hlLmNyZWF0ZShmdW5j
dGlvbiwgbGVuZ3RoKTsKLX0KLQotSFJFU1VMVCBSZW5kZXJlcjk6OmNyZWF0ZVZlcnRleEJ1ZmZl
cihVSU5UIExlbmd0aCwgRFdPUkQgVXNhZ2UsIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKipwcFZl
cnRleEJ1ZmZlcikKLXsKLSAgICBEM0RQT09MIFBvb2wgPSBnZXRCdWZmZXJQb29sKFVzYWdlKTsK
LSAgICByZXR1cm4gbURldmljZS0+Q3JlYXRlVmVydGV4QnVmZmVyKExlbmd0aCwgVXNhZ2UsIDAs
IFBvb2wsIHBwVmVydGV4QnVmZmVyLCBOVUxMKTsKLX0KLQotVmVydGV4QnVmZmVyICpSZW5kZXJl
cjk6OmNyZWF0ZVZlcnRleEJ1ZmZlcigpCi17Ci0gICAgcmV0dXJuIG5ldyBWZXJ0ZXhCdWZmZXI5
KHRoaXMpOwotfQotCi1IUkVTVUxUIFJlbmRlcmVyOTo6Y3JlYXRlSW5kZXhCdWZmZXIoVUlOVCBM
ZW5ndGgsIERXT1JEIFVzYWdlLCBEM0RGT1JNQVQgRm9ybWF0LCBJRGlyZWN0M0RJbmRleEJ1ZmZl
cjkgKipwcEluZGV4QnVmZmVyKQotewotICAgIEQzRFBPT0wgUG9vbCA9IGdldEJ1ZmZlclBvb2wo
VXNhZ2UpOwotICAgIHJldHVybiBtRGV2aWNlLT5DcmVhdGVJbmRleEJ1ZmZlcihMZW5ndGgsIFVz
YWdlLCBGb3JtYXQsIFBvb2wsIHBwSW5kZXhCdWZmZXIsIE5VTEwpOwotfQotCi1JbmRleEJ1ZmZl
ciAqUmVuZGVyZXI5OjpjcmVhdGVJbmRleEJ1ZmZlcigpCi17Ci0gICAgcmV0dXJuIG5ldyBJbmRl
eEJ1ZmZlcjkodGhpcyk7Ci19Ci0KLUJ1ZmZlclN0b3JhZ2UgKlJlbmRlcmVyOTo6Y3JlYXRlQnVm
ZmVyU3RvcmFnZSgpCi17Ci0gICAgcmV0dXJuIG5ldyBCdWZmZXJTdG9yYWdlOSgpOwotfQotCi1R
dWVyeUltcGwgKlJlbmRlcmVyOTo6Y3JlYXRlUXVlcnkoR0xlbnVtIHR5cGUpCi17Ci0gICAgcmV0
dXJuIG5ldyBRdWVyeTkodGhpcywgdHlwZSk7Ci19Ci0KLUZlbmNlSW1wbCAqUmVuZGVyZXI5Ojpj
cmVhdGVGZW5jZSgpCi17Ci0gICAgcmV0dXJuIG5ldyBGZW5jZTkodGhpcyk7Ci19Ci0KLXZvaWQg
UmVuZGVyZXI5OjpzZXRTYW1wbGVyU3RhdGUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRl
eCwgY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKQotewotICAgIGJvb2wgKmZv
cmNlU2V0U2FtcGxlcnMgPSAodHlwZSA9PSBnbDo6U0FNUExFUl9QSVhFTCkgPyBtRm9yY2VTZXRQ
aXhlbFNhbXBsZXJTdGF0ZXMgOiBtRm9yY2VTZXRWZXJ0ZXhTYW1wbGVyU3RhdGVzOwotICAgIGds
OjpTYW1wbGVyU3RhdGUgKmFwcGxpZWRTYW1wbGVycyA9ICh0eXBlID09IGdsOjpTQU1QTEVSX1BJ
WEVMKSA/IG1DdXJQaXhlbFNhbXBsZXJTdGF0ZXM6IG1DdXJWZXJ0ZXhTYW1wbGVyU3RhdGVzOwot
Ci0gICAgaWYgKGZvcmNlU2V0U2FtcGxlcnNbaW5kZXhdIHx8IG1lbWNtcCgmc2FtcGxlclN0YXRl
LCAmYXBwbGllZFNhbXBsZXJzW2luZGV4XSwgc2l6ZW9mKGdsOjpTYW1wbGVyU3RhdGUpKSAhPSAw
KQotICAgIHsKLSAgICAgICAgaW50IGQzZFNhbXBsZXJPZmZzZXQgPSAodHlwZSA9PSBnbDo6U0FN
UExFUl9QSVhFTCkgPyAwIDogRDNEVkVSVEVYVEVYVFVSRVNBTVBMRVIwOwotICAgICAgICBpbnQg
ZDNkU2FtcGxlciA9IGluZGV4ICsgZDNkU2FtcGxlck9mZnNldDsKLQotICAgICAgICBtRGV2aWNl
LT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9BRERSRVNTVSwgZ2xfZDNkOTo6
Q29udmVydFRleHR1cmVXcmFwKHNhbXBsZXJTdGF0ZS53cmFwUykpOwotICAgICAgICBtRGV2aWNl
LT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9BRERSRVNTViwgZ2xfZDNkOTo6
Q29udmVydFRleHR1cmVXcmFwKHNhbXBsZXJTdGF0ZS53cmFwVCkpOwotCi0gICAgICAgIG1EZXZp
Y2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01BR0ZJTFRFUiwgZ2xfZDNk
OTo6Q29udmVydE1hZ0ZpbHRlcihzYW1wbGVyU3RhdGUubWFnRmlsdGVyLCBzYW1wbGVyU3RhdGUu
bWF4QW5pc290cm9weSkpOwotICAgICAgICBEM0RURVhUVVJFRklMVEVSVFlQRSBkM2RNaW5GaWx0
ZXIsIGQzZE1pcEZpbHRlcjsKLSAgICAgICAgZ2xfZDNkOTo6Q29udmVydE1pbkZpbHRlcihzYW1w
bGVyU3RhdGUubWluRmlsdGVyLCAmZDNkTWluRmlsdGVyLCAmZDNkTWlwRmlsdGVyLCBzYW1wbGVy
U3RhdGUubWF4QW5pc290cm9weSk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShk
M2RTYW1wbGVyLCBEM0RTQU1QX01JTkZJTFRFUiwgZDNkTWluRmlsdGVyKTsKLSAgICAgICAgbURl
dmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUlQRklMVEVSLCBkM2RN
aXBGaWx0ZXIpOwotICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwg
RDNEU0FNUF9NQVhNSVBMRVZFTCwgc2FtcGxlclN0YXRlLmxvZE9mZnNldCk7Ci0gICAgICAgIGlm
IChtU3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSkKLSAgICAgICAgewotICAgICAgICAg
ICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUFYQU5JU09U
Uk9QWSwgKERXT1JEKXNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5KTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGZvcmNlU2V0U2FtcGxlcnNbaW5kZXhdID0gZmFsc2U7Ci0gICAgYXBwbGllZFNh
bXBsZXJzW2luZGV4XSA9IHNhbXBsZXJTdGF0ZTsKLX0KLQotdm9pZCBSZW5kZXJlcjk6OnNldFRl
eHR1cmUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRleCwgZ2w6OlRleHR1cmUgKnRleHR1
cmUpCi17Ci0gICAgaW50IGQzZFNhbXBsZXJPZmZzZXQgPSAodHlwZSA9PSBnbDo6U0FNUExFUl9Q
SVhFTCkgPyAwIDogRDNEVkVSVEVYVEVYVFVSRVNBTVBMRVIwOwotICAgIGludCBkM2RTYW1wbGVy
ID0gaW5kZXggKyBkM2RTYW1wbGVyT2Zmc2V0OwotICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAq
ZDNkVGV4dHVyZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgaW50IHNlcmlhbCA9IDA7Ci0gICAgYm9v
bCBmb3JjZVNldFRleHR1cmUgPSBmYWxzZTsKLQotICAgIHVuc2lnbmVkIGludCAqYXBwbGllZFNl
cmlhbHMgPSAodHlwZSA9PSBnbDo6U0FNUExFUl9QSVhFTCkgPyBtQ3VyUGl4ZWxUZXh0dXJlU2Vy
aWFscyA6IG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFsczsKLQotICAgIGlmICh0ZXh0dXJlKQotICAg
IHsKLSAgICAgICAgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKnRleFN0b3JhZ2UgPSB0ZXh0dXJl
LT5nZXROYXRpdmVUZXh0dXJlKCk7Ci0gICAgICAgIGlmICh0ZXhTdG9yYWdlKQotICAgICAgICB7
Ci0gICAgICAgICAgICBUZXh0dXJlU3RvcmFnZTkgKnN0b3JhZ2U5ID0gVGV4dHVyZVN0b3JhZ2U5
OjptYWtlVGV4dHVyZVN0b3JhZ2U5KHRleFN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsK
LSAgICAgICAgICAgIGQzZFRleHR1cmUgPSBzdG9yYWdlOS0+Z2V0QmFzZVRleHR1cmUoKTsKLSAg
ICAgICAgfQotICAgICAgICAvLyBJZiB3ZSBnZXQgTlVMTCBiYWNrIGZyb20gZ2V0QmFzZVRleHR1
cmUgaGVyZSwgc29tZXRoaW5nIHdlbnQgd3JvbmcKLSAgICAgICAgLy8gaW4gdGhlIHRleHR1cmUg
Y2xhc3MgYW5kIHdlJ3JlIHVuZXhwZWN0ZWRseSBtaXNzaW5nIHRoZSBkM2QgdGV4dHVyZQotICAg
ICAgICBBU1NFUlQoZDNkVGV4dHVyZSAhPSBOVUxMKTsKLQotICAgICAgICBzZXJpYWwgPSB0ZXh0
dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCk7Ci0gICAgICAgIGZvcmNlU2V0VGV4dHVyZSA9IHRleHR1
cmUtPmhhc0RpcnR5SW1hZ2VzKCk7Ci0gICAgfQotCi0gICAgaWYgKGZvcmNlU2V0VGV4dHVyZSB8
fCBhcHBsaWVkU2VyaWFsc1tpbmRleF0gIT0gc2VyaWFsKQotICAgIHsKLSAgICAgICAgbURldmlj
ZS0+U2V0VGV4dHVyZShkM2RTYW1wbGVyLCBkM2RUZXh0dXJlKTsKLSAgICB9Ci0KLSAgICBhcHBs
aWVkU2VyaWFsc1tpbmRleF0gPSBzZXJpYWw7Ci19Ci0KLXZvaWQgUmVuZGVyZXI5OjpzZXRSYXN0
ZXJpemVyU3RhdGUoY29uc3QgZ2w6OlJhc3Rlcml6ZXJTdGF0ZSAmcmFzdGVyU3RhdGUpCi17Ci0g
ICAgYm9vbCByYXN0ZXJTdGF0ZUNoYW5nZWQgPSBtRm9yY2VTZXRSYXN0ZXJTdGF0ZSB8fCBtZW1j
bXAoJnJhc3RlclN0YXRlLCAmbUN1clJhc3RlclN0YXRlLCBzaXplb2YoZ2w6OlJhc3Rlcml6ZXJT
dGF0ZSkpICE9IDA7Ci0KLSAgICBpZiAocmFzdGVyU3RhdGVDaGFuZ2VkKQotICAgIHsKLSAgICAg
ICAgLy8gU2V0IHRoZSBjdWxsIG1vZGUKLSAgICAgICAgaWYgKHJhc3RlclN0YXRlLmN1bGxGYWNl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19D
VUxMTU9ERSwgZ2xfZDNkOTo6Q29udmVydEN1bGxNb2RlKHJhc3RlclN0YXRlLmN1bGxNb2RlLCBy
YXN0ZXJTdGF0ZS5mcm9udEZhY2UpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBE
M0RDVUxMX05PTkUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJhc3RlclN0YXRlLnBvbHln
b25PZmZzZXRGaWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobUN1ckRlcHRoU2l6ZSA+
IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfU0xPUEVTQ0FMRURFUFRIQklBUywgKihEV09SRCopJnJhc3RlclN0YXRlLnBvbHln
b25PZmZzZXRGYWN0b3IpOwotCi0gICAgICAgICAgICAgICAgZmxvYXQgZGVwdGhCaWFzID0gbGRl
eHAocmFzdGVyU3RhdGUucG9seWdvbk9mZnNldFVuaXRzLCAtc3RhdGljX2Nhc3Q8aW50PihtQ3Vy
RGVwdGhTaXplKSk7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfREVQVEhCSUFTLCAqKERXT1JEKikmZGVwdGhCaWFzKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX1NMT1BFU0NBTEVERVBUSEJJQVMsIDApOwotICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVQVEhCSUFTLCAwKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIG1DdXJSYXN0ZXJTdGF0ZSA9IHJhc3RlclN0YXRlOwotICAgIH0KLQotICAgIG1Gb3Jj
ZVNldFJhc3RlclN0YXRlID0gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyZXI5OjpzZXRCbGVuZFN0
YXRlKGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRlLCBjb25zdCBnbDo6Q29sb3IgJmJs
ZW5kQ29sb3IsIHVuc2lnbmVkIGludCBzYW1wbGVNYXNrKQotewotICAgIGJvb2wgYmxlbmRTdGF0
ZUNoYW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0YXRlIHx8IG1lbWNtcCgmYmxlbmRTdGF0ZSwgJm1D
dXJCbGVuZFN0YXRlLCBzaXplb2YoZ2w6OkJsZW5kU3RhdGUpKSAhPSAwOwotICAgIGJvb2wgYmxl
bmRDb2xvckNoYW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0YXRlIHx8IG1lbWNtcCgmYmxlbmRDb2xv
ciwgJm1DdXJCbGVuZENvbG9yLCBzaXplb2YoZ2w6OkNvbG9yKSkgIT0gMDsKLSAgICBib29sIHNh
bXBsZU1hc2tDaGFuZ2VkID0gbUZvcmNlU2V0QmxlbmRTdGF0ZSB8fCBzYW1wbGVNYXNrICE9IG1D
dXJTYW1wbGVNYXNrOwotCi0gICAgaWYgKGJsZW5kU3RhdGVDaGFuZ2VkIHx8IGJsZW5kQ29sb3JD
aGFuZ2VkKQotICAgIHsKLSAgICAgICAgaWYgKGJsZW5kU3RhdGUuYmxlbmQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFC
TEUsIFRSVUUpOwotCi0gICAgICAgICAgICBpZiAoYmxlbmRTdGF0ZS5zb3VyY2VCbGVuZFJHQiAh
PSBHTF9DT05TVEFOVF9BTFBIQSAmJiBibGVuZFN0YXRlLnNvdXJjZUJsZW5kUkdCICE9IEdMX09O
RV9NSU5VU19DT05TVEFOVF9BTFBIQSAmJgotICAgICAgICAgICAgICAgIGJsZW5kU3RhdGUuZGVz
dEJsZW5kUkdCICE9IEdMX0NPTlNUQU5UX0FMUEhBICYmIGJsZW5kU3RhdGUuZGVzdEJsZW5kUkdC
ICE9IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVOREZBQ1RPUiwgZ2xfZDNk
OTo6Q29udmVydENvbG9yKGJsZW5kQ29sb3IpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19CTEVOREZBQ1RPUiwgRDNEQ09MT1JfUkdCQShnbDo6dW5vcm08OD4oYmxlbmRD
b2xvci5hbHBoYSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGJsZW5kQ29sb3IuYWxw
aGEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4PihibGVuZENvbG9yLmFscGhhKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oYmxlbmRDb2xvci5hbHBoYSkpKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JDQkxF
TkQsIGdsX2QzZDk6OkNvbnZlcnRCbGVuZEZ1bmMoYmxlbmRTdGF0ZS5zb3VyY2VCbGVuZFJHQikp
OwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVTVEJMRU5ELCBn
bF9kM2Q5OjpDb252ZXJ0QmxlbmRGdW5jKGJsZW5kU3RhdGUuZGVzdEJsZW5kUkdCKSk7Ci0gICAg
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVORE9QLCBnbF9kM2Q5OjpD
b252ZXJ0QmxlbmRPcChibGVuZFN0YXRlLmJsZW5kRXF1YXRpb25SR0IpKTsKLQotICAgICAgICAg
ICAgaWYgKGJsZW5kU3RhdGUuc291cmNlQmxlbmRSR0IgIT0gYmxlbmRTdGF0ZS5zb3VyY2VCbGVu
ZEFscGhhIHx8Ci0gICAgICAgICAgICAgICAgYmxlbmRTdGF0ZS5kZXN0QmxlbmRSR0IgIT0gYmxl
bmRTdGF0ZS5kZXN0QmxlbmRBbHBoYSB8fAotICAgICAgICAgICAgICAgIGJsZW5kU3RhdGUuYmxl
bmRFcXVhdGlvblJHQiAhPSBibGVuZFN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TRVBB
UkFURUFMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOwotCi0gICAgICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JDQkxFTkRBTFBIQSwgZ2xfZDNkOTo6Q29udmVydEJsZW5k
RnVuYyhibGVuZFN0YXRlLnNvdXJjZUJsZW5kQWxwaGEpKTsKLSAgICAgICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ERVNUQkxFTkRBTFBIQSwgZ2xfZDNkOTo6Q29udmVy
dEJsZW5kRnVuYyhibGVuZFN0YXRlLmRlc3RCbGVuZEFscGhhKSk7Ci0gICAgICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRPUEFMUEhBLCBnbF9kM2Q5OjpDb252
ZXJ0QmxlbmRPcChibGVuZFN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSkpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NFUEFSQVRFQUxQSEFCTEVOREVOQUJMRSwgRkFMU0Up
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwg
RkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGJsZW5kU3RhdGUuc2FtcGxlQWxwaGFU
b0NvdmVyYWdlKQotICAgICAgICB7Ci0gICAgICAgICAgICBGSVhNRSgiU2FtcGxlIGFscGhhIHRv
IGNvdmVyYWdlIGlzIHVuaW1wbGVtZW50ZWQuIik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBT
ZXQgdGhlIGNvbG9yIG1hc2sKLSAgICAgICAgYm9vbCB6ZXJvQ29sb3JNYXNrQWxsb3dlZCA9IGdl
dEFkYXB0ZXJWZW5kb3IoKSAhPSBWRU5ET1JfSURfQU1EOwotICAgICAgICAvLyBBcHBhcmVudGx5
IHNvbWUgQVRJIGNhcmRzIGhhdmUgYSBidWcgd2hlcmUgYSBkcmF3IHdpdGggYSB6ZXJvIGNvbG9y
Ci0gICAgICAgIC8vIHdyaXRlIG1hc2sgY2FuIGNhdXNlIGxhdGVyIGRyYXdzIHRvIGhhdmUgaW5j
b3JyZWN0IHJlc3VsdHMuIEluc3RlYWQsCi0gICAgICAgIC8vIHNldCBhIG5vbnplcm8gY29sb3Ig
d3JpdGUgbWFzayBidXQgbW9kaWZ5IHRoZSBibGVuZCBzdGF0ZSBzbyB0aGF0IG5vCi0gICAgICAg
IC8vIGRyYXdpbmcgaXMgZG9uZS4KLSAgICAgICAgLy8gaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9w
L2FuZ2xlcHJvamVjdC9pc3N1ZXMvZGV0YWlsP2lkPTE2OQotCi0gICAgICAgIERXT1JEIGNvbG9y
TWFzayA9IGdsX2QzZDk6OkNvbnZlcnRDb2xvck1hc2soYmxlbmRTdGF0ZS5jb2xvck1hc2tSZWQs
IGJsZW5kU3RhdGUuY29sb3JNYXNrR3JlZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRTdGF0ZS5jb2xvck1hc2tCbHVlLCBibGVuZFN0
YXRlLmNvbG9yTWFza0FscGhhKTsKLSAgICAgICAgaWYgKGNvbG9yTWFzayA9PSAwICYmICF6ZXJv
Q29sb3JNYXNrQWxsb3dlZCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gRW5hYmxlIGdyZWVu
IGNoYW5uZWwsIGJ1dCBzZXQgYmxlbmRpbmcgc28gbm90aGluZyB3aWxsIGJlIGRyYXduLgotICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwg
RDNEQ09MT1JXUklURUVOQUJMRV9HUkVFTik7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsKLQotICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JDQkxFTkQsIEQzREJMRU5EX1pFUk8pOwotICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVTVEJMRU5ELCBEM0RCTEVO
RF9PTkUpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRP
UCwgRDNEQkxFTkRPUF9BREQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewot
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJM
RSwgY29sb3JNYXNrKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX0RJVEhFUkVOQUJMRSwgYmxlbmRTdGF0ZS5kaXRoZXIgPyBUUlVFIDogRkFMU0Up
OwotCi0gICAgICAgIG1DdXJCbGVuZFN0YXRlID0gYmxlbmRTdGF0ZTsKLSAgICAgICAgbUN1ckJs
ZW5kQ29sb3IgPSBibGVuZENvbG9yOwotICAgIH0KLQotICAgIGlmIChzYW1wbGVNYXNrQ2hhbmdl
ZCkKLSAgICB7Ci0gICAgICAgIC8vIFNldCB0aGUgbXVsdGlzYW1wbGUgbWFzawotICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRUFOVElBTElBUywgVFJVRSk7
Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExFTUFTSywg
c3RhdGljX2Nhc3Q8RFdPUkQ+KHNhbXBsZU1hc2spKTsKLQotICAgICAgICBtQ3VyU2FtcGxlTWFz
ayA9IHNhbXBsZU1hc2s7Ci0gICAgfQotCi0gICAgbUZvcmNlU2V0QmxlbmRTdGF0ZSA9IGZhbHNl
OwotfQotCi12b2lkIFJlbmRlcmVyOTo6c2V0RGVwdGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6OkRl
cHRoU3RlbmNpbFN0YXRlICZkZXB0aFN0ZW5jaWxTdGF0ZSwgaW50IHN0ZW5jaWxSZWYsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0ZW5jaWxCYWNrUmVmLCBib29s
IGZyb250RmFjZUNDVykKLXsKLSAgICBib29sIGRlcHRoU3RlbmNpbFN0YXRlQ2hhbmdlZCA9IG1G
b3JjZVNldERlcHRoU3RlbmNpbFN0YXRlIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtZW1jbXAoJmRlcHRoU3RlbmNpbFN0YXRlLCAmbUN1ckRlcHRoU3RlbmNpbFN0YXRl
LCBzaXplb2YoZ2w6OkRlcHRoU3RlbmNpbFN0YXRlKSkgIT0gMDsKLSAgICBib29sIHN0ZW5jaWxS
ZWZDaGFuZ2VkID0gbUZvcmNlU2V0RGVwdGhTdGVuY2lsU3RhdGUgfHwgc3RlbmNpbFJlZiAhPSBt
Q3VyU3RlbmNpbFJlZiB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVuY2lsQmFj
a1JlZiAhPSBtQ3VyU3RlbmNpbEJhY2tSZWY7Ci0gICAgYm9vbCBmcm9udEZhY2VDQ1dDaGFuZ2Vk
ID0gbUZvcmNlU2V0RGVwdGhTdGVuY2lsU3RhdGUgfHwgZnJvbnRGYWNlQ0NXICE9IG1DdXJGcm9u
dEZhY2VDQ1c7Ci0KLSAgICBpZiAoZGVwdGhTdGVuY2lsU3RhdGVDaGFuZ2VkKQotICAgIHsKLSAg
ICAgICAgaWYgKGRlcHRoU3RlbmNpbFN0YXRlLmRlcHRoVGVzdCkKLSAgICAgICAgewotICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRDNEWkJfVFJVRSk7
Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRlVOQywgZ2xfZDNk
OTo6Q29udmVydENvbXBhcmlzb24oZGVwdGhTdGVuY2lsU3RhdGUuZGVwdGhGdW5jKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBEM0RaQl9GQUxTRSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBtQ3VyRGVwdGhTdGVuY2lsU3RhdGUgPSBkZXB0aFN0ZW5jaWxTdGF0ZTsKLSAgICB9Ci0K
LSAgICBpZiAoZGVwdGhTdGVuY2lsU3RhdGVDaGFuZ2VkIHx8IHN0ZW5jaWxSZWZDaGFuZ2VkIHx8
IGZyb250RmFjZUNDV0NoYW5nZWQpCi0gICAgewotICAgICAgICBpZiAoZGVwdGhTdGVuY2lsU3Rh
dGUuc3RlbmNpbFRlc3QgJiYgbUN1clN0ZW5jaWxTaXplID4gMCkKLSAgICAgICAgewotICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgVFJVRSk7
Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19UV09TSURFRFNURU5D
SUxNT0RFLCBUUlVFKTsKLQotICAgICAgICAgICAgLy8gRklYTUU6IFVuc3VwcG9ydGVkIGJ5IEQz
RDkKLSAgICAgICAgICAgIGNvbnN0IEQzRFJFTkRFUlNUQVRFVFlQRSBEM0RSU19DQ1dfU1RFTkNJ
TFJFRiA9IEQzRFJTX1NURU5DSUxSRUY7Ci0gICAgICAgICAgICBjb25zdCBEM0RSRU5ERVJTVEFU
RVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxNQVNLID0gRDNEUlNfU1RFTkNJTE1BU0s7Ci0gICAgICAg
ICAgICBjb25zdCBEM0RSRU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxXUklURU1BU0sg
PSBEM0RSU19TVEVOQ0lMV1JJVEVNQVNLOwotICAgICAgICAgICAgaWYgKGRlcHRoU3RlbmNpbFN0
YXRlLnN0ZW5jaWxXcml0ZW1hc2sgIT0gZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbEJhY2tXcml0
ZW1hc2sgfHwKLSAgICAgICAgICAgICAgICBzdGVuY2lsUmVmICE9IHN0ZW5jaWxCYWNrUmVmIHx8
Ci0gICAgICAgICAgICAgICAgZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbE1hc2sgIT0gZGVwdGhT
dGVuY2lsU3RhdGUuc3RlbmNpbEJhY2tNYXNrKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIEVSUigiU2VwYXJhdGUgZnJvbnQvYmFjayBzdGVuY2lsIHdyaXRlbWFza3MsIHJlZmVyZW5j
ZSB2YWx1ZXMsIG9yIHN0ZW5jaWwgbWFzayB2YWx1ZXMgYXJlIGludmFsaWQgdW5kZXIgV2ViR0wu
Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGdldCB0aGUgbWF4aW11bSBzaXpl
IG9mIHRoZSBzdGVuY2lsIHJlZgotICAgICAgICAgICAgdW5zaWduZWQgaW50IG1heFN0ZW5jaWwg
PSAoMSA8PCBtQ3VyU3RlbmNpbFNpemUpIC0gMTsKLQotICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoZnJvbnRGYWNlQ0NXID8gRDNEUlNfU1RFTkNJTFdSSVRFTUFTSyA6IEQzRFJT
X0NDV19TVEVOQ0lMV1JJVEVNQVNLLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbFdyaXRlbWFzayk7Ci0gICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShmcm9udEZhY2VDQ1cgPyBEM0RSU19TVEVOQ0lMRlVOQyA6IEQz
RFJTX0NDV19TVEVOQ0lMRlVOQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsX2QzZDk6OkNvbnZlcnRDb21wYXJpc29uKGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxGdW5j
KSk7Ci0KLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGZyb250RmFjZUNDVyA/
IEQzRFJTX1NURU5DSUxSRUYgOiBEM0RSU19DQ1dfU1RFTkNJTFJFRiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChzdGVuY2lsUmVmIDwgKGludCltYXhTdGVuY2lsKSA/IHN0
ZW5jaWxSZWYgOiBtYXhTdGVuY2lsKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKGZyb250RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxN
QVNLLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGhTdGVuY2lsU3Rh
dGUuc3RlbmNpbE1hc2spOwotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShm
cm9udEZhY2VDQ1cgPyBEM0RSU19TVEVOQ0lMRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMRkFJTCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRTdGVu
Y2lsT3AoZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbEZhaWwpKTsKLSAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKGZyb250RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxaRkFJTCA6IEQz
RFJTX0NDV19TVEVOQ0lMWkZBSUwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbF9kM2Q5OjpDb252ZXJ0U3RlbmNpbE9wKGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxQYXNz
RGVwdGhGYWlsKSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShmcm9udEZh
Y2VDQ1cgPyBEM0RSU19TVEVOQ0lMUEFTUyA6IEQzRFJTX0NDV19TVEVOQ0lMUEFTUywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRTdGVuY2lsT3Ao
ZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MpKTsKLQotICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoIWZyb250RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxXUklU
RU1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTFdSSVRFTUFTSywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrKTsK
LSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKCFmcm9udEZhY2VDQ1cgPyBEM0RS
U19TVEVOQ0lMRlVOQyA6IEQzRFJTX0NDV19TVEVOQ0lMRlVOQywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRDb21wYXJpc29uKGRlcHRoU3RlbmNp
bFN0YXRlLnN0ZW5jaWxCYWNrRnVuYykpOwotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZSghZnJvbnRGYWNlQ0NXID8gRDNEUlNfU1RFTkNJTFJFRiA6IEQzRFJTX0NDV19TVEVO
Q0lMUkVGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0ZW5jaWxCYWNr
UmVmIDwgKGludCltYXhTdGVuY2lsKSA/IHN0ZW5jaWxCYWNrUmVmIDogbWF4U3RlbmNpbCk7Ci0g
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZSghZnJvbnRGYWNlQ0NXID8gRDNEUlNf
U1RFTkNJTE1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTE1BU0ssCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsQmFja01hc2spOwotCi0g
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZSghZnJvbnRGYWNlQ0NXID8gRDNEUlNf
U1RFTkNJTEZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTEZBSUwsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbF9kM2Q5OjpDb252ZXJ0U3RlbmNpbE9wKGRlcHRoU3RlbmNpbFN0
YXRlLnN0ZW5jaWxCYWNrRmFpbCkpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoIWZyb250RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxaRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lM
WkZBSUwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9kM2Q5OjpDb252
ZXJ0U3RlbmNpbE9wKGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCkp
OwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoIWZyb250RmFjZUNDVyA/IEQz
RFJTX1NURU5DSUxQQVNTIDogRDNEUlNfQ0NXX1NURU5DSUxQQVNTLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6Q29udmVydFN0ZW5jaWxPcChkZXB0aFN0ZW5j
aWxTdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MpKTsKLSAgICAgICAgfQotICAgICAgICBl
bHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X1NURU5DSUxFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX1pXUklURUVOQUJMRSwgZGVwdGhTdGVuY2lsU3RhdGUuZGVwdGhN
YXNrID8gVFJVRSA6IEZBTFNFKTsKLQotICAgICAgICBtQ3VyU3RlbmNpbFJlZiA9IHN0ZW5jaWxS
ZWY7Ci0gICAgICAgIG1DdXJTdGVuY2lsQmFja1JlZiA9IHN0ZW5jaWxCYWNrUmVmOwotICAgICAg
ICBtQ3VyRnJvbnRGYWNlQ0NXID0gZnJvbnRGYWNlQ0NXOwotICAgIH0KLQotICAgIG1Gb3JjZVNl
dERlcHRoU3RlbmNpbFN0YXRlID0gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyZXI5OjpzZXRTY2lz
c29yUmVjdGFuZ2xlKGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNjaXNzb3IsIGJvb2wgZW5hYmxlZCkK
LXsKLSAgICBib29sIHNjaXNzb3JDaGFuZ2VkID0gbUZvcmNlU2V0U2Npc3NvciB8fAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBtZW1jbXAoJnNjaXNzb3IsICZtQ3VyU2Npc3Nvciwgc2l6ZW9m
KGdsOjpSZWN0YW5nbGUpKSAhPSAwIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJs
ZWQgIT0gbVNjaXNzb3JFbmFibGVkOwotCi0gICAgaWYgKHNjaXNzb3JDaGFuZ2VkKQotICAgIHsK
LSAgICAgICAgaWYgKGVuYWJsZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJFQ1QgcmVjdDsK
LSAgICAgICAgICAgIHJlY3QubGVmdCA9IGdsOjpjbGFtcChzY2lzc29yLngsIDAsIHN0YXRpY19j
YXN0PGludD4obVJlbmRlclRhcmdldERlc2Mud2lkdGgpKTsKLSAgICAgICAgICAgIHJlY3QudG9w
ID0gZ2w6OmNsYW1wKHNjaXNzb3IueSwgMCwgc3RhdGljX2Nhc3Q8aW50PihtUmVuZGVyVGFyZ2V0
RGVzYy5oZWlnaHQpKTsKLSAgICAgICAgICAgIHJlY3QucmlnaHQgPSBnbDo6Y2xhbXAoc2Npc3Nv
ci54ICsgc2Npc3Nvci53aWR0aCwgMCwgc3RhdGljX2Nhc3Q8aW50PihtUmVuZGVyVGFyZ2V0RGVz
Yy53aWR0aCkpOwotICAgICAgICAgICAgcmVjdC5ib3R0b20gPSBnbDo6Y2xhbXAoc2Npc3Nvci55
ICsgc2Npc3Nvci5oZWlnaHQsIDAsIHN0YXRpY19jYXN0PGludD4obVJlbmRlclRhcmdldERlc2Mu
aGVpZ2h0KSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRTY2lzc29yUmVjdCgmcmVjdCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TQ0lTU09S
VEVTVEVOQUJMRSwgZW5hYmxlZCA/IFRSVUUgOiBGQUxTRSk7Ci0KLSAgICAgICAgbVNjaXNzb3JF
bmFibGVkID0gZW5hYmxlZDsKLSAgICAgICAgbUN1clNjaXNzb3IgPSBzY2lzc29yOwotICAgIH0K
LQotICAgIG1Gb3JjZVNldFNjaXNzb3IgPSBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJlcjk6OnNl
dFZpZXdwb3J0KGNvbnN0IGdsOjpSZWN0YW5nbGUgJnZpZXdwb3J0LCBmbG9hdCB6TmVhciwgZmxv
YXQgekZhciwgR0xlbnVtIGRyYXdNb2RlLCBHTGVudW0gZnJvbnRGYWNlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgaWdub3JlVmlld3BvcnQpCi17Ci0gICAgZ2w6OlJlY3Rhbmds
ZSBhY3R1YWxWaWV3cG9ydCA9IHZpZXdwb3J0OwotICAgIGZsb2F0IGFjdHVhbFpOZWFyID0gZ2w6
OmNsYW1wMDEoek5lYXIpOwotICAgIGZsb2F0IGFjdHVhbFpGYXIgPSBnbDo6Y2xhbXAwMSh6RmFy
KTsKLSAgICBpZiAoaWdub3JlVmlld3BvcnQpCi0gICAgewotICAgICAgICBhY3R1YWxWaWV3cG9y
dC54ID0gMDsKLSAgICAgICAgYWN0dWFsVmlld3BvcnQueSA9IDA7Ci0gICAgICAgIGFjdHVhbFZp
ZXdwb3J0LndpZHRoID0gbVJlbmRlclRhcmdldERlc2Mud2lkdGg7Ci0gICAgICAgIGFjdHVhbFZp
ZXdwb3J0LmhlaWdodCA9IG1SZW5kZXJUYXJnZXREZXNjLmhlaWdodDsKLSAgICAgICAgYWN0dWFs
Wk5lYXIgPSAwLjBmOwotICAgICAgICBhY3R1YWxaRmFyID0gMS4wZjsKLSAgICB9Ci0KLSAgICBE
M0RWSUVXUE9SVDkgZHhWaWV3cG9ydDsKLSAgICBkeFZpZXdwb3J0LlggPSBnbDo6Y2xhbXAoYWN0
dWFsVmlld3BvcnQueCwgMCwgc3RhdGljX2Nhc3Q8aW50PihtUmVuZGVyVGFyZ2V0RGVzYy53aWR0
aCkpOwotICAgIGR4Vmlld3BvcnQuWSA9IGdsOjpjbGFtcChhY3R1YWxWaWV3cG9ydC55LCAwLCBz
dGF0aWNfY2FzdDxpbnQ+KG1SZW5kZXJUYXJnZXREZXNjLmhlaWdodCkpOwotICAgIGR4Vmlld3Bv
cnQuV2lkdGggPSBnbDo6Y2xhbXAoYWN0dWFsVmlld3BvcnQud2lkdGgsIDAsIHN0YXRpY19jYXN0
PGludD4obVJlbmRlclRhcmdldERlc2Mud2lkdGgpIC0gc3RhdGljX2Nhc3Q8aW50PihkeFZpZXdw
b3J0LlgpKTsKLSAgICBkeFZpZXdwb3J0LkhlaWdodCA9IGdsOjpjbGFtcChhY3R1YWxWaWV3cG9y
dC5oZWlnaHQsIDAsIHN0YXRpY19jYXN0PGludD4obVJlbmRlclRhcmdldERlc2MuaGVpZ2h0KSAt
IHN0YXRpY19jYXN0PGludD4oZHhWaWV3cG9ydC5ZKSk7Ci0gICAgZHhWaWV3cG9ydC5NaW5aID0g
YWN0dWFsWk5lYXI7Ci0gICAgZHhWaWV3cG9ydC5NYXhaID0gYWN0dWFsWkZhcjsKLQotICAgIGlm
IChkeFZpZXdwb3J0LldpZHRoIDw9IDAgfHwgZHhWaWV3cG9ydC5IZWlnaHQgPD0gMCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBOb3RoaW5nIHRvIHJlbmRlcgotICAgIH0KLQot
ICAgIGZsb2F0IGRlcHRoRnJvbnQgPSAhZ2w6OklzVHJpYW5nbGVNb2RlKGRyYXdNb2RlKSA/IDAu
MGYgOiAoZnJvbnRGYWNlID09IEdMX0NDVyA/IDEuMGYgOiAtMS4wZik7Ci0KLSAgICBib29sIHZp
ZXdwb3J0Q2hhbmdlZCA9IG1Gb3JjZVNldFZpZXdwb3J0IHx8IG1lbWNtcCgmYWN0dWFsVmlld3Bv
cnQsICZtQ3VyVmlld3BvcnQsIHNpemVvZihnbDo6UmVjdGFuZ2xlKSkgIT0gMCB8fAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYWN0dWFsWk5lYXIgIT0gbUN1ck5lYXIgfHwgYWN0dWFsWkZh
ciAhPSBtQ3VyRmFyIHx8IG1DdXJEZXB0aEZyb250ICE9IGRlcHRoRnJvbnQ7Ci0gICAgaWYgKHZp
ZXdwb3J0Q2hhbmdlZCkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2UtPlNldFZpZXdwb3J0KCZkeFZp
ZXdwb3J0KTsKLQotICAgICAgICBtQ3VyVmlld3BvcnQgPSBhY3R1YWxWaWV3cG9ydDsKLSAgICAg
ICAgbUN1ck5lYXIgPSBhY3R1YWxaTmVhcjsKLSAgICAgICAgbUN1ckZhciA9IGFjdHVhbFpGYXI7
Ci0gICAgICAgIG1DdXJEZXB0aEZyb250ID0gZGVwdGhGcm9udDsKLQotICAgICAgICBkeF9WZXJ0
ZXhDb25zdGFudHMgdmMgPSB7MH07Ci0gICAgICAgIGR4X1BpeGVsQ29uc3RhbnRzIHBjID0gezB9
OwotCi0gICAgICAgIHZjLnZpZXdBZGp1c3RbMF0gPSAoZmxvYXQpKChhY3R1YWxWaWV3cG9ydC53
aWR0aCAtIChpbnQpZHhWaWV3cG9ydC5XaWR0aCkgKyAyICogKGFjdHVhbFZpZXdwb3J0LnggLSAo
aW50KWR4Vmlld3BvcnQuWCkgLSAxKSAvIGR4Vmlld3BvcnQuV2lkdGg7Ci0gICAgICAgIHZjLnZp
ZXdBZGp1c3RbMV0gPSAoZmxvYXQpKChhY3R1YWxWaWV3cG9ydC5oZWlnaHQgLSAoaW50KWR4Vmll
d3BvcnQuSGVpZ2h0KSArIDIgKiAoYWN0dWFsVmlld3BvcnQueSAtIChpbnQpZHhWaWV3cG9ydC5Z
KSAtIDEpIC8gZHhWaWV3cG9ydC5IZWlnaHQ7Ci0gICAgICAgIHZjLnZpZXdBZGp1c3RbMl0gPSAo
ZmxvYXQpYWN0dWFsVmlld3BvcnQud2lkdGggLyBkeFZpZXdwb3J0LldpZHRoOwotICAgICAgICB2
Yy52aWV3QWRqdXN0WzNdID0gKGZsb2F0KWFjdHVhbFZpZXdwb3J0LmhlaWdodCAvIGR4Vmlld3Bv
cnQuSGVpZ2h0OwotCi0gICAgICAgIHBjLnZpZXdDb29yZHNbMF0gPSBhY3R1YWxWaWV3cG9ydC53
aWR0aCAgKiAwLjVmOwotICAgICAgICBwYy52aWV3Q29vcmRzWzFdID0gYWN0dWFsVmlld3BvcnQu
aGVpZ2h0ICogMC41ZjsKLSAgICAgICAgcGMudmlld0Nvb3Jkc1syXSA9IGFjdHVhbFZpZXdwb3J0
LnggKyAoYWN0dWFsVmlld3BvcnQud2lkdGggICogMC41Zik7Ci0gICAgICAgIHBjLnZpZXdDb29y
ZHNbM10gPSBhY3R1YWxWaWV3cG9ydC55ICsgKGFjdHVhbFZpZXdwb3J0LmhlaWdodCAqIDAuNWYp
OwotCi0gICAgICAgIHBjLmRlcHRoRnJvbnRbMF0gPSAoYWN0dWFsWkZhciAtIGFjdHVhbFpOZWFy
KSAqIDAuNWY7Ci0gICAgICAgIHBjLmRlcHRoRnJvbnRbMV0gPSAoYWN0dWFsWk5lYXIgKyBhY3R1
YWxaRmFyKSAqIDAuNWY7Ci0gICAgICAgIHBjLmRlcHRoRnJvbnRbMl0gPSBkZXB0aEZyb250Owot
Ci0gICAgICAgIHZjLmRlcHRoUmFuZ2VbMF0gPSBhY3R1YWxaTmVhcjsKLSAgICAgICAgdmMuZGVw
dGhSYW5nZVsxXSA9IGFjdHVhbFpGYXI7Ci0gICAgICAgIHZjLmRlcHRoUmFuZ2VbMl0gPSBhY3R1
YWxaRmFyIC0gYWN0dWFsWk5lYXI7Ci0KLSAgICAgICAgcGMuZGVwdGhSYW5nZVswXSA9IGFjdHVh
bFpOZWFyOwotICAgICAgICBwYy5kZXB0aFJhbmdlWzFdID0gYWN0dWFsWkZhcjsKLSAgICAgICAg
cGMuZGVwdGhSYW5nZVsyXSA9IGFjdHVhbFpGYXIgLSBhY3R1YWxaTmVhcjsKLQotICAgICAgICBp
ZiAobWVtY21wKCZ2YywgJm1WZXJ0ZXhDb25zdGFudHMsIHNpemVvZihkeF9WZXJ0ZXhDb25zdGFu
dHMpKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBtVmVydGV4Q29uc3RhbnRzID0gdmM7
Ci0gICAgICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChtZW1jbXAoJnBjLCAmbVBpeGVsQ29uc3RhbnRzLCBzaXplb2YoZHhfUGl4ZWxDb25z
dGFudHMpKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBtUGl4ZWxDb25zdGFudHMgPSBw
YzsKLSAgICAgICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgbUZvcmNlU2V0Vmlld3BvcnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBSZW5kZXJlcjk6OmFwcGx5UHJpbWl0aXZlVHlwZShHTGVudW0gbW9kZSwgR0xzaXpl
aSBjb3VudCkKLXsKLSAgICBzd2l0Y2ggKG1vZGUpCi0gICAgewotICAgICAgY2FzZSBHTF9QT0lO
VFM6Ci0gICAgICAgIG1QcmltaXRpdmVUeXBlID0gRDNEUFRfUE9JTlRMSVNUOwotICAgICAgICBt
UHJpbWl0aXZlQ291bnQgPSBjb3VudDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xJ
TkVTOgotICAgICAgICBtUHJpbWl0aXZlVHlwZSA9IEQzRFBUX0xJTkVMSVNUOwotICAgICAgICBt
UHJpbWl0aXZlQ291bnQgPSBjb3VudCAvIDI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9MSU5FX0xPT1A6Ci0gICAgICAgIG1QcmltaXRpdmVUeXBlID0gRDNEUFRfTElORVNUUklQOwot
ICAgICAgICBtUHJpbWl0aXZlQ291bnQgPSBjb3VudCAtIDE7ICAgLy8gRDNEIGRvZXNuJ3Qgc3Vw
cG9ydCBsaW5lIGxvb3BzLCBzbyB3ZSBkcmF3IHRoZSBsYXN0IGxpbmUgc2VwYXJhdGVseQotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTElORV9TVFJJUDoKLSAgICAgICAgbVByaW1pdGl2
ZVR5cGUgPSBEM0RQVF9MSU5FU1RSSVA7Ci0gICAgICAgIG1QcmltaXRpdmVDb3VudCA9IGNvdW50
IC0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1RSSUFOR0xFUzoKLSAgICAgICAg
bVByaW1pdGl2ZVR5cGUgPSBEM0RQVF9UUklBTkdMRUxJU1Q7Ci0gICAgICAgIG1QcmltaXRpdmVD
b3VudCA9IGNvdW50IC8gMzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1RSSUFOR0xF
X1NUUklQOgotICAgICAgICBtUHJpbWl0aXZlVHlwZSA9IEQzRFBUX1RSSUFOR0xFU1RSSVA7Ci0g
ICAgICAgIG1QcmltaXRpdmVDb3VudCA9IGNvdW50IC0gMjsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX1RSSUFOR0xFX0ZBTjoKLSAgICAgICAgbVByaW1pdGl2ZVR5cGUgPSBEM0RQVF9U
UklBTkdMRUZBTjsKLSAgICAgICAgbVByaW1pdGl2ZUNvdW50ID0gY291bnQgLSAyOwotICAgICAg
ICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1QcmltaXRpdmVDb3VudCA+
IDA7Ci19Ci0KLQotZ2w6OlJlbmRlcmJ1ZmZlciAqUmVuZGVyZXI5OjpnZXROdWxsQ29sb3JidWZm
ZXIoZ2w6OlJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIpCi17Ci0gICAgaWYgKCFkZXB0aGJ1ZmZl
cikKLSAgICB7Ci0gICAgICAgIEVSUigiVW5leHBlY3RlZCBudWxsIGRlcHRoYnVmZmVyIGZvciBk
ZXB0aC1vbmx5IEZCTy4iKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgR0xz
aXplaSB3aWR0aCAgPSBkZXB0aGJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICBHTHNpemVpIGhlaWdo
dCA9IGRlcHRoYnVmZmVyLT5nZXRIZWlnaHQoKTsKLQotICAgIC8vIHNlYXJjaCBjYWNoZWQgbnVs
bGNvbG9yYnVmZmVycwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX05VTExfQ09MT1JCVUZG
RVJfQ0FDSEVfRU5UUklFUzsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKG1OdWxsQ29sb3JidWZm
ZXJDYWNoZVtpXS5idWZmZXIgIT0gTlVMTCAmJgotICAgICAgICAgICAgbU51bGxDb2xvcmJ1ZmZl
ckNhY2hlW2ldLndpZHRoID09IHdpZHRoICYmCi0gICAgICAgICAgICBtTnVsbENvbG9yYnVmZmVy
Q2FjaGVbaV0uaGVpZ2h0ID09IGhlaWdodCkKLSAgICAgICAgewotICAgICAgICAgICAgbU51bGxD
b2xvcmJ1ZmZlckNhY2hlW2ldLmxydUNvdW50ID0gKyttTWF4TnVsbENvbG9yYnVmZmVyTFJVOwot
ICAgICAgICAgICAgcmV0dXJuIG1OdWxsQ29sb3JidWZmZXJDYWNoZVtpXS5idWZmZXI7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBnbDo6UmVuZGVyYnVmZmVyICpudWxsYnVmZmVyID0gbmV3IGds
OjpSZW5kZXJidWZmZXIodGhpcywgMCwgbmV3IGdsOjpDb2xvcmJ1ZmZlcih0aGlzLCB3aWR0aCwg
aGVpZ2h0LCBHTF9OT05FLCAwKSk7Ci0KLSAgICAvLyBhZGQgbnVsbGJ1ZmZlciB0byB0aGUgY2Fj
aGUKLSAgICBOdWxsQ29sb3JidWZmZXJDYWNoZUVudHJ5ICpvbGRlc3QgPSAmbU51bGxDb2xvcmJ1
ZmZlckNhY2hlWzBdOwotICAgIGZvciAoaW50IGkgPSAxOyBpIDwgTlVNX05VTExfQ09MT1JCVUZG
RVJfQ0FDSEVfRU5UUklFUzsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKG1OdWxsQ29sb3JidWZm
ZXJDYWNoZVtpXS5scnVDb3VudCA8IG9sZGVzdC0+bHJ1Q291bnQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG9sZGVzdCA9ICZtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV07Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBkZWxldGUgb2xkZXN0LT5idWZmZXI7Ci0gICAgb2xkZXN0LT5idWZmZXIgPSBu
dWxsYnVmZmVyOwotICAgIG9sZGVzdC0+bHJ1Q291bnQgPSArK21NYXhOdWxsQ29sb3JidWZmZXJM
UlU7Ci0gICAgb2xkZXN0LT53aWR0aCA9IHdpZHRoOwotICAgIG9sZGVzdC0+aGVpZ2h0ID0gaGVp
Z2h0OwotCi0gICAgcmV0dXJuIG51bGxidWZmZXI7Ci19Ci0KLWJvb2wgUmVuZGVyZXI5OjphcHBs
eVJlbmRlclRhcmdldChnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyKQotewotICAgIC8vIGlm
IHRoZXJlIGlzIG5vIGNvbG9yIGF0dGFjaG1lbnQgd2UgbXVzdCBzeW50aGVzaXplIGEgTlVMTCBj
b2xvcmF0dGFjaG1lbnQKLSAgICAvLyB0byBrZWVwIHRoZSBEM0QgcnVudGltZSBoYXBweS4gIFRo
aXMgc2hvdWxkIG9ubHkgYmUgcG9zc2libGUgaWYgZGVwdGggdGV4dHVyaW5nLgotICAgIGdsOjpS
ZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9IE5VTEw7Ci0gICAgaWYgKGZyYW1lYnVm
ZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoMCkgIT0gR0xfTk9ORSkKLSAgICB7Ci0gICAgICAgIHJl
bmRlcmJ1ZmZlck9iamVjdCA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigwKTsKLSAgICB9
Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmVuZGVyYnVmZmVyT2JqZWN0ID0gZ2V0TnVsbENv
bG9yYnVmZmVyKGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpKTsKLSAgICB9Ci0gICAgaWYg
KCFyZW5kZXJidWZmZXJPYmplY3QpCi0gICAgewotICAgICAgICBFUlIoInVuYWJsZSB0byBsb2Nh
dGUgcmVuZGVyYnVmZmVyIGZvciBGQk8uIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBib29sIHJlbmRlclRhcmdldENoYW5nZWQgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBp
bnQgcmVuZGVyVGFyZ2V0U2VyaWFsID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRTZXJpYWwoKTsK
LSAgICBpZiAocmVuZGVyVGFyZ2V0U2VyaWFsICE9IG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFs
KQotICAgIHsKLSAgICAgICAgLy8gQXBwbHkgdGhlIHJlbmRlciB0YXJnZXQgb24gdGhlIGRldmlj
ZQotICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0U3VyZmFjZSA9IE5VTEw7
Ci0KLSAgICAgICAgUmVuZGVyVGFyZ2V0ICpyZW5kZXJUYXJnZXQgPSByZW5kZXJidWZmZXJPYmpl
Y3QtPmdldFJlbmRlclRhcmdldCgpOwotICAgICAgICBpZiAocmVuZGVyVGFyZ2V0KQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZW5kZXJUYXJnZXRTdXJmYWNlID0gUmVuZGVyVGFyZ2V0OTo6bWFr
ZVJlbmRlclRhcmdldDkocmVuZGVyVGFyZ2V0KS0+Z2V0U3VyZmFjZSgpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKCFyZW5kZXJUYXJnZXRTdXJmYWNlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBFUlIoInJlbmRlciB0YXJnZXQgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBDb250ZXh0IG11c3QgYmUgbG9zdAotICAgICAgICB9
Ci0KLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIHJlbmRlclRhcmdldFN1cmZh
Y2UpOwotICAgICAgICByZW5kZXJUYXJnZXRTdXJmYWNlLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAg
bUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwgPSByZW5kZXJUYXJnZXRTZXJpYWw7Ci0gICAgICAg
IHJlbmRlclRhcmdldENoYW5nZWQgPSB0cnVlOwotICAgIH0KLQotICAgIGdsOjpSZW5kZXJidWZm
ZXIgKmRlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgdW5zaWduZWQgaW50IGRlcHRoYnVmZmVyU2Vy
aWFsID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbGJ1ZmZlclNlcmlhbCA9IDA7Ci0gICAg
aWYgKGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQotICAgIHsK
LSAgICAgICAgZGVwdGhTdGVuY2lsID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCk7Ci0g
ICAgICAgIGlmICghZGVwdGhTdGVuY2lsKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkRl
cHRoIHN0ZW5jaWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGRlcHRoYnVmZmVyU2VyaWFsID0gZGVw
dGhTdGVuY2lsLT5nZXRTZXJpYWwoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZnJhbWVidWZmZXIt
PmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKLSAgICB7Ci0gICAgICAgIGRlcHRo
U3RlbmNpbCA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCk7Ci0gICAgICAgIGlmICgh
ZGVwdGhTdGVuY2lsKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkRlcHRoIHN0ZW5jaWwg
cG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotCi0gICAgICAgIHN0ZW5jaWxidWZmZXJTZXJpYWwgPSBkZXB0aFN0ZW5jaWwt
PmdldFNlcmlhbCgpOwotICAgIH0KLQotICAgIGlmIChkZXB0aGJ1ZmZlclNlcmlhbCAhPSBtQXBw
bGllZERlcHRoYnVmZmVyU2VyaWFsIHx8Ci0gICAgICAgIHN0ZW5jaWxidWZmZXJTZXJpYWwgIT0g
bUFwcGxpZWRTdGVuY2lsYnVmZmVyU2VyaWFsIHx8Ci0gICAgICAgICFtRGVwdGhTdGVuY2lsSW5p
dGlhbGl6ZWQpCi0gICAgewotICAgICAgICB1bnNpZ25lZCBpbnQgZGVwdGhTaXplID0gMDsKLSAg
ICAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxTaXplID0gMDsKLQotICAgICAgICAvLyBBcHBseSB0
aGUgZGVwdGggc3RlbmNpbCBvbiB0aGUgZGV2aWNlCi0gICAgICAgIGlmIChkZXB0aFN0ZW5jaWwp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWxT
dXJmYWNlID0gTlVMTDsKLSAgICAgICAgICAgIFJlbmRlclRhcmdldCAqZGVwdGhTdGVuY2lsUmVu
ZGVyVGFyZ2V0ID0gZGVwdGhTdGVuY2lsLT5nZXREZXB0aFN0ZW5jaWwoKTsKLQotICAgICAgICAg
ICAgaWYgKGRlcHRoU3RlbmNpbFJlbmRlclRhcmdldCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBkZXB0aFN0ZW5jaWxTdXJmYWNlID0gUmVuZGVyVGFyZ2V0OTo6bWFrZVJlbmRlclRh
cmdldDkoZGVwdGhTdGVuY2lsUmVuZGVyVGFyZ2V0KS0+Z2V0U3VyZmFjZSgpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAoIWRlcHRoU3RlbmNpbFN1cmZhY2UpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgRVJSKCJkZXB0aCBzdGVuY2lsIHBvaW50ZXIgdW5leHBlY3Rl
ZGx5IG51bGwuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIENvbnRleHQg
bXVzdCBiZSBsb3N0Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1EZXZpY2UtPlNldERl
cHRoU3RlbmNpbFN1cmZhY2UoZGVwdGhTdGVuY2lsU3VyZmFjZSk7Ci0gICAgICAgICAgICBkZXB0
aFN0ZW5jaWxTdXJmYWNlLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgICAgIGRlcHRoU2l6ZSA9IGRl
cHRoU3RlbmNpbC0+Z2V0RGVwdGhTaXplKCk7Ci0gICAgICAgICAgICBzdGVuY2lsU2l6ZSA9IGRl
cHRoU3RlbmNpbC0+Z2V0U3RlbmNpbFNpemUoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UoTlVM
TCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCB8
fCBkZXB0aFNpemUgIT0gbUN1ckRlcHRoU2l6ZSkKLSAgICAgICAgewotICAgICAgICAgICAgbUN1
ckRlcHRoU2l6ZSA9IGRlcHRoU2l6ZTsKLSAgICAgICAgICAgIG1Gb3JjZVNldFJhc3RlclN0YXRl
ID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghbURlcHRoU3RlbmNpbEluaXRpYWxp
emVkIHx8IHN0ZW5jaWxTaXplICE9IG1DdXJTdGVuY2lsU2l6ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgbUN1clN0ZW5jaWxTaXplID0gc3RlbmNpbFNpemU7Ci0gICAgICAgICAgICBtRm9yY2VT
ZXREZXB0aFN0ZW5jaWxTdGF0ZSA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBtQXBwbGll
ZERlcHRoYnVmZmVyU2VyaWFsID0gZGVwdGhidWZmZXJTZXJpYWw7Ci0gICAgICAgIG1BcHBsaWVk
U3RlbmNpbGJ1ZmZlclNlcmlhbCA9IHN0ZW5jaWxidWZmZXJTZXJpYWw7Ci0gICAgICAgIG1EZXB0
aFN0ZW5jaWxJbml0aWFsaXplZCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHJlbmRlclRhcmdl
dENoYW5nZWQgfHwgIW1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQpCi0gICAgewotICAgICAg
ICBtRm9yY2VTZXRTY2lzc29yID0gdHJ1ZTsKLSAgICAgICAgbUZvcmNlU2V0Vmlld3BvcnQgPSB0
cnVlOwotCi0gICAgICAgIG1SZW5kZXJUYXJnZXREZXNjLndpZHRoID0gcmVuZGVyYnVmZmVyT2Jq
ZWN0LT5nZXRXaWR0aCgpOwotICAgICAgICBtUmVuZGVyVGFyZ2V0RGVzYy5oZWlnaHQgPSByZW5k
ZXJidWZmZXJPYmplY3QtPmdldEhlaWdodCgpOwotICAgICAgICBtUmVuZGVyVGFyZ2V0RGVzYy5m
b3JtYXQgPSByZW5kZXJidWZmZXJPYmplY3QtPmdldEFjdHVhbEZvcm1hdCgpOwotICAgICAgICBt
UmVuZGVyVGFyZ2V0RGVzY0luaXRpYWxpemVkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotR0xlbnVtIFJlbmRlcmVyOTo6YXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlByb2dy
YW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmli
dXRlc1tdLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpCi17
Ci0gICAgVHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW2dsOjpNQVhfVkVSVEVYX0FUVFJJ
QlNdOwotICAgIEdMZW51bSBlcnIgPSBtVmVydGV4RGF0YU1hbmFnZXItPnByZXBhcmVWZXJ0ZXhE
YXRhKHZlcnRleEF0dHJpYnV0ZXMsIHByb2dyYW1CaW5hcnksIGZpcnN0LCBjb3VudCwgYXR0cmli
dXRlcywgaW5zdGFuY2VzKTsKLSAgICBpZiAoZXJyICE9IEdMX05PX0VSUk9SKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG1WZXJ0ZXhEZWNsYXJh
dGlvbkNhY2hlLmFwcGx5RGVjbGFyYXRpb24obURldmljZSwgYXR0cmlidXRlcywgcHJvZ3JhbUJp
bmFyeSwgaW5zdGFuY2VzLCAmbVJlcGVhdERyYXcpOwotfQotCi0vLyBBcHBsaWVzIHRoZSBpbmRp
Y2VzIGFuZCBlbGVtZW50IGFycmF5IGJpbmRpbmdzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQot
R0xlbnVtIFJlbmRlcmVyOTo6YXBwbHlJbmRleEJ1ZmZlcihjb25zdCBHTHZvaWQgKmluZGljZXMs
IGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgR0xzaXplaSBjb3VudCwgR0xlbnVtIG1v
ZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pCi17Ci0gICAg
R0xlbnVtIGVyciA9IG1JbmRleERhdGFNYW5hZ2VyLT5wcmVwYXJlSW5kZXhEYXRhKHR5cGUsIGNv
dW50LCBlbGVtZW50QXJyYXlCdWZmZXIsIGluZGljZXMsIGluZGV4SW5mbyk7Ci0KLSAgICBpZiAo
ZXJyID09IEdMX05PX0VSUk9SKQotICAgIHsKLSAgICAgICAgLy8gRGlyZWN0bHkgYmluZGluZyB0
aGUgc3RvcmFnZSBidWZmZXIgaXMgbm90IHN1cHBvcnRlZCBmb3IgZDNkOQotICAgICAgICBBU1NF
UlQoaW5kZXhJbmZvLT5zdG9yYWdlID09IE5VTEwpOwotCi0gICAgICAgIGlmIChpbmRleEluZm8t
PnNlcmlhbCAhPSBtQXBwbGllZElCU2VyaWFsKQotICAgICAgICB7Ci0gICAgICAgICAgICBJbmRl
eEJ1ZmZlcjkqIGluZGV4QnVmZmVyID0gSW5kZXhCdWZmZXI5OjptYWtlSW5kZXhCdWZmZXI5KGlu
ZGV4SW5mby0+aW5kZXhCdWZmZXIpOwotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRJbmRpY2Vz
KGluZGV4QnVmZmVyLT5nZXRCdWZmZXIoKSk7Ci0gICAgICAgICAgICBtQXBwbGllZElCU2VyaWFs
ID0gaW5kZXhJbmZvLT5zZXJpYWw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZXJy
OwotfQotCi12b2lkIFJlbmRlcmVyOTo6ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBj
b3VudCwgR0xzaXplaSBpbnN0YW5jZXMpCi17Ci0gICAgc3RhcnRTY2VuZSgpOwotICAgICAgICAK
LSAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCi0gICAgewotICAgICAgICBkcmF3TGluZUxv
b3AoY291bnQsIEdMX05PTkUsIE5VTEwsIDAsIE5VTEwpOwotICAgIH0KLSAgICBlbHNlIGlmIChp
bnN0YW5jZXMgPiAwKQotICAgIHsKLSAgICAgICAgU3RhdGljSW5kZXhCdWZmZXJJbnRlcmZhY2Ug
KmNvdW50aW5nSUIgPSBtSW5kZXhEYXRhTWFuYWdlci0+Z2V0Q291bnRpbmdJbmRpY2VzKGNvdW50
KTsKLSAgICAgICAgaWYgKGNvdW50aW5nSUIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICht
QXBwbGllZElCU2VyaWFsICE9IGNvdW50aW5nSUItPmdldFNlcmlhbCgpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIEluZGV4QnVmZmVyOSAqaW5kZXhCdWZmZXIgPSBJbmRleEJ1ZmZl
cjk6Om1ha2VJbmRleEJ1ZmZlcjkoY291bnRpbmdJQi0+Z2V0SW5kZXhCdWZmZXIoKSk7Ci0KLSAg
ICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRJbmRpY2VzKGluZGV4QnVmZmVyLT5nZXRCdWZmZXIo
KSk7Ci0gICAgICAgICAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IGNvdW50aW5nSUItPmdldFNl
cmlhbCgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG1SZXBlYXREcmF3OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURldmlj
ZS0+RHJhd0luZGV4ZWRQcmltaXRpdmUobVByaW1pdGl2ZVR5cGUsIDAsIDAsIGNvdW50LCAwLCBt
UHJpbWl0aXZlQ291bnQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGEgY291bnRpbmcg
aW5kZXggYnVmZmVyIGZvciBnbERyYXdBcnJheXNJbnN0YW5jZWQuIik7Ci0gICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0gICAgfQotICAg
IGVsc2UgICAvLyBSZWd1bGFyIGNhc2UKLSAgICB7Ci0gICAgICAgIG1EZXZpY2UtPkRyYXdQcmlt
aXRpdmUobVByaW1pdGl2ZVR5cGUsIDAsIG1QcmltaXRpdmVDb3VudCk7Ci0gICAgfQotfQotCi12
b2lkIFJlbmRlcmVyOTo6ZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBH
TGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJy
YXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbywgR0xzaXplaSAv
Kmluc3RhbmNlcyovKQotewotICAgIHN0YXJ0U2NlbmUoKTsKLQotICAgIGlmIChtb2RlID09IEdM
X1BPSU5UUykKLSAgICB7Ci0gICAgICAgIGRyYXdJbmRleGVkUG9pbnRzKGNvdW50LCB0eXBlLCBp
bmRpY2VzLCBlbGVtZW50QXJyYXlCdWZmZXIpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlID09
IEdMX0xJTkVfTE9PUCkKLSAgICB7Ci0gICAgICAgIGRyYXdMaW5lTG9vcChjb3VudCwgdHlwZSwg
aW5kaWNlcywgaW5kZXhJbmZvLm1pbkluZGV4LCBlbGVtZW50QXJyYXlCdWZmZXIpOwotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1SZXBlYXREcmF3
OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIEdMc2l6ZWkgdmVydGV4Q291bnQgPSBpbmRl
eEluZm8ubWF4SW5kZXggLSBpbmRleEluZm8ubWluSW5kZXggKyAxOwotICAgICAgICAgICAgbURl
dmljZS0+RHJhd0luZGV4ZWRQcmltaXRpdmUobVByaW1pdGl2ZVR5cGUsIC0oSU5UKWluZGV4SW5m
by5taW5JbmRleCwgaW5kZXhJbmZvLm1pbkluZGV4LCB2ZXJ0ZXhDb3VudCwgaW5kZXhJbmZvLnN0
YXJ0SW5kZXgsIG1QcmltaXRpdmVDb3VudCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
UmVuZGVyZXI5OjpkcmF3TGluZUxvb3AoR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0
IEdMdm9pZCAqaW5kaWNlcywgaW50IG1pbkluZGV4LCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlC
dWZmZXIpCi17Ci0gICAgLy8gR2V0IHRoZSByYXcgaW5kaWNlcyBmb3IgYW4gaW5kZXhlZCBkcmF3
Ci0gICAgaWYgKHR5cGUgIT0gR0xfTk9ORSAmJiBlbGVtZW50QXJyYXlCdWZmZXIpCi0gICAgewot
ICAgICAgICBnbDo6QnVmZmVyICppbmRleEJ1ZmZlciA9IGVsZW1lbnRBcnJheUJ1ZmZlcjsKLSAg
ICAgICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGluZGV4QnVmZmVyLT5nZXRTdG9yYWdlKCk7
Ci0gICAgICAgIGludHB0cl90IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGlu
ZGljZXMpOwotICAgICAgICBpbmRpY2VzID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KHN0
b3JhZ2UtPmdldERhdGEoKSkgKyBvZmZzZXQ7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaW50IHN0
YXJ0SW5kZXggPSAwOwotCi0gICAgaWYgKGdldDMyQml0SW5kZXhTdXBwb3J0KCkpCi0gICAgewot
ICAgICAgICBpZiAoIW1MaW5lTG9vcElCKQotICAgICAgICB7Ci0gICAgICAgICAgICBtTGluZUxv
b3BJQiA9IG5ldyBTdHJlYW1pbmdJbmRleEJ1ZmZlckludGVyZmFjZSh0aGlzKTsKLSAgICAgICAg
ICAgIGlmICghbUxpbmVMb29wSUItPnJlc2VydmVCdWZmZXJTcGFjZShJTklUSUFMX0lOREVYX0JV
RkZFUl9TSVpFLCBHTF9VTlNJR05FRF9JTlQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGRlbGV0ZSBtTGluZUxvb3BJQjsKLSAgICAgICAgICAgICAgICBtTGluZUxvb3BJQiA9IE5V
TEw7Ci0KLSAgICAgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSAzMi1iaXQgbG9v
cGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oY291bnQpICsgMSA+
IChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpIC8gc2l6ZW9mKHVuc2ln
bmVkIGludCkpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUg
YSAzMi1iaXQgbG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUCwgdG9vIG1hbnkg
aW5kaWNlcyByZXF1aXJlZC4iKTsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDaGVja2VkIGJ5IFJlbmRlcmVy
OTo6YXBwbHlQcmltaXRpdmVUeXBlCi0gICAgICAgIEFTU0VSVChjb3VudCA+PSAwKTsKLQotICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgc3BhY2VOZWVkZWQgPSAoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgaW50Pihjb3VudCkgKyAxKSAqIHNpemVvZih1bnNpZ25lZCBpbnQpOwotICAgICAgICBpZiAo
IW1MaW5lTG9vcElCLT5yZXNlcnZlQnVmZmVyU3BhY2Uoc3BhY2VOZWVkZWQsIEdMX1VOU0lHTkVE
X0lOVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiQ291bGQgbm90IHJlc2VydmUgZW5v
dWdoIHNwYWNlIGluIGxvb3BpbmcgaW5kZXggYnVmZmVyIGZvciBHTF9MSU5FX0xPT1AuIik7Ci0g
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgdm9pZCogbWFwcGVkTWVtb3J5ID0gTlVMTDsKLSAgICAgICAgdW5zaWduZWQg
aW50IG9mZnNldCA9IDA7Ci0gICAgICAgIGlmICghbUxpbmVMb29wSUItPm1hcEJ1ZmZlcihzcGFj
ZU5lZWRlZCwgJm1hcHBlZE1lbW9yeSwgJm9mZnNldCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEVSUigiQ291bGQgbm90IG1hcCBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKLSAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBzdGFydEluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihvZmZzZXQp
IC8gNDsKLSAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNp
Z25lZCBpbnQqPihtYXBwZWRNZW1vcnkpOwotCi0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAg
ICAgewotICAgICAgICAgIGNhc2UgR0xfTk9ORTogICAvLyBOb24taW5kZXhlZCBkcmF3Ci0gICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgZGF0YVtpXSA9IGk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBk
YXRhW2NvdW50XSA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNv
bnN0IEdMdWJ5dGUqPihpbmRpY2VzKVtpXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRh
dGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpWzBdOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKLSAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRp
Y2VzKVtpXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRhdGFbY291bnRdID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVswXTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgotICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRhdGFb
aV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVtpXTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1aW50Kj4o
aW5kaWNlcylbMF07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtTGluZUxvb3BJQi0+dW5tYXBC
dWZmZXIoKSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgdW5tYXAgaW5k
ZXggYnVmZmVyIGZvciBHTF9MSU5FX0xPT1AuIik7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgIGlmICghbUxpbmVMb29wSUIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1MaW5l
TG9vcElCID0gbmV3IFN0cmVhbWluZ0luZGV4QnVmZmVySW50ZXJmYWNlKHRoaXMpOwotICAgICAg
ICAgICAgaWYgKCFtTGluZUxvb3BJQi0+cmVzZXJ2ZUJ1ZmZlclNwYWNlKElOSVRJQUxfSU5ERVhf
QlVGRkVSX1NJWkUsIEdMX1VOU0lHTkVEX1NIT1JUKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBkZWxldGUgbUxpbmVMb29wSUI7Ci0gICAgICAgICAgICAgICAgbUxpbmVMb29wSUIg
PSBOVUxMOwotCi0gICAgICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGEgMTYtYml0
IGxvb3BpbmcgaW5kZXggYnVmZmVyIGZvciBHTF9MSU5FX0xPT1AuIik7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIENoZWNrZWQgYnkgUmVuZGVyZXI5OjphcHBseVByaW1pdGl2
ZVR5cGUKLSAgICAgICAgQVNTRVJUKGNvdW50ID49IDApOwotCi0gICAgICAgIGlmIChzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBpbnQ+KGNvdW50KSArIDEgPiAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZCBzaG9ydD46Om1heCgpIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBhIDE2LWJpdCBsb29waW5nIGluZGV4
IGJ1ZmZlciBmb3IgR0xfTElORV9MT09QLCB0b28gbWFueSBpbmRpY2VzIHJlcXVpcmVkLiIpOwot
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBzcGFjZU5lZWRlZCA9IChzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBpbnQ+KGNvdW50KSArIDEpICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKLSAg
ICAgICAgaWYgKCFtTGluZUxvb3BJQi0+cmVzZXJ2ZUJ1ZmZlclNwYWNlKHNwYWNlTmVlZGVkLCBH
TF9VTlNJR05FRF9TSE9SVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiQ291bGQgbm90
IHJlc2VydmUgZW5vdWdoIHNwYWNlIGluIGxvb3BpbmcgaW5kZXggYnVmZmVyIGZvciBHTF9MSU5F
X0xPT1AuIik7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCogbWFwcGVkTWVtb3J5ID0gTlVMTDsKLSAgICAg
ICAgdW5zaWduZWQgaW50IG9mZnNldDsKLSAgICAgICAgaWYgKG1MaW5lTG9vcElCLT5tYXBCdWZm
ZXIoc3BhY2VOZWVkZWQsICZtYXBwZWRNZW1vcnksICZvZmZzZXQpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBFUlIoIkNvdWxkIG5vdCBtYXAgaW5kZXggYnVmZmVyIGZvciBHTF9MSU5FX0xPT1Au
Iik7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgc3RhcnRJbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4o
b2Zmc2V0KSAvIDI7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0ICpkYXRhID0gcmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZCBzaG9ydCo+KG1hcHBlZE1lbW9yeSk7Ci0KLSAgICAgICAgc3dpdGNoICh0
eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9OT05FOiAgIC8vIE5vbi1pbmRleGVk
IGRyYXcKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBkYXRhW2ldID0gaTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGRhdGFbY291bnRdID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpW2ldOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oaW5kaWNl
cylbMF07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NI
T1JUOgotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVz
aG9ydCo+KGluZGljZXMpW2ldOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGF0YVtjb3Vu
dF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpWzBdOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6Ci0gICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMpW2ldOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25z
dCBHTHVpbnQqPihpbmRpY2VzKVswXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW1MaW5lTG9v
cElCLT51bm1hcEJ1ZmZlcigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkNvdWxkIG5v
dCB1bm1hcCBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKLSAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAobUFwcGxpZWRJQlNlcmlhbCAhPSBtTGluZUxvb3BJQi0+Z2V0U2VyaWFsKCkpCi0gICAg
ewotICAgICAgICBJbmRleEJ1ZmZlcjkgKmluZGV4QnVmZmVyID0gSW5kZXhCdWZmZXI5OjptYWtl
SW5kZXhCdWZmZXI5KG1MaW5lTG9vcElCLT5nZXRJbmRleEJ1ZmZlcigpKTsKLQotICAgICAgICBt
RGV2aWNlLT5TZXRJbmRpY2VzKGluZGV4QnVmZmVyLT5nZXRCdWZmZXIoKSk7Ci0gICAgICAgIG1B
cHBsaWVkSUJTZXJpYWwgPSBtTGluZUxvb3BJQi0+Z2V0U2VyaWFsKCk7Ci0gICAgfQotCi0gICAg
bURldmljZS0+RHJhd0luZGV4ZWRQcmltaXRpdmUoRDNEUFRfTElORVNUUklQLCAtbWluSW5kZXgs
IG1pbkluZGV4LCBjb3VudCwgc3RhcnRJbmRleCwgY291bnQpOwotfQotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KLXN0YXRpYyB2b2lkIGRyYXdQb2ludHMoSURpcmVjdDNERGV2aWNlOSogZGV2aWNl
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHZvaWQgKmluZGljZXMpCi17Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgaW50IGluZGV4
VmFsdWUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHN0YXRpY19jYXN0PGNvbnN0IFQqPihp
bmRpY2VzKVtpXSk7Ci0gICAgICAgIGRldmljZS0+RHJhd1ByaW1pdGl2ZShEM0RQVF9QT0lOVExJ
U1QsIGluZGV4VmFsdWUsIDEpOwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJlcjk6OmRyYXdJbmRl
eGVkUG9pbnRzKEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGlj
ZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlcikKLXsKLSAgICAvLyBEcmF3aW5nIGlu
ZGV4IHBvaW50IGxpc3RzIGlzIHVuc3VwcG9ydGVkIGluIGQzZDksIGZhbGwgYmFjayB0byBhIHJl
Z3VsYXIgRHJhd1ByaW1pdGl2ZSBjYWxsCi0gICAgLy8gZm9yIGVhY2ggaW5kaXZpZHVhbCBwb2lu
dC4gVGhpcyBjYWxsIGlzIG5vdCBleHBlY3RlZCB0byBoYXBwZW4gb2Z0ZW4uCi0KLSAgICBpZiAo
ZWxlbWVudEFycmF5QnVmZmVyKQotICAgIHsKLSAgICAgICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFn
ZSA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Z2V0U3RvcmFnZSgpOwotICAgICAgICBpbnRwdHJfdCBv
ZmZzZXQgPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmRpY2VzKTsKLSAgICAgICAgaW5k
aWNlcyA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihzdG9yYWdlLT5nZXREYXRhKCkpICsg
b2Zmc2V0OwotICAgIH0KLQotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfQllURTogIGRyYXdQb2ludHM8R0x1Ynl0ZT4obURldmljZSwgY291bnQsIGlu
ZGljZXMpOyAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6IGRyYXdQb2lu
dHM8R0x1c2hvcnQ+KG1EZXZpY2UsIGNvdW50LCBpbmRpY2VzKTsgYnJlYWs7Ci0gICAgICAgIGNh
c2UgR0xfVU5TSUdORURfSU5UOiAgIGRyYXdQb2ludHM8R0x1aW50PihtRGV2aWNlLCBjb3VudCwg
aW5kaWNlcyk7ICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAg
fQotfQotCi12b2lkIFJlbmRlcmVyOTo6YXBwbHlTaGFkZXJzKGdsOjpQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5KQotewotICAgIHVuc2lnbmVkIGludCBwcm9ncmFtQmluYXJ5U2VyaWFsID0g
cHJvZ3JhbUJpbmFyeS0+Z2V0U2VyaWFsKCk7Ci0gICAgaWYgKHByb2dyYW1CaW5hcnlTZXJpYWwg
IT0gbUFwcGxpZWRQcm9ncmFtQmluYXJ5U2VyaWFsKQotICAgIHsKLSAgICAgICAgU2hhZGVyRXhl
Y3V0YWJsZSAqdmVydGV4RXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0VmVydGV4RXhlY3V0YWJsZSgp
OwotICAgICAgICBTaGFkZXJFeGVjdXRhYmxlICpwaXhlbEV4ZSA9IHByb2dyYW1CaW5hcnktPmdl
dFBpeGVsRXhlY3V0YWJsZSgpOwotCi0gICAgICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKnZl
cnRleFNoYWRlciA9IE5VTEw7Ci0gICAgICAgIGlmICh2ZXJ0ZXhFeGUpIHZlcnRleFNoYWRlciA9
IFNoYWRlckV4ZWN1dGFibGU5OjptYWtlU2hhZGVyRXhlY3V0YWJsZTkodmVydGV4RXhlKS0+Z2V0
VmVydGV4U2hhZGVyKCk7Ci0KLSAgICAgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpwaXhlbFNo
YWRlciA9IE5VTEw7Ci0gICAgICAgIGlmIChwaXhlbEV4ZSkgcGl4ZWxTaGFkZXIgPSBTaGFkZXJF
eGVjdXRhYmxlOTo6bWFrZVNoYWRlckV4ZWN1dGFibGU5KHBpeGVsRXhlKS0+Z2V0UGl4ZWxTaGFk
ZXIoKTsKLQotICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlcihwaXhlbFNoYWRlcik7Ci0g
ICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgICAgICBw
cm9ncmFtQmluYXJ5LT5kaXJ0eUFsbFVuaWZvcm1zKCk7Ci0gICAgICAgIG1EeFVuaWZvcm1zRGly
dHkgPSB0cnVlOwotCi0gICAgICAgIG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbCA9IHByb2dy
YW1CaW5hcnlTZXJpYWw7Ci0gICAgfQotfQotCi12b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlmb3Jt
cyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlVuaWZvcm1BcnJheSAqdW5p
Zm9ybUFycmF5KQotewotICAgIGZvciAoc3RkOjp2ZWN0b3I8Z2w6OlVuaWZvcm0qPjo6Y29uc3Rf
aXRlcmF0b3IgdWIgPSB1bmlmb3JtQXJyYXktPmJlZ2luKCksIHVlID0gdW5pZm9ybUFycmF5LT5l
bmQoKTsgdWIgIT0gdWU7ICsrdWIpCi0gICAgewotICAgICAgICBnbDo6VW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSA9ICp1YjsKLQotICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+ZGlydHkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEdMZmxvYXQgKmYgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+
ZGF0YTsKLSAgICAgICAgICAgIEdMaW50ICppID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRh
OwotCi0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9TQU1QTEVSX0NVQkU6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfQk9PTDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOgotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVD
NDoKLSAgICAgICAgICAgICAgICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgaSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9B
VF9WRUMzOgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUMjoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgot
ICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6Ci0gICAgICAgICAgICAgICAgYXBwbHlV
bmlmb3JtbmZ2KHRhcmdldFVuaWZvcm0sIGYpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX0lOVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDMjoK
LSAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDMzoKLSAgICAgICAgICAgICAgY2FzZSBHTF9J
TlRfVkVDNDoKLSAgICAgICAgICAgICAgICBhcHBseVVuaWZvcm1uaXYodGFyZ2V0VW5pZm9ybSwg
aSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
dGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8v
IERyaXZlciB1bmlmb3JtcwotICAgIGlmIChtRHhVbmlmb3Jtc0RpcnR5KQotICAgIHsKLSAgICAg
ICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKDAsIChmbG9hdCopJm1WZXJ0ZXhD
b25zdGFudHMsIHNpemVvZihkeF9WZXJ0ZXhDb25zdGFudHMpIC8gc2l6ZW9mKGZsb2F0WzRdKSk7
Ci0gICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKDAsIChmbG9hdCopJm1Q
aXhlbENvbnN0YW50cywgc2l6ZW9mKGR4X1BpeGVsQ29uc3RhbnRzKSAvIHNpemVvZihmbG9hdFs0
XSkpOwotICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gZmFsc2U7Ci0gICAgfQotfQotCi12b2lk
IFJlbmRlcmVyOTo6YXBwbHlVbmlmb3JtbmZ2KGdsOjpVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBj
b25zdCBHTGZsb2F0ICp2KQotewotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wc1JlZ2lzdGVySW5k
ZXggPj0gMCkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRG
KHRhcmdldFVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleCwgdiwgdGFyZ2V0VW5pZm9ybS0+cmVnaXN0
ZXJDb3VudCk7Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzUmVnaXN0ZXJJbmRl
eCA+PSAwKQotICAgIHsKLSAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRG
KHRhcmdldFVuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleCwgdiwgdGFyZ2V0VW5pZm9ybS0+cmVnaXN0
ZXJDb3VudCk7Ci0gICAgfQotfQotCi12b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlmb3Jtbml2KGds
OjpVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGludCAqdikKLXsKLSAgICBBU1NFUlQo
dGFyZ2V0VW5pZm9ybS0+cmVnaXN0ZXJDb3VudCA8PSBNQVhfVkVSVEVYX0NPTlNUQU5UX1ZFQ1RP
UlNfRDNEOSk7Ci0gICAgR0xmbG9hdCB2ZWN0b3JbTUFYX1ZFUlRFWF9DT05TVEFOVF9WRUNUT1JT
X0QzRDldWzRdOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB0YXJnZXRVbmlm
b3JtLT5yZWdpc3RlckNvdW50OyBpKyspCi0gICAgewotICAgICAgICB2ZWN0b3JbaV1bMF0gPSAo
R0xmbG9hdCl2WzQgKiBpICsgMF07Ci0gICAgICAgIHZlY3RvcltpXVsxXSA9IChHTGZsb2F0KXZb
NCAqIGkgKyAxXTsKLSAgICAgICAgdmVjdG9yW2ldWzJdID0gKEdMZmxvYXQpdls0ICogaSArIDJd
OwotICAgICAgICB2ZWN0b3JbaV1bM10gPSAoR0xmbG9hdCl2WzQgKiBpICsgM107Ci0gICAgfQot
Ci0gICAgYXBwbHlVbmlmb3JtbmZ2KHRhcmdldFVuaWZvcm0sIChHTGZsb2F0Kil2ZWN0b3IpOwot
fQotCi12b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlmb3JtbmJ2KGdsOjpVbmlmb3JtICp0YXJnZXRV
bmlmb3JtLCBjb25zdCBHTGludCAqdikKLXsKLSAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cmVn
aXN0ZXJDb3VudCA8PSBNQVhfVkVSVEVYX0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOSk7Ci0gICAgR0xm
bG9hdCB2ZWN0b3JbTUFYX1ZFUlRFWF9DT05TVEFOVF9WRUNUT1JTX0QzRDldWzRdOwotCi0gICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB0YXJnZXRVbmlmb3JtLT5yZWdpc3RlckNvdW50
OyBpKyspCi0gICAgewotICAgICAgICB2ZWN0b3JbaV1bMF0gPSAodls0ICogaSArIDBdID09IEdM
X0ZBTFNFKSA/IDAuMGYgOiAxLjBmOwotICAgICAgICB2ZWN0b3JbaV1bMV0gPSAodls0ICogaSAr
IDFdID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOwotICAgICAgICB2ZWN0b3JbaV1bMl0gPSAo
dls0ICogaSArIDJdID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOwotICAgICAgICB2ZWN0b3Jb
aV1bM10gPSAodls0ICogaSArIDNdID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOwotICAgIH0K
LQotICAgIGFwcGx5VW5pZm9ybW5mdih0YXJnZXRVbmlmb3JtLCAoR0xmbG9hdCopdmVjdG9yKTsK
LX0KLQotdm9pZCBSZW5kZXJlcjk6OmNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNs
ZWFyUGFyYW1zLCBnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKQotewotICAgIEQzRENPTE9S
IGNvbG9yID0gRDNEQ09MT1JfQVJHQihnbDo6dW5vcm08OD4oY2xlYXJQYXJhbXMuY29sb3JDbGVh
clZhbHVlLmFscGhhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVu
b3JtPDg+KGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5yZWQpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oY2xlYXJQYXJhbXMuY29sb3JDbGVhclZh
bHVlLmdyZWVuKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3Jt
PDg+KGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5ibHVlKSk7Ci0gICAgZmxvYXQgZGVwdGgg
PSBnbDo6Y2xhbXAwMShjbGVhclBhcmFtcy5kZXB0aENsZWFyVmFsdWUpOwotICAgIGludCBzdGVu
Y2lsID0gY2xlYXJQYXJhbXMuc3RlbmNpbENsZWFyVmFsdWUgJiAweDAwMDAwMEZGOwotCi0gICAg
dW5zaWduZWQgaW50IHN0ZW5jaWxVbm1hc2tlZCA9IDB4MDsKLSAgICBpZiAoKGNsZWFyUGFyYW1z
Lm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpICYmIGZyYW1lQnVmZmVyLT5oYXNTdGVuY2ls
KCkpCi0gICAgewotICAgICAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbFNpemUgPSBnbDo6R2V0U3Rl
bmNpbFNpemUoZnJhbWVCdWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0QWN0dWFsRm9ybWF0
KCkpOwotICAgICAgICBzdGVuY2lsVW5tYXNrZWQgPSAoMHgxIDw8IHN0ZW5jaWxTaXplKSAtIDE7
Ci0gICAgfQotCi0gICAgYm9vbCBhbHBoYVVubWFza2VkID0gKGdsOjpHZXRBbHBoYVNpemUobVJl
bmRlclRhcmdldERlc2MuZm9ybWF0KSA9PSAwKSB8fCBjbGVhclBhcmFtcy5jb2xvck1hc2tBbHBo
YTsKLQotICAgIGNvbnN0IGJvb2wgbmVlZE1hc2tlZFN0ZW5jaWxDbGVhciA9IChjbGVhclBhcmFt
cy5tYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKSAmJgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrICYgc3RlbmNp
bFVubWFza2VkKSAhPSBzdGVuY2lsVW5tYXNrZWQ7Ci0gICAgY29uc3QgYm9vbCBuZWVkTWFza2Vk
Q29sb3JDbGVhciA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkgJiYK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIShjbGVhclBhcmFtcy5jb2xv
ck1hc2tSZWQgJiYgY2xlYXJQYXJhbXMuY29sb3JNYXNrR3JlZW4gJiYKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tCbHVlICYmIGFs
cGhhVW5tYXNrZWQpOwotCi0gICAgaWYgKG5lZWRNYXNrZWRDb2xvckNsZWFyIHx8IG5lZWRNYXNr
ZWRTdGVuY2lsQ2xlYXIpCi0gICAgewotICAgICAgICAvLyBTdGF0ZSB3aGljaCBpcyBhbHRlcmVk
IGluIGFsbCBwYXRocyBmcm9tIHRoaXMgcG9pbnQgdG8gdGhlIGNsZWFyIGNhbGwgaXMgc2F2ZWQu
Ci0gICAgICAgIC8vIFN0YXRlIHdoaWNoIGlzIGFsdGVyZWQgaW4gb25seSBzb21lIHBhdGhzIHdp
bGwgYmUgZmxhZ2dlZCBkaXJ0eSBpbiB0aGUgY2FzZSB0aGF0Ci0gICAgICAgIC8vICB0aGF0IHBh
dGggaXMgdGFrZW4uCi0gICAgICAgIEhSRVNVTFQgaHI7Ci0gICAgICAgIGlmIChtTWFza2VkQ2xl
YXJTYXZlZFN0YXRlID09IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGhyID0gbURldmlj
ZS0+QmVnaW5TdGF0ZUJsb2NrKCk7Ci0gICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8
fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsK
LQotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRFRU5BQkxF
LCBGQUxTRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRlVO
QywgRDNEQ01QX0FMV0FZUyk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19aRU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19DVUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElEKTsKLSAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0UpOwot
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJM
RSwgRkFMU0UpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJ
UFBMQU5FRU5BQkxFLCAwKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX0NPTE9SV1JJVEVFTkFCTEUsIDApOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOwotICAgICAgICAgICAgbURldmljZS0+
U2V0UGl4ZWxTaGFkZXIoTlVMTCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFk
ZXIoTlVMTCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRGVkYoRDNERlZGX1hZWlJIVyB8IEQz
REZWRl9ESUZGVVNFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZSgwLCBO
VUxMLCAwLCAwKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NF
UEFSQVRFQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRU
ZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOwot
ICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9S
QVJHMSwgRDNEVEFfVEZBQ1RPUik7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3Rh
Z2VTdGF0ZSgwLCBEM0RUU1NfQUxQSEFPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOwotICAgICAgICAg
ICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0FMUEhBQVJHMSwgRDNE
VEFfVEZBQ1RPUik7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19U
RVhUVVJFRkFDVE9SLCBjb2xvcik7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19NVUxUSVNBTVBMRU1BU0ssIDB4RkZGRkZGRkYpOwotCi0gICAgICAgICAgICBmb3Io
aW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoaSwgMSk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGhyID0gbURldmljZS0+RW5kU3RhdGVCbG9jaygm
bU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSk7Ci0gICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhy
KSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZ
KTsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlICE9
IE5VTEwpOwotCi0gICAgICAgIGlmIChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlICE9IE5VTEwpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGhyID0gbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZS0+Q2FwdHVy
ZSgpOwotICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRFRU5BQkxFLCBGQUxTRSk7
Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pGVU5DLCBEM0RDTVBfQUxX
QVlTKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRkFM
U0UpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgRDNE
Q1VMTF9OT05FKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfRklMTE1P
REUsIEQzREZJTExfU09MSUQpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOwotICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOwotCi0gICAgICAgIGlmIChjbGVh
clBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkKLSAgICAgICAgewotICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRDb2xvck1hc2so
Y2xlYXJQYXJhbXMuY29sb3JNYXNrUmVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tHcmVl
biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrQmx1ZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJQYXJhbXMuY29s
b3JNYXNrQWxwaGEpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIDAp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0ZW5jaWxVbm1hc2tlZCAhPSAweDAgJiYgKGNs
ZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBUUlVF
KTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1RXT1NJREVEU1RF
TkNJTE1PREUsIEZBTFNFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX1NURU5DSUxGVU5DLCBEM0RDTVBfQUxXQVlTKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxSRUYsIHN0ZW5jaWwpOwotICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFdSSVRFTUFTSywgY2xlYXJQYXJhbXMu
c3RlbmNpbFdyaXRlTWFzayk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19TVEVOQ0lMRkFJTCwgRDNEU1RFTkNJTE9QX1JFUExBQ0UpOwotICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFpGQUlMLCBEM0RTVEVOQ0lMT1BfUkVQ
TEFDRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lM
UEFTUywgRDNEU1RFTkNJTE9QX1JFUExBQ0UpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJ
TEVOQUJMRSwgRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgbURldmljZS0+U2V0UGl4ZWxT
aGFkZXIoTlVMTCk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlcihOVUxMKTsKLSAg
ICAgICAgbURldmljZS0+U2V0RlZGKEQzREZWRl9YWVpSSFcpOwotICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOwotICAg
ICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JPUCwgRDNE
VE9QX1NFTEVDVEFSRzEpOwotICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgw
LCBEM0RUU1NfQ09MT1JBUkcxLCBEM0RUQV9URkFDVE9SKTsKLSAgICAgICAgbURldmljZS0+U2V0
VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0FMUEhBT1AsIEQzRFRPUF9TRUxFQ1RBUkcxKTsK
LSAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0FMUEhBQVJH
MSwgRDNEVEFfVEZBQ1RPUik7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X1RFWFRVUkVGQUNUT1IsIGNvbG9yKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfTVVMVElTQU1QTEVNQVNLLCAweEZGRkZGRkZGKTsKLQotICAgICAgICBmb3IoaW50IGkg
PSAwOyBpIDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBtRGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKGksIDEpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZmxvYXQgcXVhZFs0XVs0XTsgICAvLyBBIHF1YWRyaWxhdGVyYWwgY292ZXJpbmcgdGhl
IHRhcmdldCwgYWxpZ25lZCB0byBtYXRjaCB0aGUgZWRnZXMKLSAgICAgICAgcXVhZFswXVswXSA9
IC0wLjVmOwotICAgICAgICBxdWFkWzBdWzFdID0gbVJlbmRlclRhcmdldERlc2MuaGVpZ2h0IC0g
MC41ZjsKLSAgICAgICAgcXVhZFswXVsyXSA9IDAuMGY7Ci0gICAgICAgIHF1YWRbMF1bM10gPSAx
LjBmOwotCi0gICAgICAgIHF1YWRbMV1bMF0gPSBtUmVuZGVyVGFyZ2V0RGVzYy53aWR0aCAtIDAu
NWY7Ci0gICAgICAgIHF1YWRbMV1bMV0gPSBtUmVuZGVyVGFyZ2V0RGVzYy5oZWlnaHQgLSAwLjVm
OwotICAgICAgICBxdWFkWzFdWzJdID0gMC4wZjsKLSAgICAgICAgcXVhZFsxXVszXSA9IDEuMGY7
Ci0KLSAgICAgICAgcXVhZFsyXVswXSA9IC0wLjVmOwotICAgICAgICBxdWFkWzJdWzFdID0gLTAu
NWY7Ci0gICAgICAgIHF1YWRbMl1bMl0gPSAwLjBmOwotICAgICAgICBxdWFkWzJdWzNdID0gMS4w
ZjsKLQotICAgICAgICBxdWFkWzNdWzBdID0gbVJlbmRlclRhcmdldERlc2Mud2lkdGggLSAwLjVm
OwotICAgICAgICBxdWFkWzNdWzFdID0gLTAuNWY7Ci0gICAgICAgIHF1YWRbM11bMl0gPSAwLjBm
OwotICAgICAgICBxdWFkWzNdWzNdID0gMS4wZjsKLQotICAgICAgICBzdGFydFNjZW5lKCk7Ci0g
ICAgICAgIG1EZXZpY2UtPkRyYXdQcmltaXRpdmVVUChEM0RQVF9UUklBTkdMRVNUUklQLCAyLCBx
dWFkLCBzaXplb2YoZmxvYXRbNF0pKTsKLQotICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAm
IEdMX0RFUFRIX0JVRkZFUl9CSVQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIFRSVUUpOwotICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRFRU5BQkxFLCBUUlVFKTsKLSAgICAgICAgICAgIG1E
ZXZpY2UtPkNsZWFyKDAsIE5VTEwsIEQzRENMRUFSX1pCVUZGRVIsIGNvbG9yLCBkZXB0aCwgc3Rl
bmNpbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSAh
PSBOVUxMKQotICAgICAgICB7Ci0gICAgICAgICAgICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlLT5B
cHBseSgpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKGNsZWFyUGFyYW1zLm1hc2sp
Ci0gICAgewotICAgICAgICBEV09SRCBkeENsZWFyRmxhZ3MgPSAwOwotICAgICAgICBpZiAoY2xl
YXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGR4Q2xlYXJGbGFncyB8PSBEM0RDTEVBUl9UQVJHRVQ7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBkeENsZWFyRmxhZ3MgfD0gRDNEQ0xFQVJfWkJVRkZFUjsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkKLSAg
ICAgICAgewotICAgICAgICAgICAgZHhDbGVhckZsYWdzIHw9IEQzRENMRUFSX1NURU5DSUw7Ci0g
ICAgICAgIH0KLQotICAgICAgICBtRGV2aWNlLT5DbGVhcigwLCBOVUxMLCBkeENsZWFyRmxhZ3Ms
IGNvbG9yLCBkZXB0aCwgc3RlbmNpbCk7Ci0gICAgfQotfQotCi12b2lkIFJlbmRlcmVyOTo6bWFy
a0FsbFN0YXRlRGlydHkoKQotewotICAgIG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsID0gMDsK
LSAgICBtQXBwbGllZERlcHRoYnVmZmVyU2VyaWFsID0gMDsKLSAgICBtQXBwbGllZFN0ZW5jaWxi
dWZmZXJTZXJpYWwgPSAwOwotICAgIG1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCA9IGZhbHNlOwot
ICAgIG1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAgIG1Gb3JjZVNl
dERlcHRoU3RlbmNpbFN0YXRlID0gdHJ1ZTsKLSAgICBtRm9yY2VTZXRSYXN0ZXJTdGF0ZSA9IHRy
dWU7Ci0gICAgbUZvcmNlU2V0U2Npc3NvciA9IHRydWU7Ci0gICAgbUZvcmNlU2V0Vmlld3BvcnQg
PSB0cnVlOwotICAgIG1Gb3JjZVNldEJsZW5kU3RhdGUgPSB0cnVlOwotCi0gICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJF
X0lNQUdFX1VOSVRTOyBpKyspCi0gICAgewotICAgICAgICBtRm9yY2VTZXRWZXJ0ZXhTYW1wbGVy
U3RhdGVzW2ldID0gdHJ1ZTsKLSAgICAgICAgbUN1clZlcnRleFRleHR1cmVTZXJpYWxzW2ldID0g
MDsKLSAgICB9Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1RFWFRV
UkVfSU1BR0VfVU5JVFM7IGkrKykKLSAgICB7Ci0gICAgICAgIG1Gb3JjZVNldFBpeGVsU2FtcGxl
clN0YXRlc1tpXSA9IHRydWU7Ci0gICAgICAgIG1DdXJQaXhlbFRleHR1cmVTZXJpYWxzW2ldID0g
MDsKLSAgICB9Ci0KLSAgICBtQXBwbGllZElCU2VyaWFsID0gMDsKLSAgICBtQXBwbGllZFByb2dy
YW1CaW5hcnlTZXJpYWwgPSAwOwotICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOwotCi0gICAg
bVZlcnRleERlY2xhcmF0aW9uQ2FjaGUubWFya1N0YXRlRGlydHkoKTsKLX0KLQotdm9pZCBSZW5k
ZXJlcjk6OnJlbGVhc2VEZXZpY2VSZXNvdXJjZXMoKQotewotICAgIHdoaWxlICghbUV2ZW50UXVl
cnlQb29sLmVtcHR5KCkpCi0gICAgewotICAgICAgICBtRXZlbnRRdWVyeVBvb2wuYmFjaygpLT5S
ZWxlYXNlKCk7Ci0gICAgICAgIG1FdmVudFF1ZXJ5UG9vbC5wb3BfYmFjaygpOwotICAgIH0KLQot
ICAgIGlmIChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlKQotICAgIHsKLSAgICAgICAgbU1hc2tlZENs
ZWFyU2F2ZWRTdGF0ZS0+UmVsZWFzZSgpOwotICAgICAgICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRl
ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBtVmVydGV4U2hhZGVyQ2FjaGUuY2xlYXIoKTsKLSAgICBt
UGl4ZWxTaGFkZXJDYWNoZS5jbGVhcigpOwotCi0gICAgZGVsZXRlIG1CbGl0OwotICAgIG1CbGl0
ID0gTlVMTDsKLQotICAgIGRlbGV0ZSBtVmVydGV4RGF0YU1hbmFnZXI7Ci0gICAgbVZlcnRleERh
dGFNYW5hZ2VyID0gTlVMTDsKLQotICAgIGRlbGV0ZSBtSW5kZXhEYXRhTWFuYWdlcjsKLSAgICBt
SW5kZXhEYXRhTWFuYWdlciA9IE5VTEw7Ci0KLSAgICBkZWxldGUgbUxpbmVMb29wSUI7Ci0gICAg
bUxpbmVMb29wSUIgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fTlVMTF9D
T0xPUkJVRkZFUl9DQUNIRV9FTlRSSUVTOyBpKyspCi0gICAgewotICAgICAgICBkZWxldGUgbU51
bGxDb2xvcmJ1ZmZlckNhY2hlW2ldLmJ1ZmZlcjsKLSAgICAgICAgbU51bGxDb2xvcmJ1ZmZlckNh
Y2hlW2ldLmJ1ZmZlciA9IE5VTEw7Ci0gICAgfQotCi19Ci0KLQotdm9pZCBSZW5kZXJlcjk6Om5v
dGlmeURldmljZUxvc3QoKQotewotICAgIG1EZXZpY2VMb3N0ID0gdHJ1ZTsKLSAgICBtRGlzcGxh
eS0+bm90aWZ5RGV2aWNlTG9zdCgpOwotfQotCi1ib29sIFJlbmRlcmVyOTo6aXNEZXZpY2VMb3N0
KCkKLXsKLSAgICByZXR1cm4gbURldmljZUxvc3Q7Ci19Ci0KLS8vIHNldCBub3RpZnkgdG8gdHJ1
ZSB0byBicm9hZGNhc3QgYSBtZXNzYWdlIHRvIGFsbCBjb250ZXh0cyBvZiB0aGUgZGV2aWNlIGxv
c3MKLWJvb2wgUmVuZGVyZXI5Ojp0ZXN0RGV2aWNlTG9zdChib29sIG5vdGlmeSkKLXsKLSAgICBI
UkVTVUxUIHN0YXR1cyA9IFNfT0s7Ci0KLSAgICBpZiAobURldmljZUV4KQotICAgIHsKLSAgICAg
ICAgc3RhdHVzID0gbURldmljZUV4LT5DaGVja0RldmljZVN0YXRlKE5VTEwpOwotICAgIH0KLSAg
ICBlbHNlIGlmIChtRGV2aWNlKQotICAgIHsKLSAgICAgICAgc3RhdHVzID0gbURldmljZS0+VGVz
dENvb3BlcmF0aXZlTGV2ZWwoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgLy8g
Tm8gZGV2aWNlIHlldCwgc28gbm8gcmVzZXQgcmVxdWlyZWQKLSAgICB9Ci0KLSAgICBib29sIGlz
TG9zdCA9IEZBSUxFRChzdGF0dXMpIHx8IGQzZDk6OmlzRGV2aWNlTG9zdEVycm9yKHN0YXR1cyk7
Ci0KLSAgICBpZiAoaXNMb3N0KQotICAgIHsKLSAgICAgICAgLy8gZW5zdXJlIHdlIG5vdGUgdGhl
IGRldmljZSBsb3NzIC0tCi0gICAgICAgIC8vIHdlJ2xsIHByb2JhYmx5IGdldCB0aGlzIGRvbmUg
YWdhaW4gYnkgbm90aWZ5RGV2aWNlTG9zdAotICAgICAgICAvLyBidXQgYmVzdCB0byByZW1lbWJl
ciBpdCEKLSAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IHdhbnQgdG8gY2xlYXIgdGhlIGRl
dmljZSBsb3NzIHN0YXR1cyBoZXJlCi0gICAgICAgIC8vIC0tIHRoaXMgbmVlZHMgdG8gYmUgZG9u
ZSBieSByZXNldERldmljZQotICAgICAgICBtRGV2aWNlTG9zdCA9IHRydWU7Ci0gICAgICAgIGlm
IChub3RpZnkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5vdGlmeURldmljZUxvc3QoKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBpc0xvc3Q7Ci19Ci0KLWJvb2wgUmVuZGVyZXI5
Ojp0ZXN0RGV2aWNlUmVzZXR0YWJsZSgpCi17Ci0gICAgSFJFU1VMVCBzdGF0dXMgPSBEM0RfT0s7
Ci0KLSAgICBpZiAobURldmljZUV4KQotICAgIHsKLSAgICAgICAgc3RhdHVzID0gbURldmljZUV4
LT5DaGVja0RldmljZVN0YXRlKE5VTEwpOwotICAgIH0KLSAgICBlbHNlIGlmIChtRGV2aWNlKQot
ICAgIHsKLSAgICAgICAgc3RhdHVzID0gbURldmljZS0+VGVzdENvb3BlcmF0aXZlTGV2ZWwoKTsK
LSAgICB9Ci0KLSAgICAvLyBPbiBEM0Q5RXgsIERFVklDRUxPU1QgcmVwcmVzZW50cyBhIGh1bmcg
ZGV2aWNlIHRoYXQgbmVlZHMgdG8gYmUgcmVzdGFydGVkCi0gICAgLy8gREVWSUNFUkVNT1ZFRCBp
bmRpY2F0ZXMgdGhlIGRldmljZSBoYXMgYmVlbiBzdG9wcGVkIGFuZCBtdXN0IGJlIHJlY3JlYXRl
ZAotICAgIHN3aXRjaCAoc3RhdHVzKQotICAgIHsKLSAgICAgIGNhc2UgRDNERVJSX0RFVklDRU5P
VFJFU0VUOgotICAgICAgY2FzZSBEM0RFUlJfREVWSUNFSFVORzoKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICBjYXNlIEQzREVSUl9ERVZJQ0VMT1NUOgotICAgICAgICByZXR1cm4gKG1EZXZp
Y2VFeCAhPSBOVUxMKTsKLSAgICAgIGNhc2UgRDNERVJSX0RFVklDRVJFTU9WRUQ6Ci0gICAgICAg
IFVOSU1QTEVNRU5URUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJlcjk6OnJlc2V0
RGV2aWNlKCkKLXsKLSAgICByZWxlYXNlRGV2aWNlUmVzb3VyY2VzKCk7Ci0KLSAgICBEM0RQUkVT
RU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRlcnMgPSBnZXREZWZhdWx0UHJlc2VudFBhcmFt
ZXRlcnMoKTsKLQotICAgIEhSRVNVTFQgcmVzdWx0ID0gRDNEX09LOwotICAgIGJvb2wgbG9zdCA9
IHRlc3REZXZpY2VMb3N0KGZhbHNlKTsKLSAgICBpbnQgYXR0ZW1wdHMgPSAzOwotCi0gICAgd2hp
bGUgKGxvc3QgJiYgYXR0ZW1wdHMgPiAwKQotICAgIHsKLSAgICAgICAgaWYgKG1EZXZpY2VFeCkK
LSAgICAgICAgewotICAgICAgICAgICAgU2xlZXAoNTAwKTsgICAvLyBHaXZlIHRoZSBncmFwaGlj
cyBkcml2ZXIgc29tZSBDUFUgdGltZQotICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZUV4LT5S
ZXNldEV4KCZwcmVzZW50UGFyYW1ldGVycywgTlVMTCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZQotICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5UZXN0Q29vcGVyYXRp
dmVMZXZlbCgpOwotICAgICAgICAgICAgd2hpbGUgKHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTE9T
VCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTbGVlcCgxMDApOyAgIC8vIEdpdmUg
dGhlIGdyYXBoaWNzIGRyaXZlciBzb21lIENQVSB0aW1lCi0gICAgICAgICAgICAgICAgcmVzdWx0
ID0gbURldmljZS0+VGVzdENvb3BlcmF0aXZlTGV2ZWwoKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTk9UUkVTRVQpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+UmVzZXQoJnByZXNlbnRQYXJh
bWV0ZXJzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGxvc3QgPSB0ZXN0
RGV2aWNlTG9zdChmYWxzZSk7Ci0gICAgICAgIGF0dGVtcHRzIC0tOwotICAgIH0KLQotICAgIGlm
IChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEVSUigiUmVzZXQvUmVzZXRFeCBmYWls
ZWQgbXVsdGlwbGUgdGltZXM6IDB4JTA4WCIsIHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICAvLyByZXNldCBkZXZpY2UgZGVmYXVsdHMKLSAgICBpbml0aWFsaXpl
RGV2aWNlKCk7Ci0gICAgbURldmljZUxvc3QgPSBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwot
fQotCi1EV09SRCBSZW5kZXJlcjk6OmdldEFkYXB0ZXJWZW5kb3IoKSBjb25zdAotewotICAgIHJl
dHVybiBtQWRhcHRlcklkZW50aWZpZXIuVmVuZG9ySWQ7Ci19Ci0KLXN0ZDo6c3RyaW5nIFJlbmRl
cmVyOTo6Z2V0UmVuZGVyZXJEZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgc3RkOjpvc3RyaW5n
c3RyZWFtIHJlbmRlcmVyU3RyaW5nOwotCi0gICAgcmVuZGVyZXJTdHJpbmcgPDwgbUFkYXB0ZXJJ
ZGVudGlmaWVyLkRlc2NyaXB0aW9uOwotICAgIGlmIChnZXRTaGFyZUhhbmRsZVN1cHBvcnQoKSkK
LSAgICB7Ci0gICAgICAgIHJlbmRlcmVyU3RyaW5nIDw8ICIgRGlyZWN0M0Q5RXgiOwotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICByZW5kZXJlclN0cmluZyA8PCAiIERpcmVjdDNEOSI7
Ci0gICAgfQotCi0gICAgcmVuZGVyZXJTdHJpbmcgPDwgIiB2c18iIDw8IEQzRFNIQURFUl9WRVJT
SU9OX01BSk9SKG1EZXZpY2VDYXBzLlZlcnRleFNoYWRlclZlcnNpb24pIDw8ICJfIiA8PCBEM0RT
SEFERVJfVkVSU0lPTl9NSU5PUihtRGV2aWNlQ2Fwcy5WZXJ0ZXhTaGFkZXJWZXJzaW9uKTsKLSAg
ICByZW5kZXJlclN0cmluZyA8PCAiIHBzXyIgPDwgRDNEU0hBREVSX1ZFUlNJT05fTUFKT1IobURl
dmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJzaW9uKSA8PCAiXyIgPDwgRDNEU0hBREVSX1ZFUlNJT05f
TUlOT1IobURldmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJzaW9uKTsKLQotICAgIHJldHVybiByZW5k
ZXJlclN0cmluZy5zdHIoKTsKLX0KLQotR1VJRCBSZW5kZXJlcjk6OmdldEFkYXB0ZXJJZGVudGlm
aWVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUFkYXB0ZXJJZGVudGlmaWVyLkRldmljZUlkZW50
aWZpZXI7Ci19Ci0KLXZvaWQgUmVuZGVyZXI5OjpnZXRNdWx0aVNhbXBsZVN1cHBvcnQoRDNERk9S
TUFUIGZvcm1hdCwgYm9vbCAqbXVsdGlTYW1wbGVBcnJheSkKLXsKLSAgICBmb3IgKGludCBtdWx0
aVNhbXBsZUluZGV4ID0gMDsgbXVsdGlTYW1wbGVJbmRleCA8PSBEM0RNVUxUSVNBTVBMRV8xNl9T
QU1QTEVTOyBtdWx0aVNhbXBsZUluZGV4KyspCi0gICAgewotICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IG1EM2Q5LT5DaGVja0RldmljZU11bHRpU2FtcGxlVHlwZShtQWRhcHRlciwgbURldmljZVR5
cGUsIGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVFJVRSwgKEQzRE1VTFRJU0FNUExFX1RZUEUpbXVsdGlTYW1wbGVJbmRl
eCwgTlVMTCk7Ci0KLSAgICAgICAgbXVsdGlTYW1wbGVBcnJheVttdWx0aVNhbXBsZUluZGV4XSA9
IFNVQ0NFRURFRChyZXN1bHQpOwotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJlcjk6OmdldEJHUkFU
ZXh0dXJlU3VwcG9ydCgpIGNvbnN0Ci17Ci0gICAgLy8gRGlyZWN0WCA5IGFsd2F5cyBzdXBwb3J0
cyBCR1JBCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUmVuZGVyZXI5OjpnZXREWFQxVGV4
dHVyZVN1cHBvcnQoKQotewotICAgIHJldHVybiBtRFhUMVRleHR1cmVTdXBwb3J0OwotfQotCi1i
b29sIFJlbmRlcmVyOTo6Z2V0RFhUM1RleHR1cmVTdXBwb3J0KCkKLXsKLSAgICByZXR1cm4gbURY
VDNUZXh0dXJlU3VwcG9ydDsKLX0KLQotYm9vbCBSZW5kZXJlcjk6OmdldERYVDVUZXh0dXJlU3Vw
cG9ydCgpCi17Ci0gICAgcmV0dXJuIG1EWFQ1VGV4dHVyZVN1cHBvcnQ7Ci19Ci0KLWJvb2wgUmVu
ZGVyZXI5OjpnZXREZXB0aFRleHR1cmVTdXBwb3J0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbURl
cHRoVGV4dHVyZVN1cHBvcnQ7Ci19Ci0KLWJvb2wgUmVuZGVyZXI5OjpnZXRGbG9hdDMyVGV4dHVy
ZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKQotewotICAgICpmaWx0
ZXJpbmcgPSBtRmxvYXQzMkZpbHRlclN1cHBvcnQ7Ci0gICAgKnJlbmRlcmFibGUgPSBtRmxvYXQz
MlJlbmRlclN1cHBvcnQ7Ci0gICAgcmV0dXJuIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQ7Ci19Ci0K
LWJvb2wgUmVuZGVyZXI5OjpnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5n
LCBib29sICpyZW5kZXJhYmxlKQotewotICAgICpmaWx0ZXJpbmcgPSBtRmxvYXQxNkZpbHRlclN1
cHBvcnQ7Ci0gICAgKnJlbmRlcmFibGUgPSBtRmxvYXQxNlJlbmRlclN1cHBvcnQ7Ci0gICAgcmV0
dXJuIG1GbG9hdDE2VGV4dHVyZVN1cHBvcnQ7Ci19Ci0KLWJvb2wgUmVuZGVyZXI5OjpnZXRMdW1p
bmFuY2VUZXh0dXJlU3VwcG9ydCgpCi17Ci0gICAgcmV0dXJuIG1MdW1pbmFuY2VUZXh0dXJlU3Vw
cG9ydDsKLX0KLQotYm9vbCBSZW5kZXJlcjk6OmdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBv
cnQoKQotewotICAgIHJldHVybiBtTHVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydDsKLX0KLQot
Ym9vbCBSZW5kZXJlcjk6OmdldFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5U3VwcG9ydCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5OwotfQotCi1m
bG9hdCBSZW5kZXJlcjk6OmdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkgY29uc3QKLXsKLSAgICBp
ZiAobVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHkpCi0gICAgewotICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1EZXZpY2VDYXBzLk1heEFuaXNvdHJvcHkpOwotICAgIH0K
LSAgICByZXR1cm4gMS4wZjsKLX0KLQotYm9vbCBSZW5kZXJlcjk6OmdldEV2ZW50UXVlcnlTdXBw
b3J0KCkKLXsKLSAgICByZXR1cm4gbUV2ZW50UXVlcnlTdXBwb3J0OwotfQotCi11bnNpZ25lZCBp
bnQgUmVuZGVyZXI5OjpnZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0Ci17Ci0g
ICAgTUVUQV9BU1NFUlQoTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGX1NNMyA8PSBnbDo6SU1Q
TEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKLSAgICByZXR1cm4g
bVZlcnRleFRleHR1cmVTdXBwb3J0ID8gTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGX1NNMyA6
IDA7Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldE1heENvbWJpbmVkVGV4dHVyZUlt
YWdlVW5pdHMoKSBjb25zdAotewotICAgIHJldHVybiBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5J
VFMgKyBnZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpOwotfQotCi11bnNpZ25lZCBpbnQg
UmVuZGVyZXI5OjpnZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gMjsgICAvLyBkeF9WaWV3QWRqdXN0IGFuZCBkeF9EZXB0aFJhbmdlLgotfQotCi11
bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9ybVZlY3RvcnMo
KSBjb25zdAotewotICAgIHJldHVybiAzOyAgIC8vIGR4X1ZpZXdDb29yZHMsIGR4X0RlcHRoRnJv
bnQgYW5kIGR4X0RlcHRoUmFuZ2UuCi19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldE1h
eFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gTUFYX1ZFUlRFWF9D
T05TVEFOVF9WRUNUT1JTX0QzRDkgLSBnZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1WZWN0b3JzKCk7
Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldE1heEZyYWdtZW50VW5pZm9ybVZlY3Rv
cnMoKSBjb25zdAotewotICAgIGNvbnN0IGludCBtYXhQaXhlbENvbnN0YW50VmVjdG9ycyA9IChn
ZXRNYWpvclNoYWRlck1vZGVsKCkgPj0gMykgPyBNQVhfUElYRUxfQ09OU1RBTlRfVkVDVE9SU19T
TTMgOiBNQVhfUElYRUxfQ09OU1RBTlRfVkVDVE9SU19TTTI7Ci0KLSAgICByZXR1cm4gbWF4UGl4
ZWxDb25zdGFudFZlY3RvcnMgLSBnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKTsK
LX0KLQotdW5zaWduZWQgaW50IFJlbmRlcmVyOTo6Z2V0TWF4VmFyeWluZ1ZlY3RvcnMoKSBjb25z
dAotewotICAgIHJldHVybiAoZ2V0TWFqb3JTaGFkZXJNb2RlbCgpID49IDMpID8gTUFYX1ZBUllJ
TkdfVkVDVE9SU19TTTMgOiBNQVhfVkFSWUlOR19WRUNUT1JTX1NNMjsKLX0KLQotYm9vbCBSZW5k
ZXJlcjk6OmdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bVN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZXM7Ci19Ci0KLWJvb2wgUmVuZGVyZXI5OjpnZXRPY2Ns
dXNpb25RdWVyeVN1cHBvcnQoKSBjb25zdAotewotICAgIHJldHVybiBtT2NjbHVzaW9uUXVlcnlT
dXBwb3J0OwotfQotCi1ib29sIFJlbmRlcmVyOTo6Z2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25z
dAotewotICAgIHJldHVybiBtRGV2aWNlQ2Fwcy5QaXhlbFNoYWRlclZlcnNpb24gPj0gRDNEUFNf
VkVSU0lPTigzLCAwKTsKLX0KLQotYm9vbCBSZW5kZXJlcjk6OmdldFNoYXJlSGFuZGxlU3VwcG9y
dCgpIGNvbnN0Ci17Ci0gICAgLy8gUElYIGRvZXNuJ3Qgc2VlbSB0byBzdXBwb3J0IHVzaW5nIHNo
YXJlIGhhbmRsZXMsIHNvIGRpc2FibGUgdGhlbS4KLSAgICByZXR1cm4gKG1EM2Q5RXggIT0gTlVM
TCkgJiYgIWdsOjpwZXJmQWN0aXZlKCk7Ci19Ci0KLWJvb2wgUmVuZGVyZXI5OjpnZXREZXJpdmF0
aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gKG1EZXZpY2VDYXBz
LlBTMjBDYXBzLkNhcHMgJiBEM0RQUzIwQ0FQU19HUkFESUVOVElOU1RSVUNUSU9OUykgIT0gMDsK
LX0KLQotYm9vbCBSZW5kZXJlcjk6OmdldFBvc3RTdWJCdWZmZXJTdXBwb3J0KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW50IFJlbmRlcmVyOTo6Z2V0TWFqb3JTaGFkZXJNb2Rl
bCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEQzRFNIQURFUl9WRVJTSU9OX01BSk9SKG1EZXZpY2VD
YXBzLlBpeGVsU2hhZGVyVmVyc2lvbik7Ci19Ci0KLWZsb2F0IFJlbmRlcmVyOTo6Z2V0TWF4UG9p
bnRTaXplKCkgY29uc3QKLXsKLSAgICAvLyBQb2ludCBzaXplIGNsYW1wZWQgYXQgMS4wZiBmb3Ig
U00yCi0gICAgcmV0dXJuIGdldE1ham9yU2hhZGVyTW9kZWwoKSA9PSAzID8gbURldmljZUNhcHMu
TWF4UG9pbnRTaXplIDogMS4wZjsKLX0KLQotaW50IFJlbmRlcmVyOTo6Z2V0TWF4Vmlld3BvcnRE
aW1lbnNpb24oKSBjb25zdAotewotICAgIGludCBtYXhUZXh0dXJlRGltZW5zaW9uID0gc3RkOjpt
aW4oc3RkOjptaW4oZ2V0TWF4VGV4dHVyZVdpZHRoKCksIGdldE1heFRleHR1cmVIZWlnaHQoKSks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KWdsOjpJTVBMRU1F
TlRBVElPTl9NQVhfVEVYVFVSRV9TSVpFKTsKLSAgICByZXR1cm4gbWF4VGV4dHVyZURpbWVuc2lv
bjsKLX0KLQotaW50IFJlbmRlcmVyOTo6Z2V0TWF4VGV4dHVyZVdpZHRoKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gKGludCltRGV2aWNlQ2Fwcy5NYXhUZXh0dXJlV2lkdGg7Ci19Ci0KLWludCBSZW5k
ZXJlcjk6OmdldE1heFRleHR1cmVIZWlnaHQoKSBjb25zdAotewotICAgIHJldHVybiAoaW50KW1E
ZXZpY2VDYXBzLk1heFRleHR1cmVIZWlnaHQ7Ci19Ci0KLWJvb2wgUmVuZGVyZXI5OjpnZXQzMkJp
dEluZGV4U3VwcG9ydCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EZXZpY2VDYXBzLk1heFZlcnRl
eEluZGV4ID49ICgxIDw8IDE2KTsKLX0KLQotRFdPUkQgUmVuZGVyZXI5OjpnZXRDYXBzRGVjbFR5
cGVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbURldmljZUNhcHMuRGVjbFR5cGVzOwotfQotCi1p
bnQgUmVuZGVyZXI5OjpnZXRNaW5Td2FwSW50ZXJ2YWwoKSBjb25zdAotewotICAgIHJldHVybiBt
TWluU3dhcEludGVydmFsOwotfQotCi1pbnQgUmVuZGVyZXI5OjpnZXRNYXhTd2FwSW50ZXJ2YWwo
KSBjb25zdAotewotICAgIHJldHVybiBtTWF4U3dhcEludGVydmFsOwotfQotCi1pbnQgUmVuZGVy
ZXI5OjpnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbU1heFN1
cHBvcnRlZFNhbXBsZXM7Ci19Ci0KLWludCBSZW5kZXJlcjk6OmdldE5lYXJlc3RTdXBwb3J0ZWRT
YW1wbGVzKEQzREZPUk1BVCBmb3JtYXQsIGludCByZXF1ZXN0ZWQpIGNvbnN0Ci17Ci0gICAgaWYg
KHJlcXVlc3RlZCA9PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlcXVlc3RlZDsKLSAgICB9
Ci0KLSAgICBzdGQ6Om1hcDxEM0RGT1JNQVQsIGJvb2wgKj46OmNvbnN0X2l0ZXJhdG9yIGl0ciA9
IG1NdWx0aVNhbXBsZVN1cHBvcnQuZmluZChmb3JtYXQpOwotICAgIGlmIChpdHIgPT0gbU11bHRp
U2FtcGxlU3VwcG9ydC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIGlmIChmb3JtYXQgPT0gRDNERk1U
X1VOS05PV04pCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIC0xOwotICAg
IH0KLQotICAgIGZvciAoaW50IGkgPSByZXF1ZXN0ZWQ7IGkgPD0gRDNETVVMVElTQU1QTEVfMTZf
U0FNUExFUzsgKytpKQotICAgIHsKLSAgICAgICAgaWYgKGl0ci0+c2Vjb25kW2ldICYmIGkgIT0g
RDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIC0xOwotfQotCi11bnNpZ25lZCBp
bnQgUmVuZGVyZXI5OjpnZXRNYXhSZW5kZXJUYXJnZXRzKCkgY29uc3QKLXsKLSAgICAvLyB3ZSBk
byBub3Qgc3VwcG9ydCBNUlQgaW4gZDNkOQotICAgIHJldHVybiAxOwotfQotCi1EM0RGT1JNQVQg
UmVuZGVyZXI5OjpDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KEdMaW50IGludGVybmFsZm9y
bWF0KQotewotICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBH
TF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VT
OgotICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKLSAgICAgICAgcmV0dXJuIEQz
REZNVF9JTlRaOwotICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgot
ICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgcmV0
dXJuIEQzREZNVF9EWFQxOwotICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQz
X0FOR0xFOgotICAgICAgICByZXR1cm4gRDNERk1UX0RYVDM7Ci0gICAgICBjYXNlIEdMX0NPTVBS
RVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgIHJldHVybiBEM0RGTVRfRFhUNTsK
LSAgICAgIGNhc2UgR0xfUkdCQTMyRl9FWFQ6Ci0gICAgICBjYXNlIEdMX1JHQjMyRl9FWFQ6Ci0g
ICAgICBjYXNlIEdMX0FMUEhBMzJGX0VYVDoKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMzJGX0VY
VDoKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVDoKLSAgICAgICAgcmV0dXJu
IEQzREZNVF9BMzJCMzJHMzJSMzJGOwotICAgICAgY2FzZSBHTF9SR0JBMTZGX0VYVDoKLSAgICAg
IGNhc2UgR0xfUkdCMTZGX0VYVDoKLSAgICAgIGNhc2UgR0xfQUxQSEExNkZfRVhUOgotICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0UxNkZfRVhUOgotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEEx
NkZfRVhUOgotICAgICAgICByZXR1cm4gRDNERk1UX0ExNkIxNkcxNlIxNkY7Ci0gICAgICBjYXNl
IEdMX0xVTUlOQU5DRThfRVhUOgotICAgICAgICBpZiAoZ2V0THVtaW5hbmNlVGV4dHVyZVN1cHBv
cnQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9MODsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOF9BTFBIQThfRVhUOgot
ICAgICAgICBpZiAoZ2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gRDNERk1UX0E4TDg7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX1JHQjhfT0VTOgotICAgICAgY2FzZSBHTF9SR0I1NjU6Ci0gICAg
ICAgIHJldHVybiBEM0RGTVRfWDhSOEc4Qjg7Ci0gICAgfQotCi0gICAgcmV0dXJuIEQzREZNVF9B
OFI4RzhCODsKLX0KLQotYm9vbCBSZW5kZXJlcjk6OmNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJl
U3RvcmFnZUludGVyZmFjZTJEICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzb3Vy
Y2UpCi17Ci0gICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLQotICAgIGlmIChzb3VyY2UgJiYgZGVz
dCkKLSAgICB7Ci0gICAgICAgIFRleHR1cmVTdG9yYWdlOV8yRCAqc291cmNlOSA9IFRleHR1cmVT
dG9yYWdlOV8yRDo6bWFrZVRleHR1cmVTdG9yYWdlOV8yRChzb3VyY2UtPmdldFN0b3JhZ2VJbnN0
YW5jZSgpKTsKLSAgICAgICAgVGV4dHVyZVN0b3JhZ2U5XzJEICpkZXN0OSA9IFRleHR1cmVTdG9y
YWdlOV8yRDo6bWFrZVRleHR1cmVTdG9yYWdlOV8yRChkZXN0LT5nZXRTdG9yYWdlSW5zdGFuY2Uo
KSk7Ci0KLSAgICAgICAgaW50IGxldmVscyA9IHNvdXJjZTktPmxldmVsQ291bnQoKTsKLSAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZXZlbHM7ICsraSkKLSAgICAgICAgewotICAgICAgICAg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKnNyY1N1cmYgPSBzb3VyY2U5LT5nZXRTdXJmYWNlTGV2ZWwo
aSwgZmFsc2UpOwotICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRzdFN1cmYgPSBkZXN0
OS0+Z2V0U3VyZmFjZUxldmVsKGksIGZhbHNlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
cmVzdWx0ID0gY29weVRvUmVuZGVyVGFyZ2V0KGRzdFN1cmYsIHNyY1N1cmYsIHNvdXJjZTktPmlz
TWFuYWdlZCgpKTsKLQotICAgICAgICAgICAgaWYgKHNyY1N1cmYpIHNyY1N1cmYtPlJlbGVhc2Uo
KTsKLSAgICAgICAgICAgIGlmIChkc3RTdXJmKSBkc3RTdXJmLT5SZWxlYXNlKCk7Ci0KLSAgICAg
ICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgUmVuZGVyZXI5Ojpj
b3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpkZXN0LCBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnNvdXJjZSkKLXsKLSAgICBib29sIHJlc3VsdCA9IGZh
bHNlOwotCi0gICAgaWYgKHNvdXJjZSAmJiBkZXN0KQotICAgIHsKLSAgICAgICAgVGV4dHVyZVN0
b3JhZ2U5X0N1YmUgKnNvdXJjZTkgPSBUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6bWFrZVRleHR1cmVT
dG9yYWdlOV9DdWJlKHNvdXJjZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwotICAgICAgICBUZXh0
dXJlU3RvcmFnZTlfQ3ViZSAqZGVzdDkgPSBUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6bWFrZVRleHR1
cmVTdG9yYWdlOV9DdWJlKGRlc3QtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKLSAgICAgICAgaW50
IGxldmVscyA9IHNvdXJjZTktPmxldmVsQ291bnQoKTsKLSAgICAgICAgZm9yIChpbnQgZiA9IDA7
IGYgPCA2OyBmKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bGV2ZWxzOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKnNyY1N1cmYgPSBzb3VyY2U5LT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1ggKyBmLCBpLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgSURpcmVj
dDNEU3VyZmFjZTkgKmRzdFN1cmYgPSBkZXN0OS0+Z2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9YICsgZiwgaSwgdHJ1ZSk7Ci0KLSAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBjb3B5VG9SZW5kZXJUYXJnZXQoZHN0U3VyZiwgc3JjU3VyZiwgc291cmNlOS0+aXNN
YW5hZ2VkKCkpOwotCi0gICAgICAgICAgICAgICAgaWYgKHNyY1N1cmYpIHNyY1N1cmYtPlJlbGVh
c2UoKTsKLSAgICAgICAgICAgICAgICBpZiAoZHN0U3VyZikgZHN0U3VyZi0+UmVsZWFzZSgpOwot
Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLUQzRFBPT0wgUmVuZGVyZXI5OjpnZXRCdWZmZXJQb29sKERXT1JEIHVzYWdl
KSBjb25zdAotewotICAgIGlmIChtRDNkOUV4ICE9IE5VTEwpCi0gICAgewotICAgICAgICByZXR1
cm4gRDNEUE9PTF9ERUZBVUxUOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAo
ISh1c2FnZSAmIEQzRFVTQUdFX0RZTkFNSUMpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gRDNEUE9PTF9NQU5BR0VEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIEQzRFBP
T0xfREVGQVVMVDsKLX0KLQotYm9vbCBSZW5kZXJlcjk6OmNvcHlJbWFnZShnbDo6RnJhbWVidWZm
ZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0g
ZGVzdEZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgR0xpbnQgbGV2
ZWwpCi17Ci0gICAgUkVDVCByZWN0OwotICAgIHJlY3QubGVmdCA9IHNvdXJjZVJlY3QueDsKLSAg
ICByZWN0LnRvcCA9IHNvdXJjZVJlY3QueTsKLSAgICByZWN0LnJpZ2h0ID0gc291cmNlUmVjdC54
ICsgc291cmNlUmVjdC53aWR0aDsKLSAgICByZWN0LmJvdHRvbSA9IHNvdXJjZVJlY3QueSArIHNv
dXJjZVJlY3QuaGVpZ2h0OwotCi0gICAgcmV0dXJuIG1CbGl0LT5jb3B5KGZyYW1lYnVmZmVyLCBy
ZWN0LCBkZXN0Rm9ybWF0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBzdG9yYWdlLCBsZXZlbCk7Ci19Ci0K
LWJvb2wgUmVuZGVyZXI5Ojpjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwg
Y29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2
ZWwpCi17Ci0gICAgUkVDVCByZWN0OwotICAgIHJlY3QubGVmdCA9IHNvdXJjZVJlY3QueDsKLSAg
ICByZWN0LnRvcCA9IHNvdXJjZVJlY3QueTsKLSAgICByZWN0LnJpZ2h0ID0gc291cmNlUmVjdC54
ICsgc291cmNlUmVjdC53aWR0aDsKLSAgICByZWN0LmJvdHRvbSA9IHNvdXJjZVJlY3QueSArIHNv
dXJjZVJlY3QuaGVpZ2h0OwotCi0gICAgcmV0dXJuIG1CbGl0LT5jb3B5KGZyYW1lYnVmZmVyLCBy
ZWN0LCBkZXN0Rm9ybWF0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBzdG9yYWdlLCB0YXJnZXQsIGxldmVs
KTsKLX0KLQotYm9vbCBSZW5kZXJlcjk6OmJsaXRSZWN0KGdsOjpGcmFtZWJ1ZmZlciAqcmVhZEZy
YW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFkUmVjdCwgZ2w6OkZyYW1lYnVmZmVy
ICpkcmF3RnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRyYXdSZWN0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0RGVwdGhT
dGVuY2lsKQotewotICAgIGVuZFNjZW5lKCk7Ci0KLSAgICBpZiAoYmxpdFJlbmRlclRhcmdldCkK
LSAgICB7Ci0gICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlYWRCdWZmZXIgPSByZWFkRnJhbWVi
dWZmZXItPmdldENvbG9yYnVmZmVyKDApOwotICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpkcmF3
QnVmZmVyID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigwKTsKLSAgICAgICAgUmVu
ZGVyVGFyZ2V0OSAqcmVhZFJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgICAgIFJlbmRlclRhcmdl
dDkgKmRyYXdSZW5kZXJUYXJnZXQgPSBOVUxMOwotICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSog
cmVhZFN1cmZhY2UgPSBOVUxMOwotICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSogZHJhd1N1cmZh
Y2UgPSBOVUxMOwotCi0gICAgICAgIGlmIChyZWFkQnVmZmVyKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZWFkUmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0OTo6bWFrZVJlbmRlclRhcmdldDko
cmVhZEJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChk
cmF3QnVmZmVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBkcmF3UmVuZGVyVGFyZ2V0ID0gUmVu
ZGVyVGFyZ2V0OTo6bWFrZVJlbmRlclRhcmdldDkoZHJhd0J1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0
KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlYWRSZW5kZXJUYXJnZXQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJlYWRTdXJmYWNlID0gcmVhZFJlbmRlclRhcmdldC0+Z2V0U3VyZmFj
ZSgpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChkcmF3UmVuZGVyVGFyZ2V0KQotICAgICAgICB7
Ci0gICAgICAgICAgICBkcmF3U3VyZmFjZSA9IGRyYXdSZW5kZXJUYXJnZXQtPmdldFN1cmZhY2Uo
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghcmVhZFN1cmZhY2UgfHwgIWRyYXdTdXJmYWNl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVu
ZGVyIHRhcmdldC4iKTsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgUkVDVCBzcmNSZWN0OwotICAgICAg
ICBzcmNSZWN0LmxlZnQgPSByZWFkUmVjdC54OwotICAgICAgICBzcmNSZWN0LnJpZ2h0ID0gcmVh
ZFJlY3QueCArIHJlYWRSZWN0LndpZHRoOwotICAgICAgICBzcmNSZWN0LnRvcCA9IHJlYWRSZWN0
Lnk7Ci0gICAgICAgIHNyY1JlY3QuYm90dG9tID0gcmVhZFJlY3QueSArIHJlYWRSZWN0LmhlaWdo
dDsKLQotICAgICAgICBSRUNUIGRzdFJlY3Q7Ci0gICAgICAgIGRzdFJlY3QubGVmdCA9IGRyYXdS
ZWN0Lng7Ci0gICAgICAgIGRzdFJlY3QucmlnaHQgPSBkcmF3UmVjdC54ICsgZHJhd1JlY3Qud2lk
dGg7Ci0gICAgICAgIGRzdFJlY3QudG9wID0gZHJhd1JlY3QueTsKLSAgICAgICAgZHN0UmVjdC5i
b3R0b20gPSBkcmF3UmVjdC55ICsgZHJhd1JlY3QuaGVpZ2h0OwotCi0gICAgICAgIEhSRVNVTFQg
cmVzdWx0ID0gbURldmljZS0+U3RyZXRjaFJlY3QocmVhZFN1cmZhY2UsICZzcmNSZWN0LCBkcmF3
U3VyZmFjZSwgJmRzdFJlY3QsIEQzRFRFWEZfTk9ORSk7Ci0KLSAgICAgICAgcmVhZFN1cmZhY2Ut
PlJlbGVhc2UoKTsKLSAgICAgICAgZHJhd1N1cmZhY2UtPlJlbGVhc2UoKTsKLQotICAgICAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiQmxpdEZyYW1l
YnVmZmVyQU5HTEUgZmFpbGVkOiBTdHJldGNoUmVjdCByZXR1cm5lZCAleC4iLCByZXN1bHQpOwot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGJs
aXREZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZWFkQnVm
ZmVyID0gcmVhZEZyYW1lYnVmZmVyLT5nZXREZXB0aE9yU3RlbmNpbGJ1ZmZlcigpOwotICAgICAg
ICBnbDo6UmVuZGVyYnVmZmVyICpkcmF3QnVmZmVyID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0
aE9yU3RlbmNpbGJ1ZmZlcigpOwotICAgICAgICBSZW5kZXJUYXJnZXQ5ICpyZWFkRGVwdGhTdGVu
Y2lsID0gTlVMTDsKLSAgICAgICAgUmVuZGVyVGFyZ2V0OSAqZHJhd0RlcHRoU3RlbmNpbCA9IE5V
TEw7Ci0gICAgICAgIElEaXJlY3QzRFN1cmZhY2U5KiByZWFkU3VyZmFjZSA9IE5VTEw7Ci0gICAg
ICAgIElEaXJlY3QzRFN1cmZhY2U5KiBkcmF3U3VyZmFjZSA9IE5VTEw7Ci0KLSAgICAgICAgaWYg
KHJlYWRCdWZmZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlYWREZXB0aFN0ZW5jaWwgPSBS
ZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShyZWFkQnVmZmVyLT5nZXREZXB0aFN0ZW5j
aWwoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGRyYXdCdWZmZXIpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGRyYXdEZXB0aFN0ZW5jaWwgPSBSZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFy
Z2V0OShkcmF3QnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAocmVhZERlcHRoU3RlbmNpbCkKLSAgICAgICAgewotICAgICAgICAgICAgcmVhZFN1cmZh
Y2UgPSByZWFkRGVwdGhTdGVuY2lsLT5nZXRTdXJmYWNlKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKGRyYXdEZXB0aFN0ZW5jaWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRyYXdTdXJmYWNl
ID0gZHJhd0RlcHRoU3RlbmNpbC0+Z2V0U3VyZmFjZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKCFyZWFkU3VyZmFjZSB8fCAhZHJhd1N1cmZhY2UpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOwotICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPlN0cmV0Y2hSZWN0KHJlYWRTdXJm
YWNlLCBOVUxMLCBkcmF3U3VyZmFjZSwgTlVMTCwgRDNEVEVYRl9OT05FKTsKLQotICAgICAgICBy
ZWFkU3VyZmFjZS0+UmVsZWFzZSgpOwotICAgICAgICBkcmF3U3VyZmFjZS0+UmVsZWFzZSgpOwot
Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJS
KCJCbGl0RnJhbWVidWZmZXJBTkdMRSBmYWlsZWQ6IFN0cmV0Y2hSZWN0IHJldHVybmVkICV4LiIs
IHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBSZW5kZXJlcjk6OnJlYWRQaXhlbHMoZ2w6OkZy
YW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2gsIGJvb2wgcGFja1JldmVyc2VSb3dP
cmRlciwgR0xpbnQgcGFja0FsaWdubWVudCwgdm9pZCogcGl4ZWxzKQotewotICAgIFJlbmRlclRh
cmdldDkgKnJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZh
Y2UgPSBOVUxMOwotICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gZnJhbWVidWZm
ZXItPmdldENvbG9yYnVmZmVyKDApOwotCi0gICAgaWYgKGNvbG9yYnVmZmVyKQotICAgIHsKLSAg
ICAgICAgcmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0OTo6bWFrZVJlbmRlclRhcmdldDkoY29s
b3JidWZmZXItPmdldFJlbmRlclRhcmdldCgpKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHJlbmRl
clRhcmdldCkKLSAgICB7Ci0gICAgICAgIHN1cmZhY2UgPSByZW5kZXJUYXJnZXQtPmdldFN1cmZh
Y2UoKTsKLSAgICB9Ci0KLSAgICBpZiAoIXN1cmZhY2UpCi0gICAgewotICAgICAgICAvLyBjb250
ZXh0IG11c3QgYmUgbG9zdAotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgRDNEU1VSRkFD
RV9ERVNDIGRlc2M7Ci0gICAgc3VyZmFjZS0+R2V0RGVzYygmZGVzYyk7Ci0KLSAgICBpZiAoZGVz
Yy5NdWx0aVNhbXBsZVR5cGUgIT0gRDNETVVMVElTQU1QTEVfTk9ORSkKLSAgICB7Ci0gICAgICAg
IFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRTogUmVxdWlyZXMgcmVzb2x2ZSB1c2luZyBTdHJl
dGNoUmVjdCBpbnRvIG5vbi1tdWx0aXNhbXBsZWQgcmVuZGVyIHRhcmdldAotICAgICAgICBzdXJm
YWNlLT5SZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgfQotCi0gICAgSFJFU1VMVCByZXN1bHQ7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkg
KnN5c3RlbVN1cmZhY2UgPSBOVUxMOwotICAgIGJvb2wgZGlyZWN0VG9QaXhlbHMgPSAhcGFja1Jl
dmVyc2VSb3dPcmRlciAmJiBwYWNrQWxpZ25tZW50IDw9IDQgJiYgZ2V0U2hhcmVIYW5kbGVTdXBw
b3J0KCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9PSAwICYmIHkgPT0gMCAmJiBV
SU5UKHdpZHRoKSA9PSBkZXNjLldpZHRoICYmIFVJTlQoaGVpZ2h0KSA9PSBkZXNjLkhlaWdodCAm
JgotICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQThSOEc4
QjggJiYgZm9ybWF0ID09IEdMX0JHUkFfRVhUICYmIHR5cGUgPT0gR0xfVU5TSUdORURfQllURTsK
LSAgICBpZiAoZGlyZWN0VG9QaXhlbHMpCi0gICAgewotICAgICAgICAvLyBVc2UgdGhlIHBpeGVs
cyBwdHIgYXMgYSBzaGFyZWQgaGFuZGxlIHRvIHdyaXRlIGRpcmVjdGx5IGludG8gY2xpZW50J3Mg
bWVtb3J5Ci0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZU9mZnNjcmVlblBsYWluU3Vy
ZmFjZShkZXNjLldpZHRoLCBkZXNjLkhlaWdodCwgZGVzYy5Gb3JtYXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RQT09MX1NZU1RFTU1F
TSwgJnN5c3RlbVN1cmZhY2UsICZwaXhlbHMpOwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRyeSBhZ2FpbiB3aXRob3V0IHRoZSBzaGFyZWQg
aGFuZGxlCi0gICAgICAgICAgICBkaXJlY3RUb1BpeGVscyA9IGZhbHNlOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKCFkaXJlY3RUb1BpeGVscykKLSAgICB7Ci0gICAgICAgIHJlc3VsdCA9
IG1EZXZpY2UtPkNyZWF0ZU9mZnNjcmVlblBsYWluU3VyZmFjZShkZXNjLldpZHRoLCBkZXNjLkhl
aWdodCwgZGVzYy5Gb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBEM0RQT09MX1NZU1RFTU1FTSwgJnN5c3RlbVN1cmZhY2UsIE5VTEwp
OwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFT
U0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpOwotICAgICAgICAgICAgc3VyZmFjZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHJlc3VsdCA9IG1EZXZpY2UtPkdldFJlbmRlclRhcmdldERhdGEoc3VyZmFjZSwgc3lzdGVt
U3VyZmFjZSk7Ci0gICAgc3VyZmFjZS0+UmVsZWFzZSgpOwotICAgIHN1cmZhY2UgPSBOVUxMOwot
Ci0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgc3lzdGVtU3VyZmFjZS0+
UmVsZWFzZSgpOwotCi0gICAgICAgIC8vIEl0IHR1cm5zIG91dCB0aGF0IEQzRCB3aWxsIHNvbWV0
aW1lcyBwcm9kdWNlIG1vcmUgZXJyb3IKLSAgICAgICAgLy8gY29kZXMgdGhhbiB0aG9zZSBkb2N1
bWVudGVkLgotICAgICAgICBpZiAoZDNkOTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAg
ICAgICAgewotICAgICAgICAgICAgbm90aWZ5RGV2aWNlTG9zdCgpOwotICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotICAgICAgICBlbHNl
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgIH0KLQotICAgIGlmIChkaXJlY3RUb1BpeGVscykKLSAgICB7
Ci0gICAgICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIFJFQ1QgcmVjdDsKLSAgICByZWN0LmxlZnQgPSBnbDo6Y2xhbXAoeCwgMEwsIHN0
YXRpY19jYXN0PExPTkc+KGRlc2MuV2lkdGgpKTsKLSAgICByZWN0LnRvcCA9IGdsOjpjbGFtcCh5
LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVzYy5IZWlnaHQpKTsKLSAgICByZWN0LnJpZ2h0ID0g
Z2w6OmNsYW1wKHggKyB3aWR0aCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KGRlc2MuV2lkdGgpKTsK
LSAgICByZWN0LmJvdHRvbSA9IGdsOjpjbGFtcCh5ICsgaGVpZ2h0LCAwTCwgc3RhdGljX2Nhc3Q8
TE9ORz4oZGVzYy5IZWlnaHQpKTsKLQotICAgIEQzRExPQ0tFRF9SRUNUIGxvY2s7Ci0gICAgcmVz
dWx0ID0gc3lzdGVtU3VyZmFjZS0+TG9ja1JlY3QoJmxvY2ssICZyZWN0LCBEM0RMT0NLX1JFQURP
TkxZKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsKLQotICAgICAgICByZXR1
cm47ICAgLy8gTm8gc2Vuc2libGUgZXJyb3IgdG8gZ2VuZXJhdGUKLSAgICB9Ci0KLSAgICB1bnNp
Z25lZCBjaGFyICpkZXN0ID0gKHVuc2lnbmVkIGNoYXIqKXBpeGVsczsKLSAgICB1bnNpZ25lZCBz
aG9ydCAqZGVzdDE2ID0gKHVuc2lnbmVkIHNob3J0KilwaXhlbHM7Ci0KLSAgICB1bnNpZ25lZCBj
aGFyICpzb3VyY2U7Ci0gICAgaW50IGlucHV0UGl0Y2g7Ci0gICAgaWYgKHBhY2tSZXZlcnNlUm93
T3JkZXIpCi0gICAgewotICAgICAgICBzb3VyY2UgPSAoKHVuc2lnbmVkIGNoYXIqKWxvY2sucEJp
dHMpICsgbG9jay5QaXRjaCAqIChyZWN0LmJvdHRvbSAtIHJlY3QudG9wIC0gMSk7Ci0gICAgICAg
IGlucHV0UGl0Y2ggPSAtbG9jay5QaXRjaDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAg
ICAgc291cmNlID0gKHVuc2lnbmVkIGNoYXIqKWxvY2sucEJpdHM7Ci0gICAgICAgIGlucHV0UGl0
Y2ggPSBsb2NrLlBpdGNoOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGludCBmYXN0UGl4ZWxTaXpl
ID0gMDsKLQotICAgIGlmIChkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQThSOEc4QjggJiYKLSAgICAg
ICAgZm9ybWF0ID09IEdMX0JHUkFfRVhUICYmCi0gICAgICAgIHR5cGUgPT0gR0xfVU5TSUdORURf
QllURSkKLSAgICB7Ci0gICAgICAgIGZhc3RQaXhlbFNpemUgPSA0OwotICAgIH0KLSAgICBlbHNl
IGlmICgoZGVzYy5Gb3JtYXQgPT0gRDNERk1UX0E0UjRHNEI0ICYmCi0gICAgICAgICAgICAgZm9y
bWF0ID09IEdMX0JHUkFfRVhUICYmCi0gICAgICAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9T
SE9SVF80XzRfNF80X1JFVl9FWFQpIHx8Ci0gICAgICAgICAgICAgKGRlc2MuRm9ybWF0ID09IEQz
REZNVF9BMVI1RzVCNSAmJgotICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9CR1JBX0VYVCAmJgot
ICAgICAgICAgICAgIHR5cGUgPT0gR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUKSkK
LSAgICB7Ci0gICAgICAgIGZhc3RQaXhlbFNpemUgPSAyOwotICAgIH0KLSAgICBlbHNlIGlmIChk
ZXNjLkZvcm1hdCA9PSBEM0RGTVRfQTE2QjE2RzE2UjE2RiAmJgotICAgICAgICAgICAgIGZvcm1h
dCA9PSBHTF9SR0JBICYmCi0gICAgICAgICAgICAgdHlwZSA9PSBHTF9IQUxGX0ZMT0FUX09FUykK
LSAgICB7Ci0gICAgICAgIGZhc3RQaXhlbFNpemUgPSA4OwotICAgIH0KLSAgICBlbHNlIGlmIChk
ZXNjLkZvcm1hdCA9PSBEM0RGTVRfQTMyQjMyRzMyUjMyRiAmJgotICAgICAgICAgICAgIGZvcm1h
dCA9PSBHTF9SR0JBICYmCi0gICAgICAgICAgICAgdHlwZSA9PSBHTF9GTE9BVCkKLSAgICB7Ci0g
ICAgICAgIGZhc3RQaXhlbFNpemUgPSAxNjsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBqID0gMDsg
aiA8IHJlY3QuYm90dG9tIC0gcmVjdC50b3A7IGorKykKLSAgICB7Ci0gICAgICAgIGlmIChmYXN0
UGl4ZWxTaXplICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEZhc3QgcGF0aCBmb3Ig
Zm9ybWF0cyB3aGljaCByZXF1aXJlIG5vIHRyYW5zbGF0aW9uOgotICAgICAgICAgICAgLy8gRDNE
Rk1UX0E4UjhHOEI4IHRvIEJHUkEvVU5TSUdORURfQllURQotICAgICAgICAgICAgLy8gRDNERk1U
X0E0UjRHNEI0IHRvIEJHUkEvVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhUCi0gICAgICAg
ICAgICAvLyBEM0RGTVRfQTFSNUc1QjUgdG8gQkdSQS9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JF
Vl9FWFQKLSAgICAgICAgICAgIC8vIEQzREZNVF9BMTZCMTZHMTZSMTZGIHRvIFJHQkEvSEFMRl9G
TE9BVF9PRVMKLSAgICAgICAgICAgIC8vIEQzREZNVF9BMzJCMzJHMzJSMzJGIHRvIFJHQkEvRkxP
QVQKLSAgICAgICAgICAgIC8vIAotICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGJ1ZmZlcnMgd2l0
aCBubyBhbHBoYSBnbyB0aHJvdWdoIHRoZSBzbG93IHBhdGggYmVsb3cuCi0gICAgICAgICAgICBt
ZW1jcHkoZGVzdCArIGogKiBvdXRwdXRQaXRjaCwKLSAgICAgICAgICAgICAgICAgICBzb3VyY2Ug
KyBqICogaW5wdXRQaXRjaCwKLSAgICAgICAgICAgICAgICAgICAocmVjdC5yaWdodCAtIHJlY3Qu
bGVmdCkgKiBmYXN0UGl4ZWxTaXplKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UgaWYgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BOFI4RzhCOCAmJgotICAg
ICAgICAgICAgICAgICBmb3JtYXQgPT0gR0xfUkdCQSAmJgotICAgICAgICAgICAgICAgICB0eXBl
ID09IEdMX1VOU0lHTkVEX0JZVEUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEZhc3QgcGF0
aCBmb3Igc3dhcHBpbmcgcmVkIHdpdGggYmx1ZQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50IGFyZ2IgPSAqKHVuc2lnbmVkIGludCopKHNvdXJjZSArIDQg
KiBpICsgaiAqIGlucHV0UGl0Y2gpOwotICAgICAgICAgICAgICAgICoodW5zaWduZWQgaW50Kiko
ZGVzdCArIDQgKiBpICsgaiAqIG91dHB1dFBpdGNoKSA9Ci0gICAgICAgICAgICAgICAgICAgIChh
cmdiICYgMHhGRjAwRkYwMCkgfCAgICAgICAvLyBLZWVwIGFscGhhIGFuZCBncmVlbgotICAgICAg
ICAgICAgICAgICAgICAoYXJnYiAmIDB4MDBGRjAwMDApID4+IDE2IHwgLy8gTW92ZSByZWQgdG8g
Ymx1ZQotICAgICAgICAgICAgICAgICAgICAoYXJnYiAmIDB4MDAwMDAwRkYpIDw8IDE2OyAgLy8g
TW92ZSBibHVlIHRvIHJlZAotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3QucmlnaHQgLSByZWN0
LmxlZnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgZmxvYXQgcjsKLSAgICAgICAgICAg
IGZsb2F0IGc7Ci0gICAgICAgICAgICBmbG9hdCBiOwotICAgICAgICAgICAgZmxvYXQgYTsKLQot
ICAgICAgICAgICAgc3dpdGNoIChkZXNjLkZvcm1hdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiID0gKih1bnNpZ25lZCBzaG9ydCopKHNvdXJjZSAr
IDIgKiBpICsgaiAqIGlucHV0UGl0Y2gpOwotCi0gICAgICAgICAgICAgICAgICAgIGEgPSAxLjBm
OwotICAgICAgICAgICAgICAgICAgICBiID0gKHJnYiAmIDB4MDAxRikgKiAoMS4wZiAvIDB4MDAx
Rik7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAocmdiICYgMHgwN0UwKSAqICgxLjBmIC8gMHgw
N0UwKTsKLSAgICAgICAgICAgICAgICAgICAgciA9IChyZ2IgJiAweEY4MDApICogKDEuMGYgLyAw
eEY4MDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6Ci0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhcmdiID0gKih1bnNpZ25lZCBzaG9ydCopKHNv
dXJjZSArIDIgKiBpICsgaiAqIGlucHV0UGl0Y2gpOwotCi0gICAgICAgICAgICAgICAgICAgIGEg
PSAoYXJnYiAmIDB4ODAwMCkgPyAxLjBmIDogMC4wZjsKLSAgICAgICAgICAgICAgICAgICAgYiA9
IChhcmdiICYgMHgwMDFGKSAqICgxLjBmIC8gMHgwMDFGKTsKLSAgICAgICAgICAgICAgICAgICAg
ZyA9IChhcmdiICYgMHgwM0UwKSAqICgxLjBmIC8gMHgwM0UwKTsKLSAgICAgICAgICAgICAgICAg
ICAgciA9IChhcmdiICYgMHg3QzAwKSAqICgxLjBmIC8gMHg3QzAwKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4
UjhHOEI4OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
aW50IGFyZ2IgPSAqKHVuc2lnbmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0
Y2gpOwotCi0gICAgICAgICAgICAgICAgICAgIGEgPSAoYXJnYiAmIDB4RkYwMDAwMDApICogKDEu
MGYgLyAweEZGMDAwMDAwKTsKLSAgICAgICAgICAgICAgICAgICAgYiA9IChhcmdiICYgMHgwMDAw
MDBGRikgKiAoMS4wZiAvIDB4MDAwMDAwRkYpOwotICAgICAgICAgICAgICAgICAgICBnID0gKGFy
Z2IgJiAweDAwMDBGRjAwKSAqICgxLjBmIC8gMHgwMDAwRkYwMCk7Ci0gICAgICAgICAgICAgICAg
ICAgIHIgPSAoYXJnYiAmIDB4MDBGRjAwMDApICogKDEuMGYgLyAweDAwRkYwMDAwKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
RDNERk1UX1g4UjhHOEI4OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IHhyZ2IgPSAqKHVuc2lnbmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAq
IGlucHV0UGl0Y2gpOwotCi0gICAgICAgICAgICAgICAgICAgIGEgPSAxLjBmOwotICAgICAgICAg
ICAgICAgICAgICBiID0gKHhyZ2IgJiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBGRik7
Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAoeHJnYiAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAw
eDAwMDBGRjAwKTsKLSAgICAgICAgICAgICAgICAgICAgciA9ICh4cmdiICYgMHgwMEZGMDAwMCkg
KiAoMS4wZiAvIDB4MDBGRjAwMDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTJSMTBHMTBCMTA6Ci0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5z
aWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgYSA9IChhcmdiICYgMHhDMDAwMDAwMCkgKiAoMS4wZiAvIDB4QzAwMDAwMDAp
OwotICAgICAgICAgICAgICAgICAgICBiID0gKGFyZ2IgJiAweDAwMDAwM0ZGKSAqICgxLjBmIC8g
MHgwMDAwMDNGRik7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDAwRkZDMDAp
ICogKDEuMGYgLyAweDAwMEZGQzAwKTsKLSAgICAgICAgICAgICAgICAgICAgciA9IChhcmdiICYg
MHgzRkYwMDAwMCkgKiAoMS4wZiAvIDB4M0ZGMDAwMDApOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMy
UjMyRjoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0IGZv
cm1hdHMgaW4gRDNEIGFyZSBzdG9yZWQgcmdiYSwgcmF0aGVyIHRoYW4gdGhlIG90aGVyIHdheSBy
b3VuZAotICAgICAgICAgICAgICAgICAgICByID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkg
KyBqICogaW5wdXRQaXRjaCkgKyAwKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9ICooKGZsb2F0
Kikoc291cmNlICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGIgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGogKiBpbnB1dFBpdGNoKSAr
IDIpOwotICAgICAgICAgICAgICAgICAgICBhID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkg
KyBqICogaW5wdXRQaXRjaCkgKyAzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBmbG9hdCBmb3JtYXRzIGluIEQz
RCBhcmUgc3RvcmVkIHJnYmEsIHJhdGhlciB0aGFuIHRoZSBvdGhlciB3YXkgcm91bmQKLSAgICAg
ICAgICAgICAgICAgICAgciA9IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCooKHVuc2lnbmVkIHNob3J0
Kikoc291cmNlICsgOCAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAwKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGcgPSBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKCh1bnNpZ25lZCBzaG9ydCopKHNvdXJj
ZSArIDggKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMSkpOwotICAgICAgICAgICAgICAgICAgICBi
ID0gZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKigodW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyA4ICog
aSArIGogKiBpbnB1dFBpdGNoKSArIDIpKTsKLSAgICAgICAgICAgICAgICAgICAgYSA9IGdsOjpm
bG9hdDE2VG9GbG9hdDMyKCooKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsgOCAqIGkgKyBqICog
aW5wdXRQaXRjaCkgKyAzKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFVOSU1QTEVNRU5U
RUQoKTsgICAvLyBGSVhNRQotICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzd2l0Y2ggKGZv
cm1hdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAg
ICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAq
IGkgKyBqICogb3V0cHV0UGl0Y2ggKyAwXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiByICsgMC41
Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAx
XSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBnICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAg
IGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAyXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUg
KiBiICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0
UGl0Y2ggKyAzXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBhICsgMC41Zik7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToK
LSAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDBdID0g
KHVuc2lnbmVkIGNoYXIpKDI1NSAqIGIgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgZGVz
dFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDFdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGcg
KyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRj
aCArIDJdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIHIgKyAwLjVmKTsKLSAgICAgICAgICAgICAg
ICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDNdID0gKHVuc2lnbmVkIGNoYXIp
KDI1NSAqIGEgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVDoKLSAgICAgICAg
ICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhlICJU
cmFuc2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCi0gICAgICAgICAgICAgICAgICAg
IC8vIHRoaXMgdHlwZSBpcyBwYWNrZWQgYXMgZm9sbG93czoKLSAgICAgICAgICAgICAgICAgICAg
Ly8gICAxNSAgIDE0ICAgMTMgICAxMiAgIDExICAgMTAgICAgOSAgICA4ICAgIDcgICAgNiAgICA1
ICAgIDQgICAgMyAgICAyICAgIDEgICAgMAotICAgICAgICAgICAgICAgICAgICAvLyAgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgICAgICAgICAgLy8gfCAgICAgICA0dGggICAg
ICAgICB8ICAgICAgICAzcmQgICAgICAgICB8ICAgICAgICAybmQgICAgICAgIHwgICAxc3QgY29t
cG9uZW50ICAgfAotICAgICAgICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLSAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgQkdSQV9FWFQsIEIgaXMg
dGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28gZm9ydGguCi0gICAgICAg
ICAgICAgICAgICAgIGRlc3QxNltpICsgaiAqIG91dHB1dFBpdGNoIC8gc2l6ZW9mKHVuc2lnbmVk
IHNob3J0KV0gPQotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUg
KiBhICsgMC41ZikgPDwgMTIpfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBz
aG9ydCkoMTUgKiByICsgMC41ZikgPDwgOCkgfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1
bnNpZ25lZCBzaG9ydCkoMTUgKiBnICsgMC41ZikgPDwgNCkgfAotICAgICAgICAgICAgICAgICAg
ICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUgKiBiICsgMC41ZikgPDwgMCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VF8xXzVfNV81X1JFVl9FWFQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0
aGUgZGVza3RvcCBHTCBzcGVjIGluIHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVjdGFuZ2xlcyIg
c2VjdGlvbgotICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZv
bGxvd3M6Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgMTUgICAxNCAgIDEzICAgMTIgICAxMSAg
IDEwICAgIDkgICAgOCAgICA3ICAgIDYgICAgNSAgICA0ICAgIDMgICAgMiAgICAxICAgIDAKLSAg
ICAgICAgICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAg
ICAgICAgICAgIC8vIHwgNHRoIHwgICAgICAgICAgM3JkICAgICAgICAgICB8ICAgICAgICAgICAy
bmQgICAgICAgICAgfCAgICAgIDFzdCBjb21wb25lbnQgICAgIHwKLSAgICAgICAgICAgICAgICAg
ICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAgIC8vIGlu
IHRoZSBjYXNlIG9mIEJHUkFfRVhULCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQsIEcgdGhlIHNl
Y29uZCwgYW5kIHNvIGZvcnRoLgotICAgICAgICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBv
dXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICgodW5zaWduZWQgc2hvcnQpKCAgICAgYSArIDAuNWYpIDw8IDE1KSB8Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIHIgKyAwLjVmKSA8PCAxMCkg
fAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiBnICsgMC41
ZikgPDwgNSkgfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEg
KiBiICsgMC41ZikgPDwgMCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAg
ICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgICAgICAgICAgICAgICAgICBkZXN0
MTZbaSArIGogKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0gCi0gICAg
ICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIGIgKyAwLjVmKSA8PCAw
KSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSg2MyAqIGcgKyAw
LjVmKSA8PCA1KSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgz
MSAqIHIgKyAwLjVmKSA8PCAxMSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgICAgICAgICBk
ZXN0WzMgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMF0gPSAodW5zaWduZWQgY2hhcikoMjU1ICog
ciArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzMgKiBpICsgaiAqIG91dHB1dFBp
dGNoICsgMV0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogZyArIDAuNWYpOwotICAgICAgICAgICAg
ICAgICAgICBkZXN0WzMgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMl0gPSAodW5zaWduZWQgY2hh
cikoMjU1ICogYiArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3lzdGVtU3VyZmFjZS0+
VW5sb2NrUmVjdCgpOwotCi0gICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOwotfQotCi1SZW5k
ZXJUYXJnZXQgKlJlbmRlcmVyOTo6Y3JlYXRlUmVuZGVyVGFyZ2V0KFN3YXBDaGFpbiAqc3dhcENo
YWluLCBib29sIGRlcHRoKQotewotICAgIFN3YXBDaGFpbjkgKnN3YXBDaGFpbjkgPSBTd2FwQ2hh
aW45OjptYWtlU3dhcENoYWluOShzd2FwQ2hhaW4pOwotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpz
dXJmYWNlID0gTlVMTDsKLSAgICBpZiAoZGVwdGgpCi0gICAgewotICAgICAgICBzdXJmYWNlID0g
c3dhcENoYWluOS0+Z2V0RGVwdGhTdGVuY2lsKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0g
ICAgICAgIHN1cmZhY2UgPSBzd2FwQ2hhaW45LT5nZXRSZW5kZXJUYXJnZXQoKTsKLSAgICB9Ci0K
LSAgICBSZW5kZXJUYXJnZXQ5ICpyZW5kZXJUYXJnZXQgPSBuZXcgUmVuZGVyVGFyZ2V0OSh0aGlz
LCBzdXJmYWNlKTsKLQotICAgIHJldHVybiByZW5kZXJUYXJnZXQ7Ci19Ci0KLVJlbmRlclRhcmdl
dCAqUmVuZGVyZXI5OjpjcmVhdGVSZW5kZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMsIGJvb2wgZGVwdGgpCi17Ci0gICAgUmVuZGVy
VGFyZ2V0OSAqcmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldDkodGhpcywgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCBzYW1wbGVzKTsKLSAgICByZXR1cm4gcmVuZGVyVGFyZ2V0OwotfQotCi1T
aGFkZXJFeGVjdXRhYmxlICpSZW5kZXJlcjk6OmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1
bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCByeDo6U2hhZGVyVHlwZSB0eXBlKQotewotICAgIFNoYWRl
ckV4ZWN1dGFibGU5ICpleGVjdXRhYmxlID0gTlVMTDsKLQotICAgIHN3aXRjaCAodHlwZSkKLSAg
ICB7Ci0gICAgICBjYXNlIHJ4OjpTSEFERVJfVkVSVEVYOgotICAgICAgICB7Ci0gICAgICAgICAg
ICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICp2c2hhZGVyID0gY3JlYXRlVmVydGV4U2hhZGVyKChE
V09SRCopZnVuY3Rpb24sIGxlbmd0aCk7Ci0gICAgICAgICAgICBpZiAodnNoYWRlcikKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3IFNoYWRlckV4ZWN1dGFi
bGU5KGZ1bmN0aW9uLCBsZW5ndGgsIHZzaGFkZXIpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSByeDo6U0hBREVSX1BJWEVMOgotICAgICAgICB7
Ci0gICAgICAgICAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKnBzaGFkZXIgPSBjcmVhdGVQaXhl
bFNoYWRlcigoRFdPUkQqKWZ1bmN0aW9uLCBsZW5ndGgpOwotICAgICAgICAgICAgaWYgKHBzaGFk
ZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IG5ldyBTaGFk
ZXJFeGVjdXRhYmxlOShmdW5jdGlvbiwgbGVuZ3RoLCBwc2hhZGVyKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVB
Q0hBQkxFKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBleGVjdXRhYmxl
OwotfQotCi1TaGFkZXJFeGVjdXRhYmxlICpSZW5kZXJlcjk6OmNvbXBpbGVUb0V4ZWN1dGFibGUo
Z2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRlckhMU0wsIHJ4OjpTaGFkZXJU
eXBlIHR5cGUsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91bmQpCi17Ci0gICAgY29uc3QgY2hh
ciAqcHJvZmlsZSA9IE5VTEw7Ci0KLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2Fz
ZSByeDo6U0hBREVSX1ZFUlRFWDoKLSAgICAgICAgcHJvZmlsZSA9IGdldE1ham9yU2hhZGVyTW9k
ZWwoKSA+PSAzID8gInZzXzNfMCIgOiAidnNfMl8wIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIHJ4OjpTSEFERVJfUElYRUw6Ci0gICAgICAgIHByb2ZpbGUgPSBnZXRNYWpvclNoYWRlck1v
ZGVsKCkgPj0gMyA/ICJwc18zXzAiIDogInBzXzJfMCI7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0g
ICAgfQotCi0gICAgLy8gQU5HTEUgaXNzdWUgNDg2OgotICAgIC8vIFdvcmstYXJvdW5kIGEgRDNE
OSBjb21waWxlciBidWcgdGhhdCBwcmVzZW50cyBpdHNlbGYgd2hlbiB1c2luZyBjb25kaXRpb25h
bCBkaXNjYXJkLCBieSBkaXNhYmxpbmcgb3B0aW1pemF0aW9uCi0gICAgVUlOVCBvcHRpbWl6YXRp
b25GbGFncyA9ICh3b3JrYXJvdW5kID09IEFOR0xFX0QzRF9XT1JLQVJPVU5EX1NNM19PUFRJTUla
RVIgPyBEM0RDT01QSUxFX1NLSVBfT1BUSU1JWkFUSU9OIDogQU5HTEVfQ09NUElMRV9PUFRJTUla
QVRJT05fTEVWRUwpOwotCi0gICAgSUQzREJsb2IgKmJpbmFyeSA9IChJRDNEQmxvYiopY29tcGls
ZVRvQmluYXJ5KGluZm9Mb2csIHNoYWRlckhMU0wsIHByb2ZpbGUsIG9wdGltaXphdGlvbkZsYWdz
LCB0cnVlKTsKLSAgICBpZiAoIWJpbmFyeSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBT
aGFkZXJFeGVjdXRhYmxlICpleGVjdXRhYmxlID0gbG9hZEV4ZWN1dGFibGUoYmluYXJ5LT5HZXRC
dWZmZXJQb2ludGVyKCksIGJpbmFyeS0+R2V0QnVmZmVyU2l6ZSgpLCB0eXBlKTsKLSAgICBiaW5h
cnktPlJlbGVhc2UoKTsKLQotICAgIHJldHVybiBleGVjdXRhYmxlOwotfQotCi1ib29sIFJlbmRl
cmVyOTo6Ym94RmlsdGVyKElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIElEaXJlY3QzRFN1cmZh
Y2U5ICpkZXN0KQotewotICAgIHJldHVybiBtQmxpdC0+Ym94RmlsdGVyKHNvdXJjZSwgZGVzdCk7
Ci19Ci0KLUQzRFBPT0wgUmVuZGVyZXI5OjpnZXRUZXh0dXJlUG9vbChEV09SRCB1c2FnZSkgY29u
c3QKLXsKLSAgICBpZiAobUQzZDlFeCAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEQz
RFBPT0xfREVGQVVMVDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKCEodXNh
Z2UgJiAoRDNEVVNBR0VfREVQVEhTVEVOQ0lMIHwgRDNEVVNBR0VfUkVOREVSVEFSR0VUKSkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBEM0RQT09MX01BTkFHRUQ7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gRDNEUE9PTF9ERUZBVUxUOwotfQotCi1ib29sIFJlbmRlcmVy
OTo6Y29weVRvUmVuZGVyVGFyZ2V0KElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0LCBJRGlyZWN0M0RT
dXJmYWNlOSAqc291cmNlLCBib29sIGZyb21NYW5hZ2VkKQotewotICAgIGlmIChzb3VyY2UgJiYg
ZGVzdCkKLSAgICB7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gRDNERVJSX09VVE9GVklERU9N
RU1PUlk7Ci0KLSAgICAgICAgaWYgKGZyb21NYW5hZ2VkKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKLSAgICAgICAgICAgIHNvdXJjZS0+R2V0RGVzYygmZGVz
Yyk7Ci0KLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmID0gMDsKLSAgICAgICAg
ICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZU9mZnNjcmVlblBsYWluU3VyZmFjZShkZXNjLldp
ZHRoLCBkZXNjLkhlaWdodCwgZGVzYy5Gb3JtYXQsIEQzRFBPT0xfU1lTVEVNTUVNLCAmc3VyZiwg
TlVMTCk7Ci0KLSAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBJbWFnZTk6OmNvcHlMb2NrYWJsZVN1cmZhY2VzKHN1cmYsIHNv
dXJjZSk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+VXBkYXRlU3VyZmFjZShz
dXJmLCBOVUxMLCBkZXN0LCBOVUxMKTsKLSAgICAgICAgICAgICAgICBzdXJmLT5SZWxlYXNlKCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAg
ICAgICAgICBlbmRTY2VuZSgpOwotICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+U3RyZXRj
aFJlY3Qoc291cmNlLCBOVUxMLCBkZXN0LCBOVUxMLCBEM0RURVhGX05PTkUpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBB
U1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09V
VE9GTUVNT1JZKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHJldHVybiB0cnVlOwotfQotCi1JbWFnZSAqUmVuZGVyZXI5OjpjcmVhdGVJbWFnZSgp
Ci17Ci0gICAgcmV0dXJuIG5ldyBJbWFnZTkoKTsKLX0KLQotdm9pZCBSZW5kZXJlcjk6OmdlbmVy
YXRlTWlwbWFwKEltYWdlICpkZXN0LCBJbWFnZSAqc3JjKQotewotICAgIEltYWdlOSAqc3JjOSA9
IEltYWdlOTo6bWFrZUltYWdlOShzcmMpOwotICAgIEltYWdlOSAqZHN0OSA9IEltYWdlOTo6bWFr
ZUltYWdlOShkZXN0KTsKLSAgICBJbWFnZTk6OmdlbmVyYXRlTWlwbWFwKGRzdDksIHNyYzkpOwot
fQotCi1UZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXI5OjpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKFN3
YXBDaGFpbiAqc3dhcENoYWluKQotewotICAgIFN3YXBDaGFpbjkgKnN3YXBDaGFpbjkgPSBTd2Fw
Q2hhaW45OjptYWtlU3dhcENoYWluOShzd2FwQ2hhaW4pOwotICAgIHJldHVybiBuZXcgVGV4dHVy
ZVN0b3JhZ2U5XzJEKHRoaXMsIHN3YXBDaGFpbjkpOwotfQotCi1UZXh0dXJlU3RvcmFnZSAqUmVu
ZGVyZXI5OjpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTlfMkQo
dGhpcywgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSwgd2lk
dGgsIGhlaWdodCk7Ci19Ci0KLVRleHR1cmVTdG9yYWdlICpSZW5kZXJlcjk6OmNyZWF0ZVRleHR1
cmVTdG9yYWdlQ3ViZShpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1
c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKQotewotICAgIHJldHVybiBuZXcg
VGV4dHVyZVN0b3JhZ2U5X0N1YmUodGhpcywgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgdXNhZ2Us
IGZvcmNlUmVuZGVyYWJsZSwgc2l6ZSk7Ci19Ci0KLWJvb2wgUmVuZGVyZXI5OjpnZXRMVUlEKExV
SUQgKmFkYXB0ZXJMdWlkKSBjb25zdAotewotICAgIGFkYXB0ZXJMdWlkLT5IaWdoUGFydCA9IDA7
Ci0gICAgYWRhcHRlckx1aWQtPkxvd1BhcnQgPSAwOwotCi0gICAgaWYgKG1EM2Q5RXgpCi0gICAg
ewotICAgICAgICBtRDNkOUV4LT5HZXRBZGFwdGVyTFVJRChtQWRhcHRlciwgYWRhcHRlckx1aWQp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvUmVuZGVyZXI5LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL1JlbmRlcmVyOS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmMy
ZGMxZDUzZTRjMDM4NGU4Y2JmOTA1MDJiMDNmMDYxNzI4MTgyLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXI5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNTAgKzAs
MCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gUmVuZGVyZXI5Lmg6IERlZmluZXMgYSBiYWNr
LWVuZCBzcGVjaWZpYyBjbGFzcyBmb3IgdGhlIEQzRDkgcmVuZGVyZXIuCi0KLSNpZm5kZWYgTElC
R0xFU1YyX1JFTkRFUkVSX1JFTkRFUkVSOV9IXwotI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJf
UkVOREVSRVI5X0hfCi0KLSNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgotI2luY2x1ZGUg
ImxpYkdMRVN2Mi9tYXRodXRpbC5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9TaGFk
ZXJDYWNoZS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhEZWNsYXJhdGlv
bkNhY2hlLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldC5oIgotCi1uYW1lc3BhY2UgZ2wK
LXsKLWNsYXNzIFJlbmRlcmJ1ZmZlcjsKLX0KLQotbmFtZXNwYWNlIHJ4Ci17Ci1jbGFzcyBWZXJ0
ZXhEYXRhTWFuYWdlcjsKLWNsYXNzIEluZGV4RGF0YU1hbmFnZXI7Ci1jbGFzcyBTdHJlYW1pbmdJ
bmRleEJ1ZmZlckludGVyZmFjZTsKLXN0cnVjdCBUcmFuc2xhdGVkQXR0cmlidXRlOwotCi1jbGFz
cyBSZW5kZXJlcjkgOiBwdWJsaWMgUmVuZGVyZXIKLXsKLSAgcHVibGljOgotICAgIFJlbmRlcmVy
OShlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIEhEQyBoRGMsIGJvb2wgc29mdHdhcmVEZXZpY2UpOwot
ICAgIHZpcnR1YWwgflJlbmRlcmVyOSgpOwotCi0gICAgc3RhdGljIFJlbmRlcmVyOSAqbWFrZVJl
bmRlcmVyOShSZW5kZXJlciAqcmVuZGVyZXIpOwotCi0gICAgdmlydHVhbCBFR0xpbnQgaW5pdGlh
bGl6ZSgpOwotICAgIHZpcnR1YWwgYm9vbCByZXNldERldmljZSgpOwotCi0gICAgdmlydHVhbCBp
bnQgZ2VuZXJhdGVDb25maWdzKENvbmZpZ0Rlc2MgKipjb25maWdEZXNjTGlzdCk7Ci0gICAgdmly
dHVhbCB2b2lkIGRlbGV0ZUNvbmZpZ3MoQ29uZmlnRGVzYyAqY29uZmlnRGVzY0xpc3QpOwotCi0g
ICAgdm9pZCBzdGFydFNjZW5lKCk7Ci0gICAgdm9pZCBlbmRTY2VuZSgpOwotCi0gICAgdmlydHVh
bCB2b2lkIHN5bmMoYm9vbCBibG9jayk7Ci0KLSAgICB2aXJ0dWFsIFN3YXBDaGFpbiAqY3JlYXRl
U3dhcENoYWluKEhXTkQgd2luZG93LCBIQU5ETEUgc2hhcmVIYW5kbGUsIEdMZW51bSBiYWNrQnVm
ZmVyRm9ybWF0LCBHTGVudW0gZGVwdGhCdWZmZXJGb3JtYXQpOwotCi0gICAgSURpcmVjdDNEUXVl
cnk5KiBhbGxvY2F0ZUV2ZW50UXVlcnkoKTsKLSAgICB2b2lkIGZyZWVFdmVudFF1ZXJ5KElEaXJl
Y3QzRFF1ZXJ5OSogcXVlcnkpOwotCi0gICAgLy8gcmVzb3VyY2UgY3JlYXRpb24KLSAgICBJRGly
ZWN0M0RWZXJ0ZXhTaGFkZXI5ICpjcmVhdGVWZXJ0ZXhTaGFkZXIoY29uc3QgRFdPUkQgKmZ1bmN0
aW9uLCBzaXplX3QgbGVuZ3RoKTsKLSAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKmNyZWF0ZVBp
eGVsU2hhZGVyKGNvbnN0IERXT1JEICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCk7Ci0gICAgSFJF
U1VMVCBjcmVhdGVWZXJ0ZXhCdWZmZXIoVUlOVCBMZW5ndGgsIERXT1JEIFVzYWdlLCBJRGlyZWN0
M0RWZXJ0ZXhCdWZmZXI5ICoqcHBWZXJ0ZXhCdWZmZXIpOwotICAgIEhSRVNVTFQgY3JlYXRlSW5k
ZXhCdWZmZXIoVUlOVCBMZW5ndGgsIERXT1JEIFVzYWdlLCBEM0RGT1JNQVQgRm9ybWF0LCBJRGly
ZWN0M0RJbmRleEJ1ZmZlcjkgKipwcEluZGV4QnVmZmVyKTsKLSNpZiAwCi0gICAgdm9pZCAqY3Jl
YXRlVGV4dHVyZTJEKCk7Ci0gICAgdm9pZCAqY3JlYXRlVGV4dHVyZUN1YmUoKTsKLSAgICB2b2lk
ICpjcmVhdGVRdWVyeSgpOwotICAgIHZvaWQgKmNyZWF0ZUluZGV4QnVmZmVyKCk7Ci0gICAgdm9p
ZCAqY3JlYXRlVmVydGV4YnVmZmVyKCk7Ci0KLSAgICAvLyBzdGF0ZSBzZXR1cAotICAgIHZvaWQg
YXBwbHlTaGFkZXJzKCk7Ci0gICAgdm9pZCBhcHBseUNvbnN0YW50cygpOwotI2VuZGlmCi0gICAg
dmlydHVhbCB2b2lkIHNldFNhbXBsZXJTdGF0ZShnbDo6U2FtcGxlclR5cGUgdHlwZSwgaW50IGlu
ZGV4LCBjb25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVyKTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0VGV4dHVyZShnbDo6U2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBnbDo6VGV4dHVyZSAq
dGV4dHVyZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmFzdGVyaXplclN0YXRlKGNvbnN0IGds
OjpSYXN0ZXJpemVyU3RhdGUgJnJhc3RlclN0YXRlKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Qmxl
bmRTdGF0ZShjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNvbG9y
ICZibGVuZENvbG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBzYW1wbGVNYXNrKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RGVwdGhTdGVuY2lsU3RhdGUoY29u
c3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZkZXB0aFN0ZW5jaWxTdGF0ZSwgaW50IHN0ZW5jaWxS
ZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGVuY2lsQmFj
a1JlZiwgYm9vbCBmcm9udEZhY2VDQ1cpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldFNjaXNzb3JS
ZWN0YW5nbGUoY29uc3QgZ2w6OlJlY3RhbmdsZSAmc2Npc3NvciwgYm9vbCBlbmFibGVkKTsKLSAg
ICB2aXJ0dWFsIGJvb2wgc2V0Vmlld3BvcnQoY29uc3QgZ2w6OlJlY3RhbmdsZSAmdmlld3BvcnQs
IGZsb2F0IHpOZWFyLCBmbG9hdCB6RmFyLCBHTGVudW0gZHJhd01vZGUsIEdMZW51bSBmcm9udEZh
Y2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaWdub3JlVmlld3BvcnQpOwot
Ci0gICAgdmlydHVhbCBib29sIGFwcGx5UmVuZGVyVGFyZ2V0KGdsOjpGcmFtZWJ1ZmZlciAqZnJh
bWVCdWZmZXIpOwotICAgIHZpcnR1YWwgdm9pZCBhcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1CaW5h
cnkgKnByb2dyYW1CaW5hcnkpOwotICAgIHZpcnR1YWwgdm9pZCBhcHBseVVuaWZvcm1zKGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBnbDo6VW5pZm9ybUFycmF5ICp1bmlmb3JtQXJy
YXkpOwotICAgIHZpcnR1YWwgYm9vbCBhcHBseVByaW1pdGl2ZVR5cGUoR0xlbnVtIHByaW1pdGl2
ZVR5cGUsIEdMc2l6ZWkgZWxlbWVudENvdW50KTsKLSAgICB2aXJ0dWFsIEdMZW51bSBhcHBseVZl
cnRleEJ1ZmZlcihnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlZlcnRleEF0
dHJpYnV0ZSB2ZXJ0ZXhBdHRyaWJ1dGVzW10sIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBH
THNpemVpIGluc3RhbmNlcyk7Ci0gICAgdmlydHVhbCBHTGVudW0gYXBwbHlJbmRleEJ1ZmZlcihj
b25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgR0xz
aXplaSBjb3VudCwgR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRh
ICppbmRleEluZm8pOwotCi0gICAgdmlydHVhbCB2b2lkIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUs
IEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJh
d0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3Qg
R0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRy
YW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMpOwotCi0gICAg
dmlydHVhbCB2b2lkIGNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1z
LCBnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKTsKLQotICAgIHZpcnR1YWwgdm9pZCBtYXJr
QWxsU3RhdGVEaXJ0eSgpOwotCi0gICAgLy8gbG9zdCBkZXZpY2UKLSAgICB2b2lkIG5vdGlmeURl
dmljZUxvc3QoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNEZXZpY2VMb3N0KCk7Ci0gICAgdmlydHVh
bCBib29sIHRlc3REZXZpY2VMb3N0KGJvb2wgbm90aWZ5KTsKLSAgICB2aXJ0dWFsIGJvb2wgdGVz
dERldmljZVJlc2V0dGFibGUoKTsKLQotICAgIC8vIFJlbmRlcmVyIGNhcGFiaWxpdGllcwotICAg
IElEaXJlY3QzRERldmljZTkgKmdldERldmljZSgpIHsgcmV0dXJuIG1EZXZpY2U7IH0KLSAgICB2
aXJ0dWFsIERXT1JEIGdldEFkYXB0ZXJWZW5kb3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHN0ZDo6
c3RyaW5nIGdldFJlbmRlcmVyRGVzY3JpcHRpb24oKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdVSUQg
Z2V0QWRhcHRlcklkZW50aWZpZXIoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgYm9vbCBnZXRCR1JB
VGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUMVRleHR1cmVT
dXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldERYVDNUZXh0dXJlU3VwcG9ydCgpOwotICAg
IHZpcnR1YWwgYm9vbCBnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wg
Z2V0RXZlbnRRdWVyeVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1
cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSk7Ci0gICAgdmlydHVh
bCBib29sIGdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJl
bmRlcmFibGUpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgp
OwotICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCk7Ci0g
ICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhDb21iaW5lZFRleHR1cmVJbWFn
ZVVuaXRzKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVzZXJ2ZWRWZXJ0
ZXhVbmlmb3JtVmVjdG9ycygpIGNvbnN0OwotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJl
c2VydmVkRnJhZ21lbnRVbmlmb3JtVmVjdG9ycygpIGNvbnN0OwotICAgIHZpcnR1YWwgdW5zaWdu
ZWQgaW50IGdldE1heFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1
bnNpZ25lZCBpbnQgZ2V0TWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycygpIGNvbnN0OwotICAgIHZp
cnR1YWwgdW5zaWduZWQgaW50IGdldE1heFZhcnlpbmdWZWN0b3JzKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBib29sIGdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBib29sIGdldERlcHRoVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wg
Z2V0T2NjbHVzaW9uUXVlcnlTdXBwb3J0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdldElu
c3RhbmNpbmdTdXBwb3J0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdldFRleHR1cmVGaWx0
ZXJBbmlzb3Ryb3B5U3VwcG9ydCgpIGNvbnN0OwotICAgIHZpcnR1YWwgZmxvYXQgZ2V0VGV4dHVy
ZU1heEFuaXNvdHJvcHkoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0U2hhcmVIYW5kbGVT
dXBwb3J0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdldERlcml2YXRpdmVJbnN0cnVjdGlv
blN1cHBvcnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0UG9zdFN1YkJ1ZmZlclN1cHBv
cnQoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgaW50IGdldE1ham9yU2hhZGVyTW9kZWwoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIGZsb2F0IGdldE1heFBvaW50U2l6ZSgpIGNvbnN0OwotICAgIHZpcnR1
YWwgaW50IGdldE1heFZpZXdwb3J0RGltZW5zaW9uKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQg
Z2V0TWF4VGV4dHVyZVdpZHRoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVy
ZUhlaWdodCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBnZXQzMkJpdEluZGV4U3VwcG9ydCgp
IGNvbnN0OwotICAgIERXT1JEIGdldENhcHNEZWNsVHlwZXMoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGludCBnZXRNaW5Td2FwSW50ZXJ2YWwoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBnZXRNYXhT
d2FwSW50ZXJ2YWwoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRNYXhTdXBwb3J0
ZWRTYW1wbGVzKCkgY29uc3Q7Ci0gICAgaW50IGdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKEQz
REZPUk1BVCBmb3JtYXQsIGludCByZXF1ZXN0ZWQpIGNvbnN0OwotICAgIAotICAgIHZpcnR1YWwg
dW5zaWduZWQgaW50IGdldE1heFJlbmRlclRhcmdldHMoKSBjb25zdDsKLQotICAgIEQzREZPUk1B
VCBDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KEdMaW50IGludGVybmFsZm9ybWF0KTsKLQot
ICAgIC8vIFBpeGVsIG9wZXJhdGlvbnMKLSAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVyVGFy
Z2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlMkQgKnNvdXJjZSk7Ci0gICAgdmlydHVhbCBib29sIGNvcHlUb1JlbmRlclRhcmdldChUZXh0
dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3Vi
ZSAqc291cmNlKTsKLQotICAgIHZpcnR1YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVy
ICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRl
c3RGb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBHTGludCBsZXZl
bCk7Ci0gICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVm
ZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgR0xlbnVtIHRhcmdldCwgR0xp
bnQgbGV2ZWwpOwotCi0gICAgdmlydHVhbCBib29sIGJsaXRSZWN0KGdsOjpGcmFtZWJ1ZmZlciAq
cmVhZFRhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGdsOjpGcmFtZWJ1ZmZl
ciAqZHJhd1RhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0RGVwdGhTdGVu
Y2lsKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVhZFBpeGVscyhnbDo6RnJhbWVidWZmZXIgKmZyYW1l
YnVmZmVyLCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xzaXplaSBvdXRwdXRQaXRjaCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLCBHTGludCBwYWNr
QWxpZ25tZW50LCB2b2lkKiBwaXhlbHMpOwotCi0gICAgLy8gUmVuZGVyVGFyZ2V0IGNyZWF0aW9u
Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRlclRhcmdldChTd2FwQ2hhaW4g
KnN3YXBDaGFpbiwgYm9vbCBkZXB0aCk7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0
ZVJlbmRlclRhcmdldChpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6
ZWkgc2FtcGxlcywgYm9vbCBkZXB0aCk7Ci0KLSAgICAvLyBTaGFkZXIgb3BlcmF0aW9ucwotICAg
IHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqbG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVu
Y3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUpOwotICAgIHZpcnR1YWwg
U2hhZGVyRXhlY3V0YWJsZSAqY29tcGlsZVRvRXhlY3V0YWJsZShnbDo6SW5mb0xvZyAmaW5mb0xv
ZywgY29uc3QgY2hhciAqc2hhZGVySExTTCwgcng6OlNoYWRlclR5cGUgdHlwZSwgRDNEV29ya2Fy
b3VuZFR5cGUgd29ya2Fyb3VuZCk7Ci0KLSAgICAvLyBJbWFnZSBvcGVyYXRpb25zCi0gICAgdmly
dHVhbCBJbWFnZSAqY3JlYXRlSW1hZ2UoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBt
YXAoSW1hZ2UgKmRlc3QsIEltYWdlICpzb3VyY2UpOwotICAgIHZpcnR1YWwgVGV4dHVyZVN0b3Jh
Z2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoU3dhcENoYWluICpzd2FwQ2hhaW4pOwotICAgIHZp
cnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywg
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxl
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgdmlydHVhbCBUZXh0dXJlU3Rv
cmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpOwot
Ci0gICAgLy8gQnVmZmVyIGNyZWF0aW9uCi0gICAgdmlydHVhbCBWZXJ0ZXhCdWZmZXIgKmNyZWF0
ZVZlcnRleEJ1ZmZlcigpOwotICAgIHZpcnR1YWwgSW5kZXhCdWZmZXIgKmNyZWF0ZUluZGV4QnVm
ZmVyKCk7Ci0gICAgdmlydHVhbCBCdWZmZXJTdG9yYWdlICpjcmVhdGVCdWZmZXJTdG9yYWdlKCk7
Ci0KLSAgICAvLyBRdWVyeSBhbmQgRmVuY2UgY3JlYXRpb24KLSAgICB2aXJ0dWFsIFF1ZXJ5SW1w
bCAqY3JlYXRlUXVlcnkoR0xlbnVtIHR5cGUpOwotICAgIHZpcnR1YWwgRmVuY2VJbXBsICpjcmVh
dGVGZW5jZSgpOwotCi0gICAgLy8gRDNEOS1yZW5kZXJlciBzcGVjaWZpYyBtZXRob2RzCi0gICAg
Ym9vbCBib3hGaWx0ZXIoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgSURpcmVjdDNEU3VyZmFj
ZTkgKmRlc3QpOwotCi0gICAgRDNEUE9PTCBnZXRUZXh0dXJlUG9vbChEV09SRCB1c2FnZSkgY29u
c3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0TFVJRChMVUlEICphZGFwdGVyTHVpZCkgY29uc3Q7
Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyZXI5KTsK
LQotICAgIHZvaWQgYXBwbHlVbmlmb3JtbmZ2KGdsOjpVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBj
b25zdCBHTGZsb2F0ICp2KTsKLSAgICB2b2lkIGFwcGx5VW5pZm9ybW5pdihnbDo6VW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xpbnQgKnYpOwotICAgIHZvaWQgYXBwbHlVbmlmb3JtbmJ2
KGdsOjpVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGludCAqdik7Ci0KLSAgICB2b2lk
IGRyYXdMaW5lTG9vcChHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICpp
bmRpY2VzLCBpbnQgbWluSW5kZXgsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlcik7Ci0g
ICAgdm9pZCBkcmF3SW5kZXhlZFBvaW50cyhHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29u
c3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIpOwotCi0g
ICAgdm9pZCBnZXRNdWx0aVNhbXBsZVN1cHBvcnQoRDNERk9STUFUIGZvcm1hdCwgYm9vbCAqbXVs
dGlTYW1wbGVBcnJheSk7Ci0gICAgYm9vbCBjb3B5VG9SZW5kZXJUYXJnZXQoSURpcmVjdDNEU3Vy
ZmFjZTkgKmRlc3QsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGJvb2wgZnJvbU1hbmFnZWQp
OwotICAgIGdsOjpSZW5kZXJidWZmZXIgKmdldE51bGxDb2xvcmJ1ZmZlcihnbDo6UmVuZGVyYnVm
ZmVyICpkZXB0aGJ1ZmZlcik7Ci0KLSAgICBEM0RQT09MIGdldEJ1ZmZlclBvb2woRFdPUkQgdXNh
Z2UpIGNvbnN0OwotCi0gICAgSE1PRFVMRSBtRDNkOU1vZHVsZTsKLSAgICBIREMgbURjOwotCi0g
ICAgdm9pZCBpbml0aWFsaXplRGV2aWNlKCk7Ci0gICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIGdl
dERlZmF1bHRQcmVzZW50UGFyYW1ldGVycygpOwotICAgIHZvaWQgcmVsZWFzZURldmljZVJlc291
cmNlcygpOwotCi0gICAgVUlOVCBtQWRhcHRlcjsKLSAgICBEM0RERVZUWVBFIG1EZXZpY2VUeXBl
OwotICAgIGJvb2wgbVNvZnR3YXJlRGV2aWNlOyAgIC8vIEZJWE1FOiBEZXByZWNhdGUKLSAgICBJ
RGlyZWN0M0Q5ICptRDNkOTsgIC8vIEFsd2F5cyB2YWxpZCBhZnRlciBzdWNjZXNzZnVsIGluaXRp
YWxpemF0aW9uLgotICAgIElEaXJlY3QzRDlFeCAqbUQzZDlFeDsgIC8vIE1pZ2h0IGJlIG51bGwg
aWYgRDNEOUV4IGlzIG5vdCBzdXBwb3J0ZWQuCi0gICAgSURpcmVjdDNERGV2aWNlOSAqbURldmlj
ZTsKLSAgICBJRGlyZWN0M0REZXZpY2U5RXggKm1EZXZpY2VFeDsgIC8vIE1pZ2h0IGJlIG51bGwg
aWYgRDNEOUV4IGlzIG5vdCBzdXBwb3J0ZWQuCi0KLSAgICBCbGl0ICptQmxpdDsKLQotICAgIEhX
TkQgbURldmljZVdpbmRvdzsKLQotICAgIGJvb2wgbURldmljZUxvc3Q7Ci0gICAgRDNEQ0FQUzkg
bURldmljZUNhcHM7Ci0gICAgRDNEQURBUFRFUl9JREVOVElGSUVSOSBtQWRhcHRlcklkZW50aWZp
ZXI7Ci0KLSAgICBEM0RQUklNSVRJVkVUWVBFIG1QcmltaXRpdmVUeXBlOwotICAgIGludCBtUHJp
bWl0aXZlQ291bnQ7Ci0gICAgR0xzaXplaSBtUmVwZWF0RHJhdzsKLQotICAgIGJvb2wgbVNjZW5l
U3RhcnRlZDsKLSAgICBib29sIG1TdXBwb3J0c05vblBvd2VyMlRleHR1cmVzOwotICAgIGJvb2wg
bVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHk7Ci0gICAgaW50IG1NaW5Td2FwSW50ZXJ2
YWw7Ci0gICAgaW50IG1NYXhTd2FwSW50ZXJ2YWw7Ci0KLSAgICBib29sIG1PY2NsdXNpb25RdWVy
eVN1cHBvcnQ7Ci0gICAgYm9vbCBtRXZlbnRRdWVyeVN1cHBvcnQ7Ci0gICAgYm9vbCBtVmVydGV4
VGV4dHVyZVN1cHBvcnQ7Ci0KLSAgICBib29sIG1EZXB0aFRleHR1cmVTdXBwb3J0OwotCi0gICAg
Ym9vbCBtRmxvYXQzMlRleHR1cmVTdXBwb3J0OwotICAgIGJvb2wgbUZsb2F0MzJGaWx0ZXJTdXBw
b3J0OwotICAgIGJvb2wgbUZsb2F0MzJSZW5kZXJTdXBwb3J0OwotCi0gICAgYm9vbCBtRmxvYXQx
NlRleHR1cmVTdXBwb3J0OwotICAgIGJvb2wgbUZsb2F0MTZGaWx0ZXJTdXBwb3J0OwotICAgIGJv
b2wgbUZsb2F0MTZSZW5kZXJTdXBwb3J0OwotCi0gICAgYm9vbCBtRFhUMVRleHR1cmVTdXBwb3J0
OwotICAgIGJvb2wgbURYVDNUZXh0dXJlU3VwcG9ydDsKLSAgICBib29sIG1EWFQ1VGV4dHVyZVN1
cHBvcnQ7Ci0KLSAgICBib29sIG1MdW1pbmFuY2VUZXh0dXJlU3VwcG9ydDsKLSAgICBib29sIG1M
dW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0OwotCi0gICAgc3RkOjptYXA8RDNERk9STUFULCBi
b29sICo+IG1NdWx0aVNhbXBsZVN1cHBvcnQ7Ci0gICAgR0xzaXplaSBtTWF4U3VwcG9ydGVkU2Ft
cGxlczsKLQotICAgIC8vIGN1cnJlbnQgcmVuZGVyIHRhcmdldCBzdGF0ZXMKLSAgICB1bnNpZ25l
ZCBpbnQgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWw7Ci0gICAgdW5zaWduZWQgaW50IG1BcHBs
aWVkRGVwdGhidWZmZXJTZXJpYWw7Ci0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVkU3RlbmNpbGJ1
ZmZlclNlcmlhbDsKLSAgICBib29sIG1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZDsKLSAgICBib29s
IG1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQ7Ci0gICAgcng6OlJlbmRlclRhcmdldDo6RGVz
YyBtUmVuZGVyVGFyZ2V0RGVzYzsKLSAgICB1bnNpZ25lZCBpbnQgbUN1clN0ZW5jaWxTaXplOwot
ICAgIHVuc2lnbmVkIGludCBtQ3VyRGVwdGhTaXplOwotCi0gICAgSURpcmVjdDNEU3RhdGVCbG9j
azkgKm1NYXNrZWRDbGVhclNhdmVkU3RhdGU7Ci0KLSAgICAvLyBwcmV2aW91c2x5IHNldCByZW5k
ZXIgc3RhdGVzCi0gICAgYm9vbCBtRm9yY2VTZXREZXB0aFN0ZW5jaWxTdGF0ZTsKLSAgICBnbDo6
RGVwdGhTdGVuY2lsU3RhdGUgbUN1ckRlcHRoU3RlbmNpbFN0YXRlOwotICAgIGludCBtQ3VyU3Rl
bmNpbFJlZjsKLSAgICBpbnQgbUN1clN0ZW5jaWxCYWNrUmVmOwotICAgIGJvb2wgbUN1ckZyb250
RmFjZUNDVzsKLQotICAgIGJvb2wgbUZvcmNlU2V0UmFzdGVyU3RhdGU7Ci0gICAgZ2w6OlJhc3Rl
cml6ZXJTdGF0ZSBtQ3VyUmFzdGVyU3RhdGU7Ci0KLSAgICBib29sIG1Gb3JjZVNldFNjaXNzb3I7
Ci0gICAgZ2w6OlJlY3RhbmdsZSBtQ3VyU2Npc3NvcjsKLSAgICBib29sIG1TY2lzc29yRW5hYmxl
ZDsKLQotICAgIGJvb2wgbUZvcmNlU2V0Vmlld3BvcnQ7Ci0gICAgZ2w6OlJlY3RhbmdsZSBtQ3Vy
Vmlld3BvcnQ7Ci0gICAgZmxvYXQgbUN1ck5lYXI7Ci0gICAgZmxvYXQgbUN1ckZhcjsKLSAgICBm
bG9hdCBtQ3VyRGVwdGhGcm9udDsKLQotICAgIGJvb2wgbUZvcmNlU2V0QmxlbmRTdGF0ZTsKLSAg
ICBnbDo6QmxlbmRTdGF0ZSBtQ3VyQmxlbmRTdGF0ZTsKLSAgICBnbDo6Q29sb3IgbUN1ckJsZW5k
Q29sb3I7Ci0gICAgR0x1aW50IG1DdXJTYW1wbGVNYXNrOwotCi0gICAgLy8gQ3VycmVudGx5IGFw
cGxpZWQgc2FtcGxlciBzdGF0ZXMKLSAgICBib29sIG1Gb3JjZVNldFZlcnRleFNhbXBsZXJTdGF0
ZXNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU107Ci0g
ICAgZ2w6OlNhbXBsZXJTdGF0ZSBtQ3VyVmVydGV4U2FtcGxlclN0YXRlc1tnbDo6SU1QTEVNRU5U
QVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKLQotICAgIGJvb2wgbUZvcmNl
U2V0UGl4ZWxTYW1wbGVyU3RhdGVzW2dsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUU107Ci0gICAg
Z2w6OlNhbXBsZXJTdGF0ZSBtQ3VyUGl4ZWxTYW1wbGVyU3RhdGVzW2dsOjpNQVhfVEVYVFVSRV9J
TUFHRV9VTklUU107Ci0KLSAgICAvLyBDdXJyZW50bHkgYXBwbGllZCB0ZXh0dXJlcwotICAgIHVu
c2lnbmVkIGludCBtQ3VyVmVydGV4VGV4dHVyZVNlcmlhbHNbZ2w6OklNUExFTUVOVEFUSU9OX01B
WF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU107Ci0gICAgdW5zaWduZWQgaW50IG1DdXJQaXhl
bFRleHR1cmVTZXJpYWxzW2dsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUU107Ci0KLSAgICB1bnNp
Z25lZCBpbnQgbUFwcGxpZWRJQlNlcmlhbDsKLSAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRQcm9n
cmFtQmluYXJ5U2VyaWFsOwotICAgIAotICAgIHJ4OjpkeF9WZXJ0ZXhDb25zdGFudHMgbVZlcnRl
eENvbnN0YW50czsKLSAgICByeDo6ZHhfUGl4ZWxDb25zdGFudHMgbVBpeGVsQ29uc3RhbnRzOwot
ICAgIGJvb2wgbUR4VW5pZm9ybXNEaXJ0eTsKLQotICAgIC8vIEEgcG9vbCBvZiBldmVudCBxdWVy
aWVzIHRoYXQgYXJlIGN1cnJlbnRseSB1bnVzZWQuCi0gICAgc3RkOjp2ZWN0b3I8SURpcmVjdDNE
UXVlcnk5Kj4gbUV2ZW50UXVlcnlQb29sOwotICAgIFZlcnRleFNoYWRlckNhY2hlIG1WZXJ0ZXhT
aGFkZXJDYWNoZTsKLSAgICBQaXhlbFNoYWRlckNhY2hlIG1QaXhlbFNoYWRlckNhY2hlOwotCi0g
ICAgVmVydGV4RGF0YU1hbmFnZXIgKm1WZXJ0ZXhEYXRhTWFuYWdlcjsKLSAgICBWZXJ0ZXhEZWNs
YXJhdGlvbkNhY2hlIG1WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOwotCi0gICAgSW5kZXhEYXRhTWFu
YWdlciAqbUluZGV4RGF0YU1hbmFnZXI7Ci0gICAgU3RyZWFtaW5nSW5kZXhCdWZmZXJJbnRlcmZh
Y2UgKm1MaW5lTG9vcElCOwotCi0gICAgZW51bSB7IE5VTV9OVUxMX0NPTE9SQlVGRkVSX0NBQ0hF
X0VOVFJJRVMgPSAxMiB9OwotICAgIHN0cnVjdCBOdWxsQ29sb3JidWZmZXJDYWNoZUVudHJ5Ci0g
ICAgewotICAgICAgICBVSU5UIGxydUNvdW50OwotICAgICAgICBpbnQgd2lkdGg7Ci0gICAgICAg
IGludCBoZWlnaHQ7Ci0gICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmJ1ZmZlcjsKLSAgICB9IG1O
dWxsQ29sb3JidWZmZXJDYWNoZVtOVU1fTlVMTF9DT0xPUkJVRkZFUl9DQUNIRV9FTlRSSUVTXTsK
LSAgICBVSU5UIG1NYXhOdWxsQ29sb3JidWZmZXJMUlU7Ci0KLX07Ci0KLX0KLSNlbmRpZiAvLyBM
SUJHTEVTVjJfUkVOREVSRVJfUkVOREVSRVI5X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckV4ZWN1dGFibGUxMS5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckV4
ZWN1dGFibGUxMS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxZWI1NjAzMzQ4
M2ZmYjA5MDIyOTBlNTk2ODZkZDRjMGQ4YjIwYzIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlMTEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA5
ICswLDAgQEAKLSNpbmNsdWRlICJwcmVjb21waWxlZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykg
MjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
Ly8gU2hhZGVyRXhlY3V0YWJsZTExLmNwcDogSW1wbGVtZW50cyBhIEQzRDExLXNwZWNpZmljIGNs
YXNzIHRvIGNvbnRhaW4gc2hhZGVyCi0vLyBleGVjdXRhYmxlIGltcGxlbWVudGF0aW9uIGRldGFp
bHMuCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvU2hhZGVyRXhlY3V0YWJsZTExLmgi
Ci0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLVNoYWRl
ckV4ZWN1dGFibGUxMTo6U2hhZGVyRXhlY3V0YWJsZTExKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBz
aXplX3QgbGVuZ3RoLCBJRDNEMTFQaXhlbFNoYWRlciAqZXhlY3V0YWJsZSkKLSAgICA6IFNoYWRl
ckV4ZWN1dGFibGUoZnVuY3Rpb24sIGxlbmd0aCkKLXsKLSAgICBtUGl4ZWxFeGVjdXRhYmxlID0g
ZXhlY3V0YWJsZTsKLSAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgbUdlb21ldHJ5
RXhlY3V0YWJsZSA9IE5VTEw7Ci0KLSAgICBtQ29uc3RhbnRCdWZmZXIgPSBOVUxMOwotfQotCi1T
aGFkZXJFeGVjdXRhYmxlMTE6OlNoYWRlckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlv
biwgc2l6ZV90IGxlbmd0aCwgSUQzRDExVmVydGV4U2hhZGVyICpleGVjdXRhYmxlKQotICAgIDog
U2hhZGVyRXhlY3V0YWJsZShmdW5jdGlvbiwgbGVuZ3RoKQotewotICAgIG1WZXJ0ZXhFeGVjdXRh
YmxlID0gZXhlY3V0YWJsZTsKLSAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKLSAgICBtR2Vv
bWV0cnlFeGVjdXRhYmxlID0gTlVMTDsKLQotICAgIG1Db25zdGFudEJ1ZmZlciA9IE5VTEw7Ci19
Ci0KLVNoYWRlckV4ZWN1dGFibGUxMTo6U2hhZGVyRXhlY3V0YWJsZTExKGNvbnN0IHZvaWQgKmZ1
bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZXhlY3V0YWJsZSkK
LSAgICA6IFNoYWRlckV4ZWN1dGFibGUoZnVuY3Rpb24sIGxlbmd0aCkKLXsKLSAgICBtR2VvbWV0
cnlFeGVjdXRhYmxlID0gZXhlY3V0YWJsZTsKLSAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7
Ci0gICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7Ci0KLSAgICBtQ29uc3RhbnRCdWZmZXIgPSBO
VUxMOwotfQotCi1TaGFkZXJFeGVjdXRhYmxlMTE6On5TaGFkZXJFeGVjdXRhYmxlMTEoKQotewot
ICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSkKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhFeGVjdXRh
YmxlLT5SZWxlYXNlKCk7Ci0gICAgfQotICAgIGlmIChtUGl4ZWxFeGVjdXRhYmxlKQotICAgIHsK
LSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFzZSgpOwotICAgIH0KLSAgICBpZiAobUdl
b21ldHJ5RXhlY3V0YWJsZSkKLSAgICB7Ci0gICAgICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUtPlJl
bGVhc2UoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1Db25zdGFudEJ1ZmZlcikKLSAgICB7Ci0g
ICAgICAgIG1Db25zdGFudEJ1ZmZlci0+UmVsZWFzZSgpOwotICAgIH0KLX0KLQotU2hhZGVyRXhl
Y3V0YWJsZTExICpTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VTaGFkZXJFeGVjdXRhYmxlMTEoU2hh
ZGVyRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSkKLXsKLSAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQ
RShTaGFkZXJFeGVjdXRhYmxlMTEqLCBleGVjdXRhYmxlKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PFNoYWRlckV4ZWN1dGFibGUxMSo+KGV4ZWN1dGFibGUpOwotfQotCi1JRDNEMTFWZXJ0ZXhT
aGFkZXIgKlNoYWRlckV4ZWN1dGFibGUxMTo6Z2V0VmVydGV4U2hhZGVyKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbVZlcnRleEV4ZWN1dGFibGU7Ci19Ci0KLUlEM0QxMVBpeGVsU2hhZGVyICpTaGFk
ZXJFeGVjdXRhYmxlMTE6OmdldFBpeGVsU2hhZGVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVBp
eGVsRXhlY3V0YWJsZTsKLX0KLQotSUQzRDExR2VvbWV0cnlTaGFkZXIgKlNoYWRlckV4ZWN1dGFi
bGUxMTo6Z2V0R2VvbWV0cnlTaGFkZXIoKSBjb25zdAotewotICAgIHJldHVybiBtR2VvbWV0cnlF
eGVjdXRhYmxlOwotfQotCi1JRDNEMTFCdWZmZXIgKlNoYWRlckV4ZWN1dGFibGUxMTo6Z2V0Q29u
c3RhbnRCdWZmZXIoSUQzRDExRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGludCByZWdpc3RlckNv
dW50KQotewotICAgIGlmICghbUNvbnN0YW50QnVmZmVyICYmIHJlZ2lzdGVyQ291bnQgPiAwKQot
ICAgIHsKLSAgICAgICAgRDNEMTFfQlVGRkVSX0RFU0MgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlv
biA9IHswfTsKLSAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5CeXRlV2lkdGggPSBy
ZWdpc3RlckNvdW50ICogc2l6ZW9mKGZsb2F0WzRdKTsKLSAgICAgICAgY29uc3RhbnRCdWZmZXJE
ZXNjcmlwdGlvbi5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZTkFNSUM7Ci0gICAgICAgIGNvbnN0YW50
QnVmZmVyRGVzY3JpcHRpb24uQmluZEZsYWdzID0gRDNEMTFfQklORF9DT05TVEFOVF9CVUZGRVI7
Ci0gICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uQ1BVQWNjZXNzRmxhZ3MgPSBEM0Qx
MV9DUFVfQUNDRVNTX1dSSVRFOwotICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLk1p
c2NGbGFncyA9IDA7Ci0gICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uU3RydWN0dXJl
Qnl0ZVN0cmlkZSA9IDA7Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZUJ1ZmZlcigmY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbiwgTlVMTCwgJm1Db25zdGFudEJ1ZmZl
cik7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIG1Db25zdGFudEJ1ZmZlcjsKLX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvU2hhZGVyRXhlY3V0YWJsZTExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL1NoYWRlckV4ZWN1dGFibGUxMS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBjNmVjMWNmN2QyY2RhZWJhNDRkNGE1Yjg1NTc5ZDE4Mjk3YTQxZmFkLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvU2hhZGVyRXhlY3V0YWJsZTExLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIw
MTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBTaGFk
ZXJFeGVjdXRhYmxlMTEuaDogRGVmaW5lcyBhIEQzRDExLXNwZWNpZmljIGNsYXNzIHRvIGNvbnRh
aW4gc2hhZGVyCi0vLyBleGVjdXRhYmxlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuCi0KLSNpZm5k
ZWYgTElCR0xFU1YyX1JFTkRFUkVSX1NIQURFUkVYRUNVVEFCTEUxMV9IXwotI2RlZmluZSBMSUJH
TEVTVjJfUkVOREVSRVJfU0hBREVSRVhFQ1VUQUJMRTExX0hfCi0KLSNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvU2hhZGVyRXhlY3V0YWJsZS5oIgotCi1uYW1lc3BhY2UgcngKLXsKLQotY2xh
c3MgU2hhZGVyRXhlY3V0YWJsZTExIDogcHVibGljIFNoYWRlckV4ZWN1dGFibGUKLXsKLSAgcHVi
bGljOgotICAgIFNoYWRlckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90
IGxlbmd0aCwgSUQzRDExUGl4ZWxTaGFkZXIgKmV4ZWN1dGFibGUpOwotICAgIFNoYWRlckV4ZWN1
dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSUQzRDExVmVydGV4
U2hhZGVyICpleGVjdXRhYmxlKTsKLSAgICBTaGFkZXJFeGVjdXRhYmxlMTEoY29uc3Qgdm9pZCAq
ZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIElEM0QxMUdlb21ldHJ5U2hhZGVyICpleGVjdXRhYmxl
KTsKLQotICAgIHZpcnR1YWwgflNoYWRlckV4ZWN1dGFibGUxMSgpOwotCi0gICAgc3RhdGljIFNo
YWRlckV4ZWN1dGFibGUxMSAqbWFrZVNoYWRlckV4ZWN1dGFibGUxMShTaGFkZXJFeGVjdXRhYmxl
ICpleGVjdXRhYmxlKTsKLQotICAgIElEM0QxMVBpeGVsU2hhZGVyICpnZXRQaXhlbFNoYWRlcigp
IGNvbnN0OwotICAgIElEM0QxMVZlcnRleFNoYWRlciAqZ2V0VmVydGV4U2hhZGVyKCkgY29uc3Q7
Ci0gICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmdldEdlb21ldHJ5U2hhZGVyKCkgY29uc3Q7Ci0K
LSAgICBJRDNEMTFCdWZmZXIgKmdldENvbnN0YW50QnVmZmVyKElEM0QxMURldmljZSAqZGV2aWNl
LCB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJDb3VudCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oU2hhZGVyRXhlY3V0YWJsZTExKTsKLQotICAgIElEM0QxMVBpeGVs
U2hhZGVyICptUGl4ZWxFeGVjdXRhYmxlOwotICAgIElEM0QxMVZlcnRleFNoYWRlciAqbVZlcnRl
eEV4ZWN1dGFibGU7Ci0gICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKm1HZW9tZXRyeUV4ZWN1dGFi
bGU7Ci0KLSAgICBJRDNEMTFCdWZmZXIgKm1Db25zdGFudEJ1ZmZlcjsKLX07Ci0KLX0KLQotI2Vu
ZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9TSEFERVJFWEVDVVRBQkxFMTFfSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvU2hhZGVy
RXhlY3V0YWJsZTkuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlOS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDk4ODY4YTNmYmYzOGE1M2ZmNDlhODc1OTE2OGVlOTJlNDU3MGE5ODEuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlOS5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw2MCArMCwwIEBACi0jaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLS8vIFNoYWRlckV4ZWN1dGFibGU5LmNwcDogSW1wbGVtZW50cyBhIEQzRDkt
c3BlY2lmaWMgY2xhc3MgdG8gY29udGFpbiBzaGFkZXIKLS8vIGV4ZWN1dGFibGUgaW1wbGVtZW50
YXRpb24gZGV0YWlscy4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJFeGVj
dXRhYmxlOS5oIgotCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0KLW5hbWVzcGFjZSByeAot
ewotCi1TaGFkZXJFeGVjdXRhYmxlOTo6U2hhZGVyRXhlY3V0YWJsZTkoY29uc3Qgdm9pZCAqZnVu
Y3Rpb24sIHNpemVfdCBsZW5ndGgsIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqZXhlY3V0YWJsZSkK
LSAgICA6IFNoYWRlckV4ZWN1dGFibGUoZnVuY3Rpb24sIGxlbmd0aCkKLXsKLSAgICBtUGl4ZWxF
eGVjdXRhYmxlID0gZXhlY3V0YWJsZTsKLSAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7Ci19
Ci0KLVNoYWRlckV4ZWN1dGFibGU5OjpTaGFkZXJFeGVjdXRhYmxlOShjb25zdCB2b2lkICpmdW5j
dGlvbiwgc2l6ZV90IGxlbmd0aCwgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqZXhlY3V0YWJsZSkK
LSAgICA6IFNoYWRlckV4ZWN1dGFibGUoZnVuY3Rpb24sIGxlbmd0aCkKLXsKLSAgICBtVmVydGV4
RXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7Ci0gICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7Ci19
Ci0KLVNoYWRlckV4ZWN1dGFibGU5Ojp+U2hhZGVyRXhlY3V0YWJsZTkoKQotewotICAgIGlmICht
VmVydGV4RXhlY3V0YWJsZSkKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlLT5SZWxl
YXNlKCk7Ci0gICAgfQotICAgIGlmIChtUGl4ZWxFeGVjdXRhYmxlKQotICAgIHsKLSAgICAgICAg
bVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFzZSgpOwotICAgIH0KLX0KLQotU2hhZGVyRXhlY3V0YWJs
ZTkgKlNoYWRlckV4ZWN1dGFibGU5OjptYWtlU2hhZGVyRXhlY3V0YWJsZTkoU2hhZGVyRXhlY3V0
YWJsZSAqZXhlY3V0YWJsZSkKLXsKLSAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShTaGFkZXJF
eGVjdXRhYmxlOSosIGV4ZWN1dGFibGUpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2hhZGVy
RXhlY3V0YWJsZTkqPihleGVjdXRhYmxlKTsKLX0KLQotSURpcmVjdDNEVmVydGV4U2hhZGVyOSAq
U2hhZGVyRXhlY3V0YWJsZTk6OmdldFZlcnRleFNoYWRlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1WZXJ0ZXhFeGVjdXRhYmxlOwotfQotCi1JRGlyZWN0M0RQaXhlbFNoYWRlcjkgKlNoYWRlckV4
ZWN1dGFibGU5OjpnZXRQaXhlbFNoYWRlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1QaXhlbEV4
ZWN1dGFibGU7Ci19Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckV4
ZWN1dGFibGU5LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL1NoYWRlckV4ZWN1dGFibGU5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZh
MWU2YzI4NDRhOThiYTQyNjhmMGRkZjJiNDk0YTM2ZDI3NmM1YmYuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlOS5oCisrKyAvZGV2L251bGwKQEAg
LTEsMzkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0v
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gU2hhZGVyRXhlY3V0YWJsZTku
aDogRGVmaW5lcyBhIEQzRDktc3BlY2lmaWMgY2xhc3MgdG8gY29udGFpbiBzaGFkZXIKLS8vIGV4
ZWN1dGFibGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVO
REVSRVJfU0hBREVSRVhFQ1VUQUJMRTlfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1NI
QURFUkVYRUNVVEFCTEU5X0hfCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvU2hhZGVy
RXhlY3V0YWJsZS5oIgotCi1uYW1lc3BhY2UgcngKLXsKLQotY2xhc3MgU2hhZGVyRXhlY3V0YWJs
ZTkgOiBwdWJsaWMgU2hhZGVyRXhlY3V0YWJsZQotewotICBwdWJsaWM6Ci0gICAgU2hhZGVyRXhl
Y3V0YWJsZTkoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIElEaXJlY3QzRFBp
eGVsU2hhZGVyOSAqZXhlY3V0YWJsZSk7Ci0gICAgU2hhZGVyRXhlY3V0YWJsZTkoY29uc3Qgdm9p
ZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKmV4ZWN1
dGFibGUpOwotICAgIHZpcnR1YWwgflNoYWRlckV4ZWN1dGFibGU5KCk7Ci0KLSAgICBzdGF0aWMg
U2hhZGVyRXhlY3V0YWJsZTkgKm1ha2VTaGFkZXJFeGVjdXRhYmxlOShTaGFkZXJFeGVjdXRhYmxl
ICpleGVjdXRhYmxlKTsKLQotICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqZ2V0UGl4ZWxTaGFk
ZXIoKSBjb25zdDsKLSAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICpnZXRWZXJ0ZXhTaGFkZXIo
KSBjb25zdDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTaGFk
ZXJFeGVjdXRhYmxlOSk7Ci0KLSAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKm1QaXhlbEV4ZWN1
dGFibGU7Ci0gICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqbVZlcnRleEV4ZWN1dGFibGU7Ci19
OwotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfU0hBREVSRVhFQ1VUQUJMRTlf
SF8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1N3YXBDaGFpbjExLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvU3dhcENoYWluMTEuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjJjZmU0MzBkZGQ5YWFlYmRjMWM5YjM2
YjRjNWVjMWZkMzczZmQ1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvU3dh
cENoYWluMTEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzc1ICswLDAgQEAKLSNpbmNsdWRlICJw
cmVjb21waWxlZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0v
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gU3dhcENoYWluMTEuY3BwOiBJ
bXBsZW1lbnRzIGEgYmFjay1lbmQgc3BlY2lmaWMgY2xhc3MgZm9yIHRoZSBEM0QxMSBzd2FwIGNo
YWluLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1N3YXBDaGFpbjExLmgiCi0KLSNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXIxMV91dGlscy5oIgotI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlcjExLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2gxMXZzLmgiCi0jaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhMTFwcy5oIgot
Ci1uYW1lc3BhY2UgcngKLXsKLQotU3dhcENoYWluMTE6OlN3YXBDaGFpbjExKFJlbmRlcmVyMTEg
KnJlbmRlcmVyLCBIV05EIHdpbmRvdywgSEFORExFIHNoYXJlSGFuZGxlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMZW51bSBiYWNrQnVmZmVyRm9ybWF0LCBHTGVudW0gZGVwdGhCdWZmZXJG
b3JtYXQpCi0gICAgOiBtUmVuZGVyZXIocmVuZGVyZXIpLCBTd2FwQ2hhaW4od2luZG93LCBzaGFy
ZUhhbmRsZSwgYmFja0J1ZmZlckZvcm1hdCwgZGVwdGhCdWZmZXJGb3JtYXQpCi17Ci0gICAgbVN3
YXBDaGFpbiA9IE5VTEw7Ci0gICAgbUJhY2tCdWZmZXJUZXh0dXJlID0gTlVMTDsKLSAgICBtQmFj
a0J1ZmZlclJUVmlldyA9IE5VTEw7Ci0gICAgbU9mZnNjcmVlblRleHR1cmUgPSBOVUxMOwotICAg
IG1PZmZzY3JlZW5SVFZpZXcgPSBOVUxMOwotICAgIG1PZmZzY3JlZW5TUlZpZXcgPSBOVUxMOwot
ICAgIG1EZXB0aFN0ZW5jaWxUZXh0dXJlID0gTlVMTDsKLSAgICBtRGVwdGhTdGVuY2lsRFNWaWV3
ID0gTlVMTDsKLSAgICBtUXVhZFZCID0gTlVMTDsKLSAgICBtUGFzc1Rocm91Z2hTYW1wbGVyID0g
TlVMTDsKLSAgICBtUGFzc1Rocm91Z2hJTCA9IE5VTEw7Ci0gICAgbVBhc3NUaHJvdWdoVlMgPSBO
VUxMOwotICAgIG1QYXNzVGhyb3VnaFBTID0gTlVMTDsKLSAgICBtV2lkdGggPSAtMTsKLSAgICBt
SGVpZ2h0ID0gLTE7Ci0gICAgbVN3YXBJbnRlcnZhbCA9IDA7Ci0gICAgbUFwcENyZWF0ZWRTaGFy
ZUhhbmRsZSA9IG1TaGFyZUhhbmRsZSAhPSBOVUxMOwotICAgIG1QYXNzVGhyb3VnaFJlc291cmNl
c0luaXQgPSBmYWxzZTsKLX0KLQotU3dhcENoYWluMTE6On5Td2FwQ2hhaW4xMSgpCi17Ci0gICAg
cmVsZWFzZSgpOwotfQotCi12b2lkIFN3YXBDaGFpbjExOjpyZWxlYXNlKCkKLXsKLSAgICBpZiAo
bVN3YXBDaGFpbikKLSAgICB7Ci0gICAgICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsKLSAgICAg
ICAgbVN3YXBDaGFpbiA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1CYWNrQnVmZmVyVGV4dHVy
ZSkKLSAgICB7Ci0gICAgICAgIG1CYWNrQnVmZmVyVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAg
ICBtQmFja0J1ZmZlclRleHR1cmUgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtQmFja0J1ZmZl
clJUVmlldykKLSAgICB7Ci0gICAgICAgIG1CYWNrQnVmZmVyUlRWaWV3LT5SZWxlYXNlKCk7Ci0g
ICAgICAgIG1CYWNrQnVmZmVyUlRWaWV3ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobU9mZnNj
cmVlblRleHR1cmUpCi0gICAgewotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+UmVsZWFzZSgp
OwotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1P
ZmZzY3JlZW5SVFZpZXcpCi0gICAgewotICAgICAgICBtT2Zmc2NyZWVuUlRWaWV3LT5SZWxlYXNl
KCk7Ci0gICAgICAgIG1PZmZzY3JlZW5SVFZpZXcgPSBOVUxMOwotICAgIH0KLQotICAgIGlmICht
T2Zmc2NyZWVuU1JWaWV3KQotICAgIHsKLSAgICAgICAgbU9mZnNjcmVlblNSVmlldy0+UmVsZWFz
ZSgpOwotICAgICAgICBtT2Zmc2NyZWVuU1JWaWV3ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAo
bURlcHRoU3RlbmNpbFRleHR1cmUpCi0gICAgewotICAgICAgICBtRGVwdGhTdGVuY2lsVGV4dHVy
ZS0+UmVsZWFzZSgpOwotICAgICAgICBtRGVwdGhTdGVuY2lsVGV4dHVyZSA9IE5VTEw7Ci0gICAg
fQotCi0gICAgaWYgKG1EZXB0aFN0ZW5jaWxEU1ZpZXcpCi0gICAgewotICAgICAgICBtRGVwdGhT
dGVuY2lsRFNWaWV3LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxEU1ZpZXcgPSBO
VUxMOwotICAgIH0KLQotICAgIGlmIChtUXVhZFZCKQotICAgIHsKLSAgICAgICAgbVF1YWRWQi0+
UmVsZWFzZSgpOwotICAgICAgICBtUXVhZFZCID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVBh
c3NUaHJvdWdoU2FtcGxlcikKLSAgICB7Ci0gICAgICAgIG1QYXNzVGhyb3VnaFNhbXBsZXItPlJl
bGVhc2UoKTsKLSAgICAgICAgbVBhc3NUaHJvdWdoU2FtcGxlciA9IE5VTEw7Ci0gICAgfQotCi0g
ICAgaWYgKG1QYXNzVGhyb3VnaElMKQotICAgIHsKLSAgICAgICAgbVBhc3NUaHJvdWdoSUwtPlJl
bGVhc2UoKTsKLSAgICAgICAgbVBhc3NUaHJvdWdoSUwgPSBOVUxMOwotICAgIH0KLQotICAgIGlm
IChtUGFzc1Rocm91Z2hWUykKLSAgICB7Ci0gICAgICAgIG1QYXNzVGhyb3VnaFZTLT5SZWxlYXNl
KCk7Ci0gICAgICAgIG1QYXNzVGhyb3VnaFZTID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVBh
c3NUaHJvdWdoUFMpCi0gICAgewotICAgICAgICBtUGFzc1Rocm91Z2hQUy0+UmVsZWFzZSgpOwot
ICAgICAgICBtUGFzc1Rocm91Z2hQUyA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKCFtQXBwQ3Jl
YXRlZFNoYXJlSGFuZGxlKQotICAgIHsKLSAgICAgICAgbVNoYXJlSGFuZGxlID0gTlVMTDsKLSAg
ICB9Ci19Ci0KLXZvaWQgU3dhcENoYWluMTE6OnJlbGVhc2VPZmZzY3JlZW5UZXh0dXJlKCkKLXsK
LSAgICBpZiAobU9mZnNjcmVlblRleHR1cmUpCi0gICAgewotICAgICAgICBtT2Zmc2NyZWVuVGV4
dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7Ci0gICAg
fQotCi0gICAgaWYgKG1PZmZzY3JlZW5SVFZpZXcpCi0gICAgewotICAgICAgICBtT2Zmc2NyZWVu
UlRWaWV3LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1PZmZzY3JlZW5SVFZpZXcgPSBOVUxMOwotICAg
IH0KLQotICAgIGlmIChtT2Zmc2NyZWVuU1JWaWV3KQotICAgIHsKLSAgICAgICAgbU9mZnNjcmVl
blNSVmlldy0+UmVsZWFzZSgpOwotICAgICAgICBtT2Zmc2NyZWVuU1JWaWV3ID0gTlVMTDsKLSAg
ICB9Ci0KLSAgICBpZiAobURlcHRoU3RlbmNpbFRleHR1cmUpCi0gICAgewotICAgICAgICBtRGVw
dGhTdGVuY2lsVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICBtRGVwdGhTdGVuY2lsVGV4dHVy
ZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1EZXB0aFN0ZW5jaWxEU1ZpZXcpCi0gICAgewot
ICAgICAgICBtRGVwdGhTdGVuY2lsRFNWaWV3LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EZXB0aFN0
ZW5jaWxEU1ZpZXcgPSBOVUxMOwotICAgIH0KLX0KLQotRUdMaW50IFN3YXBDaGFpbjExOjpyZXNl
dE9mZnNjcmVlblRleHR1cmUoaW50IGJhY2tidWZmZXJXaWR0aCwgaW50IGJhY2tidWZmZXJIZWln
aHQpCi17Ci0gICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgp
OwotCi0gICAgQVNTRVJUKGRldmljZSAhPSBOVUxMKTsKLQotICAgIC8vIEQzRDExIGRvZXMgbm90
IGFsbG93IHplcm8gc2l6ZSB0ZXh0dXJlcwotICAgIEFTU0VSVChiYWNrYnVmZmVyV2lkdGggPj0g
MSk7Ci0gICAgQVNTRVJUKGJhY2tidWZmZXJIZWlnaHQgPj0gMSk7Ci0KLSAgICAvLyBQcmVzZXJ2
ZSB0aGUgcmVuZGVyIHRhcmdldCBjb250ZW50Ci0gICAgSUQzRDExVGV4dHVyZTJEICpwcmV2aW91
c09mZnNjcmVlblRleHR1cmUgPSBtT2Zmc2NyZWVuVGV4dHVyZTsKLSAgICBpZiAocHJldmlvdXNP
ZmZzY3JlZW5UZXh0dXJlKQotICAgIHsKLSAgICAgICAgcHJldmlvdXNPZmZzY3JlZW5UZXh0dXJl
LT5BZGRSZWYoKTsKLSAgICB9Ci0gICAgY29uc3QgaW50IHByZXZpb3VzV2lkdGggPSBtV2lkdGg7
Ci0gICAgY29uc3QgaW50IHByZXZpb3VzSGVpZ2h0ID0gbUhlaWdodDsKLQotICAgIHJlbGVhc2VP
ZmZzY3JlZW5UZXh0dXJlKCk7Ci0KLSAgICAvLyBJZiB0aGUgYXBwIHBhc3NlZCBpbiBhIHNoYXJl
IGhhbmRsZSwgb3BlbiB0aGUgcmVzb3VyY2UKLSAgICAvLyBTZWUgRUdMX0FOR0xFX2QzZF9zaGFy
ZV9oYW5kbGVfY2xpZW50X2J1ZmZlcgotICAgIGlmIChtQXBwQ3JlYXRlZFNoYXJlSGFuZGxlKQot
ICAgIHsKLSAgICAgICAgSUQzRDExUmVzb3VyY2UgKnRlbXBSZXNvdXJjZTExOwotICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IGRldmljZS0+T3BlblNoYXJlZFJlc291cmNlKG1TaGFyZUhhbmRsZSwg
X191dWlkb2YoSUQzRDExUmVzb3VyY2UpLCAodm9pZCoqKSZ0ZW1wUmVzb3VyY2UxMSk7Ci0KLSAg
ICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkZh
aWxlZCB0byBvcGVuIHRoZSBzd2FwIGNoYWluIHBidWZmZXIgc2hhcmUgaGFuZGxlOiAlMDhsWCIs
IHJlc3VsdCk7Ci0gICAgICAgICAgICByZWxlYXNlKCk7Ci0gICAgICAgICAgICByZXR1cm4gRUdM
X0JBRF9QQVJBTUVURVI7Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHQgPSB0ZW1wUmVzb3Vy
Y2UxMS0+UXVlcnlJbnRlcmZhY2UoX191dWlkb2YoSUQzRDExVGV4dHVyZTJEKSwgKHZvaWQqKikm
bU9mZnNjcmVlblRleHR1cmUpOwotICAgICAgICB0ZW1wUmVzb3VyY2UxMS0+UmVsZWFzZSgpOwot
Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJS
KCJGYWlsZWQgdG8gcXVlcnkgdGV4dHVyZTJkIGludGVyZmFjZSBpbiBwYnVmZmVyIHNoYXJlIGhh
bmRsZTogJTA4bFgiLCByZXN1bHQpOwotICAgICAgICAgICAgcmVsZWFzZSgpOwotICAgICAgICAg
ICAgcmV0dXJuIEVHTF9CQURfUEFSQU1FVEVSOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVmFs
aWRhdGUgb2Zmc2NyZWVuIHRleHR1cmUgcGFyYW1ldGVycwotICAgICAgICBEM0QxMV9URVhUVVJF
MkRfREVTQyBvZmZzY3JlZW5UZXh0dXJlRGVzYyA9IHswfTsKLSAgICAgICAgbU9mZnNjcmVlblRl
eHR1cmUtPkdldERlc2MoJm9mZnNjcmVlblRleHR1cmVEZXNjKTsKLQotICAgICAgICBpZiAob2Zm
c2NyZWVuVGV4dHVyZURlc2MuV2lkdGggIT0gKFVJTlQpYmFja2J1ZmZlcldpZHRoCi0gICAgICAg
ICAgICB8fCBvZmZzY3JlZW5UZXh0dXJlRGVzYy5IZWlnaHQgIT0gKFVJTlQpYmFja2J1ZmZlckhl
aWdodAotICAgICAgICAgICAgfHwgb2Zmc2NyZWVuVGV4dHVyZURlc2MuRm9ybWF0ICE9IGdsX2Qz
ZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0KQotICAgICAg
ICAgICAgfHwgb2Zmc2NyZWVuVGV4dHVyZURlc2MuTWlwTGV2ZWxzICE9IDEKLSAgICAgICAgICAg
IHx8IG9mZnNjcmVlblRleHR1cmVEZXNjLkFycmF5U2l6ZSAhPSAxKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBFUlIoIkludmFsaWQgdGV4dHVyZSBwYXJhbWV0ZXJzIGluIHRoZSBzaGFyZWQgb2Zm
c2NyZWVuIHRleHR1cmUgcGJ1ZmZlciIpOwotICAgICAgICAgICAgcmVsZWFzZSgpOwotICAgICAg
ICAgICAgcmV0dXJuIEVHTF9CQURfUEFSQU1FVEVSOwotICAgICAgICB9Ci0gICAgfQotICAgIGVs
c2UKLSAgICB7Ci0gICAgICAgIGNvbnN0IGJvb2wgdXNlU2hhcmVkUmVzb3VyY2UgPSAhbVdpbmRv
dyAmJiBtUmVuZGVyZXItPmdldFNoYXJlSGFuZGxlU3VwcG9ydCgpOwotCi0gICAgICAgIEQzRDEx
X1RFWFRVUkUyRF9ERVNDIG9mZnNjcmVlblRleHR1cmVEZXNjID0gezB9OwotICAgICAgICBvZmZz
Y3JlZW5UZXh0dXJlRGVzYy5XaWR0aCA9IGJhY2tidWZmZXJXaWR0aDsKLSAgICAgICAgb2Zmc2Ny
ZWVuVGV4dHVyZURlc2MuSGVpZ2h0ID0gYmFja2J1ZmZlckhlaWdodDsKLSAgICAgICAgb2Zmc2Ny
ZWVuVGV4dHVyZURlc2MuRm9ybWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3Jt
YXQobUJhY2tCdWZmZXJGb3JtYXQpOwotICAgICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5NaXBM
ZXZlbHMgPSAxOwotICAgICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5BcnJheVNpemUgPSAxOwot
ICAgICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gMTsKLSAgICAg
ICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKLSAgICAgICAg
b2Zmc2NyZWVuVGV4dHVyZURlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOwotICAgICAg
ICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1JFTkRFUl9UQVJH
RVQgfCBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRTsKLSAgICAgICAgb2Zmc2NyZWVuVGV4dHVy
ZURlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOwotICAgICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5N
aXNjRmxhZ3MgPSB1c2VTaGFyZWRSZXNvdXJjZSA/IEQzRDExX1JFU09VUkNFX01JU0NfU0hBUkVE
IDogMDsKLQotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJE
KCZvZmZzY3JlZW5UZXh0dXJlRGVzYywgTlVMTCwgJm1PZmZzY3JlZW5UZXh0dXJlKTsKLQotICAg
ICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiQ291
bGQgbm90IGNyZWF0ZSBvZmZzY3JlZW4gdGV4dHVyZTogJTA4bFgiLCByZXN1bHQpOwotICAgICAg
ICAgICAgcmVsZWFzZSgpOwotCi0gICAgICAgICAgICBpZiAoZDNkMTE6OmlzRGV2aWNlTG9zdEVy
cm9yKHJlc3VsdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEVHTF9D
T05URVhUX0xPU1Q7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEVHTF9CQURfQUxMT0M7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1PZmZzY3JlZW5UZXh0
dXJlLCAiT2Zmc2NyZWVuIHRleHR1cmUiKTsKLQotICAgICAgICAvLyBFR0xfQU5HTEVfc3VyZmFj
ZV9kM2RfdGV4dHVyZV8yZF9zaGFyZV9oYW5kbGUgcmVxdWlyZXMgdGhhdCB3ZSBzdG9yZSBhIHNo
YXJlIGhhbmRsZSBmb3IgdGhlIGNsaWVudAotICAgICAgICBpZiAodXNlU2hhcmVkUmVzb3VyY2Up
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIElEWEdJUmVzb3VyY2UgKm9mZnNjcmVlblRleHR1cmVS
ZXNvdXJjZSA9IE5VTEw7Ci0gICAgICAgICAgICByZXN1bHQgPSBtT2Zmc2NyZWVuVGV4dHVyZS0+
UXVlcnlJbnRlcmZhY2UoX191dWlkb2YoSURYR0lSZXNvdXJjZSksICh2b2lkKiopJm9mZnNjcmVl
blRleHR1cmVSZXNvdXJjZSk7Ci0KLSAgICAgICAgICAgIC8vIEZhbGwgYmFjayB0byBubyBzaGFy
ZSBoYW5kbGUgb24gZmFpbHVyZQotICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigiQ291bGQgbm90IHF1ZXJ5IG9mZnNjcmVl
biB0ZXh0dXJlIHJlc291cmNlOiAlMDhsWCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gb2Zm
c2NyZWVuVGV4dHVyZVJlc291cmNlLT5HZXRTaGFyZWRIYW5kbGUoJm1TaGFyZUhhbmRsZSk7Ci0g
ICAgICAgICAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZVJlc291cmNlLT5SZWxlYXNlKCk7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBtU2hhcmVIYW5kbGUgPSBOVUxMOwotICAgICAgICAgICAgICAgICAg
ICBFUlIoIkNvdWxkIG5vdCBnZXQgb2Zmc2NyZWVuIHRleHR1cmUgc2hhcmVkIGhhbmRsZTogJTA4
bFgiLCByZXN1bHQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLSAgICAgICAgCi0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJl
bmRlclRhcmdldFZpZXcobU9mZnNjcmVlblRleHR1cmUsIE5VTEwsICZtT2Zmc2NyZWVuUlRWaWV3
KTsKLQotICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgZDNkMTE6OlNldERlYnVn
TmFtZShtT2Zmc2NyZWVuUlRWaWV3LCAiT2Zmc2NyZWVuIHJlbmRlciB0YXJnZXQiKTsKLQotICAg
IHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KG1PZmZzY3JlZW5UZXh0
dXJlLCBOVUxMLCAmbU9mZnNjcmVlblNSVmlldyk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1
bHQpKTsKLSAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1PZmZzY3JlZW5TUlZpZXcsICJPZmZzY3Jl
ZW4gc2hhZGVyIHJlc291cmNlIik7Ci0KLSAgICBpZiAobURlcHRoQnVmZmVyRm9ybWF0ICE9IEdM
X05PTkUpCi0gICAgewotICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXB0aFN0ZW5jaWxE
ZXNjID0gezB9OwotICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLldpZHRoID0gYmFja2J1ZmZlcldp
ZHRoOwotICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLkhlaWdodCA9IGJhY2tidWZmZXJIZWlnaHQ7
Ci0gICAgICAgIGRlcHRoU3RlbmNpbERlc2MuRm9ybWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRSZW5k
ZXJidWZmZXJGb3JtYXQobURlcHRoQnVmZmVyRm9ybWF0KTsKLSAgICAgICAgZGVwdGhTdGVuY2ls
RGVzYy5NaXBMZXZlbHMgPSAxOwotICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLkFycmF5U2l6ZSA9
IDE7Ci0gICAgICAgIGRlcHRoU3RlbmNpbERlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7Ci0gICAg
ICAgIGRlcHRoU3RlbmNpbERlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKLSAgICAgICAgZGVw
dGhTdGVuY2lsRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7Ci0gICAgICAgIGRlcHRo
U3RlbmNpbERlc2MuQmluZEZsYWdzID0gRDNEMTFfQklORF9ERVBUSF9TVEVOQ0lMOwotICAgICAg
ICBkZXB0aFN0ZW5jaWxEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKLSAgICAgICAgZGVwdGhTdGVu
Y2lsRGVzYy5NaXNjRmxhZ3MgPSAwOwotCi0gICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRl
VGV4dHVyZTJEKCZkZXB0aFN0ZW5jaWxEZXNjLCBOVUxMLCAmbURlcHRoU3RlbmNpbFRleHR1cmUp
OwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVS
UigiQ291bGQgbm90IGNyZWF0ZSBkZXB0aHN0ZW5jaWwgc3VyZmFjZSBmb3IgbmV3IHN3YXAgY2hh
aW46IDB4JTA4WCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZWxlYXNlKCk7Ci0KLSAgICAgICAg
ICAgIGlmIChkM2QxMTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gRUdMX0NPTlRFWFRfTE9TVDsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
RUdMX0JBRF9BTExPQzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBkM2QxMTo6
U2V0RGVidWdOYW1lKG1EZXB0aFN0ZW5jaWxUZXh0dXJlLCAiRGVwdGggc3RlbmNpbCB0ZXh0dXJl
Iik7Ci0KLSAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxWaWV3KG1E
ZXB0aFN0ZW5jaWxUZXh0dXJlLCBOVUxMLCAmbURlcHRoU3RlbmNpbERTVmlldyk7Ci0gICAgICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUo
bURlcHRoU3RlbmNpbERTVmlldywgIkRlcHRoIHN0ZW5jaWwgdmlldyIpOwotICAgIH0KLQotICAg
IG1XaWR0aCA9IGJhY2tidWZmZXJXaWR0aDsKLSAgICBtSGVpZ2h0ID0gYmFja2J1ZmZlckhlaWdo
dDsKLQotICAgIGlmIChwcmV2aW91c09mZnNjcmVlblRleHR1cmUgIT0gTlVMTCkKLSAgICB7Ci0g
ICAgICAgIEQzRDExX0JPWCBzb3VyY2VCb3ggPSB7MH07Ci0gICAgICAgIHNvdXJjZUJveC5sZWZ0
ID0gMDsKLSAgICAgICAgc291cmNlQm94LnJpZ2h0ID0gc3RkOjptaW4ocHJldmlvdXNXaWR0aCwg
bVdpZHRoKTsKLSAgICAgICAgc291cmNlQm94LnRvcCA9IHN0ZDo6bWF4KHByZXZpb3VzSGVpZ2h0
IC0gbUhlaWdodCwgMCk7Ci0gICAgICAgIHNvdXJjZUJveC5ib3R0b20gPSBwcmV2aW91c0hlaWdo
dDsKLSAgICAgICAgc291cmNlQm94LmZyb250ID0gMDsKLSAgICAgICAgc291cmNlQm94LmJhY2sg
PSAxOwotCi0gICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmRldmljZUNvbnRleHQgPSBtUmVu
ZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKLSAgICAgICAgY29uc3QgaW50IHlvZmZzZXQgPSBz
dGQ6Om1heChtSGVpZ2h0IC0gcHJldmlvdXNIZWlnaHQsIDApOwotICAgICAgICBkZXZpY2VDb250
ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24obU9mZnNjcmVlblRleHR1cmUsIDAsIDAsIHlvZmZz
ZXQsIDAsIHByZXZpb3VzT2Zmc2NyZWVuVGV4dHVyZSwgMCwgJnNvdXJjZUJveCk7Ci0KLSAgICAg
ICAgcHJldmlvdXNPZmZzY3JlZW5UZXh0dXJlLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgaWYgKG1T
d2FwQ2hhaW4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3YXBSZWN0KDAsIDAsIG1XaWR0aCwg
bUhlaWdodCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gRUdMX1NVQ0NFU1M7Ci19
Ci0KLUVHTGludCBTd2FwQ2hhaW4xMTo6cmVzaXplKEVHTGludCBiYWNrYnVmZmVyV2lkdGgsIEVH
TGludCBiYWNrYnVmZmVySGVpZ2h0KQotewotICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJl
bmRlcmVyLT5nZXREZXZpY2UoKTsKLQotICAgIGlmIChkZXZpY2UgPT0gTlVMTCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBFR0xfQkFEX0FDQ0VTUzsKLSAgICB9Ci0KLSAgICAvLyBDYW4gb25seSBj
YWxsIHJlc2l6ZSBpZiB3ZSBoYXZlIGFscmVhZHkgY3JlYXRlZCBvdXIgc3dhcCBidWZmZXIgYW5k
IHJlc291cmNlcwotICAgIEFTU0VSVChtU3dhcENoYWluICYmIG1CYWNrQnVmZmVyVGV4dHVyZSAm
JiBtQmFja0J1ZmZlclJUVmlldyk7Ci0KLSAgICBpZiAobUJhY2tCdWZmZXJUZXh0dXJlKQotICAg
IHsKLSAgICAgICAgbUJhY2tCdWZmZXJUZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1CYWNr
QnVmZmVyVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1CYWNrQnVmZmVyUlRWaWV3
KQotICAgIHsKLSAgICAgICAgbUJhY2tCdWZmZXJSVFZpZXctPlJlbGVhc2UoKTsKLSAgICAgICAg
bUJhY2tCdWZmZXJSVFZpZXcgPSBOVUxMOwotICAgIH0KLQotICAgIC8vIFJlc2l6ZSBzd2FwIGNo
YWluCi0gICAgRFhHSV9GT1JNQVQgYmFja2J1ZmZlckRYR0lGb3JtYXQgPSBnbF9kM2QxMTo6Q29u
dmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCk7Ci0gICAgSFJFU1VMVCBy
ZXN1bHQgPSBtU3dhcENoYWluLT5SZXNpemVCdWZmZXJzKDIsIGJhY2tidWZmZXJXaWR0aCwgYmFj
a2J1ZmZlckhlaWdodCwgYmFja2J1ZmZlckRYR0lGb3JtYXQsIDApOwotCi0gICAgaWYgKEZBSUxF
RChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgRVJSKCJFcnJvciByZXNpemluZyBzd2FwIGNoYWlu
IGJ1ZmZlcnM6IDB4JTA4WCIsIHJlc3VsdCk7Ci0gICAgICAgIHJlbGVhc2UoKTsKLQotICAgICAg
ICBpZiAoZDNkMTE6OmlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBFR0xfQ09OVEVYVF9MT1NUOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEVHTF9CQURfQUxMT0M7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXN1bHQgPSBtU3dhcENoYWluLT5HZXRCdWZmZXIoMCwgX191dWlkb2Yo
SUQzRDExVGV4dHVyZTJEKSwgKExQVk9JRCopJm1CYWNrQnVmZmVyVGV4dHVyZSk7Ci0gICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAg
ewotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1CYWNrQnVmZmVyVGV4dHVyZSwgIkJhY2sg
YnVmZmVyIHRleHR1cmUiKTsKLSAgICB9Ci0KLSAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJl
bmRlclRhcmdldFZpZXcobUJhY2tCdWZmZXJUZXh0dXJlLCBOVUxMLCAmbUJhY2tCdWZmZXJSVFZp
ZXcpOwotICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgaWYgKFNVQ0NFRURFRChy
ZXN1bHQpKQotICAgIHsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQmFja0J1ZmZlclJU
VmlldywgIkJhY2sgYnVmZmVyIHJlbmRlciB0YXJnZXQiKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
cmVzZXRPZmZzY3JlZW5UZXh0dXJlKGJhY2tidWZmZXJXaWR0aCwgYmFja2J1ZmZlckhlaWdodCk7
Ci19Ci0KLUVHTGludCBTd2FwQ2hhaW4xMTo6cmVzZXQoaW50IGJhY2tidWZmZXJXaWR0aCwgaW50
IGJhY2tidWZmZXJIZWlnaHQsIEVHTGludCBzd2FwSW50ZXJ2YWwpCi17Ci0gICAgSUQzRDExRGV2
aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0gICAgaWYgKGRldmljZSA9
PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEVHTF9CQURfQUNDRVNTOwotICAgIH0KLQot
ICAgIC8vIFJlbGVhc2Ugc3BlY2lmaWMgcmVzb3VyY2VzIHRvIGZyZWUgdXAgbWVtb3J5IGZvciB0
aGUgbmV3IHJlbmRlciB0YXJnZXQsIHdoaWxlIHRoZQotICAgIC8vIG9sZCByZW5kZXIgdGFyZ2V0
IHN0aWxsIGV4aXN0cyBmb3IgdGhlIHB1cnBvc2Ugb2YgcHJlc2VydmluZyBpdHMgY29udGVudHMu
Ci0gICAgaWYgKG1Td2FwQ2hhaW4pCi0gICAgewotICAgICAgICBtU3dhcENoYWluLT5SZWxlYXNl
KCk7Ci0gICAgICAgIG1Td2FwQ2hhaW4gPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtQmFja0J1
ZmZlclRleHR1cmUpCi0gICAgewotICAgICAgICBtQmFja0J1ZmZlclRleHR1cmUtPlJlbGVhc2Uo
KTsKLSAgICAgICAgbUJhY2tCdWZmZXJUZXh0dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAo
bUJhY2tCdWZmZXJSVFZpZXcpCi0gICAgewotICAgICAgICBtQmFja0J1ZmZlclJUVmlldy0+UmVs
ZWFzZSgpOwotICAgICAgICBtQmFja0J1ZmZlclJUVmlldyA9IE5VTEw7Ci0gICAgfQotCi0gICAg
bVN3YXBJbnRlcnZhbCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oc3dhcEludGVydmFsKTsK
LSAgICBpZiAobVN3YXBJbnRlcnZhbCA+IDQpCi0gICAgewotICAgICAgICAvLyBJRFhHSVN3YXBD
aGFpbjo6UHJlc2VudCBkb2N1bWVudGF0aW9uIHN0YXRlcyB0aGF0IHZhbGlkIHN5bmMgaW50ZXJ2
YWxzIGFyZSBpbiB0aGUgWzAsNF0gcmFuZ2UKLSAgICAgICAgcmV0dXJuIEVHTF9CQURfUEFSQU1F
VEVSOwotICAgIH0KLQotICAgIC8vIEVHTCBhbGxvd3MgY3JlYXRpbmcgYSBzdXJmYWNlIHdpdGgg
MHgwIGRpbWVuc2lvbiwgaG93ZXZlciwgRFhHSSBkb2VzIG5vdCBsaWtlIDB4MCBzd2FwY2hhaW5z
Ci0gICAgaWYgKGJhY2tidWZmZXJXaWR0aCA8IDEgfHwgYmFja2J1ZmZlckhlaWdodCA8IDEpCi0g
ICAgewotICAgICAgICByZWxlYXNlT2Zmc2NyZWVuVGV4dHVyZSgpOwotICAgICAgICByZXR1cm4g
RUdMX1NVQ0NFU1M7Ci0gICAgfQotCi0gICAgaWYgKG1XaW5kb3cpCi0gICAgewotICAgICAgICBJ
RFhHSUZhY3RvcnkgKmZhY3RvcnkgPSBtUmVuZGVyZXItPmdldER4Z2lGYWN0b3J5KCk7Ci0KLSAg
ICAgICAgRFhHSV9TV0FQX0NIQUlOX0RFU0Mgc3dhcENoYWluRGVzYyA9IHswfTsKLSAgICAgICAg
c3dhcENoYWluRGVzYy5CdWZmZXJDb3VudCA9IDI7Ci0gICAgICAgIHN3YXBDaGFpbkRlc2MuQnVm
ZmVyRGVzYy5Gb3JtYXQgPSBnbF9kM2QxMTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtQmFj
a0J1ZmZlckZvcm1hdCk7Ci0gICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyRGVzYy5XaWR0aCA9
IGJhY2tidWZmZXJXaWR0aDsKLSAgICAgICAgc3dhcENoYWluRGVzYy5CdWZmZXJEZXNjLkhlaWdo
dCA9IGJhY2tidWZmZXJIZWlnaHQ7Ci0gICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyRGVzYy5T
Y2FsaW5nID0gRFhHSV9NT0RFX1NDQUxJTkdfVU5TUEVDSUZJRUQ7Ci0gICAgICAgIHN3YXBDaGFp
bkRlc2MuQnVmZmVyRGVzYy5TY2FubGluZU9yZGVyaW5nID0gRFhHSV9NT0RFX1NDQU5MSU5FX09S
REVSX1VOU1BFQ0lGSUVEOwotICAgICAgICBzd2FwQ2hhaW5EZXNjLkJ1ZmZlckRlc2MuUmVmcmVz
aFJhdGUuTnVtZXJhdG9yID0gMDsKLSAgICAgICAgc3dhcENoYWluRGVzYy5CdWZmZXJEZXNjLlJl
ZnJlc2hSYXRlLkRlbm9taW5hdG9yID0gMTsKLSAgICAgICAgc3dhcENoYWluRGVzYy5CdWZmZXJV
c2FnZSA9IERYR0lfVVNBR0VfUkVOREVSX1RBUkdFVF9PVVRQVVQ7Ci0gICAgICAgIHN3YXBDaGFp
bkRlc2MuRmxhZ3MgPSAwOwotICAgICAgICBzd2FwQ2hhaW5EZXNjLk91dHB1dFdpbmRvdyA9IG1X
aW5kb3c7Ci0gICAgICAgIHN3YXBDaGFpbkRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7Ci0gICAg
ICAgIHN3YXBDaGFpbkRlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKLSAgICAgICAgc3dhcENo
YWluRGVzYy5XaW5kb3dlZCA9IFRSVUU7Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBmYWN0
b3J5LT5DcmVhdGVTd2FwQ2hhaW4oZGV2aWNlLCAmc3dhcENoYWluRGVzYywgJm1Td2FwQ2hhaW4p
OwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAg
RVJSKCJDb3VsZCBub3QgY3JlYXRlIGFkZGl0aW9uYWwgc3dhcCBjaGFpbnMgb3Igb2Zmc2NyZWVu
IHN1cmZhY2VzOiAlMDhsWCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZWxlYXNlKCk7Ci0KLSAg
ICAgICAgICAgIGlmIChkM2QxMTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gRUdMX0NPTlRFWFRfTE9TVDsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAv
LyBXZSBjYW5ub3QgY3JlYXRlIGEgc3dhcCBjaGFpbiBmb3IgYW4gSFdORCB0aGF0IGlzIG93bmVk
IGJ5IGEgZGlmZmVyZW50IHByb2Nlc3Mgb24gc29tZSB2ZXJzaW9ucyBvZgotICAgICAgICAgICAg
ICAgIC8vIHdpbmRvd3MKLSAgICAgICAgICAgICAgICBEV09SRCBjdXJyZW50UHJvY2Vzc0lkID0g
R2V0Q3VycmVudFByb2Nlc3NJZCgpOwotICAgICAgICAgICAgICAgIERXT1JEIHduZFByb2Nlc3NJ
ZDsKLSAgICAgICAgICAgICAgICBHZXRXaW5kb3dUaHJlYWRQcm9jZXNzSWQobVdpbmRvdywgJndu
ZFByb2Nlc3NJZCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY3VycmVudFByb2Nlc3NJZCAhPSB3
bmRQcm9jZXNzSWQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBFUlIo
IkNvdWxkIG5vdCBjcmVhdGUgc3dhcCBjaGFpbiwgd2luZG93IG93bmVkIGJ5IGRpZmZlcmVudCBw
cm9jZXNzIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBFR0xfQkFEX05BVElWRV9XSU5E
T1c7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBFR0xfQkFEX0FMTE9DOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJlc3VsdCA9
IG1Td2FwQ2hhaW4tPkdldEJ1ZmZlcigwLCBfX3V1aWRvZihJRDNEMTFUZXh0dXJlMkQpLCAoTFBW
T0lEKikmbUJhY2tCdWZmZXJUZXh0dXJlKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1
bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQmFja0J1ZmZlclRleHR1cmUsICJC
YWNrIGJ1ZmZlciB0ZXh0dXJlIik7Ci0KLSAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVS
ZW5kZXJUYXJnZXRWaWV3KG1CYWNrQnVmZmVyVGV4dHVyZSwgTlVMTCwgJm1CYWNrQnVmZmVyUlRW
aWV3KTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6
OlNldERlYnVnTmFtZShtQmFja0J1ZmZlclJUVmlldywgIkJhY2sgYnVmZmVyIHJlbmRlciB0YXJn
ZXQiKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBhcmUgcmVzaXppbmcgdGhlIHN3YXAgY2hhaW4s
IHdlIGRvbid0IHdpc2ggdG8gcmVjcmVhdGUgYWxsIHRoZSBzdGF0aWMgcmVzb3VyY2VzCi0gICAg
aWYgKCFtUGFzc1Rocm91Z2hSZXNvdXJjZXNJbml0KQotICAgIHsKLSAgICAgICAgbVBhc3NUaHJv
dWdoUmVzb3VyY2VzSW5pdCA9IHRydWU7Ci0gICAgICAgIGluaXRQYXNzVGhyb3VnaFJlc291cmNl
cygpOwotICAgIH0KLQotICAgIHJldHVybiByZXNldE9mZnNjcmVlblRleHR1cmUoYmFja2J1ZmZl
cldpZHRoLCBiYWNrYnVmZmVySGVpZ2h0KTsKLX0KLQotdm9pZCBTd2FwQ2hhaW4xMTo6aW5pdFBh
c3NUaHJvdWdoUmVzb3VyY2VzKCkKLXsKLSAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5k
ZXJlci0+Z2V0RGV2aWNlKCk7Ci0KLSAgICBBU1NFUlQoZGV2aWNlICE9IE5VTEwpOwotCi0gICAg
Ly8gTWFrZSBzdXJlIG91ciByZXNvdXJjZXMgYXJlIGFsbCBub3QgYWxsb2NhdGVkLCB3aGVuIHdl
IGNyZWF0ZQotICAgIEFTU0VSVChtUXVhZFZCID09IE5VTEwgJiYgbVBhc3NUaHJvdWdoU2FtcGxl
ciA9PSBOVUxMKTsKLSAgICBBU1NFUlQobVBhc3NUaHJvdWdoSUwgPT0gTlVMTCAmJiBtUGFzc1Ro
cm91Z2hWUyA9PSBOVUxMICYmIG1QYXNzVGhyb3VnaFBTID09IE5VTEwpOwotCi0gICAgRDNEMTFf
QlVGRkVSX0RFU0MgdmJEZXNjOwotICAgIHZiRGVzYy5CeXRlV2lkdGggPSBzaXplb2YoZDNkMTE6
OlBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgpICogNDsKLSAgICB2YkRlc2MuVXNhZ2UgPSBEM0QxMV9V
U0FHRV9EWU5BTUlDOwotICAgIHZiRGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1ZFUlRFWF9C
VUZGRVI7Ci0gICAgdmJEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19XUklU
RTsKLSAgICB2YkRlc2MuTWlzY0ZsYWdzID0gMDsKLSAgICB2YkRlc2MuU3RydWN0dXJlQnl0ZVN0
cmlkZSA9IDA7Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZ2
YkRlc2MsIE5VTEwsICZtUXVhZFZCKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwot
ICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobVF1YWRWQiwgIlN3YXAgY2hhaW4gcXVhZCB2ZXJ0ZXgg
YnVmZmVyIik7Ci0KLSAgICBEM0QxMV9TQU1QTEVSX0RFU0Mgc2FtcGxlckRlc2M7Ci0gICAgc2Ft
cGxlckRlc2MuRmlsdGVyID0gRDNEMTFfRklMVEVSX01JTl9NQUdfTUlQX1BPSU5UOwotICAgIHNh
bXBsZXJEZXNjLkFkZHJlc3NVID0gRDNEMTFfVEVYVFVSRV9BRERSRVNTX0NMQU1QOwotICAgIHNh
bXBsZXJEZXNjLkFkZHJlc3NWID0gRDNEMTFfVEVYVFVSRV9BRERSRVNTX0NMQU1QOwotICAgIHNh
bXBsZXJEZXNjLkFkZHJlc3NXID0gRDNEMTFfVEVYVFVSRV9BRERSRVNTX0NMQU1QOwotICAgIHNh
bXBsZXJEZXNjLk1pcExPREJpYXMgPSAwLjBmOwotICAgIHNhbXBsZXJEZXNjLk1heEFuaXNvdHJv
cHkgPSAwOwotICAgIHNhbXBsZXJEZXNjLkNvbXBhcmlzb25GdW5jID0gRDNEMTFfQ09NUEFSSVNP
Tl9ORVZFUjsKLSAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclswXSA9IDAuMGY7Ci0gICAgc2Ft
cGxlckRlc2MuQm9yZGVyQ29sb3JbMV0gPSAwLjBmOwotICAgIHNhbXBsZXJEZXNjLkJvcmRlckNv
bG9yWzJdID0gMC4wZjsKLSAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclszXSA9IDAuMGY7Ci0g
ICAgc2FtcGxlckRlc2MuTWluTE9EID0gMDsKLSAgICBzYW1wbGVyRGVzYy5NYXhMT0QgPSBEM0Qx
MV9GTE9BVDMyX01BWDsKLQotICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2FtcGxlclN0YXRl
KCZzYW1wbGVyRGVzYywgJm1QYXNzVGhyb3VnaFNhbXBsZXIpOwotICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7Ci0gICAgZDNkMTE6OlNldERlYnVnTmFtZShtUGFzc1Rocm91Z2hTYW1wbGVy
LCAiU3dhcCBjaGFpbiBwYXNzIHRocm91Z2ggc2FtcGxlciIpOwotCi0gICAgRDNEMTFfSU5QVVRf
RUxFTUVOVF9ERVNDIHF1YWRMYXlvdXRbXSA9Ci0gICAgewotICAgICAgICB7ICJQT1NJVElPTiIs
IDAsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgMCwgMCwgRDNEMTFfSU5QVVRfUEVSX1ZFUlRF
WF9EQVRBLCAwIH0sCi0gICAgICAgIHsgIlRFWENPT1JEIiwgMCwgRFhHSV9GT1JNQVRfUjMyRzMy
X0ZMT0FULCAwLCA4LCBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAgfSwKLSAgICB9Owot
Ci0gICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVJbnB1dExheW91dChxdWFkTGF5b3V0LCAyLCBn
X1ZTX1Bhc3N0aHJvdWdoLCBzaXplb2YoZ19WU19QYXNzdGhyb3VnaCksICZtUGFzc1Rocm91Z2hJ
TCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICBkM2QxMTo6U2V0RGVidWdO
YW1lKG1QYXNzVGhyb3VnaElMLCAiU3dhcCBjaGFpbiBwYXNzIHRocm91Z2ggbGF5b3V0Iik7Ci0K
LSAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVZlcnRleFNoYWRlcihnX1ZTX1Bhc3N0aHJvdWdo
LCBzaXplb2YoZ19WU19QYXNzdGhyb3VnaCksIE5VTEwsICZtUGFzc1Rocm91Z2hWUyk7Ci0gICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1QYXNz
VGhyb3VnaFZTLCAiU3dhcCBjaGFpbiBwYXNzIHRocm91Z2ggdmVydGV4IHNoYWRlciIpOwotCi0g
ICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihnX1BTX1Bhc3N0aHJvdWdoUkdC
QSwgc2l6ZW9mKGdfUFNfUGFzc3Rocm91Z2hSR0JBKSwgTlVMTCwgJm1QYXNzVGhyb3VnaFBTKTsK
LSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIGQzZDExOjpTZXREZWJ1Z05hbWUo
bVBhc3NUaHJvdWdoUFMsICJTd2FwIGNoYWluIHBhc3MgdGhyb3VnaCBwaXhlbCBzaGFkZXIiKTsK
LX0KLQotLy8gcGFyYW1ldGVycyBzaG91bGQgYmUgdmFsaWRhdGVkL2NsYW1wZWQgYnkgY2FsbGVy
Ci1FR0xpbnQgU3dhcENoYWluMTE6OnN3YXBSZWN0KEVHTGludCB4LCBFR0xpbnQgeSwgRUdMaW50
IHdpZHRoLCBFR0xpbnQgaGVpZ2h0KQotewotICAgIGlmICghbVN3YXBDaGFpbikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBFR0xfU1VDQ0VTUzsKLSAgICB9Ci0KLSAgICBJRDNEMTFEZXZpY2UgKmRl
dmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0gICAgSUQzRDExRGV2aWNlQ29udGV4dCAq
ZGV2aWNlQ29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotCi0gICAgLy8g
U2V0IHZlcnRpY2VzCi0gICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNl
OwotICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlQ29udGV4dC0+TWFwKG1RdWFkVkIsIDAsIEQz
RDExX01BUF9XUklURV9ESVNDQVJELCAwLCAmbWFwcGVkUmVzb3VyY2UpOwotICAgIGlmIChGQUlM
RUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBFR0xfQkFEX0FDQ0VTUzsKLSAgICB9
Ci0KLSAgICBkM2QxMTo6UG9zaXRpb25UZXhDb29yZFZlcnRleCAqdmVydGljZXMgPSBzdGF0aWNf
Y2FzdDxkM2QxMTo6UG9zaXRpb25UZXhDb29yZFZlcnRleCo+KG1hcHBlZFJlc291cmNlLnBEYXRh
KTsKLQotICAgIC8vIENyZWF0ZSBhIHF1YWQgaW4gaG9tb2dlbmVvdXMgY29vcmRpbmF0ZXMKLSAg
ICBmbG9hdCB4MSA9ICh4IC8gZmxvYXQobVdpZHRoKSkgKiAyLjBmIC0gMS4wZjsKLSAgICBmbG9h
dCB5MSA9ICh5IC8gZmxvYXQobUhlaWdodCkpICogMi4wZiAtIDEuMGY7Ci0gICAgZmxvYXQgeDIg
PSAoKHggKyB3aWR0aCkgLyBmbG9hdChtV2lkdGgpKSAqIDIuMGYgLSAxLjBmOwotICAgIGZsb2F0
IHkyID0gKCh5ICsgaGVpZ2h0KSAvIGZsb2F0KG1IZWlnaHQpKSAqIDIuMGYgLSAxLjBmOwotCi0g
ICAgZmxvYXQgdTEgPSB4IC8gZmxvYXQobVdpZHRoKTsKLSAgICBmbG9hdCB2MSA9IHkgLyBmbG9h
dChtSGVpZ2h0KTsKLSAgICBmbG9hdCB1MiA9ICh4ICsgd2lkdGgpIC8gZmxvYXQobVdpZHRoKTsK
LSAgICBmbG9hdCB2MiA9ICh5ICsgaGVpZ2h0KSAvIGZsb2F0KG1IZWlnaHQpOwotCi0gICAgZDNk
MTE6OlNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgoJnZlcnRpY2VzWzBdLCB4MSwgeTEsIHUxLCB2
MSk7Ci0gICAgZDNkMTE6OlNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgoJnZlcnRpY2VzWzFdLCB4
MSwgeTIsIHUxLCB2Mik7Ci0gICAgZDNkMTE6OlNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgoJnZl
cnRpY2VzWzJdLCB4MiwgeTEsIHUyLCB2MSk7Ci0gICAgZDNkMTE6OlNldFBvc2l0aW9uVGV4Q29v
cmRWZXJ0ZXgoJnZlcnRpY2VzWzNdLCB4MiwgeTIsIHUyLCB2Mik7Ci0KLSAgICBkZXZpY2VDb250
ZXh0LT5Vbm1hcChtUXVhZFZCLCAwKTsKLQotICAgIHN0YXRpYyBVSU5UIHN0cmlkZSA9IHNpemVv
ZihkM2QxMTo6UG9zaXRpb25UZXhDb29yZFZlcnRleCk7Ci0gICAgc3RhdGljIFVJTlQgc3RhcnRJ
ZHggPSAwOwotICAgIGRldmljZUNvbnRleHQtPklBU2V0VmVydGV4QnVmZmVycygwLCAxLCAmbVF1
YWRWQiwgJnN0cmlkZSwgJnN0YXJ0SWR4KTsKLQotICAgIC8vIEFwcGx5IHN0YXRlCi0gICAgZGV2
aWNlQ29udGV4dC0+T01TZXREZXB0aFN0ZW5jaWxTdGF0ZShOVUxMLCAweEZGRkZGRkZGKTsKLQot
ICAgIHN0YXRpYyBjb25zdCBmbG9hdCBibGVuZEZhY3Rvcls0XSA9IHsgMS4wZiwgMS4wZiwgMS4w
ZiwgMS4wZiB9OwotICAgIGRldmljZUNvbnRleHQtPk9NU2V0QmxlbmRTdGF0ZShOVUxMLCBibGVu
ZEZhY3RvciwgMHhGRkZGRkZGKTsKLQotICAgIGRldmljZUNvbnRleHQtPlJTU2V0U3RhdGUoTlVM
TCk7Ci0KLSAgICAvLyBBcHBseSBzaGFkZXJzCi0gICAgZGV2aWNlQ29udGV4dC0+SUFTZXRJbnB1
dExheW91dChtUGFzc1Rocm91Z2hJTCk7Ci0gICAgZGV2aWNlQ29udGV4dC0+SUFTZXRQcmltaXRp
dmVUb3BvbG9neShEM0RfUFJJTUlUSVZFX1RPUE9MT0dZX1RSSUFOR0xFU1RSSVApOwotICAgIGRl
dmljZUNvbnRleHQtPlZTU2V0U2hhZGVyKG1QYXNzVGhyb3VnaFZTLCBOVUxMLCAwKTsKLSAgICBk
ZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlcihtUGFzc1Rocm91Z2hQUywgTlVMTCwgMCk7Ci0gICAg
ZGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIoTlVMTCwgTlVMTCwgMCk7Ci0KLSAgICAvLyBBcHBs
eSByZW5kZXIgdGFyZ2V0cwotICAgIG1SZW5kZXJlci0+c2V0T25lVGltZVJlbmRlclRhcmdldCht
QmFja0J1ZmZlclJUVmlldyk7Ci0KLSAgICAvLyBTZXQgdGhlIHZpZXdwb3J0Ci0gICAgRDNEMTFf
VklFV1BPUlQgdmlld3BvcnQ7Ci0gICAgdmlld3BvcnQuVG9wTGVmdFggPSAwOwotICAgIHZpZXdw
b3J0LlRvcExlZnRZID0gMDsKLSAgICB2aWV3cG9ydC5XaWR0aCA9IG1XaWR0aDsKLSAgICB2aWV3
cG9ydC5IZWlnaHQgPSBtSGVpZ2h0OwotICAgIHZpZXdwb3J0Lk1pbkRlcHRoID0gMC4wZjsKLSAg
ICB2aWV3cG9ydC5NYXhEZXB0aCA9IDEuMGY7Ci0gICAgZGV2aWNlQ29udGV4dC0+UlNTZXRWaWV3
cG9ydHMoMSwgJnZpZXdwb3J0KTsKLQotICAgIC8vIEFwcGx5IHRleHR1cmVzCi0gICAgZGV2aWNl
Q29udGV4dC0+UFNTZXRTaGFkZXJSZXNvdXJjZXMoMCwgMSwgJm1PZmZzY3JlZW5TUlZpZXcpOwot
ICAgIGRldmljZUNvbnRleHQtPlBTU2V0U2FtcGxlcnMoMCwgMSwgJm1QYXNzVGhyb3VnaFNhbXBs
ZXIpOwotCi0gICAgLy8gRHJhdwotICAgIGRldmljZUNvbnRleHQtPkRyYXcoNCwgMCk7Ci0KLSNp
ZiBBTkdMRV9GT1JDRV9WU1lOQ19PRkYKLSAgICByZXN1bHQgPSBtU3dhcENoYWluLT5QcmVzZW50
KDAsIDApOwotI2Vsc2UKLSAgICByZXN1bHQgPSBtU3dhcENoYWluLT5QcmVzZW50KG1Td2FwSW50
ZXJ2YWwsIDApOwotI2VuZGlmCi0KLSAgICBpZiAocmVzdWx0ID09IERYR0lfRVJST1JfREVWSUNF
X1JFTU9WRUQpCi0gICAgewotICAgICAgICBIUkVTVUxUIHJlbW92ZWRSZWFzb24gPSBkZXZpY2Ut
PkdldERldmljZVJlbW92ZWRSZWFzb24oKTsKLSAgICAgICAgRVJSKCJQcmVzZW50IGZhaWxlZDog
dGhlIEQzRDExIGRldmljZSB3YXMgcmVtb3ZlZDogMHglMDhYIiwgcmVtb3ZlZFJlYXNvbik7Ci0g
ICAgICAgIHJldHVybiBFR0xfQ09OVEVYVF9MT1NUOwotICAgIH0KLSAgICBlbHNlIGlmIChyZXN1
bHQgPT0gRFhHSV9FUlJPUl9ERVZJQ0VfUkVTRVQpCi0gICAgewotICAgICAgICBFUlIoIlByZXNl
bnQgZmFpbGVkOiB0aGUgRDNEMTEgZGV2aWNlIHdhcyByZXNldCBmcm9tIGEgYmFkIGNvbW1hbmQu
Iik7Ci0gICAgICAgIHJldHVybiBFR0xfQ09OVEVYVF9MT1NUOwotICAgIH0KLSAgICBlbHNlIGlm
IChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEVSUigiUHJlc2VudCBmYWlsZWQgd2l0
aCBlcnJvciBjb2RlIDB4JTA4WCIsIHJlc3VsdCk7Ci0gICAgfQotCi0gICAgLy8gVW5iaW5kCi0g
ICAgc3RhdGljIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqY29uc3QgbnVsbFNSViA9IE5VTEw7
Ci0gICAgZGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXJSZXNvdXJjZXMoMCwgMSwgJm51bGxTUlYp
OwotCi0gICAgbVJlbmRlcmVyLT51bmFwcGx5UmVuZGVyVGFyZ2V0cygpOwotICAgIG1SZW5kZXJl
ci0+bWFya0FsbFN0YXRlRGlydHkoKTsKLQotICAgIHJldHVybiBFR0xfU1VDQ0VTUzsKLX0KLQot
Ly8gSW5jcmVtZW50cyByZWZjb3VudCBvbiB0ZXh0dXJlLgotLy8gY2FsbGVyIG11c3QgUmVsZWFz
ZSgpIHRoZSByZXR1cm5lZCB0ZXh0dXJlCi1JRDNEMTFUZXh0dXJlMkQgKlN3YXBDaGFpbjExOjpn
ZXRPZmZzY3JlZW5UZXh0dXJlKCkKLXsKLSAgICBpZiAobU9mZnNjcmVlblRleHR1cmUpCi0gICAg
ewotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+QWRkUmVmKCk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIG1PZmZzY3JlZW5UZXh0dXJlOwotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHZp
ZXcuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHZpZXcKLUlEM0QxMVJl
bmRlclRhcmdldFZpZXcgKlN3YXBDaGFpbjExOjpnZXRSZW5kZXJUYXJnZXQoKQotewotICAgIGlm
IChtT2Zmc2NyZWVuUlRWaWV3KQotICAgIHsKLSAgICAgICAgbU9mZnNjcmVlblJUVmlldy0+QWRk
UmVmKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1PZmZzY3JlZW5SVFZpZXc7Ci19Ci0KLS8vIElu
Y3JlbWVudHMgcmVmY291bnQgb24gdmlldy4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUg
cmV0dXJuZWQgdmlldwotSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpTd2FwQ2hhaW4xMTo6Z2V0
UmVuZGVyVGFyZ2V0U2hhZGVyUmVzb3VyY2UoKQotewotICAgIGlmIChtT2Zmc2NyZWVuU1JWaWV3
KQotICAgIHsKLSAgICAgICAgbU9mZnNjcmVlblNSVmlldy0+QWRkUmVmKCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIG1PZmZzY3JlZW5TUlZpZXc7Ci19Ci0KLS8vIEluY3JlbWVudHMgcmVmY291bnQg
b24gdmlldy4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgdmlldwotSUQz
RDExRGVwdGhTdGVuY2lsVmlldyAqU3dhcENoYWluMTE6OmdldERlcHRoU3RlbmNpbCgpCi17Ci0g
ICAgaWYgKG1EZXB0aFN0ZW5jaWxEU1ZpZXcpCi0gICAgewotICAgICAgICBtRGVwdGhTdGVuY2ls
RFNWaWV3LT5BZGRSZWYoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbURlcHRoU3RlbmNpbERTVmll
dzsKLX0KLQotSUQzRDExVGV4dHVyZTJEICpTd2FwQ2hhaW4xMTo6Z2V0RGVwdGhTdGVuY2lsVGV4
dHVyZSgpCi17Ci0gICAgaWYgKG1EZXB0aFN0ZW5jaWxUZXh0dXJlKQotICAgIHsKLSAgICAgICAg
bURlcHRoU3RlbmNpbFRleHR1cmUtPkFkZFJlZigpOwotICAgIH0KLQotICAgIHJldHVybiBtRGVw
dGhTdGVuY2lsVGV4dHVyZTsKLX0KLQotU3dhcENoYWluMTEgKlN3YXBDaGFpbjExOjptYWtlU3dh
cENoYWluMTEoU3dhcENoYWluICpzd2FwQ2hhaW4pCi17Ci0gICAgQVNTRVJUKEhBU19EWU5BTUlD
X1RZUEUocng6OlN3YXBDaGFpbjExKiwgc3dhcENoYWluKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PHJ4OjpTd2FwQ2hhaW4xMSo+KHN3YXBDaGFpbik7Ci19Ci0KLXZvaWQgU3dhcENoYWluMTE6
OnJlY3JlYXRlKCkKLXsKLSAgICAvLyBwb3NzaWJseSBzaG91bGQgdXNlIHRoaXMgbWV0aG9kIGlu
c3RlYWQgb2YgcmVzZXQKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9Td2FwQ2hhaW4xMS5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9Td2FwQ2hhaW4xMS5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA4MDAxMDQ2MDJlMzViMGJjYmExMTAzOWExNmViZmM2MTExNjFl
ZjYxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvU3dhcENoYWluMTEuaAor
KysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBTd2FwQ2hh
aW4xMS5oOiBEZWZpbmVzIGEgYmFjay1lbmQgc3BlY2lmaWMgY2xhc3MgZm9yIHRoZSBEM0QxMSBz
d2FwIGNoYWluLgotCi0jaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9TV0FQQ0hBSU4xMV9IXwot
I2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfU1dBUENIQUlOMTFfSF8KLQotI2luY2x1ZGUgImNv
bW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1N3YXBDaGFp
bi5oIgotCi1uYW1lc3BhY2UgcngKLXsKLWNsYXNzIFJlbmRlcmVyMTE7Ci0KLWNsYXNzIFN3YXBD
aGFpbjExIDogcHVibGljIFN3YXBDaGFpbgotewotICBwdWJsaWM6Ci0gICAgU3dhcENoYWluMTEo
UmVuZGVyZXIxMSAqcmVuZGVyZXIsIEhXTkQgd2luZG93LCBIQU5ETEUgc2hhcmVIYW5kbGUsCi0g
ICAgICAgICAgICAgICAgR0xlbnVtIGJhY2tCdWZmZXJGb3JtYXQsIEdMZW51bSBkZXB0aEJ1ZmZl
ckZvcm1hdCk7Ci0gICAgdmlydHVhbCB+U3dhcENoYWluMTEoKTsKLQotICAgIEVHTGludCByZXNp
emUoRUdMaW50IGJhY2tidWZmZXJXaWR0aCwgRUdMaW50IGJhY2tidWZmZXJIZWlnaHQpOwotICAg
IHZpcnR1YWwgRUdMaW50IHJlc2V0KEVHTGludCBiYWNrYnVmZmVyV2lkdGgsIEVHTGludCBiYWNr
YnVmZmVySGVpZ2h0LCBFR0xpbnQgc3dhcEludGVydmFsKTsKLSAgICB2aXJ0dWFsIEVHTGludCBz
d2FwUmVjdChFR0xpbnQgeCwgRUdMaW50IHksIEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCk7
Ci0gICAgdmlydHVhbCB2b2lkIHJlY3JlYXRlKCk7Ci0KLSAgICB2aXJ0dWFsIElEM0QxMVRleHR1
cmUyRCAqZ2V0T2Zmc2NyZWVuVGV4dHVyZSgpOwotICAgIHZpcnR1YWwgSUQzRDExUmVuZGVyVGFy
Z2V0VmlldyAqZ2V0UmVuZGVyVGFyZ2V0KCk7Ci0gICAgdmlydHVhbCBJRDNEMTFTaGFkZXJSZXNv
dXJjZVZpZXcgKmdldFJlbmRlclRhcmdldFNoYWRlclJlc291cmNlKCk7Ci0KLSAgICB2aXJ0dWFs
IElEM0QxMVRleHR1cmUyRCAqZ2V0RGVwdGhTdGVuY2lsVGV4dHVyZSgpOwotICAgIHZpcnR1YWwg
SUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZ2V0RGVwdGhTdGVuY2lsKCk7Ci0KLSAgICBFR0xpbnQg
Z2V0V2lkdGgoKSBjb25zdCB7IHJldHVybiBtV2lkdGg7IH0KLSAgICBFR0xpbnQgZ2V0SGVpZ2h0
KCkgY29uc3QgeyByZXR1cm4gbUhlaWdodDsgfQotCi0gICAgc3RhdGljIFN3YXBDaGFpbjExICpt
YWtlU3dhcENoYWluMTEoU3dhcENoYWluICpzd2FwQ2hhaW4pOwotCi0gIHByaXZhdGU6Ci0gICAg
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFN3YXBDaGFpbjExKTsKLQotICAgIHZvaWQgcmVsZWFz
ZSgpOwotICAgIHZvaWQgaW5pdFBhc3NUaHJvdWdoUmVzb3VyY2VzKCk7Ci0gICAgdm9pZCByZWxl
YXNlT2Zmc2NyZWVuVGV4dHVyZSgpOwotICAgIEVHTGludCByZXNldE9mZnNjcmVlblRleHR1cmUo
aW50IGJhY2tidWZmZXJXaWR0aCwgaW50IGJhY2tidWZmZXJIZWlnaHQpOwotCi0gICAgUmVuZGVy
ZXIxMSAqbVJlbmRlcmVyOwotICAgIEVHTGludCBtSGVpZ2h0OwotICAgIEVHTGludCBtV2lkdGg7
Ci0gICAgYm9vbCBtQXBwQ3JlYXRlZFNoYXJlSGFuZGxlOwotICAgIHVuc2lnbmVkIGludCBtU3dh
cEludGVydmFsOwotICAgIGJvb2wgbVBhc3NUaHJvdWdoUmVzb3VyY2VzSW5pdDsKLQotICAgIElE
WEdJU3dhcENoYWluICptU3dhcENoYWluOwotCi0gICAgSUQzRDExVGV4dHVyZTJEICptQmFja0J1
ZmZlclRleHR1cmU7Ci0gICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqbUJhY2tCdWZmZXJSVFZp
ZXc7Ci0KLSAgICBJRDNEMTFUZXh0dXJlMkQgKm1PZmZzY3JlZW5UZXh0dXJlOwotICAgIElEM0Qx
MVJlbmRlclRhcmdldFZpZXcgKm1PZmZzY3JlZW5SVFZpZXc7Ci0gICAgSUQzRDExU2hhZGVyUmVz
b3VyY2VWaWV3ICptT2Zmc2NyZWVuU1JWaWV3OwotCi0gICAgSUQzRDExVGV4dHVyZTJEICptRGVw
dGhTdGVuY2lsVGV4dHVyZTsKLSAgICBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICptRGVwdGhTdGVu
Y2lsRFNWaWV3OwotCi0gICAgSUQzRDExQnVmZmVyICptUXVhZFZCOwotICAgIElEM0QxMVNhbXBs
ZXJTdGF0ZSAqbVBhc3NUaHJvdWdoU2FtcGxlcjsKLSAgICBJRDNEMTFJbnB1dExheW91dCAqbVBh
c3NUaHJvdWdoSUw7Ci0gICAgSUQzRDExVmVydGV4U2hhZGVyICptUGFzc1Rocm91Z2hWUzsKLSAg
ICBJRDNEMTFQaXhlbFNoYWRlciAqbVBhc3NUaHJvdWdoUFM7Ci19OwotCi19Ci0jZW5kaWYgLy8g
TElCR0xFU1YyX1JFTkRFUkVSX1NXQVBDSEFJTjExX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1N3YXBDaGFpbjkuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9Td2FwQ2hhaW45LmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzU3Y2UxY2IwMzViNjAzZWY2MWM0OTE2
MWMzOWQwNDAxMGZjNDAxMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1N3
YXBDaGFpbjkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDM4ICswLDAgQEAKLSNpbmNsdWRlICJw
cmVjb21waWxlZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0v
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gU3dhcENoYWluOS5jcHA6IElt
cGxlbWVudHMgYSBiYWNrLWVuZCBzcGVjaWZpYyBjbGFzcyBmb3IgdGhlIEQzRDkgc3dhcCBjaGFp
bi4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9Td2FwQ2hhaW45LmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL3JlbmRlcmVyOV91dGlscy5oIgotI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9SZW5kZXJlcjkuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLVN3YXBDaGFp
bjk6OlN3YXBDaGFpbjkoUmVuZGVyZXI5ICpyZW5kZXJlciwgSFdORCB3aW5kb3csIEhBTkRMRSBz
aGFyZUhhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGJhY2tCdWZmZXJGb3Jt
YXQsIEdMZW51bSBkZXB0aEJ1ZmZlckZvcm1hdCkKLSAgICA6IG1SZW5kZXJlcihyZW5kZXJlciks
IFN3YXBDaGFpbih3aW5kb3csIHNoYXJlSGFuZGxlLCBiYWNrQnVmZmVyRm9ybWF0LCBkZXB0aEJ1
ZmZlckZvcm1hdCkKLXsKLSAgICBtU3dhcENoYWluID0gTlVMTDsKLSAgICBtQmFja0J1ZmZlciA9
IE5VTEw7Ci0gICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgbVJlbmRlclRhcmdldCA9IE5V
TEw7Ci0gICAgbU9mZnNjcmVlblRleHR1cmUgPSBOVUxMOwotICAgIG1XaWR0aCA9IC0xOwotICAg
IG1IZWlnaHQgPSAtMTsKLSAgICBtU3dhcEludGVydmFsID0gLTE7Ci19Ci0KLVN3YXBDaGFpbjk6
On5Td2FwQ2hhaW45KCkKLXsKLSAgICByZWxlYXNlKCk7Ci19Ci0KLXZvaWQgU3dhcENoYWluOTo6
cmVsZWFzZSgpCi17Ci0gICAgaWYgKG1Td2FwQ2hhaW4pCi0gICAgewotICAgICAgICBtU3dhcENo
YWluLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1Td2FwQ2hhaW4gPSBOVUxMOwotICAgIH0KLQotICAg
IGlmIChtQmFja0J1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1CYWNrQnVmZmVyLT5SZWxlYXNlKCk7
Ci0gICAgICAgIG1CYWNrQnVmZmVyID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobURlcHRoU3Rl
bmNpbCkKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKLSAgICAgICAg
bURlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1SZW5kZXJUYXJnZXQpCi0g
ICAgewotICAgICAgICBtUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1SZW5kZXJU
YXJnZXQgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkKLSAgICB7
Ci0gICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1PZmZzY3Jl
ZW5UZXh0dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVdpbmRvdykKLSAgICAgICAgbVNo
YXJlSGFuZGxlID0gTlVMTDsKLX0KLQotc3RhdGljIERXT1JEIGNvbnZlcnRJbnRlcnZhbChFR0xp
bnQgaW50ZXJ2YWwpCi17Ci0jaWYgQU5HTEVfRk9SQ0VfVlNZTkNfT0ZGCi0gICAgcmV0dXJuIEQz
RFBSRVNFTlRfSU5URVJWQUxfSU1NRURJQVRFOwotI2Vsc2UKLSAgICBzd2l0Y2goaW50ZXJ2YWwp
Ci0gICAgewotICAgICAgY2FzZSAwOiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9JTU1FRElB
VEU7Ci0gICAgICBjYXNlIDE6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX09ORTsKLSAgICAg
IGNhc2UgMjogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfVFdPOwotICAgICAgY2FzZSAzOiBy
ZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9USFJFRTsKLSAgICAgIGNhc2UgNDogcmV0dXJuIEQz
RFBSRVNFTlRfSU5URVJWQUxfRk9VUjsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfREVGQVVMVDsKLSNlbmRpZgot
fQotCi1FR0xpbnQgU3dhcENoYWluOTo6cmVzaXplKGludCBiYWNrYnVmZmVyV2lkdGgsIGludCBi
YWNrYnVmZmVySGVpZ2h0KQotewotICAgIC8vIEQzRDkgZG9lcyBub3Qgc3VwcG9ydCByZXNpemlu
ZyBzd2FwIGNoYWlucyB3aXRob3V0IHJlY3JlYXRpbmcgdGhlbQotICAgIHJldHVybiByZXNldChi
YWNrYnVmZmVyV2lkdGgsIGJhY2tidWZmZXJIZWlnaHQsIG1Td2FwSW50ZXJ2YWwpOwotfQotCi1F
R0xpbnQgU3dhcENoYWluOTo6cmVzZXQoaW50IGJhY2tidWZmZXJXaWR0aCwgaW50IGJhY2tidWZm
ZXJIZWlnaHQsIEVHTGludCBzd2FwSW50ZXJ2YWwpCi17Ci0gICAgSURpcmVjdDNERGV2aWNlOSAq
ZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLQotICAgIGlmIChkZXZpY2UgPT0gTlVM
TCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBFR0xfQkFEX0FDQ0VTUzsKLSAgICB9Ci0KLSAgICAv
LyBFdmljdCBhbGwgbm9uLXJlbmRlciB0YXJnZXQgdGV4dHVyZXMgdG8gc3lzdGVtIG1lbW9yeSBh
bmQgcmVsZWFzZSBhbGwgcmVzb3VyY2VzCi0gICAgLy8gYmVmb3JlIHJlYWxsb2NhdGluZyB0aGVt
IHRvIGZyZWUgdXAgYXMgbXVjaCB2aWRlbyBtZW1vcnkgYXMgcG9zc2libGUuCi0gICAgZGV2aWNl
LT5FdmljdE1hbmFnZWRSZXNvdXJjZXMoKTsKLQotICAgIEhSRVNVTFQgcmVzdWx0OwotCi0gICAg
Ly8gUmVsZWFzZSBzcGVjaWZpYyByZXNvdXJjZXMgdG8gZnJlZSB1cCBtZW1vcnkgZm9yIHRoZSBu
ZXcgcmVuZGVyIHRhcmdldCwgd2hpbGUgdGhlCi0gICAgLy8gb2xkIHJlbmRlciB0YXJnZXQgc3Rp
bGwgZXhpc3RzIGZvciB0aGUgcHVycG9zZSBvZiBwcmVzZXJ2aW5nIGl0cyBjb250ZW50cy4KLSAg
ICBpZiAobVN3YXBDaGFpbikKLSAgICB7Ci0gICAgICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsK
LSAgICAgICAgbVN3YXBDaGFpbiA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1CYWNrQnVmZmVy
KQotICAgIHsKLSAgICAgICAgbUJhY2tCdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJhY2tC
dWZmZXIgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkKLSAgICB7
Ci0gICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1PZmZzY3Jl
ZW5UZXh0dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobURlcHRoU3RlbmNpbCkKLSAgICB7
Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKLSAgICAgICAgbURlcHRoU3RlbmNp
bCA9IE5VTEw7Ci0gICAgfQotCi0gICAgSEFORExFICpwU2hhcmVIYW5kbGUgPSBOVUxMOwotICAg
IGlmICghbVdpbmRvdyAmJiBtUmVuZGVyZXItPmdldFNoYXJlSGFuZGxlU3VwcG9ydCgpKQotICAg
IHsKLSAgICAgICAgcFNoYXJlSGFuZGxlID0gJm1TaGFyZUhhbmRsZTsKLSAgICB9Ci0KLSAgICBy
ZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUoYmFja2J1ZmZlcldpZHRoLCBiYWNrYnVmZmVy
SGVpZ2h0LCAxLCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobUJhY2tCdWZm
ZXJGb3JtYXQpLCBEM0RQT09MX0RFRkFVTFQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZtT2Zmc2NyZWVuVGV4dHVyZSwgcFNoYXJlSGFuZGxlKTsKLSAgICBpZiAoRkFJTEVE
KHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgb2Zmc2NyZWVu
IHRleHR1cmU6ICUwOGxYIiwgcmVzdWx0KTsKLSAgICAgICAgcmVsZWFzZSgpOwotCi0gICAgICAg
IGlmIChkM2Q5Ojppc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gRUdMX0NPTlRFWFRfTE9TVDsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFR0xfQkFEX0FMTE9DOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKm9sZFJlbmRlclRhcmdldCA9IG1SZW5kZXJU
YXJnZXQ7Ci0KLSAgICByZXN1bHQgPSBtT2Zmc2NyZWVuVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVs
KDAsICZtUmVuZGVyVGFyZ2V0KTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0g
ICAgaWYgKG9sZFJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIFJFQ1QgcmVjdCA9Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIDAsIDAsCi0gICAgICAgICAgICBtV2lkdGgsIG1IZWlnaHQKLSAg
ICAgICAgfTsKLQotICAgICAgICBpZiAocmVjdC5yaWdodCA+IHN0YXRpY19jYXN0PExPTkc+KGJh
Y2tidWZmZXJXaWR0aCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlY3QucmlnaHQgPSBiYWNr
YnVmZmVyV2lkdGg7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVjdC5ib3R0b20gPiBzdGF0
aWNfY2FzdDxMT05HPihiYWNrYnVmZmVySGVpZ2h0KSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmVjdC5ib3R0b20gPSBiYWNrYnVmZmVySGVpZ2h0OwotICAgICAgICB9Ci0KLSAgICAgICAgbVJl
bmRlcmVyLT5lbmRTY2VuZSgpOwotCi0gICAgICAgIHJlc3VsdCA9IGRldmljZS0+U3RyZXRjaFJl
Y3Qob2xkUmVuZGVyVGFyZ2V0LCAmcmVjdCwgbVJlbmRlclRhcmdldCwgJnJlY3QsIEQzRFRFWEZf
Tk9ORSk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAgb2xk
UmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgaWYgKG1XaW5kb3cpCi0gICAg
ewotICAgICAgICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRlcnMgPSB7MH07
Ci0gICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQgPSBnbF9k
M2Q5OjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1EZXB0aEJ1ZmZlckZvcm1hdCk7Ci0gICAg
ICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJDb3VudCA9IDE7Ci0gICAgICAgIHByZXNl
bnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJGb3JtYXQgPSBnbF9kM2Q5OjpDb252ZXJ0UmVuZGVyYnVm
ZmVyRm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0KTsKLSAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMu
RW5hYmxlQXV0b0RlcHRoU3RlbmNpbCA9IEZBTFNFOwotICAgICAgICBwcmVzZW50UGFyYW1ldGVy
cy5GbGFncyA9IDA7Ci0gICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLmhEZXZpY2VXaW5kb3cgPSBt
V2luZG93OwotICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVF1YWxpdHkgPSAw
OyAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBVbmltcGxlbWVudGVkCi0gICAgICAgIHByZXNl
bnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlVHlwZSA9IEQzRE1VTFRJU0FNUExFX05PTkU7ICAgLy8g
RklYTUU6IFVuaW1wbGVtZW50ZWQKLSAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuUHJlc2VudGF0
aW9uSW50ZXJ2YWwgPSBjb252ZXJ0SW50ZXJ2YWwoc3dhcEludGVydmFsKTsKLSAgICAgICAgcHJl
c2VudFBhcmFtZXRlcnMuU3dhcEVmZmVjdCA9IEQzRFNXQVBFRkZFQ1RfRElTQ0FSRDsKLSAgICAg
ICAgcHJlc2VudFBhcmFtZXRlcnMuV2luZG93ZWQgPSBUUlVFOwotICAgICAgICBwcmVzZW50UGFy
YW1ldGVycy5CYWNrQnVmZmVyV2lkdGggPSBiYWNrYnVmZmVyV2lkdGg7Ci0gICAgICAgIHByZXNl
bnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQgPSBiYWNrYnVmZmVySGVpZ2h0OwotCi0gICAg
ICAgIC8vIGh0dHA6Ly9jcmJ1Zy5jb20vMTQwMjM5Ci0gICAgICAgIC8vIGh0dHA6Ly9jcmJ1Zy5j
b20vMTQzNDM0Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIFNvbWUgQU1EL0ludGVsIHN3aXRjaGFi
bGUgc3lzdGVtcyAvIGRyaXZlcnMgYXBwZWFyIHRvIHJvdW5kIHN3YXAgY2hhaW4gc3VyZmFjZXMg
dG8gYSBtdWx0aXBsZSBvZiA2NCBwaXhlbHMgaW4gd2lkdGgKLSAgICAgICAgLy8gd2hlbiB1c2lu
ZyB0aGUgaW50ZWdyYXRlZCBJbnRlbC4gVGhpcyByb3VuZHMgdGhlIHdpZHRoIHVwIHJhdGhlciB0
aGFuIGRvd24uCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFNvbWUgbm9uLXN3aXRjaGFibGUgQU1E
IEdQVXMgLyBkcml2ZXJzIGRvIG5vdCByZXNwZWN0IHRoZSBzb3VyY2UgcmVjdGFuZ2xlIHRvIFBy
ZXNlbnQuIFRoZXJlZm9yZSwgd2hlbiB0aGUgdmVuZG9yIElECi0gICAgICAgIC8vIGlzIG5vdCBJ
bnRlbCwgdGhlIGJhY2sgYnVmZmVyIHdpZHRoIG11c3QgYmUgZXhhY3RseSB0aGUgc2FtZSB3aWR0
aCBhcyB0aGUgd2luZG93IG9yIGhvcml6b250YWwgc2NhbGluZyB3aWxsIG9jY3VyLgotICAgICAg
ICBpZiAobVJlbmRlcmVyLT5nZXRBZGFwdGVyVmVuZG9yKCkgPT0gVkVORE9SX0lEX0lOVEVMKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGgg
PSAocHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoICsgNjMpIC8gNjQgKiA2NDsKLSAg
ICAgICAgfQotCi0gICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQWRkaXRpb25hbFN3YXBD
aGFpbigmcHJlc2VudFBhcmFtZXRlcnMsICZtU3dhcENoYWluKTsKLQotICAgICAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNE
RVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcmVzdWx0
ID09IEQzREVSUl9JTlZBTElEQ0FMTCB8fCByZXN1bHQgPT0gRDNERVJSX0RFVklDRUxPU1QpOwot
Ci0gICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYWRkaXRpb25hbCBzd2FwIGNoYWlu
cyBvciBvZmZzY3JlZW4gc3VyZmFjZXM6ICUwOGxYIiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJl
bGVhc2UoKTsKLQotICAgICAgICAgICAgaWYgKGQzZDk6OmlzRGV2aWNlTG9zdEVycm9yKHJlc3Vs
dCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEVHTF9DT05URVhUX0xP
U1Q7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIEVHTF9CQURfQUxMT0M7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICByZXN1bHQgPSBtU3dhcENoYWluLT5HZXRCYWNrQnVmZmVyKDAsIEQzREJB
Q0tCVUZGRVJfVFlQRV9NT05PLCAmbUJhY2tCdWZmZXIpOwotICAgICAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOwotICAgICAgICBJbnZhbGlkYXRlUmVjdChtV2luZG93LCBOVUxMLCBGQUxT
RSk7Ci0gICAgfQotCi0gICAgaWYgKG1EZXB0aEJ1ZmZlckZvcm1hdCAhPSBHTF9OT05FKQotICAg
IHsKLSAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxTdXJmYWNlKGJh
Y2tidWZmZXJXaWR0aCwgYmFja2J1ZmZlckhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRSZW5kZXJidWZmZXJG
b3JtYXQobURlcHRoQnVmZmVyRm9ybWF0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEQzRE1VTFRJU0FNUExFX05PTkUsIDAsIEZBTFNFLCAmbURl
cHRoU3RlbmNpbCwgTlVMTCk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZ
IHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJfSU5WQUxJRENB
TEwpOwotCi0gICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgZGVwdGhzdGVuY2lsIHN1
cmZhY2UgZm9yIG5ldyBzd2FwIGNoYWluOiAweCUwOFgiLCByZXN1bHQpOwotICAgICAgICAgICAg
cmVsZWFzZSgpOwotCi0gICAgICAgICAgICBpZiAoZDNkOTo6aXNEZXZpY2VMb3N0RXJyb3IocmVz
dWx0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gRUdMX0NPTlRFWFRf
TE9TVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gRUdMX0JBRF9BTExPQzsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLQotICAgIG1XaWR0aCA9IGJhY2tidWZmZXJXaWR0aDsKLSAgICBtSGVpZ2h0
ID0gYmFja2J1ZmZlckhlaWdodDsKLSAgICBtU3dhcEludGVydmFsID0gc3dhcEludGVydmFsOwot
Ci0gICAgcmV0dXJuIEVHTF9TVUNDRVNTOwotfQotCi0vLyBwYXJhbWV0ZXJzIHNob3VsZCBiZSB2
YWxpZGF0ZWQvY2xhbXBlZCBieSBjYWxsZXIKLUVHTGludCBTd2FwQ2hhaW45Ojpzd2FwUmVjdChF
R0xpbnQgeCwgRUdMaW50IHksIEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCkKLXsKLSAgICBp
ZiAoIW1Td2FwQ2hhaW4pCi0gICAgewotICAgICAgICByZXR1cm4gRUdMX1NVQ0NFU1M7Ci0gICAg
fQotCi0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2Uo
KTsKLQotICAgIC8vIERpc2FibGUgYWxsIHBpcGVsaW5lIG9wZXJhdGlvbnMKLSAgICBkZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEQzRFpCX0ZBTFNFKTsKLSAgICBkZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElEKTsKLSAgICBkZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0UpOwotICAgIGRl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOwotICAg
IGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQzRENVTExfTk9ORSk7Ci0g
ICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBGQUxTRSk7Ci0g
ICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOwotICAg
IGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgRDNEQ09MT1JX
UklURUVOQUJMRV9BTFBIQSB8IEQzRENPTE9SV1JJVEVFTkFCTEVfQkxVRSB8IEQzRENPTE9SV1JJ
VEVFTkFCTEVfR1JFRU4gfCBEM0RDT0xPUldSSVRFRU5BQkxFX1JFRCk7Ci0gICAgZGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19TUkdCV1JJVEVFTkFCTEUsIEZBTFNFKTsKLSAgICBkZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX1NDSVNTT1JURVNURU5BQkxFLCBGQUxTRSk7Ci0gICAgZGV2
aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsKLSAgICBkZXZpY2UtPlNldFZlcnRleFNoYWRlcihO
VUxMKTsKLQotICAgIGRldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIG1CYWNrQnVmZmVyKTsKLSAg
ICBkZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UoTlVMTCk7Ci0KLSAgICBkZXZpY2UtPlNl
dFRleHR1cmUoMCwgbU9mZnNjcmVlblRleHR1cmUpOwotICAgIGRldmljZS0+U2V0VGV4dHVyZVN0
YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9ST1AsIEQzRFRPUF9TRUxFQ1RBUkcxKTsKLSAgICBkZXZp
Y2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUkFSRzEsIEQzRFRBX1RFWFRV
UkUpOwotICAgIGRldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMSwgRDNEVFNTX0NPTE9ST1As
IEQzRFRPUF9ESVNBQkxFKTsKLSAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1Q
X01BR0ZJTFRFUiwgRDNEVEVYRl9QT0lOVCk7Ci0gICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUo
MCwgRDNEU0FNUF9NSU5GSUxURVIsIEQzRFRFWEZfUE9JTlQpOwotICAgIGRldmljZS0+U2V0U2Ft
cGxlclN0YXRlKDAsIEQzRFNBTVBfQUREUkVTU1UsIEQzRFRBRERSRVNTX0NMQU1QKTsKLSAgICBk
ZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX0FERFJFU1NWLCBEM0RUQUREUkVTU19D
TEFNUCk7Ci0gICAgZGV2aWNlLT5TZXRGVkYoRDNERlZGX1hZWlJIVyB8IEQzREZWRl9URVgxKTsK
LQotICAgIEQzRFZJRVdQT1JUOSB2aWV3cG9ydCA9IHswLCAwLCBtV2lkdGgsIG1IZWlnaHQsIDAu
MGYsIDEuMGZ9OwotICAgIGRldmljZS0+U2V0Vmlld3BvcnQoJnZpZXdwb3J0KTsKLQotICAgIGZs
b2F0IHgxID0geCAtIDAuNWY7Ci0gICAgZmxvYXQgeTEgPSAobUhlaWdodCAtIHkgLSBoZWlnaHQp
IC0gMC41ZjsKLSAgICBmbG9hdCB4MiA9ICh4ICsgd2lkdGgpIC0gMC41ZjsKLSAgICBmbG9hdCB5
MiA9IChtSGVpZ2h0IC0geSkgLSAwLjVmOwotCi0gICAgZmxvYXQgdTEgPSB4IC8gZmxvYXQobVdp
ZHRoKTsKLSAgICBmbG9hdCB2MSA9IHkgLyBmbG9hdChtSGVpZ2h0KTsKLSAgICBmbG9hdCB1MiA9
ICh4ICsgd2lkdGgpIC8gZmxvYXQobVdpZHRoKTsKLSAgICBmbG9hdCB2MiA9ICh5ICsgaGVpZ2h0
KSAvIGZsb2F0KG1IZWlnaHQpOwotCi0gICAgZmxvYXQgcXVhZFs0XVs2XSA9IHt7eDEsIHkxLCAw
LjBmLCAxLjBmLCB1MSwgdjJ9LAotICAgICAgICAgICAgICAgICAgICAgICAge3gyLCB5MSwgMC4w
ZiwgMS4wZiwgdTIsIHYyfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHt4MiwgeTIsIDAuMGYs
IDEuMGYsIHUyLCB2MX0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7eDEsIHkyLCAwLjBmLCAx
LjBmLCB1MSwgdjF9fTsgICAvLyB4LCB5LCB6LCByaHcsIHUsIHYKLQotICAgIG1SZW5kZXJlci0+
c3RhcnRTY2VuZSgpOwotICAgIGRldmljZS0+RHJhd1ByaW1pdGl2ZVVQKEQzRFBUX1RSSUFOR0xF
RkFOLCAyLCBxdWFkLCA2ICogc2l6ZW9mKGZsb2F0KSk7Ci0gICAgbVJlbmRlcmVyLT5lbmRTY2Vu
ZSgpOwotCi0gICAgZGV2aWNlLT5TZXRUZXh0dXJlKDAsIE5VTEwpOwotCi0gICAgUkVDVCByZWN0
ID0KLSAgICB7Ci0gICAgICAgIHgsIG1IZWlnaHQgLSB5IC0gaGVpZ2h0LAotICAgICAgICB4ICsg
d2lkdGgsIG1IZWlnaHQgLSB5Ci0gICAgfTsKLQotICAgIEhSRVNVTFQgcmVzdWx0ID0gbVN3YXBD
aGFpbi0+UHJlc2VudCgmcmVjdCwgJnJlY3QsIE5VTEwsIE5VTEwsIDApOwotCi0gICAgbVJlbmRl
cmVyLT5tYXJrQWxsU3RhdGVEaXJ0eSgpOwotCi0gICAgaWYgKGQzZDk6OmlzRGV2aWNlTG9zdEVy
cm9yKHJlc3VsdCkpCi0gICAgewotICAgICAgICByZXR1cm4gRUdMX0NPTlRFWFRfTE9TVDsKLSAg
ICB9Ci0KLSAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3Vs
dCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJfRFJJVkVSSU5URVJOQUxFUlJP
UikKLSAgICB7Ci0gICAgICAgIHJldHVybiBFR0xfQkFEX0FMTE9DOwotICAgIH0KLQotICAgIEFT
U0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICByZXR1cm4gRUdMX1NVQ0NFU1M7Ci19Ci0K
LS8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVh
c2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQotSURpcmVjdDNEU3VyZmFjZTkgKlN3YXBDaGFpbjk6
OmdldFJlbmRlclRhcmdldCgpCi17Ci0gICAgaWYgKG1SZW5kZXJUYXJnZXQpCi0gICAgewotICAg
ICAgICBtUmVuZGVyVGFyZ2V0LT5BZGRSZWYoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbVJlbmRl
clRhcmdldDsKLX0KLQotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgotLy8gY2Fs
bGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCi1JRGlyZWN0M0RTdXJmYWNl
OSAqU3dhcENoYWluOTo6Z2V0RGVwdGhTdGVuY2lsKCkKLXsKLSAgICBpZiAobURlcHRoU3RlbmNp
bCkKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwtPkFkZFJlZigpOwotICAgIH0KLQotICAg
IHJldHVybiBtRGVwdGhTdGVuY2lsOwotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHRl
eHR1cmUuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHRleHR1cmUKLUlE
aXJlY3QzRFRleHR1cmU5ICpTd2FwQ2hhaW45OjpnZXRPZmZzY3JlZW5UZXh0dXJlKCkKLXsKLSAg
ICBpZiAobU9mZnNjcmVlblRleHR1cmUpCi0gICAgewotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVy
ZS0+QWRkUmVmKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1PZmZzY3JlZW5UZXh0dXJlOwotfQot
Ci1Td2FwQ2hhaW45ICpTd2FwQ2hhaW45OjptYWtlU3dhcENoYWluOShTd2FwQ2hhaW4gKnN3YXBD
aGFpbikKLXsKLSAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShyeDo6U3dhcENoYWluOSosIHN3
YXBDaGFpbikpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxyeDo6U3dhcENoYWluOSo+KHN3YXBD
aGFpbik7Ci19Ci0KLXZvaWQgU3dhcENoYWluOTo6cmVjcmVhdGUoKQotewotICAgIGlmICghbVN3
YXBDaGFpbikKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJRGlyZWN0M0RE
ZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotICAgIGlmIChkZXZpY2Ug
PT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBEM0RQUkVTRU5U
X1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRlcnM7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBtU3dh
cENoYWluLT5HZXRQcmVzZW50UGFyYW1ldGVycygmcHJlc2VudFBhcmFtZXRlcnMpOwotICAgIEFT
U0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICBJRGlyZWN0M0RTd2FwQ2hhaW45KiBuZXdT
d2FwQ2hhaW4gPSBOVUxMOwotICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQWRkaXRpb25hbFN3
YXBDaGFpbigmcHJlc2VudFBhcmFtZXRlcnMsICZuZXdTd2FwQ2hhaW4pOwotICAgIGlmIChGQUlM
RUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtU3dhcENo
YWluLT5SZWxlYXNlKCk7Ci0gICAgbVN3YXBDaGFpbiA9IG5ld1N3YXBDaGFpbjsKLQotICAgIG1C
YWNrQnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgcmVzdWx0ID0gbVN3YXBDaGFpbi0+R2V0QmFja0J1
ZmZlcigwLCBEM0RCQUNLQlVGRkVSX1RZUEVfTU9OTywgJm1CYWNrQnVmZmVyKTsKLSAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1N3YXBDaGFpbjkuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvU3dhcENoYWluOS5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmE2MmJkODZmNmE2NWI3ZGQ4YjdiZDQyMjA3NjQx
NGY0OTBkNDVlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvU3dhcENoYWlu
OS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykg
MjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFN3
YXBDaGFpbjkuaDogRGVmaW5lcyBhIGJhY2stZW5kIHNwZWNpZmljIGNsYXNzIGZvciB0aGUgRDNE
OSBzd2FwIGNoYWluLgotCi0jaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9TV0FQQ0hBSU45X0hf
Ci0jZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9TV0FQQ0hBSU45X0hfCi0KLSNpbmNsdWRlICJj
b21tb24vYW5nbGV1dGlscy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9Td2FwQ2hh
aW4uaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci1jbGFzcyBSZW5kZXJlcjk7Ci0KLWNsYXNzIFN3YXBD
aGFpbjkgOiBwdWJsaWMgU3dhcENoYWluCi17Ci0gIHB1YmxpYzoKLSAgICBTd2FwQ2hhaW45KFJl
bmRlcmVyOSAqcmVuZGVyZXIsIEhXTkQgd2luZG93LCBIQU5ETEUgc2hhcmVIYW5kbGUsCi0gICAg
ICAgICAgICAgICBHTGVudW0gYmFja0J1ZmZlckZvcm1hdCwgR0xlbnVtIGRlcHRoQnVmZmVyRm9y
bWF0KTsKLSAgICB2aXJ0dWFsIH5Td2FwQ2hhaW45KCk7Ci0KLSAgICBFR0xpbnQgcmVzaXplKEVH
TGludCBiYWNrYnVmZmVyV2lkdGgsIEVHTGludCBiYWNrYnVmZmVySGVpZ2h0KTsKLSAgICB2aXJ0
dWFsIEVHTGludCByZXNldChFR0xpbnQgYmFja2J1ZmZlcldpZHRoLCBFR0xpbnQgYmFja2J1ZmZl
ckhlaWdodCwgRUdMaW50IHN3YXBJbnRlcnZhbCk7Ci0gICAgdmlydHVhbCBFR0xpbnQgc3dhcFJl
Y3QoRUdMaW50IHgsIEVHTGludCB5LCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQpOwotICAg
IHZpcnR1YWwgdm9pZCByZWNyZWF0ZSgpOwotCi0gICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNl
OSAqZ2V0UmVuZGVyVGFyZ2V0KCk7Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0
RGVwdGhTdGVuY2lsKCk7Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RUZXh0dXJlOSAqZ2V0T2Zmc2Ny
ZWVuVGV4dHVyZSgpOwotCi0gICAgc3RhdGljIFN3YXBDaGFpbjkgKm1ha2VTd2FwQ2hhaW45KFN3
YXBDaGFpbiAqc3dhcENoYWluKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihTd2FwQ2hhaW45KTsKLQotICAgIHZvaWQgcmVsZWFzZSgpOwotCi0gICAgUmVuZGVy
ZXI5ICptUmVuZGVyZXI7Ci0gICAgRUdMaW50IG1IZWlnaHQ7Ci0gICAgRUdMaW50IG1XaWR0aDsK
LSAgICBFR0xpbnQgbVN3YXBJbnRlcnZhbDsKLQotICAgIElEaXJlY3QzRFN3YXBDaGFpbjkgKm1T
d2FwQ2hhaW47Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKm1CYWNrQnVmZmVyOwotICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICptUmVuZGVyVGFyZ2V0OwotICAgIElEaXJlY3QzRFN1cmZhY2U5ICptRGVw
dGhTdGVuY2lsOwotICAgIElEaXJlY3QzRFRleHR1cmU5KiBtT2Zmc2NyZWVuVGV4dHVyZTsKLX07
Ci0KLX0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfU1dBUENIQUlOOV9IXwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9UZXh0
dXJlU3RvcmFnZTExLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvVGV4dHVyZVN0b3JhZ2UxMS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDQxNTE1ZWQ3Njk2MjQ5NTk4ZTUzMzQzNDk2MGEzMjIxYWI0ZjIzNTIuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZTExLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDY2NyArMCwwIEBACi0jaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
Ci0vLwotCi0vLyBUZXh0dXJlU3RvcmFnZTExLmNwcDogSW1wbGVtZW50cyB0aGUgYWJzdHJhY3Qg
cng6OlRleHR1cmVTdG9yYWdlMTEgY2xhc3MgYW5kIGl0cyBjb25jcmV0ZSBkZXJpdmVkCi0vLyBj
bGFzc2VzIFRleHR1cmVTdG9yYWdlMTFfMkQgYW5kIFRleHR1cmVTdG9yYWdlMTFfQ3ViZSwgd2hp
Y2ggYWN0IGFzIHRoZSBpbnRlcmZhY2UgdG8gdGhlIEQzRDExIHRleHR1cmUuCi0KLSNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0b3JhZ2UxMS5oIgotCi0jaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyMTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvUmVuZGVyVGFyZ2V0MTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvU3dhcENo
YWluMTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXIxMV91dGlscy5o
IgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgotI2luY2x1ZGUgImxpYkdMRVN2
Mi9tYWluLmgiCi0KLW5hbWVzcGFjZSByeAotewotCi1UZXh0dXJlU3RvcmFnZTExOjpUZXh0dXJl
U3RvcmFnZTExKFJlbmRlcmVyICpyZW5kZXJlciwgVUlOVCBiaW5kRmxhZ3MpCi0gICAgOiBtQmlu
ZEZsYWdzKGJpbmRGbGFncyksCi0gICAgICBtTG9kT2Zmc2V0KDApLAotICAgICAgbU1pcExldmVs
cygwKSwKLSAgICAgIG1UZXh0dXJlKE5VTEwpLAotICAgICAgbVRleHR1cmVGb3JtYXQoRFhHSV9G
T1JNQVRfVU5LTk9XTiksCi0gICAgICBtU2hhZGVyUmVzb3VyY2VGb3JtYXQoRFhHSV9GT1JNQVRf
VU5LTk9XTiksCi0gICAgICBtUmVuZGVyVGFyZ2V0Rm9ybWF0KERYR0lfRk9STUFUX1VOS05PV04p
LAotICAgICAgbURlcHRoU3RlbmNpbEZvcm1hdChEWEdJX0ZPUk1BVF9VTktOT1dOKSwKLSAgICAg
IG1TUlYoTlVMTCksCi0gICAgICBtVGV4dHVyZVdpZHRoKDApLAotICAgICAgbVRleHR1cmVIZWln
aHQoMCkKLXsKLSAgICBtUmVuZGVyZXIgPSBSZW5kZXJlcjExOjptYWtlUmVuZGVyZXIxMShyZW5k
ZXJlcik7Ci19Ci0KLVRleHR1cmVTdG9yYWdlMTE6On5UZXh0dXJlU3RvcmFnZTExKCkKLXsKLX0K
LQotVGV4dHVyZVN0b3JhZ2UxMSAqVGV4dHVyZVN0b3JhZ2UxMTo6bWFrZVRleHR1cmVTdG9yYWdl
MTEoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpCi17Ci0gICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZ
UEUoVGV4dHVyZVN0b3JhZ2UxMSosIHN0b3JhZ2UpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
VGV4dHVyZVN0b3JhZ2UxMSo+KHN0b3JhZ2UpOwotfQotCi1EV09SRCBUZXh0dXJlU3RvcmFnZTEx
OjpHZXRUZXh0dXJlQmluZEZsYWdzKERYR0lfRk9STUFUIGZvcm1hdCwgR0xlbnVtIGdsdXNhZ2Us
IGJvb2wgZm9yY2VSZW5kZXJhYmxlKQotewotICAgIFVJTlQgYmluZEZsYWdzID0gRDNEMTFfQklO
RF9TSEFERVJfUkVTT1VSQ0U7Ci0gICAgCi0gICAgaWYgKGQzZDExOjpJc0RlcHRoU3RlbmNpbEZv
cm1hdChmb3JtYXQpKQotICAgIHsKLSAgICAgICAgYmluZEZsYWdzIHw9IEQzRDExX0JJTkRfREVQ
VEhfU1RFTkNJTDsKLSAgICB9Ci0gICAgZWxzZSBpZihmb3JjZVJlbmRlcmFibGUgfHwgKFRleHR1
cmVTdG9yYWdlMTE6OklzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoZm9ybWF0KSAmJiAoZ2x1c2Fn
ZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKSkpCi0gICAgewotICAgICAgICBi
aW5kRmxhZ3MgfD0gRDNEMTFfQklORF9SRU5ERVJfVEFSR0VUOwotICAgIH0KLSAgICByZXR1cm4g
YmluZEZsYWdzOwotfQotCi1ib29sIFRleHR1cmVTdG9yYWdlMTE6OklzVGV4dHVyZUZvcm1hdFJl
bmRlcmFibGUoRFhHSV9GT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaChmb3JtYXQpCi0gICAg
ewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STToKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQThfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9G
TE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X0ZMT0FUOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjhfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfVU5PUk06Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX1IxNl9GTE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X0ZM
T0FUOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VO
T1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk06IAotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9CQzNfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9B
VDogLy8gbm90IHJlbmRlcmFibGUgb24gYWxsIGRldmljZXMKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLX0KLQotVUlOVCBUZXh0dXJlU3RvcmFnZTExOjpnZXRCaW5kRmxhZ3Mo
KSBjb25zdAotewotICAgIHJldHVybiBtQmluZEZsYWdzOwotfQotCi1JRDNEMTFUZXh0dXJlMkQg
KlRleHR1cmVTdG9yYWdlMTE6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bVRleHR1cmU7Ci19Ci0KLWludCBUZXh0dXJlU3RvcmFnZTExOjpnZXRMb2RPZmZzZXQoKSBjb25z
dAotewotICAgIHJldHVybiBtTG9kT2Zmc2V0OwotfQotCi1ib29sIFRleHR1cmVTdG9yYWdlMTE6
OmlzUmVuZGVyVGFyZ2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gKG1CaW5kRmxhZ3MgJiAoRDNE
MTFfQklORF9SRU5ERVJfVEFSR0VUIHwgRDNEMTFfQklORF9ERVBUSF9TVEVOQ0lMKSkgIT0gMDsK
LX0KLSAgICAKLWJvb2wgVGV4dHVyZVN0b3JhZ2UxMTo6aXNNYW5hZ2VkKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLWludCBUZXh0dXJlU3RvcmFnZTExOjpsZXZlbENvdW50KCkK
LXsKLSAgICBpbnQgbGV2ZWxzID0gMDsKLSAgICBpZiAoZ2V0QmFzZVRleHR1cmUoKSkKLSAgICB7
Ci0gICAgICAgIGxldmVscyA9IG1NaXBMZXZlbHMgLSBnZXRMb2RPZmZzZXQoKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGxldmVsczsKLX0KLQotVUlOVCBUZXh0dXJlU3RvcmFnZTExOjpnZXRTdWJyZXNv
dXJjZUluZGV4KGludCBsZXZlbCwgaW50IGZhY2VJbmRleCkKLXsKLSAgICBVSU5UIGluZGV4ID0g
MDsKLSAgICBpZiAoZ2V0QmFzZVRleHR1cmUoKSkKLSAgICB7Ci0gICAgICAgIGluZGV4ID0gRDNE
MTFDYWxjU3VicmVzb3VyY2UobGV2ZWwsIGZhY2VJbmRleCwgbU1pcExldmVscyk7Ci0gICAgfQot
ICAgIHJldHVybiBpbmRleDsKLX0KLQotYm9vbCBUZXh0dXJlU3RvcmFnZTExOjp1cGRhdGVTdWJy
ZXNvdXJjZUxldmVsKElEM0QxMVRleHR1cmUyRCAqc3JjVGV4dHVyZSwgdW5zaWduZWQgaW50IHNv
dXJjZVN1YnJlc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBsZXZlbCwgaW50IGZhY2UsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKHNyY1RleHR1cmUpCi0gICAgewotICAg
ICAgICAvLyBSb3VuZCB1cCB0aGUgd2lkdGggYW5kIGhlaWdodCB0byB0aGUgbmVhcmVzdCBtdWx0
aXBsZSBvZiBkaW1lbnNpb24gYWxpZ25tZW50Ci0gICAgICAgIHVuc2lnbmVkIGludCBkaW1lbnNp
b25BbGlnbm1lbnQgPSBkM2QxMTo6R2V0VGV4dHVyZUZvcm1hdERpbWVuc2lvbkFsaWdubWVudCht
VGV4dHVyZUZvcm1hdCk7Ci0gICAgICAgIHdpZHRoID0gd2lkdGggKyBkaW1lbnNpb25BbGlnbm1l
bnQgLSAxIC0gKHdpZHRoIC0gMSkgJSBkaW1lbnNpb25BbGlnbm1lbnQ7Ci0gICAgICAgIGhlaWdo
dCA9IGhlaWdodCArIGRpbWVuc2lvbkFsaWdubWVudCAtIDEgLSAoaGVpZ2h0IC0gMSkgJSBkaW1l
bnNpb25BbGlnbm1lbnQ7Ci0KLSAgICAgICAgRDNEMTFfQk9YIHNyY0JveDsKLSAgICAgICAgc3Jj
Qm94LmxlZnQgPSB4b2Zmc2V0OwotICAgICAgICBzcmNCb3gudG9wID0geW9mZnNldDsKLSAgICAg
ICAgc3JjQm94LnJpZ2h0ID0geG9mZnNldCArIHdpZHRoOwotICAgICAgICBzcmNCb3guYm90dG9t
ID0geW9mZnNldCArIGhlaWdodDsKLSAgICAgICAgc3JjQm94LmZyb250ID0gMDsKLSAgICAgICAg
c3JjQm94LmJhY2sgPSAxOwotCi0gICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQg
PSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKLSAgICAgICAgCi0gICAgICAgIEFTU0VS
VChnZXRCYXNlVGV4dHVyZSgpKTsKLSAgICAgICAgY29udGV4dC0+Q29weVN1YnJlc291cmNlUmVn
aW9uKGdldEJhc2VUZXh0dXJlKCksIGdldFN1YnJlc291cmNlSW5kZXgobGV2ZWwgKyBtTG9kT2Zm
c2V0LCBmYWNlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvZmZz
ZXQsIHlvZmZzZXQsIDAsIHNyY1RleHR1cmUsIHNvdXJjZVN1YnJlc291cmNlLCAmc3JjQm94KTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12
b2lkIFRleHR1cmVTdG9yYWdlMTE6OmdlbmVyYXRlTWlwbWFwTGF5ZXIoUmVuZGVyVGFyZ2V0MTEg
KnNvdXJjZSwgUmVuZGVyVGFyZ2V0MTEgKmRlc3QpCi17Ci0gICAgaWYgKHNvdXJjZSAmJiBkZXN0
KQotICAgIHsKLSAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzb3VyY2VTUlYgPSBz
b3VyY2UtPmdldFNoYWRlclJlc291cmNlVmlldygpOwotICAgICAgICBJRDNEMTFSZW5kZXJUYXJn
ZXRWaWV3ICpkZXN0UlRWID0gZGVzdC0+Z2V0UmVuZGVyVGFyZ2V0VmlldygpOwotCi0gICAgICAg
IGlmIChzb3VyY2VTUlYgJiYgZGVzdFJUVikKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlJl
Y3RhbmdsZSBzb3VyY2VBcmVhOwotICAgICAgICAgICAgc291cmNlQXJlYS54ID0gMDsKLSAgICAg
ICAgICAgIHNvdXJjZUFyZWEueSA9IDA7Ci0gICAgICAgICAgICBzb3VyY2VBcmVhLndpZHRoID0g
c291cmNlLT5nZXRXaWR0aCgpOwotICAgICAgICAgICAgc291cmNlQXJlYS5oZWlnaHQgPSBzb3Vy
Y2UtPmdldEhlaWdodCgpOwotCi0gICAgICAgICAgICBnbDo6UmVjdGFuZ2xlIGRlc3RBcmVhOwot
ICAgICAgICAgICAgZGVzdEFyZWEueCA9IDA7Ci0gICAgICAgICAgICBkZXN0QXJlYS55ID0gMDsK
LSAgICAgICAgICAgIGRlc3RBcmVhLndpZHRoID0gZGVzdC0+Z2V0V2lkdGgoKTsKLSAgICAgICAg
ICAgIGRlc3RBcmVhLmhlaWdodCA9IGRlc3QtPmdldEhlaWdodCgpOwotCi0gICAgICAgICAgICBt
UmVuZGVyZXItPmNvcHlUZXh0dXJlKHNvdXJjZVNSViwgc291cmNlQXJlYSwgc291cmNlLT5nZXRX
aWR0aCgpLCBzb3VyY2UtPmdldEhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0UlRWLCBkZXN0QXJlYSwgZGVzdC0+Z2V0V2lkdGgoKSwgZGVzdC0+Z2V0SGVp
Z2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHQkEpOwotICAg
ICAgICB9Ci0gICAgfQotfQotCi1UZXh0dXJlU3RvcmFnZTExXzJEOjpUZXh0dXJlU3RvcmFnZTEx
XzJEKFJlbmRlcmVyICpyZW5kZXJlciwgU3dhcENoYWluMTEgKnN3YXBjaGFpbikKLSAgICA6IFRl
eHR1cmVTdG9yYWdlMTEocmVuZGVyZXIsIEQzRDExX0JJTkRfUkVOREVSX1RBUkdFVCB8IEQzRDEx
X0JJTkRfU0hBREVSX1JFU09VUkNFKQotewotICAgIG1UZXh0dXJlID0gc3dhcGNoYWluLT5nZXRP
ZmZzY3JlZW5UZXh0dXJlKCk7Ci0gICAgbVNSViA9IHN3YXBjaGFpbi0+Z2V0UmVuZGVyVGFyZ2V0
U2hhZGVyUmVzb3VyY2UoKTsKLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6
OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQotICAgIHsKLSAgICAgICAg
bVJlbmRlclRhcmdldFtpXSA9IE5VTEw7Ci0gICAgfQotCi0gICAgRDNEMTFfVEVYVFVSRTJEX0RF
U0MgdGV4RGVzYzsKLSAgICBtVGV4dHVyZS0+R2V0RGVzYygmdGV4RGVzYyk7Ci0gICAgbU1pcExl
dmVscyA9IHRleERlc2MuTWlwTGV2ZWxzOwotICAgIG1UZXh0dXJlRm9ybWF0ID0gdGV4RGVzYy5G
b3JtYXQ7Ci0gICAgbVRleHR1cmVXaWR0aCA9IHRleERlc2MuV2lkdGg7Ci0gICAgbVRleHR1cmVI
ZWlnaHQgPSB0ZXhEZXNjLkhlaWdodDsKLQotICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVX
X0RFU0Mgc3J2RGVzYzsKLSAgICBtU1JWLT5HZXREZXNjKCZzcnZEZXNjKTsKLSAgICBtU2hhZGVy
UmVzb3VyY2VGb3JtYXQgPSBzcnZEZXNjLkZvcm1hdDsKLQotICAgIElEM0QxMVJlbmRlclRhcmdl
dFZpZXcqIG9mZnNjcmVlblJUViA9IHN3YXBjaGFpbi0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0gICAg
RDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVzYzsKLSAgICBvZmZzY3JlZW5SVFYt
PkdldERlc2MoJnJ0dkRlc2MpOwotICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBydHZEZXNjLkZv
cm1hdDsKLSAgICBvZmZzY3JlZW5SVFYtPlJlbGVhc2UoKTsKLQotICAgIG1EZXB0aFN0ZW5jaWxG
b3JtYXQgPSBEWEdJX0ZPUk1BVF9VTktOT1dOOwotfQotCi1UZXh0dXJlU3RvcmFnZTExXzJEOjpU
ZXh0dXJlU3RvcmFnZTExXzJEKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLSAgICA6IFRleHR1cmVTdG9yYWdlMTEocmVuZGVy
ZXIsIEdldFRleHR1cmVCaW5kRmxhZ3MoZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlRm9ybWF0KGlu
dGVybmFsZm9ybWF0KSwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSkpCi17Ci0gICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxT
OyBpKyspCi0gICAgewotICAgICAgICBtUmVuZGVyVGFyZ2V0W2ldID0gTlVMTDsKLSAgICB9Ci0K
LSAgICBEWEdJX0ZPUk1BVCBjb252ZXJ0ZWRGb3JtYXQgPSBnbF9kM2QxMTo6Q29udmVydFRleHR1
cmVGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwotICAgIGlmIChkM2QxMTo6SXNEZXB0aFN0ZW5jaWxG
b3JtYXQoY29udmVydGVkRm9ybWF0KSkKLSAgICB7Ci0gICAgICAgIG1UZXh0dXJlRm9ybWF0ID0g
ZDNkMTE6OkdldERlcHRoVGV4dHVyZUZvcm1hdChjb252ZXJ0ZWRGb3JtYXQpOwotICAgICAgICBt
U2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBkM2QxMTo6R2V0RGVwdGhTaGFkZXJSZXNvdXJjZUZvcm1h
dChjb252ZXJ0ZWRGb3JtYXQpOwotICAgICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0ID0gY29udmVy
dGVkRm9ybWF0OwotICAgICAgICBtUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5L
Tk9XTjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgbVRleHR1cmVGb3JtYXQgPSBj
b252ZXJ0ZWRGb3JtYXQ7Ci0gICAgICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IGNvbnZlcnRl
ZEZvcm1hdDsKLSAgICAgICAgbURlcHRoU3RlbmNpbEZvcm1hdCA9IERYR0lfRk9STUFUX1VOS05P
V047Ci0gICAgICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBjb252ZXJ0ZWRGb3JtYXQ7Ci0gICAg
fQotCi0gICAgLy8gaWYgdGhlIHdpZHRoIG9yIGhlaWdodCBpcyBub3QgcG9zaXRpdmUgdGhpcyBz
aG91bGQgYmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBsZXRlIHRleHR1cmUKLSAgICAvLyB3ZSBoYW5k
bGUgdGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBkM2QgdGV4dHVyZSBjcmVhdGlvbgotICAgIGlm
ICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkKLSAgICB7Ci0gICAgICAgIC8vIGFkanVzdCBzaXpl
IGlmIG5lZWRlZCBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlcwotICAgICAgICBnbDo6TWFrZVZhbGlk
U2l6ZShmYWxzZSwgZ2w6OklzQ29tcHJlc3NlZChpbnRlcm5hbGZvcm1hdCksICZ3aWR0aCwgJmhl
aWdodCwgJm1Mb2RPZmZzZXQpOwotCi0gICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJl
bmRlcmVyLT5nZXREZXZpY2UoKTsKLQotICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXNj
OwotICAgICAgICBkZXNjLldpZHRoID0gd2lkdGg7ICAgICAgLy8gQ29tcHJlc3NlZCB0ZXh0dXJl
IHNpemUgY29uc3RyYWludHM/Ci0gICAgICAgIGRlc2MuSGVpZ2h0ID0gaGVpZ2h0OwotICAgICAg
ICBkZXNjLk1pcExldmVscyA9IChsZXZlbHMgPiAwKSA/IGxldmVscyArIG1Mb2RPZmZzZXQgOiAw
OwotICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IDE7Ci0gICAgICAgIGRlc2MuRm9ybWF0ID0gbVRl
eHR1cmVGb3JtYXQ7Ci0gICAgICAgIGRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7Ci0gICAgICAg
IGRlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKLSAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDEx
X1VTQUdFX0RFRkFVTFQ7Ci0gICAgICAgIGRlc2MuQmluZEZsYWdzID0gZ2V0QmluZEZsYWdzKCk7
Ci0gICAgICAgIGRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOwotICAgICAgICBkZXNjLk1pc2NGbGFn
cyA9IDA7Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUy
RCgmZGVzYywgTlVMTCwgJm1UZXh0dXJlKTsKLQotICAgICAgICAvLyB0aGlzIGNhbiBoYXBwZW4g
ZnJvbSB3aW5kb3dzIFREUgotICAgICAgICBpZiAoZDNkMTE6OmlzRGV2aWNlTG9zdEVycm9yKHJl
c3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1SZW5kZXJlci0+bm90aWZ5RGV2aWNlTG9z
dCgpOwotICAgICAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBBU1NFUlQocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICAgICAgRVJSKCJDcmVh
dGluZyBpbWFnZSBmYWlsZWQuIik7Ci0gICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBt
VGV4dHVyZS0+R2V0RGVzYygmZGVzYyk7Ci0gICAgICAgICAgICBtTWlwTGV2ZWxzID0gZGVzYy5N
aXBMZXZlbHM7Ci0gICAgICAgICAgICBtVGV4dHVyZVdpZHRoID0gZGVzYy5XaWR0aDsKLSAgICAg
ICAgICAgIG1UZXh0dXJlSGVpZ2h0ID0gZGVzYy5IZWlnaHQ7Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLVRleHR1cmVTdG9yYWdlMTFfMkQ6On5UZXh0dXJlU3RvcmFnZTExXzJEKCkKLXsKLSAgICBp
ZiAobVRleHR1cmUpCi0gICAgewotICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAg
ICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1TUlYpCi0gICAgewotICAgICAg
ICBtU1JWLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1TUlYgPSBOVUxMOwotICAgIH0KLQotICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJF
X0xFVkVMUzsgaSsrKQotICAgIHsKLSAgICAgICAgZGVsZXRlIG1SZW5kZXJUYXJnZXRbaV07Ci0g
ICAgICAgIG1SZW5kZXJUYXJnZXRbaV0gPSBOVUxMOwotICAgIH0KLX0KLQotVGV4dHVyZVN0b3Jh
Z2UxMV8yRCAqVGV4dHVyZVN0b3JhZ2UxMV8yRDo6bWFrZVRleHR1cmVTdG9yYWdlMTFfMkQoVGV4
dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpCi17Ci0gICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoVGV4
dHVyZVN0b3JhZ2UxMV8yRCosIHN0b3JhZ2UpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4
dHVyZVN0b3JhZ2UxMV8yRCo+KHN0b3JhZ2UpOwotfQotCi1SZW5kZXJUYXJnZXQgKlRleHR1cmVT
dG9yYWdlMTFfMkQ6OmdldFJlbmRlclRhcmdldChpbnQgbGV2ZWwpCi17Ci0gICAgaWYgKGxldmVs
ID49IDAgJiYgbGV2ZWwgPCBzdGF0aWNfY2FzdDxpbnQ+KG1NaXBMZXZlbHMpKQotICAgIHsKLSAg
ICAgICAgaWYgKCFtUmVuZGVyVGFyZ2V0W2xldmVsXSkKLSAgICAgICAgewotICAgICAgICAgICAg
SUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotICAgICAgICAg
ICAgSFJFU1VMVCByZXN1bHQ7Ci0KLSAgICAgICAgICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9W
SUVXX0RFU0Mgc3J2RGVzYzsKLSAgICAgICAgICAgIHNydkRlc2MuRm9ybWF0ID0gbVNoYWRlclJl
c291cmNlRm9ybWF0OwotICAgICAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFf
U1JWX0RJTUVOU0lPTl9URVhUVVJFMkQ7Ci0gICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyRC5N
b3N0RGV0YWlsZWRNaXAgPSBsZXZlbDsKLSAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJELk1p
cExldmVscyA9IDE7Ci0KLSAgICAgICAgICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2
OwotICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXco
bVRleHR1cmUsICZzcnZEZXNjLCAmc3J2KTsKLQotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBF
X09VVE9GTUVNT1JZKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
LQotICAgICAgICAgICAgaWYgKG1SZW5kZXJUYXJnZXRGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5L
Tk9XTikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VU
X1ZJRVdfREVTQyBydHZEZXNjOwotICAgICAgICAgICAgICAgIHJ0dkRlc2MuRm9ybWF0ID0gbVJl
bmRlclRhcmdldEZvcm1hdDsKLSAgICAgICAgICAgICAgICBydHZEZXNjLlZpZXdEaW1lbnNpb24g
PSBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyRDsKLSAgICAgICAgICAgICAgICBydHZEZXNj
LlRleHR1cmUyRC5NaXBTbGljZSA9IGxldmVsOwotCi0gICAgICAgICAgICAgICAgSUQzRDExUmVu
ZGVyVGFyZ2V0VmlldyAqcnR2OwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3Jl
YXRlUmVuZGVyVGFyZ2V0VmlldyhtVGV4dHVyZSwgJnJ0dkRlc2MsICZydHYpOwotCi0gICAgICAg
ICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgc3J2LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFy
Z2V0Kj4oTlVMTCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgICAgICAgICAgLy8gUmVuZGVyVGFyZ2V0MTEg
ZXhwZWN0cyB0byBiZSB0aGUgb3duZXIgb2YgdGhlIHJlc291cmNlcyBpdCBpcyBnaXZlbiBidXQg
VGV4dHVyZVN0b3JhZ2UxMQotICAgICAgICAgICAgICAgIC8vIGFsc28gbmVlZHMgdG8ga2VlcCBh
IHJlZmVyZW5jZSB0byB0aGUgdGV4dHVyZS4KLSAgICAgICAgICAgICAgICBtVGV4dHVyZS0+QWRk
UmVmKCk7Ci0KLSAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2xldmVsXSA9IG5ldyBSZW5k
ZXJUYXJnZXQxMShtUmVuZGVyZXIsIHJ0diwgbVRleHR1cmUsIHNydiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4
dHVyZVdpZHRoID4+IGxldmVsLCAxVSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobVRleHR1cmVIZWlnaHQgPj4gbGV2
ZWwsIDFVKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtRGVwdGhTdGVu
Y2lsRm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgRDNEMTFfREVQVEhfU1RFTkNJTF9WSUVXX0RFU0MgZHN2RGVzYzsKLSAgICAgICAg
ICAgICAgICBkc3ZEZXNjLkZvcm1hdCA9IG1EZXB0aFN0ZW5jaWxGb3JtYXQ7Ci0gICAgICAgICAg
ICAgICAgZHN2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJF
MkQ7Ci0gICAgICAgICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkQuTWlwU2xpY2UgPSBsZXZlbDsK
LSAgICAgICAgICAgICAgICBkc3ZEZXNjLkZsYWdzID0gMDsKLQotICAgICAgICAgICAgICAgIElE
M0QxMURlcHRoU3RlbmNpbFZpZXcgKmRzdjsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZp
Y2UtPkNyZWF0ZURlcHRoU3RlbmNpbFZpZXcobVRleHR1cmUsICZkc3ZEZXNjLCAmZHN2KTsKLQot
ICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHNydi0+UmVsZWFzZSgpOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PFJl
bmRlclRhcmdldCo+KE5VTEwpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgICAgICAgICAgICAgIC8vIFJlbmRlclRh
cmdldDExIGV4cGVjdHMgdG8gYmUgdGhlIG93bmVyIG9mIHRoZSByZXNvdXJjZXMgaXQgaXMgZ2l2
ZW4gYnV0IFRleHR1cmVTdG9yYWdlMTEKLSAgICAgICAgICAgICAgICAvLyBhbHNvIG5lZWRzIHRv
IGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIHRleHR1cmUuCi0gICAgICAgICAgICAgICAgbVRleHR1
cmUtPkFkZFJlZigpOwotCi0gICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldFtsZXZlbF0gPSBu
ZXcgUmVuZGVyVGFyZ2V0MTEobVJlbmRlcmVyLCBkc3YsIG1UZXh0dXJlLCBzcnYsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpt
YXgobVRleHR1cmVXaWR0aCA+PiBsZXZlbCwgMVUpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1UZXh0dXJlSGVpZ2h0
ID4+IGxldmVsLCAxVSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbVJlbmRlclRhcmdldFtsZXZlbF07Ci0gICAgfQot
ICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLX0KLQotSUQzRDEx
U2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3RvcmFnZTExXzJEOjpnZXRTUlYoKQotewotICAg
IGlmICghbVNSVikKLSAgICB7Ci0gICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRl
cmVyLT5nZXREZXZpY2UoKTsKLQotICAgICAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19E
RVNDIHNydkRlc2M7Ci0gICAgICAgIHNydkRlc2MuRm9ybWF0ID0gbVNoYWRlclJlc291cmNlRm9y
bWF0OwotICAgICAgICBzcnZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9O
X1RFWFRVUkUyRDsKLSAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkQuTWlwTGV2ZWxzID0gKG1NaXBM
ZXZlbHMgPT0gMCA/IC0xIDogbU1pcExldmVscyk7Ci0gICAgICAgIHNydkRlc2MuVGV4dHVyZTJE
Lk1vc3REZXRhaWxlZE1pcCA9IDA7Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2Ut
PkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyhtVGV4dHVyZSwgJnNydkRlc2MsICZtU1JWKTsKLQot
ICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8SUQzRDEx
U2hhZGVyUmVzb3VyY2VWaWV3Kj4oTlVMTCkpOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1TUlY7Ci19Ci0KLXZvaWQg
VGV4dHVyZVN0b3JhZ2UxMV8yRDo6Z2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKQotewotICAgIFJl
bmRlclRhcmdldDExICpzb3VyY2UgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDEx
KGdldFJlbmRlclRhcmdldChsZXZlbCAtIDEpKTsKLSAgICBSZW5kZXJUYXJnZXQxMSAqZGVzdCA9
IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFyZ2V0KGxldmVs
KSk7Ci0KLSAgICBnZW5lcmF0ZU1pcG1hcExheWVyKHNvdXJjZSwgZGVzdCk7Ci19Ci0KLVRleHR1
cmVTdG9yYWdlMTFfQ3ViZTo6VGV4dHVyZVN0b3JhZ2UxMV9DdWJlKFJlbmRlcmVyICpyZW5kZXJl
ciwgaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wg
Zm9yY2VSZW5kZXJhYmxlLCBpbnQgc2l6ZSkKLSAgICA6IFRleHR1cmVTdG9yYWdlMTEocmVuZGVy
ZXIsIEdldFRleHR1cmVCaW5kRmxhZ3MoZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlRm9ybWF0KGlu
dGVybmFsZm9ybWF0KSwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSkpCi17Ci0gICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCA2OyBpKyspCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCBqID0gMDsgaiA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGor
KykKLSAgICAgICAgewotICAgICAgICAgICAgbVJlbmRlclRhcmdldFtpXVtqXSA9IE5VTEw7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBEWEdJX0ZPUk1BVCBjb252ZXJ0ZWRGb3JtYXQgPSBnbF9k
M2QxMTo6Q29udmVydFRleHR1cmVGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwotICAgIGlmIChkM2Qx
MTo6SXNEZXB0aFN0ZW5jaWxGb3JtYXQoY29udmVydGVkRm9ybWF0KSkKLSAgICB7Ci0gICAgICAg
IG1UZXh0dXJlRm9ybWF0ID0gZDNkMTE6OkdldERlcHRoVGV4dHVyZUZvcm1hdChjb252ZXJ0ZWRG
b3JtYXQpOwotICAgICAgICBtU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBkM2QxMTo6R2V0RGVwdGhT
aGFkZXJSZXNvdXJjZUZvcm1hdChjb252ZXJ0ZWRGb3JtYXQpOwotICAgICAgICBtRGVwdGhTdGVu
Y2lsRm9ybWF0ID0gY29udmVydGVkRm9ybWF0OwotICAgICAgICBtUmVuZGVyVGFyZ2V0Rm9ybWF0
ID0gRFhHSV9GT1JNQVRfVU5LTk9XTjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAg
bVRleHR1cmVGb3JtYXQgPSBjb252ZXJ0ZWRGb3JtYXQ7Ci0gICAgICAgIG1TaGFkZXJSZXNvdXJj
ZUZvcm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKLSAgICAgICAgbURlcHRoU3RlbmNpbEZvcm1hdCA9
IERYR0lfRk9STUFUX1VOS05PV047Ci0gICAgICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBjb252
ZXJ0ZWRGb3JtYXQ7Ci0gICAgfQotCi0gICAgLy8gaWYgdGhlIHNpemUgaXMgbm90IHBvc2l0aXZl
IHRoaXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJlCi0gICAgLy8g
d2UgaGFuZGxlIHRoYXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRpb24K
LSAgICBpZiAoc2l6ZSA+IDApCi0gICAgewotICAgICAgICAvLyBhZGp1c3Qgc2l6ZSBpZiBuZWVk
ZWQgZm9yIGNvbXByZXNzZWQgdGV4dHVyZXMKLSAgICAgICAgaW50IGhlaWdodCA9IHNpemU7Ci0g
ICAgICAgIGdsOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBnbDo6SXNDb21wcmVzc2VkKGludGVybmFs
Zm9ybWF0KSwgJnNpemUsICZoZWlnaHQsICZtTG9kT2Zmc2V0KTsKLQotICAgICAgICBJRDNEMTFE
ZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0KLSAgICAgICAgRDNEMTFf
VEVYVFVSRTJEX0RFU0MgZGVzYzsKLSAgICAgICAgZGVzYy5XaWR0aCA9IHNpemU7Ci0gICAgICAg
IGRlc2MuSGVpZ2h0ID0gc2l6ZTsKLSAgICAgICAgZGVzYy5NaXBMZXZlbHMgPSAobGV2ZWxzID4g
MCkgPyBsZXZlbHMgKyBtTG9kT2Zmc2V0IDogMDsKLSAgICAgICAgZGVzYy5BcnJheVNpemUgPSA2
OwotICAgICAgICBkZXNjLkZvcm1hdCA9IG1UZXh0dXJlRm9ybWF0OwotICAgICAgICBkZXNjLlNh
bXBsZURlc2MuQ291bnQgPSAxOwotICAgICAgICBkZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7
Ci0gICAgICAgIGRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOwotICAgICAgICBkZXNj
LkJpbmRGbGFncyA9IGdldEJpbmRGbGFncygpOwotICAgICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdz
ID0gMDsKLSAgICAgICAgZGVzYy5NaXNjRmxhZ3MgPSBEM0QxMV9SRVNPVVJDRV9NSVNDX1RFWFRV
UkVDVUJFOwotCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJl
MkQoJmRlc2MsIE5VTEwsICZtVGV4dHVyZSk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQp
KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkp
OwotICAgICAgICAgICAgRVJSKCJDcmVhdGluZyBpbWFnZSBmYWlsZWQuIik7Ci0gICAgICAgICAg
ICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtVGV4dHVyZS0+R2V0RGVzYygmZGVzYyk7Ci0gICAgICAg
ICAgICBtTWlwTGV2ZWxzID0gZGVzYy5NaXBMZXZlbHM7Ci0gICAgICAgICAgICBtVGV4dHVyZVdp
ZHRoID0gZGVzYy5XaWR0aDsKLSAgICAgICAgICAgIG1UZXh0dXJlSGVpZ2h0ID0gZGVzYy5IZWln
aHQ7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6flRleHR1
cmVTdG9yYWdlMTFfQ3ViZSgpCi17Ci0gICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAg
bVRleHR1cmUtPlJlbGVhc2UoKTsKLSAgICAgICAgbVRleHR1cmUgPSBOVUxMOwotICAgIH0KLQot
ICAgIGlmIChtU1JWKQotICAgIHsKLSAgICAgICAgbVNSVi0+UmVsZWFzZSgpOwotICAgICAgICBt
U1JWID0gTlVMTDsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IDY7
IGkrKykKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgZ2w6OklN
UExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaisrKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBkZWxldGUgbVJlbmRlclRhcmdldFtpXVtqXTsKLSAgICAgICAgICAgIG1SZW5kZXJUYXJn
ZXRbaV1bal0gPSBOVUxMOwotICAgICAgICB9Ci0gICAgfQotfQotCi1UZXh0dXJlU3RvcmFnZTEx
X0N1YmUgKlRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlMTFfQ3ViZShU
ZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSkKLXsKLSAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShU
ZXh0dXJlU3RvcmFnZTExX0N1YmUqLCBzdG9yYWdlKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PFRleHR1cmVTdG9yYWdlMTFfQ3ViZSo+KHN0b3JhZ2UpOwotfQotCi1SZW5kZXJUYXJnZXQgKlRl
eHR1cmVTdG9yYWdlMTFfQ3ViZTo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0LCBp
bnQgbGV2ZWwpCi17Ci0gICAgdW5zaWduZWQgaW50IGZhY2VJZHggPSBnbDo6VGV4dHVyZUN1YmVN
YXA6OmZhY2VJbmRleChmYWNlVGFyZ2V0KTsKLSAgICBpZiAobGV2ZWwgPj0gMCAmJiBsZXZlbCA8
IHN0YXRpY19jYXN0PGludD4obU1pcExldmVscykpCi0gICAgewotICAgICAgICBpZiAoIW1SZW5k
ZXJUYXJnZXRbZmFjZUlkeF1bbGV2ZWxdKQotICAgICAgICB7Ci0gICAgICAgICAgICBJRDNEMTFE
ZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0gICAgICAgICAgICBIUkVT
VUxUIHJlc3VsdDsKLQotICAgICAgICAgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVT
QyBzcnZEZXNjOwotICAgICAgICAgICAgc3J2RGVzYy5Gb3JtYXQgPSBtU2hhZGVyUmVzb3VyY2VG
b3JtYXQ7Ci0gICAgICAgICAgICBzcnZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElN
RU5TSU9OX1RFWFRVUkUyREFSUkFZOyAvLyBXaWxsIGJlIHVzZWQgd2l0aCBUZXh0dXJlMkQgc2Ft
cGxlciwgbm90IFRleHR1cmVDdWJlCi0gICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5
Lk1vc3REZXRhaWxlZE1pcCA9IGxldmVsOwotICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRB
cnJheS5NaXBMZXZlbHMgPSAxOwotICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5G
aXJzdEFycmF5U2xpY2UgPSBmYWNlSWR4OwotICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRB
cnJheS5BcnJheVNpemUgPSAxOwotCi0gICAgICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZp
ZXcgKnNydjsKLSAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3Vy
Y2VWaWV3KG1UZXh0dXJlLCAmc3J2RGVzYywgJnNydik7Ci0KLSAgICAgICAgICAgIGlmIChyZXN1
bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PFJlbmRlclRhcmdldCo+
KE5VTEwpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7Ci0KLSAgICAgICAgICAgIGlmIChtUmVuZGVyVGFyZ2V0Rm9ybWF0ICE9IERYR0lfRk9S
TUFUX1VOS05PV04pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRDNEMTFfUkVOREVS
X1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVzYzsKLSAgICAgICAgICAgICAgICBydHZEZXNjLkZvcm1h
dCA9IG1SZW5kZXJUYXJnZXRGb3JtYXQ7Ci0gICAgICAgICAgICAgICAgcnR2RGVzYy5WaWV3RGlt
ZW5zaW9uID0gRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMkRBUlJBWTsKLSAgICAgICAgICAg
ICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5Lk1pcFNsaWNlID0gbGV2ZWw7Ci0gICAgICAgICAg
ICAgICAgcnR2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSBmYWNlSWR4Owot
ICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0gMTsKLQot
ICAgICAgICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0djsKLSAgICAgICAgICAg
ICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobVRleHR1cmUsICZy
dHZEZXNjLCAmcnR2KTsKLQotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1F
TU9SWSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHNydi0+UmVsZWFz
ZSgpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlksIHN0YXRpY19jYXN0PFJlbmRlclRhcmdldCo+KE5VTEwpKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgICAgICAg
ICAgICAgIC8vIFJlbmRlclRhcmdldDExIGV4cGVjdHMgdG8gYmUgdGhlIG93bmVyIG9mIHRoZSBy
ZXNvdXJjZXMgaXQgaXMgZ2l2ZW4gYnV0IFRleHR1cmVTdG9yYWdlMTEKLSAgICAgICAgICAgICAg
ICAvLyBhbHNvIG5lZWRzIHRvIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIHRleHR1cmUuCi0gICAg
ICAgICAgICAgICAgbVRleHR1cmUtPkFkZFJlZigpOwotCi0gICAgICAgICAgICAgICAgbVJlbmRl
clRhcmdldFtmYWNlSWR4XVtsZXZlbF0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJlbmRlcmVyLCBy
dHYsIG1UZXh0dXJlLCBzcnYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobVRleHR1cmVXaWR0aCA+PiBs
ZXZlbCwgMVUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1UZXh0dXJlSGVpZ2h0ID4+IGxldmVsLCAx
VSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobURlcHRoU3RlbmNpbEZv
cm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIEQzRDExX0RFUFRIX1NURU5DSUxfVklFV19ERVNDIGRzdkRlc2M7Ci0gICAgICAgICAgICAg
ICAgZHN2RGVzYy5Gb3JtYXQgPSBtUmVuZGVyVGFyZ2V0Rm9ybWF0OwotICAgICAgICAgICAgICAg
IGRzdkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTJEQVJS
QVk7Ci0gICAgICAgICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBTbGljZSA9IGxl
dmVsOwotICAgICAgICAgICAgICAgIGRzdkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RBcnJheVNs
aWNlID0gZmFjZUlkeDsKLSAgICAgICAgICAgICAgICBkc3ZEZXNjLlRleHR1cmUyREFycmF5LkFy
cmF5U2l6ZSA9IDE7Ci0KLSAgICAgICAgICAgICAgICBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpk
c3Y7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxW
aWV3KG1UZXh0dXJlLCAmZHN2RGVzYywgJmRzdik7Ci0KLSAgICAgICAgICAgICAgICBpZiAocmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBzcnYtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihOVUxMKSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBSZW5kZXJUYXJnZXQxMSBleHBlY3RzIHRvIGJlIHRo
ZSBvd25lciBvZiB0aGUgcmVzb3VyY2VzIGl0IGlzIGdpdmVuIGJ1dCBUZXh0dXJlU3RvcmFnZTEx
Ci0gICAgICAgICAgICAgICAgLy8gYWxzbyBuZWVkcyB0byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRo
ZSB0ZXh0dXJlLgotICAgICAgICAgICAgICAgIG1UZXh0dXJlLT5BZGRSZWYoKTsKLQotICAgICAg
ICAgICAgICAgIG1SZW5kZXJUYXJnZXRbZmFjZUlkeF1bbGV2ZWxdID0gbmV3IFJlbmRlclRhcmdl
dDExKG1SZW5kZXJlciwgZHN2LCBtVGV4dHVyZSwgc3J2LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1U
ZXh0dXJlV2lkdGggPj4gbGV2ZWwsIDFVKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVyZUhl
aWdodCA+PiBsZXZlbCwgMVUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1SZW5kZXJUYXJnZXRbZmFjZUlkeF1bbGV2
ZWxdOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9
Ci19Ci0KLUlEM0QxMVNoYWRlclJlc291cmNlVmlldyAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpn
ZXRTUlYoKQotewotICAgIGlmICghbVNSVikKLSAgICB7Ci0gICAgICAgIElEM0QxMURldmljZSAq
ZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLQotICAgICAgICBEM0QxMV9TSEFERVJf
UkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7Ci0gICAgICAgIHNydkRlc2MuRm9ybWF0ID0gbVNo
YWRlclJlc291cmNlRm9ybWF0OwotICAgICAgICBzcnZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0Qx
MV9TUlZfRElNRU5TSU9OX1RFWFRVUkVDVUJFOwotICAgICAgICBzcnZEZXNjLlRleHR1cmVDdWJl
Lk1pcExldmVscyA9IChtTWlwTGV2ZWxzID09IDAgPyAtMSA6IG1NaXBMZXZlbHMpOwotICAgICAg
ICBzcnZEZXNjLlRleHR1cmVDdWJlLk1vc3REZXRhaWxlZE1pcCA9IDA7Ci0KLSAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyhtVGV4dHVyZSwg
JnNydkRlc2MsICZtU1JWKTsKLQotICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSwgc3RhdGljX2Nhc3Q8SUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3Kj4oTlVMTCkpOwotICAgICAg
ICB9Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIG1TUlY7Ci19Ci0KLXZvaWQgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZW5lcmF0ZU1pcG1h
cChpbnQgZmFjZSwgaW50IGxldmVsKQotewotICAgIFJlbmRlclRhcmdldDExICpzb3VyY2UgPSBS
ZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRlclRhcmdldChHTF9URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCAtIDEpKTsKLSAgICBSZW5kZXJU
YXJnZXQxMSAqZGVzdCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoZ2V0UmVu
ZGVyVGFyZ2V0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsKSk7
Ci0KLSAgICBnZW5lcmF0ZU1pcG1hcExheWVyKHNvdXJjZSwgZGVzdCk7Ci19Ci0KLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVGV4
dHVyZVN0b3JhZ2UxMS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9UZXh0dXJlU3RvcmFnZTExLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDNjNWRlZDA1Yjg4OTc2OTdkMzkzNmQwNTA5N2RmNGRlOThiNzliY2QuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZTExLmgKKysrIC9kZXYvbnVsbApA
QCAtMSwxMjAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRleHR1cmVTdG9yYWdlMTEuaDog
RGVmaW5lcyB0aGUgYWJzdHJhY3Qgcng6OlRleHR1cmVTdG9yYWdlMTEgY2xhc3MgYW5kIGl0cyBj
b25jcmV0ZSBkZXJpdmVkCi0vLyBjbGFzc2VzIFRleHR1cmVTdG9yYWdlMTFfMkQgYW5kIFRleHR1
cmVTdG9yYWdlMTFfQ3ViZSwgd2hpY2ggYWN0IGFzIHRoZSBpbnRlcmZhY2UgdG8gdGhlIEQzRDEx
IHRleHR1cmUuCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX1RFWFRVUkVTVE9SQUdFMTFf
SF8KLSNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1RFWFRVUkVTVE9SQUdFMTFfSF8KLQotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L1RleHR1cmVTdG9yYWdlLmgiCi0KLW5hbWVzcGFjZSByeAotewotY2xhc3MgUmVuZGVyVGFyZ2V0
OwotY2xhc3MgUmVuZGVyVGFyZ2V0MTE7Ci1jbGFzcyBSZW5kZXJlcjsKLWNsYXNzIFJlbmRlcmVy
MTE7Ci1jbGFzcyBTd2FwQ2hhaW4xMTsKLQotY2xhc3MgVGV4dHVyZVN0b3JhZ2UxMSA6IHB1Ymxp
YyBUZXh0dXJlU3RvcmFnZQotewotICBwdWJsaWM6Ci0gICAgVGV4dHVyZVN0b3JhZ2UxMShSZW5k
ZXJlciAqcmVuZGVyZXIsIFVJTlQgYmluZEZsYWdzKTsKLSAgICB2aXJ0dWFsIH5UZXh0dXJlU3Rv
cmFnZTExKCk7Ci0KLSAgICBzdGF0aWMgVGV4dHVyZVN0b3JhZ2UxMSAqbWFrZVRleHR1cmVTdG9y
YWdlMTEoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpOwotCi0gICAgc3RhdGljIERXT1JEIEdldFRl
eHR1cmVCaW5kRmxhZ3MoRFhHSV9GT1JNQVQgZDNkZm10LCBHTGVudW0gZ2x1c2FnZSwgYm9vbCBm
b3JjZVJlbmRlcmFibGUpOwotICAgIHN0YXRpYyBib29sIElzVGV4dHVyZUZvcm1hdFJlbmRlcmFi
bGUoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLQotICAgIFVJTlQgZ2V0QmluZEZsYWdzKCkgY29uc3Q7
Ci0KLSAgICB2aXJ0dWFsIElEM0QxMVRleHR1cmUyRCAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0U1JWKCkgPSAwOwotICAg
IHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoKSB7IHJldHVybiBnZXRSZW5k
ZXJUYXJnZXQoMCk7IH0KLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0
KGludCBsZXZlbCkgeyByZXR1cm4gTlVMTDsgfQotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpn
ZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQpIHsgcmV0dXJuIGdldFJlbmRlclRhcmdl
dChmYWNlVGFyZ2V0LCAwKTsgfQotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJU
YXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkgeyByZXR1cm4gTlVMTDsgfQotCi0g
ICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCkge307Ci0gICAgdmlydHVh
bCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBmYWNlLCBpbnQgbGV2ZWwpIHt9OwotCi0gICAgdmly
dHVhbCBpbnQgZ2V0TG9kT2Zmc2V0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzUmVuZGVy
VGFyZ2V0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzTWFuYWdlZCgpIGNvbnN0OwotICAg
IHZpcnR1YWwgaW50IGxldmVsQ291bnQoKTsKLSAgICBVSU5UIGdldFN1YnJlc291cmNlSW5kZXgo
aW50IGxldmVsLCBpbnQgZmFjZVRhcmdldCk7Ci0KLSAgICBib29sIHVwZGF0ZVN1YnJlc291cmNl
TGV2ZWwoSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCB1bnNpZ25lZCBpbnQgc291cmNlU3VicmVz
b3VyY2UsIGludCBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZh
Y2VUYXJnZXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBnZW5lcmF0ZU1pcG1hcExh
eWVyKFJlbmRlclRhcmdldDExICpzb3VyY2UsIFJlbmRlclRhcmdldDExICpkZXN0KTsKLQotICAg
IFJlbmRlcmVyMTEgKm1SZW5kZXJlcjsKLSAgICBpbnQgbUxvZE9mZnNldDsKLSAgICB1bnNpZ25l
ZCBpbnQgbU1pcExldmVsczsKLQotICAgIElEM0QxMVRleHR1cmUyRCAqbVRleHR1cmU7Ci0gICAg
RFhHSV9GT1JNQVQgbVRleHR1cmVGb3JtYXQ7Ci0gICAgRFhHSV9GT1JNQVQgbVNoYWRlclJlc291
cmNlRm9ybWF0OwotICAgIERYR0lfRk9STUFUIG1SZW5kZXJUYXJnZXRGb3JtYXQ7Ci0gICAgRFhH
SV9GT1JNQVQgbURlcHRoU3RlbmNpbEZvcm1hdDsKLSAgICB1bnNpZ25lZCBpbnQgbVRleHR1cmVX
aWR0aDsKLSAgICB1bnNpZ25lZCBpbnQgbVRleHR1cmVIZWlnaHQ7Ci0KLSAgICBJRDNEMTFTaGFk
ZXJSZXNvdXJjZVZpZXcgKm1TUlY7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oVGV4dHVyZVN0b3JhZ2UxMSk7Ci0KLSAgICBjb25zdCBVSU5UIG1CaW5kRmxhZ3M7
Ci19OwotCi1jbGFzcyBUZXh0dXJlU3RvcmFnZTExXzJEIDogcHVibGljIFRleHR1cmVTdG9yYWdl
MTEKLXsKLSAgcHVibGljOgotICAgIFRleHR1cmVTdG9yYWdlMTFfMkQoUmVuZGVyZXIgKnJlbmRl
cmVyLCBTd2FwQ2hhaW4xMSAqc3dhcGNoYWluKTsKLSAgICBUZXh0dXJlU3RvcmFnZTExXzJEKFJl
bmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVu
dW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCk7Ci0gICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2UxMV8yRCgpOwotCi0gICAgc3RhdGlj
IFRleHR1cmVTdG9yYWdlMTFfMkQgKm1ha2VUZXh0dXJlU3RvcmFnZTExXzJEKFRleHR1cmVTdG9y
YWdlICpzdG9yYWdlKTsKLQotICAgIHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpn
ZXRTUlYoKTsKLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KGludCBs
ZXZlbCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKTsKLQot
ICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZTEx
XzJEKTsKLQotICAgIFJlbmRlclRhcmdldDExICptUmVuZGVyVGFyZ2V0W2dsOjpJTVBMRU1FTlRB
VElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOwotfTsKLQotY2xhc3MgVGV4dHVyZVN0b3JhZ2UxMV9D
dWJlIDogcHVibGljIFRleHR1cmVTdG9yYWdlMTEKLXsKLSAgcHVibGljOgotICAgIFRleHR1cmVT
dG9yYWdlMTFfQ3ViZShSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUp
OwotICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlMTFfQ3ViZSgpOwotCi0gICAgc3RhdGljIFRl
eHR1cmVTdG9yYWdlMTFfQ3ViZSAqbWFrZVRleHR1cmVTdG9yYWdlMTFfQ3ViZShUZXh0dXJlU3Rv
cmFnZSAqc3RvcmFnZSk7Ci0KLSAgICB2aXJ0dWFsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAq
Z2V0U1JWKCk7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVu
dW0gZmFjZVRhcmdldCwgaW50IGxldmVsKTsKLQotICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1p
cG1hcChpbnQgZmFjZSwgaW50IGxldmVsKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZTExX0N1YmUpOwotCi0gICAgUmVuZGVyVGFyZ2V0
MTEgKm1SZW5kZXJUYXJnZXRbNl1bZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVM
U107Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfVEVYVFVSRVNUT1JB
R0UxMV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZTkuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZTkuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA4YWE3NGE3Y2JhMWI0MzcwOGUzMGEzYWY5ZTc1YTcxMGI5Nzg2NGE2
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0b3JhZ2U5LmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDMyOCArMCwwIEBACi0jaW5jbHVkZSAicHJlY29tcGlsZWQu
aCIKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0vLwotCi0vLyBUZXh0dXJlU3RvcmFnZTkuY3BwOiBJbXBsZW1lbnRzIHRo
ZSBhYnN0cmFjdCByeDo6VGV4dHVyZVN0b3JhZ2U5IGNsYXNzIGFuZCBpdHMgY29uY3JldGUgZGVy
aXZlZAotLy8gY2xhc3NlcyBUZXh0dXJlU3RvcmFnZTlfMkQgYW5kIFRleHR1cmVTdG9yYWdlOV9D
dWJlLCB3aGljaCBhY3QgYXMgdGhlIGludGVyZmFjZSB0byB0aGUKLS8vIEQzRDkgdGV4dHVyZS4K
LQotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL1JlbmRlcmVyOS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3Rv
cmFnZTkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvU3dhcENoYWluOS5oIgotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQ5LmgiCi0jaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL3JlbmRlcmVyOV91dGlscy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9U
ZXh0dXJlLmgiCi0KLW5hbWVzcGFjZSByeAotewotVGV4dHVyZVN0b3JhZ2U5OjpUZXh0dXJlU3Rv
cmFnZTkoUmVuZGVyZXIgKnJlbmRlcmVyLCBEV09SRCB1c2FnZSkKLSAgICA6IG1Mb2RPZmZzZXQo
MCksCi0gICAgICBtUmVuZGVyZXIoUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5KHJlbmRlcmVyKSks
Ci0gICAgICBtRDNEVXNhZ2UodXNhZ2UpLAotICAgICAgbUQzRFBvb2wobVJlbmRlcmVyLT5nZXRU
ZXh0dXJlUG9vbCh1c2FnZSkpCi17Ci19Ci0KLVRleHR1cmVTdG9yYWdlOTo6flRleHR1cmVTdG9y
YWdlOSgpCi17Ci19Ci0KLVRleHR1cmVTdG9yYWdlOSAqVGV4dHVyZVN0b3JhZ2U5OjptYWtlVGV4
dHVyZVN0b3JhZ2U5KFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKQotewotICAgIEFTU0VSVChIQVNf
RFlOQU1JQ19UWVBFKFRleHR1cmVTdG9yYWdlOSosIHN0b3JhZ2UpKTsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8VGV4dHVyZVN0b3JhZ2U5Kj4oc3RvcmFnZSk7Ci19Ci0KLURXT1JEIFRleHR1cmVT
dG9yYWdlOTo6R2V0VGV4dHVyZVVzYWdlKEQzREZPUk1BVCBkM2RmbXQsIEdMZW51bSBnbHVzYWdl
LCBib29sIGZvcmNlUmVuZGVyYWJsZSkKLXsKLSAgICBEV09SRCBkM2R1c2FnZSA9IDA7Ci0KLSAg
ICBpZiAoZDNkZm10ID09IEQzREZNVF9JTlRaKQotICAgIHsKLSAgICAgICAgZDNkdXNhZ2UgfD0g
RDNEVVNBR0VfREVQVEhTVEVOQ0lMOwotICAgIH0KLSAgICBlbHNlIGlmKGZvcmNlUmVuZGVyYWJs
ZSB8fCAoVGV4dHVyZVN0b3JhZ2U5OjpJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGQzZGZtdCkg
JiYgKGdsdXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSkpKQotICAgIHsK
LSAgICAgICAgZDNkdXNhZ2UgfD0gRDNEVVNBR0VfUkVOREVSVEFSR0VUOwotICAgIH0KLSAgICBy
ZXR1cm4gZDNkdXNhZ2U7Ci19Ci0KLWJvb2wgVGV4dHVyZVN0b3JhZ2U5OjpJc1RleHR1cmVGb3Jt
YXRSZW5kZXJhYmxlKEQzREZPUk1BVCBmb3JtYXQpCi17Ci0gICAgaWYgKGZvcm1hdCA9PSBEM0RG
TVRfSU5UWikKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBzd2l0Y2go
Zm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0w4OgotICAgICAgY2FzZSBEM0RGTVRf
QThMODoKLSAgICAgIGNhc2UgRDNERk1UX0RYVDE6Ci0gICAgICBjYXNlIEQzREZNVF9EWFQzOgot
ICAgICAgY2FzZSBEM0RGTVRfRFhUNToKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgY2Fz
ZSBEM0RGTVRfQThSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAgICAgIGNh
c2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJG
OgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hB
QkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFRleHR1cmVTdG9y
YWdlOTo6aXNSZW5kZXJUYXJnZXQoKSBjb25zdAotewotICAgIHJldHVybiAobUQzRFVzYWdlICYg
KEQzRFVTQUdFX1JFTkRFUlRBUkdFVCB8IEQzRFVTQUdFX0RFUFRIU1RFTkNJTCkpICE9IDA7Ci19
Ci0KLWJvb2wgVGV4dHVyZVN0b3JhZ2U5Ojppc01hbmFnZWQoKSBjb25zdAotewotICAgIHJldHVy
biAobUQzRFBvb2wgPT0gRDNEUE9PTF9NQU5BR0VEKTsKLX0KLQotRDNEUE9PTCBUZXh0dXJlU3Rv
cmFnZTk6OmdldFBvb2woKSBjb25zdAotewotICAgIHJldHVybiBtRDNEUG9vbDsKLX0KLQotRFdP
UkQgVGV4dHVyZVN0b3JhZ2U5OjpnZXRVc2FnZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EM0RV
c2FnZTsKLX0KLQotaW50IFRleHR1cmVTdG9yYWdlOTo6Z2V0TG9kT2Zmc2V0KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbUxvZE9mZnNldDsKLX0KLQotaW50IFRleHR1cmVTdG9yYWdlOTo6bGV2ZWxD
b3VudCgpCi17Ci0gICAgcmV0dXJuIGdldEJhc2VUZXh0dXJlKCkgPyBnZXRCYXNlVGV4dHVyZSgp
LT5HZXRMZXZlbENvdW50KCkgLSBnZXRMb2RPZmZzZXQoKSA6IDA7Ci19Ci0KLVRleHR1cmVTdG9y
YWdlOV8yRDo6VGV4dHVyZVN0b3JhZ2U5XzJEKFJlbmRlcmVyICpyZW5kZXJlciwgU3dhcENoYWlu
OSAqc3dhcGNoYWluKSA6IFRleHR1cmVTdG9yYWdlOShyZW5kZXJlciwgRDNEVVNBR0VfUkVOREVS
VEFSR0VUKQotewotICAgIElEaXJlY3QzRFRleHR1cmU5ICpzdXJmYWNlVGV4dHVyZSA9IHN3YXBj
aGFpbi0+Z2V0T2Zmc2NyZWVuVGV4dHVyZSgpOwotICAgIG1UZXh0dXJlID0gc3VyZmFjZVRleHR1
cmU7Ci0gICAgbVJlbmRlclRhcmdldCA9IE5VTEw7Ci0KLSAgICBpbml0aWFsaXplUmVuZGVyVGFy
Z2V0KCk7Ci19Ci0KLVRleHR1cmVTdG9yYWdlOV8yRDo6VGV4dHVyZVN0b3JhZ2U5XzJEKFJlbmRl
cmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0g
dXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCkKLSAgICA6IFRleHR1cmVTdG9yYWdlOShyZW5kZXJlciwgR2V0VGV4dHVyZVVzYWdlKFJlbmRl
cmVyOTo6bWFrZVJlbmRlcmVyOShyZW5kZXJlciktPkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3Jt
YXQoaW50ZXJuYWxmb3JtYXQpLCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlKSkKLXsKLSAgICBtVGV4
dHVyZSA9IE5VTEw7Ci0gICAgbVJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgLy8gaWYgdGhlIHdp
ZHRoIG9yIGhlaWdodCBpcyBub3QgcG9zaXRpdmUgdGhpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBh
biBpbmNvbXBsZXRlIHRleHR1cmUKLSAgICAvLyB3ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBw
aW5nIHRoZSBkM2QgdGV4dHVyZSBjcmVhdGlvbgotICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0
ID4gMCkKLSAgICB7Ci0gICAgICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJl
ci0+Z2V0RGV2aWNlKCk7Ci0gICAgICAgIGdsOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBnbDo6SXND
b21wcmVzc2VkKGludGVybmFsZm9ybWF0KSwgJndpZHRoLCAmaGVpZ2h0LCAmbUxvZE9mZnNldCk7
Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKHdpZHRoLCBo
ZWlnaHQsIGxldmVscyA/IGxldmVscyArIG1Mb2RPZmZzZXQgOiAwLCBnZXRVc2FnZSgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUmVuZGVyZXItPkNv
bnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQpLCBnZXRQb29sKCksICZt
VGV4dHVyZSwgTlVMTCk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8
IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGluaXRpYWxpemVSZW5kZXJUYXJn
ZXQoKTsKLX0KLQotVGV4dHVyZVN0b3JhZ2U5XzJEOjp+VGV4dHVyZVN0b3JhZ2U5XzJEKCkKLXsK
LSAgICBpZiAobVRleHR1cmUpCi0gICAgewotICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwot
ICAgIH0KLQotICAgIGRlbGV0ZSBtUmVuZGVyVGFyZ2V0OwotfQotCi1UZXh0dXJlU3RvcmFnZTlf
MkQgKlRleHR1cmVTdG9yYWdlOV8yRDo6bWFrZVRleHR1cmVTdG9yYWdlOV8yRChUZXh0dXJlU3Rv
cmFnZSAqc3RvcmFnZSkKLXsKLSAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShUZXh0dXJlU3Rv
cmFnZTlfMkQqLCBzdG9yYWdlKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmVTdG9y
YWdlOV8yRCo+KHN0b3JhZ2UpOwotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZh
Y2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKLUlEaXJl
Y3QzRFN1cmZhY2U5ICpUZXh0dXJlU3RvcmFnZTlfMkQ6OmdldFN1cmZhY2VMZXZlbChpbnQgbGV2
ZWwsIGJvb2wgZGlydHkpCi17Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxM
OwotCi0gICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBt
VGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKGxldmVsICsgbUxvZE9mZnNldCwgJnN1cmZhY2UpOwot
ICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgIC8vIFdpdGggbWFu
YWdlZCB0ZXh0dXJlcyB0aGUgZHJpdmVyIG5lZWRzIHRvIGJlIGluZm9ybWVkIG9mIHVwZGF0ZXMg
dG8gdGhlIGxvd2VyIG1pcG1hcCBsZXZlbHMKLSAgICAgICAgaWYgKGxldmVsICsgbUxvZE9mZnNl
dCAhPSAwICYmIGlzTWFuYWdlZCgpICYmIGRpcnR5KQotICAgICAgICB7Ci0gICAgICAgICAgICBt
VGV4dHVyZS0+QWRkRGlydHlSZWN0KE5VTEwpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0
dXJuIHN1cmZhY2U7Ci19Ci0KLVJlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2U5XzJEOjpnZXRS
ZW5kZXJUYXJnZXQoKQotewotICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OwotfQotCi12b2lkIFRl
eHR1cmVTdG9yYWdlOV8yRDo6Z2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKQotewotICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICp1cHBlciA9IGdldFN1cmZhY2VMZXZlbChsZXZlbCAtIDEsIGZhbHNlKTsK
LSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbG93ZXIgPSBnZXRTdXJmYWNlTGV2ZWwobGV2ZWwsIHRy
dWUpOwotCi0gICAgaWYgKHVwcGVyICE9IE5VTEwgJiYgbG93ZXIgIT0gTlVMTCkKLSAgICB7Ci0g
ICAgICAgIG1SZW5kZXJlci0+Ym94RmlsdGVyKHVwcGVyLCBsb3dlcik7Ci0gICAgfQotCi0gICAg
aWYgKHVwcGVyICE9IE5VTEwpIHVwcGVyLT5SZWxlYXNlKCk7Ci0gICAgaWYgKGxvd2VyICE9IE5V
TEwpIGxvd2VyLT5SZWxlYXNlKCk7Ci19Ci0KLUlEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVy
ZVN0b3JhZ2U5XzJEOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0
dXJlOwotfQotCi12b2lkIFRleHR1cmVTdG9yYWdlOV8yRDo6aW5pdGlhbGl6ZVJlbmRlclRhcmdl
dCgpCi17Ci0gICAgQVNTRVJUKG1SZW5kZXJUYXJnZXQgPT0gTlVMTCk7Ci0KLSAgICBpZiAobVRl
eHR1cmUgIT0gTlVMTCAmJiBpc1JlbmRlclRhcmdldCgpKQotICAgIHsKLSAgICAgICAgSURpcmVj
dDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBnZXRTdXJmYWNlTGV2ZWwoMCwgZmFsc2UpOwotCi0gICAg
ICAgIG1SZW5kZXJUYXJnZXQgPSBuZXcgUmVuZGVyVGFyZ2V0OShtUmVuZGVyZXIsIHN1cmZhY2Up
OwotICAgIH0KLX0KLQotVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OlRleHR1cmVTdG9yYWdlOV9DdWJl
KFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBH
TGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBpbnQgc2l6ZSkKLSAgICA6IFRleHR1
cmVTdG9yYWdlOShyZW5kZXJlciwgR2V0VGV4dHVyZVVzYWdlKFJlbmRlcmVyOTo6bWFrZVJlbmRl
cmVyOShyZW5kZXJlciktPkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3Jt
YXQpLCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlKSkKLXsKLSAgICBtVGV4dHVyZSA9IE5VTEw7Ci0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyArK2kpCi0gICAgewotICAgICAgICBtUmVuZGVyVGFy
Z2V0W2ldID0gTlVMTDsKLSAgICB9Ci0KLSAgICAvLyBpZiB0aGUgc2l6ZSBpcyBub3QgcG9zaXRp
dmUgdGhpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBsZXRlIHRleHR1cmUKLSAgICAv
LyB3ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBkM2QgdGV4dHVyZSBjcmVhdGlv
bgotICAgIGlmIChzaXplID4gMCkKLSAgICB7Ci0gICAgICAgIElEaXJlY3QzRERldmljZTkgKmRl
dmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0gICAgICAgIGludCBoZWlnaHQgPSBzaXpl
OwotICAgICAgICBnbDo6TWFrZVZhbGlkU2l6ZShmYWxzZSwgZ2w6OklzQ29tcHJlc3NlZChpbnRl
cm5hbGZvcm1hdCksICZzaXplLCAmaGVpZ2h0LCAmbUxvZE9mZnNldCk7Ci0gICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVDdWJlVGV4dHVyZShzaXplLCBsZXZlbHMgPyBsZXZl
bHMgKyBtTG9kT2Zmc2V0IDogMCwgZ2V0VXNhZ2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1SZW5kZXJlci0+Q29udmVydFRleHR1cmVJbnRl
cm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCksIGdldFBvb2woKSwgJm1UZXh0dXJlLCBOVUxMKTsK
LQotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFT
U0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpOwotICAgICAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgaW5pdGlhbGl6ZVJlbmRlclRhcmdldCgpOwotfQotCi1UZXh0
dXJlU3RvcmFnZTlfQ3ViZTo6flRleHR1cmVTdG9yYWdlOV9DdWJlKCkKLXsKLSAgICBpZiAobVRl
eHR1cmUpCi0gICAgewotICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgIH0KLQotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgNjsgKytpKQotICAgIHsKLSAgICAgICAgZGVsZXRlIG1SZW5k
ZXJUYXJnZXRbaV07Ci0gICAgfQotfQotCi1UZXh0dXJlU3RvcmFnZTlfQ3ViZSAqVGV4dHVyZVN0
b3JhZ2U5X0N1YmU6Om1ha2VUZXh0dXJlU3RvcmFnZTlfQ3ViZShUZXh0dXJlU3RvcmFnZSAqc3Rv
cmFnZSkKLXsKLSAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShUZXh0dXJlU3RvcmFnZTlfQ3Vi
ZSosIHN0b3JhZ2UpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZVN0b3JhZ2U5X0N1
YmUqPihzdG9yYWdlKTsKLX0KLQotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgot
Ly8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCi1JRGlyZWN0M0RT
dXJmYWNlOSAqVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OmdldEN1YmVNYXBTdXJmYWNlKEdMZW51bSBm
YWNlVGFyZ2V0LCBpbnQgbGV2ZWwsIGJvb2wgZGlydHkpCi17Ci0gICAgSURpcmVjdDNEU3VyZmFj
ZTkgKnN1cmZhY2UgPSBOVUxMOwotCi0gICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAg
RDNEQ1VCRU1BUF9GQUNFUyBmYWNlID0gZ2xfZDNkOTo6Q29udmVydEN1YmVGYWNlKGZhY2VUYXJn
ZXQpOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRDdWJlTWFwU3VyZmFj
ZShmYWNlLCBsZXZlbCArIG1Mb2RPZmZzZXQsICZzdXJmYWNlKTsKLSAgICAgICAgQVNTRVJUKFNV
Q0NFRURFRChyZXN1bHQpKTsKLQotICAgICAgICAvLyBXaXRoIG1hbmFnZWQgdGV4dHVyZXMgdGhl
IGRyaXZlciBuZWVkcyB0byBiZSBpbmZvcm1lZCBvZiB1cGRhdGVzIHRvIHRoZSBsb3dlciBtaXBt
YXAgbGV2ZWxzCi0gICAgICAgIGlmIChsZXZlbCAhPSAwICYmIGlzTWFuYWdlZCgpICYmIGRpcnR5
KQotICAgICAgICB7Ci0gICAgICAgICAgICBtVGV4dHVyZS0+QWRkRGlydHlSZWN0KGZhY2UsIE5V
TEwpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHN1cmZhY2U7Ci19Ci0KLVJlbmRl
clRhcmdldCAqVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OmdldFJlbmRlclRhcmdldChHTGVudW0gZmFj
ZVRhcmdldCkKLXsKLSAgICByZXR1cm4gbVJlbmRlclRhcmdldFtnbDo6VGV4dHVyZUN1YmVNYXA6
OmZhY2VJbmRleChmYWNlVGFyZ2V0KV07Ci19Ci0KLXZvaWQgVGV4dHVyZVN0b3JhZ2U5X0N1YmU6
OmdlbmVyYXRlTWlwbWFwKGludCBmYWNlLCBpbnQgbGV2ZWwpCi17Ci0gICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKnVwcGVyID0gZ2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9YICsgZmFjZSwgbGV2ZWwgLSAxLCBmYWxzZSk7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkg
Kmxvd2VyID0gZ2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
ICsgZmFjZSwgbGV2ZWwsIHRydWUpOwotCi0gICAgaWYgKHVwcGVyICE9IE5VTEwgJiYgbG93ZXIg
IT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJlci0+Ym94RmlsdGVyKHVwcGVyLCBsb3dl
cik7Ci0gICAgfQotCi0gICAgaWYgKHVwcGVyICE9IE5VTEwpIHVwcGVyLT5SZWxlYXNlKCk7Ci0g
ICAgaWYgKGxvd2VyICE9IE5VTEwpIGxvd2VyLT5SZWxlYXNlKCk7Ci19Ci0KLUlEaXJlY3QzREJh
c2VUZXh0dXJlOSAqVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbVRleHR1cmU7Ci19Ci0KLXZvaWQgVGV4dHVyZVN0b3JhZ2U5X0N1YmU6
OmluaXRpYWxpemVSZW5kZXJUYXJnZXQoKQotewotICAgIGlmIChtVGV4dHVyZSAhPSBOVUxMICYm
IGlzUmVuZGVyVGFyZ2V0KCkpCi0gICAgewotICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3Vy
ZmFjZSA9IE5VTEw7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyArK2kpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtUmVuZGVyVGFyZ2V0W2ldID09IE5VTEwpOwotCi0g
ICAgICAgICAgICBzdXJmYWNlID0gZ2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9YICsgaSwgMCwgZmFsc2UpOwotCi0gICAgICAgICAgICBtUmVuZGVyVGFyZ2V0
W2ldID0gbmV3IFJlbmRlclRhcmdldDkobVJlbmRlcmVyLCBzdXJmYWNlKTsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0b3Jh
Z2U5LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1Rl
eHR1cmVTdG9yYWdlOS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmY1NTFhMTMx
NWRhNDUzNzEzZmExOTZkNzcyOGY3MjU3ZTJiZDg2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvVGV4dHVyZVN0b3JhZ2U5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAs
MCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRleHR1cmVTdG9yYWdlOS5oOiBEZWZpbmVzIHRoZSBh
YnN0cmFjdCByeDo6VGV4dHVyZVN0b3JhZ2U5IGNsYXNzIGFuZCBpdHMgY29uY3JldGUgZGVyaXZl
ZAotLy8gY2xhc3NlcyBUZXh0dXJlU3RvcmFnZTlfMkQgYW5kIFRleHR1cmVTdG9yYWdlOV9DdWJl
LCB3aGljaCBhY3QgYXMgdGhlIGludGVyZmFjZSB0byB0aGUKLS8vIEQzRDkgdGV4dHVyZS4KLQot
I2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfVEVYVFVSRVNUT1JBR0U5X0hfCi0jZGVmaW5lIExJ
QkdMRVNWMl9SRU5ERVJFUl9URVhUVVJFU1RPUkFHRTlfSF8KLQotI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZS5oIgotI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgot
Ci1uYW1lc3BhY2UgcngKLXsKLWNsYXNzIFJlbmRlcmVyOTsKLWNsYXNzIFN3YXBDaGFpbjk7Ci1j
bGFzcyBSZW5kZXJUYXJnZXQ7Ci1jbGFzcyBSZW5kZXJUYXJnZXQ5OwotY2xhc3MgQmxpdDsKLQot
Y2xhc3MgVGV4dHVyZVN0b3JhZ2U5IDogcHVibGljIFRleHR1cmVTdG9yYWdlCi17Ci0gIHB1Ymxp
YzoKLSAgICBUZXh0dXJlU3RvcmFnZTkoUmVuZGVyZXIgKnJlbmRlcmVyLCBEV09SRCB1c2FnZSk7
Ci0gICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2U5KCk7Ci0KLSAgICBzdGF0aWMgVGV4dHVyZVN0
b3JhZ2U5ICptYWtlVGV4dHVyZVN0b3JhZ2U5KFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKTsKLQot
ICAgIHN0YXRpYyBEV09SRCBHZXRUZXh0dXJlVXNhZ2UoRDNERk9STUFUIGQzZGZtdCwgR0xlbnVt
IGdsdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlKTsKLSAgICBzdGF0aWMgYm9vbCBJc1RleHR1
cmVGb3JtYXRSZW5kZXJhYmxlKEQzREZPUk1BVCBmb3JtYXQpOwotCi0gICAgRDNEUE9PTCBnZXRQ
b29sKCkgY29uc3Q7Ci0gICAgRFdPUkQgZ2V0VXNhZ2UoKSBjb25zdDsKLQotICAgIHZpcnR1YWwg
SURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0ID0gMDsKLSAgICB2
aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KCkgeyByZXR1cm4gTlVMTDsgfQot
ICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJn
ZXQpIHsgcmV0dXJuIE5VTEw7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50
IGxldmVsKSB7fTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGlu
dCBsZXZlbCkge307Ci0KLSAgICB2aXJ0dWFsIGludCBnZXRMb2RPZmZzZXQoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJUYXJnZXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wg
aXNNYW5hZ2VkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgbGV2ZWxDb3VudCgpOwotCi0gIHBy
b3RlY3RlZDoKLSAgICBpbnQgbUxvZE9mZnNldDsKLSAgICBSZW5kZXJlcjkgKm1SZW5kZXJlcjsK
LQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFn
ZTkpOwotCi0gICAgY29uc3QgRFdPUkQgbUQzRFVzYWdlOwotICAgIGNvbnN0IEQzRFBPT0wgbUQz
RFBvb2w7Ci19OwotCi1jbGFzcyBUZXh0dXJlU3RvcmFnZTlfMkQgOiBwdWJsaWMgVGV4dHVyZVN0
b3JhZ2U5Ci17Ci0gIHB1YmxpYzoKLSAgICBUZXh0dXJlU3RvcmFnZTlfMkQoUmVuZGVyZXIgKnJl
bmRlcmVyLCBTd2FwQ2hhaW45ICpzd2FwY2hhaW4pOwotICAgIFRleHR1cmVTdG9yYWdlOV8yRChS
ZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xl
bnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpOwotICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlOV8yRCgpOwotCi0gICAgc3RhdGlj
IFRleHR1cmVTdG9yYWdlOV8yRCAqbWFrZVRleHR1cmVTdG9yYWdlOV8yRChUZXh0dXJlU3RvcmFn
ZSAqc3RvcmFnZSk7Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0U3VyZmFjZUxldmVsKGlu
dCBsZXZlbCwgYm9vbCBkaXJ0eSk7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRl
clRhcmdldCgpOwotICAgIHZpcnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRCYXNlVGV4
dHVyZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwp
OwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9y
YWdlOV8yRCk7Ci0KLSAgICB2b2lkIGluaXRpYWxpemVSZW5kZXJUYXJnZXQoKTsKLQotICAgIElE
aXJlY3QzRFRleHR1cmU5ICptVGV4dHVyZTsKLSAgICBSZW5kZXJUYXJnZXQ5ICptUmVuZGVyVGFy
Z2V0OwotfTsKLQotY2xhc3MgVGV4dHVyZVN0b3JhZ2U5X0N1YmUgOiBwdWJsaWMgVGV4dHVyZVN0
b3JhZ2U5Ci17Ci0gIHB1YmxpYzoKLSAgICBUZXh0dXJlU3RvcmFnZTlfQ3ViZShSZW5kZXJlciAq
cmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdl
LCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpOwotICAgIHZpcnR1YWwgflRleHR1cmVT
dG9yYWdlOV9DdWJlKCk7Ci0KLSAgICBzdGF0aWMgVGV4dHVyZVN0b3JhZ2U5X0N1YmUgKm1ha2VU
ZXh0dXJlU3RvcmFnZTlfQ3ViZShUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSk7Ci0KLSAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqZ2V0Q3ViZU1hcFN1cmZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBs
ZXZlbCwgYm9vbCBkaXJ0eSk7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRh
cmdldChHTGVudW0gZmFjZVRhcmdldCk7Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVy
ZTkgKmdldEJhc2VUZXh0dXJlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlw
bWFwKGludCBmYWNlLCBpbnQgbGV2ZWwpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlOV9DdWJlKTsKLQotICAgIHZvaWQgaW5pdGlhbGl6
ZVJlbmRlclRhcmdldCgpOwotCi0gICAgSURpcmVjdDNEQ3ViZVRleHR1cmU5ICptVGV4dHVyZTsK
LSAgICBSZW5kZXJUYXJnZXQ5ICptUmVuZGVyVGFyZ2V0WzZdOwotfTsKLQotfQotCi0jZW5kaWYg
Ly8gTElCR0xFU1YyX1JFTkRFUkVSX1RFWFRVUkVTVE9SQUdFOV9IXwotCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZl
cjExLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
VmVydGV4QnVmZmVyMTEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjFkYTgw
YzNkN2U5Zjc3YmYyNmIxMzE1NDg5Zjg5YjI2YWNiMmQ0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvVmVydGV4QnVmZmVyMTEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDQw
ICswLDAgQEAKLSNpbmNsdWRlICJwcmVjb21waWxlZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykg
MjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFZl
cnRleEJ1ZmZlcjExLmNwcDogRGVmaW5lcyB0aGUgRDNEMTEgVmVydGV4QnVmZmVyIGltcGxlbWVu
dGF0aW9uLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlcjExLmgi
Ci0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaCIKLQotI2luY2x1
ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVu
ZGVyZXIxMS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCi0KLW5hbWVzcGFjZSBy
eAotewotCi1WZXJ0ZXhCdWZmZXIxMTo6VmVydGV4QnVmZmVyMTEocng6OlJlbmRlcmVyMTEgKmNv
bnN0IHJlbmRlcmVyKSA6IG1SZW5kZXJlcihyZW5kZXJlcikKLXsKLSAgICBtQnVmZmVyID0gTlVM
TDsKLSAgICBtQnVmZmVyU2l6ZSA9IDA7Ci0gICAgbUR5bmFtaWNVc2FnZSA9IGZhbHNlOwotfQot
Ci1WZXJ0ZXhCdWZmZXIxMTo6flZlcnRleEJ1ZmZlcjExKCkKLXsKLSAgICBpZiAobUJ1ZmZlcikK
LSAgICB7Ci0gICAgICAgIG1CdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJ1ZmZlciA9IE5V
TEw7Ci0gICAgfQotfQotCi1ib29sIFZlcnRleEJ1ZmZlcjExOjppbml0aWFsaXplKHVuc2lnbmVk
IGludCBzaXplLCBib29sIGR5bmFtaWNVc2FnZSkKLXsKLSAgICBpZiAobUJ1ZmZlcikKLSAgICB7
Ci0gICAgICAgIG1CdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJ1ZmZlciA9IE5VTEw7Ci0g
ICAgfQotCi0gICAgdXBkYXRlU2VyaWFsKCk7Ci0KLSAgICBpZiAoc2l6ZSA+IDApCi0gICAgewot
ICAgICAgICBJRDNEMTFEZXZpY2UqIGR4RGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsK
LQotICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyBidWZmZXJEZXNjOwotICAgICAgICBidWZmZXJE
ZXNjLkJ5dGVXaWR0aCA9IHNpemU7Ci0gICAgICAgIGJ1ZmZlckRlc2MuVXNhZ2UgPSBEM0QxMV9V
U0FHRV9EWU5BTUlDOwotICAgICAgICBidWZmZXJEZXNjLkJpbmRGbGFncyA9IEQzRDExX0JJTkRf
VkVSVEVYX0JVRkZFUjsKLSAgICAgICAgYnVmZmVyRGVzYy5DUFVBY2Nlc3NGbGFncyA9IEQzRDEx
X0NQVV9BQ0NFU1NfV1JJVEU7Ci0gICAgICAgIGJ1ZmZlckRlc2MuTWlzY0ZsYWdzID0gMDsKLSAg
ICAgICAgYnVmZmVyRGVzYy5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKLQotICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IGR4RGV2aWNlLT5DcmVhdGVCdWZmZXIoJmJ1ZmZlckRlc2MsIE5VTEwsICZt
QnVmZmVyKTsKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtQnVmZmVyU2l6ZSA9
IHNpemU7Ci0gICAgbUR5bmFtaWNVc2FnZSA9IGR5bmFtaWNVc2FnZTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotVmVydGV4QnVmZmVyMTEgKlZlcnRleEJ1ZmZlcjExOjptYWtlVmVydGV4QnVmZmVy
MTEoVmVydGV4QnVmZmVyICp2ZXRleEJ1ZmZlcikKLXsKLSAgICBBU1NFUlQoSEFTX0RZTkFNSUNf
VFlQRShWZXJ0ZXhCdWZmZXIxMSosIHZldGV4QnVmZmVyKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PFZlcnRleEJ1ZmZlcjExKj4odmV0ZXhCdWZmZXIpOwotfQotCi1ib29sIFZlcnRleEJ1ZmZl
cjExOjpzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0
cmliLCBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlcywgdW5zaWduZWQgaW50IG9mZnNl
dCkKLXsKLSAgICBpZiAobUJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZl
ciA9IGF0dHJpYi5tQm91bmRCdWZmZXIuZ2V0KCk7Ci0KLSAgICAgICAgaW50IGlucHV0U3RyaWRl
ID0gYXR0cmliLnN0cmlkZSgpOwotICAgICAgICBjb25zdCBWZXJ0ZXhDb252ZXJ0ZXIgJmNvbnZl
cnRlciA9IGdldFZlcnRleENvbnZlcnNpb24oYXR0cmliKTsKLQotICAgICAgICBJRDNEMTFEZXZp
Y2VDb250ZXh0ICpkeENvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKLQot
ICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7Ci0gICAgICAg
IEhSRVNVTFQgcmVzdWx0ID0gZHhDb250ZXh0LT5NYXAobUJ1ZmZlciwgMCwgRDNEMTFfTUFQX1dS
SVRFX05PX09WRVJXUklURSwgMCwgJm1hcHBlZFJlc291cmNlKTsKLSAgICAgICAgaWYgKEZBSUxF
RChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIlZlcnRleCBidWZmZXIgbWFw
IGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBjaGFyKiBvdXRwdXQgPSByZWludGVycHJldF9j
YXN0PGNoYXIqPihtYXBwZWRSZXNvdXJjZS5wRGF0YSkgKyBvZmZzZXQ7Ci0KLSAgICAgICAgY29u
c3QgY2hhciAqaW5wdXQgPSBOVUxMOwotICAgICAgICBpZiAoYnVmZmVyKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBCdWZmZXJTdG9yYWdlICpzdG9yYWdlID0gYnVmZmVyLT5nZXRTdG9yYWdlKCk7
Ci0gICAgICAgICAgICBpbnB1dCA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihzdG9yYWdlLT5n
ZXREYXRhKCkpICsgc3RhdGljX2Nhc3Q8aW50PihhdHRyaWIubU9mZnNldCk7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dCA9IHN0YXRpY19jYXN0
PGNvbnN0IGNoYXIqPihhdHRyaWIubVBvaW50ZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGluc3RhbmNlcyA9PSAwIHx8IGF0dHJpYi5tRGl2aXNvciA9PSAwKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpbnB1dCArPSBpbnB1dFN0cmlkZSAqIHN0YXJ0OwotICAgICAgICB9Ci0KLSAgICAg
ICAgY29udmVydGVyLmNvbnZlcnNpb25GdW5jKGlucHV0LCBpbnB1dFN0cmlkZSwgY291bnQsIG91
dHB1dCk7Ci0KLSAgICAgICAgZHhDb250ZXh0LT5Vbm1hcChtQnVmZmVyLCAwKTsKLQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgRVJSKCJWZXJ0
ZXggYnVmZmVyIG5vdCBpbml0aWFsaXplZC4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLX0KLQotYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6c3RvcmVSYXdEYXRhKGNvbnN0IHZvaWQqIGRh
dGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQotewotICAgIGlmICht
QnVmZmVyKQotICAgIHsKLSAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqZHhDb250ZXh0ID0g
bVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7Ci0KLSAgICAgICAgRDNEMTFfTUFQUEVEX1NV
QlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGR4Q29u
dGV4dC0+TWFwKG1CdWZmZXIsIDAsIEQzRDExX01BUF9XUklURV9OT19PVkVSV1JJVEUsIDAsICZt
YXBwZWRSZXNvdXJjZSk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewot
ICAgICAgICAgICAgRVJSKCJWZXJ0ZXggYnVmZmVyIG1hcCBmYWlsZWQgd2l0aCBlcnJvciAweCUw
OHgiLCByZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgY2hhciogYnVmZmVyRGF0YSA9IHN0YXRpY19jYXN0PGNoYXIqPihtYXBwZWRSZXNvdXJj
ZS5wRGF0YSk7Ci0gICAgICAgIG1lbWNweShidWZmZXJEYXRhICsgb2Zmc2V0LCBkYXRhLCBzaXpl
KTsKLQotICAgICAgICBkeENvbnRleHQtPlVubWFwKG1CdWZmZXIsIDApOwotCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBFUlIoIlZlcnRleCBi
dWZmZXIgbm90IGluaXRpYWxpemVkLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
fQotCi1ib29sIFZlcnRleEJ1ZmZlcjExOjpnZXRTcGFjZVJlcXVpcmVkKGNvbnN0IGdsOjpWZXJ0
ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xzaXplaSBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCAqb3V0U3Bh
Y2VSZXF1aXJlZCkgY29uc3QKLXsKLSAgICB1bnNpZ25lZCBpbnQgZWxlbWVudFNpemUgPSBnZXRW
ZXJ0ZXhDb252ZXJzaW9uKGF0dHJpYikub3V0cHV0RWxlbWVudFNpemU7Ci0KLSAgICB1bnNpZ25l
ZCBpbnQgZWxlbWVudENvdW50ID0gMDsKLSAgICBpZiAoaW5zdGFuY2VzID09IDAgfHwgYXR0cmli
Lm1EaXZpc29yID09IDApCi0gICAgewotICAgICAgICBlbGVtZW50Q291bnQgPSBjb3VudDsKLSAg
ICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGlu
dD4oaW5zdGFuY2VzKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkg
LSAoYXR0cmliLm1EaXZpc29yIC0gMSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFJvdW5k
IHVwCi0gICAgICAgICAgICBlbGVtZW50Q291bnQgPSAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50
PihpbnN0YW5jZXMpICsgKGF0dHJpYi5tRGl2aXNvciAtIDEpKSAvIGF0dHJpYi5tRGl2aXNvcjsK
LSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVsZW1lbnRD
b3VudCA9IGluc3RhbmNlcyAvIGF0dHJpYi5tRGl2aXNvcjsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmIChlbGVtZW50U2l6ZSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46
Om1heCgpIC8gZWxlbWVudENvdW50KQotICAgIHsKLSAgICAgICAgaWYgKG91dFNwYWNlUmVxdWly
ZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgICpvdXRTcGFjZVJlcXVpcmVkID0gZWxlbWVudFNp
emUgKiBlbGVtZW50Q291bnQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJv
b2wgVmVydGV4QnVmZmVyMTE6OnJlcXVpcmVzQ29udmVyc2lvbihjb25zdCBnbDo6VmVydGV4QXR0
cmlidXRlICZhdHRyaWIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFnZXRWZXJ0ZXhDb252ZXJzaW9u
KGF0dHJpYikuaWRlbnRpdHk7Ci19Ci0KLXVuc2lnbmVkIGludCBWZXJ0ZXhCdWZmZXIxMTo6Z2V0
QnVmZmVyU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1CdWZmZXJTaXplOwotfQotCi1ib29s
IFZlcnRleEJ1ZmZlcjExOjpzZXRCdWZmZXJTaXplKHVuc2lnbmVkIGludCBzaXplKQotewotICAg
IGlmIChzaXplID4gbUJ1ZmZlclNpemUpCi0gICAgewotICAgICAgICByZXR1cm4gaW5pdGlhbGl6
ZShzaXplLCBtRHluYW1pY1VzYWdlKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotfQotCi1ib29sIFZlcnRleEJ1ZmZlcjExOjpkaXNjYXJkKCkK
LXsKLSAgICBpZiAobUJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIElEM0QxMURldmljZUNvbnRleHQg
KmR4Q29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotCi0gICAgICAgIEQz
RDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJjZTsKLSAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBkeENvbnRleHQtPk1hcChtQnVmZmVyLCAwLCBEM0QxMV9NQVBfV1JJVEVfRElTQ0FS
RCwgMCwgJm1hcHBlZFJlc291cmNlKTsKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBFUlIoIlZlcnRleCBidWZmZXIgbWFwIGZhaWxlZCB3aXRoIGVy
cm9yIDB4JTA4eCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLQotICAgICAgICBkeENvbnRleHQtPlVubWFwKG1CdWZmZXIsIDApOwotCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBFUlIoIlZlcnRleCBi
dWZmZXIgbm90IGluaXRpYWxpemVkLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
fQotCi11bnNpZ25lZCBpbnQgVmVydGV4QnVmZmVyMTE6OmdldFZlcnRleFNpemUoY29uc3QgZ2w6
OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdAotewotICAgIHJldHVybiBnZXRWZXJ0ZXhD
b252ZXJzaW9uKGF0dHJpYikub3V0cHV0RWxlbWVudFNpemU7Ci19Ci0KLURYR0lfRk9STUFUIFZl
cnRleEJ1ZmZlcjExOjpnZXREWEdJRm9ybWF0KGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0
dHJpYikgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0VmVydGV4Q29udmVyc2lvbihhdHRyaWIpLmR4
Z2lGb3JtYXQ7Ci19Ci0KLUlEM0QxMUJ1ZmZlciAqVmVydGV4QnVmZmVyMTE6OmdldEJ1ZmZlcigp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1CdWZmZXI7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBU
LCB1bnNpZ25lZCBpbnQgY29tcG9uZW50Q291bnQsIGJvb2wgd2lkZW4sIGJvb2wgbm9ybWFsaXpl
ZD4KLXN0YXRpYyB2b2lkIGNvcHlWZXJ0ZXhEYXRhKGNvbnN0IHZvaWQgKmlucHV0LCB1bnNpZ25l
ZCBpbnQgc3RyaWRlLCB1bnNpZ25lZCBpbnQgY291bnQsIHZvaWQgKm91dHB1dCkKLXsKLSAgICB1
bnNpZ25lZCBpbnQgYXR0cmliU2l6ZSA9IHNpemVvZihUKSAqIGNvbXBvbmVudENvdW50OwotCi0g
ICAgaWYgKGF0dHJpYlNpemUgPT0gc3RyaWRlICYmICF3aWRlbikKLSAgICB7Ci0gICAgICAgIG1l
bWNweShvdXRwdXQsIGlucHV0LCBjb3VudCAqIGF0dHJpYlNpemUpOwotICAgIH0KLSAgICBlbHNl
Ci0gICAgewotICAgICAgICB1bnNpZ25lZCBpbnQgb3V0cHV0U3RyaWRlID0gd2lkZW4gPyA0IDog
Y29tcG9uZW50Q291bnQ7Ci0gICAgICAgIFQgZGVmYXVsdFZhbCA9IG5vcm1hbGl6ZWQgPyBzdGQ6
Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKSA6IFQoMSk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25z
dCBUICpvZmZzZXRJbnB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgY2hhcio+KGlucHV0KSArIGkgKiBzdHJpZGUpOwotICAgICAgICAgICAgVCAq
b2Zmc2V0T3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxUKj4ob3V0cHV0KSArIGkgKiBvdXRwdXRT
dHJpZGU7Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgY29tcG9u
ZW50Q291bnQ7IGorKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvZmZzZXRPdXRw
dXRbal0gPSBvZmZzZXRJbnB1dFtqXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYg
KHdpZGVuKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG9mZnNldE91dHB1dFszXSA9
IGRlZmF1bHRWYWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXRlbXBs
YXRlIDx1bnNpZ25lZCBpbnQgY29tcG9uZW50Q291bnQ+Ci1zdGF0aWMgdm9pZCBjb3B5Rml4ZWRW
ZXJ0ZXhEYXRhKGNvbnN0IHZvaWQqIGlucHV0LCB1bnNpZ25lZCBpbnQgc3RyaWRlLCB1bnNpZ25l
ZCBpbnQgY291bnQsIHZvaWQqIG91dHB1dCkKLXsKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgZGl2
aXNvciA9IDEuMGYgLyAoMSA8PCAxNik7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICBjb25zdCBHTGZpeGVkKiBvZmZzZXRJbnB1
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0xmaXhlZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgY2hhcio+KGlucHV0KSArIHN0cmlkZSAqIGkpOwotICAgICAgICBmbG9hdCogb2Zmc2V0T3V0
cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KG91dHB1dCkgKyBpICogY29tcG9uZW50Q291
bnQ7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBjb21wb25lbnRDb3Vu
dDsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSBzdGF0aWNf
Y2FzdDxmbG9hdD4ob2Zmc2V0SW5wdXRbal0pICogZGl2aXNvcjsKLSAgICAgICAgfQotICAgIH0K
LX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGludCBjb21wb25lbnRDb3VudCwg
Ym9vbCBub3JtYWxpemVkPgotc3RhdGljIHZvaWQgY29weVRvRmxvYXRWZXJ0ZXhEYXRhKGNvbnN0
IHZvaWQqIGlucHV0LCB1bnNpZ25lZCBpbnQgc3RyaWRlLCB1bnNpZ25lZCBpbnQgY291bnQsIHZv
aWQqIG91dHB1dCkKLXsKLSAgICB0eXBlZGVmIHN0ZDo6bnVtZXJpY19saW1pdHM8VD4gTkw7Ci0K
LSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAg
ICAgICBjb25zdCBUICpvZmZzZXRJbnB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGlucHV0KSArIHN0cmlkZSAqIGkpOwotICAgICAg
ICBmbG9hdCAqb2Zmc2V0T3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KG91dHB1dCkg
KyBpICogY29tcG9uZW50Q291bnQ7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7
IGogPCBjb21wb25lbnRDb3VudDsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobm9y
bWFsaXplZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoTkw6OmlzX3NpZ25l
ZCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGRp
dmlzb3IgPSAxLjBmIC8gKDIgKiBzdGF0aWNfY2FzdDxmbG9hdD4oTkw6Om1heCgpKSArIDEpOwot
ICAgICAgICAgICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSAoMiAqIHN0YXRpY19jYXN0PGZs
b2F0PihvZmZzZXRJbnB1dFtqXSkgKyAxKSAqIGRpdmlzb3I7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIG9mZnNldE91dHB1dFtqXSA9ICBzdGF0aWNfY2FzdDxmbG9hdD4ob2Zmc2V0SW5wdXRbal0p
IC8gTkw6Om1heCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0g
PSAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG9mZnNldElucHV0W2pdKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLX0KLQotY29uc3QgVmVydGV4QnVmZmVyMTE6OlZlcnRleENvbnZlcnRl
ciBWZXJ0ZXhCdWZmZXIxMTo6bVBvc3NpYmxlVHJhbnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRU
UklCX1RZUEVTXVsyXVs0XSA9Ci17Ci0gICAgeyAvLyBHTF9CWVRFCi0gICAgICAgIHsgLy8gdW5u
b3JtYWxpemVkCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xieXRlLCAx
LCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAg
IHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTGJ5dGUsIDIsIGZhbHNlPiwgZmFsc2UsIERYR0lf
Rk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0
ZXhEYXRhPEdMYnl0ZSwgMywgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZM
T0FULCAxMiB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMYnl0ZSwg
NCwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAot
ICAgICAgICB9LAotICAgICAgICB7IC8vIG5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlW
ZXJ0ZXhEYXRhPEdMYnl0ZSwgMSwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SOF9T
Tk9STSwgMSB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xieXRlLCAyLCBmYWxz
ZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1I4RzhfU05PUk0sIDIgfSwKLSAgICAgICAgICAg
IHsgJmNvcHlWZXJ0ZXhEYXRhPEdMYnl0ZSwgMywgdHJ1ZSwgdHJ1ZT4sIGZhbHNlLCBEWEdJX0ZP
Uk1BVF9SOEc4QjhBOF9TTk9STSwgNCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8
R0xieXRlLCA0LCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1I4RzhCOEE4X1NOT1JN
LCA0IH0sCi0gICAgICAgIH0sCi0gICAgfSwKLSAgICB7IC8vIEdMX1VOU0lHTkVEX0JZVEUKLSAg
ICAgICAgeyAvLyB1bm5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4
RGF0YTxHTHVieXRlLCAxLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQg
fSwKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVieXRlLCAyLCBmYWxz
ZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKLSAgICAgICAgICAgIHsg
JmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVieXRlLCAzLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZP
Uk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZl
cnRleERhdGE8R0x1Ynl0ZSwgNCwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMy
QTMyX0ZMT0FULCAxNiB9LAotICAgICAgICB9LAotICAgICAgICB7IC8vIG5vcm1hbGl6ZWQKLSAg
ICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDEsIGZhbHNlLCB0cnVlPiwgdHJ1
ZSwgRFhHSV9GT1JNQVRfUjhfVU5PUk0sIDEgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhE
YXRhPEdMdWJ5dGUsIDIsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjhHOF9VTk9S
TSwgMiB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1Ynl0ZSwgMywgdHJ1ZSwg
dHJ1ZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSwgNCB9LAotICAgICAgICAg
ICAgeyAmY29weVZlcnRleERhdGE8R0x1Ynl0ZSwgNCwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJ
X0ZPUk1BVF9SOEc4QjhBOF9VTk9STSwgNCB9LAotICAgICAgICB9LAotICAgIH0sCi0gICAgeyAv
LyBHTF9TSE9SVAotICAgICAgICB7IC8vIHVubm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29w
eVRvRmxvYXRWZXJ0ZXhEYXRhPEdMc2hvcnQsIDEsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFU
X1IzMl9GTE9BVCwgNCB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdM
c2hvcnQsIDIsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAot
ICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMc2hvcnQsIDMsIGZhbHNlPiwg
ZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsg
JmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHNob3J0LCA0LCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZP
Uk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsIDE2IH0sCi0gICAgICAgIH0sCi0gICAgICAgIHsgLy8g
bm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xzaG9ydCwgMSwgZmFs
c2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMTZfU05PUk0sIDIgfSwKLSAgICAgICAgICAg
IHsgJmNvcHlWZXJ0ZXhEYXRhPEdMc2hvcnQsIDIsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9G
T1JNQVRfUjE2RzE2X1NOT1JNLCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxH
THNob3J0LCAzLCB0cnVlLCB0cnVlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9T
Tk9STSwgOCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xzaG9ydCwgNCwgZmFs
c2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfU05PUk0sIDggfSwKLSAg
ICAgICAgfSwKLSAgICB9LAotICAgIHsgLy8gR0xfVU5TSUdORURfU0hPUlQKLSAgICAgICAgeyAv
LyB1bm5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVz
aG9ydCwgMSwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyX0ZMT0FULCA0IH0sCi0gICAg
ICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0x1c2hvcnQsIDIsIGZhbHNlPiwgZmFs
c2UsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVRv
RmxvYXRWZXJ0ZXhEYXRhPEdMdXNob3J0LCAzLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9S
MzJHMzJCMzJfRkxPQVQsIDEyIH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERh
dGE8R0x1c2hvcnQsIDQsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9G
TE9BVCwgMTYgfSwKLSAgICAgICAgfSwKLSAgICAgICAgeyAvLyBub3JtYWxpemVkCi0gICAgICAg
ICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHVzaG9ydCwgMSwgZmFsc2UsIHRydWU+LCB0cnVlLCBE
WEdJX0ZPUk1BVF9SMTZfVU5PUk0sIDIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRh
PEdMdXNob3J0LCAyLCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1IxNkcxNl9VTk9S
TSwgNCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1c2hvcnQsIDMsIHRydWUs
IHRydWU+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1VOT1JNLCA4IH0sCi0gICAg
ICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHVzaG9ydCwgNCwgZmFsc2UsIHRydWU+LCB0cnVl
LCBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfVU5PUk0sIDggfSwKLSAgICAgICAgfSwKLSAgICB9
LAotICAgIHsgLy8gR0xfRklYRUQKLSAgICAgICAgeyAvLyB1bm5vcm1hbGl6ZWQKLSAgICAgICAg
ICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8MT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxP
QVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8Mj4sIGZhbHNlLCBE
WEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZl
cnRleERhdGE8Mz4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0sCi0g
ICAgICAgICAgICB7ICZjb3B5Rml4ZWRWZXJ0ZXhEYXRhPDQ+LCBmYWxzZSwgRFhHSV9GT1JNQVRf
UjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAgICAgICB9LAotICAgICAgICB7IC8vIG5vcm1h
bGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8MT4sIGZhbHNlLCBEWEdJ
X0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERh
dGE8Mj4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKLSAgICAgICAgICAg
IHsgJmNvcHlGaXhlZFZlcnRleERhdGE8Mz4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJf
RkxPQVQsIDEyIH0sCi0gICAgICAgICAgICB7ICZjb3B5Rml4ZWRWZXJ0ZXhEYXRhPDQ+LCBmYWxz
ZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAgICAgICB9LAotICAg
IH0sCi0gICAgeyAvLyBHTF9GTE9BVAotICAgICAgICB7IC8vIHVubm9ybWFsaXplZAotICAgICAg
ICAgICAgeyAmY29weVZlcnRleERhdGE8R0xmbG9hdCwgMSwgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwg
RFhHSV9GT1JNQVRfUjMyX0ZMT0FULCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0
YTxHTGZsb2F0LCAyLCBmYWxzZSwgZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxP
QVQsIDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDMsIGZhbHNl
LCBmYWxzZT4sIHRydWUsIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAg
ICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDQsIGZhbHNlLCBmYWxzZT4sIHRydWUs
IERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCwgMTYgfSwKLSAgICAgICAgfSwKLSAgICAg
ICAgeyAvLyBub3JtYWxpemVkCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0
LCAxLCBmYWxzZSwgZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAg
ICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDIsIGZhbHNlLCBmYWxzZT4sIHRy
dWUsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVZl
cnRleERhdGE8R0xmbG9hdCwgMywgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMy
RzMyQjMyX0ZMT0FULCAxMiB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xmbG9h
dCwgNCwgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FU
LCAxNiB9LAotICAgICAgICB9LAotICAgIH0sCi19OwotCi1jb25zdCBWZXJ0ZXhCdWZmZXIxMTo6
VmVydGV4Q29udmVydGVyICZWZXJ0ZXhCdWZmZXIxMTo6Z2V0VmVydGV4Q29udmVyc2lvbihjb25z
dCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpCi17Ci0gICAgdW5zaWduZWQgaW50IHR5
cGVJbmRleCA9IDA7Ci0gICAgc3dpdGNoIChhdHRyaWJ1dGUubVR5cGUpCi0gICAgewotICAgICAg
Y2FzZSBHTF9CWVRFOiAgICAgICAgICAgICB0eXBlSW5kZXggPSAwOyBicmVhazsKLSAgICAgIGNh
c2UgR0xfVU5TSUdORURfQllURTogICAgdHlwZUluZGV4ID0gMTsgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX1NIT1JUOiAgICAgICAgICAgIHR5cGVJbmRleCA9IDI7IGJyZWFrOwotICAgICAgY2FzZSBH
TF9VTlNJR05FRF9TSE9SVDogICB0eXBlSW5kZXggPSAzOyBicmVhazsKLSAgICAgIGNhc2UgR0xf
RklYRUQ6ICAgICAgICAgICAgdHlwZUluZGV4ID0gNDsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZM
T0FUOiAgICAgICAgICAgIHR5cGVJbmRleCA9IDU7IGJyZWFrOwotICAgICAgZGVmYXVsdDogICAg
ICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOyBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4g
bVBvc3NpYmxlVHJhbnNsYXRpb25zW3R5cGVJbmRleF1bYXR0cmlidXRlLm1Ob3JtYWxpemVkID8g
MSA6IDBdW2F0dHJpYnV0ZS5tU2l6ZSAtIDFdOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlcjExLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1
ZmZlcjExLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjZWI0MjZlODJkNDJiNTU2
NjZjNTc5YzNmZWUxZmUyYWI3YmE4MDEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9WZXJ0ZXhCdWZmZXIxMS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLS8vIFZlcnRleEJ1ZmZlcjExLmg6IERlZmluZXMgdGhlIEQzRDExIFZlcnRl
eEJ1ZmZlciBpbXBsZW1lbnRhdGlvbi4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfVkVS
VEVYQlVGRkVSMTFfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1ZFUlRFWEJVRkZFUjEx
X0hfCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4QnVmZmVyLmgiCi0KLW5h
bWVzcGFjZSByeAotewotY2xhc3MgUmVuZGVyZXIxMTsKLQotY2xhc3MgVmVydGV4QnVmZmVyMTEg
OiBwdWJsaWMgVmVydGV4QnVmZmVyCi17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBWZXJ0ZXhC
dWZmZXIxMShyeDo6UmVuZGVyZXIxMSAqY29uc3QgcmVuZGVyZXIpOwotICAgIHZpcnR1YWwgflZl
cnRleEJ1ZmZlcjExKCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZSh1bnNpZ25lZCBp
bnQgc2l6ZSwgYm9vbCBkeW5hbWljVXNhZ2UpOwotCi0gICAgc3RhdGljIFZlcnRleEJ1ZmZlcjEx
ICptYWtlVmVydGV4QnVmZmVyMTEoVmVydGV4QnVmZmVyICp2ZXRleEJ1ZmZlcik7Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1
dGUgJmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2Vz
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9m
ZnNldCk7Ci0gICAgdmlydHVhbCBib29sIHN0b3JlUmF3RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1
bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNldCk7Ci0KLSAgICB2aXJ0dWFsIGJv
b2wgZ2V0U3BhY2VSZXF1aXJlZChjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdM
c2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCAqb3V0U3BhY2VSZXF1aXJlZCkgY29uc3Q7Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgcmVxdWlyZXNDb252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUg
JmF0dHJpYikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRCdWZmZXJTaXpl
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHNldEJ1ZmZlclNpemUodW5zaWduZWQgaW50IHNp
emUpOwotICAgIHZpcnR1YWwgYm9vbCBkaXNjYXJkKCk7Ci0KLSAgICB1bnNpZ25lZCBpbnQgZ2V0
VmVydGV4U2l6ZShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0OwotICAg
IERYR0lfRk9STUFUIGdldERYR0lGb3JtYXQoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0
cmliKSBjb25zdDsKLQotICAgIElEM0QxMUJ1ZmZlciAqZ2V0QnVmZmVyKCkgY29uc3Q7Ci0KLSAg
cHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVmVydGV4QnVmZmVyMTEpOwot
Ci0gICAgcng6OlJlbmRlcmVyMTEgKmNvbnN0IG1SZW5kZXJlcjsKLQotICAgIElEM0QxMUJ1ZmZl
ciAqbUJ1ZmZlcjsKLSAgICB1bnNpZ25lZCBpbnQgbUJ1ZmZlclNpemU7Ci0gICAgYm9vbCBtRHlu
YW1pY1VzYWdlOwotCi0gICAgdHlwZWRlZiB2b2lkICgqVmVydGV4Q29udmVyc2lvbkZ1bmN0aW9u
KShjb25zdCB2b2lkICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB2b2lkICopOwotICAg
IHN0cnVjdCBWZXJ0ZXhDb252ZXJ0ZXIKLSAgICB7Ci0gICAgICAgIFZlcnRleENvbnZlcnNpb25G
dW5jdGlvbiBjb252ZXJzaW9uRnVuYzsKLSAgICAgICAgYm9vbCBpZGVudGl0eTsKLSAgICAgICAg
RFhHSV9GT1JNQVQgZHhnaUZvcm1hdDsKLSAgICAgICAgdW5zaWduZWQgaW50IG91dHB1dEVsZW1l
bnRTaXplOwotICAgIH07Ci0KLSAgICBlbnVtIHsgTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVMg
PSA2IH07Ci0KLSAgICAvLyBUaGlzIHRhYmxlIGlzIHVzZWQgdG8gZ2VuZXJhdGUgbUF0dHJpYnV0
ZVR5cGVzLgotICAgIHN0YXRpYyBjb25zdCBWZXJ0ZXhDb252ZXJ0ZXIgbVBvc3NpYmxlVHJhbnNs
YXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsgLy8gW0dMIHR5cGVzIGFz
IGVudW1lcmF0ZWQgYnkgdHlwZUluZGV4KCldW25vcm1hbGl6ZWRdW3NpemUgLSAxXQotCi0gICAg
c3RhdGljIGNvbnN0IFZlcnRleENvbnZlcnRlciAmZ2V0VmVydGV4Q29udmVyc2lvbihjb25zdCBn
bDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpOwotfTsKLQotfQotCi0jZW5kaWYgLy8gTElC
R0xFU1YyX1JFTkRFUkVSX1ZFUlRFWEJVRkZFUjExX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlcjkuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZm
ZXI5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE3OTJiOTdmMjU0YTZiNGY4
MDdhOTE5YmY2ODdiYWRiMmQzNmMzOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL1ZlcnRleEJ1ZmZlcjkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTMwICswLDAgQEAKLSNp
bmNsdWRlICJwcmVjb21waWxlZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVmVydGV4QnVm
ZmVyOS5jcHA6IERlZmluZXMgdGhlIEQzRDkgVmVydGV4QnVmZmVyIGltcGxlbWVudGF0aW9uLgot
Ci0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlcjkuaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvdmVydGV4Y29udmVyc2lvbi5oIgotI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdlLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXI5LmgiCi0KLSNpbmNs
dWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCi0KLW5hbWVzcGFjZSByeAotewotCi1ib29sIFZlcnRl
eEJ1ZmZlcjk6Om1UcmFuc2xhdGlvbnNJbml0aWFsaXplZCA9IGZhbHNlOwotVmVydGV4QnVmZmVy
OTo6Rm9ybWF0Q29udmVydGVyIFZlcnRleEJ1ZmZlcjk6Om1Gb3JtYXRDb252ZXJ0ZXJzW05VTV9H
TF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsKLQotVmVydGV4QnVmZmVyOTo6VmVydGV4QnVm
ZmVyOShyeDo6UmVuZGVyZXI5ICpjb25zdCByZW5kZXJlcikgOiBtUmVuZGVyZXIocmVuZGVyZXIp
Ci17Ci0gICAgbVZlcnRleEJ1ZmZlciA9IE5VTEw7Ci0gICAgbUJ1ZmZlclNpemUgPSAwOwotICAg
IG1EeW5hbWljVXNhZ2UgPSBmYWxzZTsKLQotICAgIGlmICghbVRyYW5zbGF0aW9uc0luaXRpYWxp
emVkKQotICAgIHsKLSAgICAgICAgaW5pdGlhbGl6ZVRyYW5zbGF0aW9ucyhyZW5kZXJlci0+Z2V0
Q2Fwc0RlY2xUeXBlcygpKTsKLSAgICAgICAgbVRyYW5zbGF0aW9uc0luaXRpYWxpemVkID0gdHJ1
ZTsKLSAgICB9Ci19Ci0KLVZlcnRleEJ1ZmZlcjk6On5WZXJ0ZXhCdWZmZXI5KCkKLXsKLSAgICBp
ZiAobVZlcnRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhCdWZmZXItPlJlbGVhc2Uo
KTsKLSAgICAgICAgbVZlcnRleEJ1ZmZlciA9IE5VTEw7Ci0gICAgfQotfQotCi1ib29sIFZlcnRl
eEJ1ZmZlcjk6OmluaXRpYWxpemUodW5zaWduZWQgaW50IHNpemUsIGJvb2wgZHluYW1pY1VzYWdl
KQotewotICAgIGlmIChtVmVydGV4QnVmZmVyKQotICAgIHsKLSAgICAgICAgbVZlcnRleEJ1ZmZl
ci0+UmVsZWFzZSgpOwotICAgICAgICBtVmVydGV4QnVmZmVyID0gTlVMTDsKLSAgICB9Ci0KLSAg
ICB1cGRhdGVTZXJpYWwoKTsKLQotICAgIGlmIChzaXplID4gMCkKLSAgICB7Ci0gICAgICAgIERX
T1JEIGZsYWdzID0gRDNEVVNBR0VfV1JJVEVPTkxZOwotICAgICAgICBpZiAoZHluYW1pY1VzYWdl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBmbGFncyB8PSBEM0RVU0FHRV9EWU5BTUlDOwotICAg
ICAgICB9Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXItPmNyZWF0ZVZlcnRl
eEJ1ZmZlcihzaXplLCBmbGFncywgJm1WZXJ0ZXhCdWZmZXIpOwotCi0gICAgICAgIGlmIChGQUlM
RUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJPdXQgb2YgbWVtb3J5IGFs
bG9jYXRpbmcgYSB2ZXJ0ZXggYnVmZmVyIG9mIHNpemUgJWx1LiIsIHNpemUpOwotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbUJ1ZmZlclNpemUgPSBz
aXplOwotICAgIG1EeW5hbWljVXNhZ2UgPSBkeW5hbWljVXNhZ2U7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLVZlcnRleEJ1ZmZlcjkgKlZlcnRleEJ1ZmZlcjk6Om1ha2VWZXJ0ZXhCdWZmZXI5KFZl
cnRleEJ1ZmZlciAqdmVydGV4QnVmZmVyKQotewotICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBF
KFZlcnRleEJ1ZmZlcjkqLCB2ZXJ0ZXhCdWZmZXIpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
VmVydGV4QnVmZmVyOSo+KHZlcnRleEJ1ZmZlcik7Ci19Ci0KLWJvb2wgVmVydGV4QnVmZmVyOTo6
c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwg
R0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlcywgdW5zaWduZWQgaW50IG9mZnNldCkK
LXsKLSAgICBpZiAobVZlcnRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIGdsOjpCdWZmZXIgKmJ1
ZmZlciA9IGF0dHJpYi5tQm91bmRCdWZmZXIuZ2V0KCk7Ci0KLSAgICAgICAgaW50IGlucHV0U3Ry
aWRlID0gYXR0cmliLnN0cmlkZSgpOwotICAgICAgICBpbnQgZWxlbWVudFNpemUgPSBhdHRyaWIu
dHlwZVNpemUoKTsKLSAgICAgICAgY29uc3QgRm9ybWF0Q29udmVydGVyICZjb252ZXJ0ZXIgPSBm
b3JtYXRDb252ZXJ0ZXIoYXR0cmliKTsKLQotICAgICAgICBEV09SRCBsb2NrRmxhZ3MgPSBtRHlu
YW1pY1VzYWdlID8gRDNETE9DS19OT09WRVJXUklURSA6IDA7Ci0KLSAgICAgICAgdm9pZCAqbWFw
UHRyID0gTlVMTDsKLQotICAgICAgICB1bnNpZ25lZCBpbnQgbWFwU2l6ZTsKLSAgICAgICAgaWYg
KCFzcGFjZVJlcXVpcmVkKGF0dHJpYiwgY291bnQsIGluc3RhbmNlcywgJm1hcFNpemUpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IG1WZXJ0ZXhCdWZmZXItPkxvY2sob2Zmc2V0LCBtYXBTaXplLCAmbWFw
UHRyLCBsb2NrRmxhZ3MpOwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAg
ewotICAgICAgICAgICAgRVJSKCJMb2NrIGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3Vs
dCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25z
dCBjaGFyICppbnB1dCA9IE5VTEw7Ci0gICAgICAgIGlmIChidWZmZXIpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEJ1ZmZlclN0b3JhZ2UgKnN0b3JhZ2UgPSBidWZmZXItPmdldFN0b3JhZ2UoKTsK
LSAgICAgICAgICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHN0b3JhZ2UtPmdl
dERhdGEoKSkgKyBzdGF0aWNfY2FzdDxpbnQ+KGF0dHJpYi5tT2Zmc2V0KTsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8
Y29uc3QgY2hhcio+KGF0dHJpYi5tUG9pbnRlcik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
aW5zdGFuY2VzID09IDAgfHwgYXR0cmliLm1EaXZpc29yID09IDApCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlucHV0ICs9IGlucHV0U3RyaWRlICogc3RhcnQ7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoY29udmVydGVyLmlkZW50aXR5ICYmIGlucHV0U3RyaWRlID09IGVsZW1lbnRTaXplKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtZW1jcHkobWFwUHRyLCBpbnB1dCwgY291bnQgKiBpbnB1
dFN0cmlkZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAg
ICBjb252ZXJ0ZXIuY29udmVydEFycmF5KGlucHV0LCBpbnB1dFN0cmlkZSwgY291bnQsIG1hcFB0
cik7Ci0gICAgICAgIH0KLQotICAgICAgICBtVmVydGV4QnVmZmVyLT5VbmxvY2soKTsKLQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgRVJSKCJW
ZXJ0ZXggYnVmZmVyIG5vdCBpbml0aWFsaXplZC4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLX0KLQotYm9vbCBWZXJ0ZXhCdWZmZXI5OjpzdG9yZVJhd0RhdGEoY29uc3Qgdm9pZCog
ZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBvZmZzZXQpCi17Ci0gICAgaWYg
KG1WZXJ0ZXhCdWZmZXIpCi0gICAgewotICAgICAgICBEV09SRCBsb2NrRmxhZ3MgPSBtRHluYW1p
Y1VzYWdlID8gRDNETE9DS19OT09WRVJXUklURSA6IDA7Ci0KLSAgICAgICAgdm9pZCAqbWFwUHRy
ID0gTlVMTDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVmVydGV4QnVmZmVyLT5Mb2NrKG9m
ZnNldCwgc2l6ZSwgJm1hcFB0ciwgbG9ja0ZsYWdzKTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiTG9jayBmYWlsZWQgd2l0aCBlcnJv
ciAweCUwOHgiLCByZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0KLSAgICAgICAgbWVtY3B5KG1hcFB0ciwgZGF0YSwgc2l6ZSk7Ci0KLSAgICAgICAgbVZlcnRl
eEJ1ZmZlci0+VW5sb2NrKCk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVs
c2UKLSAgICB7Ci0gICAgICAgIEVSUigiVmVydGV4IGJ1ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgVmVydGV4QnVmZmVyOTo6
Z2V0U3BhY2VSZXF1aXJlZChjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdMc2l6
ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCAqb3V0U3BhY2VSZXF1aXJlZCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gc3BhY2VSZXF1aXJlZChhdHRyaWIsIGNvdW50LCBpbnN0YW5jZXMsIG91dFNwYWNlUmVx
dWlyZWQpOwotfQotCi1ib29sIFZlcnRleEJ1ZmZlcjk6OnJlcXVpcmVzQ29udmVyc2lvbihjb25z
dCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFmb3Jt
YXRDb252ZXJ0ZXIoYXR0cmliKS5pZGVudGl0eTsKLX0KLQotdW5zaWduZWQgaW50IFZlcnRleEJ1
ZmZlcjk6OmdldFZlcnRleFNpemUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBj
b25zdAotewotICAgIHVuc2lnbmVkIGludCBzcGFjZVJlcXVpcmVkOwotICAgIHJldHVybiBnZXRT
cGFjZVJlcXVpcmVkKGF0dHJpYiwgMSwgMCwgJnNwYWNlUmVxdWlyZWQpID8gc3BhY2VSZXF1aXJl
ZCA6IDA7Ci19Ci0KLUQzRERFQ0xUWVBFIFZlcnRleEJ1ZmZlcjk6OmdldERlY2xUeXBlKGNvbnN0
IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QKLXsKLSAgICByZXR1cm4gZm9ybWF0
Q29udmVydGVyKGF0dHJpYikuZDNkRGVjbFR5cGU7Ci19Ci0KLXVuc2lnbmVkIGludCBWZXJ0ZXhC
dWZmZXI5OjpnZXRCdWZmZXJTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUJ1ZmZlclNpemU7
Ci19Ci0KLWJvb2wgVmVydGV4QnVmZmVyOTo6c2V0QnVmZmVyU2l6ZSh1bnNpZ25lZCBpbnQgc2l6
ZSkKLXsKLSAgICBpZiAoc2l6ZSA+IG1CdWZmZXJTaXplKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGluaXRpYWxpemUoc2l6ZSwgbUR5bmFtaWNVc2FnZSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBWZXJ0ZXhCdWZmZXI5Ojpk
aXNjYXJkKCkKLXsKLSAgICBpZiAobVZlcnRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIHZvaWQg
KmR1bW15OwotICAgICAgICBIUkVTVUxUIHJlc3VsdDsKLQotICAgICAgICByZXN1bHQgPSBtVmVy
dGV4QnVmZmVyLT5Mb2NrKDAsIDEsICZkdW1teSwgRDNETE9DS19ESVNDQVJEKTsKLSAgICAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkRpc2NhcmQg
bG9jayBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgiLCByZXN1bHQpOwotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVzdWx0ID0gbVZlcnRleEJ1ZmZlci0+
VW5sb2NrKCk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAg
ICAgICAgRVJSKCJEaXNjYXJkIHVubG9jayBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgiLCByZXN1
bHQpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIEVSUigiVmVydGV4IGJ1
ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19
Ci0KLUlEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKiBWZXJ0ZXhCdWZmZXI5OjpnZXRCdWZmZXIoKSBj
b25zdAotewotICAgIHJldHVybiBtVmVydGV4QnVmZmVyOwotfQotCi0vLyBNYXBwaW5nIGZyb20g
T3BlbkdMLUVTIHZlcnRleCBhdHRyaWIgdHlwZSB0byBEM0QgZGVjbCB0eXBlOgotLy8KLS8vIEJZ
VEUgICAgICAgICAgICAgICAgIFNIT1JUIChDYXN0KQotLy8gQllURS1ub3JtICAgICAgICAgICAg
RkxPQVQgKE5vcm1hbGl6ZSkgKGNhbid0IGJlIGV4YWN0bHkgcmVwcmVzZW50ZWQgYXMgU0hPUlQt
bm9ybSkKLS8vIFVOU0lHTkVEX0JZVEUgICAgICAgIFVCWVRFNCAoSWRlbnRpdHkpIG9yIFNIT1JU
IChDYXN0KQotLy8gVU5TSUdORURfQllURS1ub3JtICAgVUJZVEU0TiAoSWRlbnRpdHkpIG9yIEZM
T0FUIChOb3JtYWxpemUpCi0vLyBTSE9SVCAgICAgICAgICAgICAgICBTSE9SVCAoSWRlbnRpdHkp
Ci0vLyBTSE9SVC1ub3JtICAgICAgICAgICBTSE9SVC1ub3JtIChJZGVudGl0eSkgb3IgRkxPQVQg
KE5vcm1hbGl6ZSkKLS8vIFVOU0lHTkVEX1NIT1JUICAgICAgIEZMT0FUIChDYXN0KQotLy8gVU5T
SUdORURfU0hPUlQtbm9ybSAgVVNIT1JULW5vcm0gKElkZW50aXR5KSBvciBGTE9BVCAoTm9ybWFs
aXplKQotLy8gRklYRUQgKG5vdCBpbiBXZWJHTCkgRkxPQVQgKEZpeGVkVG9GbG9hdCkKLS8vIEZM
T0FUICAgICAgICAgICAgICAgIEZMT0FUIChJZGVudGl0eSkKLQotLy8gR0xUb0NUeXBlIG1hcHMg
ZnJvbSBHTCB0eXBlIChhcyBHTGVudW0pIHRvIHRoZSBDIHR5cGVkZWYuCi10ZW1wbGF0ZSA8R0xl
bnVtIEdMVHlwZT4gc3RydWN0IEdMVG9DVHlwZSB7IH07Ci0KLXRlbXBsYXRlIDw+IHN0cnVjdCBH
TFRvQ1R5cGU8R0xfQllURT4gICAgICAgICAgIHsgdHlwZWRlZiBHTGJ5dGUgdHlwZTsgICAgICB9
OwotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9VTlNJR05FRF9CWVRFPiAgeyB0eXBl
ZGVmIEdMdWJ5dGUgdHlwZTsgICAgIH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdM
X1NIT1JUPiAgICAgICAgICB7IHR5cGVkZWYgR0xzaG9ydCB0eXBlOyAgICAgfTsKLXRlbXBsYXRl
IDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfVU5TSUdORURfU0hPUlQ+IHsgdHlwZWRlZiBHTHVzaG9y
dCB0eXBlOyAgICB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9GSVhFRD4gICAg
ICAgICAgeyB0eXBlZGVmIEdMdWludCB0eXBlOyAgICAgIH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
R0xUb0NUeXBlPEdMX0ZMT0FUPiAgICAgICAgICB7IHR5cGVkZWYgR0xmbG9hdCB0eXBlOyAgICAg
fTsKLQotLy8gVGhpcyBkaWZmZXJzIGZyb20gRDNEREVDTFRZUEUgaW4gdGhhdCBpdCBpcyB1bnNp
emVkLiAoU2l6ZSBleHBhbnNpb24gaXMgYXBwbGllZCBsYXN0LikKLWVudW0gRDNEVmVydGV4VHlw
ZQotewotICAgIEQzRFZUX0ZMT0FULAotICAgIEQzRFZUX1NIT1JULAotICAgIEQzRFZUX1NIT1JU
X05PUk0sCi0gICAgRDNEVlRfVUJZVEUsCi0gICAgRDNEVlRfVUJZVEVfTk9STSwKLSAgICBEM0RW
VF9VU0hPUlRfTk9STQotfTsKLQotLy8gRDNEVG9DVHlwZSBtYXBzIGZyb20gRDNEIHZlcnRleCB0
eXBlIChhcyBlbnVtIEQzRFZlcnRleFR5cGUpIHRvIHRoZSBjb3JyZXNwb25kaW5nIEMgdHlwZS4K
LXRlbXBsYXRlIDx1bnNpZ25lZCBpbnQgRDNEVHlwZT4gc3RydWN0IEQzRFRvQ1R5cGUgeyB9Owot
Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9GTE9BVD4geyB0eXBlZGVmIGZs
b2F0IHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9TSE9SVD4g
eyB0eXBlZGVmIHNob3J0IHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxE
M0RWVF9TSE9SVF9OT1JNPiB7IHR5cGVkZWYgc2hvcnQgdHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0
cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1VCWVRFPiB7IHR5cGVkZWYgdW5zaWduZWQgY2hhciB0eXBl
OyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfVUJZVEVfTk9STT4geyB0
eXBlZGVmIHVuc2lnbmVkIGNoYXIgdHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NU
eXBlPEQzRFZUX1VTSE9SVF9OT1JNPiB7IHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdHlwZTsgfTsK
LQotLy8gRW5jb2RlIHRoZSB0eXBlL3NpemUgY29tYmluYXRpb25zIHRoYXQgRDNEIHBlcm1pdHMu
IEZvciBlYWNoIHR5cGUvc2l6ZSBpdCBleHBhbmRzIHRvIGEgd2lkZW5lciB0aGF0IHdpbGwgcHJv
dmlkZSB0aGUgYXBwcm9wcmlhdGUgZmluYWwgc2l6ZS4KLXRlbXBsYXRlIDx1bnNpZ25lZCBpbnQg
dHlwZSwgaW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGUgeyB9OwotCi10ZW1wbGF0ZSA8aW50IHNp
emU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfRkxPQVQsIHNpemU+ICAgICAgICAgIDogTm9XaWRl
bjxzaXplPiB7IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRf
U0hPUlQsIHNpemU+ICAgICAgICAgIDogV2lkZW5Ub0V2ZW48c2l6ZT4geyB9OwotdGVtcGxhdGUg
PGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1NIT1JUX05PUk0sIHNpemU+ICAgICA6
IFdpZGVuVG9FdmVuPHNpemU+IHsgfTsKLXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVu
UnVsZTxEM0RWVF9VQllURSwgc2l6ZT4gICAgICAgICAgOiBXaWRlblRvRm91cjxzaXplPiB7IH07
Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfVUJZVEVfTk9STSwg
c2l6ZT4gICAgIDogV2lkZW5Ub0ZvdXI8c2l6ZT4geyB9OwotdGVtcGxhdGUgPGludCBzaXplPiBz
dHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1VTSE9SVF9OT1JNLCBzaXplPiAgICA6IFdpZGVuVG9FdmVu
PHNpemU+IHsgfTsKLQotLy8gVmVydGV4VHlwZUZsYWdzIGVuY29kZXMgdGhlIEQzRENBUFM5OjpE
ZWNsVHlwZSBmbGFnIGFuZCB2ZXJ0ZXggZGVjbGFyYXRpb24gZmxhZyBmb3IgZWFjaCBEM0QgdmVy
dGV4IHR5cGUgJiBzaXplIGNvbWJpbmF0aW9uLgotdGVtcGxhdGUgPHVuc2lnbmVkIGludCBkM2R0
eXBlLCBpbnQgc2l6ZT4gc3RydWN0IFZlcnRleFR5cGVGbGFncyB7IH07Ci0KLXRlbXBsYXRlIDx1
bnNpZ25lZCBpbnQgX2NhcGZsYWcsIHVuc2lnbmVkIGludCBfZGVjbGZsYWc+Ci1zdHJ1Y3QgVmVy
dGV4VHlwZUZsYWdzSGVscGVyCi17Ci0gICAgZW51bSB7IGNhcGZsYWcgPSBfY2FwZmxhZyB9Owot
ICAgIGVudW0geyBkZWNsZmxhZyA9IF9kZWNsZmxhZyB9OwotfTsKLQotdGVtcGxhdGUgPD4gc3Ry
dWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwgMT4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxw
ZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQxPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4
VHlwZUZsYWdzPEQzRFZUX0ZMT0FULCAyPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RE
RUNMVFlQRV9GTE9BVDI+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8
RDNEVlRfRkxPQVQsIDM+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZM
T0FUMz4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9B
VCwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQ0PiB7IH07
Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JULCAyPiA6IFZl
cnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9TSE9SVDI+IHsgfTsKLXRlbXBsYXRl
IDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlQsIDQ+IDogVmVydGV4VHlwZUZs
YWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX1NIT1JUND4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0
IFZlcnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVF9OT1JNLCAyPiA6IFZlcnRleFR5cGVGbGFnc0hl
bHBlcjxEM0REVENBUFNfU0hPUlQyTiwgRDNEREVDTFRZUEVfU0hPUlQyTj4geyB9OwotdGVtcGxh
dGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVF9OT1JNLCA0PiA6IFZlcnRl
eFR5cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfU0hPUlQ0TiwgRDNEREVDTFRZUEVfU0hPUlQ0Tj4g
eyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9VQllURSwgND4g
OiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VCWVRFNCwgRDNEREVDTFRZUEVfVUJZ
VEU0PiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1VCWVRF
X05PUk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VQllURTROLCBEM0RE
RUNMVFlQRV9VQllURTROPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdz
PEQzRFZUX1VTSE9SVF9OT1JNLCAyPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENBUFNf
VVNIT1JUMk4sIEQzRERFQ0xUWVBFX1VTSE9SVDJOPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
VmVydGV4VHlwZUZsYWdzPEQzRFZUX1VTSE9SVF9OT1JNLCA0PiA6IFZlcnRleFR5cGVGbGFnc0hl
bHBlcjxEM0REVENBUFNfVVNIT1JUNE4sIEQzRERFQ0xUWVBFX1VTSE9SVDROPiB7IH07Ci0KLQot
Ly8gVmVydGV4VHlwZU1hcHBpbmcgbWFwcyBHTCB0eXBlICYgbm9ybWFsaXplZCBmbGFnIHRvIHBy
ZWZlcnJlZCBhbmQgZmFsbGJhY2sgRDNEIHZlcnRleCB0eXBlcyAoYXMgRDNEVmVydGV4VHlwZSBl
bnVtcykuCi10ZW1wbGF0ZSA8R0xlbnVtIEdMdHlwZSwgYm9vbCBub3JtYWxpemVkPiBzdHJ1Y3Qg
VmVydGV4VHlwZU1hcHBpbmcgeyB9OwotCi10ZW1wbGF0ZSA8RDNEVmVydGV4VHlwZSBQcmVmZXJy
ZWQsIEQzRFZlcnRleFR5cGUgRmFsbGJhY2sgPSBQcmVmZXJyZWQ+Ci1zdHJ1Y3QgVmVydGV4VHlw
ZU1hcHBpbmdCYXNlCi17Ci0gICAgZW51bSB7IHByZWZlcnJlZCA9IFByZWZlcnJlZCB9OwotICAg
IGVudW0geyBmYWxsYmFjayA9IEZhbGxiYWNrIH07Ci19OwotCi10ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
VmVydGV4VHlwZU1hcHBpbmc8R0xfQllURSwgZmFsc2U+ICAgICAgICAgICAgICAgICAgICAgICAg
OiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfU0hPUlQ+IHsgfTsgICAgICAgICAgICAgICAg
ICAgICAgIC8vIENhc3QKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9C
WVRFLCB0cnVlPiAgICAgICAgICAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFz
ZTxEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9ybWFsaXplCi10
ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdORURfQllURSwgZmFs
c2U+ICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfVUJZVEUsIEQz
RFZUX0ZMT0FUPiB7IH07ICAgICAgICAgIC8vIElkZW50aXR5LCBDYXN0Ci10ZW1wbGF0ZSA8PiBz
dHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdORURfQllURSwgdHJ1ZT4gICAgICAgICAg
ICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfVUJZVEVfTk9STSwgRDNEVlRfRkxP
QVQ+IHsgfTsgICAgIC8vIElkZW50aXR5LCBOb3JtYWxpemUKLXRlbXBsYXRlIDw+IHN0cnVjdCBW
ZXJ0ZXhUeXBlTWFwcGluZzxHTF9TSE9SVCwgZmFsc2U+ICAgICAgICAgICAgICAgICAgICAgICA6
IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9TSE9SVD4geyB9OyAgICAgICAgICAgICAgICAg
ICAgICAgLy8gSWRlbnRpdHkKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxH
TF9TSE9SVCwgdHJ1ZT4gICAgICAgICAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5n
QmFzZTxEM0RWVF9TSE9SVF9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAgICAgLy8gQ2FzdCwgTm9y
bWFsaXplCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdORURf
U0hPUlQsIGZhbHNlPiAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRf
RkxPQVQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8vIENhc3QKLXRlbXBsYXRlIDw+IHN0
cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9TSE9SVCwgdHJ1ZT4gICAgICAgICAg
ICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9VU0hPUlRfTk9STSwgRDNEVlRfRkxP
QVQ+IHsgfTsgICAgLy8gQ2FzdCwgTm9ybWFsaXplCi10ZW1wbGF0ZSA8Ym9vbCBub3JtYWxpemVk
PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfRklYRUQsIG5vcm1hbGl6ZWQ+ICAgOiBWZXJ0
ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAg
IC8vIEZpeGVkVG9GbG9hdAotdGVtcGxhdGUgPGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IFZlcnRl
eFR5cGVNYXBwaW5nPEdMX0ZMT0FULCBub3JtYWxpemVkPiAgIDogVmVydGV4VHlwZU1hcHBpbmdC
YXNlPEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBJZGVudGl0eQot
Ci0KLS8vIEdpdmVuIGEgR0wgdHlwZSAmIG5vcm0gZmxhZyBhbmQgYSBEM0QgdHlwZSwgQ29udmVy
c2lvblJ1bGUgcHJvdmlkZXMgdGhlIHR5cGUgY29udmVyc2lvbiBydWxlIChDYXN0LCBOb3JtYWxp
emUsIElkZW50aXR5LCBGaXhlZFRvRmxvYXQpLgotLy8gVGhlIGNvbnZlcnNpb24gcnVsZXMgdGhl
bXNlbHZlcyBhcmUgZGVmaW5lZCBpbiB2ZXJ0ZXhjb252ZXJzaW9uLmguCi0KLS8vIEFsbW9zdCBh
bGwgY2FzZXMgYXJlIGNvdmVyZWQgYnkgQ2FzdCAoaW5jbHVkaW5nIHRob3NlIHRoYXQgYXJlIGFj
dHVhbGx5IElkZW50aXR5IHNpbmNlIENhc3Q8VCxUPiBrbm93cyBpdCdzIGFuIGlkZW50aXR5IG1h
cHBpbmcpLgotdGVtcGxhdGUgPEdMZW51bSBmcm9tVHlwZSwgYm9vbCBub3JtYWxpemVkLCB1bnNp
Z25lZCBpbnQgdG9UeXBlPgotc3RydWN0IENvbnZlcnNpb25SdWxlIDogQ2FzdDx0eXBlbmFtZSBH
TFRvQ1R5cGU8ZnJvbVR5cGU+Ojp0eXBlLCB0eXBlbmFtZSBEM0RUb0NUeXBlPHRvVHlwZT46OnR5
cGU+IHsgfTsKLQotLy8gQWxsIGNvbnZlcnNpb25zIGZyb20gbm9ybWFsaXplZCB0eXBlcyB0byBm
bG9hdCB1c2UgdGhlIE5vcm1hbGl6ZSBvcGVyYXRvci4KLXRlbXBsYXRlIDxHTGVudW0gZnJvbVR5
cGU+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxmcm9tVHlwZSwgdHJ1ZSwgRDNEVlRfRkxPQVQ+IDog
Tm9ybWFsaXplPHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5cGU+IHsgfTsKLQotLy8g
VXNlIGEgZnVsbCBzcGVjaWFsaXphdGlvbiBmb3IgdGhpcyBzbyB0aGF0IGl0IHByZWZlcmVudGlh
bGx5IG1hdGNoZXMgYWhlYWQgb2YgdGhlIGdlbmVyaWMgbm9ybWFsaXplLXRvLWZsb2F0IHJ1bGVz
LgotdGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCB0cnVlLCBEM0RW
VF9GTE9BVD4gIDogRml4ZWRUb0Zsb2F0PEdMaW50LCAxNj4geyB9OwotdGVtcGxhdGUgPD4gc3Ry
dWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCBmYWxzZSwgRDNEVlRfRkxPQVQ+IDogRml4ZWRU
b0Zsb2F0PEdMaW50LCAxNj4geyB9OwotCi0vLyBBIDItc3RhZ2UgY29uc3RydWN0aW9uIGlzIHVz
ZWQgZm9yIERlZmF1bHRWZXJ0ZXhWYWx1ZXMgYmVjYXVzZSBmbG9hdCBtdXN0IHVzZSBTaW1wbGVE
ZWZhdWx0VmFsdWVzIChpLmUuIDAvMSkKLS8vIHdoZXRoZXIgaXQgaXMgbm9ybWFsaXplZCBvciBu
b3QuCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgYm9vbCBub3JtYWxpemVkPiBzdHJ1Y3QgRGVmYXVsdFZl
cnRleFZhbHVlc1N0YWdlMiB7IH07Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgRGVmYXVs
dFZlcnRleFZhbHVlc1N0YWdlMjxULCB0cnVlPiAgOiBOb3JtYWxpemVkRGVmYXVsdFZhbHVlczxU
PiB7IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFn
ZTI8VCwgZmFsc2U+IDogU2ltcGxlRGVmYXVsdFZhbHVlczxUPiB7IH07Ci0KLS8vIFdvcmsgb3V0
IHRoZSBkZWZhdWx0IHZhbHVlIHJ1bGUgZm9yIGEgRDNEIHR5cGUgKGV4cHJlc3NlZCBhcyB0aGUg
QyB0eXBlKSBhbmQKLXRlbXBsYXRlIDxjbGFzcyBULCBib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBE
ZWZhdWx0VmVydGV4VmFsdWVzIDogRGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMjxULCBub3JtYWxp
emVkPiB7IH07Ci10ZW1wbGF0ZSA8Ym9vbCBub3JtYWxpemVkPiBzdHJ1Y3QgRGVmYXVsdFZlcnRl
eFZhbHVlczxmbG9hdCwgbm9ybWFsaXplZD4gOiBTaW1wbGVEZWZhdWx0VmFsdWVzPGZsb2F0PiB7
IH07Ci0KLS8vIFBvbGljeSBydWxlcyBmb3IgdXNlIHdpdGggQ29udmVydGVyLCB0byBjaG9vc2Ug
d2hldGhlciB0byB1c2UgdGhlIHByZWZlcnJlZCBvciBmYWxsYmFjayBjb252ZXJzaW9uLgotLy8g
VGhlIGZhbGxiYWNrIGNvbnZlcnNpb24gcHJvZHVjZXMgYW4gb3V0cHV0IHRoYXQgYWxsIEQzRDkg
ZGV2aWNlcyBtdXN0IHN1cHBvcnQuCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IFVzZVByZWZl
cnJlZCB7IGVudW0geyB0eXBlID0gVDo6cHJlZmVycmVkIH07IH07Ci10ZW1wbGF0ZSA8Y2xhc3Mg
VD4gc3RydWN0IFVzZUZhbGxiYWNrIHsgZW51bSB7IHR5cGUgPSBUOjpmYWxsYmFjayB9OyB9Owot
Ci0vLyBDb252ZXJ0ZXIgdGllcyBpdCBhbGwgdG9nZXRoZXIuIEdpdmVuIGFuIE9wZW5HTCB0eXBl
L25vcm0vc2l6ZSBhbmQgY2hvaWNlIG9mIHByZWZlcnJlZC9mYWxsYmFjayBjb252ZXJzaW9uLAot
Ly8gaXQgcHJvdmlkZXMgYWxsIHRoZSBtZW1iZXJzIG9mIHRoZSBhcHByb3ByaWF0ZSBWZXJ0ZXhE
YXRhQ29udmVydGVyLCB0aGUgRDNEQ0FQUzk6OkRlY2xUeXBlcyBmbGFnIGluIGNhcCBmbGFnCi0v
LyBhbmQgdGhlIEQzRERFQ0xUWVBFIG1lbWJlciBuZWVkZWQgZm9yIHRoZSB2ZXJ0ZXggZGVjbGFy
YXRpb24gaW4gZGVjbGZsYWcuCi10ZW1wbGF0ZSA8R0xlbnVtIGZyb21UeXBlLCBib29sIG5vcm1h
bGl6ZWQsIGludCBzaXplLCB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgUHJlZmVyZW5jZVJ1bGU+
Ci1zdHJ1Y3QgQ29udmVydGVyCi0gICAgOiBWZXJ0ZXhEYXRhQ29udmVydGVyPHR5cGVuYW1lIEdM
VG9DVHlwZTxmcm9tVHlwZT46OnR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFdpZGVu
UnVsZTxQcmVmZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6
ZWQ+ID46OnR5cGUsIHNpemU+LAotICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJzaW9u
UnVsZTxmcm9tVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9ybWFsaXplZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJl
ZmVyZW5jZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0
eXBlPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdFZlcnRleFZhbHVlczx0eXBl
bmFtZSBEM0RUb0NUeXBlPFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBlTWFwcGluZzxmcm9tVHlw
ZSwgbm9ybWFsaXplZD4gPjo6dHlwZT46OnR5cGUsIG5vcm1hbGl6ZWQgPiA+Ci17Ci1wcml2YXRl
OgotICAgIGVudW0geyBkM2R0eXBlID0gUHJlZmVyZW5jZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5n
PGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBlIH07Ci0gICAgZW51bSB7IGQzZHNpemUgPSBX
aWRlblJ1bGU8ZDNkdHlwZSwgc2l6ZT46OmZpbmFsV2lkdGggfTsKLQotcHVibGljOgotICAgIGVu
dW0geyBjYXBmbGFnID0gVmVydGV4VHlwZUZsYWdzPGQzZHR5cGUsIGQzZHNpemU+OjpjYXBmbGFn
IH07Ci0gICAgZW51bSB7IGRlY2xmbGFnID0gVmVydGV4VHlwZUZsYWdzPGQzZHR5cGUsIGQzZHNp
emU+OjpkZWNsZmxhZyB9OwotfTsKLQotLy8gSW5pdGlhbGl6ZSBhIFRyYW5zbGF0aW9uSW5mbwot
I2RlZmluZSBUUkFOU0xBVElPTih0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6aWRlbnRp
dHksICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBDb252ZXJ0ZXI8dHlwZSwg
bm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6ZmluYWxTaXplLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6Y29u
dmVydEFycmF5LCAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBzdGF0aWNfY2FzdDxE
M0RERUNMVFlQRT4oQ29udmVydGVyPHR5cGUsIG5vcm0sIHNpemUsIHByZWZlcnJlZD46OmRlY2xm
bGFnKSAgXAotICAgIH0KLQotI2RlZmluZSBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUo
dHlwZSwgbm9ybSwgc2l6ZSkgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9y
bSwgc2l6ZSwgVXNlUHJlZmVycmVkPjo6Y2FwZmxhZywgXAotICAgICAgICBUUkFOU0xBVElPTih0
eXBlLCBub3JtLCBzaXplLCBVc2VQcmVmZXJyZWQpLCAgICAgICAgXAotICAgICAgICBUUkFOU0xB
VElPTih0eXBlLCBub3JtLCBzaXplLCBVc2VGYWxsYmFjaykgICAgICAgICAgXAotICAgIH0KLQot
I2RlZmluZSBUUkFOU0xBVElPTlNfRk9SX1RZUEUodHlwZSkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0
eXBlLCBmYWxzZSwgMSksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxz
ZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMyksIFRS
QU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgNCkgfSwgXAotICAgICAg
ICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCB0cnVlLCAxKSwgVFJBTlNM
QVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRydWUsIDIpLCBUUkFOU0xBVElPTl9GT1Jf
VFlQRV9OT1JNX1NJWkUodHlwZSwgdHJ1ZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1f
U0laRSh0eXBlLCB0cnVlLCA0KSB9LCAgICAgXAotICAgIH0KLQotI2RlZmluZSBUUkFOU0xBVElP
TlNfRk9SX1RZUEVfTk9fTk9STSh0eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMSksIFRS
QU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMiksIFRSQU5TTEFUSU9O
X0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBF
X05PUk1fU0laRSh0eXBlLCBmYWxzZSwgNCkgfSwgXAotICAgICAgICB7IFRSQU5TTEFUSU9OX0ZP
Ul9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMSksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05P
Uk1fU0laRSh0eXBlLCBmYWxzZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0
eXBlLCBmYWxzZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxz
ZSwgNCkgfSwgXAotICAgIH0KLQotY29uc3QgVmVydGV4QnVmZmVyOTo6VHJhbnNsYXRpb25EZXNj
cmlwdGlvbiBWZXJ0ZXhCdWZmZXI5OjptUG9zc2libGVUcmFuc2xhdGlvbnNbTlVNX0dMX1ZFUlRF
WF9BVFRSSUJfVFlQRVNdWzJdWzRdID0gLy8gW0dMIHR5cGVzIGFzIGVudW1lcmF0ZWQgYnkgdHlw
ZUluZGV4KCldW25vcm1hbGl6ZWRdW3NpemUtMV0KLXsKLSAgICBUUkFOU0xBVElPTlNfRk9SX1RZ
UEUoR0xfQllURSksCi0gICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKEdMX1VOU0lHTkVEX0JZVEUp
LAotICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9TSE9SVCksCi0gICAgVFJBTlNMQVRJT05T
X0ZPUl9UWVBFKEdMX1VOU0lHTkVEX1NIT1JUKSwKLSAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEVf
Tk9fTk9STShHTF9GSVhFRCksCi0gICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFX05PX05PUk0oR0xf
RkxPQVQpCi19OwotCi12b2lkIFZlcnRleEJ1ZmZlcjk6OmluaXRpYWxpemVUcmFuc2xhdGlvbnMo
RFdPUkQgZGVjbFR5cGVzKQotewotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgTlVN
X0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVM7IGkrKykKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGogPSAwOyBqIDwgMjsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBrID0gMDsgayA8IDQ7IGsrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBpZiAobVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2tdLmNhcHNGbGFnID09IDAgfHwg
KGRlY2xUeXBlcyAmIG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tpXVtqXVtrXS5jYXBzRmxhZykgIT0g
MCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1Gb3JtYXRDb252ZXJ0
ZXJzW2ldW2pdW2tdID0gbVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2tdLnByZWZlcnJlZENv
bnZlcnNpb247Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1Gb3JtYXRDb252ZXJ0ZXJzW2ldW2pd
W2tdID0gbVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2tdLmZhbGxiYWNrQ29udmVyc2lvbjsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LXVuc2lnbmVkIGludCBWZXJ0ZXhCdWZmZXI5Ojp0eXBlSW5kZXgoR0xlbnVtIHR5cGUpCi17Ci0g
ICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfQllURTogcmV0dXJuIDA7Ci0g
ICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6IHJldHVybiAxOwotICAgICAgY2FzZSBHTF9TSE9S
VDogcmV0dXJuIDI7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOiByZXR1cm4gMzsKLSAg
ICAgIGNhc2UgR0xfRklYRUQ6IHJldHVybiA0OwotICAgICAgY2FzZSBHTF9GTE9BVDogcmV0dXJu
IDU7Ci0KLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiA1OwotICAgIH0KLX0K
LQotY29uc3QgVmVydGV4QnVmZmVyOTo6Rm9ybWF0Q29udmVydGVyICZWZXJ0ZXhCdWZmZXI5Ojpm
b3JtYXRDb252ZXJ0ZXIoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlKQotewot
ICAgIHJldHVybiBtRm9ybWF0Q29udmVydGVyc1t0eXBlSW5kZXgoYXR0cmlidXRlLm1UeXBlKV1b
YXR0cmlidXRlLm1Ob3JtYWxpemVkXVthdHRyaWJ1dGUubVNpemUgLSAxXTsKLX0KLQotYm9vbCBW
ZXJ0ZXhCdWZmZXI5OjpzcGFjZVJlcXVpcmVkKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0
dHJpYiwgc3RkOjpzaXplX3QgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqb3V0U3BhY2VSZXF1aXJlZCkKLXsK
LSAgICB1bnNpZ25lZCBpbnQgZWxlbWVudFNpemUgPSBmb3JtYXRDb252ZXJ0ZXIoYXR0cmliKS5v
dXRwdXRFbGVtZW50U2l6ZTsKLQotICAgIGlmIChhdHRyaWIubUFycmF5RW5hYmxlZCkKLSAgICB7
Ci0gICAgICAgIHVuc2lnbmVkIGludCBlbGVtZW50Q291bnQgPSAwOwotICAgICAgICBpZiAoaW5z
dGFuY2VzID09IDAgfHwgYXR0cmliLm1EaXZpc29yID09IDApCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGVsZW1lbnRDb3VudCA9IGNvdW50OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oaW5zdGFuY2Vz
KSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLSAoYXR0cmliLm1E
aXZpc29yIC0gMSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gUm91bmQgdXAK
LSAgICAgICAgICAgICAgICBlbGVtZW50Q291bnQgPSAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50
PihpbnN0YW5jZXMpICsgKGF0dHJpYi5tRGl2aXNvciAtIDEpKSAvIGF0dHJpYi5tRGl2aXNvcjsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBlbGVtZW50Q291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGluc3RhbmNl
cykgLyBhdHRyaWIubURpdmlzb3I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoZWxlbWVudFNpemUgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+Ojpt
YXgoKSAvIGVsZW1lbnRDb3VudCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG91dFNwYWNl
UmVxdWlyZWQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKm91dFNwYWNlUmVxdWly
ZWQgPSBlbGVtZW50U2l6ZSAqIGVsZW1lbnRDb3VudDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBlbGVtZW50U2l6ZSA9IDQ7Ci0gICAgICAgIGlm
IChvdXRTcGFjZVJlcXVpcmVkKQotICAgICAgICB7Ci0gICAgICAgICAgICAqb3V0U3BhY2VSZXF1
aXJlZCA9IGVsZW1lbnRTaXplICogNDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4QnVmZmVyOS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXI5LmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDJmODgxMTdiZGEyNTBlYzkxMTcwNjdiOGE2OGE4NDRkNjQwZTMwYjIu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXI5LmgKKysr
IC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBWZXJ0
ZXhCdWZmZXI5Lmg6IERlZmluZXMgdGhlIEQzRDkgVmVydGV4QnVmZmVyIGltcGxlbWVudGF0aW9u
LgotCi0jaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9WRVJURVhCVUZGRVI5X0hfCi0jZGVmaW5l
IExJQkdMRVNWMl9SRU5ERVJFUl9WRVJURVhCVUZGRVI5X0hfCi0KLSNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvVmVydGV4QnVmZmVyLmgiCi0KLW5hbWVzcGFjZSByeAotewotY2xhc3MgUmVu
ZGVyZXI5OwotCi1jbGFzcyBWZXJ0ZXhCdWZmZXI5IDogcHVibGljIFZlcnRleEJ1ZmZlcgotewot
ICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgVmVydGV4QnVmZmVyOShyeDo6UmVuZGVyZXI5ICpjb25z
dCByZW5kZXJlcik7Ci0gICAgdmlydHVhbCB+VmVydGV4QnVmZmVyOSgpOwotCi0gICAgdmlydHVh
bCBib29sIGluaXRpYWxpemUodW5zaWduZWQgaW50IHNpemUsIGJvb2wgZHluYW1pY1VzYWdlKTsK
LQotICAgIHN0YXRpYyBWZXJ0ZXhCdWZmZXI5ICptYWtlVmVydGV4QnVmZmVyOShWZXJ0ZXhCdWZm
ZXIgKnZlcnRleEJ1ZmZlcik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1
dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6
ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldCk7Ci0gICAgdmlydHVhbCBib29sIHN0b3Jl
UmF3RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50
IG9mZnNldCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0U3BhY2VSZXF1aXJlZChjb25zdCBnbDo6
VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2Vz
LCB1bnNpZ25lZCBpbnQgKm91dFNwYWNlUmVxdWlyZWQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBi
b29sIHJlcXVpcmVzQ29udmVyc2lvbihjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIp
IGNvbnN0OwotCi0gICAgdW5zaWduZWQgaW50IGdldFZlcnRleFNpemUoY29uc3QgZ2w6OlZlcnRl
eEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdDsKLSAgICBEM0RERUNMVFlQRSBnZXREZWNsVHlwZShj
b25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0OwotCi0gICAgdmlydHVhbCB1
bnNpZ25lZCBpbnQgZ2V0QnVmZmVyU2l6ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBzZXRC
dWZmZXJTaXplKHVuc2lnbmVkIGludCBzaXplKTsKLSAgICB2aXJ0dWFsIGJvb2wgZGlzY2FyZCgp
OwotCi0gICAgSURpcmVjdDNEVmVydGV4QnVmZmVyOSAqZ2V0QnVmZmVyKCkgY29uc3Q7Ci0KLSAg
cHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVmVydGV4QnVmZmVyOSk7Ci0K
LSAgICByeDo6UmVuZGVyZXI5ICpjb25zdCBtUmVuZGVyZXI7Ci0KLSAgICBJRGlyZWN0M0RWZXJ0
ZXhCdWZmZXI5ICptVmVydGV4QnVmZmVyOwotICAgIHVuc2lnbmVkIGludCBtQnVmZmVyU2l6ZTsK
LSAgICBib29sIG1EeW5hbWljVXNhZ2U7Ci0KLSAgICAvLyBBdHRyaWJ1dGUgZm9ybWF0IGNvbnZl
cnNpb24KLSAgICBlbnVtIHsgTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVMgPSA2IH07Ci0KLSAg
ICBzdHJ1Y3QgRm9ybWF0Q29udmVydGVyCi0gICAgewotICAgICAgICBib29sIGlkZW50aXR5Owot
ICAgICAgICBzdGQ6OnNpemVfdCBvdXRwdXRFbGVtZW50U2l6ZTsKLSAgICAgICAgdm9pZCAoKmNv
bnZlcnRBcnJheSkoY29uc3Qgdm9pZCAqaW4sIHN0ZDo6c2l6ZV90IHN0cmlkZSwgc3RkOjpzaXpl
X3Qgbiwgdm9pZCAqb3V0KTsKLSAgICAgICAgRDNEREVDTFRZUEUgZDNkRGVjbFR5cGU7Ci0gICAg
fTsKLQotICAgIHN0YXRpYyBib29sIG1UcmFuc2xhdGlvbnNJbml0aWFsaXplZDsKLSAgICBzdGF0
aWMgdm9pZCBpbml0aWFsaXplVHJhbnNsYXRpb25zKERXT1JEIGRlY2xUeXBlcyk7Ci0KLSAgICAv
LyBbR0wgdHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXplZF1bc2l6
ZSAtIDFdCi0gICAgc3RhdGljIEZvcm1hdENvbnZlcnRlciBtRm9ybWF0Q29udmVydGVyc1tOVU1f
R0xfVkVSVEVYX0FUVFJJQl9UWVBFU11bMl1bNF07Ci0KLSAgICBzdHJ1Y3QgVHJhbnNsYXRpb25E
ZXNjcmlwdGlvbgotICAgIHsKLSAgICAgICAgRFdPUkQgY2Fwc0ZsYWc7Ci0gICAgICAgIEZvcm1h
dENvbnZlcnRlciBwcmVmZXJyZWRDb252ZXJzaW9uOwotICAgICAgICBGb3JtYXRDb252ZXJ0ZXIg
ZmFsbGJhY2tDb252ZXJzaW9uOwotICAgIH07Ci0KLSAgICAvLyBUaGlzIHRhYmxlIGlzIHVzZWQg
dG8gZ2VuZXJhdGUgbUZvcm1hdENvbnZlcnRlcnMuCi0gICAgLy8gW0dMIHR5cGVzIGFzIGVudW1l
cmF0ZWQgYnkgdHlwZUluZGV4KCldW25vcm1hbGl6ZWRdW3NpemUgLSAxXQotICAgIHN0YXRpYyBj
b25zdCBUcmFuc2xhdGlvbkRlc2NyaXB0aW9uIG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tOVU1fR0xf
VkVSVEVYX0FUVFJJQl9UWVBFU11bMl1bNF07Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IHR5
cGVJbmRleChHTGVudW0gdHlwZSk7Ci0gICAgc3RhdGljIGNvbnN0IEZvcm1hdENvbnZlcnRlciAm
Zm9ybWF0Q29udmVydGVyKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSk7Ci0K
LSAgICBzdGF0aWMgYm9vbCBzcGFjZVJlcXVpcmVkKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUg
JmF0dHJpYiwgc3RkOjpzaXplX3QgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTcGFjZVJlcXVpcmVkKTsKLX07
Ci0KLX0KLQotI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9WRVJURVhCVUZGRVI5X0hfCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L1ZlcnRleERlY2xhcmF0aW9uQ2FjaGUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggOWI4M2E2NDc2ZWJjYzZiYjhkNjE1NWRlNTZiYjI2MDM2MzFk
OWRmNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERlY2xhcmF0
aW9uQ2FjaGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjE3ICswLDAgQEAKLSNpbmNsdWRlICJw
cmVjb21waWxlZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFZlcnRleERlY2xhcmF0aW9uQ2FjaGUu
Y3BwOiBJbXBsZW1lbnRzIGEgaGVscGVyIGNsYXNzIHRvIGNvbnN0cnVjdCBhbmQgY2FjaGUgdmVy
dGV4IGRlY2xhcmF0aW9ucy4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5Lmgi
Ci0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvVmVydGV4QnVmZmVyOS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0
ZXhEZWNsYXJhdGlvbkNhY2hlLmgiCi0KLW5hbWVzcGFjZSByeAotewotCi1WZXJ0ZXhEZWNsYXJh
dGlvbkNhY2hlOjpWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKCkgOiBtTWF4THJ1KDApCi17Ci0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUzsgaSsrKQot
ICAgIHsKLSAgICAgICAgbVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlvbiA9IE5V
TEw7Ci0gICAgICAgIG1WZXJ0ZXhEZWNsQ2FjaGVbaV0ubHJ1Q291bnQgPSAwOwotICAgIH0KLQot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAg
IHsKLSAgICAgICAgbUFwcGxpZWRWQnNbaV0uc2VyaWFsID0gMDsKLSAgICB9Ci0KLSAgICBtTGFz
dFNldFZEZWNsID0gTlVMTDsKLSAgICBtSW5zdGFuY2luZ0VuYWJsZWQgPSB0cnVlOwotfQotCi1W
ZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjp+VmVydGV4RGVjbGFyYXRpb25DYWNoZSgpCi17Ci0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUzsgaSsrKQot
ICAgIHsKLSAgICAgICAgaWYgKG1WZXJ0ZXhEZWNsQ2FjaGVbaV0udmVydGV4RGVjbGFyYXRpb24p
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1WZXJ0ZXhEZWNsQ2FjaGVbaV0udmVydGV4RGVjbGFy
YXRpb24tPlJlbGVhc2UoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotR0xlbnVtIFZlcnRleERl
Y2xhcmF0aW9uQ2FjaGU6OmFwcGx5RGVjbGFyYXRpb24oSURpcmVjdDNERGV2aWNlOSAqZGV2aWNl
LCBUcmFuc2xhdGVkQXR0cmlidXRlIGF0dHJpYnV0ZXNbXSwgZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnksIEdMc2l6ZWkgaW5zdGFuY2VzLCBHTHNpemVpICpyZXBlYXREcmF3KQotewot
ICAgICpyZXBlYXREcmF3ID0gMTsKLQotICAgIGludCBpbmRleGVkQXR0cmlidXRlID0gZ2w6Ok1B
WF9WRVJURVhfQVRUUklCUzsKLSAgICBpbnQgaW5zdGFuY2VkQXR0cmlidXRlID0gZ2w6Ok1BWF9W
RVJURVhfQVRUUklCUzsKLQotICAgIGlmIChpbnN0YW5jZXMgPiAwKQotICAgIHsKLSAgICAgICAg
Ly8gRmluZCBhbiBpbmRleGVkIGF0dHJpYnV0ZSB0byBiZSBtYXBwZWQgdG8gRDNEIHN0cmVhbSAw
Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsr
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5hY3RpdmUpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGluZGV4ZWRBdHRyaWJ1dGUgPT0gZ2w6Ok1B
WF9WRVJURVhfQVRUUklCUyAmJiBhdHRyaWJ1dGVzW2ldLmRpdmlzb3IgPT0gMCkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGluZGV4ZWRBdHRyaWJ1dGUgPSBpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChpbnN0YW5jZWRBdHRyaWJ1
dGUgPT0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUyAmJiBhdHRyaWJ1dGVzW2ldLmRpdmlzb3IgIT0g
MCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlZEF0dHJp
YnV0ZSA9IGk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChpbmRleGVk
QXR0cmlidXRlICE9IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMgJiYgaW5zdGFuY2VkQXR0cmlidXRl
ICE9IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAg
IC8vIEZvdW5kIGJvdGggYW4gaW5kZXhlZCBhbmQgaW5zdGFuY2VkIGF0dHJpYnV0ZQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGluZGV4ZWRBdHRyaWJ1dGUgPT0gZ2w6
Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0lO
VkFMSURfT1BFUkFUSU9OOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgRDNEVkVSVEVYRUxFTUVO
VDkgZWxlbWVudHNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCUyArIDFdOwotICAgIEQzRFZFUlRFWEVM
RU1FTlQ5ICplbGVtZW50ID0gJmVsZW1lbnRzWzBdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAgewotICAgICAgICBpZiAoYXR0cmli
dXRlc1tpXS5hY3RpdmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIERpcmVjdGx5IGJpbmRp
bmcgdGhlIHN0b3JhZ2UgYnVmZmVyIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGQzZDkKLSAgICAgICAg
ICAgIEFTU0VSVChhdHRyaWJ1dGVzW2ldLnN0b3JhZ2UgPT0gTlVMTCk7Ci0KLSAgICAgICAgICAg
IGludCBzdHJlYW0gPSBpOwotCi0gICAgICAgICAgICBpZiAoaW5zdGFuY2VzID4gMCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBEdWUgdG8gYSBidWcgb24gQVRJIGNhcmRzIHdl
IGNhbid0IGVuYWJsZSBpbnN0YW5jaW5nIHdoZW4gbm9uZSBvZiB0aGUgYXR0cmlidXRlcyBhcmUg
aW5zdGFuY2VkLgotICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZWRBdHRyaWJ1dGUgPT0gZ2w6
Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICpyZXBlYXREcmF3ID0gaW5zdGFuY2VzOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAo
aSA9PSBpbmRleGVkQXR0cmlidXRlKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBzdHJlYW0gPSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGkgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgc3RyZWFtID0gaW5kZXhlZEF0dHJpYnV0ZTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIFVJTlQgZnJlcXVlbmN5ID0gMTsK
LSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVz
W2ldLmRpdmlzb3IgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgZnJlcXVlbmN5ID0gRDNEU1RSRUFNU09VUkNFX0lOREVYRUREQVRBIHwgaW5zdGFu
Y2VzOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZnJlcXVlbmN5ID0g
RDNEU1RSRUFNU09VUkNFX0lOU1RBTkNFREFUQSB8IGF0dHJpYnV0ZXNbaV0uZGl2aXNvcjsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKHN0cmVhbSwgZnJlcXVlbmN5KTsKLSAg
ICAgICAgICAgICAgICAgICAgbUluc3RhbmNpbmdFbmFibGVkID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFZlcnRleEJ1ZmZlcjkgKnZlcnRl
eEJ1ZmZlciA9IFZlcnRleEJ1ZmZlcjk6Om1ha2VWZXJ0ZXhCdWZmZXI5KGF0dHJpYnV0ZXNbaV0u
dmVydGV4QnVmZmVyKTsKLQotICAgICAgICAgICAgaWYgKG1BcHBsaWVkVkJzW3N0cmVhbV0uc2Vy
aWFsICE9IGF0dHJpYnV0ZXNbaV0uc2VyaWFsIHx8Ci0gICAgICAgICAgICAgICAgbUFwcGxpZWRW
QnNbc3RyZWFtXS5zdHJpZGUgIT0gYXR0cmlidXRlc1tpXS5zdHJpZGUgfHwKLSAgICAgICAgICAg
ICAgICBtQXBwbGllZFZCc1tzdHJlYW1dLm9mZnNldCAhPSBhdHRyaWJ1dGVzW2ldLm9mZnNldCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZShz
dHJlYW0sIHZlcnRleEJ1ZmZlci0+Z2V0QnVmZmVyKCksIGF0dHJpYnV0ZXNbaV0ub2Zmc2V0LCBh
dHRyaWJ1dGVzW2ldLnN0cmlkZSk7Ci0gICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNbc3RyZWFt
XS5zZXJpYWwgPSBhdHRyaWJ1dGVzW2ldLnNlcmlhbDsKLSAgICAgICAgICAgICAgICBtQXBwbGll
ZFZCc1tzdHJlYW1dLnN0cmlkZSA9IGF0dHJpYnV0ZXNbaV0uc3RyaWRlOwotICAgICAgICAgICAg
ICAgIG1BcHBsaWVkVkJzW3N0cmVhbV0ub2Zmc2V0ID0gYXR0cmlidXRlc1tpXS5vZmZzZXQ7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGVsZW1lbnQtPlN0cmVhbSA9IHN0cmVhbTsKLSAg
ICAgICAgICAgIGVsZW1lbnQtPk9mZnNldCA9IDA7Ci0gICAgICAgICAgICBlbGVtZW50LT5UeXBl
ID0gYXR0cmlidXRlc1tpXS5hdHRyaWJ1dGUtPm1BcnJheUVuYWJsZWQgPyB2ZXJ0ZXhCdWZmZXIt
PmdldERlY2xUeXBlKCphdHRyaWJ1dGVzW2ldLmF0dHJpYnV0ZSkgOiBEM0RERUNMVFlQRV9GTE9B
VDQ7Ci0gICAgICAgICAgICBlbGVtZW50LT5NZXRob2QgPSBEM0RERUNMTUVUSE9EX0RFRkFVTFQ7
Ci0gICAgICAgICAgICBlbGVtZW50LT5Vc2FnZSA9IEQzRERFQ0xVU0FHRV9URVhDT09SRDsKLSAg
ICAgICAgICAgIGVsZW1lbnQtPlVzYWdlSW5kZXggPSBwcm9ncmFtQmluYXJ5LT5nZXRTZW1hbnRp
Y0luZGV4KGkpOwotICAgICAgICAgICAgZWxlbWVudCsrOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgaWYgKGluc3RhbmNlcyA9PSAwIHx8IGluc3RhbmNlZEF0dHJpYnV0ZSA9PSBnbDo6TUFYX1ZF
UlRFWF9BVFRSSUJTKQotICAgIHsKLSAgICAgICAgaWYgKG1JbnN0YW5jaW5nRW5hYmxlZCkKLSAg
ICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9B
VFRSSUJTOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRT
dHJlYW1Tb3VyY2VGcmVxKGksIDEpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtSW5z
dGFuY2luZ0VuYWJsZWQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBj
b25zdCBEM0RWRVJURVhFTEVNRU5UOSBlbmQgPSBEM0RERUNMX0VORCgpOwotICAgICooZWxlbWVu
dCsrKSA9IGVuZDsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NB
Q0hFX0VOVFJJRVM7IGkrKykKLSAgICB7Ci0gICAgICAgIFZlcnRleERlY2xDYWNoZUVudHJ5ICpl
bnRyeSA9ICZtVmVydGV4RGVjbENhY2hlW2ldOwotICAgICAgICBpZiAobWVtY21wKGVudHJ5LT5j
YWNoZWRFbGVtZW50cywgZWxlbWVudHMsIChlbGVtZW50IC0gZWxlbWVudHMpICogc2l6ZW9mKEQz
RFZFUlRFWEVMRU1FTlQ5KSkgPT0gMCAmJiBlbnRyeS0+dmVydGV4RGVjbGFyYXRpb24pCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGVudHJ5LT5scnVDb3VudCA9ICsrbU1heExydTsKLSAgICAgICAg
ICAgIGlmKGVudHJ5LT52ZXJ0ZXhEZWNsYXJhdGlvbiAhPSBtTGFzdFNldFZEZWNsKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGRldmljZS0+U2V0VmVydGV4RGVjbGFyYXRpb24oZW50
cnktPnZlcnRleERlY2xhcmF0aW9uKTsKLSAgICAgICAgICAgICAgICBtTGFzdFNldFZEZWNsID0g
ZW50cnktPnZlcnRleERlY2xhcmF0aW9uOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBy
ZXR1cm4gR0xfTk9fRVJST1I7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBWZXJ0ZXhEZWNsQ2Fj
aGVFbnRyeSAqbGFzdENhY2hlID0gbVZlcnRleERlY2xDYWNoZTsKLQotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkrKykKLSAgICB7Ci0gICAg
ICAgIGlmIChtVmVydGV4RGVjbENhY2hlW2ldLmxydUNvdW50IDwgbGFzdENhY2hlLT5scnVDb3Vu
dCkKLSAgICAgICAgewotICAgICAgICAgICAgbGFzdENhY2hlID0gJm1WZXJ0ZXhEZWNsQ2FjaGVb
aV07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJh
dGlvbiAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlv
bi0+UmVsZWFzZSgpOwotICAgICAgICBsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uID0gTlVM
TDsKLSAgICAgICAgLy8gbUxhc3RTZXRWRGVjbCBpcyBzZXQgdG8gdGhlIHJlcGxhY2VtZW50LCBz
byB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5Ci0gICAgICAgIC8vIGFib3V0IGl0LgotICAgIH0KLQot
ICAgIG1lbWNweShsYXN0Q2FjaGUtPmNhY2hlZEVsZW1lbnRzLCBlbGVtZW50cywgKGVsZW1lbnQg
LSBlbGVtZW50cykgKiBzaXplb2YoRDNEVkVSVEVYRUxFTUVOVDkpKTsKLSAgICBkZXZpY2UtPkNy
ZWF0ZVZlcnRleERlY2xhcmF0aW9uKGVsZW1lbnRzLCAmbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJh
dGlvbik7Ci0gICAgZGV2aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbihsYXN0Q2FjaGUtPnZlcnRl
eERlY2xhcmF0aW9uKTsKLSAgICBtTGFzdFNldFZEZWNsID0gbGFzdENhY2hlLT52ZXJ0ZXhEZWNs
YXJhdGlvbjsKLSAgICBsYXN0Q2FjaGUtPmxydUNvdW50ID0gKyttTWF4THJ1OwotCi0gICAgcmV0
dXJuIEdMX05PX0VSUk9SOwotfQotCi12b2lkIFZlcnRleERlY2xhcmF0aW9uQ2FjaGU6Om1hcmtT
dGF0ZURpcnR5KCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGdsOjpNQVhfVkVSVEVYX0FU
VFJJQlM7IGkrKykKLSAgICB7Ci0gICAgICAgIG1BcHBsaWVkVkJzW2ldLnNlcmlhbCA9IDA7Ci0g
ICAgfQotCi0gICAgbUxhc3RTZXRWRGVjbCA9IE5VTEw7Ci0gICAgbUluc3RhbmNpbmdFbmFibGVk
ID0gdHJ1ZTsgICAvLyBGb3JjZXMgaXQgdG8gYmUgZGlzYWJsZWQgd2hlbiBub3QgdXNlZAotfQot
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL1ZlcnRleERlY2xhcmF0aW9uQ2FjaGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGVjbGFyYXRpb25DYWNoZS5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmMwMjRhOWJhYjQ4YjE5YzA2YWI5NzU3MGU4YjVkNTQ4
NzEzMTg3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGVjbGFy
YXRpb25DYWNoZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLy8KLS8vIENvcHly
aWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLS8vIFZlcnRleERlY2xhcmF0aW9uQ2FjaGUuaDogRGVmaW5lcyBhIGhlbHBlciBjbGFzcyB0
byBjb25zdHJ1Y3QgYW5kIGNhY2hlIHZlcnRleCBkZWNsYXJhdGlvbnMuCi0KLSNpZm5kZWYgTElC
R0xFU1YyX1JFTkRFUkVSX1ZFUlRFWERFQ0xBUkFUSU9OQ0FDSEVfSF8KLSNkZWZpbmUgTElCR0xF
U1YyX1JFTkRFUkVSX1ZFUlRFWERFQ0xBUkFUSU9OQ0FDSEVfSF8KLQotI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9WZXJ0ZXhEYXRhTWFuYWdlci5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLWNs
YXNzIFZlcnRleERhdGFNYW5hZ2VyOwotfQotCi1uYW1lc3BhY2UgcngKLXsKLQotY2xhc3MgVmVy
dGV4RGVjbGFyYXRpb25DYWNoZQotewotICBwdWJsaWM6Ci0gICAgVmVydGV4RGVjbGFyYXRpb25D
YWNoZSgpOwotICAgIH5WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKCk7Ci0KLSAgICBHTGVudW0gYXBw
bHlEZWNsYXJhdGlvbihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIFRyYW5zbGF0ZWRBdHRyaWJ1
dGUgYXR0cmlidXRlc1tdLCBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgR0xzaXpl
aSBpbnN0YW5jZXMsIEdMc2l6ZWkgKnJlcGVhdERyYXcpOwotCi0gICAgdm9pZCBtYXJrU3RhdGVE
aXJ0eSgpOwotCi0gIHByaXZhdGU6Ci0gICAgVUlOVCBtTWF4THJ1OwotCi0gICAgZW51bSB7IE5V
TV9WRVJURVhfREVDTF9DQUNIRV9FTlRSSUVTID0gMzIgfTsKLQotICAgIHN0cnVjdCBWQkRhdGEK
LSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzZXJpYWw7Ci0gICAgICAgIHVuc2lnbmVkIGlu
dCBzdHJpZGU7Ci0gICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQ7Ci0gICAgfTsKLQotICAgIFZC
RGF0YSBtQXBwbGllZFZCc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKLSAgICBJRGlyZWN0M0RW
ZXJ0ZXhEZWNsYXJhdGlvbjkgKm1MYXN0U2V0VkRlY2w7Ci0gICAgYm9vbCBtSW5zdGFuY2luZ0Vu
YWJsZWQ7Ci0KLSAgICBzdHJ1Y3QgVmVydGV4RGVjbENhY2hlRW50cnkKLSAgICB7Ci0gICAgICAg
IEQzRFZFUlRFWEVMRU1FTlQ5IGNhY2hlZEVsZW1lbnRzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlMg
KyAxXTsKLSAgICAgICAgVUlOVCBscnVDb3VudDsKLSAgICAgICAgSURpcmVjdDNEVmVydGV4RGVj
bGFyYXRpb245ICp2ZXJ0ZXhEZWNsYXJhdGlvbjsKLSAgICB9IG1WZXJ0ZXhEZWNsQ2FjaGVbTlVN
X1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVNdOwotfTsKLQotfQotCi0jZW5kaWYgLy8gTElCR0xF
U1YyX1JFTkRFUkVSX1ZFUlRFWERFQ0xBUkFUSU9OQ0FDSEVfSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvQnVmZmVyU3Rv
cmFnZTExLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkMTEvQnVmZmVyU3RvcmFnZTExLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMWQ1YjhiODg2OGVjYjhm
OGU3ZjYyNjFkMGUyOTFjMGQ1MWZjNWI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9CdWZmZXJTdG9yYWdlMTEu
Y3BwCkBAIC0wLDAgKzEsMzY2IEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisvLyBCdWZmZXJTdG9yYWdlMTEuY3BwIERlZmluZXMgdGhlIEJ1ZmZlclN0b3JhZ2Ux
MSBjbGFzcy4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9CdWZmZXJTdG9y
YWdlMTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgiCisKK25hbWVzcGFjZSByeAoreworCitCdWZm
ZXJTdG9yYWdlMTE6OkJ1ZmZlclN0b3JhZ2UxMShSZW5kZXJlcjExICpyZW5kZXJlcikKK3sKKyAg
ICBtUmVuZGVyZXIgPSByZW5kZXJlcjsKKworICAgIG1TdGFnaW5nQnVmZmVyID0gTlVMTDsKKyAg
ICBtU3RhZ2luZ0J1ZmZlclNpemUgPSAwOworCisgICAgbVNpemUgPSAwOworCisgICAgbVJlc29s
dmVkRGF0YSA9IE5VTEw7CisgICAgbVJlc29sdmVkRGF0YVNpemUgPSAwOworICAgIG1SZXNvbHZl
ZERhdGFWYWxpZCA9IGZhbHNlOworCisgICAgbVJlYWRVc2FnZUNvdW50ID0gMDsKKyAgICBtV3Jp
dGVVc2FnZUNvdW50ID0gMDsKK30KKworQnVmZmVyU3RvcmFnZTExOjp+QnVmZmVyU3RvcmFnZTEx
KCkKK3sKKyAgICBTYWZlUmVsZWFzZShtU3RhZ2luZ0J1ZmZlcik7CisKKyAgICBpZiAobVJlc29s
dmVkRGF0YSkKKyAgICB7CisgICAgICAgIGZyZWUobVJlc29sdmVkRGF0YSk7CisgICAgICAgIG1S
ZXNvbHZlZERhdGEgPSBOVUxMOworICAgIH0KKworICAgIGZvciAoYXV0byBpdCA9IG1EaXJlY3RC
dWZmZXJzLmJlZ2luKCk7IGl0ICE9IG1EaXJlY3RCdWZmZXJzLmVuZCgpOyBpdCsrKQorICAgIHsK
KyAgICAgICAgU2FmZURlbGV0ZShpdC0+c2Vjb25kKTsKKyAgICB9Cit9CisKK0J1ZmZlclN0b3Jh
Z2UxMSAqQnVmZmVyU3RvcmFnZTExOjptYWtlQnVmZmVyU3RvcmFnZTExKEJ1ZmZlclN0b3JhZ2Ug
KmJ1ZmZlclN0b3JhZ2UpCit7CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoQnVmZmVyU3Rv
cmFnZTExKiwgYnVmZmVyU3RvcmFnZSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxCdWZmZXJT
dG9yYWdlMTEqPihidWZmZXJTdG9yYWdlKTsKK30KKwordm9pZCAqQnVmZmVyU3RvcmFnZTExOjpn
ZXREYXRhKCkKK3sKKyAgICBBU1NFUlQobVN0YWdpbmdCdWZmZXIpOworCisgICAgaWYgKCFtUmVz
b2x2ZWREYXRhVmFsaWQpCisgICAgeworICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1S
ZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRl
eHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKKyAgICAgICAgSFJFU1VMVCByZXN1
bHQ7CisKKyAgICAgICAgaWYgKCFtUmVzb2x2ZWREYXRhIHx8IG1SZXNvbHZlZERhdGFTaXplIDwg
bVN0YWdpbmdCdWZmZXJTaXplKQorICAgICAgICB7CisgICAgICAgICAgICBmcmVlKG1SZXNvbHZl
ZERhdGEpOworICAgICAgICAgICAgbVJlc29sdmVkRGF0YSA9IG1hbGxvYyhtU2l6ZSk7CisgICAg
ICAgICAgICBtUmVzb2x2ZWREYXRhU2l6ZSA9IG1TaXplOworICAgICAgICB9CisKKyAgICAgICAg
RDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOworICAgICAgICByZXN1bHQg
PSBjb250ZXh0LT5NYXAobVN0YWdpbmdCdWZmZXIsIDAsIEQzRDExX01BUF9SRUFELCAwLCAmbWFw
cGVkUmVzb3VyY2UpOworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgKHZvaWQqKU5VTEwp
OworICAgICAgICB9CisKKyAgICAgICAgbWVtY3B5KG1SZXNvbHZlZERhdGEsIG1hcHBlZFJlc291
cmNlLnBEYXRhLCBtU2l6ZSk7CisKKyAgICAgICAgY29udGV4dC0+VW5tYXAobVN0YWdpbmdCdWZm
ZXIsIDApOworCisgICAgICAgIG1SZXNvbHZlZERhdGFWYWxpZCA9IHRydWU7CisgICAgfQorCisg
ICAgbVJlYWRVc2FnZUNvdW50ID0gMDsKKworICAgIHJldHVybiBtUmVzb2x2ZWREYXRhOworfQor
Cit2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6c2V0RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25l
ZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNldCkKK3sKKyAgICBJRDNEMTFEZXZpY2UgKmRl
dmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgSUQzRDExRGV2aWNlQ29udGV4dCAq
Y29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworICAgIEhSRVNVTFQgcmVz
dWx0OworCisgICAgY29uc3QgdW5zaWduZWQgaW50IHJlcXVpcmVkU3RhZ2luZ0J1ZmZlclNpemUg
PSBzaXplICsgb2Zmc2V0OworICAgIGNvbnN0IGJvb2wgY3JlYXRlU3RhZ2luZ0J1ZmZlciA9ICFt
U3RhZ2luZ0J1ZmZlciB8fCBtU3RhZ2luZ0J1ZmZlclNpemUgPCByZXF1aXJlZFN0YWdpbmdCdWZm
ZXJTaXplOworCisgICAgaWYgKGNyZWF0ZVN0YWdpbmdCdWZmZXIpCisgICAgeworICAgICAgICBE
M0QxMV9CVUZGRVJfREVTQyBidWZmZXJEZXNjOworICAgICAgICBidWZmZXJEZXNjLkJ5dGVXaWR0
aCA9IHJlcXVpcmVkU3RhZ2luZ0J1ZmZlclNpemU7CisgICAgICAgIGJ1ZmZlckRlc2MuVXNhZ2Ug
PSBEM0QxMV9VU0FHRV9TVEFHSU5HOworICAgICAgICBidWZmZXJEZXNjLkJpbmRGbGFncyA9IDA7
CisgICAgICAgIGJ1ZmZlckRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUNDRVNTX1JF
QUQgfCBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOworICAgICAgICBidWZmZXJEZXNjLk1pc2NGbGFn
cyA9IDA7CisgICAgICAgIGJ1ZmZlckRlc2MuU3RydWN0dXJlQnl0ZVN0cmlkZSA9IDA7CisKKyAg
ICAgICAgSFJFU1VMVCByZXN1bHQ7CisgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJl
bmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4
dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworICAgICAgICBJRDNEMTFCdWZmZXIg
Km5ld1N0YWdpbmdCdWZmZXI7CisKKyAgICAgICAgaWYgKGRhdGEgJiYgb2Zmc2V0ID09IDApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEQzRDExX1NVQlJFU09VUkNFX0RBVEEgaW5pdGlhbERhdGE7
CisgICAgICAgICAgICBpbml0aWFsRGF0YS5wU3lzTWVtID0gZGF0YTsKKyAgICAgICAgICAgIGlu
aXRpYWxEYXRhLlN5c01lbVBpdGNoID0gcmVxdWlyZWRTdGFnaW5nQnVmZmVyU2l6ZTsKKyAgICAg
ICAgICAgIGluaXRpYWxEYXRhLlN5c01lbVNsaWNlUGl0Y2ggPSAwOworCisgICAgICAgICAgICBy
ZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmYnVmZmVyRGVzYywgJmluaXRpYWxEYXRhLCAm
bmV3U3RhZ2luZ0J1ZmZlcik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmYnVmZmVyRGVzYywgTlVM
TCwgJm5ld1N0YWdpbmdCdWZmZXIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKEZBSUxFRChy
ZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBtU3RhZ2luZ0J1ZmZlclNpemUgPSAwOwor
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAg
fQorCisgICAgICAgIG1TdGFnaW5nQnVmZmVyU2l6ZSA9IHJlcXVpcmVkU3RhZ2luZ0J1ZmZlclNp
emU7CisKKyAgICAgICAgaWYgKG1TdGFnaW5nQnVmZmVyICYmIG9mZnNldCA+IDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIC8vIElmIG9mZnNldCBpcyBncmVhdGVyIHRoYW4gemVybyBhbmQgdGhl
IGJ1ZmZlciBpcyBub24tbnVsbCwgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgZGF0YSBmcm9tCisgICAg
ICAgICAgICAvLyB0aGUgb2xkIGJ1ZmZlciB1cCB0byBvZmZzZXQKKyAgICAgICAgICAgIEQzRDEx
X0JPWCBzcmNCb3g7CisgICAgICAgICAgICBzcmNCb3gubGVmdCA9IDA7CisgICAgICAgICAgICBz
cmNCb3gucmlnaHQgPSBzdGQ6Om1pbihvZmZzZXQsIHJlcXVpcmVkU3RhZ2luZ0J1ZmZlclNpemUp
OworICAgICAgICAgICAgc3JjQm94LnRvcCA9IDA7CisgICAgICAgICAgICBzcmNCb3guYm90dG9t
ID0gMTsKKyAgICAgICAgICAgIHNyY0JveC5mcm9udCA9IDA7CisgICAgICAgICAgICBzcmNCb3gu
YmFjayA9IDE7CisKKyAgICAgICAgICAgIGNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihu
ZXdTdGFnaW5nQnVmZmVyLCAwLCAwLCAwLCAwLCBtU3RhZ2luZ0J1ZmZlciwgMCwgJnNyY0JveCk7
CisgICAgICAgIH0KKworICAgICAgICBTYWZlUmVsZWFzZShtU3RhZ2luZ0J1ZmZlcik7CisgICAg
ICAgIG1TdGFnaW5nQnVmZmVyID0gbmV3U3RhZ2luZ0J1ZmZlcjsKKyAgICB9CisKKyAgICBpZiAo
ZGF0YSAmJiAob2Zmc2V0ICE9IDAgfHwgIWNyZWF0ZVN0YWdpbmdCdWZmZXIpKQorICAgIHsKKyAg
ICAgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOworICAgICAgICBy
ZXN1bHQgPSBjb250ZXh0LT5NYXAobVN0YWdpbmdCdWZmZXIsIDAsIEQzRDExX01BUF9XUklURSwg
MCwgJm1hcHBlZFJlc291cmNlKTsKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
ICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgY2hhciAqb2Zmc2V0QnVmZmVyUG9pbnRlciA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhciAqPihtYXBwZWRSZXNvdXJjZS5wRGF0YSkgKyBv
ZmZzZXQ7CisgICAgICAgIG1lbWNweShvZmZzZXRCdWZmZXJQb2ludGVyLCBkYXRhLCBzaXplKTsK
KworICAgICAgICBjb250ZXh0LT5Vbm1hcChtU3RhZ2luZ0J1ZmZlciwgMCk7CisgICAgfQorCisg
ICAgZm9yIChhdXRvIGl0ID0gbURpcmVjdEJ1ZmZlcnMuYmVnaW4oKTsgaXQgIT0gbURpcmVjdEJ1
ZmZlcnMuZW5kKCk7IGl0KyspCisgICAgeworICAgICAgICBpdC0+c2Vjb25kLT5tYXJrRGlydHko
KTsKKyAgICB9CisKKyAgICBtU2l6ZSA9IHN0ZDo6bWF4KG1TaXplLCByZXF1aXJlZFN0YWdpbmdC
dWZmZXJTaXplKTsKKyAgICBtV3JpdGVVc2FnZUNvdW50ID0gMDsKKworICAgIG1SZXNvbHZlZERh
dGFWYWxpZCA9IGZhbHNlOworfQorCit2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6Y29weURhdGEoQnVm
ZmVyU3RvcmFnZSogc291cmNlU3RvcmFnZSwgdW5zaWduZWQgaW50IHNpemUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZU9mZnNldCwgdW5zaWduZWQg
aW50IGRlc3RPZmZzZXQpCit7CisgICAgQnVmZmVyU3RvcmFnZTExKiBzb3VyY2UgPSBtYWtlQnVm
ZmVyU3RvcmFnZTExKHNvdXJjZVN0b3JhZ2UpOworICAgIGlmIChzb3VyY2UpCisgICAgeworICAg
ICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VD
b250ZXh0KCk7CisKKyAgICAgICAgRDNEMTFfQk9YIHNyY0JveDsKKyAgICAgICAgc3JjQm94Lmxl
ZnQgPSBzb3VyY2VPZmZzZXQ7CisgICAgICAgIHNyY0JveC5yaWdodCA9IHNvdXJjZU9mZnNldCAr
IHNpemU7CisgICAgICAgIHNyY0JveC50b3AgPSAwOworICAgICAgICBzcmNCb3guYm90dG9tID0g
MTsKKyAgICAgICAgc3JjQm94LmZyb250ID0gMDsKKyAgICAgICAgc3JjQm94LmJhY2sgPSAxOwor
CisgICAgICAgIEFTU0VSVChtU3RhZ2luZ0J1ZmZlciAmJiBzb3VyY2UtPm1TdGFnaW5nQnVmZmVy
KTsKKyAgICAgICAgY29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKG1TdGFnaW5nQnVmZmVy
LCAwLCBkZXN0T2Zmc2V0LCAwLCAwLCBzb3VyY2UtPm1TdGFnaW5nQnVmZmVyLCAwLCAmc3JjQm94
KTsKKyAgICB9Cit9CisKK3ZvaWQgQnVmZmVyU3RvcmFnZTExOjpjbGVhcigpCit7CisgICAgbVJl
c29sdmVkRGF0YVZhbGlkID0gZmFsc2U7CisgICAgbVNpemUgPSAwOworfQorCit1bnNpZ25lZCBp
bnQgQnVmZmVyU3RvcmFnZTExOjpnZXRTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVNpemU7
Cit9CisKK2Jvb2wgQnVmZmVyU3RvcmFnZTExOjpzdXBwb3J0c0RpcmVjdEJpbmRpbmcoKSBjb25z
dAoreworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6bWFya0J1
ZmZlclVzYWdlKCkKK3sKKyAgICBtUmVhZFVzYWdlQ291bnQrKzsKKyAgICBtV3JpdGVVc2FnZUNv
dW50Kys7CisKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgdXNhZ2VMaW1pdCA9IDU7CisKKyAgICBp
ZiAobVJlYWRVc2FnZUNvdW50ID4gdXNhZ2VMaW1pdCAmJiBtUmVzb2x2ZWREYXRhKQorICAgIHsK
KyAgICAgICAgZnJlZShtUmVzb2x2ZWREYXRhKTsKKyAgICAgICAgbVJlc29sdmVkRGF0YSA9IE5V
TEw7CisgICAgICAgIG1SZXNvbHZlZERhdGFTaXplID0gMDsKKyAgICAgICAgbVJlc29sdmVkRGF0
YVZhbGlkID0gZmFsc2U7CisgICAgfQorfQorCitJRDNEMTFCdWZmZXIgKkJ1ZmZlclN0b3JhZ2Ux
MTo6Z2V0QnVmZmVyKEJ1ZmZlclVzYWdlIHVzYWdlKQoreworICAgIG1hcmtCdWZmZXJVc2FnZSgp
OworCisgICAgRGlyZWN0QnVmZmVyU3RvcmFnZTExICpkaXJlY3RCdWZmZXIgPSBOVUxMOworCisg
ICAgYXV0byBkaXJlY3RCdWZmZXJJdCA9IG1EaXJlY3RCdWZmZXJzLmZpbmQodXNhZ2UpOworICAg
IGlmIChkaXJlY3RCdWZmZXJJdCAhPSBtRGlyZWN0QnVmZmVycy5lbmQoKSkKKyAgICB7CisgICAg
ICAgIGRpcmVjdEJ1ZmZlciA9IGRpcmVjdEJ1ZmZlckl0LT5zZWNvbmQ7CisgICAgfQorCisgICAg
aWYgKGRpcmVjdEJ1ZmZlcikKKyAgICB7CisgICAgICAgIGlmIChkaXJlY3RCdWZmZXItPmlzRGly
dHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gaWYgdXBkYXRlRnJvbVN0YWdpbmdCdWZm
ZXIgcmV0dXJucyB0cnVlLCB0aGUgRDNEIGJ1ZmZlciBoYXMgYmVlbiByZWNyZWF0ZWQKKyAgICAg
ICAgICAgIC8vIGFuZCB3ZSBzaG91bGQgdXBkYXRlIG91ciBzZXJpYWwKKyAgICAgICAgICAgIGlm
IChkaXJlY3RCdWZmZXItPnVwZGF0ZUZyb21TdGFnaW5nQnVmZmVyKG1TdGFnaW5nQnVmZmVyLCBt
U2l6ZSwgMCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdXBkYXRlU2VyaWFsKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgLy8gYnVmZmVyIGlzIG5vdCBhbGxvY2F0ZWQsIGNyZWF0ZSBpdAorICAgICAgICBkaXJlY3RC
dWZmZXIgPSBuZXcgRGlyZWN0QnVmZmVyU3RvcmFnZTExKG1SZW5kZXJlciwgdXNhZ2UpOworICAg
ICAgICBkaXJlY3RCdWZmZXItPnVwZGF0ZUZyb21TdGFnaW5nQnVmZmVyKG1TdGFnaW5nQnVmZmVy
LCBtU2l6ZSwgMCk7CisKKyAgICAgICAgbURpcmVjdEJ1ZmZlcnMuaW5zZXJ0KHN0ZDo6bWFrZV9w
YWlyKHVzYWdlLCBkaXJlY3RCdWZmZXIpKTsKKyAgICAgICAgdXBkYXRlU2VyaWFsKCk7CisgICAg
fQorCisgICAgcmV0dXJuIGRpcmVjdEJ1ZmZlci0+Z2V0RDNEQnVmZmVyKCk7Cit9CisKK0RpcmVj
dEJ1ZmZlclN0b3JhZ2UxMTo6RGlyZWN0QnVmZmVyU3RvcmFnZTExKFJlbmRlcmVyMTEgKnJlbmRl
cmVyLCBCdWZmZXJVc2FnZSB1c2FnZSkKKyAgICA6IG1SZW5kZXJlcihyZW5kZXJlciksCisgICAg
ICBtVXNhZ2UodXNhZ2UpLAorICAgICAgbURpcmVjdEJ1ZmZlcihOVUxMKSwKKyAgICAgIG1CdWZm
ZXJTaXplKDApLAorICAgICAgbURpcnR5KGZhbHNlKQoreworfQorCitEaXJlY3RCdWZmZXJTdG9y
YWdlMTE6On5EaXJlY3RCdWZmZXJTdG9yYWdlMTEoKQoreworICAgIFNhZmVSZWxlYXNlKG1EaXJl
Y3RCdWZmZXIpOworfQorCitCdWZmZXJVc2FnZSBEaXJlY3RCdWZmZXJTdG9yYWdlMTE6OmdldFVz
YWdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVVzYWdlOworfQorCisvLyBSZXR1cm5zIHRydWUg
aWYgaXQgcmVjcmVhdGVzIHRoZSBkaXJlY3QgYnVmZmVyCitib29sIERpcmVjdEJ1ZmZlclN0b3Jh
Z2UxMTo6dXBkYXRlRnJvbVN0YWdpbmdCdWZmZXIoSUQzRDExQnVmZmVyICpzdGFnaW5nQnVmZmVy
LCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBJRDNEMTFEZXZpY2UgKmRldmlj
ZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29u
dGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworCisgICAgLy8gdW51c2VkIGZv
ciBub3cKKyAgICBBU1NFUlQob2Zmc2V0ID09IDApOworCisgICAgdW5zaWduZWQgaW50IHJlcXVp
cmVkQnVmZmVyU2l6ZSA9IHNpemUgKyBvZmZzZXQ7CisgICAgYm9vbCBjcmVhdGVCdWZmZXIgPSAh
bURpcmVjdEJ1ZmZlciB8fCBtQnVmZmVyU2l6ZSA8IHJlcXVpcmVkQnVmZmVyU2l6ZTsKKworICAg
IC8vIChSZSlpbml0aWFsaXplIEQzRCBidWZmZXIgaWYgbmVlZGVkCisgICAgaWYgKGNyZWF0ZUJ1
ZmZlcikKKyAgICB7CisgICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIGJ1ZmZlckRlc2M7CisgICAg
ICAgIGZpbGxCdWZmZXJEZXNjKCZidWZmZXJEZXNjLCBtUmVuZGVyZXIsIG1Vc2FnZSwgcmVxdWly
ZWRCdWZmZXJTaXplKTsKKworICAgICAgICBJRDNEMTFCdWZmZXIgKm5ld0J1ZmZlcjsKKyAgICAg
ICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmYnVmZmVyRGVzYywgTlVM
TCwgJm5ld0J1ZmZlcik7CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIE5vIGxvbmdlciBuZWVkIHRoZSBvbGQgYnVmZmVyCisg
ICAgICAgIFNhZmVSZWxlYXNlKG1EaXJlY3RCdWZmZXIpOworICAgICAgICBtRGlyZWN0QnVmZmVy
ID0gbmV3QnVmZmVyOworCisgICAgICAgIG1CdWZmZXJTaXplID0gYnVmZmVyRGVzYy5CeXRlV2lk
dGg7CisgICAgfQorCisgICAgLy8gQ29weSBkYXRhIHZpYSBzdGFnaW5nIGJ1ZmZlcgorICAgIEQz
RDExX0JPWCBzcmNCb3g7CisgICAgc3JjQm94LmxlZnQgPSAwOworICAgIHNyY0JveC5yaWdodCA9
IHNpemU7CisgICAgc3JjQm94LnRvcCA9IDA7CisgICAgc3JjQm94LmJvdHRvbSA9IDE7CisgICAg
c3JjQm94LmZyb250ID0gMDsKKyAgICBzcmNCb3guYmFjayA9IDE7CisKKyAgICBjb250ZXh0LT5D
b3B5U3VicmVzb3VyY2VSZWdpb24obURpcmVjdEJ1ZmZlciwgMCwgb2Zmc2V0LCAwLCAwLCBzdGFn
aW5nQnVmZmVyLCAwLCAmc3JjQm94KTsKKworICAgIG1EaXJ0eSA9IGZhbHNlOworCisgICAgcmV0
dXJuIGNyZWF0ZUJ1ZmZlcjsKK30KKwordm9pZCBEaXJlY3RCdWZmZXJTdG9yYWdlMTE6OmZpbGxC
dWZmZXJEZXNjKEQzRDExX0JVRkZFUl9ERVNDKiBidWZmZXJEZXNjLCBSZW5kZXJlciAqcmVuZGVy
ZXIsIEJ1ZmZlclVzYWdlIHVzYWdlLCB1bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSkKK3sKKyAgICBi
dWZmZXJEZXNjLT5CeXRlV2lkdGggPSBidWZmZXJTaXplOworICAgIGJ1ZmZlckRlc2MtPk1pc2NG
bGFncyA9IDA7CisgICAgYnVmZmVyRGVzYy0+U3RydWN0dXJlQnl0ZVN0cmlkZSA9IDA7CisKKyAg
ICBzd2l0Y2ggKHVzYWdlKQorICAgIHsKKyAgICAgIGNhc2UgQlVGRkVSX1VTQUdFX1ZFUlRFWDoK
KyAgICAgICAgYnVmZmVyRGVzYy0+VXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAg
ICBidWZmZXJEZXNjLT5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1ZFUlRFWF9CVUZGRVI7CisgICAg
ICAgIGJ1ZmZlckRlc2MtPkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICAgIGNhc2UgQlVGRkVSX1VTQUdFX0lOREVYOgorICAgICAgICBidWZmZXJEZXNjLT5Vc2FnZSA9
IEQzRDExX1VTQUdFX0RFRkFVTFQ7CisgICAgICAgIGJ1ZmZlckRlc2MtPkJpbmRGbGFncyA9IEQz
RDExX0JJTkRfSU5ERVhfQlVGRkVSOworICAgICAgICBidWZmZXJEZXNjLT5DUFVBY2Nlc3NGbGFn
cyA9IDA7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICB9Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvQnVmZmVyU3RvcmFnZTExLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0J1ZmZlclN0b3Jh
Z2UxMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmE2YWZhZmUxYjQ0N2U3N2ExZDJhNmUyNjU5NWZjNzYyMmQ2MDZk
YjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL0J1ZmZlclN0b3JhZ2UxMS5oCkBAIC0wLDAgKzEsOTIgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisvLyBCdWZmZXJTdG9yYWdlMTEuaCBEZWZpbmVzIHRoZSBCdWZmZXJTdG9y
YWdlMTEgY2xhc3MuCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0JVRkZFUlNUT1JBR0Ux
MV9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfQlVGRkVSU1RPUkFHRTExX0hfCisKKyNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5oIgorCituYW1lc3BhY2Ug
cngKK3sKK2NsYXNzIFJlbmRlcmVyOworY2xhc3MgUmVuZGVyZXIxMTsKK2NsYXNzIERpcmVjdEJ1
ZmZlclN0b3JhZ2UxMTsKKworZW51bSBCdWZmZXJVc2FnZQoreworICAgIEJVRkZFUl9VU0FHRV9W
RVJURVgsCisgICAgQlVGRkVSX1VTQUdFX0lOREVYLAorfTsKKworY2xhc3MgQnVmZmVyU3RvcmFn
ZTExIDogcHVibGljIEJ1ZmZlclN0b3JhZ2UKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IEJ1
ZmZlclN0b3JhZ2UxMShSZW5kZXJlcjExICpyZW5kZXJlcik7CisgICAgdmlydHVhbCB+QnVmZmVy
U3RvcmFnZTExKCk7CisKKyAgICBzdGF0aWMgQnVmZmVyU3RvcmFnZTExICptYWtlQnVmZmVyU3Rv
cmFnZTExKEJ1ZmZlclN0b3JhZ2UgKmJ1ZmZlclN0b3JhZ2UpOworCisgICAgdmlydHVhbCB2b2lk
ICpnZXREYXRhKCk7CisgICAgdmlydHVhbCB2b2lkIHNldERhdGEoY29uc3Qgdm9pZCogZGF0YSwg
dW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBvZmZzZXQpOworICAgIHZpcnR1YWwgdm9p
ZCBjb3B5RGF0YShCdWZmZXJTdG9yYWdlKiBzb3VyY2VTdG9yYWdlLCB1bnNpZ25lZCBpbnQgc2l6
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZU9mZnNldCwg
dW5zaWduZWQgaW50IGRlc3RPZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpOworICAg
IHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
c3VwcG9ydHNEaXJlY3RCaW5kaW5nKCkgY29uc3Q7CisKKyAgICBJRDNEMTFCdWZmZXIgKmdldEJ1
ZmZlcihCdWZmZXJVc2FnZSB1c2FnZSk7CisKKyAgcHJpdmF0ZToKKyAgICBSZW5kZXJlcjExICpt
UmVuZGVyZXI7CisKKyAgICBJRDNEMTFCdWZmZXIgKm1TdGFnaW5nQnVmZmVyOworICAgIHVuc2ln
bmVkIGludCBtU3RhZ2luZ0J1ZmZlclNpemU7CisKKyAgICBzdGQ6Om1hcDxCdWZmZXJVc2FnZSwg
RGlyZWN0QnVmZmVyU3RvcmFnZTExKj4gbURpcmVjdEJ1ZmZlcnM7CisKKyAgICB1bnNpZ25lZCBp
bnQgbVNpemU7CisKKyAgICB2b2lkICptUmVzb2x2ZWREYXRhOworICAgIHVuc2lnbmVkIGludCBt
UmVzb2x2ZWREYXRhU2l6ZTsKKyAgICBib29sIG1SZXNvbHZlZERhdGFWYWxpZDsKKworICAgIHVu
c2lnbmVkIGludCBtUmVhZFVzYWdlQ291bnQ7CisgICAgdW5zaWduZWQgaW50IG1Xcml0ZVVzYWdl
Q291bnQ7CisKKyAgICB2b2lkIG1hcmtCdWZmZXJVc2FnZSgpOworfTsKKworLy8gRWFjaCBpbnN0
YW5jZSBvZiBCdWZmZXJTdG9yYWdlRDNEQnVmZmVyMTEgaXMgc3BlY2lhbGl6ZWQgZm9yIGEgY2xh
c3Mgb2YgRDNEIGJpbmRpbmcgcG9pbnRzCisvLyAtIHZlcnRleCBidWZmZXJzCisvLyAtIGluZGV4
IGJ1ZmZlcnMKK2NsYXNzIERpcmVjdEJ1ZmZlclN0b3JhZ2UxMQoreworICBwdWJsaWM6CisgICAg
RGlyZWN0QnVmZmVyU3RvcmFnZTExKFJlbmRlcmVyMTEgKnJlbmRlcmVyLCBCdWZmZXJVc2FnZSB1
c2FnZSk7CisgICAgfkRpcmVjdEJ1ZmZlclN0b3JhZ2UxMSgpOworCisgICAgQnVmZmVyVXNhZ2Ug
Z2V0VXNhZ2UoKSBjb25zdDsKKyAgICBib29sIHVwZGF0ZUZyb21TdGFnaW5nQnVmZmVyKElEM0Qx
MUJ1ZmZlciAqc3RhZ2luZ0J1ZmZlciwgc2l6ZV90IHNpemUsIHNpemVfdCBvZmZzZXQpOworCisg
ICAgSUQzRDExQnVmZmVyICpnZXREM0RCdWZmZXIoKSB7IHJldHVybiBtRGlyZWN0QnVmZmVyOyB9
CisgICAgYm9vbCBpc0RpcnR5KCkgY29uc3QgeyByZXR1cm4gbURpcnR5OyB9CisgICAgdm9pZCBt
YXJrRGlydHkoKSB7IG1EaXJ0eSA9IHRydWU7IH0KKworICBwcml2YXRlOgorICAgIFJlbmRlcmVy
MTEgKm1SZW5kZXJlcjsKKyAgICBjb25zdCBCdWZmZXJVc2FnZSBtVXNhZ2U7CisgICAgSUQzRDEx
QnVmZmVyICptRGlyZWN0QnVmZmVyOworICAgIHNpemVfdCBtQnVmZmVyU2l6ZTsKKyAgICBib29s
IG1EaXJ0eTsKKworICAgIHN0YXRpYyB2b2lkIGZpbGxCdWZmZXJEZXNjKEQzRDExX0JVRkZFUl9E
RVNDKiBidWZmZXJEZXNjLCBSZW5kZXJlciAqcmVuZGVyZXIsIEJ1ZmZlclVzYWdlIHVzYWdlLCB1
bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSk7Cit9OworCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJf
UkVOREVSRVJfQlVGRkVSU1RPUkFHRTExX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ZlbmNlMTEuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9GZW5jZTExLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yYTdkNGQ0M2VmM2E3ZWRlOTVmZGZmZTRhNDRjNDIxNDljNTlmOTYyCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9GZW5jZTExLmNwcApAQCAtMCwwICsxLDEzNCBAQAorI2luY2x1ZGUgInBy
ZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gRmVuY2UxMS5jcHA6IERlZmluZXMgdGhl
IHJ4OjpGZW5jZTExIGNsYXNzIHdoaWNoIGltcGxlbWVudHMgcng6OkZlbmNlSW1wbC4KKworI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9GZW5jZTExLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL21haW4uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVy
ZXIxMS5oIgorCituYW1lc3BhY2UgcngKK3sKKworRmVuY2UxMTo6RmVuY2UxMShyeDo6UmVuZGVy
ZXIxMSAqcmVuZGVyZXIpCit7CisgICAgbVJlbmRlcmVyID0gcmVuZGVyZXI7CisgICAgbVF1ZXJ5
ID0gTlVMTDsKK30KKworRmVuY2UxMTo6fkZlbmNlMTEoKQoreworICAgIGlmIChtUXVlcnkpCisg
ICAgeworICAgICAgICBtUXVlcnktPlJlbGVhc2UoKTsKKyAgICAgICAgbVF1ZXJ5ID0gTlVMTDsK
KyAgICB9Cit9CisKK0dMYm9vbGVhbiBGZW5jZTExOjppc0ZlbmNlKCkKK3sKKyAgICAvLyBHTF9O
Vl9mZW5jZSBzcGVjOgorICAgIC8vIEEgbmFtZSByZXR1cm5lZCBieSBHZW5GZW5jZXNOViwgYnV0
IG5vdCB5ZXQgc2V0IHZpYSBTZXRGZW5jZU5WLCBpcyBub3QgdGhlIG5hbWUgb2YgYW4gZXhpc3Rp
bmcgZmVuY2UuCisgICAgcmV0dXJuIG1RdWVyeSAhPSBOVUxMOworfQorCit2b2lkIEZlbmNlMTE6
OnNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pCit7CisgICAgaWYgKCFtUXVlcnkpCisgICAgewor
ICAgICAgICBEM0QxMV9RVUVSWV9ERVNDIHF1ZXJ5RGVzYzsKKyAgICAgICAgcXVlcnlEZXNjLlF1
ZXJ5ID0gRDNEMTFfUVVFUllfRVZFTlQ7CisgICAgICAgIHF1ZXJ5RGVzYy5NaXNjRmxhZ3MgPSAw
OworCisgICAgICAgIGlmIChGQUlMRUQobVJlbmRlcmVyLT5nZXREZXZpY2UoKS0+Q3JlYXRlUXVl
cnkoJnF1ZXJ5RGVzYywgJm1RdWVyeSkpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgfQorCisgICAgbVJl
bmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCktPkVuZChtUXVlcnkpOworCisgICAgc2V0Q29uZGl0
aW9uKGNvbmRpdGlvbik7CisgICAgc2V0U3RhdHVzKEdMX0ZBTFNFKTsKK30KKworR0xib29sZWFu
IEZlbmNlMTE6OnRlc3RGZW5jZSgpCit7CisgICAgaWYgKG1RdWVyeSA9PSBOVUxMKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfVFJVRSk7
CisgICAgfQorCisgICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRl
eHQoKS0+R2V0RGF0YShtUXVlcnksIE5VTEwsIDAsIDApOworCisgICAgaWYgKG1SZW5kZXJlci0+
aXNEZXZpY2VMb3N0KCkpCisgICAgeworICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSwgR0xfVFJVRSk7CisgICAgfQorCisgICAgQVNTRVJUKHJlc3VsdCA9PSBTX09LIHx8
IHJlc3VsdCA9PSBTX0ZBTFNFKTsKKyAgICBzZXRTdGF0dXMocmVzdWx0ID09IFNfT0spOworICAg
IHJldHVybiBnZXRTdGF0dXMoKTsKK30KKwordm9pZCBGZW5jZTExOjpmaW5pc2hGZW5jZSgpCit7
CisgICAgaWYgKG1RdWVyeSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgfQorCisgICAgd2hpbGUgKCF0ZXN0RmVuY2Uo
KSkKKyAgICB7CisgICAgICAgIFNsZWVwKDApOworICAgIH0KK30KKwordm9pZCBGZW5jZTExOjpn
ZXRGZW5jZWl2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcykKK3sKKyAgICBpZiAobVF1ZXJ5
ID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHBuYW1lKQorICAgIHsKKyAgICAgIGNhc2Ug
R0xfRkVOQ0VfU1RBVFVTX05WOgorICAgICAgICB7CisgICAgICAgICAgICAvLyBHTF9OVl9mZW5j
ZSBzcGVjOgorICAgICAgICAgICAgLy8gT25jZSB0aGUgc3RhdHVzIG9mIGEgZmVuY2UgaGFzIGJl
ZW4gZmluaXNoZWQgKHZpYSBGaW5pc2hGZW5jZU5WKSBvciB0ZXN0ZWQgYW5kIHRoZSByZXR1cm5l
ZCBzdGF0dXMgaXMgVFJVRSAodmlhIGVpdGhlciBUZXN0RmVuY2VOVgorICAgICAgICAgICAgLy8g
b3IgR2V0RmVuY2Vpdk5WIHF1ZXJ5aW5nIHRoZSBGRU5DRV9TVEFUVVNfTlYpLCB0aGUgc3RhdHVz
IHJlbWFpbnMgVFJVRSB1bnRpbCB0aGUgbmV4dCBTZXRGZW5jZU5WIG9mIHRoZSBmZW5jZS4KKyAg
ICAgICAgICAgIGlmIChnZXRTdGF0dXMoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBwYXJhbXNbMF0gPSBHTF9UUlVFOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXItPmdldERldmlj
ZUNvbnRleHQoKS0+R2V0RGF0YShtUXVlcnksIE5VTEwsIDAsIEQzRDExX0FTWU5DX0dFVERBVEFf
RE9OT1RGTFVTSCk7CisKKyAgICAgICAgICAgIGlmIChtUmVuZGVyZXItPmlzRGV2aWNlTG9zdCgp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9IEdMX1RSVUU7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBTX09LIHx8IHJlc3VsdCA9
PSBTX0ZBTFNFKTsKKyAgICAgICAgICAgIHNldFN0YXR1cyhyZXN1bHQgPT0gU19PSyk7CisgICAg
ICAgICAgICBwYXJhbXNbMF0gPSBnZXRTdGF0dXMoKTsKKworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgIGNhc2UgR0xfRkVOQ0VfQ09ORElUSU9OX05WOgorICAgICAgICBwYXJh
bXNbMF0gPSBnZXRDb25kaXRpb24oKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9GZW5jZTExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ZlbmNlMTEuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
NTM5OGJjYTE0OTAwNjQ3YjAzZGYyN2ExMDE5MWQ5MDY5MTkxMTEyCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9G
ZW5jZTExLmgKQEAgLTAsMCArMSwzOSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIEZlbmNlMTEuaDog
RGVmaW5lcyB0aGUgcng6OkZlbmNlMTEgY2xhc3Mgd2hpY2ggaW1wbGVtZW50cyByeDo6RmVuY2VJ
bXBsLgorCisjaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9GZW5jZTExX0hfCisjZGVmaW5lIExJ
QkdMRVNWMl9SRU5ERVJFUl9GZW5jZTExX0hfCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvRmVuY2VJbXBsLmgiCisKK25hbWVzcGFjZSByeAoreworY2xhc3MgUmVuZGVyZXIxMTsKKwor
Y2xhc3MgRmVuY2UxMSA6IHB1YmxpYyBGZW5jZUltcGwKK3sKKyAgcHVibGljOgorICAgIGV4cGxp
Y2l0IEZlbmNlMTEocng6OlJlbmRlcmVyMTEgKnJlbmRlcmVyKTsKKyAgICB2aXJ0dWFsIH5GZW5j
ZTExKCk7CisKKyAgICBHTGJvb2xlYW4gaXNGZW5jZSgpOworICAgIHZvaWQgc2V0RmVuY2UoR0xl
bnVtIGNvbmRpdGlvbik7CisgICAgR0xib29sZWFuIHRlc3RGZW5jZSgpOworICAgIHZvaWQgZmlu
aXNoRmVuY2UoKTsKKyAgICB2b2lkIGdldEZlbmNlaXYoR0xlbnVtIHBuYW1lLCBHTGludCAqcGFy
YW1zKTsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihGZW5jZTEx
KTsKKworICAgIHJ4OjpSZW5kZXJlcjExICptUmVuZGVyZXI7CisgICAgSUQzRDExUXVlcnkgKm1R
dWVyeTsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9GRU5DRTExX0hf
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL0ltYWdlMTEuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9JbWFnZTExLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYjA3YjlkMTgyOGE4
YjMxNmNlOGRlYjM0YTU2NGQzNDljYjNiOGRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbWFnZTExLmNwcApA
QCAtMCwwICsxLDQ5NSBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworLy8gSW1hZ2UxMS5oOiBJbXBsZW1lbnRzIHRoZSByeDo6SW1hZ2UxMSBjbGFzcywgd2hpY2gg
YWN0cyBhcyB0aGUgaW50ZXJmYWNlIHRvCisvLyB0aGUgYWN0dWFsIHVuZGVybHlpbmcgcmVzb3Vy
Y2VzIG9mIGEgVGV4dHVyZQorCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1Jl
bmRlcmVyMTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW1hZ2UxMS5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9UZXh0dXJlU3RvcmFnZTExLmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L1JlbmRlcmJ1ZmZlci5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDExL3JlbmRlcmVyMTFfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZ2Vu
ZXJhdGVtaXAuaCIKKworbmFtZXNwYWNlIHJ4Cit7CisKK0ltYWdlMTE6OkltYWdlMTEoKQorewor
ICAgIG1TdGFnaW5nVGV4dHVyZSA9IE5VTEw7CisgICAgbVJlbmRlcmVyID0gTlVMTDsKKyAgICBt
RFhHSUZvcm1hdCA9IERYR0lfRk9STUFUX1VOS05PV047Cit9CisKK0ltYWdlMTE6On5JbWFnZTEx
KCkKK3sKKyAgICBpZiAobVN0YWdpbmdUZXh0dXJlKQorICAgIHsKKyAgICAgICAgbVN0YWdpbmdU
ZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgfQorfQorCitJbWFnZTExICpJbWFnZTExOjptYWtlSW1h
Z2UxMShJbWFnZSAqaW1nKQoreworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKHJ4OjpJbWFn
ZTExKiwgaW1nKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHJ4OjpJbWFnZTExKj4oaW1nKTsK
K30KKwordm9pZCBJbWFnZTExOjpnZW5lcmF0ZU1pcG1hcChJbWFnZTExICpkZXN0LCBJbWFnZTEx
ICpzcmMpCit7CisgICAgQVNTRVJUKHNyYy0+Z2V0RFhHSUZvcm1hdCgpID09IGRlc3QtPmdldERY
R0lGb3JtYXQoKSk7CisgICAgQVNTRVJUKHNyYy0+Z2V0V2lkdGgoKSA9PSAxIHx8IHNyYy0+Z2V0
V2lkdGgoKSAvIDIgPT0gZGVzdC0+Z2V0V2lkdGgoKSk7CisgICAgQVNTRVJUKHNyYy0+Z2V0SGVp
Z2h0KCkgPT0gMSB8fCBzcmMtPmdldEhlaWdodCgpIC8gMiA9PSBkZXN0LT5nZXRIZWlnaHQoKSk7
CisKKyAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgZGVzdE1hcHBlZCwgc3JjTWFwcGVkOwor
ICAgIGRlc3QtPm1hcChEM0QxMV9NQVBfV1JJVEUsICZkZXN0TWFwcGVkKTsKKyAgICBzcmMtPm1h
cChEM0QxMV9NQVBfUkVBRCwgJnNyY01hcHBlZCk7CisKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFy
ICpzb3VyY2VEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oc3Jj
TWFwcGVkLnBEYXRhKTsKKyAgICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0YSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRlc3RNYXBwZWQucERhdGEpOworCisgICAgaWYgKHNvdXJj
ZURhdGEgJiYgZGVzdERhdGEpCisgICAgeworICAgICAgICBzd2l0Y2ggKHNyYy0+Z2V0RFhHSUZv
cm1hdCgpKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9V
Tk9STToKKyAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOgorICAgICAg
ICAgICAgR2VuZXJhdGVNaXA8UjhHOEI4QTg+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWln
aHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBl
ZC5Sb3dQaXRjaCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIERYR0lfRk9S
TUFUX0E4X1VOT1JNOgorICAgICAgICAgICAgR2VuZXJhdGVNaXA8QTg+KHNyYy0+Z2V0V2lkdGgo
KSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0
RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBjYXNlIERYR0lfRk9STUFUX1I4X1VOT1JNOgorICAgICAgICAgICAgR2VuZXJhdGVNaXA8Ujg+
KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVk
LlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDoKKyAg
ICAgICAgICAgIEdlbmVyYXRlTWlwPEEzMkIzMkczMlIzMkY+KHNyYy0+Z2V0V2lkdGgoKSwgc3Jj
LT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwg
ZGVzdE1hcHBlZC5Sb3dQaXRjaCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNl
IERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVDoKKyAgICAgICAgICAgIEdlbmVyYXRlTWlwPFIz
MkczMkIzMkY+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwg
c3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9G
TE9BVDoKKyAgICAgICAgICAgIEdlbmVyYXRlTWlwPEExNkIxNkcxNlIxNkY+KHNyYy0+Z2V0V2lk
dGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBk
ZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfVU5PUk06CisgICAgICAgICAgICBHZW5lcmF0ZU1p
cDxSOEc4PihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNy
Y01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfRkxPQVQ6CisgICAg
ICAgICAgICBHZW5lcmF0ZU1pcDxSMTZGPihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0
KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQu
Um93UGl0Y2gpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9SMTZHMTZfRkxPQVQ6CisgICAgICAgICAgICBHZW5lcmF0ZU1pcDxSMTZHMTZGPihzcmMtPmdl
dFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRj
aCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQ6CisgICAgICAgICAgICBHZW5lcmF0
ZU1pcDxSMzJGPihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEs
IHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQ6
CisgICAgICAgICAgICBHZW5lcmF0ZU1pcDxSMzJHMzJGPihzcmMtPmdldFdpZHRoKCksIHNyYy0+
Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRl
c3RNYXBwZWQuUm93UGl0Y2gpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIGRlc3QtPnVubWFwKCk7CisgICAgICAgIHNyYy0+dW5tYXAoKTsKKyAg
ICB9CisKKyAgICBkZXN0LT5tYXJrRGlydHkoKTsKK30KKworc3RhdGljIGJvb2wgRm9ybWF0UmVx
dWlyZXNJbml0aWFsaXphdGlvbihEWEdJX0ZPUk1BVCBkeGdpRm9ybWF0LCBHTGVudW0gaW50ZXJu
YWxGb3JtYXQpCit7CisgICAgcmV0dXJuIChkeGdpRm9ybWF0ID09IERYR0lfRk9STUFUX1I4RzhC
OEE4X1VOT1JNICYmIGdsOjpHZXRBbHBoYVNpemUoaW50ZXJuYWxGb3JtYXQpID09IDApIHx8Cisg
ICAgICAgICAgIChkeGdpRm9ybWF0ID09IERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCAm
JiBnbDo6R2V0QWxwaGFTaXplKGludGVybmFsRm9ybWF0KSA9PSAwKTsKK30KKworYm9vbCBJbWFn
ZTExOjppc0RpcnR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKChtU3RhZ2luZ1RleHR1cmUgfHwg
Rm9ybWF0UmVxdWlyZXNJbml0aWFsaXphdGlvbihtRFhHSUZvcm1hdCwgbUludGVybmFsRm9ybWF0
KSkgJiYgbURpcnR5KTsKK30KKworYm9vbCBJbWFnZTExOjp1cGRhdGVTdXJmYWNlKFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgVGV4dHVy
ZVN0b3JhZ2UxMV8yRCAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMV8yRDo6bWFrZVRleHR1
cmVTdG9yYWdlMTFfMkQoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAgIHJldHVy
biBzdG9yYWdlMTEtPnVwZGF0ZVN1YnJlc291cmNlTGV2ZWwoZ2V0U3RhZ2luZ1RleHR1cmUoKSwg
Z2V0U3RhZ2luZ1N1YnJlc291cmNlKCksIGxldmVsLCAwLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0KTsKK30KKworYm9vbCBJbWFnZTExOjp1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgaW50IGZhY2UsIGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7Cisg
ICAgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFnZTExX0N1
YmU6Om1ha2VUZXh0dXJlU3RvcmFnZTExX0N1YmUoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNl
KCkpOworICAgIHJldHVybiBzdG9yYWdlMTEtPnVwZGF0ZVN1YnJlc291cmNlTGV2ZWwoZ2V0U3Rh
Z2luZ1RleHR1cmUoKSwgZ2V0U3RhZ2luZ1N1YnJlc291cmNlKCksIGxldmVsLCBmYWNlLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKK30KKworYm9vbCBJbWFnZTExOjpyZWRlZmlu
ZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgYm9vbCBmb3JjZVJlbGVhc2UpCit7CisgICAgaWYgKG1XaWR0aCAh
PSB3aWR0aCB8fAorICAgICAgICBtSGVpZ2h0ICE9IGhlaWdodCB8fAorICAgICAgICBtSW50ZXJu
YWxGb3JtYXQgIT0gaW50ZXJuYWxmb3JtYXQgfHwKKyAgICAgICAgZm9yY2VSZWxlYXNlKQorICAg
IHsKKyAgICAgICAgbVJlbmRlcmVyID0gUmVuZGVyZXIxMTo6bWFrZVJlbmRlcmVyMTEocmVuZGVy
ZXIpOworCisgICAgICAgIG1XaWR0aCA9IHdpZHRoOworICAgICAgICBtSGVpZ2h0ID0gaGVpZ2h0
OworICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBpbnRlcm5hbGZvcm1hdDsKKyAgICAgICAgLy8g
Y29tcHV0ZSB0aGUgZDNkIGZvcm1hdCB0aGF0IHdpbGwgYmUgdXNlZAorICAgICAgICBtRFhHSUZv
cm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0VGV4dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Cisg
ICAgICAgIG1BY3R1YWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVydFRleHR1cmVJbnRlcm5hbEZv
cm1hdChtRFhHSUZvcm1hdCk7CisKKyAgICAgICAgaWYgKG1TdGFnaW5nVGV4dHVyZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgbVN0YWdpbmdUZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgICAg
ICBtU3RhZ2luZ1RleHR1cmUgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSW1hZ2Ux
MTo6aXNSZW5kZXJhYmxlRm9ybWF0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gVGV4dHVyZVN0b3Jh
Z2UxMTo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShtRFhHSUZvcm1hdCk7Cit9CisKK0RYR0lf
Rk9STUFUIEltYWdlMTE6OmdldERYR0lGb3JtYXQoKSBjb25zdAoreworICAgIC8vIHRoaXMgc2hv
dWxkIG9ubHkgaGFwcGVuIGlmIHRoZSBpbWFnZSBoYXNuJ3QgYmVlbiByZWRlZmluZWQgZmlyc3QK
KyAgICAvLyB3aGljaCB3b3VsZCBiZSBhIGJ1ZyBieSB0aGUgY2FsbGVyCisgICAgQVNTRVJUKG1E
WEdJRm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pOworCisgICAgcmV0dXJuIG1EWEdJRm9y
bWF0OworfQorCisvLyBTdG9yZSB0aGUgcGl4ZWwgcmVjdGFuZ2xlIGRlc2lnbmF0ZWQgYnkgeG9m
ZnNldCx5b2Zmc2V0LHdpZHRoLGhlaWdodCB3aXRoIHBpeGVscyBzdG9yZWQgYXMgZm9ybWF0L3R5
cGUgYXQgaW5wdXQKKy8vIGludG8gdGhlIHRhcmdldCBwaXhlbCByZWN0YW5nbGUuCit2b2lkIElt
YWdlMTE6OmxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICBHTGludCB1bnBhY2tB
bGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0KQoreworICAgIEQzRDExX01BUFBFRF9TVUJSRVNP
VVJDRSBtYXBwZWRJbWFnZTsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IG1hcChEM0QxMV9NQVBfV1JJ
VEUsICZtYXBwZWRJbWFnZSk7CisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAg
ICAgRVJSKCJDb3VsZCBub3QgbWFwIGltYWdlIGZvciBsb2FkaW5nLiIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IGdsOjpDb21wdXRlUGl0
Y2god2lkdGgsIG1JbnRlcm5hbEZvcm1hdCwgdW5wYWNrQWxpZ25tZW50KTsKKyAgICBzaXplX3Qg
cGl4ZWxTaXplID0gZDNkMTE6OkNvbXB1dGVQaXhlbFNpemVCaXRzKG1EWEdJRm9ybWF0KSAvIDg7
CisgICAgdm9pZCogb2Zmc2V0TWFwcGVkRGF0YSA9ICh2b2lkKikoKEJZVEUgKiltYXBwZWRJbWFn
ZS5wRGF0YSArICh5b2Zmc2V0ICogbWFwcGVkSW1hZ2UuUm93UGl0Y2ggKyB4b2Zmc2V0ICogcGl4
ZWxTaXplKSk7CisKKyAgICBzd2l0Y2ggKG1JbnRlcm5hbEZvcm1hdCkKKyAgICB7CisgICAgICBj
YXNlIEdMX0FMUEhBOF9FWFQ6CisgICAgICAgIGxvYWRBbHBoYURhdGFUb05hdGl2ZSh3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1h
cHBlZERhdGEpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOF9FWFQ6
CisgICAgICAgIGxvYWRMdW1pbmFuY2VEYXRhVG9OYXRpdmVPckJHUkEod2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRh
LCBmYWxzZSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9BTFBIQTMyRl9FWFQ6Cisg
ICAgICAgIGxvYWRBbHBoYUZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNo
LCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOworICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMzJGX0VYVDoKKyAgICAgICAgbG9hZEx1
bWluYW5jZUZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwg
bWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOworICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfQUxQSEExNkZfRVhUOgorICAgICAgICBsb2FkQWxwaGFIYWxmRmxvYXRE
YXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5S
b3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0UxNkZfRVhUOgorICAgICAgICBsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YVRv
UkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0
Y2gsIG9mZnNldE1hcHBlZERhdGEpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTFVN
SU5BTkNFOF9BTFBIQThfRVhUOgorICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFEYXRhVG9OYXRp
dmVPckJHUkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJv
d1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhLCBmYWxzZSk7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhUOgorICAgICAgICBsb2FkTHVtaW5hbmNlQWxw
aGFGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBl
ZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6CisgICAgICAgIGxvYWRMdW1pbmFuY2VB
bHBoYUhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX1JHQjhfT0VTOgorICAgICAgICBsb2FkUkdCVUJ5dGVEYXRhVG9SR0JB
KHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwg
b2Zmc2V0TWFwcGVkRGF0YSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9SR0I1NjU6
CisgICAgICAgIGxvYWRSR0I1NjVEYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6CisgICAgICAgIGxvYWRSR0JBVUJ5dGVE
YXRhVG9OYXRpdmUod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdl
LlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX1JHQkE0OgorICAgICAgICBsb2FkUkdCQTQ0NDREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0
YSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9SR0I1X0ExOgorICAgICAgICBsb2Fk
UkdCQTU1NTFEYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBw
ZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9CR1JBOF9FWFQ6CisgICAgICAgIGxvYWRCR1JBRGF0YVRvQkdSQSh3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1h
cHBlZERhdGEpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUkdCMzJGX0VYVDoKKyAg
ICAgICAgbG9hZFJHQkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOworICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfUkdCMTZGX0VYVDoKKyAgICAgICAgbG9hZFJHQkhhbGZGbG9h
dERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdl
LlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX1JHQkEzMkZfRVhUOgorICAgICAgICBsb2FkUkdCQUZsb2F0RGF0YVRvUkdCQSh3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1h
cHBlZERhdGEpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUkdCQTE2Rl9FWFQ6Cisg
ICAgICAgIGxvYWRSR0JBSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBp
dGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOworICAg
ICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IAorICAgIH0KKworICAg
IHVubWFwKCk7Cit9CisKK3ZvaWQgSW1hZ2UxMTo6bG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dCkKK3sKKyAgICBB
U1NFUlQoeG9mZnNldCAlIDQgPT0gMCk7CisgICAgQVNTRVJUKHlvZmZzZXQgJSA0ID09IDApOwor
CisgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZEltYWdlOworICAgIEhSRVNVTFQg
cmVzdWx0ID0gbWFwKEQzRDExX01BUF9XUklURSwgJm1hcHBlZEltYWdlKTsKKyAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBFUlIoIkNvdWxkIG5vdCBtYXAgaW1hZ2UgZm9y
IGxvYWRpbmcuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBTaXplIGNvbXB1
dGF0aW9uIGFzc3VtZXMgYSA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdAorICAg
IHNpemVfdCBibG9ja1NpemUgPSBkM2QxMTo6Q29tcHV0ZUJsb2NrU2l6ZUJpdHMobURYR0lGb3Jt
YXQpIC8gODsKKyAgICB2b2lkKiBvZmZzZXRNYXBwZWREYXRhID0gKHZvaWQqKSgoQllURSAqKW1h
cHBlZEltYWdlLnBEYXRhICsgKCh5b2Zmc2V0IC8gNCkgKiBtYXBwZWRJbWFnZS5Sb3dQaXRjaCAr
ICh4b2Zmc2V0IC8gNCkgKiBibG9ja1NpemUpKTsKKworICAgIEdMc2l6ZWkgaW5wdXRTaXplID0g
Z2w6OkNvbXB1dGVDb21wcmVzc2VkU2l6ZSh3aWR0aCwgaGVpZ2h0LCBtSW50ZXJuYWxGb3JtYXQp
OworICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IGdsOjpDb21wdXRlQ29tcHJlc3NlZFBpdGNoKHdp
ZHRoLCBtSW50ZXJuYWxGb3JtYXQpOworICAgIGludCByb3dzID0gaW5wdXRTaXplIC8gaW5wdXRQ
aXRjaDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7ICsraSkKKyAgICB7CisgICAgICAg
IG1lbWNweSgodm9pZCopKChCWVRFKilvZmZzZXRNYXBwZWREYXRhICsgaSAqIG1hcHBlZEltYWdl
LlJvd1BpdGNoKSwgKHZvaWQqKSgoQllURSopaW5wdXQgKyBpICogaW5wdXRQaXRjaCksIGlucHV0
UGl0Y2gpOworICAgIH0KKworICAgIHVubWFwKCk7Cit9CisKK3ZvaWQgSW1hZ2UxMTo6Y29weShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgZ2w6OkZyYW1lYnVmZmVyICpzb3VyY2UpCit7CisgICAgZ2w6
OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBzb3VyY2UtPmdldFJlYWRDb2xvcmJ1ZmZlcigp
OworCisgICAgaWYgKGNvbG9yYnVmZmVyICYmIGNvbG9yYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQo
KSA9PSAoR0x1aW50KW1BY3R1YWxGb3JtYXQpCisgICAgeworICAgICAgICAvLyBObyBjb252ZXJz
aW9uIG5lZWRlZC0tIHVzZSBjb3B5YmFjayBmYXN0cGF0aAorICAgICAgICBJRDNEMTFUZXh0dXJl
MkQgKmNvbG9yQnVmZmVyVGV4dHVyZSA9IE5VTEw7CisgICAgICAgIHVuc2lnbmVkIGludCBzdWJy
ZXNvdXJjZUluZGV4ID0gMDsKKworICAgICAgICBpZiAobVJlbmRlcmVyLT5nZXRSZW5kZXJUYXJn
ZXRSZXNvdXJjZShjb2xvcmJ1ZmZlciwgJnN1YnJlc291cmNlSW5kZXgsICZjb2xvckJ1ZmZlclRl
eHR1cmUpKQorICAgICAgICB7CisgICAgICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyB0ZXh0
dXJlRGVzYzsKKyAgICAgICAgICAgIGNvbG9yQnVmZmVyVGV4dHVyZS0+R2V0RGVzYygmdGV4dHVy
ZURlc2MpOworCisgICAgICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+
Z2V0RGV2aWNlKCk7CisgICAgICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpkZXZpY2VDb250
ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisKKyAgICAgICAgICAgIElEM0Qx
MVRleHR1cmUyRCogc3JjVGV4ID0gTlVMTDsKKyAgICAgICAgICAgIGlmICh0ZXh0dXJlRGVzYy5T
YW1wbGVEZXNjLkNvdW50ID4gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEM0Qx
MV9URVhUVVJFMkRfREVTQyByZXNvbHZlRGVzYzsKKyAgICAgICAgICAgICAgICByZXNvbHZlRGVz
Yy5XaWR0aCA9IHRleHR1cmVEZXNjLldpZHRoOworICAgICAgICAgICAgICAgIHJlc29sdmVEZXNj
LkhlaWdodCA9IHRleHR1cmVEZXNjLkhlaWdodDsKKyAgICAgICAgICAgICAgICByZXNvbHZlRGVz
Yy5NaXBMZXZlbHMgPSAxOworICAgICAgICAgICAgICAgIHJlc29sdmVEZXNjLkFycmF5U2l6ZSA9
IDE7CisgICAgICAgICAgICAgICAgcmVzb2x2ZURlc2MuRm9ybWF0ID0gdGV4dHVyZURlc2MuRm9y
bWF0OworICAgICAgICAgICAgICAgIHJlc29sdmVEZXNjLlNhbXBsZURlc2MuQ291bnQgPSAxOwor
ICAgICAgICAgICAgICAgIHJlc29sdmVEZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7CisgICAg
ICAgICAgICAgICAgcmVzb2x2ZURlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAg
ICAgICAgICAgICAgIHJlc29sdmVEZXNjLkJpbmRGbGFncyA9IDA7CisgICAgICAgICAgICAgICAg
cmVzb2x2ZURlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOworICAgICAgICAgICAgICAgIHJlc29sdmVE
ZXNjLk1pc2NGbGFncyA9IDA7CisKKyAgICAgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRl
dmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZyZXNvbHZlRGVzYywgTlVMTCwgJnNyY1RleCk7CisgICAg
ICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gY3JlYXRlIHJlc29sdmUgdGV4dHVyZSBmb3Ig
SW1hZ2UxMTo6Y29weSwgSFJFU1VMVDogMHglWC4iLCByZXN1bHQpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZGV2aWNl
Q29udGV4dC0+UmVzb2x2ZVN1YnJlc291cmNlKHNyY1RleCwgMCwgY29sb3JCdWZmZXJUZXh0dXJl
LCBzdWJyZXNvdXJjZUluZGV4LCB0ZXh0dXJlRGVzYy5Gb3JtYXQpOworICAgICAgICAgICAgICAg
IHN1YnJlc291cmNlSW5kZXggPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNyY1RleCA9IGNvbG9yQnVmZmVyVGV4dHVy
ZTsKKyAgICAgICAgICAgICAgICBzcmNUZXgtPkFkZFJlZigpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBEM0QxMV9CT1ggc3JjQm94OworICAgICAgICAgICAgc3JjQm94LmxlZnQgPSB4
OworICAgICAgICAgICAgc3JjQm94LnJpZ2h0ID0geCArIHdpZHRoOworICAgICAgICAgICAgc3Jj
Qm94LnRvcCA9IHk7CisgICAgICAgICAgICBzcmNCb3guYm90dG9tID0geSArIGhlaWdodDsKKyAg
ICAgICAgICAgIHNyY0JveC5mcm9udCA9IDA7CisgICAgICAgICAgICBzcmNCb3guYmFjayA9IDE7
CisKKyAgICAgICAgICAgIGRldmljZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihtU3Rh
Z2luZ1RleHR1cmUsIDAsIHhvZmZzZXQsIHlvZmZzZXQsIDAsIHNyY1RleCwgc3VicmVzb3VyY2VJ
bmRleCwgJnNyY0JveCk7CisKKyAgICAgICAgICAgIHNyY1RleC0+UmVsZWFzZSgpOworICAgICAg
ICAgICAgY29sb3JCdWZmZXJUZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gVGhpcyBmb3JtYXQgcmVxdWlyZXMgY29udmVyc2lv
biwgc28gd2UgbXVzdCBjb3B5IHRoZSB0ZXh0dXJlIHRvIHN0YWdpbmcgYW5kIG1hbnVhbGx5IGNv
bnZlcnQgdmlhIHJlYWRQaXhlbHMKKyAgICAgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1h
cHBlZEltYWdlOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1hcChEM0QxMV9NQVBfV1JJVEUs
ICZtYXBwZWRJbWFnZSk7CisKKyAgICAgICAgLy8gZGV0ZXJtaW5lIHRoZSBvZmZzZXQgY29vcmRp
bmF0ZSBpbnRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIKKyAgICAgICAgR0xzaXplaSByb3dPZmZz
ZXQgPSBnbDo6Q29tcHV0ZVBpeGVsU2l6ZShtQWN0dWFsRm9ybWF0KSAqIHhvZmZzZXQ7CisgICAg
ICAgIHZvaWQgKmRhdGFPZmZzZXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4obWFwcGVk
SW1hZ2UucERhdGEpICsgbWFwcGVkSW1hZ2UuUm93UGl0Y2ggKiB5b2Zmc2V0ICsgcm93T2Zmc2V0
OworCisgICAgICAgIG1SZW5kZXJlci0+cmVhZFBpeGVscyhzb3VyY2UsIHgsIHksIHdpZHRoLCBo
ZWlnaHQsIGdsOjpFeHRyYWN0Rm9ybWF0KG1JbnRlcm5hbEZvcm1hdCksIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2w6OkV4dHJhY3RUeXBlKG1JbnRlcm5hbEZvcm1hdCksIG1hcHBl
ZEltYWdlLlJvd1BpdGNoLCBmYWxzZSwgNCwgZGF0YU9mZnNldCk7CisKKyAgICAgICAgdW5tYXAo
KTsKKyAgICB9Cit9CisKK0lEM0QxMVRleHR1cmUyRCAqSW1hZ2UxMTo6Z2V0U3RhZ2luZ1RleHR1
cmUoKQoreworICAgIGNyZWF0ZVN0YWdpbmdUZXh0dXJlKCk7CisKKyAgICByZXR1cm4gbVN0YWdp
bmdUZXh0dXJlOworfQorCit1bnNpZ25lZCBpbnQgSW1hZ2UxMTo6Z2V0U3RhZ2luZ1N1YnJlc291
cmNlKCkKK3sKKyAgICBjcmVhdGVTdGFnaW5nVGV4dHVyZSgpOworCisgICAgcmV0dXJuIG1TdGFn
aW5nU3VicmVzb3VyY2U7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgTj4KK3N0
YXRpYyB2b2lkIHNldERlZmF1bHREYXRhKElEM0QxMURldmljZUNvbnRleHQgKmRldmljZUNvbnRl
eHQsIElEM0QxMVRleHR1cmUyRCAqdGV4dHVyZSwgVUlOVCBzdWJyZXNvdXJjZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBjb25zdCBU
ICgmZGVmYXVsdERhdGEpW05dKQoreworICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXA7
CisgICAgZGV2aWNlQ29udGV4dC0+TWFwKHRleHR1cmUsIHN1YnJlc291cmNlLCBEM0QxMV9NQVBf
V1JJVEUsIDAsICZtYXApOworCisgICAgdW5zaWduZWQgY2hhciogcHRyID0gcmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4obWFwLnBEYXRhKTsKKyAgICBzaXplX3QgcGl4ZWxTaXplID0g
c2l6ZW9mKFQpICogTjsKKworICAgIGZvciAoR0xzaXplaSB5ID0gMDsgeSA8IGhlaWdodDsgeSsr
KQorICAgIHsKKyAgICAgICAgZm9yIChHTHNpemVpIHggPSAwOyB4IDwgd2lkdGg7IHgrKykKKyAg
ICAgICAgeworICAgICAgICAgICAgbWVtY3B5KHB0ciArICh5ICogbWFwLlJvd1BpdGNoKSArICh4
ICogcGl4ZWxTaXplKSwgZGVmYXVsdERhdGEsIHBpeGVsU2l6ZSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBkZXZpY2VDb250ZXh0LT5Vbm1hcCh0ZXh0dXJlLCBzdWJyZXNvdXJjZSk7Cit9CisK
K3ZvaWQgSW1hZ2UxMTo6Y3JlYXRlU3RhZ2luZ1RleHR1cmUoKQoreworICAgIGlmIChtU3RhZ2lu
Z1RleHR1cmUpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSUQzRDExVGV4
dHVyZTJEICpuZXdUZXh0dXJlID0gTlVMTDsKKyAgICBpbnQgbG9kT2Zmc2V0ID0gMTsKKyAgICBj
b25zdCBEWEdJX0ZPUk1BVCBkeGdpRm9ybWF0ID0gZ2V0RFhHSUZvcm1hdCgpOworICAgIEFTU0VS
VCghZDNkMTE6OklzRGVwdGhTdGVuY2lsRm9ybWF0KGR4Z2lGb3JtYXQpKTsgLy8gV2Ugc2hvdWxk
IG5ldmVyIGdldCBoZXJlIGZvciBkZXB0aCB0ZXh0dXJlcworCisgICAgaWYgKG1XaWR0aCAhPSAw
ICYmIG1IZWlnaHQgIT0gMCkKKyAgICB7CisgICAgICAgIEdMc2l6ZWkgd2lkdGggPSBtV2lkdGg7
CisgICAgICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUhlaWdodDsKKworICAgICAgICAvLyBhZGp1c3Qg
c2l6ZSBpZiBuZWVkZWQgZm9yIGNvbXByZXNzZWQgdGV4dHVyZXMKKyAgICAgICAgZ2w6Ok1ha2VW
YWxpZFNpemUoZmFsc2UsIGQzZDExOjpJc0NvbXByZXNzZWQoZHhnaUZvcm1hdCksICZ3aWR0aCwg
JmhlaWdodCwgJmxvZE9mZnNldCk7CisgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJl
bmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXNj
OworICAgICAgICBkZXNjLldpZHRoID0gd2lkdGg7CisgICAgICAgIGRlc2MuSGVpZ2h0ID0gaGVp
Z2h0OworICAgICAgICBkZXNjLk1pcExldmVscyA9IGxvZE9mZnNldCArIDE7CisgICAgICAgIGRl
c2MuQXJyYXlTaXplID0gMTsKKyAgICAgICAgZGVzYy5Gb3JtYXQgPSBkeGdpRm9ybWF0OworICAg
ICAgICBkZXNjLlNhbXBsZURlc2MuQ291bnQgPSAxOworICAgICAgICBkZXNjLlNhbXBsZURlc2Mu
UXVhbGl0eSA9IDA7CisgICAgICAgIGRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9TVEFHSU5HOwor
ICAgICAgICBkZXNjLkJpbmRGbGFncyA9IDA7CisgICAgICAgIGRlc2MuQ1BVQWNjZXNzRmxhZ3Mg
PSBEM0QxMV9DUFVfQUNDRVNTX1JFQUQgfCBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOworICAgICAg
ICBkZXNjLk1pc2NGbGFncyA9IDA7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2Ut
PkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJm5ld1RleHR1cmUpOworCisgICAgICAgIGlm
IChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgICAgIEVSUigiQ3JlYXRpbmcgaW1hZ2UgZmFpbGVk
LiIpOworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIG1TdGFnaW5nVGV4dHVyZSA9IG5ld1RleHR1cmU7CisgICAg
bVN0YWdpbmdTdWJyZXNvdXJjZSA9IEQzRDExQ2FsY1N1YnJlc291cmNlKGxvZE9mZnNldCwgMCwg
bG9kT2Zmc2V0ICsgMSk7CisgICAgbURpcnR5ID0gZmFsc2U7CisKKyAgICBpZiAobURYR0lGb3Jt
YXQgPT0gRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk0gJiYgZ2w6OkdldEFscGhhU2l6ZShtSW50
ZXJuYWxGb3JtYXQpID09IDApCisgICAgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGRlZmF1bHRQ
aXhlbFs0XSA9IHsgMCwgMCwgMCwgMjU1IH07CisgICAgICAgIHNldERlZmF1bHREYXRhKG1SZW5k
ZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpLCBtU3RhZ2luZ1RleHR1cmUsIG1TdGFnaW5nU3VicmVz
b3VyY2UsIG1XaWR0aCwgbUhlaWdodCwgZGVmYXVsdFBpeGVsKTsKKyAgICB9CisgICAgZWxzZSBp
ZiAobURYR0lGb3JtYXQgPT0gRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUICYmIGdsOjpH
ZXRBbHBoYVNpemUobUludGVybmFsRm9ybWF0KSA9PSAwKQorICAgIHsKKyAgICAgICAgZmxvYXQg
ZGVmYXVsdFBpeGVsWzRdID0geyAwLjBmLCAwLjBmLCAwLjBmLCAxLjBmIH07CisgICAgICAgIHNl
dERlZmF1bHREYXRhKG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpLCBtU3RhZ2luZ1RleHR1
cmUsIG1TdGFnaW5nU3VicmVzb3VyY2UsIG1XaWR0aCwgbUhlaWdodCwgZGVmYXVsdFBpeGVsKTsK
KyAgICB9Cit9CisKK0hSRVNVTFQgSW1hZ2UxMTo6bWFwKEQzRDExX01BUCBtYXBUeXBlLCBEM0Qx
MV9NQVBQRURfU1VCUkVTT1VSQ0UgKm1hcCkKK3sKKyAgICBjcmVhdGVTdGFnaW5nVGV4dHVyZSgp
OworCisgICAgSFJFU1VMVCByZXN1bHQgPSBFX0ZBSUw7CisKKyAgICBpZiAobVN0YWdpbmdUZXh0
dXJlKQorICAgIHsKKyAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqZGV2aWNlQ29udGV4dCA9
IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworICAgICAgICByZXN1bHQgPSBkZXZpY2VD
b250ZXh0LT5NYXAobVN0YWdpbmdUZXh0dXJlLCBtU3RhZ2luZ1N1YnJlc291cmNlLCBtYXBUeXBl
LCAwLCBtYXApOworCisgICAgICAgIC8vIHRoaXMgY2FuIGZhaWwgaWYgdGhlIGRldmljZSBpcyBy
ZW1vdmVkIChmcm9tIFREUikKKyAgICAgICAgaWYgKGQzZDExOjppc0RldmljZUxvc3RFcnJvcihy
ZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBtUmVuZGVyZXItPm5vdGlmeURldmljZUxv
c3QoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAg
ICAgICAgeworICAgICAgICAgICAgbURpcnR5ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSW1hZ2UxMTo6dW5tYXAoKQoreworICAgIGlm
IChtU3RhZ2luZ1RleHR1cmUpCisgICAgeworICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpk
ZXZpY2VDb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisgICAgICAgIGRl
dmljZUNvbnRleHQtPlVubWFwKG1TdGFnaW5nVGV4dHVyZSwgbVN0YWdpbmdTdWJyZXNvdXJjZSk7
CisgICAgfQorfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ltYWdlMTEuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW1hZ2UxMS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEx
YTY0OTJkYzg2M2E5MTY0MTliNWJjZDE2NGNhN2Q3YmI1ZDk1ZGIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0lt
YWdlMTEuaApAQCAtMCwwICsxLDc2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gSW1hZ2UxMS5oOiBE
ZWZpbmVzIHRoZSByeDo6SW1hZ2UxMSBjbGFzcywgd2hpY2ggYWN0cyBhcyB0aGUgaW50ZXJmYWNl
IHRvCisvLyB0aGUgYWN0dWFsIHVuZGVybHlpbmcgcmVzb3VyY2VzIG9mIGEgVGV4dHVyZQorCisj
aWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9JTUFHRTExX0hfCisjZGVmaW5lIExJQkdMRVNWMl9S
RU5ERVJFUl9JTUFHRTExX0hfCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvSW1hZ2Uu
aCIKKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCituYW1lc3BhY2UgZ2wKK3sKK2NsYXNz
IEZyYW1lYnVmZmVyOworfQorCituYW1lc3BhY2UgcngKK3sKK2NsYXNzIFJlbmRlcmVyOworY2xh
c3MgUmVuZGVyZXIxMTsKK2NsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ7CitjbGFzcyBU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU7CisKK2NsYXNzIEltYWdlMTEgOiBwdWJsaWMgSW1h
Z2UKK3sKKyAgcHVibGljOgorICAgIEltYWdlMTEoKTsKKyAgICB2aXJ0dWFsIH5JbWFnZTExKCk7
CisKKyAgICBzdGF0aWMgSW1hZ2UxMSAqbWFrZUltYWdlMTEoSW1hZ2UgKmltZyk7CisKKyAgICBz
dGF0aWMgdm9pZCBnZW5lcmF0ZU1pcG1hcChJbWFnZTExICpkZXN0LCBJbWFnZTExICpzcmMpOwor
CisgICAgdmlydHVhbCBib29sIGlzRGlydHkoKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCB1
cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIGludCBsZXZl
bCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpOworICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgaW50IGZhY2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCisgICAgdmly
dHVhbCBib29sIHJlZGVmaW5lKFJlbmRlcmVyICpyZW5kZXJlciwgR0xpbnQgaW50ZXJuYWxmb3Jt
YXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBib29sIGZvcmNlUmVsZWFzZSk7CisK
KyAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJhYmxlRm9ybWF0KCkgY29uc3Q7CisgICAgRFhHSV9G
T1JNQVQgZ2V0RFhHSUZvcm1hdCgpIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgdm9pZCBsb2Fk
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qg
dm9pZCAqaW5wdXQpOworICAgIHZpcnR1YWwgdm9pZCBsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dCk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgY29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgZ2w6OkZyYW1lYnVm
ZmVyICpzb3VyY2UpOworCisgIHByb3RlY3RlZDoKKyAgICBIUkVTVUxUIG1hcChEM0QxMV9NQVAg
bWFwVHlwZSwgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFICptYXApOworICAgIHZvaWQgdW5tYXAo
KTsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihJbWFnZTExKTsK
KworICAgIElEM0QxMVRleHR1cmUyRCAqZ2V0U3RhZ2luZ1RleHR1cmUoKTsKKyAgICB1bnNpZ25l
ZCBpbnQgZ2V0U3RhZ2luZ1N1YnJlc291cmNlKCk7CisgICAgdm9pZCBjcmVhdGVTdGFnaW5nVGV4
dHVyZSgpOworCisgICAgUmVuZGVyZXIxMSAqbVJlbmRlcmVyOworCisgICAgRFhHSV9GT1JNQVQg
bURYR0lGb3JtYXQ7CisgICAgSUQzRDExVGV4dHVyZTJEICptU3RhZ2luZ1RleHR1cmU7CisgICAg
dW5zaWduZWQgaW50IG1TdGFnaW5nU3VicmVzb3VyY2U7Cit9OworCit9CisKKyNlbmRpZiAvLyBM
SUJHTEVTVjJfUkVOREVSRVJfSU1BR0UxMV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbmRleEJ1ZmZlcjExLmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5k
ZXhCdWZmZXIxMS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDRmOTk3NmQ0M2QxZGI0Y2E0MDAyZDQ3NWI5ZjYx
NTQ0YmZjMzIwNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5kZXhCdWZmZXIxMS5jcHAKQEAgLTAsMCArMSwx
ODMgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAx
MiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIEluZGV4
QnVmZmVyMTEuY3BwOiBEZWZpbmVzIHRoZSBEM0QxMSBJbmRleEJ1ZmZlciBpbXBsZW1lbnRhdGlv
bi4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbmRleEJ1ZmZlcjExLmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKKworbmFt
ZXNwYWNlIHJ4Cit7CisKK0luZGV4QnVmZmVyMTE6OkluZGV4QnVmZmVyMTEoUmVuZGVyZXIxMSAq
Y29uc3QgcmVuZGVyZXIpIDogbVJlbmRlcmVyKHJlbmRlcmVyKQoreworICAgIG1CdWZmZXIgPSBO
VUxMOworICAgIG1CdWZmZXJTaXplID0gMDsKKyAgICBtRHluYW1pY1VzYWdlID0gZmFsc2U7Cit9
CisKK0luZGV4QnVmZmVyMTE6On5JbmRleEJ1ZmZlcjExKCkKK3sKKyAgICBpZiAobUJ1ZmZlcikK
KyAgICB7CisgICAgICAgIG1CdWZmZXItPlJlbGVhc2UoKTsKKyAgICAgICAgbUJ1ZmZlciA9IE5V
TEw7CisgICAgfQorfQorCitib29sIEluZGV4QnVmZmVyMTE6OmluaXRpYWxpemUodW5zaWduZWQg
aW50IGJ1ZmZlclNpemUsIEdMZW51bSBpbmRleFR5cGUsIGJvb2wgZHluYW1pYykKK3sKKyAgICBp
ZiAobUJ1ZmZlcikKKyAgICB7CisgICAgICAgIG1CdWZmZXItPlJlbGVhc2UoKTsKKyAgICAgICAg
bUJ1ZmZlciA9IE5VTEw7CisgICAgfQorCisgICAgdXBkYXRlU2VyaWFsKCk7CisKKyAgICBpZiAo
YnVmZmVyU2l6ZSA+IDApCisgICAgeworICAgICAgICBJRDNEMTFEZXZpY2UqIGR4RGV2aWNlID0g
bVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyBidWZm
ZXJEZXNjOworICAgICAgICBidWZmZXJEZXNjLkJ5dGVXaWR0aCA9IGJ1ZmZlclNpemU7CisgICAg
ICAgIGJ1ZmZlckRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9EWU5BTUlDOworICAgICAgICBidWZm
ZXJEZXNjLkJpbmRGbGFncyA9IEQzRDExX0JJTkRfSU5ERVhfQlVGRkVSOworICAgICAgICBidWZm
ZXJEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsKKyAgICAgICAg
YnVmZmVyRGVzYy5NaXNjRmxhZ3MgPSAwOworICAgICAgICBidWZmZXJEZXNjLlN0cnVjdHVyZUJ5
dGVTdHJpZGUgPSAwOworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZHhEZXZpY2UtPkNyZWF0
ZUJ1ZmZlcigmYnVmZmVyRGVzYywgTlVMTCwgJm1CdWZmZXIpOworICAgICAgICBpZiAoRkFJTEVE
KHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIG1CdWZmZXJTaXplID0gYnVmZmVyU2l6ZTsKKyAgICBtSW5kZXhUeXBl
ID0gaW5kZXhUeXBlOworICAgIG1EeW5hbWljVXNhZ2UgPSBkeW5hbWljOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK0luZGV4QnVmZmVyMTEgKkluZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1ZmZl
cjExKEluZGV4QnVmZmVyICppbmRleEJ1ZmZlcikKK3sKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNf
VFlQRShJbmRleEJ1ZmZlcjExKiwgaW5kZXhCdWZmZXIpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8SW5kZXhCdWZmZXIxMSo+KGluZGV4QnVmZmVyKTsKK30KKworYm9vbCBJbmRleEJ1ZmZlcjEx
OjptYXBCdWZmZXIodW5zaWduZWQgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IHNpemUsIHZvaWQq
KiBvdXRNYXBwZWRNZW1vcnkpCit7CisgICAgaWYgKG1CdWZmZXIpCisgICAgeworICAgICAgICAv
LyBDaGVjayBmb3IgaW50ZWdlciBvdmVyZmxvd3MgYW5kIG91dC1vdXQtYm91bmRzIG1hcCByZXF1
ZXN0cworICAgICAgICBpZiAob2Zmc2V0ICsgc2l6ZSA8IG9mZnNldCB8fCBvZmZzZXQgKyBzaXpl
ID4gbUJ1ZmZlclNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiSW5kZXggYnVmZmVy
IG1hcCByYW5nZSBpcyBub3QgaW5zaWRlIHRoZSBidWZmZXIuIik7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpkeENv
bnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKKworICAgICAgICBEM0QxMV9N
QVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gZHhDb250ZXh0LT5NYXAobUJ1ZmZlciwgMCwgRDNEMTFfTUFQX1dSSVRFX05PX09WRVJXUklU
RSwgMCwgJm1hcHBlZFJlc291cmNlKTsKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAg
ICAgICB7CisgICAgICAgICAgICBFUlIoIkluZGV4IGJ1ZmZlciBtYXAgZmFpbGVkIHdpdGggZXJy
b3IgMHglMDh4IiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorCisgICAgICAgICpvdXRNYXBwZWRNZW1vcnkgPSByZWludGVycHJldF9jYXN0PGNoYXIqPiht
YXBwZWRSZXNvdXJjZS5wRGF0YSkgKyBvZmZzZXQ7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBFUlIoIkluZGV4IGJ1ZmZlciBub3QgaW5pdGlh
bGl6ZWQuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSW5kZXhC
dWZmZXIxMTo6dW5tYXBCdWZmZXIoKQoreworICAgIGlmIChtQnVmZmVyKQorICAgIHsKKyAgICAg
ICAgSUQzRDExRGV2aWNlQ29udGV4dCAqZHhDb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VD
b250ZXh0KCk7CisgICAgICAgIGR4Q29udGV4dC0+VW5tYXAobUJ1ZmZlciwgMCk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBFUlIoIkluZGV4
IGJ1ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKK0dMZW51bSBJbmRleEJ1ZmZlcjExOjpnZXRJbmRleFR5cGUoKSBjb25zdAoreworICAg
IHJldHVybiBtSW5kZXhUeXBlOworfQorCit1bnNpZ25lZCBpbnQgSW5kZXhCdWZmZXIxMTo6Z2V0
QnVmZmVyU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1CdWZmZXJTaXplOworfQorCitib29s
IEluZGV4QnVmZmVyMTE6OnNldFNpemUodW5zaWduZWQgaW50IGJ1ZmZlclNpemUsIEdMZW51bSBp
bmRleFR5cGUpCit7CisgICAgaWYgKGJ1ZmZlclNpemUgPiBtQnVmZmVyU2l6ZSB8fCBpbmRleFR5
cGUgIT0gbUluZGV4VHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbml0aWFsaXplKGJ1ZmZl
clNpemUsIGluZGV4VHlwZSwgbUR5bmFtaWNVc2FnZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKworYm9vbCBJbmRleEJ1ZmZlcjExOjpk
aXNjYXJkKCkKK3sKKyAgICBpZiAobUJ1ZmZlcikKKyAgICB7CisgICAgICAgIElEM0QxMURldmlj
ZUNvbnRleHQgKmR4Q29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworCisg
ICAgICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJjZTsKKyAgICAgICAg
SFJFU1VMVCByZXN1bHQgPSBkeENvbnRleHQtPk1hcChtQnVmZmVyLCAwLCBEM0QxMV9NQVBfV1JJ
VEVfRElTQ0FSRCwgMCwgJm1hcHBlZFJlc291cmNlKTsKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1
bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkluZGV4IGJ1ZmZlciBtYXAgZmFpbGVk
IHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorCisgICAgICAgIGR4Q29udGV4dC0+VW5tYXAobUJ1ZmZlciwgMCk7CisKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEVSUigi
SW5kZXggYnVmZmVyIG5vdCBpbml0aWFsaXplZC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KK30KKworRFhHSV9GT1JNQVQgSW5kZXhCdWZmZXIxMTo6Z2V0SW5kZXhGb3JtYXQoKSBj
b25zdAoreworICAgIHN3aXRjaCAobUluZGV4VHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0JZVEU6ICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMTZfVUlOVDsKKyAgICAgIGNhc2Ug
R0xfVU5TSUdORURfU0hPUlQ6ICAgcmV0dXJuIERYR0lfRk9STUFUX1IxNl9VSU5UOworICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9JTlQ6ICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjMyX1VJTlQ7Cisg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgIHJldHVybiBEWEdJX0ZPUk1BVF9VTktOT1dO
OworICAgIH0KK30KKworSUQzRDExQnVmZmVyICpJbmRleEJ1ZmZlcjExOjpnZXRCdWZmZXIoKSBj
b25zdAoreworICAgIHJldHVybiBtQnVmZmVyOworfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9JbmRleEJ1ZmZlcjExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0luZGV4QnVmZmVyMTEuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zOWE2MTk0NmFkNmVmODkyYzRjYTY2YjYwN2U2NTlhMzVjYzA5ZGU2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9JbmRleEJ1ZmZlcjExLmgKQEAgLTAsMCArMSw1MyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIElu
ZGV4QnVmZmVyMTEuaDogRGVmaW5lcyB0aGUgRDNEMTEgSW5kZXhCdWZmZXIgaW1wbGVtZW50YXRp
b24uCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0lOREVYQlVGRkVSMTFfSF8KKyNkZWZp
bmUgTElCR0xFU1YyX1JFTkRFUkVSX0lOREVYQlVGRkVSMTFfSF8KKworI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZlci5oIgorCituYW1lc3BhY2UgcngKK3sKK2NsYXNzIFJl
bmRlcmVyMTE7CisKK2NsYXNzIEluZGV4QnVmZmVyMTEgOiBwdWJsaWMgSW5kZXhCdWZmZXIKK3sK
KyAgcHVibGljOgorICAgIGV4cGxpY2l0IEluZGV4QnVmZmVyMTEoUmVuZGVyZXIxMSAqY29uc3Qg
cmVuZGVyZXIpOworICAgIHZpcnR1YWwgfkluZGV4QnVmZmVyMTEoKTsKKworICAgIHZpcnR1YWwg
Ym9vbCBpbml0aWFsaXplKHVuc2lnbmVkIGludCBidWZmZXJTaXplLCBHTGVudW0gaW5kZXhUeXBl
LCBib29sIGR5bmFtaWMpOworCisgICAgc3RhdGljIEluZGV4QnVmZmVyMTEgKm1ha2VJbmRleEJ1
ZmZlcjExKEluZGV4QnVmZmVyICppbmRleEJ1ZmZlcik7CisKKyAgICB2aXJ0dWFsIGJvb2wgbWFw
QnVmZmVyKHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBzaXplLCB2b2lkKiogb3V0
TWFwcGVkTWVtb3J5KTsKKyAgICB2aXJ0dWFsIGJvb2wgdW5tYXBCdWZmZXIoKTsKKworICAgIHZp
cnR1YWwgR0xlbnVtIGdldEluZGV4VHlwZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQg
aW50IGdldEJ1ZmZlclNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0U2l6ZSh1bnNp
Z25lZCBpbnQgYnVmZmVyU2l6ZSwgR0xlbnVtIGluZGV4VHlwZSk7CisKKyAgICB2aXJ0dWFsIGJv
b2wgZGlzY2FyZCgpOworCisgICAgRFhHSV9GT1JNQVQgZ2V0SW5kZXhGb3JtYXQoKSBjb25zdDsK
KyAgICBJRDNEMTFCdWZmZXIgKmdldEJ1ZmZlcigpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAg
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEluZGV4QnVmZmVyMTEpOworCisgICAgcng6OlJlbmRl
cmVyMTEgKmNvbnN0IG1SZW5kZXJlcjsKKworICAgIElEM0QxMUJ1ZmZlciAqbUJ1ZmZlcjsKKyAg
ICB1bnNpZ25lZCBpbnQgbUJ1ZmZlclNpemU7CisgICAgR0xlbnVtIG1JbmRleFR5cGU7CisgICAg
Ym9vbCBtRHluYW1pY1VzYWdlOworfTsKKworfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRF
UkVSX0lOREVYQlVGRkVSMTFfSF8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L0lucHV0TGF5b3V0Q2FjaGUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9JbnB1dExheW91dENhY2hlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNDE4
ZTg5NDJjODg1ZGI3Y2YyMmYxNjY3MWU4YmFlYjMwYTBlMjU5Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbnB1
dExheW91dENhY2hlLmNwcApAQCAtMCwwICsxLDIxMyBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVk
LmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworLy8gSW5wdXRMYXlvdXRDYWNoZS5jcHA6IERlZmluZXMgSW5w
dXRMYXlvdXRDYWNoZSwgYSBjbGFzcyB0aGF0IGJ1aWxkcyBhbmQgY2FjaGVzCisvLyBEM0QxMSBp
bnB1dCBsYXlvdXRzLgorCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0
TGF5b3V0Q2FjaGUuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVydGV4
QnVmZmVyMTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvQnVmZmVyU3Rv
cmFnZTExLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1
dGFibGUxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVmVy
dGV4RGF0YU1hbmFnZXIuaCIKKworI2luY2x1ZGUgInRoaXJkX3BhcnR5L211cm11cmhhc2gvTXVy
bXVySGFzaDMuaCIKKworbmFtZXNwYWNlIHJ4Cit7CisKK2NvbnN0IHVuc2lnbmVkIGludCBJbnB1
dExheW91dENhY2hlOjprTWF4SW5wdXRMYXlvdXRzID0gMTAyNDsKKworSW5wdXRMYXlvdXRDYWNo
ZTo6SW5wdXRMYXlvdXRDYWNoZSgpIDogbUlucHV0TGF5b3V0TWFwKGtNYXhJbnB1dExheW91dHMs
IGhhc2hJbnB1dExheW91dCwgY29tcGFyZUlucHV0TGF5b3V0cykKK3sKKyAgICBtQ291bnRlciA9
IDA7CisgICAgbURldmljZSA9IE5VTEw7CisgICAgbURldmljZUNvbnRleHQgPSBOVUxMOworICAg
IG1DdXJyZW50SUwgPSBOVUxMOworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6
Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgIHsKKyAgICAgICAgbUN1cnJlbnRCdWZmZXJz
W2ldID0gLTE7CisgICAgICAgIG1DdXJyZW50VmVydGV4U3RyaWRlc1tpXSA9IC0xOworICAgICAg
ICBtQ3VycmVudFZlcnRleE9mZnNldHNbaV0gPSAtMTsKKyAgICB9Cit9CisKK0lucHV0TGF5b3V0
Q2FjaGU6On5JbnB1dExheW91dENhY2hlKCkKK3sKKyAgICBjbGVhcigpOworfQorCit2b2lkIElu
cHV0TGF5b3V0Q2FjaGU6OmluaXRpYWxpemUoSUQzRDExRGV2aWNlICpkZXZpY2UsIElEM0QxMURl
dmljZUNvbnRleHQgKmNvbnRleHQpCit7CisgICAgY2xlYXIoKTsKKyAgICBtRGV2aWNlID0gZGV2
aWNlOworICAgIG1EZXZpY2VDb250ZXh0ID0gY29udGV4dDsKK30KKwordm9pZCBJbnB1dExheW91
dENhY2hlOjpjbGVhcigpCit7CisgICAgZm9yIChJbnB1dExheW91dE1hcDo6aXRlcmF0b3IgaSA9
IG1JbnB1dExheW91dE1hcC5iZWdpbigpOyBpICE9IG1JbnB1dExheW91dE1hcC5lbmQoKTsgaSsr
KQorICAgIHsKKyAgICAgICAgaS0+c2Vjb25kLmlucHV0TGF5b3V0LT5SZWxlYXNlKCk7CisgICAg
fQorICAgIG1JbnB1dExheW91dE1hcC5jbGVhcigpOworICAgIG1hcmtEaXJ0eSgpOworfQorCit2
b2lkIElucHV0TGF5b3V0Q2FjaGU6Om1hcmtEaXJ0eSgpCit7CisgICAgbUN1cnJlbnRJTCA9IE5V
TEw7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRS
SUJTOyBpKyspCisgICAgeworICAgICAgICBtQ3VycmVudEJ1ZmZlcnNbaV0gPSAtMTsKKyAgICAg
ICAgbUN1cnJlbnRWZXJ0ZXhTdHJpZGVzW2ldID0gLTE7CisgICAgICAgIG1DdXJyZW50VmVydGV4
T2Zmc2V0c1tpXSA9IC0xOworICAgIH0KK30KKworR0xlbnVtIElucHV0TGF5b3V0Q2FjaGU6OmFw
cGx5VmVydGV4QnVmZmVycyhUcmFuc2xhdGVkQXR0cmlidXRlIGF0dHJpYnV0ZXNbZ2w6Ok1BWF9W
RVJURVhfQVRUUklCU10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KQoreworICAgIGludCBzb3J0ZWRT
ZW1hbnRpY0luZGljZXNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107CisgICAgcHJvZ3JhbUJpbmFy
eS0+c29ydEF0dHJpYnV0ZXNCeUxheW91dChhdHRyaWJ1dGVzLCBzb3J0ZWRTZW1hbnRpY0luZGlj
ZXMpOworCisgICAgaWYgKCFtRGV2aWNlIHx8ICFtRGV2aWNlQ29udGV4dCkKKyAgICB7CisgICAg
ICAgIEVSUigiSW5wdXRMYXlvdXRDYWNoZSBpcyBub3QgaW5pdGlhbGl6ZWQuIik7CisgICAgICAg
IHJldHVybiBHTF9JTlZBTElEX09QRVJBVElPTjsKKyAgICB9CisKKyAgICBJbnB1dExheW91dEtl
eSBpbEtleSA9IHsgMCB9OworCisgICAgSUQzRDExQnVmZmVyICp2ZXJ0ZXhCdWZmZXJzW2dsOjpN
QVhfVkVSVEVYX0FUVFJJQlNdID0geyBOVUxMIH07CisgICAgdW5zaWduZWQgaW50IHZlcnRleEJ1
ZmZlclNlcmlhbHNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10gPSB7IDAgfTsKKyAgICBVSU5UIHZl
cnRleFN0cmlkZXNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10gPSB7IDAgfTsKKyAgICBVSU5UIHZl
cnRleE9mZnNldHNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10gPSB7IDAgfTsKKworICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBzZW1hbnRpY05hbWUgPSAiVEVYQ09PUkQiOworCisgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgewor
ICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5hY3RpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IFZlcnRleEJ1ZmZlcjExICp2ZXJ0ZXhCdWZmZXIgPSBWZXJ0ZXhCdWZmZXIxMTo6bWFrZVZlcnRl
eEJ1ZmZlcjExKGF0dHJpYnV0ZXNbaV0udmVydGV4QnVmZmVyKTsKKyAgICAgICAgICAgIEJ1ZmZl
clN0b3JhZ2UxMSAqYnVmZmVyU3RvcmFnZSA9IGF0dHJpYnV0ZXNbaV0uc3RvcmFnZSA/IEJ1ZmZl
clN0b3JhZ2UxMTo6bWFrZUJ1ZmZlclN0b3JhZ2UxMShhdHRyaWJ1dGVzW2ldLnN0b3JhZ2UpIDog
TlVMTDsKKworICAgICAgICAgICAgRDNEMTFfSU5QVVRfQ0xBU1NJRklDQVRJT04gaW5wdXRDbGFz
cyA9IGF0dHJpYnV0ZXNbaV0uZGl2aXNvciA+IDAgPyBEM0QxMV9JTlBVVF9QRVJfSU5TVEFOQ0Vf
REFUQSA6IEQzRDExX0lOUFVUX1BFUl9WRVJURVhfREFUQTsKKworICAgICAgICAgICAgLy8gUmVj
b3JkIHRoZSB0eXBlIG9mIHRoZSBhc3NvY2lhdGVkIHZlcnRleCBzaGFkZXIgdmVjdG9yIGluIG91
ciBrZXkKKyAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBwcmV2ZW50IG1pc21hdGNoZWQgdmVydGV4
IHNoYWRlcnMgZnJvbSB1c2luZyB0aGUgc2FtZSBpbnB1dCBsYXlvdXQKKyAgICAgICAgICAgIEdM
aW50IGF0dHJpYnV0ZVNpemU7CisgICAgICAgICAgICBwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVB
dHRyaWJ1dGUoaWxLZXkuZWxlbWVudENvdW50LCAwLCBOVUxMLCAmYXR0cmlidXRlU2l6ZSwgJmls
S2V5LmVsZW1lbnRzW2lsS2V5LmVsZW1lbnRDb3VudF0uZ2xzbEVsZW1lbnRUeXBlLCBOVUxMKTsK
KworICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5kZXNjLlNl
bWFudGljTmFtZSA9IHNlbWFudGljTmFtZTsKKyAgICAgICAgICAgIGlsS2V5LmVsZW1lbnRzW2ls
S2V5LmVsZW1lbnRDb3VudF0uZGVzYy5TZW1hbnRpY0luZGV4ID0gc29ydGVkU2VtYW50aWNJbmRp
Y2VzW2ldOworICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5k
ZXNjLkZvcm1hdCA9IGF0dHJpYnV0ZXNbaV0uYXR0cmlidXRlLT5tQXJyYXlFbmFibGVkID8gdmVy
dGV4QnVmZmVyLT5nZXREWEdJRm9ybWF0KCphdHRyaWJ1dGVzW2ldLmF0dHJpYnV0ZSkgOiBEWEdJ
X0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQ7CisgICAgICAgICAgICBpbEtleS5lbGVtZW50c1tp
bEtleS5lbGVtZW50Q291bnRdLmRlc2MuSW5wdXRTbG90ID0gaTsKKyAgICAgICAgICAgIGlsS2V5
LmVsZW1lbnRzW2lsS2V5LmVsZW1lbnRDb3VudF0uZGVzYy5BbGlnbmVkQnl0ZU9mZnNldCA9IDA7
CisgICAgICAgICAgICBpbEtleS5lbGVtZW50c1tpbEtleS5lbGVtZW50Q291bnRdLmRlc2MuSW5w
dXRTbG90Q2xhc3MgPSBpbnB1dENsYXNzOworICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxL
ZXkuZWxlbWVudENvdW50XS5kZXNjLkluc3RhbmNlRGF0YVN0ZXBSYXRlID0gYXR0cmlidXRlc1tp
XS5kaXZpc29yOworICAgICAgICAgICAgaWxLZXkuZWxlbWVudENvdW50Kys7CisKKyAgICAgICAg
ICAgIHZlcnRleEJ1ZmZlcnNbaV0gPSBidWZmZXJTdG9yYWdlID8gYnVmZmVyU3RvcmFnZS0+Z2V0
QnVmZmVyKEJVRkZFUl9VU0FHRV9WRVJURVgpIDogdmVydGV4QnVmZmVyLT5nZXRCdWZmZXIoKTsK
KyAgICAgICAgICAgIHZlcnRleEJ1ZmZlclNlcmlhbHNbaV0gPSBidWZmZXJTdG9yYWdlID8gYnVm
ZmVyU3RvcmFnZS0+Z2V0U2VyaWFsKCkgOiB2ZXJ0ZXhCdWZmZXItPmdldFNlcmlhbCgpOworICAg
ICAgICAgICAgdmVydGV4U3RyaWRlc1tpXSA9IGF0dHJpYnV0ZXNbaV0uc3RyaWRlOworICAgICAg
ICAgICAgdmVydGV4T2Zmc2V0c1tpXSA9IGF0dHJpYnV0ZXNbaV0ub2Zmc2V0OworICAgICAgICB9
CisgICAgfQorCisgICAgSUQzRDExSW5wdXRMYXlvdXQgKmlucHV0TGF5b3V0ID0gTlVMTDsKKwor
ICAgIElucHV0TGF5b3V0TWFwOjppdGVyYXRvciBpID0gbUlucHV0TGF5b3V0TWFwLmZpbmQoaWxL
ZXkpOworICAgIGlmIChpICE9IG1JbnB1dExheW91dE1hcC5lbmQoKSkKKyAgICB7CisgICAgICAg
IGlucHV0TGF5b3V0ID0gaS0+c2Vjb25kLmlucHV0TGF5b3V0OworICAgICAgICBpLT5zZWNvbmQu
bGFzdFVzZWRUaW1lID0gbUNvdW50ZXIrKzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgU2hhZGVyRXhlY3V0YWJsZTExICpzaGFkZXIgPSBTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VT
aGFkZXJFeGVjdXRhYmxlMTEocHJvZ3JhbUJpbmFyeS0+Z2V0VmVydGV4RXhlY3V0YWJsZSgpKTsK
KworICAgICAgICBEM0QxMV9JTlBVVF9FTEVNRU5UX0RFU0MgZGVzY3NbZ2w6Ok1BWF9WRVJURVhf
QVRUUklCU107CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgaWxLZXkuZWxl
bWVudENvdW50OyArK2opCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlc2NzW2pdID0gaWxLZXku
ZWxlbWVudHNbal0uZGVzYzsKKyAgICAgICAgfQorCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
bURldmljZS0+Q3JlYXRlSW5wdXRMYXlvdXQoZGVzY3MsIGlsS2V5LmVsZW1lbnRDb3VudCwgc2hh
ZGVyLT5nZXRGdW5jdGlvbigpLCBzaGFkZXItPmdldExlbmd0aCgpLCAmaW5wdXRMYXlvdXQpOwor
ICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigi
RmFpbGVkIHRvIGNyYXRlIGlucHV0IGxheW91dCwgcmVzdWx0OiAweCUwOHgiLCByZXN1bHQpOwor
ICAgICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKG1JbnB1dExheW91dE1hcC5zaXplKCkgPj0ga01heElucHV0TGF5b3V0cykKKyAg
ICAgICAgeworICAgICAgICAgICAgVFJBQ0UoIk92ZXJmbG93ZWQgdGhlIGxpbWl0IG9mICV1IGlu
cHV0IGxheW91dHMsIHJlbW92aW5nIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkICIKKyAgICAgICAg
ICAgICAgICAgICJ0byBtYWtlIHJvb20uIiwga01heElucHV0TGF5b3V0cyk7CisKKyAgICAgICAg
ICAgIElucHV0TGF5b3V0TWFwOjppdGVyYXRvciBsZWFzdFJlY2VudGx5VXNlZCA9IG1JbnB1dExh
eW91dE1hcC5iZWdpbigpOworICAgICAgICAgICAgZm9yIChJbnB1dExheW91dE1hcDo6aXRlcmF0
b3IgaSA9IG1JbnB1dExheW91dE1hcC5iZWdpbigpOyBpICE9IG1JbnB1dExheW91dE1hcC5lbmQo
KTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChpLT5zZWNvbmQubGFz
dFVzZWRUaW1lIDwgbGVhc3RSZWNlbnRseVVzZWQtPnNlY29uZC5sYXN0VXNlZFRpbWUpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZCA9IGk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbGVhc3RSZWNl
bnRseVVzZWQtPnNlY29uZC5pbnB1dExheW91dC0+UmVsZWFzZSgpOworICAgICAgICAgICAgbUlu
cHV0TGF5b3V0TWFwLmVyYXNlKGxlYXN0UmVjZW50bHlVc2VkKTsKKyAgICAgICAgfQorCisgICAg
ICAgIElucHV0TGF5b3V0Q291bnRlclBhaXIgaW5wdXRDb3VudGVyUGFpcjsKKyAgICAgICAgaW5w
dXRDb3VudGVyUGFpci5pbnB1dExheW91dCA9IGlucHV0TGF5b3V0OworICAgICAgICBpbnB1dENv
dW50ZXJQYWlyLmxhc3RVc2VkVGltZSA9IG1Db3VudGVyKys7CisKKyAgICAgICAgbUlucHV0TGF5
b3V0TWFwLmluc2VydChzdGQ6Om1ha2VfcGFpcihpbEtleSwgaW5wdXRDb3VudGVyUGFpcikpOwor
ICAgIH0KKworICAgIGlmIChpbnB1dExheW91dCAhPSBtQ3VycmVudElMKQorICAgIHsKKyAgICAg
ICAgbURldmljZUNvbnRleHQtPklBU2V0SW5wdXRMYXlvdXQoaW5wdXRMYXlvdXQpOworICAgICAg
ICBtQ3VycmVudElMID0gaW5wdXRMYXlvdXQ7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgeworICAgICAg
ICBpZiAodmVydGV4QnVmZmVyU2VyaWFsc1tpXSAhPSBtQ3VycmVudEJ1ZmZlcnNbaV0gfHwgdmVy
dGV4U3RyaWRlc1tpXSAhPSBtQ3VycmVudFZlcnRleFN0cmlkZXNbaV0gfHwKKyAgICAgICAgICAg
IHZlcnRleE9mZnNldHNbaV0gIT0gbUN1cnJlbnRWZXJ0ZXhPZmZzZXRzW2ldKQorICAgICAgICB7
CisgICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRWZXJ0ZXhCdWZmZXJzKGksIDEsICZ2
ZXJ0ZXhCdWZmZXJzW2ldLCAmdmVydGV4U3RyaWRlc1tpXSwgJnZlcnRleE9mZnNldHNbaV0pOwor
ICAgICAgICAgICAgbUN1cnJlbnRCdWZmZXJzW2ldID0gdmVydGV4QnVmZmVyU2VyaWFsc1tpXTsK
KyAgICAgICAgICAgIG1DdXJyZW50VmVydGV4U3RyaWRlc1tpXSA9IHZlcnRleFN0cmlkZXNbaV07
CisgICAgICAgICAgICBtQ3VycmVudFZlcnRleE9mZnNldHNbaV0gPSB2ZXJ0ZXhPZmZzZXRzW2ld
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIEdMX05PX0VSUk9SOworfQorCitzdGQ6
OnNpemVfdCBJbnB1dExheW91dENhY2hlOjpoYXNoSW5wdXRMYXlvdXQoY29uc3QgSW5wdXRMYXlv
dXRLZXkgJmlucHV0TGF5b3V0KQoreworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2Vl
ZCA9IDB4REVBREJFRUY7CisKKyAgICBzdGQ6OnNpemVfdCBoYXNoID0gMDsKKyAgICBNdXJtdXJI
YXNoM194ODZfMzIoaW5wdXRMYXlvdXQuYmVnaW4oKSwgaW5wdXRMYXlvdXQuZW5kKCkgLSBpbnB1
dExheW91dC5iZWdpbigpLCBzZWVkLCAmaGFzaCk7CisgICAgcmV0dXJuIGhhc2g7Cit9CisKK2Jv
b2wgSW5wdXRMYXlvdXRDYWNoZTo6Y29tcGFyZUlucHV0TGF5b3V0cyhjb25zdCBJbnB1dExheW91
dEtleSAmYSwgY29uc3QgSW5wdXRMYXlvdXRLZXkgJmIpCit7CisgICAgaWYgKGEuZWxlbWVudENv
dW50ICE9IGIuZWxlbWVudENvdW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHJldHVybiBzdGQ6OmVxdWFsKGEuYmVnaW4oKSwgYS5lbmQoKSwgYi5iZWdpbigp
KTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9JbnB1dExheW91dENhY2hlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iYjFhOGVlYmNmN2E2Y2E5OTBjYWI5MzgyNTU4ZjMzOTc4MTQ3YTAwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9JbnB1dExheW91dENhY2hlLmgKQEAgLTAsMCArMSw5NSBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKy8vIElucHV0TGF5b3V0Q2FjaGUuaDogRGVmaW5lcyBJbnB1dExheW91dENhY2hlLCBh
IGNsYXNzIHRoYXQgYnVpbGRzIGFuZCBjYWNoZXMKKy8vIEQzRDExIGlucHV0IGxheW91dHMuCisK
KyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0lOUFVUTEFZT1VUQ0FDSEVfSF8KKyNkZWZpbmUg
TElCR0xFU1YyX1JFTkRFUkVSX0lOUFVUTEFZT1VUQ0FDSEVfSF8KKworI2luY2x1ZGUgImxpYkdM
RVN2Mi9Db25zdGFudHMuaCIKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorCituYW1l
c3BhY2UgZ2wKK3sKK2NsYXNzIFByb2dyYW1CaW5hcnk7Cit9CisKK25hbWVzcGFjZSByeAorewor
c3RydWN0IFRyYW5zbGF0ZWRBdHRyaWJ1dGU7CisKK2NsYXNzIElucHV0TGF5b3V0Q2FjaGUKK3sK
KyAgcHVibGljOgorICAgIElucHV0TGF5b3V0Q2FjaGUoKTsKKyAgICB2aXJ0dWFsIH5JbnB1dExh
eW91dENhY2hlKCk7CisKKyAgICB2b2lkIGluaXRpYWxpemUoSUQzRDExRGV2aWNlICpkZXZpY2Us
IElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQpOworICAgIHZvaWQgY2xlYXIoKTsKKyAgICB2
b2lkIG1hcmtEaXJ0eSgpOworCisgICAgR0xlbnVtIGFwcGx5VmVydGV4QnVmZmVycyhUcmFuc2xh
dGVkQXR0cmlidXRlIGF0dHJpYnV0ZXNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSk7
CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oSW5wdXRMYXlvdXRD
YWNoZSk7CisKKyAgICBzdHJ1Y3QgSW5wdXRMYXlvdXRFbGVtZW50CisgICAgeworICAgICAgICBE
M0QxMV9JTlBVVF9FTEVNRU5UX0RFU0MgZGVzYzsKKyAgICAgICAgR0xlbnVtIGdsc2xFbGVtZW50
VHlwZTsKKyAgICB9OworCisgICAgc3RydWN0IElucHV0TGF5b3V0S2V5CisgICAgeworICAgICAg
ICB1bnNpZ25lZCBpbnQgZWxlbWVudENvdW50OworICAgICAgICBJbnB1dExheW91dEVsZW1lbnQg
ZWxlbWVudHNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107CisKKyAgICAgICAgY29uc3QgY2hhciAq
YmVnaW4oKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyKj4oJmVsZW1lbnRDb3VudCk7CisgICAgICAgIH0KKworICAgICAgICBj
b25zdCBjaGFyICplbmQoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oJmVsZW1lbnRzW2VsZW1lbnRDb3VudF0pOworICAg
ICAgICB9CisgICAgfTsKKworICAgIHN0cnVjdCBJbnB1dExheW91dENvdW50ZXJQYWlyCisgICAg
eworICAgICAgICBJRDNEMTFJbnB1dExheW91dCAqaW5wdXRMYXlvdXQ7CisgICAgICAgIHVuc2ln
bmVkIGxvbmcgbG9uZyBsYXN0VXNlZFRpbWU7CisgICAgfTsKKworICAgIElEM0QxMUlucHV0TGF5
b3V0ICptQ3VycmVudElMOworICAgIHVuc2lnbmVkIGludCBtQ3VycmVudEJ1ZmZlcnNbZ2w6Ok1B
WF9WRVJURVhfQVRUUklCU107CisgICAgVUlOVCBtQ3VycmVudFZlcnRleFN0cmlkZXNbZ2w6Ok1B
WF9WRVJURVhfQVRUUklCU107CisgICAgVUlOVCBtQ3VycmVudFZlcnRleE9mZnNldHNbZ2w6Ok1B
WF9WRVJURVhfQVRUUklCU107CisKKyAgICBzdGF0aWMgc3RkOjpzaXplX3QgaGFzaElucHV0TGF5
b3V0KGNvbnN0IElucHV0TGF5b3V0S2V5ICZpbnB1dExheW91dCk7CisgICAgc3RhdGljIGJvb2wg
Y29tcGFyZUlucHV0TGF5b3V0cyhjb25zdCBJbnB1dExheW91dEtleSAmYSwgY29uc3QgSW5wdXRM
YXlvdXRLZXkgJmIpOworCisgICAgdHlwZWRlZiBzdGQ6OnNpemVfdCAoKklucHV0TGF5b3V0SGFz
aEZ1bmN0aW9uKShjb25zdCBJbnB1dExheW91dEtleSAmKTsKKyAgICB0eXBlZGVmIGJvb2wgKCpJ
bnB1dExheW91dEVxdWFsaXR5RnVuY3Rpb24pKGNvbnN0IElucHV0TGF5b3V0S2V5ICYsIGNvbnN0
IElucHV0TGF5b3V0S2V5ICYpOworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPElucHV0
TGF5b3V0S2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElucHV0TGF5b3V0Q291
bnRlclBhaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXRMYXlvdXRIYXNo
RnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXRMYXlvdXRFcXVh
bGl0eUZ1bmN0aW9uPiBJbnB1dExheW91dE1hcDsKKyAgICBJbnB1dExheW91dE1hcCBtSW5wdXRM
YXlvdXRNYXA7CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGtNYXhJbnB1dExheW91
dHM7CisKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbUNvdW50ZXI7CisKKyAgICBJRDNEMTFEZXZp
Y2UgKm1EZXZpY2U7CisgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqbURldmljZUNvbnRleHQ7Cit9
OworCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfSU5QVVRMQVlPVVRDQUNIRV9I
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9RdWVyeTExLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkMTEvUXVlcnkxMS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjRjMDMzMGExZTJj
MmE0NzkxNGMzNzlmYzczNTkxOTE1NzQyYTIzMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUXVlcnkxMS5jcHAK
QEAgLTAsMCArMSwxMjIgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHly
aWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKy8vIFF1ZXJ5MTEuY3BwOiBEZWZpbmVzIHRoZSByeDo6UXVlcnkxMSBjbGFzcyB3aGljaCBp
bXBsZW1lbnRzIHJ4OjpRdWVyeUltcGwuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
ZDNkMTEvUXVlcnkxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5k
ZXJlcjExLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKKworbmFtZXNwYWNlIHJ4Cit7
CisKK1F1ZXJ5MTE6OlF1ZXJ5MTEocng6OlJlbmRlcmVyMTEgKnJlbmRlcmVyLCBHTGVudW0gdHlw
ZSkgOiBRdWVyeUltcGwodHlwZSkKK3sKKyAgICBtUmVuZGVyZXIgPSByZW5kZXJlcjsKKyAgICBt
UXVlcnkgPSBOVUxMOworfQorCitRdWVyeTExOjp+UXVlcnkxMSgpCit7CisgICAgaWYgKG1RdWVy
eSkKKyAgICB7CisgICAgICAgIG1RdWVyeS0+UmVsZWFzZSgpOworICAgICAgICBtUXVlcnkgPSBO
VUxMOworICAgIH0KK30KKwordm9pZCBRdWVyeTExOjpiZWdpbigpCit7CisgICAgaWYgKG1RdWVy
eSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgRDNEMTFfUVVFUllfREVTQyBxdWVyeURlc2M7Cisg
ICAgICAgIHF1ZXJ5RGVzYy5RdWVyeSA9IEQzRDExX1FVRVJZX09DQ0xVU0lPTjsKKyAgICAgICAg
cXVlcnlEZXNjLk1pc2NGbGFncyA9IDA7CisKKyAgICAgICAgaWYgKEZBSUxFRChtUmVuZGVyZXIt
PmdldERldmljZSgpLT5DcmVhdGVRdWVyeSgmcXVlcnlEZXNjLCAmbVF1ZXJ5KSkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKS0+QmVnaW4o
bVF1ZXJ5KTsKK30KKwordm9pZCBRdWVyeTExOjplbmQoKQoreworICAgIGlmIChtUXVlcnkgPT0g
TlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgIH0KKworICAgIG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpLT5FbmQobVF1
ZXJ5KTsKKworICAgIG1TdGF0dXMgPSBHTF9GQUxTRTsKKyAgICBtUmVzdWx0ID0gR0xfRkFMU0U7
Cit9CisKK0dMdWludCBRdWVyeTExOjpnZXRSZXN1bHQoKQoreworICAgIGlmIChtUXVlcnkgIT0g
TlVMTCkKKyAgICB7CisgICAgICAgIHdoaWxlICghdGVzdFF1ZXJ5KCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIFNsZWVwKDApOworICAgICAgICAgICAgLy8gZXhwbGljaXRseSBjaGVjayBmb3Ig
ZGV2aWNlIGxvc3MsIHNvbWUgZHJpdmVycyBzZWVtIHRvIHJldHVybiBTX0ZBTFNFCisgICAgICAg
ICAgICAvLyBpZiB0aGUgZGV2aWNlIGlzIGxvc3QKKyAgICAgICAgICAgIGlmIChtUmVuZGVyZXIt
PnRlc3REZXZpY2VMb3N0KHRydWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgMCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbVJlc3VsdDsKK30KKworR0xib29sZWFuIFF1ZXJ5
MTE6OmlzUmVzdWx0QXZhaWxhYmxlKCkKK3sKKyAgICBpZiAobVF1ZXJ5ICE9IE5VTEwpCisgICAg
eworICAgICAgICB0ZXN0UXVlcnkoKTsKKyAgICB9CisKKyAgICByZXR1cm4gbVN0YXR1czsKK30K
KworR0xib29sZWFuIFF1ZXJ5MTE6OnRlc3RRdWVyeSgpCit7CisgICAgaWYgKG1RdWVyeSAhPSBO
VUxMICYmIG1TdGF0dXMgIT0gR0xfVFJVRSkKKyAgICB7CisgICAgICAgIFVJTlQ2NCBudW1QaXhl
bHMgPSAwOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29u
dGV4dCgpLT5HZXREYXRhKG1RdWVyeSwgJm51bVBpeGVscywgc2l6ZW9mKFVJTlQ2NCksIDApOwor
ICAgICAgICBpZiAocmVzdWx0ID09IFNfT0spCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TdGF0
dXMgPSBHTF9UUlVFOworCisgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOgorICAg
ICAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOgor
ICAgICAgICAgICAgICAgIG1SZXN1bHQgPSAobnVtUGl4ZWxzID4gMCkgPyBHTF9UUlVFIDogR0xf
RkFMU0U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBlbHNlIGlmIChtUmVuZGVyZXItPnRlc3REZXZpY2VMb3N0KHRydWUpKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX1RS
VUUpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1TdGF0dXM7CisgICAgfQorCisgICAg
cmV0dXJuIEdMX1RSVUU7IC8vIHByZXZlbnQgYmxvY2tpbmcgd2hlbiBxdWVyeSBpcyBudWxsCit9
CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvUXVlcnkxMS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9RdWVyeTExLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGEwM2RlNzdjYTMy
ODU1ZGJjZDE5YjEzYmM0NGQ5NzgzNzk0YTY3NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUXVlcnkxMS5oCkBA
IC0wLDAgKzEsNDAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBRdWVyeTExLmg6IERlZmluZXMgdGhl
IHJ4OjpRdWVyeTExIGNsYXNzIHdoaWNoIGltcGxlbWVudHMgcng6OlF1ZXJ5SW1wbC4KKworI2lm
bmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfUVVFUlkxMV9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVO
REVSRVJfUVVFUlkxMV9IXworCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1F1ZXJ5SW1w
bC5oIgorCituYW1lc3BhY2UgcngKK3sKK2NsYXNzIFJlbmRlcmVyMTE7CisKK2NsYXNzIFF1ZXJ5
MTEgOiBwdWJsaWMgUXVlcnlJbXBsCit7CisgIHB1YmxpYzoKKyAgICBRdWVyeTExKHJ4OjpSZW5k
ZXJlcjExICpyZW5kZXJlciwgR0xlbnVtIHR5cGUpOworICAgIHZpcnR1YWwgflF1ZXJ5MTEoKTsK
KworICAgIHZvaWQgYmVnaW4oKTsKKyAgICB2b2lkIGVuZCgpOworICAgIEdMdWludCBnZXRSZXN1
bHQoKTsKKyAgICBHTGJvb2xlYW4gaXNSZXN1bHRBdmFpbGFibGUoKTsKKworICBwcml2YXRlOgor
ICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihRdWVyeTExKTsKKworICAgIEdMYm9vbGVhbiB0
ZXN0UXVlcnkoKTsKKworICAgIHJ4OjpSZW5kZXJlcjExICptUmVuZGVyZXI7CisgICAgSUQzRDEx
UXVlcnkgKm1RdWVyeTsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9R
VUVSWTExX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclN0YXRlQ2FjaGUuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4wMDQ3ZTA0ZTgxODBhZjlmMWMyYzMxNDBhN2IwMzJiMzJlYTI1MDAxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmNwcApAQCAtMCwwICsxLDQzOCBAQAorI2lu
Y2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBSZW5kZXJTdGF0
ZUNhY2hlLmNwcDogRGVmaW5lcyByeDo6UmVuZGVyU3RhdGVDYWNoZSwgYSBjYWNoZSBvZiBEaXJl
Y3QzRCByZW5kZXIKKy8vIHN0YXRlIG9iamVjdHMuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvUmVuZGVyU3RhdGVDYWNoZS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvRnJh
bWVidWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2lu
Y2x1ZGUgInRoaXJkX3BhcnR5L211cm11cmhhc2gvTXVybXVySGFzaDMuaCIKKworbmFtZXNwYWNl
IHJ4Cit7CisKKy8vIE1TRE4ncyBkb2N1bWVudGF0aW9uIG9mIElEM0QxMURldmljZTo6Q3JlYXRl
QmxlbmRTdGF0ZSwgSUQzRDExRGV2aWNlOjpDcmVhdGVSYXN0ZXJpemVyU3RhdGUsCisvLyBJRDNE
MTFEZXZpY2U6OkNyZWF0ZURlcHRoU3RlbmNpbFN0YXRlIGFuZCBJRDNEMTFEZXZpY2U6OkNyZWF0
ZVNhbXBsZXJTdGF0ZSBjbGFpbXMgdGhlIG1heGltdW0KKy8vIG51bWJlciBvZiB1bmlxdWUgc3Rh
dGVzIG9mIGVhY2ggdHlwZSBhbiBhcHBsaWNhdGlvbiBjYW4gY3JlYXRlIGlzIDQwOTYKK2NvbnN0
IHVuc2lnbmVkIGludCBSZW5kZXJTdGF0ZUNhY2hlOjprTWF4QmxlbmRTdGF0ZXMgPSA0MDk2Owor
Y29uc3QgdW5zaWduZWQgaW50IFJlbmRlclN0YXRlQ2FjaGU6OmtNYXhSYXN0ZXJpemVyU3RhdGVz
ID0gNDA5NjsKK2NvbnN0IHVuc2lnbmVkIGludCBSZW5kZXJTdGF0ZUNhY2hlOjprTWF4RGVwdGhT
dGVuY2lsU3RhdGVzID0gNDA5NjsKK2NvbnN0IHVuc2lnbmVkIGludCBSZW5kZXJTdGF0ZUNhY2hl
OjprTWF4U2FtcGxlclN0YXRlcyA9IDQwOTY7CisKK1JlbmRlclN0YXRlQ2FjaGU6OlJlbmRlclN0
YXRlQ2FjaGUoKSA6IG1EZXZpY2UoTlVMTCksIG1Db3VudGVyKDApLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbUJsZW5kU3RhdGVDYWNoZShrTWF4QmxlbmRTdGF0ZXMs
IGhhc2hCbGVuZFN0YXRlLCBjb21wYXJlQmxlbmRTdGF0ZXMpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbVJhc3Rlcml6ZXJTdGF0ZUNhY2hlKGtNYXhSYXN0ZXJpemVy
U3RhdGVzLCBoYXNoUmFzdGVyaXplclN0YXRlLCBjb21wYXJlUmFzdGVyaXplclN0YXRlcyksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRGVwdGhTdGVuY2lsU3RhdGVD
YWNoZShrTWF4RGVwdGhTdGVuY2lsU3RhdGVzLCBoYXNoRGVwdGhTdGVuY2lsU3RhdGUsIGNvbXBh
cmVEZXB0aFN0ZW5jaWxTdGF0ZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbVNhbXBsZXJTdGF0ZUNhY2hlKGtNYXhTYW1wbGVyU3RhdGVzLCBoYXNoU2FtcGxlclN0
YXRlLCBjb21wYXJlU2FtcGxlclN0YXRlcykKK3sKK30KKworUmVuZGVyU3RhdGVDYWNoZTo6flJl
bmRlclN0YXRlQ2FjaGUoKQoreworICAgIGNsZWFyKCk7Cit9CisKK3ZvaWQgUmVuZGVyU3RhdGVD
YWNoZTo6aW5pdGlhbGl6ZShJRDNEMTFEZXZpY2UgKmRldmljZSkKK3sKKyAgICBjbGVhcigpOwor
ICAgIG1EZXZpY2UgPSBkZXZpY2U7Cit9CisKK3ZvaWQgUmVuZGVyU3RhdGVDYWNoZTo6Y2xlYXIo
KQoreworICAgIGZvciAoQmxlbmRTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1CbGVuZFN0YXRlQ2Fj
aGUuYmVnaW4oKTsgaSAhPSBtQmxlbmRTdGF0ZUNhY2hlLmVuZCgpOyBpKyspCisgICAgeworICAg
ICAgICBpLT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKKyAgICB9CisgICAgbUJsZW5kU3RhdGVD
YWNoZS5jbGVhcigpOworCisgICAgZm9yIChSYXN0ZXJpemVyU3RhdGVNYXA6Oml0ZXJhdG9yIGkg
PSBtUmFzdGVyaXplclN0YXRlQ2FjaGUuYmVnaW4oKTsgaSAhPSBtUmFzdGVyaXplclN0YXRlQ2Fj
aGUuZW5kKCk7IGkrKykKKyAgICB7CisgICAgICAgIGktPnNlY29uZC5maXJzdC0+UmVsZWFzZSgp
OworICAgIH0KKyAgICBtUmFzdGVyaXplclN0YXRlQ2FjaGUuY2xlYXIoKTsKKworICAgIGZvciAo
RGVwdGhTdGVuY2lsU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtRGVwdGhTdGVuY2lsU3RhdGVDYWNo
ZS5iZWdpbigpOyBpICE9IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmVuZCgpOyBpKyspCisgICAg
eworICAgICAgICBpLT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKKyAgICB9CisgICAgbURlcHRo
U3RlbmNpbFN0YXRlQ2FjaGUuY2xlYXIoKTsKKworICAgIGZvciAoU2FtcGxlclN0YXRlTWFwOjpp
dGVyYXRvciBpID0gbVNhbXBsZXJTdGF0ZUNhY2hlLmJlZ2luKCk7IGkgIT0gbVNhbXBsZXJTdGF0
ZUNhY2hlLmVuZCgpOyBpKyspCisgICAgeworICAgICAgICBpLT5zZWNvbmQuZmlyc3QtPlJlbGVh
c2UoKTsKKyAgICB9CisgICAgbVNhbXBsZXJTdGF0ZUNhY2hlLmNsZWFyKCk7Cit9CisKK3N0ZDo6
c2l6ZV90IFJlbmRlclN0YXRlQ2FjaGU6Omhhc2hCbGVuZFN0YXRlKGNvbnN0IEJsZW5kU3RhdGVL
ZXkgJmJsZW5kU3RhdGUpCit7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZWVkID0g
MHhBQkNERUY5ODsKKworICAgIHN0ZDo6c2l6ZV90IGhhc2ggPSAwOworICAgIE11cm11ckhhc2gz
X3g4Nl8zMigmYmxlbmRTdGF0ZSwgc2l6ZW9mKEJsZW5kU3RhdGVLZXkpLCBzZWVkLCAmaGFzaCk7
CisgICAgcmV0dXJuIGhhc2g7Cit9CisKK2Jvb2wgUmVuZGVyU3RhdGVDYWNoZTo6Y29tcGFyZUJs
ZW5kU3RhdGVzKGNvbnN0IEJsZW5kU3RhdGVLZXkgJmEsIGNvbnN0IEJsZW5kU3RhdGVLZXkgJmIp
Cit7CisgICAgcmV0dXJuIG1lbWNtcCgmYSwgJmIsIHNpemVvZihnbDo6QmxlbmRTdGF0ZSkpID09
IDA7Cit9CisKK0lEM0QxMUJsZW5kU3RhdGUgKlJlbmRlclN0YXRlQ2FjaGU6OmdldEJsZW5kU3Rh
dGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJs
ZW5kU3RhdGUpCit7CisgICAgaWYgKCFtRGV2aWNlKQorICAgIHsKKyAgICAgICAgRVJSKCJSZW5k
ZXJTdGF0ZUNhY2hlIGlzIG5vdCBpbml0aWFsaXplZC4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7
CisgICAgfQorCisgICAgYm9vbCBtcnQgPSBmYWxzZTsKKworICAgIEJsZW5kU3RhdGVLZXkga2V5
ID0geyAwIH07CisgICAga2V5LmJsZW5kU3RhdGUgPSBibGVuZFN0YXRlOworICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgRDNEMTFfU0lNVUxUQU5FT1VTX1JFTkRFUl9UQVJHRVRfQ09V
TlQ7IGkrKykKKyAgICB7CisgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlckJ1ZmZlciA9
IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcihpKTsKKyAgICAgICAgaWYgKHJlbmRlckJ1ZmZl
cikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGkgPiAwKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG1ydCA9IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEdM
ZW51bSBpbnRlcm5hbEZvcm1hdCA9IHJlbmRlckJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsK
KyAgICAgICAgICAgIGtleS5ydENoYW5uZWxzW2ldWzBdID0gZ2w6OkdldFJlZFNpemUoaW50ZXJu
YWxGb3JtYXQpID4gMDsKKyAgICAgICAgICAgIGtleS5ydENoYW5uZWxzW2ldWzFdID0gZ2w6Okdl
dEdyZWVuU2l6ZShpbnRlcm5hbEZvcm1hdCkgPiAwOworICAgICAgICAgICAga2V5LnJ0Q2hhbm5l
bHNbaV1bMl0gPSBnbDo6R2V0Qmx1ZVNpemUoaW50ZXJuYWxGb3JtYXQpID4gMDs7CisgICAgICAg
ICAgICBrZXkucnRDaGFubmVsc1tpXVszXSA9IGdsOjpHZXRBbHBoYVNpemUoaW50ZXJuYWxGb3Jt
YXQpID4gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IGtleS5ydENoYW5uZWxzW2ldWzBdID0gZmFsc2U7CisgICAgICAgICAgICBrZXkucnRDaGFubmVs
c1tpXVsxXSA9IGZhbHNlOworICAgICAgICAgICAga2V5LnJ0Q2hhbm5lbHNbaV1bMl0gPSBmYWxz
ZTsKKyAgICAgICAgICAgIGtleS5ydENoYW5uZWxzW2ldWzNdID0gZmFsc2U7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBCbGVuZFN0YXRlTWFwOjppdGVyYXRvciBpID0gbUJsZW5kU3RhdGVDYWNo
ZS5maW5kKGtleSk7CisgICAgaWYgKGkgIT0gbUJsZW5kU3RhdGVDYWNoZS5lbmQoKSkKKyAgICB7
CisgICAgICAgIEJsZW5kU3RhdGVDb3VudGVyUGFpciAmc3RhdGUgPSBpLT5zZWNvbmQ7CisgICAg
ICAgIHN0YXRlLnNlY29uZCA9IG1Db3VudGVyKys7CisgICAgICAgIHJldHVybiBzdGF0ZS5maXJz
dDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKG1CbGVuZFN0YXRlQ2FjaGUu
c2l6ZSgpID49IGtNYXhCbGVuZFN0YXRlcykKKyAgICAgICAgeworICAgICAgICAgICAgVFJBQ0Uo
Ik92ZXJmbG93ZWQgdGhlIGxpbWl0IG9mICV1IGJsZW5kIHN0YXRlcywgcmVtb3ZpbmcgdGhlIGxl
YXN0IHJlY2VudGx5IHVzZWQgIgorICAgICAgICAgICAgICAgICAgInRvIG1ha2Ugcm9vbS4iLCBr
TWF4QmxlbmRTdGF0ZXMpOworCisgICAgICAgICAgICBCbGVuZFN0YXRlTWFwOjppdGVyYXRvciBs
ZWFzdFJlY2VudGx5VXNlZCA9IG1CbGVuZFN0YXRlQ2FjaGUuYmVnaW4oKTsKKyAgICAgICAgICAg
IGZvciAoQmxlbmRTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1CbGVuZFN0YXRlQ2FjaGUuYmVnaW4o
KTsgaSAhPSBtQmxlbmRTdGF0ZUNhY2hlLmVuZCgpOyBpKyspCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgaWYgKGktPnNlY29uZC5zZWNvbmQgPCBsZWFzdFJlY2VudGx5VXNlZC0+c2Vj
b25kLnNlY29uZCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGxlYXN0
UmVjZW50bHlVc2VkID0gaTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmZpcnN0LT5SZWxlYXNlKCk7CisgICAg
ICAgICAgICBtQmxlbmRTdGF0ZUNhY2hlLmVyYXNlKGxlYXN0UmVjZW50bHlVc2VkKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBibGVuZCBzdGF0ZSBhbmQgaW5zZXJ0IGl0
IGludG8gdGhlIGNhY2hlCisgICAgICAgIEQzRDExX0JMRU5EX0RFU0MgYmxlbmREZXNjID0geyAw
IH07CisgICAgICAgIGJsZW5kRGVzYy5BbHBoYVRvQ292ZXJhZ2VFbmFibGUgPSBibGVuZFN0YXRl
LnNhbXBsZUFscGhhVG9Db3ZlcmFnZTsKKyAgICAgICAgYmxlbmREZXNjLkluZGVwZW5kZW50Qmxl
bmRFbmFibGUgPSBtcnQgPyBUUlVFIDogRkFMU0U7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBEM0QxMV9TSU1VTFRBTkVPVVNfUkVOREVSX1RBUkdFVF9DT1VOVDsgaSsr
KQorICAgICAgICB7CisgICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX0JMRU5EX0RFU0Mg
JnJ0QmxlbmQgPSBibGVuZERlc2MuUmVuZGVyVGFyZ2V0W2ldOworCisgICAgICAgICAgICBydEJs
ZW5kLkJsZW5kRW5hYmxlID0gYmxlbmRTdGF0ZS5ibGVuZDsKKyAgICAgICAgICAgIGlmIChibGVu
ZFN0YXRlLmJsZW5kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJ0QmxlbmQuU3Jj
QmxlbmQgPSBnbF9kM2QxMTo6Q29udmVydEJsZW5kRnVuYyhibGVuZFN0YXRlLnNvdXJjZUJsZW5k
UkdCLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgcnRCbGVuZC5EZXN0QmxlbmQgPSBnbF9kM2Qx
MTo6Q29udmVydEJsZW5kRnVuYyhibGVuZFN0YXRlLmRlc3RCbGVuZFJHQiwgZmFsc2UpOworICAg
ICAgICAgICAgICAgIHJ0QmxlbmQuQmxlbmRPcCA9IGdsX2QzZDExOjpDb252ZXJ0QmxlbmRPcChi
bGVuZFN0YXRlLmJsZW5kRXF1YXRpb25SR0IpOworCisgICAgICAgICAgICAgICAgcnRCbGVuZC5T
cmNCbGVuZEFscGhhID0gZ2xfZDNkMTE6OkNvbnZlcnRCbGVuZEZ1bmMoYmxlbmRTdGF0ZS5zb3Vy
Y2VCbGVuZEFscGhhLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBydEJsZW5kLkRlc3RCbGVuZEFs
cGhhID0gZ2xfZDNkMTE6OkNvbnZlcnRCbGVuZEZ1bmMoYmxlbmRTdGF0ZS5kZXN0QmxlbmRBbHBo
YSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgcnRCbGVuZC5CbGVuZE9wQWxwaGEgPSBnbF9kM2Qx
MTo6Q29udmVydEJsZW5kT3AoYmxlbmRTdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBydEJsZW5kLlJlbmRlclRhcmdldFdyaXRlTWFzayA9IGds
X2QzZDExOjpDb252ZXJ0Q29sb3JNYXNrKGtleS5ydENoYW5uZWxzW2ldWzBdICYmIGJsZW5kU3Rh
dGUuY29sb3JNYXNrUmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkucnRDaGFubmVsc1tpXVsxXSAmJiBi
bGVuZFN0YXRlLmNvbG9yTWFza0dyZWVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkucnRDaGFubmVsc1tp
XVsyXSAmJiBibGVuZFN0YXRlLmNvbG9yTWFza0JsdWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleS5ydENo
YW5uZWxzW2ldWzNdICYmIGJsZW5kU3RhdGUuY29sb3JNYXNrQWxwaGEpOworICAgICAgICB9CisK
KyAgICAgICAgSUQzRDExQmxlbmRTdGF0ZSAqZHgxMUJsZW5kU3RhdGUgPSBOVUxMOworICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUJsZW5kU3RhdGUoJmJsZW5kRGVzYywg
JmR4MTFCbGVuZFN0YXRlKTsKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpIHx8ICFkeDExQmxl
bmRTdGF0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJVbmFibGUgdG8gY3JlYXRlIGEg
SUQzRDExQmxlbmRTdGF0ZSwgSFJFU1VMVDogMHglWC4iLCByZXN1bHQpOworICAgICAgICAgICAg
cmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBtQmxlbmRTdGF0ZUNhY2hlLmluc2Vy
dChzdGQ6Om1ha2VfcGFpcihrZXksIHN0ZDo6bWFrZV9wYWlyKGR4MTFCbGVuZFN0YXRlLCBtQ291
bnRlcisrKSkpOworCisgICAgICAgIHJldHVybiBkeDExQmxlbmRTdGF0ZTsKKyAgICB9Cit9CisK
K3N0ZDo6c2l6ZV90IFJlbmRlclN0YXRlQ2FjaGU6Omhhc2hSYXN0ZXJpemVyU3RhdGUoY29uc3Qg
UmFzdGVyaXplclN0YXRlS2V5ICZyYXN0ZXJTdGF0ZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgaW50IHNlZWQgPSAweEFCQ0RFRjk4OworCisgICAgc3RkOjpzaXplX3QgaGFzaCA9IDA7
CisgICAgTXVybXVySGFzaDNfeDg2XzMyKCZyYXN0ZXJTdGF0ZSwgc2l6ZW9mKFJhc3Rlcml6ZXJT
dGF0ZUtleSksIHNlZWQsICZoYXNoKTsKKyAgICByZXR1cm4gaGFzaDsKK30KKworYm9vbCBSZW5k
ZXJTdGF0ZUNhY2hlOjpjb21wYXJlUmFzdGVyaXplclN0YXRlcyhjb25zdCBSYXN0ZXJpemVyU3Rh
dGVLZXkgJmEsIGNvbnN0IFJhc3Rlcml6ZXJTdGF0ZUtleSAmYikKK3sKKyAgICByZXR1cm4gbWVt
Y21wKCZhLCAmYiwgc2l6ZW9mKFJhc3Rlcml6ZXJTdGF0ZUtleSkpID09IDA7Cit9CisKK0lEM0Qx
MVJhc3Rlcml6ZXJTdGF0ZSAqUmVuZGVyU3RhdGVDYWNoZTo6Z2V0UmFzdGVyaXplclN0YXRlKGNv
bnN0IGdsOjpSYXN0ZXJpemVyU3RhdGUgJnJhc3RlclN0YXRlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzY2lzc29yRW5h
YmxlZCwgdW5zaWduZWQgaW50IGRlcHRoU2l6ZSkKK3sKKyAgICBpZiAoIW1EZXZpY2UpCisgICAg
eworICAgICAgICBFUlIoIlJlbmRlclN0YXRlQ2FjaGUgaXMgbm90IGluaXRpYWxpemVkLiIpOwor
ICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBSYXN0ZXJpemVyU3RhdGVLZXkga2V5
OworICAgIGtleS5yYXN0ZXJpemVyU3RhdGUgPSByYXN0ZXJTdGF0ZTsKKyAgICBrZXkuc2Npc3Nv
ckVuYWJsZWQgPSBzY2lzc29yRW5hYmxlZDsKKyAgICBrZXkuZGVwdGhTaXplID0gZGVwdGhTaXpl
OworCisgICAgUmFzdGVyaXplclN0YXRlTWFwOjppdGVyYXRvciBpID0gbVJhc3Rlcml6ZXJTdGF0
ZUNhY2hlLmZpbmQoa2V5KTsKKyAgICBpZiAoaSAhPSBtUmFzdGVyaXplclN0YXRlQ2FjaGUuZW5k
KCkpCisgICAgeworICAgICAgICBSYXN0ZXJpemVyU3RhdGVDb3VudGVyUGFpciAmc3RhdGUgPSBp
LT5zZWNvbmQ7CisgICAgICAgIHN0YXRlLnNlY29uZCA9IG1Db3VudGVyKys7CisgICAgICAgIHJl
dHVybiBzdGF0ZS5maXJzdDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKG1S
YXN0ZXJpemVyU3RhdGVDYWNoZS5zaXplKCkgPj0ga01heFJhc3Rlcml6ZXJTdGF0ZXMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIFRSQUNFKCJPdmVyZmxvd2VkIHRoZSBsaW1pdCBvZiAldSByYXN0
ZXJpemVyIHN0YXRlcywgcmVtb3ZpbmcgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWQgIgorICAgICAg
ICAgICAgICAgICAgInRvIG1ha2Ugcm9vbS4iLCBrTWF4UmFzdGVyaXplclN0YXRlcyk7CisKKyAg
ICAgICAgICAgIFJhc3Rlcml6ZXJTdGF0ZU1hcDo6aXRlcmF0b3IgbGVhc3RSZWNlbnRseVVzZWQg
PSBtUmFzdGVyaXplclN0YXRlQ2FjaGUuYmVnaW4oKTsKKyAgICAgICAgICAgIGZvciAoUmFzdGVy
aXplclN0YXRlTWFwOjppdGVyYXRvciBpID0gbVJhc3Rlcml6ZXJTdGF0ZUNhY2hlLmJlZ2luKCk7
IGkgIT0gbVJhc3Rlcml6ZXJTdGF0ZUNhY2hlLmVuZCgpOyBpKyspCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaWYgKGktPnNlY29uZC5zZWNvbmQgPCBsZWFzdFJlY2VudGx5VXNlZC0+
c2Vjb25kLnNlY29uZCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGxl
YXN0UmVjZW50bHlVc2VkID0gaTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmZpcnN0LT5SZWxlYXNlKCk7Cisg
ICAgICAgICAgICBtUmFzdGVyaXplclN0YXRlQ2FjaGUuZXJhc2UobGVhc3RSZWNlbnRseVVzZWQp
OworICAgICAgICB9CisKKyAgICAgICAgRDNEMTFfQ1VMTF9NT0RFIGN1bGxNb2RlID0gZ2xfZDNk
MTE6OkNvbnZlcnRDdWxsTW9kZShyYXN0ZXJTdGF0ZS5jdWxsRmFjZSwgcmFzdGVyU3RhdGUuY3Vs
bE1vZGUpOworCisgICAgICAgIC8vIERpc2FibGUgY3VsbGluZyBpZiBkcmF3aW5nIHBvaW50cwor
ICAgICAgICBpZiAocmFzdGVyU3RhdGUucG9pbnREcmF3TW9kZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgY3VsbE1vZGUgPSBEM0QxMV9DVUxMX05PTkU7CisgICAgICAgIH0KKworICAgICAgICBE
M0QxMV9SQVNURVJJWkVSX0RFU0MgcmFzdGVyRGVzYzsKKyAgICAgICAgcmFzdGVyRGVzYy5GaWxs
TW9kZSA9IEQzRDExX0ZJTExfU09MSUQ7CisgICAgICAgIHJhc3RlckRlc2MuQ3VsbE1vZGUgPSBj
dWxsTW9kZTsKKyAgICAgICAgcmFzdGVyRGVzYy5Gcm9udENvdW50ZXJDbG9ja3dpc2UgPSAocmFz
dGVyU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVykgPyBGQUxTRTogVFJVRTsKKyAgICAgICAgcmFz
dGVyRGVzYy5EZXB0aEJpYXMgPSBsZGV4cChyYXN0ZXJTdGF0ZS5wb2x5Z29uT2Zmc2V0VW5pdHMs
IC1zdGF0aWNfY2FzdDxpbnQ+KGRlcHRoU2l6ZSkpOworICAgICAgICByYXN0ZXJEZXNjLkRlcHRo
Qmlhc0NsYW1wID0gMC4wZjsgLy8gTVNETiBkb2N1bWVudGF0aW9uIG9mIERlcHRoQmlhc0NsYW1w
IGltcGxpZXMgYSB2YWx1ZSBvZiB6ZXJvIHdpbGwgcHJlZm9ybSBubyBjbGFtcGluZywgbXVzdCBi
ZSB0ZXN0ZWQgdGhvdWdoLgorICAgICAgICByYXN0ZXJEZXNjLlNsb3BlU2NhbGVkRGVwdGhCaWFz
ID0gcmFzdGVyU3RhdGUucG9seWdvbk9mZnNldEZhY3RvcjsKKyAgICAgICAgcmFzdGVyRGVzYy5E
ZXB0aENsaXBFbmFibGUgPSBUUlVFOworICAgICAgICByYXN0ZXJEZXNjLlNjaXNzb3JFbmFibGUg
PSBzY2lzc29yRW5hYmxlZCA/IFRSVUUgOiBGQUxTRTsKKyAgICAgICAgcmFzdGVyRGVzYy5NdWx0
aXNhbXBsZUVuYWJsZSA9IHJhc3RlclN0YXRlLm11bHRpU2FtcGxlOworICAgICAgICByYXN0ZXJE
ZXNjLkFudGlhbGlhc2VkTGluZUVuYWJsZSA9IEZBTFNFOworCisgICAgICAgIElEM0QxMVJhc3Rl
cml6ZXJTdGF0ZSAqZHgxMVJhc3Rlcml6ZXJTdGF0ZSA9IE5VTEw7CisgICAgICAgIEhSRVNVTFQg
cmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUmFzdGVyaXplclN0YXRlKCZyYXN0ZXJEZXNjLCAmZHgx
MVJhc3Rlcml6ZXJTdGF0ZSk7CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSB8fCAhZHgxMVJh
c3Rlcml6ZXJTdGF0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJVbmFibGUgdG8gY3Jl
YXRlIGEgSUQzRDExUmFzdGVyaXplclN0YXRlLCBIUkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7Cisg
ICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIG1SYXN0ZXJpemVy
U3RhdGVDYWNoZS5pbnNlcnQoc3RkOjptYWtlX3BhaXIoa2V5LCBzdGQ6Om1ha2VfcGFpcihkeDEx
UmFzdGVyaXplclN0YXRlLCBtQ291bnRlcisrKSkpOworCisgICAgICAgIHJldHVybiBkeDExUmFz
dGVyaXplclN0YXRlOworICAgIH0KK30KKworc3RkOjpzaXplX3QgUmVuZGVyU3RhdGVDYWNoZTo6
aGFzaERlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmZHNTdGF0
ZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNlZWQgPSAweEFCQ0RFRjk4Owor
CisgICAgc3RkOjpzaXplX3QgaGFzaCA9IDA7CisgICAgTXVybXVySGFzaDNfeDg2XzMyKCZkc1N0
YXRlLCBzaXplb2YoZ2w6OkRlcHRoU3RlbmNpbFN0YXRlKSwgc2VlZCwgJmhhc2gpOworICAgIHJl
dHVybiBoYXNoOworfQorCitib29sIFJlbmRlclN0YXRlQ2FjaGU6OmNvbXBhcmVEZXB0aFN0ZW5j
aWxTdGF0ZXMoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZhLCBjb25zdCBnbDo6RGVwdGhT
dGVuY2lsU3RhdGUgJmIpCit7CisgICAgcmV0dXJuIG1lbWNtcCgmYSwgJmIsIHNpemVvZihnbDo6
RGVwdGhTdGVuY2lsU3RhdGUpKSA9PSAwOworfQorCitJRDNEMTFEZXB0aFN0ZW5jaWxTdGF0ZSAq
UmVuZGVyU3RhdGVDYWNoZTo6Z2V0RGVwdGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6OkRlcHRoU3Rl
bmNpbFN0YXRlICZkc1N0YXRlKQoreworICAgIGlmICghbURldmljZSkKKyAgICB7CisgICAgICAg
IEVSUigiUmVuZGVyU3RhdGVDYWNoZSBpcyBub3QgaW5pdGlhbGl6ZWQuIik7CisgICAgICAgIHJl
dHVybiBOVUxMOworICAgIH0KKworICAgIERlcHRoU3RlbmNpbFN0YXRlTWFwOjppdGVyYXRvciBp
ID0gbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuZmluZChkc1N0YXRlKTsKKyAgICBpZiAoaSAhPSBt
RGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5lbmQoKSkKKyAgICB7CisgICAgICAgIERlcHRoU3RlbmNp
bFN0YXRlQ291bnRlclBhaXIgJnN0YXRlID0gaS0+c2Vjb25kOworICAgICAgICBzdGF0ZS5zZWNv
bmQgPSBtQ291bnRlcisrOworICAgICAgICByZXR1cm4gc3RhdGUuZmlyc3Q7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIGlmIChtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5zaXplKCkg
Pj0ga01heERlcHRoU3RlbmNpbFN0YXRlcykKKyAgICAgICAgeworICAgICAgICAgICAgVFJBQ0Uo
Ik92ZXJmbG93ZWQgdGhlIGxpbWl0IG9mICV1IGRlcHRoIHN0ZW5jaWwgc3RhdGVzLCByZW1vdmlu
ZyB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCAiCisgICAgICAgICAgICAgICAgICAidG8gbWFrZSBy
b29tLiIsIGtNYXhEZXB0aFN0ZW5jaWxTdGF0ZXMpOworCisgICAgICAgICAgICBEZXB0aFN0ZW5j
aWxTdGF0ZU1hcDo6aXRlcmF0b3IgbGVhc3RSZWNlbnRseVVzZWQgPSBtRGVwdGhTdGVuY2lsU3Rh
dGVDYWNoZS5iZWdpbigpOworICAgICAgICAgICAgZm9yIChEZXB0aFN0ZW5jaWxTdGF0ZU1hcDo6
aXRlcmF0b3IgaSA9IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmJlZ2luKCk7IGkgIT0gbURlcHRo
U3RlbmNpbFN0YXRlQ2FjaGUuZW5kKCk7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBpZiAoaS0+c2Vjb25kLnNlY29uZCA8IGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuc2Vj
b25kKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbGVhc3RSZWNlbnRs
eVVzZWQgPSBpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKKyAgICAgICAgICAg
IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmVyYXNlKGxlYXN0UmVjZW50bHlVc2VkKTsKKyAgICAg
ICAgfQorCisgICAgICAgIEQzRDExX0RFUFRIX1NURU5DSUxfREVTQyBkc0Rlc2MgPSB7IDAgfTsK
KyAgICAgICAgZHNEZXNjLkRlcHRoRW5hYmxlID0gZHNTdGF0ZS5kZXB0aFRlc3QgPyBUUlVFIDog
RkFMU0U7CisgICAgICAgIGRzRGVzYy5EZXB0aFdyaXRlTWFzayA9IGdsX2QzZDExOjpDb252ZXJ0
RGVwdGhNYXNrKGRzU3RhdGUuZGVwdGhNYXNrKTsKKyAgICAgICAgZHNEZXNjLkRlcHRoRnVuYyA9
IGdsX2QzZDExOjpDb252ZXJ0Q29tcGFyaXNvbihkc1N0YXRlLmRlcHRoRnVuYyk7CisgICAgICAg
IGRzRGVzYy5TdGVuY2lsRW5hYmxlID0gZHNTdGF0ZS5zdGVuY2lsVGVzdCA/IFRSVUUgOiBGQUxT
RTsKKyAgICAgICAgZHNEZXNjLlN0ZW5jaWxSZWFkTWFzayA9IGdsX2QzZDExOjpDb252ZXJ0U3Rl
bmNpbE1hc2soZHNTdGF0ZS5zdGVuY2lsTWFzayk7CisgICAgICAgIGRzRGVzYy5TdGVuY2lsV3Jp
dGVNYXNrID0gZ2xfZDNkMTE6OkNvbnZlcnRTdGVuY2lsTWFzayhkc1N0YXRlLnN0ZW5jaWxXcml0
ZW1hc2spOworICAgICAgICBkc0Rlc2MuRnJvbnRGYWNlLlN0ZW5jaWxGYWlsT3AgPSBnbF9kM2Qx
MTo6Q29udmVydFN0ZW5jaWxPcChkc1N0YXRlLnN0ZW5jaWxGYWlsKTsKKyAgICAgICAgZHNEZXNj
LkZyb250RmFjZS5TdGVuY2lsRGVwdGhGYWlsT3AgPSBnbF9kM2QxMTo6Q29udmVydFN0ZW5jaWxP
cChkc1N0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsKTsKKyAgICAgICAgZHNEZXNjLkZyb250RmFj
ZS5TdGVuY2lsUGFzc09wID0gZ2xfZDNkMTE6OkNvbnZlcnRTdGVuY2lsT3AoZHNTdGF0ZS5zdGVu
Y2lsUGFzc0RlcHRoUGFzcyk7CisgICAgICAgIGRzRGVzYy5Gcm9udEZhY2UuU3RlbmNpbEZ1bmMg
PSBnbF9kM2QxMTo6Q29udmVydENvbXBhcmlzb24oZHNTdGF0ZS5zdGVuY2lsRnVuYyk7CisgICAg
ICAgIGRzRGVzYy5CYWNrRmFjZS5TdGVuY2lsRmFpbE9wID0gZ2xfZDNkMTE6OkNvbnZlcnRTdGVu
Y2lsT3AoZHNTdGF0ZS5zdGVuY2lsQmFja0ZhaWwpOworICAgICAgICBkc0Rlc2MuQmFja0ZhY2Uu
U3RlbmNpbERlcHRoRmFpbE9wID0gZ2xfZDNkMTE6OkNvbnZlcnRTdGVuY2lsT3AoZHNTdGF0ZS5z
dGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwpOworICAgICAgICBkc0Rlc2MuQmFja0ZhY2UuU3RlbmNp
bFBhc3NPcCA9IGdsX2QzZDExOjpDb252ZXJ0U3RlbmNpbE9wKGRzU3RhdGUuc3RlbmNpbEJhY2tQ
YXNzRGVwdGhQYXNzKTsKKyAgICAgICAgZHNEZXNjLkJhY2tGYWNlLlN0ZW5jaWxGdW5jID0gZ2xf
ZDNkMTE6OkNvbnZlcnRDb21wYXJpc29uKGRzU3RhdGUuc3RlbmNpbEJhY2tGdW5jKTsKKworICAg
ICAgICBJRDNEMTFEZXB0aFN0ZW5jaWxTdGF0ZSAqZHgxMURlcHRoU3RlbmNpbFN0YXRlID0gTlVM
TDsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxT
dGF0ZSgmZHNEZXNjLCAmZHgxMURlcHRoU3RlbmNpbFN0YXRlKTsKKyAgICAgICAgaWYgKEZBSUxF
RChyZXN1bHQpIHx8ICFkeDExRGVwdGhTdGVuY2lsU3RhdGUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEVSUigiVW5hYmxlIHRvIGNyZWF0ZSBhIElEM0QxMURlcHRoU3RlbmNpbFN0YXRlLCBIUkVT
VUxUOiAweCVYLiIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAg
fQorCisgICAgICAgIG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmluc2VydChzdGQ6Om1ha2VfcGFp
cihkc1N0YXRlLCBzdGQ6Om1ha2VfcGFpcihkeDExRGVwdGhTdGVuY2lsU3RhdGUsIG1Db3VudGVy
KyspKSk7CisKKyAgICAgICAgcmV0dXJuIGR4MTFEZXB0aFN0ZW5jaWxTdGF0ZTsKKyAgICB9Cit9
CisKK3N0ZDo6c2l6ZV90IFJlbmRlclN0YXRlQ2FjaGU6Omhhc2hTYW1wbGVyU3RhdGUoY29uc3Qg
Z2w6OlNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKQoreworICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBpbnQgc2VlZCA9IDB4QUJDREVGOTg7CisKKyAgICBzdGQ6OnNpemVfdCBoYXNoID0gMDsK
KyAgICBNdXJtdXJIYXNoM194ODZfMzIoJnNhbXBsZXJTdGF0ZSwgc2l6ZW9mKGdsOjpTYW1wbGVy
U3RhdGUpLCBzZWVkLCAmaGFzaCk7CisgICAgcmV0dXJuIGhhc2g7Cit9CisKK2Jvb2wgUmVuZGVy
U3RhdGVDYWNoZTo6Y29tcGFyZVNhbXBsZXJTdGF0ZXMoY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAm
YSwgY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmYikKK3sKKyAgICByZXR1cm4gbWVtY21wKCZhLCAm
Yiwgc2l6ZW9mKGdsOjpTYW1wbGVyU3RhdGUpKSA9PSAwOworfQorCitJRDNEMTFTYW1wbGVyU3Rh
dGUgKlJlbmRlclN0YXRlQ2FjaGU6OmdldFNhbXBsZXJTdGF0ZShjb25zdCBnbDo6U2FtcGxlclN0
YXRlICZzYW1wbGVyU3RhdGUpCit7CisgICAgaWYgKCFtRGV2aWNlKQorICAgIHsKKyAgICAgICAg
RVJSKCJSZW5kZXJTdGF0ZUNhY2hlIGlzIG5vdCBpbml0aWFsaXplZC4iKTsKKyAgICAgICAgcmV0
dXJuIE5VTEw7CisgICAgfQorCisgICAgU2FtcGxlclN0YXRlTWFwOjppdGVyYXRvciBpID0gbVNh
bXBsZXJTdGF0ZUNhY2hlLmZpbmQoc2FtcGxlclN0YXRlKTsKKyAgICBpZiAoaSAhPSBtU2FtcGxl
clN0YXRlQ2FjaGUuZW5kKCkpCisgICAgeworICAgICAgICBTYW1wbGVyU3RhdGVDb3VudGVyUGFp
ciAmc3RhdGUgPSBpLT5zZWNvbmQ7CisgICAgICAgIHN0YXRlLnNlY29uZCA9IG1Db3VudGVyKys7
CisgICAgICAgIHJldHVybiBzdGF0ZS5maXJzdDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgaWYgKG1TYW1wbGVyU3RhdGVDYWNoZS5zaXplKCkgPj0ga01heFNhbXBsZXJTdGF0ZXMp
CisgICAgICAgIHsKKyAgICAgICAgICAgIFRSQUNFKCJPdmVyZmxvd2VkIHRoZSBsaW1pdCBvZiAl
dSBzYW1wbGVyIHN0YXRlcywgcmVtb3ZpbmcgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWQgIgorICAg
ICAgICAgICAgICAgICAgInRvIG1ha2Ugcm9vbS4iLCBrTWF4U2FtcGxlclN0YXRlcyk7CisKKyAg
ICAgICAgICAgIFNhbXBsZXJTdGF0ZU1hcDo6aXRlcmF0b3IgbGVhc3RSZWNlbnRseVVzZWQgPSBt
U2FtcGxlclN0YXRlQ2FjaGUuYmVnaW4oKTsKKyAgICAgICAgICAgIGZvciAoU2FtcGxlclN0YXRl
TWFwOjppdGVyYXRvciBpID0gbVNhbXBsZXJTdGF0ZUNhY2hlLmJlZ2luKCk7IGkgIT0gbVNhbXBs
ZXJTdGF0ZUNhY2hlLmVuZCgpOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aWYgKGktPnNlY29uZC5zZWNvbmQgPCBsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLnNlY29uZCkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2Vk
ID0gaTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsZWFz
dFJlY2VudGx5VXNlZC0+c2Vjb25kLmZpcnN0LT5SZWxlYXNlKCk7CisgICAgICAgICAgICBtU2Ft
cGxlclN0YXRlQ2FjaGUuZXJhc2UobGVhc3RSZWNlbnRseVVzZWQpOworICAgICAgICB9CisKKyAg
ICAgICAgRDNEMTFfU0FNUExFUl9ERVNDIHNhbXBsZXJEZXNjOworICAgICAgICBzYW1wbGVyRGVz
Yy5GaWx0ZXIgPSBnbF9kM2QxMTo6Q29udmVydEZpbHRlcihzYW1wbGVyU3RhdGUubWluRmlsdGVy
LCBzYW1wbGVyU3RhdGUubWFnRmlsdGVyLCBzYW1wbGVyU3RhdGUubWF4QW5pc290cm9weSk7Cisg
ICAgICAgIHNhbXBsZXJEZXNjLkFkZHJlc3NVID0gZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlV3Jh
cChzYW1wbGVyU3RhdGUud3JhcFMpOworICAgICAgICBzYW1wbGVyRGVzYy5BZGRyZXNzViA9IGds
X2QzZDExOjpDb252ZXJ0VGV4dHVyZVdyYXAoc2FtcGxlclN0YXRlLndyYXBUKTsKKyAgICAgICAg
c2FtcGxlckRlc2MuQWRkcmVzc1cgPSBEM0QxMV9URVhUVVJFX0FERFJFU1NfQ0xBTVA7CisgICAg
ICAgIHNhbXBsZXJEZXNjLk1pcExPREJpYXMgPSBzdGF0aWNfY2FzdDxmbG9hdD4oc2FtcGxlclN0
YXRlLmxvZE9mZnNldCk7CisgICAgICAgIHNhbXBsZXJEZXNjLk1heEFuaXNvdHJvcHkgPSBzYW1w
bGVyU3RhdGUubWF4QW5pc290cm9weTsKKyAgICAgICAgc2FtcGxlckRlc2MuQ29tcGFyaXNvbkZ1
bmMgPSBEM0QxMV9DT01QQVJJU09OX05FVkVSOworICAgICAgICBzYW1wbGVyRGVzYy5Cb3JkZXJD
b2xvclswXSA9IDAuMGY7CisgICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzFdID0gMC4w
ZjsKKyAgICAgICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbMl0gPSAwLjBmOworICAgICAgICBz
YW1wbGVyRGVzYy5Cb3JkZXJDb2xvclszXSA9IDAuMGY7CisgICAgICAgIHNhbXBsZXJEZXNjLk1p
bkxPRCA9IGdsX2QzZDExOjpDb252ZXJ0TWluTE9EKHNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIsIHNh
bXBsZXJTdGF0ZS5sb2RPZmZzZXQpOworICAgICAgICBzYW1wbGVyRGVzYy5NYXhMT0QgPSBnbF9k
M2QxMTo6Q29udmVydE1heExPRChzYW1wbGVyU3RhdGUubWluRmlsdGVyLCBzYW1wbGVyU3RhdGUu
bG9kT2Zmc2V0KTsKKworICAgICAgICBJRDNEMTFTYW1wbGVyU3RhdGUgKmR4MTFTYW1wbGVyU3Rh
dGUgPSBOVUxMOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVNhbXBs
ZXJTdGF0ZSgmc2FtcGxlckRlc2MsICZkeDExU2FtcGxlclN0YXRlKTsKKyAgICAgICAgaWYgKEZB
SUxFRChyZXN1bHQpIHx8ICFkeDExU2FtcGxlclN0YXRlKQorICAgICAgICB7CisgICAgICAgICAg
ICBFUlIoIlVuYWJsZSB0byBjcmVhdGUgYSBJRDNEMTFEZXB0aFN0ZW5jaWxTdGF0ZSwgSFJFU1VM
VDogMHglWC4iLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0K
KworICAgICAgICBtU2FtcGxlclN0YXRlQ2FjaGUuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKHNhbXBs
ZXJTdGF0ZSwgc3RkOjptYWtlX3BhaXIoZHgxMVNhbXBsZXJTdGF0ZSwgbUNvdW50ZXIrKykpKTsK
KworICAgICAgICByZXR1cm4gZHgxMVNhbXBsZXJTdGF0ZTsKKyAgICB9Cit9CisKK30KXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclN0YXRlQ2FjaGUuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyU3Rh
dGVDYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0Yjg3MWE0YmQ4NTcxMTRhYjhhNzBjMGM3NTg5NWQwZTIx
MDgzNjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclN0YXRlQ2FjaGUuaApAQCAtMCwwICsxLDExMSBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUmVuZGVyU3RhdGVDYWNoZS5oOiBEZWZpbmVzIHJ4
OjpSZW5kZXJTdGF0ZUNhY2hlLCBhIGNhY2hlIG9mIERpcmVjdDNEIHJlbmRlcgorLy8gc3RhdGUg
b2JqZWN0cy4KKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSU1RBVEVDQUNIRV9I
XworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSU1RBVEVDQUNIRV9IXworCisjaW5j
bHVkZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGls
cy5oIgorCituYW1lc3BhY2UgZ2wKK3sKK2NsYXNzIEZyYW1lYnVmZmVyOworfQorCituYW1lc3Bh
Y2UgcngKK3sKKworY2xhc3MgUmVuZGVyU3RhdGVDYWNoZQoreworICBwdWJsaWM6CisgICAgUmVu
ZGVyU3RhdGVDYWNoZSgpOworICAgIHZpcnR1YWwgflJlbmRlclN0YXRlQ2FjaGUoKTsKKworICAg
IHZvaWQgaW5pdGlhbGl6ZShJRDNEMTFEZXZpY2UgKmRldmljZSk7CisgICAgdm9pZCBjbGVhcigp
OworCisgICAgLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiB0aGUgcmV0dXJuZWQgYmxlbmQgc3Rh
dGUsIFJlbGVhc2UoKSBtdXN0IGJlIGNhbGxlZC4KKyAgICBJRDNEMTFCbGVuZFN0YXRlICpnZXRC
bGVuZFN0YXRlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpCbGVuZFN0
YXRlICZibGVuZFN0YXRlKTsKKyAgICBJRDNEMTFSYXN0ZXJpemVyU3RhdGUgKmdldFJhc3Rlcml6
ZXJTdGF0ZShjb25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZyYXN0ZXJTdGF0ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNjaXNzb3JFbmFibGVk
LCB1bnNpZ25lZCBpbnQgZGVwdGhTaXplKTsKKyAgICBJRDNEMTFEZXB0aFN0ZW5jaWxTdGF0ZSAq
Z2V0RGVwdGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZkc1N0YXRl
KTsKKyAgICBJRDNEMTFTYW1wbGVyU3RhdGUgKmdldFNhbXBsZXJTdGF0ZShjb25zdCBnbDo6U2Ft
cGxlclN0YXRlICZzYW1wbGVyU3RhdGUpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKFJlbmRlclN0YXRlQ2FjaGUpOworCisgICAgdW5zaWduZWQgbG9uZyBsb25n
IG1Db3VudGVyOworCisgICAgLy8gQmxlbmQgc3RhdGUgY2FjaGUKKyAgICBzdHJ1Y3QgQmxlbmRT
dGF0ZUtleQorICAgIHsKKyAgICAgICAgZ2w6OkJsZW5kU3RhdGUgYmxlbmRTdGF0ZTsKKyAgICAg
ICAgYm9vbCBydENoYW5uZWxzW0QzRDExX1NJTVVMVEFORU9VU19SRU5ERVJfVEFSR0VUX0NPVU5U
XVs0XTsKKyAgICB9OworICAgIHN0YXRpYyBzdGQ6OnNpemVfdCBoYXNoQmxlbmRTdGF0ZShjb25z
dCBCbGVuZFN0YXRlS2V5ICZibGVuZFN0YXRlKTsKKyAgICBzdGF0aWMgYm9vbCBjb21wYXJlQmxl
bmRTdGF0ZXMoY29uc3QgQmxlbmRTdGF0ZUtleSAmYSwgY29uc3QgQmxlbmRTdGF0ZUtleSAmYik7
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBrTWF4QmxlbmRTdGF0ZXM7CisKKyAgICB0
eXBlZGVmIHN0ZDo6c2l6ZV90ICgqQmxlbmRTdGF0ZUhhc2hGdW5jdGlvbikoY29uc3QgQmxlbmRT
dGF0ZUtleSAmKTsKKyAgICB0eXBlZGVmIGJvb2wgKCpCbGVuZFN0YXRlRXF1YWxpdHlGdW5jdGlv
bikoY29uc3QgQmxlbmRTdGF0ZUtleSAmLCBjb25zdCBCbGVuZFN0YXRlS2V5ICYpOworICAgIHR5
cGVkZWYgc3RkOjpwYWlyPElEM0QxMUJsZW5kU3RhdGUqLCB1bnNpZ25lZCBsb25nIGxvbmc+IEJs
ZW5kU3RhdGVDb3VudGVyUGFpcjsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxCbGVu
ZFN0YXRlS2V5LCBCbGVuZFN0YXRlQ291bnRlclBhaXIsIEJsZW5kU3RhdGVIYXNoRnVuY3Rpb24s
IEJsZW5kU3RhdGVFcXVhbGl0eUZ1bmN0aW9uPiBCbGVuZFN0YXRlTWFwOworICAgIEJsZW5kU3Rh
dGVNYXAgbUJsZW5kU3RhdGVDYWNoZTsKKworICAgIC8vIFJhc3Rlcml6ZXIgc3RhdGUgY2FjaGUK
KyAgICBzdHJ1Y3QgUmFzdGVyaXplclN0YXRlS2V5CisgICAgeworICAgICAgICBnbDo6UmFzdGVy
aXplclN0YXRlIHJhc3Rlcml6ZXJTdGF0ZTsKKyAgICAgICAgYm9vbCBzY2lzc29yRW5hYmxlZDsK
KyAgICAgICAgdW5zaWduZWQgaW50IGRlcHRoU2l6ZTsKKyAgICB9OworICAgIHN0YXRpYyBzdGQ6
OnNpemVfdCBoYXNoUmFzdGVyaXplclN0YXRlKGNvbnN0IFJhc3Rlcml6ZXJTdGF0ZUtleSAmcmFz
dGVyU3RhdGUpOworICAgIHN0YXRpYyBib29sIGNvbXBhcmVSYXN0ZXJpemVyU3RhdGVzKGNvbnN0
IFJhc3Rlcml6ZXJTdGF0ZUtleSAmYSwgY29uc3QgUmFzdGVyaXplclN0YXRlS2V5ICZiKTsKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGtNYXhSYXN0ZXJpemVyU3RhdGVzOworCisgICAg
dHlwZWRlZiBzdGQ6OnNpemVfdCAoKlJhc3Rlcml6ZXJTdGF0ZUhhc2hGdW5jdGlvbikoY29uc3Qg
UmFzdGVyaXplclN0YXRlS2V5ICYpOworICAgIHR5cGVkZWYgYm9vbCAoKlJhc3Rlcml6ZXJTdGF0
ZUVxdWFsaXR5RnVuY3Rpb24pKGNvbnN0IFJhc3Rlcml6ZXJTdGF0ZUtleSAmLCBjb25zdCBSYXN0
ZXJpemVyU3RhdGVLZXkgJik7CisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8SUQzRDExUmFzdGVyaXpl
clN0YXRlKiwgdW5zaWduZWQgbG9uZyBsb25nPiBSYXN0ZXJpemVyU3RhdGVDb3VudGVyUGFpcjsK
KyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxSYXN0ZXJpemVyU3RhdGVLZXksIFJhc3Rl
cml6ZXJTdGF0ZUNvdW50ZXJQYWlyLCBSYXN0ZXJpemVyU3RhdGVIYXNoRnVuY3Rpb24sIFJhc3Rl
cml6ZXJTdGF0ZUVxdWFsaXR5RnVuY3Rpb24+IFJhc3Rlcml6ZXJTdGF0ZU1hcDsKKyAgICBSYXN0
ZXJpemVyU3RhdGVNYXAgbVJhc3Rlcml6ZXJTdGF0ZUNhY2hlOworCisgICAgLy8gRGVwdGggc3Rl
bmNpbCBzdGF0ZSBjYWNoZQorICAgIHN0YXRpYyBzdGQ6OnNpemVfdCBoYXNoRGVwdGhTdGVuY2ls
U3RhdGUoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZkc1N0YXRlKTsKKyAgICBzdGF0aWMg
Ym9vbCBjb21wYXJlRGVwdGhTdGVuY2lsU3RhdGVzKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0
ZSAmYSwgY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZiKTsKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgaW50IGtNYXhEZXB0aFN0ZW5jaWxTdGF0ZXM7CisKKyAgICB0eXBlZGVmIHN0ZDo6
c2l6ZV90ICgqRGVwdGhTdGVuY2lsU3RhdGVIYXNoRnVuY3Rpb24pKGNvbnN0IGdsOjpEZXB0aFN0
ZW5jaWxTdGF0ZSAmKTsKKyAgICB0eXBlZGVmIGJvb2wgKCpEZXB0aFN0ZW5jaWxTdGF0ZUVxdWFs
aXR5RnVuY3Rpb24pKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmLCBjb25zdCBnbDo6RGVw
dGhTdGVuY2lsU3RhdGUgJik7CisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8SUQzRDExRGVwdGhTdGVu
Y2lsU3RhdGUqLCB1bnNpZ25lZCBsb25nIGxvbmc+IERlcHRoU3RlbmNpbFN0YXRlQ291bnRlclBh
aXI7CisgICAgdHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8Z2w6OkRlcHRoU3RlbmNpbFN0YXRl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHRoU3RlbmNpbFN0YXRlQ291bnRl
clBhaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwdGhTdGVuY2lsU3RhdGVI
YXNoRnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwdGhTdGVuY2ls
U3RhdGVFcXVhbGl0eUZ1bmN0aW9uPiBEZXB0aFN0ZW5jaWxTdGF0ZU1hcDsKKyAgICBEZXB0aFN0
ZW5jaWxTdGF0ZU1hcCBtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZTsKKworICAgIC8vIFNhbXBsZSBz
dGF0ZSBjYWNoZQorICAgIHN0YXRpYyBzdGQ6OnNpemVfdCBoYXNoU2FtcGxlclN0YXRlKGNvbnN0
IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSk7CisgICAgc3RhdGljIGJvb2wgY29tcGFy
ZVNhbXBsZXJTdGF0ZXMoY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmYSwgY29uc3QgZ2w6OlNhbXBs
ZXJTdGF0ZSAmYik7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBrTWF4U2FtcGxlclN0
YXRlczsKKworICAgIHR5cGVkZWYgc3RkOjpzaXplX3QgKCpTYW1wbGVyU3RhdGVIYXNoRnVuY3Rp
b24pKGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJik7CisgICAgdHlwZWRlZiBib29sICgqU2FtcGxl
clN0YXRlRXF1YWxpdHlGdW5jdGlvbikoY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmLCBjb25zdCBn
bDo6U2FtcGxlclN0YXRlICYpOworICAgIHR5cGVkZWYgc3RkOjpwYWlyPElEM0QxMVNhbXBsZXJT
dGF0ZSosIHVuc2lnbmVkIGxvbmcgbG9uZz4gU2FtcGxlclN0YXRlQ291bnRlclBhaXI7CisgICAg
dHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8Z2w6OlNhbXBsZXJTdGF0ZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTYW1wbGVyU3RhdGVDb3VudGVyUGFpciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTYW1wbGVyU3RhdGVIYXNoRnVuY3Rpb24sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU2FtcGxlclN0YXRlRXF1YWxpdHlGdW5jdGlvbj4gU2FtcGxl
clN0YXRlTWFwOworICAgIFNhbXBsZXJTdGF0ZU1hcCBtU2FtcGxlclN0YXRlQ2FjaGU7CisKKyAg
ICBJRDNEMTFEZXZpY2UgKm1EZXZpY2U7Cit9OworCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJf
UkVOREVSRVJfUkVOREVSU1RBVEVDQUNIRV9IXwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkMTEvUmVuZGVyVGFyZ2V0MTEuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJUYXJnZXQxMS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MzcwNzA5N2FhNDU0NDk4YTA2MDA0ZWQ4NTU4MmVhOTNhOThjNjVlZgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
UmVuZGVyVGFyZ2V0MTEuY3BwCkBAIC0wLDAgKzEsMzU1IEBACisjaW5jbHVkZSAicHJlY29tcGls
ZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBSZW5kZXJUYXJnZXQxMS5jcHA6IEltcGxlbWVudHMg
YSBEWDExLXNwZWNpZmljIHdyYXBwZXIgZm9yIElEM0QxMVZpZXcgcG9pbnRlcnMKKy8vIHJldGFp
bmVkIGJ5IFJlbmRlcmJ1ZmZlcnMuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvUmVuZGVyVGFyZ2V0MTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
UmVuZGVyZXIxMS5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRl
cmVyMTFfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgorCituYW1lc3BhY2Ug
cngKK3sKKworc3RhdGljIHVuc2lnbmVkIGludCBnZXRSVFZTdWJyZXNvdXJjZUluZGV4KElEM0Qx
MVRleHR1cmUyRCAqdGV4dHVyZSwgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqdmlldykKK3sKKyAg
ICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOworICAgIHZpZXctPkdldERl
c2MoJnJ0dkRlc2MpOworCisgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4RGVzYzsKKyAgICB0
ZXh0dXJlLT5HZXREZXNjKCZ0ZXhEZXNjKTsKKworICAgIHVuc2lnbmVkIGludCBtaXBTbGljZSA9
IDA7CisgICAgdW5zaWduZWQgaW50IGFycmF5U2xpY2UgPSAwOworICAgIHVuc2lnbmVkIGludCBt
aXBMZXZlbHMgPSB0ZXhEZXNjLk1pcExldmVsczsKKworICAgIHN3aXRjaCAocnR2RGVzYy5WaWV3
RGltZW5zaW9uKQorICAgIHsKKyAgICAgIGNhc2UgRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJF
MUQ6CisgICAgICAgIG1pcFNsaWNlID0gcnR2RGVzYy5UZXh0dXJlMUQuTWlwU2xpY2U7CisgICAg
ICAgIGFycmF5U2xpY2UgPSAwOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBEM0QxMV9S
VFZfRElNRU5TSU9OX1RFWFRVUkUxREFSUkFZOgorICAgICAgICBtaXBTbGljZSA9IHJ0dkRlc2Mu
VGV4dHVyZTFEQXJyYXkuTWlwU2xpY2U7CisgICAgICAgIGFycmF5U2xpY2UgPSBydHZEZXNjLlRl
eHR1cmUxREFycmF5LkZpcnN0QXJyYXlTbGljZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNh
c2UgRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMkQ6CisgICAgICAgIG1pcFNsaWNlID0gcnR2
RGVzYy5UZXh0dXJlMkQuTWlwU2xpY2U7CisgICAgICAgIGFycmF5U2xpY2UgPSAwOworICAgICAg
ICBicmVhazsKKworICAgICAgY2FzZSBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyREFSUkFZ
OgorICAgICAgICBtaXBTbGljZSA9IHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlwU2xpY2U7Cisg
ICAgICAgIGFycmF5U2xpY2UgPSBydHZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlTbGlj
ZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhU
VVJFMkRNUzoKKyAgICAgICAgbWlwU2xpY2UgPSAwOworICAgICAgICBhcnJheVNsaWNlID0gMDsK
KyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJF
MkRNU0FSUkFZOgorICAgICAgICBtaXBTbGljZSA9IDA7CisgICAgICAgIGFycmF5U2xpY2UgPSBy
dHZEZXNjLlRleHR1cmUyRE1TQXJyYXkuRmlyc3RBcnJheVNsaWNlOworICAgICAgICBicmVhazsK
KworICAgICAgY2FzZSBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUzRDoKKyAgICAgICAgbWlw
U2xpY2UgPSBydHZEZXNjLlRleHR1cmUzRC5NaXBTbGljZTsKKyAgICAgICAgYXJyYXlTbGljZSA9
IDA7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEQzRDExX1JUVl9ESU1FTlNJT05fVU5L
Tk9XTjoKKyAgICAgIGNhc2UgRDNEMTFfUlRWX0RJTUVOU0lPTl9CVUZGRVI6CisgICAgICAgIFVO
SU1QTEVNRU5URUQoKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBEM0Qx
MUNhbGNTdWJyZXNvdXJjZShtaXBTbGljZSwgYXJyYXlTbGljZSwgbWlwTGV2ZWxzKTsKK30KKwor
c3RhdGljIHVuc2lnbmVkIGludCBnZXREU1ZTdWJyZXNvdXJjZUluZGV4KElEM0QxMVRleHR1cmUy
RCAqdGV4dHVyZSwgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqdmlldykKK3sKKyAgICBEM0QxMV9E
RVBUSF9TVEVOQ0lMX1ZJRVdfREVTQyBkc3ZEZXNjOworICAgIHZpZXctPkdldERlc2MoJmRzdkRl
c2MpOworCisgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4RGVzYzsKKyAgICB0ZXh0dXJlLT5H
ZXREZXNjKCZ0ZXhEZXNjKTsKKworICAgIHVuc2lnbmVkIGludCBtaXBTbGljZSA9IDA7CisgICAg
dW5zaWduZWQgaW50IGFycmF5U2xpY2UgPSAwOworICAgIHVuc2lnbmVkIGludCBtaXBMZXZlbHMg
PSB0ZXhEZXNjLk1pcExldmVsczsKKworICAgIHN3aXRjaCAoZHN2RGVzYy5WaWV3RGltZW5zaW9u
KQorICAgIHsKKyAgICAgIGNhc2UgRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMUQ6CisgICAg
ICAgIG1pcFNsaWNlID0gZHN2RGVzYy5UZXh0dXJlMUQuTWlwU2xpY2U7CisgICAgICAgIGFycmF5
U2xpY2UgPSAwOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBEM0QxMV9EU1ZfRElNRU5T
SU9OX1RFWFRVUkUxREFSUkFZOgorICAgICAgICBtaXBTbGljZSA9IGRzdkRlc2MuVGV4dHVyZTFE
QXJyYXkuTWlwU2xpY2U7CisgICAgICAgIGFycmF5U2xpY2UgPSBkc3ZEZXNjLlRleHR1cmUxREFy
cmF5LkZpcnN0QXJyYXlTbGljZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRDNEMTFf
RFNWX0RJTUVOU0lPTl9URVhUVVJFMkQ6CisgICAgICAgIG1pcFNsaWNlID0gZHN2RGVzYy5UZXh0
dXJlMkQuTWlwU2xpY2U7CisgICAgICAgIGFycmF5U2xpY2UgPSAwOworICAgICAgICBicmVhazsK
KworICAgICAgY2FzZSBEM0QxMV9EU1ZfRElNRU5TSU9OX1RFWFRVUkUyREFSUkFZOgorICAgICAg
ICBtaXBTbGljZSA9IGRzdkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlwU2xpY2U7CisgICAgICAgIGFy
cmF5U2xpY2UgPSBkc3ZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMkRNUzoK
KyAgICAgICAgbWlwU2xpY2UgPSAwOworICAgICAgICBhcnJheVNsaWNlID0gMDsKKyAgICAgICAg
YnJlYWs7CisKKyAgICAgIGNhc2UgRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMkRNU0FSUkFZ
OgorICAgICAgICBtaXBTbGljZSA9IDA7CisgICAgICAgIGFycmF5U2xpY2UgPSBkc3ZEZXNjLlRl
eHR1cmUyRE1TQXJyYXkuRmlyc3RBcnJheVNsaWNlOworICAgICAgICBicmVhazsKKworICAgICAg
Y2FzZSBEM0QxMV9SVFZfRElNRU5TSU9OX1VOS05PV046CisgICAgICAgIFVOSU1QTEVNRU5URUQo
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBEM0QxMUNhbGNTdWJyZXNv
dXJjZShtaXBTbGljZSwgYXJyYXlTbGljZSwgbWlwTGV2ZWxzKTsKK30KKworUmVuZGVyVGFyZ2V0
MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgSUQzRDExUmVuZGVyVGFyZ2V0
VmlldyAqcnR2LCBJRDNEMTFUZXh0dXJlMkQgKnRleCwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3
ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIG1SZW5kZXJlciA9
IFJlbmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKHJlbmRlcmVyKTsKKyAgICBtVGV4dHVyZSA9IHRl
eDsKKyAgICBtUmVuZGVyVGFyZ2V0ID0gcnR2OworICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwor
ICAgIG1TaGFkZXJSZXNvdXJjZSA9IHNydjsKKyAgICBtU3VicmVzb3VyY2VJbmRleCA9IDA7CisK
KyAgICBpZiAobVJlbmRlclRhcmdldCAmJiBtVGV4dHVyZSkKKyAgICB7CisgICAgICAgIEQzRDEx
X1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIGRlc2M7CisgICAgICAgIG1SZW5kZXJUYXJnZXQtPkdl
dERlc2MoJmRlc2MpOworCisgICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleERlc2M7Cisg
ICAgICAgIG1UZXh0dXJlLT5HZXREZXNjKCZ0ZXhEZXNjKTsKKworICAgICAgICBtU3VicmVzb3Vy
Y2VJbmRleCA9IGdldFJUVlN1YnJlc291cmNlSW5kZXgobVRleHR1cmUsIG1SZW5kZXJUYXJnZXQp
OworICAgICAgICBtV2lkdGggPSB3aWR0aDsKKyAgICAgICAgbUhlaWdodCA9IGhlaWdodDsKKyAg
ICAgICAgbVNhbXBsZXMgPSAodGV4RGVzYy5TYW1wbGVEZXNjLkNvdW50ID4gMSkgPyB0ZXhEZXNj
LlNhbXBsZURlc2MuQ291bnQgOiAwOworCisgICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGQzZDEx
X2dsOjpDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGRlc2MuRm9ybWF0KTsKKyAgICAgICAg
bUFjdHVhbEZvcm1hdCA9IGQzZDExX2dsOjpDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGRl
c2MuRm9ybWF0KTsKKyAgICB9Cit9CisKK1JlbmRlclRhcmdldDExOjpSZW5kZXJUYXJnZXQxMShS
ZW5kZXJlciAqcmVuZGVyZXIsIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKmRzdiwgSUQzRDExVGV4
dHVyZTJEICp0ZXgsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBtUmVuZGVyZXIgPSBSZW5kZXJlcjExOjptYWtlUmVu
ZGVyZXIxMShyZW5kZXJlcik7CisgICAgbVRleHR1cmUgPSB0ZXg7CisgICAgbVJlbmRlclRhcmdl
dCA9IE5VTEw7CisgICAgbURlcHRoU3RlbmNpbCA9IGRzdjsKKyAgICBtU2hhZGVyUmVzb3VyY2Ug
PSBzcnY7CisgICAgbVN1YnJlc291cmNlSW5kZXggPSAwOworCisgICAgaWYgKG1EZXB0aFN0ZW5j
aWwgJiYgbVRleHR1cmUpCisgICAgeworICAgICAgICBEM0QxMV9ERVBUSF9TVEVOQ0lMX1ZJRVdf
REVTQyBkZXNjOworICAgICAgICBtRGVwdGhTdGVuY2lsLT5HZXREZXNjKCZkZXNjKTsKKworICAg
ICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyB0ZXhEZXNjOworICAgICAgICBtVGV4dHVyZS0+R2V0
RGVzYygmdGV4RGVzYyk7CisKKyAgICAgICAgbVN1YnJlc291cmNlSW5kZXggPSBnZXREU1ZTdWJy
ZXNvdXJjZUluZGV4KG1UZXh0dXJlLCBtRGVwdGhTdGVuY2lsKTsKKyAgICAgICAgbVdpZHRoID0g
d2lkdGg7CisgICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIG1TYW1wbGVzID0gKHRl
eERlc2MuU2FtcGxlRGVzYy5Db3VudCA+IDEpID8gdGV4RGVzYy5TYW1wbGVEZXNjLkNvdW50IDog
MDsKKworICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVydFRleHR1cmVJ
bnRlcm5hbEZvcm1hdChkZXNjLkZvcm1hdCk7CisgICAgICAgIG1BY3R1YWxGb3JtYXQgPSBkM2Qx
MV9nbDo6Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChkZXNjLkZvcm1hdCk7CisgICAgfQor
fQorCitSZW5kZXJUYXJnZXQxMTo6UmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1w
bGVzLCBib29sIGRlcHRoKQoreworICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyMTE6Om1ha2VSZW5k
ZXJlcjExKHJlbmRlcmVyKTsKKyAgICBtVGV4dHVyZSA9IE5VTEw7CisgICAgbVJlbmRlclRhcmdl
dCA9IE5VTEw7CisgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7CisgICAgbVNoYWRlclJlc291cmNl
ID0gTlVMTDsKKworICAgIERYR0lfRk9STUFUIHJlcXVlc3RlZEZvcm1hdCA9IGdsX2QzZDExOjpD
b252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KGZvcm1hdCk7CisKKyAgICBpbnQgc3VwcG9ydGVkU2Ft
cGxlcyA9IG1SZW5kZXJlci0+Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMocmVxdWVzdGVkRm9y
bWF0LCBzYW1wbGVzKTsKKyAgICBpZiAoc3VwcG9ydGVkU2FtcGxlcyA8IDApCisgICAgeworICAg
ICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApCisgICAgeworICAgICAgICAvLyBD
cmVhdGUgdGV4dHVyZSByZXNvdXJjZQorICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXNj
OworICAgICAgICBkZXNjLldpZHRoID0gd2lkdGg7IAorICAgICAgICBkZXNjLkhlaWdodCA9IGhl
aWdodDsKKyAgICAgICAgZGVzYy5NaXBMZXZlbHMgPSAxOworICAgICAgICBkZXNjLkFycmF5U2l6
ZSA9IDE7CisgICAgICAgIGRlc2MuRm9ybWF0ID0gcmVxdWVzdGVkRm9ybWF0OworICAgICAgICBk
ZXNjLlNhbXBsZURlc2MuQ291bnQgPSAoc3VwcG9ydGVkU2FtcGxlcyA9PSAwKSA/IDEgOiBzdXBw
b3J0ZWRTYW1wbGVzOworICAgICAgICBkZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7CisgICAg
ICAgIGRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBkZXNjLkNQVUFj
Y2Vzc0ZsYWdzID0gMDsKKyAgICAgICAgZGVzYy5NaXNjRmxhZ3MgPSAwOworICAgICAgICBkZXNj
LkJpbmRGbGFncyA9IChkZXB0aCA/IEQzRDExX0JJTkRfREVQVEhfU1RFTkNJTCA6IChEM0QxMV9C
SU5EX1JFTkRFUl9UQVJHRVQgfCBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRSkpOworCisgICAg
ICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICAg
ICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwg
Jm1UZXh0dXJlKTsKKworICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkp
OworCisgICAgICAgIGlmIChkZXB0aCkKKyAgICAgICAgeworICAgICAgICAgICAgRDNEMTFfREVQ
VEhfU1RFTkNJTF9WSUVXX0RFU0MgZHN2RGVzYzsKKyAgICAgICAgICAgIGRzdkRlc2MuRm9ybWF0
ID0gcmVxdWVzdGVkRm9ybWF0OworICAgICAgICAgICAgZHN2RGVzYy5WaWV3RGltZW5zaW9uID0g
KHN1cHBvcnRlZFNhbXBsZXMgPT0gMCkgPyBEM0QxMV9EU1ZfRElNRU5TSU9OX1RFWFRVUkUyRCA6
IEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTJETVM7CisgICAgICAgICAgICBkc3ZEZXNjLlRl
eHR1cmUyRC5NaXBTbGljZSA9IDA7CisgICAgICAgICAgICBkc3ZEZXNjLkZsYWdzID0gMDsKKyAg
ICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsVmlldyhtVGV4dHVy
ZSwgJmRzdkRlc2MsICZtRGVwdGhTdGVuY2lsKTsKKworICAgICAgICAgICAgaWYgKHJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1UZXh0dXJl
LT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgbVRleHR1cmUgPSBOVUxMOworICAgICAgICAg
ICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICB7CisgICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBy
dHZEZXNjOworICAgICAgICAgICAgcnR2RGVzYy5Gb3JtYXQgPSByZXF1ZXN0ZWRGb3JtYXQ7Cisg
ICAgICAgICAgICBydHZEZXNjLlZpZXdEaW1lbnNpb24gPSAoc3VwcG9ydGVkU2FtcGxlcyA9PSAw
KSA/IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJEIDogRDNEMTFfUlRWX0RJTUVOU0lPTl9U
RVhUVVJFMkRNUzsKKyAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJELk1pcFNsaWNlID0gMDsK
KyAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0VmlldyhtVGV4
dHVyZSwgJnJ0dkRlc2MsICZtUmVuZGVyVGFyZ2V0KTsKKworICAgICAgICAgICAgaWYgKHJlc3Vs
dCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1UZXh0
dXJlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgbVRleHR1cmUgPSBOVUxMOworICAgICAg
ICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOworCisgICAgICAgICAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIHNydkRl
c2M7CisgICAgICAgICAgICBzcnZEZXNjLkZvcm1hdCA9IHJlcXVlc3RlZEZvcm1hdDsKKyAgICAg
ICAgICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IChzdXBwb3J0ZWRTYW1wbGVzID09IDApID8g
RDNEMTFfU1JWX0RJTUVOU0lPTl9URVhUVVJFMkQgOiBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRV
UkUyRE1TOworICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkQuTW9zdERldGFpbGVkTWlwID0g
MDsKKyAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJELk1pcExldmVscyA9IDE7CisgICAgICAg
ICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyhtVGV4dHVyZSwg
JnNydkRlc2MsICZtU2hhZGVyUmVzb3VyY2UpOworCisgICAgICAgICAgICBpZiAocmVzdWx0ID09
IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVRleHR1cmUt
PlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICBtVGV4dHVyZSA9IE5VTEw7CisgICAgICAgICAg
ICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgIG1SZW5kZXJU
YXJnZXQgPSBOVUxMOworICAgICAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICB9CisgICAgfQorCisgICAgbVdpZHRo
ID0gd2lkdGg7CisgICAgbUhlaWdodCA9IGhlaWdodDsKKyAgICBtSW50ZXJuYWxGb3JtYXQgPSBm
b3JtYXQ7CisgICAgbVNhbXBsZXMgPSBzdXBwb3J0ZWRTYW1wbGVzOworICAgIG1BY3R1YWxGb3Jt
YXQgPSBkM2QxMV9nbDo6Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChyZXF1ZXN0ZWRGb3Jt
YXQpOworICAgIG1TdWJyZXNvdXJjZUluZGV4ID0gRDNEMTFDYWxjU3VicmVzb3VyY2UoMCwgMCwg
MSk7Cit9CisKK1JlbmRlclRhcmdldDExOjp+UmVuZGVyVGFyZ2V0MTEoKQoreworICAgIGlmICht
VGV4dHVyZSkKKyAgICB7CisgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgIG1U
ZXh0dXJlID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAobVJlbmRlclRhcmdldCkKKyAgICB7Cisg
ICAgICAgIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKKyAgICAgICAgbVJlbmRlclRhcmdldCA9
IE5VTEw7CisgICAgfQorCisgICAgaWYgKG1EZXB0aFN0ZW5jaWwpCisgICAgeworICAgICAgICBt
RGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CisgICAgICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwor
ICAgIH0KKworICAgIGlmIChtU2hhZGVyUmVzb3VyY2UpCisgICAgeworICAgICAgICBtU2hhZGVy
UmVzb3VyY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgbVNoYWRlclJlc291cmNlID0gTlVMTDsKKyAg
ICB9Cit9CisKK1JlbmRlclRhcmdldDExICpSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdl
dDExKFJlbmRlclRhcmdldCAqdGFyZ2V0KQoreworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBF
KHJ4OjpSZW5kZXJUYXJnZXQxMSosIHRhcmdldCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxy
eDo6UmVuZGVyVGFyZ2V0MTEqPih0YXJnZXQpOworfQorCitJRDNEMTFUZXh0dXJlMkQgKlJlbmRl
clRhcmdldDExOjpnZXRUZXh0dXJlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmU7Cit9
CisKK0lEM0QxMVJlbmRlclRhcmdldFZpZXcgKlJlbmRlclRhcmdldDExOjpnZXRSZW5kZXJUYXJn
ZXRWaWV3KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVJlbmRlclRhcmdldDsKK30KKworSUQzRDEx
RGVwdGhTdGVuY2lsVmlldyAqUmVuZGVyVGFyZ2V0MTE6OmdldERlcHRoU3RlbmNpbFZpZXcoKSBj
b25zdAoreworICAgIHJldHVybiBtRGVwdGhTdGVuY2lsOworfQorCitJRDNEMTFTaGFkZXJSZXNv
dXJjZVZpZXcgKlJlbmRlclRhcmdldDExOjpnZXRTaGFkZXJSZXNvdXJjZVZpZXcoKSBjb25zdAor
eworICAgIHJldHVybiBtU2hhZGVyUmVzb3VyY2U7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJU
YXJnZXQxMTo6Z2V0U3VicmVzb3VyY2VJbmRleCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdWJy
ZXNvdXJjZUluZGV4OworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclRhcmdldDExLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclRhcmdl
dDExLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOTc4MjdmMjYzOTcwNzI5NDI4NGEyY2NkMzQ4MWM5N2JlZGU4OWIw
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFyZ2V0MTEuaApAQCAtMCwwICsxLDUxIEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworLy8gUmVuZGVyVGFyZ2V0MTEuaDogRGVmaW5lcyBhIERYMTEtc3BlY2lmaWMg
d3JhcHBlciBmb3IgSUQzRDExVmlldyBwb2ludGVycworLy8gcmV0YWluZWQgYnkgUmVuZGVyYnVm
ZmVycy4KKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSVEFSR0VUMTFfSF8KKyNk
ZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUlRBUkdFVDExX0hfCisKKyNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0LmgiCisKK25hbWVzcGFjZSByeAoreworY2xh
c3MgUmVuZGVyZXI7CitjbGFzcyBSZW5kZXJlcjExOworCitjbGFzcyBSZW5kZXJUYXJnZXQxMSA6
IHB1YmxpYyBSZW5kZXJUYXJnZXQKK3sKKyAgcHVibGljOgorICAgIFJlbmRlclRhcmdldDExKFJl
bmRlcmVyICpyZW5kZXJlciwgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqcnR2LCBJRDNEMTFUZXh0
dXJlMkQgKnRleCwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICBSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIs
IElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKmRzdiwgSUQzRDExVGV4dHVyZTJEICp0ZXgsIElEM0Qx
MVNoYWRlclJlc291cmNlVmlldyAqc3J2LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7
CisgICAgUmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzLCBib29sIGRlcHRo
KTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJUYXJnZXQxMSgpOworCisgICAgc3RhdGljIFJlbmRlclRh
cmdldDExICptYWtlUmVuZGVyVGFyZ2V0MTEoUmVuZGVyVGFyZ2V0ICpyZW5kZXJUYXJnZXQpOwor
CisgICAgSUQzRDExVGV4dHVyZTJEICpnZXRUZXh0dXJlKCkgY29uc3Q7CisgICAgSUQzRDExUmVu
ZGVyVGFyZ2V0VmlldyAqZ2V0UmVuZGVyVGFyZ2V0VmlldygpIGNvbnN0OworICAgIElEM0QxMURl
cHRoU3RlbmNpbFZpZXcgKmdldERlcHRoU3RlbmNpbFZpZXcoKSBjb25zdDsKKyAgICBJRDNEMTFT
aGFkZXJSZXNvdXJjZVZpZXcgKmdldFNoYWRlclJlc291cmNlVmlldygpIGNvbnN0OworCisgICAg
dW5zaWduZWQgaW50IGdldFN1YnJlc291cmNlSW5kZXgoKSBjb25zdDsKKworICBwcml2YXRlOgor
ICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJUYXJnZXQxMSk7CisKKyAgICB1bnNp
Z25lZCBpbnQgbVN1YnJlc291cmNlSW5kZXg7CisgICAgSUQzRDExVGV4dHVyZTJEICptVGV4dHVy
ZTsKKyAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICptUmVuZGVyVGFyZ2V0OworICAgIElEM0Qx
MURlcHRoU3RlbmNpbFZpZXcgKm1EZXB0aFN0ZW5jaWw7CisgICAgSUQzRDExU2hhZGVyUmVzb3Vy
Y2VWaWV3ICptU2hhZGVyUmVzb3VyY2U7CisKKyAgICBSZW5kZXJlcjExICptUmVuZGVyZXI7Cit9
OworCit9CisKKyNlbmRpZiBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSVEFSR0VUMTFfSF8KXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjEx
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi43MjJmMGM1YTQ1NTNkODA1MzBhZDdlZDliOGI1NzQ1ODU1ZTVlMjAw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmNwcApAQCAtMCwwICsxLDM2MjMgQEAKKyNpbmNs
dWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUmVuZGVyZXIxMS5j
cHA6IEltcGxlbWVudHMgYSBiYWNrLWVuZCBzcGVjaWZpYyBjbGFzcyBmb3IgdGhlIEQzRDExIHJl
bmRlcmVyLgorCisjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVm
ZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL1JlbmRlclRhcmdldDExLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvU2hhZGVyRXhlY3V0YWJsZTExLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL1N3YXBDaGFpbjExLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL0ltYWdlMTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVy
dGV4QnVmZmVyMTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5kZXhC
dWZmZXIxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9CdWZmZXJTdG9y
YWdlMTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGF0YU1hbmFnZXIu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhEYXRhTWFuYWdlci5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9UZXh0dXJlU3RvcmFnZTExLmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1F1ZXJ5MTEuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZDNkMTEvRmVuY2UxMS5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2gxMXZzLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hy
Z2JhMTFwcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2Nv
bXBpbGVkL3Bhc3N0aHJvdWdocmdiMTFwcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdobHVtMTFwcy5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdobHVt
YWxwaGExMXBzLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVy
cy9jb21waWxlZC9jbGVhcjExdnMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvc2hhZGVycy9jb21waWxlZC9jbGVhcnNpbmdsZTExcHMuaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcm11bHRpcGxlMTFwcy5oIgor
CisjaW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIKKworLy8gRW5hYmxlIEFOR0xFX1NLSVBfRFhH
SV8xXzJfQ0hFQ0sgaWYgdGhlcmUgaXMgbm90IGEgcG9zc2liaWxpdHkgb2YgdXNpbmcgY3Jvc3Mt
cHJvY2VzcworLy8gSFdORHMgb3IgdGhlIFdpbmRvd3MgNyBQbGF0Zm9ybSBVcGRhdGUgKEtCMjY3
MDgzOCkgaXMgZXhwZWN0ZWQgdG8gYmUgaW5zdGFsbGVkLgorI2lmbmRlZiBBTkdMRV9TS0lQX0RY
R0lfMV8yX0NIRUNLCisjZGVmaW5lIEFOR0xFX1NLSVBfRFhHSV8xXzJfQ0hFQ0sgMAorI2VuZGlm
CisKKyNpZmRlZiBfREVCVUcKKy8vIHRoaXMgZmxhZyBlbmFibGVzIHN1cHByZXNzaW5nIHNvbWUg
c3B1cmlvdXMgd2FybmluZ3MgdGhhdCBwb3AgdXAgaW4gY2VydGFpbiBXZWJHTCBzYW1wbGVzCisv
LyBhbmQgY29uZm9ybWFuY2UgdGVzdHMuIHRvIGVuYWJsZSBhbGwgd2FybmluZ3MsIHJlbW92ZSB0
aGlzIGRlZmluZS4KKyNkZWZpbmUgQU5HTEVfU1VQUFJFU1NfRDNEMTFfSEFaQVJEX1dBUk5JTkdT
IDEKKyNlbmRpZgorCituYW1lc3BhY2UgcngKK3sKK3N0YXRpYyBjb25zdCBEWEdJX0ZPUk1BVCBS
ZW5kZXJUYXJnZXRGb3JtYXRzW10gPQorICAgIHsKKyAgICAgICAgRFhHSV9GT1JNQVRfQjhHOFI4
QThfVU5PUk0sCisgICAgICAgIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNCisgICAgfTsKKwor
c3RhdGljIGNvbnN0IERYR0lfRk9STUFUIERlcHRoU3RlbmNpbEZvcm1hdHNbXSA9CisgICAgewor
ICAgICAgICBEWEdJX0ZPUk1BVF9VTktOT1dOLAorICAgICAgICBEWEdJX0ZPUk1BVF9EMjRfVU5P
Uk1fUzhfVUlOVCwKKyAgICAgICAgRFhHSV9GT1JNQVRfRDE2X1VOT1JNCisgICAgfTsKKworZW51
bQoreworICAgIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl9TTTQgPSAxNgorfTsKKworUmVu
ZGVyZXIxMTo6UmVuZGVyZXIxMShlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIEhEQyBoRGMpIDogUmVu
ZGVyZXIoZGlzcGxheSksIG1EYyhoRGMpCit7CisgICAgbVZlcnRleERhdGFNYW5hZ2VyID0gTlVM
TDsKKyAgICBtSW5kZXhEYXRhTWFuYWdlciA9IE5VTEw7CisKKyAgICBtTGluZUxvb3BJQiA9IE5V
TEw7CisgICAgbVRyaWFuZ2xlRmFuSUIgPSBOVUxMOworCisgICAgbUNvcHlSZXNvdXJjZXNJbml0
aWFsaXplZCA9IGZhbHNlOworICAgIG1Db3B5VkIgPSBOVUxMOworICAgIG1Db3B5U2FtcGxlciA9
IE5VTEw7CisgICAgbUNvcHlJTCA9IE5VTEw7CisgICAgbUNvcHlWUyA9IE5VTEw7CisgICAgbUNv
cHlSR0JBUFMgPSBOVUxMOworICAgIG1Db3B5UkdCUFMgPSBOVUxMOworICAgIG1Db3B5THVtUFMg
PSBOVUxMOworICAgIG1Db3B5THVtQWxwaGFQUyA9IE5VTEw7CisKKyAgICBtQ2xlYXJSZXNvdXJj
ZXNJbml0aWFsaXplZCA9IGZhbHNlOworICAgIG1DbGVhclZCID0gTlVMTDsKKyAgICBtQ2xlYXJJ
TCA9IE5VTEw7CisgICAgbUNsZWFyVlMgPSBOVUxMOworICAgIG1DbGVhclNpbmdsZVBTID0gTlVM
TDsKKyAgICBtQ2xlYXJNdWx0aXBsZVBTID0gTlVMTDsKKyAgICBtQ2xlYXJTY2lzc29yUlMgPSBO
VUxMOworICAgIG1DbGVhck5vU2Npc3NvclJTID0gTlVMTDsKKworICAgIG1TeW5jUXVlcnkgPSBO
VUxMOworCisgICAgbUQzZDExTW9kdWxlID0gTlVMTDsKKyAgICBtRHhnaU1vZHVsZSA9IE5VTEw7
CisKKyAgICBtRGV2aWNlTG9zdCA9IGZhbHNlOworCisgICAgbU1heFN1cHBvcnRlZFNhbXBsZXMg
PSAwOworCisgICAgbURldmljZSA9IE5VTEw7CisgICAgbURldmljZUNvbnRleHQgPSBOVUxMOwor
ICAgIG1EeGdpQWRhcHRlciA9IE5VTEw7CisgICAgbUR4Z2lGYWN0b3J5ID0gTlVMTDsKKworICAg
IG1Ecml2ZXJDb25zdGFudEJ1ZmZlclZTID0gTlVMTDsKKyAgICBtRHJpdmVyQ29uc3RhbnRCdWZm
ZXJQUyA9IE5VTEw7CisKKyAgICBtQkdSQVRleHR1cmVTdXBwb3J0ID0gZmFsc2U7CisKKyAgICBt
SXNHZW9tZXRyeVNoYWRlckFjdGl2ZSA9IGZhbHNlOworfQorCitSZW5kZXJlcjExOjp+UmVuZGVy
ZXIxMSgpCit7CisgICAgcmVsZWFzZSgpOworfQorCitSZW5kZXJlcjExICpSZW5kZXJlcjExOjpt
YWtlUmVuZGVyZXIxMShSZW5kZXJlciAqcmVuZGVyZXIpCit7CisgICAgQVNTRVJUKEhBU19EWU5B
TUlDX1RZUEUocng6OlJlbmRlcmVyMTEqLCByZW5kZXJlcikpOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxyeDo6UmVuZGVyZXIxMSo+KHJlbmRlcmVyKTsKK30KKworI2lmbmRlZiBfX2QzZDExXzFf
aF9fCisjZGVmaW5lIEQzRDExX01FU1NBR0VfSURfREVWSUNFX0RSQVdfUkVOREVSVEFSR0VUVklF
V19OT1RfU0VUICgoRDNEMTFfTUVTU0FHRV9JRCkzMTQ2MDgxKQorI2VuZGlmCisKK0VHTGludCBS
ZW5kZXJlcjExOjppbml0aWFsaXplKCkKK3sKKyAgICBpZiAoIWluaXRpYWxpemVDb21waWxlcigp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7CisgICAgfQorCisg
ICAgbUR4Z2lNb2R1bGUgPSBMb2FkTGlicmFyeShURVhUKCJkeGdpLmRsbCIpKTsKKyAgICBtRDNk
MTFNb2R1bGUgPSBMb2FkTGlicmFyeShURVhUKCJkM2QxMS5kbGwiKSk7CisKKyAgICBpZiAobUQz
ZDExTW9kdWxlID09IE5VTEwgfHwgbUR4Z2lNb2R1bGUgPT0gTlVMTCkKKyAgICB7CisgICAgICAg
IEVSUigiQ291bGQgbm90IGxvYWQgRDNEMTEgb3IgRFhHSSBsaWJyYXJ5IC0gYWJvcnRpbmchXG4i
KTsKKyAgICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7CisgICAgfQorCisgICAgLy8g
Y3JlYXRlIHRoZSBEM0QxMSBkZXZpY2UKKyAgICBBU1NFUlQobURldmljZSA9PSBOVUxMKTsKKyAg
ICBQRk5fRDNEMTFfQ1JFQVRFX0RFVklDRSBEM0QxMUNyZWF0ZURldmljZSA9IChQRk5fRDNEMTFf
Q1JFQVRFX0RFVklDRSlHZXRQcm9jQWRkcmVzcyhtRDNkMTFNb2R1bGUsICJEM0QxMUNyZWF0ZURl
dmljZSIpOworCisgICAgaWYgKEQzRDExQ3JlYXRlRGV2aWNlID09IE5VTEwpCisgICAgeworICAg
ICAgICBFUlIoIkNvdWxkIG5vdCByZXRyaWV2ZSBEM0QxMUNyZWF0ZURldmljZSBhZGRyZXNzIC0g
YWJvcnRpbmchXG4iKTsKKyAgICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7CisgICAg
fQorCisgICAgRDNEX0ZFQVRVUkVfTEVWRUwgZmVhdHVyZUxldmVsc1tdID0KKyAgICB7CisgICAg
ICAgIEQzRF9GRUFUVVJFX0xFVkVMXzExXzAsCisgICAgICAgIEQzRF9GRUFUVVJFX0xFVkVMXzEw
XzEsCisgICAgICAgIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzAsCisgICAgfTsKKworICAgIEhSRVNV
TFQgcmVzdWx0ID0gU19PSzsKKworI2lmZGVmIF9ERUJVRworICAgIHJlc3VsdCA9IEQzRDExQ3Jl
YXRlRGV2aWNlKE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEX0RSSVZF
Ul9UWVBFX0hBUkRXQVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEMTFfQ1JFQVRFX0RFVklDRV9ERUJVRywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlTGV2ZWxzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFycmF5U2l6ZShmZWF0dXJlTGV2ZWxzKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBEM0QxMV9TREtfVkVSU0lPTiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmbURldmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmbUZlYXR1cmVMZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbURldmlj
ZUNvbnRleHQpOworCisgICAgaWYgKCFtRGV2aWNlIHx8IEZBSUxFRChyZXN1bHQpKQorICAgIHsK
KyAgICAgICAgRVJSKCJGYWlsZWQgY3JlYXRpbmcgRGVidWcgRDNEMTEgZGV2aWNlIC0gZmFsbGlu
ZyBiYWNrIHRvIHJlbGVhc2UgcnVudGltZS5cbiIpOworICAgIH0KKworICAgIGlmICghbURldmlj
ZSB8fCBGQUlMRUQocmVzdWx0KSkKKyNlbmRpZgorICAgIHsKKyAgICAgICAgcmVzdWx0ID0gRDNE
MTFDcmVhdGVEZXZpY2UoTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RDNEX0RSSVZFUl9UWVBFX0hBUkRXQVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlTGV2ZWxzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBcnJheVNpemUoZmVhdHVyZUxldmVscyksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRDExX1NES19WRVJTSU9OLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmbURldmljZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJm1GZWF0dXJlTGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZtRGV2aWNlQ29udGV4dCk7CisKKyAgICAgICAgaWYgKCFtRGV2aWNlIHx8IEZB
SUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVh
dGUgRDNEMTEgZGV2aWNlIC0gYWJvcnRpbmchXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBFR0xf
Tk9UX0lOSVRJQUxJWkVEOyAgIC8vIENsZWFudXAgZG9uZSBieSBkZXN0cnVjdG9yIHRocm91Z2gg
Z2xEZXN0cm95UmVuZGVyZXIKKyAgICAgICAgfQorICAgIH0KKworI2lmICFBTkdMRV9TS0lQX0RY
R0lfMV8yX0NIRUNLCisgICAgLy8gSW4gb3JkZXIgdG8gY3JlYXRlIGEgc3dhcCBjaGFpbiBmb3Ig
YW4gSFdORCBvd25lZCBieSBhbm90aGVyIHByb2Nlc3MsIERYR0kgMS4yIGlzIHJlcXVpcmVkLgor
ICAgIC8vIFRoZSBlYXNpZXN0IHdheSB0byBjaGVjayBpcyB0byBxdWVyeSBmb3IgYSBJRFhHSURl
dmljZTIuCisgICAgYm9vbCByZXF1aXJlRFhHSTFfMiA9IGZhbHNlOworICAgIEhXTkQgaHduZCA9
IFdpbmRvd0Zyb21EQyhtRGMpOworICAgIGlmIChod25kKQorICAgIHsKKyAgICAgICAgRFdPUkQg
Y3VycmVudFByb2Nlc3NJZCA9IEdldEN1cnJlbnRQcm9jZXNzSWQoKTsKKyAgICAgICAgRFdPUkQg
d25kUHJvY2Vzc0lkOworICAgICAgICBHZXRXaW5kb3dUaHJlYWRQcm9jZXNzSWQoaHduZCwgJndu
ZFByb2Nlc3NJZCk7CisgICAgICAgIHJlcXVpcmVEWEdJMV8yID0gKGN1cnJlbnRQcm9jZXNzSWQg
IT0gd25kUHJvY2Vzc0lkKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmVxdWly
ZURYR0kxXzIgPSB0cnVlOworICAgIH0KKworICAgIGlmIChyZXF1aXJlRFhHSTFfMikKKyAgICB7
CisgICAgICAgIElEWEdJRGV2aWNlMiAqZHhnaURldmljZTIgPSBOVUxMOworICAgICAgICByZXN1
bHQgPSBtRGV2aWNlLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRFhHSURldmljZTIpLCAodm9p
ZCoqKSZkeGdpRGV2aWNlMik7CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAg
eworICAgICAgICAgICAgRVJSKCJEWEdJIDEuMiByZXF1aXJlZCB0byBwcmVzZW50IHRvIEhXTkRz
IG93bmVkIGJ5IGFub3RoZXIgcHJvY2Vzcy5cbiIpOworICAgICAgICAgICAgcmV0dXJuIEVHTF9O
T1RfSU5JVElBTElaRUQ7CisgICAgICAgIH0KKyAgICAgICAgU2FmZVJlbGVhc2UoZHhnaURldmlj
ZTIpOworICAgIH0KKyNlbmRpZgorCisgICAgSURYR0lEZXZpY2UgKmR4Z2lEZXZpY2UgPSBOVUxM
OworICAgIHJlc3VsdCA9IG1EZXZpY2UtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEWEdJRGV2
aWNlKSwgKHZvaWQqKikmZHhnaURldmljZSk7CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisg
ICAgeworICAgICAgICBFUlIoIkNvdWxkIG5vdCBxdWVyeSBEWEdJIGRldmljZSAtIGFib3J0aW5n
IVxuIik7CisgICAgICAgIHJldHVybiBFR0xfTk9UX0lOSVRJQUxJWkVEOworICAgIH0KKworICAg
IHJlc3VsdCA9IGR4Z2lEZXZpY2UtPkdldFBhcmVudChfX3V1aWRvZihJRFhHSUFkYXB0ZXIpLCAo
dm9pZCoqKSZtRHhnaUFkYXB0ZXIpOworCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsK
KyAgICAgICAgRVJSKCJDb3VsZCBub3QgcmV0cmlldmUgRFhHSSBhZGFwdGVyIC0gYWJvcnRpbmch
XG4iKTsKKyAgICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7CisgICAgfQorCisgICAg
ZHhnaURldmljZS0+UmVsZWFzZSgpOworCisgICAgbUR4Z2lBZGFwdGVyLT5HZXREZXNjKCZtQWRh
cHRlckRlc2NyaXB0aW9uKTsKKyAgICBtZW1zZXQobURlc2NyaXB0aW9uLCAwLCBzaXplb2YobURl
c2NyaXB0aW9uKSk7CisgICAgd2NzdG9tYnMobURlc2NyaXB0aW9uLCBtQWRhcHRlckRlc2NyaXB0
aW9uLkRlc2NyaXB0aW9uLCBzaXplb2YobURlc2NyaXB0aW9uKSAtIDEpOworCisgICAgcmVzdWx0
ID0gbUR4Z2lBZGFwdGVyLT5HZXRQYXJlbnQoX191dWlkb2YoSURYR0lGYWN0b3J5KSwgKHZvaWQq
KikmbUR4Z2lGYWN0b3J5KTsKKworICAgIGlmICghbUR4Z2lGYWN0b3J5IHx8IEZBSUxFRChyZXN1
bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIERYR0kgZmFjdG9yeSAt
IGFib3J0aW5nIVxuIik7CisgICAgICAgIHJldHVybiBFR0xfTk9UX0lOSVRJQUxJWkVEOworICAg
IH0KKworICAgIC8vIERpc2FibGUgc29tZSBzcHVyaW91cyBEM0QxMSBkZWJ1ZyB3YXJuaW5ncyB0
byBwcmV2ZW50IHRoZW0gZnJvbSBmbG9vZGluZyB0aGUgb3V0cHV0IGxvZworI2lmIGRlZmluZWQo
QU5HTEVfU1VQUFJFU1NfRDNEMTFfSEFaQVJEX1dBUk5JTkdTKSAmJiBkZWZpbmVkKF9ERUJVRykK
KyAgICBJRDNEMTFJbmZvUXVldWUgKmluZm9RdWV1ZTsKKyAgICByZXN1bHQgPSBtRGV2aWNlLT5R
dWVyeUludGVyZmFjZShfX3V1aWRvZihJRDNEMTFJbmZvUXVldWUpLCAgKHZvaWQgKiopJmluZm9R
dWV1ZSk7CisKKyAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBEM0Qx
MV9NRVNTQUdFX0lEIGhpZGVNZXNzYWdlc1tdID0KKyAgICAgICAgeworICAgICAgICAgICAgRDNE
MTFfTUVTU0FHRV9JRF9ERVZJQ0VfRFJBV19SRU5ERVJUQVJHRVRWSUVXX05PVF9TRVQKKyAgICAg
ICAgfTsKKworICAgICAgICBEM0QxMV9JTkZPX1FVRVVFX0ZJTFRFUiBmaWx0ZXIgPSB7MH07Cisg
ICAgICAgIGZpbHRlci5EZW55TGlzdC5OdW1JRHMgPSBBcnJheVNpemUoaGlkZU1lc3NhZ2VzKTsK
KyAgICAgICAgZmlsdGVyLkRlbnlMaXN0LnBJRExpc3QgPSBoaWRlTWVzc2FnZXM7CisKKyAgICAg
ICAgaW5mb1F1ZXVlLT5BZGRTdG9yYWdlRmlsdGVyRW50cmllcygmZmlsdGVyKTsKKworICAgICAg
ICBpbmZvUXVldWUtPlJlbGVhc2UoKTsKKyAgICB9CisjZW5kaWYKKworICAgIHVuc2lnbmVkIGlu
dCBtYXhTdXBwb3J0ZWRTYW1wbGVzID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgcnRGb3JtYXRDb3Vu
dCA9IEFycmF5U2l6ZShSZW5kZXJUYXJnZXRGb3JtYXRzKTsKKyAgICB1bnNpZ25lZCBpbnQgZHNG
b3JtYXRDb3VudCA9IEFycmF5U2l6ZShEZXB0aFN0ZW5jaWxGb3JtYXRzKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IHJ0Rm9ybWF0Q291bnQgKyBkc0Zvcm1hdENvdW50OyArK2kp
CisgICAgeworICAgICAgICBEWEdJX0ZPUk1BVCBmb3JtYXQgPSAoaSA8IHJ0Rm9ybWF0Q291bnQp
ID8gUmVuZGVyVGFyZ2V0Rm9ybWF0c1tpXSA6IERlcHRoU3RlbmNpbEZvcm1hdHNbaSAtIHJ0Rm9y
bWF0Q291bnRdOworICAgICAgICBpZiAoZm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCisg
ICAgICAgIHsKKyAgICAgICAgICAgIFVJTlQgZm9ybWF0U3VwcG9ydDsKKyAgICAgICAgICAgIHJl
c3VsdCA9IG1EZXZpY2UtPkNoZWNrRm9ybWF0U3VwcG9ydChmb3JtYXQsICZmb3JtYXRTdXBwb3J0
KTsKKyAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSAmJiAoZm9ybWF0U3VwcG9ydCAm
IEQzRDExX0ZPUk1BVF9TVVBQT1JUX01VTFRJU0FNUExFX1JFTkRFUlRBUkdFVCkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgTXVsdGlzYW1wbGVTdXBwb3J0SW5mbyBzdXBwb3J0SW5m
bzsKKworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAxOyBqIDw9IEQzRDEx
X01BWF9NVUxUSVNBTVBMRV9TQU1QTEVfQ09VTlQ7IGorKykKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNoZWNrTXVsdGlzYW1wbGVRdWFs
aXR5TGV2ZWxzKGZvcm1hdCwgaiwgJnN1cHBvcnRJbmZvLnF1YWxpdHlMZXZlbHNbaiAtIDFdKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpICYmIHN1cHBvcnRJbmZv
LnF1YWxpdHlMZXZlbHNbaiAtIDFdID4gMCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgbWF4U3VwcG9ydGVkU2FtcGxlcyA9IHN0ZDo6bWF4KGosIG1heFN1
cHBvcnRlZFNhbXBsZXMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
c3VwcG9ydEluZm8ucXVhbGl0eUxldmVsc1tqIC0gMV0gPSAwOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbU11bHRpc2FtcGxlU3Vw
cG9ydE1hcC5pbnNlcnQoc3RkOjptYWtlX3BhaXIoZm9ybWF0LCBzdXBwb3J0SW5mbykpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIG1NYXhTdXBwb3J0ZWRTYW1wbGVzID0g
bWF4U3VwcG9ydGVkU2FtcGxlczsKKworICAgIGluaXRpYWxpemVEZXZpY2UoKTsKKworICAgIC8v
IEJHUkEgdGV4dHVyZSBzdXBwb3J0IGlzIG9wdGlvbmFsIGluIGZlYXR1cmUgbGV2ZWxzIDEwIGFu
ZCAxMF8xCisgICAgVUlOVCBmb3JtYXRTdXBwb3J0OworICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNo
ZWNrRm9ybWF0U3VwcG9ydChEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STSwgJmZvcm1hdFN1cHBv
cnQpOworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEVSUigiRXJyb3Ig
Y2hlY2tpbmcgQkdSQSBmb3JtYXQgc3VwcG9ydDogMHglMDhYIiwgcmVzdWx0KTsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgY29uc3QgaW50IGZsYWdzID0gKEQzRDExX0ZPUk1BVF9T
VVBQT1JUX1RFWFRVUkUyRCB8IEQzRDExX0ZPUk1BVF9TVVBQT1JUX1JFTkRFUl9UQVJHRVQpOwor
ICAgICAgICBtQkdSQVRleHR1cmVTdXBwb3J0ID0gKGZvcm1hdFN1cHBvcnQgJiBmbGFncykgPT0g
ZmxhZ3M7CisgICAgfQorCisgICAgLy8gQ2hlY2sgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZSBzdXBw
b3J0CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCByZXF1aXJlZFRleHR1cmVGbGFncyA9
IEQzRDExX0ZPUk1BVF9TVVBQT1JUX1RFWFRVUkUyRCB8IEQzRDExX0ZPUk1BVF9TVVBQT1JUX1RF
WFRVUkVDVUJFOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcmVxdWlyZWRSZW5kZXJh
YmxlRmxhZ3MgPSBEM0QxMV9GT1JNQVRfU1VQUE9SVF9SRU5ERVJfVEFSR0VUOworICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBpbnQgcmVxdWlyZWRGaWx0ZXJGbGFncyA9IEQzRDExX0ZPUk1BVF9T
VVBQT1JUX1NIQURFUl9TQU1QTEU7CisKKyAgICBEWEdJX0ZPUk1BVCBmbG9hdDE2Rm9ybWF0c1td
ID0KKyAgICB7CisgICAgICAgIERYR0lfRk9STUFUX1IxNl9GTE9BVCwKKyAgICAgICAgRFhHSV9G
T1JNQVRfUjE2RzE2X0ZMT0FULAorICAgICAgICBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxP
QVQsCisgICAgfTsKKworICAgIERYR0lfRk9STUFUIGZsb2F0MzJGb3JtYXRzW10gPQorICAgIHsK
KyAgICAgICAgRFhHSV9GT1JNQVRfUjMyX0ZMT0FULAorICAgICAgICBEWEdJX0ZPUk1BVF9SMzJH
MzJfRkxPQVQsCisgICAgICAgIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCwKKyAgICB9
OworCisgICAgbUZsb2F0MTZUZXh0dXJlU3VwcG9ydCA9IHRydWU7CisgICAgbUZsb2F0MTZGaWx0
ZXJTdXBwb3J0ID0gdHJ1ZTsKKyAgICBtRmxvYXQxNlJlbmRlclN1cHBvcnQgPSB0cnVlOworICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgQXJyYXlTaXplKGZsb2F0MTZGb3JtYXRzKTsg
aSsrKQorICAgIHsKKyAgICAgICAgaWYgKFNVQ0NFRURFRChtRGV2aWNlLT5DaGVja0Zvcm1hdFN1
cHBvcnQoZmxvYXQxNkZvcm1hdHNbaV0sICZmb3JtYXRTdXBwb3J0KSkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1GbG9hdDE2VGV4dHVyZVN1cHBvcnQgPSBtRmxvYXQxNlRleHR1cmVTdXBwb3J0
ICYmIChmb3JtYXRTdXBwb3J0ICYgcmVxdWlyZWRUZXh0dXJlRmxhZ3MpID09IHJlcXVpcmVkVGV4
dHVyZUZsYWdzOworICAgICAgICAgICAgbUZsb2F0MTZGaWx0ZXJTdXBwb3J0ID0gbUZsb2F0MTZG
aWx0ZXJTdXBwb3J0ICYmIChmb3JtYXRTdXBwb3J0ICYgcmVxdWlyZWRGaWx0ZXJGbGFncykgPT0g
cmVxdWlyZWRGaWx0ZXJGbGFnczsKKyAgICAgICAgICAgIG1GbG9hdDE2UmVuZGVyU3VwcG9ydCA9
IG1GbG9hdDE2UmVuZGVyU3VwcG9ydCAmJiAoZm9ybWF0U3VwcG9ydCAmIHJlcXVpcmVkUmVuZGVy
YWJsZUZsYWdzKSA9PSByZXF1aXJlZFJlbmRlcmFibGVGbGFnczsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1GbG9hdDE2VGV4dHVyZVN1cHBvcnQgPSBm
YWxzZTsKKyAgICAgICAgICAgIG1GbG9hdDE2UmVuZGVyU3VwcG9ydCA9IGZhbHNlOworICAgICAg
ICAgICAgbUZsb2F0MTZGaWx0ZXJTdXBwb3J0ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBtRmxvYXQzMlRleHR1cmVTdXBwb3J0ID0gdHJ1ZTsKKyAgICBtRmxvYXQzMkZpbHRlclN1
cHBvcnQgPSB0cnVlOworICAgIG1GbG9hdDMyUmVuZGVyU3VwcG9ydCA9IHRydWU7CisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUoZmxvYXQzMkZvcm1hdHMpOyBpKysp
CisgICAgeworICAgICAgICBpZiAoU1VDQ0VFREVEKG1EZXZpY2UtPkNoZWNrRm9ybWF0U3VwcG9y
dChmbG9hdDMyRm9ybWF0c1tpXSwgJmZvcm1hdFN1cHBvcnQpKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgbUZsb2F0MzJUZXh0dXJlU3VwcG9ydCA9IG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQgJiYg
KGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZFRleHR1cmVGbGFncykgPT0gcmVxdWlyZWRUZXh0dXJl
RmxhZ3M7CisgICAgICAgICAgICBtRmxvYXQzMkZpbHRlclN1cHBvcnQgPSBtRmxvYXQzMkZpbHRl
clN1cHBvcnQgJiYgKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZEZpbHRlckZsYWdzKSA9PSByZXF1
aXJlZEZpbHRlckZsYWdzOworICAgICAgICAgICAgbUZsb2F0MzJSZW5kZXJTdXBwb3J0ID0gbUZs
b2F0MzJSZW5kZXJTdXBwb3J0ICYmIChmb3JtYXRTdXBwb3J0ICYgcmVxdWlyZWRSZW5kZXJhYmxl
RmxhZ3MpID09IHJlcXVpcmVkUmVuZGVyYWJsZUZsYWdzOworICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgbUZsb2F0MzJUZXh0dXJlU3VwcG9ydCA9IGZhbHNl
OworICAgICAgICAgICAgbUZsb2F0MzJGaWx0ZXJTdXBwb3J0ID0gZmFsc2U7CisgICAgICAgICAg
ICBtRmxvYXQzMlJlbmRlclN1cHBvcnQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIENoZWNrIGNvbXByZXNzZWQgdGV4dHVyZSBzdXBwb3J0CisgICAgY29uc3QgdW5zaWduZWQg
aW50IHJlcXVpcmVkQ29tcHJlc3NlZFRleHR1cmVGbGFncyA9IEQzRDExX0ZPUk1BVF9TVVBQT1JU
X1RFWFRVUkUyRDsKKworICAgIGlmIChTVUNDRUVERUQobURldmljZS0+Q2hlY2tGb3JtYXRTdXBw
b3J0KERYR0lfRk9STUFUX0JDMV9VTk9STSwgJmZvcm1hdFN1cHBvcnQpKSkKKyAgICB7CisgICAg
ICAgIG1EWFQxVGV4dHVyZVN1cHBvcnQgPSAoZm9ybWF0U3VwcG9ydCAmIHJlcXVpcmVkQ29tcHJl
c3NlZFRleHR1cmVGbGFncykgPT0gcmVxdWlyZWRDb21wcmVzc2VkVGV4dHVyZUZsYWdzOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRFhUMVRleHR1cmVTdXBwb3J0ID0gZmFsc2U7
CisgICAgfQorCisgICAgaWYgKFNVQ0NFRURFRChtRGV2aWNlLT5DaGVja0Zvcm1hdFN1cHBvcnQo
RFhHSV9GT1JNQVRfQkMzX1VOT1JNLCAmZm9ybWF0U3VwcG9ydCkpKQorICAgIHsKKyAgICAgICAg
bURYVDNUZXh0dXJlU3VwcG9ydCA9IChmb3JtYXRTdXBwb3J0ICYgcmVxdWlyZWRDb21wcmVzc2Vk
VGV4dHVyZUZsYWdzKSA9PSByZXF1aXJlZENvbXByZXNzZWRUZXh0dXJlRmxhZ3M7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1EWFQzVGV4dHVyZVN1cHBvcnQgPSBmYWxzZTsKKyAg
ICB9CisKKyAgICBpZiAoU1VDQ0VFREVEKG1EZXZpY2UtPkNoZWNrRm9ybWF0U3VwcG9ydChEWEdJ
X0ZPUk1BVF9CQzVfVU5PUk0sICZmb3JtYXRTdXBwb3J0KSkpCisgICAgeworICAgICAgICBtRFhU
NVRleHR1cmVTdXBwb3J0ID0gKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZENvbXByZXNzZWRUZXh0
dXJlRmxhZ3MpID09IHJlcXVpcmVkQ29tcHJlc3NlZFRleHR1cmVGbGFnczsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgbURYVDVUZXh0dXJlU3VwcG9ydCA9IGZhbHNlOworICAgIH0K
KworICAgIC8vIENoZWNrIGRlcHRoIHRleHR1cmUgc3VwcG9ydAorICAgIERYR0lfRk9STUFUIGRl
cHRoVGV4dHVyZUZvcm1hdHNbXSA9CisgICAgeworICAgICAgICBEWEdJX0ZPUk1BVF9EMTZfVU5P
Uk0sCisgICAgICAgIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5ULAorICAgIH07CisKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHJlcXVpcmVkRGVwdGhUZXh0dXJlRmxhZ3MgPSBE
M0QxMV9GT1JNQVRfU1VQUE9SVF9ERVBUSF9TVEVOQ0lMIHwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0QxMV9GT1JNQVRfU1VQUE9S
VF9URVhUVVJFMkQ7CisKKyAgICBtRGVwdGhUZXh0dXJlU3VwcG9ydCA9IHRydWU7CisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUoZGVwdGhUZXh0dXJlRm9ybWF0cyk7
IGkrKykKKyAgICB7CisgICAgICAgIGlmIChTVUNDRUVERUQobURldmljZS0+Q2hlY2tGb3JtYXRT
dXBwb3J0KGRlcHRoVGV4dHVyZUZvcm1hdHNbaV0sICZmb3JtYXRTdXBwb3J0KSkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1EZXB0aFRleHR1cmVTdXBwb3J0ID0gbURlcHRoVGV4dHVyZVN1cHBv
cnQgJiYgKChmb3JtYXRTdXBwb3J0ICYgcmVxdWlyZWREZXB0aFRleHR1cmVGbGFncykgPT0gcmVx
dWlyZWREZXB0aFRleHR1cmVGbGFncyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg
ICB7CisgICAgICAgICAgICBtRGVwdGhUZXh0dXJlU3VwcG9ydCA9IGZhbHNlOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9TVUNDRVNTOworfQorCisvLyBkbyBhbnkgb25lLXRp
bWUgZGV2aWNlIGluaXRpYWxpemF0aW9uCisvLyBOT1RFOiB0aGlzIGlzIGFsc28gbmVlZGVkIGFm
dGVyIGEgZGV2aWNlIGxvc3QvcmVzZXQKKy8vIHRvIHJlc2V0IHRoZSBzY2VuZSBzdGF0dXMgYW5k
IGVuc3VyZSB0aGUgZGVmYXVsdCBzdGF0ZXMgYXJlIHJlc2V0Lgordm9pZCBSZW5kZXJlcjExOjpp
bml0aWFsaXplRGV2aWNlKCkKK3sKKyAgICBtU3RhdGVDYWNoZS5pbml0aWFsaXplKG1EZXZpY2Up
OworICAgIG1JbnB1dExheW91dENhY2hlLmluaXRpYWxpemUobURldmljZSwgbURldmljZUNvbnRl
eHQpOworCisgICAgQVNTRVJUKCFtVmVydGV4RGF0YU1hbmFnZXIgJiYgIW1JbmRleERhdGFNYW5h
Z2VyKTsKKyAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBuZXcgVmVydGV4RGF0YU1hbmFnZXIodGhp
cyk7CisgICAgbUluZGV4RGF0YU1hbmFnZXIgPSBuZXcgSW5kZXhEYXRhTWFuYWdlcih0aGlzKTsK
KworICAgIG1hcmtBbGxTdGF0ZURpcnR5KCk7Cit9CisKK2ludCBSZW5kZXJlcjExOjpnZW5lcmF0
ZUNvbmZpZ3MoQ29uZmlnRGVzYyAqKmNvbmZpZ0Rlc2NMaXN0KQoreworICAgIHVuc2lnbmVkIGlu
dCBudW1SZW5kZXJGb3JtYXRzID0gQXJyYXlTaXplKFJlbmRlclRhcmdldEZvcm1hdHMpOworICAg
IHVuc2lnbmVkIGludCBudW1EZXB0aEZvcm1hdHMgPSBBcnJheVNpemUoRGVwdGhTdGVuY2lsRm9y
bWF0cyk7CisgICAgKCpjb25maWdEZXNjTGlzdCkgPSBuZXcgQ29uZmlnRGVzY1tudW1SZW5kZXJG
b3JtYXRzICogbnVtRGVwdGhGb3JtYXRzXTsKKyAgICBpbnQgbnVtQ29uZmlncyA9IDA7CisgICAg
CisgICAgZm9yICh1bnNpZ25lZCBpbnQgZm9ybWF0SW5kZXggPSAwOyBmb3JtYXRJbmRleCA8IG51
bVJlbmRlckZvcm1hdHM7IGZvcm1hdEluZGV4KyspCisgICAgeworICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBkZXB0aFN0ZW5jaWxJbmRleCA9IDA7IGRlcHRoU3RlbmNpbEluZGV4IDwgbnVtRGVw
dGhGb3JtYXRzOyBkZXB0aFN0ZW5jaWxJbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBE
WEdJX0ZPUk1BVCByZW5kZXJUYXJnZXRGb3JtYXQgPSBSZW5kZXJUYXJnZXRGb3JtYXRzW2Zvcm1h
dEluZGV4XTsKKworICAgICAgICAgICAgVUlOVCBmb3JtYXRTdXBwb3J0ID0gMDsKKyAgICAgICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KHJlbmRlclRh
cmdldEZvcm1hdCwgJmZvcm1hdFN1cHBvcnQpOworCisgICAgICAgICAgICBpZiAoU1VDQ0VFREVE
KHJlc3VsdCkgJiYgKGZvcm1hdFN1cHBvcnQgJiBEM0QxMV9GT1JNQVRfU1VQUE9SVF9SRU5ERVJf
VEFSR0VUKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEWEdJX0ZPUk1BVCBkZXB0
aFN0ZW5jaWxGb3JtYXQgPSBEZXB0aFN0ZW5jaWxGb3JtYXRzW2RlcHRoU3RlbmNpbEluZGV4XTsK
KworICAgICAgICAgICAgICAgIGJvb2wgZGVwdGhTdGVuY2lsRm9ybWF0T0sgPSB0cnVlOworCisg
ICAgICAgICAgICAgICAgaWYgKGRlcHRoU3RlbmNpbEZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktO
T1dOKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVUlOVCBmb3JtYXRT
dXBwb3J0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q2hlY2tG
b3JtYXRTdXBwb3J0KGRlcHRoU3RlbmNpbEZvcm1hdCwgJmZvcm1hdFN1cHBvcnQpOworICAgICAg
ICAgICAgICAgICAgICBkZXB0aFN0ZW5jaWxGb3JtYXRPSyA9IFNVQ0NFRURFRChyZXN1bHQpICYm
IChmb3JtYXRTdXBwb3J0ICYgRDNEMTFfRk9STUFUX1NVUFBPUlRfREVQVEhfU1RFTkNJTCk7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGRlcHRoU3RlbmNpbEZvcm1h
dE9LKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQ29uZmlnRGVzYyBu
ZXdDb25maWc7CisgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5yZW5kZXJUYXJnZXRGb3Jt
YXQgPSBkM2QxMV9nbDo6Q29udmVydEJhY2tCdWZmZXJGb3JtYXQocmVuZGVyVGFyZ2V0Rm9ybWF0
KTsKKyAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmRlcHRoU3RlbmNpbEZvcm1hdCA9IGQz
ZDExX2dsOjpDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KGRlcHRoU3RlbmNpbEZvcm1hdCk7Cisg
ICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5tdWx0aVNhbXBsZSA9IDA7ICAgICAvLyBGSVhN
RTogZW51bWVyYXRlIG11bHRpLXNhbXBsaW5nCisgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZp
Zy5mYXN0Q29uZmlnID0gdHJ1ZTsgICAvLyBBc3N1bWUgYWxsIERYMTEgZm9ybWF0IGNvbnZlcnNp
b25zIHRvIGJlIGZhc3QKKworICAgICAgICAgICAgICAgICAgICAoKmNvbmZpZ0Rlc2NMaXN0KVtu
dW1Db25maWdzKytdID0gbmV3Q29uZmlnOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBudW1Db25maWdzOworfQorCit2b2lk
IFJlbmRlcmVyMTE6OmRlbGV0ZUNvbmZpZ3MoQ29uZmlnRGVzYyAqY29uZmlnRGVzY0xpc3QpCit7
CisgICAgZGVsZXRlIFtdIChjb25maWdEZXNjTGlzdCk7Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6
c3luYyhib29sIGJsb2NrKQoreworICAgIGlmIChibG9jaykKKyAgICB7CisgICAgICAgIEhSRVNV
TFQgcmVzdWx0OworCisgICAgICAgIGlmICghbVN5bmNRdWVyeSkKKyAgICAgICAgeworICAgICAg
ICAgICAgRDNEMTFfUVVFUllfREVTQyBxdWVyeURlc2M7CisgICAgICAgICAgICBxdWVyeURlc2Mu
UXVlcnkgPSBEM0QxMV9RVUVSWV9FVkVOVDsKKyAgICAgICAgICAgIHF1ZXJ5RGVzYy5NaXNjRmxh
Z3MgPSAwOworCisgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVRdWVyeSgmcXVl
cnlEZXNjLCAmbVN5bmNRdWVyeSk7CisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOworICAgICAgICB9CisKKyAgICAgICAgbURldmljZUNvbnRleHQtPkVuZChtU3luY1F1ZXJ5
KTsKKyAgICAgICAgbURldmljZUNvbnRleHQtPkZsdXNoKCk7CisKKyAgICAgICAgZG8KKyAgICAg
ICAgeworICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZUNvbnRleHQtPkdldERhdGEobVN5bmNR
dWVyeSwgTlVMTCwgMCwgRDNEMTFfQVNZTkNfR0VUREFUQV9ET05PVEZMVVNIKTsKKworICAgICAg
ICAgICAgLy8gS2VlcCBwb2xsaW5nLCBidXQgYWxsb3cgb3RoZXIgdGhyZWFkcyB0byBkbyBzb21l
dGhpbmcgdXNlZnVsIGZpcnN0CisgICAgICAgICAgICBTbGVlcCgwKTsKKworICAgICAgICAgICAg
aWYgKHRlc3REZXZpY2VMb3N0KHRydWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB3aGlsZSAocmVzdWx0
ID09IFNfRkFMU0UpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRGV2aWNlQ29u
dGV4dC0+Rmx1c2goKTsKKyAgICB9Cit9CisKK1N3YXBDaGFpbiAqUmVuZGVyZXIxMTo6Y3JlYXRl
U3dhcENoYWluKEhXTkQgd2luZG93LCBIQU5ETEUgc2hhcmVIYW5kbGUsIEdMZW51bSBiYWNrQnVm
ZmVyRm9ybWF0LCBHTGVudW0gZGVwdGhCdWZmZXJGb3JtYXQpCit7CisgICAgcmV0dXJuIG5ldyBy
eDo6U3dhcENoYWluMTEodGhpcywgd2luZG93LCBzaGFyZUhhbmRsZSwgYmFja0J1ZmZlckZvcm1h
dCwgZGVwdGhCdWZmZXJGb3JtYXQpOworfQorCit2b2lkIFJlbmRlcmVyMTE6OnNldFNhbXBsZXJT
dGF0ZShnbDo6U2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBjb25zdCBnbDo6U2FtcGxlclN0
YXRlICZzYW1wbGVyU3RhdGUpCit7CisgICAgaWYgKHR5cGUgPT0gZ2w6OlNBTVBMRVJfUElYRUwp
CisgICAgeworICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGdsOjpNQVhfVEVYVFVS
RV9JTUFHRV9VTklUUykKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJQaXhlbCBzaGFkZXIg
c2FtcGxlciBpbmRleCAlaSBpcyBub3QgdmFsaWQuIiwgaW5kZXgpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Gb3JjZVNldFBpeGVsU2FtcGxlclN0YXRl
c1tpbmRleF0gfHwgbWVtY21wKCZzYW1wbGVyU3RhdGUsICZtQ3VyUGl4ZWxTYW1wbGVyU3RhdGVz
W2luZGV4XSwgc2l6ZW9mKGdsOjpTYW1wbGVyU3RhdGUpKSAhPSAwKQorICAgICAgICB7CisgICAg
ICAgICAgICBJRDNEMTFTYW1wbGVyU3RhdGUgKmR4U2FtcGxlclN0YXRlID0gbVN0YXRlQ2FjaGUu
Z2V0U2FtcGxlclN0YXRlKHNhbXBsZXJTdGF0ZSk7CisKKyAgICAgICAgICAgIGlmICghZHhTYW1w
bGVyU3RhdGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRVJSKCJOVUxMIHNhbXBs
ZXIgc3RhdGUgcmV0dXJuZWQgYnkgUmVuZGVyU3RhdGVDYWNoZTo6Z2V0U2FtcGxlclN0YXRlLCBz
ZXR0aW5nIHRoZSBkZWZhdWx0IgorICAgICAgICAgICAgICAgICAgICAic2FtcGxlciBzdGF0ZSBm
b3IgcGl4ZWwgc2hhZGVycyBhdCBzbG90ICVpLiIsIGluZGV4KTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgbURldmljZUNvbnRleHQtPlBTU2V0U2FtcGxlcnMoaW5kZXgsIDEsICZkeFNh
bXBsZXJTdGF0ZSk7CisKKyAgICAgICAgICAgIG1DdXJQaXhlbFNhbXBsZXJTdGF0ZXNbaW5kZXhd
ID0gc2FtcGxlclN0YXRlOworICAgICAgICB9CisKKyAgICAgICAgbUZvcmNlU2V0UGl4ZWxTYW1w
bGVyU3RhdGVzW2luZGV4XSA9IGZhbHNlOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlID09IGds
OjpTQU1QTEVSX1ZFUlRFWCkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXgg
Pj0gKGludClnZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpKQorICAgICAgICB7CisgICAg
ICAgICAgICBFUlIoIlZlcnRleCBzaGFkZXIgc2FtcGxlciBpbmRleCAlaSBpcyBub3QgdmFsaWQu
IiwgaW5kZXgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KG1Gb3JjZVNldFZlcnRleFNhbXBsZXJTdGF0ZXNbaW5kZXhdIHx8IG1lbWNtcCgmc2FtcGxlclN0
YXRlLCAmbUN1clZlcnRleFNhbXBsZXJTdGF0ZXNbaW5kZXhdLCBzaXplb2YoZ2w6OlNhbXBsZXJT
dGF0ZSkpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIElEM0QxMVNhbXBsZXJTdGF0ZSAq
ZHhTYW1wbGVyU3RhdGUgPSBtU3RhdGVDYWNoZS5nZXRTYW1wbGVyU3RhdGUoc2FtcGxlclN0YXRl
KTsKKworICAgICAgICAgICAgaWYgKCFkeFNhbXBsZXJTdGF0ZSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBFUlIoIk5VTEwgc2FtcGxlciBzdGF0ZSByZXR1cm5lZCBieSBSZW5kZXJT
dGF0ZUNhY2hlOjpnZXRTYW1wbGVyU3RhdGUsIHNldHRpbmcgdGhlIGRlZmF1bHQiCisgICAgICAg
ICAgICAgICAgICAgICJzYW1wbGVyIHN0YXRlIGZvciB2ZXJ0ZXggc2hhZGVycyBhdCBzbG90ICVp
LiIsIGluZGV4KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbURldmljZUNvbnRleHQt
PlZTU2V0U2FtcGxlcnMoaW5kZXgsIDEsICZkeFNhbXBsZXJTdGF0ZSk7CisKKyAgICAgICAgICAg
IG1DdXJWZXJ0ZXhTYW1wbGVyU3RhdGVzW2luZGV4XSA9IHNhbXBsZXJTdGF0ZTsKKyAgICAgICAg
fQorCisgICAgICAgIG1Gb3JjZVNldFZlcnRleFNhbXBsZXJTdGF0ZXNbaW5kZXhdID0gZmFsc2U7
CisgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKK30KKwordm9pZCBSZW5kZXJlcjExOjpz
ZXRUZXh0dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGdsOjpUZXh0dXJlICp0
ZXh0dXJlKQoreworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqdGV4dHVyZVNSViA9IE5V
TEw7CisgICAgdW5zaWduZWQgaW50IHNlcmlhbCA9IDA7CisgICAgYm9vbCBmb3JjZVNldFRleHR1
cmUgPSBmYWxzZTsKKworICAgIGlmICh0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UgKnRleFN0b3JhZ2UgPSB0ZXh0dXJlLT5nZXROYXRpdmVUZXh0dXJlKCk7
CisgICAgICAgIGlmICh0ZXhTdG9yYWdlKQorICAgICAgICB7CisgICAgICAgICAgICBUZXh0dXJl
U3RvcmFnZTExICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFnZTExOjptYWtlVGV4dHVyZVN0b3Jh
Z2UxMSh0ZXhTdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CisgICAgICAgICAgICB0ZXh0
dXJlU1JWID0gc3RvcmFnZTExLT5nZXRTUlYoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElm
IHdlIGdldCBOVUxMIGJhY2sgZnJvbSBnZXRTUlYgaGVyZSwgc29tZXRoaW5nIHdlbnQgd3Jvbmcg
aW4gdGhlIHRleHR1cmUgY2xhc3MgYW5kIHdlJ3JlIHVuZXhwZWN0ZWRseQorICAgICAgICAvLyBt
aXNzaW5nIHRoZSBzaGFkZXIgcmVzb3VyY2UgdmlldworICAgICAgICBBU1NFUlQodGV4dHVyZVNS
ViAhPSBOVUxMKTsKKworICAgICAgICBzZXJpYWwgPSB0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFs
KCk7CisgICAgICAgIGZvcmNlU2V0VGV4dHVyZSA9IHRleHR1cmUtPmhhc0RpcnR5SW1hZ2VzKCk7
CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gZ2w6OlNBTVBMRVJfUElYRUwpCisgICAgeworICAg
ICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklU
UykKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJQaXhlbCBzaGFkZXIgc2FtcGxlciBpbmRl
eCAlaSBpcyBub3QgdmFsaWQuIiwgaW5kZXgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGZvcmNlU2V0VGV4dHVyZSB8fCBtQ3VyUGl4ZWxUZXh0dXJlU2Vy
aWFsc1tpbmRleF0gIT0gc2VyaWFsKQorICAgICAgICB7CisgICAgICAgICAgICBtRGV2aWNlQ29u
dGV4dC0+UFNTZXRTaGFkZXJSZXNvdXJjZXMoaW5kZXgsIDEsICZ0ZXh0dXJlU1JWKTsKKyAgICAg
ICAgfQorCisgICAgICAgIG1DdXJQaXhlbFRleHR1cmVTZXJpYWxzW2luZGV4XSA9IHNlcmlhbDsK
KyAgICB9CisgICAgZWxzZSBpZiAodHlwZSA9PSBnbDo6U0FNUExFUl9WRVJURVgpCisgICAgewor
ICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IChpbnQpZ2V0TWF4VmVydGV4VGV4dHVy
ZUltYWdlVW5pdHMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJWZXJ0ZXggc2hhZGVy
IHNhbXBsZXIgaW5kZXggJWkgaXMgbm90IHZhbGlkLiIsIGluZGV4KTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChmb3JjZVNldFRleHR1cmUgfHwgbUN1clZl
cnRleFRleHR1cmVTZXJpYWxzW2luZGV4XSAhPSBzZXJpYWwpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1EZXZpY2VDb250ZXh0LT5WU1NldFNoYWRlclJlc291cmNlcyhpbmRleCwgMSwgJnRleHR1
cmVTUlYpOworICAgICAgICB9CisKKyAgICAgICAgbUN1clZlcnRleFRleHR1cmVTZXJpYWxzW2lu
ZGV4XSA9IHNlcmlhbDsKKyAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworfQorCit2b2lk
IFJlbmRlcmVyMTE6OnNldFJhc3Rlcml6ZXJTdGF0ZShjb25zdCBnbDo6UmFzdGVyaXplclN0YXRl
ICZyYXN0ZXJTdGF0ZSkKK3sKKyAgICBpZiAobUZvcmNlU2V0UmFzdGVyU3RhdGUgfHwgbWVtY21w
KCZyYXN0ZXJTdGF0ZSwgJm1DdXJSYXN0ZXJTdGF0ZSwgc2l6ZW9mKGdsOjpSYXN0ZXJpemVyU3Rh
dGUpKSAhPSAwKQorICAgIHsKKyAgICAgICAgSUQzRDExUmFzdGVyaXplclN0YXRlICpkeFJhc3Rl
clN0YXRlID0gbVN0YXRlQ2FjaGUuZ2V0UmFzdGVyaXplclN0YXRlKHJhc3RlclN0YXRlLCBtU2Np
c3NvckVuYWJsZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ3VyRGVwdGhTaXplKTsKKyAgICAg
ICAgaWYgKCFkeFJhc3RlclN0YXRlKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIk5VTEwg
cmFzdGVyaXplciBzdGF0ZSByZXR1cm5lZCBieSBSZW5kZXJTdGF0ZUNhY2hlOjpnZXRSYXN0ZXJp
emVyU3RhdGUsIHNldHRpbmcgdGhlIGRlZmF1bHQiCisgICAgICAgICAgICAgICAgInJhc3Rlcml6
ZXIgc3RhdGUuIik7CisgICAgICAgIH0KKworICAgICAgICBtRGV2aWNlQ29udGV4dC0+UlNTZXRT
dGF0ZShkeFJhc3RlclN0YXRlKTsKKworICAgICAgICBtQ3VyUmFzdGVyU3RhdGUgPSByYXN0ZXJT
dGF0ZTsKKyAgICB9CisKKyAgICBtRm9yY2VTZXRSYXN0ZXJTdGF0ZSA9IGZhbHNlOworfQorCit2
b2lkIFJlbmRlcmVyMTE6OnNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZl
ciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xvciAmYmxl
bmRDb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2Ft
cGxlTWFzaykKK3sKKyAgICBpZiAobUZvcmNlU2V0QmxlbmRTdGF0ZSB8fAorICAgICAgICBtZW1j
bXAoJmJsZW5kU3RhdGUsICZtQ3VyQmxlbmRTdGF0ZSwgc2l6ZW9mKGdsOjpCbGVuZFN0YXRlKSkg
IT0gMCB8fAorICAgICAgICBtZW1jbXAoJmJsZW5kQ29sb3IsICZtQ3VyQmxlbmRDb2xvciwgc2l6
ZW9mKGdsOjpDb2xvcikpICE9IDAgfHwKKyAgICAgICAgc2FtcGxlTWFzayAhPSBtQ3VyU2FtcGxl
TWFzaykKKyAgICB7CisgICAgICAgIElEM0QxMUJsZW5kU3RhdGUgKmR4QmxlbmRTdGF0ZSA9IG1T
dGF0ZUNhY2hlLmdldEJsZW5kU3RhdGUoZnJhbWVidWZmZXIsIGJsZW5kU3RhdGUpOworICAgICAg
ICBpZiAoIWR4QmxlbmRTdGF0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJOVUxMIGJs
ZW5kIHN0YXRlIHJldHVybmVkIGJ5IFJlbmRlclN0YXRlQ2FjaGU6OmdldEJsZW5kU3RhdGUsIHNl
dHRpbmcgdGhlIGRlZmF1bHQgIgorICAgICAgICAgICAgICAgICJibGVuZCBzdGF0ZS4iKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGZsb2F0IGJsZW5kQ29sb3JzWzRdID0gezAuMGZ9OworICAgICAg
ICBpZiAoYmxlbmRTdGF0ZS5zb3VyY2VCbGVuZFJHQiAhPSBHTF9DT05TVEFOVF9BTFBIQSAmJiBi
bGVuZFN0YXRlLnNvdXJjZUJsZW5kUkdCICE9IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSAm
JgorICAgICAgICAgICAgYmxlbmRTdGF0ZS5kZXN0QmxlbmRSR0IgIT0gR0xfQ09OU1RBTlRfQUxQ
SEEgJiYgYmxlbmRTdGF0ZS5kZXN0QmxlbmRSR0IgIT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0FM
UEhBKQorICAgICAgICB7CisgICAgICAgICAgICBibGVuZENvbG9yc1swXSA9IGJsZW5kQ29sb3Iu
cmVkOworICAgICAgICAgICAgYmxlbmRDb2xvcnNbMV0gPSBibGVuZENvbG9yLmdyZWVuOworICAg
ICAgICAgICAgYmxlbmRDb2xvcnNbMl0gPSBibGVuZENvbG9yLmJsdWU7CisgICAgICAgICAgICBi
bGVuZENvbG9yc1szXSA9IGJsZW5kQ29sb3IuYWxwaGE7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICB7CisgICAgICAgICAgICBibGVuZENvbG9yc1swXSA9IGJsZW5kQ29sb3IuYWxw
aGE7CisgICAgICAgICAgICBibGVuZENvbG9yc1sxXSA9IGJsZW5kQ29sb3IuYWxwaGE7CisgICAg
ICAgICAgICBibGVuZENvbG9yc1syXSA9IGJsZW5kQ29sb3IuYWxwaGE7CisgICAgICAgICAgICBi
bGVuZENvbG9yc1szXSA9IGJsZW5kQ29sb3IuYWxwaGE7CisgICAgICAgIH0KKworICAgICAgICBt
RGV2aWNlQ29udGV4dC0+T01TZXRCbGVuZFN0YXRlKGR4QmxlbmRTdGF0ZSwgYmxlbmRDb2xvcnMs
IHNhbXBsZU1hc2spOworCisgICAgICAgIG1DdXJCbGVuZFN0YXRlID0gYmxlbmRTdGF0ZTsKKyAg
ICAgICAgbUN1ckJsZW5kQ29sb3IgPSBibGVuZENvbG9yOworICAgICAgICBtQ3VyU2FtcGxlTWFz
ayA9IHNhbXBsZU1hc2s7CisgICAgfQorCisgICAgbUZvcmNlU2V0QmxlbmRTdGF0ZSA9IGZhbHNl
OworfQorCit2b2lkIFJlbmRlcmVyMTE6OnNldERlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpE
ZXB0aFN0ZW5jaWxTdGF0ZSAmZGVwdGhTdGVuY2lsU3RhdGUsIGludCBzdGVuY2lsUmVmLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RlbmNpbEJhY2tSZWYsIGJv
b2wgZnJvbnRGYWNlQ0NXKQoreworICAgIGlmIChtRm9yY2VTZXREZXB0aFN0ZW5jaWxTdGF0ZSB8
fAorICAgICAgICBtZW1jbXAoJmRlcHRoU3RlbmNpbFN0YXRlLCAmbUN1ckRlcHRoU3RlbmNpbFN0
YXRlLCBzaXplb2YoZ2w6OkRlcHRoU3RlbmNpbFN0YXRlKSkgIT0gMCB8fAorICAgICAgICBzdGVu
Y2lsUmVmICE9IG1DdXJTdGVuY2lsUmVmIHx8IHN0ZW5jaWxCYWNrUmVmICE9IG1DdXJTdGVuY2ls
QmFja1JlZikKKyAgICB7CisgICAgICAgIGlmIChkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsV3Jp
dGVtYXNrICE9IGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrIHx8CisgICAg
ICAgICAgICBzdGVuY2lsUmVmICE9IHN0ZW5jaWxCYWNrUmVmIHx8CisgICAgICAgICAgICBkZXB0
aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsTWFzayAhPSBkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsQmFj
a01hc2spCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiU2VwYXJhdGUgZnJvbnQvYmFjayBz
dGVuY2lsIHdyaXRlbWFza3MsIHJlZmVyZW5jZSB2YWx1ZXMsIG9yIHN0ZW5jaWwgbWFzayB2YWx1
ZXMgYXJlICIKKyAgICAgICAgICAgICAgICAiaW52YWxpZCB1bmRlciBXZWJHTC4iKTsKKyAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICB9
CisKKyAgICAgICAgSUQzRDExRGVwdGhTdGVuY2lsU3RhdGUgKmR4RGVwdGhTdGVuY2lsU3RhdGUg
PSBtU3RhdGVDYWNoZS5nZXREZXB0aFN0ZW5jaWxTdGF0ZShkZXB0aFN0ZW5jaWxTdGF0ZSk7Cisg
ICAgICAgIGlmICghZHhEZXB0aFN0ZW5jaWxTdGF0ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
RVJSKCJOVUxMIGRlcHRoIHN0ZW5jaWwgc3RhdGUgcmV0dXJuZWQgYnkgUmVuZGVyU3RhdGVDYWNo
ZTo6Z2V0RGVwdGhTdGVuY2lsU3RhdGUsICIKKyAgICAgICAgICAgICAgICAic2V0dGluZyB0aGUg
ZGVmYXVsdCBkZXB0aCBzdGVuY2lsIHN0YXRlLiIpOworICAgICAgICB9CisKKyAgICAgICAgbURl
dmljZUNvbnRleHQtPk9NU2V0RGVwdGhTdGVuY2lsU3RhdGUoZHhEZXB0aFN0ZW5jaWxTdGF0ZSwg
c3RhdGljX2Nhc3Q8VUlOVD4oc3RlbmNpbFJlZikpOworCisgICAgICAgIG1DdXJEZXB0aFN0ZW5j
aWxTdGF0ZSA9IGRlcHRoU3RlbmNpbFN0YXRlOworICAgICAgICBtQ3VyU3RlbmNpbFJlZiA9IHN0
ZW5jaWxSZWY7CisgICAgICAgIG1DdXJTdGVuY2lsQmFja1JlZiA9IHN0ZW5jaWxCYWNrUmVmOwor
ICAgIH0KKworICAgIG1Gb3JjZVNldERlcHRoU3RlbmNpbFN0YXRlID0gZmFsc2U7Cit9CisKK3Zv
aWQgUmVuZGVyZXIxMTo6c2V0U2Npc3NvclJlY3RhbmdsZShjb25zdCBnbDo6UmVjdGFuZ2xlICZz
Y2lzc29yLCBib29sIGVuYWJsZWQpCit7CisgICAgaWYgKG1Gb3JjZVNldFNjaXNzb3IgfHwgbWVt
Y21wKCZzY2lzc29yLCAmbUN1clNjaXNzb3IsIHNpemVvZihnbDo6UmVjdGFuZ2xlKSkgIT0gMCB8
fAorICAgICAgICBlbmFibGVkICE9IG1TY2lzc29yRW5hYmxlZCkKKyAgICB7CisgICAgICAgIGlm
IChlbmFibGVkKQorICAgICAgICB7CisgICAgICAgICAgICBEM0QxMV9SRUNUIHJlY3Q7CisgICAg
ICAgICAgICByZWN0LmxlZnQgPSBzdGQ6Om1heCgwLCBzY2lzc29yLngpOworICAgICAgICAgICAg
cmVjdC50b3AgPSBzdGQ6Om1heCgwLCBzY2lzc29yLnkpOworICAgICAgICAgICAgcmVjdC5yaWdo
dCA9IHNjaXNzb3IueCArIHN0ZDo6bWF4KDAsIHNjaXNzb3Iud2lkdGgpOworICAgICAgICAgICAg
cmVjdC5ib3R0b20gPSBzY2lzc29yLnkgKyBzdGQ6Om1heCgwLCBzY2lzc29yLmhlaWdodCk7CisK
KyAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5SU1NldFNjaXNzb3JSZWN0cygxLCAmcmVjdCk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoZW5hYmxlZCAhPSBtU2Npc3NvckVuYWJsZWQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1Gb3JjZVNldFJhc3RlclN0YXRlID0gdHJ1ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIG1DdXJTY2lzc29yID0gc2Npc3NvcjsKKyAgICAgICAgbVNjaXNzb3JF
bmFibGVkID0gZW5hYmxlZDsKKyAgICB9CisKKyAgICBtRm9yY2VTZXRTY2lzc29yID0gZmFsc2U7
Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6c2V0Vmlld3BvcnQoY29uc3QgZ2w6OlJlY3RhbmdsZSAm
dmlld3BvcnQsIGZsb2F0IHpOZWFyLCBmbG9hdCB6RmFyLCBHTGVudW0gZHJhd01vZGUsIEdMZW51
bSBmcm9udEZhY2UsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlnbm9yZVZp
ZXdwb3J0KQoreworICAgIGdsOjpSZWN0YW5nbGUgYWN0dWFsVmlld3BvcnQgPSB2aWV3cG9ydDsK
KyAgICBmbG9hdCBhY3R1YWxaTmVhciA9IGdsOjpjbGFtcDAxKHpOZWFyKTsKKyAgICBmbG9hdCBh
Y3R1YWxaRmFyID0gZ2w6OmNsYW1wMDEoekZhcik7CisgICAgaWYgKGlnbm9yZVZpZXdwb3J0KQor
ICAgIHsKKyAgICAgICAgYWN0dWFsVmlld3BvcnQueCA9IDA7CisgICAgICAgIGFjdHVhbFZpZXdw
b3J0LnkgPSAwOworICAgICAgICBhY3R1YWxWaWV3cG9ydC53aWR0aCA9IG1SZW5kZXJUYXJnZXRE
ZXNjLndpZHRoOworICAgICAgICBhY3R1YWxWaWV3cG9ydC5oZWlnaHQgPSBtUmVuZGVyVGFyZ2V0
RGVzYy5oZWlnaHQ7CisgICAgICAgIGFjdHVhbFpOZWFyID0gMC4wZjsKKyAgICAgICAgYWN0dWFs
WkZhciA9IDEuMGY7CisgICAgfQorCisgICAgLy8gR2V0IEQzRCB2aWV3cG9ydCBib3VuZHMsIHdo
aWNoIGRlcGVuZHMgb24gdGhlIGZlYXR1cmUgbGV2ZWwKKyAgICBjb25zdCBSYW5nZSYgdmlld3Bv
cnRCb3VuZHMgPSBnZXRWaWV3cG9ydEJvdW5kcygpOworCisgICAgLy8gQ2xhbXAgd2lkdGggYW5k
IGhlaWdodCBmaXJzdCB0byB0aGUgZ2wgbWF4aW11bSwgdGhlbiBjbGFtcCBmdXJ0aGVyIGlmIHdl
IGV4dGVuZCBwYXN0IHRoZSBEM0QgbWF4aW11bSBib3VuZHMKKyAgICBEM0QxMV9WSUVXUE9SVCBk
eFZpZXdwb3J0OworICAgIGR4Vmlld3BvcnQuVG9wTGVmdFggPSBnbDo6Y2xhbXAoYWN0dWFsVmll
d3BvcnQueCwgdmlld3BvcnRCb3VuZHMuc3RhcnQsIHZpZXdwb3J0Qm91bmRzLmVuZCk7CisgICAg
ZHhWaWV3cG9ydC5Ub3BMZWZ0WSA9IGdsOjpjbGFtcChhY3R1YWxWaWV3cG9ydC55LCB2aWV3cG9y
dEJvdW5kcy5zdGFydCwgdmlld3BvcnRCb3VuZHMuZW5kKTsKKyAgICBkeFZpZXdwb3J0LldpZHRo
ID0gZ2w6OmNsYW1wKGFjdHVhbFZpZXdwb3J0LndpZHRoLCAwLCBnZXRNYXhWaWV3cG9ydERpbWVu
c2lvbigpKTsKKyAgICBkeFZpZXdwb3J0LkhlaWdodCA9IGdsOjpjbGFtcChhY3R1YWxWaWV3cG9y
dC5oZWlnaHQsIDAsIGdldE1heFZpZXdwb3J0RGltZW5zaW9uKCkpOworICAgIGR4Vmlld3BvcnQu
V2lkdGggPSBzdGQ6Om1pbigoaW50KWR4Vmlld3BvcnQuV2lkdGgsIHZpZXdwb3J0Qm91bmRzLmVu
ZCAtIHN0YXRpY19jYXN0PGludD4oZHhWaWV3cG9ydC5Ub3BMZWZ0WCkpOworICAgIGR4Vmlld3Bv
cnQuSGVpZ2h0ID0gc3RkOjptaW4oKGludClkeFZpZXdwb3J0LkhlaWdodCwgdmlld3BvcnRCb3Vu
ZHMuZW5kIC0gc3RhdGljX2Nhc3Q8aW50PihkeFZpZXdwb3J0LlRvcExlZnRZKSk7CisgICAgZHhW
aWV3cG9ydC5NaW5EZXB0aCA9IGFjdHVhbFpOZWFyOworICAgIGR4Vmlld3BvcnQuTWF4RGVwdGgg
PSBhY3R1YWxaRmFyOworCisgICAgaWYgKGR4Vmlld3BvcnQuV2lkdGggPD0gMCB8fCBkeFZpZXdw
b3J0LkhlaWdodCA8PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIE5vdGhp
bmcgdG8gcmVuZGVyCisgICAgfQorCisgICAgYm9vbCB2aWV3cG9ydENoYW5nZWQgPSBtRm9yY2VT
ZXRWaWV3cG9ydCB8fCBtZW1jbXAoJmFjdHVhbFZpZXdwb3J0LCAmbUN1clZpZXdwb3J0LCBzaXpl
b2YoZ2w6OlJlY3RhbmdsZSkpICE9IDAgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFj
dHVhbFpOZWFyICE9IG1DdXJOZWFyIHx8IGFjdHVhbFpGYXIgIT0gbUN1ckZhcjsKKworICAgIGlm
ICh2aWV3cG9ydENoYW5nZWQpCisgICAgeworICAgICAgICBtRGV2aWNlQ29udGV4dC0+UlNTZXRW
aWV3cG9ydHMoMSwgJmR4Vmlld3BvcnQpOworCisgICAgICAgIG1DdXJWaWV3cG9ydCA9IGFjdHVh
bFZpZXdwb3J0OworICAgICAgICBtQ3VyTmVhciA9IGFjdHVhbFpOZWFyOworICAgICAgICBtQ3Vy
RmFyID0gYWN0dWFsWkZhcjsKKworICAgICAgICBtUGl4ZWxDb25zdGFudHMudmlld0Nvb3Jkc1sw
XSA9IGFjdHVhbFZpZXdwb3J0LndpZHRoICAqIDAuNWY7CisgICAgICAgIG1QaXhlbENvbnN0YW50
cy52aWV3Q29vcmRzWzFdID0gYWN0dWFsVmlld3BvcnQuaGVpZ2h0ICogMC41ZjsKKyAgICAgICAg
bVBpeGVsQ29uc3RhbnRzLnZpZXdDb29yZHNbMl0gPSBhY3R1YWxWaWV3cG9ydC54ICsgKGFjdHVh
bFZpZXdwb3J0LndpZHRoICAqIDAuNWYpOworICAgICAgICBtUGl4ZWxDb25zdGFudHMudmlld0Nv
b3Jkc1szXSA9IGFjdHVhbFZpZXdwb3J0LnkgKyAoYWN0dWFsVmlld3BvcnQuaGVpZ2h0ICogMC41
Zik7CisKKyAgICAgICAgbVBpeGVsQ29uc3RhbnRzLmRlcHRoRnJvbnRbMF0gPSAoYWN0dWFsWkZh
ciAtIGFjdHVhbFpOZWFyKSAqIDAuNWY7CisgICAgICAgIG1QaXhlbENvbnN0YW50cy5kZXB0aEZy
b250WzFdID0gKGFjdHVhbFpOZWFyICsgYWN0dWFsWkZhcikgKiAwLjVmOworCisgICAgICAgIG1W
ZXJ0ZXhDb25zdGFudHMuZGVwdGhSYW5nZVswXSA9IGFjdHVhbFpOZWFyOworICAgICAgICBtVmVy
dGV4Q29uc3RhbnRzLmRlcHRoUmFuZ2VbMV0gPSBhY3R1YWxaRmFyOworICAgICAgICBtVmVydGV4
Q29uc3RhbnRzLmRlcHRoUmFuZ2VbMl0gPSBhY3R1YWxaRmFyIC0gYWN0dWFsWk5lYXI7CisKKyAg
ICAgICAgbVBpeGVsQ29uc3RhbnRzLmRlcHRoUmFuZ2VbMF0gPSBhY3R1YWxaTmVhcjsKKyAgICAg
ICAgbVBpeGVsQ29uc3RhbnRzLmRlcHRoUmFuZ2VbMV0gPSBhY3R1YWxaRmFyOworICAgICAgICBt
UGl4ZWxDb25zdGFudHMuZGVwdGhSYW5nZVsyXSA9IGFjdHVhbFpGYXIgLSBhY3R1YWxaTmVhcjsK
KyAgICB9CisKKyAgICBtRm9yY2VTZXRWaWV3cG9ydCA9IGZhbHNlOworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFJlbmRlcmVyMTE6OmFwcGx5UHJpbWl0aXZlVHlwZShHTGVudW0gbW9kZSwg
R0xzaXplaSBjb3VudCkKK3sKKyAgICBEM0QxMV9QUklNSVRJVkVfVE9QT0xPR1kgcHJpbWl0aXZl
VG9wb2xvZ3kgPSBEM0RfUFJJTUlUSVZFX1RPUE9MT0dZX1VOREVGSU5FRDsKKworICAgIEdMc2l6
ZWkgbWluQ291bnQgPSAwOworCisgICAgc3dpdGNoIChtb2RlKQorICAgIHsKKyAgICAgIGNhc2Ug
R0xfUE9JTlRTOiAgICAgICAgIHByaW1pdGl2ZVRvcG9sb2d5ID0gRDNEMTFfUFJJTUlUSVZFX1RP
UE9MT0dZX1BPSU5UTElTVDsgICBtaW5Db3VudCA9IDE7IGJyZWFrOworICAgICAgY2FzZSBHTF9M
SU5FUzogICAgICAgICAgcHJpbWl0aXZlVG9wb2xvZ3kgPSBEM0RfUFJJTUlUSVZFX1RPUE9MT0dZ
X0xJTkVMSVNUOyAgICAgIG1pbkNvdW50ID0gMjsgYnJlYWs7CisgICAgICBjYXNlIEdMX0xJTkVf
TE9PUDogICAgICBwcmltaXRpdmVUb3BvbG9neSA9IEQzRF9QUklNSVRJVkVfVE9QT0xPR1lfTElO
RVNUUklQOyAgICAgbWluQ291bnQgPSAyOyBicmVhazsKKyAgICAgIGNhc2UgR0xfTElORV9TVFJJ
UDogICAgIHByaW1pdGl2ZVRvcG9sb2d5ID0gRDNEX1BSSU1JVElWRV9UT1BPTE9HWV9MSU5FU1RS
SVA7ICAgICBtaW5Db3VudCA9IDI7IGJyZWFrOworICAgICAgY2FzZSBHTF9UUklBTkdMRVM6ICAg
ICAgcHJpbWl0aXZlVG9wb2xvZ3kgPSBEM0RfUFJJTUlUSVZFX1RPUE9MT0dZX1RSSUFOR0xFTElT
VDsgIG1pbkNvdW50ID0gMzsgYnJlYWs7CisgICAgICBjYXNlIEdMX1RSSUFOR0xFX1NUUklQOiBw
cmltaXRpdmVUb3BvbG9neSA9IEQzRF9QUklNSVRJVkVfVE9QT0xPR1lfVFJJQU5HTEVTVFJJUDsg
bWluQ291bnQgPSAzOyBicmVhazsKKyAgICAgICAgICAvLyBlbXVsYXRlIGZhbnMgdmlhIHJld3Jp
dGluZyBpbmRleCBidWZmZXIKKyAgICAgIGNhc2UgR0xfVFJJQU5HTEVfRkFOOiAgIHByaW1pdGl2
ZVRvcG9sb2d5ID0gRDNEX1BSSU1JVElWRV9UT1BPTE9HWV9UUklBTkdMRUxJU1Q7ICBtaW5Db3Vu
dCA9IDM7IGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0sIGZhbHNlKTsKKyAgICB9CisKKyAgICBpZiAocHJpbWl0aXZlVG9wb2xv
Z3kgIT0gbUN1cnJlbnRQcmltaXRpdmVUb3BvbG9neSkKKyAgICB7CisgICAgICAgIG1EZXZpY2VD
b250ZXh0LT5JQVNldFByaW1pdGl2ZVRvcG9sb2d5KHByaW1pdGl2ZVRvcG9sb2d5KTsKKyAgICAg
ICAgbUN1cnJlbnRQcmltaXRpdmVUb3BvbG9neSA9IHByaW1pdGl2ZVRvcG9sb2d5OworICAgIH0K
KworICAgIHJldHVybiBjb3VudCA+PSBtaW5Db3VudDsKK30KKworYm9vbCBSZW5kZXJlcjExOjph
cHBseVJlbmRlclRhcmdldChnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyKQoreworICAgIC8v
IEdldCB0aGUgY29sb3IgcmVuZGVyIGJ1ZmZlciBhbmQgc2VyaWFsCisgICAgLy8gQWxzbyBleHRy
YWN0IHRoZSByZW5kZXIgdGFyZ2V0IGRpbWVuc2lvbnMgYW5kIHZpZXcKKyAgICB1bnNpZ25lZCBp
bnQgcmVuZGVyVGFyZ2V0V2lkdGggPSAwOworICAgIHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRI
ZWlnaHQgPSAwOworICAgIEdMZW51bSByZW5kZXJUYXJnZXRGb3JtYXQgPSAwOworICAgIHVuc2ln
bmVkIGludCByZW5kZXJUYXJnZXRTZXJpYWxzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19C
VUZGRVJTXSA9IHswfTsKKyAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3KiBmcmFtZWJ1ZmZlclJU
VnNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlNdID0ge05VTEx9OworICAgIGJv
b2wgbWlzc2luZ0NvbG9yUmVuZGVyVGFyZ2V0ID0gdHJ1ZTsKKworICAgIGZvciAodW5zaWduZWQg
aW50IGNvbG9yQXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNobWVudCA8IGdsOjpJTVBMRU1FTlRB
VElPTl9NQVhfRFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQrKykKKyAgICB7CisgICAgICAg
IGNvbnN0IEdMZW51bSBkcmF3QnVmZmVyU3RhdGUgPSBmcmFtZWJ1ZmZlci0+Z2V0RHJhd0J1ZmZl
clN0YXRlKGNvbG9yQXR0YWNobWVudCk7CisKKyAgICAgICAgaWYgKGZyYW1lYnVmZmVyLT5nZXRD
b2xvcmJ1ZmZlclR5cGUoY29sb3JBdHRhY2htZW50KSAhPSBHTF9OT05FICYmIGRyYXdCdWZmZXJT
dGF0ZSAhPSBHTF9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICAvLyB0aGUgZHJhdyBidWZm
ZXIgbXVzdCBiZSBlaXRoZXIgIm5vbmUiLCAiYmFjayIgZm9yIHRoZSBkZWZhdWx0IGJ1ZmZlciBv
ciB0aGUgc2FtZSBpbmRleCBhcyB0aGlzIGNvbG9yIChpbiBvcmRlcikKKyAgICAgICAgICAgIEFT
U0VSVChkcmF3QnVmZmVyU3RhdGUgPT0gR0xfQkFDSyB8fCBkcmF3QnVmZmVyU3RhdGUgPT0gKEdM
X0NPTE9SX0FUVEFDSE1FTlQwX0VYVCArIGNvbG9yQXR0YWNobWVudCkpOworCisgICAgICAgICAg
ICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1
ZmZlcihjb2xvckF0dGFjaG1lbnQpOworCisgICAgICAgICAgICBpZiAoIWNvbG9yYnVmZmVyKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEVSUigicmVuZGVyIHRhcmdldCBwb2ludGVy
IHVuZXhwZWN0ZWRseSBudWxsLiIpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gY2hlY2sgZm9yIHplcm8tc2l6ZWQgZGVmYXVs
dCBmcmFtZWJ1ZmZlciwgd2hpY2ggaXMgYSBzcGVjaWFsIGNhc2UuCisgICAgICAgICAgICAvLyBp
biB0aGlzIGNhc2Ugd2UgZG8gbm90IHdpc2ggdG8gbW9kaWZ5IGFueSBzdGF0ZSBhbmQganVzdCBz
aWxlbnRseSByZXR1cm4gZmFsc2UuCisgICAgICAgICAgICAvLyB0aGlzIHdpbGwgbm90IHJlcG9y
dCBhbnkgZ2wgZXJyb3IgYnV0IHdpbGwgY2F1c2UgdGhlIGNhbGxpbmcgbWV0aG9kIHRvIHJldHVy
bi4KKyAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlci0+Z2V0V2lkdGgoKSA9PSAwIHx8IGNvbG9y
YnVmZmVyLT5nZXRIZWlnaHQoKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVuZGVyVGFyZ2V0
U2VyaWFsc1tjb2xvckF0dGFjaG1lbnRdID0gY29sb3JidWZmZXItPmdldFNlcmlhbCgpOworCisg
ICAgICAgICAgICAvLyBFeHRyYWN0IHRoZSByZW5kZXIgdGFyZ2V0IGRpbWVuc2lvbnMgYW5kIHZp
ZXcKKyAgICAgICAgICAgIFJlbmRlclRhcmdldDExICpyZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJn
ZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGNvbG9yYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSk7
CisgICAgICAgICAgICBpZiAoIXJlbmRlclRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBFUlIoInJlbmRlciB0YXJnZXQgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGZyYW1lYnVmZmVyUlRWc1tjb2xvckF0dGFjaG1lbnRdID0gcmVuZGVyVGFyZ2V0LT5nZXRS
ZW5kZXJUYXJnZXRWaWV3KCk7CisgICAgICAgICAgICBpZiAoIWZyYW1lYnVmZmVyUlRWc1tjb2xv
ckF0dGFjaG1lbnRdKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEVSUigicmVuZGVy
IHRhcmdldCB2aWV3IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobWlzc2lu
Z0NvbG9yUmVuZGVyVGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlbmRl
clRhcmdldFdpZHRoID0gY29sb3JidWZmZXItPmdldFdpZHRoKCk7CisgICAgICAgICAgICAgICAg
cmVuZGVyVGFyZ2V0SGVpZ2h0ID0gY29sb3JidWZmZXItPmdldEhlaWdodCgpOworICAgICAgICAg
ICAgICAgIHJlbmRlclRhcmdldEZvcm1hdCA9IGNvbG9yYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQo
KTsKKyAgICAgICAgICAgICAgICBtaXNzaW5nQ29sb3JSZW5kZXJUYXJnZXQgPSBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKworI2lmZGVmIF9ERUJVRworICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBm
b3IgRGVidWcgU0VUU0hBREVSUkVTT1VSQ0VTX0hBWkFSRCBEM0QxMSB3YXJuaW5ncworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgdmVydGV4U2VyaWFsSW5kZXggPSAwOyB2ZXJ0ZXhTZXJp
YWxJbmRleCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5J
VFM7IHZlcnRleFNlcmlhbEluZGV4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aWYgKGNvbG9yYnVmZmVyLT5nZXRUZXh0dXJlU2VyaWFsKCkgIT0gMCAmJiBtQ3VyVmVydGV4VGV4
dHVyZVNlcmlhbHNbdmVydGV4U2VyaWFsSW5kZXhdID09IGNvbG9yYnVmZmVyLT5nZXRUZXh0dXJl
U2VyaWFsKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzZXRUZXh0
dXJlKGdsOjpTQU1QTEVSX1ZFUlRFWCwgdmVydGV4U2VyaWFsSW5kZXgsIE5VTEwpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgcGl4ZWxTZXJpYWxJbmRleCA9IDA7IHBpeGVsU2VyaWFsSW5kZXggPCBnbDo6TUFYX1RFWFRV
UkVfSU1BR0VfVU5JVFM7IHBpeGVsU2VyaWFsSW5kZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpZiAoY29sb3JidWZmZXItPmdldFRleHR1cmVTZXJpYWwoKSAhPSAwICYmIG1D
dXJQaXhlbFRleHR1cmVTZXJpYWxzW3BpeGVsU2VyaWFsSW5kZXhdID09IGNvbG9yYnVmZmVyLT5n
ZXRUZXh0dXJlU2VyaWFsKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBzZXRUZXh0dXJlKGdsOjpTQU1QTEVSX1BJWEVMLCBwaXhlbFNlcmlhbEluZGV4LCBOVUxMKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIEdldCB0aGUgZGVwdGggc3RlbmNpbCByZW5kZXIgYnVmZmVyIGFuZCBzZXJp
YWxzCisgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqZGVwdGhTdGVuY2lsID0gTlVMTDsKKyAgICB1bnNp
Z25lZCBpbnQgZGVwdGhidWZmZXJTZXJpYWwgPSAwOworICAgIHVuc2lnbmVkIGludCBzdGVuY2ls
YnVmZmVyU2VyaWFsID0gMDsKKyAgICBpZiAoZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyVHlw
ZSgpICE9IEdMX05PTkUpCisgICAgeworICAgICAgICBkZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZl
ci0+Z2V0RGVwdGhidWZmZXIoKTsKKyAgICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpCisgICAgICAg
IHsKKyAgICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBu
dWxsLiIpOworICAgICAgICAgICAgU2FmZVJlbGVhc2UoZnJhbWVidWZmZXJSVFZzKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGRlcHRoYnVmZmVyU2Vy
aWFsID0gZGVwdGhTdGVuY2lsLT5nZXRTZXJpYWwoKTsKKyAgICB9CisgICAgZWxzZSBpZiAoZnJh
bWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKKyAgICB7CisgICAg
ICAgIGRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCk7CisgICAg
ICAgIGlmICghZGVwdGhTdGVuY2lsKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkRlcHRo
IHN0ZW5jaWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKKyAgICAgICAgICAgIFNhZmVS
ZWxlYXNlKGZyYW1lYnVmZmVyUlRWcyk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKworICAgICAgICBzdGVuY2lsYnVmZmVyU2VyaWFsID0gZGVwdGhTdGVuY2lsLT5nZXRT
ZXJpYWwoKTsKKyAgICB9CisKKyAgICAvLyBFeHRyYWN0IHRoZSBkZXB0aCBzdGVuY2lsIHNpemVz
IGFuZCB2aWV3CisgICAgdW5zaWduZWQgaW50IGRlcHRoU2l6ZSA9IDA7CisgICAgdW5zaWduZWQg
aW50IHN0ZW5jaWxTaXplID0gMDsKKyAgICBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3KiBmcmFtZWJ1
ZmZlckRTViA9IE5VTEw7CisgICAgaWYgKGRlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIFJl
bmRlclRhcmdldDExICpkZXB0aFN0ZW5jaWxSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6
bWFrZVJlbmRlclRhcmdldDExKGRlcHRoU3RlbmNpbC0+Z2V0RGVwdGhTdGVuY2lsKCkpOworICAg
ICAgICBpZiAoIWRlcHRoU3RlbmNpbFJlbmRlclRhcmdldCkKKyAgICAgICAgeworICAgICAgICAg
ICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7CisgICAg
ICAgICAgICBTYWZlUmVsZWFzZShmcmFtZWJ1ZmZlclJUVnMpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgZnJhbWVidWZmZXJEU1YgPSBkZXB0aFN0ZW5j
aWxSZW5kZXJUYXJnZXQtPmdldERlcHRoU3RlbmNpbFZpZXcoKTsKKyAgICAgICAgaWYgKCFmcmFt
ZWJ1ZmZlckRTVikKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJkZXB0aCBzdGVuY2lsIHZp
ZXcgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKKyAgICAgICAgICAgIFNhZmVSZWxlYXNl
KGZyYW1lYnVmZmVyUlRWcyk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KworICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyByZW5kZXIgYnVmZmVyLCB0aGUgd2lkdGgsIGhl
aWdodCBhbmQgZm9ybWF0IHZhbHVlcyBjb21lIGZyb20KKyAgICAgICAgLy8gdGhlIGRlcHRoIHN0
ZW5jaWwKKyAgICAgICAgaWYgKG1pc3NpbmdDb2xvclJlbmRlclRhcmdldCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmVuZGVyVGFyZ2V0V2lkdGggPSBkZXB0aFN0ZW5jaWwtPmdldFdpZHRoKCk7
CisgICAgICAgICAgICByZW5kZXJUYXJnZXRIZWlnaHQgPSBkZXB0aFN0ZW5jaWwtPmdldEhlaWdo
dCgpOworICAgICAgICAgICAgcmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZGVwdGhTdGVuY2lsLT5nZXRB
Y3R1YWxGb3JtYXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGRlcHRoU2l6ZSA9IGRlcHRoU3Rl
bmNpbC0+Z2V0RGVwdGhTaXplKCk7CisgICAgICAgIHN0ZW5jaWxTaXplID0gZGVwdGhTdGVuY2ls
LT5nZXRTdGVuY2lsU2l6ZSgpOworICAgIH0KKworICAgIC8vIEFwcGx5IHRoZSByZW5kZXIgdGFy
Z2V0IGFuZCBkZXB0aCBzdGVuY2lsCisgICAgaWYgKCFtUmVuZGVyVGFyZ2V0RGVzY0luaXRpYWxp
emVkIHx8ICFtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgfHwKKyAgICAgICAgbWVtY21wKHJlbmRl
clRhcmdldFNlcmlhbHMsIG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFscywgc2l6ZW9mKHJlbmRl
clRhcmdldFNlcmlhbHMpKSAhPSAwIHx8CisgICAgICAgIGRlcHRoYnVmZmVyU2VyaWFsICE9IG1B
cHBsaWVkRGVwdGhidWZmZXJTZXJpYWwgfHwKKyAgICAgICAgc3RlbmNpbGJ1ZmZlclNlcmlhbCAh
PSBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwpCisgICAgeworICAgICAgICBtRGV2aWNlQ29u
dGV4dC0+T01TZXRSZW5kZXJUYXJnZXRzKGdldE1heFJlbmRlclRhcmdldHMoKSwgZnJhbWVidWZm
ZXJSVFZzLCBmcmFtZWJ1ZmZlckRTVik7CisKKyAgICAgICAgbVJlbmRlclRhcmdldERlc2Mud2lk
dGggPSByZW5kZXJUYXJnZXRXaWR0aDsKKyAgICAgICAgbVJlbmRlclRhcmdldERlc2MuaGVpZ2h0
ID0gcmVuZGVyVGFyZ2V0SGVpZ2h0OworICAgICAgICBtUmVuZGVyVGFyZ2V0RGVzYy5mb3JtYXQg
PSByZW5kZXJUYXJnZXRGb3JtYXQ7CisgICAgICAgIG1Gb3JjZVNldFZpZXdwb3J0ID0gdHJ1ZTsK
KyAgICAgICAgbUZvcmNlU2V0U2Npc3NvciA9IHRydWU7CisKKyAgICAgICAgaWYgKCFtRGVwdGhT
dGVuY2lsSW5pdGlhbGl6ZWQgfHwgZGVwdGhTaXplICE9IG1DdXJEZXB0aFNpemUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1DdXJEZXB0aFNpemUgPSBkZXB0aFNpemU7CisgICAgICAgICAgICBt
Rm9yY2VTZXRSYXN0ZXJTdGF0ZSA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBtQ3VyU3Rl
bmNpbFNpemUgPSBzdGVuY2lsU2l6ZTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBydElu
ZGV4ID0gMDsgcnRJbmRleCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTOyBy
dEluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2Vy
aWFsc1tydEluZGV4XSA9IHJlbmRlclRhcmdldFNlcmlhbHNbcnRJbmRleF07CisgICAgICAgIH0K
KyAgICAgICAgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCA9IGRlcHRoYnVmZmVyU2VyaWFsOwor
ICAgICAgICBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwgPSBzdGVuY2lsYnVmZmVyU2VyaWFs
OworICAgICAgICBtUmVuZGVyVGFyZ2V0RGVzY0luaXRpYWxpemVkID0gdHJ1ZTsKKyAgICAgICAg
bURlcHRoU3RlbmNpbEluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworR0xlbnVtIFJlbmRlcmVyMTE6OmFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0
ZXNbXSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQorewor
ICAgIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0cmlidXRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJT
XTsKKyAgICBHTGVudW0gZXJyID0gbVZlcnRleERhdGFNYW5hZ2VyLT5wcmVwYXJlVmVydGV4RGF0
YSh2ZXJ0ZXhBdHRyaWJ1dGVzLCBwcm9ncmFtQmluYXJ5LCBmaXJzdCwgY291bnQsIGF0dHJpYnV0
ZXMsIGluc3RhbmNlcyk7CisgICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgcmV0dXJuIG1JbnB1dExheW91dENhY2hlLmFw
cGx5VmVydGV4QnVmZmVycyhhdHRyaWJ1dGVzLCBwcm9ncmFtQmluYXJ5KTsKK30KKworR0xlbnVt
IFJlbmRlcmVyMTE6OmFwcGx5SW5kZXhCdWZmZXIoY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6
QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIEdMc2l6ZWkgY291bnQsIEdMZW51bSBtb2RlLCBH
TGVudW0gdHlwZSwgVHJhbnNsYXRlZEluZGV4RGF0YSAqaW5kZXhJbmZvKQoreworICAgIEdMZW51
bSBlcnIgPSBtSW5kZXhEYXRhTWFuYWdlci0+cHJlcGFyZUluZGV4RGF0YSh0eXBlLCBjb3VudCwg
ZWxlbWVudEFycmF5QnVmZmVyLCBpbmRpY2VzLCBpbmRleEluZm8pOworCisgICAgaWYgKGVyciA9
PSBHTF9OT19FUlJPUikKKyAgICB7CisgICAgICAgIGlmIChpbmRleEluZm8tPnN0b3JhZ2UpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbmRleEluZm8tPnNlcmlhbCAhPSBtQXBwbGllZFN0
b3JhZ2VJQlNlcmlhbCB8fCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0ICE9IG1BcHBsaWVkSUJPZmZz
ZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQnVmZmVyU3RvcmFnZTExICpzdG9y
YWdlID0gQnVmZmVyU3RvcmFnZTExOjptYWtlQnVmZmVyU3RvcmFnZTExKGluZGV4SW5mby0+c3Rv
cmFnZSk7CisgICAgICAgICAgICAgICAgSW5kZXhCdWZmZXIxMSogaW5kZXhCdWZmZXIgPSBJbmRl
eEJ1ZmZlcjExOjptYWtlSW5kZXhCdWZmZXIxMShpbmRleEluZm8tPmluZGV4QnVmZmVyKTsKKwor
ICAgICAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldEluZGV4QnVmZmVyKHN0b3JhZ2Ut
PmdldEJ1ZmZlcihCVUZGRVJfVVNBR0VfSU5ERVgpLCBpbmRleEJ1ZmZlci0+Z2V0SW5kZXhGb3Jt
YXQoKSwgaW5kZXhJbmZvLT5zdGFydE9mZnNldCk7CisKKyAgICAgICAgICAgICAgICBtQXBwbGll
ZElCU2VyaWFsID0gMDsKKyAgICAgICAgICAgICAgICBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbCA9
IHN0b3JhZ2UtPmdldFNlcmlhbCgpOworICAgICAgICAgICAgICAgIG1BcHBsaWVkSUJPZmZzZXQg
PSBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKGluZGV4SW5mby0+c2VyaWFsICE9IG1BcHBsaWVkSUJTZXJpYWwgfHwgaW5k
ZXhJbmZvLT5zdGFydE9mZnNldCAhPSBtQXBwbGllZElCT2Zmc2V0KQorICAgICAgICB7CisgICAg
ICAgICAgICBJbmRleEJ1ZmZlcjExKiBpbmRleEJ1ZmZlciA9IEluZGV4QnVmZmVyMTE6Om1ha2VJ
bmRleEJ1ZmZlcjExKGluZGV4SW5mby0+aW5kZXhCdWZmZXIpOworCisgICAgICAgICAgICBtRGV2
aWNlQ29udGV4dC0+SUFTZXRJbmRleEJ1ZmZlcihpbmRleEJ1ZmZlci0+Z2V0QnVmZmVyKCksIGlu
ZGV4QnVmZmVyLT5nZXRJbmRleEZvcm1hdCgpLCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0KTsKKwor
ICAgICAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IGluZGV4SW5mby0+c2VyaWFsOworICAgICAg
ICAgICAgbUFwcGxpZWRTdG9yYWdlSUJTZXJpYWwgPSAwOworICAgICAgICAgICAgbUFwcGxpZWRJ
Qk9mZnNldCA9IGluZGV4SW5mby0+c3RhcnRPZmZzZXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gZXJyOworfQorCit2b2lkIFJlbmRlcmVyMTE6OmRyYXdBcnJheXMoR0xlbnVtIG1v
ZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQoreworICAgIGlmIChtb2RlID09
IEdMX0xJTkVfTE9PUCkKKyAgICB7CisgICAgICAgIGRyYXdMaW5lTG9vcChjb3VudCwgR0xfTk9O
RSwgTlVMTCwgMCwgTlVMTCk7CisgICAgfQorICAgIGVsc2UgaWYgKG1vZGUgPT0gR0xfVFJJQU5H
TEVfRkFOKQorICAgIHsKKyAgICAgICAgZHJhd1RyaWFuZ2xlRmFuKGNvdW50LCBHTF9OT05FLCBO
VUxMLCAwLCBOVUxMLCBpbnN0YW5jZXMpOworICAgIH0KKyAgICBlbHNlIGlmIChpbnN0YW5jZXMg
PiAwKQorICAgIHsKKyAgICAgICAgbURldmljZUNvbnRleHQtPkRyYXdJbnN0YW5jZWQoY291bnQs
IGluc3RhbmNlcywgMCwgMCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1EZXZp
Y2VDb250ZXh0LT5EcmF3KGNvdW50LCAwKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6
ZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29u
c3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0
IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMpCit7Cisg
ICAgaWYgKG1vZGUgPT0gR0xfTElORV9MT09QKQorICAgIHsKKyAgICAgICAgZHJhd0xpbmVMb29w
KGNvdW50LCB0eXBlLCBpbmRpY2VzLCBpbmRleEluZm8ubWluSW5kZXgsIGVsZW1lbnRBcnJheUJ1
ZmZlcik7CisgICAgfQorICAgIGVsc2UgaWYgKG1vZGUgPT0gR0xfVFJJQU5HTEVfRkFOKQorICAg
IHsKKyAgICAgICAgZHJhd1RyaWFuZ2xlRmFuKGNvdW50LCB0eXBlLCBpbmRpY2VzLCBpbmRleElu
Zm8ubWluSW5kZXgsIGVsZW1lbnRBcnJheUJ1ZmZlciwgaW5zdGFuY2VzKTsKKyAgICB9CisgICAg
ZWxzZSBpZiAoaW5zdGFuY2VzID4gMCkKKyAgICB7CisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5E
cmF3SW5kZXhlZEluc3RhbmNlZChjb3VudCwgaW5zdGFuY2VzLCAwLCAtc3RhdGljX2Nhc3Q8aW50
PihpbmRleEluZm8ubWluSW5kZXgpLCAwKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgbURldmljZUNvbnRleHQtPkRyYXdJbmRleGVkKGNvdW50LCAwLCAtc3RhdGljX2Nhc3Q8aW50
PihpbmRleEluZm8ubWluSW5kZXgpKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6ZHJh
d0xpbmVMb29wKEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGlj
ZXMsIGludCBtaW5JbmRleCwgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyKQoreworICAg
IC8vIEdldCB0aGUgcmF3IGluZGljZXMgZm9yIGFuIGluZGV4ZWQgZHJhdworICAgIGlmICh0eXBl
ICE9IEdMX05PTkUgJiYgZWxlbWVudEFycmF5QnVmZmVyKQorICAgIHsKKyAgICAgICAgZ2w6OkJ1
ZmZlciAqaW5kZXhCdWZmZXIgPSBlbGVtZW50QXJyYXlCdWZmZXI7CisgICAgICAgIEJ1ZmZlclN0
b3JhZ2UgKnN0b3JhZ2UgPSBpbmRleEJ1ZmZlci0+Z2V0U3RvcmFnZSgpOworICAgICAgICBpbnRw
dHJfdCBvZmZzZXQgPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmRpY2VzKTsKKyAgICAg
ICAgaW5kaWNlcyA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihzdG9yYWdlLT5nZXREYXRh
KCkpICsgb2Zmc2V0OworICAgIH0KKworICAgIGlmICghbUxpbmVMb29wSUIpCisgICAgeworICAg
ICAgICBtTGluZUxvb3BJQiA9IG5ldyBTdHJlYW1pbmdJbmRleEJ1ZmZlckludGVyZmFjZSh0aGlz
KTsKKyAgICAgICAgaWYgKCFtTGluZUxvb3BJQi0+cmVzZXJ2ZUJ1ZmZlclNwYWNlKElOSVRJQUxf
SU5ERVhfQlVGRkVSX1NJWkUsIEdMX1VOU0lHTkVEX0lOVCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGRlbGV0ZSBtTGluZUxvb3BJQjsKKyAgICAgICAgICAgIG1MaW5lTG9vcElCID0gTlVMTDsK
KworICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGEgMzItYml0IGxvb3BpbmcgaW5k
ZXggYnVmZmVyIGZvciBHTF9MSU5FX0xPT1AuIik7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ2hlY2tl
ZCBieSBSZW5kZXJlcjExOjphcHBseVByaW1pdGl2ZVR5cGUKKyAgICBBU1NFUlQoY291bnQgPj0g
MCk7CisKKyAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihjb3VudCkgKyAxID4gKHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLyBzaXplb2YodW5zaWduZWQg
aW50KSkpCisgICAgeworICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSAzMi1iaXQgbG9v
cGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUCwgdG9vIG1hbnkgaW5kaWNlcyByZXF1
aXJlZC4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9CisKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgc3BhY2VOZWVkZWQgPSAoc3RhdGljX2Nhc3Q8
dW5zaWduZWQgaW50Pihjb3VudCkgKyAxKSAqIHNpemVvZih1bnNpZ25lZCBpbnQpOworICAgIGlm
ICghbUxpbmVMb29wSUItPnJlc2VydmVCdWZmZXJTcGFjZShzcGFjZU5lZWRlZCwgR0xfVU5TSUdO
RURfSU5UKSkKKyAgICB7CisgICAgICAgIEVSUigiQ291bGQgbm90IHJlc2VydmUgZW5vdWdoIHNw
YWNlIGluIGxvb3BpbmcgaW5kZXggYnVmZmVyIGZvciBHTF9MSU5FX0xPT1AuIik7CisgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorCisgICAgdm9pZCog
bWFwcGVkTWVtb3J5ID0gTlVMTDsKKyAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0OworICAgIGlmICgh
bUxpbmVMb29wSUItPm1hcEJ1ZmZlcihzcGFjZU5lZWRlZCwgJm1hcHBlZE1lbW9yeSwgJm9mZnNl
dCkpCisgICAgeworICAgICAgICBFUlIoIkNvdWxkIG5vdCBtYXAgaW5kZXggYnVmZmVyIGZvciBH
TF9MSU5FX0xPT1AuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorCisgICAgdW5zaWduZWQgaW50ICpkYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBpbnQqPihtYXBwZWRNZW1vcnkpOworICAgIHVuc2lnbmVkIGludCBpbmRleEJ1ZmZl
ck9mZnNldCA9IG9mZnNldDsKKworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNl
IEdMX05PTkU6ICAgLy8gTm9uLWluZGV4ZWQgZHJhdworICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGRhdGFbaV0gPSBpOworICAg
ICAgICB9CisgICAgICAgIGRhdGFbY291bnRdID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0
IEdMdWJ5dGUqPihpbmRpY2VzKVtpXTsKKyAgICAgICAgfQorICAgICAgICBkYXRhW2NvdW50XSA9
IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKVswXTsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgorICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNf
Y2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpW2ldOworICAgICAgICB9CisgICAgICAgIGRh
dGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVswXTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBkYXRhW2ld
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1aW50Kj4oaW5kaWNlcylbaV07CisgICAgICAgIH0KKyAg
ICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVsw
XTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0K
KworICAgIGlmICghbUxpbmVMb29wSUItPnVubWFwQnVmZmVyKCkpCisgICAgeworICAgICAgICBF
UlIoIkNvdWxkIG5vdCB1bm1hcCBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisKKyAgICBp
ZiAobUFwcGxpZWRJQlNlcmlhbCAhPSBtTGluZUxvb3BJQi0+Z2V0U2VyaWFsKCkgfHwgbUFwcGxp
ZWRJQk9mZnNldCAhPSBpbmRleEJ1ZmZlck9mZnNldCkKKyAgICB7CisgICAgICAgIEluZGV4QnVm
ZmVyMTEgKmluZGV4QnVmZmVyID0gSW5kZXhCdWZmZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEobUxp
bmVMb29wSUItPmdldEluZGV4QnVmZmVyKCkpOworCisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5J
QVNldEluZGV4QnVmZmVyKGluZGV4QnVmZmVyLT5nZXRCdWZmZXIoKSwgaW5kZXhCdWZmZXItPmdl
dEluZGV4Rm9ybWF0KCksIGluZGV4QnVmZmVyT2Zmc2V0KTsKKyAgICAgICAgbUFwcGxpZWRJQlNl
cmlhbCA9IG1MaW5lTG9vcElCLT5nZXRTZXJpYWwoKTsKKyAgICAgICAgbUFwcGxpZWRTdG9yYWdl
SUJTZXJpYWwgPSAwOworICAgICAgICBtQXBwbGllZElCT2Zmc2V0ID0gaW5kZXhCdWZmZXJPZmZz
ZXQ7CisgICAgfQorCisgICAgbURldmljZUNvbnRleHQtPkRyYXdJbmRleGVkKGNvdW50ICsgMSwg
MCwgLW1pbkluZGV4KTsKK30KKwordm9pZCBSZW5kZXJlcjExOjpkcmF3VHJpYW5nbGVGYW4oR0xz
aXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgaW50IG1pbklu
ZGV4LCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGludCBpbnN0YW5jZXMpCit7Cisg
ICAgLy8gR2V0IHRoZSByYXcgaW5kaWNlcyBmb3IgYW4gaW5kZXhlZCBkcmF3CisgICAgaWYgKHR5
cGUgIT0gR0xfTk9ORSAmJiBlbGVtZW50QXJyYXlCdWZmZXIpCisgICAgeworICAgICAgICBnbDo6
QnVmZmVyICppbmRleEJ1ZmZlciA9IGVsZW1lbnRBcnJheUJ1ZmZlcjsKKyAgICAgICAgQnVmZmVy
U3RvcmFnZSAqc3RvcmFnZSA9IGluZGV4QnVmZmVyLT5nZXRTdG9yYWdlKCk7CisgICAgICAgIGlu
dHB0cl90IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZGljZXMpOworICAg
ICAgICBpbmRpY2VzID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KHN0b3JhZ2UtPmdldERh
dGEoKSkgKyBvZmZzZXQ7CisgICAgfQorCisgICAgaWYgKCFtVHJpYW5nbGVGYW5JQikKKyAgICB7
CisgICAgICAgIG1UcmlhbmdsZUZhbklCID0gbmV3IFN0cmVhbWluZ0luZGV4QnVmZmVySW50ZXJm
YWNlKHRoaXMpOworICAgICAgICBpZiAoIW1UcmlhbmdsZUZhbklCLT5yZXNlcnZlQnVmZmVyU3Bh
Y2UoSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwgR0xfVU5TSUdORURfSU5UKSkKKyAgICAgICAg
eworICAgICAgICAgICAgZGVsZXRlIG1UcmlhbmdsZUZhbklCOworICAgICAgICAgICAgbVRyaWFu
Z2xlRmFuSUIgPSBOVUxMOworCisgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSBz
Y3JhdGNoIGluZGV4IGJ1ZmZlciBmb3IgR0xfVFJJQU5HTEVfRkFOLiIpOworICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIENoZWNrZWQgYnkgUmVuZGVyZXIxMTo6YXBwbHlQcmltaXRpdmVUeXBlCisgICAgQVNT
RVJUKGNvdW50ID49IDMpOworCisgICAgY29uc3QgdW5zaWduZWQgaW50IG51bVRyaXMgPSBjb3Vu
dCAtIDI7CisKKyAgICBpZiAobnVtVHJpcyA+IChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
IGludD46Om1heCgpIC8gKHNpemVvZih1bnNpZ25lZCBpbnQpICogMykpKQorICAgIHsKKyAgICAg
ICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGEgc2NyYXRjaCBpbmRleCBidWZmZXIgZm9yIEdMX1RS
SUFOR0xFX0ZBTiwgdG9vIG1hbnkgaW5kaWNlcyByZXF1aXJlZC4iKTsKKyAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisKKyAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgc3BhY2VOZWVkZWQgPSAobnVtVHJpcyAqIDMpICogc2l6ZW9mKHVuc2lnbmVkIGludCk7
CisgICAgaWYgKCFtVHJpYW5nbGVGYW5JQi0+cmVzZXJ2ZUJ1ZmZlclNwYWNlKHNwYWNlTmVlZGVk
LCBHTF9VTlNJR05FRF9JTlQpKQorICAgIHsKKyAgICAgICAgRVJSKCJDb3VsZCBub3QgcmVzZXJ2
ZSBlbm91Z2ggc3BhY2UgaW4gc2NyYXRjaCBpbmRleCBidWZmZXIgZm9yIEdMX1RSSUFOR0xFX0ZB
Ti4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
CisKKyAgICB2b2lkKiBtYXBwZWRNZW1vcnkgPSBOVUxMOworICAgIHVuc2lnbmVkIGludCBvZmZz
ZXQ7CisgICAgaWYgKCFtVHJpYW5nbGVGYW5JQi0+bWFwQnVmZmVyKHNwYWNlTmVlZGVkLCAmbWFw
cGVkTWVtb3J5LCAmb2Zmc2V0KSkKKyAgICB7CisgICAgICAgIEVSUigiQ291bGQgbm90IG1hcCBz
Y3JhdGNoIGluZGV4IGJ1ZmZlciBmb3IgR0xfVFJJQU5HTEVfRkFOLiIpOworICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KKworICAgIHVuc2lnbmVkIGlu
dCAqZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4obWFwcGVkTWVtb3J5KTsK
KyAgICB1bnNpZ25lZCBpbnQgaW5kZXhCdWZmZXJPZmZzZXQgPSBvZmZzZXQ7CisKKyAgICBzd2l0
Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9OT05FOiAgIC8vIE5vbi1pbmRleGVkIGRy
YXcKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1UcmlzOyBpKyspCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGRhdGFbaSozICsgMF0gPSAwOworICAgICAgICAgICAgZGF0
YVtpKjMgKyAxXSA9IGkgKyAxOworICAgICAgICAgICAgZGF0YVtpKjMgKyAyXSA9IGkgKyAyOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVRyaXM7IGkrKykKKyAgICAg
ICAgeworICAgICAgICAgICAgZGF0YVtpKjMgKyAwXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5
dGUqPihpbmRpY2VzKVswXTsKKyAgICAgICAgICAgIGRhdGFbaSozICsgMV0gPSBzdGF0aWNfY2Fz
dDxjb25zdCBHTHVieXRlKj4oaW5kaWNlcylbaSArIDFdOworICAgICAgICAgICAgZGF0YVtpKjMg
KyAyXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKVtpICsgMl07CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgorICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVRyaXM7IGkrKykKKyAgICAgICAg
eworICAgICAgICAgICAgZGF0YVtpKjMgKyAwXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0
Kj4oaW5kaWNlcylbMF07CisgICAgICAgICAgICBkYXRhW2kqMyArIDFdID0gc3RhdGljX2Nhc3Q8
Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVtpICsgMV07CisgICAgICAgICAgICBkYXRhW2kqMyAr
IDJdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVtpICsgMl07CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1UcmlzOyBpKyspCisgICAgICAgIHsK
KyAgICAgICAgICAgIGRhdGFbaSozICsgMF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihp
bmRpY2VzKVswXTsKKyAgICAgICAgICAgIGRhdGFbaSozICsgMV0gPSBzdGF0aWNfY2FzdDxjb25z
dCBHTHVpbnQqPihpbmRpY2VzKVtpICsgMV07CisgICAgICAgICAgICBkYXRhW2kqMyArIDJdID0g
c3RhdGljX2Nhc3Q8Y29uc3QgR0x1aW50Kj4oaW5kaWNlcylbaSArIDJdOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAg
ICBpZiAoIW1UcmlhbmdsZUZhbklCLT51bm1hcEJ1ZmZlcigpKQorICAgIHsKKyAgICAgICAgRVJS
KCJDb3VsZCBub3QgdW5tYXAgc2NyYXRjaCBpbmRleCBidWZmZXIgZm9yIEdMX1RSSUFOR0xFX0ZB
Ti4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
CisKKyAgICBpZiAobUFwcGxpZWRJQlNlcmlhbCAhPSBtVHJpYW5nbGVGYW5JQi0+Z2V0U2VyaWFs
KCkgfHwgbUFwcGxpZWRJQk9mZnNldCAhPSBpbmRleEJ1ZmZlck9mZnNldCkKKyAgICB7CisgICAg
ICAgIEluZGV4QnVmZmVyMTEgKmluZGV4QnVmZmVyID0gSW5kZXhCdWZmZXIxMTo6bWFrZUluZGV4
QnVmZmVyMTEobVRyaWFuZ2xlRmFuSUItPmdldEluZGV4QnVmZmVyKCkpOworCisgICAgICAgIG1E
ZXZpY2VDb250ZXh0LT5JQVNldEluZGV4QnVmZmVyKGluZGV4QnVmZmVyLT5nZXRCdWZmZXIoKSwg
aW5kZXhCdWZmZXItPmdldEluZGV4Rm9ybWF0KCksIGluZGV4QnVmZmVyT2Zmc2V0KTsKKyAgICAg
ICAgbUFwcGxpZWRJQlNlcmlhbCA9IG1UcmlhbmdsZUZhbklCLT5nZXRTZXJpYWwoKTsKKyAgICAg
ICAgbUFwcGxpZWRTdG9yYWdlSUJTZXJpYWwgPSAwOworICAgICAgICBtQXBwbGllZElCT2Zmc2V0
ID0gaW5kZXhCdWZmZXJPZmZzZXQ7CisgICAgfQorCisgICAgaWYgKGluc3RhbmNlcyA+IDApCisg
ICAgeworICAgICAgICBtRGV2aWNlQ29udGV4dC0+RHJhd0luZGV4ZWRJbnN0YW5jZWQobnVtVHJp
cyAqIDMsIGluc3RhbmNlcywgMCwgLW1pbkluZGV4LCAwKTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgbURldmljZUNvbnRleHQtPkRyYXdJbmRleGVkKG51bVRyaXMgKiAzLCAwLCAt
bWluSW5kZXgpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJlcjExOjphcHBseVNoYWRlcnMoZ2w6
OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpCit7CisgICAgdW5zaWduZWQgaW50IHByb2dy
YW1CaW5hcnlTZXJpYWwgPSBwcm9ncmFtQmluYXJ5LT5nZXRTZXJpYWwoKTsKKyAgICBjb25zdCBi
b29sIHVwZGF0ZVByb2dyYW1TdGF0ZSA9IChwcm9ncmFtQmluYXJ5U2VyaWFsICE9IG1BcHBsaWVk
UHJvZ3JhbUJpbmFyeVNlcmlhbCk7CisKKyAgICBpZiAodXBkYXRlUHJvZ3JhbVN0YXRlKQorICAg
IHsKKyAgICAgICAgU2hhZGVyRXhlY3V0YWJsZSAqdmVydGV4RXhlID0gcHJvZ3JhbUJpbmFyeS0+
Z2V0VmVydGV4RXhlY3V0YWJsZSgpOworICAgICAgICBTaGFkZXJFeGVjdXRhYmxlICpwaXhlbEV4
ZSA9IHByb2dyYW1CaW5hcnktPmdldFBpeGVsRXhlY3V0YWJsZSgpOworCisgICAgICAgIElEM0Qx
MVZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyID0gTlVMTDsKKyAgICAgICAgaWYgKHZlcnRleEV4
ZSkgdmVydGV4U2hhZGVyID0gU2hhZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJs
ZTExKHZlcnRleEV4ZSktPmdldFZlcnRleFNoYWRlcigpOworCisgICAgICAgIElEM0QxMVBpeGVs
U2hhZGVyICpwaXhlbFNoYWRlciA9IE5VTEw7CisgICAgICAgIGlmIChwaXhlbEV4ZSkgcGl4ZWxT
aGFkZXIgPSBTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VTaGFkZXJFeGVjdXRhYmxlMTEocGl4ZWxF
eGUpLT5nZXRQaXhlbFNoYWRlcigpOworCisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNo
YWRlcihwaXhlbFNoYWRlciwgTlVMTCwgMCk7CisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5WU1Nl
dFNoYWRlcih2ZXJ0ZXhTaGFkZXIsIE5VTEwsIDApOworCisgICAgICAgIHByb2dyYW1CaW5hcnkt
PmRpcnR5QWxsVW5pZm9ybXMoKTsKKworICAgICAgICBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJp
YWwgPSBwcm9ncmFtQmluYXJ5U2VyaWFsOworICAgIH0KKworICAgIC8vIE9ubHkgdXNlIHRoZSBn
ZW9tZXRyeSBzaGFkZXIgY3VycmVudGx5IGZvciBwb2ludCBzcHJpdGUgZHJhd2luZworICAgIGNv
bnN0IGJvb2wgdXNlc0dlb21ldHJ5U2hhZGVyID0gKHByb2dyYW1CaW5hcnktPnVzZXNHZW9tZXRy
eVNoYWRlcigpICYmIG1DdXJSYXN0ZXJTdGF0ZS5wb2ludERyYXdNb2RlKTsKKworICAgIGlmICh1
cGRhdGVQcm9ncmFtU3RhdGUgfHwgdXNlc0dlb21ldHJ5U2hhZGVyICE9IG1Jc0dlb21ldHJ5U2hh
ZGVyQWN0aXZlKQorICAgIHsKKyAgICAgICAgaWYgKHVzZXNHZW9tZXRyeVNoYWRlcikKKyAgICAg
ICAgeworICAgICAgICAgICAgU2hhZGVyRXhlY3V0YWJsZSAqZ2VvbWV0cnlFeGUgPSBwcm9ncmFt
QmluYXJ5LT5nZXRHZW9tZXRyeUV4ZWN1dGFibGUoKTsKKyAgICAgICAgICAgIElEM0QxMUdlb21l
dHJ5U2hhZGVyICpnZW9tZXRyeVNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRl
ckV4ZWN1dGFibGUxMShnZW9tZXRyeUV4ZSktPmdldEdlb21ldHJ5U2hhZGVyKCk7CisgICAgICAg
ICAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIoZ2VvbWV0cnlTaGFkZXIsIE5VTEwsIDAp
OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbURldmlj
ZUNvbnRleHQtPkdTU2V0U2hhZGVyKE5VTEwsIE5VTEwsIDApOworICAgICAgICB9CisKKyAgICAg
ICAgbUlzR2VvbWV0cnlTaGFkZXJBY3RpdmUgPSB1c2VzR2VvbWV0cnlTaGFkZXI7CisgICAgfQor
fQorCit2b2lkIFJlbmRlcmVyMTE6OmFwcGx5VW5pZm9ybXMoZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnksIGdsOjpVbmlmb3JtQXJyYXkgKnVuaWZvcm1BcnJheSkKK3sKKyAgICBTaGFk
ZXJFeGVjdXRhYmxlMTEgKnZlcnRleEV4ZWN1dGFibGUgPSBTaGFkZXJFeGVjdXRhYmxlMTE6Om1h
a2VTaGFkZXJFeGVjdXRhYmxlMTEocHJvZ3JhbUJpbmFyeS0+Z2V0VmVydGV4RXhlY3V0YWJsZSgp
KTsKKyAgICBTaGFkZXJFeGVjdXRhYmxlMTEgKnBpeGVsRXhlY3V0YWJsZSA9IFNoYWRlckV4ZWN1
dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShwcm9ncmFtQmluYXJ5LT5nZXRQaXhlbEV4
ZWN1dGFibGUoKSk7CisKKyAgICB1bnNpZ25lZCBpbnQgdG90YWxSZWdpc3RlckNvdW50VlMgPSAw
OworICAgIHVuc2lnbmVkIGludCB0b3RhbFJlZ2lzdGVyQ291bnRQUyA9IDA7CisKKyAgICBib29s
IHZlcnRleFVuaWZvcm1zRGlydHkgPSBmYWxzZTsKKyAgICBib29sIHBpeGVsVW5pZm9ybXNEaXJ0
eSA9IGZhbHNlOworCisgICAgZm9yIChnbDo6VW5pZm9ybUFycmF5Ojpjb25zdF9pdGVyYXRvciB1
bmlmb3JtX2l0ZXJhdG9yID0gdW5pZm9ybUFycmF5LT5iZWdpbigpOyB1bmlmb3JtX2l0ZXJhdG9y
ICE9IHVuaWZvcm1BcnJheS0+ZW5kKCk7IHVuaWZvcm1faXRlcmF0b3IrKykKKyAgICB7CisgICAg
ICAgIGNvbnN0IGdsOjpVbmlmb3JtICp1bmlmb3JtID0gKnVuaWZvcm1faXRlcmF0b3I7CisKKyAg
ICAgICAgaWYgKHVuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleCA+PSAwKQorICAgICAgICB7CisgICAg
ICAgICAgICB0b3RhbFJlZ2lzdGVyQ291bnRWUyArPSB1bmlmb3JtLT5yZWdpc3RlckNvdW50Owor
ICAgICAgICAgICAgdmVydGV4VW5pZm9ybXNEaXJ0eSA9IHZlcnRleFVuaWZvcm1zRGlydHkgfHwg
dW5pZm9ybS0+ZGlydHk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodW5pZm9ybS0+cHNSZWdp
c3RlckluZGV4ID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHRvdGFsUmVnaXN0ZXJDb3Vu
dFBTICs9IHVuaWZvcm0tPnJlZ2lzdGVyQ291bnQ7CisgICAgICAgICAgICBwaXhlbFVuaWZvcm1z
RGlydHkgPSBwaXhlbFVuaWZvcm1zRGlydHkgfHwgdW5pZm9ybS0+ZGlydHk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBJRDNEMTFCdWZmZXIgKnZlcnRleENvbnN0YW50QnVmZmVyID0gdmVydGV4
RXhlY3V0YWJsZS0+Z2V0Q29uc3RhbnRCdWZmZXIobURldmljZSwgdG90YWxSZWdpc3RlckNvdW50
VlMpOworICAgIElEM0QxMUJ1ZmZlciAqcGl4ZWxDb25zdGFudEJ1ZmZlciA9IHBpeGVsRXhlY3V0
YWJsZS0+Z2V0Q29uc3RhbnRCdWZmZXIobURldmljZSwgdG90YWxSZWdpc3RlckNvdW50UFMpOwor
CisgICAgZmxvYXQgKCptYXBWUylbNF0gPSBOVUxMOworICAgIGZsb2F0ICgqbWFwUFMpWzRdID0g
TlVMTDsKKworICAgIGlmICh0b3RhbFJlZ2lzdGVyQ291bnRWUyA+IDAgJiYgdmVydGV4VW5pZm9y
bXNEaXJ0eSkKKyAgICB7CisgICAgICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXAgPSB7
MH07CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZUNvbnRleHQtPk1hcCh2ZXJ0ZXhD
b25zdGFudEJ1ZmZlciwgMCwgRDNEMTFfTUFQX1dSSVRFX0RJU0NBUkQsIDAsICZtYXApOworICAg
ICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICBtYXBWUyA9IChmbG9hdCgq
KVs0XSltYXAucERhdGE7CisgICAgfQorCisgICAgaWYgKHRvdGFsUmVnaXN0ZXJDb3VudFBTID4g
MCAmJiBwaXhlbFVuaWZvcm1zRGlydHkpCisgICAgeworICAgICAgICBEM0QxMV9NQVBQRURfU1VC
UkVTT1VSQ0UgbWFwID0gezB9OworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2VDb250
ZXh0LT5NYXAocGl4ZWxDb25zdGFudEJ1ZmZlciwgMCwgRDNEMTFfTUFQX1dSSVRFX0RJU0NBUkQs
IDAsICZtYXApOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICBt
YXBQUyA9IChmbG9hdCgqKVs0XSltYXAucERhdGE7CisgICAgfQorCisgICAgZm9yIChnbDo6VW5p
Zm9ybUFycmF5OjppdGVyYXRvciB1bmlmb3JtX2l0ZXJhdG9yID0gdW5pZm9ybUFycmF5LT5iZWdp
bigpOyB1bmlmb3JtX2l0ZXJhdG9yICE9IHVuaWZvcm1BcnJheS0+ZW5kKCk7IHVuaWZvcm1faXRl
cmF0b3IrKykKKyAgICB7CisgICAgICAgIGdsOjpVbmlmb3JtICp1bmlmb3JtID0gKnVuaWZvcm1f
aXRlcmF0b3I7CisKKyAgICAgICAgaWYgKHVuaWZvcm0tPnR5cGUgIT0gIEdMX1NBTVBMRVJfMkQg
JiYgdW5pZm9ybS0+dHlwZSAhPSBHTF9TQU1QTEVSX0NVQkUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmICh1bmlmb3JtLT52c1JlZ2lzdGVySW5kZXggPj0gMCAmJiBtYXBWUykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBtZW1jcHkobWFwVlMgKyB1bmlmb3JtLT52c1JlZ2lzdGVy
SW5kZXgsIHVuaWZvcm0tPmRhdGEsIHVuaWZvcm0tPnJlZ2lzdGVyQ291bnQgKiBzaXplb2YoZmxv
YXRbNF0pKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHVuaWZvcm0tPnBzUmVn
aXN0ZXJJbmRleCA+PSAwICYmIG1hcFBTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG1lbWNweShtYXBQUyArIHVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleCwgdW5pZm9ybS0+ZGF0YSwg
dW5pZm9ybS0+cmVnaXN0ZXJDb3VudCAqIHNpemVvZihmbG9hdFs0XSkpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgdW5pZm9ybS0+ZGlydHkgPSBmYWxzZTsKKyAgICB9CisK
KyAgICBpZiAobWFwVlMpCisgICAgeworICAgICAgICBtRGV2aWNlQ29udGV4dC0+VW5tYXAodmVy
dGV4Q29uc3RhbnRCdWZmZXIsIDApOworICAgIH0KKworICAgIGlmIChtYXBQUykKKyAgICB7Cisg
ICAgICAgIG1EZXZpY2VDb250ZXh0LT5Vbm1hcChwaXhlbENvbnN0YW50QnVmZmVyLCAwKTsKKyAg
ICB9CisKKyAgICBpZiAobUN1cnJlbnRWZXJ0ZXhDb25zdGFudEJ1ZmZlciAhPSB2ZXJ0ZXhDb25z
dGFudEJ1ZmZlcikKKyAgICB7CisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5WU1NldENvbnN0YW50
QnVmZmVycygwLCAxLCAmdmVydGV4Q29uc3RhbnRCdWZmZXIpOworICAgICAgICBtQ3VycmVudFZl
cnRleENvbnN0YW50QnVmZmVyID0gdmVydGV4Q29uc3RhbnRCdWZmZXI7CisgICAgfQorCisgICAg
aWYgKG1DdXJyZW50UGl4ZWxDb25zdGFudEJ1ZmZlciAhPSBwaXhlbENvbnN0YW50QnVmZmVyKQor
ICAgIHsKKyAgICAgICAgbURldmljZUNvbnRleHQtPlBTU2V0Q29uc3RhbnRCdWZmZXJzKDAsIDEs
ICZwaXhlbENvbnN0YW50QnVmZmVyKTsKKyAgICAgICAgbUN1cnJlbnRQaXhlbENvbnN0YW50QnVm
ZmVyID0gcGl4ZWxDb25zdGFudEJ1ZmZlcjsKKyAgICB9CisKKyAgICAvLyBEcml2ZXIgdW5pZm9y
bXMKKyAgICBpZiAoIW1Ecml2ZXJDb25zdGFudEJ1ZmZlclZTKQorICAgIHsKKyAgICAgICAgRDNE
MTFfQlVGRkVSX0RFU0MgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbiA9IHswfTsKKyAgICAgICAg
Y29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5CeXRlV2lkdGggPSBzaXplb2YoZHhfVmVydGV4Q29u
c3RhbnRzKTsKKyAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5Vc2FnZSA9IEQzRDEx
X1VTQUdFX0RFRkFVTFQ7CisgICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uQmluZEZs
YWdzID0gRDNEMTFfQklORF9DT05TVEFOVF9CVUZGRVI7CisgICAgICAgIGNvbnN0YW50QnVmZmVy
RGVzY3JpcHRpb24uQ1BVQWNjZXNzRmxhZ3MgPSAwOworICAgICAgICBjb25zdGFudEJ1ZmZlckRl
c2NyaXB0aW9uLk1pc2NGbGFncyA9IDA7CisgICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRp
b24uU3RydWN0dXJlQnl0ZVN0cmlkZSA9IDA7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBt
RGV2aWNlLT5DcmVhdGVCdWZmZXIoJmNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24sIE5VTEwsICZt
RHJpdmVyQ29uc3RhbnRCdWZmZXJWUyk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7CisKKyAgICAgICAgbURldmljZUNvbnRleHQtPlZTU2V0Q29uc3RhbnRCdWZmZXJzKDEsIDEs
ICZtRHJpdmVyQ29uc3RhbnRCdWZmZXJWUyk7CisgICAgfQorCisgICAgaWYgKCFtRHJpdmVyQ29u
c3RhbnRCdWZmZXJQUykKKyAgICB7CisgICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIGNvbnN0YW50
QnVmZmVyRGVzY3JpcHRpb24gPSB7MH07CisgICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRp
b24uQnl0ZVdpZHRoID0gc2l6ZW9mKGR4X1BpeGVsQ29uc3RhbnRzKTsKKyAgICAgICAgY29uc3Rh
bnRCdWZmZXJEZXNjcmlwdGlvbi5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7CisgICAgICAg
IGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uQmluZEZsYWdzID0gRDNEMTFfQklORF9DT05TVEFO
VF9CVUZGRVI7CisgICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uQ1BVQWNjZXNzRmxh
Z3MgPSAwOworICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLk1pc2NGbGFncyA9IDA7
CisgICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uU3RydWN0dXJlQnl0ZVN0cmlkZSA9
IDA7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVCdWZmZXIoJmNv
bnN0YW50QnVmZmVyRGVzY3JpcHRpb24sIE5VTEwsICZtRHJpdmVyQ29uc3RhbnRCdWZmZXJQUyk7
CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgbURldmljZUNv
bnRleHQtPlBTU2V0Q29uc3RhbnRCdWZmZXJzKDEsIDEsICZtRHJpdmVyQ29uc3RhbnRCdWZmZXJQ
Uyk7CisgICAgfQorCisgICAgaWYgKG1lbWNtcCgmbVZlcnRleENvbnN0YW50cywgJm1BcHBsaWVk
VmVydGV4Q29uc3RhbnRzLCBzaXplb2YoZHhfVmVydGV4Q29uc3RhbnRzKSkgIT0gMCkKKyAgICB7
CisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5VcGRhdGVTdWJyZXNvdXJjZShtRHJpdmVyQ29uc3Rh
bnRCdWZmZXJWUywgMCwgTlVMTCwgJm1WZXJ0ZXhDb25zdGFudHMsIDE2LCAwKTsKKyAgICAgICAg
bWVtY3B5KCZtQXBwbGllZFZlcnRleENvbnN0YW50cywgJm1WZXJ0ZXhDb25zdGFudHMsIHNpemVv
ZihkeF9WZXJ0ZXhDb25zdGFudHMpKTsKKyAgICB9CisKKyAgICBpZiAobWVtY21wKCZtUGl4ZWxD
b25zdGFudHMsICZtQXBwbGllZFBpeGVsQ29uc3RhbnRzLCBzaXplb2YoZHhfUGl4ZWxDb25zdGFu
dHMpKSAhPSAwKQorICAgIHsKKyAgICAgICAgbURldmljZUNvbnRleHQtPlVwZGF0ZVN1YnJlc291
cmNlKG1Ecml2ZXJDb25zdGFudEJ1ZmZlclBTLCAwLCBOVUxMLCAmbVBpeGVsQ29uc3RhbnRzLCAx
NiwgMCk7CisgICAgICAgIG1lbWNweSgmbUFwcGxpZWRQaXhlbENvbnN0YW50cywgJm1QaXhlbENv
bnN0YW50cywgc2l6ZW9mKGR4X1BpeGVsQ29uc3RhbnRzKSk7CisgICAgfQorCisgICAgLy8gbmVl
ZGVkIGZvciB0aGUgcG9pbnQgc3ByaXRlIGdlb21ldHJ5IHNoYWRlcgorICAgIGlmIChtQ3VycmVu
dEdlb21ldHJ5Q29uc3RhbnRCdWZmZXIgIT0gbURyaXZlckNvbnN0YW50QnVmZmVyUFMpCisgICAg
eworICAgICAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRDb25zdGFudEJ1ZmZlcnMoMCwgMSwgJm1E
cml2ZXJDb25zdGFudEJ1ZmZlclBTKTsKKyAgICAgICAgbUN1cnJlbnRHZW9tZXRyeUNvbnN0YW50
QnVmZmVyID0gbURyaXZlckNvbnN0YW50QnVmZmVyUFM7CisgICAgfQorfQorCit2b2lkIFJlbmRl
cmVyMTE6OmNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBnbDo6
RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKQoreworICAgICBnbDo6UmVuZGVyYnVmZmVyICpmaXJz
dFJlbmRlcmJ1ZmZlciA9IGZyYW1lQnVmZmVyLT5nZXRGaXJzdENvbG9yYnVmZmVyKCk7CisgICAg
IEdMZW51bSBpbnRlcm5hbEZvcm1hdCA9IGZpcnN0UmVuZGVyYnVmZmVyID8gZmlyc3RSZW5kZXJi
dWZmZXItPmdldEludGVybmFsRm9ybWF0KCkgOiBHTF9OT05FOworCisgICAgIGJvb2wgbmVlZE1h
c2tlZENvbG9yQ2xlYXIgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQp
ICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCFjbGVhclBhcmFtcy5jb2xv
ck1hc2tSZWQgJiYgZ2w6OkdldFJlZFNpemUoaW50ZXJuYWxGb3JtYXQpID4gMCkgfHwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIWNsZWFyUGFyYW1zLmNvbG9yTWFza0dyZWVu
ICYmIGdsOjpHZXRHcmVlblNpemUoaW50ZXJuYWxGb3JtYXQpID4gMCkgfHwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoIWNsZWFyUGFyYW1zLmNvbG9yTWFza0JsdWUgJiYgZ2w6
OkdldEJsdWVTaXplKGludGVybmFsRm9ybWF0KSA+IDApIHx8CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKCFjbGVhclBhcmFtcy5jb2xvck1hc2tBbHBoYSAmJiBnbDo6R2V0QWxw
aGFTaXplKGludGVybmFsRm9ybWF0KSA+IDApKTsKKworICAgICB1bnNpZ25lZCBpbnQgc3RlbmNp
bFVubWFza2VkID0gMHgwOworICAgICBpZiAoZnJhbWVCdWZmZXItPmhhc1N0ZW5jaWwoKSkKKyAg
ICAgeworICAgICAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxTaXplID0gZ2w6OkdldFN0ZW5jaWxT
aXplKGZyYW1lQnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldEFjdHVhbEZvcm1hdCgpKTsK
KyAgICAgICAgIHN0ZW5jaWxVbm1hc2tlZCA9ICgweDEgPDwgc3RlbmNpbFNpemUpIC0gMTsKKyAg
ICAgfQorICAgICBib29sIG5lZWRNYXNrZWRTdGVuY2lsQ2xlYXIgPSAoY2xlYXJQYXJhbXMubWFz
ayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGNsZWFyUGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2sgJiBzdGVuY2lsVW5tYXNrZWQp
ICE9IHN0ZW5jaWxVbm1hc2tlZDsKKworICAgICBib29sIG5lZWRTY2lzc29yZWRDbGVhciA9IG1T
Y2lzc29yRW5hYmxlZCAmJiAobUN1clNjaXNzb3IueCA+IDAgfHwgbUN1clNjaXNzb3IueSA+IDAg
fHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1D
dXJTY2lzc29yLnggKyBtQ3VyU2Npc3Nvci53aWR0aCA8IG1SZW5kZXJUYXJnZXREZXNjLndpZHRo
IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
Q3VyU2Npc3Nvci55ICsgbUN1clNjaXNzb3IuaGVpZ2h0IDwgbVJlbmRlclRhcmdldERlc2MuaGVp
Z2h0KTsKKworICAgICBpZiAobmVlZE1hc2tlZENvbG9yQ2xlYXIgfHwgbmVlZE1hc2tlZFN0ZW5j
aWxDbGVhciB8fCBuZWVkU2Npc3NvcmVkQ2xlYXIpCisgICAgIHsKKyAgICAgICAgIG1hc2tlZENs
ZWFyKGNsZWFyUGFyYW1zLCBmcmFtZUJ1ZmZlcik7CisgICAgIH0KKyAgICAgZWxzZQorICAgICB7
CisgICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpCisg
ICAgICAgICB7CisgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50
ID0gMDsgY29sb3JBdHRhY2htZW50IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZF
UlM7IGNvbG9yQXR0YWNobWVudCsrKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
aWYgKGZyYW1lQnVmZmVyLT5pc0VuYWJsZWRDb2xvckF0dGFjaG1lbnQoY29sb3JBdHRhY2htZW50
KSkKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1
ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0ID0gZnJhbWVCdWZmZXItPmdldENvbG9yYnVmZmVyKGNv
bG9yQXR0YWNobWVudCk7CisgICAgICAgICAgICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyT2Jq
ZWN0KQorICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgUmVu
ZGVyVGFyZ2V0MTEgKnJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFy
Z2V0MTEocmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIXJlbmRlclRhcmdldCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUlIoInJlbmRlciB0YXJnZXQgcG9pbnRl
ciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmZyYW1lYnVmZmVyUlRWID0gcmVuZGVyVGFyZ2V0LT5n
ZXRSZW5kZXJUYXJnZXRWaWV3KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZyYW1l
YnVmZmVyUlRWKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEVSUigicmVuZGVyIHRhcmdldCB2aWV3IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51
bGwuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0ID0g
cmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRJbnRlcm5hbEZvcm1hdCgpOworCisgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBmbG9hdCBjbGVhclZhbHVlc1s0XSA9IHsgKGdsOjpHZXRSZWRTaXpl
KGZvcm1hdCkgPiAwKSAgID8gY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLnJlZCAgIDogMC4w
ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoZ2w6OkdldEdyZWVuU2l6ZShmb3JtYXQpID4gMCkgPyBjbGVhclBhcmFtcy5jb2xvckNsZWFy
VmFsdWUuZ3JlZW4gOiAwLjBmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChnbDo6R2V0Qmx1ZVNpemUoZm9ybWF0KSA+IDApICA/IGNsZWFy
UGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5ibHVlICA6IDAuMGYsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdsOjpHZXRBbHBoYVNpemUoZm9y
bWF0KSA+IDApID8gY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLmFscGhhIDogMS4wZiB9Owor
ICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZUNvbnRleHQtPkNsZWFyUmVuZGVyVGFyZ2V0
VmlldyhmcmFtZWJ1ZmZlclJUViwgY2xlYXJWYWx1ZXMpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUIHx8IGNsZWFyUGFyYW1z
Lm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGds
OjpSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9IGZyYW1lQnVmZmVyLT5nZXREZXB0
aE9yU3RlbmNpbGJ1ZmZlcigpOworICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlck9iamVjdCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBSZW5kZXJUYXJnZXQxMSAqcmVuZGVyVGFy
Z2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShyZW5kZXJidWZmZXJPYmpl
Y3QtPmdldERlcHRoU3RlbmNpbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlbmRlclRhcmdl
dCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEVSUigicmVuZGVyIHRh
cmdldCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgSUQzRDExRGVwdGhT
dGVuY2lsVmlldyAqZnJhbWVidWZmZXJEU1YgPSByZW5kZXJUYXJnZXQtPmdldERlcHRoU3RlbmNp
bFZpZXcoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWZyYW1lYnVmZmVyRFNWKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRVJSKCJkZXB0aCBzdGVuY2lsIHZpZXcgcG9p
bnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIFVJTlQgY2xlYXJGbGFncyA9IDA7
CisgICAgICAgICAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9ERVBUSF9CVUZGRVJf
QklUKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2xlYXJGbGFncyB8
PSBEM0QxMV9DTEVBUl9ERVBUSDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBjbGVhckZsYWdzIHw9IEQzRDExX0NMRUFSX1NU
RU5DSUw7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZmxvYXQgZGVwdGhD
bGVhciA9IGdsOjpjbGFtcDAxKGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSk7CisgICAgICAg
ICAgICAgICAgVUlOVDggc3RlbmNpbENsZWFyID0gY2xlYXJQYXJhbXMuc3RlbmNpbENsZWFyVmFs
dWUgJiAweDAwMDAwMEZGOworCisgICAgICAgICAgICAgICAgbURldmljZUNvbnRleHQtPkNsZWFy
RGVwdGhTdGVuY2lsVmlldyhmcmFtZWJ1ZmZlckRTViwgY2xlYXJGbGFncywgZGVwdGhDbGVhciwg
c3RlbmNpbENsZWFyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9p
ZCBSZW5kZXJlcjExOjptYXNrZWRDbGVhcihjb25zdCBnbDo6Q2xlYXJQYXJhbWV0ZXJzICZjbGVh
clBhcmFtcywgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcikKK3sKKyAgICBIUkVTVUxUIHJl
c3VsdDsKKworICAgIGlmICghbUNsZWFyUmVzb3VyY2VzSW5pdGlhbGl6ZWQpCisgICAgeworICAg
ICAgICBBU1NFUlQoIW1DbGVhclZCICYmICFtQ2xlYXJWUyAmJiAhbUNsZWFyU2luZ2xlUFMgJiYg
IW1DbGVhck11bHRpcGxlUFMgJiYgIW1DbGVhclNjaXNzb3JSUyAmJiAhbUNsZWFyTm9TY2lzc29y
UlMpOworCisgICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIHZiRGVzYzsKKyAgICAgICAgdmJEZXNj
LkJ5dGVXaWR0aCA9IHNpemVvZihkM2QxMTo6UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KSAqIDQ7
CisgICAgICAgIHZiRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZTkFNSUM7CisgICAgICAgIHZi
RGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1ZFUlRFWF9CVUZGRVI7CisgICAgICAgIHZiRGVz
Yy5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7CisgICAgICAgIHZiRGVz
Yy5NaXNjRmxhZ3MgPSAwOworICAgICAgICB2YkRlc2MuU3RydWN0dXJlQnl0ZVN0cmlkZSA9IDA7
CisKKyAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlQnVmZmVyKCZ2YkRlc2MsIE5VTEws
ICZtQ2xlYXJWQik7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAg
IGQzZDExOjpTZXREZWJ1Z05hbWUobUNsZWFyVkIsICJSZW5kZXJlcjExIG1hc2tlZCBjbGVhciB2
ZXJ0ZXggYnVmZmVyIik7CisKKyAgICAgICAgRDNEMTFfSU5QVVRfRUxFTUVOVF9ERVNDIHF1YWRM
YXlvdXRbXSA9CisgICAgICAgIHsKKyAgICAgICAgICAgIHsgIlBPU0lUSU9OIiwgMCwgRFhHSV9G
T1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAgICAwLCAgMCwgRDNEMTFfSU5QVVRfUEVSX1ZFUlRFWF9E
QVRBLCAwIH0sCisgICAgICAgICAgICB7ICJDT0xPUiIsICAgIDAsIERYR0lfRk9STUFUX1IzMkcz
MkIzMkEzMl9GTE9BVCwgMCwgMTIsIEQzRDExX0lOUFVUX1BFUl9WRVJURVhfREFUQSwgMCB9LAor
ICAgICAgICB9OworCisgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUlucHV0TGF5b3V0
KHF1YWRMYXlvdXQsIDIsIGdfVlNfQ2xlYXIsIHNpemVvZihnX1ZTX0NsZWFyKSwgJm1DbGVhcklM
KTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgZDNkMTE6OlNl
dERlYnVnTmFtZShtQ2xlYXJJTCwgIlJlbmRlcmVyMTEgbWFza2VkIGNsZWFyIGlucHV0IGxheW91
dCIpOworCisgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVZlcnRleFNoYWRlcihnX1ZT
X0NsZWFyLCBzaXplb2YoZ19WU19DbGVhciksIE5VTEwsICZtQ2xlYXJWUyk7CisgICAgICAgIEFT
U0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNs
ZWFyVlMsICJSZW5kZXJlcjExIG1hc2tlZCBjbGVhciB2ZXJ0ZXggc2hhZGVyIik7CisKKyAgICAg
ICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19DbGVhclNpbmdsZSwg
c2l6ZW9mKGdfUFNfQ2xlYXJTaW5nbGUpLCBOVUxMLCAmbUNsZWFyU2luZ2xlUFMpOworICAgICAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1l
KG1DbGVhclNpbmdsZVBTLCAiUmVuZGVyZXIxMSBtYXNrZWQgY2xlYXIgcGl4ZWwgc2hhZGVyICgx
IFJUKSIpOworCisgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdf
UFNfQ2xlYXJNdWx0aXBsZSwgc2l6ZW9mKGdfUFNfQ2xlYXJNdWx0aXBsZSksIE5VTEwsICZtQ2xl
YXJNdWx0aXBsZVBTKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAg
ICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ2xlYXJNdWx0aXBsZVBTLCAiUmVuZGVyZXIxMSBtYXNr
ZWQgY2xlYXIgcGl4ZWwgc2hhZGVyIChNUlQpIik7CisKKyAgICAgICAgRDNEMTFfUkFTVEVSSVpF
Ul9ERVNDIHJzU2Npc3NvckRlc2M7CisgICAgICAgIHJzU2Npc3NvckRlc2MuRmlsbE1vZGUgPSBE
M0QxMV9GSUxMX1NPTElEOworICAgICAgICByc1NjaXNzb3JEZXNjLkN1bGxNb2RlID0gRDNEMTFf
Q1VMTF9OT05FOworICAgICAgICByc1NjaXNzb3JEZXNjLkZyb250Q291bnRlckNsb2Nrd2lzZSA9
IEZBTFNFOworICAgICAgICByc1NjaXNzb3JEZXNjLkRlcHRoQmlhcyA9IDA7CisgICAgICAgIHJz
U2Npc3NvckRlc2MuRGVwdGhCaWFzQ2xhbXAgPSAwLjBmOworICAgICAgICByc1NjaXNzb3JEZXNj
LlNsb3BlU2NhbGVkRGVwdGhCaWFzID0gMC4wZjsKKyAgICAgICAgcnNTY2lzc29yRGVzYy5EZXB0
aENsaXBFbmFibGUgPSBGQUxTRTsKKyAgICAgICAgcnNTY2lzc29yRGVzYy5TY2lzc29yRW5hYmxl
ID0gVFJVRTsKKyAgICAgICAgcnNTY2lzc29yRGVzYy5NdWx0aXNhbXBsZUVuYWJsZSA9IEZBTFNF
OworICAgICAgICByc1NjaXNzb3JEZXNjLkFudGlhbGlhc2VkTGluZUVuYWJsZSA9IEZBTFNFOwor
CisgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVJhc3Rlcml6ZXJTdGF0ZSgmcnNTY2lz
c29yRGVzYywgJm1DbGVhclNjaXNzb3JSUyk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CisgICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNsZWFyU2Npc3NvclJTLCAiUmVu
ZGVyZXIxMSBtYXNrZWQgY2xlYXIgc2Npc3NvciByYXN0ZXJpemVyIHN0YXRlIik7CisKKyAgICAg
ICAgRDNEMTFfUkFTVEVSSVpFUl9ERVNDIHJzTm9TY2lzc29yRGVzYzsKKyAgICAgICAgcnNOb1Nj
aXNzb3JEZXNjLkZpbGxNb2RlID0gRDNEMTFfRklMTF9TT0xJRDsKKyAgICAgICAgcnNOb1NjaXNz
b3JEZXNjLkN1bGxNb2RlID0gRDNEMTFfQ1VMTF9OT05FOworICAgICAgICByc05vU2Npc3NvckRl
c2MuRnJvbnRDb3VudGVyQ2xvY2t3aXNlID0gRkFMU0U7CisgICAgICAgIHJzTm9TY2lzc29yRGVz
Yy5EZXB0aEJpYXMgPSAwOworICAgICAgICByc05vU2Npc3NvckRlc2MuRGVwdGhCaWFzQ2xhbXAg
PSAwLjBmOworICAgICAgICByc05vU2Npc3NvckRlc2MuU2xvcGVTY2FsZWREZXB0aEJpYXMgPSAw
LjBmOworICAgICAgICByc05vU2Npc3NvckRlc2MuRGVwdGhDbGlwRW5hYmxlID0gRkFMU0U7Cisg
ICAgICAgIHJzTm9TY2lzc29yRGVzYy5TY2lzc29yRW5hYmxlID0gRkFMU0U7CisgICAgICAgIHJz
Tm9TY2lzc29yRGVzYy5NdWx0aXNhbXBsZUVuYWJsZSA9IEZBTFNFOworICAgICAgICByc05vU2Np
c3NvckRlc2MuQW50aWFsaWFzZWRMaW5lRW5hYmxlID0gRkFMU0U7CisKKyAgICAgICAgcmVzdWx0
ID0gbURldmljZS0+Q3JlYXRlUmFzdGVyaXplclN0YXRlKCZyc05vU2Npc3NvckRlc2MsICZtQ2xl
YXJOb1NjaXNzb3JSUyk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAg
ICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNsZWFyTm9TY2lzc29yUlMsICJSZW5kZXJlcjExIG1h
c2tlZCBjbGVhciBubyBzY2lzc29yIHJhc3Rlcml6ZXIgc3RhdGUiKTsKKworICAgICAgICBtQ2xl
YXJSZXNvdXJjZXNJbml0aWFsaXplZCA9IHRydWU7CisgICAgfQorCisgICAgLy8gUHJlcGFyZSB0
aGUgZGVwdGggc3RlbmNpbCBzdGF0ZSB0byB3cml0ZSBkZXB0aCB2YWx1ZXMgaWYgdGhlIGRlcHRo
IHNob3VsZCBiZSBjbGVhcmVkCisgICAgLy8gYW5kIHN0ZW5jaWwgdmFsdWVzIGlmIHRoZSBzdGVu
Y2lsIHNob3VsZCBiZSBjbGVhcmVkCisgICAgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlIGdsRFNTdGF0
ZTsKKyAgICBnbERTU3RhdGUuZGVwdGhUZXN0ID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9ERVBU
SF9CVUZGRVJfQklUKSAhPSAwOworICAgIGdsRFNTdGF0ZS5kZXB0aEZ1bmMgPSBHTF9BTFdBWVM7
CisgICAgZ2xEU1N0YXRlLmRlcHRoTWFzayA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfREVQVEhf
QlVGRkVSX0JJVCkgIT0gMDsKKyAgICBnbERTU3RhdGUuc3RlbmNpbFRlc3QgPSAoY2xlYXJQYXJh
bXMubWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkgIT0gMDsKKyAgICBnbERTU3RhdGUuc3Rl
bmNpbEZ1bmMgPSBHTF9BTFdBWVM7CisgICAgZ2xEU1N0YXRlLnN0ZW5jaWxNYXNrID0gMDsKKyAg
ICBnbERTU3RhdGUuc3RlbmNpbEZhaWwgPSBHTF9SRVBMQUNFOworICAgIGdsRFNTdGF0ZS5zdGVu
Y2lsUGFzc0RlcHRoRmFpbCA9IEdMX1JFUExBQ0U7CisgICAgZ2xEU1N0YXRlLnN0ZW5jaWxQYXNz
RGVwdGhQYXNzID0gR0xfUkVQTEFDRTsKKyAgICBnbERTU3RhdGUuc3RlbmNpbFdyaXRlbWFzayA9
IGNsZWFyUGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2s7CisgICAgZ2xEU1N0YXRlLnN0ZW5jaWxCYWNr
RnVuYyA9IEdMX0FMV0FZUzsKKyAgICBnbERTU3RhdGUuc3RlbmNpbEJhY2tNYXNrID0gMDsKKyAg
ICBnbERTU3RhdGUuc3RlbmNpbEJhY2tGYWlsID0gR0xfUkVQTEFDRTsKKyAgICBnbERTU3RhdGUu
c3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsID0gR0xfUkVQTEFDRTsKKyAgICBnbERTU3RhdGUuc3Rl
bmNpbEJhY2tQYXNzRGVwdGhQYXNzID0gR0xfUkVQTEFDRTsKKyAgICBnbERTU3RhdGUuc3RlbmNp
bEJhY2tXcml0ZW1hc2sgPSBjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrOworCisgICAgaW50
IHN0ZW5jaWxDbGVhciA9IGNsZWFyUGFyYW1zLnN0ZW5jaWxDbGVhclZhbHVlICYgMHgwMDAwMDBG
RjsKKworICAgIElEM0QxMURlcHRoU3RlbmNpbFN0YXRlICpkc1N0YXRlID0gbVN0YXRlQ2FjaGUu
Z2V0RGVwdGhTdGVuY2lsU3RhdGUoZ2xEU1N0YXRlKTsKKworICAgIC8vIFByZXBhcmUgdGhlIGJs
ZW5kIHN0YXRlIHRvIHVzZSBhIHdyaXRlIG1hc2sgaWYgdGhlIGNvbG9yIGJ1ZmZlciBzaG91bGQg
YmUgY2xlYXJlZAorICAgIGdsOjpCbGVuZFN0YXRlIGdsQmxlbmRTdGF0ZTsKKyAgICBnbEJsZW5k
U3RhdGUuYmxlbmQgPSBmYWxzZTsKKyAgICBnbEJsZW5kU3RhdGUuc291cmNlQmxlbmRSR0IgPSBH
TF9PTkU7CisgICAgZ2xCbGVuZFN0YXRlLmRlc3RCbGVuZFJHQiA9IEdMX1pFUk87CisgICAgZ2xC
bGVuZFN0YXRlLnNvdXJjZUJsZW5kQWxwaGEgPSBHTF9PTkU7CisgICAgZ2xCbGVuZFN0YXRlLmRl
c3RCbGVuZEFscGhhID0gR0xfWkVSTzsKKyAgICBnbEJsZW5kU3RhdGUuYmxlbmRFcXVhdGlvblJH
QiA9IEdMX0ZVTkNfQUREOworICAgIGdsQmxlbmRTdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEgPSBH
TF9GVU5DX0FERDsKKyAgICBnbEJsZW5kU3RhdGUuY29sb3JNYXNrUmVkID0gKGNsZWFyUGFyYW1z
Lm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSA/IGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCA6
IGZhbHNlOworICAgIGdsQmxlbmRTdGF0ZS5jb2xvck1hc2tHcmVlbiA9IChjbGVhclBhcmFtcy5t
YXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkgPyBjbGVhclBhcmFtcy5jb2xvck1hc2tHcmVlbiA6
IGZhbHNlOworICAgIGdsQmxlbmRTdGF0ZS5jb2xvck1hc2tCbHVlID0gKGNsZWFyUGFyYW1zLm1h
c2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSA/IGNsZWFyUGFyYW1zLmNvbG9yTWFza0JsdWUgOiBm
YWxzZTsKKyAgICBnbEJsZW5kU3RhdGUuY29sb3JNYXNrQWxwaGEgPSAoY2xlYXJQYXJhbXMubWFz
ayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpID8gY2xlYXJQYXJhbXMuY29sb3JNYXNrQWxwaGEgOiBm
YWxzZTsKKyAgICBnbEJsZW5kU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlID0gZmFsc2U7Cisg
ICAgZ2xCbGVuZFN0YXRlLmRpdGhlciA9IGZhbHNlOworCisgICAgc3RhdGljIGNvbnN0IGZsb2F0
IGJsZW5kRmFjdG9yc1s0XSA9IHsgMS4wZiwgMS4wZiwgMS4wZiwgMS4wZiB9OworICAgIHN0YXRp
YyBjb25zdCBVSU5UIHNhbXBsZU1hc2sgPSAweEZGRkZGRkZGOworCisgICAgSUQzRDExQmxlbmRT
dGF0ZSAqYmxlbmRTdGF0ZSA9IG1TdGF0ZUNhY2hlLmdldEJsZW5kU3RhdGUoZnJhbWVCdWZmZXIs
IGdsQmxlbmRTdGF0ZSk7CisKKyAgICAvLyBTZXQgdGhlIHZlcnRpY2VzCisgICAgRDNEMTFfTUFQ
UEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOworICAgIHJlc3VsdCA9IG1EZXZpY2VDb250
ZXh0LT5NYXAobUNsZWFyVkIsIDAsIEQzRDExX01BUF9XUklURV9ESVNDQVJELCAwLCAmbWFwcGVk
UmVzb3VyY2UpOworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEVSUigi
RmFpbGVkIHRvIG1hcCBtYXNrZWQgY2xlYXIgdmVydGV4IGJ1ZmZlciwgSFJFU1VMVDogMHglWC4i
LCByZXN1bHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZDNkMTE6OlBvc2l0aW9u
RGVwdGhDb2xvclZlcnRleCAqdmVydGljZXMgPSByZWludGVycHJldF9jYXN0PGQzZDExOjpQb3Np
dGlvbkRlcHRoQ29sb3JWZXJ0ZXgqPihtYXBwZWRSZXNvdXJjZS5wRGF0YSk7CisKKyAgICBmbG9h
dCBkZXB0aENsZWFyID0gZ2w6OmNsYW1wMDEoY2xlYXJQYXJhbXMuZGVwdGhDbGVhclZhbHVlKTsK
KyAgICBkM2QxMTo6U2V0UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KCZ2ZXJ0aWNlc1swXSwgLTEu
MGYsICAxLjBmLCBkZXB0aENsZWFyLCBjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUpOworICAg
IGQzZDExOjpTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgoJnZlcnRpY2VzWzFdLCAtMS4wZiwg
LTEuMGYsIGRlcHRoQ2xlYXIsIGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZSk7CisgICAgZDNk
MTE6OlNldFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCgmdmVydGljZXNbMl0sICAxLjBmLCAgMS4w
ZiwgZGVwdGhDbGVhciwgY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlKTsKKyAgICBkM2QxMTo6
U2V0UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KCZ2ZXJ0aWNlc1szXSwgIDEuMGYsIC0xLjBmLCBk
ZXB0aENsZWFyLCBjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUpOworCisgICAgbURldmljZUNv
bnRleHQtPlVubWFwKG1DbGVhclZCLCAwKTsKKworICAgIC8vIEFwcGx5IHN0YXRlCisgICAgbURl
dmljZUNvbnRleHQtPk9NU2V0QmxlbmRTdGF0ZShibGVuZFN0YXRlLCBibGVuZEZhY3RvcnMsIHNh
bXBsZU1hc2spOworICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldERlcHRoU3RlbmNpbFN0YXRlKGRz
U3RhdGUsIHN0ZW5jaWxDbGVhcik7CisgICAgbURldmljZUNvbnRleHQtPlJTU2V0U3RhdGUobVNj
aXNzb3JFbmFibGVkID8gbUNsZWFyU2Npc3NvclJTIDogbUNsZWFyTm9TY2lzc29yUlMpOworCisg
ICAgLy8gQXBwbHkgc2hhZGVycworICAgIElEM0QxMVBpeGVsU2hhZGVyICpwaXhlbFNoYWRlciA9
IGZyYW1lQnVmZmVyLT51c2luZ0V4dGVuZGVkRHJhd0J1ZmZlcnMoKSA/IG1DbGVhck11bHRpcGxl
UFMgOiBtQ2xlYXJTaW5nbGVQUzsKKworICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldElucHV0TGF5
b3V0KG1DbGVhcklMKTsKKyAgICBtRGV2aWNlQ29udGV4dC0+VlNTZXRTaGFkZXIobUNsZWFyVlMs
IE5VTEwsIDApOworICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlcihwaXhlbFNoYWRlciwg
TlVMTCwgMCk7CisgICAgbURldmljZUNvbnRleHQtPkdTU2V0U2hhZGVyKE5VTEwsIE5VTEwsIDAp
OworCisgICAgLy8gQXBwbHkgdmVydGV4IGJ1ZmZlcgorICAgIHN0YXRpYyBVSU5UIHN0cmlkZSA9
IHNpemVvZihkM2QxMTo6UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KTsKKyAgICBzdGF0aWMgVUlO
VCBzdGFydElkeCA9IDA7CisgICAgbURldmljZUNvbnRleHQtPklBU2V0VmVydGV4QnVmZmVycygw
LCAxLCAmbUNsZWFyVkIsICZzdHJpZGUsICZzdGFydElkeCk7CisgICAgbURldmljZUNvbnRleHQt
PklBU2V0UHJpbWl0aXZlVG9wb2xvZ3koRDNEX1BSSU1JVElWRV9UT1BPTE9HWV9UUklBTkdMRVNU
UklQKTsKKworICAgIC8vIERyYXcgdGhlIGNsZWFyIHF1YWQKKyAgICBtRGV2aWNlQ29udGV4dC0+
RHJhdyg0LCAwKTsKKworICAgIC8vIENsZWFuIHVwCisgICAgbWFya0FsbFN0YXRlRGlydHkoKTsK
K30KKwordm9pZCBSZW5kZXJlcjExOjptYXJrQWxsU3RhdGVEaXJ0eSgpCit7CisgICAgZm9yICh1
bnNpZ25lZCBpbnQgcnRJbmRleCA9IDA7IHJ0SW5kZXggPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFY
X0RSQVdfQlVGRkVSUzsgcnRJbmRleCsrKQorICAgIHsKKyAgICAgICAgbUFwcGxpZWRSZW5kZXJU
YXJnZXRTZXJpYWxzW3J0SW5kZXhdID0gMDsKKyAgICB9CisgICAgbUFwcGxpZWREZXB0aGJ1ZmZl
clNlcmlhbCA9IDA7CisgICAgbUFwcGxpZWRTdGVuY2lsYnVmZmVyU2VyaWFsID0gMDsKKyAgICBt
RGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBtUmVuZGVyVGFyZ2V0RGVzY0lu
aXRpYWxpemVkID0gZmFsc2U7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGdsOjpJTVBMRU1F
TlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IGkrKykKKyAgICB7CisgICAg
ICAgIG1Gb3JjZVNldFZlcnRleFNhbXBsZXJTdGF0ZXNbaV0gPSB0cnVlOworICAgICAgICBtQ3Vy
VmVydGV4VGV4dHVyZVNlcmlhbHNbaV0gPSAwOworICAgIH0KKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgaSsrKQorICAgIHsKKyAgICAgICAgbUZv
cmNlU2V0UGl4ZWxTYW1wbGVyU3RhdGVzW2ldID0gdHJ1ZTsKKyAgICAgICAgbUN1clBpeGVsVGV4
dHVyZVNlcmlhbHNbaV0gPSAwOworICAgIH0KKworICAgIG1Gb3JjZVNldEJsZW5kU3RhdGUgPSB0
cnVlOworICAgIG1Gb3JjZVNldFJhc3RlclN0YXRlID0gdHJ1ZTsKKyAgICBtRm9yY2VTZXREZXB0
aFN0ZW5jaWxTdGF0ZSA9IHRydWU7CisgICAgbUZvcmNlU2V0U2Npc3NvciA9IHRydWU7CisgICAg
bUZvcmNlU2V0Vmlld3BvcnQgPSB0cnVlOworCisgICAgbUFwcGxpZWRJQlNlcmlhbCA9IDA7Cisg
ICAgbUFwcGxpZWRTdG9yYWdlSUJTZXJpYWwgPSAwOworICAgIG1BcHBsaWVkSUJPZmZzZXQgPSAw
OworCisgICAgbUFwcGxpZWRQcm9ncmFtQmluYXJ5U2VyaWFsID0gMDsKKyAgICBtZW1zZXQoJm1B
cHBsaWVkVmVydGV4Q29uc3RhbnRzLCAwLCBzaXplb2YoZHhfVmVydGV4Q29uc3RhbnRzKSk7Cisg
ICAgbWVtc2V0KCZtQXBwbGllZFBpeGVsQ29uc3RhbnRzLCAwLCBzaXplb2YoZHhfUGl4ZWxDb25z
dGFudHMpKTsKKworICAgIG1JbnB1dExheW91dENhY2hlLm1hcmtEaXJ0eSgpOworCisgICAgbUN1
cnJlbnRWZXJ0ZXhDb25zdGFudEJ1ZmZlciA9IE5VTEw7CisgICAgbUN1cnJlbnRQaXhlbENvbnN0
YW50QnVmZmVyID0gTlVMTDsKKyAgICBtQ3VycmVudEdlb21ldHJ5Q29uc3RhbnRCdWZmZXIgPSBO
VUxMOworCisgICAgbUN1cnJlbnRQcmltaXRpdmVUb3BvbG9neSA9IEQzRF9QUklNSVRJVkVfVE9Q
T0xPR1lfVU5ERUZJTkVEOworfQorCit2b2lkIFJlbmRlcmVyMTE6OnJlbGVhc2VEZXZpY2VSZXNv
dXJjZXMoKQoreworICAgIG1TdGF0ZUNhY2hlLmNsZWFyKCk7CisgICAgbUlucHV0TGF5b3V0Q2Fj
aGUuY2xlYXIoKTsKKworICAgIGRlbGV0ZSBtVmVydGV4RGF0YU1hbmFnZXI7CisgICAgbVZlcnRl
eERhdGFNYW5hZ2VyID0gTlVMTDsKKworICAgIGRlbGV0ZSBtSW5kZXhEYXRhTWFuYWdlcjsKKyAg
ICBtSW5kZXhEYXRhTWFuYWdlciA9IE5VTEw7CisKKyAgICBkZWxldGUgbUxpbmVMb29wSUI7Cisg
ICAgbUxpbmVMb29wSUIgPSBOVUxMOworCisgICAgZGVsZXRlIG1UcmlhbmdsZUZhbklCOworICAg
IG1UcmlhbmdsZUZhbklCID0gTlVMTDsKKworICAgIFNhZmVSZWxlYXNlKG1Db3B5VkIpOworICAg
IFNhZmVSZWxlYXNlKG1Db3B5U2FtcGxlcik7CisgICAgU2FmZVJlbGVhc2UobUNvcHlJTCk7Cisg
ICAgU2FmZVJlbGVhc2UobUNvcHlJTCk7CisgICAgU2FmZVJlbGVhc2UobUNvcHlWUyk7CisgICAg
U2FmZVJlbGVhc2UobUNvcHlSR0JBUFMpOworICAgIFNhZmVSZWxlYXNlKG1Db3B5UkdCUFMpOwor
ICAgIFNhZmVSZWxlYXNlKG1Db3B5THVtUFMpOworICAgIFNhZmVSZWxlYXNlKG1Db3B5THVtQWxw
aGFQUyk7CisKKyAgICBtQ29weVJlc291cmNlc0luaXRpYWxpemVkID0gZmFsc2U7CisKKyAgICBT
YWZlUmVsZWFzZShtQ2xlYXJWQik7CisgICAgU2FmZVJlbGVhc2UobUNsZWFySUwpOworICAgIFNh
ZmVSZWxlYXNlKG1DbGVhclZTKTsKKyAgICBTYWZlUmVsZWFzZShtQ2xlYXJTaW5nbGVQUyk7Cisg
ICAgU2FmZVJlbGVhc2UobUNsZWFyTXVsdGlwbGVQUyk7CisgICAgU2FmZVJlbGVhc2UobUNsZWFy
U2Npc3NvclJTKTsKKyAgICBTYWZlUmVsZWFzZShtQ2xlYXJOb1NjaXNzb3JSUyk7CisKKyAgICBt
Q2xlYXJSZXNvdXJjZXNJbml0aWFsaXplZCA9IGZhbHNlOworCisgICAgU2FmZVJlbGVhc2UobURy
aXZlckNvbnN0YW50QnVmZmVyVlMpOworICAgIFNhZmVSZWxlYXNlKG1Ecml2ZXJDb25zdGFudEJ1
ZmZlclBTKTsKKyAgICBTYWZlUmVsZWFzZShtU3luY1F1ZXJ5KTsKK30KKwordm9pZCBSZW5kZXJl
cjExOjpub3RpZnlEZXZpY2VMb3N0KCkKK3sKKyAgICBtRGV2aWNlTG9zdCA9IHRydWU7CisgICAg
bURpc3BsYXktPm5vdGlmeURldmljZUxvc3QoKTsKK30KKworYm9vbCBSZW5kZXJlcjExOjppc0Rl
dmljZUxvc3QoKQoreworICAgIHJldHVybiBtRGV2aWNlTG9zdDsKK30KKworLy8gc2V0IG5vdGlm
eSB0byB0cnVlIHRvIGJyb2FkY2FzdCBhIG1lc3NhZ2UgdG8gYWxsIGNvbnRleHRzIG9mIHRoZSBk
ZXZpY2UgbG9zcworYm9vbCBSZW5kZXJlcjExOjp0ZXN0RGV2aWNlTG9zdChib29sIG5vdGlmeSkK
K3sKKyAgICBib29sIGlzTG9zdCA9IGZhbHNlOworCisgICAgLy8gR2V0UmVtb3ZlZFJlYXNvbiBp
cyB1c2VkIHRvIHRlc3QgaWYgdGhlIGRldmljZSBpcyByZW1vdmVkCisgICAgSFJFU1VMVCByZXN1
bHQgPSBtRGV2aWNlLT5HZXREZXZpY2VSZW1vdmVkUmVhc29uKCk7CisgICAgaXNMb3N0ID0gZDNk
MTE6OmlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCk7CisKKyAgICBpZiAoaXNMb3N0KQorICAgIHsK
KyAgICAgICAgLy8gTG9nIGVycm9yIGlmIHRoaXMgaXMgYSBuZXcgZGV2aWNlIGxvc3QgZXZlbnQK
KyAgICAgICAgaWYgKG1EZXZpY2VMb3N0ID09IGZhbHNlKQorICAgICAgICB7CisgICAgICAgICAg
ICBFUlIoIlRoZSBEM0QxMSBkZXZpY2Ugd2FzIHJlbW92ZWQ6IDB4JTA4WCIsIHJlc3VsdCk7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBlbnN1cmUgd2Ugbm90ZSB0aGUgZGV2aWNlIGxvc3MgLS0K
KyAgICAgICAgLy8gd2UnbGwgcHJvYmFibHkgZ2V0IHRoaXMgZG9uZSBhZ2FpbiBieSBub3RpZnlE
ZXZpY2VMb3N0CisgICAgICAgIC8vIGJ1dCBiZXN0IHRvIHJlbWVtYmVyIGl0IQorICAgICAgICAv
LyBOb3RlIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byBjbGVhciB0aGUgZGV2aWNlIGxvc3Mgc3RhdHVz
IGhlcmUKKyAgICAgICAgLy8gLS0gdGhpcyBuZWVkcyB0byBiZSBkb25lIGJ5IHJlc2V0RGV2aWNl
CisgICAgICAgIG1EZXZpY2VMb3N0ID0gdHJ1ZTsKKyAgICAgICAgaWYgKG5vdGlmeSkKKyAgICAg
ICAgeworICAgICAgICAgICAgbm90aWZ5RGV2aWNlTG9zdCgpOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIGlzTG9zdDsKK30KKworYm9vbCBSZW5kZXJlcjExOjp0ZXN0RGV2aWNlUmVz
ZXR0YWJsZSgpCit7CisgICAgLy8gZGV0ZXJtaW5lIGlmIHRoZSBkZXZpY2UgaXMgcmVzZXR0YWJs
ZSBieSBjcmVhdGluZyBhIGR1bW15IGRldmljZQorICAgIFBGTl9EM0QxMV9DUkVBVEVfREVWSUNF
IEQzRDExQ3JlYXRlRGV2aWNlID0gKFBGTl9EM0QxMV9DUkVBVEVfREVWSUNFKUdldFByb2NBZGRy
ZXNzKG1EM2QxMU1vZHVsZSwgIkQzRDExQ3JlYXRlRGV2aWNlIik7CisKKyAgICBpZiAoRDNEMTFD
cmVhdGVEZXZpY2UgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBEM0RfRkVBVFVSRV9MRVZFTCBmZWF0dXJlTGV2ZWxzW10gPQorICAgIHsKKyAgICAg
ICAgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMCwKKyAgICAgICAgRDNEX0ZFQVRVUkVfTEVWRUxfMTBf
MSwKKyAgICAgICAgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMCwKKyAgICB9OworCisgICAgSUQzRDEx
RGV2aWNlKiBkdW1teURldmljZTsKKyAgICBEM0RfRkVBVFVSRV9MRVZFTCBkdW1teUZlYXR1cmVM
ZXZlbDsKKyAgICBJRDNEMTFEZXZpY2VDb250ZXh0KiBkdW1teUNvbnRleHQ7CisKKyAgICBIUkVT
VUxUIHJlc3VsdCA9IEQzRDExQ3JlYXRlRGV2aWNlKE5VTEwsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBEM0RfRFJJVkVSX1RZUEVfSEFSRFdBUkUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgI2lmIGRlZmluZWQoX0RFQlVHKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRDNEMTFfQ1JFQVRFX0RFVklDRV9ERUJVRywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0
dXJlTGV2ZWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlT
aXplKGZlYXR1cmVMZXZlbHMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRDNEMTFfU0RLX1ZFUlNJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmZHVtbXlEZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmZHVtbXlGZWF0dXJlTGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmZHVtbXlDb250ZXh0KTsKKworICAgIGlmICghbURldmljZSB8fCBGQUlMRUQocmVzdWx0
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBkdW1teUNvbnRl
eHQtPlJlbGVhc2UoKTsKKyAgICBkdW1teURldmljZS0+UmVsZWFzZSgpOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6cmVsZWFzZSgpCit7CisgICAgcmVsZWFzZURl
dmljZVJlc291cmNlcygpOworCisgICAgaWYgKG1EeGdpRmFjdG9yeSkKKyAgICB7CisgICAgICAg
IG1EeGdpRmFjdG9yeS0+UmVsZWFzZSgpOworICAgICAgICBtRHhnaUZhY3RvcnkgPSBOVUxMOwor
ICAgIH0KKworICAgIGlmIChtRHhnaUFkYXB0ZXIpCisgICAgeworICAgICAgICBtRHhnaUFkYXB0
ZXItPlJlbGVhc2UoKTsKKyAgICAgICAgbUR4Z2lBZGFwdGVyID0gTlVMTDsKKyAgICB9CisKKyAg
ICBpZiAobURldmljZUNvbnRleHQpCisgICAgeworICAgICAgICBtRGV2aWNlQ29udGV4dC0+Q2xl
YXJTdGF0ZSgpOworICAgICAgICBtRGV2aWNlQ29udGV4dC0+Rmx1c2goKTsKKyAgICAgICAgbURl
dmljZUNvbnRleHQtPlJlbGVhc2UoKTsKKyAgICAgICAgbURldmljZUNvbnRleHQgPSBOVUxMOwor
ICAgIH0KKworICAgIGlmIChtRGV2aWNlKQorICAgIHsKKyAgICAgICAgbURldmljZS0+UmVsZWFz
ZSgpOworICAgICAgICBtRGV2aWNlID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAobUQzZDExTW9k
dWxlKQorICAgIHsKKyAgICAgICAgRnJlZUxpYnJhcnkobUQzZDExTW9kdWxlKTsKKyAgICAgICAg
bUQzZDExTW9kdWxlID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAobUR4Z2lNb2R1bGUpCisgICAg
eworICAgICAgICBGcmVlTGlicmFyeShtRHhnaU1vZHVsZSk7CisgICAgICAgIG1EeGdpTW9kdWxl
ID0gTlVMTDsKKyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6cmVzZXREZXZpY2UoKQorewor
ICAgIC8vIHJlY3JlYXRlIGV2ZXJ5dGhpbmcKKyAgICByZWxlYXNlKCk7CisgICAgRUdMaW50IHJl
c3VsdCA9IGluaXRpYWxpemUoKTsKKworICAgIGlmIChyZXN1bHQgIT0gRUdMX1NVQ0NFU1MpCisg
ICAgeworICAgICAgICBFUlIoIkNvdWxkIG5vdCByZWluaXRpYWxpemUgRDNEMTEgZGV2aWNlOiAl
MDhYIiwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1EZXZp
Y2VMb3N0ID0gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRFdPUkQgUmVuZGVyZXIx
MTo6Z2V0QWRhcHRlclZlbmRvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1BZGFwdGVyRGVzY3Jp
cHRpb24uVmVuZG9ySWQ7Cit9CisKK3N0ZDo6c3RyaW5nIFJlbmRlcmVyMTE6OmdldFJlbmRlcmVy
RGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSByZW5kZXJlclN0
cmluZzsKKworICAgIHJlbmRlcmVyU3RyaW5nIDw8IG1EZXNjcmlwdGlvbjsKKyAgICByZW5kZXJl
clN0cmluZyA8PCAiIERpcmVjdDNEMTEiOworCisgICAgcmVuZGVyZXJTdHJpbmcgPDwgIiB2c18i
IDw8IGdldE1ham9yU2hhZGVyTW9kZWwoKSA8PCAiXyIgPDwgZ2V0TWlub3JTaGFkZXJNb2RlbCgp
OworICAgIHJlbmRlcmVyU3RyaW5nIDw8ICIgcHNfIiA8PCBnZXRNYWpvclNoYWRlck1vZGVsKCkg
PDwgIl8iIDw8IGdldE1pbm9yU2hhZGVyTW9kZWwoKTsKKworICAgIHJldHVybiByZW5kZXJlclN0
cmluZy5zdHIoKTsKK30KKworR1VJRCBSZW5kZXJlcjExOjpnZXRBZGFwdGVySWRlbnRpZmllcigp
IGNvbnN0Cit7CisgICAgLy8gVXNlIHRoZSBhZGFwdGVyIExVSUQgYXMgb3VyIGFkYXB0ZXIgSUQK
KyAgICAvLyBUaGlzIG51bWJlciBpcyBsb2NhbCB0byBhIG1hY2hpbmUgaXMgb25seSBndWFyYW50
ZWVkIHRvIGJlIHVuaXF1ZSBiZXR3ZWVuIHJlc3RhcnRzCisgICAgTUVUQV9BU1NFUlQoc2l6ZW9m
KExVSUQpIDw9IHNpemVvZihHVUlEKSk7CisgICAgR1VJRCBhZGFwdGVySWQgPSB7MH07CisgICAg
bWVtY3B5KCZhZGFwdGVySWQsICZtQWRhcHRlckRlc2NyaXB0aW9uLkFkYXB0ZXJMdWlkLCBzaXpl
b2YoTFVJRCkpOworICAgIHJldHVybiBhZGFwdGVySWQ7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6
Z2V0QkdSQVRleHR1cmVTdXBwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUJHUkFUZXh0dXJl
U3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjExOjpnZXREWFQxVGV4dHVyZVN1cHBvcnQoKQor
eworICAgIHJldHVybiBtRFhUMVRleHR1cmVTdXBwb3J0OworfQorCitib29sIFJlbmRlcmVyMTE6
OmdldERYVDNUZXh0dXJlU3VwcG9ydCgpCit7CisgICAgcmV0dXJuIG1EWFQzVGV4dHVyZVN1cHBv
cnQ7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCkKK3sKKyAg
ICByZXR1cm4gbURYVDVUZXh0dXJlU3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjExOjpnZXRE
ZXB0aFRleHR1cmVTdXBwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbURlcHRoVGV4dHVyZVN1
cHBvcnQ7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJv
b2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSkKK3sKKyAgICAqcmVuZGVyYWJsZSA9IG1G
bG9hdDMyUmVuZGVyU3VwcG9ydDsKKyAgICAqZmlsdGVyaW5nID0gbUZsb2F0MzJGaWx0ZXJTdXBw
b3J0OworICAgIHJldHVybiBtRmxvYXQzMlRleHR1cmVTdXBwb3J0OworfQorCitib29sIFJlbmRl
cmVyMTE6OmdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJl
bmRlcmFibGUpCit7CisgICAgKnJlbmRlcmFibGUgPSBtRmxvYXQxNlJlbmRlclN1cHBvcnQ7Cisg
ICAgKmZpbHRlcmluZyA9IG1GbG9hdDE2RmlsdGVyU3VwcG9ydDsKKyAgICByZXR1cm4gbUZsb2F0
MTZUZXh0dXJlU3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjExOjpnZXRMdW1pbmFuY2VUZXh0
dXJlU3VwcG9ydCgpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlcmVyMTE6
OmdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKQoreworICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBSZW5kZXJlcjExOjpnZXRUZXh0dXJlRmlsdGVyQW5pc290cm9weVN1cHBvcnQo
KSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCitmbG9hdCBSZW5kZXJlcjExOjpnZXRU
ZXh0dXJlTWF4QW5pc290cm9weSgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVs
KQorICAgIHsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDoKKyAgICAgICAgcmV0
dXJuIEQzRDExX01BWF9NQVhBTklTT1RST1BZOworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZF
TF8xMF8xOgorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgorICAgICAgICByZXR1
cm4gRDNEMTBfTUFYX01BWEFOSVNPVFJPUFk7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RXZl
bnRRdWVyeVN1cHBvcnQoKQoreworICAgIHJldHVybiB0cnVlOworfQorCitSYW5nZSBSZW5kZXJl
cjExOjpnZXRWaWV3cG9ydEJvdW5kcygpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtRmVhdHVyZUxl
dmVsKQorICAgIHsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDoKKyAgICAgICAg
cmV0dXJuIFJhbmdlKEQzRDExX1ZJRVdQT1JUX0JPVU5EU19NSU4sIEQzRDExX1ZJRVdQT1JUX0JP
VU5EU19NQVgpOworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgorICAgICAgY2Fz
ZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgorICAgICAgICByZXR1cm4gUmFuZ2UoRDNEMTBfVklF
V1BPUlRfQk9VTkRTX01JTiwgRDNEMTBfVklFV1BPUlRfQk9VTkRTX01BWCk7CisgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gUmFuZ2UoMCwgMCk7CisgICAgfQor
fQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VmVydGV4VGV4dHVyZUltYWdlVW5p
dHMoKSBjb25zdAoreworICAgIE1FVEFfQVNTRVJUKE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZU
Rl9TTTQgPD0gZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklU
Uyk7CisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsKKyAgICAgIGNhc2UgRDNEX0ZF
QVRVUkVfTEVWRUxfMTFfMDoKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAg
ICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAgICAgICAgcmV0dXJuIE1BWF9URVhU
VVJFX0lNQUdFX1VOSVRTX1ZURl9TTTQ7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjExOjpn
ZXRNYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ2w6
Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTICsgZ2V0TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMo
KTsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldFJlc2VydmVkVmVydGV4VW5pZm9y
bVZlY3RvcnMoKSBjb25zdAoreworICAgIHJldHVybiAwOyAgIC8vIERyaXZlciB1bmlmb3JtcyBh
cmUgc3RvcmVkIGluIGEgc2VwYXJhdGUgY29uc3RhbnQgYnVmZmVyCit9CisKK3Vuc2lnbmVkIGlu
dCBSZW5kZXJlcjExOjpnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdAor
eworICAgIHJldHVybiAwOyAgIC8vIERyaXZlciB1bmlmb3JtcyBhcmUgc3RvcmVkIGluIGEgc2Vw
YXJhdGUgY29uc3RhbnQgYnVmZmVyCit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjExOjpnZXRN
YXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycygpIGNvbnN0Cit7CisgICAgTUVUQV9BU1NFUlQoTUFYX1ZF
UlRFWF9VTklGT1JNX1ZFQ1RPUlNfRDNEMTEgPD0gRDNEMTBfUkVRX0NPTlNUQU5UX0JVRkZFUl9F
TEVNRU5UX0NPVU5UKTsKKyAgICBBU1NFUlQobUZlYXR1cmVMZXZlbCA+PSBEM0RfRkVBVFVSRV9M
RVZFTF8xMF8wKTsKKyAgICByZXR1cm4gTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlNfRDNEMTE7
Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjExOjpnZXRNYXhGcmFnbWVudFVuaWZvcm1WZWN0
b3JzKCkgY29uc3QKK3sKKyAgICBNRVRBX0FTU0VSVChNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNU
T1JTX0QzRDExIDw9IEQzRDEwX1JFUV9DT05TVEFOVF9CVUZGRVJfRUxFTUVOVF9DT1VOVCk7Cisg
ICAgQVNTRVJUKG1GZWF0dXJlTGV2ZWwgPj0gRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMCk7CisgICAg
cmV0dXJuIE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlNfRDNEMTE7Cit9CisKK3Vuc2lnbmVk
IGludCBSZW5kZXJlcjExOjpnZXRNYXhWYXJ5aW5nVmVjdG9ycygpIGNvbnN0Cit7CisgICAgTUVU
QV9BU1NFUlQoZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WQVJZSU5HX1ZFQ1RPUlMgPT0gRDNEMTFf
VlNfT1VUUFVUX1JFR0lTVEVSX0NPVU5UKTsKKyAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCisg
ICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgorICAgICAgICByZXR1cm4g
RDNEMTFfVlNfT1VUUFVUX1JFR0lTVEVSX0NPVU5UOworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9M
RVZFTF8xMF8xOgorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgorICAgICAgICBy
ZXR1cm4gRDNEMTBfVlNfT1VUUFVUX1JFR0lTVEVSX0NPVU5UOworICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitib29sIFJlbmRlcmVy
MTE6OmdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1G
ZWF0dXJlTGV2ZWwpCisgICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgor
ICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgorICAgICAgY2FzZSBEM0RfRkVBVFVS
RV9MRVZFTF8xMF8wOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUmVuZGVy
ZXIxMTo6Z2V0T2NjbHVzaW9uUXVlcnlTdXBwb3J0KCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1G
ZWF0dXJlTGV2ZWwpCisgICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgor
ICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgorICAgICAgY2FzZSBEM0RfRkVBVFVS
RV9MRVZFTF8xMF8wOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUmVuZGVy
ZXIxMTo6Z2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdAoreworICAgIHN3aXRjaCAobUZlYXR1
cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6CisgICAg
ICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xF
VkVMXzEwXzA6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBSZW5kZXJlcjEx
OjpnZXRTaGFyZUhhbmRsZVN1cHBvcnQoKSBjb25zdAoreworICAgIC8vIFdlIG9ubHkgY3VycmVu
dGx5IHN1cHBvcnQgc2hhcmUgaGFuZGxlcyB3aXRoIEJHUkEgc3VyZmFjZXMsIGJlY2F1c2UKKyAg
ICAvLyBjaHJvbWUgbmVlZHMgQkdSQS4gT25jZSBjaHJvbWUgZml4ZXMgdGhpcywgd2Ugc2hvdWxk
IGFsd2F5cyBzdXBwb3J0IHRoZW0uCisgICAgLy8gUElYIGRvZXNuJ3Qgc2VlbSB0byBzdXBwb3J0
IHVzaW5nIHNoYXJlIGhhbmRsZXMsIHNvIGRpc2FibGUgdGhlbS4KKyAgICByZXR1cm4gZ2V0QkdS
QVRleHR1cmVTdXBwb3J0KCkgJiYgIWdsOjpwZXJmQWN0aXZlKCk7Cit9CisKK2Jvb2wgUmVuZGVy
ZXIxMTo6Z2V0RGVyaXZhdGl2ZUluc3RydWN0aW9uU3VwcG9ydCgpIGNvbnN0Cit7CisgICAgc3dp
dGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxf
MTFfMDoKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAgICAgIGNhc2UgRDNE
X0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29s
IFJlbmRlcmVyMTE6OmdldFBvc3RTdWJCdWZmZXJTdXBwb3J0KCkgY29uc3QKK3sKKyAgICAvLyBE
M0QxMSBkb2VzIG5vdCBzdXBwb3J0IHByZXNlbnQgd2l0aCBkaXJ0eSByZWN0YW5nbGVzIHVudGls
IEQzRDExLjEgYW5kIERYR0kgMS4yLgorICAgIHJldHVybiBmYWxzZTsKK30KKworaW50IFJlbmRl
cmVyMTE6OmdldE1ham9yU2hhZGVyTW9kZWwoKSBjb25zdAoreworICAgIHN3aXRjaCAobUZlYXR1
cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6IHJldHVy
biBEM0QxMV9TSEFERVJfTUFKT1JfVkVSU0lPTjsgICAvLyA1CisgICAgICBjYXNlIEQzRF9GRUFU
VVJFX0xFVkVMXzEwXzE6IHJldHVybiBEM0QxMF8xX1NIQURFUl9NQUpPUl9WRVJTSU9OOyAvLyA0
CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6IHJldHVybiBEM0QxMF9TSEFERVJf
TUFKT1JfVkVSU0lPTjsgICAvLyA0CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgICAg
IHJldHVybiAwOworICAgIH0KK30KKworaW50IFJlbmRlcmVyMTE6OmdldE1pbm9yU2hhZGVyTW9k
ZWwoKSBjb25zdAoreworICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBj
YXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6IHJldHVybiBEM0QxMV9TSEFERVJfTUlOT1JfVkVS
U0lPTjsgICAvLyAwCisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6IHJldHVybiBE
M0QxMF8xX1NIQURFUl9NSU5PUl9WRVJTSU9OOyAvLyAxCisgICAgICBjYXNlIEQzRF9GRUFUVVJF
X0xFVkVMXzEwXzA6IHJldHVybiBEM0QxMF9TSEFERVJfTUlOT1JfVkVSU0lPTjsgICAvLyAwCisg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgICAgIHJldHVybiAwOworICAgIH0KK30KKwor
ZmxvYXQgUmVuZGVyZXIxMTo6Z2V0TWF4UG9pbnRTaXplKCkgY29uc3QKK3sKKyAgICAvLyBjaG9v
c2UgYSByZWFzb25hYmxlIG1heGltdW0uIHdlIGVuZm9yY2UgdGhpcyBpbiB0aGUgc2hhZGVyLgor
ICAgIC8vIChuYjogb24gYSBSYWRlb24gMjYwMHh0LCBEWDkgcmVwb3J0cyBhIDI1NiBtYXggcG9p
bnQgc2l6ZSkKKyAgICByZXR1cm4gMTAyNC4wZjsKK30KKworaW50IFJlbmRlcmVyMTE6OmdldE1h
eFZpZXdwb3J0RGltZW5zaW9uKCkgY29uc3QKK3sKKyAgICAvLyBNYXhpbXVtIHZpZXdwb3J0IHNp
emUgbXVzdCBiZSBhdCBsZWFzdCBhcyBsYXJnZSBhcyB0aGUgbGFyZ2VzdCByZW5kZXIgYnVmZmVy
IChvciBsYXJnZXIpLgorICAgIC8vIEluIG91ciBjYXNlIHJldHVybiB0aGUgbWF4aW11bSB0ZXh0
dXJlIHNpemUsIHdoaWNoIGlzIHRoZSBtYXhpbXVtIHJlbmRlciBidWZmZXIgc2l6ZS4KKyAgICBN
RVRBX0FTU0VSVChEM0QxMV9SRVFfVEVYVFVSRTJEX1VfT1JfVl9ESU1FTlNJT04gKiAyIC0gMSA8
PSBEM0QxMV9WSUVXUE9SVF9CT1VORFNfTUFYKTsKKyAgICBNRVRBX0FTU0VSVChEM0QxMF9SRVFf
VEVYVFVSRTJEX1VfT1JfVl9ESU1FTlNJT04gKiAyIC0gMSA8PSBEM0QxMF9WSUVXUE9SVF9CT1VO
RFNfTUFYKTsKKworICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNl
IEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6IAorICAgICAgICByZXR1cm4gRDNEMTFfUkVRX1RFWFRV
UkUyRF9VX09SX1ZfRElNRU5TSU9OOyAgIC8vIDE2Mzg0CisgICAgICBjYXNlIEQzRF9GRUFUVVJF
X0xFVkVMXzEwXzE6CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6IAorICAgICAg
ICByZXR1cm4gRDNEMTBfUkVRX1RFWFRVUkUyRF9VX09SX1ZfRElNRU5TSU9OOyAgIC8vIDgxOTIK
KyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgCisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KK30KKworaW50IFJlbmRlcmVyMTE6OmdldE1heFRleHR1cmVXaWR0aCgpIGNvbnN0Cit7
CisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsKKyAgICAgIGNhc2UgRDNEX0ZFQVRV
UkVfTEVWRUxfMTFfMDogcmV0dXJuIEQzRDExX1JFUV9URVhUVVJFMkRfVV9PUl9WX0RJTUVOU0lP
TjsgICAvLyAxNjM4NAorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgorICAgICAg
Y2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOiByZXR1cm4gRDNEMTBfUkVRX1RFWFRVUkUyRF9V
X09SX1ZfRElNRU5TSU9OOyAgIC8vIDgxOTIKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
ICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VGV4dHVy
ZUhlaWdodCgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsKKyAg
ICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDogcmV0dXJuIEQzRDExX1JFUV9URVhUVVJF
MkRfVV9PUl9WX0RJTUVOU0lPTjsgICAvLyAxNjM4NAorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9M
RVZFTF8xMF8xOgorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOiByZXR1cm4gRDNE
MTBfUkVRX1RFWFRVUkUyRF9VX09SX1ZfRElNRU5TSU9OOyAgIC8vIDgxOTIKKyAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitib29sIFJlbmRl
cmVyMTE6OmdldDMyQml0SW5kZXhTdXBwb3J0KCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1GZWF0
dXJlTGV2ZWwpCisgICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOiAKKyAg
ICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVf
TEVWRUxfMTBfMDogcmV0dXJuIEQzRDEwX1JFUV9EUkFXSU5ERVhFRF9JTkRFWF9DT1VOVF8yX1RP
X0VYUCA+PSAzMjsgICAvLyB0cnVlCisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2ludCBSZW5kZXJlcjExOjpnZXRNaW5Td2FwSW50
ZXJ2YWwoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCitpbnQgUmVuZGVyZXIxMTo6Z2V0
TWF4U3dhcEludGVydmFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gNDsKK30KKworaW50IFJlbmRl
cmVyMTE6OmdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSBjb25zdAoreworICAgIHJldHVybiBtTWF4
U3VwcG9ydGVkU2FtcGxlczsKK30KKworaW50IFJlbmRlcmVyMTE6OmdldE5lYXJlc3RTdXBwb3J0
ZWRTYW1wbGVzKERYR0lfRk9STUFUIGZvcm1hdCwgdW5zaWduZWQgaW50IHJlcXVlc3RlZCkgY29u
c3QKK3sKKyAgICBpZiAocmVxdWVzdGVkID09IDApCisgICAgeworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisKKyAgICBNdWx0aXNhbXBsZVN1cHBvcnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBtTXVsdGlzYW1wbGVTdXBwb3J0TWFwLmZpbmQoZm9ybWF0KTsKKyAgICBpZiAoaXRlciAhPSBt
TXVsdGlzYW1wbGVTdXBwb3J0TWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgY29uc3QgTXVsdGlz
YW1wbGVTdXBwb3J0SW5mbyYgaW5mbyA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IHJlcXVlc3RlZCAtIDE7IGkgPCBEM0QxMV9NQVhfTVVMVElTQU1QTEVfU0FN
UExFX0NPVU5UOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbmZvLnF1YWxpdHlM
ZXZlbHNbaV0gPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBpICsg
MTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAtMTsKK30K
KwordW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldE1heFJlbmRlclRhcmdldHMoKSBjb25zdAor
eworICAgIE1FVEFfQVNTRVJUKEQzRDExX1NJTVVMVEFORU9VU19SRU5ERVJfVEFSR0VUX0NPVU5U
IDw9IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTKTsKKyAgICBNRVRBX0FTU0VS
VChEM0QxMF9TSU1VTFRBTkVPVVNfUkVOREVSX1RBUkdFVF9DT1VOVCA8PSBnbDo6SU1QTEVNRU5U
QVRJT05fTUFYX0RSQVdfQlVGRkVSUyk7CisKKyAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCisg
ICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgorICAgICAgICByZXR1cm4g
RDNEMTFfU0lNVUxUQU5FT1VTX1JFTkRFUl9UQVJHRVRfQ09VTlQ7ICAvLyA4CisgICAgICBjYXNl
IEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEw
XzA6CisgICAgICAgIC8vIEZlYXR1cmUgbGV2ZWwgMTAuMCBhbmQgMTAuMSBjYXJkcyBwZXJmb3Jt
IHZlcnkgcG9vcmx5IHdoZW4gdGhlIHBpeGVsIHNoYWRlcgorICAgICAgICAvLyBvdXRwdXRzIHRv
IG11bHRpcGxlIFJUcyB0aGF0IGFyZSBub3QgYm91bmQuCisgICAgICAgIC8vIFRPRE86IFJlbW92
ZSBwaXhlbCBzaGFkZXIgb3V0cHV0cyBmb3IgcmVuZGVyIHRhcmdldHMgdGhhdCBhcmUgbm90IGJv
dW5kLgorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KK30KKworYm9vbCBSZW5kZXJlcjExOjpj
b3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqZGVzdCwgVGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc291cmNlKQoreworICAgIGlmIChzb3VyY2UgJiYgZGVzdCkK
KyAgICB7CisgICAgICAgIFRleHR1cmVTdG9yYWdlMTFfMkQgKnNvdXJjZTExID0gVGV4dHVyZVN0
b3JhZ2UxMV8yRDo6bWFrZVRleHR1cmVTdG9yYWdlMTFfMkQoc291cmNlLT5nZXRTdG9yYWdlSW5z
dGFuY2UoKSk7CisgICAgICAgIFRleHR1cmVTdG9yYWdlMTFfMkQgKmRlc3QxMSA9IFRleHR1cmVT
dG9yYWdlMTFfMkQ6Om1ha2VUZXh0dXJlU3RvcmFnZTExXzJEKGRlc3QtPmdldFN0b3JhZ2VJbnN0
YW5jZSgpKTsKKworICAgICAgICBtRGV2aWNlQ29udGV4dC0+Q29weVJlc291cmNlKGRlc3QxMS0+
Z2V0QmFzZVRleHR1cmUoKSwgc291cmNlMTEtPmdldEJhc2VUZXh0dXJlKCkpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVy
ZXIxMTo6Y29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqZGVz
dCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzb3VyY2UpCit7CisgICAgaWYgKHNvdXJj
ZSAmJiBkZXN0KQorICAgIHsKKyAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlICpzb3VyY2Ux
MSA9IFRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlMTFfQ3ViZShzb3Vy
Y2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMV9DdWJl
ICpkZXN0MTEgPSBUZXh0dXJlU3RvcmFnZTExX0N1YmU6Om1ha2VUZXh0dXJlU3RvcmFnZTExX0N1
YmUoZGVzdC0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworCisgICAgICAgIG1EZXZpY2VDb250ZXh0
LT5Db3B5UmVzb3VyY2UoZGVzdDExLT5nZXRCYXNlVGV4dHVyZSgpLCBzb3VyY2UxMS0+Z2V0QmFz
ZVRleHR1cmUoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBSZW5kZXJlcjExOjpjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpm
cmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RG
b3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBHTGludCBsZXZlbCkK
K3sKKyAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRS
ZWFkQ29sb3JidWZmZXIoKTsKKyAgICBpZiAoIWNvbG9yYnVmZmVyKQorICAgIHsKKyAgICAgICAg
RVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIGNvbG9yIGJ1ZmZlciBmcm9tIHRoZSBmcmFtZSBi
dWZmZXIuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFs
c2UpOworICAgIH0KKworICAgIFJlbmRlclRhcmdldDExICpzb3VyY2VSZW5kZXJUYXJnZXQgPSBS
ZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGNvbG9yYnVmZmVyLT5nZXRSZW5kZXJU
YXJnZXQoKSk7CisgICAgaWYgKCFzb3VyY2VSZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBF
UlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCBmcm9tIHRoZSBmcmFtZSBi
dWZmZXIuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFs
c2UpOworICAgIH0KKworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc291cmNlID0gc291
cmNlUmVuZGVyVGFyZ2V0LT5nZXRTaGFkZXJSZXNvdXJjZVZpZXcoKTsKKyAgICBpZiAoIXNvdXJj
ZSkKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFy
Z2V0IHZpZXcgZnJvbSB0aGUgcmVuZGVyIHRhcmdldC4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisgICAgVGV4dHVyZVN0b3Jh
Z2UxMV8yRCAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMV8yRDo6bWFrZVRleHR1cmVTdG9y
YWdlMTFfMkQoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAgIGlmICghc3RvcmFn
ZTExKQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHRleHR1cmUg
c3RvcmFnZSBmcm9tIHRoZSBkZXN0aW5hdGlvbi4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisgICAgUmVuZGVyVGFyZ2V0MTEg
KmRlc3RSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKHN0
b3JhZ2UxMS0+Z2V0UmVuZGVyVGFyZ2V0KGxldmVsKSk7CisgICAgaWYgKCFkZXN0UmVuZGVyVGFy
Z2V0KQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0
YXJnZXQgZnJvbSB0aGUgZGVzdGluYXRpb24gc3RvcmFnZS4iKTsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisgICAgSUQzRDExUmVu
ZGVyVGFyZ2V0VmlldyAqZGVzdCA9IGRlc3RSZW5kZXJUYXJnZXQtPmdldFJlbmRlclRhcmdldFZp
ZXcoKTsKKyAgICBpZiAoIWRlc3QpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRy
aWV2ZSB0aGUgcmVuZGVyIHRhcmdldCB2aWV3IGZyb20gdGhlIGRlc3RpbmF0aW9uIHJlbmRlciB0
YXJnZXQuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFs
c2UpOworICAgIH0KKworICAgIGdsOjpSZWN0YW5nbGUgZGVzdFJlY3Q7CisgICAgZGVzdFJlY3Qu
eCA9IHhvZmZzZXQ7CisgICAgZGVzdFJlY3QueSA9IHlvZmZzZXQ7CisgICAgZGVzdFJlY3Qud2lk
dGggPSBzb3VyY2VSZWN0LndpZHRoOworICAgIGRlc3RSZWN0LmhlaWdodCA9IHNvdXJjZVJlY3Qu
aGVpZ2h0OworCisgICAgYm9vbCByZXQgPSBjb3B5VGV4dHVyZShzb3VyY2UsIHNvdXJjZVJlY3Qs
IHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRI
ZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QsIGRlc3RSZWN0LCBkZXN0
UmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwg
ZGVzdEZvcm1hdCk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitib29sIFJlbmRlcmVyMTE6OmNv
cHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xl
ICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
Q3ViZSAqc3RvcmFnZSwgR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpCit7CisgICAgZ2w6OlJl
bmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVy
KCk7CisgICAgaWYgKCFjb2xvcmJ1ZmZlcikKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRv
IHJldHJpZXZlIHRoZSBjb2xvciBidWZmZXIgZnJvbSB0aGUgZnJhbWUgYnVmZmVyLiIpOworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CisK
KyAgICBSZW5kZXJUYXJnZXQxMSAqc291cmNlUmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6
Om1ha2VSZW5kZXJUYXJnZXQxMShjb2xvcmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOworICAg
IGlmICghc291cmNlUmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8g
cmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgZnJhbWUgYnVmZmVyLiIpOworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CisK
KyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNvdXJjZSA9IHNvdXJjZVJlbmRlclRhcmdl
dC0+Z2V0U2hhZGVyUmVzb3VyY2VWaWV3KCk7CisgICAgaWYgKCFzb3VyY2UpCisgICAgeworICAg
ICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCB2aWV3IGZyb20g
dGhlIHJlbmRlciB0YXJnZXQuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSwgZmFsc2UpOworICAgIH0KKworICAgIFRleHR1cmVTdG9yYWdlMTFfQ3ViZSAqc3Rv
cmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV9DdWJl
KHN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICBpZiAoIXN0b3JhZ2UxMSkKKyAg
ICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSB0ZXh0dXJlIHN0b3JhZ2Ug
ZnJvbSB0aGUgZGVzdGluYXRpb24uIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSwgZmFsc2UpOworICAgIH0KKworICAgIFJlbmRlclRhcmdldDExICpkZXN0UmVu
ZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShzdG9yYWdlMTEt
PmdldFJlbmRlclRhcmdldCh0YXJnZXQsIGxldmVsKSk7CisgICAgaWYgKCFkZXN0UmVuZGVyVGFy
Z2V0KQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0
YXJnZXQgZnJvbSB0aGUgZGVzdGluYXRpb24gc3RvcmFnZS4iKTsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisgICAgSUQzRDExUmVu
ZGVyVGFyZ2V0VmlldyAqZGVzdCA9IGRlc3RSZW5kZXJUYXJnZXQtPmdldFJlbmRlclRhcmdldFZp
ZXcoKTsKKyAgICBpZiAoIWRlc3QpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRy
aWV2ZSB0aGUgcmVuZGVyIHRhcmdldCB2aWV3IGZyb20gdGhlIGRlc3RpbmF0aW9uIHJlbmRlciB0
YXJnZXQuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFs
c2UpOworICAgIH0KKworICAgIGdsOjpSZWN0YW5nbGUgZGVzdFJlY3Q7CisgICAgZGVzdFJlY3Qu
eCA9IHhvZmZzZXQ7CisgICAgZGVzdFJlY3QueSA9IHlvZmZzZXQ7CisgICAgZGVzdFJlY3Qud2lk
dGggPSBzb3VyY2VSZWN0LndpZHRoOworICAgIGRlc3RSZWN0LmhlaWdodCA9IHNvdXJjZVJlY3Qu
aGVpZ2h0OworCisgICAgYm9vbCByZXQgPSBjb3B5VGV4dHVyZShzb3VyY2UsIHNvdXJjZVJlY3Qs
IHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRI
ZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QsIGRlc3RSZWN0LCBkZXN0
UmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwg
ZGVzdEZvcm1hdCk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitib29sIFJlbmRlcmVyMTE6OmNv
cHlUZXh0dXJlKElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc291cmNlLCBjb25zdCBnbDo6UmVj
dGFuZ2xlICZzb3VyY2VBcmVhLCB1bnNpZ25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGlu
dCBzb3VyY2VIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEM0QxMVJlbmRl
clRhcmdldFZpZXcgKmRlc3QsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRlc3RBcmVhLCB1bnNpZ25l
ZCBpbnQgZGVzdFdpZHRoLCB1bnNpZ25lZCBpbnQgZGVzdEhlaWdodCwgR0xlbnVtIGRlc3RGb3Jt
YXQpCit7CisgICAgSFJFU1VMVCByZXN1bHQ7CisKKyAgICBpZiAoIW1Db3B5UmVzb3VyY2VzSW5p
dGlhbGl6ZWQpCisgICAgeworICAgICAgICBBU1NFUlQoIW1Db3B5VkIgJiYgIW1Db3B5U2FtcGxl
ciAmJiAhbUNvcHlJTCAmJiAhbUNvcHlWUyAmJiAhbUNvcHlSR0JBUFMgJiYgIW1Db3B5UkdCUFMg
JiYgIW1Db3B5THVtUFMgJiYgIW1Db3B5THVtQWxwaGFQUyk7CisKKyAgICAgICAgRDNEMTFfQlVG
RkVSX0RFU0MgdmJEZXNjOworICAgICAgICB2YkRlc2MuQnl0ZVdpZHRoID0gc2l6ZW9mKGQzZDEx
OjpQb3NpdGlvblRleENvb3JkVmVydGV4KSAqIDQ7CisgICAgICAgIHZiRGVzYy5Vc2FnZSA9IEQz
RDExX1VTQUdFX0RZTkFNSUM7CisgICAgICAgIHZiRGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5E
X1ZFUlRFWF9CVUZGRVI7CisgICAgICAgIHZiRGVzYy5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQ
VV9BQ0NFU1NfV1JJVEU7CisgICAgICAgIHZiRGVzYy5NaXNjRmxhZ3MgPSAwOworICAgICAgICB2
YkRlc2MuU3RydWN0dXJlQnl0ZVN0cmlkZSA9IDA7CisKKyAgICAgICAgcmVzdWx0ID0gbURldmlj
ZS0+Q3JlYXRlQnVmZmVyKCZ2YkRlc2MsIE5VTEwsICZtQ29weVZCKTsKKyAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ29weVZC
LCAiUmVuZGVyZXIxMSBjb3B5IHRleHR1cmUgdmVydGV4IGJ1ZmZlciIpOworCisgICAgICAgIEQz
RDExX1NBTVBMRVJfREVTQyBzYW1wbGVyRGVzYzsKKyAgICAgICAgc2FtcGxlckRlc2MuRmlsdGVy
ID0gRDNEMTFfRklMVEVSX01JTl9NQUdfTUlQX0xJTkVBUjsKKyAgICAgICAgc2FtcGxlckRlc2Mu
QWRkcmVzc1UgPSBEM0QxMV9URVhUVVJFX0FERFJFU1NfQ0xBTVA7CisgICAgICAgIHNhbXBsZXJE
ZXNjLkFkZHJlc3NWID0gRDNEMTFfVEVYVFVSRV9BRERSRVNTX0NMQU1QOworICAgICAgICBzYW1w
bGVyRGVzYy5BZGRyZXNzVyA9IEQzRDExX1RFWFRVUkVfQUREUkVTU19DTEFNUDsKKyAgICAgICAg
c2FtcGxlckRlc2MuTWlwTE9EQmlhcyA9IDAuMGY7CisgICAgICAgIHNhbXBsZXJEZXNjLk1heEFu
aXNvdHJvcHkgPSAwOworICAgICAgICBzYW1wbGVyRGVzYy5Db21wYXJpc29uRnVuYyA9IEQzRDEx
X0NPTVBBUklTT05fTkVWRVI7CisgICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzBdID0g
MC4wZjsKKyAgICAgICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbMV0gPSAwLjBmOworICAgICAg
ICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclsyXSA9IDAuMGY7CisgICAgICAgIHNhbXBsZXJEZXNj
LkJvcmRlckNvbG9yWzNdID0gMC4wZjsKKyAgICAgICAgc2FtcGxlckRlc2MuTWluTE9EID0gMC4w
ZjsKKyAgICAgICAgc2FtcGxlckRlc2MuTWF4TE9EID0gMC4wZjsKKworICAgICAgICByZXN1bHQg
PSBtRGV2aWNlLT5DcmVhdGVTYW1wbGVyU3RhdGUoJnNhbXBsZXJEZXNjLCAmbUNvcHlTYW1wbGVy
KTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgZDNkMTE6OlNl
dERlYnVnTmFtZShtQ29weVNhbXBsZXIsICJSZW5kZXJlcjExIGNvcHkgc2FtcGxlciIpOworCisg
ICAgICAgIEQzRDExX0lOUFVUX0VMRU1FTlRfREVTQyBxdWFkTGF5b3V0W10gPQorICAgICAgICB7
CisgICAgICAgICAgICB7ICJQT1NJVElPTiIsIDAsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwg
MCwgMCwgRDNEMTFfSU5QVVRfUEVSX1ZFUlRFWF9EQVRBLCAwIH0sCisgICAgICAgICAgICB7ICJU
RVhDT09SRCIsIDAsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgMCwgOCwgRDNEMTFfSU5QVVRf
UEVSX1ZFUlRFWF9EQVRBLCAwIH0sCisgICAgICAgIH07CisKKyAgICAgICAgcmVzdWx0ID0gbURl
dmljZS0+Q3JlYXRlSW5wdXRMYXlvdXQocXVhZExheW91dCwgMiwgZ19WU19QYXNzdGhyb3VnaCwg
c2l6ZW9mKGdfVlNfUGFzc3Rocm91Z2gpLCAmbUNvcHlJTCk7CisgICAgICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7CisgICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNvcHlJTCwgIlJl
bmRlcmVyMTEgY29weSB0ZXh0dXJlIGlucHV0IGxheW91dCIpOworCisgICAgICAgIHJlc3VsdCA9
IG1EZXZpY2UtPkNyZWF0ZVZlcnRleFNoYWRlcihnX1ZTX1Bhc3N0aHJvdWdoLCBzaXplb2YoZ19W
U19QYXNzdGhyb3VnaCksIE5VTEwsICZtQ29weVZTKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURF
RChyZXN1bHQpKTsKKyAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ29weVZTLCAiUmVuZGVy
ZXIxMSBjb3B5IHRleHR1cmUgdmVydGV4IHNoYWRlciIpOworCisgICAgICAgIHJlc3VsdCA9IG1E
ZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdfUFNfUGFzc3Rocm91Z2hSR0JBLCBzaXplb2YoZ19Q
U19QYXNzdGhyb3VnaFJHQkEpLCBOVUxMLCAmbUNvcHlSR0JBUFMpOworICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5UkdC
QVBTLCAiUmVuZGVyZXIxMSBjb3B5IHRleHR1cmUgUkdCQSBwaXhlbCBzaGFkZXIiKTsKKworICAg
ICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihnX1BTX1Bhc3N0aHJvdWdo
UkdCLCBzaXplb2YoZ19QU19QYXNzdGhyb3VnaFJHQiksIE5VTEwsICZtQ29weVJHQlBTKTsKKyAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgZDNkMTE6OlNldERlYnVn
TmFtZShtQ29weVJHQlBTLCAiUmVuZGVyZXIxMSBjb3B5IHRleHR1cmUgUkdCIHBpeGVsIHNoYWRl
ciIpOworCisgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdfUFNf
UGFzc3Rocm91Z2hMdW0sIHNpemVvZihnX1BTX1Bhc3N0aHJvdWdoTHVtKSwgTlVMTCwgJm1Db3B5
THVtUFMpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICBkM2Qx
MTo6U2V0RGVidWdOYW1lKG1Db3B5THVtUFMsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSBsdW1p
bmFuY2UgcGl4ZWwgc2hhZGVyIik7CisKKyAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRl
UGl4ZWxTaGFkZXIoZ19QU19QYXNzdGhyb3VnaEx1bUFscGhhLCBzaXplb2YoZ19QU19QYXNzdGhy
b3VnaEx1bUFscGhhKSwgTlVMTCwgJm1Db3B5THVtQWxwaGFQUyk7CisgICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNvcHlMdW1B
bHBoYVBTLCAiUmVuZGVyZXIxMSBjb3B5IHRleHR1cmUgbHVtaW5hbmNlIGFscGhhIHBpeGVsIHNo
YWRlciIpOworCisgICAgICAgIG1Db3B5UmVzb3VyY2VzSW5pdGlhbGl6ZWQgPSB0cnVlOworICAg
IH0KKworICAgIC8vIFZlcmlmeSB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmVhIHNpemVz
CisgICAgaWYgKHNvdXJjZUFyZWEueCA8IDAgfHwgc291cmNlQXJlYS54ICsgc291cmNlQXJlYS53
aWR0aCA+IHN0YXRpY19jYXN0PGludD4oc291cmNlV2lkdGgpIHx8CisgICAgICAgIHNvdXJjZUFy
ZWEueSA8IDAgfHwgc291cmNlQXJlYS55ICsgc291cmNlQXJlYS5oZWlnaHQgPiBzdGF0aWNfY2Fz
dDxpbnQ+KHNvdXJjZUhlaWdodCkgfHwKKyAgICAgICAgZGVzdEFyZWEueCA8IDAgfHwgZGVzdEFy
ZWEueCArIGRlc3RBcmVhLndpZHRoID4gc3RhdGljX2Nhc3Q8aW50PihkZXN0V2lkdGgpIHx8Cisg
ICAgICAgIGRlc3RBcmVhLnkgPCAwIHx8IGRlc3RBcmVhLnkgKyBkZXN0QXJlYS5oZWlnaHQgPiBz
dGF0aWNfY2FzdDxpbnQ+KGRlc3RIZWlnaHQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX1ZBTFVFLCBmYWxzZSk7CisgICAgfQorCisgICAgLy8gU2V0IHZlcnRp
Y2VzCisgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOworICAgIHJl
c3VsdCA9IG1EZXZpY2VDb250ZXh0LT5NYXAobUNvcHlWQiwgMCwgRDNEMTFfTUFQX1dSSVRFX0RJ
U0NBUkQsIDAsICZtYXBwZWRSZXNvdXJjZSk7CisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAg
IHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gbWFwIHZlcnRleCBidWZmZXIgZm9yIHRleHR1cmUg
Y29weSwgSFJFU1VMVDogMHglWC4iLCByZXN1bHQpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CisKKyAgICBkM2QxMTo6UG9zaXRpb25U
ZXhDb29yZFZlcnRleCAqdmVydGljZXMgPSBzdGF0aWNfY2FzdDxkM2QxMTo6UG9zaXRpb25UZXhD
b29yZFZlcnRleCo+KG1hcHBlZFJlc291cmNlLnBEYXRhKTsKKworICAgIC8vIENyZWF0ZSBhIHF1
YWQgaW4gaG9tb2dlbmVvdXMgY29vcmRpbmF0ZXMKKyAgICBmbG9hdCB4MSA9IChkZXN0QXJlYS54
IC8gZmxvYXQoZGVzdFdpZHRoKSkgKiAyLjBmIC0gMS4wZjsKKyAgICBmbG9hdCB5MSA9ICgoZGVz
dEhlaWdodCAtIGRlc3RBcmVhLnkgLSBkZXN0QXJlYS5oZWlnaHQpIC8gZmxvYXQoZGVzdEhlaWdo
dCkpICogMi4wZiAtIDEuMGY7CisgICAgZmxvYXQgeDIgPSAoKGRlc3RBcmVhLnggKyBkZXN0QXJl
YS53aWR0aCkgLyBmbG9hdChkZXN0V2lkdGgpKSAqIDIuMGYgLSAxLjBmOworICAgIGZsb2F0IHky
ID0gKChkZXN0SGVpZ2h0IC0gZGVzdEFyZWEueSkgLyBmbG9hdChkZXN0SGVpZ2h0KSkgKiAyLjBm
IC0gMS4wZjsKKworICAgIGZsb2F0IHUxID0gc291cmNlQXJlYS54IC8gZmxvYXQoc291cmNlV2lk
dGgpOworICAgIGZsb2F0IHYxID0gc291cmNlQXJlYS55IC8gZmxvYXQoc291cmNlSGVpZ2h0KTsK
KyAgICBmbG9hdCB1MiA9IChzb3VyY2VBcmVhLnggKyBzb3VyY2VBcmVhLndpZHRoKSAvIGZsb2F0
KHNvdXJjZVdpZHRoKTsKKyAgICBmbG9hdCB2MiA9IChzb3VyY2VBcmVhLnkgKyBzb3VyY2VBcmVh
LmhlaWdodCkgLyBmbG9hdChzb3VyY2VIZWlnaHQpOworCisgICAgZDNkMTE6OlNldFBvc2l0aW9u
VGV4Q29vcmRWZXJ0ZXgoJnZlcnRpY2VzWzBdLCB4MSwgeTEsIHUxLCB2Mik7CisgICAgZDNkMTE6
OlNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgoJnZlcnRpY2VzWzFdLCB4MSwgeTIsIHUxLCB2MSk7
CisgICAgZDNkMTE6OlNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgoJnZlcnRpY2VzWzJdLCB4Miwg
eTEsIHUyLCB2Mik7CisgICAgZDNkMTE6OlNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgoJnZlcnRp
Y2VzWzNdLCB4MiwgeTIsIHUyLCB2MSk7CisKKyAgICBtRGV2aWNlQ29udGV4dC0+VW5tYXAobUNv
cHlWQiwgMCk7CisKKyAgICBzdGF0aWMgVUlOVCBzdHJpZGUgPSBzaXplb2YoZDNkMTE6OlBvc2l0
aW9uVGV4Q29vcmRWZXJ0ZXgpOworICAgIHN0YXRpYyBVSU5UIHN0YXJ0SWR4ID0gMDsKKyAgICBt
RGV2aWNlQ29udGV4dC0+SUFTZXRWZXJ0ZXhCdWZmZXJzKDAsIDEsICZtQ29weVZCLCAmc3RyaWRl
LCAmc3RhcnRJZHgpOworCisgICAgLy8gQXBwbHkgc3RhdGUKKyAgICBtRGV2aWNlQ29udGV4dC0+
T01TZXRCbGVuZFN0YXRlKE5VTEwsIE5VTEwsIDB4RkZGRkZGRik7CisgICAgbURldmljZUNvbnRl
eHQtPk9NU2V0RGVwdGhTdGVuY2lsU3RhdGUoTlVMTCwgMHhGRkZGRkZGRik7CisgICAgbURldmlj
ZUNvbnRleHQtPlJTU2V0U3RhdGUoTlVMTCk7CisKKyAgICAvLyBBcHBseSBzaGFkZXJzCisgICAg
bURldmljZUNvbnRleHQtPklBU2V0SW5wdXRMYXlvdXQobUNvcHlJTCk7CisgICAgbURldmljZUNv
bnRleHQtPklBU2V0UHJpbWl0aXZlVG9wb2xvZ3koRDNEX1BSSU1JVElWRV9UT1BPTE9HWV9UUklB
TkdMRVNUUklQKTsKKyAgICBtRGV2aWNlQ29udGV4dC0+VlNTZXRTaGFkZXIobUNvcHlWUywgTlVM
TCwgMCk7CisKKyAgICBJRDNEMTFQaXhlbFNoYWRlciAqcHMgPSBOVUxMOworICAgIHN3aXRjaChk
ZXN0Rm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgR0xfUkdCQTogICAgICAgICAgICBwcyA9IG1D
b3B5UkdCQVBTOyAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JHQjogICAgICAgICAgICAgcHMg
PSBtQ29weVJHQlBTOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9BTFBIQTogICAgICAgICAg
IHBzID0gbUNvcHlSR0JBUFM7ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6ICAg
ICAgICBwcyA9IG1Db3B5UkdCQVBTOyAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xVTUlOQU5D
RTogICAgICAgcHMgPSBtQ29weUx1bVBTOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MVU1J
TkFOQ0VfQUxQSEE6IHBzID0gbUNvcHlMdW1BbHBoYVBTOyBicmVhazsKKyAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7ICBwcyA9IE5VTEw7ICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgbURldmljZUNvbnRleHQtPlBTU2V0U2hhZGVyKHBzLCBOVUxMLCAwKTsKKyAgICBtRGV2aWNl
Q29udGV4dC0+R1NTZXRTaGFkZXIoTlVMTCwgTlVMTCwgMCk7CisKKyAgICAvLyBVbnNldCB0aGUg
Y3VycmVudGx5IGJvdW5kIHNoYWRlciByZXNvdXJjZSB0byBhdm9pZCBjb25mbGljdHMKKyAgICBz
dGF0aWMgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpjb25zdCBudWxsU1JWID0gTlVMTDsKKyAg
ICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXJSZXNvdXJjZXMoMCwgMSwgJm51bGxTUlYpOwor
CisgICAgLy8gQXBwbHkgcmVuZGVyIHRhcmdldAorICAgIHNldE9uZVRpbWVSZW5kZXJUYXJnZXQo
ZGVzdCk7CisKKyAgICAvLyBTZXQgdGhlIHZpZXdwb3J0CisgICAgRDNEMTFfVklFV1BPUlQgdmll
d3BvcnQ7CisgICAgdmlld3BvcnQuVG9wTGVmdFggPSAwOworICAgIHZpZXdwb3J0LlRvcExlZnRZ
ID0gMDsKKyAgICB2aWV3cG9ydC5XaWR0aCA9IGRlc3RXaWR0aDsKKyAgICB2aWV3cG9ydC5IZWln
aHQgPSBkZXN0SGVpZ2h0OworICAgIHZpZXdwb3J0Lk1pbkRlcHRoID0gMC4wZjsKKyAgICB2aWV3
cG9ydC5NYXhEZXB0aCA9IDEuMGY7CisgICAgbURldmljZUNvbnRleHQtPlJTU2V0Vmlld3BvcnRz
KDEsICZ2aWV3cG9ydCk7CisKKyAgICAvLyBBcHBseSB0ZXh0dXJlcworICAgIG1EZXZpY2VDb250
ZXh0LT5QU1NldFNoYWRlclJlc291cmNlcygwLCAxLCAmc291cmNlKTsKKyAgICBtRGV2aWNlQ29u
dGV4dC0+UFNTZXRTYW1wbGVycygwLCAxLCAmbUNvcHlTYW1wbGVyKTsKKworICAgIC8vIERyYXcg
dGhlIHF1YWQKKyAgICBtRGV2aWNlQ29udGV4dC0+RHJhdyg0LCAwKTsKKworICAgIC8vIFVuYmlu
ZCB0ZXh0dXJlcyBhbmQgcmVuZGVyIHRhcmdldHMgYW5kIHZlcnRleCBidWZmZXIKKyAgICBtRGV2
aWNlQ29udGV4dC0+UFNTZXRTaGFkZXJSZXNvdXJjZXMoMCwgMSwgJm51bGxTUlYpOworCisgICAg
dW5hcHBseVJlbmRlclRhcmdldHMoKTsKKworICAgIFVJTlQgemVybyA9IDA7CisgICAgSUQzRDEx
QnVmZmVyICpjb25zdCBudWxsQnVmZmVyID0gTlVMTDsKKyAgICBtRGV2aWNlQ29udGV4dC0+SUFT
ZXRWZXJ0ZXhCdWZmZXJzKDAsIDEsICZudWxsQnVmZmVyLCAmemVybywgJnplcm8pOworCisgICAg
bWFya0FsbFN0YXRlRGlydHkoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFJlbmRl
cmVyMTE6OnVuYXBwbHlSZW5kZXJUYXJnZXRzKCkKK3sKKyAgICBzZXRPbmVUaW1lUmVuZGVyVGFy
Z2V0KE5VTEwpOworfQorCit2b2lkIFJlbmRlcmVyMTE6OnNldE9uZVRpbWVSZW5kZXJUYXJnZXQo
SUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqcmVuZGVyVGFyZ2V0VmlldykKK3sKKyAgICBJRDNEMTFS
ZW5kZXJUYXJnZXRWaWV3ICpydHZBcnJheVtnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVG
RkVSU10gPSB7TlVMTH07CisKKyAgICBydHZBcnJheVswXSA9IHJlbmRlclRhcmdldFZpZXc7CisK
KyAgICBtRGV2aWNlQ29udGV4dC0+T01TZXRSZW5kZXJUYXJnZXRzKGdldE1heFJlbmRlclRhcmdl
dHMoKSwgcnR2QXJyYXksIE5VTEwpOworCisgICAgLy8gRG8gbm90IHByZXNlcnZlIHRoZSBzZXJp
YWwgZm9yIHRoaXMgb25lLXRpbWUtdXNlIHJlbmRlciB0YXJnZXQKKyAgICBmb3IgKHVuc2lnbmVk
IGludCBydEluZGV4ID0gMDsgcnRJbmRleCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19C
VUZGRVJTOyBydEluZGV4KyspCisgICAgeworICAgICAgICBtQXBwbGllZFJlbmRlclRhcmdldFNl
cmlhbHNbcnRJbmRleF0gPSAwOworICAgIH0KK30KKworUmVuZGVyVGFyZ2V0ICpSZW5kZXJlcjEx
OjpjcmVhdGVSZW5kZXJUYXJnZXQoU3dhcENoYWluICpzd2FwQ2hhaW4sIGJvb2wgZGVwdGgpCit7
CisgICAgU3dhcENoYWluMTEgKnN3YXBDaGFpbjExID0gU3dhcENoYWluMTE6Om1ha2VTd2FwQ2hh
aW4xMShzd2FwQ2hhaW4pOworICAgIFJlbmRlclRhcmdldDExICpyZW5kZXJUYXJnZXQgPSBOVUxM
OworCisgICAgaWYgKGRlcHRoKQorICAgIHsKKyAgICAgICAgLy8gTm90ZTogZGVwdGggc3RlbmNp
bCBtYXkgYmUgTlVMTCBmb3IgMCBzaXplZCBzdXJmYWNlcworICAgICAgICByZW5kZXJUYXJnZXQg
PSBuZXcgUmVuZGVyVGFyZ2V0MTEodGhpcywgc3dhcENoYWluMTEtPmdldERlcHRoU3RlbmNpbCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhcENoYWluMTEt
PmdldERlcHRoU3RlbmNpbFRleHR1cmUoKSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN3YXBDaGFpbjExLT5nZXRXaWR0aCgpLCBzd2FwQ2hhaW4xMS0+
Z2V0SGVpZ2h0KCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBOb3RlOiBy
ZW5kZXIgdGFyZ2V0IG1heSBiZSBOVUxMIGZvciAwIHNpemVkIHN1cmZhY2VzCisgICAgICAgIHJl
bmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQxMSh0aGlzLCBzd2FwQ2hhaW4xMS0+Z2V0UmVu
ZGVyVGFyZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
d2FwQ2hhaW4xMS0+Z2V0T2Zmc2NyZWVuVGV4dHVyZSgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldFJlbmRlclRhcmdldFNoYWRlclJl
c291cmNlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2Fw
Q2hhaW4xMS0+Z2V0V2lkdGgoKSwgc3dhcENoYWluMTEtPmdldEhlaWdodCgpKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHJlbmRlclRhcmdldDsKK30KKworUmVuZGVyVGFyZ2V0ICpSZW5kZXJlcjExOjpj
cmVhdGVSZW5kZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
THNpemVpIHNhbXBsZXMsIGJvb2wgZGVwdGgpCit7CisgICAgUmVuZGVyVGFyZ2V0MTEgKnJlbmRl
clRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQxMSh0aGlzLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHNhbXBsZXMsIGRlcHRoKTsKKyAgICByZXR1cm4gcmVuZGVyVGFyZ2V0OworfQorCitTaGFkZXJF
eGVjdXRhYmxlICpSZW5kZXJlcjExOjpsb2FkRXhlY3V0YWJsZShjb25zdCB2b2lkICpmdW5jdGlv
biwgc2l6ZV90IGxlbmd0aCwgcng6OlNoYWRlclR5cGUgdHlwZSkKK3sKKyAgICBTaGFkZXJFeGVj
dXRhYmxlMTEgKmV4ZWN1dGFibGUgPSBOVUxMOworCisgICAgc3dpdGNoICh0eXBlKQorICAgIHsK
KyAgICAgIGNhc2Ugcng6OlNIQURFUl9WRVJURVg6CisgICAgICAgIHsKKyAgICAgICAgICAgIElE
M0QxMVZlcnRleFNoYWRlciAqdnNoYWRlciA9IE5VTEw7CisgICAgICAgICAgICBIUkVTVUxUIHJl
c3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVZlcnRleFNoYWRlcihmdW5jdGlvbiwgbGVuZ3RoLCBOVUxM
LCAmdnNoYWRlcik7CisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisg
ICAgICAgICAgICBpZiAodnNoYWRlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBl
eGVjdXRhYmxlID0gbmV3IFNoYWRlckV4ZWN1dGFibGUxMShmdW5jdGlvbiwgbGVuZ3RoLCB2c2hh
ZGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNh
c2Ugcng6OlNIQURFUl9QSVhFTDoKKyAgICAgICAgeworICAgICAgICAgICAgSUQzRDExUGl4ZWxT
aGFkZXIgKnBzaGFkZXIgPSBOVUxMOworICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2
aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihmdW5jdGlvbiwgbGVuZ3RoLCBOVUxMLCAmcHNoYWRlcik7
CisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAgICBp
ZiAocHNoYWRlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0g
bmV3IFNoYWRlckV4ZWN1dGFibGUxMShmdW5jdGlvbiwgbGVuZ3RoLCBwc2hhZGVyKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ugcng6OlNIQURF
Ul9HRU9NRVRSWToKKyAgICAgICAgeworICAgICAgICAgICAgSUQzRDExR2VvbWV0cnlTaGFkZXIg
KmdzaGFkZXIgPSBOVUxMOworICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5D
cmVhdGVHZW9tZXRyeVNoYWRlcihmdW5jdGlvbiwgbGVuZ3RoLCBOVUxMLCAmZ3NoYWRlcik7Cisg
ICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAgICBpZiAo
Z3NoYWRlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3
IFNoYWRlckV4ZWN1dGFibGUxMShmdW5jdGlvbiwgbGVuZ3RoLCBnc2hhZGVyKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBleGVj
dXRhYmxlOworfQorCitTaGFkZXJFeGVjdXRhYmxlICpSZW5kZXJlcjExOjpjb21waWxlVG9FeGVj
dXRhYmxlKGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpzaGFkZXJITFNMLCByeDo6
U2hhZGVyVHlwZSB0eXBlLCBEM0RXb3JrYXJvdW5kVHlwZSB3b3JrYXJvdW5kKQoreworICAgIGNv
bnN0IGNoYXIgKnByb2ZpbGUgPSBOVUxMOworCisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAg
ICAgIGNhc2Ugcng6OlNIQURFUl9WRVJURVg6CisgICAgICAgIHByb2ZpbGUgPSAidnNfNF8wIjsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIHJ4OjpTSEFERVJfUElYRUw6CisgICAgICAgIHBy
b2ZpbGUgPSAicHNfNF8wIjsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIHJ4OjpTSEFERVJf
R0VPTUVUUlk6CisgICAgICAgIHByb2ZpbGUgPSAiZ3NfNF8wIjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gTlVM
TDsKKyAgICB9CisKKyAgICBJRDNEQmxvYiAqYmluYXJ5ID0gKElEM0RCbG9iKiljb21waWxlVG9C
aW5hcnkoaW5mb0xvZywgc2hhZGVySExTTCwgcHJvZmlsZSwgRDNEQ09NUElMRV9PUFRJTUlaQVRJ
T05fTEVWRUwwLCBmYWxzZSk7CisgICAgaWYgKCFiaW5hcnkpCisgICAgICAgIHJldHVybiBOVUxM
OworCisgICAgU2hhZGVyRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9IGxvYWRFeGVjdXRhYmxlKChE
V09SRCAqKWJpbmFyeS0+R2V0QnVmZmVyUG9pbnRlcigpLCBiaW5hcnktPkdldEJ1ZmZlclNpemUo
KSwgdHlwZSk7CisgICAgYmluYXJ5LT5SZWxlYXNlKCk7CisKKyAgICByZXR1cm4gZXhlY3V0YWJs
ZTsKK30KKworVmVydGV4QnVmZmVyICpSZW5kZXJlcjExOjpjcmVhdGVWZXJ0ZXhCdWZmZXIoKQor
eworICAgIHJldHVybiBuZXcgVmVydGV4QnVmZmVyMTEodGhpcyk7Cit9CisKK0luZGV4QnVmZmVy
ICpSZW5kZXJlcjExOjpjcmVhdGVJbmRleEJ1ZmZlcigpCit7CisgICAgcmV0dXJuIG5ldyBJbmRl
eEJ1ZmZlcjExKHRoaXMpOworfQorCitCdWZmZXJTdG9yYWdlICpSZW5kZXJlcjExOjpjcmVhdGVC
dWZmZXJTdG9yYWdlKCkKK3sKKyAgICByZXR1cm4gbmV3IEJ1ZmZlclN0b3JhZ2UxMSh0aGlzKTsK
K30KKworUXVlcnlJbXBsICpSZW5kZXJlcjExOjpjcmVhdGVRdWVyeShHTGVudW0gdHlwZSkKK3sK
KyAgICByZXR1cm4gbmV3IFF1ZXJ5MTEodGhpcywgdHlwZSk7Cit9CisKK0ZlbmNlSW1wbCAqUmVu
ZGVyZXIxMTo6Y3JlYXRlRmVuY2UoKQoreworICAgIHJldHVybiBuZXcgRmVuY2UxMSh0aGlzKTsK
K30KKworYm9vbCBSZW5kZXJlcjExOjpnZXRSZW5kZXJUYXJnZXRSZXNvdXJjZShnbDo6UmVuZGVy
YnVmZmVyICpjb2xvcmJ1ZmZlciwgdW5zaWduZWQgaW50ICpzdWJyZXNvdXJjZUluZGV4LCBJRDNE
MTFUZXh0dXJlMkQgKipyZXNvdXJjZSkKK3sKKyAgICBBU1NFUlQoY29sb3JidWZmZXIgIT0gTlVM
TCk7CisKKyAgICBSZW5kZXJUYXJnZXQxMSAqcmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6
Om1ha2VSZW5kZXJUYXJnZXQxMShjb2xvcmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOworICAg
IGlmIChyZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICAqc3VicmVzb3VyY2VJbmRleCA9IHJl
bmRlclRhcmdldC0+Z2V0U3VicmVzb3VyY2VJbmRleCgpOworCisgICAgICAgIElEM0QxMVJlbmRl
clRhcmdldFZpZXcgKmNvbG9yQnVmZmVyUlRWID0gcmVuZGVyVGFyZ2V0LT5nZXRSZW5kZXJUYXJn
ZXRWaWV3KCk7CisgICAgICAgIGlmIChjb2xvckJ1ZmZlclJUVikKKyAgICAgICAgeworICAgICAg
ICAgICAgSUQzRDExUmVzb3VyY2UgKnRleHR1cmVSZXNvdXJjZSA9IE5VTEw7CisgICAgICAgICAg
ICBjb2xvckJ1ZmZlclJUVi0+R2V0UmVzb3VyY2UoJnRleHR1cmVSZXNvdXJjZSk7CisKKyAgICAg
ICAgICAgIGlmICh0ZXh0dXJlUmVzb3VyY2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgSFJFU1VMVCByZXN1bHQgPSB0ZXh0dXJlUmVzb3VyY2UtPlF1ZXJ5SW50ZXJmYWNlKElJRF9J
RDNEMTFUZXh0dXJlMkQsICh2b2lkKiopcmVzb3VyY2UpOworICAgICAgICAgICAgICAgIHRleHR1
cmVSZXNvdXJjZS0+UmVsZWFzZSgpOworCisgICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChy
ZXN1bHQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIGV4dHJhY3QgdGhlIElE
M0QxMVRleHR1cmUyRCBmcm9tIHRoZSByZW5kZXIgdGFyZ2V0IHJlc291cmNlLCAiCisgICAgICAg
ICAgICAgICAgICAgICAgICAiSFJFU1VMVDogMHglWC4iLCByZXN1bHQpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBSZW5kZXJlcjExOjpibGl0UmVjdChnbDo6RnJhbWVidWZmZXIgKnJlYWRU
YXJnZXQsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRSZWN0LCBnbDo6RnJhbWVidWZmZXIgKmRy
YXdUYXJnZXQsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRyYXdSZWN0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERlcHRoU3RlbmNpbCkK
K3sKKyAgICBpZiAoYmxpdFJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIGdsOjpSZW5kZXJi
dWZmZXIgKnJlYWRCdWZmZXIgPSByZWFkVGFyZ2V0LT5nZXRSZWFkQ29sb3JidWZmZXIoKTsKKwor
ICAgICAgICBpZiAoIXJlYWRCdWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiRmFp
bGVkIHRvIHJldHJpZXZlIHRoZSByZWFkIGJ1ZmZlciBmcm9tIHRoZSByZWFkIGZyYW1lYnVmZmVy
LiIpOworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxz
ZSk7CisgICAgICAgIH0KKworICAgICAgICBSZW5kZXJUYXJnZXQgKnJlYWRSZW5kZXJUYXJnZXQg
PSByZWFkQnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCBjb2xvckF0dGFjaG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQgPCBnbDo6SU1QTEVNRU5U
QVRJT05fTUFYX0RSQVdfQlVGRkVSUzsgY29sb3JBdHRhY2htZW50KyspCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChkcmF3VGFyZ2V0LT5pc0VuYWJsZWRDb2xvckF0dGFjaG1lbnQoY29sb3JB
dHRhY2htZW50KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6UmVuZGVyYnVm
ZmVyICpkcmF3QnVmZmVyID0gZHJhd1RhcmdldC0+Z2V0Q29sb3JidWZmZXIoY29sb3JBdHRhY2ht
ZW50KTsKKworICAgICAgICAgICAgICAgIGlmICghZHJhd0J1ZmZlcikKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSBkcmF3
IGJ1ZmZlciBmcm9tIHRoZSBkcmF3IGZyYW1lYnVmZmVyLiIpOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBSZW5kZXJUYXJnZXQgKmRyYXdSZW5kZXJUYXJnZXQg
PSBkcmF3QnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKTsKKworICAgICAgICAgICAgICAgIGlmICgh
YmxpdFJlbmRlcmJ1ZmZlclJlY3QocmVhZFJlY3QsIGRyYXdSZWN0LCByZWFkUmVuZGVyVGFyZ2V0
LCBkcmF3UmVuZGVyVGFyZ2V0LCBmYWxzZSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGJsaXREZXB0aFN0ZW5jaWwpCisgICAgewor
ICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZWFkQnVmZmVyID0gcmVhZFRhcmdldC0+Z2V0RGVw
dGhPclN0ZW5jaWxidWZmZXIoKTsKKyAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqZHJhd0J1ZmZl
ciA9IGRyYXdUYXJnZXQtPmdldERlcHRoT3JTdGVuY2lsYnVmZmVyKCk7CisKKyAgICAgICAgaWYg
KCFyZWFkQnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRy
aWV2ZSB0aGUgcmVhZCBkZXB0aC1zdGVuY2lsIGJ1ZmZlciBmcm9tIHRoZSByZWFkIGZyYW1lYnVm
ZmVyLiIpOworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBm
YWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWRyYXdCdWZmZXIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSBkcmF3IGRlcHRoLXN0ZW5j
aWwgYnVmZmVyIGZyb20gdGhlIGRyYXcgZnJhbWVidWZmZXIuIik7CisgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAg
ICAgIFJlbmRlclRhcmdldCAqcmVhZFJlbmRlclRhcmdldCA9IHJlYWRCdWZmZXItPmdldERlcHRo
U3RlbmNpbCgpOworICAgICAgICBSZW5kZXJUYXJnZXQgKmRyYXdSZW5kZXJUYXJnZXQgPSBkcmF3
QnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsKKworICAgICAgICBpZiAoIWJsaXRSZW5kZXJidWZm
ZXJSZWN0KHJlYWRSZWN0LCBkcmF3UmVjdCwgcmVhZFJlbmRlclRhcmdldCwgZHJhd1JlbmRlclRh
cmdldCwgdHJ1ZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFJlbmRlcmVyMTE6OnJl
YWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQgeCwgR0xpbnQgeSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2gsIGJvb2wg
cGFja1JldmVyc2VSb3dPcmRlciwgR0xpbnQgcGFja0FsaWdubWVudCwgdm9pZCogcGl4ZWxzKQor
eworICAgIElEM0QxMVRleHR1cmUyRCAqY29sb3JCdWZmZXJUZXh0dXJlID0gTlVMTDsKKyAgICB1
bnNpZ25lZCBpbnQgc3VicmVzb3VyY2VJbmRleCA9IDA7CisKKyAgICBnbDo6UmVuZGVyYnVmZmVy
ICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRSZWFkQ29sb3JidWZmZXIoKTsKKworICAg
IGlmIChjb2xvcmJ1ZmZlciAmJiBnZXRSZW5kZXJUYXJnZXRSZXNvdXJjZShjb2xvcmJ1ZmZlciwg
JnN1YnJlc291cmNlSW5kZXgsICZjb2xvckJ1ZmZlclRleHR1cmUpKQorICAgIHsKKyAgICAgICAg
Z2w6OlJlY3RhbmdsZSBhcmVhOworICAgICAgICBhcmVhLnggPSB4OworICAgICAgICBhcmVhLnkg
PSB5OworICAgICAgICBhcmVhLndpZHRoID0gd2lkdGg7CisgICAgICAgIGFyZWEuaGVpZ2h0ID0g
aGVpZ2h0OworCisgICAgICAgIHJlYWRUZXh0dXJlRGF0YShjb2xvckJ1ZmZlclRleHR1cmUsIHN1
YnJlc291cmNlSW5kZXgsIGFyZWEsIGNvbG9yYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKSwgZm9y
bWF0LCB0eXBlLCBvdXRwdXRQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tSZXZl
cnNlUm93T3JkZXIsIHBhY2tBbGlnbm1lbnQsIHBpeGVscyk7CisKKyAgICAgICAgY29sb3JCdWZm
ZXJUZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgIGNvbG9yQnVmZmVyVGV4dHVyZSA9IE5VTEw7
CisgICAgfQorfQorCitJbWFnZSAqUmVuZGVyZXIxMTo6Y3JlYXRlSW1hZ2UoKQoreworICAgIHJl
dHVybiBuZXcgSW1hZ2UxMSgpOworfQorCit2b2lkIFJlbmRlcmVyMTE6OmdlbmVyYXRlTWlwbWFw
KEltYWdlICpkZXN0LCBJbWFnZSAqc3JjKQoreworICAgIEltYWdlMTEgKmRlc3QxMSA9IEltYWdl
MTE6Om1ha2VJbWFnZTExKGRlc3QpOworICAgIEltYWdlMTEgKnNyYzExID0gSW1hZ2UxMTo6bWFr
ZUltYWdlMTEoc3JjKTsKKyAgICBJbWFnZTExOjpnZW5lcmF0ZU1pcG1hcChkZXN0MTEsIHNyYzEx
KTsKK30KKworVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyMTE6OmNyZWF0ZVRleHR1cmVTdG9yYWdl
MkQoU3dhcENoYWluICpzd2FwQ2hhaW4pCit7CisgICAgU3dhcENoYWluMTEgKnN3YXBDaGFpbjEx
ID0gU3dhcENoYWluMTE6Om1ha2VTd2FwQ2hhaW4xMShzd2FwQ2hhaW4pOworICAgIHJldHVybiBu
ZXcgVGV4dHVyZVN0b3JhZ2UxMV8yRCh0aGlzLCBzd2FwQ2hhaW4xMSk7Cit9CisKK1RleHR1cmVT
dG9yYWdlICpSZW5kZXJlcjExOjpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgcmV0dXJuIG5ldyBUZXh0dXJl
U3RvcmFnZTExXzJEKHRoaXMsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHVzYWdlLCBmb3JjZVJl
bmRlcmFibGUsIHdpZHRoLCBoZWlnaHQpOworfQorCitUZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXIx
MTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpCit7Cisg
ICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTExX0N1YmUodGhpcywgbGV2ZWxzLCBpbnRlcm5h
bGZvcm1hdCwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgdW5zaWduZWQgaW50IGdldEZhc3RQaXhlbENvcHlTaXplKERYR0lfRk9STUFUIHNvdXJjZUZv
cm1hdCwgR0xlbnVtIHNvdXJjZUdMRm9ybWF0LCBHTGVudW0gZGVzdEZvcm1hdCwgR0xlbnVtIGRl
c3RUeXBlKQoreworICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gRFhHSV9GT1JNQVRfQThfVU5PUk0g
JiYKKyAgICAgICAgZGVzdEZvcm1hdCAgID09IEdMX0FMUEhBICYmCisgICAgICAgIGRlc3RUeXBl
ICAgICA9PSBHTF9VTlNJR05FRF9CWVRFKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAg
fQorICAgIGVsc2UgaWYgKHNvdXJjZUZvcm1hdCAgID09IERYR0lfRk9STUFUX1I4RzhCOEE4X1VO
T1JNICYmCisgICAgICAgICAgICAgc291cmNlR0xGb3JtYXQgPT0gR0xfUkdCQThfT0VTICYmCisg
ICAgICAgICAgICAgZGVzdEZvcm1hdCAgICAgPT0gR0xfUkdCQSAmJgorICAgICAgICAgICAgIGRl
c3RUeXBlICAgICAgID09IEdMX1VOU0lHTkVEX0JZVEUpCisgICAgeworICAgICAgICByZXR1cm4g
NDsKKyAgICB9CisgICAgZWxzZSBpZiAoc291cmNlRm9ybWF0ID09IERYR0lfRk9STUFUX0I4RzhS
OEE4X1VOT1JNICYmCisgICAgICAgICAgICAgZGVzdEZvcm1hdCAgID09IEdMX0JHUkFfRVhUICYm
CisgICAgICAgICAgICAgZGVzdFR5cGUgICAgID09IEdMX1VOU0lHTkVEX0JZVEUpCisgICAgewor
ICAgICAgICByZXR1cm4gNDsKKyAgICB9CisgICAgZWxzZSBpZiAoc291cmNlRm9ybWF0ICAgPT0g
RFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X0ZMT0FUICYmCisgICAgICAgICAgICAgc291cmNlR0xG
b3JtYXQgPT0gR0xfUkdCQTE2Rl9FWFQgJiYKKyAgICAgICAgICAgICBkZXN0Rm9ybWF0ICAgICA9
PSBHTF9SR0JBICYmCisgICAgICAgICAgICAgZGVzdFR5cGUgICAgICAgPT0gR0xfSEFMRl9GTE9B
VF9PRVMpCisgICAgeworICAgICAgICByZXR1cm4gODsKKyAgICB9CisgICAgZWxzZSBpZiAoc291
cmNlRm9ybWF0ID09IERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCAmJgorICAgICAgICAgICAg
IGRlc3RGb3JtYXQgICA9PSBHTF9SR0IgJiYKKyAgICAgICAgICAgICBkZXN0VHlwZSAgICAgPT0g
R0xfRkxPQVQpCisgICAgeworICAgICAgICByZXR1cm4gMTI7CisgICAgfQorICAgIGVsc2UgaWYg
KHNvdXJjZUZvcm1hdCAgID09IERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCAmJgorICAg
ICAgICAgICAgIHNvdXJjZUdMRm9ybWF0ID09IEdMX1JHQkEzMkZfRVhUICYmCisgICAgICAgICAg
ICAgZGVzdEZvcm1hdCAgICAgPT0gR0xfUkdCQSAmJgorICAgICAgICAgICAgIGRlc3RUeXBlICAg
ICAgID09IEdMX0ZMT0FUKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDE2OworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUg
dm9pZCByZWFkUGl4ZWxDb2xvcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBEWEdJX0ZPUk1B
VCBmb3JtYXQsIEdMZW51bSBnbEZvcm1hdCwgdW5zaWduZWQgaW50IHgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHksIGludCBpbnB1dFBpdGNoLCBnbDo6
Q29sb3IgKm91dENvbG9yKQoreworICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk06CisgICAgICAgIHsKKyAgICAgICAgICAgIHVu
c2lnbmVkIGludCByZ2JhID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4o
ZGF0YSArIDQgKiB4ICsgeSAqIGlucHV0UGl0Y2gpOworICAgICAgICAgICAgb3V0Q29sb3ItPnJl
ZCA9ICAgKHJnYmEgJiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBGRik7CisgICAgICAg
ICAgICBvdXRDb2xvci0+Z3JlZW4gPSAocmdiYSAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAweDAw
MDBGRjAwKTsKKyAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gIChyZ2JhICYgMHgwMEZGMDAw
MCkgKiAoMS4wZiAvIDB4MDBGRjAwMDApOworCisgICAgICAgICAgICBpZiAoZ2w6OkdldEFscGhh
U2l6ZShnbEZvcm1hdCkgPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dENv
bG9yLT5hbHBoYSA9IChyZ2JhICYgMHhGRjAwMDAwMCkgKiAoMS4wZiAvIDB4RkYwMDAwMDApOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG91dENvbG9yLT5hbHBoYSA9IDEuMGY7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQThfVU5PUk06CisgICAg
ICAgIHsKKyAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgIDAuMGY7CisgICAgICAgICAgICBv
dXRDb2xvci0+Z3JlZW4gPSAwLjBmOworICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAgMC4w
ZjsKKyAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9ICooZGF0YSArIHggKyB5ICogaW5wdXRQ
aXRjaCkgLyAyNTUuMGY7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUOgorICAgICAgICB7CisgICAgICAgICAgICBv
dXRDb2xvci0+cmVkID0gICAqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhICsg
MTYgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMCk7CisgICAgICAgICAgICBvdXRDb2xvci0+Z3Jl
ZW4gPSAqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhICsgMTYgKiB4ICsgeSAq
IGlucHV0UGl0Y2gpICsgMSk7CisgICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAqKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhICsgMTYgKiB4ICsgeSAqIGlucHV0UGl0Y2gp
ICsgMik7CisKKyAgICAgICAgICAgIGlmIChnbDo6R2V0QWxwaGFTaXplKGdsRm9ybWF0KSA+IDAp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gKihyZWlu
dGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDE2ICogeCArIHkgKiBpbnB1dFBpdGNo
KSArIDMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IDEuMGY7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMy
QjMyX0ZMT0FUOgorICAgICAgICB7CisgICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICAqKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhICsgMTIgKiB4ICsgeSAqIGlucHV0UGl0
Y2gpICsgMCk7CisgICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAqKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgZmxvYXQqPihkYXRhICsgMTIgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMSk7Cisg
ICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxv
YXQqPihkYXRhICsgMTIgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMik7CisgICAgICAgICAgICBv
dXRDb2xvci0+YWxwaGEgPSAxLjBmOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAg
ICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9BVDoKKyAgICAgICAgeworICAgICAg
ICAgICAgb3V0Q29sb3ItPnJlZCA9ICAgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKihyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oZGF0YSArIDggKiB4ICsgeSAqIGlucHV0UGl0
Y2gpICsgMCkpOworICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gZ2w6OmZsb2F0MTZUb0Zs
b2F0MzIoKihyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oZGF0YSArIDgg
KiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMSkpOworICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUg
PSAgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKihyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVk
IHNob3J0Kj4oZGF0YSArIDggKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMikpOworCisgICAgICAg
ICAgICBpZiAoZ2w6OkdldEFscGhhU2l6ZShnbEZvcm1hdCkgPiAwKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCoo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyA4ICogeCArIHkg
KiBpbnB1dFBpdGNoKSArIDMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIERYR0lf
Rk9STUFUX0I4RzhSOEE4X1VOT1JNOgorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgYmdyYSA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KGRhdGEgKyA0
ICogeCArIHkgKiBpbnB1dFBpdGNoKTsKKyAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgIChi
Z3JhICYgMHgwMEZGMDAwMCkgKiAoMS4wZiAvIDB4MDBGRjAwMDApOworICAgICAgICAgICAgb3V0
Q29sb3ItPmJsdWUgPSAgKGJncmEgJiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBGRik7
CisgICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAoYmdyYSAmIDB4MDAwMEZGMDApICogKDEu
MGYgLyAweDAwMDBGRjAwKTsKKyAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IChiZ3JhICYg
MHhGRjAwMDAwMCkgKiAoMS4wZiAvIDB4RkYwMDAwMDApOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworCisgICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1VOT1JNOgorICAgICAgICB7CisgICAg
ICAgICAgICBvdXRDb2xvci0+cmVkID0gICAqKGRhdGEgKyB4ICsgeSAqIGlucHV0UGl0Y2gpIC8g
MjU1LjBmOworICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gMC4wZjsKKyAgICAgICAgICAg
IG91dENvbG9yLT5ibHVlID0gIDAuMGY7CisgICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAx
LjBmOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIERYR0lfRk9STUFU
X1I4RzhfVU5PUk06CisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnID0g
KnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgMiAqIHggKyB5
ICogaW5wdXRQaXRjaCk7CisKKyAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgIChyZyAmIDB4
RkYwMCkgKiAoMS4wZiAvIDB4RkYwMCk7CisgICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAo
cmcgJiAweDAwRkYpICogKDEuMGYgLyAweDAwRkYpOworICAgICAgICAgICAgb3V0Q29sb3ItPmJs
dWUgPSAgMC4wZjsKKyAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IDEuMGY7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X0ZMT0FUOgor
ICAgICAgICB7CisgICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICBnbDo6ZmxvYXQxNlRvRmxv
YXQzMigqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyAyICog
eCArIHkgKiBpbnB1dFBpdGNoKSk7CisgICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAwLjBm
OworICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAgMC4wZjsKKyAgICAgICAgICAgIG91dENv
bG9yLT5hbHBoYSA9IDEuMGY7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfUjE2RzE2X0ZMT0FUOgorICAgICAgICB7CisgICAgICAgICAgICBvdXRD
b2xvci0+cmVkID0gICBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgNCAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAwKSk7
CisgICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgNCAqIHggKyB5ICog
aW5wdXRQaXRjaCkgKyAxKSk7CisgICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAwLjBmOwor
ICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gMS4wZjsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgRVJSKCJSZWFkUGl4ZWxDb2xvciBub3Qg
aW1wbGVtZW50ZWQgZm9yIERYR0kgZm9ybWF0ICV1LiIsIGZvcm1hdCk7CisgICAgICAgIFVOSU1Q
TEVNRU5URUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIHZv
aWQgd3JpdGVQaXhlbENvbG9yKGNvbnN0IGdsOjpDb2xvciAmY29sb3IsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50IHksIGludCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0RGF0YSkK
K3sKKyAgICB1bnNpZ25lZCBjaGFyKiBieXRlRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dERhdGEpOworICAgIHVuc2lnbmVkIHNob3J0KiBzaG9ydERhdGEgPSByZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4ob3V0RGF0YSk7CisKKyAgICBzd2l0Y2ggKGZv
cm1hdCkKKyAgICB7CisgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAgIHN3aXRjaCAodHlwZSkK
KyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAg
IGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMF0gPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyPigyNTUgKiBjb2xvci5yZWQgICArIDAuNWYpOworICAgICAgICAgICAgYnl0ZURh
dGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAxXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXI+KDI1NSAqIGNvbG9yLmdyZWVuICsgMC41Zik7CisgICAgICAgICAgICBieXRlRGF0YVs0ICog
eCArIHkgKiBvdXRwdXRQaXRjaCArIDJdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1
ICogY29sb3IuYmx1ZSAgKyAwLjVmKTsKKyAgICAgICAgICAgIGJ5dGVEYXRhWzQgKiB4ICsgeSAq
IG91dHB1dFBpdGNoICsgM10gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xv
ci5hbHBoYSArIDAuNWYpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgRVJSKCJXcml0ZVBpeGVsQ29sb3Igbm90IGltcGxlbWVudGVkIGZvciBm
b3JtYXQgR0xfUkdCQSBhbmQgdHlwZSAweCVYLiIsIHR5cGUpOworICAgICAgICAgICAgVU5JTVBM
RU1FTlRFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisKKyAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6CisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAg
ICAgeworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAgIGJ5dGVE
YXRhWzQgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyPigyNTUgKiBjb2xvci5ibHVlICArIDAuNWYpOworICAgICAgICAgICAgYnl0ZURhdGFbNCAq
IHggKyB5ICogb3V0cHV0UGl0Y2ggKyAxXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1
NSAqIGNvbG9yLmdyZWVuICsgMC41Zik7CisgICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkg
KiBvdXRwdXRQaXRjaCArIDJdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29s
b3IucmVkICAgKyAwLjVmKTsKKyAgICAgICAgICAgIGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1
dFBpdGNoICsgM10gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5hbHBo
YSArIDAuNWYpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVDoKKyAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0
aGUgZGVza3RvcCBHTCBzcGVjIGluIHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVjdGFuZ2xlcyIg
c2VjdGlvbgorICAgICAgICAgICAgLy8gdGhpcyB0eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOgor
ICAgICAgICAgICAgLy8gICAxNSAgIDE0ICAgMTMgICAxMiAgIDExICAgMTAgICAgOSAgICA4ICAg
IDcgICAgNiAgICA1ICAgIDQgICAgMyAgICAyICAgIDEgICAgMAorICAgICAgICAgICAgLy8gIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAvLyB8ICAgICAgIDR0aCAgICAgICAg
IHwgICAgICAgIDNyZCAgICAgICAgIHwgICAgICAgIDJuZCAgICAgICAgfCAgIDFzdCBjb21wb25l
bnQgICB8CisgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAg
ICAgIC8vIGluIHRoZSBjYXNlIG9mIEJHUkFfRVhULCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQs
IEcgdGhlIHNlY29uZCwgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgc2hvcnREYXRhW3ggKyB5
ICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9CisgICAgICAgICAgICAg
ICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigxNSAqIGNvbG9yLmFscGhhICsgMC41Zikg
PDwgMTIpIHwKKyAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDE1
ICogY29sb3IucmVkICAgKyAwLjVmKSA8PCAgOCkgfAorICAgICAgICAgICAgICAgIChzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBzaG9ydD4oMTUgKiBjb2xvci5ncmVlbiArIDAuNWYpIDw8ICA0KSB8Cisg
ICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigxNSAqIGNvbG9yLmJs
dWUgICsgMC41ZikgPDwgIDApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVDoKKyAgICAgICAgICAgIC8vIEFjY29y
ZGluZyB0byB0aGUgZGVza3RvcCBHTCBzcGVjIGluIHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVj
dGFuZ2xlcyIgc2VjdGlvbgorICAgICAgICAgICAgLy8gdGhpcyB0eXBlIGlzIHBhY2tlZCBhcyBm
b2xsb3dzOgorICAgICAgICAgICAgLy8gICAxNSAgIDE0ICAgMTMgICAxMiAgIDExICAgMTAgICAg
OSAgICA4ICAgIDcgICAgNiAgICA1ICAgIDQgICAgMyAgICAyICAgIDEgICAgMAorICAgICAgICAg
ICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAvLyB8IDR0aCB8ICAg
ICAgICAgIDNyZCAgICAgICAgICAgfCAgICAgICAgICAgMm5kICAgICAgICAgIHwgICAgICAxc3Qg
Y29tcG9uZW50ICAgICB8CisgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KyAgICAgICAgICAgIC8vIGluIHRoZSBjYXNlIG9mIEJHUkFfRVhULCBCIGlzIHRoZSBmaXJzdCBj
b21wb25lbnQsIEcgdGhlIHNlY29uZCwgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgc2hvcnRE
YXRhW3ggKyB5ICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9CisgICAg
ICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PiggICAgIGNvbG9yLmFscGhh
ICsgMC41ZikgPDwgMTUpIHwKKyAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQg
c2hvcnQ+KDMxICogY29sb3IucmVkICAgKyAwLjVmKSA8PCAxMCkgfAorICAgICAgICAgICAgICAg
IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMzEgKiBjb2xvci5ncmVlbiArIDAuNWYpIDw8
ICA1KSB8CisgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigzMSAq
IGNvbG9yLmJsdWUgICsgMC41ZikgPDwgIDApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgRVJSKCJXcml0ZVBpeGVsQ29sb3Igbm90IGltcGxl
bWVudGVkIGZvciBmb3JtYXQgR0xfQkdSQV9FWFQgYW5kIHR5cGUgMHglWC4iLCB0eXBlKTsKKyAg
ICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgICAgc3dpdGNoICh0
eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToK
KyAgICAgICAgICAgIHNob3J0RGF0YVt4ICsgeSAqIG91dHB1dFBpdGNoIC8gc2l6ZW9mKHVuc2ln
bmVkIHNob3J0KV0gPQorICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9y
dD4oMzEgKiBjb2xvci5ibHVlICArIDAuNWYpIDw8ICAwKSB8CisgICAgICAgICAgICAgICAgKHN0
YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pig2MyAqIGNvbG9yLmdyZWVuICsgMC41ZikgPDwgIDUp
IHwKKyAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDMxICogY29s
b3IucmVkICAgKyAwLjVmKSA8PCAxMSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
IGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAgIGJ5dGVEYXRhWzMgKiB4ICsgeSAq
IG91dHB1dFBpdGNoICsgMF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xv
ci5yZWQgKyAgIDAuNWYpOworICAgICAgICAgICAgYnl0ZURhdGFbMyAqIHggKyB5ICogb3V0cHV0
UGl0Y2ggKyAxXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLmdyZWVu
ICsgMC41Zik7CisgICAgICAgICAgICBieXRlRGF0YVszICogeCArIHkgKiBvdXRwdXRQaXRjaCAr
IDJdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuYmx1ZSArICAwLjVm
KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IEVSUigiV3JpdGVQaXhlbENvbG9yIG5vdCBpbXBsZW1lbnRlZCBmb3IgZm9ybWF0IEdMX1JHQiBh
bmQgdHlwZSAweCVYLiIsIHR5cGUpOworICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1
bHQ6CisgICAgICAgIEVSUigiV3JpdGVQaXhlbENvbG9yIG5vdCBpbXBsZW1lbnRlZCBmb3IgZm9y
bWF0IDB4JVguIiwgZm9ybWF0KTsKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6cmVhZFRleHR1cmVEYXRhKElEM0Qx
MVRleHR1cmUyRCAqdGV4dHVyZSwgdW5zaWduZWQgaW50IHN1YlJlc291cmNlLCBjb25zdCBnbDo6
UmVjdGFuZ2xlICZhcmVhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVt
IHNvdXJjZUZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgb3V0cHV0
UGl0Y2gsIGJvb2wgcGFja1JldmVyc2VSb3dPcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMaW50IHBhY2tBbGlnbm1lbnQsIHZvaWQgKnBpeGVscykKK3sKKyAgICBEM0Qx
MV9URVhUVVJFMkRfREVTQyB0ZXh0dXJlRGVzYzsKKyAgICB0ZXh0dXJlLT5HZXREZXNjKCZ0ZXh0
dXJlRGVzYyk7CisKKyAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBzdGFnaW5nRGVzYzsKKyAgICBz
dGFnaW5nRGVzYy5XaWR0aCA9IGFyZWEud2lkdGg7CisgICAgc3RhZ2luZ0Rlc2MuSGVpZ2h0ID0g
YXJlYS5oZWlnaHQ7CisgICAgc3RhZ2luZ0Rlc2MuTWlwTGV2ZWxzID0gMTsKKyAgICBzdGFnaW5n
RGVzYy5BcnJheVNpemUgPSAxOworICAgIHN0YWdpbmdEZXNjLkZvcm1hdCA9IHRleHR1cmVEZXNj
LkZvcm1hdDsKKyAgICBzdGFnaW5nRGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gMTsKKyAgICBzdGFn
aW5nRGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOworICAgIHN0YWdpbmdEZXNjLlVzYWdlID0g
RDNEMTFfVVNBR0VfU1RBR0lORzsKKyAgICBzdGFnaW5nRGVzYy5CaW5kRmxhZ3MgPSAwOworICAg
IHN0YWdpbmdEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19SRUFEOworICAg
IHN0YWdpbmdEZXNjLk1pc2NGbGFncyA9IDA7CisKKyAgICBJRDNEMTFUZXh0dXJlMkQqIHN0YWdp
bmdUZXggPSBOVUxMOworICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVGV4dHVy
ZTJEKCZzdGFnaW5nRGVzYywgTlVMTCwgJnN0YWdpbmdUZXgpOworICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIGNyZWF0ZSBzdGFnaW5nIHRleHR1
cmUgZm9yIHJlYWRQaXhlbHMsIEhSRVNVTFQ6IDB4JVguIiwgcmVzdWx0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIElEM0QxMVRleHR1cmUyRCogc3JjVGV4ID0gTlVMTDsKKyAgICBp
ZiAodGV4dHVyZURlc2MuU2FtcGxlRGVzYy5Db3VudCA+IDEpCisgICAgeworICAgICAgICBEM0Qx
MV9URVhUVVJFMkRfREVTQyByZXNvbHZlRGVzYzsKKyAgICAgICAgcmVzb2x2ZURlc2MuV2lkdGgg
PSB0ZXh0dXJlRGVzYy5XaWR0aDsKKyAgICAgICAgcmVzb2x2ZURlc2MuSGVpZ2h0ID0gdGV4dHVy
ZURlc2MuSGVpZ2h0OworICAgICAgICByZXNvbHZlRGVzYy5NaXBMZXZlbHMgPSAxOworICAgICAg
ICByZXNvbHZlRGVzYy5BcnJheVNpemUgPSAxOworICAgICAgICByZXNvbHZlRGVzYy5Gb3JtYXQg
PSB0ZXh0dXJlRGVzYy5Gb3JtYXQ7CisgICAgICAgIHJlc29sdmVEZXNjLlNhbXBsZURlc2MuQ291
bnQgPSAxOworICAgICAgICByZXNvbHZlRGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOworICAg
ICAgICByZXNvbHZlRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7CisgICAgICAgIHJl
c29sdmVEZXNjLkJpbmRGbGFncyA9IDA7CisgICAgICAgIHJlc29sdmVEZXNjLkNQVUFjY2Vzc0Zs
YWdzID0gMDsKKyAgICAgICAgcmVzb2x2ZURlc2MuTWlzY0ZsYWdzID0gMDsKKworICAgICAgICBy
ZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJnJlc29sdmVEZXNjLCBOVUxMLCAmc3Jj
VGV4KTsKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAg
ICBFUlIoIkZhaWxlZCB0byBjcmVhdGUgcmVzb2x2ZSB0ZXh0dXJlIGZvciByZWFkUGl4ZWxzLCBI
UkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7CisgICAgICAgICAgICBzdGFnaW5nVGV4LT5SZWxlYXNl
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtRGV2aWNlQ29u
dGV4dC0+UmVzb2x2ZVN1YnJlc291cmNlKHNyY1RleCwgMCwgdGV4dHVyZSwgc3ViUmVzb3VyY2Us
IHRleHR1cmVEZXNjLkZvcm1hdCk7CisgICAgICAgIHN1YlJlc291cmNlID0gMDsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgc3JjVGV4ID0gdGV4dHVyZTsKKyAgICAgICAgc3JjVGV4
LT5BZGRSZWYoKTsKKyAgICB9CisKKyAgICBEM0QxMV9CT1ggc3JjQm94OworICAgIHNyY0JveC5s
ZWZ0ID0gYXJlYS54OworICAgIHNyY0JveC5yaWdodCA9IGFyZWEueCArIGFyZWEud2lkdGg7Cisg
ICAgc3JjQm94LnRvcCA9IGFyZWEueTsKKyAgICBzcmNCb3guYm90dG9tID0gYXJlYS55ICsgYXJl
YS5oZWlnaHQ7CisgICAgc3JjQm94LmZyb250ID0gMDsKKyAgICBzcmNCb3guYmFjayA9IDE7CisK
KyAgICBtRGV2aWNlQ29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKHN0YWdpbmdUZXgsIDAs
IDAsIDAsIDAsIHNyY1RleCwgc3ViUmVzb3VyY2UsICZzcmNCb3gpOworCisgICAgc3JjVGV4LT5S
ZWxlYXNlKCk7CisgICAgc3JjVGV4ID0gTlVMTDsKKworICAgIEQzRDExX01BUFBFRF9TVUJSRVNP
VVJDRSBtYXBwaW5nOworICAgIG1EZXZpY2VDb250ZXh0LT5NYXAoc3RhZ2luZ1RleCwgMCwgRDNE
MTFfTUFQX1JFQUQsIDAsICZtYXBwaW5nKTsKKworICAgIHVuc2lnbmVkIGNoYXIgKnNvdXJjZTsK
KyAgICBpbnQgaW5wdXRQaXRjaDsKKyAgICBpZiAocGFja1JldmVyc2VSb3dPcmRlcikKKyAgICB7
CisgICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihtYXBwaW5nLnBE
YXRhKSArIG1hcHBpbmcuUm93UGl0Y2ggKiAoYXJlYS5oZWlnaHQgLSAxKTsKKyAgICAgICAgaW5w
dXRQaXRjaCA9IC1zdGF0aWNfY2FzdDxpbnQ+KG1hcHBpbmcuUm93UGl0Y2gpOworICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4obWFwcGluZy5wRGF0YSk7CisgICAgICAgIGlucHV0UGl0Y2ggPSBzdGF0aWNfY2FzdDxpbnQ+
KG1hcHBpbmcuUm93UGl0Y2gpOworICAgIH0KKworICAgIHVuc2lnbmVkIGludCBmYXN0UGl4ZWxT
aXplID0gZ2V0RmFzdFBpeGVsQ29weVNpemUodGV4dHVyZURlc2MuRm9ybWF0LCBzb3VyY2VGb3Jt
YXQsIGZvcm1hdCwgdHlwZSk7CisgICAgaWYgKGZhc3RQaXhlbFNpemUgIT0gMCkKKyAgICB7Cisg
ICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
cGl4ZWxzKTsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBhcmVhLmhlaWdodDsgaisrKQor
ICAgICAgICB7CisgICAgICAgICAgICBtZW1jcHkoZGVzdCArIGogKiBvdXRwdXRQaXRjaCwgc291
cmNlICsgaiAqIGlucHV0UGl0Y2gsIGFyZWEud2lkdGggKiBmYXN0UGl4ZWxTaXplKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBlbHNlIGlmICh0ZXh0dXJlRGVzYy5Gb3JtYXQgPT0gRFhHSV9GT1JN
QVRfQjhHOFI4QThfVU5PUk0gJiYKKyAgICAgICAgICAgICBmb3JtYXQgPT0gR0xfUkdCQSAmJgor
ICAgICAgICAgICAgIHR5cGUgPT0gR0xfVU5TSUdORURfQllURSkKKyAgICB7CisgICAgICAgIC8v
IEZhc3QgcGF0aCBmb3Igc3dhcHBpbmcgcmVkIHdpdGggYmx1ZQorICAgICAgICB1bnNpZ25lZCBj
aGFyICpkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHBpeGVscyk7CisKKyAgICAg
ICAgZm9yIChpbnQgaiA9IDA7IGogPCBhcmVhLmhlaWdodDsgaisrKQorICAgICAgICB7CisgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZWEud2lkdGg7IGkrKykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kiko
c291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7CisgICAgICAgICAgICAgICAgKih1bnNp
Z25lZCBpbnQqKShkZXN0ICsgNCAqIGkgKyBqICogb3V0cHV0UGl0Y2gpID0KKyAgICAgICAgICAg
ICAgICAgICAgKGFyZ2IgJiAweEZGMDBGRjAwKSB8ICAgICAgIC8vIEtlZXAgYWxwaGEgYW5kIGdy
ZWVuCisgICAgICAgICAgICAgICAgICAgIChhcmdiICYgMHgwMEZGMDAwMCkgPj4gMTYgfCAvLyBN
b3ZlIHJlZCB0byBibHVlCisgICAgICAgICAgICAgICAgICAgIChhcmdiICYgMHgwMDAwMDBGRikg
PDwgMTY7ICAvLyBNb3ZlIGJsdWUgdG8gcmVkCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZ2w6OkNvbG9yIHBpeGVsQ29sb3I7CisgICAg
ICAgIGZvciAoaW50IGogPSAwOyBqIDwgYXJlYS5oZWlnaHQ7IGorKykKKyAgICAgICAgeworICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmVhLndpZHRoOyBpKyspCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmVhZFBpeGVsQ29sb3Ioc291cmNlLCB0ZXh0dXJlRGVzYy5G
b3JtYXQsIHNvdXJjZUZvcm1hdCwgaSwgaiwgaW5wdXRQaXRjaCwgJnBpeGVsQ29sb3IpOworICAg
ICAgICAgICAgICAgIHdyaXRlUGl4ZWxDb2xvcihwaXhlbENvbG9yLCBmb3JtYXQsIHR5cGUsIGks
IGosIG91dHB1dFBpdGNoLCBwaXhlbHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgbURldmljZUNvbnRleHQtPlVubWFwKHN0YWdpbmdUZXgsIDApOworCisgICAgc3Rh
Z2luZ1RleC0+UmVsZWFzZSgpOworICAgIHN0YWdpbmdUZXggPSBOVUxMOworfQorCitib29sIFJl
bmRlcmVyMTE6OmJsaXRSZW5kZXJidWZmZXJSZWN0KGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRS
ZWN0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkcmF3UmVjdCwgUmVuZGVyVGFyZ2V0ICpyZWFkUmVu
ZGVyVGFyZ2V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVy
VGFyZ2V0ICpkcmF3UmVuZGVyVGFyZ2V0LCBib29sIHdob2xlQnVmZmVyQ29weSkKK3sKKyAgICBB
U1NFUlQocmVhZFJlY3Qud2lkdGggPT0gZHJhd1JlY3Qud2lkdGggJiYgcmVhZFJlY3QuaGVpZ2h0
ID09IGRyYXdSZWN0LmhlaWdodCk7CisKKyAgICBSZW5kZXJUYXJnZXQxMSAqZHJhd1JlbmRlclRh
cmdldDExID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShkcmF3UmVuZGVyVGFy
Z2V0KTsKKyAgICBpZiAoIWRyYXdSZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBFUlIoIkZh
aWxlZCB0byByZXRyaWV2ZSB0aGUgZHJhdyByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGRyYXcgZnJh
bWVidWZmZXIuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
ZmFsc2UpOworICAgIH0KKworICAgIElEM0QxMVRleHR1cmUyRCAqZHJhd1RleHR1cmUgPSBkcmF3
UmVuZGVyVGFyZ2V0MTEtPmdldFRleHR1cmUoKTsKKyAgICB1bnNpZ25lZCBpbnQgZHJhd1N1YnJl
c291cmNlID0gZHJhd1JlbmRlclRhcmdldDExLT5nZXRTdWJyZXNvdXJjZUluZGV4KCk7CisKKyAg
ICBSZW5kZXJUYXJnZXQxMSAqcmVhZFJlbmRlclRhcmdldDExID0gUmVuZGVyVGFyZ2V0MTE6Om1h
a2VSZW5kZXJUYXJnZXQxMShyZWFkUmVuZGVyVGFyZ2V0KTsKKyAgICBpZiAoIXJlYWRSZW5kZXJU
YXJnZXQpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVhZCBy
ZW5kZXIgdGFyZ2V0IGZyb20gdGhlIHJlYWQgZnJhbWVidWZmZXIuIik7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgIH0KKworICAgIElEM0Qx
MVRleHR1cmUyRCAqcmVhZFRleHR1cmUgPSBOVUxMOworICAgIHVuc2lnbmVkIGludCByZWFkU3Vi
cmVzb3VyY2UgPSAwOworICAgIGlmIChyZWFkUmVuZGVyVGFyZ2V0LT5nZXRTYW1wbGVzKCkgPiAw
KQorICAgIHsKKyAgICAgICAgcmVhZFRleHR1cmUgPSByZXNvbHZlTXVsdGlzYW1wbGVkVGV4dHVy
ZShyZWFkUmVuZGVyVGFyZ2V0MTEtPmdldFRleHR1cmUoKSwgcmVhZFJlbmRlclRhcmdldDExLT5n
ZXRTdWJyZXNvdXJjZUluZGV4KCkpOworICAgICAgICByZWFkU3VicmVzb3VyY2UgPSAwOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZWFkVGV4dHVyZSA9IHJlYWRSZW5kZXJUYXJn
ZXQxMS0+Z2V0VGV4dHVyZSgpOworICAgICAgICByZWFkVGV4dHVyZS0+QWRkUmVmKCk7CisgICAg
ICAgIHJlYWRTdWJyZXNvdXJjZSA9IHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0U3VicmVzb3VyY2VJ
bmRleCgpOworICAgIH0KKworICAgIGlmICghcmVhZFRleHR1cmUpCisgICAgeworICAgICAgICBF
UlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVhZCByZW5kZXIgdGFyZ2V0IHZpZXcgZnJvbSB0
aGUgcmVhZCByZW5kZXIgdGFyZ2V0LiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CisKKyAgICBEM0QxMV9CT1ggcmVhZEJveDsKKyAg
ICByZWFkQm94LmxlZnQgPSByZWFkUmVjdC54OworICAgIHJlYWRCb3gucmlnaHQgPSByZWFkUmVj
dC54ICsgcmVhZFJlY3Qud2lkdGg7CisgICAgcmVhZEJveC50b3AgPSByZWFkUmVjdC55OworICAg
IHJlYWRCb3guYm90dG9tID0gcmVhZFJlY3QueSArIHJlYWRSZWN0LmhlaWdodDsKKyAgICByZWFk
Qm94LmZyb250ID0gMDsKKyAgICByZWFkQm94LmJhY2sgPSAxOworCisgICAgLy8gRDNEMTEgbmVl
ZHMgZGVwdGgtc3RlbmNpbCBDb3B5U3VicmVzb3VyY2VSZWdpb25zIHRvIGhhdmUgYSBOVUxMIHBT
cmNCb3gKKyAgICAvLyBXZSBhbHNvIHJlcXVpcmUgY29tcGxldGUgZnJhbWVidWZmZXIgY29waWVz
IGZvciBkZXB0aC1zdGVuY2lsIGJsaXQuCisgICAgRDNEMTFfQk9YICpwU3JjQm94ID0gd2hvbGVC
dWZmZXJDb3B5ID8gTlVMTCA6ICZyZWFkQm94OworCisgICAgbURldmljZUNvbnRleHQtPkNvcHlT
dWJyZXNvdXJjZVJlZ2lvbihkcmF3VGV4dHVyZSwgZHJhd1N1YnJlc291cmNlLCBkcmF3UmVjdC54
LCBkcmF3UmVjdC55LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVhZFRleHR1cmUsIHJlYWRTdWJyZXNvdXJjZSwgcFNyY0JveCk7CisKKyAgICBTYWZlUmVs
ZWFzZShyZWFkVGV4dHVyZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworSUQzRDExVGV4dHVy
ZTJEICpSZW5kZXJlcjExOjpyZXNvbHZlTXVsdGlzYW1wbGVkVGV4dHVyZShJRDNEMTFUZXh0dXJl
MkQgKnNvdXJjZSwgdW5zaWduZWQgaW50IHN1YnJlc291cmNlKQoreworICAgIEQzRDExX1RFWFRV
UkUyRF9ERVNDIHRleHR1cmVEZXNjOworICAgIHNvdXJjZS0+R2V0RGVzYygmdGV4dHVyZURlc2Mp
OworCisgICAgaWYgKHRleHR1cmVEZXNjLlNhbXBsZURlc2MuQ291bnQgPiAxKQorICAgIHsKKyAg
ICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgcmVzb2x2ZURlc2M7CisgICAgICAgIHJlc29sdmVE
ZXNjLldpZHRoID0gdGV4dHVyZURlc2MuV2lkdGg7CisgICAgICAgIHJlc29sdmVEZXNjLkhlaWdo
dCA9IHRleHR1cmVEZXNjLkhlaWdodDsKKyAgICAgICAgcmVzb2x2ZURlc2MuTWlwTGV2ZWxzID0g
MTsKKyAgICAgICAgcmVzb2x2ZURlc2MuQXJyYXlTaXplID0gMTsKKyAgICAgICAgcmVzb2x2ZURl
c2MuRm9ybWF0ID0gdGV4dHVyZURlc2MuRm9ybWF0OworICAgICAgICByZXNvbHZlRGVzYy5TYW1w
bGVEZXNjLkNvdW50ID0gMTsKKyAgICAgICAgcmVzb2x2ZURlc2MuU2FtcGxlRGVzYy5RdWFsaXR5
ID0gMDsKKyAgICAgICAgcmVzb2x2ZURlc2MuVXNhZ2UgPSB0ZXh0dXJlRGVzYy5Vc2FnZTsKKyAg
ICAgICAgcmVzb2x2ZURlc2MuQmluZEZsYWdzID0gdGV4dHVyZURlc2MuQmluZEZsYWdzOworICAg
ICAgICByZXNvbHZlRGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7CisgICAgICAgIHJlc29sdmVEZXNj
Lk1pc2NGbGFncyA9IDA7CisKKyAgICAgICAgSUQzRDExVGV4dHVyZTJEICpyZXNvbHZlVGV4dHVy
ZSA9IE5VTEw7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVGV4dHVy
ZTJEKCZyZXNvbHZlRGVzYywgTlVMTCwgJnJlc29sdmVUZXh0dXJlKTsKKyAgICAgICAgaWYgKEZB
SUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBjcmVh
dGUgYSBtdWx0aXNhbXBsZSByZXNvbHZlIHRleHR1cmUsIEhSRVNVTFQ6IDB4JVguIiwgcmVzdWx0
KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgbURldmlj
ZUNvbnRleHQtPlJlc29sdmVTdWJyZXNvdXJjZShyZXNvbHZlVGV4dHVyZSwgMCwgc291cmNlLCBz
dWJyZXNvdXJjZSwgdGV4dHVyZURlc2MuRm9ybWF0KTsKKyAgICAgICAgcmV0dXJuIHJlc29sdmVU
ZXh0dXJlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzb3VyY2UtPkFkZFJlZigp
OworICAgICAgICByZXR1cm4gc291cmNlOworICAgIH0KK30KKworYm9vbCBSZW5kZXJlcjExOjpn
ZXRMVUlEKExVSUQgKmFkYXB0ZXJMdWlkKSBjb25zdAoreworICAgIGFkYXB0ZXJMdWlkLT5IaWdo
UGFydCA9IDA7CisgICAgYWRhcHRlckx1aWQtPkxvd1BhcnQgPSAwOworCisgICAgaWYgKCFtRHhn
aUFkYXB0ZXIpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgRFhH
SV9BREFQVEVSX0RFU0MgYWRhcHRlckRlc2M7CisgICAgaWYgKEZBSUxFRChtRHhnaUFkYXB0ZXIt
PkdldERlc2MoJmFkYXB0ZXJEZXNjKSkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgKmFkYXB0ZXJMdWlkID0gYWRhcHRlckRlc2MuQWRhcHRlckx1aWQ7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyZXIxMS5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMWI2NzYwYjkxNzkyOTVjNGNkN2UxMmJkODk1ZDkzODMyODM4Y2JkOAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkMTEvUmVuZGVyZXIxMS5oCkBAIC0wLDAgKzEsMzU4IEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisvLyBSZW5kZXJlcjExLmg6IERlZmluZXMgYSBiYWNrLWVuZCBzcGVjaWZpYyBjbGFzcyBm
b3IgdGhlIEQzRDExIHJlbmRlcmVyLgorCisjaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5E
RVJFUjExX0hfCisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjExX0hfCisKKyNp
bmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5
cGVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCisKKyNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
ZDNkMTEvUmVuZGVyU3RhdGVDYWNoZS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9JbnB1dExheW91dENhY2hlLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1Jl
bmRlclRhcmdldC5oIgorCituYW1lc3BhY2UgZ2wKK3sKK2NsYXNzIFJlbmRlcmJ1ZmZlcjsKK30K
KworbmFtZXNwYWNlIHJ4Cit7CisKK2NsYXNzIFZlcnRleERhdGFNYW5hZ2VyOworY2xhc3MgSW5k
ZXhEYXRhTWFuYWdlcjsKK2NsYXNzIFN0cmVhbWluZ0luZGV4QnVmZmVySW50ZXJmYWNlOworCitl
bnVtCit7CisgICAgTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlNfRDNEMTEgPSAxMDI0LAorICAg
IE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlNfRDNEMTEgPSAxMDI0Cit9OworCitjbGFzcyBS
ZW5kZXJlcjExIDogcHVibGljIFJlbmRlcmVyCit7CisgIHB1YmxpYzoKKyAgICBSZW5kZXJlcjEx
KGVnbDo6RGlzcGxheSAqZGlzcGxheSwgSERDIGhEYyk7CisgICAgdmlydHVhbCB+UmVuZGVyZXIx
MSgpOworCisgICAgc3RhdGljIFJlbmRlcmVyMTEgKm1ha2VSZW5kZXJlcjExKFJlbmRlcmVyICpy
ZW5kZXJlcik7CisKKyAgICB2aXJ0dWFsIEVHTGludCBpbml0aWFsaXplKCk7CisgICAgdmlydHVh
bCBib29sIHJlc2V0RGV2aWNlKCk7CisKKyAgICB2aXJ0dWFsIGludCBnZW5lcmF0ZUNvbmZpZ3Mo
Q29uZmlnRGVzYyAqKmNvbmZpZ0Rlc2NMaXN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQ29u
ZmlncyhDb25maWdEZXNjICpjb25maWdEZXNjTGlzdCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3lu
Yyhib29sIGJsb2NrKTsKKworICAgIHZpcnR1YWwgU3dhcENoYWluICpjcmVhdGVTd2FwQ2hhaW4o
SFdORCB3aW5kb3csIEhBTkRMRSBzaGFyZUhhbmRsZSwgR0xlbnVtIGJhY2tCdWZmZXJGb3JtYXQs
IEdMZW51bSBkZXB0aEJ1ZmZlckZvcm1hdCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2FtcGxl
clN0YXRlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGNvbnN0IGdsOjpTYW1wbGVy
U3RhdGUgJnNhbXBsZXIpOworICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0dXJlKGdsOjpTYW1wbGVy
VHlwZSB0eXBlLCBpbnQgaW5kZXgsIGdsOjpUZXh0dXJlICp0ZXh0dXJlKTsKKworICAgIHZpcnR1
YWwgdm9pZCBzZXRSYXN0ZXJpemVyU3RhdGUoY29uc3QgZ2w6OlJhc3Rlcml6ZXJTdGF0ZSAmcmFz
dGVyU3RhdGUpOworICAgIHZpcnR1YWwgdm9pZCBzZXRCbGVuZFN0YXRlKGdsOjpGcmFtZWJ1ZmZl
ciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRlLCBjb25zdCBn
bDo6Q29sb3IgJmJsZW5kQ29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50IHNhbXBsZU1hc2spOworICAgIHZpcnR1YWwgdm9pZCBzZXREZXB0aFN0ZW5jaWxT
dGF0ZShjb25zdCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmRlcHRoU3RlbmNpbFN0YXRlLCBpbnQg
c3RlbmNpbFJlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0
ZW5jaWxCYWNrUmVmLCBib29sIGZyb250RmFjZUNDVyk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
U2Npc3NvclJlY3RhbmdsZShjb25zdCBnbDo6UmVjdGFuZ2xlICZzY2lzc29yLCBib29sIGVuYWJs
ZWQpOworICAgIHZpcnR1YWwgYm9vbCBzZXRWaWV3cG9ydChjb25zdCBnbDo6UmVjdGFuZ2xlICZ2
aWV3cG9ydCwgZmxvYXQgek5lYXIsIGZsb2F0IHpGYXIsIEdMZW51bSBkcmF3TW9kZSwgR0xlbnVt
IGZyb250RmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpZ25vcmVWaWV3
cG9ydCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHlQcmltaXRpdmVUeXBlKEdMZW51bSBtb2Rl
LCBHTHNpemVpIGNvdW50KTsKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZW5kZXJUYXJnZXQoZ2w6
OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcik7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5U2hhZGVy
cyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSk7CisgICAgdmlydHVhbCB2b2lkIGFw
cGx5VW5pZm9ybXMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGdsOjpVbmlmb3Jt
QXJyYXkgKnVuaWZvcm1BcnJheSk7CisgICAgdmlydHVhbCBHTGVudW0gYXBwbHlWZXJ0ZXhCdWZm
ZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGdsOjpWZXJ0ZXhBdHRyaWJ1dGUg
dmVydGV4QXR0cmlidXRlc1tdLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBp
bnN0YW5jZXMpOworICAgIHZpcnR1YWwgR0xlbnVtIGFwcGx5SW5kZXhCdWZmZXIoY29uc3QgR0x2
b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIEdMc2l6ZWkgY291
bnQsIEdMZW51bSBtb2RlLCBHTGVudW0gdHlwZSwgVHJhbnNsYXRlZEluZGV4RGF0YSAqaW5kZXhJ
bmZvKTsKKworICAgIHZpcnR1YWwgdm9pZCBkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTHNpemVp
IGNvdW50LCBHTHNpemVpIGluc3RhbmNlcyk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdFbGVtZW50
cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAq
aW5kaWNlcywgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyLCBjb25zdCBUcmFuc2xhdGVk
SW5kZXhEYXRhICZpbmRleEluZm8sIEdMc2l6ZWkgaW5zdGFuY2VzKTsKKworICAgIHZpcnR1YWwg
dm9pZCBjbGVhcihjb25zdCBnbDo6Q2xlYXJQYXJhbWV0ZXJzICZjbGVhclBhcmFtcywgZ2w6OkZy
YW1lYnVmZmVyICpmcmFtZUJ1ZmZlcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0FsbFN0YXRl
RGlydHkoKTsKKworICAgIC8vIGxvc3QgZGV2aWNlCisgICAgdm9pZCBub3RpZnlEZXZpY2VMb3N0
KCk7CisgICAgdmlydHVhbCBib29sIGlzRGV2aWNlTG9zdCgpOworICAgIHZpcnR1YWwgYm9vbCB0
ZXN0RGV2aWNlTG9zdChib29sIG5vdGlmeSk7CisgICAgdmlydHVhbCBib29sIHRlc3REZXZpY2VS
ZXNldHRhYmxlKCk7CisKKyAgICAvLyBSZW5kZXJlciBjYXBhYmlsaXRpZXMKKyAgICB2aXJ0dWFs
IERXT1JEIGdldEFkYXB0ZXJWZW5kb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHN0ZDo6c3RyaW5n
IGdldFJlbmRlcmVyRGVzY3JpcHRpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdVSUQgZ2V0QWRh
cHRlcklkZW50aWZpZXIoKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBnZXRCR1JBVGV4dHVy
ZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUMVRleHR1cmVTdXBwb3J0
KCk7CisgICAgdmlydHVhbCBib29sIGdldERYVDNUZXh0dXJlU3VwcG9ydCgpOworICAgIHZpcnR1
YWwgYm9vbCBnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RXZl
bnRRdWVyeVN1cHBvcnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVTdXBw
b3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSk7CisgICAgdmlydHVhbCBib29s
IGdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFi
bGUpOworICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpOworICAg
IHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCk7CisgICAgdmly
dHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRz
KCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVzZXJ2ZWRWZXJ0ZXhVbmlm
b3JtVmVjdG9ycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlc2VydmVk
RnJhZ21lbnRVbmlmb3JtVmVjdG9ycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50
IGdldE1heFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25l
ZCBpbnQgZ2V0TWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycygpIGNvbnN0OworICAgIHZpcnR1YWwg
dW5zaWduZWQgaW50IGdldE1heFZhcnlpbmdWZWN0b3JzKCkgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIGdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29s
IGdldERlcHRoVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T2Nj
bHVzaW9uUXVlcnlTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEluc3RhbmNp
bmdTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldFRleHR1cmVGaWx0ZXJBbmlz
b3Ryb3B5U3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgZ2V0VGV4dHVyZU1heEFu
aXNvdHJvcHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0U2hhcmVIYW5kbGVTdXBwb3J0
KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldERlcml2YXRpdmVJbnN0cnVjdGlvblN1cHBv
cnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0UG9zdFN1YkJ1ZmZlclN1cHBvcnQoKSBj
b25zdDsKKworICAgIHZpcnR1YWwgaW50IGdldE1ham9yU2hhZGVyTW9kZWwoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGZsb2F0IGdldE1heFBvaW50U2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50
IGdldE1heFZpZXdwb3J0RGltZW5zaW9uKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4
VGV4dHVyZVdpZHRoKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZUhlaWdo
dCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXQzMkJpdEluZGV4U3VwcG9ydCgpIGNvbnN0
OworICAgIHZpcnR1YWwgaW50IGdldE1pblN3YXBJbnRlcnZhbCgpIGNvbnN0OworICAgIHZpcnR1
YWwgaW50IGdldE1heFN3YXBJbnRlcnZhbCgpIGNvbnN0OworCisgICAgdmlydHVhbCBHTHNpemVp
IGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSBjb25zdDsKKyAgICBpbnQgZ2V0TmVhcmVzdFN1cHBv
cnRlZFNhbXBsZXMoRFhHSV9GT1JNQVQgZm9ybWF0LCB1bnNpZ25lZCBpbnQgcmVxdWVzdGVkKSBj
b25zdDsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFJlbmRlclRhcmdldHMoKSBj
b25zdDsKKworICAgIC8vIFBpeGVsIG9wZXJhdGlvbnMKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRv
UmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKmRlc3QsIFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlMkQgKnNvdXJjZSk7CisgICAgdmlydHVhbCBib29sIGNvcHlUb1JlbmRlclRh
cmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlQ3ViZSAqc291cmNlKTsKKworICAgIHZpcnR1YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6OkZy
YW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVjdCwg
R0xlbnVtIGRlc3RGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBH
TGludCBsZXZlbCk7CisgICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIg
KmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVz
dEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwpOworCisgICAgYm9vbCBjb3B5VGV4dHVyZShJRDNEMTFTaGFkZXJS
ZXNvdXJjZVZpZXcgKnNvdXJjZSwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlQXJlYSwgdW5z
aWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LAorICAgICAg
ICAgICAgICAgICAgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZGVzdCwgY29uc3QgZ2w6OlJl
Y3RhbmdsZSAmZGVzdEFyZWEsIHVuc2lnbmVkIGludCBkZXN0V2lkdGgsIHVuc2lnbmVkIGludCBk
ZXN0SGVpZ2h0LCBHTGVudW0gZGVzdEZvcm1hdCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgYmxpdFJl
Y3QoZ2w6OkZyYW1lYnVmZmVyICpyZWFkVGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFk
UmVjdCwgZ2w6OkZyYW1lYnVmZmVyICpkcmF3VGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZk
cmF3UmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0
LCBib29sIGJsaXREZXB0aFN0ZW5jaWwpOworICAgIHZpcnR1YWwgdm9pZCByZWFkUGl4ZWxzKGds
OjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTHNpemVpIG91dHB1dFBpdGNoLCBib29sIHBhY2tSZXZlcnNl
Um93T3JkZXIsIEdMaW50IHBhY2tBbGlnbm1lbnQsIHZvaWQqIHBpeGVscyk7CisKKyAgICAvLyBS
ZW5kZXJUYXJnZXQgY3JlYXRpb24KKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqY3JlYXRlUmVu
ZGVyVGFyZ2V0KFN3YXBDaGFpbiAqc3dhcENoYWluLCBib29sIGRlcHRoKTsKKyAgICB2aXJ0dWFs
IFJlbmRlclRhcmdldCAqY3JlYXRlUmVuZGVyVGFyZ2V0KGludCB3aWR0aCwgaW50IGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzLCBib29sIGRlcHRoKTsKKworICAgIC8vIFNo
YWRlciBvcGVyYXRpb25zCisgICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpsb2FkRXhlY3V0
YWJsZShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgcng6OlNoYWRlclR5cGUg
dHlwZSk7CisgICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpjb21waWxlVG9FeGVjdXRhYmxl
KGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpzaGFkZXJITFNMLCByeDo6U2hhZGVy
VHlwZSB0eXBlLCBEM0RXb3JrYXJvdW5kVHlwZSB3b3JrYXJvdW5kKTsKKworICAgIC8vIEltYWdl
IG9wZXJhdGlvbnMKKyAgICB2aXJ0dWFsIEltYWdlICpjcmVhdGVJbWFnZSgpOworICAgIHZpcnR1
YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChJbWFnZSAqZGVzdCwgSW1hZ2UgKnNvdXJjZSk7CisgICAg
dmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChTd2FwQ2hhaW4g
KnN3YXBDaGFpbik7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0
b3JhZ2UyRChpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwg
Ym9vbCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAg
ICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUoaW50IGxl
dmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5k
ZXJhYmxlLCBpbnQgc2l6ZSk7CisKKyAgICAvLyBCdWZmZXIgY3JlYXRpb24KKyAgICB2aXJ0dWFs
IFZlcnRleEJ1ZmZlciAqY3JlYXRlVmVydGV4QnVmZmVyKCk7CisgICAgdmlydHVhbCBJbmRleEJ1
ZmZlciAqY3JlYXRlSW5kZXhCdWZmZXIoKTsKKyAgICB2aXJ0dWFsIEJ1ZmZlclN0b3JhZ2UgKmNy
ZWF0ZUJ1ZmZlclN0b3JhZ2UoKTsKKworICAgIC8vIFF1ZXJ5IGFuZCBGZW5jZSBjcmVhdGlvbgor
ICAgIHZpcnR1YWwgUXVlcnlJbXBsICpjcmVhdGVRdWVyeShHTGVudW0gdHlwZSk7CisgICAgdmly
dHVhbCBGZW5jZUltcGwgKmNyZWF0ZUZlbmNlKCk7CisKKyAgICAvLyBEM0QxMS1yZW5kZXJlciBz
cGVjaWZpYyBtZXRob2RzCisgICAgSUQzRDExRGV2aWNlICpnZXREZXZpY2UoKSB7IHJldHVybiBt
RGV2aWNlOyB9CisgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqZ2V0RGV2aWNlQ29udGV4dCgpIHsg
cmV0dXJuIG1EZXZpY2VDb250ZXh0OyB9OworICAgIElEWEdJRmFjdG9yeSAqZ2V0RHhnaUZhY3Rv
cnkoKSB7IHJldHVybiBtRHhnaUZhY3Rvcnk7IH07CisKKyAgICBib29sIGdldFJlbmRlclRhcmdl
dFJlc291cmNlKGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyLCB1bnNpZ25lZCBpbnQgKnN1
YnJlc291cmNlSW5kZXgsIElEM0QxMVRleHR1cmUyRCAqKnJlc291cmNlKTsKKyAgICB2b2lkIHVu
YXBwbHlSZW5kZXJUYXJnZXRzKCk7CisgICAgdm9pZCBzZXRPbmVUaW1lUmVuZGVyVGFyZ2V0KElE
M0QxMVJlbmRlclRhcmdldFZpZXcgKnJlbmRlclRhcmdldFZpZXcpOworCisgICAgdmlydHVhbCBi
b29sIGdldExVSUQoTFVJRCAqYWRhcHRlckx1aWQpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAg
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmVyMTEpOworCisgICAgdm9pZCBkcmF3TGlu
ZUxvb3AoR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywg
aW50IG1pbkluZGV4LCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIpOworICAgIHZvaWQg
ZHJhd1RyaWFuZ2xlRmFuKEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQg
KmluZGljZXMsIGludCBtaW5JbmRleCwgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyLCBp
bnQgaW5zdGFuY2VzKTsKKworICAgIHZvaWQgcmVhZFRleHR1cmVEYXRhKElEM0QxMVRleHR1cmUy
RCAqdGV4dHVyZSwgdW5zaWduZWQgaW50IHN1YlJlc291cmNlLCBjb25zdCBnbDo6UmVjdGFuZ2xl
ICZhcmVhLAorICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBzb3VyY2VGb3JtYXQsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHNpemVpIG91dHB1dFBpdGNoLCBib29sIHBhY2tS
ZXZlcnNlUm93T3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgcGFja0FsaWdu
bWVudCwgdm9pZCAqcGl4ZWxzKTsKKworICAgIHZvaWQgbWFza2VkQ2xlYXIoY29uc3QgZ2w6OkNs
ZWFyUGFyYW1ldGVycyAmY2xlYXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIp
OworICAgIHJ4OjpSYW5nZSBnZXRWaWV3cG9ydEJvdW5kcygpIGNvbnN0OworCisgICAgYm9vbCBi
bGl0UmVuZGVyYnVmZmVyUmVjdChjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFkUmVjdCwgY29uc3Qg
Z2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsIFJlbmRlclRhcmdldCAqcmVhZFJlbmRlclRhcmdldCwg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJUYXJnZXQgKmRyYXdSZW5kZXJU
YXJnZXQsIGJvb2wgd2hvbGVCdWZmZXJDb3B5KTsKKyAgICBJRDNEMTFUZXh0dXJlMkQgKnJlc29s
dmVNdWx0aXNhbXBsZWRUZXh0dXJlKElEM0QxMVRleHR1cmUyRCAqc291cmNlLCB1bnNpZ25lZCBp
bnQgc3VicmVzb3VyY2UpOworCisgICAgSE1PRFVMRSBtRDNkMTFNb2R1bGU7CisgICAgSE1PRFVM
RSBtRHhnaU1vZHVsZTsKKyAgICBIREMgbURjOworCisgICAgYm9vbCBtRGV2aWNlTG9zdDsKKwor
ICAgIHZvaWQgaW5pdGlhbGl6ZURldmljZSgpOworICAgIHZvaWQgcmVsZWFzZURldmljZVJlc291
cmNlcygpOworICAgIGludCBnZXRNaW5vclNoYWRlck1vZGVsKCkgY29uc3Q7CisgICAgdm9pZCBy
ZWxlYXNlKCk7CisKKyAgICBSZW5kZXJTdGF0ZUNhY2hlIG1TdGF0ZUNhY2hlOworCisgICAgLy8g
U3VwcG9ydCBmbGFncworICAgIGJvb2wgbUZsb2F0MTZUZXh0dXJlU3VwcG9ydDsKKyAgICBib29s
IG1GbG9hdDE2RmlsdGVyU3VwcG9ydDsKKyAgICBib29sIG1GbG9hdDE2UmVuZGVyU3VwcG9ydDsK
KworICAgIGJvb2wgbUZsb2F0MzJUZXh0dXJlU3VwcG9ydDsKKyAgICBib29sIG1GbG9hdDMyRmls
dGVyU3VwcG9ydDsKKyAgICBib29sIG1GbG9hdDMyUmVuZGVyU3VwcG9ydDsKKworICAgIGJvb2wg
bURYVDFUZXh0dXJlU3VwcG9ydDsKKyAgICBib29sIG1EWFQzVGV4dHVyZVN1cHBvcnQ7CisgICAg
Ym9vbCBtRFhUNVRleHR1cmVTdXBwb3J0OworCisgICAgYm9vbCBtRGVwdGhUZXh0dXJlU3VwcG9y
dDsKKworICAgIC8vIE11bHRpc2FtcGxlIGZvcm1hdCBzdXBwb3J0CisgICAgc3RydWN0IE11bHRp
c2FtcGxlU3VwcG9ydEluZm8KKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBxdWFsaXR5TGV2
ZWxzW0QzRDExX01BWF9NVUxUSVNBTVBMRV9TQU1QTEVfQ09VTlRdOworICAgIH07CisKKyAgICB0
eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxEWEdJX0ZPUk1BVCwgTXVsdGlzYW1wbGVTdXBwb3J0
SW5mbywgc3RkOjpoYXNoPGludD4gPiBNdWx0aXNhbXBsZVN1cHBvcnRNYXA7CisgICAgTXVsdGlz
YW1wbGVTdXBwb3J0TWFwIG1NdWx0aXNhbXBsZVN1cHBvcnRNYXA7CisKKyAgICB1bnNpZ25lZCBp
bnQgbU1heFN1cHBvcnRlZFNhbXBsZXM7CisKKyAgICAvLyBjdXJyZW50IHJlbmRlciB0YXJnZXQg
c3RhdGVzCisgICAgdW5zaWduZWQgaW50IG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsc1tnbDo6
SU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSU107CisgICAgdW5zaWduZWQgaW50IG1BcHBs
aWVkRGVwdGhidWZmZXJTZXJpYWw7CisgICAgdW5zaWduZWQgaW50IG1BcHBsaWVkU3RlbmNpbGJ1
ZmZlclNlcmlhbDsKKyAgICBib29sIG1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZDsKKyAgICBib29s
IG1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQ7CisgICAgcng6OlJlbmRlclRhcmdldDo6RGVz
YyBtUmVuZGVyVGFyZ2V0RGVzYzsKKyAgICB1bnNpZ25lZCBpbnQgbUN1ckRlcHRoU2l6ZTsKKyAg
ICB1bnNpZ25lZCBpbnQgbUN1clN0ZW5jaWxTaXplOworCisgICAgLy8gQ3VycmVudGx5IGFwcGxp
ZWQgc2FtcGxlciBzdGF0ZXMKKyAgICBib29sIG1Gb3JjZVNldFZlcnRleFNhbXBsZXJTdGF0ZXNb
Z2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU107CisgICAg
Z2w6OlNhbXBsZXJTdGF0ZSBtQ3VyVmVydGV4U2FtcGxlclN0YXRlc1tnbDo6SU1QTEVNRU5UQVRJ
T05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKKworICAgIGJvb2wgbUZvcmNlU2V0
UGl4ZWxTYW1wbGVyU3RhdGVzW2dsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUU107CisgICAgZ2w6
OlNhbXBsZXJTdGF0ZSBtQ3VyUGl4ZWxTYW1wbGVyU3RhdGVzW2dsOjpNQVhfVEVYVFVSRV9JTUFH
RV9VTklUU107CisKKyAgICAvLyBDdXJyZW50bHkgYXBwbGllZCB0ZXh0dXJlcworICAgIHVuc2ln
bmVkIGludCBtQ3VyVmVydGV4VGV4dHVyZVNlcmlhbHNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9W
RVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU107CisgICAgdW5zaWduZWQgaW50IG1DdXJQaXhlbFRl
eHR1cmVTZXJpYWxzW2dsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUU107CisKKyAgICAvLyBDdXJy
ZW50bHkgYXBwbGllZCBibGVuZCBzdGF0ZQorICAgIGJvb2wgbUZvcmNlU2V0QmxlbmRTdGF0ZTsK
KyAgICBnbDo6QmxlbmRTdGF0ZSBtQ3VyQmxlbmRTdGF0ZTsKKyAgICBnbDo6Q29sb3IgbUN1ckJs
ZW5kQ29sb3I7CisgICAgdW5zaWduZWQgaW50IG1DdXJTYW1wbGVNYXNrOworCisgICAgLy8gQ3Vy
cmVudGx5IGFwcGxpZWQgcmFzdGVyaXplciBzdGF0ZQorICAgIGJvb2wgbUZvcmNlU2V0UmFzdGVy
U3RhdGU7CisgICAgZ2w6OlJhc3Rlcml6ZXJTdGF0ZSBtQ3VyUmFzdGVyU3RhdGU7CisKKyAgICAv
LyBDdXJyZW50bHkgYXBwbGllZCBkZXB0aCBzdGVuY2lsIHN0YXRlCisgICAgYm9vbCBtRm9yY2VT
ZXREZXB0aFN0ZW5jaWxTdGF0ZTsKKyAgICBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgbUN1ckRlcHRo
U3RlbmNpbFN0YXRlOworICAgIGludCBtQ3VyU3RlbmNpbFJlZjsKKyAgICBpbnQgbUN1clN0ZW5j
aWxCYWNrUmVmOworCisgICAgLy8gQ3VycmVudGx5IGFwcGxpZWQgc2Npc3NvciByZWN0YW5nbGUK
KyAgICBib29sIG1Gb3JjZVNldFNjaXNzb3I7CisgICAgYm9vbCBtU2Npc3NvckVuYWJsZWQ7Cisg
ICAgZ2w6OlJlY3RhbmdsZSBtQ3VyU2Npc3NvcjsKKworICAgIC8vIEN1cnJlbnRseSBhcHBsaWVk
IHZpZXdwb3J0CisgICAgYm9vbCBtRm9yY2VTZXRWaWV3cG9ydDsKKyAgICBnbDo6UmVjdGFuZ2xl
IG1DdXJWaWV3cG9ydDsKKyAgICBmbG9hdCBtQ3VyTmVhcjsKKyAgICBmbG9hdCBtQ3VyRmFyOwor
CisgICAgLy8gQ3VycmVudGx5IGFwcGxpZWQgcHJpbWl0aXZlIHRvcG9sb2d5CisgICAgRDNEMTFf
UFJJTUlUSVZFX1RPUE9MT0dZIG1DdXJyZW50UHJpbWl0aXZlVG9wb2xvZ3k7CisKKyAgICB1bnNp
Z25lZCBpbnQgbUFwcGxpZWRJQlNlcmlhbDsKKyAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRTdG9y
YWdlSUJTZXJpYWw7CisgICAgdW5zaWduZWQgaW50IG1BcHBsaWVkSUJPZmZzZXQ7CisKKyAgICB1
bnNpZ25lZCBpbnQgbUFwcGxpZWRQcm9ncmFtQmluYXJ5U2VyaWFsOworICAgIGJvb2wgbUlzR2Vv
bWV0cnlTaGFkZXJBY3RpdmU7CisKKyAgICBkeF9WZXJ0ZXhDb25zdGFudHMgbVZlcnRleENvbnN0
YW50czsKKyAgICBkeF9WZXJ0ZXhDb25zdGFudHMgbUFwcGxpZWRWZXJ0ZXhDb25zdGFudHM7Cisg
ICAgSUQzRDExQnVmZmVyICptRHJpdmVyQ29uc3RhbnRCdWZmZXJWUzsKKyAgICBJRDNEMTFCdWZm
ZXIgKm1DdXJyZW50VmVydGV4Q29uc3RhbnRCdWZmZXI7CisKKyAgICBkeF9QaXhlbENvbnN0YW50
cyBtUGl4ZWxDb25zdGFudHM7CisgICAgZHhfUGl4ZWxDb25zdGFudHMgbUFwcGxpZWRQaXhlbENv
bnN0YW50czsKKyAgICBJRDNEMTFCdWZmZXIgKm1Ecml2ZXJDb25zdGFudEJ1ZmZlclBTOworICAg
IElEM0QxMUJ1ZmZlciAqbUN1cnJlbnRQaXhlbENvbnN0YW50QnVmZmVyOworCisgICAgSUQzRDEx
QnVmZmVyICptQ3VycmVudEdlb21ldHJ5Q29uc3RhbnRCdWZmZXI7CisKKyAgICAvLyBWZXJ0ZXgs
IGluZGV4IGFuZCBpbnB1dCBsYXlvdXRzCisgICAgVmVydGV4RGF0YU1hbmFnZXIgKm1WZXJ0ZXhE
YXRhTWFuYWdlcjsKKyAgICBJbmRleERhdGFNYW5hZ2VyICptSW5kZXhEYXRhTWFuYWdlcjsKKyAg
ICBJbnB1dExheW91dENhY2hlIG1JbnB1dExheW91dENhY2hlOworCisgICAgU3RyZWFtaW5nSW5k
ZXhCdWZmZXJJbnRlcmZhY2UgKm1MaW5lTG9vcElCOworICAgIFN0cmVhbWluZ0luZGV4QnVmZmVy
SW50ZXJmYWNlICptVHJpYW5nbGVGYW5JQjsKKworICAgIC8vIFRleHR1cmUgY29weSByZXNvdXJj
ZXMKKyAgICBib29sIG1Db3B5UmVzb3VyY2VzSW5pdGlhbGl6ZWQ7CisgICAgSUQzRDExQnVmZmVy
ICptQ29weVZCOworICAgIElEM0QxMVNhbXBsZXJTdGF0ZSAqbUNvcHlTYW1wbGVyOworICAgIElE
M0QxMUlucHV0TGF5b3V0ICptQ29weUlMOworICAgIElEM0QxMVZlcnRleFNoYWRlciAqbUNvcHlW
UzsKKyAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUNvcHlSR0JBUFM7CisgICAgSUQzRDExUGl4ZWxT
aGFkZXIgKm1Db3B5UkdCUFM7CisgICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1Db3B5THVtUFM7Cisg
ICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1Db3B5THVtQWxwaGFQUzsKKworICAgIC8vIE1hc2tlZCBj
bGVhciByZXNvdXJjZXMKKyAgICBib29sIG1DbGVhclJlc291cmNlc0luaXRpYWxpemVkOworICAg
IElEM0QxMUJ1ZmZlciAqbUNsZWFyVkI7CisgICAgSUQzRDExSW5wdXRMYXlvdXQgKm1DbGVhcklM
OworICAgIElEM0QxMVZlcnRleFNoYWRlciAqbUNsZWFyVlM7CisgICAgSUQzRDExUGl4ZWxTaGFk
ZXIgKm1DbGVhclNpbmdsZVBTOworICAgIElEM0QxMVBpeGVsU2hhZGVyICptQ2xlYXJNdWx0aXBs
ZVBTOworICAgIElEM0QxMVJhc3Rlcml6ZXJTdGF0ZSAqbUNsZWFyU2Npc3NvclJTOworICAgIElE
M0QxMVJhc3Rlcml6ZXJTdGF0ZSAqbUNsZWFyTm9TY2lzc29yUlM7CisKKyAgICAvLyBTeW5jIHF1
ZXJ5CisgICAgSUQzRDExUXVlcnkgKm1TeW5jUXVlcnk7CisKKyAgICBJRDNEMTFEZXZpY2UgKm1E
ZXZpY2U7CisgICAgRDNEX0ZFQVRVUkVfTEVWRUwgbUZlYXR1cmVMZXZlbDsKKyAgICBJRDNEMTFE
ZXZpY2VDb250ZXh0ICptRGV2aWNlQ29udGV4dDsKKyAgICBJRFhHSUFkYXB0ZXIgKm1EeGdpQWRh
cHRlcjsKKyAgICBEWEdJX0FEQVBURVJfREVTQyBtQWRhcHRlckRlc2NyaXB0aW9uOworICAgIGNo
YXIgbURlc2NyaXB0aW9uWzEyOF07CisgICAgSURYR0lGYWN0b3J5ICptRHhnaUZhY3Rvcnk7CisK
KyAgICAvLyBDYWNoZWQgZGV2aWNlIGNhcHMKKyAgICBib29sIG1CR1JBVGV4dHVyZVN1cHBvcnQ7
Cit9OworCit9CisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUkVSMTFfSF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkMTEvU2hhZGVyRXhlY3V0YWJsZTExLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU2hhZGVyRXhlY3V0YWJsZTExLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4yZTQ1NWUzYWY1ZTNiMzVmMDA4ZjAxOTA4MWRhYTZlMjcwN2YyMDZkCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuY3BwCkBAIC0wLDAgKzEsMTA5IEBACisjaW5jbHVkZSAi
cHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFNoYWRlckV4ZWN1dGFibGUx
MS5jcHA6IEltcGxlbWVudHMgYSBEM0QxMS1zcGVjaWZpYyBjbGFzcyB0byBjb250YWluIHNoYWRl
cgorLy8gZXhlY3V0YWJsZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgorCisjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1dGFibGUxMS5oIgorCisjaW5jbHVkZSAi
Y29tbW9uL2RlYnVnLmgiCisKK25hbWVzcGFjZSByeAoreworCitTaGFkZXJFeGVjdXRhYmxlMTE6
OlNoYWRlckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwg
SUQzRDExUGl4ZWxTaGFkZXIgKmV4ZWN1dGFibGUpCisgICAgOiBTaGFkZXJFeGVjdXRhYmxlKGZ1
bmN0aW9uLCBsZW5ndGgpCit7CisgICAgbVBpeGVsRXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7Cisg
ICAgbVZlcnRleEV4ZWN1dGFibGUgPSBOVUxMOworICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBO
VUxMOworCisgICAgbUNvbnN0YW50QnVmZmVyID0gTlVMTDsKK30KKworU2hhZGVyRXhlY3V0YWJs
ZTExOjpTaGFkZXJFeGVjdXRhYmxlMTEoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5n
dGgsIElEM0QxMVZlcnRleFNoYWRlciAqZXhlY3V0YWJsZSkKKyAgICA6IFNoYWRlckV4ZWN1dGFi
bGUoZnVuY3Rpb24sIGxlbmd0aCkKK3sKKyAgICBtVmVydGV4RXhlY3V0YWJsZSA9IGV4ZWN1dGFi
bGU7CisgICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7CisgICAgbUdlb21ldHJ5RXhlY3V0YWJs
ZSA9IE5VTEw7CisKKyAgICBtQ29uc3RhbnRCdWZmZXIgPSBOVUxMOworfQorCitTaGFkZXJFeGVj
dXRhYmxlMTE6OlNoYWRlckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90
IGxlbmd0aCwgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmV4ZWN1dGFibGUpCisgICAgOiBTaGFkZXJF
eGVjdXRhYmxlKGZ1bmN0aW9uLCBsZW5ndGgpCit7CisgICAgbUdlb21ldHJ5RXhlY3V0YWJsZSA9
IGV4ZWN1dGFibGU7CisgICAgbVZlcnRleEV4ZWN1dGFibGUgPSBOVUxMOworICAgIG1QaXhlbEV4
ZWN1dGFibGUgPSBOVUxMOworCisgICAgbUNvbnN0YW50QnVmZmVyID0gTlVMTDsKK30KKworU2hh
ZGVyRXhlY3V0YWJsZTExOjp+U2hhZGVyRXhlY3V0YWJsZTExKCkKK3sKKyAgICBpZiAobVZlcnRl
eEV4ZWN1dGFibGUpCisgICAgeworICAgICAgICBtVmVydGV4RXhlY3V0YWJsZS0+UmVsZWFzZSgp
OworICAgIH0KKyAgICBpZiAobVBpeGVsRXhlY3V0YWJsZSkKKyAgICB7CisgICAgICAgIG1QaXhl
bEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKKyAgICB9CisgICAgaWYgKG1HZW9tZXRyeUV4ZWN1dGFi
bGUpCisgICAgeworICAgICAgICBtR2VvbWV0cnlFeGVjdXRhYmxlLT5SZWxlYXNlKCk7CisgICAg
fQorICAgIAorICAgIGlmIChtQ29uc3RhbnRCdWZmZXIpCisgICAgeworICAgICAgICBtQ29uc3Rh
bnRCdWZmZXItPlJlbGVhc2UoKTsKKyAgICB9Cit9CisKK1NoYWRlckV4ZWN1dGFibGUxMSAqU2hh
ZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKFNoYWRlckV4ZWN1dGFibGUg
KmV4ZWN1dGFibGUpCit7CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoU2hhZGVyRXhlY3V0
YWJsZTExKiwgZXhlY3V0YWJsZSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxTaGFkZXJFeGVj
dXRhYmxlMTEqPihleGVjdXRhYmxlKTsKK30KKworSUQzRDExVmVydGV4U2hhZGVyICpTaGFkZXJF
eGVjdXRhYmxlMTE6OmdldFZlcnRleFNoYWRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1WZXJ0
ZXhFeGVjdXRhYmxlOworfQorCitJRDNEMTFQaXhlbFNoYWRlciAqU2hhZGVyRXhlY3V0YWJsZTEx
OjpnZXRQaXhlbFNoYWRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1QaXhlbEV4ZWN1dGFibGU7
Cit9CisKK0lEM0QxMUdlb21ldHJ5U2hhZGVyICpTaGFkZXJFeGVjdXRhYmxlMTE6OmdldEdlb21l
dHJ5U2hhZGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUdlb21ldHJ5RXhlY3V0YWJsZTsKK30K
KworSUQzRDExQnVmZmVyICpTaGFkZXJFeGVjdXRhYmxlMTE6OmdldENvbnN0YW50QnVmZmVyKElE
M0QxMURldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJDb3VudCkKK3sKKyAgICBp
ZiAoIW1Db25zdGFudEJ1ZmZlciAmJiByZWdpc3RlckNvdW50ID4gMCkKKyAgICB7CisgICAgICAg
IEQzRDExX0JVRkZFUl9ERVNDIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24gPSB7MH07CisgICAg
ICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uQnl0ZVdpZHRoID0gcmVnaXN0ZXJDb3VudCAq
IHNpemVvZihmbG9hdFs0XSk7CisgICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uVXNh
Z2UgPSBEM0QxMV9VU0FHRV9EWU5BTUlDOworICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0
aW9uLkJpbmRGbGFncyA9IEQzRDExX0JJTkRfQ09OU1RBTlRfQlVGRkVSOworICAgICAgICBjb25z
dGFudEJ1ZmZlckRlc2NyaXB0aW9uLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19X
UklURTsKKyAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5NaXNjRmxhZ3MgPSAwOwor
ICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLlN0cnVjdHVyZUJ5dGVTdHJpZGUgPSAw
OworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVCdWZmZXIoJmNvbnN0
YW50QnVmZmVyRGVzY3JpcHRpb24sIE5VTEwsICZtQ29uc3RhbnRCdWZmZXIpOworICAgICAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgIH0KKworICAgIHJldHVybiBtQ29uc3RhbnRC
dWZmZXI7Cit9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRl
ckV4ZWN1dGFibGUxMS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNmVjMWNmN2Qy
Y2RhZWJhNDRkNGE1Yjg1NTc5ZDE4Mjk3YTQxZmFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVj
dXRhYmxlMTEuaApAQCAtMCwwICsxLDQ3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIw
MTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBTaGFk
ZXJFeGVjdXRhYmxlMTEuaDogRGVmaW5lcyBhIEQzRDExLXNwZWNpZmljIGNsYXNzIHRvIGNvbnRh
aW4gc2hhZGVyCisvLyBleGVjdXRhYmxlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuCisKKyNpZm5k
ZWYgTElCR0xFU1YyX1JFTkRFUkVSX1NIQURFUkVYRUNVVEFCTEUxMV9IXworI2RlZmluZSBMSUJH
TEVTVjJfUkVOREVSRVJfU0hBREVSRVhFQ1VUQUJMRTExX0hfCisKKyNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvU2hhZGVyRXhlY3V0YWJsZS5oIgorCituYW1lc3BhY2UgcngKK3sKKworY2xh
c3MgU2hhZGVyRXhlY3V0YWJsZTExIDogcHVibGljIFNoYWRlckV4ZWN1dGFibGUKK3sKKyAgcHVi
bGljOgorICAgIFNoYWRlckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90
IGxlbmd0aCwgSUQzRDExUGl4ZWxTaGFkZXIgKmV4ZWN1dGFibGUpOworICAgIFNoYWRlckV4ZWN1
dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSUQzRDExVmVydGV4
U2hhZGVyICpleGVjdXRhYmxlKTsKKyAgICBTaGFkZXJFeGVjdXRhYmxlMTEoY29uc3Qgdm9pZCAq
ZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIElEM0QxMUdlb21ldHJ5U2hhZGVyICpleGVjdXRhYmxl
KTsKKworICAgIHZpcnR1YWwgflNoYWRlckV4ZWN1dGFibGUxMSgpOworCisgICAgc3RhdGljIFNo
YWRlckV4ZWN1dGFibGUxMSAqbWFrZVNoYWRlckV4ZWN1dGFibGUxMShTaGFkZXJFeGVjdXRhYmxl
ICpleGVjdXRhYmxlKTsKKworICAgIElEM0QxMVBpeGVsU2hhZGVyICpnZXRQaXhlbFNoYWRlcigp
IGNvbnN0OworICAgIElEM0QxMVZlcnRleFNoYWRlciAqZ2V0VmVydGV4U2hhZGVyKCkgY29uc3Q7
CisgICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmdldEdlb21ldHJ5U2hhZGVyKCkgY29uc3Q7CisK
KyAgICBJRDNEMTFCdWZmZXIgKmdldENvbnN0YW50QnVmZmVyKElEM0QxMURldmljZSAqZGV2aWNl
LCB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJDb3VudCk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oU2hhZGVyRXhlY3V0YWJsZTExKTsKKworICAgIElEM0QxMVBpeGVs
U2hhZGVyICptUGl4ZWxFeGVjdXRhYmxlOworICAgIElEM0QxMVZlcnRleFNoYWRlciAqbVZlcnRl
eEV4ZWN1dGFibGU7CisgICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKm1HZW9tZXRyeUV4ZWN1dGFi
bGU7CisKKyAgICBJRDNEMTFCdWZmZXIgKm1Db25zdGFudEJ1ZmZlcjsKK307CisKK30KKworI2Vu
ZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9TSEFERVJFWEVDVVRBQkxFMTFfSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
U3dhcENoYWluMTEuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9Td2FwQ2hhaW4xMS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjY5ZDQ1MTY2OGZkMDAw
NmM0NjJmOGE1ZTBjYzAxNDZmNzA4YWZiMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dhcENoYWluMTEuY3Bw
CkBAIC0wLDAgKzEsNjU3IEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKy8vIFN3YXBDaGFpbjExLmNwcDogSW1wbGVtZW50cyBhIGJhY2stZW5kIHNwZWNp
ZmljIGNsYXNzIGZvciB0aGUgRDNEMTEgc3dhcCBjaGFpbi4KKworI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9Td2FwQ2hhaW4xMS5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvUmVuZGVyZXIxMS5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2gxMXZzLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhMTFw
cy5oIgorCituYW1lc3BhY2UgcngKK3sKKworU3dhcENoYWluMTE6OlN3YXBDaGFpbjExKFJlbmRl
cmVyMTEgKnJlbmRlcmVyLCBIV05EIHdpbmRvdywgSEFORExFIHNoYXJlSGFuZGxlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMZW51bSBiYWNrQnVmZmVyRm9ybWF0LCBHTGVudW0gZGVwdGhC
dWZmZXJGb3JtYXQpCisgICAgOiBtUmVuZGVyZXIocmVuZGVyZXIpLCBTd2FwQ2hhaW4od2luZG93
LCBzaGFyZUhhbmRsZSwgYmFja0J1ZmZlckZvcm1hdCwgZGVwdGhCdWZmZXJGb3JtYXQpCit7Cisg
ICAgbVN3YXBDaGFpbiA9IE5VTEw7CisgICAgbUJhY2tCdWZmZXJUZXh0dXJlID0gTlVMTDsKKyAg
ICBtQmFja0J1ZmZlclJUVmlldyA9IE5VTEw7CisgICAgbU9mZnNjcmVlblRleHR1cmUgPSBOVUxM
OworICAgIG1PZmZzY3JlZW5SVFZpZXcgPSBOVUxMOworICAgIG1PZmZzY3JlZW5TUlZpZXcgPSBO
VUxMOworICAgIG1EZXB0aFN0ZW5jaWxUZXh0dXJlID0gTlVMTDsKKyAgICBtRGVwdGhTdGVuY2ls
RFNWaWV3ID0gTlVMTDsKKyAgICBtUXVhZFZCID0gTlVMTDsKKyAgICBtUGFzc1Rocm91Z2hTYW1w
bGVyID0gTlVMTDsKKyAgICBtUGFzc1Rocm91Z2hJTCA9IE5VTEw7CisgICAgbVBhc3NUaHJvdWdo
VlMgPSBOVUxMOworICAgIG1QYXNzVGhyb3VnaFBTID0gTlVMTDsKKyAgICBtV2lkdGggPSAtMTsK
KyAgICBtSGVpZ2h0ID0gLTE7CisgICAgbVN3YXBJbnRlcnZhbCA9IDA7CisgICAgbUFwcENyZWF0
ZWRTaGFyZUhhbmRsZSA9IG1TaGFyZUhhbmRsZSAhPSBOVUxMOworICAgIG1QYXNzVGhyb3VnaFJl
c291cmNlc0luaXQgPSBmYWxzZTsKK30KKworU3dhcENoYWluMTE6On5Td2FwQ2hhaW4xMSgpCit7
CisgICAgcmVsZWFzZSgpOworfQorCit2b2lkIFN3YXBDaGFpbjExOjpyZWxlYXNlKCkKK3sKKyAg
ICBTYWZlUmVsZWFzZShtU3dhcENoYWluKTsKKyAgICBTYWZlUmVsZWFzZShtQmFja0J1ZmZlclRl
eHR1cmUpOworICAgIFNhZmVSZWxlYXNlKG1CYWNrQnVmZmVyUlRWaWV3KTsKKyAgICBTYWZlUmVs
ZWFzZShtT2Zmc2NyZWVuVGV4dHVyZSk7CisgICAgU2FmZVJlbGVhc2UobU9mZnNjcmVlblJUVmll
dyk7CisgICAgU2FmZVJlbGVhc2UobU9mZnNjcmVlblNSVmlldyk7CisgICAgU2FmZVJlbGVhc2Uo
bURlcHRoU3RlbmNpbFRleHR1cmUpOworICAgIFNhZmVSZWxlYXNlKG1EZXB0aFN0ZW5jaWxEU1Zp
ZXcpOworICAgIFNhZmVSZWxlYXNlKG1RdWFkVkIpOworICAgIFNhZmVSZWxlYXNlKG1QYXNzVGhy
b3VnaFNhbXBsZXIpOworICAgIFNhZmVSZWxlYXNlKG1QYXNzVGhyb3VnaElMKTsKKyAgICBTYWZl
UmVsZWFzZShtUGFzc1Rocm91Z2hWUyk7CisgICAgU2FmZVJlbGVhc2UobVBhc3NUaHJvdWdoUFMp
OworCisgICAgaWYgKCFtQXBwQ3JlYXRlZFNoYXJlSGFuZGxlKQorICAgIHsKKyAgICAgICAgbVNo
YXJlSGFuZGxlID0gTlVMTDsKKyAgICB9Cit9CisKK3ZvaWQgU3dhcENoYWluMTE6OnJlbGVhc2VP
ZmZzY3JlZW5UZXh0dXJlKCkKK3sKKyAgICBTYWZlUmVsZWFzZShtT2Zmc2NyZWVuVGV4dHVyZSk7
CisgICAgU2FmZVJlbGVhc2UobU9mZnNjcmVlblJUVmlldyk7CisgICAgU2FmZVJlbGVhc2UobU9m
ZnNjcmVlblNSVmlldyk7CisgICAgU2FmZVJlbGVhc2UobURlcHRoU3RlbmNpbFRleHR1cmUpOwor
ICAgIFNhZmVSZWxlYXNlKG1EZXB0aFN0ZW5jaWxEU1ZpZXcpOworfQorCitFR0xpbnQgU3dhcENo
YWluMTE6OnJlc2V0T2Zmc2NyZWVuVGV4dHVyZShpbnQgYmFja2J1ZmZlcldpZHRoLCBpbnQgYmFj
a2J1ZmZlckhlaWdodCkKK3sKKyAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+
Z2V0RGV2aWNlKCk7CisKKyAgICBBU1NFUlQoZGV2aWNlICE9IE5VTEwpOworCisgICAgLy8gRDNE
MTEgZG9lcyBub3QgYWxsb3cgemVybyBzaXplIHRleHR1cmVzCisgICAgQVNTRVJUKGJhY2tidWZm
ZXJXaWR0aCA+PSAxKTsKKyAgICBBU1NFUlQoYmFja2J1ZmZlckhlaWdodCA+PSAxKTsKKworICAg
IC8vIFByZXNlcnZlIHRoZSByZW5kZXIgdGFyZ2V0IGNvbnRlbnQKKyAgICBJRDNEMTFUZXh0dXJl
MkQgKnByZXZpb3VzT2Zmc2NyZWVuVGV4dHVyZSA9IG1PZmZzY3JlZW5UZXh0dXJlOworICAgIGlm
IChwcmV2aW91c09mZnNjcmVlblRleHR1cmUpCisgICAgeworICAgICAgICBwcmV2aW91c09mZnNj
cmVlblRleHR1cmUtPkFkZFJlZigpOworICAgIH0KKyAgICBjb25zdCBpbnQgcHJldmlvdXNXaWR0
aCA9IG1XaWR0aDsKKyAgICBjb25zdCBpbnQgcHJldmlvdXNIZWlnaHQgPSBtSGVpZ2h0OworCisg
ICAgcmVsZWFzZU9mZnNjcmVlblRleHR1cmUoKTsKKworICAgIC8vIElmIHRoZSBhcHAgcGFzc2Vk
IGluIGEgc2hhcmUgaGFuZGxlLCBvcGVuIHRoZSByZXNvdXJjZQorICAgIC8vIFNlZSBFR0xfQU5H
TEVfZDNkX3NoYXJlX2hhbmRsZV9jbGllbnRfYnVmZmVyCisgICAgaWYgKG1BcHBDcmVhdGVkU2hh
cmVIYW5kbGUpCisgICAgeworICAgICAgICBJRDNEMTFSZXNvdXJjZSAqdGVtcFJlc291cmNlMTE7
CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5PcGVuU2hhcmVkUmVzb3VyY2UobVNo
YXJlSGFuZGxlLCBfX3V1aWRvZihJRDNEMTFSZXNvdXJjZSksICh2b2lkKiopJnRlbXBSZXNvdXJj
ZTExKTsKKworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEVSUigiRmFpbGVkIHRvIG9wZW4gdGhlIHN3YXAgY2hhaW4gcGJ1ZmZlciBzaGFyZSBoYW5k
bGU6ICUwOGxYIiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJlbGVhc2UoKTsKKyAgICAgICAgICAg
IHJldHVybiBFR0xfQkFEX1BBUkFNRVRFUjsKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdCA9
IHRlbXBSZXNvdXJjZTExLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRDNEMTFUZXh0dXJlMkQp
LCAodm9pZCoqKSZtT2Zmc2NyZWVuVGV4dHVyZSk7CisgICAgICAgIHRlbXBSZXNvdXJjZTExLT5S
ZWxlYXNlKCk7CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAg
ICAgICAgICBFUlIoIkZhaWxlZCB0byBxdWVyeSB0ZXh0dXJlMmQgaW50ZXJmYWNlIGluIHBidWZm
ZXIgc2hhcmUgaGFuZGxlOiAlMDhsWCIsIHJlc3VsdCk7CisgICAgICAgICAgICByZWxlYXNlKCk7
CisgICAgICAgICAgICByZXR1cm4gRUdMX0JBRF9QQVJBTUVURVI7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBWYWxpZGF0ZSBvZmZzY3JlZW4gdGV4dHVyZSBwYXJhbWV0ZXJzCisgICAgICAgIEQz
RDExX1RFWFRVUkUyRF9ERVNDIG9mZnNjcmVlblRleHR1cmVEZXNjID0gezB9OworICAgICAgICBt
T2Zmc2NyZWVuVGV4dHVyZS0+R2V0RGVzYygmb2Zmc2NyZWVuVGV4dHVyZURlc2MpOworCisgICAg
ICAgIGlmIChvZmZzY3JlZW5UZXh0dXJlRGVzYy5XaWR0aCAhPSAoVUlOVCliYWNrYnVmZmVyV2lk
dGgKKyAgICAgICAgICAgIHx8IG9mZnNjcmVlblRleHR1cmVEZXNjLkhlaWdodCAhPSAoVUlOVCli
YWNrYnVmZmVySGVpZ2h0CisgICAgICAgICAgICB8fCBvZmZzY3JlZW5UZXh0dXJlRGVzYy5Gb3Jt
YXQgIT0gZ2xfZDNkMTE6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobUJhY2tCdWZmZXJGb3Jt
YXQpCisgICAgICAgICAgICB8fCBvZmZzY3JlZW5UZXh0dXJlRGVzYy5NaXBMZXZlbHMgIT0gMQor
ICAgICAgICAgICAgfHwgb2Zmc2NyZWVuVGV4dHVyZURlc2MuQXJyYXlTaXplICE9IDEpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEVSUigiSW52YWxpZCB0ZXh0dXJlIHBhcmFtZXRlcnMgaW4gdGhl
IHNoYXJlZCBvZmZzY3JlZW4gdGV4dHVyZSBwYnVmZmVyIik7CisgICAgICAgICAgICByZWxlYXNl
KCk7CisgICAgICAgICAgICByZXR1cm4gRUdMX0JBRF9QQVJBTUVURVI7CisgICAgICAgIH0KKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY29uc3QgYm9vbCB1c2VTaGFyZWRSZXNvdXJj
ZSA9ICFtV2luZG93ICYmIG1SZW5kZXJlci0+Z2V0U2hhcmVIYW5kbGVTdXBwb3J0KCk7CisKKyAg
ICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0Mgb2Zmc2NyZWVuVGV4dHVyZURlc2MgPSB7MH07Cisg
ICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLldpZHRoID0gYmFja2J1ZmZlcldpZHRoOworICAg
ICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5IZWlnaHQgPSBiYWNrYnVmZmVySGVpZ2h0OworICAg
ICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5Gb3JtYXQgPSBnbF9kM2QxMTo6Q29udmVydFJlbmRl
cmJ1ZmZlckZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCk7CisgICAgICAgIG9mZnNjcmVlblRleHR1
cmVEZXNjLk1pcExldmVscyA9IDE7CisgICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLkFycmF5
U2l6ZSA9IDE7CisgICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLlNhbXBsZURlc2MuQ291bnQg
PSAxOworICAgICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAw
OworICAgICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFV
TFQ7CisgICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLkJpbmRGbGFncyA9IEQzRDExX0JJTkRf
UkVOREVSX1RBUkdFVCB8IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFOworICAgICAgICBvZmZz
Y3JlZW5UZXh0dXJlRGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7CisgICAgICAgIG9mZnNjcmVlblRl
eHR1cmVEZXNjLk1pc2NGbGFncyA9IHVzZVNoYXJlZFJlc291cmNlID8gRDNEMTFfUkVTT1VSQ0Vf
TUlTQ19TSEFSRUQgOiAwOworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVh
dGVUZXh0dXJlMkQoJm9mZnNjcmVlblRleHR1cmVEZXNjLCBOVUxMLCAmbU9mZnNjcmVlblRleHR1
cmUpOworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAg
ICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG9mZnNjcmVlbiB0ZXh0dXJlOiAlMDhsWCIsIHJlc3Vs
dCk7CisgICAgICAgICAgICByZWxlYXNlKCk7CisKKyAgICAgICAgICAgIGlmIChkM2QxMTo6aXNE
ZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gRUdMX0NPTlRFWFRfTE9TVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRUdMX0JBRF9BTExPQzsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobU9m
ZnNjcmVlblRleHR1cmUsICJPZmZzY3JlZW4gdGV4dHVyZSIpOworCisgICAgICAgIC8vIEVHTF9B
TkdMRV9zdXJmYWNlX2QzZF90ZXh0dXJlXzJkX3NoYXJlX2hhbmRsZSByZXF1aXJlcyB0aGF0IHdl
IHN0b3JlIGEgc2hhcmUgaGFuZGxlIGZvciB0aGUgY2xpZW50CisgICAgICAgIGlmICh1c2VTaGFy
ZWRSZXNvdXJjZSkKKyAgICAgICAgeworICAgICAgICAgICAgSURYR0lSZXNvdXJjZSAqb2Zmc2Ny
ZWVuVGV4dHVyZVJlc291cmNlID0gTlVMTDsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1PZmZzY3Jl
ZW5UZXh0dXJlLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRFhHSVJlc291cmNlKSwgKHZvaWQq
Kikmb2Zmc2NyZWVuVGV4dHVyZVJlc291cmNlKTsKKworICAgICAgICAgICAgLy8gRmFsbCBiYWNr
IHRvIG5vIHNoYXJlIGhhbmRsZSBvbiBmYWlsdXJlCisgICAgICAgICAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgcXVl
cnkgb2Zmc2NyZWVuIHRleHR1cmUgcmVzb3VyY2U6ICUwOGxYIiwgcmVzdWx0KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBvZmZzY3JlZW5UZXh0dXJlUmVzb3VyY2UtPkdldFNoYXJlZEhhbmRsZSgmbVNoYXJl
SGFuZGxlKTsKKyAgICAgICAgICAgICAgICBvZmZzY3JlZW5UZXh0dXJlUmVzb3VyY2UtPlJlbGVh
c2UoKTsKKworICAgICAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1TaGFyZUhhbmRsZSA9IE5VTEw7CisgICAgICAg
ICAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGdldCBvZmZzY3JlZW4gdGV4dHVyZSBzaGFyZWQg
aGFuZGxlOiAlMDhsWCIsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgICAgICAKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0VmlldyhtT2Zmc2NyZWVuVGV4dHVyZSwgTlVMTCwgJm1PZmZz
Y3JlZW5SVFZpZXcpOworCisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICBkM2Qx
MTo6U2V0RGVidWdOYW1lKG1PZmZzY3JlZW5SVFZpZXcsICJPZmZzY3JlZW4gcmVuZGVyIHRhcmdl
dCIpOworCisgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcobU9m
ZnNjcmVlblRleHR1cmUsIE5VTEwsICZtT2Zmc2NyZWVuU1JWaWV3KTsKKyAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOworICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobU9mZnNjcmVlblNSVmll
dywgIk9mZnNjcmVlbiBzaGFkZXIgcmVzb3VyY2UiKTsKKworICAgIGlmIChtRGVwdGhCdWZmZXJG
b3JtYXQgIT0gR0xfTk9ORSkKKyAgICB7CisgICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIGRl
cHRoU3RlbmNpbERlc2MgPSB7MH07CisgICAgICAgIGRlcHRoU3RlbmNpbERlc2MuV2lkdGggPSBi
YWNrYnVmZmVyV2lkdGg7CisgICAgICAgIGRlcHRoU3RlbmNpbERlc2MuSGVpZ2h0ID0gYmFja2J1
ZmZlckhlaWdodDsKKyAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5Gb3JtYXQgPSBnbF9kM2QxMTo6
Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtRGVwdGhCdWZmZXJGb3JtYXQpOworICAgICAgICBk
ZXB0aFN0ZW5jaWxEZXNjLk1pcExldmVscyA9IDE7CisgICAgICAgIGRlcHRoU3RlbmNpbERlc2Mu
QXJyYXlTaXplID0gMTsKKyAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5TYW1wbGVEZXNjLkNvdW50
ID0gMTsKKyAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOwor
ICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKKyAg
ICAgICAgZGVwdGhTdGVuY2lsRGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX0RFUFRIX1NURU5D
SUw7CisgICAgICAgIGRlcHRoU3RlbmNpbERlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOworICAgICAg
ICBkZXB0aFN0ZW5jaWxEZXNjLk1pc2NGbGFncyA9IDA7CisKKyAgICAgICAgcmVzdWx0ID0gZGV2
aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRlcHRoU3RlbmNpbERlc2MsIE5VTEwsICZtRGVwdGhTdGVu
Y2lsVGV4dHVyZSk7CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAg
ICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGRlcHRoc3RlbmNpbCBzdXJmYWNlIGZvciBu
ZXcgc3dhcCBjaGFpbjogMHglMDhYIiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJlbGVhc2UoKTsK
KworICAgICAgICAgICAgaWYgKGQzZDExOjppc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBFR0xfQ09OVEVYVF9MT1NUOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBFR0xfQkFEX0FMTE9DOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobURlcHRoU3RlbmNpbFRleHR1cmUsICJEZXB0aCBzdGVu
Y2lsIHRleHR1cmUiKTsKKworICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURlcHRoU3Rl
bmNpbFZpZXcobURlcHRoU3RlbmNpbFRleHR1cmUsIE5VTEwsICZtRGVwdGhTdGVuY2lsRFNWaWV3
KTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgZDNkMTE6OlNl
dERlYnVnTmFtZShtRGVwdGhTdGVuY2lsRFNWaWV3LCAiRGVwdGggc3RlbmNpbCB2aWV3Iik7Cisg
ICAgfQorCisgICAgbVdpZHRoID0gYmFja2J1ZmZlcldpZHRoOworICAgIG1IZWlnaHQgPSBiYWNr
YnVmZmVySGVpZ2h0OworCisgICAgaWYgKHByZXZpb3VzT2Zmc2NyZWVuVGV4dHVyZSAhPSBOVUxM
KQorICAgIHsKKyAgICAgICAgRDNEMTFfQk9YIHNvdXJjZUJveCA9IHswfTsKKyAgICAgICAgc291
cmNlQm94LmxlZnQgPSAwOworICAgICAgICBzb3VyY2VCb3gucmlnaHQgPSBzdGQ6Om1pbihwcmV2
aW91c1dpZHRoLCBtV2lkdGgpOworICAgICAgICBzb3VyY2VCb3gudG9wID0gc3RkOjptYXgocHJl
dmlvdXNIZWlnaHQgLSBtSGVpZ2h0LCAwKTsKKyAgICAgICAgc291cmNlQm94LmJvdHRvbSA9IHBy
ZXZpb3VzSGVpZ2h0OworICAgICAgICBzb3VyY2VCb3guZnJvbnQgPSAwOworICAgICAgICBzb3Vy
Y2VCb3guYmFjayA9IDE7CisKKyAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqZGV2aWNlQ29u
dGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworICAgICAgICBjb25zdCBpbnQg
eW9mZnNldCA9IHN0ZDo6bWF4KG1IZWlnaHQgLSBwcmV2aW91c0hlaWdodCwgMCk7CisgICAgICAg
IGRldmljZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihtT2Zmc2NyZWVuVGV4dHVyZSwg
MCwgMCwgeW9mZnNldCwgMCwgcHJldmlvdXNPZmZzY3JlZW5UZXh0dXJlLCAwLCAmc291cmNlQm94
KTsKKworICAgICAgICBwcmV2aW91c09mZnNjcmVlblRleHR1cmUtPlJlbGVhc2UoKTsKKworICAg
ICAgICBpZiAobVN3YXBDaGFpbikKKyAgICAgICAgeworICAgICAgICAgICAgc3dhcFJlY3QoMCwg
MCwgbVdpZHRoLCBtSGVpZ2h0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBFR0xf
U1VDQ0VTUzsKK30KKworRUdMaW50IFN3YXBDaGFpbjExOjpyZXNpemUoRUdMaW50IGJhY2tidWZm
ZXJXaWR0aCwgRUdMaW50IGJhY2tidWZmZXJIZWlnaHQpCit7CisgICAgSUQzRDExRGV2aWNlICpk
ZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgaWYgKGRldmljZSA9PSBOVUxM
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEVHTF9CQURfQUNDRVNTOworICAgIH0KKworICAgIC8v
IEVHTCBhbGxvd3MgY3JlYXRpbmcgYSBzdXJmYWNlIHdpdGggMHgwIGRpbWVuc2lvbiwgaG93ZXZl
ciwgRFhHSSBkb2VzIG5vdCBsaWtlIDB4MCBzd2FwY2hhaW5zCisgICAgaWYgKGJhY2tidWZmZXJX
aWR0aCA8IDEgfHwgYmFja2J1ZmZlckhlaWdodCA8IDEpCisgICAgeworICAgICAgICByZXR1cm4g
RUdMX1NVQ0NFU1M7CisgICAgfQorCisgICAgLy8gQ2FuIG9ubHkgY2FsbCByZXNpemUgaWYgd2Ug
aGF2ZSBhbHJlYWR5IGNyZWF0ZWQgb3VyIHN3YXAgYnVmZmVyIGFuZCByZXNvdXJjZXMKKyAgICBB
U1NFUlQobVN3YXBDaGFpbiAmJiBtQmFja0J1ZmZlclRleHR1cmUgJiYgbUJhY2tCdWZmZXJSVFZp
ZXcpOworCisgICAgU2FmZVJlbGVhc2UobUJhY2tCdWZmZXJUZXh0dXJlKTsKKyAgICBTYWZlUmVs
ZWFzZShtQmFja0J1ZmZlclJUVmlldyk7CisKKyAgICAvLyBSZXNpemUgc3dhcCBjaGFpbgorICAg
IERYR0lfRk9STUFUIGJhY2tidWZmZXJEWEdJRm9ybWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRSZW5k
ZXJidWZmZXJGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQpOworICAgIEhSRVNVTFQgcmVzdWx0ID0g
bVN3YXBDaGFpbi0+UmVzaXplQnVmZmVycygyLCBiYWNrYnVmZmVyV2lkdGgsIGJhY2tidWZmZXJI
ZWlnaHQsIGJhY2tidWZmZXJEWEdJRm9ybWF0LCAwKTsKKworICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKKyAgICB7CisgICAgICAgIEVSUigiRXJyb3IgcmVzaXppbmcgc3dhcCBjaGFpbiBidWZmZXJz
OiAweCUwOFgiLCByZXN1bHQpOworICAgICAgICByZWxlYXNlKCk7CisKKyAgICAgICAgaWYgKGQz
ZDExOjppc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gRUdMX0NPTlRFWFRfTE9TVDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBFR0xfQkFEX0FMTE9DOworICAgICAgICB9CisgICAgfQor
CisgICAgcmVzdWx0ID0gbVN3YXBDaGFpbi0+R2V0QnVmZmVyKDAsIF9fdXVpZG9mKElEM0QxMVRl
eHR1cmUyRCksIChMUFZPSUQqKSZtQmFja0J1ZmZlclRleHR1cmUpOworICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7CisgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgIHsKKyAgICAg
ICAgZDNkMTE6OlNldERlYnVnTmFtZShtQmFja0J1ZmZlclRleHR1cmUsICJCYWNrIGJ1ZmZlciB0
ZXh0dXJlIik7CisgICAgfQorCisgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJn
ZXRWaWV3KG1CYWNrQnVmZmVyVGV4dHVyZSwgTlVMTCwgJm1CYWNrQnVmZmVyUlRWaWV3KTsKKyAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkK
KyAgICB7CisgICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUJhY2tCdWZmZXJSVFZpZXcsICJC
YWNrIGJ1ZmZlciByZW5kZXIgdGFyZ2V0Iik7CisgICAgfQorCisgICAgcmV0dXJuIHJlc2V0T2Zm
c2NyZWVuVGV4dHVyZShiYWNrYnVmZmVyV2lkdGgsIGJhY2tidWZmZXJIZWlnaHQpOworfQorCitF
R0xpbnQgU3dhcENoYWluMTE6OnJlc2V0KGludCBiYWNrYnVmZmVyV2lkdGgsIGludCBiYWNrYnVm
ZmVySGVpZ2h0LCBFR0xpbnQgc3dhcEludGVydmFsKQoreworICAgIElEM0QxMURldmljZSAqZGV2
aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgIGlmIChkZXZpY2UgPT0gTlVMTCkK
KyAgICB7CisgICAgICAgIHJldHVybiBFR0xfQkFEX0FDQ0VTUzsKKyAgICB9CisKKyAgICAvLyBS
ZWxlYXNlIHNwZWNpZmljIHJlc291cmNlcyB0byBmcmVlIHVwIG1lbW9yeSBmb3IgdGhlIG5ldyBy
ZW5kZXIgdGFyZ2V0LCB3aGlsZSB0aGUKKyAgICAvLyBvbGQgcmVuZGVyIHRhcmdldCBzdGlsbCBl
eGlzdHMgZm9yIHRoZSBwdXJwb3NlIG9mIHByZXNlcnZpbmcgaXRzIGNvbnRlbnRzLgorICAgIFNh
ZmVSZWxlYXNlKG1Td2FwQ2hhaW4pOworICAgIFNhZmVSZWxlYXNlKG1CYWNrQnVmZmVyVGV4dHVy
ZSk7CisgICAgU2FmZVJlbGVhc2UobUJhY2tCdWZmZXJSVFZpZXcpOworCisgICAgbVN3YXBJbnRl
cnZhbCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oc3dhcEludGVydmFsKTsKKyAgICBpZiAo
bVN3YXBJbnRlcnZhbCA+IDQpCisgICAgeworICAgICAgICAvLyBJRFhHSVN3YXBDaGFpbjo6UHJl
c2VudCBkb2N1bWVudGF0aW9uIHN0YXRlcyB0aGF0IHZhbGlkIHN5bmMgaW50ZXJ2YWxzIGFyZSBp
biB0aGUgWzAsNF0gcmFuZ2UKKyAgICAgICAgcmV0dXJuIEVHTF9CQURfUEFSQU1FVEVSOworICAg
IH0KKworICAgIC8vIEVHTCBhbGxvd3MgY3JlYXRpbmcgYSBzdXJmYWNlIHdpdGggMHgwIGRpbWVu
c2lvbiwgaG93ZXZlciwgRFhHSSBkb2VzIG5vdCBsaWtlIDB4MCBzd2FwY2hhaW5zCisgICAgaWYg
KGJhY2tidWZmZXJXaWR0aCA8IDEgfHwgYmFja2J1ZmZlckhlaWdodCA8IDEpCisgICAgeworICAg
ICAgICByZWxlYXNlT2Zmc2NyZWVuVGV4dHVyZSgpOworICAgICAgICByZXR1cm4gRUdMX1NVQ0NF
U1M7CisgICAgfQorCisgICAgaWYgKG1XaW5kb3cpCisgICAgeworICAgICAgICBJRFhHSUZhY3Rv
cnkgKmZhY3RvcnkgPSBtUmVuZGVyZXItPmdldER4Z2lGYWN0b3J5KCk7CisKKyAgICAgICAgRFhH
SV9TV0FQX0NIQUlOX0RFU0Mgc3dhcENoYWluRGVzYyA9IHswfTsKKyAgICAgICAgc3dhcENoYWlu
RGVzYy5CdWZmZXJDb3VudCA9IDI7CisgICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyRGVzYy5G
b3JtYXQgPSBnbF9kM2QxMTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtQmFja0J1ZmZlckZv
cm1hdCk7CisgICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyRGVzYy5XaWR0aCA9IGJhY2tidWZm
ZXJXaWR0aDsKKyAgICAgICAgc3dhcENoYWluRGVzYy5CdWZmZXJEZXNjLkhlaWdodCA9IGJhY2ti
dWZmZXJIZWlnaHQ7CisgICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyRGVzYy5TY2FsaW5nID0g
RFhHSV9NT0RFX1NDQUxJTkdfVU5TUEVDSUZJRUQ7CisgICAgICAgIHN3YXBDaGFpbkRlc2MuQnVm
ZmVyRGVzYy5TY2FubGluZU9yZGVyaW5nID0gRFhHSV9NT0RFX1NDQU5MSU5FX09SREVSX1VOU1BF
Q0lGSUVEOworICAgICAgICBzd2FwQ2hhaW5EZXNjLkJ1ZmZlckRlc2MuUmVmcmVzaFJhdGUuTnVt
ZXJhdG9yID0gMDsKKyAgICAgICAgc3dhcENoYWluRGVzYy5CdWZmZXJEZXNjLlJlZnJlc2hSYXRl
LkRlbm9taW5hdG9yID0gMTsKKyAgICAgICAgc3dhcENoYWluRGVzYy5CdWZmZXJVc2FnZSA9IERY
R0lfVVNBR0VfUkVOREVSX1RBUkdFVF9PVVRQVVQ7CisgICAgICAgIHN3YXBDaGFpbkRlc2MuRmxh
Z3MgPSAwOworICAgICAgICBzd2FwQ2hhaW5EZXNjLk91dHB1dFdpbmRvdyA9IG1XaW5kb3c7Cisg
ICAgICAgIHN3YXBDaGFpbkRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAgIHN3YXBD
aGFpbkRlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKKyAgICAgICAgc3dhcENoYWluRGVzYy5X
aW5kb3dlZCA9IFRSVUU7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBmYWN0b3J5LT5DcmVh
dGVTd2FwQ2hhaW4oZGV2aWNlLCAmc3dhcENoYWluRGVzYywgJm1Td2FwQ2hhaW4pOworCisgICAg
ICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJDb3Vs
ZCBub3QgY3JlYXRlIGFkZGl0aW9uYWwgc3dhcCBjaGFpbnMgb3Igb2Zmc2NyZWVuIHN1cmZhY2Vz
OiAlMDhsWCIsIHJlc3VsdCk7CisgICAgICAgICAgICByZWxlYXNlKCk7CisKKyAgICAgICAgICAg
IGlmIChkM2QxMTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gRUdMX0NPTlRFWFRfTE9TVDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRUdM
X0JBRF9BTExPQzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdCA9
IG1Td2FwQ2hhaW4tPkdldEJ1ZmZlcigwLCBfX3V1aWRvZihJRDNEMTFUZXh0dXJlMkQpLCAoTFBW
T0lEKikmbUJhY2tCdWZmZXJUZXh0dXJlKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1
bHQpKTsKKyAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQmFja0J1ZmZlclRleHR1cmUsICJC
YWNrIGJ1ZmZlciB0ZXh0dXJlIik7CisKKyAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVS
ZW5kZXJUYXJnZXRWaWV3KG1CYWNrQnVmZmVyVGV4dHVyZSwgTlVMTCwgJm1CYWNrQnVmZmVyUlRW
aWV3KTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgZDNkMTE6
OlNldERlYnVnTmFtZShtQmFja0J1ZmZlclJUVmlldywgIkJhY2sgYnVmZmVyIHJlbmRlciB0YXJn
ZXQiKTsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBhcmUgcmVzaXppbmcgdGhlIHN3YXAgY2hhaW4s
IHdlIGRvbid0IHdpc2ggdG8gcmVjcmVhdGUgYWxsIHRoZSBzdGF0aWMgcmVzb3VyY2VzCisgICAg
aWYgKCFtUGFzc1Rocm91Z2hSZXNvdXJjZXNJbml0KQorICAgIHsKKyAgICAgICAgbVBhc3NUaHJv
dWdoUmVzb3VyY2VzSW5pdCA9IHRydWU7CisgICAgICAgIGluaXRQYXNzVGhyb3VnaFJlc291cmNl
cygpOworICAgIH0KKworICAgIHJldHVybiByZXNldE9mZnNjcmVlblRleHR1cmUoYmFja2J1ZmZl
cldpZHRoLCBiYWNrYnVmZmVySGVpZ2h0KTsKK30KKwordm9pZCBTd2FwQ2hhaW4xMTo6aW5pdFBh
c3NUaHJvdWdoUmVzb3VyY2VzKCkKK3sKKyAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5k
ZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICBBU1NFUlQoZGV2aWNlICE9IE5VTEwpOworCisgICAg
Ly8gTWFrZSBzdXJlIG91ciByZXNvdXJjZXMgYXJlIGFsbCBub3QgYWxsb2NhdGVkLCB3aGVuIHdl
IGNyZWF0ZQorICAgIEFTU0VSVChtUXVhZFZCID09IE5VTEwgJiYgbVBhc3NUaHJvdWdoU2FtcGxl
ciA9PSBOVUxMKTsKKyAgICBBU1NFUlQobVBhc3NUaHJvdWdoSUwgPT0gTlVMTCAmJiBtUGFzc1Ro
cm91Z2hWUyA9PSBOVUxMICYmIG1QYXNzVGhyb3VnaFBTID09IE5VTEwpOworCisgICAgRDNEMTFf
QlVGRkVSX0RFU0MgdmJEZXNjOworICAgIHZiRGVzYy5CeXRlV2lkdGggPSBzaXplb2YoZDNkMTE6
OlBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgpICogNDsKKyAgICB2YkRlc2MuVXNhZ2UgPSBEM0QxMV9V
U0FHRV9EWU5BTUlDOworICAgIHZiRGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1ZFUlRFWF9C
VUZGRVI7CisgICAgdmJEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19XUklU
RTsKKyAgICB2YkRlc2MuTWlzY0ZsYWdzID0gMDsKKyAgICB2YkRlc2MuU3RydWN0dXJlQnl0ZVN0
cmlkZSA9IDA7CisKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZ2
YkRlc2MsIE5VTEwsICZtUXVhZFZCKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwor
ICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobVF1YWRWQiwgIlN3YXAgY2hhaW4gcXVhZCB2ZXJ0ZXgg
YnVmZmVyIik7CisKKyAgICBEM0QxMV9TQU1QTEVSX0RFU0Mgc2FtcGxlckRlc2M7CisgICAgc2Ft
cGxlckRlc2MuRmlsdGVyID0gRDNEMTFfRklMVEVSX01JTl9NQUdfTUlQX1BPSU5UOworICAgIHNh
bXBsZXJEZXNjLkFkZHJlc3NVID0gRDNEMTFfVEVYVFVSRV9BRERSRVNTX0NMQU1QOworICAgIHNh
bXBsZXJEZXNjLkFkZHJlc3NWID0gRDNEMTFfVEVYVFVSRV9BRERSRVNTX0NMQU1QOworICAgIHNh
bXBsZXJEZXNjLkFkZHJlc3NXID0gRDNEMTFfVEVYVFVSRV9BRERSRVNTX0NMQU1QOworICAgIHNh
bXBsZXJEZXNjLk1pcExPREJpYXMgPSAwLjBmOworICAgIHNhbXBsZXJEZXNjLk1heEFuaXNvdHJv
cHkgPSAwOworICAgIHNhbXBsZXJEZXNjLkNvbXBhcmlzb25GdW5jID0gRDNEMTFfQ09NUEFSSVNP
Tl9ORVZFUjsKKyAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclswXSA9IDAuMGY7CisgICAgc2Ft
cGxlckRlc2MuQm9yZGVyQ29sb3JbMV0gPSAwLjBmOworICAgIHNhbXBsZXJEZXNjLkJvcmRlckNv
bG9yWzJdID0gMC4wZjsKKyAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclszXSA9IDAuMGY7Cisg
ICAgc2FtcGxlckRlc2MuTWluTE9EID0gMDsKKyAgICBzYW1wbGVyRGVzYy5NYXhMT0QgPSBEM0Qx
MV9GTE9BVDMyX01BWDsKKworICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2FtcGxlclN0YXRl
KCZzYW1wbGVyRGVzYywgJm1QYXNzVGhyb3VnaFNhbXBsZXIpOworICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7CisgICAgZDNkMTE6OlNldERlYnVnTmFtZShtUGFzc1Rocm91Z2hTYW1wbGVy
LCAiU3dhcCBjaGFpbiBwYXNzIHRocm91Z2ggc2FtcGxlciIpOworCisgICAgRDNEMTFfSU5QVVRf
RUxFTUVOVF9ERVNDIHF1YWRMYXlvdXRbXSA9CisgICAgeworICAgICAgICB7ICJQT1NJVElPTiIs
IDAsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgMCwgMCwgRDNEMTFfSU5QVVRfUEVSX1ZFUlRF
WF9EQVRBLCAwIH0sCisgICAgICAgIHsgIlRFWENPT1JEIiwgMCwgRFhHSV9GT1JNQVRfUjMyRzMy
X0ZMT0FULCAwLCA4LCBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAgfSwKKyAgICB9Owor
CisgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVJbnB1dExheW91dChxdWFkTGF5b3V0LCAyLCBn
X1ZTX1Bhc3N0aHJvdWdoLCBzaXplb2YoZ19WU19QYXNzdGhyb3VnaCksICZtUGFzc1Rocm91Z2hJ
TCk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICBkM2QxMTo6U2V0RGVidWdO
YW1lKG1QYXNzVGhyb3VnaElMLCAiU3dhcCBjaGFpbiBwYXNzIHRocm91Z2ggbGF5b3V0Iik7CisK
KyAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVZlcnRleFNoYWRlcihnX1ZTX1Bhc3N0aHJvdWdo
LCBzaXplb2YoZ19WU19QYXNzdGhyb3VnaCksIE5VTEwsICZtUGFzc1Rocm91Z2hWUyk7CisgICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1QYXNz
VGhyb3VnaFZTLCAiU3dhcCBjaGFpbiBwYXNzIHRocm91Z2ggdmVydGV4IHNoYWRlciIpOworCisg
ICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihnX1BTX1Bhc3N0aHJvdWdoUkdC
QSwgc2l6ZW9mKGdfUFNfUGFzc3Rocm91Z2hSR0JBKSwgTlVMTCwgJm1QYXNzVGhyb3VnaFBTKTsK
KyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgIGQzZDExOjpTZXREZWJ1Z05hbWUo
bVBhc3NUaHJvdWdoUFMsICJTd2FwIGNoYWluIHBhc3MgdGhyb3VnaCBwaXhlbCBzaGFkZXIiKTsK
K30KKworLy8gcGFyYW1ldGVycyBzaG91bGQgYmUgdmFsaWRhdGVkL2NsYW1wZWQgYnkgY2FsbGVy
CitFR0xpbnQgU3dhcENoYWluMTE6OnN3YXBSZWN0KEVHTGludCB4LCBFR0xpbnQgeSwgRUdMaW50
IHdpZHRoLCBFR0xpbnQgaGVpZ2h0KQoreworICAgIGlmICghbVN3YXBDaGFpbikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBFR0xfU1VDQ0VTUzsKKyAgICB9CisKKyAgICBJRDNEMTFEZXZpY2UgKmRl
dmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgSUQzRDExRGV2aWNlQ29udGV4dCAq
ZGV2aWNlQ29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworCisgICAgLy8g
U2V0IHZlcnRpY2VzCisgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNl
OworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlQ29udGV4dC0+TWFwKG1RdWFkVkIsIDAsIEQz
RDExX01BUF9XUklURV9ESVNDQVJELCAwLCAmbWFwcGVkUmVzb3VyY2UpOworICAgIGlmIChGQUlM
RUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIHJldHVybiBFR0xfQkFEX0FDQ0VTUzsKKyAgICB9
CisKKyAgICBkM2QxMTo6UG9zaXRpb25UZXhDb29yZFZlcnRleCAqdmVydGljZXMgPSBzdGF0aWNf
Y2FzdDxkM2QxMTo6UG9zaXRpb25UZXhDb29yZFZlcnRleCo+KG1hcHBlZFJlc291cmNlLnBEYXRh
KTsKKworICAgIC8vIENyZWF0ZSBhIHF1YWQgaW4gaG9tb2dlbmVvdXMgY29vcmRpbmF0ZXMKKyAg
ICBmbG9hdCB4MSA9ICh4IC8gZmxvYXQobVdpZHRoKSkgKiAyLjBmIC0gMS4wZjsKKyAgICBmbG9h
dCB5MSA9ICh5IC8gZmxvYXQobUhlaWdodCkpICogMi4wZiAtIDEuMGY7CisgICAgZmxvYXQgeDIg
PSAoKHggKyB3aWR0aCkgLyBmbG9hdChtV2lkdGgpKSAqIDIuMGYgLSAxLjBmOworICAgIGZsb2F0
IHkyID0gKCh5ICsgaGVpZ2h0KSAvIGZsb2F0KG1IZWlnaHQpKSAqIDIuMGYgLSAxLjBmOworCisg
ICAgZmxvYXQgdTEgPSB4IC8gZmxvYXQobVdpZHRoKTsKKyAgICBmbG9hdCB2MSA9IHkgLyBmbG9h
dChtSGVpZ2h0KTsKKyAgICBmbG9hdCB1MiA9ICh4ICsgd2lkdGgpIC8gZmxvYXQobVdpZHRoKTsK
KyAgICBmbG9hdCB2MiA9ICh5ICsgaGVpZ2h0KSAvIGZsb2F0KG1IZWlnaHQpOworCisgICAgZDNk
MTE6OlNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgoJnZlcnRpY2VzWzBdLCB4MSwgeTEsIHUxLCB2
MSk7CisgICAgZDNkMTE6OlNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgoJnZlcnRpY2VzWzFdLCB4
MSwgeTIsIHUxLCB2Mik7CisgICAgZDNkMTE6OlNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgoJnZl
cnRpY2VzWzJdLCB4MiwgeTEsIHUyLCB2MSk7CisgICAgZDNkMTE6OlNldFBvc2l0aW9uVGV4Q29v
cmRWZXJ0ZXgoJnZlcnRpY2VzWzNdLCB4MiwgeTIsIHUyLCB2Mik7CisKKyAgICBkZXZpY2VDb250
ZXh0LT5Vbm1hcChtUXVhZFZCLCAwKTsKKworICAgIHN0YXRpYyBVSU5UIHN0cmlkZSA9IHNpemVv
ZihkM2QxMTo6UG9zaXRpb25UZXhDb29yZFZlcnRleCk7CisgICAgc3RhdGljIFVJTlQgc3RhcnRJ
ZHggPSAwOworICAgIGRldmljZUNvbnRleHQtPklBU2V0VmVydGV4QnVmZmVycygwLCAxLCAmbVF1
YWRWQiwgJnN0cmlkZSwgJnN0YXJ0SWR4KTsKKworICAgIC8vIEFwcGx5IHN0YXRlCisgICAgZGV2
aWNlQ29udGV4dC0+T01TZXREZXB0aFN0ZW5jaWxTdGF0ZShOVUxMLCAweEZGRkZGRkZGKTsKKwor
ICAgIHN0YXRpYyBjb25zdCBmbG9hdCBibGVuZEZhY3Rvcls0XSA9IHsgMS4wZiwgMS4wZiwgMS4w
ZiwgMS4wZiB9OworICAgIGRldmljZUNvbnRleHQtPk9NU2V0QmxlbmRTdGF0ZShOVUxMLCBibGVu
ZEZhY3RvciwgMHhGRkZGRkZGKTsKKworICAgIGRldmljZUNvbnRleHQtPlJTU2V0U3RhdGUoTlVM
TCk7CisKKyAgICAvLyBBcHBseSBzaGFkZXJzCisgICAgZGV2aWNlQ29udGV4dC0+SUFTZXRJbnB1
dExheW91dChtUGFzc1Rocm91Z2hJTCk7CisgICAgZGV2aWNlQ29udGV4dC0+SUFTZXRQcmltaXRp
dmVUb3BvbG9neShEM0RfUFJJTUlUSVZFX1RPUE9MT0dZX1RSSUFOR0xFU1RSSVApOworICAgIGRl
dmljZUNvbnRleHQtPlZTU2V0U2hhZGVyKG1QYXNzVGhyb3VnaFZTLCBOVUxMLCAwKTsKKyAgICBk
ZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlcihtUGFzc1Rocm91Z2hQUywgTlVMTCwgMCk7CisgICAg
ZGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIoTlVMTCwgTlVMTCwgMCk7CisKKyAgICAvLyBBcHBs
eSByZW5kZXIgdGFyZ2V0cworICAgIG1SZW5kZXJlci0+c2V0T25lVGltZVJlbmRlclRhcmdldCht
QmFja0J1ZmZlclJUVmlldyk7CisKKyAgICAvLyBTZXQgdGhlIHZpZXdwb3J0CisgICAgRDNEMTFf
VklFV1BPUlQgdmlld3BvcnQ7CisgICAgdmlld3BvcnQuVG9wTGVmdFggPSAwOworICAgIHZpZXdw
b3J0LlRvcExlZnRZID0gMDsKKyAgICB2aWV3cG9ydC5XaWR0aCA9IG1XaWR0aDsKKyAgICB2aWV3
cG9ydC5IZWlnaHQgPSBtSGVpZ2h0OworICAgIHZpZXdwb3J0Lk1pbkRlcHRoID0gMC4wZjsKKyAg
ICB2aWV3cG9ydC5NYXhEZXB0aCA9IDEuMGY7CisgICAgZGV2aWNlQ29udGV4dC0+UlNTZXRWaWV3
cG9ydHMoMSwgJnZpZXdwb3J0KTsKKworICAgIC8vIEFwcGx5IHRleHR1cmVzCisgICAgZGV2aWNl
Q29udGV4dC0+UFNTZXRTaGFkZXJSZXNvdXJjZXMoMCwgMSwgJm1PZmZzY3JlZW5TUlZpZXcpOwor
ICAgIGRldmljZUNvbnRleHQtPlBTU2V0U2FtcGxlcnMoMCwgMSwgJm1QYXNzVGhyb3VnaFNhbXBs
ZXIpOworCisgICAgLy8gRHJhdworICAgIGRldmljZUNvbnRleHQtPkRyYXcoNCwgMCk7CisKKyNp
ZiBBTkdMRV9GT1JDRV9WU1lOQ19PRkYKKyAgICByZXN1bHQgPSBtU3dhcENoYWluLT5QcmVzZW50
KDAsIDApOworI2Vsc2UKKyAgICByZXN1bHQgPSBtU3dhcENoYWluLT5QcmVzZW50KG1Td2FwSW50
ZXJ2YWwsIDApOworI2VuZGlmCisKKyAgICBpZiAocmVzdWx0ID09IERYR0lfRVJST1JfREVWSUNF
X1JFTU9WRUQpCisgICAgeworICAgICAgICBIUkVTVUxUIHJlbW92ZWRSZWFzb24gPSBkZXZpY2Ut
PkdldERldmljZVJlbW92ZWRSZWFzb24oKTsKKyAgICAgICAgRVJSKCJQcmVzZW50IGZhaWxlZDog
dGhlIEQzRDExIGRldmljZSB3YXMgcmVtb3ZlZDogMHglMDhYIiwgcmVtb3ZlZFJlYXNvbik7Cisg
ICAgICAgIHJldHVybiBFR0xfQ09OVEVYVF9MT1NUOworICAgIH0KKyAgICBlbHNlIGlmIChyZXN1
bHQgPT0gRFhHSV9FUlJPUl9ERVZJQ0VfUkVTRVQpCisgICAgeworICAgICAgICBFUlIoIlByZXNl
bnQgZmFpbGVkOiB0aGUgRDNEMTEgZGV2aWNlIHdhcyByZXNldCBmcm9tIGEgYmFkIGNvbW1hbmQu
Iik7CisgICAgICAgIHJldHVybiBFR0xfQ09OVEVYVF9MT1NUOworICAgIH0KKyAgICBlbHNlIGlm
IChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEVSUigiUHJlc2VudCBmYWlsZWQgd2l0
aCBlcnJvciBjb2RlIDB4JTA4WCIsIHJlc3VsdCk7CisgICAgfQorCisgICAgLy8gVW5iaW5kCisg
ICAgc3RhdGljIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqY29uc3QgbnVsbFNSViA9IE5VTEw7
CisgICAgZGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXJSZXNvdXJjZXMoMCwgMSwgJm51bGxTUlYp
OworCisgICAgbVJlbmRlcmVyLT51bmFwcGx5UmVuZGVyVGFyZ2V0cygpOworICAgIG1SZW5kZXJl
ci0+bWFya0FsbFN0YXRlRGlydHkoKTsKKworICAgIHJldHVybiBFR0xfU1VDQ0VTUzsKK30KKwor
Ly8gSW5jcmVtZW50cyByZWZjb3VudCBvbiB0ZXh0dXJlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFz
ZSgpIHRoZSByZXR1cm5lZCB0ZXh0dXJlCitJRDNEMTFUZXh0dXJlMkQgKlN3YXBDaGFpbjExOjpn
ZXRPZmZzY3JlZW5UZXh0dXJlKCkKK3sKKyAgICBpZiAobU9mZnNjcmVlblRleHR1cmUpCisgICAg
eworICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+QWRkUmVmKCk7CisgICAgfQorCisgICAgcmV0
dXJuIG1PZmZzY3JlZW5UZXh0dXJlOworfQorCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHZp
ZXcuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHZpZXcKK0lEM0QxMVJl
bmRlclRhcmdldFZpZXcgKlN3YXBDaGFpbjExOjpnZXRSZW5kZXJUYXJnZXQoKQoreworICAgIGlm
IChtT2Zmc2NyZWVuUlRWaWV3KQorICAgIHsKKyAgICAgICAgbU9mZnNjcmVlblJUVmlldy0+QWRk
UmVmKCk7CisgICAgfQorCisgICAgcmV0dXJuIG1PZmZzY3JlZW5SVFZpZXc7Cit9CisKKy8vIElu
Y3JlbWVudHMgcmVmY291bnQgb24gdmlldy4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUg
cmV0dXJuZWQgdmlldworSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpTd2FwQ2hhaW4xMTo6Z2V0
UmVuZGVyVGFyZ2V0U2hhZGVyUmVzb3VyY2UoKQoreworICAgIGlmIChtT2Zmc2NyZWVuU1JWaWV3
KQorICAgIHsKKyAgICAgICAgbU9mZnNjcmVlblNSVmlldy0+QWRkUmVmKCk7CisgICAgfQorCisg
ICAgcmV0dXJuIG1PZmZzY3JlZW5TUlZpZXc7Cit9CisKKy8vIEluY3JlbWVudHMgcmVmY291bnQg
b24gdmlldy4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgdmlldworSUQz
RDExRGVwdGhTdGVuY2lsVmlldyAqU3dhcENoYWluMTE6OmdldERlcHRoU3RlbmNpbCgpCit7Cisg
ICAgaWYgKG1EZXB0aFN0ZW5jaWxEU1ZpZXcpCisgICAgeworICAgICAgICBtRGVwdGhTdGVuY2ls
RFNWaWV3LT5BZGRSZWYoKTsKKyAgICB9CisKKyAgICByZXR1cm4gbURlcHRoU3RlbmNpbERTVmll
dzsKK30KKworSUQzRDExVGV4dHVyZTJEICpTd2FwQ2hhaW4xMTo6Z2V0RGVwdGhTdGVuY2lsVGV4
dHVyZSgpCit7CisgICAgaWYgKG1EZXB0aFN0ZW5jaWxUZXh0dXJlKQorICAgIHsKKyAgICAgICAg
bURlcHRoU3RlbmNpbFRleHR1cmUtPkFkZFJlZigpOworICAgIH0KKworICAgIHJldHVybiBtRGVw
dGhTdGVuY2lsVGV4dHVyZTsKK30KKworU3dhcENoYWluMTEgKlN3YXBDaGFpbjExOjptYWtlU3dh
cENoYWluMTEoU3dhcENoYWluICpzd2FwQ2hhaW4pCit7CisgICAgQVNTRVJUKEhBU19EWU5BTUlD
X1RZUEUocng6OlN3YXBDaGFpbjExKiwgc3dhcENoYWluKSk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PHJ4OjpTd2FwQ2hhaW4xMSo+KHN3YXBDaGFpbik7Cit9CisKK3ZvaWQgU3dhcENoYWluMTE6
OnJlY3JlYXRlKCkKK3sKKyAgICAvLyBwb3NzaWJseSBzaG91bGQgdXNlIHRoaXMgbWV0aG9kIGlu
c3RlYWQgb2YgcmVzZXQKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9Td2FwQ2hhaW4xMS5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9Td2FwQ2hhaW4xMS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjgwMDEwNDYwMmUzNWIwYmNiYTExMDM5YTE2ZWJmYzYxMTE2MWVmNjEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL1N3YXBDaGFpbjExLmgKQEAgLTAsMCArMSw3OCBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKy8vIFN3YXBDaGFpbjExLmg6IERlZmluZXMgYSBiYWNrLWVuZCBzcGVjaWZpYyBjbGFzcyBm
b3IgdGhlIEQzRDExIHN3YXAgY2hhaW4uCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX1NX
QVBDSEFJTjExX0hfCisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9TV0FQQ0hBSU4xMV9IXwor
CisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvU3dhcENoYWluLmgiCisKK25hbWVzcGFjZSByeAoreworY2xhc3MgUmVuZGVyZXIxMTsK
KworY2xhc3MgU3dhcENoYWluMTEgOiBwdWJsaWMgU3dhcENoYWluCit7CisgIHB1YmxpYzoKKyAg
ICBTd2FwQ2hhaW4xMShSZW5kZXJlcjExICpyZW5kZXJlciwgSFdORCB3aW5kb3csIEhBTkRMRSBz
aGFyZUhhbmRsZSwKKyAgICAgICAgICAgICAgICBHTGVudW0gYmFja0J1ZmZlckZvcm1hdCwgR0xl
bnVtIGRlcHRoQnVmZmVyRm9ybWF0KTsKKyAgICB2aXJ0dWFsIH5Td2FwQ2hhaW4xMSgpOworCisg
ICAgRUdMaW50IHJlc2l6ZShFR0xpbnQgYmFja2J1ZmZlcldpZHRoLCBFR0xpbnQgYmFja2J1ZmZl
ckhlaWdodCk7CisgICAgdmlydHVhbCBFR0xpbnQgcmVzZXQoRUdMaW50IGJhY2tidWZmZXJXaWR0
aCwgRUdMaW50IGJhY2tidWZmZXJIZWlnaHQsIEVHTGludCBzd2FwSW50ZXJ2YWwpOworICAgIHZp
cnR1YWwgRUdMaW50IHN3YXBSZWN0KEVHTGludCB4LCBFR0xpbnQgeSwgRUdMaW50IHdpZHRoLCBF
R0xpbnQgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjcmVhdGUoKTsKKworICAgIHZpcnR1
YWwgSUQzRDExVGV4dHVyZTJEICpnZXRPZmZzY3JlZW5UZXh0dXJlKCk7CisgICAgdmlydHVhbCBJ
RDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpnZXRSZW5kZXJUYXJnZXQoKTsKKyAgICB2aXJ0dWFsIElE
M0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0UmVuZGVyVGFyZ2V0U2hhZGVyUmVzb3VyY2UoKTsK
KworICAgIHZpcnR1YWwgSUQzRDExVGV4dHVyZTJEICpnZXREZXB0aFN0ZW5jaWxUZXh0dXJlKCk7
CisgICAgdmlydHVhbCBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpnZXREZXB0aFN0ZW5jaWwoKTsK
KworICAgIEVHTGludCBnZXRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1XaWR0aDsgfQorICAgIEVH
TGludCBnZXRIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtSGVpZ2h0OyB9CisKKyAgICBzdGF0aWMg
U3dhcENoYWluMTEgKm1ha2VTd2FwQ2hhaW4xMShTd2FwQ2hhaW4gKnN3YXBDaGFpbik7CisKKyAg
cHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU3dhcENoYWluMTEpOworCisg
ICAgdm9pZCByZWxlYXNlKCk7CisgICAgdm9pZCBpbml0UGFzc1Rocm91Z2hSZXNvdXJjZXMoKTsK
KyAgICB2b2lkIHJlbGVhc2VPZmZzY3JlZW5UZXh0dXJlKCk7CisgICAgRUdMaW50IHJlc2V0T2Zm
c2NyZWVuVGV4dHVyZShpbnQgYmFja2J1ZmZlcldpZHRoLCBpbnQgYmFja2J1ZmZlckhlaWdodCk7
CisKKyAgICBSZW5kZXJlcjExICptUmVuZGVyZXI7CisgICAgRUdMaW50IG1IZWlnaHQ7CisgICAg
RUdMaW50IG1XaWR0aDsKKyAgICBib29sIG1BcHBDcmVhdGVkU2hhcmVIYW5kbGU7CisgICAgdW5z
aWduZWQgaW50IG1Td2FwSW50ZXJ2YWw7CisgICAgYm9vbCBtUGFzc1Rocm91Z2hSZXNvdXJjZXNJ
bml0OworCisgICAgSURYR0lTd2FwQ2hhaW4gKm1Td2FwQ2hhaW47CisKKyAgICBJRDNEMTFUZXh0
dXJlMkQgKm1CYWNrQnVmZmVyVGV4dHVyZTsKKyAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpt
QmFja0J1ZmZlclJUVmlldzsKKworICAgIElEM0QxMVRleHR1cmUyRCAqbU9mZnNjcmVlblRleHR1
cmU7CisgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqbU9mZnNjcmVlblJUVmlldzsKKyAgICBJ
RDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKm1PZmZzY3JlZW5TUlZpZXc7CisKKyAgICBJRDNEMTFU
ZXh0dXJlMkQgKm1EZXB0aFN0ZW5jaWxUZXh0dXJlOworICAgIElEM0QxMURlcHRoU3RlbmNpbFZp
ZXcgKm1EZXB0aFN0ZW5jaWxEU1ZpZXc7CisKKyAgICBJRDNEMTFCdWZmZXIgKm1RdWFkVkI7Cisg
ICAgSUQzRDExU2FtcGxlclN0YXRlICptUGFzc1Rocm91Z2hTYW1wbGVyOworICAgIElEM0QxMUlu
cHV0TGF5b3V0ICptUGFzc1Rocm91Z2hJTDsKKyAgICBJRDNEMTFWZXJ0ZXhTaGFkZXIgKm1QYXNz
VGhyb3VnaFZTOworICAgIElEM0QxMVBpeGVsU2hhZGVyICptUGFzc1Rocm91Z2hQUzsKK307CisK
K30KKyNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfU1dBUENIQUlOMTFfSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
VGV4dHVyZVN0b3JhZ2UxMS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL1RleHR1cmVTdG9yYWdlMTEuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVmNmVh
MjEyZDVhMDYwMTc5Nzk4YThjZDBmODAyNzRhOTVjNmI0OWUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1RleHR1
cmVTdG9yYWdlMTEuY3BwCkBAIC0wLDAgKzEsNjY3IEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQu
aCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisvLyBUZXh0dXJlU3RvcmFnZTExLmNwcDogSW1wbGVtZW50cyB0
aGUgYWJzdHJhY3Qgcng6OlRleHR1cmVTdG9yYWdlMTEgY2xhc3MgYW5kIGl0cyBjb25jcmV0ZSBk
ZXJpdmVkCisvLyBjbGFzc2VzIFRleHR1cmVTdG9yYWdlMTFfMkQgYW5kIFRleHR1cmVTdG9yYWdl
MTFfQ3ViZSwgd2hpY2ggYWN0IGFzIHRoZSBpbnRlcmZhY2UgdG8gdGhlIEQzRDExIHRleHR1cmUu
CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVGV4dHVyZVN0b3JhZ2UxMS5o
IgorCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFyZ2V0MTEuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dhcENoYWluMTEuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oIgorCisjaW5jbHVkZSAi
bGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisKK25h
bWVzcGFjZSByeAoreworCitUZXh0dXJlU3RvcmFnZTExOjpUZXh0dXJlU3RvcmFnZTExKFJlbmRl
cmVyICpyZW5kZXJlciwgVUlOVCBiaW5kRmxhZ3MpCisgICAgOiBtQmluZEZsYWdzKGJpbmRGbGFn
cyksCisgICAgICBtTG9kT2Zmc2V0KDApLAorICAgICAgbU1pcExldmVscygwKSwKKyAgICAgIG1U
ZXh0dXJlKE5VTEwpLAorICAgICAgbVRleHR1cmVGb3JtYXQoRFhHSV9GT1JNQVRfVU5LTk9XTiks
CisgICAgICBtU2hhZGVyUmVzb3VyY2VGb3JtYXQoRFhHSV9GT1JNQVRfVU5LTk9XTiksCisgICAg
ICBtUmVuZGVyVGFyZ2V0Rm9ybWF0KERYR0lfRk9STUFUX1VOS05PV04pLAorICAgICAgbURlcHRo
U3RlbmNpbEZvcm1hdChEWEdJX0ZPUk1BVF9VTktOT1dOKSwKKyAgICAgIG1TUlYoTlVMTCksCisg
ICAgICBtVGV4dHVyZVdpZHRoKDApLAorICAgICAgbVRleHR1cmVIZWlnaHQoMCkKK3sKKyAgICBt
UmVuZGVyZXIgPSBSZW5kZXJlcjExOjptYWtlUmVuZGVyZXIxMShyZW5kZXJlcik7Cit9CisKK1Rl
eHR1cmVTdG9yYWdlMTE6On5UZXh0dXJlU3RvcmFnZTExKCkKK3sKK30KKworVGV4dHVyZVN0b3Jh
Z2UxMSAqVGV4dHVyZVN0b3JhZ2UxMTo6bWFrZVRleHR1cmVTdG9yYWdlMTEoVGV4dHVyZVN0b3Jh
Z2UgKnN0b3JhZ2UpCit7CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoVGV4dHVyZVN0b3Jh
Z2UxMSosIHN0b3JhZ2UpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZVN0b3JhZ2Ux
MSo+KHN0b3JhZ2UpOworfQorCitEV09SRCBUZXh0dXJlU3RvcmFnZTExOjpHZXRUZXh0dXJlQmlu
ZEZsYWdzKERYR0lfRk9STUFUIGZvcm1hdCwgR0xlbnVtIGdsdXNhZ2UsIGJvb2wgZm9yY2VSZW5k
ZXJhYmxlKQoreworICAgIFVJTlQgYmluZEZsYWdzID0gRDNEMTFfQklORF9TSEFERVJfUkVTT1VS
Q0U7CisgICAgCisgICAgaWYgKGQzZDExOjpJc0RlcHRoU3RlbmNpbEZvcm1hdChmb3JtYXQpKQor
ICAgIHsKKyAgICAgICAgYmluZEZsYWdzIHw9IEQzRDExX0JJTkRfREVQVEhfU1RFTkNJTDsKKyAg
ICB9CisgICAgZWxzZSBpZihmb3JjZVJlbmRlcmFibGUgfHwgKFRleHR1cmVTdG9yYWdlMTE6Oklz
VGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoZm9ybWF0KSAmJiAoZ2x1c2FnZSA9PSBHTF9GUkFNRUJV
RkZFUl9BVFRBQ0hNRU5UX0FOR0xFKSkpCisgICAgeworICAgICAgICBiaW5kRmxhZ3MgfD0gRDNE
MTFfQklORF9SRU5ERVJfVEFSR0VUOworICAgIH0KKyAgICByZXR1cm4gYmluZEZsYWdzOworfQor
Citib29sIFRleHR1cmVTdG9yYWdlMTE6OklzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoRFhHSV9G
T1JNQVQgZm9ybWF0KQoreworICAgIHN3aXRjaChmb3JtYXQpCisgICAgeworICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQThfVU5P
Uk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDoKKyAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X0ZMT0FUOgorICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9COEc4UjhBOF9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVU5PUk06CisgICAg
ICBjYXNlIERYR0lfRk9STUFUX1I4RzhfVU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX1Ix
Nl9GTE9BVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X0ZMT0FUOgorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNOgorICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk06IAorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5P
Uk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVDogLy8gbm90IHJlbmRl
cmFibGUgb24gYWxsIGRldmljZXMKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgZGVmYXVs
dDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworVUlOVCBUZXh0dXJlU3RvcmFnZTExOjpnZXRCaW5kRmxhZ3MoKSBjb25zdAoreworICAg
IHJldHVybiBtQmluZEZsYWdzOworfQorCitJRDNEMTFUZXh0dXJlMkQgKlRleHR1cmVTdG9yYWdl
MTE6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmU7Cit9CisK
K2ludCBUZXh0dXJlU3RvcmFnZTExOjpnZXRMb2RPZmZzZXQoKSBjb25zdAoreworICAgIHJldHVy
biBtTG9kT2Zmc2V0OworfQorCitib29sIFRleHR1cmVTdG9yYWdlMTE6OmlzUmVuZGVyVGFyZ2V0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1CaW5kRmxhZ3MgJiAoRDNEMTFfQklORF9SRU5ERVJf
VEFSR0VUIHwgRDNEMTFfQklORF9ERVBUSF9TVEVOQ0lMKSkgIT0gMDsKK30KKyAgICAKK2Jvb2wg
VGV4dHVyZVN0b3JhZ2UxMTo6aXNNYW5hZ2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2ludCBUZXh0dXJlU3RvcmFnZTExOjpsZXZlbENvdW50KCkKK3sKKyAgICBpbnQgbGV2
ZWxzID0gMDsKKyAgICBpZiAoZ2V0QmFzZVRleHR1cmUoKSkKKyAgICB7CisgICAgICAgIGxldmVs
cyA9IG1NaXBMZXZlbHMgLSBnZXRMb2RPZmZzZXQoKTsKKyAgICB9CisgICAgcmV0dXJuIGxldmVs
czsKK30KKworVUlOVCBUZXh0dXJlU3RvcmFnZTExOjpnZXRTdWJyZXNvdXJjZUluZGV4KGludCBs
ZXZlbCwgaW50IGZhY2VJbmRleCkKK3sKKyAgICBVSU5UIGluZGV4ID0gMDsKKyAgICBpZiAoZ2V0
QmFzZVRleHR1cmUoKSkKKyAgICB7CisgICAgICAgIGluZGV4ID0gRDNEMTFDYWxjU3VicmVzb3Vy
Y2UobGV2ZWwsIGZhY2VJbmRleCwgbU1pcExldmVscyk7CisgICAgfQorICAgIHJldHVybiBpbmRl
eDsKK30KKworYm9vbCBUZXh0dXJlU3RvcmFnZTExOjp1cGRhdGVTdWJyZXNvdXJjZUxldmVsKElE
M0QxMVRleHR1cmUyRCAqc3JjVGV4dHVyZSwgdW5zaWduZWQgaW50IHNvdXJjZVN1YnJlc291cmNl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZXZl
bCwgaW50IGZhY2UsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpCit7CisgICAgaWYgKHNyY1RleHR1cmUpCisgICAgeworICAgICAgICAvLyBSb3VuZCB1
cCB0aGUgd2lkdGggYW5kIGhlaWdodCB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiBkaW1lbnNp
b24gYWxpZ25tZW50CisgICAgICAgIHVuc2lnbmVkIGludCBkaW1lbnNpb25BbGlnbm1lbnQgPSBk
M2QxMTo6R2V0VGV4dHVyZUZvcm1hdERpbWVuc2lvbkFsaWdubWVudChtVGV4dHVyZUZvcm1hdCk7
CisgICAgICAgIHdpZHRoID0gd2lkdGggKyBkaW1lbnNpb25BbGlnbm1lbnQgLSAxIC0gKHdpZHRo
IC0gMSkgJSBkaW1lbnNpb25BbGlnbm1lbnQ7CisgICAgICAgIGhlaWdodCA9IGhlaWdodCArIGRp
bWVuc2lvbkFsaWdubWVudCAtIDEgLSAoaGVpZ2h0IC0gMSkgJSBkaW1lbnNpb25BbGlnbm1lbnQ7
CisKKyAgICAgICAgRDNEMTFfQk9YIHNyY0JveDsKKyAgICAgICAgc3JjQm94LmxlZnQgPSB4b2Zm
c2V0OworICAgICAgICBzcmNCb3gudG9wID0geW9mZnNldDsKKyAgICAgICAgc3JjQm94LnJpZ2h0
ID0geG9mZnNldCArIHdpZHRoOworICAgICAgICBzcmNCb3guYm90dG9tID0geW9mZnNldCArIGhl
aWdodDsKKyAgICAgICAgc3JjQm94LmZyb250ID0gMDsKKyAgICAgICAgc3JjQm94LmJhY2sgPSAx
OworCisgICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQgPSBtUmVuZGVyZXItPmdl
dERldmljZUNvbnRleHQoKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChnZXRCYXNlVGV4dHVy
ZSgpKTsKKyAgICAgICAgY29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKGdldEJhc2VUZXh0
dXJlKCksIGdldFN1YnJlc291cmNlSW5kZXgobGV2ZWwgKyBtTG9kT2Zmc2V0LCBmYWNlKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIDAs
IHNyY1RleHR1cmUsIHNvdXJjZVN1YnJlc291cmNlLCAmc3JjQm94KTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFRleHR1cmVTdG9y
YWdlMTE6OmdlbmVyYXRlTWlwbWFwTGF5ZXIoUmVuZGVyVGFyZ2V0MTEgKnNvdXJjZSwgUmVuZGVy
VGFyZ2V0MTEgKmRlc3QpCit7CisgICAgaWYgKHNvdXJjZSAmJiBkZXN0KQorICAgIHsKKyAgICAg
ICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzb3VyY2VTUlYgPSBzb3VyY2UtPmdldFNoYWRl
clJlc291cmNlVmlldygpOworICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpkZXN0UlRW
ID0gZGVzdC0+Z2V0UmVuZGVyVGFyZ2V0VmlldygpOworCisgICAgICAgIGlmIChzb3VyY2VTUlYg
JiYgZGVzdFJUVikKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlJlY3RhbmdsZSBzb3VyY2VB
cmVhOworICAgICAgICAgICAgc291cmNlQXJlYS54ID0gMDsKKyAgICAgICAgICAgIHNvdXJjZUFy
ZWEueSA9IDA7CisgICAgICAgICAgICBzb3VyY2VBcmVhLndpZHRoID0gc291cmNlLT5nZXRXaWR0
aCgpOworICAgICAgICAgICAgc291cmNlQXJlYS5oZWlnaHQgPSBzb3VyY2UtPmdldEhlaWdodCgp
OworCisgICAgICAgICAgICBnbDo6UmVjdGFuZ2xlIGRlc3RBcmVhOworICAgICAgICAgICAgZGVz
dEFyZWEueCA9IDA7CisgICAgICAgICAgICBkZXN0QXJlYS55ID0gMDsKKyAgICAgICAgICAgIGRl
c3RBcmVhLndpZHRoID0gZGVzdC0+Z2V0V2lkdGgoKTsKKyAgICAgICAgICAgIGRlc3RBcmVhLmhl
aWdodCA9IGRlc3QtPmdldEhlaWdodCgpOworCisgICAgICAgICAgICBtUmVuZGVyZXItPmNvcHlU
ZXh0dXJlKHNvdXJjZVNSViwgc291cmNlQXJlYSwgc291cmNlLT5nZXRXaWR0aCgpLCBzb3VyY2Ut
PmdldEhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0UlRW
LCBkZXN0QXJlYSwgZGVzdC0+Z2V0V2lkdGgoKSwgZGVzdC0+Z2V0SGVpZ2h0KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHQkEpOworICAgICAgICB9CisgICAgfQor
fQorCitUZXh0dXJlU3RvcmFnZTExXzJEOjpUZXh0dXJlU3RvcmFnZTExXzJEKFJlbmRlcmVyICpy
ZW5kZXJlciwgU3dhcENoYWluMTEgKnN3YXBjaGFpbikKKyAgICA6IFRleHR1cmVTdG9yYWdlMTEo
cmVuZGVyZXIsIEQzRDExX0JJTkRfUkVOREVSX1RBUkdFVCB8IEQzRDExX0JJTkRfU0hBREVSX1JF
U09VUkNFKQoreworICAgIG1UZXh0dXJlID0gc3dhcGNoYWluLT5nZXRPZmZzY3JlZW5UZXh0dXJl
KCk7CisgICAgbVNSViA9IHN3YXBjaGFpbi0+Z2V0UmVuZGVyVGFyZ2V0U2hhZGVyUmVzb3VyY2Uo
KTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVOVEFUSU9O
X01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQorICAgIHsKKyAgICAgICAgbVJlbmRlclRhcmdldFtp
XSA9IE5VTEw7CisgICAgfQorCisgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4RGVzYzsKKyAg
ICBtVGV4dHVyZS0+R2V0RGVzYygmdGV4RGVzYyk7CisgICAgbU1pcExldmVscyA9IHRleERlc2Mu
TWlwTGV2ZWxzOworICAgIG1UZXh0dXJlRm9ybWF0ID0gdGV4RGVzYy5Gb3JtYXQ7CisgICAgbVRl
eHR1cmVXaWR0aCA9IHRleERlc2MuV2lkdGg7CisgICAgbVRleHR1cmVIZWlnaHQgPSB0ZXhEZXNj
LkhlaWdodDsKKworICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsK
KyAgICBtU1JWLT5HZXREZXNjKCZzcnZEZXNjKTsKKyAgICBtU2hhZGVyUmVzb3VyY2VGb3JtYXQg
PSBzcnZEZXNjLkZvcm1hdDsKKworICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcqIG9mZnNjcmVl
blJUViA9IHN3YXBjaGFpbi0+Z2V0UmVuZGVyVGFyZ2V0KCk7CisgICAgRDNEMTFfUkVOREVSX1RB
UkdFVF9WSUVXX0RFU0MgcnR2RGVzYzsKKyAgICBvZmZzY3JlZW5SVFYtPkdldERlc2MoJnJ0dkRl
c2MpOworICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBydHZEZXNjLkZvcm1hdDsKKyAgICBvZmZz
Y3JlZW5SVFYtPlJlbGVhc2UoKTsKKworICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBEWEdJX0ZP
Uk1BVF9VTktOT1dOOworfQorCitUZXh0dXJlU3RvcmFnZTExXzJEOjpUZXh0dXJlU3RvcmFnZTEx
XzJEKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCkKKyAgICA6IFRleHR1cmVTdG9yYWdlMTEocmVuZGVyZXIsIEdldFRleHR1cmVC
aW5kRmxhZ3MoZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlRm9ybWF0KGludGVybmFsZm9ybWF0KSwg
dXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSkpCit7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCisgICAgewor
ICAgICAgICBtUmVuZGVyVGFyZ2V0W2ldID0gTlVMTDsKKyAgICB9CisKKyAgICBEWEdJX0ZPUk1B
VCBjb252ZXJ0ZWRGb3JtYXQgPSBnbF9kM2QxMTo6Q29udmVydFRleHR1cmVGb3JtYXQoaW50ZXJu
YWxmb3JtYXQpOworICAgIGlmIChkM2QxMTo6SXNEZXB0aFN0ZW5jaWxGb3JtYXQoY29udmVydGVk
Rm9ybWF0KSkKKyAgICB7CisgICAgICAgIG1UZXh0dXJlRm9ybWF0ID0gZDNkMTE6OkdldERlcHRo
VGV4dHVyZUZvcm1hdChjb252ZXJ0ZWRGb3JtYXQpOworICAgICAgICBtU2hhZGVyUmVzb3VyY2VG
b3JtYXQgPSBkM2QxMTo6R2V0RGVwdGhTaGFkZXJSZXNvdXJjZUZvcm1hdChjb252ZXJ0ZWRGb3Jt
YXQpOworICAgICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0ID0gY29udmVydGVkRm9ybWF0OworICAg
ICAgICBtUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5LTk9XTjsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgbVRleHR1cmVGb3JtYXQgPSBjb252ZXJ0ZWRGb3JtYXQ7
CisgICAgICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKKyAgICAg
ICAgbURlcHRoU3RlbmNpbEZvcm1hdCA9IERYR0lfRk9STUFUX1VOS05PV047CisgICAgICAgIG1S
ZW5kZXJUYXJnZXRGb3JtYXQgPSBjb252ZXJ0ZWRGb3JtYXQ7CisgICAgfQorCisgICAgLy8gaWYg
dGhlIHdpZHRoIG9yIGhlaWdodCBpcyBub3QgcG9zaXRpdmUgdGhpcyBzaG91bGQgYmUgdHJlYXRl
ZCBhcyBhbiBpbmNvbXBsZXRlIHRleHR1cmUKKyAgICAvLyB3ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5
IHNraXBwaW5nIHRoZSBkM2QgdGV4dHVyZSBjcmVhdGlvbgorICAgIGlmICh3aWR0aCA+IDAgJiYg
aGVpZ2h0ID4gMCkKKyAgICB7CisgICAgICAgIC8vIGFkanVzdCBzaXplIGlmIG5lZWRlZCBmb3Ig
Y29tcHJlc3NlZCB0ZXh0dXJlcworICAgICAgICBnbDo6TWFrZVZhbGlkU2l6ZShmYWxzZSwgZ2w6
OklzQ29tcHJlc3NlZChpbnRlcm5hbGZvcm1hdCksICZ3aWR0aCwgJmhlaWdodCwgJm1Mb2RPZmZz
ZXQpOworCisgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZp
Y2UoKTsKKworICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXNjOworICAgICAgICBkZXNj
LldpZHRoID0gd2lkdGg7ICAgICAgLy8gQ29tcHJlc3NlZCB0ZXh0dXJlIHNpemUgY29uc3RyYWlu
dHM/CisgICAgICAgIGRlc2MuSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICBkZXNjLk1pcExldmVs
cyA9IChsZXZlbHMgPiAwKSA/IGxldmVscyArIG1Mb2RPZmZzZXQgOiAwOworICAgICAgICBkZXNj
LkFycmF5U2l6ZSA9IDE7CisgICAgICAgIGRlc2MuRm9ybWF0ID0gbVRleHR1cmVGb3JtYXQ7Cisg
ICAgICAgIGRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAgIGRlc2MuU2FtcGxlRGVz
Yy5RdWFsaXR5ID0gMDsKKyAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7
CisgICAgICAgIGRlc2MuQmluZEZsYWdzID0gZ2V0QmluZEZsYWdzKCk7CisgICAgICAgIGRlc2Mu
Q1BVQWNjZXNzRmxhZ3MgPSAwOworICAgICAgICBkZXNjLk1pc2NGbGFncyA9IDA7CisKKyAgICAg
ICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwg
Jm1UZXh0dXJlKTsKKworICAgICAgICAvLyB0aGlzIGNhbiBoYXBwZW4gZnJvbSB3aW5kb3dzIFRE
UgorICAgICAgICBpZiAoZDNkMTE6OmlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1SZW5kZXJlci0+bm90aWZ5RGV2aWNlTG9zdCgpOworICAgICAgICAg
ICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0
ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgRVJSKCJDcmVhdGluZyBpbWFnZSBmYWls
ZWQuIik7CisgICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtVGV4dHVyZS0+R2V0RGVz
YygmZGVzYyk7CisgICAgICAgICAgICBtTWlwTGV2ZWxzID0gZGVzYy5NaXBMZXZlbHM7CisgICAg
ICAgICAgICBtVGV4dHVyZVdpZHRoID0gZGVzYy5XaWR0aDsKKyAgICAgICAgICAgIG1UZXh0dXJl
SGVpZ2h0ID0gZGVzYy5IZWlnaHQ7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1RleHR1cmVTdG9y
YWdlMTFfMkQ6On5UZXh0dXJlU3RvcmFnZTExXzJEKCkKK3sKKyAgICBpZiAobVRleHR1cmUpCisg
ICAgeworICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOworICAgICAgICBtVGV4dHVyZSA9IE5V
TEw7CisgICAgfQorCisgICAgaWYgKG1TUlYpCisgICAgeworICAgICAgICBtU1JWLT5SZWxlYXNl
KCk7CisgICAgICAgIG1TUlYgPSBOVUxMOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQor
ICAgIHsKKyAgICAgICAgZGVsZXRlIG1SZW5kZXJUYXJnZXRbaV07CisgICAgICAgIG1SZW5kZXJU
YXJnZXRbaV0gPSBOVUxMOworICAgIH0KK30KKworVGV4dHVyZVN0b3JhZ2UxMV8yRCAqVGV4dHVy
ZVN0b3JhZ2UxMV8yRDo6bWFrZVRleHR1cmVTdG9yYWdlMTFfMkQoVGV4dHVyZVN0b3JhZ2UgKnN0
b3JhZ2UpCit7CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoVGV4dHVyZVN0b3JhZ2UxMV8y
RCosIHN0b3JhZ2UpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZVN0b3JhZ2UxMV8y
RCo+KHN0b3JhZ2UpOworfQorCitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlMTFfMkQ6Omdl
dFJlbmRlclRhcmdldChpbnQgbGV2ZWwpCit7CisgICAgaWYgKGxldmVsID49IDAgJiYgbGV2ZWwg
PCBzdGF0aWNfY2FzdDxpbnQ+KG1NaXBMZXZlbHMpKQorICAgIHsKKyAgICAgICAgaWYgKCFtUmVu
ZGVyVGFyZ2V0W2xldmVsXSkKKyAgICAgICAgeworICAgICAgICAgICAgSUQzRDExRGV2aWNlICpk
ZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworICAgICAgICAgICAgSFJFU1VMVCByZXN1
bHQ7CisKKyAgICAgICAgICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVz
YzsKKyAgICAgICAgICAgIHNydkRlc2MuRm9ybWF0ID0gbVNoYWRlclJlc291cmNlRm9ybWF0Owor
ICAgICAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfU1JWX0RJTUVOU0lPTl9U
RVhUVVJFMkQ7CisgICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyRC5Nb3N0RGV0YWlsZWRNaXAg
PSBsZXZlbDsKKyAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJELk1pcExldmVscyA9IDE7CisK
KyAgICAgICAgICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2OworICAgICAgICAgICAg
cmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcobVRleHR1cmUsICZzcnZE
ZXNjLCAmc3J2KTsKKworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICAgICAg
aWYgKG1SZW5kZXJUYXJnZXRGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZE
ZXNjOworICAgICAgICAgICAgICAgIHJ0dkRlc2MuRm9ybWF0ID0gbVJlbmRlclRhcmdldEZvcm1h
dDsKKyAgICAgICAgICAgICAgICBydHZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9SVFZfRElN
RU5TSU9OX1RFWFRVUkUyRDsKKyAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyRC5NaXBT
bGljZSA9IGxldmVsOworCisgICAgICAgICAgICAgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAq
cnR2OworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0
VmlldyhtVGV4dHVyZSwgJnJ0dkRlc2MsICZydHYpOworCisgICAgICAgICAgICAgICAgaWYgKHJl
c3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgc3J2LT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOworCisgICAgICAgICAgICAgICAgLy8gUmVuZGVyVGFyZ2V0MTEgZXhwZWN0cyB0byBiZSB0
aGUgb3duZXIgb2YgdGhlIHJlc291cmNlcyBpdCBpcyBnaXZlbiBidXQgVGV4dHVyZVN0b3JhZ2Ux
MQorICAgICAgICAgICAgICAgIC8vIGFsc28gbmVlZHMgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0
aGUgdGV4dHVyZS4KKyAgICAgICAgICAgICAgICBtVGV4dHVyZS0+QWRkUmVmKCk7CisKKyAgICAg
ICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2xldmVsXSA9IG5ldyBSZW5kZXJUYXJnZXQxMShtUmVu
ZGVyZXIsIHJ0diwgbVRleHR1cmUsIHNydiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVyZVdpZHRoID4+IGxl
dmVsLCAxVSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RkOjptYXgobVRleHR1cmVIZWlnaHQgPj4gbGV2ZWwsIDFVKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtRGVwdGhTdGVuY2lsRm9ybWF0ICE9IERY
R0lfRk9STUFUX1VOS05PV04pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRDNEMTFf
REVQVEhfU1RFTkNJTF9WSUVXX0RFU0MgZHN2RGVzYzsKKyAgICAgICAgICAgICAgICBkc3ZEZXNj
LkZvcm1hdCA9IG1EZXB0aFN0ZW5jaWxGb3JtYXQ7CisgICAgICAgICAgICAgICAgZHN2RGVzYy5W
aWV3RGltZW5zaW9uID0gRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMkQ7CisgICAgICAgICAg
ICAgICAgZHN2RGVzYy5UZXh0dXJlMkQuTWlwU2xpY2UgPSBsZXZlbDsKKyAgICAgICAgICAgICAg
ICBkc3ZEZXNjLkZsYWdzID0gMDsKKworICAgICAgICAgICAgICAgIElEM0QxMURlcHRoU3RlbmNp
bFZpZXcgKmRzdjsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURlcHRo
U3RlbmNpbFZpZXcobVRleHR1cmUsICZkc3ZEZXNjLCAmZHN2KTsKKworICAgICAgICAgICAgICAg
IGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHNydi0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PFJlbmRlclRhcmdldCo+KE5V
TEwpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURF
RChyZXN1bHQpKTsKKworICAgICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdldDExIGV4cGVjdHMg
dG8gYmUgdGhlIG93bmVyIG9mIHRoZSByZXNvdXJjZXMgaXQgaXMgZ2l2ZW4gYnV0IFRleHR1cmVT
dG9yYWdlMTEKKyAgICAgICAgICAgICAgICAvLyBhbHNvIG5lZWRzIHRvIGtlZXAgYSByZWZlcmVu
Y2UgdG8gdGhlIHRleHR1cmUuCisgICAgICAgICAgICAgICAgbVRleHR1cmUtPkFkZFJlZigpOwor
CisgICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldFtsZXZlbF0gPSBuZXcgUmVuZGVyVGFyZ2V0
MTEobVJlbmRlcmVyLCBkc3YsIG1UZXh0dXJlLCBzcnYsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobVRleHR1cmVXaWR0
aCA+PiBsZXZlbCwgMVUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1UZXh0dXJlSGVpZ2h0ID4+IGxldmVsLCAxVSkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gbVJlbmRlclRhcmdldFtsZXZlbF07CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKworSUQzRDExU2hhZGVyUmVzb3VyY2VW
aWV3ICpUZXh0dXJlU3RvcmFnZTExXzJEOjpnZXRTUlYoKQoreworICAgIGlmICghbVNSVikKKyAg
ICB7CisgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2Uo
KTsKKworICAgICAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7Cisg
ICAgICAgIHNydkRlc2MuRm9ybWF0ID0gbVNoYWRlclJlc291cmNlRm9ybWF0OworICAgICAgICBz
cnZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyRDsKKyAg
ICAgICAgc3J2RGVzYy5UZXh0dXJlMkQuTWlwTGV2ZWxzID0gKG1NaXBMZXZlbHMgPT0gMCA/IC0x
IDogbU1pcExldmVscyk7CisgICAgICAgIHNydkRlc2MuVGV4dHVyZTJELk1vc3REZXRhaWxlZE1p
cCA9IDA7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJl
c291cmNlVmlldyhtVGV4dHVyZSwgJnNydkRlc2MsICZtU1JWKTsKKworICAgICAgICBpZiAocmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8SUQzRDExU2hhZGVyUmVzb3VyY2VW
aWV3Kj4oTlVMTCkpOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7CisgICAgfQorCisgICAgcmV0dXJuIG1TUlY7Cit9CisKK3ZvaWQgVGV4dHVyZVN0b3JhZ2Ux
MV8yRDo6Z2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKQoreworICAgIFJlbmRlclRhcmdldDExICpz
b3VyY2UgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRlclRhcmdl
dChsZXZlbCAtIDEpKTsKKyAgICBSZW5kZXJUYXJnZXQxMSAqZGVzdCA9IFJlbmRlclRhcmdldDEx
OjptYWtlUmVuZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFyZ2V0KGxldmVsKSk7CisKKyAgICBnZW5l
cmF0ZU1pcG1hcExheWVyKHNvdXJjZSwgZGVzdCk7Cit9CisKK1RleHR1cmVTdG9yYWdlMTFfQ3Vi
ZTo6VGV4dHVyZVN0b3JhZ2UxMV9DdWJlKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywg
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxl
LCBpbnQgc2l6ZSkKKyAgICA6IFRleHR1cmVTdG9yYWdlMTEocmVuZGVyZXIsIEdldFRleHR1cmVC
aW5kRmxhZ3MoZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlRm9ybWF0KGludGVybmFsZm9ybWF0KSwg
dXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSkpCit7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCA2OyBpKyspCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8
IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGorKykKKyAgICAgICAgewor
ICAgICAgICAgICAgbVJlbmRlclRhcmdldFtpXVtqXSA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBEWEdJX0ZPUk1BVCBjb252ZXJ0ZWRGb3JtYXQgPSBnbF9kM2QxMTo6Q29udmVydFRl
eHR1cmVGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOworICAgIGlmIChkM2QxMTo6SXNEZXB0aFN0ZW5j
aWxGb3JtYXQoY29udmVydGVkRm9ybWF0KSkKKyAgICB7CisgICAgICAgIG1UZXh0dXJlRm9ybWF0
ID0gZDNkMTE6OkdldERlcHRoVGV4dHVyZUZvcm1hdChjb252ZXJ0ZWRGb3JtYXQpOworICAgICAg
ICBtU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBkM2QxMTo6R2V0RGVwdGhTaGFkZXJSZXNvdXJjZUZv
cm1hdChjb252ZXJ0ZWRGb3JtYXQpOworICAgICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0ID0gY29u
dmVydGVkRm9ybWF0OworICAgICAgICBtUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gRFhHSV9GT1JNQVRf
VU5LTk9XTjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbVRleHR1cmVGb3JtYXQg
PSBjb252ZXJ0ZWRGb3JtYXQ7CisgICAgICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IGNvbnZl
cnRlZEZvcm1hdDsKKyAgICAgICAgbURlcHRoU3RlbmNpbEZvcm1hdCA9IERYR0lfRk9STUFUX1VO
S05PV047CisgICAgICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBjb252ZXJ0ZWRGb3JtYXQ7Cisg
ICAgfQorCisgICAgLy8gaWYgdGhlIHNpemUgaXMgbm90IHBvc2l0aXZlIHRoaXMgc2hvdWxkIGJl
IHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJlCisgICAgLy8gd2UgaGFuZGxlIHRoYXQg
aGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRpb24KKyAgICBpZiAoc2l6ZSA+
IDApCisgICAgeworICAgICAgICAvLyBhZGp1c3Qgc2l6ZSBpZiBuZWVkZWQgZm9yIGNvbXByZXNz
ZWQgdGV4dHVyZXMKKyAgICAgICAgaW50IGhlaWdodCA9IHNpemU7CisgICAgICAgIGdsOjpNYWtl
VmFsaWRTaXplKGZhbHNlLCBnbDo6SXNDb21wcmVzc2VkKGludGVybmFsZm9ybWF0KSwgJnNpemUs
ICZoZWlnaHQsICZtTG9kT2Zmc2V0KTsKKworICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9
IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0Mg
ZGVzYzsKKyAgICAgICAgZGVzYy5XaWR0aCA9IHNpemU7CisgICAgICAgIGRlc2MuSGVpZ2h0ID0g
c2l6ZTsKKyAgICAgICAgZGVzYy5NaXBMZXZlbHMgPSAobGV2ZWxzID4gMCkgPyBsZXZlbHMgKyBt
TG9kT2Zmc2V0IDogMDsKKyAgICAgICAgZGVzYy5BcnJheVNpemUgPSA2OworICAgICAgICBkZXNj
LkZvcm1hdCA9IG1UZXh0dXJlRm9ybWF0OworICAgICAgICBkZXNjLlNhbXBsZURlc2MuQ291bnQg
PSAxOworICAgICAgICBkZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7CisgICAgICAgIGRlc2Mu
VXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBkZXNjLkJpbmRGbGFncyA9IGdl
dEJpbmRGbGFncygpOworICAgICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAgICAgICAg
ZGVzYy5NaXNjRmxhZ3MgPSBEM0QxMV9SRVNPVVJDRV9NSVNDX1RFWFRVUkVDVUJFOworCisgICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRlc2MsIE5VTEws
ICZtVGV4dHVyZSk7CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAg
RVJSKCJDcmVhdGluZyBpbWFnZSBmYWlsZWQuIik7CisgICAgICAgICAgICBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgICBtVGV4dHVyZS0+R2V0RGVzYygmZGVzYyk7CisgICAgICAgICAgICBtTWlwTGV2ZWxz
ID0gZGVzYy5NaXBMZXZlbHM7CisgICAgICAgICAgICBtVGV4dHVyZVdpZHRoID0gZGVzYy5XaWR0
aDsKKyAgICAgICAgICAgIG1UZXh0dXJlSGVpZ2h0ID0gZGVzYy5IZWlnaHQ7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK1RleHR1cmVTdG9yYWdlMTFfQ3ViZTo6flRleHR1cmVTdG9yYWdlMTFfQ3Vi
ZSgpCit7CisgICAgaWYgKG1UZXh0dXJlKQorICAgIHsKKyAgICAgICAgbVRleHR1cmUtPlJlbGVh
c2UoKTsKKyAgICAgICAgbVRleHR1cmUgPSBOVUxMOworICAgIH0KKworICAgIGlmIChtU1JWKQor
ICAgIHsKKyAgICAgICAgbVNSVi0+UmVsZWFzZSgpOworICAgICAgICBtU1JWID0gTlVMTDsKKyAg
ICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IDY7IGkrKykKKyAgICB7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgZ2w6OklNUExFTUVOVEFUSU9OX01B
WF9URVhUVVJFX0xFVkVMUzsgaisrKQorICAgICAgICB7CisgICAgICAgICAgICBkZWxldGUgbVJl
bmRlclRhcmdldFtpXVtqXTsKKyAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbaV1bal0gPSBOVUxM
OworICAgICAgICB9CisgICAgfQorfQorCitUZXh0dXJlU3RvcmFnZTExX0N1YmUgKlRleHR1cmVT
dG9yYWdlMTFfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlMTFfQ3ViZShUZXh0dXJlU3RvcmFnZSAq
c3RvcmFnZSkKK3sKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShUZXh0dXJlU3RvcmFnZTEx
X0N1YmUqLCBzdG9yYWdlKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmVTdG9yYWdl
MTFfQ3ViZSo+KHN0b3JhZ2UpOworfQorCitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlMTFf
Q3ViZTo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpCit7Cisg
ICAgdW5zaWduZWQgaW50IGZhY2VJZHggPSBnbDo6VGV4dHVyZUN1YmVNYXA6OmZhY2VJbmRleChm
YWNlVGFyZ2V0KTsKKyAgICBpZiAobGV2ZWwgPj0gMCAmJiBsZXZlbCA8IHN0YXRpY19jYXN0PGlu
dD4obU1pcExldmVscykpCisgICAgeworICAgICAgICBpZiAoIW1SZW5kZXJUYXJnZXRbZmFjZUlk
eF1bbGV2ZWxdKQorICAgICAgICB7CisgICAgICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9
IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdDsKKwor
ICAgICAgICAgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOworICAg
ICAgICAgICAgc3J2RGVzYy5Gb3JtYXQgPSBtU2hhZGVyUmVzb3VyY2VGb3JtYXQ7CisgICAgICAg
ICAgICBzcnZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUy
REFSUkFZOyAvLyBXaWxsIGJlIHVzZWQgd2l0aCBUZXh0dXJlMkQgc2FtcGxlciwgbm90IFRleHR1
cmVDdWJlCisgICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5Lk1vc3REZXRhaWxlZE1p
cCA9IGxldmVsOworICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBMZXZlbHMg
PSAxOworICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2Ug
PSBmYWNlSWR4OworICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5BcnJheVNpemUg
PSAxOworCisgICAgICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydjsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KG1UZXh0dXJl
LCAmc3J2RGVzYywgJnNydik7CisKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1F
TU9SWSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PFJlbmRlclRhcmdldCo+KE5VTEwpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAg
ICAgICAgIGlmIChtUmVuZGVyVGFyZ2V0Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RF
U0MgcnR2RGVzYzsKKyAgICAgICAgICAgICAgICBydHZEZXNjLkZvcm1hdCA9IG1SZW5kZXJUYXJn
ZXRGb3JtYXQ7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFf
UlRWX0RJTUVOU0lPTl9URVhUVVJFMkRBUlJBWTsKKyAgICAgICAgICAgICAgICBydHZEZXNjLlRl
eHR1cmUyREFycmF5Lk1pcFNsaWNlID0gbGV2ZWw7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5U
ZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSBmYWNlSWR4OworICAgICAgICAgICAgICAg
IHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0gMTsKKworICAgICAgICAgICAgICAg
IElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0djsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBk
ZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobVRleHR1cmUsICZydHZEZXNjLCAmcnR2KTsK
KworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHNydi0+UmVsZWFzZSgpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0
PFJlbmRlclRhcmdldCo+KE5VTEwpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICAgICAgICAgIC8vIFJlbmRl
clRhcmdldDExIGV4cGVjdHMgdG8gYmUgdGhlIG93bmVyIG9mIHRoZSByZXNvdXJjZXMgaXQgaXMg
Z2l2ZW4gYnV0IFRleHR1cmVTdG9yYWdlMTEKKyAgICAgICAgICAgICAgICAvLyBhbHNvIG5lZWRz
IHRvIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIHRleHR1cmUuCisgICAgICAgICAgICAgICAgbVRl
eHR1cmUtPkFkZFJlZigpOworCisgICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldFtmYWNlSWR4
XVtsZXZlbF0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJlbmRlcmVyLCBydHYsIG1UZXh0dXJlLCBz
cnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjptYXgobVRleHR1cmVXaWR0aCA+PiBsZXZlbCwgMVUpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZDo6bWF4KG1UZXh0dXJlSGVpZ2h0ID4+IGxldmVsLCAxVSkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobURlcHRoU3RlbmNpbEZvcm1hdCAhPSBEWEdJX0ZP
Uk1BVF9VTktOT1dOKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEQzRDExX0RFUFRI
X1NURU5DSUxfVklFV19ERVNDIGRzdkRlc2M7CisgICAgICAgICAgICAgICAgZHN2RGVzYy5Gb3Jt
YXQgPSBtUmVuZGVyVGFyZ2V0Rm9ybWF0OworICAgICAgICAgICAgICAgIGRzdkRlc2MuVmlld0Rp
bWVuc2lvbiA9IEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTJEQVJSQVk7CisgICAgICAgICAg
ICAgICAgZHN2RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBTbGljZSA9IGxldmVsOworICAgICAgICAg
ICAgICAgIGRzdkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RBcnJheVNsaWNlID0gZmFjZUlkeDsK
KyAgICAgICAgICAgICAgICBkc3ZEZXNjLlRleHR1cmUyREFycmF5LkFycmF5U2l6ZSA9IDE7CisK
KyAgICAgICAgICAgICAgICBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpkc3Y7CisgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxWaWV3KG1UZXh0dXJlLCAm
ZHN2RGVzYywgJmRzdik7CisKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZN
RU1PUlkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzcnYtPlJlbGVh
c2UoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZLCBzdGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihOVUxMKSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAg
ICAgICAgICAvLyBSZW5kZXJUYXJnZXQxMSBleHBlY3RzIHRvIGJlIHRoZSBvd25lciBvZiB0aGUg
cmVzb3VyY2VzIGl0IGlzIGdpdmVuIGJ1dCBUZXh0dXJlU3RvcmFnZTExCisgICAgICAgICAgICAg
ICAgLy8gYWxzbyBuZWVkcyB0byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0dXJlLgorICAg
ICAgICAgICAgICAgIG1UZXh0dXJlLT5BZGRSZWYoKTsKKworICAgICAgICAgICAgICAgIG1SZW5k
ZXJUYXJnZXRbZmFjZUlkeF1bbGV2ZWxdID0gbmV3IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwg
ZHN2LCBtVGV4dHVyZSwgc3J2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1UZXh0dXJlV2lkdGggPj4g
bGV2ZWwsIDFVKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVyZUhlaWdodCA+PiBsZXZlbCwg
MVUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIG1SZW5kZXJUYXJnZXRbZmFjZUlkeF1bbGV2ZWxdOworICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK0lEM0QxMVNo
YWRlclJlc291cmNlVmlldyAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXRTUlYoKQoreworICAg
IGlmICghbVNSVikKKyAgICB7CisgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRl
cmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19E
RVNDIHNydkRlc2M7CisgICAgICAgIHNydkRlc2MuRm9ybWF0ID0gbVNoYWRlclJlc291cmNlRm9y
bWF0OworICAgICAgICBzcnZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9O
X1RFWFRVUkVDVUJFOworICAgICAgICBzcnZEZXNjLlRleHR1cmVDdWJlLk1pcExldmVscyA9ICht
TWlwTGV2ZWxzID09IDAgPyAtMSA6IG1NaXBMZXZlbHMpOworICAgICAgICBzcnZEZXNjLlRleHR1
cmVDdWJlLk1vc3REZXRhaWxlZE1pcCA9IDA7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBk
ZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyhtVGV4dHVyZSwgJnNydkRlc2MsICZtU1JW
KTsKKworICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8
SUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3Kj4oTlVMTCkpOworICAgICAgICB9CisgICAgICAgIEFT
U0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgfQorCisgICAgcmV0dXJuIG1TUlY7Cit9CisK
K3ZvaWQgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZW5lcmF0ZU1pcG1hcChpbnQgZmFjZSwgaW50
IGxldmVsKQoreworICAgIFJlbmRlclRhcmdldDExICpzb3VyY2UgPSBSZW5kZXJUYXJnZXQxMTo6
bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRlclRhcmdldChHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1ggKyBmYWNlLCBsZXZlbCAtIDEpKTsKKyAgICBSZW5kZXJUYXJnZXQxMSAqZGVzdCA9
IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFyZ2V0KEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsKSk7CisKKyAgICBnZW5lcmF0
ZU1pcG1hcExheWVyKHNvdXJjZSwgZGVzdCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVGV4dHVyZVN0b3Jh
Z2UxMS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9UZXh0dXJlU3RvcmFnZTExLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2M1ZGVkMDViODg5NzY5N2QzOTM2
ZDA1MDk3ZGY0ZGU5OGI3OWJjZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVGV4dHVyZVN0b3JhZ2UxMS5oCkBA
IC0wLDAgKzEsMTIwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVGV4dHVyZVN0b3JhZ2UxMS5oOiBE
ZWZpbmVzIHRoZSBhYnN0cmFjdCByeDo6VGV4dHVyZVN0b3JhZ2UxMSBjbGFzcyBhbmQgaXRzIGNv
bmNyZXRlIGRlcml2ZWQKKy8vIGNsYXNzZXMgVGV4dHVyZVN0b3JhZ2UxMV8yRCBhbmQgVGV4dHVy
ZVN0b3JhZ2UxMV9DdWJlLCB3aGljaCBhY3QgYXMgdGhlIGludGVyZmFjZSB0byB0aGUgRDNEMTEg
dGV4dHVyZS4KKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfVEVYVFVSRVNUT1JBR0UxMV9I
XworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfVEVYVFVSRVNUT1JBR0UxMV9IXworCisjaW5j
bHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
VGV4dHVyZVN0b3JhZ2UuaCIKKworbmFtZXNwYWNlIHJ4Cit7CitjbGFzcyBSZW5kZXJUYXJnZXQ7
CitjbGFzcyBSZW5kZXJUYXJnZXQxMTsKK2NsYXNzIFJlbmRlcmVyOworY2xhc3MgUmVuZGVyZXIx
MTsKK2NsYXNzIFN3YXBDaGFpbjExOworCitjbGFzcyBUZXh0dXJlU3RvcmFnZTExIDogcHVibGlj
IFRleHR1cmVTdG9yYWdlCit7CisgIHB1YmxpYzoKKyAgICBUZXh0dXJlU3RvcmFnZTExKFJlbmRl
cmVyICpyZW5kZXJlciwgVUlOVCBiaW5kRmxhZ3MpOworICAgIHZpcnR1YWwgflRleHR1cmVTdG9y
YWdlMTEoKTsKKworICAgIHN0YXRpYyBUZXh0dXJlU3RvcmFnZTExICptYWtlVGV4dHVyZVN0b3Jh
Z2UxMShUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSk7CisKKyAgICBzdGF0aWMgRFdPUkQgR2V0VGV4
dHVyZUJpbmRGbGFncyhEWEdJX0ZPUk1BVCBkM2RmbXQsIEdMZW51bSBnbHVzYWdlLCBib29sIGZv
cmNlUmVuZGVyYWJsZSk7CisgICAgc3RhdGljIGJvb2wgSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJs
ZShEWEdJX0ZPUk1BVCBmb3JtYXQpOworCisgICAgVUlOVCBnZXRCaW5kRmxhZ3MoKSBjb25zdDsK
KworICAgIHZpcnR1YWwgSUQzRDExVGV4dHVyZTJEICpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpnZXRTUlYoKSA9IDA7CisgICAg
dmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpIHsgcmV0dXJuIGdldFJlbmRl
clRhcmdldCgwKTsgfQorICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQo
aW50IGxldmVsKSB7IHJldHVybiBOVUxMOyB9CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdl
dFJlbmRlclRhcmdldChHTGVudW0gZmFjZVRhcmdldCkgeyByZXR1cm4gZ2V0UmVuZGVyVGFyZ2V0
KGZhY2VUYXJnZXQsIDApOyB9CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRh
cmdldChHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsKSB7IHJldHVybiBOVUxMOyB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKSB7fTsKKyAgICB2aXJ0dWFs
IHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCkge307CisKKyAgICB2aXJ0
dWFsIGludCBnZXRMb2RPZmZzZXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJU
YXJnZXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNNYW5hZ2VkKCkgY29uc3Q7CisgICAg
dmlydHVhbCBpbnQgbGV2ZWxDb3VudCgpOworICAgIFVJTlQgZ2V0U3VicmVzb3VyY2VJbmRleChp
bnQgbGV2ZWwsIGludCBmYWNlVGFyZ2V0KTsKKworICAgIGJvb2wgdXBkYXRlU3VicmVzb3VyY2VM
ZXZlbChJRDNEMTFUZXh0dXJlMkQgKnRleHR1cmUsIHVuc2lnbmVkIGludCBzb3VyY2VTdWJyZXNv
dXJjZSwgaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmFj
ZVRhcmdldCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpOworCisgIHByb3RlY3RlZDoKKyAgICB2b2lkIGdlbmVyYXRlTWlwbWFwTGF5
ZXIoUmVuZGVyVGFyZ2V0MTEgKnNvdXJjZSwgUmVuZGVyVGFyZ2V0MTEgKmRlc3QpOworCisgICAg
UmVuZGVyZXIxMSAqbVJlbmRlcmVyOworICAgIGludCBtTG9kT2Zmc2V0OworICAgIHVuc2lnbmVk
IGludCBtTWlwTGV2ZWxzOworCisgICAgSUQzRDExVGV4dHVyZTJEICptVGV4dHVyZTsKKyAgICBE
WEdJX0ZPUk1BVCBtVGV4dHVyZUZvcm1hdDsKKyAgICBEWEdJX0ZPUk1BVCBtU2hhZGVyUmVzb3Vy
Y2VGb3JtYXQ7CisgICAgRFhHSV9GT1JNQVQgbVJlbmRlclRhcmdldEZvcm1hdDsKKyAgICBEWEdJ
X0ZPUk1BVCBtRGVwdGhTdGVuY2lsRm9ybWF0OworICAgIHVuc2lnbmVkIGludCBtVGV4dHVyZVdp
ZHRoOworICAgIHVuc2lnbmVkIGludCBtVGV4dHVyZUhlaWdodDsKKworICAgIElEM0QxMVNoYWRl
clJlc291cmNlVmlldyAqbVNSVjsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihUZXh0dXJlU3RvcmFnZTExKTsKKworICAgIGNvbnN0IFVJTlQgbUJpbmRGbGFnczsK
K307CisKK2NsYXNzIFRleHR1cmVTdG9yYWdlMTFfMkQgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2Ux
MQoreworICBwdWJsaWM6CisgICAgVGV4dHVyZVN0b3JhZ2UxMV8yRChSZW5kZXJlciAqcmVuZGVy
ZXIsIFN3YXBDaGFpbjExICpzd2FwY2hhaW4pOworICAgIFRleHR1cmVTdG9yYWdlMTFfMkQoUmVu
ZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51
bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0KTsKKyAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTExXzJEKCk7CisKKyAgICBzdGF0aWMg
VGV4dHVyZVN0b3JhZ2UxMV8yRCAqbWFrZVRleHR1cmVTdG9yYWdlMTFfMkQoVGV4dHVyZVN0b3Jh
Z2UgKnN0b3JhZ2UpOworCisgICAgdmlydHVhbCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmdl
dFNSVigpOworICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoaW50IGxl
dmVsKTsKKworICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpOworCisg
IHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlMTFf
MkQpOworCisgICAgUmVuZGVyVGFyZ2V0MTEgKm1SZW5kZXJUYXJnZXRbZ2w6OklNUExFTUVOVEFU
SU9OX01BWF9URVhUVVJFX0xFVkVMU107Cit9OworCitjbGFzcyBUZXh0dXJlU3RvcmFnZTExX0N1
YmUgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UxMQoreworICBwdWJsaWM6CisgICAgVGV4dHVyZVN0
b3JhZ2UxMV9DdWJlKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBpbnQgc2l6ZSk7
CisgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2UxMV9DdWJlKCk7CisKKyAgICBzdGF0aWMgVGV4
dHVyZVN0b3JhZ2UxMV9DdWJlICptYWtlVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKFRleHR1cmVTdG9y
YWdlICpzdG9yYWdlKTsKKworICAgIHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpn
ZXRTUlYoKTsKKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51
bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpOworCisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlw
bWFwKGludCBmYWNlLCBpbnQgbGV2ZWwpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlMTFfQ3ViZSk7CisKKyAgICBSZW5kZXJUYXJnZXQx
MSAqbVJlbmRlclRhcmdldFs2XVtnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxT
XTsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9URVhUVVJFU1RPUkFH
RTExX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL1ZlcnRleEJ1ZmZlcjExLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVydGV4QnVmZmVyMTEuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjZmOWI0MTgxZjEyYWNjN2M4ZTg1OGI2MDRkODMzMmYxNWNhNDY2MjEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL1ZlcnRleEJ1ZmZlcjExLmNwcApAQCAtMCwwICsxLDQ0MCBAQAorI2luY2x1ZGUgInBy
ZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVmVydGV4QnVmZmVyMTEuY3BwOiBEZWZp
bmVzIHRoZSBEM0QxMSBWZXJ0ZXhCdWZmZXIgaW1wbGVtZW50YXRpb24uCisKKyNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVydGV4QnVmZmVyMTEuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL0J1
ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKworbmFtZXNwYWNlIHJ4Cit7CisKK1Zl
cnRleEJ1ZmZlcjExOjpWZXJ0ZXhCdWZmZXIxMShyeDo6UmVuZGVyZXIxMSAqY29uc3QgcmVuZGVy
ZXIpIDogbVJlbmRlcmVyKHJlbmRlcmVyKQoreworICAgIG1CdWZmZXIgPSBOVUxMOworICAgIG1C
dWZmZXJTaXplID0gMDsKKyAgICBtRHluYW1pY1VzYWdlID0gZmFsc2U7Cit9CisKK1ZlcnRleEJ1
ZmZlcjExOjp+VmVydGV4QnVmZmVyMTEoKQoreworICAgIGlmIChtQnVmZmVyKQorICAgIHsKKyAg
ICAgICAgbUJ1ZmZlci0+UmVsZWFzZSgpOworICAgICAgICBtQnVmZmVyID0gTlVMTDsKKyAgICB9
Cit9CisKK2Jvb2wgVmVydGV4QnVmZmVyMTE6OmluaXRpYWxpemUodW5zaWduZWQgaW50IHNpemUs
IGJvb2wgZHluYW1pY1VzYWdlKQoreworICAgIGlmIChtQnVmZmVyKQorICAgIHsKKyAgICAgICAg
bUJ1ZmZlci0+UmVsZWFzZSgpOworICAgICAgICBtQnVmZmVyID0gTlVMTDsKKyAgICB9CisKKyAg
ICB1cGRhdGVTZXJpYWwoKTsKKworICAgIGlmIChzaXplID4gMCkKKyAgICB7CisgICAgICAgIElE
M0QxMURldmljZSogZHhEZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAg
IEQzRDExX0JVRkZFUl9ERVNDIGJ1ZmZlckRlc2M7CisgICAgICAgIGJ1ZmZlckRlc2MuQnl0ZVdp
ZHRoID0gc2l6ZTsKKyAgICAgICAgYnVmZmVyRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZTkFN
SUM7CisgICAgICAgIGJ1ZmZlckRlc2MuQmluZEZsYWdzID0gRDNEMTFfQklORF9WRVJURVhfQlVG
RkVSOworICAgICAgICBidWZmZXJEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VT
U19XUklURTsKKyAgICAgICAgYnVmZmVyRGVzYy5NaXNjRmxhZ3MgPSAwOworICAgICAgICBidWZm
ZXJEZXNjLlN0cnVjdHVyZUJ5dGVTdHJpZGUgPSAwOworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gZHhEZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmYnVmZmVyRGVzYywgTlVMTCwgJm1CdWZmZXIpOwor
ICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1CdWZmZXJTaXplID0gc2l6ZTsKKyAg
ICBtRHluYW1pY1VzYWdlID0gZHluYW1pY1VzYWdlOworICAgIHJldHVybiB0cnVlOworfQorCitW
ZXJ0ZXhCdWZmZXIxMSAqVmVydGV4QnVmZmVyMTE6Om1ha2VWZXJ0ZXhCdWZmZXIxMShWZXJ0ZXhC
dWZmZXIgKnZldGV4QnVmZmVyKQoreworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKFZlcnRl
eEJ1ZmZlcjExKiwgdmV0ZXhCdWZmZXIpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VmVydGV4
QnVmZmVyMTEqPih2ZXRleEJ1ZmZlcik7Cit9CisKK2Jvb2wgVmVydGV4QnVmZmVyMTE6OnN0b3Jl
VmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdMaW50
IHN0YXJ0LCBHTHNpemVpIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworICAg
IGlmIChtQnVmZmVyKQorICAgIHsKKyAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gYXR0cmli
Lm1Cb3VuZEJ1ZmZlci5nZXQoKTsKKworICAgICAgICBpbnQgaW5wdXRTdHJpZGUgPSBhdHRyaWIu
c3RyaWRlKCk7CisgICAgICAgIGNvbnN0IFZlcnRleENvbnZlcnRlciAmY29udmVydGVyID0gZ2V0
VmVydGV4Q29udmVyc2lvbihhdHRyaWIpOworCisgICAgICAgIElEM0QxMURldmljZUNvbnRleHQg
KmR4Q29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworCisgICAgICAgIEQz
RDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJjZTsKKyAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBkeENvbnRleHQtPk1hcChtQnVmZmVyLCAwLCBEM0QxMV9NQVBfV1JJVEVfTk9fT1ZF
UldSSVRFLCAwLCAmbWFwcGVkUmVzb3VyY2UpOworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiVmVydGV4IGJ1ZmZlciBtYXAgZmFpbGVkIHdp
dGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorCisgICAgICAgIGNoYXIqIG91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KG1hcHBlZFJlc291cmNlLnBEYXRhKSArIG9mZnNldDsKKworICAgICAgICBjb25zdCBjaGFyICpp
bnB1dCA9IE5VTEw7CisgICAgICAgIGlmIChidWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAg
IEJ1ZmZlclN0b3JhZ2UgKnN0b3JhZ2UgPSBidWZmZXItPmdldFN0b3JhZ2UoKTsKKyAgICAgICAg
ICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHN0b3JhZ2UtPmdldERhdGEoKSkg
KyBzdGF0aWNfY2FzdDxpbnQ+KGF0dHJpYi5tT2Zmc2V0KTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hh
cio+KGF0dHJpYi5tUG9pbnRlcik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaW5zdGFuY2Vz
ID09IDAgfHwgYXR0cmliLm1EaXZpc29yID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlu
cHV0ICs9IGlucHV0U3RyaWRlICogc3RhcnQ7CisgICAgICAgIH0KKworICAgICAgICBjb252ZXJ0
ZXIuY29udmVyc2lvbkZ1bmMoaW5wdXQsIGlucHV0U3RyaWRlLCBjb3VudCwgb3V0cHV0KTsKKwor
ICAgICAgICBkeENvbnRleHQtPlVubWFwKG1CdWZmZXIsIDApOworCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBFUlIoIlZlcnRleCBidWZmZXIg
bm90IGluaXRpYWxpemVkLiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiti
b29sIFZlcnRleEJ1ZmZlcjExOjpzdG9yZVJhd0RhdGEoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWdu
ZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBvZmZzZXQpCit7CisgICAgaWYgKG1CdWZmZXIpCisg
ICAgeworICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpkeENvbnRleHQgPSBtUmVuZGVyZXIt
PmdldERldmljZUNvbnRleHQoKTsKKworICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0Ug
bWFwcGVkUmVzb3VyY2U7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZHhDb250ZXh0LT5NYXAo
bUJ1ZmZlciwgMCwgRDNEMTFfTUFQX1dSSVRFX05PX09WRVJXUklURSwgMCwgJm1hcHBlZFJlc291
cmNlKTsKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAg
ICBFUlIoIlZlcnRleCBidWZmZXIgbWFwIGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3Vs
dCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBjaGFy
KiBidWZmZXJEYXRhID0gc3RhdGljX2Nhc3Q8Y2hhcio+KG1hcHBlZFJlc291cmNlLnBEYXRhKTsK
KyAgICAgICAgbWVtY3B5KGJ1ZmZlckRhdGEgKyBvZmZzZXQsIGRhdGEsIHNpemUpOworCisgICAg
ICAgIGR4Q29udGV4dC0+VW5tYXAobUJ1ZmZlciwgMCk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEVSUigiVmVydGV4IGJ1ZmZlciBub3Qg
aW5pdGlhbGl6ZWQuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wg
VmVydGV4QnVmZmVyMTE6OmdldFNwYWNlUmVxdWlyZWQoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0
ZSAmYXR0cmliLCBHTHNpemVpIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTHNpemVpIGluc3RhbmNlcywgdW5zaWduZWQgaW50ICpvdXRTcGFjZVJlcXVpcmVk
KSBjb25zdAoreworICAgIHVuc2lnbmVkIGludCBlbGVtZW50U2l6ZSA9IGdldFZlcnRleENvbnZl
cnNpb24oYXR0cmliKS5vdXRwdXRFbGVtZW50U2l6ZTsKKworICAgIHVuc2lnbmVkIGludCBlbGVt
ZW50Q291bnQgPSAwOworICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBhdHRyaWIubURpdmlzb3Ig
PT0gMCkKKyAgICB7CisgICAgICAgIGVsZW1lbnRDb3VudCA9IGNvdW50OworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihpbnN0YW5j
ZXMpIDwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSAtIChhdHRyaWIu
bURpdmlzb3IgLSAxKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gUm91bmQgdXAKKyAgICAg
ICAgICAgIGVsZW1lbnRDb3VudCA9IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGluc3RhbmNl
cykgKyAoYXR0cmliLm1EaXZpc29yIC0gMSkpIC8gYXR0cmliLm1EaXZpc29yOworICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZWxlbWVudENvdW50ID0gaW5z
dGFuY2VzIC8gYXR0cmliLm1EaXZpc29yOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGVs
ZW1lbnRTaXplIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLyBl
bGVtZW50Q291bnQpCisgICAgeworICAgICAgICBpZiAob3V0U3BhY2VSZXF1aXJlZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgKm91dFNwYWNlUmVxdWlyZWQgPSBlbGVtZW50U2l6ZSAqIGVsZW1l
bnRDb3VudDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBWZXJ0ZXhC
dWZmZXIxMTo6cmVxdWlyZXNDb252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0
dHJpYikgY29uc3QKK3sKKyAgICByZXR1cm4gIWdldFZlcnRleENvbnZlcnNpb24oYXR0cmliKS5p
ZGVudGl0eTsKK30KKwordW5zaWduZWQgaW50IFZlcnRleEJ1ZmZlcjExOjpnZXRCdWZmZXJTaXpl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUJ1ZmZlclNpemU7Cit9CisKK2Jvb2wgVmVydGV4QnVm
ZmVyMTE6OnNldEJ1ZmZlclNpemUodW5zaWduZWQgaW50IHNpemUpCit7CisgICAgaWYgKHNpemUg
PiBtQnVmZmVyU2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbml0aWFsaXplKHNpemUsIG1E
eW5hbWljVXNhZ2UpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9Cit9CisKK2Jvb2wgVmVydGV4QnVmZmVyMTE6OmRpc2NhcmQoKQoreworICAgIGlm
IChtQnVmZmVyKQorICAgIHsKKyAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqZHhDb250ZXh0
ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisKKyAgICAgICAgRDNEMTFfTUFQUEVE
X1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGR4
Q29udGV4dC0+TWFwKG1CdWZmZXIsIDAsIEQzRDExX01BUF9XUklURV9ESVNDQVJELCAwLCAmbWFw
cGVkUmVzb3VyY2UpOworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEVSUigiVmVydGV4IGJ1ZmZlciBtYXAgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4
IiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGR4Q29udGV4dC0+VW5tYXAobUJ1ZmZlciwgMCk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEVSUigiVmVydGV4IGJ1ZmZlciBub3Qg
aW5pdGlhbGl6ZWQuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3Vuc2ln
bmVkIGludCBWZXJ0ZXhCdWZmZXIxMTo6Z2V0VmVydGV4U2l6ZShjb25zdCBnbDo6VmVydGV4QXR0
cmlidXRlICZhdHRyaWIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdldFZlcnRleENvbnZlcnNpb24o
YXR0cmliKS5vdXRwdXRFbGVtZW50U2l6ZTsKK30KKworRFhHSV9GT1JNQVQgVmVydGV4QnVmZmVy
MTE6OmdldERYR0lGb3JtYXQoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25z
dAoreworICAgIHJldHVybiBnZXRWZXJ0ZXhDb252ZXJzaW9uKGF0dHJpYikuZHhnaUZvcm1hdDsK
K30KKworSUQzRDExQnVmZmVyICpWZXJ0ZXhCdWZmZXIxMTo6Z2V0QnVmZmVyKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbUJ1ZmZlcjsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHVuc2lnbmVk
IGludCBjb21wb25lbnRDb3VudCwgYm9vbCB3aWRlbiwgYm9vbCBub3JtYWxpemVkPgorc3RhdGlj
IHZvaWQgY29weVZlcnRleERhdGEoY29uc3Qgdm9pZCAqaW5wdXQsIHVuc2lnbmVkIGludCBzdHJp
ZGUsIHVuc2lnbmVkIGludCBjb3VudCwgdm9pZCAqb3V0cHV0KQoreworICAgIHVuc2lnbmVkIGlu
dCBhdHRyaWJTaXplID0gc2l6ZW9mKFQpICogY29tcG9uZW50Q291bnQ7CisKKyAgICBpZiAoYXR0
cmliU2l6ZSA9PSBzdHJpZGUgJiYgIXdpZGVuKQorICAgIHsKKyAgICAgICAgbWVtY3B5KG91dHB1
dCwgaW5wdXQsIGNvdW50ICogYXR0cmliU2l6ZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIHVuc2lnbmVkIGludCBvdXRwdXRTdHJpZGUgPSB3aWRlbiA/IDQgOiBjb21wb25lbnRD
b3VudDsKKyAgICAgICAgVCBkZWZhdWx0VmFsID0gbm9ybWFsaXplZCA/IHN0ZDo6bnVtZXJpY19s
aW1pdHM8VD46Om1heCgpIDogVCgxKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFQgKm9mZnNl
dElucHV0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4ocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKj4oaW5wdXQpICsgaSAqIHN0cmlkZSk7CisgICAgICAgICAgICBUICpvZmZzZXRPdXRw
dXQgPSByZWludGVycHJldF9jYXN0PFQqPihvdXRwdXQpICsgaSAqIG91dHB1dFN0cmlkZTsKKwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBjb21wb25lbnRDb3VudDsg
aisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG9mZnNldE91dHB1dFtqXSA9IG9m
ZnNldElucHV0W2pdOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAod2lkZW4pCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb2Zmc2V0T3V0cHV0WzNdID0gZGVmYXVsdFZh
bDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordGVtcGxhdGUgPHVuc2ln
bmVkIGludCBjb21wb25lbnRDb3VudD4KK3N0YXRpYyB2b2lkIGNvcHlGaXhlZFZlcnRleERhdGEo
Y29uc3Qgdm9pZCogaW5wdXQsIHVuc2lnbmVkIGludCBzdHJpZGUsIHVuc2lnbmVkIGludCBjb3Vu
dCwgdm9pZCogb3V0cHV0KQoreworICAgIHN0YXRpYyBjb25zdCBmbG9hdCBkaXZpc29yID0gMS4w
ZiAvICgxIDw8IDE2KTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKKyAgICB7CisgICAgICAgIGNvbnN0IEdMZml4ZWQqIG9mZnNldElucHV0ID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBHTGZpeGVkKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4o
aW5wdXQpICsgc3RyaWRlICogaSk7CisgICAgICAgIGZsb2F0KiBvZmZzZXRPdXRwdXQgPSByZWlu
dGVycHJldF9jYXN0PGZsb2F0Kj4ob3V0cHV0KSArIGkgKiBjb21wb25lbnRDb3VudDsKKworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IGNvbXBvbmVudENvdW50OyBqKyspCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG9mZnNldE91dHB1dFtqXSA9IHN0YXRpY19jYXN0PGZsb2F0
PihvZmZzZXRJbnB1dFtqXSkgKiBkaXZpc29yOworICAgICAgICB9CisgICAgfQorfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW50IGNvbXBvbmVudENvdW50LCBib29sIG5vcm1h
bGl6ZWQ+CitzdGF0aWMgdm9pZCBjb3B5VG9GbG9hdFZlcnRleERhdGEoY29uc3Qgdm9pZCogaW5w
dXQsIHVuc2lnbmVkIGludCBzdHJpZGUsIHVuc2lnbmVkIGludCBjb3VudCwgdm9pZCogb3V0cHV0
KQoreworICAgIHR5cGVkZWYgc3RkOjpudW1lcmljX2xpbWl0czxUPiBOTDsKKworICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIGNvbnN0
IFQgKm9mZnNldElucHV0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4ocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyKj4oaW5wdXQpICsgc3RyaWRlICogaSk7CisgICAgICAgIGZsb2F0ICpv
ZmZzZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4ob3V0cHV0KSArIGkgKiBjb21w
b25lbnRDb3VudDsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IGNvbXBv
bmVudENvdW50OyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChub3JtYWxpemVkKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChOTDo6aXNfc2lnbmVkKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgZGl2aXNvciA9IDEu
MGYgLyAoMiAqIHN0YXRpY19jYXN0PGZsb2F0PihOTDo6bWF4KCkpICsgMSk7CisgICAgICAgICAg
ICAgICAgICAgIG9mZnNldE91dHB1dFtqXSA9ICgyICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KG9mZnNl
dElucHV0W2pdKSArIDEpICogZGl2aXNvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0
T3V0cHV0W2pdID0gIHN0YXRpY19jYXN0PGZsb2F0PihvZmZzZXRJbnB1dFtqXSkgLyBOTDo6bWF4
KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG9mZnNldE91dHB1dFtqXSA9ICBzdGF0aWNf
Y2FzdDxmbG9hdD4ob2Zmc2V0SW5wdXRbal0pOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorfQorCitjb25zdCBWZXJ0ZXhCdWZmZXIxMTo6VmVydGV4Q29udmVydGVyIFZlcnRleEJ1
ZmZlcjExOjptUG9zc2libGVUcmFuc2xhdGlvbnNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVNd
WzJdWzRdID0KK3sKKyAgICB7IC8vIEdMX0JZVEUKKyAgICAgICAgeyAvLyB1bm5vcm1hbGl6ZWQK
KyAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTGJ5dGUsIDEsIGZhbHNlPiwg
ZmFsc2UsIERYR0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9LAorICAgICAgICAgICAgeyAmY29weVRv
RmxvYXRWZXJ0ZXhEYXRhPEdMYnl0ZSwgMiwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMy
RzMyX0ZMT0FULCA4IH0sCisgICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xi
eXRlLCAzLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0s
CisgICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xieXRlLCA0LCBmYWxzZT4s
IGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsIDE2IH0sCisgICAgICAgIH0s
CisgICAgICAgIHsgLy8gbm9ybWFsaXplZAorICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8
R0xieXRlLCAxLCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1I4X1NOT1JNLCAxIH0s
CisgICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGJ5dGUsIDIsIGZhbHNlLCB0cnVlPiwg
dHJ1ZSwgRFhHSV9GT1JNQVRfUjhHOF9TTk9STSwgMiB9LAorICAgICAgICAgICAgeyAmY29weVZl
cnRleERhdGE8R0xieXRlLCAzLCB0cnVlLCB0cnVlPiwgZmFsc2UsIERYR0lfRk9STUFUX1I4RzhC
OEE4X1NOT1JNLCA0IH0sCisgICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGJ5dGUsIDQs
IGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjhHOEI4QThfU05PUk0sIDQgfSwKKyAg
ICAgICAgfSwKKyAgICB9LAorICAgIHsgLy8gR0xfVU5TSUdORURfQllURQorICAgICAgICB7IC8v
IHVubm9ybWFsaXplZAorICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMdWJ5
dGUsIDEsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9LAorICAgICAg
ICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDIsIGZhbHNlPiwgZmFsc2Us
IERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAorICAgICAgICAgICAgeyAmY29weVRvRmxv
YXRWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDMsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkcz
MkIzMl9GTE9BVCwgMTIgfSwKKyAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxH
THVieXRlLCA0LCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQs
IDE2IH0sCisgICAgICAgIH0sCisgICAgICAgIHsgLy8gbm9ybWFsaXplZAorICAgICAgICAgICAg
eyAmY29weVZlcnRleERhdGE8R0x1Ynl0ZSwgMSwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZP
Uk1BVF9SOF9VTk9STSwgMSB9LAorICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1Ynl0
ZSwgMiwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNLCAyIH0sCisg
ICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHVieXRlLCAzLCB0cnVlLCB0cnVlPiwgZmFs
c2UsIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNLCA0IH0sCisgICAgICAgICAgICB7ICZjb3B5
VmVydGV4RGF0YTxHTHVieXRlLCA0LCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1I4
RzhCOEE4X1VOT1JNLCA0IH0sCisgICAgICAgIH0sCisgICAgfSwKKyAgICB7IC8vIEdMX1NIT1JU
CisgICAgICAgIHsgLy8gdW5ub3JtYWxpemVkCisgICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZl
cnRleERhdGE8R0xzaG9ydCwgMSwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyX0ZMT0FU
LCA0IH0sCisgICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xzaG9ydCwgMiwg
ZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCA4IH0sCisgICAgICAgICAg
ICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xzaG9ydCwgMywgZmFsc2U+LCBmYWxzZSwgRFhH
SV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAxMiB9LAorICAgICAgICAgICAgeyAmY29weVRvRmxv
YXRWZXJ0ZXhEYXRhPEdMc2hvcnQsIDQsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkcz
MkIzMkEzMl9GTE9BVCwgMTYgfSwKKyAgICAgICAgfSwKKyAgICAgICAgeyAvLyBub3JtYWxpemVk
CisgICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHNob3J0LCAxLCBmYWxzZSwgdHJ1ZT4s
IHRydWUsIERYR0lfRk9STUFUX1IxNl9TTk9STSwgMiB9LAorICAgICAgICAgICAgeyAmY29weVZl
cnRleERhdGE8R0xzaG9ydCwgMiwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMTZH
MTZfU05PUk0sIDQgfSwKKyAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMc2hvcnQsIDMs
IHRydWUsIHRydWU+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1NOT1JNLCA4IH0s
CisgICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHNob3J0LCA0LCBmYWxzZSwgdHJ1ZT4s
IHRydWUsIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9TTk9STSwgOCB9LAorICAgICAgICB9LAor
ICAgIH0sCisgICAgeyAvLyBHTF9VTlNJR05FRF9TSE9SVAorICAgICAgICB7IC8vIHVubm9ybWFs
aXplZAorICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMdXNob3J0LCAxLCBm
YWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKKyAgICAgICAgICAgIHsg
JmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVzaG9ydCwgMiwgZmFsc2U+LCBmYWxzZSwgRFhHSV9G
T1JNQVRfUjMyRzMyX0ZMT0FULCA4IH0sCisgICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRl
eERhdGE8R0x1c2hvcnQsIDMsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMl9G
TE9BVCwgMTIgfSwKKyAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVzaG9y
dCwgNCwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9
LAorICAgICAgICB9LAorICAgICAgICB7IC8vIG5vcm1hbGl6ZWQKKyAgICAgICAgICAgIHsgJmNv
cHlWZXJ0ZXhEYXRhPEdMdXNob3J0LCAxLCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFU
X1IxNl9VTk9STSwgMiB9LAorICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1c2hvcnQs
IDIsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjE2RzE2X1VOT1JNLCA0IH0sCisg
ICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHVzaG9ydCwgMywgdHJ1ZSwgdHJ1ZT4sIGZh
bHNlLCBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfVU5PUk0sIDggfSwKKyAgICAgICAgICAgIHsg
JmNvcHlWZXJ0ZXhEYXRhPEdMdXNob3J0LCA0LCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9S
TUFUX1IxNkcxNkIxNkExNl9VTk9STSwgOCB9LAorICAgICAgICB9LAorICAgIH0sCisgICAgeyAv
LyBHTF9GSVhFRAorICAgICAgICB7IC8vIHVubm9ybWFsaXplZAorICAgICAgICAgICAgeyAmY29w
eUZpeGVkVmVydGV4RGF0YTwxPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9LAor
ICAgICAgICAgICAgeyAmY29weUZpeGVkVmVydGV4RGF0YTwyPiwgZmFsc2UsIERYR0lfRk9STUFU
X1IzMkczMl9GTE9BVCwgOCB9LAorICAgICAgICAgICAgeyAmY29weUZpeGVkVmVydGV4RGF0YTwz
PiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKKyAgICAgICAgICAg
IHsgJmNvcHlGaXhlZFZlcnRleERhdGE8ND4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJB
MzJfRkxPQVQsIDE2IH0sCisgICAgICAgIH0sCisgICAgICAgIHsgLy8gbm9ybWFsaXplZAorICAg
ICAgICAgICAgeyAmY29weUZpeGVkVmVydGV4RGF0YTwxPiwgZmFsc2UsIERYR0lfRk9STUFUX1Iz
Ml9GTE9BVCwgNCB9LAorICAgICAgICAgICAgeyAmY29weUZpeGVkVmVydGV4RGF0YTwyPiwgZmFs
c2UsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAorICAgICAgICAgICAgeyAmY29weUZp
eGVkVmVydGV4RGF0YTwzPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCwgMTIg
fSwKKyAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8ND4sIGZhbHNlLCBEWEdJX0ZP
Uk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsIDE2IH0sCisgICAgICAgIH0sCisgICAgfSwKKyAgICB7
IC8vIEdMX0ZMT0FUCisgICAgICAgIHsgLy8gdW5ub3JtYWxpemVkCisgICAgICAgICAgICB7ICZj
b3B5VmVydGV4RGF0YTxHTGZsb2F0LCAxLCBmYWxzZSwgZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1B
VF9SMzJfRkxPQVQsIDQgfSwKKyAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQs
IDIsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAor
ICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xmbG9hdCwgMywgZmFsc2UsIGZhbHNlPiwg
dHJ1ZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAxMiB9LAorICAgICAgICAgICAgeyAm
Y29weVZlcnRleERhdGE8R0xmbG9hdCwgNCwgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JN
QVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAorICAgICAgICB9LAorICAgICAgICB7IC8vIG5v
cm1hbGl6ZWQKKyAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDEsIGZhbHNl
LCBmYWxzZT4sIHRydWUsIERYR0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9LAorICAgICAgICAgICAg
eyAmY29weVZlcnRleERhdGE8R0xmbG9hdCwgMiwgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9G
T1JNQVRfUjMyRzMyX0ZMT0FULCA4IH0sCisgICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxH
TGZsb2F0LCAzLCBmYWxzZSwgZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxP
QVQsIDEyIH0sCisgICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCA0LCBmYWxz
ZSwgZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsIDE2IH0sCisg
ICAgICAgIH0sCisgICAgfSwKK307CisKK2NvbnN0IFZlcnRleEJ1ZmZlcjExOjpWZXJ0ZXhDb252
ZXJ0ZXIgJlZlcnRleEJ1ZmZlcjExOjpnZXRWZXJ0ZXhDb252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0
ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSkKK3sKKyAgICB1bnNpZ25lZCBpbnQgdHlwZUluZGV4ID0g
MDsKKyAgICBzd2l0Y2ggKGF0dHJpYnV0ZS5tVHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0JZ
VEU6ICAgICAgICAgICAgIHR5cGVJbmRleCA9IDA7IGJyZWFrOworICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9CWVRFOiAgICB0eXBlSW5kZXggPSAxOyBicmVhazsKKyAgICAgIGNhc2UgR0xfU0hPUlQ6
ICAgICAgICAgICAgdHlwZUluZGV4ID0gMjsgYnJlYWs7CisgICAgICBjYXNlIEdMX1VOU0lHTkVE
X1NIT1JUOiAgIHR5cGVJbmRleCA9IDM7IGJyZWFrOworICAgICAgY2FzZSBHTF9GSVhFRDogICAg
ICAgICAgICB0eXBlSW5kZXggPSA0OyBicmVhazsKKyAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAg
ICAgICAgdHlwZUluZGV4ID0gNTsgYnJlYWs7CisgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBtUG9zc2libGVU
cmFuc2xhdGlvbnNbdHlwZUluZGV4XVthdHRyaWJ1dGUubU5vcm1hbGl6ZWQgPyAxIDogMF1bYXR0
cmlidXRlLm1TaXplIC0gMV07Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVydGV4QnVmZmVyMTEuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVydGV4
QnVmZmVyMTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lY2ViNDI2ZTgyZDQyYjU1NjY2YzU3OWMzZmVlMWZlMmFi
N2JhODAxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9WZXJ0ZXhCdWZmZXIxMS5oCkBAIC0wLDAgKzEsNzQgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisvLyBWZXJ0ZXhCdWZmZXIxMS5oOiBEZWZpbmVzIHRoZSBEM0QxMSBW
ZXJ0ZXhCdWZmZXIgaW1wbGVtZW50YXRpb24uCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVS
X1ZFUlRFWEJVRkZFUjExX0hfCisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9WRVJURVhCVUZG
RVIxMV9IXworCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlci5oIgor
CituYW1lc3BhY2UgcngKK3sKK2NsYXNzIFJlbmRlcmVyMTE7CisKK2NsYXNzIFZlcnRleEJ1ZmZl
cjExIDogcHVibGljIFZlcnRleEJ1ZmZlcgoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgVmVy
dGV4QnVmZmVyMTEocng6OlJlbmRlcmVyMTEgKmNvbnN0IHJlbmRlcmVyKTsKKyAgICB2aXJ0dWFs
IH5WZXJ0ZXhCdWZmZXIxMSgpOworCisgICAgdmlydHVhbCBib29sIGluaXRpYWxpemUodW5zaWdu
ZWQgaW50IHNpemUsIGJvb2wgZHluYW1pY1VzYWdlKTsKKworICAgIHN0YXRpYyBWZXJ0ZXhCdWZm
ZXIxMSAqbWFrZVZlcnRleEJ1ZmZlcjExKFZlcnRleEJ1ZmZlciAqdmV0ZXhCdWZmZXIpOworCisg
ICAgdmlydHVhbCBib29sIHN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0
cmlidXRlICZhdHRyaWIsIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3Rh
bmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBvZmZzZXQpOworICAgIHZpcnR1YWwgYm9vbCBzdG9yZVJhd0RhdGEoY29uc3Qgdm9pZCogZGF0
YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBvZmZzZXQpOworCisgICAgdmlydHVh
bCBib29sIGdldFNwYWNlUmVxdWlyZWQoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmli
LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm91dFNwYWNlUmVxdWlyZWQpIGNvbnN0OworCisg
ICAgdmlydHVhbCBib29sIHJlcXVpcmVzQ29udmVyc2lvbihjb25zdCBnbDo6VmVydGV4QXR0cmli
dXRlICZhdHRyaWIpIGNvbnN0OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0QnVmZmVy
U2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzZXRCdWZmZXJTaXplKHVuc2lnbmVkIGlu
dCBzaXplKTsKKyAgICB2aXJ0dWFsIGJvb2wgZGlzY2FyZCgpOworCisgICAgdW5zaWduZWQgaW50
IGdldFZlcnRleFNpemUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdDsK
KyAgICBEWEdJX0ZPUk1BVCBnZXREWEdJRm9ybWF0KGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUg
JmF0dHJpYikgY29uc3Q7CisKKyAgICBJRDNEMTFCdWZmZXIgKmdldEJ1ZmZlcigpIGNvbnN0Owor
CisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFZlcnRleEJ1ZmZlcjEx
KTsKKworICAgIHJ4OjpSZW5kZXJlcjExICpjb25zdCBtUmVuZGVyZXI7CisKKyAgICBJRDNEMTFC
dWZmZXIgKm1CdWZmZXI7CisgICAgdW5zaWduZWQgaW50IG1CdWZmZXJTaXplOworICAgIGJvb2wg
bUR5bmFtaWNVc2FnZTsKKworICAgIHR5cGVkZWYgdm9pZCAoKlZlcnRleENvbnZlcnNpb25GdW5j
dGlvbikoY29uc3Qgdm9pZCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgdm9pZCAqKTsK
KyAgICBzdHJ1Y3QgVmVydGV4Q29udmVydGVyCisgICAgeworICAgICAgICBWZXJ0ZXhDb252ZXJz
aW9uRnVuY3Rpb24gY29udmVyc2lvbkZ1bmM7CisgICAgICAgIGJvb2wgaWRlbnRpdHk7CisgICAg
ICAgIERYR0lfRk9STUFUIGR4Z2lGb3JtYXQ7CisgICAgICAgIHVuc2lnbmVkIGludCBvdXRwdXRF
bGVtZW50U2l6ZTsKKyAgICB9OworCisgICAgZW51bSB7IE5VTV9HTF9WRVJURVhfQVRUUklCX1RZ
UEVTID0gNiB9OworCisgICAgLy8gVGhpcyB0YWJsZSBpcyB1c2VkIHRvIGdlbmVyYXRlIG1BdHRy
aWJ1dGVUeXBlcy4KKyAgICBzdGF0aWMgY29uc3QgVmVydGV4Q29udmVydGVyIG1Qb3NzaWJsZVRy
YW5zbGF0aW9uc1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFU11bMl1bNF07IC8vIFtHTCB0eXBl
cyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRleCgpXVtub3JtYWxpemVkXVtzaXplIC0gMV0KKwor
ICAgIHN0YXRpYyBjb25zdCBWZXJ0ZXhDb252ZXJ0ZXIgJmdldFZlcnRleENvbnZlcnNpb24oY29u
c3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlKTsKK307CisKK30KKworI2VuZGlmIC8v
IExJQkdMRVNWMl9SRU5ERVJFUl9WRVJURVhCVUZGRVIxMV9IXwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjEx
X3V0aWxzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmYwNjAyNGZiNWFhMTEy
OGFkNWQxZjBlOWQyMzQxZTc4ZGEwYWE5NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGls
cy5jcHAKQEAgLTAsMCArMSw2ODggQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKy8vIHJlbmRlcmVyMTFfdXRpbHMuY3BwOiBDb252ZXJzaW9uIGZ1bmN0aW9ucyBh
bmQgb3RoZXIgdXRpbGl0eSByb3V0aW5lcworLy8gc3BlY2lmaWMgdG8gdGhlIEQzRDExIHJlbmRl
cmVyLgorCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRp
bHMuaCIKKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCituYW1lc3BhY2UgZ2xfZDNkMTEK
K3sKKworRDNEMTFfQkxFTkQgQ29udmVydEJsZW5kRnVuYyhHTGVudW0gZ2xCbGVuZCwgYm9vbCBp
c0FscGhhKQoreworICAgIEQzRDExX0JMRU5EIGQzZEJsZW5kID0gRDNEMTFfQkxFTkRfWkVSTzsK
KworICAgIHN3aXRjaCAoZ2xCbGVuZCkKKyAgICB7CisgICAgICBjYXNlIEdMX1pFUk86ICAgICAg
ICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0QxMV9CTEVORF9aRVJPOyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FOiAgICAgICAgICAgICAgICAgICAgICBkM2RCbGVu
ZCA9IEQzRDExX0JMRU5EX09ORTsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9TUkNfQ09MT1I6ICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gKGlzQWxwaGEgPyBEM0QxMV9C
TEVORF9TUkNfQUxQSEEgOiBEM0QxMV9CTEVORF9TUkNfQ09MT1IpOyAgICAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQ09MT1I6ICAgICAgZDNkQmxlbmQgPSAoaXNB
bHBoYSA/IEQzRDExX0JMRU5EX0lOVl9TUkNfQUxQSEEgOiBEM0QxMV9CTEVORF9JTlZfU1JDX0NP
TE9SKTsgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRFNUX0NPTE9SOiAgICAgICAgICAgICAgICBk
M2RCbGVuZCA9IChpc0FscGhhID8gRDNEMTFfQkxFTkRfREVTVF9BTFBIQSA6IEQzRDExX0JMRU5E
X0RFU1RfQ09MT1IpOyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNU
X0NPTE9SOiAgICAgIGQzZEJsZW5kID0gKGlzQWxwaGEgPyBEM0QxMV9CTEVORF9JTlZfREVTVF9B
TFBIQSA6IEQzRDExX0JMRU5EX0lOVl9ERVNUX0NPTE9SKTsgYnJlYWs7CisgICAgICBjYXNlIEdM
X1NSQ19BTFBIQTogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0QxMV9CTEVORF9TUkNfQUxQ
SEE7ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19BTFBIQTog
ICAgICBkM2RCbGVuZCA9IEQzRDExX0JMRU5EX0lOVl9TUkNfQUxQSEE7ICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9EU1RfQUxQSEE6ICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gRDNEMTFf
QkxFTkRfREVTVF9BTFBIQTsgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX09ORV9NSU5V
U19EU1RfQUxQSEE6ICAgICAgZDNkQmxlbmQgPSBEM0QxMV9CTEVORF9JTlZfREVTVF9BTFBIQTsg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQ09OU1RBTlRfQ09MT1I6ICAgICAgICAgICBkM2RC
bGVuZCA9IEQzRDExX0JMRU5EX0JMRU5EX0ZBQ1RPUjsgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1I6IGQzZEJsZW5kID0gRDNEMTFfQkxFTkRfSU5W
X0JMRU5EX0ZBQ1RPUjsgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0NPTlNUQU5UX0FMUEhBOiAg
ICAgICAgICAgZDNkQmxlbmQgPSBEM0QxMV9CTEVORF9CTEVORF9GQUNUT1I7ICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBOiBkM2RCbGVuZCA9IEQz
RDExX0JMRU5EX0lOVl9CTEVORF9GQUNUT1I7ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TUkNf
QUxQSEFfU0FUVVJBVEU6ICAgICAgIGQzZEJsZW5kID0gRDNEMTFfQkxFTkRfU1JDX0FMUEhBX1NB
VDsgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKwor
ICAgIHJldHVybiBkM2RCbGVuZDsKK30KKworRDNEMTFfQkxFTkRfT1AgQ29udmVydEJsZW5kT3Ao
R0xlbnVtIGdsQmxlbmRPcCkKK3sKKyAgICBEM0QxMV9CTEVORF9PUCBkM2RCbGVuZE9wID0gRDNE
MTFfQkxFTkRfT1BfQUREOworCisgICAgc3dpdGNoIChnbEJsZW5kT3ApCisgICAgeworICAgICAg
Y2FzZSBHTF9GVU5DX0FERDogICAgICAgICAgICAgIGQzZEJsZW5kT3AgPSBEM0QxMV9CTEVORF9P
UF9BREQ7ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRlVOQ19TVUJUUkFDVDogICAg
ICAgICBkM2RCbGVuZE9wID0gRDNEMTFfQkxFTkRfT1BfU1VCVFJBQ1Q7ICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX0ZVTkNfUkVWRVJTRV9TVUJUUkFDVDogZDNkQmxlbmRPcCA9IEQzRDExX0JM
RU5EX09QX1JFVl9TVUJUUkFDVDsgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICB9CisKKyAgICByZXR1cm4gZDNkQmxlbmRPcDsKK30KKworVUlOVDggQ29udmVydENv
bG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKQorewor
ICAgIFVJTlQ4IG1hc2sgPSAwOworICAgIGlmIChyZWQpCisgICAgeworICAgICAgICBtYXNrIHw9
IEQzRDExX0NPTE9SX1dSSVRFX0VOQUJMRV9SRUQ7CisgICAgfQorICAgIGlmIChncmVlbikKKyAg
ICB7CisgICAgICAgIG1hc2sgfD0gRDNEMTFfQ09MT1JfV1JJVEVfRU5BQkxFX0dSRUVOOworICAg
IH0KKyAgICBpZiAoYmx1ZSkKKyAgICB7CisgICAgICAgIG1hc2sgfD0gRDNEMTFfQ09MT1JfV1JJ
VEVfRU5BQkxFX0JMVUU7CisgICAgfQorICAgIGlmIChhbHBoYSkKKyAgICB7CisgICAgICAgIG1h
c2sgfD0gRDNEMTFfQ09MT1JfV1JJVEVfRU5BQkxFX0FMUEhBOworICAgIH0KKyAgICByZXR1cm4g
bWFzazsKK30KKworRDNEMTFfQ1VMTF9NT0RFIENvbnZlcnRDdWxsTW9kZShib29sIGN1bGxFbmFi
bGVkLCBHTGVudW0gY3VsbE1vZGUpCit7CisgICAgRDNEMTFfQ1VMTF9NT0RFIGN1bGwgPSBEM0Qx
MV9DVUxMX05PTkU7CisKKyAgICBpZiAoY3VsbEVuYWJsZWQpCisgICAgeworICAgICAgICBzd2l0
Y2ggKGN1bGxNb2RlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9GUk9OVDogICAgICAg
ICAgICBjdWxsID0gRDNEMTFfQ1VMTF9GUk9OVDsgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBH
TF9CQUNLOiAgICAgICAgICAgICBjdWxsID0gRDNEMTFfQ1VMTF9CQUNLOyAgICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSBHTF9GUk9OVF9BTkRfQkFDSzogICBjdWxsID0gRDNEMTFfQ1VMTF9OT05F
OyAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjdWxsID0gRDNEMTFfQ1VMTF9OT05F
OworICAgIH0KKworICAgIHJldHVybiBjdWxsOworfQorCitEM0QxMV9DT01QQVJJU09OX0ZVTkMg
Q29udmVydENvbXBhcmlzb24oR0xlbnVtIGNvbXBhcmlzb24pCit7CisgICAgRDNEMTFfQ09NUEFS
SVNPTl9GVU5DIGQzZENvbXAgPSBEM0QxMV9DT01QQVJJU09OX05FVkVSOworICAgIHN3aXRjaCAo
Y29tcGFyaXNvbikKKyAgICB7CisgICAgICBjYXNlIEdMX05FVkVSOiAgICBkM2RDb21wID0gRDNE
MTFfQ09NUEFSSVNPTl9ORVZFUjsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9BTFdB
WVM6ICAgZDNkQ29tcCA9IEQzRDExX0NPTVBBUklTT05fQUxXQVlTOyAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfTEVTUzogICAgIGQzZENvbXAgPSBEM0QxMV9DT01QQVJJU09OX0xFU1M7
ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xFUVVBTDogICBkM2RDb21wID0gRDNE
MTFfQ09NUEFSSVNPTl9MRVNTX0VRVUFMOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9FUVVB
TDogICAgZDNkQ29tcCA9IEQzRDExX0NPTVBBUklTT05fRVFVQUw7ICAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfR1JFQVRFUjogIGQzZENvbXAgPSBEM0QxMV9DT01QQVJJU09OX0dSRUFU
RVI7ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0dFUVVBTDogICBkM2RDb21wID0gRDNE
MTFfQ09NUEFSSVNPTl9HUkVBVEVSX0VRVUFMOyAgIGJyZWFrOworICAgICAgY2FzZSBHTF9OT1RF
UVVBTDogZDNkQ29tcCA9IEQzRDExX0NPTVBBUklTT05fTk9UX0VRVUFMOyAgICAgICBicmVhazsK
KyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIGQzZENv
bXA7Cit9CisKK0QzRDExX0RFUFRIX1dSSVRFX01BU0sgQ29udmVydERlcHRoTWFzayhib29sIGRl
cHRoV3JpdGVFbmFibGVkKQoreworICAgIHJldHVybiBkZXB0aFdyaXRlRW5hYmxlZCA/IEQzRDEx
X0RFUFRIX1dSSVRFX01BU0tfQUxMIDogRDNEMTFfREVQVEhfV1JJVEVfTUFTS19aRVJPOworfQor
CitVSU5UOCBDb252ZXJ0U3RlbmNpbE1hc2soR0x1aW50IHN0ZW5jaWxtYXNrKQoreworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxVSU5UOD4oc3RlbmNpbG1hc2spOworfQorCitEM0QxMV9TVEVOQ0lM
X09QIENvbnZlcnRTdGVuY2lsT3AoR0xlbnVtIHN0ZW5jaWxPcCkKK3sKKyAgICBEM0QxMV9TVEVO
Q0lMX09QIGQzZFN0ZW5jaWxPcCA9IEQzRDExX1NURU5DSUxfT1BfS0VFUDsKKworICAgIHN3aXRj
aCAoc3RlbmNpbE9wKQorICAgIHsKKyAgICAgIGNhc2UgR0xfWkVSTzogICAgICBkM2RTdGVuY2ls
T3AgPSBEM0QxMV9TVEVOQ0lMX09QX1pFUk87ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0tF
RVA6ICAgICAgZDNkU3RlbmNpbE9wID0gRDNEMTFfU1RFTkNJTF9PUF9LRUVQOyAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9SRVBMQUNFOiAgIGQzZFN0ZW5jaWxPcCA9IEQzRDExX1NURU5DSUxf
T1BfUkVQTEFDRTsgICBicmVhazsKKyAgICAgIGNhc2UgR0xfSU5DUjogICAgICBkM2RTdGVuY2ls
T3AgPSBEM0QxMV9TVEVOQ0lMX09QX0lOQ1JfU0FUOyAgYnJlYWs7CisgICAgICBjYXNlIEdMX0RF
Q1I6ICAgICAgZDNkU3RlbmNpbE9wID0gRDNEMTFfU1RFTkNJTF9PUF9ERUNSX1NBVDsgIGJyZWFr
OworICAgICAgY2FzZSBHTF9JTlZFUlQ6ICAgIGQzZFN0ZW5jaWxPcCA9IEQzRDExX1NURU5DSUxf
T1BfSU5WRVJUOyAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfSU5DUl9XUkFQOiBkM2RTdGVuY2ls
T3AgPSBEM0QxMV9TVEVOQ0lMX09QX0lOQ1I7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0RF
Q1JfV1JBUDogZDNkU3RlbmNpbE9wID0gRDNEMTFfU1RFTkNJTF9PUF9ERUNSOyAgICAgIGJyZWFr
OworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZDNk
U3RlbmNpbE9wOworfQorCitEM0QxMV9GSUxURVIgQ29udmVydEZpbHRlcihHTGVudW0gbWluRmls
dGVyLCBHTGVudW0gbWFnRmlsdGVyLCBmbG9hdCBtYXhBbmlzb3Ryb3B5KQoreworICAgIGlmICht
YXhBbmlzb3Ryb3B5ID4gMS4wZikKKyAgICB7CisgICAgICAgIHJldHVybiBEM0QxMV9FTkNPREVf
QU5JU09UUk9QSUNfRklMVEVSKGZhbHNlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgRDNEMTFfRklMVEVSX1RZUEUgZHhNaW4gPSBEM0QxMV9GSUxURVJfVFlQRV9QT0lOVDsKKyAg
ICAgICAgRDNEMTFfRklMVEVSX1RZUEUgZHhNaXAgPSBEM0QxMV9GSUxURVJfVFlQRV9QT0lOVDsK
KyAgICAgICAgc3dpdGNoIChtaW5GaWx0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdM
X05FQVJFU1Q6ICAgICAgICAgICAgICAgIGR4TWluID0gRDNEMTFfRklMVEVSX1RZUEVfUE9JTlQ7
ICBkeE1pcCA9IEQzRDExX0ZJTFRFUl9UWVBFX1BPSU5UOyAgYnJlYWs7CisgICAgICAgICAgY2Fz
ZSBHTF9MSU5FQVI6ICAgICAgICAgICAgICAgICBkeE1pbiA9IEQzRDExX0ZJTFRFUl9UWVBFX0xJ
TkVBUjsgZHhNaXAgPSBEM0QxMV9GSUxURVJfVFlQRV9QT0lOVDsgIGJyZWFrOworICAgICAgICAg
IGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVDogZHhNaW4gPSBEM0QxMV9GSUxURVJfVFlQ
RV9QT0lOVDsgIGR4TWlwID0gRDNEMTFfRklMVEVSX1RZUEVfUE9JTlQ7ICBicmVhazsKKyAgICAg
ICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTkVBUkVTVDogIGR4TWluID0gRDNEMTFfRklMVEVS
X1RZUEVfTElORUFSOyBkeE1pcCA9IEQzRDExX0ZJTFRFUl9UWVBFX1BPSU5UOyAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI6ICBkeE1pbiA9IEQzRDExX0ZJ
TFRFUl9UWVBFX1BPSU5UOyAgZHhNaXAgPSBEM0QxMV9GSUxURVJfVFlQRV9MSU5FQVI7IGJyZWFr
OworICAgICAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9MSU5FQVI6ICAgZHhNaW4gPSBEM0Qx
MV9GSUxURVJfVFlQRV9MSU5FQVI7IGR4TWlwID0gRDNEMTFfRklMVEVSX1RZUEVfTElORUFSOyBi
cmVhazsKKyAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIH0KKworICAgICAgICBEM0QxMV9GSUxURVJfVFlQRSBkeE1hZyA9IEQz
RDExX0ZJTFRFUl9UWVBFX1BPSU5UOworICAgICAgICBzd2l0Y2ggKG1hZ0ZpbHRlcikKKyAgICAg
ICAgeworICAgICAgICAgIGNhc2UgR0xfTkVBUkVTVDogZHhNYWcgPSBEM0QxMV9GSUxURVJfVFlQ
RV9QT0lOVDsgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfTElORUFSOiAgZHhNYWcgPSBEM0Qx
MV9GSUxURVJfVFlQRV9MSU5FQVI7IGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAg
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBEM0QxMV9FTkNPREVf
QkFTSUNfRklMVEVSKGR4TWluLCBkeE1hZywgZHhNaXAsIGZhbHNlKTsKKyAgICB9Cit9CisKK0Qz
RDExX1RFWFRVUkVfQUREUkVTU19NT0RFIENvbnZlcnRUZXh0dXJlV3JhcChHTGVudW0gd3JhcCkK
K3sKKyAgICBzd2l0Y2ggKHdyYXApCisgICAgeworICAgICAgY2FzZSBHTF9SRVBFQVQ6ICAgICAg
ICAgIHJldHVybiBEM0QxMV9URVhUVVJFX0FERFJFU1NfV1JBUDsKKyAgICAgIGNhc2UgR0xfQ0xB
TVBfVE9fRURHRTogICByZXR1cm4gRDNEMTFfVEVYVFVSRV9BRERSRVNTX0NMQU1QOworICAgICAg
Y2FzZSBHTF9NSVJST1JFRF9SRVBFQVQ6IHJldHVybiBEM0QxMV9URVhUVVJFX0FERFJFU1NfTUlS
Uk9SOworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAg
fQorCisgICAgcmV0dXJuIEQzRDExX1RFWFRVUkVfQUREUkVTU19XUkFQOworfQorCitGTE9BVCBD
b252ZXJ0TWluTE9EKEdMZW51bSBtaW5GaWx0ZXIsIHVuc2lnbmVkIGludCBsb2RPZmZzZXQpCit7
CisgICAgcmV0dXJuIChtaW5GaWx0ZXIgPT0gR0xfTkVBUkVTVCB8fCBtaW5GaWx0ZXIgPT0gR0xf
TElORUFSKSA/IHN0YXRpY19jYXN0PGZsb2F0Pihsb2RPZmZzZXQpIDogLUZMVF9NQVg7Cit9CisK
K0ZMT0FUIENvbnZlcnRNYXhMT0QoR0xlbnVtIG1pbkZpbHRlciwgdW5zaWduZWQgaW50IGxvZE9m
ZnNldCkKK3sKKyAgICByZXR1cm4gKG1pbkZpbHRlciA9PSBHTF9ORUFSRVNUIHx8IG1pbkZpbHRl
ciA9PSBHTF9MSU5FQVIpID8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGxvZE9mZnNldCkgOiBGTFRfTUFY
OworfQorCit9CisKK25hbWVzcGFjZSBkM2QxMV9nbAoreworCitHTGVudW0gQ29udmVydEJhY2tC
dWZmZXJGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KQor
ICAgIHsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk06IHJldHVybiBHTF9S
R0JBOF9PRVM7CisgICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOiByZXR1cm4g
R0xfQkdSQThfRVhUOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gR0xfUkdCQThfT0VTOworfQorCitHTGVudW0gQ29udmVydERlcHRo
U3RlbmNpbEZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQp
CisgICAgeworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9VTktOT1dOOiByZXR1cm4gR0xfTk9ORTsK
KyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDE2X1VOT1JNOiByZXR1cm4gR0xfREVQVEhfQ09NUE9O
RU5UMTY7CisgICAgICBjYXNlIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOiByZXR1cm4g
R0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNI
QUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKK30K
KworR0xlbnVtIENvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KQor
eworICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhH
OFI4QThfVU5PUk06CisgICAgICAgIHJldHVybiBHTF9CR1JBOF9FWFQ7CisgICAgICBjYXNlIERY
R0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOgorICAgICAgICByZXR1cm4gR0xfUkdCQThfT0VTOwor
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZfVU5PUk06CisgICAgICAgIHJldHVybiBHTF9ERVBU
SF9DT01QT05FTlQxNjsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ6
CisgICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKKyAgICAgIGRlZmF1bHQ6
CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIEdMX1JHQkE4X09F
UzsKK30KKworR0xlbnVtIENvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoRFhHSV9GT1JNQVQg
Zm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjhHOEI4QThfVU5PUk06CisgICAgICAgIHJldHVybiBHTF9SR0JBOF9PRVM7CisgICAg
ICBjYXNlIERYR0lfRk9STUFUX0E4X1VOT1JNOgorICAgICAgICByZXR1cm4gR0xfQUxQSEE4X0VY
VDsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNOgorICAgICAgICByZXR1cm4gR0xf
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JD
Ml9VTk9STToKKyAgICAgICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5H
TEU7CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STToKKyAgICAgICAgcmV0dXJuIEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU7CisgICAgICBjYXNlIERYR0lfRk9STUFU
X1IzMkczMkIzMkEzMl9GTE9BVDoKKyAgICAgICAgcmV0dXJuIEdMX1JHQkEzMkZfRVhUOworICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQ6CisgICAgICAgIHJldHVybiBHTF9S
R0IzMkZfRVhUOworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6Cisg
ICAgICAgIHJldHVybiBHTF9SR0JBMTZGX0VYVDsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhH
OFI4QThfVU5PUk06CisgICAgICAgIHJldHVybiBHTF9CR1JBOF9FWFQ7CisgICAgICBjYXNlIERY
R0lfRk9STUFUX1I4X1VOT1JNOgorICAgICAgICByZXR1cm4gR0xfUjhfRVhUOworICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNOgorICAgICAgICByZXR1cm4gR0xfUkc4X0VYVDsKKyAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X0ZMT0FUOgorICAgICAgICByZXR1cm4gR0xfUjE2Rl9F
WFQ7CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9GTE9BVDoKKyAgICAgICAgcmV0dXJu
IEdMX1JHMTZGX0VYVDsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDE2X1VOT1JNOgorICAgICAg
ICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UMTY7CisgICAgICBjYXNlIERYR0lfRk9STUFUX0Qy
NF9VTk9STV9TOF9VSU5UOgorICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7
CisgICAgICBjYXNlIERYR0lfRk9STUFUX1VOS05PV046CisgICAgICAgIHJldHVybiBHTF9OT05F
OworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gR0xfUkdCQThfT0VTOworfQorCit9CisKK25hbWVzcGFjZSBnbF9kM2QxMQoreworCitE
WEdJX0ZPUk1BVCBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdMZW51bSBmb3JtYXQpCit7Cisg
ICAgc3dpdGNoIChmb3JtYXQpCisgICAgeworICAgICAgY2FzZSBHTF9SR0JBNDoKKyAgICAgIGNh
c2UgR0xfUkdCNV9BMToKKyAgICAgIGNhc2UgR0xfUkdCQThfT0VTOgorICAgICAgY2FzZSBHTF9S
R0I1NjU6CisgICAgICBjYXNlIEdMX1JHQjhfT0VTOgorICAgICAgICByZXR1cm4gRFhHSV9GT1JN
QVRfUjhHOEI4QThfVU5PUk07CisgICAgICBjYXNlIEdMX0JHUkE4X0VYVDoKKyAgICAgICAgcmV0
dXJuIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOworICAgICAgY2FzZSBHTF9ERVBUSF9DT01Q
T05FTlQxNjoKKyAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0QxNl9VTk9STTsKKyAgICAgIGNh
c2UgR0xfU1RFTkNJTF9JTkRFWDg6CisgICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VT
OgorICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ7CisgICAgICBk
ZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBEWEdJ
X0ZPUk1BVF9SOEc4QjhBOF9VTk9STTsKK30KKworRFhHSV9GT1JNQVQgQ29udmVydFRleHR1cmVG
b3JtYXQoR0xlbnVtIGludGVybmFsZm9ybWF0KQoreworICAgIHN3aXRjaCAoaW50ZXJuYWxmb3Jt
YXQpCisgICAgeworICAgICAgY2FzZSBHTF9SR0I1NjU6CisgICAgICBjYXNlIEdMX1JHQkE0Ogor
ICAgICAgY2FzZSBHTF9SR0I1X0ExOgorICAgICAgY2FzZSBHTF9SR0I4X09FUzoKKyAgICAgIGNh
c2UgR0xfUkdCQThfT0VTOgorICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0VYVDoKKyAgICAgIGNh
c2UgR0xfTFVNSU5BTkNFOF9BTFBIQThfRVhUOgorICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRf
UjhHOEI4QThfVU5PUk07CisgICAgICBjYXNlIEdMX0FMUEhBOF9FWFQ6CisgICAgICAgIHJldHVy
biBEWEdJX0ZPUk1BVF9BOF9VTk9STTsKKyAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNU
Q19EWFQxX0VYVDoKKyAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6
CisgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9CQzFfVU5PUk07CisgICAgICBjYXNlIEdMX0NP
TVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6CisgICAgICAgIHJldHVybiBEWEdJX0ZPUk1B
VF9CQzJfVU5PUk07CisgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5H
TEU6CisgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9CQzNfVU5PUk07CisgICAgICBjYXNlIEdM
X1JHQkEzMkZfRVhUOgorICAgICAgY2FzZSBHTF9BTFBIQTMyRl9FWFQ6CisgICAgICBjYXNlIEdM
X0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQ6CisgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMzJH
MzJCMzJBMzJfRkxPQVQ7CisgICAgICBjYXNlIEdMX1JHQjMyRl9FWFQ6CisgICAgICBjYXNlIEdM
X0xVTUlOQU5DRTMyRl9FWFQ6CisgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJB
MzJfRkxPQVQ7CisgICAgICBjYXNlIEdMX1JHQkExNkZfRVhUOgorICAgICAgY2FzZSBHTF9BTFBI
QTE2Rl9FWFQ6CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6CisgICAgICBj
YXNlIEdMX1JHQjE2Rl9FWFQ6CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6CisgICAg
ICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ7CisgICAgICBjYXNlIEdM
X0JHUkE4X0VYVDoKKyAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOwor
ICAgICAgY2FzZSBHTF9SOF9FWFQ6CisgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SOF9VTk9S
TTsKKyAgICAgIGNhc2UgR0xfUkc4X0VYVDoKKyAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1I4
RzhfVU5PUk07CisgICAgICBjYXNlIEdMX1IxNkZfRVhUOgorICAgICAgICByZXR1cm4gRFhHSV9G
T1JNQVRfUjE2X0ZMT0FUOworICAgICAgY2FzZSBHTF9SRzE2Rl9FWFQ6CisgICAgICAgIHJldHVy
biBEWEdJX0ZPUk1BVF9SMTZHMTZfRkxPQVQ7CisgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVO
VDE2OgorICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfRDE2X1VOT1JNOworICAgICAgY2FzZSBH
TF9ERVBUSF9DT01QT05FTlQzMl9PRVM6CisgICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhf
T0VTOgorICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ7CisgICAg
ICBjYXNlIEdMX05PTkU6CisgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9VTktOT1dOOworICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
RFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk07Cit9CisKK30KKworbmFtZXNwYWNlIGQzZDExCit7
CisKK3ZvaWQgU2V0UG9zaXRpb25UZXhDb29yZFZlcnRleChQb3NpdGlvblRleENvb3JkVmVydGV4
KiB2ZXJ0ZXgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHUsIGZsb2F0IHYpCit7CisgICAgdmVy
dGV4LT54ID0geDsKKyAgICB2ZXJ0ZXgtPnkgPSB5OworICAgIHZlcnRleC0+dSA9IHU7CisgICAg
dmVydGV4LT52ID0gdjsKK30KKwordm9pZCBTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgoUG9z
aXRpb25EZXB0aENvbG9yVmVydGV4KiB2ZXJ0ZXgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHos
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6Q29sb3IgJmNvbG9y
KQoreworICAgIHZlcnRleC0+eCA9IHg7CisgICAgdmVydGV4LT55ID0geTsKKyAgICB2ZXJ0ZXgt
PnogPSB6OworICAgIHZlcnRleC0+ciA9IGNvbG9yLnJlZDsKKyAgICB2ZXJ0ZXgtPmcgPSBjb2xv
ci5ncmVlbjsKKyAgICB2ZXJ0ZXgtPmIgPSBjb2xvci5ibHVlOworICAgIHZlcnRleC0+YSA9IGNv
bG9yLmFscGhhOworfQorCitzaXplX3QgQ29tcHV0ZVBpeGVsU2l6ZUJpdHMoRFhHSV9GT1JNQVQg
Zm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjFfVU5PUk06CisgICAgICAgIHJldHVybiAxOworCisgICAgICBjYXNlIERYR0lfRk9S
TUFUX0E4X1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOF9TSU5UOgorICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9SOF9TTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVFlQRUxF
U1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1VJTlQ6CisgICAgICBjYXNlIERYR0lfRk9S
TUFUX1I4X1VOT1JNOgorICAgICAgICByZXR1cm4gODsKKworICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9CNUc1UjVBMV9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjVHNlI1X1VOT1JNOgor
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZfVU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFU
X1IxNl9GTE9BVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X1NJTlQ6CisgICAgICBjYXNl
IERYR0lfRk9STUFUX1IxNl9TTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X1RZUEVM
RVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfVUlOVDoKKyAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjE2X1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1NJTlQ6CisgICAg
ICBjYXNlIERYR0lfRk9STUFUX1I4RzhfU05PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX1I4
RzhfVFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfVUlOVDoKKyAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfUjhHOF9VTk9STToKKyAgICAgICAgcmV0dXJuIDE2OworCisgICAgICBj
YXNlIERYR0lfRk9STUFUX0I4RzhSOFg4X1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9COEc4UjhYOF9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4WDhfVU5PUk1f
U1JHQjoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ6CisgICAgICBj
YXNlIERYR0lfRk9STUFUX0QzMl9GTE9BVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZM
T0FUX1M4WDI0X1VJTlQ6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0c4UjhfRzhCOF9VTk9STToK
KyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjEwRzEwQjEwX1hSX0JJQVNfQTJfVU5PUk06CisgICAg
ICBjYXNlIERYR0lfRk9STUFUX1IxMEcxMEIxMEEyX1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SMTBHMTBCMTBBMl9VSU5UOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTBHMTBC
MTBBMl9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjExRzExQjEwX0ZMT0FUOgorICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfRkxPQVQ6CisgICAgICBjYXNlIERYR0lfRk9STUFU
X1IxNkcxNl9TSU5UOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfU05PUk06CisgICAg
ICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjE2RzE2X1VJTlQ6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9VTk9STToKKyAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjI0X1VOT1JNX1g4X1RZUEVMRVNTOgorICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9SMjRHOF9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyX0ZM
T0FUOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJfRkxPQVRfWDhYMjRfVFlQRUxFU1M6Cisg
ICAgICBjYXNlIERYR0lfRk9STUFUX1IzMl9TSU5UOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
MzJfVFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMl9VSU5UOgorICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9SOEc4X0I4RzhfVU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX1I4
RzhCOEE4X1NJTlQ6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1NOT1JNOgorICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjhHOEI4QThfVUlOVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5P
Uk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNX1NSR0I6CisgICAgICBj
YXNlIERYR0lfRk9STUFUX0I4RzhSOEE4X1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9COEc4UjhBOF9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk1f
U1JHQjoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjlHOUI5RTVfU0hBUkVERVhQOgorICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9YMjRfVFlQRUxFU1NfRzhfVUlOVDoKKyAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfWDMyX1RZUEVMRVNTX0c4WDI0X1VJTlQ6CisgICAgICAgIHJldHVybiAzMjsKKworICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6CisgICAgICBjYXNlIERYR0lf
Rk9STUFUX1IxNkcxNkIxNkExNl9TSU5UOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZC
MTZBMTZfU05PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9UWVBFTEVT
UzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1VJTlQ6CisgICAgICBjYXNl
IERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjMyRzMyX0ZMT0FUOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJfU0lOVDoKKyAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyX1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9SMzJHMzJfVUlOVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzhYMjRfVFlQRUxFU1M6
CisgICAgICAgIHJldHVybiA2NDsKKworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJf
RkxPQVQ6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9TSU5UOgorICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfVFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFU
X1IzMkczMkIzMl9VSU5UOgorICAgICAgICByZXR1cm4gOTY7CisKKyAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJC
MzJBMzJfU0lOVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX1RZUEVMRVNT
OgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfVUlOVDoKKyAgICAgICAgcmV0
dXJuIDEyODsKKworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVFlQRUxFU1M6CisgICAgICBj
YXNlIERYR0lfRk9STUFUX0JDMV9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VO
T1JNX1NSR0I6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9TTk9STToKKyAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkM0X1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVU5P
Uk06CisgICAgICAgIHJldHVybiA0OworCisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9UWVBF
TEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNOgorICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9CQzJfVU5PUk1fU1JHQjoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1RZUEVM
RVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk06CisgICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDM19VTk9STV9TUkdCOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfU05PUk06
CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfQkM1X1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1NGMTY6CisgICAg
ICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFU
X0JDNkhfVUYxNjoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1RZUEVMRVNTOgorICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19V
Tk9STV9TUkdCOgorICAgICAgICByZXR1cm4gODsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorfQorCitzaXplX3QgQ29tcHV0ZUJsb2NrU2l6ZUJpdHMoRFhHSV9G
T1JNQVQgZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkMxX1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5P
Uk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9STV9TUkdCOgorICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9CQzRfU05PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9UWVBFTEVT
UzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzJfVFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STToKKyAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNX1NSR0I6CisgICAgICBjYXNlIERYR0lfRk9S
TUFUX0JDM19UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNOgorICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk1fU1JHQjoKKyAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkM1X1NOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfVFlQRUxFU1M6CisgICAg
ICBjYXNlIERYR0lfRk9STUFUX0JDNV9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2
SF9TRjE2OgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1RZUEVMRVNTOgorICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzZIX1VGMTY6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19UWVBF
TEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1VOT1JNOgorICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9CQzdfVU5PUk1fU1JHQjoKKyAgICAgICAgcmV0dXJuIENvbXB1dGVQaXhlbFNpemVC
aXRzKGZvcm1hdCkgKiAxNjsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworYm9vbCBJc0NvbXByZXNzZWQoRFhHSV9G
T1JNQVQgZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkMxX1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5P
Uk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9STV9TUkdCOgorICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9CQzRfU05PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9UWVBFTEVT
UzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzJfVFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STToKKyAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNX1NSR0I6CisgICAgICBjYXNlIERYR0lfRk9S
TUFUX0JDM19UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNOgorICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk1fU1JHQjoKKyAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkM1X1NOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfVFlQRUxFU1M6CisgICAg
ICBjYXNlIERYR0lfRk9STUFUX0JDNV9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2
SF9TRjE2OgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1RZUEVMRVNTOgorICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzZIX1VGMTY6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19UWVBF
TEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1VOT1JNOgorICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9CQzdfVU5PUk1fU1JHQjoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICBjYXNl
IERYR0lfRk9STUFUX1VOS05PV046CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKK3Vuc2lnbmVkIGludCBHZXRUZXh0dXJlRm9ybWF0RGltZW5zaW9uQWxpZ25tZW50KERY
R0lfRk9STUFUIGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICB7CisgICAgICBj
YXNlIERYR0lfRk9STUFUX0JDMV9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMx
X1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk1fU1JHQjoKKyAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfQkM0X1NOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVFlQ
RUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9VTk9STToKKyAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkMyX1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk06
CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STV9TUkdCOgorICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9CQzNfVFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STToK
KyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNX1NSR0I6CisgICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDNV9TTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1RZUEVMRVNTOgor
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfVU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFU
X0JDNkhfU0YxNjoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9UWVBFTEVTUzoKKyAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9VRjE2OgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdf
VFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9STToKKyAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkM3X1VOT1JNX1NSR0I6CisgICAgICAgIHJldHVybiA0OworICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9VTktOT1dOOgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICBy
ZXR1cm4gMTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAxOworICAgIH0KK30KKwor
Ym9vbCBJc0RlcHRoU3RlbmNpbEZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpCit7CisgICAgc3dp
dGNoIChmb3JtYXQpCisgICAgeworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVRfUzhY
MjRfVUlOVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FUOgorICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDE2
X1VOT1JNOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9Cit9CisKK0RYR0lfRk9STUFUIEdldERlcHRoVGV4dHVyZUZvcm1h
dChEWEdJX0ZPUk1BVCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpCisgICAgeworICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVRfUzhYMjRfVUlOVDogcmV0dXJuIERYR0lfRk9S
TUFUX1IzMkc4WDI0X1RZUEVMRVNTOworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVQ6
ICAgICAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1IzMl9UWVBFTEVTUzsKKyAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ6ICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMjRH
OF9UWVBFTEVTUzsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDE2X1VOT1JNOiAgICAgICAgICAg
IHJldHVybiBEWEdJX0ZPUk1BVF9SMTZfVFlQRUxFU1M7CisgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOyAgICAgICAgICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfVU5LTk9XTjsKKyAgICB9
Cit9CisKK0RYR0lfRk9STUFUIEdldERlcHRoU2hhZGVyUmVzb3VyY2VGb3JtYXQoRFhHSV9GT1JN
QVQgZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfRDMyX0ZMT0FUX1M4WDI0X1VJTlQ6IHJldHVybiBEWEdJX0ZPUk1BVF9SMzJfRkxP
QVRfWDhYMjRfVFlQRUxFU1M7CisgICAgICBjYXNlIERYR0lfRk9STUFUX0QzMl9GTE9BVDogICAg
ICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjMyX1VJTlQ7CisgICAgICBjYXNlIERYR0lfRk9S
TUFUX0QyNF9VTk9STV9TOF9VSU5UOiAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjI0X1VOT1JNX1g4
X1RZUEVMRVNTOworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZfVU5PUk06ICAgICAgICAgICAg
cmV0dXJuIERYR0lfRk9STUFUX1IxNl9VTk9STTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7ICAgICAgICAgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9VTktOT1dOOworICAgIH0KK30K
KworSFJFU1VMVCBTZXREZWJ1Z05hbWUoSUQzRDExRGV2aWNlQ2hpbGQgKnJlc291cmNlLCBjb25z
dCBjaGFyICpuYW1lKQoreworI2lmIGRlZmluZWQoX0RFQlVHKQorICAgIHJldHVybiByZXNvdXJj
ZS0+U2V0UHJpdmF0ZURhdGEoV0tQRElEX0QzRERlYnVnT2JqZWN0TmFtZSwgc3RybGVuKG5hbWUp
LCBuYW1lKTsKKyNlbHNlCisgICAgcmV0dXJuIFNfT0s7CisjZW5kaWYKK30KKworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9yZW5kZXJlcjExX3V0aWxzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYmM0OGMx
YTEzNWE1ZDg4YTg5YmQ1Njg1NjlmZDZlOWRkNjc3M2VlCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJl
cjExX3V0aWxzLmgKQEAgLTAsMCArMSw5NSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIHJlbmRlcmVy
MTFfdXRpbHMuaDogQ29udmVyc2lvbiBmdW5jdGlvbnMgYW5kIG90aGVyIHV0aWxpdHkgcm91dGlu
ZXMKKy8vIHNwZWNpZmljIHRvIHRoZSBEM0QxMSByZW5kZXJlci4KKworI2lmbmRlZiBMSUJHTEVT
VjJfUkVOREVSRVJfUkVOREVSRVIxMV9VVElMU19ICisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJF
Ul9SRU5ERVJFUjExX1VUSUxTX0gKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgi
CisKK25hbWVzcGFjZSBnbF9kM2QxMQoreworCitEM0QxMV9CTEVORCBDb252ZXJ0QmxlbmRGdW5j
KEdMZW51bSBnbEJsZW5kLCBib29sIGlzQWxwaGEpOworRDNEMTFfQkxFTkRfT1AgQ29udmVydEJs
ZW5kT3AoR0xlbnVtIGdsQmxlbmRPcCk7CitVSU5UOCBDb252ZXJ0Q29sb3JNYXNrKGJvb2wgbWFz
a1JlZCwgYm9vbCBtYXNrR3JlZW4sIGJvb2wgbWFza0JsdWUsIGJvb2wgbWFza0FscGhhKTsKKwor
RDNEMTFfQ1VMTF9NT0RFIENvbnZlcnRDdWxsTW9kZShib29sIGN1bGxFbmFibGVkLCBHTGVudW0g
Y3VsbE1vZGUpOworCitEM0QxMV9DT01QQVJJU09OX0ZVTkMgQ29udmVydENvbXBhcmlzb24oR0xl
bnVtIGNvbXBhcmlzb24pOworRDNEMTFfREVQVEhfV1JJVEVfTUFTSyBDb252ZXJ0RGVwdGhNYXNr
KGJvb2wgZGVwdGhXcml0ZUVuYWJsZWQpOworVUlOVDggQ29udmVydFN0ZW5jaWxNYXNrKEdMdWlu
dCBzdGVuY2lsbWFzayk7CitEM0QxMV9TVEVOQ0lMX09QIENvbnZlcnRTdGVuY2lsT3AoR0xlbnVt
IHN0ZW5jaWxPcCk7CisKK0QzRDExX0ZJTFRFUiBDb252ZXJ0RmlsdGVyKEdMZW51bSBtaW5GaWx0
ZXIsIEdMZW51bSBtYWdGaWx0ZXIsIGZsb2F0IG1heEFuaXNvdHJvcHkpOworRDNEMTFfVEVYVFVS
RV9BRERSRVNTX01PREUgQ29udmVydFRleHR1cmVXcmFwKEdMZW51bSB3cmFwKTsKK0ZMT0FUIENv
bnZlcnRNaW5MT0QoR0xlbnVtIG1pbkZpbHRlciwgdW5zaWduZWQgaW50IGxvZE9mZnNldCk7CitG
TE9BVCBDb252ZXJ0TWF4TE9EKEdMZW51bSBtaW5GaWx0ZXIsIHVuc2lnbmVkIGludCBsb2RPZmZz
ZXQpOworCitEWEdJX0ZPUk1BVCBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdMZW51bSBmb3Jt
YXQpOworRFhHSV9GT1JNQVQgQ29udmVydFRleHR1cmVGb3JtYXQoR0xlbnVtIGZvcm1hdCk7Cit9
CisKK25hbWVzcGFjZSBkM2QxMV9nbAoreworCitHTGVudW0gQ29udmVydEJhY2tCdWZmZXJGb3Jt
YXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKK0dMZW51bSBDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0
KERYR0lfRk9STUFUIGZvcm1hdCk7CitHTGVudW0gQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChE
WEdJX0ZPUk1BVCBmb3JtYXQpOworR0xlbnVtIENvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQo
RFhHSV9GT1JNQVQgZm9ybWF0KTsKKworfQorCituYW1lc3BhY2UgZDNkMTEKK3sKKworc3RydWN0
IFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgKK3sKKyAgICBmbG9hdCB4LCB5OworICAgIGZsb2F0IHUs
IHY7Cit9Owordm9pZCBTZXRQb3NpdGlvblRleENvb3JkVmVydGV4KFBvc2l0aW9uVGV4Q29vcmRW
ZXJ0ZXgqIHZlcnRleCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgdSwgZmxvYXQgdik7CisKK3N0
cnVjdCBQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgKK3sKKyAgICBmbG9hdCB4LCB5LCB6OworICAg
IGZsb2F0IHIsIGcsIGIsIGE7Cit9Owordm9pZCBTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgo
UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KiB2ZXJ0ZXgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0
IHosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6Q29sb3IgJmNv
bG9yKTsKKworc2l6ZV90IENvbXB1dGVQaXhlbFNpemVCaXRzKERYR0lfRk9STUFUIGZvcm1hdCk7
CitzaXplX3QgQ29tcHV0ZUJsb2NrU2l6ZUJpdHMoRFhHSV9GT1JNQVQgZm9ybWF0KTsKKworYm9v
bCBJc0NvbXByZXNzZWQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKK3Vuc2lnbmVkIGludCBHZXRUZXh0
dXJlRm9ybWF0RGltZW5zaW9uQWxpZ25tZW50KERYR0lfRk9STUFUIGZvcm1hdCk7CisKK2Jvb2wg
SXNEZXB0aFN0ZW5jaWxGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKK0RYR0lfRk9STUFUIEdl
dERlcHRoVGV4dHVyZUZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpOworRFhHSV9GT1JNQVQgR2V0
RGVwdGhTaGFkZXJSZXNvdXJjZUZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpOworCitIUkVTVUxU
IFNldERlYnVnTmFtZShJRDNEMTFEZXZpY2VDaGlsZCAqcmVzb3VyY2UsIGNvbnN0IGNoYXIgKm5h
bWUpOworCitpbmxpbmUgYm9vbCBpc0RldmljZUxvc3RFcnJvcihIUkVTVUxUIGVycm9yQ29kZSkK
K3sKKyAgICBzd2l0Y2ggKGVycm9yQ29kZSkKKyAgICB7CisgICAgICBjYXNlIERYR0lfRVJST1Jf
REVWSUNFX0hVTkc6CisgICAgICBjYXNlIERYR0lfRVJST1JfREVWSUNFX1JFTU9WRUQ6CisgICAg
ICBjYXNlIERYR0lfRVJST1JfREVWSUNFX1JFU0VUOgorICAgICAgY2FzZSBEWEdJX0VSUk9SX0RS
SVZFUl9JTlRFUk5BTF9FUlJPUjoKKyAgICAgIGNhc2UgRFhHSV9FUlJPUl9OT1RfQ1VSUkVOVExZ
X0FWQUlMQUJMRToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfUkVO
REVSRVJfUkVOREVSRVIxMV9VVElMU19ICmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvQ2xlYXIxMS5obHNsIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFk
ZXJzL0NsZWFyMTEuaGxzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNDJhYzY5OWI2NmEyMjM5YWRiZjUyNTFmYWFm
M2IzZTRjM2ZlYzVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL0NsZWFyMTEuaGxzbApAQCAtMCww
ICsxLDM4IEBACit2b2lkIFZTX0NsZWFyKCBpbiBmbG9hdDMgIGluUG9zaXRpb24gOiAgICBQT1NJ
VElPTiwgIGluIGZsb2F0NCAgaW5Db2xvciA6IENPTE9SLAorICAgICAgICAgICAgICBvdXQgZmxv
YXQ0IG91dFBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIG91dCBmbG9hdDQgb3V0Q29sb3IgOiBDT0xP
UikKK3sKKyAgICBvdXRQb3NpdGlvbiA9IGZsb2F0NChpblBvc2l0aW9uLCAxLjBmKTsKKyAgICBv
dXRDb2xvciA9IGluQ29sb3I7Cit9CisKKy8vIEFzc3VtZSB3ZSBhcmUgaW4gU000Kywgd2hpY2gg
aGFzIDggY29sb3Igb3V0cHV0cworc3RydWN0IFBTX091dHB1dE11bHRpcGxlCit7CisJZmxvYXQ0
IGNvbG9yMCA6IFNWX1RBUkdFVDA7CisJZmxvYXQ0IGNvbG9yMSA6IFNWX1RBUkdFVDE7CisJZmxv
YXQ0IGNvbG9yMiA6IFNWX1RBUkdFVDI7CisJZmxvYXQ0IGNvbG9yMyA6IFNWX1RBUkdFVDM7CisJ
ZmxvYXQ0IGNvbG9yNCA6IFNWX1RBUkdFVDQ7CisJZmxvYXQ0IGNvbG9yNSA6IFNWX1RBUkdFVDU7
CisJZmxvYXQ0IGNvbG9yNiA6IFNWX1RBUkdFVDY7CisJZmxvYXQ0IGNvbG9yNyA6IFNWX1RBUkdF
VDc7Cit9OworCitQU19PdXRwdXRNdWx0aXBsZSBQU19DbGVhck11bHRpcGxlKGluIGZsb2F0NCBp
blBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0NCBpbkNvbG9yIDogQ09MT1IpCit7CisJ
UFNfT3V0cHV0TXVsdGlwbGUgb3V0Q29sb3I7CisJb3V0Q29sb3IuY29sb3IwID0gaW5Db2xvcjsK
KwlvdXRDb2xvci5jb2xvcjEgPSBpbkNvbG9yOworCW91dENvbG9yLmNvbG9yMiA9IGluQ29sb3I7
CisJb3V0Q29sb3IuY29sb3IzID0gaW5Db2xvcjsKKwlvdXRDb2xvci5jb2xvcjQgPSBpbkNvbG9y
OworCW91dENvbG9yLmNvbG9yNSA9IGluQ29sb3I7CisJb3V0Q29sb3IuY29sb3I2ID0gaW5Db2xv
cjsKKwlvdXRDb2xvci5jb2xvcjcgPSBpbkNvbG9yOworCXJldHVybiBvdXRDb2xvcjsKK30KKwor
ZmxvYXQ0IFBTX0NsZWFyU2luZ2xlKGluIGZsb2F0NCBpblBvc2l0aW9uIDogU1ZfUG9zaXRpb24s
IGluIGZsb2F0NCBpbkNvbG9yIDogQ09MT1IpIDogU1ZfVGFyZ2V0MAoreworCXJldHVybiBpbkNv
bG9yOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL1Bhc3N0aHJvdWdoMTEuaGxzbCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9QYXNzdGhy
b3VnaDExLmhsc2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDNiNzgwMWVmYzFmZWY2ZTIzOTE4MDA2N2RkMDIzNjk5
ODU1YjlhMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9QYXNzdGhyb3VnaDExLmhsc2wKQEAgLTAs
MCArMSwyOSBAQAorVGV4dHVyZTJEIFRleHR1cmUgOiByZWdpc3Rlcih0MCk7CitTYW1wbGVyU3Rh
dGUgU2FtcGxlciA6IHJlZ2lzdGVyKHMwKTsKKwordm9pZCBWU19QYXNzdGhyb3VnaCggaW4gZmxv
YXQyICBpblBvc2l0aW9uIDogICAgUE9TSVRJT04sICBpbiBmbG9hdDIgIGluVGV4Q29vcmQgOiBU
RVhDT09SRDAsCisgICAgICAgICAgICAgICAgICAgIG91dCBmbG9hdDQgb3V0UG9zaXRpb24gOiBT
Vl9QT1NJVElPTiwgb3V0IGZsb2F0MiBvdXRUZXhDb29yZCA6IFRFWENPT1JEMCkKK3sKKyAgICBv
dXRQb3NpdGlvbiA9IGZsb2F0NChpblBvc2l0aW9uLCAwLjBmLCAxLjBmKTsKKyAgICBvdXRUZXhD
b29yZCA9IGluVGV4Q29vcmQ7Cit9CisKK2Zsb2F0NCBQU19QYXNzdGhyb3VnaFJHQkEoaW4gZmxv
YXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhD
T09SRDApIDogU1ZfVEFSR0VUMAoreworICAgIHJldHVybiBUZXh0dXJlLlNhbXBsZShTYW1wbGVy
LCBpblRleENvb3JkKS5yZ2JhOworfQorCitmbG9hdDQgUFNfUGFzc3Rocm91Z2hSR0IoaW4gZmxv
YXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhD
T09SRDApIDogU1ZfVEFSR0VUMAoreworICAgIHJldHVybiBmbG9hdDQoVGV4dHVyZS5TYW1wbGUo
U2FtcGxlciwgaW5UZXhDb29yZCkucmdiLCAxLjBmKTsKK30KKworZmxvYXQ0IFBTX1Bhc3N0aHJv
dWdoTHVtKGluIGZsb2F0NCBpblBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRl
eENvb3JkIDogVEVYQ09PUkQwKSA6IFNWX1RBUkdFVDAKK3sKKyAgICByZXR1cm4gZmxvYXQ0KFRl
eHR1cmUuU2FtcGxlKFNhbXBsZXIsIGluVGV4Q29vcmQpLnJyciwgMS4wZik7Cit9CisKK2Zsb2F0
NCBQU19QYXNzdGhyb3VnaEx1bUFscGhhKGluIGZsb2F0NCBpblBvc2l0aW9uIDogU1ZfUE9TSVRJ
T04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNWX1RBUkdFVDAKK3sKKyAg
ICByZXR1cm4gVGV4dHVyZS5TYW1wbGUoU2FtcGxlciwgaW5UZXhDb29yZCkucnJyYTsKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcjExdnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcjEx
dnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi42YmM3NDMxMjZlZDA2YzhmNjc1OGUxMGU1ZDE3NzIwMTQ5NWM5NmRi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyMTF2cy5oCkBAIC0wLDAgKzEs
MTMxIEBACisjaWYgMA0KKy8vDQorLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBT
aGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0DQorLy8NCisvLw0KKy8vLw0KKy8vDQorLy8g
SW5wdXQgc2lnbmF0dXJlOg0KKy8vDQorLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBN
YXNrIFJlZ2lzdGVyIFN5c1ZhbHVlICBGb3JtYXQgICBVc2VkDQorLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tDQorLy8g
UE9TSVRJT04gICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAwICAgICBOT05FICAgZmxv
YXQgICB4eXogDQorLy8gQ09MT1IgICAgICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAx
ICAgICBOT05FICAgZmxvYXQgICB4eXp3DQorLy8NCisvLw0KKy8vIE91dHB1dCBzaWduYXR1cmU6
DQorLy8NCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lz
VmFsdWUgIEZvcm1hdCAgIFVzZWQNCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0t
LS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0NCisvLyBTVl9QT1NJVElPTiAgICAg
ICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgICBmbG9hdCAgIHh5encNCisvLyBD
T0xPUiAgICAgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDEgICAgIE5PTkUgICBmbG9h
dCAgIHh5encNCisvLw0KK3ZzXzRfMA0KK2RjbF9pbnB1dCB2MC54eXoNCitkY2xfaW5wdXQgdjEu
eHl6dw0KK2RjbF9vdXRwdXRfc2l2IG8wLnh5encsIHBvc2l0aW9uDQorZGNsX291dHB1dCBvMS54
eXp3DQorbW92IG8wLnh5eiwgdjAueHl6eA0KK21vdiBvMC53LCBsKDEuMDAwMDAwKQ0KK21vdiBv
MS54eXp3LCB2MS54eXp3DQorcmV0IA0KKy8vIEFwcHJveGltYXRlbHkgNCBpbnN0cnVjdGlvbiBz
bG90cyB1c2VkDQorI2VuZGlmDQorDQorY29uc3QgQllURSBnX1ZTX0NsZWFyW10gPQ0KK3sNCisg
ICAgIDY4LCAgODgsICA2NiwgIDY3LCAgOTcsICAgNSwgDQorICAgICAxMywgMTYzLCAxNjAsIDI1
NCwgIDk1LCAxMjcsIA0KKyAgICAgMzAsIDE5NCwgMTIxLCAxNDQsIDIzNiwgMTg1LCANCisgICAg
IDU5LCAgMjksICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgICA0OCwgICAyLCAgIDAsICAgMCwg
ICA1LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDUyLCAgIDAsICAgMCwgICAwLCANCisgICAgMTQw
LCAgIDAsICAgMCwgICAwLCAyMjAsICAgMCwgDQorICAgICAgMCwgICAwLCAgNDgsICAgMSwgICAw
LCAgIDAsIA0KKyAgICAxODAsICAgMSwgICAwLCAgIDAsICA4MiwgIDY4LCANCisgICAgIDY5LCAg
NzAsICA4MCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgIDI4LCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgNCwgDQorICAgIDI1NCwgMjU1LCAgIDAsICAgMSwgICAwLCAgIDAs
IA0KKyAgICAgMjgsICAgMCwgICAwLCAgIDAsICA3NywgMTA1LCANCisgICAgIDk5LCAxMTQsIDEx
MSwgMTE1LCAxMTEsIDEwMiwgDQorICAgIDExNiwgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsIA0K
KyAgICAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCANCisgICAgMTA0LCAgOTcsIDEwMCwg
MTAxLCAxMTQsICAzMiwgDQorICAgICA2NywgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIA0KKyAg
ICAxMDEsIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCANCisgICAgIDQ4LCAgNDYsICA1NywgIDUw
LCAgNDgsICA0OCwgDQorICAgICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsIA0KKyAgICAg
IDAsIDE3MSwgIDczLCAgODMsICA3MSwgIDc4LCANCisgICAgIDcyLCAgIDAsICAgMCwgICAwLCAg
IDIsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgNTYs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICA3LCAgIDcsICAgMCwgICAwLCANCisgICAgIDY1LCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDMsICAgMCwg
ICAwLCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAxNSwgIDE1LCAgIDAsICAgMCwg
DQorICAgICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsIA0KKyAgICAgNzksICA3OCwgICAw
LCAgNjcsICA3OSwgIDc2LCANCisgICAgIDc5LCAgODIsICAgMCwgMTcxLCAgNzksICA4MywgDQor
ICAgICA3MSwgIDc4LCAgNzYsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDIsICAgMCwgICAwLCAg
IDAsICAgOCwgICAwLCANCisgICAgICAwLCAgIDAsICA1NiwgICAwLCAgIDAsICAgMCwgDQorICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAzLCAgIDAs
ICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgMTUsICAgMCwgDQorICAgICAg
MCwgICAwLCAgNjgsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgDQorICAgICAgMSwg
ICAwLCAgIDAsICAgMCwgIDE1LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDgzLCAgODYsICA5NSwg
IDgwLCANCisgICAgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgDQorICAgICA3OCwgICAw
LCAgNjcsICA3OSwgIDc2LCAgNzksIA0KKyAgICAgODIsICAgMCwgMTcxLCAxNzEsICA4MywgIDcy
LCANCisgICAgIDY4LCAgODIsIDEyNCwgICAwLCAgIDAsICAgMCwgDQorICAgICA2NCwgICAwLCAg
IDEsICAgMCwgIDMxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDk1LCAgIDAsICAgMCwgICAzLCAN
CisgICAgMTE0LCAgMTYsICAxNiwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgOTUs
ICAgMCwgICAwLCAgIDMsIA0KKyAgICAyNDIsICAxNiwgIDE2LCAgIDAsICAgMSwgICAwLCANCisg
ICAgICAwLCAgIDAsIDEwMywgICAwLCAgIDAsICAgNCwgDQorICAgIDI0MiwgIDMyLCAgMTYsICAg
MCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCisgICAg
MTAxLCAgIDAsICAgMCwgICAzLCAyNDIsICAzMiwgDQorICAgICAxNiwgICAwLCAgIDEsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgNTQsICAgMCwgICAwLCAgIDUsIDExNCwgIDMyLCANCisgICAgIDE2
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICA3MCwgIDE4LCAgMTYsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDU0LCAgIDAsICAgMCwgICA1LCANCisgICAgMTMwLCAg
MzIsICAxNiwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDEsICA2NCwgICAwLCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgMTI4LCAgNjMsICA1NCwgICAwLCANCisgICAgICAwLCAgIDUs
IDI0MiwgIDMyLCAgMTYsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDcwLCAgMzAs
IA0KKyAgICAgMTYsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCisgICAgIDYyLCAgIDAsICAg
MCwgICAxLCAgODMsICA4NCwgDQorICAgICA2NSwgIDg0LCAxMTYsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDEsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgNCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDANCit9Ow0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9j
b21waWxlZC9jbGVhcm11bHRpcGxlMTFwcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFybXVsdGlwbGUx
MXBzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZTRiNDQ1YWMzZjZhNzFlNGM1ZTIxYWRjNGJhZTlhZmRiOTI4Mzll
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcm11bHRpcGxlMTFwcy5oCkBA
IC0wLDAgKzEsMTk2IEBACisjaWYgMA0KKy8vDQorLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAo
UikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0DQorLy8NCisvLw0KKy8vLw0K
Ky8vDQorLy8gSW5wdXQgc2lnbmF0dXJlOg0KKy8vDQorLy8gTmFtZSAgICAgICAgICAgICAgICAg
SW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlICBGb3JtYXQgICBVc2VkDQorLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0gLS0t
LS0tDQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAg
UE9TICAgZmxvYXQgICAgICAgDQorLy8gQ09MT1IgICAgICAgICAgICAgICAgICAgIDAgICB4eXp3
ICAgICAgICAxICAgICBOT05FICAgZmxvYXQgICB4eXp3DQorLy8NCisvLw0KKy8vIE91dHB1dCBz
aWduYXR1cmU6DQorLy8NCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVn
aXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAgIFVzZWQNCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAt
LS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0NCisvLyBTVl9UQVJH
RVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICBmbG9hdCAgIHh5
encNCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMSAgIHh5encgICAgICAgIDEgICBUQVJH
RVQgICBmbG9hdCAgIHh5encNCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMiAgIHh5encg
ICAgICAgIDIgICBUQVJHRVQgICBmbG9hdCAgIHh5encNCisvLyBTVl9UQVJHRVQgICAgICAgICAg
ICAgICAgMyAgIHh5encgICAgICAgIDMgICBUQVJHRVQgICBmbG9hdCAgIHh5encNCisvLyBTVl9U
QVJHRVQgICAgICAgICAgICAgICAgNCAgIHh5encgICAgICAgIDQgICBUQVJHRVQgICBmbG9hdCAg
IHh5encNCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgNSAgIHh5encgICAgICAgIDUgICBU
QVJHRVQgICBmbG9hdCAgIHh5encNCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgNiAgIHh5
encgICAgICAgIDYgICBUQVJHRVQgICBmbG9hdCAgIHh5encNCisvLyBTVl9UQVJHRVQgICAgICAg
ICAgICAgICAgNyAgIHh5encgICAgICAgIDcgICBUQVJHRVQgICBmbG9hdCAgIHh5encNCisvLw0K
K3BzXzRfMA0KK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHl6dw0KK2RjbF9vdXRwdXQgbzAueHl6
dw0KK2RjbF9vdXRwdXQgbzEueHl6dw0KK2RjbF9vdXRwdXQgbzIueHl6dw0KK2RjbF9vdXRwdXQg
bzMueHl6dw0KK2RjbF9vdXRwdXQgbzQueHl6dw0KK2RjbF9vdXRwdXQgbzUueHl6dw0KK2RjbF9v
dXRwdXQgbzYueHl6dw0KK2RjbF9vdXRwdXQgbzcueHl6dw0KK21vdiBvMC54eXp3LCB2MS54eXp3
DQorbW92IG8xLnh5encsIHYxLnh5encNCittb3YgbzIueHl6dywgdjEueHl6dw0KK21vdiBvMy54
eXp3LCB2MS54eXp3DQorbW92IG80Lnh5encsIHYxLnh5encNCittb3YgbzUueHl6dywgdjEueHl6
dw0KK21vdiBvNi54eXp3LCB2MS54eXp3DQorbW92IG83Lnh5encsIHYxLnh5encNCityZXQgDQor
Ly8gQXBwcm94aW1hdGVseSA5IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCisjZW5kaWYNCisNCitj
b25zdCBCWVRFIGdfUFNfQ2xlYXJNdWx0aXBsZVtdID0NCit7DQorICAgICA2OCwgIDg4LCAgNjYs
ICA2NywgIDkyLCAgNTQsIA0KKyAgICAxMjAsIDEwNSwgMTY2LCAxOTYsIDEzMiwgMTU4LCANCisg
ICAgMjA5LCAgMzMsIDE4NSwgMTIyLCAgIDgsIDE4OSwgDQorICAgIDE0NSwgMTE0LCAgIDEsICAg
MCwgICAwLCAgIDAsIA0KKyAgICAgODgsICAgMywgICAwLCAgIDAsICAgNSwgICAwLCANCisgICAg
ICAwLCAgIDAsICA1MiwgICAwLCAgIDAsICAgMCwgDQorICAgIDE0MCwgICAwLCAgIDAsICAgMCwg
MjI0LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgMTg4LCAgIDEsICAgMCwgICAwLCANCisgICAgMjIw
LCAgIDIsICAgMCwgICAwLCAgODIsICA2OCwgDQorICAgICA2OSwgIDcwLCAgODAsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAyOCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDQsIA0KKyAgICAyNTUsIDI1NSwgICAwLCAgIDEsICAgMCwgICAwLCANCisgICAgIDI4LCAgIDAs
ICAgMCwgICAwLCAgNzcsIDEwNSwgDQorICAgICA5OSwgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIs
IA0KKyAgICAxMTYsICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCANCisgICAgIDcyLCAgNzYsICA4
MywgIDc2LCAgMzIsICA4MywgDQorICAgIDEwNCwgIDk3LCAxMDAsIDEwMSwgMTE0LCAgMzIsIA0K
KyAgICAgNjcsIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCANCisgICAgMTAxLCAxMTQsICAzMiwg
IDU3LCAgNDYsICA1MSwgDQorICAgICA0OCwgIDQ2LCAgNTcsICA1MCwgIDQ4LCAgNDgsIA0KKyAg
ICAgNDYsICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCANCisgICAgICAwLCAxNzEsICA3MywgIDgz
LCAgNzEsICA3OCwgDQorICAgICA3NiwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsIA0KKyAgICAg
IDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCANCisgICAgIDU2LCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDMs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAs
ICAgMCwgDQorICAgICA2OCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAg
MCwgDQorICAgICAgMCwgICAwLCAgMTUsICAxNSwgICAwLCAgIDAsIA0KKyAgICAgODMsICA4Niwg
IDk1LCAgODAsICA3OSwgIDgzLCANCisgICAgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAgMCwg
DQorICAgICA2NywgIDc5LCAgNzYsICA3OSwgIDgyLCAgIDAsIA0KKyAgICAxNzEsIDE3MSwgIDc5
LCAgODMsICA3MSwgIDc4LCANCisgICAgMjEyLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgDQor
ICAgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsIA0KKyAgICAyMDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAg
ICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDE1LCAgIDAs
ICAgMCwgICAwLCANCisgICAgMjAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQorICAgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDMsICAgMCwgICAwLCAgIDAsICAg
MSwgICAwLCANCisgICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQorICAgIDIwMCwg
ICAwLCAgIDAsICAgMCwgICAyLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCANCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgDQorICAgICAgMCwgICAw
LCAgMTUsICAgMCwgICAwLCAgIDAsIA0KKyAgICAyMDAsICAgMCwgICAwLCAgIDAsICAgMywgICAw
LCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMywgICAwLCAg
IDAsICAgMCwgICAzLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDE1LCAgIDAsICAgMCwgICAwLCAN
CisgICAgMjAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDMsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCANCisg
ICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQorICAgIDIwMCwgICAwLCAgIDAsICAg
MCwgICA1LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAg
ICAzLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgDQorICAgICAgMCwgICAwLCAgMTUsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAyMDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCANCisgICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMywgICAwLCAgIDAsICAgMCwgICA2
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDE1LCAgIDAsICAgMCwgICAwLCANCisgICAgMjAwLCAg
IDAsICAgMCwgICAwLCAgIDcsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDMsICAgMCwgICAwLCAgIDAsICAgNywgICAwLCANCisgICAgICAwLCAgIDAs
ICAxNSwgICAwLCAgIDAsICAgMCwgDQorICAgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIs
IA0KKyAgICAgNzEsICA2OSwgIDg0LCAgIDAsIDE3MSwgMTcxLCANCisgICAgIDgzLCAgNzIsICA2
OCwgIDgyLCAgMjQsICAgMSwgDQorICAgICAgMCwgICAwLCAgNjQsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAgNzAsICAgMCwgICAwLCAgIDAsICA5OCwgIDE2LCANCisgICAgICAwLCAgIDMsIDI0Miwg
IDE2LCAgMTYsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgMTAxLCAgIDAsIA0KKyAg
ICAgIDAsICAgMywgMjQyLCAgMzIsICAxNiwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAw
LCAxMDEsICAgMCwgDQorICAgICAgMCwgICAzLCAyNDIsICAzMiwgIDE2LCAgIDAsIA0KKyAgICAg
IDEsICAgMCwgICAwLCAgIDAsIDEwMSwgICAwLCANCisgICAgICAwLCAgIDMsIDI0MiwgIDMyLCAg
MTYsICAgMCwgDQorICAgICAgMiwgICAwLCAgIDAsICAgMCwgMTAxLCAgIDAsIA0KKyAgICAgIDAs
ICAgMywgMjQyLCAgMzIsICAxNiwgICAwLCANCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAxMDEs
ICAgMCwgDQorICAgICAgMCwgICAzLCAyNDIsICAzMiwgIDE2LCAgIDAsIA0KKyAgICAgIDQsICAg
MCwgICAwLCAgIDAsIDEwMSwgICAwLCANCisgICAgICAwLCAgIDMsIDI0MiwgIDMyLCAgMTYsICAg
MCwgDQorICAgICAgNSwgICAwLCAgIDAsICAgMCwgMTAxLCAgIDAsIA0KKyAgICAgIDAsICAgMywg
MjQyLCAgMzIsICAxNiwgICAwLCANCisgICAgICA2LCAgIDAsICAgMCwgICAwLCAxMDEsICAgMCwg
DQorICAgICAgMCwgICAzLCAyNDIsICAzMiwgIDE2LCAgIDAsIA0KKyAgICAgIDcsICAgMCwgICAw
LCAgIDAsICA1NCwgICAwLCANCisgICAgICAwLCAgIDUsIDI0MiwgIDMyLCAgMTYsICAgMCwgDQor
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDcwLCAgMzAsIA0KKyAgICAgMTYsICAgMCwgICAxLCAg
IDAsICAgMCwgICAwLCANCisgICAgIDU0LCAgIDAsICAgMCwgICA1LCAyNDIsICAzMiwgDQorICAg
ICAxNiwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgNzAsICAzMCwgIDE2LCAgIDAs
ICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICA1NCwgICAwLCAgIDAsICAgNSwgDQorICAgIDI0
MiwgIDMyLCAgMTYsICAgMCwgICAyLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDcwLCAgMzAsICAx
NiwgICAwLCANCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgNTQsICAgMCwgDQorICAgICAgMCwg
ICA1LCAyNDIsICAzMiwgIDE2LCAgIDAsIA0KKyAgICAgIDMsICAgMCwgICAwLCAgIDAsICA3MCwg
IDMwLCANCisgICAgIDE2LCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgICA1NCwgICAw
LCAgIDAsICAgNSwgMjQyLCAgMzIsIA0KKyAgICAgMTYsICAgMCwgICA0LCAgIDAsICAgMCwgICAw
LCANCisgICAgIDcwLCAgMzAsICAxNiwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAwLCAg
NTQsICAgMCwgICAwLCAgIDUsIA0KKyAgICAyNDIsICAzMiwgIDE2LCAgIDAsICAgNSwgICAwLCAN
CisgICAgICAwLCAgIDAsICA3MCwgIDMwLCAgMTYsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAs
ICAgMCwgIDU0LCAgIDAsIA0KKyAgICAgIDAsICAgNSwgMjQyLCAgMzIsICAxNiwgICAwLCANCisg
ICAgICA2LCAgIDAsICAgMCwgICAwLCAgNzAsICAzMCwgDQorICAgICAxNiwgICAwLCAgIDEsICAg
MCwgICAwLCAgIDAsIA0KKyAgICAgNTQsICAgMCwgICAwLCAgIDUsIDI0MiwgIDMyLCANCisgICAg
IDE2LCAgIDAsICAgNywgICAwLCAgIDAsICAgMCwgDQorICAgICA3MCwgIDMwLCAgMTYsICAgMCwg
ICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDYyLCAgIDAsICAgMCwgICAxLCANCisgICAgIDgz
LCAgODQsICA2NSwgIDg0LCAxMTYsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDksICAgMCwgICAw
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAg
IDAsICAgOSwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAxLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDksICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgICAwLCAgIDANCit9Ow0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcnNpbmds
ZTExcHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcnNpbmdsZTExcHMuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44N2Ni
MDg3Yzc1MDUyNjJjODA3YjNmNGE1MTcxYTFkODBlNjIxZjVlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFk
ZXJzL2NvbXBpbGVkL2NsZWFyc2luZ2xlMTFwcy5oCkBAIC0wLDAgKzEsMTEwIEBACisjaWYgMA0K
Ky8vDQorLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIg
OS4zMC45MjAwLjE2Mzg0DQorLy8NCisvLw0KKy8vLw0KKy8vDQorLy8gSW5wdXQgc2lnbmF0dXJl
Og0KKy8vDQorLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5
c1ZhbHVlICBGb3JtYXQgICBVc2VkDQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0t
LS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tDQorLy8gU1ZfUG9zaXRpb24gICAg
ICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICAgZmxvYXQgICAgICAgDQorLy8g
Q09MT1IgICAgICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAxICAgICBOT05FICAgZmxv
YXQgICB4eXp3DQorLy8NCisvLw0KKy8vIE91dHB1dCBzaWduYXR1cmU6DQorLy8NCisvLyBOYW1l
ICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAg
IFVzZWQNCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0t
LS0tLS0gLS0tLS0tLSAtLS0tLS0NCisvLyBTVl9UYXJnZXQgICAgICAgICAgICAgICAgMCAgIHh5
encgICAgICAgIDAgICBUQVJHRVQgICBmbG9hdCAgIHh5encNCisvLw0KK3BzXzRfMA0KK2RjbF9p
bnB1dF9wcyBsaW5lYXIgdjEueHl6dw0KK2RjbF9vdXRwdXQgbzAueHl6dw0KK21vdiBvMC54eXp3
LCB2MS54eXp3DQorcmV0IA0KKy8vIEFwcHJveGltYXRlbHkgMiBpbnN0cnVjdGlvbiBzbG90cyB1
c2VkDQorI2VuZGlmDQorDQorY29uc3QgQllURSBnX1BTX0NsZWFyU2luZ2xlW10gPQ0KK3sNCisg
ICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTMsIDE1MiwgDQorICAgICAzMiwgIDQ5LCAyMjIsIDIz
NiwgIDkyLCAgMjAsIA0KKyAgICAxODgsICA3MSwgIDg4LCAgNDYsIDE2MywgMjQxLCANCisgICAg
MTg4LCAyMzgsICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgIDIwOCwgICAxLCAgIDAsICAgMCwg
ICA1LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDUyLCAgIDAsICAgMCwgICAwLCANCisgICAgMTQw
LCAgIDAsICAgMCwgICAwLCAyMjQsICAgMCwgDQorICAgICAgMCwgICAwLCAgMjAsICAgMSwgICAw
LCAgIDAsIA0KKyAgICAgODQsICAgMSwgICAwLCAgIDAsICA4MiwgIDY4LCANCisgICAgIDY5LCAg
NzAsICA4MCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgIDI4LCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgNCwgDQorICAgIDI1NSwgMjU1LCAgIDAsICAgMSwgICAwLCAgIDAs
IA0KKyAgICAgMjgsICAgMCwgICAwLCAgIDAsICA3NywgMTA1LCANCisgICAgIDk5LCAxMTQsIDEx
MSwgMTE1LCAxMTEsIDEwMiwgDQorICAgIDExNiwgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsIA0K
KyAgICAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCANCisgICAgMTA0LCAgOTcsIDEwMCwg
MTAxLCAxMTQsICAzMiwgDQorICAgICA2NywgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIA0KKyAg
ICAxMDEsIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCANCisgICAgIDQ4LCAgNDYsICA1NywgIDUw
LCAgNDgsICA0OCwgDQorICAgICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsIA0KKyAgICAg
IDAsIDE3MSwgIDczLCAgODMsICA3MSwgIDc4LCANCisgICAgIDc2LCAgIDAsICAgMCwgICAwLCAg
IDIsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgNTYs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgIDE1LCAgIDAsICAgMCwgICAwLCANCisgICAgIDY4LCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDMsICAgMCwg
ICAwLCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAxNSwgIDE1LCAgIDAsICAgMCwg
DQorICAgICA4MywgIDg2LCAgOTUsICA4MCwgMTExLCAxMTUsIA0KKyAgICAxMDUsIDExNiwgMTA1
LCAxMTEsIDExMCwgICAwLCANCisgICAgIDY3LCAgNzksICA3NiwgIDc5LCAgODIsICAgMCwgDQor
ICAgIDE3MSwgMTcxLCAgNzksICA4MywgIDcxLCAgNzgsIA0KKyAgICAgNDQsICAgMCwgICAwLCAg
IDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgDQorICAg
ICAzMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAg
MCwgICAwLCAgMTUsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgODMsICA4NiwgIDk1LCAgODQsICA5
NywgMTE0LCANCisgICAgMTAzLCAxMDEsIDExNiwgICAwLCAxNzEsIDE3MSwgDQorICAgICA4Mywg
IDcyLCAgNjgsICA4MiwgIDU2LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDY0LCAgIDAsICAgMCwg
ICAwLCANCisgICAgIDE0LCAgIDAsICAgMCwgICAwLCAgOTgsICAxNiwgDQorICAgICAgMCwgICAz
LCAyNDIsICAxNiwgIDE2LCAgIDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsIDEwMSwgICAw
LCANCisgICAgICAwLCAgIDMsIDI0MiwgIDMyLCAgMTYsICAgMCwgDQorICAgICAgMCwgICAwLCAg
IDAsICAgMCwgIDU0LCAgIDAsIA0KKyAgICAgIDAsICAgNSwgMjQyLCAgMzIsICAxNiwgICAwLCAN
CisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgNzAsICAzMCwgDQorICAgICAxNiwgICAwLCAgIDEs
ICAgMCwgICAwLCAgIDAsIA0KKyAgICAgNjIsICAgMCwgICAwLCAgIDEsICA4MywgIDg0LCANCisg
ICAgIDY1LCAgODQsIDExNiwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMiwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAg
ICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCisgICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAs
IA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMA0KK307DQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdoMTF2
cy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdoMTF2cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmMzk1MjE2
ZTk5MjBmY2NhMDMyYjFlYWM4NTNlODVhYjhiMWI2NjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMv
Y29tcGlsZWQvcGFzc3Rocm91Z2gxMXZzLmgKQEAgLTAsMCArMSwxMzQgQEAKKyNpZiAwDQorLy8N
CisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMw
LjkyMDAuMTYzODQNCisvLw0KKy8vDQorLy8vDQorLy8NCisvLyBJbnB1dCBzaWduYXR1cmU6DQor
Ly8NCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFs
dWUgIEZvcm1hdCAgIFVzZWQNCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0g
LS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0NCisvLyBQT1NJVElPTiAgICAgICAgICAg
ICAgICAgMCAgIHh5ICAgICAgICAgIDAgICAgIE5PTkUgICBmbG9hdCAgIHh5ICANCisvLyBURVhD
T09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgICBmbG9hdCAg
IHh5ICANCisvLw0KKy8vDQorLy8gT3V0cHV0IHNpZ25hdHVyZToNCisvLw0KKy8vIE5hbWUgICAg
ICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNl
ZA0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0t
LSAtLS0tLS0tIC0tLS0tLQ0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAg
ICAgICAgMCAgICAgIFBPUyAgIGZsb2F0ICAgeHl6dw0KKy8vIFRFWENPT1JEICAgICAgICAgICAg
ICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgIGZsb2F0ICAgeHkgIA0KKy8vDQordnNf
NF8wDQorZGNsX2lucHV0IHYwLnh5DQorZGNsX2lucHV0IHYxLnh5DQorZGNsX291dHB1dF9zaXYg
bzAueHl6dywgcG9zaXRpb24NCitkY2xfb3V0cHV0IG8xLnh5DQorbW92IG8wLnh5LCB2MC54eXh4
DQorbW92IG8wLnp3LCBsKDAsMCwwLDEuMDAwMDAwKQ0KK21vdiBvMS54eSwgdjEueHl4eA0KK3Jl
dCANCisvLyBBcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KKyNlbmRpZg0K
Kw0KK2NvbnN0IEJZVEUgZ19WU19QYXNzdGhyb3VnaFtdID0NCit7DQorICAgICA2OCwgIDg4LCAg
NjYsICA2NywgMTk3LCAyMTQsIA0KKyAgICAxODQsICA4NSwgMjQwLCAgOTQsICA3MSwgIDQ4LCAN
CisgICAgMTY1LCAgMzQsIDE0MiwgMjMzLCAgIDAsIDEzNSwgDQorICAgIDE5MywgMTc4LCAgIDEs
ICAgMCwgICAwLCAgIDAsIA0KKyAgICAgNjgsICAgMiwgICAwLCAgIDAsICAgNSwgICAwLCANCisg
ICAgICAwLCAgIDAsICA1MiwgICAwLCAgIDAsICAgMCwgDQorICAgIDE0MCwgICAwLCAgIDAsICAg
MCwgMjI0LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDU2LCAgIDEsICAgMCwgICAwLCANCisgICAg
MjAwLCAgIDEsICAgMCwgICAwLCAgODIsICA2OCwgDQorICAgICA2OSwgIDcwLCAgODAsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAyOCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDQsIA0KKyAgICAyNTQsIDI1NSwgICAwLCAgIDEsICAgMCwgICAwLCANCisgICAgIDI4LCAg
IDAsICAgMCwgICAwLCAgNzcsIDEwNSwgDQorICAgICA5OSwgMTE0LCAxMTEsIDExNSwgMTExLCAx
MDIsIA0KKyAgICAxMTYsICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCANCisgICAgIDcyLCAgNzYs
ICA4MywgIDc2LCAgMzIsICA4MywgDQorICAgIDEwNCwgIDk3LCAxMDAsIDEwMSwgMTE0LCAgMzIs
IA0KKyAgICAgNjcsIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCANCisgICAgMTAxLCAxMTQsICAz
MiwgIDU3LCAgNDYsICA1MSwgDQorICAgICA0OCwgIDQ2LCAgNTcsICA1MCwgIDQ4LCAgNDgsIA0K
KyAgICAgNDYsICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCANCisgICAgICAwLCAxNzEsICA3Mywg
IDgzLCAgNzEsICA3OCwgDQorICAgICA3NiwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCANCisgICAgIDU2LCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
IDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMywgICAzLCAg
IDAsICAgMCwgDQorICAgICA2NSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDEs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsIA0KKyAgICAgODAsICA3
OSwgIDgzLCAgNzMsICA4NCwgIDczLCANCisgICAgIDc5LCAgNzgsICAgMCwgIDg0LCAgNjksICA4
OCwgDQorICAgICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgIDAsIA0KKyAgICAxNzEsIDE3MSwg
IDc5LCAgODMsICA3MSwgIDc4LCANCisgICAgIDgwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgNTYsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQor
ICAgICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDE1LCAg
IDAsICAgMCwgICAwLCANCisgICAgIDY4LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDMsICAgMCwgICAwLCAgIDAs
ICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAgMywgIDEyLCAgIDAsICAgMCwgDQorICAgICA4
MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsIA0KKyAgICAgNzMsICA4NCwgIDczLCAgNzksICA3
OCwgICAwLCANCisgICAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgDQorICAgICA4Miwg
IDY4LCAgIDAsIDE3MSwgMTcxLCAxNzEsIA0KKyAgICAgODMsICA3MiwgIDY4LCAgODIsIDEzNiwg
ICAwLCANCisgICAgICAwLCAgIDAsICA2NCwgICAwLCAgIDEsICAgMCwgDQorICAgICAzNCwgICAw
LCAgIDAsICAgMCwgIDk1LCAgIDAsIA0KKyAgICAgIDAsICAgMywgIDUwLCAgMTYsICAxNiwgICAw
LCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgOTUsICAgMCwgDQorICAgICAgMCwgICAzLCAg
NTAsICAxNiwgIDE2LCAgIDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsIDEwMywgICAwLCAN
CisgICAgICAwLCAgIDQsIDI0MiwgIDMyLCAgMTYsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAs
ICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgMTAxLCAgIDAsICAgMCwgICAzLCANCisg
ICAgIDUwLCAgMzIsICAxNiwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAwLCAgNTQsICAg
MCwgICAwLCAgIDUsIA0KKyAgICAgNTAsICAzMiwgIDE2LCAgIDAsICAgMCwgICAwLCANCisgICAg
ICAwLCAgIDAsICA3MCwgIDE2LCAgMTYsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwg
IDU0LCAgIDAsIA0KKyAgICAgIDAsICAgOCwgMTk0LCAgMzIsICAxNiwgICAwLCANCisgICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDIsICA2NCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAg
IDAsICAgMCwgICAwLCAxMjgsICA2MywgDQorICAgICA1NCwgICAwLCAgIDAsICAgNSwgIDUwLCAg
MzIsIA0KKyAgICAgMTYsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCisgICAgIDcwLCAgMTYs
ICAxNiwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAwLCAgNjIsICAgMCwgICAwLCAgIDEs
IA0KKyAgICAgODMsICA4NCwgIDY1LCAgODQsIDExNiwgICAwLCANCisgICAgICAwLCAgIDAsICAg
NCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDAsICAgMA0KK307DQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVk
L3Bhc3N0aHJvdWdobHVtMTFwcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdobHVtMTFwcy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmNmMDdiNGEzY2JkODk2NWQxOGNiNDhkMDE4ZTQxMmQ4NDI0MjA4OTUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hsdW0xMXBzLmgKQEAgLTAs
MCArMSwxNTIgQEAKKyNpZiAwDQorLy8NCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBI
TFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQNCisvLw0KKy8vDQorLy8vDQorLy8g
UmVzb3VyY2UgQmluZGluZ3M6DQorLy8NCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCisvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0t
IC0tLS0gLS0tLS0tLS0NCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Ft
cGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCisvLyBUZXh0dXJlICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDJkICAgIDAgICAg
ICAgIDENCisvLw0KKy8vDQorLy8NCisvLyBJbnB1dCBzaWduYXR1cmU6DQorLy8NCisvLyBOYW1l
ICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAg
IFVzZWQNCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0t
LS0tLS0gLS0tLS0tLSAtLS0tLS0NCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5
encgICAgICAgIDAgICAgICBQT1MgICBmbG9hdCAgICAgICANCisvLyBURVhDT09SRCAgICAgICAg
ICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgICBmbG9hdCAgIHh5ICANCisvLw0K
Ky8vDQorLy8gT3V0cHV0IHNpZ25hdHVyZToNCisvLw0KKy8vIE5hbWUgICAgICAgICAgICAgICAg
IEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KKy8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0t
LS0tLQ0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRB
UkdFVCAgIGZsb2F0ICAgeHl6dw0KKy8vDQorcHNfNF8wDQorZGNsX3NhbXBsZXIgczAsIG1vZGVf
ZGVmYXVsdA0KK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0
KSB0MA0KK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkNCitkY2xfb3V0cHV0IG8wLnh5encNCitk
Y2xfdGVtcHMgMQ0KK3NhbXBsZSByMC54eXp3LCB2MS54eXh4LCB0MC54eXp3LCBzMA0KK21vdiBv
MC54eXosIHIwLnh4eHgNCittb3YgbzAudywgbCgxLjAwMDAwMCkNCityZXQgDQorLy8gQXBwcm94
aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCisjZW5kaWYNCisNCitjb25zdCBCWVRF
IGdfUFNfUGFzc3Rocm91Z2hMdW1bXSA9DQorew0KKyAgICAgNjgsICA4OCwgIDY2LCAgNjcsIDI0
NCwgICA5LCANCisgICAgMjEzLCAxNDcsICAxOSwgMjQ5LCAgNzAsIDExMSwgDQorICAgIDE1Nywg
IDkyLCAyNDMsIDE2MCwgIDQwLCAxNDQsIA0KKyAgICAyMzgsIDIyMSwgICAxLCAgIDAsICAgMCwg
ICAwLCANCisgICAgMTI4LCAgIDIsICAgMCwgICAwLCAgIDUsICAgMCwgDQorICAgICAgMCwgICAw
LCAgNTIsICAgMCwgICAwLCAgIDAsIA0KKyAgICAyMjAsICAgMCwgICAwLCAgIDAsICA1MiwgICAx
LCANCisgICAgICAwLCAgIDAsIDEwNCwgICAxLCAgIDAsICAgMCwgDQorICAgICAgNCwgICAyLCAg
IDAsICAgMCwgIDgyLCAgNjgsIA0KKyAgICAgNjksICA3MCwgMTYwLCAgIDAsICAgMCwgICAwLCAN
CisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDIs
ICAgMCwgICAwLCAgIDAsIA0KKyAgICAgMjgsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCANCisg
ICAgMjU1LCAyNTUsICAgMCwgICAxLCAgIDAsICAgMCwgDQorICAgIDEwOCwgICAwLCAgIDAsICAg
MCwgIDkyLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCANCisgICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCisgICAgICAw
LCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgIDEwMCwgICAwLCAgIDAsICAgMCwgICAy
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCANCisgICAgICA0LCAg
IDAsICAgMCwgICAwLCAyNTUsIDI1NSwgDQorICAgIDI1NSwgMjU1LCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICAxMywgICAwLCANCisgICAgICAwLCAgIDAs
ICA4MywgIDk3LCAxMDksIDExMiwgDQorICAgIDEwOCwgMTAxLCAxMTQsICAgMCwgIDg0LCAxMDEs
IA0KKyAgICAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgICAwLCANCisgICAgIDc3LCAxMDUsICA5
OSwgMTE0LCAxMTEsIDExNSwgDQorICAgIDExMSwgMTAyLCAxMTYsICAzMiwgIDQwLCAgODIsIA0K
KyAgICAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCANCisgICAgIDMyLCAgODMsIDEwNCwg
IDk3LCAxMDAsIDEwMSwgDQorICAgIDExNCwgIDMyLCAgNjcsIDExMSwgMTA5LCAxMTIsIA0KKyAg
ICAxMDUsIDEwOCwgMTAxLCAxMTQsICAzMiwgIDU3LCANCisgICAgIDQ2LCAgNTEsICA0OCwgIDQ2
LCAgNTcsICA1MCwgDQorICAgICA0OCwgIDQ4LCAgNDYsICA0OSwgIDU0LCAgNTEsIA0KKyAgICAg
NTYsICA1MiwgICAwLCAxNzEsICA3MywgIDgzLCANCisgICAgIDcxLCAgNzgsICA4MCwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgIDU2LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAxNSwgICAwLCANCisgICAgICAwLCAgIDAsICA2OCwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwg
ICAzLCAgIDAsICAgMCwgICAwLCANCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywg
DQorICAgICAgMCwgICAwLCAgODMsICA4NiwgIDk1LCAgODAsIA0KKyAgICAgNzksICA4MywgIDcz
LCAgODQsICA3MywgIDc5LCANCisgICAgIDc4LCAgIDAsICA4NCwgIDY5LCAgODgsICA2NywgDQor
ICAgICA3OSwgIDc5LCAgODIsICA2OCwgICAwLCAxNzEsIA0KKyAgICAxNzEsIDE3MSwgIDc5LCAg
ODMsICA3MSwgIDc4LCANCisgICAgIDQ0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQorICAg
ICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgMzIsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAg
MywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDE1LCAgIDAsICAg
MCwgICAwLCANCisgICAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgDQorICAgICA3MSwg
IDY5LCAgODQsICAgMCwgMTcxLCAxNzEsIA0KKyAgICAgODMsICA3MiwgIDY4LCAgODIsIDE0OCwg
ICAwLCANCisgICAgICAwLCAgIDAsICA2NCwgICAwLCAgIDAsICAgMCwgDQorICAgICAzNywgICAw
LCAgIDAsICAgMCwgIDkwLCAgIDAsIA0KKyAgICAgIDAsICAgMywgICAwLCAgOTYsICAxNiwgICAw
LCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgODgsICAyNCwgDQorICAgICAgMCwgICA0LCAg
IDAsIDExMiwgIDE2LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICA4NSwgIDg1LCAN
CisgICAgICAwLCAgIDAsICA5OCwgIDE2LCAgIDAsICAgMywgDQorICAgICA1MCwgIDE2LCAgMTYs
ICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgMTAxLCAgIDAsICAgMCwgICAzLCANCisg
ICAgMjQyLCAgMzIsICAxNiwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAxMDQsICAg
MCwgICAwLCAgIDIsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICA2OSwgICAwLCANCisgICAg
ICAwLCAgIDksIDI0MiwgICAwLCAgMTYsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwg
IDcwLCAgMTYsIA0KKyAgICAgMTYsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCisgICAgIDcw
LCAxMjYsICAxNiwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICA5NiwgIDE2
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICA1NCwgICAwLCANCisgICAgICAwLCAg
IDUsIDExNCwgIDMyLCAgMTYsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAg
IDAsIA0KKyAgICAgMTYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgIDU0LCAgIDAs
ICAgMCwgICA1LCAxMzAsICAzMiwgDQorICAgICAxNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgIDEsICA2NCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgMTI4LCAgNjMsICA2
MiwgICAwLCAgIDAsICAgMSwgDQorICAgICA4MywgIDg0LCAgNjUsICA4NCwgMTE2LCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCANCisgICAgICAxLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwDQorfTsNCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hsdW1hbHBoYTExcHMuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxl
ZC9wYXNzdGhyb3VnaGx1bWFscGhhMTFwcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1NWQ2MGViM2IyMjZkZDBl
N2RhZTQ4YmVkNTU0NDdhOThmYjEzNDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQv
cGFzc3Rocm91Z2hsdW1hbHBoYTExcHMuaApAQCAtMCwwICsxLDE0OCBAQAorI2lmIDANCisvLw0K
Ky8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAu
OTIwMC4xNjM4NA0KKy8vDQorLy8NCisvLy8NCisvLyBSZXNvdXJjZSBCaW5kaW5nczoNCisvLw0K
Ky8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAg
ICAgICBEaW0gU2xvdCBFbGVtZW50cw0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KKy8vIFNhbXBs
ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEg
ICAgMCAgICAgICAgMQ0KKy8vIFRleHR1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlICBmbG9hdDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQ0KKy8vDQorLy8NCisvLw0KKy8v
IElucHV0IHNpZ25hdHVyZToNCisvLw0KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAg
TWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KKy8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0tLQ0KKy8v
IFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgIGZs
b2F0ICAgICAgIA0KKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAg
MSAgICAgTk9ORSAgIGZsb2F0ICAgeHkgIA0KKy8vDQorLy8NCisvLyBPdXRwdXQgc2lnbmF0dXJl
Og0KKy8vDQorLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5
c1ZhbHVlICBGb3JtYXQgICBVc2VkDQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0t
LS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tDQorLy8gU1ZfVEFSR0VUICAgICAg
ICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgZmxvYXQgICB4eXp3DQorLy8N
Citwc180XzANCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQorZGNsX3Jlc291cmNlX3Rl
eHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQorZGNsX2lucHV0X3BzIGxpbmVh
ciB2MS54eQ0KK2RjbF9vdXRwdXQgbzAueHl6dw0KK2RjbF90ZW1wcyAxDQorc2FtcGxlIHIwLnh5
encsIHYxLnh5eHgsIHQwLnh5encsIHMwDQorbW92IG8wLnh5encsIHIwLnh4eHcNCityZXQgDQor
Ly8gQXBwcm94aW1hdGVseSAzIGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCisjZW5kaWYNCisNCitj
b25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hMdW1BbHBoYVtdID0NCit7DQorICAgICA2OCwgIDg4
LCAgNjYsICA2NywgMTg1LCAgMTQsIA0KKyAgICAgODQsIDIyMywgMTkyLCAgNDIsICAxNiwgMTMz
LCANCisgICAgIDQ2LCAxMDAsICA5NSwgMjIxLCAxODMsICA5NywgDQorICAgIDE5MiwgIDIzLCAg
IDEsICAgMCwgICAwLCAgIDAsIA0KKyAgICAxMDgsICAgMiwgICAwLCAgIDAsICAgNSwgICAwLCAN
CisgICAgICAwLCAgIDAsICA1MiwgICAwLCAgIDAsICAgMCwgDQorICAgIDIyMCwgICAwLCAgIDAs
ICAgMCwgIDUyLCAgIDEsIA0KKyAgICAgIDAsICAgMCwgMTA0LCAgIDEsICAgMCwgICAwLCANCisg
ICAgMjQwLCAgIDEsICAgMCwgICAwLCAgODIsICA2OCwgDQorICAgICA2OSwgIDcwLCAxNjAsICAg
MCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAg
ICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgDQorICAgICAyOCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDQsIA0KKyAgICAyNTUsIDI1NSwgICAwLCAgIDEsICAgMCwgICAwLCANCisgICAgMTA4
LCAgIDAsICAgMCwgICAwLCAgOTIsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCisgICAgMTAwLCAgIDAs
ICAgMCwgICAwLCAgIDIsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgIDQsICAgMCwgICAwLCAgIDAsIDI1NSwgMjU1LCANCisgICAgMjU1LCAyNTUsICAg
MCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDEzLCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgIDgzLCAgOTcsIDEwOSwgMTEyLCANCisgICAgMTA4LCAxMDEsIDExNCwg
ICAwLCAgODQsIDEwMSwgDQorICAgIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCAgIDAsIA0KKyAg
ICAgNzcsIDEwNSwgIDk5LCAxMTQsIDExMSwgMTE1LCANCisgICAgMTExLCAxMDIsIDExNiwgIDMy
LCAgNDAsICA4MiwgDQorICAgICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsIA0KKyAgICAg
MzIsICA4MywgMTA0LCAgOTcsIDEwMCwgMTAxLCANCisgICAgMTE0LCAgMzIsICA2NywgMTExLCAx
MDksIDExMiwgDQorICAgIDEwNSwgMTA4LCAxMDEsIDExNCwgIDMyLCAgNTcsIA0KKyAgICAgNDYs
ICA1MSwgIDQ4LCAgNDYsICA1NywgIDUwLCANCisgICAgIDQ4LCAgNDgsICA0NiwgIDQ5LCAgNTQs
ICA1MSwgDQorICAgICA1NiwgIDUyLCAgIDAsIDE3MSwgIDczLCAgODMsIA0KKyAgICAgNzEsICA3
OCwgIDgwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAyLCAgIDAsICAgMCwgICAwLCAgIDgsICAg
MCwgDQorICAgICAgMCwgICAwLCAgNTYsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDE1LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDY4
LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQor
ICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAg
IDAsICAgMywgICAzLCANCisgICAgICAwLCAgIDAsICA4MywgIDg2LCAgOTUsICA4MCwgDQorICAg
ICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksIA0KKyAgICAgNzgsICAgMCwgIDg0LCAgNjks
ICA4OCwgIDY3LCANCisgICAgIDc5LCAgNzksICA4MiwgIDY4LCAgIDAsIDE3MSwgDQorICAgIDE3
MSwgMTcxLCAgNzksICA4MywgIDcxLCAgNzgsIA0KKyAgICAgNDQsICAgMCwgICAwLCAgIDAsICAg
MSwgICAwLCANCisgICAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgDQorICAgICAzMiwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCANCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAw
LCAgMTUsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgy
LCANCisgICAgIDcxLCAgNjksICA4NCwgICAwLCAxNzEsIDE3MSwgDQorICAgICA4MywgIDcyLCAg
NjgsICA4MiwgMTI4LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDY0LCAgIDAsICAgMCwgICAwLCAN
CisgICAgIDMyLCAgIDAsICAgMCwgICAwLCAgOTAsICAgMCwgDQorICAgICAgMCwgICAzLCAgIDAs
ICA5NiwgIDE2LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICA4OCwgIDI0LCANCisg
ICAgICAwLCAgIDQsICAgMCwgMTEyLCAgMTYsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAg
MCwgIDg1LCAgODUsIA0KKyAgICAgIDAsICAgMCwgIDk4LCAgMTYsICAgMCwgICAzLCANCisgICAg
IDUwLCAgMTYsICAxNiwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAwLCAxMDEsICAgMCwg
ICAwLCAgIDMsIA0KKyAgICAyNDIsICAzMiwgIDE2LCAgIDAsICAgMCwgICAwLCANCisgICAgICAw
LCAgIDAsIDEwNCwgICAwLCAgIDAsICAgMiwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDY5
LCAgIDAsIA0KKyAgICAgIDAsICAgOSwgMjQyLCAgIDAsICAxNiwgICAwLCANCisgICAgICAwLCAg
IDAsICAgMCwgICAwLCAgNzAsICAxNiwgDQorICAgICAxNiwgICAwLCAgIDEsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgNzAsIDEyNiwgIDE2LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAs
ICAgMCwgIDk2LCAgMTYsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDU0LCAgIDAs
IA0KKyAgICAgIDAsICAgNSwgMjQyLCAgMzIsICAxNiwgICAwLCANCisgICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDYsICAxMiwgDQorICAgICAxNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAgNjIsICAgMCwgICAwLCAgIDEsICA4MywgIDg0LCANCisgICAgIDY1LCAgODQsIDExNiwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAyLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsIA0KKyAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQor
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMA0KK307DQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiMTFwcy5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBp
bGVkL3Bhc3N0aHJvdWdocmdiMTFwcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU4NmNiY2Y2YjgyY2ZkOTY1ODYw
MThkZTE5OTc5OTczODYxODc3MzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFz
c3Rocm91Z2hyZ2IxMXBzLmgKQEAgLTAsMCArMSwxNTIgQEAKKyNpZiAwDQorLy8NCisvLyBHZW5l
cmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYz
ODQNCisvLw0KKy8vDQorLy8vDQorLy8gUmVzb3VyY2UgQmluZGluZ3M6DQorLy8NCisvLyBOYW1l
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGlt
IFNsb3QgRWxlbWVudHMNCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0t
LS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCisvLyBTYW1wbGVyICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAg
ICAgIDENCisvLyBUZXh0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxv
YXQ0ICAgICAgICAgIDJkICAgIDAgICAgICAgIDENCisvLw0KKy8vDQorLy8NCisvLyBJbnB1dCBz
aWduYXR1cmU6DQorLy8NCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVn
aXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAgIFVzZWQNCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAt
LS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0NCisvLyBTVl9QT1NJ
VElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgICBmbG9hdCAgICAg
ICANCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5P
TkUgICBmbG9hdCAgIHh5ICANCisvLw0KKy8vDQorLy8gT3V0cHV0IHNpZ25hdHVyZToNCisvLw0K
Ky8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAg
Rm9ybWF0ICAgVXNlZA0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0t
LS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0tLQ0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAg
ICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIGZsb2F0ICAgeHl6dw0KKy8vDQorcHNfNF8w
DQorZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmQg
KGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkN
CitkY2xfb3V0cHV0IG8wLnh5encNCitkY2xfdGVtcHMgMQ0KK3NhbXBsZSByMC54eXp3LCB2MS54
eXh4LCB0MC54eXp3LCBzMA0KK21vdiBvMC54eXosIHIwLnh5engNCittb3YgbzAudywgbCgxLjAw
MDAwMCkNCityZXQgDQorLy8gQXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQN
CisjZW5kaWYNCisNCitjb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSR0JbXSA9DQorew0KKyAg
ICAgNjgsICA4OCwgIDY2LCAgNjcsIDEyNSwgMTg2LCANCisgICAgMjUwLCAyNDIsIDExMywgMjU1
LCAgNTksIDIzOSwgDQorICAgIDExOSwgMTU4LCAyMzcsICA3OCwgMjIwLCAgNDMsIA0KKyAgICAx
NjAsICA0NiwgICAxLCAgIDAsICAgMCwgICAwLCANCisgICAgMTI4LCAgIDIsICAgMCwgICAwLCAg
IDUsICAgMCwgDQorICAgICAgMCwgICAwLCAgNTIsICAgMCwgICAwLCAgIDAsIA0KKyAgICAyMjAs
ICAgMCwgICAwLCAgIDAsICA1MiwgICAxLCANCisgICAgICAwLCAgIDAsIDEwNCwgICAxLCAgIDAs
ICAgMCwgDQorICAgICAgNCwgICAyLCAgIDAsICAgMCwgIDgyLCAgNjgsIA0KKyAgICAgNjksICA3
MCwgMTYwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgMjgsICAgMCwg
ICAwLCAgIDAsICAgMCwgICA0LCANCisgICAgMjU1LCAyNTUsICAgMCwgICAxLCAgIDAsICAgMCwg
DQorICAgIDEwOCwgICAwLCAgIDAsICAgMCwgIDkyLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAz
LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQor
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAg
IDEwMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICA1LCAgIDAs
ICAgMCwgICAwLCANCisgICAgICA0LCAgIDAsICAgMCwgICAwLCAyNTUsIDI1NSwgDQorICAgIDI1
NSwgMjU1LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICAx
MywgICAwLCANCisgICAgICAwLCAgIDAsICA4MywgIDk3LCAxMDksIDExMiwgDQorICAgIDEwOCwg
MTAxLCAxMTQsICAgMCwgIDg0LCAxMDEsIA0KKyAgICAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwg
ICAwLCANCisgICAgIDc3LCAxMDUsICA5OSwgMTE0LCAxMTEsIDExNSwgDQorICAgIDExMSwgMTAy
LCAxMTYsICAzMiwgIDQwLCAgODIsIA0KKyAgICAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2
LCANCisgICAgIDMyLCAgODMsIDEwNCwgIDk3LCAxMDAsIDEwMSwgDQorICAgIDExNCwgIDMyLCAg
NjcsIDExMSwgMTA5LCAxMTIsIA0KKyAgICAxMDUsIDEwOCwgMTAxLCAxMTQsICAzMiwgIDU3LCAN
CisgICAgIDQ2LCAgNTEsICA0OCwgIDQ2LCAgNTcsICA1MCwgDQorICAgICA0OCwgIDQ4LCAgNDYs
ICA0OSwgIDU0LCAgNTEsIA0KKyAgICAgNTYsICA1MiwgICAwLCAxNzEsICA3MywgIDgzLCANCisg
ICAgIDcxLCAgNzgsICA4MCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMiwgICAwLCAgIDAsICAg
MCwgICA4LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDU2LCAgIDAsICAgMCwgICAwLCANCisgICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDMsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAxNSwgICAwLCANCisgICAgICAw
LCAgIDAsICA2OCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCANCisgICAgICAxLCAg
IDAsICAgMCwgICAwLCAgIDMsICAgMywgDQorICAgICAgMCwgICAwLCAgODMsICA4NiwgIDk1LCAg
ODAsIA0KKyAgICAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCANCisgICAgIDc4LCAgIDAs
ICA4NCwgIDY5LCAgODgsICA2NywgDQorICAgICA3OSwgIDc5LCAgODIsICA2OCwgICAwLCAxNzEs
IA0KKyAgICAxNzEsIDE3MSwgIDc5LCAgODMsICA3MSwgIDc4LCANCisgICAgIDQ0LCAgIDAsICAg
MCwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAgMzIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgIDE1LCAgIDAsICAgMCwgICAwLCANCisgICAgIDgzLCAgODYsICA5NSwgIDg0
LCAgNjUsICA4MiwgDQorICAgICA3MSwgIDY5LCAgODQsICAgMCwgMTcxLCAxNzEsIA0KKyAgICAg
ODMsICA3MiwgIDY4LCAgODIsIDE0OCwgICAwLCANCisgICAgICAwLCAgIDAsICA2NCwgICAwLCAg
IDAsICAgMCwgDQorICAgICAzNywgICAwLCAgIDAsICAgMCwgIDkwLCAgIDAsIA0KKyAgICAgIDAs
ICAgMywgICAwLCAgOTYsICAxNiwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgODgs
ICAyNCwgDQorICAgICAgMCwgICA0LCAgIDAsIDExMiwgIDE2LCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICA4NSwgIDg1LCANCisgICAgICAwLCAgIDAsICA5OCwgIDE2LCAgIDAsICAg
MywgDQorICAgICA1MCwgIDE2LCAgMTYsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwg
MTAxLCAgIDAsICAgMCwgICAzLCANCisgICAgMjQyLCAgMzIsICAxNiwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMCwgICAwLCAxMDQsICAgMCwgICAwLCAgIDIsIA0KKyAgICAgIDEsICAgMCwgICAw
LCAgIDAsICA2OSwgICAwLCANCisgICAgICAwLCAgIDksIDI0MiwgICAwLCAgMTYsICAgMCwgDQor
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDcwLCAgMTYsIA0KKyAgICAgMTYsICAgMCwgICAxLCAg
IDAsICAgMCwgICAwLCANCisgICAgIDcwLCAxMjYsICAxNiwgICAwLCAgIDAsICAgMCwgDQorICAg
ICAgMCwgICAwLCAgIDAsICA5NiwgIDE2LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICA1NCwgICAwLCANCisgICAgICAwLCAgIDUsIDExNCwgIDMyLCAgMTYsICAgMCwgDQorICAgICAg
MCwgICAwLCAgIDAsICAgMCwgIDcwLCAgIDIsIA0KKyAgICAgMTYsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCisgICAgIDU0LCAgIDAsICAgMCwgICA1LCAxMzAsICAzMiwgDQorICAgICAxNiwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDEsICA2NCwgICAwLCAgIDAsICAgMCwg
ICAwLCANCisgICAgMTI4LCAgNjMsICA2MiwgICAwLCAgIDAsICAgMSwgDQorICAgICA4MywgIDg0
LCAgNjUsICA4NCwgMTE2LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAw
LCANCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAg
IDIsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAN
CisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisg
ICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCisgICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAz
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAs
ICAgMCwgICAwDQorfTsNCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2Jh
MTFwcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTExcHMuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
N2QyYTI1YWJhMDk2YzNmYWEzN2RmMjFlYjUzYzk4NDM4ZDA0YmEzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9z
aGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTExcHMuaApAQCAtMCwwICsxLDE0MSBAQAor
I2lmIDANCisvLw0KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENv
bXBpbGVyIDkuMzAuOTIwMC4xNjM4NA0KKy8vDQorLy8NCisvLy8NCisvLyBSZXNvdXJjZSBCaW5k
aW5nczoNCisvLw0KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBl
ICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KKy8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0t
LQ0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEg
ICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KKy8vIFRleHR1cmUgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQ0KKy8vDQor
Ly8NCisvLw0KKy8vIElucHV0IHNpZ25hdHVyZToNCisvLw0KKy8vIE5hbWUgICAgICAgICAgICAg
ICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KKy8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0t
IC0tLS0tLQ0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAg
ICAgIFBPUyAgIGZsb2F0ICAgICAgIA0KKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAg
eHkgICAgICAgICAgMSAgICAgTk9ORSAgIGZsb2F0ICAgeHkgIA0KKy8vDQorLy8NCisvLyBPdXRw
dXQgc2lnbmF0dXJlOg0KKy8vDQorLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNr
IFJlZ2lzdGVyIFN5c1ZhbHVlICBGb3JtYXQgICBVc2VkDQorLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tDQorLy8gU1Zf
VEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgZmxvYXQg
ICB4eXp3DQorLy8NCitwc180XzANCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQorZGNs
X3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQorZGNsX2lu
cHV0X3BzIGxpbmVhciB2MS54eQ0KK2RjbF9vdXRwdXQgbzAueHl6dw0KK3NhbXBsZSBvMC54eXp3
LCB2MS54eXh4LCB0MC54eXp3LCBzMA0KK3JldCANCisvLyBBcHByb3hpbWF0ZWx5IDIgaW5zdHJ1
Y3Rpb24gc2xvdHMgdXNlZA0KKyNlbmRpZg0KKw0KK2NvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3Vn
aFJHQkFbXSA9DQorew0KKyAgICAgNjgsICA4OCwgIDY2LCAgNjcsIDE1MSwgMTUyLCANCisgICAg
ICA4LCAxMDIsIDE3NCwgMTM1LCAgNzYsICA1NywgDQorICAgIDEwMCwgMTQ2LCAgNTksICA3NCwg
MjA1LCAgMzUsIA0KKyAgICAyMDYsICAyMSwgICAxLCAgIDAsICAgMCwgICAwLCANCisgICAgIDgw
LCAgIDIsICAgMCwgICAwLCAgIDUsICAgMCwgDQorICAgICAgMCwgICAwLCAgNTIsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAyMjAsICAgMCwgICAwLCAgIDAsICA1MiwgICAxLCANCisgICAgICAwLCAg
IDAsIDEwNCwgICAxLCAgIDAsICAgMCwgDQorICAgIDIxMiwgICAxLCAgIDAsICAgMCwgIDgyLCAg
NjgsIA0KKyAgICAgNjksICA3MCwgMTYwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgMjgsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCANCisgICAgMjU1LCAyNTUsICAg
MCwgICAxLCAgIDAsICAgMCwgDQorICAgIDEwOCwgICAwLCAgIDAsICAgMCwgIDkyLCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAgMSwgICAw
LCAgIDAsICAgMCwgDQorICAgIDEwMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsIA0KKyAgICAg
IDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCANCisgICAgICA0LCAgIDAsICAgMCwgICAwLCAy
NTUsIDI1NSwgDQorICAgIDI1NSwgMjU1LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDEs
ICAgMCwgICAwLCAgIDAsICAxMywgICAwLCANCisgICAgICAwLCAgIDAsICA4MywgIDk3LCAxMDks
IDExMiwgDQorICAgIDEwOCwgMTAxLCAxMTQsICAgMCwgIDg0LCAxMDEsIA0KKyAgICAxMjAsIDEx
NiwgMTE3LCAxMTQsIDEwMSwgICAwLCANCisgICAgIDc3LCAxMDUsICA5OSwgMTE0LCAxMTEsIDEx
NSwgDQorICAgIDExMSwgMTAyLCAxMTYsICAzMiwgIDQwLCAgODIsIA0KKyAgICAgNDEsICAzMiwg
IDcyLCAgNzYsICA4MywgIDc2LCANCisgICAgIDMyLCAgODMsIDEwNCwgIDk3LCAxMDAsIDEwMSwg
DQorICAgIDExNCwgIDMyLCAgNjcsIDExMSwgMTA5LCAxMTIsIA0KKyAgICAxMDUsIDEwOCwgMTAx
LCAxMTQsICAzMiwgIDU3LCANCisgICAgIDQ2LCAgNTEsICA0OCwgIDQ2LCAgNTcsICA1MCwgDQor
ICAgICA0OCwgIDQ4LCAgNDYsICA0OSwgIDU0LCAgNTEsIA0KKyAgICAgNTYsICA1MiwgICAwLCAx
NzEsICA3MywgIDgzLCANCisgICAgIDcxLCAgNzgsICA4MCwgICAwLCAgIDAsICAgMCwgDQorICAg
ICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDU2LCAgIDAs
ICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQorICAgICAg
MCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAx
NSwgICAwLCANCisgICAgICAwLCAgIDAsICA2OCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwg
ICAwLCANCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgDQorICAgICAgMCwgICAw
LCAgODMsICA4NiwgIDk1LCAgODAsIA0KKyAgICAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5
LCANCisgICAgIDc4LCAgIDAsICA4NCwgIDY5LCAgODgsICA2NywgDQorICAgICA3OSwgIDc5LCAg
ODIsICA2OCwgICAwLCAxNzEsIA0KKyAgICAxNzEsIDE3MSwgIDc5LCAgODMsICA3MSwgIDc4LCAN
CisgICAgIDQ0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDgs
ICAgMCwgICAwLCAgIDAsIA0KKyAgICAgMzIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisg
ICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMywgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDE1LCAgIDAsICAgMCwgICAwLCANCisgICAg
IDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgDQorICAgICA3MSwgIDY5LCAgODQsICAgMCwg
MTcxLCAxNzEsIA0KKyAgICAgODMsICA3MiwgIDY4LCAgODIsIDEwMCwgICAwLCANCisgICAgICAw
LCAgIDAsICA2NCwgICAwLCAgIDAsICAgMCwgDQorICAgICAyNSwgICAwLCAgIDAsICAgMCwgIDkw
LCAgIDAsIA0KKyAgICAgIDAsICAgMywgICAwLCAgOTYsICAxNiwgICAwLCANCisgICAgICAwLCAg
IDAsICAgMCwgICAwLCAgODgsICAyNCwgDQorICAgICAgMCwgICA0LCAgIDAsIDExMiwgIDE2LCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICA4NSwgIDg1LCANCisgICAgICAwLCAgIDAs
ICA5OCwgIDE2LCAgIDAsICAgMywgDQorICAgICA1MCwgIDE2LCAgMTYsICAgMCwgICAxLCAgIDAs
IA0KKyAgICAgIDAsICAgMCwgMTAxLCAgIDAsICAgMCwgICAzLCANCisgICAgMjQyLCAgMzIsICAx
NiwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgNjksICAgMCwgICAwLCAgIDksIA0K
KyAgICAyNDIsICAzMiwgIDE2LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICA3MCwg
IDE2LCAgMTYsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDcwLCAxMjYsIA0KKyAg
ICAgMTYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgOTYsICAxNiwgICAw
LCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgNjIsICAgMCwgICAwLCAgIDEsIA0KKyAgICAg
ODMsICA4NCwgIDY1LCAgODQsIDExNiwgICAwLCANCisgICAgICAwLCAgIDAsICAgMiwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDEsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQor
ICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAg
MCwgICAwLCAgIDAsICAgMA0KK307DQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2dlbmVyYXRlX3NoYWRlcnMu
YmF0IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9zaGFkZXJzL2dlbmVyYXRlX3NoYWRlcnMuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIzNTdkNGVmNTg3M2Yx
NzZmYjBmOTE2YTY0Zjk1MzYyOWE2NTNhNjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvZ2VuZXJh
dGVfc2hhZGVycy5iYXQKQEAgLTAsMCArMSwxOCBAQAorQEVDSE8gT0ZGDQorUkVNDQorUkVNIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLg0KK1JFTSBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQorUkVNIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuDQorUkVNDQorDQorUEFUSCAlUEFUSCU7JVByb2dyYW1GaWxlcyh4ODYpJVxXaW5kb3dzIEtp
dHNcOC4wXGJpblx4ODY7JURYU0RLX0RJUiVcVXRpbGl0aWVzXGJpblx4ODYNCisNCitmeGMgL0Ug
VlNfUGFzc3Rocm91Z2ggL1QgdnNfNF8wIC9GaCBjb21waWxlZC9wYXNzdGhyb3VnaDExdnMuaCBQ
YXNzdGhyb3VnaDExLmhsc2wNCitmeGMgL0UgUFNfUGFzc3Rocm91Z2hSR0JBIC9UIHBzXzRfMCAv
RmggY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhMTFwcy5oIFBhc3N0aHJvdWdoMTEuaGxzbA0KK2Z4
YyAvRSBQU19QYXNzdGhyb3VnaFJHQiAvVCBwc180XzAgL0ZoIGNvbXBpbGVkL3Bhc3N0aHJvdWdo
cmdiMTFwcy5oIFBhc3N0aHJvdWdoMTEuaGxzbA0KK2Z4YyAvRSBQU19QYXNzdGhyb3VnaEx1bSAv
VCBwc180XzAgL0ZoIGNvbXBpbGVkL3Bhc3N0aHJvdWdobHVtMTFwcy5oIFBhc3N0aHJvdWdoMTEu
aGxzbA0KK2Z4YyAvRSBQU19QYXNzdGhyb3VnaEx1bUFscGhhIC9UIHBzXzRfMCAvRmggY29tcGls
ZWQvcGFzc3Rocm91Z2hsdW1hbHBoYTExcHMuaCBQYXNzdGhyb3VnaDExLmhsc2wNCisNCitmeGMg
L0UgVlNfQ2xlYXIgL1QgdnNfNF8wIC9GaCBjb21waWxlZC9jbGVhcjExdnMuaCBDbGVhcjExLmhs
c2wNCitmeGMgL0UgUFNfQ2xlYXJTaW5nbGUgL1QgcHNfNF8wIC9GaCBjb21waWxlZC9jbGVhcnNp
bmdsZTExcHMuaCBDbGVhcjExLmhsc2wNCitmeGMgL0UgUFNfQ2xlYXJNdWx0aXBsZSAvVCBwc180
XzAgL0ZoIGNvbXBpbGVkL2NsZWFybXVsdGlwbGUxMXBzLmggQ2xlYXIxMS5obHNsDQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L0JsaXQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2Q5L0JsaXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ3M2RmNjQxOGRkZWIxZmQ2NWU1Y2U3OTAxZGM4
MDIwNmQyODg1YjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvQmxpdC5jcHAKQEAgLTAsMCArMSw1OTUgQEAKKyNp
bmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gQmxpdC5jcHA6
IFN1cmZhY2UgY29weSB1dGlsaXR5IGNsYXNzLgorCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvQmxpdC5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5kZXJlcjlfdXRpbHMuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9UZXh0dXJlU3RvcmFnZTkuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJUYXJnZXQ5LmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVm
ZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgorCituYW1lc3BhY2UK
K3sKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3N0
YW5kYXJkdnMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2Nv
bXBpbGVkL2ZsaXB5dnMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFk
ZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2x1bWluYW5jZXBzLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9jb21wb25lbnRtYXNrcHMuaCIKKwor
Y29uc3QgQllURSogY29uc3QgZ19zaGFkZXJDb2RlW10gPQoreworICAgIGdfdnMyMF9zdGFuZGFy
ZHZzLAorICAgIGdfdnMyMF9mbGlweXZzLAorICAgIGdfcHMyMF9wYXNzdGhyb3VnaHBzLAorICAg
IGdfcHMyMF9sdW1pbmFuY2VwcywKKyAgICBnX3BzMjBfY29tcG9uZW50bWFza3BzCit9OworCitj
b25zdCBzaXplX3QgZ19zaGFkZXJTaXplW10gPQoreworICAgIHNpemVvZihnX3ZzMjBfc3RhbmRh
cmR2cyksCisgICAgc2l6ZW9mKGdfdnMyMF9mbGlweXZzKSwKKyAgICBzaXplb2YoZ19wczIwX3Bh
c3N0aHJvdWdocHMpLAorICAgIHNpemVvZihnX3BzMjBfbHVtaW5hbmNlcHMpLAorICAgIHNpemVv
ZihnX3BzMjBfY29tcG9uZW50bWFza3BzKQorfTsKK30KKworbmFtZXNwYWNlIHJ4Cit7CitCbGl0
OjpCbGl0KHJ4OjpSZW5kZXJlcjkgKnJlbmRlcmVyKQorICA6IG1SZW5kZXJlcihyZW5kZXJlciks
IG1RdWFkVmVydGV4QnVmZmVyKE5VTEwpLCBtUXVhZFZlcnRleERlY2xhcmF0aW9uKE5VTEwpLCBt
U2F2ZWRTdGF0ZUJsb2NrKE5VTEwpLCBtU2F2ZWRSZW5kZXJUYXJnZXQoTlVMTCksIG1TYXZlZERl
cHRoU3RlbmNpbChOVUxMKQoreworICAgIGluaXRHZW9tZXRyeSgpOworICAgIG1lbXNldChtQ29t
cGlsZWRTaGFkZXJzLCAwLCBzaXplb2YobUNvbXBpbGVkU2hhZGVycykpOworfQorCitCbGl0Ojp+
QmxpdCgpCit7CisgICAgaWYgKG1TYXZlZFN0YXRlQmxvY2spIG1TYXZlZFN0YXRlQmxvY2stPlJl
bGVhc2UoKTsKKyAgICBpZiAobVF1YWRWZXJ0ZXhCdWZmZXIpIG1RdWFkVmVydGV4QnVmZmVyLT5S
ZWxlYXNlKCk7CisgICAgaWYgKG1RdWFkVmVydGV4RGVjbGFyYXRpb24pIG1RdWFkVmVydGV4RGVj
bGFyYXRpb24tPlJlbGVhc2UoKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU0hBREVSX0NP
VU5UOyBpKyspCisgICAgeworICAgICAgICBpZiAobUNvbXBpbGVkU2hhZGVyc1tpXSkKKyAgICAg
ICAgeworICAgICAgICAgICAgbUNvbXBpbGVkU2hhZGVyc1tpXS0+UmVsZWFzZSgpOworICAgICAg
ICB9CisgICAgfQorfQorCit2b2lkIEJsaXQ6OmluaXRHZW9tZXRyeSgpCit7CisgICAgc3RhdGlj
IGNvbnN0IGZsb2F0IHF1YWRbXSA9CisgICAgeworICAgICAgICAtMSwgLTEsCisgICAgICAgIC0x
LCAgMSwKKyAgICAgICAgIDEsIC0xLAorICAgICAgICAgMSwgIDEKKyAgICB9OworCisgICAgSURp
cmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgIEhS
RVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVWZXJ0ZXhCdWZmZXIoc2l6ZW9mKHF1YWQpLCBE
M0RVU0FHRV9XUklURU9OTFksIDAsIEQzRFBPT0xfREVGQVVMVCwgJm1RdWFkVmVydGV4QnVmZmVy
LCBOVUxMKTsKKworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZN
RU1PUlkpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KKworICAgIHZvaWQgKmxvY2tQdHIgPSBOVUxMOworICAgIHJlc3VsdCA9IG1RdWFkVmVydGV4
QnVmZmVyLT5Mb2NrKDAsIDAsICZsb2NrUHRyLCAwKTsKKworICAgIGlmIChGQUlMRUQocmVzdWx0
KSB8fCBsb2NrUHRyID09IE5VTEwpCisgICAgeworICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQz
REVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisKKyAgICBtZW1j
cHkobG9ja1B0ciwgcXVhZCwgc2l6ZW9mKHF1YWQpKTsKKyAgICBtUXVhZFZlcnRleEJ1ZmZlci0+
VW5sb2NrKCk7CisKKyAgICBzdGF0aWMgY29uc3QgRDNEVkVSVEVYRUxFTUVOVDkgZWxlbWVudHNb
XSA9CisgICAgeworICAgICAgICB7IDAsIDAsIEQzRERFQ0xUWVBFX0ZMT0FUMiwgRDNEREVDTE1F
VEhPRF9ERUZBVUxULCBEM0RERUNMVVNBR0VfUE9TSVRJT04sIDAgfSwKKyAgICAgICAgRDNEREVD
TF9FTkQoKQorICAgIH07CisKKyAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVZlcnRleERlY2xh
cmF0aW9uKGVsZW1lbnRzLCAmbVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbik7CisKKyAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRP
RlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDxjbGFz
cyBEM0RTaGFkZXJUeXBlPgorYm9vbCBCbGl0OjpzZXRTaGFkZXIoU2hhZGVySWQgc291cmNlLCBj
b25zdCBjaGFyICpwcm9maWxlLAorICAgICAgICAgICAgICAgICAgICAgRDNEU2hhZGVyVHlwZSAq
KHJ4OjpSZW5kZXJlcjk6OipjcmVhdGVTaGFkZXIpKGNvbnN0IERXT1JEICosIHNpemVfdCBsZW5n
dGgpLAorICAgICAgICAgICAgICAgICAgICAgSFJFU1VMVCAoV0lOQVBJIElEaXJlY3QzRERldmlj
ZTk6OipzZXRTaGFkZXIpKEQzRFNoYWRlclR5cGUqKSkKK3sKKyAgICBJRGlyZWN0M0REZXZpY2U5
ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgRDNEU2hhZGVyVHlwZSAq
c2hhZGVyOworCisgICAgaWYgKG1Db21waWxlZFNoYWRlcnNbc291cmNlXSAhPSBOVUxMKQorICAg
IHsKKyAgICAgICAgc2hhZGVyID0gc3RhdGljX2Nhc3Q8RDNEU2hhZGVyVHlwZSo+KG1Db21waWxl
ZFNoYWRlcnNbc291cmNlXSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNvbnN0
IEJZVEUqIHNoYWRlckNvZGUgPSBnX3NoYWRlckNvZGVbc291cmNlXTsKKyAgICAgICAgc2l6ZV90
IHNoYWRlclNpemUgPSBnX3NoYWRlclNpemVbc291cmNlXTsKKworICAgICAgICBzaGFkZXIgPSAo
bVJlbmRlcmVyLT4qY3JlYXRlU2hhZGVyKShyZWludGVycHJldF9jYXN0PGNvbnN0IERXT1JEKj4o
c2hhZGVyQ29kZSksIHNoYWRlclNpemUpOworICAgICAgICBpZiAoIXNoYWRlcikKKyAgICAgICAg
eworICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gY3JlYXRlIHNoYWRlciBmb3IgYmxpdCBvcGVy
YXRpb24iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAg
IG1Db21waWxlZFNoYWRlcnNbc291cmNlXSA9IHNoYWRlcjsKKyAgICB9CisKKyAgICBIUkVTVUxU
IGhyID0gKGRldmljZS0+KnNldFNoYWRlcikoc2hhZGVyKTsKKworICAgIGlmIChGQUlMRUQoaHIp
KQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gc2V0IHNoYWRlciBmb3IgYmxpdCBvcGVy
YXRpb24iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIEJsaXQ6OnNldFZlcnRleFNoYWRlcihTaGFkZXJJZCBzaGFkZXIpCit7Cisg
ICAgcmV0dXJuIHNldFNoYWRlcjxJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5PihzaGFkZXIsICJ2c18y
XzAiLCAmcng6OlJlbmRlcmVyOTo6Y3JlYXRlVmVydGV4U2hhZGVyLCAmSURpcmVjdDNERGV2aWNl
OTo6U2V0VmVydGV4U2hhZGVyKTsKK30KKworYm9vbCBCbGl0OjpzZXRQaXhlbFNoYWRlcihTaGFk
ZXJJZCBzaGFkZXIpCit7CisgICAgcmV0dXJuIHNldFNoYWRlcjxJRGlyZWN0M0RQaXhlbFNoYWRl
cjk+KHNoYWRlciwgInBzXzJfMCIsICZyeDo6UmVuZGVyZXI5OjpjcmVhdGVQaXhlbFNoYWRlciwg
JklEaXJlY3QzRERldmljZTk6OlNldFBpeGVsU2hhZGVyKTsKK30KKworUkVDVCBCbGl0OjpnZXRT
dXJmYWNlUmVjdChJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSkgY29uc3QKK3sKKyAgICBEM0RT
VVJGQUNFX0RFU0MgZGVzYzsKKyAgICBzdXJmYWNlLT5HZXREZXNjKCZkZXNjKTsKKworICAgIFJF
Q1QgcmVjdDsKKyAgICByZWN0LmxlZnQgPSAwOworICAgIHJlY3QudG9wID0gMDsKKyAgICByZWN0
LnJpZ2h0ID0gZGVzYy5XaWR0aDsKKyAgICByZWN0LmJvdHRvbSA9IGRlc2MuSGVpZ2h0OworCisg
ICAgcmV0dXJuIHJlY3Q7Cit9CisKK2Jvb2wgQmxpdDo6Ym94RmlsdGVyKElEaXJlY3QzRFN1cmZh
Y2U5ICpzb3VyY2UsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0KQoreworICAgIElEaXJlY3QzRFRl
eHR1cmU5ICp0ZXh0dXJlID0gY29weVN1cmZhY2VUb1RleHR1cmUoc291cmNlLCBnZXRTdXJmYWNl
UmVjdChzb3VyY2UpKTsKKyAgICBpZiAoIXRleHR1cmUpCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVy
LT5nZXREZXZpY2UoKTsKKworICAgIHNhdmVTdGF0ZSgpOworCisgICAgZGV2aWNlLT5TZXRUZXh0
dXJlKDAsIHRleHR1cmUpOworICAgIGRldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIGRlc3QpOwor
CisgICAgc2V0VmVydGV4U2hhZGVyKFNIQURFUl9WU19TVEFOREFSRCk7CisgICAgc2V0UGl4ZWxT
aGFkZXIoU0hBREVSX1BTX1BBU1NUSFJPVUdIKTsKKworICAgIHNldENvbW1vbkJsaXRTdGF0ZSgp
OworICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUlORklMVEVSLCBEM0RU
RVhGX0xJTkVBUik7CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NQUdG
SUxURVIsIEQzRFRFWEZfTElORUFSKTsKKworICAgIHNldFZpZXdwb3J0KGdldFN1cmZhY2VSZWN0
KGRlc3QpLCAwLCAwKTsKKworICAgIHJlbmRlcigpOworCisgICAgdGV4dHVyZS0+UmVsZWFzZSgp
OworCisgICAgcmVzdG9yZVN0YXRlKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBC
bGl0Ojpjb3B5KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IFJFQ1QgJnNvdXJj
ZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBHTGludCBsZXZlbCkKK3sKKyAgICBS
ZW5kZXJUYXJnZXQ5ICpyZW5kZXJUYXJnZXQgPSBOVUxMOworICAgIElEaXJlY3QzRFN1cmZhY2U5
ICpzb3VyY2UgPSBOVUxMOworICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gZnJh
bWVidWZmZXItPmdldENvbG9yYnVmZmVyKDApOworCisgICAgaWYgKGNvbG9yYnVmZmVyKQorICAg
IHsKKyAgICAgICAgcmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0OTo6bWFrZVJlbmRlclRhcmdl
dDkoY29sb3JidWZmZXItPmdldFJlbmRlclRhcmdldCgpKTsKKyAgICB9CisgICAgCisgICAgaWYg
KHJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIHNvdXJjZSA9IHJlbmRlclRhcmdldC0+Z2V0
U3VyZmFjZSgpOworICAgIH0KKworICAgIGlmICghc291cmNlKQorICAgIHsKKyAgICAgICAgRVJS
KCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQuIik7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgIH0KKworICAgIFRleHR1
cmVTdG9yYWdlOV8yRCAqc3RvcmFnZTkgPSBUZXh0dXJlU3RvcmFnZTlfMkQ6Om1ha2VUZXh0dXJl
U3RvcmFnZTlfMkQoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAgIElEaXJlY3Qz
RFN1cmZhY2U5ICpkZXN0U3VyZmFjZSA9IHN0b3JhZ2U5LT5nZXRTdXJmYWNlTGV2ZWwobGV2ZWws
IHRydWUpOworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIAorICAgIGlmIChkZXN0
U3VyZmFjZSkKKyAgICB7CisgICAgICAgIHJlc3VsdCA9IGNvcHkoc291cmNlLCBzb3VyY2VSZWN0
LCBkZXN0Rm9ybWF0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBkZXN0U3VyZmFjZSk7CisgICAgICAgIGRl
c3RTdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgfQorCisgICAgc291cmNlLT5SZWxlYXNlKCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBCbGl0Ojpjb3B5KGdsOjpGcmFtZWJ1ZmZlciAq
ZnJhbWVidWZmZXIsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUg
KnN0b3JhZ2UsIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKQoreworICAgIFJlbmRlclRhcmdl
dDkgKnJlbmRlclRhcmdldCA9IE5VTEw7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSA9
IE5VTEw7CisgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBmcmFtZWJ1ZmZlci0+
Z2V0Q29sb3JidWZmZXIoMCk7CisKKyAgICBpZiAoY29sb3JidWZmZXIpCisgICAgeworICAgICAg
ICByZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShjb2xvcmJ1
ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOworICAgIH0KKyAgICAKKyAgICBpZiAocmVuZGVyVGFy
Z2V0KQorICAgIHsKKyAgICAgICAgc291cmNlID0gcmVuZGVyVGFyZ2V0LT5nZXRTdXJmYWNlKCk7
CisgICAgfQorCisgICAgaWYgKCFzb3VyY2UpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0
byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldC4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisgICAgVGV4dHVyZVN0b3JhZ2U5
X0N1YmUgKnN0b3JhZ2U5ID0gVGV4dHVyZVN0b3JhZ2U5X0N1YmU6Om1ha2VUZXh0dXJlU3RvcmFn
ZTlfQ3ViZShzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CisgICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKmRlc3RTdXJmYWNlID0gc3RvcmFnZTktPmdldEN1YmVNYXBTdXJmYWNlKHRhcmdldCwg
bGV2ZWwsIHRydWUpOworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisKKyAgICBpZiAoZGVzdFN1
cmZhY2UpCisgICAgeworICAgICAgICByZXN1bHQgPSBjb3B5KHNvdXJjZSwgc291cmNlUmVjdCwg
ZGVzdEZvcm1hdCwgeG9mZnNldCwgeW9mZnNldCwgZGVzdFN1cmZhY2UpOworICAgICAgICBkZXN0
U3VyZmFjZS0+UmVsZWFzZSgpOworICAgIH0KKworICAgIHNvdXJjZS0+UmVsZWFzZSgpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgQmxpdDo6Y29weShJRGlyZWN0M0RTdXJmYWNlOSAq
c291cmNlLCBjb25zdCBSRUNUICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpCit7CisgICAg
aWYgKCFkZXN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIElE
aXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICBE
M0RTVVJGQUNFX0RFU0Mgc291cmNlRGVzYzsKKyAgICBEM0RTVVJGQUNFX0RFU0MgZGVzdERlc2M7
CisgICAgc291cmNlLT5HZXREZXNjKCZzb3VyY2VEZXNjKTsKKyAgICBkZXN0LT5HZXREZXNjKCZk
ZXN0RGVzYyk7CisKKyAgICBpZiAoc291cmNlRGVzYy5Gb3JtYXQgPT0gZGVzdERlc2MuRm9ybWF0
ICYmIGRlc3REZXNjLlVzYWdlICYgRDNEVVNBR0VfUkVOREVSVEFSR0VUICYmCisgICAgICAgIGQz
ZDlfZ2w6OklzRm9ybWF0Q2hhbm5lbEVxdWl2YWxlbnQoZGVzdERlc2MuRm9ybWF0LCBkZXN0Rm9y
bWF0KSkgICAvLyBDYW4gdXNlIFN0cmV0Y2hSZWN0CisgICAgeworICAgICAgICBSRUNUIGRlc3RS
ZWN0ID0ge3hvZmZzZXQsIHlvZmZzZXQsIHhvZmZzZXQgKyAoc291cmNlUmVjdC5yaWdodCAtIHNv
dXJjZVJlY3QubGVmdCksIHlvZmZzZXQgKyAoc291cmNlUmVjdC5ib3R0b20gLSBzb3VyY2VSZWN0
LnRvcCl9OworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+U3RyZXRjaFJlY3Qoc291
cmNlLCAmc291cmNlUmVjdCwgZGVzdCwgJmRlc3RSZWN0LCBEM0RURVhGX1BPSU5UKTsKKworICAg
ICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChy
ZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1P
UlkpOworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxz
ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZv
cm1hdENvbnZlcnQoc291cmNlLCBzb3VyY2VSZWN0LCBkZXN0Rm9ybWF0LCB4b2Zmc2V0LCB5b2Zm
c2V0LCBkZXN0KTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQmxpdDo6Zm9y
bWF0Q29udmVydChJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBjb25zdCBSRUNUICZzb3VyY2VS
ZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgSURp
cmVjdDNEU3VyZmFjZTkgKmRlc3QpCit7CisgICAgSURpcmVjdDNEVGV4dHVyZTkgKnRleHR1cmUg
PSBjb3B5U3VyZmFjZVRvVGV4dHVyZShzb3VyY2UsIHNvdXJjZVJlY3QpOworICAgIGlmICghdGV4
dHVyZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBJRGlyZWN0
M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgc2F2ZVN0
YXRlKCk7CisKKyAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwgdGV4dHVyZSk7CisgICAgZGV2aWNl
LT5TZXRSZW5kZXJUYXJnZXQoMCwgZGVzdCk7CisKKyAgICBzZXRWaWV3cG9ydChzb3VyY2VSZWN0
LCB4b2Zmc2V0LCB5b2Zmc2V0KTsKKworICAgIHNldENvbW1vbkJsaXRTdGF0ZSgpOworICAgIGlm
IChzZXRGb3JtYXRDb252ZXJ0U2hhZGVycyhkZXN0Rm9ybWF0KSkKKyAgICB7CisgICAgICAgIHJl
bmRlcigpOworICAgIH0KKworICAgIHRleHR1cmUtPlJlbGVhc2UoKTsKKworICAgIHJlc3RvcmVT
dGF0ZSgpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQmxpdDo6c2V0Rm9ybWF0Q29u
dmVydFNoYWRlcnMoR0xlbnVtIGRlc3RGb3JtYXQpCit7CisgICAgYm9vbCBva2F5ID0gc2V0VmVy
dGV4U2hhZGVyKFNIQURFUl9WU19TVEFOREFSRCk7CisKKyAgICBzd2l0Y2ggKGRlc3RGb3JtYXQp
CisgICAgeworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgIGNhc2UgR0xfUkdC
QToKKyAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6CisgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgIGNh
c2UgR0xfQUxQSEE6CisgICAgICAgIG9rYXkgPSBva2F5ICYmIHNldFBpeGVsU2hhZGVyKFNIQURF
Ul9QU19DT01QT05FTlRNQVNLKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgR0xfTFVN
SU5BTkNFOgorICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgIG9rYXkgPSBv
a2F5ICYmIHNldFBpeGVsU2hhZGVyKFNIQURFUl9QU19MVU1JTkFOQ0UpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBpZiAoIW9rYXkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgZW51bSB7IFggPSAwLCBZID0gMSwgWiA9IDIsIFcgPSAzIH07CisKKyAg
ICAvLyBUaGUgbWVhbmluZyBvZiB0aGlzIGNvbnN0YW50IGRlcGVuZHMgb24gdGhlIHNoYWRlciB0
aGF0IHdhcyBzZWxlY3RlZC4KKyAgICAvLyBTZWUgdGhlIHNoYWRlciBhc3NlbWJseSBjb2RlIGFi
b3ZlIGZvciBkZXRhaWxzLgorICAgIGZsb2F0IHBzQ29uc3QwWzRdID0geyAwLCAwLCAwLCAwIH07
CisKKyAgICBzd2l0Y2ggKGRlc3RGb3JtYXQpCisgICAgeworICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKKyAgICAgIGNhc2UgR0xfUkdCQToKKyAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Cisg
ICAgICAgIHBzQ29uc3QwW1hdID0gMTsKKyAgICAgICAgcHNDb25zdDBbWl0gPSAxOworICAgICAg
ICBicmVhazsKKworICAgICAgY2FzZSBHTF9SR0I6CisgICAgICAgIHBzQ29uc3QwW1hdID0gMTsK
KyAgICAgICAgcHNDb25zdDBbV10gPSAxOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBH
TF9BTFBIQToKKyAgICAgICAgcHNDb25zdDBbWl0gPSAxOworICAgICAgICBicmVhazsKKworICAg
ICAgY2FzZSBHTF9MVU1JTkFOQ0U6CisgICAgICAgIHBzQ29uc3QwW1ldID0gMTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgorICAgICAgICBwc0NvbnN0
MFtYXSA9IDE7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1SZW5kZXJlci0+Z2V0RGV2
aWNlKCktPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKDAsIHBzQ29uc3QwLCAxKTsKKworICAgIHJl
dHVybiB0cnVlOworfQorCitJRGlyZWN0M0RUZXh0dXJlOSAqQmxpdDo6Y29weVN1cmZhY2VUb1Rl
eHR1cmUoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3Qp
Cit7CisgICAgaWYgKCFzdXJmYWNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg
fQorCisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2Uo
KTsKKworICAgIEQzRFNVUkZBQ0VfREVTQyBzb3VyY2VEZXNjOworICAgIHN1cmZhY2UtPkdldERl
c2MoJnNvdXJjZURlc2MpOworCisgICAgLy8gQ29weSB0aGUgcmVuZGVyIHRhcmdldCBpbnRvIGEg
dGV4dHVyZQorICAgIElEaXJlY3QzRFRleHR1cmU5ICp0ZXh0dXJlOworICAgIEhSRVNVTFQgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKHNvdXJjZVJlY3QucmlnaHQgLSBzb3VyY2VSZWN0
LmxlZnQsIHNvdXJjZVJlY3QuYm90dG9tIC0gc291cmNlUmVjdC50b3AsIDEsIEQzRFVTQUdFX1JF
TkRFUlRBUkdFVCwgc291cmNlRGVzYy5Gb3JtYXQsIEQzRFBPT0xfREVGQVVMVCwgJnRleHR1cmUs
IE5VTEwpOworCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1F
TU9SWSk7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgKElEaXJl
Y3QzRFRleHR1cmU5KilOVUxMKTsKKyAgICB9CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqdGV4
dHVyZVN1cmZhY2U7CisgICAgcmVzdWx0ID0gdGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKDAsICZ0
ZXh0dXJlU3VyZmFjZSk7CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAg
ICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBF
X09VVE9GTUVNT1JZKTsKKyAgICAgICAgdGV4dHVyZS0+UmVsZWFzZSgpOworICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIChJRGlyZWN0M0RUZXh0dXJlOSopTlVMTCk7
CisgICAgfQorCisgICAgbVJlbmRlcmVyLT5lbmRTY2VuZSgpOworICAgIHJlc3VsdCA9IGRldmlj
ZS0+U3RyZXRjaFJlY3Qoc3VyZmFjZSwgJnNvdXJjZVJlY3QsIHRleHR1cmVTdXJmYWNlLCBOVUxM
LCBEM0RURVhGX05PTkUpOworCisgICAgdGV4dHVyZVN1cmZhY2UtPlJlbGVhc2UoKTsKKworICAg
IGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNE
RVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAg
ICB0ZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSwgKElEaXJlY3QzRFRleHR1cmU5KilOVUxMKTsKKyAgICB9CisKKyAgICByZXR1cm4g
dGV4dHVyZTsKK30KKwordm9pZCBCbGl0OjpzZXRWaWV3cG9ydChjb25zdCBSRUNUICZzb3VyY2VS
ZWN0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0KQoreworICAgIElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICBEM0RWSUVXUE9SVDkg
dnA7CisgICAgdnAuWCAgICAgID0geG9mZnNldDsKKyAgICB2cC5ZICAgICAgPSB5b2Zmc2V0Owor
ICAgIHZwLldpZHRoICA9IHNvdXJjZVJlY3QucmlnaHQgLSBzb3VyY2VSZWN0LmxlZnQ7CisgICAg
dnAuSGVpZ2h0ID0gc291cmNlUmVjdC5ib3R0b20gLSBzb3VyY2VSZWN0LnRvcDsKKyAgICB2cC5N
aW5aICAgPSAwLjBmOworICAgIHZwLk1heFogICA9IDEuMGY7CisgICAgZGV2aWNlLT5TZXRWaWV3
cG9ydCgmdnApOworCisgICAgZmxvYXQgaGFsZlBpeGVsQWRqdXN0WzRdID0geyAtMS4wZi92cC5X
aWR0aCwgMS4wZi92cC5IZWlnaHQsIDAsIDAgfTsKKyAgICBkZXZpY2UtPlNldFZlcnRleFNoYWRl
ckNvbnN0YW50RigwLCBoYWxmUGl4ZWxBZGp1c3QsIDEpOworfQorCit2b2lkIEJsaXQ6OnNldENv
bW1vbkJsaXRTdGF0ZSgpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRl
cmVyLT5nZXREZXZpY2UoKTsKKworICAgIGRldmljZS0+U2V0RGVwdGhTdGVuY2lsU3VyZmFjZShO
VUxMKTsKKworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfRklMTE1PREUsIEQzREZJ
TExfU09MSUQpOworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFURVNURU5B
QkxFLCBGQUxTRSk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5E
RU5BQkxFLCBGQUxTRSk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9E
RSwgRDNEQ1VMTF9OT05FKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NMSVBQ
TEFORUVOQUJMRSwgMCk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldS
SVRFRU5BQkxFLCBEM0RDT0xPUldSSVRFRU5BQkxFX0FMUEhBIHwgRDNEQ09MT1JXUklURUVOQUJM
RV9CTFVFIHwgRDNEQ09MT1JXUklURUVOQUJMRV9HUkVFTiB8IEQzRENPTE9SV1JJVEVFTkFCTEVf
UkVEKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NSR0JXUklURUVOQUJMRSwg
RkFMU0UpOworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NPUlRFU1RFTkFC
TEUsIEZBTFNFKTsKKworICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUFH
RklMVEVSLCBEM0RURVhGX1BPSU5UKTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBE
M0RTQU1QX01JTkZJTFRFUiwgRDNEVEVYRl9QT0lOVCk7CisgICAgZGV2aWNlLT5TZXRTYW1wbGVy
U3RhdGUoMCwgRDNEU0FNUF9TUkdCVEVYVFVSRSwgRkFMU0UpOworICAgIGRldmljZS0+U2V0U2Ft
cGxlclN0YXRlKDAsIEQzRFNBTVBfQUREUkVTU1UsIEQzRFRBRERSRVNTX0NMQU1QKTsKKyAgICBk
ZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX0FERFJFU1NWLCBEM0RUQUREUkVTU19D
TEFNUCk7CisKKyAgICBSRUNUIHNjaXNzb3JSZWN0ID0gezB9OyAgIC8vIFNjaXNzb3JpbmcgaXMg
ZGlzYWJsZWQgZm9yIGZsaXBwaW5nLCBidXQgd2UgbmVlZCB0aGlzIHRvIGNhcHR1cmUgYW5kIHJl
c3RvcmUgdGhlIG9sZCByZWN0YW5nbGUKKyAgICBkZXZpY2UtPlNldFNjaXNzb3JSZWN0KCZzY2lz
c29yUmVjdCk7CisKKyAgICBmb3IoaW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklC
UzsgaSsrKQorICAgIHsKKyAgICAgICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKGksIDEp
OworICAgIH0KK30KKwordm9pZCBCbGl0OjpyZW5kZXIoKQoreworICAgIElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICBIUkVTVUxUIGhyID0g
ZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2UoMCwgbVF1YWRWZXJ0ZXhCdWZmZXIsIDAsIDIgKiBzaXpl
b2YoZmxvYXQpKTsKKyAgICBociA9IGRldmljZS0+U2V0VmVydGV4RGVjbGFyYXRpb24obVF1YWRW
ZXJ0ZXhEZWNsYXJhdGlvbik7CisKKyAgICBtUmVuZGVyZXItPnN0YXJ0U2NlbmUoKTsKKyAgICBo
ciA9IGRldmljZS0+RHJhd1ByaW1pdGl2ZShEM0RQVF9UUklBTkdMRVNUUklQLCAwLCAyKTsKK30K
Kwordm9pZCBCbGl0OjpzYXZlU3RhdGUoKQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRldmlj
ZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICBIUkVTVUxUIGhyOworCisgICAgZGV2
aWNlLT5HZXREZXB0aFN0ZW5jaWxTdXJmYWNlKCZtU2F2ZWREZXB0aFN0ZW5jaWwpOworICAgIGRl
dmljZS0+R2V0UmVuZGVyVGFyZ2V0KDAsICZtU2F2ZWRSZW5kZXJUYXJnZXQpOworCisgICAgaWYg
KG1TYXZlZFN0YXRlQmxvY2sgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIGhyID0gZGV2aWNlLT5C
ZWdpblN0YXRlQmxvY2soKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikgfHwgaHIgPT0g
RDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgaHIgPT0gRV9PVVRPRk1FTU9SWSk7CisKKyAgICAg
ICAgc2V0Q29tbW9uQmxpdFN0YXRlKCk7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0IGR1
bW15Q29uc3RbNF0gPSB7IDAsIDAsIDAsIDAgfTsKKworICAgICAgICBkZXZpY2UtPlNldFZlcnRl
eFNoYWRlcihOVUxMKTsKKyAgICAgICAgZGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYo
MCwgZHVtbXlDb25zdCwgMSk7CisgICAgICAgIGRldmljZS0+U2V0UGl4ZWxTaGFkZXIoTlVMTCk7
CisgICAgICAgIGRldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYoMCwgZHVtbXlDb25zdCwg
MSk7CisKKyAgICAgICAgRDNEVklFV1BPUlQ5IGR1bW15VnA7CisgICAgICAgIGR1bW15VnAuWCA9
IDA7CisgICAgICAgIGR1bW15VnAuWSA9IDA7CisgICAgICAgIGR1bW15VnAuV2lkdGggPSAxOwor
ICAgICAgICBkdW1teVZwLkhlaWdodCA9IDE7CisgICAgICAgIGR1bW15VnAuTWluWiA9IDA7Cisg
ICAgICAgIGR1bW15VnAuTWF4WiA9IDE7CisKKyAgICAgICAgZGV2aWNlLT5TZXRWaWV3cG9ydCgm
ZHVtbXlWcCk7CisKKyAgICAgICAgZGV2aWNlLT5TZXRUZXh0dXJlKDAsIE5VTEwpOworCisgICAg
ICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlKDAsIG1RdWFkVmVydGV4QnVmZmVyLCAwLCAwKTsK
KworICAgICAgICBkZXZpY2UtPlNldFZlcnRleERlY2xhcmF0aW9uKG1RdWFkVmVydGV4RGVjbGFy
YXRpb24pOworCisgICAgICAgIGhyID0gZGV2aWNlLT5FbmRTdGF0ZUJsb2NrKCZtU2F2ZWRTdGF0
ZUJsb2NrKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikgfHwgaHIgPT0gRDNERVJSX09V
VE9GVklERU9NRU1PUlkgfHwgaHIgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgfQorCisgICAgQVNT
RVJUKG1TYXZlZFN0YXRlQmxvY2sgIT0gTlVMTCk7CisKKyAgICBpZiAobVNhdmVkU3RhdGVCbG9j
ayAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgaHIgPSBtU2F2ZWRTdGF0ZUJsb2NrLT5DYXB0dXJl
KCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICB9Cit9CisKK3ZvaWQgQmxp
dDo6cmVzdG9yZVN0YXRlKCkKK3sKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVu
ZGVyZXItPmdldERldmljZSgpOworCisgICAgZGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNl
KG1TYXZlZERlcHRoU3RlbmNpbCk7CisgICAgaWYgKG1TYXZlZERlcHRoU3RlbmNpbCAhPSBOVUxM
KQorICAgIHsKKyAgICAgICAgbVNhdmVkRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CisgICAgICAg
IG1TYXZlZERlcHRoU3RlbmNpbCA9IE5VTEw7CisgICAgfQorCisgICAgZGV2aWNlLT5TZXRSZW5k
ZXJUYXJnZXQoMCwgbVNhdmVkUmVuZGVyVGFyZ2V0KTsKKyAgICBpZiAobVNhdmVkUmVuZGVyVGFy
Z2V0ICE9IE5VTEwpCisgICAgeworICAgICAgICBtU2F2ZWRSZW5kZXJUYXJnZXQtPlJlbGVhc2Uo
KTsKKyAgICAgICAgbVNhdmVkUmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICB9CisKKyAgICBBU1NF
UlQobVNhdmVkU3RhdGVCbG9jayAhPSBOVUxMKTsKKworICAgIGlmIChtU2F2ZWRTdGF0ZUJsb2Nr
ICE9IE5VTEwpCisgICAgeworICAgICAgICBtU2F2ZWRTdGF0ZUJsb2NrLT5BcHBseSgpOworICAg
IH0KK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L0JsaXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CbGl0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzcxODAyOGU2NjJkM2Q1
NjFjNzZjZDBjYTZmNTJlODEzZTY3MjVjMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CbGl0LmgKQEAgLTAsMCAr
MSw5NCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gQmxpdC5jcHA6IFN1cmZhY2UgY29weSB1
dGlsaXR5IGNsYXNzLgorCisjaWZuZGVmIExJQkdMRVNWMl9CTElUX0hfCisjZGVmaW5lIExJQkdM
RVNWMl9CTElUX0hfCisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorCituYW1lc3Bh
Y2UgZ2wKK3sKK2NsYXNzIEZyYW1lYnVmZmVyOworfQorCituYW1lc3BhY2UgcngKK3sKK2NsYXNz
IFJlbmRlcmVyOTsKK2NsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ7CitjbGFzcyBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZUN1YmU7CisKK2NsYXNzIEJsaXQKK3sKKyAgcHVibGljOgorICAg
IGV4cGxpY2l0IEJsaXQoUmVuZGVyZXI5ICpyZW5kZXJlcik7CisgICAgfkJsaXQoKTsKKworICAg
IC8vIENvcHkgZnJvbSBzb3VyY2Ugc3VyZmFjZSB0byBkZXN0IHN1cmZhY2UuCisgICAgLy8gc291
cmNlUmVjdCwgeG9mZnNldCwgeW9mZnNldCBhcmUgaW4gRDNEIGNvb3JkaW5hdGVzICgwLDAgaW4g
dXBwZXItbGVmdCkKKyAgICBib29sIGNvcHkoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwg
Y29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIEdMaW50
IGxldmVsKTsKKyAgICBib29sIGNvcHkoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29u
c3QgUkVDVCAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwpOworCisgICAgLy8gQ29weSBmcm9tIHNvdXJjZSBzdXJmYWNl
IHRvIGRlc3Qgc3VyZmFjZS4KKyAgICAvLyBzb3VyY2VSZWN0LCB4b2Zmc2V0LCB5b2Zmc2V0IGFy
ZSBpbiBEM0QgY29vcmRpbmF0ZXMgKDAsMCBpbiB1cHBlci1sZWZ0KQorICAgIC8vIHNvdXJjZSBp
cyBpbnRlcnByZXRlZCBhcyBSR0JBIGFuZCBkZXN0Rm9ybWF0IHNwZWNpZmllcyB0aGUgZGVzaXJl
ZCByZXN1bHQgZm9ybWF0LiBGb3IgZXhhbXBsZSwgaWYgZGVzdEZvcm1hdCA9IEdMX1JHQiwgdGhl
IGFscGhhIGNoYW5uZWwgd2lsbCBiZSBmb3JjZWQgdG8gMC4KKyAgICBib29sIGZvcm1hdENvbnZl
cnQoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xl
bnVtIGRlc3RGb3JtYXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIElEaXJlY3QzRFN1
cmZhY2U5ICpkZXN0KTsKKworICAgIC8vIDJ4MiBib3ggZmlsdGVyIHNhbXBsZSBmcm9tIHNvdXJj
ZSB0byBkZXN0LgorICAgIC8vIFJlcXVpcmVzIHRoYXQgc291cmNlIGlzIFJHQihBKSBhbmQgZGVz
dCBoYXMgdGhlIHNhbWUgZm9ybWF0IGFzIHNvdXJjZS4KKyAgICBib29sIGJveEZpbHRlcihJRGly
ZWN0M0RTdXJmYWNlOSAqc291cmNlLCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCk7CisKKyAgcHJp
dmF0ZToKKyAgICByeDo6UmVuZGVyZXI5ICptUmVuZGVyZXI7CisKKyAgICBJRGlyZWN0M0RWZXJ0
ZXhCdWZmZXI5ICptUXVhZFZlcnRleEJ1ZmZlcjsKKyAgICBJRGlyZWN0M0RWZXJ0ZXhEZWNsYXJh
dGlvbjkgKm1RdWFkVmVydGV4RGVjbGFyYXRpb247CisKKyAgICB2b2lkIGluaXRHZW9tZXRyeSgp
OworCisgICAgYm9vbCBzZXRGb3JtYXRDb252ZXJ0U2hhZGVycyhHTGVudW0gZGVzdEZvcm1hdCk7
CisKKyAgICBib29sIGNvcHkoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgY29uc3QgUkVDVCAm
c291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0KTsKKyAgICBJRGlyZWN0M0RUZXh0dXJlOSAqY29w
eVN1cmZhY2VUb1RleHR1cmUoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UsIGNvbnN0IFJFQ1Qg
JnNvdXJjZVJlY3QpOworICAgIHZvaWQgc2V0Vmlld3BvcnQoY29uc3QgUkVDVCAmc291cmNlUmVj
dCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCk7CisgICAgdm9pZCBzZXRDb21tb25CbGl0
U3RhdGUoKTsKKyAgICBSRUNUIGdldFN1cmZhY2VSZWN0KElEaXJlY3QzRFN1cmZhY2U5ICpzdXJm
YWNlKSBjb25zdDsKKworICAgIC8vIFRoaXMgZW51bSBpcyB1c2VkIHRvIGluZGV4IG1Db21waWxl
ZFNoYWRlcnMgYW5kIG1TaGFkZXJTb3VyY2UuCisgICAgZW51bSBTaGFkZXJJZAorICAgIHsKKyAg
ICAgICAgU0hBREVSX1ZTX1NUQU5EQVJELAorICAgICAgICBTSEFERVJfVlNfRkxJUFksCisgICAg
ICAgIFNIQURFUl9QU19QQVNTVEhST1VHSCwKKyAgICAgICAgU0hBREVSX1BTX0xVTUlOQU5DRSwK
KyAgICAgICAgU0hBREVSX1BTX0NPTVBPTkVOVE1BU0ssCisgICAgICAgIFNIQURFUl9DT1VOVAor
ICAgIH07CisKKyAgICAvLyBUaGlzIGFjdHVhbGx5IGNvbnRhaW5zIElEaXJlY3QzRFZlcnRleFNo
YWRlcjkgb3IgSURpcmVjdDNEUGl4ZWxTaGFkZXI5IGNhc3RlZCB0byBJVW5rbm93bi4KKyAgICBJ
VW5rbm93biAqbUNvbXBpbGVkU2hhZGVyc1tTSEFERVJfQ09VTlRdOworCisgICAgdGVtcGxhdGUg
PGNsYXNzIEQzRFNoYWRlclR5cGU+CisgICAgYm9vbCBzZXRTaGFkZXIoU2hhZGVySWQgc291cmNl
LCBjb25zdCBjaGFyICpwcm9maWxlLAorICAgICAgICAgICAgICAgICAgIEQzRFNoYWRlclR5cGUg
KihSZW5kZXJlcjk6OipjcmVhdGVTaGFkZXIpKGNvbnN0IERXT1JEICosIHNpemVfdCBsZW5ndGgp
LAorICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgKFdJTkFQSSBJRGlyZWN0M0REZXZpY2U5Ojoq
c2V0U2hhZGVyKShEM0RTaGFkZXJUeXBlKikpOworCisgICAgYm9vbCBzZXRWZXJ0ZXhTaGFkZXIo
U2hhZGVySWQgc2hhZGVyKTsKKyAgICBib29sIHNldFBpeGVsU2hhZGVyKFNoYWRlcklkIHNoYWRl
cik7CisgICAgdm9pZCByZW5kZXIoKTsKKworICAgIHZvaWQgc2F2ZVN0YXRlKCk7CisgICAgdm9p
ZCByZXN0b3JlU3RhdGUoKTsKKyAgICBJRGlyZWN0M0RTdGF0ZUJsb2NrOSAqbVNhdmVkU3RhdGVC
bG9jazsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVNhdmVkUmVuZGVyVGFyZ2V0OworICAgIElE
aXJlY3QzRFN1cmZhY2U5ICptU2F2ZWREZXB0aFN0ZW5jaWw7CisKKyAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oQmxpdCk7Cit9OworfQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfQkxJVF9I
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L0J1ZmZlclN0b3JhZ2U5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CdWZmZXJTdG9yYWdlOS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OWZkYzEyNDZmMTc0MzZkN2Y0YzRjY2YzZTU0OTYwNjUyMDg5MzU5MAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9C
dWZmZXJTdG9yYWdlOS5jcHAKQEAgLTAsMCArMSw3OCBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVk
LmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworLy8gQnVmZmVyU3RvcmFnZTkuY3BwIERlZmluZXMgdGhlIEJ1
ZmZlclN0b3JhZ2U5IGNsYXNzLgorCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
QnVmZmVyU3RvcmFnZTkuaCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKworbmFtZXNwYWNl
IHJ4Cit7CisKK0J1ZmZlclN0b3JhZ2U5OjpCdWZmZXJTdG9yYWdlOSgpCit7CisgICAgbU1lbW9y
eSA9IE5VTEw7CisgICAgbUFsbG9jYXRlZFNpemUgPSAwOworICAgIG1TaXplID0gMDsKK30KKwor
QnVmZmVyU3RvcmFnZTk6On5CdWZmZXJTdG9yYWdlOSgpCit7CisgICAgZGVsZXRlW10gbU1lbW9y
eTsKK30KKworQnVmZmVyU3RvcmFnZTkgKkJ1ZmZlclN0b3JhZ2U5OjptYWtlQnVmZmVyU3RvcmFn
ZTkoQnVmZmVyU3RvcmFnZSAqYnVmZmVyU3RvcmFnZSkKK3sKKyAgICBBU1NFUlQoSEFTX0RZTkFN
SUNfVFlQRShCdWZmZXJTdG9yYWdlOSosIGJ1ZmZlclN0b3JhZ2UpKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8QnVmZmVyU3RvcmFnZTkqPihidWZmZXJTdG9yYWdlKTsKK30KKwordm9pZCAqQnVm
ZmVyU3RvcmFnZTk6OmdldERhdGEoKQoreworICAgIHJldHVybiBtTWVtb3J5OworfQorCit2b2lk
IEJ1ZmZlclN0b3JhZ2U5OjpzZXREYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGludCBz
aXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworICAgIGlmICghbU1lbW9yeSB8fCBvZmZzZXQg
KyBzaXplID4gbUFsbG9jYXRlZFNpemUpCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgbmV3
QWxsb2NhdGVkU2l6ZSA9IG9mZnNldCArIHNpemU7CisgICAgICAgIHZvaWQgKm5ld01lbW9yeSA9
IG5ldyBjaGFyW25ld0FsbG9jYXRlZFNpemVdOworCisgICAgICAgIGlmIChvZmZzZXQgPiAwICYm
IG1NZW1vcnkgJiYgbUFsbG9jYXRlZFNpemUgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBt
ZW1jcHkobmV3TWVtb3J5LCBtTWVtb3J5LCBzdGQ6Om1pbihvZmZzZXQsIG1BbGxvY2F0ZWRTaXpl
KSk7CisgICAgICAgIH0KKworICAgICAgICBkZWxldGVbXSBtTWVtb3J5OworICAgICAgICBtTWVt
b3J5ID0gbmV3TWVtb3J5OworICAgICAgICBtQWxsb2NhdGVkU2l6ZSA9IG5ld0FsbG9jYXRlZFNp
emU7CisgICAgfQorCisgICAgbVNpemUgPSBzdGQ6Om1heChtU2l6ZSwgb2Zmc2V0ICsgc2l6ZSk7
CisgICAgaWYgKGRhdGEpCisgICAgeworICAgICAgICBtZW1jcHkocmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4obU1lbW9yeSkgKyBvZmZzZXQsIGRhdGEsIHNpemUpOworICAgIH0KK30KKwordm9pZCBC
dWZmZXJTdG9yYWdlOTo6Y2xlYXIoKQoreworICAgIG1TaXplID0gMDsKK30KKwordW5zaWduZWQg
aW50IEJ1ZmZlclN0b3JhZ2U5OjpnZXRTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVNpemU7
Cit9CisKK2Jvb2wgQnVmZmVyU3RvcmFnZTk6OnN1cHBvcnRzRGlyZWN0QmluZGluZygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvQnVmZmVyU3RvcmFnZTkuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CdWZm
ZXJTdG9yYWdlOS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNlODAzOTY5YmMzNWQ0ZWExMTFkYTIyODFmMjViM2Ux
NzFkZGMyMzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvQnVmZmVyU3RvcmFnZTkuaApAQCAtMCwwICsxLDQyIEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworLy8gQnVmZmVyU3RvcmFnZTkuaCBEZWZpbmVzIHRoZSBCdWZmZXJT
dG9yYWdlOSBjbGFzcy4KKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfQlVGRkVSU1RPUkFH
RTlfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX0JVRkZFUlNUT1JBR0U5X0hfCisKKyNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5oIgorCituYW1lc3BhY2Ug
cngKK3sKKworY2xhc3MgQnVmZmVyU3RvcmFnZTkgOiBwdWJsaWMgQnVmZmVyU3RvcmFnZQorewor
ICBwdWJsaWM6CisgICAgQnVmZmVyU3RvcmFnZTkoKTsKKyAgICB2aXJ0dWFsIH5CdWZmZXJTdG9y
YWdlOSgpOworCisgICAgc3RhdGljIEJ1ZmZlclN0b3JhZ2U5ICptYWtlQnVmZmVyU3RvcmFnZTko
QnVmZmVyU3RvcmFnZSAqYnVmZmVyU3RvcmFnZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgKmdldERh
dGEoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25l
ZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNldCk7CisgICAgdmlydHVhbCB2b2lkIGNsZWFy
KCk7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2l6ZSgpIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBzdXBwb3J0c0RpcmVjdEJpbmRpbmcoKSBjb25zdDsKKworICBwcml2YXRlOgorICAg
IERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihCdWZmZXJTdG9yYWdlOSk7CisKKyAgICB2b2lkICpt
TWVtb3J5OworICAgIHVuc2lnbmVkIGludCBtQWxsb2NhdGVkU2l6ZTsKKworICAgIHVuc2lnbmVk
IGludCBtU2l6ZTsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9CVUZG
RVJTVE9SQUdFOV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ZlbmNlOS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvRmVuY2U5LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42Mzlj
MzdiNGU0Mzk5Y2I0ZmZkODc5ZjQ3ZjE1MWZjMGNiYWMzMDhjCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ZlbmNl
OS5jcHAKQEAgLTAsMCArMSwxMzUgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKy8vIEZlbmNlOS5jcHA6IERlZmluZXMgdGhlIHJ4OjpGZW5jZTkgY2xhc3MuCisK
KyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9GZW5jZTkuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvbWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRl
cmVyOV91dGlscy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVy
OS5oIgorCituYW1lc3BhY2UgcngKK3sKKworRmVuY2U5OjpGZW5jZTkocng6OlJlbmRlcmVyOSAq
cmVuZGVyZXIpCit7CisgICAgbVJlbmRlcmVyID0gcmVuZGVyZXI7CisgICAgbVF1ZXJ5ID0gTlVM
TDsKK30KKworRmVuY2U5Ojp+RmVuY2U5KCkKK3sKKyAgICBpZiAobVF1ZXJ5KQorICAgIHsKKyAg
ICAgICAgbVJlbmRlcmVyLT5mcmVlRXZlbnRRdWVyeShtUXVlcnkpOworICAgICAgICBtUXVlcnkg
PSBOVUxMOworICAgIH0KK30KKworR0xib29sZWFuIEZlbmNlOTo6aXNGZW5jZSgpCit7CisgICAg
Ly8gR0xfTlZfZmVuY2Ugc3BlYzoKKyAgICAvLyBBIG5hbWUgcmV0dXJuZWQgYnkgR2VuRmVuY2Vz
TlYsIGJ1dCBub3QgeWV0IHNldCB2aWEgU2V0RmVuY2VOViwgaXMgbm90IHRoZSBuYW1lIG9mIGFu
IGV4aXN0aW5nIGZlbmNlLgorICAgIHJldHVybiBtUXVlcnkgIT0gTlVMTDsKK30KKwordm9pZCBG
ZW5jZTk6OnNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pCit7CisgICAgaWYgKCFtUXVlcnkpCisg
ICAgeworICAgICAgICBtUXVlcnkgPSBtUmVuZGVyZXItPmFsbG9jYXRlRXZlbnRRdWVyeSgpOwor
ICAgICAgICBpZiAoIW1RdWVyeSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEhSRVNVTFQg
cmVzdWx0ID0gbVF1ZXJ5LT5Jc3N1ZShEM0RJU1NVRV9FTkQpOworICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7CisKKyAgICBzZXRDb25kaXRpb24oY29uZGl0aW9uKTsKKyAgICBzZXRTdGF0
dXMoR0xfRkFMU0UpOworfQorCitHTGJvb2xlYW4gRmVuY2U5Ojp0ZXN0RmVuY2UoKQoreworICAg
IGlmIChtUXVlcnkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04sIEdMX1RSVUUpOworICAgIH0KKworICAgIEhSRVNVTFQgcmVzdWx0
ID0gbVF1ZXJ5LT5HZXREYXRhKE5VTEwsIDAsIEQzREdFVERBVEFfRkxVU0gpOworCisgICAgaWYg
KGQzZDk6OmlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCisgICAgeworICAgICAgICBtUmVuZGVy
ZXItPm5vdGlmeURldmljZUxvc3QoKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZLCBHTF9UUlVFKTsKKyAgICB9CisKKyAgICBBU1NFUlQocmVzdWx0ID09IFNfT0sg
fHwgcmVzdWx0ID09IFNfRkFMU0UpOworICAgIHNldFN0YXR1cyhyZXN1bHQgPT0gU19PSyk7Cisg
ICAgcmV0dXJuIGdldFN0YXR1cygpOworfQorCit2b2lkIEZlbmNlOTo6ZmluaXNoRmVuY2UoKQor
eworICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgIH0KKworICAgIHdoaWxlICghdGVzdEZlbmNl
KCkpCisgICAgeworICAgICAgICBTbGVlcCgwKTsKKyAgICB9Cit9CisKK3ZvaWQgRmVuY2U5Ojpn
ZXRGZW5jZWl2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcykKK3sKKyAgICBpZiAobVF1ZXJ5
ID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHBuYW1lKQorICAgIHsKKyAgICAgICAgY2Fz
ZSBHTF9GRU5DRV9TVEFUVVNfTlY6CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEdMX05WX2Zl
bmNlIHNwZWM6CisgICAgICAgICAgICAvLyBPbmNlIHRoZSBzdGF0dXMgb2YgYSBmZW5jZSBoYXMg
YmVlbiBmaW5pc2hlZCAodmlhIEZpbmlzaEZlbmNlTlYpIG9yIHRlc3RlZCBhbmQgdGhlIHJldHVy
bmVkIHN0YXR1cyBpcyBUUlVFICh2aWEgZWl0aGVyIFRlc3RGZW5jZU5WCisgICAgICAgICAgICAv
LyBvciBHZXRGZW5jZWl2TlYgcXVlcnlpbmcgdGhlIEZFTkNFX1NUQVRVU19OViksIHRoZSBzdGF0
dXMgcmVtYWlucyBUUlVFIHVudGlsIHRoZSBuZXh0IFNldEZlbmNlTlYgb2YgdGhlIGZlbmNlLgor
ICAgICAgICAgICAgaWYgKGdldFN0YXR1cygpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHBhcmFtc1swXSA9IEdMX1RSVUU7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1RdWVy
eS0+R2V0RGF0YShOVUxMLCAwLCAwKTsKKworICAgICAgICAgICAgaWYgKGQzZDk6OmlzRGV2aWNl
TG9zdEVycm9yKHJlc3VsdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGFyYW1z
WzBdID0gR0xfVFJVRTsKKyAgICAgICAgICAgICAgICBtUmVuZGVyZXItPm5vdGlmeURldmljZUxv
c3QoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IFNfT0sgfHwg
cmVzdWx0ID09IFNfRkFMU0UpOworICAgICAgICAgICAgc2V0U3RhdHVzKHJlc3VsdCA9PSBTX09L
KTsKKyAgICAgICAgICAgIHBhcmFtc1swXSA9IGdldFN0YXR1cygpOworCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEdMX0ZFTkNFX0NPTkRJVElPTl9OVjoKKyAg
ICAgICAgICAgIHBhcmFtc1swXSA9IGdldENvbmRpdGlvbigpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9GZW5j
ZTkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
OS9GZW5jZTkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZjE3NjQxZTUxOWFiNDc4NDA3ZTgwY2NiZmQyNTM4MGEz
ZGNjOGJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ZlbmNlOS5oCkBAIC0wLDAgKzEsMzkgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisvLyBGZW5jZTkuaDogRGVmaW5lcyB0aGUgcng6OkZlbmNlOSBjbGFzcyB3aGljaCBp
bXBsZW1lbnRzIHJ4OjpGZW5jZUltcGwuCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0ZF
TkNFOV9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfRkVOQ0U5X0hfCisKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvRmVuY2VJbXBsLmgiCisKK25hbWVzcGFjZSByeAoreworY2xh
c3MgUmVuZGVyZXI5OworCitjbGFzcyBGZW5jZTkgOiBwdWJsaWMgRmVuY2VJbXBsCit7CisgIHB1
YmxpYzoKKyAgICBleHBsaWNpdCBGZW5jZTkocng6OlJlbmRlcmVyOSAqcmVuZGVyZXIpOworICAg
IHZpcnR1YWwgfkZlbmNlOSgpOworCisgICAgR0xib29sZWFuIGlzRmVuY2UoKTsKKyAgICB2b2lk
IHNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pOworICAgIEdMYm9vbGVhbiB0ZXN0RmVuY2UoKTsK
KyAgICB2b2lkIGZpbmlzaEZlbmNlKCk7CisgICAgdm9pZCBnZXRGZW5jZWl2KEdMZW51bSBwbmFt
ZSwgR0xpbnQgKnBhcmFtcyk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9B
U1NJR04oRmVuY2U5KTsKKworICAgIHJ4OjpSZW5kZXJlcjkgKm1SZW5kZXJlcjsKKyAgICBJRGly
ZWN0M0RRdWVyeTkgKm1RdWVyeTsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5E
RVJFUl9GRU5DRTlfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbWFnZTkuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ltYWdlOS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODUx
MTk0NjM2ZDBiMzE5NmY5YTI2NGFhYWZmMmEyMTc1N2E4OTljMwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbWFn
ZTkuY3BwCkBAIC0wLDAgKzEsNzMyIEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKy8vIEltYWdlOS5jcHA6IEltcGxlbWVudHMgdGhlIHJ4OjpJbWFnZTkg
Y2xhc3MsIHdoaWNoIGFjdHMgYXMgdGhlIGludGVyZmFjZSB0bworLy8gdGhlIGFjdHVhbCB1bmRl
cmx5aW5nIHN1cmZhY2VzIG9mIGEgVGV4dHVyZS4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L0ltYWdlOS5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVy
YnVmZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5Lmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1RleHR1cmVTdG9yYWdlOS5oIgorCisjaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL2dlbmVyYXRlbWlwLmgiCisKK25hbWVzcGFjZSByeAorewor
CitJbWFnZTk6OkltYWdlOSgpCit7CisgICAgbVN1cmZhY2UgPSBOVUxMOworICAgIG1SZW5kZXJl
ciA9IE5VTEw7CisKKyAgICBtRDNEUG9vbCA9IEQzRFBPT0xfU1lTVEVNTUVNOworICAgIG1EM0RG
b3JtYXQgPSBEM0RGTVRfVU5LTk9XTjsKK30KKworSW1hZ2U5Ojp+SW1hZ2U5KCkKK3sKKyAgICBp
ZiAobVN1cmZhY2UpCisgICAgeworICAgICAgICBtU3VyZmFjZS0+UmVsZWFzZSgpOworICAgIH0K
K30KKwordm9pZCBJbWFnZTk6OmdlbmVyYXRlTWlwKElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0U3Vy
ZmFjZSwgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZVN1cmZhY2UpCit7CisgICAgRDNEU1VSRkFD
RV9ERVNDIGRlc3REZXNjOworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGVzdFN1cmZhY2UtPkdldERl
c2MoJmRlc3REZXNjKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgRDNE
U1VSRkFDRV9ERVNDIHNvdXJjZURlc2M7CisgICAgcmVzdWx0ID0gc291cmNlU3VyZmFjZS0+R2V0
RGVzYygmc291cmNlRGVzYyk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAg
IEFTU0VSVChzb3VyY2VEZXNjLkZvcm1hdCA9PSBkZXN0RGVzYy5Gb3JtYXQpOworICAgIEFTU0VS
VChzb3VyY2VEZXNjLldpZHRoID09IDEgfHwgc291cmNlRGVzYy5XaWR0aCAvIDIgPT0gZGVzdERl
c2MuV2lkdGgpOworICAgIEFTU0VSVChzb3VyY2VEZXNjLkhlaWdodCA9PSAxIHx8IHNvdXJjZURl
c2MuSGVpZ2h0IC8gMiA9PSBkZXN0RGVzYy5IZWlnaHQpOworCisgICAgRDNETE9DS0VEX1JFQ1Qg
c291cmNlTG9ja2VkID0gezB9OworICAgIHJlc3VsdCA9IHNvdXJjZVN1cmZhY2UtPkxvY2tSZWN0
KCZzb3VyY2VMb2NrZWQsIE5VTEwsIEQzRExPQ0tfUkVBRE9OTFkpOworICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7CisKKyAgICBEM0RMT0NLRURfUkVDVCBkZXN0TG9ja2VkID0gezB9Owor
ICAgIHJlc3VsdCA9IGRlc3RTdXJmYWNlLT5Mb2NrUmVjdCgmZGVzdExvY2tlZCwgTlVMTCwgMCk7
CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIGNvbnN0IHVuc2lnbmVkIGNo
YXIgKnNvdXJjZURhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihz
b3VyY2VMb2NrZWQucEJpdHMpOworICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhID0gcmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZGVzdExvY2tlZC5wQml0cyk7CisKKyAgICBpZiAo
c291cmNlRGF0YSAmJiBkZXN0RGF0YSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc291cmNlRGVz
Yy5Gb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEQzREZNVF9MODoKKyAgICAgICAg
ICAgIEdlbmVyYXRlTWlwPEw4Pihzb3VyY2VEZXNjLldpZHRoLCBzb3VyY2VEZXNjLkhlaWdodCwg
c291cmNlRGF0YSwgc291cmNlTG9ja2VkLlBpdGNoLCBkZXN0RGF0YSwgZGVzdExvY2tlZC5QaXRj
aCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEQzREZNVF9BOEw4OgorICAg
ICAgICAgICAgR2VuZXJhdGVNaXA8QThMOD4oc291cmNlRGVzYy5XaWR0aCwgc291cmNlRGVzYy5I
ZWlnaHQsIHNvdXJjZURhdGEsIHNvdXJjZUxvY2tlZC5QaXRjaCwgZGVzdERhdGEsIGRlc3RMb2Nr
ZWQuUGl0Y2gpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBEM0RGTVRfQThS
OEc4Qjg6CisgICAgICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6CisgICAgICAgICAgICBHZW5l
cmF0ZU1pcDxBOFI4RzhCOD4oc291cmNlRGVzYy5XaWR0aCwgc291cmNlRGVzYy5IZWlnaHQsIHNv
dXJjZURhdGEsIHNvdXJjZUxvY2tlZC5QaXRjaCwgZGVzdERhdGEsIGRlc3RMb2NrZWQuUGl0Y2gp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2
RjoKKyAgICAgICAgICAgIEdlbmVyYXRlTWlwPEExNkIxNkcxNlIxNkY+KHNvdXJjZURlc2MuV2lk
dGgsIHNvdXJjZURlc2MuSGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3VyY2VMb2NrZWQuUGl0Y2gsIGRl
c3REYXRhLCBkZXN0TG9ja2VkLlBpdGNoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
IGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6CisgICAgICAgICAgICBHZW5lcmF0ZU1pcDxBMzJC
MzJHMzJSMzJGPihzb3VyY2VEZXNjLldpZHRoLCBzb3VyY2VEZXNjLkhlaWdodCwgc291cmNlRGF0
YSwgc291cmNlTG9ja2VkLlBpdGNoLCBkZXN0RGF0YSwgZGVzdExvY2tlZC5QaXRjaCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVzdFN1cmZh
Y2UtPlVubG9ja1JlY3QoKTsKKyAgICAgICAgc291cmNlU3VyZmFjZS0+VW5sb2NrUmVjdCgpOwor
ICAgIH0KK30KKworSW1hZ2U5ICpJbWFnZTk6Om1ha2VJbWFnZTkoSW1hZ2UgKmltZykKK3sKKyAg
ICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShyeDo6SW1hZ2U5KiwgaW1nKSk7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PHJ4OjpJbWFnZTkqPihpbWcpOworfQorCit2b2lkIEltYWdlOTo6Z2VuZXJh
dGVNaXBtYXAoSW1hZ2U5ICpkZXN0LCBJbWFnZTkgKnNvdXJjZSkKK3sKKyAgICBJRGlyZWN0M0RT
dXJmYWNlOSAqc291cmNlU3VyZmFjZSA9IHNvdXJjZS0+Z2V0U3VyZmFjZSgpOworICAgIGlmIChz
b3VyY2VTdXJmYWNlID09IE5VTEwpCisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdFN1cmZhY2UgPSBkZXN0LT5n
ZXRTdXJmYWNlKCk7CisgICAgZ2VuZXJhdGVNaXAoZGVzdFN1cmZhY2UsIHNvdXJjZVN1cmZhY2Up
OworCisgICAgZGVzdC0+bWFya0RpcnR5KCk7Cit9CisKK3ZvaWQgSW1hZ2U5Ojpjb3B5TG9ja2Fi
bGVTdXJmYWNlcyhJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgSURpcmVjdDNEU3VyZmFjZTkgKnNv
dXJjZSkKK3sKKyAgICBEM0RMT0NLRURfUkVDVCBzb3VyY2VMb2NrID0gezB9OworICAgIEQzRExP
Q0tFRF9SRUNUIGRlc3RMb2NrID0gezB9OworICAgIAorICAgIHNvdXJjZS0+TG9ja1JlY3QoJnNv
dXJjZUxvY2ssIE5VTEwsIDApOworICAgIGRlc3QtPkxvY2tSZWN0KCZkZXN0TG9jaywgTlVMTCwg
MCk7CisgICAgCisgICAgaWYgKHNvdXJjZUxvY2sucEJpdHMgJiYgZGVzdExvY2sucEJpdHMpCisg
ICAgeworICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKKyAgICAgICAgc291cmNlLT5HZXRE
ZXNjKCZkZXNjKTsKKworICAgICAgICBpbnQgcm93cyA9IGQzZDk6OklzQ29tcHJlc3NlZEZvcm1h
dChkZXNjLkZvcm1hdCkgPyBkZXNjLkhlaWdodCAvIDQgOiBkZXNjLkhlaWdodDsKKyAgICAgICAg
aW50IGJ5dGVzID0gZDNkOTo6Q29tcHV0ZVJvd1NpemUoZGVzYy5Gb3JtYXQsIGRlc2MuV2lkdGgp
OworICAgICAgICBBU1NFUlQoYnl0ZXMgPD0gc291cmNlTG9jay5QaXRjaCAmJiBieXRlcyA8PSBk
ZXN0TG9jay5QaXRjaCk7CisKKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHJvd3M7IGkrKykK
KyAgICAgICAgeworICAgICAgICAgICAgbWVtY3B5KChjaGFyKilkZXN0TG9jay5wQml0cyArIGRl
c3RMb2NrLlBpdGNoICogaSwgKGNoYXIqKXNvdXJjZUxvY2sucEJpdHMgKyBzb3VyY2VMb2NrLlBp
dGNoICogaSwgYnl0ZXMpOworICAgICAgICB9CisKKyAgICAgICAgc291cmNlLT5VbmxvY2tSZWN0
KCk7CisgICAgICAgIGRlc3QtPlVubG9ja1JlY3QoKTsKKyAgICB9CisgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOworfQorCitib29sIEltYWdlOTo6cmVkZWZpbmUocng6OlJlbmRlcmVyICpyZW5kZXJl
ciwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBi
b29sIGZvcmNlUmVsZWFzZSkKK3sKKyAgICBpZiAobVdpZHRoICE9IHdpZHRoIHx8CisgICAgICAg
IG1IZWlnaHQgIT0gaGVpZ2h0IHx8CisgICAgICAgIG1JbnRlcm5hbEZvcm1hdCAhPSBpbnRlcm5h
bGZvcm1hdCB8fAorICAgICAgICBmb3JjZVJlbGVhc2UpCisgICAgeworICAgICAgICBtUmVuZGVy
ZXIgPSBSZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjkocmVuZGVyZXIpOworCisgICAgICAgIG1XaWR0
aCA9IHdpZHRoOworICAgICAgICBtSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICBtSW50ZXJuYWxG
b3JtYXQgPSBpbnRlcm5hbGZvcm1hdDsKKyAgICAgICAgLy8gY29tcHV0ZSB0aGUgZDNkIGZvcm1h
dCB0aGF0IHdpbGwgYmUgdXNlZAorICAgICAgICBtRDNERm9ybWF0ID0gbVJlbmRlcmVyLT5Db252
ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0KTsKKyAgICAgICAgbUFjdHVh
bEZvcm1hdCA9IGQzZDlfZ2w6OkdldEVxdWl2YWxlbnRGb3JtYXQobUQzREZvcm1hdCk7CisKKyAg
ICAgICAgaWYgKG1TdXJmYWNlKQorICAgICAgICB7CisgICAgICAgICAgICBtU3VyZmFjZS0+UmVs
ZWFzZSgpOworICAgICAgICAgICAgbVN1cmZhY2UgPSBOVUxMOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIElt
YWdlOTo6Y3JlYXRlU3VyZmFjZSgpCit7CisgICAgaWYobVN1cmZhY2UpCisgICAgeworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgSURpcmVjdDNEVGV4dHVyZTkgKm5ld1RleHR1cmUgPSBO
VUxMOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpuZXdTdXJmYWNlID0gTlVMTDsKKyAgICBjb25z
dCBEM0RQT09MIHBvb2xUb1VzZSA9IEQzRFBPT0xfU1lTVEVNTUVNOworICAgIGNvbnN0IEQzREZP
Uk1BVCBkM2RGb3JtYXQgPSBnZXREM0RGb3JtYXQoKTsKKyAgICBBU1NFUlQoZDNkRm9ybWF0ICE9
IEQzREZNVF9JTlRaKTsgLy8gV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlIGZvciBkZXB0aCB0ZXh0
dXJlcworCisgICAgaWYgKG1XaWR0aCAhPSAwICYmIG1IZWlnaHQgIT0gMCkKKyAgICB7CisgICAg
ICAgIGludCBsZXZlbFRvRmV0Y2ggPSAwOworICAgICAgICBHTHNpemVpIHJlcXVlc3RXaWR0aCA9
IG1XaWR0aDsKKyAgICAgICAgR0xzaXplaSByZXF1ZXN0SGVpZ2h0ID0gbUhlaWdodDsKKyAgICAg
ICAgZ2w6Ok1ha2VWYWxpZFNpemUodHJ1ZSwgZ2w6OklzQ29tcHJlc3NlZChtSW50ZXJuYWxGb3Jt
YXQpLCAmcmVxdWVzdFdpZHRoLCAmcmVxdWVzdEhlaWdodCwgJmxldmVsVG9GZXRjaCk7CisKKyAg
ICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsK
KworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZShyZXF1ZXN0
V2lkdGgsIHJlcXVlc3RIZWlnaHQsIGxldmVsVG9GZXRjaCArIDEsIDAsIGQzZEZvcm1hdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb29sVG9V
c2UsICZuZXdUZXh0dXJlLCBOVUxMKTsKKworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9N
RU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgRVJSKCJDcmVh
dGluZyBpbWFnZSBzdXJmYWNlIGZhaWxlZC4iKTsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKworICAgICAgICBuZXdUZXh0dXJlLT5H
ZXRTdXJmYWNlTGV2ZWwobGV2ZWxUb0ZldGNoLCAmbmV3U3VyZmFjZSk7CisgICAgICAgIG5ld1Rl
eHR1cmUtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBtU3VyZmFjZSA9IG5ld1N1cmZhY2U7Cisg
ICAgbURpcnR5ID0gZmFsc2U7CisgICAgbUQzRFBvb2wgPSBwb29sVG9Vc2U7Cit9CisKK0hSRVNV
TFQgSW1hZ2U5Ojpsb2NrKEQzRExPQ0tFRF9SRUNUICpsb2NrZWRSZWN0LCBjb25zdCBSRUNUICpy
ZWN0KQoreworICAgIGNyZWF0ZVN1cmZhY2UoKTsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gRDNE
RVJSX0lOVkFMSURDQUxMOworCisgICAgaWYgKG1TdXJmYWNlKQorICAgIHsKKyAgICAgICAgcmVz
dWx0ID0gbVN1cmZhY2UtPkxvY2tSZWN0KGxvY2tlZFJlY3QsIHJlY3QsIDApOworICAgICAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgIG1EaXJ0eSA9IHRydWU7CisgICAg
fQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBJbWFnZTk6OnVubG9jaygpCit7Cisg
ICAgaWYgKG1TdXJmYWNlKQorICAgIHsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtU3VyZmFj
ZS0+VW5sb2NrUmVjdCgpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAg
IH0KK30KKworYm9vbCBJbWFnZTk6OmlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0Cit7ICAgIAor
ICAgIHJldHVybiBUZXh0dXJlU3RvcmFnZTk6OklzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoZ2V0
RDNERm9ybWF0KCkpOworfQorCitEM0RGT1JNQVQgSW1hZ2U5OjpnZXREM0RGb3JtYXQoKSBjb25z
dAoreworICAgIC8vIHRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIHRoZSBpbWFnZSBoYXNuJ3Qg
YmVlbiByZWRlZmluZWQgZmlyc3QKKyAgICAvLyB3aGljaCB3b3VsZCBiZSBhIGJ1ZyBieSB0aGUg
Y2FsbGVyCisgICAgQVNTRVJUKG1EM0RGb3JtYXQgIT0gRDNERk1UX1VOS05PV04pOworCisgICAg
cmV0dXJuIG1EM0RGb3JtYXQ7Cit9CisKK0lEaXJlY3QzRFN1cmZhY2U5ICpJbWFnZTk6OmdldFN1
cmZhY2UoKQoreworICAgIGNyZWF0ZVN1cmZhY2UoKTsKKworICAgIHJldHVybiBtU3VyZmFjZTsK
K30KKwordm9pZCBJbWFnZTk6OnNldE1hbmFnZWRTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlMkQgKnN0b3JhZ2UsIGludCBsZXZlbCkKK3sKKyAgICBUZXh0dXJlU3RvcmFnZTlfMkQgKnN0
b3JhZ2U5ID0gVGV4dHVyZVN0b3JhZ2U5XzJEOjptYWtlVGV4dHVyZVN0b3JhZ2U5XzJEKHN0b3Jh
Z2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICBzZXRNYW5hZ2VkU3VyZmFjZShzdG9yYWdl
OS0+Z2V0U3VyZmFjZUxldmVsKGxldmVsLCBmYWxzZSkpOworfQorCit2b2lkIEltYWdlOTo6c2V0
TWFuYWdlZFN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQg
ZmFjZSwgaW50IGxldmVsKQoreworICAgIFRleHR1cmVTdG9yYWdlOV9DdWJlICpzdG9yYWdlOSA9
IFRleHR1cmVTdG9yYWdlOV9DdWJlOjptYWtlVGV4dHVyZVN0b3JhZ2U5X0N1YmUoc3RvcmFnZS0+
Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAgIHNldE1hbmFnZWRTdXJmYWNlKHN0b3JhZ2U5LT5n
ZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBs
ZXZlbCwgZmFsc2UpKTsKK30KKwordm9pZCBJbWFnZTk6OnNldE1hbmFnZWRTdXJmYWNlKElEaXJl
Y3QzRFN1cmZhY2U5ICpzdXJmYWNlKQoreworICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOworICAg
IHN1cmZhY2UtPkdldERlc2MoJmRlc2MpOworICAgIEFTU0VSVChkZXNjLlBvb2wgPT0gRDNEUE9P
TF9NQU5BR0VEKTsKKworICAgIGlmICgoR0xzaXplaSlkZXNjLldpZHRoID09IG1XaWR0aCAmJiAo
R0xzaXplaSlkZXNjLkhlaWdodCA9PSBtSGVpZ2h0KQorICAgIHsKKyAgICAgICAgaWYgKG1TdXJm
YWNlKQorICAgICAgICB7CisgICAgICAgICAgICBjb3B5TG9ja2FibGVTdXJmYWNlcyhzdXJmYWNl
LCBtU3VyZmFjZSk7CisgICAgICAgICAgICBtU3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICB9
CisKKyAgICAgICAgbVN1cmZhY2UgPSBzdXJmYWNlOworICAgICAgICBtRDNEUG9vbCA9IGRlc2Mu
UG9vbDsKKyAgICB9Cit9CisKK2Jvb2wgSW1hZ2U5Ojp1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgQVNTRVJUKGdl
dFN1cmZhY2UoKSAhPSBOVUxMKTsKKyAgICBUZXh0dXJlU3RvcmFnZTlfMkQgKnN0b3JhZ2U5ID0g
VGV4dHVyZVN0b3JhZ2U5XzJEOjptYWtlVGV4dHVyZVN0b3JhZ2U5XzJEKHN0b3JhZ2UtPmdldFN0
b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICByZXR1cm4gdXBkYXRlU3VyZmFjZShzdG9yYWdlOS0+Z2V0
U3VyZmFjZUxldmVsKGxldmVsLCB0cnVlKSwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdo
dCk7Cit9CisKK2Jvb2wgSW1hZ2U5Ojp1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlQ3ViZSAqc3RvcmFnZSwgaW50IGZhY2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgQVNTRVJU
KGdldFN1cmZhY2UoKSAhPSBOVUxMKTsKKyAgICBUZXh0dXJlU3RvcmFnZTlfQ3ViZSAqc3RvcmFn
ZTkgPSBUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlOV9DdWJlKHN0b3Jh
Z2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICByZXR1cm4gdXBkYXRlU3VyZmFjZShzdG9y
YWdlOS0+Z2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsg
ZmFjZSwgbGV2ZWwsIHRydWUpLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKK30K
KworYm9vbCBJbWFnZTk6OnVwZGF0ZVN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJm
YWNlLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCkKK3sKKyAgICBpZiAoIWRlc3RTdXJmYWNlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlU3VyZmFjZSA9IGdldFN1cmZhY2UoKTsK
KworICAgIGlmIChzb3VyY2VTdXJmYWNlICYmIHNvdXJjZVN1cmZhY2UgIT0gZGVzdFN1cmZhY2Up
CisgICAgeworICAgICAgICBSRUNUIHJlY3Q7CisgICAgICAgIHJlY3QubGVmdCA9IHhvZmZzZXQ7
CisgICAgICAgIHJlY3QudG9wID0geW9mZnNldDsKKyAgICAgICAgcmVjdC5yaWdodCA9IHhvZmZz
ZXQgKyB3aWR0aDsKKyAgICAgICAgcmVjdC5ib3R0b20gPSB5b2Zmc2V0ICsgaGVpZ2h0OworCisg
ICAgICAgIFBPSU5UIHBvaW50ID0ge3JlY3QubGVmdCwgcmVjdC50b3B9OworCisgICAgICAgIElE
aXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICAg
ICAgaWYgKG1EM0RQb29sID09IEQzRFBPT0xfTUFOQUdFRCkKKyAgICAgICAgeworICAgICAgICAg
ICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7CisgICAgICAgICAgICBzb3VyY2VTdXJmYWNlLT5HZXRE
ZXNjKCZkZXNjKTsKKworICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmYgPSAwOwor
ICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZU9mZnNjcmVlblBsYWlu
U3VyZmFjZShkZXNjLldpZHRoLCBkZXNjLkhlaWdodCwgZGVzYy5Gb3JtYXQsIEQzRFBPT0xfU1lT
VEVNTUVNLCAmc3VyZiwgTlVMTCk7CisKKyAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb3B5TG9ja2FibGVTdXJmYWNlcyhz
dXJmLCBzb3VyY2VTdXJmYWNlKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPlVw
ZGF0ZVN1cmZhY2Uoc3VyZiwgJnJlY3QsIGRlc3RTdXJmYWNlLCAmcG9pbnQpOworICAgICAgICAg
ICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgICAgICAgICAgc3VyZi0+
UmVsZWFzZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gVXBkYXRlU3VyZmFjZTogc291cmNlIG11c3QgYmUgU1lTVEVN
TUVNLCBkZXN0IG11c3QgYmUgREVGQVVMVCBwb29scyAKKyAgICAgICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gZGV2aWNlLT5VcGRhdGVTdXJmYWNlKHNvdXJjZVN1cmZhY2UsICZyZWN0LCBkZXN0U3Vy
ZmFjZSwgJnBvaW50KTsKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBkZXN0U3VyZmFjZS0+UmVsZWFzZSgpOworICAgIHJldHVy
biB0cnVlOworfQorCisvLyBTdG9yZSB0aGUgcGl4ZWwgcmVjdGFuZ2xlIGRlc2lnbmF0ZWQgYnkg
eG9mZnNldCx5b2Zmc2V0LHdpZHRoLGhlaWdodCB3aXRoIHBpeGVscyBzdG9yZWQgYXMgZm9ybWF0
L3R5cGUgYXQgaW5wdXQKKy8vIGludG8gdGhlIHRhcmdldCBwaXhlbCByZWN0YW5nbGUuCit2b2lk
IEltYWdlOTo6bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNr
QWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCkKK3sKKyAgICBSRUNUIGxvY2tSZWN0ID0KKyAg
ICB7CisgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsCisgICAgICAgIHhvZmZzZXQgKyB3aWR0aCwg
eW9mZnNldCArIGhlaWdodAorICAgIH07CisKKyAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7Cisg
ICAgSFJFU1VMVCByZXN1bHQgPSBsb2NrKCZsb2NrZWQsICZsb2NrUmVjdCk7CisgICAgaWYgKEZB
SUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworCisgICAgR0xz
aXplaSBpbnB1dFBpdGNoID0gZ2w6OkNvbXB1dGVQaXRjaCh3aWR0aCwgbUludGVybmFsRm9ybWF0
LCB1bnBhY2tBbGlnbm1lbnQpOworCisgICAgc3dpdGNoIChtSW50ZXJuYWxGb3JtYXQpCisgICAg
eworICAgICAgY2FzZSBHTF9BTFBIQThfRVhUOgorICAgICAgICBpZiAoZ2w6OnN1cHBvcnRzU1NF
MigpKQorICAgICAgICB7CisgICAgICAgICAgICBsb2FkQWxwaGFEYXRhVG9CR1JBU1NFMih3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMp
OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbG9hZEFs
cGhhRGF0YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBp
dGNoLCBsb2NrZWQucEJpdHMpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9MVU1JTkFOQ0U4X0VYVDoKKyAgICAgICAgbG9hZEx1bWluYW5jZURhdGFUb05hdGl2ZU9y
QkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2Nr
ZWQucEJpdHMsIGdldEQzREZvcm1hdCgpID09IEQzREZNVF9MOCk7CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9BTFBIQTMyRl9FWFQ6CisgICAgICAgIGxvYWRBbHBoYUZsb2F0RGF0YVRv
UkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2Nr
ZWQucEJpdHMpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMzJGX0VY
VDoKKyAgICAgICAgbG9hZEx1bWluYW5jZUZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBp
bnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOworICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfQUxQSEExNkZfRVhUOgorICAgICAgICBsb2FkQWxwaGFIYWxm
RmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQu
UGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MVU1J
TkFOQ0UxNkZfRVhUOgorICAgICAgICBsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YVRvUkdCQSh3
aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJp
dHMpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOF9BTFBIQThfRVhU
OgorICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFEYXRhVG9OYXRpdmVPckJHUkEod2lkdGgsIGhl
aWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzLCBnZXRE
M0RGb3JtYXQoKSA9PSBEM0RGTVRfQThMOCk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhUOgorICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFGbG9h
dERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRj
aCwgbG9ja2VkLnBCaXRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xVTUlOQU5D
RV9BTFBIQTE2Rl9FWFQ6CisgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGFU
b1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9j
a2VkLnBCaXRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JHQjhfT0VTOgorICAg
ICAgICBsb2FkUkdCVUJ5dGVEYXRhVG9CR1JYKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9SR0I1NjU6CisgICAgICAgIGxvYWRSR0I1NjVEYXRhVG9CR1JBKHdpZHRoLCBoZWln
aHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6CisgICAgICAgIGlmIChnbDo6c3Vw
cG9ydHNTU0UyKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhVG9C
R1JBU1NFMih3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBs
b2NrZWQucEJpdHMpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg
ICAgICAgbG9hZFJHQkFVQnl0ZURhdGFUb0JHUkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfUkdCQTQ6CisgICAgICAgIGxvYWRSR0JBNDQ0NERhdGFUb0JH
UkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2Vk
LnBCaXRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JHQjVfQTE6CisgICAgICAg
IGxvYWRSR0JBNTU1MURhdGFUb0JHUkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX0JHUkE4X0VYVDoKKyAgICAgICAgbG9hZEJHUkFEYXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAg
IGJyZWFrOworICAgICAgLy8gZmxvYXQgdGV4dHVyZXMgYXJlIGNvbnZlcnRlZCB0byBSR0JBLCBu
b3QgQkdSQSwgYXMgdGhleSdyZSBzdG9yZWQgdGhhdCB3YXkgaW4gRDNECisgICAgICBjYXNlIEdM
X1JHQjMyRl9FWFQ6CisgICAgICAgIGxvYWRSR0JGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JHQjE2Rl9FWFQ6CisgICAgICAgIGxvYWRSR0JIYWxm
RmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQu
UGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9SR0JB
MzJGX0VYVDoKKyAgICAgICAgbG9hZFJHQkFGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX1JHQkExNkZfRVhUOgorICAgICAgICBsb2FkUkdCQUhhbGZG
bG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5Q
aXRjaCwgbG9ja2VkLnBCaXRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOyAKKyAgICB9CisKKyAgICB1bmxvY2soKTsKK30KKwordm9pZCBJbWFnZTk6Omxv
YWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgdm9pZCAqaW5wdXQpCit7CisgICAgQVNTRVJUKHhvZmZzZXQgJSA0ID09IDApOworICAgIEFT
U0VSVCh5b2Zmc2V0ICUgNCA9PSAwKTsKKworICAgIFJFQ1QgbG9ja1JlY3QgPSB7CisgICAgICAg
IHhvZmZzZXQsIHlvZmZzZXQsCisgICAgICAgIHhvZmZzZXQgKyB3aWR0aCwgeW9mZnNldCArIGhl
aWdodAorICAgIH07CisKKyAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7CisgICAgSFJFU1VMVCBy
ZXN1bHQgPSBsb2NrKCZsb2NrZWQsICZsb2NrUmVjdCk7CisgICAgaWYgKEZBSUxFRChyZXN1bHQp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdMc2l6ZWkgaW5wdXRTaXpl
ID0gZ2w6OkNvbXB1dGVDb21wcmVzc2VkU2l6ZSh3aWR0aCwgaGVpZ2h0LCBtSW50ZXJuYWxGb3Jt
YXQpOworICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IGdsOjpDb21wdXRlQ29tcHJlc3NlZFBpdGNo
KHdpZHRoLCBtSW50ZXJuYWxGb3JtYXQpOworICAgIGludCByb3dzID0gaW5wdXRTaXplIC8gaW5w
dXRQaXRjaDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7ICsraSkKKyAgICB7CisgICAg
ICAgIG1lbWNweSgodm9pZCopKChCWVRFKilsb2NrZWQucEJpdHMgKyBpICogbG9ja2VkLlBpdGNo
KSwgKHZvaWQqKSgoQllURSopaW5wdXQgKyBpICogaW5wdXRQaXRjaCksIGlucHV0UGl0Y2gpOwor
ICAgIH0KKworICAgIHVubG9jaygpOworfQorCisvLyBUaGlzIGltcGxlbWVudHMgZ2xDb3B5VGV4
W1N1Yl1JbWFnZTJEIGZvciBub24tcmVuZGVyYWJsZSBpbnRlcm5hbCB0ZXh0dXJlIGZvcm1hdHMg
YW5kIGluY29tcGxldGUgdGV4dHVyZXMKK3ZvaWQgSW1hZ2U5Ojpjb3B5KEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSkKK3sKKyAgICBSZW5kZXJUYXJnZXQ5ICpy
ZW5kZXJUYXJnZXQgPSBOVUxMOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gTlVM
TDsKKyAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IHNvdXJjZS0+Z2V0Q29sb3Ji
dWZmZXIoMCk7CisKKyAgICBpZiAoY29sb3JidWZmZXIpCisgICAgeworICAgICAgICByZW5kZXJU
YXJnZXQgPSBSZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShjb2xvcmJ1ZmZlci0+Z2V0
UmVuZGVyVGFyZ2V0KCkpOworICAgIH0KKyAgICAKKyAgICBpZiAocmVuZGVyVGFyZ2V0KQorICAg
IHsKKyAgICAgICAgc3VyZmFjZSA9IHJlbmRlclRhcmdldC0+Z2V0U3VyZmFjZSgpOworICAgIH0K
KworICAgIGlmICghc3VyZmFjZSkKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJp
ZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KKworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1S
ZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFy
Z2V0RGF0YSA9IE5VTEw7CisgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2NyaXB0aW9uOworICAgIHN1
cmZhY2UtPkdldERlc2MoJmRlc2NyaXB0aW9uKTsKKyAgICAKKyAgICBIUkVTVUxUIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRlc2NyaXB0aW9uLldpZHRoLCBk
ZXNjcmlwdGlvbi5IZWlnaHQsIGRlc2NyaXB0aW9uLkZvcm1hdCwgRDNEUE9PTF9TWVNURU1NRU0s
ICZyZW5kZXJUYXJnZXREYXRhLCBOVUxMKTsKKworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAg
ICB7CisgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBtYXRjaGluZyBkZXN0aW5hdGlvbiBz
dXJmYWNlLiIpOworICAgICAgICBzdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorCisgICAgcmVzdWx0ID0gZGV2aWNl
LT5HZXRSZW5kZXJUYXJnZXREYXRhKHN1cmZhY2UsIHJlbmRlclRhcmdldERhdGEpOworCisgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJHZXRSZW5kZXJUYXJnZXRE
YXRhIHVuZXhwZWN0ZWRseSBmYWlsZWQuIik7CisgICAgICAgIHJlbmRlclRhcmdldERhdGEtPlJl
bGVhc2UoKTsKKyAgICAgICAgc3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KKworICAgIFJFQ1Qgc291cmNlUmVjdCA9
IHt4LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHR9OworICAgIFJFQ1QgZGVzdFJlY3QgPSB7eG9m
ZnNldCwgeW9mZnNldCwgeG9mZnNldCArIHdpZHRoLCB5b2Zmc2V0ICsgaGVpZ2h0fTsKKworICAg
IEQzRExPQ0tFRF9SRUNUIHNvdXJjZUxvY2sgPSB7MH07CisgICAgcmVzdWx0ID0gcmVuZGVyVGFy
Z2V0RGF0YS0+TG9ja1JlY3QoJnNvdXJjZUxvY2ssICZzb3VyY2VSZWN0LCAwKTsKKworICAgIGlm
IChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIGxvY2sgdGhl
IHNvdXJjZSBzdXJmYWNlIChyZWN0YW5nbGUgbWlnaHQgYmUgaW52YWxpZCkuIik7CisgICAgICAg
IHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsKKyAgICAgICAgc3VyZmFjZS0+UmVsZWFzZSgp
OworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KKwor
ICAgIEQzRExPQ0tFRF9SRUNUIGRlc3RMb2NrID0gezB9OworICAgIHJlc3VsdCA9IGxvY2soJmRl
c3RMb2NrLCAmZGVzdFJlY3QpOworICAgIAorICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7
CisgICAgICAgIEVSUigiRmFpbGVkIHRvIGxvY2sgdGhlIGRlc3RpbmF0aW9uIHN1cmZhY2UgKHJl
Y3RhbmdsZSBtaWdodCBiZSBpbnZhbGlkKS4iKTsKKyAgICAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+
VW5sb2NrUmVjdCgpOworICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7CisgICAg
ICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9CisKKyAgICBpZiAoZGVzdExvY2sucEJpdHMgJiYgc291cmNlTG9j
ay5wQml0cykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9ICh1bnNpZ25l
ZCBjaGFyKilzb3VyY2VMb2NrLnBCaXRzOworICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0g
KHVuc2lnbmVkIGNoYXIqKWRlc3RMb2NrLnBCaXRzOworCisgICAgICAgIHN3aXRjaCAoZGVzY3Jp
cHRpb24uRm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6
CisgICAgICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6CisgICAgICAgICAgICBzd2l0Y2goZ2V0
RDNERm9ybWF0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX1g4
UjhHOEI4OgorICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKKyAgICAgICAgICAg
ICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCA0ICogd2lkdGgpOworCisg
ICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOworICAgICAgICAg
ICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfTDg6CisgICAg
ICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4Kysp
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeF0g
PSBzb3VyY2VbeCAqIDQgKyAyXTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOworICAgICAgICAgICAgICAgICAg
ICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQThMODoKKyAgICAgICAgICAg
ICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICogMiArIDBd
ID0gc291cmNlW3ggKiA0ICsgMl07CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKiAy
ICsgMV0gPSBzb3VyY2VbeCAqIDQgKyAzXTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOworICAgICAgICAgICAg
ICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgorICAgICAgICAgICAgc3dpdGNoKGdldEQzREZvcm1h
dCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoK
KyAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7
IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgc2hvcnQgcmdiID0gKCh1bnNpZ25lZCBzaG9ydCopc291cmNlKVt4XTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVkID0gKHJnYiAmIDB4RjgwMCkgPj4gODsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZ3JlZW4gPSAocmdiICYgMHgw
N0UwKSA+PiAzOworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBibHVlID0g
KHJnYiAmIDB4MDAxRikgPDwgMzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCArIDBd
ID0gYmx1ZSB8IChibHVlID4+IDUpOworICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICsg
MV0gPSBncmVlbiB8IChncmVlbiA+PiA2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rb
eCArIDJdID0gcmVkIHwgKHJlZCA+PiA1KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rb
eCArIDNdID0gMHhGRjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOworICAgICAgICAgICAgICAgICAgICBkZXN0
ICs9IGRlc3RMb2NrLlBpdGNoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfTDg6CisgICAgICAgICAgICAgICAgZm9y
KGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVkID0gc291
cmNlW3ggKiAyICsgMV0gJiAweEY4OworICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4XSA9
IHJlZCB8IChyZWQgPj4gNSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5QaXRjaDsKKyAgICAgICAgICAgICAgICAgICAg
ZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNh
c2UgRDNERk1UX0ExUjVHNUI1OgorICAgICAgICAgICAgc3dpdGNoKGdldEQzREZvcm1hdCgpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKKyAgICAg
ICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
c2hvcnQgYXJnYiA9ICgodW5zaWduZWQgc2hvcnQqKXNvdXJjZSlbeF07CisgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHJlZCA9IChhcmdiICYgMHg3QzAwKSA+PiA3OworICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBncmVlbiA9IChhcmdiICYgMHgwM0Uw
KSA+PiAyOworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBibHVlID0gKGFy
Z2IgJiAweDAwMUYpIDw8IDM7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKyAwXSA9
IGJsdWUgfCAoYmx1ZSA+PiA1KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCArIDFd
ID0gZ3JlZW4gfCAoZ3JlZW4gPj4gNSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3gg
KyAyXSA9IHJlZCB8IChyZWQgPj4gNSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3gg
KyAzXSA9IDB4RkY7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICBzb3VyY2UgKz0gc291cmNlTG9jay5QaXRjaDsKKyAgICAgICAgICAgICAgICAgICAgZGVzdCAr
PSBkZXN0TG9jay5QaXRjaDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgorICAgICAgICAgICAgICAg
IGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhcmdi
ID0gKCh1bnNpZ25lZCBzaG9ydCopc291cmNlKVt4XTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGNoYXIgcmVkID0gKGFyZ2IgJiAweDdDMDApID4+IDc7CisgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGdyZWVuID0gKGFyZ2IgJiAweDAzRTApID4+IDI7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJsdWUgPSAoYXJnYiAmIDB4MDAx
RikgPDwgMzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWxwaGEgPSAo
c2lnbmVkIHNob3J0KWFyZ2IgPj4gMTU7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3gg
KyAwXSA9IGJsdWUgfCAoYmx1ZSA+PiA1KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rb
eCArIDFdID0gZ3JlZW4gfCAoZ3JlZW4gPj4gNSk7CisgICAgICAgICAgICAgICAgICAgICAgICBk
ZXN0W3ggKyAyXSA9IHJlZCB8IChyZWQgPj4gNSk7CisgICAgICAgICAgICAgICAgICAgICAgICBk
ZXN0W3ggKyAzXSA9IGFscGhhOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7CisgICAgICAgICAgICAgICAgICAg
IGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEQzREZNVF9MODoKKyAgICAgICAgICAgICAg
ICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZWQg
PSBzb3VyY2VbeCAqIDIgKyAxXSAmIDB4N0M7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0
W3hdID0gKHJlZCA8PCAxKSB8IChyZWQgPj4gNCk7CisgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5QaXRjaDsKKyAgICAgICAg
ICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4TDg6Cisg
ICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4
KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGNoYXIgcmVkID0gc291cmNlW3ggKiAyICsgMV0gJiAweDdDOworICAgICAgICAgICAgICAg
ICAgICAgICAgZGVzdFt4ICogMiArIDBdID0gKHJlZCA8PCAxKSB8IChyZWQgPj4gNCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKiAyICsgMV0gPSAoc2lnbmVkIGNoYXIpc291cmNl
W3ggKiAyICsgMV0gPj4gNzsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOworICAgICAgICAgICAgICAgICAgICBk
ZXN0ICs9IGRlc3RMb2NrLlBpdGNoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNI
QUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB1bmxvY2soKTsKKyAgICByZW5kZXJUYXJnZXREYXRhLT5VbmxvY2tSZWN0KCk7CisKKyAgICBy
ZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7CisgICAgc3VyZmFjZS0+UmVsZWFzZSgpOworCisg
ICAgbURpcnR5ID0gdHJ1ZTsKK30KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9JbWFnZTkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9JbWFnZTkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZmJiY2EzMTI0M2QyYWM0N2Q1NzQ4ZDVh
MWM3ZmFmN2Q1Y2E4MjA2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ltYWdlOS5oCkBAIC0wLDAgKzEsNzkgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIEltYWdlOS5oOiBEZWZpbmVzIHRoZSByeDo6SW1hZ2U5
IGNsYXNzLCB3aGljaCBhY3RzIGFzIHRoZSBpbnRlcmZhY2UgdG8KKy8vIHRoZSBhY3R1YWwgdW5k
ZXJseWluZyBzdXJmYWNlcyBvZiBhIFRleHR1cmUuCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRF
UkVSX0lNQUdFOV9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfSU1BR0U5X0hfCisKKyNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvSW1hZ2UuaCIKKyNpbmNsdWRlICJjb21tb24vZGVi
dWcuaCIKKworbmFtZXNwYWNlIGdsCit7CitjbGFzcyBGcmFtZWJ1ZmZlcjsKK30KKworbmFtZXNw
YWNlIHJ4Cit7CitjbGFzcyBSZW5kZXJlcjsKK2NsYXNzIFJlbmRlcmVyOTsKK2NsYXNzIFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlMkQ7CitjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU7
CisKK2NsYXNzIEltYWdlOSA6IHB1YmxpYyBJbWFnZQoreworICBwdWJsaWM6CisgICAgSW1hZ2U5
KCk7CisgICAgfkltYWdlOSgpOworCisgICAgc3RhdGljIEltYWdlOSAqbWFrZUltYWdlOShJbWFn
ZSAqaW1nKTsKKworICAgIHN0YXRpYyB2b2lkIGdlbmVyYXRlTWlwbWFwKEltYWdlOSAqZGVzdCwg
SW1hZ2U5ICpzb3VyY2UpOworICAgIHN0YXRpYyB2b2lkIGdlbmVyYXRlTWlwKElEaXJlY3QzRFN1
cmZhY2U5ICpkZXN0U3VyZmFjZSwgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZVN1cmZhY2UpOwor
ICAgIHN0YXRpYyB2b2lkIGNvcHlMb2NrYWJsZVN1cmZhY2VzKElEaXJlY3QzRFN1cmZhY2U5ICpk
ZXN0LCBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlKTsKKworICAgIHZpcnR1YWwgYm9vbCByZWRl
ZmluZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgYm9vbCBmb3JjZVJlbGVhc2UpOworCisgICAgdmlydHVhbCBi
b29sIGlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0OworICAgIEQzREZPUk1BVCBnZXREM0RGb3Jt
YXQoKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBpc0RpcnR5KCkgY29uc3Qge3JldHVybiBt
U3VyZmFjZSAmJiBtRGlydHk7fQorICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRTdXJmYWNlKCk7
CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWFuYWdlZFN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWFuYWdl
ZFN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwg
aW50IGxldmVsKTsKKyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlU3VyZmFjZShUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIGJvb2wg
dXBkYXRlU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBm
YWNlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKworICAgIHZpcnR1YWwgdm9pZCBsb2FkRGF0YShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAg
ICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQp
OworICAgIHZpcnR1YWwgdm9pZCBsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dCk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgY29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgZ2w6OkZyYW1lYnVmZmVyICpzb3VyY2Up
OworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEltYWdlOSk7CisK
KyAgICB2b2lkIGNyZWF0ZVN1cmZhY2UoKTsKKyAgICB2b2lkIHNldE1hbmFnZWRTdXJmYWNlKElE
aXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlKTsKKyAgICBib29sIHVwZGF0ZVN1cmZhY2UoSURpcmVj
dDNEU3VyZmFjZTkgKmRlc3QsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKworICAgIEhSRVNVTFQgbG9jayhEM0RMT0NLRURfUkVD
VCAqbG9ja2VkUmVjdCwgY29uc3QgUkVDVCAqcmVjdCk7CisgICAgdm9pZCB1bmxvY2soKTsKKyAg
ICAKKyAgICBSZW5kZXJlcjkgKm1SZW5kZXJlcjsKKworICAgIEQzRFBPT0wgbUQzRFBvb2w7ICAg
Ly8gY2FuIG9ubHkgYmUgRDNEUE9PTF9TWVNURU1NRU0gb3IgRDNEUE9PTF9NQU5BR0VEIHNpbmNl
IGl0IG5lZWRzIHRvIGJlIGxvY2thYmxlLgorICAgIEQzREZPUk1BVCBtRDNERm9ybWF0OworCisg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKm1TdXJmYWNlOworfTsKK30KKworI2VuZGlmICAgLy8gTElC
R0xFU1YyX1JFTkRFUkVSX0lNQUdFOV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0luZGV4QnVmZmVyOS5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW5kZXhCdWZm
ZXI5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43Y2I1ZDEzYTE4Yjc0ODAwYzBjYTQzZjc4YmQ4MTVlOTQ5OTlk
NDFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L0luZGV4QnVmZmVyOS5jcHAKQEAgLTAsMCArMSwyMDcgQEAKKyNp
bmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gSW5kZXhmZmVy
OS5jcHA6IERlZmluZXMgdGhlIEQzRDkgSW5kZXhCdWZmZXIgaW1wbGVtZW50YXRpb24uCisKKyNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbmRleEJ1ZmZlcjkuaCIKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaCIKKworbmFtZXNwYWNlIHJ4Cit7
CisKK0luZGV4QnVmZmVyOTo6SW5kZXhCdWZmZXI5KFJlbmRlcmVyOSAqY29uc3QgcmVuZGVyZXIp
IDogbVJlbmRlcmVyKHJlbmRlcmVyKQoreworICAgIG1JbmRleEJ1ZmZlciA9IE5VTEw7CisgICAg
bUJ1ZmZlclNpemUgPSAwOworICAgIG1JbmRleFR5cGUgPSAwOworICAgIG1EeW5hbWljID0gZmFs
c2U7Cit9CisKK0luZGV4QnVmZmVyOTo6fkluZGV4QnVmZmVyOSgpCit7CisgICAgaWYgKG1JbmRl
eEJ1ZmZlcikKKyAgICB7CisgICAgICAgIG1JbmRleEJ1ZmZlci0+UmVsZWFzZSgpOworICAgICAg
ICBtSW5kZXhCdWZmZXIgPSBOVUxMOworICAgIH0KK30KKworYm9vbCBJbmRleEJ1ZmZlcjk6Omlu
aXRpYWxpemUodW5zaWduZWQgaW50IGJ1ZmZlclNpemUsIEdMZW51bSBpbmRleFR5cGUsIGJvb2wg
ZHluYW1pYykKK3sKKyAgICBpZiAobUluZGV4QnVmZmVyKQorICAgIHsKKyAgICAgICAgbUluZGV4
QnVmZmVyLT5SZWxlYXNlKCk7CisgICAgICAgIG1JbmRleEJ1ZmZlciA9IE5VTEw7CisgICAgfQor
CisgICAgdXBkYXRlU2VyaWFsKCk7CisKKyAgICBpZiAoYnVmZmVyU2l6ZSA+IDApCisgICAgewor
ICAgICAgICBEM0RGT1JNQVQgZm9ybWF0OworICAgICAgICBpZiAoaW5kZXhUeXBlID09IEdMX1VO
U0lHTkVEX1NIT1JUIHx8IGluZGV4VHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQorICAgICAgICB7
CisgICAgICAgICAgICBmb3JtYXQgPSBEM0RGTVRfSU5ERVgxNjsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmIChpbmRleFR5cGUgPT0gR0xfVU5TSUdORURfSU5UKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAobVJlbmRlcmVyLT5nZXQzMkJpdEluZGV4U3VwcG9ydCgpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGZvcm1hdCA9IEQzREZNVF9JTkRFWDMyOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEVS
UigiQXR0ZW1wdGVkIHRvIGNyZWF0ZSBhIDMyLWJpdCBpbmRleCBidWZmZXIgYnV0IHJlbmRlcmVy
IGRvZXMgbm90IHN1cHBvcnQgMzItYml0IGluZGljZXMuIik7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgRVJSKCJJbnZhbGlkIGluZGV4IHR5cGUgJXUuIiwgaW5kZXhUeXBl
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIERXT1JE
IHVzYWdlRmxhZ3MgPSBEM0RVU0FHRV9XUklURU9OTFk7CisgICAgICAgIGlmIChkeW5hbWljKQor
ICAgICAgICB7CisgICAgICAgICAgICB1c2FnZUZsYWdzIHw9IEQzRFVTQUdFX0RZTkFNSUM7Cisg
ICAgICAgIH0KKworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1SZW5kZXJlci0+Y3JlYXRlSW5k
ZXhCdWZmZXIoYnVmZmVyU2l6ZSwgdXNhZ2VGbGFncywgZm9ybWF0LCAmbUluZGV4QnVmZmVyKTsK
KyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIo
IkZhaWxlZCB0byBjcmVhdGUgYW4gaW5kZXggYnVmZmVyIG9mIHNpemUgJXUsIHJlc3VsdDogMHgl
MDh4LiIsIG1CdWZmZXJTaXplLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgbUJ1ZmZlclNpemUgPSBidWZmZXJTaXplOworICAgIG1J
bmRleFR5cGUgPSBpbmRleFR5cGU7CisgICAgbUR5bmFtaWMgPSBkeW5hbWljOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK0luZGV4QnVmZmVyOSAqSW5kZXhCdWZmZXI5OjptYWtlSW5kZXhCdWZm
ZXI5KEluZGV4QnVmZmVyICppbmRleEJ1ZmZlcikKK3sKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNf
VFlQRShJbmRleEJ1ZmZlcjkqLCBpbmRleEJ1ZmZlcikpOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxJbmRleEJ1ZmZlcjkqPihpbmRleEJ1ZmZlcik7Cit9CisKK2Jvb2wgSW5kZXhCdWZmZXI5Ojpt
YXBCdWZmZXIodW5zaWduZWQgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IHNpemUsIHZvaWQqKiBv
dXRNYXBwZWRNZW1vcnkpCit7CisgICAgaWYgKG1JbmRleEJ1ZmZlcikKKyAgICB7CisgICAgICAg
IERXT1JEIGxvY2tGbGFncyA9IG1EeW5hbWljID8gRDNETE9DS19OT09WRVJXUklURSA6IDA7CisK
KyAgICAgICAgdm9pZCAqbWFwUHRyID0gTlVMTDsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBt
SW5kZXhCdWZmZXItPkxvY2sob2Zmc2V0LCBzaXplLCAmbWFwUHRyLCBsb2NrRmxhZ3MpOworICAg
ICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiSW5k
ZXggYnVmZmVyIGxvY2sgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgICpvdXRNYXBwZWRNZW1v
cnkgPSBtYXBQdHI7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICBFUlIoIkluZGV4IGJ1ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSW5kZXhCdWZmZXI5Ojp1bm1hcEJ1ZmZl
cigpCit7CisgICAgaWYgKG1JbmRleEJ1ZmZlcikKKyAgICB7CisgICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gbUluZGV4QnVmZmVyLT5VbmxvY2soKTsKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQp
KQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkluZGV4IGJ1ZmZlciB1bmxvY2sgZmFpbGVk
IHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICBFUlIoIkluZGV4IGJ1ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK0dMZW51bSBJbmRleEJ1ZmZlcjk6OmdldEluZGV4
VHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1JbmRleFR5cGU7Cit9CisKK3Vuc2lnbmVkIGlu
dCBJbmRleEJ1ZmZlcjk6OmdldEJ1ZmZlclNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtQnVm
ZmVyU2l6ZTsKK30KKworYm9vbCBJbmRleEJ1ZmZlcjk6OnNldFNpemUodW5zaWduZWQgaW50IGJ1
ZmZlclNpemUsIEdMZW51bSBpbmRleFR5cGUpCit7CisgICAgaWYgKGJ1ZmZlclNpemUgPiBtQnVm
ZmVyU2l6ZSB8fCBpbmRleFR5cGUgIT0gbUluZGV4VHlwZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBpbml0aWFsaXplKGJ1ZmZlclNpemUsIGluZGV4VHlwZSwgbUR5bmFtaWMpOworICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgSW5k
ZXhCdWZmZXI5OjpkaXNjYXJkKCkKK3sKKyAgICBpZiAobUluZGV4QnVmZmVyKQorICAgIHsKKyAg
ICAgICAgdm9pZCAqZHVtbXk7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0OworCisgICAgICAgIHJl
c3VsdCA9IG1JbmRleEJ1ZmZlci0+TG9jaygwLCAxLCAmZHVtbXksIEQzRExPQ0tfRElTQ0FSRCk7
CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJS
KCJEaXNjYXJkIGxvY2sgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdCA9IG1JbmRl
eEJ1ZmZlci0+VW5sb2NrKCk7CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAg
eworICAgICAgICAgICAgRVJSKCJEaXNjYXJkIHVubG9jayBmYWlsZWQgd2l0aCBlcnJvciAweCUw
OHgiLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEVSUigi
SW5kZXggYnVmZmVyIG5vdCBpbml0aWFsaXplZC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KK30KKworRDNERk9STUFUIEluZGV4QnVmZmVyOTo6Z2V0SW5kZXhGb3JtYXQoKSBjb25z
dAoreworICAgIHN3aXRjaCAobUluZGV4VHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1VOU0lH
TkVEX0JZVEU6ICAgIHJldHVybiBEM0RGTVRfSU5ERVgxNjsKKyAgICAgIGNhc2UgR0xfVU5TSUdO
RURfU0hPUlQ6ICAgcmV0dXJuIEQzREZNVF9JTkRFWDE2OworICAgICAgY2FzZSBHTF9VTlNJR05F
RF9JTlQ6ICAgICByZXR1cm4gRDNERk1UX0lOREVYMzI7CisgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOyAgIHJldHVybiBEM0RGTVRfVU5LTk9XTjsKKyAgICB9Cit9CisKK0lEaXJlY3QzRElu
ZGV4QnVmZmVyOSAqIEluZGV4QnVmZmVyOTo6Z2V0QnVmZmVyKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbUluZGV4QnVmZmVyOworfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L0luZGV4QnVmZmVyOS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L0luZGV4QnVmZmVyOS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4MDE4Njc1MzI0NTU3
M2IzN2E4OGQ5YTVkZGFmNWM0MDc0ZTBlMjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW5kZXhCdWZmZXI5LmgK
QEAgLTAsMCArMSw1MyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gSW5kZXhmZmVyOS5oOiBE
ZWZpbmVzIHRoZSBEM0Q5IEluZGV4QnVmZmVyIGltcGxlbWVudGF0aW9uLgorCisjaWZuZGVmIExJ
QkdMRVNWMl9SRU5ERVJFUl9JTkRFWEJVRkZFUjlfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRF
UkVSX0lOREVYQlVGRkVSOV9IXworCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0luZGV4
QnVmZmVyLmgiCisKK25hbWVzcGFjZSByeAoreworY2xhc3MgUmVuZGVyZXI5OworCitjbGFzcyBJ
bmRleEJ1ZmZlcjkgOiBwdWJsaWMgSW5kZXhCdWZmZXIKK3sKKyAgcHVibGljOgorICAgIGV4cGxp
Y2l0IEluZGV4QnVmZmVyOShSZW5kZXJlcjkgKmNvbnN0IHJlbmRlcmVyKTsKKyAgICB2aXJ0dWFs
IH5JbmRleEJ1ZmZlcjkoKTsKKworICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplKHVuc2lnbmVk
IGludCBidWZmZXJTaXplLCBHTGVudW0gaW5kZXhUeXBlLCBib29sIGR5bmFtaWMpOworCisgICAg
c3RhdGljIEluZGV4QnVmZmVyOSAqbWFrZUluZGV4QnVmZmVyOShJbmRleEJ1ZmZlciAqaW5kZXhC
dWZmZXIpOworCisgICAgdmlydHVhbCBib29sIG1hcEJ1ZmZlcih1bnNpZ25lZCBpbnQgb2Zmc2V0
LCB1bnNpZ25lZCBpbnQgc2l6ZSwgdm9pZCoqIG91dE1hcHBlZE1lbW9yeSk7CisgICAgdmlydHVh
bCBib29sIHVubWFwQnVmZmVyKCk7CisKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRJbmRleFR5cGUo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRCdWZmZXJTaXplKCkgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIHNldFNpemUodW5zaWduZWQgaW50IGJ1ZmZlclNpemUsIEdMZW51
bSBpbmRleFR5cGUpOworCisgICAgdmlydHVhbCBib29sIGRpc2NhcmQoKTsKKworICAgIEQzREZP
Uk1BVCBnZXRJbmRleEZvcm1hdCgpIGNvbnN0OworICAgIElEaXJlY3QzREluZGV4QnVmZmVyOSAq
Z2V0QnVmZmVyKCkgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9B
U1NJR04oSW5kZXhCdWZmZXI5KTsKKworICAgIHJ4OjpSZW5kZXJlcjkgKmNvbnN0IG1SZW5kZXJl
cjsKKworICAgIElEaXJlY3QzREluZGV4QnVmZmVyOSAqbUluZGV4QnVmZmVyOworICAgIHVuc2ln
bmVkIGludCBtQnVmZmVyU2l6ZTsKKyAgICBHTGVudW0gbUluZGV4VHlwZTsKKyAgICBib29sIG1E
eW5hbWljOworfTsKKworfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX0lOREVYQlVG
RkVSOV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L1F1ZXJ5OS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUXVlcnk5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43Mjc4MWNiYzM5
ZDI1ZDE0ZjQzMjJkYTM1MzA3NDk1MjFlMWM4NDdiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1F1ZXJ5OS5jcHAK
QEAgLTAsMCArMSwxMjUgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHly
aWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKy8vIFF1ZXJ5OS5jcHA6IERlZmluZXMgdGhlIHJ4OjpRdWVyeTkgY2xhc3Mgd2hpY2ggaW1w
bGVtZW50cyByeDo6UXVlcnlJbXBsLgorCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9RdWVyeTkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oIgorCituYW1lc3BhY2UgcngKK3sKKworUXVl
cnk5OjpRdWVyeTkocng6OlJlbmRlcmVyOSAqcmVuZGVyZXIsIEdMZW51bSB0eXBlKSA6IFF1ZXJ5
SW1wbCh0eXBlKQoreworICAgIG1SZW5kZXJlciA9IHJlbmRlcmVyOworICAgIG1RdWVyeSA9IE5V
TEw7Cit9CisKK1F1ZXJ5OTo6flF1ZXJ5OSgpCit7CisgICAgaWYgKG1RdWVyeSkKKyAgICB7Cisg
ICAgICAgIG1RdWVyeS0+UmVsZWFzZSgpOworICAgICAgICBtUXVlcnkgPSBOVUxMOworICAgIH0K
K30KKwordm9pZCBRdWVyeTk6OmJlZ2luKCkKK3sKKyAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCisg
ICAgeworICAgICAgICBpZiAoRkFJTEVEKG1SZW5kZXJlci0+Z2V0RGV2aWNlKCktPkNyZWF0ZVF1
ZXJ5KEQzRFFVRVJZVFlQRV9PQ0NMVVNJT04sICZtUXVlcnkpKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIEhSRVNVTFQgcmVzdWx0ID0gbVF1ZXJ5LT5Jc3N1ZShEM0RJU1NVRV9CRUdJTik7
CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKK30KKwordm9pZCBRdWVyeTk6OmVuZCgp
Cit7CisgICAgaWYgKG1RdWVyeSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgfQorCisgICAgSFJFU1VMVCByZXN1bHQg
PSBtUXVlcnktPklzc3VlKEQzRElTU1VFX0VORCk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1
bHQpKTsKKworICAgIG1TdGF0dXMgPSBHTF9GQUxTRTsKKyAgICBtUmVzdWx0ID0gR0xfRkFMU0U7
Cit9CisKK0dMdWludCBRdWVyeTk6OmdldFJlc3VsdCgpCit7CisgICAgaWYgKG1RdWVyeSAhPSBO
VUxMKQorICAgIHsKKyAgICAgICAgd2hpbGUgKCF0ZXN0UXVlcnkoKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgU2xlZXAoMCk7CisgICAgICAgICAgICAvLyBleHBsaWNpdGx5IGNoZWNrIGZvciBk
ZXZpY2UgbG9zcworICAgICAgICAgICAgLy8gc29tZSBkcml2ZXJzIHNlZW0gdG8gcmV0dXJuIFNf
RkFMU0UgZXZlbiBpZiB0aGUgZGV2aWNlIGlzIGxvc3QKKyAgICAgICAgICAgIC8vIGluc3RlYWQg
b2YgRDNERVJSX0RFVklDRUxPU1QgbGlrZSB0aGV5IHNob3VsZAorICAgICAgICAgICAgaWYgKG1S
ZW5kZXJlci0+dGVzdERldmljZUxvc3QodHJ1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAwKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBtUmVzdWx0OworfQorCitHTGJvb2xl
YW4gUXVlcnk5Ojppc1Jlc3VsdEF2YWlsYWJsZSgpCit7CisgICAgaWYgKG1RdWVyeSAhPSBOVUxM
KQorICAgIHsKKyAgICAgICAgdGVzdFF1ZXJ5KCk7CisgICAgfQorCisgICAgcmV0dXJuIG1TdGF0
dXM7Cit9CisKK0dMYm9vbGVhbiBRdWVyeTk6OnRlc3RRdWVyeSgpCit7CisgICAgaWYgKG1RdWVy
eSAhPSBOVUxMICYmIG1TdGF0dXMgIT0gR0xfVFJVRSkKKyAgICB7CisgICAgICAgIERXT1JEIG51
bVBpeGVscyA9IDA7CisKKyAgICAgICAgSFJFU1VMVCBocmVzID0gbVF1ZXJ5LT5HZXREYXRhKCZu
dW1QaXhlbHMsIHNpemVvZihEV09SRCksIEQzREdFVERBVEFfRkxVU0gpOworICAgICAgICBpZiAo
aHJlcyA9PSBTX09LKQorICAgICAgICB7CisgICAgICAgICAgICBtU3RhdHVzID0gIEdMX1RSVUU7
CisKKyAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6CisgICAgICAgICAgICAgIGNh
c2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6CisgICAgICAgICAgICAg
ICAgbVJlc3VsdCA9IChudW1QaXhlbHMgPiAwKSA/IEdMX1RSVUUgOiBHTF9GQUxTRTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKGQzZDk6OmlzRGV2aWNlTG9zdEVycm9yKGhyZXMpKQorICAgICAgICB7CisgICAgICAgICAg
ICBtUmVuZGVyZXItPm5vdGlmeURldmljZUxvc3QoKTsKKyAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfVFJVRSk7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gbVN0YXR1czsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfVFJVRTsgLy8gcHJldmVudCBi
bG9ja2luZyB3aGVuIHF1ZXJ5IGlzIG51bGwKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1F1ZXJ5OS5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1F1ZXJ5OS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjQ3ZWVmODkzMzZlZjhjMzQ0YWE1MTY3YjRmNDAyMWIxMDQxYzA3MGMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvUXVlcnk5LmgKQEAgLTAsMCArMSw0MCBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
IFF1ZXJ5OS5oOiBEZWZpbmVzIHRoZSByeDo6UXVlcnk5IGNsYXNzIHdoaWNoIGltcGxlbWVudHMg
cng6OlF1ZXJ5SW1wbC4KKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfUVVFUlk5X0hfCisj
ZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9RVUVSWTlfSF8KKworI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9RdWVyeUltcGwuaCIKKworbmFtZXNwYWNlIHJ4Cit7CitjbGFzcyBSZW5kZXJl
cjk7CisKK2NsYXNzIFF1ZXJ5OSA6IHB1YmxpYyBRdWVyeUltcGwKK3sKKyAgcHVibGljOgorICAg
IFF1ZXJ5OShyeDo6UmVuZGVyZXI5ICpyZW5kZXJlciwgR0xlbnVtIHR5cGUpOworICAgIHZpcnR1
YWwgflF1ZXJ5OSgpOworCisgICAgdm9pZCBiZWdpbigpOworICAgIHZvaWQgZW5kKCk7CisgICAg
R0x1aW50IGdldFJlc3VsdCgpOworICAgIEdMYm9vbGVhbiBpc1Jlc3VsdEF2YWlsYWJsZSgpOwor
CisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFF1ZXJ5OSk7CisKKyAg
ICBHTGJvb2xlYW4gdGVzdFF1ZXJ5KCk7CisKKyAgICByeDo6UmVuZGVyZXI5ICptUmVuZGVyZXI7
CisgICAgSURpcmVjdDNEUXVlcnk5ICptUXVlcnk7Cit9OworCit9CisKKyNlbmRpZiAvLyBMSUJH
TEVTVjJfUkVOREVSRVJfUVVFUlk5X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFy
Z2V0OS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMDkwNDMxZGI5OTg3MzkwYzUwMTJjYmZmNjEzMGY4YTg5MjM4
MTZkOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJUYXJnZXQ5LmNwcApAQCAtMCwwICsxLDExMyBAQAor
I2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUmVuZGVyVGFyZ2V0
OS5jcHA6IEltcGxlbWVudHMgYSBEM0Q5LXNwZWNpZmljIHdyYXBwZXIgZm9yIElEaXJlY3QzRFN1
cmZhY2U5CisvLyBwb2ludGVycyByZXRhaW5lZCBieSByZW5kZXJidWZmZXJzLgorCisjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oIgorCisjaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL21h
aW4uaCIKKworbmFtZXNwYWNlIHJ4Cit7CisKK1JlbmRlclRhcmdldDk6OlJlbmRlclRhcmdldDko
UmVuZGVyZXIgKnJlbmRlcmVyLCBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSkKK3sKKyAgICBt
UmVuZGVyZXIgPSBSZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjkocmVuZGVyZXIpOworICAgIG1SZW5k
ZXJUYXJnZXQgPSBzdXJmYWNlOworCisgICAgaWYgKG1SZW5kZXJUYXJnZXQpCisgICAgeworICAg
ICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzY3JpcHRpb247CisgICAgICAgIG1SZW5kZXJUYXJnZXQt
PkdldERlc2MoJmRlc2NyaXB0aW9uKTsKKworICAgICAgICBtV2lkdGggPSBkZXNjcmlwdGlvbi5X
aWR0aDsKKyAgICAgICAgbUhlaWdodCA9IGRlc2NyaXB0aW9uLkhlaWdodDsKKyAgICAgICAgCisg
ICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEVxdWl2YWxlbnRGb3JtYXQoZGVz
Y3JpcHRpb24uRm9ybWF0KTsKKyAgICAgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEVx
dWl2YWxlbnRGb3JtYXQoZGVzY3JpcHRpb24uRm9ybWF0KTsKKyAgICAgICAgbVNhbXBsZXMgPSBk
M2Q5X2dsOjpHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShkZXNjcmlwdGlvbi5NdWx0aVNh
bXBsZVR5cGUpOworICAgIH0KK30KKworUmVuZGVyVGFyZ2V0OTo6UmVuZGVyVGFyZ2V0OShSZW5k
ZXJlciAqcmVuZGVyZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBHTHNpemVpIHNhbXBsZXMpCit7CisgICAgbVJlbmRlcmVyID0gUmVuZGVyZXI5OjptYWtl
UmVuZGVyZXI5KHJlbmRlcmVyKTsKKyAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKKworICAgIEQz
REZPUk1BVCByZXF1ZXN0ZWRGb3JtYXQgPSBnbF9kM2Q5OjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9y
bWF0KGZvcm1hdCk7CisgICAgaW50IHN1cHBvcnRlZFNhbXBsZXMgPSBtUmVuZGVyZXItPmdldE5l
YXJlc3RTdXBwb3J0ZWRTYW1wbGVzKHJlcXVlc3RlZEZvcm1hdCwgc2FtcGxlcyk7CisKKyAgICBp
ZiAoc3VwcG9ydGVkU2FtcGxlcyA9PSAtMSkKKyAgICB7CisgICAgICAgIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSFJFU1VMVCBy
ZXN1bHQgPSBEM0RFUlJfSU5WQUxJRENBTEw7CisgICAgCisgICAgaWYgKHdpZHRoID4gMCAmJiBo
ZWlnaHQgPiAwKQorICAgIHsKKyAgICAgICAgaWYgKHJlcXVlc3RlZEZvcm1hdCA9PSBEM0RGTVRf
RDI0UzgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1SZW5kZXJlci0+Z2V0RGV2
aWNlKCktPkNyZWF0ZURlcHRoU3RlbmNpbFN1cmZhY2Uod2lkdGgsIGhlaWdodCwgcmVxdWVzdGVk
Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnbF9kM2Q5OjpHZXRNdWx0aXNhbXBsZVR5cGVGcm9tU2Ft
cGxlcyhzdXBwb3J0ZWRTYW1wbGVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgRkFMU0UsICZtUmVuZGVy
VGFyZ2V0LCBOVUxMKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCktPkNyZWF0ZVJlbmRlclRhcmdl
dCh3aWR0aCwgaGVpZ2h0LCByZXF1ZXN0ZWRGb3JtYXQsIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkdldE11
bHRpc2FtcGxlVHlwZUZyb21TYW1wbGVzKHN1cHBvcnRlZFNhbXBsZXMpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEZB
TFNFLCAmbVJlbmRlclRhcmdldCwgTlVMTCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVz
dWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZ
KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7CisgICAgfQorCisgICAgbVdpZHRoID0gd2lkdGg7CisgICAgbUhlaWdodCA9
IGhlaWdodDsKKyAgICBtSW50ZXJuYWxGb3JtYXQgPSBmb3JtYXQ7CisgICAgbVNhbXBsZXMgPSBz
dXBwb3J0ZWRTYW1wbGVzOworICAgIG1BY3R1YWxGb3JtYXQgPSBkM2Q5X2dsOjpHZXRFcXVpdmFs
ZW50Rm9ybWF0KHJlcXVlc3RlZEZvcm1hdCk7Cit9CisKK1JlbmRlclRhcmdldDk6On5SZW5kZXJU
YXJnZXQ5KCkKK3sKKyAgICBpZiAobVJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIG1SZW5k
ZXJUYXJnZXQtPlJlbGVhc2UoKTsKKyAgICB9Cit9CisKK1JlbmRlclRhcmdldDkgKlJlbmRlclRh
cmdldDk6Om1ha2VSZW5kZXJUYXJnZXQ5KFJlbmRlclRhcmdldCAqdGFyZ2V0KQoreworICAgIEFT
U0VSVChIQVNfRFlOQU1JQ19UWVBFKHJ4OjpSZW5kZXJUYXJnZXQ5KiwgdGFyZ2V0KSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PHJ4OjpSZW5kZXJUYXJnZXQ5Kj4odGFyZ2V0KTsKK30KKworSURp
cmVjdDNEU3VyZmFjZTkgKlJlbmRlclRhcmdldDk6OmdldFN1cmZhY2UoKQoreworICAgIC8vIENh
bGxlciBpcyByZXNwb25zaWJsZSBmb3IgcmVsZWFzaW5nIHRoZSByZXR1cm5lZCBzdXJmYWNlIHJl
ZmVyZW5jZS4KKyAgICBpZiAobVJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIG1SZW5kZXJU
YXJnZXQtPkFkZFJlZigpOworICAgIH0KKworICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OworfQor
Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlclRhcmdldDkuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5k
ZXJUYXJnZXQ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmFmOGFkMWM2ZDJkNjI0Mjk0MDBmZTMzY2I4Y2RkZTcx
ZjdkMzI1ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJUYXJnZXQ5LmgKQEAgLTAsMCArMSw0MCBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKy8vIFJlbmRlclRhcmdldDkuaDogRGVmaW5lcyBhIEQzRDktc3BlY2lm
aWMgd3JhcHBlciBmb3IgSURpcmVjdDNEU3VyZmFjZTkgcG9pbnRlcnMKKy8vIHJldGFpbmVkIGJ5
IFJlbmRlcmJ1ZmZlcnMuCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUlRBUkdF
VDlfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUlRBUkdFVDlfSF8KKworI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQuaCIKKworbmFtZXNwYWNlIHJ4
Cit7CitjbGFzcyBSZW5kZXJlcjsKK2NsYXNzIFJlbmRlcmVyOTsKKworY2xhc3MgUmVuZGVyVGFy
Z2V0OSA6IHB1YmxpYyBSZW5kZXJUYXJnZXQKK3sKKyAgcHVibGljOgorICAgIFJlbmRlclRhcmdl
dDkoUmVuZGVyZXIgKnJlbmRlcmVyLCBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSk7CisgICAg
UmVuZGVyVGFyZ2V0OShSZW5kZXJlciAqcmVuZGVyZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpOworICAgIHZpcnR1YWwgflJl
bmRlclRhcmdldDkoKTsKKworICAgIHN0YXRpYyBSZW5kZXJUYXJnZXQ5ICptYWtlUmVuZGVyVGFy
Z2V0OShSZW5kZXJUYXJnZXQgKnJlbmRlclRhcmdldCk7CisgICAgSURpcmVjdDNEU3VyZmFjZTkg
KmdldFN1cmZhY2UoKTsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihSZW5kZXJUYXJnZXQ5KTsKKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICptUmVuZGVyVGFyZ2V0
OworCisgICAgUmVuZGVyZXI5ICptUmVuZGVyZXI7Cit9OworCit9CisKKyNlbmRpZiAvLyBMSUJH
TEVTVjJfUkVOREVSRVJfUkVOREVSVEFSR0VUOV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVy
ZXI5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45N2ExMGQ2NGJmNzY2NjAxYzhjOGIzZDAxOTk0MmUyNzMzYmMy
ODkxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5jcHAKQEAgLTAsMCArMSwzMjg3IEBACisjaW5j
bHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFJlbmRlcmVyOS5j
cHA6IEltcGxlbWVudHMgYSBiYWNrLWVuZCBzcGVjaWZpYyBjbGFzcyBmb3IgdGhlIEQzRDkgcmVu
ZGVyZXIuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9CdWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZmZXIu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9JbmRleERhdGFNYW5hZ2VyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvUmVuZGVyZXI5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDkvcmVuZGVyZXI5X3V0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
U2hhZGVyRXhlY3V0YWJsZTkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9T
d2FwQ2hhaW45LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0
b3JhZ2U5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW1hZ2U5LmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvQmxpdC5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlclRhcmdldDkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvSW5kZXhCdWZmZXI5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDkvQnVmZmVyU3RvcmFnZTkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9R
dWVyeTkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9GZW5jZTkuaCIKKwor
I2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiCisKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS90cmFj
ZV9ldmVudC90cmFjZV9ldmVudC5oIgorCisvLyBDYW4gYWxzbyBiZSBlbmFibGVkIGJ5IGRlZmlu
aW5nIEZPUkNFX1JFRl9SQVNUIGluIHRoZSBwcm9qZWN0J3MgcHJlZGVmaW5lZCBtYWNyb3MKKyNk
ZWZpbmUgUkVGX1JBU1QgMAorCisvLyBUaGUgIkRlYnVnIFRoaXMgUGl4ZWwuLi4iIGZlYXR1cmUg
aW4gUElYIG9mdGVuIGZhaWxzIHdoZW4gdXNpbmcgdGhlCisvLyBEM0Q5RXggaW50ZXJmYWNlcy4g
IEluIG9yZGVyIHRvIGdldCBkZWJ1ZyBwaXhlbCB0byB3b3JrIG9uIGEgVmlzdGEvV2luIDcKKy8v
IG1hY2hpbmUsIGRlZmluZSAiQU5HTEVfRU5BQkxFX0QzRDlFWD0wIiBpbiB5b3VyIHByb2plY3Qg
ZmlsZS4KKyNpZiAhZGVmaW5lZChBTkdMRV9FTkFCTEVfRDNEOUVYKQorLy8gRW5hYmxlcyB1c2Ug
b2YgdGhlIElEaXJlY3QzRDlFeCBpbnRlcmZhY2UsIHdoZW4gYXZhaWxhYmxlCisjZGVmaW5lIEFO
R0xFX0VOQUJMRV9EM0Q5RVggMQorI2VuZGlmIC8vICFkZWZpbmVkKEFOR0xFX0VOQUJMRV9EM0Q5
RVgpCisKK25hbWVzcGFjZSByeAoreworc3RhdGljIGNvbnN0IEQzREZPUk1BVCBSZW5kZXJUYXJn
ZXRGb3JtYXRzW10gPQorICAgIHsKKyAgICAgICAgRDNERk1UX0ExUjVHNUI1LAorICAgIC8vICBE
M0RGTVRfQTJSMTBHMTBCMTAsICAgLy8gVGhlIGNvbG9yX3JhbXAgY29uZm9ybWFuY2UgdGVzdCB1
c2VzIFJlYWRQaXhlbHMgd2l0aCBVTlNJR05FRF9CWVRFIGNhdXNpbmcgaXQgdG8gdGhpbmsgdGhh
dCByZW5kZXJpbmcgc2tpcHBlZCBhIGNvbG91ciB2YWx1ZS4KKyAgICAgICAgRDNERk1UX0E4UjhH
OEI4LAorICAgICAgICBEM0RGTVRfUjVHNkI1LAorICAgIC8vICBEM0RGTVRfWDFSNUc1QjUsICAg
ICAgLy8gSGFzIG5vIGNvbXBhdGlibGUgT3BlbkdMIEVTIHJlbmRlcmJ1ZmZlciBmb3JtYXQKKyAg
ICAgICAgRDNERk1UX1g4UjhHOEI4CisgICAgfTsKKworc3RhdGljIGNvbnN0IEQzREZPUk1BVCBE
ZXB0aFN0ZW5jaWxGb3JtYXRzW10gPQorICAgIHsKKyAgICAgICAgRDNERk1UX1VOS05PV04sCisg
ICAgLy8gIEQzREZNVF9EMTZfTE9DS0FCTEUsCisgICAgICAgIEQzREZNVF9EMzIsCisgICAgLy8g
IEQzREZNVF9EMTVTMSwKKyAgICAgICAgRDNERk1UX0QyNFM4LAorICAgICAgICBEM0RGTVRfRDI0
WDgsCisgICAgLy8gIEQzREZNVF9EMjRYNFM0LAorICAgICAgICBEM0RGTVRfRDE2LAorICAgIC8v
ICBEM0RGTVRfRDMyRl9MT0NLQUJMRSwKKyAgICAvLyAgRDNERk1UX0QyNEZTOAorICAgIH07CisK
K2VudW0KK3sKKyAgICBNQVhfVkVSVEVYX0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOSA9IDI1NiwKKyAg
ICBNQVhfUElYRUxfQ09OU1RBTlRfVkVDVE9SU19TTTIgPSAzMiwKKyAgICBNQVhfUElYRUxfQ09O
U1RBTlRfVkVDVE9SU19TTTMgPSAyMjQsCisgICAgTUFYX1ZBUllJTkdfVkVDVE9SU19TTTIgPSA4
LAorICAgIE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00zID0gMTAsCisKKyAgICBNQVhfVEVYVFVSRV9J
TUFHRV9VTklUU19WVEZfU00zID0gNAorfTsKKworUmVuZGVyZXI5OjpSZW5kZXJlcjkoZWdsOjpE
aXNwbGF5ICpkaXNwbGF5LCBIREMgaERjLCBib29sIHNvZnR3YXJlRGV2aWNlKSA6IFJlbmRlcmVy
KGRpc3BsYXkpLCBtRGMoaERjKSwgbVNvZnR3YXJlRGV2aWNlKHNvZnR3YXJlRGV2aWNlKQorewor
ICAgIG1EM2Q5TW9kdWxlID0gTlVMTDsKKworICAgIG1EM2Q5ID0gTlVMTDsKKyAgICBtRDNkOUV4
ID0gTlVMTDsKKyAgICBtRGV2aWNlID0gTlVMTDsKKyAgICBtRGV2aWNlRXggPSBOVUxMOworICAg
IG1EZXZpY2VXaW5kb3cgPSBOVUxMOworICAgIG1CbGl0ID0gTlVMTDsKKworICAgIG1BZGFwdGVy
ID0gRDNEQURBUFRFUl9ERUZBVUxUOworCisgICAgI2lmIFJFRl9SQVNUID09IDEgfHwgZGVmaW5l
ZChGT1JDRV9SRUZfUkFTVCkKKyAgICAgICAgbURldmljZVR5cGUgPSBEM0RERVZUWVBFX1JFRjsK
KyAgICAjZWxzZQorICAgICAgICBtRGV2aWNlVHlwZSA9IEQzRERFVlRZUEVfSEFMOworICAgICNl
bmRpZgorCisgICAgbURldmljZUxvc3QgPSBmYWxzZTsKKworICAgIG1NYXhTdXBwb3J0ZWRTYW1w
bGVzID0gMDsKKworICAgIG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgPSBOVUxMOworCisgICAgbVZl
cnRleERhdGFNYW5hZ2VyID0gTlVMTDsKKyAgICBtSW5kZXhEYXRhTWFuYWdlciA9IE5VTEw7Cisg
ICAgbUxpbmVMb29wSUIgPSBOVUxMOworCisgICAgbU1heE51bGxDb2xvcmJ1ZmZlckxSVSA9IDA7
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fTlVMTF9DT0xPUkJVRkZFUl9DQUNIRV9FTlRS
SUVTOyBpKyspCisgICAgeworICAgICAgICBtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0ubHJ1Q291
bnQgPSAwOworICAgICAgICBtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0ud2lkdGggPSAwOworICAg
ICAgICBtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0uaGVpZ2h0ID0gMDsKKyAgICAgICAgbU51bGxD
b2xvcmJ1ZmZlckNhY2hlW2ldLmJ1ZmZlciA9IE5VTEw7CisgICAgfQorfQorCitSZW5kZXJlcjk6
On5SZW5kZXJlcjkoKQoreworICAgIGlmIChtRGV2aWNlKQorICAgIHsKKyAgICAgICAgLy8gSWYg
dGhlIGRldmljZSBpcyBsb3N0LCByZXNldCBpdCBmaXJzdCB0byBwcmV2ZW50IGxlYXZpbmcgdGhl
IGRyaXZlciBpbiBhbiB1bnN0YWJsZSBzdGF0ZQorICAgICAgICBpZiAodGVzdERldmljZUxvc3Qo
ZmFsc2UpKQorICAgICAgICB7CisgICAgICAgICAgICByZXNldERldmljZSgpOworICAgICAgICB9
CisgICAgfQorCisgICAgZGVpbml0aWFsaXplKCk7Cit9CisKK3ZvaWQgUmVuZGVyZXI5OjpkZWlu
aXRpYWxpemUoKQoreworICAgIHJlbGVhc2VEZXZpY2VSZXNvdXJjZXMoKTsKKworICAgIFNhZmVS
ZWxlYXNlKG1EZXZpY2UpOworICAgIFNhZmVSZWxlYXNlKG1EZXZpY2VFeCk7CisgICAgU2FmZVJl
bGVhc2UobUQzZDkpOworICAgIFNhZmVSZWxlYXNlKG1EM2Q5RXgpOworCisgICAgaWYgKG1EZXZp
Y2VXaW5kb3cpCisgICAgeworICAgICAgICBEZXN0cm95V2luZG93KG1EZXZpY2VXaW5kb3cpOwor
ICAgICAgICBtRGV2aWNlV2luZG93ID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAobUQzZDlNb2R1
bGUpCisgICAgeworICAgICAgICBtRDNkOU1vZHVsZSA9IE5VTEw7CisgICAgfQorCisgICAgd2hp
bGUgKCFtTXVsdGlTYW1wbGVTdXBwb3J0LmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxldGUg
W10gbU11bHRpU2FtcGxlU3VwcG9ydC5iZWdpbigpLT5zZWNvbmQ7CisgICAgICAgIG1NdWx0aVNh
bXBsZVN1cHBvcnQuZXJhc2UobU11bHRpU2FtcGxlU3VwcG9ydC5iZWdpbigpKTsKKyAgICB9Cit9
CisKK1JlbmRlcmVyOSAqUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5KFJlbmRlcmVyICpyZW5kZXJl
cikKK3sKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShyeDo6UmVuZGVyZXI5KiwgcmVuZGVy
ZXIpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8cng6OlJlbmRlcmVyOSo+KHJlbmRlcmVyKTsK
K30KKworRUdMaW50IFJlbmRlcmVyOTo6aW5pdGlhbGl6ZSgpCit7CisgICAgaWYgKCFpbml0aWFs
aXplQ29tcGlsZXIoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBFR0xfTk9UX0lOSVRJQUxJWkVE
OworICAgIH0KKworICAgIGlmIChtU29mdHdhcmVEZXZpY2UpCisgICAgeworICAgICAgICBUUkFD
RV9FVkVOVDAoImdwdSIsICJHZXRNb2R1bGVIYW5kbGVfc3dpZnRzaGFkZXIiKTsKKyAgICAgICAg
bUQzZDlNb2R1bGUgPSBHZXRNb2R1bGVIYW5kbGUoVEVYVCgic3dpZnRzaGFkZXJfZDNkOS5kbGwi
KSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1Iiwg
IkdldE1vZHVsZUhhbmRsZV9kM2Q5Iik7CisgICAgICAgIG1EM2Q5TW9kdWxlID0gR2V0TW9kdWxl
SGFuZGxlKFRFWFQoImQzZDkuZGxsIikpOworICAgIH0KKworICAgIGlmIChtRDNkOU1vZHVsZSA9
PSBOVUxMKQorICAgIHsKKyAgICAgICAgRVJSKCJObyBEM0Q5IG1vZHVsZSBmb3VuZCAtIGFib3J0
aW5nIVxuIik7CisgICAgICAgIHJldHVybiBFR0xfTk9UX0lOSVRJQUxJWkVEOworICAgIH0KKwor
ICAgIHR5cGVkZWYgSFJFU1VMVCAoV0lOQVBJICpEaXJlY3QzRENyZWF0ZTlFeEZ1bmMpKFVJTlQs
IElEaXJlY3QzRDlFeCoqKTsKKyAgICBEaXJlY3QzRENyZWF0ZTlFeEZ1bmMgRGlyZWN0M0RDcmVh
dGU5RXhQdHIgPSByZWludGVycHJldF9jYXN0PERpcmVjdDNEQ3JlYXRlOUV4RnVuYz4oR2V0UHJv
Y0FkZHJlc3MobUQzZDlNb2R1bGUsICJEaXJlY3QzRENyZWF0ZTlFeCIpKTsKKworICAgIC8vIFVz
ZSBEaXJlY3QzRDlFeCBpZiBhdmFpbGFibGUuIEFtb25nIG90aGVyIHRoaW5ncywgdGhpcyB2ZXJz
aW9uIGlzIGxlc3MKKyAgICAvLyBpbmNsaW5lZCB0byByZXBvcnQgYSBsb3N0IGNvbnRleHQsIGZv
ciBleGFtcGxlIHdoZW4gdGhlIHVzZXIgc3dpdGNoZXMKKyAgICAvLyBkZXNrdG9wLiBEaXJlY3Qz
RDlFeCBpcyBhdmFpbGFibGUgaW4gV2luZG93cyBWaXN0YSBhbmQgbGF0ZXIgaWYgc3VpdGFibGUg
ZHJpdmVycyBhcmUgYXZhaWxhYmxlLgorICAgIGlmIChBTkdMRV9FTkFCTEVfRDNEOUVYICYmIERp
cmVjdDNEQ3JlYXRlOUV4UHRyICYmIFNVQ0NFRURFRChEaXJlY3QzRENyZWF0ZTlFeFB0cihEM0Rf
U0RLX1ZFUlNJT04sICZtRDNkOUV4KSkpCisgICAgeworICAgICAgICBUUkFDRV9FVkVOVDAoImdw
dSIsICJEM2Q5RXhfUXVlcnlJbnRlcmZhY2UiKTsKKyAgICAgICAgQVNTRVJUKG1EM2Q5RXgpOwor
ICAgICAgICBtRDNkOUV4LT5RdWVyeUludGVyZmFjZShJSURfSURpcmVjdDNEOSwgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKio+KCZtRDNkOSkpOworICAgICAgICBBU1NFUlQobUQzZDkpOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJEaXJlY3QzRENy
ZWF0ZTkiKTsKKyAgICAgICAgbUQzZDkgPSBEaXJlY3QzRENyZWF0ZTkoRDNEX1NES19WRVJTSU9O
KTsKKyAgICB9CisKKyAgICBpZiAoIW1EM2Q5KQorICAgIHsKKyAgICAgICAgRVJSKCJDb3VsZCBu
b3QgY3JlYXRlIEQzRDkgZGV2aWNlIC0gYWJvcnRpbmchXG4iKTsKKyAgICAgICAgcmV0dXJuIEVH
TF9OT1RfSU5JVElBTElaRUQ7CisgICAgfQorCisgICAgaWYgKG1EYyAhPSBOVUxMKQorICAgIHsK
KyAgICAvLyAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FOiBEZXRlcm1pbmUgd2hpY2ggYWRh
cHRlciBpbmRleCB0aGUgZGV2aWNlIGNvbnRleHQgY29ycmVzcG9uZHMgdG8KKyAgICB9CisKKyAg
ICBIUkVTVUxUIHJlc3VsdDsKKworICAgIC8vIEdpdmUgdXAgb24gZ2V0dGluZyBkZXZpY2UgY2Fw
cyBhZnRlciBhYm91dCBvbmUgc2Vjb25kLgorICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQwKCJn
cHUiLCAiR2V0RGV2aWNlQ2FwcyIpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyAr
K2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1EM2Q5LT5HZXREZXZpY2VDYXBz
KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgJm1EZXZpY2VDYXBzKTsKKyAgICAgICAgICAgIGlmIChT
VUNDRUVERUQocmVzdWx0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdCA9PSBEM0RFUlJfTk9U
QVZBSUxBQkxFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFNsZWVwKDEwMCk7ICAg
Ly8gR2l2ZSB0aGUgZHJpdmVyIHNvbWUgdGltZSB0byBpbml0aWFsaXplL3JlY292ZXIKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKEZBSUxFRChyZXN1bHQpKSAgIC8vIEQzREVS
Ul9PVVRPRlZJREVPTUVNT1JZLCBFX09VVE9GTUVNT1JZLCBEM0RFUlJfSU5WQUxJRERFVklDRSwg
b3IgYW5vdGhlciBlcnJvciB3ZSBjYW4ndCByZWNvdmVyIGZyb20KKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBFUlIoImZhaWxlZCB0byBnZXQgZGV2aWNlIGNhcHMgKDB4JXgpXG4iLCBy
ZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybiBFR0xfTk9UX0lOSVRJQUxJWkVEOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1EZXZpY2VDYXBzLlBpeGVs
U2hhZGVyVmVyc2lvbiA8IEQzRFBTX1ZFUlNJT04oMiwgMCkpCisgICAgeworICAgICAgICBFUlIo
IlJlbmRlcmVyIGRvZXMgbm90IHN1cHBvcnQgUFMgMi4wLiBhYm9ydGluZyFcbiIpOworICAgICAg
ICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsKKyAgICB9CisKKyAgICAvLyBXaGVuIERpcmVj
dFg5IGlzIHJ1bm5pbmcgd2l0aCBhbiBvbGRlciBEaXJlY3RYOCBkcml2ZXIsIGEgU3RyZXRjaFJl
Y3QgZnJvbSBhIHJlZ3VsYXIgdGV4dHVyZSB0byBhIHJlbmRlciB0YXJnZXQgdGV4dHVyZSBpcyBu
b3Qgc3VwcG9ydGVkLgorICAgIC8vIFRoaXMgaXMgcmVxdWlyZWQgYnkgVGV4dHVyZTJEOjpjb252
ZXJ0VG9SZW5kZXJUYXJnZXQuCisgICAgaWYgKChtRGV2aWNlQ2Fwcy5EZXZDYXBzMiAmIEQzRERF
VkNBUFMyX0NBTl9TVFJFVENIUkVDVF9GUk9NX1RFWFRVUkVTKSA9PSAwKQorICAgIHsKKyAgICAg
ICAgRVJSKCJSZW5kZXJlciBkb2VzIG5vdCBzdXBwb3J0IHN0cmV0Y3RyZWN0IGZyb20gdGV4dHVy
ZXMhXG4iKTsKKyAgICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7CisgICAgfQorCisg
ICAgeworICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJHZXRBZGFwdGVySWRlbnRpZmllciIp
OworICAgICAgICBtRDNkOS0+R2V0QWRhcHRlcklkZW50aWZpZXIobUFkYXB0ZXIsIDAsICZtQWRh
cHRlcklkZW50aWZpZXIpOworICAgIH0KKworICAgIC8vIEFUSSBjYXJkcyBvbiBYUCBoYXZlIHBy
b2JsZW1zIHdpdGggbm9uLXBvd2VyLW9mLXR3byB0ZXh0dXJlcy4KKyAgICBtU3VwcG9ydHNOb25Q
b3dlcjJUZXh0dXJlcyA9ICEobURldmljZUNhcHMuVGV4dHVyZUNhcHMgJiBEM0RQVEVYVFVSRUNB
UFNfUE9XMikgJiYKKyAgICAgICAgIShtRGV2aWNlQ2Fwcy5UZXh0dXJlQ2FwcyAmIEQzRFBURVhU
VVJFQ0FQU19DVUJFTUFQX1BPVzIpICYmCisgICAgICAgICEobURldmljZUNhcHMuVGV4dHVyZUNh
cHMgJiBEM0RQVEVYVFVSRUNBUFNfTk9OUE9XMkNPTkRJVElPTkFMKSAmJgorICAgICAgICAhKGdl
dENvbXBhcmFibGVPU1ZlcnNpb24oKSA8IHZlcnNpb25XaW5kb3dzVmlzdGEgJiYgbUFkYXB0ZXJJ
ZGVudGlmaWVyLlZlbmRvcklkID09IFZFTkRPUl9JRF9BTUQpOworCisgICAgLy8gTXVzdCBzdXBw
b3J0IGEgbWluaW11bSBvZiAyOjEgYW5pc290cm9weSBmb3IgbWF4IGFuaXNvdHJvcHkgdG8gYmUg
Y29uc2lkZXJlZCBzdXBwb3J0ZWQsIHBlciB0aGUgc3BlYworICAgIG1TdXBwb3J0c1RleHR1cmVG
aWx0ZXJBbmlzb3Ryb3B5ID0gKChtRGV2aWNlQ2Fwcy5SYXN0ZXJDYXBzICYgRDNEUFJBU1RFUkNB
UFNfQU5JU09UUk9QWSkgJiYgKG1EZXZpY2VDYXBzLk1heEFuaXNvdHJvcHkgPj0gMikpOworCisg
ICAgbU1pblN3YXBJbnRlcnZhbCA9IDQ7CisgICAgbU1heFN3YXBJbnRlcnZhbCA9IDA7CisKKyAg
ICBpZiAobURldmljZUNhcHMuUHJlc2VudGF0aW9uSW50ZXJ2YWxzICYgRDNEUFJFU0VOVF9JTlRF
UlZBTF9JTU1FRElBVEUpCisgICAgeworICAgICAgICBtTWluU3dhcEludGVydmFsID0gc3RkOjpt
aW4obU1pblN3YXBJbnRlcnZhbCwgMCk7CisgICAgICAgIG1NYXhTd2FwSW50ZXJ2YWwgPSBzdGQ6
Om1heChtTWF4U3dhcEludGVydmFsLCAwKTsKKyAgICB9CisgICAgaWYgKG1EZXZpY2VDYXBzLlBy
ZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfT05FKQorICAgIHsKKyAg
ICAgICAgbU1pblN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDEpOwor
ICAgICAgICBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgMSk7
CisgICAgfQorICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQ
UkVTRU5UX0lOVEVSVkFMX1RXTykKKyAgICB7CisgICAgICAgIG1NaW5Td2FwSW50ZXJ2YWwgPSBz
dGQ6Om1pbihtTWluU3dhcEludGVydmFsLCAyKTsKKyAgICAgICAgbU1heFN3YXBJbnRlcnZhbCA9
IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2YWwsIDIpOworICAgIH0KKyAgICBpZiAobURldmljZUNh
cHMuUHJlc2VudGF0aW9uSW50ZXJ2YWxzICYgRDNEUFJFU0VOVF9JTlRFUlZBTF9USFJFRSkKKyAg
ICB7CisgICAgICAgIG1NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dhcEludGVydmFs
LCAzKTsKKyAgICAgICAgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2
YWwsIDMpOworICAgIH0KKyAgICBpZiAobURldmljZUNhcHMuUHJlc2VudGF0aW9uSW50ZXJ2YWxz
ICYgRDNEUFJFU0VOVF9JTlRFUlZBTF9GT1VSKQorICAgIHsKKyAgICAgICAgbU1pblN3YXBJbnRl
cnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDQpOworICAgICAgICBtTWF4U3dhcElu
dGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgNCk7CisgICAgfQorCisgICAgaW50
IG1heCA9IDA7CisgICAgeworICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJnZXRNdWx0aVNh
bXBsZVN1cHBvcnQiKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJh
eVNpemUoUmVuZGVyVGFyZ2V0Rm9ybWF0cyk7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAg
Ym9vbCAqbXVsdGlzYW1wbGVBcnJheSA9IG5ldyBib29sW0QzRE1VTFRJU0FNUExFXzE2X1NBTVBM
RVMgKyAxXTsKKyAgICAgICAgICAgIGdldE11bHRpU2FtcGxlU3VwcG9ydChSZW5kZXJUYXJnZXRG
b3JtYXRzW2ldLCBtdWx0aXNhbXBsZUFycmF5KTsKKyAgICAgICAgICAgIG1NdWx0aVNhbXBsZVN1
cHBvcnRbUmVuZGVyVGFyZ2V0Rm9ybWF0c1tpXV0gPSBtdWx0aXNhbXBsZUFycmF5OworCisgICAg
ICAgICAgICBmb3IgKGludCBqID0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgaiA+PSAwOyAt
LWopCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG11bHRpc2FtcGxlQXJyYXlb
al0gJiYgaiAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSAmJiBqID4gbWF4KQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbWF4ID0gajsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB7CisgICAgICAgIFRS
QUNFX0VWRU5UMCgiZ3B1IiwgImdldE11bHRpU2FtcGxlU3VwcG9ydDIiKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUoRGVwdGhTdGVuY2lsRm9ybWF0cyk7
ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKERlcHRoU3RlbmNpbEZvcm1hdHNbaV0g
PT0gRDNERk1UX1VOS05PV04pCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
ICAgIGJvb2wgKm11bHRpc2FtcGxlQXJyYXkgPSBuZXcgYm9vbFtEM0RNVUxUSVNBTVBMRV8xNl9T
QU1QTEVTICsgMV07CisgICAgICAgICAgICBnZXRNdWx0aVNhbXBsZVN1cHBvcnQoRGVwdGhTdGVu
Y2lsRm9ybWF0c1tpXSwgbXVsdGlzYW1wbGVBcnJheSk7CisgICAgICAgICAgICBtTXVsdGlTYW1w
bGVTdXBwb3J0W0RlcHRoU3RlbmNpbEZvcm1hdHNbaV1dID0gbXVsdGlzYW1wbGVBcnJheTsKKwor
ICAgICAgICAgICAgZm9yIChpbnQgaiA9IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7IGogPj0g
MDsgLS1qKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChtdWx0aXNhbXBsZUFy
cmF5W2pdICYmIGogIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUgJiYgaiA+IG1heCkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1heCA9IGo7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgbU1heFN1cHBv
cnRlZFNhbXBsZXMgPSBtYXg7CisKKyAgICBzdGF0aWMgY29uc3QgVENIQVIgd2luZG93TmFtZVtd
ID0gVEVYVCgiQW5nbGVIaWRkZW5XaW5kb3ciKTsKKyAgICBzdGF0aWMgY29uc3QgVENIQVIgY2xh
c3NOYW1lW10gPSBURVhUKCJTVEFUSUMiKTsKKworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQw
KCJncHUiLCAiQ3JlYXRlV2luZG93RXgiKTsKKyAgICAgICAgbURldmljZVdpbmRvdyA9IENyZWF0
ZVdpbmRvd0V4KFdTX0VYX05PQUNUSVZBVEUsIGNsYXNzTmFtZSwgd2luZG93TmFtZSwgV1NfRElT
QUJMRUQgfCBXU19QT1BVUCwgMCwgMCwgMSwgMSwgSFdORF9NRVNTQUdFLCBOVUxMLCBHZXRNb2R1
bGVIYW5kbGUoTlVMTCksIE5VTEwpOworICAgIH0KKworICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVS
UyBwcmVzZW50UGFyYW1ldGVycyA9IGdldERlZmF1bHRQcmVzZW50UGFyYW1ldGVycygpOworICAg
IERXT1JEIGJlaGF2aW9yRmxhZ3MgPSBEM0RDUkVBVEVfRlBVX1BSRVNFUlZFIHwgRDNEQ1JFQVRF
X05PV0lORE9XQ0hBTkdFUzsKKworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAi
RDNkOV9DcmVhdGVEZXZpY2UiKTsKKyAgICAgICAgcmVzdWx0ID0gbUQzZDktPkNyZWF0ZURldmlj
ZShtQWRhcHRlciwgbURldmljZVR5cGUsIG1EZXZpY2VXaW5kb3csIGJlaGF2aW9yRmxhZ3MgfCBE
M0RDUkVBVEVfSEFSRFdBUkVfVkVSVEVYUFJPQ0VTU0lORyB8IEQzRENSRUFURV9QVVJFREVWSUNF
LCAmcHJlc2VudFBhcmFtZXRlcnMsICZtRGV2aWNlKTsKKyAgICB9CisgICAgaWYgKHJlc3VsdCA9
PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCBy
ZXN1bHQgPT0gRDNERVJSX0RFVklDRUxPU1QpCisgICAgeworICAgICAgICByZXR1cm4gRUdMX0JB
RF9BTExPQzsKKyAgICB9CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAg
ICBUUkFDRV9FVkVOVDAoImdwdSIsICJEM2Q5X0NyZWF0ZURldmljZTIiKTsKKyAgICAgICAgcmVz
dWx0ID0gbUQzZDktPkNyZWF0ZURldmljZShtQWRhcHRlciwgbURldmljZVR5cGUsIG1EZXZpY2VX
aW5kb3csIGJlaGF2aW9yRmxhZ3MgfCBEM0RDUkVBVEVfU09GVFdBUkVfVkVSVEVYUFJPQ0VTU0lO
RywgJnByZXNlbnRQYXJhbWV0ZXJzLCAmbURldmljZSk7CisKKyAgICAgICAgaWYgKEZBSUxFRChy
ZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9P
VVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBE
M0RFUlJfTk9UQVZBSUxBQkxFIHx8IHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTE9TVCk7CisgICAg
ICAgICAgICByZXR1cm4gRUdMX0JBRF9BTExPQzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChtRDNkOUV4KQorICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAibURldmljZV9R
dWVyeUludGVyZmFjZSIpOworICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5RdWVyeUludGVyZmFj
ZShJSURfSURpcmVjdDNERGV2aWNlOUV4LCAodm9pZCoqKSAmbURldmljZUV4KTsKKyAgICAgICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFRSQUNF
X0VWRU5UMCgiZ3B1IiwgIlNoYWRlckNhY2hlIGluaXRpYWxpemUiKTsKKyAgICAgICAgbVZlcnRl
eFNoYWRlckNhY2hlLmluaXRpYWxpemUobURldmljZSk7CisgICAgICAgIG1QaXhlbFNoYWRlckNh
Y2hlLmluaXRpYWxpemUobURldmljZSk7CisgICAgfQorCisgICAgLy8gQ2hlY2sgb2NjbHVzaW9u
IHF1ZXJ5IHN1cHBvcnQKKyAgICBJRGlyZWN0M0RRdWVyeTkgKm9jY2x1c2lvblF1ZXJ5ID0gTlVM
TDsKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgImRldmljZV9DcmVhdGVRdWVy
eSIpOworICAgICAgICBpZiAoU1VDQ0VFREVEKG1EZXZpY2UtPkNyZWF0ZVF1ZXJ5KEQzRFFVRVJZ
VFlQRV9PQ0NMVVNJT04sICZvY2NsdXNpb25RdWVyeSkpICYmIG9jY2x1c2lvblF1ZXJ5KQorICAg
ICAgICB7CisgICAgICAgICAgICBvY2NsdXNpb25RdWVyeS0+UmVsZWFzZSgpOworICAgICAgICAg
ICAgbU9jY2x1c2lvblF1ZXJ5U3VwcG9ydCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICB7CisgICAgICAgICAgICBtT2NjbHVzaW9uUXVlcnlTdXBwb3J0ID0gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDaGVjayBldmVudCBxdWVyeSBzdXBwb3J0Cisg
ICAgSURpcmVjdDNEUXVlcnk5ICpldmVudFF1ZXJ5ID0gTlVMTDsKKyAgICB7CisgICAgICAgIFRS
QUNFX0VWRU5UMCgiZ3B1IiwgImRldmljZV9DcmVhdGVRdWVyeTIiKTsKKyAgICAgICAgaWYgKFNV
Q0NFRURFRChtRGV2aWNlLT5DcmVhdGVRdWVyeShEM0RRVUVSWVRZUEVfRVZFTlQsICZldmVudFF1
ZXJ5KSkgJiYgZXZlbnRRdWVyeSkKKyAgICAgICAgeworICAgICAgICAgICAgZXZlbnRRdWVyeS0+
UmVsZWFzZSgpOworICAgICAgICAgICAgbUV2ZW50UXVlcnlTdXBwb3J0ID0gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FdmVudFF1ZXJ5U3Vw
cG9ydCA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgRDNERElTUExBWU1PREUgY3Vy
cmVudERpc3BsYXlNb2RlOworICAgIG1EM2Q5LT5HZXRBZGFwdGVyRGlzcGxheU1vZGUobUFkYXB0
ZXIsICZjdXJyZW50RGlzcGxheU1vZGUpOworCisgICAgLy8gQ2hlY2sgdmVydGV4IHRleHR1cmUg
c3VwcG9ydAorICAgIC8vIE9ubHkgRGlyZWN0M0QgMTAgcmVhZHkgZGV2aWNlcyBzdXBwb3J0IGFs
bCB0aGUgbmVjZXNzYXJ5IHZlcnRleCB0ZXh0dXJlIGZvcm1hdHMuCisgICAgLy8gV2UgdGVzdCB0
aGlzIHVzaW5nIEQzRDkgYnkgY2hlY2tpbmcgc3VwcG9ydCBmb3IgdGhlIFIxNkYgZm9ybWF0Lgor
ICAgIG1WZXJ0ZXhUZXh0dXJlU3VwcG9ydCA9IG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVyVmVyc2lv
biA+PSBEM0RQU19WRVJTSU9OKDMsIDApICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUs
IGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RVU0FHRV9RVUVSWV9WRVJURVhU
RVhUVVJFLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfUjE2RikpOworCisgICAgLy8gQ2hlY2sg
ZGVwdGggdGV4dHVyZSBzdXBwb3J0CisgICAgLy8gd2UgdXNlIElOVFogZm9yIGRlcHRoIHRleHR1
cmVzIGluIERpcmVjdDNEOQorICAgIC8vIHdlIGFsc28gd2FudCBOVUxMIHRleHR1cmUgc3VwcG9y
dCB0byBlbnN1cmUgdGhlIHdlIGNhbiBtYWtlIGRlcHRoLW9ubHkgRkJPcworICAgIC8vIHNlZSBo
dHRwOi8vYXJhcy1wLmluZm8vdGV4dHMvRDNEOUdQVUhhY2tzLmh0bWwKKyAgICBtRGVwdGhUZXh0
dXJlU3VwcG9ydCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIs
IG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RVU0FHRV9E
RVBUSFNURU5DSUwsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9JTlRaKSkgJiYKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFk
YXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RV
U0FHRV9SRU5ERVJUQVJHRVQsIEQzRFJUWVBFX1NVUkZBQ0UsIEQzREZNVF9OVUxMKSk7CisKKyAg
ICAvLyBDaGVjayAzMiBiaXQgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZSBzdXBwb3J0CisgICAgbUZs
b2F0MzJGaWx0ZXJTdXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdCht
QWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdF
X1FVRVJZX0ZJTFRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9BMzJCMzJHMzJS
MzJGKSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNo
ZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2Rl
LkZvcm1hdCwgRDNEVVNBR0VfUVVFUllfRklMVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfQ1VCRVRFWFRV
UkUsIEQzREZNVF9BMzJCMzJHMzJSMzJGKSk7CisKKyAgICBtRmxvYXQzMlJlbmRlclN1cHBvcnQg
PSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlw
ZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUkVOREVSVEFSR0VULAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0EzMkIzMkczMlIzMkYpKSAmJgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFk
YXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9S
RU5ERVJUQVJHRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9DVUJFVEVYVFVSRSwgRDNERk1UX0EzMkIzMkcz
MlIzMkYpKTsKKworICAgIGlmICghbUZsb2F0MzJGaWx0ZXJTdXBwb3J0ICYmICFtRmxvYXQzMlJl
bmRlclN1cHBvcnQpCisgICAgeworICAgICAgICBtRmxvYXQzMlRleHR1cmVTdXBwb3J0ID0gU1VD
Q0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1
cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX1RFWFRVUkUs
IEQzREZNVF9BMzJCMzJHMzJSMzJGKSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VU
eXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9D
VUJFVEVYVFVSRSwgRDNERk1UX0EzMkIzMkczMlIzMkYpKTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgbUZsb2F0MzJUZXh0dXJlU3VwcG9ydCA9IHRydWU7CisgICAgfQorCisgICAg
Ly8gQ2hlY2sgMTYgYml0IGZsb2F0aW5nIHBvaW50IHRleHR1cmUgc3VwcG9ydAorICAgIG1GbG9h
dDE2RmlsdGVyU3VwcG9ydCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFk
YXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9R
VUVSWV9GSUxURVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfQTE2QjE2RzE2UjE2
RikpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5DaGVj
a0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5G
b3JtYXQsIEQzRFVTQUdFX1FVRVJZX0ZJTFRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX0NVQkVURVhUVVJF
LCBEM0RGTVRfQTE2QjE2RzE2UjE2RikpOworCisgICAgbUZsb2F0MTZSZW5kZXJTdXBwb3J0ID0g
U1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUs
IGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9BMTZCMTZHMTZSMTZGKSkgJiYKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFw
dGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUkVO
REVSVEFSR0VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfQ1VCRVRFWFRVUkUsIEQzREZNVF9BMTZCMTZHMTZS
MTZGKSk7CisKKyAgICBpZiAoIW1GbG9hdDE2RmlsdGVyU3VwcG9ydCAmJiAhbUZsb2F0MTZSZW5k
ZXJTdXBwb3J0KQorICAgIHsKKyAgICAgICAgbUZsb2F0MTZUZXh0dXJlU3VwcG9ydCA9IFNVQ0NF
RURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJy
ZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9URVhUVVJFLCBE
M0RGTVRfQTE2QjE2RzE2UjE2RikpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlw
ZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfQ1VC
RVRFWFRVUkUsIEQzREZNVF9BMTZCMTZHMTZSMTZGKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIG1GbG9hdDE2VGV4dHVyZVN1cHBvcnQgPSB0cnVlOworICAgIH0KKworICAgIC8v
IENoZWNrIERYVCB0ZXh0dXJlIHN1cHBvcnQKKyAgICBtRFhUMVRleHR1cmVTdXBwb3J0ID0gU1VD
Q0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1
cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9EWFQx
KSk7CisgICAgbURYVDNUZXh0dXJlU3VwcG9ydCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZp
Y2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0
LCAwLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfRFhUMykpOworICAgIG1EWFQ1VGV4dHVyZVN1
cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2
aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwg
RDNERk1UX0RYVDUpKTsKKworICAgIC8vIENoZWNrIGx1bWluYW5jZVthbHBoYV0gdGV4dHVyZSBz
dXBwb3J0CisgICAgbUx1bWluYW5jZVRleHR1cmVTdXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5D
aGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9k
ZS5Gb3JtYXQsIDAsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9MOCkpOworICAgIG1MdW1pbmFu
Y2VBbHBoYVRleHR1cmVTdXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1h
dChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsIEQz
RFJUWVBFX1RFWFRVUkUsIEQzREZNVF9BOEw4KSk7CisKKyAgICBpbml0aWFsaXplRGV2aWNlKCk7
CisKKyAgICByZXR1cm4gRUdMX1NVQ0NFU1M7Cit9CisKKy8vIGRvIGFueSBvbmUtdGltZSBkZXZp
Y2UgaW5pdGlhbGl6YXRpb24KKy8vIE5PVEU6IHRoaXMgaXMgYWxzbyBuZWVkZWQgYWZ0ZXIgYSBk
ZXZpY2UgbG9zdC9yZXNldAorLy8gdG8gcmVzZXQgdGhlIHNjZW5lIHN0YXR1cyBhbmQgZW5zdXJl
IHRoZSBkZWZhdWx0IHN0YXRlcyBhcmUgcmVzZXQuCit2b2lkIFJlbmRlcmVyOTo6aW5pdGlhbGl6
ZURldmljZSgpCit7CisgICAgLy8gUGVybWFuZW50IG5vbi1kZWZhdWx0IHN0YXRlcworICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1BPSU5UU1BSSVRFRU5BQkxFLCBUUlVFKTsKKyAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19MQVNUUElYRUwsIEZBTFNFKTsKKworICAg
IGlmIChtRGV2aWNlQ2Fwcy5QaXhlbFNoYWRlclZlcnNpb24gPj0gRDNEUFNfVkVSU0lPTigzLCAw
KSkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1BPSU5UU0la
RV9NQVgsIChEV09SRCYpbURldmljZUNhcHMuTWF4UG9pbnRTaXplKTsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfUE9JTlRTSVpF
X01BWCwgMHgzRjgwMDAwMCk7ICAgLy8gMS4wZgorICAgIH0KKworICAgIG1hcmtBbGxTdGF0ZURp
cnR5KCk7CisKKyAgICBtU2NlbmVTdGFydGVkID0gZmFsc2U7CisKKyAgICBBU1NFUlQoIW1CbGl0
ICYmICFtVmVydGV4RGF0YU1hbmFnZXIgJiYgIW1JbmRleERhdGFNYW5hZ2VyKTsKKyAgICBtQmxp
dCA9IG5ldyBCbGl0KHRoaXMpOworICAgIG1WZXJ0ZXhEYXRhTWFuYWdlciA9IG5ldyByeDo6VmVy
dGV4RGF0YU1hbmFnZXIodGhpcyk7CisgICAgbUluZGV4RGF0YU1hbmFnZXIgPSBuZXcgcng6Oklu
ZGV4RGF0YU1hbmFnZXIodGhpcyk7Cit9CisKK0QzRFBSRVNFTlRfUEFSQU1FVEVSUyBSZW5kZXJl
cjk6OmdldERlZmF1bHRQcmVzZW50UGFyYW1ldGVycygpCit7CisgICAgRDNEUFJFU0VOVF9QQVJB
TUVURVJTIHByZXNlbnRQYXJhbWV0ZXJzID0gezB9OworCisgICAgLy8gVGhlIGRlZmF1bHQgc3dh
cCBjaGFpbiBpcyBuZXZlciBhY3R1YWxseSB1c2VkLiBTdXJmYWNlIHdpbGwgY3JlYXRlIGEgbmV3
IHN3YXAgY2hhaW4gd2l0aCB0aGUgcHJvcGVyIHBhcmFtZXRlcnMuCisgICAgcHJlc2VudFBhcmFt
ZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCA9IEQzREZNVF9VTktOT1dOOworICAgIHByZXNl
bnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJDb3VudCA9IDE7CisgICAgcHJlc2VudFBhcmFtZXRlcnMu
QmFja0J1ZmZlckZvcm1hdCA9IEQzREZNVF9VTktOT1dOOworICAgIHByZXNlbnRQYXJhbWV0ZXJz
LkJhY2tCdWZmZXJXaWR0aCA9IDE7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhl
aWdodCA9IDE7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuRW5hYmxlQXV0b0RlcHRoU3RlbmNpbCA9
IEZBTFNFOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLkZsYWdzID0gMDsKKyAgICBwcmVzZW50UGFy
YW1ldGVycy5oRGV2aWNlV2luZG93ID0gbURldmljZVdpbmRvdzsKKyAgICBwcmVzZW50UGFyYW1l
dGVycy5NdWx0aVNhbXBsZVF1YWxpdHkgPSAwOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRp
U2FtcGxlVHlwZSA9IEQzRE1VTFRJU0FNUExFX05PTkU7CisgICAgcHJlc2VudFBhcmFtZXRlcnMu
UHJlc2VudGF0aW9uSW50ZXJ2YWwgPSBEM0RQUkVTRU5UX0lOVEVSVkFMX0RFRkFVTFQ7CisgICAg
cHJlc2VudFBhcmFtZXRlcnMuU3dhcEVmZmVjdCA9IEQzRFNXQVBFRkZFQ1RfRElTQ0FSRDsKKyAg
ICBwcmVzZW50UGFyYW1ldGVycy5XaW5kb3dlZCA9IFRSVUU7CisKKyAgICByZXR1cm4gcHJlc2Vu
dFBhcmFtZXRlcnM7Cit9CisKK2ludCBSZW5kZXJlcjk6OmdlbmVyYXRlQ29uZmlncyhDb25maWdE
ZXNjICoqY29uZmlnRGVzY0xpc3QpCit7CisgICAgRDNERElTUExBWU1PREUgY3VycmVudERpc3Bs
YXlNb2RlOworICAgIG1EM2Q5LT5HZXRBZGFwdGVyRGlzcGxheU1vZGUobUFkYXB0ZXIsICZjdXJy
ZW50RGlzcGxheU1vZGUpOworCisgICAgdW5zaWduZWQgaW50IG51bVJlbmRlckZvcm1hdHMgPSBB
cnJheVNpemUoUmVuZGVyVGFyZ2V0Rm9ybWF0cyk7CisgICAgdW5zaWduZWQgaW50IG51bURlcHRo
Rm9ybWF0cyA9IEFycmF5U2l6ZShEZXB0aFN0ZW5jaWxGb3JtYXRzKTsKKyAgICAoKmNvbmZpZ0Rl
c2NMaXN0KSA9IG5ldyBDb25maWdEZXNjW251bVJlbmRlckZvcm1hdHMgKiBudW1EZXB0aEZvcm1h
dHNdOworICAgIGludCBudW1Db25maWdzID0gMDsKKworICAgIGZvciAodW5zaWduZWQgaW50IGZv
cm1hdEluZGV4ID0gMDsgZm9ybWF0SW5kZXggPCBudW1SZW5kZXJGb3JtYXRzOyBmb3JtYXRJbmRl
eCsrKQorICAgIHsKKyAgICAgICAgRDNERk9STUFUIHJlbmRlclRhcmdldEZvcm1hdCA9IFJlbmRl
clRhcmdldEZvcm1hdHNbZm9ybWF0SW5kZXhdOworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
bUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERp
c3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUkVOREVSVEFSR0VULCBEM0RSVFlQRV9TVVJGQUNF
LCByZW5kZXJUYXJnZXRGb3JtYXQpOworCisgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkK
KyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZGVwdGhTdGVuY2lsSW5k
ZXggPSAwOyBkZXB0aFN0ZW5jaWxJbmRleCA8IG51bURlcHRoRm9ybWF0czsgZGVwdGhTdGVuY2ls
SW5kZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEM0RGT1JNQVQgZGVwdGhT
dGVuY2lsRm9ybWF0ID0gRGVwdGhTdGVuY2lsRm9ybWF0c1tkZXB0aFN0ZW5jaWxJbmRleF07Cisg
ICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBEM0RfT0s7CisKKyAgICAgICAgICAgICAg
ICBpZihkZXB0aFN0ZW5jaWxGb3JtYXQgIT0gRDNERk1UX1VOS05PV04pCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXZpY2VGb3Jt
YXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RV
U0FHRV9ERVBUSFNURU5DSUwsIEQzRFJUWVBFX1NVUkZBQ0UsIGRlcHRoU3RlbmNpbEZvcm1hdCk7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1
bHQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoZGVwdGhTdGVu
Y2lsRm9ybWF0ICE9IEQzREZNVF9VTktOT1dOKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXB0aFN0ZW5jaWxNYXRj
aChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIHJlbmRl
clRhcmdldEZvcm1hdCwgZGVwdGhTdGVuY2lsRm9ybWF0KTsKKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlnRGVzYyBuZXdDb25m
aWc7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcucmVuZGVyVGFyZ2V0Rm9ybWF0
ID0gZDNkOV9nbDo6Q29udmVydEJhY2tCdWZmZXJGb3JtYXQocmVuZGVyVGFyZ2V0Rm9ybWF0KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5kZXB0aFN0ZW5jaWxGb3JtYXQgPSBk
M2Q5X2dsOjpDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KGRlcHRoU3RlbmNpbEZvcm1hdCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcubXVsdGlTYW1wbGUgPSAwOyAvLyBGSVhN
RTogZW51bWVyYXRlIG11bHRpLXNhbXBsaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBuZXdD
b25maWcuZmFzdENvbmZpZyA9IChjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0ID09IHJlbmRlclRh
cmdldEZvcm1hdCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICgqY29uZmlnRGVzY0xpc3Qp
W251bUNvbmZpZ3MrK10gPSBuZXdDb25maWc7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gbnVtQ29uZmlnczsKK30KKwordm9pZCBSZW5kZXJlcjk6OmRlbGV0ZUNvbmZpZ3MoQ29uZmln
RGVzYyAqY29uZmlnRGVzY0xpc3QpCit7CisgICAgZGVsZXRlIFtdIChjb25maWdEZXNjTGlzdCk7
Cit9CisKK3ZvaWQgUmVuZGVyZXI5OjpzdGFydFNjZW5lKCkKK3sKKyAgICBpZiAoIW1TY2VuZVN0
YXJ0ZWQpCisgICAgeworICAgICAgICBsb25nIHJlc3VsdCA9IG1EZXZpY2UtPkJlZ2luU2NlbmUo
KTsKKyAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKSB7CisgICAgICAgICAgICAvLyBUaGlz
IGlzIGRlZmVuc2l2ZSBjaGVja2luZyBhZ2FpbnN0IHRoZSBkZXZpY2UgYmVpbmcKKyAgICAgICAg
ICAgIC8vIGxvc3QgYXQgdW5leHBlY3RlZCB0aW1lcy4KKyAgICAgICAgICAgIG1TY2VuZVN0YXJ0
ZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFJlbmRlcmVyOTo6ZW5kU2Nl
bmUoKQoreworICAgIGlmIChtU2NlbmVTdGFydGVkKQorICAgIHsKKyAgICAgICAgLy8gRW5kU2Nl
bmUgY2FuIGZhaWwgaWYgdGhlIGRldmljZSB3YXMgbG9zdCwgZm9yIGV4YW1wbGUgZHVlCisgICAg
ICAgIC8vIHRvIGEgVERSIGR1cmluZyBhIGRyYXcgY2FsbC4KKyAgICAgICAgbURldmljZS0+RW5k
U2NlbmUoKTsKKyAgICAgICAgbVNjZW5lU3RhcnRlZCA9IGZhbHNlOworICAgIH0KK30KKwordm9p
ZCBSZW5kZXJlcjk6OnN5bmMoYm9vbCBibG9jaykKK3sKKyAgICBIUkVTVUxUIHJlc3VsdDsKKwor
ICAgIElEaXJlY3QzRFF1ZXJ5OSogcXVlcnkgPSBhbGxvY2F0ZUV2ZW50UXVlcnkoKTsKKyAgICBp
ZiAoIXF1ZXJ5KQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHJlc3VsdCA9
IHF1ZXJ5LT5Jc3N1ZShEM0RJU1NVRV9FTkQpOworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7CisKKyAgICBkbworICAgIHsKKyAgICAgICAgcmVzdWx0ID0gcXVlcnktPkdldERhdGEoTlVM
TCwgMCwgRDNER0VUREFUQV9GTFVTSCk7CisKKyAgICAgICAgaWYoYmxvY2sgJiYgcmVzdWx0ID09
IFNfRkFMU0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEtlZXAgcG9sbGluZywgYnV0IGFs
bG93IG90aGVyIHRocmVhZHMgdG8gZG8gc29tZXRoaW5nIHVzZWZ1bCBmaXJzdAorICAgICAgICAg
ICAgU2xlZXAoMCk7CisgICAgICAgICAgICAvLyBleHBsaWNpdGx5IGNoZWNrIGZvciBkZXZpY2Ug
bG9zcworICAgICAgICAgICAgLy8gc29tZSBkcml2ZXJzIHNlZW0gdG8gcmV0dXJuIFNfRkFMU0Ug
ZXZlbiBpZiB0aGUgZGV2aWNlIGlzIGxvc3QKKyAgICAgICAgICAgIC8vIGluc3RlYWQgb2YgRDNE
RVJSX0RFVklDRUxPU1QgbGlrZSB0aGV5IHNob3VsZAorICAgICAgICAgICAgaWYgKHRlc3REZXZp
Y2VMb3N0KGZhbHNlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBE
M0RFUlJfREVWSUNFTE9TVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICB3
aGlsZShibG9jayAmJiByZXN1bHQgPT0gU19GQUxTRSk7CisKKyAgICBmcmVlRXZlbnRRdWVyeShx
dWVyeSk7CisKKyAgICBpZiAoZDNkOTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKKyAgICB7
CisgICAgICAgIG5vdGlmeURldmljZUxvc3QoKTsKKyAgICB9Cit9CisKK1N3YXBDaGFpbiAqUmVu
ZGVyZXI5OjpjcmVhdGVTd2FwQ2hhaW4oSFdORCB3aW5kb3csIEhBTkRMRSBzaGFyZUhhbmRsZSwg
R0xlbnVtIGJhY2tCdWZmZXJGb3JtYXQsIEdMZW51bSBkZXB0aEJ1ZmZlckZvcm1hdCkKK3sKKyAg
ICByZXR1cm4gbmV3IHJ4OjpTd2FwQ2hhaW45KHRoaXMsIHdpbmRvdywgc2hhcmVIYW5kbGUsIGJh
Y2tCdWZmZXJGb3JtYXQsIGRlcHRoQnVmZmVyRm9ybWF0KTsKK30KKworSURpcmVjdDNEUXVlcnk5
KiBSZW5kZXJlcjk6OmFsbG9jYXRlRXZlbnRRdWVyeSgpCit7CisgICAgSURpcmVjdDNEUXVlcnk5
ICpxdWVyeSA9IE5VTEw7CisKKyAgICBpZiAobUV2ZW50UXVlcnlQb29sLmVtcHR5KCkpCisgICAg
eworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVF1ZXJ5KEQzRFFVRVJZ
VFlQRV9FVkVOVCwgJnF1ZXJ5KTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcXVlcnkgPSBtRXZlbnRRdWVyeVBvb2wu
YmFjaygpOworICAgICAgICBtRXZlbnRRdWVyeVBvb2wucG9wX2JhY2soKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gcXVlcnk7Cit9CisKK3ZvaWQgUmVuZGVyZXI5OjpmcmVlRXZlbnRRdWVyeShJRGly
ZWN0M0RRdWVyeTkqIHF1ZXJ5KQoreworICAgIGlmIChtRXZlbnRRdWVyeVBvb2wuc2l6ZSgpID4g
MTAwMCkKKyAgICB7CisgICAgICAgIHF1ZXJ5LT5SZWxlYXNlKCk7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIG1FdmVudFF1ZXJ5UG9vbC5wdXNoX2JhY2socXVlcnkpOworICAgIH0K
K30KKworSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqUmVuZGVyZXI5OjpjcmVhdGVWZXJ0ZXhTaGFk
ZXIoY29uc3QgRFdPUkQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoKQoreworICAgIHJldHVybiBt
VmVydGV4U2hhZGVyQ2FjaGUuY3JlYXRlKGZ1bmN0aW9uLCBsZW5ndGgpOworfQorCitJRGlyZWN0
M0RQaXhlbFNoYWRlcjkgKlJlbmRlcmVyOTo6Y3JlYXRlUGl4ZWxTaGFkZXIoY29uc3QgRFdPUkQg
KmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoKQoreworICAgIHJldHVybiBtUGl4ZWxTaGFkZXJDYWNo
ZS5jcmVhdGUoZnVuY3Rpb24sIGxlbmd0aCk7Cit9CisKK0hSRVNVTFQgUmVuZGVyZXI5OjpjcmVh
dGVWZXJ0ZXhCdWZmZXIoVUlOVCBMZW5ndGgsIERXT1JEIFVzYWdlLCBJRGlyZWN0M0RWZXJ0ZXhC
dWZmZXI5ICoqcHBWZXJ0ZXhCdWZmZXIpCit7CisgICAgRDNEUE9PTCBQb29sID0gZ2V0QnVmZmVy
UG9vbChVc2FnZSk7CisgICAgcmV0dXJuIG1EZXZpY2UtPkNyZWF0ZVZlcnRleEJ1ZmZlcihMZW5n
dGgsIFVzYWdlLCAwLCBQb29sLCBwcFZlcnRleEJ1ZmZlciwgTlVMTCk7Cit9CisKK1ZlcnRleEJ1
ZmZlciAqUmVuZGVyZXI5OjpjcmVhdGVWZXJ0ZXhCdWZmZXIoKQoreworICAgIHJldHVybiBuZXcg
VmVydGV4QnVmZmVyOSh0aGlzKTsKK30KKworSFJFU1VMVCBSZW5kZXJlcjk6OmNyZWF0ZUluZGV4
QnVmZmVyKFVJTlQgTGVuZ3RoLCBEV09SRCBVc2FnZSwgRDNERk9STUFUIEZvcm1hdCwgSURpcmVj
dDNESW5kZXhCdWZmZXI5ICoqcHBJbmRleEJ1ZmZlcikKK3sKKyAgICBEM0RQT09MIFBvb2wgPSBn
ZXRCdWZmZXJQb29sKFVzYWdlKTsKKyAgICByZXR1cm4gbURldmljZS0+Q3JlYXRlSW5kZXhCdWZm
ZXIoTGVuZ3RoLCBVc2FnZSwgRm9ybWF0LCBQb29sLCBwcEluZGV4QnVmZmVyLCBOVUxMKTsKK30K
KworSW5kZXhCdWZmZXIgKlJlbmRlcmVyOTo6Y3JlYXRlSW5kZXhCdWZmZXIoKQoreworICAgIHJl
dHVybiBuZXcgSW5kZXhCdWZmZXI5KHRoaXMpOworfQorCitCdWZmZXJTdG9yYWdlICpSZW5kZXJl
cjk6OmNyZWF0ZUJ1ZmZlclN0b3JhZ2UoKQoreworICAgIHJldHVybiBuZXcgQnVmZmVyU3RvcmFn
ZTkoKTsKK30KKworUXVlcnlJbXBsICpSZW5kZXJlcjk6OmNyZWF0ZVF1ZXJ5KEdMZW51bSB0eXBl
KQoreworICAgIHJldHVybiBuZXcgUXVlcnk5KHRoaXMsIHR5cGUpOworfQorCitGZW5jZUltcGwg
KlJlbmRlcmVyOTo6Y3JlYXRlRmVuY2UoKQoreworICAgIHJldHVybiBuZXcgRmVuY2U5KHRoaXMp
OworfQorCit2b2lkIFJlbmRlcmVyOTo6c2V0U2FtcGxlclN0YXRlKGdsOjpTYW1wbGVyVHlwZSB0
eXBlLCBpbnQgaW5kZXgsIGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkKK3sK
KyAgICBib29sICpmb3JjZVNldFNhbXBsZXJzID0gKHR5cGUgPT0gZ2w6OlNBTVBMRVJfUElYRUwp
ID8gbUZvcmNlU2V0UGl4ZWxTYW1wbGVyU3RhdGVzIDogbUZvcmNlU2V0VmVydGV4U2FtcGxlclN0
YXRlczsKKyAgICBnbDo6U2FtcGxlclN0YXRlICphcHBsaWVkU2FtcGxlcnMgPSAodHlwZSA9PSBn
bDo6U0FNUExFUl9QSVhFTCkgPyBtQ3VyUGl4ZWxTYW1wbGVyU3RhdGVzOiBtQ3VyVmVydGV4U2Ft
cGxlclN0YXRlczsKKworICAgIGlmIChmb3JjZVNldFNhbXBsZXJzW2luZGV4XSB8fCBtZW1jbXAo
JnNhbXBsZXJTdGF0ZSwgJmFwcGxpZWRTYW1wbGVyc1tpbmRleF0sIHNpemVvZihnbDo6U2FtcGxl
clN0YXRlKSkgIT0gMCkKKyAgICB7CisgICAgICAgIGludCBkM2RTYW1wbGVyT2Zmc2V0ID0gKHR5
cGUgPT0gZ2w6OlNBTVBMRVJfUElYRUwpID8gMCA6IEQzRFZFUlRFWFRFWFRVUkVTQU1QTEVSMDsK
KyAgICAgICAgaW50IGQzZFNhbXBsZXIgPSBpbmRleCArIGQzZFNhbXBsZXJPZmZzZXQ7CisKKyAg
ICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfQUREUkVT
U1UsIGdsX2QzZDk6OkNvbnZlcnRUZXh0dXJlV3JhcChzYW1wbGVyU3RhdGUud3JhcFMpKTsKKyAg
ICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfQUREUkVT
U1YsIGdsX2QzZDk6OkNvbnZlcnRUZXh0dXJlV3JhcChzYW1wbGVyU3RhdGUud3JhcFQpKTsKKwor
ICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9NQUdG
SUxURVIsIGdsX2QzZDk6OkNvbnZlcnRNYWdGaWx0ZXIoc2FtcGxlclN0YXRlLm1hZ0ZpbHRlciwg
c2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHkpKTsKKyAgICAgICAgRDNEVEVYVFVSRUZJTFRFUlRZ
UEUgZDNkTWluRmlsdGVyLCBkM2RNaXBGaWx0ZXI7CisgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRN
aW5GaWx0ZXIoc2FtcGxlclN0YXRlLm1pbkZpbHRlciwgJmQzZE1pbkZpbHRlciwgJmQzZE1pcEZp
bHRlciwgc2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHkpOworICAgICAgICBtRGV2aWNlLT5TZXRT
YW1wbGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9NSU5GSUxURVIsIGQzZE1pbkZpbHRlcik7
CisgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01J
UEZJTFRFUiwgZDNkTWlwRmlsdGVyKTsKKyAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRl
KGQzZFNhbXBsZXIsIEQzRFNBTVBfTUFYTUlQTEVWRUwsIHNhbXBsZXJTdGF0ZS5sb2RPZmZzZXQp
OworICAgICAgICBpZiAobVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RT
QU1QX01BWEFOSVNPVFJPUFksIChEV09SRClzYW1wbGVyU3RhdGUubWF4QW5pc290cm9weSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBmb3JjZVNldFNhbXBsZXJzW2luZGV4XSA9IGZhbHNlOwor
ICAgIGFwcGxpZWRTYW1wbGVyc1tpbmRleF0gPSBzYW1wbGVyU3RhdGU7Cit9CisKK3ZvaWQgUmVu
ZGVyZXI5OjpzZXRUZXh0dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGdsOjpU
ZXh0dXJlICp0ZXh0dXJlKQoreworICAgIGludCBkM2RTYW1wbGVyT2Zmc2V0ID0gKHR5cGUgPT0g
Z2w6OlNBTVBMRVJfUElYRUwpID8gMCA6IEQzRFZFUlRFWFRFWFRVUkVTQU1QTEVSMDsKKyAgICBp
bnQgZDNkU2FtcGxlciA9IGluZGV4ICsgZDNkU2FtcGxlck9mZnNldDsKKyAgICBJRGlyZWN0M0RC
YXNlVGV4dHVyZTkgKmQzZFRleHR1cmUgPSBOVUxMOworICAgIHVuc2lnbmVkIGludCBzZXJpYWwg
PSAwOworICAgIGJvb2wgZm9yY2VTZXRUZXh0dXJlID0gZmFsc2U7CisKKyAgICB1bnNpZ25lZCBp
bnQgKmFwcGxpZWRTZXJpYWxzID0gKHR5cGUgPT0gZ2w6OlNBTVBMRVJfUElYRUwpID8gbUN1clBp
eGVsVGV4dHVyZVNlcmlhbHMgOiBtQ3VyVmVydGV4VGV4dHVyZVNlcmlhbHM7CisKKyAgICBpZiAo
dGV4dHVyZSkKKyAgICB7CisgICAgICAgIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlICp0ZXhTdG9y
YWdlID0gdGV4dHVyZS0+Z2V0TmF0aXZlVGV4dHVyZSgpOworICAgICAgICBpZiAodGV4U3RvcmFn
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgVGV4dHVyZVN0b3JhZ2U5ICpzdG9yYWdlOSA9IFRl
eHR1cmVTdG9yYWdlOTo6bWFrZVRleHR1cmVTdG9yYWdlOSh0ZXhTdG9yYWdlLT5nZXRTdG9yYWdl
SW5zdGFuY2UoKSk7CisgICAgICAgICAgICBkM2RUZXh0dXJlID0gc3RvcmFnZTktPmdldEJhc2VU
ZXh0dXJlKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gSWYgd2UgZ2V0IE5VTEwgYmFjayBmcm9t
IGdldEJhc2VUZXh0dXJlIGhlcmUsIHNvbWV0aGluZyB3ZW50IHdyb25nCisgICAgICAgIC8vIGlu
IHRoZSB0ZXh0dXJlIGNsYXNzIGFuZCB3ZSdyZSB1bmV4cGVjdGVkbHkgbWlzc2luZyB0aGUgZDNk
IHRleHR1cmUKKyAgICAgICAgQVNTRVJUKGQzZFRleHR1cmUgIT0gTlVMTCk7CisKKyAgICAgICAg
c2VyaWFsID0gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpOworICAgICAgICBmb3JjZVNldFRl
eHR1cmUgPSB0ZXh0dXJlLT5oYXNEaXJ0eUltYWdlcygpOworICAgIH0KKworICAgIGlmIChmb3Jj
ZVNldFRleHR1cmUgfHwgYXBwbGllZFNlcmlhbHNbaW5kZXhdICE9IHNlcmlhbCkKKyAgICB7Cisg
ICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmUoZDNkU2FtcGxlciwgZDNkVGV4dHVyZSk7CisgICAg
fQorCisgICAgYXBwbGllZFNlcmlhbHNbaW5kZXhdID0gc2VyaWFsOworfQorCit2b2lkIFJlbmRl
cmVyOTo6c2V0UmFzdGVyaXplclN0YXRlKGNvbnN0IGdsOjpSYXN0ZXJpemVyU3RhdGUgJnJhc3Rl
clN0YXRlKQoreworICAgIGJvb2wgcmFzdGVyU3RhdGVDaGFuZ2VkID0gbUZvcmNlU2V0UmFzdGVy
U3RhdGUgfHwgbWVtY21wKCZyYXN0ZXJTdGF0ZSwgJm1DdXJSYXN0ZXJTdGF0ZSwgc2l6ZW9mKGds
OjpSYXN0ZXJpemVyU3RhdGUpKSAhPSAwOworCisgICAgaWYgKHJhc3RlclN0YXRlQ2hhbmdlZCkK
KyAgICB7CisgICAgICAgIC8vIFNldCB0aGUgY3VsbCBtb2RlCisgICAgICAgIGlmIChyYXN0ZXJT
dGF0ZS5jdWxsRmFjZSkKKyAgICAgICAgeworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfQ1VMTE1PREUsIGdsX2QzZDk6OkNvbnZlcnRDdWxsTW9kZShyYXN0ZXJTdGF0
ZS5jdWxsTW9kZSwgcmFzdGVyU3RhdGUuZnJvbnRGYWNlKSk7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19DVUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyYXN0
ZXJTdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1D
dXJEZXB0aFNpemUgPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX1NMT1BFU0NBTEVERVBUSEJJQVMsICooRFdPUkQqKSZyYXN0
ZXJTdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yKTsKKworICAgICAgICAgICAgICAgIGZsb2F0IGRl
cHRoQmlhcyA9IGxkZXhwKHJhc3RlclN0YXRlLnBvbHlnb25PZmZzZXRVbml0cywgLXN0YXRpY19j
YXN0PGludD4obUN1ckRlcHRoU2l6ZSkpOworICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0RFUFRIQklBUywgKihEV09SRCopJmRlcHRoQmlhcyk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TTE9QRVNDQUxFREVQVEhCSUFTLCAwKTsKKyAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RFUFRIQklBUywgMCk7Cisg
ICAgICAgIH0KKworICAgICAgICBtQ3VyUmFzdGVyU3RhdGUgPSByYXN0ZXJTdGF0ZTsKKyAgICB9
CisKKyAgICBtRm9yY2VTZXRSYXN0ZXJTdGF0ZSA9IGZhbHNlOworfQorCit2b2lkIFJlbmRlcmVy
OTo6c2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6
QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNvbG9yICZibGVuZENvbG9yLCB1bnNp
Z25lZCBpbnQgc2FtcGxlTWFzaykKK3sKKyAgICBib29sIGJsZW5kU3RhdGVDaGFuZ2VkID0gbUZv
cmNlU2V0QmxlbmRTdGF0ZSB8fCBtZW1jbXAoJmJsZW5kU3RhdGUsICZtQ3VyQmxlbmRTdGF0ZSwg
c2l6ZW9mKGdsOjpCbGVuZFN0YXRlKSkgIT0gMDsKKyAgICBib29sIGJsZW5kQ29sb3JDaGFuZ2Vk
ID0gbUZvcmNlU2V0QmxlbmRTdGF0ZSB8fCBtZW1jbXAoJmJsZW5kQ29sb3IsICZtQ3VyQmxlbmRD
b2xvciwgc2l6ZW9mKGdsOjpDb2xvcikpICE9IDA7CisgICAgYm9vbCBzYW1wbGVNYXNrQ2hhbmdl
ZCA9IG1Gb3JjZVNldEJsZW5kU3RhdGUgfHwgc2FtcGxlTWFzayAhPSBtQ3VyU2FtcGxlTWFzazsK
KworICAgIGlmIChibGVuZFN0YXRlQ2hhbmdlZCB8fCBibGVuZENvbG9yQ2hhbmdlZCkKKyAgICB7
CisgICAgICAgIGlmIChibGVuZFN0YXRlLmJsZW5kKQorICAgICAgICB7CisgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsKKwor
ICAgICAgICAgICAgaWYgKGJsZW5kU3RhdGUuc291cmNlQmxlbmRSR0IgIT0gR0xfQ09OU1RBTlRf
QUxQSEEgJiYgYmxlbmRTdGF0ZS5zb3VyY2VCbGVuZFJHQiAhPSBHTF9PTkVfTUlOVVNfQ09OU1RB
TlRfQUxQSEEgJiYKKyAgICAgICAgICAgICAgICBibGVuZFN0YXRlLmRlc3RCbGVuZFJHQiAhPSBH
TF9DT05TVEFOVF9BTFBIQSAmJiBibGVuZFN0YXRlLmRlc3RCbGVuZFJHQiAhPSBHTF9PTkVfTUlO
VVNfQ09OU1RBTlRfQUxQSEEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRGQUNUT1IsIGdsX2QzZDk6OkNvbnZlcnRDb2xv
cihibGVuZENvbG9yKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxF
TkRGQUNUT1IsIEQzRENPTE9SX1JHQkEoZ2w6OnVub3JtPDg+KGJsZW5kQ29sb3IuYWxwaGEpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4PihibGVuZENvbG9yLmFscGhhKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbDo6dW5vcm08OD4oYmxlbmRDb2xvci5hbHBoYSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2w6OnVub3JtPDg+KGJsZW5kQ29sb3IuYWxwaGEpKSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NSQ0JMRU5ELCBnbF9kM2Q5OjpD
b252ZXJ0QmxlbmRGdW5jKGJsZW5kU3RhdGUuc291cmNlQmxlbmRSR0IpKTsKKyAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RFU1RCTEVORCwgZ2xfZDNkOTo6Q29udmVy
dEJsZW5kRnVuYyhibGVuZFN0YXRlLmRlc3RCbGVuZFJHQikpOworICAgICAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRPUCwgZ2xfZDNkOTo6Q29udmVydEJsZW5kT3Ao
YmxlbmRTdGF0ZS5ibGVuZEVxdWF0aW9uUkdCKSk7CisKKyAgICAgICAgICAgIGlmIChibGVuZFN0
YXRlLnNvdXJjZUJsZW5kUkdCICE9IGJsZW5kU3RhdGUuc291cmNlQmxlbmRBbHBoYSB8fAorICAg
ICAgICAgICAgICAgIGJsZW5kU3RhdGUuZGVzdEJsZW5kUkdCICE9IGJsZW5kU3RhdGUuZGVzdEJs
ZW5kQWxwaGEgfHwKKyAgICAgICAgICAgICAgICBibGVuZFN0YXRlLmJsZW5kRXF1YXRpb25SR0Ig
IT0gYmxlbmRTdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5E
RU5BQkxFLCBUUlVFKTsKKworICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX1NSQ0JMRU5EQUxQSEEsIGdsX2QzZDk6OkNvbnZlcnRCbGVuZEZ1bmMoYmxlbmRTdGF0
ZS5zb3VyY2VCbGVuZEFscGhhKSk7CisgICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfREVTVEJMRU5EQUxQSEEsIGdsX2QzZDk6OkNvbnZlcnRCbGVuZEZ1bmMoYmxl
bmRTdGF0ZS5kZXN0QmxlbmRBbHBoYSkpOworICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0JMRU5ET1BBTFBIQSwgZ2xfZDNkOTo6Q29udmVydEJsZW5kT3AoYmxl
bmRTdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChibGVuZFN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgRklYTUUoIlNhbXBsZSBhbHBoYSB0byBjb3ZlcmFnZSBpcyB1
bmltcGxlbWVudGVkLiIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2V0IHRoZSBjb2xvciBt
YXNrCisgICAgICAgIGJvb2wgemVyb0NvbG9yTWFza0FsbG93ZWQgPSBnZXRBZGFwdGVyVmVuZG9y
KCkgIT0gVkVORE9SX0lEX0FNRDsKKyAgICAgICAgLy8gQXBwYXJlbnRseSBzb21lIEFUSSBjYXJk
cyBoYXZlIGEgYnVnIHdoZXJlIGEgZHJhdyB3aXRoIGEgemVybyBjb2xvcgorICAgICAgICAvLyB3
cml0ZSBtYXNrIGNhbiBjYXVzZSBsYXRlciBkcmF3cyB0byBoYXZlIGluY29ycmVjdCByZXN1bHRz
LiBJbnN0ZWFkLAorICAgICAgICAvLyBzZXQgYSBub256ZXJvIGNvbG9yIHdyaXRlIG1hc2sgYnV0
IG1vZGlmeSB0aGUgYmxlbmQgc3RhdGUgc28gdGhhdCBubworICAgICAgICAvLyBkcmF3aW5nIGlz
IGRvbmUuCisgICAgICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmdsZXByb2plY3Qv
aXNzdWVzL2RldGFpbD9pZD0xNjkKKworICAgICAgICBEV09SRCBjb2xvck1hc2sgPSBnbF9kM2Q5
OjpDb252ZXJ0Q29sb3JNYXNrKGJsZW5kU3RhdGUuY29sb3JNYXNrUmVkLCBibGVuZFN0YXRlLmNv
bG9yTWFza0dyZWVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJsZW5kU3RhdGUuY29sb3JNYXNrQmx1ZSwgYmxlbmRTdGF0ZS5jb2xvck1hc2tB
bHBoYSk7CisgICAgICAgIGlmIChjb2xvck1hc2sgPT0gMCAmJiAhemVyb0NvbG9yTWFza0FsbG93
ZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEVuYWJsZSBncmVlbiBjaGFubmVsLCBidXQg
c2V0IGJsZW5kaW5nIHNvIG5vdGhpbmcgd2lsbCBiZSBkcmF3bi4KKyAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIEQzRENPTE9SV1JJVEVF
TkFCTEVfR1JFRU4pOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
QUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7CisKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX1NSQ0JMRU5ELCBEM0RCTEVORF9aRVJPKTsKKyAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RFU1RCTEVORCwgRDNEQkxFTkRfT05FKTsKKyAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JMRU5ET1AsIEQzREJMRU5ET1Bf
QUREKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIGNvbG9yTWFzayk7
CisgICAgICAgIH0KKworICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ESVRI
RVJFTkFCTEUsIGJsZW5kU3RhdGUuZGl0aGVyID8gVFJVRSA6IEZBTFNFKTsKKworICAgICAgICBt
Q3VyQmxlbmRTdGF0ZSA9IGJsZW5kU3RhdGU7CisgICAgICAgIG1DdXJCbGVuZENvbG9yID0gYmxl
bmRDb2xvcjsKKyAgICB9CisKKyAgICBpZiAoc2FtcGxlTWFza0NoYW5nZWQpCisgICAgeworICAg
ICAgICAvLyBTZXQgdGhlIG11bHRpc2FtcGxlIG1hc2sKKyAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfTVVMVElTQU1QTEVBTlRJQUxJQVMsIFRSVUUpOworICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRU1BU0ssIHN0YXRpY19jYXN0PERX
T1JEPihzYW1wbGVNYXNrKSk7CisKKyAgICAgICAgbUN1clNhbXBsZU1hc2sgPSBzYW1wbGVNYXNr
OworICAgIH0KKworICAgIG1Gb3JjZVNldEJsZW5kU3RhdGUgPSBmYWxzZTsKK30KKwordm9pZCBS
ZW5kZXJlcjk6OnNldERlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0
ZSAmZGVwdGhTdGVuY2lsU3RhdGUsIGludCBzdGVuY2lsUmVmLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBzdGVuY2lsQmFja1JlZiwgYm9vbCBmcm9udEZhY2VDQ1cp
Cit7CisgICAgYm9vbCBkZXB0aFN0ZW5jaWxTdGF0ZUNoYW5nZWQgPSBtRm9yY2VTZXREZXB0aFN0
ZW5jaWxTdGF0ZSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtY21w
KCZkZXB0aFN0ZW5jaWxTdGF0ZSwgJm1DdXJEZXB0aFN0ZW5jaWxTdGF0ZSwgc2l6ZW9mKGdsOjpE
ZXB0aFN0ZW5jaWxTdGF0ZSkpICE9IDA7CisgICAgYm9vbCBzdGVuY2lsUmVmQ2hhbmdlZCA9IG1G
b3JjZVNldERlcHRoU3RlbmNpbFN0YXRlIHx8IHN0ZW5jaWxSZWYgIT0gbUN1clN0ZW5jaWxSZWYg
fHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlbmNpbEJhY2tSZWYgIT0gbUN1clN0
ZW5jaWxCYWNrUmVmOworICAgIGJvb2wgZnJvbnRGYWNlQ0NXQ2hhbmdlZCA9IG1Gb3JjZVNldERl
cHRoU3RlbmNpbFN0YXRlIHx8IGZyb250RmFjZUNDVyAhPSBtQ3VyRnJvbnRGYWNlQ0NXOworCisg
ICAgaWYgKGRlcHRoU3RlbmNpbFN0YXRlQ2hhbmdlZCkKKyAgICB7CisgICAgICAgIGlmIChkZXB0
aFN0ZW5jaWxTdGF0ZS5kZXB0aFRlc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEQzRFpCX1RSVUUpOworICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkZVTkMsIGdsX2QzZDk6OkNvbnZlcnRDb21w
YXJpc29uKGRlcHRoU3RlbmNpbFN0YXRlLmRlcHRoRnVuYykpOworICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfWkVOQUJMRSwgRDNEWkJfRkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAgbUN1ckRlcHRo
U3RlbmNpbFN0YXRlID0gZGVwdGhTdGVuY2lsU3RhdGU7CisgICAgfQorCisgICAgaWYgKGRlcHRo
U3RlbmNpbFN0YXRlQ2hhbmdlZCB8fCBzdGVuY2lsUmVmQ2hhbmdlZCB8fCBmcm9udEZhY2VDQ1dD
aGFuZ2VkKQorICAgIHsKKyAgICAgICAgaWYgKGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxUZXN0
ICYmIG1DdXJTdGVuY2lsU2l6ZSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIFRSVUUpOworICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfVFdPU0lERURTVEVOQ0lMTU9ERSwgVFJVRSk7
CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBVbnN1cHBvcnRlZCBieSBEM0Q5CisgICAgICAgICAg
ICBjb25zdCBEM0RSRU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxSRUYgPSBEM0RSU19T
VEVOQ0lMUkVGOworICAgICAgICAgICAgY29uc3QgRDNEUkVOREVSU1RBVEVUWVBFIEQzRFJTX0ND
V19TVEVOQ0lMTUFTSyA9IEQzRFJTX1NURU5DSUxNQVNLOworICAgICAgICAgICAgY29uc3QgRDNE
UkVOREVSU1RBVEVUWVBFIEQzRFJTX0NDV19TVEVOQ0lMV1JJVEVNQVNLID0gRDNEUlNfU1RFTkNJ
TFdSSVRFTUFTSzsKKyAgICAgICAgICAgIGlmIChkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsV3Jp
dGVtYXNrICE9IGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrIHx8CisgICAg
ICAgICAgICAgICAgc3RlbmNpbFJlZiAhPSBzdGVuY2lsQmFja1JlZiB8fAorICAgICAgICAgICAg
ICAgIGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxNYXNrICE9IGRlcHRoU3RlbmNpbFN0YXRlLnN0
ZW5jaWxCYWNrTWFzaykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBFUlIoIlNlcGFy
YXRlIGZyb250L2JhY2sgc3RlbmNpbCB3cml0ZW1hc2tzLCByZWZlcmVuY2UgdmFsdWVzLCBvciBz
dGVuY2lsIG1hc2sgdmFsdWVzIGFyZSBpbnZhbGlkIHVuZGVyIFdlYkdMLiIpOworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBnZXQgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgc3RlbmNp
bCByZWYKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBtYXhTdGVuY2lsID0gKDEgPDwgbUN1clN0
ZW5jaWxTaXplKSAtIDE7CisKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGZy
b250RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxXUklURU1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTFdS
SVRFTUFTSywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoU3RlbmNp
bFN0YXRlLnN0ZW5jaWxXcml0ZW1hc2spOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoZnJvbnRGYWNlQ0NXID8gRDNEUlNfU1RFTkNJTEZVTkMgOiBEM0RSU19DQ1dfU1RFTkNJ
TEZVTkMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9kM2Q5OjpDb252
ZXJ0Q29tcGFyaXNvbihkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsRnVuYykpOworCisgICAgICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShmcm9udEZhY2VDQ1cgPyBEM0RSU19TVEVOQ0lM
UkVGIDogRDNEUlNfQ0NXX1NURU5DSUxSRUYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoc3RlbmNpbFJlZiA8IChpbnQpbWF4U3RlbmNpbCkgPyBzdGVuY2lsUmVmIDogbWF4
U3RlbmNpbCk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShmcm9udEZhY2VD
Q1cgPyBEM0RSU19TVEVOQ0lMTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMTUFTSywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxNYXNr
KTsKKworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoZnJvbnRGYWNlQ0NXID8g
RDNEUlNfU1RFTkNJTEZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTEZBSUwsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnbF9kM2Q5OjpDb252ZXJ0U3RlbmNpbE9wKGRlcHRoU3Rl
bmNpbFN0YXRlLnN0ZW5jaWxGYWlsKSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShmcm9udEZhY2VDQ1cgPyBEM0RSU19TVEVOQ0lMWkZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJ
TFpGQUlMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6Q29u
dmVydFN0ZW5jaWxPcChkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbCkpOwor
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoZnJvbnRGYWNlQ0NXID8gRDNEUlNf
U1RFTkNJTFBBU1MgOiBEM0RSU19DQ1dfU1RFTkNJTFBBU1MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbF9kM2Q5OjpDb252ZXJ0U3RlbmNpbE9wKGRlcHRoU3RlbmNpbFN0
YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzKSk7CisKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKCFmcm9udEZhY2VDQ1cgPyBEM0RSU19TVEVOQ0lMV1JJVEVNQVNLIDogRDNEUlNf
Q0NXX1NURU5DSUxXUklURU1BU0ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzayk7CisgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZSghZnJvbnRGYWNlQ0NXID8gRDNEUlNfU1RFTkNJTEZVTkMg
OiBEM0RSU19DQ1dfU1RFTkNJTEZVTkMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbF9kM2Q5OjpDb252ZXJ0Q29tcGFyaXNvbihkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2ls
QmFja0Z1bmMpKTsKKworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoIWZyb250
RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxSRUYgOiBEM0RSU19DQ1dfU1RFTkNJTFJFRiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGVuY2lsQmFja1JlZiA8IChpbnQpbWF4
U3RlbmNpbCkgPyBzdGVuY2lsQmFja1JlZiA6IG1heFN0ZW5jaWwpOworICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoIWZyb250RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxNQVNLIDog
RDNEUlNfQ0NXX1NURU5DSUxNQVNLLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbEJhY2tNYXNrKTsKKworICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoIWZyb250RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxGQUlMIDog
RDNEUlNfQ0NXX1NURU5DSUxGQUlMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2xfZDNkOTo6Q29udmVydFN0ZW5jaWxPcChkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsQmFj
a0ZhaWwpKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKCFmcm9udEZhY2VD
Q1cgPyBEM0RSU19TVEVOQ0lMWkZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTFpGQUlMLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6Q29udmVydFN0ZW5jaWxPcChk
ZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwpKTsKKyAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKCFmcm9udEZhY2VDQ1cgPyBEM0RSU19TVEVOQ0lMUEFT
UyA6IEQzRFJTX0NDV19TVEVOQ0lMUEFTUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsX2QzZDk6OkNvbnZlcnRTdGVuY2lsT3AoZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNp
bEJhY2tQYXNzRGVwdGhQYXNzKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxF
LCBGQUxTRSk7CisgICAgICAgIH0KKworICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19aV1JJVEVFTkFCTEUsIGRlcHRoU3RlbmNpbFN0YXRlLmRlcHRoTWFzayA/IFRSVUUgOiBG
QUxTRSk7CisKKyAgICAgICAgbUN1clN0ZW5jaWxSZWYgPSBzdGVuY2lsUmVmOworICAgICAgICBt
Q3VyU3RlbmNpbEJhY2tSZWYgPSBzdGVuY2lsQmFja1JlZjsKKyAgICAgICAgbUN1ckZyb250RmFj
ZUNDVyA9IGZyb250RmFjZUNDVzsKKyAgICB9CisKKyAgICBtRm9yY2VTZXREZXB0aFN0ZW5jaWxT
dGF0ZSA9IGZhbHNlOworfQorCit2b2lkIFJlbmRlcmVyOTo6c2V0U2Npc3NvclJlY3RhbmdsZShj
b25zdCBnbDo6UmVjdGFuZ2xlICZzY2lzc29yLCBib29sIGVuYWJsZWQpCit7CisgICAgYm9vbCBz
Y2lzc29yQ2hhbmdlZCA9IG1Gb3JjZVNldFNjaXNzb3IgfHwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWVtY21wKCZzY2lzc29yLCAmbUN1clNjaXNzb3IsIHNpemVvZihnbDo6UmVjdGFuZ2xl
KSkgIT0gMCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkICE9IG1TY2lzc29y
RW5hYmxlZDsKKworICAgIGlmIChzY2lzc29yQ2hhbmdlZCkKKyAgICB7CisgICAgICAgIGlmIChl
bmFibGVkKQorICAgICAgICB7CisgICAgICAgICAgICBSRUNUIHJlY3Q7CisgICAgICAgICAgICBy
ZWN0LmxlZnQgPSBnbDo6Y2xhbXAoc2Npc3Nvci54LCAwLCBzdGF0aWNfY2FzdDxpbnQ+KG1SZW5k
ZXJUYXJnZXREZXNjLndpZHRoKSk7CisgICAgICAgICAgICByZWN0LnRvcCA9IGdsOjpjbGFtcChz
Y2lzc29yLnksIDAsIHN0YXRpY19jYXN0PGludD4obVJlbmRlclRhcmdldERlc2MuaGVpZ2h0KSk7
CisgICAgICAgICAgICByZWN0LnJpZ2h0ID0gZ2w6OmNsYW1wKHNjaXNzb3IueCArIHNjaXNzb3Iu
d2lkdGgsIDAsIHN0YXRpY19jYXN0PGludD4obVJlbmRlclRhcmdldERlc2Mud2lkdGgpKTsKKyAg
ICAgICAgICAgIHJlY3QuYm90dG9tID0gZ2w6OmNsYW1wKHNjaXNzb3IueSArIHNjaXNzb3IuaGVp
Z2h0LCAwLCBzdGF0aWNfY2FzdDxpbnQ+KG1SZW5kZXJUYXJnZXREZXNjLmhlaWdodCkpOworICAg
ICAgICAgICAgbURldmljZS0+U2V0U2Npc3NvclJlY3QoJnJlY3QpOworICAgICAgICB9CisKKyAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NPUlRFU1RFTkFCTEUsIGVu
YWJsZWQgPyBUUlVFIDogRkFMU0UpOworCisgICAgICAgIG1TY2lzc29yRW5hYmxlZCA9IGVuYWJs
ZWQ7CisgICAgICAgIG1DdXJTY2lzc29yID0gc2Npc3NvcjsKKyAgICB9CisKKyAgICBtRm9yY2VT
ZXRTY2lzc29yID0gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyZXI5OjpzZXRWaWV3cG9ydChjb25z
dCBnbDo6UmVjdGFuZ2xlICZ2aWV3cG9ydCwgZmxvYXQgek5lYXIsIGZsb2F0IHpGYXIsIEdMZW51
bSBkcmF3TW9kZSwgR0xlbnVtIGZyb250RmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGlnbm9yZVZpZXdwb3J0KQoreworICAgIGdsOjpSZWN0YW5nbGUgYWN0dWFsVmlld3Bv
cnQgPSB2aWV3cG9ydDsKKyAgICBmbG9hdCBhY3R1YWxaTmVhciA9IGdsOjpjbGFtcDAxKHpOZWFy
KTsKKyAgICBmbG9hdCBhY3R1YWxaRmFyID0gZ2w6OmNsYW1wMDEoekZhcik7CisgICAgaWYgKGln
bm9yZVZpZXdwb3J0KQorICAgIHsKKyAgICAgICAgYWN0dWFsVmlld3BvcnQueCA9IDA7CisgICAg
ICAgIGFjdHVhbFZpZXdwb3J0LnkgPSAwOworICAgICAgICBhY3R1YWxWaWV3cG9ydC53aWR0aCA9
IG1SZW5kZXJUYXJnZXREZXNjLndpZHRoOworICAgICAgICBhY3R1YWxWaWV3cG9ydC5oZWlnaHQg
PSBtUmVuZGVyVGFyZ2V0RGVzYy5oZWlnaHQ7CisgICAgICAgIGFjdHVhbFpOZWFyID0gMC4wZjsK
KyAgICAgICAgYWN0dWFsWkZhciA9IDEuMGY7CisgICAgfQorCisgICAgRDNEVklFV1BPUlQ5IGR4
Vmlld3BvcnQ7CisgICAgZHhWaWV3cG9ydC5YID0gZ2w6OmNsYW1wKGFjdHVhbFZpZXdwb3J0Lngs
IDAsIHN0YXRpY19jYXN0PGludD4obVJlbmRlclRhcmdldERlc2Mud2lkdGgpKTsKKyAgICBkeFZp
ZXdwb3J0LlkgPSBnbDo6Y2xhbXAoYWN0dWFsVmlld3BvcnQueSwgMCwgc3RhdGljX2Nhc3Q8aW50
PihtUmVuZGVyVGFyZ2V0RGVzYy5oZWlnaHQpKTsKKyAgICBkeFZpZXdwb3J0LldpZHRoID0gZ2w6
OmNsYW1wKGFjdHVhbFZpZXdwb3J0LndpZHRoLCAwLCBzdGF0aWNfY2FzdDxpbnQ+KG1SZW5kZXJU
YXJnZXREZXNjLndpZHRoKSAtIHN0YXRpY19jYXN0PGludD4oZHhWaWV3cG9ydC5YKSk7CisgICAg
ZHhWaWV3cG9ydC5IZWlnaHQgPSBnbDo6Y2xhbXAoYWN0dWFsVmlld3BvcnQuaGVpZ2h0LCAwLCBz
dGF0aWNfY2FzdDxpbnQ+KG1SZW5kZXJUYXJnZXREZXNjLmhlaWdodCkgLSBzdGF0aWNfY2FzdDxp
bnQ+KGR4Vmlld3BvcnQuWSkpOworICAgIGR4Vmlld3BvcnQuTWluWiA9IGFjdHVhbFpOZWFyOwor
ICAgIGR4Vmlld3BvcnQuTWF4WiA9IGFjdHVhbFpGYXI7CisKKyAgICBpZiAoZHhWaWV3cG9ydC5X
aWR0aCA8PSAwIHx8IGR4Vmlld3BvcnQuSGVpZ2h0IDw9IDApCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7ICAgLy8gTm90aGluZyB0byByZW5kZXIKKyAgICB9CisKKyAgICBmbG9hdCBkZXB0
aEZyb250ID0gIWdsOjpJc1RyaWFuZ2xlTW9kZShkcmF3TW9kZSkgPyAwLjBmIDogKGZyb250RmFj
ZSA9PSBHTF9DQ1cgPyAxLjBmIDogLTEuMGYpOworCisgICAgYm9vbCB2aWV3cG9ydENoYW5nZWQg
PSBtRm9yY2VTZXRWaWV3cG9ydCB8fCBtZW1jbXAoJmFjdHVhbFZpZXdwb3J0LCAmbUN1clZpZXdw
b3J0LCBzaXplb2YoZ2w6OlJlY3RhbmdsZSkpICE9IDAgfHwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFjdHVhbFpOZWFyICE9IG1DdXJOZWFyIHx8IGFjdHVhbFpGYXIgIT0gbUN1ckZhciB8
fCBtQ3VyRGVwdGhGcm9udCAhPSBkZXB0aEZyb250OworICAgIGlmICh2aWV3cG9ydENoYW5nZWQp
CisgICAgeworICAgICAgICBtRGV2aWNlLT5TZXRWaWV3cG9ydCgmZHhWaWV3cG9ydCk7CisKKyAg
ICAgICAgbUN1clZpZXdwb3J0ID0gYWN0dWFsVmlld3BvcnQ7CisgICAgICAgIG1DdXJOZWFyID0g
YWN0dWFsWk5lYXI7CisgICAgICAgIG1DdXJGYXIgPSBhY3R1YWxaRmFyOworICAgICAgICBtQ3Vy
RGVwdGhGcm9udCA9IGRlcHRoRnJvbnQ7CisKKyAgICAgICAgZHhfVmVydGV4Q29uc3RhbnRzIHZj
ID0gezB9OworICAgICAgICBkeF9QaXhlbENvbnN0YW50cyBwYyA9IHswfTsKKworICAgICAgICB2
Yy52aWV3QWRqdXN0WzBdID0gKGZsb2F0KSgoYWN0dWFsVmlld3BvcnQud2lkdGggLSAoaW50KWR4
Vmlld3BvcnQuV2lkdGgpICsgMiAqIChhY3R1YWxWaWV3cG9ydC54IC0gKGludClkeFZpZXdwb3J0
LlgpIC0gMSkgLyBkeFZpZXdwb3J0LldpZHRoOworICAgICAgICB2Yy52aWV3QWRqdXN0WzFdID0g
KGZsb2F0KSgoYWN0dWFsVmlld3BvcnQuaGVpZ2h0IC0gKGludClkeFZpZXdwb3J0LkhlaWdodCkg
KyAyICogKGFjdHVhbFZpZXdwb3J0LnkgLSAoaW50KWR4Vmlld3BvcnQuWSkgLSAxKSAvIGR4Vmll
d3BvcnQuSGVpZ2h0OworICAgICAgICB2Yy52aWV3QWRqdXN0WzJdID0gKGZsb2F0KWFjdHVhbFZp
ZXdwb3J0LndpZHRoIC8gZHhWaWV3cG9ydC5XaWR0aDsKKyAgICAgICAgdmMudmlld0FkanVzdFsz
XSA9IChmbG9hdClhY3R1YWxWaWV3cG9ydC5oZWlnaHQgLyBkeFZpZXdwb3J0LkhlaWdodDsKKwor
ICAgICAgICBwYy52aWV3Q29vcmRzWzBdID0gYWN0dWFsVmlld3BvcnQud2lkdGggICogMC41ZjsK
KyAgICAgICAgcGMudmlld0Nvb3Jkc1sxXSA9IGFjdHVhbFZpZXdwb3J0LmhlaWdodCAqIDAuNWY7
CisgICAgICAgIHBjLnZpZXdDb29yZHNbMl0gPSBhY3R1YWxWaWV3cG9ydC54ICsgKGFjdHVhbFZp
ZXdwb3J0LndpZHRoICAqIDAuNWYpOworICAgICAgICBwYy52aWV3Q29vcmRzWzNdID0gYWN0dWFs
Vmlld3BvcnQueSArIChhY3R1YWxWaWV3cG9ydC5oZWlnaHQgKiAwLjVmKTsKKworICAgICAgICBw
Yy5kZXB0aEZyb250WzBdID0gKGFjdHVhbFpGYXIgLSBhY3R1YWxaTmVhcikgKiAwLjVmOworICAg
ICAgICBwYy5kZXB0aEZyb250WzFdID0gKGFjdHVhbFpOZWFyICsgYWN0dWFsWkZhcikgKiAwLjVm
OworICAgICAgICBwYy5kZXB0aEZyb250WzJdID0gZGVwdGhGcm9udDsKKworICAgICAgICB2Yy5k
ZXB0aFJhbmdlWzBdID0gYWN0dWFsWk5lYXI7CisgICAgICAgIHZjLmRlcHRoUmFuZ2VbMV0gPSBh
Y3R1YWxaRmFyOworICAgICAgICB2Yy5kZXB0aFJhbmdlWzJdID0gYWN0dWFsWkZhciAtIGFjdHVh
bFpOZWFyOworCisgICAgICAgIHBjLmRlcHRoUmFuZ2VbMF0gPSBhY3R1YWxaTmVhcjsKKyAgICAg
ICAgcGMuZGVwdGhSYW5nZVsxXSA9IGFjdHVhbFpGYXI7CisgICAgICAgIHBjLmRlcHRoUmFuZ2Vb
Ml0gPSBhY3R1YWxaRmFyIC0gYWN0dWFsWk5lYXI7CisKKyAgICAgICAgaWYgKG1lbWNtcCgmdmMs
ICZtVmVydGV4Q29uc3RhbnRzLCBzaXplb2YoZHhfVmVydGV4Q29uc3RhbnRzKSkgIT0gMCkKKyAg
ICAgICAgeworICAgICAgICAgICAgbVZlcnRleENvbnN0YW50cyA9IHZjOworICAgICAgICAgICAg
bUR4VW5pZm9ybXNEaXJ0eSA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAobWVtY21w
KCZwYywgJm1QaXhlbENvbnN0YW50cywgc2l6ZW9mKGR4X1BpeGVsQ29uc3RhbnRzKSkgIT0gMCkK
KyAgICAgICAgeworICAgICAgICAgICAgbVBpeGVsQ29uc3RhbnRzID0gcGM7CisgICAgICAgICAg
ICBtRHhVbmlmb3Jtc0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1Gb3Jj
ZVNldFZpZXdwb3J0ID0gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVuZGVy
ZXI5OjphcHBseVByaW1pdGl2ZVR5cGUoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQpCit7Cisg
ICAgc3dpdGNoIChtb2RlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfUE9JTlRTOgorICAgICAgICBt
UHJpbWl0aXZlVHlwZSA9IEQzRFBUX1BPSU5UTElTVDsKKyAgICAgICAgbVByaW1pdGl2ZUNvdW50
ID0gY291bnQ7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MSU5FUzoKKyAgICAgICAg
bVByaW1pdGl2ZVR5cGUgPSBEM0RQVF9MSU5FTElTVDsKKyAgICAgICAgbVByaW1pdGl2ZUNvdW50
ID0gY291bnQgLyAyOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTElORV9MT09QOgor
ICAgICAgICBtUHJpbWl0aXZlVHlwZSA9IEQzRFBUX0xJTkVTVFJJUDsKKyAgICAgICAgbVByaW1p
dGl2ZUNvdW50ID0gY291bnQgLSAxOyAgIC8vIEQzRCBkb2Vzbid0IHN1cHBvcnQgbGluZSBsb29w
cywgc28gd2UgZHJhdyB0aGUgbGFzdCBsaW5lIHNlcGFyYXRlbHkKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX0xJTkVfU1RSSVA6CisgICAgICAgIG1QcmltaXRpdmVUeXBlID0gRDNEUFRf
TElORVNUUklQOworICAgICAgICBtUHJpbWl0aXZlQ291bnQgPSBjb3VudCAtIDE7CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9UUklBTkdMRVM6CisgICAgICAgIG1QcmltaXRpdmVUeXBl
ID0gRDNEUFRfVFJJQU5HTEVMSVNUOworICAgICAgICBtUHJpbWl0aXZlQ291bnQgPSBjb3VudCAv
IDM7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9UUklBTkdMRV9TVFJJUDoKKyAgICAg
ICAgbVByaW1pdGl2ZVR5cGUgPSBEM0RQVF9UUklBTkdMRVNUUklQOworICAgICAgICBtUHJpbWl0
aXZlQ291bnQgPSBjb3VudCAtIDI7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9UUklB
TkdMRV9GQU46CisgICAgICAgIG1QcmltaXRpdmVUeXBlID0gRDNEUFRfVFJJQU5HTEVGQU47Cisg
ICAgICAgIG1QcmltaXRpdmVDb3VudCA9IGNvdW50IC0gMjsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgZmFs
c2UpOworICAgIH0KKworICAgIHJldHVybiBtUHJpbWl0aXZlQ291bnQgPiAwOworfQorCisKK2ds
OjpSZW5kZXJidWZmZXIgKlJlbmRlcmVyOTo6Z2V0TnVsbENvbG9yYnVmZmVyKGdsOjpSZW5kZXJi
dWZmZXIgKmRlcHRoYnVmZmVyKQoreworICAgIGlmICghZGVwdGhidWZmZXIpCisgICAgeworICAg
ICAgICBFUlIoIlVuZXhwZWN0ZWQgbnVsbCBkZXB0aGJ1ZmZlciBmb3IgZGVwdGgtb25seSBGQk8u
Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIEdMc2l6ZWkgd2lkdGggID0g
ZGVwdGhidWZmZXItPmdldFdpZHRoKCk7CisgICAgR0xzaXplaSBoZWlnaHQgPSBkZXB0aGJ1ZmZl
ci0+Z2V0SGVpZ2h0KCk7CisKKyAgICAvLyBzZWFyY2ggY2FjaGVkIG51bGxjb2xvcmJ1ZmZlcnMK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9OVUxMX0NPTE9SQlVGRkVSX0NBQ0hFX0VOVFJJ
RVM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0uYnVm
ZmVyICE9IE5VTEwgJiYKKyAgICAgICAgICAgIG1OdWxsQ29sb3JidWZmZXJDYWNoZVtpXS53aWR0
aCA9PSB3aWR0aCAmJgorICAgICAgICAgICAgbU51bGxDb2xvcmJ1ZmZlckNhY2hlW2ldLmhlaWdo
dCA9PSBoZWlnaHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1OdWxsQ29sb3JidWZmZXJDYWNo
ZVtpXS5scnVDb3VudCA9ICsrbU1heE51bGxDb2xvcmJ1ZmZlckxSVTsKKyAgICAgICAgICAgIHJl
dHVybiBtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0uYnVmZmVyOworICAgICAgICB9CisgICAgfQor
CisgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqbnVsbGJ1ZmZlciA9IG5ldyBnbDo6UmVuZGVyYnVmZmVy
KHRoaXMsIDAsIG5ldyBnbDo6Q29sb3JidWZmZXIodGhpcywgd2lkdGgsIGhlaWdodCwgR0xfTk9O
RSwgMCkpOworCisgICAgLy8gYWRkIG51bGxidWZmZXIgdG8gdGhlIGNhY2hlCisgICAgTnVsbENv
bG9yYnVmZmVyQ2FjaGVFbnRyeSAqb2xkZXN0ID0gJm1OdWxsQ29sb3JidWZmZXJDYWNoZVswXTsK
KyAgICBmb3IgKGludCBpID0gMTsgaSA8IE5VTV9OVUxMX0NPTE9SQlVGRkVSX0NBQ0hFX0VOVFJJ
RVM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0ubHJ1
Q291bnQgPCBvbGRlc3QtPmxydUNvdW50KQorICAgICAgICB7CisgICAgICAgICAgICBvbGRlc3Qg
PSAmbU51bGxDb2xvcmJ1ZmZlckNhY2hlW2ldOworICAgICAgICB9CisgICAgfQorCisgICAgZGVs
ZXRlIG9sZGVzdC0+YnVmZmVyOworICAgIG9sZGVzdC0+YnVmZmVyID0gbnVsbGJ1ZmZlcjsKKyAg
ICBvbGRlc3QtPmxydUNvdW50ID0gKyttTWF4TnVsbENvbG9yYnVmZmVyTFJVOworICAgIG9sZGVz
dC0+d2lkdGggPSB3aWR0aDsKKyAgICBvbGRlc3QtPmhlaWdodCA9IGhlaWdodDsKKworICAgIHJl
dHVybiBudWxsYnVmZmVyOworfQorCitib29sIFJlbmRlcmVyOTo6YXBwbHlSZW5kZXJUYXJnZXQo
Z2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlcikKK3sKKyAgICAvLyBpZiB0aGVyZSBpcyBubyBj
b2xvciBhdHRhY2htZW50IHdlIG11c3Qgc3ludGhlc2l6ZSBhIE5VTEwgY29sb3JhdHRhY2htZW50
CisgICAgLy8gdG8ga2VlcCB0aGUgRDNEIHJ1bnRpbWUgaGFwcHkuICBUaGlzIHNob3VsZCBvbmx5
IGJlIHBvc3NpYmxlIGlmIGRlcHRoIHRleHR1cmluZy4KKyAgICBnbDo6UmVuZGVyYnVmZmVyICpy
ZW5kZXJidWZmZXJPYmplY3QgPSBOVUxMOworICAgIGlmIChmcmFtZWJ1ZmZlci0+Z2V0Q29sb3Ji
dWZmZXJUeXBlKDApICE9IEdMX05PTkUpCisgICAgeworICAgICAgICByZW5kZXJidWZmZXJPYmpl
Y3QgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoMCk7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIHJlbmRlcmJ1ZmZlck9iamVjdCA9IGdldE51bGxDb2xvcmJ1ZmZlcihmcmFt
ZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKSk7CisgICAgfQorICAgIGlmICghcmVuZGVyYnVmZmVy
T2JqZWN0KQorICAgIHsKKyAgICAgICAgRVJSKCJ1bmFibGUgdG8gbG9jYXRlIHJlbmRlcmJ1ZmZl
ciBmb3IgRkJPLiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBy
ZW5kZXJUYXJnZXRDaGFuZ2VkID0gZmFsc2U7CisgICAgdW5zaWduZWQgaW50IHJlbmRlclRhcmdl
dFNlcmlhbCA9IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0U2VyaWFsKCk7CisgICAgaWYgKHJlbmRl
clRhcmdldFNlcmlhbCAhPSBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbCkKKyAgICB7CisgICAg
ICAgIC8vIEFwcGx5IHRoZSByZW5kZXIgdGFyZ2V0IG9uIHRoZSBkZXZpY2UKKyAgICAgICAgSURp
cmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldFN1cmZhY2UgPSBOVUxMOworCisgICAgICAgIFJl
bmRlclRhcmdldCAqcmVuZGVyVGFyZ2V0ID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJU
YXJnZXQoKTsKKyAgICAgICAgaWYgKHJlbmRlclRhcmdldCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmVuZGVyVGFyZ2V0U3VyZmFjZSA9IFJlbmRlclRhcmdldDk6Om1ha2VSZW5kZXJUYXJnZXQ5
KHJlbmRlclRhcmdldCktPmdldFN1cmZhY2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgh
cmVuZGVyVGFyZ2V0U3VyZmFjZSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJyZW5kZXIg
dGFyZ2V0IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7ICAgLy8gQ29udGV4dCBtdXN0IGJlIGxvc3QKKyAgICAgICAgfQorCisgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCByZW5kZXJUYXJnZXRTdXJmYWNlKTsKKyAgICAgICAg
cmVuZGVyVGFyZ2V0U3VyZmFjZS0+UmVsZWFzZSgpOworCisgICAgICAgIG1BcHBsaWVkUmVuZGVy
VGFyZ2V0U2VyaWFsID0gcmVuZGVyVGFyZ2V0U2VyaWFsOworICAgICAgICByZW5kZXJUYXJnZXRD
aGFuZ2VkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBnbDo6UmVuZGVyYnVmZmVyICpkZXB0aFN0ZW5j
aWwgPSBOVUxMOworICAgIHVuc2lnbmVkIGludCBkZXB0aGJ1ZmZlclNlcmlhbCA9IDA7CisgICAg
dW5zaWduZWQgaW50IHN0ZW5jaWxidWZmZXJTZXJpYWwgPSAwOworICAgIGlmIChmcmFtZWJ1ZmZl
ci0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKKyAgICB7CisgICAgICAgIGRlcHRo
U3RlbmNpbCA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOworICAgICAgICBpZiAoIWRl
cHRoU3RlbmNpbCkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJEZXB0aCBzdGVuY2lsIHBv
aW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKworICAgICAgICBkZXB0aGJ1ZmZlclNlcmlhbCA9IGRlcHRoU3RlbmNpbC0+Z2V0
U2VyaWFsKCk7CisgICAgfQorICAgIGVsc2UgaWYgKGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVm
ZmVyVHlwZSgpICE9IEdMX05PTkUpCisgICAgeworICAgICAgICBkZXB0aFN0ZW5jaWwgPSBmcmFt
ZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOworICAgICAgICBpZiAoIWRlcHRoU3RlbmNpbCkK
KyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJEZXB0aCBzdGVuY2lsIHBvaW50ZXIgdW5leHBl
Y3RlZGx5IG51bGwuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKwor
ICAgICAgICBzdGVuY2lsYnVmZmVyU2VyaWFsID0gZGVwdGhTdGVuY2lsLT5nZXRTZXJpYWwoKTsK
KyAgICB9CisKKyAgICBpZiAoZGVwdGhidWZmZXJTZXJpYWwgIT0gbUFwcGxpZWREZXB0aGJ1ZmZl
clNlcmlhbCB8fAorICAgICAgICBzdGVuY2lsYnVmZmVyU2VyaWFsICE9IG1BcHBsaWVkU3RlbmNp
bGJ1ZmZlclNlcmlhbCB8fAorICAgICAgICAhbURlcHRoU3RlbmNpbEluaXRpYWxpemVkKQorICAg
IHsKKyAgICAgICAgdW5zaWduZWQgaW50IGRlcHRoU2l6ZSA9IDA7CisgICAgICAgIHVuc2lnbmVk
IGludCBzdGVuY2lsU2l6ZSA9IDA7CisKKyAgICAgICAgLy8gQXBwbHkgdGhlIGRlcHRoIHN0ZW5j
aWwgb24gdGhlIGRldmljZQorICAgICAgICBpZiAoZGVwdGhTdGVuY2lsKQorICAgICAgICB7Cisg
ICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsU3VyZmFjZSA9IE5VTEw7
CisgICAgICAgICAgICBSZW5kZXJUYXJnZXQgKmRlcHRoU3RlbmNpbFJlbmRlclRhcmdldCA9IGRl
cHRoU3RlbmNpbC0+Z2V0RGVwdGhTdGVuY2lsKCk7CisKKyAgICAgICAgICAgIGlmIChkZXB0aFN0
ZW5jaWxSZW5kZXJUYXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGVwdGhT
dGVuY2lsU3VyZmFjZSA9IFJlbmRlclRhcmdldDk6Om1ha2VSZW5kZXJUYXJnZXQ5KGRlcHRoU3Rl
bmNpbFJlbmRlclRhcmdldCktPmdldFN1cmZhY2UoKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKCFkZXB0aFN0ZW5jaWxTdXJmYWNlKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIEVSUigiZGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBDb250ZXh0IG11c3QgYmUgbG9zdAor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtRGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJm
YWNlKGRlcHRoU3RlbmNpbFN1cmZhY2UpOworICAgICAgICAgICAgZGVwdGhTdGVuY2lsU3VyZmFj
ZS0+UmVsZWFzZSgpOworCisgICAgICAgICAgICBkZXB0aFNpemUgPSBkZXB0aFN0ZW5jaWwtPmdl
dERlcHRoU2l6ZSgpOworICAgICAgICAgICAgc3RlbmNpbFNpemUgPSBkZXB0aFN0ZW5jaWwtPmdl
dFN0ZW5jaWxTaXplKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgICBtRGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKE5VTEwpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKCFtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgfHwgZGVwdGhTaXplICE9
IG1DdXJEZXB0aFNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1DdXJEZXB0aFNpemUgPSBk
ZXB0aFNpemU7CisgICAgICAgICAgICBtRm9yY2VTZXRSYXN0ZXJTdGF0ZSA9IHRydWU7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoIW1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCB8fCBzdGVuY2ls
U2l6ZSAhPSBtQ3VyU3RlbmNpbFNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1DdXJTdGVu
Y2lsU2l6ZSA9IHN0ZW5jaWxTaXplOworICAgICAgICAgICAgbUZvcmNlU2V0RGVwdGhTdGVuY2ls
U3RhdGUgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgbUFwcGxpZWREZXB0aGJ1ZmZlclNl
cmlhbCA9IGRlcHRoYnVmZmVyU2VyaWFsOworICAgICAgICBtQXBwbGllZFN0ZW5jaWxidWZmZXJT
ZXJpYWwgPSBzdGVuY2lsYnVmZmVyU2VyaWFsOworICAgICAgICBtRGVwdGhTdGVuY2lsSW5pdGlh
bGl6ZWQgPSB0cnVlOworICAgIH0KKworICAgIGlmIChyZW5kZXJUYXJnZXRDaGFuZ2VkIHx8ICFt
UmVuZGVyVGFyZ2V0RGVzY0luaXRpYWxpemVkKQorICAgIHsKKyAgICAgICAgbUZvcmNlU2V0U2Np
c3NvciA9IHRydWU7CisgICAgICAgIG1Gb3JjZVNldFZpZXdwb3J0ID0gdHJ1ZTsKKworICAgICAg
ICBtUmVuZGVyVGFyZ2V0RGVzYy53aWR0aCA9IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0V2lkdGgo
KTsKKyAgICAgICAgbVJlbmRlclRhcmdldERlc2MuaGVpZ2h0ID0gcmVuZGVyYnVmZmVyT2JqZWN0
LT5nZXRIZWlnaHQoKTsKKyAgICAgICAgbVJlbmRlclRhcmdldERlc2MuZm9ybWF0ID0gcmVuZGVy
YnVmZmVyT2JqZWN0LT5nZXRBY3R1YWxGb3JtYXQoKTsKKyAgICAgICAgbVJlbmRlclRhcmdldERl
c2NJbml0aWFsaXplZCA9IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0dM
ZW51bSBSZW5kZXJlcjk6OmFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5LCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0ZXNbXSwgR0xpbnQg
Zmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQoreworICAgIFRyYW5zbGF0
ZWRBdHRyaWJ1dGUgYXR0cmlidXRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICBHTGVu
dW0gZXJyID0gbVZlcnRleERhdGFNYW5hZ2VyLT5wcmVwYXJlVmVydGV4RGF0YSh2ZXJ0ZXhBdHRy
aWJ1dGVzLCBwcm9ncmFtQmluYXJ5LCBmaXJzdCwgY291bnQsIGF0dHJpYnV0ZXMsIGluc3RhbmNl
cyk7CisgICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKKyAgICB7CisgICAgICAgIHJldHVybiBl
cnI7CisgICAgfQorICAgIAorICAgIHJldHVybiBtVmVydGV4RGVjbGFyYXRpb25DYWNoZS5hcHBs
eURlY2xhcmF0aW9uKG1EZXZpY2UsIGF0dHJpYnV0ZXMsIHByb2dyYW1CaW5hcnksIGluc3RhbmNl
cywgJm1SZXBlYXREcmF3KTsKK30KKworLy8gQXBwbGllcyB0aGUgaW5kaWNlcyBhbmQgZWxlbWVu
dCBhcnJheSBiaW5kaW5ncyB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKK0dMZW51bSBSZW5kZXJl
cjk6OmFwcGx5SW5kZXhCdWZmZXIoY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICpl
bGVtZW50QXJyYXlCdWZmZXIsIEdMc2l6ZWkgY291bnQsIEdMZW51bSBtb2RlLCBHTGVudW0gdHlw
ZSwgVHJhbnNsYXRlZEluZGV4RGF0YSAqaW5kZXhJbmZvKQoreworICAgIEdMZW51bSBlcnIgPSBt
SW5kZXhEYXRhTWFuYWdlci0+cHJlcGFyZUluZGV4RGF0YSh0eXBlLCBjb3VudCwgZWxlbWVudEFy
cmF5QnVmZmVyLCBpbmRpY2VzLCBpbmRleEluZm8pOworCisgICAgaWYgKGVyciA9PSBHTF9OT19F
UlJPUikKKyAgICB7CisgICAgICAgIC8vIERpcmVjdGx5IGJpbmRpbmcgdGhlIHN0b3JhZ2UgYnVm
ZmVyIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGQzZDkKKyAgICAgICAgQVNTRVJUKGluZGV4SW5mby0+
c3RvcmFnZSA9PSBOVUxMKTsKKworICAgICAgICBpZiAoaW5kZXhJbmZvLT5zZXJpYWwgIT0gbUFw
cGxpZWRJQlNlcmlhbCkKKyAgICAgICAgeworICAgICAgICAgICAgSW5kZXhCdWZmZXI5KiBpbmRl
eEJ1ZmZlciA9IEluZGV4QnVmZmVyOTo6bWFrZUluZGV4QnVmZmVyOShpbmRleEluZm8tPmluZGV4
QnVmZmVyKTsKKworICAgICAgICAgICAgbURldmljZS0+U2V0SW5kaWNlcyhpbmRleEJ1ZmZlci0+
Z2V0QnVmZmVyKCkpOworICAgICAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IGluZGV4SW5mby0+
c2VyaWFsOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGVycjsKK30KKwordm9pZCBS
ZW5kZXJlcjk6OmRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkg
aW5zdGFuY2VzKQoreworICAgIHN0YXJ0U2NlbmUoKTsKKyAgICAgICAgCisgICAgaWYgKG1vZGUg
PT0gR0xfTElORV9MT09QKQorICAgIHsKKyAgICAgICAgZHJhd0xpbmVMb29wKGNvdW50LCBHTF9O
T05FLCBOVUxMLCAwLCBOVUxMKTsKKyAgICB9CisgICAgZWxzZSBpZiAoaW5zdGFuY2VzID4gMCkK
KyAgICB7CisgICAgICAgIFN0YXRpY0luZGV4QnVmZmVySW50ZXJmYWNlICpjb3VudGluZ0lCID0g
bUluZGV4RGF0YU1hbmFnZXItPmdldENvdW50aW5nSW5kaWNlcyhjb3VudCk7CisgICAgICAgIGlm
IChjb3VudGluZ0lCKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobUFwcGxpZWRJQlNlcmlh
bCAhPSBjb3VudGluZ0lCLT5nZXRTZXJpYWwoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBJbmRleEJ1ZmZlcjkgKmluZGV4QnVmZmVyID0gSW5kZXhCdWZmZXI5OjptYWtlSW5kZXhC
dWZmZXI5KGNvdW50aW5nSUItPmdldEluZGV4QnVmZmVyKCkpOworCisgICAgICAgICAgICAgICAg
bURldmljZS0+U2V0SW5kaWNlcyhpbmRleEJ1ZmZlci0+Z2V0QnVmZmVyKCkpOworICAgICAgICAg
ICAgICAgIG1BcHBsaWVkSUJTZXJpYWwgPSBjb3VudGluZ0lCLT5nZXRTZXJpYWwoKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtUmVwZWF0RHJhdzsg
aSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EZXZpY2UtPkRyYXdJbmRleGVk
UHJpbWl0aXZlKG1QcmltaXRpdmVUeXBlLCAwLCAwLCBjb3VudCwgMCwgbVByaW1pdGl2ZUNvdW50
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBhIGNvdW50aW5nIGluZGV4IGJ1ZmZlciBm
b3IgZ2xEcmF3QXJyYXlzSW5zdGFuY2VkLiIpOworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlICAgLy8gUmVn
dWxhciBjYXNlCisgICAgeworICAgICAgICBtRGV2aWNlLT5EcmF3UHJpbWl0aXZlKG1QcmltaXRp
dmVUeXBlLCAwLCBtUHJpbWl0aXZlQ291bnQpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJlcjk6
OmRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNv
bnN0IEdMdm9pZCAqaW5kaWNlcywgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyLCBjb25z
dCBUcmFuc2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8sIEdMc2l6ZWkgLyppbnN0YW5jZXMqLykK
K3sKKyAgICBzdGFydFNjZW5lKCk7CisKKyAgICBpZiAobW9kZSA9PSBHTF9QT0lOVFMpCisgICAg
eworICAgICAgICBkcmF3SW5kZXhlZFBvaW50cyhjb3VudCwgdHlwZSwgaW5kaWNlcywgaW5kZXhJ
bmZvLm1pbkluZGV4LCBlbGVtZW50QXJyYXlCdWZmZXIpOworICAgIH0KKyAgICBlbHNlIGlmICht
b2RlID09IEdMX0xJTkVfTE9PUCkKKyAgICB7CisgICAgICAgIGRyYXdMaW5lTG9vcChjb3VudCwg
dHlwZSwgaW5kaWNlcywgaW5kZXhJbmZvLm1pbkluZGV4LCBlbGVtZW50QXJyYXlCdWZmZXIpOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1SZXBl
YXREcmF3OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMc2l6ZWkgdmVydGV4Q291bnQg
PSBpbmRleEluZm8ubWF4SW5kZXggLSBpbmRleEluZm8ubWluSW5kZXggKyAxOworICAgICAgICAg
ICAgbURldmljZS0+RHJhd0luZGV4ZWRQcmltaXRpdmUobVByaW1pdGl2ZVR5cGUsIC0oSU5UKWlu
ZGV4SW5mby5taW5JbmRleCwgaW5kZXhJbmZvLm1pbkluZGV4LCB2ZXJ0ZXhDb3VudCwgaW5kZXhJ
bmZvLnN0YXJ0SW5kZXgsIG1QcmltaXRpdmVDb3VudCk7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3ZvaWQgUmVuZGVyZXI5OjpkcmF3TGluZUxvb3AoR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUs
IGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgaW50IG1pbkluZGV4LCBnbDo6QnVmZmVyICplbGVtZW50
QXJyYXlCdWZmZXIpCit7CisgICAgLy8gR2V0IHRoZSByYXcgaW5kaWNlcyBmb3IgYW4gaW5kZXhl
ZCBkcmF3CisgICAgaWYgKHR5cGUgIT0gR0xfTk9ORSAmJiBlbGVtZW50QXJyYXlCdWZmZXIpCisg
ICAgeworICAgICAgICBnbDo6QnVmZmVyICppbmRleEJ1ZmZlciA9IGVsZW1lbnRBcnJheUJ1ZmZl
cjsKKyAgICAgICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGluZGV4QnVmZmVyLT5nZXRTdG9y
YWdlKCk7CisgICAgICAgIGludHB0cl90IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KGluZGljZXMpOworICAgICAgICBpbmRpY2VzID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0
ZSo+KHN0b3JhZ2UtPmdldERhdGEoKSkgKyBvZmZzZXQ7CisgICAgfQorCisgICAgdW5zaWduZWQg
aW50IHN0YXJ0SW5kZXggPSAwOworCisgICAgaWYgKGdldDMyQml0SW5kZXhTdXBwb3J0KCkpCisg
ICAgeworICAgICAgICBpZiAoIW1MaW5lTG9vcElCKQorICAgICAgICB7CisgICAgICAgICAgICBt
TGluZUxvb3BJQiA9IG5ldyBTdHJlYW1pbmdJbmRleEJ1ZmZlckludGVyZmFjZSh0aGlzKTsKKyAg
ICAgICAgICAgIGlmICghbUxpbmVMb29wSUItPnJlc2VydmVCdWZmZXJTcGFjZShJTklUSUFMX0lO
REVYX0JVRkZFUl9TSVpFLCBHTF9VTlNJR05FRF9JTlQpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGRlbGV0ZSBtTGluZUxvb3BJQjsKKyAgICAgICAgICAgICAgICBtTGluZUxvb3BJ
QiA9IE5VTEw7CisKKyAgICAgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSAzMi1i
aXQgbG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oY291bnQp
ICsgMSA+IChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpIC8gc2l6ZW9m
KHVuc2lnbmVkIGludCkpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBj
cmVhdGUgYSAzMi1iaXQgbG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUCwgdG9v
IG1hbnkgaW5kaWNlcyByZXF1aXJlZC4iKTsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBDaGVja2VkIGJ5IFJl
bmRlcmVyOTo6YXBwbHlQcmltaXRpdmVUeXBlCisgICAgICAgIEFTU0VSVChjb3VudCA+PSAwKTsK
KworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgc3BhY2VOZWVkZWQgPSAoc3RhdGljX2Nhc3Q8
dW5zaWduZWQgaW50Pihjb3VudCkgKyAxKSAqIHNpemVvZih1bnNpZ25lZCBpbnQpOworICAgICAg
ICBpZiAoIW1MaW5lTG9vcElCLT5yZXNlcnZlQnVmZmVyU3BhY2Uoc3BhY2VOZWVkZWQsIEdMX1VO
U0lHTkVEX0lOVCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiQ291bGQgbm90IHJlc2Vy
dmUgZW5vdWdoIHNwYWNlIGluIGxvb3BpbmcgaW5kZXggYnVmZmVyIGZvciBHTF9MSU5FX0xPT1Au
Iik7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCogbWFwcGVkTWVtb3J5ID0gTlVMTDsKKyAgICAgICAgdW5z
aWduZWQgaW50IG9mZnNldCA9IDA7CisgICAgICAgIGlmICghbUxpbmVMb29wSUItPm1hcEJ1ZmZl
cihzcGFjZU5lZWRlZCwgJm1hcHBlZE1lbW9yeSwgJm9mZnNldCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEVSUigiQ291bGQgbm90IG1hcCBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4i
KTsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAg
ICAgIH0KKworICAgICAgICBzdGFydEluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihv
ZmZzZXQpIC8gNDsKKyAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhID0gcmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZCBpbnQqPihtYXBwZWRNZW1vcnkpOworCisgICAgICAgIHN3aXRjaCAodHlwZSkK
KyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfTk9ORTogICAvLyBOb24taW5kZXhlZCBkcmF3
CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgZGF0YVtpXSA9IGk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBkYXRhW2NvdW50XSA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19j
YXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKVtpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpWzBd
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoK
KyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQq
PihpbmRpY2VzKVtpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRhdGFbY291bnRdID0g
c3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVswXTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVtpXTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1
aW50Kj4oaW5kaWNlcylbMF07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtTGluZUxvb3BJQi0+
dW5tYXBCdWZmZXIoKSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgdW5t
YXAgaW5kZXggYnVmZmVyIGZvciBHTF9MSU5FX0xPT1AuIik7CisgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIGlmICghbUxpbmVMb29wSUIpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1MaW5lTG9vcElCID0gbmV3IFN0cmVhbWluZ0luZGV4QnVmZmVySW50ZXJmYWNlKHRoaXMpOwor
ICAgICAgICAgICAgaWYgKCFtTGluZUxvb3BJQi0+cmVzZXJ2ZUJ1ZmZlclNwYWNlKElOSVRJQUxf
SU5ERVhfQlVGRkVSX1NJWkUsIEdMX1VOU0lHTkVEX1NIT1JUKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBkZWxldGUgbUxpbmVMb29wSUI7CisgICAgICAgICAgICAgICAgbUxpbmVM
b29wSUIgPSBOVUxMOworCisgICAgICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGEg
MTYtYml0IGxvb3BpbmcgaW5kZXggYnVmZmVyIGZvciBHTF9MSU5FX0xPT1AuIik7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIENoZWNrZWQgYnkgUmVuZGVyZXI5OjphcHBseVBy
aW1pdGl2ZVR5cGUKKyAgICAgICAgQVNTRVJUKGNvdW50ID49IDApOworCisgICAgICAgIGlmIChz
dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGNvdW50KSArIDEgPiAoc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZCBzaG9ydD46Om1heCgpIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBhIDE2LWJpdCBsb29waW5n
IGluZGV4IGJ1ZmZlciBmb3IgR0xfTElORV9MT09QLCB0b28gbWFueSBpbmRpY2VzIHJlcXVpcmVk
LiIpOworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBzcGFjZU5lZWRlZCA9IChzdGF0
aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGNvdW50KSArIDEpICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0
KTsKKyAgICAgICAgaWYgKCFtTGluZUxvb3BJQi0+cmVzZXJ2ZUJ1ZmZlclNwYWNlKHNwYWNlTmVl
ZGVkLCBHTF9VTlNJR05FRF9TSE9SVCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiQ291
bGQgbm90IHJlc2VydmUgZW5vdWdoIHNwYWNlIGluIGxvb3BpbmcgaW5kZXggYnVmZmVyIGZvciBH
TF9MSU5FX0xPT1AuIik7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCogbWFwcGVkTWVtb3J5ID0gTlVMTDsK
KyAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldDsKKyAgICAgICAgaWYgKG1MaW5lTG9vcElCLT5t
YXBCdWZmZXIoc3BhY2VOZWVkZWQsICZtYXBwZWRNZW1vcnksICZvZmZzZXQpKQorICAgICAgICB7
CisgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBtYXAgaW5kZXggYnVmZmVyIGZvciBHTF9MSU5F
X0xPT1AuIik7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgICAgICB9CisKKyAgICAgICAgc3RhcnRJbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGludD4ob2Zmc2V0KSAvIDI7CisgICAgICAgIHVuc2lnbmVkIHNob3J0ICpkYXRhID0gcmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KG1hcHBlZE1lbW9yeSk7CisKKyAgICAgICAgc3dp
dGNoICh0eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9OT05FOiAgIC8vIE5vbi1p
bmRleGVkIGRyYXcKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkYXRhW2ldID0gaTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGRhdGFbY291bnRdID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkYXRhW2ld
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpW2ldOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4o
aW5kaWNlcylbMF07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX1NIT1JUOgorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25z
dCBHTHVzaG9ydCo+KGluZGljZXMpW2ldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGF0
YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpWzBdOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMp
W2ldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2Fz
dDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVswXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1M
aW5lTG9vcElCLT51bm1hcEJ1ZmZlcigpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkNv
dWxkIG5vdCB1bm1hcCBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKKyAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAobUFwcGxpZWRJQlNlcmlhbCAhPSBtTGluZUxvb3BJQi0+Z2V0U2VyaWFsKCkp
CisgICAgeworICAgICAgICBJbmRleEJ1ZmZlcjkgKmluZGV4QnVmZmVyID0gSW5kZXhCdWZmZXI5
OjptYWtlSW5kZXhCdWZmZXI5KG1MaW5lTG9vcElCLT5nZXRJbmRleEJ1ZmZlcigpKTsKKworICAg
ICAgICBtRGV2aWNlLT5TZXRJbmRpY2VzKGluZGV4QnVmZmVyLT5nZXRCdWZmZXIoKSk7CisgICAg
ICAgIG1BcHBsaWVkSUJTZXJpYWwgPSBtTGluZUxvb3BJQi0+Z2V0U2VyaWFsKCk7CisgICAgfQor
CisgICAgbURldmljZS0+RHJhd0luZGV4ZWRQcmltaXRpdmUoRDNEUFRfTElORVNUUklQLCAtbWlu
SW5kZXgsIG1pbkluZGV4LCBjb3VudCwgc3RhcnRJbmRleCwgY291bnQpOworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyB2b2lkIGRyYXdQb2ludHMoSURpcmVjdDNERGV2aWNlOSog
ZGV2aWNlLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGludCBtaW5JbmRl
eCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAg
ICB1bnNpZ25lZCBpbnQgaW5kZXhWYWx1ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oc3Rh
dGljX2Nhc3Q8Y29uc3QgVCo+KGluZGljZXMpW2ldKSAtIG1pbkluZGV4OworICAgICAgICBkZXZp
Y2UtPkRyYXdQcmltaXRpdmUoRDNEUFRfUE9JTlRMSVNULCBpbmRleFZhbHVlLCAxKTsKKyAgICB9
Cit9CisKK3ZvaWQgUmVuZGVyZXI5OjpkcmF3SW5kZXhlZFBvaW50cyhHTHNpemVpIGNvdW50LCBH
TGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBpbnQgbWluSW5kZXgsIGdsOjpCdWZm
ZXIgKmVsZW1lbnRBcnJheUJ1ZmZlcikKK3sKKyAgICAvLyBEcmF3aW5nIGluZGV4IHBvaW50IGxp
c3RzIGlzIHVuc3VwcG9ydGVkIGluIGQzZDksIGZhbGwgYmFjayB0byBhIHJlZ3VsYXIgRHJhd1By
aW1pdGl2ZSBjYWxsCisgICAgLy8gZm9yIGVhY2ggaW5kaXZpZHVhbCBwb2ludC4gVGhpcyBjYWxs
IGlzIG5vdCBleHBlY3RlZCB0byBoYXBwZW4gb2Z0ZW4uCisKKyAgICBpZiAoZWxlbWVudEFycmF5
QnVmZmVyKQorICAgIHsKKyAgICAgICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGVsZW1lbnRB
cnJheUJ1ZmZlci0+Z2V0U3RvcmFnZSgpOworICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSByZWlu
dGVycHJldF9jYXN0PGludHB0cl90PihpbmRpY2VzKTsKKyAgICAgICAgaW5kaWNlcyA9IHN0YXRp
Y19jYXN0PGNvbnN0IEdMdWJ5dGUqPihzdG9yYWdlLT5nZXREYXRhKCkpICsgb2Zmc2V0OworICAg
IH0KKworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
QllURTogIGRyYXdQb2ludHM8R0x1Ynl0ZT4obURldmljZSwgY291bnQsIGluZGljZXMsIG1pbklu
ZGV4KTsgIGJyZWFrOworICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOiBkcmF3UG9pbnRz
PEdMdXNob3J0PihtRGV2aWNlLCBjb3VudCwgaW5kaWNlcywgbWluSW5kZXgpOyBicmVhazsKKyAg
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6ICAgZHJhd1BvaW50czxHTHVpbnQ+KG1EZXZpY2Us
IGNvdW50LCBpbmRpY2VzLCBtaW5JbmRleCk7ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlcmVyOTo6YXBwbHlTaGFkZXJzKGds
OjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KQoreworICAgIHVuc2lnbmVkIGludCBwcm9n
cmFtQmluYXJ5U2VyaWFsID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2VyaWFsKCk7CisgICAgaWYgKHBy
b2dyYW1CaW5hcnlTZXJpYWwgIT0gbUFwcGxpZWRQcm9ncmFtQmluYXJ5U2VyaWFsKQorICAgIHsK
KyAgICAgICAgU2hhZGVyRXhlY3V0YWJsZSAqdmVydGV4RXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0
VmVydGV4RXhlY3V0YWJsZSgpOworICAgICAgICBTaGFkZXJFeGVjdXRhYmxlICpwaXhlbEV4ZSA9
IHByb2dyYW1CaW5hcnktPmdldFBpeGVsRXhlY3V0YWJsZSgpOworCisgICAgICAgIElEaXJlY3Qz
RFZlcnRleFNoYWRlcjkgKnZlcnRleFNoYWRlciA9IE5VTEw7CisgICAgICAgIGlmICh2ZXJ0ZXhF
eGUpIHZlcnRleFNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGU5OjptYWtlU2hhZGVyRXhlY3V0YWJs
ZTkodmVydGV4RXhlKS0+Z2V0VmVydGV4U2hhZGVyKCk7CisKKyAgICAgICAgSURpcmVjdDNEUGl4
ZWxTaGFkZXI5ICpwaXhlbFNoYWRlciA9IE5VTEw7CisgICAgICAgIGlmIChwaXhlbEV4ZSkgcGl4
ZWxTaGFkZXIgPSBTaGFkZXJFeGVjdXRhYmxlOTo6bWFrZVNoYWRlckV4ZWN1dGFibGU5KHBpeGVs
RXhlKS0+Z2V0UGl4ZWxTaGFkZXIoKTsKKworICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRl
cihwaXhlbFNoYWRlcik7CisgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlcih2ZXJ0ZXhT
aGFkZXIpOworICAgICAgICBwcm9ncmFtQmluYXJ5LT5kaXJ0eUFsbFVuaWZvcm1zKCk7CisgICAg
ICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOworCisgICAgICAgIG1BcHBsaWVkUHJvZ3JhbUJp
bmFyeVNlcmlhbCA9IHByb2dyYW1CaW5hcnlTZXJpYWw7CisgICAgfQorfQorCit2b2lkIFJlbmRl
cmVyOTo6YXBwbHlVbmlmb3JtcyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6
OlVuaWZvcm1BcnJheSAqdW5pZm9ybUFycmF5KQoreworICAgIGZvciAoc3RkOjp2ZWN0b3I8Z2w6
OlVuaWZvcm0qPjo6Y29uc3RfaXRlcmF0b3IgdWIgPSB1bmlmb3JtQXJyYXktPmJlZ2luKCksIHVl
ID0gdW5pZm9ybUFycmF5LT5lbmQoKTsgdWIgIT0gdWU7ICsrdWIpCisgICAgeworICAgICAgICBn
bDo6VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9ICp1YjsKKworICAgICAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+ZGlydHkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMZmxvYXQgKmYgPSAoR0xmbG9h
dCopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKKyAgICAgICAgICAgIEdMaW50ICppID0gKEdMaW50Kil0
YXJnZXRVbmlmb3JtLT5kYXRhOworCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0t
PnR5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoK
KyAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkU6CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9C
T09MX1ZFQzI6CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOgorICAgICAgICAgICAg
ICBjYXNlIEdMX0JPT0xfVkVDNDoKKyAgICAgICAgICAgICAgICBhcHBseVVuaWZvcm1uYnYodGFy
Z2V0VW5pZm9ybSwgaSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfRkxPQVQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZF
QzQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQzOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6CisgICAg
ICAgICAgICAgICAgYXBwbHlVbmlmb3JtbmZ2KHRhcmdldFVuaWZvcm0sIGYpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9JTlRfVkVDMjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDMzoKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9JTlRfVkVDNDoKKyAgICAgICAgICAgICAgICBhcHBseVVuaWZvcm1u
aXYodGFyZ2V0VW5pZm9ybSwgaSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIERyaXZlciB1bmlmb3JtcworICAgIGlmIChtRHhVbmlmb3Jtc0Rp
cnR5KQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKDAs
IChmbG9hdCopJm1WZXJ0ZXhDb25zdGFudHMsIHNpemVvZihkeF9WZXJ0ZXhDb25zdGFudHMpIC8g
c2l6ZW9mKGZsb2F0WzRdKSk7CisgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3Rh
bnRGKDAsIChmbG9hdCopJm1QaXhlbENvbnN0YW50cywgc2l6ZW9mKGR4X1BpeGVsQ29uc3RhbnRz
KSAvIHNpemVvZihmbG9hdFs0XSkpOworICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gZmFsc2U7
CisgICAgfQorfQorCit2b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlmb3JtbmZ2KGdsOjpVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGZsb2F0ICp2KQoreworICAgIGlmICh0YXJnZXRVbmlm
b3JtLT5wc1JlZ2lzdGVySW5kZXggPj0gMCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFBp
eGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleCwgdiwgdGFy
Z2V0VW5pZm9ybS0+cmVnaXN0ZXJDb3VudCk7CisgICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZv
cm0tPnZzUmVnaXN0ZXJJbmRleCA+PSAwKQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0VmVy
dGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleCwgdiwgdGFy
Z2V0VW5pZm9ybS0+cmVnaXN0ZXJDb3VudCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlcmVyOTo6
YXBwbHlVbmlmb3Jtbml2KGdsOjpVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGludCAq
dikKK3sKKyAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cmVnaXN0ZXJDb3VudCA8PSBNQVhfVkVS
VEVYX0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOSk7CisgICAgR0xmbG9hdCB2ZWN0b3JbTUFYX1ZFUlRF
WF9DT05TVEFOVF9WRUNUT1JTX0QzRDldWzRdOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCB0YXJnZXRVbmlmb3JtLT5yZWdpc3RlckNvdW50OyBpKyspCisgICAgeworICAgICAg
ICB2ZWN0b3JbaV1bMF0gPSAoR0xmbG9hdCl2WzQgKiBpICsgMF07CisgICAgICAgIHZlY3Rvcltp
XVsxXSA9IChHTGZsb2F0KXZbNCAqIGkgKyAxXTsKKyAgICAgICAgdmVjdG9yW2ldWzJdID0gKEdM
ZmxvYXQpdls0ICogaSArIDJdOworICAgICAgICB2ZWN0b3JbaV1bM10gPSAoR0xmbG9hdCl2WzQg
KiBpICsgM107CisgICAgfQorCisgICAgYXBwbHlVbmlmb3JtbmZ2KHRhcmdldFVuaWZvcm0sIChH
TGZsb2F0Kil2ZWN0b3IpOworfQorCit2b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlmb3JtbmJ2KGds
OjpVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGludCAqdikKK3sKKyAgICBBU1NFUlQo
dGFyZ2V0VW5pZm9ybS0+cmVnaXN0ZXJDb3VudCA8PSBNQVhfVkVSVEVYX0NPTlNUQU5UX1ZFQ1RP
UlNfRDNEOSk7CisgICAgR0xmbG9hdCB2ZWN0b3JbTUFYX1ZFUlRFWF9DT05TVEFOVF9WRUNUT1JT
X0QzRDldWzRdOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB0YXJnZXRVbmlm
b3JtLT5yZWdpc3RlckNvdW50OyBpKyspCisgICAgeworICAgICAgICB2ZWN0b3JbaV1bMF0gPSAo
dls0ICogaSArIDBdID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOworICAgICAgICB2ZWN0b3Jb
aV1bMV0gPSAodls0ICogaSArIDFdID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOworICAgICAg
ICB2ZWN0b3JbaV1bMl0gPSAodls0ICogaSArIDJdID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBm
OworICAgICAgICB2ZWN0b3JbaV1bM10gPSAodls0ICogaSArIDNdID09IEdMX0ZBTFNFKSA/IDAu
MGYgOiAxLjBmOworICAgIH0KKworICAgIGFwcGx5VW5pZm9ybW5mdih0YXJnZXRVbmlmb3JtLCAo
R0xmbG9hdCopdmVjdG9yKTsKK30KKwordm9pZCBSZW5kZXJlcjk6OmNsZWFyKGNvbnN0IGdsOjpD
bGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVy
KQoreworICAgIEQzRENPTE9SIGNvbG9yID0gRDNEQ09MT1JfQVJHQihnbDo6dW5vcm08OD4oY2xl
YXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLmFscGhhKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5yZWQp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oY2xlYXJQ
YXJhbXMuY29sb3JDbGVhclZhbHVlLmdyZWVuKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2w6OnVub3JtPDg+KGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5ibHVlKSk7
CisgICAgZmxvYXQgZGVwdGggPSBnbDo6Y2xhbXAwMShjbGVhclBhcmFtcy5kZXB0aENsZWFyVmFs
dWUpOworICAgIGludCBzdGVuY2lsID0gY2xlYXJQYXJhbXMuc3RlbmNpbENsZWFyVmFsdWUgJiAw
eDAwMDAwMEZGOworCisgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxVbm1hc2tlZCA9IDB4MDsKKyAg
ICBpZiAoKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpICYmIGZyYW1l
QnVmZmVyLT5oYXNTdGVuY2lsKCkpCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgc3RlbmNp
bFNpemUgPSBnbDo6R2V0U3RlbmNpbFNpemUoZnJhbWVCdWZmZXItPmdldFN0ZW5jaWxidWZmZXIo
KS0+Z2V0QWN0dWFsRm9ybWF0KCkpOworICAgICAgICBzdGVuY2lsVW5tYXNrZWQgPSAoMHgxIDw8
IHN0ZW5jaWxTaXplKSAtIDE7CisgICAgfQorCisgICAgYm9vbCBhbHBoYVVubWFza2VkID0gKGds
OjpHZXRBbHBoYVNpemUobVJlbmRlclRhcmdldERlc2MuZm9ybWF0KSA9PSAwKSB8fCBjbGVhclBh
cmFtcy5jb2xvck1hc2tBbHBoYTsKKworICAgIGNvbnN0IGJvb2wgbmVlZE1hc2tlZFN0ZW5jaWxD
bGVhciA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKSAmJgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGVhclBhcmFtcy5zdGVuY2ls
V3JpdGVNYXNrICYgc3RlbmNpbFVubWFza2VkKSAhPSBzdGVuY2lsVW5tYXNrZWQ7CisgICAgY29u
c3QgYm9vbCBuZWVkTWFza2VkQ29sb3JDbGVhciA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09M
T1JfQlVGRkVSX0JJVCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IShjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQgJiYgY2xlYXJQYXJhbXMuY29sb3JNYXNrR3JlZW4g
JiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhclBhcmFtcy5j
b2xvck1hc2tCbHVlICYmIGFscGhhVW5tYXNrZWQpOworCisgICAgaWYgKG5lZWRNYXNrZWRDb2xv
ckNsZWFyIHx8IG5lZWRNYXNrZWRTdGVuY2lsQ2xlYXIpCisgICAgeworICAgICAgICAvLyBTdGF0
ZSB3aGljaCBpcyBhbHRlcmVkIGluIGFsbCBwYXRocyBmcm9tIHRoaXMgcG9pbnQgdG8gdGhlIGNs
ZWFyIGNhbGwgaXMgc2F2ZWQuCisgICAgICAgIC8vIFN0YXRlIHdoaWNoIGlzIGFsdGVyZWQgaW4g
b25seSBzb21lIHBhdGhzIHdpbGwgYmUgZmxhZ2dlZCBkaXJ0eSBpbiB0aGUgY2FzZSB0aGF0Cisg
ICAgICAgIC8vICB0aGF0IHBhdGggaXMgdGFrZW4uCisgICAgICAgIEhSRVNVTFQgaHI7CisgICAg
ICAgIGlmIChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlID09IE5VTEwpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGhyID0gbURldmljZS0+QmVnaW5TdGF0ZUJsb2NrKCk7CisgICAgICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9
PSBFX09VVE9GTUVNT1JZKTsKKworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfWldSSVRFRU5BQkxFLCBGQUxTRSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19aRlVOQywgRDNEQ01QX0FMV0FZUyk7CisgICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBGQUxTRSk7CisgICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsKKyAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NP
TElEKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBVEVT
VEVOQUJMRSwgRkFMU0UpOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsKKyAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIDApOworICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOworICAg
ICAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXIoTlVMTCk7CisgICAgICAgICAgICBtRGV2
aWNlLT5TZXRWZXJ0ZXhTaGFkZXIoTlVMTCk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRGVkYo
RDNERlZGX1hZWlJIVyB8IEQzREZWRl9ESUZGVVNFKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFN0cmVhbVNvdXJjZSgwLCBOVUxMLCAwLCAwKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX1NFUEFSQVRFQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7CisgICAgICAg
ICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JPUCwgRDNE
VE9QX1NFTEVDVEFSRzEpOworICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3Rh
dGUoMCwgRDNEVFNTX0NPTE9SQVJHMSwgRDNEVEFfVEZBQ1RPUik7CisgICAgICAgICAgICBtRGV2
aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQUxQSEFPUCwgRDNEVE9QX1NFTEVD
VEFSRzEpOworICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNE
VFNTX0FMUEhBQVJHMSwgRDNEVEFfVEZBQ1RPUik7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19URVhUVVJFRkFDVE9SLCBjb2xvcik7CisgICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRU1BU0ssIDB4RkZGRkZGRkYpOwor
CisgICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsg
aSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNv
dXJjZUZyZXEoaSwgMSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGhyID0gbURldmlj
ZS0+RW5kU3RhdGVCbG9jaygmbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSk7CisgICAgICAgICAgICBB
U1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBo
ciA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChtTWFza2Vk
Q2xlYXJTYXZlZFN0YXRlICE9IE5VTEwpOworCisgICAgICAgIGlmIChtTWFza2VkQ2xlYXJTYXZl
ZFN0YXRlICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGhyID0gbU1hc2tlZENsZWFy
U2F2ZWRTdGF0ZS0+Q2FwdHVyZSgpOworICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikp
OworICAgICAgICB9CisKKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldS
SVRFRU5BQkxFLCBGQUxTRSk7CisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X1pGVU5DLCBEM0RDTVBfQUxXQVlTKTsKKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfWkVOQUJMRSwgRkFMU0UpOworICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19DVUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsKKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfRklMTE1PREUsIEQzREZJTExfU09MSUQpOworICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOworICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOwor
CisgICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkKKyAg
ICAgICAgeworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JX
UklURUVOQUJMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6
OkNvbnZlcnRDb2xvck1hc2soY2xlYXJQYXJhbXMuY29sb3JNYXNrUmVkLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhclBh
cmFtcy5jb2xvck1hc2tHcmVlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrQmx1ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrQWxwaGEpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NP
TE9SV1JJVEVFTkFCTEUsIDApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0ZW5jaWxVbm1h
c2tlZCAhPSAweDAgJiYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQp
KQorICAgICAgICB7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19T
VEVOQ0lMRU5BQkxFLCBUUlVFKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX1RXT1NJREVEU1RFTkNJTE1PREUsIEZBTFNFKTsKKyAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxGVU5DLCBEM0RDTVBfQUxXQVlTKTsKKyAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxSRUYsIHN0ZW5jaWwp
OworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFdSSVRF
TUFTSywgY2xlYXJQYXJhbXMuc3RlbmNpbFdyaXRlTWFzayk7CisgICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRkFJTCwgRDNEU1RFTkNJTE9QX1JFUExBQ0Up
OworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFpGQUlM
LCBEM0RTVEVOQ0lMT1BfUkVQTEFDRSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19TVEVOQ0lMUEFTUywgRDNEU1RFTkNJTE9QX1JFUExBQ0UpOworICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAg
bURldmljZS0+U2V0UGl4ZWxTaGFkZXIoTlVMTCk7CisgICAgICAgIG1EZXZpY2UtPlNldFZlcnRl
eFNoYWRlcihOVUxMKTsKKyAgICAgICAgbURldmljZS0+U2V0RlZGKEQzREZWRl9YWVpSSFcpOwor
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRF
TkFCTEUsIFRSVUUpOworICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBE
M0RUU1NfQ09MT1JPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOworICAgICAgICBtRGV2aWNlLT5TZXRU
ZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JBUkcxLCBEM0RUQV9URkFDVE9SKTsKKyAg
ICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0FMUEhBT1AsIEQz
RFRPUF9TRUxFQ1RBUkcxKTsKKyAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUo
MCwgRDNEVFNTX0FMUEhBQVJHMSwgRDNEVEFfVEZBQ1RPUik7CisgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX1RFWFRVUkVGQUNUT1IsIGNvbG9yKTsKKyAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfTVVMVElTQU1QTEVNQVNLLCAweEZGRkZGRkZGKTsKKwor
ICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQor
ICAgICAgICB7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKGksIDEp
OworICAgICAgICB9CisKKyAgICAgICAgZmxvYXQgcXVhZFs0XVs0XTsgICAvLyBBIHF1YWRyaWxh
dGVyYWwgY292ZXJpbmcgdGhlIHRhcmdldCwgYWxpZ25lZCB0byBtYXRjaCB0aGUgZWRnZXMKKyAg
ICAgICAgcXVhZFswXVswXSA9IC0wLjVmOworICAgICAgICBxdWFkWzBdWzFdID0gbVJlbmRlclRh
cmdldERlc2MuaGVpZ2h0IC0gMC41ZjsKKyAgICAgICAgcXVhZFswXVsyXSA9IDAuMGY7CisgICAg
ICAgIHF1YWRbMF1bM10gPSAxLjBmOworCisgICAgICAgIHF1YWRbMV1bMF0gPSBtUmVuZGVyVGFy
Z2V0RGVzYy53aWR0aCAtIDAuNWY7CisgICAgICAgIHF1YWRbMV1bMV0gPSBtUmVuZGVyVGFyZ2V0
RGVzYy5oZWlnaHQgLSAwLjVmOworICAgICAgICBxdWFkWzFdWzJdID0gMC4wZjsKKyAgICAgICAg
cXVhZFsxXVszXSA9IDEuMGY7CisKKyAgICAgICAgcXVhZFsyXVswXSA9IC0wLjVmOworICAgICAg
ICBxdWFkWzJdWzFdID0gLTAuNWY7CisgICAgICAgIHF1YWRbMl1bMl0gPSAwLjBmOworICAgICAg
ICBxdWFkWzJdWzNdID0gMS4wZjsKKworICAgICAgICBxdWFkWzNdWzBdID0gbVJlbmRlclRhcmdl
dERlc2Mud2lkdGggLSAwLjVmOworICAgICAgICBxdWFkWzNdWzFdID0gLTAuNWY7CisgICAgICAg
IHF1YWRbM11bMl0gPSAwLjBmOworICAgICAgICBxdWFkWzNdWzNdID0gMS4wZjsKKworICAgICAg
ICBzdGFydFNjZW5lKCk7CisgICAgICAgIG1EZXZpY2UtPkRyYXdQcmltaXRpdmVVUChEM0RQVF9U
UklBTkdMRVNUUklQLCAyLCBxdWFkLCBzaXplb2YoZmxvYXRbNF0pKTsKKworICAgICAgICBpZiAo
Y2xlYXJQYXJhbXMubWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIFRSVUUpOworICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRFRU5BQkxFLCBUUlVF
KTsKKyAgICAgICAgICAgIG1EZXZpY2UtPkNsZWFyKDAsIE5VTEwsIEQzRENMRUFSX1pCVUZGRVIs
IGNvbG9yLCBkZXB0aCwgc3RlbmNpbCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobU1hc2tl
ZENsZWFyU2F2ZWRTdGF0ZSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBtTWFza2Vk
Q2xlYXJTYXZlZFN0YXRlLT5BcHBseSgpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYg
KGNsZWFyUGFyYW1zLm1hc2spCisgICAgeworICAgICAgICBEV09SRCBkeENsZWFyRmxhZ3MgPSAw
OworICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGR4Q2xlYXJGbGFncyB8PSBEM0RDTEVBUl9UQVJHRVQ7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9ERVBUSF9CVUZGRVJf
QklUKQorICAgICAgICB7CisgICAgICAgICAgICBkeENsZWFyRmxhZ3MgfD0gRDNEQ0xFQVJfWkJV
RkZFUjsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX1NURU5D
SUxfQlVGRkVSX0JJVCkKKyAgICAgICAgeworICAgICAgICAgICAgZHhDbGVhckZsYWdzIHw9IEQz
RENMRUFSX1NURU5DSUw7CisgICAgICAgIH0KKworICAgICAgICBtRGV2aWNlLT5DbGVhcigwLCBO
VUxMLCBkeENsZWFyRmxhZ3MsIGNvbG9yLCBkZXB0aCwgc3RlbmNpbCk7CisgICAgfQorfQorCit2
b2lkIFJlbmRlcmVyOTo6bWFya0FsbFN0YXRlRGlydHkoKQoreworICAgIG1BcHBsaWVkUmVuZGVy
VGFyZ2V0U2VyaWFsID0gMDsKKyAgICBtQXBwbGllZERlcHRoYnVmZmVyU2VyaWFsID0gMDsKKyAg
ICBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwgPSAwOworICAgIG1EZXB0aFN0ZW5jaWxJbml0
aWFsaXplZCA9IGZhbHNlOworICAgIG1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgPSBmYWxz
ZTsKKworICAgIG1Gb3JjZVNldERlcHRoU3RlbmNpbFN0YXRlID0gdHJ1ZTsKKyAgICBtRm9yY2VT
ZXRSYXN0ZXJTdGF0ZSA9IHRydWU7CisgICAgbUZvcmNlU2V0U2Npc3NvciA9IHRydWU7CisgICAg
bUZvcmNlU2V0Vmlld3BvcnQgPSB0cnVlOworICAgIG1Gb3JjZVNldEJsZW5kU3RhdGUgPSB0cnVl
OworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05f
TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOyBpKyspCisgICAgeworICAgICAgICBtRm9y
Y2VTZXRWZXJ0ZXhTYW1wbGVyU3RhdGVzW2ldID0gdHJ1ZTsKKyAgICAgICAgbUN1clZlcnRleFRl
eHR1cmVTZXJpYWxzW2ldID0gMDsKKyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IGkrKykKKyAgICB7CisgICAgICAgIG1G
b3JjZVNldFBpeGVsU2FtcGxlclN0YXRlc1tpXSA9IHRydWU7CisgICAgICAgIG1DdXJQaXhlbFRl
eHR1cmVTZXJpYWxzW2ldID0gMDsKKyAgICB9CisKKyAgICBtQXBwbGllZElCU2VyaWFsID0gMDsK
KyAgICBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWwgPSAwOworICAgIG1EeFVuaWZvcm1zRGly
dHkgPSB0cnVlOworCisgICAgbVZlcnRleERlY2xhcmF0aW9uQ2FjaGUubWFya1N0YXRlRGlydHko
KTsKK30KKwordm9pZCBSZW5kZXJlcjk6OnJlbGVhc2VEZXZpY2VSZXNvdXJjZXMoKQoreworICAg
IHdoaWxlICghbUV2ZW50UXVlcnlQb29sLmVtcHR5KCkpCisgICAgeworICAgICAgICBtRXZlbnRR
dWVyeVBvb2wuYmFjaygpLT5SZWxlYXNlKCk7CisgICAgICAgIG1FdmVudFF1ZXJ5UG9vbC5wb3Bf
YmFjaygpOworICAgIH0KKworICAgIFNhZmVSZWxlYXNlKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUp
OworCisgICAgbVZlcnRleFNoYWRlckNhY2hlLmNsZWFyKCk7CisgICAgbVBpeGVsU2hhZGVyQ2Fj
aGUuY2xlYXIoKTsKKworICAgIFNhZmVEZWxldGUobUJsaXQpOworICAgIFNhZmVEZWxldGUobVZl
cnRleERhdGFNYW5hZ2VyKTsKKyAgICBTYWZlRGVsZXRlKG1JbmRleERhdGFNYW5hZ2VyKTsKKyAg
ICBTYWZlRGVsZXRlKG1MaW5lTG9vcElCKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVN
X05VTExfQ09MT1JCVUZGRVJfQ0FDSEVfRU5UUklFUzsgaSsrKQorICAgIHsKKyAgICAgICAgU2Fm
ZURlbGV0ZShtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0uYnVmZmVyKTsKKyAgICB9CisKK30KKwor
Cit2b2lkIFJlbmRlcmVyOTo6bm90aWZ5RGV2aWNlTG9zdCgpCit7CisgICAgbURldmljZUxvc3Qg
PSB0cnVlOworICAgIG1EaXNwbGF5LT5ub3RpZnlEZXZpY2VMb3N0KCk7Cit9CisKK2Jvb2wgUmVu
ZGVyZXI5Ojppc0RldmljZUxvc3QoKQoreworICAgIHJldHVybiBtRGV2aWNlTG9zdDsKK30KKwor
Ly8gc2V0IG5vdGlmeSB0byB0cnVlIHRvIGJyb2FkY2FzdCBhIG1lc3NhZ2UgdG8gYWxsIGNvbnRl
eHRzIG9mIHRoZSBkZXZpY2UgbG9zcworYm9vbCBSZW5kZXJlcjk6OnRlc3REZXZpY2VMb3N0KGJv
b2wgbm90aWZ5KQoreworICAgIEhSRVNVTFQgc3RhdHVzID0gZ2V0RGV2aWNlU3RhdHVzQ29kZSgp
OworICAgIGJvb2wgaXNMb3N0ID0gRkFJTEVEKHN0YXR1cyk7CisKKyAgICBpZiAoaXNMb3N0KQor
ICAgIHsKKyAgICAgICAgLy8gZW5zdXJlIHdlIG5vdGUgdGhlIGRldmljZSBsb3NzIC0tCisgICAg
ICAgIC8vIHdlJ2xsIHByb2JhYmx5IGdldCB0aGlzIGRvbmUgYWdhaW4gYnkgbm90aWZ5RGV2aWNl
TG9zdAorICAgICAgICAvLyBidXQgYmVzdCB0byByZW1lbWJlciBpdCEKKyAgICAgICAgLy8gTm90
ZSB0aGF0IHdlIGRvbid0IHdhbnQgdG8gY2xlYXIgdGhlIGRldmljZSBsb3NzIHN0YXR1cyBoZXJl
CisgICAgICAgIC8vIC0tIHRoaXMgbmVlZHMgdG8gYmUgZG9uZSBieSByZXNldERldmljZQorICAg
ICAgICBtRGV2aWNlTG9zdCA9IHRydWU7CisgICAgICAgIGlmIChub3RpZnkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG5vdGlmeURldmljZUxvc3QoKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiBpc0xvc3Q7Cit9CisKK0hSRVNVTFQgUmVuZGVyZXI5OjpnZXREZXZpY2VTdGF0dXND
b2RlKCkKK3sKKyAgICBIUkVTVUxUIHN0YXR1cyA9IEQzRF9PSzsKKworICAgIGlmIChtRGV2aWNl
RXgpCisgICAgeworICAgICAgICBzdGF0dXMgPSBtRGV2aWNlRXgtPkNoZWNrRGV2aWNlU3RhdGUo
TlVMTCk7CisgICAgfQorICAgIGVsc2UgaWYgKG1EZXZpY2UpCisgICAgeworICAgICAgICBzdGF0
dXMgPSBtRGV2aWNlLT5UZXN0Q29vcGVyYXRpdmVMZXZlbCgpOworICAgIH0KKworICAgIHJldHVy
biBzdGF0dXM7Cit9CisKK2Jvb2wgUmVuZGVyZXI5Ojp0ZXN0RGV2aWNlUmVzZXR0YWJsZSgpCit7
CisgICAgLy8gT24gRDNEOUV4LCBERVZJQ0VMT1NUIHJlcHJlc2VudHMgYSBodW5nIGRldmljZSB0
aGF0IG5lZWRzIHRvIGJlIHJlc3RhcnRlZAorICAgIC8vIERFVklDRVJFTU9WRUQgaW5kaWNhdGVz
IHRoZSBkZXZpY2UgaGFzIGJlZW4gc3RvcHBlZCBhbmQgbXVzdCBiZSByZWNyZWF0ZWQKKyAgICBz
d2l0Y2ggKGdldERldmljZVN0YXR1c0NvZGUoKSkKKyAgICB7CisgICAgICBjYXNlIEQzREVSUl9E
RVZJQ0VOT1RSRVNFVDoKKyAgICAgIGNhc2UgRDNERVJSX0RFVklDRUhVTkc6CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgY2FzZSBEM0RFUlJfREVWSUNFTE9TVDoKKyAgICAgICAgcmV0dXJu
IChtRGV2aWNlRXggIT0gTlVMTCk7CisgICAgICBjYXNlIEQzREVSUl9ERVZJQ0VSRU1PVkVEOgor
ICAgICAgICBBU1NFUlQobURldmljZUV4ICE9IE5VTEwpOworICAgICAgICByZXR1cm4gaXNSZW1v
dmVkRGV2aWNlUmVzZXR0YWJsZSgpOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKworYm9vbCBSZW5kZXJlcjk6OnJlc2V0RGV2aWNlKCkKK3sKKyAgICBy
ZWxlYXNlRGV2aWNlUmVzb3VyY2VzKCk7CisKKyAgICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgcHJl
c2VudFBhcmFtZXRlcnMgPSBnZXREZWZhdWx0UHJlc2VudFBhcmFtZXRlcnMoKTsKKworICAgIEhS
RVNVTFQgcmVzdWx0ID0gRDNEX09LOworICAgIGJvb2wgbG9zdCA9IHRlc3REZXZpY2VMb3N0KGZh
bHNlKTsKKyAgICBib29sIHJlbW92ZWREZXZpY2UgPSAoZ2V0RGV2aWNlU3RhdHVzQ29kZSgpID09
IEQzREVSUl9ERVZJQ0VSRU1PVkVEKTsKKworICAgIC8vIERldmljZSBSZW1vdmVkIGlzIGEgZmVh
dHVyZSB3aGljaCBpcyBvbmx5IHByZXNlbnQgd2l0aCBEM0Q5RXgKKyAgICBBU1NFUlQobURldmlj
ZUV4ICE9IE5VTEwgfHwgIXJlbW92ZWREZXZpY2UpOworCisgICAgZm9yIChpbnQgYXR0ZW1wdHMg
PSAzOyBsb3N0ICYmIGF0dGVtcHRzID4gMDsgYXR0ZW1wdHMtLSkKKyAgICB7CisgICAgICAgIGlm
IChyZW1vdmVkRGV2aWNlKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBEZXZpY2UgcmVtb3Zl
ZCwgd2hpY2ggbWF5IHRyaWdnZXIgb24gZHJpdmVyIHJlaW5zdGFsbGF0aW9uLAorICAgICAgICAg
ICAgLy8gbWF5IGNhdXNlIGEgbG9uZ2VyIHdhaXQgb3RoZXIgcmVzZXQgYXR0ZW1wdHMgYmVmb3Jl
IHRoZQorICAgICAgICAgICAgLy8gc3lzdGVtIGlzIHJlYWR5IHRvIGhhbmRsZSBjcmVhdGluZyBh
IG5ldyBkZXZpY2UuCisgICAgICAgICAgICBTbGVlcCg4MDApOworICAgICAgICAgICAgbG9zdCA9
ICFyZXNldFJlbW92ZWREZXZpY2UoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtRGV2
aWNlRXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIFNsZWVwKDUwMCk7ICAgLy8gR2l2ZSB0aGUg
Z3JhcGhpY3MgZHJpdmVyIHNvbWUgQ1BVIHRpbWUKKyAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZp
Y2VFeC0+UmVzZXRFeCgmcHJlc2VudFBhcmFtZXRlcnMsIE5VTEwpOworICAgICAgICAgICAgbG9z
dCA9IHRlc3REZXZpY2VMb3N0KGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPlRlc3RDb29wZXJhdGl2ZUxldmVs
KCk7CisgICAgICAgICAgICB3aGlsZSAocmVzdWx0ID09IEQzREVSUl9ERVZJQ0VMT1NUKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIFNsZWVwKDEwMCk7ICAgLy8gR2l2ZSB0aGUgZ3Jh
cGhpY3MgZHJpdmVyIHNvbWUgQ1BVIHRpbWUKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtRGV2
aWNlLT5UZXN0Q29vcGVyYXRpdmVMZXZlbCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAocmVzdWx0ID09IEQzREVSUl9ERVZJQ0VOT1RSRVNFVCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5SZXNldCgmcHJlc2VudFBhcmFtZXRlcnMp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgbG9zdCA9IHRlc3REZXZpY2VMb3N0KGZhbHNl
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7Cisg
ICAgICAgIEVSUigiUmVzZXQvUmVzZXRFeCBmYWlsZWQgbXVsdGlwbGUgdGltZXM6IDB4JTA4WCIs
IHJlc3VsdCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAocmVtb3Zl
ZERldmljZSAmJiBsb3N0KQorICAgIHsKKyAgICAgICAgRVJSKCJEZXZpY2UgbG9zdCByZXNldCBm
YWlsZWQgbXVsdGlwbGUgdGltZXMiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIC8vIElmIHRoZSBkZXZpY2Ugd2FzIHJlbW92ZWQsIHdlIGFscmVhZHkgZmluaXNoZWQgcmUt
aW5pdGlhbGl6YXRpb24gaW4gcmVzZXRSZW1vdmVkRGV2aWNlCisgICAgaWYgKCFyZW1vdmVkRGV2
aWNlKQorICAgIHsKKyAgICAgICAgLy8gcmVzZXQgZGV2aWNlIGRlZmF1bHRzCisgICAgICAgIGlu
aXRpYWxpemVEZXZpY2UoKTsKKyAgICB9CisKKyAgICBtRGV2aWNlTG9zdCA9IGZhbHNlOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVuZGVyZXI5Ojppc1JlbW92ZWREZXZpY2VSZXNl
dHRhYmxlKCkgY29uc3QKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKworI2lmZGVmIEFO
R0xFX0VOQUJMRV9EM0Q5RVgKKyAgICBJRGlyZWN0M0Q5RXggKmQzZDlFeCA9IE5VTEw7CisgICAg
dHlwZWRlZiBIUkVTVUxUIChXSU5BUEkgKkRpcmVjdDNEQ3JlYXRlOUV4RnVuYykoVUlOVCwgSURp
cmVjdDNEOUV4KiopOworICAgIERpcmVjdDNEQ3JlYXRlOUV4RnVuYyBEaXJlY3QzRENyZWF0ZTlF
eFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8RGlyZWN0M0RDcmVhdGU5RXhGdW5jPihHZXRQcm9jQWRk
cmVzcyhtRDNkOU1vZHVsZSwgIkRpcmVjdDNEQ3JlYXRlOUV4IikpOworCisgICAgaWYgKERpcmVj
dDNEQ3JlYXRlOUV4UHRyICYmIFNVQ0NFRURFRChEaXJlY3QzRENyZWF0ZTlFeFB0cihEM0RfU0RL
X1ZFUlNJT04sICZkM2Q5RXgpKSkKKyAgICB7CisgICAgICAgIEQzRENBUFM5IGRldmljZUNhcHM7
CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZDNkOUV4LT5HZXREZXZpY2VDYXBzKG1BZGFwdGVy
LCBtRGV2aWNlVHlwZSwgJmRldmljZUNhcHMpOworICAgICAgICBzdWNjZXNzID0gU1VDQ0VFREVE
KHJlc3VsdCk7CisgICAgfQorCisgICAgU2FmZVJlbGVhc2UoZDNkOUV4KTsKKyNlbHNlCisgICAg
QVNTRVJUKFVOUkVBQ0hBQkxFKCkpOworI2VuZGlmCisKKyAgICByZXR1cm4gc3VjY2VzczsKK30K
KworYm9vbCBSZW5kZXJlcjk6OnJlc2V0UmVtb3ZlZERldmljZSgpCit7CisgICAgLy8gRnJvbSBo
dHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2Ji
MTcyNTU0KHY9dnMuODUpLmFzcHg6CisgICAgLy8gVGhlIGhhcmR3YXJlIGFkYXB0ZXIgaGFzIGJl
ZW4gcmVtb3ZlZC4gQXBwbGljYXRpb24gbXVzdCBkZXN0cm95IHRoZSBkZXZpY2UsIGRvIGVudW1l
cmF0aW9uIG9mCisgICAgLy8gYWRhcHRlcnMgYW5kIGNyZWF0ZSBhbm90aGVyIERpcmVjdDNEIGRl
dmljZS4gSWYgYXBwbGljYXRpb24gY29udGludWVzIHJlbmRlcmluZyB3aXRob3V0CisgICAgLy8g
Y2FsbGluZyBSZXNldCwgdGhlIHJlbmRlcmluZyBjYWxscyB3aWxsIHN1Y2NlZWQuIEFwcGxpZXMg
dG8gRGlyZWN0M0QgOUV4IG9ubHkuCisgICAgZGVpbml0aWFsaXplKCk7CisgICAgcmV0dXJuIChp
bml0aWFsaXplKCkgPT0gRUdMX1NVQ0NFU1MpOworfQorCitEV09SRCBSZW5kZXJlcjk6OmdldEFk
YXB0ZXJWZW5kb3IoKSBjb25zdAoreworICAgIHJldHVybiBtQWRhcHRlcklkZW50aWZpZXIuVmVu
ZG9ySWQ7Cit9CisKK3N0ZDo6c3RyaW5nIFJlbmRlcmVyOTo6Z2V0UmVuZGVyZXJEZXNjcmlwdGlv
bigpIGNvbnN0Cit7CisgICAgc3RkOjpvc3RyaW5nc3RyZWFtIHJlbmRlcmVyU3RyaW5nOworCisg
ICAgcmVuZGVyZXJTdHJpbmcgPDwgbUFkYXB0ZXJJZGVudGlmaWVyLkRlc2NyaXB0aW9uOworICAg
IGlmIChnZXRTaGFyZUhhbmRsZVN1cHBvcnQoKSkKKyAgICB7CisgICAgICAgIHJlbmRlcmVyU3Ry
aW5nIDw8ICIgRGlyZWN0M0Q5RXgiOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBy
ZW5kZXJlclN0cmluZyA8PCAiIERpcmVjdDNEOSI7CisgICAgfQorCisgICAgcmVuZGVyZXJTdHJp
bmcgPDwgIiB2c18iIDw8IEQzRFNIQURFUl9WRVJTSU9OX01BSk9SKG1EZXZpY2VDYXBzLlZlcnRl
eFNoYWRlclZlcnNpb24pIDw8ICJfIiA8PCBEM0RTSEFERVJfVkVSU0lPTl9NSU5PUihtRGV2aWNl
Q2Fwcy5WZXJ0ZXhTaGFkZXJWZXJzaW9uKTsKKyAgICByZW5kZXJlclN0cmluZyA8PCAiIHBzXyIg
PDwgRDNEU0hBREVSX1ZFUlNJT05fTUFKT1IobURldmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJzaW9u
KSA8PCAiXyIgPDwgRDNEU0hBREVSX1ZFUlNJT05fTUlOT1IobURldmljZUNhcHMuUGl4ZWxTaGFk
ZXJWZXJzaW9uKTsKKworICAgIHJldHVybiByZW5kZXJlclN0cmluZy5zdHIoKTsKK30KKworR1VJ
RCBSZW5kZXJlcjk6OmdldEFkYXB0ZXJJZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bUFkYXB0ZXJJZGVudGlmaWVyLkRldmljZUlkZW50aWZpZXI7Cit9CisKK3ZvaWQgUmVuZGVyZXI5
OjpnZXRNdWx0aVNhbXBsZVN1cHBvcnQoRDNERk9STUFUIGZvcm1hdCwgYm9vbCAqbXVsdGlTYW1w
bGVBcnJheSkKK3sKKyAgICBmb3IgKGludCBtdWx0aVNhbXBsZUluZGV4ID0gMDsgbXVsdGlTYW1w
bGVJbmRleCA8PSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTOyBtdWx0aVNhbXBsZUluZGV4Kysp
CisgICAgeworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EM2Q5LT5DaGVja0RldmljZU11bHRp
U2FtcGxlVHlwZShtQWRhcHRlciwgbURldmljZVR5cGUsIGZvcm1hdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSwgKEQzRE1V
TFRJU0FNUExFX1RZUEUpbXVsdGlTYW1wbGVJbmRleCwgTlVMTCk7CisKKyAgICAgICAgbXVsdGlT
YW1wbGVBcnJheVttdWx0aVNhbXBsZUluZGV4XSA9IFNVQ0NFRURFRChyZXN1bHQpOworICAgIH0K
K30KKworYm9vbCBSZW5kZXJlcjk6OmdldEJHUkFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0Cit7Cisg
ICAgLy8gRGlyZWN0WCA5IGFsd2F5cyBzdXBwb3J0cyBCR1JBCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgUmVuZGVyZXI5OjpnZXREWFQxVGV4dHVyZVN1cHBvcnQoKQoreworICAgIHJldHVy
biBtRFhUMVRleHR1cmVTdXBwb3J0OworfQorCitib29sIFJlbmRlcmVyOTo6Z2V0RFhUM1RleHR1
cmVTdXBwb3J0KCkKK3sKKyAgICByZXR1cm4gbURYVDNUZXh0dXJlU3VwcG9ydDsKK30KKworYm9v
bCBSZW5kZXJlcjk6OmdldERYVDVUZXh0dXJlU3VwcG9ydCgpCit7CisgICAgcmV0dXJuIG1EWFQ1
VGV4dHVyZVN1cHBvcnQ7Cit9CisKK2Jvb2wgUmVuZGVyZXI5OjpnZXREZXB0aFRleHR1cmVTdXBw
b3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbURlcHRoVGV4dHVyZVN1cHBvcnQ7Cit9CisKK2Jv
b2wgUmVuZGVyZXI5OjpnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBi
b29sICpyZW5kZXJhYmxlKQoreworICAgICpmaWx0ZXJpbmcgPSBtRmxvYXQzMkZpbHRlclN1cHBv
cnQ7CisgICAgKnJlbmRlcmFibGUgPSBtRmxvYXQzMlJlbmRlclN1cHBvcnQ7CisgICAgcmV0dXJu
IG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQ7Cit9CisKK2Jvb2wgUmVuZGVyZXI5OjpnZXRGbG9hdDE2
VGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKQoreworICAg
ICpmaWx0ZXJpbmcgPSBtRmxvYXQxNkZpbHRlclN1cHBvcnQ7CisgICAgKnJlbmRlcmFibGUgPSBt
RmxvYXQxNlJlbmRlclN1cHBvcnQ7CisgICAgcmV0dXJuIG1GbG9hdDE2VGV4dHVyZVN1cHBvcnQ7
Cit9CisKK2Jvb2wgUmVuZGVyZXI5OjpnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpCit7Cisg
ICAgcmV0dXJuIG1MdW1pbmFuY2VUZXh0dXJlU3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjk6
OmdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKQoreworICAgIHJldHVybiBtTHVtaW5h
bmNlQWxwaGFUZXh0dXJlU3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldFRleHR1cmVG
aWx0ZXJBbmlzb3Ryb3B5U3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdXBwb3J0c1Rl
eHR1cmVGaWx0ZXJBbmlzb3Ryb3B5OworfQorCitmbG9hdCBSZW5kZXJlcjk6OmdldFRleHR1cmVN
YXhBbmlzb3Ryb3B5KCkgY29uc3QKK3sKKyAgICBpZiAobVN1cHBvcnRzVGV4dHVyZUZpbHRlckFu
aXNvdHJvcHkpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1EZXZp
Y2VDYXBzLk1heEFuaXNvdHJvcHkpOworICAgIH0KKyAgICByZXR1cm4gMS4wZjsKK30KKworYm9v
bCBSZW5kZXJlcjk6OmdldEV2ZW50UXVlcnlTdXBwb3J0KCkKK3sKKyAgICByZXR1cm4gbUV2ZW50
UXVlcnlTdXBwb3J0OworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRNYXhWZXJ0ZXhU
ZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0Cit7CisgICAgTUVUQV9BU1NFUlQoTUFYX1RFWFRVUkVf
SU1BR0VfVU5JVFNfVlRGX1NNMyA8PSBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhU
VVJFX0lNQUdFX1VOSVRTKTsKKyAgICByZXR1cm4gbVZlcnRleFRleHR1cmVTdXBwb3J0ID8gTUFY
X1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGX1NNMyA6IDA7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5k
ZXJlcjk6OmdldE1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdAoreworICAgIHJl
dHVybiBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKyBnZXRNYXhWZXJ0ZXhUZXh0dXJlSW1h
Z2VVbml0cygpOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRSZXNlcnZlZFZlcnRl
eFVuaWZvcm1WZWN0b3JzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMjsgICAvLyBkeF9WaWV3QWRq
dXN0IGFuZCBkeF9EZXB0aFJhbmdlLgorfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRS
ZXNlcnZlZEZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdAoreworICAgIHJldHVybiAzOyAg
IC8vIGR4X1ZpZXdDb29yZHMsIGR4X0RlcHRoRnJvbnQgYW5kIGR4X0RlcHRoUmFuZ2UuCit9CisK
K3Vuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldE1heFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gTUFYX1ZFUlRFWF9DT05TVEFOVF9WRUNUT1JTX0QzRDkgLSBnZXRS
ZXNlcnZlZFZlcnRleFVuaWZvcm1WZWN0b3JzKCk7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJl
cjk6OmdldE1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdAoreworICAgIGNvbnN0IGlu
dCBtYXhQaXhlbENvbnN0YW50VmVjdG9ycyA9IChnZXRNYWpvclNoYWRlck1vZGVsKCkgPj0gMykg
PyBNQVhfUElYRUxfQ09OU1RBTlRfVkVDVE9SU19TTTMgOiBNQVhfUElYRUxfQ09OU1RBTlRfVkVD
VE9SU19TTTI7CisKKyAgICByZXR1cm4gbWF4UGl4ZWxDb25zdGFudFZlY3RvcnMgLSBnZXRSZXNl
cnZlZEZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKTsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVy
OTo6Z2V0TWF4VmFyeWluZ1ZlY3RvcnMoKSBjb25zdAoreworICAgIHJldHVybiAoZ2V0TWFqb3JT
aGFkZXJNb2RlbCgpID49IDMpID8gTUFYX1ZBUllJTkdfVkVDVE9SU19TTTMgOiBNQVhfVkFSWUlO
R19WRUNUT1JTX1NNMjsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldE5vblBvd2VyMlRleHR1cmVT
dXBwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZXM7
Cit9CisKK2Jvb2wgUmVuZGVyZXI5OjpnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKSBjb25zdAor
eworICAgIHJldHVybiBtT2NjbHVzaW9uUXVlcnlTdXBwb3J0OworfQorCitib29sIFJlbmRlcmVy
OTo6Z2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiBtRGV2aWNlQ2Fw
cy5QaXhlbFNoYWRlclZlcnNpb24gPj0gRDNEUFNfVkVSU0lPTigzLCAwKTsKK30KKworYm9vbCBS
ZW5kZXJlcjk6OmdldFNoYXJlSGFuZGxlU3VwcG9ydCgpIGNvbnN0Cit7CisgICAgLy8gUElYIGRv
ZXNuJ3Qgc2VlbSB0byBzdXBwb3J0IHVzaW5nIHNoYXJlIGhhbmRsZXMsIHNvIGRpc2FibGUgdGhl
bS4KKyAgICByZXR1cm4gKG1EM2Q5RXggIT0gTlVMTCkgJiYgIWdsOjpwZXJmQWN0aXZlKCk7Cit9
CisKK2Jvb2wgUmVuZGVyZXI5OjpnZXREZXJpdmF0aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gKG1EZXZpY2VDYXBzLlBTMjBDYXBzLkNhcHMgJiBEM0RQUzIwQ0FQ
U19HUkFESUVOVElOU1RSVUNUSU9OUykgIT0gMDsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldFBv
c3RTdWJCdWZmZXJTdXBwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW50
IFJlbmRlcmVyOTo6Z2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEQz
RFNIQURFUl9WRVJTSU9OX01BSk9SKG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVyVmVyc2lvbik7Cit9
CisKK2Zsb2F0IFJlbmRlcmVyOTo6Z2V0TWF4UG9pbnRTaXplKCkgY29uc3QKK3sKKyAgICAvLyBQ
b2ludCBzaXplIGNsYW1wZWQgYXQgMS4wZiBmb3IgU00yCisgICAgcmV0dXJuIGdldE1ham9yU2hh
ZGVyTW9kZWwoKSA9PSAzID8gbURldmljZUNhcHMuTWF4UG9pbnRTaXplIDogMS4wZjsKK30KKwor
aW50IFJlbmRlcmVyOTo6Z2V0TWF4Vmlld3BvcnREaW1lbnNpb24oKSBjb25zdAoreworICAgIGlu
dCBtYXhUZXh0dXJlRGltZW5zaW9uID0gc3RkOjptaW4oc3RkOjptaW4oZ2V0TWF4VGV4dHVyZVdp
ZHRoKCksIGdldE1heFRleHR1cmVIZWlnaHQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoaW50KWdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9TSVpFKTsK
KyAgICByZXR1cm4gbWF4VGV4dHVyZURpbWVuc2lvbjsKK30KKworaW50IFJlbmRlcmVyOTo6Z2V0
TWF4VGV4dHVyZVdpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKGludCltRGV2aWNlQ2Fwcy5N
YXhUZXh0dXJlV2lkdGg7Cit9CisKK2ludCBSZW5kZXJlcjk6OmdldE1heFRleHR1cmVIZWlnaHQo
KSBjb25zdAoreworICAgIHJldHVybiAoaW50KW1EZXZpY2VDYXBzLk1heFRleHR1cmVIZWlnaHQ7
Cit9CisKK2Jvb2wgUmVuZGVyZXI5OjpnZXQzMkJpdEluZGV4U3VwcG9ydCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1EZXZpY2VDYXBzLk1heFZlcnRleEluZGV4ID49ICgxIDw8IDE2KTsKK30KKwor
RFdPUkQgUmVuZGVyZXI5OjpnZXRDYXBzRGVjbFR5cGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bURldmljZUNhcHMuRGVjbFR5cGVzOworfQorCitpbnQgUmVuZGVyZXI5OjpnZXRNaW5Td2FwSW50
ZXJ2YWwoKSBjb25zdAoreworICAgIHJldHVybiBtTWluU3dhcEludGVydmFsOworfQorCitpbnQg
UmVuZGVyZXI5OjpnZXRNYXhTd2FwSW50ZXJ2YWwoKSBjb25zdAoreworICAgIHJldHVybiBtTWF4
U3dhcEludGVydmFsOworfQorCitpbnQgUmVuZGVyZXI5OjpnZXRNYXhTdXBwb3J0ZWRTYW1wbGVz
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbU1heFN1cHBvcnRlZFNhbXBsZXM7Cit9CisKK2ludCBS
ZW5kZXJlcjk6OmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKEQzREZPUk1BVCBmb3JtYXQsIGlu
dCByZXF1ZXN0ZWQpIGNvbnN0Cit7CisgICAgaWYgKHJlcXVlc3RlZCA9PSAwKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHJlcXVlc3RlZDsKKyAgICB9CisKKyAgICBzdGQ6Om1hcDxEM0RGT1JNQVQs
IGJvb2wgKj46OmNvbnN0X2l0ZXJhdG9yIGl0ciA9IG1NdWx0aVNhbXBsZVN1cHBvcnQuZmluZChm
b3JtYXQpOworICAgIGlmIChpdHIgPT0gbU11bHRpU2FtcGxlU3VwcG9ydC5lbmQoKSkKKyAgICB7
CisgICAgICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX1VOS05PV04pCisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGZvciAoaW50IGkgPSByZXF1
ZXN0ZWQ7IGkgPD0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgKytpKQorICAgIHsKKyAgICAg
ICAgaWYgKGl0ci0+c2Vjb25kW2ldICYmIGkgIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIC0xOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRNYXhSZW5kZXJU
YXJnZXRzKCkgY29uc3QKK3sKKyAgICAvLyB3ZSBkbyBub3Qgc3VwcG9ydCBNUlQgaW4gZDNkOQor
ICAgIHJldHVybiAxOworfQorCitEM0RGT1JNQVQgUmVuZGVyZXI5OjpDb252ZXJ0VGV4dHVyZUlu
dGVybmFsRm9ybWF0KEdMaW50IGludGVybmFsZm9ybWF0KQoreworICAgIHN3aXRjaCAoaW50ZXJu
YWxmb3JtYXQpCisgICAgeworICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKKyAgICAg
IGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOgorICAgICAgY2FzZSBHTF9ERVBUSDI0X1NU
RU5DSUw4X09FUzoKKyAgICAgICAgcmV0dXJuIEQzREZNVF9JTlRaOworICAgICAgY2FzZSBHTF9D
T01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgorICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQxX0VYVDoKKyAgICAgICAgcmV0dXJuIEQzREZNVF9EWFQxOworICAgICAgY2Fz
ZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgorICAgICAgICByZXR1cm4gRDNE
Rk1UX0RYVDM7CisgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6
CisgICAgICAgIHJldHVybiBEM0RGTVRfRFhUNTsKKyAgICAgIGNhc2UgR0xfUkdCQTMyRl9FWFQ6
CisgICAgICBjYXNlIEdMX1JHQjMyRl9FWFQ6CisgICAgICBjYXNlIEdMX0FMUEhBMzJGX0VYVDoK
KyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMzJGX0VYVDoKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNF
X0FMUEhBMzJGX0VYVDoKKyAgICAgICAgcmV0dXJuIEQzREZNVF9BMzJCMzJHMzJSMzJGOworICAg
ICAgY2FzZSBHTF9SR0JBMTZGX0VYVDoKKyAgICAgIGNhc2UgR0xfUkdCMTZGX0VYVDoKKyAgICAg
IGNhc2UgR0xfQUxQSEExNkZfRVhUOgorICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UxNkZfRVhUOgor
ICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhUOgorICAgICAgICByZXR1cm4gRDNE
Rk1UX0ExNkIxNkcxNlIxNkY7CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRThfRVhUOgorICAgICAg
ICBpZiAoZ2V0THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIEQzREZNVF9MODsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfTFVNSU5BTkNFOF9BTFBIQThfRVhUOgorICAgICAgICBpZiAoZ2V0THVtaW5hbmNlQWxw
aGFUZXh0dXJlU3VwcG9ydCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRDNERk1U
X0E4TDg7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JHQjhfT0VT
OgorICAgICAgY2FzZSBHTF9SR0I1NjU6CisgICAgICAgIHJldHVybiBEM0RGTVRfWDhSOEc4Qjg7
CisgICAgfQorCisgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKK30KKworYm9vbCBSZW5kZXJl
cjk6OmNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpkZXN0LCBU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzb3VyY2UpCit7CisgICAgYm9vbCByZXN1bHQgPSBm
YWxzZTsKKworICAgIGlmIChzb3VyY2UgJiYgZGVzdCkKKyAgICB7CisgICAgICAgIFRleHR1cmVT
dG9yYWdlOV8yRCAqc291cmNlOSA9IFRleHR1cmVTdG9yYWdlOV8yRDo6bWFrZVRleHR1cmVTdG9y
YWdlOV8yRChzb3VyY2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICAgICAgVGV4dHVyZVN0
b3JhZ2U5XzJEICpkZXN0OSA9IFRleHR1cmVTdG9yYWdlOV8yRDo6bWFrZVRleHR1cmVTdG9yYWdl
OV8yRChkZXN0LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CisKKyAgICAgICAgaW50IGxldmVscyA9
IHNvdXJjZTktPmxldmVsQ291bnQoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZXZl
bHM7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnNyY1N1
cmYgPSBzb3VyY2U5LT5nZXRTdXJmYWNlTGV2ZWwoaSwgZmFsc2UpOworICAgICAgICAgICAgSURp
cmVjdDNEU3VyZmFjZTkgKmRzdFN1cmYgPSBkZXN0OS0+Z2V0U3VyZmFjZUxldmVsKGksIGZhbHNl
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmVzdWx0ID0gY29weVRvUmVuZGVyVGFyZ2V0
KGRzdFN1cmYsIHNyY1N1cmYsIHNvdXJjZTktPmlzTWFuYWdlZCgpKTsKKworICAgICAgICAgICAg
aWYgKHNyY1N1cmYpIHNyY1N1cmYtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIGlmIChkc3RTdXJm
KSBkc3RTdXJmLT5SZWxlYXNlKCk7CisKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK2Jvb2wgUmVuZGVyZXI5Ojpjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2VDdWJlICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnNv
dXJjZSkKK3sKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworCisgICAgaWYgKHNvdXJjZSAmJiBk
ZXN0KQorICAgIHsKKyAgICAgICAgVGV4dHVyZVN0b3JhZ2U5X0N1YmUgKnNvdXJjZTkgPSBUZXh0
dXJlU3RvcmFnZTlfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlOV9DdWJlKHNvdXJjZS0+Z2V0U3Rv
cmFnZUluc3RhbmNlKCkpOworICAgICAgICBUZXh0dXJlU3RvcmFnZTlfQ3ViZSAqZGVzdDkgPSBU
ZXh0dXJlU3RvcmFnZTlfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlOV9DdWJlKGRlc3QtPmdldFN0
b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICAgICAgaW50IGxldmVscyA9IHNvdXJjZTktPmxldmVsQ291
bnQoKTsKKyAgICAgICAgZm9yIChpbnQgZiA9IDA7IGYgPCA2OyBmKyspCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGV2ZWxzOyBpKyspCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnNyY1N1cmYgPSBzb3VyY2U5LT5n
ZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmLCBpLCBm
YWxzZSk7CisgICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRzdFN1cmYgPSBkZXN0
OS0+Z2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZiwg
aSwgdHJ1ZSk7CisKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBjb3B5VG9SZW5kZXJUYXJnZXQo
ZHN0U3VyZiwgc3JjU3VyZiwgc291cmNlOS0+aXNNYW5hZ2VkKCkpOworCisgICAgICAgICAgICAg
ICAgaWYgKHNyY1N1cmYpIHNyY1N1cmYtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICBpZiAo
ZHN0U3VyZikgZHN0U3VyZi0+UmVsZWFzZSgpOworCisgICAgICAgICAgICAgICAgaWYgKCFyZXN1
bHQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0QzRFBPT0wgUmVuZGVy
ZXI5OjpnZXRCdWZmZXJQb29sKERXT1JEIHVzYWdlKSBjb25zdAoreworICAgIGlmIChtRDNkOUV4
ICE9IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4gRDNEUE9PTF9ERUZBVUxUOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoISh1c2FnZSAmIEQzRFVTQUdFX0RZTkFNSUMp
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRDNEUE9PTF9NQU5BR0VEOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIEQzRFBPT0xfREVGQVVMVDsKK30KKworYm9vbCBSZW5k
ZXJlcjk6OmNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6
UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyRCAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpCit7CisgICAgUkVDVCByZWN0OworICAg
IHJlY3QubGVmdCA9IHNvdXJjZVJlY3QueDsKKyAgICByZWN0LnRvcCA9IHNvdXJjZVJlY3QueTsK
KyAgICByZWN0LnJpZ2h0ID0gc291cmNlUmVjdC54ICsgc291cmNlUmVjdC53aWR0aDsKKyAgICBy
ZWN0LmJvdHRvbSA9IHNvdXJjZVJlY3QueSArIHNvdXJjZVJlY3QuaGVpZ2h0OworCisgICAgcmV0
dXJuIG1CbGl0LT5jb3B5KGZyYW1lYnVmZmVyLCByZWN0LCBkZXN0Rm9ybWF0LCB4b2Zmc2V0LCB5
b2Zmc2V0LCBzdG9yYWdlLCBsZXZlbCk7Cit9CisKK2Jvb2wgUmVuZGVyZXI5Ojpjb3B5SW1hZ2Uo
Z2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNl
UmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3Rv
cmFnZSwgR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpCit7CisgICAgUkVDVCByZWN0OworICAg
IHJlY3QubGVmdCA9IHNvdXJjZVJlY3QueDsKKyAgICByZWN0LnRvcCA9IHNvdXJjZVJlY3QueTsK
KyAgICByZWN0LnJpZ2h0ID0gc291cmNlUmVjdC54ICsgc291cmNlUmVjdC53aWR0aDsKKyAgICBy
ZWN0LmJvdHRvbSA9IHNvdXJjZVJlY3QueSArIHNvdXJjZVJlY3QuaGVpZ2h0OworCisgICAgcmV0
dXJuIG1CbGl0LT5jb3B5KGZyYW1lYnVmZmVyLCByZWN0LCBkZXN0Rm9ybWF0LCB4b2Zmc2V0LCB5
b2Zmc2V0LCBzdG9yYWdlLCB0YXJnZXQsIGxldmVsKTsKK30KKworYm9vbCBSZW5kZXJlcjk6OmJs
aXRSZWN0KGdsOjpGcmFtZWJ1ZmZlciAqcmVhZEZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFu
Z2xlICZyZWFkUmVjdCwgZ2w6OkZyYW1lYnVmZmVyICpkcmF3RnJhbWVidWZmZXIsIGNvbnN0IGds
OjpSZWN0YW5nbGUgJmRyYXdSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYmxp
dFJlbmRlclRhcmdldCwgYm9vbCBibGl0RGVwdGhTdGVuY2lsKQoreworICAgIGVuZFNjZW5lKCk7
CisKKyAgICBpZiAoYmxpdFJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIGdsOjpSZW5kZXJi
dWZmZXIgKnJlYWRCdWZmZXIgPSByZWFkRnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKDApOwor
ICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpkcmF3QnVmZmVyID0gZHJhd0ZyYW1lYnVmZmVyLT5n
ZXRDb2xvcmJ1ZmZlcigwKTsKKyAgICAgICAgUmVuZGVyVGFyZ2V0OSAqcmVhZFJlbmRlclRhcmdl
dCA9IE5VTEw7CisgICAgICAgIFJlbmRlclRhcmdldDkgKmRyYXdSZW5kZXJUYXJnZXQgPSBOVUxM
OworICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSogcmVhZFN1cmZhY2UgPSBOVUxMOworICAgICAg
ICBJRGlyZWN0M0RTdXJmYWNlOSogZHJhd1N1cmZhY2UgPSBOVUxMOworCisgICAgICAgIGlmIChy
ZWFkQnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICByZWFkUmVuZGVyVGFyZ2V0ID0gUmVu
ZGVyVGFyZ2V0OTo6bWFrZVJlbmRlclRhcmdldDkocmVhZEJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0
KCkpOworICAgICAgICB9CisgICAgICAgIGlmIChkcmF3QnVmZmVyKQorICAgICAgICB7CisgICAg
ICAgICAgICBkcmF3UmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0OTo6bWFrZVJlbmRlclRhcmdl
dDkoZHJhd0J1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKHJlYWRSZW5kZXJUYXJnZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlYWRTdXJmYWNl
ID0gcmVhZFJlbmRlclRhcmdldC0+Z2V0U3VyZmFjZSgpOworICAgICAgICB9CisgICAgICAgIGlm
IChkcmF3UmVuZGVyVGFyZ2V0KQorICAgICAgICB7CisgICAgICAgICAgICBkcmF3U3VyZmFjZSA9
IGRyYXdSZW5kZXJUYXJnZXQtPmdldFN1cmZhY2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICghcmVhZFN1cmZhY2UgfHwgIWRyYXdTdXJmYWNlKQorICAgICAgICB7CisgICAgICAgICAgICBF
UlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldC4iKTsKKyAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgICAgICB9CisK
KyAgICAgICAgUkVDVCBzcmNSZWN0OworICAgICAgICBzcmNSZWN0LmxlZnQgPSByZWFkUmVjdC54
OworICAgICAgICBzcmNSZWN0LnJpZ2h0ID0gcmVhZFJlY3QueCArIHJlYWRSZWN0LndpZHRoOwor
ICAgICAgICBzcmNSZWN0LnRvcCA9IHJlYWRSZWN0Lnk7CisgICAgICAgIHNyY1JlY3QuYm90dG9t
ID0gcmVhZFJlY3QueSArIHJlYWRSZWN0LmhlaWdodDsKKworICAgICAgICBSRUNUIGRzdFJlY3Q7
CisgICAgICAgIGRzdFJlY3QubGVmdCA9IGRyYXdSZWN0Lng7CisgICAgICAgIGRzdFJlY3Qucmln
aHQgPSBkcmF3UmVjdC54ICsgZHJhd1JlY3Qud2lkdGg7CisgICAgICAgIGRzdFJlY3QudG9wID0g
ZHJhd1JlY3QueTsKKyAgICAgICAgZHN0UmVjdC5ib3R0b20gPSBkcmF3UmVjdC55ICsgZHJhd1Jl
Y3QuaGVpZ2h0OworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+U3RyZXRjaFJl
Y3QocmVhZFN1cmZhY2UsICZzcmNSZWN0LCBkcmF3U3VyZmFjZSwgJmRzdFJlY3QsIEQzRFRFWEZf
Tk9ORSk7CisKKyAgICAgICAgcmVhZFN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgZHJhd1N1
cmZhY2UtPlJlbGVhc2UoKTsKKworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIEVSUigiQmxpdEZyYW1lYnVmZmVyQU5HTEUgZmFpbGVkOiBTdHJldGNo
UmVjdCByZXR1cm5lZCAleC4iLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGJsaXREZXB0aFN0ZW5jaWwpCisgICAgeworICAg
ICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZWFkQnVmZmVyID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRE
ZXB0aE9yU3RlbmNpbGJ1ZmZlcigpOworICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpkcmF3QnVm
ZmVyID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aE9yU3RlbmNpbGJ1ZmZlcigpOworICAgICAg
ICBSZW5kZXJUYXJnZXQ5ICpyZWFkRGVwdGhTdGVuY2lsID0gTlVMTDsKKyAgICAgICAgUmVuZGVy
VGFyZ2V0OSAqZHJhd0RlcHRoU3RlbmNpbCA9IE5VTEw7CisgICAgICAgIElEaXJlY3QzRFN1cmZh
Y2U5KiByZWFkU3VyZmFjZSA9IE5VTEw7CisgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5KiBkcmF3
U3VyZmFjZSA9IE5VTEw7CisKKyAgICAgICAgaWYgKHJlYWRCdWZmZXIpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJlYWREZXB0aFN0ZW5jaWwgPSBSZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFy
Z2V0OShyZWFkQnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKSk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGRyYXdCdWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRyYXdEZXB0aFN0ZW5jaWwg
PSBSZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShkcmF3QnVmZmVyLT5nZXREZXB0aFN0
ZW5jaWwoKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVhZERlcHRoU3RlbmNpbCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmVhZFN1cmZhY2UgPSByZWFkRGVwdGhTdGVuY2lsLT5nZXRT
dXJmYWNlKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRyYXdEZXB0aFN0ZW5jaWwpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGRyYXdTdXJmYWNlID0gZHJhd0RlcHRoU3RlbmNpbC0+Z2V0U3Vy
ZmFjZSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFyZWFkU3VyZmFjZSB8fCAhZHJhd1N1
cmZhY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRo
ZSByZW5kZXIgdGFyZ2V0LiIpOworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IG1EZXZpY2UtPlN0cmV0Y2hSZWN0KHJlYWRTdXJmYWNlLCBOVUxMLCBkcmF3U3VyZmFjZSwgTlVM
TCwgRDNEVEVYRl9OT05FKTsKKworICAgICAgICByZWFkU3VyZmFjZS0+UmVsZWFzZSgpOworICAg
ICAgICBkcmF3U3VyZmFjZS0+UmVsZWFzZSgpOworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJCbGl0RnJhbWVidWZmZXJBTkdMRSBmYWls
ZWQ6IFN0cmV0Y2hSZWN0IHJldHVybmVkICV4LiIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBSZW5kZXJlcjk6OnJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xp
bnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgb3V0
cHV0UGl0Y2gsIGJvb2wgcGFja1JldmVyc2VSb3dPcmRlciwgR0xpbnQgcGFja0FsaWdubWVudCwg
dm9pZCogcGl4ZWxzKQoreworICAgIFJlbmRlclRhcmdldDkgKnJlbmRlclRhcmdldCA9IE5VTEw7
CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOworICAgIGdsOjpSZW5kZXJi
dWZmZXIgKmNvbG9yYnVmZmVyID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKDApOworCisg
ICAgaWYgKGNvbG9yYnVmZmVyKQorICAgIHsKKyAgICAgICAgcmVuZGVyVGFyZ2V0ID0gUmVuZGVy
VGFyZ2V0OTo6bWFrZVJlbmRlclRhcmdldDkoY29sb3JidWZmZXItPmdldFJlbmRlclRhcmdldCgp
KTsKKyAgICB9CisgICAgCisgICAgaWYgKHJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIHN1
cmZhY2UgPSByZW5kZXJUYXJnZXQtPmdldFN1cmZhY2UoKTsKKyAgICB9CisKKyAgICBpZiAoIXN1
cmZhY2UpCisgICAgeworICAgICAgICAvLyBjb250ZXh0IG11c3QgYmUgbG9zdAorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7CisgICAgc3VyZmFjZS0+
R2V0RGVzYygmZGVzYyk7CisKKyAgICBpZiAoZGVzYy5NdWx0aVNhbXBsZVR5cGUgIT0gRDNETVVM
VElTQU1QTEVfTk9ORSkKKyAgICB7CisgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhN
RTogUmVxdWlyZXMgcmVzb2x2ZSB1c2luZyBTdHJldGNoUmVjdCBpbnRvIG5vbi1tdWx0aXNhbXBs
ZWQgcmVuZGVyIHRhcmdldAorICAgICAgICBzdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorCisgICAgSFJFU1VMVCBy
ZXN1bHQ7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN5c3RlbVN1cmZhY2UgPSBOVUxMOworICAg
IGJvb2wgZGlyZWN0VG9QaXhlbHMgPSAhcGFja1JldmVyc2VSb3dPcmRlciAmJiBwYWNrQWxpZ25t
ZW50IDw9IDQgJiYgZ2V0U2hhcmVIYW5kbGVTdXBwb3J0KCkgJiYKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgeCA9PSAwICYmIHkgPT0gMCAmJiBVSU5UKHdpZHRoKSA9PSBkZXNjLldpZHRoICYm
IFVJTlQoaGVpZ2h0KSA9PSBkZXNjLkhlaWdodCAmJgorICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQThSOEc4QjggJiYgZm9ybWF0ID09IEdMX0JHUkFfRVhU
ICYmIHR5cGUgPT0gR0xfVU5TSUdORURfQllURTsKKyAgICBpZiAoZGlyZWN0VG9QaXhlbHMpCisg
ICAgeworICAgICAgICAvLyBVc2UgdGhlIHBpeGVscyBwdHIgYXMgYSBzaGFyZWQgaGFuZGxlIHRv
IHdyaXRlIGRpcmVjdGx5IGludG8gY2xpZW50J3MgbWVtb3J5CisgICAgICAgIHJlc3VsdCA9IG1E
ZXZpY2UtPkNyZWF0ZU9mZnNjcmVlblBsYWluU3VyZmFjZShkZXNjLldpZHRoLCBkZXNjLkhlaWdo
dCwgZGVzYy5Gb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBEM0RQT09MX1NZU1RFTU1FTSwgJnN5c3RlbVN1cmZhY2UsICZwaXhlbHMp
OworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8v
IFRyeSBhZ2FpbiB3aXRob3V0IHRoZSBzaGFyZWQgaGFuZGxlCisgICAgICAgICAgICBkaXJlY3RU
b1BpeGVscyA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFkaXJlY3RUb1Bp
eGVscykKKyAgICB7CisgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZU9mZnNjcmVlblBs
YWluU3VyZmFjZShkZXNjLldpZHRoLCBkZXNjLkhlaWdodCwgZGVzYy5Gb3JtYXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RQT09MX1NZ
U1RFTU1FTSwgJnN5c3RlbVN1cmZhY2UsIE5VTEwpOworICAgICAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9G
VklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgc3Vy
ZmFjZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJlc3VsdCA9IG1EZXZpY2UtPkdldFJl
bmRlclRhcmdldERhdGEoc3VyZmFjZSwgc3lzdGVtU3VyZmFjZSk7CisgICAgc3VyZmFjZS0+UmVs
ZWFzZSgpOworICAgIHN1cmZhY2UgPSBOVUxMOworCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQor
ICAgIHsKKyAgICAgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOworCisgICAgICAgIC8vIEl0
IHR1cm5zIG91dCB0aGF0IEQzRCB3aWxsIHNvbWV0aW1lcyBwcm9kdWNlIG1vcmUgZXJyb3IKKyAg
ICAgICAgLy8gY29kZXMgdGhhbiB0aG9zZSBkb2N1bWVudGVkLgorICAgICAgICBpZiAoZDNkOTo6
aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgbm90aWZ5
RGV2aWNlTG9zdCgpOworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgIH0KKwor
ICAgIGlmIChkaXJlY3RUb1BpeGVscykKKyAgICB7CisgICAgICAgIHN5c3RlbVN1cmZhY2UtPlJl
bGVhc2UoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFQ1QgcmVjdDsKKyAgICBy
ZWN0LmxlZnQgPSBnbDo6Y2xhbXAoeCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KGRlc2MuV2lkdGgp
KTsKKyAgICByZWN0LnRvcCA9IGdsOjpjbGFtcCh5LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVz
Yy5IZWlnaHQpKTsKKyAgICByZWN0LnJpZ2h0ID0gZ2w6OmNsYW1wKHggKyB3aWR0aCwgMEwsIHN0
YXRpY19jYXN0PExPTkc+KGRlc2MuV2lkdGgpKTsKKyAgICByZWN0LmJvdHRvbSA9IGdsOjpjbGFt
cCh5ICsgaGVpZ2h0LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVzYy5IZWlnaHQpKTsKKworICAg
IEQzRExPQ0tFRF9SRUNUIGxvY2s7CisgICAgcmVzdWx0ID0gc3lzdGVtU3VyZmFjZS0+TG9ja1Jl
Y3QoJmxvY2ssICZyZWN0LCBEM0RMT0NLX1JFQURPTkxZKTsKKworICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHN5c3RlbVN1cmZh
Y2UtPlJlbGVhc2UoKTsKKworICAgICAgICByZXR1cm47ICAgLy8gTm8gc2Vuc2libGUgZXJyb3Ig
dG8gZ2VuZXJhdGUKKyAgICB9CisKKyAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gKHVuc2lnbmVk
IGNoYXIqKXBpeGVsczsKKyAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdDE2ID0gKHVuc2lnbmVkIHNo
b3J0KilwaXhlbHM7CisKKyAgICB1bnNpZ25lZCBjaGFyICpzb3VyY2U7CisgICAgaW50IGlucHV0
UGl0Y2g7CisgICAgaWYgKHBhY2tSZXZlcnNlUm93T3JkZXIpCisgICAgeworICAgICAgICBzb3Vy
Y2UgPSAoKHVuc2lnbmVkIGNoYXIqKWxvY2sucEJpdHMpICsgbG9jay5QaXRjaCAqIChyZWN0LmJv
dHRvbSAtIHJlY3QudG9wIC0gMSk7CisgICAgICAgIGlucHV0UGl0Y2ggPSAtbG9jay5QaXRjaDsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc291cmNlID0gKHVuc2lnbmVkIGNoYXIq
KWxvY2sucEJpdHM7CisgICAgICAgIGlucHV0UGl0Y2ggPSBsb2NrLlBpdGNoOworICAgIH0KKwor
ICAgIHVuc2lnbmVkIGludCBmYXN0UGl4ZWxTaXplID0gMDsKKworICAgIGlmIChkZXNjLkZvcm1h
dCA9PSBEM0RGTVRfQThSOEc4QjggJiYKKyAgICAgICAgZm9ybWF0ID09IEdMX0JHUkFfRVhUICYm
CisgICAgICAgIHR5cGUgPT0gR0xfVU5TSUdORURfQllURSkKKyAgICB7CisgICAgICAgIGZhc3RQ
aXhlbFNpemUgPSA0OworICAgIH0KKyAgICBlbHNlIGlmICgoZGVzYy5Gb3JtYXQgPT0gRDNERk1U
X0E0UjRHNEI0ICYmCisgICAgICAgICAgICAgZm9ybWF0ID09IEdMX0JHUkFfRVhUICYmCisgICAg
ICAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQpIHx8Cisg
ICAgICAgICAgICAgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BMVI1RzVCNSAmJgorICAgICAgICAg
ICAgIGZvcm1hdCA9PSBHTF9CR1JBX0VYVCAmJgorICAgICAgICAgICAgIHR5cGUgPT0gR0xfVU5T
SUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUKSkKKyAgICB7CisgICAgICAgIGZhc3RQaXhlbFNp
emUgPSAyOworICAgIH0KKyAgICBlbHNlIGlmIChkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQTE2QjE2
RzE2UjE2RiAmJgorICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9SR0JBICYmCisgICAgICAgICAg
ICAgdHlwZSA9PSBHTF9IQUxGX0ZMT0FUX09FUykKKyAgICB7CisgICAgICAgIGZhc3RQaXhlbFNp
emUgPSA4OworICAgIH0KKyAgICBlbHNlIGlmIChkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQTMyQjMy
RzMyUjMyRiAmJgorICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9SR0JBICYmCisgICAgICAgICAg
ICAgdHlwZSA9PSBHTF9GTE9BVCkKKyAgICB7CisgICAgICAgIGZhc3RQaXhlbFNpemUgPSAxNjsK
KyAgICB9CisKKyAgICBmb3IgKGludCBqID0gMDsgaiA8IHJlY3QuYm90dG9tIC0gcmVjdC50b3A7
IGorKykKKyAgICB7CisgICAgICAgIGlmIChmYXN0UGl4ZWxTaXplICE9IDApCisgICAgICAgIHsK
KyAgICAgICAgICAgIC8vIEZhc3QgcGF0aCBmb3IgZm9ybWF0cyB3aGljaCByZXF1aXJlIG5vIHRy
YW5zbGF0aW9uOgorICAgICAgICAgICAgLy8gRDNERk1UX0E4UjhHOEI4IHRvIEJHUkEvVU5TSUdO
RURfQllURQorICAgICAgICAgICAgLy8gRDNERk1UX0E0UjRHNEI0IHRvIEJHUkEvVU5TSUdORURf
U0hPUlRfNF80XzRfNF9SRVZfRVhUCisgICAgICAgICAgICAvLyBEM0RGTVRfQTFSNUc1QjUgdG8g
QkdSQS9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQKKyAgICAgICAgICAgIC8vIEQzREZN
VF9BMTZCMTZHMTZSMTZGIHRvIFJHQkEvSEFMRl9GTE9BVF9PRVMKKyAgICAgICAgICAgIC8vIEQz
REZNVF9BMzJCMzJHMzJSMzJGIHRvIFJHQkEvRkxPQVQKKyAgICAgICAgICAgIC8vIAorICAgICAg
ICAgICAgLy8gTm90ZSB0aGF0IGJ1ZmZlcnMgd2l0aCBubyBhbHBoYSBnbyB0aHJvdWdoIHRoZSBz
bG93IHBhdGggYmVsb3cuCisgICAgICAgICAgICBtZW1jcHkoZGVzdCArIGogKiBvdXRwdXRQaXRj
aCwKKyAgICAgICAgICAgICAgICAgICBzb3VyY2UgKyBqICogaW5wdXRQaXRjaCwKKyAgICAgICAg
ICAgICAgICAgICAocmVjdC5yaWdodCAtIHJlY3QubGVmdCkgKiBmYXN0UGl4ZWxTaXplKTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGRlc2MuRm9y
bWF0ID09IEQzREZNVF9BOFI4RzhCOCAmJgorICAgICAgICAgICAgICAgICBmb3JtYXQgPT0gR0xf
UkdCQSAmJgorICAgICAgICAgICAgICAgICB0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIC8vIEZhc3QgcGF0aCBmb3Igc3dhcHBpbmcgcmVkIHdpdGggYmx1
ZQorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0
OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFyZ2Ig
PSAqKHVuc2lnbmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOworICAg
ICAgICAgICAgICAgICoodW5zaWduZWQgaW50KikoZGVzdCArIDQgKiBpICsgaiAqIG91dHB1dFBp
dGNoKSA9CisgICAgICAgICAgICAgICAgICAgIChhcmdiICYgMHhGRjAwRkYwMCkgfCAgICAgICAv
LyBLZWVwIGFscGhhIGFuZCBncmVlbgorICAgICAgICAgICAgICAgICAgICAoYXJnYiAmIDB4MDBG
RjAwMDApID4+IDE2IHwgLy8gTW92ZSByZWQgdG8gYmx1ZQorICAgICAgICAgICAgICAgICAgICAo
YXJnYiAmIDB4MDAwMDAwRkYpIDw8IDE2OyAgLy8gTW92ZSBibHVlIHRvIHJlZAorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHJlY3QucmlnaHQgLSByZWN0LmxlZnQ7IGkrKykKKyAgICAgICAgeworICAg
ICAgICAgICAgZmxvYXQgcjsKKyAgICAgICAgICAgIGZsb2F0IGc7CisgICAgICAgICAgICBmbG9h
dCBiOworICAgICAgICAgICAgZmxvYXQgYTsKKworICAgICAgICAgICAgc3dpdGNoIChkZXNjLkZv
cm1hdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1Ogor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdi
ID0gKih1bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDIgKiBpICsgaiAqIGlucHV0UGl0Y2gpOwor
CisgICAgICAgICAgICAgICAgICAgIGEgPSAxLjBmOworICAgICAgICAgICAgICAgICAgICBiID0g
KHJnYiAmIDB4MDAxRikgKiAoMS4wZiAvIDB4MDAxRik7CisgICAgICAgICAgICAgICAgICAgIGcg
PSAocmdiICYgMHgwN0UwKSAqICgxLjBmIC8gMHgwN0UwKTsKKyAgICAgICAgICAgICAgICAgICAg
ciA9IChyZ2IgJiAweEY4MDApICogKDEuMGYgLyAweEY4MDApOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1
QjU6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9y
dCBhcmdiID0gKih1bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDIgKiBpICsgaiAqIGlucHV0UGl0
Y2gpOworCisgICAgICAgICAgICAgICAgICAgIGEgPSAoYXJnYiAmIDB4ODAwMCkgPyAxLjBmIDog
MC4wZjsKKyAgICAgICAgICAgICAgICAgICAgYiA9IChhcmdiICYgMHgwMDFGKSAqICgxLjBmIC8g
MHgwMDFGKTsKKyAgICAgICAgICAgICAgICAgICAgZyA9IChhcmdiICYgMHgwM0UwKSAqICgxLjBm
IC8gMHgwM0UwKTsKKyAgICAgICAgICAgICAgICAgICAgciA9IChhcmdiICYgMHg3QzAwKSAqICgx
LjBmIC8gMHg3QzAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFyZ2IgPSAqKHVuc2lnbmVkIGludCop
KHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOworCisgICAgICAgICAgICAgICAgICAg
IGEgPSAoYXJnYiAmIDB4RkYwMDAwMDApICogKDEuMGYgLyAweEZGMDAwMDAwKTsKKyAgICAgICAg
ICAgICAgICAgICAgYiA9IChhcmdiICYgMHgwMDAwMDBGRikgKiAoMS4wZiAvIDB4MDAwMDAwRkYp
OworICAgICAgICAgICAgICAgICAgICBnID0gKGFyZ2IgJiAweDAwMDBGRjAwKSAqICgxLjBmIC8g
MHgwMDAwRkYwMCk7CisgICAgICAgICAgICAgICAgICAgIHIgPSAoYXJnYiAmIDB4MDBGRjAwMDAp
ICogKDEuMGYgLyAweDAwRkYwMDAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHhyZ2IgPSAqKHVuc2ln
bmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOworCisgICAgICAgICAg
ICAgICAgICAgIGEgPSAxLjBmOworICAgICAgICAgICAgICAgICAgICBiID0gKHhyZ2IgJiAweDAw
MDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBGRik7CisgICAgICAgICAgICAgICAgICAgIGcgPSAo
eHJnYiAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAweDAwMDBGRjAwKTsKKyAgICAgICAgICAgICAg
ICAgICAgciA9ICh4cmdiICYgMHgwMEZGMDAwMCkgKiAoMS4wZiAvIDB4MDBGRjAwMDApOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBEM0RGTVRfQTJSMTBHMTBCMTA6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkg
KyBqICogaW5wdXRQaXRjaCk7CisKKyAgICAgICAgICAgICAgICAgICAgYSA9IChhcmdiICYgMHhD
MDAwMDAwMCkgKiAoMS4wZiAvIDB4QzAwMDAwMDApOworICAgICAgICAgICAgICAgICAgICBiID0g
KGFyZ2IgJiAweDAwMDAwM0ZGKSAqICgxLjBmIC8gMHgwMDAwMDNGRik7CisgICAgICAgICAgICAg
ICAgICAgIGcgPSAoYXJnYiAmIDB4MDAwRkZDMDApICogKDEuMGYgLyAweDAwMEZGQzAwKTsKKyAg
ICAgICAgICAgICAgICAgICAgciA9IChhcmdiICYgMHgzRkYwMDAwMCkgKiAoMS4wZiAvIDB4M0ZG
MDAwMDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0IGZvcm1hdHMgaW4gRDNEIGFyZSBzdG9yZWQgcmdi
YSwgcmF0aGVyIHRoYW4gdGhlIG90aGVyIHdheSByb3VuZAorICAgICAgICAgICAgICAgICAgICBy
ID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAwKTsKKyAg
ICAgICAgICAgICAgICAgICAgZyA9ICooKGZsb2F0Kikoc291cmNlICsgMTYgKiBpICsgaiAqIGlu
cHV0UGl0Y2gpICsgMSk7CisgICAgICAgICAgICAgICAgICAgIGIgPSAqKChmbG9hdCopKHNvdXJj
ZSArIDE2ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDIpOworICAgICAgICAgICAgICAgICAgICBh
ID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAzKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAvLyBmbG9hdCBmb3JtYXRzIGluIEQzRCBhcmUgc3RvcmVkIHJnYmEsIHJhdGhlciB0
aGFuIHRoZSBvdGhlciB3YXkgcm91bmQKKyAgICAgICAgICAgICAgICAgICAgciA9IGdsOjpmbG9h
dDE2VG9GbG9hdDMyKCooKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsgOCAqIGkgKyBqICogaW5w
dXRQaXRjaCkgKyAwKSk7CisgICAgICAgICAgICAgICAgICAgIGcgPSBnbDo6ZmxvYXQxNlRvRmxv
YXQzMigqKCh1bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDggKiBpICsgaiAqIGlucHV0UGl0Y2gp
ICsgMSkpOworICAgICAgICAgICAgICAgICAgICBiID0gZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKigo
dW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyA4ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDIpKTsK
KyAgICAgICAgICAgICAgICAgICAgYSA9IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCooKHVuc2lnbmVk
IHNob3J0Kikoc291cmNlICsgOCAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAzKSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorICAgICAgICAg
ICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6
CisgICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAwXSA9
ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiByICsgMC41Zik7CisgICAgICAgICAgICAgICAgICAgIGRl
c3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBn
ICsgMC41Zik7CisgICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0
Y2ggKyAyXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBiICsgMC41Zik7CisgICAgICAgICAgICAg
ICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAzXSA9ICh1bnNpZ25lZCBjaGFy
KSgyNTUgKiBhICsgMC41Zik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6CisgICAg
ICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0
ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDBdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGIgKyAw
LjVmKTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCAr
IDFdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGcgKyAwLjVmKTsKKyAgICAgICAgICAgICAgICAg
ICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDJdID0gKHVuc2lnbmVkIGNoYXIpKDI1
NSAqIHIgKyAwLjVmKTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRw
dXRQaXRjaCArIDNdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGEgKyAwLjVmKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NI
T1JUXzRfNF80XzRfUkVWX0VYVDoKKyAgICAgICAgICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRv
IHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhlICJUcmFuc2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVz
IiBzZWN0aW9uCisgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgdHlwZSBpcyBwYWNrZWQgYXMg
Zm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgLy8gICAxNSAgIDE0ICAgMTMgICAxMiAgIDEx
ICAgMTAgICAgOSAgICA4ICAgIDcgICAgNiAgICA1ICAgIDQgICAgMyAgICAyICAgIDEgICAgMAor
ICAgICAgICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAg
ICAgICAgICAgICAgLy8gfCAgICAgICA0dGggICAgICAgICB8ICAgICAgICAzcmQgICAgICAgICB8
ICAgICAgICAybmQgICAgICAgIHwgICAxc3QgY29tcG9uZW50ICAgfAorICAgICAgICAgICAgICAg
ICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgLy8g
aW4gdGhlIGNhc2Ugb2YgQkdSQV9FWFQsIEIgaXMgdGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUg
c2Vjb25kLCBhbmQgc28gZm9ydGguCisgICAgICAgICAgICAgICAgICAgIGRlc3QxNltpICsgaiAq
IG91dHB1dFBpdGNoIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KV0gPQorICAgICAgICAgICAgICAg
ICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUgKiBhICsgMC41ZikgPDwgMTIpfAorICAgICAg
ICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUgKiByICsgMC41ZikgPDwgOCkg
fAorICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUgKiBnICsgMC41
ZikgPDwgNCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUg
KiBiICsgMC41ZikgPDwgMCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQ6CisgICAgICAg
ICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgZGVza3RvcCBHTCBzcGVjIGluIHRoZSAi
VHJhbnNmZXIgb2YgUGl4ZWwgUmVjdGFuZ2xlcyIgc2VjdGlvbgorICAgICAgICAgICAgICAgICAg
ICAvLyB0aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAg
IC8vICAgMTUgICAxNCAgIDEzICAgMTIgICAxMSAgIDEwICAgIDkgICAgOCAgICA3ICAgIDYgICAg
NSAgICA0ICAgIDMgICAgMiAgICAxICAgIDAKKyAgICAgICAgICAgICAgICAgICAgLy8gIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgIC8vIHwgNHRoIHwgICAgICAg
ICAgM3JkICAgICAgICAgICB8ICAgICAgICAgICAybmQgICAgICAgICAgfCAgICAgIDFzdCBjb21w
b25lbnQgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisgICAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSBjYXNlIG9mIEJHUkFfRVhULCBCIGlz
IHRoZSBmaXJzdCBjb21wb25lbnQsIEcgdGhlIHNlY29uZCwgYW5kIHNvIGZvcnRoLgorICAgICAg
ICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25l
ZCBzaG9ydCldID0KKyAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKCAg
ICAgYSArIDAuNWYpIDw8IDE1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVk
IHNob3J0KSgzMSAqIHIgKyAwLjVmKSA8PCAxMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAg
KCh1bnNpZ25lZCBzaG9ydCkoMzEgKiBnICsgMC41ZikgPDwgNSkgfAorICAgICAgICAgICAgICAg
ICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiBiICsgMC41ZikgPDwgMCk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfUkdCOgorICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVf
Nl81OgorICAgICAgICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRwdXRQaXRjaCAvIHNp
emVvZih1bnNpZ25lZCBzaG9ydCldID0gCisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2ln
bmVkIHNob3J0KSgzMSAqIGIgKyAwLjVmKSA8PCAwKSB8CisgICAgICAgICAgICAgICAgICAgICAg
ICAoKHVuc2lnbmVkIHNob3J0KSg2MyAqIGcgKyAwLjVmKSA8PCA1KSB8CisgICAgICAgICAgICAg
ICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIHIgKyAwLjVmKSA8PCAxMSk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05F
RF9CWVRFOgorICAgICAgICAgICAgICAgICAgICBkZXN0WzMgKiBpICsgaiAqIG91dHB1dFBpdGNo
ICsgMF0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogciArIDAuNWYpOworICAgICAgICAgICAgICAg
ICAgICBkZXN0WzMgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMV0gPSAodW5zaWduZWQgY2hhciko
MjU1ICogZyArIDAuNWYpOworICAgICAgICAgICAgICAgICAgICBkZXN0WzMgKiBpICsgaiAqIG91
dHB1dFBpdGNoICsgMl0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYiArIDAuNWYpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgc3lzdGVtU3VyZmFjZS0+VW5sb2NrUmVjdCgpOworCisgICAgc3lzdGVt
U3VyZmFjZS0+UmVsZWFzZSgpOworfQorCitSZW5kZXJUYXJnZXQgKlJlbmRlcmVyOTo6Y3JlYXRl
UmVuZGVyVGFyZ2V0KFN3YXBDaGFpbiAqc3dhcENoYWluLCBib29sIGRlcHRoKQoreworICAgIFN3
YXBDaGFpbjkgKnN3YXBDaGFpbjkgPSBTd2FwQ2hhaW45OjptYWtlU3dhcENoYWluOShzd2FwQ2hh
aW4pOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gTlVMTDsKKyAgICBpZiAoZGVw
dGgpCisgICAgeworICAgICAgICBzdXJmYWNlID0gc3dhcENoYWluOS0+Z2V0RGVwdGhTdGVuY2ls
KCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHN1cmZhY2UgPSBzd2FwQ2hhaW45
LT5nZXRSZW5kZXJUYXJnZXQoKTsKKyAgICB9CisKKyAgICBSZW5kZXJUYXJnZXQ5ICpyZW5kZXJU
YXJnZXQgPSBuZXcgUmVuZGVyVGFyZ2V0OSh0aGlzLCBzdXJmYWNlKTsKKworICAgIHJldHVybiBy
ZW5kZXJUYXJnZXQ7Cit9CisKK1JlbmRlclRhcmdldCAqUmVuZGVyZXI5OjpjcmVhdGVSZW5kZXJU
YXJnZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBs
ZXMsIGJvb2wgZGVwdGgpCit7CisgICAgUmVuZGVyVGFyZ2V0OSAqcmVuZGVyVGFyZ2V0ID0gbmV3
IFJlbmRlclRhcmdldDkodGhpcywgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBzYW1wbGVzKTsKKyAg
ICByZXR1cm4gcmVuZGVyVGFyZ2V0OworfQorCitTaGFkZXJFeGVjdXRhYmxlICpSZW5kZXJlcjk6
OmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCByeDo6
U2hhZGVyVHlwZSB0eXBlKQoreworICAgIFNoYWRlckV4ZWN1dGFibGU5ICpleGVjdXRhYmxlID0g
TlVMTDsKKworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIHJ4OjpTSEFERVJf
VkVSVEVYOgorICAgICAgICB7CisgICAgICAgICAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICp2
c2hhZGVyID0gY3JlYXRlVmVydGV4U2hhZGVyKChEV09SRCopZnVuY3Rpb24sIGxlbmd0aCk7Cisg
ICAgICAgICAgICBpZiAodnNoYWRlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBl
eGVjdXRhYmxlID0gbmV3IFNoYWRlckV4ZWN1dGFibGU5KGZ1bmN0aW9uLCBsZW5ndGgsIHZzaGFk
ZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSByeDo6U0hBREVSX1BJWEVMOgorICAgICAgICB7CisgICAgICAgICAgICBJRGlyZWN0M0RQaXhl
bFNoYWRlcjkgKnBzaGFkZXIgPSBjcmVhdGVQaXhlbFNoYWRlcigoRFdPUkQqKWZ1bmN0aW9uLCBs
ZW5ndGgpOworICAgICAgICAgICAgaWYgKHBzaGFkZXIpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgZXhlY3V0YWJsZSA9IG5ldyBTaGFkZXJFeGVjdXRhYmxlOShmdW5jdGlvbiwgbGVu
Z3RoLCBwc2hhZGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIHJldHVybiBleGVjdXRhYmxlOworfQorCitTaGFkZXJFeGVjdXRhYmxlICpS
ZW5kZXJlcjk6OmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0
IGNoYXIgKnNoYWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsIEQzRFdvcmthcm91bmRUeXBl
IHdvcmthcm91bmQpCit7CisgICAgY29uc3QgY2hhciAqcHJvZmlsZSA9IE5VTEw7CisKKyAgICBz
d2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSByeDo6U0hBREVSX1ZFUlRFWDoKKyAgICAg
ICAgcHJvZmlsZSA9IGdldE1ham9yU2hhZGVyTW9kZWwoKSA+PSAzID8gInZzXzNfMCIgOiAidnNf
Ml8wIjsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIHJ4OjpTSEFERVJfUElYRUw6CisgICAg
ICAgIHByb2ZpbGUgPSBnZXRNYWpvclNoYWRlck1vZGVsKCkgPj0gMyA/ICJwc18zXzAiIDogInBz
XzJfMCI7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLy8gQU5HTEUgaXNzdWUg
NDg2OgorICAgIC8vIFdvcmstYXJvdW5kIGEgRDNEOSBjb21waWxlciBidWcgdGhhdCBwcmVzZW50
cyBpdHNlbGYgd2hlbiB1c2luZyBjb25kaXRpb25hbCBkaXNjYXJkLCBieSBkaXNhYmxpbmcgb3B0
aW1pemF0aW9uCisgICAgVUlOVCBvcHRpbWl6YXRpb25GbGFncyA9ICh3b3JrYXJvdW5kID09IEFO
R0xFX0QzRF9XT1JLQVJPVU5EX1NNM19PUFRJTUlaRVIgPyBEM0RDT01QSUxFX1NLSVBfT1BUSU1J
WkFUSU9OIDogQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwpOworCisgICAgSUQzREJs
b2IgKmJpbmFyeSA9IChJRDNEQmxvYiopY29tcGlsZVRvQmluYXJ5KGluZm9Mb2csIHNoYWRlckhM
U0wsIHByb2ZpbGUsIG9wdGltaXphdGlvbkZsYWdzLCB0cnVlKTsKKyAgICBpZiAoIWJpbmFyeSkK
KyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBTaGFkZXJFeGVjdXRhYmxlICpleGVjdXRhYmxl
ID0gbG9hZEV4ZWN1dGFibGUoYmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksIGJpbmFyeS0+R2V0
QnVmZmVyU2l6ZSgpLCB0eXBlKTsKKyAgICBiaW5hcnktPlJlbGVhc2UoKTsKKworICAgIHJldHVy
biBleGVjdXRhYmxlOworfQorCitib29sIFJlbmRlcmVyOTo6Ym94RmlsdGVyKElEaXJlY3QzRFN1
cmZhY2U5ICpzb3VyY2UsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0KQoreworICAgIHJldHVybiBt
QmxpdC0+Ym94RmlsdGVyKHNvdXJjZSwgZGVzdCk7Cit9CisKK0QzRFBPT0wgUmVuZGVyZXI5Ojpn
ZXRUZXh0dXJlUG9vbChEV09SRCB1c2FnZSkgY29uc3QKK3sKKyAgICBpZiAobUQzZDlFeCAhPSBO
VUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEQzRFBPT0xfREVGQVVMVDsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgaWYgKCEodXNhZ2UgJiAoRDNEVVNBR0VfREVQVEhTVEVOQ0lM
IHwgRDNEVVNBR0VfUkVOREVSVEFSR0VUKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBEM0RQT09MX01BTkFHRUQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gRDNEUE9P
TF9ERUZBVUxUOworfQorCitib29sIFJlbmRlcmVyOTo6Y29weVRvUmVuZGVyVGFyZ2V0KElEaXJl
Y3QzRFN1cmZhY2U5ICpkZXN0LCBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBib29sIGZyb21N
YW5hZ2VkKQoreworICAgIGlmIChzb3VyY2UgJiYgZGVzdCkKKyAgICB7CisgICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gRDNERVJSX09VVE9GVklERU9NRU1PUlk7CisKKyAgICAgICAgaWYgKGZyb21N
YW5hZ2VkKQorICAgICAgICB7CisgICAgICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKKyAg
ICAgICAgICAgIHNvdXJjZS0+R2V0RGVzYygmZGVzYyk7CisKKyAgICAgICAgICAgIElEaXJlY3Qz
RFN1cmZhY2U5ICpzdXJmID0gMDsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0
ZU9mZnNjcmVlblBsYWluU3VyZmFjZShkZXNjLldpZHRoLCBkZXNjLkhlaWdodCwgZGVzYy5Gb3Jt
YXQsIEQzRFBPT0xfU1lTVEVNTUVNLCAmc3VyZiwgTlVMTCk7CisKKyAgICAgICAgICAgIGlmIChT
VUNDRUVERUQocmVzdWx0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBJbWFnZTk6
OmNvcHlMb2NrYWJsZVN1cmZhY2VzKHN1cmYsIHNvdXJjZSk7CisgICAgICAgICAgICAgICAgcmVz
dWx0ID0gbURldmljZS0+VXBkYXRlU3VyZmFjZShzdXJmLCBOVUxMLCBkZXN0LCBOVUxMKTsKKyAg
ICAgICAgICAgICAgICBzdXJmLT5SZWxlYXNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBlbmRTY2VuZSgpOworICAgICAg
ICAgICAgcmVzdWx0ID0gbURldmljZS0+U3RyZXRjaFJlY3Qoc291cmNlLCBOVUxMLCBkZXN0LCBO
VUxMLCBEM0RURVhGX05PTkUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1
bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRP
RlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitJ
bWFnZSAqUmVuZGVyZXI5OjpjcmVhdGVJbWFnZSgpCit7CisgICAgcmV0dXJuIG5ldyBJbWFnZTko
KTsKK30KKwordm9pZCBSZW5kZXJlcjk6OmdlbmVyYXRlTWlwbWFwKEltYWdlICpkZXN0LCBJbWFn
ZSAqc3JjKQoreworICAgIEltYWdlOSAqc3JjOSA9IEltYWdlOTo6bWFrZUltYWdlOShzcmMpOwor
ICAgIEltYWdlOSAqZHN0OSA9IEltYWdlOTo6bWFrZUltYWdlOShkZXN0KTsKKyAgICBJbWFnZTk6
OmdlbmVyYXRlTWlwbWFwKGRzdDksIHNyYzkpOworfQorCitUZXh0dXJlU3RvcmFnZSAqUmVuZGVy
ZXI5OjpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKFN3YXBDaGFpbiAqc3dhcENoYWluKQoreworICAg
IFN3YXBDaGFpbjkgKnN3YXBDaGFpbjkgPSBTd2FwQ2hhaW45OjptYWtlU3dhcENoYWluOShzd2Fw
Q2hhaW4pOworICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2U5XzJEKHRoaXMsIHN3YXBDaGFp
bjkpOworfQorCitUZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXI5OjpjcmVhdGVUZXh0dXJlU3RvcmFn
ZTJEKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29s
IGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAg
cmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTlfMkQodGhpcywgbGV2ZWxzLCBpbnRlcm5hbGZvcm1h
dCwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK1RleHR1cmVT
dG9yYWdlICpSZW5kZXJlcjk6OmNyZWF0ZVRleHR1cmVTdG9yYWdlQ3ViZShpbnQgbGV2ZWxzLCBH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUs
IGludCBzaXplKQoreworICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2U5X0N1YmUodGhpcywg
bGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSwgc2l6ZSk7Cit9
CisKK2Jvb2wgUmVuZGVyZXI5OjpnZXRMVUlEKExVSUQgKmFkYXB0ZXJMdWlkKSBjb25zdAorewor
ICAgIGFkYXB0ZXJMdWlkLT5IaWdoUGFydCA9IDA7CisgICAgYWRhcHRlckx1aWQtPkxvd1BhcnQg
PSAwOworCisgICAgaWYgKG1EM2Q5RXgpCisgICAgeworICAgICAgICBtRDNkOUV4LT5HZXRBZGFw
dGVyTFVJRChtQWRhcHRlciwgYWRhcHRlckx1aWQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJl
cjkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4yNGZkMmJkZDg0YWVmODRkMzJkZjFhZjcyNTRlZDI3OTM1OTU4NzQy
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oCkBAIC0wLDAgKzEsMzU2IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisvLyBSZW5kZXJlcjkuaDogRGVmaW5lcyBhIGJhY2stZW5kIHNwZWNpZmljIGNs
YXNzIGZvciB0aGUgRDNEOSByZW5kZXJlci4KKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJf
UkVOREVSRVI5X0hfCisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjlfSF8KKwor
I2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL21hdGh1
dGlsLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckNhY2hlLmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4RGVjbGFyYXRpb25DYWNoZS5oIgor
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQuaCIKKworbmFtZXNwYWNlIGdsCit7CitjbGFzcyBS
ZW5kZXJidWZmZXI7Cit9CisKK25hbWVzcGFjZSByeAoreworY2xhc3MgVmVydGV4RGF0YU1hbmFn
ZXI7CitjbGFzcyBJbmRleERhdGFNYW5hZ2VyOworY2xhc3MgU3RyZWFtaW5nSW5kZXhCdWZmZXJJ
bnRlcmZhY2U7CitzdHJ1Y3QgVHJhbnNsYXRlZEF0dHJpYnV0ZTsKKworY2xhc3MgUmVuZGVyZXI5
IDogcHVibGljIFJlbmRlcmVyCit7CisgIHB1YmxpYzoKKyAgICBSZW5kZXJlcjkoZWdsOjpEaXNw
bGF5ICpkaXNwbGF5LCBIREMgaERjLCBib29sIHNvZnR3YXJlRGV2aWNlKTsKKyAgICB2aXJ0dWFs
IH5SZW5kZXJlcjkoKTsKKworICAgIHN0YXRpYyBSZW5kZXJlcjkgKm1ha2VSZW5kZXJlcjkoUmVu
ZGVyZXIgKnJlbmRlcmVyKTsKKworICAgIHZpcnR1YWwgRUdMaW50IGluaXRpYWxpemUoKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgcmVzZXREZXZpY2UoKTsKKworICAgIHZpcnR1YWwgaW50IGdlbmVyYXRl
Q29uZmlncyhDb25maWdEZXNjICoqY29uZmlnRGVzY0xpc3QpOworICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVDb25maWdzKENvbmZpZ0Rlc2MgKmNvbmZpZ0Rlc2NMaXN0KTsKKworICAgIHZvaWQgc3Rh
cnRTY2VuZSgpOworICAgIHZvaWQgZW5kU2NlbmUoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzeW5j
KGJvb2wgYmxvY2spOworCisgICAgdmlydHVhbCBTd2FwQ2hhaW4gKmNyZWF0ZVN3YXBDaGFpbihI
V05EIHdpbmRvdywgSEFORExFIHNoYXJlSGFuZGxlLCBHTGVudW0gYmFja0J1ZmZlckZvcm1hdCwg
R0xlbnVtIGRlcHRoQnVmZmVyRm9ybWF0KTsKKworICAgIElEaXJlY3QzRFF1ZXJ5OSogYWxsb2Nh
dGVFdmVudFF1ZXJ5KCk7CisgICAgdm9pZCBmcmVlRXZlbnRRdWVyeShJRGlyZWN0M0RRdWVyeTkq
IHF1ZXJ5KTsKKworICAgIC8vIHJlc291cmNlIGNyZWF0aW9uCisgICAgSURpcmVjdDNEVmVydGV4
U2hhZGVyOSAqY3JlYXRlVmVydGV4U2hhZGVyKGNvbnN0IERXT1JEICpmdW5jdGlvbiwgc2l6ZV90
IGxlbmd0aCk7CisgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpjcmVhdGVQaXhlbFNoYWRlcihj
b25zdCBEV09SRCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgpOworICAgIEhSRVNVTFQgY3JlYXRl
VmVydGV4QnVmZmVyKFVJTlQgTGVuZ3RoLCBEV09SRCBVc2FnZSwgSURpcmVjdDNEVmVydGV4QnVm
ZmVyOSAqKnBwVmVydGV4QnVmZmVyKTsKKyAgICBIUkVTVUxUIGNyZWF0ZUluZGV4QnVmZmVyKFVJ
TlQgTGVuZ3RoLCBEV09SRCBVc2FnZSwgRDNERk9STUFUIEZvcm1hdCwgSURpcmVjdDNESW5kZXhC
dWZmZXI5ICoqcHBJbmRleEJ1ZmZlcik7CisjaWYgMAorICAgIHZvaWQgKmNyZWF0ZVRleHR1cmUy
RCgpOworICAgIHZvaWQgKmNyZWF0ZVRleHR1cmVDdWJlKCk7CisgICAgdm9pZCAqY3JlYXRlUXVl
cnkoKTsKKyAgICB2b2lkICpjcmVhdGVJbmRleEJ1ZmZlcigpOworICAgIHZvaWQgKmNyZWF0ZVZl
cnRleGJ1ZmZlcigpOworCisgICAgLy8gc3RhdGUgc2V0dXAKKyAgICB2b2lkIGFwcGx5U2hhZGVy
cygpOworICAgIHZvaWQgYXBwbHlDb25zdGFudHMoKTsKKyNlbmRpZgorICAgIHZpcnR1YWwgdm9p
ZCBzZXRTYW1wbGVyU3RhdGUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRleCwgY29uc3Qg
Z2w6OlNhbXBsZXJTdGF0ZSAmc2FtcGxlcik7CisgICAgdmlydHVhbCB2b2lkIHNldFRleHR1cmUo
Z2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRleCwgZ2w6OlRleHR1cmUgKnRleHR1cmUpOwor
CisgICAgdmlydHVhbCB2b2lkIHNldFJhc3Rlcml6ZXJTdGF0ZShjb25zdCBnbDo6UmFzdGVyaXpl
clN0YXRlICZyYXN0ZXJTdGF0ZSk7CisgICAgdmlydHVhbCB2b2lkIHNldEJsZW5kU3RhdGUoZ2w6
OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3Rh
dGUsIGNvbnN0IGdsOjpDb2xvciAmYmxlbmRDb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlTWFzayk7CisgICAgdmlydHVhbCB2b2lkIHNldERl
cHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmZGVwdGhTdGVuY2ls
U3RhdGUsIGludCBzdGVuY2lsUmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgc3RlbmNpbEJhY2tSZWYsIGJvb2wgZnJvbnRGYWNlQ0NXKTsKKworICAgIHZpcnR1
YWwgdm9pZCBzZXRTY2lzc29yUmVjdGFuZ2xlKGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNjaXNzb3Is
IGJvb2wgZW5hYmxlZCk7CisgICAgdmlydHVhbCBib29sIHNldFZpZXdwb3J0KGNvbnN0IGdsOjpS
ZWN0YW5nbGUgJnZpZXdwb3J0LCBmbG9hdCB6TmVhciwgZmxvYXQgekZhciwgR0xlbnVtIGRyYXdN
b2RlLCBHTGVudW0gZnJvbnRGYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGlnbm9yZVZpZXdwb3J0KTsKKworICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlbmRlclRhcmdldChn
bDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTaGFk
ZXJzKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KTsKKyAgICB2aXJ0dWFsIHZvaWQg
YXBwbHlVbmlmb3JtcyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlVuaWZv
cm1BcnJheSAqdW5pZm9ybUFycmF5KTsKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHlQcmltaXRpdmVU
eXBlKEdMZW51bSBwcmltaXRpdmVUeXBlLCBHTHNpemVpIGVsZW1lbnRDb3VudCk7CisgICAgdmly
dHVhbCBHTGVudW0gYXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1C
aW5hcnksIGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmlidXRlc1tdLCBHTGludCBmaXJz
dCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpOworICAgIHZpcnR1YWwgR0xlbnVt
IGFwcGx5SW5kZXhCdWZmZXIoY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVt
ZW50QXJyYXlCdWZmZXIsIEdMc2l6ZWkgY291bnQsIEdMZW51bSBtb2RlLCBHTGVudW0gdHlwZSwg
VHJhbnNsYXRlZEluZGV4RGF0YSAqaW5kZXhJbmZvKTsKKworICAgIHZpcnR1YWwgdm9pZCBkcmF3
QXJyYXlzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcyk7Cisg
ICAgdmlydHVhbCB2b2lkIGRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwg
R0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgZ2w6OkJ1ZmZlciAqZWxlbWVudEFy
cmF5QnVmZmVyLCBjb25zdCBUcmFuc2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8sIEdMc2l6ZWkg
aW5zdGFuY2VzKTsKKworICAgIHZpcnR1YWwgdm9pZCBjbGVhcihjb25zdCBnbDo6Q2xlYXJQYXJh
bWV0ZXJzICZjbGVhclBhcmFtcywgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcik7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgbWFya0FsbFN0YXRlRGlydHkoKTsKKworICAgIC8vIGxvc3QgZGV2aWNl
CisgICAgdm9pZCBub3RpZnlEZXZpY2VMb3N0KCk7CisgICAgdmlydHVhbCBib29sIGlzRGV2aWNl
TG9zdCgpOworICAgIHZpcnR1YWwgYm9vbCB0ZXN0RGV2aWNlTG9zdChib29sIG5vdGlmeSk7Cisg
ICAgdmlydHVhbCBib29sIHRlc3REZXZpY2VSZXNldHRhYmxlKCk7CisKKyAgICAvLyBSZW5kZXJl
ciBjYXBhYmlsaXRpZXMKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpnZXREZXZpY2UoKSB7IHJldHVy
biBtRGV2aWNlOyB9CisgICAgdmlydHVhbCBEV09SRCBnZXRBZGFwdGVyVmVuZG9yKCkgY29uc3Q7
CisgICAgdmlydHVhbCBzdGQ6OnN0cmluZyBnZXRSZW5kZXJlckRlc2NyaXB0aW9uKCkgY29uc3Q7
CisgICAgdmlydHVhbCBHVUlEIGdldEFkYXB0ZXJJZGVudGlmaWVyKCkgY29uc3Q7CisKKyAgICB2
aXJ0dWFsIGJvb2wgZ2V0QkdSQVRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIGdldERYVDFUZXh0dXJlU3VwcG9ydCgpOworICAgIHZpcnR1YWwgYm9vbCBnZXREWFQzVGV4
dHVyZVN1cHBvcnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUNVRleHR1cmVTdXBwb3J0KCk7
CisgICAgdmlydHVhbCBib29sIGdldEV2ZW50UXVlcnlTdXBwb3J0KCk7CisgICAgdmlydHVhbCBi
b29sIGdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRl
cmFibGUpOworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoYm9vbCAq
ZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0THVtaW5h
bmNlVGV4dHVyZVN1cHBvcnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0THVtaW5hbmNlQWxwaGFU
ZXh0dXJlU3VwcG9ydCgpOworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFZlcnRleFRl
eHR1cmVJbWFnZVVuaXRzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4
Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQg
aW50IGdldFJlc2VydmVkVmVydGV4VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHVuc2lnbmVkIGludCBnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycygpIGNv
bnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heEZyYWdtZW50VW5pZm9ybVZlY3Rv
cnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWYXJ5aW5nVmVjdG9y
cygpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgp
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXREZXB0aFRleHR1cmVTdXBwb3J0KCkgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIGdldE9jY2x1c2lvblF1ZXJ5U3VwcG9ydCgpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBnZXRJbnN0YW5jaW5nU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwg
Ym9vbCBnZXRUZXh0dXJlRmlsdGVyQW5pc290cm9weVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGZsb2F0IGdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIGdldFNoYXJlSGFuZGxlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRE
ZXJpdmF0aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdl
dFBvc3RTdWJCdWZmZXJTdXBwb3J0KCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGludCBnZXRNYWpv
clNoYWRlck1vZGVsKCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBnZXRNYXhQb2ludFNpemUo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBnZXRNYXhWaWV3cG9ydERpbWVuc2lvbigpIGNvbnN0
OworICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1cmVXaWR0aCgpIGNvbnN0OworICAgIHZpcnR1
YWwgaW50IGdldE1heFRleHR1cmVIZWlnaHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0
MzJCaXRJbmRleFN1cHBvcnQoKSBjb25zdDsKKyAgICBEV09SRCBnZXRDYXBzRGVjbFR5cGVzKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWluU3dhcEludGVydmFsKCkgY29uc3Q7CisgICAg
dmlydHVhbCBpbnQgZ2V0TWF4U3dhcEludGVydmFsKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIEdM
c2l6ZWkgZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpIGNvbnN0OworICAgIGludCBnZXROZWFyZXN0
U3VwcG9ydGVkU2FtcGxlcyhEM0RGT1JNQVQgZm9ybWF0LCBpbnQgcmVxdWVzdGVkKSBjb25zdDsK
KyAgICAKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhSZW5kZXJUYXJnZXRzKCkgY29u
c3Q7CisKKyAgICBEM0RGT1JNQVQgQ29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChHTGludCBp
bnRlcm5hbGZvcm1hdCk7CisKKyAgICAvLyBQaXhlbCBvcGVyYXRpb25zCisgICAgdmlydHVhbCBi
b29sIGNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpkZXN0LCBU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzb3VyY2UpOworICAgIHZpcnR1YWwgYm9vbCBjb3B5
VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpkZXN0LCBUZXh0dXJl
U3RvcmFnZUludGVyZmFjZUN1YmUgKnNvdXJjZSk7CisKKyAgICB2aXJ0dWFsIGJvb2wgY29weUlt
YWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNv
dXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAq
c3RvcmFnZSwgR0xpbnQgbGV2ZWwpOworICAgIHZpcnR1YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6OkZy
YW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVjdCwg
R0xlbnVtIGRlc3RGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2Us
IEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKTsKKworICAgIHZpcnR1YWwgYm9vbCBibGl0UmVj
dChnbDo6RnJhbWVidWZmZXIgKnJlYWRUYXJnZXQsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRS
ZWN0LCBnbDo6RnJhbWVidWZmZXIgKmRyYXdUYXJnZXQsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRy
YXdSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJsaXRSZW5kZXJUYXJnZXQs
IGJvb2wgYmxpdERlcHRoU3RlbmNpbCk7CisgICAgdmlydHVhbCB2b2lkIHJlYWRQaXhlbHMoZ2w6
OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2gsIGJvb2wgcGFja1JldmVyc2VS
b3dPcmRlciwgR0xpbnQgcGFja0FsaWdubWVudCwgdm9pZCogcGl4ZWxzKTsKKworICAgIC8vIFJl
bmRlclRhcmdldCBjcmVhdGlvbgorICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5k
ZXJUYXJnZXQoU3dhcENoYWluICpzd2FwQ2hhaW4sIGJvb2wgZGVwdGgpOworICAgIHZpcnR1YWwg
UmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMsIGJvb2wgZGVwdGgpOworCisgICAgLy8gU2hh
ZGVyIG9wZXJhdGlvbnMKKyAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1dGFibGUgKmxvYWRFeGVjdXRh
YmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCByeDo6U2hhZGVyVHlwZSB0
eXBlKTsKKyAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1dGFibGUgKmNvbXBpbGVUb0V4ZWN1dGFibGUo
Z2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRlckhMU0wsIHJ4OjpTaGFkZXJU
eXBlIHR5cGUsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91bmQpOworCisgICAgLy8gSW1hZ2Ug
b3BlcmF0aW9ucworICAgIHZpcnR1YWwgSW1hZ2UgKmNyZWF0ZUltYWdlKCk7CisgICAgdmlydHVh
bCB2b2lkIGdlbmVyYXRlTWlwbWFwKEltYWdlICpkZXN0LCBJbWFnZSAqc291cmNlKTsKKyAgICB2
aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKFN3YXBDaGFpbiAq
c3dhcENoYWluKTsKKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3Rv
cmFnZTJEKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBi
b29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAg
IHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlQ3ViZShpbnQgbGV2
ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRl
cmFibGUsIGludCBzaXplKTsKKworICAgIC8vIEJ1ZmZlciBjcmVhdGlvbgorICAgIHZpcnR1YWwg
VmVydGV4QnVmZmVyICpjcmVhdGVWZXJ0ZXhCdWZmZXIoKTsKKyAgICB2aXJ0dWFsIEluZGV4QnVm
ZmVyICpjcmVhdGVJbmRleEJ1ZmZlcigpOworICAgIHZpcnR1YWwgQnVmZmVyU3RvcmFnZSAqY3Jl
YXRlQnVmZmVyU3RvcmFnZSgpOworCisgICAgLy8gUXVlcnkgYW5kIEZlbmNlIGNyZWF0aW9uCisg
ICAgdmlydHVhbCBRdWVyeUltcGwgKmNyZWF0ZVF1ZXJ5KEdMZW51bSB0eXBlKTsKKyAgICB2aXJ0
dWFsIEZlbmNlSW1wbCAqY3JlYXRlRmVuY2UoKTsKKworICAgIC8vIEQzRDktcmVuZGVyZXIgc3Bl
Y2lmaWMgbWV0aG9kcworICAgIGJvb2wgYm94RmlsdGVyKElEaXJlY3QzRFN1cmZhY2U5ICpzb3Vy
Y2UsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0KTsKKworICAgIEQzRFBPT0wgZ2V0VGV4dHVyZVBv
b2woRFdPUkQgdXNhZ2UpIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIGdldExVSUQoTFVJRCAq
YWRhcHRlckx1aWQpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRf
QVNTSUdOKFJlbmRlcmVyOSk7CisKKyAgICB2b2lkIGRlaW5pdGlhbGl6ZSgpOworCisgICAgdm9p
ZCBhcHBseVVuaWZvcm1uZnYoZ2w6OlVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMZmxv
YXQgKnYpOworICAgIHZvaWQgYXBwbHlVbmlmb3Jtbml2KGdsOjpVbmlmb3JtICp0YXJnZXRVbmlm
b3JtLCBjb25zdCBHTGludCAqdik7CisgICAgdm9pZCBhcHBseVVuaWZvcm1uYnYoZ2w6OlVuaWZv
cm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMaW50ICp2KTsKKworICAgIHZvaWQgZHJhd0xpbmVM
b29wKEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGlu
dCBtaW5JbmRleCwgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyKTsKKyAgICB2b2lkIGRy
YXdJbmRleGVkUG9pbnRzKEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQg
KmluZGljZXMsIGludCBtaW5JbmRleCwgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyKTsK
KworICAgIHZvaWQgZ2V0TXVsdGlTYW1wbGVTdXBwb3J0KEQzREZPUk1BVCBmb3JtYXQsIGJvb2wg
Km11bHRpU2FtcGxlQXJyYXkpOworICAgIGJvb2wgY29weVRvUmVuZGVyVGFyZ2V0KElEaXJlY3Qz
RFN1cmZhY2U5ICpkZXN0LCBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBib29sIGZyb21NYW5h
Z2VkKTsKKyAgICBnbDo6UmVuZGVyYnVmZmVyICpnZXROdWxsQ29sb3JidWZmZXIoZ2w6OlJlbmRl
cmJ1ZmZlciAqZGVwdGhidWZmZXIpOworCisgICAgRDNEUE9PTCBnZXRCdWZmZXJQb29sKERXT1JE
IHVzYWdlKSBjb25zdDsKKworICAgIEhNT0RVTEUgbUQzZDlNb2R1bGU7CisgICAgSERDIG1EYzsK
KworICAgIHZvaWQgaW5pdGlhbGl6ZURldmljZSgpOworICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVS
UyBnZXREZWZhdWx0UHJlc2VudFBhcmFtZXRlcnMoKTsKKyAgICB2b2lkIHJlbGVhc2VEZXZpY2VS
ZXNvdXJjZXMoKTsKKworICAgIEhSRVNVTFQgZ2V0RGV2aWNlU3RhdHVzQ29kZSgpOworICAgIGJv
b2wgaXNSZW1vdmVkRGV2aWNlUmVzZXR0YWJsZSgpIGNvbnN0OworICAgIGJvb2wgcmVzZXRSZW1v
dmVkRGV2aWNlKCk7CisKKyAgICBVSU5UIG1BZGFwdGVyOworICAgIEQzRERFVlRZUEUgbURldmlj
ZVR5cGU7CisgICAgYm9vbCBtU29mdHdhcmVEZXZpY2U7ICAgLy8gRklYTUU6IERlcHJlY2F0ZQor
ICAgIElEaXJlY3QzRDkgKm1EM2Q5OyAgLy8gQWx3YXlzIHZhbGlkIGFmdGVyIHN1Y2Nlc3NmdWwg
aW5pdGlhbGl6YXRpb24uCisgICAgSURpcmVjdDNEOUV4ICptRDNkOUV4OyAgLy8gTWlnaHQgYmUg
bnVsbCBpZiBEM0Q5RXggaXMgbm90IHN1cHBvcnRlZC4KKyAgICBJRGlyZWN0M0REZXZpY2U5ICpt
RGV2aWNlOworICAgIElEaXJlY3QzRERldmljZTlFeCAqbURldmljZUV4OyAgLy8gTWlnaHQgYmUg
bnVsbCBpZiBEM0Q5RXggaXMgbm90IHN1cHBvcnRlZC4KKworICAgIEJsaXQgKm1CbGl0OworCisg
ICAgSFdORCBtRGV2aWNlV2luZG93OworCisgICAgYm9vbCBtRGV2aWNlTG9zdDsKKyAgICBEM0RD
QVBTOSBtRGV2aWNlQ2FwczsKKyAgICBEM0RBREFQVEVSX0lERU5USUZJRVI5IG1BZGFwdGVySWRl
bnRpZmllcjsKKworICAgIEQzRFBSSU1JVElWRVRZUEUgbVByaW1pdGl2ZVR5cGU7CisgICAgaW50
IG1QcmltaXRpdmVDb3VudDsKKyAgICBHTHNpemVpIG1SZXBlYXREcmF3OworCisgICAgYm9vbCBt
U2NlbmVTdGFydGVkOworICAgIGJvb2wgbVN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZXM7CisgICAg
Ym9vbCBtU3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weTsKKyAgICBpbnQgbU1pblN3YXBJ
bnRlcnZhbDsKKyAgICBpbnQgbU1heFN3YXBJbnRlcnZhbDsKKworICAgIGJvb2wgbU9jY2x1c2lv
blF1ZXJ5U3VwcG9ydDsKKyAgICBib29sIG1FdmVudFF1ZXJ5U3VwcG9ydDsKKyAgICBib29sIG1W
ZXJ0ZXhUZXh0dXJlU3VwcG9ydDsKKworICAgIGJvb2wgbURlcHRoVGV4dHVyZVN1cHBvcnQ7CisK
KyAgICBib29sIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQ7CisgICAgYm9vbCBtRmxvYXQzMkZpbHRl
clN1cHBvcnQ7CisgICAgYm9vbCBtRmxvYXQzMlJlbmRlclN1cHBvcnQ7CisKKyAgICBib29sIG1G
bG9hdDE2VGV4dHVyZVN1cHBvcnQ7CisgICAgYm9vbCBtRmxvYXQxNkZpbHRlclN1cHBvcnQ7Cisg
ICAgYm9vbCBtRmxvYXQxNlJlbmRlclN1cHBvcnQ7CisKKyAgICBib29sIG1EWFQxVGV4dHVyZVN1
cHBvcnQ7CisgICAgYm9vbCBtRFhUM1RleHR1cmVTdXBwb3J0OworICAgIGJvb2wgbURYVDVUZXh0
dXJlU3VwcG9ydDsKKworICAgIGJvb2wgbUx1bWluYW5jZVRleHR1cmVTdXBwb3J0OworICAgIGJv
b2wgbUx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQ7CisKKyAgICBzdGQ6Om1hcDxEM0RGT1JN
QVQsIGJvb2wgKj4gbU11bHRpU2FtcGxlU3VwcG9ydDsKKyAgICBHTHNpemVpIG1NYXhTdXBwb3J0
ZWRTYW1wbGVzOworCisgICAgLy8gY3VycmVudCByZW5kZXIgdGFyZ2V0IHN0YXRlcworICAgIHVu
c2lnbmVkIGludCBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbDsKKyAgICB1bnNpZ25lZCBpbnQg
bUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbDsKKyAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRTdGVu
Y2lsYnVmZmVyU2VyaWFsOworICAgIGJvb2wgbURlcHRoU3RlbmNpbEluaXRpYWxpemVkOworICAg
IGJvb2wgbVJlbmRlclRhcmdldERlc2NJbml0aWFsaXplZDsKKyAgICByeDo6UmVuZGVyVGFyZ2V0
OjpEZXNjIG1SZW5kZXJUYXJnZXREZXNjOworICAgIHVuc2lnbmVkIGludCBtQ3VyU3RlbmNpbFNp
emU7CisgICAgdW5zaWduZWQgaW50IG1DdXJEZXB0aFNpemU7CisKKyAgICBJRGlyZWN0M0RTdGF0
ZUJsb2NrOSAqbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZTsKKworICAgIC8vIHByZXZpb3VzbHkgc2V0
IHJlbmRlciBzdGF0ZXMKKyAgICBib29sIG1Gb3JjZVNldERlcHRoU3RlbmNpbFN0YXRlOworICAg
IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSBtQ3VyRGVwdGhTdGVuY2lsU3RhdGU7CisgICAgaW50IG1D
dXJTdGVuY2lsUmVmOworICAgIGludCBtQ3VyU3RlbmNpbEJhY2tSZWY7CisgICAgYm9vbCBtQ3Vy
RnJvbnRGYWNlQ0NXOworCisgICAgYm9vbCBtRm9yY2VTZXRSYXN0ZXJTdGF0ZTsKKyAgICBnbDo6
UmFzdGVyaXplclN0YXRlIG1DdXJSYXN0ZXJTdGF0ZTsKKworICAgIGJvb2wgbUZvcmNlU2V0U2Np
c3NvcjsKKyAgICBnbDo6UmVjdGFuZ2xlIG1DdXJTY2lzc29yOworICAgIGJvb2wgbVNjaXNzb3JF
bmFibGVkOworCisgICAgYm9vbCBtRm9yY2VTZXRWaWV3cG9ydDsKKyAgICBnbDo6UmVjdGFuZ2xl
IG1DdXJWaWV3cG9ydDsKKyAgICBmbG9hdCBtQ3VyTmVhcjsKKyAgICBmbG9hdCBtQ3VyRmFyOwor
ICAgIGZsb2F0IG1DdXJEZXB0aEZyb250OworCisgICAgYm9vbCBtRm9yY2VTZXRCbGVuZFN0YXRl
OworICAgIGdsOjpCbGVuZFN0YXRlIG1DdXJCbGVuZFN0YXRlOworICAgIGdsOjpDb2xvciBtQ3Vy
QmxlbmRDb2xvcjsKKyAgICBHTHVpbnQgbUN1clNhbXBsZU1hc2s7CisKKyAgICAvLyBDdXJyZW50
bHkgYXBwbGllZCBzYW1wbGVyIHN0YXRlcworICAgIGJvb2wgbUZvcmNlU2V0VmVydGV4U2FtcGxl
clN0YXRlc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRT
XTsKKyAgICBnbDo6U2FtcGxlclN0YXRlIG1DdXJWZXJ0ZXhTYW1wbGVyU3RhdGVzW2dsOjpJTVBM
RU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOworCisgICAgYm9vbCBt
Rm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0ZXNbZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsK
KyAgICBnbDo6U2FtcGxlclN0YXRlIG1DdXJQaXhlbFNhbXBsZXJTdGF0ZXNbZ2w6Ok1BWF9URVhU
VVJFX0lNQUdFX1VOSVRTXTsKKworICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIHRleHR1cmVzCisg
ICAgdW5zaWduZWQgaW50IG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1tnbDo6SU1QTEVNRU5UQVRJ
T05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKKyAgICB1bnNpZ25lZCBpbnQgbUN1
clBpeGVsVGV4dHVyZVNlcmlhbHNbZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKKworICAg
IHVuc2lnbmVkIGludCBtQXBwbGllZElCU2VyaWFsOworICAgIHVuc2lnbmVkIGludCBtQXBwbGll
ZFByb2dyYW1CaW5hcnlTZXJpYWw7CisgICAgCisgICAgcng6OmR4X1ZlcnRleENvbnN0YW50cyBt
VmVydGV4Q29uc3RhbnRzOworICAgIHJ4OjpkeF9QaXhlbENvbnN0YW50cyBtUGl4ZWxDb25zdGFu
dHM7CisgICAgYm9vbCBtRHhVbmlmb3Jtc0RpcnR5OworCisgICAgLy8gQSBwb29sIG9mIGV2ZW50
IHF1ZXJpZXMgdGhhdCBhcmUgY3VycmVudGx5IHVudXNlZC4KKyAgICBzdGQ6OnZlY3RvcjxJRGly
ZWN0M0RRdWVyeTkqPiBtRXZlbnRRdWVyeVBvb2w7CisgICAgVmVydGV4U2hhZGVyQ2FjaGUgbVZl
cnRleFNoYWRlckNhY2hlOworICAgIFBpeGVsU2hhZGVyQ2FjaGUgbVBpeGVsU2hhZGVyQ2FjaGU7
CisKKyAgICBWZXJ0ZXhEYXRhTWFuYWdlciAqbVZlcnRleERhdGFNYW5hZ2VyOworICAgIFZlcnRl
eERlY2xhcmF0aW9uQ2FjaGUgbVZlcnRleERlY2xhcmF0aW9uQ2FjaGU7CisKKyAgICBJbmRleERh
dGFNYW5hZ2VyICptSW5kZXhEYXRhTWFuYWdlcjsKKyAgICBTdHJlYW1pbmdJbmRleEJ1ZmZlcklu
dGVyZmFjZSAqbUxpbmVMb29wSUI7CisKKyAgICBlbnVtIHsgTlVNX05VTExfQ09MT1JCVUZGRVJf
Q0FDSEVfRU5UUklFUyA9IDEyIH07CisgICAgc3RydWN0IE51bGxDb2xvcmJ1ZmZlckNhY2hlRW50
cnkKKyAgICB7CisgICAgICAgIFVJTlQgbHJ1Q291bnQ7CisgICAgICAgIGludCB3aWR0aDsKKyAg
ICAgICAgaW50IGhlaWdodDsKKyAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqYnVmZmVyOworICAg
IH0gbU51bGxDb2xvcmJ1ZmZlckNhY2hlW05VTV9OVUxMX0NPTE9SQlVGRkVSX0NBQ0hFX0VOVFJJ
RVNdOworICAgIFVJTlQgbU1heE51bGxDb2xvcmJ1ZmZlckxSVTsKKworfTsKKworfQorI2VuZGlm
IC8vIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjlfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9TaGFkZXJFeGVjdXRh
YmxlOS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDkvU2hhZGVyRXhlY3V0YWJsZTkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVkZWNmOTY2NGRlNzAxMDBi
MmFmZTU0ZDU3NGFlOWM4YThhMWYyMzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU2hhZGVyRXhlY3V0YWJsZTku
Y3BwCkBAIC0wLDAgKzEsNjAgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworLy8gU2hhZGVyRXhlY3V0YWJsZTkuY3BwOiBJbXBsZW1lbnRzIGEgRDNEOS1z
cGVjaWZpYyBjbGFzcyB0byBjb250YWluIHNoYWRlcgorLy8gZXhlY3V0YWJsZSBpbXBsZW1lbnRh
dGlvbiBkZXRhaWxzLgorCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU2hhZGVy
RXhlY3V0YWJsZTkuaCIKKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCituYW1lc3BhY2Ug
cngKK3sKKworU2hhZGVyRXhlY3V0YWJsZTk6OlNoYWRlckV4ZWN1dGFibGU5KGNvbnN0IHZvaWQg
KmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKmV4ZWN1dGFi
bGUpCisgICAgOiBTaGFkZXJFeGVjdXRhYmxlKGZ1bmN0aW9uLCBsZW5ndGgpCit7CisgICAgbVBp
eGVsRXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7CisgICAgbVZlcnRleEV4ZWN1dGFibGUgPSBOVUxM
OworfQorCitTaGFkZXJFeGVjdXRhYmxlOTo6U2hhZGVyRXhlY3V0YWJsZTkoY29uc3Qgdm9pZCAq
ZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKmV4ZWN1dGFi
bGUpCisgICAgOiBTaGFkZXJFeGVjdXRhYmxlKGZ1bmN0aW9uLCBsZW5ndGgpCit7CisgICAgbVZl
cnRleEV4ZWN1dGFibGUgPSBleGVjdXRhYmxlOworICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxM
OworfQorCitTaGFkZXJFeGVjdXRhYmxlOTo6flNoYWRlckV4ZWN1dGFibGU5KCkKK3sKKyAgICBp
ZiAobVZlcnRleEV4ZWN1dGFibGUpCisgICAgeworICAgICAgICBtVmVydGV4RXhlY3V0YWJsZS0+
UmVsZWFzZSgpOworICAgIH0KKyAgICBpZiAobVBpeGVsRXhlY3V0YWJsZSkKKyAgICB7CisgICAg
ICAgIG1QaXhlbEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKKyAgICB9Cit9CisKK1NoYWRlckV4ZWN1
dGFibGU5ICpTaGFkZXJFeGVjdXRhYmxlOTo6bWFrZVNoYWRlckV4ZWN1dGFibGU5KFNoYWRlckV4
ZWN1dGFibGUgKmV4ZWN1dGFibGUpCit7CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoU2hh
ZGVyRXhlY3V0YWJsZTkqLCBleGVjdXRhYmxlKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNo
YWRlckV4ZWN1dGFibGU5Kj4oZXhlY3V0YWJsZSk7Cit9CisKK0lEaXJlY3QzRFZlcnRleFNoYWRl
cjkgKlNoYWRlckV4ZWN1dGFibGU5OjpnZXRWZXJ0ZXhTaGFkZXIoKSBjb25zdAoreworICAgIHJl
dHVybiBtVmVydGV4RXhlY3V0YWJsZTsKK30KKworSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpTaGFk
ZXJFeGVjdXRhYmxlOTo6Z2V0UGl4ZWxTaGFkZXIoKSBjb25zdAoreworICAgIHJldHVybiBtUGl4
ZWxFeGVjdXRhYmxlOworfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L1NoYWRlckV4ZWN1dGFibGU5LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvU2hhZGVyRXhlY3V0YWJsZTkuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYTFlNmMy
ODQ0YTk4YmE0MjY4ZjBkZGYyYjQ5NGEzNmQyNzZjNWJmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1NoYWRlckV4
ZWN1dGFibGU5LmgKQEAgLTAsMCArMSwzOSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMi0y
MDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gU2hh
ZGVyRXhlY3V0YWJsZTkuaDogRGVmaW5lcyBhIEQzRDktc3BlY2lmaWMgY2xhc3MgdG8gY29udGFp
biBzaGFkZXIKKy8vIGV4ZWN1dGFibGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4KKworI2lmbmRl
ZiBMSUJHTEVTVjJfUkVOREVSRVJfU0hBREVSRVhFQ1VUQUJMRTlfSF8KKyNkZWZpbmUgTElCR0xF
U1YyX1JFTkRFUkVSX1NIQURFUkVYRUNVVEFCTEU5X0hfCisKKyNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvU2hhZGVyRXhlY3V0YWJsZS5oIgorCituYW1lc3BhY2UgcngKK3sKKworY2xhc3Mg
U2hhZGVyRXhlY3V0YWJsZTkgOiBwdWJsaWMgU2hhZGVyRXhlY3V0YWJsZQoreworICBwdWJsaWM6
CisgICAgU2hhZGVyRXhlY3V0YWJsZTkoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5n
dGgsIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqZXhlY3V0YWJsZSk7CisgICAgU2hhZGVyRXhlY3V0
YWJsZTkoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIElEaXJlY3QzRFZlcnRl
eFNoYWRlcjkgKmV4ZWN1dGFibGUpOworICAgIHZpcnR1YWwgflNoYWRlckV4ZWN1dGFibGU5KCk7
CisKKyAgICBzdGF0aWMgU2hhZGVyRXhlY3V0YWJsZTkgKm1ha2VTaGFkZXJFeGVjdXRhYmxlOShT
aGFkZXJFeGVjdXRhYmxlICpleGVjdXRhYmxlKTsKKworICAgIElEaXJlY3QzRFBpeGVsU2hhZGVy
OSAqZ2V0UGl4ZWxTaGFkZXIoKSBjb25zdDsKKyAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICpn
ZXRWZXJ0ZXhTaGFkZXIoKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihTaGFkZXJFeGVjdXRhYmxlOSk7CisKKyAgICBJRGlyZWN0M0RQaXhlbFNoYWRl
cjkgKm1QaXhlbEV4ZWN1dGFibGU7CisgICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqbVZlcnRl
eEV4ZWN1dGFibGU7Cit9OworCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfU0hB
REVSRVhFQ1VUQUJMRTlfSF8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU3dh
cENoYWluOS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvU3dhcENoYWluOS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGQ4ODk1ZDE4ZDZhMWRmN2RhZTVh
NDA1YTUxZWMyZDJhZGYwNzA1YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9Td2FwQ2hhaW45LmNwcApAQCAtMCww
ICsxLDQ0NSBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisvLyBTd2FwQ2hhaW45LmNwcDogSW1wbGVtZW50cyBhIGJhY2stZW5kIHNwZWNpZmljIGNsYXNz
IGZvciB0aGUgRDNEOSBzd2FwIGNoYWluLgorCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L2QzZDkvU3dhcENoYWluOS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3Jl
bmRlcmVyOV91dGlscy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRl
cmVyOS5oIgorCituYW1lc3BhY2UgcngKK3sKKworU3dhcENoYWluOTo6U3dhcENoYWluOShSZW5k
ZXJlcjkgKnJlbmRlcmVyLCBIV05EIHdpbmRvdywgSEFORExFIHNoYXJlSGFuZGxlLAorICAgICAg
ICAgICAgICAgICAgICAgICBHTGVudW0gYmFja0J1ZmZlckZvcm1hdCwgR0xlbnVtIGRlcHRoQnVm
ZmVyRm9ybWF0KQorICAgIDogbVJlbmRlcmVyKHJlbmRlcmVyKSwgU3dhcENoYWluKHdpbmRvdywg
c2hhcmVIYW5kbGUsIGJhY2tCdWZmZXJGb3JtYXQsIGRlcHRoQnVmZmVyRm9ybWF0KQoreworICAg
IG1Td2FwQ2hhaW4gPSBOVUxMOworICAgIG1CYWNrQnVmZmVyID0gTlVMTDsKKyAgICBtRGVwdGhT
dGVuY2lsID0gTlVMTDsKKyAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICBtT2Zmc2NyZWVu
VGV4dHVyZSA9IE5VTEw7CisgICAgbVdpZHRoID0gLTE7CisgICAgbUhlaWdodCA9IC0xOworICAg
IG1Td2FwSW50ZXJ2YWwgPSAtMTsKK30KKworU3dhcENoYWluOTo6flN3YXBDaGFpbjkoKQorewor
ICAgIHJlbGVhc2UoKTsKK30KKwordm9pZCBTd2FwQ2hhaW45OjpyZWxlYXNlKCkKK3sKKyAgICBp
ZiAobVN3YXBDaGFpbikKKyAgICB7CisgICAgICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsKKyAg
ICAgICAgbVN3YXBDaGFpbiA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKG1CYWNrQnVmZmVyKQor
ICAgIHsKKyAgICAgICAgbUJhY2tCdWZmZXItPlJlbGVhc2UoKTsKKyAgICAgICAgbUJhY2tCdWZm
ZXIgPSBOVUxMOworICAgIH0KKworICAgIGlmIChtRGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAg
ICAgbURlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOworICAgICAgICBtRGVwdGhTdGVuY2lsID0gTlVM
TDsKKyAgICB9CisKKyAgICBpZiAobVJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIG1SZW5k
ZXJUYXJnZXQtPlJlbGVhc2UoKTsKKyAgICAgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7CisgICAg
fQorCisgICAgaWYgKG1PZmZzY3JlZW5UZXh0dXJlKQorICAgIHsKKyAgICAgICAgbU9mZnNjcmVl
blRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgbU9mZnNjcmVlblRleHR1cmUgPSBOVUxMOwor
ICAgIH0KKworICAgIGlmIChtV2luZG93KQorICAgICAgICBtU2hhcmVIYW5kbGUgPSBOVUxMOwor
fQorCitzdGF0aWMgRFdPUkQgY29udmVydEludGVydmFsKEVHTGludCBpbnRlcnZhbCkKK3sKKyNp
ZiBBTkdMRV9GT1JDRV9WU1lOQ19PRkYKKyAgICByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9J
TU1FRElBVEU7CisjZWxzZQorICAgIHN3aXRjaChpbnRlcnZhbCkKKyAgICB7CisgICAgICBjYXNl
IDA6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX0lNTUVESUFURTsKKyAgICAgIGNhc2UgMTog
cmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfT05FOworICAgICAgY2FzZSAyOiByZXR1cm4gRDNE
UFJFU0VOVF9JTlRFUlZBTF9UV087CisgICAgICBjYXNlIDM6IHJldHVybiBEM0RQUkVTRU5UX0lO
VEVSVkFMX1RIUkVFOworICAgICAgY2FzZSA0OiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9G
T1VSOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
RDNEUFJFU0VOVF9JTlRFUlZBTF9ERUZBVUxUOworI2VuZGlmCit9CisKK0VHTGludCBTd2FwQ2hh
aW45OjpyZXNpemUoaW50IGJhY2tidWZmZXJXaWR0aCwgaW50IGJhY2tidWZmZXJIZWlnaHQpCit7
CisgICAgLy8gRDNEOSBkb2VzIG5vdCBzdXBwb3J0IHJlc2l6aW5nIHN3YXAgY2hhaW5zIHdpdGhv
dXQgcmVjcmVhdGluZyB0aGVtCisgICAgcmV0dXJuIHJlc2V0KGJhY2tidWZmZXJXaWR0aCwgYmFj
a2J1ZmZlckhlaWdodCwgbVN3YXBJbnRlcnZhbCk7Cit9CisKK0VHTGludCBTd2FwQ2hhaW45Ojpy
ZXNldChpbnQgYmFja2J1ZmZlcldpZHRoLCBpbnQgYmFja2J1ZmZlckhlaWdodCwgRUdMaW50IHN3
YXBJbnRlcnZhbCkKK3sKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXIt
PmdldERldmljZSgpOworCisgICAgaWYgKGRldmljZSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEVHTF9CQURfQUNDRVNTOworICAgIH0KKworICAgIC8vIEV2aWN0IGFsbCBub24tcmVu
ZGVyIHRhcmdldCB0ZXh0dXJlcyB0byBzeXN0ZW0gbWVtb3J5IGFuZCByZWxlYXNlIGFsbCByZXNv
dXJjZXMKKyAgICAvLyBiZWZvcmUgcmVhbGxvY2F0aW5nIHRoZW0gdG8gZnJlZSB1cCBhcyBtdWNo
IHZpZGVvIG1lbW9yeSBhcyBwb3NzaWJsZS4KKyAgICBkZXZpY2UtPkV2aWN0TWFuYWdlZFJlc291
cmNlcygpOworCisgICAgSFJFU1VMVCByZXN1bHQ7CisKKyAgICAvLyBSZWxlYXNlIHNwZWNpZmlj
IHJlc291cmNlcyB0byBmcmVlIHVwIG1lbW9yeSBmb3IgdGhlIG5ldyByZW5kZXIgdGFyZ2V0LCB3
aGlsZSB0aGUKKyAgICAvLyBvbGQgcmVuZGVyIHRhcmdldCBzdGlsbCBleGlzdHMgZm9yIHRoZSBw
dXJwb3NlIG9mIHByZXNlcnZpbmcgaXRzIGNvbnRlbnRzLgorICAgIGlmIChtU3dhcENoYWluKQor
ICAgIHsKKyAgICAgICAgbVN3YXBDaGFpbi0+UmVsZWFzZSgpOworICAgICAgICBtU3dhcENoYWlu
ID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAobUJhY2tCdWZmZXIpCisgICAgeworICAgICAgICBt
QmFja0J1ZmZlci0+UmVsZWFzZSgpOworICAgICAgICBtQmFja0J1ZmZlciA9IE5VTEw7CisgICAg
fQorCisgICAgaWYgKG1PZmZzY3JlZW5UZXh0dXJlKQorICAgIHsKKyAgICAgICAgbU9mZnNjcmVl
blRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgbU9mZnNjcmVlblRleHR1cmUgPSBOVUxMOwor
ICAgIH0KKworICAgIGlmIChtRGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgbURlcHRoU3Rl
bmNpbC0+UmVsZWFzZSgpOworICAgICAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKKyAgICB9CisK
KyAgICBIQU5ETEUgKnBTaGFyZUhhbmRsZSA9IE5VTEw7CisgICAgaWYgKCFtV2luZG93ICYmIG1S
ZW5kZXJlci0+Z2V0U2hhcmVIYW5kbGVTdXBwb3J0KCkpCisgICAgeworICAgICAgICBwU2hhcmVI
YW5kbGUgPSAmbVNoYXJlSGFuZGxlOworICAgIH0KKworICAgIHJlc3VsdCA9IGRldmljZS0+Q3Jl
YXRlVGV4dHVyZShiYWNrYnVmZmVyV2lkdGgsIGJhY2tidWZmZXJIZWlnaHQsIDEsIEQzRFVTQUdF
X1JFTkRFUlRBUkdFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNk
OTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCksIEQzRFBPT0xf
REVGQVVMVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1PZmZzY3JlZW5U
ZXh0dXJlLCBwU2hhcmVIYW5kbGUpOworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7Cisg
ICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBvZmZzY3JlZW4gdGV4dHVyZTogJTA4bFgiLCBy
ZXN1bHQpOworICAgICAgICByZWxlYXNlKCk7CisKKyAgICAgICAgaWYgKGQzZDk6OmlzRGV2aWNl
TG9zdEVycm9yKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBFR0xfQ09O
VEVYVF9MT1NUOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIEVHTF9CQURfQUxMT0M7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqb2xkUmVuZGVyVGFyZ2V0ID0gbVJlbmRlclRhcmdldDsKKworICAgIHJlc3Vs
dCA9IG1PZmZzY3JlZW5UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoMCwgJm1SZW5kZXJUYXJnZXQp
OworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICBpZiAob2xkUmVuZGVyVGFy
Z2V0KQorICAgIHsKKyAgICAgICAgUkVDVCByZWN0ID0KKyAgICAgICAgeworICAgICAgICAgICAg
MCwgMCwKKyAgICAgICAgICAgIG1XaWR0aCwgbUhlaWdodAorICAgICAgICB9OworCisgICAgICAg
IGlmIChyZWN0LnJpZ2h0ID4gc3RhdGljX2Nhc3Q8TE9ORz4oYmFja2J1ZmZlcldpZHRoKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmVjdC5yaWdodCA9IGJhY2tidWZmZXJXaWR0aDsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChyZWN0LmJvdHRvbSA+IHN0YXRpY19jYXN0PExPTkc+KGJhY2ti
dWZmZXJIZWlnaHQpKQorICAgICAgICB7CisgICAgICAgICAgICByZWN0LmJvdHRvbSA9IGJhY2ti
dWZmZXJIZWlnaHQ7CisgICAgICAgIH0KKworICAgICAgICBtUmVuZGVyZXItPmVuZFNjZW5lKCk7
CisKKyAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5TdHJldGNoUmVjdChvbGRSZW5kZXJUYXJnZXQs
ICZyZWN0LCBtUmVuZGVyVGFyZ2V0LCAmcmVjdCwgRDNEVEVYRl9OT05FKTsKKyAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICBvbGRSZW5kZXJUYXJnZXQtPlJlbGVh
c2UoKTsKKyAgICB9CisKKyAgICBpZiAobVdpbmRvdykKKyAgICB7CisgICAgICAgIEQzRFBSRVNF
TlRfUEFSQU1FVEVSUyBwcmVzZW50UGFyYW1ldGVycyA9IHswfTsKKyAgICAgICAgcHJlc2VudFBh
cmFtZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCA9IGdsX2QzZDk6OkNvbnZlcnRSZW5kZXJi
dWZmZXJGb3JtYXQobURlcHRoQnVmZmVyRm9ybWF0KTsKKyAgICAgICAgcHJlc2VudFBhcmFtZXRl
cnMuQmFja0J1ZmZlckNvdW50ID0gMTsKKyAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1
ZmZlckZvcm1hdCA9IGdsX2QzZDk6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobUJhY2tCdWZm
ZXJGb3JtYXQpOworICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5FbmFibGVBdXRvRGVwdGhTdGVu
Y2lsID0gRkFMU0U7CisgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkZsYWdzID0gMDsKKyAgICAg
ICAgcHJlc2VudFBhcmFtZXRlcnMuaERldmljZVdpbmRvdyA9IG1XaW5kb3c7CisgICAgICAgIHBy
ZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVhbGl0eSA9IDA7ICAgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IFVuaW1wbGVtZW50ZWQKKyAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlT
YW1wbGVUeXBlID0gRDNETVVMVElTQU1QTEVfTk9ORTsgICAvLyBGSVhNRTogVW5pbXBsZW1lbnRl
ZAorICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5QcmVzZW50YXRpb25JbnRlcnZhbCA9IGNvbnZl
cnRJbnRlcnZhbChzd2FwSW50ZXJ2YWwpOworICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5Td2Fw
RWZmZWN0ID0gRDNEU1dBUEVGRkVDVF9ESVNDQVJEOworICAgICAgICBwcmVzZW50UGFyYW1ldGVy
cy5XaW5kb3dlZCA9IFRSVUU7CisgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJX
aWR0aCA9IGJhY2tidWZmZXJXaWR0aDsKKyAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1
ZmZlckhlaWdodCA9IGJhY2tidWZmZXJIZWlnaHQ7CisKKyAgICAgICAgLy8gaHR0cDovL2NyYnVn
LmNvbS8xNDAyMzkKKyAgICAgICAgLy8gaHR0cDovL2NyYnVnLmNvbS8xNDM0MzQKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gU29tZSBBTUQvSW50ZWwgc3dpdGNoYWJsZSBzeXN0ZW1zIC8gZHJpdmVy
cyBhcHBlYXIgdG8gcm91bmQgc3dhcCBjaGFpbiBzdXJmYWNlcyB0byBhIG11bHRpcGxlIG9mIDY0
IHBpeGVscyBpbiB3aWR0aAorICAgICAgICAvLyB3aGVuIHVzaW5nIHRoZSBpbnRlZ3JhdGVkIElu
dGVsLiBUaGlzIHJvdW5kcyB0aGUgd2lkdGggdXAgcmF0aGVyIHRoYW4gZG93bi4KKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gU29tZSBub24tc3dpdGNoYWJsZSBBTUQgR1BVcyAvIGRyaXZlcnMgZG8g
bm90IHJlc3BlY3QgdGhlIHNvdXJjZSByZWN0YW5nbGUgdG8gUHJlc2VudC4gVGhlcmVmb3JlLCB3
aGVuIHRoZSB2ZW5kb3IgSUQKKyAgICAgICAgLy8gaXMgbm90IEludGVsLCB0aGUgYmFjayBidWZm
ZXIgd2lkdGggbXVzdCBiZSBleGFjdGx5IHRoZSBzYW1lIHdpZHRoIGFzIHRoZSB3aW5kb3cgb3Ig
aG9yaXpvbnRhbCBzY2FsaW5nIHdpbGwgb2NjdXIuCisgICAgICAgIGlmIChtUmVuZGVyZXItPmdl
dEFkYXB0ZXJWZW5kb3IoKSA9PSBWRU5ET1JfSURfSU5URUwpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCA9IChwcmVzZW50UGFyYW1ldGVy
cy5CYWNrQnVmZmVyV2lkdGggKyA2MykgLyA2NCAqIDY0OworICAgICAgICB9CisKKyAgICAgICAg
cmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVBZGRpdGlvbmFsU3dhcENoYWluKCZwcmVzZW50UGFyYW1l
dGVycywgJm1Td2FwQ2hhaW4pOworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9S
WSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0lOVkFMSURD
QUxMIHx8IHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTE9TVCk7CisKKyAgICAgICAgICAgIEVSUigi
Q291bGQgbm90IGNyZWF0ZSBhZGRpdGlvbmFsIHN3YXAgY2hhaW5zIG9yIG9mZnNjcmVlbiBzdXJm
YWNlczogJTA4bFgiLCByZXN1bHQpOworICAgICAgICAgICAgcmVsZWFzZSgpOworCisgICAgICAg
ICAgICBpZiAoZDNkOTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gRUdMX0NPTlRFWFRfTE9TVDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
RUdMX0JBRF9BTExPQzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJlc3Vs
dCA9IG1Td2FwQ2hhaW4tPkdldEJhY2tCdWZmZXIoMCwgRDNEQkFDS0JVRkZFUl9UWVBFX01PTk8s
ICZtQmFja0J1ZmZlcik7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAg
ICAgIEludmFsaWRhdGVSZWN0KG1XaW5kb3csIE5VTEwsIEZBTFNFKTsKKyAgICB9CisKKyAgICBp
ZiAobURlcHRoQnVmZmVyRm9ybWF0ICE9IEdMX05PTkUpCisgICAgeworICAgICAgICByZXN1bHQg
PSBkZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFN1cmZhY2UoYmFja2J1ZmZlcldpZHRoLCBiYWNr
YnVmZmVySGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2xfZDNkOTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtRGVwdGhCdWZmZXJG
b3JtYXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRDNETVVMVElTQU1QTEVfTk9ORSwgMCwgRkFMU0UsICZtRGVwdGhTdGVuY2lsLCBOVUxMKTsK
KworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkgfHwgcmVzdWx0ID09IEQzREVSUl9JTlZBTElEQ0FMTCk7CisKKyAgICAgICAgICAg
IEVSUigiQ291bGQgbm90IGNyZWF0ZSBkZXB0aHN0ZW5jaWwgc3VyZmFjZSBmb3IgbmV3IHN3YXAg
Y2hhaW46IDB4JTA4WCIsIHJlc3VsdCk7CisgICAgICAgICAgICByZWxlYXNlKCk7CisKKyAgICAg
ICAgICAgIGlmIChkM2Q5Ojppc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBFR0xfQ09OVEVYVF9MT1NUOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBFR0xfQkFEX0FMTE9DOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
bVdpZHRoID0gYmFja2J1ZmZlcldpZHRoOworICAgIG1IZWlnaHQgPSBiYWNrYnVmZmVySGVpZ2h0
OworICAgIG1Td2FwSW50ZXJ2YWwgPSBzd2FwSW50ZXJ2YWw7CisKKyAgICByZXR1cm4gRUdMX1NV
Q0NFU1M7Cit9CisKKy8vIHBhcmFtZXRlcnMgc2hvdWxkIGJlIHZhbGlkYXRlZC9jbGFtcGVkIGJ5
IGNhbGxlcgorRUdMaW50IFN3YXBDaGFpbjk6OnN3YXBSZWN0KEVHTGludCB4LCBFR0xpbnQgeSwg
RUdMaW50IHdpZHRoLCBFR0xpbnQgaGVpZ2h0KQoreworICAgIGlmICghbVN3YXBDaGFpbikKKyAg
ICB7CisgICAgICAgIHJldHVybiBFR0xfU1VDQ0VTUzsKKyAgICB9CisKKyAgICBJRGlyZWN0M0RE
ZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgLy8gRGlzYWJs
ZSBhbGwgcGlwZWxpbmUgb3BlcmF0aW9ucworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfWkVOQUJMRSwgRDNEWkJfRkFMU0UpOworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfRklMTE1PREUsIEQzREZJTExfU09MSUQpOworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfQUxQSEFURVNURU5BQkxFLCBGQUxTRSk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19DVUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsKKyAgICBkZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIEZBTFNFKTsKKyAgICBkZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX0NMSVBQTEFORUVOQUJMRSwgMCk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCBEM0RDT0xPUldSSVRFRU5BQkxFX0FMUEhBIHwg
RDNEQ09MT1JXUklURUVOQUJMRV9CTFVFIHwgRDNEQ09MT1JXUklURUVOQUJMRV9HUkVFTiB8IEQz
RENPTE9SV1JJVEVFTkFCTEVfUkVEKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X1NSR0JXUklURUVOQUJMRSwgRkFMU0UpOworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfU0NJU1NPUlRFU1RFTkFCTEUsIEZBTFNFKTsKKyAgICBkZXZpY2UtPlNldFBpeGVsU2hhZGVy
KE5VTEwpOworICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOworCisgICAgZGV2aWNl
LT5TZXRSZW5kZXJUYXJnZXQoMCwgbUJhY2tCdWZmZXIpOworICAgIGRldmljZS0+U2V0RGVwdGhT
dGVuY2lsU3VyZmFjZShOVUxMKTsKKworICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCBtT2Zmc2Ny
ZWVuVGV4dHVyZSk7CisgICAgZGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1Nf
Q09MT1JPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOworICAgIGRldmljZS0+U2V0VGV4dHVyZVN0YWdl
U3RhdGUoMCwgRDNEVFNTX0NPTE9SQVJHMSwgRDNEVEFfVEVYVFVSRSk7CisgICAgZGV2aWNlLT5T
ZXRUZXh0dXJlU3RhZ2VTdGF0ZSgxLCBEM0RUU1NfQ09MT1JPUCwgRDNEVE9QX0RJU0FCTEUpOwor
ICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUFHRklMVEVSLCBEM0RURVhG
X1BPSU5UKTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01JTkZJTFRF
UiwgRDNEVEVYRl9QT0lOVCk7CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FN
UF9BRERSRVNTVSwgRDNEVEFERFJFU1NfQ0xBTVApOworICAgIGRldmljZS0+U2V0U2FtcGxlclN0
YXRlKDAsIEQzRFNBTVBfQUREUkVTU1YsIEQzRFRBRERSRVNTX0NMQU1QKTsKKyAgICBkZXZpY2Ut
PlNldEZWRihEM0RGVkZfWFlaUkhXIHwgRDNERlZGX1RFWDEpOworCisgICAgZm9yIChVSU5UIHN0
cmVhbUluZGV4ID0gMDsgc3RyZWFtSW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBzdHJl
YW1JbmRleCsrKQorICAgIHsKKyAgICAgICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKHN0
cmVhbUluZGV4LCAxKTsKKyAgICB9CisKKyAgICBEM0RWSUVXUE9SVDkgdmlld3BvcnQgPSB7MCwg
MCwgbVdpZHRoLCBtSGVpZ2h0LCAwLjBmLCAxLjBmfTsKKyAgICBkZXZpY2UtPlNldFZpZXdwb3J0
KCZ2aWV3cG9ydCk7CisKKyAgICBmbG9hdCB4MSA9IHggLSAwLjVmOworICAgIGZsb2F0IHkxID0g
KG1IZWlnaHQgLSB5IC0gaGVpZ2h0KSAtIDAuNWY7CisgICAgZmxvYXQgeDIgPSAoeCArIHdpZHRo
KSAtIDAuNWY7CisgICAgZmxvYXQgeTIgPSAobUhlaWdodCAtIHkpIC0gMC41ZjsKKworICAgIGZs
b2F0IHUxID0geCAvIGZsb2F0KG1XaWR0aCk7CisgICAgZmxvYXQgdjEgPSB5IC8gZmxvYXQobUhl
aWdodCk7CisgICAgZmxvYXQgdTIgPSAoeCArIHdpZHRoKSAvIGZsb2F0KG1XaWR0aCk7CisgICAg
ZmxvYXQgdjIgPSAoeSArIGhlaWdodCkgLyBmbG9hdChtSGVpZ2h0KTsKKworICAgIGZsb2F0IHF1
YWRbNF1bNl0gPSB7e3gxLCB5MSwgMC4wZiwgMS4wZiwgdTEsIHYyfSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHt4MiwgeTEsIDAuMGYsIDEuMGYsIHUyLCB2Mn0sCisgICAgICAgICAgICAgICAg
ICAgICAgICB7eDIsIHkyLCAwLjBmLCAxLjBmLCB1MiwgdjF9LAorICAgICAgICAgICAgICAgICAg
ICAgICAge3gxLCB5MiwgMC4wZiwgMS4wZiwgdTEsIHYxfX07ICAgLy8geCwgeSwgeiwgcmh3LCB1
LCB2CisKKyAgICBtUmVuZGVyZXItPnN0YXJ0U2NlbmUoKTsKKyAgICBkZXZpY2UtPkRyYXdQcmlt
aXRpdmVVUChEM0RQVF9UUklBTkdMRUZBTiwgMiwgcXVhZCwgNiAqIHNpemVvZihmbG9hdCkpOwor
ICAgIG1SZW5kZXJlci0+ZW5kU2NlbmUoKTsKKworICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCBO
VUxMKTsKKworICAgIFJFQ1QgcmVjdCA9CisgICAgeworICAgICAgICB4LCBtSGVpZ2h0IC0geSAt
IGhlaWdodCwKKyAgICAgICAgeCArIHdpZHRoLCBtSGVpZ2h0IC0geQorICAgIH07CisKKyAgICBI
UkVTVUxUIHJlc3VsdCA9IG1Td2FwQ2hhaW4tPlByZXNlbnQoJnJlY3QsICZyZWN0LCBOVUxMLCBO
VUxMLCAwKTsKKworICAgIG1SZW5kZXJlci0+bWFya0FsbFN0YXRlRGlydHkoKTsKKworICAgIGlm
IChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZN
RU1PUlkgfHwgcmVzdWx0ID09IEQzREVSUl9EUklWRVJJTlRFUk5BTEVSUk9SKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEVHTF9CQURfQUxMT0M7CisgICAgfQorCisgICAgLy8gaHR0cDovL2NyYnVn
LmNvbS8zMTMyMTAKKyAgICAvLyBJZiBvdXIgc3dhcCBmYWlsZWQsIHRyaWdnZXIgYSBkZXZpY2Ug
bG9zdCBldmVudC4gUmVzZXR0aW5nIHdpbGwgd29yayBhcm91bmQgYW4gQU1ELXNwZWNpZmljCisg
ICAgLy8gZGV2aWNlIHJlbW92ZWQgYnVnIHdpdGggbG9zdCBjb250ZXh0cyB3aGVuIHJlaW5zdGFs
bGluZyBkcml2ZXJzLgorICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIG1S
ZW5kZXJlci0+bm90aWZ5RGV2aWNlTG9zdCgpOworICAgICAgICByZXR1cm4gRUdMX0NPTlRFWFRf
TE9TVDsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX1NVQ0NFU1M7Cit9CisKKy8vIEluY3JlbWVu
dHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0
dXJuZWQgc3VyZmFjZQorSURpcmVjdDNEU3VyZmFjZTkgKlN3YXBDaGFpbjk6OmdldFJlbmRlclRh
cmdldCgpCit7CisgICAgaWYgKG1SZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBtUmVuZGVy
VGFyZ2V0LT5BZGRSZWYoKTsKKyAgICB9CisKKyAgICByZXR1cm4gbVJlbmRlclRhcmdldDsKK30K
KworLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVs
ZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJmYWNlOSAqU3dhcENoYWlu
OTo6Z2V0RGVwdGhTdGVuY2lsKCkKK3sKKyAgICBpZiAobURlcHRoU3RlbmNpbCkKKyAgICB7Cisg
ICAgICAgIG1EZXB0aFN0ZW5jaWwtPkFkZFJlZigpOworICAgIH0KKworICAgIHJldHVybiBtRGVw
dGhTdGVuY2lsOworfQorCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHRleHR1cmUuCisvLyBj
YWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHRleHR1cmUKK0lEaXJlY3QzRFRleHR1
cmU5ICpTd2FwQ2hhaW45OjpnZXRPZmZzY3JlZW5UZXh0dXJlKCkKK3sKKyAgICBpZiAobU9mZnNj
cmVlblRleHR1cmUpCisgICAgeworICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+QWRkUmVmKCk7
CisgICAgfQorCisgICAgcmV0dXJuIG1PZmZzY3JlZW5UZXh0dXJlOworfQorCitTd2FwQ2hhaW45
ICpTd2FwQ2hhaW45OjptYWtlU3dhcENoYWluOShTd2FwQ2hhaW4gKnN3YXBDaGFpbikKK3sKKyAg
ICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShyeDo6U3dhcENoYWluOSosIHN3YXBDaGFpbikpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxyeDo6U3dhcENoYWluOSo+KHN3YXBDaGFpbik7Cit9CisK
K3ZvaWQgU3dhcENoYWluOTo6cmVjcmVhdGUoKQoreworICAgIGlmICghbVN3YXBDaGFpbikKKyAg
ICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZp
Y2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworICAgIGlmIChkZXZpY2UgPT0gTlVMTCkKKyAg
ICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMg
cHJlc2VudFBhcmFtZXRlcnM7CisgICAgSFJFU1VMVCByZXN1bHQgPSBtU3dhcENoYWluLT5HZXRQ
cmVzZW50UGFyYW1ldGVycygmcHJlc2VudFBhcmFtZXRlcnMpOworICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7CisKKyAgICBJRGlyZWN0M0RTd2FwQ2hhaW45KiBuZXdTd2FwQ2hhaW4gPSBO
VUxMOworICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQWRkaXRpb25hbFN3YXBDaGFpbigmcHJl
c2VudFBhcmFtZXRlcnMsICZuZXdTd2FwQ2hhaW4pOworICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
KyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtU3dhcENoYWluLT5SZWxlYXNl
KCk7CisgICAgbVN3YXBDaGFpbiA9IG5ld1N3YXBDaGFpbjsKKworICAgIG1CYWNrQnVmZmVyLT5S
ZWxlYXNlKCk7CisgICAgcmVzdWx0ID0gbVN3YXBDaGFpbi0+R2V0QmFja0J1ZmZlcigwLCBEM0RC
QUNLQlVGRkVSX1RZUEVfTU9OTywgJm1CYWNrQnVmZmVyKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU3dhcENoYWluOS5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1N3YXBDaGFpbjkuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4xNmE2MmJkODZmNmE2NWI3ZGQ4YjdiZDQyMjA3NjQxNGY0OTBkNDVlCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L1N3YXBDaGFpbjkuaApAQCAtMCwwICsxLDU1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gU3dh
cENoYWluOS5oOiBEZWZpbmVzIGEgYmFjay1lbmQgc3BlY2lmaWMgY2xhc3MgZm9yIHRoZSBEM0Q5
IHN3YXAgY2hhaW4uCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX1NXQVBDSEFJTjlfSF8K
KyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1NXQVBDSEFJTjlfSF8KKworI2luY2x1ZGUgImNv
bW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1N3YXBDaGFp
bi5oIgorCituYW1lc3BhY2UgcngKK3sKK2NsYXNzIFJlbmRlcmVyOTsKKworY2xhc3MgU3dhcENo
YWluOSA6IHB1YmxpYyBTd2FwQ2hhaW4KK3sKKyAgcHVibGljOgorICAgIFN3YXBDaGFpbjkoUmVu
ZGVyZXI5ICpyZW5kZXJlciwgSFdORCB3aW5kb3csIEhBTkRMRSBzaGFyZUhhbmRsZSwKKyAgICAg
ICAgICAgICAgIEdMZW51bSBiYWNrQnVmZmVyRm9ybWF0LCBHTGVudW0gZGVwdGhCdWZmZXJGb3Jt
YXQpOworICAgIHZpcnR1YWwgflN3YXBDaGFpbjkoKTsKKworICAgIEVHTGludCByZXNpemUoRUdM
aW50IGJhY2tidWZmZXJXaWR0aCwgRUdMaW50IGJhY2tidWZmZXJIZWlnaHQpOworICAgIHZpcnR1
YWwgRUdMaW50IHJlc2V0KEVHTGludCBiYWNrYnVmZmVyV2lkdGgsIEVHTGludCBiYWNrYnVmZmVy
SGVpZ2h0LCBFR0xpbnQgc3dhcEludGVydmFsKTsKKyAgICB2aXJ0dWFsIEVHTGludCBzd2FwUmVj
dChFR0xpbnQgeCwgRUdMaW50IHksIEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCk7CisgICAg
dmlydHVhbCB2b2lkIHJlY3JlYXRlKCk7CisKKyAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5
ICpnZXRSZW5kZXJUYXJnZXQoKTsKKyAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRE
ZXB0aFN0ZW5jaWwoKTsKKyAgICB2aXJ0dWFsIElEaXJlY3QzRFRleHR1cmU5ICpnZXRPZmZzY3Jl
ZW5UZXh0dXJlKCk7CisKKyAgICBzdGF0aWMgU3dhcENoYWluOSAqbWFrZVN3YXBDaGFpbjkoU3dh
cENoYWluICpzd2FwQ2hhaW4pOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRf
QVNTSUdOKFN3YXBDaGFpbjkpOworCisgICAgdm9pZCByZWxlYXNlKCk7CisKKyAgICBSZW5kZXJl
cjkgKm1SZW5kZXJlcjsKKyAgICBFR0xpbnQgbUhlaWdodDsKKyAgICBFR0xpbnQgbVdpZHRoOwor
ICAgIEVHTGludCBtU3dhcEludGVydmFsOworCisgICAgSURpcmVjdDNEU3dhcENoYWluOSAqbVN3
YXBDaGFpbjsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbUJhY2tCdWZmZXI7CisgICAgSURpcmVj
dDNEU3VyZmFjZTkgKm1SZW5kZXJUYXJnZXQ7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1EZXB0
aFN0ZW5jaWw7CisgICAgSURpcmVjdDNEVGV4dHVyZTkqIG1PZmZzY3JlZW5UZXh0dXJlOworfTsK
KworfQorI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9TV0FQQ0hBSU45X0hfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
VGV4dHVyZVN0b3JhZ2U5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9UZXh0dXJlU3RvcmFnZTkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0ODZhOWE1
YmY3Mzc2ZGNiMWZmY2Q0ODVmNmZmOTFmNWY0MTM0OGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0
b3JhZ2U5LmNwcApAQCAtMCwwICsxLDMyOCBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworLy8gVGV4dHVyZVN0b3JhZ2U5LmNwcDogSW1wbGVtZW50cyB0aGUgYWJz
dHJhY3Qgcng6OlRleHR1cmVTdG9yYWdlOSBjbGFzcyBhbmQgaXRzIGNvbmNyZXRlIGRlcml2ZWQK
Ky8vIGNsYXNzZXMgVGV4dHVyZVN0b3JhZ2U5XzJEIGFuZCBUZXh0dXJlU3RvcmFnZTlfQ3ViZSwg
d2hpY2ggYWN0IGFzIHRoZSBpbnRlcmZhY2UgdG8gdGhlCisvLyBEM0Q5IHRleHR1cmUuCisKKyNp
bmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L1JlbmRlcmVyOS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1RleHR1
cmVTdG9yYWdlOS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1N3YXBDaGFp
bjkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJUYXJnZXQ5Lmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKKworbmFtZXNwYWNlIHJ4Cit7CitUZXh0dXJl
U3RvcmFnZTk6OlRleHR1cmVTdG9yYWdlOShSZW5kZXJlciAqcmVuZGVyZXIsIERXT1JEIHVzYWdl
KQorICAgIDogbUxvZE9mZnNldCgwKSwKKyAgICAgIG1SZW5kZXJlcihSZW5kZXJlcjk6Om1ha2VS
ZW5kZXJlcjkocmVuZGVyZXIpKSwKKyAgICAgIG1EM0RVc2FnZSh1c2FnZSksCisgICAgICBtRDNE
UG9vbChtUmVuZGVyZXItPmdldFRleHR1cmVQb29sKHVzYWdlKSkKK3sKK30KKworVGV4dHVyZVN0
b3JhZ2U5Ojp+VGV4dHVyZVN0b3JhZ2U5KCkKK3sKK30KKworVGV4dHVyZVN0b3JhZ2U5ICpUZXh0
dXJlU3RvcmFnZTk6Om1ha2VUZXh0dXJlU3RvcmFnZTkoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2Up
Cit7CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoVGV4dHVyZVN0b3JhZ2U5Kiwgc3RvcmFn
ZSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlU3RvcmFnZTkqPihzdG9yYWdlKTsK
K30KKworRFdPUkQgVGV4dHVyZVN0b3JhZ2U5OjpHZXRUZXh0dXJlVXNhZ2UoRDNERk9STUFUIGQz
ZGZtdCwgR0xlbnVtIGdsdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlKQoreworICAgIERXT1JE
IGQzZHVzYWdlID0gMDsKKworICAgIGlmIChkM2RmbXQgPT0gRDNERk1UX0lOVFopCisgICAgewor
ICAgICAgICBkM2R1c2FnZSB8PSBEM0RVU0FHRV9ERVBUSFNURU5DSUw7CisgICAgfQorICAgIGVs
c2UgaWYoZm9yY2VSZW5kZXJhYmxlIHx8IChUZXh0dXJlU3RvcmFnZTk6OklzVGV4dHVyZUZvcm1h
dFJlbmRlcmFibGUoZDNkZm10KSAmJiAoZ2x1c2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX0FOR0xFKSkpCisgICAgeworICAgICAgICBkM2R1c2FnZSB8PSBEM0RVU0FHRV9SRU5ERVJU
QVJHRVQ7CisgICAgfQorICAgIHJldHVybiBkM2R1c2FnZTsKK30KKworYm9vbCBUZXh0dXJlU3Rv
cmFnZTk6OklzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoRDNERk9STUFUIGZvcm1hdCkKK3sKKyAg
ICBpZiAoZm9ybWF0ID09IEQzREZNVF9JTlRaKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIHN3aXRjaChmb3JtYXQpCisgICAgeworICAgICAgY2FzZSBEM0RGTVRfTDg6
CisgICAgICBjYXNlIEQzREZNVF9BOEw4OgorICAgICAgY2FzZSBEM0RGTVRfRFhUMToKKyAgICAg
IGNhc2UgRDNERk1UX0RYVDM6CisgICAgICBjYXNlIEQzREZNVF9EWFQ1OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKKyAgICAgIGNhc2UgRDNERk1U
X1g4UjhHOEI4OgorICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKKyAgICAgIGNhc2Ug
RDNERk1UX0EzMkIzMkczMlIzMkY6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgZGVmYXVs
dDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgVGV4dHVyZVN0b3JhZ2U5Ojppc1JlbmRlclRhcmdldCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIChtRDNEVXNhZ2UgJiAoRDNEVVNBR0VfUkVOREVSVEFSR0VUIHwgRDNEVVNBR0VfREVQ
VEhTVEVOQ0lMKSkgIT0gMDsKK30KKworYm9vbCBUZXh0dXJlU3RvcmFnZTk6OmlzTWFuYWdlZCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIChtRDNEUG9vbCA9PSBEM0RQT09MX01BTkFHRUQpOworfQor
CitEM0RQT09MIFRleHR1cmVTdG9yYWdlOTo6Z2V0UG9vbCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1EM0RQb29sOworfQorCitEV09SRCBUZXh0dXJlU3RvcmFnZTk6OmdldFVzYWdlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbUQzRFVzYWdlOworfQorCitpbnQgVGV4dHVyZVN0b3JhZ2U5OjpnZXRM
b2RPZmZzZXQoKSBjb25zdAoreworICAgIHJldHVybiBtTG9kT2Zmc2V0OworfQorCitpbnQgVGV4
dHVyZVN0b3JhZ2U5OjpsZXZlbENvdW50KCkKK3sKKyAgICByZXR1cm4gZ2V0QmFzZVRleHR1cmUo
KSA/IGdldEJhc2VUZXh0dXJlKCktPkdldExldmVsQ291bnQoKSAtIGdldExvZE9mZnNldCgpIDog
MDsKK30KKworVGV4dHVyZVN0b3JhZ2U5XzJEOjpUZXh0dXJlU3RvcmFnZTlfMkQoUmVuZGVyZXIg
KnJlbmRlcmVyLCBTd2FwQ2hhaW45ICpzd2FwY2hhaW4pIDogVGV4dHVyZVN0b3JhZ2U5KHJlbmRl
cmVyLCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQpCit7CisgICAgSURpcmVjdDNEVGV4dHVyZTkgKnN1
cmZhY2VUZXh0dXJlID0gc3dhcGNoYWluLT5nZXRPZmZzY3JlZW5UZXh0dXJlKCk7CisgICAgbVRl
eHR1cmUgPSBzdXJmYWNlVGV4dHVyZTsKKyAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKKworICAg
IGluaXRpYWxpemVSZW5kZXJUYXJnZXQoKTsKK30KKworVGV4dHVyZVN0b3JhZ2U5XzJEOjpUZXh0
dXJlU3RvcmFnZTlfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQorICAgIDogVGV4dHVyZVN0b3JhZ2U5KHJlbmRlcmVyLCBH
ZXRUZXh0dXJlVXNhZ2UoUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5KHJlbmRlcmVyKS0+Q29udmVy
dFRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCksIHVzYWdlLCBmb3JjZVJlbmRl
cmFibGUpKQoreworICAgIG1UZXh0dXJlID0gTlVMTDsKKyAgICBtUmVuZGVyVGFyZ2V0ID0gTlVM
TDsKKyAgICAvLyBpZiB0aGUgd2lkdGggb3IgaGVpZ2h0IGlzIG5vdCBwb3NpdGl2ZSB0aGlzIHNo
b3VsZCBiZSB0cmVhdGVkIGFzIGFuIGluY29tcGxldGUgdGV4dHVyZQorICAgIC8vIHdlIGhhbmRs
ZSB0aGF0IGhlcmUgYnkgc2tpcHBpbmcgdGhlIGQzZCB0ZXh0dXJlIGNyZWF0aW9uCisgICAgaWYg
KHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKQorICAgIHsKKyAgICAgICAgSURpcmVjdDNERGV2aWNl
OSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICAgICAgZ2w6Ok1ha2VWYWxp
ZFNpemUoZmFsc2UsIGdsOjpJc0NvbXByZXNzZWQoaW50ZXJuYWxmb3JtYXQpLCAmd2lkdGgsICZo
ZWlnaHQsICZtTG9kT2Zmc2V0KTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZVRleHR1cmUod2lkdGgsIGhlaWdodCwgbGV2ZWxzID8gbGV2ZWxzICsgbUxvZE9mZnNldCA6
IDAsIGdldFVzYWdlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1SZW5kZXJlci0+Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZv
cm1hdCksIGdldFBvb2woKSwgJm1UZXh0dXJlLCBOVUxMKTsKKworICAgICAgICBpZiAoRkFJTEVE
KHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJS
X09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAg
ICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgfQorCisgICAg
aW5pdGlhbGl6ZVJlbmRlclRhcmdldCgpOworfQorCitUZXh0dXJlU3RvcmFnZTlfMkQ6On5UZXh0
dXJlU3RvcmFnZTlfMkQoKQoreworICAgIGlmIChtVGV4dHVyZSkKKyAgICB7CisgICAgICAgIG1U
ZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgfQorCisgICAgZGVsZXRlIG1SZW5kZXJUYXJnZXQ7Cit9
CisKK1RleHR1cmVTdG9yYWdlOV8yRCAqVGV4dHVyZVN0b3JhZ2U5XzJEOjptYWtlVGV4dHVyZVN0
b3JhZ2U5XzJEKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKQoreworICAgIEFTU0VSVChIQVNfRFlO
QU1JQ19UWVBFKFRleHR1cmVTdG9yYWdlOV8yRCosIHN0b3JhZ2UpKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8VGV4dHVyZVN0b3JhZ2U5XzJEKj4oc3RvcmFnZSk7Cit9CisKKy8vIEluY3JlbWVu
dHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0
dXJuZWQgc3VyZmFjZQorSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVTdG9yYWdlOV8yRDo6Z2V0
U3VyZmFjZUxldmVsKGludCBsZXZlbCwgYm9vbCBkaXJ0eSkKK3sKKyAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqc3VyZmFjZSA9IE5VTEw7CisKKyAgICBpZiAobVRleHR1cmUpCisgICAgeworICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWwgKyBtTG9k
T2Zmc2V0LCAmc3VyZmFjZSk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisK
KyAgICAgICAgLy8gV2l0aCBtYW5hZ2VkIHRleHR1cmVzIHRoZSBkcml2ZXIgbmVlZHMgdG8gYmUg
aW5mb3JtZWQgb2YgdXBkYXRlcyB0byB0aGUgbG93ZXIgbWlwbWFwIGxldmVscworICAgICAgICBp
ZiAobGV2ZWwgKyBtTG9kT2Zmc2V0ICE9IDAgJiYgaXNNYW5hZ2VkKCkgJiYgZGlydHkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1UZXh0dXJlLT5BZGREaXJ0eVJlY3QoTlVMTCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gc3VyZmFjZTsKK30KKworUmVuZGVyVGFyZ2V0ICpUZXh0
dXJlU3RvcmFnZTlfMkQ6OmdldFJlbmRlclRhcmdldCgpCit7CisgICAgcmV0dXJuIG1SZW5kZXJU
YXJnZXQ7Cit9CisKK3ZvaWQgVGV4dHVyZVN0b3JhZ2U5XzJEOjpnZW5lcmF0ZU1pcG1hcChpbnQg
bGV2ZWwpCit7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnVwcGVyID0gZ2V0U3VyZmFjZUxldmVs
KGxldmVsIC0gMSwgZmFsc2UpOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpsb3dlciA9IGdldFN1
cmZhY2VMZXZlbChsZXZlbCwgdHJ1ZSk7CisKKyAgICBpZiAodXBwZXIgIT0gTlVMTCAmJiBsb3dl
ciAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbVJlbmRlcmVyLT5ib3hGaWx0ZXIodXBwZXIsIGxv
d2VyKTsKKyAgICB9CisKKyAgICBpZiAodXBwZXIgIT0gTlVMTCkgdXBwZXItPlJlbGVhc2UoKTsK
KyAgICBpZiAobG93ZXIgIT0gTlVMTCkgbG93ZXItPlJlbGVhc2UoKTsKK30KKworSURpcmVjdDNE
QmFzZVRleHR1cmU5ICpUZXh0dXJlU3RvcmFnZTlfMkQ6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbVRleHR1cmU7Cit9CisKK3ZvaWQgVGV4dHVyZVN0b3JhZ2U5XzJEOjpp
bml0aWFsaXplUmVuZGVyVGFyZ2V0KCkKK3sKKyAgICBBU1NFUlQobVJlbmRlclRhcmdldCA9PSBO
VUxMKTsKKworICAgIGlmIChtVGV4dHVyZSAhPSBOVUxMICYmIGlzUmVuZGVyVGFyZ2V0KCkpCisg
ICAgeworICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IGdldFN1cmZhY2VMZXZl
bCgwLCBmYWxzZSk7CisKKyAgICAgICAgbVJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQ5
KG1SZW5kZXJlciwgc3VyZmFjZSk7CisgICAgfQorfQorCitUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6
VGV4dHVyZVN0b3JhZ2U5X0N1YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIGlu
dCBzaXplKQorICAgIDogVGV4dHVyZVN0b3JhZ2U5KHJlbmRlcmVyLCBHZXRUZXh0dXJlVXNhZ2Uo
UmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5KHJlbmRlcmVyKS0+Q29udmVydFRleHR1cmVJbnRlcm5h
bEZvcm1hdChpbnRlcm5hbGZvcm1hdCksIHVzYWdlLCBmb3JjZVJlbmRlcmFibGUpKQoreworICAg
IG1UZXh0dXJlID0gTlVMTDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7ICsraSkKKyAgICB7
CisgICAgICAgIG1SZW5kZXJUYXJnZXRbaV0gPSBOVUxMOworICAgIH0KKworICAgIC8vIGlmIHRo
ZSBzaXplIGlzIG5vdCBwb3NpdGl2ZSB0aGlzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGluY29t
cGxldGUgdGV4dHVyZQorICAgIC8vIHdlIGhhbmRsZSB0aGF0IGhlcmUgYnkgc2tpcHBpbmcgdGhl
IGQzZCB0ZXh0dXJlIGNyZWF0aW9uCisgICAgaWYgKHNpemUgPiAwKQorICAgIHsKKyAgICAgICAg
SURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICAg
ICAgaW50IGhlaWdodCA9IHNpemU7CisgICAgICAgIGdsOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBn
bDo6SXNDb21wcmVzc2VkKGludGVybmFsZm9ybWF0KSwgJnNpemUsICZoZWlnaHQsICZtTG9kT2Zm
c2V0KTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUN1YmVUZXh0dXJl
KHNpemUsIGxldmVscyA/IGxldmVscyArIG1Mb2RPZmZzZXQgOiAwLCBnZXRVc2FnZSgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJlbmRlcmVy
LT5Db252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0KSwgZ2V0UG9vbCgp
LCAmbVRleHR1cmUsIE5VTEwpOworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9S
WSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgICAgICBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbml0aWFsaXplUmVuZGVy
VGFyZ2V0KCk7Cit9CisKK1RleHR1cmVTdG9yYWdlOV9DdWJlOjp+VGV4dHVyZVN0b3JhZ2U5X0N1
YmUoKQoreworICAgIGlmIChtVGV4dHVyZSkKKyAgICB7CisgICAgICAgIG1UZXh0dXJlLT5SZWxl
YXNlKCk7CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyArK2kpCisgICAgewor
ICAgICAgICBkZWxldGUgbVJlbmRlclRhcmdldFtpXTsKKyAgICB9Cit9CisKK1RleHR1cmVTdG9y
YWdlOV9DdWJlICpUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlOV9DdWJl
KFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKQoreworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBF
KFRleHR1cmVTdG9yYWdlOV9DdWJlKiwgc3RvcmFnZSkpOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUZXh0dXJlU3RvcmFnZTlfQ3ViZSo+KHN0b3JhZ2UpOworfQorCisvLyBJbmNyZW1lbnRzIHJl
ZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVk
IHN1cmZhY2UKK0lEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6Z2V0Q3Vi
ZU1hcFN1cmZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCwgYm9vbCBkaXJ0eSkKK3sK
KyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IE5VTEw7CisKKyAgICBpZiAobVRleHR1
cmUpCisgICAgeworICAgICAgICBEM0RDVUJFTUFQX0ZBQ0VTIGZhY2UgPSBnbF9kM2Q5OjpDb252
ZXJ0Q3ViZUZhY2UoZmFjZVRhcmdldCk7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVRleHR1
cmUtPkdldEN1YmVNYXBTdXJmYWNlKGZhY2UsIGxldmVsICsgbUxvZE9mZnNldCwgJnN1cmZhY2Up
OworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgIC8vIFdpdGgg
bWFuYWdlZCB0ZXh0dXJlcyB0aGUgZHJpdmVyIG5lZWRzIHRvIGJlIGluZm9ybWVkIG9mIHVwZGF0
ZXMgdG8gdGhlIGxvd2VyIG1pcG1hcCBsZXZlbHMKKyAgICAgICAgaWYgKGxldmVsICE9IDAgJiYg
aXNNYW5hZ2VkKCkgJiYgZGlydHkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1UZXh0dXJlLT5B
ZGREaXJ0eVJlY3QoZmFjZSwgTlVMTCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
c3VyZmFjZTsKK30KKworUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6Z2V0UmVu
ZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0KQoreworICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0
W2dsOjpUZXh0dXJlQ3ViZU1hcDo6ZmFjZUluZGV4KGZhY2VUYXJnZXQpXTsKK30KKwordm9pZCBU
ZXh0dXJlU3RvcmFnZTlfQ3ViZTo6Z2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCkK
K3sKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqdXBwZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShHTF9U
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCAtIDEsIGZhbHNlKTsKKyAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqbG93ZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCwgdHJ1ZSk7CisKKyAgICBpZiAodXBw
ZXIgIT0gTlVMTCAmJiBsb3dlciAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbVJlbmRlcmVyLT5i
b3hGaWx0ZXIodXBwZXIsIGxvd2VyKTsKKyAgICB9CisKKyAgICBpZiAodXBwZXIgIT0gTlVMTCkg
dXBwZXItPlJlbGVhc2UoKTsKKyAgICBpZiAobG93ZXIgIT0gTlVMTCkgbG93ZXItPlJlbGVhc2Uo
KTsKK30KKworSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6Z2V0
QmFzZVRleHR1cmUoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTsKK30KKwordm9pZCBU
ZXh0dXJlU3RvcmFnZTlfQ3ViZTo6aW5pdGlhbGl6ZVJlbmRlclRhcmdldCgpCit7CisgICAgaWYg
KG1UZXh0dXJlICE9IE5VTEwgJiYgaXNSZW5kZXJUYXJnZXQoKSkKKyAgICB7CisgICAgICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gTlVMTDsKKworICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IDY7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1SZW5kZXJUYXJn
ZXRbaV0gPT0gTlVMTCk7CisKKyAgICAgICAgICAgIHN1cmZhY2UgPSBnZXRDdWJlTWFwU3VyZmFj
ZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBpLCAwLCBmYWxzZSk7CisKKyAgICAg
ICAgICAgIG1SZW5kZXJUYXJnZXRbaV0gPSBuZXcgUmVuZGVyVGFyZ2V0OShtUmVuZGVyZXIsIHN1
cmZhY2UpOworICAgICAgICB9CisgICAgfQorfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L1RleHR1cmVTdG9yYWdlOS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1RleHR1cmVTdG9yYWdlOS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljg2ZjU1MWExMzE1ZGE0NTM3MTNmYTE5NmQ3NzI4ZjcyNTdlMmJkODYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
VGV4dHVyZVN0b3JhZ2U5LmgKQEAgLTAsMCArMSwxMDkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBU
ZXh0dXJlU3RvcmFnZTkuaDogRGVmaW5lcyB0aGUgYWJzdHJhY3Qgcng6OlRleHR1cmVTdG9yYWdl
OSBjbGFzcyBhbmQgaXRzIGNvbmNyZXRlIGRlcml2ZWQKKy8vIGNsYXNzZXMgVGV4dHVyZVN0b3Jh
Z2U5XzJEIGFuZCBUZXh0dXJlU3RvcmFnZTlfQ3ViZSwgd2hpY2ggYWN0IGFzIHRoZSBpbnRlcmZh
Y2UgdG8gdGhlCisvLyBEM0Q5IHRleHR1cmUuCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVS
X1RFWFRVUkVTVE9SQUdFOV9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfVEVYVFVSRVNU
T1JBR0U5X0hfCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0b3JhZ2Uu
aCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKworbmFtZXNwYWNlIHJ4Cit7CitjbGFzcyBS
ZW5kZXJlcjk7CitjbGFzcyBTd2FwQ2hhaW45OworY2xhc3MgUmVuZGVyVGFyZ2V0OworY2xhc3Mg
UmVuZGVyVGFyZ2V0OTsKK2NsYXNzIEJsaXQ7CisKK2NsYXNzIFRleHR1cmVTdG9yYWdlOSA6IHB1
YmxpYyBUZXh0dXJlU3RvcmFnZQoreworICBwdWJsaWM6CisgICAgVGV4dHVyZVN0b3JhZ2U5KFJl
bmRlcmVyICpyZW5kZXJlciwgRFdPUkQgdXNhZ2UpOworICAgIHZpcnR1YWwgflRleHR1cmVTdG9y
YWdlOSgpOworCisgICAgc3RhdGljIFRleHR1cmVTdG9yYWdlOSAqbWFrZVRleHR1cmVTdG9yYWdl
OShUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSk7CisKKyAgICBzdGF0aWMgRFdPUkQgR2V0VGV4dHVy
ZVVzYWdlKEQzREZPUk1BVCBkM2RmbXQsIEdMZW51bSBnbHVzYWdlLCBib29sIGZvcmNlUmVuZGVy
YWJsZSk7CisgICAgc3RhdGljIGJvb2wgSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEM0RGT1JN
QVQgZm9ybWF0KTsKKworICAgIEQzRFBPT0wgZ2V0UG9vbCgpIGNvbnN0OworICAgIERXT1JEIGdl
dFVzYWdlKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0
QmFzZVRleHR1cmUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJl
bmRlclRhcmdldCgpIHsgcmV0dXJuIE5VTEw7IH0KKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAq
Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0KSB7IHJldHVybiBOVUxMOyB9CisgICAg
dmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCkge307CisgICAgdmlydHVhbCB2
b2lkIGdlbmVyYXRlTWlwbWFwKGludCBmYWNlLCBpbnQgbGV2ZWwpIHt9OworCisgICAgdmlydHVh
bCBpbnQgZ2V0TG9kT2Zmc2V0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzUmVuZGVyVGFy
Z2V0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzTWFuYWdlZCgpIGNvbnN0OworICAgIHZp
cnR1YWwgaW50IGxldmVsQ291bnQoKTsKKworICBwcm90ZWN0ZWQ6CisgICAgaW50IG1Mb2RPZmZz
ZXQ7CisgICAgUmVuZGVyZXI5ICptUmVuZGVyZXI7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2U5KTsKKworICAgIGNvbnN0IERXT1JEIG1E
M0RVc2FnZTsKKyAgICBjb25zdCBEM0RQT09MIG1EM0RQb29sOworfTsKKworY2xhc3MgVGV4dHVy
ZVN0b3JhZ2U5XzJEIDogcHVibGljIFRleHR1cmVTdG9yYWdlOQoreworICBwdWJsaWM6CisgICAg
VGV4dHVyZVN0b3JhZ2U5XzJEKFJlbmRlcmVyICpyZW5kZXJlciwgU3dhcENoYWluOSAqc3dhcGNo
YWluKTsKKyAgICBUZXh0dXJlU3RvcmFnZTlfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2
ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRl
cmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIH5UZXh0
dXJlU3RvcmFnZTlfMkQoKTsKKworICAgIHN0YXRpYyBUZXh0dXJlU3RvcmFnZTlfMkQgKm1ha2VU
ZXh0dXJlU3RvcmFnZTlfMkQoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpOworCisgICAgSURpcmVj
dDNEU3VyZmFjZTkgKmdldFN1cmZhY2VMZXZlbChpbnQgbGV2ZWwsIGJvb2wgZGlydHkpOworICAg
IHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoKTsKKyAgICB2aXJ0dWFsIElE
aXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKTsKKworICBwcml2YXRlOgorICAgIERJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZTlfMkQpOworCisgICAgdm9pZCBpbml0
aWFsaXplUmVuZGVyVGFyZ2V0KCk7CisKKyAgICBJRGlyZWN0M0RUZXh0dXJlOSAqbVRleHR1cmU7
CisgICAgUmVuZGVyVGFyZ2V0OSAqbVJlbmRlclRhcmdldDsKK307CisKK2NsYXNzIFRleHR1cmVT
dG9yYWdlOV9DdWJlIDogcHVibGljIFRleHR1cmVTdG9yYWdlOQoreworICBwdWJsaWM6CisgICAg
VGV4dHVyZVN0b3JhZ2U5X0N1YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIGlu
dCBzaXplKTsKKyAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTlfQ3ViZSgpOworCisgICAgc3Rh
dGljIFRleHR1cmVTdG9yYWdlOV9DdWJlICptYWtlVGV4dHVyZVN0b3JhZ2U5X0N1YmUoVGV4dHVy
ZVN0b3JhZ2UgKnN0b3JhZ2UpOworCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldEN1YmVNYXBT
dXJmYWNlKEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwsIGJvb2wgZGlydHkpOworICAgIHZp
cnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQpOwor
ICAgIHZpcnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgZmFjZSwgaW50IGxldmVsKTsK
KworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFn
ZTlfQ3ViZSk7CisKKyAgICB2b2lkIGluaXRpYWxpemVSZW5kZXJUYXJnZXQoKTsKKworICAgIElE
aXJlY3QzREN1YmVUZXh0dXJlOSAqbVRleHR1cmU7CisgICAgUmVuZGVyVGFyZ2V0OSAqbVJlbmRl
clRhcmdldFs2XTsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9URVhU
VVJFU1RPUkFHRTlfSF8KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleEJ1ZmZlcjkuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleEJ1ZmZlcjkuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjU3ZjViY2QyNTZhY2ViNzI1NzVhZmY5YTE5OGNjOWQwZjdkMjc2MzAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvVmVydGV4QnVmZmVyOS5jcHAKQEAgLTAsMCArMSw1MzAgQEAKKyNpbmNsdWRl
ICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVmVydGV4QnVmZmVyOS5j
cHA6IERlZmluZXMgdGhlIEQzRDkgVmVydGV4QnVmZmVyIGltcGxlbWVudGF0aW9uLgorCisjaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4QnVmZmVyOS5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3ZlcnRleGNvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9D
b250ZXh0LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5Lmgi
CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCisKK25hbWVzcGFjZSByeAoreworCiti
b29sIFZlcnRleEJ1ZmZlcjk6Om1UcmFuc2xhdGlvbnNJbml0aWFsaXplZCA9IGZhbHNlOworVmVy
dGV4QnVmZmVyOTo6Rm9ybWF0Q29udmVydGVyIFZlcnRleEJ1ZmZlcjk6Om1Gb3JtYXRDb252ZXJ0
ZXJzW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsKKworVmVydGV4QnVmZmVyOTo6
VmVydGV4QnVmZmVyOShyeDo6UmVuZGVyZXI5ICpjb25zdCByZW5kZXJlcikgOiBtUmVuZGVyZXIo
cmVuZGVyZXIpCit7CisgICAgbVZlcnRleEJ1ZmZlciA9IE5VTEw7CisgICAgbUJ1ZmZlclNpemUg
PSAwOworICAgIG1EeW5hbWljVXNhZ2UgPSBmYWxzZTsKKworICAgIGlmICghbVRyYW5zbGF0aW9u
c0luaXRpYWxpemVkKQorICAgIHsKKyAgICAgICAgaW5pdGlhbGl6ZVRyYW5zbGF0aW9ucyhyZW5k
ZXJlci0+Z2V0Q2Fwc0RlY2xUeXBlcygpKTsKKyAgICAgICAgbVRyYW5zbGF0aW9uc0luaXRpYWxp
emVkID0gdHJ1ZTsKKyAgICB9Cit9CisKK1ZlcnRleEJ1ZmZlcjk6On5WZXJ0ZXhCdWZmZXI5KCkK
K3sKKyAgICBpZiAobVZlcnRleEJ1ZmZlcikKKyAgICB7CisgICAgICAgIG1WZXJ0ZXhCdWZmZXIt
PlJlbGVhc2UoKTsKKyAgICAgICAgbVZlcnRleEJ1ZmZlciA9IE5VTEw7CisgICAgfQorfQorCiti
b29sIFZlcnRleEJ1ZmZlcjk6OmluaXRpYWxpemUodW5zaWduZWQgaW50IHNpemUsIGJvb2wgZHlu
YW1pY1VzYWdlKQoreworICAgIGlmIChtVmVydGV4QnVmZmVyKQorICAgIHsKKyAgICAgICAgbVZl
cnRleEJ1ZmZlci0+UmVsZWFzZSgpOworICAgICAgICBtVmVydGV4QnVmZmVyID0gTlVMTDsKKyAg
ICB9CisKKyAgICB1cGRhdGVTZXJpYWwoKTsKKworICAgIGlmIChzaXplID4gMCkKKyAgICB7Cisg
ICAgICAgIERXT1JEIGZsYWdzID0gRDNEVVNBR0VfV1JJVEVPTkxZOworICAgICAgICBpZiAoZHlu
YW1pY1VzYWdlKQorICAgICAgICB7CisgICAgICAgICAgICBmbGFncyB8PSBEM0RVU0FHRV9EWU5B
TUlDOworICAgICAgICB9CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXItPmNy
ZWF0ZVZlcnRleEJ1ZmZlcihzaXplLCBmbGFncywgJm1WZXJ0ZXhCdWZmZXIpOworCisgICAgICAg
IGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJPdXQgb2Yg
bWVtb3J5IGFsbG9jYXRpbmcgYSB2ZXJ0ZXggYnVmZmVyIG9mIHNpemUgJWx1LiIsIHNpemUpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgbUJ1ZmZl
clNpemUgPSBzaXplOworICAgIG1EeW5hbWljVXNhZ2UgPSBkeW5hbWljVXNhZ2U7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK1ZlcnRleEJ1ZmZlcjkgKlZlcnRleEJ1ZmZlcjk6Om1ha2VWZXJ0ZXhC
dWZmZXI5KFZlcnRleEJ1ZmZlciAqdmVydGV4QnVmZmVyKQoreworICAgIEFTU0VSVChIQVNfRFlO
QU1JQ19UWVBFKFZlcnRleEJ1ZmZlcjkqLCB2ZXJ0ZXhCdWZmZXIpKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8VmVydGV4QnVmZmVyOSo+KHZlcnRleEJ1ZmZlcik7Cit9CisKK2Jvb2wgVmVydGV4
QnVmZmVyOTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUg
JmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlcywgdW5zaWduZWQgaW50
IG9mZnNldCkKK3sKKyAgICBpZiAobVZlcnRleEJ1ZmZlcikKKyAgICB7CisgICAgICAgIGdsOjpC
dWZmZXIgKmJ1ZmZlciA9IGF0dHJpYi5tQm91bmRCdWZmZXIuZ2V0KCk7CisKKyAgICAgICAgaW50
IGlucHV0U3RyaWRlID0gYXR0cmliLnN0cmlkZSgpOworICAgICAgICBpbnQgZWxlbWVudFNpemUg
PSBhdHRyaWIudHlwZVNpemUoKTsKKyAgICAgICAgY29uc3QgRm9ybWF0Q29udmVydGVyICZjb252
ZXJ0ZXIgPSBmb3JtYXRDb252ZXJ0ZXIoYXR0cmliKTsKKworICAgICAgICBEV09SRCBsb2NrRmxh
Z3MgPSBtRHluYW1pY1VzYWdlID8gRDNETE9DS19OT09WRVJXUklURSA6IDA7CisKKyAgICAgICAg
dm9pZCAqbWFwUHRyID0gTlVMTDsKKworICAgICAgICB1bnNpZ25lZCBpbnQgbWFwU2l6ZTsKKyAg
ICAgICAgaWYgKCFzcGFjZVJlcXVpcmVkKGF0dHJpYiwgY291bnQsIGluc3RhbmNlcywgJm1hcFNp
emUpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKwor
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1WZXJ0ZXhCdWZmZXItPkxvY2sob2Zmc2V0LCBtYXBT
aXplLCAmbWFwUHRyLCBsb2NrRmxhZ3MpOworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
KyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJMb2NrIGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4
eCIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAg
ICAgICBjb25zdCBjaGFyICppbnB1dCA9IE5VTEw7CisgICAgICAgIGlmIChidWZmZXIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2UgKnN0b3JhZ2UgPSBidWZmZXItPmdldFN0
b3JhZ2UoKTsKKyAgICAgICAgICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHN0
b3JhZ2UtPmdldERhdGEoKSkgKyBzdGF0aWNfY2FzdDxpbnQ+KGF0dHJpYi5tT2Zmc2V0KTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlucHV0ID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgY2hhcio+KGF0dHJpYi5tUG9pbnRlcik7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoaW5zdGFuY2VzID09IDAgfHwgYXR0cmliLm1EaXZpc29yID09IDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlucHV0ICs9IGlucHV0U3RyaWRlICogc3RhcnQ7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoY29udmVydGVyLmlkZW50aXR5ICYmIGlucHV0U3RyaWRlID09IGVsZW1l
bnRTaXplKQorICAgICAgICB7CisgICAgICAgICAgICBtZW1jcHkobWFwUHRyLCBpbnB1dCwgY291
bnQgKiBpbnB1dFN0cmlkZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb252ZXJ0ZXIuY29udmVydEFycmF5KGlucHV0LCBpbnB1dFN0cmlkZSwgY291
bnQsIG1hcFB0cik7CisgICAgICAgIH0KKworICAgICAgICBtVmVydGV4QnVmZmVyLT5VbmxvY2so
KTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgRVJSKCJWZXJ0ZXggYnVmZmVyIG5vdCBpbml0aWFsaXplZC4iKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKworYm9vbCBWZXJ0ZXhCdWZmZXI5OjpzdG9yZVJhd0RhdGEoY29u
c3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBvZmZzZXQpCit7
CisgICAgaWYgKG1WZXJ0ZXhCdWZmZXIpCisgICAgeworICAgICAgICBEV09SRCBsb2NrRmxhZ3Mg
PSBtRHluYW1pY1VzYWdlID8gRDNETE9DS19OT09WRVJXUklURSA6IDA7CisKKyAgICAgICAgdm9p
ZCAqbWFwUHRyID0gTlVMTDsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVmVydGV4QnVmZmVy
LT5Mb2NrKG9mZnNldCwgc2l6ZSwgJm1hcFB0ciwgbG9ja0ZsYWdzKTsKKworICAgICAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiTG9jayBmYWlsZWQg
d2l0aCBlcnJvciAweCUwOHgiLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgbWVtY3B5KG1hcFB0ciwgZGF0YSwgc2l6ZSk7CisKKyAgICAg
ICAgbVZlcnRleEJ1ZmZlci0+VW5sb2NrKCk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEVSUigiVmVydGV4IGJ1ZmZlciBub3QgaW5pdGlh
bGl6ZWQuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgVmVydGV4
QnVmZmVyOTo6Z2V0U3BhY2VSZXF1aXJlZChjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRy
aWIsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqb3V0U3BhY2VSZXF1aXJlZCkgY29uc3QK
K3sKKyAgICByZXR1cm4gc3BhY2VSZXF1aXJlZChhdHRyaWIsIGNvdW50LCBpbnN0YW5jZXMsIG91
dFNwYWNlUmVxdWlyZWQpOworfQorCitib29sIFZlcnRleEJ1ZmZlcjk6OnJlcXVpcmVzQ29udmVy
c2lvbihjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0Cit7CisgICAgcmV0
dXJuICFmb3JtYXRDb252ZXJ0ZXIoYXR0cmliKS5pZGVudGl0eTsKK30KKwordW5zaWduZWQgaW50
IFZlcnRleEJ1ZmZlcjk6OmdldFZlcnRleFNpemUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAm
YXR0cmliKSBjb25zdAoreworICAgIHVuc2lnbmVkIGludCBzcGFjZVJlcXVpcmVkOworICAgIHJl
dHVybiBnZXRTcGFjZVJlcXVpcmVkKGF0dHJpYiwgMSwgMCwgJnNwYWNlUmVxdWlyZWQpID8gc3Bh
Y2VSZXF1aXJlZCA6IDA7Cit9CisKK0QzRERFQ0xUWVBFIFZlcnRleEJ1ZmZlcjk6OmdldERlY2xU
eXBlKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QKK3sKKyAgICByZXR1
cm4gZm9ybWF0Q29udmVydGVyKGF0dHJpYikuZDNkRGVjbFR5cGU7Cit9CisKK3Vuc2lnbmVkIGlu
dCBWZXJ0ZXhCdWZmZXI5OjpnZXRCdWZmZXJTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUJ1
ZmZlclNpemU7Cit9CisKK2Jvb2wgVmVydGV4QnVmZmVyOTo6c2V0QnVmZmVyU2l6ZSh1bnNpZ25l
ZCBpbnQgc2l6ZSkKK3sKKyAgICBpZiAoc2l6ZSA+IG1CdWZmZXJTaXplKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGluaXRpYWxpemUoc2l6ZSwgbUR5bmFtaWNVc2FnZSk7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKworYm9vbCBWZXJ0ZXhC
dWZmZXI5OjpkaXNjYXJkKCkKK3sKKyAgICBpZiAobVZlcnRleEJ1ZmZlcikKKyAgICB7CisgICAg
ICAgIHZvaWQgKmR1bW15OworICAgICAgICBIUkVTVUxUIHJlc3VsdDsKKworICAgICAgICByZXN1
bHQgPSBtVmVydGV4QnVmZmVyLT5Mb2NrKDAsIDEsICZkdW1teSwgRDNETE9DS19ESVNDQVJEKTsK
KyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIo
IkRpc2NhcmQgbG9jayBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgiLCByZXN1bHQpOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0ID0gbVZlcnRl
eEJ1ZmZlci0+VW5sb2NrKCk7CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAg
eworICAgICAgICAgICAgRVJSKCJEaXNjYXJkIHVubG9jayBmYWlsZWQgd2l0aCBlcnJvciAweCUw
OHgiLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEVSUigi
VmVydGV4IGJ1ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKK0lEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKiBWZXJ0ZXhCdWZmZXI5OjpnZXRC
dWZmZXIoKSBjb25zdAoreworICAgIHJldHVybiBtVmVydGV4QnVmZmVyOworfQorCisvLyBNYXBw
aW5nIGZyb20gT3BlbkdMLUVTIHZlcnRleCBhdHRyaWIgdHlwZSB0byBEM0QgZGVjbCB0eXBlOgor
Ly8KKy8vIEJZVEUgICAgICAgICAgICAgICAgIFNIT1JUIChDYXN0KQorLy8gQllURS1ub3JtICAg
ICAgICAgICAgRkxPQVQgKE5vcm1hbGl6ZSkgKGNhbid0IGJlIGV4YWN0bHkgcmVwcmVzZW50ZWQg
YXMgU0hPUlQtbm9ybSkKKy8vIFVOU0lHTkVEX0JZVEUgICAgICAgIFVCWVRFNCAoSWRlbnRpdHkp
IG9yIFNIT1JUIChDYXN0KQorLy8gVU5TSUdORURfQllURS1ub3JtICAgVUJZVEU0TiAoSWRlbnRp
dHkpIG9yIEZMT0FUIChOb3JtYWxpemUpCisvLyBTSE9SVCAgICAgICAgICAgICAgICBTSE9SVCAo
SWRlbnRpdHkpCisvLyBTSE9SVC1ub3JtICAgICAgICAgICBTSE9SVC1ub3JtIChJZGVudGl0eSkg
b3IgRkxPQVQgKE5vcm1hbGl6ZSkKKy8vIFVOU0lHTkVEX1NIT1JUICAgICAgIEZMT0FUIChDYXN0
KQorLy8gVU5TSUdORURfU0hPUlQtbm9ybSAgVVNIT1JULW5vcm0gKElkZW50aXR5KSBvciBGTE9B
VCAoTm9ybWFsaXplKQorLy8gRklYRUQgKG5vdCBpbiBXZWJHTCkgRkxPQVQgKEZpeGVkVG9GbG9h
dCkKKy8vIEZMT0FUICAgICAgICAgICAgICAgIEZMT0FUIChJZGVudGl0eSkKKworLy8gR0xUb0NU
eXBlIG1hcHMgZnJvbSBHTCB0eXBlIChhcyBHTGVudW0pIHRvIHRoZSBDIHR5cGVkZWYuCit0ZW1w
bGF0ZSA8R0xlbnVtIEdMVHlwZT4gc3RydWN0IEdMVG9DVHlwZSB7IH07CisKK3RlbXBsYXRlIDw+
IHN0cnVjdCBHTFRvQ1R5cGU8R0xfQllURT4gICAgICAgICAgIHsgdHlwZWRlZiBHTGJ5dGUgdHlw
ZTsgICAgICB9OwordGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9VTlNJR05FRF9CWVRF
PiAgeyB0eXBlZGVmIEdMdWJ5dGUgdHlwZTsgICAgIH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xU
b0NUeXBlPEdMX1NIT1JUPiAgICAgICAgICB7IHR5cGVkZWYgR0xzaG9ydCB0eXBlOyAgICAgfTsK
K3RlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfVU5TSUdORURfU0hPUlQ+IHsgdHlwZWRl
ZiBHTHVzaG9ydCB0eXBlOyAgICB9OwordGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9G
SVhFRD4gICAgICAgICAgeyB0eXBlZGVmIEdMdWludCB0eXBlOyAgICAgIH07Cit0ZW1wbGF0ZSA8
PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX0ZMT0FUPiAgICAgICAgICB7IHR5cGVkZWYgR0xmbG9hdCB0
eXBlOyAgICAgfTsKKworLy8gVGhpcyBkaWZmZXJzIGZyb20gRDNEREVDTFRZUEUgaW4gdGhhdCBp
dCBpcyB1bnNpemVkLiAoU2l6ZSBleHBhbnNpb24gaXMgYXBwbGllZCBsYXN0LikKK2VudW0gRDNE
VmVydGV4VHlwZQoreworICAgIEQzRFZUX0ZMT0FULAorICAgIEQzRFZUX1NIT1JULAorICAgIEQz
RFZUX1NIT1JUX05PUk0sCisgICAgRDNEVlRfVUJZVEUsCisgICAgRDNEVlRfVUJZVEVfTk9STSwK
KyAgICBEM0RWVF9VU0hPUlRfTk9STQorfTsKKworLy8gRDNEVG9DVHlwZSBtYXBzIGZyb20gRDNE
IHZlcnRleCB0eXBlIChhcyBlbnVtIEQzRFZlcnRleFR5cGUpIHRvIHRoZSBjb3JyZXNwb25kaW5n
IEMgdHlwZS4KK3RlbXBsYXRlIDx1bnNpZ25lZCBpbnQgRDNEVHlwZT4gc3RydWN0IEQzRFRvQ1R5
cGUgeyB9OworCit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9GTE9BVD4geyB0
eXBlZGVmIGZsb2F0IHR5cGU7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RW
VF9TSE9SVD4geyB0eXBlZGVmIHNob3J0IHR5cGU7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNE
VG9DVHlwZTxEM0RWVF9TSE9SVF9OT1JNPiB7IHR5cGVkZWYgc2hvcnQgdHlwZTsgfTsKK3RlbXBs
YXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1VCWVRFPiB7IHR5cGVkZWYgdW5zaWduZWQg
Y2hhciB0eXBlOyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfVUJZVEVf
Tk9STT4geyB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdHlwZTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVj
dCBEM0RUb0NUeXBlPEQzRFZUX1VTSE9SVF9OT1JNPiB7IHR5cGVkZWYgdW5zaWduZWQgc2hvcnQg
dHlwZTsgfTsKKworLy8gRW5jb2RlIHRoZSB0eXBlL3NpemUgY29tYmluYXRpb25zIHRoYXQgRDNE
IHBlcm1pdHMuIEZvciBlYWNoIHR5cGUvc2l6ZSBpdCBleHBhbmRzIHRvIGEgd2lkZW5lciB0aGF0
IHdpbGwgcHJvdmlkZSB0aGUgYXBwcm9wcmlhdGUgZmluYWwgc2l6ZS4KK3RlbXBsYXRlIDx1bnNp
Z25lZCBpbnQgdHlwZSwgaW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGUgeyB9OworCit0ZW1wbGF0
ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfRkxPQVQsIHNpemU+ICAgICAgICAg
IDogTm9XaWRlbjxzaXplPiB7IH07Cit0ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1
bGU8RDNEVlRfU0hPUlQsIHNpemU+ICAgICAgICAgIDogV2lkZW5Ub0V2ZW48c2l6ZT4geyB9Owor
dGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1NIT1JUX05PUk0sIHNp
emU+ICAgICA6IFdpZGVuVG9FdmVuPHNpemU+IHsgfTsKK3RlbXBsYXRlIDxpbnQgc2l6ZT4gc3Ry
dWN0IFdpZGVuUnVsZTxEM0RWVF9VQllURSwgc2l6ZT4gICAgICAgICAgOiBXaWRlblRvRm91cjxz
aXplPiB7IH07Cit0ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfVUJZ
VEVfTk9STSwgc2l6ZT4gICAgIDogV2lkZW5Ub0ZvdXI8c2l6ZT4geyB9OwordGVtcGxhdGUgPGlu
dCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1VTSE9SVF9OT1JNLCBzaXplPiAgICA6IFdp
ZGVuVG9FdmVuPHNpemU+IHsgfTsKKworLy8gVmVydGV4VHlwZUZsYWdzIGVuY29kZXMgdGhlIEQz
RENBUFM5OjpEZWNsVHlwZSBmbGFnIGFuZCB2ZXJ0ZXggZGVjbGFyYXRpb24gZmxhZyBmb3IgZWFj
aCBEM0QgdmVydGV4IHR5cGUgJiBzaXplIGNvbWJpbmF0aW9uLgordGVtcGxhdGUgPHVuc2lnbmVk
IGludCBkM2R0eXBlLCBpbnQgc2l6ZT4gc3RydWN0IFZlcnRleFR5cGVGbGFncyB7IH07CisKK3Rl
bXBsYXRlIDx1bnNpZ25lZCBpbnQgX2NhcGZsYWcsIHVuc2lnbmVkIGludCBfZGVjbGZsYWc+Citz
dHJ1Y3QgVmVydGV4VHlwZUZsYWdzSGVscGVyCit7CisgICAgZW51bSB7IGNhcGZsYWcgPSBfY2Fw
ZmxhZyB9OworICAgIGVudW0geyBkZWNsZmxhZyA9IF9kZWNsZmxhZyB9OworfTsKKwordGVtcGxh
dGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwgMT4gOiBWZXJ0ZXhUeXBl
RmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQxPiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1
Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FULCAyPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBl
cjwwLCBEM0RERUNMVFlQRV9GTE9BVDI+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhU
eXBlRmxhZ3M8RDNEVlRfRkxPQVQsIDM+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERF
Q0xUWVBFX0ZMT0FUMz4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxE
M0RWVF9GTE9BVCwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxP
QVQ0PiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JU
LCAyPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9TSE9SVDI+IHsgfTsK
K3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlQsIDQ+IDogVmVy
dGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX1NIT1JUND4geyB9OwordGVtcGxhdGUg
PD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVF9OT1JNLCAyPiA6IFZlcnRleFR5
cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfU0hPUlQyTiwgRDNEREVDTFRZUEVfU0hPUlQyTj4geyB9
OwordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVF9OT1JNLCA0
PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfU0hPUlQ0TiwgRDNEREVDTFRZUEVf
U0hPUlQ0Tj4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9V
QllURSwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VCWVRFNCwgRDNEREVD
TFRZUEVfVUJZVEU0PiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQz
RFZUX1VCWVRFX05PUk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VQllU
RTROLCBEM0RERUNMVFlQRV9VQllURTROPiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4
VHlwZUZsYWdzPEQzRFZUX1VTSE9SVF9OT1JNLCAyPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxE
M0REVENBUFNfVVNIT1JUMk4sIEQzRERFQ0xUWVBFX1VTSE9SVDJOPiB7IH07Cit0ZW1wbGF0ZSA8
PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1VTSE9SVF9OT1JNLCA0PiA6IFZlcnRleFR5
cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfVVNIT1JUNE4sIEQzRERFQ0xUWVBFX1VTSE9SVDROPiB7
IH07CisKKworLy8gVmVydGV4VHlwZU1hcHBpbmcgbWFwcyBHTCB0eXBlICYgbm9ybWFsaXplZCBm
bGFnIHRvIHByZWZlcnJlZCBhbmQgZmFsbGJhY2sgRDNEIHZlcnRleCB0eXBlcyAoYXMgRDNEVmVy
dGV4VHlwZSBlbnVtcykuCit0ZW1wbGF0ZSA8R0xlbnVtIEdMdHlwZSwgYm9vbCBub3JtYWxpemVk
PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmcgeyB9OworCit0ZW1wbGF0ZSA8RDNEVmVydGV4VHlw
ZSBQcmVmZXJyZWQsIEQzRFZlcnRleFR5cGUgRmFsbGJhY2sgPSBQcmVmZXJyZWQ+CitzdHJ1Y3Qg
VmVydGV4VHlwZU1hcHBpbmdCYXNlCit7CisgICAgZW51bSB7IHByZWZlcnJlZCA9IFByZWZlcnJl
ZCB9OworICAgIGVudW0geyBmYWxsYmFjayA9IEZhbGxiYWNrIH07Cit9OworCit0ZW1wbGF0ZSA8
PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfQllURSwgZmFsc2U+ICAgICAgICAgICAgICAg
ICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfU0hPUlQ+IHsgfTsgICAgICAg
ICAgICAgICAgICAgICAgIC8vIENhc3QKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFw
cGluZzxHTF9CWVRFLCB0cnVlPiAgICAgICAgICAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVN
YXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9y
bWFsaXplCit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdORURf
QllURSwgZmFsc2U+ICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRf
VUJZVEUsIEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgIC8vIElkZW50aXR5LCBDYXN0Cit0ZW1w
bGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdORURfQllURSwgdHJ1ZT4g
ICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfVUJZVEVfTk9STSwg
RDNEVlRfRkxPQVQ+IHsgfTsgICAgIC8vIElkZW50aXR5LCBOb3JtYWxpemUKK3RlbXBsYXRlIDw+
IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9TSE9SVCwgZmFsc2U+ICAgICAgICAgICAgICAg
ICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9TSE9SVD4geyB9OyAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSWRlbnRpdHkKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBl
TWFwcGluZzxHTF9TSE9SVCwgdHJ1ZT4gICAgICAgICAgICAgICAgICAgICAgICA6IFZlcnRleFR5
cGVNYXBwaW5nQmFzZTxEM0RWVF9TSE9SVF9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAgICAgLy8g
Q2FzdCwgTm9ybWFsaXplCit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xf
VU5TSUdORURfU0hPUlQsIGZhbHNlPiAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jh
c2U8RDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8vIENhc3QKK3RlbXBs
YXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9TSE9SVCwgdHJ1ZT4g
ICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9VU0hPUlRfTk9STSwg
RDNEVlRfRkxPQVQ+IHsgfTsgICAgLy8gQ2FzdCwgTm9ybWFsaXplCit0ZW1wbGF0ZSA8Ym9vbCBu
b3JtYWxpemVkPiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfRklYRUQsIG5vcm1hbGl6ZWQ+
ICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEZpeGVkVG9GbG9hdAordGVtcGxhdGUgPGJvb2wgbm9ybWFsaXplZD4gc3Ry
dWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX0ZMT0FULCBub3JtYWxpemVkPiAgIDogVmVydGV4VHlw
ZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBJ
ZGVudGl0eQorCisKKy8vIEdpdmVuIGEgR0wgdHlwZSAmIG5vcm0gZmxhZyBhbmQgYSBEM0QgdHlw
ZSwgQ29udmVyc2lvblJ1bGUgcHJvdmlkZXMgdGhlIHR5cGUgY29udmVyc2lvbiBydWxlIChDYXN0
LCBOb3JtYWxpemUsIElkZW50aXR5LCBGaXhlZFRvRmxvYXQpLgorLy8gVGhlIGNvbnZlcnNpb24g
cnVsZXMgdGhlbXNlbHZlcyBhcmUgZGVmaW5lZCBpbiB2ZXJ0ZXhjb252ZXJzaW9uLmguCisKKy8v
IEFsbW9zdCBhbGwgY2FzZXMgYXJlIGNvdmVyZWQgYnkgQ2FzdCAoaW5jbHVkaW5nIHRob3NlIHRo
YXQgYXJlIGFjdHVhbGx5IElkZW50aXR5IHNpbmNlIENhc3Q8VCxUPiBrbm93cyBpdCdzIGFuIGlk
ZW50aXR5IG1hcHBpbmcpLgordGVtcGxhdGUgPEdMZW51bSBmcm9tVHlwZSwgYm9vbCBub3JtYWxp
emVkLCB1bnNpZ25lZCBpbnQgdG9UeXBlPgorc3RydWN0IENvbnZlcnNpb25SdWxlIDogQ2FzdDx0
eXBlbmFtZSBHTFRvQ1R5cGU8ZnJvbVR5cGU+Ojp0eXBlLCB0eXBlbmFtZSBEM0RUb0NUeXBlPHRv
VHlwZT46OnR5cGU+IHsgfTsKKworLy8gQWxsIGNvbnZlcnNpb25zIGZyb20gbm9ybWFsaXplZCB0
eXBlcyB0byBmbG9hdCB1c2UgdGhlIE5vcm1hbGl6ZSBvcGVyYXRvci4KK3RlbXBsYXRlIDxHTGVu
dW0gZnJvbVR5cGU+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxmcm9tVHlwZSwgdHJ1ZSwgRDNEVlRf
RkxPQVQ+IDogTm9ybWFsaXplPHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5cGU+IHsg
fTsKKworLy8gVXNlIGEgZnVsbCBzcGVjaWFsaXphdGlvbiBmb3IgdGhpcyBzbyB0aGF0IGl0IHBy
ZWZlcmVudGlhbGx5IG1hdGNoZXMgYWhlYWQgb2YgdGhlIGdlbmVyaWMgbm9ybWFsaXplLXRvLWZs
b2F0IHJ1bGVzLgordGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCB0
cnVlLCBEM0RWVF9GTE9BVD4gIDogRml4ZWRUb0Zsb2F0PEdMaW50LCAxNj4geyB9OwordGVtcGxh
dGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCBmYWxzZSwgRDNEVlRfRkxPQVQ+
IDogRml4ZWRUb0Zsb2F0PEdMaW50LCAxNj4geyB9OworCisvLyBBIDItc3RhZ2UgY29uc3RydWN0
aW9uIGlzIHVzZWQgZm9yIERlZmF1bHRWZXJ0ZXhWYWx1ZXMgYmVjYXVzZSBmbG9hdCBtdXN0IHVz
ZSBTaW1wbGVEZWZhdWx0VmFsdWVzIChpLmUuIDAvMSkKKy8vIHdoZXRoZXIgaXQgaXMgbm9ybWFs
aXplZCBvciBub3QuCit0ZW1wbGF0ZSA8Y2xhc3MgVCwgYm9vbCBub3JtYWxpemVkPiBzdHJ1Y3Qg
RGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMiB7IH07CisKK3RlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1
Y3QgRGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMjxULCB0cnVlPiAgOiBOb3JtYWxpemVkRGVmYXVs
dFZhbHVlczxUPiB7IH07Cit0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhW
YWx1ZXNTdGFnZTI8VCwgZmFsc2U+IDogU2ltcGxlRGVmYXVsdFZhbHVlczxUPiB7IH07CisKKy8v
IFdvcmsgb3V0IHRoZSBkZWZhdWx0IHZhbHVlIHJ1bGUgZm9yIGEgRDNEIHR5cGUgKGV4cHJlc3Nl
ZCBhcyB0aGUgQyB0eXBlKSBhbmQKK3RlbXBsYXRlIDxjbGFzcyBULCBib29sIG5vcm1hbGl6ZWQ+
IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzIDogRGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMjxU
LCBub3JtYWxpemVkPiB7IH07Cit0ZW1wbGF0ZSA8Ym9vbCBub3JtYWxpemVkPiBzdHJ1Y3QgRGVm
YXVsdFZlcnRleFZhbHVlczxmbG9hdCwgbm9ybWFsaXplZD4gOiBTaW1wbGVEZWZhdWx0VmFsdWVz
PGZsb2F0PiB7IH07CisKKy8vIFBvbGljeSBydWxlcyBmb3IgdXNlIHdpdGggQ29udmVydGVyLCB0
byBjaG9vc2Ugd2hldGhlciB0byB1c2UgdGhlIHByZWZlcnJlZCBvciBmYWxsYmFjayBjb252ZXJz
aW9uLgorLy8gVGhlIGZhbGxiYWNrIGNvbnZlcnNpb24gcHJvZHVjZXMgYW4gb3V0cHV0IHRoYXQg
YWxsIEQzRDkgZGV2aWNlcyBtdXN0IHN1cHBvcnQuCit0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0
IFVzZVByZWZlcnJlZCB7IGVudW0geyB0eXBlID0gVDo6cHJlZmVycmVkIH07IH07Cit0ZW1wbGF0
ZSA8Y2xhc3MgVD4gc3RydWN0IFVzZUZhbGxiYWNrIHsgZW51bSB7IHR5cGUgPSBUOjpmYWxsYmFj
ayB9OyB9OworCisvLyBDb252ZXJ0ZXIgdGllcyBpdCBhbGwgdG9nZXRoZXIuIEdpdmVuIGFuIE9w
ZW5HTCB0eXBlL25vcm0vc2l6ZSBhbmQgY2hvaWNlIG9mIHByZWZlcnJlZC9mYWxsYmFjayBjb252
ZXJzaW9uLAorLy8gaXQgcHJvdmlkZXMgYWxsIHRoZSBtZW1iZXJzIG9mIHRoZSBhcHByb3ByaWF0
ZSBWZXJ0ZXhEYXRhQ29udmVydGVyLCB0aGUgRDNEQ0FQUzk6OkRlY2xUeXBlcyBmbGFnIGluIGNh
cCBmbGFnCisvLyBhbmQgdGhlIEQzRERFQ0xUWVBFIG1lbWJlciBuZWVkZWQgZm9yIHRoZSB2ZXJ0
ZXggZGVjbGFyYXRpb24gaW4gZGVjbGZsYWcuCit0ZW1wbGF0ZSA8R0xlbnVtIGZyb21UeXBlLCBi
b29sIG5vcm1hbGl6ZWQsIGludCBzaXplLCB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgUHJlZmVy
ZW5jZVJ1bGU+CitzdHJ1Y3QgQ29udmVydGVyCisgICAgOiBWZXJ0ZXhEYXRhQ29udmVydGVyPHR5
cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdpZGVuUnVsZTxQcmVmZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUs
IG5vcm1hbGl6ZWQ+ID46OnR5cGUsIHNpemU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICBD
b252ZXJzaW9uUnVsZTxmcm9tVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm9ybWFsaXplZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUHJlZmVyZW5jZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxp
emVkPiA+Ojp0eXBlPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdFZlcnRleFZh
bHVlczx0eXBlbmFtZSBEM0RUb0NUeXBlPFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBlTWFwcGlu
Zzxmcm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6dHlwZT46OnR5cGUsIG5vcm1hbGl6ZWQgPiA+Cit7
Citwcml2YXRlOgorICAgIGVudW0geyBkM2R0eXBlID0gUHJlZmVyZW5jZVJ1bGU8IFZlcnRleFR5
cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBlIH07CisgICAgZW51bSB7IGQz
ZHNpemUgPSBXaWRlblJ1bGU8ZDNkdHlwZSwgc2l6ZT46OmZpbmFsV2lkdGggfTsKKworcHVibGlj
OgorICAgIGVudW0geyBjYXBmbGFnID0gVmVydGV4VHlwZUZsYWdzPGQzZHR5cGUsIGQzZHNpemU+
OjpjYXBmbGFnIH07CisgICAgZW51bSB7IGRlY2xmbGFnID0gVmVydGV4VHlwZUZsYWdzPGQzZHR5
cGUsIGQzZHNpemU+OjpkZWNsZmxhZyB9OworfTsKKworLy8gSW5pdGlhbGl6ZSBhIFRyYW5zbGF0
aW9uSW5mbworI2RlZmluZSBUUkFOU0xBVElPTih0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVk
Pjo6aWRlbnRpdHksICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBDb252ZXJ0
ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6ZmluYWxTaXplLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVy
cmVkPjo6Y29udmVydEFycmF5LCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBzdGF0
aWNfY2FzdDxEM0RERUNMVFlQRT4oQ29udmVydGVyPHR5cGUsIG5vcm0sIHNpemUsIHByZWZlcnJl
ZD46OmRlY2xmbGFnKSAgXAorICAgIH0KKworI2RlZmluZSBUUkFOU0xBVElPTl9GT1JfVFlQRV9O
T1JNX1NJWkUodHlwZSwgbm9ybSwgc2l6ZSkgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBDb252ZXJ0ZXI8
dHlwZSwgbm9ybSwgc2l6ZSwgVXNlUHJlZmVycmVkPjo6Y2FwZmxhZywgXAorICAgICAgICBUUkFO
U0xBVElPTih0eXBlLCBub3JtLCBzaXplLCBVc2VQcmVmZXJyZWQpLCAgICAgICAgXAorICAgICAg
ICBUUkFOU0xBVElPTih0eXBlLCBub3JtLCBzaXplLCBVc2VGYWxsYmFjaykgICAgICAgICAgXAor
ICAgIH0KKworI2RlZmluZSBUUkFOU0xBVElPTlNfRk9SX1RZUEUodHlwZSkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05P
Uk1fU0laRSh0eXBlLCBmYWxzZSwgMSksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0
eXBlLCBmYWxzZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxz
ZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgNCkgfSwg
XAorICAgICAgICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCB0cnVlLCAx
KSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRydWUsIDIpLCBUUkFOU0xB
VElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgdHJ1ZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9U
WVBFX05PUk1fU0laRSh0eXBlLCB0cnVlLCA0KSB9LCAgICAgXAorICAgIH0KKworI2RlZmluZSBU
UkFOU0xBVElPTlNfRk9SX1RZUEVfTk9fTk9STSh0eXBlKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxz
ZSwgMSksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMiksIFRS
QU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMyksIFRSQU5TTEFUSU9O
X0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgNCkgfSwgXAorICAgICAgICB7IFRSQU5T
TEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMSksIFRSQU5TTEFUSU9OX0ZP
Ul9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05P
Uk1fU0laRSh0eXBlLCBmYWxzZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0
eXBlLCBmYWxzZSwgNCkgfSwgXAorICAgIH0KKworY29uc3QgVmVydGV4QnVmZmVyOTo6VHJhbnNs
YXRpb25EZXNjcmlwdGlvbiBWZXJ0ZXhCdWZmZXI5OjptUG9zc2libGVUcmFuc2xhdGlvbnNbTlVN
X0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVNdWzJdWzRdID0gLy8gW0dMIHR5cGVzIGFzIGVudW1lcmF0
ZWQgYnkgdHlwZUluZGV4KCldW25vcm1hbGl6ZWRdW3NpemUtMV0KK3sKKyAgICBUUkFOU0xBVElP
TlNfRk9SX1RZUEUoR0xfQllURSksCisgICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKEdMX1VOU0lH
TkVEX0JZVEUpLAorICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9TSE9SVCksCisgICAgVFJB
TlNMQVRJT05TX0ZPUl9UWVBFKEdMX1VOU0lHTkVEX1NIT1JUKSwKKyAgICBUUkFOU0xBVElPTlNf
Rk9SX1RZUEVfTk9fTk9STShHTF9GSVhFRCksCisgICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFX05P
X05PUk0oR0xfRkxPQVQpCit9OworCit2b2lkIFZlcnRleEJ1ZmZlcjk6OmluaXRpYWxpemVUcmFu
c2xhdGlvbnMoRFdPUkQgZGVjbFR5cGVzKQoreworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVM7IGkrKykKKyAgICB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgMjsgaisrKQorICAgICAgICB7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBrID0gMDsgayA8IDQ7IGsrKykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAobVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2tdLmNhcHNGbGFn
ID09IDAgfHwgKGRlY2xUeXBlcyAmIG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tpXVtqXVtrXS5jYXBz
RmxhZykgIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1Gb3Jt
YXRDb252ZXJ0ZXJzW2ldW2pdW2tdID0gbVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2tdLnBy
ZWZlcnJlZENvbnZlcnNpb247CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1Gb3JtYXRDb252ZXJ0
ZXJzW2ldW2pdW2tdID0gbVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2tdLmZhbGxiYWNrQ29u
dmVyc2lvbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3Vuc2lnbmVkIGludCBWZXJ0ZXhCdWZmZXI5Ojp0eXBlSW5kZXgoR0xlbnVtIHR5
cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfQllURTogcmV0
dXJuIDA7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6IHJldHVybiAxOworICAgICAgY2Fz
ZSBHTF9TSE9SVDogcmV0dXJuIDI7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOiByZXR1
cm4gMzsKKyAgICAgIGNhc2UgR0xfRklYRUQ6IHJldHVybiA0OworICAgICAgY2FzZSBHTF9GTE9B
VDogcmV0dXJuIDU7CisKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiA1Owor
ICAgIH0KK30KKworY29uc3QgVmVydGV4QnVmZmVyOTo6Rm9ybWF0Q29udmVydGVyICZWZXJ0ZXhC
dWZmZXI5Ojpmb3JtYXRDb252ZXJ0ZXIoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmli
dXRlKQoreworICAgIHJldHVybiBtRm9ybWF0Q29udmVydGVyc1t0eXBlSW5kZXgoYXR0cmlidXRl
Lm1UeXBlKV1bYXR0cmlidXRlLm1Ob3JtYWxpemVkXVthdHRyaWJ1dGUubVNpemUgLSAxXTsKK30K
KworYm9vbCBWZXJ0ZXhCdWZmZXI5OjpzcGFjZVJlcXVpcmVkKGNvbnN0IGdsOjpWZXJ0ZXhBdHRy
aWJ1dGUgJmF0dHJpYiwgc3RkOjpzaXplX3QgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqb3V0U3BhY2VSZXF1
aXJlZCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgZWxlbWVudFNpemUgPSBmb3JtYXRDb252ZXJ0ZXIo
YXR0cmliKS5vdXRwdXRFbGVtZW50U2l6ZTsKKworICAgIGlmIChhdHRyaWIubUFycmF5RW5hYmxl
ZCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBlbGVtZW50Q291bnQgPSAwOworICAgICAg
ICBpZiAoaW5zdGFuY2VzID09IDAgfHwgYXR0cmliLm1EaXZpc29yID09IDApCisgICAgICAgIHsK
KyAgICAgICAgICAgIGVsZW1lbnRDb3VudCA9IGNvdW50OworICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4o
aW5zdGFuY2VzKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLSAo
YXR0cmliLm1EaXZpc29yIC0gMSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8g
Um91bmQgdXAKKyAgICAgICAgICAgICAgICBlbGVtZW50Q291bnQgPSAoc3RhdGljX2Nhc3Q8dW5z
aWduZWQgaW50PihpbnN0YW5jZXMpICsgKGF0dHJpYi5tRGl2aXNvciAtIDEpKSAvIGF0dHJpYi5t
RGl2aXNvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBlbGVtZW50Q291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+
KGluc3RhbmNlcykgLyBhdHRyaWIubURpdmlzb3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBpZiAoZWxlbWVudFNpemUgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZCBpbnQ+OjptYXgoKSAvIGVsZW1lbnRDb3VudCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KG91dFNwYWNlUmVxdWlyZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKm91dFNw
YWNlUmVxdWlyZWQgPSBlbGVtZW50U2l6ZSAqIGVsZW1lbnRDb3VudDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBlbGVtZW50U2l6ZSA9IDQ7Cisg
ICAgICAgIGlmIChvdXRTcGFjZVJlcXVpcmVkKQorICAgICAgICB7CisgICAgICAgICAgICAqb3V0
U3BhY2VSZXF1aXJlZCA9IGVsZW1lbnRTaXplICogNDsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4QnVmZmVy
OS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjJmODgxMTdiZGEyNTBlYzkxMTcwNjdiOGE2OGE4NDRkNjQwZTMwYjIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDkvVmVydGV4QnVmZmVyOS5oCkBAIC0wLDAgKzEsOTEgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKy8vIFZlcnRleEJ1ZmZlcjkuaDogRGVmaW5lcyB0aGUgRDNEOSBWZXJ0ZXhC
dWZmZXIgaW1wbGVtZW50YXRpb24uCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX1ZFUlRF
WEJVRkZFUjlfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1ZFUlRFWEJVRkZFUjlfSF8K
KworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXIuaCIKKworbmFtZXNw
YWNlIHJ4Cit7CitjbGFzcyBSZW5kZXJlcjk7CisKK2NsYXNzIFZlcnRleEJ1ZmZlcjkgOiBwdWJs
aWMgVmVydGV4QnVmZmVyCit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBWZXJ0ZXhCdWZmZXI5
KHJ4OjpSZW5kZXJlcjkgKmNvbnN0IHJlbmRlcmVyKTsKKyAgICB2aXJ0dWFsIH5WZXJ0ZXhCdWZm
ZXI5KCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgc2l6ZSwg
Ym9vbCBkeW5hbWljVXNhZ2UpOworCisgICAgc3RhdGljIFZlcnRleEJ1ZmZlcjkgKm1ha2VWZXJ0
ZXhCdWZmZXI5KFZlcnRleEJ1ZmZlciAqdmVydGV4QnVmZmVyKTsKKworICAgIHZpcnR1YWwgYm9v
bCBzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmli
LCBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKKyAg
ICB2aXJ0dWFsIGJvb2wgc3RvcmVSYXdEYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGlu
dCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKKworICAgIHZpcnR1YWwgYm9vbCBnZXRTcGFj
ZVJlcXVpcmVkKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xzaXplaSBjb3Vu
dCwgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCAqb3V0U3BhY2VSZXF1aXJlZCkgY29u
c3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNDb252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0
ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBpbnQgZ2V0VmVydGV4
U2l6ZShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0OworICAgIEQzRERF
Q0xUWVBFIGdldERlY2xUeXBlKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29u
c3Q7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRCdWZmZXJTaXplKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBib29sIHNldEJ1ZmZlclNpemUodW5zaWduZWQgaW50IHNpemUpOworICAgIHZp
cnR1YWwgYm9vbCBkaXNjYXJkKCk7CisKKyAgICBJRGlyZWN0M0RWZXJ0ZXhCdWZmZXI5ICpnZXRC
dWZmZXIoKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihWZXJ0ZXhCdWZmZXI5KTsKKworICAgIHJ4OjpSZW5kZXJlcjkgKmNvbnN0IG1SZW5kZXJlcjsK
KworICAgIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKm1WZXJ0ZXhCdWZmZXI7CisgICAgdW5zaWdu
ZWQgaW50IG1CdWZmZXJTaXplOworICAgIGJvb2wgbUR5bmFtaWNVc2FnZTsKKworICAgIC8vIEF0
dHJpYnV0ZSBmb3JtYXQgY29udmVyc2lvbgorICAgIGVudW0geyBOVU1fR0xfVkVSVEVYX0FUVFJJ
Ql9UWVBFUyA9IDYgfTsKKworICAgIHN0cnVjdCBGb3JtYXRDb252ZXJ0ZXIKKyAgICB7CisgICAg
ICAgIGJvb2wgaWRlbnRpdHk7CisgICAgICAgIHN0ZDo6c2l6ZV90IG91dHB1dEVsZW1lbnRTaXpl
OworICAgICAgICB2b2lkICgqY29udmVydEFycmF5KShjb25zdCB2b2lkICppbiwgc3RkOjpzaXpl
X3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBuLCB2b2lkICpvdXQpOworICAgICAgICBEM0RERUNMVFlQ
RSBkM2REZWNsVHlwZTsKKyAgICB9OworCisgICAgc3RhdGljIGJvb2wgbVRyYW5zbGF0aW9uc0lu
aXRpYWxpemVkOworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVUcmFuc2xhdGlvbnMoRFdPUkQg
ZGVjbFR5cGVzKTsKKworICAgIC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRl
eCgpXVtub3JtYWxpemVkXVtzaXplIC0gMV0KKyAgICBzdGF0aWMgRm9ybWF0Q29udmVydGVyIG1G
b3JtYXRDb252ZXJ0ZXJzW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsKKworICAg
IHN0cnVjdCBUcmFuc2xhdGlvbkRlc2NyaXB0aW9uCisgICAgeworICAgICAgICBEV09SRCBjYXBz
RmxhZzsKKyAgICAgICAgRm9ybWF0Q29udmVydGVyIHByZWZlcnJlZENvbnZlcnNpb247CisgICAg
ICAgIEZvcm1hdENvbnZlcnRlciBmYWxsYmFja0NvbnZlcnNpb247CisgICAgfTsKKworICAgIC8v
IFRoaXMgdGFibGUgaXMgdXNlZCB0byBnZW5lcmF0ZSBtRm9ybWF0Q29udmVydGVycy4KKyAgICAv
LyBbR0wgdHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXplZF1bc2l6
ZSAtIDFdCisgICAgc3RhdGljIGNvbnN0IFRyYW5zbGF0aW9uRGVzY3JpcHRpb24gbVBvc3NpYmxl
VHJhbnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsKKworICAgIHN0
YXRpYyB1bnNpZ25lZCBpbnQgdHlwZUluZGV4KEdMZW51bSB0eXBlKTsKKyAgICBzdGF0aWMgY29u
c3QgRm9ybWF0Q29udmVydGVyICZmb3JtYXRDb252ZXJ0ZXIoY29uc3QgZ2w6OlZlcnRleEF0dHJp
YnV0ZSAmYXR0cmlidXRlKTsKKworICAgIHN0YXRpYyBib29sIHNwYWNlUmVxdWlyZWQoY29uc3Qg
Z2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBzdGQ6OnNpemVfdCBjb3VudCwgR0xzaXplaSBp
bnN0YW5jZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm91
dFNwYWNlUmVxdWlyZWQpOworfTsKKworfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVS
X1ZFUlRFWEJVRkZFUjlfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmNwcCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhE
ZWNsYXJhdGlvbkNhY2hlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNWM4YTE0MjMyMTFmODM1ODY5M2Y5ZjY5
ODI0NjM4MWJkMjQ4ZTZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleERlY2xhcmF0aW9uQ2FjaGUuY3Bw
CkBAIC0wLDAgKzEsMjE3IEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisvLyBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmNwcDogSW1wbGVtZW50cyBhIGhlbHBlciBj
bGFzcyB0byBjb25zdHJ1Y3QgYW5kIGNhY2hlIHZlcnRleCBkZWNsYXJhdGlvbnMuCisKKyNpbmNs
dWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250
ZXh0LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4QnVmZmVyOS5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleERlY2xhcmF0aW9uQ2Fj
aGUuaCIKKworbmFtZXNwYWNlIHJ4Cit7CisKK1ZlcnRleERlY2xhcmF0aW9uQ2FjaGU6OlZlcnRl
eERlY2xhcmF0aW9uQ2FjaGUoKSA6IG1NYXhMcnUoMCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IE5VTV9WRVJURVhfREVDTF9DQUNIRV9FTlRSSUVTOyBpKyspCisgICAgeworICAgICAgICBt
VmVydGV4RGVjbENhY2hlW2ldLnZlcnRleERlY2xhcmF0aW9uID0gTlVMTDsKKyAgICAgICAgbVZl
cnRleERlY2xDYWNoZVtpXS5scnVDb3VudCA9IDA7CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgeworICAgICAgICBtQXBw
bGllZFZCc1tpXS5zZXJpYWwgPSAwOworICAgIH0KKworICAgIG1MYXN0U2V0VkRlY2wgPSBOVUxM
OworICAgIG1JbnN0YW5jaW5nRW5hYmxlZCA9IHRydWU7Cit9CisKK1ZlcnRleERlY2xhcmF0aW9u
Q2FjaGU6On5WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IE5VTV9WRVJURVhfREVDTF9DQUNIRV9FTlRSSUVTOyBpKyspCisgICAgeworICAgICAgICBp
ZiAobVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlvbikKKyAgICAgICAgeworICAg
ICAgICAgICAgbVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlvbi0+UmVsZWFzZSgp
OworICAgICAgICB9CisgICAgfQorfQorCitHTGVudW0gVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6
YXBwbHlEZWNsYXJhdGlvbihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIFRyYW5zbGF0ZWRBdHRy
aWJ1dGUgYXR0cmlidXRlc1tdLCBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgR0xz
aXplaSBpbnN0YW5jZXMsIEdMc2l6ZWkgKnJlcGVhdERyYXcpCit7CisgICAgKnJlcGVhdERyYXcg
PSAxOworCisgICAgaW50IGluZGV4ZWRBdHRyaWJ1dGUgPSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJT
OworICAgIGludCBpbnN0YW5jZWRBdHRyaWJ1dGUgPSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOwor
CisgICAgaWYgKGluc3RhbmNlcyA+IDApCisgICAgeworICAgICAgICAvLyBGaW5kIGFuIGluZGV4
ZWQgYXR0cmlidXRlIHRvIGJlIG1hcHBlZCB0byBEM0Qgc3RyZWFtIDAKKyAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmFjdGl2ZSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpZiAoaW5kZXhlZEF0dHJpYnV0ZSA9PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJT
ICYmIGF0dHJpYnV0ZXNbaV0uZGl2aXNvciA9PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgaW5kZXhlZEF0dHJpYnV0ZSA9IGk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKGluc3RhbmNlZEF0dHJpYnV0ZSA9PSBnbDo6TUFYX1ZF
UlRFWF9BVFRSSUJTICYmIGF0dHJpYnV0ZXNbaV0uZGl2aXNvciAhPSAwKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VkQXR0cmlidXRlID0gaTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGluZGV4ZWRBdHRyaWJ1dGUgIT0gZ2w6
Ok1BWF9WRVJURVhfQVRUUklCUyAmJiBpbnN0YW5jZWRBdHRyaWJ1dGUgIT0gZ2w6Ok1BWF9WRVJU
RVhfQVRUUklCUykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgLy8gRm91bmQgYm90aCBh
biBpbmRleGVkIGFuZCBpbnN0YW5jZWQgYXR0cmlidXRlCisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBpZiAoaW5kZXhlZEF0dHJpYnV0ZSA9PSBnbDo6TUFYX1ZFUlRFWF9BVFRS
SUJTKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBEM0RWRVJURVhFTEVNRU5UOSBlbGVtZW50c1tnbDo6
TUFYX1ZFUlRFWF9BVFRSSUJTICsgMV07CisgICAgRDNEVkVSVEVYRUxFTUVOVDkgKmVsZW1lbnQg
PSAmZWxlbWVudHNbMF07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGdsOjpNQVhfVkVSVEVY
X0FUVFJJQlM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmFjdGl2ZSkK
KyAgICAgICAgeworICAgICAgICAgICAgLy8gRGlyZWN0bHkgYmluZGluZyB0aGUgc3RvcmFnZSBi
dWZmZXIgaXMgbm90IHN1cHBvcnRlZCBmb3IgZDNkOQorICAgICAgICAgICAgQVNTRVJUKGF0dHJp
YnV0ZXNbaV0uc3RvcmFnZSA9PSBOVUxMKTsKKworICAgICAgICAgICAgaW50IHN0cmVhbSA9IGk7
CisKKyAgICAgICAgICAgIGlmIChpbnN0YW5jZXMgPiAwKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIC8vIER1ZSB0byBhIGJ1ZyBvbiBBVEkgY2FyZHMgd2UgY2FuJ3QgZW5hYmxlIGlu
c3RhbmNpbmcgd2hlbiBub25lIG9mIHRoZSBhdHRyaWJ1dGVzIGFyZSBpbnN0YW5jZWQuCisgICAg
ICAgICAgICAgICAgaWYgKGluc3RhbmNlZEF0dHJpYnV0ZSA9PSBnbDo6TUFYX1ZFUlRFWF9BVFRS
SUJTKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKnJlcGVhdERyYXcg
PSBpbnN0YW5jZXM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpID09IGluZGV4ZWRBdHRy
aWJ1dGUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0
cmVhbSA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoaSA9PSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzdHJlYW0gPSBpbmRleGVkQXR0cmlidXRlOworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgVUlOVCBmcmVxdWVuY3kgPSAxOworICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uZGl2aXNvciA9PSAw
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmcmVxdWVu
Y3kgPSBEM0RTVFJFQU1TT1VSQ0VfSU5ERVhFRERBVEEgfCBpbnN0YW5jZXM7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmcmVxdWVuY3kgPSBEM0RTVFJFQU1TT1VSQ0Vf
SU5TVEFOQ0VEQVRBIHwgYXR0cmlidXRlc1tpXS5kaXZpc29yOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBkZXZpY2UtPlNl
dFN0cmVhbVNvdXJjZUZyZXEoc3RyZWFtLCBmcmVxdWVuY3kpOworICAgICAgICAgICAgICAgICAg
ICBtSW5zdGFuY2luZ0VuYWJsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgVmVydGV4QnVmZmVyOSAqdmVydGV4QnVmZmVyID0gVmVydGV4
QnVmZmVyOTo6bWFrZVZlcnRleEJ1ZmZlcjkoYXR0cmlidXRlc1tpXS52ZXJ0ZXhCdWZmZXIpOwor
CisgICAgICAgICAgICBpZiAobUFwcGxpZWRWQnNbc3RyZWFtXS5zZXJpYWwgIT0gYXR0cmlidXRl
c1tpXS5zZXJpYWwgfHwKKyAgICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJlYW1dLnN0cmlk
ZSAhPSBhdHRyaWJ1dGVzW2ldLnN0cmlkZSB8fAorICAgICAgICAgICAgICAgIG1BcHBsaWVkVkJz
W3N0cmVhbV0ub2Zmc2V0ICE9IGF0dHJpYnV0ZXNbaV0ub2Zmc2V0KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlKHN0cmVhbSwgdmVydGV4QnVm
ZmVyLT5nZXRCdWZmZXIoKSwgYXR0cmlidXRlc1tpXS5vZmZzZXQsIGF0dHJpYnV0ZXNbaV0uc3Ry
aWRlKTsKKyAgICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJlYW1dLnNlcmlhbCA9IGF0dHJp
YnV0ZXNbaV0uc2VyaWFsOworICAgICAgICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVhbV0uc3Ry
aWRlID0gYXR0cmlidXRlc1tpXS5zdHJpZGU7CisgICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNb
c3RyZWFtXS5vZmZzZXQgPSBhdHRyaWJ1dGVzW2ldLm9mZnNldDsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZWxlbWVudC0+U3RyZWFtID0gc3RyZWFtOworICAgICAgICAgICAgZWxlbWVu
dC0+T2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIGVsZW1lbnQtPlR5cGUgPSBhdHRyaWJ1dGVzW2ld
LmF0dHJpYnV0ZS0+bUFycmF5RW5hYmxlZCA/IHZlcnRleEJ1ZmZlci0+Z2V0RGVjbFR5cGUoKmF0
dHJpYnV0ZXNbaV0uYXR0cmlidXRlKSA6IEQzRERFQ0xUWVBFX0ZMT0FUNDsKKyAgICAgICAgICAg
IGVsZW1lbnQtPk1ldGhvZCA9IEQzRERFQ0xNRVRIT0RfREVGQVVMVDsKKyAgICAgICAgICAgIGVs
ZW1lbnQtPlVzYWdlID0gRDNEREVDTFVTQUdFX1RFWENPT1JEOworICAgICAgICAgICAgZWxlbWVu
dC0+VXNhZ2VJbmRleCA9IHByb2dyYW1CaW5hcnktPmdldFNlbWFudGljSW5kZXgoaSk7CisgICAg
ICAgICAgICBlbGVtZW50Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaW5zdGFuY2Vz
ID09IDAgfHwgaW5zdGFuY2VkQXR0cmlidXRlID09IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisg
ICAgeworICAgICAgICBpZiAobUluc3RhbmNpbmdFbmFibGVkKQorICAgICAgICB7CisgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEo
aSwgMSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1JbnN0YW5jaW5nRW5hYmxlZCA9
IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IEQzRFZFUlRFWEVM
RU1FTlQ5IGVuZCA9IEQzRERFQ0xfRU5EKCk7CisgICAgKihlbGVtZW50KyspID0gZW5kOworCisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUzsgaSsr
KQorICAgIHsKKyAgICAgICAgVmVydGV4RGVjbENhY2hlRW50cnkgKmVudHJ5ID0gJm1WZXJ0ZXhE
ZWNsQ2FjaGVbaV07CisgICAgICAgIGlmIChtZW1jbXAoZW50cnktPmNhY2hlZEVsZW1lbnRzLCBl
bGVtZW50cywgKGVsZW1lbnQgLSBlbGVtZW50cykgKiBzaXplb2YoRDNEVkVSVEVYRUxFTUVOVDkp
KSA9PSAwICYmIGVudHJ5LT52ZXJ0ZXhEZWNsYXJhdGlvbikKKyAgICAgICAgeworICAgICAgICAg
ICAgZW50cnktPmxydUNvdW50ID0gKyttTWF4THJ1OworICAgICAgICAgICAgaWYoZW50cnktPnZl
cnRleERlY2xhcmF0aW9uICE9IG1MYXN0U2V0VkRlY2wpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgZGV2aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbihlbnRyeS0+dmVydGV4RGVjbGFy
YXRpb24pOworICAgICAgICAgICAgICAgIG1MYXN0U2V0VkRlY2wgPSBlbnRyeS0+dmVydGV4RGVj
bGFyYXRpb247CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBHTF9OT19FUlJP
UjsKKyAgICAgICAgfQorICAgIH0KKworICAgIFZlcnRleERlY2xDYWNoZUVudHJ5ICpsYXN0Q2Fj
aGUgPSBtVmVydGV4RGVjbENhY2hlOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fVkVS
VEVYX0RFQ0xfQ0FDSEVfRU5UUklFUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1WZXJ0ZXhE
ZWNsQ2FjaGVbaV0ubHJ1Q291bnQgPCBsYXN0Q2FjaGUtPmxydUNvdW50KQorICAgICAgICB7Cisg
ICAgICAgICAgICBsYXN0Q2FjaGUgPSAmbVZlcnRleERlY2xDYWNoZVtpXTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmIChsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uICE9IE5VTEwpCisg
ICAgeworICAgICAgICBsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uLT5SZWxlYXNlKCk7Cisg
ICAgICAgIGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24gPSBOVUxMOworICAgICAgICAvLyBt
TGFzdFNldFZEZWNsIGlzIHNldCB0byB0aGUgcmVwbGFjZW1lbnQsIHNvIHdlIGRvbid0IGhhdmUg
dG8gd29ycnkKKyAgICAgICAgLy8gYWJvdXQgaXQuCisgICAgfQorCisgICAgbWVtY3B5KGxhc3RD
YWNoZS0+Y2FjaGVkRWxlbWVudHMsIGVsZW1lbnRzLCAoZWxlbWVudCAtIGVsZW1lbnRzKSAqIHNp
emVvZihEM0RWRVJURVhFTEVNRU5UOSkpOworICAgIGRldmljZS0+Q3JlYXRlVmVydGV4RGVjbGFy
YXRpb24oZWxlbWVudHMsICZsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uKTsKKyAgICBkZXZp
Y2UtPlNldFZlcnRleERlY2xhcmF0aW9uKGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24pOwor
ICAgIG1MYXN0U2V0VkRlY2wgPSBsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uOworICAgIGxh
c3RDYWNoZS0+bHJ1Q291bnQgPSArK21NYXhMcnU7CisKKyAgICByZXR1cm4gR0xfTk9fRVJST1I7
Cit9CisKK3ZvaWQgVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6bWFya1N0YXRlRGlydHkoKQorewor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAg
IHsKKyAgICAgICAgbUFwcGxpZWRWQnNbaV0uc2VyaWFsID0gMDsKKyAgICB9CisKKyAgICBtTGFz
dFNldFZEZWNsID0gTlVMTDsKKyAgICBtSW5zdGFuY2luZ0VuYWJsZWQgPSB0cnVlOyAgIC8vIEZv
cmNlcyBpdCB0byBiZSBkaXNhYmxlZCB3aGVuIG5vdCB1c2VkCit9CisKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0
ZXhEZWNsYXJhdGlvbkNhY2hlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4RGVjbGFyYXRpb25DYWNoZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNm
YzAyNGE5YmFiNDhiMTljMDZhYjk3NTcwZThiNWQ1NDg3MTMxODcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVy
dGV4RGVjbGFyYXRpb25DYWNoZS5oCkBAIC0wLDAgKzEsNTggQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisv
LyBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmg6IERlZmluZXMgYSBoZWxwZXIgY2xhc3MgdG8gY29u
c3RydWN0IGFuZCBjYWNoZSB2ZXJ0ZXggZGVjbGFyYXRpb25zLgorCisjaWZuZGVmIExJQkdMRVNW
Ml9SRU5ERVJFUl9WRVJURVhERUNMQVJBVElPTkNBQ0hFX0hfCisjZGVmaW5lIExJQkdMRVNWMl9S
RU5ERVJFUl9WRVJURVhERUNMQVJBVElPTkNBQ0hFX0hfCisKKyNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvVmVydGV4RGF0YU1hbmFnZXIuaCIKKworbmFtZXNwYWNlIGdsCit7CitjbGFzcyBW
ZXJ0ZXhEYXRhTWFuYWdlcjsKK30KKworbmFtZXNwYWNlIHJ4Cit7CisKK2NsYXNzIFZlcnRleERl
Y2xhcmF0aW9uQ2FjaGUKK3sKKyAgcHVibGljOgorICAgIFZlcnRleERlY2xhcmF0aW9uQ2FjaGUo
KTsKKyAgICB+VmVydGV4RGVjbGFyYXRpb25DYWNoZSgpOworCisgICAgR0xlbnVtIGFwcGx5RGVj
bGFyYXRpb24oSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBUcmFuc2xhdGVkQXR0cmlidXRlIGF0
dHJpYnV0ZXNbXSwgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIEdMc2l6ZWkgaW5z
dGFuY2VzLCBHTHNpemVpICpyZXBlYXREcmF3KTsKKworICAgIHZvaWQgbWFya1N0YXRlRGlydHko
KTsKKworICBwcml2YXRlOgorICAgIFVJTlQgbU1heExydTsKKworICAgIGVudW0geyBOVU1fVkVS
VEVYX0RFQ0xfQ0FDSEVfRU5UUklFUyA9IDMyIH07CisKKyAgICBzdHJ1Y3QgVkJEYXRhCisgICAg
eworICAgICAgICB1bnNpZ25lZCBpbnQgc2VyaWFsOworICAgICAgICB1bnNpZ25lZCBpbnQgc3Ry
aWRlOworICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0OworICAgIH07CisKKyAgICBWQkRhdGEg
bUFwcGxpZWRWQnNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107CisgICAgSURpcmVjdDNEVmVydGV4
RGVjbGFyYXRpb245ICptTGFzdFNldFZEZWNsOworICAgIGJvb2wgbUluc3RhbmNpbmdFbmFibGVk
OworCisgICAgc3RydWN0IFZlcnRleERlY2xDYWNoZUVudHJ5CisgICAgeworICAgICAgICBEM0RW
RVJURVhFTEVNRU5UOSBjYWNoZWRFbGVtZW50c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTICsgMV07
CisgICAgICAgIFVJTlQgbHJ1Q291bnQ7CisgICAgICAgIElEaXJlY3QzRFZlcnRleERlY2xhcmF0
aW9uOSAqdmVydGV4RGVjbGFyYXRpb247CisgICAgfSBtVmVydGV4RGVjbENhY2hlW05VTV9WRVJU
RVhfREVDTF9DQUNIRV9FTlRSSUVTXTsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9S
RU5ERVJFUl9WRVJURVhERUNMQVJBVElPTkNBQ0hFX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxz
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
OS9yZW5kZXJlcjlfdXRpbHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI3ZjJmZmIxZDlhM2NjM2ZkYWNkZjQz
N2MzNWJlNGQ1OGM3YTgyMTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmNwcApAQCAt
MCwwICsxLDUwMCBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisvLyByZW5kZXJlcjlfdXRpbHMuY3BwOiBDb252ZXJzaW9uIGZ1bmN0aW9ucyBhbmQgb3Ro
ZXIgdXRpbGl0eSByb3V0aW5lcworLy8gc3BlY2lmaWMgdG8gdGhlIEQzRDkgcmVuZGVyZXIuCisK
KyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5kZXJlcjlfdXRpbHMuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4
dC5oIgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKK25hbWVzcGFjZSBnbF9kM2Q5Cit7
CisKK0QzRENNUEZVTkMgQ29udmVydENvbXBhcmlzb24oR0xlbnVtIGNvbXBhcmlzb24pCit7Cisg
ICAgRDNEQ01QRlVOQyBkM2RDb21wID0gRDNEQ01QX0FMV0FZUzsKKyAgICBzd2l0Y2ggKGNvbXBh
cmlzb24pCisgICAgeworICAgICAgY2FzZSBHTF9ORVZFUjogICAgZDNkQ29tcCA9IEQzRENNUF9O
RVZFUjsgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9BTFdBWVM6ICAgZDNkQ29tcCA9IEQz
RENNUF9BTFdBWVM7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MRVNTOiAgICAgZDNkQ29t
cCA9IEQzRENNUF9MRVNTOyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MRVFVQUw6ICAg
ZDNkQ29tcCA9IEQzRENNUF9MRVNTRVFVQUw7ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9FUVVB
TDogICAgZDNkQ29tcCA9IEQzRENNUF9FUVVBTDsgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9HUkVBVEVSOiAgZDNkQ29tcCA9IEQzRENNUF9HUkVBVEVSOyAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9HRVFVQUw6ICAgZDNkQ29tcCA9IEQzRENNUF9HUkVBVEVSRVFVQUw7IGJyZWFrOwor
ICAgICAgY2FzZSBHTF9OT1RFUVVBTDogZDNkQ29tcCA9IEQzRENNUF9OT1RFUVVBTDsgICAgIGJy
ZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
ZDNkQ29tcDsKK30KKworRDNEQ09MT1IgQ29udmVydENvbG9yKGdsOjpDb2xvciBjb2xvcikKK3sK
KyAgICByZXR1cm4gRDNEQ09MT1JfUkdCQShnbDo6dW5vcm08OD4oY29sb3IucmVkKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oY29sb3IuZ3JlZW4pLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4Pihjb2xvci5ibHVlKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBnbDo6dW5vcm08OD4oY29sb3IuYWxwaGEpKTsKK30KKworRDNEQkxFTkQgQ29u
dmVydEJsZW5kRnVuYyhHTGVudW0gYmxlbmQpCit7CisgICAgRDNEQkxFTkQgZDNkQmxlbmQgPSBE
M0RCTEVORF9aRVJPOworCisgICAgc3dpdGNoIChibGVuZCkKKyAgICB7CisgICAgICBjYXNlIEdM
X1pFUk86ICAgICAgICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9aRVJPOyAgICAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX09ORTogICAgICAgICAgICAgICAgICAgICAgZDNk
QmxlbmQgPSBEM0RCTEVORF9PTkU7ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NS
Q19DT0xPUjogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9TUkNDT0xPUjsgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQ09MT1I6ICAgICAgZDNkQmxl
bmQgPSBEM0RCTEVORF9JTlZTUkNDT0xPUjsgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0RTVF9D
T0xPUjogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9ERVNUQ09MT1I7ICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQ09MT1I6ICAgICAgZDNkQmxlbmQg
PSBEM0RCTEVORF9JTlZERVNUQ09MT1I7ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NSQ19BTFBI
QTogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9TUkNBTFBIQTsgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQUxQSEE6ICAgICAgZDNkQmxlbmQgPSBE
M0RCTEVORF9JTlZTUkNBTFBIQTsgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0RTVF9BTFBIQTog
ICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9ERVNUQUxQSEE7ICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQUxQSEE6ICAgICAgZDNkQmxlbmQgPSBEM0RC
TEVORF9JTlZERVNUQUxQSEE7ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0NPTlNUQU5UX0NPTE9S
OiAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9CTEVOREZBQ1RPUjsgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUjogZDNkQmxlbmQgPSBEM0RCTEVO
RF9JTlZCTEVOREZBQ1RPUjsgYnJlYWs7CisgICAgICBjYXNlIEdMX0NPTlNUQU5UX0FMUEhBOiAg
ICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9CTEVOREZBQ1RPUjsgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQTogZDNkQmxlbmQgPSBEM0RCTEVORF9J
TlZCTEVOREZBQ1RPUjsgYnJlYWs7CisgICAgICBjYXNlIEdMX1NSQ19BTFBIQV9TQVRVUkFURTog
ICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9TUkNBTFBIQVNBVDsgICAgYnJlYWs7CisgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBkM2RCbGVuZDsKK30K
KworRDNEQkxFTkRPUCBDb252ZXJ0QmxlbmRPcChHTGVudW0gYmxlbmRPcCkKK3sKKyAgICBEM0RC
TEVORE9QIGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX0FERDsKKworICAgIHN3aXRjaCAoYmxlbmRP
cCkKKyAgICB7CisgICAgICBjYXNlIEdMX0ZVTkNfQUREOiAgICAgICAgICAgICAgZDNkQmxlbmRP
cCA9IEQzREJMRU5ET1BfQUREOyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GVU5DX1NV
QlRSQUNUOiAgICAgICAgIGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX1NVQlRSQUNUOyAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUOiBkM2RCbGVuZE9wID0gRDNE
QkxFTkRPUF9SRVZTVUJUUkFDVDsgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OworICAgIH0KKworICAgIHJldHVybiBkM2RCbGVuZE9wOworfQorCitEM0RTVEVOQ0lMT1AgQ29u
dmVydFN0ZW5jaWxPcChHTGVudW0gc3RlbmNpbE9wKQoreworICAgIEQzRFNURU5DSUxPUCBkM2RT
dGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfS0VFUDsKKworICAgIHN3aXRjaCAoc3RlbmNpbE9wKQor
ICAgIHsKKyAgICAgIGNhc2UgR0xfWkVSTzogICAgICBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lM
T1BfWkVSTzsgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0tFRVA6ICAgICAgZDNkU3RlbmNpbE9w
ID0gRDNEU1RFTkNJTE9QX0tFRVA7ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9SRVBMQUNFOiAg
IGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9SRVBMQUNFOyBicmVhazsKKyAgICAgIGNhc2Ug
R0xfSU5DUjogICAgICBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfSU5DUlNBVDsgYnJlYWs7
CisgICAgICBjYXNlIEdMX0RFQ1I6ICAgICAgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0RF
Q1JTQVQ7IGJyZWFrOworICAgICAgY2FzZSBHTF9JTlZFUlQ6ICAgIGQzZFN0ZW5jaWxPcCA9IEQz
RFNURU5DSUxPUF9JTlZFUlQ7ICBicmVhazsKKyAgICAgIGNhc2UgR0xfSU5DUl9XUkFQOiBkM2RT
dGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfSU5DUjsgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0RF
Q1JfV1JBUDogZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0RFQ1I7ICAgIGJyZWFrOworICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZDNkU3RlbmNp
bE9wOworfQorCitEM0RURVhUVVJFQUREUkVTUyBDb252ZXJ0VGV4dHVyZVdyYXAoR0xlbnVtIHdy
YXApCit7CisgICAgRDNEVEVYVFVSRUFERFJFU1MgZDNkV3JhcCA9IEQzRFRBRERSRVNTX1dSQVA7
CisKKyAgICBzd2l0Y2ggKHdyYXApCisgICAgeworICAgICAgY2FzZSBHTF9SRVBFQVQ6ICAgICAg
ICAgICAgZDNkV3JhcCA9IEQzRFRBRERSRVNTX1dSQVA7ICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X0NMQU1QX1RPX0VER0U6ICAgICBkM2RXcmFwID0gRDNEVEFERFJFU1NfQ0xBTVA7ICBicmVhazsK
KyAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQRUFUOiAgIGQzZFdyYXAgPSBEM0RUQUREUkVTU19N
SVJST1I7IGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZDNkV3JhcDsKK30KKworRDNEQ1VMTCBDb252ZXJ0Q3VsbE1vZGUoR0xlbnVtIGN1
bGxGYWNlLCBHTGVudW0gZnJvbnRGYWNlKQoreworICAgIEQzRENVTEwgY3VsbCA9IEQzRENVTExf
Q0NXOworICAgIHN3aXRjaCAoY3VsbEZhY2UpCisgICAgeworICAgICAgY2FzZSBHTF9GUk9OVDoK
KyAgICAgICAgY3VsbCA9IChmcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEQ1VMTF9DVyA6IEQzRENV
TExfQ0NXKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JBQ0s6CisgICAgICAgIGN1
bGwgPSAoZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRENVTExfQ0NXIDogRDNEQ1VMTF9DVyk7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GUk9OVF9BTkRfQkFDSzoKKyAgICAgICAgY3Vs
bCA9IEQzRENVTExfTk9ORTsgLy8gY3VsbGluZyB3aWxsIGJlIGhhbmRsZWQgZHVyaW5nIGRyYXcK
KyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKwor
ICAgIHJldHVybiBjdWxsOworfQorCitEM0RDVUJFTUFQX0ZBQ0VTIENvbnZlcnRDdWJlRmFjZShH
TGVudW0gY3ViZUZhY2UpCit7CisgICAgRDNEQ1VCRU1BUF9GQUNFUyBmYWNlID0gRDNEQ1VCRU1B
UF9GQUNFX1BPU0lUSVZFX1g7CisKKyAgICBzd2l0Y2ggKGN1YmVGYWNlKQorICAgIHsKKyAgICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgICAgICBmYWNlID0gRDNE
Q1VCRU1BUF9GQUNFX1BPU0lUSVZFX1g7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZB
Q0VfTkVHQVRJVkVfWDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWToKKyAgICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9QT1NJVElW
RV9ZOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9ZOgorICAgICAgICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX05FR0FUSVZFX1k7CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Cisg
ICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfUE9TSVRJVkVfWjsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAgICAgICAgZmFj
ZSA9IEQzRENVQkVNQVBfRkFDRV9ORUdBVElWRV9aOworICAgICAgICBicmVhazsKKyAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIGZhY2U7Cit9CisKK0RX
T1JEIENvbnZlcnRDb2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9v
bCBhbHBoYSkKK3sKKyAgICByZXR1cm4gKHJlZCAgID8gRDNEQ09MT1JXUklURUVOQUJMRV9SRUQg
ICA6IDApIHwKKyAgICAgICAgICAgKGdyZWVuID8gRDNEQ09MT1JXUklURUVOQUJMRV9HUkVFTiA6
IDApIHwKKyAgICAgICAgICAgKGJsdWUgID8gRDNEQ09MT1JXUklURUVOQUJMRV9CTFVFICA6IDAp
IHwKKyAgICAgICAgICAgKGFscGhhID8gRDNEQ09MT1JXUklURUVOQUJMRV9BTFBIQSA6IDApOwor
fQorCitEM0RURVhUVVJFRklMVEVSVFlQRSBDb252ZXJ0TWFnRmlsdGVyKEdMZW51bSBtYWdGaWx0
ZXIsIGZsb2F0IG1heEFuaXNvdHJvcHkpCit7CisgICAgaWYgKG1heEFuaXNvdHJvcHkgPiAxLjBm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEQzRFRFWEZfQU5JU09UUk9QSUM7CisgICAgfQorCisg
ICAgRDNEVEVYVFVSRUZJTFRFUlRZUEUgZDNkTWFnRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKKyAg
ICBzd2l0Y2ggKG1hZ0ZpbHRlcikKKyAgICB7CisgICAgICBjYXNlIEdMX05FQVJFU1Q6IGQzZE1h
Z0ZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7ICBicmVhazsKKyAgICAgIGNhc2UgR0xfTElORUFSOiAg
ZDNkTWFnRmlsdGVyID0gRDNEVEVYRl9MSU5FQVI7IGJyZWFrOworICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZDNkTWFnRmlsdGVyOworfQorCit2b2lk
IENvbnZlcnRNaW5GaWx0ZXIoR0xlbnVtIG1pbkZpbHRlciwgRDNEVEVYVFVSRUZJTFRFUlRZUEUg
KmQzZE1pbkZpbHRlciwgRDNEVEVYVFVSRUZJTFRFUlRZUEUgKmQzZE1pcEZpbHRlciwgZmxvYXQg
bWF4QW5pc290cm9weSkKK3sKKyAgICBzd2l0Y2ggKG1pbkZpbHRlcikKKyAgICB7CisgICAgICBj
YXNlIEdMX05FQVJFU1Q6CisgICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX1BPSU5UOwor
ICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9OT05FOworICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfTElORUFSOgorICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9MSU5F
QVI7CisgICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX05PTkU7CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOgorICAgICAgICAqZDNkTWlu
RmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKKyAgICAgICAgKmQzZE1pcEZpbHRlciA9IEQzRFRFWEZf
UE9JTlQ7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX05FQVJF
U1Q6CisgICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX0xJTkVBUjsKKyAgICAgICAgKmQz
ZE1pcEZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9ORUFSRVNUX01JUE1BUF9MSU5FQVI6CisgICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhG
X1BPSU5UOworICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9MSU5FQVI7CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUjoKKyAgICAgICAgKmQz
ZE1pbkZpbHRlciA9IEQzRFRFWEZfTElORUFSOworICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNE
VEVYRl9MSU5FQVI7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgKmQz
ZE1pbkZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7CisgICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RU
RVhGX05PTkU7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgaWYgKG1heEFu
aXNvdHJvcHkgPiAxLjBmKQorICAgIHsKKyAgICAgICAgKmQzZE1pbkZpbHRlciA9IEQzRFRFWEZf
QU5JU09UUk9QSUM7CisgICAgfQorfQorCitEM0RGT1JNQVQgQ29udmVydFJlbmRlcmJ1ZmZlckZv
cm1hdChHTGVudW0gZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsKKyAgICAg
IGNhc2UgR0xfTk9ORTogICAgICAgICAgICAgICAgIHJldHVybiBEM0RGTVRfTlVMTDsKKyAgICAg
IGNhc2UgR0xfUkdCQTQ6CisgICAgICBjYXNlIEdMX1JHQjVfQTE6CisgICAgICBjYXNlIEdMX1JH
QkE4X09FUzogICAgICAgICAgICByZXR1cm4gRDNERk1UX0E4UjhHOEI4OworICAgICAgY2FzZSBH
TF9SR0I1NjU6ICAgICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9SNUc2QjU7CisgICAgICBjYXNl
IEdMX1JHQjhfT0VTOiAgICAgICAgICAgICByZXR1cm4gRDNERk1UX1g4UjhHOEI4OworICAgICAg
Y2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRFWDg6
ICAgICAgIAorICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzogcmV0dXJuIEQzREZN
VF9EMjRTODsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgIHJldHVybiBEM0RG
TVRfQThSOEc4Qjg7CisgICAgfQorfQorCitEM0RNVUxUSVNBTVBMRV9UWVBFIEdldE11bHRpc2Ft
cGxlVHlwZUZyb21TYW1wbGVzKEdMc2l6ZWkgc2FtcGxlcykKK3sKKyAgICBpZiAoc2FtcGxlcyA8
PSAxKQorICAgICAgICByZXR1cm4gRDNETVVMVElTQU1QTEVfTk9ORTsKKyAgICBlbHNlCisgICAg
ICAgIHJldHVybiAoRDNETVVMVElTQU1QTEVfVFlQRSlzYW1wbGVzOworfQorCit9CisKK25hbWVz
cGFjZSBkM2Q5X2dsCit7CisKK3Vuc2lnbmVkIGludCBHZXRTdGVuY2lsU2l6ZShEM0RGT1JNQVQg
c3RlbmNpbEZvcm1hdCkKK3sKKyAgICBpZiAoc3RlbmNpbEZvcm1hdCA9PSBEM0RGTVRfSU5UWikK
KyAgICB7CisgICAgICAgIHJldHVybiA4OworICAgIH0KKyAgICBzd2l0Y2goc3RlbmNpbEZvcm1h
dCkKKyAgICB7CisgICAgICBjYXNlIEQzREZNVF9EMjRGUzg6CisgICAgICBjYXNlIEQzREZNVF9E
MjRTODoKKyAgICAgICAgcmV0dXJuIDg7CisgICAgICBjYXNlIEQzREZNVF9EMjRYNFM0OgorICAg
ICAgICByZXR1cm4gNDsKKyAgICAgIGNhc2UgRDNERk1UX0QxNVMxOgorICAgICAgICByZXR1cm4g
MTsKKyAgICAgIGNhc2UgRDNERk1UX0QxNl9MT0NLQUJMRToKKyAgICAgIGNhc2UgRDNERk1UX0Qz
MjoKKyAgICAgIGNhc2UgRDNERk1UX0QyNFg4OgorICAgICAgY2FzZSBEM0RGTVRfRDMyRl9MT0NL
QUJMRToKKyAgICAgIGNhc2UgRDNERk1UX0QxNjoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgLy9j
YXNlIEQzREZNVF9EMzJfTE9DS0FCTEU6ICByZXR1cm4gMDsgICAvLyBEaXJlY3RYIDlFeCBvbmx5
CisgICAgLy9jYXNlIEQzREZNVF9TOF9MT0NLQUJMRTogICByZXR1cm4gODsgICAvLyBEaXJlY3RY
IDlFeCBvbmx5CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisK
K3Vuc2lnbmVkIGludCBHZXRBbHBoYVNpemUoRDNERk9STUFUIGNvbG9yRm9ybWF0KQoreworICAg
IHN3aXRjaCAoY29sb3JGb3JtYXQpCisgICAgeworICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2
UjE2RjoKKyAgICAgICAgcmV0dXJuIDE2OworICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMy
RjoKKyAgICAgICAgcmV0dXJuIDMyOworICAgICAgY2FzZSBEM0RGTVRfQTJSMTBHMTBCMTA6Cisg
ICAgICAgIHJldHVybiAyOworICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6CisgICAgICAgIHJl
dHVybiA4OworICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6CisgICAgICAgIHJldHVybiAxOwor
ICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6CisgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6Cisg
ICAgICAgIHJldHVybiAwOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorfQorCitHTHNpemVpIEdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKEQzRE1VTFRJU0FN
UExFX1RZUEUgdHlwZSkKK3sKKyAgICBpZiAodHlwZSA9PSBEM0RNVUxUSVNBTVBMRV9OT05NQVNL
QUJMRSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gdHlwZTsK
K30KKworYm9vbCBJc0Zvcm1hdENoYW5uZWxFcXVpdmFsZW50KEQzREZPUk1BVCBkM2Rmb3JtYXQs
IEdMZW51bSBmb3JtYXQpCit7CisgICAgc3dpdGNoIChkM2Rmb3JtYXQpCisgICAgeworICAgICAg
Y2FzZSBEM0RGTVRfTDg6CisgICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX0xVTUlOQU5DRSk7
CisgICAgICBjYXNlIEQzREZNVF9BOEw4OgorICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9M
VU1JTkFOQ0VfQUxQSEEpOworICAgICAgY2FzZSBEM0RGTVRfRFhUMToKKyAgICAgICAgcmV0dXJu
IChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQgfHwgZm9ybWF0ID09
IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQpOworICAgICAgY2FzZSBEM0RGTVRfRFhU
MzoKKyAgICAgICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
M19BTkdMRSk7CisgICAgICBjYXNlIEQzREZNVF9EWFQ1OgorICAgICAgICByZXR1cm4gKGZvcm1h
dCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFKTsKKyAgICAgIGNhc2UgRDNE
Rk1UX0E4UjhHOEI4OgorICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKKyAgICAgIGNh
c2UgRDNERk1UX0EzMkIzMkczMlIzMkY6CisgICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX1JH
QkEgfHwgZm9ybWF0ID09IEdMX0JHUkFfRVhUKTsKKyAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4
OgorICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9SR0IpOworICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgaWYgKGQzZGZvcm1hdCA9PSBEM0RGTVRfSU5UWiAmJiBnbDo6SXNEZXB0aFRleHR1cmUo
Zm9ybWF0KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorfQorCitHTGVudW0gQ29udmVydEJhY2tCdWZmZXJGb3JtYXQoRDNERk9STUFUIGZv
cm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEQzREZNVF9B
NFI0RzRCNDogcmV0dXJuIEdMX1JHQkE0OworICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6IHJl
dHVybiBHTF9SR0JBOF9PRVM7CisgICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNTogcmV0dXJuIEdM
X1JHQjVfQTE7CisgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6ICAgcmV0dXJuIEdMX1JHQjU2NTsK
KyAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OiByZXR1cm4gR0xfUkdCOF9PRVM7CisgICAgICBk
ZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBHTF9S
R0JBNDsKK30KKworR0xlbnVtIENvbnZlcnREZXB0aFN0ZW5jaWxGb3JtYXQoRDNERk9STUFUIGZv
cm1hdCkKK3sKKyAgICBpZiAoZm9ybWF0ID09IEQzREZNVF9JTlRaKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOworICAgIH0KKyAgICBzd2l0Y2ggKGZvcm1h
dCkKKyAgICB7CisgICAgICBjYXNlIEQzREZNVF9EMTY6CisgICAgICBjYXNlIEQzREZNVF9EMjRY
ODoKKyAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2OworICAgICAgY2FzZSBEM0RG
TVRfRDI0Uzg6CisgICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKKyAgICAg
IGNhc2UgRDNERk1UX1VOS05PV046CisgICAgICAgIHJldHVybiBHTF9OT05FOworICAgICAgZGVm
YXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfREVQ
VEgyNF9TVEVOQ0lMOF9PRVM7Cit9CisKK0dMZW51bSBDb252ZXJ0UmVuZGVyVGFyZ2V0Rm9ybWF0
KEQzREZPUk1BVCBmb3JtYXQpCit7CisgICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfSU5UWikKKyAg
ICB7CisgICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKKyAgICB9CisgICAg
CisgICAgc3dpdGNoIChmb3JtYXQpCisgICAgeworICAgICAgY2FzZSBEM0RGTVRfQTRSNEc0QjQ6
IHJldHVybiBHTF9SR0JBNDsKKyAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OiByZXR1cm4gR0xf
UkdCQThfT0VTOworICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6IHJldHVybiBHTF9SR0I1X0Ex
OworICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OiAgIHJldHVybiBHTF9SR0I1NjU7CisgICAgICBj
YXNlIEQzREZNVF9YOFI4RzhCODogcmV0dXJuIEdMX1JHQjhfT0VTOworICAgICAgY2FzZSBEM0RG
TVRfRDE2OgorICAgICAgY2FzZSBEM0RGTVRfRDI0WDg6CisgICAgICAgIHJldHVybiBHTF9ERVBU
SF9DT01QT05FTlQxNjsKKyAgICAgIGNhc2UgRDNERk1UX0QyNFM4OgorICAgICAgICByZXR1cm4g
R0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7CisgICAgICBjYXNlIEQzREZNVF9VTktOT1dOOgorICAg
ICAgICByZXR1cm4gR0xfTk9ORTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgfQorCisgICAgcmV0dXJuIEdMX1JHQkE0OworfQorCitHTGVudW0gR2V0RXF1aXZh
bGVudEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KQoreworICAgIGlmIChmb3JtYXQgPT0gRDNERk1U
X0lOVFopCisgICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKKyAgICBpZiAo
Zm9ybWF0ID09IEQzREZNVF9OVUxMKQorICAgICAgICByZXR1cm4gR0xfTk9ORTsKKworICAgIHN3
aXRjaCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRDNERk1UX0E0UjRHNEI0OiAgICAgICAg
ICAgICByZXR1cm4gR0xfUkdCQTQ7CisgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODogICAgICAg
ICAgICAgcmV0dXJuIEdMX1JHQkE4X09FUzsKKyAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OiAg
ICAgICAgICAgICByZXR1cm4gR0xfUkdCNV9BMTsKKyAgICAgIGNhc2UgRDNERk1UX1I1RzZCNTog
ICAgICAgICAgICAgICByZXR1cm4gR0xfUkdCNTY1OworICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4
Qjg6ICAgICAgICAgICAgIHJldHVybiBHTF9SR0I4X09FUzsKKyAgICAgIGNhc2UgRDNERk1UX0Qx
NjogICAgICAgICAgICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UMTY7CisgICAgICBj
YXNlIEQzREZNVF9EMjRTODogICAgICAgICAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJ
TDhfT0VTOworICAgICAgY2FzZSBEM0RGTVRfVU5LTk9XTjogICAgICAgICAgICAgIHJldHVybiBH
TF9OT05FOworICAgICAgY2FzZSBEM0RGTVRfRFhUMTogICAgICAgICAgICAgICAgIHJldHVybiBH
TF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDsKKyAgICAgIGNhc2UgRDNERk1UX0RYVDM6
ICAgICAgICAgICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdM
RTsKKyAgICAgIGNhc2UgRDNERk1UX0RYVDU6ICAgICAgICAgICAgICAgICByZXR1cm4gR0xfQ09N
UFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRTsKKyAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkcz
MlIzMkY6ICAgICAgICByZXR1cm4gR0xfUkdCQTMyRl9FWFQ7CisgICAgICBjYXNlIEQzREZNVF9B
MTZCMTZHMTZSMTZGOiAgICAgICAgcmV0dXJuIEdMX1JHQkExNkZfRVhUOworICAgICAgY2FzZSBE
M0RGTVRfTDg6ICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9MVU1JTkFOQ0U4X0VYVDsKKyAg
ICAgIGNhc2UgRDNERk1UX0E4TDg6ICAgICAgICAgICAgICAgICByZXR1cm4gR0xfTFVNSU5BTkNF
OF9BTFBIQThfRVhUOworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgIHJldHVybiBHTF9OT05FOworICAgIH0KK30KKworfQorCituYW1lc3BhY2UgZDNk
OQoreworCitib29sIElzQ29tcHJlc3NlZEZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCkK
K3sKKyAgICBzd2l0Y2goc3VyZmFjZUZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEQzREZNVF9E
WFQxOgorICAgICAgY2FzZSBEM0RGTVRfRFhUMjoKKyAgICAgIGNhc2UgRDNERk1UX0RYVDM6Cisg
ICAgICBjYXNlIEQzREZNVF9EWFQ0OgorICAgICAgY2FzZSBEM0RGTVRfRFhUNToKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCitzaXplX3QgQ29tcHV0ZVJvd1NpemUoRDNERk9STUFUIGZvcm1hdCwgdW5zaWduZWQg
aW50IHdpZHRoKQoreworICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lOVFopCisgICAgeworICAg
ICAgICByZXR1cm4gNCAqIHdpZHRoOworICAgIH0KKyAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICB7
CisgICAgICBjYXNlIEQzREZNVF9MODoKKyAgICAgICAgICByZXR1cm4gMSAqIHdpZHRoOworICAg
ICAgY2FzZSBEM0RGTVRfQThMODoKKyAgICAgICAgICByZXR1cm4gMiAqIHdpZHRoOworICAgICAg
Y2FzZSBEM0RGTVRfWDhSOEc4Qjg6CisgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKKyAgICAg
ICAgcmV0dXJuIDQgKiB3aWR0aDsKKyAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Cisg
ICAgICAgIHJldHVybiA4ICogd2lkdGg7CisgICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJG
OgorICAgICAgICByZXR1cm4gMTYgKiB3aWR0aDsKKyAgICAgIGNhc2UgRDNERk1UX0RYVDE6Cisg
ICAgICAgIHJldHVybiA4ICogKCh3aWR0aCArIDMpIC8gNCk7CisgICAgICBjYXNlIEQzREZNVF9E
WFQzOgorICAgICAgY2FzZSBEM0RGTVRfRFhUNToKKyAgICAgICAgcmV0dXJuIDE2ICogKCh3aWR0
aCArIDMpIC8gNCk7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5kZXJlcjlfdXRpbHMuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5k
ZXJlcjlfdXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZjZjZGYxZWE2NTY2ZjkxMGE5NmVlMjUxMTRiN2M0
OGVjODM5NDVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5oCkBAIC0wLDAgKzEsNzQg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIHJlbmRlcmVyOV91dGlscy5oOiBDb252ZXJzaW9u
IGZ1bmN0aW9ucyBhbmQgb3RoZXIgdXRpbGl0eSByb3V0aW5lcyAKKy8vIHNwZWNpZmljIHRvIHRo
ZSBEM0Q5IHJlbmRlcmVyCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUkVSOV9V
VElMU19ICisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjlfVVRJTFNfSAorCisj
aW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorCitjb25zdCBEM0RGT1JNQVQgRDNERk1U
X0lOVFogPSAoKEQzREZPUk1BVCkoTUFLRUZPVVJDQygnSScsJ04nLCdUJywnWicpKSk7Citjb25z
dCBEM0RGT1JNQVQgRDNERk1UX05VTEwgPSAoKEQzREZPUk1BVCkoTUFLRUZPVVJDQygnTicsJ1Un
LCdMJywnTCcpKSk7CisKK25hbWVzcGFjZSBnbF9kM2Q5Cit7CisKK0QzRENNUEZVTkMgQ29udmVy
dENvbXBhcmlzb24oR0xlbnVtIGNvbXBhcmlzb24pOworRDNEQ09MT1IgQ29udmVydENvbG9yKGds
OjpDb2xvciBjb2xvcik7CitEM0RCTEVORCBDb252ZXJ0QmxlbmRGdW5jKEdMZW51bSBibGVuZCk7
CitEM0RCTEVORE9QIENvbnZlcnRCbGVuZE9wKEdMZW51bSBibGVuZE9wKTsKK0QzRFNURU5DSUxP
UCBDb252ZXJ0U3RlbmNpbE9wKEdMZW51bSBzdGVuY2lsT3ApOworRDNEVEVYVFVSRUFERFJFU1Mg
Q29udmVydFRleHR1cmVXcmFwKEdMZW51bSB3cmFwKTsKK0QzRENVTEwgQ29udmVydEN1bGxNb2Rl
KEdMZW51bSBjdWxsRmFjZSwgR0xlbnVtIGZyb250RmFjZSk7CitEM0RDVUJFTUFQX0ZBQ0VTIENv
bnZlcnRDdWJlRmFjZShHTGVudW0gY3ViZUZhY2UpOworRFdPUkQgQ29udmVydENvbG9yTWFzayhi
b29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKTsKK0QzRFRFWFRVUkVG
SUxURVJUWVBFIENvbnZlcnRNYWdGaWx0ZXIoR0xlbnVtIG1hZ0ZpbHRlciwgZmxvYXQgbWF4QW5p
c290cm9weSk7Cit2b2lkIENvbnZlcnRNaW5GaWx0ZXIoR0xlbnVtIG1pbkZpbHRlciwgRDNEVEVY
VFVSRUZJTFRFUlRZUEUgKmQzZE1pbkZpbHRlciwgRDNEVEVYVFVSRUZJTFRFUlRZUEUgKmQzZE1p
cEZpbHRlciwgZmxvYXQgbWF4QW5pc290cm9weSk7CitEM0RGT1JNQVQgQ29udmVydFJlbmRlcmJ1
ZmZlckZvcm1hdChHTGVudW0gZm9ybWF0KTsKK0QzRE1VTFRJU0FNUExFX1RZUEUgR2V0TXVsdGlz
YW1wbGVUeXBlRnJvbVNhbXBsZXMoR0xzaXplaSBzYW1wbGVzKTsKKworfQorCituYW1lc3BhY2Ug
ZDNkOV9nbAoreworCitHTHVpbnQgR2V0QWxwaGFTaXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCk7
CitHTHVpbnQgR2V0U3RlbmNpbFNpemUoRDNERk9STUFUIHN0ZW5jaWxGb3JtYXQpOworCitHTHNp
emVpIEdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKEQzRE1VTFRJU0FNUExFX1RZUEUgdHlw
ZSk7CisKK2Jvb2wgSXNGb3JtYXRDaGFubmVsRXF1aXZhbGVudChEM0RGT1JNQVQgZDNkZm9ybWF0
LCBHTGVudW0gZm9ybWF0KTsKK0dMZW51bSBDb252ZXJ0QmFja0J1ZmZlckZvcm1hdChEM0RGT1JN
QVQgZm9ybWF0KTsKK0dMZW51bSBDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KEQzREZPUk1BVCBm
b3JtYXQpOworR0xlbnVtIENvbnZlcnRSZW5kZXJUYXJnZXRGb3JtYXQoRDNERk9STUFUIGZvcm1h
dCk7CitHTGVudW0gR2V0RXF1aXZhbGVudEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KTsKKworfQor
CituYW1lc3BhY2UgZDNkOQoreworYm9vbCBJc0NvbXByZXNzZWRGb3JtYXQoRDNERk9STUFUIGZv
cm1hdCk7CitzaXplX3QgQ29tcHV0ZVJvd1NpemUoRDNERk9STUFUIGZvcm1hdCwgdW5zaWduZWQg
aW50IHdpZHRoKTsKKworaW5saW5lIGJvb2wgaXNEZXZpY2VMb3N0RXJyb3IoSFJFU1VMVCBlcnJv
ckNvZGUpCit7CisgICAgc3dpdGNoIChlcnJvckNvZGUpCisgICAgeworICAgICAgY2FzZSBEM0RF
UlJfRFJJVkVSSU5URVJOQUxFUlJPUjoKKyAgICAgIGNhc2UgRDNERVJSX0RFVklDRUxPU1Q6Cisg
ICAgICBjYXNlIEQzREVSUl9ERVZJQ0VIVU5HOgorICAgICAgY2FzZSBEM0RFUlJfREVWSUNFUkVN
T1ZFRDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJf
UkVOREVSRVI5X1VUSUxTX0gKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL0JsaXQucHMgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9CbGl0LnBzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmRjYjNiZDBlNzZiYTkyYTI4ZTc3Njg4OGM2MjkwNGMwYzNmMDVmM2MKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvc2hhZGVycy9CbGl0LnBzCkBAIC0wLDAgKzEsMzkgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CitzYW1wbGVyMkQgdGV4IDogczA7CisKK3VuaWZvcm0gZmxvYXQ0IG1vZGUgOiBjMDsKKworLy8g
UGFzc3Rocm91Z2ggUGl4ZWwgU2hhZGVyCisvLyBPdXRwdXRzIHRleHR1cmUgMCBzYW1wbGVkIGF0
IHRleGNvb3JkIDAuCitmbG9hdDQgcGFzc3Rocm91Z2hwcyhmbG9hdDQgdGV4Y29vcmQgOiBURVhD
T09SRDApIDogQ09MT1IKK3sKKwlyZXR1cm4gdGV4MkQodGV4LCB0ZXhjb29yZC54eSk7Cit9Owor
CisvLyBMdW1pbmFuY2UgQ29udmVyc2lvbiBQaXhlbCBTaGFkZXIKKy8vIE91dHB1dHMgc2FtcGxl
KHRleDAsIHRjMCkucnJyYS4KKy8vIEZvciBMQSBvdXRwdXQgKHBhc3MgQSkgc2V0IEMwLlggPSAx
LCBDMC5ZID0gMC4KKy8vIEZvciBMIG91dHB1dCAoQSA9IDEpIHNldCBDMC5YID0gMCwgQzAuWSA9
IDEuCitmbG9hdDQgbHVtaW5hbmNlcHMoZmxvYXQ0IHRleGNvb3JkIDogVEVYQ09PUkQwKSA6IENP
TE9SCit7CisJZmxvYXQ0IHRtcCA9IHRleDJEKHRleCwgdGV4Y29vcmQueHkpOworCXRtcC53ID0g
dG1wLncgKiBtb2RlLnggKyBtb2RlLnk7CisJcmV0dXJuIHRtcC54eHh3OworfTsKKworLy8gUkdC
L0EgQ29tcG9uZW50IE1hc2sgUGl4ZWwgU2hhZGVyCisvLyBPdXRwdXRzIHNhbXBsZSh0ZXgwLCB0
YzApIHdpdGggb3B0aW9ucyB0byBmb3JjZSBSR0IgPSAwIGFuZC9vciBBID0gMS4KKy8vIFRvIGZv
cmNlIFJHQiA9IDAsIHNldCBDMC5YID0gMCwgb3RoZXJ3aXNlIEMwLlggPSAxLgorLy8gVG8gZm9y
Y2UgQSA9IDEsIHNldCBDMC5aID0gMCwgQzAuVyA9IDEsIG90aGVyd2lzZSBDMC5aID0gMSwgQzAu
VyA9IDAuCitmbG9hdDQgY29tcG9uZW50bWFza3BzKGZsb2F0NCB0ZXhjb29yZCA6IFRFWENPT1JE
MCkgOiBDT0xPUgoreworCWZsb2F0NCB0bXAgPSB0ZXgyRCh0ZXgsIHRleGNvb3JkLnh5KTsKKwl0
bXAueHl6ID0gdG1wLnh5eiAqIG1vZGUueDsKKwl0bXAudyA9IHRtcC53ICogbW9kZS56ICsgbW9k
ZS53OworCXJldHVybiB0bXA7Cit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvQmxpdC52cyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL0JsaXQu
dnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uM2EzNjk4MGI5MzViNTBmYTlhZTBiNmIwZjRhNTBlMzkzOWQwZDUxMQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9zaGFkZXJzL0JsaXQudnMKQEAgLTAsMCArMSw0MyBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKK3N0cnVjdCBWU19PVVRQVVQKK3sKKyAgICBmbG9hdDQgcG9zaXRpb24gOiBQT1NJVElP
TjsKKyAgICBmbG9hdDQgdGV4Y29vcmQgOiBURVhDT09SRDA7Cit9OworCit1bmlmb3JtIGZsb2F0
NCBoYWxmUGl4ZWxTaXplIDogYzA7CisKKy8vIFN0YW5kYXJkIFZlcnRleCBTaGFkZXIKKy8vIElu
cHV0IDAgaXMgdGhlIGhvbW9nZW5vdXMgcG9zaXRpb24uCisvLyBPdXRwdXRzIHRoZSBob21vZ2Vu
b3VzIHBvc2l0aW9uIGFzLWlzLgorLy8gT3V0cHV0cyBhIHRleCBjb29yZCB3aXRoICgwLDApIGlu
IHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgc2NyZWVuIGFuZCAoMSwxKSBpbiB0aGUgYm90
dG9tIHJpZ2h0LgorLy8gQzAuWCBtdXN0IGJlIG5lZ2F0aXZlIGhhbGYtcGl4ZWwgd2lkdGgsIEMw
LlkgbXVzdCBiZSBoYWxmLXBpeGVsIGhlaWdodC4gQzAuWlcgbXVzdCBiZSAwLgorVlNfT1VUUFVU
IHN0YW5kYXJkdnMoaW4gZmxvYXQ0IHBvc2l0aW9uIDogUE9TSVRJT04pCit7CisgICAgVlNfT1VU
UFVUIE91dDsKKworICAgIE91dC5wb3NpdGlvbiA9IHBvc2l0aW9uICsgaGFsZlBpeGVsU2l6ZTsK
KyAgICBPdXQudGV4Y29vcmQgPSBwb3NpdGlvbiAqIGZsb2F0NCgwLjUsIC0wLjUsIDEuMCwgMS4w
KSArIGZsb2F0NCgwLjUsIDAuNSwgMCwgMCk7CisKKyAgICByZXR1cm4gT3V0OworfTsKKworLy8g
RmxpcCBZIFZlcnRleCBTaGFkZXIKKy8vIElucHV0IDAgaXMgdGhlIGhvbW9nZW5vdXMgcG9zaXRp
b24uCisvLyBPdXRwdXRzIHRoZSBob21vZ2Vub3VzIHBvc2l0aW9uIGFzLWlzLgorLy8gT3V0cHV0
cyBhIHRleCBjb29yZCB3aXRoICgwLDEpIGluIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUg
c2NyZWVuIGFuZCAoMSwwKSBpbiB0aGUgYm90dG9tIHJpZ2h0LgorLy8gQzAuWFkgbXVzdCBiZSB0
aGUgaGFsZi1waXhlbCB3aWR0aCBhbmQgaGVpZ2h0LiBDMC5aVyBtdXN0IGJlIDAuCitWU19PVVRQ
VVQgZmxpcHl2cyhpbiBmbG9hdDQgcG9zaXRpb24gOiBQT1NJVElPTikKK3sKKyAgICBWU19PVVRQ
VVQgT3V0OworCisgICAgT3V0LnBvc2l0aW9uID0gcG9zaXRpb24gKyBoYWxmUGl4ZWxTaXplOwor
ICAgIE91dC50ZXhjb29yZCA9IHBvc2l0aW9uICogZmxvYXQ0KDAuNSwgMC41LCAxLjAsIDEuMCkg
KyBmbG9hdDQoMC41LCAwLjUsIDAsIDApOworCisgICAgcmV0dXJuIE91dDsKK307CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
c2hhZGVycy9jb21waWxlZC9jb21wb25lbnRtYXNrcHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2NvbXBvbmVu
dG1hc2twcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhmMjg0N2I4ZTdkMzVmMTU3Y2ExYThkMjgxODNjNWViN2M0
ZDI2ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9jb21wb25lbnRtYXNrcHMuaApA
QCAtMCwwICsxLDc5IEBACisjaWYgMA0KKy8vDQorLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAo
UikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0DQorLy8NCisvLy8NCisvLyBQ
YXJhbWV0ZXJzOg0KKy8vDQorLy8gICBmbG9hdDQgbW9kZTsNCisvLyAgIHNhbXBsZXIyRCB0ZXg7
DQorLy8NCisvLw0KKy8vIFJlZ2lzdGVyczoNCisvLw0KKy8vICAgTmFtZSAgICAgICAgIFJlZyAg
IFNpemUNCisvLyAgIC0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tDQorLy8gICBtb2RlICAgICAgICAg
YzAgICAgICAgMQ0KKy8vICAgdGV4ICAgICAgICAgIHMwICAgICAgIDENCisvLw0KKw0KKyAgICBw
c18yXzANCisgICAgZGNsIHQwLnh5DQorICAgIGRjbF8yZCBzMA0KKyAgICB0ZXhsZCByMCwgdDAs
IHMwDQorICAgIG11bCByMS54eXosIHIwLCBjMC54DQorICAgIG1hZCByMS53LCByMC53LCBjMC56
LCBjMC53DQorICAgIG1vdiBvQzAsIHIxDQorDQorLy8gYXBwcm94aW1hdGVseSA0IGluc3RydWN0
aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVyZSwgMyBhcml0aG1ldGljKQ0KKyNlbmRpZg0KKw0KK2Nv
bnN0IEJZVEUgZ19wczIwX2NvbXBvbmVudG1hc2twc1tdID0NCit7DQorICAgICAgMCwgICAyLCAy
NTUsIDI1NSwgMjU0LCAyNTUsIA0KKyAgICAgNDQsICAgMCwgIDY3LCAgODQsICA2NSwgIDY2LCAN
CisgICAgIDI4LCAgIDAsICAgMCwgICAwLCAxMTksICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAs
ICAgMiwgMjU1LCAyNTUsIA0KKyAgICAgIDIsICAgMCwgICAwLCAgIDAsICAyOCwgICAwLCANCisg
ICAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgDQorICAgIDExMiwgICAwLCAgIDAsICAg
MCwgIDY4LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCANCisgICAg
ICAxLCAgIDAsICAgMCwgICAwLCAgNzYsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgOTIsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCANCisgICAgICAw
LCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgICA5NiwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgMTA5LCAxMTEsIDEwMCwgMTAxLCANCisgICAgICAwLCAx
NzEsIDE3MSwgMTcxLCAgIDEsICAgMCwgDQorICAgICAgMywgICAwLCAgIDEsICAgMCwgICA0LCAg
IDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAs
IDExNiwgMTAxLCAxMjAsICAgMCwgDQorICAgICAgNCwgICAwLCAgMTIsICAgMCwgICAxLCAgIDAs
IA0KKyAgICAgIDEsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAg
MCwgICAwLCAxMTIsIDExNSwgDQorICAgICA5NSwgIDUwLCAgOTUsICA0OCwgICAwLCAgNzcsIA0K
KyAgICAxMDUsICA5OSwgMTE0LCAxMTEsIDExNSwgMTExLCANCisgICAgMTAyLCAxMTYsICAzMiwg
IDQwLCAgODIsICA0MSwgDQorICAgICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsIA0KKyAg
ICAgODMsIDEwNCwgIDk3LCAxMDAsIDEwMSwgMTE0LCANCisgICAgIDMyLCAgNjcsIDExMSwgMTA5
LCAxMTIsIDEwNSwgDQorICAgIDEwOCwgMTAxLCAxMTQsICAzMiwgIDU3LCAgNDYsIA0KKyAgICAg
NTEsICA0OCwgIDQ2LCAgNTcsICA1MCwgIDQ4LCANCisgICAgIDQ4LCAgNDYsICA0OSwgIDU0LCAg
NTEsICA1NiwgDQorICAgICA1MiwgICAwLCAxNzEsIDE3MSwgIDMxLCAgIDAsIA0KKyAgICAgIDAs
ICAgMiwgICAwLCAgIDAsICAgMCwgMTI4LCANCisgICAgICAwLCAgIDAsICAgMywgMTc2LCAgMzEs
ICAgMCwgDQorICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAxNDQsIA0KKyAgICAgIDAsICAg
OCwgIDE1LCAxNjAsICA2NiwgICAwLCANCisgICAgICAwLCAgIDMsICAgMCwgICAwLCAgMTUsIDEy
OCwgDQorICAgICAgMCwgICAwLCAyMjgsIDE3NiwgICAwLCAgIDgsIA0KKyAgICAyMjgsIDE2MCwg
ICA1LCAgIDAsICAgMCwgICAzLCANCisgICAgICAxLCAgIDAsICAgNywgMTI4LCAgIDAsICAgMCwg
DQorICAgIDIyOCwgMTI4LCAgIDAsICAgMCwgICAwLCAxNjAsIA0KKyAgICAgIDQsICAgMCwgICAw
LCAgIDQsICAgMSwgICAwLCANCisgICAgICA4LCAxMjgsICAgMCwgICAwLCAyNTUsIDEyOCwgDQor
ICAgICAgMCwgICAwLCAxNzAsIDE2MCwgICAwLCAgIDAsIA0KKyAgICAyNTUsIDE2MCwgICAxLCAg
IDAsICAgMCwgICAyLCANCisgICAgICAwLCAgIDgsICAxNSwgMTI4LCAgIDEsICAgMCwgDQorICAg
IDIyOCwgMTI4LCAyNTUsIDI1NSwgICAwLCAgIDANCit9Ow0KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBp
bGVkL2ZsaXB5dnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2ZsaXB5dnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMjU3NmVk
Njc0MmYyZTJmNWVmM2ZiMTRhYjBkODNjNjk2YjU3M2QyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMv
Y29tcGlsZWQvZmxpcHl2cy5oCkBAIC0wLDAgKzEsNjcgQEAKKyNpZiAwDQorLy8NCisvLyBHZW5l
cmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYz
ODQNCisvLw0KKy8vLw0KKy8vIFBhcmFtZXRlcnM6DQorLy8NCisvLyAgIGZsb2F0NCBoYWxmUGl4
ZWxTaXplOw0KKy8vDQorLy8NCisvLyBSZWdpc3RlcnM6DQorLy8NCisvLyAgIE5hbWUgICAgICAg
ICAgUmVnICAgU2l6ZQ0KKy8vICAgLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tDQorLy8gICBoYWxm
UGl4ZWxTaXplIGMwICAgICAgIDENCisvLw0KKw0KKyAgICB2c18yXzANCisgICAgZGVmIGMxLCAw
LjUsIDEsIDAsIDANCisgICAgZGNsX3Bvc2l0aW9uIHYwDQorICAgIGFkZCBvUG9zLCB2MCwgYzAN
CisgICAgbWFkIG9UMCwgdjAsIGMxLnh4eXksIGMxLnh4enoNCisNCisvLyBhcHByb3hpbWF0ZWx5
IDIgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KKyNlbmRpZg0KKw0KK2NvbnN0IEJZVEUgZ192czIw
X2ZsaXB5dnNbXSA9DQorew0KKyAgICAgIDAsICAgMiwgMjU0LCAyNTUsIDI1NCwgMjU1LCANCisg
ICAgIDM2LCAgIDAsICA2NywgIDg0LCAgNjUsICA2NiwgDQorICAgICAyOCwgICAwLCAgIDAsICAg
MCwgIDg3LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDIsIDI1NCwgMjU1LCANCisgICAg
ICAxLCAgIDAsICAgMCwgICAwLCAgMjgsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMSwg
ICAwLCAgIDAsIA0KKyAgICAgODAsICAgMCwgICAwLCAgIDAsICA0OCwgICAwLCANCisgICAgICAw
LCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDY0
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgMTA0LCAg
OTcsIDEwOCwgMTAyLCAgODAsIDEwNSwgDQorICAgIDEyMCwgMTAxLCAxMDgsICA4MywgMTA1LCAx
MjIsIA0KKyAgICAxMDEsICAgMCwgMTcxLCAxNzEsICAgMSwgICAwLCANCisgICAgICAzLCAgIDAs
ICAgMSwgICAwLCAgIDQsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgIDAsICAgMCwgMTE4LCAxMTUsICA5NSwgIDUwLCANCisgICAgIDk1LCAgNDgsICAg
MCwgIDc3LCAxMDUsICA5OSwgDQorICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIA0K
KyAgICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCANCisgICAgIDc2LCAgODMsICA3Niwg
IDMyLCAgODMsIDEwNCwgDQorICAgICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCAgNjcsIA0KKyAg
ICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCANCisgICAgMTE0LCAgMzIsICA1NywgIDQ2
LCAgNTEsICA0OCwgDQorICAgICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4LCAgNDYsIA0KKyAgICAg
NDksICA1NCwgIDUxLCAgNTYsICA1MiwgICAwLCANCisgICAgMTcxLCAxNzEsICA4MSwgICAwLCAg
IDAsICAgNSwgDQorICAgICAgMSwgICAwLCAgMTUsIDE2MCwgICAwLCAgIDAsIA0KKyAgICAgIDAs
ICA2MywgICAwLCAgIDAsIDEyOCwgIDYzLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgMzEsICAgMCwgICAwLCAgIDIsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAxMjgsICAgMCwgICAwLCANCisgICAgIDE1LCAxNDQsICAgMiwgICAwLCAgIDAsICAg
MywgDQorICAgICAgMCwgICAwLCAgMTUsIDE5MiwgICAwLCAgIDAsIA0KKyAgICAyMjgsIDE0NCwg
ICAwLCAgIDAsIDIyOCwgMTYwLCANCisgICAgICA0LCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwg
DQorICAgICAxNSwgMjI0LCAgIDAsICAgMCwgMjI4LCAxNDQsIA0KKyAgICAgIDEsICAgMCwgIDgw
LCAxNjAsICAgMSwgICAwLCANCisgICAgMTYwLCAxNjAsIDI1NSwgMjU1LCAgIDAsICAgMA0KK307
DQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvbHVtaW5hbmNlcHMuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2x1
bWluYW5jZXBzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzAzMTNiMDg2MGVjZmUwMjY3N2RkYjNmMDAwOTE1MWY3
OGEzYmZiMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2x1bWluYW5jZXBzLmgKQEAg
LTAsMCArMSw3OSBAQAorI2lmIDANCisvLw0KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIp
IEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NA0KKy8vDQorLy8vDQorLy8gUGFy
YW1ldGVyczoNCisvLw0KKy8vICAgZmxvYXQ0IG1vZGU7DQorLy8gICBzYW1wbGVyMkQgdGV4Ow0K
Ky8vDQorLy8NCisvLyBSZWdpc3RlcnM6DQorLy8NCisvLyAgIE5hbWUgICAgICAgICBSZWcgICBT
aXplDQorLy8gICAtLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQ0KKy8vICAgbW9kZSAgICAgICAgIGMw
ICAgICAgIDENCisvLyAgIHRleCAgICAgICAgICBzMCAgICAgICAxDQorLy8NCisNCisgICAgcHNf
Ml8wDQorICAgIGRjbCB0MC54eQ0KKyAgICBkY2xfMmQgczANCisgICAgdGV4bGQgcjAsIHQwLCBz
MA0KKyAgICBtYWQgcjEudywgcjAudywgYzAueCwgYzAueQ0KKyAgICBtb3YgcjEueHl6LCByMC54
DQorICAgIG1vdiBvQzAsIHIxDQorDQorLy8gYXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNs
b3RzIHVzZWQgKDEgdGV4dHVyZSwgMyBhcml0aG1ldGljKQ0KKyNlbmRpZg0KKw0KK2NvbnN0IEJZ
VEUgZ19wczIwX2x1bWluYW5jZXBzW10gPQ0KK3sNCisgICAgICAwLCAgIDIsIDI1NSwgMjU1LCAy
NTQsIDI1NSwgDQorICAgICA0NCwgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIA0KKyAgICAgMjgs
ICAgMCwgICAwLCAgIDAsIDExOSwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTUs
IDI1NSwgDQorICAgICAgMiwgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDEsICAgMCwgICAwLCANCisgICAgMTEyLCAgIDAsICAgMCwgICAwLCAgNjgsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDEsICAgMCwg
ICAwLCAgIDAsICA3NiwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQorICAgICA5MiwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAx
LCAgIDAsICAgMCwgICAwLCANCisgICAgIDk2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQor
ICAgICAgMCwgICAwLCAxMDksIDExMSwgMTAwLCAxMDEsIA0KKyAgICAgIDAsIDE3MSwgMTcxLCAx
NzEsICAgMSwgICAwLCANCisgICAgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgDQorICAg
ICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgMTE2LCAxMDEs
IDEyMCwgICAwLCANCisgICAgICA0LCAgIDAsICAxMiwgICAwLCAgIDEsICAgMCwgDQorICAgICAg
MSwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsIDEx
MiwgMTE1LCANCisgICAgIDk1LCAgNTAsICA5NSwgIDQ4LCAgIDAsICA3NywgDQorICAgIDEwNSwg
IDk5LCAxMTQsIDExMSwgMTE1LCAxMTEsIA0KKyAgICAxMDIsIDExNiwgIDMyLCAgNDAsICA4Miwg
IDQxLCANCisgICAgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgDQorICAgICA4MywgMTA0
LCAgOTcsIDEwMCwgMTAxLCAxMTQsIA0KKyAgICAgMzIsICA2NywgMTExLCAxMDksIDExMiwgMTA1
LCANCisgICAgMTA4LCAxMDEsIDExNCwgIDMyLCAgNTcsICA0NiwgDQorICAgICA1MSwgIDQ4LCAg
NDYsICA1NywgIDUwLCAgNDgsIA0KKyAgICAgNDgsICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAN
CisgICAgIDUyLCAgIDAsIDE3MSwgMTcxLCAgMzEsICAgMCwgDQorICAgICAgMCwgICAyLCAgIDAs
ICAgMCwgICAwLCAxMjgsIA0KKyAgICAgIDAsICAgMCwgICAzLCAxNzYsICAzMSwgICAwLCANCisg
ICAgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIDE0NCwgDQorICAgICAgMCwgICA4LCAgMTUsIDE2
MCwgIDY2LCAgIDAsIA0KKyAgICAgIDAsICAgMywgICAwLCAgIDAsICAxNSwgMTI4LCANCisgICAg
ICAwLCAgIDAsIDIyOCwgMTc2LCAgIDAsICAgOCwgDQorICAgIDIyOCwgMTYwLCAgIDQsICAgMCwg
ICAwLCAgIDQsIA0KKyAgICAgIDEsICAgMCwgICA4LCAxMjgsICAgMCwgICAwLCANCisgICAgMjU1
LCAxMjgsICAgMCwgICAwLCAgIDAsIDE2MCwgDQorICAgICAgMCwgICAwLCAgODUsIDE2MCwgICAx
LCAgIDAsIA0KKyAgICAgIDAsICAgMiwgICAxLCAgIDAsICAgNywgMTI4LCANCisgICAgICAwLCAg
IDAsICAgMCwgMTI4LCAgIDEsICAgMCwgDQorICAgICAgMCwgICAyLCAgIDAsICAgOCwgIDE1LCAx
MjgsIA0KKyAgICAgIDEsICAgMCwgMjI4LCAxMjgsIDI1NSwgMjU1LCANCisgICAgICAwLCAgIDAN
Cit9Ow0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocHMuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBp
bGVkL3Bhc3N0aHJvdWdocHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMGEyYzdkNDgyYjMzYmU4NjY3NDk1NDc1
NWEzOTk1ODVjOGFiZWE4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91
Z2hwcy5oCkBAIC0wLDAgKzEsNjIgQEAKKyNpZiAwDQorLy8NCisvLyBHZW5lcmF0ZWQgYnkgTWlj
cm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQNCisvLw0KKy8v
Lw0KKy8vIFBhcmFtZXRlcnM6DQorLy8NCisvLyAgIHNhbXBsZXIyRCB0ZXg7DQorLy8NCisvLw0K
Ky8vIFJlZ2lzdGVyczoNCisvLw0KKy8vICAgTmFtZSAgICAgICAgIFJlZyAgIFNpemUNCisvLyAg
IC0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tDQorLy8gICB0ZXggICAgICAgICAgczAgICAgICAgMQ0K
Ky8vDQorDQorICAgIHBzXzJfMA0KKyAgICBkY2wgdDAueHkNCisgICAgZGNsXzJkIHMwDQorICAg
IHRleGxkIHIwLCB0MCwgczANCisgICAgbW92IG9DMCwgcjANCisNCisvLyBhcHByb3hpbWF0ZWx5
IDIgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCAxIGFyaXRobWV0aWMpDQorI2Vu
ZGlmDQorDQorY29uc3QgQllURSBnX3BzMjBfcGFzc3Rocm91Z2hwc1tdID0NCit7DQorICAgICAg
MCwgICAyLCAyNTUsIDI1NSwgMjU0LCAyNTUsIA0KKyAgICAgMzMsICAgMCwgIDY3LCAgODQsICA2
NSwgIDY2LCANCisgICAgIDI4LCAgIDAsICAgMCwgICAwLCAgNzUsICAgMCwgDQorICAgICAgMCwg
ICAwLCAgIDAsICAgMiwgMjU1LCAyNTUsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICAyOCwg
ICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgDQorICAgICA2OCwgICAw
LCAgIDAsICAgMCwgIDQ4LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAw
LCANCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgNTIsICAgMCwgDQorICAgICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAxMTYsIDEwMSwgMTIwLCAgIDAsICAgNCwgICAwLCAN
CisgICAgIDEyLCAgIDAsICAgMSwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgMTEyLCAxMTUsICA5NSwgIDUwLCANCisg
ICAgIDk1LCAgNDgsICAgMCwgIDc3LCAxMDUsICA5OSwgDQorICAgIDExNCwgMTExLCAxMTUsIDEx
MSwgMTAyLCAxMTYsIA0KKyAgICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCANCisgICAg
IDc2LCAgODMsICA3NiwgIDMyLCAgODMsIDEwNCwgDQorICAgICA5NywgMTAwLCAxMDEsIDExNCwg
IDMyLCAgNjcsIA0KKyAgICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCANCisgICAgMTE0
LCAgMzIsICA1NywgIDQ2LCAgNTEsICA0OCwgDQorICAgICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4
LCAgNDYsIA0KKyAgICAgNDksICA1NCwgIDUxLCAgNTYsICA1MiwgICAwLCANCisgICAgMTcxLCAx
NzEsICAzMSwgICAwLCAgIDAsICAgMiwgDQorICAgICAgMCwgICAwLCAgIDAsIDEyOCwgICAwLCAg
IDAsIA0KKyAgICAgIDMsIDE3NiwgIDMxLCAgIDAsICAgMCwgICAyLCANCisgICAgICAwLCAgIDAs
ICAgMCwgMTQ0LCAgIDAsICAgOCwgDQorICAgICAxNSwgMTYwLCAgNjYsICAgMCwgICAwLCAgIDMs
IA0KKyAgICAgIDAsICAgMCwgIDE1LCAxMjgsICAgMCwgICAwLCANCisgICAgMjI4LCAxNzYsICAg
MCwgICA4LCAyMjgsIDE2MCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDgsIA0K
KyAgICAgMTUsIDEyOCwgICAwLCAgIDAsIDIyOCwgMTI4LCANCisgICAgMjU1LCAyNTUsICAgMCwg
ICAwDQorfTsNCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9zdGFuZGFyZHZzLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21w
aWxlZC9zdGFuZGFyZHZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjZiODk1OTVjYmI1NWNjMzJjM2I4MzczZDc4
MTFjMDlmMGFmNDk2MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3N0YW5kYXJkdnMu
aApAQCAtMCwwICsxLDY3IEBACisjaWYgMA0KKy8vDQorLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29m
dCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0DQorLy8NCisvLy8NCisv
LyBQYXJhbWV0ZXJzOg0KKy8vDQorLy8gICBmbG9hdDQgaGFsZlBpeGVsU2l6ZTsNCisvLw0KKy8v
DQorLy8gUmVnaXN0ZXJzOg0KKy8vDQorLy8gICBOYW1lICAgICAgICAgIFJlZyAgIFNpemUNCisv
LyAgIC0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQ0KKy8vICAgaGFsZlBpeGVsU2l6ZSBjMCAgICAg
ICAxDQorLy8NCisNCisgICAgdnNfMl8wDQorICAgIGRlZiBjMSwgMC41LCAtMC41LCAxLCAwDQor
ICAgIGRjbF9wb3NpdGlvbiB2MA0KKyAgICBhZGQgb1BvcywgdjAsIGMwDQorICAgIG1hZCBvVDAs
IHYwLCBjMS54eXp6LCBjMS54eHd3DQorDQorLy8gYXBwcm94aW1hdGVseSAyIGluc3RydWN0aW9u
IHNsb3RzIHVzZWQNCisjZW5kaWYNCisNCitjb25zdCBCWVRFIGdfdnMyMF9zdGFuZGFyZHZzW10g
PQ0KK3sNCisgICAgICAwLCAgIDIsIDI1NCwgMjU1LCAyNTQsIDI1NSwgDQorICAgICAzNiwgICAw
LCAgNjcsICA4NCwgIDY1LCAgNjYsIA0KKyAgICAgMjgsICAgMCwgICAwLCAgIDAsICA4NywgICAw
LCANCisgICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTQsIDI1NSwgDQorICAgICAgMSwgICAwLCAg
IDAsICAgMCwgIDI4LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAN
CisgICAgIDgwLCAgIDAsICAgMCwgICAwLCAgNDgsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDIs
ICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICA2NCwgICAwLCANCisg
ICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgIDEwNCwgIDk3LCAxMDgsIDEw
MiwgIDgwLCAxMDUsIA0KKyAgICAxMjAsIDEwMSwgMTA4LCAgODMsIDEwNSwgMTIyLCANCisgICAg
MTAxLCAgIDAsIDE3MSwgMTcxLCAgIDEsICAgMCwgDQorICAgICAgMywgICAwLCAgIDEsICAgMCwg
ICA0LCAgIDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAw
LCAgIDAsIDExOCwgMTE1LCAgOTUsICA1MCwgDQorICAgICA5NSwgIDQ4LCAgIDAsICA3NywgMTA1
LCAgOTksIA0KKyAgICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCANCisgICAgIDMyLCAg
NDAsICA4MiwgIDQxLCAgMzIsICA3MiwgDQorICAgICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAx
MDQsIA0KKyAgICAgOTcsIDEwMCwgMTAxLCAxMTQsICAzMiwgIDY3LCANCisgICAgMTExLCAxMDks
IDExMiwgMTA1LCAxMDgsIDEwMSwgDQorICAgIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCAgNDgs
IA0KKyAgICAgNDYsICA1NywgIDUwLCAgNDgsICA0OCwgIDQ2LCANCisgICAgIDQ5LCAgNTQsICA1
MSwgIDU2LCAgNTIsICAgMCwgDQorICAgIDE3MSwgMTcxLCAgODEsICAgMCwgICAwLCAgIDUsIA0K
KyAgICAgIDEsICAgMCwgIDE1LCAxNjAsICAgMCwgICAwLCANCisgICAgICAwLCAgNjMsICAgMCwg
ICAwLCAgIDAsIDE5MSwgDQorICAgICAgMCwgICAwLCAxMjgsICA2MywgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgIDMxLCAgIDAsICAgMCwgICAyLCANCisgICAgICAwLCAgIDAsICAgMCwgMTI4
LCAgIDAsICAgMCwgDQorICAgICAxNSwgMTQ0LCAgIDIsICAgMCwgICAwLCAgIDMsIA0KKyAgICAg
IDAsICAgMCwgIDE1LCAxOTIsICAgMCwgICAwLCANCisgICAgMjI4LCAxNDQsICAgMCwgICAwLCAy
MjgsIDE2MCwgDQorICAgICAgNCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsIA0KKyAgICAgMTUs
IDIyNCwgICAwLCAgIDAsIDIyOCwgMTQ0LCANCisgICAgICAxLCAgIDAsIDE2NCwgMTYwLCAgIDEs
ICAgMCwgDQorICAgIDI0MCwgMTYwLCAyNTUsIDI1NSwgICAwLCAgIDANCit9Ow0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9z
aGFkZXJzL2dlbmVyYXRlX3NoYWRlcnMuYmF0IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVycy5iYXQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZWExMjU5MTQ4OTM2ZTY5ZWQ2YzAzZjRiOTczNWVjMzg1YzI3MjY2YQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9zaGFkZXJzL2dlbmVyYXRlX3NoYWRlcnMuYmF0CkBAIC0wLDAgKzEsMTQgQEAKK0BF
Q0hPIE9GRg0KK1JFTQ0KK1JFTSBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCitSRU0gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KK1JFTSBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KK1JFTQ0KKw0KK1BBVEggJVBBVEglOyVQcm9ncmFt
RmlsZXMoeDg2KSVcV2luZG93cyBLaXRzXDguMFxiaW5ceDg2OyVEWFNES19ESVIlXFV0aWxpdGll
c1xiaW5ceDg2DQorDQorZnhjIC9FIHN0YW5kYXJkdnMgL1QgdnNfMl8wIC9GaCBjb21waWxlZC9z
dGFuZGFyZHZzLmggQmxpdC52cw0KK2Z4YyAvRSBmbGlweXZzIC9UIHZzXzJfMCAvRmggY29tcGls
ZWQvZmxpcHl2cy5oIEJsaXQudnMNCitmeGMgL0UgcGFzc3Rocm91Z2hwcyAvVCBwc18yXzAgL0Zo
IGNvbXBpbGVkL3Bhc3N0aHJvdWdocHMuaCBCbGl0LnBzDQorZnhjIC9FIGx1bWluYW5jZXBzIC9U
IHBzXzJfMCAvRmggY29tcGlsZWQvbHVtaW5hbmNlcHMuaCBCbGl0LnBzDQorZnhjIC9FIGNvbXBv
bmVudG1hc2twcyAvVCBwc18yXzAgL0ZoIGNvbXBpbGVkL2NvbXBvbmVudG1hc2twcy5oIEJsaXQu
cHMNCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvdmVydGV4Y29udmVyc2lvbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3ZlcnRleGNvbnZlcnNpb24uaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41OTBiOWQ0OGEzODZmZmMxNzI1NzFkYTQ0ZDliZTIwZDEwMjkwMTljCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L3ZlcnRleGNvbnZlcnNpb24uaApAQCAtMCwwICsxLDIwMyBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworLy8gdmVydGV4Y29udmVyc2lvbi5oOiBBIGxpYnJhcnkgb2YgdmVydGV4IGNvbnZlcnNpb24g
Y2xhc3NlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGJ1aWxkCisvLyB0aGUgRm9ybWF0Q29udmVydGVy
IG9iamVjdHMgdXNlZCBieSB0aGUgYnVmZmVyIGNvbnZlcnNpb24gc3lzdGVtLgorCisjaWZuZGVm
IExJQkdMRVNWMl9WRVJURVhDT05WRVJTSU9OX0hfCisjZGVmaW5lIExJQkdMRVNWMl9WRVJURVhD
T05WRVJTSU9OX0hfCisKK25hbWVzcGFjZSByeAoreworCisvLyBDb252ZXJzaW9uIHR5cGVzOgor
Ly8gc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHk6IHRydWUgaWYgdGhpcyBpcyBhbiBpZGVudGl0
eSB0cmFuc2Zvcm0sIGZhbHNlIG90aGVyd2lzZQorLy8gc3RhdGljIFUgY29udmVydChUKTogY29u
dmVydCBhIHNpbmdsZSBlbGVtZW50IGZyb20gdGhlIGlucHV0IHR5cGUgdG8gdGhlIG91dHB1dCB0
eXBlCisvLyB0eXBlZGVmIC4uLiBPdXRwdXRUeXBlOiB0aGUgdHlwZSBwcm9kdWNlZCBieSB0aGlz
IGNvbnZlcnNpb24KKwordGVtcGxhdGUgPGNsYXNzIFQ+CitzdHJ1Y3QgSWRlbnRpdHkKK3sKKyAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9IHRydWU7CisKKyAgICB0eXBlZGVmIFQgT3V0
cHV0VHlwZTsKKworICAgIHN0YXRpYyBUIGNvbnZlcnQoVCB4KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHg7CisgICAgfQorfTsKKwordGVtcGxhdGUgPGNsYXNzIEZyb21ULCBjbGFzcyBUb1Q+Citz
dHJ1Y3QgQ2FzdAoreworICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0gZmFsc2U7CisK
KyAgICB0eXBlZGVmIFRvVCBPdXRwdXRUeXBlOworCisgICAgc3RhdGljIFRvVCBjb252ZXJ0KEZy
b21UIHgpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VG9UPih4KTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK3N0cnVjdCBDYXN0PFQsIFQ+Cit7CisgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaWRlbnRpdHkgPSB0cnVlOworCisgICAgdHlwZWRlZiBUIE91dHB1dFR5
cGU7CisKKyAgICBzdGF0aWMgVCBjb252ZXJ0KFQgeCkKKyAgICB7CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUPih4KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK3N0cnVj
dCBOb3JtYWxpemUKK3sKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9IGZhbHNlOwor
CisgICAgdHlwZWRlZiBmbG9hdCBPdXRwdXRUeXBlOworCisgICAgc3RhdGljIGZsb2F0IGNvbnZl
cnQoVCB4KQorICAgIHsKKyAgICAgICAgdHlwZWRlZiBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+IE5M
OworICAgICAgICBmbG9hdCBmID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHgpOworCisgICAgICAgIGlm
IChOTDo6aXNfc2lnbmVkKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBjb25zdCBmbG9hdCA9
PiBWQzIwMDggY29tcHV0ZXMgaXQgYXQgY29tcGlsZSB0aW1lCisgICAgICAgICAgICAvLyBzdGF0
aWMgY29uc3QgZmxvYXQgPT4gVkMyMDA4IGNvbXB1dGVzIGl0IHRoZSBmaXJzdCB0aW1lIHdlIGdl
dCBoZXJlLCBzdG9yZXMgaXQgdG8gbWVtb3J5IHdpdGggc3RhdGljIGd1YXJkIGFuZCBhbGwgdGhh
dC4KKyAgICAgICAgICAgIGNvbnN0IGZsb2F0IGRpdmlzb3IgPSAxLjBmLygyKnN0YXRpY19jYXN0
PGZsb2F0PihOTDo6bWF4KCkpKzEpOworICAgICAgICAgICAgcmV0dXJuICgyKmYrMSkqZGl2aXNv
cjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBmL05MOjptYXgoKTsKKyAgICAgICAgfQorICAgIH0KK307CisKK3RlbXBsYXRlIDxjbGFzcyBG
cm9tVHlwZSwgc3RkOjpzaXplX3QgU2NhbGVCaXRzPgorc3RydWN0IEZpeGVkVG9GbG9hdAorewor
ICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0gZmFsc2U7CisKKyAgICB0eXBlZGVmIGZs
b2F0IE91dHB1dFR5cGU7CisKKyAgICBzdGF0aWMgZmxvYXQgY29udmVydChGcm9tVHlwZSB4KQor
ICAgIHsKKyAgICAgICAgY29uc3QgZmxvYXQgZGl2aXNvciA9IDEuMGYgLyBzdGF0aWNfY2FzdDxm
bG9hdD4oc3RhdGljX2Nhc3Q8RnJvbVR5cGU+KDEpIDw8IFNjYWxlQml0cyk7CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oeCkgKiBkaXZpc29yOworICAgIH0KK307CisKKy8vIFdp
ZGVuIHR5cGVzOgorLy8gc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpbml0aWFsV2lkdGg6IG51
bWJlciBvZiBjb21wb25lbnRzIGJlZm9yZSBjb252ZXJzaW9uCisvLyBzdGF0aWMgY29uc3QgdW5z
aWduZWQgaW50IGZpbmFsV2lkdGg6IG51bWJlciBvZiBjb21wb25lbnRzIGFmdGVyIGNvbnZlcnNp
b24KKworLy8gRmxvYXQgaXMgc3VwcG9ydGVkIGF0IGFueSBzaXplLgordGVtcGxhdGUgPHN0ZDo6
c2l6ZV90IE4+CitzdHJ1Y3QgTm9XaWRlbgoreworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVf
dCBpbml0aWFsV2lkdGggPSBOOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5hbFdp
ZHRoID0gTjsKK307CisKKy8vIFNIT1JULCBub3JtLVNIT1JULCBub3JtLVVOU0lHTkVEX1NIT1JU
IGFyZSBzdXBwb3J0ZWQgYnV0IG9ubHkgd2l0aCAyIG9yIDQgY29tcG9uZW50cwordGVtcGxhdGUg
PHN0ZDo6c2l6ZV90IE4+CitzdHJ1Y3QgV2lkZW5Ub0V2ZW4KK3sKKyAgICBzdGF0aWMgY29uc3Qg
c3RkOjpzaXplX3QgaW5pdGlhbFdpZHRoID0gTjsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzaXpl
X3QgZmluYWxXaWR0aCA9IE4rKE4mMSk7Cit9OworCit0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTj4K
K3N0cnVjdCBXaWRlblRvRm91cgoreworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBpbml0
aWFsV2lkdGggPSBOOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5hbFdpZHRoID0g
NDsKK307CisKKy8vIE1vc3QgdHlwZXMgaGF2ZSAwIGFuZCAxIHRoYXQgYXJlIGp1c3QgdGhhdC4K
K3RlbXBsYXRlIDxjbGFzcyBUPgorc3RydWN0IFNpbXBsZURlZmF1bHRWYWx1ZXMKK3sKKyAgICBz
dGF0aWMgVCB6ZXJvKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oMCk7IH0KKyAgICBzdGF0aWMg
VCBvbmUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxUPigxKTsgfQorfTsKKworLy8gQnV0IG5vcm1h
bGlzZWQgdHlwZXMgb25seSBzdG9yZSBbMCwxXSBvciBbLTEsMV0gc28gMS4wIGlzIHJlcHJlc2Vu
dGVkIGJ5IHRoZSBtYXggdmFsdWUuCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK3N0cnVjdCBOb3JtYWxp
emVkRGVmYXVsdFZhbHVlcworeworICAgIHN0YXRpYyBUIHplcm8oKSB7IHJldHVybiBzdGF0aWNf
Y2FzdDxUPigwKTsgfQorICAgIHN0YXRpYyBUIG9uZSgpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19s
aW1pdHM8VD46Om1heCgpOyB9Cit9OworCisvLyBDb252ZXJ0ZXI6CisvLyBzdGF0aWMgY29uc3Qg
Ym9vbCBpZGVudGl0eTogdHJ1ZSBpZiB0aGlzIGlzIGFuIGlkZW50aXR5IHRyYW5zZm9ybSAod2l0
aCBubyB3aWRlbmluZykKKy8vIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5hbFNpemU6IG51
bWJlciBvZiBieXRlcyBwZXIgb3V0cHV0IHZlcnRleAorLy8gc3RhdGljIHZvaWQgY29udmVydEFy
cmF5KGNvbnN0IHZvaWQgKmluLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90IG4sIHZv
aWQgKm91dCk6IGNvbnZlcnQgYW4gYXJyYXkgb2YgdmVydGljZXMuIElucHV0IG1heSBiZSBzdHJp
ZGVkLCBidXQgb3V0cHV0IHdpbGwgYmUgdW5zdHJpZGVkLgorCit0ZW1wbGF0ZSA8Y2xhc3MgSW5U
LCBjbGFzcyBXaWRlblJ1bGUsIGNsYXNzIENvbnZlcnRlciwgY2xhc3MgRGVmYXVsdFZhbHVlUnVs
ZSA9IFNpbXBsZURlZmF1bHRWYWx1ZXM8SW5UPiA+CitzdHJ1Y3QgVmVydGV4RGF0YUNvbnZlcnRl
cgoreworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udmVydGVyOjpPdXRwdXRUeXBlIE91dHB1dFR5
cGU7CisgICAgdHlwZWRlZiBJblQgSW5wdXRUeXBlOworCisgICAgc3RhdGljIGNvbnN0IGJvb2wg
aWRlbnRpdHkgPSAoV2lkZW5SdWxlOjppbml0aWFsV2lkdGggPT0gV2lkZW5SdWxlOjpmaW5hbFdp
ZHRoKSAmJiBDb252ZXJ0ZXI6OmlkZW50aXR5OworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVf
dCBmaW5hbFNpemUgPSBXaWRlblJ1bGU6OmZpbmFsV2lkdGggKiBzaXplb2YoT3V0cHV0VHlwZSk7
CisKKyAgICBzdGF0aWMgdm9pZCBjb252ZXJ0QXJyYXkoY29uc3QgSW5wdXRUeXBlICppbiwgc3Rk
OjpzaXplX3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBuLCBPdXRwdXRUeXBlICpvdXQpCisgICAgewor
ICAgICAgICBmb3IgKHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb25zdCBJbnB1dFR5cGUgKmVpbiA9IHBvaW50ZXJBZGRCeXRlcyhpbiwgaSAq
IHN0cmlkZSk7CisKKyAgICAgICAgICAgIGNvcHlDb21wb25lbnQob3V0LCBlaW4sIDAsIHN0YXRp
Y19jYXN0PE91dHB1dFR5cGU+KERlZmF1bHRWYWx1ZVJ1bGU6Onplcm8oKSkpOworICAgICAgICAg
ICAgY29weUNvbXBvbmVudChvdXQsIGVpbiwgMSwgc3RhdGljX2Nhc3Q8T3V0cHV0VHlwZT4oRGVm
YXVsdFZhbHVlUnVsZTo6emVybygpKSk7CisgICAgICAgICAgICBjb3B5Q29tcG9uZW50KG91dCwg
ZWluLCAyLCBzdGF0aWNfY2FzdDxPdXRwdXRUeXBlPihEZWZhdWx0VmFsdWVSdWxlOjp6ZXJvKCkp
KTsKKyAgICAgICAgICAgIGNvcHlDb21wb25lbnQob3V0LCBlaW4sIDMsIHN0YXRpY19jYXN0PE91
dHB1dFR5cGU+KERlZmF1bHRWYWx1ZVJ1bGU6Om9uZSgpKSk7CisKKyAgICAgICAgICAgIG91dCAr
PSBXaWRlblJ1bGU6OmZpbmFsV2lkdGg7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMg
dm9pZCBjb252ZXJ0QXJyYXkoY29uc3Qgdm9pZCAqaW4sIHN0ZDo6c2l6ZV90IHN0cmlkZSwgc3Rk
OjpzaXplX3Qgbiwgdm9pZCAqb3V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRBcnJh
eShzdGF0aWNfY2FzdDxjb25zdCBJbnB1dFR5cGUqPihpbiksIHN0cmlkZSwgbiwgc3RhdGljX2Nh
c3Q8T3V0cHV0VHlwZSo+KG91dCkpOworICAgIH0KKworICBwcml2YXRlOgorICAgIC8vIEFkdmFu
Y2UgdGhlIGdpdmVuIHBvaW50ZXIgYnkgYSBudW1iZXIgb2YgYnl0ZXMgKG5vdCBwb2ludGVkLXRv
IGVsZW1lbnRzKS4KKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KKyAgICBzdGF0aWMgVCAqcG9pbnRl
ckFkZEJ5dGVzKFQgKmJhc2VQdHIsIHN0ZDo6c2l6ZV90IG51bUJ5dGVzKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCAqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4oYmFzZVB0cikgKyBudW1CeXRlcyk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgY29weUNv
bXBvbmVudChPdXRwdXRUeXBlICpvdXQsIGNvbnN0IElucHV0VHlwZSAqaW4sIHN0ZDo6c2l6ZV90
IGVsZW1lbnRpbmRleCwgT3V0cHV0VHlwZSBkZWZhdWx0dmFsdWUpCisgICAgeworICAgICAgICBp
ZiAoV2lkZW5SdWxlOjpmaW5hbFdpZHRoID4gZWxlbWVudGluZGV4KQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoV2lkZW5SdWxlOjppbml0aWFsV2lkdGggPiBlbGVtZW50aW5kZXgpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0W2VsZW1lbnRpbmRleF0gPSBDb252ZXJ0ZXI6
OmNvbnZlcnQoaW5bZWxlbWVudGluZGV4XSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0W2VsZW1lbnRpbmRleF0gPSBk
ZWZhdWx0dmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9OworCit9CisK
KyNlbmRpZiAgIC8vIExJQkdMRVNWMl9WRVJURVhDT05WRVJTSU9OX0hfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3JlbmRlcmVyMTFf
dXRpbHMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9yZW5kZXJlcjExX3V0aWxzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM4
MDBkYTI1OGNlNTkzOTczNTQ3OGQ1ZWE4N2ZkMTM3Y2I4YTA4MS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL3JlbmRlcmVyMTFfdXRpbHMuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNjg4ICswLDAgQEAKLSNpbmNsdWRlICJwcmVjb21waWxlZC5oIgotLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0K
LS8vIHJlbmRlcmVyMTFfdXRpbHMuY3BwOiBDb252ZXJzaW9uIGZ1bmN0aW9ucyBhbmQgb3RoZXIg
dXRpbGl0eSByb3V0aW5lcwotLy8gc3BlY2lmaWMgdG8gdGhlIEQzRDExIHJlbmRlcmVyLgotCi0j
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL3JlbmRlcmVyMTFfdXRpbHMuaCIKLQotI2luY2x1
ZGUgImNvbW1vbi9kZWJ1Zy5oIgotCi1uYW1lc3BhY2UgZ2xfZDNkMTEKLXsKLQotRDNEMTFfQkxF
TkQgQ29udmVydEJsZW5kRnVuYyhHTGVudW0gZ2xCbGVuZCwgYm9vbCBpc0FscGhhKQotewotICAg
IEQzRDExX0JMRU5EIGQzZEJsZW5kID0gRDNEMTFfQkxFTkRfWkVSTzsKLQotICAgIHN3aXRjaCAo
Z2xCbGVuZCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1pFUk86ICAgICAgICAgICAgICAgICAgICAg
ZDNkQmxlbmQgPSBEM0QxMV9CTEVORF9aRVJPOyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfT05FOiAgICAgICAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzRDExX0JMRU5E
X09ORTsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TUkNfQ09MT1I6ICAg
ICAgICAgICAgICAgIGQzZEJsZW5kID0gKGlzQWxwaGEgPyBEM0QxMV9CTEVORF9TUkNfQUxQSEEg
OiBEM0QxMV9CTEVORF9TUkNfQ09MT1IpOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X09ORV9NSU5VU19TUkNfQ09MT1I6ICAgICAgZDNkQmxlbmQgPSAoaXNBbHBoYSA/IEQzRDExX0JM
RU5EX0lOVl9TUkNfQUxQSEEgOiBEM0QxMV9CTEVORF9JTlZfU1JDX0NPTE9SKTsgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfRFNUX0NPTE9SOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IChpc0Fs
cGhhID8gRDNEMTFfQkxFTkRfREVTVF9BTFBIQSA6IEQzRDExX0JMRU5EX0RFU1RfQ09MT1IpOyAg
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0NPTE9SOiAgICAgIGQz
ZEJsZW5kID0gKGlzQWxwaGEgPyBEM0QxMV9CTEVORF9JTlZfREVTVF9BTFBIQSA6IEQzRDExX0JM
RU5EX0lOVl9ERVNUX0NPTE9SKTsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NSQ19BTFBIQTogICAg
ICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0QxMV9CTEVORF9TUkNfQUxQSEE7ICAgICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19BTFBIQTogICAgICBkM2RCbGVuZCA9
IEQzRDExX0JMRU5EX0lOVl9TUkNfQUxQSEE7ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9E
U1RfQUxQSEE6ICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gRDNEMTFfQkxFTkRfREVTVF9BTFBI
QTsgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQUxQSEE6ICAg
ICAgZDNkQmxlbmQgPSBEM0QxMV9CTEVORF9JTlZfREVTVF9BTFBIQTsgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfQ09OU1RBTlRfQ09MT1I6ICAgICAgICAgICBkM2RCbGVuZCA9IEQzRDExX0JM
RU5EX0JMRU5EX0ZBQ1RPUjsgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9PTkVfTUlOVVNf
Q09OU1RBTlRfQ09MT1I6IGQzZEJsZW5kID0gRDNEMTFfQkxFTkRfSU5WX0JMRU5EX0ZBQ1RPUjsg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0NPTlNUQU5UX0FMUEhBOiAgICAgICAgICAgZDNkQmxl
bmQgPSBEM0QxMV9CTEVORF9CTEVORF9GQUNUT1I7ICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBOiBkM2RCbGVuZCA9IEQzRDExX0JMRU5EX0lOVl9C
TEVORF9GQUNUT1I7ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TUkNfQUxQSEFfU0FUVVJBVEU6
ICAgICAgIGQzZEJsZW5kID0gRDNEMTFfQkxFTkRfU1JDX0FMUEhBX1NBVDsgICAgICAgYnJlYWs7
Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBkM2RC
bGVuZDsKLX0KLQotRDNEMTFfQkxFTkRfT1AgQ29udmVydEJsZW5kT3AoR0xlbnVtIGdsQmxlbmRP
cCkKLXsKLSAgICBEM0QxMV9CTEVORF9PUCBkM2RCbGVuZE9wID0gRDNEMTFfQkxFTkRfT1BfQURE
OwotCi0gICAgc3dpdGNoIChnbEJsZW5kT3ApCi0gICAgewotICAgICAgY2FzZSBHTF9GVU5DX0FE
RDogICAgICAgICAgICAgIGQzZEJsZW5kT3AgPSBEM0QxMV9CTEVORF9PUF9BREQ7ICAgICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfRlVOQ19TVUJUUkFDVDogICAgICAgICBkM2RCbGVuZE9w
ID0gRDNEMTFfQkxFTkRfT1BfU1VCVFJBQ1Q7ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZV
TkNfUkVWRVJTRV9TVUJUUkFDVDogZDNkQmxlbmRPcCA9IEQzRDExX0JMRU5EX09QX1JFVl9TVUJU
UkFDVDsgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gZDNkQmxlbmRPcDsKLX0KLQotVUlOVDggQ29udmVydENvbG9yTWFzayhib29sIHJl
ZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKQotewotICAgIFVJTlQ4IG1hc2sg
PSAwOwotICAgIGlmIChyZWQpCi0gICAgewotICAgICAgICBtYXNrIHw9IEQzRDExX0NPTE9SX1dS
SVRFX0VOQUJMRV9SRUQ7Ci0gICAgfQotICAgIGlmIChncmVlbikKLSAgICB7Ci0gICAgICAgIG1h
c2sgfD0gRDNEMTFfQ09MT1JfV1JJVEVfRU5BQkxFX0dSRUVOOwotICAgIH0KLSAgICBpZiAoYmx1
ZSkKLSAgICB7Ci0gICAgICAgIG1hc2sgfD0gRDNEMTFfQ09MT1JfV1JJVEVfRU5BQkxFX0JMVUU7
Ci0gICAgfQotICAgIGlmIChhbHBoYSkKLSAgICB7Ci0gICAgICAgIG1hc2sgfD0gRDNEMTFfQ09M
T1JfV1JJVEVfRU5BQkxFX0FMUEhBOwotICAgIH0KLSAgICByZXR1cm4gbWFzazsKLX0KLQotRDNE
MTFfQ1VMTF9NT0RFIENvbnZlcnRDdWxsTW9kZShib29sIGN1bGxFbmFibGVkLCBHTGVudW0gY3Vs
bE1vZGUpCi17Ci0gICAgRDNEMTFfQ1VMTF9NT0RFIGN1bGwgPSBEM0QxMV9DVUxMX05PTkU7Ci0K
LSAgICBpZiAoY3VsbEVuYWJsZWQpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGN1bGxNb2RlKQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9GUk9OVDogICAgICAgICAgICBjdWxsID0gRDNE
MTFfQ1VMTF9GUk9OVDsgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9CQUNLOiAgICAgICAg
ICAgICBjdWxsID0gRDNEMTFfQ1VMTF9CQUNLOyAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBH
TF9GUk9OVF9BTkRfQkFDSzogICBjdWxsID0gRDNEMTFfQ1VMTF9OT05FOyAgICAgYnJlYWs7Ci0g
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICBjdWxsID0gRDNEMTFfQ1VMTF9OT05FOwotICAgIH0KLQotICAg
IHJldHVybiBjdWxsOwotfQotCi1EM0QxMV9DT01QQVJJU09OX0ZVTkMgQ29udmVydENvbXBhcmlz
b24oR0xlbnVtIGNvbXBhcmlzb24pCi17Ci0gICAgRDNEMTFfQ09NUEFSSVNPTl9GVU5DIGQzZENv
bXAgPSBEM0QxMV9DT01QQVJJU09OX05FVkVSOwotICAgIHN3aXRjaCAoY29tcGFyaXNvbikKLSAg
ICB7Ci0gICAgICBjYXNlIEdMX05FVkVSOiAgICBkM2RDb21wID0gRDNEMTFfQ09NUEFSSVNPTl9O
RVZFUjsgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9BTFdBWVM6ICAgZDNkQ29tcCA9
IEQzRDExX0NPTVBBUklTT05fQUxXQVlTOyAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
TEVTUzogICAgIGQzZENvbXAgPSBEM0QxMV9DT01QQVJJU09OX0xFU1M7ICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX0xFUVVBTDogICBkM2RDb21wID0gRDNEMTFfQ09NUEFSSVNPTl9M
RVNTX0VRVUFMOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9FUVVBTDogICAgZDNkQ29tcCA9
IEQzRDExX0NPTVBBUklTT05fRVFVQUw7ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
R1JFQVRFUjogIGQzZENvbXAgPSBEM0QxMV9DT01QQVJJU09OX0dSRUFURVI7ICAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX0dFUVVBTDogICBkM2RDb21wID0gRDNEMTFfQ09NUEFSSVNPTl9H
UkVBVEVSX0VRVUFMOyAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9OT1RFUVVBTDogZDNkQ29tcCA9
IEQzRDExX0NPTVBBUklTT05fTk9UX0VRVUFMOyAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGQzZENvbXA7Ci19Ci0KLUQzRDEx
X0RFUFRIX1dSSVRFX01BU0sgQ29udmVydERlcHRoTWFzayhib29sIGRlcHRoV3JpdGVFbmFibGVk
KQotewotICAgIHJldHVybiBkZXB0aFdyaXRlRW5hYmxlZCA/IEQzRDExX0RFUFRIX1dSSVRFX01B
U0tfQUxMIDogRDNEMTFfREVQVEhfV1JJVEVfTUFTS19aRVJPOwotfQotCi1VSU5UOCBDb252ZXJ0
U3RlbmNpbE1hc2soR0x1aW50IHN0ZW5jaWxtYXNrKQotewotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxVSU5UOD4oc3RlbmNpbG1hc2spOwotfQotCi1EM0QxMV9TVEVOQ0lMX09QIENvbnZlcnRTdGVu
Y2lsT3AoR0xlbnVtIHN0ZW5jaWxPcCkKLXsKLSAgICBEM0QxMV9TVEVOQ0lMX09QIGQzZFN0ZW5j
aWxPcCA9IEQzRDExX1NURU5DSUxfT1BfS0VFUDsKLQotICAgIHN3aXRjaCAoc3RlbmNpbE9wKQot
ICAgIHsKLSAgICAgIGNhc2UgR0xfWkVSTzogICAgICBkM2RTdGVuY2lsT3AgPSBEM0QxMV9TVEVO
Q0lMX09QX1pFUk87ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0tFRVA6ICAgICAgZDNkU3Rl
bmNpbE9wID0gRDNEMTFfU1RFTkNJTF9PUF9LRUVQOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9SRVBMQUNFOiAgIGQzZFN0ZW5jaWxPcCA9IEQzRDExX1NURU5DSUxfT1BfUkVQTEFDRTsgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfSU5DUjogICAgICBkM2RTdGVuY2lsT3AgPSBEM0QxMV9TVEVO
Q0lMX09QX0lOQ1JfU0FUOyAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RFQ1I6ICAgICAgZDNkU3Rl
bmNpbE9wID0gRDNEMTFfU1RFTkNJTF9PUF9ERUNSX1NBVDsgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9JTlZFUlQ6ICAgIGQzZFN0ZW5jaWxPcCA9IEQzRDExX1NURU5DSUxfT1BfSU5WRVJUOyAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfSU5DUl9XUkFQOiBkM2RTdGVuY2lsT3AgPSBEM0QxMV9TVEVO
Q0lMX09QX0lOQ1I7ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RFQ1JfV1JBUDogZDNkU3Rl
bmNpbE9wID0gRDNEMTFfU1RFTkNJTF9PUF9ERUNSOyAgICAgIGJyZWFrOwotICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZDNkU3RlbmNpbE9wOwotfQot
Ci1EM0QxMV9GSUxURVIgQ29udmVydEZpbHRlcihHTGVudW0gbWluRmlsdGVyLCBHTGVudW0gbWFn
RmlsdGVyLCBmbG9hdCBtYXhBbmlzb3Ryb3B5KQotewotICAgIGlmIChtYXhBbmlzb3Ryb3B5ID4g
MS4wZikKLSAgICB7Ci0gICAgICAgIHJldHVybiBEM0QxMV9FTkNPREVfQU5JU09UUk9QSUNfRklM
VEVSKGZhbHNlKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgRDNEMTFfRklMVEVS
X1RZUEUgZHhNaW4gPSBEM0QxMV9GSUxURVJfVFlQRV9QT0lOVDsKLSAgICAgICAgRDNEMTFfRklM
VEVSX1RZUEUgZHhNaXAgPSBEM0QxMV9GSUxURVJfVFlQRV9QT0lOVDsKLSAgICAgICAgc3dpdGNo
IChtaW5GaWx0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX05FQVJFU1Q6ICAgICAg
ICAgICAgICAgIGR4TWluID0gRDNEMTFfRklMVEVSX1RZUEVfUE9JTlQ7ICBkeE1pcCA9IEQzRDEx
X0ZJTFRFUl9UWVBFX1BPSU5UOyAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9MSU5FQVI6ICAg
ICAgICAgICAgICAgICBkeE1pbiA9IEQzRDExX0ZJTFRFUl9UWVBFX0xJTkVBUjsgZHhNaXAgPSBE
M0QxMV9GSUxURVJfVFlQRV9QT0lOVDsgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfTkVBUkVT
VF9NSVBNQVBfTkVBUkVTVDogZHhNaW4gPSBEM0QxMV9GSUxURVJfVFlQRV9QT0lOVDsgIGR4TWlw
ID0gRDNEMTFfRklMVEVSX1RZUEVfUE9JTlQ7ICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0xJ
TkVBUl9NSVBNQVBfTkVBUkVTVDogIGR4TWluID0gRDNEMTFfRklMVEVSX1RZUEVfTElORUFSOyBk
eE1pcCA9IEQzRDExX0ZJTFRFUl9UWVBFX1BPSU5UOyAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBH
TF9ORUFSRVNUX01JUE1BUF9MSU5FQVI6ICBkeE1pbiA9IEQzRDExX0ZJTFRFUl9UWVBFX1BPSU5U
OyAgZHhNaXAgPSBEM0QxMV9GSUxURVJfVFlQRV9MSU5FQVI7IGJyZWFrOwotICAgICAgICAgIGNh
c2UgR0xfTElORUFSX01JUE1BUF9MSU5FQVI6ICAgZHhNaW4gPSBEM0QxMV9GSUxURVJfVFlQRV9M
SU5FQVI7IGR4TWlwID0gRDNEMTFfRklMVEVSX1RZUEVfTElORUFSOyBicmVhazsKLSAgICAgICAg
ICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBEM0QxMV9GSUxURVJfVFlQRSBkeE1hZyA9IEQzRDExX0ZJTFRFUl9UWVBF
X1BPSU5UOwotICAgICAgICBzd2l0Y2ggKG1hZ0ZpbHRlcikKLSAgICAgICAgewotICAgICAgICAg
IGNhc2UgR0xfTkVBUkVTVDogZHhNYWcgPSBEM0QxMV9GSUxURVJfVFlQRV9QT0lOVDsgIGJyZWFr
OwotICAgICAgICAgIGNhc2UgR0xfTElORUFSOiAgZHhNYWcgPSBEM0QxMV9GSUxURVJfVFlQRV9M
SU5FQVI7IGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgVU5SRUFDSEFCTEUoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBEM0QxMV9FTkNPREVfQkFTSUNfRklMVEVSKGR4
TWluLCBkeE1hZywgZHhNaXAsIGZhbHNlKTsKLSAgICB9Ci19Ci0KLUQzRDExX1RFWFRVUkVfQURE
UkVTU19NT0RFIENvbnZlcnRUZXh0dXJlV3JhcChHTGVudW0gd3JhcCkKLXsKLSAgICBzd2l0Y2gg
KHdyYXApCi0gICAgewotICAgICAgY2FzZSBHTF9SRVBFQVQ6ICAgICAgICAgIHJldHVybiBEM0Qx
MV9URVhUVVJFX0FERFJFU1NfV1JBUDsKLSAgICAgIGNhc2UgR0xfQ0xBTVBfVE9fRURHRTogICBy
ZXR1cm4gRDNEMTFfVEVYVFVSRV9BRERSRVNTX0NMQU1QOwotICAgICAgY2FzZSBHTF9NSVJST1JF
RF9SRVBFQVQ6IHJldHVybiBEM0QxMV9URVhUVVJFX0FERFJFU1NfTUlSUk9SOwotICAgICAgZGVm
YXVsdDogICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IEQzRDExX1RFWFRVUkVfQUREUkVTU19XUkFQOwotfQotCi1GTE9BVCBDb252ZXJ0TWluTE9EKEdM
ZW51bSBtaW5GaWx0ZXIsIHVuc2lnbmVkIGludCBsb2RPZmZzZXQpCi17Ci0gICAgcmV0dXJuICht
aW5GaWx0ZXIgPT0gR0xfTkVBUkVTVCB8fCBtaW5GaWx0ZXIgPT0gR0xfTElORUFSKSA/IHN0YXRp
Y19jYXN0PGZsb2F0Pihsb2RPZmZzZXQpIDogLUZMVF9NQVg7Ci19Ci0KLUZMT0FUIENvbnZlcnRN
YXhMT0QoR0xlbnVtIG1pbkZpbHRlciwgdW5zaWduZWQgaW50IGxvZE9mZnNldCkKLXsKLSAgICBy
ZXR1cm4gKG1pbkZpbHRlciA9PSBHTF9ORUFSRVNUIHx8IG1pbkZpbHRlciA9PSBHTF9MSU5FQVIp
ID8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGxvZE9mZnNldCkgOiBGTFRfTUFYOwotfQotCi19Ci0KLW5h
bWVzcGFjZSBkM2QxMV9nbAotewotCi1HTGVudW0gQ29udmVydEJhY2tCdWZmZXJGb3JtYXQoRFhH
SV9GT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk06IHJldHVybiBHTF9SR0JBOF9PRVM7Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOiByZXR1cm4gR0xfQkdSQThfRVhUOwot
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gR0xfUkdCQThfT0VTOwotfQotCi1HTGVudW0gQ29udmVydERlcHRoU3RlbmNpbEZvcm1hdChE
WEdJX0ZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9VTktOT1dOOiByZXR1cm4gR0xfTk9ORTsKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfRDE2X1VOT1JNOiByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UMTY7Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOiByZXR1cm4gR0xfREVQVEgyNF9TVEVO
Q0lMOF9PRVM7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0K
LQotICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLX0KLQotR0xlbnVtIENvbnZl
cnRSZW5kZXJidWZmZXJGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAo
Zm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06Ci0g
ICAgICAgIHJldHVybiBHTF9CR1JBOF9FWFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhC
OEE4X1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfUkdCQThfT0VTOwotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9EMTZfVU5PUk06Ci0gICAgICAgIHJldHVybiBHTF9ERVBUSF9DT01QT05FTlQxNjsK
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ6Ci0gICAgICAgIHJldHVy
biBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVB
Q0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX1JHQkE4X09FUzsKLX0KLQotR0xlbnVt
IENvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KQotewotICAg
IHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThf
VU5PUk06Ci0gICAgICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0E4X1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfQUxQSEE4X0VYVDsKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkMxX1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JB
X1MzVENfRFhUMV9FWFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STToKLSAgICAg
ICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU7Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX0JDM19VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDVfQU5HTEU7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9G
TE9BVDoKLSAgICAgICAgcmV0dXJuIEdMX1JHQkEzMkZfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SMzJHMzJCMzJfRkxPQVQ6Ci0gICAgICAgIHJldHVybiBHTF9SR0IzMkZfRVhUOwotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6Ci0gICAgICAgIHJldHVybiBH
TF9SR0JBMTZGX0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06Ci0g
ICAgICAgIHJldHVybiBHTF9CR1JBOF9FWFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1VO
T1JNOgotICAgICAgICByZXR1cm4gR0xfUjhfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
OEc4X1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfUkc4X0VYVDsKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjE2X0ZMT0FUOgotICAgICAgICByZXR1cm4gR0xfUjE2Rl9FWFQ7Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX1IxNkcxNl9GTE9BVDoKLSAgICAgICAgcmV0dXJuIEdMX1JHMTZGX0VYVDsK
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDE2X1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfREVQ
VEhfQ09NUE9ORU5UMTY7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5U
OgotICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX1VOS05PV046Ci0gICAgICAgIHJldHVybiBHTF9OT05FOwotICAgICAgZGVmYXVs
dDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gR0xfUkdCQThf
T0VTOwotfQotCi19Ci0KLW5hbWVzcGFjZSBnbF9kM2QxMQotewotCi1EWEdJX0ZPUk1BVCBDb252
ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdMZW51bSBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3Jt
YXQpCi0gICAgewotICAgICAgY2FzZSBHTF9SR0JBNDoKLSAgICAgIGNhc2UgR0xfUkdCNV9BMToK
LSAgICAgIGNhc2UgR0xfUkdCQThfT0VTOgotICAgICAgY2FzZSBHTF9SR0I1NjU6Ci0gICAgICBj
YXNlIEdMX1JHQjhfT0VTOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5P
Uk07Ci0gICAgICBjYXNlIEdMX0JHUkE4X0VYVDoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFU
X0I4RzhSOEE4X1VOT1JNOwotICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAg
ICAgcmV0dXJuIERYR0lfRk9STUFUX0QxNl9VTk9STTsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9J
TkRFWDg6Ci0gICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgotICAgICAgICByZXR1
cm4gRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ7Ci0gICAgICBkZWZhdWx0OgotICAgICAg
ICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SOEc4QjhB
OF9VTk9STTsKLX0KLQotRFhHSV9GT1JNQVQgQ29udmVydFRleHR1cmVGb3JtYXQoR0xlbnVtIGlu
dGVybmFsZm9ybWF0KQotewotICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCi0gICAgewotICAg
ICAgY2FzZSBHTF9SR0I1NjU6Ci0gICAgICBjYXNlIEdMX1JHQkE0OgotICAgICAgY2FzZSBHTF9S
R0I1X0ExOgotICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgIGNhc2UgR0xfUkdCQThfT0VT
OgotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0VYVDoKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNF
OF9BTFBIQThfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk07
Ci0gICAgICBjYXNlIEdMX0FMUEhBOF9FWFQ6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9B
OF9VTk9STTsKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAg
ICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgIHJldHVy
biBEWEdJX0ZPUk1BVF9CQzFfVU5PUk07Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9T
M1RDX0RYVDNfQU5HTEU6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9CQzJfVU5PUk07Ci0g
ICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgIHJl
dHVybiBEWEdJX0ZPUk1BVF9CQzNfVU5PUk07Ci0gICAgICBjYXNlIEdMX1JHQkEzMkZfRVhUOgot
ICAgICAgY2FzZSBHTF9BTFBIQTMyRl9FWFQ6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBI
QTMyRl9FWFQ6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQ7
Ci0gICAgICBjYXNlIEdMX1JHQjMyRl9FWFQ6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTMyRl9F
WFQ6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQ7Ci0gICAg
ICBjYXNlIEdMX1JHQkExNkZfRVhUOgotICAgICAgY2FzZSBHTF9BTFBIQTE2Rl9FWFQ6Ci0gICAg
ICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6Ci0gICAgICBjYXNlIEdMX1JHQjE2Rl9F
WFQ6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6Ci0gICAgICAgIHJldHVybiBEWEdJ
X0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ7Ci0gICAgICBjYXNlIEdMX0JHUkE4X0VYVDoKLSAg
ICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOwotICAgICAgY2FzZSBHTF9S
OF9FWFQ6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SOF9VTk9STTsKLSAgICAgIGNhc2Ug
R0xfUkc4X0VYVDoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1I4RzhfVU5PUk07Ci0gICAg
ICBjYXNlIEdMX1IxNkZfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjE2X0ZMT0FU
OwotICAgICAgY2FzZSBHTF9SRzE2Rl9FWFQ6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9S
MTZHMTZfRkxPQVQ7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgICBy
ZXR1cm4gRFhHSV9GT1JNQVRfRDE2X1VOT1JNOwotICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05F
TlQzMl9PRVM6Ci0gICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgotICAgICAgICBy
ZXR1cm4gRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ7Ci0gICAgICBjYXNlIEdMX05PTkU6
Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9VTktOT1dOOwotICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjhH
OEI4QThfVU5PUk07Ci19Ci0KLX0KLQotbmFtZXNwYWNlIGQzZDExCi17Ci0KLXZvaWQgU2V0UG9z
aXRpb25UZXhDb29yZFZlcnRleChQb3NpdGlvblRleENvb3JkVmVydGV4KiB2ZXJ0ZXgsIGZsb2F0
IHgsIGZsb2F0IHksIGZsb2F0IHUsIGZsb2F0IHYpCi17Ci0gICAgdmVydGV4LT54ID0geDsKLSAg
ICB2ZXJ0ZXgtPnkgPSB5OwotICAgIHZlcnRleC0+dSA9IHU7Ci0gICAgdmVydGV4LT52ID0gdjsK
LX0KLQotdm9pZCBTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgoUG9zaXRpb25EZXB0aENvbG9y
VmVydGV4KiB2ZXJ0ZXgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6Q29sb3IgJmNvbG9yKQotewotICAgIHZlcnRl
eC0+eCA9IHg7Ci0gICAgdmVydGV4LT55ID0geTsKLSAgICB2ZXJ0ZXgtPnogPSB6OwotICAgIHZl
cnRleC0+ciA9IGNvbG9yLnJlZDsKLSAgICB2ZXJ0ZXgtPmcgPSBjb2xvci5ncmVlbjsKLSAgICB2
ZXJ0ZXgtPmIgPSBjb2xvci5ibHVlOwotICAgIHZlcnRleC0+YSA9IGNvbG9yLmFscGhhOwotfQot
Ci1zaXplX3QgQ29tcHV0ZVBpeGVsU2l6ZUJpdHMoRFhHSV9GT1JNQVQgZm9ybWF0KQotewotICAg
IHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjFfVU5PUk06
Ci0gICAgICAgIHJldHVybiAxOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX0E4X1VOT1JNOgot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOF9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
OF9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVFlQRUxFU1M6Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX1I4X1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1VOT1JNOgot
ICAgICAgICByZXR1cm4gODsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CNUc1UjVBMV9VTk9S
TToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjVHNlI1X1VOT1JNOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9EMTZfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNl9GTE9BVDoKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X1NJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1Ix
Nl9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X1RZUEVMRVNTOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9SMTZfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X1VOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1NJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1I4RzhfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfVFlQRUxFU1M6Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjhHOF9VTk9STToKLSAgICAgICAgcmV0dXJuIDE2OwotCi0gICAgICBjYXNlIERYR0lfRk9STUFU
X0I4RzhSOFg4X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhYOF9VTk9S
TToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4WDhfVU5PUk1fU1JHQjoKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0QzMl9GTE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FUX1M4WDI0X1VJTlQ6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0c4UjhfRzhCOF9VTk9STToKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfUjEwRzEwQjEwX1hSX0JJQVNfQTJfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1IxMEcxMEIxMEEyX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTBHMTBC
MTBBMl9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTBHMTBCMTBBMl9VTk9STToKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjExRzExQjEwX0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SMTZHMTZfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9TSU5UOgot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1IxNkcxNl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X1VJTlQ6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjI0X1VOT1JNX1g4X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMjRH
OF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyX0ZMT0FUOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9SMzJfRkxPQVRfWDhYMjRfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX1IzMl9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJfVFlQRUxFU1M6Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX1IzMl9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
OEc4X0I4RzhfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1NJTlQ6Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SOEc4QjhBOF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThf
VUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk06Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0I4RzhSOEE4X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9S
TToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk1fU1JHQjoKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfUjlHOUI5RTVfU0hBUkVERVhQOgotICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9YMjRfVFlQRUxFU1NfRzhfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfWDMyX1RZUEVM
RVNTX0c4WDI0X1VJTlQ6Ci0gICAgICAgIHJldHVybiAzMjsKLQotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIx
NkExNl9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfU05PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9UWVBFTEVTUzoKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1Ix
NkcxNkIxNkExNl9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FUOgot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJfU0lOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjMyRzMyX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJfVUlOVDoK
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzhYMjRfVFlQRUxFU1M6Ci0gICAgICAgIHJldHVy
biA2NDsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQ6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
MzJHMzJCMzJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9VSU5U
OgotICAgICAgICByZXR1cm4gOTY7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMy
QTMyX0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfU0lOVDoKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX1RZUEVMRVNTOgotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfVUlOVDoKLSAgICAgICAgcmV0dXJuIDEyODsKLQotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0JDMV9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNX1NSR0I6Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX0JDNF9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0
X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVU5PUk06Ci0gICAgICAgIHJl
dHVybiA0OwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9UWVBFTEVTUzoKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5P
Uk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1RZUEVMRVNTOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9S
TV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfU05PUk06Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDNV9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1VOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1NGMTY6Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0JDNkhfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVUYxNjoKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9CQzdfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9STV9TUkdCOgotICAg
ICAgICByZXR1cm4gODsKLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotfQotCi1zaXplX3QgQ29tcHV0ZUJsb2NrU2l6ZUJpdHMoRFhHSV9GT1JNQVQgZm9ybWF0KQot
ewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMx
X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk06Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX0JDMV9VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRf
U05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9UWVBFTEVTUzoKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkM0X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVFlQRUxF
U1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfQkMyX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19UWVBFTEVT
UzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzNfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1NOT1JNOgot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0JDNV9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9TRjE2OgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzZIX1VGMTY6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19UWVBFTEVTUzoKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfQkM3X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5P
Uk1fU1JHQjoKLSAgICAgICAgcmV0dXJuIENvbXB1dGVQaXhlbFNpemVCaXRzKGZvcm1hdCkgKiAx
NjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLX0KLQotYm9vbCBJc0NvbXByZXNzZWQoRFhHSV9GT1JNQVQgZm9ybWF0KQot
ewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMx
X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk06Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX0JDMV9VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRf
U05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9UWVBFTEVTUzoKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkM0X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVFlQRUxF
U1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfQkMyX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19UWVBFTEVT
UzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzNfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1NOT1JNOgot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0JDNV9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9TRjE2OgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzZIX1VGMTY6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19UWVBFTEVTUzoKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfQkM3X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5P
Uk1fU1JHQjoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1VO
S05PV046Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLXVuc2lnbmVk
IGludCBHZXRUZXh0dXJlRm9ybWF0RGltZW5zaW9uQWxpZ25tZW50KERYR0lfRk9STUFUIGZvcm1h
dCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0JDMV9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
QkM0X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVFlQRUxFU1M6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0JDNF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1RZ
UEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk06Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDMl9VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVFlQ
RUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STToKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkMzX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9TTk9S
TToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9CQzVfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfU0YxNjoKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkM2SF9VRjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVFlQRUxFU1M6Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3
X1VOT1JNX1NSR0I6Ci0gICAgICAgIHJldHVybiA0OwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9V
TktOT1dOOgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gMTsKLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLX0KLQotYm9vbCBJc0RlcHRoU3Rl
bmNpbEZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0g
ICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVRfUzhYMjRfVUlOVDoKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRf
VU5PUk1fUzhfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDE2X1VOT1JNOgotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci19Ci0KLURYR0lfRk9STUFUIEdldERlcHRoVGV4dHVyZUZvcm1hdChEWEdJX0ZPUk1BVCBm
b3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9EMzJfRkxPQVRfUzhYMjRfVUlOVDogcmV0dXJuIERYR0lfRk9STUFUX1IzMkc4WDI0X1RZ
UEVMRVNTOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVQ6ICAgICAgICAgICAgcmV0
dXJuIERYR0lfRk9STUFUX1IzMl9UWVBFTEVTUzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDI0
X1VOT1JNX1M4X1VJTlQ6ICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMjRHOF9UWVBFTEVTUzsKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfRDE2X1VOT1JNOiAgICAgICAgICAgIHJldHVybiBEWEdJX0ZP
Uk1BVF9SMTZfVFlQRUxFU1M7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgICAgICAg
ICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfVU5LTk9XTjsKLSAgICB9Ci19Ci0KLURYR0lfRk9S
TUFUIEdldERlcHRoU2hhZGVyUmVzb3VyY2VGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KQotewot
ICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZM
T0FUX1M4WDI0X1VJTlQ6IHJldHVybiBEWEdJX0ZPUk1BVF9SMzJfRkxPQVRfWDhYMjRfVFlQRUxF
U1M7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QzMl9GTE9BVDogICAgICAgICAgICByZXR1cm4g
RFhHSV9GT1JNQVRfUjMyX1VJTlQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QyNF9VTk9STV9T
OF9VSU5UOiAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjI0X1VOT1JNX1g4X1RZUEVMRVNTOwotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZfVU5PUk06ICAgICAgICAgICAgcmV0dXJuIERYR0lfRk9S
TUFUX1IxNl9VTk9STTsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgICAgICAg
ICAgIHJldHVybiBEWEdJX0ZPUk1BVF9VTktOT1dOOwotICAgIH0KLX0KLQotSFJFU1VMVCBTZXRE
ZWJ1Z05hbWUoSUQzRDExRGV2aWNlQ2hpbGQgKnJlc291cmNlLCBjb25zdCBjaGFyICpuYW1lKQot
ewotI2lmIGRlZmluZWQoX0RFQlVHKQotICAgIHJldHVybiByZXNvdXJjZS0+U2V0UHJpdmF0ZURh
dGEoV0tQRElEX0QzRERlYnVnT2JqZWN0TmFtZSwgc3RybGVuKG5hbWUpLCBuYW1lKTsKLSNlbHNl
Ci0gICAgcmV0dXJuIFNfT0s7Ci0jZW5kaWYKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9yZW5kZXJlcjExX3V0aWxzLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3JlbmRlcmVy
MTFfdXRpbHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJjNDhjMWExMzVhNWQ4
OGE4OWJkNTY4NTY5ZmQ2ZTlkZDY3NzNlZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL3JlbmRlcmVyMTFfdXRpbHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAK
LS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwotCi0vLyByZW5kZXJlcjExX3V0aWxzLmg6IENvbnZlcnNpb24gZnVuY3Rp
b25zIGFuZCBvdGhlciB1dGlsaXR5IHJvdXRpbmVzCi0vLyBzcGVjaWZpYyB0byB0aGUgRDNEMTEg
cmVuZGVyZXIuCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUkVSMTFfVVRJTFNf
SAotI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSRVIxMV9VVElMU19ICi0KLSNpbmNs
dWRlICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgotCi1uYW1lc3BhY2UgZ2xfZDNkMTEKLXsKLQot
RDNEMTFfQkxFTkQgQ29udmVydEJsZW5kRnVuYyhHTGVudW0gZ2xCbGVuZCwgYm9vbCBpc0FscGhh
KTsKLUQzRDExX0JMRU5EX09QIENvbnZlcnRCbGVuZE9wKEdMZW51bSBnbEJsZW5kT3ApOwotVUlO
VDggQ29udmVydENvbG9yTWFzayhib29sIG1hc2tSZWQsIGJvb2wgbWFza0dyZWVuLCBib29sIG1h
c2tCbHVlLCBib29sIG1hc2tBbHBoYSk7Ci0KLUQzRDExX0NVTExfTU9ERSBDb252ZXJ0Q3VsbE1v
ZGUoYm9vbCBjdWxsRW5hYmxlZCwgR0xlbnVtIGN1bGxNb2RlKTsKLQotRDNEMTFfQ09NUEFSSVNP
Tl9GVU5DIENvbnZlcnRDb21wYXJpc29uKEdMZW51bSBjb21wYXJpc29uKTsKLUQzRDExX0RFUFRI
X1dSSVRFX01BU0sgQ29udmVydERlcHRoTWFzayhib29sIGRlcHRoV3JpdGVFbmFibGVkKTsKLVVJ
TlQ4IENvbnZlcnRTdGVuY2lsTWFzayhHTHVpbnQgc3RlbmNpbG1hc2spOwotRDNEMTFfU1RFTkNJ
TF9PUCBDb252ZXJ0U3RlbmNpbE9wKEdMZW51bSBzdGVuY2lsT3ApOwotCi1EM0QxMV9GSUxURVIg
Q29udmVydEZpbHRlcihHTGVudW0gbWluRmlsdGVyLCBHTGVudW0gbWFnRmlsdGVyLCBmbG9hdCBt
YXhBbmlzb3Ryb3B5KTsKLUQzRDExX1RFWFRVUkVfQUREUkVTU19NT0RFIENvbnZlcnRUZXh0dXJl
V3JhcChHTGVudW0gd3JhcCk7Ci1GTE9BVCBDb252ZXJ0TWluTE9EKEdMZW51bSBtaW5GaWx0ZXIs
IHVuc2lnbmVkIGludCBsb2RPZmZzZXQpOwotRkxPQVQgQ29udmVydE1heExPRChHTGVudW0gbWlu
RmlsdGVyLCB1bnNpZ25lZCBpbnQgbG9kT2Zmc2V0KTsKLQotRFhHSV9GT1JNQVQgQ29udmVydFJl
bmRlcmJ1ZmZlckZvcm1hdChHTGVudW0gZm9ybWF0KTsKLURYR0lfRk9STUFUIENvbnZlcnRUZXh0
dXJlRm9ybWF0KEdMZW51bSBmb3JtYXQpOwotfQotCi1uYW1lc3BhY2UgZDNkMTFfZ2wKLXsKLQot
R0xlbnVtIENvbnZlcnRCYWNrQnVmZmVyRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCk7Ci1HTGVu
dW0gQ29udmVydERlcHRoU3RlbmNpbEZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpOwotR0xlbnVt
IENvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLUdMZW51bSBD
b252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCk7Ci0KLX0KLQot
bmFtZXNwYWNlIGQzZDExCi17Ci0KLXN0cnVjdCBQb3NpdGlvblRleENvb3JkVmVydGV4Ci17Ci0g
ICAgZmxvYXQgeCwgeTsKLSAgICBmbG9hdCB1LCB2OwotfTsKLXZvaWQgU2V0UG9zaXRpb25UZXhD
b29yZFZlcnRleChQb3NpdGlvblRleENvb3JkVmVydGV4KiB2ZXJ0ZXgsIGZsb2F0IHgsIGZsb2F0
IHksIGZsb2F0IHUsIGZsb2F0IHYpOwotCi1zdHJ1Y3QgUG9zaXRpb25EZXB0aENvbG9yVmVydGV4
Ci17Ci0gICAgZmxvYXQgeCwgeSwgejsKLSAgICBmbG9hdCByLCBnLCBiLCBhOwotfTsKLXZvaWQg
U2V0UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCogdmVy
dGV4LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgZ2w6OkNvbG9yICZjb2xvcik7Ci0KLXNpemVfdCBDb21wdXRlUGl4ZWxT
aXplQml0cyhEWEdJX0ZPUk1BVCBmb3JtYXQpOwotc2l6ZV90IENvbXB1dGVCbG9ja1NpemVCaXRz
KERYR0lfRk9STUFUIGZvcm1hdCk7Ci0KLWJvb2wgSXNDb21wcmVzc2VkKERYR0lfRk9STUFUIGZv
cm1hdCk7Ci11bnNpZ25lZCBpbnQgR2V0VGV4dHVyZUZvcm1hdERpbWVuc2lvbkFsaWdubWVudChE
WEdJX0ZPUk1BVCBmb3JtYXQpOwotCi1ib29sIElzRGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9S
TUFUIGZvcm1hdCk7Ci1EWEdJX0ZPUk1BVCBHZXREZXB0aFRleHR1cmVGb3JtYXQoRFhHSV9GT1JN
QVQgZm9ybWF0KTsKLURYR0lfRk9STUFUIEdldERlcHRoU2hhZGVyUmVzb3VyY2VGb3JtYXQoRFhH
SV9GT1JNQVQgZm9ybWF0KTsKLQotSFJFU1VMVCBTZXREZWJ1Z05hbWUoSUQzRDExRGV2aWNlQ2hp
bGQgKnJlc291cmNlLCBjb25zdCBjaGFyICpuYW1lKTsKLQotaW5saW5lIGJvb2wgaXNEZXZpY2VM
b3N0RXJyb3IoSFJFU1VMVCBlcnJvckNvZGUpCi17Ci0gICAgc3dpdGNoIChlcnJvckNvZGUpCi0g
ICAgewotICAgICAgY2FzZSBEWEdJX0VSUk9SX0RFVklDRV9IVU5HOgotICAgICAgY2FzZSBEWEdJ
X0VSUk9SX0RFVklDRV9SRU1PVkVEOgotICAgICAgY2FzZSBEWEdJX0VSUk9SX0RFVklDRV9SRVNF
VDoKLSAgICAgIGNhc2UgRFhHSV9FUlJPUl9EUklWRVJfSU5URVJOQUxfRVJST1I6Ci0gICAgICBj
YXNlIERYR0lfRVJST1JfTk9UX0NVUlJFTlRMWV9BVkFJTEFCTEU6Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQot
fQotCi0jZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUkVSMTFfVVRJTFNfSApkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9y
ZW5kZXJlcjlfdXRpbHMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9yZW5kZXJlcjlfdXRpbHMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBkYTc1ZDQ2NWUzY2Y4MDVmODY4YWI2Y2UyNzkzODBkZTJlOWIxYWI3Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXI5X3V0aWxzLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDUwMCArMCwwIEBACi0jaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLS8vIHJlbmRlcmVyOV91dGlscy5jcHA6IENvbnZlcnNpb24gZnVuY3Rpb25z
IGFuZCBvdGhlciB1dGlsaXR5IHJvdXRpbmVzCi0vLyBzcGVjaWZpYyB0byB0aGUgRDNEOSByZW5k
ZXJlci4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9yZW5kZXJlcjlfdXRpbHMuaCIK
LSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29u
dGV4dC5oIgotCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0KLW5hbWVzcGFjZSBnbF9kM2Q5
Ci17Ci0KLUQzRENNUEZVTkMgQ29udmVydENvbXBhcmlzb24oR0xlbnVtIGNvbXBhcmlzb24pCi17
Ci0gICAgRDNEQ01QRlVOQyBkM2RDb21wID0gRDNEQ01QX0FMV0FZUzsKLSAgICBzd2l0Y2ggKGNv
bXBhcmlzb24pCi0gICAgewotICAgICAgY2FzZSBHTF9ORVZFUjogICAgZDNkQ29tcCA9IEQzRENN
UF9ORVZFUjsgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9BTFdBWVM6ICAgZDNkQ29tcCA9
IEQzRENNUF9BTFdBWVM7ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MRVNTOiAgICAgZDNk
Q29tcCA9IEQzRENNUF9MRVNTOyAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MRVFVQUw6
ICAgZDNkQ29tcCA9IEQzRENNUF9MRVNTRVFVQUw7ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9F
UVVBTDogICAgZDNkQ29tcCA9IEQzRENNUF9FUVVBTDsgICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9HUkVBVEVSOiAgZDNkQ29tcCA9IEQzRENNUF9HUkVBVEVSOyAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9HRVFVQUw6ICAgZDNkQ29tcCA9IEQzRENNUF9HUkVBVEVSRVFVQUw7IGJyZWFr
OwotICAgICAgY2FzZSBHTF9OT1RFUVVBTDogZDNkQ29tcCA9IEQzRENNUF9OT1RFUVVBTDsgICAg
IGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gZDNkQ29tcDsKLX0KLQotRDNEQ09MT1IgQ29udmVydENvbG9yKGdsOjpDb2xvciBjb2xvcikK
LXsKLSAgICByZXR1cm4gRDNEQ09MT1JfUkdCQShnbDo6dW5vcm08OD4oY29sb3IucmVkKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oY29sb3IuZ3JlZW4pLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4Pihjb2xvci5ibHVlKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oY29sb3IuYWxwaGEpKTsKLX0KLQotRDNEQkxFTkQg
Q29udmVydEJsZW5kRnVuYyhHTGVudW0gYmxlbmQpCi17Ci0gICAgRDNEQkxFTkQgZDNkQmxlbmQg
PSBEM0RCTEVORF9aRVJPOwotCi0gICAgc3dpdGNoIChibGVuZCkKLSAgICB7Ci0gICAgICBjYXNl
IEdMX1pFUk86ICAgICAgICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9aRVJPOyAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX09ORTogICAgICAgICAgICAgICAgICAgICAg
ZDNkQmxlbmQgPSBEM0RCTEVORF9PTkU7ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X1NSQ19DT0xPUjogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9TUkNDT0xPUjsg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQ09MT1I6ICAgICAgZDNk
QmxlbmQgPSBEM0RCTEVORF9JTlZTUkNDT0xPUjsgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RT
VF9DT0xPUjogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9ERVNUQ09MT1I7ICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQ09MT1I6ICAgICAgZDNkQmxl
bmQgPSBEM0RCTEVORF9JTlZERVNUQ09MT1I7ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NSQ19B
TFBIQTogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9TUkNBTFBIQTsgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQUxQSEE6ICAgICAgZDNkQmxlbmQg
PSBEM0RCTEVORF9JTlZTUkNBTFBIQTsgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RTVF9BTFBI
QTogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9ERVNUQUxQSEE7ICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQUxQSEE6ICAgICAgZDNkQmxlbmQgPSBE
M0RCTEVORF9JTlZERVNUQUxQSEE7ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0NPTlNUQU5UX0NP
TE9SOiAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9CTEVOREZBQ1RPUjsgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUjogZDNkQmxlbmQgPSBEM0RC
TEVORF9JTlZCTEVOREZBQ1RPUjsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0NPTlNUQU5UX0FMUEhB
OiAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9CTEVOREZBQ1RPUjsgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQTogZDNkQmxlbmQgPSBEM0RCTEVO
RF9JTlZCTEVOREZBQ1RPUjsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NSQ19BTFBIQV9TQVRVUkFU
RTogICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9TUkNBTFBIQVNBVDsgICAgYnJlYWs7Ci0gICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBkM2RCbGVuZDsK
LX0KLQotRDNEQkxFTkRPUCBDb252ZXJ0QmxlbmRPcChHTGVudW0gYmxlbmRPcCkKLXsKLSAgICBE
M0RCTEVORE9QIGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX0FERDsKLQotICAgIHN3aXRjaCAoYmxl
bmRPcCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0ZVTkNfQUREOiAgICAgICAgICAgICAgZDNkQmxl
bmRPcCA9IEQzREJMRU5ET1BfQUREOyAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GVU5D
X1NVQlRSQUNUOiAgICAgICAgIGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX1NVQlRSQUNUOyAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUOiBkM2RCbGVuZE9wID0g
RDNEQkxFTkRPUF9SRVZTVUJUUkFDVDsgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOwotICAgIH0KLQotICAgIHJldHVybiBkM2RCbGVuZE9wOwotfQotCi1EM0RTVEVOQ0lMT1Ag
Q29udmVydFN0ZW5jaWxPcChHTGVudW0gc3RlbmNpbE9wKQotewotICAgIEQzRFNURU5DSUxPUCBk
M2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfS0VFUDsKLQotICAgIHN3aXRjaCAoc3RlbmNpbE9w
KQotICAgIHsKLSAgICAgIGNhc2UgR0xfWkVSTzogICAgICBkM2RTdGVuY2lsT3AgPSBEM0RTVEVO
Q0lMT1BfWkVSTzsgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0tFRVA6ICAgICAgZDNkU3RlbmNp
bE9wID0gRDNEU1RFTkNJTE9QX0tFRVA7ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SRVBMQUNF
OiAgIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9SRVBMQUNFOyBicmVhazsKLSAgICAgIGNh
c2UgR0xfSU5DUjogICAgICBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfSU5DUlNBVDsgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX0RFQ1I6ICAgICAgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9Q
X0RFQ1JTQVQ7IGJyZWFrOwotICAgICAgY2FzZSBHTF9JTlZFUlQ6ICAgIGQzZFN0ZW5jaWxPcCA9
IEQzRFNURU5DSUxPUF9JTlZFUlQ7ICBicmVhazsKLSAgICAgIGNhc2UgR0xfSU5DUl9XUkFQOiBk
M2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfSU5DUjsgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X0RFQ1JfV1JBUDogZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0RFQ1I7ICAgIGJyZWFrOwot
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZDNkU3Rl
bmNpbE9wOwotfQotCi1EM0RURVhUVVJFQUREUkVTUyBDb252ZXJ0VGV4dHVyZVdyYXAoR0xlbnVt
IHdyYXApCi17Ci0gICAgRDNEVEVYVFVSRUFERFJFU1MgZDNkV3JhcCA9IEQzRFRBRERSRVNTX1dS
QVA7Ci0KLSAgICBzd2l0Y2ggKHdyYXApCi0gICAgewotICAgICAgY2FzZSBHTF9SRVBFQVQ6ICAg
ICAgICAgICAgZDNkV3JhcCA9IEQzRFRBRERSRVNTX1dSQVA7ICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX0NMQU1QX1RPX0VER0U6ICAgICBkM2RXcmFwID0gRDNEVEFERFJFU1NfQ0xBTVA7ICBicmVh
azsKLSAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQRUFUOiAgIGQzZFdyYXAgPSBEM0RUQUREUkVT
U19NSVJST1I7IGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gZDNkV3JhcDsKLX0KLQotRDNEQ1VMTCBDb252ZXJ0Q3VsbE1vZGUoR0xlbnVt
IGN1bGxGYWNlLCBHTGVudW0gZnJvbnRGYWNlKQotewotICAgIEQzRENVTEwgY3VsbCA9IEQzRENV
TExfQ0NXOwotICAgIHN3aXRjaCAoY3VsbEZhY2UpCi0gICAgewotICAgICAgY2FzZSBHTF9GUk9O
VDoKLSAgICAgICAgY3VsbCA9IChmcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEQ1VMTF9DVyA6IEQz
RENVTExfQ0NXKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JBQ0s6Ci0gICAgICAg
IGN1bGwgPSAoZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRENVTExfQ0NXIDogRDNEQ1VMTF9DVyk7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GUk9OVF9BTkRfQkFDSzoKLSAgICAgICAg
Y3VsbCA9IEQzRENVTExfTk9ORTsgLy8gY3VsbGluZyB3aWxsIGJlIGhhbmRsZWQgZHVyaW5nIGRy
YXcKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0K
LQotICAgIHJldHVybiBjdWxsOwotfQotCi1EM0RDVUJFTUFQX0ZBQ0VTIENvbnZlcnRDdWJlRmFj
ZShHTGVudW0gY3ViZUZhY2UpCi17Ci0gICAgRDNEQ1VCRU1BUF9GQUNFUyBmYWNlID0gRDNEQ1VC
RU1BUF9GQUNFX1BPU0lUSVZFX1g7Ci0KLSAgICBzd2l0Y2ggKGN1YmVGYWNlKQotICAgIHsKLSAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgICAgICBmYWNlID0g
RDNEQ1VCRU1BUF9GQUNFX1BPU0lUSVZFX1g7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQ
X0ZBQ0VfTkVHQVRJVkVfWDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9QT1NJ
VElWRV9ZOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9ZOgotICAgICAgICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX05FR0FUSVZFX1k7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6
Ci0gICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfUE9TSVRJVkVfWjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAg
ZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9ORUdBVElWRV9aOwotICAgICAgICBicmVhazsKLSAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhY2U7Ci19Ci0K
LURXT1JEIENvbnZlcnRDb2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwg
Ym9vbCBhbHBoYSkKLXsKLSAgICByZXR1cm4gKHJlZCAgID8gRDNEQ09MT1JXUklURUVOQUJMRV9S
RUQgICA6IDApIHwKLSAgICAgICAgICAgKGdyZWVuID8gRDNEQ09MT1JXUklURUVOQUJMRV9HUkVF
TiA6IDApIHwKLSAgICAgICAgICAgKGJsdWUgID8gRDNEQ09MT1JXUklURUVOQUJMRV9CTFVFICA6
IDApIHwKLSAgICAgICAgICAgKGFscGhhID8gRDNEQ09MT1JXUklURUVOQUJMRV9BTFBIQSA6IDAp
OwotfQotCi1EM0RURVhUVVJFRklMVEVSVFlQRSBDb252ZXJ0TWFnRmlsdGVyKEdMZW51bSBtYWdG
aWx0ZXIsIGZsb2F0IG1heEFuaXNvdHJvcHkpCi17Ci0gICAgaWYgKG1heEFuaXNvdHJvcHkgPiAx
LjBmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEQzRFRFWEZfQU5JU09UUk9QSUM7Ci0gICAgfQot
Ci0gICAgRDNEVEVYVFVSRUZJTFRFUlRZUEUgZDNkTWFnRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsK
LSAgICBzd2l0Y2ggKG1hZ0ZpbHRlcikKLSAgICB7Ci0gICAgICBjYXNlIEdMX05FQVJFU1Q6IGQz
ZE1hZ0ZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7ICBicmVhazsKLSAgICAgIGNhc2UgR0xfTElORUFS
OiAgZDNkTWFnRmlsdGVyID0gRDNEVEVYRl9MSU5FQVI7IGJyZWFrOwotICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZDNkTWFnRmlsdGVyOwotfQotCi12
b2lkIENvbnZlcnRNaW5GaWx0ZXIoR0xlbnVtIG1pbkZpbHRlciwgRDNEVEVYVFVSRUZJTFRFUlRZ
UEUgKmQzZE1pbkZpbHRlciwgRDNEVEVYVFVSRUZJTFRFUlRZUEUgKmQzZE1pcEZpbHRlciwgZmxv
YXQgbWF4QW5pc290cm9weSkKLXsKLSAgICBzd2l0Y2ggKG1pbkZpbHRlcikKLSAgICB7Ci0gICAg
ICBjYXNlIEdMX05FQVJFU1Q6Ci0gICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX1BPSU5U
OwotICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9OT05FOwotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfTElORUFSOgotICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9M
SU5FQVI7Ci0gICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX05PTkU7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOgotICAgICAgICAqZDNk
TWluRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKLSAgICAgICAgKmQzZE1pcEZpbHRlciA9IEQzRFRF
WEZfUE9JTlQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX05F
QVJFU1Q6Ci0gICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX0xJTkVBUjsKLSAgICAgICAg
KmQzZE1pcEZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI6Ci0gICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RU
RVhGX1BPSU5UOwotICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9MSU5FQVI7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUjoKLSAgICAgICAg
KmQzZE1pbkZpbHRlciA9IEQzRFRFWEZfTElORUFSOwotICAgICAgICAqZDNkTWlwRmlsdGVyID0g
RDNEVEVYRl9MSU5FQVI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAg
KmQzZE1pbkZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7Ci0gICAgICAgICpkM2RNaXBGaWx0ZXIgPSBE
M0RURVhGX05PTkU7Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgaWYgKG1h
eEFuaXNvdHJvcHkgPiAxLjBmKQotICAgIHsKLSAgICAgICAgKmQzZE1pbkZpbHRlciA9IEQzRFRF
WEZfQU5JU09UUk9QSUM7Ci0gICAgfQotfQotCi1EM0RGT1JNQVQgQ29udmVydFJlbmRlcmJ1ZmZl
ckZvcm1hdChHTGVudW0gZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAg
ICAgIGNhc2UgR0xfTk9ORTogICAgICAgICAgICAgICAgIHJldHVybiBEM0RGTVRfTlVMTDsKLSAg
ICAgIGNhc2UgR0xfUkdCQTQ6Ci0gICAgICBjYXNlIEdMX1JHQjVfQTE6Ci0gICAgICBjYXNlIEdM
X1JHQkE4X09FUzogICAgICAgICAgICByZXR1cm4gRDNERk1UX0E4UjhHOEI4OwotICAgICAgY2Fz
ZSBHTF9SR0I1NjU6ICAgICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9SNUc2QjU7Ci0gICAgICBj
YXNlIEdMX1JHQjhfT0VTOiAgICAgICAgICAgICByZXR1cm4gRDNERk1UX1g4UjhHOEI4OwotICAg
ICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRF
WDg6ICAgICAgIAotICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzogcmV0dXJuIEQz
REZNVF9EMjRTODsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgIHJldHVybiBE
M0RGTVRfQThSOEc4Qjg7Ci0gICAgfQotfQotCi1EM0RNVUxUSVNBTVBMRV9UWVBFIEdldE11bHRp
c2FtcGxlVHlwZUZyb21TYW1wbGVzKEdMc2l6ZWkgc2FtcGxlcykKLXsKLSAgICBpZiAoc2FtcGxl
cyA8PSAxKQotICAgICAgICByZXR1cm4gRDNETVVMVElTQU1QTEVfTk9ORTsKLSAgICBlbHNlCi0g
ICAgICAgIHJldHVybiAoRDNETVVMVElTQU1QTEVfVFlQRSlzYW1wbGVzOwotfQotCi19Ci0KLW5h
bWVzcGFjZSBkM2Q5X2dsCi17Ci0KLXVuc2lnbmVkIGludCBHZXRTdGVuY2lsU2l6ZShEM0RGT1JN
QVQgc3RlbmNpbEZvcm1hdCkKLXsKLSAgICBpZiAoc3RlbmNpbEZvcm1hdCA9PSBEM0RGTVRfSU5U
WikKLSAgICB7Ci0gICAgICAgIHJldHVybiA4OwotICAgIH0KLSAgICBzd2l0Y2goc3RlbmNpbEZv
cm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9EMjRGUzg6Ci0gICAgICBjYXNlIEQzREZN
VF9EMjRTODoKLSAgICAgICAgcmV0dXJuIDg7Ci0gICAgICBjYXNlIEQzREZNVF9EMjRYNFM0Ogot
ICAgICAgICByZXR1cm4gNDsKLSAgICAgIGNhc2UgRDNERk1UX0QxNVMxOgotICAgICAgICByZXR1
cm4gMTsKLSAgICAgIGNhc2UgRDNERk1UX0QxNl9MT0NLQUJMRToKLSAgICAgIGNhc2UgRDNERk1U
X0QzMjoKLSAgICAgIGNhc2UgRDNERk1UX0QyNFg4OgotICAgICAgY2FzZSBEM0RGTVRfRDMyRl9M
T0NLQUJMRToKLSAgICAgIGNhc2UgRDNERk1UX0QxNjoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
Ly9jYXNlIEQzREZNVF9EMzJfTE9DS0FCTEU6ICByZXR1cm4gMDsgICAvLyBEaXJlY3RYIDlFeCBv
bmx5Ci0gICAgLy9jYXNlIEQzREZNVF9TOF9MT0NLQUJMRTogICByZXR1cm4gODsgICAvLyBEaXJl
Y3RYIDlFeCBvbmx5Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19
Ci0KLXVuc2lnbmVkIGludCBHZXRBbHBoYVNpemUoRDNERk9STUFUIGNvbG9yRm9ybWF0KQotewot
ICAgIHN3aXRjaCAoY29sb3JGb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2
RzE2UjE2RjoKLSAgICAgICAgcmV0dXJuIDE2OwotICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMy
UjMyRjoKLSAgICAgICAgcmV0dXJuIDMyOwotICAgICAgY2FzZSBEM0RGTVRfQTJSMTBHMTBCMTA6
Ci0gICAgICAgIHJldHVybiAyOwotICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Ci0gICAgICAg
IHJldHVybiA4OwotICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6Ci0gICAgICAgIHJldHVybiAx
OwotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9SNUc2QjU6
Ci0gICAgICAgIHJldHVybiAwOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotfQotCi1HTHNpemVpIEdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKEQzRE1VTFRJ
U0FNUExFX1RZUEUgdHlwZSkKLXsKLSAgICBpZiAodHlwZSA9PSBEM0RNVUxUSVNBTVBMRV9OT05N
QVNLQUJMRSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gdHlw
ZTsKLX0KLQotYm9vbCBJc0Zvcm1hdENoYW5uZWxFcXVpdmFsZW50KEQzREZPUk1BVCBkM2Rmb3Jt
YXQsIEdMZW51bSBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChkM2Rmb3JtYXQpCi0gICAgewotICAg
ICAgY2FzZSBEM0RGTVRfTDg6Ci0gICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX0xVTUlOQU5D
RSk7Ci0gICAgICBjYXNlIEQzREZNVF9BOEw4OgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBH
TF9MVU1JTkFOQ0VfQUxQSEEpOwotICAgICAgY2FzZSBEM0RGTVRfRFhUMToKLSAgICAgICAgcmV0
dXJuIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQgfHwgZm9ybWF0
ID09IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQpOwotICAgICAgY2FzZSBEM0RGTVRf
RFhUMzoKLSAgICAgICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENf
RFhUM19BTkdMRSk7Ci0gICAgICBjYXNlIEQzREZNVF9EWFQ1OgotICAgICAgICByZXR1cm4gKGZv
cm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFKTsKLSAgICAgIGNhc2Ug
RDNERk1UX0E4UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKLSAgICAg
IGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6Ci0gICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdM
X1JHQkEgfHwgZm9ybWF0ID09IEdMX0JHUkFfRVhUKTsKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhH
OEI4OgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9SR0IpOwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgaWYgKGQzZGZvcm1hdCA9PSBEM0RGTVRfSU5UWiAmJiBnbDo6SXNEZXB0aFRleHR1
cmUoZm9ybWF0KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotfQotCi1HTGVudW0gQ29udmVydEJhY2tCdWZmZXJGb3JtYXQoRDNERk9STUFU
IGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZN
VF9BNFI0RzRCNDogcmV0dXJuIEdMX1JHQkE0OwotICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6
IHJldHVybiBHTF9SR0JBOF9PRVM7Ci0gICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNTogcmV0dXJu
IEdMX1JHQjVfQTE7Ci0gICAgICBjYXNlIEQzREZNVF9SNUc2QjU6ICAgcmV0dXJuIEdMX1JHQjU2
NTsKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OiByZXR1cm4gR0xfUkdCOF9PRVM7Ci0gICAg
ICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBH
TF9SR0JBNDsKLX0KLQotR0xlbnVtIENvbnZlcnREZXB0aFN0ZW5jaWxGb3JtYXQoRDNERk9STUFU
IGZvcm1hdCkKLXsKLSAgICBpZiAoZm9ybWF0ID09IEQzREZNVF9JTlRaKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotICAgIH0KLSAgICBzd2l0Y2ggKGZv
cm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9EMTY6Ci0gICAgICBjYXNlIEQzREZNVF9E
MjRYODoKLSAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2OwotICAgICAgY2FzZSBE
M0RGTVRfRDI0Uzg6Ci0gICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLSAg
ICAgIGNhc2UgRDNERk1UX1VOS05PV046Ci0gICAgICAgIHJldHVybiBHTF9OT05FOwotICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gR0xf
REVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci19Ci0KLUdMZW51bSBDb252ZXJ0UmVuZGVyVGFyZ2V0Rm9y
bWF0KEQzREZPUk1BVCBmb3JtYXQpCi17Ci0gICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfSU5UWikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLSAgICB9Ci0g
ICAgCi0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfQTRSNEc0
QjQ6IHJldHVybiBHTF9SR0JBNDsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OiByZXR1cm4g
R0xfUkdCQThfT0VTOwotICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6IHJldHVybiBHTF9SR0I1
X0ExOwotICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OiAgIHJldHVybiBHTF9SR0I1NjU7Ci0gICAg
ICBjYXNlIEQzREZNVF9YOFI4RzhCODogcmV0dXJuIEdMX1JHQjhfT0VTOwotICAgICAgY2FzZSBE
M0RGTVRfRDE2OgotICAgICAgY2FzZSBEM0RGTVRfRDI0WDg6Ci0gICAgICAgIHJldHVybiBHTF9E
RVBUSF9DT01QT05FTlQxNjsKLSAgICAgIGNhc2UgRDNERk1UX0QyNFM4OgotICAgICAgICByZXR1
cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgICBjYXNlIEQzREZNVF9VTktOT1dOOgot
ICAgICAgICByZXR1cm4gR0xfTk9ORTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hB
QkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX1JHQkE0OwotfQotCi1HTGVudW0gR2V0RXF1
aXZhbGVudEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KQotewotICAgIGlmIChmb3JtYXQgPT0gRDNE
Rk1UX0lOVFopCi0gICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLSAgICBp
ZiAoZm9ybWF0ID09IEQzREZNVF9OVUxMKQotICAgICAgICByZXR1cm4gR0xfTk9ORTsKLQotICAg
IHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0E0UjRHNEI0OiAgICAg
ICAgICAgICByZXR1cm4gR0xfUkdCQTQ7Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODogICAg
ICAgICAgICAgcmV0dXJuIEdMX1JHQkE4X09FUzsKLSAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1
OiAgICAgICAgICAgICByZXR1cm4gR0xfUkdCNV9BMTsKLSAgICAgIGNhc2UgRDNERk1UX1I1RzZC
NTogICAgICAgICAgICAgICByZXR1cm4gR0xfUkdCNTY1OwotICAgICAgY2FzZSBEM0RGTVRfWDhS
OEc4Qjg6ICAgICAgICAgICAgIHJldHVybiBHTF9SR0I4X09FUzsKLSAgICAgIGNhc2UgRDNERk1U
X0QxNjogICAgICAgICAgICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UMTY7Ci0gICAg
ICBjYXNlIEQzREZNVF9EMjRTODogICAgICAgICAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RF
TkNJTDhfT0VTOwotICAgICAgY2FzZSBEM0RGTVRfVU5LTk9XTjogICAgICAgICAgICAgIHJldHVy
biBHTF9OT05FOwotICAgICAgY2FzZSBEM0RGTVRfRFhUMTogICAgICAgICAgICAgICAgIHJldHVy
biBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDsKLSAgICAgIGNhc2UgRDNERk1UX0RY
VDM6ICAgICAgICAgICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19B
TkdMRTsKLSAgICAgIGNhc2UgRDNERk1UX0RYVDU6ICAgICAgICAgICAgICAgICByZXR1cm4gR0xf
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRTsKLSAgICAgIGNhc2UgRDNERk1UX0EzMkIz
MkczMlIzMkY6ICAgICAgICByZXR1cm4gR0xfUkdCQTMyRl9FWFQ7Ci0gICAgICBjYXNlIEQzREZN
VF9BMTZCMTZHMTZSMTZGOiAgICAgICAgcmV0dXJuIEdMX1JHQkExNkZfRVhUOwotICAgICAgY2Fz
ZSBEM0RGTVRfTDg6ICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9MVU1JTkFOQ0U4X0VYVDsK
LSAgICAgIGNhc2UgRDNERk1UX0E4TDg6ICAgICAgICAgICAgICAgICByZXR1cm4gR0xfTFVNSU5B
TkNFOF9BTFBIQThfRVhUOwotICAgICAgZGVmYXVsdDogICAgICAgICAgICAgIFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgIHJldHVybiBHTF9OT05FOwotICAgIH0KLX0KLQotfQotCi1uYW1lc3BhY2Ug
ZDNkOQotewotCi1ib29sIElzQ29tcHJlc3NlZEZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1h
dCkKLXsKLSAgICBzd2l0Y2goc3VyZmFjZUZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZN
VF9EWFQxOgotICAgICAgY2FzZSBEM0RGTVRfRFhUMjoKLSAgICAgIGNhc2UgRDNERk1UX0RYVDM6
Ci0gICAgICBjYXNlIEQzREZNVF9EWFQ0OgotICAgICAgY2FzZSBEM0RGTVRfRFhUNToKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotfQotCi1zaXplX3QgQ29tcHV0ZVJvd1NpemUoRDNERk9STUFUIGZvcm1hdCwgdW5zaWdu
ZWQgaW50IHdpZHRoKQotewotICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lOVFopCi0gICAgewot
ICAgICAgICByZXR1cm4gNCAqIHdpZHRoOwotICAgIH0KLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAg
ICB7Ci0gICAgICBjYXNlIEQzREZNVF9MODoKLSAgICAgICAgICByZXR1cm4gMSAqIHdpZHRoOwot
ICAgICAgY2FzZSBEM0RGTVRfQThMODoKLSAgICAgICAgICByZXR1cm4gMiAqIHdpZHRoOwotICAg
ICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAg
ICAgICAgcmV0dXJuIDQgKiB3aWR0aDsKLSAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6
Ci0gICAgICAgIHJldHVybiA4ICogd2lkdGg7Ci0gICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJS
MzJGOgotICAgICAgICByZXR1cm4gMTYgKiB3aWR0aDsKLSAgICAgIGNhc2UgRDNERk1UX0RYVDE6
Ci0gICAgICAgIHJldHVybiA4ICogKCh3aWR0aCArIDMpIC8gNCk7Ci0gICAgICBjYXNlIEQzREZN
VF9EWFQzOgotICAgICAgY2FzZSBEM0RGTVRfRFhUNToKLSAgICAgICAgcmV0dXJuIDE2ICogKCh3
aWR0aCArIDMpIC8gNCk7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXI5X3V0aWxzLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3JlbmRlcmVyOV91
dGlscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjZjZGYxZWE2NTY2ZjkxMGE5
NmVlMjUxMTRiN2M0OGVjODM5NDVlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvcmVuZGVyZXI5X3V0aWxzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwotCi0vLyByZW5kZXJlcjlfdXRpbHMuaDogQ29udmVyc2lvbiBmdW5jdGlv
bnMgYW5kIG90aGVyIHV0aWxpdHkgcm91dGluZXMgCi0vLyBzcGVjaWZpYyB0byB0aGUgRDNEOSBy
ZW5kZXJlcgotCi0jaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjlfVVRJTFNfSAot
I2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSRVI5X1VUSUxTX0gKLQotI2luY2x1ZGUg
ImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKLQotY29uc3QgRDNERk9STUFUIEQzREZNVF9JTlRaID0g
KChEM0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ0knLCdOJywnVCcsJ1onKSkpOwotY29uc3QgRDNERk9S
TUFUIEQzREZNVF9OVUxMID0gKChEM0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ04nLCdVJywnTCcsJ0wn
KSkpOwotCi1uYW1lc3BhY2UgZ2xfZDNkOQotewotCi1EM0RDTVBGVU5DIENvbnZlcnRDb21wYXJp
c29uKEdMZW51bSBjb21wYXJpc29uKTsKLUQzRENPTE9SIENvbnZlcnRDb2xvcihnbDo6Q29sb3Ig
Y29sb3IpOwotRDNEQkxFTkQgQ29udmVydEJsZW5kRnVuYyhHTGVudW0gYmxlbmQpOwotRDNEQkxF
TkRPUCBDb252ZXJ0QmxlbmRPcChHTGVudW0gYmxlbmRPcCk7Ci1EM0RTVEVOQ0lMT1AgQ29udmVy
dFN0ZW5jaWxPcChHTGVudW0gc3RlbmNpbE9wKTsKLUQzRFRFWFRVUkVBRERSRVNTIENvbnZlcnRU
ZXh0dXJlV3JhcChHTGVudW0gd3JhcCk7Ci1EM0RDVUxMIENvbnZlcnRDdWxsTW9kZShHTGVudW0g
Y3VsbEZhY2UsIEdMZW51bSBmcm9udEZhY2UpOwotRDNEQ1VCRU1BUF9GQUNFUyBDb252ZXJ0Q3Vi
ZUZhY2UoR0xlbnVtIGN1YmVGYWNlKTsKLURXT1JEIENvbnZlcnRDb2xvck1hc2soYm9vbCByZWQs
IGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSk7Ci1EM0RURVhUVVJFRklMVEVSVFlQ
RSBDb252ZXJ0TWFnRmlsdGVyKEdMZW51bSBtYWdGaWx0ZXIsIGZsb2F0IG1heEFuaXNvdHJvcHkp
Owotdm9pZCBDb252ZXJ0TWluRmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIsIEQzRFRFWFRVUkVGSUxU
RVJUWVBFICpkM2RNaW5GaWx0ZXIsIEQzRFRFWFRVUkVGSUxURVJUWVBFICpkM2RNaXBGaWx0ZXIs
IGZsb2F0IG1heEFuaXNvdHJvcHkpOwotRDNERk9STUFUIENvbnZlcnRSZW5kZXJidWZmZXJGb3Jt
YXQoR0xlbnVtIGZvcm1hdCk7Ci1EM0RNVUxUSVNBTVBMRV9UWVBFIEdldE11bHRpc2FtcGxlVHlw
ZUZyb21TYW1wbGVzKEdMc2l6ZWkgc2FtcGxlcyk7Ci0KLX0KLQotbmFtZXNwYWNlIGQzZDlfZ2wK
LXsKLQotR0x1aW50IEdldEFscGhhU2l6ZShEM0RGT1JNQVQgY29sb3JGb3JtYXQpOwotR0x1aW50
IEdldFN0ZW5jaWxTaXplKEQzREZPUk1BVCBzdGVuY2lsRm9ybWF0KTsKLQotR0xzaXplaSBHZXRT
YW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShEM0RNVUxUSVNBTVBMRV9UWVBFIHR5cGUpOwotCi1i
b29sIElzRm9ybWF0Q2hhbm5lbEVxdWl2YWxlbnQoRDNERk9STUFUIGQzZGZvcm1hdCwgR0xlbnVt
IGZvcm1hdCk7Ci1HTGVudW0gQ29udmVydEJhY2tCdWZmZXJGb3JtYXQoRDNERk9STUFUIGZvcm1h
dCk7Ci1HTGVudW0gQ29udmVydERlcHRoU3RlbmNpbEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KTsK
LUdMZW51bSBDb252ZXJ0UmVuZGVyVGFyZ2V0Rm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpOwotR0xl
bnVtIEdldEVxdWl2YWxlbnRGb3JtYXQoRDNERk9STUFUIGZvcm1hdCk7Ci0KLX0KLQotbmFtZXNw
YWNlIGQzZDkKLXsKLWJvb2wgSXNDb21wcmVzc2VkRm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpOwot
c2l6ZV90IENvbXB1dGVSb3dTaXplKEQzREZPUk1BVCBmb3JtYXQsIHVuc2lnbmVkIGludCB3aWR0
aCk7Ci0KLWlubGluZSBib29sIGlzRGV2aWNlTG9zdEVycm9yKEhSRVNVTFQgZXJyb3JDb2RlKQot
ewotICAgIHN3aXRjaCAoZXJyb3JDb2RlKQotICAgIHsKLSAgICAgIGNhc2UgRDNERVJSX0RSSVZF
UklOVEVSTkFMRVJST1I6Ci0gICAgICBjYXNlIEQzREVSUl9ERVZJQ0VMT1NUOgotICAgICAgY2Fz
ZSBEM0RFUlJfREVWSUNFSFVORzoKLSAgICAgIGNhc2UgRDNERVJSX0RFVklDRVJFTU9WRUQ6Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLX0KLQotfQotCi0jZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUkVS
OV9VVElMU19ICmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL3NoYWRlcnMvQmxpdC5wcyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9CbGl0LnBzCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBkY2IzYmQwZTc2YmE5MmEyOGU3NzY4ODhjNjI5MDRjMGMzZjA1ZjNjLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9CbGl0LnBzCisrKyAvZGV2
L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLXNhbXBsZXIyRCB0ZXggOiBz
MDsKLQotdW5pZm9ybSBmbG9hdDQgbW9kZSA6IGMwOwotCi0vLyBQYXNzdGhyb3VnaCBQaXhlbCBT
aGFkZXIKLS8vIE91dHB1dHMgdGV4dHVyZSAwIHNhbXBsZWQgYXQgdGV4Y29vcmQgMC4KLWZsb2F0
NCBwYXNzdGhyb3VnaHBzKGZsb2F0NCB0ZXhjb29yZCA6IFRFWENPT1JEMCkgOiBDT0xPUgotewot
CXJldHVybiB0ZXgyRCh0ZXgsIHRleGNvb3JkLnh5KTsKLX07Ci0KLS8vIEx1bWluYW5jZSBDb252
ZXJzaW9uIFBpeGVsIFNoYWRlcgotLy8gT3V0cHV0cyBzYW1wbGUodGV4MCwgdGMwKS5ycnJhLgot
Ly8gRm9yIExBIG91dHB1dCAocGFzcyBBKSBzZXQgQzAuWCA9IDEsIEMwLlkgPSAwLgotLy8gRm9y
IEwgb3V0cHV0IChBID0gMSkgc2V0IEMwLlggPSAwLCBDMC5ZID0gMS4KLWZsb2F0NCBsdW1pbmFu
Y2VwcyhmbG9hdDQgdGV4Y29vcmQgOiBURVhDT09SRDApIDogQ09MT1IKLXsKLQlmbG9hdDQgdG1w
ID0gdGV4MkQodGV4LCB0ZXhjb29yZC54eSk7Ci0JdG1wLncgPSB0bXAudyAqIG1vZGUueCArIG1v
ZGUueTsKLQlyZXR1cm4gdG1wLnh4eHc7Ci19OwotCi0vLyBSR0IvQSBDb21wb25lbnQgTWFzayBQ
aXhlbCBTaGFkZXIKLS8vIE91dHB1dHMgc2FtcGxlKHRleDAsIHRjMCkgd2l0aCBvcHRpb25zIHRv
IGZvcmNlIFJHQiA9IDAgYW5kL29yIEEgPSAxLgotLy8gVG8gZm9yY2UgUkdCID0gMCwgc2V0IEMw
LlggPSAwLCBvdGhlcndpc2UgQzAuWCA9IDEuCi0vLyBUbyBmb3JjZSBBID0gMSwgc2V0IEMwLlog
PSAwLCBDMC5XID0gMSwgb3RoZXJ3aXNlIEMwLlogPSAxLCBDMC5XID0gMC4KLWZsb2F0NCBjb21w
b25lbnRtYXNrcHMoZmxvYXQ0IHRleGNvb3JkIDogVEVYQ09PUkQwKSA6IENPTE9SCi17Ci0JZmxv
YXQ0IHRtcCA9IHRleDJEKHRleCwgdGV4Y29vcmQueHkpOwotCXRtcC54eXogPSB0bXAueHl6ICog
bW9kZS54OwotCXRtcC53ID0gdG1wLncgKiBtb2RlLnogKyBtb2RlLnc7Ci0JcmV0dXJuIHRtcDsK
LX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL3NoYWRlcnMvQmxpdC52cyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvc2hhZGVycy9CbGl0LnZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAzYTM2OTgwYjkzNWI1MGZhOWFlMGI2YjBmNGE1MGUzOTM5ZDBkNTExLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9CbGl0LnZzCisrKyAvZGV2L251bGwK
QEAgLTEsNDMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLXN0cnVjdCBWU19PVVRQVVQKLXsKLSAg
ICBmbG9hdDQgcG9zaXRpb24gOiBQT1NJVElPTjsKLSAgICBmbG9hdDQgdGV4Y29vcmQgOiBURVhD
T09SRDA7Ci19OwotCi11bmlmb3JtIGZsb2F0NCBoYWxmUGl4ZWxTaXplIDogYzA7Ci0KLS8vIFN0
YW5kYXJkIFZlcnRleCBTaGFkZXIKLS8vIElucHV0IDAgaXMgdGhlIGhvbW9nZW5vdXMgcG9zaXRp
b24uCi0vLyBPdXRwdXRzIHRoZSBob21vZ2Vub3VzIHBvc2l0aW9uIGFzLWlzLgotLy8gT3V0cHV0
cyBhIHRleCBjb29yZCB3aXRoICgwLDApIGluIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUg
c2NyZWVuIGFuZCAoMSwxKSBpbiB0aGUgYm90dG9tIHJpZ2h0LgotLy8gQzAuWCBtdXN0IGJlIG5l
Z2F0aXZlIGhhbGYtcGl4ZWwgd2lkdGgsIEMwLlkgbXVzdCBiZSBoYWxmLXBpeGVsIGhlaWdodC4g
QzAuWlcgbXVzdCBiZSAwLgotVlNfT1VUUFVUIHN0YW5kYXJkdnMoaW4gZmxvYXQ0IHBvc2l0aW9u
IDogUE9TSVRJT04pCi17Ci0gICAgVlNfT1VUUFVUIE91dDsKLQotICAgIE91dC5wb3NpdGlvbiA9
IHBvc2l0aW9uICsgaGFsZlBpeGVsU2l6ZTsKLSAgICBPdXQudGV4Y29vcmQgPSBwb3NpdGlvbiAq
IGZsb2F0NCgwLjUsIC0wLjUsIDEuMCwgMS4wKSArIGZsb2F0NCgwLjUsIDAuNSwgMCwgMCk7Ci0K
LSAgICByZXR1cm4gT3V0OwotfTsKLQotLy8gRmxpcCBZIFZlcnRleCBTaGFkZXIKLS8vIElucHV0
IDAgaXMgdGhlIGhvbW9nZW5vdXMgcG9zaXRpb24uCi0vLyBPdXRwdXRzIHRoZSBob21vZ2Vub3Vz
IHBvc2l0aW9uIGFzLWlzLgotLy8gT3V0cHV0cyBhIHRleCBjb29yZCB3aXRoICgwLDEpIGluIHRo
ZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgc2NyZWVuIGFuZCAoMSwwKSBpbiB0aGUgYm90dG9t
IHJpZ2h0LgotLy8gQzAuWFkgbXVzdCBiZSB0aGUgaGFsZi1waXhlbCB3aWR0aCBhbmQgaGVpZ2h0
LiBDMC5aVyBtdXN0IGJlIDAuCi1WU19PVVRQVVQgZmxpcHl2cyhpbiBmbG9hdDQgcG9zaXRpb24g
OiBQT1NJVElPTikKLXsKLSAgICBWU19PVVRQVVQgT3V0OwotCi0gICAgT3V0LnBvc2l0aW9uID0g
cG9zaXRpb24gKyBoYWxmUGl4ZWxTaXplOwotICAgIE91dC50ZXhjb29yZCA9IHBvc2l0aW9uICog
ZmxvYXQ0KDAuNSwgMC41LCAxLjAsIDEuMCkgKyBmbG9hdDQoMC41LCAwLjUsIDAsIDApOwotCi0g
ICAgcmV0dXJuIE91dDsKLX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvQ2xlYXIxMS5obHNsIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL0NsZWFyMTEuaGxzbApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQyYWM2OTliNjZhMjIzOWFkYmY1MjUxZmFh
ZjNiM2U0YzNmZWM1Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRl
cnMvQ2xlYXIxMS5obHNsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotdm9pZCBWU19D
bGVhciggaW4gZmxvYXQzICBpblBvc2l0aW9uIDogICAgUE9TSVRJT04sICBpbiBmbG9hdDQgIGlu
Q29sb3IgOiBDT0xPUiwKLSAgICAgICAgICAgICAgb3V0IGZsb2F0NCBvdXRQb3NpdGlvbiA6IFNW
X1BPU0lUSU9OLCBvdXQgZmxvYXQ0IG91dENvbG9yIDogQ09MT1IpCi17Ci0gICAgb3V0UG9zaXRp
b24gPSBmbG9hdDQoaW5Qb3NpdGlvbiwgMS4wZik7Ci0gICAgb3V0Q29sb3IgPSBpbkNvbG9yOwot
fQotCi0vLyBBc3N1bWUgd2UgYXJlIGluIFNNNCssIHdoaWNoIGhhcyA4IGNvbG9yIG91dHB1dHMK
LXN0cnVjdCBQU19PdXRwdXRNdWx0aXBsZQotewotCWZsb2F0NCBjb2xvcjAgOiBTVl9UQVJHRVQw
OwotCWZsb2F0NCBjb2xvcjEgOiBTVl9UQVJHRVQxOwotCWZsb2F0NCBjb2xvcjIgOiBTVl9UQVJH
RVQyOwotCWZsb2F0NCBjb2xvcjMgOiBTVl9UQVJHRVQzOwotCWZsb2F0NCBjb2xvcjQgOiBTVl9U
QVJHRVQ0OwotCWZsb2F0NCBjb2xvcjUgOiBTVl9UQVJHRVQ1OwotCWZsb2F0NCBjb2xvcjYgOiBT
Vl9UQVJHRVQ2OwotCWZsb2F0NCBjb2xvcjcgOiBTVl9UQVJHRVQ3OwotfTsKLQotUFNfT3V0cHV0
TXVsdGlwbGUgUFNfQ2xlYXJNdWx0aXBsZShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lU
SU9OLCBpbiBmbG9hdDQgaW5Db2xvciA6IENPTE9SKQotewotCVBTX091dHB1dE11bHRpcGxlIG91
dENvbG9yOwotCW91dENvbG9yLmNvbG9yMCA9IGluQ29sb3I7Ci0Jb3V0Q29sb3IuY29sb3IxID0g
aW5Db2xvcjsKLQlvdXRDb2xvci5jb2xvcjIgPSBpbkNvbG9yOwotCW91dENvbG9yLmNvbG9yMyA9
IGluQ29sb3I7Ci0Jb3V0Q29sb3IuY29sb3I0ID0gaW5Db2xvcjsKLQlvdXRDb2xvci5jb2xvcjUg
PSBpbkNvbG9yOwotCW91dENvbG9yLmNvbG9yNiA9IGluQ29sb3I7Ci0Jb3V0Q29sb3IuY29sb3I3
ID0gaW5Db2xvcjsKLQlyZXR1cm4gb3V0Q29sb3I7Ci19Ci0KLWZsb2F0NCBQU19DbGVhclNpbmds
ZShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1Bvc2l0aW9uLCBpbiBmbG9hdDQgaW5Db2xvciA6
IENPTE9SKSA6IFNWX1RhcmdldDAKLXsKLQlyZXR1cm4gaW5Db2xvcjsKLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9Q
YXNzdGhyb3VnaDExLmhsc2wgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL3NoYWRlcnMvUGFzc3Rocm91Z2gxMS5obHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA0M2I3ODAxZWZjMWZlZjZlMjM5MTgwMDY3ZGQwMjM2OTk4NTViOWEzLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9QYXNzdGhyb3VnaDExLmhs
c2wKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi1UZXh0dXJlMkQgVGV4dHVyZSA6IHJl
Z2lzdGVyKHQwKTsKLVNhbXBsZXJTdGF0ZSBTYW1wbGVyIDogcmVnaXN0ZXIoczApOwotCi12b2lk
IFZTX1Bhc3N0aHJvdWdoKCBpbiBmbG9hdDIgIGluUG9zaXRpb24gOiAgICBQT1NJVElPTiwgIGlu
IGZsb2F0MiAgaW5UZXhDb29yZCA6IFRFWENPT1JEMCwKLSAgICAgICAgICAgICAgICAgICAgb3V0
IGZsb2F0NCBvdXRQb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBvdXQgZmxvYXQyIG91dFRleENvb3Jk
IDogVEVYQ09PUkQwKQotewotICAgIG91dFBvc2l0aW9uID0gZmxvYXQ0KGluUG9zaXRpb24sIDAu
MGYsIDEuMGYpOwotICAgIG91dFRleENvb3JkID0gaW5UZXhDb29yZDsKLX0KLQotZmxvYXQ0IFBT
X1Bhc3N0aHJvdWdoUkdCQShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBm
bG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCi17Ci0gICAgcmV0dXJu
IFRleHR1cmUuU2FtcGxlKFNhbXBsZXIsIGluVGV4Q29vcmQpLnJnYmE7Ci19Ci0KLWZsb2F0NCBQ
U19QYXNzdGhyb3VnaFJHQihpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBm
bG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCi17Ci0gICAgcmV0dXJu
IGZsb2F0NChUZXh0dXJlLlNhbXBsZShTYW1wbGVyLCBpblRleENvb3JkKS5yZ2IsIDEuMGYpOwot
fQotCi1mbG9hdDQgUFNfUGFzc3Rocm91Z2hMdW0oaW4gZmxvYXQ0IGluUG9zaXRpb24gOiBTVl9Q
T1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDApIDogU1ZfVEFSR0VUMAot
ewotICAgIHJldHVybiBmbG9hdDQoVGV4dHVyZS5TYW1wbGUoU2FtcGxlciwgaW5UZXhDb29yZCku
cnJyLCAxLjBmKTsKLX0KLQotZmxvYXQ0IFBTX1Bhc3N0aHJvdWdoTHVtQWxwaGEoaW4gZmxvYXQ0
IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09S
RDApIDogU1ZfVEFSR0VUMAotewotICAgIHJldHVybiBUZXh0dXJlLlNhbXBsZShTYW1wbGVyLCBp
blRleENvb3JkKS5ycnJhOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyMTF2cy5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBp
bGVkL2NsZWFyMTF2cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YmM3NDMxMjZl
ZDA2YzhmNjc1OGUxMGU1ZDE3NzIwMTQ5NWM5NmRiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9jbGVhcjExdnMuaAorKysgL2Rldi9udWxsCkBA
IC0xLDEzMSArMCwwIEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAo
UikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0DQotLy8NCi0vLw0KLS8vLw0K
LS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAg
SW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlICBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0gLS0t
LS0tDQotLy8gUE9TSVRJT04gICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAwICAgICBO
T05FICAgZmxvYXQgICB4eXogDQotLy8gQ09MT1IgICAgICAgICAgICAgICAgICAgIDAgICB4eXp3
ICAgICAgICAxICAgICBOT05FICAgZmxvYXQgICB4eXp3DQotLy8NCi0vLw0KLS8vIE91dHB1dCBz
aWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVn
aXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAt
LS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJ
VElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgICBmbG9hdCAgIHh5
encNCi0vLyBDT0xPUiAgICAgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDEgICAgIE5P
TkUgICBmbG9hdCAgIHh5encNCi0vLw0KLXZzXzRfMA0KLWRjbF9pbnB1dCB2MC54eXoNCi1kY2xf
aW5wdXQgdjEueHl6dw0KLWRjbF9vdXRwdXRfc2l2IG8wLnh5encsIHBvc2l0aW9uDQotZGNsX291
dHB1dCBvMS54eXp3DQotbW92IG8wLnh5eiwgdjAueHl6eA0KLW1vdiBvMC53LCBsKDEuMDAwMDAw
KQ0KLW1vdiBvMS54eXp3LCB2MS54eXp3DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgNCBpbnN0
cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1ZTX0NsZWFyW10g
PQ0KLXsNCi0gICAgIDY4LCAgODgsICA2NiwgIDY3LCAgOTcsICAgNSwgDQotICAgICAxMywgMTYz
LCAxNjAsIDI1NCwgIDk1LCAxMjcsIA0KLSAgICAgMzAsIDE5NCwgMTIxLCAxNDQsIDIzNiwgMTg1
LCANCi0gICAgIDU5LCAgMjksICAgMSwgICAwLCAgIDAsICAgMCwgDQotICAgICA0OCwgICAyLCAg
IDAsICAgMCwgICA1LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDUyLCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgMTQwLCAgIDAsICAgMCwgICAwLCAyMjAsICAgMCwgDQotICAgICAgMCwgICAwLCAgNDgs
ICAgMSwgICAwLCAgIDAsIA0KLSAgICAxODAsICAgMSwgICAwLCAgIDAsICA4MiwgIDY4LCANCi0g
ICAgIDY5LCAgNzAsICA4MCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAg
IDI4LCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgDQotICAgIDI1NCwgMjU1LCAgIDAsICAgMSwg
ICAwLCAgIDAsIA0KLSAgICAgMjgsICAgMCwgICAwLCAgIDAsICA3NywgMTA1LCANCi0gICAgIDk5
LCAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgDQotICAgIDExNiwgIDMyLCAgNDAsICA4MiwgIDQx
LCAgMzIsIA0KLSAgICAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCANCi0gICAgMTA0LCAg
OTcsIDEwMCwgMTAxLCAxMTQsICAzMiwgDQotICAgICA2NywgMTExLCAxMDksIDExMiwgMTA1LCAx
MDgsIA0KLSAgICAxMDEsIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCANCi0gICAgIDQ4LCAgNDYs
ICA1NywgIDUwLCAgNDgsICA0OCwgDQotICAgICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIs
IA0KLSAgICAgIDAsIDE3MSwgIDczLCAgODMsICA3MSwgIDc4LCANCi0gICAgIDcyLCAgIDAsICAg
MCwgICAwLCAgIDIsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsIA0K
LSAgICAgNTYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQotICAgICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgICA3LCAgIDcsICAgMCwgICAwLCANCi0gICAgIDY1LCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
IDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICAxNSwgIDE1LCAg
IDAsICAgMCwgDQotICAgICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsIA0KLSAgICAgNzks
ICA3OCwgICAwLCAgNjcsICA3OSwgIDc2LCANCi0gICAgIDc5LCAgODIsICAgMCwgMTcxLCAgNzks
ICA4MywgDQotICAgICA3MSwgIDc4LCAgNzYsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDIsICAg
MCwgICAwLCAgIDAsICAgOCwgICAwLCANCi0gICAgICAwLCAgIDAsICA1NiwgICAwLCAgIDAsICAg
MCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
ICAzLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgMTUsICAgMCwg
DQotICAgICAgMCwgICAwLCAgNjgsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgDQot
ICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDE1LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDgzLCAg
ODYsICA5NSwgIDgwLCANCi0gICAgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgDQotICAg
ICA3OCwgICAwLCAgNjcsICA3OSwgIDc2LCAgNzksIA0KLSAgICAgODIsICAgMCwgMTcxLCAxNzEs
ICA4MywgIDcyLCANCi0gICAgIDY4LCAgODIsIDEyNCwgICAwLCAgIDAsICAgMCwgDQotICAgICA2
NCwgICAwLCAgIDEsICAgMCwgIDMxLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDk1LCAgIDAsICAg
MCwgICAzLCANCi0gICAgMTE0LCAgMTYsICAxNiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwg
ICAwLCAgOTUsICAgMCwgICAwLCAgIDMsIA0KLSAgICAyNDIsICAxNiwgIDE2LCAgIDAsICAgMSwg
ICAwLCANCi0gICAgICAwLCAgIDAsIDEwMywgICAwLCAgIDAsICAgNCwgDQotICAgIDI0MiwgIDMy
LCAgMTYsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAw
LCANCi0gICAgMTAxLCAgIDAsICAgMCwgICAzLCAyNDIsICAzMiwgDQotICAgICAxNiwgICAwLCAg
IDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgNTQsICAgMCwgICAwLCAgIDUsIDExNCwgIDMyLCAN
Ci0gICAgIDE2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICA3MCwgIDE4LCAgMTYs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDU0LCAgIDAsICAgMCwgICA1LCANCi0g
ICAgMTMwLCAgMzIsICAxNiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDEsICA2
NCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgMTI4LCAgNjMsICA1NCwgICAwLCANCi0gICAg
ICAwLCAgIDUsIDI0MiwgIDMyLCAgMTYsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwg
IDcwLCAgMzAsIA0KLSAgICAgMTYsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAgIDYy
LCAgIDAsICAgMCwgICAxLCAgODMsICA4NCwgDQotICAgICA2NSwgIDg0LCAxMTYsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDEsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDANCi19Ow0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVy
cy9jb21waWxlZC9jbGVhcm11bHRpcGxlMTFwcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL2NsZWFybXVsdGlwbGUxMXBz
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0YjQ0NWFjM2Y2YTcxZTRjNWUyMWFk
YzRiYWU5YWZkYjkyODM5ZTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9z
aGFkZXJzL2NvbXBpbGVkL2NsZWFybXVsdGlwbGUxMXBzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwx
OTYgKzAsMCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhM
U0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NA0KLS8vDQotLy8NCi0vLy8NCi0vLw0K
LS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4
ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0tLQ0K
LS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAg
IGZsb2F0ICAgICAgIA0KLS8vIENPTE9SICAgICAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAg
ICAgMSAgICAgTk9ORSAgIGZsb2F0ICAgeHl6dw0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0
dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVy
IFN5c1ZhbHVlICBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0g
LS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAg
ICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgZmxvYXQgICB4eXp3DQot
Ly8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDEgICB4eXp3ICAgICAgICAxICAgVEFSR0VUICAg
ZmxvYXQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDIgICB4eXp3ICAgICAg
ICAyICAgVEFSR0VUICAgZmxvYXQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAg
IDMgICB4eXp3ICAgICAgICAzICAgVEFSR0VUICAgZmxvYXQgICB4eXp3DQotLy8gU1ZfVEFSR0VU
ICAgICAgICAgICAgICAgIDQgICB4eXp3ICAgICAgICA0ICAgVEFSR0VUICAgZmxvYXQgICB4eXp3
DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDUgICB4eXp3ICAgICAgICA1ICAgVEFSR0VU
ICAgZmxvYXQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDYgICB4eXp3ICAg
ICAgICA2ICAgVEFSR0VUICAgZmxvYXQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAg
ICAgIDcgICB4eXp3ICAgICAgICA3ICAgVEFSR0VUICAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180
XzANCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5encNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1k
Y2xfb3V0cHV0IG8xLnh5encNCi1kY2xfb3V0cHV0IG8yLnh5encNCi1kY2xfb3V0cHV0IG8zLnh5
encNCi1kY2xfb3V0cHV0IG80Lnh5encNCi1kY2xfb3V0cHV0IG81Lnh5encNCi1kY2xfb3V0cHV0
IG82Lnh5encNCi1kY2xfb3V0cHV0IG83Lnh5encNCi1tb3YgbzAueHl6dywgdjEueHl6dw0KLW1v
diBvMS54eXp3LCB2MS54eXp3DQotbW92IG8yLnh5encsIHYxLnh5encNCi1tb3YgbzMueHl6dywg
djEueHl6dw0KLW1vdiBvNC54eXp3LCB2MS54eXp3DQotbW92IG81Lnh5encsIHYxLnh5encNCi1t
b3YgbzYueHl6dywgdjEueHl6dw0KLW1vdiBvNy54eXp3LCB2MS54eXp3DQotcmV0IA0KLS8vIEFw
cHJveGltYXRlbHkgOSBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3Qg
QllURSBnX1BTX0NsZWFyTXVsdGlwbGVbXSA9DQotew0KLSAgICAgNjgsICA4OCwgIDY2LCAgNjcs
ICA5MiwgIDU0LCANCi0gICAgMTIwLCAxMDUsIDE2NiwgMTk2LCAxMzIsIDE1OCwgDQotICAgIDIw
OSwgIDMzLCAxODUsIDEyMiwgICA4LCAxODksIA0KLSAgICAxNDUsIDExNCwgICAxLCAgIDAsICAg
MCwgICAwLCANCi0gICAgIDg4LCAgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgDQotICAgICAgMCwg
ICAwLCAgNTIsICAgMCwgICAwLCAgIDAsIA0KLSAgICAxNDAsICAgMCwgICAwLCAgIDAsIDIyNCwg
ICAwLCANCi0gICAgICAwLCAgIDAsIDE4OCwgICAxLCAgIDAsICAgMCwgDQotICAgIDIyMCwgICAy
LCAgIDAsICAgMCwgIDgyLCAgNjgsIA0KLSAgICAgNjksICA3MCwgIDgwLCAgIDAsICAgMCwgICAw
LCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgMjgsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAN
Ci0gICAgMjU1LCAyNTUsICAgMCwgICAxLCAgIDAsICAgMCwgDQotICAgICAyOCwgICAwLCAgIDAs
ICAgMCwgIDc3LCAxMDUsIA0KLSAgICAgOTksIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCANCi0g
ICAgMTE2LCAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgDQotICAgICA3MiwgIDc2LCAgODMsICA3
NiwgIDMyLCAgODMsIA0KLSAgICAxMDQsICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCANCi0gICAg
IDY3LCAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgDQotICAgIDEwMSwgMTE0LCAgMzIsICA1Nywg
IDQ2LCAgNTEsIA0KLSAgICAgNDgsICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4LCANCi0gICAgIDQ2
LCAgNDksICA1NCwgIDUxLCAgNTYsICA1MiwgDQotICAgICAgMCwgMTcxLCAgNzMsICA4MywgIDcx
LCAgNzgsIA0KLSAgICAgNzYsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCANCi0gICAgICAwLCAg
IDAsICAgOCwgICAwLCAgIDAsICAgMCwgDQotICAgICA1NiwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KLSAgICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAzLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgMTUsICAgMCwgICAwLCAgIDAs
IA0KLSAgICAgNjgsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgIDE1LCAgMTUsICAgMCwgICAwLCANCi0gICAgIDgzLCAgODYsICA5NSwg
IDgwLCAgNzksICA4MywgDQotICAgICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgIDAsIA0KLSAg
ICAgNjcsICA3OSwgIDc2LCAgNzksICA4MiwgICAwLCANCi0gICAgMTcxLCAxNzEsICA3OSwgIDgz
LCAgNzEsICA3OCwgDQotICAgIDIxMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsIA0KLSAgICAg
IDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCANCi0gICAgMjAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDMs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAs
ICAgMCwgDQotICAgIDIwMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAg
MCwgDQotICAgICAgMCwgICAwLCAgMTUsICAgMCwgICAwLCAgIDAsIA0KLSAgICAyMDAsICAgMCwg
ICAwLCAgIDAsICAgMiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDE1
LCAgIDAsICAgMCwgICAwLCANCi0gICAgMjAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDMsICAgMCwgICAwLCAg
IDAsICAgMywgICAwLCANCi0gICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQotICAg
IDIwMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgDQotICAgICAg
MCwgICAwLCAgMTUsICAgMCwgICAwLCAgIDAsIA0KLSAgICAyMDAsICAgMCwgICAwLCAgIDAsICAg
NSwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMywg
ICAwLCAgIDAsICAgMCwgICA1LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDE1LCAgIDAsICAgMCwg
ICAwLCANCi0gICAgMjAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgDQotICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDMsICAgMCwgICAwLCAgIDAsICAgNiwgICAw
LCANCi0gICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQotICAgIDIwMCwgICAwLCAg
IDAsICAgMCwgICA3LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMCwgDQotICAgICAgMCwgICAwLCAgMTUs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCANCi0g
ICAgIDcxLCAgNjksICA4NCwgICAwLCAxNzEsIDE3MSwgDQotICAgICA4MywgIDcyLCAgNjgsICA4
MiwgIDI0LCAgIDEsIA0KLSAgICAgIDAsICAgMCwgIDY0LCAgIDAsICAgMCwgICAwLCANCi0gICAg
IDcwLCAgIDAsICAgMCwgICAwLCAgOTgsICAxNiwgDQotICAgICAgMCwgICAzLCAyNDIsICAxNiwg
IDE2LCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsIDEwMSwgICAwLCANCi0gICAgICAw
LCAgIDMsIDI0MiwgIDMyLCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgMTAx
LCAgIDAsIA0KLSAgICAgIDAsICAgMywgMjQyLCAgMzIsICAxNiwgICAwLCANCi0gICAgICAxLCAg
IDAsICAgMCwgICAwLCAxMDEsICAgMCwgDQotICAgICAgMCwgICAzLCAyNDIsICAzMiwgIDE2LCAg
IDAsIA0KLSAgICAgIDIsICAgMCwgICAwLCAgIDAsIDEwMSwgICAwLCANCi0gICAgICAwLCAgIDMs
IDI0MiwgIDMyLCAgMTYsICAgMCwgDQotICAgICAgMywgICAwLCAgIDAsICAgMCwgMTAxLCAgIDAs
IA0KLSAgICAgIDAsICAgMywgMjQyLCAgMzIsICAxNiwgICAwLCANCi0gICAgICA0LCAgIDAsICAg
MCwgICAwLCAxMDEsICAgMCwgDQotICAgICAgMCwgICAzLCAyNDIsICAzMiwgIDE2LCAgIDAsIA0K
LSAgICAgIDUsICAgMCwgICAwLCAgIDAsIDEwMSwgICAwLCANCi0gICAgICAwLCAgIDMsIDI0Miwg
IDMyLCAgMTYsICAgMCwgDQotICAgICAgNiwgICAwLCAgIDAsICAgMCwgMTAxLCAgIDAsIA0KLSAg
ICAgIDAsICAgMywgMjQyLCAgMzIsICAxNiwgICAwLCANCi0gICAgICA3LCAgIDAsICAgMCwgICAw
LCAgNTQsICAgMCwgDQotICAgICAgMCwgICA1LCAyNDIsICAzMiwgIDE2LCAgIDAsIA0KLSAgICAg
IDAsICAgMCwgICAwLCAgIDAsICA3MCwgIDMwLCANCi0gICAgIDE2LCAgIDAsICAgMSwgICAwLCAg
IDAsICAgMCwgDQotICAgICA1NCwgICAwLCAgIDAsICAgNSwgMjQyLCAgMzIsIA0KLSAgICAgMTYs
ICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAgIDcwLCAgMzAsICAxNiwgICAwLCAgIDEs
ICAgMCwgDQotICAgICAgMCwgICAwLCAgNTQsICAgMCwgICAwLCAgIDUsIA0KLSAgICAyNDIsICAz
MiwgIDE2LCAgIDAsICAgMiwgICAwLCANCi0gICAgICAwLCAgIDAsICA3MCwgIDMwLCAgMTYsICAg
MCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDU0LCAgIDAsIA0KLSAgICAgIDAsICAgNSwg
MjQyLCAgMzIsICAxNiwgICAwLCANCi0gICAgICAzLCAgIDAsICAgMCwgICAwLCAgNzAsICAzMCwg
DQotICAgICAxNiwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgNTQsICAgMCwgICAw
LCAgIDUsIDI0MiwgIDMyLCANCi0gICAgIDE2LCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgDQot
ICAgICA3MCwgIDMwLCAgMTYsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDU0LCAg
IDAsICAgMCwgICA1LCANCi0gICAgMjQyLCAgMzIsICAxNiwgICAwLCAgIDUsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgNzAsICAzMCwgIDE2LCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAs
ICA1NCwgICAwLCANCi0gICAgICAwLCAgIDUsIDI0MiwgIDMyLCAgMTYsICAgMCwgDQotICAgICAg
NiwgICAwLCAgIDAsICAgMCwgIDcwLCAgMzAsIA0KLSAgICAgMTYsICAgMCwgICAxLCAgIDAsICAg
MCwgICAwLCANCi0gICAgIDU0LCAgIDAsICAgMCwgICA1LCAyNDIsICAzMiwgDQotICAgICAxNiwg
ICAwLCAgIDcsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgNzAsICAzMCwgIDE2LCAgIDAsICAgMSwg
ICAwLCANCi0gICAgICAwLCAgIDAsICA2MiwgICAwLCAgIDAsICAgMSwgDQotICAgICA4MywgIDg0
LCAgNjUsICA4NCwgMTE2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICA5LCAgIDAsICAgMCwgICAw
LCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAg
IDksICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0g
ICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICA5
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAs
ICAgMCwgICAwDQotfTsNCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJzaW5nbGUxMXBzLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29t
cGlsZWQvY2xlYXJzaW5nbGUxMXBzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3
Y2IwODdjNzUwNTI2MmM4MDdiM2Y0YTUxNzFhMWQ4MGU2MjFmNWUuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyc2luZ2xlMTFwcy5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQg
YnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQNCi0v
Lw0KLS8vDQotLy8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAg
ICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAgIFVz
ZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0t
LS0gLS0tLS0tLSAtLS0tLS0NCi0vLyBTVl9Qb3NpdGlvbiAgICAgICAgICAgICAgMCAgIHh5encg
ICAgICAgIDAgICAgICBQT1MgICBmbG9hdCAgICAgICANCi0vLyBDT0xPUiAgICAgICAgICAgICAg
ICAgICAgMCAgIHh5encgICAgICAgIDEgICAgIE5PTkUgICBmbG9hdCAgIHh5encNCi0vLw0KLS8v
DQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIElu
ZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0t
LQ0KLS8vIFNWX1RhcmdldCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdF
VCAgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX2lucHV0X3BzIGxpbmVhciB2MS54
eXp3DQotZGNsX291dHB1dCBvMC54eXp3DQotbW92IG8wLnh5encsIHYxLnh5encNCi1yZXQgDQot
Ly8gQXBwcm94aW1hdGVseSAyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1j
b25zdCBCWVRFIGdfUFNfQ2xlYXJTaW5nbGVbXSA9DQotew0KLSAgICAgNjgsICA4OCwgIDY2LCAg
NjcsICAxMywgMTUyLCANCi0gICAgIDMyLCAgNDksIDIyMiwgMjM2LCAgOTIsICAyMCwgDQotICAg
IDE4OCwgIDcxLCAgODgsICA0NiwgMTYzLCAyNDEsIA0KLSAgICAxODgsIDIzOCwgICAxLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgMjA4LCAgIDEsICAgMCwgICAwLCAgIDUsICAgMCwgDQotICAgICAg
MCwgICAwLCAgNTIsICAgMCwgICAwLCAgIDAsIA0KLSAgICAxNDAsICAgMCwgICAwLCAgIDAsIDIy
NCwgICAwLCANCi0gICAgICAwLCAgIDAsICAyMCwgICAxLCAgIDAsICAgMCwgDQotICAgICA4NCwg
ICAxLCAgIDAsICAgMCwgIDgyLCAgNjgsIA0KLSAgICAgNjksICA3MCwgIDgwLCAgIDAsICAgMCwg
ICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgMjgsICAgMCwgICAwLCAgIDAsICAgMCwgICA0
LCANCi0gICAgMjU1LCAyNTUsICAgMCwgICAxLCAgIDAsICAgMCwgDQotICAgICAyOCwgICAwLCAg
IDAsICAgMCwgIDc3LCAxMDUsIA0KLSAgICAgOTksIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAN
Ci0gICAgMTE2LCAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgDQotICAgICA3MiwgIDc2LCAgODMs
ICA3NiwgIDMyLCAgODMsIA0KLSAgICAxMDQsICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCANCi0g
ICAgIDY3LCAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgDQotICAgIDEwMSwgMTE0LCAgMzIsICA1
NywgIDQ2LCAgNTEsIA0KLSAgICAgNDgsICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4LCANCi0gICAg
IDQ2LCAgNDksICA1NCwgIDUxLCAgNTYsICA1MiwgDQotICAgICAgMCwgMTcxLCAgNzMsICA4Mywg
IDcxLCAgNzgsIA0KLSAgICAgNzYsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCANCi0gICAgICAw
LCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgDQotICAgICA1NiwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAzLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgMTUsICAgMCwgICAwLCAg
IDAsIA0KLSAgICAgNjgsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgIDE1LCAgMTUsICAgMCwgICAwLCANCi0gICAgIDgzLCAgODYsICA5
NSwgIDgwLCAxMTEsIDExNSwgDQotICAgIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCAgIDAsIA0K
LSAgICAgNjcsICA3OSwgIDc2LCAgNzksICA4MiwgICAwLCANCi0gICAgMTcxLCAxNzEsICA3OSwg
IDgzLCAgNzEsICA3OCwgDQotICAgICA0NCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCANCi0gICAgIDMyLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
IDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAxNSwgICAwLCAg
IDAsICAgMCwgDQotICAgICA4MywgIDg2LCAgOTUsICA4NCwgIDk3LCAxMTQsIA0KLSAgICAxMDMs
IDEwMSwgMTE2LCAgIDAsIDE3MSwgMTcxLCANCi0gICAgIDgzLCAgNzIsICA2OCwgIDgyLCAgNTYs
ICAgMCwgDQotICAgICAgMCwgICAwLCAgNjQsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgMTQsICAg
MCwgICAwLCAgIDAsICA5OCwgIDE2LCANCi0gICAgICAwLCAgIDMsIDI0MiwgIDE2LCAgMTYsICAg
MCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgMTAxLCAgIDAsIA0KLSAgICAgIDAsICAgMywg
MjQyLCAgMzIsICAxNiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgNTQsICAgMCwg
DQotICAgICAgMCwgICA1LCAyNDIsICAzMiwgIDE2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAw
LCAgIDAsICA3MCwgIDMwLCANCi0gICAgIDE2LCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQot
ICAgICA2MiwgICAwLCAgIDAsICAgMSwgIDgzLCAgODQsIA0KLSAgICAgNjUsICA4NCwgMTE2LCAg
IDAsICAgMCwgICAwLCANCi0gICAgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDIsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgDQotICAgICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0g
ICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwDQotfTsNCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L3NoYWRlcnMvY29tcGlsZWQvY29tcG9uZW50bWFza3BzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvY29tcG9uZW50bWFz
a3BzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmMjg0N2I4ZTdkMzVmMTU3Y2Ex
YThkMjgxODNjNWViN2M0ZDI2ZWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9zaGFkZXJzL2NvbXBpbGVkL2NvbXBvbmVudG1hc2twcy5oCisrKyAvZGV2L251bGwKQEAgLTEs
NzkgKzAsMCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhM
U0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NA0KLS8vDQotLy8vDQotLy8gUGFyYW1l
dGVyczoNCi0vLw0KLS8vICAgZmxvYXQ0IG1vZGU7DQotLy8gICBzYW1wbGVyMkQgdGV4Ow0KLS8v
DQotLy8NCi0vLyBSZWdpc3RlcnM6DQotLy8NCi0vLyAgIE5hbWUgICAgICAgICBSZWcgICBTaXpl
DQotLy8gICAtLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQ0KLS8vICAgbW9kZSAgICAgICAgIGMwICAg
ICAgIDENCi0vLyAgIHRleCAgICAgICAgICBzMCAgICAgICAxDQotLy8NCi0NCi0gICAgcHNfMl8w
DQotICAgIGRjbCB0MC54eQ0KLSAgICBkY2xfMmQgczANCi0gICAgdGV4bGQgcjAsIHQwLCBzMA0K
LSAgICBtdWwgcjEueHl6LCByMCwgYzAueA0KLSAgICBtYWQgcjEudywgcjAudywgYzAueiwgYzAu
dw0KLSAgICBtb3Ygb0MwLCByMQ0KLQ0KLS8vIGFwcHJveGltYXRlbHkgNCBpbnN0cnVjdGlvbiBz
bG90cyB1c2VkICgxIHRleHR1cmUsIDMgYXJpdGhtZXRpYykNCi0jZW5kaWYNCi0NCi1jb25zdCBC
WVRFIGdfcHMyMF9jb21wb25lbnRtYXNrcHNbXSA9DQotew0KLSAgICAgIDAsICAgMiwgMjU1LCAy
NTUsIDI1NCwgMjU1LCANCi0gICAgIDQ0LCAgIDAsICA2NywgIDg0LCAgNjUsICA2NiwgDQotICAg
ICAyOCwgICAwLCAgIDAsICAgMCwgMTE5LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDIs
IDI1NSwgMjU1LCANCi0gICAgICAyLCAgIDAsICAgMCwgICAwLCAgMjgsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsIA0KLSAgICAxMTIsICAgMCwgICAwLCAgIDAsICA2
OCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMSwg
ICAwLCAgIDAsICAgMCwgIDc2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCANCi0gICAgIDkyLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgDQotICAgICAgMCwgICAw
LCAgIDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgOTYsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCANCi0gICAgICAwLCAgIDAsIDEwOSwgMTExLCAxMDAsIDEwMSwgDQotICAgICAgMCwgMTcxLCAx
NzEsIDE3MSwgICAxLCAgIDAsIA0KLSAgICAgIDMsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAN
Ci0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAxMTYs
IDEwMSwgMTIwLCAgIDAsIA0KLSAgICAgIDQsICAgMCwgIDEyLCAgIDAsICAgMSwgICAwLCANCi0g
ICAgICAxLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAg
MCwgMTEyLCAxMTUsIA0KLSAgICAgOTUsICA1MCwgIDk1LCAgNDgsICAgMCwgIDc3LCANCi0gICAg
MTA1LCAgOTksIDExNCwgMTExLCAxMTUsIDExMSwgDQotICAgIDEwMiwgMTE2LCAgMzIsICA0MCwg
IDgyLCAgNDEsIA0KLSAgICAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCANCi0gICAgIDgz
LCAxMDQsICA5NywgMTAwLCAxMDEsIDExNCwgDQotICAgICAzMiwgIDY3LCAxMTEsIDEwOSwgMTEy
LCAxMDUsIA0KLSAgICAxMDgsIDEwMSwgMTE0LCAgMzIsICA1NywgIDQ2LCANCi0gICAgIDUxLCAg
NDgsICA0NiwgIDU3LCAgNTAsICA0OCwgDQotICAgICA0OCwgIDQ2LCAgNDksICA1NCwgIDUxLCAg
NTYsIA0KLSAgICAgNTIsICAgMCwgMTcxLCAxNzEsICAzMSwgICAwLCANCi0gICAgICAwLCAgIDIs
ICAgMCwgICAwLCAgIDAsIDEyOCwgDQotICAgICAgMCwgICAwLCAgIDMsIDE3NiwgIDMxLCAgIDAs
IA0KLSAgICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTQ0LCANCi0gICAgICAwLCAgIDgsICAx
NSwgMTYwLCAgNjYsICAgMCwgDQotICAgICAgMCwgICAzLCAgIDAsICAgMCwgIDE1LCAxMjgsIA0K
LSAgICAgIDAsICAgMCwgMjI4LCAxNzYsICAgMCwgICA4LCANCi0gICAgMjI4LCAxNjAsICAgNSwg
ICAwLCAgIDAsICAgMywgDQotICAgICAgMSwgICAwLCAgIDcsIDEyOCwgICAwLCAgIDAsIA0KLSAg
ICAyMjgsIDEyOCwgICAwLCAgIDAsICAgMCwgMTYwLCANCi0gICAgICA0LCAgIDAsICAgMCwgICA0
LCAgIDEsICAgMCwgDQotICAgICAgOCwgMTI4LCAgIDAsICAgMCwgMjU1LCAxMjgsIA0KLSAgICAg
IDAsICAgMCwgMTcwLCAxNjAsICAgMCwgICAwLCANCi0gICAgMjU1LCAxNjAsICAgMSwgICAwLCAg
IDAsICAgMiwgDQotICAgICAgMCwgICA4LCAgMTUsIDEyOCwgICAxLCAgIDAsIA0KLSAgICAyMjgs
IDEyOCwgMjU1LCAyNTUsICAgMCwgICAwDQotfTsNCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvZmxpcHl2
cy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFk
ZXJzL2NvbXBpbGVkL2ZsaXB5dnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI1
NzZlZDY3NDJmMmUyZjVlZjNmYjE0YWIwZDgzYzY5NmI1NzNkMi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvZmxpcHl2cy5oCisrKyAvZGV2L251
bGwKQEAgLTEsNjcgKzAsMCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3Nv
ZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NA0KLS8vDQotLy8vDQot
Ly8gUGFyYW1ldGVyczoNCi0vLw0KLS8vICAgZmxvYXQ0IGhhbGZQaXhlbFNpemU7DQotLy8NCi0v
Lw0KLS8vIFJlZ2lzdGVyczoNCi0vLw0KLS8vICAgTmFtZSAgICAgICAgICBSZWcgICBTaXplDQot
Ly8gICAtLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0NCi0vLyAgIGhhbGZQaXhlbFNpemUgYzAgICAg
ICAgMQ0KLS8vDQotDQotICAgIHZzXzJfMA0KLSAgICBkZWYgYzEsIDAuNSwgMSwgMCwgMA0KLSAg
ICBkY2xfcG9zaXRpb24gdjANCi0gICAgYWRkIG9Qb3MsIHYwLCBjMA0KLSAgICBtYWQgb1QwLCB2
MCwgYzEueHh5eSwgYzEueHh6eg0KLQ0KLS8vIGFwcHJveGltYXRlbHkgMiBpbnN0cnVjdGlvbiBz
bG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX3ZzMjBfZmxpcHl2c1tdID0NCi17
DQotICAgICAgMCwgICAyLCAyNTQsIDI1NSwgMjU0LCAyNTUsIA0KLSAgICAgMzYsICAgMCwgIDY3
LCAgODQsICA2NSwgIDY2LCANCi0gICAgIDI4LCAgIDAsICAgMCwgICAwLCAgODcsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU0LCAyNTUsIA0KLSAgICAgIDEsICAgMCwgICAwLCAg
IDAsICAyOCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgDQotICAg
ICA4MCwgICAwLCAgIDAsICAgMCwgIDQ4LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAyLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgNjQsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAxMDQsICA5NywgMTA4LCAxMDIsICA4
MCwgMTA1LCANCi0gICAgMTIwLCAxMDEsIDEwOCwgIDgzLCAxMDUsIDEyMiwgDQotICAgIDEwMSwg
ICAwLCAxNzEsIDE3MSwgICAxLCAgIDAsIA0KLSAgICAgIDMsICAgMCwgICAxLCAgIDAsICAgNCwg
ICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAw
LCAxMTgsIDExNSwgIDk1LCAgNTAsIA0KLSAgICAgOTUsICA0OCwgICAwLCAgNzcsIDEwNSwgIDk5
LCANCi0gICAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgDQotICAgICAzMiwgIDQwLCAg
ODIsICA0MSwgIDMyLCAgNzIsIA0KLSAgICAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgMTA0LCAN
Ci0gICAgIDk3LCAxMDAsIDEwMSwgMTE0LCAgMzIsICA2NywgDQotICAgIDExMSwgMTA5LCAxMTIs
IDEwNSwgMTA4LCAxMDEsIA0KLSAgICAxMTQsICAzMiwgIDU3LCAgNDYsICA1MSwgIDQ4LCANCi0g
ICAgIDQ2LCAgNTcsICA1MCwgIDQ4LCAgNDgsICA0NiwgDQotICAgICA0OSwgIDU0LCAgNTEsICA1
NiwgIDUyLCAgIDAsIA0KLSAgICAxNzEsIDE3MSwgIDgxLCAgIDAsICAgMCwgICA1LCANCi0gICAg
ICAxLCAgIDAsICAxNSwgMTYwLCAgIDAsICAgMCwgDQotICAgICAgMCwgIDYzLCAgIDAsICAgMCwg
MTI4LCAgNjMsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAw
LCAgIDAsICAzMSwgICAwLCAgIDAsICAgMiwgDQotICAgICAgMCwgICAwLCAgIDAsIDEyOCwgICAw
LCAgIDAsIA0KLSAgICAgMTUsIDE0NCwgICAyLCAgIDAsICAgMCwgICAzLCANCi0gICAgICAwLCAg
IDAsICAxNSwgMTkyLCAgIDAsICAgMCwgDQotICAgIDIyOCwgMTQ0LCAgIDAsICAgMCwgMjI4LCAx
NjAsIA0KLSAgICAgIDQsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCANCi0gICAgIDE1LCAyMjQs
ICAgMCwgICAwLCAyMjgsIDE0NCwgDQotICAgICAgMSwgICAwLCAgODAsIDE2MCwgICAxLCAgIDAs
IA0KLSAgICAxNjAsIDE2MCwgMjU1LCAyNTUsICAgMCwgICAwDQotfTsNCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29t
cGlsZWQvbHVtaW5hbmNlcHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9sdW1pbmFuY2Vwcy5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAzMDMxM2IwODYwZWNmZTAyNjc3ZGRiM2YwMDA5MTUxZjc4YTNiZmIy
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9s
dW1pbmFuY2Vwcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotI2lmIDANCi0vLw0K
LS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAu
OTIwMC4xNjM4NA0KLS8vDQotLy8vDQotLy8gUGFyYW1ldGVyczoNCi0vLw0KLS8vICAgZmxvYXQ0
IG1vZGU7DQotLy8gICBzYW1wbGVyMkQgdGV4Ow0KLS8vDQotLy8NCi0vLyBSZWdpc3RlcnM6DQot
Ly8NCi0vLyAgIE5hbWUgICAgICAgICBSZWcgICBTaXplDQotLy8gICAtLS0tLS0tLS0tLS0gLS0t
LS0gLS0tLQ0KLS8vICAgbW9kZSAgICAgICAgIGMwICAgICAgIDENCi0vLyAgIHRleCAgICAgICAg
ICBzMCAgICAgICAxDQotLy8NCi0NCi0gICAgcHNfMl8wDQotICAgIGRjbCB0MC54eQ0KLSAgICBk
Y2xfMmQgczANCi0gICAgdGV4bGQgcjAsIHQwLCBzMA0KLSAgICBtYWQgcjEudywgcjAudywgYzAu
eCwgYzAueQ0KLSAgICBtb3YgcjEueHl6LCByMC54DQotICAgIG1vdiBvQzAsIHIxDQotDQotLy8g
YXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVyZSwgMyBhcml0
aG1ldGljKQ0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19wczIwX2x1bWluYW5jZXBzW10gPQ0K
LXsNCi0gICAgICAwLCAgIDIsIDI1NSwgMjU1LCAyNTQsIDI1NSwgDQotICAgICA0NCwgICAwLCAg
NjcsICA4NCwgIDY1LCAgNjYsIA0KLSAgICAgMjgsICAgMCwgICAwLCAgIDAsIDExOSwgICAwLCAN
Ci0gICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTUsIDI1NSwgDQotICAgICAgMiwgICAwLCAgIDAs
ICAgMCwgIDI4LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCANCi0g
ICAgMTEyLCAgIDAsICAgMCwgICAwLCAgNjgsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDIsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICA3NiwgICAwLCANCi0gICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICA5MiwgICAwLCAgIDAsICAgMCwg
ICAzLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAgIDk2
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAxMDksIDExMSwgMTAw
LCAxMDEsIA0KLSAgICAgIDAsIDE3MSwgMTcxLCAxNzEsICAgMSwgICAwLCANCi0gICAgICAzLCAg
IDAsICAgMSwgICAwLCAgIDQsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KLSAgICAgIDAsICAgMCwgMTE2LCAxMDEsIDEyMCwgICAwLCANCi0gICAgICA0LCAgIDAs
ICAxMiwgICAwLCAgIDEsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsIDExMiwgMTE1LCANCi0gICAgIDk1LCAgNTAsICA5
NSwgIDQ4LCAgIDAsICA3NywgDQotICAgIDEwNSwgIDk5LCAxMTQsIDExMSwgMTE1LCAxMTEsIA0K
LSAgICAxMDIsIDExNiwgIDMyLCAgNDAsICA4MiwgIDQxLCANCi0gICAgIDMyLCAgNzIsICA3Niwg
IDgzLCAgNzYsICAzMiwgDQotICAgICA4MywgMTA0LCAgOTcsIDEwMCwgMTAxLCAxMTQsIA0KLSAg
ICAgMzIsICA2NywgMTExLCAxMDksIDExMiwgMTA1LCANCi0gICAgMTA4LCAxMDEsIDExNCwgIDMy
LCAgNTcsICA0NiwgDQotICAgICA1MSwgIDQ4LCAgNDYsICA1NywgIDUwLCAgNDgsIA0KLSAgICAg
NDgsICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCANCi0gICAgIDUyLCAgIDAsIDE3MSwgMTcxLCAg
MzEsICAgMCwgDQotICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAxMjgsIA0KLSAgICAgIDAs
ICAgMCwgICAzLCAxNzYsICAzMSwgICAwLCANCi0gICAgICAwLCAgIDIsICAgMCwgICAwLCAgIDAs
IDE0NCwgDQotICAgICAgMCwgICA4LCAgMTUsIDE2MCwgIDY2LCAgIDAsIA0KLSAgICAgIDAsICAg
MywgICAwLCAgIDAsICAxNSwgMTI4LCANCi0gICAgICAwLCAgIDAsIDIyOCwgMTc2LCAgIDAsICAg
OCwgDQotICAgIDIyOCwgMTYwLCAgIDQsICAgMCwgICAwLCAgIDQsIA0KLSAgICAgIDEsICAgMCwg
ICA4LCAxMjgsICAgMCwgICAwLCANCi0gICAgMjU1LCAxMjgsICAgMCwgICAwLCAgIDAsIDE2MCwg
DQotICAgICAgMCwgICAwLCAgODUsIDE2MCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAgMiwgICAx
LCAgIDAsICAgNywgMTI4LCANCi0gICAgICAwLCAgIDAsICAgMCwgMTI4LCAgIDEsICAgMCwgDQot
ICAgICAgMCwgICAyLCAgIDAsICAgOCwgIDE1LCAxMjgsIA0KLSAgICAgIDEsICAgMCwgMjI4LCAx
MjgsIDI1NSwgMjU1LCANCi0gICAgICAwLCAgIDANCi19Ow0KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9w
YXNzdGhyb3VnaDExdnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaDExdnMuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYmYzOTUyMTZlOTkyMGZjY2EwMzJiMWVhYzg1M2U4NWFiOGIxYjY2
MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQv
cGFzc3Rocm91Z2gxMXZzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotI2lmIDAN
Ci0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVy
IDkuMzAuOTIwMC4xNjM4NA0KLS8vDQotLy8NCi0vLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVy
ZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBT
eXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0t
LS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0tLQ0KLS8vIFBPU0lUSU9OICAgICAg
ICAgICAgICAgICAwICAgeHkgICAgICAgICAgMCAgICAgTk9ORSAgIGZsb2F0ICAgeHkgIA0KLS8v
IFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgIGZs
b2F0ICAgeHkgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFt
ZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlICBGb3JtYXQg
ICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0t
LS0tLS0tIC0tLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4
eXp3ICAgICAgICAwICAgICAgUE9TICAgZmxvYXQgICB4eXp3DQotLy8gVEVYQ09PUkQgICAgICAg
ICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICAgZmxvYXQgICB4eSAgDQotLy8N
Ci12c180XzANCi1kY2xfaW5wdXQgdjAueHkNCi1kY2xfaW5wdXQgdjEueHkNCi1kY2xfb3V0cHV0
X3NpdiBvMC54eXp3LCBwb3NpdGlvbg0KLWRjbF9vdXRwdXQgbzEueHkNCi1tb3YgbzAueHksIHYw
Lnh5eHgNCi1tb3YgbzAuencsIGwoMCwwLDAsMS4wMDAwMDApDQotbW92IG8xLnh5LCB2MS54eXh4
DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgNCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2Vu
ZGlmDQotDQotY29uc3QgQllURSBnX1ZTX1Bhc3N0aHJvdWdoW10gPQ0KLXsNCi0gICAgIDY4LCAg
ODgsICA2NiwgIDY3LCAxOTcsIDIxNCwgDQotICAgIDE4NCwgIDg1LCAyNDAsICA5NCwgIDcxLCAg
NDgsIA0KLSAgICAxNjUsICAzNCwgMTQyLCAyMzMsICAgMCwgMTM1LCANCi0gICAgMTkzLCAxNzgs
ICAgMSwgICAwLCAgIDAsICAgMCwgDQotICAgICA2OCwgICAyLCAgIDAsICAgMCwgICA1LCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgIDUyLCAgIDAsICAgMCwgICAwLCANCi0gICAgMTQwLCAgIDAsICAg
MCwgICAwLCAyMjQsICAgMCwgDQotICAgICAgMCwgICAwLCAgNTYsICAgMSwgICAwLCAgIDAsIA0K
LSAgICAyMDAsICAgMSwgICAwLCAgIDAsICA4MiwgIDY4LCANCi0gICAgIDY5LCAgNzAsICA4MCwg
ICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgIDI4LCAgIDAsICAgMCwgICAw
LCAgIDAsICAgNCwgDQotICAgIDI1NCwgMjU1LCAgIDAsICAgMSwgICAwLCAgIDAsIA0KLSAgICAg
MjgsICAgMCwgICAwLCAgIDAsICA3NywgMTA1LCANCi0gICAgIDk5LCAxMTQsIDExMSwgMTE1LCAx
MTEsIDEwMiwgDQotICAgIDExNiwgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsIA0KLSAgICAgNzIs
ICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCANCi0gICAgMTA0LCAgOTcsIDEwMCwgMTAxLCAxMTQs
ICAzMiwgDQotICAgICA2NywgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIA0KLSAgICAxMDEsIDEx
NCwgIDMyLCAgNTcsICA0NiwgIDUxLCANCi0gICAgIDQ4LCAgNDYsICA1NywgIDUwLCAgNDgsICA0
OCwgDQotICAgICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsIA0KLSAgICAgIDAsIDE3MSwg
IDczLCAgODMsICA3MSwgIDc4LCANCi0gICAgIDc2LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwg
DQotICAgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgNTYsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQot
ICAgICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAzLCAg
IDMsICAgMCwgICAwLCANCi0gICAgIDY1LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDMsICAgMCwgICAwLCAgIDAs
ICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMywgICAzLCAgIDAsICAgMCwgDQotICAgICA4
MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsIA0KLSAgICAgNzksICA3OCwgICAwLCAgODQsICA2
OSwgIDg4LCANCi0gICAgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAgMCwgDQotICAgIDE3MSwg
MTcxLCAgNzksICA4MywgIDcxLCAgNzgsIA0KLSAgICAgODAsICAgMCwgICAwLCAgIDAsICAgMiwg
ICAwLCANCi0gICAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgDQotICAgICA1NiwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAw
LCANCi0gICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAg
MTUsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgNjgsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMywgICAwLCAgIDAs
ICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAzLCAgMTIsICAgMCwgICAwLCANCi0g
ICAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgDQotICAgICA3MywgIDg0LCAgNzMsICA3
OSwgIDc4LCAgIDAsIA0KLSAgICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCANCi0gICAg
IDgyLCAgNjgsICAgMCwgMTcxLCAxNzEsIDE3MSwgDQotICAgICA4MywgIDcyLCAgNjgsICA4Miwg
MTM2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDY0LCAgIDAsICAgMSwgICAwLCANCi0gICAgIDM0
LCAgIDAsICAgMCwgICAwLCAgOTUsICAgMCwgDQotICAgICAgMCwgICAzLCAgNTAsICAxNiwgIDE2
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICA5NSwgICAwLCANCi0gICAgICAwLCAg
IDMsICA1MCwgIDE2LCAgMTYsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgMTAzLCAg
IDAsIA0KLSAgICAgIDAsICAgNCwgMjQyLCAgMzIsICAxNiwgICAwLCANCi0gICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDEsICAgMCwgDQotICAgICAgMCwgICAwLCAxMDEsICAgMCwgICAwLCAgIDMs
IA0KLSAgICAgNTAsICAzMiwgIDE2LCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICA1
NCwgICAwLCAgIDAsICAgNSwgDQotICAgICA1MCwgIDMyLCAgMTYsICAgMCwgICAwLCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgIDcwLCAgMTYsICAxNiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgNTQsICAgMCwgDQotICAgICAgMCwgICA4LCAxOTQsICAzMiwgIDE2LCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgIDY0LCANCi0gICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
IDAsICAgMCwgICAwLCAgIDAsIDEyOCwgIDYzLCANCi0gICAgIDU0LCAgIDAsICAgMCwgICA1LCAg
NTAsICAzMiwgDQotICAgICAxNiwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgNzAs
ICAxNiwgIDE2LCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICA2MiwgICAwLCAgIDAs
ICAgMSwgDQotICAgICA4MywgIDg0LCAgNjUsICA4NCwgMTE2LCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgICA0LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQotICAgICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwDQotfTsNCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQv
cGFzc3Rocm91Z2hsdW0xMXBzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hsdW0xMXBzLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMDdiNGEzY2JkODk2NWQxOGNiNDhkMDE4ZTQxMmQ4
NDI0MjA4OTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2Nv
bXBpbGVkL3Bhc3N0aHJvdWdobHVtMTFwcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAg
QEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRl
ciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQNCi0vLw0KLS8vDQotLy8vDQotLy8gUmVzb3VyY2Ug
QmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0t
LS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAg
IE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDJkICAgIDAgICAgICAgIDENCi0v
Lw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAg
ICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAgIFVzZWQNCi0v
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0t
LS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAg
IDAgICAgICBQT1MgICBmbG9hdCAgICAgICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAg
MCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8g
T3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAg
TWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0tLQ0KLS8v
IFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIGZs
b2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0K
LWRjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRj
bF9pbnB1dF9wcyBsaW5lYXIgdjEueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMg
MQ0KLXNhbXBsZSByMC54eXp3LCB2MS54eXh4LCB0MC54eXp3LCBzMA0KLW1vdiBvMC54eXosIHIw
Lnh4eHgNCi1tb3YgbzAudywgbCgxLjAwMDAwMCkNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA0
IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfUGFz
c3Rocm91Z2hMdW1bXSA9DQotew0KLSAgICAgNjgsICA4OCwgIDY2LCAgNjcsIDI0NCwgICA5LCAN
Ci0gICAgMjEzLCAxNDcsICAxOSwgMjQ5LCAgNzAsIDExMSwgDQotICAgIDE1NywgIDkyLCAyNDMs
IDE2MCwgIDQwLCAxNDQsIA0KLSAgICAyMzgsIDIyMSwgICAxLCAgIDAsICAgMCwgICAwLCANCi0g
ICAgMTI4LCAgIDIsICAgMCwgICAwLCAgIDUsICAgMCwgDQotICAgICAgMCwgICAwLCAgNTIsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAyMjAsICAgMCwgICAwLCAgIDAsICA1MiwgICAxLCANCi0gICAg
ICAwLCAgIDAsIDEwNCwgICAxLCAgIDAsICAgMCwgDQotICAgICAgNCwgICAyLCAgIDAsICAgMCwg
IDgyLCAgNjgsIA0KLSAgICAgNjksICA3MCwgMTYwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAgMjgsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCANCi0gICAgMjU1LCAy
NTUsICAgMCwgICAxLCAgIDAsICAgMCwgDQotICAgIDEwOCwgICAwLCAgIDAsICAgMCwgIDkyLCAg
IDAsIA0KLSAgICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICAg
MSwgICAwLCAgIDAsICAgMCwgDQotICAgIDEwMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCANCi0gICAgICA0LCAgIDAsICAgMCwg
ICAwLCAyNTUsIDI1NSwgDQotICAgIDI1NSwgMjU1LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAg
ICAgIDEsICAgMCwgICAwLCAgIDAsICAxMywgICAwLCANCi0gICAgICAwLCAgIDAsICA4MywgIDk3
LCAxMDksIDExMiwgDQotICAgIDEwOCwgMTAxLCAxMTQsICAgMCwgIDg0LCAxMDEsIA0KLSAgICAx
MjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgICAwLCANCi0gICAgIDc3LCAxMDUsICA5OSwgMTE0LCAx
MTEsIDExNSwgDQotICAgIDExMSwgMTAyLCAxMTYsICAzMiwgIDQwLCAgODIsIA0KLSAgICAgNDEs
ICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCANCi0gICAgIDMyLCAgODMsIDEwNCwgIDk3LCAxMDAs
IDEwMSwgDQotICAgIDExNCwgIDMyLCAgNjcsIDExMSwgMTA5LCAxMTIsIA0KLSAgICAxMDUsIDEw
OCwgMTAxLCAxMTQsICAzMiwgIDU3LCANCi0gICAgIDQ2LCAgNTEsICA0OCwgIDQ2LCAgNTcsICA1
MCwgDQotICAgICA0OCwgIDQ4LCAgNDYsICA0OSwgIDU0LCAgNTEsIA0KLSAgICAgNTYsICA1Miwg
ICAwLCAxNzEsICA3MywgIDgzLCANCi0gICAgIDcxLCAgNzgsICA4MCwgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDU2
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAxNSwgICAwLCANCi0gICAgICAwLCAgIDAsICA2OCwgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAzLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgDQotICAgICAg
MCwgICAwLCAgODMsICA4NiwgIDk1LCAgODAsIA0KLSAgICAgNzksICA4MywgIDczLCAgODQsICA3
MywgIDc5LCANCi0gICAgIDc4LCAgIDAsICA4NCwgIDY5LCAgODgsICA2NywgDQotICAgICA3OSwg
IDc5LCAgODIsICA2OCwgICAwLCAxNzEsIA0KLSAgICAxNzEsIDE3MSwgIDc5LCAgODMsICA3MSwg
IDc4LCANCi0gICAgIDQ0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQotICAgICAgMCwgICAw
LCAgIDgsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgMzIsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMywgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDE1LCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgDQotICAgICA3MSwgIDY5LCAgODQs
ICAgMCwgMTcxLCAxNzEsIA0KLSAgICAgODMsICA3MiwgIDY4LCAgODIsIDE0OCwgICAwLCANCi0g
ICAgICAwLCAgIDAsICA2NCwgICAwLCAgIDAsICAgMCwgDQotICAgICAzNywgICAwLCAgIDAsICAg
MCwgIDkwLCAgIDAsIA0KLSAgICAgIDAsICAgMywgICAwLCAgOTYsICAxNiwgICAwLCANCi0gICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgODgsICAyNCwgDQotICAgICAgMCwgICA0LCAgIDAsIDExMiwg
IDE2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICA4NSwgIDg1LCANCi0gICAgICAw
LCAgIDAsICA5OCwgIDE2LCAgIDAsICAgMywgDQotICAgICA1MCwgIDE2LCAgMTYsICAgMCwgICAx
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgMTAxLCAgIDAsICAgMCwgICAzLCANCi0gICAgMjQyLCAg
MzIsICAxNiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAxMDQsICAgMCwgICAwLCAg
IDIsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICA2OSwgICAwLCANCi0gICAgICAwLCAgIDks
IDI0MiwgICAwLCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDcwLCAgMTYs
IA0KLSAgICAgMTYsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAgIDcwLCAxMjYsICAx
NiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICA5NiwgIDE2LCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgICAwLCAgIDAsICA1NCwgICAwLCANCi0gICAgICAwLCAgIDUsIDExNCwg
IDMyLCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsIA0KLSAg
ICAgMTYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgIDU0LCAgIDAsICAgMCwgICA1
LCAxMzAsICAzMiwgDQotICAgICAxNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
IDEsICA2NCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgMTI4LCAgNjMsICA2MiwgICAwLCAg
IDAsICAgMSwgDQotICAgICA4MywgIDg0LCAgNjUsICA4NCwgMTE2LCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQotICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCi0gICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwDQotfTsNCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGls
ZWQvcGFzc3Rocm91Z2hsdW1hbHBoYTExcHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaGx1bWFscGhh
MTFwcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTVkNjBlYjNiMjI2ZGQwZTdk
YWU0OGJlZDU1NDQ3YTk4ZmIxMzQxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaGx1bWFscGhhMTFwcy5oCisrKyAvZGV2L251
bGwKQEAgLTEsMTQ4ICswLDAgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9z
b2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQNCi0vLw0KLS8vDQot
Ly8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMN
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0t
LS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0
dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDJk
ICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8N
Ci0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUg
IEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0t
LS0tLS0gLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAg
ICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgICBmbG9hdCAgICAgICANCi0vLyBURVhDT09S
RCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgICBmbG9hdCAgIHh5
ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAg
ICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAt
LS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAg
ICAgMCAgIFRBUkdFVCAgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIg
czAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZs
b2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkNCi1kY2xfb3V0cHV0IG8w
Lnh5encNCi1kY2xfdGVtcHMgMQ0KLXNhbXBsZSByMC54eXp3LCB2MS54eXh4LCB0MC54eXp3LCBz
MA0KLW1vdiBvMC54eXp3LCByMC54eHh3DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgMyBpbnN0
cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX1Bhc3N0aHJv
dWdoTHVtQWxwaGFbXSA9DQotew0KLSAgICAgNjgsICA4OCwgIDY2LCAgNjcsIDE4NSwgIDE0LCAN
Ci0gICAgIDg0LCAyMjMsIDE5MiwgIDQyLCAgMTYsIDEzMywgDQotICAgICA0NiwgMTAwLCAgOTUs
IDIyMSwgMTgzLCAgOTcsIA0KLSAgICAxOTIsICAyMywgICAxLCAgIDAsICAgMCwgICAwLCANCi0g
ICAgMTA4LCAgIDIsICAgMCwgICAwLCAgIDUsICAgMCwgDQotICAgICAgMCwgICAwLCAgNTIsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAyMjAsICAgMCwgICAwLCAgIDAsICA1MiwgICAxLCANCi0gICAg
ICAwLCAgIDAsIDEwNCwgICAxLCAgIDAsICAgMCwgDQotICAgIDI0MCwgICAxLCAgIDAsICAgMCwg
IDgyLCAgNjgsIA0KLSAgICAgNjksICA3MCwgMTYwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAgMjgsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCANCi0gICAgMjU1LCAy
NTUsICAgMCwgICAxLCAgIDAsICAgMCwgDQotICAgIDEwOCwgICAwLCAgIDAsICAgMCwgIDkyLCAg
IDAsIA0KLSAgICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICAg
MSwgICAwLCAgIDAsICAgMCwgDQotICAgIDEwMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCANCi0gICAgICA0LCAgIDAsICAgMCwg
ICAwLCAyNTUsIDI1NSwgDQotICAgIDI1NSwgMjU1LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAg
ICAgIDEsICAgMCwgICAwLCAgIDAsICAxMywgICAwLCANCi0gICAgICAwLCAgIDAsICA4MywgIDk3
LCAxMDksIDExMiwgDQotICAgIDEwOCwgMTAxLCAxMTQsICAgMCwgIDg0LCAxMDEsIA0KLSAgICAx
MjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgICAwLCANCi0gICAgIDc3LCAxMDUsICA5OSwgMTE0LCAx
MTEsIDExNSwgDQotICAgIDExMSwgMTAyLCAxMTYsICAzMiwgIDQwLCAgODIsIA0KLSAgICAgNDEs
ICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCANCi0gICAgIDMyLCAgODMsIDEwNCwgIDk3LCAxMDAs
IDEwMSwgDQotICAgIDExNCwgIDMyLCAgNjcsIDExMSwgMTA5LCAxMTIsIA0KLSAgICAxMDUsIDEw
OCwgMTAxLCAxMTQsICAzMiwgIDU3LCANCi0gICAgIDQ2LCAgNTEsICA0OCwgIDQ2LCAgNTcsICA1
MCwgDQotICAgICA0OCwgIDQ4LCAgNDYsICA0OSwgIDU0LCAgNTEsIA0KLSAgICAgNTYsICA1Miwg
ICAwLCAxNzEsICA3MywgIDgzLCANCi0gICAgIDcxLCAgNzgsICA4MCwgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDU2
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAxNSwgICAwLCANCi0gICAgICAwLCAgIDAsICA2OCwgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAzLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgDQotICAgICAg
MCwgICAwLCAgODMsICA4NiwgIDk1LCAgODAsIA0KLSAgICAgNzksICA4MywgIDczLCAgODQsICA3
MywgIDc5LCANCi0gICAgIDc4LCAgIDAsICA4NCwgIDY5LCAgODgsICA2NywgDQotICAgICA3OSwg
IDc5LCAgODIsICA2OCwgICAwLCAxNzEsIA0KLSAgICAxNzEsIDE3MSwgIDc5LCAgODMsICA3MSwg
IDc4LCANCi0gICAgIDQ0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQotICAgICAgMCwgICAw
LCAgIDgsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgMzIsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMywgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDE1LCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgDQotICAgICA3MSwgIDY5LCAgODQs
ICAgMCwgMTcxLCAxNzEsIA0KLSAgICAgODMsICA3MiwgIDY4LCAgODIsIDEyOCwgICAwLCANCi0g
ICAgICAwLCAgIDAsICA2NCwgICAwLCAgIDAsICAgMCwgDQotICAgICAzMiwgICAwLCAgIDAsICAg
MCwgIDkwLCAgIDAsIA0KLSAgICAgIDAsICAgMywgICAwLCAgOTYsICAxNiwgICAwLCANCi0gICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgODgsICAyNCwgDQotICAgICAgMCwgICA0LCAgIDAsIDExMiwg
IDE2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICA4NSwgIDg1LCANCi0gICAgICAw
LCAgIDAsICA5OCwgIDE2LCAgIDAsICAgMywgDQotICAgICA1MCwgIDE2LCAgMTYsICAgMCwgICAx
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgMTAxLCAgIDAsICAgMCwgICAzLCANCi0gICAgMjQyLCAg
MzIsICAxNiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAxMDQsICAgMCwgICAwLCAg
IDIsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICA2OSwgICAwLCANCi0gICAgICAwLCAgIDks
IDI0MiwgICAwLCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDcwLCAgMTYs
IA0KLSAgICAgMTYsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAgIDcwLCAxMjYsICAx
NiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICA5NiwgIDE2LCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgICAwLCAgIDAsICA1NCwgICAwLCANCi0gICAgICAwLCAgIDUsIDI0Miwg
IDMyLCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgMTIsIA0KLSAg
ICAgMTYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgIDYyLCAgIDAsICAgMCwgICAx
LCAgODMsICA4NCwgDQotICAgICA2NSwgIDg0LCAxMTYsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
IDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQotICAgICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEs
ICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
ICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAwLCAgIDANCi19Ow0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9wYXNz
dGhyb3VnaHBzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hwcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBjMGEyYzdkNDgyYjMzYmU4NjY3NDk1NDc1NWEzOTk1ODVjOGFiZWE4Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9wYXNzdGhy
b3VnaHBzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0jaWYgMA0KLS8vDQotLy8g
R2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAw
LjE2Mzg0DQotLy8NCi0vLy8NCi0vLyBQYXJhbWV0ZXJzOg0KLS8vDQotLy8gICBzYW1wbGVyMkQg
dGV4Ow0KLS8vDQotLy8NCi0vLyBSZWdpc3RlcnM6DQotLy8NCi0vLyAgIE5hbWUgICAgICAgICBS
ZWcgICBTaXplDQotLy8gICAtLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQ0KLS8vICAgdGV4ICAgICAg
ICAgIHMwICAgICAgIDENCi0vLw0KLQ0KLSAgICBwc18yXzANCi0gICAgZGNsIHQwLnh5DQotICAg
IGRjbF8yZCBzMA0KLSAgICB0ZXhsZCByMCwgdDAsIHMwDQotICAgIG1vdiBvQzAsIHIwDQotDQot
Ly8gYXBwcm94aW1hdGVseSAyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVyZSwgMSBh
cml0aG1ldGljKQ0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19wczIwX3Bhc3N0aHJvdWdocHNb
XSA9DQotew0KLSAgICAgIDAsICAgMiwgMjU1LCAyNTUsIDI1NCwgMjU1LCANCi0gICAgIDMzLCAg
IDAsICA2NywgIDg0LCAgNjUsICA2NiwgDQotICAgICAyOCwgICAwLCAgIDAsICAgMCwgIDc1LCAg
IDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDIsIDI1NSwgMjU1LCANCi0gICAgICAxLCAgIDAs
ICAgMCwgICAwLCAgMjgsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAs
IA0KLSAgICAgNjgsICAgMCwgICAwLCAgIDAsICA0OCwgICAwLCANCi0gICAgICAwLCAgIDAsICAg
MywgICAwLCAgIDAsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDUyLCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgMTE2LCAxMDEsIDEyMCwg
ICAwLCAgIDQsICAgMCwgDQotICAgICAxMiwgICAwLCAgIDEsICAgMCwgICAxLCAgIDAsIA0KLSAg
ICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsIDExMiwgMTE1
LCAgOTUsICA1MCwgDQotICAgICA5NSwgIDQ4LCAgIDAsICA3NywgMTA1LCAgOTksIA0KLSAgICAx
MTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCANCi0gICAgIDMyLCAgNDAsICA4MiwgIDQxLCAg
MzIsICA3MiwgDQotICAgICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAxMDQsIA0KLSAgICAgOTcs
IDEwMCwgMTAxLCAxMTQsICAzMiwgIDY3LCANCi0gICAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgs
IDEwMSwgDQotICAgIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCAgNDgsIA0KLSAgICAgNDYsICA1
NywgIDUwLCAgNDgsICA0OCwgIDQ2LCANCi0gICAgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAg
MCwgDQotICAgIDE3MSwgMTcxLCAgMzEsICAgMCwgICAwLCAgIDIsIA0KLSAgICAgIDAsICAgMCwg
ICAwLCAxMjgsICAgMCwgICAwLCANCi0gICAgICAzLCAxNzYsICAzMSwgICAwLCAgIDAsICAgMiwg
DQotICAgICAgMCwgICAwLCAgIDAsIDE0NCwgICAwLCAgIDgsIA0KLSAgICAgMTUsIDE2MCwgIDY2
LCAgIDAsICAgMCwgICAzLCANCi0gICAgICAwLCAgIDAsICAxNSwgMTI4LCAgIDAsICAgMCwgDQot
ICAgIDIyOCwgMTc2LCAgIDAsICAgOCwgMjI4LCAxNjAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAg
IDIsICAgMCwgICA4LCANCi0gICAgIDE1LCAxMjgsICAgMCwgICAwLCAyMjgsIDEyOCwgDQotICAg
IDI1NSwgMjU1LCAgIDAsICAgMA0KLX07DQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdo
cmdiMTFwcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiMTFwcy5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA1ODZjYmNmNmI4MmNmZDk2NTg2MDE4ZGUxOTk3OTk3Mzg2MTg3NzM5Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9wYXNz
dGhyb3VnaHJnYjExcHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1MiArMCwwIEBACi0jaWYgMA0K
LS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIg
OS4zMC45MjAwLjE2Mzg0DQotLy8NCi0vLw0KLS8vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0K
LS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1h
dCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8g
U2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAg
ICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8v
DQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5k
ZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlICBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0gLS0tLS0t
DQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9T
ICAgZmxvYXQgICAgICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAg
ICAgICAxICAgICBOT05FICAgZmxvYXQgICB4eSAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWdu
YXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0
ZXIgU3lzVmFsdWUgIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0t
LSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQg
ICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICBmbG9hdCAgIHh5encN
Ci0vLw0KLXBzXzRfMA0KLWRjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQNCi1kY2xfcmVzb3Vy
Y2VfdGV4dHVyZTJkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHMg
bGluZWFyIHYxLnh5DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi1zYW1wbGUg
cjAueHl6dywgdjEueHl4eCwgdDAueHl6dywgczANCi1tb3YgbzAueHl6LCByMC54eXp4DQotbW92
IG8wLncsIGwoMS4wMDAwMDApDQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgNCBpbnN0cnVjdGlv
biBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX1Bhc3N0aHJvdWdoUkdC
W10gPQ0KLXsNCi0gICAgIDY4LCAgODgsICA2NiwgIDY3LCAxMjUsIDE4NiwgDQotICAgIDI1MCwg
MjQyLCAxMTMsIDI1NSwgIDU5LCAyMzksIA0KLSAgICAxMTksIDE1OCwgMjM3LCAgNzgsIDIyMCwg
IDQzLCANCi0gICAgMTYwLCAgNDYsICAgMSwgICAwLCAgIDAsICAgMCwgDQotICAgIDEyOCwgICAy
LCAgIDAsICAgMCwgICA1LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDUyLCAgIDAsICAgMCwgICAw
LCANCi0gICAgMjIwLCAgIDAsICAgMCwgICAwLCAgNTIsICAgMSwgDQotICAgICAgMCwgICAwLCAx
MDQsICAgMSwgICAwLCAgIDAsIA0KLSAgICAgIDQsICAgMiwgICAwLCAgIDAsICA4MiwgIDY4LCAN
Ci0gICAgIDY5LCAgNzAsIDE2MCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCANCi0g
ICAgIDI4LCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgDQotICAgIDI1NSwgMjU1LCAgIDAsICAg
MSwgICAwLCAgIDAsIA0KLSAgICAxMDgsICAgMCwgICAwLCAgIDAsICA5MiwgICAwLCANCi0gICAg
ICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAxMDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCANCi0gICAgICAwLCAg
IDAsICAgNSwgICAwLCAgIDAsICAgMCwgDQotICAgICAgNCwgICAwLCAgIDAsICAgMCwgMjU1LCAy
NTUsIA0KLSAgICAyNTUsIDI1NSwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAxLCAgIDAs
ICAgMCwgICAwLCAgMTMsICAgMCwgDQotICAgICAgMCwgICAwLCAgODMsICA5NywgMTA5LCAxMTIs
IA0KLSAgICAxMDgsIDEwMSwgMTE0LCAgIDAsICA4NCwgMTAxLCANCi0gICAgMTIwLCAxMTYsIDEx
NywgMTE0LCAxMDEsICAgMCwgDQotICAgICA3NywgMTA1LCAgOTksIDExNCwgMTExLCAxMTUsIA0K
LSAgICAxMTEsIDEwMiwgMTE2LCAgMzIsICA0MCwgIDgyLCANCi0gICAgIDQxLCAgMzIsICA3Miwg
IDc2LCAgODMsICA3NiwgDQotICAgICAzMiwgIDgzLCAxMDQsICA5NywgMTAwLCAxMDEsIA0KLSAg
ICAxMTQsICAzMiwgIDY3LCAxMTEsIDEwOSwgMTEyLCANCi0gICAgMTA1LCAxMDgsIDEwMSwgMTE0
LCAgMzIsICA1NywgDQotICAgICA0NiwgIDUxLCAgNDgsICA0NiwgIDU3LCAgNTAsIA0KLSAgICAg
NDgsICA0OCwgIDQ2LCAgNDksICA1NCwgIDUxLCANCi0gICAgIDU2LCAgNTIsICAgMCwgMTcxLCAg
NzMsICA4MywgDQotICAgICA3MSwgIDc4LCAgODAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDIs
ICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCANCi0gICAgICAwLCAgIDAsICA1NiwgICAwLCAgIDAs
ICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgICAzLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgMTUsICAg
MCwgDQotICAgICAgMCwgICAwLCAgNjgsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsIA0KLSAgICAgIDAsICAgMCwgIDgz
LCAgODYsICA5NSwgIDgwLCANCi0gICAgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgDQot
ICAgICA3OCwgICAwLCAgODQsICA2OSwgIDg4LCAgNjcsIA0KLSAgICAgNzksICA3OSwgIDgyLCAg
NjgsICAgMCwgMTcxLCANCi0gICAgMTcxLCAxNzEsICA3OSwgIDgzLCAgNzEsICA3OCwgDQotICAg
ICA0NCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICA4LCAgIDAs
ICAgMCwgICAwLCANCi0gICAgIDMyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDMsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCi0gICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQotICAgICA4Mywg
IDg2LCAgOTUsICA4NCwgIDY1LCAgODIsIA0KLSAgICAgNzEsICA2OSwgIDg0LCAgIDAsIDE3MSwg
MTcxLCANCi0gICAgIDgzLCAgNzIsICA2OCwgIDgyLCAxNDgsICAgMCwgDQotICAgICAgMCwgICAw
LCAgNjQsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgMzcsICAgMCwgICAwLCAgIDAsICA5MCwgICAw
LCANCi0gICAgICAwLCAgIDMsICAgMCwgIDk2LCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAg
IDAsICAgMCwgIDg4LCAgMjQsIA0KLSAgICAgIDAsICAgNCwgICAwLCAxMTIsICAxNiwgICAwLCAN
Ci0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgODUsICA4NSwgDQotICAgICAgMCwgICAwLCAgOTgs
ICAxNiwgICAwLCAgIDMsIA0KLSAgICAgNTAsICAxNiwgIDE2LCAgIDAsICAgMSwgICAwLCANCi0g
ICAgICAwLCAgIDAsIDEwMSwgICAwLCAgIDAsICAgMywgDQotICAgIDI0MiwgIDMyLCAgMTYsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgMTA0LCAgIDAsICAgMCwgICAyLCANCi0gICAg
ICAxLCAgIDAsICAgMCwgICAwLCAgNjksICAgMCwgDQotICAgICAgMCwgICA5LCAyNDIsICAgMCwg
IDE2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICA3MCwgIDE2LCANCi0gICAgIDE2
LCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQotICAgICA3MCwgMTI2LCAgMTYsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgOTYsICAxNiwgICAwLCANCi0gICAgICAwLCAg
IDAsICAgMCwgICAwLCAgNTQsICAgMCwgDQotICAgICAgMCwgICA1LCAxMTQsICAzMiwgIDE2LCAg
IDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICA3MCwgICAyLCANCi0gICAgIDE2LCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICA1NCwgICAwLCAgIDAsICAgNSwgMTMwLCAgMzIs
IA0KLSAgICAgMTYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAxLCAgNjQsICAg
MCwgICAwLCAgIDAsICAgMCwgDQotICAgIDEyOCwgIDYzLCAgNjIsICAgMCwgICAwLCAgIDEsIA0K
LSAgICAgODMsICA4NCwgIDY1LCAgODQsIDExNiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgNCwg
ICAwLCAgIDAsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
IDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEs
ICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQotICAgICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgIDAsICAgMA0KLX07DQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJv
dWdocmdiYTExcHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmExMXBzLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGQ3ZDJhMjVhYmEwOTZjM2ZhYTM3ZGYyMWViNTNjOTg0MzhkMDRi
YTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVk
L3Bhc3N0aHJvdWdocmdiYTExcHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0j
aWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29t
cGlsZXIgOS4zMC45MjAwLjE2Mzg0DQotLy8NCi0vLw0KLS8vLw0KLS8vIFJlc291cmNlIEJpbmRp
bmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUg
IEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0t
DQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAg
ICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAwICAgICAgICAxDQotLy8NCi0v
Lw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAg
ICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlICBGb3JtYXQgICBVc2VkDQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0g
LS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAg
ICAgUE9TICAgZmxvYXQgICAgICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4
eSAgICAgICAgICAxICAgICBOT05FICAgZmxvYXQgICB4eSAgDQotLy8NCi0vLw0KLS8vIE91dHB1
dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sg
UmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0NCi0vLyBTVl9U
QVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICBmbG9hdCAg
IHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQNCi1kY2xf
cmVzb3VyY2VfdGV4dHVyZTJkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5w
dXRfcHMgbGluZWFyIHYxLnh5DQotZGNsX291dHB1dCBvMC54eXp3DQotc2FtcGxlIG8wLnh5encs
IHYxLnh5eHgsIHQwLnh5encsIHMwDQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgMiBpbnN0cnVj
dGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX1Bhc3N0aHJvdWdo
UkdCQVtdID0NCi17DQotICAgICA2OCwgIDg4LCAgNjYsICA2NywgMTUxLCAxNTIsIA0KLSAgICAg
IDgsIDEwMiwgMTc0LCAxMzUsICA3NiwgIDU3LCANCi0gICAgMTAwLCAxNDYsICA1OSwgIDc0LCAy
MDUsICAzNSwgDQotICAgIDIwNiwgIDIxLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgODAs
ICAgMiwgICAwLCAgIDAsICAgNSwgICAwLCANCi0gICAgICAwLCAgIDAsICA1MiwgICAwLCAgIDAs
ICAgMCwgDQotICAgIDIyMCwgICAwLCAgIDAsICAgMCwgIDUyLCAgIDEsIA0KLSAgICAgIDAsICAg
MCwgMTA0LCAgIDEsICAgMCwgICAwLCANCi0gICAgMjEyLCAgIDEsICAgMCwgICAwLCAgODIsICA2
OCwgDQotICAgICA2OSwgIDcwLCAxNjAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwg
DQotICAgICAyOCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsIA0KLSAgICAyNTUsIDI1NSwgICAw
LCAgIDEsICAgMCwgICAwLCANCi0gICAgMTA4LCAgIDAsICAgMCwgICAwLCAgOTIsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAxLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgMTAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDQsICAgMCwgICAwLCAgIDAsIDI1
NSwgMjU1LCANCi0gICAgMjU1LCAyNTUsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMSwg
ICAwLCAgIDAsICAgMCwgIDEzLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDgzLCAgOTcsIDEwOSwg
MTEyLCANCi0gICAgMTA4LCAxMDEsIDExNCwgICAwLCAgODQsIDEwMSwgDQotICAgIDEyMCwgMTE2
LCAxMTcsIDExNCwgMTAxLCAgIDAsIA0KLSAgICAgNzcsIDEwNSwgIDk5LCAxMTQsIDExMSwgMTE1
LCANCi0gICAgMTExLCAxMDIsIDExNiwgIDMyLCAgNDAsICA4MiwgDQotICAgICA0MSwgIDMyLCAg
NzIsICA3NiwgIDgzLCAgNzYsIA0KLSAgICAgMzIsICA4MywgMTA0LCAgOTcsIDEwMCwgMTAxLCAN
Ci0gICAgMTE0LCAgMzIsICA2NywgMTExLCAxMDksIDExMiwgDQotICAgIDEwNSwgMTA4LCAxMDEs
IDExNCwgIDMyLCAgNTcsIA0KLSAgICAgNDYsICA1MSwgIDQ4LCAgNDYsICA1NywgIDUwLCANCi0g
ICAgIDQ4LCAgNDgsICA0NiwgIDQ5LCAgNTQsICA1MSwgDQotICAgICA1NiwgIDUyLCAgIDAsIDE3
MSwgIDczLCAgODMsIA0KLSAgICAgNzEsICA3OCwgIDgwLCAgIDAsICAgMCwgICAwLCANCi0gICAg
ICAyLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgDQotICAgICAgMCwgICAwLCAgNTYsICAgMCwg
ICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAw
LCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDE1
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDY4LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAg
IDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLCANCi0gICAgICAwLCAgIDAs
ICA4MywgIDg2LCAgOTUsICA4MCwgDQotICAgICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzks
IA0KLSAgICAgNzgsICAgMCwgIDg0LCAgNjksICA4OCwgIDY3LCANCi0gICAgIDc5LCAgNzksICA4
MiwgIDY4LCAgIDAsIDE3MSwgDQotICAgIDE3MSwgMTcxLCAgNzksICA4MywgIDcxLCAgNzgsIA0K
LSAgICAgNDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICAgOCwg
ICAwLCAgIDAsICAgMCwgDQotICAgICAzMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAzLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgMTUsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
ODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCANCi0gICAgIDcxLCAgNjksICA4NCwgICAwLCAx
NzEsIDE3MSwgDQotICAgICA4MywgIDcyLCAgNjgsICA4MiwgMTAwLCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgIDY0LCAgIDAsICAgMCwgICAwLCANCi0gICAgIDI1LCAgIDAsICAgMCwgICAwLCAgOTAs
ICAgMCwgDQotICAgICAgMCwgICAzLCAgIDAsICA5NiwgIDE2LCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgICAwLCAgIDAsICA4OCwgIDI0LCANCi0gICAgICAwLCAgIDQsICAgMCwgMTEyLCAgMTYsICAg
MCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDg1LCAgODUsIA0KLSAgICAgIDAsICAgMCwg
IDk4LCAgMTYsICAgMCwgICAzLCANCi0gICAgIDUwLCAgMTYsICAxNiwgICAwLCAgIDEsICAgMCwg
DQotICAgICAgMCwgICAwLCAxMDEsICAgMCwgICAwLCAgIDMsIA0KLSAgICAyNDIsICAzMiwgIDE2
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICA2OSwgICAwLCAgIDAsICAgOSwgDQot
ICAgIDI0MiwgIDMyLCAgMTYsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDcwLCAg
MTYsICAxNiwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgNzAsIDEyNiwgDQotICAg
ICAxNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICA5NiwgIDE2LCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICA2MiwgICAwLCAgIDAsICAgMSwgDQotICAgICA4
MywgIDg0LCAgNjUsICA4NCwgMTE2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAyLCAgIDAsICAg
MCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwg
ICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMSwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAN
Ci0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0g
ICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAw
LCAgIDAsICAgMCwgICAwDQotfTsNCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvc3RhbmRhcmR2cy5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2Nv
bXBpbGVkL3N0YW5kYXJkdnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZiODk1
OTVjYmI1NWNjMzJjM2I4MzczZDc4MTFjMDlmMGFmNDk2MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvc3RhbmRhcmR2cy5oCisrKyAvZGV2L251
bGwKQEAgLTEsNjcgKzAsMCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3Nv
ZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NA0KLS8vDQotLy8vDQot
Ly8gUGFyYW1ldGVyczoNCi0vLw0KLS8vICAgZmxvYXQ0IGhhbGZQaXhlbFNpemU7DQotLy8NCi0v
Lw0KLS8vIFJlZ2lzdGVyczoNCi0vLw0KLS8vICAgTmFtZSAgICAgICAgICBSZWcgICBTaXplDQot
Ly8gICAtLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0NCi0vLyAgIGhhbGZQaXhlbFNpemUgYzAgICAg
ICAgMQ0KLS8vDQotDQotICAgIHZzXzJfMA0KLSAgICBkZWYgYzEsIDAuNSwgLTAuNSwgMSwgMA0K
LSAgICBkY2xfcG9zaXRpb24gdjANCi0gICAgYWRkIG9Qb3MsIHYwLCBjMA0KLSAgICBtYWQgb1Qw
LCB2MCwgYzEueHl6eiwgYzEueHh3dw0KLQ0KLS8vIGFwcHJveGltYXRlbHkgMiBpbnN0cnVjdGlv
biBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX3ZzMjBfc3RhbmRhcmR2c1td
ID0NCi17DQotICAgICAgMCwgICAyLCAyNTQsIDI1NSwgMjU0LCAyNTUsIA0KLSAgICAgMzYsICAg
MCwgIDY3LCAgODQsICA2NSwgIDY2LCANCi0gICAgIDI4LCAgIDAsICAgMCwgICAwLCAgODcsICAg
MCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU0LCAyNTUsIA0KLSAgICAgIDEsICAgMCwg
ICAwLCAgIDAsICAyOCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwg
DQotICAgICA4MCwgICAwLCAgIDAsICAgMCwgIDQ4LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAy
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgNjQsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAxMDQsICA5NywgMTA4LCAx
MDIsICA4MCwgMTA1LCANCi0gICAgMTIwLCAxMDEsIDEwOCwgIDgzLCAxMDUsIDEyMiwgDQotICAg
IDEwMSwgICAwLCAxNzEsIDE3MSwgICAxLCAgIDAsIA0KLSAgICAgIDMsICAgMCwgICAxLCAgIDAs
ICAgNCwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MCwgICAwLCAxMTgsIDExNSwgIDk1LCAgNTAsIA0KLSAgICAgOTUsICA0OCwgICAwLCAgNzcsIDEw
NSwgIDk5LCANCi0gICAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgDQotICAgICAzMiwg
IDQwLCAgODIsICA0MSwgIDMyLCAgNzIsIA0KLSAgICAgNzYsICA4MywgIDc2LCAgMzIsICA4Mywg
MTA0LCANCi0gICAgIDk3LCAxMDAsIDEwMSwgMTE0LCAgMzIsICA2NywgDQotICAgIDExMSwgMTA5
LCAxMTIsIDEwNSwgMTA4LCAxMDEsIA0KLSAgICAxMTQsICAzMiwgIDU3LCAgNDYsICA1MSwgIDQ4
LCANCi0gICAgIDQ2LCAgNTcsICA1MCwgIDQ4LCAgNDgsICA0NiwgDQotICAgICA0OSwgIDU0LCAg
NTEsICA1NiwgIDUyLCAgIDAsIA0KLSAgICAxNzEsIDE3MSwgIDgxLCAgIDAsICAgMCwgICA1LCAN
Ci0gICAgICAxLCAgIDAsICAxNSwgMTYwLCAgIDAsICAgMCwgDQotICAgICAgMCwgIDYzLCAgIDAs
ICAgMCwgICAwLCAxOTEsIA0KLSAgICAgIDAsICAgMCwgMTI4LCAgNjMsICAgMCwgICAwLCANCi0g
ICAgICAwLCAgIDAsICAzMSwgICAwLCAgIDAsICAgMiwgDQotICAgICAgMCwgICAwLCAgIDAsIDEy
OCwgICAwLCAgIDAsIA0KLSAgICAgMTUsIDE0NCwgICAyLCAgIDAsICAgMCwgICAzLCANCi0gICAg
ICAwLCAgIDAsICAxNSwgMTkyLCAgIDAsICAgMCwgDQotICAgIDIyOCwgMTQ0LCAgIDAsICAgMCwg
MjI4LCAxNjAsIA0KLSAgICAgIDQsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCANCi0gICAgIDE1
LCAyMjQsICAgMCwgICAwLCAyMjgsIDE0NCwgDQotICAgICAgMSwgICAwLCAxNjQsIDE2MCwgICAx
LCAgIDAsIA0KLSAgICAyNDAsIDE2MCwgMjU1LCAyNTUsICAgMCwgICAwDQotfTsNCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRl
cnMvZ2VuZXJhdGVfc2hhZGVycy5iYXQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVycy5iYXQKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDkxZTI5OGU4M2Y0MzAzMDJmNjVhYTMzNjI0MTVhNzAzYjBlZmI5
MzMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2dlbmVyYXRl
X3NoYWRlcnMuYmF0CisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotQEVDSE8gT0ZGDQot
UkVNDQotUkVNIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLg0KLVJFTSBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotUkVNIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuDQotUkVNDQotDQotUEFUSCAlUEFUSCU7JVByb2dyYW1GaWxlcyh4ODYp
JVxXaW5kb3dzIEtpdHNcOC4wXGJpblx4ODY7JURYU0RLX0RJUiVcVXRpbGl0aWVzXGJpblx4ODYN
Ci0NCi1meGMgL0Ugc3RhbmRhcmR2cyAvVCB2c18yXzAgL0ZoIGNvbXBpbGVkL3N0YW5kYXJkdnMu
aCBCbGl0LnZzDQotZnhjIC9FIGZsaXB5dnMgL1QgdnNfMl8wIC9GaCBjb21waWxlZC9mbGlweXZz
LmggQmxpdC52cw0KLWZ4YyAvRSBwYXNzdGhyb3VnaHBzIC9UIHBzXzJfMCAvRmggY29tcGlsZWQv
cGFzc3Rocm91Z2hwcy5oIEJsaXQucHMNCi1meGMgL0UgbHVtaW5hbmNlcHMgL1QgcHNfMl8wIC9G
aCBjb21waWxlZC9sdW1pbmFuY2Vwcy5oIEJsaXQucHMNCi1meGMgL0UgY29tcG9uZW50bWFza3Bz
IC9UIHBzXzJfMCAvRmggY29tcGlsZWQvY29tcG9uZW50bWFza3BzLmggQmxpdC5wcw0KLQ0KLWZ4
YyAvRSBWU19QYXNzdGhyb3VnaCAvVCB2c180XzAgL0ZoIGNvbXBpbGVkL3Bhc3N0aHJvdWdoMTF2
cy5oIFBhc3N0aHJvdWdoMTEuaGxzbA0KLWZ4YyAvRSBQU19QYXNzdGhyb3VnaFJHQkEgL1QgcHNf
NF8wIC9GaCBjb21waWxlZC9wYXNzdGhyb3VnaHJnYmExMXBzLmggUGFzc3Rocm91Z2gxMS5obHNs
DQotZnhjIC9FIFBTX1Bhc3N0aHJvdWdoUkdCIC9UIHBzXzRfMCAvRmggY29tcGlsZWQvcGFzc3Ro
cm91Z2hyZ2IxMXBzLmggUGFzc3Rocm91Z2gxMS5obHNsDQotZnhjIC9FIFBTX1Bhc3N0aHJvdWdo
THVtIC9UIHBzXzRfMCAvRmggY29tcGlsZWQvcGFzc3Rocm91Z2hsdW0xMXBzLmggUGFzc3Rocm91
Z2gxMS5obHNsDQotZnhjIC9FIFBTX1Bhc3N0aHJvdWdoTHVtQWxwaGEgL1QgcHNfNF8wIC9GaCBj
b21waWxlZC9wYXNzdGhyb3VnaGx1bWFscGhhMTFwcy5oIFBhc3N0aHJvdWdoMTEuaGxzbA0KLQ0K
LWZ4YyAvRSBWU19DbGVhciAvVCB2c180XzAgL0ZoIGNvbXBpbGVkL2NsZWFyMTF2cy5oIENsZWFy
MTEuaGxzbA0KLWZ4YyAvRSBQU19DbGVhclNpbmdsZSAvVCBwc180XzAgL0ZoIGNvbXBpbGVkL2Ns
ZWFyc2luZ2xlMTFwcy5oIENsZWFyMTEuaGxzbA0KLWZ4YyAvRSBQU19DbGVhck11bHRpcGxlIC9U
IHBzXzRfMCAvRmggY29tcGlsZWQvY2xlYXJtdWx0aXBsZTExcHMuaCBDbGVhcjExLmhsc2wNCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L3ZlcnRleGNvbnZlcnNpb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvdmVydGV4Y29udmVyc2lvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA1OTBiOWQ0OGEzODZmZmMxNzI1NzFkYTQ0ZDliZTIwZDEwMjkwMTljLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvdmVydGV4Y29udmVyc2lvbi5oCisrKyAvZGV2L251
bGwKQEAgLTEsMjAzICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIHZlcnRleGNvbnZl
cnNpb24uaDogQSBsaWJyYXJ5IG9mIHZlcnRleCBjb252ZXJzaW9uIGNsYXNzZXMgdGhhdCBjYW4g
YmUgdXNlZCB0byBidWlsZAotLy8gdGhlIEZvcm1hdENvbnZlcnRlciBvYmplY3RzIHVzZWQgYnkg
dGhlIGJ1ZmZlciBjb252ZXJzaW9uIHN5c3RlbS4KLQotI2lmbmRlZiBMSUJHTEVTVjJfVkVSVEVY
Q09OVkVSU0lPTl9IXwotI2RlZmluZSBMSUJHTEVTVjJfVkVSVEVYQ09OVkVSU0lPTl9IXwotCi1u
YW1lc3BhY2UgcngKLXsKLQotLy8gQ29udmVyc2lvbiB0eXBlczoKLS8vIHN0YXRpYyBjb25zdCBi
b29sIGlkZW50aXR5OiB0cnVlIGlmIHRoaXMgaXMgYW4gaWRlbnRpdHkgdHJhbnNmb3JtLCBmYWxz
ZSBvdGhlcndpc2UKLS8vIHN0YXRpYyBVIGNvbnZlcnQoVCk6IGNvbnZlcnQgYSBzaW5nbGUgZWxl
bWVudCBmcm9tIHRoZSBpbnB1dCB0eXBlIHRvIHRoZSBvdXRwdXQgdHlwZQotLy8gdHlwZWRlZiAu
Li4gT3V0cHV0VHlwZTogdGhlIHR5cGUgcHJvZHVjZWQgYnkgdGhpcyBjb252ZXJzaW9uCi0KLXRl
bXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IElkZW50aXR5Ci17Ci0gICAgc3RhdGljIGNvbnN0IGJv
b2wgaWRlbnRpdHkgPSB0cnVlOwotCi0gICAgdHlwZWRlZiBUIE91dHB1dFR5cGU7Ci0KLSAgICBz
dGF0aWMgVCBjb252ZXJ0KFQgeCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB4OwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlIDxjbGFzcyBGcm9tVCwgY2xhc3MgVG9UPgotc3RydWN0IENhc3QKLXsKLSAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9IGZhbHNlOwotCi0gICAgdHlwZWRlZiBUb1Qg
T3V0cHV0VHlwZTsKLQotICAgIHN0YXRpYyBUb1QgY29udmVydChGcm9tVCB4KQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRvVD4oeCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGUg
PGNsYXNzIFQ+Ci1zdHJ1Y3QgQ2FzdDxULCBUPgotewotICAgIHN0YXRpYyBjb25zdCBib29sIGlk
ZW50aXR5ID0gdHJ1ZTsKLQotICAgIHR5cGVkZWYgVCBPdXRwdXRUeXBlOwotCi0gICAgc3RhdGlj
IFQgY29udmVydChUIHgpCi0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oeCk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgTm9ybWFsaXplCi17Ci0g
ICAgc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHkgPSBmYWxzZTsKLQotICAgIHR5cGVkZWYgZmxv
YXQgT3V0cHV0VHlwZTsKLQotICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0KFQgeCkKLSAgICB7Ci0g
ICAgICAgIHR5cGVkZWYgc3RkOjpudW1lcmljX2xpbWl0czxUPiBOTDsKLSAgICAgICAgZmxvYXQg
ZiA9IHN0YXRpY19jYXN0PGZsb2F0Pih4KTsKLQotICAgICAgICBpZiAoTkw6OmlzX3NpZ25lZCkK
LSAgICAgICAgewotICAgICAgICAgICAgLy8gY29uc3QgZmxvYXQgPT4gVkMyMDA4IGNvbXB1dGVz
IGl0IGF0IGNvbXBpbGUgdGltZQotICAgICAgICAgICAgLy8gc3RhdGljIGNvbnN0IGZsb2F0ID0+
IFZDMjAwOCBjb21wdXRlcyBpdCB0aGUgZmlyc3QgdGltZSB3ZSBnZXQgaGVyZSwgc3RvcmVzIGl0
IHRvIG1lbW9yeSB3aXRoIHN0YXRpYyBndWFyZCBhbmQgYWxsIHRoYXQuCi0gICAgICAgICAgICBj
b25zdCBmbG9hdCBkaXZpc29yID0gMS4wZi8oMipzdGF0aWNfY2FzdDxmbG9hdD4oTkw6Om1heCgp
KSsxKTsKLSAgICAgICAgICAgIHJldHVybiAoMipmKzEpKmRpdmlzb3I7Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZi9OTDo6bWF4KCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgRnJvbVR5cGUsIHN0ZDo6c2l6
ZV90IFNjYWxlQml0cz4KLXN0cnVjdCBGaXhlZFRvRmxvYXQKLXsKLSAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpZGVudGl0eSA9IGZhbHNlOwotCi0gICAgdHlwZWRlZiBmbG9hdCBPdXRwdXRUeXBlOwot
Ci0gICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoRnJvbVR5cGUgeCkKLSAgICB7Ci0gICAgICAgIGNv
bnN0IGZsb2F0IGRpdmlzb3IgPSAxLjBmIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0YXRpY19jYXN0
PEZyb21UeXBlPigxKSA8PCBTY2FsZUJpdHMpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHgpICogZGl2aXNvcjsKLSAgICB9Ci19OwotCi0vLyBXaWRlbiB0eXBlczoKLS8vIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaW5pdGlhbFdpZHRoOiBudW1iZXIgb2YgY29tcG9uZW50
cyBiZWZvcmUgY29udmVyc2lvbgotLy8gc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBmaW5hbFdp
ZHRoOiBudW1iZXIgb2YgY29tcG9uZW50cyBhZnRlciBjb252ZXJzaW9uCi0KLS8vIEZsb2F0IGlz
IHN1cHBvcnRlZCBhdCBhbnkgc2l6ZS4KLXRlbXBsYXRlIDxzdGQ6OnNpemVfdCBOPgotc3RydWN0
IE5vV2lkZW4KLXsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgaW5pdGlhbFdpZHRoID0g
TjsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgZmluYWxXaWR0aCA9IE47Ci19OwotCi0v
LyBTSE9SVCwgbm9ybS1TSE9SVCwgbm9ybS1VTlNJR05FRF9TSE9SVCBhcmUgc3VwcG9ydGVkIGJ1
dCBvbmx5IHdpdGggMiBvciA0IGNvbXBvbmVudHMKLXRlbXBsYXRlIDxzdGQ6OnNpemVfdCBOPgot
c3RydWN0IFdpZGVuVG9FdmVuCi17Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IGluaXRp
YWxXaWR0aCA9IE47Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IGZpbmFsV2lkdGggPSBO
KyhOJjEpOwotfTsKLQotdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+Ci1zdHJ1Y3QgV2lkZW5Ub0Zv
dXIKLXsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgaW5pdGlhbFdpZHRoID0gTjsKLSAg
ICBzdGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgZmluYWxXaWR0aCA9IDQ7Ci19OwotCi0vLyBNb3N0
IHR5cGVzIGhhdmUgMCBhbmQgMSB0aGF0IGFyZSBqdXN0IHRoYXQuCi10ZW1wbGF0ZSA8Y2xhc3Mg
VD4KLXN0cnVjdCBTaW1wbGVEZWZhdWx0VmFsdWVzCi17Ci0gICAgc3RhdGljIFQgemVybygpIHsg
cmV0dXJuIHN0YXRpY19jYXN0PFQ+KDApOyB9Ci0gICAgc3RhdGljIFQgb25lKCkgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8VD4oMSk7IH0KLX07Ci0KLS8vIEJ1dCBub3JtYWxpc2VkIHR5cGVzIG9ubHkg
c3RvcmUgWzAsMV0gb3IgWy0xLDFdIHNvIDEuMCBpcyByZXByZXNlbnRlZCBieSB0aGUgbWF4IHZh
bHVlLgotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgTm9ybWFsaXplZERlZmF1bHRWYWx1ZXMK
LXsKLSAgICBzdGF0aWMgVCB6ZXJvKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oMCk7IH0KLSAg
ICBzdGF0aWMgVCBvbmUoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKTsg
fQotfTsKLQotLy8gQ29udmVydGVyOgotLy8gc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHk6IHRy
dWUgaWYgdGhpcyBpcyBhbiBpZGVudGl0eSB0cmFuc2Zvcm0gKHdpdGggbm8gd2lkZW5pbmcpCi0v
LyBzdGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgZmluYWxTaXplOiBudW1iZXIgb2YgYnl0ZXMgcGVy
IG91dHB1dCB2ZXJ0ZXgKLS8vIHN0YXRpYyB2b2lkIGNvbnZlcnRBcnJheShjb25zdCB2b2lkICpp
biwgc3RkOjpzaXplX3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBuLCB2b2lkICpvdXQpOiBjb252ZXJ0
IGFuIGFycmF5IG9mIHZlcnRpY2VzLiBJbnB1dCBtYXkgYmUgc3RyaWRlZCwgYnV0IG91dHB1dCB3
aWxsIGJlIHVuc3RyaWRlZC4KLQotdGVtcGxhdGUgPGNsYXNzIEluVCwgY2xhc3MgV2lkZW5SdWxl
LCBjbGFzcyBDb252ZXJ0ZXIsIGNsYXNzIERlZmF1bHRWYWx1ZVJ1bGUgPSBTaW1wbGVEZWZhdWx0
VmFsdWVzPEluVD4gPgotc3RydWN0IFZlcnRleERhdGFDb252ZXJ0ZXIKLXsKLSAgICB0eXBlZGVm
IHR5cGVuYW1lIENvbnZlcnRlcjo6T3V0cHV0VHlwZSBPdXRwdXRUeXBlOwotICAgIHR5cGVkZWYg
SW5UIElucHV0VHlwZTsKLQotICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0gKFdpZGVu
UnVsZTo6aW5pdGlhbFdpZHRoID09IFdpZGVuUnVsZTo6ZmluYWxXaWR0aCkgJiYgQ29udmVydGVy
OjppZGVudGl0eTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgZmluYWxTaXplID0gV2lk
ZW5SdWxlOjpmaW5hbFdpZHRoICogc2l6ZW9mKE91dHB1dFR5cGUpOwotCi0gICAgc3RhdGljIHZv
aWQgY29udmVydEFycmF5KGNvbnN0IElucHV0VHlwZSAqaW4sIHN0ZDo6c2l6ZV90IHN0cmlkZSwg
c3RkOjpzaXplX3QgbiwgT3V0cHV0VHlwZSAqb3V0KQotICAgIHsKLSAgICAgICAgZm9yIChzdGQ6
OnNpemVfdCBpID0gMDsgaSA8IG47IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3Qg
SW5wdXRUeXBlICplaW4gPSBwb2ludGVyQWRkQnl0ZXMoaW4sIGkgKiBzdHJpZGUpOwotCi0gICAg
ICAgICAgICBjb3B5Q29tcG9uZW50KG91dCwgZWluLCAwLCBzdGF0aWNfY2FzdDxPdXRwdXRUeXBl
PihEZWZhdWx0VmFsdWVSdWxlOjp6ZXJvKCkpKTsKLSAgICAgICAgICAgIGNvcHlDb21wb25lbnQo
b3V0LCBlaW4sIDEsIHN0YXRpY19jYXN0PE91dHB1dFR5cGU+KERlZmF1bHRWYWx1ZVJ1bGU6Onpl
cm8oKSkpOwotICAgICAgICAgICAgY29weUNvbXBvbmVudChvdXQsIGVpbiwgMiwgc3RhdGljX2Nh
c3Q8T3V0cHV0VHlwZT4oRGVmYXVsdFZhbHVlUnVsZTo6emVybygpKSk7Ci0gICAgICAgICAgICBj
b3B5Q29tcG9uZW50KG91dCwgZWluLCAzLCBzdGF0aWNfY2FzdDxPdXRwdXRUeXBlPihEZWZhdWx0
VmFsdWVSdWxlOjpvbmUoKSkpOwotCi0gICAgICAgICAgICBvdXQgKz0gV2lkZW5SdWxlOjpmaW5h
bFdpZHRoOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgY29udmVydEFycmF5
KGNvbnN0IHZvaWQgKmluLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90IG4sIHZvaWQg
Km91dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0QXJyYXkoc3RhdGljX2Nhc3Q8Y29u
c3QgSW5wdXRUeXBlKj4oaW4pLCBzdHJpZGUsIG4sIHN0YXRpY19jYXN0PE91dHB1dFR5cGUqPihv
dXQpKTsKLSAgICB9Ci0KLSAgcHJpdmF0ZToKLSAgICAvLyBBZHZhbmNlIHRoZSBnaXZlbiBwb2lu
dGVyIGJ5IGEgbnVtYmVyIG9mIGJ5dGVzIChub3QgcG9pbnRlZC10byBlbGVtZW50cykuCi0gICAg
dGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICAgc3RhdGljIFQgKnBvaW50ZXJBZGRCeXRlcyhUICpiYXNl
UHRyLCBzdGQ6OnNpemVfdCBudW1CeXRlcykKLSAgICB7Ci0gICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PFQgKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGJhc2VQdHIpICsgbnVt
Qnl0ZXMpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGNvcHlDb21wb25lbnQoT3V0cHV0VHlw
ZSAqb3V0LCBjb25zdCBJbnB1dFR5cGUgKmluLCBzdGQ6OnNpemVfdCBlbGVtZW50aW5kZXgsIE91
dHB1dFR5cGUgZGVmYXVsdHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFdpZGVuUnVsZTo6Zmlu
YWxXaWR0aCA+IGVsZW1lbnRpbmRleCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKFdpZGVu
UnVsZTo6aW5pdGlhbFdpZHRoID4gZWxlbWVudGluZGV4KQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dFtlbGVtZW50aW5kZXhdID0gQ29udmVydGVyOjpjb252ZXJ0KGluW2VsZW1l
bnRpbmRleF0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG91dFtlbGVtZW50aW5kZXhdID0gZGVmYXVsdHZhbHVlOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfTsKLQotfQotCi0jZW5kaWYgICAvLyBMSUJH
TEVTVjJfVkVSVEVYQ09OVkVSU0lPTl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL3RoaXJkX3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRz
Q2xhbXBlci5oCmluZGV4IDBkNGUxYTM3NGNhODE4MjIyMTI4YmFhZGM5ODdiNWQ4ZDIwMWE4NDMu
LmY3MjVmNTViNTc0YmQ2YWQ4OGI0MGVlZDdmOTRiNThkZjIzMjU2ZWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0eS9jb21waWxlci9BcnJheUJvdW5k
c0NsYW1wZXIuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkv
Y29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmgKQEAgLTI4LDggKzI4LDggQEAKIAogI2luY2x1
ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5mb1Npbmsu
aCIKLSNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL0luZm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9p
bnRlcm1lZGlhdGUuaCIKIAogY2xhc3MgQXJyYXlCb3VuZHNDbGFtcGVyIHsKIHB1YmxpYzoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0eS9tdXJtdXJo
YXNoL011cm11ckhhc2gzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9w
YXJ0eS9tdXJtdXJoYXNoL011cm11ckhhc2gzLmNwcAppbmRleCBmMTFmYjIzMzJmMWYxNTA5MjNm
YjBjNGZiNjUxZGU3OTEzZTg3ODI2Li5kZDg2MjkyNjQ5ZWM1MmQ4NGFlNDcyYTFiZTdjZWFjYTU1
MjgwYTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFy
dHkvbXVybXVyaGFzaC9NdXJtdXJIYXNoMy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL3RoaXJkX3BhcnR5L211cm11cmhhc2gvTXVybXVySGFzaDMuY3BwCkBAIC0xNiwyMCAr
MTYsMjAgQEAKIAogI2lmIGRlZmluZWQoX01TQ19WRVIpCiAKLSNkZWZpbmUgRk9SQ0VfSU5MSU5F
ICAgIF9fZm9yY2VpbmxpbmUKKyNkZWZpbmUgRk9SQ0VfSU5MSU5FCV9fZm9yY2VpbmxpbmUKIAog
I2luY2x1ZGUgPHN0ZGxpYi5oPgogCi0jZGVmaW5lIFJPVEwzMih4LHkpICAgIF9yb3RsKHgseSkK
LSNkZWZpbmUgUk9UTDY0KHgseSkgICAgX3JvdGw2NCh4LHkpCisjZGVmaW5lIFJPVEwzMih4LHkp
CV9yb3RsKHgseSkKKyNkZWZpbmUgUk9UTDY0KHgseSkJX3JvdGw2NCh4LHkpCiAKICNkZWZpbmUg
QklHX0NPTlNUQU5UKHgpICh4KQogCiAvLyBPdGhlciBjb21waWxlcnMKIAotI2Vsc2UgICAgLy8g
ZGVmaW5lZChfTVNDX1ZFUikKKyNlbHNlCS8vIGRlZmluZWQoX01TQ19WRVIpCiAKLSNkZWZpbmUg
ICAgRk9SQ0VfSU5MSU5FIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQorI2RlZmluZQlG
T1JDRV9JTkxJTkUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCiAKIGlubGluZSB1aW50
MzJfdCByb3RsMzIgKCB1aW50MzJfdCB4LCBpbnQ4X3QgciApCiB7CkBAIC00MSw4ICs0MSw4IEBA
IGlubGluZSB1aW50NjRfdCByb3RsNjQgKCB1aW50NjRfdCB4LCBpbnQ4X3QgciApCiAgIHJldHVy
biAoeCA8PCByKSB8ICh4ID4+ICg2NCAtIHIpKTsKIH0KIAotI2RlZmluZSAgICBST1RMMzIoeCx5
KSAgICByb3RsMzIoeCx5KQotI2RlZmluZSBST1RMNjQoeCx5KSAgICByb3RsNjQoeCx5KQorI2Rl
ZmluZQlST1RMMzIoeCx5KQlyb3RsMzIoeCx5KQorI2RlZmluZSBST1RMNjQoeCx5KQlyb3RsNjQo
eCx5KQogCiAjZGVmaW5lIEJJR19DT05TVEFOVCh4KSAoeCMjTExVKQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJtdXJI
YXNoMy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L211cm11cmhh
c2gvTXVybXVySGFzaDMuaAppbmRleCA3NWNkNGJhNTgxNTRhOTViN2YxNGFhODVhNmUzMjJkZDJm
NTRkMzM0Li5jMDhmNGYyNTg1MmMwNzZlMzczMThjMmE5MzM1NzYxNmI1Yjk0YjM2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvbXVybXVyaGFzaC9N
dXJtdXJIYXNoMy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0
eS9tdXJtdXJoYXNoL011cm11ckhhc2gzLmgKQEAgLTE4LDcgKzE4LDcgQEAgdHlwZWRlZiB1bnNp
Z25lZCBfX2ludDY0IHVpbnQ2NF90OwogCiAvLyBPdGhlciBjb21waWxlcnMKIAotI2Vsc2UgICAg
Ly8gZGVmaW5lZChfTVNDX1ZFUikKKyNlbHNlCS8vIGRlZmluZWQoX01TQ19WRVIpCiAKICNpbmNs
dWRlIDxzdGRpbnQuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAxN2YxMzQxMWQ3MjY0MThh
YmQ0ZDc4NzJkYjhmZTIwN2M3NzA3ZTJkLi5hOGI3ZjQ0MGFjZTE5NDAzZmY1NmYwOTU1MDIyMzM1
NmQ0YjAxODRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMjg1MCw1MiArMjg1MCw1NCBAQCBp
ZiAoV1RGX1VTRV8zRF9HUkFQSElDUykKICAgICAgICAgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09S
RV9ESVJ9L2dsc2xhbmcuY3BwCiAgICAgICAgICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElS
fS9nbHNsYW5nX3RhYi5jcHAKIAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCi0gICAgICAgICR7VEhJUkRQQVJU
WV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9Db2RlR2VuLmNwcAotICAgICAgICAke1RISVJEUEFS
VFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIuY3BwCi0gICAgICAgICR7VEhJUkRQ
QVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3RDYWxsRGVwdGguY3BwCi0gICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5
LmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25v
c3RpY3MuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9E
aXJlY3RpdmVIYW5kbGVyLmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvRm9yTG9vcFVucm9sbC5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL0luZm9TaW5rLmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVEbGwuY3BwCi0gICAgICAgICR7VEhJUkRQ
QVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplR0xQb3NpdGlvbi5jcHAKLSAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJz
ZUNvbnRleHQuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxl
ci9JbnRlcm1UcmF2ZXJzZS5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3Jj
L2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcAotICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0RVNTTC5jcHAKLSAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuY3BwCi0gICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5jcHAK
LSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wu
Y3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUNv
bnRleHQuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9Q
b29sQWxsb2MuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxl
ci9RdWFsaWZpZXJBbGl2ZS5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3Jj
L2NvbXBpbGVyL1JlbW92ZVRyZWUuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9TZWFyY2hTeW1ib2wuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcAotICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCi0gICAgICAgICR7VEhJUkRQ
QVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5jcHAKLSAgICAgICAg
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcAot
ICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhM
U0wuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9VbmZv
bGRTaG9ydENpcmN1aXQuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9j
b21waWxlci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci9Vbmlmb3JtLmNwcAotICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAKLSAgICAgICAg
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5jcHAKLSAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlUGFja2Vy
LmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVmVyc2lv
bkdMU0wuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9k
ZWJ1Zy5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2lu
dGVybU91dC5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L3BhcnNlQ29uc3QuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci91dGlsLmNwcAotCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNw
cAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgv
RGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwCisgICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0J1aWx0
SW5GdW5jdGlvbkVtdWxhdG9yLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNwcAorICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5jcHAKKyAgICAgICAg
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0Q2Fs
bERlcHRoLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9EZXRlY3REaXNjb250aW51aXR5LmNwcAorICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5jcHAKKyAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0
aXZlSGFuZGxlci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvRm9yTG9vcFVucm9sbC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuY3BwCisgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemUu
Y3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL0luaXRpYWxpemVWYXJpYWJsZXMuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVEbGwuY3BwCisgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVH
TFBvc2l0aW9uLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcAorICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1UcmF2ZXJzZS5j
cHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvSW50ZXJtZWRpYXRlLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAKKyAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0RVNTTC5j
cHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvT3V0cHV0R0xTTC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuY3BwCisgICAgICAgICR7VEhJUkRQQVJU
WV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuY3BwCisgICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1BhcnNl
Q29udGV4dC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvUG9vbEFsbG9jLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9RdWFsaWZpZXJBbGl2ZS5jcHAKKyAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUmVtb3ZlVHJlZS5j
cHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvUmV3cml0ZUVsc2VCbG9ja3MuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1NlYXJjaFN5bWJvbC5jcHAKKyAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU2hhZGVyTGFuZy5jcHAK
KyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
U3ltYm9sVGFibGUuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JFU1NMLmNwcAorICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yR0xTTC5jcHAKKyAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvckhMU0wuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1VuZm9sZFNob3J0Q2lyY3VpdC5jcHAKKyAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0
QVNULmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9Vbmlmb3JtLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcAorICAgICAgICAke1RI
SVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZUluZm8u
Y3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1ZhcmlhYmxlUGFja2VyLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9WZXJzaW9uR0xTTC5jcHAKKyAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVidWcuY3BwCisgICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2ludGVybU91
dC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvcGFyc2VDb25zdC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5jcHAKKworICAgICAgICAke1RISVJEUEFSVFlfRElS
fS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGgu
Y3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwCisgICAgICAgICR7VEhJUkRQ
QVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVu
Y3lHcmFwaE91dHB1dC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwCiAK
ICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9EaWFnbm9zdGljc0Jhc2UuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwCkBAIC0yOTA5
LDggKzI5MTEsOCBAQCBpZiAoV1RGX1VTRV8zRF9HUkFQSElDUykKICAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbi5jcHAKICAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tl
bml6ZXIuY3BwCiAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcAotICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAKKyAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5n
L1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcAogCiAgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy90aGlyZF9wYXJ0eS9jb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIuY3Bw
CiAgICAgKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225001</attachid>
            <date>2014-02-23 07:25:56 -0800</date>
            <delta_ts>2014-02-23 07:58:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-129232-20140224022534.patch</filename>
            <type>text/plain</type>
            <size>3887659</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY0NTUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggZTJhMTVkZjMzNmQ4ODRkNWQ3MDdiZjI4NDBiMWNlY2YxODUzOWVkYS4uMjUyNzZhYjQyNTgx
MzUyOTVkMGIxZDY1ZGUxZmQ3MGY0M2FkNTYzMyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE2IEBACisyMDE0LTAyLTIzICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxl
LmNvbT4KKworICAgICAgICBVcGRhdGUgQU5HTEUgdG8gODM2YmQyMTc2ZTU2MDdiMTQ4NDZjZjFm
YmM1OTMyZGJjOTEzMThmNAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTI5MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgSSBhbHNvIHJlYXBwbGllZCBzb21lIG9mIG91ciBjaGFuZ2VzIGJlbG93LCBpbmNs
dWRpbmcgZGlzYWJsaW5nIHRoZSBjbGFuZworICAgICAgICBkZXByZWNhdGlvbiB3YXJuaW5ncyBp
biBzb21lIGZpbGVzLCBhZGRpbmcgdGhlIEFwcGxlIG5vdGUgYWJvdXQgbGljZW5zZQorICAgICAg
ICBhbmQgZGVmaW5pbmcgWVlfTk9fSU5QVVQuCisKKyAgICAgICAgSHVnZSBsaXN0IG9mIHNvdXJj
ZSBjaGFuZ2VzIG9taXR0ZWQuCisKIDIwMTMtMTItMTggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8
Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEZpeCBtYWtlIGRpc3Rj
aGVjay4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCA1NWRjMDU2ZjAzYTRkOTA5MzhjN2YyOWQzMThhZjQzZWU1ZDNi
ZTQ1Li5iYzlkZDM5MTMzODY0MmE3NjczM2RiZDc0NjNhNjUzMjkxYTNmNWE2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTQgQEAKKzIwMTQtMDItMjMgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUu
Y29tPgorCisgICAgICAgIFVwZGF0ZSBBTkdMRSB0byA4MzZiZDIxNzZlNTYwN2IxNDg0NmNmMWZi
YzU5MzJkYmM5MTMxOGY0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMjkyMzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBOZXcgZmlsZXMgYWRkZWQgdG8gQ01ha2VMaXN0cyBmb3IgRUZMLgorCisgICAgICAg
ICogQ01ha2VMaXN0cy50eHQ6CisKIDIwMTQtMDItMjIgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBw
bGUuY29tPgogCiAgICAgICAgIExldHRlcnByZXNzIGVmZmVjdCBkaXNhYmxlZCBmb3Igc3ludGhl
dGljIGl0YWxpYwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUucGxp
c3QgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS5wbGlzdAppbmRleCA3MWY1YWI3NWM3
MDU1ZWE1YThlM2Q0ZDEwNzgxNjBmMzM3ODJmMmMyLi5lZjI5NGI5Y2RhNzQ3NjdiODUzZTYzNGVl
MmVlNWIyNjdhZWMxMzU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdM
RS5wbGlzdAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS5wbGlzdApAQCAtNiwx
MyArNiwxMyBAQAogCQk8a2V5Pk9wZW5Tb3VyY2VQcm9qZWN0PC9rZXk+CiAJCTxzdHJpbmc+QU5H
TEU8L3N0cmluZz4KIAkJPGtleT5PcGVuU291cmNlVmVyc2lvbjwva2V5PgotCQk8c3RyaW5nPnIx
NjQxPC9zdHJpbmc+CisJCTxzdHJpbmc+ODM2YmQyMTc2ZTU2MDdiMTQ4NDZjZjFmYmM1OTMyZGJj
OTEzMThmNDwvc3RyaW5nPgogCQk8a2V5Pk9wZW5Tb3VyY2VXZWJzaXRlVVJMPC9rZXk+CiAJCTxz
dHJpbmc+aHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZ2xlcHJvamVjdC88L3N0cmluZz4KIAkJ
PGtleT5PcGVuU291cmNlU0NNPC9rZXk+Ci0JCTxzdHJpbmc+Z2l0IGNsb25lIGh0dHBzOi8vY29k
ZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0LyAmJiBjZCBhbmdsZXByb2plY3QgJiYgZ2l0IGNo
ZWNrb3V0IGE2MGUwODA1NzIxZjYyYzI4YTU1ZmFmMmRmNzQ0NzJjYzVmYzkxZmM8L3N0cmluZz4K
KwkJPHN0cmluZz5naXQgY2xvbmUgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmdsZXByb2pl
Y3QvICYmIGNkIGFuZ2xlcHJvamVjdCAmJiBnaXQgY2hlY2tvdXQgODM2YmQyMTc2ZTU2MDdiMTQ4
NDZjZjFmYmM1OTMyZGJjOTEzMThmNDwvc3RyaW5nPgogCQk8a2V5Pk9wZW5Tb3VyY2VJbXBvcnRE
YXRlPC9rZXk+Ci0JCTxzdHJpbmc+MjAxMy0xMS0wNzwvc3RyaW5nPgorCQk8c3RyaW5nPjIwMTQt
MDItMTg8L3N0cmluZz4KIAkJPGtleT5PcGVuU291cmNlTGljZW5zZTwva2V5PgogCQk8c3RyaW5n
PkJTRDwvc3RyaW5nPgogCQk8a2V5Pk9wZW5Tb3VyY2VMaWNlbnNlRmlsZTwva2V5PgpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUudmN4cHJvai9saWJHTEVTdjIudmN4
cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnZjeHByb2ovbGliR0xFU3YyLnZj
eHByb2oKaW5kZXggOWM4OTgzMDE5ZjNmNTEyMzgwOTJiNGYwNzlhY2M2NWQzZTY5OTU2ZS4uOGQx
MmQyOTI5NWRmZDBmY2UyN2Q0YmFmNWVmZDY5Mzg5MjY3NjQzZiAxMDA3NTUKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvQU5HTEUudmN4cHJvai9saWJHTEVTdjIudmN4cHJvagorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS52Y3hwcm9qL2xpYkdMRVN2Mi52Y3hwcm9qCkBA
IC0yMDcsNDAgKzIwNyw0MCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbW1v
blxSZWZDb3VudE9iamVjdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNc
bGliR0xFU3YyXFJlbmRlcmJ1ZmZlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEJsaXQuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxGZW5jZTExLmNwcCIgLz4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcRmVuY2U5LmNwcCIgLz4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFc
RmVuY2UxMS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXGQzZDlcRmVuY2U5LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcQnVmZmVyU3RvcmFnZS5jcHAiIC8+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEJ1ZmZlclN0b3JhZ2UxMS5j
cHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVy
XEJ1ZmZlclN0b3JhZ2U5LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xs
aWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcQnVmZmVyU3RvcmFnZTExLmNwcCIgLz4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxCdWZmZXJTdG9y
YWdlOS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJl
bmRlcmVyXEltYWdlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJH
TEVTdjJccmVuZGVyZXJcSW1hZ2U5LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxJbWFnZTkuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxJbmRleEJ1ZmZlci5jcHAiIC8+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEluZGV4
QnVmZmVyMTEuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2
MlxyZW5kZXJlclxJbmRleEJ1ZmZlcjkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxJbmRleEJ1ZmZlcjExLmNwcCIgLz4KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxJbmRl
eEJ1ZmZlcjkuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2
MlxyZW5kZXJlclxJbmRleERhdGFNYW5hZ2VyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcSW1hZ2VTU0UyLmNwcCIgLz4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcSW1hZ2UxMS5jcHAiIC8+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDEx
XEltYWdlMTEuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2
MlxyZW5kZXJlclxJbnB1dExheW91dENhY2hlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUXVlcnkxMS5jcHAiIC8+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFF1ZXJ5OS5jcHAiIC8+Cisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFF1
ZXJ5MTEuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2Mlxy
ZW5kZXJlclxkM2Q5XFF1ZXJ5OS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxz
cmNcbGliR0xFU3YyXHJlbmRlcmVyXFJlbmRlcmVyLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUmVuZGVyZXIxMS5jcHAiIC8+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXHJlbmRlcmVyMTFf
dXRpbHMuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2Mlxy
ZW5kZXJlclxSZW5kZXJlcjkuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Jj
XGxpYkdMRVN2MlxyZW5kZXJlclxyZW5kZXJlcjlfdXRpbHMuY3BwIiAvPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxSZW5kZXJUYXJnZXQxMS5jcHAi
IC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQz
ZDExXFJlbmRlcmVyMTEuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxp
YkdMRVN2MlxyZW5kZXJlclxkM2QxMVxyZW5kZXJlcjExX3V0aWxzLmNwcCIgLz4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxSZW5kZXJlcjku
Y3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJl
clxkM2Q5XHJlbmRlcmVyOV91dGlscy5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFJlbmRlclRhcmdldDExLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUmVuZGVyVGFy
Z2V0OS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJl
bmRlcmVyXFJlbmRlclN0YXRlQ2FjaGUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxTaGFkZXJFeGVjdXRhYmxlMTEuY3BwIiAvPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxTaGFkZXJFeGVj
dXRhYmxlOS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXFN3YXBDaGFpbjExLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcU3dhcENoYWluOS5jcHAiIC8+CisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFNoYWRlckV4ZWN1dGFi
bGUxMS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJl
bmRlcmVyXGQzZDlcU2hhZGVyRXhlY3V0YWJsZTkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxTd2FwQ2hhaW4xMS5jcHAiIC8+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlc
U3dhcENoYWluOS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xF
U3YyXHJlbmRlcmVyXFRleHR1cmVTdG9yYWdlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcVGV4dHVyZVN0b3JhZ2UxMS5jcHAiIC8+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFRleHR1cmVT
dG9yYWdlOS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXGQzZDExXFRleHR1cmVTdG9yYWdlMTEuY3BwIiAvPgorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XFRleHR1cmVTdG9yYWdlOS5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVy
XFZlcnRleEJ1ZmZlci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGli
R0xFU3YyXHJlbmRlcmVyXFZlcnRleEJ1ZmZlcjExLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcVmVydGV4QnVmZmVyOS5jcHAiIC8+Cisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFZl
cnRleEJ1ZmZlcjExLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJH
TEVTdjJccmVuZGVyZXJcZDNkOVxWZXJ0ZXhCdWZmZXI5LmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcVmVydGV4RGF0YU1hbmFnZXIuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxW
ZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHNyY1xsaWJHTEVTdjJcUmVzb3VyY2VNYW5hZ2VyLmNwcCIgLz4KQEAgLTI3NSwzNyArMjc1LDM3
IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tbW9uXFJlZkNvdW50T2JqZWN0
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXFJlbmRlcmJ1
ZmZlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5k
ZXJlclxCbGl0LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXEZlbmNlMTEuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xs
aWJHTEVTdjJccmVuZGVyZXJcRmVuY2U5LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXEZlbmNlMTEuaCIgLz4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxGZW5jZTkuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcRmVuY2VJ
bXBsLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRl
cmVyXEJ1ZmZlclN0b3JhZ2UuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xs
aWJHTEVTdjJccmVuZGVyZXJcQnVmZmVyU3RvcmFnZTExLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEJ1ZmZlclN0b3JhZ2U5LmgiIC8+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXEJ1
ZmZlclN0b3JhZ2UxMS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdM
RVN2MlxyZW5kZXJlclxkM2Q5XEJ1ZmZlclN0b3JhZ2U5LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGdlbmVyYXRlbWlwLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEltYWdlLmgiIC8+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEltYWdl
MTEuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVy
ZXJcSW1hZ2U5LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXGQzZDExXEltYWdlMTEuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxJbWFnZTkuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcSW5kZXhCdWZmZXIuaCIgLz4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcSW5kZXhCdWZm
ZXIxMS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5k
ZXJlclxJbmRleEJ1ZmZlcjkuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xs
aWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcSW5kZXhCdWZmZXIxMS5oIiAvPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XEluZGV4QnVmZmVyOS5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxJ
bmRleERhdGFNYW5hZ2VyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGli
R0xFU3YyXHJlbmRlcmVyXElucHV0TGF5b3V0Q2FjaGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUXVlcnkxMS5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxRdWVyeTExLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFF1
ZXJ5SW1wbC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2Mlxy
ZW5kZXJlclxRdWVyeTkuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJH
TEVTdjJccmVuZGVyZXJcZDNkOVxRdWVyeTkuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUmVuZGVyZXIuaCIgLz4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUmVuZGVyZXIxMS5oIiAvPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxyZW5kZXJlcjEx
X3V0aWxzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJl
bmRlcmVyXFJlbmRlcmVyOS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxp
YkdMRVN2MlxyZW5kZXJlclxyZW5kZXJlcjlfdXRpbHMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcUmVuZGVyZXIxMS5oIiAvPgor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxy
ZW5kZXJlcjExX3V0aWxzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGli
R0xFU3YyXHJlbmRlcmVyXGQzZDlcUmVuZGVyZXI5LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlccmVuZGVyZXI5X3V0aWxzLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFJlbmRl
clRhcmdldC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2Mlxy
ZW5kZXJlclxSZW5kZXJUYXJnZXQxMS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
c3JjXGxpYkdMRVN2MlxyZW5kZXJlclxSZW5kZXJUYXJnZXQ5LmgiIC8+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFJlbmRlclRhcmdldDEx
LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVy
XGQzZDlcUmVuZGVyVGFyZ2V0OS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGxpYkdMRVN2MlxyZW5kZXJlclxSZW5kZXJTdGF0ZUNhY2hlLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFNoYWRlckNhY2hlLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFNoYWRlckV4
ZWN1dGFibGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJc
cmVuZGVyZXJcU2hhZGVyRXhlY3V0YWJsZTExLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFNoYWRlckV4ZWN1dGFibGU5LmgiIC8+CisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFNoYWRl
ckV4ZWN1dGFibGUxMS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdM
RVN2MlxyZW5kZXJlclxkM2Q5XFNoYWRlckV4ZWN1dGFibGU5LmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRcY2xl
YXIxMXZzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJl
bmRlcmVyXHNoYWRlcnNcY29tcGlsZWRcY2xlYXJtdWx0aXBsZTExcHMuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcc2hhZGVyc1xjb21waWxl
ZFxjbGVhcnNpbmdsZTExcHMuaCIgLz4KQEAgLTMyMCwxNSArMzIwLDE1IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRc
cGFzc3Rocm91Z2hyZ2JhMTFwcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGxpYkdMRVN2MlxyZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVkXHN0YW5kYXJkdnMuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcU3dhcENoYWlu
LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVy
XFN3YXBDaGFpbjExLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xF
U3YyXHJlbmRlcmVyXFN3YXBDaGFpbjkuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcU3dhcENoYWluMTEuaCIgLz4KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxTd2FwQ2hhaW45
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVy
XFRleHR1cmVTdG9yYWdlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGli
R0xFU3YyXHJlbmRlcmVyXFRleHR1cmVTdG9yYWdlMTEuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcVGV4dHVyZVN0b3JhZ2U5LmgiIC8+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFRl
eHR1cmVTdG9yYWdlMTEuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJH
TEVTdjJccmVuZGVyZXJcZDNkOVxUZXh0dXJlU3RvcmFnZTkuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcVmVydGV4QnVmZmVyLmgiIC8+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFZlcnRleEJ1
ZmZlcjExLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJl
bmRlcmVyXFZlcnRleEJ1ZmZlcjkuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNy
Y1xsaWJHTEVTdjJccmVuZGVyZXJcdmVydGV4Y29udmVyc2lvbi5oIiAvPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxWZXJ0ZXhCdWZmZXIx
MS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJl
clxkM2Q5XFZlcnRleEJ1ZmZlcjkuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNy
Y1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVx2ZXJ0ZXhjb252ZXJzaW9uLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFZlcnRleERhdGFNYW5h
Z2VyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRl
cmVyXFZlcnRleERlY2xhcmF0aW9uQ2FjaGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHNyY1xsaWJHTEVTdjJccmVzb3VyY2UuaCIgLz4KQEAgLTM0MSwxMSArMzQxLDExIEBACiAg
IDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgogICAgIDxOb25lIEluY2x1ZGU9Ii4uXHNyY1xs
aWJHTEVTdjJcbGliR0xFU3YyLmRlZiIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxzcmNcbGli
R0xFU3YyXHJlbmRlcmVyXHNoYWRlcnNcQmxpdC5wcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXHNoYWRlcnNcQmxpdC52cyIgLz4KLSAgICA8Tm9uZSBJ
bmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXHNoYWRlcnNcQ2xlYXIxMS5obHNsIiAv
PgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcc2hhZGVyc1xn
ZW5lcmF0ZV9zaGFkZXJzLmJhdCIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xF
U3YyXHJlbmRlcmVyXHNoYWRlcnNcUGFzc3Rocm91Z2gxMS5obHNsIiAvPgorICAgIDxOb25lIElu
Y2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxzaGFkZXJzXEJsaXQucHMiIC8+
CisgICAgPE5vbmUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XHNoYWRl
cnNcQmxpdC52cyIgLz4KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRl
cmVyXGQzZDExXHNoYWRlcnNcQ2xlYXIxMS5obHNsIiAvPgorICAgIDxOb25lIEluY2x1ZGU9Ii4u
XHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxzaGFkZXJzXGdlbmVyYXRlX3NoYWRlcnMuYmF0
IiAvPgorICAgIDxOb25lIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFc
c2hhZGVyc1xQYXNzdGhyb3VnaDExLmhsc2wiIC8+CiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdy
b3VwPgogICAgIDxSZXNvdXJjZUNvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxsaWJH
TEVTdjIucmMiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS52
Y3hwcm9qL2xpYkdMRVN2Mi52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9BTkdMRS52Y3hwcm9qL2xpYkdMRVN2Mi52Y3hwcm9qLmZpbHRlcnMKaW5kZXggZGZjMDZmMWNi
ZDhhZjJkOGZiNTQ3MmVhZjhjZmNlNDA0ZDA1MGRmOS4uYTk2NDk2NjEwNjk4YTljMTJlMTcyZDZi
NTgwMzNlMWViZWQ4YmJmYSAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5H
TEUudmN4cHJvai9saWJHTEVTdjIudmN4cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL0FOR0xFLnZjeHByb2ovbGliR0xFU3YyLnZjeHByb2ouZmlsdGVycwpAQCAtMTI4
LDg4ICsxMjgsODggQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJc
cmVuZGVyZXJcQnVmZmVyU3RvcmFnZS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNc
UmVuZGVyZXI8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcQnVmZmVyU3RvcmFnZTExLmNwcCI+CisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXEJ1ZmZl
clN0b3JhZ2UxMS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwv
RmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Jj
XGxpYkdMRVN2MlxyZW5kZXJlclxGZW5jZTExLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXEZlbmNlMTEuY3BwIj4KICAgICAgIDxG
aWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcSW1hZ2Ux
MS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJl
clxkM2QxMVxJbWFnZTExLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJl
cjExPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEluZGV4QnVmZmVyMTEuY3BwIj4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcSW5kZXhCdWZmZXIx
MS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgog
ICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2
MlxyZW5kZXJlclxRdWVyeTExLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNc
bGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFF1ZXJ5MTEuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291
cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUmVuZGVyZXIxMS5jcHAi
PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Qx
MVxSZW5kZXJlcjExLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjEx
PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxz
cmNcbGliR0xFU3YyXHJlbmRlcmVyXHJlbmRlcmVyMTFfdXRpbHMuY3BwIj4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFccmVuZGVyZXIxMV91
dGlscy5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVy
PgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdM
RVN2MlxyZW5kZXJlclxSZW5kZXJUYXJnZXQxMS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxSZW5kZXJUYXJnZXQxMS5jcHAiPgog
ICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgogICAgIDwvQ2xD
b21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJl
clxTaGFkZXJFeGVjdXRhYmxlMTEuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNy
Y1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcU2hhZGVyRXhlY3V0YWJsZTExLmNwcCI+CiAgICAg
ICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBp
bGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFN3
YXBDaGFpbjExLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXGQzZDExXFN3YXBDaGFpbjExLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBG
aWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFRleHR1cmVTdG9yYWdlMTEuY3Bw
Ij4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNk
MTFcVGV4dHVyZVN0b3JhZ2UxMS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVu
ZGVyZXIxMTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxWZXJ0ZXhCdWZmZXIxMS5jcHAiPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxWZXJ0ZXhC
dWZmZXIxMS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwvRmls
dGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxp
YkdMRVN2MlxyZW5kZXJlclxCdWZmZXJTdG9yYWdlOS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XEJ1ZmZlclN0b3JhZ2U5LmNwcCI+
CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8L0Ns
Q29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVy
ZXJcRmVuY2U5LmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXGQzZDlcRmVuY2U5LmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xS
ZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcSW1hZ2U5LmNwcCI+CisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcSW1hZ2U5LmNwcCI+CiAg
ICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJc
SW5kZXhCdWZmZXI5LmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xF
U3YyXHJlbmRlcmVyXGQzZDlcSW5kZXhCdWZmZXI5LmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJj
ZSBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUXVlcnk5LmNwcCI+CisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcUXVlcnk5
LmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAg
ICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJc
cmVuZGVyZXJcUmVuZGVyZXI5LmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNc
bGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcUmVuZGVyZXI5LmNwcCI+CiAgICAgICA8RmlsdGVyPlNv
dXJjZSBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJccmVuZGVyZXI5X3V0aWxz
LmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVy
XGQzZDlccmVuZGVyZXI5X3V0aWxzLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xS
ZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUmVuZGVyVGFyZ2V0OS5jcHAiPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XFJlbmRlclRh
cmdldDkuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVy
PgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdM
RVN2MlxyZW5kZXJlclxTaGFkZXJFeGVjdXRhYmxlOS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XFNoYWRlckV4ZWN1dGFibGU5LmNw
cCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8
L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVu
ZGVyZXJcU3dhcENoYWluOS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxp
YkdMRVN2MlxyZW5kZXJlclxkM2Q5XFN3YXBDaGFpbjkuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291
cmNlIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxUZXh0dXJlU3RvcmFnZTku
Y3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJc
ZDNkOVxUZXh0dXJlU3RvcmFnZTkuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJl
bmRlcmVyOTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxWZXJ0ZXhCdWZmZXI5LmNwcCI+CisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcVmVydGV4QnVm
ZmVyOS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+
CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xF
U3YyXHJlbmRlcmVyXEJsaXQuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xs
aWJHTEVTdjJccmVuZGVyZXJcZDNkOVxCbGl0LmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBG
aWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcSW5wdXRMYXlvdXRDYWNoZS5jcHAi
PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Qx
MVxJbnB1dExheW91dENhY2hlLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5k
ZXJlcjExPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFJlbmRlclN0YXRlQ2FjaGUuY3BwIj4KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcUmVuZGVy
U3RhdGVDYWNoZS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwv
RmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Jj
XGxpYkdMRVN2MlxyZW5kZXJlclxWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmNwcCI+CisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcVmVydGV4RGVj
bGFyYXRpb25DYWNoZS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI5
PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxz
cmNcbGliR0xFU3YyXHByZWNvbXBpbGVkLmNwcCI+CkBAIC0zOTEsOTQgKzM5MSw5NCBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxWZXJ0ZXhEYXRh
TWFuYWdlci5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+
CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xF
U3YyXHJlbmRlcmVyXEJ1ZmZlclN0b3JhZ2UxMS5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcQnVmZmVyU3RvcmFnZTExLmgiPgogICAg
ICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgogICAgIDwvQ2xJbmNs
dWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxJ
bmRleEJ1ZmZlcjExLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2
MlxyZW5kZXJlclxkM2QxMVxJbmRleEJ1ZmZlcjExLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIg
RmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxRdWVyeTExLmgiPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxRdWVyeTEx
LmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgogICAg
IDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2Mlxy
ZW5kZXJlclxSZW5kZXJlcjExLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxp
YkdMRVN2MlxyZW5kZXJlclxkM2QxMVxSZW5kZXJlcjExLmgiPgogICAgICAgPEZpbHRlcj5IZWFk
ZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxSZW5kZXJUYXJnZXQxMS5o
Ij4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNk
MTFcUmVuZGVyVGFyZ2V0MTEuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJl
cjExPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFNoYWRlckV4ZWN1dGFibGUxMS5oIj4KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcU2hhZGVyRXhl
Y3V0YWJsZTExLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmls
dGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxp
YkdMRVN2MlxyZW5kZXJlclxTd2FwQ2hhaW4xMS5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcU3dhcENoYWluMTEuaCI+CiAgICAgICA8
RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFRleHR1
cmVTdG9yYWdlMTEuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXGQzZDExXFRleHR1cmVTdG9yYWdlMTEuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRl
ciBGaWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFZlcnRleEJ1ZmZlcjExLmgi
PgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Qx
MVxWZXJ0ZXhCdWZmZXIxMS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVy
MTE8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcQnVmZmVyU3RvcmFnZTkuaCI+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcQnVmZmVyU3RvcmFnZTku
aCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8
L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVu
ZGVyZXJcRmVuY2U5LmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2
MlxyZW5kZXJlclxkM2Q5XEZlbmNlOS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJl
bmRlcmVyOTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxJbWFnZTkuaCI+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcSW1hZ2U5LmgiPgogICAgICAg
PEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEluZGV4
QnVmZmVyOS5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVu
ZGVyZXJcZDNkOVxJbmRleEJ1ZmZlcjkuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xS
ZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUXVlcnk5LmgiPgorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XFF1ZXJ5OS5oIj4KICAgICAg
IDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRl
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxSZW5k
ZXJlcjkuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRl
cmVyXGQzZDlcUmVuZGVyZXI5LmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVy
ZXI5PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXHJlbmRlcmVyOV91dGlscy5oIj4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxyZW5kZXJlcjlfdXRp
bHMuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAg
ICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJc
cmVuZGVyZXJcUmVuZGVyVGFyZ2V0OS5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNy
Y1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxSZW5kZXJUYXJnZXQ5LmgiPgogICAgICAgPEZpbHRl
cj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFNoYWRlckV4ZWN1
dGFibGU5LmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5k
ZXJlclxkM2Q5XFNoYWRlckV4ZWN1dGFibGU5LmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmls
ZXNcUmVuZGVyZXI5PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFN3YXBDaGFpbjkuaCI+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcU3dhcENoYWlu
OS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPgogICAg
IDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2Mlxy
ZW5kZXJlclxUZXh0dXJlU3RvcmFnZTkuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxz
cmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcVGV4dHVyZVN0b3JhZ2U5LmgiPgogICAgICAgPEZp
bHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFZlcnRleEJ1
ZmZlcjkuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRl
cmVyXGQzZDlcVmVydGV4QnVmZmVyOS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJl
bmRlcmVyOTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxGZW5jZTExLmgiPgorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxGZW5jZTExLmgiPgogICAg
ICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgogICAgIDwvQ2xJbmNs
dWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxJ
bWFnZTExLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5k
ZXJlclxkM2QxMVxJbWFnZTExLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVy
ZXIxMTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxyZW5kZXJlcjExX3V0aWxzLmgiPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxyZW5kZXJlcjEx
X3V0aWxzLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVy
PgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdM
RVN2MlxyZW5kZXJlclxGZW5jZTkuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNc
bGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcRmVuY2U5LmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIg
RmlsZXNcUmVuZGVyZXJcUmVuZGVyZXI5PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFF1ZXJ5MTEuaCI+
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDEx
XFF1ZXJ5MTEuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlclxSZW5kZXJl
cjExPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEJsaXQuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcQmxpdC5oIj4KICAgICAgIDxGaWx0ZXI+
SGVhZGVyIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxTaGFkZXJDYWNoZS5o
Ij4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNk
OVxTaGFkZXJDYWNoZS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyOTwv
RmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGxpYkdMRVN2MlxyZW5kZXJlclxJbnB1dExheW91dENhY2hlLmgiPgorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxJbnB1dExheW91dENhY2hl
LmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgogICAg
IDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2Mlxy
ZW5kZXJlclxSZW5kZXJTdGF0ZUNhY2hlLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
c3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxSZW5kZXJTdGF0ZUNhY2hlLmgiPgogICAgICAg
PEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRl
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxWZXJ0
ZXhEZWNsYXJhdGlvbkNhY2hlLmgiPgpAQCAtNTA3LDEwICs1MDcsMTAgQEAKICAgICA8Tm9uZSBJ
bmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXHNoYWRlcnNcZ2VuZXJhdGVfc2hhZGVy
cy5iYXQiPgogICAgICAgPEZpbHRlcj5TaGFkZXJzPC9GaWx0ZXI+CiAgICAgPC9Ob25lPgotICAg
IDxOb25lIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcc2hhZGVyc1xQYXNzdGhy
b3VnaDExLmhsc2wiPgorICAgIDxOb25lIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVy
ZXJcZDNkMTFcc2hhZGVyc1xQYXNzdGhyb3VnaDExLmhsc2wiPgogICAgICAgPEZpbHRlcj5TaGFk
ZXJzPC9GaWx0ZXI+CiAgICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXHNyY1xsaWJH
TEVTdjJccmVuZGVyZXJcc2hhZGVyc1xDbGVhcjExLmhsc2wiPgorICAgIDxOb25lIEluY2x1ZGU9
Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcc2hhZGVyc1xDbGVhcjExLmhsc2wiPgog
ICAgICAgPEZpbHRlcj5TaGFkZXJzPC9GaWx0ZXI+CiAgICAgPC9Ob25lPgogICAgIDxOb25lIElu
Y2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJcbGliR0xFU3YyLmRlZiIgLz4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnZjeHByb2ovdHJhbnNsYXRvcl9jb21tb24udmN4
cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnZjeHByb2ovdHJhbnNsYXRvcl9j
b21tb24udmN4cHJvagppbmRleCA3M2YzZDI5NzgwMzM4MWE5MGI4MDRhYmFiMjQ4Njg2NDU1YzEx
YzczLi5mZGZiNDk2YmVkNGYzOWZiZWU4YjIwMzFiZDEzOWUzOTUzMzMyY2E5IDEwMDc1NQotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS52Y3hwcm9qL3RyYW5zbGF0b3JfY29tbW9u
LnZjeHByb2oKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUudmN4cHJvai90cmFu
c2xhdG9yX2NvbW1vbi52Y3hwcm9qCkBAIC0xMzksOTYgKzEzOSw5OCBAQAogICA8L0ltcG9ydEdy
b3VwPgogICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KICAgPEl0ZW1Hcm91
cD4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxCdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGls
ZXJcQ29kZUdlbi5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGls
ZXJcQ29tcGlsZXIuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBp
bGVyXGRlYnVnLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxl
clxEZXRlY3RDYWxsRGVwdGguY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXERpYWdub3N0aWNzLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHNyY1xjb21waWxlclxEaXJlY3RpdmVIYW5kbGVyLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHNyY1xjb21waWxlclxGb3JMb29wVW5yb2xsLmNwcCIgLz4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxJbmZvU2luay5jcHAiIC8+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcSW5pdGlhbGl6ZS5jcHAiIC8+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcSW5pdGlhbGl6ZURsbC5jcHAiIC8+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcSW5pdGlhbGl6ZUdMUG9zaXRp
b24uY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXEluaXRp
YWxpemVQYXJzZUNvbnRleHQuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXEludGVybWVkaWF0ZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxzcmNcY29tcGlsZXJcaW50ZXJtT3V0LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHNyY1xjb21waWxlclxJbnRlcm1UcmF2ZXJzZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwIiAvPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXG9zc291cmNlX3dpbi5jcHAiIC8+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJccGFyc2VDb25zdC5jcHAi
IC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcUGFyc2VDb250ZXh0
LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxQb29sQWxs
b2MuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFF1YWxp
ZmllckFsaXZlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxl
clxSZW1vdmVUcmVlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclxTaGFkZXJMYW5nLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclxTeW1ib2xUYWJsZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxz
cmNcY29tcGlsZXJcVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcCIgLz4KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx1dGlsLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHNyY1xjb21waWxlclxWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCIgLz4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxWYXJpYWJsZUluZm8uY3BwIiAvPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFZhcmlhYmxlUGFja2VyLmNw
cCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxnbHNsYW5nX2xl
eC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZ2xzbGFu
Z190YWIuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXGRl
cGdyYXBoXERlcGVuZGVuY3lHcmFwaC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxzcmNcY29tcGlsZXJcZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAiIC8+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZGVwZ3JhcGhcRGVwZW5kZW5j
eUdyYXBoT3V0cHV0LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclxkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAiIC8+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdGltaW5nXFJlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmcuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVy
XHRpbWluZ1xSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAiIC8+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcVmVyc2lvbkdMU0wuY3BwIiAvPgorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3IuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVy
XHRyYW5zbGF0b3JcQ29kZUdlbi5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxz
cmNcY29tcGlsZXJcdHJhbnNsYXRvclxDb21waWxlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxkZWJ1Zy5jcHAiIC8+CisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxEZXRlY3RDYWxsRGVw
dGguY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5z
bGF0b3JcRGlhZ25vc3RpY3MuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXHRyYW5zbGF0b3JcRGlyZWN0aXZlSGFuZGxlci5jcHAiIC8+CisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxGb3JMb29wVW5yb2xsLmNw
cCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9y
XEluZm9TaW5rLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxl
clx0cmFuc2xhdG9yXEluaXRpYWxpemUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSW5pdGlhbGl6ZVZhcmlhYmxlcy5jcHAiIC8+Cisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxJbml0aWFs
aXplRGxsLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0
cmFuc2xhdG9yXEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSW50ZXJtZWRpYXRlLmNwcCIgLz4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGludGVy
bU91dC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJh
bnNsYXRvclxJbnRlcm1UcmF2ZXJzZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAiIC8+Cisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxvc3NvdXJj
ZV93aW4uY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRy
YW5zbGF0b3JccGFyc2VDb25zdC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxz
cmNcY29tcGlsZXJcdHJhbnNsYXRvclxQYXJzZUNvbnRleHQuY3BwIiAvPgorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcUG9vbEFsbG9jLmNwcCIgLz4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFF1YWxp
ZmllckFsaXZlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxl
clx0cmFuc2xhdG9yXFJlbW92ZVRyZWUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcUmV3cml0ZUVsc2VCbG9ja3MuY3BwIiAvPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcU2hhZGVyTGFu
Zy5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNs
YXRvclxTeW1ib2xUYWJsZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNc
Y29tcGlsZXJcdHJhbnNsYXRvclxVbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwIiAvPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcdXRpbC5jcHAiIC8+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxWYWxp
ZGF0ZUxpbWl0YXRpb25zLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclx0cmFuc2xhdG9yXFZhcmlhYmxlSW5mby5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxWYXJpYWJsZVBhY2tlci5jcHAiIC8+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxnbHNs
YW5nX2xleC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJc
dHJhbnNsYXRvclxnbHNsYW5nX3RhYi5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGguY3BwIiAv
PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcZGVw
Z3JhcGhcRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGhP
dXRwdXQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRy
YW5zbGF0b3JcZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwIiAvPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcdGltaW5nXFJlc3Ry
aWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcdGltaW5nXFJlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFu
c2xhdG9yXFZlcnNpb25HTFNMLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNy
Y1x0aGlyZF9wYXJ0eVxjb21waWxlclxBcnJheUJvdW5kc0NsYW1wZXIuY3BwIiAvPgogICA8L0l0
ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KLSAgICA8Q3VzdG9tQnVpbGQgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXGdsc2xhbmcubCI+CisgICAgPEN1c3RvbUJ1aWxkIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclx0cmFuc2xhdG9yXGdsc2xhbmcubCI+CiAgICAgPC9DdXN0b21CdWlsZD4KLSAgICA8
Q3VzdG9tQnVpbGQgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXGdsc2xhbmcueSI+CisgICAgPEN1
c3RvbUJ1aWxkIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGdsc2xhbmcueSI+
CiAgICAgPC9DdXN0b21CdWlsZD4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcQmFzZVR5cGVzLmgiIC8+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxDb21tb24u
aCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxDb25zdGFudFVu
aW9uLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZGVidWcu
aCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxEZXRlY3RDYWxs
RGVwdGguaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxEaWFn
bm9zdGljcy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXERp
cmVjdGl2ZUhhbmRsZXIuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclxGb3JMb29wVW5yb2xsLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNc
Y29tcGlsZXJcSGFzaE5hbWVzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNc
Y29tcGlsZXJcSW5mb1NpbmsuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclxJbml0aWFsaXplLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNc
Y29tcGlsZXJcSW5pdGlhbGl6ZURsbC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
c3JjXGNvbXBpbGVyXEluaXRpYWxpemVHbG9iYWxzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxzcmNcY29tcGlsZXJcSW5pdGlhbGl6ZUdMUG9zaXRpb24uaCIgLz4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxJbml0aWFsaXplUGFyc2VDb250ZXh0Lmgi
IC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcaW50ZXJtZWRpYXRl
LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcbG9jYWxpbnRl
cm1lZGlhdGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxN
YXBMb25nVmFyaWFibGVOYW1lcy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXE1NYXAuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclxvc2luY2x1ZGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclxQYXJzZUNvbnRleHQuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclxQb29sQWxsb2MuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclxRdWFsaWZpZXJBbGl2ZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
c3JjXGNvbXBpbGVyXFJlbW92ZVRyZWUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHNyY1xjb21waWxlclxSZW5hbWVGdW5jdGlvbi5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcQmFzZVR5cGVzLmgiIC8+CisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxCdWlsdEluRnVuY3Rpb25F
bXVsYXRvci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRy
YW5zbGF0b3JcQ29tbW9uLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29t
cGlsZXJcdHJhbnNsYXRvclxDb25zdGFudFVuaW9uLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxkZWJ1Zy5oIiAvPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcRGV0ZWN0Q2FsbERlcHRoLmgi
IC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxE
aWFnbm9zdGljcy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVy
XHRyYW5zbGF0b3JcRGlyZWN0aXZlSGFuZGxlci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcRm9yTG9vcFVucm9sbC5oIiAvPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSGFzaE5hbWVzLmgi
IC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxJ
bmZvU2luay5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRy
YW5zbGF0b3JcSW5pdGlhbGl6ZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXHRyYW5zbGF0b3JcSW5pdGlhbGl6ZVZhcmlhYmxlcy5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSW5pdGlhbGl6ZURsbC5o
IiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3Jc
SW5pdGlhbGl6ZUdsb2JhbHMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclx0cmFuc2xhdG9yXEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCIgLz4KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGludGVybWVkaWF0ZS5o
IiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3Jc
bG9jYWxpbnRlcm1lZGlhdGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclx0cmFuc2xhdG9yXE1hcExvbmdWYXJpYWJsZU5hbWVzLmgiIC8+CisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxNTWFwLmgiIC8+CisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxvc2luY2x1ZGUu
aCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9y
XFBhcnNlQ29udGV4dC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBp
bGVyXHRyYW5zbGF0b3JcUG9vbEFsbG9jLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxRdWFsaWZpZXJBbGl2ZS5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcUmVtb3ZlVHJlZS5oIiAv
PgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcUmVu
YW1lRnVuY3Rpb24uaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxl
clx0cmFuc2xhdG9yXFJld3JpdGVFbHNlQmxvY2tzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxpbmNsdWRlXEdMU0xBTkdcU2hhZGVyTGFuZy5oIiAvPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFNoSGFuZGxlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcU3ltYm9sVGFibGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxUeXBlcy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cc3JjXGNvbXBpbGVyXFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5oIiAvPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHV0aWwuaCIgLz4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxWYWxpZGF0ZUxpbWl0YXRpb25zLmgiIC8+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcVmFyaWFibGVJbmZvLmgiIC8+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcVmFyaWFibGVQYWNrZXIu
aCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxnbHNsYW5nX3Rh
Yi5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRpbWluZ1xS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxzcmNcY29tcGlsZXJcdGltaW5nXFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgiIC8+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZGVwZ3JhcGhcRGVwZW5k
ZW5jeUdyYXBoLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJc
ZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cc3JjXGNvbXBpbGVyXGRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaE91dHB1dC5oIiAv
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFZlcnNpb25HTFNMLmgi
IC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxT
aEhhbmRsZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRy
YW5zbGF0b3JcU3ltYm9sVGFibGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNy
Y1xjb21waWxlclx0cmFuc2xhdG9yXFR5cGVzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxVbmZvbGRTaG9ydENpcmN1aXRBU1QuaCIgLz4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXHV0aWwu
aCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9y
XFZhbGlkYXRlTGltaXRhdGlvbnMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNy
Y1xjb21waWxlclx0cmFuc2xhdG9yXFZhcmlhYmxlSW5mby5oIiAvPgorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcVmFyaWFibGVQYWNrZXIuaCIgLz4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGdsc2xh
bmdfdGFiLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJh
bnNsYXRvclx0aW1pbmdcUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIiAvPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcdGltaW5nXFJlc3Ry
aWN0VmVydGV4U2hhZGVyVGltaW5nLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxz
cmNcY29tcGlsZXJcdHJhbnNsYXRvclxkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGguaCIgLz4KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGRlcGdyYXBo
XERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaE91dHB1dC5o
IiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3Jc
VmVyc2lvbkdMU0wuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1x0aGlyZF9w
YXJ0eVxjb21waWxlclxBcnJheUJvdW5kc0NsYW1wZXIuaCIgLz4KICAgPC9JdGVtR3JvdXA+CiAg
IDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMi
IC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS52Y3hwcm9qL3Ry
YW5zbGF0b3JfY29tbW9uLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L0FOR0xFLnZjeHByb2ovdHJhbnNsYXRvcl9jb21tb24udmN4cHJvai5maWx0ZXJzCmluZGV4IDk4
ZDc3N2UzYmNkODZhZGQ2YWFiMDBjYWVlZTFjYjk4MDg3MDkyN2YuLmQ1Mjg1Y2YxNGUzYzI2YjRh
NzM5YWZmYWMwYmEzNjY5YzVlOTQ0ZDQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL0FOR0xFLnZjeHByb2ovdHJhbnNsYXRvcl9jb21tb24udmN4cHJvai5maWx0ZXJzCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnZjeHByb2ovdHJhbnNsYXRvcl9jb21tb24u
dmN4cHJvai5maWx0ZXJzCkBAIC0yOSwyNjMgKzI5LDI2MyBAQAogICAgIDwvRmlsdGVyPgogICA8
L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNy
Y1xjb21waWxlclxnbHNsYW5nX2xleC5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
c3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcZ2xzbGFuZ19sZXguY3BwIj4KICAgICAgIDxGaWx0ZXI+
U291cmNlIEZpbGVzXGdlbmVyYXRlZDwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXGdsc2xhbmdfdGFiLmNwcCI+CisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxnbHNsYW5nX3Rh
Yi5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcZ2VuZXJhdGVkPC9GaWx0ZXI+CiAg
ICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJc
ZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGguY3BwIj4K
ICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGRlcGdyYXBoPC9GaWx0ZXI+CiAgICAgPC9DbENv
bXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZGVwZ3JhcGhc
RGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
c3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5j
cHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcZGVwZ3JhcGg8L0ZpbHRlcj4KICAgICA8
L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxkZXBn
cmFwaFxEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaE91dHB1
dC5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcZGVwZ3JhcGg8L0ZpbHRlcj4KICAg
ICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxk
ZXBncmFwaFxEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBo
VHJhdmVyc2UuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGRlcGdyYXBoPC9GaWx0
ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29t
cGlsZXJcdGltaW5nXFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIj4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXHRpbWluZ1xSZXN0cmlj
dEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0
aW1pbmc8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHNyY1xjb21waWxlclx0aW1pbmdcUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIj4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXHRpbWlu
Z1xSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2Ug
RmlsZXNcdGltaW5nPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxzcmNcdGhpcmRfcGFydHlcY29tcGlsZXJcQXJyYXlCb3VuZHNDbGFtcGVyLmNw
cCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxl
PgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFZhcmlhYmxlUGFja2Vy
LmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRv
clxWYXJpYWJsZVBhY2tlci5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRl
cj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclxCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3Bw
Ij4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcQ29tcGlsZXIuY3BwIj4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXENvbXBp
bGVyLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xD
b21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXGRlYnVnLmNw
cCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxk
ZWJ1Zy5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0Ns
Q29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxEZXRlY3RD
YWxsRGVwdGguY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0
cmFuc2xhdG9yXERldGVjdENhbGxEZXB0aC5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmls
ZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHNyY1xjb21waWxlclxEaWFnbm9zdGljcy5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcRGlhZ25vc3RpY3MuY3BwIj4KICAgICAgIDxGaWx0
ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcRGlyZWN0aXZlSGFuZGxlci5jcHAiPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcRGlyZWN0aXZlSGFu
ZGxlci5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0Ns
Q29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxGb3JMb29w
VW5yb2xsLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJh
bnNsYXRvclxGb3JMb29wVW5yb2xsLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwv
RmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXEluZm9TaW5rLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNc
Y29tcGlsZXJcdHJhbnNsYXRvclxJbmZvU2luay5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2Ug
RmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHNyY1xjb21waWxlclxJbml0aWFsaXplLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxJbml0aWFsaXplLmNwcCI+CiAgICAgICA8Rmls
dGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXEluaXRpYWxpemVEbGwuY3BwIj4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXEluaXRpYWxpemVWYXJp
YWJsZXMuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9D
bENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcSW5pdGlh
bGl6ZVBhcnNlQ29udGV4dC5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNv
bXBpbGVyXHRyYW5zbGF0b3JcSW5pdGlhbGl6ZURsbC5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3Vy
Y2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHNyY1xjb21waWxlclxJbnRlcm1lZGlhdGUuY3BwIj4KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXEluaXRpYWxpemVQYXJzZUNvbnRleHQu
Y3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBp
bGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcaW50ZXJtT3V0LmNw
cCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxJ
bnRlcm1lZGlhdGUuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAg
ICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJc
SW50ZXJtVHJhdmVyc2UuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclx0cmFuc2xhdG9yXGludGVybU91dC5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmls
ZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHNyY1xjb21waWxlclxNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAiPgorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSW50ZXJtVHJhdmVyc2UuY3BwIj4K
ICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcb3Nzb3VyY2Vfd2luLmNwcCI+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxNYXBM
b25nVmFyaWFibGVOYW1lcy5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRl
cj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclxwYXJzZUNvbnN0LmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29t
cGlsZXJcdHJhbnNsYXRvclxvc3NvdXJjZV93aW4uY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNl
IEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxzcmNcY29tcGlsZXJcUG9vbEFsbG9jLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxwYXJzZUNvbnN0LmNwcCI+CiAgICAgICA8Rmls
dGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFF1YWxpZmllckFsaXZlLmNwcCI+CisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxQb29sQWxsb2MuY3Bw
Ij4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcUmVtb3ZlVHJlZS5jcHAi
PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcUXVh
bGlmaWVyQWxpdmUuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAg
ICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJc
U2hhZGVyTGFuZy5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVy
XHRyYW5zbGF0b3JcUmVtb3ZlVHJlZS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8
L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNy
Y1xjb21waWxlclxTeW1ib2xUYWJsZS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
c3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcU2hhZGVyTGFuZy5jcHAiPgogICAgICAgPEZpbHRlcj5T
b3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHNyY1xjb21waWxlclx1dGlsLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxTeW1ib2xUYWJsZS5jcHAiPgogICAgICAgPEZp
bHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCI+Cisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclx1dGlsLmNw
cCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxl
PgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFZhcmlhYmxlSW5mby5j
cHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3Jc
VmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0Zp
bHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclxJbml0aWFsaXplR0xQb3NpdGlvbi5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcVmFyaWFibGVJbmZvLmNwcCI+CiAgICAgICA8
RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFBhcnNlQ29udGV4dC5jcHAiPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcUGFyc2VDb250ZXh0
LmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21w
aWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFZlcnNpb25HTFNM
LmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRv
clxWZXJzaW9uR0xTTC5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4K
ICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxl
clxDb2RlR2VuLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJc
dHJhbnNsYXRvclxDb2RlR2VuLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmls
dGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNv
bXBpbGVyXFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcCI+
CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgog
ICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHNyY1xjb21waWxlclxnbHNsYW5nX3RhYi5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGdsc2xhbmdfdGFiLmgiPgogICAgICAgPEZpbHRlcj5I
ZWFkZXIgRmlsZXNcZ2VuZXJhdGVkPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdGltaW5nXFJlc3RyaWN0RnJhZ21lbnRT
aGFkZXJUaW1pbmcuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJc
dHJhbnNsYXRvclx0aW1pbmdcUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIj4KICAgICAg
IDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRpbWluZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRpbWluZ1xSZXN0cmljdFZl
cnRleFNoYWRlclRpbWluZy5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclx0cmFuc2xhdG9yXHRpbWluZ1xSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIj4KICAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRpbWluZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRl
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXGRlcGdyYXBoXERlcGVu
ZGVuY3lHcmFwaC5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0
cmFuc2xhdG9yXGRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaC5oIj4KICAgICAgIDxGaWx0ZXI+SGVh
ZGVyIEZpbGVzXGRlcGdyYXBoPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoQnVp
bGRlci5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xh
dG9yXGRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCI+CiAgICAgICA8RmlsdGVyPkhl
YWRlciBGaWxlc1xkZXBncmFwaDwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXGRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaE91
dHB1dC5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xh
dG9yXGRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaE91dHB1dC5oIj4KICAgICAgIDxGaWx0ZXI+SGVh
ZGVyIEZpbGVzXGRlcGdyYXBoPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxzcmNcdGhpcmRfcGFydHlcY29tcGlsZXJcQXJyYXlCb3VuZHNDbGFt
cGVyLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxWYXJpYWJsZVBh
Y2tlci5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xh
dG9yXFZhcmlhYmxlUGFja2VyLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRl
cj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclxWYXJpYWJsZUluZm8uaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29t
cGlsZXJcdHJhbnNsYXRvclxWYXJpYWJsZUluZm8uaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBG
aWxlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cc3JjXGNvbXBpbGVyXFZhbGlkYXRlTGltaXRhdGlvbnMuaCI+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxWYWxpZGF0ZUxpbWl0YXRpb25zLmgi
PgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx1dGlsLmgiPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcdXRpbC5oIj4KICAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcVHlwZXMuaCI+CisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxUeXBlcy5oIj4KICAgICAg
IDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcU3ltYm9sVGFibGUuaCI+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxTeW1ib2xUYWJsZS5o
Ij4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcU2hIYW5kbGUuaCI+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxTaEhhbmRs
ZS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1
ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbmNsdWRlXEdMU0xBTkdcU2hhZGVyTGFu
Zy5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1
ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcUmVuYW1lRnVuY3Rp
b24uaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRv
clxSZW5hbWVGdW5jdGlvbi5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+
CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGls
ZXJcUmVtb3ZlVHJlZS5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxl
clx0cmFuc2xhdG9yXFJlbW92ZVRyZWUuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwv
RmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXFF1YWxpZmllckFsaXZlLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
c3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcUXVhbGlmaWVyQWxpdmUuaCI+CiAgICAgICA8RmlsdGVy
PkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFBvb2xBbGxvYy5oIj4KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFBvb2xBbGxvYy5oIj4KICAgICAgIDxG
aWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcb3NpbmNsdWRlLmgiPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3Jcb3NpbmNsdWRlLmgiPgogICAg
ICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxNTWFwLmgiPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcTU1hcC5oIj4KICAgICAgIDxG
aWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCI+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxNYXBMb25n
VmFyaWFibGVOYW1lcy5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAg
ICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJc
bG9jYWxpbnRlcm1lZGlhdGUuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29t
cGlsZXJcdHJhbnNsYXRvclxsb2NhbGludGVybWVkaWF0ZS5oIj4KICAgICAgIDxGaWx0ZXI+SGVh
ZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxzcmNcY29tcGlsZXJcaW50ZXJtZWRpYXRlLmgiPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcaW50ZXJtZWRpYXRlLmgiPgogICAgICAg
PEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxJbml0aWFsaXplUGFyc2VDb250ZXh0Lmgi
PgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSW5p
dGlhbGl6ZVBhcnNlQ29udGV4dC5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0
ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29t
cGlsZXJcSW5pdGlhbGl6ZUdsb2JhbHMuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxz
cmNcY29tcGlsZXJcdHJhbnNsYXRvclxJbml0aWFsaXplR2xvYmFscy5oIj4KICAgICAgIDxGaWx0
ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcSW5pdGlhbGl6ZURsbC5oIj4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXEluaXRpYWxpemVEbGwuaCI+
CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXEluaXRpYWxpemUuaCI+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxJbml0aWFs
aXplLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxJbmZvU2luay5o
Ij4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXElu
aXRpYWxpemVWYXJpYWJsZXMuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVy
PgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBp
bGVyXEhhc2hOYW1lcy5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxl
clx0cmFuc2xhdG9yXEluZm9TaW5rLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0Zp
bHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclxGb3JMb29wVW5yb2xsLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXHRyYW5zbGF0b3JcSGFzaE5hbWVzLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIg
RmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHNyY1xjb21waWxlclxEaXJlY3RpdmVIYW5kbGVyLmgiPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcRm9yTG9vcFVucm9sbC5oIj4KICAgICAg
IDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcRGlhZ25vc3RpY3MuaCI+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxEaXJlY3RpdmVIYW5k
bGVyLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxEZXRlY3RDYWxs
RGVwdGguaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNs
YXRvclxEaWFnbm9zdGljcy5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+
CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGls
ZXJcZGVidWcuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJh
bnNsYXRvclxEZXRlY3RDYWxsRGVwdGguaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwv
RmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXENvbnN0YW50VW5pb24uaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxz
cmNcY29tcGlsZXJcdHJhbnNsYXRvclxkZWJ1Zy5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZp
bGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzcmNcY29tcGlsZXJcQ29tbW9uLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXHRyYW5zbGF0b3JcQ29uc3RhbnRVbmlvbi5oIj4KICAgICAgIDxGaWx0ZXI+SGVh
ZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxzcmNcY29tcGlsZXJcQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCI+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxDb21tb24uaCI+CiAg
ICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXEJhc2VUeXBlcy5oIj4KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXEJ1aWx0SW5GdW5j
dGlvbkVtdWxhdG9yLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAg
ICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxJ
bml0aWFsaXplR0xQb3NpdGlvbi5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclx0cmFuc2xhdG9yXEJhc2VUeXBlcy5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZp
bGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzcmNcY29tcGlsZXJcUGFyc2VDb250ZXh0LmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcUGFyc2VDb250ZXh0LmgiPgogICAgICAgPEZpbHRl
cj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxWZXJzaW9uR0xTTC5oIj4KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFZlcnNpb25HTFNMLmgiPgogICAg
ICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxVbmZvbGRTaG9ydENpcmN1aXRBU1Qu
aCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxV
bmZvbGRTaG9ydENpcmN1aXRBU1QuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmls
dGVyPgogICAgIDwvQ2xJbmNsdWRlPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KLSAg
ICA8Q3VzdG9tQnVpbGQgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXGdsc2xhbmcubCI+CisgICAg
PEN1c3RvbUJ1aWxkIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGdsc2xhbmcu
bCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ3VzdG9tQnVp
bGQ+Ci0gICAgPEN1c3RvbUJ1aWxkIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxnbHNsYW5nLnki
PgorICAgIDxDdXN0b21CdWlsZCBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxn
bHNsYW5nLnkiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0N1
c3RvbUJ1aWxkPgogICA8L0l0ZW1Hcm91cD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGMxMmQ2NzlkNWZk
NzlmOTExZTcxNGZjYzIzMzhmYWY3NTVmNjAwYzYuLjhlMTA1NzY2MWYwNmI1YWEzYzQwMDBhMWI5
YTM5ZjY1YWUxMjg1MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xF
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
QU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjEsNjEgKzIxLDEyMSBAQAogLyog
RW5kIFBCWEFnZ3JlZ2F0ZVRhcmdldCBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEJ1aWxkRmls
ZSBzZWN0aW9uICovCisJCTMxMDEyRTEyMThCOTdCOUIwMDM5MDYyRiAvKiBCYXNlVHlwZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREEwMThC
OTdCOUIwMDM5MDYyRiAvKiBCYXNlVHlwZXMuaCAqLzsgfTsKKwkJMzEwMTJFMTMxOEI5N0I5QjAw
MzkwNjJGIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREExMThCOTdCOUIwMDM5MDYyRiAvKiBC
dWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgKi87IH07CisJCTMxMDEyRTE0MThCOTdCOUIwMDM5
MDYyRiAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQTIxOEI5N0I5QjAwMzkwNjJGIC8qIEJ1aWx0
SW5GdW5jdGlvbkVtdWxhdG9yLmggKi87IH07CisJCTMxMDEyRTE1MThCOTdCOUIwMDM5MDYyRiAv
KiBDb2RlR2VuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMxMDEyREEzMThCOTdCOUIwMDM5MDYyRiAvKiBDb2RlR2VuLmNwcCAqLzsgfTsKKwkJMzEw
MTJFMTYxOEI5N0I5QjAwMzkwNjJGIC8qIENvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQTQxOEI5N0I5QjAwMzkwNjJGIC8qIENvbW1v
bi5oICovOyB9OworCQkzMTAxMkUxNzE4Qjk3QjlCMDAzOTA2MkYgLyogQ29tcGlsZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQTUxOEI5
N0I5QjAwMzkwNjJGIC8qIENvbXBpbGVyLmNwcCAqLzsgfTsKKwkJMzEwMTJFMUExOEI5N0I5QjAw
MzkwNjJGIC8qIENvbnN0YW50VW5pb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxMDEyREE4MThCOTdCOUIwMDM5MDYyRiAvKiBDb25zdGFudFVuaW9u
LmggKi87IH07CisJCTMxMDEyRTFCMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGgu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJE
QUExOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi87IH07CisJCTMxMDEy
RTFDMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGguaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREFCMThCOTdCOUIwMDM5MDYyRiAv
KiBEZXBlbmRlbmN5R3JhcGguaCAqLzsgfTsKKwkJMzEwMTJFMUQxOEI5N0I5QjAwMzkwNjJGIC8q
IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQUMxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lH
cmFwaEJ1aWxkZXIuY3BwICovOyB9OworCQkzMTAxMkUxRTE4Qjk3QjlCMDAzOTA2MkYgLyogRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzEwMTJEQUQxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXIuaCAqLzsgfTsKKwkJMzEwMTJFMUYxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lH
cmFwaE91dHB1dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMTAxMkRBRTE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNw
cCAqLzsgfTsKKwkJMzEwMTJFMjAxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaE91
dHB1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEw
MTJEQUYxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovOyB9Owor
CQkzMTAxMkUyMTE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQjAx
OEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAqLzsgfTsKKwkJ
MzEwMTJFMjIxOEI5N0I5QjAwMzkwNjJGIC8qIERldGVjdENhbGxEZXB0aC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRCMTE4Qjk3QjlCMDAz
OTA2MkYgLyogRGV0ZWN0Q2FsbERlcHRoLmNwcCAqLzsgfTsKKwkJMzEwMTJFMjMxOEI5N0I5QjAw
MzkwNjJGIC8qIERldGVjdENhbGxEZXB0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQjIxOEI5N0I5QjAwMzkwNjJGIC8qIERldGVjdENhbGxE
ZXB0aC5oICovOyB9OworCQkzMTAxMkUyNDE4Qjk3QjlCMDAzOTA2MkYgLyogRGV0ZWN0RGlzY29u
dGludWl0eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzMTAxMkRCMzE4Qjk3QjlCMDAzOTA2MkYgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgKi87
IH07CisJCTMxMDEyRTI1MThCOTdCOUIwMDM5MDYyRiAvKiBEZXRlY3REaXNjb250aW51aXR5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRCNDE4
Qjk3QjlCMDAzOTA2MkYgLyogRGV0ZWN0RGlzY29udGludWl0eS5oICovOyB9OworCQkzMTAxMkUy
NjE4Qjk3QjlCMDAzOTA2MkYgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQjUxOEI5N0I5QjAwMzkwNjJGIC8qIERp
YWdub3N0aWNzLmNwcCAqLzsgfTsKKwkJMzEwMTJFMjcxOEI5N0I5QjAwMzkwNjJGIC8qIERpYWdu
b3N0aWNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
MTAxMkRCNjE4Qjk3QjlCMDAzOTA2MkYgLyogRGlhZ25vc3RpY3MuaCAqLzsgfTsKKwkJMzEwMTJF
MjgxOEI5N0I5QjAwMzkwNjJGIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQjcxOEI5N0I5QjAwMzkwNjJG
IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovOyB9OworCQkzMTAxMkUyOTE4Qjk3QjlCMDAzOTA2
MkYgLyogRGlyZWN0aXZlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzEwMTJEQjgxOEI5N0I5QjAwMzkwNjJGIC8qIERpcmVjdGl2ZUhhbmRs
ZXIuaCAqLzsgfTsKKwkJMzEwMTJFMkExOEI5N0I5QjAwMzkwNjJGIC8qIEV4dGVuc2lvbkJlaGF2
aW9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAx
MkRCOTE4Qjk3QjlCMDAzOTA2MkYgLyogRXh0ZW5zaW9uQmVoYXZpb3IuaCAqLzsgfTsKKwkJMzEw
MTJFMkIxOEI5N0I5QjAwMzkwNjJGIC8qIEZvckxvb3BVbnJvbGwuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQkExOEI5N0I5QjAwMzkwNjJG
IC8qIEZvckxvb3BVbnJvbGwuY3BwICovOyB9OworCQkzMTAxMkUyQzE4Qjk3QjlCMDAzOTA2MkYg
LyogRm9yTG9vcFVucm9sbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzEwMTJEQkIxOEI5N0I5QjAwMzkwNjJGIC8qIEZvckxvb3BVbnJvbGwuaCAqLzsg
fTsKKwkJMzEwMTJFMkQxOEI5N0I5QjAwMzkwNjJGIC8qIGdsc2xhbmcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREJEMThCOTdCOUIwMDM5MDYy
RiAvKiBnbHNsYW5nLmggKi87IH07CisJCTMxMDEyRTMwMThCOTdCOUIwMDM5MDYyRiAvKiBnbHNs
YW5nX2xleC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzMTAxMkRDMDE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZ19sZXguY3BwICovOyB9OworCQkz
MTAxMkUzMTE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZ190YWIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQzExOEI5N0I5QjAwMzkwNjJG
IC8qIGdsc2xhbmdfdGFiLmNwcCAqLzsgfTsKKwkJMzEwMTJFMzIxOEI5N0I5QjAwMzkwNjJGIC8q
IGdsc2xhbmdfdGFiLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMTAxMkRDMjE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZ190YWIuaCAqLzsgfTsKKwkJ
MzEwMTJFMzMxOEI5N0I5QjAwMzkwNjJGIC8qIEhhc2hOYW1lcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQzMxOEI5N0I5QjAwMzkwNjJGIC8q
IEhhc2hOYW1lcy5oICovOyB9OworCQkzMTAxMkUzNDE4Qjk3QjlCMDAzOTA2MkYgLyogSW5mb1Np
bmsuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEw
MTJEQzQxOEI5N0I5QjAwMzkwNjJGIC8qIEluZm9TaW5rLmNwcCAqLzsgfTsKKwkJMzEwMTJFMzUx
OEI5N0I5QjAwMzkwNjJGIC8qIEluZm9TaW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRDNTE4Qjk3QjlCMDAzOTA2MkYgLyogSW5mb1Npbmsu
aCAqLzsgfTsKKwkJMzEwMTJFMzYxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQzYxOEI5
N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemUuY3BwICovOyB9OworCQkzMTAxMkUzNzE4Qjk3QjlC
MDAzOTA2MkYgLyogSW5pdGlhbGl6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzEwMTJEQzcxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemUuaCAq
LzsgfTsKKwkJMzEwMTJFMzgxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVEbGwuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQzgxOEI5
N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVEbGwuY3BwICovOyB9OworCQkzMTAxMkUzOTE4Qjk3
QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZURsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQzkxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxp
emVEbGwuaCAqLzsgfTsKKwkJMzEwMTJFM0ExOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVH
bG9iYWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
MTAxMkRDQTE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLzsgfTsKKwkJ
MzEwMTJFM0IxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQ0IxOEI5
N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwICovOyB9OworCQkzMTAx
MkUzQzE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQ0MxOEI5N0I5QjAw
MzkwNjJGIC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCAqLzsgfTsKKwkJMzEwMTJFM0QxOEI5
N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVWYXJpYWJsZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQ0QxOEI5N0I5QjAwMzkwNjJGIC8q
IEluaXRpYWxpemVWYXJpYWJsZXMuY3BwICovOyB9OworCQkzMTAxMkUzRTE4Qjk3QjlCMDAzOTA2
MkYgLyogSW5pdGlhbGl6ZVZhcmlhYmxlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQ0UxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVW
YXJpYWJsZXMuaCAqLzsgfTsKKwkJMzEwMTJFM0YxOEI5N0I5QjAwMzkwNjJGIC8qIEludGVybWVk
aWF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
MTAxMkRDRjE4Qjk3QjlCMDAzOTA2MkYgLyogSW50ZXJtZWRpYXRlLmNwcCAqLzsgfTsKKwkJMzEw
MTJFNDAxOEI5N0I5QjAwMzkwNjJGIC8qIGludGVybWVkaWF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERDAxOEI5N0I5QjAwMzkwNjJGIC8q
IGludGVybWVkaWF0ZS5oICovOyB9OworCQkzMTAxMkU0MTE4Qjk3QjlCMDAzOTA2MkYgLyogaW50
ZXJtT3V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDMxMDEyREQxMThCOTdCOUIwMDM5MDYyRiAvKiBpbnRlcm1PdXQuY3BwICovOyB9OworCQkzMTAx
MkU0MjE4Qjk3QjlCMDAzOTA2MkYgLyogSW50ZXJtVHJhdmVyc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERDIxOEI5N0I5QjAwMzkwNjJG
IC8qIEludGVybVRyYXZlcnNlLmNwcCAqLzsgfTsKKwkJMzEwMTJFNDMxOEI5N0I5QjAwMzkwNjJG
IC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMTAxMkREMzE4Qjk3QjlCMDAzOTA2MkYgLyogbG9jYWxpbnRlcm1lZGlh
dGUuaCAqLzsgfTsKKwkJMzEwMTJFNDQxOEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJpYWJs
ZU5hbWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDMxMDEyREQ0MThCOTdCOUIwMDM5MDYyRiAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi87
IH07CisJCTMxMDEyRTQ1MThCOTdCOUIwMDM5MDYyRiAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERDUx
OEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmggKi87IH07CisJCTMxMDEy
RTQ2MThCOTdCOUIwMDM5MDYyRiAvKiBNTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRENjE4Qjk3QjlCMDAzOTA2MkYgLyogTU1hcC5oICov
OyB9OworCQkzMTAxMkU0NzE4Qjk3QjlCMDAzOTA2MkYgLyogTm9kZVNlYXJjaC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERDcxOEI5N0I5QjAw
MzkwNjJGIC8qIE5vZGVTZWFyY2guaCAqLzsgfTsKKwkJMzEwMTJFNDgxOEI5N0I5QjAwMzkwNjJG
IC8qIG9zaW5jbHVkZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzEwMTJERDgxOEI5N0I5QjAwMzkwNjJGIC8qIG9zaW5jbHVkZS5oICovOyB9OworCQkz
MTAxMkU0OTE4Qjk3QjlCMDAzOTA2MkYgLyogb3Nzb3VyY2VfcG9zaXguY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERDkxOEI5N0I5QjAwMzkw
NjJGIC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLzsgfTsKKwkJMzEwMTJFNEIxOEI5N0I5QjAwMzkw
NjJGIC8qIE91dHB1dEVTU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzEwMTJEREIxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEVTU0wuY3BwICov
OyB9OworCQkzMTAxMkU0QzE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0RVNTTC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEREMxOEI5N0I5QjAw
MzkwNjJGIC8qIE91dHB1dEVTU0wuaCAqLzsgfTsKKwkJMzEwMTJFNEQxOEI5N0I5QjAwMzkwNjJG
IC8qIE91dHB1dEdMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzEwMTJEREQxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEdMU0wuY3BwICovOyB9
OworCQkzMTAxMkU0RTE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0R0xTTC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEREUxOEI5N0I5QjAwMzkw
NjJGIC8qIE91dHB1dEdMU0wuaCAqLzsgfTsKKwkJMzEwMTJFNEYxOEI5N0I5QjAwMzkwNjJGIC8q
IE91dHB1dEdMU0xCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDMxMDEyRERGMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRHTFNMQmFzZS5jcHAg
Ki87IH07CisJCTMxMDEyRTUwMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRHTFNMQmFzZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERTAxOEI5
N0I5QjAwMzkwNjJGIC8qIE91dHB1dEdMU0xCYXNlLmggKi87IH07CisJCTMxMDEyRTUxMThCOTdC
OUIwMDM5MDYyRiAvKiBPdXRwdXRITFNMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREUxMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRITFNM
LmNwcCAqLzsgfTsKKwkJMzEwMTJFNTIxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEhMU0wuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREUyMThC
OTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRITFNMLmggKi87IH07CisJCTMxMDEyRTUzMThCOTdCOUIw
MDM5MDYyRiAvKiBwYXJzZUNvbnN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxMDEyREUzMThCOTdCOUIwMDM5MDYyRiAvKiBwYXJzZUNvbnN0LmNw
cCAqLzsgfTsKKwkJMzEwMTJFNTQxOEI5N0I5QjAwMzkwNjJGIC8qIFBhcnNlQ29udGV4dC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRFNDE4
Qjk3QjlCMDAzOTA2MkYgLyogUGFyc2VDb250ZXh0LmNwcCAqLzsgfTsKKwkJMzEwMTJFNTUxOEI5
N0I5QjAwMzkwNjJGIC8qIFBhcnNlQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERTUxOEI5N0I5QjAwMzkwNjJGIC8qIFBhcnNlQ29u
dGV4dC5oICovOyB9OworCQkzMTAxMkU1NjE4Qjk3QjlCMDAzOTA2MkYgLyogUG9vbEFsbG9jLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREU2
MThCOTdCOUIwMDM5MDYyRiAvKiBQb29sQWxsb2MuY3BwICovOyB9OworCQkzMTAxMkU1NzE4Qjk3
QjlCMDAzOTA2MkYgLyogUG9vbEFsbG9jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRFNzE4Qjk3QjlCMDAzOTA2MkYgLyogUG9vbEFsbG9jLmgg
Ki87IH07CisJCTMxMDEyRTU4MThCOTdCOUIwMDM5MDYyRiAvKiBQcmFnbWEuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREU4MThCOTdCOUIwMDM5
MDYyRiAvKiBQcmFnbWEuaCAqLzsgfTsKKwkJMzEwMTJFNTkxOEI5N0I5QjAwMzkwNjJGIC8qIFF1
YWxpZmllckFsaXZlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMxMDEyREU5MThCOTdCOUIwMDM5MDYyRiAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi87
IH07CisJCTMxMDEyRTVBMThCOTdCOUIwMDM5MDYyRiAvKiBRdWFsaWZpZXJBbGl2ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERUExOEI5N0I5
QjAwMzkwNjJGIC8qIFF1YWxpZmllckFsaXZlLmggKi87IH07CisJCTMxMDEyRTVCMThCOTdCOUIw
MDM5MDYyRiAvKiBSZW1vdmVUcmVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxMDEyREVCMThCOTdCOUIwMDM5MDYyRiAvKiBSZW1vdmVUcmVlLmNw
cCAqLzsgfTsKKwkJMzEwMTJFNUMxOEI5N0I5QjAwMzkwNjJGIC8qIFJlbW92ZVRyZWUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREVDMThCOTdC
OUIwMDM5MDYyRiAvKiBSZW1vdmVUcmVlLmggKi87IH07CisJCTMxMDEyRTVEMThCOTdCOUIwMDM5
MDYyRiAvKiBSZW5hbWVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzEwMTJERUQxOEI5N0I5QjAwMzkwNjJGIC8qIFJlbmFtZUZ1bmN0aW9u
LmggKi87IH07CisJCTMxMDEyRTVFMThCOTdCOUIwMDM5MDYyRiAvKiBSZXdyaXRlRWxzZUJsb2Nr
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAx
MkRFRTE4Qjk3QjlCMDAzOTA2MkYgLyogUmV3cml0ZUVsc2VCbG9ja3MuY3BwICovOyB9OworCQkz
MTAxMkU1RjE4Qjk3QjlCMDAzOTA2MkYgLyogUmV3cml0ZUVsc2VCbG9ja3MuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREVGMThCOTdCOUIwMDM5
MDYyRiAvKiBSZXdyaXRlRWxzZUJsb2Nrcy5oICovOyB9OworCQkzMTAxMkU2MDE4Qjk3QjlCMDAz
OTA2MkYgLyogU2VhcmNoU3ltYm9sLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxMDEyREYwMThCOTdCOUIwMDM5MDYyRiAvKiBTZWFyY2hTeW1ib2wu
Y3BwICovOyB9OworCQkzMTAxMkU2MTE4Qjk3QjlCMDAzOTA2MkYgLyogU2VhcmNoU3ltYm9sLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRGMTE4
Qjk3QjlCMDAzOTA2MkYgLyogU2VhcmNoU3ltYm9sLmggKi87IH07CisJCTMxMDEyRTYyMThCOTdC
OUIwMDM5MDYyRiAvKiBTaGFkZXJMYW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREYyMThCOTdCOUIwMDM5MDYyRiAvKiBTaGFkZXJMYW5n
LmNwcCAqLzsgfTsKKwkJMzEwMTJFNjMxOEI5N0I5QjAwMzkwNjJGIC8qIFNoSGFuZGxlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRGMzE4Qjk3
QjlCMDAzOTA2MkYgLyogU2hIYW5kbGUuaCAqLzsgfTsKKwkJMzEwMTJFNjQxOEI5N0I5QjAwMzkw
NjJGIC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDMxMDEyREY0MThCOTdCOUIwMDM5MDYyRiAvKiBTeW1ib2xUYWJsZS5jcHAg
Ki87IH07CisJCTMxMDEyRTY1MThCOTdCOUIwMDM5MDYyRiAvKiBTeW1ib2xUYWJsZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERjUxOEI5N0I5
QjAwMzkwNjJGIC8qIFN5bWJvbFRhYmxlLmggKi87IH07CisJCTMxMDEyRTY2MThCOTdCOUIwMDM5
MDYyRiAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREY3MThCOTdCOUIwMDM5MDYyRiAv
KiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKKwkJMzEwMTJFNjcxOEI5
N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREY4MThCOTdCOUIwMDM5
MDYyRiAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggKi87IH07CisJCTMxMDEyRTY4
MThCOTdCOUIwMDM5MDYyRiAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRGOTE4Qjk3QjlC
MDAzOTA2MkYgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovOyB9OworCQkzMTAx
MkU2OTE4Qjk3QjlCMDAzOTA2MkYgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREZBMThCOTdC
OUIwMDM5MDYyRiAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovOyB9OworCQkzMTAx
MkU2QTE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckVTU0wuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERkIxOEI5N0I5QjAwMzkwNjJG
IC8qIFRyYW5zbGF0b3JFU1NMLmNwcCAqLzsgfTsKKwkJMzEwMTJFNkIxOEI5N0I5QjAwMzkwNjJG
IC8qIFRyYW5zbGF0b3JFU1NMLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzMTAxMkRGQzE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckVTU0wuaCAq
LzsgfTsKKwkJMzEwMTJFNkMxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JHTFNMLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREZEMThC
OTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi87IH07CisJCTMxMDEyRTZEMThC
OTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9yR0xTTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERkUxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5z
bGF0b3JHTFNMLmggKi87IH07CisJCTMxMDEyRTZFMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xh
dG9ySExTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzMTAxMkRGRjE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckhMU0wuY3BwICovOyB9Owor
CQkzMTAxMkU2RjE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckhMU0wuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTAwMThCOTdCOUIwMDM5
MDYyRiAvKiBUcmFuc2xhdG9ySExTTC5oICovOyB9OworCQkzMTAxMkU3MDE4Qjk3QjlCMDAzOTA2
MkYgLyogVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMxMDEyRTAxMThCOTdCOUIwMDM5MDYyRiAvKiBUeXBlcy5oICovOyB9OworCQkzMTAxMkU3
MTE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTAyMThCOTdCOUIwMDM5MDYy
RiAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwICovOyB9OworCQkzMTAxMkU3MjE4Qjk3QjlCMDAz
OTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwMzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hv
cnRDaXJjdWl0LmggKi87IH07CisJCTMxMDEyRTczMThCOTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRT
aG9ydENpcmN1aXRBU1QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzEwMTJFMDQxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFT
VC5jcHAgKi87IH07CisJCTMxMDEyRTc0MThCOTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENp
cmN1aXRBU1QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDMxMDEyRTA1MThCOTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuaCAqLzsg
fTsKKwkJMzEwMTJFNzUxOEI5N0I5QjAwMzkwNjJGIC8qIFVuaWZvcm0uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJFMDYxOEI5N0I5QjAwMzkw
NjJGIC8qIFVuaWZvcm0uY3BwICovOyB9OworCQkzMTAxMkU3NjE4Qjk3QjlCMDAzOTA2MkYgLyog
VW5pZm9ybS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzEwMTJFMDcxOEI5N0I5QjAwMzkwNjJGIC8qIFVuaWZvcm0uaCAqLzsgfTsKKwkJMzEwMTJFNzcx
OEI5N0I5QjAwMzkwNjJGIC8qIHV0aWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzEwMTJFMDgxOEI5N0I5QjAwMzkwNjJGIC8qIHV0aWwuY3BwICov
OyB9OworCQkzMTAxMkU3ODE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJFMDkxOEI5N0I5QjAwMzkwNjJG
IC8qIHV0aWwuaCAqLzsgfTsKKwkJMzEwMTJFNzkxOEI5N0I5QjAwMzkwNjJGIC8qIFZhbGlkYXRl
TGltaXRhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzEwMTJFMEExOEI5N0I5QjAwMzkwNjJGIC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuY3Bw
ICovOyB9OworCQkzMTAxMkU3QTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9u
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJF
MEIxOEI5N0I5QjAwMzkwNjJGIC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuaCAqLzsgfTsKKwkJMzEw
MTJFN0IxOEI5N0I5QjAwMzkwNjJGIC8qIFZhcmlhYmxlSW5mby5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwQzE4Qjk3QjlCMDAzOTA2MkYg
LyogVmFyaWFibGVJbmZvLmNwcCAqLzsgfTsKKwkJMzEwMTJFN0MxOEI5N0I5QjAwMzkwNjJGIC8q
IFZhcmlhYmxlSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzEwMTJFMEQxOEI5N0I5QjAwMzkwNjJGIC8qIFZhcmlhYmxlSW5mby5oICovOyB9Owor
CQkzMTAxMkU3RDE4Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFibGVQYWNrZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJFMEUxOEI5N0I5QjAw
MzkwNjJGIC8qIFZhcmlhYmxlUGFja2VyLmNwcCAqLzsgfTsKKwkJMzEwMTJFN0UxOEI5N0I5QjAw
MzkwNjJGIC8qIFZhcmlhYmxlUGFja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwRjE4Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFibGVQYWNr
ZXIuaCAqLzsgfTsKKwkJMzEwMTJFN0YxOEI5N0I5QjAwMzkwNjJGIC8qIFZlcnNpb25HTFNMLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTEw
MThCOTdCOUIwMDM5MDYyRiAvKiBWZXJzaW9uR0xTTC5jcHAgKi87IH07CisJCTMxMDEyRTgwMThC
OTdCOUIwMDM5MDYyRiAvKiBWZXJzaW9uR0xTTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJFMTExOEI5N0I5QjAwMzkwNjJGIC8qIFZlcnNpb25H
TFNMLmggKi87IH07CisJCTMxMDEyRTgzMThCOTdDODYwMDM5MDYyRiAvKiBjb21waWxlcmRlYnVn
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEy
RTgxMThCOTdDODYwMDM5MDYyRiAvKiBjb21waWxlcmRlYnVnLmNwcCAqLzsgfTsKKwkJMzEwMTJF
ODQxOEI5N0M4NjAwMzkwNjJGIC8qIGNvbXBpbGVyZGVidWcuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTgyMThCOTdDODYwMDM5MDYyRiAvKiBj
b21waWxlcmRlYnVnLmggKi87IH07CiAJCTMxMkJEQjBDMTVGRUNBQzkwMDk3RUJDNyAvKiBBTkdM
RS5wbGlzdCBpbiBDb3B5RmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzEyQkRCMDkxNUZFQzkxRTAwOTdFQkM3IC8qIEFOR0xFLnBsaXN0ICovOyB9OwogCQkzMTJCREIw
RTE1RkVDQUU1MDA5N0VCQzcgLyogQU5HTEUudHh0IGluIENvcHlGaWxlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTJCREIwQTE1RkVDQTNBMDA5N0VCQzcgLyogQU5HTEUu
dHh0ICovOyB9OwogCQk0OTk1MUMwMzE0QjdBQUIzMDA2MEU5NkUgLyogbGVuZ3RoX2xpbWl0cy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk5NTFDMDIx
NEI3QUFCMzAwNjBFOTZFIC8qIGxlbmd0aF9saW1pdHMuaCAqLzsgfTsKLQkJNDk5NTFDMDkxNEI3
QUFEODAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5OTUxQzA1MTRCN0FBRDcwMDYwRTk2
RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgKi87IH07Ci0JCTQ5OTUxQzBBMTRCN0FB
RDgwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk5NTFDMDYxNEI3QUFEODAwNjBFOTZFIC8q
IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggKi87IH07Ci0JCTVDQjEzRkQ0MTc5REIzRkQwMDFG
ODUxRCAvKiBEZXRlY3RDYWxsRGVwdGguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNUNCMTNGRDIxNzlEQjNGRDAwMUY4NTFEIC8qIERldGVjdENhbGxE
ZXB0aC5jcHAgKi87IH07Ci0JCTVDQjEzRkQ1MTc5REIzRkQwMDFGODUxRCAvKiBEZXRlY3RDYWxs
RGVwdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVD
QjEzRkQzMTc5REIzRkQwMDFGODUxRCAvKiBEZXRlY3RDYWxsRGVwdGguaCAqLzsgfTsKLQkJNzIz
MDlBNEQxODNDMjU5MzAwMzcwQjkzIC8qIENvZGVHZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI2NTA5MzAxODNBQTIxMzAwRDI4QjQ4IC8qIENv
ZGVHZW4uY3BwICovOyB9OwotCQk3MjMwOUE0RTE4M0MyNTlDMDAzNzBCOTMgLyogVW5mb2xkU2hv
cnRDaXJjdWl0QVNULmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyNjUwOTM2MTgzQUEzQzYwMEQyOEI0OCAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1Qu
Y3BwICovOyB9OwotCQk3MjMwOUE0RjE4M0MyNTlFMDAzNzBCOTMgLyogVW5mb2xkU2hvcnRDaXJj
dWl0QVNULmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
MjY1MDkzNzE4M0FBM0M2MDBEMjhCNDggLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmggKi87IH07
Ci0JCTcyMzA5QTUwMTgzQzI1QTEwMDM3MEI5MyAvKiBQYXJzZUNvbnRleHQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI2NTA5MzQxODNBQTNCMjAw
RDI4QjQ4IC8qIFBhcnNlQ29udGV4dC5jcHAgKi87IH07Ci0JCTcyMzA5QTUxMTgzQzI1QTUwMDM3
MEI5MyAvKiBQYXJzZUNvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDcyNjUwOTM1MTgzQUEzQjIwMEQyOEI0OCAvKiBQYXJzZUNvbnRleHQuaCAq
LzsgfTsKLQkJNzIzMDlBNTIxODNDMjVBNzAwMzcwQjkzIC8qIE5vZGVTZWFyY2guaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNjUwOTMzMTgzQUEyODkw
MEQyOEI0OCAvKiBOb2RlU2VhcmNoLmggKi87IH07Ci0JCTcyMzA5QTUzMTgzQzI1QUEwMDM3MEI5
MyAvKiBJbml0aWFsaXplR0xQb3NpdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MjY1MDkzMTE4M0FBMjQ2MDBEMjhCNDggLyogSW5pdGlhbGl6
ZUdMUG9zaXRpb24uY3BwICovOyB9OwotCQk3MjMwOUE1NDE4M0MyNUFEMDAzNzBCOTMgLyogSW5p
dGlhbGl6ZUdMUG9zaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcyNjUwOTMyMTgzQUEyNDYwMEQyOEI0OCAvKiBJbml0aWFsaXplR0xQb3NpdGlv
bi5oICovOyB9OwogCQk3MjMwOUE1NjE4M0MyN0RFMDAzNzBCOTMgLyogVG9rZW5pemVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzA5QTU1MTgz
QzI3REIwMDM3MEI5MyAvKiBUb2tlbml6ZXIuY3BwICovOyB9OwogCQk3MjMwOUE1ODE4M0MyN0Yz
MDAzNzBCOTMgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjMwOUE1NzE4M0MyN0YxMDAzNzBCOTMgLyogRXhwcmVz
c2lvblBhcnNlci5jcHAgKi87IH07Ci0JCTcyMzA5QTVDMTgzQzI4NTMwMDM3MEI5MyAvKiBnbHNs
YW5nX2xleC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MjMwOUE1OTE4M0MyODRFMDAzNzBCOTMgLyogZ2xzbGFuZ19sZXguY3BwICovOyB9OwotCQk3
MjMwOUE1RDE4M0MyODUzMDAzNzBCOTMgLyogZ2xzbGFuZ190YWIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzMDlBNUExODNDMjg0RTAwMzcwQjkz
IC8qIGdsc2xhbmdfdGFiLmNwcCAqLzsgfTsKLQkJNzIzMDlBNUUxODNDMjg1MzAwMzcwQjkzIC8q
IGdsc2xhbmdfdGFiLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MjMwOUE1QjE4M0MyODRFMDAzNzBCOTMgLyogZ2xzbGFuZ190YWIuaCAqLzsgfTsKLQkJ
NzIzMDlBNjExODNDMkE3NDAwMzcwQjkzIC8qIFRyYW5zbGF0b3JITFNMLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzA5QTVGMTgzQzJBNjQwMDM3
MEI5MyAvKiBUcmFuc2xhdG9ySExTTC5jcHAgKi87IH07Ci0JCTcyMzA5QTYyMTgzQzJBNzQwMDM3
MEI5MyAvKiBUcmFuc2xhdG9ySExTTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzIzMDlBNjAxODNDMkE2NDAwMzcwQjkzIC8qIFRyYW5zbGF0b3JITFNM
LmggKi87IH07Ci0JCTcyMzA5QTY1MTgzQzJBRTUwMDM3MEI5MyAvKiBPdXRwdXRITFNMLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzA5QTYzMTgz
QzJBRTUwMDM3MEI5MyAvKiBPdXRwdXRITFNMLmNwcCAqLzsgfTsKLQkJNzIzMDlBNjYxODNDMkFF
NTAwMzcwQjkzIC8qIE91dHB1dEhMU0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyMzA5QTY0MTgzQzJBRTUwMDM3MEI5MyAvKiBPdXRwdXRITFNMLmgg
Ki87IH07Ci0JCTcyMzA5QTZEMTgzQzJCRTgwMDM3MEI5MyAvKiBEZXRlY3REaXNjb250aW51aXR5
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzA5
QTY3MTgzQzJCRTgwMDM3MEI5MyAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCAqLzsgfTsKLQkJ
NzIzMDlBNkUxODNDMkJFODAwMzcwQjkzIC8qIERldGVjdERpc2NvbnRpbnVpdHkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzA5QTY4MTgzQzJCRTgw
MDM3MEI5MyAvKiBEZXRlY3REaXNjb250aW51aXR5LmggKi87IH07Ci0JCTcyMzA5QTZGMTgzQzJC
RTgwMDM3MEI5MyAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzMDlBNjkxODNDMkJFODAwMzcwQjkzIC8qIFVu
Zm9sZFNob3J0Q2lyY3VpdC5jcHAgKi87IH07Ci0JCTcyMzA5QTcwMTgzQzJCRTgwMDM3MEI5MyAv
KiBVbmZvbGRTaG9ydENpcmN1aXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDcyMzA5QTZBMTgzQzJCRTgwMDM3MEI5MyAvKiBVbmZvbGRTaG9ydENpcmN1
aXQuaCAqLzsgfTsKLQkJNzIzMDlBNzExODNDMkJFODAwMzcwQjkzIC8qIFVuaWZvcm0uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzMDlBNkIxODND
MkJFODAwMzcwQjkzIC8qIFVuaWZvcm0uY3BwICovOyB9OwotCQk3MjMwOUE3MjE4M0MyQkU4MDAz
NzBCOTMgLyogVW5pZm9ybS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzIzMDlBNkMxODNDMkJFODAwMzcwQjkzIC8qIFVuaWZvcm0uaCAqLzsgfTsKLQkJ
OTBEOUIxMDIxMkUxMURDQjAwMkQ0MjU1IC8qIENvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwRDlCMEY5MTJFMTFEQ0IwMDJENDI1NSAv
KiBDb21waWxlci5jcHAgKi87IH07Ci0JCTkwRDlCMTAzMTJFMTFEQ0IwMDJENDI1NSAvKiBFeHRl
bnNpb25CZWhhdmlvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTBEOUIwRkExMkUxMURDQjAwMkQ0MjU1IC8qIEV4dGVuc2lvbkJlaGF2aW9yLmggKi87
IH07Ci0JCTkwRDlCMTA3MTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MEQ5QjBGRTEyRTExRENCMDAyRDQy
NTUgLyogZ2xzbGFuZy5oICovOyB9OwotCQk5MEQ5QjEwOTEyRTExRENCMDAyRDQyNTUgLyogU2Vh
cmNoU3ltYm9sLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkwRDlCMTAwMTJFMTFEQ0IwMDJENDI1NSAvKiBTZWFyY2hTeW1ib2wuY3BwICovOyB9Owot
CQk5MEQ5QjEwQTEyRTExRENCMDAyRDQyNTUgLyogU2VhcmNoU3ltYm9sLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MEQ5QjEwMTEyRTExRENCMDAyRDQy
NTUgLyogU2VhcmNoU3ltYm9sLmggKi87IH07Ci0JCTkwRDlCMTEzMTJFMTFERDYwMDJENDI1NSAv
KiB1dGlsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkwRDlCMTBCMTJFMTFERDYwMDJENDI1NSAvKiB1dGlsLmNwcCAqLzsgfTsKLQkJOTBEOUIxMTQx
MkUxMURENjAwMkQ0MjU1IC8qIHV0aWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkwRDlCMTBDMTJFMTFERDYwMDJENDI1NSAvKiB1dGlsLmggKi87IH07
Ci0JCTkwRDlCMTE1MTJFMTFERDYwMDJENDI1NSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwRDlCMTBEMTJF
MTFERDYwMDJENDI1NSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLzsgfTsKLQkJOTBEOUIx
MTYxMkUxMURENjAwMkQ0MjU1IC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwRDlCMTBFMTJFMTFERDYwMDJENDI1
NSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmggKi87IH07Ci0JCTkwRDlCMTE3MTJFMTFERDYwMDJE
NDI1NSAvKiBWYXJpYWJsZUluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTBEOUIxMEYxMkUxMURENjAwMkQ0MjU1IC8qIFZhcmlhYmxlSW5mby5j
cHAgKi87IH07Ci0JCTkwRDlCMTE4MTJFMTFERDYwMDJENDI1NSAvKiBWYXJpYWJsZUluZm8uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwRDlCMTEwMTJF
MTFERDYwMDJENDI1NSAvKiBWYXJpYWJsZUluZm8uaCAqLzsgfTsKLQkJOTBEOUIxMTkxMkUxMURE
NjAwMkQ0MjU1IC8qIFZlcnNpb25HTFNMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkwRDlCMTExMTJFMTFERDYwMDJENDI1NSAvKiBWZXJzaW9uR0xT
TC5jcHAgKi87IH07Ci0JCTkwRDlCMTFBMTJFMTFERDYwMDJENDI1NSAvKiBWZXJzaW9uR0xTTC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTBEOUIxMTIx
MkUxMURENjAwMkQ0MjU1IC8qIFZlcnNpb25HTFNMLmggKi87IH07CiAJCUEwOEMzQ0RDMTZENkNC
NjEwMDNGMEI4MyAvKiBBcnJheUJvdW5kc0NsYW1wZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTA4QzNDREExNkQ2Q0I2MTAwM0YwQjgzIC8qIEFy
cmF5Qm91bmRzQ2xhbXBlci5jcHAgKi87IH07CiAJCUEwOEMzQ0REMTZENkNCNjEwMDNGMEI4MyAv
KiBBcnJheUJvdW5kc0NsYW1wZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEwOEMzQ0RCMTZENkNCNjEwMDNGMEI4MyAvKiBBcnJheUJvdW5kc0NsYW1w
ZXIuaCAqLzsgfTsKLQkJQTBBQUJFMkMxM0FGRTgxMDAwRjJFQkQxIC8qIEZvckxvb3BVbnJvbGwu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTBBQUJF
MkExM0FGRTgxMDAwRjJFQkQxIC8qIEZvckxvb3BVbnJvbGwuY3BwICovOyB9OwotCQlBMEFBQkUy
RDEzQUZFODEwMDBGMkVCRDEgLyogRm9yTG9vcFVucm9sbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTBBQUJFMkIxM0FGRTgxMDAwRjJFQkQxIC8qIEZv
ckxvb3BVbnJvbGwuaCAqLzsgfTsKLQkJQTBBQUJFMzAxM0FGRTgzMDAwRjJFQkQxIC8qIE1hcExv
bmdWYXJpYWJsZU5hbWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEEwQUFCRTJFMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25nVmFyaWFibGVOYW1l
cy5jcHAgKi87IH07Ci0JCUEwQUFCRTMxMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25nVmFyaWFi
bGVOYW1lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTBBQUJFMkYxM0FGRTgzMDAwRjJFQkQxIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmggKi87IH07
Ci0JCUEwQUFCRTM0MTNBRkU4NDcwMEYyRUJEMSAvKiBPdXRwdXRHTFNMQmFzZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkUzMjEzQUZFODQ3
MDBGMkVCRDEgLyogT3V0cHV0R0xTTEJhc2UuY3BwICovOyB9OwotCQlBMEFBQkUzNTEzQUZFODQ3
MDBGMkVCRDEgLyogT3V0cHV0R0xTTEJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFCRTMzMTNBRkU4NDcwMEYyRUJEMSAvKiBPdXRwdXRHTFNM
QmFzZS5oICovOyB9OwotCQlBMEFBQkU0NDEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkU0
MjEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5jcHAgKi87IH07Ci0JCUEwQUFCRTQ1MTNB
RkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkU0MzEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNT
TC5oICovOyB9OwotCQlBMEFBQkU0ODEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTBBQUJF
NDYxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCAqLzsgfTsKLQkJQTBBQUJF
NDkxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkU0NzEzQUZFOTYxMDBGMkVCRDEgLyog
VHJhbnNsYXRvckVTU0wuaCAqLzsgfTsKIAkJQTI2NEY4QUMxNjk3NERFRDAwNkZBQTVBIC8qIERp
YWdub3N0aWNzQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBMjY0Rjg5MzE2OTc0REVEMDA2RkFBNUEgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCAq
LzsgfTsKIAkJQTI2NEY4QUQxNjk3NERFRDAwNkZBQTVBIC8qIERpYWdub3N0aWNzQmFzZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4OTQxNjk3
NERFRDAwNkZBQTVBIC8qIERpYWdub3N0aWNzQmFzZS5oICovOyB9OwogCQlBMjY0RjhBRTE2OTc0
REVEMDA2RkFBNUEgLyogRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4OTUxNjk3NERFRDAwNkZBQTVBIC8q
IERpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcCAqLzsgfTsKQEAgLTk5LDQ0ICsxNTksNyBAQAogCQlB
MjY0RjhDMTE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4QTgxNjk3NERFRDAwNkZBQTVBIC8qIFRv
a2VuLmNwcCAqLzsgfTsKIAkJQTI2NEY4QzIxNjk3NERFRDAwNkZBQTVBIC8qIFRva2VuLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhBOTE2OTc0
REVEMDA2RkFBNUEgLyogVG9rZW4uaCAqLzsgfTsKIAkJQTI2NEY4QzQxNjk3NERFRDAwNkZBQTVB
IC8qIFRva2VuaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTI2NEY4QUIxNjk3NERFRDAwNkZBQTVBIC8qIFRva2VuaXplci5oICovOyB9OwotCQlB
MjY0RjhDODE2OTc0RTJBMDA2RkFBNUEgLyogSGFzaE5hbWVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhDNTE2OTc0RTJBMDA2RkFBNUEgLyog
SGFzaE5hbWVzLmggKi87IH07Ci0JCUEyNjRGOEM5MTY5NzRFMkEwMDZGQUE1QSAvKiBWYXJpYWJs
ZVBhY2tlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMjY0RjhDNjE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuY3BwICovOyB9Owot
CQlBMjY0RjhDQTE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGOEM3MTY5NzRFMkEwMDZG
QUE1QSAvKiBWYXJpYWJsZVBhY2tlci5oICovOyB9OwogCQlBMjY0RjhDRDE2OTc2MkFBMDA2RkFB
NUEgLyoga2hycGxhdGZvcm0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEEyNjRGOENDMTY5NzYyQUEwMDZGQUE1QSAvKiBraHJwbGF0Zm9ybS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKLQkJQTI2NTY3QkIxNTlD
MjFCMTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0IwMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9z
dGljcy5jcHAgKi87IH07Ci0JCUEyNjU2N0JDMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGlj
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3
QjExNTlDMjFCMTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmggKi87IH07Ci0JCUEyNjU2N0JEMTU5
QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0IyMTU5QzIxQjEwMDM5ODUzOSAvKiBE
aXJlY3RpdmVIYW5kbGVyLmNwcCAqLzsgfTsKLQkJQTI2NTY3QkUxNTlDMjFCMTAwMzk4NTM5IC8q
IERpcmVjdGl2ZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEEyNjU2N0IzMTU5QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmgg
Ki87IH07Ci0JCUEyNjU2N0JGMTU5QzIxQjEwMDM5ODUzOSAvKiBJbml0aWFsaXplUGFyc2VDb250
ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
NjU2N0I0MTU5QzIxQjEwMDM5ODUzOSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLzsg
fTsKLQkJQTI2NTY3QzAxNTlDMjFCMTAwMzk4NTM5IC8qIFByYWdtYS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjUxNTlDMjFCMTAwMzk4NTM5
IC8qIFByYWdtYS5oICovOyB9OwotCQlBMjY1NjdDMTE1OUMyMUIxMDAzOTg1MzkgLyogUmVuYW1l
RnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyNjU2N0I2MTU5QzIxQjEwMDM5ODUzOSAvKiBSZW5hbWVGdW5jdGlvbi5oICovOyB9OwotCQlB
MjY1NjgzOTE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODJEMTU5QzIzRTEwMDM5
ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovOyB9OwotCQlBMjY1NjgzQTE1OUMyM0UxMDAz
OTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgyRTE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdy
YXBoLmggKi87IH07Ci0JCUEyNjU2ODNCMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEEyNjU2ODJGMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNw
cCAqLzsgfTsKLQkJQTI2NTY4M0MxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
NjU2ODMwMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi87IH07
Ci0JCUEyNjU2ODNEMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzEx
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi87IH07Ci0JCUEy
NjU2ODNFMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODMyMTU5QzIzRTEw
MDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCAqLzsgfTsKLQkJQTI2NTY4M0YxNTlD
MjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODMzMTU5QzIzRTEwMDM5ODUz
OSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi87IH07Ci0JCUEyNjU2ODQwMTU5QzIz
RTEwMDM5ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODM1MTU5QzIzRTEwMDM5
ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKLQkJQTI2NTY4
NDExNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODM2MTU5QzIz
RTEwMDM5ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggKi87IH07Ci0JCUEy
NjU2ODQyMTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzNzE1
OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovOyB9Owot
CQlBMjY1Njg0MzE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODM4
MTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovOyB9Owot
CQlGQjM5RDI3NTEyMDBGMzVBMDAwODhFNjkgLyogZGVidWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMjYxMjAwRjM1QTAwMDg4RTY5IC8q
IGRlYnVnLmNwcCAqLzsgfTsKLQkJRkIzOUQyNzkxMjAwRjM1QTAwMDg4RTY5IC8qIEluZm9TaW5r
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlE
MjJBMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgKi87IH07Ci0JCUZCMzlEMjdCMTIw
MEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjJDMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFs
aXplLmNwcCAqLzsgfTsKLQkJRkIzOUQyN0QxMjAwRjM1QTAwMDg4RTY5IC8qIEluaXRpYWxpemVE
bGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIz
OUQyMkUxMjAwRjM1QTAwMDg4RTY5IC8qIEluaXRpYWxpemVEbGwuY3BwICovOyB9OwotCQlGQjM5
RDI4MTEyMDBGMzVBMDAwODhFNjkgLyogSW50ZXJtZWRpYXRlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjMyMTIwMEYzNUEwMDA4OEU2OSAv
KiBJbnRlcm1lZGlhdGUuY3BwICovOyB9OwotCQlGQjM5RDI4MzEyMDBGMzVBMDAwODhFNjkgLyog
aW50ZXJtT3V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZCMzlEMjM0MTIwMEYzNUEwMDA4OEU2OSAvKiBpbnRlcm1PdXQuY3BwICovOyB9OwotCQlG
QjM5RDI4NDEyMDBGMzVBMDAwODhFNjkgLyogSW50ZXJtVHJhdmVyc2UuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMzUxMjAwRjM1QTAwMDg4
RTY5IC8qIEludGVybVRyYXZlcnNlLmNwcCAqLzsgfTsKLQkJRkIzOUQyODgxMjAwRjM1QTAwMDg4
RTY5IC8qIG9zc291cmNlX3Bvc2l4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZCMzlEMjM5MTIwMEYzNUEwMDA4OEU2OSAvKiBvc3NvdXJjZV9wb3Np
eC5jcHAgKi87IH07Ci0JCUZCMzlEMjhBMTIwMEYzNUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjNC
MTIwMEYzNUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmNwcCAqLzsgfTsKLQkJRkIzOUQyOEUxMjAw
RjM1QTAwMDg4RTY5IC8qIHBhcnNlQ29uc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyM0YxMjAwRjM1QTAwMDg4RTY5IC8qIHBhcnNlQ29u
c3QuY3BwICovOyB9OwotCQlGQjM5RDI5MTEyMDBGMzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjQy
MTIwMEYzNUEwMDA4OEU2OSAvKiBQb29sQWxsb2MuY3BwICovOyB9OwotCQlGQjM5RDJBNDEyMDBG
MzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNTYxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxp
ZmllckFsaXZlLmNwcCAqLzsgfTsKLQkJRkIzOUQyQTYxMjAwRjM1QTAwMDg4RTY5IC8qIFJlbW92
ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkIzOUQyNTgxMjAwRjM1QTAwMDg4RTY5IC8qIFJlbW92ZVRyZWUuY3BwICovOyB9OwotCQlGQjM5
RDJBODEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFuZy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI1QTEyMDBGMzVBMDAwODhFNjkgLyog
U2hhZGVyTGFuZy5jcHAgKi87IH07Ci0JCUZCMzlEMkFBMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1i
b2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGQjM5RDI1QzEyMDBGMzVBMDAwODhFNjkgLyogU3ltYm9sVGFibGUuY3BwICovOyB9OwotCQlG
QjM5RDJBQzEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNjgxMjAwRjM1QTAwMDg4
RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLzsgfTsKIAkJRkIzOUQ3NkUxMjAxMTBGQzAwMDg4
RTY5IC8qIFNoYWRlckxhbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZCMzlEMkJGMTIwMEYzRTYwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogLyogRW5kIFBCWEJ1aWxk
RmlsZSBzZWN0aW9uICovCiAKQEAgLTE3NCw2NSArMTk3LDEyNSBAQAogLyogRW5kIFBCWENvcHlG
aWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNl
Y3Rpb24gKi8KKwkJMzEwMTJEQTAxOEI5N0I5QjAwMzkwNjJGIC8qIEJhc2VUeXBlcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYXNlVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQTExOEI5N0I5QjAwMzkwNjJGIC8qIEJ1aWx0SW5GdW5jdGlv
bkVtdWxhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJ1aWx0
SW5GdW5jdGlvbkVtdWxhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEw
MTJEQTIxOEI5N0I5QjAwMzkwNjJGIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREEzMThCOTdCOUIwMDM5MDYyRiAvKiBD
b2RlR2VuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVHZW4u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRBNDE4Qjk3QjlCMDAzOTA2
MkYgLyogQ29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbW1vbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRBNTE4Qjk3QjlCMDAzOTA2MkYg
LyogQ29tcGlsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29t
cGlsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRBODE4Qjk3QjlC
MDAzOTA2MkYgLyogQ29uc3RhbnRVbmlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDb25zdGFudFVuaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEy
REFBMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQUIxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lH
cmFwaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGgu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQUMxOEI5N0I5QjAwMzkwNjJG
IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTMxMDEyREFEMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhC
dWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQUUxOEI5N0I5
QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRBRjE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5j
eUdyYXBoT3V0cHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVu
Y3lHcmFwaE91dHB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRCMDE4
Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRCMTE4Qjk3QjlCMDAzOTA2MkYgLyog
RGV0ZWN0Q2FsbERlcHRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERldGVjdENhbGxEZXB0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEy
REIyMThCOTdCOUIwMDM5MDYyRiAvKiBEZXRlY3RDYWxsRGVwdGguaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRGV0ZWN0Q2FsbERlcHRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTMxMDEyREIzMThCOTdCOUIwMDM5MDYyRiAvKiBEZXRlY3REaXNjb250aW51aXR5
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERldGVjdERpc2NvbnRp
bnVpdHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRCNDE4Qjk3QjlC
MDAzOTA2MkYgLyogRGV0ZWN0RGlzY29udGludWl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEZXRlY3REaXNjb250aW51aXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTMxMDEyREI1MThCOTdCOUIwMDM5MDYyRiAvKiBEaWFnbm9zdGljcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaWFnbm9zdGljcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREI2MThCOTdCOUIwMDM5MDYyRiAvKiBEaWFnbm9z
dGljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRCNzE4Qjk3QjlCMDAzOTA2MkYgLyog
RGlyZWN0aXZlSGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBEaXJlY3RpdmVIYW5kbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEw
MTJEQjgxOEI5N0I5QjAwMzkwNjJGIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkzMTAxMkRCOTE4Qjk3QjlCMDAzOTA2MkYgLyogRXh0ZW5zaW9uQmVoYXZp
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uQmVoYXZpb3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQkExOEI5N0I5QjAwMzkwNjJG
IC8qIEZvckxvb3BVbnJvbGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRm9yTG9vcFVucm9sbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEy
REJCMThCOTdCOUIwMDM5MDYyRiAvKiBGb3JMb29wVW5yb2xsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZvckxvb3BVbnJvbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMzEwMTJEQkQxOEI5N0I5QjAwMzkwNjJGIC8qIGdsc2xhbmcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gZ2xzbGFuZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkzMTAxMkRDMDE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZ19sZXguY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gZ2xzbGFuZ19sZXguY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRDMTE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZ190
YWIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gZ2xzbGFuZ190YWIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRDMjE4Qjk3QjlCMDAzOTA2
MkYgLyogZ2xzbGFuZ190YWIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZ2xz
bGFuZ190YWIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQzMxOEI5N0I5
QjAwMzkwNjJGIC8qIEhhc2hOYW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBIYXNoTmFtZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQzQxOEI5
N0I5QjAwMzkwNjJGIC8qIEluZm9TaW5rLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEluZm9TaW5rLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEw
MTJEQzUxOEI5N0I5QjAwMzkwNjJGIC8qIEluZm9TaW5rLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEluZm9TaW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMx
MDEyREM2MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkzMTAxMkRDNzE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTMxMDEyREM4MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplRGxs
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemVEbGwu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRDOTE4Qjk3QjlCMDAzOTA2
MkYgLyogSW5pdGlhbGl6ZURsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bml0aWFsaXplRGxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyRENBMThC
OTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplR2xvYmFscy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbml0aWFsaXplR2xvYmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkzMTAxMkRDQjE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbml0aWFsaXplUGFy
c2VDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQ0MxOEI5
N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkzMTAxMkRDRDE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZVZh
cmlhYmxlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbml0aWFs
aXplVmFyaWFibGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQ0Ux
OEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVWYXJpYWJsZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZVZhcmlhYmxlcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkzMTAxMkRDRjE4Qjk3QjlCMDAzOTA2MkYgLyogSW50ZXJtZWRpYXRlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVybWVkaWF0ZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREQwMThCOTdCOUIwMDM5MDYyRiAv
KiBpbnRlcm1lZGlhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gaW50ZXJt
ZWRpYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREQxMThCOTdCOUIw
MDM5MDYyRiAvKiBpbnRlcm1PdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gaW50ZXJtT3V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJE
RDIxOEI5N0I5QjAwMzkwNjJGIC8qIEludGVybVRyYXZlcnNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVybVRyYXZlcnNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMzEwMTJERDMxOEI5N0I5QjAwMzkwNjJGIC8qIGxvY2FsaW50ZXJtZWRp
YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGxvY2FsaW50ZXJtZWRpYXRl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREQ0MThCOTdCOUIwMDM5MDYy
RiAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTMxMDEyREQ1MThCOTdCOUIwMDM5MDYyRiAvKiBNYXBMb25nVmFyaWFibGVOYW1l
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXBMb25nVmFyaWFibGVOYW1l
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRENjE4Qjk3QjlCMDAzOTA2
MkYgLyogTU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNTWFwLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREQ3MThCOTdCOUIwMDM5MDYyRiAvKiBO
b2RlU2VhcmNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vZGVTZWFyY2gu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERDgxOEI5N0I5QjAwMzkwNjJG
IC8qIG9zaW5jbHVkZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBvc2luY2x1
ZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERDkxOEI5N0I5QjAwMzkw
NjJGIC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IG9zc291cmNlX3Bvc2l4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MzEwMTJEREIxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEVTU0wuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3V0cHV0RVNTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTMxMDEyRERDMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRFU1NMLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE91dHB1dEVTU0wuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEREQxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEdMU0wu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3V0cHV0R0xTTC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyRERFMThCOTdCOUIwMDM5MDYyRiAv
KiBPdXRwdXRHTFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE91dHB1dEdM
U0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEREYxOEI5N0I5QjAwMzkw
NjJGIC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IE91dHB1dEdMU0xCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MzEwMTJERTAxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEdMU0xCYXNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE91dHB1dEdMU0xCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTMxMDEyREUxMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRITFNMLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE91dHB1dEhMU0wuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRFMjE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0
cHV0SExTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPdXRwdXRITFNMLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREUzMThCOTdCOUIwMDM5MDYyRiAv
KiBwYXJzZUNvbnN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHBh
cnNlQ29uc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRFNDE4Qjk3
QjlCMDAzOTA2MkYgLyogUGFyc2VDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFBhcnNlQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTMxMDEyREU1MThCOTdCOUIwMDM5MDYyRiAvKiBQYXJzZUNvbnRleHQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2VDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTMxMDEyREU2MThCOTdCOUIwMDM5MDYyRiAvKiBQb29sQWxsb2MuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9vbEFsbG9jLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERTcxOEI5N0I5QjAwMzkwNjJGIC8qIFBvb2xB
bGxvYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb29sQWxsb2MuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERTgxOEI5N0I5QjAwMzkwNjJGIC8qIFBy
YWdtYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmFnbWEuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERTkxOEI5N0I5QjAwMzkwNjJGIC8qIFF1YWxp
ZmllckFsaXZlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxp
ZmllckFsaXZlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERUExOEI5
N0I5QjAwMzkwNjJGIC8qIFF1YWxpZmllckFsaXZlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFF1YWxpZmllckFsaXZlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTMxMDEyREVCMThCOTdCOUIwMDM5MDYyRiAvKiBSZW1vdmVUcmVlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW92ZVRyZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkzMTAxMkRFQzE4Qjk3QjlCMDAzOTA2MkYgLyogUmVtb3ZlVHJlZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdmVUcmVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREVEMThCOTdCOUIwMDM5MDYyRiAvKiBSZW5hbWVGdW5j
dGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5hbWVGdW5jdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRFRTE4Qjk3QjlCMDAzOTA2MkYg
LyogUmV3cml0ZUVsc2VCbG9ja3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUmV3cml0ZUVsc2VCbG9ja3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkzMTAxMkRFRjE4Qjk3QjlCMDAzOTA2MkYgLyogUmV3cml0ZUVsc2VCbG9ja3MuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmV3cml0ZUVsc2VCbG9ja3MuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERjAxOEI5N0I5QjAwMzkwNjJGIC8qIFNlYXJjaFN5
bWJvbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZWFyY2hTeW1i
b2wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRGMTE4Qjk3QjlCMDAz
OTA2MkYgLyogU2VhcmNoU3ltYm9sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNlYXJjaFN5bWJvbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRGMjE4
Qjk3QjlCMDAzOTA2MkYgLyogU2hhZGVyTGFuZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTaGFkZXJMYW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMzEwMTJERjMxOEI5N0I5QjAwMzkwNjJGIC8qIFNoSGFuZGxlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNoSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTMxMDEyREY0MThCOTdCOUIwMDM5MDYyRiAvKiBTeW1ib2xUYWJsZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTeW1ib2xUYWJsZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREY1MThCOTdCOUIwMDM5MDYyRiAvKiBTeW1ib2xUYWJs
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeW1ib2xUYWJsZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRGNzE4Qjk3QjlCMDAzOTA2MkYgLyogUmVz
dHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERjgxOEI5N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0RnJh
Z21lbnRTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVz
dHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkzMTAxMkRGOTE4Qjk3QjlCMDAzOTA2MkYgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhT
aGFkZXJUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRGQTE4
Qjk3QjlCMDAzOTA2MkYgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERkIxOEI5N0I5QjAwMzkwNjJGIC8qIFRy
YW5zbGF0b3JFU1NMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRy
YW5zbGF0b3JFU1NMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERkMx
OEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JFU1NMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JFU1NMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTMxMDEyREZEMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdG9yR0xTTC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREZFMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFu
c2xhdG9yR0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xhdG9y
R0xTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRGRjE4Qjk3QjlCMDAz
OTA2MkYgLyogVHJhbnNsYXRvckhMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVHJhbnNsYXRvckhMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkzMTAxMkUwMDE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckhMU0wuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMzEwMTJFMDExOEI5N0I5QjAwMzkwNjJGIC8qIFR5cGVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTMxMDEyRTAyMThCOTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2hvcnRDaXJj
dWl0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJFMDMxOEI5N0I5QjAw
MzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBVbmZvbGRTaG9ydENpcmN1aXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMzEwMTJFMDQxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTaG9ydENpcmN1aXRB
U1QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkUwNTE4Qjk3QjlCMDAz
OTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkzMTAxMkUwNjE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmlmb3JtLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMzEwMTJFMDcxOEI5N0I5QjAwMzkwNjJGIC8qIFVuaWZvcm0uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5pZm9ybS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkzMTAxMkUwODE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSB1dGlsLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMzEwMTJFMDkxOEI5N0I5QjAwMzkwNjJGIC8qIHV0aWwuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gdXRpbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkzMTAxMkUwQTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYWxpZGF0ZUxpbWl0YXRp
b25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJFMEIxOEI5N0I5QjAw
MzkwNjJGIC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVmFsaWRhdGVMaW1pdGF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkzMTAxMkUwQzE4Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFibGVJbmZvLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZhcmlhYmxlSW5mby5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyRTBEMThCOTdCOUIwMDM5MDYyRiAvKiBWYXJpYWJs
ZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFibGVJbmZvLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyRTBFMThCOTdCOUIwMDM5MDYyRiAv
KiBWYXJpYWJsZVBhY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBWYXJpYWJsZVBhY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEy
RTBGMThCOTdCOUIwMDM5MDYyRiAvKiBWYXJpYWJsZVBhY2tlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBWYXJpYWJsZVBhY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkzMTAxMkUxMDE4Qjk3QjlCMDAzOTA2MkYgLyogVmVyc2lvbkdMU0wuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmVyc2lvbkdMU0wuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkUxMTE4Qjk3QjlCMDAzOTA2MkYgLyogVmVyc2lv
bkdMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmVyc2lvbkdMU0wuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJFODExOEI5N0M4NjAwMzkwNjJGIC8q
IGNvbXBpbGVyZGVidWcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Y29tcGlsZXJkZWJ1Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyRTgy
MThCOTdDODYwMDM5MDYyRiAvKiBjb21waWxlcmRlYnVnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IGNvbXBpbGVyZGVidWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzEyQkRCMDkxNUZFQzkxRTAwOTdFQkM3IC8qIEFOR0xFLnBsaXN0ICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC5wbGlzdC54bWw7IHBhdGggPSBBTkdMRS5wbGlzdDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMzEyQkRCMEExNUZFQ0EzQTAwOTdFQkM3IC8qIEFOR0xFLnR4dCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBBTkdMRS50eHQ7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0M0Ez
RTE1MTJFQ0Y2Q0MwMDA0RjlENyAvKiBpT1MueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29u
ZmlnOyBwYXRoID0gaU9TLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
OTk1MUMwMjE0QjdBQUIzMDA2MEU5NkUgLyogbGVuZ3RoX2xpbWl0cy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBsZW5ndGhfbGltaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTQ5OTUxQzA1MTRCN0FBRDcwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVs
YXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCdWlsdEluRnVu
Y3Rpb25FbXVsYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5OTUxQzA2
MTRCN0FBRDgwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk1Q0IxM0ZEMjE3OURCM0ZEMDAxRjg1MUQgLyogRGV0ZWN0
Q2FsbERlcHRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERldGVj
dENhbGxEZXB0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVDQjEzRkQzMTc5
REIzRkQwMDFGODUxRCAvKiBEZXRlY3RDYWxsRGVwdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRGV0ZWN0Q2FsbERlcHRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTVEN0M1OUM1MTIwOEM2OEIwMDFDODczRSAvKiBBTkdMRS54Y2NvbmZpZyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQueGNjb25maWc7IHBhdGggPSBBTkdMRS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNUQ3QzU5QzYxMjA4QzY4QjAwMUM4NzNFIC8qIEJhc2UueGNjb25maWcgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gQmFzZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNUQ3QzU5QzcxMjA4QzY4QjAwMUM4NzNFIC8qIERlYnVnUmVsZWFz
ZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBEZWJ1Z1JlbGVhc2Uu
eGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMzA5QTU1MTgzQzI3REIw
MDM3MEI5MyAvKiBUb2tlbml6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVG9rZW5pemVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIzMDlBNTcxODNDMjdGMTAwMzcwQjkz
IC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhwcmVzc2lvblBh
cnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcyMzA5QTU5MTgzQzI4NEUw
MDM3MEI5MyAvKiBnbHNsYW5nX2xleC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBnbHNsYW5nX2xl
eC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcyMzA5QTVBMTgzQzI4NEUwMDM3
MEI5MyAvKiBnbHNsYW5nX3RhYi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBnbHNsYW5nX3RhYi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcyMzA5QTVCMTgzQzI4NEUwMDM3MEI5
MyAvKiBnbHNsYW5nX3RhYi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBnbHNsYW5nX3RhYi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk3MjMwOUE1RjE4M0MyQTY0MDAzNzBCOTMgLyogVHJhbnNs
YXRvckhMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3MjMwOUE2MDE4M0MyQTY0MDAzNzBCOTMgLyogVHJh
bnNsYXRvckhMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzIzMDlBNjMxODNDMkFFNTAwMzcwQjkzIC8qIE91dHB1dEhM
U0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3V0cHV0SExTTC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcyMzA5QTY0MTgzQzJBRTUwMDM3MEI5
MyAvKiBPdXRwdXRITFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE91dHB1
dEhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzIzMDlBNjcxODNDMkJFODAw
MzcwQjkzIC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRGV0ZWN0RGlzY29udGludWl0eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTcyMzA5QTY4MTgzQzJCRTgwMDM3MEI5MyAvKiBEZXRlY3REaXNjb250aW51
aXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdERpc2NvbnRpbnVp
dHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzIzMDlBNjkxODNDMkJFODAwMzcw
QjkzIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBVbmZvbGRTaG9ydENpcmN1aXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk3MjMwOUE2QTE4M0MyQkU4MDAzNzBCOTMgLyogVW5mb2xkU2hvcnRDaXJjdWl0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3MjMwOUE2QjE4M0MyQkU4MDAzNzBCOTMgLyog
VW5pZm9ybS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmlmb3Jt
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzIzMDlBNkMxODNDMkJFODAwMzcw
QjkzIC8qIFVuaWZvcm0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5pZm9y
bS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3MjY1MDkzMDE4M0FBMjEzMDBEMjhC
NDggLyogQ29kZUdlbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2RlR2VuLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzI2NTA5MzExODNBQTI0NjAwRDI4QjQ4IC8qIEluaXRp
YWxpemVHTFBvc2l0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemVHTFBvc2l0
aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzI2NTA5MzIxODNBQTI0NjAw
RDI4QjQ4IC8qIEluaXRpYWxpemVHTFBvc2l0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRpYWxp
emVHTFBvc2l0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcyNjUwOTMzMTgz
QUEyODkwMEQyOEI0OCAvKiBOb2RlU2VhcmNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vZGVTZWFyY2gu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzI2NTA5MzQxODNBQTNCMjAwRDI4QjQ4
IC8qIFBhcnNlQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJzZUNvbnRleHQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3MjY1MDkzNTE4M0FBM0IyMDBEMjhCNDgg
LyogUGFyc2VDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlQ29udGV4dC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk3MjY1MDkzNjE4M0FBM0M2MDBEMjhCNDggLyogVW5mb2xk
U2hvcnRDaXJjdWl0QVNULmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3Vp
dEFTVC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcyNjUwOTM3MTgzQUEzQzYw
MEQyOEI0OCAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5mb2xk
U2hvcnRDaXJjdWl0QVNULmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkwRDlCMEY5
MTJFMTFEQ0IwMDJENDI1NSAvKiBDb21waWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBDb21waWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHVzZXNU
YWJzID0gMDsgfTsKLQkJOTBEOUIwRkExMkUxMURDQjAwMkQ0MjU1IC8qIEV4dGVuc2lvbkJlaGF2
aW9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4dGVuc2lvbkJlaGF2aW9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkwRDlCMEZFMTJFMTFEQ0IwMDJENDI1
NSAvKiBnbHNsYW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGdsc2xhbmcu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTBEOUIxMDAxMkUxMURDQjAwMkQ0MjU1
IC8qIFNlYXJjaFN5bWJvbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTZWFyY2hTeW1ib2wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5MEQ5QjEw
MTEyRTExRENCMDAyRDQyNTUgLyogU2VhcmNoU3ltYm9sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNlYXJjaFN5bWJvbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk5MEQ5QjEwQjEyRTExREQ2MDAyRDQyNTUgLyogdXRpbC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSB1dGlsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJOTBEOUIxMEMxMkUxMURENjAwMkQ0MjU1IC8qIHV0aWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gdXRpbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5MEQ5
QjEwRDEyRTExREQ2MDAyRDQyNTUgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTBEOUIxMEUxMkUxMURENjAwMkQ0MjU1IC8qIFZh
bGlkYXRlTGltaXRhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFs
aWRhdGVMaW1pdGF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5MEQ5QjEw
RjEyRTExREQ2MDAyRDQyNTUgLyogVmFyaWFibGVJbmZvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFZhcmlhYmxlSW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTkwRDlCMTEwMTJFMTFERDYwMDJENDI1NSAvKiBWYXJpYWJsZUluZm8uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFibGVJbmZvLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTkwRDlCMTExMTJFMTFERDYwMDJENDI1NSAvKiBWZXJzaW9uR0xT
TC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWZXJzaW9uR0xTTC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkwRDlCMTEyMTJFMTFERDYwMDJENDI1
NSAvKiBWZXJzaW9uR0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWZXJz
aW9uR0xTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMDhDM0NEQTE2RDZDQjYx
MDAzRjBCODMgLyogQXJyYXlCb3VuZHNDbGFtcGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEFycmF5Qm91bmRzQ2xhbXBlci5jcHA7IHBhdGggPSBzcmMvdGhpcmRf
cGFydHkvY29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTA4QzNDREIxNkQ2Q0I2MTAwM0YwQjgzIC8qIEFycmF5Qm91bmRzQ2xhbXBl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBcnJheUJvdW5kc0NsYW1wZXIu
aDsgcGF0aCA9IHNyYy90aGlyZF9wYXJ0eS9jb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTBBQUJFMkExM0FGRTgxMDAwRjJFQkQxIC8q
IEZvckxvb3BVbnJvbGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Rm9yTG9vcFVucm9sbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEwQUFCRTJC
MTNBRkU4MTAwMEYyRUJEMSAvKiBGb3JMb29wVW5yb2xsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZvckxvb3BVbnJvbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQTBBQUJFMkUxM0FGRTgzMDAwRjJFQkQxIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcExvbmdWYXJpYWJsZU5hbWVz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTBBQUJFMkYxM0FGRTgzMDAwRjJF
QkQxIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1hcExvbmdWYXJpYWJsZU5hbWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUEwQUFCRTMyMTNBRkU4NDcwMEYyRUJEMSAvKiBPdXRwdXRHTFNMQmFzZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPdXRwdXRHTFNMQmFzZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEwQUFCRTMzMTNBRkU4NDcwMEYyRUJEMSAvKiBPdXRw
dXRHTFNMQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPdXRwdXRHTFNM
QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMEFBQkU0MjEzQUZFOTQ1MDBG
MkVCRDEgLyogT3V0cHV0RVNTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBPdXRwdXRFU1NMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTBBQUJF
NDMxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gT3V0cHV0RVNTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlB
MEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckVTU0wuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlBMEFBQkU0NzEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRv
ckVTU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckVTU0wu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTI2NEY4OTMxNjk3NERFRDAwNkZBQTVB
IC8qIERpYWdub3N0aWNzQmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBEaWFnbm9zdGljc0Jhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
MjY0Rjg5NDE2OTc0REVEMDA2RkFBNUEgLyogRGlhZ25vc3RpY3NCYXNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpYWdub3N0aWNzQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBMjY0Rjg5NTE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0aXZlSGFuZGxl
ckJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZl
SGFuZGxlckJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU2LDY3ICsz
MzksOCBAQAogCQlBMjY0RjhBODE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVG9rZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBMjY0RjhBOTE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTI2NEY4QUIxNjk3NERFRDAwNkZBQTVBIC8qIFRva2VuaXplci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUb2tlbml6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQTI2NEY4QzUxNjk3NEUyQTAwNkZBQTVBIC8qIEhhc2hOYW1lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoTmFtZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQTI2NEY4QzYxNjk3NEUyQTAwNkZBQTVBIC8qIFZhcmlhYmxlUGFja2Vy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZhcmlhYmxlUGFja2Vy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NEY4QzcxNjk3NEUyQTAwNkZB
QTVBIC8qIFZhcmlhYmxlUGFja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFZhcmlhYmxlUGFja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEyNjRGOEND
MTY5NzYyQUEwMDZGQUE1QSAvKiBraHJwbGF0Zm9ybS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBraHJwbGF0Zm9ybS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlB
MjY1NjdCMDE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlhZ25vc3RpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlBMjY1NjdCMTE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlhZ25vc3RpY3MuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY3QjIxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2
ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0
aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0IzMTU5
QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQTI2NTY3QjQxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZVBhcnNl
Q29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0I1MTU5QzIx
QjEwMDM5ODUzOSAvKiBQcmFnbWEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UHJhZ21hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0I2MTU5QzIxQjEw
MDM5ODUzOSAvKiBSZW5hbWVGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZW5hbWVGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1
NjgyRDE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2ODJFMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5
R3JhcGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBo
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2ODJGMTU5QzIzRTEwMDM5ODUz
OSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlBMjY1NjgzMDE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBo
QnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2ODMxMTU5QzIz
RTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY4MzIxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVu
Y3lHcmFwaE91dHB1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXBlbmRl
bmN5R3JhcGhPdXRwdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY4MzMx
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY4MzUxNTlDMjNFMTAwMzk4NTM5IC8q
IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2ODM2MTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmlj
dEZyYWdtZW50U2hhZGVyVGltaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQTI2NTY4MzcxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY4
MzgxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMEQxMTIwMEYwRTMwMDA4OEU2OSAv
KiBsaWJBTkdMRS5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5
cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBsaWJBTkdMRS5hOyBz
b3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQlGQjM5RDIyMTEyMDBGMzVBMDAw
ODhFNjkgLyogQmFzZVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGlj
aXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBC
YXNlVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyMjQxMjAwRjM1
QTAwMDg4RTY5IC8qIENvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxp
Y2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0g
Q29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjI1MTIwMEYzNUEw
MDA4OEU2OSAvKiBDb25zdGFudFVuaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBh
dGggPSBDb25zdGFudFVuaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlE
MjI2MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBkZWJ1Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZC
MzlEMjI3MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBkZWJ1Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDIy
QTEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1NpbmsuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW5mb1NpbmsuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlGQjM5RDIyQjEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1NpbmsuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVu
Y29kaW5nID0gNDsgcGF0aCA9IEluZm9TaW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUZCMzlEMjJDMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlGQjM5RDIyRDEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gSW5pdGlhbGl6ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDIyRTEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlh
bGl6ZURsbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbml0aWFs
aXplRGxsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyMkYxMjAwRjM1
QTAwMDg4RTY5IC8qIEluaXRpYWxpemVEbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsg
cGF0aCA9IEluaXRpYWxpemVEbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIz
OUQyMzAxMjAwRjM1QTAwMDg4RTY5IC8qIEluaXRpYWxpemVHbG9iYWxzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZp
bGVFbmNvZGluZyA9IDQ7IHBhdGggPSBJbml0aWFsaXplR2xvYmFscy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlGQjM5RDIzMTEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZVBh
cnNlQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gSW5pdGlhbGl6
ZVBhcnNlQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDIzMjEy
MDBGMzVBMDAwODhFNjkgLyogSW50ZXJtZWRpYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEludGVybWVkaWF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUZCMzlEMjMzMTIwMEYzNUEwMDA4OEU2OSAvKiBpbnRlcm1lZGlhdGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
aDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IGludGVybWVkaWF0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlGQjM5RDIzNDEyMDBGMzVBMDAwODhFNjkgLyogaW50ZXJtT3V0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGludGVybU91dC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjM1MTIwMEYzNUEwMDA4OEU2OSAvKiBJ
bnRlcm1UcmF2ZXJzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
bnRlcm1UcmF2ZXJzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjM2
MTIwMEYzNUEwMDA4OEU2OSAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5j
b2RpbmcgPSA0OyBwYXRoID0gbG9jYWxpbnRlcm1lZGlhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJRkIzOUQyMzcxMjAwRjM1QTAwMDg4RTY5IC8qIE1NYXAuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsg
ZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IE1NYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQyMzgxMjAwRjM1QTAwMDg4RTY5IC8qIG9zaW5jbHVkZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBvc2luY2x1ZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQyMzkxMjAwRjM1QTAwMDg4RTY5IC8qIG9zc291cmNlX3Bvc2l4LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IG9zc291cmNlX3Bvc2l4LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyM0ExMjAwRjM1QTAwMDg4RTY5IC8q
IG9zc291cmNlX3dpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBv
c3NvdXJjZV93aW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDIzQjEy
MDBGMzVBMDAwODhFNjkgLyogT3V0cHV0R0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBPdXRwdXRHTFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJRkIzOUQyM0MxMjAwRjM1QTAwMDg4RTY5IC8qIE91dHB1dEdMU0wuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmls
ZUVuY29kaW5nID0gNDsgcGF0aCA9IE91dHB1dEdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQyM0YxMjAwRjM1QTAwMDg4RTY5IC8qIHBhcnNlQ29uc3QuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gcGFyc2VDb25zdC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjQyMTIwMEYzNUEwMDA4OEU2OSAvKiBQb29sQWxs
b2MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9vbEFsbG9jLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyNDMxMjAwRjM1QTAwMDg4RTY5
IC8qIFBvb2xBbGxvYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0Rmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gUG9vbEFs
bG9jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjU2MTIwMEYzNUEwMDA4
OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBRdWFsaWZpZXJBbGl2ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZCMzlEMjU3MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBm
aWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gUXVhbGlmaWVyQWxpdmUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJRkIzOUQyNTgxMjAwRjM1QTAwMDg4RTY5IC8qIFJlbW92ZVRyZWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3ZlVHJlZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjU5MTIwMEYzNUEwMDA4OEU2OSAvKiBS
ZW1vdmVUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBSZW1vdmVUcmVl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjVBMTIwMEYzNUEwMDA4OEU2
OSAvKiBTaGFkZXJMYW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNoYWRlckxhbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI1QjEy
MDBGMzVBMDAwODhFNjkgLyogU2hIYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsg
cGF0aCA9IFNoSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjVD
MTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTeW1ib2xUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUZCMzlEMjVEMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5o
OyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gU3ltYm9sVGFibGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJRkIzOUQyNjgxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNM
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5zbGF0b3JHTFNM
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyNjkxMjAwRjM1QTAwMDg4
RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGgg
PSBUcmFuc2xhdG9yR0xTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI2
QzEyMDBGMzVBMDAwODhFNjkgLyogVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsg
cGF0aCA9IFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMkJGMTIw
MEYzRTYwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7
IHBhdGggPSBTaGFkZXJMYW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAvKiBFbmQg
UEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAKQEAgLTMzMSw2ICszNTUsMTM3IEBACiAvKiBF
bmQgUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhHcm91
cCBzZWN0aW9uICovCisJCTMxMDEyRDlGMThCOTdCOUIwMDM5MDYyRiAvKiB0cmFuc2xhdG9yICov
ID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkzMTAxMkRBOTE4
Qjk3QjlCMDAzOTA2MkYgLyogZGVwZ3JhcGggKi8sCisJCQkJMzEwMTJERjYxOEI5N0I5QjAwMzkw
NjJGIC8qIHRpbWluZyAqLywKKwkJCQkzMTAxMkRBMDE4Qjk3QjlCMDAzOTA2MkYgLyogQmFzZVR5
cGVzLmggKi8sCisJCQkJMzEwMTJEQTExOEI5N0I5QjAwMzkwNjJGIC8qIEJ1aWx0SW5GdW5jdGlv
bkVtdWxhdG9yLmNwcCAqLywKKwkJCQkzMTAxMkRBMjE4Qjk3QjlCMDAzOTA2MkYgLyogQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0b3IuaCAqLywKKwkJCQkzMTAxMkRBMzE4Qjk3QjlCMDAzOTA2MkYgLyog
Q29kZUdlbi5jcHAgKi8sCisJCQkJMzEwMTJEQTQxOEI5N0I5QjAwMzkwNjJGIC8qIENvbW1vbi5o
ICovLAorCQkJCTMxMDEyRTgxMThCOTdDODYwMDM5MDYyRiAvKiBjb21waWxlcmRlYnVnLmNwcCAq
LywKKwkJCQkzMTAxMkU4MjE4Qjk3Qzg2MDAzOTA2MkYgLyogY29tcGlsZXJkZWJ1Zy5oICovLAor
CQkJCTMxMDEyREE1MThCOTdCOUIwMDM5MDYyRiAvKiBDb21waWxlci5jcHAgKi8sCisJCQkJMzEw
MTJEQTgxOEI5N0I5QjAwMzkwNjJGIC8qIENvbnN0YW50VW5pb24uaCAqLywKKwkJCQkzMTAxMkRC
MTE4Qjk3QjlCMDAzOTA2MkYgLyogRGV0ZWN0Q2FsbERlcHRoLmNwcCAqLywKKwkJCQkzMTAxMkRC
MjE4Qjk3QjlCMDAzOTA2MkYgLyogRGV0ZWN0Q2FsbERlcHRoLmggKi8sCisJCQkJMzEwMTJEQjMx
OEI5N0I5QjAwMzkwNjJGIC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwICovLAorCQkJCTMxMDEy
REI0MThCOTdCOUIwMDM5MDYyRiAvKiBEZXRlY3REaXNjb250aW51aXR5LmggKi8sCisJCQkJMzEw
MTJEQjUxOEI5N0I5QjAwMzkwNjJGIC8qIERpYWdub3N0aWNzLmNwcCAqLywKKwkJCQkzMTAxMkRC
NjE4Qjk3QjlCMDAzOTA2MkYgLyogRGlhZ25vc3RpY3MuaCAqLywKKwkJCQkzMTAxMkRCNzE4Qjk3
QjlCMDAzOTA2MkYgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8sCisJCQkJMzEwMTJEQjgxOEI5
N0I5QjAwMzkwNjJGIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKKwkJCQkzMTAxMkRCOTE4Qjk3
QjlCMDAzOTA2MkYgLyogRXh0ZW5zaW9uQmVoYXZpb3IuaCAqLywKKwkJCQkzMTAxMkRCQTE4Qjk3
QjlCMDAzOTA2MkYgLyogRm9yTG9vcFVucm9sbC5jcHAgKi8sCisJCQkJMzEwMTJEQkIxOEI5N0I5
QjAwMzkwNjJGIC8qIEZvckxvb3BVbnJvbGwuaCAqLywKKwkJCQkzMTAxMkRCRDE4Qjk3QjlCMDAz
OTA2MkYgLyogZ2xzbGFuZy5oICovLAorCQkJCTMxMDEyREMwMThCOTdCOUIwMDM5MDYyRiAvKiBn
bHNsYW5nX2xleC5jcHAgKi8sCisJCQkJMzEwMTJEQzExOEI5N0I5QjAwMzkwNjJGIC8qIGdsc2xh
bmdfdGFiLmNwcCAqLywKKwkJCQkzMTAxMkRDMjE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZ190
YWIuaCAqLywKKwkJCQkzMTAxMkRDMzE4Qjk3QjlCMDAzOTA2MkYgLyogSGFzaE5hbWVzLmggKi8s
CisJCQkJMzEwMTJEQzQxOEI5N0I5QjAwMzkwNjJGIC8qIEluZm9TaW5rLmNwcCAqLywKKwkJCQkz
MTAxMkRDNTE4Qjk3QjlCMDAzOTA2MkYgLyogSW5mb1NpbmsuaCAqLywKKwkJCQkzMTAxMkRDNjE4
Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZS5jcHAgKi8sCisJCQkJMzEwMTJEQzcxOEI5N0I5
QjAwMzkwNjJGIC8qIEluaXRpYWxpemUuaCAqLywKKwkJCQkzMTAxMkRDODE4Qjk3QjlCMDAzOTA2
MkYgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi8sCisJCQkJMzEwMTJEQzkxOEI5N0I5QjAwMzkwNjJG
IC8qIEluaXRpYWxpemVEbGwuaCAqLywKKwkJCQkzMTAxMkRDQTE4Qjk3QjlCMDAzOTA2MkYgLyog
SW5pdGlhbGl6ZUdsb2JhbHMuaCAqLywKKwkJCQkzMTAxMkRDQjE4Qjk3QjlCMDAzOTA2MkYgLyog
SW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgKi8sCisJCQkJMzEwMTJEQ0MxOEI5N0I5QjAwMzkw
NjJGIC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCAqLywKKwkJCQkzMTAxMkRDRDE4Qjk3QjlC
MDAzOTA2MkYgLyogSW5pdGlhbGl6ZVZhcmlhYmxlcy5jcHAgKi8sCisJCQkJMzEwMTJEQ0UxOEI5
N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVWYXJpYWJsZXMuaCAqLywKKwkJCQkzMTAxMkRDRjE4
Qjk3QjlCMDAzOTA2MkYgLyogSW50ZXJtZWRpYXRlLmNwcCAqLywKKwkJCQkzMTAxMkREMDE4Qjk3
QjlCMDAzOTA2MkYgLyogaW50ZXJtZWRpYXRlLmggKi8sCisJCQkJMzEwMTJERDExOEI5N0I5QjAw
MzkwNjJGIC8qIGludGVybU91dC5jcHAgKi8sCisJCQkJMzEwMTJERDIxOEI5N0I5QjAwMzkwNjJG
IC8qIEludGVybVRyYXZlcnNlLmNwcCAqLywKKwkJCQkzMTAxMkREMzE4Qjk3QjlCMDAzOTA2MkYg
LyogbG9jYWxpbnRlcm1lZGlhdGUuaCAqLywKKwkJCQkzMTAxMkRENDE4Qjk3QjlCMDAzOTA2MkYg
LyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwICovLAorCQkJCTMxMDEyREQ1MThCOTdCOUIwMDM5
MDYyRiAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5oICovLAorCQkJCTMxMDEyREQ2MThCOTdCOUIw
MDM5MDYyRiAvKiBNTWFwLmggKi8sCisJCQkJMzEwMTJERDcxOEI5N0I5QjAwMzkwNjJGIC8qIE5v
ZGVTZWFyY2guaCAqLywKKwkJCQkzMTAxMkREODE4Qjk3QjlCMDAzOTA2MkYgLyogb3NpbmNsdWRl
LmggKi8sCisJCQkJMzEwMTJERDkxOEI5N0I5QjAwMzkwNjJGIC8qIG9zc291cmNlX3Bvc2l4LmNw
cCAqLywKKwkJCQkzMTAxMkREQjE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0RVNTTC5jcHAgKi8s
CisJCQkJMzEwMTJEREMxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEVTU0wuaCAqLywKKwkJCQkz
MTAxMkRERDE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0R0xTTC5jcHAgKi8sCisJCQkJMzEwMTJE
REUxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEdMU0wuaCAqLywKKwkJCQkzMTAxMkRERjE4Qjk3
QjlCMDAzOTA2MkYgLyogT3V0cHV0R0xTTEJhc2UuY3BwICovLAorCQkJCTMxMDEyREUwMThCOTdC
OUIwMDM5MDYyRiAvKiBPdXRwdXRHTFNMQmFzZS5oICovLAorCQkJCTMxMDEyREUxMThCOTdCOUIw
MDM5MDYyRiAvKiBPdXRwdXRITFNMLmNwcCAqLywKKwkJCQkzMTAxMkRFMjE4Qjk3QjlCMDAzOTA2
MkYgLyogT3V0cHV0SExTTC5oICovLAorCQkJCTMxMDEyREUzMThCOTdCOUIwMDM5MDYyRiAvKiBw
YXJzZUNvbnN0LmNwcCAqLywKKwkJCQkzMTAxMkRFNDE4Qjk3QjlCMDAzOTA2MkYgLyogUGFyc2VD
b250ZXh0LmNwcCAqLywKKwkJCQkzMTAxMkRFNTE4Qjk3QjlCMDAzOTA2MkYgLyogUGFyc2VDb250
ZXh0LmggKi8sCisJCQkJMzEwMTJERTYxOEI5N0I5QjAwMzkwNjJGIC8qIFBvb2xBbGxvYy5jcHAg
Ki8sCisJCQkJMzEwMTJERTcxOEI5N0I5QjAwMzkwNjJGIC8qIFBvb2xBbGxvYy5oICovLAorCQkJ
CTMxMDEyREU4MThCOTdCOUIwMDM5MDYyRiAvKiBQcmFnbWEuaCAqLywKKwkJCQkzMTAxMkRFOTE4
Qjk3QjlCMDAzOTA2MkYgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovLAorCQkJCTMxMDEyREVBMThC
OTdCOUIwMDM5MDYyRiAvKiBRdWFsaWZpZXJBbGl2ZS5oICovLAorCQkJCTMxMDEyREVCMThCOTdC
OUIwMDM5MDYyRiAvKiBSZW1vdmVUcmVlLmNwcCAqLywKKwkJCQkzMTAxMkRFQzE4Qjk3QjlCMDAz
OTA2MkYgLyogUmVtb3ZlVHJlZS5oICovLAorCQkJCTMxMDEyREVEMThCOTdCOUIwMDM5MDYyRiAv
KiBSZW5hbWVGdW5jdGlvbi5oICovLAorCQkJCTMxMDEyREVFMThCOTdCOUIwMDM5MDYyRiAvKiBS
ZXdyaXRlRWxzZUJsb2Nrcy5jcHAgKi8sCisJCQkJMzEwMTJERUYxOEI5N0I5QjAwMzkwNjJGIC8q
IFJld3JpdGVFbHNlQmxvY2tzLmggKi8sCisJCQkJMzEwMTJERjAxOEI5N0I5QjAwMzkwNjJGIC8q
IFNlYXJjaFN5bWJvbC5jcHAgKi8sCisJCQkJMzEwMTJERjExOEI5N0I5QjAwMzkwNjJGIC8qIFNl
YXJjaFN5bWJvbC5oICovLAorCQkJCTMxMDEyREYyMThCOTdCOUIwMDM5MDYyRiAvKiBTaGFkZXJM
YW5nLmNwcCAqLywKKwkJCQkzMTAxMkRGMzE4Qjk3QjlCMDAzOTA2MkYgLyogU2hIYW5kbGUuaCAq
LywKKwkJCQkzMTAxMkRGNDE4Qjk3QjlCMDAzOTA2MkYgLyogU3ltYm9sVGFibGUuY3BwICovLAor
CQkJCTMxMDEyREY1MThCOTdCOUIwMDM5MDYyRiAvKiBTeW1ib2xUYWJsZS5oICovLAorCQkJCTMx
MDEyREZCMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi8sCisJCQkJMzEw
MTJERkMxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JFU1NMLmggKi8sCisJCQkJMzEwMTJE
RkQxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLywKKwkJCQkzMTAxMkRG
RTE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckdMU0wuaCAqLywKKwkJCQkzMTAxMkRGRjE4
Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckhMU0wuY3BwICovLAorCQkJCTMxMDEyRTAwMThC
OTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9ySExTTC5oICovLAorCQkJCTMxMDEyRTAxMThCOTdC
OUIwMDM5MDYyRiAvKiBUeXBlcy5oICovLAorCQkJCTMxMDEyRTAyMThCOTdCOUIwMDM5MDYyRiAv
KiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwICovLAorCQkJCTMxMDEyRTAzMThCOTdCOUIwMDM5MDYy
RiAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCAqLywKKwkJCQkzMTAxMkUwNDE4Qjk3QjlCMDAzOTA2
MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcCAqLywKKwkJCQkzMTAxMkUwNTE4Qjk3QjlC
MDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmggKi8sCisJCQkJMzEwMTJFMDYxOEI5
N0I5QjAwMzkwNjJGIC8qIFVuaWZvcm0uY3BwICovLAorCQkJCTMxMDEyRTA3MThCOTdCOUIwMDM5
MDYyRiAvKiBVbmlmb3JtLmggKi8sCisJCQkJMzEwMTJFMDgxOEI5N0I5QjAwMzkwNjJGIC8qIHV0
aWwuY3BwICovLAorCQkJCTMxMDEyRTA5MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmggKi8sCisJ
CQkJMzEwMTJFMEExOEI5N0I5QjAwMzkwNjJGIC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwICov
LAorCQkJCTMxMDEyRTBCMThCOTdCOUIwMDM5MDYyRiAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmgg
Ki8sCisJCQkJMzEwMTJFMEMxOEI5N0I5QjAwMzkwNjJGIC8qIFZhcmlhYmxlSW5mby5jcHAgKi8s
CisJCQkJMzEwMTJFMEQxOEI5N0I5QjAwMzkwNjJGIC8qIFZhcmlhYmxlSW5mby5oICovLAorCQkJ
CTMxMDEyRTBFMThCOTdCOUIwMDM5MDYyRiAvKiBWYXJpYWJsZVBhY2tlci5jcHAgKi8sCisJCQkJ
MzEwMTJFMEYxOEI5N0I5QjAwMzkwNjJGIC8qIFZhcmlhYmxlUGFja2VyLmggKi8sCisJCQkJMzEw
MTJFMTAxOEI5N0I5QjAwMzkwNjJGIC8qIFZlcnNpb25HTFNMLmNwcCAqLywKKwkJCQkzMTAxMkUx
MTE4Qjk3QjlCMDAzOTA2MkYgLyogVmVyc2lvbkdMU0wuaCAqLywKKwkJCSk7CisJCQlwYXRoID0g
dHJhbnNsYXRvcjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTMxMDEyREE5
MThCOTdCOUIwMDM5MDYyRiAvKiBkZXBncmFwaCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOwor
CQkJY2hpbGRyZW4gPSAoCisJCQkJMzEwMTJEQUExOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVu
Y3lHcmFwaC5jcHAgKi8sCisJCQkJMzEwMTJEQUIxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVu
Y3lHcmFwaC5oICovLAorCQkJCTMxMDEyREFDMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5
R3JhcGhCdWlsZGVyLmNwcCAqLywKKwkJCQkzMTAxMkRBRDE4Qjk3QjlCMDAzOTA2MkYgLyogRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5oICovLAorCQkJCTMxMDEyREFFMThCOTdCOUIwMDM5MDYyRiAv
KiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwICovLAorCQkJCTMxMDEyREFGMThCOTdCOUIwMDM5
MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCAqLywKKwkJCQkzMTAxMkRCMDE4Qjk3QjlC
MDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICovLAorCQkJKTsKKwkJCXBh
dGggPSBkZXBncmFwaDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTMxMDEy
REY2MThCOTdCOUIwMDM5MDYyRiAvKiB0aW1pbmcgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCTMxMDEyREY3MThCOTdCOUIwMDM5MDYyRiAvKiBSZXN0cmlj
dEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCAqLywKKwkJCQkzMTAxMkRGODE4Qjk3QjlCMDAzOTA2
MkYgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oICovLAorCQkJCTMxMDEyREY5MThC
OTdCOUIwMDM5MDYyRiAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgKi8sCisJCQkJ
MzEwMTJERkExOEI5N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgg
Ki8sCisJCQkpOworCQkJcGF0aCA9IHRpbWluZzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CisJCX07CiAJCTMxMkJEQjA3MTVGRUM4RTYwMDk3RUJDNyAvKiBtaXNjICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTM3NywzMSArNTMyLDYgQEAKIAkJCXBh
dGggPSBpbmNsdWRlL0tIUjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCUEy
NjU2ODJDMTU5QzIzRTEwMDM5ODUzOSAvKiBkZXBncmFwaCAqLyA9IHsKLQkJCWlzYSA9IFBCWEdy
b3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJQTI2NTY4MkQxNTlDMjNFMTAwMzk4NTM5IC8qIERl
cGVuZGVuY3lHcmFwaC5jcHAgKi8sCi0JCQkJQTI2NTY4MkUxNTlDMjNFMTAwMzk4NTM5IC8qIERl
cGVuZGVuY3lHcmFwaC5oICovLAotCQkJCUEyNjU2ODJGMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBl
bmRlbmN5R3JhcGhCdWlsZGVyLmNwcCAqLywKLQkJCQlBMjY1NjgzMDE1OUMyM0UxMDAzOTg1Mzkg
LyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oICovLAotCQkJCUEyNjU2ODMxMTU5QzIzRTEwMDM5
ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwICovLAotCQkJCUEyNjU2ODMyMTU5QzIz
RTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCAqLywKLQkJCQlBMjY1NjgzMzE1
OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICovLAotCQkJKTsK
LQkJCXBhdGggPSBkZXBncmFwaDsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0J
CUEyNjU2ODM0MTU5QzIzRTEwMDM5ODUzOSAvKiB0aW1pbmcgKi8gPSB7Ci0JCQlpc2EgPSBQQlhH
cm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCUEyNjU2ODM1MTU5QzIzRTEwMDM5ODUzOSAvKiBS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCAqLywKLQkJCQlBMjY1NjgzNjE1OUMyM0Ux
MDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oICovLAotCQkJCUEyNjU2
ODM3MTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgKi8s
Ci0JCQkJQTI2NTY4MzgxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmggKi8sCi0JCQkpOwotCQkJcGF0aCA9IHRpbWluZzsKLQkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7Ci0JCX07CiAJCUEyOUIxNUU5MTY5NzhCN0QwMDExMUQ5NyAvKiBpbmNsdWRlICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTQ0MiwxMDUgKzU3Miw4
IEBACiAJCUZCMzlEMjIwMTIwMEYzNUEwMDA4OEU2OSAvKiBjb21waWxlciAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQTI2NTY4MkMxNTlDMjNFMTAwMzk4
NTM5IC8qIGRlcGdyYXBoICovLAorCQkJCTMxMDEyRDlGMThCOTdCOUIwMDM5MDYyRiAvKiB0cmFu
c2xhdG9yICovLAogCQkJCUZCMzlEMjQ0MTIwMEYzNUEwMDA4OEU2OSAvKiBwcmVwcm9jZXNzb3Ig
Ki8sCi0JCQkJQTI2NTY4MzQxNTlDMjNFMTAwMzk4NTM5IC8qIHRpbWluZyAqLywKLQkJCQlGQjM5
RDIyMTEyMDBGMzVBMDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8sCi0JCQkJNDk5NTFDMDUxNEI3
QUFENzAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCAqLywKLQkJCQk3MjY1
MDkzNjE4M0FBM0M2MDBEMjhCNDggLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcCAqLywKLQkJ
CQk3MjY1MDkzNzE4M0FBM0M2MDBEMjhCNDggLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmggKi8s
Ci0JCQkJNzI2NTA5MzQxODNBQTNCMjAwRDI4QjQ4IC8qIFBhcnNlQ29udGV4dC5jcHAgKi8sCi0J
CQkJNzIzMDlBNjcxODNDMkJFODAwMzcwQjkzIC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwICov
LAotCQkJCTcyMzA5QTY4MTgzQzJCRTgwMDM3MEI5MyAvKiBEZXRlY3REaXNjb250aW51aXR5Lmgg
Ki8sCi0JCQkJNzIzMDlBNjkxODNDMkJFODAwMzcwQjkzIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5j
cHAgKi8sCi0JCQkJNzIzMDlBNkExODNDMkJFODAwMzcwQjkzIC8qIFVuZm9sZFNob3J0Q2lyY3Vp
dC5oICovLAotCQkJCTcyMzA5QTZCMTgzQzJCRTgwMDM3MEI5MyAvKiBVbmlmb3JtLmNwcCAqLywK
LQkJCQk3MjMwOUE2QzE4M0MyQkU4MDAzNzBCOTMgLyogVW5pZm9ybS5oICovLAotCQkJCTcyNjUw
OTM1MTgzQUEzQjIwMEQyOEI0OCAvKiBQYXJzZUNvbnRleHQuaCAqLywKLQkJCQk3MjY1MDkzMzE4
M0FBMjg5MDBEMjhCNDggLyogTm9kZVNlYXJjaC5oICovLAotCQkJCTcyNjUwOTMxMTgzQUEyNDYw
MEQyOEI0OCAvKiBJbml0aWFsaXplR0xQb3NpdGlvbi5jcHAgKi8sCi0JCQkJNzI2NTA5MzIxODNB
QTI0NjAwRDI4QjQ4IC8qIEluaXRpYWxpemVHTFBvc2l0aW9uLmggKi8sCi0JCQkJNDk5NTFDMDYx
NEI3QUFEODAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggKi8sCi0JCQkJNzI2
NTA5MzAxODNBQTIxMzAwRDI4QjQ4IC8qIENvZGVHZW4uY3BwICovLAotCQkJCUZCMzlEMjI0MTIw
MEYzNUEwMDA4OEU2OSAvKiBDb21tb24uaCAqLywKLQkJCQk5MEQ5QjBGOTEyRTExRENCMDAyRDQy
NTUgLyogQ29tcGlsZXIuY3BwICovLAotCQkJCUZCMzlEMjI1MTIwMEYzNUEwMDA4OEU2OSAvKiBD
b25zdGFudFVuaW9uLmggKi8sCi0JCQkJRkIzOUQyMjYxMjAwRjM1QTAwMDg4RTY5IC8qIGRlYnVn
LmNwcCAqLywKLQkJCQlGQjM5RDIyNzEyMDBGMzVBMDAwODhFNjkgLyogZGVidWcuaCAqLywKLQkJ
CQk1Q0IxM0ZEMzE3OURCM0ZEMDAxRjg1MUQgLyogRGV0ZWN0Q2FsbERlcHRoLmggKi8sCi0JCQkJ
NUNCMTNGRDIxNzlEQjNGRDAwMUY4NTFEIC8qIERldGVjdENhbGxEZXB0aC5jcHAgKi8sCi0JCQkJ
QTI2NTY3QjAxNTlDMjFCMTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmNwcCAqLywKLQkJCQlBMjY1
NjdCMTE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCAqLywKLQkJCQlBMjY1NjdCMjE1
OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8sCi0JCQkJQTI2NTY3QjMx
NTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKLQkJCQk5MEQ5QjBGQTEy
RTExRENCMDAyRDQyNTUgLyogRXh0ZW5zaW9uQmVoYXZpb3IuaCAqLywKLQkJCQlBMEFBQkUyQTEz
QUZFODEwMDBGMkVCRDEgLyogRm9yTG9vcFVucm9sbC5jcHAgKi8sCi0JCQkJQTBBQUJFMkIxM0FG
RTgxMDAwRjJFQkQxIC8qIEZvckxvb3BVbnJvbGwuaCAqLywKLQkJCQk5MEQ5QjBGRTEyRTExRENC
MDAyRDQyNTUgLyogZ2xzbGFuZy5oICovLAotCQkJCTcyMzA5QTU5MTgzQzI4NEUwMDM3MEI5MyAv
KiBnbHNsYW5nX2xleC5jcHAgKi8sCi0JCQkJNzIzMDlBNUExODNDMjg0RTAwMzcwQjkzIC8qIGds
c2xhbmdfdGFiLmNwcCAqLywKLQkJCQk3MjMwOUE1QjE4M0MyODRFMDAzNzBCOTMgLyogZ2xzbGFu
Z190YWIuaCAqLywKLQkJCQlBMjY0RjhDNTE2OTc0RTJBMDA2RkFBNUEgLyogSGFzaE5hbWVzLmgg
Ki8sCi0JCQkJRkIzOUQyMkExMjAwRjM1QTAwMDg4RTY5IC8qIEluZm9TaW5rLmNwcCAqLywKLQkJ
CQlGQjM5RDIyQjEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1NpbmsuaCAqLywKLQkJCQlGQjM5RDIy
QzEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZS5jcHAgKi8sCi0JCQkJRkIzOUQyMkQxMjAw
RjM1QTAwMDg4RTY5IC8qIEluaXRpYWxpemUuaCAqLywKLQkJCQlGQjM5RDIyRTEyMDBGMzVBMDAw
ODhFNjkgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi8sCi0JCQkJRkIzOUQyMkYxMjAwRjM1QTAwMDg4
RTY5IC8qIEluaXRpYWxpemVEbGwuaCAqLywKLQkJCQlGQjM5RDIzMDEyMDBGMzVBMDAwODhFNjkg
LyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLywKLQkJCQlBMjY1NjdCNDE1OUMyMUIxMDAzOTg1Mzkg
LyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgKi8sCi0JCQkJRkIzOUQyMzExMjAwRjM1QTAw
MDg4RTY5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCAqLywKLQkJCQlGQjM5RDIzMjEyMDBG
MzVBMDAwODhFNjkgLyogSW50ZXJtZWRpYXRlLmNwcCAqLywKLQkJCQlGQjM5RDIzMzEyMDBGMzVB
MDAwODhFNjkgLyogaW50ZXJtZWRpYXRlLmggKi8sCi0JCQkJRkIzOUQyMzQxMjAwRjM1QTAwMDg4
RTY5IC8qIGludGVybU91dC5jcHAgKi8sCi0JCQkJRkIzOUQyMzUxMjAwRjM1QTAwMDg4RTY5IC8q
IEludGVybVRyYXZlcnNlLmNwcCAqLywKLQkJCQlGQjM5RDIzNjEyMDBGMzVBMDAwODhFNjkgLyog
bG9jYWxpbnRlcm1lZGlhdGUuaCAqLywKLQkJCQlBMEFBQkUyRTEzQUZFODMwMDBGMkVCRDEgLyog
TWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwICovLAotCQkJCUEwQUFCRTJGMTNBRkU4MzAwMEYyRUJE
MSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5oICovLAotCQkJCUZCMzlEMjM3MTIwMEYzNUEwMDA4
OEU2OSAvKiBNTWFwLmggKi8sCi0JCQkJRkIzOUQyMzgxMjAwRjM1QTAwMDg4RTY5IC8qIG9zaW5j
bHVkZS5oICovLAotCQkJCUZCMzlEMjM5MTIwMEYzNUEwMDA4OEU2OSAvKiBvc3NvdXJjZV9wb3Np
eC5jcHAgKi8sCi0JCQkJRkIzOUQyM0ExMjAwRjM1QTAwMDg4RTY5IC8qIG9zc291cmNlX3dpbi5j
cHAgKi8sCi0JCQkJQTBBQUJFNDIxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuY3BwICov
LAotCQkJCUEwQUFCRTQzMTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmggKi8sCi0JCQkJ
RkIzOUQyM0IxMjAwRjM1QTAwMDg4RTY5IC8qIE91dHB1dEdMU0wuY3BwICovLAotCQkJCUZCMzlE
MjNDMTIwMEYzNUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmggKi8sCi0JCQkJQTBBQUJFMzIxM0FG
RTg0NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLywKLQkJCQlBMEFBQkUzMzEzQUZF
ODQ3MDBGMkVCRDEgLyogT3V0cHV0R0xTTEJhc2UuaCAqLywKLQkJCQk3MjMwOUE2MzE4M0MyQUU1
MDAzNzBCOTMgLyogT3V0cHV0SExTTC5jcHAgKi8sCi0JCQkJNzIzMDlBNjQxODNDMkFFNTAwMzcw
QjkzIC8qIE91dHB1dEhMU0wuaCAqLywKLQkJCQlGQjM5RDIzRjEyMDBGMzVBMDAwODhFNjkgLyog
cGFyc2VDb25zdC5jcHAgKi8sCi0JCQkJRkIzOUQyNDIxMjAwRjM1QTAwMDg4RTY5IC8qIFBvb2xB
bGxvYy5jcHAgKi8sCi0JCQkJRkIzOUQyNDMxMjAwRjM1QTAwMDg4RTY5IC8qIFBvb2xBbGxvYy5o
ICovLAotCQkJCUEyNjU2N0I1MTU5QzIxQjEwMDM5ODUzOSAvKiBQcmFnbWEuaCAqLywKLQkJCQlG
QjM5RDI1NjEyMDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovLAotCQkJCUZC
MzlEMjU3MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5oICovLAotCQkJCUZCMzlE
MjU4MTIwMEYzNUEwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNwcCAqLywKLQkJCQlGQjM5RDI1OTEy
MDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5oICovLAotCQkJCUEyNjU2N0I2MTU5QzIxQjEw
MDM5ODUzOSAvKiBSZW5hbWVGdW5jdGlvbi5oICovLAotCQkJCTkwRDlCMTAwMTJFMTFEQ0IwMDJE
NDI1NSAvKiBTZWFyY2hTeW1ib2wuY3BwICovLAotCQkJCTkwRDlCMTAxMTJFMTFEQ0IwMDJENDI1
NSAvKiBTZWFyY2hTeW1ib2wuaCAqLywKLQkJCQlGQjM5RDI1QTEyMDBGMzVBMDAwODhFNjkgLyog
U2hhZGVyTGFuZy5jcHAgKi8sCi0JCQkJRkIzOUQyNUIxMjAwRjM1QTAwMDg4RTY5IC8qIFNoSGFu
ZGxlLmggKi8sCi0JCQkJRkIzOUQyNUMxMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNw
cCAqLywKLQkJCQlGQjM5RDI1RDEyMDBGMzVBMDAwODhFNjkgLyogU3ltYm9sVGFibGUuaCAqLywK
LQkJCQlBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovLAot
CQkJCUEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovLAotCQkJ
CUZCMzlEMjY4MTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8sCi0JCQkJ
RkIzOUQyNjkxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8sCi0JCQkJNzIz
MDlBNUYxODNDMkE2NDAwMzcwQjkzIC8qIFRyYW5zbGF0b3JITFNMLmNwcCAqLywKLQkJCQk3MjMw
OUE2MDE4M0MyQTY0MDAzNzBCOTMgLyogVHJhbnNsYXRvckhMU0wuaCAqLywKLQkJCQlGQjM5RDI2
QzEyMDBGMzVBMDAwODhFNjkgLyogVHlwZXMuaCAqLywKLQkJCQk5MEQ5QjEwQjEyRTExREQ2MDAy
RDQyNTUgLyogdXRpbC5jcHAgKi8sCi0JCQkJOTBEOUIxMEMxMkUxMURENjAwMkQ0MjU1IC8qIHV0
aWwuaCAqLywKLQkJCQk5MEQ5QjEwRDEyRTExREQ2MDAyRDQyNTUgLyogVmFsaWRhdGVMaW1pdGF0
aW9ucy5jcHAgKi8sCi0JCQkJOTBEOUIxMEUxMkUxMURENjAwMkQ0MjU1IC8qIFZhbGlkYXRlTGlt
aXRhdGlvbnMuaCAqLywKLQkJCQk5MEQ5QjEwRjEyRTExREQ2MDAyRDQyNTUgLyogVmFyaWFibGVJ
bmZvLmNwcCAqLywKLQkJCQk5MEQ5QjExMDEyRTExREQ2MDAyRDQyNTUgLyogVmFyaWFibGVJbmZv
LmggKi8sCi0JCQkJQTI2NEY4QzYxNjk3NEUyQTAwNkZBQTVBIC8qIFZhcmlhYmxlUGFja2VyLmNw
cCAqLywKLQkJCQlBMjY0RjhDNzE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuaCAq
LywKLQkJCQk5MEQ5QjExMTEyRTExREQ2MDAyRDQyNTUgLyogVmVyc2lvbkdMU0wuY3BwICovLAot
CQkJCTkwRDlCMTEyMTJFMTFERDYwMDJENDI1NSAvKiBWZXJzaW9uR0xTTC5oICovLAogCQkJKTsK
IAkJCW5hbWUgPSBjb21waWxlcjsKIAkJCXBhdGggPSBzcmMvY29tcGlsZXI7CkBAIC01NDksMTQg
KzU4MiwxMyBAQAogCQlGQjM5RDI0NDEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzc29yICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk3MjMwOUE1NzE4
M0MyN0YxMDAzNzBCOTMgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi8sCi0JCQkJNzIzMDlBNTUx
ODNDMjdEQjAwMzcwQjkzIC8qIFRva2VuaXplci5jcHAgKi8sCiAJCQkJQTI2NEY4OTMxNjk3NERF
RDAwNkZBQTVBIC8qIERpYWdub3N0aWNzQmFzZS5jcHAgKi8sCiAJCQkJQTI2NEY4OTQxNjk3NERF
RDAwNkZBQTVBIC8qIERpYWdub3N0aWNzQmFzZS5oICovLAogCQkJCUEyNjRGODk1MTY5NzRERUQw
MDZGQUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAgKi8sCiAJCQkJQTI2NEY4OTYxNjk3
NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNlLmggKi8sCiAJCQkJQTI2NEY4OTcx
Njk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi8sCiAJCQkJQTI2NEY4OTgx
Njk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZVBhcnNlci5oICovLAorCQkJCTcyMzA5QTU3MTgz
QzI3RjEwMDM3MEI5MyAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCAqLywKIAkJCQlBMjY0Rjg5QTE2
OTc0REVEMDA2RkFBNUEgLyogRXhwcmVzc2lvblBhcnNlci5oICovLAogCQkJCUEyNjRGODlCMTY5
NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5jcHAgKi8sCiAJCQkJQTI2NEY4OUMxNjk3NERFRDAwNkZB
QTVBIC8qIElucHV0LmggKi8sCkBAIC01NzQsNiArNjA2LDcgQEAKIAkJCQlBMjY0RjhBNzE2OTc0
REVEMDA2RkFBNUEgLyogU291cmNlTG9jYXRpb24uaCAqLywKIAkJCQlBMjY0RjhBODE2OTc0REVE
MDA2RkFBNUEgLyogVG9rZW4uY3BwICovLAogCQkJCUEyNjRGOEE5MTY5NzRERUQwMDZGQUE1QSAv
KiBUb2tlbi5oICovLAorCQkJCTcyMzA5QTU1MTgzQzI3REIwMDM3MEI5MyAvKiBUb2tlbml6ZXIu
Y3BwICovLAogCQkJCUEyNjRGOEFCMTY5NzRERUQwMDZGQUE1QSAvKiBUb2tlbml6ZXIuaCAqLywK
IAkJCSk7CiAJCQlwYXRoID0gcHJlcHJvY2Vzc29yOwpAQCAtNTk1LDU5ICs2MjgsODEgQEAKIAkJ
CWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4
MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTMxMDEyRTNDMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0
aWFsaXplUGFyc2VDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMDhDM0NERDE2RDZDQjYx
MDAzRjBCODMgLyogQXJyYXlCb3VuZHNDbGFtcGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OTk1
MUMwQTE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCBpbiBIZWFk
ZXJzICovLAotCQkJCUEyNjU2ODNBMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGgu
aCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2ODNDMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRl
bmN5R3JhcGhCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQlBMjY1NjgzRTE1OUMyM0UxMDAz
OTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggaW4gSGVhZGVycyAqLywKLQkJCQlBMjY1
NjdCQzE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTMxMDEyRTNFMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplVmFyaWFibGVzLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkzMTAxMkUxNDE4Qjk3QjlCMDAzOTA2MkYgLyogQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTU1MThCOTdCOUIwMDM5MDYyRiAv
KiBQYXJzZUNvbnRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTJDMThCOTdCOUIwMDM5
MDYyRiAvKiBGb3JMb29wVW5yb2xsLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkU2RDE4Qjk3
QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckdMU0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEy
RTQ2MThCOTdCOUIwMDM5MDYyRiAvKiBNTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkU2
QjE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckVTU0wuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTMxMDEyRTE2MThCOTdCOUIwMDM5MDYyRiAvKiBDb21tb24uaCBpbiBIZWFkZXJzICovLAorCQkJ
CTMxMDEyRTIwMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTMxMDEyRTdDMThCOTdCOUIwMDM5MDYyRiAvKiBWYXJpYWJsZUluZm8u
aCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTYxMThCOTdCOUIwMDM5MDYyRiAvKiBTZWFyY2hT
eW1ib2wuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTQ3MThCOTdCOUIwMDM5MDYyRiAvKiBO
b2RlU2VhcmNoLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhBRDE2OTc0REVEMDA2RkFBNUEg
LyogRGlhZ25vc3RpY3NCYXNlLmggaW4gSGVhZGVycyAqLywKLQkJCQlBMjY1NjdCRTE1OUMyMUIx
MDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJF
NEMxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEVTU0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTMx
MDEyRTVGMThCOTdCOUIwMDM5MDYyRiAvKiBSZXdyaXRlRWxzZUJsb2Nrcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTI2NEY4QUYxNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNl
LmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkU3RTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFi
bGVQYWNrZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTUwMThCOTdCOUIwMDM5MDYyRiAv
KiBPdXRwdXRHTFNMQmFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNDAxOEI5N0I5QjAw
MzkwNjJGIC8qIGludGVybWVkaWF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFMjUxOEI5
N0I5QjAwMzkwNjJGIC8qIERldGVjdERpc2NvbnRpbnVpdHkuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTMxMDEyRTVEMThCOTdCOUIwMDM5MDYyRiAvKiBSZW5hbWVGdW5jdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMzEwMTJFM0ExOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVHbG9iYWxzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkU0NTE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTgwMThCOTdCOUIwMDM5MDYy
RiAvKiBWZXJzaW9uR0xTTC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFMjcxOEI5N0I5QjAw
MzkwNjJGIC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkUzMjE4Qjk3
QjlCMDAzOTA2MkYgLyogZ2xzbGFuZ190YWIuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEIx
MTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTMxMDEyRTU4MThCOTdCOUIwMDM5MDYyRiAvKiBQcmFnbWEuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTMxMDEyRTY1MThCOTdCOUIwMDM5MDYyRiAvKiBTeW1ib2xUYWJsZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMzEwMTJFNzQxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNzIxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNo
b3J0Q2lyY3VpdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4QjMxNjk3NERFRDAwNkZBQTVB
IC8qIEV4cHJlc3Npb25QYXJzZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTcyMzA5QTRGMTgzQzI1
OUUwMDM3MEI5MyAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTkwRDlCMTAzMTJFMTFEQ0IwMDJENDI1NSAvKiBFeHRlbnNpb25CZWhhdmlvci5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJNzIzMDlBNUUxODNDMjg1MzAwMzcwQjkzIC8qIGdsc2xhbmdfdGFiLmggaW4g
SGVhZGVycyAqLywKLQkJCQk3MjMwOUE3MjE4M0MyQkU4MDAzNzBCOTMgLyogVW5pZm9ybS5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJNzIzMDlBNjYxODNDMkFFNTAwMzcwQjkzIC8qIE91dHB1dEhMU0wu
aCBpbiBIZWFkZXJzICovLAotCQkJCUEwQUFCRTJEMTNBRkU4MTAwMEYyRUJEMSAvKiBGb3JMb29w
VW5yb2xsLmggaW4gSGVhZGVycyAqLywKLQkJCQk5MEQ5QjEwNzEyRTExRENCMDAyRDQyNTUgLyog
Z2xzbGFuZy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2NEY4QzgxNjk3NEUyQTAwNkZBQTVBIC8q
IEhhc2hOYW1lcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNzIzMDlBNjIxODNDMkE3NDAwMzcwQjkz
IC8qIFRyYW5zbGF0b3JITFNMLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkU1QzE4Qjk3QjlC
MDAzOTA2MkYgLyogUmVtb3ZlVHJlZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNDgxOEI5
N0I5QjAwMzkwNjJGIC8qIG9zaW5jbHVkZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFMzUx
OEI5N0I5QjAwMzkwNjJGIC8qIEluZm9TaW5rLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkUx
QzE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkzMTAxMkU2MzE4Qjk3QjlCMDAzOTA2MkYgLyogU2hIYW5kbGUuaCBpbiBIZWFkZXJzICovLAor
CQkJCTMxMDEyRTcwMThCOTdCOUIwMDM5MDYyRiAvKiBUeXBlcy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMzEwMTJFNjcxOEI5N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1p
bmcuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTQzMThCOTdCOUIwMDM5MDYyRiAvKiBsb2Nh
bGludGVybWVkaWF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNzgxOEI5N0I5QjAwMzkw
NjJGIC8qIHV0aWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEI1MTY5NzRERUQwMDZGQUE1
QSAvKiBJbnB1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4Q0QxNjk3NjJBQTAwNkZBQTVB
IC8qIGtocnBsYXRmb3JtLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTk1MUMwMzE0QjdBQUIzMDA2
MEU5NkUgLyogbGVuZ3RoX2xpbWl0cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNzYxOEI5
N0I5QjAwMzkwNjJGIC8qIFVuaWZvcm0uaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTIzMThC
OTdCOUIwMDM5MDYyRiAvKiBEZXRlY3RDYWxsRGVwdGguaCBpbiBIZWFkZXJzICovLAorCQkJCTMx
MDEyRTM5MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplRGxsLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBMjY0RjhCNzE2OTc0REVEMDA2RkFBNUEgLyogTGV4ZXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCTMxMDEyRTg0MThCOTdDODYwMDM5MDYyRiAvKiBjb21waWxlcmRlYnVnLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBMjY0RjhCOTE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm8uaCBpbiBIZWFkZXJz
ICovLAorCQkJCTMxMDEyRTVBMThCOTdCOUIwMDM5MDYyRiAvKiBRdWFsaWZpZXJBbGl2ZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNTcxOEI5N0I5QjAwMzkwNjJGIC8qIFBvb2xBbGxvYy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFMzcxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxp
emUuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTUyMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRw
dXRITFNMLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkUxQTE4Qjk3QjlCMDAzOTA2MkYgLyog
Q29uc3RhbnRVbmlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4QkIxNjk3NERFRDAwNkZB
QTVBIC8qIE1hY3JvRXhwYW5kZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTcyMzA5QTU0MTgzQzI1
QUQwMDM3MEI5MyAvKiBJbml0aWFsaXplR0xQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
QTBBQUJFMzExM0FGRTgzMDAwRjJFQkQxIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkzMTAxMkUyRDE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTI2NEY4QkMxNjk3NERFRDAwNkZBQTVBIC8qIG51bWVyaWNfbGV4Lmgg
aW4gSGVhZGVycyAqLywKLQkJCQlBMEFBQkU0NTEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNT
TC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNzIzMDlBNzAxODNDMkJFODAwMzcwQjkzIC8qIFVuZm9s
ZFNob3J0Q2lyY3VpdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTBBQUJFMzUxM0FGRTg0NzAwRjJF
QkQxIC8qIE91dHB1dEdMU0xCYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkU2OTE4Qjk3
QjlCMDAzOTA2MkYgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICov
LAogCQkJCUEyNjRGOEJEMTY5NzRERUQwMDZGQUE1QSAvKiBwcF91dGlscy5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJQTI2NTY3QzAxNTlDMjFCMTAwMzk4NTM5IC8qIFByYWdtYS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMzEwMTJFMkExOEI5N0I5QjAwMzkwNjJGIC8qIEV4dGVuc2lvbkJlaGF2aW9yLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkU2RjE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRv
ckhMU0wuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEJGMTY5NzRERUQwMDZGQUE1QSAvKiBQ
cmVwcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2N0MxMTU5QzIxQjEwMDM5ODUz
OSAvKiBSZW5hbWVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNzIzMDlBNTIxODNDMjVB
NzAwMzcwQjkzIC8qIE5vZGVTZWFyY2guaCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2ODQxMTU5
QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggaW4gSGVhZGVy
cyAqLywKLQkJCQk3MjMwOUE2RTE4M0MyQkU4MDAzNzBCOTMgLyogRGV0ZWN0RGlzY29udGludWl0
eS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2NTY4NDMxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3Ry
aWN0VmVydGV4U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLywKLQkJCQk5MEQ5QjEwQTEyRTEx
RENCMDAyRDQyNTUgLyogU2VhcmNoU3ltYm9sLmggaW4gSGVhZGVycyAqLywKIAkJCQlGQjM5RDc2
RTEyMDExMEZDMDAwODhFNjkgLyogU2hhZGVyTGFuZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2
NEY4QzAxNjk3NERFRDAwNkZBQTVBIC8qIFNvdXJjZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywK
KwkJCQkzMTAxMkU0RTE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0R0xTTC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMzEwMTJFMUUxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTdBMThCOTdCOUIwMDM5MDYyRiAvKiBWYWxp
ZGF0ZUxpbWl0YXRpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkUzMzE4Qjk3QjlCMDAz
OTA2MkYgLyogSGFzaE5hbWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhDMjE2OTc0REVE
MDA2RkFBNUEgLyogVG9rZW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTI5MThCOTdCOUIw
MDM5MDYyRiAvKiBEaXJlY3RpdmVIYW5kbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkUx
MjE4Qjk3QjlCMDAzOTA2MkYgLyogQmFzZVR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0
RjhDNDE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW5pemVyLmggaW4gSGVhZGVycyAqLywKLQkJCQlB
MEFBQkU0OTEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuaCBpbiBIZWFkZXJzICov
LAotCQkJCTkwRDlCMTE0MTJFMTFERDYwMDJENDI1NSAvKiB1dGlsLmggaW4gSGVhZGVycyAqLywK
LQkJCQk5MEQ5QjExNjEyRTExREQ2MDAyRDQyNTUgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJNzIzMDlBNTExODNDMjVBNTAwMzcwQjkzIC8qIFBhcnNlQ29udGV4
dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTBEOUIxMTgxMkUxMURENjAwMkQ0MjU1IC8qIFZhcmlh
YmxlSW5mby5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2NEY4Q0ExNjk3NEUyQTAwNkZBQTVBIC8q
IFZhcmlhYmxlUGFja2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQk5MEQ5QjExQTEyRTExREQ2MDAy
RDQyNTUgLyogVmVyc2lvbkdMU0wuaCBpbiBIZWFkZXJzICovLAotCQkJCTVDQjEzRkQ1MTc5REIz
RkQwMDFGODUxRCAvKiBEZXRlY3RDYWxsRGVwdGguaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNzIzLDY4
ICs3NzgsNjkgQEAKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rp
b25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTMxMDEyRTI2MThCOTdCOUIw
MDM5MDYyRiAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkUzRDE4
Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZVZhcmlhYmxlcy5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkzMTAxMkU3RjE4Qjk3QjlCMDAzOTA2MkYgLyogVmVyc2lvbkdMU0wuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTA4QzNDREMxNkQ2Q0I2MTAwM0YwQjgzIC8qIEFycmF5Qm91bmRzQ2xhbXBl
ci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OTk1MUMwOTE0QjdBQUQ4MDA2MEU5NkUgLyogQnVp
bHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNzIzMDlBNUQxODND
Mjg1MzAwMzcwQjkzIC8qIGdsc2xhbmdfdGFiLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTkwRDlC
MTAyMTJFMTFEQ0IwMDJENDI1NSAvKiBDb21waWxlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlG
QjM5RDI3NTEyMDBGMzVBMDAwODhFNjkgLyogZGVidWcuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
QTI2NTY4MzkxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlBMjY1NjgzQjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVp
bGRlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjY1NjgzRDE1OUMyM0UxMDAzOTg1MzkgLyog
RGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyNjU2ODNGMTU5
QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQlBMjY1NjdCQjE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNzIzMDlBNTYxODNDMjdERTAwMzcwQjkzIC8qIFRva2VuaXplci5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQk3MjMwOUE1MDE4M0MyNUExMDAzNzBCOTMgLyogUGFyc2VDb250
ZXh0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTcyMzA5QTcxMTgzQzJCRTgwMDM3MEI5MyAvKiBV
bmlmb3JtLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTZDMThCOTdCOUIwMDM5MDYyRiAv
KiBUcmFuc2xhdG9yR0xTTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMjY0RjhBQzE2OTc0REVE
MDA2RkFBNUEgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyNjU2
N0JEMTU5QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTMxMDEyRTE1MThCOTdCOUIwMDM5MDYyRiAvKiBDb2RlR2VuLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTMxMDEyRTNGMThCOTdCOUIwMDM5MDYyRiAvKiBJbnRlcm1lZGlhdGUuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFM0IxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVQ
YXJzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFMzExOEI5N0I5QjAwMzkw
NjJGIC8qIGdsc2xhbmdfdGFiLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTIxMThCOTdC
OUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkzMTAxMkU1RTE4Qjk3QjlCMDAzOTA2MkYgLyogUmV3cml0ZUVsc2VCbG9ja3MuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFNTQxOEI5N0I5QjAwMzkwNjJGIC8qIFBhcnNlQ29udGV4
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMjY0RjhBRTE2OTc0REVEMDA2RkFBNUEgLyogRGly
ZWN0aXZlSGFuZGxlckJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFNzUxOEI5N0I5
QjAwMzkwNjJGIC8qIFVuaWZvcm0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFNEQxOEI5
N0I5QjAwMzkwNjJGIC8qIE91dHB1dEdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJF
MzAxOEI5N0I5QjAwMzkwNjJGIC8qIGdsc2xhbmdfbGV4LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTMxMDEyRTQxMThCOTdCOUIwMDM5MDYyRiAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMzEwMTJFNkUxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JITFNMLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUEyNjRGOEIwMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVQYXJz
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTBBQUJFMkMxM0FGRTgxMDAwRjJFQkQxIC8qIEZv
ckxvb3BVbnJvbGwuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIzOUQyNzkxMjAwRjM1QTAwMDg4
RTY5IC8qIEluZm9TaW5rLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTcyMzA5QTYxMTgzQzJBNzQw
MDM3MEI5MyAvKiBUcmFuc2xhdG9ySExTTC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI3
QjEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlG
QjM5RDI3RDEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkzMTAxMkU0OTE4Qjk3QjlCMDAzOTA2MkYgLyogb3Nzb3VyY2VfcG9zaXguY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFNDIxOEI5N0I5QjAwMzkwNjJGIC8qIEludGVybVRyYXZl
cnNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTYwMThCOTdCOUIwMDM5MDYyRiAvKiBT
ZWFyY2hTeW1ib2wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzIzMDlBNTgxODNDMjdGMzAwMzcw
QjkzIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTI2NTY3QkYx
NTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMzEwMTJFMjgxOEI5N0I5QjAwMzkwNjJGIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFNTkxOEI5N0I5QjAwMzkwNjJGIC8qIFF1YWxpZmll
ckFsaXZlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTcxMThCOTdCOUIwMDM5MDYyRiAv
KiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFNjQxOEI5
N0I5QjAwMzkwNjJGIC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEyNjRG
OEI0MTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5
RDI4MTEyMDBGMzVBMDAwODhFNjkgLyogSW50ZXJtZWRpYXRlLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCUZCMzlEMjgzMTIwMEYzNUEwMDA4OEU2OSAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJRkIzOUQyODQxMjAwRjM1QTAwMDg4RTY5IC8qIEludGVybVRyYXZlcnNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUEyNjRGOEI2MTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkU2MjE4Qjk3QjlCMDAzOTA2MkYgLyogU2hhZGVyTGFu
Zy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkUzODE4Qjk3QjlCMDAzOTA2MkYgLyogSW5p
dGlhbGl6ZURsbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMjY0RjhCODE2OTc0REVEMDA2RkFB
NUEgLyogTWFjcm8uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFNUIxOEI5N0I5QjAwMzkw
NjJGIC8qIFJlbW92ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NEY4QkExNjk3NERF
RDAwNkZBQTVBIC8qIE1hY3JvRXhwYW5kZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTBBQUJF
MzAxM0FGRTgzMDAwRjJFQkQxIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCUZCMzlEMjg4MTIwMEYzNUEwMDA4OEU2OSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQlBMEFBQkU0NDEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNT
TC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI4QTEyMDBGMzVBMDAwODhFNjkgLyogT3V0
cHV0R0xTTC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMEFBQkUzNDEzQUZFODQ3MDBGMkVCRDEg
LyogT3V0cHV0R0xTTEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIzOUQyOEUxMjAwRjM1
QTAwMDg4RTY5IC8qIHBhcnNlQ29uc3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNzIzMDlBNjUx
ODNDMkFFNTAwMzcwQjkzIC8qIE91dHB1dEhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIz
OUQyOTExMjAwRjM1QTAwMDg4RTY5IC8qIFBvb2xBbGxvYy5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQk3MjMwOUE1MzE4M0MyNUFBMDAzNzBCOTMgLyogSW5pdGlhbGl6ZUdMUG9zaXRpb24uY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJNzIzMDlBNkQxODNDMkJFODAwMzcwQjkzIC8qIERldGVjdERpc2Nv
bnRpbnVpdHkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNzIzMDlBNkYxODNDMkJFODAwMzcwQjkz
IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk3MjMwOUE1QzE4
M0MyODUzMDAzNzBCOTMgLyogZ2xzbGFuZ19sZXguY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEw
MTJFNzMxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkzMTAxMkUyNDE4Qjk3QjlCMDAzOTA2MkYgLyogRGV0ZWN0RGlzY29udGlu
dWl0eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkU2ODE4Qjk3QjlCMDAzOTA2MkYgLyog
UmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJF
MTMxOEI5N0I5QjAwMzkwNjJGIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTMxMDEyRTM0MThCOTdCOUIwMDM5MDYyRiAvKiBJbmZvU2luay5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkzMTAxMkU1MzE4Qjk3QjlCMDAzOTA2MkYgLyogcGFyc2VDb25zdC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkU0NDE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9u
Z1ZhcmlhYmxlTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFNTYxOEI5N0I5QjAw
MzkwNjJGIC8qIFBvb2xBbGxvYy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkU2NjE4Qjk3
QjlCMDAzOTA2MkYgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkzMTAxMkU3OTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9u
cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkU4MzE4Qjk3Qzg2MDAzOTA2MkYgLyogY29t
cGlsZXJkZWJ1Zy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkU3NzE4Qjk3QjlCMDAzOTA2
MkYgLyogdXRpbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkU1MTE4Qjk3QjlCMDAzOTA2
MkYgLyogT3V0cHV0SExTTC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkUzNjE4Qjk3QjlC
MDAzOTA2MkYgLyogSW5pdGlhbGl6ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkU3QjE4
Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFibGVJbmZvLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMx
MDEyRTFEMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTMxMDEyRTdEMThCOTdCOUIwMDM5MDYyRiAvKiBWYXJpYWJsZVBhY2tl
ci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkUxRjE4Qjk3QjlCMDAzOTA2MkYgLyogRGVw
ZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTRCMThCOTdC
OUIwMDM5MDYyRiAvKiBPdXRwdXRFU1NMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEyNjRGOEJF
MTY5NzRERUQwMDZGQUE1QSAvKiBQcmVwcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
NzIzMDlBNEQxODNDMjU5MzAwMzcwQjkzIC8qIENvZGVHZW4uY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJRkIzOUQyQTQxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCUZCMzlEMkE2MTIwMEYzNUEwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNwcCBp
biBTb3VyY2VzICovLAotCQkJCUEyNjU2ODQwMTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyNjU2ODQyMTU5QzIz
RTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQk5MEQ5QjEwOTEyRTExRENCMDAyRDQyNTUgLyogU2VhcmNoU3ltYm9sLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCUZCMzlEMkE4MTIwMEYzNUEwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlEMkFBMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xU
YWJsZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkUyQjE4Qjk3QjlCMDAzOTA2MkYgLyog
Rm9yTG9vcFVucm9sbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkUyMjE4Qjk3QjlCMDAz
OTA2MkYgLyogRGV0ZWN0Q2FsbERlcHRoLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTE3
MThCOTdCOUIwMDM5MDYyRiAvKiBDb21waWxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAx
MkU2QTE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckVTU0wuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMzEwMTJFNEYxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEdMU0xCYXNlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTMxMDEyRTFCMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3Jh
cGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NEY4QzExNjk3NERFRDAwNkZBQTVBIC8qIFRv
a2VuLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEwQUFCRTQ4MTNBRkU5NjEwMEYyRUJEMSAvKiBU
cmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDJBQzEyMDBGMzVBMDAw
ODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOTBEOUIxMTMx
MkUxMURENjAwMkQ0MjU1IC8qIHV0aWwuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOTBEOUIxMTUx
MkUxMURENjAwMkQ0MjU1IC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJOTBEOUIxMTcxMkUxMURENjAwMkQ0MjU1IC8qIFZhcmlhYmxlSW5mby5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQlBMjY0RjhDOTE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOTBEOUIxMTkxMkUxMURENjAwMkQ0MjU1IC8qIFZlcnNp
b25HTFNMLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTVDQjEzRkQ0MTc5REIzRkQwMDFGODUxRCAv
KiBEZXRlY3RDYWxsRGVwdGguY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNzIzMDlBNEUxODNDMjU5
QzAwMzcwQjkzIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0dOVW1ha2VmaWxlLmFtIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvR05VbWFrZWZpbGUuYW0KaW5kZXggNGMxNGFjMTc1MWU3MmQ4OTlj
OTUzYjJlZWU5ZmU1OTdjM2E0MWIxNi4uMjllNWMwMmFlMWQ4ODZjYzY4ZjA5N2JhMzA3MDM4MmEx
NWMyYWMxZiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvR05VbWFrZWZpbGUu
YW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvR05VbWFrZWZpbGUuYW0KQEAgLTMwLDcx
ICszMCwxMTEgQEAgbGliQU5HTEVfbGFfU09VUkNFUyA9IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9pbmNsdWRlL0tIUi9raHJwbGF0Zm9ybS5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0Jhc2VUeXBlcy5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCBcCi0JU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW4uY3BwIFwKLQlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tbW9uLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9Db25zdGFudFVuaW9uLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9kZWJ1Zy5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9kZWJ1Zy5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggXAot
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5
R3JhcGguY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3Jh
cGgvRGVwZW5kZW5jeUdyYXBoLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIFwKLQlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0Lmgg
XAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZS5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9EZXRlY3RDYWxsRGVwdGguY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvRGV0ZWN0Q2FsbERlcHRoLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9EaWFnbm9zdGljcy5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9EaWFnbm9zdGljcy5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmNwcCBcCi0JU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaCBcCi0JU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmggXAotCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Gb3JMb29wVW5yb2xsLmNwcCBcCi0J
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJvbGwuaCBcCi0J
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcuaCBcCi0JU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0hhc2hOYW1lcy5oIFwKLQlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5mb1NpbmsuY3BwIFwKLQlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5mb1NpbmsuaCBcCi0JU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplR2xvYmFscy5oIFwKLQlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZUdMUG9zaXRpb24uY3BwIFwKLQlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZUdMUG9zaXRpb24uaCBc
Ci0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuaCBcCi0J
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRl
eHQuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6
ZVBhcnNlQ29udGV4dC5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
SW50ZXJtZWRpYXRlLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L2ludGVybWVkaWF0ZS5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
aW50ZXJtT3V0LmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0lu
dGVybVRyYXZlcnNlLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L2xvY2FsaW50ZXJtZWRpYXRlLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvTU1hcC5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvTm9kZVNlYXJjaC5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvb3NpbmNsdWRlLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9vc3NvdXJjZV9wb3NpeC5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9PdXRwdXRFU1NMLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL091dHB1dEVTU0wuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL091dHB1dEdMU0xCYXNlLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL091dHB1dEdMU0xCYXNlLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9PdXRwdXRHTFNMLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL091dHB1dEdMU0wuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL091dHB1dEhMU0wuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvT3V0cHV0SExTTC5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cGFyc2VDb25zdC5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Q
YXJzZUNvbnRleHQuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
UGFyc2VDb250ZXh0LmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Q
b29sQWxsb2MuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUG9v
bEFsbG9jLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QcmFnbWEu
aCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQmFz
ZVR5cGVzLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCBcCisJ
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29kZUdlbi5j
cHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Nv
bW1vbi5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9Db21waWxlci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvY29tcGlsZXJkZWJ1Zy5jcHAgXAorCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2NvbXBpbGVyZGVidWcuaCBcCisJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCBcCisJ
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgv
RGVwZW5kZW5jeUdyYXBoLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmggXAorCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lH
cmFwaE91dHB1dC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIFwKKwlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZS5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0RldGVjdENhbGxEZXB0aC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RldGVjdENhbGxEZXB0aC5oIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5jcHAg
XAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RpYWdu
b3N0aWNzLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL0RpcmVjdGl2ZUhhbmRsZXIuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmggXAorCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RldGVjdERpc2NvbnRpbnVpdHkuY3Bw
IFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EZXRl
Y3REaXNjb250aW51aXR5LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0V4dGVuc2lvbkJlaGF2aW9yLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwuY3BwIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Gb3JMb29wVW5yb2xsLmgg
XAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xh
bmcuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
SGFzaE5hbWVzLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0luZm9TaW5rLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZS5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemUuaCBcCisJU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZURsbC5jcHAg
XAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRp
YWxpemVEbGwuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvSW5pdGlhbGl6ZUdsb2JhbHMuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgXAorCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVQYXJz
ZUNvbnRleHQuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvSW5pdGlhbGl6ZVZhcmlhYmxlcy5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVWYXJpYWJsZXMuaCBcCisJU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtZWRpYXRlLmNw
cCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvaW50
ZXJtZWRpYXRlLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL2ludGVybU91dC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL0ludGVybVRyYXZlcnNlLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvbG9jYWxpbnRlcm1lZGlhdGUuaCBcCisJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTWFwTG9uZ1Zhcmlh
YmxlTmFtZXMuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9NTWFwLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL05vZGVTZWFyY2guaCBcCisJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Ivb3NpbmNsdWRlLmggXAorCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL29zc291cmNlX3Bvc2l4
LmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
T3V0cHV0RVNTTC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL091dHB1dEVTU0wuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMQmFzZS5oIFwKKwlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMLmNw
cCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0
cHV0R0xTTC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9PdXRwdXRITFNMLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvT3V0cHV0SExTTC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9wYXJzZUNvbnN0LmNwcCBcCisJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmNwcCBcCisJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0
LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Bv
b2xBbGxvYy5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1Bvb2xBbGxvYy5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9QcmFnbWEuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvUXVhbGlmaWVyQWxpdmUuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9RdWFsaWZpZXJBbGl2ZS5oIFwKKwlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZW1vdmVUcmVlLmNw
cCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUmVt
b3ZlVHJlZS5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9SZW5hbWVGdW5jdGlvbi5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9SZXdyaXRlRWxzZUJsb2Nrcy5jcHAgXAorCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Jld3JpdGVFbHNlQmxvY2tzLmggXAor
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1NlYXJjaFN5
bWJvbC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1NlYXJjaFN5bWJvbC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9TaGFkZXJMYW5nLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU2hIYW5kbGUuaCBcCisJU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuY3BwIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJsZS5oIFwK
KwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcv
UmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVy
VGltaW5nLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgXAorCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdFZlcnRl
eFNoYWRlclRpbWluZy5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yRVNTTC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JFU1NMLmggXAorCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JHTFNMLmNwcCBc
CisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvckdMU0wuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvckhMU0wuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9ySExTTC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oIFwKKwlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXRBU1Qu
Y3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9V
bmZvbGRTaG9ydENpcmN1aXRBU1QuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBcCisJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0Lmgg
XAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1VuaWZv
cm0uY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9Vbmlmb3JtLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL3V0aWwuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci91dGlsLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUxpbWl0YXRpb25zLmggXAor
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxl
SW5mby5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1ZhcmlhYmxlSW5mby5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9WYXJpYWJsZVBhY2tlci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlUGFja2VyLmggXAorCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZlcnNpb25HTFNMLmNwcCBc
CisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmVyc2lv
bkdMU0wuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9EaWFnbm9zdGljc0Jhc2UuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpYWdub3N0aWNzQmFzZS5oIFwKIAlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNl
LmNwcCBcCkBAIC0xMjEsNDMgKzE2MSw1IEBAIGxpYkFOR0xFX2xhX1NPVVJDRVMgPSBcCiAJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbi5oIFwK
IAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2Vu
aXplci5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvVG9rZW5pemVyLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9RdWFsaWZpZXJBbGl2ZS5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9RdWFsaWZpZXJBbGl2ZS5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvUmVtb3ZlVHJlZS5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9SZW1vdmVUcmVlLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9SZW5hbWVGdW5jdGlvbi5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvU2VhcmNoU3ltYm9sLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1NlYXJjaFN5bWJvbC5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvU2hhZGVyTGFuZy5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9TaEhhbmRsZS5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3lt
Ym9sVGFibGUuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3lt
Ym9sVGFibGUuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWlu
Zy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgg
XAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RW
ZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggXAotCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5jcHAgXAotCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5oIFwKLQlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3BwIFwKLQlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuaCBcCi0JU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcCBcCi0J
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmggXAot
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UeXBlcy5oIFwKLQlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcCBc
Ci0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3Vp
dEFTVC5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hv
cnRDaXJjdWl0LmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Vu
Zm9sZFNob3J0Q2lyY3VpdC5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvVW5pZm9ybS5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9V
bmlmb3JtLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci91dGlsLmNw
cCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3V0aWwuaCBcCi0JU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3Bw
IFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0
aW9ucy5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVJ
bmZvLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxl
SW5mby5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVQ
YWNrZXIuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFi
bGVQYWNrZXIuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZlcnNp
b25HTFNMLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZlcnNp
b25HTFNMLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0eS9jb21w
aWxlci9BcnJheUJvdW5kc0NsYW1wZXIuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvdGhpcmRfcGFydHkvY29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmgKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCmluZGV4
IDQwZDJkMjY0MDQ4MTM3MGVkOWI2MDMwYjAyZjg1NjAzYTU5ODYzZjIuLjJlMWRjZjMwMWVkMjhm
YjM0ZDM5NGJkMTFkZDgyZTUzNzk2OWNjNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaApAQCAtMTg0LDggKzE4NCw4IEBA
IHR5cGVkZWYgZW51bSB7CiAgIC8vIFRoaXMgZmxhZyBsaW1pdHMgdGhlIGRlcHRoIG9mIHRoZSBj
YWxsIHN0YWNrLgogICBTSF9MSU1JVF9DQUxMX1NUQUNLX0RFUFRIID0gMHg0MDAwLAogCi0gIC8v
IFRoaXMgZmxhZyBpbml0aWFsaXplcyBnbF9Qb3NpdGlvbiB0byB2ZWM0KDAuMCwgMC4wLCAwLjAs
IDEuMCkgYXQKLSAgLy8gdGhlIGJlZ2lubmluZyBvZiB0aGUgdmVydGV4IHNoYWRlciwgYW5kIGhh
cyBubyBlZmZlY3QgaW4gdGhlCisgIC8vIFRoaXMgZmxhZyBpbml0aWFsaXplcyBnbF9Qb3NpdGlv
biB0byB2ZWM0KDAsMCwwLDApIGF0IHRoZQorICAvLyBiZWdpbm5pbmcgb2YgdGhlIHZlcnRleCBz
aGFkZXIncyBtYWluKCksIGFuZCBoYXMgbm8gZWZmZWN0IGluIHRoZQogICAvLyBmcmFnbWVudCBz
aGFkZXIuIEl0IGlzIGludGVuZGVkIGFzIGEgd29ya2Fyb3VuZCBmb3IgZHJpdmVycyB3aGljaAog
ICAvLyBpbmNvcnJlY3RseSBmYWlsIHRvIGxpbmsgcHJvZ3JhbXMgaWYgZ2xfUG9zaXRpb24gaXMg
bm90IHdyaXR0ZW4uCiAgIFNIX0lOSVRfR0xfUE9TSVRJT04gPSAweDgwMDAsCkBAIC0xOTYsNiAr
MTk2LDEyIEBAIHR5cGVkZWYgZW51bSB7CiAgIC8vIFRoaXMgaXMgdG8gd29yayBhcm91bmQgYSBN
YWNPU1ggZHJpdmVyIGJ1ZyB0aGF0IHxifCBpcyBleGVjdXRlZAogICAvLyBpbmRlcGVuZGVudCBv
ZiB8YXwncyB2YWx1ZS4KICAgU0hfVU5GT0xEX1NIT1JUX0NJUkNVSVQgPSAweDEwMDAwLAorCisg
IC8vIFRoaXMgZmxhZyBpbml0aWFsaXplcyB2YXJ5aW5ncyB3aXRob3V0IHN0YXRpYyB1c2UgaW4g
dmVydGV4IHNoYWRlcgorICAvLyBhdCB0aGUgYmVnaW5uaW5nIG9mIG1haW4oKSwgYW5kIGhhcyBu
byBlZmZlY3RzIGluIHRoZSBmcmFnbWVudCBzaGFkZXIuCisgIC8vIEl0IGlzIGludGVuZGVkIGFz
IGEgd29ya2Fyb3VuZCBmb3IgZHJpdmVycyB3aGljaCBpbmNvcnJlY3RseSBvcHRpbWl6ZQorICAv
LyBvdXQgc3VjaCB2YXJ5aW5ncyBhbmQgY2F1c2UgYSBsaW5rIGZhaWx1cmUuCisgIFNIX0lOSVRf
VkFSWUlOR1NfV0lUSE9VVF9TVEFUSUNfVVNFID0gMHgyMDAwMCwKIH0gU2hDb21waWxlT3B0aW9u
czsKIAogLy8gRGVmaW5lcyBhbHRlcm5hdGUgc3RyYXRlZ2llcyBmb3IgaW1wbGVtZW50aW5nIGFy
cmF5IGluZGV4IGNsYW1waW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
aW5jbHVkZS9LSFIva2hycGxhdGZvcm0uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1
ZGUvS0hSL2tocnBsYXRmb3JtLmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9SZWZDb3VudE9iamVj
dC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1JlZkNvdW50T2JqZWN0
LmNwcAppbmRleCAwMzY0YWRmMmNkNTUxNTg3MDQyNWIwMGRhY2RkOTg3OGZkOWFmODQ1Li5jMWVm
OTBjZGNjYzI2MDk1ZmZlNTE4MzAzMTZhMTgyZGYxMjZmZTc2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1JlZkNvdW50T2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1JlZkNvdW50T2JqZWN0LmNwcApAQCAtMSw0
ICsxLDMgQEAKLSNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KIC8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tbW9uL2FuZ2xldXRpbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21t
b24vYW5nbGV1dGlscy5oCmluZGV4IDk3NjE1NjdmYjI3NDk3NWY0NGM1NDE5MGIxMTc0OWVjMzcx
MTZkYzYuLjc3MjNmMGZiNzI3MjM2MjE5OGM0MjAyMTQ1NGUyNmIzMGJhNTI3ZjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCkBAIC00Miw2
ICs0MiwyMCBAQCB2b2lkIFNhZmVSZWxlYXNlKFQmIHJlc291cmNlKQogICAgIH0KIH0KIAordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+Cit2b2lkIFNhZmVEZWxldGUoVComIHJlc291cmNlKQoreworICAg
IGRlbGV0ZSByZXNvdXJjZTsKKyAgICByZXNvdXJjZSA9IE5VTEw7Cit9CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPgordm9pZCBTYWZlRGVsZXRlQXJyYXkoVComIHJlc291cmNlKQoreworICAgIGRl
bGV0ZVtdIHJlc291cmNlOworICAgIHJlc291cmNlID0gTlVMTDsKK30KKwogI2lmIGRlZmluZWQo
X01TQ19WRVIpCiAjZGVmaW5lIHNucHJpbnRmIF9zbnByaW50ZgogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuY3BwCmluZGV4IDIzMzM3NDA1ZWQxNmNh
OWZkMDVkZDc4MjI5NDJkZjVmMzA2NTUwODUuLjA1ZDNkYzYyYWQ0OTYxMDAwMTI1OWI5YjhiYTZl
MzFkYzk5YTA3MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21t
b24vZGVidWcuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVi
dWcuY3BwCkBAIC03LDE3ICs3LDIzIEBACiAvLyBkZWJ1Zy5jcHA6IERlYnVnZ2luZyB1dGlsaXRp
ZXMuCiAKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLSNpbmNsdWRlICJjb21tb24vc3lzdGVt
LmgiCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9QRVJG
KQogI2luY2x1ZGUgPGQzZDkuaD4KKyNlbmRpZgogCiBuYW1lc3BhY2UgZ2wKIHsKLQorI2lmIGRl
ZmluZWQoQU5HTEVfRU5BQkxFX1BFUkYpCiB0eXBlZGVmIHZvaWQgKFdJTkFQSSAqUGVyZk91dHB1
dEZ1bmN0aW9uKShEM0RDT0xPUiwgTFBDV1NUUik7CisjZWxzZQordHlwZWRlZiB2b2lkICgqUGVy
Zk91dHB1dEZ1bmN0aW9uKSh1bnNpZ25lZCBpbnQsIGNvbnN0IHdjaGFyX3QqKTsKKyNlbmRpZgog
CiBzdGF0aWMgdm9pZCBvdXRwdXQoYm9vbCB0cmFjZUZpbGVEZWJ1Z09ubHksIFBlcmZPdXRwdXRG
dW5jdGlvbiBwZXJmRnVuYywgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhcmFyZykKIHsK
LSNpZiAhZGVmaW5lZChBTkdMRV9ESVNBQkxFX1BFUkYpCisjaWYgZGVmaW5lZChBTkdMRV9FTkFC
TEVfUEVSRikKICAgICBpZiAocGVyZkFjdGl2ZSgpKQogICAgIHsKICAgICAgICAgY2hhciBtZXNz
YWdlWzMyNzY4XTsKQEAgLTM3LDE1ICs0MywxNSBAQCBzdGF0aWMgdm9pZCBvdXRwdXQoYm9vbCB0
cmFjZUZpbGVEZWJ1Z09ubHksIFBlcmZPdXRwdXRGdW5jdGlvbiBwZXJmRnVuYywgY29uc3QgYwog
CiAgICAgICAgIHBlcmZGdW5jKDAsIHdpZGVNZXNzYWdlKTsKICAgICB9Ci0jZW5kaWYKKyNlbmRp
ZiAvLyBBTkdMRV9FTkFCTEVfUEVSRgogCi0jaWYgIWRlZmluZWQoQU5HTEVfRElTQUJMRV9UUkFD
RSkKKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9UUkFDRSkKICNpZiBkZWZpbmVkKE5ERUJVRykK
ICAgICBpZiAodHJhY2VGaWxlRGVidWdPbmx5KQogICAgIHsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSNlbmRpZgorI2VuZGlmIC8vIE5ERUJVRwogCiAgICAgRklMRSogZmlsZSA9IGZvcGVuKFRS
QUNFX09VVFBVVF9GSUxFLCAiYSIpOwogICAgIGlmIChmaWxlKQpAQCAtNTMsNTAgKzU5LDUwIEBA
IHN0YXRpYyB2b2lkIG91dHB1dChib29sIHRyYWNlRmlsZURlYnVnT25seSwgUGVyZk91dHB1dEZ1
bmN0aW9uIHBlcmZGdW5jLCBjb25zdCBjCiAgICAgICAgIHZmcHJpbnRmKGZpbGUsIGZvcm1hdCwg
dmFyYXJnKTsKICAgICAgICAgZmNsb3NlKGZpbGUpOwogICAgIH0KLSNlbmRpZgorI2VuZGlmIC8v
IEFOR0xFX0VOQUJMRV9UUkFDRQogfQogCiB2b2lkIHRyYWNlKGJvb2wgdHJhY2VGaWxlRGVidWdP
bmx5LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIHsKICAgICB2YV9saXN0IHZhcmFyZzsKICAg
ICB2YV9zdGFydCh2YXJhcmcsIGZvcm1hdCk7Ci0jaWYgZGVmaW5lZChBTkdMRV9ESVNBQkxFX1BF
UkYpCi0gICAgb3V0cHV0KHRyYWNlRmlsZURlYnVnT25seSwgTlVMTCwgZm9ybWF0LCB2YXJhcmcp
OwotI2Vsc2UKKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9QRVJGKQogICAgIG91dHB1dCh0cmFj
ZUZpbGVEZWJ1Z09ubHksIEQzRFBFUkZfU2V0TWFya2VyLCBmb3JtYXQsIHZhcmFyZyk7CisjZWxz
ZQorICAgIG91dHB1dCh0cmFjZUZpbGVEZWJ1Z09ubHksIE5VTEwsIGZvcm1hdCwgdmFyYXJnKTsK
ICNlbmRpZgogICAgIHZhX2VuZCh2YXJhcmcpOwogfQogCiBib29sIHBlcmZBY3RpdmUoKQogewot
I2lmIGRlZmluZWQoQU5HTEVfRElTQUJMRV9QRVJGKQotICAgIHJldHVybiBmYWxzZTsKLSNlbHNl
CisjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfUEVSRikKICAgICBzdGF0aWMgYm9vbCBhY3RpdmUg
PSBEM0RQRVJGX0dldFN0YXR1cygpICE9IDA7CiAgICAgcmV0dXJuIGFjdGl2ZTsKKyNlbHNlCisg
ICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiB9CiAKIFNjb3BlZFBlcmZFdmVudEhlbHBlcjo6U2Nv
cGVkUGVyZkV2ZW50SGVscGVyKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKQogewotI2lmICFkZWZp
bmVkKEFOR0xFX0RJU0FCTEVfUEVSRikKLSNpZiBkZWZpbmVkKEFOR0xFX0RJU0FCTEVfVFJBQ0Up
CisjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfUEVSRikKKyNpZiAhZGVmaW5lZChBTkdMRV9FTkFC
TEVfVFJBQ0UpCiAgICAgaWYgKCFwZXJmQWN0aXZlKCkpCiAgICAgewogICAgICAgICByZXR1cm47
CiAgICAgfQotI2VuZGlmCisjZW5kaWYgLy8gIUFOR0xFX0VOQUJMRV9UUkFDRQogICAgIHZhX2xp
c3QgdmFyYXJnOwogICAgIHZhX3N0YXJ0KHZhcmFyZywgZm9ybWF0KTsKICAgICBvdXRwdXQodHJ1
ZSwgcmVpbnRlcnByZXRfY2FzdDxQZXJmT3V0cHV0RnVuY3Rpb24+KEQzRFBFUkZfQmVnaW5FdmVu
dCksIGZvcm1hdCwgdmFyYXJnKTsKICAgICB2YV9lbmQodmFyYXJnKTsKLSNlbmRpZgorI2VuZGlm
IC8vIEFOR0xFX0VOQUJMRV9QRVJGCiB9CiAKIFNjb3BlZFBlcmZFdmVudEhlbHBlcjo6flNjb3Bl
ZFBlcmZFdmVudEhlbHBlcigpCiB7Ci0jaWYgIWRlZmluZWQoQU5HTEVfRElTQUJMRV9QRVJGKQor
I2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX1BFUkYpCiAgICAgaWYgKHBlcmZBY3RpdmUoKSkKICAg
ICB7CiAgICAgICAgIEQzRFBFUkZfRW5kRXZlbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21tb24vZGVidWcuaAppbmRleCAwNjBiNzI3MmViM2MwMTIxNzUwN2VjMDQ3NjYwYjFm
MWRlMzZlNzg1Li43OTM4NDM4OTVjMGIwOTc4NmJmNTg0MWU0MzIxYTVjYjBkYjNlMjgxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmgKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5oCkBAIC0zOSwzMyArMzks
MzUgQEAgbmFtZXNwYWNlIGdsCiB9CiAKIC8vIEEgbWFjcm8gdG8gb3V0cHV0IGEgdHJhY2Ugb2Yg
YSBmdW5jdGlvbiBjYWxsIGFuZCBpdHMgYXJndW1lbnRzIHRvIHRoZSBkZWJ1Z2dpbmcgbG9nCi0j
aWYgZGVmaW5lZChBTkdMRV9ESVNBQkxFX1RSQUNFKSAmJiBkZWZpbmVkKEFOR0xFX0RJU0FCTEVf
UEVSRikKLSNkZWZpbmUgVFJBQ0UobWVzc2FnZSwgLi4uKSAodm9pZCgwKSkKLSNlbHNlCisjaWYg
ZGVmaW5lZChBTkdMRV9FTkFCTEVfVFJBQ0UpIHx8IGRlZmluZWQoQU5HTEVfRU5BQkxFX1BFUkYp
CiAjZGVmaW5lIFRSQUNFKG1lc3NhZ2UsIC4uLikgZ2w6OnRyYWNlKHRydWUsICJ0cmFjZTogJXMo
JWQpOiAiIG1lc3NhZ2UgIlxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgIyNfX1ZBX0FSR1Nf
XykKKyNlbHNlCisjZGVmaW5lIFRSQUNFKG1lc3NhZ2UsIC4uLikgKHZvaWQoMCkpCiAjZW5kaWYK
IAogLy8gQSBtYWNybyB0byBvdXRwdXQgYSBmdW5jdGlvbiBjYWxsIGFuZCBpdHMgYXJndW1lbnRz
IHRvIHRoZSBkZWJ1Z2dpbmcgbG9nLCB0byBkZW5vdGUgYW4gaXRlbSBpbiBuZWVkIG9mIGZpeGlu
Zy4KLSNpZiBkZWZpbmVkKEFOR0xFX0RJU0FCTEVfVFJBQ0UpICYmIGRlZmluZWQoQU5HTEVfRElT
QUJMRV9QRVJGKQotI2RlZmluZSBGSVhNRShtZXNzYWdlLCAuLi4pICh2b2lkKDApKQotI2Vsc2UK
KyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9UUkFDRSkgfHwgZGVmaW5lZChBTkdMRV9FTkFCTEVf
UEVSRikKICNkZWZpbmUgRklYTUUobWVzc2FnZSwgLi4uKSBnbDo6dHJhY2UoZmFsc2UsICJmaXht
ZTogJXMoJWQpOiAiIG1lc3NhZ2UgIlxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgIyNfX1ZB
X0FSR1NfXykKKyNlbHNlCisjZGVmaW5lIEZJWE1FKG1lc3NhZ2UsIC4uLikgKHZvaWQoMCkpCiAj
ZW5kaWYKIAogLy8gQSBtYWNybyB0byBvdXRwdXQgYSBmdW5jdGlvbiBjYWxsIGFuZCBpdHMgYXJn
dW1lbnRzIHRvIHRoZSBkZWJ1Z2dpbmcgbG9nLCBpbiBjYXNlIG9mIGVycm9yLgotI2lmIGRlZmlu
ZWQoQU5HTEVfRElTQUJMRV9UUkFDRSkgJiYgZGVmaW5lZChBTkdMRV9ESVNBQkxFX1BFUkYpCi0j
ZGVmaW5lIEVSUihtZXNzYWdlLCAuLi4pICh2b2lkKDApKQotI2Vsc2UKKyNpZiBkZWZpbmVkKEFO
R0xFX0VOQUJMRV9UUkFDRSkgfHwgZGVmaW5lZChBTkdMRV9FTkFCTEVfUEVSRikKICNkZWZpbmUg
RVJSKG1lc3NhZ2UsIC4uLikgZ2w6OnRyYWNlKGZhbHNlLCAiZXJyOiAlcyglZCk6ICIgbWVzc2Fn
ZSAiXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCAjI19fVkFfQVJHU19fKQorI2Vsc2UKKyNk
ZWZpbmUgRVJSKG1lc3NhZ2UsIC4uLikgKHZvaWQoMCkpCiAjZW5kaWYKIAogLy8gQSBtYWNybyB0
byBsb2cgYSBwZXJmb3JtYW5jZSBldmVudCBhcm91bmQgYSBzY29wZS4KLSNpZiBkZWZpbmVkKEFO
R0xFX0RJU0FCTEVfVFJBQ0UpICYmIGRlZmluZWQoQU5HTEVfRElTQUJMRV9QRVJGKQotI2RlZmlu
ZSBFVkVOVChtZXNzYWdlLCAuLi4pICh2b2lkKDApKQotI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikK
KyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9UUkFDRSkgfHwgZGVmaW5lZChBTkdMRV9FTkFCTEVf
UEVSRikKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQogI2RlZmluZSBFVkVOVChtZXNzYWdlLCAuLi4p
IGdsOjpTY29wZWRQZXJmRXZlbnRIZWxwZXIgc2NvcGVkUGVyZkV2ZW50SGVscGVyICMjIF9fTElO
RV9fKF9fRlVOQ1RJT05fXyBtZXNzYWdlICJcbiIsIF9fVkFfQVJHU19fKTsKICNlbHNlCiAjZGVm
aW5lIEVWRU5UKG1lc3NhZ2UsIC4uLikgZ2w6OlNjb3BlZFBlcmZFdmVudEhlbHBlciBzY29wZWRQ
ZXJmRXZlbnRIZWxwZXIobWVzc2FnZSAiXG4iLCAjI19fVkFfQVJHU19fKTsKKyNlbmRpZiAvLyBf
TVNDX1ZFUgorI2Vsc2UKKyNkZWZpbmUgRVZFTlQobWVzc2FnZSwgLi4uKSAodm9pZCgwKSkKICNl
bmRpZgogCiAvLyBBIG1hY3JvIGFzc2VydGluZyBhIGNvbmRpdGlvbiBhbmQgb3V0cHV0dGluZyBm
YWlsdXJlcyB0byB0aGUgZGVidWcgbG9nCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tbW9uL2V2ZW50X3RyYWNlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tbW9uL2V2ZW50X3RyYWNlci5jcHAKaW5kZXggOTZjYmIwMTA2MTRjZTk2YzdmNTBh
YjZmMDNhY2NiYmZmMjVhNTM5Yy4uMTQyMzczZDEzZjI0OGI3MDRhYzQ4ZjcwZTFiZjU2ZDZjM2U4
MDAwZSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9ldmVu
dF90cmFjZXIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZXZl
bnRfdHJhY2VyLmNwcApAQCAtMTQsNyArMTQsNyBAQCBBZGRUcmFjZUV2ZW50RnVuYyBnX2FkZFRy
YWNlRXZlbnQ7CiAKIGV4dGVybiAiQyIgewogCi12b2lkIF9fc3RkY2FsbCBTZXRUcmFjZUZ1bmN0
aW9uUG9pbnRlcnMoR2V0Q2F0ZWdvcnlFbmFibGVkRmxhZ0Z1bmMgZ2V0Q2F0ZWdvcnlFbmFibGVk
RmxhZywKK3ZvaWQgVFJBQ0VfRU5UUlkgU2V0VHJhY2VGdW5jdGlvblBvaW50ZXJzKEdldENhdGVn
b3J5RW5hYmxlZEZsYWdGdW5jIGdldENhdGVnb3J5RW5hYmxlZEZsYWcsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkVHJhY2VFdmVudEZ1bmMgYWRkVHJhY2VFdmVu
dCkKIHsKICAgICBnbDo6Z19nZXRDYXRlZ29yeUVuYWJsZWRGbGFnID0gZ2V0Q2F0ZWdvcnlFbmFi
bGVkRmxhZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24v
ZXZlbnRfdHJhY2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2V2ZW50
X3RyYWNlci5oCmluZGV4IGFlMzk3ZTdkYjk5YWFiZTQzYThhZTVkZTcwOWM1Y2Y5ZWNkMmFmMTgu
LjE0YjdiMjk4ZmQ4NDdjZGJhNTIxNmMyNDNkYTc1YWJiMzkzMTA1NWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZXZlbnRfdHJhY2VyLmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9ldmVudF90cmFjZXIuaApAQCAtNSw2ICs1
LDE0IEBACiAjaWZuZGVmIENPTU1PTl9FVkVOVF9UUkFDRVJfSF8KICNkZWZpbmUgQ09NTU9OX0VW
RU5UX1RSQUNFUl9IXwogCisjaWYgIWRlZmluZWQoVFJBQ0VfRU5UUlkpCisjaWYgZGVmaW5lZChf
V0lOMzIpCisjZGVmaW5lIFRSQUNFX0VOVFJZIF9fc3RkY2FsbAorI2Vsc2UKKyNkZWZpbmUgVFJB
Q0VfRU5UUlkKKyNlbmRpZiAvLyAvLyBfV0lOMzIKKyNlbmRpZiAvL1RSQUNFX0VOVFJZCisKIGV4
dGVybiAiQyIgewogCiB0eXBlZGVmIGNvbnN0IHVuc2lnbmVkIGNoYXIqICgqR2V0Q2F0ZWdvcnlF
bmFibGVkRmxhZ0Z1bmMpKGNvbnN0IGNoYXIqIG5hbWUpOwpAQCAtMTQsOCArMjIsOCBAQCB0eXBl
ZGVmIHZvaWQgKCpBZGRUcmFjZUV2ZW50RnVuYykoY2hhciBwaGFzZSwgY29uc3QgdW5zaWduZWQg
Y2hhciogY2F0ZWdvcnlHcm91cAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGNoYXIgZmxhZ3MpOwogCiAvLyBleHRlcm4gIkMiIHNvIHRoYXQgaXQgaGFzIGEgcmVh
c29uYWJsZSBuYW1lIGZvciBHZXRQcm9jQWRkcmVzcy4KLXZvaWQgX19zdGRjYWxsIFNldFRyYWNl
RnVuY3Rpb25Qb2ludGVycyhHZXRDYXRlZ29yeUVuYWJsZWRGbGFnRnVuYyBnZXRfY2F0ZWdvcnlf
ZW5hYmxlZF9mbGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFk
ZFRyYWNlRXZlbnRGdW5jIGFkZF90cmFjZV9ldmVudF9mdW5jKTsKK3ZvaWQgVFJBQ0VfRU5UUlkg
U2V0VHJhY2VGdW5jdGlvblBvaW50ZXJzKEdldENhdGVnb3J5RW5hYmxlZEZsYWdGdW5jIGdldF9j
YXRlZ29yeV9lbmFibGVkX2ZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBZGRUcmFjZUV2ZW50RnVuYyBhZGRfdHJhY2VfZXZlbnRfZnVuYyk7CiAKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3ZlcnNpb24uaAppbmRleCA5ZjIy
MWYzYWNjMWYyYWUzOTBlNzZjODMyZDkyNTAxZDNhYTg3NDdiLi5mNmFlMTlmNTQxYzI2MTExYmJk
ZTZmMzEzNzg4YjliYmRmOGY0YTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tbW9uL3ZlcnNpb24uaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tbW9uL3ZlcnNpb24uaApAQCAtMSwxMiArMSwxMiBAQAotI2RlZmluZSBNQUpPUl9WRVJTSU9O
IDEKLSNkZWZpbmUgTUlOT1JfVkVSU0lPTiAyCi0jZGVmaW5lIEJVSUxEX1ZFUlNJT04gMAotI2Rl
ZmluZSBCVUlMRF9SRVZJU0lPTiAyNDUwCisjaW5jbHVkZSAiY29tbWl0LmgiCiAKLSNkZWZpbmUg
U1RSSU5HSUZZKHgpICN4Ci0jZGVmaW5lIE1BQ1JPX1NUUklOR0lGWSh4KSBTVFJJTkdJRlkoeCkK
KyNkZWZpbmUgQU5HTEVfTUFKT1JfVkVSU0lPTiAxCisjZGVmaW5lIEFOR0xFX01JTk9SX1ZFUlNJ
T04gMwogCi0jZGVmaW5lIFJFVklTSU9OX1NUUklORyBNQUNST19TVFJJTkdJRlkoQlVJTERfUkVW
SVNJT04pCi0jZGVmaW5lIFZFUlNJT05fU1RSSU5HIE1BQ1JPX1NUUklOR0lGWShNQUpPUl9WRVJT
SU9OKSAiLiIgTUFDUk9fU1RSSU5HSUZZKE1JTk9SX1ZFUlNJT04pICIuIiBNQUNST19TVFJJTkdJ
RlkoQlVJTERfVkVSU0lPTikgIi4iIE1BQ1JPX1NUUklOR0lGWShCVUlMRF9SRVZJU0lPTikKKyNk
ZWZpbmUgQU5HTEVfU1RSSU5HSUZZKHgpICAgICAgICN4CisjZGVmaW5lIEFOR0xFX01BQ1JPX1NU
UklOR0lGWSh4KSBBTkdMRV9TVFJJTkdJRlkoeCkKIAotI2RlZmluZSBWRVJTSU9OX0RXT1JEICgo
TUFKT1JfVkVSU0lPTiA8PCAyNCkgfCAoTUlOT1JfVkVSU0lPTiA8PCAxNikgfCBCVUlMRF9SRVZJ
U0lPTikKKyNkZWZpbmUgQU5HTEVfVkVSU0lPTl9TVFJJTkcgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICBBTkdMRV9NQUNST19TVFJJTkdJRlkoQU5HTEVfTUFKT1JfVkVSU0lPTikgIi4iIFwK
KyAgICBBTkdMRV9NQUNST19TVFJJTkdJRlkoQU5HTEVfTUlOT1JfVkVSU0lPTikgIi4iIFwKKyAg
ICBBTkdMRV9DT01NSVRfSEFTSApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyLzY0Yml0LWxleGVyLXNhZmV0eS5wYXRjaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci82NGJpdC1sZXhlci1zYWZldHkucGF0Y2gKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDdhZjkxZjU3NjUzNDMzN2FmZjZmZjdkNmRmNDdhYmNkZmM2YzZk
MWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyLzY0Yml0LWxleGVyLXNhZmV0eS5wYXRjaAor
KysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi0tLS0gYS9zcmMvY29tcGlsZXIvZ2xzbGFu
Z19sZXguY3BwCi0rKysgYi9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwCi1AQCAtNjgsNiAr
NjgsNyBAQCB0eXBlZGVmIGludDE2X3QgZmxleF9pbnQxNl90OwotIHR5cGVkZWYgdWludDE2X3Qg
ZmxleF91aW50MTZfdDsKLSB0eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90OwotIHR5cGVkZWYg
dWludDMyX3QgZmxleF91aW50MzJfdDsKLSt0eXBlZGVmIHVpbnQ2NF90IGZsZXhfdWludDY0X3Q7
Ci0gI2Vsc2UKLSB0eXBlZGVmIHNpZ25lZCBjaGFyIGZsZXhfaW50OF90OwotIHR5cGVkZWYgc2hv
cnQgaW50IGZsZXhfaW50MTZfdDsKLUBAIC0xOTEsNiArMTkyLDExIEBAIHR5cGVkZWYgdm9pZCog
eXlzY2FuX3Q7Ci0gdHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RB
VEU7Ci0gI2VuZGlmCi0gCi0rI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAotKyNkZWZpbmUg
WVlfVFlQRURFRl9ZWV9TSVpFX1QKLSt0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7Ci0rI2VuZGlm
Ci0rCi0gI2RlZmluZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU4gMAotICNkZWZpbmUgRU9CX0FDVF9F
TkRfT0ZfRklMRSAxCi0gI2RlZmluZSBFT0JfQUNUX0xBU1RfTUFUQ0ggMgotQEAgLTIwNCw3ICsy
MTAsNyBAQCB0eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFURTsK
LSAgICAgICovCi0gICAgICNkZWZpbmUgIFlZX0xFU1NfTElORU5PKG4pIFwKLSAgICAgICAgICAg
ICBkbyB7IFwKLS0gICAgICAgICAgICAgICAgaW50IHl5bDtcCi0rICAgICAgICAgICAgICAgIHl5
X3NpemVfdCB5eWw7XAotICAgICAgICAgICAgICAgICBmb3IgKCB5eWwgPSBuOyB5eWwgPCB5eWxl
bmc7ICsreXlsIClcCi0gICAgICAgICAgICAgICAgICAgICBpZiAoIHl5dGV4dFt5eWxdID09ICdc
bicgKVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAtLXl5bGluZW5vO1wKLUBAIC0yMjYsMTEg
KzIzMiw2IEBAIHR5cGVkZWYgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRF
OwotIAotICNkZWZpbmUgdW5wdXQoYykgeXl1bnB1dCggYywgeXlnLT55eXRleHRfcHRyICwgeXlz
Y2FubmVyICkKLSAKLS0jaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCi0tI2RlZmluZSBZWV9U
WVBFREVGX1lZX1NJWkVfVAotLXR5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKLS0jZW5kaWYKLS0K
LSAjaWZuZGVmIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKLSAjZGVmaW5lIFlZX1NUUlVDVF9Z
WV9CVUZGRVJfU1RBVEUKLSBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlCi1AQCAtMjQ4LDcgKzI0OSw3
IEBAIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUKLSAJLyogTnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVh
ZCBpbnRvIHl5X2NoX2J1Ziwgbm90IGluY2x1ZGluZyBFT0IKLSAJICogY2hhcmFjdGVycy4KLSAJ
ICovCi0tCWludCB5eV9uX2NoYXJzOwotKwl5eV9zaXplX3QgeXlfbl9jaGFyczsKLSAKLSAJLyog
V2hldGhlciB3ZSAib3duIiB0aGUgYnVmZmVyIC0gaS5lLiwgd2Uga25vdyB3ZSBjcmVhdGVkIGl0
LAotIAkgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hvdWxkIGZyZWUo
KSBpdCB0bwotQEAgLTMyNyw3ICszMjgsNyBAQCBzdGF0aWMgdm9pZCB5eV9pbml0X2J1ZmZlciAo
WVlfQlVGRkVSX1NUQVRFIGIsRklMRSAqZmlsZSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gCi0g
WVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnVmZmVyIChjaGFyICpiYXNlLHl5X3NpemVfdCBzaXpl
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSBZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9zdHJpbmcg
KHl5Y29uc3QgY2hhciAqeXlfc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLS1ZWV9CVUZGRVJf
U1RBVEUgeXlfc2Nhbl9ieXRlcyAoeXljb25zdCBjaGFyICpieXRlcyxpbnQgbGVuICx5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKLStZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAoeXljb25zdCBj
aGFyICpieXRlcyx5eV9zaXplX3QgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAKLSB2b2lk
ICp5eWFsbG9jICh5eV9zaXplX3QgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotIHZvaWQgKnl5cmVh
bGxvYyAodm9pZCAqLHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci1AQCAtMzc4LDcg
KzM3OSw3IEBAIHN0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIgbXNnW10g
LHl5c2Nhbl90IHl5c2Nhbm5lciApOwotICAqLwotICNkZWZpbmUgWVlfRE9fQkVGT1JFX0FDVElP
TiBcCi0gCXl5Zy0+eXl0ZXh0X3B0ciA9IHl5X2JwOyBcCi0tCXl5bGVuZyA9IChzaXplX3QpICh5
eV9jcCAtIHl5X2JwKTsgXAotKwl5eWxlbmcgPSAoeXlfc2l6ZV90KSAoeXlfY3AgLSB5eV9icCk7
IFwKLSAJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlfY3A7IFwKLSAJKnl5X2NwID0gJ1wwJzsgXAot
IAl5eWctPnl5X2NfYnVmX3AgPSB5eV9jcDsKLUBAIC0xMDM1LDggKzEwMzYsOCBAQCBzdHJ1Y3Qg
eXlndXRzX3QKLSAgICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja19tYXg7IC8qKjwgY2FwYWNpdHkg
b2Ygc3RhY2suICovCi0gICAgIFlZX0JVRkZFUl9TVEFURSAqIHl5X2J1ZmZlcl9zdGFjazsgLyoq
PCBTdGFjayBhcyBhbiBhcnJheS4gKi8KLSAgICAgY2hhciB5eV9ob2xkX2NoYXI7Ci0tICAgIGlu
dCB5eV9uX2NoYXJzOwotLSAgICBpbnQgeXlsZW5nX3I7Ci0rICAgIHl5X3NpemVfdCB5eV9uX2No
YXJzOwotKyAgICB5eV9zaXplX3QgeXlsZW5nX3I7Ci0gICAgIGNoYXIgKnl5X2NfYnVmX3A7Ci0g
ICAgIGludCB5eV9pbml0OwotICAgICBpbnQgeXlfc3RhcnQ7Ci1AQCAtMTA4OSw3ICsxMDkwLDcg
QEAgRklMRSAqeXlnZXRfb3V0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAKLSB2b2lkIHl5c2V0
X291dCAgKEZJTEUgKiBvdXRfc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAKLS1pbnQgeXln
ZXRfbGVuZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0reXlfc2l6ZV90IHl5Z2V0X2xlbmcgKHl5
c2Nhbl90IHl5c2Nhbm5lciApOwotIAotIGNoYXIgKnl5Z2V0X3RleHQgKHl5c2Nhbl90IHl5c2Nh
bm5lciApOwotIAotQEAgLTExNTgsNyArMTE1OSw3IEBAIHN0YXRpYyBpbnQgaW5wdXQgKHl5c2Nh
bl90IHl5c2Nhbm5lciApOwotIAlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNf
aW50ZXJhY3RpdmUgKSBcCi0gCQl7IFwKLSAJCWludCBjID0gJyonOyBcCi0tCQlpbnQgbjsgXAot
KwkJeXlfc2l6ZV90IG47IFwKLSAJCWZvciAoIG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAotIAkJ
CSAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsrbiApIFwKLSAJ
CQlidWZbbl0gPSAoY2hhcikgYzsgXAotQEAgLTEzMTcsNyArMTMxOCw3IEBAIHl5X2ZpbmRfYWN0
aW9uOgotIAotIAkJaWYgKCB5eV9hY3QgIT0gWVlfRU5EX09GX0JVRkZFUiAmJiB5eV9ydWxlX2Nh
bl9tYXRjaF9lb2xbeXlfYWN0XSApCi0gCQkJewotLQkJCWludCB5eWw7Ci0rCQkJeXlfc2l6ZV90
IHl5bDsKLSAJCQlmb3IgKCB5eWwgPSAwOyB5eWwgPCB5eWxlbmc7ICsreXlsICkKLSAJCQkJaWYg
KCB5eXRleHRbeXlsXSA9PSAnXG4nICkKLSAJCQkJCSAgIAotQEAgLTIyMDMsNyArMjIwNCw3IEBA
IHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCi0gCi0g
CWVsc2UKLSAJCXsKLS0JCQlpbnQgbnVtX3RvX3JlYWQgPQotKwkJCXl5X3NpemVfdCBudW1fdG9f
cmVhZCA9Ci0gCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtIG51bWJl
cl90b19tb3ZlIC0gMTsKLSAKLSAJCXdoaWxlICggbnVtX3RvX3JlYWQgPD0gMCApCi1AQCAtMjIx
Nyw3ICsyMjE4LDcgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5
c2Nhbm5lcikKLSAKLSAJCQlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQotIAkJCQl7Ci0tCQkJ
CWludCBuZXdfc2l6ZSA9IGItPnl5X2J1Zl9zaXplICogMjsKLSsJCQkJeXlfc2l6ZV90IG5ld19z
aXplID0gYi0+eXlfYnVmX3NpemUgKiAyOwotIAotIAkJCQlpZiAoIG5ld19zaXplIDw9IDAgKQot
IAkJCQkJYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVmX3NpemUgLyA4OwotQEAgLTIyNDgsNyAr
MjI0OSw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCi0gCi0gCQkvKiBSZWFkIGluIG1vcmUgZGF0YS4gKi8KLSAJCVlZX0lOUFVUKCAoJllZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90b19tb3ZlXSksCi0tCQkJeXln
LT55eV9uX2NoYXJzLCAoc2l6ZV90KSBudW1fdG9fcmVhZCApOwotKwkJCXl5Zy0+eXlfbl9jaGFy
cywgbnVtX3RvX3JlYWQgKTsKLSAKLSAJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9j
aGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKLSAJCX0KLUBAIC0yMzczLDcgKzIzNzQsNyBAQCBzdGF0
aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQotIAotIAkJZWxz
ZQotIAkJCXsgLyogbmVlZCBtb3JlIGlucHV0ICovCi0tCQkJaW50IG9mZnNldCA9IHl5Zy0+eXlf
Y19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cjsKLSsJCQl5eV9zaXplX3Qgb2Zmc2V0ID0geXlnLT55
eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyOwotIAkJCSsreXlnLT55eV9jX2J1Zl9wOwotIAot
IAkJCXN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQotQEAgLTI2NjAs
NyArMjY2MSw3IEBAIHZvaWQgeXlwb3BfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIp
Ci0gICovCi0gc3RhdGljIHZvaWQgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNj
YW5uZXIpCi0gewotLQlpbnQgbnVtX3RvX2FsbG9jOwotKwl5eV9zaXplX3QgbnVtX3RvX2FsbG9j
OwotICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7Ci0gCi0gCWlmICgheXlnLT55eV9idWZmZXJfc3RhY2spIHsKLUBAIC0yNzU4LDEyICsyNzU5
LDExIEBAIFlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICogeXlz
dHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi0gICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5l
ciBvYmplY3QuCi0gICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBv
YmplY3QuCi0gICovCi0tWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNo
YXIgKiB5eWJ5dGVzLCBpbnQgIF95eWJ5dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLStZ
WV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIHl5
X3NpemVfdCAgX3l5Ynl0ZXNfbGVuICwgeXlzY2FuX3QgeXlzY2FubmVyKQotIHsKLSAJWVlfQlVG
RkVSX1NUQVRFIGI7Ci0gCWNoYXIgKmJ1ZjsKLS0JeXlfc2l6ZV90IG47Ci0tCWludCBpOwotKwl5
eV9zaXplX3QgbiwgaTsKLSAgICAgCi0gCS8qIEdldCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBp
bmNsdWRpbmcgc3BhY2UgZm9yIHRyYWlsaW5nIEVPQidzLiAqLwotIAluID0gX3l5Ynl0ZXNfbGVu
ICsgMjsKLUBAIC0yOTEzLDcgKzI5MTMsNyBAQCBGSUxFICp5eWdldF9vdXQgICh5eXNjYW5fdCB5
eXNjYW5uZXIpCi0gLyoqIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50IHRva2VuLgotICAq
IEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICAqLwotLWludCB5eWdldF9s
ZW5nICAoeXlzY2FuX3QgeXlzY2FubmVyKQotK3l5X3NpemVfdCB5eWdldF9sZW5nICAoeXlzY2Fu
X3QgeXlzY2FubmVyKQotIHsKLSAgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOwotICAgICByZXR1cm4geXlsZW5nOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Jhc2VUeXBlcy5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Jhc2VUeXBlcy5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAxNjMxZjRmNzc5ZmE3ZWZhNzkzYmQ2M2FhYTIxY2M1ZmM5MThkZmYwLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CYXNlVHlwZXMuaAorKysgL2Rldi9udWxsCkBAIC0x
LDE0OCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIF9CQVNJQ1RZUEVTX0lO
Q0xVREVEXwotI2RlZmluZSBfQkFTSUNUWVBFU19JTkNMVURFRF8KLQotLy8KLS8vIFByZWNpc2lv
biBxdWFsaWZpZXJzCi0vLwotZW51bSBUUHJlY2lzaW9uCi17Ci0gICAgLy8gVGhlc2UgbmVlZCB0
byBiZSBrZXB0IHNvcnRlZAotICAgIEVicFVuZGVmaW5lZCwKLSAgICBFYnBMb3csCi0gICAgRWJw
TWVkaXVtLAotICAgIEVicEhpZ2gKLX07Ci0KLWlubGluZSBjb25zdCBjaGFyKiBnZXRQcmVjaXNp
b25TdHJpbmcoVFByZWNpc2lvbiBwKQotewotICAgIHN3aXRjaChwKQotICAgIHsKLSAgICBjYXNl
IEVicEhpZ2g6CQlyZXR1cm4gImhpZ2hwIjsJCWJyZWFrOwotICAgIGNhc2UgRWJwTWVkaXVtOgkJ
cmV0dXJuICJtZWRpdW1wIjsJYnJlYWs7Ci0gICAgY2FzZSBFYnBMb3c6CQlyZXR1cm4gImxvd3Ai
OwkJYnJlYWs7Ci0gICAgZGVmYXVsdDoJCQlyZXR1cm4gIm1lZGl1bXAiOyAgIGJyZWFrOyAgIC8v
IFNhZmVzdCBmYWxsYmFjawotICAgIH0KLX0KLQotLy8KLS8vIEJhc2ljIHR5cGUuICBBcnJheXMs
IHZlY3RvcnMsIGV0Yy4sIGFyZSBvcnRob2dvbmFsIHRvIHRoaXMuCi0vLwotZW51bSBUQmFzaWNU
eXBlCi17Ci0gICAgRWJ0Vm9pZCwKLSAgICBFYnRGbG9hdCwKLSAgICBFYnRJbnQsCi0gICAgRWJ0
Qm9vbCwKLSAgICBFYnRHdWFyZFNhbXBsZXJCZWdpbiwgIC8vIG5vbiB0eXBlOiAgc2VlIGltcGxl
bWVudGF0aW9uIG9mIElzU2FtcGxlcigpCi0gICAgRWJ0U2FtcGxlcjJELAotICAgIEVidFNhbXBs
ZXJDdWJlLAotICAgIEVidFNhbXBsZXJFeHRlcm5hbE9FUywgIC8vIE9ubHkgdmFsaWQgaWYgT0VT
X0VHTF9pbWFnZV9leHRlcm5hbCBleGlzdHMuCi0gICAgRWJ0U2FtcGxlcjJEUmVjdCwgICAgICAg
Ly8gT25seSB2YWxpZCBpZiBHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUgZXhpc3RzLgotICAgIEVi
dEd1YXJkU2FtcGxlckVuZCwgICAgLy8gbm9uIHR5cGU6ICBzZWUgaW1wbGVtZW50YXRpb24gb2Yg
SXNTYW1wbGVyKCkKLSAgICBFYnRTdHJ1Y3QsCi0gICAgRWJ0QWRkcmVzcywgICAgICAgICAgICAv
LyBzaG91bGQgYmUgZGVwcmVjYXRlZD8/Ci0gICAgRWJ0SW52YXJpYW50ICAgICAgICAgIC8vIHVz
ZWQgYXMgYSB0eXBlIHdoZW4gcXVhbGlmeWluZyBhIHByZXZpb3VzbHkgZGVjbGFyZWQgdmFyaWFi
bGUgYXMgYmVpbmcgaW52YXJpYW50Ci19OwotCi1pbmxpbmUgY29uc3QgY2hhciogZ2V0QmFzaWNT
dHJpbmcoVEJhc2ljVHlwZSB0KQotewotICAgIHN3aXRjaCAodCkKLSAgICB7Ci0gICAgY2FzZSBF
YnRWb2lkOiAgICAgICAgICAgICAgcmV0dXJuICJ2b2lkIjsgICAgICAgICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRWJ0RmxvYXQ6ICAgICAgICAgICAgIHJldHVybiAiZmxvYXQiOyAgICAgICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEVidEludDogICAgICAgICAgICAgICByZXR1cm4gImludCI7ICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRCb29sOiAgICAgICAgICAgICAgcmV0dXJu
ICJib29sIjsgICAgICAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAg
ICAgIHJldHVybiAic2FtcGxlcjJEIjsgICAgICAgICBicmVhazsKLSAgICBjYXNlIEVidFNhbXBs
ZXJDdWJlOiAgICAgICByZXR1cm4gInNhbXBsZXJDdWJlIjsgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6IHJldHVybiAic2FtcGxlckV4dGVybmFsT0VTIjsgYnJl
YWs7Ci0gICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OiAgICAgcmV0dXJuICJzYW1wbGVyMkRSZWN0
IjsgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0U3RydWN0OiAgICAgICAgICAgIHJldHVybiAic3Ry
dWN0dXJlIjsgICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gInVua25vd24gdHlwZSI7Ci0gICAgfQotfQotCi1pbmxpbmUgYm9vbCBJc1NhbXBsZXIo
VEJhc2ljVHlwZSB0eXBlKQotewotICAgIHJldHVybiB0eXBlID4gRWJ0R3VhcmRTYW1wbGVyQmVn
aW4gJiYgdHlwZSA8IEVidEd1YXJkU2FtcGxlckVuZDsKLX0KLQotLy8KLS8vIFF1YWxpZmllcnMg
YW5kIGJ1aWx0LWlucy4gIFRoZXNlIGFyZSBtYWlubHkgdXNlZCB0byBzZWUgd2hhdCBjYW4gYmUg
cmVhZAotLy8gb3Igd3JpdHRlbiwgYW5kIGJ5IHRoZSBtYWNoaW5lIGRlcGVuZGVudCB0cmFuc2xh
dG9yIHRvIGtub3cgd2hpY2ggcmVnaXN0ZXJzCi0vLyB0byBhbGxvY2F0ZSB2YXJpYWJsZXMgaW4u
ICBTaW5jZSBidWlsdC1pbnMgdGVuZCB0byBnbyB0byBkaWZmZXJlbnQgcmVnaXN0ZXJzCi0vLyB0
aGFuIHZhcnlpbmcgb3IgdW5pZm9ybSwgaXQgbWFrZXMgc2Vuc2UgdGhleSBhcmUgcGVlcnMsIG5v
dCBzdWItY2xhc3Nlcy4KLS8vCi1lbnVtIFRRdWFsaWZpZXIKLXsKLSAgICBFdnFUZW1wb3Jhcnks
ICAgICAvLyBGb3IgdGVtcG9yYXJpZXMgKHdpdGhpbiBhIGZ1bmN0aW9uKSwgcmVhZC93cml0ZQot
ICAgIEV2cUdsb2JhbCwgICAgICAgIC8vIEZvciBnbG9iYWxzIHJlYWQvd3JpdGUKLSAgICBFdnFD
b25zdCwgICAgICAgICAvLyBVc2VyIGRlZmluZWQgY29uc3RhbnRzIGFuZCBub24tb3V0cHV0IHBh
cmFtZXRlcnMgaW4gZnVuY3Rpb25zCi0gICAgRXZxQXR0cmlidXRlLCAgICAgLy8gUmVhZG9ubHkK
LSAgICBFdnFWYXJ5aW5nSW4sICAgICAvLyByZWFkb25seSwgZnJhZ21lbnQgc2hhZGVycyBvbmx5
Ci0gICAgRXZxVmFyeWluZ091dCwgICAgLy8gdmVydGV4IHNoYWRlcnMgb25seSAgcmVhZC93cml0
ZQotICAgIEV2cUludmFyaWFudFZhcnlpbmdJbiwgICAgIC8vIHJlYWRvbmx5LCBmcmFnbWVudCBz
aGFkZXJzIG9ubHkKLSAgICBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCAgICAvLyB2ZXJ0ZXggc2hh
ZGVycyBvbmx5ICByZWFkL3dyaXRlCi0gICAgRXZxVW5pZm9ybSwgICAgICAgLy8gUmVhZG9ubHks
IHZlcnRleCBhbmQgZnJhZ21lbnQKLQotICAgIC8vIHBhcmFtZXRlcnMKLSAgICBFdnFJbiwKLSAg
ICBFdnFPdXQsCi0gICAgRXZxSW5PdXQsCi0gICAgRXZxQ29uc3RSZWFkT25seSwKLQotICAgIC8v
IGJ1aWx0LWlucyB3cml0dGVuIGJ5IHZlcnRleCBzaGFkZXIKLSAgICBFdnFQb3NpdGlvbiwKLSAg
ICBFdnFQb2ludFNpemUsCi0KLSAgICAvLyBidWlsdC1pbnMgcmVhZCBieSBmcmFnbWVudCBzaGFk
ZXIKLSAgICBFdnFGcmFnQ29vcmQsCi0gICAgRXZxRnJvbnRGYWNpbmcsCi0gICAgRXZxUG9pbnRD
b29yZCwKLQotICAgIC8vIGJ1aWx0LWlucyB3cml0dGVuIGJ5IGZyYWdtZW50IHNoYWRlcgotICAg
IEV2cUZyYWdDb2xvciwKLSAgICBFdnFGcmFnRGF0YSwKLSAgICBFdnFGcmFnRGVwdGgsCi0KLSAg
ICAvLyBlbmQgb2YgbGlzdAotICAgIEV2cUxhc3QKLX07Ci0KLS8vCi0vLyBUaGlzIGlzIGp1c3Qg
Zm9yIGRlYnVnIHByaW50IG91dCwgY2FycmllZCBhbG9uZyB3aXRoIHRoZSBkZWZpbml0aW9ucyBh
Ym92ZS4KLS8vCi1pbmxpbmUgY29uc3QgY2hhciogZ2V0UXVhbGlmaWVyU3RyaW5nKFRRdWFsaWZp
ZXIgcSkKLXsKLSAgICBzd2l0Y2gocSkKLSAgICB7Ci0gICAgY2FzZSBFdnFUZW1wb3Jhcnk6ICAg
ICAgcmV0dXJuICJUZW1wb3JhcnkiOyAgICAgIGJyZWFrOwotICAgIGNhc2UgRXZxR2xvYmFsOiAg
ICAgICAgIHJldHVybiAiR2xvYmFsIjsgICAgICAgICBicmVhazsKLSAgICBjYXNlIEV2cUNvbnN0
OiAgICAgICAgICByZXR1cm4gImNvbnN0IjsgICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFD
b25zdFJlYWRPbmx5OiAgcmV0dXJuICJjb25zdCI7ICAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
RXZxQXR0cmlidXRlOiAgICAgIHJldHVybiAiYXR0cmlidXRlIjsgICAgICBicmVhazsKLSAgICBj
YXNlIEV2cVZhcnlpbmdJbjogICAgICByZXR1cm4gInZhcnlpbmciOyAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBFdnFWYXJ5aW5nT3V0OiAgICAgcmV0dXJuICJ2YXJ5aW5nIjsgICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWluZ0luOiByZXR1cm4gImludmFyaWFudCB2YXJ5
aW5nIjsJYnJlYWs7Ci0gICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0OnJldHVybiAiaW52
YXJpYW50IHZhcnlpbmciOwlicmVhazsKLSAgICBjYXNlIEV2cVVuaWZvcm06ICAgICAgICByZXR1
cm4gInVuaWZvcm0iOyAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFJbjogICAgICAgICAgICAg
cmV0dXJuICJpbiI7ICAgICAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXZxT3V0OiAgICAgICAg
ICAgIHJldHVybiAib3V0IjsgICAgICAgICAgICBicmVhazsKLSAgICBjYXNlIEV2cUluT3V0OiAg
ICAgICAgICByZXR1cm4gImlub3V0IjsgICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFQb3Np
dGlvbjogICAgICAgcmV0dXJuICJQb3NpdGlvbiI7ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXZx
UG9pbnRTaXplOiAgICAgIHJldHVybiAiUG9pbnRTaXplIjsgICAgICBicmVhazsKLSAgICBjYXNl
IEV2cUZyYWdDb29yZDogICAgICByZXR1cm4gIkZyYWdDb29yZCI7ICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBFdnFGcm9udEZhY2luZzogICAgcmV0dXJuICJGcm9udEZhY2luZyI7ICAgIGJyZWFrOwot
ICAgIGNhc2UgRXZxRnJhZ0NvbG9yOiAgICAgIHJldHVybiAiRnJhZ0NvbG9yIjsgICAgICBicmVh
azsKLSAgICBjYXNlIEV2cUZyYWdEYXRhOiAgICAgICByZXR1cm4gIkZyYWdEYXRhIjsgICAgICBi
cmVhazsKLSAgICBjYXNlIEV2cUZyYWdEZXB0aDogICAgICByZXR1cm4gIkZyYWdEZXB0aCI7ICAg
ICBicmVhazsKLSAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICByZXR1cm4gInVua25vd24gcXVh
bGlmaWVyIjsKLSAgICB9Ci19Ci0KLSNlbmRpZiAvLyBfQkFTSUNUWVBFU19JTkNMVURFRF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVu
Y3Rpb25FbXVsYXRvci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAxYzRiMjVmMTNmMGM2MmYwZDE0MWM4YzZlNWVmZTljODY0MWJhM2VlLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw0MDYgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVy
L0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmgiCi0KLSNpbmNsdWRlICJjb21waWxlci9TeW1ib2xU
YWJsZS5oIgotCi1uYW1lc3BhY2UgewotCi0vLyB3ZSB1c2UgbWFjcm9zIGhlcmUgaW5zdGVhZCBv
ZiBmdW5jdGlvbiBkZWZpbml0aW9ucyB0byB3b3JrIGFyb3VuZCBtb3JlIEdMU0wKLS8vIGNvbXBp
bGVyIGJ1Z3MsIGluIHBhcnRpY3VsYXIgb24gTlZJRElBIGhhcmR3YXJlIG9uIE1hYyBPU1guIE1h
Y3JvcyBhcmUKLS8vIHByb2JsZW1hdGljIGJlY2F1c2UgaWYgdGhlIGFyZ3VtZW50IGhhcyBzaWRl
LWVmZmVjdHMgdGhleSB3aWxsIGJlIHJlcGVhdGVkbHkKLS8vIGV2YWx1YXRlZC4gVGhpcyBpcyB1
bmxpa2VseSB0byBzaG93IHVwIGluIHJlYWwgc2hhZGVycywgYnV0IGlzIHNvbWV0aGluZyB0bwot
Ly8gY29uc2lkZXIuCi1jb25zdCBjaGFyKiBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhTb3VyY2Vb
XSA9IHsKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgY29zKGZsb2F0KSIsCi0gICAgIiNl
cnJvciBubyBlbXVsYXRpb24gZm9yIGNvcyh2ZWMyKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRp
b24gZm9yIGNvcyh2ZWMzKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGNvcyh2ZWM0
KSIsCi0KLSAgICAiI2RlZmluZSB3ZWJnbF9kaXN0YW5jZV9lbXUoeCwgeSkgKCh4KSA+PSAoeSkg
PyAoeCkgLSAoeSkgOiAoeSkgLSAoeCkpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Ig
ZGlzdGFuY2UodmVjMiwgdmVjMikiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkaXN0
YW5jZSh2ZWMzLCB2ZWMzKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRpc3RhbmNl
KHZlYzQsIHZlYzQpIiwKLQotICAgICIjZGVmaW5lIHdlYmdsX2RvdF9lbXUoeCwgeSkgKCh4KSAq
ICh5KSkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjMiwgdmVjMikiLAot
ICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjMywgdmVjMykiLAotICAgICIjZXJy
b3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjNCwgdmVjNCkiLAotCi0gICAgIiNkZWZpbmUgd2Vi
Z2xfbGVuZ3RoX2VtdSh4KSAoKHgpID49IDAuMCA/ICh4KSA6IC0oeCkpIiwKLSAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3RoKHZlYzIpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlv
biBmb3IgbGVuZ3RoKHZlYzMpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3Ro
KHZlYzQpIiwKLQotICAgICIjZGVmaW5lIHdlYmdsX25vcm1hbGl6ZV9lbXUoeCkgKCh4KSA9PSAw
LjAgPyAwLjAgOiAoKHgpID4gMC4wID8gMS4wIDogLTEuMCkpIiwKLSAgICAiI2Vycm9yIG5vIGVt
dWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzIpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBm
b3Igbm9ybWFsaXplKHZlYzMpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFs
aXplKHZlYzQpIiwKLQotICAgICIjZGVmaW5lIHdlYmdsX3JlZmxlY3RfZW11KEksIE4pICgoSSkg
LSAyLjAgKiAoTikgKiAoSSkgKiAoTikpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Ig
cmVmbGVjdCh2ZWMyLCB2ZWMyKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIHJlZmxl
Y3QodmVjMywgdmVjMykiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciByZWZsZWN0KHZl
YzQsIHZlYzQpIgotfTsKLQotY29uc3QgY2hhcioga0Z1bmN0aW9uRW11bGF0aW9uRnJhZ21lbnRT
b3VyY2VbXSA9IHsKLSAgICAid2ViZ2xfZW11X3ByZWNpc2lvbiBmbG9hdCB3ZWJnbF9jb3NfZW11
KHdlYmdsX2VtdV9wcmVjaXNpb24gZmxvYXQgYSkgeyByZXR1cm4gY29zKGEpOyB9IiwKLSAgICAi
d2ViZ2xfZW11X3ByZWNpc2lvbiB2ZWMyIHdlYmdsX2Nvc19lbXUod2ViZ2xfZW11X3ByZWNpc2lv
biB2ZWMyIGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCi0gICAgIndlYmdsX2VtdV9wcmVjaXNpb24g
dmVjMyB3ZWJnbF9jb3NfZW11KHdlYmdsX2VtdV9wcmVjaXNpb24gdmVjMyBhKSB7IHJldHVybiBj
b3MoYSk7IH0iLAotICAgICJ3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzQgd2ViZ2xfY29zX2VtdSh3
ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzQgYSkgeyByZXR1cm4gY29zKGEpOyB9IiwKLQotICAgICIj
ZGVmaW5lIHdlYmdsX2Rpc3RhbmNlX2VtdSh4LCB5KSAoKHgpID49ICh5KSA/ICh4KSAtICh5KSA6
ICh5KSAtICh4KSkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkaXN0YW5jZSh2ZWMy
LCB2ZWMyKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRpc3RhbmNlKHZlYzMsIHZl
YzMpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UodmVjNCwgdmVjNCki
LAotCi0gICAgIiNkZWZpbmUgd2ViZ2xfZG90X2VtdSh4LCB5KSAoKHgpICogKHkpKSIsCi0gICAg
IiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRvdCh2ZWMyLCB2ZWMyKSIsCi0gICAgIiNlcnJvciBu
byBlbXVsYXRpb24gZm9yIGRvdCh2ZWMzLCB2ZWMzKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRp
b24gZm9yIGRvdCh2ZWM0LCB2ZWM0KSIsCi0KLSAgICAiI2RlZmluZSB3ZWJnbF9sZW5ndGhfZW11
KHgpICgoeCkgPj0gMC4wID8gKHgpIDogLSh4KSkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9u
IGZvciBsZW5ndGgodmVjMikiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBsZW5ndGgo
dmVjMykiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBsZW5ndGgodmVjNCkiLAotCi0g
ICAgIiNkZWZpbmUgd2ViZ2xfbm9ybWFsaXplX2VtdSh4KSAoKHgpID09IDAuMCA/IDAuMCA6ICgo
eCkgPiAwLjAgPyAxLjAgOiAtMS4wKSkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBu
b3JtYWxpemUodmVjMikiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBub3JtYWxpemUo
dmVjMykiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBub3JtYWxpemUodmVjNCkiLAot
Ci0gICAgIiNkZWZpbmUgd2ViZ2xfcmVmbGVjdF9lbXUoSSwgTikgKChJKSAtIDIuMCAqIChOKSAq
IChJKSAqIChOKSkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciByZWZsZWN0KHZlYzIs
IHZlYzIpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgcmVmbGVjdCh2ZWMzLCB2ZWMz
KSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIHJlZmxlY3QodmVjNCwgdmVjNCkiCi19
OwotCi1jb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbXSA9IHsKLSNpZiBk
ZWZpbmVkKF9fQVBQTEVfXykKLSAgICAvLyBXb3JrIGFyb3VuZCBBVEkgZHJpdmVyIGJ1Z3MgaW4g
TWFjLgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MxCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlv
bkNvczIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMwotICAgIGZhbHNlLCAvLyBURnVuY3Rp
b25Db3M0Ci0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRpc3RhbmNlMV8xCi0gICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkRpc3RhbmNlMl8yCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlM18z
Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlNF80Ci0gICAgdHJ1ZSwgIC8vIFRGdW5j
dGlvbkRvdDFfMQotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3QyXzIKLSAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uRG90M18zCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDRfNAotICAgIHRydWUs
ICAvLyBURnVuY3Rpb25MZW5ndGgxCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKLSAg
ICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5n
dGg0Ci0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTEKLSAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uTm9ybWFsaXplMgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUzCi0gICAg
ZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTQKLSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uUmVm
bGVjdDFfMQotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0Ml8yCi0gICAgZmFsc2UsIC8v
IFRGdW5jdGlvblJlZmxlY3QzXzMKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDRfNAot
I2Vsc2UKLSAgICAvLyBXb3JrIGFyb3VuZCBEM0QgZHJpdmVyIGJ1ZyBpbiBXaW4uCi0gICAgZmFs
c2UsIC8vIFRGdW5jdGlvbkNvczEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMgotICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25Db3MzCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczQKLSAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2UxXzEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlz
dGFuY2UyXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2UzXzMKLSAgICBmYWxzZSwg
Ly8gVEZ1bmN0aW9uRGlzdGFuY2U0XzQKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90MV8xCi0g
ICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDJfMgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3Qz
XzMKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90NF80Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlv
bkxlbmd0aDEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMgotICAgIGZhbHNlLCAvLyBU
RnVuY3Rpb25MZW5ndGgzCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDQKLSAgICBmYWxz
ZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMQotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxp
emUyCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTMKLSAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uTm9ybWFsaXplNAotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0MV8xCi0gICAg
ZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QyXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVm
bGVjdDNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0NF80Ci0jZW5kaWYKLSAgICBm
YWxzZSAgLy8gVEZ1bmN0aW9uVW5rbm93bgotfTsKLQotY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVs
YXRpb25GcmFnbWVudE1hc2tbXSA9IHsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLSAgICAvLyBX
b3JrIGFyb3VuZCBBVEkgZHJpdmVyIGJ1Z3MgaW4gTWFjLgotICAgIHRydWUsICAvLyBURnVuY3Rp
b25Db3MxCi0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczIKLSAgICB0cnVlLCAgLy8gVEZ1bmN0
aW9uQ29zMwotICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3M0Ci0gICAgdHJ1ZSwgIC8vIFRGdW5j
dGlvbkRpc3RhbmNlMV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlMl8yCi0gICAg
ZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlM18zCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRp
c3RhbmNlNF80Ci0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRvdDFfMQotICAgIGZhbHNlLCAvLyBU
RnVuY3Rpb25Eb3QyXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90M18zCi0gICAgZmFsc2Us
IC8vIFRGdW5jdGlvbkRvdDRfNAotICAgIHRydWUsICAvLyBURnVuY3Rpb25MZW5ndGgxCi0gICAg
ZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3Ro
MwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0Ci0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlv
bk5vcm1hbGl6ZTEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMgotICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25Ob3JtYWxpemUzCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6
ZTQKLSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uUmVmbGVjdDFfMQotICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25SZWZsZWN0Ml8yCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QzXzMKLSAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDRfNAotI2Vsc2UKLSAgICAvLyBXb3JrIGFyb3VuZCBE
M0QgZHJpdmVyIGJ1ZyBpbiBXaW4uCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczEKLSAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uQ29zMgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MzCi0gICAg
ZmFsc2UsIC8vIFRGdW5jdGlvbkNvczQKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2Ux
XzEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2UyXzIKLSAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uRGlzdGFuY2UzXzMKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2U0XzQKLSAg
ICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90MV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDJf
MgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3QzXzMKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
RG90NF80Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDEKLSAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uTGVuZ3RoMgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgzCi0gICAgZmFsc2Us
IC8vIFRGdW5jdGlvbkxlbmd0aDQKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMQot
ICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUyCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlv
bk5vcm1hbGl6ZTMKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplNAotICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25SZWZsZWN0MV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3Qy
XzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDNfMwotICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25SZWZsZWN0NF80Ci0jZW5kaWYKLSAgICBmYWxzZSAgLy8gVEZ1bmN0aW9uVW5rbm93bgot
fTsKLQotY2xhc3MgQnVpbHRJbkZ1bmN0aW9uRW11bGF0aW9uTWFya2VyIDogcHVibGljIFRJbnRl
cm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdGlvbk1hcmtl
cihCdWlsdEluRnVuY3Rpb25FbXVsYXRvciYgZW11bGF0b3IpCi0gICAgICAgIDogbUVtdWxhdG9y
KGVtdWxhdG9yKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRVbmFyeShW
aXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQotICAgIHsKLSAgICAgICAgaWYgKHZpc2l0
ID09IFByZVZpc2l0KSB7Ci0gICAgICAgICAgICBib29sIG5lZWRUb0VtdWxhdGUgPSBtRW11bGF0
b3IuU2V0RnVuY3Rpb25DYWxsZWQoCi0gICAgICAgICAgICAgICAgbm9kZS0+Z2V0T3AoKSwgbm9k
ZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCkpOwotICAgICAgICAgICAgaWYgKG5lZWRUb0VtdWxh
dGUpCi0gICAgICAgICAgICAgICAgbm9kZS0+c2V0VXNlRW11bGF0ZWRGdW5jdGlvbigpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCB2
aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKLSAgICB7
Ci0gICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkgewotICAgICAgICAgICAgLy8gSGVyZSB3
ZSBoYW5kbGUgYWxsIHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgaW5zdGVhZCBvZiB0aGUgb25lcyB3
ZQotICAgICAgICAgICAgLy8gY3VycmVudGx5IGlkZW50aWZpZWQgYXMgcHJvYmxlbWF0aWMuCi0g
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNl
IEVPcExlc3NUaGFuOgotICAgICAgICAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46Ci0gICAg
ICAgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgotICAgICAgICAgICAgICAgIGNhc2Ug
RU9wR3JlYXRlclRoYW5FcXVhbDoKLSAgICAgICAgICAgICAgICBjYXNlIEVPcFZlY3RvckVxdWFs
OgotICAgICAgICAgICAgICAgIGNhc2UgRU9wVmVjdG9yTm90RXF1YWw6Ci0gICAgICAgICAgICAg
ICAgY2FzZSBFT3BNb2Q6Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BQb3c6Ci0gICAgICAgICAg
ICAgICAgY2FzZSBFT3BBdGFuOgotICAgICAgICAgICAgICAgIGNhc2UgRU9wTWluOgotICAgICAg
ICAgICAgICAgIGNhc2UgRU9wTWF4OgotICAgICAgICAgICAgICAgIGNhc2UgRU9wQ2xhbXA6Ci0g
ICAgICAgICAgICAgICAgY2FzZSBFT3BNaXg6Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BTdGVw
OgotICAgICAgICAgICAgICAgIGNhc2UgRU9wU21vb3RoU3RlcDoKLSAgICAgICAgICAgICAgICBj
YXNlIEVPcERpc3RhbmNlOgotICAgICAgICAgICAgICAgIGNhc2UgRU9wRG90OgotICAgICAgICAg
ICAgICAgIGNhc2UgRU9wQ3Jvc3M6Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BGYWNlRm9yd2Fy
ZDoKLSAgICAgICAgICAgICAgICBjYXNlIEVPcFJlZmxlY3Q6Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBFT3BSZWZyYWN0OgotICAgICAgICAgICAgICAgIGNhc2UgRU9wTXVsOgotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBjb25zdCBUSW50
ZXJtU2VxdWVuY2UmIHNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKLSAgICAgICAgICAg
IC8vIFJpZ2h0IG5vdyB3ZSBvbmx5IGhhbmRsZSBidWlsdC1pbiBmdW5jdGlvbnMgd2l0aCB0d28g
cGFyYW1ldGVycy4KLSAgICAgICAgICAgIGlmIChzZXF1ZW5jZS5zaXplKCkgIT0gMikKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogcGFyYW0x
ID0gc2VxdWVuY2VbMF0tPmdldEFzVHlwZWQoKTsKLSAgICAgICAgICAgIFRJbnRlcm1UeXBlZCog
cGFyYW0yID0gc2VxdWVuY2VbMV0tPmdldEFzVHlwZWQoKTsKLSAgICAgICAgICAgIGlmICghcGFy
YW0xIHx8ICFwYXJhbTIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
ICBib29sIG5lZWRUb0VtdWxhdGUgPSBtRW11bGF0b3IuU2V0RnVuY3Rpb25DYWxsZWQoCi0gICAg
ICAgICAgICAgICAgbm9kZS0+Z2V0T3AoKSwgcGFyYW0xLT5nZXRUeXBlKCksIHBhcmFtMi0+Z2V0
VHlwZSgpKTsKLSAgICAgICAgICAgIGlmIChuZWVkVG9FbXVsYXRlKQotICAgICAgICAgICAgICAg
IG5vZGUtPnNldFVzZUVtdWxhdGVkRnVuY3Rpb24oKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3Im
IG1FbXVsYXRvcjsKLX07Ci0KLX0gIC8vIGFub255bW91cyBuYW1lcHNhY2UKLQotQnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3I6OkJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yKFNoU2hhZGVyVHlwZSBzaGFk
ZXJUeXBlKQotewotICAgIGlmIChzaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikgewot
ICAgICAgICBtRnVuY3Rpb25NYXNrID0ga0Z1bmN0aW9uRW11bGF0aW9uRnJhZ21lbnRNYXNrOwot
ICAgICAgICBtRnVuY3Rpb25Tb3VyY2UgPSBrRnVuY3Rpb25FbXVsYXRpb25GcmFnbWVudFNvdXJj
ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBtRnVuY3Rpb25NYXNrID0ga0Z1bmN0aW9uRW11bGF0
aW9uVmVydGV4TWFzazsKLSAgICAgICAgbUZ1bmN0aW9uU291cmNlID0ga0Z1bmN0aW9uRW11bGF0
aW9uVmVydGV4U291cmNlOwotICAgIH0KLX0KLQotYm9vbCBCdWlsdEluRnVuY3Rpb25FbXVsYXRv
cjo6U2V0RnVuY3Rpb25DYWxsZWQoCi0gICAgVE9wZXJhdG9yIG9wLCBjb25zdCBUVHlwZSYgcGFy
YW0pCi17Ci0gICAgVEJ1aWx0SW5GdW5jdGlvbiBmdW5jdGlvbiA9IElkZW50aWZ5RnVuY3Rpb24o
b3AsIHBhcmFtKTsKLSAgICByZXR1cm4gU2V0RnVuY3Rpb25DYWxsZWQoZnVuY3Rpb24pOwotfQot
Ci1ib29sIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpTZXRGdW5jdGlvbkNhbGxlZCgKLSAgICBU
T3BlcmF0b3Igb3AsIGNvbnN0IFRUeXBlJiBwYXJhbTEsIGNvbnN0IFRUeXBlJiBwYXJhbTIpCi17
Ci0gICAgVEJ1aWx0SW5GdW5jdGlvbiBmdW5jdGlvbiA9IElkZW50aWZ5RnVuY3Rpb24ob3AsIHBh
cmFtMSwgcGFyYW0yKTsKLSAgICByZXR1cm4gU2V0RnVuY3Rpb25DYWxsZWQoZnVuY3Rpb24pOwot
fQotCi1ib29sIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpTZXRGdW5jdGlvbkNhbGxlZCgKLSAg
ICBCdWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6VEJ1aWx0SW5GdW5jdGlvbiBmdW5jdGlvbikgewot
ICAgIGlmIChmdW5jdGlvbiA9PSBURnVuY3Rpb25Vbmtub3duIHx8IG1GdW5jdGlvbk1hc2tbZnVu
Y3Rpb25dID09IGZhbHNlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtRnVuY3Rpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtRnVuY3Rp
b25zW2ldID09IGZ1bmN0aW9uKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAg
IG1GdW5jdGlvbnMucHVzaF9iYWNrKGZ1bmN0aW9uKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBCdWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6T3V0cHV0RW11bGF0ZWRGdW5jdGlvbkRlZmlu
aXRpb24oCi0gICAgVEluZm9TaW5rQmFzZSYgb3V0LCBib29sIHdpdGhQcmVjaXNpb24pIGNvbnN0
Ci17Ci0gICAgaWYgKG1GdW5jdGlvbnMuc2l6ZSgpID09IDApCi0gICAgICAgIHJldHVybjsKLSAg
ICBvdXQgPDwgIi8vIEJFR0lOOiBHZW5lcmF0ZWQgY29kZSBmb3IgYnVpbHQtaW4gZnVuY3Rpb24g
ZW11bGF0aW9uXG5cbiI7Ci0gICAgaWYgKHdpdGhQcmVjaXNpb24pIHsKLSAgICAgICAgb3V0IDw8
ICIjaWYgZGVmaW5lZChHTF9GUkFHTUVOVF9QUkVDSVNJT05fSElHSClcbiIKLSAgICAgICAgICAg
IDw8ICIjZGVmaW5lIHdlYmdsX2VtdV9wcmVjaXNpb24gaGlnaHBcbiIKLSAgICAgICAgICAgIDw8
ICIjZWxzZVxuIgotICAgICAgICAgICAgPDwgIiNkZWZpbmUgd2ViZ2xfZW11X3ByZWNpc2lvbiBt
ZWRpdW1wXG4iCi0gICAgICAgICAgICA8PCAiI2VuZGlmXG5cbiI7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgb3V0IDw8ICIjZGVmaW5lIHdlYmdsX2VtdV9wcmVjaXNpb25cblxuIjsKLSAgICB9Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtRnVuY3Rpb25zLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIG91dCA8PCBtRnVuY3Rpb25Tb3VyY2VbbUZ1bmN0aW9uc1tpXV0gPDwgIlxuXG4iOwotICAg
IH0KLSAgICBvdXQgPDwgIi8vIEVORDogR2VuZXJhdGVkIGNvZGUgZm9yIGJ1aWx0LWluIGZ1bmN0
aW9uIGVtdWxhdGlvblxuXG4iOwotfQotCi1CdWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6VEJ1aWx0
SW5GdW5jdGlvbgotQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OklkZW50aWZ5RnVuY3Rpb24oCi0g
ICAgVE9wZXJhdG9yIG9wLCBjb25zdCBUVHlwZSYgcGFyYW0pCi17Ci0gICAgaWYgKHBhcmFtLmdl
dE5vbWluYWxTaXplKCkgPiA0KQotICAgICAgICByZXR1cm4gVEZ1bmN0aW9uVW5rbm93bjsKLSAg
ICB1bnNpZ25lZCBpbnQgZnVuY3Rpb24gPSBURnVuY3Rpb25Vbmtub3duOwotICAgIHN3aXRjaCAo
b3ApIHsKLSAgICAgICAgY2FzZSBFT3BDb3M6Ci0gICAgICAgICAgICBmdW5jdGlvbiA9IFRGdW5j
dGlvbkNvczE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BMZW5ndGg6Ci0g
ICAgICAgICAgICBmdW5jdGlvbiA9IFRGdW5jdGlvbkxlbmd0aDE7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBFT3BOb3JtYWxpemU6Ci0gICAgICAgICAgICBmdW5jdGlvbiA9IFRG
dW5jdGlvbk5vcm1hbGl6ZTE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoZnVuY3Rpb24gPT0gVEZ1bmN0aW9u
VW5rbm93bikKLSAgICAgICAgcmV0dXJuIFRGdW5jdGlvblVua25vd247Ci0gICAgaWYgKHBhcmFt
LmlzVmVjdG9yKCkpCi0gICAgICAgIGZ1bmN0aW9uICs9IHBhcmFtLmdldE5vbWluYWxTaXplKCkg
LSAxOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUQnVpbHRJbkZ1bmN0aW9uPihmdW5jdGlvbik7
Ci19Ci0KLUJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpUQnVpbHRJbkZ1bmN0aW9uCi1CdWlsdElu
RnVuY3Rpb25FbXVsYXRvcjo6SWRlbnRpZnlGdW5jdGlvbigKLSAgICBUT3BlcmF0b3Igb3AsIGNv
bnN0IFRUeXBlJiBwYXJhbTEsIGNvbnN0IFRUeXBlJiBwYXJhbTIpCi17Ci0gICAgLy8gUmlnaHQg
bm93IGZvciBhbGwgdGhlIGVtdWxhdGVkIGZ1bmN0aW9ucyB3aXRoIHR3byBwYXJhbWV0ZXJzLCB0
aGUgdHdvCi0gICAgLy8gcGFyYW1ldGVycyBoYXZlIHRoZSBzYW1lIHR5cGUuCi0gICAgaWYgKHBh
cmFtMS5pc1ZlY3RvcigpICE9IHBhcmFtMi5pc1ZlY3RvcigpIHx8Ci0gICAgICAgIHBhcmFtMS5n
ZXROb21pbmFsU2l6ZSgpICE9IHBhcmFtMi5nZXROb21pbmFsU2l6ZSgpIHx8Ci0gICAgICAgIHBh
cmFtMS5nZXROb21pbmFsU2l6ZSgpID4gNCkKLSAgICAgICAgcmV0dXJuIFRGdW5jdGlvblVua25v
d247Ci0KLSAgICB1bnNpZ25lZCBpbnQgZnVuY3Rpb24gPSBURnVuY3Rpb25Vbmtub3duOwotICAg
IHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBFT3BEaXN0YW5jZToKLSAgICAgICAgICAgIGZ1
bmN0aW9uID0gVEZ1bmN0aW9uRGlzdGFuY2UxXzE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBFT3BEb3Q6Ci0gICAgICAgICAgICBmdW5jdGlvbiA9IFRGdW5jdGlvbkRvdDFfMTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFJlZmxlY3Q6Ci0gICAgICAgICAg
ICBmdW5jdGlvbiA9IFRGdW5jdGlvblJlZmxlY3QxXzE7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoZnVuY3Rp
b24gPT0gVEZ1bmN0aW9uVW5rbm93bikKLSAgICAgICAgcmV0dXJuIFRGdW5jdGlvblVua25vd247
Ci0gICAgaWYgKHBhcmFtMS5pc1ZlY3RvcigpKQotICAgICAgICBmdW5jdGlvbiArPSBwYXJhbTEu
Z2V0Tm9taW5hbFNpemUoKSAtIDE7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFRCdWlsdEluRnVu
Y3Rpb24+KGZ1bmN0aW9uKTsKLX0KLQotdm9pZCBCdWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6TWFy
a0J1aWx0SW5GdW5jdGlvbnNGb3JFbXVsYXRpb24oCi0gICAgVEludGVybU5vZGUqIHJvb3QpCi17
Ci0gICAgQVNTRVJUKHJvb3QpOwotCi0gICAgQnVpbHRJbkZ1bmN0aW9uRW11bGF0aW9uTWFya2Vy
IG1hcmtlcigqdGhpcyk7Ci0gICAgcm9vdC0+dHJhdmVyc2UoJm1hcmtlcik7Ci19Ci0KLXZvaWQg
QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OkNsZWFudXAoKQotewotICAgIG1GdW5jdGlvbnMuY2xl
YXIoKTsKLX0KLQotLy9zdGF0aWMKLVRTdHJpbmcgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6Okdl
dEVtdWxhdGVkRnVuY3Rpb25OYW1lKAotICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUpCi17Ci0gICAg
QVNTRVJUKG5hbWVbbmFtZS5sZW5ndGgoKSAtIDFdID09ICcoJyk7Ci0gICAgcmV0dXJuICJ3ZWJn
bF8iICsgbmFtZS5zdWJzdHIoMCwgbmFtZS5sZW5ndGgoKSAtIDEpICsgIl9lbXUoIjsKLX0KLQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0J1aWx0SW5G
dW5jdGlvbkVtdWxhdG9yLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MGQ5MDRmNDFkMDkxNmNmZjllOGQwYzA1ODlmOWVkODlkMGVjMDM4Mi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaAorKysgL2Rldi9udWxsCkBAIC0x
LDkzICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTElFUl9CVUlMVF9JTl9G
VU5DVElPTl9FTVVMQVRPUl9IXwotI2RlZmluZSBDT01QSUxJRVJfQlVJTFRfSU5fRlVOQ1RJT05f
RU1VTEFUT1JfSF8KLQotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgotCi0jaW5jbHVk
ZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKLSNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUu
aCIKLQotLy8KLS8vIFRoaXMgY2xhc3MgZGVjaWRlcyB3aGljaCBidWlsdC1pbiBmdW5jdGlvbnMg
bmVlZCB0byBiZSByZXBsYWNlZCB3aXRoIHRoZQotLy8gZW11bGF0ZWQgb25lcy4KLS8vIEl0J3Mg
b25seSBhIHdvcmthcm91bmQgZm9yIE9wZW5HTCBkcml2ZXIgYnVncywgYW5kIGlzbid0IG5lZWRl
ZCBpbiBnZW5lcmFsLgotLy8KLWNsYXNzIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yIHsKLXB1Ymxp
YzoKLSAgICBCdWlsdEluRnVuY3Rpb25FbXVsYXRvcihTaFNoYWRlclR5cGUgc2hhZGVyVHlwZSk7
Ci0gICAgLy8gUmVjb3JkcyB0aGF0IGEgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBzaGFkZXIg
YW5kIG1pZ2h0IG5lZWRzIHRvIGJlCi0gICAgLy8gZW11bGF0ZWQuICBJZiB0aGUgZnVuY3Rpb24n
cyBncm91cCBpcyBub3QgaW4gbUZ1bmN0aW9uR3JvdXBGaWx0ZXIsIHRoaXMKLSAgICAvLyBiZWNv
bWVzIGFuIG5vLW9wLgotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZnVuY3Rpb24gY2FsbCBu
ZWVkcyB0byBiZSByZXBsYWNlZCB3aXRoIGFuIGVtdWxhdGVkCi0gICAgLy8gb25lLgotICAgIGJv
b2wgU2V0RnVuY3Rpb25DYWxsZWQoVE9wZXJhdG9yIG9wLCBjb25zdCBUVHlwZSYgcGFyYW0pOwot
ICAgIGJvb2wgU2V0RnVuY3Rpb25DYWxsZWQoCi0gICAgICAgIFRPcGVyYXRvciBvcCwgY29uc3Qg
VFR5cGUmIHBhcmFtMSwgY29uc3QgVFR5cGUmIHBhcmFtMik7Ci0KLSAgICAvLyBPdXRwdXQgZnVu
Y3Rpb24gZW11bGF0aW9uIGRlZmluaXRpb24uICBUaGlzIHNob3VsZCBiZSBiZWZvcmUgYW55IG90
aGVyCi0gICAgLy8gc2hhZGVyIHNvdXJjZS4KLSAgICB2b2lkIE91dHB1dEVtdWxhdGVkRnVuY3Rp
b25EZWZpbml0aW9uKFRJbmZvU2lua0Jhc2UmIG91dCwgYm9vbCB3aXRoUHJlY2lzaW9uKSBjb25z
dDsKLQotICAgIHZvaWQgTWFya0J1aWx0SW5GdW5jdGlvbnNGb3JFbXVsYXRpb24oVEludGVybU5v
ZGUqIHJvb3QpOwotCi0gICAgdm9pZCBDbGVhbnVwKCk7Ci0KLSAgICAvLyAibmFtZSgiIGJlY29t
ZXMgIndlYmdsX25hbWVfZW11KCIuCi0gICAgc3RhdGljIFRTdHJpbmcgR2V0RW11bGF0ZWRGdW5j
dGlvbk5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSk7Ci0KLXByaXZhdGU6Ci0gICAgLy8KLSAgICAv
LyBCdWlsdC1pbiBmdW5jdGlvbnMuCi0gICAgLy8KLSAgICBlbnVtIFRCdWlsdEluRnVuY3Rpb24g
ewotICAgICAgICBURnVuY3Rpb25Db3MxID0gMCwgIC8vIGZsb2F0IGNvcyhmbG9hdCk7Ci0gICAg
ICAgIFRGdW5jdGlvbkNvczIsICAvLyB2ZWMyIGNvcyh2ZWMyKTsKLSAgICAgICAgVEZ1bmN0aW9u
Q29zMywgIC8vIHZlYzMgY29zKHZlYzMpOwotICAgICAgICBURnVuY3Rpb25Db3M0LCAgLy8gdmVj
NCBjb3ModmVjNCk7Ci0KLSAgICAgICAgVEZ1bmN0aW9uRGlzdGFuY2UxXzEsICAvLyBmbG9hdCBk
aXN0YW5jZShmbG9hdCwgZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25EaXN0YW5jZTJfMiwgIC8v
IHZlYzIgZGlzdGFuY2UodmVjMiwgdmVjMik7Ci0gICAgICAgIFRGdW5jdGlvbkRpc3RhbmNlM18z
LCAgLy8gdmVjMyBkaXN0YW5jZSh2ZWMzLCB2ZWMzKTsKLSAgICAgICAgVEZ1bmN0aW9uRGlzdGFu
Y2U0XzQsICAvLyB2ZWM0IGRpc3RhbmNlKHZlYzQsIHZlYzQpOwotCi0gICAgICAgIFRGdW5jdGlv
bkRvdDFfMSwgIC8vIGZsb2F0IGRvdChmbG9hdCwgZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25E
b3QyXzIsICAvLyB2ZWMyIGRvdCh2ZWMyLCB2ZWMyKTsKLSAgICAgICAgVEZ1bmN0aW9uRG90M18z
LCAgLy8gdmVjMyBkb3QodmVjMywgdmVjMyk7Ci0gICAgICAgIFRGdW5jdGlvbkRvdDRfNCwgIC8v
IHZlYzQgZG90KHZlYzQsIHZlYzQpOwotCi0gICAgICAgIFRGdW5jdGlvbkxlbmd0aDEsICAvLyBm
bG9hdCBsZW5ndGgoZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25MZW5ndGgyLCAgLy8gZmxvYXQg
bGVuZ3RoKHZlYzIpOwotICAgICAgICBURnVuY3Rpb25MZW5ndGgzLCAgLy8gZmxvYXQgbGVuZ3Ro
KHZlYzMpOwotICAgICAgICBURnVuY3Rpb25MZW5ndGg0LCAgLy8gZmxvYXQgbGVuZ3RoKHZlYzQp
OwotCi0gICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTEsICAvLyBmbG9hdCBub3JtYWxpemUoZmxv
YXQpOwotICAgICAgICBURnVuY3Rpb25Ob3JtYWxpemUyLCAgLy8gdmVjMiBub3JtYWxpemUodmVj
Mik7Ci0gICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTMsICAvLyB2ZWMzIG5vcm1hbGl6ZSh2ZWMz
KTsKLSAgICAgICAgVEZ1bmN0aW9uTm9ybWFsaXplNCwgIC8vIHZlYzQgbm9ybWFsaXplKHZlYzQp
OwotCi0gICAgICAgIFRGdW5jdGlvblJlZmxlY3QxXzEsICAvLyBmbG9hdCByZWZsZWN0KGZsb2F0
LCBmbG9hdCk7Ci0gICAgICAgIFRGdW5jdGlvblJlZmxlY3QyXzIsICAvLyB2ZWMyIHJlZmxlY3Qo
dmVjMiwgdmVjMik7Ci0gICAgICAgIFRGdW5jdGlvblJlZmxlY3QzXzMsICAvLyB2ZWMzIHJlZmxl
Y3QodmVjMywgdmVjMyk7Ci0gICAgICAgIFRGdW5jdGlvblJlZmxlY3Q0XzQsICAvLyB2ZWM0IHJl
ZmxlY3QodmVjNCwgdmVjNCk7Ci0KLSAgICAgICAgVEZ1bmN0aW9uVW5rbm93bgotICAgIH07Ci0K
LSAgICBUQnVpbHRJbkZ1bmN0aW9uIElkZW50aWZ5RnVuY3Rpb24oVE9wZXJhdG9yIG9wLCBjb25z
dCBUVHlwZSYgcGFyYW0pOwotICAgIFRCdWlsdEluRnVuY3Rpb24gSWRlbnRpZnlGdW5jdGlvbigK
LSAgICAgICAgVE9wZXJhdG9yIG9wLCBjb25zdCBUVHlwZSYgcGFyYW0xLCBjb25zdCBUVHlwZSYg
cGFyYW0yKTsKLQotICAgIGJvb2wgU2V0RnVuY3Rpb25DYWxsZWQoVEJ1aWx0SW5GdW5jdGlvbiBm
dW5jdGlvbik7Ci0KLSAgICBzdGQ6OnZlY3RvcjxUQnVpbHRJbkZ1bmN0aW9uPiBtRnVuY3Rpb25z
OwotCi0gICAgY29uc3QgYm9vbCogbUZ1bmN0aW9uTWFzazsgIC8vIGEgYm9vbGVhbiBmbGFnIGZv
ciBlYWNoIGZ1bmN0aW9uLgotICAgIGNvbnN0IGNoYXIqKiBtRnVuY3Rpb25Tb3VyY2U7Ci19Owot
Ci0jZW5kaWYgIC8vIENPTVBJTElFUl9CVUlMVF9JTl9GVU5DVElPTl9FTVVMQVRPUl9IXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW4uY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW4uY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGYyMWI4NzYxNzNhMzE0YzA4MzhmMjczZTIyYmY3
NTU2NzRhZGQzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db2RlR2VuLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJj
b21waWxlci9UcmFuc2xhdG9yRVNTTC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1RyYW5zbGF0b3JH
TFNMLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuaCIKLQotLy8KLS8vIFRo
aXMgZnVuY3Rpb24gbXVzdCBiZSBwcm92aWRlZCB0byBjcmVhdGUgdGhlIGFjdHVhbAotLy8gY29t
cGlsZSBvYmplY3QgdXNlZCBieSBoaWdoZXIgbGV2ZWwgY29kZS4gIEl0IHJldHVybnMKLS8vIGEg
c3ViY2xhc3Mgb2YgVENvbXBpbGVyLgotLy8KLVRDb21waWxlciogQ29uc3RydWN0Q29tcGlsZXIo
Ci0gICAgU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBTaFNoYWRlck91dHB1
dCBvdXRwdXQpCi17Ci0gICAgc3dpdGNoIChvdXRwdXQpIHsKLSAgICAgIGNhc2UgU0hfRVNTTF9P
VVRQVVQ6Ci0gICAgICAgIHJldHVybiBuZXcgVHJhbnNsYXRvckVTU0wodHlwZSwgc3BlYyk7Ci0g
ICAgICBjYXNlIFNIX0dMU0xfT1VUUFVUOgotICAgICAgICByZXR1cm4gbmV3IFRyYW5zbGF0b3JH
TFNMKHR5cGUsIHNwZWMpOwotICAgICAgY2FzZSBTSF9ITFNMOV9PVVRQVVQ6Ci0gICAgICBjYXNl
IFNIX0hMU0wxMV9PVVRQVVQ6Ci0gICAgICAgIHJldHVybiBuZXcgVHJhbnNsYXRvckhMU0wodHlw
ZSwgc3BlYywgb3V0cHV0KTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBOVUxMOwot
ICAgIH0KLX0KLQotLy8KLS8vIERlbGV0ZSB0aGUgY29tcGlsZXIgbWFkZSBieSBDb25zdHJ1Y3RD
b21waWxlcgotLy8KLXZvaWQgRGVsZXRlQ29tcGlsZXIoVENvbXBpbGVyKiBjb21waWxlcikKLXsK
LSAgICBkZWxldGUgY29tcGlsZXI7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvQ29tbW9uLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvQ29tbW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2Zjk0NDBm
ZmYxYjUwYmY5NzI5ZGE2MTcyNTYzMzc0YzlmZmNiZDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0NvbW1vbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLy8KLS8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgotLy8KLQotI2lmbmRlZiBfQ09NTU9OX0lOQ0xVREVEXwotI2RlZmluZSBfQ09NTU9OX0lOQ0xV
REVEXwotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0jaW5jbHVkZSA8c3Ry
aW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImNvbXBpbGVyL1Bvb2xBbGxvYy5o
IgotCi1zdHJ1Y3QgVFNvdXJjZUxvYyB7Ci0gICAgaW50IGZpcnN0X2ZpbGU7Ci0gICAgaW50IGZp
cnN0X2xpbmU7Ci0gICAgaW50IGxhc3RfZmlsZTsKLSAgICBpbnQgbGFzdF9saW5lOwotfTsKLQot
Ly8KLS8vIFB1dCBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFIGluIGJhc2UgY2xhc3NlcyB0byBt
YWtlIHRoZW0gdXNlIHRoaXMgc2NoZW1lLgotLy8KLSNkZWZpbmUgUE9PTF9BTExPQ0FUT1JfTkVX
X0RFTEVURSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzKSB7IHJldHVybiBHZXRHbG9iYWxQ
b29sQWxsb2NhdG9yKCktPmFsbG9jYXRlKHMpOyB9ICAgXAotICAgIHZvaWQqIG9wZXJhdG9yIG5l
dyhzaXplX3QsIHZvaWQgKl9XaGVyZSkgeyByZXR1cm4gKF9XaGVyZSk7IH0gICAgICAgICAgICAg
ICAgICAgIFwKLSAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKikgeyB9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgdm9pZCBvcGVyYXRv
ciBkZWxldGUodm9pZCAqLCB2b2lkICopIHsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHNpemVfdCBzKSB7IHJldHVy
biBHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCktPmFsbG9jYXRlKHMpOyB9IFwKLSAgICB2b2lkKiBv
cGVyYXRvciBuZXdbXShzaXplX3QsIHZvaWQgKl9XaGVyZSkgeyByZXR1cm4gKF9XaGVyZSk7IH0g
ICAgICAgICAgICAgICAgICBcCi0gICAgdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKikgeyB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHZv
aWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCAqLCB2b2lkICopIHsgfQotCi0vLwotLy8gUG9vbCB2
ZXJzaW9uIG9mIHN0cmluZy4KLS8vCi10eXBlZGVmIHBvb2xfYWxsb2NhdG9yPGNoYXI+IFRTdHJp
bmdBbGxvY2F0b3I7Ci10eXBlZGVmIHN0ZDo6YmFzaWNfc3RyaW5nIDxjaGFyLCBzdGQ6OmNoYXJf
dHJhaXRzPGNoYXI+LCBUU3RyaW5nQWxsb2NhdG9yPiBUU3RyaW5nOwotdHlwZWRlZiBzdGQ6OmJh
c2ljX29zdHJpbmdzdHJlYW08Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgVFN0cmluZ0Fs
bG9jYXRvcj4gVFN0cmluZ1N0cmVhbTsKLWlubGluZSBUU3RyaW5nKiBOZXdQb29sVFN0cmluZyhj
b25zdCBjaGFyKiBzKQotewotCXZvaWQqIG1lbW9yeSA9IEdldEdsb2JhbFBvb2xBbGxvY2F0b3Io
KS0+YWxsb2NhdGUoc2l6ZW9mKFRTdHJpbmcpKTsKLQlyZXR1cm4gbmV3KG1lbW9yeSkgVFN0cmlu
ZyhzKTsKLX0KLQotLy8KLS8vIFBlcnNpc3RlbnQgc3RyaW5nIG1lbW9yeS4gIFNob3VsZCBvbmx5
IGJlIHVzZWQgZm9yIHN0cmluZ3MgdGhhdCBzdXJ2aXZlCi0vLyBhY3Jvc3MgY29tcGlsZXMuCi0v
LwotI2RlZmluZSBUUGVyc2lzdFN0cmluZyBzdGQ6OnN0cmluZwotI2RlZmluZSBUUGVyc2lzdFN0
cmluZ1N0cmVhbSBzdGQ6Om9zdHJpbmdzdHJlYW0KLQotLy8KLS8vIFBvb2wgYWxsb2NhdG9yIHZl
cnNpb25zIG9mIHZlY3RvcnMsIGxpc3RzLCBhbmQgbWFwcwotLy8KLXRlbXBsYXRlIDxjbGFzcyBU
PiBjbGFzcyBUVmVjdG9yIDogcHVibGljIHN0ZDo6dmVjdG9yPFQsIHBvb2xfYWxsb2NhdG9yPFQ+
ID4gewotcHVibGljOgotICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjp2ZWN0b3I8VCwgcG9vbF9h
bGxvY2F0b3I8VD4gPjo6c2l6ZV90eXBlIHNpemVfdHlwZTsKLSAgICBUVmVjdG9yKCkgOiBzdGQ6
OnZlY3RvcjxULCBwb29sX2FsbG9jYXRvcjxUPiA+KCkge30KLSAgICBUVmVjdG9yKGNvbnN0IHBv
b2xfYWxsb2NhdG9yPFQ+JiBhKSA6IHN0ZDo6dmVjdG9yPFQsIHBvb2xfYWxsb2NhdG9yPFQ+ID4o
YSkge30KLSAgICBUVmVjdG9yKHNpemVfdHlwZSBpKTogc3RkOjp2ZWN0b3I8VCwgcG9vbF9hbGxv
Y2F0b3I8VD4gPihpKSB7fQotfTsKLQotdGVtcGxhdGUgPGNsYXNzIEssIGNsYXNzIEQsIGNsYXNz
IENNUCA9IHN0ZDo6bGVzczxLPiA+IAotY2xhc3MgVE1hcCA6IHB1YmxpYyBzdGQ6Om1hcDxLLCBE
LCBDTVAsIHBvb2xfYWxsb2NhdG9yPHN0ZDo6cGFpcjxjb25zdCBLLCBEPiA+ID4gewotcHVibGlj
OgotICAgIHR5cGVkZWYgcG9vbF9hbGxvY2F0b3I8c3RkOjpwYWlyPGNvbnN0IEssIEQ+ID4gdEFs
bG9jYXRvcjsKLQotICAgIFRNYXAoKSA6IHN0ZDo6bWFwPEssIEQsIENNUCwgdEFsbG9jYXRvcj4o
KSB7fQotICAgIC8vIHVzZSBjb3JyZWN0IHR3by1zdGFnZSBuYW1lIGxvb2t1cCBzdXBwb3J0ZWQg
aW4gZ2NjIDMuNCBhbmQgYWJvdmUKLSAgICBUTWFwKGNvbnN0IHRBbGxvY2F0b3ImIGEpIDogc3Rk
OjptYXA8SywgRCwgQ01QLCB0QWxsb2NhdG9yPihzdGQ6Om1hcDxLLCBELCBDTVAsIHRBbGxvY2F0
b3I+OjprZXlfY29tcGFyZSgpLCBhKSB7fQotfTsKLQotI2VuZGlmIC8vIF9DT01NT05fSU5DTFVE
RURfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29t
cGlsZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVy
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJiNGVmNjAyNTlkMTk5ZGFlMTEw
MWY4MzEzODYwNzIxOTA1MGQ5My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDUyICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0K
LSNpbmNsdWRlICJjb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oIgotI2luY2x1ZGUg
ImNvbXBpbGVyL0RldGVjdENhbGxEZXB0aC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL0Zvckxvb3BV
bnJvbGwuaCIKLSNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplLmgiCi0jaW5jbHVkZSAiY29t
cGlsZXIvSW5pdGlhbGl6ZUdMUG9zaXRpb24uaCIKLSNpbmNsdWRlICJjb21waWxlci9Jbml0aWFs
aXplUGFyc2VDb250ZXh0LmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFt
ZXMuaCIKLSNpbmNsdWRlICJjb21waWxlci9QYXJzZUNvbnRleHQuaCIKLSNpbmNsdWRlICJjb21w
aWxlci9SZW5hbWVGdW5jdGlvbi5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCi0j
aW5jbHVkZSAiY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0QVNULmgiCi0jaW5jbHVkZSAiY29t
cGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1ZhcmlhYmxl
UGFja2VyLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgi
Ci0jaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCi0j
aW5jbHVkZSAiY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCIK
LSNpbmNsdWRlICJjb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCIK
LSNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIuaCIKLQot
Ym9vbCBpc1dlYkdMQmFzZWRTcGVjKFNoU2hhZGVyU3BlYyBzcGVjKQotewotICAgICByZXR1cm4g
c3BlYyA9PSBTSF9XRUJHTF9TUEVDIHx8IHNwZWMgPT0gU0hfQ1NTX1NIQURFUlNfU1BFQzsKLX0K
LQotbmFtZXNwYWNlIHsKLWNsYXNzIFRTY29wZWRQb29sQWxsb2NhdG9yIHsKLXB1YmxpYzoKLSAg
ICBUU2NvcGVkUG9vbEFsbG9jYXRvcihUUG9vbEFsbG9jYXRvciogYWxsb2NhdG9yKSA6IG1BbGxv
Y2F0b3IoYWxsb2NhdG9yKSB7Ci0gICAgICAgIG1BbGxvY2F0b3ItPnB1c2goKTsKLSAgICAgICAg
U2V0R2xvYmFsUG9vbEFsbG9jYXRvcihtQWxsb2NhdG9yKTsKLSAgICB9Ci0gICAgflRTY29wZWRQ
b29sQWxsb2NhdG9yKCkgewotICAgICAgICBTZXRHbG9iYWxQb29sQWxsb2NhdG9yKE5VTEwpOwot
ICAgICAgICBtQWxsb2NhdG9yLT5wb3AoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgVFBvb2xB
bGxvY2F0b3IqIG1BbGxvY2F0b3I7Ci19OwotCi1jbGFzcyBUU2NvcGVkU3ltYm9sVGFibGVMZXZl
bCB7Ci1wdWJsaWM6Ci0gICAgVFNjb3BlZFN5bWJvbFRhYmxlTGV2ZWwoVFN5bWJvbFRhYmxlKiB0
YWJsZSkgOiBtVGFibGUodGFibGUpIHsKLSAgICAgICAgQVNTRVJUKG1UYWJsZS0+YXRCdWlsdElu
TGV2ZWwoKSk7Ci0gICAgICAgIG1UYWJsZS0+cHVzaCgpOwotICAgIH0KLSAgICB+VFNjb3BlZFN5
bWJvbFRhYmxlTGV2ZWwoKSB7Ci0gICAgICAgIHdoaWxlICghbVRhYmxlLT5hdEJ1aWx0SW5MZXZl
bCgpKQotICAgICAgICAgICAgbVRhYmxlLT5wb3AoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAg
VFN5bWJvbFRhYmxlKiBtVGFibGU7Ci19OwotfSAgLy8gbmFtZXNwYWNlCi0KLVRTaEhhbmRsZUJh
c2U6OlRTaEhhbmRsZUJhc2UoKSB7Ci0gICAgYWxsb2NhdG9yLnB1c2goKTsKLSAgICBTZXRHbG9i
YWxQb29sQWxsb2NhdG9yKCZhbGxvY2F0b3IpOwotfQotCi1UU2hIYW5kbGVCYXNlOjp+VFNoSGFu
ZGxlQmFzZSgpIHsKLSAgICBTZXRHbG9iYWxQb29sQWxsb2NhdG9yKE5VTEwpOwotICAgIGFsbG9j
YXRvci5wb3BBbGwoKTsKLX0KLQotVENvbXBpbGVyOjpUQ29tcGlsZXIoU2hTaGFkZXJUeXBlIHR5
cGUsIFNoU2hhZGVyU3BlYyBzcGVjKQotICAgIDogc2hhZGVyVHlwZSh0eXBlKSwKLSAgICAgIHNo
YWRlclNwZWMoc3BlYyksCi0gICAgICBtYXhVbmlmb3JtVmVjdG9ycygwKSwKLSAgICAgIG1heFZh
cnlpbmdWZWN0b3JzKDApLAotICAgICAgbWF4RXhwcmVzc2lvbkNvbXBsZXhpdHkoMCksCi0gICAg
ICBtYXhDYWxsU3RhY2tEZXB0aCgwKSwKLSAgICAgIGZyYWdtZW50UHJlY2lzaW9uSGlnaChmYWxz
ZSksCi0gICAgICBjbGFtcGluZ1N0cmF0ZWd5KFNIX0NMQU1QX1dJVEhfQ0xBTVBfSU5UUklOU0lD
KSwKLSAgICAgIGJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yKHR5cGUpCi17Ci0gICAgbG9uZ05hbWVN
YXAgPSBMb25nTmFtZU1hcDo6R2V0SW5zdGFuY2UoKTsKLX0KLQotVENvbXBpbGVyOjp+VENvbXBp
bGVyKCkKLXsKLSAgICBBU1NFUlQobG9uZ05hbWVNYXApOwotICAgIGxvbmdOYW1lTWFwLT5SZWxl
YXNlKCk7Ci19Ci0KLWJvb2wgVENvbXBpbGVyOjpJbml0KGNvbnN0IFNoQnVpbHRJblJlc291cmNl
cyYgcmVzb3VyY2VzKQotewotICAgIG1heFVuaWZvcm1WZWN0b3JzID0gKHNoYWRlclR5cGUgPT0g
U0hfVkVSVEVYX1NIQURFUikgPwotICAgICAgICByZXNvdXJjZXMuTWF4VmVydGV4VW5pZm9ybVZl
Y3RvcnMgOgotICAgICAgICByZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9yczsKLSAg
ICBtYXhWYXJ5aW5nVmVjdG9ycyA9IHJlc291cmNlcy5NYXhWYXJ5aW5nVmVjdG9yczsKLSAgICBt
YXhFeHByZXNzaW9uQ29tcGxleGl0eSA9IHJlc291cmNlcy5NYXhFeHByZXNzaW9uQ29tcGxleGl0
eTsKLSAgICBtYXhDYWxsU3RhY2tEZXB0aCA9IHJlc291cmNlcy5NYXhDYWxsU3RhY2tEZXB0aDsK
LQotICAgIFNldEdsb2JhbFBvb2xBbGxvY2F0b3IoJmFsbG9jYXRvcik7Ci0KLSAgICAvLyBHZW5l
cmF0ZSBidWlsdC1pbiBzeW1ib2wgdGFibGUuCi0gICAgaWYgKCFJbml0QnVpbHRJblN5bWJvbFRh
YmxlKHJlc291cmNlcykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBJbml0RXh0ZW5zaW9u
QmVoYXZpb3IocmVzb3VyY2VzLCBleHRlbnNpb25CZWhhdmlvcik7Ci0gICAgZnJhZ21lbnRQcmVj
aXNpb25IaWdoID0gcmVzb3VyY2VzLkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9PSAxOwotCi0gICAg
YXJyYXlCb3VuZHNDbGFtcGVyLlNldENsYW1waW5nU3RyYXRlZ3kocmVzb3VyY2VzLkFycmF5SW5k
ZXhDbGFtcGluZ1N0cmF0ZWd5KTsKLSAgICBjbGFtcGluZ1N0cmF0ZWd5ID0gcmVzb3VyY2VzLkFy
cmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5OwotCi0gICAgaGFzaEZ1bmN0aW9uID0gcmVzb3VyY2Vz
Lkhhc2hGdW5jdGlvbjsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFRDb21waWxlcjo6
Y29tcGlsZShjb25zdCBjaGFyKiBjb25zdCBzaGFkZXJTdHJpbmdzW10sCi0gICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgbnVtU3RyaW5ncywKLSAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBjb21waWxlT3B0aW9ucykKLXsKLSAgICBUU2NvcGVkUG9vbEFsbG9jYXRvciBzY29wZWRBbGxv
YygmYWxsb2NhdG9yKTsKLSAgICBjbGVhclJlc3VsdHMoKTsKLQotICAgIGlmIChudW1TdHJpbmdz
ID09IDApCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gSWYgY29tcGlsaW5nIGZvciBX
ZWJHTCwgdmFsaWRhdGUgbG9vcCBhbmQgaW5kZXhpbmcgYXMgd2VsbC4KLSAgICBpZiAoaXNXZWJH
TEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkKLSAgICAgICAgY29tcGlsZU9wdGlvbnMgfD0gU0hfVkFM
SURBVEVfTE9PUF9JTkRFWElORzsKLQotICAgIC8vIEZpcnN0IHN0cmluZyBpcyBwYXRoIG9mIHNv
dXJjZSBmaWxlIGlmIGZsYWcgaXMgc2V0LiBUaGUgYWN0dWFsIHNvdXJjZSBmb2xsb3dzLgotICAg
IGNvbnN0IGNoYXIqIHNvdXJjZVBhdGggPSBOVUxMOwotICAgIHNpemVfdCBmaXJzdFNvdXJjZSA9
IDA7Ci0gICAgaWYgKGNvbXBpbGVPcHRpb25zICYgU0hfU09VUkNFX1BBVEgpCi0gICAgewotICAg
ICAgICBzb3VyY2VQYXRoID0gc2hhZGVyU3RyaW5nc1swXTsKLSAgICAgICAgKytmaXJzdFNvdXJj
ZTsKLSAgICB9Ci0KLSAgICBUSW50ZXJtZWRpYXRlIGludGVybWVkaWF0ZShpbmZvU2luayk7Ci0g
ICAgVFBhcnNlQ29udGV4dCBwYXJzZUNvbnRleHQoc3ltYm9sVGFibGUsIGV4dGVuc2lvbkJlaGF2
aW9yLCBpbnRlcm1lZGlhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZGVy
VHlwZSwgc2hhZGVyU3BlYywgY29tcGlsZU9wdGlvbnMsIHRydWUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc291cmNlUGF0aCwgaW5mb1NpbmspOwotICAgIHBhcnNlQ29udGV4dC5m
cmFnbWVudFByZWNpc2lvbkhpZ2ggPSBmcmFnbWVudFByZWNpc2lvbkhpZ2g7Ci0gICAgU2V0R2xv
YmFsUGFyc2VDb250ZXh0KCZwYXJzZUNvbnRleHQpOwotCi0gICAgLy8gV2UgcHJlc2VydmUgc3lt
Ym9scyBhdCB0aGUgYnVpbHQtaW4gbGV2ZWwgZnJvbSBjb21waWxlLXRvLWNvbXBpbGUuCi0gICAg
Ly8gU3RhcnQgcHVzaGluZyB0aGUgdXNlci1kZWZpbmVkIHN5bWJvbHMgYXQgZ2xvYmFsIGxldmVs
LgotICAgIFRTY29wZWRTeW1ib2xUYWJsZUxldmVsIHNjb3BlZFN5bWJvbExldmVsKCZzeW1ib2xU
YWJsZSk7Ci0KLSAgICAvLyBQYXJzZSBzaGFkZXIuCi0gICAgYm9vbCBzdWNjZXNzID0KLSAgICAg
ICAgKFBhUGFyc2VTdHJpbmdzKG51bVN0cmluZ3MgLSBmaXJzdFNvdXJjZSwgJnNoYWRlclN0cmlu
Z3NbZmlyc3RTb3VyY2VdLCBOVUxMLCAmcGFyc2VDb250ZXh0KSA9PSAwKSAmJgotICAgICAgICAo
cGFyc2VDb250ZXh0LnRyZWVSb290ICE9IE5VTEwpOwotICAgIGlmIChzdWNjZXNzKSB7Ci0gICAg
ICAgIFRJbnRlcm1Ob2RlKiByb290ID0gcGFyc2VDb250ZXh0LnRyZWVSb290OwotICAgICAgICBz
dWNjZXNzID0gaW50ZXJtZWRpYXRlLnBvc3RQcm9jZXNzKHJvb3QpOwotCi0gICAgICAgIGlmIChz
dWNjZXNzKQotICAgICAgICAgICAgc3VjY2VzcyA9IGRldGVjdENhbGxEZXB0aChyb290LCBpbmZv
U2luaywgKGNvbXBpbGVPcHRpb25zICYgU0hfTElNSVRfQ0FMTF9TVEFDS19ERVBUSCkgIT0gMCk7
Ci0KLSAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfVkFMSURBVEVf
TE9PUF9JTkRFWElORykpCi0gICAgICAgICAgICBzdWNjZXNzID0gdmFsaWRhdGVMaW1pdGF0aW9u
cyhyb290KTsKLQotICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9U
SU1JTkdfUkVTVFJJQ1RJT05TKSkKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSBlbmZvcmNlVGltaW5n
UmVzdHJpY3Rpb25zKHJvb3QsIChjb21waWxlT3B0aW9ucyAmIFNIX0RFUEVOREVOQ1lfR1JBUEgp
ICE9IDApOwotCi0gICAgICAgIGlmIChzdWNjZXNzICYmIHNoYWRlclNwZWMgPT0gU0hfQ1NTX1NI
QURFUlNfU1BFQykKLSAgICAgICAgICAgIHJld3JpdGVDU1NTaGFkZXIocm9vdCk7Ci0KLSAgICAg
ICAgLy8gVW5yb2xsIGZvci1sb29wIG1hcmt1cCBuZWVkcyB0byBoYXBwZW4gYWZ0ZXIgdmFsaWRh
dGVMaW1pdGF0aW9ucyBwYXNzLgotICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlv
bnMgJiBTSF9VTlJPTExfRk9SX0xPT1BfV0lUSF9JTlRFR0VSX0lOREVYKSkKLSAgICAgICAgICAg
IEZvckxvb3BVbnJvbGw6Ok1hcmtGb3JMb29wc1dpdGhJbnRlZ2VySW5kaWNlc0ZvclVucm9sbGlu
Zyhyb290KTsKLQotICAgICAgICAvLyBCdWlsdC1pbiBmdW5jdGlvbiBlbXVsYXRpb24gbmVlZHMg
dG8gaGFwcGVuIGFmdGVyIHZhbGlkYXRlTGltaXRhdGlvbnMgcGFzcy4KLSAgICAgICAgaWYgKHN1
Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElPTlMp
KQotICAgICAgICAgICAgYnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuTWFya0J1aWx0SW5GdW5jdGlv
bnNGb3JFbXVsYXRpb24ocm9vdCk7Ci0KLSAgICAgICAgLy8gQ2xhbXBpbmcgdW5pZm9ybSBhcnJh
eSBib3VuZHMgbmVlZHMgdG8gaGFwcGVuIGFmdGVyIHZhbGlkYXRlTGltaXRhdGlvbnMgcGFzcy4K
LSAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfQ0xBTVBfSU5ESVJF
Q1RfQVJSQVlfQk9VTkRTKSkKLSAgICAgICAgICAgIGFycmF5Qm91bmRzQ2xhbXBlci5NYXJrSW5k
aXJlY3RBcnJheUJvdW5kc0ZvckNsYW1waW5nKHJvb3QpOwotCi0gICAgICAgIC8vIERpc2FsbG93
IGV4cHJlc3Npb25zIGRlZW1lZCB0b28gY29tcGxleC4KLSAgICAgICAgaWYgKHN1Y2Nlc3MgJiYg
KGNvbXBpbGVPcHRpb25zICYgU0hfTElNSVRfRVhQUkVTU0lPTl9DT01QTEVYSVRZKSkKLSAgICAg
ICAgICAgIHN1Y2Nlc3MgPSBsaW1pdEV4cHJlc3Npb25Db21wbGV4aXR5KHJvb3QpOwotCi0gICAg
ICAgIC8vIENhbGwgbWFwTG9uZ1ZhcmlhYmxlTmFtZXMoKSBiZWZvcmUgY29sbGVjdEF0dHJpYnNV
bmlmb3JtcygpIHNvIGluCi0gICAgICAgIC8vIGNvbGxlY3RBdHRyaWJzVW5pZm9ybXMoKSB3ZSBh
bHJlYWR5IGhhdmUgdGhlIG1hcHBlZCBzeW1ib2wgbmFtZXMgYW5kCi0gICAgICAgIC8vIHdlIGNv
dWxkIGNvbXBvc2l0ZSBtYXBwZWQgYW5kIG9yaWdpbmFsIHZhcmlhYmxlIG5hbWVzLgotICAgICAg
ICAvLyBBbHNvLCBpZiB3ZSBoYXNoIGFsbCB0aGUgbmFtZXMsIHRoZW4gbm8gbmVlZCB0byBkbyB0
aGlzIGZvciBsb25nIG5hbWVzLgotICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlv
bnMgJiBTSF9NQVBfTE9OR19WQVJJQUJMRV9OQU1FUykgJiYgaGFzaEZ1bmN0aW9uID09IE5VTEwp
Ci0gICAgICAgICAgICBtYXBMb25nVmFyaWFibGVOYW1lcyhyb290KTsKLQotICAgICAgICBpZiAo
c3VjY2VzcyAmJiBzaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIgJiYgKGNvbXBpbGVPcHRp
b25zICYgU0hfSU5JVF9HTF9QT1NJVElPTikpIHsKLSAgICAgICAgICAgIEluaXRpYWxpemVHTFBv
c2l0aW9uIGluaXRHTFBvc2l0aW9uOwotICAgICAgICAgICAgcm9vdC0+dHJhdmVyc2UoJmluaXRH
TFBvc2l0aW9uKTsKLSAgICAgICAgfQotCi0gICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRp
b25zICYgU0hfVU5GT0xEX1NIT1JUX0NJUkNVSVQpKSB7Ci0gICAgICAgICAgICBVbmZvbGRTaG9y
dENpcmN1aXRBU1QgdW5mb2xkU2hvcnRDaXJjdWl0OwotICAgICAgICAgICAgcm9vdC0+dHJhdmVy
c2UoJnVuZm9sZFNob3J0Q2lyY3VpdCk7Ci0gICAgICAgICAgICB1bmZvbGRTaG9ydENpcmN1aXQu
dXBkYXRlVHJlZSgpOwotICAgIH0KLQotICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9w
dGlvbnMgJiBTSF9WQVJJQUJMRVMpKSB7Ci0gICAgICAgICAgICBjb2xsZWN0VmFyaWFibGVzKHJv
b3QpOwotICAgICAgICAgICAgaWYgKGNvbXBpbGVPcHRpb25zICYgU0hfRU5GT1JDRV9QQUNLSU5H
X1JFU1RSSUNUSU9OUykKLSAgICAgICAgICAgICAgICBzdWNjZXNzID0gZW5mb3JjZVBhY2tpbmdS
ZXN0cmljdGlvbnMoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzdWNjZXNzICYmIChjb21w
aWxlT3B0aW9ucyAmIFNIX0lOVEVSTUVESUFURV9UUkVFKSkKLSAgICAgICAgICAgIGludGVybWVk
aWF0ZS5vdXRwdXRUcmVlKHJvb3QpOwotCi0gICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxl
T3B0aW9ucyAmIFNIX09CSkVDVF9DT0RFKSkKLSAgICAgICAgICAgIHRyYW5zbGF0ZShyb290KTsK
LSAgICB9Ci0KLSAgICAvLyBDbGVhbnVwIG1lbW9yeS4KLSAgICBpbnRlcm1lZGlhdGUucmVtb3Zl
KHBhcnNlQ29udGV4dC50cmVlUm9vdCk7Ci0KLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotYm9v
bCBUQ29tcGlsZXI6OkluaXRCdWlsdEluU3ltYm9sVGFibGUoY29uc3QgU2hCdWlsdEluUmVzb3Vy
Y2VzICZyZXNvdXJjZXMpCi17Ci0gICAgY29tcGlsZVJlc291cmNlcyA9IHJlc291cmNlczsKLQot
ICAgIGFzc2VydChzeW1ib2xUYWJsZS5pc0VtcHR5KCkpOwotICAgIHN5bWJvbFRhYmxlLnB1c2go
KTsKLQotICAgIFRQdWJsaWNUeXBlIGludGVnZXI7Ci0gICAgaW50ZWdlci50eXBlID0gRWJ0SW50
OwotICAgIGludGVnZXIuc2l6ZSA9IDE7Ci0gICAgaW50ZWdlci5tYXRyaXggPSBmYWxzZTsKLSAg
ICBpbnRlZ2VyLmFycmF5ID0gZmFsc2U7Ci0KLSAgICBUUHVibGljVHlwZSBmbG9hdGluZ1BvaW50
OwotICAgIGZsb2F0aW5nUG9pbnQudHlwZSA9IEVidEZsb2F0OwotICAgIGZsb2F0aW5nUG9pbnQu
c2l6ZSA9IDE7Ci0gICAgZmxvYXRpbmdQb2ludC5tYXRyaXggPSBmYWxzZTsKLSAgICBmbG9hdGlu
Z1BvaW50LmFycmF5ID0gZmFsc2U7Ci0KLSAgICBUUHVibGljVHlwZSBzYW1wbGVyOwotICAgIHNh
bXBsZXIuc2l6ZSA9IDE7Ci0gICAgc2FtcGxlci5tYXRyaXggPSBmYWxzZTsKLSAgICBzYW1wbGVy
LmFycmF5ID0gZmFsc2U7Ci0KLSAgICBzd2l0Y2goc2hhZGVyVHlwZSkKLSAgICB7Ci0gICAgICBj
YXNlIFNIX0ZSQUdNRU5UX1NIQURFUjoKLSAgICAgICAgc3ltYm9sVGFibGUuc2V0RGVmYXVsdFBy
ZWNpc2lvbihpbnRlZ2VyLCBFYnBNZWRpdW0pOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
U0hfVkVSVEVYX1NIQURFUjoKLSAgICAgICAgc3ltYm9sVGFibGUuc2V0RGVmYXVsdFByZWNpc2lv
bihpbnRlZ2VyLCBFYnBIaWdoKTsKLSAgICAgICAgc3ltYm9sVGFibGUuc2V0RGVmYXVsdFByZWNp
c2lvbihmbG9hdGluZ1BvaW50LCBFYnBIaWdoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZh
dWx0OiBhc3NlcnQoZmFsc2UgJiYgIkxhbmd1YWdlIG5vdCBzdXBwb3J0ZWQiKTsKLSAgICB9Ci0g
ICAgLy8gV2Ugc2V0IGRlZmF1bHRzIGZvciBhbGwgdGhlIHNhbXBsZXIgdHlwZXMsIGV2ZW4gdGhv
c2UgdGhhdCBhcmUKLSAgICAvLyBvbmx5IGF2YWlsYWJsZSBpZiBhbiBleHRlbnNpb24gZXhpc3Rz
LgotICAgIGZvciAoaW50IHNhbXBsZXJUeXBlID0gRWJ0R3VhcmRTYW1wbGVyQmVnaW4gKyAxOwot
ICAgICAgICAgc2FtcGxlclR5cGUgPCBFYnRHdWFyZFNhbXBsZXJFbmQ7ICsrc2FtcGxlclR5cGUp
IHsKLSAgICAgICAgc2FtcGxlci50eXBlID0gc3RhdGljX2Nhc3Q8VEJhc2ljVHlwZT4oc2FtcGxl
clR5cGUpOwotICAgICAgICBzeW1ib2xUYWJsZS5zZXREZWZhdWx0UHJlY2lzaW9uKHNhbXBsZXIs
IEVicExvdyk7Ci0gICAgfQotCi0gICAgSW5zZXJ0QnVpbHRJbkZ1bmN0aW9ucyhzaGFkZXJUeXBl
LCBzaGFkZXJTcGVjLCByZXNvdXJjZXMsIHN5bWJvbFRhYmxlKTsKLQotICAgIElkZW50aWZ5QnVp
bHRJbnMoc2hhZGVyVHlwZSwgc2hhZGVyU3BlYywgcmVzb3VyY2VzLCBzeW1ib2xUYWJsZSk7Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBUQ29tcGlsZXI6OmNsZWFyUmVzdWx0cygpCi17
Ci0gICAgYXJyYXlCb3VuZHNDbGFtcGVyLkNsZWFudXAoKTsKLSAgICBpbmZvU2luay5pbmZvLmVy
YXNlKCk7Ci0gICAgaW5mb1Npbmsub2JqLmVyYXNlKCk7Ci0gICAgaW5mb1NpbmsuZGVidWcuZXJh
c2UoKTsKLQotICAgIGF0dHJpYnMuY2xlYXIoKTsKLSAgICB1bmlmb3Jtcy5jbGVhcigpOwotICAg
IHZhcnlpbmdzLmNsZWFyKCk7Ci0KLSAgICBidWlsdEluRnVuY3Rpb25FbXVsYXRvci5DbGVhbnVw
KCk7Ci0KLSAgICBuYW1lTWFwLmNsZWFyKCk7Ci19Ci0KLWJvb2wgVENvbXBpbGVyOjpkZXRlY3RD
YWxsRGVwdGgoVEludGVybU5vZGUqIHJvb3QsIFRJbmZvU2luayYgaW5mb1NpbmssIGJvb2wgbGlt
aXRDYWxsU3RhY2tEZXB0aCkKLXsKLSAgICBEZXRlY3RDYWxsRGVwdGggZGV0ZWN0KGluZm9TaW5r
LCBsaW1pdENhbGxTdGFja0RlcHRoLCBtYXhDYWxsU3RhY2tEZXB0aCk7Ci0gICAgcm9vdC0+dHJh
dmVyc2UoJmRldGVjdCk7Ci0gICAgc3dpdGNoIChkZXRlY3QuZGV0ZWN0Q2FsbERlcHRoKCkpIHsK
LSAgICAgICAgY2FzZSBEZXRlY3RDYWxsRGVwdGg6OmtFcnJvck5vbmU6Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBEZXRlY3RDYWxsRGVwdGg6OmtFcnJvck1pc3NpbmdN
YWluOgotICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5wcmVmaXgoRVByZWZpeEVycm9yKTsKLSAg
ICAgICAgICAgIGluZm9TaW5rLmluZm8gPDwgIk1pc3NpbmcgbWFpbigpIjsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgY2FzZSBEZXRlY3RDYWxsRGVwdGg6OmtFcnJvclJlY3Vy
c2lvbjoKLSAgICAgICAgICAgIGluZm9TaW5rLmluZm8ucHJlZml4KEVQcmVmaXhFcnJvcik7Ci0g
ICAgICAgICAgICBpbmZvU2luay5pbmZvIDw8ICJGdW5jdGlvbiByZWN1cnNpb24gZGV0ZWN0ZWQi
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjYXNlIERldGVjdENhbGxEZXB0
aDo6a0Vycm9yTWF4RGVwdGhFeGNlZWRlZDoKLSAgICAgICAgICAgIGluZm9TaW5rLmluZm8ucHJl
Zml4KEVQcmVmaXhFcnJvcik7Ci0gICAgICAgICAgICBpbmZvU2luay5pbmZvIDw8ICJGdW5jdGlv
biBjYWxsIHN0YWNrIHRvbyBkZWVwIjsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotfQotCi12b2lkIFRDb21waWxlcjo6cmV3cml0ZUNTU1NoYWRlcihU
SW50ZXJtTm9kZSogcm9vdCkKLXsKLSAgICBSZW5hbWVGdW5jdGlvbiByZW5hbWVyKCJtYWluKCIs
ICJjc3NfbWFpbigiKTsKLSAgICByb290LT50cmF2ZXJzZSgmcmVuYW1lcik7Ci19Ci0KLWJvb2wg
VENvbXBpbGVyOjp2YWxpZGF0ZUxpbWl0YXRpb25zKFRJbnRlcm1Ob2RlKiByb290KSB7Ci0gICAg
VmFsaWRhdGVMaW1pdGF0aW9ucyB2YWxpZGF0ZShzaGFkZXJUeXBlLCBpbmZvU2luay5pbmZvKTsK
LSAgICByb290LT50cmF2ZXJzZSgmdmFsaWRhdGUpOwotICAgIHJldHVybiB2YWxpZGF0ZS5udW1F
cnJvcnMoKSA9PSAwOwotfQotCi1ib29sIFRDb21waWxlcjo6ZW5mb3JjZVRpbWluZ1Jlc3RyaWN0
aW9ucyhUSW50ZXJtTm9kZSogcm9vdCwgYm9vbCBvdXRwdXRHcmFwaCkKLXsKLSAgICBpZiAoc2hh
ZGVyU3BlYyAhPSBTSF9XRUJHTF9TUEVDKSB7Ci0gICAgICAgIGluZm9TaW5rLmluZm8gPDwgIlRp
bWluZyByZXN0cmljdGlvbnMgbXVzdCBiZSBlbmZvcmNlZCB1bmRlciB0aGUgV2ViR0wgc3BlYy4i
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHNoYWRlclR5cGUgPT0g
U0hfRlJBR01FTlRfU0hBREVSKSB7Ci0gICAgICAgIFREZXBlbmRlbmN5R3JhcGggZ3JhcGgocm9v
dCk7Ci0KLSAgICAgICAgLy8gT3V0cHV0IGFueSBlcnJvcnMgZmlyc3QuCi0gICAgICAgIGJvb2wg
c3VjY2VzcyA9IGVuZm9yY2VGcmFnbWVudFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhncmFwaCk7
Ci0gICAgICAgIAotICAgICAgICAvLyBUaGVuLCBvdXRwdXQgdGhlIGRlcGVuZGVuY3kgZ3JhcGgu
Ci0gICAgICAgIGlmIChvdXRwdXRHcmFwaCkgewotICAgICAgICAgICAgVERlcGVuZGVuY3lHcmFw
aE91dHB1dCBvdXRwdXQoaW5mb1NpbmsuaW5mbyk7Ci0gICAgICAgICAgICBvdXRwdXQub3V0cHV0
QWxsU3Bhbm5pbmdUcmVlcyhncmFwaCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJl
dHVybiBzdWNjZXNzOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgcmV0dXJuIGVuZm9yY2VW
ZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMocm9vdCk7Ci0gICAgfQotfQotCi1ib29sIFRD
b21waWxlcjo6bGltaXRFeHByZXNzaW9uQ29tcGxleGl0eShUSW50ZXJtTm9kZSogcm9vdCkKLXsK
LSAgICBUSW50ZXJtVHJhdmVyc2VyIHRyYXZlcnNlcjsKLSAgICByb290LT50cmF2ZXJzZSgmdHJh
dmVyc2VyKTsKLSAgICBURGVwZW5kZW5jeUdyYXBoIGdyYXBoKHJvb3QpOwotCi0gICAgZm9yIChU
RnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZ3JhcGguYmVnaW5Vc2Vy
RGVmaW5lZEZ1bmN0aW9uQ2FsbHMoKTsKLSAgICAgICAgIGl0ZXIgIT0gZ3JhcGguZW5kVXNlckRl
ZmluZWRGdW5jdGlvbkNhbGxzKCk7Ci0gICAgICAgICArK2l0ZXIpCi0gICAgewotICAgICAgICBU
R3JhcGhGdW5jdGlvbkNhbGwqIHNhbXBsZXJTeW1ib2wgPSAqaXRlcjsKLSAgICAgICAgVERlcGVu
ZGVuY3lHcmFwaFRyYXZlcnNlciBncmFwaFRyYXZlcnNlcjsKLSAgICAgICAgc2FtcGxlclN5bWJv
bC0+dHJhdmVyc2UoJmdyYXBoVHJhdmVyc2VyKTsKLSAgICB9Ci0KLSAgICBpZiAodHJhdmVyc2Vy
LmdldE1heERlcHRoKCkgPiBtYXhFeHByZXNzaW9uQ29tcGxleGl0eSkgewotICAgICAgICBpbmZv
U2luay5pbmZvIDw8ICJFeHByZXNzaW9uIHRvbyBjb21wbGV4LiI7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVENvbXBpbGVyOjplbmZv
cmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoY29uc3QgVERlcGVuZGVuY3lHcmFw
aCYgZ3JhcGgpCi17Ci0gICAgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZyByZXN0cmljdG9y
KGluZm9TaW5rLmluZm8pOwotICAgIHJlc3RyaWN0b3IuZW5mb3JjZVJlc3RyaWN0aW9ucyhncmFw
aCk7Ci0gICAgcmV0dXJuIHJlc3RyaWN0b3IubnVtRXJyb3JzKCkgPT0gMDsKLX0KLQotYm9vbCBU
Q29tcGlsZXI6OmVuZm9yY2VWZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoVEludGVybU5v
ZGUqIHJvb3QpCi17Ci0gICAgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcgcmVzdHJpY3Rvcihp
bmZvU2luay5pbmZvKTsKLSAgICByZXN0cmljdG9yLmVuZm9yY2VSZXN0cmljdGlvbnMocm9vdCk7
Ci0gICAgcmV0dXJuIHJlc3RyaWN0b3IubnVtRXJyb3JzKCkgPT0gMDsKLX0KLQotdm9pZCBUQ29t
cGlsZXI6OmNvbGxlY3RWYXJpYWJsZXMoVEludGVybU5vZGUqIHJvb3QpCi17Ci0gICAgQ29sbGVj
dFZhcmlhYmxlcyBjb2xsZWN0KGF0dHJpYnMsIHVuaWZvcm1zLCB2YXJ5aW5ncywgaGFzaEZ1bmN0
aW9uKTsKLSAgICByb290LT50cmF2ZXJzZSgmY29sbGVjdCk7Ci19Ci0KLWJvb2wgVENvbXBpbGVy
OjplbmZvcmNlUGFja2luZ1Jlc3RyaWN0aW9ucygpCi17Ci0gICAgVmFyaWFibGVQYWNrZXIgcGFj
a2VyOwotICAgIGJvb2wgc3VjY2VzcyA9IHBhY2tlci5DaGVja1ZhcmlhYmxlc1dpdGhpblBhY2tp
bmdMaW1pdHMobWF4VW5pZm9ybVZlY3RvcnMsIHVuaWZvcm1zKTsKLSAgICBpZiAoIXN1Y2Nlc3Mp
IHsKLSAgICAgICAgaW5mb1NpbmsuaW5mby5wcmVmaXgoRVByZWZpeEVycm9yKTsKLSAgICAgICAg
aW5mb1NpbmsuaW5mbyA8PCAidG9vIG1hbnkgdW5pZm9ybXMiOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgc3VjY2VzcyA9IHBhY2tlci5DaGVja1ZhcmlhYmxlc1dpdGhpblBh
Y2tpbmdMaW1pdHMobWF4VmFyeWluZ1ZlY3RvcnMsIHZhcnlpbmdzKTsKLQotICAgIGlmICghc3Vj
Y2VzcykgewotICAgICAgICBpbmZvU2luay5pbmZvLnByZWZpeChFUHJlZml4RXJyb3IpOwotICAg
ICAgICBpbmZvU2luay5pbmZvIDw8ICJ0b28gbWFueSB2YXJ5aW5ncyI7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBUQ29tcGlsZXI6
Om1hcExvbmdWYXJpYWJsZU5hbWVzKFRJbnRlcm1Ob2RlKiByb290KQotewotICAgIEFTU0VSVChs
b25nTmFtZU1hcCk7Ci0gICAgTWFwTG9uZ1ZhcmlhYmxlTmFtZXMgbWFwKGxvbmdOYW1lTWFwKTsK
LSAgICByb290LT50cmF2ZXJzZSgmbWFwKTsKLX0KLQotaW50IFRDb21waWxlcjo6Z2V0TWFwcGVk
TmFtZU1heExlbmd0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIE1BWF9TSE9SVEVORURfSURFTlRJ
RklFUl9TSVpFICsgMTsKLX0KLQotY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBUQ29tcGlsZXI6
OmdldEV4dGVuc2lvbkJlaGF2aW9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZXh0ZW5zaW9uQmVo
YXZpb3I7Ci19Ci0KLWNvbnN0IFNoQnVpbHRJblJlc291cmNlcyYgVENvbXBpbGVyOjpnZXRSZXNv
dXJjZXMoKSBjb25zdAotewotICAgIHJldHVybiBjb21waWxlUmVzb3VyY2VzOwotfQotCi1jb25z
dCBBcnJheUJvdW5kc0NsYW1wZXImIFRDb21waWxlcjo6Z2V0QXJyYXlCb3VuZHNDbGFtcGVyKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gYXJyYXlCb3VuZHNDbGFtcGVyOwotfQotCi1TaEFycmF5SW5k
ZXhDbGFtcGluZ1N0cmF0ZWd5IFRDb21waWxlcjo6Z2V0QXJyYXlJbmRleENsYW1waW5nU3RyYXRl
Z3koKSBjb25zdAotewotICAgIHJldHVybiBjbGFtcGluZ1N0cmF0ZWd5OwotfQotCi1jb25zdCBC
dWlsdEluRnVuY3Rpb25FbXVsYXRvciYgVENvbXBpbGVyOjpnZXRCdWlsdEluRnVuY3Rpb25FbXVs
YXRvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOwotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbnN0YW50
VW5pb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db25zdGFudFVu
aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxZTM3ODg1ZjkwMWIwMjRkNjM0
NjU4NDc3MTJiZmI2ODg2MDczNGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbnN0YW50
VW5pb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDI1NyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwotCi0jaWZuZGVmIF9DT05TVEFOVF9VTklPTl9JTkNMVURFRF8KLSNkZWZpbmUgX0NPTlNUQU5U
X1VOSU9OX0lOQ0xVREVEXwotCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0KLWNsYXNzIENvbnN0YW50
VW5pb24gewotcHVibGljOgotICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKLSAgICBD
b25zdGFudFVuaW9uKCkKLSAgICB7Ci0gICAgICAgIGlDb25zdCA9IDA7Ci0gICAgICAgIHR5cGUg
PSBFYnRWb2lkOwotICAgIH0KLQotICAgIHZvaWQgc2V0SUNvbnN0KGludCBpKSB7aUNvbnN0ID0g
aTsgdHlwZSA9IEVidEludDsgfQotICAgIHZvaWQgc2V0RkNvbnN0KGZsb2F0IGYpIHtmQ29uc3Qg
PSBmOyB0eXBlID0gRWJ0RmxvYXQ7IH0KLSAgICB2b2lkIHNldEJDb25zdChib29sIGIpIHtiQ29u
c3QgPSBiOyB0eXBlID0gRWJ0Qm9vbDsgfQotCi0gICAgaW50IGdldElDb25zdCgpIHsgcmV0dXJu
IGlDb25zdDsgfQotICAgIGZsb2F0IGdldEZDb25zdCgpIHsgcmV0dXJuIGZDb25zdDsgfQotICAg
IGJvb2wgZ2V0QkNvbnN0KCkgeyByZXR1cm4gYkNvbnN0OyB9Ci0gICAgaW50IGdldElDb25zdCgp
IGNvbnN0IHsgcmV0dXJuIGlDb25zdDsgfQotICAgIGZsb2F0IGdldEZDb25zdCgpIGNvbnN0IHsg
cmV0dXJuIGZDb25zdDsgfQotICAgIGJvb2wgZ2V0QkNvbnN0KCkgY29uc3QgeyByZXR1cm4gYkNv
bnN0OyB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaW50IGkpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gaSA9PSBpQ29uc3Q7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IGZsb2F0IGYpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZiA9PSBmQ29uc3Q7
Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGJvb2wgYikgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBiID09IGJDb25zdDsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0Ci0gICAgewotICAgICAgICBp
ZiAoY29uc3RhbnQudHlwZSAhPSB0eXBlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEVidEludDoKLSAgICAgICAgICAg
IHJldHVybiBjb25zdGFudC5pQ29uc3QgPT0gaUNvbnN0OwotICAgICAgICBjYXNlIEVidEZsb2F0
OgotICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50LmZDb25zdCA9PSBmQ29uc3Q7Ci0gICAgICAg
IGNhc2UgRWJ0Qm9vbDoKLSAgICAgICAgICAgIHJldHVybiBjb25zdGFudC5iQ29uc3QgPT0gYkNv
bnN0OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGludCBpKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KGkpOwotICAgIH0KLQotICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBmbG9hdCBmKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICFvcGVy
YXRvcj09KGYpOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBib29sIGIpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gIW9wZXJhdG9yPT0oYik7Ci0gICAgfQotCi0gICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KGNvbnN0YW50KTsKLSAgICB9Ci0KLSAgICBi
b29sIG9wZXJhdG9yPihjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKLSAgICB7
IAotICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKLSAgICAgICAgc3dpdGNo
ICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgRWJ0SW50OgotICAgICAgICAgICAgcmV0dXJuIGlDb25z
dCA+IGNvbnN0YW50LmlDb25zdDsKLSAgICAgICAgY2FzZSBFYnRGbG9hdDoKLSAgICAgICAgICAg
IHJldHVybiBmQ29uc3QgPiBjb25zdGFudC5mQ29uc3Q7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gSW52YWxpZCBvcGVyYXRpb24sIGhhbmRsZWQgYXQg
c2VtYW50aWMgYW5hbHlzaXMKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I8
KGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAotICAgIHsgCi0gICAgICAgIGFz
c2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAg
ICAgICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAgICAgICByZXR1cm4gaUNvbnN0IDwgY29uc3RhbnQu
aUNvbnN0OwotICAgICAgICBjYXNlIEVidEZsb2F0OgotICAgICAgICAgICAgcmV0dXJuIGZDb25z
dCA8IGNvbnN0YW50LmZDb25zdDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgICAvLyBJbnZhbGlkIG9wZXJhdGlvbiwgaGFuZGxlZCBhdCBzZW1hbnRpYyBhbmFs
eXNpcwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvcisoY29u
c3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0Ci0gICAgeyAKLSAgICAgICAgQ29uc3Rh
bnRVbmlvbiByZXR1cm5WYWx1ZTsKLSAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlw
ZSk7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEVidEludDogcmV0dXJu
VmFsdWUuc2V0SUNvbnN0KGlDb25zdCArIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOwotICAgICAg
ICBjYXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0ICsgY29uc3RhbnQu
ZkNvbnN0KTsgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiRGVmYXVs
dCBtaXNzaW5nIik7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci0g
ICAgfQotCi0gICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvci0oY29uc3QgQ29uc3RhbnRVbmlvbiYg
Y29uc3RhbnQpIGNvbnN0Ci0gICAgeyAKLSAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1
ZTsKLSAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7Ci0gICAgICAgIHN3aXRj
aCAodHlwZSkgewotICAgICAgICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlD
b25zdCAtIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOwotICAgICAgICBjYXNlIEVidEZsb2F0OiBy
ZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0IC0gY29uc3RhbnQuZkNvbnN0KTsgYnJlYWs7Ci0g
ICAgICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci0gICAgfQotCi0gICAgQ29uc3Rh
bnRVbmlvbiBvcGVyYXRvciooY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0Ci0g
ICAgeyAKLSAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKLSAgICAgICAgYXNzZXJ0
KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAg
ICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAqIGNvbnN0YW50LmlD
b25zdCk7IGJyZWFrOwotICAgICAgICBjYXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29u
c3QoZkNvbnN0ICogY29uc3RhbnQuZkNvbnN0KTsgYnJlYWs7IAotICAgICAgICBkZWZhdWx0OiBh
c3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOwotICAgICAgICB9Ci0KLSAgICAgICAg
cmV0dXJuIHJldHVyblZhbHVlOwotICAgIH0KLQotICAgIENvbnN0YW50VW5pb24gb3BlcmF0b3Il
KGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAotICAgIHsgCi0gICAgICAgIENv
bnN0YW50VW5pb24gcmV0dXJuVmFsdWU7Ci0gICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50
LnR5cGUpOwotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBFYnRJbnQ6IHJl
dHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgJSBjb25zdGFudC5pQ29uc3QpOyBicmVhazsKLSAg
ICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci0gICAgfQotCi0gICAgQ29u
c3RhbnRVbmlvbiBvcGVyYXRvcj4+KGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25z
dAotICAgIHsgCi0gICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7Ci0gICAgICAgIGFz
c2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAg
ICAgICAgY2FzZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgPj4gY29uc3Rh
bnQuaUNvbnN0KTsgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYg
IkRlZmF1bHQgbWlzc2luZyIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJldHVyblZh
bHVlOwotICAgIH0KLQotICAgIENvbnN0YW50VW5pb24gb3BlcmF0b3I8PChjb25zdCBDb25zdGFu
dFVuaW9uJiBjb25zdGFudCkgY29uc3QKLSAgICB7IAotICAgICAgICBDb25zdGFudFVuaW9uIHJl
dHVyblZhbHVlOwotICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKLSAgICAg
ICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJ
Q29uc3QoaUNvbnN0IDw8IGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOwotICAgICAgICBkZWZhdWx0
OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLSAgICB9Ci0KLSAgICBDb25zdGFudFVuaW9uIG9w
ZXJhdG9yJihjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKLSAgICB7IAotICAg
ICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOwotICAgICAgICBhc3NlcnQodHlwZSA9PSBj
b25zdGFudC50eXBlKTsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgRWJ0
SW50OiAgcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAmIGNvbnN0YW50LmlDb25zdCk7IGJy
ZWFrOwotICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3Np
bmciKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLSAgICB9Ci0K
LSAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yfChjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFu
dCkgY29uc3QKLSAgICB7IAotICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOwotICAg
ICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKLSAgICAgICAgc3dpdGNoICh0eXBl
KSB7Ci0gICAgICAgIGNhc2UgRWJ0SW50OiAgcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCB8
IGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOwotICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZh
bHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBy
ZXR1cm5WYWx1ZTsKLSAgICB9Ci0KLSAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yXihjb25zdCBD
b25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKLSAgICB7IAotICAgICAgICBDb25zdGFudFVu
aW9uIHJldHVyblZhbHVlOwotICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsK
LSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgRWJ0SW50OiAgcmV0dXJuVmFs
dWUuc2V0SUNvbnN0KGlDb25zdCBeIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOwotICAgICAgICBk
ZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLSAgICB9Ci0KLSAgICBDb25zdGFudFVu
aW9uIG9wZXJhdG9yJiYoY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0Ci0gICAg
eyAKLSAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKLSAgICAgICAgYXNzZXJ0KHR5
cGUgPT0gY29uc3RhbnQudHlwZSk7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBj
YXNlIEVidEJvb2w6IHJldHVyblZhbHVlLnNldEJDb25zdChiQ29uc3QgJiYgY29uc3RhbnQuYkNv
bnN0KTsgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1
bHQgbWlzc2luZyIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwot
ICAgIH0KLQotICAgIENvbnN0YW50VW5pb24gb3BlcmF0b3J8fChjb25zdCBDb25zdGFudFVuaW9u
JiBjb25zdGFudCkgY29uc3QKLSAgICB7IAotICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZh
bHVlOwotICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKLSAgICAgICAgc3dp
dGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgRWJ0Qm9vbDogcmV0dXJuVmFsdWUuc2V0QkNvbnN0
KGJDb25zdCB8fCBjb25zdGFudC5iQ29uc3QpOyBicmVhazsKLSAgICAgICAgZGVmYXVsdDogICAg
IGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4gcmV0dXJuVmFsdWU7Ci0gICAgfQotCi0gICAgVEJhc2ljVHlwZSBnZXRUeXBlKCkg
Y29uc3QgeyByZXR1cm4gdHlwZTsgfQotcHJpdmF0ZToKLQotICAgIHVuaW9uICB7Ci0gICAgICAg
IGludCBpQ29uc3Q7ICAvLyB1c2VkIGZvciBpdmVjLCBzY2FsYXIgaW50cwotICAgICAgICBib29s
IGJDb25zdDsgLy8gdXNlZCBmb3IgYnZlYywgc2NhbGFyIGJvb2xzCi0gICAgICAgIGZsb2F0IGZD
b25zdDsgICAvLyB1c2VkIGZvciB2ZWMsIG1hdCwgc2NhbGFyIGZsb2F0cwotICAgIH0gOwotCi0g
ICAgVEJhc2ljVHlwZSB0eXBlOwotfTsKLQotI2VuZGlmIC8vIF9DT05TVEFOVF9VTklPTl9JTkNM
VURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9E
ZXRlY3RDYWxsRGVwdGguY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0RldGVjdENhbGxEZXB0aC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwZGY1
MmM3MTUxYTg5NmExOGJmNmNiZDIwYjNmNjM0NTk1ODk2NmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL0RldGVjdENhbGxEZXB0aC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBA
QAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL0RldGVjdENhbGxEZXB0
aC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCi0KLURldGVjdENhbGxEZXB0aDo6
RnVuY3Rpb25Ob2RlOjpGdW5jdGlvbk5vZGUoY29uc3QgVFN0cmluZyYgZm5hbWUpCi0gICAgOiBu
YW1lKGZuYW1lKSwKLSAgICAgIHZpc2l0KFByZVZpc2l0KQotewotfQotCi1jb25zdCBUU3RyaW5n
JiBEZXRlY3RDYWxsRGVwdGg6OkZ1bmN0aW9uTm9kZTo6Z2V0TmFtZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG5hbWU7Ci19Ci0KLXZvaWQgRGV0ZWN0Q2FsbERlcHRoOjpGdW5jdGlvbk5vZGU6OmFk
ZENhbGxlZSgKLSAgICBEZXRlY3RDYWxsRGVwdGg6OkZ1bmN0aW9uTm9kZSogY2FsbGVlKQotewot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FsbGVlcy5zaXplKCk7ICsraSkgewotICAgICAg
ICBpZiAoY2FsbGVlc1tpXSA9PSBjYWxsZWUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIGNhbGxlZXMucHVzaF9iYWNrKGNhbGxlZSk7Ci19Ci0KLWludCBEZXRlY3RDYWxsRGVwdGg6
OkZ1bmN0aW9uTm9kZTo6ZGV0ZWN0Q2FsbERlcHRoKERldGVjdENhbGxEZXB0aCogZGV0ZWN0Q2Fs
bERlcHRoLCBpbnQgZGVwdGgpCi17Ci0gICAgQVNTRVJUKHZpc2l0ID09IFByZVZpc2l0KTsKLSAg
ICBBU1NFUlQoZGV0ZWN0Q2FsbERlcHRoKTsKLQotICAgIGludCBtYXhEZXB0aCA9IGRlcHRoOwot
ICAgIHZpc2l0ID0gSW5WaXNpdDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNhbGxlZXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgc3dpdGNoIChjYWxsZWVzW2ldLT52aXNpdCkgewotICAg
ICAgICAgICAgY2FzZSBJblZpc2l0OgotICAgICAgICAgICAgICAgIC8vIGN5Y2xlIGRldGVjdGVk
LCBpLmUuLCByZWN1cnNpb24gZGV0ZWN0ZWQuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGtJbmZp
bml0ZUNhbGxEZXB0aDsKLSAgICAgICAgICAgIGNhc2UgUG9zdFZpc2l0OgotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBQcmVWaXNpdDogewotICAgICAgICAgICAgICAg
IC8vIENoZWNrIGJlZm9yZSB3ZSByZWN1cnNlIHNvIHdlIGRvbid0IGdvIHRvbyBkZXB0aAotICAg
ICAgICAgICAgICAgIGlmIChkZXRlY3RDYWxsRGVwdGgtPmNoZWNrRXhjZWVkc01heERlcHRoKGRl
cHRoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlcHRoOwotICAgICAgICAgICAgICAg
IGludCBjYWxsRGVwdGggPSBjYWxsZWVzW2ldLT5kZXRlY3RDYWxsRGVwdGgoZGV0ZWN0Q2FsbERl
cHRoLCBkZXB0aCArIDEpOwotICAgICAgICAgICAgICAgIC8vIENoZWNrIGFmdGVyIHdlIHJlY3Vy
c2Ugc28gd2UgY2FuIGV4aXQgaW1tZWRpYXRlbHkgYW5kIHByb3ZpZGUgaW5mby4KLSAgICAgICAg
ICAgICAgICBpZiAoZGV0ZWN0Q2FsbERlcHRoLT5jaGVja0V4Y2VlZHNNYXhEZXB0aChjYWxsRGVw
dGgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRldGVjdENhbGxEZXB0aC0+Z2V0SW5mb1Npbmso
KS5pbmZvIDw8ICI8LSIgPDwgY2FsbGVlc1tpXS0+Z2V0TmFtZSgpOwotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gY2FsbERlcHRoOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBtYXhEZXB0aCA9IHN0ZDo6bWF4KGNhbGxEZXB0aCwgbWF4RGVwdGgpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgfQotICAgIHZpc2l0ID0gUG9zdFZpc2l0OwotICAgIHJldHVybiBtYXhEZXB0aDsKLX0K
LQotdm9pZCBEZXRlY3RDYWxsRGVwdGg6OkZ1bmN0aW9uTm9kZTo6cmVzZXQoKQotewotICAgIHZp
c2l0ID0gUHJlVmlzaXQ7Ci19Ci0KLURldGVjdENhbGxEZXB0aDo6RGV0ZWN0Q2FsbERlcHRoKFRJ
bmZvU2luayYgaW5mb1NpbmssIGJvb2wgbGltaXRDYWxsU3RhY2tEZXB0aCwgaW50IG1heENhbGxT
dGFja0RlcHRoKQotICAgIDogVEludGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFs
c2UpLAotICAgICAgY3VycmVudEZ1bmN0aW9uKE5VTEwpLAotICAgICAgaW5mb1NpbmsoaW5mb1Np
bmspLAotICAgICAgbWF4RGVwdGgobGltaXRDYWxsU3RhY2tEZXB0aCA/IG1heENhbGxTdGFja0Rl
cHRoIDogRnVuY3Rpb25Ob2RlOjprSW5maW5pdGVDYWxsRGVwdGgpCi17Ci19Ci0KLURldGVjdENh
bGxEZXB0aDo6fkRldGVjdENhbGxEZXB0aCgpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBmdW5jdGlvbnMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGRlbGV0ZSBmdW5jdGlvbnNbaV07Ci19
Ci0KLWJvb2wgRGV0ZWN0Q2FsbERlcHRoOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVElu
dGVybUFnZ3JlZ2F0ZSogbm9kZSkKLXsKLSAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCi0gICAg
ewotICAgICAgICBjYXNlIEVPcFByb3RvdHlwZToKLSAgICAgICAgICAgIC8vIEZ1bmN0aW9uIGRl
Y2xhcmF0aW9uLgotICAgICAgICAgICAgLy8gRG9uJ3QgYWRkIEZ1bmN0aW9uTm9kZSBoZXJlIGJl
Y2F1c2Ugbm9kZS0+Z2V0TmFtZSgpIGlzIHRoZQotICAgICAgICAgICAgLy8gdW5tYW5nbGVkIGZ1
bmN0aW9uIG5hbWUuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BGdW5jdGlv
bjogewotICAgICAgICAgICAgLy8gRnVuY3Rpb24gZGVmaW5pdGlvbi4KLSAgICAgICAgICAgIGlm
ICh2aXNpdCA9PSBQcmVWaXNpdCkgewotICAgICAgICAgICAgICAgIGN1cnJlbnRGdW5jdGlvbiA9
IGZpbmRGdW5jdGlvbkJ5TmFtZShub2RlLT5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgIGlm
IChjdXJyZW50RnVuY3Rpb24gPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBjdXJyZW50
RnVuY3Rpb24gPSBuZXcgRnVuY3Rpb25Ob2RlKG5vZGUtPmdldE5hbWUoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGZ1bmN0aW9ucy5wdXNoX2JhY2soY3VycmVudEZ1bmN0aW9uKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHZpc2l0ID09IFBvc3RWaXNpdCkgewot
ICAgICAgICAgICAgICAgIGN1cnJlbnRGdW5jdGlvbiA9IE5VTEw7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEVPcEZ1bmN0aW9uQ2Fs
bDogewotICAgICAgICAgICAgLy8gRnVuY3Rpb24gY2FsbC4KLSAgICAgICAgICAgIGlmICh2aXNp
dCA9PSBQcmVWaXNpdCkgewotICAgICAgICAgICAgICAgIEZ1bmN0aW9uTm9kZSogZnVuYyA9IGZp
bmRGdW5jdGlvbkJ5TmFtZShub2RlLT5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgIGlmIChm
dW5jID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgZnVuYyA9IG5ldyBGdW5jdGlvbk5v
ZGUobm9kZS0+Z2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25zLnB1c2hf
YmFjayhmdW5jKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJl
bnRGdW5jdGlvbikKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudEZ1bmN0aW9uLT5hZGRDYWxs
ZWUoZnVuYyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIERldGVjdENhbGxEZXB0aDo6Y2hlY2tFeGNlZWRzTWF4RGVwdGgoaW50
IGRlcHRoKQotewotICAgIHJldHVybiBkZXB0aCA+PSBtYXhEZXB0aDsKLX0KLQotdm9pZCBEZXRl
Y3RDYWxsRGVwdGg6OnJlc2V0RnVuY3Rpb25Ob2RlcygpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBmdW5jdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgZnVuY3Rpb25zW2ldLT5y
ZXNldCgpOwotICAgIH0KLX0KLQotRGV0ZWN0Q2FsbERlcHRoOjpFcnJvckNvZGUgRGV0ZWN0Q2Fs
bERlcHRoOjpkZXRlY3RDYWxsRGVwdGhGb3JGdW5jdGlvbihGdW5jdGlvbk5vZGUqIGZ1bmMpCi17
Ci0gICAgY3VycmVudEZ1bmN0aW9uID0gTlVMTDsKLSAgICByZXNldEZ1bmN0aW9uTm9kZXMoKTsK
LQotICAgIGludCBtYXhDYWxsRGVwdGggPSBmdW5jLT5kZXRlY3RDYWxsRGVwdGgodGhpcywgMSk7
Ci0KLSAgICBpZiAobWF4Q2FsbERlcHRoID09IEZ1bmN0aW9uTm9kZTo6a0luZmluaXRlQ2FsbERl
cHRoKQotICAgICAgICByZXR1cm4ga0Vycm9yUmVjdXJzaW9uOwotCi0gICAgaWYgKG1heENhbGxE
ZXB0aCA+PSBtYXhEZXB0aCkKLSAgICAgICAgcmV0dXJuIGtFcnJvck1heERlcHRoRXhjZWVkZWQ7
Ci0KLSAgICByZXR1cm4ga0Vycm9yTm9uZTsKLX0KLQotRGV0ZWN0Q2FsbERlcHRoOjpFcnJvckNv
ZGUgRGV0ZWN0Q2FsbERlcHRoOjpkZXRlY3RDYWxsRGVwdGgoKQotewotICAgIGlmIChtYXhEZXB0
aCAhPSBGdW5jdGlvbk5vZGU6OmtJbmZpbml0ZUNhbGxEZXB0aCkgewotICAgICAgICAvLyBDaGVj
ayBhbGwgZnVuY3Rpb25zIGJlY2F1c2UgdGhlIGRyaXZlciBtYXkgZmFpbCBvbiB0aGVtCi0gICAg
ICAgIC8vIFRPRE86IEJlZm9yZSBkZXRlY3RpbmdSZWN1cnNpb24sIHN0cmlwIHVudXNlZCBmdW5j
dGlvbnMuCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25zLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgICAgICBFcnJvckNvZGUgZXJyb3IgPSBkZXRlY3RDYWxsRGVwdGhGb3JG
dW5jdGlvbihmdW5jdGlvbnNbaV0pOwotICAgICAgICAgICAgaWYgKGVycm9yICE9IGtFcnJvck5v
bmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yOwotICAgICAgICB9Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgRnVuY3Rpb25Ob2RlKiBtYWluID0gZmluZEZ1bmN0aW9uQnlOYW1lKCJtYWlu
KCIpOwotICAgICAgICBpZiAobWFpbiA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIGtFcnJv
ck1pc3NpbmdNYWluOwotCi0gICAgICAgIHJldHVybiBkZXRlY3RDYWxsRGVwdGhGb3JGdW5jdGlv
bihtYWluKTsKLSAgICB9Ci0KLSAgICByZXR1cm4ga0Vycm9yTm9uZTsKLX0KLQotRGV0ZWN0Q2Fs
bERlcHRoOjpGdW5jdGlvbk5vZGUqIERldGVjdENhbGxEZXB0aDo6ZmluZEZ1bmN0aW9uQnlOYW1l
KAotICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBmdW5jdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGZ1bmN0aW9uc1tpXS0+Z2V0
TmFtZSgpID09IG5hbWUpCi0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb25zW2ldOwotICAgIH0K
LSAgICByZXR1cm4gTlVMTDsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0RldGVjdENhbGxEZXB0aC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0RldGVjdENhbGxEZXB0aC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA4OWU4NWY4OGY2ZWEyNjhkZDRlNTA1NGY2NWJjZmE5YjExNzVmYTdjLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3RDYWxsRGVwdGguaAorKysgL2Rldi9udWxsCkBAIC0x
LDgwICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfREVURUNU
X1JFQ1VSU0lPTl9IXwotI2RlZmluZSBDT01QSUxFUl9ERVRFQ1RfUkVDVVJTSU9OX0hfCi0KLSNp
bmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLQotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2lu
Y2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1Zhcmlh
YmxlSW5mby5oIgotCi1jbGFzcyBUSW5mb1Npbms7Ci0KLS8vIFRyYXZlcnNlcyBpbnRlcm1lZGlh
dGUgdHJlZSB0byBkZXRlY3QgZnVuY3Rpb24gcmVjdXJzaW9uLgotY2xhc3MgRGV0ZWN0Q2FsbERl
cHRoIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIGVudW0gRXJyb3JD
b2RlIHsKLSAgICAgICAga0Vycm9yTWlzc2luZ01haW4sCi0gICAgICAgIGtFcnJvclJlY3Vyc2lv
biwKLSAgICAgICAga0Vycm9yTWF4RGVwdGhFeGNlZWRlZCwKLSAgICAgICAga0Vycm9yTm9uZQot
ICAgIH07Ci0KLSAgICBEZXRlY3RDYWxsRGVwdGgoVEluZm9TaW5rJiBpbmZvU3luYywgYm9vbCBs
aW1pdENhbGxTdGFja0RlcHRoLCBpbnQgbWF4Q2FsbFN0YWNrRGVwdGgpOwotICAgIH5EZXRlY3RD
YWxsRGVwdGgoKTsKLQotICAgIHZpcnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVElu
dGVybUFnZ3JlZ2F0ZSopOwotCi0gICAgYm9vbCBjaGVja0V4Y2VlZHNNYXhEZXB0aChpbnQgZGVw
dGgpOwotCi0gICAgRXJyb3JDb2RlIGRldGVjdENhbGxEZXB0aCgpOwotCi1wcml2YXRlOgotICAg
IGNsYXNzIEZ1bmN0aW9uTm9kZSB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IGtJbmZpbml0ZUNhbGxEZXB0aCA9IElOVF9NQVg7Ci0KLSAgICAgICAgRnVuY3Rpb25Ob2Rl
KGNvbnN0IFRTdHJpbmcmIGZuYW1lKTsKLQotICAgICAgICBjb25zdCBUU3RyaW5nJiBnZXROYW1l
KCkgY29uc3Q7Ci0KLSAgICAgICAgLy8gSWYgYSBmdW5jdGlvbiBpcyBhbHJlYWR5IGluIHRoZSBj
YWxsZWUgbGlzdCwgdGhpcyBiZWNvbWVzIGEgbm8tb3AuCi0gICAgICAgIHZvaWQgYWRkQ2FsbGVl
KEZ1bmN0aW9uTm9kZSogY2FsbGVlKTsKLQotICAgICAgICAvLyBSZXR1cm5zIGtJbmlmaW5pdHlD
YWxsRGVwdGggaWYgcmVjdXJzaXZlIGZ1bmN0aW9uIGNhbGxzIGFyZSBkZXRlY3RlZC4KLSAgICAg
ICAgaW50IGRldGVjdENhbGxEZXB0aChEZXRlY3RDYWxsRGVwdGgqIGRldGVjdENhbGxEZXB0aCwg
aW50IGRlcHRoKTsKLQotICAgICAgICAvLyBSZXNldCBzdGF0ZS4KLSAgICAgICAgdm9pZCByZXNl
dCgpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgLy8gbWFuZ2xlZCBmdW5jdGlvbiBuYW1lIGlz
IHVuaXF1ZS4KLSAgICAgICAgVFN0cmluZyBuYW1lOwotCi0gICAgICAgIC8vIGZ1bmN0aW9ucyB0
aGF0IGFyZSBkaXJlY3RseSBjYWxsZWQgYnkgdGhpcyBmdW5jdGlvbi4KLSAgICAgICAgVFZlY3Rv
cjxGdW5jdGlvbk5vZGUqPiBjYWxsZWVzOwotCi0gICAgICAgIFZpc2l0IHZpc2l0OwotICAgIH07
Ci0KLSAgICBFcnJvckNvZGUgZGV0ZWN0Q2FsbERlcHRoRm9yRnVuY3Rpb24oRnVuY3Rpb25Ob2Rl
KiBmdW5jKTsKLSAgICBGdW5jdGlvbk5vZGUqIGZpbmRGdW5jdGlvbkJ5TmFtZShjb25zdCBUU3Ry
aW5nJiBuYW1lKTsKLSAgICB2b2lkIHJlc2V0RnVuY3Rpb25Ob2RlcygpOwotCi0gICAgVEluZm9T
aW5rJiBnZXRJbmZvU2luaygpIHsgcmV0dXJuIGluZm9TaW5rOyB9Ci0KLSAgICBUVmVjdG9yPEZ1
bmN0aW9uTm9kZSo+IGZ1bmN0aW9uczsKLSAgICBGdW5jdGlvbk5vZGUqIGN1cnJlbnRGdW5jdGlv
bjsKLSAgICBUSW5mb1NpbmsmIGluZm9TaW5rOwotICAgIGludCBtYXhEZXB0aDsKLQotICAgIERl
dGVjdENhbGxEZXB0aChjb25zdCBEZXRlY3RDYWxsRGVwdGgmKTsKLSAgICB2b2lkIG9wZXJhdG9y
PShjb25zdCBEZXRlY3RDYWxsRGVwdGgmKTsKLX07Ci0KLSNlbmRpZiAgLy8gQ09NUElMRVJfREVU
RUNUX1JFQ1VSU0lPTl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA4Y2ZlNDliYTIyNDJhOGRjZjJjZTY5OGQ5YzNlYTYwNmM5OTc5MjRlLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLS8vIENvbnRhaW5zIGFuYWx5
c2lzIHV0aWxpdGllcyBmb3IgZGVhbGluZyB3aXRoIEhMU0wncyBsYWNrIG9mIHN1cHBvcnQgZm9y
Ci0vLyB0aGUgdXNlIG9mIGludHJpbnNpYyBmdW5jdGlvbnMgd2hpY2ggKGltcGxpY2l0bHkgb3Ig
ZXhwbGljaXRseSkgY29tcHV0ZQotLy8gZ3JhZGllbnRzIG9mIGZ1bmN0aW9ucyB3aXRoIGRpc2Nv
bnRpbnVpdGllcy4gCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0
eS5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VDb250ZXh0LmgiCi0KLW5hbWVzcGFjZSBz
aAotewotYm9vbCBEZXRlY3RMb29wRGlzY29udGludWl0eTo6dHJhdmVyc2UoVEludGVybU5vZGUg
Km5vZGUpCi17Ci0gICAgbUxvb3BEZXB0aCA9IDA7Ci0gICAgbUxvb3BEaXNjb250aW51aXR5ID0g
ZmFsc2U7Ci0gICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgcmV0dXJuIG1Mb29wRGlzY29u
dGludWl0eTsKLX0KLQotYm9vbCBEZXRlY3RMb29wRGlzY29udGludWl0eTo6dmlzaXRMb29wKFZp
c2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbG9vcCkKLXsKLSAgICBpZiAodmlzaXQgPT0gUHJlVmlz
aXQpCi0gICAgewotICAgICAgICArK21Mb29wRGVwdGg7Ci0gICAgfQotICAgIGVsc2UgaWYgKHZp
c2l0ID09IFBvc3RWaXNpdCkKLSAgICB7Ci0gICAgICAgIC0tbUxvb3BEZXB0aDsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBEZXRlY3RMb29wRGlzY29udGludWl0eTo6dmlz
aXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2ggKm5vZGUpCi17Ci0gICAgaWYgKG1M
b29wRGlzY29udGludWl0eSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBpZiAoIW1Mb29wRGVwdGgpCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICBzd2l0Y2ggKG5vZGUtPmdldEZsb3dPcCgpKQotICAgIHsKLSAgICAgIGNhc2UgRU9w
S2lsbDoKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcEJyZWFrOgotICAgICAgY2FzZSBF
T3BDb250aW51ZToKLSAgICAgIGNhc2UgRU9wUmV0dXJuOgotICAgICAgICBtTG9vcERpc2NvbnRp
bnVpdHkgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuICFtTG9vcERpc2NvbnRpbnVpdHk7Ci19Ci0KLWJvb2wg
RGV0ZWN0TG9vcERpc2NvbnRpbnVpdHk6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50
ZXJtQWdncmVnYXRlICpub2RlKQotewotICAgIHJldHVybiAhbUxvb3BEaXNjb250aW51aXR5Owot
fQotCi1ib29sIGNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkoVEludGVybU5vZGUgKm5vZGUpCi17
Ci0gICAgRGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkgZGV0ZWN0TG9vcERpc2NvbnRpbnVpdHk7Ci0g
ICAgcmV0dXJuIGRldGVjdExvb3BEaXNjb250aW51aXR5LnRyYXZlcnNlKG5vZGUpOwotfQotCi1i
b29sIERldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkK
LXsKLSAgICBtR3JhZGllbnRPcGVyYXRpb24gPSBmYWxzZTsKLSAgICBub2RlLT50cmF2ZXJzZSh0
aGlzKTsKLSAgICByZXR1cm4gbUdyYWRpZW50T3BlcmF0aW9uOwotfQotCi1ib29sIERldGVjdEdy
YWRpZW50T3BlcmF0aW9uOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5v
ZGUpCi17Ci0gICAgaWYgKG1HcmFkaWVudE9wZXJhdGlvbikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCi0gICAgewotICAg
ICAgY2FzZSBFT3BERmR4OgotICAgICAgY2FzZSBFT3BERmR5OgotICAgICAgICBtR3JhZGllbnRP
cGVyYXRpb24gPSB0cnVlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
Ci0gICAgcmV0dXJuICFtR3JhZGllbnRPcGVyYXRpb247Ci19Ci0KLWJvb2wgRGV0ZWN0R3JhZGll
bnRPcGVyYXRpb246OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRl
ICpub2RlKQotewotICAgIGlmIChtR3JhZGllbnRPcGVyYXRpb24pCi0gICAgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9wRnVuY3Rp
b25DYWxsKQotICAgIHsKLSAgICAgICAgaWYgKCFub2RlLT5pc1VzZXJEZWZpbmVkKCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1l
KG5vZGUtPmdldE5hbWUoKSk7Ci0KLSAgICAgICAgICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQi
IHx8Ci0gICAgICAgICAgICAgICAgbmFtZSA9PSAidGV4dHVyZTJEUHJvaiIgfHwKLSAgICAgICAg
ICAgICAgICBuYW1lID09ICJ0ZXh0dXJlQ3ViZSIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgbUdyYWRpZW50T3BlcmF0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFdoZW4gYSB1c2VyIGRl
ZmluZWQgZnVuY3Rpb24gaXMgY2FsbGVkLCB3ZSBoYXZlIHRvCi0gICAgICAgICAgICAvLyBjb25z
ZXJ2YXRpdmVseSBhc3N1bWUgaXQgdG8gY29udGFpbiBncmFkaWVudCBvcGVyYXRpb25zCi0gICAg
ICAgICAgICBtR3JhZGllbnRPcGVyYXRpb24gPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgcmV0dXJuICFtR3JhZGllbnRPcGVyYXRpb247Ci19Ci0KLWJvb2wgY29udGFpbnNHcmFkaWVu
dE9wZXJhdGlvbihUSW50ZXJtTm9kZSAqbm9kZSkKLXsKLSAgICBEZXRlY3RHcmFkaWVudE9wZXJh
dGlvbiBkZXRlY3RHcmFkaWVudE9wZXJhdGlvbjsKLSAgICByZXR1cm4gZGV0ZWN0R3JhZGllbnRP
cGVyYXRpb24udHJhdmVyc2Uobm9kZSk7Ci19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU1MjBiZDViMDJmNWEyZjM1ZTg5Yzg5N2YwZjE0MGIz
ZWMxMjNkNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5o
CisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAx
MiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0vLyBDb250YWlu
cyBhbmFseXNpcyB1dGlsaXRpZXMgZm9yIGRlYWxpbmcgd2l0aCBITFNMJ3MgbGFjayBvZiBzdXBw
b3J0IGZvcgotLy8gdGhlIHVzZSBvZiBpbnRyaW5zaWMgZnVuY3Rpb25zIHdoaWNoIChpbXBsaWNp
dGx5IG9yIGV4cGxpY2l0bHkpIGNvbXB1dGUKLS8vIGdyYWRpZW50cyBvZiBmdW5jdGlvbnMgd2l0
aCBkaXNjb250aW51aXRpZXMuIAotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9ERVRFQ1RESVNDT05U
SU5VSVRZX0hfCi0jZGVmaW5lIENPTVBJTEVSX0RFVEVDVERJU0NPTlRJTlVJVFlfSF8KLQotI2lu
Y2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotCi1uYW1lc3BhY2Ugc2gKLXsKLS8vIENo
ZWNrcyB3aGV0aGVyIGEgbG9vcCBjYW4gcnVuIGZvciBhIHZhcmlhYmxlIG51bWJlciBvZiBpdGVy
YXRpb25zCi1jbGFzcyBEZXRlY3RMb29wRGlzY29udGludWl0eSA6IHB1YmxpYyBUSW50ZXJtVHJh
dmVyc2VyCi17Ci0gIHB1YmxpYzoKLSAgICBib29sIHRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2Rl
KTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVElu
dGVybUJyYW5jaCAqbm9kZSk7Ci0gICAgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRl
cm1Mb29wICpsb29wKTsKLSAgICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50
ZXJtQWdncmVnYXRlICpub2RlKTsKLQotICAgIGludCBtTG9vcERlcHRoOwotICAgIGJvb2wgbUxv
b3BEaXNjb250aW51aXR5OwotfTsKLQotYm9vbCBjb250YWluc0xvb3BEaXNjb250aW51aXR5KFRJ
bnRlcm1Ob2RlICpub2RlKTsKLQotLy8gQ2hlY2tzIGZvciBpbnRyaW5zaWMgZnVuY3Rpb25zIHdo
aWNoIGNvbXB1dGUgZ3JhZGllbnRzCi1jbGFzcyBEZXRlY3RHcmFkaWVudE9wZXJhdGlvbiA6IHB1
YmxpYyBUSW50ZXJtVHJhdmVyc2VyCi17Ci0gIHB1YmxpYzoKLSAgICBib29sIHRyYXZlcnNlKFRJ
bnRlcm1Ob2RlICpub2RlKTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgYm9vbCB2aXNpdFVuYXJ5KFZp
c2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUpOwotICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUo
VmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUpOwotCi0gICAgYm9vbCBtR3JhZGll
bnRPcGVyYXRpb247Ci19OwotCi1ib29sIGNvbnRhaW5zR3JhZGllbnRPcGVyYXRpb24oVEludGVy
bU5vZGUgKm5vZGUpOwotCi19Ci0KLSNlbmRpZiAgIC8vIENPTVBJTEVSX0RFVEVDVERJU0NPTlRJ
TlVJVFlfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9EaWFnbm9zdGljcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
RGlhZ25vc3RpY3MuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTM4YzQxYTY1
NDIzMjFlODU2NDI2YmI5M2QyNzE0MjkzNjA5MjI0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9EaWFnbm9zdGljcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vLwotLy8g
Q29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL0RpYWdub3N0aWNzLmgiCi0KLSNpbmNsdWRlICJj
b21waWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCi0jaW5jbHVk
ZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL1NvdXJjZUxvY2F0aW9uLmgiCi0KLVREaWFnbm9zdGlj
czo6VERpYWdub3N0aWNzKFRJbmZvU2luayYgaW5mb1NpbmspIDoKLSAgICBtSW5mb1NpbmsoaW5m
b1NpbmspLAotICAgIG1OdW1FcnJvcnMoMCksCi0gICAgbU51bVdhcm5pbmdzKDApCi17Ci19Ci0K
LVREaWFnbm9zdGljczo6flREaWFnbm9zdGljcygpCi17Ci19Ci0KLXZvaWQgVERpYWdub3N0aWNz
Ojp3cml0ZUluZm8oU2V2ZXJpdHkgc2V2ZXJpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcmVhc29uLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdG9rZW4sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHRyYSkKLXsKLSAgICBUUHJlZml4VHlwZSBwcmVm
aXggPSBFUHJlZml4Tm9uZTsKLSAgICBzd2l0Y2ggKHNldmVyaXR5KQotICAgIHsKLSAgICAgIGNh
c2UgRVJST1I6Ci0gICAgICAgICsrbU51bUVycm9yczsKLSAgICAgICAgcHJlZml4ID0gRVByZWZp
eEVycm9yOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgV0FSTklORzoKLSAgICAgICAgKytt
TnVtV2FybmluZ3M7Ci0gICAgICAgIHByZWZpeCA9IEVQcmVmaXhXYXJuaW5nOwotICAgICAgICBi
cmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIFRJbmZvU2lua0Jhc2UmIHNpbmsgPSBtSW5mb1NpbmsuaW5mbzsK
LSAgICAvKiBWQysrIGZvcm1hdDogZmlsZShsaW5lbnVtKSA6IGVycm9yICM6ICd0b2tlbicgOiBl
eHRyYWluZm8gKi8KLSAgICBzaW5rLnByZWZpeChwcmVmaXgpOwotICAgIHNpbmsubG9jYXRpb24o
bG9jLmZpbGUsIGxvYy5saW5lKTsKLSAgICBzaW5rIDw8ICInIiA8PCB0b2tlbiA8PCAgIicgOiAi
IDw8IHJlYXNvbiA8PCAiICIgPDwgZXh0cmEgPDwgIlxuIjsKLX0KLQotdm9pZCBURGlhZ25vc3Rp
Y3M6OndyaXRlRGVidWcoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cikKLXsKLSAgICBtSW5mb1Npbmsu
ZGVidWcgPDwgc3RyOwotfQotCi12b2lkIFREaWFnbm9zdGljczo6cHJpbnQoSUQgaWQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpCi17Ci0gICAgd3Jp
dGVJbmZvKHNldmVyaXR5KGlkKSwgbG9jLCBtZXNzYWdlKGlkKSwgdGV4dCwgIiIpOwotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNz
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I3MWJiMTIwNDIyOGE3NDczNzRhMjZlZmQ4
OWM3YzY3MmJiNTZiOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaAor
KysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENP
TVBJTEVSX0RJQUdOT1NUSUNTX0hfCi0jZGVmaW5lIENPTVBJTEVSX0RJQUdOT1NUSUNTX0hfCi0K
LSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NCYXNlLmgiCi0KLWNs
YXNzIFRJbmZvU2luazsKLQotY2xhc3MgVERpYWdub3N0aWNzIDogcHVibGljIHBwOjpEaWFnbm9z
dGljcwotewotICBwdWJsaWM6Ci0gICAgVERpYWdub3N0aWNzKFRJbmZvU2luayYgaW5mb1Npbmsp
OwotICAgIHZpcnR1YWwgflREaWFnbm9zdGljcygpOwotCi0gICAgVEluZm9TaW5rJiBpbmZvU2lu
aygpIHsgcmV0dXJuIG1JbmZvU2luazsgfQotCi0gICAgaW50IG51bUVycm9ycygpIGNvbnN0IHsg
cmV0dXJuIG1OdW1FcnJvcnM7IH0KLSAgICBpbnQgbnVtV2FybmluZ3MoKSBjb25zdCB7IHJldHVy
biBtTnVtV2FybmluZ3M7IH0KLQotICAgIHZvaWQgd3JpdGVJbmZvKFNldmVyaXR5IHNldmVyaXR5
LAotICAgICAgICAgICAgICAgICAgIGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAotICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiByZWFzb24sCi0gICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRva2VuLAotICAgICAgICAgICAgICAgICAgIGNvbnN0
IHN0ZDo6c3RyaW5nJiBleHRyYSk7Ci0KLSAgICB2b2lkIHdyaXRlRGVidWcoY29uc3Qgc3RkOjpz
dHJpbmcmIHN0cik7Ci0KLSAgcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBwcmludChJRCBp
ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2Ms
Ci0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KTsKLQotICBw
cml2YXRlOgotICAgIFRJbmZvU2luayYgbUluZm9TaW5rOwotICAgIGludCBtTnVtRXJyb3JzOwot
ICAgIGludCBtTnVtV2FybmluZ3M7Ci19OwotCi0jZW5kaWYgIC8vIENPTVBJTEVSX0RJQUdOT1NU
SUNTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
RGlyZWN0aXZlSGFuZGxlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvRGlyZWN0aXZlSGFuZGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQx
ZjZhYjNhZjViMDE1YTY3MmFiMTZjYmY2ODc4MzQ3MGI0YmM3ZmMuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTYxICsw
LDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxl
ci5oIgotCi0jaW5jbHVkZSA8c3N0cmVhbT4KLQotI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgi
Ci0jaW5jbHVkZSAiY29tcGlsZXIvRGlhZ25vc3RpY3MuaCIKLQotc3RhdGljIFRCZWhhdmlvciBn
ZXRCZWhhdmlvcihjb25zdCBzdGQ6OnN0cmluZyYgc3RyKQotewotICAgIHN0YXRpYyBjb25zdCBz
dGQ6OnN0cmluZyBrUmVxdWlyZSgicmVxdWlyZSIpOwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0
cmluZyBrRW5hYmxlKCJlbmFibGUiKTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0Rp
c2FibGUoImRpc2FibGUiKTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga1dhcm4oIndh
cm4iKTsKLQotICAgIGlmIChzdHIgPT0ga1JlcXVpcmUpIHJldHVybiBFQmhSZXF1aXJlOwotICAg
IGVsc2UgaWYgKHN0ciA9PSBrRW5hYmxlKSByZXR1cm4gRUJoRW5hYmxlOwotICAgIGVsc2UgaWYg
KHN0ciA9PSBrRGlzYWJsZSkgcmV0dXJuIEVCaERpc2FibGU7Ci0gICAgZWxzZSBpZiAoc3RyID09
IGtXYXJuKSByZXR1cm4gRUJoV2FybjsKLSAgICByZXR1cm4gRUJoVW5kZWZpbmVkOwotfQotCi1U
RGlyZWN0aXZlSGFuZGxlcjo6VERpcmVjdGl2ZUhhbmRsZXIoVEV4dGVuc2lvbkJlaGF2aW9yJiBl
eHRCZWhhdmlvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURGlhZ25v
c3RpY3MmIGRpYWdub3N0aWNzKQotICAgIDogbUV4dGVuc2lvbkJlaGF2aW9yKGV4dEJlaGF2aW9y
KSwKLSAgICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykKLXsKLX0KLQotVERpcmVjdGl2ZUhh
bmRsZXI6On5URGlyZWN0aXZlSGFuZGxlcigpCi17Ci19Ci0KLXZvaWQgVERpcmVjdGl2ZUhhbmRs
ZXI6OmhhbmRsZUVycm9yKGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1zZykKLXsKLSAg
ICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6RVJST1IsIGxvYywgbXNn
LCAiIiwgIiIpOwotfQotCi12b2lkIFREaXJlY3RpdmVIYW5kbGVyOjpoYW5kbGVQcmFnbWEoY29u
c3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKQotewotICAgIHN0YXRpYyBj
b25zdCBzdGQ6OnN0cmluZyBrU1RER0woIlNUREdMIik7Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6
c3RyaW5nIGtPcHRpbWl6ZSgib3B0aW1pemUiKTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJp
bmcga0RlYnVnKCJkZWJ1ZyIpOwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrT24oIm9u
Iik7Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtPZmYoIm9mZiIpOwotCi0gICAgYm9v
bCBpbnZhbGlkVmFsdWUgPSBmYWxzZTsKLSAgICBpZiAobmFtZSA9PSBrU1RER0wpCi0gICAgewot
ICAgICAgICAvLyBUaGUgU1RER0wgcHJhZ21hIGlzIHVzZWQgdG8gcmVzZXJ2ZSBwcmFnbWFzIGZv
ciB1c2UgYnkgZnV0dXJlCi0gICAgICAgIC8vIHJldmlzaW9ucyBvZiBHTFNMLiBJZ25vcmUgaXQu
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZWxzZSBpZiAobmFtZSA9PSBrT3B0aW1pemUp
Ci0gICAgewotICAgICAgICBpZiAodmFsdWUgPT0ga09uKSBtUHJhZ21hLm9wdGltaXplID0gdHJ1
ZTsKLSAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0ga09mZikgbVByYWdtYS5vcHRpbWl6ZSA9IGZh
bHNlOwotICAgICAgICBlbHNlIGludmFsaWRWYWx1ZSA9IHRydWU7Ci0gICAgfQotICAgIGVsc2Ug
aWYgKG5hbWUgPT0ga0RlYnVnKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlID09IGtPbikgbVBy
YWdtYS5kZWJ1ZyA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlID09IGtPZmYpIG1QcmFn
bWEuZGVidWcgPSBmYWxzZTsKLSAgICAgICAgZWxzZSBpbnZhbGlkVmFsdWUgPSB0cnVlOwotICAg
IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBtRGlhZ25vc3RpY3MucmVwb3J0KHBwOjpEaWFn
bm9zdGljczo6VU5SRUNPR05JWkVEX1BSQUdNQSwgbG9jLCBuYW1lKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmIChpbnZhbGlkVmFsdWUpCi0gICAgICBtRGlhZ25vc3RpY3Mud3Jp
dGVJbmZvKHBwOjpEaWFnbm9zdGljczo6RVJST1IsIGxvYywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImludmFsaWQgcHJhZ21hIHZhbHVlIiwgdmFsdWUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICInb24nIG9yICdvZmYnIGV4cGVjdGVkIik7Ci19Ci0KLXZvaWQgVERpcmVj
dGl2ZUhhbmRsZXI6OmhhbmRsZUV4dGVuc2lvbihjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxv
YywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0
cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBzdGQ6OnN0cmluZyYgYmVoYXZpb3IpCi17Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5n
IGtFeHRBbGwoImFsbCIpOwotCi0gICAgVEJlaGF2aW9yIGJlaGF2aW9yVmFsID0gZ2V0QmVoYXZp
b3IoYmVoYXZpb3IpOwotICAgIGlmIChiZWhhdmlvclZhbCA9PSBFQmhVbmRlZmluZWQpCi0gICAg
ewotICAgICAgICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6RVJST1Is
IGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVoYXZpb3IiLCBuYW1lLCAi
aW52YWxpZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG5hbWUgPT0ga0V4
dEFsbCkKLSAgICB7Ci0gICAgICAgIGlmIChiZWhhdmlvclZhbCA9PSBFQmhSZXF1aXJlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGlj
czo6RVJST1IsIGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4dGVu
c2lvbiIsIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3Qg
aGF2ZSAncmVxdWlyZScgYmVoYXZpb3IiKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChi
ZWhhdmlvclZhbCA9PSBFQmhFbmFibGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EaWFnbm9z
dGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpFUlJPUiwgbG9jLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZXh0ZW5zaW9uIiwgbmFtZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBoYXZlICdlbmFibGUnIGJlaGF2aW9yIik7Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKFRFeHRl
bnNpb25CZWhhdmlvcjo6aXRlcmF0b3IgaXRlciA9IG1FeHRlbnNpb25CZWhhdmlvci5iZWdpbigp
OwotICAgICAgICAgICAgICAgICBpdGVyICE9IG1FeHRlbnNpb25CZWhhdmlvci5lbmQoKTsgKytp
dGVyKQotICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBURXh0ZW5zaW9uQmVoYXZpb3I6Oml0
ZXJhdG9yIGl0ZXIgPSBtRXh0ZW5zaW9uQmVoYXZpb3IuZmluZChuYW1lKTsKLSAgICBpZiAoaXRl
ciAhPSBtRXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCkpCi0gICAgewotICAgICAgICBpdGVyLT5zZWNv
bmQgPSBiZWhhdmlvclZhbDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHBwOjpEaWFn
bm9zdGljczo6U2V2ZXJpdHkgc2V2ZXJpdHkgPSBwcDo6RGlhZ25vc3RpY3M6OkVSUk9SOwotICAg
IHN3aXRjaCAoYmVoYXZpb3JWYWwpIHsKLSAgICAgIGNhc2UgRUJoUmVxdWlyZToKLSAgICAgICAg
c2V2ZXJpdHkgPSBwcDo6RGlhZ25vc3RpY3M6OkVSUk9SOwotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgRUJoRW5hYmxlOgotICAgICAgY2FzZSBFQmhXYXJuOgotICAgICAgY2FzZSBFQmhEaXNh
YmxlOgotICAgICAgICBzZXZlcml0eSA9IHBwOjpEaWFnbm9zdGljczo6V0FSTklORzsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgbURpYWdub3N0aWNzLndyaXRlSW5mbyhzZXZlcml0eSwgbG9j
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4dGVuc2lvbiIsIG5hbWUsICJpcyBub3Qg
c3VwcG9ydGVkIik7Ci19Ci0KLXZvaWQgVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZVZlcnNpb24o
Y29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCB2ZXJzaW9uKQotewotICAgIHN0YXRpYyBjb25zdCBpbnQga1ZlcnNp
b24gPSAxMDA7Ci0KLSAgICBpZiAodmVyc2lvbiAhPSBrVmVyc2lvbikKLSAgICB7Ci0gICAgICAg
IHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKLSAgICAgICAgc3RyZWFtIDw8IHZlcnNpb247Ci0g
ICAgICAgIHN0ZDo6c3RyaW5nIHN0ciA9IHN0cmVhbS5zdHIoKTsKLSAgICAgICAgbURpYWdub3N0
aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OkVSUk9SLCBsb2MsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInZlcnNpb24gbnVtYmVyIiwgc3RyLCAibm90IHN1cHBvcnRlZCIp
OwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9EaXJlY3RpdmVIYW5kbGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvRGlyZWN0aXZlSGFuZGxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5
NWNhNTlkNmZlNWRlZWE2ZDdmYjQ1ODdlZTUxNmM4M2FiNWQwOWZjLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCww
IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9ESVJFQ1RJVkVfSEFORExFUl9I
XwotI2RlZmluZSBDT01QSUxFUl9ESVJFQ1RJVkVfSEFORExFUl9IXwotCi0jaW5jbHVkZSAiY29t
cGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaCIKLSNpbmNsdWRlICJjb21waWxlci9QcmFnbWEuaCIK
LSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlSGFuZGxlckJhc2UuaCIK
LQotY2xhc3MgVERpYWdub3N0aWNzOwotCi1jbGFzcyBURGlyZWN0aXZlSGFuZGxlciA6IHB1Ymxp
YyBwcDo6RGlyZWN0aXZlSGFuZGxlcgotewotICBwdWJsaWM6Ci0gICAgVERpcmVjdGl2ZUhhbmRs
ZXIoVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciwKLSAgICAgICAgICAgICAgICAgICAg
ICBURGlhZ25vc3RpY3MmIGRpYWdub3N0aWNzKTsKLSAgICB2aXJ0dWFsIH5URGlyZWN0aXZlSGFu
ZGxlcigpOwotCi0gICAgY29uc3QgVFByYWdtYSYgcHJhZ21hKCkgY29uc3QgeyByZXR1cm4gbVBy
YWdtYTsgfQotICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0ZW5zaW9uQmVoYXZpb3Io
KSBjb25zdCB7IHJldHVybiBtRXh0ZW5zaW9uQmVoYXZpb3I7IH0KLQotICAgIHZpcnR1YWwgdm9p
ZCBoYW5kbGVFcnJvcihjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1zZyk7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgaGFuZGxlUHJhZ21hKGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpOwotCi0gICAg
dmlydHVhbCB2b2lkIGhhbmRsZUV4dGVuc2lvbihjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxv
YywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBu
YW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcm
IGJlaGF2aW9yKTsKLQotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVWZXJzaW9uKGNvbnN0IHBwOjpT
b3VyY2VMb2NhdGlvbiYgbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2
ZXJzaW9uKTsKLQotICBwcml2YXRlOgotICAgIFRQcmFnbWEgbVByYWdtYTsKLSAgICBURXh0ZW5z
aW9uQmVoYXZpb3ImIG1FeHRlbnNpb25CZWhhdmlvcjsKLSAgICBURGlhZ25vc3RpY3MmIG1EaWFn
bm9zdGljczsKLX07Ci0KLSNlbmRpZiAgLy8gQ09NUElMRVJfRElSRUNUSVZFX0hBTkRMRVJfSF8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9FeHRlbnNp
b25CZWhhdmlvci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0V4dGVu
c2lvbkJlaGF2aW9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjMTU5NWZiMjEy
MWE4ZWE3NmJiYTIyNTdjNmYzNjM1NmVmMDBlOWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0V4dGVuc2lvbkJlaGF2aW9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIF9FWFRFTlNJT05fQkVIQVZJT1JfSU5DTFVERURfCi0j
ZGVmaW5lIF9FWFRFTlNJT05fQkVIQVZJT1JfSU5DTFVERURfCi0KLSNpbmNsdWRlIDxtYXA+Ci0j
aW5jbHVkZSA8c3RyaW5nPgotCi10eXBlZGVmIGVudW0KLXsKLSAgICBFQmhSZXF1aXJlLAotICAg
IEVCaEVuYWJsZSwKLSAgICBFQmhXYXJuLAotICAgIEVCaERpc2FibGUsCi0gICAgRUJoVW5kZWZp
bmVkCi19IFRCZWhhdmlvcjsKLQotaW5saW5lIGNvbnN0IGNoYXIqIGdldEJlaGF2aW9yU3RyaW5n
KFRCZWhhdmlvciBiKQotewotICAgIHN3aXRjaChiKQotICAgIHsKLSAgICAgIGNhc2UgRUJoUmVx
dWlyZTogcmV0dXJuICJyZXF1aXJlIjsKLSAgICAgIGNhc2UgRUJoRW5hYmxlOiByZXR1cm4gImVu
YWJsZSI7Ci0gICAgICBjYXNlIEVCaFdhcm46IHJldHVybiAid2FybiI7Ci0gICAgICBjYXNlIEVC
aERpc2FibGU6IHJldHVybiAiZGlzYWJsZSI7Ci0gICAgICBkZWZhdWx0OiByZXR1cm4gTlVMTDsK
LSAgICB9Ci19Ci0KLS8vIE1hcHBpbmcgYmV0d2VlbiBleHRlbnNpb24gbmFtZSBhbmQgYmVoYXZp
b3IuCi10eXBlZGVmIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBUQmVoYXZpb3I+IFRFeHRlbnNpb25C
ZWhhdmlvcjsKLQotI2VuZGlmIC8vIF9FWFRFTlNJT05fVEFCTEVfSU5DTFVERURfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRm9yTG9vcFVucm9sbC5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRm9yTG9vcFVucm9sbC5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3YTEzZWFiYWJiMTIyMjA0MDAwZmM1
MTlkNjY5ZGZmODRjMmMzZDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJv
bGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjE1ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLSNpbmNsdWRlICJjb21waWxlci9Gb3JMb29wVW5yb2xsLmgiCi0KLW5hbWVzcGFjZSB7Ci0K
LWNsYXNzIEludGVnZXJGb3JMb29wVW5yb2xsTWFya2VyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJz
ZXIgewotcHVibGljOgotCi0gICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCwgVEludGVy
bUxvb3AqIG5vZGUpCi0gICAgewotICAgICAgICAvLyBUaGlzIGlzIGNhbGxlZCBhZnRlciBWYWxp
ZGF0ZUxpbWl0YXRpb25zIHBhc3MsIHNvIGFsbCB0aGUgQVNTRVJUCi0gICAgICAgIC8vIHNob3Vs
ZCBuZXZlciBmYWlsLgotICAgICAgICAvLyBTZWUgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRh
dGVGb3JMb29wSW5pdCgpLgotICAgICAgICBBU1NFUlQobm9kZSk7Ci0gICAgICAgIEFTU0VSVChu
b2RlLT5nZXRUeXBlKCkgPT0gRUxvb3BGb3IpOwotICAgICAgICBBU1NFUlQobm9kZS0+Z2V0SW5p
dCgpKTsKLSAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSogZGVjbCA9IG5vZGUtPmdldEluaXQoKS0+
Z2V0QXNBZ2dyZWdhdGUoKTsKLSAgICAgICAgQVNTRVJUKGRlY2wgJiYgZGVjbC0+Z2V0T3AoKSA9
PSBFT3BEZWNsYXJhdGlvbik7Ci0gICAgICAgIFRJbnRlcm1TZXF1ZW5jZSYgZGVjbFNlcSA9IGRl
Y2wtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAgIEFTU0VSVChkZWNsU2VxLnNpemUoKSA9PSAxKTsK
LSAgICAgICAgVEludGVybUJpbmFyeSogZGVjbEluaXQgPSBkZWNsU2VxWzBdLT5nZXRBc0JpbmFy
eU5vZGUoKTsKLSAgICAgICAgQVNTRVJUKGRlY2xJbml0ICYmIGRlY2xJbml0LT5nZXRPcCgpID09
IEVPcEluaXRpYWxpemUpOwotICAgICAgICBBU1NFUlQoZGVjbEluaXQtPmdldExlZnQoKSk7Ci0g
ICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGRlY2xJbml0LT5nZXRMZWZ0KCktPmdldEFz
U3ltYm9sTm9kZSgpOwotICAgICAgICBBU1NFUlQoc3ltYm9sKTsKLSAgICAgICAgVEJhc2ljVHlw
ZSB0eXBlID0gc3ltYm9sLT5nZXRCYXNpY1R5cGUoKTsKLSAgICAgICAgQVNTRVJUKHR5cGUgPT0g
RWJ0SW50IHx8IHR5cGUgPT0gRWJ0RmxvYXQpOwotICAgICAgICBpZiAodHlwZSA9PSBFYnRJbnQp
Ci0gICAgICAgICAgICBub2RlLT5zZXRVbnJvbGxGbGFnKHRydWUpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLX07Ci0KLX0gIC8vIGFub255bW91cyBuYW1lcHNhY2UKLQotdm9pZCBG
b3JMb29wVW5yb2xsOjpGaWxsTG9vcEluZGV4SW5mbyhUSW50ZXJtTG9vcCogbm9kZSwgVExvb3BJ
bmRleEluZm8mIGluZm8pCi17Ci0gICAgQVNTRVJUKG5vZGUtPmdldFR5cGUoKSA9PSBFTG9vcEZv
cik7Ci0gICAgQVNTRVJUKG5vZGUtPmdldFVucm9sbEZsYWcoKSk7Ci0KLSAgICBUSW50ZXJtTm9k
ZSogaW5pdCA9IG5vZGUtPmdldEluaXQoKTsKLSAgICBBU1NFUlQoaW5pdCAhPSBOVUxMKTsKLSAg
ICBUSW50ZXJtQWdncmVnYXRlKiBkZWNsID0gaW5pdC0+Z2V0QXNBZ2dyZWdhdGUoKTsKLSAgICBB
U1NFUlQoKGRlY2wgIT0gTlVMTCkgJiYgKGRlY2wtPmdldE9wKCkgPT0gRU9wRGVjbGFyYXRpb24p
KTsKLSAgICBUSW50ZXJtU2VxdWVuY2UmIGRlY2xTZXEgPSBkZWNsLT5nZXRTZXF1ZW5jZSgpOwot
ICAgIEFTU0VSVChkZWNsU2VxLnNpemUoKSA9PSAxKTsKLSAgICBUSW50ZXJtQmluYXJ5KiBkZWNs
SW5pdCA9IGRlY2xTZXFbMF0tPmdldEFzQmluYXJ5Tm9kZSgpOwotICAgIEFTU0VSVCgoZGVjbElu
aXQgIT0gTlVMTCkgJiYgKGRlY2xJbml0LT5nZXRPcCgpID09IEVPcEluaXRpYWxpemUpKTsKLSAg
ICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBkZWNsSW5pdC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJv
bE5vZGUoKTsKLSAgICBBU1NFUlQoc3ltYm9sICE9IE5VTEwpOwotICAgIEFTU0VSVChzeW1ib2wt
PmdldEJhc2ljVHlwZSgpID09IEVidEludCk7Ci0KLSAgICBpbmZvLmlkID0gc3ltYm9sLT5nZXRJ
ZCgpOwotCi0gICAgQVNTRVJUKGRlY2xJbml0LT5nZXRSaWdodCgpICE9IE5VTEwpOwotICAgIFRJ
bnRlcm1Db25zdGFudFVuaW9uKiBpbml0Tm9kZSA9IGRlY2xJbml0LT5nZXRSaWdodCgpLT5nZXRB
c0NvbnN0YW50VW5pb24oKTsKLSAgICBBU1NFUlQoaW5pdE5vZGUgIT0gTlVMTCk7Ci0KLSAgICBp
bmZvLmluaXRWYWx1ZSA9IGV2YWx1YXRlSW50Q29uc3RhbnQoaW5pdE5vZGUpOwotICAgIGluZm8u
Y3VycmVudFZhbHVlID0gaW5mby5pbml0VmFsdWU7Ci0KLSAgICBUSW50ZXJtTm9kZSogY29uZCA9
IG5vZGUtPmdldENvbmRpdGlvbigpOwotICAgIEFTU0VSVChjb25kICE9IE5VTEwpOwotICAgIFRJ
bnRlcm1CaW5hcnkqIGJpbk9wID0gY29uZC0+Z2V0QXNCaW5hcnlOb2RlKCk7Ci0gICAgQVNTRVJU
KGJpbk9wICE9IE5VTEwpOwotICAgIEFTU0VSVChiaW5PcC0+Z2V0UmlnaHQoKSAhPSBOVUxMKTsK
LSAgICBBU1NFUlQoYmluT3AtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpICE9IE5V
TEwpOwotCi0gICAgaW5mby5pbmNyZW1lbnRWYWx1ZSA9IGdldExvb3BJbmNyZW1lbnQobm9kZSk7
Ci0gICAgaW5mby5zdG9wVmFsdWUgPSBldmFsdWF0ZUludENvbnN0YW50KAotICAgICAgICBiaW5P
cC0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCkpOwotICAgIGluZm8ub3AgPSBiaW5P
cC0+Z2V0T3AoKTsKLX0KLQotdm9pZCBGb3JMb29wVW5yb2xsOjpTdGVwKCkKLXsKLSAgICBBU1NF
UlQobUxvb3BJbmRleFN0YWNrLnNpemUoKSA+IDApOwotICAgIFRMb29wSW5kZXhJbmZvJiBpbmZv
ID0gbUxvb3BJbmRleFN0YWNrW21Mb29wSW5kZXhTdGFjay5zaXplKCkgLSAxXTsKLSAgICBpbmZv
LmN1cnJlbnRWYWx1ZSArPSBpbmZvLmluY3JlbWVudFZhbHVlOwotfQotCi1ib29sIEZvckxvb3BV
bnJvbGw6OlNhdGlzZmllc0xvb3BDb25kaXRpb24oKQotewotICAgIEFTU0VSVChtTG9vcEluZGV4
U3RhY2suc2l6ZSgpID4gMCk7Ci0gICAgVExvb3BJbmRleEluZm8mIGluZm8gPSBtTG9vcEluZGV4
U3RhY2tbbUxvb3BJbmRleFN0YWNrLnNpemUoKSAtIDFdOwotICAgIC8vIFJlbGF0aW9uYWwgb3Bl
cmF0b3IgaXMgb25lIG9mOiA+ID49IDwgPD0gPT0gb3IgIT0uCi0gICAgc3dpdGNoIChpbmZvLm9w
KSB7Ci0gICAgICBjYXNlIEVPcEVxdWFsOgotICAgICAgICByZXR1cm4gKGluZm8uY3VycmVudFZh
bHVlID09IGluZm8uc3RvcFZhbHVlKTsKLSAgICAgIGNhc2UgRU9wTm90RXF1YWw6Ci0gICAgICAg
IHJldHVybiAoaW5mby5jdXJyZW50VmFsdWUgIT0gaW5mby5zdG9wVmFsdWUpOwotICAgICAgY2Fz
ZSBFT3BMZXNzVGhhbjoKLSAgICAgICAgcmV0dXJuIChpbmZvLmN1cnJlbnRWYWx1ZSA8IGluZm8u
c3RvcFZhbHVlKTsKLSAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46Ci0gICAgICAgIHJldHVybiAo
aW5mby5jdXJyZW50VmFsdWUgPiBpbmZvLnN0b3BWYWx1ZSk7Ci0gICAgICBjYXNlIEVPcExlc3NU
aGFuRXF1YWw6Ci0gICAgICAgIHJldHVybiAoaW5mby5jdXJyZW50VmFsdWUgPD0gaW5mby5zdG9w
VmFsdWUpOwotICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgotICAgICAgICByZXR1cm4g
KGluZm8uY3VycmVudFZhbHVlID49IGluZm8uc3RvcFZhbHVlKTsKLSAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBGb3JMb29wVW5yb2xsOjpOZWVkc1RvUmVwbGFjZVN5bWJvbFdpdGhWYWx1ZShUSW50ZXJtU3lt
Ym9sKiBzeW1ib2wpCi17Ci0gICAgZm9yIChUVmVjdG9yPFRMb29wSW5kZXhJbmZvPjo6aXRlcmF0
b3IgaSA9IG1Mb29wSW5kZXhTdGFjay5iZWdpbigpOwotICAgICAgICAgaSAhPSBtTG9vcEluZGV4
U3RhY2suZW5kKCk7Ci0gICAgICAgICArK2kpIHsKLSAgICAgICAgaWYgKGktPmlkID09IHN5bWJv
bC0+Z2V0SWQoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLWludCBGb3JMb29wVW5yb2xsOjpHZXRMb29wSW5kZXhWYWx1ZShUSW50ZXJt
U3ltYm9sKiBzeW1ib2wpCi17Ci0gICAgZm9yIChUVmVjdG9yPFRMb29wSW5kZXhJbmZvPjo6aXRl
cmF0b3IgaSA9IG1Mb29wSW5kZXhTdGFjay5iZWdpbigpOwotICAgICAgICAgaSAhPSBtTG9vcElu
ZGV4U3RhY2suZW5kKCk7Ci0gICAgICAgICArK2kpIHsKLSAgICAgICAgaWYgKGktPmlkID09IHN5
bWJvbC0+Z2V0SWQoKSkKLSAgICAgICAgICAgIHJldHVybiBpLT5jdXJyZW50VmFsdWU7Ci0gICAg
fQotICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEZvckxv
b3BVbnJvbGw6OlB1c2goVExvb3BJbmRleEluZm8mIGluZm8pCi17Ci0gICAgbUxvb3BJbmRleFN0
YWNrLnB1c2hfYmFjayhpbmZvKTsKLX0KLQotdm9pZCBGb3JMb29wVW5yb2xsOjpQb3AoKQotewot
ICAgIG1Mb29wSW5kZXhTdGFjay5wb3BfYmFjaygpOwotfQotCi0vLyBzdGF0aWMKLXZvaWQgRm9y
TG9vcFVucm9sbDo6TWFya0Zvckxvb3BzV2l0aEludGVnZXJJbmRpY2VzRm9yVW5yb2xsaW5nKAot
ICAgIFRJbnRlcm1Ob2RlKiByb290KQotewotICAgIEFTU0VSVChyb290KTsKLQotICAgIEludGVn
ZXJGb3JMb29wVW5yb2xsTWFya2VyIG1hcmtlcjsKLSAgICByb290LT50cmF2ZXJzZSgmbWFya2Vy
KTsKLX0KLQotaW50IEZvckxvb3BVbnJvbGw6OmdldExvb3BJbmNyZW1lbnQoVEludGVybUxvb3Aq
IG5vZGUpCi17Ci0gICAgVEludGVybU5vZGUqIGV4cHIgPSBub2RlLT5nZXRFeHByZXNzaW9uKCk7
Ci0gICAgQVNTRVJUKGV4cHIgIT0gTlVMTCk7Ci0gICAgLy8gZm9yIGV4cHJlc3Npb24gaGFzIG9u
ZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1zOgotICAgIC8vICAgICBsb29wX2luZGV4KysKLSAgICAv
LyAgICAgbG9vcF9pbmRleC0tCi0gICAgLy8gICAgIGxvb3BfaW5kZXggKz0gY29uc3RhbnRfZXhw
cmVzc2lvbgotICAgIC8vICAgICBsb29wX2luZGV4IC09IGNvbnN0YW50X2V4cHJlc3Npb24KLSAg
ICAvLyAgICAgKytsb29wX2luZGV4Ci0gICAgLy8gICAgIC0tbG9vcF9pbmRleAotICAgIC8vIFRo
ZSBsYXN0IHR3byBmb3JtcyBhcmUgbm90IHNwZWNpZmllZCBpbiB0aGUgc3BlYywgYnV0IEkgYW0g
YXNzdW1pbmcKLSAgICAvLyBpdHMgYW4gb3ZlcnNpZ2h0LgotICAgIFRJbnRlcm1VbmFyeSogdW5P
cCA9IGV4cHItPmdldEFzVW5hcnlOb2RlKCk7Ci0gICAgVEludGVybUJpbmFyeSogYmluT3AgPSB1
bk9wID8gTlVMTCA6IGV4cHItPmdldEFzQmluYXJ5Tm9kZSgpOwotCi0gICAgVE9wZXJhdG9yIG9w
ID0gRU9wTnVsbDsKLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogaW5jcmVtZW50Tm9kZSA9IE5V
TEw7Ci0gICAgaWYgKHVuT3AgIT0gTlVMTCkgewotICAgICAgICBvcCA9IHVuT3AtPmdldE9wKCk7
Ci0gICAgfSBlbHNlIGlmIChiaW5PcCAhPSBOVUxMKSB7Ci0gICAgICAgIG9wID0gYmluT3AtPmdl
dE9wKCk7Ci0gICAgICAgIEFTU0VSVChiaW5PcC0+Z2V0UmlnaHQoKSAhPSBOVUxMKTsKLSAgICAg
ICAgaW5jcmVtZW50Tm9kZSA9IGJpbk9wLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24o
KTsKLSAgICAgICAgQVNTRVJUKGluY3JlbWVudE5vZGUgIT0gTlVMTCk7Ci0gICAgfQotCi0gICAg
aW50IGluY3JlbWVudCA9IDA7Ci0gICAgLy8gVGhlIG9wZXJhdG9yIGlzIG9uZSBvZjogKysgLS0g
Kz0gLT0uCi0gICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6
Ci0gICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OgotICAgICAgICAgICAgQVNTRVJUKCh1bk9w
ICE9IE5VTEwpICYmIChiaW5PcCA9PSBOVUxMKSk7Ci0gICAgICAgICAgICBpbmNyZW1lbnQgPSAx
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDoKLSAg
ICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6Ci0gICAgICAgICAgICBBU1NFUlQoKHVuT3AgIT0g
TlVMTCkgJiYgKGJpbk9wID09IE5VTEwpKTsKLSAgICAgICAgICAgIGluY3JlbWVudCA9IC0xOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQWRkQXNzaWduOgotICAgICAgICAg
ICAgQVNTRVJUKCh1bk9wID09IE5VTEwpICYmIChiaW5PcCAhPSBOVUxMKSk7Ci0gICAgICAgICAg
ICBpbmNyZW1lbnQgPSBldmFsdWF0ZUludENvbnN0YW50KGluY3JlbWVudE5vZGUpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wU3ViQXNzaWduOgotICAgICAgICAgICAgQVNT
RVJUKCh1bk9wID09IE5VTEwpICYmIChiaW5PcCAhPSBOVUxMKSk7Ci0gICAgICAgICAgICBpbmNy
ZW1lbnQgPSAtIGV2YWx1YXRlSW50Q29uc3RhbnQoaW5jcmVtZW50Tm9kZSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGluY3JlbWVudDsKLX0KLQotaW50IEZvckxvb3BVbnJvbGw6OmV2
YWx1YXRlSW50Q29uc3RhbnQoVEludGVybUNvbnN0YW50VW5pb24qIG5vZGUpCi17Ci0gICAgQVNT
RVJUKChub2RlICE9IE5VTEwpICYmIChub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpICE9IE5V
TEwpKTsKLSAgICByZXR1cm4gbm9kZS0+Z2V0SUNvbnN0KDApOwotfQotCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRm9yTG9vcFVucm9sbC5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJvbGwuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTgwMGUyNWIxZjBjMWE0ODdhMzczMWFlZTczMTYyMmNi
MjI4ZmUxZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRm9yTG9vcFVucm9sbC5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21w
aWxlci9pbnRlcm1lZGlhdGUuaCIKLQotc3RydWN0IFRMb29wSW5kZXhJbmZvIHsKLSAgICBpbnQg
aWQ7Ci0gICAgaW50IGluaXRWYWx1ZTsKLSAgICBpbnQgc3RvcFZhbHVlOwotICAgIGludCBpbmNy
ZW1lbnRWYWx1ZTsKLSAgICBUT3BlcmF0b3Igb3A7Ci0gICAgaW50IGN1cnJlbnRWYWx1ZTsKLX07
Ci0KLWNsYXNzIEZvckxvb3BVbnJvbGwgewotcHVibGljOgotICAgIEZvckxvb3BVbnJvbGwoKSB7
IH0KLQotICAgIHZvaWQgRmlsbExvb3BJbmRleEluZm8oVEludGVybUxvb3AqIG5vZGUsIFRMb29w
SW5kZXhJbmZvJiBpbmZvKTsKLQotICAgIC8vIFVwZGF0ZSB0aGUgaW5mby5jdXJyZW50VmFsdWUg
Zm9yIHRoZSBuZXh0IGxvb3AgaXRlcmF0aW9uLgotICAgIHZvaWQgU3RlcCgpOwotCi0gICAgLy8g
UmV0dXJuIGZhbHNlIGlmIGxvb3AgY29uZGl0aW9uIGlzIG5vIGxvbmdlciBzYXRpc2ZpZWQuCi0g
ICAgYm9vbCBTYXRpc2ZpZXNMb29wQ29uZGl0aW9uKCk7Ci0KLSAgICAvLyBDaGVjayBpZiB0aGUg
c3ltYm9sIGlzIHRoZSBpbmRleCBvZiBhIGxvb3AgdGhhdCdzIHVucm9sbGVkLgotICAgIGJvb2wg
TmVlZHNUb1JlcGxhY2VTeW1ib2xXaXRoVmFsdWUoVEludGVybVN5bWJvbCogc3ltYm9sKTsKLQot
ICAgIC8vIFJldHVybiB0aGUgY3VycmVudCB2YWx1ZSBvZiBhIGdpdmVuIGxvb3AgaW5kZXggc3lt
Ym9sLgotICAgIGludCBHZXRMb29wSW5kZXhWYWx1ZShUSW50ZXJtU3ltYm9sKiBzeW1ib2wpOwot
Ci0gICAgdm9pZCBQdXNoKFRMb29wSW5kZXhJbmZvJiBpbmZvKTsKLSAgICB2b2lkIFBvcCgpOwot
Ci0gICAgc3RhdGljIHZvaWQgTWFya0Zvckxvb3BzV2l0aEludGVnZXJJbmRpY2VzRm9yVW5yb2xs
aW5nKFRJbnRlcm1Ob2RlKiByb290KTsKLQotcHJpdmF0ZToKLSAgICBpbnQgZ2V0TG9vcEluY3Jl
bWVudChUSW50ZXJtTG9vcCogbm9kZSk7Ci0KLSAgICBpbnQgZXZhbHVhdGVJbnRDb25zdGFudChU
SW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSk7Ci0KLSAgICBUVmVjdG9yPFRMb29wSW5kZXhJbmZv
PiBtTG9vcEluZGV4U3RhY2s7Ci19OwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvSGFzaE5hbWVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvSGFzaE5hbWVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQy
MTQxZTJkODUzN2YwMTFlY2FhYzIyMDY2NTlhZDUyNDlmMjc4MjcuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0hhc2hOYW1lcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9IQVNIX05BTUVTX0hfCi0jZGVmaW5l
IENPTVBJTEVSX0hBU0hfTkFNRVNfSF8KLQotI2luY2x1ZGUgPG1hcD4KLQotI2luY2x1ZGUgImNv
bXBpbGVyL2ludGVybWVkaWF0ZS5oIgotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgot
Ci0jZGVmaW5lIEhBU0hFRF9OQU1FX1BSRUZJWCAid2ViZ2xfIgotCi10eXBlZGVmIHN0ZDo6bWFw
PFRQZXJzaXN0U3RyaW5nLCBUUGVyc2lzdFN0cmluZz4gTmFtZU1hcDsKLQotI2VuZGlmICAvLyBD
T01QSUxFUl9IQVNIX05BTUVTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvSW5mb1NpbmsuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0luZm9TaW5rLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDIw
YTZjMDE3NWFjYzRiZmY0OGQ3MmE0ZDEyYjcyMWE2NmJhMzIwMy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvSW5mb1NpbmsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCi0KLXZvaWQg
VEluZm9TaW5rQmFzZTo6cHJlZml4KFRQcmVmaXhUeXBlIHApIHsKLSAgICBzd2l0Y2gocCkgewot
ICAgICAgICBjYXNlIEVQcmVmaXhOb25lOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRVByZWZpeFdhcm5pbmc6Ci0gICAgICAgICAgICBzaW5rLmFwcGVuZCgiV0FSTklORzogIik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFUHJlZml4RXJyb3I6Ci0gICAgICAg
ICAgICBzaW5rLmFwcGVuZCgiRVJST1I6ICIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRVByZWZpeEludGVybmFsRXJyb3I6Ci0gICAgICAgICAgICBzaW5rLmFwcGVuZCgiSU5U
RVJOQUwgRVJST1I6ICIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVByZWZp
eFVuaW1wbGVtZW50ZWQ6Ci0gICAgICAgICAgICBzaW5rLmFwcGVuZCgiVU5JTVBMRU1FTlRFRDog
Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFUHJlZml4Tm90ZToKLSAgICAg
ICAgICAgIHNpbmsuYXBwZW5kKCJOT1RFOiAiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgc2luay5hcHBlbmQoIlVOS09XTiBFUlJPUjogIik7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgVEluZm9TaW5rQmFzZTo6bG9jYXRp
b24oaW50IGZpbGUsIGludCBsaW5lKSB7Ci0gICAgVFBlcnNpc3RTdHJpbmdTdHJlYW0gc3RyZWFt
OwotICAgIGlmIChsaW5lKQotICAgICAgICBzdHJlYW0gPDwgZmlsZSA8PCAiOiIgPDwgbGluZTsK
LSAgICBlbHNlCi0gICAgICAgIHN0cmVhbSA8PCBmaWxlIDw8ICI6PyAiOwotICAgIHN0cmVhbSA8
PCAiOiAiOwotCi0gICAgc2luay5hcHBlbmQoc3RyZWFtLnN0cigpKTsKLX0KLQotdm9pZCBUSW5m
b1NpbmtCYXNlOjpsb2NhdGlvbihjb25zdCBUU291cmNlTG9jJiBsb2MpIHsKLSAgICBsb2NhdGlv
bihsb2MuZmlyc3RfZmlsZSwgbG9jLmZpcnN0X2xpbmUpOwotfQotCi12b2lkIFRJbmZvU2lua0Jh
c2U6Om1lc3NhZ2UoVFByZWZpeFR5cGUgcCwgY29uc3QgVFNvdXJjZUxvYyYgbG9jLCBjb25zdCBj
aGFyKiBtKSB7Ci0gICAgcHJlZml4KHApOwotICAgIGxvY2F0aW9uKGxvYyk7Ci0gICAgc2luay5h
cHBlbmQobSk7Ci0gICAgc2luay5hcHBlbmQoIlxuIik7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5mb1NpbmsuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9JbmZvU2luay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiZTBkZGZmZTMxZjVhMmZlOTdkNzg2ZmQwNjhjNzQxZTZhNWZlYTY1Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9JbmZvU2luay5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICsw
LDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgX0lORk9TSU5LX0lOQ0xVREVEXwot
I2RlZmluZSBfSU5GT1NJTktfSU5DTFVERURfCi0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVk
ZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSAiY29tcGlsZXIvQ29tbW9uLmgiCi0KLS8vIFJldHVybnMg
dGhlIGZyYWN0aW9uYWwgcGFydCBvZiB0aGUgZ2l2ZW4gZmxvYXRpbmctcG9pbnQgbnVtYmVyLgot
aW5saW5lIGZsb2F0IGZyYWN0aW9uYWxQYXJ0KGZsb2F0IGYpIHsKLSAgZmxvYXQgaW50UGFydCA9
IDAuMGY7Ci0gIHJldHVybiBtb2RmZihmLCAmaW50UGFydCk7Ci19Ci0KLS8vCi0vLyBUUHJlZml4
VHlwZSBpcyB1c2VkIHRvIGNlbnRyYWxpemUgaG93IGluZm8gbG9nIG1lc3NhZ2VzIHN0YXJ0Lgot
Ly8gU2VlIGJlbG93LgotLy8KLWVudW0gVFByZWZpeFR5cGUgewotICAgIEVQcmVmaXhOb25lLAot
ICAgIEVQcmVmaXhXYXJuaW5nLAotICAgIEVQcmVmaXhFcnJvciwKLSAgICBFUHJlZml4SW50ZXJu
YWxFcnJvciwKLSAgICBFUHJlZml4VW5pbXBsZW1lbnRlZCwKLSAgICBFUHJlZml4Tm90ZQotfTsK
LQotLy8KLS8vIEVuY2Fwc3VsYXRlIGluZm8gbG9ncyBmb3IgYWxsIG9iamVjdHMgdGhhdCBoYXZl
IHRoZW0uCi0vLwotLy8gVGhlIG1ldGhvZHMgYXJlIGEgZ2VuZXJhbCBzZXQgb2YgdG9vbHMgZm9y
IGdldHRpbmcgYSB2YXJpZXR5IG9mCi0vLyBtZXNzYWdlcyBhbmQgdHlwZXMgaW5zZXJ0ZWQgaW50
byB0aGUgbG9nLgotLy8KLWNsYXNzIFRJbmZvU2lua0Jhc2UgewotcHVibGljOgotICAgIFRJbmZv
U2lua0Jhc2UoKSB7fQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgVEluZm9TaW5r
QmFzZSYgb3BlcmF0b3I8PChjb25zdCBUJiB0KSB7Ci0gICAgICAgIFRQZXJzaXN0U3RyaW5nU3Ry
ZWFtIHN0cmVhbTsKLSAgICAgICAgc3RyZWFtIDw8IHQ7Ci0gICAgICAgIHNpbmsuYXBwZW5kKHN0
cmVhbS5zdHIoKSk7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgLy8gT3ZlcnJp
ZGUgPDwgb3BlcmF0b3IgZm9yIHNwZWNpZmljIHR5cGVzLiBJdCBpcyBmYXN0ZXIgdG8gYXBwZW5k
IHN0cmluZ3MKLSAgICAvLyBhbmQgY2hhcmFjdGVycyBkaXJlY3RseSB0byB0aGUgc2luay4KLSAg
ICBUSW5mb1NpbmtCYXNlJiBvcGVyYXRvcjw8KGNoYXIgYykgewotICAgICAgICBzaW5rLmFwcGVu
ZCgxLCBjKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLSAgICBUSW5mb1NpbmtCYXNl
JiBvcGVyYXRvcjw8KGNvbnN0IGNoYXIqIHN0cikgewotICAgICAgICBzaW5rLmFwcGVuZChzdHIp
OwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIFRJbmZvU2lua0Jhc2UmIG9wZXJh
dG9yPDwoY29uc3QgVFBlcnNpc3RTdHJpbmcmIHN0cikgewotICAgICAgICBzaW5rLmFwcGVuZChz
dHIpOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIFRJbmZvU2lua0Jhc2UmIG9w
ZXJhdG9yPDwoY29uc3QgVFN0cmluZyYgc3RyKSB7Ci0gICAgICAgIHNpbmsuYXBwZW5kKHN0ci5j
X3N0cigpKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLSAgICAvLyBNYWtlIHN1cmUg
ZmxvYXRzIGFyZSB3cml0dGVuIHdpdGggY29ycmVjdCBwcmVjaXNpb24uCi0gICAgVEluZm9TaW5r
QmFzZSYgb3BlcmF0b3I8PChmbG9hdCBmKSB7Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGF0
IGxlYXN0IG9uZSBkZWNpbWFsIHBvaW50IGlzIHdyaXR0ZW4uIElmIGEgbnVtYmVyCi0gICAgICAg
IC8vIGRvZXMgbm90IGhhdmUgYSBmcmFjdGlvbmFsIHBhcnQsIHRoZSBkZWZhdWx0IHByZWNpc2lv
biBmb3JtYXQgZG9lcwotICAgICAgICAvLyBub3Qgd3JpdGUgdGhlIGRlY2ltYWwgcG9ydGlvbiB3
aGljaCBnZXRzIGludGVycHJldGVkIGFzIGludGVnZXIgYnkKLSAgICAgICAgLy8gdGhlIGNvbXBp
bGVyLgotICAgICAgICBUUGVyc2lzdFN0cmluZ1N0cmVhbSBzdHJlYW07Ci0gICAgICAgIGlmIChm
cmFjdGlvbmFsUGFydChmKSA9PSAwLjBmKSB7Ci0gICAgICAgICAgICBzdHJlYW0ucHJlY2lzaW9u
KDEpOwotICAgICAgICAgICAgc3RyZWFtIDw8IHN0ZDo6c2hvd3BvaW50IDw8IHN0ZDo6Zml4ZWQg
PDwgZjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0cmVhbS51bnNldGYoc3RkOjpp
b3M6OmZpeGVkKTsKLSAgICAgICAgICAgIHN0cmVhbS51bnNldGYoc3RkOjppb3M6OnNjaWVudGlm
aWMpOwotICAgICAgICAgICAgc3RyZWFtLnByZWNpc2lvbig4KTsKLSAgICAgICAgICAgIHN0cmVh
bSA8PCBmOwotICAgICAgICB9Ci0gICAgICAgIHNpbmsuYXBwZW5kKHN0cmVhbS5zdHIoKSk7Ci0g
ICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgLy8gV3JpdGUgYm9vbGVhbiB2YWx1ZXMg
YXMgdGhlaXIgbmFtZXMgaW5zdGVhZCBvZiBpbnRlZ3JhbCB2YWx1ZS4KLSAgICBUSW5mb1NpbmtC
YXNlJiBvcGVyYXRvcjw8KGJvb2wgYikgewotICAgICAgICBjb25zdCBjaGFyKiBzdHIgPSBiID8g
InRydWUiIDogImZhbHNlIjsKLSAgICAgICAgc2luay5hcHBlbmQoc3RyKTsKLSAgICAgICAgcmV0
dXJuICp0aGlzOwotICAgIH0KLQotICAgIHZvaWQgZXJhc2UoKSB7IHNpbmsuY2xlYXIoKTsgfQot
ICAgIGludCBzaXplKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihzaW5rLnNpemUoKSk7IH0K
LQotICAgIGNvbnN0IFRQZXJzaXN0U3RyaW5nJiBzdHIoKSBjb25zdCB7IHJldHVybiBzaW5rOyB9
Ci0gICAgY29uc3QgY2hhciogY19zdHIoKSBjb25zdCB7IHJldHVybiBzaW5rLmNfc3RyKCk7IH0K
LQotICAgIHZvaWQgcHJlZml4KFRQcmVmaXhUeXBlIHApOwotICAgIHZvaWQgbG9jYXRpb24oaW50
IGZpbGUsIGludCBsaW5lKTsKLSAgICB2b2lkIGxvY2F0aW9uKGNvbnN0IFRTb3VyY2VMb2MmIGxv
Yyk7Ci0gICAgdm9pZCBtZXNzYWdlKFRQcmVmaXhUeXBlIHAsIGNvbnN0IFRTb3VyY2VMb2MmIGxv
YywgY29uc3QgY2hhciogbSk7Ci0KLXByaXZhdGU6Ci0gICAgVFBlcnNpc3RTdHJpbmcgc2luazsK
LX07Ci0KLWNsYXNzIFRJbmZvU2luayB7Ci1wdWJsaWM6Ci0gICAgVEluZm9TaW5rQmFzZSBpbmZv
OwotICAgIFRJbmZvU2lua0Jhc2UgZGVidWc7Ci0gICAgVEluZm9TaW5rQmFzZSBvYmo7Ci19Owot
Ci0jZW5kaWYgLy8gX0lORk9TSU5LX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAyY2RiZTE3YWE2ZDVkYjAzNjBkZWI2YzkxMGQxZGYwNjc2MDgzZDU4Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDU2NCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLwotLy8gQ3JlYXRlIHN0cmluZ3Mg
dGhhdCBkZWNsYXJlIGJ1aWx0LWluIGRlZmluaXRpb25zLCBhZGQgYnVpbHQtaW5zIHRoYXQKLS8v
IGNhbm5vdCBiZSBleHByZXNzZWQgaW4gdGhlIGZpbGVzLCBhbmQgZXN0YWJsaXNoIG1hcHBpbmdz
IGJldHdlZW4gCi0vLyBidWlsdC1pbiBmdW5jdGlvbnMgYW5kIG9wZXJhdG9ycy4KLS8vCi0KLSNp
bmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplLmgiCi0KLSNpbmNsdWRlICJjb21waWxlci9pbnRl
cm1lZGlhdGUuaCIKLQotdm9pZCBJbnNlcnRCdWlsdEluRnVuY3Rpb25zKFNoU2hhZGVyVHlwZSB0
eXBlLCBTaFNoYWRlclNwZWMgc3BlYywgY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzICZyZXNvdXJj
ZXMsIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUpCi17Ci0gICAgVFR5cGUgKmZsb2F0MSA9IG5l
dyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDEpOwotICAgIFRUeXBl
ICpmbG9hdDIgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAy
KTsKLSAgICBUVHlwZSAqZmxvYXQzID0gbmV3IFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQs
IEV2cUdsb2JhbCwgMyk7Ci0gICAgVFR5cGUgKmZsb2F0NCA9IG5ldyBUVHlwZShFYnRGbG9hdCwg
RWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDQpOwotCi0gICAgVFR5cGUgKmludDIgPSBuZXcgVFR5
cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMik7Ci0gICAgVFR5cGUgKmludDMg
PSBuZXcgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMyk7Ci0gICAgVFR5
cGUgKmludDQgPSBuZXcgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgNCk7
Ci0KLSAgICAvLwotICAgIC8vIEFuZ2xlIGFuZCBUcmlnb25vbWV0cmljIEZ1bmN0aW9ucy4KLSAg
ICAvLwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAicmFkaWFucyIsIGZs
b2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJyYWRpYW5zIiwg
ZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInJhZGlhbnMi
LCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAicmFkaWFu
cyIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRl
Z3JlZXMiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAi
ZGVncmVlcyIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMs
ICJkZWdyZWVzIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
NCwgImRlZ3JlZXMiLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDEsICJzaW4iLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQyLCAic2luIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MywgInNpbiIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQs
ICJzaW4iLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEs
ICJjb3MiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAi
Y29zIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImNv
cyIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJjb3Mi
LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJ0YW4i
LCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAidGFuIiwg
ZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInRhbiIsIGZs
b2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0YW4iLCBmbG9h
dDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJhc2luIiwgZmxv
YXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImFzaW4iLCBmbG9h
dDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiYXNpbiIsIGZsb2F0
Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJhc2luIiwgZmxvYXQ0
KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiYWNvcyIsIGZsb2F0
MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJhY29zIiwgZmxvYXQy
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImFjb3MiLCBmbG9hdDMp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiYWNvcyIsIGZsb2F0NCk7
Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImF0YW4iLCBmbG9hdDEs
IGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJhdGFuIiwg
ZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAi
YXRhbiIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0NCwgImF0YW4iLCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MSwgImF0YW4iLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQyLCAiYXRhbiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDMsICJhdGFuIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0NCwgImF0YW4iLCBmbG9hdDQpOwotCi0gICAgLy8KLSAgICAvLyBFeHBvbmVudGlh
bCBGdW5jdGlvbnMuCi0gICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MSwgInBvdyIsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MiwgInBvdyIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MywgInBvdyIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0NCwgInBvdyIsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZXhwIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImV4cCIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJleHAiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZXhwIiwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibG9nIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MiwgImxvZyIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDMsICJsb2ciLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQ0LCAibG9nIiwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQxLCAiZXhwMiIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDIsICJleHAyIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MywgImV4cDIiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQ0LCAiZXhwMiIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MSwgImxvZzIiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQyLCAibG9nMiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDMsICJsb2cyIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0NCwgImxvZzIiLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDEsICJzcXJ0IiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MiwgInNxcnQiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQzLCAic3FydCIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDQsICJzcXJ0IiwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQxLCAiaW52ZXJzZXNxcnQiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQyLCAiaW52ZXJzZXNxcnQiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiaW52ZXJzZXNxcnQiLCBmbG9hdDMpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiaW52ZXJzZXNxcnQiLCBmbG9hdDQpOwotCi0g
ICAgLy8KLSAgICAvLyBDb21tb24gRnVuY3Rpb25zLgotICAgIC8vCi0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDEsICJhYnMiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQyLCAiYWJzIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MywgImFicyIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDQsICJhYnMiLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDEsICJzaWduIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MiwgInNpZ24iLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQzLCAic2lnbiIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDQsICJzaWduIiwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQxLCAiZmxvb3IiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQyLCAiZmxvb3IiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQzLCAiZmxvb3IiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQ0LCAiZmxvb3IiLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDEsICJjZWlsIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MiwgImNlaWwiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQzLCAiY2VpbCIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDQsICJjZWlsIiwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQxLCAiZnJhY3QiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQyLCAiZnJhY3QiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQzLCAiZnJhY3QiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQ0LCAiZnJhY3QiLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDEsICJtb2QiLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDIsICJtb2QiLCBmbG9hdDIsIGZsb2F0MSk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtb2QiLCBmbG9hdDMsIGZsb2F0MSk7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJtb2QiLCBmbG9hdDQsIGZsb2F0MSk7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJtb2QiLCBmbG9hdDIsIGZs
b2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtb2QiLCBmbG9h
dDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJtb2Qi
LCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MSwgIm1pbiIsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MiwgIm1pbiIsIGZsb2F0MiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MywgIm1pbiIsIGZsb2F0MywgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0NCwgIm1pbiIsIGZsb2F0NCwgZmxvYXQxKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgIm1pbiIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgIm1pbiIsIGZsb2F0MywgZmxvYXQzKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1pbiIsIGZsb2F0NCwgZmxv
YXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibWF4IiwgZmxv
YXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibWF4
IiwgZmxvYXQyLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQz
LCAibWF4IiwgZmxvYXQzLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQ0LCAibWF4IiwgZmxvYXQ0LCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQyLCAibWF4IiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQzLCAibWF4IiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibWF4IiwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJjbGFtcCIsIGZsb2F0MSwgZmxvYXQx
LCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiY2xhbXAi
LCBmbG9hdDIsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MywgImNsYW1wIiwgZmxvYXQzLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJjbGFtcCIsIGZsb2F0NCwgZmxvYXQxLCBmbG9hdDEp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiY2xhbXAiLCBmbG9hdDIs
IGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0Mywg
ImNsYW1wIiwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDQsICJjbGFtcCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJtaXgiLCBmbG9hdDEsIGZsb2F0MSwg
ZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgIm1peCIsIGZs
b2F0MiwgZmxvYXQyLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQzLCAibWl4IiwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDQsICJtaXgiLCBmbG9hdDQsIGZsb2F0NCwgZmxvYXQxKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgIm1peCIsIGZsb2F0MiwgZmxvYXQyLCBm
bG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAibWl4IiwgZmxv
YXQzLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDQsICJtaXgiLCBmbG9hdDQsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQxLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInN0ZXAiLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzdGVwIiwgZmxvYXQzLCBmbG9hdDMp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAic3RlcCIsIGZsb2F0NCwg
ZmxvYXQ0KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInN0ZXAiLCBm
bG9hdDEsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJz
dGVwIiwgZmxvYXQxLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQ0LCAic3RlcCIsIGZsb2F0MSwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQxLCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic21vb3Roc3RlcCIsIGZsb2F0Miwg
ZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAi
c21vb3Roc3RlcCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQ0LCAic21vb3Roc3RlcCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDQp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic21vb3Roc3RlcCIsIGZs
b2F0MSwgZmxvYXQxLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQzLCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDMpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBm
bG9hdDQpOwotCi0gICAgLy8KLSAgICAvLyBHZW9tZXRyaWMgRnVuY3Rpb25zLgotICAgIC8vCi0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJsZW5ndGgiLCBmbG9hdDEpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibGVuZ3RoIiwgZmxvYXQyKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0Myk7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJsZW5ndGgiLCBmbG9hdDQp
OwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkaXN0YW5jZSIsIGZs
b2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRp
c3RhbmNlIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQxLCAiZGlzdGFuY2UiLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDEsICJkaXN0YW5jZSIsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQxLCBmbG9hdDEpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQyLCBmbG9h
dDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQz
LCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90Iiwg
ZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMs
ICJjcm9zcyIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MSwgIm5vcm1hbGl6ZSIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDIsICJub3JtYWxpemUiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQzLCAibm9ybWFsaXplIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0NCwgIm5vcm1hbGl6ZSIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImZhY2Vmb3J3YXJkIiwgZmxvYXQxLCBmbG9hdDEs
IGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJmYWNlZm9y
d2FyZCIsIGZsb2F0MiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQzLCAiZmFjZWZvcndhcmQiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzKTsKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImZhY2Vmb3J3YXJkIiwgZmxvYXQ0
LCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MSwgInJlZmxlY3QiLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDIsICJyZWZsZWN0IiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQzLCAicmVmbGVjdCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInJlZmxlY3QiLCBmbG9hdDQsIGZsb2F0
NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInJlZnJhY3QiLCBm
bG9hdDEsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MiwgInJlZnJhY3QiLCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInJlZnJhY3QiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQx
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInJlZnJhY3QiLCBmbG9h
dDQsIGZsb2F0NCwgZmxvYXQxKTsKLQotICAgIFRUeXBlICptYXQyID0gbmV3IFRUeXBlKEVidEZs
b2F0LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMiwgdHJ1ZSk7Ci0gICAgVFR5cGUgKm1hdDMg
PSBuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAzLCB0cnVlKTsK
LSAgICBUVHlwZSAqbWF0NCA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFH
bG9iYWwsIDQsIHRydWUpOwotCi0gICAgLy8KLSAgICAvLyBNYXRyaXggRnVuY3Rpb25zLgotICAg
IC8vCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihtYXQyLCAibWF0cml4Q29tcE11bHQi
LCBtYXQyLCBtYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKG1hdDMsICJtYXRy
aXhDb21wTXVsdCIsIG1hdDMsIG1hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
bWF0NCwgIm1hdHJpeENvbXBNdWx0IiwgbWF0NCwgbWF0NCk7Ci0KLSAgICBUVHlwZSAqYm9vbDEg
PSBuZXcgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDEpOwotICAgIFRU
eXBlICpib29sMiA9IG5ldyBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwg
Mik7Ci0gICAgVFR5cGUgKmJvb2wzID0gbmV3IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwg
RXZxR2xvYmFsLCAzKTsKLSAgICBUVHlwZSAqYm9vbDQgPSBuZXcgVFR5cGUoRWJ0Qm9vbCwgRWJw
VW5kZWZpbmVkLCBFdnFHbG9iYWwsIDQpOwotCi0gICAgLy8KLSAgICAvLyBWZWN0b3IgcmVsYXRp
b25hbCBmdW5jdGlvbnMuCi0gICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJv
b2wyLCAibGVzc1RoYW4iLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihib29sMywgImxlc3NUaGFuIiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJsZXNzVGhhbiIsIGZsb2F0NCwgZmxvYXQ0KTsKLQot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJsZXNzVGhhbiIsIGludDIsIGlu
dDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJsZXNzVGhhbiIsIGlu
dDMsIGludDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJsZXNzVGhh
biIsIGludDQsIGludDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwg
Imxlc3NUaGFuRXF1YWwiLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihib29sMywgImxlc3NUaGFuRXF1YWwiLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImxlc3NUaGFuRXF1YWwiLCBmbG9hdDQsIGZs
b2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAibGVzc1RoYW5F
cXVhbCIsIGludDIsIGludDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMs
ICJsZXNzVGhhbkVxdWFsIiwgaW50MywgaW50Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihib29sNCwgImxlc3NUaGFuRXF1YWwiLCBpbnQ0LCBpbnQ0KTsKLQotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJncmVhdGVyVGhhbiIsIGZsb2F0MiwgZmxvYXQyKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZ3JlYXRlclRoYW4iLCBmbG9h
dDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImdyZWF0
ZXJUaGFuIiwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihib29sMiwgImdyZWF0ZXJUaGFuIiwgaW50MiwgaW50Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihib29sMywgImdyZWF0ZXJUaGFuIiwgaW50MywgaW50Myk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImdyZWF0ZXJUaGFuIiwgaW50NCwgaW50NCk7Ci0K
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZ3JlYXRlclRoYW5FcXVhbCIs
IGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAi
Z3JlYXRlclRoYW5FcXVhbCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGJvb2w0LCAiZ3JlYXRlclRoYW5FcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsKLQot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJncmVhdGVyVGhhbkVxdWFsIiwg
aW50MiwgaW50Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImdyZWF0
ZXJUaGFuRXF1YWwiLCBpbnQzLCBpbnQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGJvb2w0LCAiZ3JlYXRlclRoYW5FcXVhbCIsIGludDQsIGludDQpOwotCi0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImVxdWFsIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJlcXVhbCIsIGZsb2F0MywgZmxvYXQzKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAiZXF1YWwiLCBmbG9hdDQsIGZs
b2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZXF1YWwiLCBp
bnQyLCBpbnQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZXF1YWwi
LCBpbnQzLCBpbnQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAiZXF1
YWwiLCBpbnQ0LCBpbnQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIs
ICJlcXVhbCIsIGJvb2wyLCBib29sMik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihi
b29sMywgImVxdWFsIiwgYm9vbDMsIGJvb2wzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGJvb2w0LCAiZXF1YWwiLCBib29sNCwgYm9vbDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihib29sMiwgIm5vdEVxdWFsIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJub3RFcXVhbCIsIGZsb2F0MywgZmxvYXQzKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAibm90RXF1YWwiLCBmbG9hdDQs
IGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAibm90RXF1
YWwiLCBpbnQyLCBpbnQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAi
bm90RXF1YWwiLCBpbnQzLCBpbnQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJv
b2w0LCAibm90RXF1YWwiLCBpbnQ0LCBpbnQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oYm9vbDIsICJub3RFcXVhbCIsIGJvb2wyLCBib29sMik7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihib29sMywgIm5vdEVxdWFsIiwgYm9vbDMsIGJvb2wzKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAibm90RXF1YWwiLCBib29sNCwgYm9vbDQpOwot
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMSwgImFueSIsIGJvb2wyKTsKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wxLCAiYW55IiwgYm9vbDMpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDEsICJhbnkiLCBib29sNCk7Ci0KLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wxLCAiYWxsIiwgYm9vbDIpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oYm9vbDEsICJhbGwiLCBib29sMyk7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihib29sMSwgImFsbCIsIGJvb2w0KTsKLQotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oYm9vbDIsICJub3QiLCBib29sMik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihib29sMywgIm5vdCIsIGJvb2wzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGJvb2w0LCAibm90IiwgYm9vbDQpOwotCi0gICAgVFR5cGUgKnNhbXBsZXIyRCA9IG5ldyBU
VHlwZShFYnRTYW1wbGVyMkQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAxKTsKLSAgICBUVHlw
ZSAqc2FtcGxlckN1YmUgPSBuZXcgVFR5cGUoRWJ0U2FtcGxlckN1YmUsIEVicFVuZGVmaW5lZCwg
RXZxR2xvYmFsLCAxKTsKLQotICAgIC8vCi0gICAgLy8gVGV4dHVyZSBGdW5jdGlvbnMgZm9yIEdM
U0wgRVMgMS4wCi0gICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwg
InRleHR1cmUyRCIsIHNhbXBsZXIyRCwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVyMkQsIGZsb2F0Myk7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxl
cjJELCBmbG9hdDQpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4
dHVyZUN1YmUiLCBzYW1wbGVyQ3ViZSwgZmxvYXQzKTsKLQotICAgIGlmIChyZXNvdXJjZXMuT0VT
X0VHTF9pbWFnZV9leHRlcm5hbCkKLSAgICB7Ci0gICAgICAgIFRUeXBlICpzYW1wbGVyRXh0ZXJu
YWxPRVMgPSBuZXcgVFR5cGUoRWJ0U2FtcGxlckV4dGVybmFsT0VTLCBFYnBVbmRlZmluZWQsIEV2
cUdsb2JhbCwgMSk7Ci0KLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQs
ICJ0ZXh0dXJlMkQiLCBzYW1wbGVyRXh0ZXJuYWxPRVMsIGZsb2F0Mik7Ci0gICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXJFeHRl
cm5hbE9FUywgZmxvYXQzKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlckV4dGVybmFsT0VTLCBmbG9hdDQpOwotICAgIH0K
LQotICAgIGlmIChyZXNvdXJjZXMuQVJCX3RleHR1cmVfcmVjdGFuZ2xlKQotICAgIHsKLSAgICAg
ICAgVFR5cGUgKnNhbXBsZXIyRFJlY3QgPSBuZXcgVFR5cGUoRWJ0U2FtcGxlcjJEUmVjdCwgRWJw
VW5kZWZpbmVkLCBFdnFHbG9iYWwsIDEpOwotCi0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUmVjdCIsIHNhbXBsZXIyRFJlY3QsIGZsb2F0Mik7Ci0g
ICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUmVjdFBy
b2oiLCBzYW1wbGVyMkRSZWN0LCBmbG9hdDMpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFJlY3RQcm9qIiwgc2FtcGxlcjJEUmVjdCwgZmxvYXQ0
KTsKLSAgICB9Ci0KLSAgICBpZiAodHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCi0gICAgewot
ICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRCIsIHNh
bXBsZXIyRCwgZmxvYXQyLCBmbG9hdDEpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVyMkQsIGZsb2F0MywgZmxvYXQxKTsK
LSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9q
Iiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0MSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZUN1YmUiLCBzYW1wbGVyQ3ViZSwgZmxvYXQzLCBmbG9h
dDEpOwotCi0gICAgICAgIGlmIChyZXNvdXJjZXMuT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwg
ImRGZHgiLCBmbG9hdDEpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDIsICJkRmR4IiwgZmxvYXQyKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQzLCAiZEZkeCIsIGZsb2F0Myk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0NCwgImRGZHgiLCBmbG9hdDQpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRGZHkiLCBmbG9hdDEp
OwotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJkRmR5Iiwg
ZmxvYXQyKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAi
ZEZkeSIsIGZsb2F0Myk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0NCwgImRGZHkiLCBmbG9hdDQpOwotCi0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MSwgImZ3aWR0aCIsIGZsb2F0MSk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImZ3aWR0aCIsIGZsb2F0Mik7Ci0gICAgICAgICAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImZ3aWR0aCIsIGZsb2F0Myk7Ci0gICAg
ICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImZ3aWR0aCIsIGZsb2F0
NCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZih0eXBlID09IFNIX1ZFUlRFWF9TSEFERVIp
Ci0gICAgewotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1
cmUyRExvZCIsIHNhbXBsZXIyRCwgZmxvYXQyLCBmbG9hdDEpOwotICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFByb2pMb2QiLCBzYW1wbGVyMkQsIGZs
b2F0MywgZmxvYXQxKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQs
ICJ0ZXh0dXJlMkRQcm9qTG9kIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0MSk7Ci0gICAgICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZUN1YmVMb2QiLCBzYW1w
bGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDEpOwotICAgIH0KLQotICAgIC8vCi0gICAgLy8gRGVwdGgg
cmFuZ2UgaW4gd2luZG93IGNvb3JkaW5hdGVzCi0gICAgLy8KLSAgICBURmllbGRMaXN0ICpmaWVs
ZHMgPSBOZXdQb29sVEZpZWxkTGlzdCgpOwotICAgIFRGaWVsZCAqbmVhciA9IG5ldyBURmllbGQo
bmV3IFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEpLCBOZXdQb29sVFN0cmlu
ZygibmVhciIpKTsKLSAgICBURmllbGQgKmZhciA9IG5ldyBURmllbGQobmV3IFRUeXBlKEVidEZs
b2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEpLCBOZXdQb29sVFN0cmluZygiZmFyIikpOwotICAg
IFRGaWVsZCAqZGlmZiA9IG5ldyBURmllbGQobmV3IFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBF
dnFHbG9iYWwsIDEpLCBOZXdQb29sVFN0cmluZygiZGlmZiIpKTsKLSAgICBmaWVsZHMtPnB1c2hf
YmFjayhuZWFyKTsKLSAgICBmaWVsZHMtPnB1c2hfYmFjayhmYXIpOwotICAgIGZpZWxkcy0+cHVz
aF9iYWNrKGRpZmYpOwotICAgIFRTdHJ1Y3R1cmUgKmRlcHRoUmFuZ2VTdHJ1Y3QgPSBuZXcgVFN0
cnVjdHVyZShOZXdQb29sVFN0cmluZygiZ2xfRGVwdGhSYW5nZVBhcmFtZXRlcnMiKSwgZmllbGRz
KTsKLSAgICBUVmFyaWFibGUgKmRlcHRoUmFuZ2VQYXJhbWV0ZXJzID0gbmV3IFRWYXJpYWJsZSgm
ZGVwdGhSYW5nZVN0cnVjdC0+bmFtZSgpLCBkZXB0aFJhbmdlU3RydWN0LCB0cnVlKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnQoKmRlcHRoUmFuZ2VQYXJhbWV0ZXJzKTsKLSAgICBUVmFyaWFibGUg
KmRlcHRoUmFuZ2UgPSBuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9EZXB0aFJhbmdl
IiksIFRUeXBlKGRlcHRoUmFuZ2VTdHJ1Y3QpKTsKLSAgICBkZXB0aFJhbmdlLT5zZXRRdWFsaWZp
ZXIoRXZxVW5pZm9ybSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpkZXB0aFJhbmdlKTsKLQot
ICAgIC8vCi0gICAgLy8gSW1wbGVtZW50YXRpb24gZGVwZW5kZW50IGJ1aWx0LWluIGNvbnN0YW50
cy4KLSAgICAvLwotICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KCJnbF9NYXhWZXJ0ZXhB
dHRyaWJzIiwgcmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydENvbnN0SW50KCJnbF9NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyIsIHJlc291cmNlcy5NYXhW
ZXJ0ZXhVbmlmb3JtVmVjdG9ycyk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImds
X01heFZhcnlpbmdWZWN0b3JzIiwgcmVzb3VyY2VzLk1heFZhcnlpbmdWZWN0b3JzKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xfTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMi
LCByZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydENvbnN0SW50KCJnbF9NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzIiwgcmVzb3Vy
Y2VzLk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dENvbnN0SW50KCJnbF9NYXhUZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhUZXh0dXJl
SW1hZ2VVbml0cyk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heEZyYWdt
ZW50VW5pZm9ybVZlY3RvcnMiLCByZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyk7
Ci0KLSAgICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKQotICAgIHsKLSAgICAgICAg
c3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heERyYXdCdWZmZXJzIiwgcmVzb3VyY2Vz
Lk1heERyYXdCdWZmZXJzKTsKLSAgICB9Ci19Ci0KLXZvaWQgSWRlbnRpZnlCdWlsdElucyhTaFNo
YWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsCi0gICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgU2hCdWlsdEluUmVzb3VyY2VzICZyZXNvdXJjZXMsCi0gICAgICAgICAgICAgICAgICAg
ICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSkKLXsKLSAgICAvLwotICAgIC8vIEZpcnN0LCBp
bnNlcnQgc29tZSBzcGVjaWFsIGJ1aWx0LWluIHZhcmlhYmxlcyB0aGF0IGFyZSBub3QgaW4gCi0g
ICAgLy8gdGhlIGJ1aWx0LWluIGhlYWRlciBmaWxlcy4KLSAgICAvLwotICAgIHN3aXRjaCh0eXBl
KSB7Ci0gICAgY2FzZSBTSF9GUkFHTUVOVF9TSEFERVI6Ci0gICAgICAgIHN5bWJvbFRhYmxlLmlu
c2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Nvb3JkIiksICAgICAg
ICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29vcmQs
ICAgNCkpKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bv
b2xUU3RyaW5nKCJnbF9Gcm9udEZhY2luZyIpLCAgICAgICAgICAgICAgICAgICAgIFRUeXBlKEVi
dEJvb2wsICBFYnBVbmRlZmluZWQsIEV2cUZyb250RmFjaW5nLCAxKSkpOwotICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1BvaW50Q29v
cmQiKSwgICAgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZx
UG9pbnRDb29yZCwgIDIpKSk7Ci0KLSAgICAgICAgLy8KLSAgICAgICAgLy8gSW4gQ1NTIFNoYWRl
cnMsIGdsX0ZyYWdDb2xvciwgZ2xfRnJhZ0RhdGEsIGFuZCBnbF9NYXhEcmF3QnVmZmVycyBhcmUg
bm90IGF2YWlsYWJsZS4KLSAgICAgICAgLy8gSW5zdGVhZCwgY3NzX01peENvbG9yIGFuZCBjc3Nf
Q29sb3JNYXRyaXggYXJlIGF2YWlsYWJsZS4KLSAgICAgICAgLy8KLSAgICAgICAgaWYgKHNwZWMg
IT0gU0hfQ1NTX1NIQURFUlNfU1BFQykgewotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0
KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29sb3IiKSwgICAgICAgICAg
ICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0NvbG9yLCAgIDQpKSk7
Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRT
dHJpbmcoImdsX0ZyYWdEYXRhW2dsX01heERyYXdCdWZmZXJzXSIpLCBUVHlwZShFYnRGbG9hdCwg
RWJwTWVkaXVtLCBFdnFGcmFnRGF0YSwgICAgNCkpKTsKLSAgICAgICAgICAgIGlmIChyZXNvdXJj
ZXMuRVhUX2ZyYWdfZGVwdGgpIHsKLSAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQo
Km5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEZXB0aEVYVCIpLCAgICAgICAg
ICAgIFRUeXBlKEVidEZsb2F0LCByZXNvdXJjZXMuRnJhZ21lbnRQcmVjaXNpb25IaWdoID8gRWJw
SGlnaCA6IEVicE1lZGl1bSwgRXZxRnJhZ0RlcHRoLCAxKSkpOwotICAgICAgICAgICAgICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKCJnbF9GcmFnRGVwdGhFWFQiLCAiR0xfRVhUX2Zy
YWdfZGVwdGgiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiY3NzX01p
eENvbG9yIiksICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2
cUdsb2JhbCwgICAgICA0KSkpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcg
VFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJjc3NfQ29sb3JNYXRyaXgiKSwgICAgICAgICAgICAg
ICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAgIDQsIHRydWUpKSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgU0hfVkVSVEVYX1NIQURF
UjoKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3Ry
aW5nKCJnbF9Qb3NpdGlvbiIpLCAgICBUVHlwZShFYnRGbG9hdCwgRWJwSGlnaCwgRXZxUG9zaXRp
b24sICAgIDQpKSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfUG9pbnRTaXplIiksICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1
bSwgRXZxUG9pbnRTaXplLCAgIDEpKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDog
YXNzZXJ0KGZhbHNlICYmICJMYW5ndWFnZSBub3Qgc3VwcG9ydGVkIik7Ci0gICAgfQotCi0gICAg
Ly8KLSAgICAvLyBOZXh0LCBpZGVudGlmeSB3aGljaCBidWlsdC1pbnMgZnJvbSB0aGUgYWxyZWFk
eSBsb2FkZWQgaGVhZGVycyBoYXZlCi0gICAgLy8gYSBtYXBwaW5nIHRvIGFuIG9wZXJhdG9yLiAg
VGhvc2UgdGhhdCBhcmUgbm90IGlkZW50aWZpZWQgYXMgc3VjaCBhcmUKLSAgICAvLyBleHBlY3Rl
ZCB0byBiZSByZXNvbHZlZCB0aHJvdWdoIGEgbGlicmFyeSBvZiBmdW5jdGlvbnMsIHZlcnN1cyBh
cwotICAgIC8vIG9wZXJhdGlvbnMuCi0gICAgLy8KLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKCJtYXRyaXhDb21wTXVsdCIsICAgRU9wTXVsKTsKLQotICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoImVxdWFsIiwgICAgICAgICAgICBFT3BWZWN0b3JFcXVhbCk7Ci0gICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibm90RXF1YWwiLCAgICAgICAgIEVPcFZlY3Rv
ck5vdEVxdWFsKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJsZXNzVGhhbiIs
ICAgICAgICAgRU9wTGVzc1RoYW4pOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
ImdyZWF0ZXJUaGFuIiwgICAgICBFT3BHcmVhdGVyVGhhbik7Ci0gICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcigibGVzc1RoYW5FcXVhbCIsICAgIEVPcExlc3NUaGFuRXF1YWwpOwotICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImdyZWF0ZXJUaGFuRXF1YWwiLCBFT3BHcmVh
dGVyVGhhbkVxdWFsKTsKLSAgICAKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJy
YWRpYW5zIiwgICAgICBFT3BSYWRpYW5zKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKCJkZWdyZWVzIiwgICAgICBFT3BEZWdyZWVzKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVU
b09wZXJhdG9yKCJzaW4iLCAgICAgICAgICBFT3BTaW4pOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoImNvcyIsICAgICAgICAgIEVPcENvcyk7Ci0gICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcigidGFuIiwgICAgICAgICAgRU9wVGFuKTsKLSAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKCJhc2luIiwgICAgICAgICBFT3BBc2luKTsKLSAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKCJhY29zIiwgICAgICAgICBFT3BBY29zKTsKLSAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhdGFuIiwgICAgICAgICBFT3BBdGFuKTsKLQotICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInBvdyIsICAgICAgICAgIEVPcFBvdyk7Ci0gICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZXhwMiIsICAgICAgICAgRU9wRXhwMik7Ci0g
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibG9nIiwgICAgICAgICAgRU9wTG9nKTsK
LSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJleHAiLCAgICAgICAgICBFT3BFeHAp
OwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxvZzIiLCAgICAgICAgIEVPcExv
ZzIpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInNxcnQiLCAgICAgICAgIEVP
cFNxcnQpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImludmVyc2VzcXJ0Iiwg
IEVPcEludmVyc2VTcXJ0KTsKLQotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImFi
cyIsICAgICAgICAgIEVPcEFicyk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigi
c2lnbiIsICAgICAgICAgRU9wU2lnbik7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cigiZmxvb3IiLCAgICAgICAgRU9wRmxvb3IpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoImNlaWwiLCAgICAgICAgIEVPcENlaWwpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoImZyYWN0IiwgICAgICAgIEVPcEZyYWN0KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKCJtb2QiLCAgICAgICAgICBFT3BNb2QpOwotICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoIm1pbiIsICAgICAgICAgIEVPcE1pbik7Ci0gICAgc3ltYm9sVGFibGUu
cmVsYXRlVG9PcGVyYXRvcigibWF4IiwgICAgICAgICAgRU9wTWF4KTsKLSAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKCJjbGFtcCIsICAgICAgICBFT3BDbGFtcCk7Ci0gICAgc3ltYm9s
VGFibGUucmVsYXRlVG9PcGVyYXRvcigibWl4IiwgICAgICAgICAgRU9wTWl4KTsKLSAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzdGVwIiwgICAgICAgICBFT3BTdGVwKTsKLSAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzbW9vdGhzdGVwIiwgICBFT3BTbW9vdGhTdGVw
KTsKLQotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxlbmd0aCIsICAgICAgIEVP
cExlbmd0aCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZGlzdGFuY2UiLCAg
ICAgRU9wRGlzdGFuY2UpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImRvdCIs
ICAgICAgICAgIEVPcERvdCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiY3Jv
c3MiLCAgICAgICAgRU9wQ3Jvc3MpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
Im5vcm1hbGl6ZSIsICAgIEVPcE5vcm1hbGl6ZSk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9P
cGVyYXRvcigiZmFjZWZvcndhcmQiLCAgRU9wRmFjZUZvcndhcmQpOwotICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoInJlZmxlY3QiLCAgICAgIEVPcFJlZmxlY3QpOwotICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInJlZnJhY3QiLCAgICAgIEVPcFJlZnJhY3QpOwotICAg
IAotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImFueSIsICAgICAgICAgIEVPcEFu
eSk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiYWxsIiwgICAgICAgICAgRU9w
QWxsKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJub3QiLCAgICAgICAgICBF
T3BWZWN0b3JMb2dpY2FsTm90KTsKLQotICAgIC8vIE1hcCBsYW5ndWFnZS1zcGVjaWZpYyBvcGVy
YXRvcnMuCi0gICAgc3dpdGNoKHR5cGUpIHsKLSAgICBjYXNlIFNIX1ZFUlRFWF9TSEFERVI6Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgU0hfRlJBR01FTlRfU0hBREVSOgotICAgICAgICBpZiAo
cmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcykgewotICAgICAgICAgICAgc3ltYm9s
VGFibGUucmVsYXRlVG9PcGVyYXRvcigiZEZkeCIsICAgRU9wREZkeCk7Ci0gICAgICAgICAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkRmR5IiwgICBFT3BERmR5KTsKLSAgICAgICAg
ICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImZ3aWR0aCIsIEVPcEZ3aWR0aCk7Ci0K
LSAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKCJkRmR4IiwgIkdMX09F
U19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9FeHRlbnNpb24oImRGZHkiLCAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIik7Ci0gICAg
ICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbigiZndpZHRoIiwgIkdMX09FU19z
dGFuZGFyZF9kZXJpdmF0aXZlcyIpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6IGJyZWFrOwotICAgIH0KLQotICAgIC8vIEZpbmFsbHkgYWRkIHJlc291cmNlLXNwZWNp
ZmljIHZhcmlhYmxlcy4KLSAgICBzd2l0Y2godHlwZSkgewotICAgIGNhc2UgU0hfRlJBR01FTlRf
U0hBREVSOgotICAgICAgICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKSB7Ci0gICAg
ICAgICAgICAvLyBTZXQgdXAgZ2xfRnJhZ0RhdGEuICBUaGUgYXJyYXkgc2l6ZS4KLSAgICAgICAg
ICAgIFRUeXBlIGZyYWdEYXRhKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCA0LCBm
YWxzZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBmcmFnRGF0YS5zZXRBcnJheVNpemUocmVzb3VyY2Vz
Lk1heERyYXdCdWZmZXJzKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRW
YXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGEiKSwgICAgZnJhZ0RhdGEpKTsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OiBicmVhazsKLSAgICB9Ci19Ci0K
LXZvaWQgSW5pdEV4dGVuc2lvbkJlaGF2aW9yKGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyYgcmVz
b3VyY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgVEV4dGVuc2lvbkJlaGF2aW9yJiBl
eHRCZWhhdmlvcikKLXsKLSAgICBpZiAocmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZl
cykKLSAgICAgICAgZXh0QmVoYXZpb3JbIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyJdID0g
RUJoVW5kZWZpbmVkOwotICAgIGlmIChyZXNvdXJjZXMuT0VTX0VHTF9pbWFnZV9leHRlcm5hbCkK
LSAgICAgICAgZXh0QmVoYXZpb3JbIkdMX09FU19FR0xfaW1hZ2VfZXh0ZXJuYWwiXSA9IEVCaFVu
ZGVmaW5lZDsKLSAgICBpZiAocmVzb3VyY2VzLkFSQl90ZXh0dXJlX3JlY3RhbmdsZSkKLSAgICAg
ICAgZXh0QmVoYXZpb3JbIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSJdID0gRUJoVW5kZWZpbmVk
OwotICAgIGlmIChyZXNvdXJjZXMuRVhUX2RyYXdfYnVmZmVycykKLSAgICAgICAgZXh0QmVoYXZp
b3JbIkdMX0VYVF9kcmF3X2J1ZmZlcnMiXSA9IEVCaFVuZGVmaW5lZDsKLSAgICBpZiAocmVzb3Vy
Y2VzLkVYVF9mcmFnX2RlcHRoKQotICAgICAgICBleHRCZWhhdmlvclsiR0xfRVhUX2ZyYWdfZGVw
dGgiXSA9IEVCaFVuZGVmaW5lZDsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0
YWExMzQ2NmFjYWQyOWU2NjZjMDVmYWQ2NzU5YThkYWZmOWRiODBkLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9Jbml0aWFsaXplLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIF9JTklUSUFMSVpFX0lOQ0xVREVEXwotI2RlZmlu
ZSBfSU5JVElBTElaRV9JTkNMVURFRF8KLQotI2luY2x1ZGUgImNvbXBpbGVyL0NvbW1vbi5oIgot
I2luY2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvU3ltYm9s
VGFibGUuaCIKLQotdm9pZCBJbnNlcnRCdWlsdEluRnVuY3Rpb25zKFNoU2hhZGVyVHlwZSB0eXBl
LCBTaFNoYWRlclNwZWMgc3BlYywgY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzICZyZXNvdXJjZXMs
IFRTeW1ib2xUYWJsZSAmdGFibGUpOwotCi12b2lkIElkZW50aWZ5QnVpbHRJbnMoU2hTaGFkZXJU
eXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFNoQnVpbHRJblJlc291cmNlcyYgcmVzb3VyY2VzLAotICAgICAgICAgICAgICAgICAgICAgIFRT
eW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpOwotCi12b2lkIEluaXRFeHRlbnNpb25CZWhhdmlvcihj
b25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291cmNlcywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFRFeHRlbnNpb25CZWhhdmlvciYgZXh0ZW5zaW9uQmVoYXZpb3IpOwotCi0jZW5kaWYg
Ly8gX0lOSVRJQUxJWkVfSU5DTFVERURfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDZjN2YyN2ZjZWQxNzRiMGIxNGE2N2JlN2M2NTIwZjE3OTRlMmE3NjYuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVEbGwuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMzIgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0v
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL0lu
aXRpYWxpemVEbGwuaCIKLQotI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVHbG9iYWxzLmgi
Ci0jaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgotI2luY2x1ZGUg
ImNvbXBpbGVyL29zaW5jbHVkZS5oIgotCi1ib29sIEluaXRQcm9jZXNzKCkKLXsKLSAgICBpZiAo
IUluaXRpYWxpemVQb29sSW5kZXgoKSkgewotICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdFByb2Nl
c3MoKTogRmFpbGVkIHRvIGluaXRhbGl6ZSBnbG9iYWwgcG9vbCIpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFJbml0aWFsaXplUGFyc2VDb250ZXh0SW5kZXgoKSkg
ewotICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdFByb2Nlc3MoKTogRmFpbGVkIHRvIGluaXRhbGl6
ZSBwYXJzZSBjb250ZXh0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBEZXRhY2hQcm9jZXNzKCkKLXsKLSAgICBGcmVlUGFyc2VD
b250ZXh0SW5kZXgoKTsKLSAgICBGcmVlUG9vbEluZGV4KCk7Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVEbGwuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNDMwNzBjYzNmZjc4Zjc1M2EyNDZjNDYwNjk4OTA4NmE2M2Jm
MDhiYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5oCisrKyAvZGV2
L251bGwKQEAgLTEsMTMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLSNpZm5kZWYgX19JTklU
SUFMSVpFRExMX0gKLSNkZWZpbmUgX19JTklUSUFMSVpFRExMX0gKLQotYm9vbCBJbml0UHJvY2Vz
cygpOwotdm9pZCBEZXRhY2hQcm9jZXNzKCk7Ci0KLSNlbmRpZiAvLyBfX0lOSVRJQUxJWkVETExf
SAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5p
dGlhbGl6ZUdMUG9zaXRpb24uY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0luaXRpYWxpemVHTFBvc2l0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZTAxOTNlMzlkMmU4YmExYTZkMTAxNWM5MWFjMGRkMGIwZGE4NDc2OC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZUdMUG9zaXRpb24uY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNjEgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0v
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL0lu
aXRpYWxpemVHTFBvc2l0aW9uLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKLQotYm9v
bCBJbml0aWFsaXplR0xQb3NpdGlvbjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRl
cm1BZ2dyZWdhdGUqIG5vZGUpCi17Ci0gICAgYm9vbCB2aXNpdENoaWxkcmVuID0gIW1Db2RlSW5z
ZXJ0ZWQ7Ci0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQotICAgIHsKLSAgICAgIGNhc2UgRU9w
U2VxdWVuY2U6IGJyZWFrOwotICAgICAgY2FzZSBFT3BGdW5jdGlvbjoKLSAgICAgIHsKLSAgICAg
ICAgLy8gRnVuY3Rpb24gZGVmaW5pdGlvbi4KLSAgICAgICAgQVNTRVJUKHZpc2l0ID09IFByZVZp
c2l0KTsKLSAgICAgICAgaWYgKG5vZGUtPmdldE5hbWUoKSA9PSAibWFpbigiKQotICAgICAgICB7
Ci0gICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJnNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVu
Y2UoKTsKLSAgICAgICAgICAgIEFTU0VSVCgoc2VxdWVuY2Uuc2l6ZSgpID09IDEpIHx8IChzZXF1
ZW5jZS5zaXplKCkgPT0gMikpOwotICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSAqYm9keSA9
IE5VTEw7Ci0gICAgICAgICAgICBpZiAoc2VxdWVuY2Uuc2l6ZSgpID09IDEpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgYm9keSA9IG5ldyBUSW50ZXJtQWdncmVnYXRlKEVPcFNlcXVl
bmNlKTsKLSAgICAgICAgICAgICAgICBzZXF1ZW5jZS5wdXNoX2JhY2soYm9keSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Ym9keSA9IHNlcXVlbmNlWzFdLT5nZXRBc0FnZ3JlZ2F0ZSgpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgQVNTRVJUKGJvZHkpOwotICAgICAgICAgICAgaW5zZXJ0Q29kZShib2R5LT5nZXRT
ZXF1ZW5jZSgpKTsKLSAgICAgICAgICAgIG1Db2RlSW5zZXJ0ZWQgPSB0cnVlOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZGVmYXVsdDogdmlzaXRDaGlsZHJlbiA9
IGZhbHNlOyBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHZpc2l0Q2hpbGRyZW47Ci19Ci0KLXZv
aWQgSW5pdGlhbGl6ZUdMUG9zaXRpb246Omluc2VydENvZGUoVEludGVybVNlcXVlbmNlJiBzZXF1
ZW5jZSkKLXsKLSAgICBUSW50ZXJtQmluYXJ5ICpiaW5hcnkgPSBuZXcgVEludGVybUJpbmFyeShF
T3BBc3NpZ24pOwotICAgIHNlcXVlbmNlLmluc2VydChzZXF1ZW5jZS5iZWdpbigpLCBiaW5hcnkp
OwotCi0gICAgVEludGVybVN5bWJvbCAqbGVmdCA9IG5ldyBUSW50ZXJtU3ltYm9sKAotICAgICAg
ICAwLCAiZ2xfUG9zaXRpb24iLCBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFQb3Np
dGlvbiwgNCkpOwotICAgIGJpbmFyeS0+c2V0TGVmdChsZWZ0KTsKLQotICAgIENvbnN0YW50VW5p
b24gKnUgPSBuZXcgQ29uc3RhbnRVbmlvbls0XTsKLSAgICBmb3IgKGludCBpaSA9IDA7IGlpIDwg
MzsgKytpaSkKLSAgICAgICAgdVtpaV0uc2V0RkNvbnN0KDAuMGYpOwotICAgIHVbM10uc2V0RkNv
bnN0KDEuMGYpOwotICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpyaWdodCA9IG5ldyBUSW50ZXJt
Q29uc3RhbnRVbmlvbigKLSAgICAgICAgdSwgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwg
RXZxQ29uc3QsIDQpKTsKLSAgICBiaW5hcnktPnNldFJpZ2h0KHJpZ2h0KTsKLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplR0xQb3Np
dGlvbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVH
TFBvc2l0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiMTEwNzVhMTM3OThj
ZjNlNmYxZDc0Y2JkYmZiMDQzMjBlNzc1N2IuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0lu
aXRpYWxpemVHTFBvc2l0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX0lOSVRJQUxJWkVfR0xfUE9TSVRJT05f
SF8KLSNkZWZpbmUgQ09NUElMRVJfSU5JVElBTElaRV9HTF9QT1NJVElPTl9IXwotCi0jaW5jbHVk
ZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCi0KLWNsYXNzIEluaXRpYWxpemVHTFBvc2l0aW9u
IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKLXsKLXB1YmxpYzoKLSAgICBJbml0aWFsaXplR0xQ
b3NpdGlvbigpIDogbUNvZGVJbnNlcnRlZChmYWxzZSkgeyB9Ci0KLXByb3RlY3RlZDoKLSAgICB2
aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5vZGUp
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlz
aXQsIFRJbnRlcm1VbmFyeSogbm9kZSkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUpIHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwg
VEludGVybUxvb3AqIG5vZGUpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIHZp
c2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKiBub2RlKSB7IHJldHVybiBmYWxz
ZTsgfQotCi0gICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50
ZXJtQWdncmVnYXRlKiBub2RlKTsKLQotcHJpdmF0ZToKLSAgICAvLyBJbnNlcnQgQVNUIG5vZGUg
aW4gdGhlIGJlZ2lubmluZyBvZiBtYWluKCkgZm9yICJnbF9Qb3NpdGlvbiA9IHZlYzQoMC4wLCAw
LjAsIDAuMCwgMS4wKTsiLgotICAgIHZvaWQgaW5zZXJ0Q29kZShUSW50ZXJtU2VxdWVuY2UmIHNl
cXVlbmNlKTsKLQotICAgIGJvb2wgbUNvZGVJbnNlcnRlZDsKLX07Ci0KLSNlbmRpZiAgLy8gQ09N
UElMRVJfSU5JVElBTElaRV9HTF9QT1NJVElPTl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVHbG9iYWxzLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZUdsb2JhbHMuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDcxNTk0MTQyNDcxMDUzMDgwMzg2MjgxMzg2YTk1MDZmYWJk
MDU2My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZUdsb2JhbHMuaAorKysg
L2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYg
X19JTklUSUFMSVpFX0dMT0JBTFNfSU5DTFVERURfCi0jZGVmaW5lIF9fSU5JVElBTElaRV9HTE9C
QUxTX0lOQ0xVREVEXwotCi1ib29sIEluaXRpYWxpemVQb29sSW5kZXgoKTsKLXZvaWQgRnJlZVBv
b2xJbmRleCgpOwotCi0jZW5kaWYgLy8gX19JTklUSUFMSVpFX0dMT0JBTFNfSU5DTFVERURfCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6
ZVBhcnNlQ29udGV4dC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
SW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGRmYWIwMjczMzBkZTk1OTE2MmFiYTZlYWU4MjU4MzBkOTI1MGI0OTMuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNDAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9Jbml0aWFs
aXplUGFyc2VDb250ZXh0LmgiCi0KLSNpbmNsdWRlICJjb21waWxlci9vc2luY2x1ZGUuaCIKLQot
T1NfVExTSW5kZXggR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19JTlZBTElEX1RMU19JTkRF
WDsKLQotYm9vbCBJbml0aWFsaXplUGFyc2VDb250ZXh0SW5kZXgoKQotewotICAgIGFzc2VydChH
bG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCk7Ci0KLSAgICBH
bG9iYWxQYXJzZUNvbnRleHRJbmRleCA9IE9TX0FsbG9jVExTSW5kZXgoKTsKLSAgICByZXR1cm4g
R2xvYmFsUGFyc2VDb250ZXh0SW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7Ci19Ci0KLXZv
aWQgRnJlZVBhcnNlQ29udGV4dEluZGV4KCkKLXsKLSAgICBhc3NlcnQoR2xvYmFsUGFyc2VDb250
ZXh0SW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpOwotCi0gICAgT1NfRnJlZVRMU0luZGV4
KEdsb2JhbFBhcnNlQ29udGV4dEluZGV4KTsKLSAgICBHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9
IE9TX0lOVkFMSURfVExTX0lOREVYOwotfQotCi12b2lkIFNldEdsb2JhbFBhcnNlQ29udGV4dChU
UGFyc2VDb250ZXh0KiBjb250ZXh0KQotewotICAgIGFzc2VydChHbG9iYWxQYXJzZUNvbnRleHRJ
bmRleCAhPSBPU19JTlZBTElEX1RMU19JTkRFWCk7Ci0gICAgT1NfU2V0VExTVmFsdWUoR2xvYmFs
UGFyc2VDb250ZXh0SW5kZXgsIGNvbnRleHQpOwotfQotCi1UUGFyc2VDb250ZXh0KiBHZXRHbG9i
YWxQYXJzZUNvbnRleHQoKQotewotICAgIGFzc2VydChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCAh
PSBPU19JTlZBTElEX1RMU19JTkRFWCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFRQYXJzZUNv
bnRleHQqPihPU19HZXRUTFNWYWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCkpOwotfQotCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6
ZVBhcnNlQ29udGV4dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0lu
aXRpYWxpemVQYXJzZUNvbnRleHQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZm
YmFiODdkMDcyM2E2MzI4NDY4NDNjMzBkOWNhYzMzMDI3MDc3Ni4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTcg
KzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBfX0lOSVRJQUxJWkVfUEFSU0Vf
Q09OVEVYVF9JTkNMVURFRF8KLSNkZWZpbmUgX19JTklUSUFMSVpFX1BBUlNFX0NPTlRFWFRfSU5D
TFVERURfCi0KLWJvb2wgSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCk7Ci12b2lkIEZyZWVQ
YXJzZUNvbnRleHRJbmRleCgpOwotCi1zdHJ1Y3QgVFBhcnNlQ29udGV4dDsKLWV4dGVybiB2b2lk
IFNldEdsb2JhbFBhcnNlQ29udGV4dChUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKLWV4dGVybiBU
UGFyc2VDb250ZXh0KiBHZXRHbG9iYWxQYXJzZUNvbnRleHQoKTsKLQotI2VuZGlmIC8vIF9fSU5J
VElBTElaRV9QQVJTRV9DT05URVhUX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybVRyYXZlcnNlLmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1UcmF2ZXJzZS5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDlhNjkxZGE3MWZkMDFmNDEwNzNiNzRiNmM5YWM1MTBhMGFkZjBk
MDYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybVRyYXZlcnNlLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDI1OSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAi
Y29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCi0KLS8vCi0vLyBUcmF2ZXJzZSB0aGUgaW50ZXJtZWRp
YXRlIHJlcHJlc2VudGF0aW9uIHRyZWUsIGFuZAotLy8gY2FsbCBhIG5vZGUgdHlwZSBzcGVjaWZp
YyBmdW5jdGlvbiBmb3IgZWFjaCBub2RlLgotLy8gRG9uZSByZWN1cnNpdmVseSB0aHJvdWdoIHRo
ZSBtZW1iZXIgZnVuY3Rpb24gVHJhdmVyc2UoKS4KLS8vIE5vZGUgdHlwZXMgY2FuIGJlIHNraXBw
ZWQgaWYgdGhlaXIgZnVuY3Rpb24gdG8gY2FsbCBpcyAwLAotLy8gYnV0IHRoZWlyIHN1YnRyZWUg
d2lsbCBzdGlsbCBiZSB0cmF2ZXJzZWQuCi0vLyBOb2RlcyB3aXRoIGNoaWxkcmVuIGNhbiBoYXZl
IHRoZWlyIHdob2xlIHN1YnRyZWUgc2tpcHBlZAotLy8gaWYgcHJlVmlzaXQgaXMgdHVybmVkIG9u
IGFuZCB0aGUgdHlwZSBzcGVjaWZpYyBmdW5jdGlvbgotLy8gcmV0dXJucyBmYWxzZS4KLS8vCi0v
LyBwcmVWaXNpdCwgcG9zdFZpc2l0LCBhbmQgcmlnaHRUb0xlZnQgY29udHJvbCB3aGF0IG9yZGVy
Ci0vLyBub2RlcyBhcmUgdmlzaXRlZCBpbi4KLS8vCi0KLS8vCi0vLyBUcmF2ZXJzYWwgZnVuY3Rp
b25zIGZvciB0ZXJtaW5hbHMgYXJlIHN0cmFpZ2hmb3J3YXJkLi4uLgotLy8KLXZvaWQgVEludGVy
bVN5bWJvbDo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciAqaXQpCi17Ci0gICAgaXQtPnZpc2l0
U3ltYm9sKHRoaXMpOwotfQotCi12b2lkIFRJbnRlcm1Db25zdGFudFVuaW9uOjp0cmF2ZXJzZShU
SW50ZXJtVHJhdmVyc2VyICppdCkKLXsKLSAgICBpdC0+dmlzaXRDb25zdGFudFVuaW9uKHRoaXMp
OwotfQotCi0vLwotLy8gVHJhdmVyc2UgYSBiaW5hcnkgbm9kZS4KLS8vCi12b2lkIFRJbnRlcm1C
aW5hcnk6OnRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIgKml0KQotewotICAgIGJvb2wgdmlzaXQg
PSB0cnVlOwotCi0gICAgLy8KLSAgICAvLyB2aXNpdCB0aGUgbm9kZSBiZWZvcmUgY2hpbGRyZW4g
aWYgcHJlLXZpc2l0aW5nLgotICAgIC8vCi0gICAgaWYgKGl0LT5wcmVWaXNpdCkKLSAgICAgICAg
dmlzaXQgPSBpdC0+dmlzaXRCaW5hcnkoUHJlVmlzaXQsIHRoaXMpOwotICAgIAotICAgIC8vCi0g
ICAgLy8gVmlzaXQgdGhlIGNoaWxkcmVuLCBpbiB0aGUgcmlnaHQgb3JkZXIuCi0gICAgLy8KLSAg
ICBpZiAodmlzaXQpCi0gICAgewotICAgICAgICBpdC0+aW5jcmVtZW50RGVwdGgodGhpcyk7Ci0K
LSAgICAgICAgaWYgKGl0LT5yaWdodFRvTGVmdCkgCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChyaWdodCkKLSAgICAgICAgICAgICAgICByaWdodC0+dHJhdmVyc2UoaXQpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAoaXQtPmluVmlzaXQpCi0gICAgICAgICAgICAgICAgdmlzaXQg
PSBpdC0+dmlzaXRCaW5hcnkoSW5WaXNpdCwgdGhpcyk7Ci0KLSAgICAgICAgICAgIGlmICh2aXNp
dCAmJiBsZWZ0KQotICAgICAgICAgICAgICAgIGxlZnQtPnRyYXZlcnNlKGl0KTsKLSAgICAgICAg
fQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChsZWZ0KQotICAgICAg
ICAgICAgICAgIGxlZnQtPnRyYXZlcnNlKGl0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKGl0LT5pblZpc2l0KQotICAgICAgICAgICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0QmluYXJ5
KEluVmlzaXQsIHRoaXMpOwotCi0gICAgICAgICAgICBpZiAodmlzaXQgJiYgcmlnaHQpCi0gICAg
ICAgICAgICAgICAgcmlnaHQtPnRyYXZlcnNlKGl0KTsKLSAgICAgICAgfQotCi0gICAgICAgIGl0
LT5kZWNyZW1lbnREZXB0aCgpOwotICAgIH0KLQotICAgIC8vCi0gICAgLy8gVmlzaXQgdGhlIG5v
ZGUgYWZ0ZXIgdGhlIGNoaWxkcmVuLCBpZiByZXF1ZXN0ZWQgYW5kIHRoZSB0cmF2ZXJzYWwKLSAg
ICAvLyBoYXNuJ3QgYmVlbiBjYW5jZWxsZWQgeWV0LgotICAgIC8vCi0gICAgaWYgKHZpc2l0ICYm
IGl0LT5wb3N0VmlzaXQpCi0gICAgICAgIGl0LT52aXNpdEJpbmFyeShQb3N0VmlzaXQsIHRoaXMp
OwotfQotCi0vLwotLy8gVHJhdmVyc2UgYSB1bmFyeSBub2RlLiAgU2FtZSBjb21tZW50cyBpbiBi
aW5hcnkgbm9kZSBhcHBseSBoZXJlLgotLy8KLXZvaWQgVEludGVybVVuYXJ5Ojp0cmF2ZXJzZShU
SW50ZXJtVHJhdmVyc2VyICppdCkKLXsKLSAgICBib29sIHZpc2l0ID0gdHJ1ZTsKLQotICAgIGlm
IChpdC0+cHJlVmlzaXQpCi0gICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0VW5hcnkoUHJlVmlzaXQs
IHRoaXMpOwotCi0gICAgaWYgKHZpc2l0KSB7Ci0gICAgICAgIGl0LT5pbmNyZW1lbnREZXB0aCh0
aGlzKTsKLSAgICAgICAgb3BlcmFuZC0+dHJhdmVyc2UoaXQpOwotICAgICAgICBpdC0+ZGVjcmVt
ZW50RGVwdGgoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHZpc2l0ICYmIGl0LT5wb3N0VmlzaXQp
Ci0gICAgICAgIGl0LT52aXNpdFVuYXJ5KFBvc3RWaXNpdCwgdGhpcyk7Ci19Ci0KLS8vCi0vLyBU
cmF2ZXJzZSBhbiBhZ2dyZWdhdGUgbm9kZS4gIFNhbWUgY29tbWVudHMgaW4gYmluYXJ5IG5vZGUg
YXBwbHkgaGVyZS4KLS8vCi12b2lkIFRJbnRlcm1BZ2dyZWdhdGU6OnRyYXZlcnNlKFRJbnRlcm1U
cmF2ZXJzZXIgKml0KQotewotICAgIGJvb2wgdmlzaXQgPSB0cnVlOwotICAgIAotICAgIGlmIChp
dC0+cHJlVmlzaXQpCi0gICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0QWdncmVnYXRlKFByZVZpc2l0
LCB0aGlzKTsKLSAgICAKLSAgICBpZiAodmlzaXQpCi0gICAgewotICAgICAgICBpdC0+aW5jcmVt
ZW50RGVwdGgodGhpcyk7Ci0KLSAgICAgICAgaWYgKGl0LT5yaWdodFRvTGVmdCkKLSAgICAgICAg
ewotICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6OnJldmVyc2VfaXRlcmF0b3Igc2l0
ID0gc2VxdWVuY2UucmJlZ2luKCk7IHNpdCAhPSBzZXF1ZW5jZS5yZW5kKCk7IHNpdCsrKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICgqc2l0KS0+dHJhdmVyc2UoaXQpOwotCi0gICAg
ICAgICAgICAgICAgaWYgKHZpc2l0ICYmIGl0LT5pblZpc2l0KQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCpzaXQgIT0gc2VxdWVuY2UuZnJvbnQoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0QWdncmVnYXRlKEluVmlzaXQsIHRo
aXMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjppdGVy
YXRvciBzaXQgPSBzZXF1ZW5jZS5iZWdpbigpOyBzaXQgIT0gc2VxdWVuY2UuZW5kKCk7IHNpdCsr
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICgqc2l0KS0+dHJhdmVyc2UoaXQpOwot
Ci0gICAgICAgICAgICAgICAgaWYgKHZpc2l0ICYmIGl0LT5pblZpc2l0KQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCpzaXQgIT0gc2VxdWVuY2UuYmFjaygpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRBZ2dyZWdhdGUoSW5WaXNp
dCwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBpdC0+ZGVjcmVtZW50RGVwdGgoKTsKLSAgICB9Ci0KLSAgICBpZiAo
dmlzaXQgJiYgaXQtPnBvc3RWaXNpdCkKLSAgICAgICAgaXQtPnZpc2l0QWdncmVnYXRlKFBvc3RW
aXNpdCwgdGhpcyk7Ci19Ci0KLS8vCi0vLyBUcmF2ZXJzZSBhIHNlbGVjdGlvbiBub2RlLiAgU2Ft
ZSBjb21tZW50cyBpbiBiaW5hcnkgbm9kZSBhcHBseSBoZXJlLgotLy8KLXZvaWQgVEludGVybVNl
bGVjdGlvbjo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciAqaXQpCi17Ci0gICAgYm9vbCB2aXNp
dCA9IHRydWU7Ci0KLSAgICBpZiAoaXQtPnByZVZpc2l0KQotICAgICAgICB2aXNpdCA9IGl0LT52
aXNpdFNlbGVjdGlvbihQcmVWaXNpdCwgdGhpcyk7Ci0gICAgCi0gICAgaWYgKHZpc2l0KSB7Ci0g
ICAgICAgIGl0LT5pbmNyZW1lbnREZXB0aCh0aGlzKTsKLSAgICAgICAgaWYgKGl0LT5yaWdodFRv
TGVmdCkgewotICAgICAgICAgICAgaWYgKGZhbHNlQmxvY2spCi0gICAgICAgICAgICAgICAgZmFs
c2VCbG9jay0+dHJhdmVyc2UoaXQpOwotICAgICAgICAgICAgaWYgKHRydWVCbG9jaykKLSAgICAg
ICAgICAgICAgICB0cnVlQmxvY2stPnRyYXZlcnNlKGl0KTsKLSAgICAgICAgICAgIGNvbmRpdGlv
bi0+dHJhdmVyc2UoaXQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29uZGl0aW9u
LT50cmF2ZXJzZShpdCk7Ci0gICAgICAgICAgICBpZiAodHJ1ZUJsb2NrKQotICAgICAgICAgICAg
ICAgIHRydWVCbG9jay0+dHJhdmVyc2UoaXQpOwotICAgICAgICAgICAgaWYgKGZhbHNlQmxvY2sp
Ci0gICAgICAgICAgICAgICAgZmFsc2VCbG9jay0+dHJhdmVyc2UoaXQpOwotICAgICAgICB9Ci0g
ICAgICAgIGl0LT5kZWNyZW1lbnREZXB0aCgpOwotICAgIH0KLQotICAgIGlmICh2aXNpdCAmJiBp
dC0+cG9zdFZpc2l0KQotICAgICAgICBpdC0+dmlzaXRTZWxlY3Rpb24oUG9zdFZpc2l0LCB0aGlz
KTsKLX0KLQotLy8KLS8vIFRyYXZlcnNlIGEgbG9vcCBub2RlLiAgU2FtZSBjb21tZW50cyBpbiBi
aW5hcnkgbm9kZSBhcHBseSBoZXJlLgotLy8KLXZvaWQgVEludGVybUxvb3A6OnRyYXZlcnNlKFRJ
bnRlcm1UcmF2ZXJzZXIgKml0KQotewotICAgIGJvb2wgdmlzaXQgPSB0cnVlOwotCi0gICAgaWYg
KGl0LT5wcmVWaXNpdCkKLSAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRMb29wKFByZVZpc2l0LCB0
aGlzKTsKLSAgICAKLSAgICBpZiAodmlzaXQpCi0gICAgewotICAgICAgICBpdC0+aW5jcmVtZW50
RGVwdGgodGhpcyk7Ci0KLSAgICAgICAgaWYgKGl0LT5yaWdodFRvTGVmdCkKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKGV4cHIpCi0gICAgICAgICAgICAgICAgZXhwci0+dHJhdmVyc2UoaXQp
OwotCi0gICAgICAgICAgICBpZiAoYm9keSkKLSAgICAgICAgICAgICAgICBib2R5LT50cmF2ZXJz
ZShpdCk7Ci0KLSAgICAgICAgICAgIGlmIChjb25kKQotICAgICAgICAgICAgICAgIGNvbmQtPnRy
YXZlcnNlKGl0KTsKLQotICAgICAgICAgICAgaWYgKGluaXQpCi0gICAgICAgICAgICAgICAgaW5p
dC0+dHJhdmVyc2UoaXQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKGluaXQpCi0gICAgICAgICAgICAgICAgaW5pdC0+dHJhdmVyc2UoaXQpOwot
Ci0gICAgICAgICAgICBpZiAoY29uZCkKLSAgICAgICAgICAgICAgICBjb25kLT50cmF2ZXJzZShp
dCk7Ci0KLSAgICAgICAgICAgIGlmIChib2R5KQotICAgICAgICAgICAgICAgIGJvZHktPnRyYXZl
cnNlKGl0KTsKLQotICAgICAgICAgICAgaWYgKGV4cHIpCi0gICAgICAgICAgICAgICAgZXhwci0+
dHJhdmVyc2UoaXQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaXQtPmRlY3JlbWVudERlcHRoKCk7
Ci0gICAgfQotCi0gICAgaWYgKHZpc2l0ICYmIGl0LT5wb3N0VmlzaXQpCi0gICAgICAgIGl0LT52
aXNpdExvb3AoUG9zdFZpc2l0LCB0aGlzKTsKLX0KLQotLy8KLS8vIFRyYXZlcnNlIGEgYnJhbmNo
IG5vZGUuICBTYW1lIGNvbW1lbnRzIGluIGJpbmFyeSBub2RlIGFwcGx5IGhlcmUuCi0vLwotdm9p
ZCBUSW50ZXJtQnJhbmNoOjp0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyICppdCkKLXsKLSAgICBi
b29sIHZpc2l0ID0gdHJ1ZTsKLQotICAgIGlmIChpdC0+cHJlVmlzaXQpCi0gICAgICAgIHZpc2l0
ID0gaXQtPnZpc2l0QnJhbmNoKFByZVZpc2l0LCB0aGlzKTsKLSAgICAKLSAgICBpZiAodmlzaXQg
JiYgZXhwcmVzc2lvbikgewotICAgICAgICBpdC0+aW5jcmVtZW50RGVwdGgodGhpcyk7Ci0gICAg
ICAgIGV4cHJlc3Npb24tPnRyYXZlcnNlKGl0KTsKLSAgICAgICAgaXQtPmRlY3JlbWVudERlcHRo
KCk7Ci0gICAgfQotCi0gICAgaWYgKHZpc2l0ICYmIGl0LT5wb3N0VmlzaXQpCi0gICAgICAgIGl0
LT52aXNpdEJyYW5jaChQb3N0VmlzaXQsIHRoaXMpOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW50ZXJtZWRpYXRlLmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA0N2U0ZTM5NTEwZTJiNTcyNjkwMmFjNzIxZDNiMmFkNWFjODIx
YzkyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTUwMCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLwotLy8gQnVp
bGQgdGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbi4KLS8vCi0KLSNpbmNsdWRlIDxmbG9h
dC5oPgotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQotI2luY2x1
ZGUgImNvbXBpbGVyL0hhc2hOYW1lcy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL2xvY2FsaW50ZXJt
ZWRpYXRlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUXVhbGlmaWVyQWxpdmUuaCIKLSNpbmNsdWRl
ICJjb21waWxlci9SZW1vdmVUcmVlLmgiCi0KLWJvb2wgQ29tcGFyZVN0cnVjdHVyZShjb25zdCBU
VHlwZSYgbGVmdE5vZGVUeXBlLCBDb25zdGFudFVuaW9uKiByaWdodFVuaW9uQXJyYXksIENvbnN0
YW50VW5pb24qIGxlZnRVbmlvbkFycmF5KTsKLQotc3RhdGljIFRQcmVjaXNpb24gR2V0SGlnaGVy
UHJlY2lzaW9uKFRQcmVjaXNpb24gbGVmdCwgVFByZWNpc2lvbiByaWdodCkKLXsKLSAgICByZXR1
cm4gbGVmdCA+IHJpZ2h0ID8gbGVmdCA6IHJpZ2h0OwotfQotCi1jb25zdCBjaGFyKiBnZXRPcGVy
YXRvclN0cmluZyhUT3BlcmF0b3Igb3ApCi17Ci0gICAgc3dpdGNoIChvcCkgewotICAgICAgY2Fz
ZSBFT3BJbml0aWFsaXplOiByZXR1cm4gIj0iOwotICAgICAgY2FzZSBFT3BBc3NpZ246IHJldHVy
biAiPSI7Ci0gICAgICBjYXNlIEVPcEFkZEFzc2lnbjogcmV0dXJuICIrPSI7Ci0gICAgICBjYXNl
IEVPcFN1YkFzc2lnbjogcmV0dXJuICItPSI7Ci0gICAgICBjYXNlIEVPcERpdkFzc2lnbjogcmV0
dXJuICIvPSI7Ci0KLSAgICAgIC8vIEZhbGwtdGhyb3VnaC4KLSAgICAgIGNhc2UgRU9wTXVsQXNz
aWduOiAKLSAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXhBc3NpZ246Ci0gICAgICBjYXNl
IEVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOgotICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1Nj
YWxhckFzc2lnbjoKLSAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246IHJldHVy
biAiKj0iOwotCi0gICAgICAvLyBGYWxsLXRocm91Z2guCi0gICAgICBjYXNlIEVPcEluZGV4RGly
ZWN0OgotICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OiByZXR1cm4gIltdIjsKLQotICAgICAg
Y2FzZSBFT3BJbmRleERpcmVjdFN0cnVjdDogcmV0dXJuICIuIjsKLSAgICAgIGNhc2UgRU9wVmVj
dG9yU3dpenpsZTogcmV0dXJuICIuIjsKLSAgICAgIGNhc2UgRU9wQWRkOiByZXR1cm4gIisiOwot
ICAgICAgY2FzZSBFT3BTdWI6IHJldHVybiAiLSI7Ci0gICAgICBjYXNlIEVPcE11bDogcmV0dXJu
ICIqIjsKLSAgICAgIGNhc2UgRU9wRGl2OiByZXR1cm4gIi8iOwotICAgICAgY2FzZSBFT3BNb2Q6
IFVOSU1QTEVNRU5URUQoKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcEVxdWFsOiByZXR1cm4gIj09
IjsKLSAgICAgIGNhc2UgRU9wTm90RXF1YWw6IHJldHVybiAiIT0iOwotICAgICAgY2FzZSBFT3BM
ZXNzVGhhbjogcmV0dXJuICI8IjsKLSAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46IHJldHVybiAi
PiI7Ci0gICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6IHJldHVybiAiPD0iOwotICAgICAgY2Fz
ZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiByZXR1cm4gIj49IjsKLQotICAgICAgLy8gRmFsbC10aHJv
dWdoLgotICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjoKLSAgICAgIGNhc2UgRU9wVmVj
dG9yVGltZXNNYXRyaXg6Ci0gICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVjdG9yOgotICAgICAg
Y2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhcjoKLSAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRy
aXg6IHJldHVybiAiKiI7Ci0KLSAgICAgIGNhc2UgRU9wTG9naWNhbE9yOiByZXR1cm4gInx8IjsK
LSAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjogcmV0dXJuICJeXiI7Ci0gICAgICBjYXNlIEVPcExv
Z2ljYWxBbmQ6IHJldHVybiAiJiYiOwotICAgICAgY2FzZSBFT3BOZWdhdGl2ZTogcmV0dXJuICIt
IjsKLSAgICAgIGNhc2UgRU9wVmVjdG9yTG9naWNhbE5vdDogcmV0dXJuICJub3QiOwotICAgICAg
Y2FzZSBFT3BMb2dpY2FsTm90OiByZXR1cm4gIiEiOwotICAgICAgY2FzZSBFT3BQb3N0SW5jcmVt
ZW50OiByZXR1cm4gIisrIjsKLSAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDogcmV0dXJuICIt
LSI7Ci0gICAgICBjYXNlIEVPcFByZUluY3JlbWVudDogcmV0dXJuICIrKyI7Ci0gICAgICBjYXNl
IEVPcFByZURlY3JlbWVudDogcmV0dXJuICItLSI7Ci0KLSAgICAgIC8vIEZhbGwtdGhyb3VnaC4K
LSAgICAgIGNhc2UgRU9wQ29udkludFRvQm9vbDoKLSAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9C
b29sOiByZXR1cm4gImJvb2wiOwotIAotICAgICAgLy8gRmFsbC10aHJvdWdoLgotICAgICAgY2Fz
ZSBFT3BDb252Qm9vbFRvRmxvYXQ6Ci0gICAgICBjYXNlIEVPcENvbnZJbnRUb0Zsb2F0OiByZXR1
cm4gImZsb2F0IjsKLSAKLSAgICAgIC8vIEZhbGwtdGhyb3VnaC4KLSAgICAgIGNhc2UgRU9wQ29u
dkZsb2F0VG9JbnQ6Ci0gICAgICBjYXNlIEVPcENvbnZCb29sVG9JbnQ6IHJldHVybiAiaW50IjsK
LQotICAgICAgY2FzZSBFT3BSYWRpYW5zOiByZXR1cm4gInJhZGlhbnMiOwotICAgICAgY2FzZSBF
T3BEZWdyZWVzOiByZXR1cm4gImRlZ3JlZXMiOwotICAgICAgY2FzZSBFT3BTaW46IHJldHVybiAi
c2luIjsKLSAgICAgIGNhc2UgRU9wQ29zOiByZXR1cm4gImNvcyI7Ci0gICAgICBjYXNlIEVPcFRh
bjogcmV0dXJuICJ0YW4iOwotICAgICAgY2FzZSBFT3BBc2luOiByZXR1cm4gImFzaW4iOwotICAg
ICAgY2FzZSBFT3BBY29zOiByZXR1cm4gImFjb3MiOwotICAgICAgY2FzZSBFT3BBdGFuOiByZXR1
cm4gImF0YW4iOwotICAgICAgY2FzZSBFT3BFeHA6IHJldHVybiAiZXhwIjsKLSAgICAgIGNhc2Ug
RU9wTG9nOiByZXR1cm4gImxvZyI7Ci0gICAgICBjYXNlIEVPcEV4cDI6IHJldHVybiAiZXhwMiI7
Ci0gICAgICBjYXNlIEVPcExvZzI6IHJldHVybiAibG9nMiI7Ci0gICAgICBjYXNlIEVPcFNxcnQ6
IHJldHVybiAic3FydCI7Ci0gICAgICBjYXNlIEVPcEludmVyc2VTcXJ0OiByZXR1cm4gImludmVy
c2VzcXJ0IjsKLSAgICAgIGNhc2UgRU9wQWJzOiByZXR1cm4gImFicyI7Ci0gICAgICBjYXNlIEVP
cFNpZ246IHJldHVybiAic2lnbiI7Ci0gICAgICBjYXNlIEVPcEZsb29yOiByZXR1cm4gImZsb29y
IjsKLSAgICAgIGNhc2UgRU9wQ2VpbDogcmV0dXJuICJjZWlsIjsKLSAgICAgIGNhc2UgRU9wRnJh
Y3Q6IHJldHVybiAiZnJhY3QiOwotICAgICAgY2FzZSBFT3BMZW5ndGg6IHJldHVybiAibGVuZ3Ro
IjsKLSAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiByZXR1cm4gIm5vcm1hbGl6ZSI7Ci0gICAgICBj
YXNlIEVPcERGZHg6IHJldHVybiAiZEZkeCI7Ci0gICAgICBjYXNlIEVPcERGZHk6IHJldHVybiAi
ZEZkeSI7Ci0gICAgICBjYXNlIEVPcEZ3aWR0aDogcmV0dXJuICJmd2lkdGgiOwotICAgICAgY2Fz
ZSBFT3BBbnk6IHJldHVybiAiYW55IjsKLSAgICAgIGNhc2UgRU9wQWxsOiByZXR1cm4gImFsbCI7
Ci0KLSAgICAgIGRlZmF1bHQ6IGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gIiI7Ci19Ci0KLS8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyBGaXJzdCBzZXQgb2YgZnVuY3Rpb25zIGFyZSB0byBo
ZWxwIGJ1aWxkIHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24uCi0vLyBUaGVzZSBmdW5j
dGlvbnMgYXJlIG5vdCBtZW1iZXIgZnVuY3Rpb25zIG9mIHRoZSBub2Rlcy4KLS8vIFRoZXkgYXJl
IGNhbGxlZCBmcm9tIHBhcnNlciBwcm9kdWN0aW9ucy4KLS8vCi0vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LwotCi0vLwotLy8gQWRkIGEgdGVybWluYWwgbm9kZSBmb3IgYW4gaWRlbnRpZmllciBpbiBhbiBl
eHByZXNzaW9uLgotLy8KLS8vIFJldHVybnMgdGhlIGFkZGVkIG5vZGUuCi0vLwotVEludGVybVN5
bWJvbCogVEludGVybWVkaWF0ZTo6YWRkU3ltYm9sKGludCBpZCwgY29uc3QgVFN0cmluZyYgbmFt
ZSwgY29uc3QgVFR5cGUmIHR5cGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCi17Ci0gICAgVElu
dGVybVN5bWJvbCogbm9kZSA9IG5ldyBUSW50ZXJtU3ltYm9sKGlkLCBuYW1lLCB0eXBlKTsKLSAg
ICBub2RlLT5zZXRMaW5lKGxpbmUpOwotCi0gICAgcmV0dXJuIG5vZGU7Ci19Ci0KLS8vCi0vLyBD
b25uZWN0IHR3byBub2RlcyB3aXRoIGEgbmV3IHBhcmVudCB0aGF0IGRvZXMgYSBiaW5hcnkgb3Bl
cmF0aW9uIG9uIHRoZSBub2Rlcy4KLS8vCi0vLyBSZXR1cm5zIHRoZSBhZGRlZCBub2RlLgotLy8K
LVRJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkQmluYXJ5TWF0aChUT3BlcmF0b3Igb3As
IFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdodCwgY29uc3QgVFNvdXJjZUxv
YyYgbGluZSwgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKLXsKLSAgICBzd2l0Y2ggKG9wKSB7
Ci0gICAgICAgIGNhc2UgRU9wRXF1YWw6Ci0gICAgICAgIGNhc2UgRU9wTm90RXF1YWw6Ci0gICAg
ICAgICAgICBpZiAobGVmdC0+aXNBcnJheSgpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTGVzc1RoYW46Ci0gICAgICAgIGNh
c2UgRU9wR3JlYXRlclRoYW46Ci0gICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoKLSAgICAg
ICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgotICAgICAgICAgICAgaWYgKGxlZnQtPmlzTWF0
cml4KCkgfHwgbGVmdC0+aXNBcnJheSgpIHx8IGxlZnQtPmlzVmVjdG9yKCkgfHwgbGVmdC0+Z2V0
QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BMb2dpY2Fs
T3I6Ci0gICAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjoKLSAgICAgICAgY2FzZSBFT3BMb2dpY2Fs
QW5kOgotICAgICAgICAgICAgaWYgKGxlZnQtPmdldEJhc2ljVHlwZSgpICE9IEVidEJvb2wgfHwg
bGVmdC0+aXNNYXRyaXgoKSB8fCBsZWZ0LT5pc0FycmF5KCkgfHwgbGVmdC0+aXNWZWN0b3IoKSkg
ewotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQWRkOgotICAgICAgICBjYXNlIEVPcFN1YjoKLSAgICAg
ICAgY2FzZSBFT3BEaXY6Ci0gICAgICAgIGNhc2UgRU9wTXVsOgotICAgICAgICAgICAgaWYgKGxl
ZnQtPmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCB8fCBsZWZ0LT5nZXRCYXNpY1R5cGUoKSA9
PSBFYnRCb29sKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBkZWZhdWx0OiBi
cmVhazsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIEZpcnN0IHRyeSBjb252ZXJ0aW5nIHRoZSBj
aGlsZHJlbiB0byBjb21wYXRpYmxlIHR5cGVzLgotICAgIC8vCi0gICAgaWYgKGxlZnQtPmdldFR5
cGUoKS5nZXRTdHJ1Y3QoKSAmJiByaWdodC0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpKSB7Ci0gICAg
ICAgIGlmIChsZWZ0LT5nZXRUeXBlKCkgIT0gcmlnaHQtPmdldFR5cGUoKSkKLSAgICAgICAgICAg
IHJldHVybiAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFRJbnRlcm1UeXBlZCogY2hpbGQgPSBh
ZGRDb252ZXJzaW9uKG9wLCBsZWZ0LT5nZXRUeXBlKCksIHJpZ2h0KTsKLSAgICAgICAgaWYgKGNo
aWxkKQotICAgICAgICAgICAgcmlnaHQgPSBjaGlsZDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBjaGlsZCA9IGFkZENvbnZlcnNpb24ob3AsIHJpZ2h0LT5nZXRUeXBlKCksIGxlZnQpOwot
ICAgICAgICAgICAgaWYgKGNoaWxkKQotICAgICAgICAgICAgICAgIGxlZnQgPSBjaGlsZDsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIC8vCi0gICAgLy8gTmVlZCBhIG5ldyBub2RlIGhvbGRpbmcgdGhpbmdzIHRvZ2V0
aGVyIHRoZW4uICBNYWtlCi0gICAgLy8gb25lIGFuZCBwcm9tb3RlIGl0IHRvIHRoZSByaWdodCB0
eXBlLgotICAgIC8vCi0gICAgVEludGVybUJpbmFyeSogbm9kZSA9IG5ldyBUSW50ZXJtQmluYXJ5
KG9wKTsKLSAgICBub2RlLT5zZXRMaW5lKGxpbmUpOwotCi0gICAgbm9kZS0+c2V0TGVmdChsZWZ0
KTsKLSAgICBub2RlLT5zZXRSaWdodChyaWdodCk7Ci0gICAgaWYgKCFub2RlLT5wcm9tb3RlKGlu
Zm9TaW5rKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLwotICAgIC8vIFNlZSBpZiB3ZSBj
YW4gZm9sZCBjb25zdGFudHMuCi0gICAgLy8KLSAgICBUSW50ZXJtVHlwZWQqIHR5cGVkUmV0dXJu
Tm9kZSA9IDA7Ci0gICAgVEludGVybUNvbnN0YW50VW5pb24gKmxlZnRUZW1wQ29uc3RhbnQgPSBs
ZWZ0LT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqcmln
aHRUZW1wQ29uc3RhbnQgPSByaWdodC0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0gICAgaWYgKGxl
ZnRUZW1wQ29uc3RhbnQgJiYgcmlnaHRUZW1wQ29uc3RhbnQpIHsKLSAgICAgICAgdHlwZWRSZXR1
cm5Ob2RlID0gbGVmdFRlbXBDb25zdGFudC0+Zm9sZChub2RlLT5nZXRPcCgpLCByaWdodFRlbXBD
b25zdGFudCwgaW5mb1NpbmspOwotCi0gICAgICAgIGlmICh0eXBlZFJldHVybk5vZGUpCi0gICAg
ICAgICAgICByZXR1cm4gdHlwZWRSZXR1cm5Ob2RlOwotICAgIH0KLQotICAgIHJldHVybiBub2Rl
OwotfQotCi0vLwotLy8gQ29ubmVjdCB0d28gbm9kZXMgdGhyb3VnaCBhbiBhc3NpZ25tZW50Lgot
Ly8KLS8vIFJldHVybnMgdGhlIGFkZGVkIG5vZGUuCi0vLwotVEludGVybVR5cGVkKiBUSW50ZXJt
ZWRpYXRlOjphZGRBc3NpZ24oVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRl
cm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCi17Ci0gICAgLy8KLSAgICAv
LyBMaWtlIGFkZGluZyBiaW5hcnkgbWF0aCwgZXhjZXB0IHRoZSBjb252ZXJzaW9uIGNhbiBvbmx5
IGdvCi0gICAgLy8gZnJvbSByaWdodCB0byBsZWZ0LgotICAgIC8vCi0gICAgVEludGVybUJpbmFy
eSogbm9kZSA9IG5ldyBUSW50ZXJtQmluYXJ5KG9wKTsKLSAgICBub2RlLT5zZXRMaW5lKGxpbmUp
OwotCi0gICAgVEludGVybVR5cGVkKiBjaGlsZCA9IGFkZENvbnZlcnNpb24ob3AsIGxlZnQtPmdl
dFR5cGUoKSwgcmlnaHQpOwotICAgIGlmIChjaGlsZCA9PSAwKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIG5vZGUtPnNldExlZnQobGVmdCk7Ci0gICAgbm9kZS0+c2V0UmlnaHQoY2hpbGQpOwot
ICAgIGlmICghIG5vZGUtPnByb21vdGUoaW5mb1NpbmspKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIHJldHVybiBub2RlOwotfQotCi0vLwotLy8gQ29ubmVjdCB0d28gbm9kZXMgdGhyb3VnaCBh
biBpbmRleCBvcGVyYXRvciwgd2hlcmUgdGhlIGxlZnQgbm9kZSBpcyB0aGUgYmFzZQotLy8gb2Yg
YW4gYXJyYXkgb3Igc3RydWN0LCBhbmQgdGhlIHJpZ2h0IG5vZGUgaXMgYSBkaXJlY3Qgb3IgaW5k
aXJlY3Qgb2Zmc2V0LgotLy8KLS8vIFJldHVybnMgdGhlIGFkZGVkIG5vZGUuCi0vLyBUaGUgY2Fs
bGVyIHNob3VsZCBzZXQgdGhlIHR5cGUgb2YgdGhlIHJldHVybmVkIG5vZGUuCi0vLwotVEludGVy
bVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRJbmRleChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBl
ZCogYmFzZSwgVEludGVybVR5cGVkKiBpbmRleCwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKLXsK
LSAgICBUSW50ZXJtQmluYXJ5KiBub2RlID0gbmV3IFRJbnRlcm1CaW5hcnkob3ApOwotICAgIG5v
ZGUtPnNldExpbmUobGluZSk7Ci0gICAgbm9kZS0+c2V0TGVmdChiYXNlKTsKLSAgICBub2RlLT5z
ZXRSaWdodChpbmRleCk7Ci0KLSAgICAvLyBjYWxsZXIgc2hvdWxkIHNldCB0aGUgdHlwZQotCi0g
ICAgcmV0dXJuIG5vZGU7Ci19Ci0KLS8vCi0vLyBBZGQgb25lIG5vZGUgYXMgdGhlIHBhcmVudCBv
ZiBhbm90aGVyIHRoYXQgaXQgb3BlcmF0ZXMgb24uCi0vLwotLy8gUmV0dXJucyB0aGUgYWRkZWQg
bm9kZS4KLS8vCi1USW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZFVuYXJ5TWF0aChUT3Bl
cmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBjaGlsZE5vZGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUs
IFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCi17Ci0gICAgVEludGVybVVuYXJ5KiBub2RlOwot
ICAgIFRJbnRlcm1UeXBlZCogY2hpbGQgPSBjaGlsZE5vZGUtPmdldEFzVHlwZWQoKTsKLQotICAg
IGlmIChjaGlsZCA9PSAwKSB7Ci0gICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4
SW50ZXJuYWxFcnJvciwgbGluZSwgIkJhZCB0eXBlIGluIEFkZFVuYXJ5TWF0aCIpOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgRU9w
TG9naWNhbE5vdDoKLSAgICAgICAgICAgIGlmIChjaGlsZC0+Z2V0VHlwZSgpLmdldEJhc2ljVHlw
ZSgpICE9IEVidEJvb2wgfHwgY2hpbGQtPmdldFR5cGUoKS5pc01hdHJpeCgpIHx8IGNoaWxkLT5n
ZXRUeXBlKCkuaXNBcnJheSgpIHx8IGNoaWxkLT5nZXRUeXBlKCkuaXNWZWN0b3IoKSkgewotICAg
ICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50OgotICAgICAgICBjYXNlIEVPcFByZUlu
Y3JlbWVudDoKLSAgICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OgotICAgICAgICBjYXNlIEVP
cFByZURlY3JlbWVudDoKLSAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZToKLSAgICAgICAgICAgIGlm
IChjaGlsZC0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCB8fCBjaGlsZC0+
Z2V0VHlwZSgpLmlzQXJyYXkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
ZGVmYXVsdDogYnJlYWs7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBEbyB3ZSBuZWVkIHRvIHBy
b21vdGUgdGhlIG9wZXJhbmQ/Ci0gICAgLy8KLSAgICAvLyBOb3RlOiBJbXBsaWNpdCBwcm9tb3Rp
b25zIHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBsYW5ndWFnZS4KLSAgICAvLwotICAgIFRCYXNpY1R5
cGUgbmV3VHlwZSA9IEVidFZvaWQ7Ci0gICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIEVP
cENvbnN0cnVjdEludDogICBuZXdUeXBlID0gRWJ0SW50OyAgIGJyZWFrOwotICAgICAgICBjYXNl
IEVPcENvbnN0cnVjdEJvb2w6ICBuZXdUeXBlID0gRWJ0Qm9vbDsgIGJyZWFrOwotICAgICAgICBj
YXNlIEVPcENvbnN0cnVjdEZsb2F0OiBuZXdUeXBlID0gRWJ0RmxvYXQ7IGJyZWFrOwotICAgICAg
ICBkZWZhdWx0OiBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAobmV3VHlwZSAhPSBFYnRWb2lkKSB7
Ci0gICAgICAgIGNoaWxkID0gYWRkQ29udmVyc2lvbihvcCwgVFR5cGUobmV3VHlwZSwgY2hpbGQt
PmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksCi0gICAgICAgICAgICBjaGlsZC0+Z2V0Tm9t
aW5hbFNpemUoKSwKLSAgICAgICAgICAgIGNoaWxkLT5pc01hdHJpeCgpLAotICAgICAgICAgICAg
Y2hpbGQtPmlzQXJyYXkoKSksCi0gICAgICAgICAgICBjaGlsZCk7Ci0gICAgICAgIGlmIChjaGls
ZCA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBG
b3IgY29uc3RydWN0b3JzLCB3ZSBhcmUgbm93IGRvbmUsIGl0J3MgYWxsIGluIHRoZSBjb252ZXJz
aW9uLgotICAgIC8vCi0gICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIEVPcENvbnN0cnVj
dEludDoKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29sOgotICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdEZsb2F0OgotICAgICAgICAgICAgcmV0dXJuIGNoaWxkOwotICAgICAgICBkZWZhdWx0
OiBicmVhazsKLSAgICB9Ci0KLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqY2hpbGRUZW1wQ29u
c3RhbnQgPSAwOwotICAgIGlmIChjaGlsZC0+Z2V0QXNDb25zdGFudFVuaW9uKCkpCi0gICAgICAg
IGNoaWxkVGVtcENvbnN0YW50ID0gY2hpbGQtPmdldEFzQ29uc3RhbnRVbmlvbigpOwotCi0gICAg
Ly8KLSAgICAvLyBNYWtlIGEgbmV3IG5vZGUgZm9yIHRoZSBvcGVyYXRvci4KLSAgICAvLwotICAg
IG5vZGUgPSBuZXcgVEludGVybVVuYXJ5KG9wKTsKLSAgICBub2RlLT5zZXRMaW5lKGxpbmUpOwot
ICAgIG5vZGUtPnNldE9wZXJhbmQoY2hpbGQpOwotCi0gICAgaWYgKCEgbm9kZS0+cHJvbW90ZShp
bmZvU2luaykpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKGNoaWxkVGVtcENvbnN0YW50
KSAgewotICAgICAgICBUSW50ZXJtVHlwZWQqIG5ld0NoaWxkID0gY2hpbGRUZW1wQ29uc3RhbnQt
PmZvbGQob3AsIDAsIGluZm9TaW5rKTsKLQotICAgICAgICBpZiAobmV3Q2hpbGQpCi0gICAgICAg
ICAgICByZXR1cm4gbmV3Q2hpbGQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5vZGU7Ci19Ci0KLS8v
Ci0vLyBUaGlzIGlzIHRoZSBzYWZlIHdheSB0byBjaGFuZ2UgdGhlIG9wZXJhdG9yIG9uIGFuIGFn
Z3JlZ2F0ZSwgYXMgaXQKLS8vIGRvZXMgbG90cyBvZiBlcnJvciBjaGVja2luZyBhbmQgZml4aW5n
LiAgRXNwZWNpYWxseSBmb3IgZXN0YWJsaXNoaW5nCi0vLyBhIGZ1bmN0aW9uIGNhbGwncyBvcGVy
YXRpb24gb24gaXQncyBzZXQgb2YgcGFyYW1ldGVycy4gIFNlcXVlbmNlcwotLy8gb2YgaW5zdHJ1
Y3Rpb25zIGFyZSBhbHNvIGFnZ3JlZ2F0ZXMsIGJ1dCB0aGV5IGp1c3QgZGlyZW5jdGx5IHNldAot
Ly8gdGhlaXIgb3BlcmF0b3IgdG8gRU9wU2VxdWVuY2UuCi0vLwotLy8gUmV0dXJucyBhbiBhZ2dy
ZWdhdGUgbm9kZSwgd2hpY2ggY291bGQgYmUgdGhlIG9uZSBwYXNzZWQgaW4gaWYKLS8vIGl0IHdh
cyBhbHJlYWR5IGFuIGFnZ3JlZ2F0ZSBidXQgbm8gb3BlcmF0b3Igd2FzIHNldC4KLS8vCi1USW50
ZXJtQWdncmVnYXRlKiBUSW50ZXJtZWRpYXRlOjpzZXRBZ2dyZWdhdGVPcGVyYXRvcihUSW50ZXJt
Tm9kZSogbm9kZSwgVE9wZXJhdG9yIG9wLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQotewotICAg
IFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ05vZGU7Ci0KLSAgICAvLwotICAgIC8vIE1ha2Ugc3VyZSB3
ZSBoYXZlIGFuIGFnZ3JlZ2F0ZS4gIElmIG5vdCB0dXJuIGl0IGludG8gb25lLgotICAgIC8vCi0g
ICAgaWYgKG5vZGUpIHsKLSAgICAgICAgYWdnTm9kZSA9IG5vZGUtPmdldEFzQWdncmVnYXRlKCk7
Ci0gICAgICAgIGlmIChhZ2dOb2RlID09IDAgfHwgYWdnTm9kZS0+Z2V0T3AoKSAhPSBFT3BOdWxs
KSB7Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gTWFrZSBhbiBhZ2dyZWdhdGUgY29u
dGFpbmluZyB0aGlzIG5vZGUuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgYWdnTm9kZSA9
IG5ldyBUSW50ZXJtQWdncmVnYXRlKCk7Ci0gICAgICAgICAgICBhZ2dOb2RlLT5nZXRTZXF1ZW5j
ZSgpLnB1c2hfYmFjayhub2RlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICBhZ2dO
b2RlID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGUoKTsKLQotICAgIC8vCi0gICAgLy8gU2V0IHRoZSBv
cGVyYXRvci4KLSAgICAvLwotICAgIGFnZ05vZGUtPnNldE9wKG9wKTsKLSAgICBhZ2dOb2RlLT5z
ZXRMaW5lKGxpbmUpOwotCi0gICAgcmV0dXJuIGFnZ05vZGU7Ci19Ci0KLS8vCi0vLyBDb252ZXJ0
IG9uZSB0eXBlIHRvIGFub3RoZXIuCi0vLwotLy8gUmV0dXJucyB0aGUgbm9kZSByZXByZXNlbnRp
bmcgdGhlIGNvbnZlcnNpb24sIHdoaWNoIGNvdWxkIGJlIHRoZSBzYW1lCi0vLyBub2RlIHBhc3Nl
ZCBpbiBpZiBubyBjb252ZXJzaW9uIHdhcyBuZWVkZWQuCi0vLwotLy8gUmV0dXJuIDAgaWYgYSBj
b252ZXJzaW9uIGNhbid0IGJlIGRvbmUuCi0vLwotVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRl
OjphZGRDb252ZXJzaW9uKFRPcGVyYXRvciBvcCwgY29uc3QgVFR5cGUmIHR5cGUsIFRJbnRlcm1U
eXBlZCogbm9kZSkKLXsKLSAgICAvLwotICAgIC8vIERvZXMgdGhlIGJhc2UgdHlwZSBhbGxvdyBv
cGVyYXRpb24/Ci0gICAgLy8KLSAgICBzd2l0Y2ggKG5vZGUtPmdldEJhc2ljVHlwZSgpKSB7Ci0g
ICAgICAgIGNhc2UgRWJ0Vm9pZDoKLSAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6Ci0gICAgICAg
IGNhc2UgRWJ0U2FtcGxlckN1YmU6Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgZGVm
YXVsdDogYnJlYWs7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBPdGhlcndpc2UsIGlmIHR5cGVz
IGFyZSBpZGVudGljYWwsIG5vIHByb2JsZW0KLSAgICAvLwotICAgIGlmICh0eXBlID09IG5vZGUt
PmdldFR5cGUoKSkKLSAgICAgICAgcmV0dXJuIG5vZGU7Ci0KLSAgICAvLwotICAgIC8vIElmIG9u
ZSdzIGEgc3RydWN0dXJlLCB0aGVuIG5vIGNvbnZlcnNpb25zLgotICAgIC8vCi0gICAgaWYgKHR5
cGUuZ2V0U3RydWN0KCkgfHwgbm9kZS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIC8vCi0gICAgLy8gSWYgb25lJ3MgYW4gYXJyYXksIHRoZW4gbm8gY29u
dmVyc2lvbnMuCi0gICAgLy8KLSAgICBpZiAodHlwZS5pc0FycmF5KCkgfHwgbm9kZS0+Z2V0VHlw
ZSgpLmlzQXJyYXkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBUQmFzaWNUeXBlIHByb21v
dGVUbzsKLQotICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gRXhwbGlj
aXQgY29udmVyc2lvbnMKLSAgICAgICAgLy8KLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29s
OgotICAgICAgICAgICAgcHJvbW90ZVRvID0gRWJ0Qm9vbDsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OgotICAgICAgICAgICAgcHJvbW90ZVRvID0g
RWJ0RmxvYXQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJ
bnQ6Ci0gICAgICAgICAgICBwcm9tb3RlVG8gPSBFYnRJbnQ7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBpbXBsaWNp
dCBjb252ZXJzaW9ucyB3ZXJlIHJlbW92ZWQgZnJvbSB0aGUgbGFuZ3VhZ2UuCi0gICAgICAgICAg
ICAvLwotICAgICAgICAgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgIT0gbm9kZS0+Z2V0VHlw
ZSgpLmdldEJhc2ljVHlwZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAg
ICAgLy8KLSAgICAgICAgICAgIC8vIFNpemUgYW5kIHN0cnVjdHVyZSBjb3VsZCBzdGlsbCBkaWZm
ZXIsIGJ1dCB0aGF0J3MKLSAgICAgICAgICAgIC8vIGhhbmRsZWQgYnkgb3BlcmF0b3IgcHJvbW90
aW9uLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgIH0KLQot
ICAgIGlmIChub2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKSkgewotCi0gICAgICAgIHJldHVybiAo
cHJvbW90ZUNvbnN0YW50VW5pb24ocHJvbW90ZVRvLCBub2RlLT5nZXRBc0NvbnN0YW50VW5pb24o
KSkpOwotICAgIH0gZWxzZSB7Ci0KLSAgICAgICAgLy8KLSAgICAgICAgLy8gQWRkIGEgbmV3IG5l
d05vZGUgZm9yIHRoZSBjb252ZXJzaW9uLgotICAgICAgICAvLwotICAgICAgICBUSW50ZXJtVW5h
cnkqIG5ld05vZGUgPSAwOwotCi0gICAgICAgIFRPcGVyYXRvciBuZXdPcCA9IEVPcE51bGw7Ci0g
ICAgICAgIHN3aXRjaCAocHJvbW90ZVRvKSB7Ci0gICAgICAgICAgICBjYXNlIEVidEZsb2F0Ogot
ICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgbmV3T3AgPSBFT3BDb252SW50VG9GbG9hdDsgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6ICBuZXdPcCA9IEVPcENvbnZC
b29sVG9GbG9hdDsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJy
b3IsIG5vZGUtPmdldExpbmUoKSwgIkJhZCBwcm9tb3Rpb24gbm9kZSIpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFYnRCb29sOgotICAgICAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJ
bnQ6ICAgbmV3T3AgPSBFT3BDb252SW50VG9Cb29sOyAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICBjYXNlIEVidEZsb2F0OiBuZXdPcCA9IEVPcENvbnZGbG9hdFRvQm9vbDsgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmZv
U2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwg
IkJhZCBwcm9tb3Rpb24gbm9kZSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBFYnRJbnQ6Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRCYXNpY1R5cGUo
KSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6ICAgbmV3T3AgPSBFT3BDb252
Qm9vbFRvSW50OyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6ICBu
ZXdPcCA9IEVPcENvbnZGbG9hdFRvSW50OyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQmFkIHByb21vdGlvbiBub2RlIik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0
TGluZSgpLCAiQmFkIHByb21vdGlvbiB0eXBlIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgIH0KLQotICAgICAgICBUVHlwZSB0eXBlKHByb21vdGVUbywgbm9kZS0+Z2V0UHJl
Y2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgbm9kZS0+Z2V0Tm9taW5hbFNpemUoKSwgbm9kZS0+aXNN
YXRyaXgoKSwgbm9kZS0+aXNBcnJheSgpKTsKLSAgICAgICAgbmV3Tm9kZSA9IG5ldyBUSW50ZXJt
VW5hcnkobmV3T3AsIHR5cGUpOwotICAgICAgICBuZXdOb2RlLT5zZXRMaW5lKG5vZGUtPmdldExp
bmUoKSk7Ci0gICAgICAgIG5ld05vZGUtPnNldE9wZXJhbmQobm9kZSk7Ci0KLSAgICAgICAgcmV0
dXJuIG5ld05vZGU7Ci0gICAgfQotfQotCi0vLwotLy8gU2FmZSB3YXkgdG8gY29tYmluZSB0d28g
bm9kZXMgaW50byBhbiBhZ2dyZWdhdGUuICBXb3JrcyB3aXRoIG51bGwgcG9pbnRlcnMsCi0vLyBh
IG5vZGUgdGhhdCdzIG5vdCBhIGFnZ3JlZ2F0ZSB5ZXQsIGV0Yy4KLS8vCi0vLyBSZXR1cm5zIHRo
ZSByZXN1bHRpbmcgYWdncmVnYXRlLCB1bmxlc3MgMCB3YXMgcGFzc2VkIGluIGZvcgotLy8gYm90
aCBleGlzdGluZyBub2Rlcy4KLS8vCi1USW50ZXJtQWdncmVnYXRlKiBUSW50ZXJtZWRpYXRlOjpn
cm93QWdncmVnYXRlKFRJbnRlcm1Ob2RlKiBsZWZ0LCBUSW50ZXJtTm9kZSogcmlnaHQsIGNvbnN0
IFRTb3VyY2VMb2MmIGxpbmUpCi17Ci0gICAgaWYgKGxlZnQgPT0gMCAmJiByaWdodCA9PSAwKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ05vZGUgPSAwOwot
ICAgIGlmIChsZWZ0KQotICAgICAgICBhZ2dOb2RlID0gbGVmdC0+Z2V0QXNBZ2dyZWdhdGUoKTsK
LSAgICBpZiAoIWFnZ05vZGUgfHwgYWdnTm9kZS0+Z2V0T3AoKSAhPSBFT3BOdWxsKSB7Ci0gICAg
ICAgIGFnZ05vZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKLSAgICAgICAgaWYgKGxlZnQpCi0g
ICAgICAgICAgICBhZ2dOb2RlLT5nZXRTZXF1ZW5jZSgpLnB1c2hfYmFjayhsZWZ0KTsKLSAgICB9
Ci0KLSAgICBpZiAocmlnaHQpCi0gICAgICAgIGFnZ05vZGUtPmdldFNlcXVlbmNlKCkucHVzaF9i
YWNrKHJpZ2h0KTsKLQotICAgIGFnZ05vZGUtPnNldExpbmUobGluZSk7Ci0KLSAgICByZXR1cm4g
YWdnTm9kZTsKLX0KLQotLy8KLS8vIFR1cm4gYW4gZXhpc3Rpbmcgbm9kZSBpbnRvIGFuIGFnZ3Jl
Z2F0ZS4KLS8vCi0vLyBSZXR1cm5zIGFuIGFnZ3JlZ2F0ZSwgdW5sZXNzIDAgd2FzIHBhc3NlZCBp
biBmb3IgdGhlIGV4aXN0aW5nIG5vZGUuCi0vLwotVEludGVybUFnZ3JlZ2F0ZSogVEludGVybWVk
aWF0ZTo6bWFrZUFnZ3JlZ2F0ZShUSW50ZXJtTm9kZSogbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYg
bGluZSkKLXsKLSAgICBpZiAobm9kZSA9PSAwKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFRJ
bnRlcm1BZ2dyZWdhdGUqIGFnZ05vZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKLSAgICBhZ2dO
b2RlLT5nZXRTZXF1ZW5jZSgpLnB1c2hfYmFjayhub2RlKTsKLSAgICBhZ2dOb2RlLT5zZXRMaW5l
KGxpbmUpOwotCi0gICAgcmV0dXJuIGFnZ05vZGU7Ci19Ci0KLS8vCi0vLyBGb3IgImlmIiB0ZXN0
IG5vZGVzLiAgVGhlcmUgYXJlIHRocmVlIGNoaWxkcmVuOyBhIGNvbmRpdGlvbiwKLS8vIGEgdHJ1
ZSBwYXRoLCBhbmQgYSBmYWxzZSBwYXRoLiAgVGhlIHR3byBwYXRocyBhcmUgaW4gdGhlCi0vLyBu
b2RlUGFpci4KLS8vCi0vLyBSZXR1cm5zIHRoZSBzZWxlY3Rpb24gbm9kZSBjcmVhdGVkLgotLy8K
LVRJbnRlcm1Ob2RlKiBUSW50ZXJtZWRpYXRlOjphZGRTZWxlY3Rpb24oVEludGVybVR5cGVkKiBj
b25kLCBUSW50ZXJtTm9kZVBhaXIgbm9kZVBhaXIsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCi17
Ci0gICAgLy8KLSAgICAvLyBGb3IgY29tcGlsZSB0aW1lIGNvbnN0YW50IHNlbGVjdGlvbnMsIHBy
dW5lIHRoZSBjb2RlIGFuZAotICAgIC8vIHRlc3Qgbm93LgotICAgIC8vCi0KLSAgICBpZiAoY29u
ZC0+Z2V0QXNUeXBlZCgpICYmIGNvbmQtPmdldEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9u
KCkpIHsKLSAgICAgICAgaWYgKGNvbmQtPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRCQ29uc3Qo
MCkgPT0gdHJ1ZSkKLSAgICAgICAgICAgIHJldHVybiBub2RlUGFpci5ub2RlMSA/IHNldEFnZ3Jl
Z2F0ZU9wZXJhdG9yKG5vZGVQYWlyLm5vZGUxLCBFT3BTZXF1ZW5jZSwgbm9kZVBhaXIubm9kZTEt
PmdldExpbmUoKSkgOiBOVUxMOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gbm9k
ZVBhaXIubm9kZTIgPyBzZXRBZ2dyZWdhdGVPcGVyYXRvcihub2RlUGFpci5ub2RlMiwgRU9wU2Vx
dWVuY2UsIG5vZGVQYWlyLm5vZGUyLT5nZXRMaW5lKCkpIDogTlVMTDsKLSAgICB9Ci0KLSAgICBU
SW50ZXJtU2VsZWN0aW9uKiBub2RlID0gbmV3IFRJbnRlcm1TZWxlY3Rpb24oY29uZCwgbm9kZVBh
aXIubm9kZTEsIG5vZGVQYWlyLm5vZGUyKTsKLSAgICBub2RlLT5zZXRMaW5lKGxpbmUpOwotCi0g
ICAgcmV0dXJuIG5vZGU7Ci19Ci0KLQotVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRD
b21tYShUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3Vy
Y2VMb2MmIGxpbmUpCi17Ci0gICAgaWYgKGxlZnQtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9
PSBFdnFDb25zdCAmJiByaWdodC0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0
KSB7Ci0gICAgICAgIHJldHVybiByaWdodDsKLSAgICB9IGVsc2UgewotICAgICAgICBUSW50ZXJt
VHlwZWQgKmNvbW1hQWdncmVnYXRlID0gZ3Jvd0FnZ3JlZ2F0ZShsZWZ0LCByaWdodCwgbGluZSk7
Ci0gICAgICAgIGNvbW1hQWdncmVnYXRlLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRPcChFT3BDb21t
YSk7Ci0gICAgICAgIGNvbW1hQWdncmVnYXRlLT5zZXRUeXBlKHJpZ2h0LT5nZXRUeXBlKCkpOwot
ICAgICAgICBjb21tYUFnZ3JlZ2F0ZS0+Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2
cVRlbXBvcmFyeSk7Ci0gICAgICAgIHJldHVybiBjb21tYUFnZ3JlZ2F0ZTsKLSAgICB9Ci19Ci0K
LS8vCi0vLyBGb3IgIj86IiB0ZXN0IG5vZGVzLiAgVGhlcmUgYXJlIHRocmVlIGNoaWxkcmVuOyBh
IGNvbmRpdGlvbiwKLS8vIGEgdHJ1ZSBwYXRoLCBhbmQgYSBmYWxzZSBwYXRoLiAgVGhlIHR3byBw
YXRocyBhcmUgc3BlY2lmaWVkCi0vLyBhcyBzZXBhcmF0ZSBwYXJhbWV0ZXJzLgotLy8KLS8vIFJl
dHVybnMgdGhlIHNlbGVjdGlvbiBub2RlIGNyZWF0ZWQsIG9yIDAgaWYgb25lIGNvdWxkIG5vdCBi
ZS4KLS8vCi1USW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZFNlbGVjdGlvbihUSW50ZXJt
VHlwZWQqIGNvbmQsIFRJbnRlcm1UeXBlZCogdHJ1ZUJsb2NrLCBUSW50ZXJtVHlwZWQqIGZhbHNl
QmxvY2ssIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCi17Ci0gICAgLy8KLSAgICAvLyBHZXQgY29t
cGF0aWJsZSB0eXBlcy4KLSAgICAvLwotICAgIFRJbnRlcm1UeXBlZCogY2hpbGQgPSBhZGRDb252
ZXJzaW9uKEVPcFNlcXVlbmNlLCB0cnVlQmxvY2stPmdldFR5cGUoKSwgZmFsc2VCbG9jayk7Ci0g
ICAgaWYgKGNoaWxkKQotICAgICAgICBmYWxzZUJsb2NrID0gY2hpbGQ7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIGNoaWxkID0gYWRkQ29udmVyc2lvbihFT3BTZXF1ZW5jZSwgZmFsc2VCbG9jay0+Z2V0
VHlwZSgpLCB0cnVlQmxvY2spOwotICAgICAgICBpZiAoY2hpbGQpCi0gICAgICAgICAgICB0cnVl
QmxvY2sgPSBjaGlsZDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotCi0gICAgLy8KLSAgICAvLyBTZWUgaWYgYWxsIHRoZSBvcGVyYW5kcyBhcmUgY29uc3RhbnQs
IHRoZW4gZm9sZCBpdCBvdGhlcndpc2Ugbm90LgotICAgIC8vCi0KLSAgICBpZiAoY29uZC0+Z2V0
QXNDb25zdGFudFVuaW9uKCkgJiYgdHJ1ZUJsb2NrLT5nZXRBc0NvbnN0YW50VW5pb24oKSAmJiBm
YWxzZUJsb2NrLT5nZXRBc0NvbnN0YW50VW5pb24oKSkgewotICAgICAgICBpZiAoY29uZC0+Z2V0
QXNDb25zdGFudFVuaW9uKCktPmdldEJDb25zdCgwKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
QmxvY2s7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBmYWxzZUJsb2NrOwotICAg
IH0KLQotICAgIC8vCi0gICAgLy8gTWFrZSBhIHNlbGVjdGlvbiBub2RlLgotICAgIC8vCi0gICAg
VEludGVybVNlbGVjdGlvbiogbm9kZSA9IG5ldyBUSW50ZXJtU2VsZWN0aW9uKGNvbmQsIHRydWVC
bG9jaywgZmFsc2VCbG9jaywgdHJ1ZUJsb2NrLT5nZXRUeXBlKCkpOwotICAgIG5vZGUtPmdldFR5
cGVQb2ludGVyKCktPnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwotICAgIG5vZGUtPnNldExp
bmUobGluZSk7Ci0KLSAgICByZXR1cm4gbm9kZTsKLX0KLQotLy8KLS8vIENvbnN0YW50IHRlcm1p
bmFsIG5vZGVzLiAgSGFzIGEgdW5pb24gdGhhdCBjb250YWlucyBib29sLCBmbG9hdCBvciBpbnQg
Y29uc3RhbnRzCi0vLwotLy8gUmV0dXJucyB0aGUgY29uc3RhbnQgdW5pb24gbm9kZSBjcmVhdGVk
LgotLy8KLQotVEludGVybUNvbnN0YW50VW5pb24qIFRJbnRlcm1lZGlhdGU6OmFkZENvbnN0YW50
VW5pb24oQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheVBvaW50ZXIsIGNvbnN0IFRUeXBlJiB0LCBj
b25zdCBUU291cmNlTG9jJiBsaW5lKQotewotICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2Rl
ID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHVuaW9uQXJyYXlQb2ludGVyLCB0KTsKLSAgICBu
b2RlLT5zZXRMaW5lKGxpbmUpOwotCi0gICAgcmV0dXJuIG5vZGU7Ci19Ci0KLVRJbnRlcm1UeXBl
ZCogVEludGVybWVkaWF0ZTo6YWRkU3dpenpsZShUVmVjdG9yRmllbGRzJiBmaWVsZHMsIGNvbnN0
IFRTb3VyY2VMb2MmIGxpbmUpCi17Ci0KLSAgICBUSW50ZXJtQWdncmVnYXRlKiBub2RlID0gbmV3
IFRJbnRlcm1BZ2dyZWdhdGUoRU9wU2VxdWVuY2UpOwotCi0gICAgbm9kZS0+c2V0TGluZShsaW5l
KTsKLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogY29uc3RJbnROb2RlOwotICAgIFRJbnRlcm1T
ZXF1ZW5jZSAmc2VxdWVuY2VWZWN0b3IgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOwotICAgIENvbnN0
YW50VW5pb24qIHVuaW9uQXJyYXk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpZWxkcy5u
dW07IGkrKykgewotICAgICAgICB1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0g
ICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChmaWVsZHMub2Zmc2V0c1tpXSk7Ci0gICAgICAg
IGNvbnN0SW50Tm9kZSA9IGFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50
LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgbGluZSk7Ci0gICAgICAgIHNlcXVlbmNlVmVjdG9y
LnB1c2hfYmFjayhjb25zdEludE5vZGUpOwotICAgIH0KLQotICAgIHJldHVybiBub2RlOwotfQot
Ci0vLwotLy8gQ3JlYXRlIGxvb3Agbm9kZXMuCi0vLwotVEludGVybU5vZGUqIFRJbnRlcm1lZGlh
dGU6OmFkZExvb3AoVExvb3BUeXBlIHR5cGUsIFRJbnRlcm1Ob2RlKiBpbml0LCBUSW50ZXJtVHlw
ZWQqIGNvbmQsIFRJbnRlcm1UeXBlZCogZXhwciwgVEludGVybU5vZGUqIGJvZHksIGNvbnN0IFRT
b3VyY2VMb2MmIGxpbmUpCi17Ci0gICAgVEludGVybU5vZGUqIG5vZGUgPSBuZXcgVEludGVybUxv
b3AodHlwZSwgaW5pdCwgY29uZCwgZXhwciwgYm9keSk7Ci0gICAgbm9kZS0+c2V0TGluZShsaW5l
KTsKLQotICAgIHJldHVybiBub2RlOwotfQotCi0vLwotLy8gQWRkIGJyYW5jaGVzLgotLy8KLVRJ
bnRlcm1CcmFuY2gqIFRJbnRlcm1lZGlhdGU6OmFkZEJyYW5jaChUT3BlcmF0b3IgYnJhbmNoT3As
IGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCi17Ci0gICAgcmV0dXJuIGFkZEJyYW5jaChicmFuY2hP
cCwgMCwgbGluZSk7Ci19Ci0KLVRJbnRlcm1CcmFuY2gqIFRJbnRlcm1lZGlhdGU6OmFkZEJyYW5j
aChUT3BlcmF0b3IgYnJhbmNoT3AsIFRJbnRlcm1UeXBlZCogZXhwcmVzc2lvbiwgY29uc3QgVFNv
dXJjZUxvYyYgbGluZSkKLXsKLSAgICBUSW50ZXJtQnJhbmNoKiBub2RlID0gbmV3IFRJbnRlcm1C
cmFuY2goYnJhbmNoT3AsIGV4cHJlc3Npb24pOwotICAgIG5vZGUtPnNldExpbmUobGluZSk7Ci0K
LSAgICByZXR1cm4gbm9kZTsKLX0KLQotLy8KLS8vIFRoaXMgaXMgdG8gYmUgZXhlY3V0ZWQgb25j
ZSB0aGUgZmluYWwgcm9vdCBpcyBwdXQgb24gdG9wIGJ5IHRoZSBwYXJzaW5nCi0vLyBwcm9jZXNz
LgotLy8KLWJvb2wgVEludGVybWVkaWF0ZTo6cG9zdFByb2Nlc3MoVEludGVybU5vZGUqIHJvb3Qp
Ci17Ci0gICAgaWYgKHJvb3QgPT0gMCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLwot
ICAgIC8vIEZpcnN0LCBmaW5pc2ggb2ZmIHRoZSB0b3AgbGV2ZWwgc2VxdWVuY2UsIGlmIGFueQot
ICAgIC8vCi0gICAgVEludGVybUFnZ3JlZ2F0ZSogYWdnUm9vdCA9IHJvb3QtPmdldEFzQWdncmVn
YXRlKCk7Ci0gICAgaWYgKGFnZ1Jvb3QgJiYgYWdnUm9vdC0+Z2V0T3AoKSA9PSBFT3BOdWxsKQot
ICAgICAgICBhZ2dSb290LT5zZXRPcChFT3BTZXF1ZW5jZSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotLy8KLS8vIFRoaXMgZGVsZXRlcyB0aGUgdHJlZS4KLS8vCi12b2lkIFRJbnRlcm1lZGlh
dGU6OnJlbW92ZShUSW50ZXJtTm9kZSogcm9vdCkKLXsKLSAgICBpZiAocm9vdCkKLSAgICAgICAg
UmVtb3ZlQWxsVHJlZU5vZGVzKHJvb3QpOwotfQotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwotLy8gTWVtYmVyIGZ1
bmN0aW9ucyBvZiB0aGUgbm9kZXMgdXNlZCBmb3IgYnVpbGRpbmcgdGhlIHRyZWUuCi0vLwotLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLwotCi0jZGVmaW5lIFJFUExBQ0VfSUZfSVMobm9kZSwgdHlwZSwgb3JpZ2luYWwsIHJlcGxh
Y2VtZW50KSBcCi0gICAgaWYgKG5vZGUgPT0gb3JpZ2luYWwpIHsgXAotICAgICAgICBub2RlID0g
c3RhdGljX2Nhc3Q8dHlwZSAqPihyZXBsYWNlbWVudCk7IFwKLSAgICAgICAgcmV0dXJuIHRydWU7
IFwKLSAgICB9Ci0KLWJvb2wgVEludGVybUxvb3A6OnJlcGxhY2VDaGlsZE5vZGUoCi0gICAgVElu
dGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFjZW1lbnQpCi17Ci0gICAgUkVQ
TEFDRV9JRl9JUyhpbml0LCBUSW50ZXJtTm9kZSwgb3JpZ2luYWwsIHJlcGxhY2VtZW50KTsKLSAg
ICBSRVBMQUNFX0lGX0lTKGNvbmQsIFRJbnRlcm1UeXBlZCwgb3JpZ2luYWwsIHJlcGxhY2VtZW50
KTsKLSAgICBSRVBMQUNFX0lGX0lTKGV4cHIsIFRJbnRlcm1UeXBlZCwgb3JpZ2luYWwsIHJlcGxh
Y2VtZW50KTsKLSAgICBSRVBMQUNFX0lGX0lTKGJvZHksIFRJbnRlcm1Ob2RlLCBvcmlnaW5hbCwg
cmVwbGFjZW1lbnQpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBUSW50ZXJtQnJhbmNo
OjpyZXBsYWNlQ2hpbGROb2RlKAotICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5v
ZGUgKnJlcGxhY2VtZW50KQotewotICAgIFJFUExBQ0VfSUZfSVMoZXhwcmVzc2lvbiwgVEludGVy
bVR5cGVkLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Ym9vbCBUSW50ZXJtQmluYXJ5OjpyZXBsYWNlQ2hpbGROb2RlKAotICAgIFRJbnRlcm1Ob2RlICpv
cmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KQotewotICAgIFJFUExBQ0VfSUZfSVMo
bGVmdCwgVEludGVybVR5cGVkLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpOwotICAgIFJFUExBQ0Vf
SUZfSVMocmlnaHQsIFRJbnRlcm1UeXBlZCwgb3JpZ2luYWwsIHJlcGxhY2VtZW50KTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVEludGVybVVuYXJ5OjpyZXBsYWNlQ2hpbGROb2RlKAot
ICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KQotewot
ICAgIFJFUExBQ0VfSUZfSVMob3BlcmFuZCwgVEludGVybVR5cGVkLCBvcmlnaW5hbCwgcmVwbGFj
ZW1lbnQpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBUSW50ZXJtQWdncmVnYXRlOjpy
ZXBsYWNlQ2hpbGROb2RlKAotICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUg
KnJlcGxhY2VtZW50KQotewotICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCBzZXF1ZW5jZS5z
aXplKCk7ICsraWkpCi0gICAgewotICAgICAgICBSRVBMQUNFX0lGX0lTKHNlcXVlbmNlW2lpXSwg
VEludGVybU5vZGUsIG9yaWdpbmFsLCByZXBsYWNlbWVudCk7Ci0gICAgfQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotYm9vbCBUSW50ZXJtU2VsZWN0aW9uOjpyZXBsYWNlQ2hpbGROb2RlKAotICAg
IFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KQotewotICAg
IFJFUExBQ0VfSUZfSVMoY29uZGl0aW9uLCBUSW50ZXJtVHlwZWQsIG9yaWdpbmFsLCByZXBsYWNl
bWVudCk7Ci0gICAgUkVQTEFDRV9JRl9JUyh0cnVlQmxvY2ssIFRJbnRlcm1Ob2RlLCBvcmlnaW5h
bCwgcmVwbGFjZW1lbnQpOwotICAgIFJFUExBQ0VfSUZfSVMoZmFsc2VCbG9jaywgVEludGVybU5v
ZGUsIG9yaWdpbmFsLCByZXBsYWNlbWVudCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLwot
Ly8gU2F5IHdoZXRoZXIgb3Igbm90IGFuIG9wZXJhdGlvbiBub2RlIGNoYW5nZXMgdGhlIHZhbHVl
IG9mIGEgdmFyaWFibGUuCi0vLwotYm9vbCBUSW50ZXJtT3BlcmF0b3I6OmlzQXNzaWdubWVudCgp
IGNvbnN0Ci17Ci0gICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1l
bnQ6Ci0gICAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDoKLSAgICAgICAgY2FzZSBFT3BQcmVJ
bmNyZW1lbnQ6Ci0gICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OgotICAgICAgICBjYXNlIEVP
cEFzc2lnbjoKLSAgICAgICAgY2FzZSBFT3BBZGRBc3NpZ246Ci0gICAgICAgIGNhc2UgRU9wU3Vi
QXNzaWduOgotICAgICAgICBjYXNlIEVPcE11bEFzc2lnbjoKLSAgICAgICAgY2FzZSBFT3BWZWN0
b3JUaW1lc01hdHJpeEFzc2lnbjoKLSAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhckFz
c2lnbjoKLSAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbjoKLSAgICAgICAg
Y2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjoKLSAgICAgICAgY2FzZSBFT3BEaXZBc3Np
Z246Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLS8vCi0vLyByZXR1cm5zIHRydWUgaWYgdGhl
IG9wZXJhdG9yIGlzIGZvciBvbmUgb2YgdGhlIGNvbnN0cnVjdG9ycwotLy8KLWJvb2wgVEludGVy
bU9wZXJhdG9yOjppc0NvbnN0cnVjdG9yKCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0g
ICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMjoKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RW
ZWMzOgotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzQ6Ci0gICAgICAgIGNhc2UgRU9wQ29u
c3RydWN0TWF0MjoKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQzOgotICAgICAgICBjYXNl
IEVPcENvbnN0cnVjdE1hdDQ6Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6Ci0gICAg
ICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZl
YzM6Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzQ6Ci0gICAgICAgIGNhc2UgRU9wQ29u
c3RydWN0SW50OgotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMyOgotICAgICAgICBjYXNl
IEVPcENvbnN0cnVjdEJWZWMzOgotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWM0OgotICAg
ICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0U3Ry
dWN0OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi0vLwotLy8gTWFrZSBzdXJlIHRoZSB0eXBl
IG9mIGEgdW5hcnkgb3BlcmF0b3IgaXMgYXBwcm9wcmlhdGUgZm9yIGl0cwotLy8gY29tYmluYXRp
b24gb2Ygb3BlcmF0aW9uIGFuZCBvcGVyYW5kIHR5cGUuCi0vLwotLy8gUmV0dXJucyBmYWxzZSBp
biBub3RoaW5nIG1ha2VzIHNlbnNlLgotLy8KLWJvb2wgVEludGVybVVuYXJ5Ojpwcm9tb3RlKFRJ
bmZvU2luayYpCi17Ci0gICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIEVPcExvZ2ljYWxO
b3Q6Ci0gICAgICAgICAgICBpZiAob3BlcmFuZC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Qm9vbCkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBFT3BOZWdhdGl2ZToKLSAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50OgotICAg
ICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6Ci0gICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50
OgotICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDoKLSAgICAgICAgICAgIGlmIChvcGVyYW5k
LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRCb29sKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAvLyBvcGVyYXRvcnMgZm9yIGJ1
aWx0LWlucyBhcmUgYWxyZWFkeSB0eXBlIGNoZWNrZWQgYWdhaW5zdCB0aGVpciBwcm90b3R5cGUK
LSAgICAgICAgY2FzZSBFT3BBbnk6Ci0gICAgICAgIGNhc2UgRU9wQWxsOgotICAgICAgICBjYXNl
IEVPcFZlY3RvckxvZ2ljYWxOb3Q6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgaWYgKG9wZXJhbmQtPmdldEJhc2ljVHlwZSgpICE9IEVi
dEZsb2F0KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzZXRU
eXBlKG9wZXJhbmQtPmdldFR5cGUoKSk7Ci0gICAgdHlwZS5zZXRRdWFsaWZpZXIoRXZxVGVtcG9y
YXJ5KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLwotLy8gRXN0YWJsaXNoZXMgdGhlIHR5
cGUgb2YgdGhlIHJlc3VsdGFudCBvcGVyYXRpb24sIGFzIHdlbGwgYXMKLS8vIG1ha2VzIHRoZSBv
cGVyYXRvciB0aGUgY29ycmVjdCBvbmUgZm9yIHRoZSBvcGVyYW5kcy4KLS8vCi0vLyBSZXR1cm5z
IGZhbHNlIGlmIG9wZXJhdG9yIGNhbid0IHdvcmsgb24gb3BlcmFuZHMuCi0vLwotYm9vbCBUSW50
ZXJtQmluYXJ5Ojpwcm9tb3RlKFRJbmZvU2luayYgaW5mb1NpbmspCi17Ci0gICAgLy8gVGhpcyBm
dW5jdGlvbiBvbmx5IGhhbmRsZXMgc2NhbGFycywgdmVjdG9ycywgYW5kIG1hdHJpY2VzLgotICAg
IGlmIChsZWZ0LT5pc0FycmF5KCkgfHwgcmlnaHQtPmlzQXJyYXkoKSkgewotICAgICAgICBpbmZv
U2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIkludmFs
aWQgb3BlcmF0aW9uIGZvciBhcnJheXMiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIC8vIEdMU0wgRVMgMi4wIGRvZXMgbm90IHN1cHBvcnQgaW1wbGljaXQgdHlwZSBjYXN0
aW5nLgotICAgIC8vIFNvIHRoZSBiYXNpYyB0eXBlIHNob3VsZCBhbHdheXMgbWF0Y2guCi0gICAg
aWYgKGxlZnQtPmdldEJhc2ljVHlwZSgpICE9IHJpZ2h0LT5nZXRCYXNpY1R5cGUoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8KLSAgICAvLyBCYXNlIGFzc3VtcHRpb246ICBqdXN0
IG1ha2UgdGhlIHR5cGUgdGhlIHNhbWUgYXMgdGhlIGxlZnQKLSAgICAvLyBvcGVyYW5kLiAgVGhl
biBvbmx5IGRldmlhdGlvbnMgZnJvbSB0aGlzIG5lZWQgYmUgY29kZWQuCi0gICAgLy8KLSAgICBz
ZXRUeXBlKGxlZnQtPmdldFR5cGUoKSk7Ci0KLSAgICAvLyBUaGUgcmVzdWx0IGdldHMgcHJvbW90
ZWQgdG8gdGhlIGhpZ2hlc3QgcHJlY2lzaW9uLgotICAgIFRQcmVjaXNpb24gaGlnaGVyUHJlY2lz
aW9uID0gR2V0SGlnaGVyUHJlY2lzaW9uKGxlZnQtPmdldFByZWNpc2lvbigpLCByaWdodC0+Z2V0
UHJlY2lzaW9uKCkpOwotICAgIGdldFR5cGVQb2ludGVyKCktPnNldFByZWNpc2lvbihoaWdoZXJQ
cmVjaXNpb24pOwotCi0gICAgLy8gQmluYXJ5IG9wZXJhdGlvbnMgcmVzdWx0cyBpbiB0ZW1wb3Jh
cnkgdmFyaWFibGVzIHVubGVzcyBib3RoCi0gICAgLy8gb3BlcmFuZHMgYXJlIGNvbnN0LgotICAg
IGlmIChsZWZ0LT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFDb25zdCB8fCByaWdodC0+Z2V0UXVhbGlm
aWVyKCkgIT0gRXZxQ29uc3QpIHsKLSAgICAgICAgZ2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlm
aWVyKEV2cVRlbXBvcmFyeSk7Ci0gICAgfQotCi0gICAgaW50IHNpemUgPSBzdGQ6Om1heChsZWZ0
LT5nZXROb21pbmFsU2l6ZSgpLCByaWdodC0+Z2V0Tm9taW5hbFNpemUoKSk7Ci0KLSAgICAvLwot
ICAgIC8vIEFsbCBzY2FsYXJzLiBDb2RlIGFmdGVyIHRoaXMgdGVzdCBhc3N1bWVzIHRoaXMgY2Fz
ZSBpcyByZW1vdmVkIQotICAgIC8vCi0gICAgaWYgKHNpemUgPT0gMSkgewotICAgICAgICBzd2l0
Y2ggKG9wKSB7Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gUHJvbW90ZSB0byBjb25k
aXRpb25hbAotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGNhc2UgRU9wRXF1YWw6Ci0gICAg
ICAgICAgICBjYXNlIEVPcE5vdEVxdWFsOgotICAgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjoK
LSAgICAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46Ci0gICAgICAgICAgICBjYXNlIEVPcExl
c3NUaGFuRXF1YWw6Ci0gICAgICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6Ci0gICAg
ICAgICAgICAgICAgc2V0VHlwZShUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQpKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIEFuZCBh
bmQgT3Igb3BlcmF0ZSBvbiBjb25kaXRpb25hbHMKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAg
ICBjYXNlIEVPcExvZ2ljYWxBbmQ6Ci0gICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjoKLSAg
ICAgICAgICAgICAgICAvLyBCb3RoIG9wZXJhbmRzIG11c3QgYmUgb2YgdHlwZSBib29sLgotICAg
ICAgICAgICAgICAgIGlmIChsZWZ0LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sIHx8IHJpZ2h0
LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShFYnRCb29sLCBFYnBVbmRlZmlu
ZWQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICAvLyBJZiB3ZSByZWFjaCBoZXJlLCBhdCBsZWFzdCBvbmUgb2YgdGhlIG9wZXJh
bmRzIGlzIHZlY3RvciBvciBtYXRyaXguCi0gICAgLy8gVGhlIG90aGVyIG9wZXJhbmQgY291bGQg
YmUgYSBzY2FsYXIsIHZlY3Rvciwgb3IgbWF0cml4LgotICAgIC8vIEFyZSB0aGUgc2l6ZXMgY29t
cGF0aWJsZT8KLSAgICAvLwotICAgIGlmIChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpICE9IHJpZ2h0
LT5nZXROb21pbmFsU2l6ZSgpKSB7Ci0gICAgICAgIC8vIElmIHRoZSBub21pbmFsIHNpemUgb2Yg
b3BlcmFuZHMgZG8gbm90IG1hdGNoOgotICAgICAgICAvLyBPbmUgb2YgdGhlbSBtdXN0IGJlIHNj
YWxhci4KLSAgICAgICAgaWYgKGxlZnQtPmdldE5vbWluYWxTaXplKCkgIT0gMSAmJiByaWdodC0+
Z2V0Tm9taW5hbFNpemUoKSAhPSAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAvLyBPcGVyYXRvciBjYW5ub3QgYmUgb2YgdHlwZSBwdXJlIGFzc2lnbm1lbnQuCi0gICAgICAg
IGlmIChvcCA9PSBFT3BBc3NpZ24gfHwgb3AgPT0gRU9wSW5pdGlhbGl6ZSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIENhbiB0aGVzZSB0d28gb3Bl
cmFuZHMgYmUgY29tYmluZWQ/Ci0gICAgLy8KLSAgICBUQmFzaWNUeXBlIGJhc2ljVHlwZSA9IGxl
ZnQtPmdldEJhc2ljVHlwZSgpOwotICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBFT3BN
dWw6Ci0gICAgICAgICAgICBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4
KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobGVmdC0+aXNWZWN0b3IoKSkKLSAgICAgICAgICAg
ICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc01hdHJpeDsKLSAgICAgICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc1NjYWxhcjsKLSAgICAg
ICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwg
RXZxVGVtcG9yYXJ5LCBzaXplLCB0cnVlKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfSBlbHNlIGlmIChsZWZ0LT5pc01hdHJpeCgpICYmICFyaWdodC0+aXNNYXRyaXgoKSkgewot
ICAgICAgICAgICAgICAgIGlmIChyaWdodC0+aXNWZWN0b3IoKSkgewotICAgICAgICAgICAgICAg
ICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzVmVjdG9yOwotICAgICAgICAgICAgICAgICAgICBzZXRU
eXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUs
IGZhbHNlKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
b3AgPSBFT3BNYXRyaXhUaW1lc1NjYWxhcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKLSAg
ICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzTWF0cml4OwotICAgICAgICAgICAgfSBl
bHNlIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKLSAgICAg
ICAgICAgICAgICBpZiAobGVmdC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNWZWN0b3IoKSkgewot
ICAgICAgICAgICAgICAgICAgICAvLyBsZWF2ZSBhcyBjb21wb25lbnQgcHJvZHVjdAotICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNWZWN0b3IoKSB8fCByaWdodC0+aXNWZWN0b3Io
KSkgewotICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcFZlY3RvclRpbWVzU2NhbGFyOwotICAg
ICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9u
LCBFdnFUZW1wb3JhcnksIHNpemUsIGZhbHNlKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVBy
ZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIk1pc3NpbmcgZWxzZXMiKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBFT3BNdWxBc3NpZ246Ci0gICAgICAgICAgICBpZiAoIWxlZnQtPmlzTWF0
cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobGVmdC0+
aXNWZWN0b3IoKSkKLSAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc01hdHJp
eEFzc2lnbjsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAobGVm
dC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgICAgICBp
ZiAocmlnaHQtPmlzVmVjdG9yKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG9wID0gRU9w
TWF0cml4VGltZXNTY2FsYXJBc3NpZ247Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fSBlbHNlIGlmIChsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSB7Ci0gICAg
ICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjsKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQtPmlzVmVjdG9yKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gbGVhdmUgYXMgY29tcG9uZW50IHByb2R1Y3QKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzVmVjdG9yKCkgfHwgcmlnaHQtPmlzVmVj
dG9yKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCEgbGVmdC0+aXNWZWN0b3IoKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAg
b3AgPSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjsKLSAgICAgICAgICAgICAgICAgICAgc2V0
VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXpl
LCBmYWxzZSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBn
ZXRMaW5lKCksICJNaXNzaW5nIGVsc2VzIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BB
c3NpZ246Ci0gICAgICAgIGNhc2UgRU9wSW5pdGlhbGl6ZToKLSAgICAgICAgY2FzZSBFT3BBZGQ6
Ci0gICAgICAgIGNhc2UgRU9wU3ViOgotICAgICAgICBjYXNlIEVPcERpdjoKLSAgICAgICAgY2Fz
ZSBFT3BBZGRBc3NpZ246Ci0gICAgICAgIGNhc2UgRU9wU3ViQXNzaWduOgotICAgICAgICBjYXNl
IEVPcERpdkFzc2lnbjoKLSAgICAgICAgICAgIGlmICgobGVmdC0+aXNNYXRyaXgoKSAmJiByaWdo
dC0+aXNWZWN0b3IoKSkgfHwKLSAgICAgICAgICAgICAgICAobGVmdC0+aXNWZWN0b3IoKSAmJiBy
aWdodC0+aXNNYXRyaXgoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9y
YXJ5LCBzaXplLCBsZWZ0LT5pc01hdHJpeCgpIHx8IHJpZ2h0LT5pc01hdHJpeCgpKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEVPcEVxdWFsOgotICAgICAgICBjYXNlIEVP
cE5vdEVxdWFsOgotICAgICAgICBjYXNlIEVPcExlc3NUaGFuOgotICAgICAgICBjYXNlIEVPcEdy
ZWF0ZXJUaGFuOgotICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6Ci0gICAgICAgIGNhc2Ug
RU9wR3JlYXRlclRoYW5FcXVhbDoKLSAgICAgICAgICAgIGlmICgobGVmdC0+aXNNYXRyaXgoKSAm
JiByaWdodC0+aXNWZWN0b3IoKSkgfHwKLSAgICAgICAgICAgICAgICAobGVmdC0+aXNWZWN0b3Io
KSAmJiByaWdodC0+aXNNYXRyaXgoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgc2V0VHlwZShUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENvbXBhcmVTdHJ1
Y3QoY29uc3QgVFR5cGUmIGxlZnROb2RlVHlwZSwgQ29uc3RhbnRVbmlvbiogcmlnaHRVbmlvbkFy
cmF5LCBDb25zdGFudFVuaW9uKiBsZWZ0VW5pb25BcnJheSkKLXsKLSAgICBjb25zdCBURmllbGRM
aXN0JiBmaWVsZHMgPSBsZWZ0Tm9kZVR5cGUuZ2V0U3RydWN0KCktPmZpZWxkcygpOwotCi0gICAg
c2l6ZV90IHN0cnVjdFNpemUgPSBmaWVsZHMuc2l6ZSgpOwotICAgIHNpemVfdCBpbmRleCA9IDA7
Ci0KLSAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHN0cnVjdFNpemU7IGorKykgewotICAgICAg
ICBzaXplX3Qgc2l6ZSA9IGZpZWxkc1tqXS0+dHlwZSgpLT5nZXRPYmplY3RTaXplKCk7Ci0gICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAo
ZmllbGRzW2pdLT50eXBlKCktPmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgewotICAgICAg
ICAgICAgICAgIGlmICghQ29tcGFyZVN0cnVjdHVyZSgqKGZpZWxkc1tqXS0+dHlwZSgpKSwgJnJp
Z2h0VW5pb25BcnJheVtpbmRleF0sICZsZWZ0VW5pb25BcnJheVtpbmRleF0pKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIGlmIChsZWZ0VW5pb25BcnJheVtpbmRleF0gIT0gcmlnaHRVbmlvbkFycmF5W2luZGV4
XSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGlu
ZGV4Kys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgQ29tcGFyZVN0cnVjdHVyZShjb25zdCBUVHlwZSYgbGVmdE5vZGVUeXBlLCBD
b25zdGFudFVuaW9uKiByaWdodFVuaW9uQXJyYXksIENvbnN0YW50VW5pb24qIGxlZnRVbmlvbkFy
cmF5KQotewotICAgIGlmIChsZWZ0Tm9kZVR5cGUuaXNBcnJheSgpKSB7Ci0gICAgICAgIFRUeXBl
IHR5cGVXaXRob3V0QXJyYXluZXNzID0gbGVmdE5vZGVUeXBlOwotICAgICAgICB0eXBlV2l0aG91
dEFycmF5bmVzcy5jbGVhckFycmF5bmVzcygpOwotCi0gICAgICAgIHNpemVfdCBhcnJheVNpemUg
PSBsZWZ0Tm9kZVR5cGUuZ2V0QXJyYXlTaXplKCk7Ci0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBhcnJheVNpemU7ICsraSkgewotICAgICAgICAgICAgc2l6ZV90IG9mZnNldCA9IHR5
cGVXaXRob3V0QXJyYXluZXNzLmdldE9iamVjdFNpemUoKSAqIGk7Ci0gICAgICAgICAgICBpZiAo
IUNvbXBhcmVTdHJ1Y3QodHlwZVdpdGhvdXRBcnJheW5lc3MsICZyaWdodFVuaW9uQXJyYXlbb2Zm
c2V0XSwgJmxlZnRVbmlvbkFycmF5W29mZnNldF0pKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gQ29tcGFyZVN0cnVj
dChsZWZ0Tm9kZVR5cGUsIHJpZ2h0VW5pb25BcnJheSwgbGVmdFVuaW9uQXJyYXkpOwotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLS8vCi0vLyBUaGUgZm9sZCBmdW5jdGlvbnMgc2VlIGlmIGFuIG9w
ZXJhdGlvbiBvbiBhIGNvbnN0YW50IGNhbiBiZSBkb25lIGluIHBsYWNlLAotLy8gd2l0aG91dCBn
ZW5lcmF0aW5nIHJ1bi10aW1lIGNvZGUuCi0vLwotLy8gUmV0dXJucyB0aGUgbm9kZSB0byBrZWVw
IHVzaW5nLCB3aGljaCBtYXkgb3IgbWF5IG5vdCBiZSB0aGUgbm9kZSBwYXNzZWQgaW4uCi0vLwot
Ci1USW50ZXJtVHlwZWQqIFRJbnRlcm1Db25zdGFudFVuaW9uOjpmb2xkKFRPcGVyYXRvciBvcCwg
VEludGVybVR5cGVkKiBjb25zdGFudE5vZGUsIFRJbmZvU2luayYgaW5mb1NpbmspCi17Ci0gICAg
Q29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IGdldFVuaW9uQXJyYXlQb2ludGVyKCk7Ci0gICAg
c2l6ZV90IG9iamVjdFNpemUgPSBnZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOwotCi0gICAgaWYg
KGNvbnN0YW50Tm9kZSkgeyAgLy8gYmluYXJ5IG9wZXJhdGlvbnMKLSAgICAgICAgVEludGVybUNv
bnN0YW50VW5pb24gKm5vZGUgPSBjb25zdGFudE5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOwot
ICAgICAgICBDb25zdGFudFVuaW9uICpyaWdodFVuaW9uQXJyYXkgPSBub2RlLT5nZXRVbmlvbkFy
cmF5UG9pbnRlcigpOwotICAgICAgICBUVHlwZSByZXR1cm5UeXBlID0gZ2V0VHlwZSgpOwotCi0g
ICAgICAgIC8vIGZvciBhIGNhc2UgbGlrZSBmbG9hdCBmID0gMS4yICsgdmVjNCgyLDMsNCw1KTsK
LSAgICAgICAgaWYgKGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKSA9PSAx
ICYmIG9iamVjdFNpemUgPiAxKSB7Ci0gICAgICAgICAgICByaWdodFVuaW9uQXJyYXkgPSBuZXcg
Q29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgb2JqZWN0U2l6ZTsgKytpKQotICAgICAgICAgICAgICAgIHJpZ2h0VW5pb25BcnJheVtp
XSA9ICpub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOwotICAgICAgICAgICAgcmV0dXJuVHlw
ZSA9IGdldFR5cGUoKTsKLSAgICAgICAgfSBlbHNlIGlmIChjb25zdGFudE5vZGUtPmdldFR5cGUo
KS5nZXRPYmplY3RTaXplKCkgPiAxICYmIG9iamVjdFNpemUgPT0gMSkgewotICAgICAgICAgICAg
Ly8gZm9yIGEgY2FzZSBsaWtlIGZsb2F0IGYgPSB2ZWM0KDIsMyw0LDUpICsgMS4yOwotICAgICAg
ICAgICAgdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW2NvbnN0YW50Tm9kZS0+Z2V0VHlw
ZSgpLmdldE9iamVjdFNpemUoKV07Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsgKytpKQotICAgICAgICAg
ICAgICAgIHVuaW9uQXJyYXlbaV0gPSAqZ2V0VW5pb25BcnJheVBvaW50ZXIoKTsKLSAgICAgICAg
ICAgIHJldHVyblR5cGUgPSBub2RlLT5nZXRUeXBlKCk7Ci0gICAgICAgICAgICBvYmplY3RTaXpl
ID0gY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOwotICAgICAgICB9Ci0K
LSAgICAgICAgQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0QXJyYXkgPSAwOwotICAgICAgICBUSW50
ZXJtQ29uc3RhbnRVbmlvbiAqdGVtcE5vZGU7Ci0KLSAgICAgICAgYm9vbCBib29sTm9kZUZsYWcg
PSBmYWxzZTsKLSAgICAgICAgc3dpdGNoKG9wKSB7Ci0gICAgICAgICAgICBjYXNlIEVPcEFkZDoK
LSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVj
dFNpemVdOwotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSArIHJp
Z2h0VW5pb25BcnJheVtpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIEVPcFN1YjoKLSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RB
cnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwotICAgICAgICAgICAgICAgIHsv
LyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG9iamVjdFNpemU7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25z
dEFycmF5W2ldID0gdW5pb25BcnJheVtpXSAtIHJpZ2h0VW5pb25BcnJheVtpXTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgRU9w
TXVsOgotICAgICAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjoKLSAgICAgICAgICAg
IGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXI6Ci0gICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAgICAgICAgICB7Ly8g
c3VwcG9ydCBNU1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBvYmplY3RTaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RB
cnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gKiByaWdodFVuaW9uQXJyYXlbaV07Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFT3BNYXRy
aXhUaW1lc01hdHJpeDoKLSAgICAgICAgICAgICAgICBpZiAoZ2V0VHlwZSgpLmdldEJhc2ljVHlw
ZSgpICE9IEVidEZsb2F0IHx8IG5vZGUtPmdldEJhc2ljVHlwZSgpICE9IEVidEZsb2F0KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxF
cnJvciwgZ2V0TGluZSgpLCAiQ29uc3RhbnQgRm9sZGluZyBjYW5ub3QgYmUgZG9uZSBmb3IgbWF0
cml4IG11bHRpcGx5Iik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKLSAgICAgICAg
ICAgICAgICAgICAgaW50IHNpemUgPSBnZXROb21pbmFsU2l6ZSgpOwotICAgICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW3NpemUqc2l6ZV07Ci0gICAg
ICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHNpemU7IHJvdysrKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBzaXpl
OyBjb2x1bW4rKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5
W3NpemUgKiBjb2x1bW4gKyByb3ddLnNldEZDb25zdCgwLjBmKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtzaXplICogY29sdW1uICsgcm93XS5z
ZXRGQ29uc3QodGVtcENvbnN0QXJyYXlbc2l6ZSAqIGNvbHVtbiArIHJvd10uZ2V0RkNvbnN0KCkg
KyB1bmlvbkFycmF5W2kgKiBzaXplICsgcm93XS5nZXRGQ29uc3QoKSAqIChyaWdodFVuaW9uQXJy
YXlbY29sdW1uICogc2l6ZSArIGldLmdldEZDb25zdCgpKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBFT3BEaXY6Ci0gICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29u
c3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZD
Kys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RT
aXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdl
dEJhc2ljVHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEVidEZsb2F0OgotICAgICAgICAgICAg
ICAgIGlmIChyaWdodFVuaW9uQXJyYXlbaV0gPT0gMC4wZikgewotICAgICAgICAgICAgICAgICAg
ICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeFdhcm5pbmcsIGdldExpbmUoKSwgIkRpdmlk
ZSBieSB6ZXJvIGVycm9yIGR1cmluZyBjb25zdGFudCBmb2xkaW5nIik7Ci0gICAgICAgICAgICAg
ICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCh1bmlvbkFycmF5W2ldLmdldEZDb25z
dCgpIDwgMCA/IC1GTFRfTUFYIDogRkxUX01BWCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCh1bmlvbkFycmF5
W2ldLmdldEZDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdldEZDb25zdCgpKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAgICAg
ICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtpXSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgZ2V0TGluZSgpLCAiRGl2aWRl
IGJ5IHplcm8gZXJyb3IgZHVyaW5nIGNvbnN0YW50IGZvbGRpbmciKTsKLSAgICAgICAgICAgICAg
ICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0SUNvbnN0KElOVF9NQVgpOwotICAgICAgICAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRJQ29u
c3QodW5pb25BcnJheVtpXS5nZXRJQ29uc3QoKSAvIHJpZ2h0VW5pb25BcnJheVtpXS5nZXRJQ29u
c3QoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwg
Z2V0TGluZSgpLCAiQ29uc3RhbnQgZm9sZGluZyBjYW5ub3QgYmUgZG9uZSBmb3IgXCIvXCIiKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1ZlY3RvcjoKLSAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBn
ZXRMaW5lKCksICJDb25zdGFudCBGb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciBtYXRyaXggdGlt
ZXMgdmVjdG9yIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
W2dldE5vbWluYWxTaXplKCldOwotCi0gICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysr
Ni4wCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHNpemUgPSBnZXROb21pbmFsU2l6ZSgp
LCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENv
bnN0QXJyYXlbaV0uc2V0RkNvbnN0KDAuMGYpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9y
IChpbnQgaiA9IDA7IGogPCBzaXplOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QodGVtcENvbnN0QXJyYXlbaV0uZ2V0RkNvbnN0
KCkgKyAoKHVuaW9uQXJyYXlbaipzaXplICsgaV0uZ2V0RkNvbnN0KCkpICogcmlnaHRVbmlvbkFy
cmF5W2pdLmdldEZDb25zdCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0ZW1w
Tm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgbm9kZS0+Z2V0
VHlwZSgpKTsKLSAgICAgICAgICAgICAgICB0ZW1wTm9kZS0+c2V0TGluZShnZXRMaW5lKCkpOwot
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOwotCi0gICAgICAgICAgICBjYXNlIEVP
cFZlY3RvclRpbWVzTWF0cml4OgotICAgICAgICAgICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0QmFz
aWNUeXBlKCkgIT0gRWJ0RmxvYXQpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5m
by5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJDb25zdGFudCBGb2xk
aW5nIGNhbm5vdCBiZSBkb25lIGZvciB2ZWN0b3IgdGltZXMgbWF0cml4Iik7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bZ2V0Tm9taW5hbFNpemUoKV07Ci0g
ICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCi0gICAgICAgICAgICAgICAgICAg
IGZvciAoaW50IHNpemUgPSBnZXROb21pbmFsU2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7IGkrKykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KDAu
MGYpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzaXplOyBq
KyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRG
Q29uc3QodGVtcENvbnN0QXJyYXlbaV0uZ2V0RkNvbnN0KCkgKyAoKHVuaW9uQXJyYXlbal0uZ2V0
RkNvbnN0KCkpICogcmlnaHRVbmlvbkFycmF5W2kqc2l6ZSArIGpdLmdldEZDb25zdCgpKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgRU9w
TG9naWNhbEFuZDogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9yIHBvc3NpYmxlIGZ1dHVyZSB1
c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkKLSAgICAgICAgICAgICAgICB0ZW1w
Q29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwotICAgICAgICAgICAg
ICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRl
bXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSAmJiByaWdodFVuaW9uQXJyYXlbaV07Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBj
YXNlIEVPcExvZ2ljYWxPcjogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9yIHBvc3NpYmxlIGZ1
dHVyZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkKLSAgICAgICAgICAgICAg
ICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwotICAgICAg
ICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSB8fCByaWdodFVuaW9uQXJyYXlb
aV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
ICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6Ci0gICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkg
PSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAgICAgICAgICB7Ly8gc3Vw
cG9ydCBNU1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBvYmplY3RTaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5
cGUoKS5nZXRCYXNpY1R5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBFYnRCb29sOiB0ZW1wQ29u
c3RBcnJheVtpXS5zZXRCQ29uc3QoKHVuaW9uQXJyYXlbaV0gPT0gcmlnaHRVbmlvbkFycmF5W2ld
KSA/IGZhbHNlIDogdHJ1ZSk7IGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDogYXNzZXJ0KGZh
bHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBF
T3BMZXNzVGhhbjoKLSAgICAgICAgICAgICAgICBhc3NlcnQob2JqZWN0U2l6ZSA9PSAxKTsKLSAg
ICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAg
ICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoKnVuaW9uQXJyYXkgPCAqcmln
aHRVbmlvbkFycmF5KTsKLSAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gVFR5cGUoRWJ0Qm9v
bCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgotICAgICAgICAgICAgICAgIGFzc2VydChvYmpl
Y3RTaXplID09IDEpOwotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCgq
dW5pb25BcnJheSA+ICpyaWdodFVuaW9uQXJyYXkpOwotICAgICAgICAgICAgICAgIHJldHVyblR5
cGUgPSBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydChvYmplY3RTaXplID09IDEpOwot
ICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uIGNvbnN0YW50OwotICAgICAgICAgICAg
ICAgICAgICBjb25zdGFudC5zZXRCQ29uc3QoKnVuaW9uQXJyYXkgPiAqcmlnaHRVbmlvbkFycmF5
KTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlv
blsxXTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCghY29u
c3RhbnQuZ2V0QkNvbnN0KCkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gVFR5
cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCk7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRo
YW5FcXVhbDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydChv
YmplY3RTaXplID09IDEpOwotICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uIGNvbnN0
YW50OwotICAgICAgICAgICAgICAgICAgICBjb25zdGFudC5zZXRCQ29uc3QoKnVuaW9uQXJyYXkg
PCAqcmlnaHRVbmlvbkFycmF5KTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkg
PSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXktPnNldEJDb25zdCghY29uc3RhbnQuZ2V0QkNvbnN0KCkpOwotICAgICAgICAgICAgICAgICAg
ICByZXR1cm5UeXBlID0gVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgY2FzZSBFT3BFcXVhbDoKLSAgICAgICAgICAgICAgICBpZiAoZ2V0VHlwZSgpLmdldEJhc2lj
VHlwZSgpID09IEVidFN0cnVjdCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIUNvbXBhcmVT
dHJ1Y3R1cmUobm9kZS0+Z2V0VHlwZSgpLCBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLCB1
bmlvbkFycmF5KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh1bmlvbkFycmF5W2ldICE9IHJpZ2h0VW5pb25BcnJheVtpXSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7ICAvLyBicmVhayBvdXQgb2YgZm9yIGxvb3AKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0g
ICAgICAgICAgICAgICAgaWYgKCFib29sTm9kZUZsYWcpIHsKLSAgICAgICAgICAgICAgICAgICAg
dGVtcENvbnN0QXJyYXktPnNldEJDb25zdCh0cnVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5z
ZXRCQ29uc3QoZmFsc2UpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRl
bXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCBUVHlwZShF
YnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSk7Ci0gICAgICAgICAgICAgICAgdGVtcE5v
ZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wTm9k
ZTsKLQotICAgICAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKLSAgICAgICAgICAgICAgICBpZiAo
Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoQ29tcGFyZVN0cnVjdHVyZShub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdldFVuaW9u
QXJyYXlQb2ludGVyKCksIHVuaW9uQXJyYXkpKQotICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bE5vZGVGbGFnID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHVuaW9uQXJyYXlbaV0gPT0gcmlnaHRVbmlvbkFycmF5W2ld
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbE5vZGVGbGFnID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgIC8vIGJyZWFrIG91dCBvZiBmb3IgbG9v
cAotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29u
c3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgICAgICBpZiAoIWJvb2xOb2RlRmxhZykgewotICAg
ICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KHRydWUpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
dGVtcENvbnN0QXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgdGVtcE5vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24odGVtcENv
bnN0QXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpKTsKLSAgICAg
ICAgICAgICAgICB0ZW1wTm9kZS0+c2V0TGluZShnZXRMaW5lKCkpOwotCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRlbXBOb2RlOwotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgp
LCAiSW52YWxpZCBvcGVyYXRvciBmb3IgY29uc3RhbnQgZm9sZGluZyIpOwotICAgICAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRlcm1D
b25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCByZXR1cm5UeXBlKTsKLSAgICAgICAgdGVtcE5v
ZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKLQotICAgICAgICByZXR1cm4gdGVtcE5vZGU7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gRG8gdW5hcnkgb3BlcmF0aW9ucwotICAg
ICAgICAvLwotICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbmV3Tm9kZSA9IDA7Ci0gICAg
ICAgIENvbnN0YW50VW5pb24qIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2Jq
ZWN0U2l6ZV07Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsr
KSB7Ci0gICAgICAgICAgICBzd2l0Y2gob3ApIHsKLSAgICAgICAgICAgICAgICBjYXNlIEVPcE5l
Z2F0aXZlOgotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRCYXNpY1R5
cGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogdGVtcENvbnN0
QXJyYXlbaV0uc2V0RkNvbnN0KC11bmlvbkFycmF5W2ldLmdldEZDb25zdCgpKTsgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDogICB0ZW1wQ29uc3RBcnJheVtpXS5z
ZXRJQ29uc3QoLXVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkpOyBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1Np
bmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJVbmFyeSBv
cGVyYXRpb24gbm90IGZvbGRlZCBpbnRvIGNvbnN0YW50Iik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OiAvLyB0aGlz
IGNvZGUgaXMgd3JpdHRlbiBmb3IgcG9zc2libGUgZnV0dXJlIHVzZSwgd2lsbCBub3QgZ2V0IGV4
ZWN1dGVkIGN1cnJlbnRseQotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5n
ZXRCYXNpY1R5cGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOiAg
dGVtcENvbnN0QXJyYXlbaV0uc2V0QkNvbnN0KCF1bmlvbkFycmF5W2ldLmdldEJDb25zdCgpKTsg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwg
Z2V0TGluZSgpLCAiVW5hcnkgb3BlcmF0aW9uIG5vdCBmb2xkZWQgaW50byBjb25zdGFudCIpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIG5ld05vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24odGVtcENvbnN0QXJy
YXksIGdldFR5cGUoKSk7Ci0gICAgICAgIG5ld05vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKLSAg
ICAgICAgcmV0dXJuIG5ld05vZGU7Ci0gICAgfQotfQotCi1USW50ZXJtVHlwZWQqIFRJbnRlcm1l
ZGlhdGU6OnByb21vdGVDb25zdGFudFVuaW9uKFRCYXNpY1R5cGUgcHJvbW90ZVRvLCBUSW50ZXJt
Q29uc3RhbnRVbmlvbiogbm9kZSkKLXsKLSAgICBzaXplX3Qgc2l6ZSA9IG5vZGUtPmdldFR5cGUo
KS5nZXRPYmplY3RTaXplKCk7Ci0KLSAgICBDb25zdGFudFVuaW9uICpsZWZ0VW5pb25BcnJheSA9
IG5ldyBDb25zdGFudFVuaW9uW3NpemVdOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
aXplOyBpKyspIHsKLSAgICAgICAgaW50IGluZGV4ID0gc3RhdGljX2Nhc3Q8aW50PihpKTsKLSAg
ICAgICAgc3dpdGNoIChwcm9tb3RlVG8pIHsKLSAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6Ci0g
ICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBsZWZ0VW5pb25BcnJheVtpXS5zZXRGQ29uc3Qoc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vZGUtPmdl
dElDb25zdChpbmRleCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0
VW5pb25BcnJheVtpXS5zZXRGQ29uc3Qoc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vZGUtPmdldEJDb25z
dChpbmRleCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICBjYXNlIEVidEZsb2F0OgotICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9u
QXJyYXlbaV0uc2V0RkNvbnN0KHN0YXRpY19jYXN0PGZsb2F0Pihub2RlLT5nZXRGQ29uc3QoaW5k
ZXgpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2Fn
ZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQ2Fubm90IHByb21vdGUi
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRWJ0SW50OgotICAgICAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OgotICAgICAgICAgICAgICAgICAgICAgICAgbGVm
dFVuaW9uQXJyYXlbaV0uc2V0SUNvbnN0KHN0YXRpY19jYXN0PGludD4obm9kZS0+Z2V0SUNvbnN0
KGluZGV4KSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgRWJ0Qm9vbDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFy
cmF5W2ldLnNldElDb25zdChzdGF0aWNfY2FzdDxpbnQ+KG5vZGUtPmdldEJDb25zdChpbmRleCkp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBj
YXNlIEVidEZsb2F0OgotICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0u
c2V0SUNvbnN0KHN0YXRpY19jYXN0PGludD4obm9kZS0+Z2V0RkNvbnN0KGluZGV4KSkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeElu
dGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIkNhbm5vdCBwcm9tb3RlIik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVidEJvb2w6Ci0gICAgICAgICAgICAgICAg
c3dpdGNoIChub2RlLT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJh
eVtpXS5zZXRCQ29uc3Qobm9kZS0+Z2V0SUNvbnN0KGluZGV4KSAhPSAwKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRCQ29uc3Qobm9kZS0+
Z2V0QkNvbnN0KGluZGV4KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGxl
ZnRVbmlvbkFycmF5W2ldLnNldEJDb25zdChub2RlLT5nZXRGQ29uc3QoaW5kZXgpICE9IDAuMGYp
OwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVBy
ZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIkNhbm5vdCBwcm9tb3RlIik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRM
aW5lKCksICJJbmNvcnJlY3QgZGF0YSB0eXBlIGZvdW5kIik7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIH0KLQotICAgIH0KLQotICAgIGNvbnN0IFRUeXBlJiB0ID0gbm9kZS0+
Z2V0VHlwZSgpOwotCi0gICAgcmV0dXJuIGFkZENvbnN0YW50VW5pb24obGVmdFVuaW9uQXJyYXks
IFRUeXBlKHByb21vdGVUbywgdC5nZXRQcmVjaXNpb24oKSwgdC5nZXRRdWFsaWZpZXIoKSwgdC5n
ZXROb21pbmFsU2l6ZSgpLCB0LmlzTWF0cml4KCksIHQuaXNBcnJheSgpKSwgbm9kZS0+Z2V0TGlu
ZSgpKTsKLX0KLQotLy8gc3RhdGljCi1UU3RyaW5nIFRJbnRlcm1UcmF2ZXJzZXI6Omhhc2goY29u
c3QgVFN0cmluZyYgbmFtZSwgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24pCi17Ci0gICAg
aWYgKGhhc2hGdW5jdGlvbiA9PSBOVUxMIHx8IG5hbWUuZW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IG5hbWU7Ci0gICAga2hyb25vc191aW50NjRfdCBudW1iZXIgPSAoKmhhc2hGdW5jdGlvbikobmFt
ZS5jX3N0cigpLCBuYW1lLmxlbmd0aCgpKTsKLSAgICBUU3RyaW5nU3RyZWFtIHN0cmVhbTsKLSAg
ICBzdHJlYW0gPDwgSEFTSEVEX05BTUVfUFJFRklYIDw8IHN0ZDo6aGV4IDw8IG51bWJlcjsKLSAg
ICBUU3RyaW5nIGhhc2hlZE5hbWUgPSBzdHJlYW0uc3RyKCk7Ci0gICAgcmV0dXJuIGhhc2hlZE5h
bWU7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
TU1hcC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL01NYXAuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTMwODY3MTUxNGNjNjNlOGU3MGEwM2UzODY4YjU3
OTUxYjg1ZTk4Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvTU1hcC5oCisrKyAvZGV2L251
bGwKQEAgLTEsNTYgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBfTU1BUF9J
TkNMVURFRF8KLSNkZWZpbmUgX01NQVBfSU5DTFVERURfCi0KLS8vCi0vLyBFbmNhcHN1bGF0ZSBt
ZW1vcnkgbWFwcGVkIGZpbGVzCi0vLwotCi1jbGFzcyBUTU1hcCB7Ci1wdWJsaWM6Ci0gICAgVE1N
YXAoY29uc3QgY2hhciogZmlsZU5hbWUpIDogCi0gICAgICAgIGZTaXplKC0xKSwgLy8gLTEgaXMg
dGhlIGVycm9yIHZhbHVlIHJldHVybmVkIGJ5IEdldEZpbGVTaXplKCkKLSAgICAgICAgZnAoTlVM
TCksCi0gICAgICAgIGZCdWZmKDApICAgLy8gMCBpcyB0aGUgZXJyb3IgdmFsdWUgcmV0dXJuZWQg
YnkgTWFwVmlld09mRmlsZSgpCi0gICAgewotICAgICAgICBpZiAoKGZwID0gZm9wZW4oZmlsZU5h
bWUsICJyIikpID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNoYXIgYyA9
IGdldGMoZnApOwotICAgICAgICBmU2l6ZSA9IDA7Ci0gICAgICAgIHdoaWxlIChjICE9IEVPRikg
ewotICAgICAgICAgICAgZlNpemUrKzsKLSAgICAgICAgICAgIGMgPSBnZXRjKGZwKTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoYyA9PSBFT0YpCi0gICAgICAgICAgICBmU2l6ZSsrOwotICAgICAg
ICByZXdpbmQoZnApOwotICAgICAgICBmQnVmZiA9IChjaGFyKiltYWxsb2Moc2l6ZW9mKGNoYXIp
ICogZlNpemUpOwotICAgICAgICBpbnQgY291bnQgPSAwOwotICAgICAgICBjID0gZ2V0YyhmcCk7
Ci0gICAgICAgIHdoaWxlIChjICE9IEVPRikgewotICAgICAgICAgICAgZkJ1ZmZbY291bnQrK10g
PSBjOwotICAgICAgICAgICAgYyA9IGdldGMoZnApOwotICAgICAgICB9Ci0gICAgICAgIGZCdWZm
W2NvdW50KytdID0gYzsKLSAgICB9Ci0KLSAgICBjaGFyKiBnZXREYXRhKCkgeyByZXR1cm4gZkJ1
ZmY7IH0KLSAgICBpbnQgICBnZXRTaXplKCkgeyByZXR1cm4gZlNpemU7IH0KLQotICAgIH5UTU1h
cCgpIHsKLSAgICAgICAgaWYgKGZwICE9IE5VTEwpCi0gICAgICAgICAgICBmY2xvc2UoZnApOwot
ICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgaW50ICAgICAgICAgICAgIGZTaXplOyAgICAgIC8v
IHNpemUgb2YgZmlsZSB0byBtYXAgaW4KLSAgICBGSUxFICpmcDsKLSAgICBjaGFyKiAgICAgICAg
ICAgZkJ1ZmY7ICAgICAgLy8gdGhlIGFjdHVhbCBkYXRhOwotfTsKLQotI2VuZGlmIC8vIF9NTUFQ
X0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDA3N2VmNWQ3MmViOWU3ZmYyZDRhOTZiNGQ1YzY5YmUxODY4MTBiNzguLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDExNSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29t
cGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCIKLQotbmFtZXNwYWNlIHsKLQotVFN0cmluZyBt
YXBMb25nTmFtZShzaXplX3QgaWQsIGNvbnN0IFRTdHJpbmcmIG5hbWUsIGJvb2wgaXNHbG9iYWwp
Ci17Ci0gICAgQVNTRVJUKG5hbWUuc2l6ZSgpID4gTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJ
WkUpOwotICAgIFRTdHJpbmdTdHJlYW0gc3RyZWFtOwotICAgIHN0cmVhbSA8PCAid2ViZ2xfIjsK
LSAgICBpZiAoaXNHbG9iYWwpCi0gICAgICAgIHN0cmVhbSA8PCAiZyI7Ci0gICAgc3RyZWFtIDw8
IGlkOwotICAgIGlmIChuYW1lWzBdICE9ICdfJykKLSAgICAgICAgc3RyZWFtIDw8ICJfIjsKLSAg
ICBzdHJlYW0gPDwgbmFtZS5zdWJzdHIoMCwgTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJWkUg
LSBzdHJlYW0uc3RyKCkuc2l6ZSgpKTsKLSAgICByZXR1cm4gc3RyZWFtLnN0cigpOwotfQotCi1M
b25nTmFtZU1hcCogZ0xvbmdOYW1lTWFwSW5zdGFuY2UgPSBOVUxMOwotCi19ICAvLyBhbm9ueW1v
dXMgbmFtZXNwYWNlCi0KLUxvbmdOYW1lTWFwOjpMb25nTmFtZU1hcCgpCi0gICAgOiByZWZDb3Vu
dCgwKQotewotfQotCi1Mb25nTmFtZU1hcDo6fkxvbmdOYW1lTWFwKCkKLXsKLX0KLQotLy8gc3Rh
dGljCi1Mb25nTmFtZU1hcCogTG9uZ05hbWVNYXA6OkdldEluc3RhbmNlKCkKLXsKLSAgICBpZiAo
Z0xvbmdOYW1lTWFwSW5zdGFuY2UgPT0gTlVMTCkKLSAgICAgICAgZ0xvbmdOYW1lTWFwSW5zdGFu
Y2UgPSBuZXcgTG9uZ05hbWVNYXA7Ci0gICAgZ0xvbmdOYW1lTWFwSW5zdGFuY2UtPnJlZkNvdW50
Kys7Ci0gICAgcmV0dXJuIGdMb25nTmFtZU1hcEluc3RhbmNlOwotfQotCi12b2lkIExvbmdOYW1l
TWFwOjpSZWxlYXNlKCkKLXsKLSAgICBBU1NFUlQoZ0xvbmdOYW1lTWFwSW5zdGFuY2UgPT0gdGhp
cyk7Ci0gICAgQVNTRVJUKHJlZkNvdW50ID4gMCk7Ci0gICAgcmVmQ291bnQtLTsKLSAgICBpZiAo
cmVmQ291bnQgPT0gMCkgewotICAgICAgICBkZWxldGUgZ0xvbmdOYW1lTWFwSW5zdGFuY2U7Ci0g
ICAgICAgIGdMb25nTmFtZU1hcEluc3RhbmNlID0gTlVMTDsKLSAgICB9Ci19Ci0KLWNvbnN0IGNo
YXIqIExvbmdOYW1lTWFwOjpGaW5kKGNvbnN0IGNoYXIqIG9yaWdpbmFsTmFtZSkgY29uc3QKLXsK
LSAgICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG1Mb25nTmFtZU1hcC5maW5kKAotICAgICAgICBvcmlnaW5hbE5hbWUpOwotICAgIGlmIChp
dCAhPSBtTG9uZ05hbWVNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiAoKml0KS5zZWNvbmQuY19z
dHIoKTsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotdm9pZCBMb25nTmFtZU1hcDo6SW5zZXJ0KGNv
bnN0IGNoYXIqIG9yaWdpbmFsTmFtZSwgY29uc3QgY2hhciogbWFwcGVkTmFtZSkKLXsKLSAgICBt
TG9uZ05hbWVNYXAuaW5zZXJ0KHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz46OnZh
bHVlX3R5cGUoCi0gICAgICAgIG9yaWdpbmFsTmFtZSwgbWFwcGVkTmFtZSkpOwotfQotCi1zaXpl
X3QgTG9uZ05hbWVNYXA6OlNpemUoKSBjb25zdAotewotICAgIHJldHVybiBtTG9uZ05hbWVNYXAu
c2l6ZSgpOwotfQotCi1NYXBMb25nVmFyaWFibGVOYW1lczo6TWFwTG9uZ1ZhcmlhYmxlTmFtZXMo
TG9uZ05hbWVNYXAqIGdsb2JhbE1hcCkKLXsKLSAgICBBU1NFUlQoZ2xvYmFsTWFwKTsKLSAgICBt
R2xvYmFsTWFwID0gZ2xvYmFsTWFwOwotfQotCi12b2lkIE1hcExvbmdWYXJpYWJsZU5hbWVzOjp2
aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBzeW1ib2wpCi17Ci0gICAgQVNTRVJUKHN5bWJvbCAh
PSBOVUxMKTsKLSAgICBpZiAoc3ltYm9sLT5nZXRTeW1ib2woKS5zaXplKCkgPiBNQVhfU0hPUlRF
TkVEX0lERU5USUZJRVJfU0laRSkgewotICAgICAgICBzd2l0Y2ggKHN5bWJvbC0+Z2V0UXVhbGlm
aWVyKCkpIHsKLSAgICAgICAgICBjYXNlIEV2cVZhcnlpbmdJbjoKLSAgICAgICAgICBjYXNlIEV2
cVZhcnlpbmdPdXQ6Ci0gICAgICAgICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nSW46Ci0gICAg
ICAgICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0OgotICAgICAgICAgIGNhc2UgRXZxVW5p
Zm9ybToKLSAgICAgICAgICAgIHN5bWJvbC0+c2V0U3ltYm9sKAotICAgICAgICAgICAgICAgIG1h
cEdsb2JhbExvbmdOYW1lKHN5bWJvbC0+Z2V0U3ltYm9sKCkpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBzeW1ib2wtPnNldFN5bWJvbCgKLSAg
ICAgICAgICAgICAgICBtYXBMb25nTmFtZShzeW1ib2wtPmdldElkKCksIHN5bWJvbC0+Z2V0U3lt
Ym9sKCksIGZhbHNlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfTsKLSAgICB9Ci19
Ci0KLVRTdHJpbmcgTWFwTG9uZ1ZhcmlhYmxlTmFtZXM6Om1hcEdsb2JhbExvbmdOYW1lKGNvbnN0
IFRTdHJpbmcmIG5hbWUpCi17Ci0gICAgQVNTRVJUKG1HbG9iYWxNYXApOwotICAgIGNvbnN0IGNo
YXIqIG1hcHBlZE5hbWUgPSBtR2xvYmFsTWFwLT5GaW5kKG5hbWUuY19zdHIoKSk7Ci0gICAgaWYg
KG1hcHBlZE5hbWUgIT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIG1hcHBlZE5hbWU7Ci0gICAgc2l6
ZV90IGlkID0gbUdsb2JhbE1hcC0+U2l6ZSgpOwotICAgIFRTdHJpbmcgcnQgPSBtYXBMb25nTmFt
ZShpZCwgbmFtZSwgdHJ1ZSk7Ci0gICAgbUdsb2JhbE1hcC0+SW5zZXJ0KG5hbWUuY19zdHIoKSwg
cnQuY19zdHIoKSk7Ci0gICAgcmV0dXJuIHJ0OwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQyZmY4MjYxM2MxOGUwNDc3ZjI0YTRmNjZiMGQz
N2JhNjEyMTE5ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFt
ZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0K
LSNpZm5kZWYgQ09NUElMRVJfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVNfSF8KLSNkZWZpbmUgQ09N
UElMRVJfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVNfSF8KLQotI2luY2x1ZGUgIkdMU0xBTkcvU2hh
ZGVyTGFuZy5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCi0jaW5jbHVk
ZSAiY29tcGlsZXIvVmFyaWFibGVJbmZvLmgiCi0KLS8vIFRoaXMgc2l6ZSBkb2VzIG5vdCBpbmNs
dWRlICdcMCcgaW4gdGhlIGVuZC4KLSNkZWZpbmUgTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJ
WkUgMzIKLQotLy8gVGhpcyBpcyBhIHJlZi1jb3VudGVkIHNpbmdsZXRvbi4gR2V0SW5zdGFuY2Uo
KSByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUKLS8vIHNpbmdsZXRvbiwgYW5kIGFmdGVyIHVzZSwg
Y2FsbCBSZWxlYXNlKCkuIEdldEluc3RhbmNlKCkgYW5kIFJlbGVhc2UoKSBzaG91bGQKLS8vIGJl
IHBhaXJlZC4KLWNsYXNzIExvbmdOYW1lTWFwIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgTG9uZ05h
bWVNYXAqIEdldEluc3RhbmNlKCk7Ci0gICAgdm9pZCBSZWxlYXNlKCk7Ci0KLSAgICAvLyBSZXR1
cm4gdGhlIG1hcHBlZCBuYW1lIGlmIDxvcmlnaW5hbE5hbWUsIG1hcHBlZE5hbWU+IGlzIGluIHRo
ZSBtYXA7Ci0gICAgLy8gb3RoZXJ3aXNlLCByZXR1cm4gTlVMTC4KLSAgICBjb25zdCBjaGFyKiBG
aW5kKGNvbnN0IGNoYXIqIG9yaWdpbmFsTmFtZSkgY29uc3Q7Ci0KLSAgICAvLyBJbnNlcnQgYSBw
YWlyIGludG8gdGhlIG1hcC4KLSAgICB2b2lkIEluc2VydChjb25zdCBjaGFyKiBvcmlnaW5hbE5h
bWUsIGNvbnN0IGNoYXIqIG1hcHBlZE5hbWUpOwotCi0gICAgLy8gUmV0dXJuIHRoZSBudW1iZXIg
b2YgZW50cmllcyBpbiB0aGUgbWFwLgotICAgIHNpemVfdCBTaXplKCkgY29uc3Q7Ci0KLXByaXZh
dGU6Ci0gICAgTG9uZ05hbWVNYXAoKTsKLSAgICB+TG9uZ05hbWVNYXAoKTsKLQotICAgIHNpemVf
dCByZWZDb3VudDsKLSAgICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+IG1Mb25n
TmFtZU1hcDsKLX07Ci0KLS8vIFRyYXZlcnNlcyBpbnRlcm1lZGlhdGUgdHJlZSB0byBtYXAgYXR0
cmlidXRlcyBhbmQgdW5pZm9ybXMgbmFtZXMgdGhhdCBhcmUKLS8vIGxvbmdlciB0aGFuIE1BWF9T
SE9SVEVORURfSURFTlRJRklFUl9TSVpFIHRvIE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpF
LgotY2xhc3MgTWFwTG9uZ1ZhcmlhYmxlTmFtZXMgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7
Ci1wdWJsaWM6Ci0gICAgTWFwTG9uZ1ZhcmlhYmxlTmFtZXMoTG9uZ05hbWVNYXAqIGdsb2JhbE1h
cCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOwotCi1w
cml2YXRlOgotICAgIFRTdHJpbmcgbWFwR2xvYmFsTG9uZ05hbWUoY29uc3QgVFN0cmluZyYgbmFt
ZSk7Ci0KLSAgICBMb25nTmFtZU1hcCogbUdsb2JhbE1hcDsKLX07Ci0KLSNlbmRpZiAgLy8gQ09N
UElMRVJfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Ob2RlU2VhcmNoLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvTm9kZVNlYXJjaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAyN2U0NzFkYmJjNDllMWRkOTIzNTIwZGYyNDAzZDY5N2NiYTcyNzFjLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9Ob2RlU2VhcmNoLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3OCAr
MCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotLy8gTm9kZVNlYXJjaC5oOiBVdGlsaXRpZXMgZm9y
IHNlYXJjaGluZyB0cmFuc2xhdG9yIG5vZGUgZ3JhcGhzCi0vLwotCi0jaWZuZGVmIFRSQU5TTEFU
T1JfTk9ERVNFQVJDSF9IXwotI2RlZmluZSBUUkFOU0xBVE9SX05PREVTRUFSQ0hfSF8KLQotbmFt
ZXNwYWNlIHNoCi17Ci0KLXRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Ci1jbGFzcyBOb2RlU2VhcmNo
VHJhdmVyc2VyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKLXsKLSAgcHVibGljOgotICAgIE5v
ZGVTZWFyY2hUcmF2ZXJzZXIoKQotICAgICAgICA6IG1Gb3VuZChmYWxzZSkKLSAgICB7fQotCi0g
ICAgYm9vbCBmb3VuZCgpIGNvbnN0IHsgcmV0dXJuIG1Gb3VuZDsgfQotCi0gICAgc3RhdGljIGJv
b2wgc2VhcmNoKFRJbnRlcm1Ob2RlICpub2RlKQotICAgIHsKLSAgICAgICAgUGFyZW50IHNlYXJj
aFRyYXZlcnNlcjsKLSAgICAgICAgbm9kZS0+dHJhdmVyc2UoJnNlYXJjaFRyYXZlcnNlcik7Ci0g
ICAgICAgIHJldHVybiBzZWFyY2hUcmF2ZXJzZXIuZm91bmQoKTsKLSAgICB9Ci0KLSAgcHJvdGVj
dGVkOgotICAgIGJvb2wgbUZvdW5kOwotfTsKLQotY2xhc3MgRmluZERpc2NhcmQgOiBwdWJsaWMg
Tm9kZVNlYXJjaFRyYXZlcnNlcjxGaW5kRGlzY2FyZD4KLXsKLSAgcHVibGljOgotICAgIHZpcnR1
YWwgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCAqbm9kZSkKLSAg
ICB7Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICBjYXNlIEVPcEtpbGw6Ci0gICAgICAgICAgICBtRm91bmQgPSB0cnVlOwotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgICBkZWZhdWx0OiBicmVhazsKLSAgICAgICAgfQotCi0gICAg
ICAgIHJldHVybiAhbUZvdW5kOwotICAgIH0KLX07Ci0KLWNsYXNzIEZpbmRTaWRlRWZmZWN0UmV3
cml0aW5nIDogcHVibGljIE5vZGVTZWFyY2hUcmF2ZXJzZXI8RmluZFNpZGVFZmZlY3RSZXdyaXRp
bmc+Ci17Ci0gIHB1YmxpYzoKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlz
aXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKG5vZGUtPmdl
dE9wKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjoKLSAgICAgICAg
ICBjYXNlIEVPcExvZ2ljYWxBbmQ6Ci0gICAgICAgICAgICBpZiAobm9kZS0+Z2V0UmlnaHQoKS0+
aGFzU2lkZUVmZmVjdHMoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRm91bmQg
PSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBk
ZWZhdWx0OiBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAhbUZvdW5kOwotICAg
IH0KLX07Ci0KLX0KLQotI2VuZGlmIC8vIFRSQU5TTEFUT1JfTk9ERVNFQVJDSF9IXwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEVTU0wuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEVTU0wuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjA0OGYxY2VjNGFlY2U2YTMwMWE1YjBmMTQw
YmM4MTkyNDM5NzkwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRFU1NMLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNs
dWRlICJjb21waWxlci9PdXRwdXRFU1NMLmgiCi0KLVRPdXRwdXRFU1NMOjpUT3V0cHV0RVNTTChU
SW5mb1NpbmtCYXNlJiBvYmpTaW5rLAotICAgICAgICAgICAgICAgICAgICAgICAgIFNoQXJyYXlJ
bmRleENsYW1waW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJhdGVneSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBOYW1lTWFwJiBuYW1lTWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1i
b2xUYWJsZSYgc3ltYm9sVGFibGUpCi0gICAgOiBUT3V0cHV0R0xTTEJhc2Uob2JqU2luaywgY2xh
bXBpbmdTdHJhdGVneSwgaGFzaEZ1bmN0aW9uLCBuYW1lTWFwLCBzeW1ib2xUYWJsZSkKLXsKLX0K
LQotYm9vbCBUT3V0cHV0RVNTTDo6d3JpdGVWYXJpYWJsZVByZWNpc2lvbihUUHJlY2lzaW9uIHBy
ZWNpc2lvbikKLXsKLSAgICBpZiAocHJlY2lzaW9uID09IEVicFVuZGVmaW5lZCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOwotICAg
IG91dCA8PCBnZXRQcmVjaXNpb25TdHJpbmcocHJlY2lzaW9uKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRw
dXRFU1NMLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0RVNT
TC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWRiOTZlNDk3OTE2ZGJjOWY2NmQ5
MjBiMDJjY2RiMmI5OGQyYjFjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRFU1NM
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0j
aWZuZGVmIENST1NTQ09NUElMRVJHTFNMX09VVFBVVEVTU0xfSF8KLSNkZWZpbmUgQ1JPU1NDT01Q
SUxFUkdMU0xfT1VUUFVURVNTTF9IXwotCi0jaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0R0xTTEJh
c2UuaCIKLQotY2xhc3MgVE91dHB1dEVTU0wgOiBwdWJsaWMgVE91dHB1dEdMU0xCYXNlCi17Ci1w
dWJsaWM6Ci0gICAgVE91dHB1dEVTU0woVEluZm9TaW5rQmFzZSYgb2JqU2luaywKLSAgICAgICAg
ICAgICAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IGNsYW1waW5nU3RyYXRlZ3ksCi0g
ICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24sCi0gICAgICAgICAg
ICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5
bWJvbFRhYmxlKTsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgYm9vbCB3cml0ZVZhcmlhYmxl
UHJlY2lzaW9uKFRQcmVjaXNpb24gcHJlY2lzaW9uKTsKLX07Ci0KLSNlbmRpZiAgLy8gQ1JPU1ND
T01QSUxFUkdMU0xfT1VUUFVURVNTTF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAxMGE0NTFjMGQ3NmVjMGQ1MDMwMGU1MmJiM2M1MDUyNjVhM2Y2NzEwLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICsw
LDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9PdXRwdXRHTFNM
LmgiCi0KLVRPdXRwdXRHTFNMOjpUT3V0cHV0R0xTTChUSW5mb1NpbmtCYXNlJiBvYmpTaW5rLAot
ICAgICAgICAgICAgICAgICAgICAgICAgIFNoQXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kgY2xh
bXBpbmdTdHJhdGVneSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0
IGhhc2hGdW5jdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lTWFwJiBuYW1lTWFw
LAotICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCi0g
ICAgOiBUT3V0cHV0R0xTTEJhc2Uob2JqU2luaywgY2xhbXBpbmdTdHJhdGVneSwgaGFzaEZ1bmN0
aW9uLCBuYW1lTWFwLCBzeW1ib2xUYWJsZSkKLXsKLX0KLQotYm9vbCBUT3V0cHV0R0xTTDo6d3Jp
dGVWYXJpYWJsZVByZWNpc2lvbihUUHJlY2lzaW9uKQotewotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotdm9pZCBUT3V0cHV0R0xTTDo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKLXsK
LSAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7Ci0KLSAgICBpZiAobm9kZS0+Z2V0
U3ltYm9sKCkgPT0gImdsX0ZyYWdEZXB0aEVYVCIpCi0gICAgewotICAgICAgICBvdXQgPDwgImds
X0ZyYWdEZXB0aCI7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIFRPdXRwdXRHTFNM
QmFzZTo6dmlzaXRTeW1ib2wobm9kZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGZhNjhhYzgxMDMwZTkzM2I0ODMyODkzNTBlZmMzNTMyNzk0ZGU4NjguLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2
ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ1JPU1NDT01QSUxFUkdMU0xf
T1VUUFVUR0xTTF9IXwotI2RlZmluZSBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRHTFNMX0hfCi0K
LSNpbmNsdWRlICJjb21waWxlci9PdXRwdXRHTFNMQmFzZS5oIgotCi1jbGFzcyBUT3V0cHV0R0xT
TCA6IHB1YmxpYyBUT3V0cHV0R0xTTEJhc2UKLXsKLXB1YmxpYzoKLSAgICBUT3V0cHV0R0xTTChU
SW5mb1NpbmtCYXNlJiBvYmpTaW5rLAotICAgICAgICAgICAgICAgIFNoQXJyYXlJbmRleENsYW1w
aW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJhdGVneSwKLSAgICAgICAgICAgICAgICBTaEhhc2hGdW5j
dGlvbjY0IGhhc2hGdW5jdGlvbiwKLSAgICAgICAgICAgICAgICBOYW1lTWFwJiBuYW1lTWFwLAot
ICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpOwotCi1wcm90ZWN0ZWQ6
Ci0gICAgdmlydHVhbCBib29sIHdyaXRlVmFyaWFibGVQcmVjaXNpb24oVFByZWNpc2lvbik7Ci0g
ICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpOwotfTsKLQot
I2VuZGlmICAvLyBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRHTFNMX0hfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTEJhc2UuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0xCYXNlLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjkwYmQ2N2VjZDc0MjBlOWU0OGExZWFkMWU0
M2ZkYmFmNTgwOGUwYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTEJhc2Uu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsODE3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0K
LSNpbmNsdWRlICJjb21waWxlci9PdXRwdXRHTFNMQmFzZS5oIgotI2luY2x1ZGUgImNvbXBpbGVy
L2RlYnVnLmgiCi0KLSNpbmNsdWRlIDxjZmxvYXQ+Ci0KLW5hbWVzcGFjZQotewotVFN0cmluZyBh
cnJheUJyYWNrZXRzKGNvbnN0IFRUeXBlJiB0eXBlKQotewotICAgIEFTU0VSVCh0eXBlLmlzQXJy
YXkoKSk7Ci0gICAgVEluZm9TaW5rQmFzZSBvdXQ7Ci0gICAgb3V0IDw8ICJbIiA8PCB0eXBlLmdl
dEFycmF5U2l6ZSgpIDw8ICJdIjsKLSAgICByZXR1cm4gVFN0cmluZyhvdXQuY19zdHIoKSk7Ci19
Ci0KLWJvb2wgaXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUqIG5vZGUpIHsKLSAgICBpZiAo
Y29uc3QgVEludGVybUFnZ3JlZ2F0ZSogYWdncmVnYXRlID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUo
KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoYWdncmVnYXRlLT5nZXRPcCgpICE9IEVPcEZ1bmN0
aW9uKSAmJgotICAgICAgICAgICAgICAgKGFnZ3JlZ2F0ZS0+Z2V0T3AoKSAhPSBFT3BTZXF1ZW5j
ZSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGNvbnN0IFRJbnRlcm1TZWxlY3Rpb24qIHNlbGVjdGlv
biA9IG5vZGUtPmdldEFzU2VsZWN0aW9uTm9kZSgpKQotICAgIHsKLSAgICAgICAgLy8gVGVybmFy
eSBvcGVyYXRvcnMgYXJlIHVzdWFsbHkgcGFydCBvZiBhbiBhc3NpZ25tZW50IG9wZXJhdG9yLgot
ICAgICAgICAvLyBUaGlzIGhhbmRsZXMgdGhvc2UgcmFyZSBjYXNlcyBpbiB3aGljaCB0aGV5IGFy
ZSBhbGwgYnkgdGhlbXNlbHZlcy4KLSAgICAgICAgcmV0dXJuIHNlbGVjdGlvbi0+dXNlc1Rlcm5h
cnlPcGVyYXRvcigpOwotICAgIH0KLSAgICBlbHNlIGlmIChub2RlLT5nZXRBc0xvb3BOb2RlKCkp
Ci0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwot
fQotfSAgLy8gbmFtZXNwYWNlCi0KLVRPdXRwdXRHTFNMQmFzZTo6VE91dHB1dEdMU0xCYXNlKFRJ
bmZvU2lua0Jhc2UmIG9ialNpbmssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
aEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IGNsYW1waW5nU3RyYXRlZ3ksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQotICAg
IDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwKLSAgICAgIG1PYmpTaW5rKG9i
alNpbmspLAotICAgICAgbURlY2xhcmluZ1ZhcmlhYmxlcyhmYWxzZSksCi0gICAgICBtQ2xhbXBp
bmdTdHJhdGVneShjbGFtcGluZ1N0cmF0ZWd5KSwKLSAgICAgIG1IYXNoRnVuY3Rpb24oaGFzaEZ1
bmN0aW9uKSwKLSAgICAgIG1OYW1lTWFwKG5hbWVNYXApLAotICAgICAgbVN5bWJvbFRhYmxlKHN5
bWJvbFRhYmxlKQotewotfQotCi12b2lkIFRPdXRwdXRHTFNMQmFzZTo6d3JpdGVUcmlwbGV0KFZp
c2l0IHZpc2l0LCBjb25zdCBjaGFyKiBwcmVTdHIsIGNvbnN0IGNoYXIqIGluU3RyLCBjb25zdCBj
aGFyKiBwb3N0U3RyKQotewotICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNpbmsoKTsKLSAg
ICBpZiAodmlzaXQgPT0gUHJlVmlzaXQgJiYgcHJlU3RyKQotICAgIHsKLSAgICAgICAgb3V0IDw8
IHByZVN0cjsKLSAgICB9Ci0gICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCAmJiBpblN0cikK
LSAgICB7Ci0gICAgICAgIG91dCA8PCBpblN0cjsKLSAgICB9Ci0gICAgZWxzZSBpZiAodmlzaXQg
PT0gUG9zdFZpc2l0ICYmIHBvc3RTdHIpCi0gICAgewotICAgICAgICBvdXQgPDwgcG9zdFN0cjsK
LSAgICB9Ci19Ci0KLXZvaWQgVE91dHB1dEdMU0xCYXNlOjp3cml0ZVZhcmlhYmxlVHlwZShjb25z
dCBUVHlwZSYgdHlwZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7Ci0g
ICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSB0eXBlLmdldFF1YWxpZmllcigpOwotICAgIC8vIFRP
RE8oYWxva3ApOiBWYWxpZGF0ZSBxdWFsaWZpZXIgZm9yIHZhcmlhYmxlIGRlY2xhcmF0aW9ucy4K
LSAgICBpZiAoKHF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpICYmIChxdWFsaWZpZXIgIT0gRXZx
R2xvYmFsKSkKLSAgICAgICAgb3V0IDw8IHR5cGUuZ2V0UXVhbGlmaWVyU3RyaW5nKCkgPDwgIiAi
OwotICAgIC8vIERlY2xhcmUgdGhlIHN0cnVjdCBpZiB3ZSBoYXZlIG5vdCBkb25lIHNvIGFscmVh
ZHkuCi0gICAgaWYgKCh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgJiYgIXN0cnVj
dERlY2xhcmVkKHR5cGUuZ2V0U3RydWN0KCkpKQotICAgIHsKLSAgICAgICAgZGVjbGFyZVN0cnVj
dCh0eXBlLmdldFN0cnVjdCgpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYg
KHdyaXRlVmFyaWFibGVQcmVjaXNpb24odHlwZS5nZXRQcmVjaXNpb24oKSkpCi0gICAgICAgICAg
ICBvdXQgPDwgIiAiOwotICAgICAgICBvdXQgPDwgZ2V0VHlwZU5hbWUodHlwZSk7Ci0gICAgfQot
fQotCi12b2lkIFRPdXRwdXRHTFNMQmFzZTo6d3JpdGVGdW5jdGlvblBhcmFtZXRlcnMoY29uc3Qg
VEludGVybVNlcXVlbmNlJiBhcmdzKQotewotICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNp
bmsoKTsKLSAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGFy
Z3MuYmVnaW4oKTsKLSAgICAgICAgIGl0ZXIgIT0gYXJncy5lbmQoKTsgKytpdGVyKQotICAgIHsK
LSAgICAgICAgY29uc3QgVEludGVybVN5bWJvbCogYXJnID0gKCppdGVyKS0+Z2V0QXNTeW1ib2xO
b2RlKCk7Ci0gICAgICAgIEFTU0VSVChhcmcgIT0gTlVMTCk7Ci0KLSAgICAgICAgY29uc3QgVFR5
cGUmIHR5cGUgPSBhcmctPmdldFR5cGUoKTsKLSAgICAgICAgd3JpdGVWYXJpYWJsZVR5cGUodHlw
ZSk7Ci0KLSAgICAgICAgY29uc3QgVFN0cmluZyYgbmFtZSA9IGFyZy0+Z2V0U3ltYm9sKCk7Ci0g
ICAgICAgIGlmICghbmFtZS5lbXB0eSgpKQotICAgICAgICAgICAgb3V0IDw8ICIgIiA8PCBoYXNo
TmFtZShuYW1lKTsKLSAgICAgICAgaWYgKHR5cGUuaXNBcnJheSgpKQotICAgICAgICAgICAgb3V0
IDw8IGFycmF5QnJhY2tldHModHlwZSk7Ci0KLSAgICAgICAgLy8gUHV0IGEgY29tbWEgaWYgdGhp
cyBpcyBub3QgdGhlIGxhc3QgYXJndW1lbnQuCi0gICAgICAgIGlmIChpdGVyICE9IGFyZ3MuZW5k
KCkgLSAxKQotICAgICAgICAgICAgb3V0IDw8ICIsICI7Ci0gICAgfQotfQotCi1jb25zdCBDb25z
dGFudFVuaW9uKiBUT3V0cHV0R0xTTEJhc2U6OndyaXRlQ29uc3RhbnRVbmlvbihjb25zdCBUVHlw
ZSYgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IENvbnN0YW50VW5pb24qIHBDb25zdFVuaW9uKQotewotICAgIFRJbmZv
U2lua0Jhc2UmIG91dCA9IG9ialNpbmsoKTsKLQotICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgp
ID09IEVidFN0cnVjdCkKLSAgICB7Ci0gICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IHR5cGUuZ2V0U3RydWN0KCk7Ci0gICAgICAgIG91dCA8PCBoYXNoTmFtZShzdHJ1Y3R1cmUt
Pm5hbWUoKSkgPDwgIigiOwotCi0gICAgICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9IHN0
cnVjdHVyZS0+ZmllbGRzKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRz
LnNpemUoKTsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBUVHlwZSogZmllbGRU
eXBlID0gZmllbGRzW2ldLT50eXBlKCk7Ci0gICAgICAgICAgICBBU1NFUlQoZmllbGRUeXBlICE9
IE5VTEwpOwotICAgICAgICAgICAgcENvbnN0VW5pb24gPSB3cml0ZUNvbnN0YW50VW5pb24oKmZp
ZWxkVHlwZSwgcENvbnN0VW5pb24pOwotICAgICAgICAgICAgaWYgKGkgIT0gZmllbGRzLnNpemUo
KSAtIDEpIG91dCA8PCAiLCAiOwotICAgICAgICB9Ci0gICAgICAgIG91dCA8PCAiKSI7Ci0gICAg
fQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHNpemVfdCBzaXplID0gdHlwZS5nZXRPYmplY3RT
aXplKCk7Ci0gICAgICAgIGJvb2wgd3JpdGVUeXBlID0gc2l6ZSA+IDE7Ci0gICAgICAgIGlmICh3
cml0ZVR5cGUpIG91dCA8PCBnZXRUeXBlTmFtZSh0eXBlKSA8PCAiKCI7Ci0gICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpLCArK3BDb25zdFVuaW9uKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBzd2l0Y2ggKHBDb25zdFVuaW9uLT5nZXRUeXBlKCkpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogb3V0IDw8IHN0ZDo6bWluKEZMVF9NQVgs
IHN0ZDo6bWF4KC1GTFRfTUFYLCBwQ29uc3RVbmlvbi0+Z2V0RkNvbnN0KCkpKTsgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6IG91dCA8PCBwQ29uc3RVbmlvbi0+Z2V0SUNvbnN0
KCk7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogb3V0IDw8IHBDb25zdFVu
aW9uLT5nZXRCQ29uc3QoKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpICE9IHNpemUgLSAxKSBv
dXQgPDwgIiwgIjsKLSAgICAgICAgfQotICAgICAgICBpZiAod3JpdGVUeXBlKSBvdXQgPDwgIiki
OwotICAgIH0KLSAgICByZXR1cm4gcENvbnN0VW5pb247Ci19Ci0KLXZvaWQgVE91dHB1dEdMU0xC
YXNlOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQotewotICAgIFRJbmZvU2lua0Jh
c2UmIG91dCA9IG9ialNpbmsoKTsKLSAgICBpZiAobUxvb3BVbnJvbGwuTmVlZHNUb1JlcGxhY2VT
eW1ib2xXaXRoVmFsdWUobm9kZSkpCi0gICAgICAgIG91dCA8PCBtTG9vcFVucm9sbC5HZXRMb29w
SW5kZXhWYWx1ZShub2RlKTsKLSAgICBlbHNlCi0gICAgICAgIG91dCA8PCBoYXNoVmFyaWFibGVO
YW1lKG5vZGUtPmdldFN5bWJvbCgpKTsKLQotICAgIGlmIChtRGVjbGFyaW5nVmFyaWFibGVzICYm
IG5vZGUtPmdldFR5cGUoKS5pc0FycmF5KCkpCi0gICAgICAgIG91dCA8PCBhcnJheUJyYWNrZXRz
KG5vZGUtPmdldFR5cGUoKSk7Ci19Ci0KLXZvaWQgVE91dHB1dEdMU0xCYXNlOjp2aXNpdENvbnN0
YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qIG5vZGUpCi17Ci0gICAgd3JpdGVDb25zdGFu
dFVuaW9uKG5vZGUtPmdldFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSk7Ci19
Ci0KLWJvb2wgVE91dHB1dEdMU0xCYXNlOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVy
bUJpbmFyeSogbm9kZSkKLXsKLSAgICBib29sIHZpc2l0Q2hpbGRyZW4gPSB0cnVlOwotICAgIFRJ
bmZvU2lua0Jhc2UmIG91dCA9IG9ialNpbmsoKTsKLSAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkp
Ci0gICAgewotICAgICAgICBjYXNlIEVPcEluaXRpYWxpemU6Ci0gICAgICAgICAgICBpZiAodmlz
aXQgPT0gSW5WaXNpdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIiA9
ICI7Ci0gICAgICAgICAgICAgICAgLy8gUkhTIG9mIGluaXRpYWxpemUgaXMgbm90IGJlaW5nIGRl
Y2xhcmVkLgotICAgICAgICAgICAgICAgIG1EZWNsYXJpbmdWYXJpYWJsZXMgPSBmYWxzZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEFzc2lnbjog
d3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgPSAiLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2Fz
ZSBFT3BBZGRBc3NpZ246IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiICs9ICIsICIpIik7IGJy
ZWFrOwotICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIs
ICIgLT0gIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wRGl2QXNzaWduOiB3cml0ZVRy
aXBsZXQodmlzaXQsICIoIiwgIiAvPSAiLCAiKSIpOyBicmVhazsKLSAgICAgICAgLy8gTm90aWNl
IHRoZSBmYWxsLXRocm91Z2guCi0gICAgICAgIGNhc2UgRU9wTXVsQXNzaWduOiAKLSAgICAgICAg
Y2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjoKLSAgICAgICAgY2FzZSBFT3BWZWN0b3JU
aW1lc1NjYWxhckFzc2lnbjoKLSAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2ln
bjoKLSAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjoKLSAgICAgICAgICAg
IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiICo9ICIsICIpIik7Ci0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0OgotICAgICAgICAgICAgd3JpdGVUcmlw
bGV0KHZpc2l0LCBOVUxMLCAiWyIsICJdIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBFT3BJbmRleEluZGlyZWN0OgotICAgICAgICAgICAgaWYgKG5vZGUtPmdldEFkZEluZGV4
Q2xhbXAoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAodmlzaXQgPT0gSW5W
aXNpdCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtQ2xhbXBp
bmdTdHJhdGVneSA9PSBTSF9DTEFNUF9XSVRIX0NMQU1QX0lOVFJJTlNJQykgewotICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0IDw8ICJbaW50KGNsYW1wKGZsb2F0KCI7Ci0gICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIlt3ZWJnbF9p
bnRfY2xhbXAoIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBQb3N0VmlzaXQpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBpbnQgbWF4U2l6ZTsKLSAgICAgICAgICAgICAgICAg
ICAgVEludGVybVR5cGVkICpsZWZ0ID0gbm9kZS0+Z2V0TGVmdCgpOwotICAgICAgICAgICAgICAg
ICAgICBUVHlwZSBsZWZ0VHlwZSA9IGxlZnQtPmdldFR5cGUoKTsKLQotICAgICAgICAgICAgICAg
ICAgICBpZiAobGVmdC0+aXNBcnJheSgpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBUaGUgc2hhZGVyIHdpbGwgZmFpbCB2YWxpZGF0aW9uIGlmIHRo
ZSBhcnJheSBsZW5ndGggaXMgbm90ID4gMC4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1heFNp
emUgPSBsZWZ0VHlwZS5nZXRBcnJheVNpemUoKSAtIDE7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtYXhTaXplID0gbGVmdFR5cGUuZ2V0Tm9taW5hbFNpemUoKSAtIDE7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAobUNsYW1w
aW5nU3RyYXRlZ3kgPT0gU0hfQ0xBTVBfV0lUSF9DTEFNUF9JTlRSSU5TSUMpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAiKSwgMC4wLCBmbG9hdCgiIDw8IG1heFNpemUgPDwgIikp
KV0iOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0IDw8ICIsIDAsICIgPDwgbWF4U2l6ZSA8PCAiKV0iOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHdyaXRlVHJpcGxldCh2aXNpdCwgTlVMTCwg
IlsiLCAiXSIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6Ci0gICAgICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNp
dCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBIZXJlIHdlIGFyZSB3cml0aW5n
IG91dCAiZm9vLmJhciIsIHdoZXJlICJmb28iIGlzIHN0cnVjdAotICAgICAgICAgICAgICAgIC8v
IGFuZCAiYmFyIiBpcyBmaWVsZC4gSW4gQVNULCBpdCBpcyByZXByZXNlbnRlZCBhcyBhIGJpbmFy
eQotICAgICAgICAgICAgICAgIC8vIG5vZGUsIHdoZXJlIGxlZnQgY2hpbGQgcmVwcmVzZW50cyAi
Zm9vIiBhbmQgcmlnaHQgY2hpbGQgImJhciIuCi0gICAgICAgICAgICAgICAgLy8gVGhlIG5vZGUg
aXRzZWxmIHJlcHJlc2VudHMgIi4iLiBUaGUgc3RydWN0IGZpZWxkICJiYXIiIGlzCi0gICAgICAg
ICAgICAgICAgLy8gYWN0dWFsbHkgc3RvcmVkIGFzIGFuIGluZGV4IGludG8gVFN0cnVjdHVyZTo6
ZmllbGRzLgotICAgICAgICAgICAgICAgIG91dCA8PCAiLiI7Ci0gICAgICAgICAgICAgICAgY29u
c3QgVFN0cnVjdHVyZSogc3RydWN0dXJlID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkuZ2V0
U3RydWN0KCk7Ci0gICAgICAgICAgICAgICAgY29uc3QgVEludGVybUNvbnN0YW50VW5pb24qIGlu
ZGV4ID0gbm9kZS0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0gICAgICAgICAg
ICAgICAgY29uc3QgVEZpZWxkKiBmaWVsZCA9IHN0cnVjdHVyZS0+ZmllbGRzKClbaW5kZXgtPmdl
dElDb25zdCgwKV07Ci0KLSAgICAgICAgICAgICAgICBUU3RyaW5nIGZpZWxkTmFtZSA9IGZpZWxk
LT5uYW1lKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFtU3ltYm9sVGFibGUuZmluZEJ1aWx0SW4o
c3RydWN0dXJlLT5uYW1lKCkpKQotICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPSBoYXNo
TmFtZShmaWVsZE5hbWUpOwotCi0gICAgICAgICAgICAgICAgb3V0IDw8IGZpZWxkTmFtZTsKLSAg
ICAgICAgICAgICAgICB2aXNpdENoaWxkcmVuID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BWZWN0b3JTd2l6emxlOgotICAgICAgICAg
ICAgaWYgKHZpc2l0ID09IEluVmlzaXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
b3V0IDw8ICIuIjsKLSAgICAgICAgICAgICAgICBUSW50ZXJtQWdncmVnYXRlKiByaWdodENoaWxk
ID0gbm9kZS0+Z2V0UmlnaHQoKS0+Z2V0QXNBZ2dyZWdhdGUoKTsKLSAgICAgICAgICAgICAgICBU
SW50ZXJtU2VxdWVuY2UmIHNlcXVlbmNlID0gcmlnaHRDaGlsZC0+Z2V0U2VxdWVuY2UoKTsKLSAg
ICAgICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gc2VxdWVu
Y2UuYmVnaW4oKTsgc2l0ICE9IHNlcXVlbmNlLmVuZCgpOyArK3NpdCkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiBlbGVtZW50ID0g
KCpzaXQpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KGVsZW1lbnQtPmdldEJhc2ljVHlwZSgpID09IEVidEludCk7Ci0gICAgICAgICAgICAgICAgICAg
IEFTU0VSVChlbGVtZW50LT5nZXROb21pbmFsU2l6ZSgpID09IDEpOwotICAgICAgICAgICAgICAg
ICAgICBjb25zdCBDb25zdGFudFVuaW9uJiBkYXRhID0gZWxlbWVudC0+Z2V0VW5pb25BcnJheVBv
aW50ZXIoKVswXTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGRhdGEuZ2V0VHlwZSgpID09
IEVidEludCk7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YS5nZXRJQ29uc3QoKSkK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiBv
dXQgPDwgIngiOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogb3V0IDw8
ICJ5IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IG91dCA8PCAieiI7
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvdXQgPDwgInciOyBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgIGNhc2UgRU9wQWRkOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAr
ICIsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcFN1Yjogd3JpdGVUcmlwbGV0KHZpc2l0
LCAiKCIsICIgLSAiLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BNdWw6IHdyaXRlVHJp
cGxldCh2aXNpdCwgIigiLCAiICogIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wRGl2
OiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAvICIsICIpIik7IGJyZWFrOwotICAgICAgICBj
YXNlIEVPcE1vZDogVU5JTVBMRU1FTlRFRCgpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BFcXVh
bDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgPT0gIiwgIikiKTsgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRU9wTm90RXF1YWw6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiICE9ICIsICIpIik7
IGJyZWFrOwotICAgICAgICBjYXNlIEVPcExlc3NUaGFuOiB3cml0ZVRyaXBsZXQodmlzaXQsICIo
IiwgIiA8ICIsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOiB3cml0
ZVRyaXBsZXQodmlzaXQsICIoIiwgIiA+ICIsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVP
cExlc3NUaGFuRXF1YWw6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiIDw9ICIsICIpIik7IGJy
ZWFrOwotICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6IHdyaXRlVHJpcGxldCh2aXNp
dCwgIigiLCAiID49ICIsICIpIik7IGJyZWFrOwotCi0gICAgICAgIC8vIE5vdGljZSB0aGUgZmFs
bC10aHJvdWdoLgotICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyOgotICAgICAgICBj
YXNlIEVPcFZlY3RvclRpbWVzTWF0cml4OgotICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVj
dG9yOgotICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyOgotICAgICAgICBjYXNlIEVP
cE1hdHJpeFRpbWVzTWF0cml4OgotICAgICAgICAgICAgd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIs
ICIgKiAiLCAiKSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BMb2dp
Y2FsT3I6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiIHx8ICIsICIpIik7IGJyZWFrOwotICAg
ICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiIF5eICIs
ICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6IHdyaXRlVHJpcGxldCh2
aXNpdCwgIigiLCAiICYmICIsICIpIik7IGJyZWFrOwotICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOyBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmlzaXRDaGlsZHJlbjsKLX0KLQot
Ym9vbCBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFy
eSogbm9kZSkKLXsKLSAgICBUU3RyaW5nIHByZVN0cmluZzsKLSAgICBUU3RyaW5nIHBvc3RTdHJp
bmcgPSAiKSI7Ci0KLSAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCi0gICAgewotICAgICAgICBj
YXNlIEVPcE5lZ2F0aXZlOiBwcmVTdHJpbmcgPSAiKC0iOyBicmVhazsKLSAgICAgICAgY2FzZSBF
T3BWZWN0b3JMb2dpY2FsTm90OiBwcmVTdHJpbmcgPSAibm90KCI7IGJyZWFrOwotICAgICAgICBj
YXNlIEVPcExvZ2ljYWxOb3Q6IHByZVN0cmluZyA9ICIoISI7IGJyZWFrOwotCi0gICAgICAgIGNh
c2UgRU9wUG9zdEluY3JlbWVudDogcHJlU3RyaW5nID0gIigiOyBwb3N0U3RyaW5nID0gIisrKSI7
IGJyZWFrOwotICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6IHByZVN0cmluZyA9ICIoIjsg
cG9zdFN0cmluZyA9ICItLSkiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6
IHByZVN0cmluZyA9ICIoKysiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6
IHByZVN0cmluZyA9ICIoLS0iOyBicmVhazsKLQotICAgICAgICBjYXNlIEVPcENvbnZJbnRUb0Jv
b2w6Ci0gICAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9Cb29sOgotICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgMTogcHJlU3RyaW5nID0gICJib29sKCI7ICBi
cmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDI6IHByZVN0cmluZyA9ICJidmVjMigiOyBicmVh
azsKLSAgICAgICAgICAgICAgICBjYXNlIDM6IHByZVN0cmluZyA9ICJidmVjMygiOyBicmVhazsK
LSAgICAgICAgICAgICAgICBjYXNlIDQ6IHByZVN0cmluZyA9ICJidmVjNCgiOyBicmVhazsKLSAg
ICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0Zsb2F0OgotICAgICAg
ICBjYXNlIEVPcENvbnZJbnRUb0Zsb2F0OgotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRP
cGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGNhc2UgMTogcHJlU3RyaW5nID0gImZsb2F0KCI7ICBicmVhazsKLSAgICAg
ICAgICAgICAgICBjYXNlIDI6IHByZVN0cmluZyA9ICJ2ZWMyKCI7IGJyZWFrOwotICAgICAgICAg
ICAgICAgIGNhc2UgMzogcHJlU3RyaW5nID0gInZlYzMoIjsgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgY2FzZSA0OiBwcmVTdHJpbmcgPSAidmVjNCgiOyBicmVhazsKLSAgICAgICAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9JbnQ6Ci0gICAgICAgIGNhc2UgRU9wQ29udkJv
b2xUb0ludDoKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBl
KCkuZ2V0Tm9taW5hbFNpemUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYXNl
IDE6IHByZVN0cmluZyA9ICJpbnQoIjsgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMjog
cHJlU3RyaW5nID0gIml2ZWMyKCI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMzogcHJl
U3RyaW5nID0gIml2ZWMzKCI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgNDogcHJlU3Ry
aW5nID0gIml2ZWM0KCI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNl
IEVPcFJhZGlhbnM6IHByZVN0cmluZyA9ICJyYWRpYW5zKCI7IGJyZWFrOwotICAgICAgICBjYXNl
IEVPcERlZ3JlZXM6IHByZVN0cmluZyA9ICJkZWdyZWVzKCI7IGJyZWFrOwotICAgICAgICBjYXNl
IEVPcFNpbjogcHJlU3RyaW5nID0gInNpbigiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb3M6
IHByZVN0cmluZyA9ICJjb3MoIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wVGFuOiBwcmVTdHJp
bmcgPSAidGFuKCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEFzaW46IHByZVN0cmluZyA9ICJh
c2luKCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEFjb3M6IHByZVN0cmluZyA9ICJhY29zKCI7
IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEF0YW46IHByZVN0cmluZyA9ICJhdGFuKCI7IGJyZWFr
OwotCi0gICAgICAgIGNhc2UgRU9wRXhwOiBwcmVTdHJpbmcgPSAiZXhwKCI7IGJyZWFrOwotICAg
ICAgICBjYXNlIEVPcExvZzogcHJlU3RyaW5nID0gImxvZygiOyBicmVhazsKLSAgICAgICAgY2Fz
ZSBFT3BFeHAyOiBwcmVTdHJpbmcgPSAiZXhwMigiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BM
b2cyOiBwcmVTdHJpbmcgPSAibG9nMigiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BTcXJ0OiBw
cmVTdHJpbmcgPSAic3FydCgiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BJbnZlcnNlU3FydDog
cHJlU3RyaW5nID0gImludmVyc2VzcXJ0KCI7IGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wQWJz
OiBwcmVTdHJpbmcgPSAiYWJzKCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcFNpZ246IHByZVN0
cmluZyA9ICJzaWduKCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEZsb29yOiBwcmVTdHJpbmcg
PSAiZmxvb3IoIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ2VpbDogcHJlU3RyaW5nID0gImNl
aWwoIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wRnJhY3Q6IHByZVN0cmluZyA9ICJmcmFjdCgi
OyBicmVhazsKLQotICAgICAgICBjYXNlIEVPcExlbmd0aDogcHJlU3RyaW5nID0gImxlbmd0aCgi
OyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BOb3JtYWxpemU6IHByZVN0cmluZyA9ICJub3JtYWxp
emUoIjsgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BERmR4OiBwcmVTdHJpbmcgPSAiZEZkeCgi
OyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BERmR5OiBwcmVTdHJpbmcgPSAiZEZkeSgiOyBicmVh
azsKLSAgICAgICAgY2FzZSBFT3BGd2lkdGg6IHByZVN0cmluZyA9ICJmd2lkdGgoIjsgYnJlYWs7
Ci0KLSAgICAgICAgY2FzZSBFT3BBbnk6IHByZVN0cmluZyA9ICJhbnkoIjsgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRU9wQWxsOiBwcmVTdHJpbmcgPSAiYWxsKCI7IGJyZWFrOwotCi0gICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IGJyZWFrOwotICAgIH0KLQotICAgIGlmICh2aXNpdCA9PSBQ
cmVWaXNpdCAmJiBub2RlLT5nZXRVc2VFbXVsYXRlZEZ1bmN0aW9uKCkpCi0gICAgICAgIHByZVN0
cmluZyA9IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpHZXRFbXVsYXRlZEZ1bmN0aW9uTmFtZShw
cmVTdHJpbmcpOwotICAgIHdyaXRlVHJpcGxldCh2aXNpdCwgcHJlU3RyaW5nLmNfc3RyKCksIE5V
TEwsIHBvc3RTdHJpbmcuY19zdHIoKSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBU
T3V0cHV0R0xTTEJhc2U6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0
aW9uKiBub2RlKQotewotICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNpbmsoKTsKLQotICAg
IGlmIChub2RlLT51c2VzVGVybmFyeU9wZXJhdG9yKCkpCi0gICAgewotICAgICAgICAvLyBOb3Rp
Y2UgdHdvIGJyYWNrZXRzIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZC4gVGhlIG91dGVyIG9uZXMK
LSAgICAgICAgLy8gZW5jYXBzdWxhdGUgdGhlIHdob2xlIHRlcm5hcnkgZXhwcmVzc2lvbi4gVGhp
cyBwcmVzZXJ2ZXMgdGhlCi0gICAgICAgIC8vIG9yZGVyIG9mIHByZWNlZGVuY2Ugd2hlbiB0ZXJu
YXJ5IGV4cHJlc3Npb25zIGFyZSB1c2VkIGluIGEKLSAgICAgICAgLy8gY29tcG91bmQgZXhwcmVz
c2lvbiwgaS5lLiwgYyA9IDIgKiAoYSA8IGIgPyAxIDogMikuCi0gICAgICAgIG91dCA8PCAiKCgi
OwotICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAg
IG91dCA8PCAiKSA/ICgiOwotICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+dHJhdmVyc2Uo
dGhpcyk7Ci0gICAgICAgIG91dCA8PCAiKSA6ICgiOwotICAgICAgICBub2RlLT5nZXRGYWxzZUJs
b2NrKCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBvdXQgPDwgIikpIjsKLSAgICB9Ci0gICAg
ZWxzZQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJpZiAoIjsKLSAgICAgICAgbm9kZS0+Z2V0Q29u
ZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBvdXQgPDwgIilcbiI7Ci0KLSAgICAg
ICAgaW5jcmVtZW50RGVwdGgobm9kZSk7Ci0gICAgICAgIHZpc2l0Q29kZUJsb2NrKG5vZGUtPmdl
dFRydWVCbG9jaygpKTsKLQotICAgICAgICBpZiAobm9kZS0+Z2V0RmFsc2VCbG9jaygpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgImVsc2VcbiI7Ci0gICAgICAgICAgICB2aXNpdENv
ZGVCbG9jayhub2RlLT5nZXRGYWxzZUJsb2NrKCkpOwotICAgICAgICB9Ci0gICAgICAgIGRlY3Jl
bWVudERlcHRoKCk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBUT3V0cHV0
R0xTTEJhc2U6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBu
b2RlKQotewotICAgIGJvb2wgdmlzaXRDaGlsZHJlbiA9IHRydWU7Ci0gICAgVEluZm9TaW5rQmFz
ZSYgb3V0ID0gb2JqU2luaygpOwotICAgIFRTdHJpbmcgcHJlU3RyaW5nOwotICAgIGJvb2wgZGVs
YXllZFdyaXRlID0gZmFsc2U7Ci0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQotICAgIHsKLSAg
ICAgICAgY2FzZSBFT3BTZXF1ZW5jZTogewotICAgICAgICAgICAgLy8gU2NvcGUgdGhlIHNlcXVl
bmNlcyBleGNlcHQgd2hlbiBhdCB0aGUgZ2xvYmFsIHNjb3BlLgotICAgICAgICAgICAgaWYgKGRl
cHRoID4gMCkgb3V0IDw8ICJ7XG4iOwotCi0gICAgICAgICAgICBpbmNyZW1lbnREZXB0aChub2Rl
KTsKLSAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBub2RlLT5n
ZXRTZXF1ZW5jZSgpOwotICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBzZXF1ZW5jZS5iZWdpbigpOwotICAgICAgICAgICAgICAgICBpdGVyICE9
IHNlcXVlbmNlLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
VEludGVybU5vZGUqIG5vZGUgPSAqaXRlcjsKLSAgICAgICAgICAgICAgICBBU1NFUlQobm9kZSAh
PSBOVUxMKTsKLSAgICAgICAgICAgICAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKLQotICAgICAg
ICAgICAgICAgIGlmIChpc1NpbmdsZVN0YXRlbWVudChub2RlKSkKLSAgICAgICAgICAgICAgICAg
ICAgb3V0IDw8ICI7XG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVjcmVtZW50RGVw
dGgoKTsKLQotICAgICAgICAgICAgLy8gU2NvcGUgdGhlIHNlcXVlbmNlcyBleGNlcHQgd2hlbiBh
dCB0aGUgZ2xvYmFsIHNjb3BlLgotICAgICAgICAgICAgaWYgKGRlcHRoID4gMCkgb3V0IDw8ICJ9
XG4iOwotICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBFT3BQcm90b3R5cGU6IHsKLSAgICAgICAgICAg
IC8vIEZ1bmN0aW9uIGRlY2xhcmF0aW9uLgotICAgICAgICAgICAgQVNTRVJUKHZpc2l0ID09IFBy
ZVZpc2l0KTsKLSAgICAgICAgICAgIHdyaXRlVmFyaWFibGVUeXBlKG5vZGUtPmdldFR5cGUoKSk7
Ci0gICAgICAgICAgICBvdXQgPDwgIiAiIDw8IGhhc2hOYW1lKG5vZGUtPmdldE5hbWUoKSk7Ci0K
LSAgICAgICAgICAgIG91dCA8PCAiKCI7Ci0gICAgICAgICAgICB3cml0ZUZ1bmN0aW9uUGFyYW1l
dGVycyhub2RlLT5nZXRTZXF1ZW5jZSgpKTsKLSAgICAgICAgICAgIG91dCA8PCAiKSI7Ci0KLSAg
ICAgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgRU9wRnVuY3Rpb246IHsKLSAgICAgICAgICAgIC8vIEZ1bmN0
aW9uIGRlZmluaXRpb24uCi0gICAgICAgICAgICBBU1NFUlQodmlzaXQgPT0gUHJlVmlzaXQpOwot
ICAgICAgICAgICAgd3JpdGVWYXJpYWJsZVR5cGUobm9kZS0+Z2V0VHlwZSgpKTsKLSAgICAgICAg
ICAgIG91dCA8PCAiICIgPDwgaGFzaEZ1bmN0aW9uTmFtZShub2RlLT5nZXROYW1lKCkpOwotCi0g
ICAgICAgICAgICBpbmNyZW1lbnREZXB0aChub2RlKTsKLSAgICAgICAgICAgIC8vIEZ1bmN0aW9u
IGRlZmluaXRpb24gbm9kZSBjb250YWlucyBvbmUgb3IgdHdvIGNoaWxkcmVuIG5vZGVzCi0gICAg
ICAgICAgICAvLyByZXByZXNlbnRpbmcgZnVuY3Rpb24gcGFyYW1ldGVycyBhbmQgZnVuY3Rpb24g
Ym9keS4gVGhlIGxhdHRlcgotICAgICAgICAgICAgLy8gaXMgbm90IHByZXNlbnQgaW4gY2FzZSBv
ZiBlbXB0eSBmdW5jdGlvbiBib2RpZXMuCi0gICAgICAgICAgICBjb25zdCBUSW50ZXJtU2VxdWVu
Y2UmIHNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKLSAgICAgICAgICAgIEFTU0VSVCgo
c2VxdWVuY2Uuc2l6ZSgpID09IDEpIHx8IChzZXF1ZW5jZS5zaXplKCkgPT0gMikpOwotICAgICAg
ICAgICAgVEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBzZXFJdGVyID0gc2VxdWVuY2Uu
YmVnaW4oKTsKLQotICAgICAgICAgICAgLy8gVHJhdmVyc2UgZnVuY3Rpb24gcGFyYW1ldGVycy4K
LSAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHBhcmFtcyA9ICgqc2VxSXRlciktPmdldEFz
QWdncmVnYXRlKCk7Ci0gICAgICAgICAgICBBU1NFUlQocGFyYW1zICE9IE5VTEwpOwotICAgICAg
ICAgICAgQVNTRVJUKHBhcmFtcy0+Z2V0T3AoKSA9PSBFT3BQYXJhbWV0ZXJzKTsKLSAgICAgICAg
ICAgIHBhcmFtcy0+dHJhdmVyc2UodGhpcyk7Ci0KLSAgICAgICAgICAgIC8vIFRyYXZlcnNlIGZ1
bmN0aW9uIGJvZHkuCi0gICAgICAgICAgICBUSW50ZXJtQWdncmVnYXRlKiBib2R5ID0gKytzZXFJ
dGVyICE9IHNlcXVlbmNlLmVuZCgpID8KLSAgICAgICAgICAgICAgICAoKnNlcUl0ZXIpLT5nZXRB
c0FnZ3JlZ2F0ZSgpIDogTlVMTDsKLSAgICAgICAgICAgIHZpc2l0Q29kZUJsb2NrKGJvZHkpOwot
ICAgICAgICAgICAgZGVjcmVtZW50RGVwdGgoKTsKLSAKLSAgICAgICAgICAgIC8vIEZ1bGx5IHBy
b2Nlc3NlZDsgbm8gbmVlZCB0byB2aXNpdCBjaGlsZHJlbi4KLSAgICAgICAgICAgIHZpc2l0Q2hp
bGRyZW4gPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgRU9wRnVuY3Rpb25DYWxsOgotICAgICAgICAgICAgLy8gRnVuY3Rpb24gY2FsbC4KLSAgICAg
ICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBvdXQgPDwgaGFzaEZ1bmN0aW9uTmFtZShub2RlLT5nZXROYW1lKCkpIDw8ICIoIjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIp
IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFBh
cmFtZXRlcnM6IHsKLSAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHBhcmFtZXRlcnMuCi0gICAgICAg
ICAgICBBU1NFUlQodmlzaXQgPT0gUHJlVmlzaXQpOwotICAgICAgICAgICAgb3V0IDw8ICIoIjsK
LSAgICAgICAgICAgIHdyaXRlRnVuY3Rpb25QYXJhbWV0ZXJzKG5vZGUtPmdldFNlcXVlbmNlKCkp
OwotICAgICAgICAgICAgb3V0IDw8ICIpIjsKLSAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBm
YWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRU9wRGVj
bGFyYXRpb246IHsKLSAgICAgICAgICAgIC8vIFZhcmlhYmxlIGRlY2xhcmF0aW9uLgotICAgICAg
ICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgp
OwotICAgICAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1UeXBlZCogdmFyaWFibGUgPSBzZXF1ZW5j
ZS5mcm9udCgpLT5nZXRBc1R5cGVkKCk7Ci0gICAgICAgICAgICAgICAgd3JpdGVWYXJpYWJsZVR5
cGUodmFyaWFibGUtPmdldFR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIgIjsKLSAg
ICAgICAgICAgICAgICBtRGVjbGFyaW5nVmFyaWFibGVzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7Ci0gICAgICAgICAgICAgICAgbURlY2xhcmluZ1Zh
cmlhYmxlcyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgbURlY2xhcmluZ1ZhcmlhYmxlcyA9IGZhbHNlOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RGbG9hdDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZmxvYXQoIiwgTlVMTCwgIiki
KTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMjogd3JpdGVUcmlwbGV0KHZp
c2l0LCAidmVjMigiLCAiLCAiLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RWZWMzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJ2ZWMzKCIsICIsICIsICIpIik7IGJyZWFrOwot
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgInZlYzQo
IiwgIiwgIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDogd3Jp
dGVUcmlwbGV0KHZpc2l0LCAiYm9vbCgiLCBOVUxMLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RCVmVjMjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYnZlYzIoIiwgIiwgIiwg
IikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzM6IHdyaXRlVHJpcGxl
dCh2aXNpdCwgImJ2ZWMzKCIsICIsICIsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdEJWZWM0OiB3cml0ZVRyaXBsZXQodmlzaXQsICJidmVjNCgiLCAiLCAiLCAiKSIpOyBi
cmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6IHdyaXRlVHJpcGxldCh2aXNpdCwg
ImludCgiLCBOVUxMLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVj
Mjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiaXZlYzIoIiwgIiwgIiwgIikiKTsgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzM6IHdyaXRlVHJpcGxldCh2aXNpdCwgIml2ZWMzKCIs
ICIsICIsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWM0OiB3cml0
ZVRyaXBsZXQodmlzaXQsICJpdmVjNCgiLCAiLCAiLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RNYXQyOiB3cml0ZVRyaXBsZXQodmlzaXQsICJtYXQyKCIsICIsICIsICIp
Iik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6IHdyaXRlVHJpcGxldCh2
aXNpdCwgIm1hdDMoIiwgIiwgIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0TWF0NDogd3JpdGVUcmlwbGV0KHZpc2l0LCAibWF0NCgiLCAiLCAiLCAiKSIpOyBicmVhazsK
LSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RTdHJ1Y3Q6Ci0gICAgICAgICAgICBpZiAodmlzaXQg
PT0gUHJlVmlzaXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVFR5cGUm
IHR5cGUgPSBub2RlLT5nZXRUeXBlKCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUuZ2V0
QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgaGFzaE5h
bWUodHlwZS5nZXRTdHJ1Y3QoKS0+bmFtZSgpKSA8PCAiKCI7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dCA8PCAiLCAiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiKSI7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEVPcExlc3NUaGFuOiBwcmVTdHJp
bmcgPSAibGVzc1RoYW4oIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRU9wR3JlYXRlclRoYW46IHByZVN0cmluZyA9ICJncmVhdGVyVGhhbigiOyBkZWxheWVkV3Jp
dGUgPSB0cnVlOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOiBwcmVTdHJp
bmcgPSAibGVzc1RoYW5FcXVhbCgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKLSAgICAg
ICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiBwcmVTdHJpbmcgPSAiZ3JlYXRlclRoYW5FcXVh
bCgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BWZWN0b3JF
cXVhbDogcHJlU3RyaW5nID0gImVxdWFsKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOwot
ICAgICAgICBjYXNlIEVPcFZlY3Rvck5vdEVxdWFsOiBwcmVTdHJpbmcgPSAibm90RXF1YWwoIjsg
ZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29tbWE6IHdyaXRl
VHJpcGxldCh2aXNpdCwgTlVMTCwgIiwgIiwgTlVMTCk7IGJyZWFrOwotCi0gICAgICAgIGNhc2Ug
RU9wTW9kOiBwcmVTdHJpbmcgPSAibW9kKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOwot
ICAgICAgICBjYXNlIEVPcFBvdzogcHJlU3RyaW5nID0gInBvdygiOyBkZWxheWVkV3JpdGUgPSB0
cnVlOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BBdGFuOiBwcmVTdHJpbmcgPSAiYXRhbigiOyBk
ZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BNaW46IHByZVN0cmlu
ZyA9ICJtaW4oIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9w
TWF4OiBwcmVTdHJpbmcgPSAibWF4KCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOwotICAg
ICAgICBjYXNlIEVPcENsYW1wOiBwcmVTdHJpbmcgPSAiY2xhbXAoIjsgZGVsYXllZFdyaXRlID0g
dHJ1ZTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTWl4OiBwcmVTdHJpbmcgPSAibWl4KCI7IGRl
bGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcFN0ZXA6IHByZVN0cmlu
ZyA9ICJzdGVwKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOwotICAgICAgICBjYXNlIEVP
cFNtb290aFN0ZXA6IHByZVN0cmluZyA9ICJzbW9vdGhzdGVwKCI7IGRlbGF5ZWRXcml0ZSA9IHRy
dWU7IGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wRGlzdGFuY2U6IHByZVN0cmluZyA9ICJkaXN0
YW5jZSgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BEb3Q6
IHByZVN0cmluZyA9ICJkb3QoIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRU9wQ3Jvc3M6IHByZVN0cmluZyA9ICJjcm9zcygiOyBkZWxheWVkV3JpdGUgPSB0cnVl
OyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BGYWNlRm9yd2FyZDogcHJlU3RyaW5nID0gImZhY2Vm
b3J3YXJkKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcFJl
ZmxlY3Q6IHByZVN0cmluZyA9ICJyZWZsZWN0KCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFr
OwotICAgICAgICBjYXNlIEVPcFJlZnJhY3Q6IHByZVN0cmluZyA9ICJyZWZyYWN0KCI7IGRlbGF5
ZWRXcml0ZSA9IHRydWU7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcE11bDogcHJlU3RyaW5nID0g
Im1hdHJpeENvbXBNdWx0KCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOwotCi0gICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IGJyZWFrOwotICAgIH0KLSAgICBpZiAoZGVsYXllZFdy
aXRlICYmIHZpc2l0ID09IFByZVZpc2l0ICYmIG5vZGUtPmdldFVzZUVtdWxhdGVkRnVuY3Rpb24o
KSkKLSAgICAgICAgcHJlU3RyaW5nID0gQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OkdldEVtdWxh
dGVkRnVuY3Rpb25OYW1lKHByZVN0cmluZyk7Ci0gICAgaWYgKGRlbGF5ZWRXcml0ZSkKLSAgICAg
ICAgd3JpdGVUcmlwbGV0KHZpc2l0LCBwcmVTdHJpbmcuY19zdHIoKSwgIiwgIiwgIikiKTsKLSAg
ICByZXR1cm4gdmlzaXRDaGlsZHJlbjsKLX0KLQotYm9vbCBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0
TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqIG5vZGUpCi17Ci0gICAgVEluZm9TaW5rQmFz
ZSYgb3V0ID0gb2JqU2luaygpOwotCi0gICAgaW5jcmVtZW50RGVwdGgobm9kZSk7Ci0gICAgLy8g
TG9vcCBoZWFkZXIuCi0gICAgVExvb3BUeXBlIGxvb3BUeXBlID0gbm9kZS0+Z2V0VHlwZSgpOwot
ICAgIGlmIChsb29wVHlwZSA9PSBFTG9vcEZvcikgIC8vIGZvciBsb29wCi0gICAgewotICAgICAg
ICBpZiAoIW5vZGUtPmdldFVucm9sbEZsYWcoKSkgewotICAgICAgICAgICAgb3V0IDw8ICJmb3Ig
KCI7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Z2V0SW5pdCgpKQotICAgICAgICAgICAgICAgIG5v
ZGUtPmdldEluaXQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICBvdXQgPDwgIjsgIjsK
LQotICAgICAgICAgICAgaWYgKG5vZGUtPmdldENvbmRpdGlvbigpKQotICAgICAgICAgICAgICAg
IG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgIG91dCA8
PCAiOyAiOwotCi0gICAgICAgICAgICBpZiAobm9kZS0+Z2V0RXhwcmVzc2lvbigpKQotICAgICAg
ICAgICAgICAgIG5vZGUtPmdldEV4cHJlc3Npb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAg
ICAgICBvdXQgPDwgIilcbiI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAobG9vcFR5
cGUgPT0gRUxvb3BXaGlsZSkgIC8vIHdoaWxlIGxvb3AKLSAgICB7Ci0gICAgICAgIG91dCA8PCAi
d2hpbGUgKCI7Ci0gICAgICAgIEFTU0VSVChub2RlLT5nZXRDb25kaXRpb24oKSAhPSBOVUxMKTsK
LSAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBv
dXQgPDwgIilcbiI7Ci0gICAgfQotICAgIGVsc2UgIC8vIGRvLXdoaWxlIGxvb3AKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChsb29wVHlwZSA9PSBFTG9vcERvV2hpbGUpOwotICAgICAgICBvdXQgPDwg
ImRvXG4iOwotICAgIH0KLQotICAgIC8vIExvb3AgYm9keS4KLSAgICBpZiAobm9kZS0+Z2V0VW5y
b2xsRmxhZygpKQotICAgIHsKLSAgICAgICAgVExvb3BJbmRleEluZm8gaW5kZXhJbmZvOwotICAg
ICAgICBtTG9vcFVucm9sbC5GaWxsTG9vcEluZGV4SW5mbyhub2RlLCBpbmRleEluZm8pOwotICAg
ICAgICBtTG9vcFVucm9sbC5QdXNoKGluZGV4SW5mbyk7Ci0gICAgICAgIHdoaWxlIChtTG9vcFVu
cm9sbC5TYXRpc2ZpZXNMb29wQ29uZGl0aW9uKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZp
c2l0Q29kZUJsb2NrKG5vZGUtPmdldEJvZHkoKSk7Ci0gICAgICAgICAgICBtTG9vcFVucm9sbC5T
dGVwKCk7Ci0gICAgICAgIH0KLSAgICAgICAgbUxvb3BVbnJvbGwuUG9wKCk7Ci0gICAgfQotICAg
IGVsc2UKLSAgICB7Ci0gICAgICAgIHZpc2l0Q29kZUJsb2NrKG5vZGUtPmdldEJvZHkoKSk7Ci0g
ICAgfQotCi0gICAgLy8gTG9vcCBmb290ZXIuCi0gICAgaWYgKGxvb3BUeXBlID09IEVMb29wRG9X
aGlsZSkgIC8vIGRvLXdoaWxlIGxvb3AKLSAgICB7Ci0gICAgICAgIG91dCA8PCAid2hpbGUgKCI7
Ci0gICAgICAgIEFTU0VSVChub2RlLT5nZXRDb25kaXRpb24oKSAhPSBOVUxMKTsKLSAgICAgICAg
bm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBvdXQgPDwgIik7
XG4iOwotICAgIH0KLSAgICBkZWNyZW1lbnREZXB0aCgpOwotCi0gICAgLy8gTm8gbmVlZCB0byB2
aXNpdCBjaGlsZHJlbi4gVGhleSBoYXZlIGJlZW4gYWxyZWFkeSBwcm9jZXNzZWQgaW4KLSAgICAv
LyB0aGlzIGZ1bmN0aW9uLgotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBUT3V0cHV0R0xT
TEJhc2U6OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKiBub2RlKQotewot
ICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkpCi0gICAgewotICAgICAgICBjYXNlIEVPcEtp
bGw6IHdyaXRlVHJpcGxldCh2aXNpdCwgImRpc2NhcmQiLCBOVUxMLCBOVUxMKTsgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRU9wQnJlYWs6IHdyaXRlVHJpcGxldCh2aXNpdCwgImJyZWFrIiwgTlVMTCwg
TlVMTCk7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnRpbnVlOiB3cml0ZVRyaXBsZXQodmlz
aXQsICJjb250aW51ZSIsIE5VTEwsIE5VTEwpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BSZXR1
cm46IHdyaXRlVHJpcGxldCh2aXNpdCwgInJldHVybiAiLCBOVUxMLCBOVUxMKTsgYnJlYWs7Ci0g
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IGJyZWFrOwotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRDb2RlQmxvY2soVEludGVy
bU5vZGUqIG5vZGUpIHsKLSAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBvYmpTaW5rKCk7Ci0gICAg
aWYgKG5vZGUgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOwot
ICAgICAgICAvLyBTaW5nbGUgc3RhdGVtZW50cyBub3QgcGFydCBvZiBhIHNlcXVlbmNlIG5lZWQg
dG8gYmUgdGVybWluYXRlZAotICAgICAgICAvLyB3aXRoIHNlbWktY29sb24uCi0gICAgICAgIGlm
IChpc1NpbmdsZVN0YXRlbWVudChub2RlKSkKLSAgICAgICAgICAgIG91dCA8PCAiO1xuIjsKLSAg
ICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJ7XG59XG4iOyAgLy8gRW1wdHkg
Y29kZSBibG9jay4KLSAgICB9Ci19Ci0KLVRTdHJpbmcgVE91dHB1dEdMU0xCYXNlOjpnZXRUeXBl
TmFtZShjb25zdCBUVHlwZSYgdHlwZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlIG91dDsKLSAgICBp
ZiAodHlwZS5pc01hdHJpeCgpKQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJtYXQiOwotICAgICAg
ICBvdXQgPDwgdHlwZS5nZXROb21pbmFsU2l6ZSgpOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBl
LmlzVmVjdG9yKCkpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0QmFzaWNUeXBlKCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IG91dCA8PCAidmVjIjsgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIEVidEludDogb3V0IDw8ICJpdmVjIjsgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIEVidEJvb2w6IG91dCA8PCAiYnZlYyI7IGJyZWFrOwotICAgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgb3V0IDw8
IHR5cGUuZ2V0Tm9taW5hbFNpemUoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAg
aWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQotICAgICAgICAgICAgb3V0IDw8
IGhhc2hOYW1lKHR5cGUuZ2V0U3RydWN0KCktPm5hbWUoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG91dCA8PCB0eXBlLmdldEJhc2ljU3RyaW5nKCk7Ci0gICAgfQotICAgIHJldHVybiBU
U3RyaW5nKG91dC5jX3N0cigpKTsKLX0KLQotVFN0cmluZyBUT3V0cHV0R0xTTEJhc2U6Omhhc2hO
YW1lKGNvbnN0IFRTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKG1IYXNoRnVuY3Rpb24gPT0gTlVM
TCB8fCBuYW1lLmVtcHR5KCkpCi0gICAgICAgIHJldHVybiBuYW1lOwotICAgIE5hbWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbU5hbWVNYXAuZmluZChuYW1lLmNfc3RyKCkpOwotICAgIGlmIChp
dCAhPSBtTmFtZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQuY19zdHIoKTsK
LSAgICBUU3RyaW5nIGhhc2hlZE5hbWUgPSBUSW50ZXJtVHJhdmVyc2VyOjpoYXNoKG5hbWUsIG1I
YXNoRnVuY3Rpb24pOwotICAgIG1OYW1lTWFwW25hbWUuY19zdHIoKV0gPSBoYXNoZWROYW1lLmNf
c3RyKCk7Ci0gICAgcmV0dXJuIGhhc2hlZE5hbWU7Ci19Ci0KLVRTdHJpbmcgVE91dHB1dEdMU0xC
YXNlOjpoYXNoVmFyaWFibGVOYW1lKGNvbnN0IFRTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKG1T
eW1ib2xUYWJsZS5maW5kQnVpbHRJbihuYW1lKSAhPSBOVUxMKQotICAgICAgICByZXR1cm4gbmFt
ZTsKLSAgICByZXR1cm4gaGFzaE5hbWUobmFtZSk7Ci19Ci0KLVRTdHJpbmcgVE91dHB1dEdMU0xC
YXNlOjpoYXNoRnVuY3Rpb25OYW1lKGNvbnN0IFRTdHJpbmcmIG1hbmdsZWRfbmFtZSkKLXsKLSAg
ICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShtYW5nbGVkX25hbWUpOwot
ICAgIGlmIChtU3ltYm9sVGFibGUuZmluZEJ1aWx0SW4obWFuZ2xlZF9uYW1lKSAhPSBOVUxMIHx8
IG5hbWUgPT0gIm1haW4iKQotICAgICAgICByZXR1cm4gbmFtZTsKLSAgICByZXR1cm4gaGFzaE5h
bWUobmFtZSk7Ci19Ci0KLWJvb2wgVE91dHB1dEdMU0xCYXNlOjpzdHJ1Y3REZWNsYXJlZChjb25z
dCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EZWNsYXJlZFN0
cnVjdHMuZmluZChzdHJ1Y3R1cmUtPm5hbWUoKSkgIT0gbURlY2xhcmVkU3RydWN0cy5lbmQoKTsK
LX0KLQotdm9pZCBUT3V0cHV0R0xTTEJhc2U6OmRlY2xhcmVTdHJ1Y3QoY29uc3QgVFN0cnVjdHVy
ZSogc3RydWN0dXJlKQotewotICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNpbmsoKTsKLQot
ICAgIG91dCA8PCAic3RydWN0ICIgPDwgaGFzaE5hbWUoc3RydWN0dXJlLT5uYW1lKCkpIDw8ICJ7
XG4iOwotICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9IHN0cnVjdHVyZS0+ZmllbGRzKCk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpCi0gICAgewot
ICAgICAgICBjb25zdCBURmllbGQqIGZpZWxkID0gZmllbGRzW2ldOwotICAgICAgICBpZiAod3Jp
dGVWYXJpYWJsZVByZWNpc2lvbihmaWVsZC0+dHlwZSgpLT5nZXRQcmVjaXNpb24oKSkpCi0gICAg
ICAgICAgICBvdXQgPDwgIiAiOwotICAgICAgICBvdXQgPDwgZ2V0VHlwZU5hbWUoKmZpZWxkLT50
eXBlKCkpIDw8ICIgIiA8PCBoYXNoTmFtZShmaWVsZC0+bmFtZSgpKTsKLSAgICAgICAgaWYgKGZp
ZWxkLT50eXBlKCktPmlzQXJyYXkoKSkKLSAgICAgICAgICAgIG91dCA8PCBhcnJheUJyYWNrZXRz
KCpmaWVsZC0+dHlwZSgpKTsKLSAgICAgICAgb3V0IDw8ICI7XG4iOwotICAgIH0KLSAgICBvdXQg
PDwgIn0iOwotCi0gICAgbURlY2xhcmVkU3RydWN0cy5pbnNlcnQoc3RydWN0dXJlLT5uYW1lKCkp
OwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091
dHB1dEdMU0xCYXNlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0
cHV0R0xTTEJhc2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk4NjhjMDljY2Y3
NTQ5MDBjOTg0MTc1MDZjOTA3YmJhYjIxN2NiZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
T3V0cHV0R0xTTEJhc2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ1JPU1NDT01QSUxFUkdMU0xfT1VUUFVUR0xTTEJBU0VfSF8K
LSNkZWZpbmUgQ1JPU1NDT01QSUxFUkdMU0xfT1VUUFVUR0xTTEJBU0VfSF8KLQotI2luY2x1ZGUg
PHNldD4KLQotI2luY2x1ZGUgImNvbXBpbGVyL0Zvckxvb3BVbnJvbGwuaCIKLSNpbmNsdWRlICJj
b21waWxlci9pbnRlcm1lZGlhdGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9QYXJzZUNvbnRleHQu
aCIKLQotY2xhc3MgVE91dHB1dEdMU0xCYXNlIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKLXsK
LXB1YmxpYzoKLSAgICBUT3V0cHV0R0xTTEJhc2UoVEluZm9TaW5rQmFzZSYgb2JqU2luaywKLSAg
ICAgICAgICAgICAgICAgICAgU2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0
cmF0ZWd5LAotICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlv
biwKLSAgICAgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAgICAgICAgICAg
ICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSk7Ci0KLXByb3RlY3RlZDoKLSAgICBUSW5m
b1NpbmtCYXNlJiBvYmpTaW5rKCkgeyByZXR1cm4gbU9ialNpbms7IH0KLSAgICB2b2lkIHdyaXRl
VHJpcGxldChWaXNpdCB2aXNpdCwgY29uc3QgY2hhciogcHJlU3RyLCBjb25zdCBjaGFyKiBpblN0
ciwgY29uc3QgY2hhciogcG9zdFN0cik7Ci0gICAgdm9pZCB3cml0ZVZhcmlhYmxlVHlwZShjb25z
dCBUVHlwZSYgdHlwZSk7Ci0gICAgdmlydHVhbCBib29sIHdyaXRlVmFyaWFibGVQcmVjaXNpb24o
VFByZWNpc2lvbiBwcmVjaXNpb24pID0gMDsKLSAgICB2b2lkIHdyaXRlRnVuY3Rpb25QYXJhbWV0
ZXJzKGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgYXJncyk7Ci0gICAgY29uc3QgQ29uc3RhbnRVbmlv
biogd3JpdGVDb25zdGFudFVuaW9uKGNvbnN0IFRUeXBlJiB0eXBlLCBjb25zdCBDb25zdGFudFVu
aW9uKiBwQ29uc3RVbmlvbik7Ci0gICAgVFN0cmluZyBnZXRUeXBlTmFtZShjb25zdCBUVHlwZSYg
dHlwZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9k
ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRV
bmlvbiogbm9kZSk7Ci0gICAgdmlydHVhbCBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBU
SW50ZXJtQmluYXJ5KiBub2RlKTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2
aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRTZWxlY3Rp
b24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUpOwotICAgIHZpcnR1YWwgYm9v
bCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSk7Ci0g
ICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqIG5vZGUp
OwotICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5j
aCogbm9kZSk7Ci0KLSAgICB2b2lkIHZpc2l0Q29kZUJsb2NrKFRJbnRlcm1Ob2RlKiBub2RlKTsK
LQotCi0gICAgLy8gUmV0dXJuIHRoZSBvcmlnaW5hbCBuYW1lIGlmIGhhc2ggZnVuY3Rpb24gcG9p
bnRlciBpcyBOVUxMOwotICAgIC8vIG90aGVyd2lzZSByZXR1cm4gdGhlIGhhc2hlZCBuYW1lLgot
ICAgIFRTdHJpbmcgaGFzaE5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSk7Ci0gICAgLy8gU2FtZSBh
cyBoYXNoTmFtZSgpLCBidXQgd2l0aG91dCBoYXNoaW5nIGJ1aWx0LWluIHZhcmlhYmxlcy4KLSAg
ICBUU3RyaW5nIGhhc2hWYXJpYWJsZU5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSk7Ci0gICAgLy8g
U2FtZSBhcyBoYXNoTmFtZSgpLCBidXQgd2l0aG91dCBoYXNoaW5nIGJ1aWx0LWluIGZ1bmN0aW9u
cy4KLSAgICBUU3RyaW5nIGhhc2hGdW5jdGlvbk5hbWUoY29uc3QgVFN0cmluZyYgbWFuZ2xlZF9u
YW1lKTsKLQotcHJpdmF0ZToKLSAgICBib29sIHN0cnVjdERlY2xhcmVkKGNvbnN0IFRTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkgY29uc3Q7Ci0gICAgdm9pZCBkZWNsYXJlU3RydWN0KGNvbnN0IFRTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSk7Ci0KLSAgICBUSW5mb1NpbmtCYXNlJiBtT2JqU2luazsKLSAgICBi
b29sIG1EZWNsYXJpbmdWYXJpYWJsZXM7Ci0KLSAgICAvLyBTdHJ1Y3RzIGFyZSBkZWNsYXJlZCBh
cyB0aGUgdHJlZSBpcyB0cmF2ZXJzZWQuIFRoaXMgc2V0IGNvbnRhaW5zIGFsbAotICAgIC8vIHRo
ZSBzdHJ1Y3RzIGFscmVhZHkgZGVjbGFyZWQuIEl0IGlzIG1haW50YWluZWQgc28gdGhhdCBhIHN0
cnVjdCBpcwotICAgIC8vIGRlY2xhcmVkIG9ubHkgb25jZS4KLSAgICB0eXBlZGVmIHN0ZDo6c2V0
PFRTdHJpbmc+IERlY2xhcmVkU3RydWN0czsKLSAgICBEZWNsYXJlZFN0cnVjdHMgbURlY2xhcmVk
U3RydWN0czsKLQotICAgIEZvckxvb3BVbnJvbGwgbUxvb3BVbnJvbGw7Ci0KLSAgICBTaEFycmF5
SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IG1DbGFtcGluZ1N0cmF0ZWd5OwotCi0gICAgLy8gbmFtZSBo
YXNoaW5nLgotICAgIFNoSGFzaEZ1bmN0aW9uNjQgbUhhc2hGdW5jdGlvbjsKLQotICAgIE5hbWVN
YXAmIG1OYW1lTWFwOwotCi0gICAgVFN5bWJvbFRhYmxlJiBtU3ltYm9sVGFibGU7Ci19OwotCi0j
ZW5kaWYgIC8vIENST1NTQ09NUElMRVJHTFNMX09VVFBVVEdMU0xCQVNFX0hfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MTVmMjI5Yzk4MDRiMjBhYmY4MGY3NmZkMjc1MmQz
MTYwOTVkYTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMzEzMyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVk
ZSAiY29tcGlsZXIvT3V0cHV0SExTTC5oIgotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMu
aCIKLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL0RldGVj
dERpc2NvbnRpbnVpdHkuaCIKLSNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgotI2luY2x1
ZGUgImNvbXBpbGVyL1NlYXJjaFN5bWJvbC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1VuZm9sZFNo
b3J0Q2lyY3VpdC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL05vZGVTZWFyY2guaCIKLQotI2luY2x1
ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxjZmxvYXQ+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQot
bmFtZXNwYWNlIHNoCi17Ci0vLyBJbnRlZ2VyIHRvIFRTdHJpbmcgY29udmVyc2lvbgotVFN0cmlu
ZyBzdHIoaW50IGkpCi17Ci0gICAgY2hhciBidWZmZXJbMjBdOwotICAgIHNucHJpbnRmKGJ1ZmZl
ciwgc2l6ZW9mKGJ1ZmZlciksICIlZCIsIGkpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLU91
dHB1dEhMU0w6Ok91dHB1dEhMU0woVFBhcnNlQ29udGV4dCAmY29udGV4dCwgY29uc3QgU2hCdWls
dEluUmVzb3VyY2VzJiByZXNvdXJjZXMsIFNoU2hhZGVyT3V0cHV0IG91dHB1dFR5cGUpCi0gICAg
OiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIHRydWUsIHRydWUpLCBtQ29udGV4dChjb250ZXh0KSwg
bU91dHB1dFR5cGUob3V0cHV0VHlwZSkKLXsKLSAgICBtVW5mb2xkU2hvcnRDaXJjdWl0ID0gbmV3
IFVuZm9sZFNob3J0Q2lyY3VpdChjb250ZXh0LCB0aGlzKTsKLSAgICBtSW5zaWRlRnVuY3Rpb24g
PSBmYWxzZTsKLQotICAgIG1Vc2VzVGV4dHVyZTJEID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJl
MkRfYmlhcyA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZTJEUHJvaiA9IGZhbHNlOwotICAgIG1V
c2VzVGV4dHVyZTJEUHJval9iaWFzID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9k
ID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRMb2QgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1
cmVDdWJlID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlQ3ViZV9iaWFzID0gZmFsc2U7Ci0gICAg
bVVzZXNUZXh0dXJlQ3ViZUxvZCA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZTJETG9kMCA9IGZh
bHNlOwotICAgIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0
dXJlMkRQcm9qTG9kMCA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDBfYmlhcyA9
IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QwID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0
dXJlQ3ViZUxvZDBfYmlhcyA9IGZhbHNlOwotICAgIG1Vc2VzRnJhZ0NvbG9yID0gZmFsc2U7Ci0g
ICAgbVVzZXNGcmFnRGF0YSA9IGZhbHNlOwotICAgIG1Vc2VzRGVwdGhSYW5nZSA9IGZhbHNlOwot
ICAgIG1Vc2VzRnJhZ0Nvb3JkID0gZmFsc2U7Ci0gICAgbVVzZXNQb2ludENvb3JkID0gZmFsc2U7
Ci0gICAgbVVzZXNGcm9udEZhY2luZyA9IGZhbHNlOwotICAgIG1Vc2VzUG9pbnRTaXplID0gZmFs
c2U7Ci0gICAgbVVzZXNGcmFnRGVwdGggPSBmYWxzZTsKLSAgICBtVXNlc1hvciA9IGZhbHNlOwot
ICAgIG1Vc2VzTW9kMSA9IGZhbHNlOwotICAgIG1Vc2VzTW9kMnYgPSBmYWxzZTsKLSAgICBtVXNl
c01vZDJmID0gZmFsc2U7Ci0gICAgbVVzZXNNb2QzdiA9IGZhbHNlOwotICAgIG1Vc2VzTW9kM2Yg
PSBmYWxzZTsKLSAgICBtVXNlc01vZDR2ID0gZmFsc2U7Ci0gICAgbVVzZXNNb2Q0ZiA9IGZhbHNl
OwotICAgIG1Vc2VzRmFjZWZvcndhcmQxID0gZmFsc2U7Ci0gICAgbVVzZXNGYWNlZm9yd2FyZDIg
PSBmYWxzZTsKLSAgICBtVXNlc0ZhY2Vmb3J3YXJkMyA9IGZhbHNlOwotICAgIG1Vc2VzRmFjZWZv
cndhcmQ0ID0gZmFsc2U7Ci0gICAgbVVzZXNBdGFuMl8xID0gZmFsc2U7Ci0gICAgbVVzZXNBdGFu
Ml8yID0gZmFsc2U7Ci0gICAgbVVzZXNBdGFuMl8zID0gZmFsc2U7Ci0gICAgbVVzZXNBdGFuMl80
ID0gZmFsc2U7Ci0gICAgbVVzZXNEaXNjYXJkUmV3cml0aW5nID0gZmFsc2U7Ci0KLSAgICBtTnVt
UmVuZGVyVGFyZ2V0cyA9IHJlc291cmNlcy5FWFRfZHJhd19idWZmZXJzID8gcmVzb3VyY2VzLk1h
eERyYXdCdWZmZXJzIDogMTsKLQotICAgIG1TY29wZURlcHRoID0gMDsKLQotICAgIG1VbmlxdWVJ
bmRleCA9IDA7Ci0KLSAgICBtQ29udGFpbnNMb29wRGlzY29udGludWl0eSA9IGZhbHNlOwotICAg
IG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsKLSAgICBtSW5zaWRlRGlzY29udGludW91c0xv
b3AgPSBmYWxzZTsKLQotICAgIG1FeGNlc3NpdmVMb29wSW5kZXggPSBOVUxMOwotCi0gICAgaWYg
KG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICB7Ci0gICAgICAgIGlmIChtQ29u
dGV4dC5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikKLSAgICAgICAgewotICAgICAg
ICAgICAgbVVuaWZvcm1SZWdpc3RlciA9IDM7ICAgLy8gUmVzZXJ2ZSByZWdpc3RlcnMgZm9yIGR4
X0RlcHRoUmFuZ2UsIGR4X1ZpZXdDb29yZHMgYW5kIGR4X0RlcHRoRnJvbnQKLSAgICAgICAgfQot
ICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1Vbmlmb3JtUmVnaXN0ZXIgPSAy
OyAgIC8vIFJlc2VydmUgcmVnaXN0ZXJzIGZvciBkeF9EZXB0aFJhbmdlIGFuZCBkeF9WaWV3QWRq
dXN0Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgbVVuaWZvcm1S
ZWdpc3RlciA9IDA7Ci0gICAgfQotCi0gICAgbVNhbXBsZXJSZWdpc3RlciA9IDA7Ci19Ci0KLU91
dHB1dEhMU0w6On5PdXRwdXRITFNMKCkKLXsKLSAgICBkZWxldGUgbVVuZm9sZFNob3J0Q2lyY3Vp
dDsKLX0KLQotdm9pZCBPdXRwdXRITFNMOjpvdXRwdXQoKQotewotICAgIG1Db250YWluc0xvb3BE
aXNjb250aW51aXR5ID0gbUNvbnRleHQuc2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIg
JiYgY29udGFpbnNMb29wRGlzY29udGludWl0eShtQ29udGV4dC50cmVlUm9vdCk7Ci0KLSAgICBt
Q29udGV4dC50cmVlUm9vdC0+dHJhdmVyc2UodGhpcyk7ICAgLy8gT3V0cHV0IHRoZSBib2R5IGZp
cnN0IHRvIGRldGVybWluZSB3aGF0IGhhcyB0byBnbyBpbiB0aGUgaGVhZGVyCi0gICAgaGVhZGVy
KCk7Ci0KLSAgICBtQ29udGV4dC5pbmZvU2luaygpLm9iaiA8PCBtSGVhZGVyLmNfc3RyKCk7Ci0g
ICAgbUNvbnRleHQuaW5mb1NpbmsoKS5vYmogPDwgbUJvZHkuY19zdHIoKTsKLX0KLQotVEluZm9T
aW5rQmFzZSAmT3V0cHV0SExTTDo6Z2V0Qm9keVN0cmVhbSgpCi17Ci0gICAgcmV0dXJuIG1Cb2R5
OwotfQotCi1jb25zdCBBY3RpdmVVbmlmb3JtcyAmT3V0cHV0SExTTDo6Z2V0VW5pZm9ybXMoKQot
ewotICAgIHJldHVybiBtQWN0aXZlVW5pZm9ybXM7Ci19Ci0KLWludCBPdXRwdXRITFNMOjp2ZWN0
b3JTaXplKGNvbnN0IFRUeXBlICZ0eXBlKSBjb25zdAotewotICAgIGludCBlbGVtZW50U2l6ZSA9
IHR5cGUuaXNNYXRyaXgoKSA/IHR5cGUuZ2V0Tm9taW5hbFNpemUoKSA6IDE7Ci0gICAgaW50IGFy
cmF5U2l6ZSA9IHR5cGUuaXNBcnJheSgpID8gdHlwZS5nZXRBcnJheVNpemUoKSA6IDE7Ci0KLSAg
ICByZXR1cm4gZWxlbWVudFNpemUgKiBhcnJheVNpemU7Ci19Ci0KLXZvaWQgT3V0cHV0SExTTDo6
aGVhZGVyKCkKLXsKLSAgICBTaFNoYWRlclR5cGUgc2hhZGVyVHlwZSA9IG1Db250ZXh0LnNoYWRl
clR5cGU7Ci0gICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUhlYWRlcjsKLQotICAgIGZvciAoU3Ry
dWN0RGVjbGFyYXRpb25zOjppdGVyYXRvciBzdHJ1Y3REZWNsYXJhdGlvbiA9IG1TdHJ1Y3REZWNs
YXJhdGlvbnMuYmVnaW4oKTsgc3RydWN0RGVjbGFyYXRpb24gIT0gbVN0cnVjdERlY2xhcmF0aW9u
cy5lbmQoKTsgc3RydWN0RGVjbGFyYXRpb24rKykKLSAgICB7Ci0gICAgICAgIG91dCA8PCAqc3Ry
dWN0RGVjbGFyYXRpb247Ci0gICAgfQotCi0gICAgZm9yIChDb25zdHJ1Y3RvcnM6Oml0ZXJhdG9y
IGNvbnN0cnVjdG9yID0gbUNvbnN0cnVjdG9ycy5iZWdpbigpOyBjb25zdHJ1Y3RvciAhPSBtQ29u
c3RydWN0b3JzLmVuZCgpOyBjb25zdHJ1Y3RvcisrKQotICAgIHsKLSAgICAgICAgb3V0IDw8ICpj
b25zdHJ1Y3RvcjsKLSAgICB9Ci0KLSAgICBUU3RyaW5nIHVuaWZvcm1zOwotICAgIFRTdHJpbmcg
dmFyeWluZ3M7Ci0gICAgVFN0cmluZyBhdHRyaWJ1dGVzOwotCi0gICAgZm9yIChSZWZlcmVuY2Vk
U3ltYm9sczo6Y29uc3RfaXRlcmF0b3IgdW5pZm9ybSA9IG1SZWZlcmVuY2VkVW5pZm9ybXMuYmVn
aW4oKTsgdW5pZm9ybSAhPSBtUmVmZXJlbmNlZFVuaWZvcm1zLmVuZCgpOyB1bmlmb3JtKyspCi0g
ICAgewotICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IHVuaWZvcm0tPnNlY29uZC0+Z2V0VHlw
ZSgpOwotICAgICAgICBjb25zdCBUU3RyaW5nICZuYW1lID0gdW5pZm9ybS0+c2Vjb25kLT5nZXRT
eW1ib2woKTsKLQotICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCAm
JiBJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpICAgLy8gQWxzbyBkZWNsYXJlIHRoZSB0
ZXh0dXJlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBpbmRleCA9IHNhbXBsZXJSZWdpc3Rl
cihtUmVmZXJlbmNlZFVuaWZvcm1zW25hbWVdKTsKLQotICAgICAgICAgICAgdW5pZm9ybXMgKz0g
InVuaWZvcm0gU2FtcGxlclN0YXRlIHNhbXBsZXJfIiArIGRlY29yYXRlVW5pZm9ybShuYW1lLCB0
eXBlKSArIGFycmF5U3RyaW5nKHR5cGUpICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAiIDog
cmVnaXN0ZXIocyIgKyBzdHIoaW5kZXgpICsgIik7XG4iOwotCi0gICAgICAgICAgICB1bmlmb3Jt
cyArPSAidW5pZm9ybSAiICsgdGV4dHVyZVN0cmluZyh0eXBlKSArICIgdGV4dHVyZV8iICsgZGVj
b3JhdGVVbmlmb3JtKG5hbWUsIHR5cGUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICIgOiByZWdpc3Rlcih0IiArIHN0cihpbmRleCkgKyAiKTtcbiI7Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICB1bmlmb3JtcyAr
PSAidW5pZm9ybSAiICsgdHlwZVN0cmluZyh0eXBlKSArICIgIiArIGRlY29yYXRlVW5pZm9ybShu
YW1lLCB0eXBlKSArIGFycmF5U3RyaW5nKHR5cGUpICsgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAiIDogcmVnaXN0ZXIoIiArIHJlZ2lzdGVyU3RyaW5nKG1SZWZlcmVuY2VkVW5pZm9ybXNbbmFt
ZV0pICsgIik7XG4iOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChSZWZlcmVuY2VkU3lt
Ym9sczo6Y29uc3RfaXRlcmF0b3IgdmFyeWluZyA9IG1SZWZlcmVuY2VkVmFyeWluZ3MuYmVnaW4o
KTsgdmFyeWluZyAhPSBtUmVmZXJlbmNlZFZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAg
ewotICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IHZhcnlpbmctPnNlY29uZC0+Z2V0VHlwZSgp
OwotICAgICAgICBjb25zdCBUU3RyaW5nICZuYW1lID0gdmFyeWluZy0+c2Vjb25kLT5nZXRTeW1i
b2woKTsKLQotICAgICAgICAvLyBQcm9ncmFtIGxpbmtpbmcgZGVwZW5kcyBvbiB0aGlzIGV4YWN0
IGZvcm1hdAotICAgICAgICB2YXJ5aW5ncyArPSAic3RhdGljICIgKyB0eXBlU3RyaW5nKHR5cGUp
ICsgIiAiICsgZGVjb3JhdGUobmFtZSkgKyBhcnJheVN0cmluZyh0eXBlKSArICIgPSAiICsgaW5p
dGlhbGl6ZXIodHlwZSkgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICBmb3IgKFJlZmVyZW5jZWRTeW1i
b2xzOjpjb25zdF9pdGVyYXRvciBhdHRyaWJ1dGUgPSBtUmVmZXJlbmNlZEF0dHJpYnV0ZXMuYmVn
aW4oKTsgYXR0cmlidXRlICE9IG1SZWZlcmVuY2VkQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRl
KyspCi0gICAgewotICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IGF0dHJpYnV0ZS0+c2Vjb25k
LT5nZXRUeXBlKCk7Ci0gICAgICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSBhdHRyaWJ1dGUtPnNl
Y29uZC0+Z2V0U3ltYm9sKCk7Ci0KLSAgICAgICAgYXR0cmlidXRlcyArPSAic3RhdGljICIgKyB0
eXBlU3RyaW5nKHR5cGUpICsgIiAiICsgZGVjb3JhdGUobmFtZSkgKyBhcnJheVN0cmluZyh0eXBl
KSArICIgPSAiICsgaW5pdGlhbGl6ZXIodHlwZSkgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAo
bVVzZXNEaXNjYXJkUmV3cml0aW5nKQotICAgIHsKLSAgICAgICAgb3V0IDw8ICIjZGVmaW5lIEFO
R0xFX1VTRVNfRElTQ0FSRF9SRVdSSVRJTkciIDw8ICJcbiI7Ci0gICAgfQotCi0gICAgaWYgKHNo
YWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKQotICAgIHsKLSAgICAgICAgVEV4dGVuc2lv
bkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbUNvbnRleHQuZXh0ZW5zaW9uQmVoYXZp
b3IoKS5maW5kKCJHTF9FWFRfZHJhd19idWZmZXJzIik7Ci0gICAgICAgIGNvbnN0IGJvb2wgdXNp
bmdNUlRFeHRlbnNpb24gPSAoaXRlciAhPSBtQ29udGV4dC5leHRlbnNpb25CZWhhdmlvcigpLmVu
ZCgpICYmIChpdGVyLT5zZWNvbmQgPT0gRUJoRW5hYmxlIHx8IGl0ZXItPnNlY29uZCA9PSBFQmhS
ZXF1aXJlKSk7Ci0KLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG51bUNvbG9yVmFsdWVzID0g
dXNpbmdNUlRFeHRlbnNpb24gPyBtTnVtUmVuZGVyVGFyZ2V0cyA6IDE7Ci0KLSAgICAgICAgb3V0
IDw8ICIvLyBWYXJ5aW5nc1xuIjsKLSAgICAgICAgb3V0IDw8ICB2YXJ5aW5nczsKLSAgICAgICAg
b3V0IDw8ICJcbiIKLSAgICAgICAgICAgICAgICJzdGF0aWMgZmxvYXQ0IGdsX0NvbG9yWyIgPDwg
bnVtQ29sb3JWYWx1ZXMgPDwgIl0gPVxuIgotICAgICAgICAgICAgICAgIntcbiI7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtQ29sb3JWYWx1ZXM7IGkrKykKLSAgICAg
ICAgewotICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQ0KDAsIDAsIDAsIDApIjsKLSAgICAg
ICAgICAgIGlmIChpICsgMSAhPSBudW1Db2xvclZhbHVlcykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBvdXQgPDwgIiwiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgb3V0IDw8
ICJcbiI7Ci0gICAgICAgIH0KLSAgICAgICAgb3V0IDw8ICJ9O1xuIjsKLQotICAgICAgICBpZiAo
bVVzZXNGcmFnRGVwdGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGZs
b2F0IGdsX0RlcHRoID0gMC4wO1xuIjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtVXNlc0Zy
YWdDb29yZCkKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgZmxvYXQ0IGds
X0ZyYWdDb29yZCA9IGZsb2F0NCgwLCAwLCAwLCAwKTtcbiI7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAobVVzZXNQb2ludENvb3JkKQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgInN0
YXRpYyBmbG9hdDIgZ2xfUG9pbnRDb29yZCA9IGZsb2F0MigwLjUsIDAuNSk7XG4iOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKG1Vc2VzRnJvbnRGYWNpbmcpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG91dCA8PCAic3RhdGljIGJvb2wgZ2xfRnJvbnRGYWNpbmcgPSBmYWxzZTtcbiI7Ci0gICAg
ICAgIH0KLQotICAgICAgICBvdXQgPDwgIlxuIjsKLQotICAgICAgICBpZiAobVVzZXNEZXB0aFJh
bmdlKQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgInN0cnVjdCBnbF9EZXB0aFJhbmdl
UGFyYW1ldGVyc1xuIgotICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAg
ICAgIiAgICBmbG9hdCBuZWFyO1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZmFy
O1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZGlmZjtcbiIKLSAgICAgICAgICAg
ICAgICAgICAifTtcbiIKLSAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG91dCA8PCAiY2J1ZmZlciBEcml2ZXJDb25zdGFudHMgOiByZWdpc3RlcihiMSlc
biIKLSAgICAgICAgICAgICAgICAgICAie1xuIjsKLQotICAgICAgICAgICAgaWYgKG1Vc2VzRGVw
dGhSYW5nZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9h
dDMgZHhfRGVwdGhSYW5nZSA6IHBhY2tvZmZzZXQoYzApO1xuIjsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKG1Vc2VzRnJhZ0Nvb3JkKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG91dCA8PCAiICAgIGZsb2F0NCBkeF9WaWV3Q29vcmRzIDogcGFja29mZnNldChjMSk7
XG4iOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobVVzZXNGcmFnQ29vcmQgfHwg
bVVzZXNGcm9udEZhY2luZykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwg
IiAgICBmbG9hdDMgZHhfRGVwdGhGcm9udCA6IHBhY2tvZmZzZXQoYzIpO1xuIjsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgb3V0IDw8ICJ9O1xuIjsKLSAgICAgICAgfQotICAgICAgICBl
bHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtVXNlc0RlcHRoUmFuZ2UpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJ1bmlmb3JtIGZsb2F0MyBkeF9EZXB0aFJh
bmdlIDogcmVnaXN0ZXIoYzApOyI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICht
VXNlc0ZyYWdDb29yZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgInVu
aWZvcm0gZmxvYXQ0IGR4X1ZpZXdDb29yZHMgOiByZWdpc3RlcihjMSk7XG4iOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAobVVzZXNGcmFnQ29vcmQgfHwgbVVzZXNGcm9udEZhY2lu
ZykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgInVuaWZvcm0gZmxvYXQz
IGR4X0RlcHRoRnJvbnQgOiByZWdpc3RlcihjMik7XG4iOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgb3V0IDw8ICJcbiI7Ci0KLSAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5n
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgZ2xfRGVwdGhSYW5nZVBh
cmFtZXRlcnMgZ2xfRGVwdGhSYW5nZSA9IHtkeF9EZXB0aFJhbmdlLngsIGR4X0RlcHRoUmFuZ2Uu
eSwgZHhfRGVwdGhSYW5nZS56fTtcbiIKLSAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBvdXQgPDwgIHVuaWZvcm1zOwotICAgICAgICBvdXQgPDwg
IlxuIjsKLQotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKHNhbXBsZXIyRCBzLCBm
bG9hdDIgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gdGV4MkQocywgdCk7XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChU
ZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MiB1dilcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1w
bGUocywgdXYpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAg
ICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEX2JpYXMpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVy
ZTJEKHNhbXBsZXIyRCBzLCBmbG9hdDIgdCwgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRi
aWFzKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgYmlhcykpO1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQo
VGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDIgdXYsIGZsb2F0IGJpYXMpXG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAg
cmV0dXJuIHQuU2FtcGxlQmlhcyhzLCB1diwgYmlhcyk7XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
bVVzZXNUZXh0dXJlMkRQcm9qKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5
cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91
dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0MyB0KVxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0ZXgyRHByb2oocywgZmxvYXQ0KHQueCwgdC55LCAwLCB0LnopKTtcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMs
IGZsb2F0NCB0KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAg
ICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRHByb2oocywgdCk7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVU
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1
cmUyRFByb2ooVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3KVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0LlNhbXBsZShzLCBmbG9hdDIodXZ3LnggLyB1dncueiwgdXZ3LnkgLyB1dncueikpO1xu
IgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihUZXh0
dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0NCB1dncpXG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxl
KHMsIGZsb2F0Mih1dncueCAvIHV2dy53LCB1dncueSAvIHV2dy53KSk7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAobVVzZXNUZXh0dXJlMkRQcm9qX2JpYXMpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywg
ZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEYmlhcyhzLCBmbG9hdDQodC54
IC8gdC56LCB0LnkgLyB0LnosIDAsIGJpYXMpKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
In1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICAg
ICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0NCB0LCBmbG9hdCBi
aWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53
LCAwLCBiaWFzKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICht
T3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVyZTJEIHQsIFNhbXBs
ZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUJp
YXMocywgZmxvYXQyKHV2dy54IC8gdXZ3LnosIHV2dy55IC8gdXZ3LnopLCBiaWFzKTtcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVyZTJE
IHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAg
ICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0
LlNhbXBsZUJpYXMocywgZmxvYXQyKHV2dy54IC8gdXZ3LncsIHV2dy55IC8gdXZ3LncpLCBiaWFz
KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmVDdWJlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlKHNhbXBs
ZXJDVUJFIHMsIGZsb2F0MyB0KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFKHMsIHQpO1xuIgotICAgICAg
ICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDEx
X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBn
bF90ZXh0dXJlQ3ViZShUZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dylc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IiAgICByZXR1cm4gdC5TYW1wbGUocywgdXZ3KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
In1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtVXNl
c1RleHR1cmVDdWJlX2JpYXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtT3V0cHV0VHlw
ZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0
IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQsIGZsb2F0
IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHRleENVQkViaWFzKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCBi
aWFzKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0
VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlKFRleHR1cmVDdWJlIHQsIFNhbXBsZXJTdGF0
ZSBzLCBmbG9hdDMgdXZ3LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
e1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUJpYXMocywg
dXZ3LCBiaWFzKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRoZXNlICpMb2QwIGludHJpbnNpY3Mg
YXJlIG5vdCBhdmFpbGFibGUgaW4gR0wgZnJhZ21lbnQgc2hhZGVycy4KLSAgICAgICAgLy8gVGhl
eSBhcmUgdXNlZCB0byBzYW1wbGUgdXNpbmcgZGlzY29udGludW91cyB0ZXh0dXJlIGNvb3JkaW5h
dGVzLgotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRMb2QwKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoc2FtcGxlcjJE
IHMsIGZsb2F0MiB0KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCB0LnksIDAs
IDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRU
eXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
b3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kMChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRl
IHMsIGZsb2F0MiB1dilcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1diwgMCk7XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kMChzYW1w
bGVyMkQgcywgZmxvYXQyIHQsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZs
b2F0NCh0LngsIHQueSwgMCwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRMb2QwKFRleHR1cmUy
RCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAg
ICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0
LlNhbXBsZUxldmVsKHMsIHV2LCAwKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtVXNlc1RleHR1
cmUyRFByb2pMb2QwKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0g
U0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAi
ZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwKHNhbXBsZXIyRCBzLCBmbG9hdDMgdClcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCAwKSk7XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kKHNh
bXBsZXIyRCBzLCBmbG9hdDQgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAv
IHQudywgdC55IC8gdC53LCAwLCAwKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwKFRl
eHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dylcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1w
bGVMZXZlbChzLCBmbG9hdDIodXZ3LnggLyB1dncueiwgdXZ3LnkgLyB1dncueiksIDApO1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZDAoVGV4
dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3KVxuIgotICAgICAgICAgICAgICAg
ICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBs
ZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy53LCB1dncueSAvIHV2dy53KSwgMCk7XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pM
b2QwX2JpYXMoc2FtcGxlcjJEIHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAg
ICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0
ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC56LCB0LnkgLyB0LnosIDAsIDApKTtcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2RfYmlhcyhzYW1w
bGVyMkQgcywgZmxvYXQ0IHQsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZs
b2F0NCh0LnggLyB0LncsIHQueSAvIHQudywgMCwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQ
cm9qTG9kX2JpYXMoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3LCBmbG9h
dCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy56
LCB1dncueSAvIHV2dy56KSwgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0
NCBnbF90ZXh0dXJlMkRQcm9qTG9kX2JpYXMoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBm
bG9hdDQgdXZ3LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0
Mih1dncueCAvIHV2dy53LCB1dncueSAvIHV2dy53KSwgMCk7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAobVVzZXNUZXh0dXJlQ3ViZUxvZDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtT3V0
cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmVMb2QwKHNhbXBsZXJDVUJFIHMsIGZsb2F0
MyB0KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0ZXhDVUJFbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCAwKSk7
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9
PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8
PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChUZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUg
cywgZmxvYXQzIHV2dylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1dncsIDApO1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4i
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXMpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmVMb2Qw
KHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAg
ICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJF
bG9kKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCAwKSk7XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJl
TG9kMChUZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQgYmlh
cylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1dncsIDApO1xuIgotICAgICAgICAgICAg
ICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKHVzaW5nTVJURXh0ZW5zaW9uICYmIG1OdW1SZW5kZXJUYXJnZXRzID4gMSkKLSAgICAg
ICAgewotICAgICAgICAgICAgb3V0IDw8ICIjZGVmaW5lIEdMX1VTRVNfTVJUXG4iOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKG1Vc2VzRnJhZ0NvbG9yKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBvdXQgPDwgIiNkZWZpbmUgR0xfVVNFU19GUkFHX0NPTE9SXG4iOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKG1Vc2VzRnJhZ0RhdGEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAi
I2RlZmluZSBHTF9VU0VTX0ZSQUdfREFUQVxuIjsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNl
ICAgLy8gVmVydGV4IHNoYWRlcgotICAgIHsKLSAgICAgICAgb3V0IDw8ICIvLyBBdHRyaWJ1dGVz
XG4iOwotICAgICAgICBvdXQgPDwgIGF0dHJpYnV0ZXM7Ci0gICAgICAgIG91dCA8PCAiXG4iCi0g
ICAgICAgICAgICAgICAic3RhdGljIGZsb2F0NCBnbF9Qb3NpdGlvbiA9IGZsb2F0NCgwLCAwLCAw
LCAwKTtcbiI7Ci0gICAgICAgIAotICAgICAgICBpZiAobVVzZXNQb2ludFNpemUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGZsb2F0IGdsX1BvaW50U2l6ZSA9IGZsb2F0
KDEpO1xuIjsKLSAgICAgICAgfQotCi0gICAgICAgIG91dCA8PCAiXG4iCi0gICAgICAgICAgICAg
ICAiLy8gVmFyeWluZ3NcbiI7Ci0gICAgICAgIG91dCA8PCAgdmFyeWluZ3M7Ci0gICAgICAgIG91
dCA8PCAiXG4iOwotCi0gICAgICAgIGlmIChtVXNlc0RlcHRoUmFuZ2UpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG91dCA8PCAic3RydWN0IGdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJzXG4iCi0gICAg
ICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IG5lYXI7
XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBmYXI7XG4iCi0gICAgICAgICAgICAg
ICAgICAgIiAgICBmbG9hdCBkaWZmO1xuIgotICAgICAgICAgICAgICAgICAgICJ9O1xuIgotICAg
ICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobU91dHB1dFR5
cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1Vc2Vz
RGVwdGhSYW5nZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImNidWZm
ZXIgRHJpdmVyQ29uc3RhbnRzIDogcmVnaXN0ZXIoYjEpXG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQzIGR4X0RlcHRoUmFu
Z2UgOiBwYWNrb2Zmc2V0KGMwKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn07XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobVVzZXNEZXB0aFJhbmdlKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAidW5pZm9ybSBmbG9hdDMgZHhf
RGVwdGhSYW5nZSA6IHJlZ2lzdGVyKGMwKTtcbiI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIG91dCA8PCAidW5pZm9ybSBmbG9hdDQgZHhfVmlld0FkanVzdCA6IHJlZ2lzdGVyKGMxKTtc
biIKLSAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1V
c2VzRGVwdGhSYW5nZSkKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgZ2xf
RGVwdGhSYW5nZVBhcmFtZXRlcnMgZ2xfRGVwdGhSYW5nZSA9IHtkeF9EZXB0aFJhbmdlLngsIGR4
X0RlcHRoUmFuZ2UueSwgZHhfRGVwdGhSYW5nZS56fTtcbiIKLSAgICAgICAgICAgICAgICAgICAi
XG4iOwotICAgICAgICB9Ci0KLSAgICAgICAgb3V0IDw8IHVuaWZvcm1zOwotICAgICAgICBvdXQg
PDwgIlxuIjsKLSAgICAgICAgCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmUyRCkKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoc2Ft
cGxlcjJEIHMsIGZsb2F0MiB0KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCB0
LnksIDAsIDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1P
dXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKFRleHR1cmUyRCB0LCBTYW1wbGVyU3Rh
dGUgcywgZmxvYXQyIHV2KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIHV2LCAwKTtcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxu
IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExvZCkKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRMb2Qoc2FtcGxlcjJE
IHMsIGZsb2F0MiB0LCBmbG9hdCBsb2QpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0
LngsIHQueSwgMCwgbG9kKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
IGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZChUZXh0dXJlMkQgdCwg
U2FtcGxlclN0YXRlIHMsIGZsb2F0MiB1diwgZmxvYXQgbG9kKVxuIgotICAgICAgICAgICAgICAg
ICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBs
ZUxldmVsKHMsIHV2LCBsb2QpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxz
ZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJE
UHJvaikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5
X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBn
bF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDMgdClcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRs
b2QocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCAwKSk7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9h
dDQgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53
LCAwLCAwKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0
cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVyZTJEIHQsIFNhbXBsZXJT
dGF0ZSBzLCBmbG9hdDMgdXZ3KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1
dncueCAvIHV2dy56LCB1dncueSAvIHV2dy56KSwgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUg
cywgZmxvYXQ0IHV2dylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIodXZ3Lngg
LyB1dncudywgdXZ3LnkgLyB1dncudyksIDApO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAi
fVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1Vc2Vz
VGV4dHVyZTJEUHJvakxvZCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBl
ID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQg
PDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBzLCBmbG9hdDMgdCwgZmxv
YXQgbG9kKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC56LCB0LnkgLyB0
LnosIDAsIGxvZCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAg
ICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4
dHVyZTJEUHJvakxvZChzYW1wbGVyMkQgcywgZmxvYXQ0IHQsIGZsb2F0IGxvZClcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53LCAwLCBsb2QpKTtcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxu
IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNI
X0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJm
bG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0
MyB1dncsIGZsb2F0IGxvZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIodXZ3
LnggLyB1dncueiwgdXZ3LnkgLyB1dncueiksIGxvZCk7XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUg
cywgZmxvYXQ0IHV2dylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIodXZ3Lngg
LyB1dncudywgdXZ3LnkgLyB1dncudyksIGxvZCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVVz
ZXNUZXh0dXJlQ3ViZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09
IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwg
ImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShzYW1wbGVyQ1VCRSBzLCBmbG9hdDMgdClcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdGV4Q1VCRWxvZChzLCBmbG9hdDQodC54LCB0LnksIHQueiwgMCkpO1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09V
VFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90
ZXh0dXJlQ3ViZShUZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dylcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAg
ICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1dncsIDApO1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KG1Vc2VzVGV4dHVyZUN1YmVMb2QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtT3V0cHV0
VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
b3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmVMb2Qoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQs
IGZsb2F0IGxvZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRWxvZChzLCBmbG9hdDQodC54LCB0LnksIHQu
eiwgbG9kKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0
cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kKFRleHR1cmVDdWJlIHQsIFNhbXBs
ZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3LCBmbG9hdCBsb2QpXG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2
ZWwocywgdXZ3LCBsb2QpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAg
ICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBV
TlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1Vc2VzRnJhZ0Nvb3Jk
KQotICAgIHsKLSAgICAgICAgb3V0IDw8ICIjZGVmaW5lIEdMX1VTRVNfRlJBR19DT09SRFxuIjsK
LSAgICB9Ci0KLSAgICBpZiAobVVzZXNQb2ludENvb3JkKQotICAgIHsKLSAgICAgICAgb3V0IDw8
ICIjZGVmaW5lIEdMX1VTRVNfUE9JTlRfQ09PUkRcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1Vc2Vz
RnJvbnRGYWNpbmcpCi0gICAgewotICAgICAgICBvdXQgPDwgIiNkZWZpbmUgR0xfVVNFU19GUk9O
VF9GQUNJTkdcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1Vc2VzUG9pbnRTaXplKQotICAgIHsKLSAg
ICAgICAgb3V0IDw8ICIjZGVmaW5lIEdMX1VTRVNfUE9JTlRfU0laRVxuIjsKLSAgICB9Ci0KLSAg
ICBpZiAobVVzZXNGcmFnRGVwdGgpCi0gICAgewotICAgICAgICBvdXQgPDwgIiNkZWZpbmUgR0xf
VVNFU19GUkFHX0RFUFRIXG4iOwotICAgIH0KLQotICAgIGlmIChtVXNlc0RlcHRoUmFuZ2UpCi0g
ICAgewotICAgICAgICBvdXQgPDwgIiNkZWZpbmUgR0xfVVNFU19ERVBUSF9SQU5HRVxuIjsKLSAg
ICB9Ci0KLSAgICBpZiAobVVzZXNYb3IpCi0gICAgewotICAgICAgICBvdXQgPDwgImJvb2wgeG9y
KGJvb2wgcCwgYm9vbCBxKVxuIgotICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIChwIHx8IHEpICYmICEocCAmJiBxKTtcbiIKLSAgICAgICAgICAgICAgICJ9
XG4iCi0gICAgICAgICAgICAgICAiXG4iOwotICAgIH0KLQotICAgIGlmIChtVXNlc01vZDEpCi0g
ICAgewotICAgICAgICBvdXQgPDwgImZsb2F0IG1vZChmbG9hdCB4LCBmbG9hdCB5KVxuIgotICAg
ICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHggLSB5ICogZmxv
b3IoeCAvIHkpO1xuIgotICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICJcbiI7
Ci0gICAgfQotCi0gICAgaWYgKG1Vc2VzTW9kMnYpCi0gICAgewotICAgICAgICBvdXQgPDwgImZs
b2F0MiBtb2QoZmxvYXQyIHgsIGZsb2F0MiB5KVxuIgotICAgICAgICAgICAgICAgIntcbiIKLSAg
ICAgICAgICAgICAgICIgICAgcmV0dXJuIHggLSB5ICogZmxvb3IoeCAvIHkpO1xuIgotICAgICAg
ICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICJcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1V
c2VzTW9kMmYpCi0gICAgewotICAgICAgICBvdXQgPDwgImZsb2F0MiBtb2QoZmxvYXQyIHgsIGZs
b2F0IHkpXG4iCi0gICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgIiAgICByZXR1
cm4geCAtIHkgKiBmbG9vcih4IC8geSk7XG4iCi0gICAgICAgICAgICAgICAifVxuIgotICAgICAg
ICAgICAgICAgIlxuIjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1Vc2VzTW9kM3YpCi0gICAgewot
ICAgICAgICBvdXQgPDwgImZsb2F0MyBtb2QoZmxvYXQzIHgsIGZsb2F0MyB5KVxuIgotICAgICAg
ICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHggLSB5ICogZmxvb3Io
eCAvIHkpO1xuIgotICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICJcbiI7Ci0g
ICAgfQotCi0gICAgaWYgKG1Vc2VzTW9kM2YpCi0gICAgewotICAgICAgICBvdXQgPDwgImZsb2F0
MyBtb2QoZmxvYXQzIHgsIGZsb2F0IHkpXG4iCi0gICAgICAgICAgICAgICAie1xuIgotICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4geCAtIHkgKiBmbG9vcih4IC8geSk7XG4iCi0gICAgICAgICAg
ICAgICAifVxuIgotICAgICAgICAgICAgICAgIlxuIjsKLSAgICB9Ci0KLSAgICBpZiAobVVzZXNN
b2Q0dikKLSAgICB7Ci0gICAgICAgIG91dCA8PCAiZmxvYXQ0IG1vZChmbG9hdDQgeCwgZmxvYXQ0
IHkpXG4iCi0gICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgIiAgICByZXR1cm4g
eCAtIHkgKiBmbG9vcih4IC8geSk7XG4iCi0gICAgICAgICAgICAgICAifVxuIgotICAgICAgICAg
ICAgICAgIlxuIjsKLSAgICB9Ci0KLSAgICBpZiAobVVzZXNNb2Q0ZikKLSAgICB7Ci0gICAgICAg
IG91dCA8PCAiZmxvYXQ0IG1vZChmbG9hdDQgeCwgZmxvYXQgeSlcbiIKLSAgICAgICAgICAgICAg
ICJ7XG4iCi0gICAgICAgICAgICAgICAiICAgIHJldHVybiB4IC0geSAqIGZsb29yKHggLyB5KTtc
biIKLSAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAiXG4iOwotICAgIH0KLQot
ICAgIGlmIChtVXNlc0ZhY2Vmb3J3YXJkMSkKLSAgICB7Ci0gICAgICAgIG91dCA8PCAiZmxvYXQg
ZmFjZWZvcndhcmQoZmxvYXQgTiwgZmxvYXQgSSwgZmxvYXQgTnJlZilcbiIKLSAgICAgICAgICAg
ICAgICJ7XG4iCi0gICAgICAgICAgICAgICAiICAgIGlmKGRvdChOcmVmLCBJKSA+PSAwKVxuIgot
ICAgICAgICAgICAgICAgIiAgICB7XG4iCi0gICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4g
LU47XG4iCi0gICAgICAgICAgICAgICAiICAgIH1cbiIKLSAgICAgICAgICAgICAgICIgICAgZWxz
ZVxuIgotICAgICAgICAgICAgICAgIiAgICB7XG4iCi0gICAgICAgICAgICAgICAiICAgICAgICBy
ZXR1cm4gTjtcbiIKLSAgICAgICAgICAgICAgICIgICAgfVxuIgotICAgICAgICAgICAgICAgIn1c
biIKLSAgICAgICAgICAgICAgICJcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1Vc2VzRmFjZWZvcndh
cmQyKQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJmbG9hdDIgZmFjZWZvcndhcmQoZmxvYXQyIE4s
IGZsb2F0MiBJLCBmbG9hdDIgTnJlZilcbiIKLSAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAg
ICAgICAgICAiICAgIGlmKGRvdChOcmVmLCBJKSA+PSAwKVxuIgotICAgICAgICAgICAgICAgIiAg
ICB7XG4iCi0gICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gLU47XG4iCi0gICAgICAgICAg
ICAgICAiICAgIH1cbiIKLSAgICAgICAgICAgICAgICIgICAgZWxzZVxuIgotICAgICAgICAgICAg
ICAgIiAgICB7XG4iCi0gICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gTjtcbiIKLSAgICAg
ICAgICAgICAgICIgICAgfVxuIgotICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAg
ICJcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1Vc2VzRmFjZWZvcndhcmQzKQotICAgIHsKLSAgICAg
ICAgb3V0IDw8ICJmbG9hdDMgZmFjZWZvcndhcmQoZmxvYXQzIE4sIGZsb2F0MyBJLCBmbG9hdDMg
TnJlZilcbiIKLSAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAiICAgIGlmKGRv
dChOcmVmLCBJKSA+PSAwKVxuIgotICAgICAgICAgICAgICAgIiAgICB7XG4iCi0gICAgICAgICAg
ICAgICAiICAgICAgICByZXR1cm4gLU47XG4iCi0gICAgICAgICAgICAgICAiICAgIH1cbiIKLSAg
ICAgICAgICAgICAgICIgICAgZWxzZVxuIgotICAgICAgICAgICAgICAgIiAgICB7XG4iCi0gICAg
ICAgICAgICAgICAiICAgICAgICByZXR1cm4gTjtcbiIKLSAgICAgICAgICAgICAgICIgICAgfVxu
IgotICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICJcbiI7Ci0gICAgfQotCi0g
ICAgaWYgKG1Vc2VzRmFjZWZvcndhcmQ0KQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJmbG9hdDQg
ZmFjZWZvcndhcmQoZmxvYXQ0IE4sIGZsb2F0NCBJLCBmbG9hdDQgTnJlZilcbiIKLSAgICAgICAg
ICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAiICAgIGlmKGRvdChOcmVmLCBJKSA+PSAwKVxu
IgotICAgICAgICAgICAgICAgIiAgICB7XG4iCi0gICAgICAgICAgICAgICAiICAgICAgICByZXR1
cm4gLU47XG4iCi0gICAgICAgICAgICAgICAiICAgIH1cbiIKLSAgICAgICAgICAgICAgICIgICAg
ZWxzZVxuIgotICAgICAgICAgICAgICAgIiAgICB7XG4iCi0gICAgICAgICAgICAgICAiICAgICAg
ICByZXR1cm4gTjtcbiIKLSAgICAgICAgICAgICAgICIgICAgfVxuIgotICAgICAgICAgICAgICAg
In1cbiIKLSAgICAgICAgICAgICAgICJcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1Vc2VzQXRhbjJf
MSkKLSAgICB7Ci0gICAgICAgIG91dCA8PCAiZmxvYXQgYXRhbnl4KGZsb2F0IHksIGZsb2F0IHgp
XG4iCi0gICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgIiAgICBpZih4ID09IDAg
JiYgeSA9PSAwKSB4ID0gMTtcbiIgICAvLyBBdm9pZCBwcm9kdWNpbmcgYSBOYU4KLSAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIGF0YW4yKHksIHgpO1xuIgotICAgICAgICAgICAgICAgIn1cbiI7
Ci0gICAgfQotCi0gICAgaWYgKG1Vc2VzQXRhbjJfMikKLSAgICB7Ci0gICAgICAgIG91dCA8PCAi
ZmxvYXQyIGF0YW55eChmbG9hdDIgeSwgZmxvYXQyIHgpXG4iCi0gICAgICAgICAgICAgICAie1xu
IgotICAgICAgICAgICAgICAgIiAgICBpZih4WzBdID09IDAgJiYgeVswXSA9PSAwKSB4WzBdID0g
MTtcbiIKLSAgICAgICAgICAgICAgICIgICAgaWYoeFsxXSA9PSAwICYmIHlbMV0gPT0gMCkgeFsx
XSA9IDE7XG4iCi0gICAgICAgICAgICAgICAiICAgIHJldHVybiBmbG9hdDIoYXRhbjIoeVswXSwg
eFswXSksIGF0YW4yKHlbMV0sIHhbMV0pKTtcbiIKLSAgICAgICAgICAgICAgICJ9XG4iOwotICAg
IH0KLQotICAgIGlmIChtVXNlc0F0YW4yXzMpCi0gICAgewotICAgICAgICBvdXQgPDwgImZsb2F0
MyBhdGFueXgoZmxvYXQzIHksIGZsb2F0MyB4KVxuIgotICAgICAgICAgICAgICAgIntcbiIKLSAg
ICAgICAgICAgICAgICIgICAgaWYoeFswXSA9PSAwICYmIHlbMF0gPT0gMCkgeFswXSA9IDE7XG4i
Ci0gICAgICAgICAgICAgICAiICAgIGlmKHhbMV0gPT0gMCAmJiB5WzFdID09IDApIHhbMV0gPSAx
O1xuIgotICAgICAgICAgICAgICAgIiAgICBpZih4WzJdID09IDAgJiYgeVsyXSA9PSAwKSB4WzJd
ID0gMTtcbiIKLSAgICAgICAgICAgICAgICIgICAgcmV0dXJuIGZsb2F0MyhhdGFuMih5WzBdLCB4
WzBdKSwgYXRhbjIoeVsxXSwgeFsxXSksIGF0YW4yKHlbMl0sIHhbMl0pKTtcbiIKLSAgICAgICAg
ICAgICAgICJ9XG4iOwotICAgIH0KLQotICAgIGlmIChtVXNlc0F0YW4yXzQpCi0gICAgewotICAg
ICAgICBvdXQgPDwgImZsb2F0NCBhdGFueXgoZmxvYXQ0IHksIGZsb2F0NCB4KVxuIgotICAgICAg
ICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICIgICAgaWYoeFswXSA9PSAwICYmIHlbMF0g
PT0gMCkgeFswXSA9IDE7XG4iCi0gICAgICAgICAgICAgICAiICAgIGlmKHhbMV0gPT0gMCAmJiB5
WzFdID09IDApIHhbMV0gPSAxO1xuIgotICAgICAgICAgICAgICAgIiAgICBpZih4WzJdID09IDAg
JiYgeVsyXSA9PSAwKSB4WzJdID0gMTtcbiIKLSAgICAgICAgICAgICAgICIgICAgaWYoeFszXSA9
PSAwICYmIHlbM10gPT0gMCkgeFszXSA9IDE7XG4iCi0gICAgICAgICAgICAgICAiICAgIHJldHVy
biBmbG9hdDQoYXRhbjIoeVswXSwgeFswXSksIGF0YW4yKHlbMV0sIHhbMV0pLCBhdGFuMih5WzJd
LCB4WzJdKSwgYXRhbjIoeVszXSwgeFszXSkpO1xuIgotICAgICAgICAgICAgICAgIn1cbiI7Ci0g
ICAgfQotfQotCi12b2lkIE91dHB1dEhMU0w6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wgKm5v
ZGUpCi17Ci0gICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7Ci0KLSAgICBUU3RyaW5nIG5h
bWUgPSBub2RlLT5nZXRTeW1ib2woKTsKLQotICAgIGlmIChuYW1lID09ICJnbF9GcmFnQ29sb3Ii
KQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJnbF9Db2xvclswXSI7Ci0gICAgICAgIG1Vc2VzRnJh
Z0NvbG9yID0gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfRnJhZ0RhdGEi
KQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJnbF9Db2xvciI7Ci0gICAgICAgIG1Vc2VzRnJhZ0Rh
dGEgPSB0cnVlOwotICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9EZXB0aFJhbmdlIikK
LSAgICB7Ci0gICAgICAgIG1Vc2VzRGVwdGhSYW5nZSA9IHRydWU7Ci0gICAgICAgIG91dCA8PCBu
YW1lOwotICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9GcmFnQ29vcmQiKQotICAgIHsK
LSAgICAgICAgbVVzZXNGcmFnQ29vcmQgPSB0cnVlOwotICAgICAgICBvdXQgPDwgbmFtZTsKLSAg
ICB9Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfUG9pbnRDb29yZCIpCi0gICAgewotICAgICAg
ICBtVXNlc1BvaW50Q29vcmQgPSB0cnVlOwotICAgICAgICBvdXQgPDwgbmFtZTsKLSAgICB9Ci0g
ICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfRnJvbnRGYWNpbmciKQotICAgIHsKLSAgICAgICAgbVVz
ZXNGcm9udEZhY2luZyA9IHRydWU7Ci0gICAgICAgIG91dCA8PCBuYW1lOwotICAgIH0KLSAgICBl
bHNlIGlmIChuYW1lID09ICJnbF9Qb2ludFNpemUiKQotICAgIHsKLSAgICAgICAgbVVzZXNQb2lu
dFNpemUgPSB0cnVlOwotICAgICAgICBvdXQgPDwgbmFtZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAo
bmFtZSA9PSAiZ2xfRnJhZ0RlcHRoRVhUIikKLSAgICB7Ci0gICAgICAgIG1Vc2VzRnJhZ0RlcHRo
ID0gdHJ1ZTsKLSAgICAgICAgb3V0IDw8ICJnbF9EZXB0aCI7Ci0gICAgfQotICAgIGVsc2UKLSAg
ICB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gbm9kZS0+Z2V0UXVhbGlmaWVyKCk7
Ci0KLSAgICAgICAgaWYgKHF1YWxpZmllciA9PSBFdnFVbmlmb3JtKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBtUmVmZXJlbmNlZFVuaWZvcm1zW25hbWVdID0gbm9kZTsKLSAgICAgICAgICAgIG91
dCA8PCBkZWNvcmF0ZVVuaWZvcm0obmFtZSwgbm9kZS0+Z2V0VHlwZSgpKTsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtUmVmZXJlbmNlZEF0dHJpYnV0ZXNbbmFtZV0gPSBub2RlOwotICAgICAgICAg
ICAgb3V0IDw8IGRlY29yYXRlKG5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHF1
YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8IHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5
aW5nT3V0IHx8IHF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgcXVhbGlmaWVyID09IEV2cUlu
dmFyaWFudFZhcnlpbmdJbikKLSAgICAgICAgewotICAgICAgICAgICAgbVJlZmVyZW5jZWRWYXJ5
aW5nc1tuYW1lXSA9IG5vZGU7Ci0gICAgICAgICAgICBvdXQgPDwgZGVjb3JhdGUobmFtZSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgZGVj
b3JhdGUobmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgT3V0cHV0SExTTDo6dmlz
aXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCi17Ci0gICAgVEluZm9T
aW5rQmFzZSAmb3V0ID0gbUJvZHk7Ci0KLSAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCi0gICAg
ewotICAgICAgY2FzZSBFT3BBc3NpZ246ICAgICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgIigiLCAiID0gIiwgIikiKTsgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BJ
bml0aWFsaXplOgotICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIC8vIEdMU0wgYWxsb3dzIHRvIHdyaXRlIHRoaW5ncyBsaWtlICJmbG9hdCB4ID0g
eDsiIHdoZXJlIGEgbmV3IHZhcmlhYmxlIHggaXMgZGVmaW5lZAotICAgICAgICAgICAgLy8gYW5k
IHRoZSB2YWx1ZSBvZiBhbiBleGlzdGluZyB2YXJpYWJsZSB4IGlzIGFzc2lnbmVkLiBITFNMIHVz
ZXMgQyBzZW1hbnRpY3MgKHRoZQotICAgICAgICAgICAgLy8gbmV3IHZhcmlhYmxlIGlzIGNyZWF0
ZWQgYmVmb3JlIHRoZSBhc3NpZ25tZW50IGlzIGV2YWx1YXRlZCksIHNvIHdlIG5lZWQgdG8gY29u
dmVydAotICAgICAgICAgICAgLy8gdGhpcyB0byAiZmxvYXQgdCA9IHgsIHggPSB0OyIuCi0KLSAg
ICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUgPSBub2RlLT5nZXRMZWZ0KCktPmdl
dEFzU3ltYm9sTm9kZSgpOwotICAgICAgICAgICAgVEludGVybVR5cGVkICpleHByZXNzaW9uID0g
bm9kZS0+Z2V0UmlnaHQoKTsKLQotICAgICAgICAgICAgc2g6OlNlYXJjaFN5bWJvbCBzZWFyY2hT
eW1ib2woc3ltYm9sTm9kZS0+Z2V0U3ltYm9sKCkpOwotICAgICAgICAgICAgZXhwcmVzc2lvbi0+
dHJhdmVyc2UoJnNlYXJjaFN5bWJvbCk7Ci0gICAgICAgICAgICBib29sIHNhbWVTeW1ib2wgPSBz
ZWFyY2hTeW1ib2wuZm91bmRNYXRjaCgpOwotCi0gICAgICAgICAgICBpZiAoc2FtZVN5bWJvbCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBUeXBlIGFscmVhZHkgcHJpbnRlZAot
ICAgICAgICAgICAgICAgIG91dCA8PCAidCIgKyBzdHIobVVuaXF1ZUluZGV4KSArICIgPSAiOwot
ICAgICAgICAgICAgICAgIGV4cHJlc3Npb24tPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAgICAg
ICAgIG91dCA8PCAiLCAiOwotICAgICAgICAgICAgICAgIHN5bWJvbE5vZGUtPnRyYXZlcnNlKHRo
aXMpOwotICAgICAgICAgICAgICAgIG91dCA8PCAiID0gdCIgKyBzdHIobVVuaXF1ZUluZGV4KTsK
LQotICAgICAgICAgICAgICAgIG1VbmlxdWVJbmRleCsrOwotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh2aXNp
dCA9PSBJblZpc2l0KQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgIiA9ICI7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcEFkZEFzc2lnbjogICAgICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgKz0gIiwgIikiKTsgICAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEVPcFN1YkFzc2lnbjogICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0
KHZpc2l0LCAiKCIsICIgLT0gIiwgIikiKTsgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVP
cE11bEFzc2lnbjogICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgKj0g
IiwgIikiKTsgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFy
QXNzaWduOiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgKj0gIiwgIikiKTsgICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOiBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiKCIsICIgKj0gIiwgIikiKTsgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOgotICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlz
aXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAiKCI7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCkKLSAgICAgICAgewotICAgICAgICAgICAgb3V0
IDw8ICIgPSBtdWwoIjsKLSAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhp
cyk7Ci0gICAgICAgICAgICBvdXQgPDwgIiwgdHJhbnNwb3NlKCI7ICAgCi0gICAgICAgIH0KLSAg
ICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgIikpKSI7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4QXNzaWdu
OgotICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG91dCA8PCAiKCI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNp
dCkKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICIgPSBtdWwoIjsKLSAgICAgICAgICAg
IG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICBvdXQgPDwgIiwg
IjsgICAKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91
dCA8PCAiKSkiOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BEaXZB
c3NpZ246ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIC89ICIsICIp
Iik7ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDogICAgICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIiIsICJbIiwgIl0iKTsgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgIiIsICJbIiwgIl0iKTsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BJ
bmRleERpcmVjdFN0cnVjdDoKLSAgICAgICAgaWYgKHZpc2l0ID09IEluVmlzaXQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG5vZGUtPmdldExl
ZnQoKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpOwotICAgICAgICAgICAgY29uc3QgVEludGVybUNv
bnN0YW50VW5pb24qIGluZGV4ID0gbm9kZS0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9u
KCk7Ci0gICAgICAgICAgICBjb25zdCBURmllbGQqIGZpZWxkID0gc3RydWN0dXJlLT5maWVsZHMo
KVtpbmRleC0+Z2V0SUNvbnN0KDApXTsKLSAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0
ZUZpZWxkKGZpZWxkLT5uYW1lKCksIG5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpKTsKLQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBFT3BWZWN0b3JTd2l6emxlOgotICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKLSAg
ICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICIuIjsKLQotICAgICAgICAgICAgVEludGVybUFn
Z3JlZ2F0ZSAqc3dpenpsZSA9IG5vZGUtPmdldFJpZ2h0KCktPmdldEFzQWdncmVnYXRlKCk7Ci0K
LSAgICAgICAgICAgIGlmIChzd2l6emxlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2UgPSBzd2l6emxlLT5nZXRTZXF1ZW5jZSgpOwotCi0g
ICAgICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNpdCA9IHNlcXVl
bmNlLmJlZ2luKCk7IHNpdCAhPSBzZXF1ZW5jZS5lbmQoKTsgc2l0KyspCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqZWxlbWVudCA9
ICgqc2l0KS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYg
KGVsZW1lbnQpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpID0gZWxlbWVudC0+Z2V0SUNvbnN0KDApOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKGkpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIDA6IG91dCA8PCAieCI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAxOiBvdXQgPDwgInkiOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgMjogb3V0IDw8ICJ6IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6
IG91dCA8PCAidyI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwot
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gRnVsbHkgcHJvY2Vzc2VkCi0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcEFkZDogICAgICAgICAgICAgICBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgKyAiLCAiKSIpOyBicmVhazsKLSAgICAgIGNhc2UgRU9w
U3ViOiAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAtICIsICIpIik7
IGJyZWFrOwotICAgICAgY2FzZSBFT3BNdWw6ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgIigiLCAiICogIiwgIikiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcERpdjogICAgICAg
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgLyAiLCAiKSIpOyBicmVhazsKLSAg
ICAgIGNhc2UgRU9wRXF1YWw6Ci0gICAgICBjYXNlIEVPcE5vdEVxdWFsOgotICAgICAgICBpZiAo
bm9kZS0+Z2V0TGVmdCgpLT5pc1NjYWxhcigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
bm9kZS0+Z2V0T3AoKSA9PSBFT3BFcXVhbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPT0gIiwgIikiKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiKCIsICIgIT0gIiwgIikiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRMZWZ0KCktPmdldEJhc2ljVHlwZSgpID09IEVi
dFN0cnVjdCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9w
RXF1YWwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIoIjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBvdXQgPDwgIiEoIjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29uc3QgVEZpZWxk
TGlzdCAmZmllbGRzID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCktPmZp
ZWxkcygpOwotCi0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpZWxkcy5zaXpl
KCk7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCBURmllbGQgKmZp
ZWxkID0gZmllbGRzW2ldOwotCi0gICAgICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2
ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3JhdGVGaWVsZChm
aWVsZC0+bmFtZSgpLCBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKSkgKyAiID09ICI7Ci0gICAg
ICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAg
ICAgICAgb3V0IDw8ICIuIiArIGRlY29yYXRlRmllbGQoZmllbGQtPm5hbWUoKSwgbm9kZS0+Z2V0
TGVmdCgpLT5nZXRUeXBlKCkpOwotCi0gICAgICAgICAgICAgICAgaWYgKGkgPCBmaWVsZHMuc2l6
ZSgpIC0gMSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG91dCA8PCAi
ICYmICI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBv
dXQgPDwgIikiOwotCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS0+Z2V0TGVmdCgpLT5p
c01hdHJpeCgpIHx8IG5vZGUtPmdldExlZnQoKS0+aXNWZWN0b3IoKSk7Ci0KLSAgICAgICAgICAg
IGlmIChub2RlLT5nZXRPcCgpID09IEVPcEVxdWFsKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJhbGwoIiwgIiA9PSAiLCAiKSIpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICIhYWxsKCIsICIgPT0gIiwgIikiKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wTGVzc1RoYW46ICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA8ICIsICIpIik7ICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOiAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIs
ICIgPiAiLCAiKSIpOyAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOiAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIDw9ICIsICIpIik7ICBicmVhazsKLSAgICAgIGNh
c2UgRU9wR3JlYXRlclRoYW5FcXVhbDogIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA+PSAi
LCAiKSIpOyAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyOiBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiKCIsICIgKiAiLCAiKSIpOyAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BN
YXRyaXhUaW1lc1NjYWxhcjogb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICogIiwgIikiKTsg
ICBicmVhazsKLSAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXg6IG91dHB1dFRyaXBsZXQo
dmlzaXQsICJtdWwoIiwgIiwgdHJhbnNwb3NlKCIsICIpKSIpOyBicmVhazsKLSAgICAgIGNhc2Ug
RU9wTWF0cml4VGltZXNWZWN0b3I6IG91dHB1dFRyaXBsZXQodmlzaXQsICJtdWwodHJhbnNwb3Nl
KCIsICIpLCAiLCAiKSIpOyBicmVhazsKLSAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXg6
IG91dHB1dFRyaXBsZXQodmlzaXQsICJ0cmFuc3Bvc2UobXVsKHRyYW5zcG9zZSgiLCAiKSwgdHJh
bnNwb3NlKCIsICIpKSkiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcExvZ2ljYWxPcjoKLSAgICAg
ICAgaWYgKG5vZGUtPmdldFJpZ2h0KCktPmhhc1NpZGVFZmZlY3RzKCkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG91dCA8PCAicyIgPDwgbVVuZm9sZFNob3J0Q2lyY3VpdC0+Z2V0TmV4dFRlbXBv
cmFyeUluZGV4KCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwg
IiB8fCAiLCAiKSIpOwotICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAg
Y2FzZSBFT3BMb2dpY2FsWG9yOgotICAgICAgICBtVXNlc1hvciA9IHRydWU7Ci0gICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICJ4b3IoIiwgIiwgIiwgIikiKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6Ci0gICAgICAgIGlmIChub2RlLT5nZXRSaWdodCgpLT5o
YXNTaWRlRWZmZWN0cygpKQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgInMiIDw8IG1V
bmZvbGRTaG9ydENpcmN1aXQtPmdldE5leHRUZW1wb3JhcnlJbmRleCgpOwotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgJiYgIiwgIikiKTsKLSAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgT3V0cHV0SExTTDo6dmlzaXRVbmFy
eShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5ICpub2RlKQotewotICAgIHN3aXRjaCAobm9kZS0+
Z2V0T3AoKSkKLSAgICB7Ci0gICAgICBjYXNlIEVPcE5lZ2F0aXZlOiAgICAgICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICIoLSIsICIiLCAiKSIpOyAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFZlY3Rv
ckxvZ2ljYWxOb3Q6IG91dHB1dFRyaXBsZXQodmlzaXQsICIoISIsICIiLCAiKSIpOyAgYnJlYWs7
Ci0gICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIo
ISIsICIiLCAiKSIpOyAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6ICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIrKykiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVP
cFBvc3REZWNyZW1lbnQ6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICItLSkiKTsg
YnJlYWs7Ci0gICAgICBjYXNlIEVPcFByZUluY3JlbWVudDogICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICIoKysiLCAiIiwgIikiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFByZURlY3JlbWVudDog
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoLS0iLCAiIiwgIikiKTsgYnJlYWs7Ci0gICAgICBj
YXNlIEVPcENvbnZJbnRUb0Jvb2w6Ci0gICAgICBjYXNlIEVPcENvbnZGbG9hdFRvQm9vbDoKLSAg
ICAgICAgc3dpdGNoIChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6
ZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSAxOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAiYm9vbCgiLCAiIiwgIikiKTsgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMjogICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgImJvb2wyKCIsICIiLCAiKSIpOyBicmVhazsKLSAgICAgICAgICBjYXNl
IDM6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJib29sMygiLCAiIiwgIikiKTsgYnJlYWs7Ci0g
ICAgICAgICAgY2FzZSA0OiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYm9vbDQoIiwgIiIsICIp
Iik7IGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENvbnZCb29sVG9GbG9hdDoKLSAgICAgIGNh
c2UgRU9wQ29udkludFRvRmxvYXQ6Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgp
LT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2Ug
MTogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZsb2F0KCIsICIiLCAiKSIpOyAgYnJlYWs7Ci0g
ICAgICAgICAgY2FzZSAyOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZmxvYXQyKCIsICIiLCAi
KSIpOyBicmVhazsKLSAgICAgICAgICBjYXNlIDM6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJm
bG9hdDMoIiwgIiIsICIpIik7IGJyZWFrOwotICAgICAgICAgIGNhc2UgNDogICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgImZsb2F0NCgiLCAiIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
RU9wQ29udkZsb2F0VG9JbnQ6Ci0gICAgICBjYXNlIEVPcENvbnZCb29sVG9JbnQ6Ci0gICAgICAg
IHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkK
LSAgICAgICAgewotICAgICAgICAgIGNhc2UgMTogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImlu
dCgiLCAiIiwgIikiKTsgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMjogICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgImludDIoIiwgIiIsICIpIik7IGJyZWFrOwotICAgICAgICAgIGNhc2UgMzogICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgImludDMoIiwgIiIsICIpIik7IGJyZWFrOwotICAgICAgICAg
IGNhc2UgNDogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImludDQoIiwgIiIsICIpIik7IGJyZWFr
OwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEVPcFJhZGlhbnM6ICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICJyYWRpYW5zKCIsICIiLCAiKSIpOyAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BEZWdyZWVz
OiAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGVncmVlcygiLCAiIiwgIikiKTsgICBi
cmVhazsKLSAgICAgIGNhc2UgRU9wU2luOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgInNpbigiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENvczogICAg
ICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJjb3MoIiwgIiIsICIpIik7ICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBFT3BUYW46ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAidGFuKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wQXNpbjogICAg
ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFzaW4oIiwgIiIsICIpIik7ICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEVPcEFjb3M6ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICJhY29zKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BBdGFuOiAgICAg
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYXRhbigiLCAiIiwgIikiKTsgICAgICBicmVh
azsKLSAgICAgIGNhc2UgRU9wRXhwOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
ImV4cCgiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcExvZzogICAgICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJsb2coIiwgIiIsICIpIik7ICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBFT3BFeHAyOiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
ZXhwMigiLCAiIiwgIikiKTsgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wTG9nMjogICAgICAg
ICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImxvZzIoIiwgIiIsICIpIik7ICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEVPcFNxcnQ6ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJz
cXJ0KCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BJbnZlcnNlU3FydDog
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAicnNxcnQoIiwgIiIsICIpIik7ICAgICBicmVhazsK
LSAgICAgIGNhc2UgRU9wQWJzOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFi
cygiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFNpZ246ICAgICAgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJzaWduKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBFT3BGbG9vcjogICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZmxv
b3IoIiwgIiIsICIpIik7ICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wQ2VpbDogICAgICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImNlaWwoIiwgIiIsICIpIik7ICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEVPcEZyYWN0OiAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJmcmFj
KCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BMZW5ndGg6ICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibGVuZ3RoKCIsICIiLCAiKSIpOyAgICBicmVhazsKLSAg
ICAgIGNhc2UgRU9wTm9ybWFsaXplOiAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm5vcm1h
bGl6ZSgiLCAiIiwgIikiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcERGZHg6Ci0gICAgICAgIGlm
KG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1bmN0aW9uKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIiLCAiLCAwLjApIik7
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiZGR4KCIsICIiLCAiKSIpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBFT3BERmR5OgotICAgICAgICBpZihtSW5zaWRlRGlzY29udGludW91c0xv
b3AgfHwgbU91dHB1dExvZDBGdW5jdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgIigiLCAiIiwgIiwgMC4wKSIpOwotICAgICAgICB9Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgewotICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGR5KCIsICIi
LCAiKSIpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BGd2lkdGg6
Ci0gICAgICAgIGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1bmN0
aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIi
LCAiLCAwLjApIik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZndpZHRoKCIsICIiLCAiKSIpOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BBbnk6ICAgICAgICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiYW55KCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
RU9wQWxsOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFsbCgiLCAiIiwgIiki
KTsgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIE91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKFZp
c2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQotewotICAgIFRJbmZvU2lua0Jhc2Ug
Jm91dCA9IG1Cb2R5OwotCi0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQotICAgIHsKLSAgICAg
IGNhc2UgRU9wU2VxdWVuY2U6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtSW5zaWRlRnVu
Y3Rpb24pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2
ZShub2RlLT5nZXRMaW5lKCkuZmlyc3RfbGluZSk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJ7
XG4iOwotCi0gICAgICAgICAgICAgICAgbVNjb3BlRGVwdGgrKzsKLQotICAgICAgICAgICAgICAg
IGlmIChtU2NvcGVCcmFja2V0LnNpemUoKSA8IG1TY29wZURlcHRoKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgbVNjb3BlQnJhY2tldC5wdXNoX2JhY2soMCk7ICAgLy8g
TmV3IHNjb3BlIGxldmVsCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1TY29wZUJyYWNrZXRbbVNj
b3BlRGVwdGggLSAxXSsrOyAgIC8vIE5ldyBzY29wZSBhdCBleGlzdGluZyBsZXZlbAotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChUSW50ZXJtU2Vx
dWVuY2U6Oml0ZXJhdG9yIHNpdCA9IG5vZGUtPmdldFNlcXVlbmNlKCkuYmVnaW4oKTsgc2l0ICE9
IG5vZGUtPmdldFNlcXVlbmNlKCkuZW5kKCk7IHNpdCsrKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUoKCpzaXQpLT5nZXRMaW5lKCkuZmlyc3RfbGlu
ZSk7Ci0KLSAgICAgICAgICAgICAgICB0cmF2ZXJzZVN0YXRlbWVudHMoKnNpdCk7Ci0KLSAgICAg
ICAgICAgICAgICBvdXQgPDwgIjtcbiI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
IChtSW5zaWRlRnVuY3Rpb24pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0cHV0
TGluZURpcmVjdGl2ZShub2RlLT5nZXRMaW5lKCkubGFzdF9saW5lKTsKLSAgICAgICAgICAgICAg
ICBvdXQgPDwgIn1cbiI7Ci0KLSAgICAgICAgICAgICAgICBtU2NvcGVEZXB0aC0tOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIGNh
c2UgRU9wRGVjbGFyYXRpb246Ci0gICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKLSAgICAg
ICAgewotICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNl
cXVlbmNlKCk7Ci0gICAgICAgICAgICBUSW50ZXJtVHlwZWQgKnZhcmlhYmxlID0gc2VxdWVuY2Vb
MF0tPmdldEFzVHlwZWQoKTsKLQotICAgICAgICAgICAgaWYgKHZhcmlhYmxlICYmICh2YXJpYWJs
ZS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxVGVtcG9yYXJ5IHx8IHZhcmlhYmxlLT5nZXRRdWFsaWZp
ZXIoKSA9PSBFdnFHbG9iYWwpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICh2
YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgYWRkQ29uc3RydWN0b3IodmFyaWFibGUtPmdldFR5cGUoKSwgc2NvcGVk
U3RydWN0KHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCktPm5hbWUoKSksIE5VTEwpOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICghdmFyaWFibGUtPmdldEFz
U3ltYm9sTm9kZSgpIHx8IHZhcmlhYmxlLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCkg
IT0gIiIpICAgLy8gVmFyaWFibGUgZGVjbGFyYXRpb24KLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICghbUluc2lkZUZ1bmN0aW9uKQotICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgInN0YXRpYyAiOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgb3V0IDw8IHR5cGVTdHJpbmcodmFy
aWFibGUtPmdldFR5cGUoKSkgKyAiICI7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChUSW50
ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNpdCA9IHNlcXVlbmNlLmJlZ2luKCk7IHNpdCAhPSBzZXF1
ZW5jZS5lbmQoKTsgc2l0KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9ICgqc2l0KS0+Z2V0QXNTeW1ib2xOb2Rl
KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wpCi0gICAgICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sLT50cmF2ZXJz
ZSh0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgYXJyYXlTdHJpbmco
c3ltYm9sLT5nZXRUeXBlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAi
ID0gIiArIGluaXRpYWxpemVyKHZhcmlhYmxlLT5nZXRUeXBlKCkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqc2l0KS0+dHJhdmVyc2Uo
dGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICgqc2l0ICE9IHNlcXVlbmNlLmJhY2soKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBlbHNlIGlmICh2YXJpYWJsZS0+Z2V0QXNTeW1ib2xOb2RlKCkgJiYg
dmFyaWFibGUtPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKSA9PSAiIikgICAvLyBUeXBl
IChzdHJ1Y3QpIGRlY2xhcmF0aW9uCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAvLyBBbHJlYWR5IGFkZGVkIHRvIGNvbnN0cnVjdG9yIG1hcAotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlIGlmICh2YXJpYWJsZSAmJiAodmFyaWFibGUtPmdldFF1YWxpZmllcigp
ID09IEV2cVZhcnlpbmdPdXQgfHwgdmFyaWFibGUtPmdldFF1YWxpZmllcigpID09IEV2cUludmFy
aWFudFZhcnlpbmdPdXQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoVElu
dGVybVNlcXVlbmNlOjppdGVyYXRvciBzaXQgPSBzZXF1ZW5jZS5iZWdpbigpOyBzaXQgIT0gc2Vx
dWVuY2UuZW5kKCk7IHNpdCsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gKCpzaXQpLT5nZXRBc1N5bWJvbE5vZGUoKTsKLQot
ICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sKQotICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBWZXJ0ZXggKG91dHB1dCkgdmFyeWluZ3Mgd2hpY2gg
YXJlIGRlY2xhcmVkIGJ1dCBub3Qgd3JpdHRlbiB0byBzaG91bGQgc3RpbGwgYmUgZGVjbGFyZWQg
dG8gYWxsb3cgc3VjY2Vzc2Z1bCBsaW5raW5nCi0gICAgICAgICAgICAgICAgICAgICAgICBtUmVm
ZXJlbmNlZFZhcnlpbmdzW3N5bWJvbC0+Z2V0U3ltYm9sKCldID0gc3ltYm9sOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgKCpzaXQpLT50cmF2ZXJzZSh0aGlzKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHZp
c2l0ID09IEluVmlzaXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAiLCAiOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BQcm90b3R5cGU6Ci0gICAgICAg
IGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8IHR5
cGVTdHJpbmcobm9kZS0+Z2V0VHlwZSgpKSA8PCAiICIgPDwgZGVjb3JhdGUobm9kZS0+Z2V0TmFt
ZSgpKSA8PCAobU91dHB1dExvZDBGdW5jdGlvbiA/ICJMb2QwKCIgOiAiKCIpOwotCi0gICAgICAg
ICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IG5vZGUtPmdldFNlcXVlbmNlKCk7Ci0K
LSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgYXJndW1lbnRzLnNpemUo
KTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5
bWJvbCA9IGFyZ3VtZW50c1tpXS0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoc3ltYm9sKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgb3V0
IDw8IGFyZ3VtZW50U3RyaW5nKHN5bWJvbCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGkg
PCBhcmd1bWVudHMuc2l6ZSgpIC0gMSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBvdXQgPDwgIik7XG4iOwotCi0gICAgICAgICAgICAvLyBB
bHNvIHByb3RvdHlwZSB0aGUgTG9kMCB2YXJpYW50IGlmIG5lZWRlZAotICAgICAgICAgICAgaWYg
KG1Db250YWluc0xvb3BEaXNjb250aW51aXR5ICYmICFtT3V0cHV0TG9kMEZ1bmN0aW9uKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSB0cnVlOwot
ICAgICAgICAgICAgICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAgICAgICAgIG1P
dXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BD
b21tYTogICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIsICIsICIpIik7ICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BGdW5jdGlvbjoKLSAgICAgICAgewot
ICAgICAgICAgICAgVFN0cmluZyBuYW1lID0gVEZ1bmN0aW9uOjp1bm1hbmdsZU5hbWUobm9kZS0+
Z2V0TmFtZSgpKTsKLQotICAgICAgICAgICAgb3V0IDw8IHR5cGVTdHJpbmcobm9kZS0+Z2V0VHlw
ZSgpKSA8PCAiICI7Ci0KLSAgICAgICAgICAgIGlmIChuYW1lID09ICJtYWluIikKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImdsX21haW4oIjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwg
ZGVjb3JhdGUobmFtZSkgPDwgKG1PdXRwdXRMb2QwRnVuY3Rpb24gPyAiTG9kMCgiIDogIigiKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9
IG5vZGUtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3Vt
ZW50cyA9IHNlcXVlbmNlWzBdLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgpOwotCi0g
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXplKCk7
IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1i
b2wgPSBhcmd1bWVudHNbaV0tPmdldEFzU3ltYm9sTm9kZSgpOwotCi0gICAgICAgICAgICAgICAg
aWYgKHN5bWJvbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChz
eW1ib2wtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgYWRkQ29uc3RydWN0b3Ioc3ltYm9sLT5nZXRUeXBlKCksIHNj
b3BlZFN0cnVjdChzeW1ib2wtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+bmFtZSgpKSwgTlVMTCk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBvdXQgPDwgYXJn
dW1lbnRTdHJpbmcoc3ltYm9sKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGFyZ3Vt
ZW50cy5zaXplKCkgLSAxKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBvdXQgPDwgIiwgIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIG91dCA8PCAiKVxuIgotICAgICAgICAgICAgICAgICJ7XG4iOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc2VxdWVuY2Uuc2l6ZSgpID4gMSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBtSW5zaWRlRnVuY3Rpb24gPSB0cnVlOwotICAgICAgICAg
ICAgICAgIHNlcXVlbmNlWzFdLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgICAgICBtSW5z
aWRlRnVuY3Rpb24gPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgb3V0IDw8ICJ9XG4iOwotCi0gICAgICAgICAgICBpZiAobUNvbnRhaW5zTG9vcERpc2Nv
bnRpbnVpdHkgJiYgIW1PdXRwdXRMb2QwRnVuY3Rpb24pCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgaWYgKG5hbWUgIT0gIm1haW4iKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgbU91dHB1dExvZDBGdW5jdGlvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAgICAgICAgICAgICBtT3V0cHV0TG9k
MEZ1bmN0aW9uID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEVPcEZ1bmN0aW9uQ2FsbDoKLSAgICAgICAgewotICAgICAgICAgICAgVFN0cmluZyBu
YW1lID0gVEZ1bmN0aW9uOjp1bm1hbmdsZU5hbWUobm9kZS0+Z2V0TmFtZSgpKTsKLSAgICAgICAg
ICAgIGJvb2wgbG9kMCA9IG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1
bmN0aW9uOwotCi0gICAgICAgICAgICBpZiAobm9kZS0+aXNVc2VyRGVmaW5lZCgpKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAobG9kMCA/
ICJMb2QwKCIgOiAiKCIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQiKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2QwKQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2Uo
KS5zaXplKCkgPT0gMikKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5j
ZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEX2JpYXMgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgp
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRCgiOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNl
KCkuc2l6ZSgpID09IDIpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRMb2QwID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNl
cXVlbmNlKCkuc2l6ZSgpID09IDMpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJF
QUNIQUJMRSgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUy
RExvZDAoIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlMkRQcm9qIikKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6
ZSgpID09IDIpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNl
KCkuc2l6ZSgpID09IDMpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXMgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJM
RSgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRFByb2oo
IjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRT
ZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDAgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
bm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKLSAgICAgICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QwX2Jp
YXMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgImdsX3RleHR1cmUyRFByb2pMb2QwKCI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZUN1
YmUiKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2QwKQot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5v
ZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCi0gICAgICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZV9iaWFzID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90
ZXh0dXJlQ3ViZSgiOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCi0gICAgICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDAgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJl
TG9kMF9iaWFzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0IDw8ICJnbF90ZXh0dXJlQ3ViZUxvZDAoIjsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0
dXJlMkRMb2QiKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJETG9kID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRMb2QoIjsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJEUHJv
akxvZCIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRQcm9qTG9kKCI7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVD
dWJlTG9kIikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlTG9kID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlQ3ViZUxvZCgiOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJndW1lbnRzID0gbm9kZS0+
Z2V0U2VxdWVuY2UoKTsKLQotICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJh
dG9yIGFyZyA9IGFyZ3VtZW50cy5iZWdpbigpOyBhcmcgIT0gYXJndW1lbnRzLmVuZCgpOyBhcmcr
KykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hf
SExTTDExX09VVFBVVCAmJiBJc1NhbXBsZXIoKCphcmcpLT5nZXRBc1R5cGVkKCktPmdldEJhc2lj
VHlwZSgpKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG91dCA8PCAi
dGV4dHVyZV8iOwotICAgICAgICAgICAgICAgICAgICAoKmFyZyktPnRyYXZlcnNlKHRoaXMpOwot
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgc2FtcGxlcl8iOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICgqYXJnKS0+dHJhdmVyc2UodGhpcyk7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoYXJnIDwgYXJndW1lbnRzLmVuZCgpIC0gMSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgb3V0IDw8ICIpIjsKLQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BQYXJh
bWV0ZXJzOiAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIsICIsICIpXG57XG4iKTsg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OgotICAgICAg
ICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJ2ZWMxIiwgJm5vZGUtPmdldFNlcXVl
bmNlKCkpOwotICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidmVjMSgiLCAiIiwgIikiKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzI6Ci0gICAgICAgIGFk
ZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgInZlYzIiLCAmbm9kZS0+Z2V0U2VxdWVuY2Uo
KSk7Ci0gICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ2ZWMyKCIsICIsICIsICIpIik7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMzOgotICAgICAgICBhZGRD
b25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJ2ZWMzIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkp
OwotICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidmVjMygiLCAiLCAiLCAiKSIpOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjNDoKLSAgICAgICAgYWRkQ29u
c3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAidmVjNCIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsK
LSAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInZlYzQoIiwgIiwgIiwgIikiKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6Ci0gICAgICAgIGFkZENvbnN0
cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgImJ2ZWMxIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOwot
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYnZlYzEoIiwgIiIsICIpIik7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMjoKLSAgICAgICAgYWRkQ29uc3Ry
dWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiYnZlYzIiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7Ci0g
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJidmVjMigiLCAiLCAiLCAiKSIpOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzM6Ci0gICAgICAgIGFkZENvbnN0
cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgImJ2ZWMzIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOwot
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYnZlYzMoIiwgIiwgIiwgIikiKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWM0OgotICAgICAgICBhZGRDb25z
dHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJidmVjNCIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsK
LSAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImJ2ZWM0KCIsICIsICIsICIpIik7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6Ci0gICAgICAgIGFkZENvbnN0
cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgIml2ZWMxIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOwot
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaXZlYzEoIiwgIiIsICIpIik7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMjoKLSAgICAgICAgYWRkQ29uc3Ry
dWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiaXZlYzIiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7Ci0g
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJpdmVjMigiLCAiLCAiLCAiKSIpOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzM6Ci0gICAgICAgIGFkZENvbnN0
cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgIml2ZWMzIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOwot
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaXZlYzMoIiwgIiwgIiwgIikiKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWM0OgotICAgICAgICBhZGRDb25z
dHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJpdmVjNCIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsK
LSAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIml2ZWM0KCIsICIsICIsICIpIik7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQyOgotICAgICAgICBhZGRDb25z
dHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJtYXQyIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOwot
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibWF0MigiLCAiLCAiLCAiKSIpOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MzoKLSAgICAgICAgYWRkQ29uc3Ry
dWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAibWF0MyIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKLSAg
ICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm1hdDMoIiwgIiwgIiwgIikiKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6IAotICAgICAgICBhZGRDb25zdHJ1
Y3Rvcihub2RlLT5nZXRUeXBlKCksICJtYXQ0IiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOwotICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibWF0NCgiLCAiLCAiLCAiKSIpOwotICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgRU9wQ29uc3RydWN0U3RydWN0OgotICAgICAgICBhZGRDb25zdHJ1
Y3Rvcihub2RlLT5nZXRUeXBlKCksIHNjb3BlZFN0cnVjdChub2RlLT5nZXRUeXBlKCkuZ2V0U3Ry
dWN0KCktPm5hbWUoKSksICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKLSAgICAgICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgc3RydWN0TG9va3VwKG5vZGUtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+bmFt
ZSgpKSArICJfY3RvcigiLCAiLCAiLCAiKSIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
RU9wTGVzc1RoYW46ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIDwgIiwgIiki
KTsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjogICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPiAiLCAiKSIpOyAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6ICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICIoIiwgIiA8PSAiLCAiKSIpOyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
RU9wR3JlYXRlclRoYW5FcXVhbDogb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiID49ICIsICIp
Iik7ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BWZWN0b3JFcXVhbDogICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPT0gIiwgIikiKTsgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEVPcFZlY3Rvck5vdEVxdWFsOiAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICIoIiwgIiAhPSAiLCAiKSIpOyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
RU9wTW9kOgotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGxvb2sgYXQgdGhl
IG51bWJlciBvZiBjb21wb25lbnRzIGluIGJvdGggYXJndW1lbnRzCi0gICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPmdldFNlcXVlbmNlKClbMF0tPmdldEFzVHlwZWQoKS0+Z2V0Tm9taW5hbFNpemUo
KSAqIDEwCi0gICAgICAgICAgICAgICAgICAgICArIG5vZGUtPmdldFNlcXVlbmNlKClbMV0tPmdl
dEFzVHlwZWQoKS0+Z2V0Tm9taW5hbFNpemUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgY2FzZSAxMTogbVVzZXNNb2QxID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
MjI6IG1Vc2VzTW9kMnYgPSB0cnVlOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSAyMTogbVVz
ZXNNb2QyZiA9IHRydWU7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIDMzOiBtVXNlc01vZDN2
ID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgMzE6IG1Vc2VzTW9kM2YgPSB0cnVl
OyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSA0NDogbVVzZXNNb2Q0diA9IHRydWU7IGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIDQxOiBtVXNlc01vZDRmID0gdHJ1ZTsgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJtb2QoIiwgIiwgIiwgIikiKTsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wUG93OiAgICAgICAgICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgInBvdygiLCAiLCAiLCAiKSIpOyAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBFT3BBdGFuOgotICAgICAgICBBU1NFUlQobm9kZS0+Z2V0U2VxdWVuY2UoKS5z
aXplKCkgPT0gMik7ICAgLy8gYXRhbih4KSBpcyBhIHVuYXJ5IG9wZXJhdG9yCi0gICAgICAgIHN3
aXRjaCAobm9kZS0+Z2V0U2VxdWVuY2UoKVswXS0+Z2V0QXNUeXBlZCgpLT5nZXROb21pbmFsU2l6
ZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSAxOiBtVXNlc0F0YW4yXzEgPSB0cnVlOyBi
cmVhazsKLSAgICAgICAgICBjYXNlIDI6IG1Vc2VzQXRhbjJfMiA9IHRydWU7IGJyZWFrOwotICAg
ICAgICAgIGNhc2UgMzogbVVzZXNBdGFuMl8zID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSA0OiBtVXNlc0F0YW4yXzQgPSB0cnVlOyBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJhdGFu
eXgoIiwgIiwgIiwgIikiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcE1pbjogICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJtaW4oIiwgIiwgIiwgIikiKTsgICAgICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBFT3BNYXg6ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAibWF4KCIsICIsICIsICIpIik7ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wQ2xh
bXA6ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImNsYW1wKCIsICIsICIsICIpIik7ICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcE1peDogICAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJsZXJwKCIsICIsICIsICIpIik7ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBF
T3BTdGVwOiAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAic3RlcCgiLCAiLCAiLCAiKSIp
OyAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wU21vb3RoU3RlcDogICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgInNtb290aHN0ZXAoIiwgIiwgIiwgIikiKTsgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEVPcERpc3RhbmNlOiAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkaXN0YW5jZSgiLCAi
LCAiLCAiKSIpOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BEb3Q6ICAgICAgICAgICBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAiZG90KCIsICIsICIsICIpIik7ICAgICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgRU9wQ3Jvc3M6ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImNyb3NzKCIs
ICIsICIsICIpIik7ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcEZhY2VGb3J3YXJkOgot
ICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldFNlcXVlbmNlKClbMF0tPmdl
dEFzVHlwZWQoKS0+Z2V0Tm9taW5hbFNpemUoKSkgICAvLyBOdW1iZXIgb2YgY29tcG9uZW50cyBp
biB0aGUgZmlyc3QgYXJndW1lbnQKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgMTog
bVVzZXNGYWNlZm9yd2FyZDEgPSB0cnVlOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMjogbVVz
ZXNGYWNlZm9yd2FyZDIgPSB0cnVlOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMzogbVVzZXNG
YWNlZm9yd2FyZDMgPSB0cnVlOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgNDogbVVzZXNGYWNl
Zm9yd2FyZDQgPSB0cnVlOyBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICJmYWNlZm9yd2FyZCgiLCAiLCAiLCAiKSIpOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBFT3BSZWZsZWN0OiAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAicmVmbGVjdCgiLCAiLCAiLCAiKSIpOyAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wUmVm
cmFjdDogICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInJlZnJhY3QoIiwgIiwgIiwgIikiKTsg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcE11bDogICAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICIoIiwgIiAqICIsICIpIik7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBP
dXRwdXRITFNMOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAq
bm9kZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKLQotICAgIGlmIChub2Rl
LT51c2VzVGVybmFyeU9wZXJhdG9yKCkpCi0gICAgewotICAgICAgICBvdXQgPDwgInMiIDw8IG1V
bmZvbGRTaG9ydENpcmN1aXQtPmdldE5leHRUZW1wb3JhcnlJbmRleCgpOwotICAgIH0KLSAgICBl
bHNlICAvLyBpZi9lbHNlIHN0YXRlbWVudAotICAgIHsKLSAgICAgICAgbVVuZm9sZFNob3J0Q2ly
Y3VpdC0+dHJhdmVyc2Uobm9kZS0+Z2V0Q29uZGl0aW9uKCkpOwotCi0gICAgICAgIG91dCA8PCAi
aWYgKCI7Ci0KLSAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOwot
Ci0gICAgICAgIG91dCA8PCAiKVxuIjsKLSAgICAgICAgCi0gICAgICAgIG91dHB1dExpbmVEaXJl
Y3RpdmUobm9kZS0+Z2V0TGluZSgpLmZpcnN0X2xpbmUpOwotICAgICAgICBvdXQgPDwgIntcbiI7
Ci0KLSAgICAgICAgYm9vbCBkaXNjYXJkID0gZmFsc2U7Ci0KLSAgICAgICAgaWYgKG5vZGUtPmdl
dFRydWVCbG9jaygpKQotICAgICAgICB7Ci0gICAgICAgICAgICB0cmF2ZXJzZVN0YXRlbWVudHMo
bm9kZS0+Z2V0VHJ1ZUJsb2NrKCkpOwotCi0gICAgICAgICAgICAvLyBEZXRlY3QgdHJ1ZSBkaXNj
YXJkCi0gICAgICAgICAgICBkaXNjYXJkID0gKGRpc2NhcmQgfHwgRmluZERpc2NhcmQ6OnNlYXJj
aChub2RlLT5nZXRUcnVlQmxvY2soKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgb3V0cHV0TGlu
ZURpcmVjdGl2ZShub2RlLT5nZXRMaW5lKCkuZmlyc3RfbGluZSk7Ci0gICAgICAgIG91dCA8PCAi
O1xufVxuIjsKLQotICAgICAgICBpZiAobm9kZS0+Z2V0RmFsc2VCbG9jaygpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBvdXQgPDwgImVsc2VcbiI7Ci0KLSAgICAgICAgICAgIG91dHB1dExpbmVE
aXJlY3RpdmUobm9kZS0+Z2V0RmFsc2VCbG9jaygpLT5nZXRMaW5lKCkuZmlyc3RfbGluZSk7Ci0g
ICAgICAgICAgICBvdXQgPDwgIntcbiI7Ci0KLSAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3Rp
dmUobm9kZS0+Z2V0RmFsc2VCbG9jaygpLT5nZXRMaW5lKCkuZmlyc3RfbGluZSk7Ci0gICAgICAg
ICAgICB0cmF2ZXJzZVN0YXRlbWVudHMobm9kZS0+Z2V0RmFsc2VCbG9jaygpKTsKLQotICAgICAg
ICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRGYWxzZUJsb2NrKCktPmdldExpbmUo
KS5maXJzdF9saW5lKTsKLSAgICAgICAgICAgIG91dCA8PCAiO1xufVxuIjsKLQotICAgICAgICAg
ICAgLy8gRGV0ZWN0IGZhbHNlIGRpc2NhcmQKLSAgICAgICAgICAgIGRpc2NhcmQgPSAoZGlzY2Fy
ZCB8fCBGaW5kRGlzY2FyZDo6c2VhcmNoKG5vZGUtPmdldEZhbHNlQmxvY2soKSkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gQU5HTEUgaXNzdWUgNDg2OiBEZXRlY3QgcHJvYmxlbWF0aWMgY29u
ZGl0aW9uYWwgZGlzY2FyZAotICAgICAgICBpZiAoZGlzY2FyZCAmJiBGaW5kU2lkZUVmZmVjdFJl
d3JpdGluZzo6c2VhcmNoKG5vZGUpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtVXNlc0Rpc2Nh
cmRSZXdyaXRpbmcgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi12b2lkIE91dHB1dEhMU0w6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3Rh
bnRVbmlvbiAqbm9kZSkKLXsKLSAgICB3cml0ZUNvbnN0YW50VW5pb24obm9kZS0+Z2V0VHlwZSgp
LCBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpKTsKLX0KLQotYm9vbCBPdXRwdXRITFNMOjp2
aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKQotewotICAgIGJvb2wgd2Fz
RGlzY29udGludW91cyA9IG1JbnNpZGVEaXNjb250aW51b3VzTG9vcDsKLQotICAgIGlmIChtQ29u
dGFpbnNMb29wRGlzY29udGludWl0eSAmJiAhbUluc2lkZURpc2NvbnRpbnVvdXNMb29wKQotICAg
IHsKLSAgICAgICAgbUluc2lkZURpc2NvbnRpbnVvdXNMb29wID0gY29udGFpbnNMb29wRGlzY29u
dGludWl0eShub2RlKTsKLSAgICB9Ci0KLSAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlf
T1VUUFVUKQotICAgIHsKLSAgICAgICAgaWYgKGhhbmRsZUV4Y2Vzc2l2ZUxvb3Aobm9kZSkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OwotCi0gICAgaWYgKG5vZGUtPmdldFR5cGUo
KSA9PSBFTG9vcERvV2hpbGUpCi0gICAgewotICAgICAgICBvdXQgPDwgIntkb1xuIjsKLQotICAg
ICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKS5maXJzdF9saW5lKTsKLSAg
ICAgICAgb3V0IDw8ICJ7XG4iOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBvdXQg
PDwgIntmb3IoIjsKLSAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5nZXRJbml0KCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG5vZGUtPmdldEluaXQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBvdXQgPDwgIjsgIjsKLQotICAgICAgICBpZiAobm9kZS0+Z2V0Q29u
ZGl0aW9uKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50
cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIG91dCA8PCAiOyAiOwotCi0gICAg
ICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5v
ZGUtPmdldEV4cHJlc3Npb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBvdXQgPDwgIilcbiI7Ci0gICAgICAgIAotICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5v
ZGUtPmdldExpbmUoKS5maXJzdF9saW5lKTsKLSAgICAgICAgb3V0IDw8ICJ7XG4iOwotICAgIH0K
LQotICAgIGlmIChub2RlLT5nZXRCb2R5KCkpCi0gICAgewotICAgICAgICB0cmF2ZXJzZVN0YXRl
bWVudHMobm9kZS0+Z2V0Qm9keSgpKTsKLSAgICB9Ci0KLSAgICBvdXRwdXRMaW5lRGlyZWN0aXZl
KG5vZGUtPmdldExpbmUoKS5maXJzdF9saW5lKTsKLSAgICBvdXQgPDwgIjt9XG4iOwotCi0gICAg
aWYgKG5vZGUtPmdldFR5cGUoKSA9PSBFTG9vcERvV2hpbGUpCi0gICAgewotICAgICAgICBvdXRw
dXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldENvbmRpdGlvbigpLT5nZXRMaW5lKCkuZmlyc3RfbGlu
ZSk7Ci0gICAgICAgIG91dCA8PCAid2hpbGUoXG4iOwotCi0gICAgICAgIG5vZGUtPmdldENvbmRp
dGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKLQotICAgICAgICBvdXQgPDwgIik7IjsKLSAgICB9Ci0K
LSAgICBvdXQgPDwgIn1cbiI7Ci0KLSAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSB3YXNE
aXNjb250aW51b3VzOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIE91dHB1dEhMU0w6
OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2RlKQotewotICAgIFRJ
bmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OwotCi0gICAgc3dpdGNoIChub2RlLT5nZXRGbG93T3Ao
KSkKLSAgICB7Ci0gICAgICBjYXNlIEVPcEtpbGw6Ci0gICAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICJkaXNjYXJkO1xuIiwgIiIsICIiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVP
cEJyZWFrOgotICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChtRXhjZXNzaXZlTG9vcEluZGV4KQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG91dCA8PCAie0JyZWFrIjsKLSAgICAgICAgICAgICAgICBtRXhjZXNzaXZlTG9vcElu
ZGV4LT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIiA9IHRydWU7IGJy
ZWFrO31cbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJicmVhaztcbiI7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENvbnRpbnVlOiBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiY29udGludWU7XG4iLCAiIiwgIiIpOyBicmVhazsKLSAgICAgIGNhc2UgRU9w
UmV0dXJuOgotICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgb3V0IDw8ICJyZXR1cm4gIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgInJldHVybjtcbiI7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZp
c2l0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Z2V0RXhwcmVzc2lvbigpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiO1xuIjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgT3V0cHV0SExTTDo6dHJh
dmVyc2VTdGF0ZW1lbnRzKFRJbnRlcm1Ob2RlICpub2RlKQotewotICAgIGlmIChpc1NpbmdsZVN0
YXRlbWVudChub2RlKSkKLSAgICB7Ci0gICAgICAgIG1VbmZvbGRTaG9ydENpcmN1aXQtPnRyYXZl
cnNlKG5vZGUpOwotICAgIH0KLQotICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOwotfQotCi1ib29s
IE91dHB1dEhMU0w6OmlzU2luZ2xlU3RhdGVtZW50KFRJbnRlcm1Ob2RlICpub2RlKQotewotICAg
IFRJbnRlcm1BZ2dyZWdhdGUgKmFnZ3JlZ2F0ZSA9IG5vZGUtPmdldEFzQWdncmVnYXRlKCk7Ci0K
LSAgICBpZiAoYWdncmVnYXRlKQotICAgIHsKLSAgICAgICAgaWYgKGFnZ3JlZ2F0ZS0+Z2V0T3Ao
KSA9PSBFT3BTZXF1ZW5jZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChUSW50
ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNpdCA9IGFnZ3JlZ2F0ZS0+Z2V0U2VxdWVuY2UoKS5iZWdp
bigpOyBzaXQgIT0gYWdncmVnYXRlLT5nZXRTZXF1ZW5jZSgpLmVuZCgpOyBzaXQrKykKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIWlzU2luZ2xlU3RhdGVtZW50KCpzaXQpKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gSGFuZGxlIGxv
b3BzIHdpdGggbW9yZSB0aGFuIDI1NCBpdGVyYXRpb25zICh1bnN1cHBvcnRlZCBieSBEM0Q5KSBi
eSBzcGxpdHRpbmcgdGhlbQotLy8gKFRoZSBEM0QgZG9jdW1lbnRhdGlvbiBzYXlzIDI1NSBpdGVy
YXRpb25zLCBidXQgdGhlIGNvbXBpbGVyIGNvbXBsYWlucyBhdCBhbnl0aGluZyBtb3JlIHRoYW4g
MjU0KS4KLWJvb2wgT3V0cHV0SExTTDo6aGFuZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAq
bm9kZSkKLXsKLSAgICBjb25zdCBpbnQgTUFYX0xPT1BfSVRFUkFUSU9OUyA9IDI1NDsKLSAgICBU
SW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKLQotICAgIC8vIFBhcnNlIGxvb3BzIG9mIHRoZSBm
b3JtOgotICAgIC8vIGZvcihpbnQgaW5kZXggPSBpbml0aWFsOyBpbmRleCBbY29tcGFyYXRvcl0g
bGltaXQ7IGluZGV4ICs9IGluY3JlbWVudCkKLSAgICBUSW50ZXJtU3ltYm9sICppbmRleCA9IE5V
TEw7Ci0gICAgVE9wZXJhdG9yIGNvbXBhcmF0b3IgPSBFT3BOdWxsOwotICAgIGludCBpbml0aWFs
ID0gMDsKLSAgICBpbnQgbGltaXQgPSAwOwotICAgIGludCBpbmNyZW1lbnQgPSAwOwotCi0gICAg
Ly8gUGFyc2UgaW5kZXggbmFtZSBhbmQgaW50aWFsIHZhbHVlCi0gICAgaWYgKG5vZGUtPmdldElu
aXQoKSkKLSAgICB7Ci0gICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUgKmluaXQgPSBub2RlLT5nZXRJ
bml0KCktPmdldEFzQWdncmVnYXRlKCk7Ci0KLSAgICAgICAgaWYgKGluaXQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2UgPSBpbml0LT5nZXRTZXF1ZW5j
ZSgpOwotICAgICAgICAgICAgVEludGVybVR5cGVkICp2YXJpYWJsZSA9IHNlcXVlbmNlWzBdLT5n
ZXRBc1R5cGVkKCk7Ci0KLSAgICAgICAgICAgIGlmICh2YXJpYWJsZSAmJiB2YXJpYWJsZS0+Z2V0
UXVhbGlmaWVyKCkgPT0gRXZxVGVtcG9yYXJ5KQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIFRJbnRlcm1CaW5hcnkgKmFzc2lnbiA9IHZhcmlhYmxlLT5nZXRBc0JpbmFyeU5vZGUoKTsK
LQotICAgICAgICAgICAgICAgIGlmIChhc3NpZ24tPmdldE9wKCkgPT0gRU9wSW5pdGlhbGl6ZSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5
bWJvbCA9IGFzc2lnbi0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAgICAgICAgICAg
ICAgICAgICAgVEludGVybUNvbnN0YW50VW5pb24gKmNvbnN0YW50ID0gYXNzaWduLT5nZXRSaWdo
dCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoc3lt
Ym9sICYmIGNvbnN0YW50KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoY29uc3RhbnQtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAmJiBjb25zdGFu
dC0+Z2V0Tm9taW5hbFNpemUoKSA9PSAxKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gc3ltYm9sOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluaXRpYWwgPSBjb25zdGFudC0+Z2V0SUNvbnN0KDApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gUGFyc2UgY29tcGFy
YXRvciBhbmQgbGltaXQgdmFsdWUKLSAgICBpZiAoaW5kZXggIT0gTlVMTCAmJiBub2RlLT5nZXRD
b25kaXRpb24oKSkKLSAgICB7Ci0gICAgICAgIFRJbnRlcm1CaW5hcnkgKnRlc3QgPSBub2RlLT5n
ZXRDb25kaXRpb24oKS0+Z2V0QXNCaW5hcnlOb2RlKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAo
dGVzdCAmJiB0ZXN0LT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRJZCgpID09IGlu
ZGV4LT5nZXRJZCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlv
biAqY29uc3RhbnQgPSB0ZXN0LT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLQot
ICAgICAgICAgICAgaWYgKGNvbnN0YW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGlmIChjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5nZXRO
b21pbmFsU2l6ZSgpID09IDEpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBjb21wYXJhdG9yID0gdGVzdC0+Z2V0T3AoKTsKLSAgICAgICAgICAgICAgICAgICAgbGltaXQg
PSBjb25zdGFudC0+Z2V0SUNvbnN0KDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFBhcnNlIGluY3JlbWVudAotICAgIGlmIChp
bmRleCAhPSBOVUxMICYmIGNvbXBhcmF0b3IgIT0gRU9wTnVsbCAmJiBub2RlLT5nZXRFeHByZXNz
aW9uKCkpCi0gICAgewotICAgICAgICBUSW50ZXJtQmluYXJ5ICpiaW5hcnlUZXJtaW5hbCA9IG5v
ZGUtPmdldEV4cHJlc3Npb24oKS0+Z2V0QXNCaW5hcnlOb2RlKCk7Ci0gICAgICAgIFRJbnRlcm1V
bmFyeSAqdW5hcnlUZXJtaW5hbCA9IG5vZGUtPmdldEV4cHJlc3Npb24oKS0+Z2V0QXNVbmFyeU5v
ZGUoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChiaW5hcnlUZXJtaW5hbCkKLSAgICAgICAgewot
ICAgICAgICAgICAgVE9wZXJhdG9yIG9wID0gYmluYXJ5VGVybWluYWwtPmdldE9wKCk7Ci0gICAg
ICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqY29uc3RhbnQgPSBiaW5hcnlUZXJtaW5hbC0+
Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0KLSAgICAgICAgICAgIGlmIChjb25z
dGFudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29uc3RhbnQtPmdldEJh
c2ljVHlwZSgpID09IEVidEludCAmJiBjb25zdGFudC0+Z2V0Tm9taW5hbFNpemUoKSA9PSAxKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVlID0gY29uc3Rh
bnQtPmdldElDb25zdCgwKTsKLQotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBFT3BBZGRBc3Np
Z246IGluY3JlbWVudCA9IHZhbHVlOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBFT3BTdWJBc3NpZ246IGluY3JlbWVudCA9IC12YWx1ZTsgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5JTVBMRU1FTlRFRCgpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVs
c2UgaWYgKHVuYXJ5VGVybWluYWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFRPcGVyYXRvciBv
cCA9IHVuYXJ5VGVybWluYWwtPmdldE9wKCk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAob3ApCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDogaW5jcmVt
ZW50ID0gMTsgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6IGlu
Y3JlbWVudCA9IC0xOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6
ICBpbmNyZW1lbnQgPSAxOyAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRU9wUHJlRGVjcmVt
ZW50OiAgaW5jcmVtZW50ID0gLTE7IGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTklN
UExFTUVOVEVEKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
aW5kZXggIT0gTlVMTCAmJiBjb21wYXJhdG9yICE9IEVPcE51bGwgJiYgaW5jcmVtZW50ICE9IDAp
Ci0gICAgewotICAgICAgICBpZiAoY29tcGFyYXRvciA9PSBFT3BMZXNzVGhhbkVxdWFsKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBjb21wYXJhdG9yID0gRU9wTGVzc1RoYW47Ci0gICAgICAgICAg
ICBsaW1pdCArPSAxOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNvbXBhcmF0b3IgPT0gRU9w
TGVzc1RoYW4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBpdGVyYXRpb25zID0gKGxpbWl0
IC0gaW5pdGlhbCkgLyBpbmNyZW1lbnQ7Ci0KLSAgICAgICAgICAgIGlmIChpdGVyYXRpb25zIDw9
IE1BWF9MT09QX0lURVJBVElPTlMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAgIC8vIE5vdCBhbiBleGNlc3NpdmUgbG9vcAotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpyZXN0b3JlSW5kZXggPSBtRXhjZXNzaXZlTG9vcElu
ZGV4OwotICAgICAgICAgICAgbUV4Y2Vzc2l2ZUxvb3BJbmRleCA9IGluZGV4OwotCi0gICAgICAg
ICAgICBvdXQgPDwgIntpbnQgIjsKLSAgICAgICAgICAgIGluZGV4LT50cmF2ZXJzZSh0aGlzKTsK
LSAgICAgICAgICAgIG91dCA8PCAiO1xuIgotICAgICAgICAgICAgICAgICAgICJib29sIEJyZWFr
IjsKLSAgICAgICAgICAgIGluZGV4LT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgIG91dCA8
PCAiID0gZmFsc2U7XG4iOwotCi0gICAgICAgICAgICBib29sIGZpcnN0TG9vcEZyYWdtZW50ID0g
dHJ1ZTsKLQotICAgICAgICAgICAgd2hpbGUgKGl0ZXJhdGlvbnMgPiAwKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGludCBjbGFtcGVkTGltaXQgPSBpbml0aWFsICsgaW5jcmVtZW50
ICogc3RkOjptaW4oTUFYX0xPT1BfSVRFUkFUSU9OUywgaXRlcmF0aW9ucyk7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoIWZpcnN0TG9vcEZyYWdtZW50KQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgb3V0IDw8ICJpZiAoIUJyZWFrIjsKLSAgICAgICAgICAgICAgICAgICAg
aW5kZXgtPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIikge1xu
IjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoaXRlcmF0aW9ucyA8
PSBNQVhfTE9PUF9JVEVSQVRJT05TKSAgIC8vIExhc3QgbG9vcCBmcmFnbWVudAotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbUV4Y2Vzc2l2ZUxvb3BJbmRleCA9IE5VTEw7
ICAgLy8gU3RvcHMgc2V0dGluZyB0aGUgQnJlYWsgZmxhZwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBmb3IoaW50IGluZGV4ID0gaW5pdGlh
bDsgaW5kZXggPCBjbGFtcGVkTGltaXQ7IGluZGV4ICs9IGluY3JlbWVudCkKLQotICAgICAgICAg
ICAgICAgIG91dCA8PCAiZm9yKCI7Ci0gICAgICAgICAgICAgICAgaW5kZXgtPnRyYXZlcnNlKHRo
aXMpOwotICAgICAgICAgICAgICAgIG91dCA8PCAiID0gIjsKLSAgICAgICAgICAgICAgICBvdXQg
PDwgaW5pdGlhbDsKLQotICAgICAgICAgICAgICAgIG91dCA8PCAiOyAiOwotICAgICAgICAgICAg
ICAgIGluZGV4LT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIiA8ICI7
Ci0gICAgICAgICAgICAgICAgb3V0IDw8IGNsYW1wZWRMaW1pdDsKLQotICAgICAgICAgICAgICAg
IG91dCA8PCAiOyAiOwotICAgICAgICAgICAgICAgIGluZGV4LT50cmF2ZXJzZSh0aGlzKTsKLSAg
ICAgICAgICAgICAgICBvdXQgPDwgIiArPSAiOwotICAgICAgICAgICAgICAgIG91dCA8PCBpbmNy
ZW1lbnQ7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIpXG4iOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0TGluZSgpLmZpcnN0
X2xpbmUpOwotICAgICAgICAgICAgICAgIG91dCA8PCAie1xuIjsKLQotICAgICAgICAgICAgICAg
IGlmIChub2RlLT5nZXRCb2R5KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBub2RlLT5nZXRCb2R5KCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0TGluZSgpLmZp
cnN0X2xpbmUpOwotICAgICAgICAgICAgICAgIG91dCA8PCAiO31cbiI7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoIWZpcnN0TG9vcEZyYWdtZW50KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgb3V0IDw8ICJ9XG4iOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIGZpcnN0TG9vcEZyYWdtZW50ID0gZmFsc2U7Ci0KLSAgICAgICAgICAgICAgICBpbml0
aWFsICs9IE1BWF9MT09QX0lURVJBVElPTlMgKiBpbmNyZW1lbnQ7Ci0gICAgICAgICAgICAgICAg
aXRlcmF0aW9ucyAtPSBNQVhfTE9PUF9JVEVSQVRJT05TOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBvdXQgPDwgIn0iOwotCi0gICAgICAgICAgICBtRXhjZXNzaXZl
TG9vcEluZGV4ID0gcmVzdG9yZUluZGV4OwotCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgICAgICBlbHNlIFVOSU1QTEVNRU5URUQoKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gZmFsc2U7ICAgLy8gTm90IGhhbmRsZWQgYXMgYW4gZXhjZXNzaXZlIGxvb3AKLX0KLQotdm9p
ZCBPdXRwdXRITFNMOjpvdXRwdXRUcmlwbGV0KFZpc2l0IHZpc2l0LCBjb25zdCBUU3RyaW5nICZw
cmVTdHJpbmcsIGNvbnN0IFRTdHJpbmcgJmluU3RyaW5nLCBjb25zdCBUU3RyaW5nICZwb3N0U3Ry
aW5nKQotewotICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OwotCi0gICAgaWYgKHZpc2l0
ID09IFByZVZpc2l0KQotICAgIHsKLSAgICAgICAgb3V0IDw8IHByZVN0cmluZzsKLSAgICB9Ci0g
ICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCkKLSAgICB7Ci0gICAgICAgIG91dCA8PCBpblN0
cmluZzsKLSAgICB9Ci0gICAgZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZpc2l0KQotICAgIHsKLSAg
ICAgICAgb3V0IDw8IHBvc3RTdHJpbmc7Ci0gICAgfQotfQotCi12b2lkIE91dHB1dEhMU0w6Om91
dHB1dExpbmVEaXJlY3RpdmUoaW50IGxpbmUpCi17Ci0gICAgaWYgKChtQ29udGV4dC5jb21waWxl
T3B0aW9ucyAmIFNIX0xJTkVfRElSRUNUSVZFUykgJiYgKGxpbmUgPiAwKSkKLSAgICB7Ci0gICAg
ICAgIG1Cb2R5IDw8ICJcbiI7Ci0gICAgICAgIG1Cb2R5IDw8ICIjbGluZSAiIDw8IGxpbmU7Ci0K
LSAgICAgICAgaWYgKG1Db250ZXh0LnNvdXJjZVBhdGgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG1Cb2R5IDw8ICIgXCIiIDw8IG1Db250ZXh0LnNvdXJjZVBhdGggPDwgIlwiIjsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgbUJvZHkgPDwgIlxuIjsKLSAgICB9Ci19Ci0KLVRTdHJpbmcg
T3V0cHV0SExTTDo6YXJndW1lbnRTdHJpbmcoY29uc3QgVEludGVybVN5bWJvbCAqc3ltYm9sKQot
ewotICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gc3ltYm9sLT5nZXRRdWFsaWZpZXIoKTsKLSAg
ICBjb25zdCBUVHlwZSAmdHlwZSA9IHN5bWJvbC0+Z2V0VHlwZSgpOwotICAgIFRTdHJpbmcgbmFt
ZSA9IHN5bWJvbC0+Z2V0U3ltYm9sKCk7Ci0KLSAgICBpZiAobmFtZS5lbXB0eSgpKSAgIC8vIEhM
U0wgZGVtYW5kcyBuYW1lZCBhcmd1bWVudHMsIGFsc28gZm9yIHByb3RvdHlwZXMKLSAgICB7Ci0g
ICAgICAgIG5hbWUgPSAieCIgKyBzdHIobVVuaXF1ZUluZGV4KyspOwotICAgIH0KLSAgICBlbHNl
Ci0gICAgewotICAgICAgICBuYW1lID0gZGVjb3JhdGUobmFtZSk7Ci0gICAgfQotCi0gICAgaWYg
KG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQgJiYgSXNTYW1wbGVyKHR5cGUuZ2V0QmFz
aWNUeXBlKCkpKQotICAgIHsKLSAgICAgICByZXR1cm4gcXVhbGlmaWVyU3RyaW5nKHF1YWxpZmll
cikgKyAiICIgKyB0ZXh0dXJlU3RyaW5nKHR5cGUpICsgIiB0ZXh0dXJlXyIgKyBuYW1lICsgYXJy
YXlTdHJpbmcodHlwZSkgKyAiLCAiICsKLSAgICAgICAgICAgICAgcXVhbGlmaWVyU3RyaW5nKHF1
YWxpZmllcikgKyAiIFNhbXBsZXJTdGF0ZSBzYW1wbGVyXyIgKyBuYW1lICsgYXJyYXlTdHJpbmco
dHlwZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpICsg
IiAiICsgdHlwZVN0cmluZyh0eXBlKSArICIgIiArIG5hbWUgKyBhcnJheVN0cmluZyh0eXBlKTsK
LX0KLQotVFN0cmluZyBPdXRwdXRITFNMOjpxdWFsaWZpZXJTdHJpbmcoVFF1YWxpZmllciBxdWFs
aWZpZXIpCi17Ci0gICAgc3dpdGNoKHF1YWxpZmllcikKLSAgICB7Ci0gICAgICBjYXNlIEV2cUlu
OiAgICAgICAgICAgIHJldHVybiAiaW4iOwotICAgICAgY2FzZSBFdnFPdXQ6ICAgICAgICAgICBy
ZXR1cm4gIm91dCI7Ci0gICAgICBjYXNlIEV2cUluT3V0OiAgICAgICAgIHJldHVybiAiaW5vdXQi
OwotICAgICAgY2FzZSBFdnFDb25zdFJlYWRPbmx5OiByZXR1cm4gImNvbnN0IjsKLSAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuICIiOwotfQotCi1UU3Ry
aW5nIE91dHB1dEhMU0w6OnR5cGVTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpCi17Ci0gICAgaWYg
KHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQotICAgIHsKLSAgICAgICAgY29uc3Qg
VFN0cmluZyYgdHlwZU5hbWUgPSB0eXBlLmdldFN0cnVjdCgpLT5uYW1lKCk7Ci0gICAgICAgIGlm
ICh0eXBlTmFtZSAhPSAiIikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHN0cnVjdExv
b2t1cCh0eXBlTmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSAgIC8vIE5hbWVsZXNzIHN0
cnVjdHVyZSwgZGVmaW5lIGluIHBsYWNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IFRG
aWVsZExpc3QgJmZpZWxkcyA9IHR5cGUuZ2V0U3RydWN0KCktPmZpZWxkcygpOwotCi0gICAgICAg
ICAgICBUU3RyaW5nIHN0cmluZyA9ICJzdHJ1Y3RcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIntcbiI7Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
ZmllbGRzLnNpemUoKTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0
IFRGaWVsZCAqZmllbGQgPSBmaWVsZHNbaV07Ci0KLSAgICAgICAgICAgICAgICBzdHJpbmcgKz0g
IiAgICAiICsgdHlwZVN0cmluZygqZmllbGQtPnR5cGUoKSkgKyAiICIgKyBkZWNvcmF0ZShmaWVs
ZC0+bmFtZSgpKSArIGFycmF5U3RyaW5nKCpmaWVsZC0+dHlwZSgpKSArICI7XG4iOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBzdHJpbmcgKz0gIn0gIjsKLQotICAgICAgICAgICAgcmV0
dXJuIHN0cmluZzsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlLmlzTWF0cml4
KCkpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKLSAgICAg
ICAgewotICAgICAgICAgIGNhc2UgMjogcmV0dXJuICJmbG9hdDJ4MiI7Ci0gICAgICAgICAgY2Fz
ZSAzOiByZXR1cm4gImZsb2F0M3gzIjsKLSAgICAgICAgICBjYXNlIDQ6IHJldHVybiAiZmxvYXQ0
eDQiOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAo
dHlwZS5nZXRCYXNpY1R5cGUoKSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6
Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gImZsb2F0IjsKLSAgICAgICAgICAgICAg
Y2FzZSAyOiByZXR1cm4gImZsb2F0MiI7Ci0gICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuICJm
bG9hdDMiOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiAiZmxvYXQ0IjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICBjYXNlIEVidEludDoKLSAgICAgICAgICAgIHN3aXRjaCAodHlwZS5n
ZXROb21pbmFsU2l6ZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDE6IHJl
dHVybiAiaW50IjsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gImludDIiOwotICAgICAg
ICAgICAgICBjYXNlIDM6IHJldHVybiAiaW50MyI7Ci0gICAgICAgICAgICAgIGNhc2UgNDogcmV0
dXJuICJpbnQ0IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIEVidEJvb2w6Ci0gICAg
ICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gImJvb2wiOwotICAgICAgICAgICAgICBjYXNlIDI6
IHJldHVybiAiYm9vbDIiOwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiAiYm9vbDMiOwot
ICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiAiYm9vbDQiOwotICAgICAgICAgICAgfQotICAg
ICAgICAgIGNhc2UgRWJ0Vm9pZDoKLSAgICAgICAgICAgIHJldHVybiAidm9pZCI7Ci0gICAgICAg
ICAgY2FzZSBFYnRTYW1wbGVyMkQ6Ci0gICAgICAgICAgICByZXR1cm4gInNhbXBsZXIyRCI7Ci0g
ICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKLSAgICAgICAgICAgIHJldHVybiAic2FtcGxl
ckNVQkUiOwotICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOgotICAgICAgICAg
ICAgcmV0dXJuICJzYW1wbGVyMkQiOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgcmV0dXJu
ICI8dW5rbm93biB0eXBlPiI7Ci19Ci0KLVRTdHJpbmcgT3V0cHV0SExTTDo6dGV4dHVyZVN0cmlu
Zyhjb25zdCBUVHlwZSAmdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUuZ2V0QmFzaWNUeXBlKCkp
Ci0gICAgewotICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6Ci0gICAgICAgIHJldHVybiAiVGV4dHVy
ZTJEIjsKLSAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6Ci0gICAgICAgIHJldHVybiAiVGV4dHVy
ZUN1YmUiOwotICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6Ci0gICAgICAgIHJldHVy
biAiVGV4dHVyZTJEIjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQot
ICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgcmV0dXJuICI8dW5rbm93biB0ZXh0dXJlIHR5cGU+IjsK
LX0KLQotVFN0cmluZyBPdXRwdXRITFNMOjphcnJheVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSkK
LXsKLSAgICBpZiAoIXR5cGUuaXNBcnJheSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuICIiOwot
ICAgIH0KLQotICAgIHJldHVybiAiWyIgKyBzdHIodHlwZS5nZXRBcnJheVNpemUoKSkgKyAiXSI7
Ci19Ci0KLVRTdHJpbmcgT3V0cHV0SExTTDo6aW5pdGlhbGl6ZXIoY29uc3QgVFR5cGUgJnR5cGUp
Ci17Ci0gICAgVFN0cmluZyBzdHJpbmc7Ci0KLSAgICBzaXplX3Qgc2l6ZSA9IHR5cGUuZ2V0T2Jq
ZWN0U2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGNvbXBvbmVudCA9IDA7IGNvbXBvbmVudCA8IHNp
emU7IGNvbXBvbmVudCsrKQotICAgIHsKLSAgICAgICAgc3RyaW5nICs9ICIwIjsKLQotICAgICAg
ICBpZiAoY29tcG9uZW50ICsgMSA8IHNpemUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cmlu
ZyArPSAiLCAiOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuICJ7IiArIHN0cmluZyAr
ICJ9IjsKLX0KLQotdm9pZCBPdXRwdXRITFNMOjphZGRDb25zdHJ1Y3Rvcihjb25zdCBUVHlwZSAm
dHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSwgY29uc3QgVEludGVybVNlcXVlbmNlICpwYXJhbWV0
ZXJzKQotewotICAgIGlmIChuYW1lID09ICIiKQotICAgIHsKLSAgICAgICAgcmV0dXJuOyAgIC8v
IE5hbWVsZXNzIHN0cnVjdHVyZXMgZG9uJ3QgaGF2ZSBjb25zdHJ1Y3RvcnMKLSAgICB9Ci0KLSAg
ICBpZiAodHlwZS5nZXRTdHJ1Y3QoKSAmJiBtU3RydWN0TmFtZXMuZmluZChkZWNvcmF0ZShuYW1l
KSkgIT0gbVN0cnVjdE5hbWVzLmVuZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuOyAgIC8vIEFs
cmVhZHkgYWRkZWQKLSAgICB9Ci0KLSAgICBUVHlwZSBjdG9yVHlwZSA9IHR5cGU7Ci0gICAgY3Rv
clR5cGUuY2xlYXJBcnJheW5lc3MoKTsKLSAgICBjdG9yVHlwZS5zZXRQcmVjaXNpb24oRWJwSGln
aCk7Ci0gICAgY3RvclR5cGUuc2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7Ci0KLSAgICBUU3Ry
aW5nIGN0b3JOYW1lID0gdHlwZS5nZXRTdHJ1Y3QoKSA/IGRlY29yYXRlKG5hbWUpIDogbmFtZTsK
LQotICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VFR5cGU+IFBhcmFtZXRlckFycmF5OwotICAgIFBh
cmFtZXRlckFycmF5IGN0b3JQYXJhbWV0ZXJzOwotCi0gICAgaWYgKHR5cGUuZ2V0U3RydWN0KCkp
Ci0gICAgewotICAgICAgICBtU3RydWN0TmFtZXMuaW5zZXJ0KGRlY29yYXRlKG5hbWUpKTsKLQot
ICAgICAgICBUU3RyaW5nIHN0cnVjdHVyZTsKLSAgICAgICAgc3RydWN0dXJlICs9ICJzdHJ1Y3Qg
IiArIGRlY29yYXRlKG5hbWUpICsgIlxuIgotICAgICAgICAgICAgICAgICAgICAgIntcbiI7Ci0K
LSAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gdHlwZS5nZXRTdHJ1Y3QoKS0+Zmll
bGRzKCk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6
ZSgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAqZmllbGQgPSBm
aWVsZHNbaV07Ci0KLSAgICAgICAgICAgIHN0cnVjdHVyZSArPSAiICAgICIgKyB0eXBlU3RyaW5n
KCpmaWVsZC0+dHlwZSgpKSArICIgIiArIGRlY29yYXRlRmllbGQoZmllbGQtPm5hbWUoKSwgdHlw
ZSkgKyBhcnJheVN0cmluZygqZmllbGQtPnR5cGUoKSkgKyAiO1xuIjsKLSAgICAgICAgfQotCi0g
ICAgICAgIHN0cnVjdHVyZSArPSAifTtcbiI7Ci0KLSAgICAgICAgaWYgKHN0ZDo6ZmluZChtU3Ry
dWN0RGVjbGFyYXRpb25zLmJlZ2luKCksIG1TdHJ1Y3REZWNsYXJhdGlvbnMuZW5kKCksIHN0cnVj
dHVyZSkgPT0gbVN0cnVjdERlY2xhcmF0aW9ucy5lbmQoKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgbVN0cnVjdERlY2xhcmF0aW9ucy5wdXNoX2JhY2soc3RydWN0dXJlKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgaSsr
KQotICAgICAgICB7Ci0gICAgICAgICAgICBjdG9yUGFyYW1ldGVycy5wdXNoX2JhY2soKmZpZWxk
c1tpXS0+dHlwZSgpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChwYXJhbWV0ZXJz
KQotICAgIHsKLSAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIHBh
cmFtZXRlciA9IHBhcmFtZXRlcnMtPmJlZ2luKCk7IHBhcmFtZXRlciAhPSBwYXJhbWV0ZXJzLT5l
bmQoKTsgcGFyYW1ldGVyKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGN0b3JQYXJhbWV0ZXJz
LnB1c2hfYmFjaygoKnBhcmFtZXRlciktPmdldEFzVHlwZWQoKS0+Z2V0VHlwZSgpKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICBUU3RyaW5nIGNvbnN0
cnVjdG9yOwotCi0gICAgaWYgKGN0b3JUeXBlLmdldFN0cnVjdCgpKQotICAgIHsKLSAgICAgICAg
Y29uc3RydWN0b3IgKz0gY3Rvck5hbWUgKyAiICIgKyBjdG9yTmFtZSArICJfY3RvcigiOwotICAg
IH0KLSAgICBlbHNlICAgLy8gQnVpbHQtaW4gdHlwZQotICAgIHsKLSAgICAgICAgY29uc3RydWN0
b3IgKz0gdHlwZVN0cmluZyhjdG9yVHlwZSkgKyAiICIgKyBjdG9yTmFtZSArICIoIjsKLSAgICB9
Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBwYXJhbWV0ZXIgPSAwOyBwYXJhbWV0ZXIgPCBjdG9y
UGFyYW1ldGVycy5zaXplKCk7IHBhcmFtZXRlcisrKQotICAgIHsKLSAgICAgICAgY29uc3QgVFR5
cGUgJnR5cGUgPSBjdG9yUGFyYW1ldGVyc1twYXJhbWV0ZXJdOwotCi0gICAgICAgIGNvbnN0cnVj
dG9yICs9IHR5cGVTdHJpbmcodHlwZSkgKyAiIHgiICsgc3RyKHBhcmFtZXRlcikgKyBhcnJheVN0
cmluZyh0eXBlKTsKLQotICAgICAgICBpZiAocGFyYW1ldGVyIDwgY3RvclBhcmFtZXRlcnMuc2l6
ZSgpIC0gMSkKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gIiwgIjsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGNvbnN0cnVjdG9yICs9ICIpXG4iCi0gICAgICAgICAgICAg
ICAgICAgIntcbiI7Ci0KLSAgICBpZiAoY3RvclR5cGUuZ2V0U3RydWN0KCkpCi0gICAgewotICAg
ICAgICBjb25zdHJ1Y3RvciArPSAiICAgICIgKyBjdG9yTmFtZSArICIgc3RydWN0dXJlID0geyI7
Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGNvbnN0cnVjdG9yICs9ICIgICAgcmV0
dXJuICIgKyB0eXBlU3RyaW5nKGN0b3JUeXBlKSArICIoIjsKLSAgICB9Ci0KLSAgICBpZiAoY3Rv
clR5cGUuaXNNYXRyaXgoKSAmJiBjdG9yUGFyYW1ldGVycy5zaXplKCkgPT0gMSkKLSAgICB7Ci0g
ICAgICAgIGludCBkaW0gPSBjdG9yVHlwZS5nZXROb21pbmFsU2l6ZSgpOwotICAgICAgICBjb25z
dCBUVHlwZSAmcGFyYW1ldGVyID0gY3RvclBhcmFtZXRlcnNbMF07Ci0KLSAgICAgICAgaWYgKHBh
cmFtZXRlci5pc1NjYWxhcigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCByb3cg
PSAwOyByb3cgPCBkaW07IHJvdysrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZv
ciAoaW50IGNvbCA9IDA7IGNvbCA8IGRpbTsgY29sKyspCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSBUU3RyaW5nKChyb3cgPT0gY29sKSA/ICJ4
MCIgOiAiMC4wIik7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBp
ZiAocm93IDwgZGltIC0gMSB8fCBjb2wgPCBkaW0gLSAxKQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSAiLCAiOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIGVsc2UgaWYgKHBhcmFtZXRlci5pc01hdHJpeCgpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBkaW07IHJvdysrKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IGRpbTsgY29sKyspCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAocm93IDwgcGFyYW1ldGVy
LmdldE5vbWluYWxTaXplKCkgJiYgY29sIDwgcGFyYW1ldGVyLmdldE5vbWluYWxTaXplKCkpCi0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9y
ICs9IFRTdHJpbmcoIngwIikgKyAiWyIgKyBzdHIocm93KSArICJdIiArICJbIiArIHN0cihjb2wp
ICsgIl0iOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0
b3IgKz0gVFN0cmluZygocm93ID09IGNvbCkgPyAiMS4wIiA6ICIwLjAiKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChyb3cgPCBkaW0gLSAxIHx8IGNv
bCA8IGRpbSAtIDEpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0cnVjdG9yICs9ICIsICI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBzaXplX3QgcmVtYWluaW5n
Q29tcG9uZW50cyA9IGN0b3JUeXBlLmdldE9iamVjdFNpemUoKTsKLSAgICAgICAgc2l6ZV90IHBh
cmFtZXRlckluZGV4ID0gMDsKLQotICAgICAgICB3aGlsZSAocmVtYWluaW5nQ29tcG9uZW50cyA+
IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IFRUeXBlICZwYXJhbWV0ZXIgPSBjdG9y
UGFyYW1ldGVyc1twYXJhbWV0ZXJJbmRleF07Ci0gICAgICAgICAgICBjb25zdCBzaXplX3QgcGFy
YW1ldGVyU2l6ZSA9IHBhcmFtZXRlci5nZXRPYmplY3RTaXplKCk7Ci0gICAgICAgICAgICBib29s
IG1vcmVQYXJhbWV0ZXJzID0gcGFyYW1ldGVySW5kZXggKyAxIDwgY3RvclBhcmFtZXRlcnMuc2l6
ZSgpOwotCi0gICAgICAgICAgICBjb25zdHJ1Y3RvciArPSAieCIgKyBzdHIoc3RhdGljX2Nhc3Q8
aW50PihwYXJhbWV0ZXJJbmRleCkpOwotCi0gICAgICAgICAgICBpZiAocGFyYW1ldGVyLmlzU2Nh
bGFyKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHBhcmFtZXRlclNp
emUgPD0gcmVtYWluaW5nQ29tcG9uZW50cyk7Ci0gICAgICAgICAgICAgICAgcmVtYWluaW5nQ29t
cG9uZW50cyAtPSBwYXJhbWV0ZXJTaXplOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxz
ZSBpZiAocGFyYW1ldGVyLmlzVmVjdG9yKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgaWYgKHJlbWFpbmluZ0NvbXBvbmVudHMgPT0gcGFyYW1ldGVyU2l6ZSB8fCBtb3JlUGFyYW1l
dGVycykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChwYXJh
bWV0ZXJTaXplIDw9IHJlbWFpbmluZ0NvbXBvbmVudHMpOwotICAgICAgICAgICAgICAgICAgICBy
ZW1haW5pbmdDb21wb25lbnRzIC09IHBhcmFtZXRlclNpemU7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlbWFpbmluZ0NvbXBvbmVudHMgPCBzdGF0aWNfY2Fz
dDxzaXplX3Q+KHBhcmFtZXRlci5nZXROb21pbmFsU2l6ZSgpKSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocmVtYWluaW5nQ29tcG9uZW50cykKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogY29uc3RydWN0
b3IgKz0gIi54IjsgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBjb25z
dHJ1Y3RvciArPSAiLnh5IjsgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6
IGNvbnN0cnVjdG9yICs9ICIueHl6IjsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgNDogY29uc3RydWN0b3IgKz0gIi54eXp3IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIHJlbWFpbmluZ0NvbXBvbmVudHMgPSAwOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlIGlmIChwYXJhbWV0ZXIuaXNNYXRyaXgoKSB8fCBwYXJhbWV0ZXIuZ2V0
U3RydWN0KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHJlbWFpbmlu
Z0NvbXBvbmVudHMgPT0gcGFyYW1ldGVyU2l6ZSB8fCBtb3JlUGFyYW1ldGVycyk7Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKHBhcmFtZXRlclNpemUgPD0gcmVtYWluaW5nQ29tcG9uZW50cyk7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcmVtYWluaW5nQ29tcG9uZW50cyAtPSBw
YXJhbWV0ZXJTaXplOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJM
RSgpOwotCi0gICAgICAgICAgICBpZiAobW9yZVBhcmFtZXRlcnMpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcGFyYW1ldGVySW5kZXgrKzsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKHJlbWFpbmluZ0NvbXBvbmVudHMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgY29uc3RydWN0b3IgKz0gIiwgIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmIChjdG9yVHlwZS5nZXRTdHJ1Y3QoKSkKLSAgICB7Ci0gICAgICAgIGNvbnN0
cnVjdG9yICs9ICJ9O1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiBzdHJ1
Y3R1cmU7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iOwotICAgIH0KLSAgICBlbHNl
Ci0gICAgewotICAgICAgICBjb25zdHJ1Y3RvciArPSAiKTtcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIn1cbiI7Ci0gICAgfQotCi0gICAgbUNvbnN0cnVjdG9ycy5pbnNlcnQoY29uc3RydWN0
b3IpOwotfQotCi1jb25zdCBDb25zdGFudFVuaW9uICpPdXRwdXRITFNMOjp3cml0ZUNvbnN0YW50
VW5pb24oY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IENvbnN0YW50VW5pb24gKmNvbnN0VW5pb24p
Ci17Ci0gICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7Ci0KLSAgICBpZiAodHlwZS5nZXRC
YXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCi0gICAgewotICAgICAgICBvdXQgPDwgc3RydWN0TG9v
a3VwKHR5cGUuZ2V0U3RydWN0KCktPm5hbWUoKSkgKyAiX2N0b3IoIjsKLSAgICAgICAgCi0gICAg
ICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHR5cGUuZ2V0U3RydWN0KCktPmZpZWxkcygp
OwotCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgaSsrKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBUVHlwZSAqZmllbGRUeXBlID0gZmllbGRzW2ld
LT50eXBlKCk7Ci0KLSAgICAgICAgICAgIGNvbnN0VW5pb24gPSB3cml0ZUNvbnN0YW50VW5pb24o
KmZpZWxkVHlwZSwgY29uc3RVbmlvbik7Ci0KLSAgICAgICAgICAgIGlmIChpICE9IGZpZWxkcy5z
aXplKCkgLSAxKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgb3V0IDw8ICIpIjsKLSAgICB9Ci0g
ICAgZWxzZQotICAgIHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSB0eXBlLmdldE9iamVjdFNpemUo
KTsKLSAgICAgICAgYm9vbCB3cml0ZVR5cGUgPSBzaXplID4gMTsKLSAgICAgICAgCi0gICAgICAg
IGlmICh3cml0ZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCB0eXBlU3RyaW5n
KHR5cGUpIDw8ICIoIjsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZTsgaSsrLCBjb25zdFVuaW9uKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRj
aCAoY29uc3RVbmlvbi0+Z2V0VHlwZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBj
YXNlIEVidEZsb2F0OiBvdXQgPDwgc3RkOjptaW4oRkxUX01BWCwgc3RkOjptYXgoLUZMVF9NQVgs
IGNvbnN0VW5pb24tPmdldEZDb25zdCgpKSk7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVi
dEludDogICBvdXQgPDwgY29uc3RVbmlvbi0+Z2V0SUNvbnN0KCk7IGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEVidEJvb2w6ICBvdXQgPDwgY29uc3RVbmlvbi0+Z2V0QkNvbnN0KCk7IGJyZWFr
OwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBpZiAoaSAhPSBzaXplIC0gMSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBvdXQgPDwgIiwgIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IGlmICh3cml0ZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAiKSI7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gY29uc3RVbmlvbjsKLX0KLQotVFN0cmluZyBPdXRw
dXRITFNMOjpzY29wZVN0cmluZyh1bnNpZ25lZCBpbnQgZGVwdGhMaW1pdCkKLXsKLSAgICBUU3Ry
aW5nIHN0cmluZzsKLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbVNjb3BlQnJh
Y2tldC5zaXplKCkgJiYgaSA8IGRlcHRoTGltaXQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHN0cmlu
ZyArPSAiXyIgKyBzdHIoaSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0cmluZzsKLX0KLQotVFN0
cmluZyBPdXRwdXRITFNMOjpzY29wZWRTdHJ1Y3QoY29uc3QgVFN0cmluZyAmdHlwZU5hbWUpCi17
Ci0gICAgaWYgKHR5cGVOYW1lID09ICIiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHR5cGVOYW1l
OwotICAgIH0KLQotICAgIHJldHVybiB0eXBlTmFtZSArIHNjb3BlU3RyaW5nKG1TY29wZURlcHRo
KTsKLX0KLQotVFN0cmluZyBPdXRwdXRITFNMOjpzdHJ1Y3RMb29rdXAoY29uc3QgVFN0cmluZyAm
dHlwZU5hbWUpCi17Ci0gICAgZm9yIChpbnQgZGVwdGggPSBtU2NvcGVEZXB0aDsgZGVwdGggPj0g
MDsgZGVwdGgtLSkKLSAgICB7Ci0gICAgICAgIFRTdHJpbmcgc2NvcGVkTmFtZSA9IGRlY29yYXRl
KHR5cGVOYW1lICsgc2NvcGVTdHJpbmcoZGVwdGgpKTsKLQotICAgICAgICBmb3IgKFN0cnVjdE5h
bWVzOjppdGVyYXRvciBzdHJ1Y3ROYW1lID0gbVN0cnVjdE5hbWVzLmJlZ2luKCk7IHN0cnVjdE5h
bWUgIT0gbVN0cnVjdE5hbWVzLmVuZCgpOyBzdHJ1Y3ROYW1lKyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmICgqc3RydWN0TmFtZSA9PSBzY29wZWROYW1lKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybiBzY29wZWROYW1lOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotCi0gICAgVU5SRUFDSEFCTEUoKTsgICAvLyBTaG91bGQgaGF2ZSBmb3VuZCBhIG1h
dGNoaW5nIGNvbnN0cnVjdG9yCi0KLSAgICByZXR1cm4gdHlwZU5hbWU7Ci19Ci0KLVRTdHJpbmcg
T3V0cHV0SExTTDo6ZGVjb3JhdGUoY29uc3QgVFN0cmluZyAmc3RyaW5nKQotewotICAgIGlmIChz
dHJpbmcuY29tcGFyZSgwLCAzLCAiZ2xfIikgIT0gMCAmJiBzdHJpbmcuY29tcGFyZSgwLCAzLCAi
ZHhfIikgIT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAiXyIgKyBzdHJpbmc7Ci0gICAgfQot
ICAgIAotICAgIHJldHVybiBzdHJpbmc7Ci19Ci0KLVRTdHJpbmcgT3V0cHV0SExTTDo6ZGVjb3Jh
dGVVbmlmb3JtKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFR5cGUgJnR5cGUpCi17Ci0g
ICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U2FtcGxlckV4dGVybmFsT0VTKQotICAg
IHsKLSAgICAgICAgcmV0dXJuICJleF8iICsgc3RyaW5nOwotICAgIH0KLSAgICAKLSAgICByZXR1
cm4gZGVjb3JhdGUoc3RyaW5nKTsKLX0KLQotVFN0cmluZyBPdXRwdXRITFNMOjpkZWNvcmF0ZUZp
ZWxkKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFR5cGUgJnN0cnVjdHVyZSkKLXsKLSAg
ICBpZiAoc3RydWN0dXJlLmdldFN0cnVjdCgpLT5uYW1lKCkuY29tcGFyZSgwLCAzLCAiZ2xfIikg
IT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBkZWNvcmF0ZShzdHJpbmcpOwotICAgIH0KLQot
ICAgIHJldHVybiBzdHJpbmc7Ci19Ci0KLVRTdHJpbmcgT3V0cHV0SExTTDo6cmVnaXN0ZXJTdHJp
bmcoVEludGVybVN5bWJvbCAqb3BlcmFuZCkKLXsKLSAgICBBU1NFUlQob3BlcmFuZC0+Z2V0UXVh
bGlmaWVyKCkgPT0gRXZxVW5pZm9ybSk7Ci0KLSAgICBpZiAoSXNTYW1wbGVyKG9wZXJhbmQtPmdl
dEJhc2ljVHlwZSgpKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAicyIgKyBzdHIoc2FtcGxlclJl
Z2lzdGVyKG9wZXJhbmQpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gImMiICsgc3RyKHVuaWZvcm1S
ZWdpc3RlcihvcGVyYW5kKSk7Ci19Ci0KLWludCBPdXRwdXRITFNMOjpzYW1wbGVyUmVnaXN0ZXIo
VEludGVybVN5bWJvbCAqc2FtcGxlcikKLXsKLSAgICBjb25zdCBUVHlwZSAmdHlwZSA9IHNhbXBs
ZXItPmdldFR5cGUoKTsKLSAgICBBU1NFUlQoSXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkp
KTsKLQotICAgIGludCBpbmRleCA9IG1TYW1wbGVyUmVnaXN0ZXI7Ci0gICAgbVNhbXBsZXJSZWdp
c3RlciArPSBzYW1wbGVyLT50b3RhbFJlZ2lzdGVyQ291bnQoKTsKLQotICAgIGRlY2xhcmVVbmlm
b3JtKHR5cGUsIHNhbXBsZXItPmdldFN5bWJvbCgpLCBpbmRleCk7Ci0KLSAgICByZXR1cm4gaW5k
ZXg7Ci19Ci0KLWludCBPdXRwdXRITFNMOjp1bmlmb3JtUmVnaXN0ZXIoVEludGVybVN5bWJvbCAq
dW5pZm9ybSkKLXsKLSAgICBjb25zdCBUVHlwZSAmdHlwZSA9IHVuaWZvcm0tPmdldFR5cGUoKTsK
LSAgICBBU1NFUlQoIUlzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSk7Ci0KLSAgICBpbnQg
aW5kZXggPSBtVW5pZm9ybVJlZ2lzdGVyOwotICAgIG1Vbmlmb3JtUmVnaXN0ZXIgKz0gdW5pZm9y
bS0+dG90YWxSZWdpc3RlckNvdW50KCk7Ci0KLSAgICBkZWNsYXJlVW5pZm9ybSh0eXBlLCB1bmlm
b3JtLT5nZXRTeW1ib2woKSwgaW5kZXgpOwotCi0gICAgcmV0dXJuIGluZGV4OwotfQotCi12b2lk
IE91dHB1dEhMU0w6OmRlY2xhcmVVbmlmb3JtKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3Ry
aW5nICZuYW1lLCBpbnQgaW5kZXgpCi17Ci0gICAgVFN0cnVjdHVyZSAqc3RydWN0dXJlID0gdHlw
ZS5nZXRTdHJ1Y3QoKTsKLQotICAgIGlmICghc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgbUFj
dGl2ZVVuaWZvcm1zLnB1c2hfYmFjayhVbmlmb3JtKGdsVmFyaWFibGVUeXBlKHR5cGUpLCBnbFZh
cmlhYmxlUHJlY2lzaW9uKHR5cGUpLCBuYW1lLmNfc3RyKCksIHR5cGUuZ2V0QXJyYXlTaXplKCks
IGluZGV4KSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGNvbnN0IFRGaWVsZExp
c3QgJmZpZWxkcyA9IHN0cnVjdHVyZS0+ZmllbGRzKCk7Ci0KLSAgICAgICAgaWYgKHR5cGUuaXNB
cnJheSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgZWxlbWVudEluZGV4ID0gaW5kZXg7
Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZS5nZXRBcnJheVNpemUoKTsg
aSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBq
IDwgZmllbGRzLnNpemUoKTsgaisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVFR5cGUgJmZpZWxkVHlwZSA9ICpmaWVsZHNbal0tPnR5cGUoKTsKLSAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyB1bmlmb3JtTmFtZSA9IG5hbWUgKyAiWyIgKyBz
dHIoaSkgKyAiXS4iICsgZmllbGRzW2pdLT5uYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgIGRl
Y2xhcmVVbmlmb3JtKGZpZWxkVHlwZSwgdW5pZm9ybU5hbWUsIGVsZW1lbnRJbmRleCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGVsZW1lbnRJbmRleCArPSBmaWVsZFR5cGUudG90YWxSZWdpc3RlckNv
dW50KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGZpZWxkSW5kZXggPSBpbmRleDsK
LQotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKysp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJmZpZWxkVHlwZSA9
ICpmaWVsZHNbaV0tPnR5cGUoKTsKLSAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nIHVuaWZv
cm1OYW1lID0gbmFtZSArICIuIiArIGZpZWxkc1tpXS0+bmFtZSgpOwotICAgICAgICAgICAgICAg
IGRlY2xhcmVVbmlmb3JtKGZpZWxkVHlwZSwgdW5pZm9ybU5hbWUsIGZpZWxkSW5kZXgpOwotICAg
ICAgICAgICAgICAgIGZpZWxkSW5kZXggKz0gZmllbGRUeXBlLnRvdGFsUmVnaXN0ZXJDb3VudCgp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1HTGVudW0gT3V0cHV0SExT
TDo6Z2xWYXJpYWJsZVR5cGUoY29uc3QgVFR5cGUgJnR5cGUpCi17Ci0gICAgaWYgKHR5cGUuZ2V0
QmFzaWNUeXBlKCkgPT0gRWJ0RmxvYXQpCi0gICAgewotICAgICAgICBpZiAodHlwZS5pc1NjYWxh
cigpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRkxPQVQ7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZSBpZiAodHlwZS5pc1ZlY3RvcigpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBzd2l0Y2godHlwZS5nZXROb21pbmFsU2l6ZSgpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICBjYXNlIDI6IHJldHVybiBHTF9GTE9BVF9WRUMyOwotICAgICAgICAgICAgICBjYXNlIDM6
IHJldHVybiBHTF9GTE9BVF9WRUMzOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBHTF9G
TE9BVF9WRUM0OwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHR5cGUuaXNNYXRyaXgoKSkKLSAg
ICAgICAgewotICAgICAgICAgICAgc3dpdGNoKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gR0xfRkxPQVRfTUFUMjsKLSAg
ICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gR0xfRkxPQVRfTUFUMzsKLSAgICAgICAgICAgICAg
Y2FzZSA0OiByZXR1cm4gR0xfRkxPQVRfTUFUNDsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0
SW50KQotICAgIHsKLSAgICAgICAgaWYgKHR5cGUuaXNTY2FsYXIoKSkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIEdMX0lOVDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh0eXBl
LmlzVmVjdG9yKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCh0eXBlLmdldE5vbWlu
YWxTaXplKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIEdM
X0lOVF9WRUMyOwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBHTF9JTlRfVkVDMzsKLSAg
ICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gR0xfSU5UX1ZFQzQ7Ci0gICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlLmdldEJhc2ljVHlw
ZSgpID09IEVidEJvb2wpCi0gICAgewotICAgICAgICBpZiAodHlwZS5pc1NjYWxhcigpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfQk9PTDsKLSAgICAgICAgfQotICAgICAgICBl
bHNlIGlmICh0eXBlLmlzVmVjdG9yKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCh0
eXBlLmdldE5vbWluYWxTaXplKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2Ug
MjogcmV0dXJuIEdMX0JPT0xfVkVDMjsKLSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gR0xf
Qk9PTF9WRUMzOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBHTF9CT09MX1ZFQzQ7Ci0g
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgIH0KLSAgICBlbHNlIGlmICh0
eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFNhbXBsZXIyRCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBHTF9TQU1QTEVSXzJEOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlLmdldEJhc2ljVHlwZSgp
ID09IEVidFNhbXBsZXJDdWJlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX1NBTVBMRVJfQ1VC
RTsKLSAgICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgcmV0dXJuIEdMX05PTkU7
Ci19Ci0KLUdMZW51bSBPdXRwdXRITFNMOjpnbFZhcmlhYmxlUHJlY2lzaW9uKGNvbnN0IFRUeXBl
ICZ0eXBlKQotewotICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidEZsb2F0KQotICAg
IHsKLSAgICAgICAgc3dpdGNoICh0eXBlLmdldFByZWNpc2lvbigpKQotICAgICAgICB7Ci0gICAg
ICAgICAgY2FzZSBFYnBIaWdoOiAgIHJldHVybiBHTF9ISUdIX0ZMT0FUOwotICAgICAgICAgIGNh
c2UgRWJwTWVkaXVtOiByZXR1cm4gR0xfTUVESVVNX0ZMT0FUOwotICAgICAgICAgIGNhc2UgRWJw
TG93OiAgICByZXR1cm4gR0xfTE9XX0ZMT0FUOwotICAgICAgICAgIGNhc2UgRWJwVW5kZWZpbmVk
OgotICAgICAgICAgICAgLy8gU2hvdWxkIGJlIGRlZmluZWQgYXMgdGhlIGRlZmF1bHQgcHJlY2lz
aW9uIGJ5IHRoZSBwYXJzZXIKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50
KQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlLmdldFByZWNpc2lvbigpKQotICAgICAgICB7
Ci0gICAgICAgICAgY2FzZSBFYnBIaWdoOiAgIHJldHVybiBHTF9ISUdIX0lOVDsKLSAgICAgICAg
ICBjYXNlIEVicE1lZGl1bTogcmV0dXJuIEdMX01FRElVTV9JTlQ7Ci0gICAgICAgICAgY2FzZSBF
YnBMb3c6ICAgIHJldHVybiBHTF9MT1dfSU5UOwotICAgICAgICAgIGNhc2UgRWJwVW5kZWZpbmVk
OgotICAgICAgICAgICAgLy8gU2hvdWxkIGJlIGRlZmluZWQgYXMgdGhlIGRlZmF1bHQgcHJlY2lz
aW9uIGJ5IHRoZSBwYXJzZXIKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgLy8gT3RoZXIgdHlwZXMgKGJvb2xlYW4sIHNhbXBsZXIpIGRv
bid0IGhhdmUgYSBwcmVjaXNpb24KLSAgICByZXR1cm4gR0xfTk9ORTsKLX0KLQotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NmE3NmZiOWM3MTRkYmNlODEzYjYzODRlOGJjNDk1
Y2U5OGFjZWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuaAorKysgL2Rl
di9udWxsCkBAIC0xLDE2NyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENP
TVBJTEVSX09VVFBVVEhMU0xfSF8KLSNkZWZpbmUgQ09NUElMRVJfT1VUUFVUSExTTF9IXwotCi0j
aW5jbHVkZSA8bGlzdD4KLSNpbmNsdWRlIDxzZXQ+Ci0jaW5jbHVkZSA8bWFwPgotCi0jZGVmaW5l
IEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLQotI2luY2x1ZGUgImNvbXBpbGVy
L2ludGVybWVkaWF0ZS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlQ29udGV4dC5oIgotI2lu
Y2x1ZGUgImNvbXBpbGVyL1VuaWZvcm0uaCIKLQotbmFtZXNwYWNlIHNoCi17Ci1jbGFzcyBVbmZv
bGRTaG9ydENpcmN1aXQ7Ci0KLWNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZl
cnNlcgotewotICBwdWJsaWM6Ci0gICAgT3V0cHV0SExTTChUUGFyc2VDb250ZXh0ICZjb250ZXh0
LCBjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291cmNlcywgU2hTaGFkZXJPdXRwdXQgb3V0
cHV0VHlwZSk7Ci0gICAgfk91dHB1dEhMU0woKTsKLQotICAgIHZvaWQgb3V0cHV0KCk7Ci0KLSAg
ICBUSW5mb1NpbmtCYXNlICZnZXRCb2R5U3RyZWFtKCk7Ci0gICAgY29uc3QgQWN0aXZlVW5pZm9y
bXMgJmdldFVuaWZvcm1zKCk7Ci0KLSAgICBUU3RyaW5nIHR5cGVTdHJpbmcoY29uc3QgVFR5cGUg
JnR5cGUpOwotICAgIFRTdHJpbmcgdGV4dHVyZVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7Ci0g
ICAgc3RhdGljIFRTdHJpbmcgcXVhbGlmaWVyU3RyaW5nKFRRdWFsaWZpZXIgcXVhbGlmaWVyKTsK
LSAgICBzdGF0aWMgVFN0cmluZyBhcnJheVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7Ci0gICAg
c3RhdGljIFRTdHJpbmcgaW5pdGlhbGl6ZXIoY29uc3QgVFR5cGUgJnR5cGUpOwotICAgIHN0YXRp
YyBUU3RyaW5nIGRlY29yYXRlKGNvbnN0IFRTdHJpbmcgJnN0cmluZyk7ICAgICAgICAgICAgICAg
ICAgICAgIC8vIFByZXBlbmRzIGFuIHVuZGVyc2NvcmUgdG8gYXZvaWQgbmFtaW5nIGNsYXNoZXMK
LSAgICBzdGF0aWMgVFN0cmluZyBkZWNvcmF0ZVVuaWZvcm0oY29uc3QgVFN0cmluZyAmc3RyaW5n
LCBjb25zdCBUVHlwZSAmdHlwZSk7Ci0gICAgc3RhdGljIFRTdHJpbmcgZGVjb3JhdGVGaWVsZChj
b25zdCBUU3RyaW5nICZzdHJpbmcsIGNvbnN0IFRUeXBlICZzdHJ1Y3R1cmUpOwotCi0gIHByb3Rl
Y3RlZDoKLSAgICB2b2lkIGhlYWRlcigpOwotCi0gICAgLy8gVmlzaXQgQVNUIG5vZGVzIGFuZCBv
dXRwdXQgdGhlaXIgY29kZSB0byB0aGUgYm9keSBzdHJlYW0KLSAgICB2b2lkIHZpc2l0U3ltYm9s
KFRJbnRlcm1TeW1ib2wqKTsKLSAgICB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29u
c3RhbnRVbmlvbiopOwotICAgIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1C
aW5hcnkqKTsKLSAgICBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSop
OwotICAgIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24q
KTsKLSAgICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRl
Kik7Ci0gICAgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKik7Ci0gICAg
Ym9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCopOwotCi0gICAgdm9p
ZCB0cmF2ZXJzZVN0YXRlbWVudHMoVEludGVybU5vZGUgKm5vZGUpOwotICAgIGJvb2wgaXNTaW5n
bGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpOwotICAgIGJvb2wgaGFuZGxlRXhjZXNzaXZl
TG9vcChUSW50ZXJtTG9vcCAqbm9kZSk7Ci0gICAgdm9pZCBvdXRwdXRUcmlwbGV0KFZpc2l0IHZp
c2l0LCBjb25zdCBUU3RyaW5nICZwcmVTdHJpbmcsIGNvbnN0IFRTdHJpbmcgJmluU3RyaW5nLCBj
b25zdCBUU3RyaW5nICZwb3N0U3RyaW5nKTsKLSAgICB2b2lkIG91dHB1dExpbmVEaXJlY3RpdmUo
aW50IGxpbmUpOwotICAgIFRTdHJpbmcgYXJndW1lbnRTdHJpbmcoY29uc3QgVEludGVybVN5bWJv
bCAqc3ltYm9sKTsKLSAgICBpbnQgdmVjdG9yU2l6ZShjb25zdCBUVHlwZSAmdHlwZSkgY29uc3Q7
Ci0KLSAgICB2b2lkIGFkZENvbnN0cnVjdG9yKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3Ry
aW5nICZuYW1lLCBjb25zdCBUSW50ZXJtU2VxdWVuY2UgKnBhcmFtZXRlcnMpOwotICAgIGNvbnN0
IENvbnN0YW50VW5pb24gKndyaXRlQ29uc3RhbnRVbmlvbihjb25zdCBUVHlwZSAmdHlwZSwgY29u
c3QgQ29uc3RhbnRVbmlvbiAqY29uc3RVbmlvbik7Ci0KLSAgICBUU3RyaW5nIHNjb3BlU3RyaW5n
KHVuc2lnbmVkIGludCBkZXB0aExpbWl0KTsKLSAgICBUU3RyaW5nIHNjb3BlZFN0cnVjdChjb25z
dCBUU3RyaW5nICZ0eXBlTmFtZSk7Ci0gICAgVFN0cmluZyBzdHJ1Y3RMb29rdXAoY29uc3QgVFN0
cmluZyAmdHlwZU5hbWUpOwotCi0gICAgVFBhcnNlQ29udGV4dCAmbUNvbnRleHQ7Ci0gICAgY29u
c3QgU2hTaGFkZXJPdXRwdXQgbU91dHB1dFR5cGU7Ci0gICAgVW5mb2xkU2hvcnRDaXJjdWl0ICpt
VW5mb2xkU2hvcnRDaXJjdWl0OwotICAgIGJvb2wgbUluc2lkZUZ1bmN0aW9uOwotCi0gICAgLy8g
T3V0cHV0IHN0cmVhbXMKLSAgICBUSW5mb1NpbmtCYXNlIG1IZWFkZXI7Ci0gICAgVEluZm9TaW5r
QmFzZSBtQm9keTsKLSAgICBUSW5mb1NpbmtCYXNlIG1Gb290ZXI7Ci0KLSAgICB0eXBlZGVmIHN0
ZDo6bWFwPFRTdHJpbmcsIFRJbnRlcm1TeW1ib2wqPiBSZWZlcmVuY2VkU3ltYm9sczsKLSAgICBS
ZWZlcmVuY2VkU3ltYm9scyBtUmVmZXJlbmNlZFVuaWZvcm1zOwotICAgIFJlZmVyZW5jZWRTeW1i
b2xzIG1SZWZlcmVuY2VkQXR0cmlidXRlczsKLSAgICBSZWZlcmVuY2VkU3ltYm9scyBtUmVmZXJl
bmNlZFZhcnlpbmdzOwotCi0gICAgLy8gUGFyYW1ldGVycyBkZXRlcm1pbmluZyB3aGF0IGdvZXMg
aW4gdGhlIGhlYWRlciBvdXRwdXQKLSAgICBib29sIG1Vc2VzVGV4dHVyZTJEOwotICAgIGJvb2wg
bVVzZXNUZXh0dXJlMkRfYmlhczsKLSAgICBib29sIG1Vc2VzVGV4dHVyZTJETG9kOwotICAgIGJv
b2wgbVVzZXNUZXh0dXJlMkRQcm9qOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXM7
Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUyRFByb2pMb2Q7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmVD
dWJlOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZV9iaWFzOwotICAgIGJvb2wgbVVzZXNUZXh0
dXJlQ3ViZUxvZDsKLSAgICBib29sIG1Vc2VzVGV4dHVyZTJETG9kMDsKLSAgICBib29sIG1Vc2Vz
VGV4dHVyZTJETG9kMF9iaWFzOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMDsKLSAg
ICBib29sIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDBfYmlhczsKLSAgICBib29sIG1Vc2VzVGV4dHVy
ZUN1YmVMb2QwOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZUxvZDBfYmlhczsKLSAgICBib29s
IG1Vc2VzRnJhZ0NvbG9yOwotICAgIGJvb2wgbVVzZXNGcmFnRGF0YTsKLSAgICBib29sIG1Vc2Vz
RGVwdGhSYW5nZTsKLSAgICBib29sIG1Vc2VzRnJhZ0Nvb3JkOwotICAgIGJvb2wgbVVzZXNQb2lu
dENvb3JkOwotICAgIGJvb2wgbVVzZXNGcm9udEZhY2luZzsKLSAgICBib29sIG1Vc2VzUG9pbnRT
aXplOwotICAgIGJvb2wgbVVzZXNGcmFnRGVwdGg7Ci0gICAgYm9vbCBtVXNlc1hvcjsKLSAgICBi
b29sIG1Vc2VzTW9kMTsKLSAgICBib29sIG1Vc2VzTW9kMnY7Ci0gICAgYm9vbCBtVXNlc01vZDJm
OwotICAgIGJvb2wgbVVzZXNNb2QzdjsKLSAgICBib29sIG1Vc2VzTW9kM2Y7Ci0gICAgYm9vbCBt
VXNlc01vZDR2OwotICAgIGJvb2wgbVVzZXNNb2Q0ZjsKLSAgICBib29sIG1Vc2VzRmFjZWZvcndh
cmQxOwotICAgIGJvb2wgbVVzZXNGYWNlZm9yd2FyZDI7Ci0gICAgYm9vbCBtVXNlc0ZhY2Vmb3J3
YXJkMzsKLSAgICBib29sIG1Vc2VzRmFjZWZvcndhcmQ0OwotICAgIGJvb2wgbVVzZXNBdGFuMl8x
OwotICAgIGJvb2wgbVVzZXNBdGFuMl8yOwotICAgIGJvb2wgbVVzZXNBdGFuMl8zOwotICAgIGJv
b2wgbVVzZXNBdGFuMl80OwotICAgIGJvb2wgbVVzZXNEaXNjYXJkUmV3cml0aW5nOwotCi0gICAg
aW50IG1OdW1SZW5kZXJUYXJnZXRzOwotCi0gICAgdHlwZWRlZiBzdGQ6OnNldDxUU3RyaW5nPiBD
b25zdHJ1Y3RvcnM7Ci0gICAgQ29uc3RydWN0b3JzIG1Db25zdHJ1Y3RvcnM7Ci0KLSAgICB0eXBl
ZGVmIHN0ZDo6c2V0PFRTdHJpbmc+IFN0cnVjdE5hbWVzOwotICAgIFN0cnVjdE5hbWVzIG1TdHJ1
Y3ROYW1lczsKLQotICAgIHR5cGVkZWYgc3RkOjpsaXN0PFRTdHJpbmc+IFN0cnVjdERlY2xhcmF0
aW9uczsKLSAgICBTdHJ1Y3REZWNsYXJhdGlvbnMgbVN0cnVjdERlY2xhcmF0aW9uczsKLQotICAg
IHR5cGVkZWYgc3RkOjp2ZWN0b3I8aW50PiBTY29wZUJyYWNrZXQ7Ci0gICAgU2NvcGVCcmFja2V0
IG1TY29wZUJyYWNrZXQ7Ci0gICAgdW5zaWduZWQgaW50IG1TY29wZURlcHRoOwotCi0gICAgaW50
IG1VbmlxdWVJbmRleDsgICAvLyBGb3IgY3JlYXRpbmcgdW5pcXVlIG5hbWVzCi0KLSAgICBib29s
IG1Db250YWluc0xvb3BEaXNjb250aW51aXR5OwotICAgIGJvb2wgbU91dHB1dExvZDBGdW5jdGlv
bjsKLSAgICBib29sIG1JbnNpZGVEaXNjb250aW51b3VzTG9vcDsKLQotICAgIFRJbnRlcm1TeW1i
b2wgKm1FeGNlc3NpdmVMb29wSW5kZXg7Ci0KLSAgICBpbnQgbVVuaWZvcm1SZWdpc3RlcjsKLSAg
ICBpbnQgbVNhbXBsZXJSZWdpc3RlcjsKLQotICAgIFRTdHJpbmcgcmVnaXN0ZXJTdHJpbmcoVElu
dGVybVN5bWJvbCAqb3BlcmFuZCk7Ci0gICAgaW50IHNhbXBsZXJSZWdpc3RlcihUSW50ZXJtU3lt
Ym9sICpzYW1wbGVyKTsKLSAgICBpbnQgdW5pZm9ybVJlZ2lzdGVyKFRJbnRlcm1TeW1ib2wgKnVu
aWZvcm0pOwotICAgIHZvaWQgZGVjbGFyZVVuaWZvcm0oY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0
IFRTdHJpbmcgJm5hbWUsIGludCBpbmRleCk7Ci0gICAgc3RhdGljIEdMZW51bSBnbFZhcmlhYmxl
VHlwZShjb25zdCBUVHlwZSAmdHlwZSk7Ci0gICAgc3RhdGljIEdMZW51bSBnbFZhcmlhYmxlUHJl
Y2lzaW9uKGNvbnN0IFRUeXBlICZ0eXBlKTsKLQotICAgIEFjdGl2ZVVuaWZvcm1zIG1BY3RpdmVV
bmlmb3JtczsKLX07Ci19Ci0KLSNlbmRpZiAgIC8vIENPTVBJTEVSX09VVFBVVEhMU0xfSF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUNvbnRl
eHQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlQ29udGV4
dC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMjc5NTIzYmE3NDE2YTg3MjQ1
MzE2MGU1YWMzZTM2M2Q4MGFmNjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlQ29u
dGV4dC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAyICswLDAgQEAKLS8vCi0vLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
LS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9QYXJzZUNvbnRleHQuaCIKLQotI2luY2x1ZGUgPHN0
ZGFyZy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpbmNsdWRlICJjb21waWxlci9nbHNsYW5n
LmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL1NvdXJjZUxvY2F0aW9uLmgiCi0K
LS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCi0vLwotLy8gU3ViLSB2ZWN0b3IgYW5kIG1hdHJpeCBmaWVsZHMKLS8v
Ci0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KLQotLy8KLS8vIExvb2sgYXQgYSAnLicgZmllbGQgc2VsZWN0b3Ig
c3RyaW5nIGFuZCBjaGFuZ2UgaXQgaW50byBvZmZzZXRzCi0vLyBmb3IgYSB2ZWN0b3IuCi0vLwot
Ym9vbCBUUGFyc2VDb250ZXh0OjpwYXJzZVZlY3RvckZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21w
U3RyaW5nLCBpbnQgdmVjU2l6ZSwgVFZlY3RvckZpZWxkcyYgZmllbGRzLCBjb25zdCBUU291cmNl
TG9jJiBsaW5lKQotewotICAgIGZpZWxkcy5udW0gPSAoaW50KSBjb21wU3RyaW5nLnNpemUoKTsK
LSAgICBpZiAoZmllbGRzLm51bSA+IDQpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwg
dmVjdG9yIGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBlbnVtIHsKLSAgICAgICAgZXh5encsCi0gICAgICAg
IGVyZ2JhLAotICAgICAgICBlc3RwcQotICAgIH0gZmllbGRTZXRbNF07Ci0KLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGZpZWxkcy5udW07ICsraSkgewotICAgICAgICBzd2l0Y2ggKGNvbXBTdHJp
bmdbaV0pICB7Ci0gICAgICAgIGNhc2UgJ3gnOiAKLSAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRz
W2ldID0gMDsKLSAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXh5enc7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSAncic6IAotICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0g
PSAwOwotICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBlcmdiYTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlICdzJzoKLSAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMDsK
LSAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXN0cHE7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSAneSc6IAotICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAxOwotICAg
ICAgICAgICAgZmllbGRTZXRbaV0gPSBleHl6dzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlICdnJzogCi0gICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDE7Ci0gICAgICAg
ICAgICBmaWVsZFNldFtpXSA9IGVyZ2JhOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgJ3QnOgotICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAxOwotICAgICAgICAgICAg
ZmllbGRTZXRbaV0gPSBlc3RwcTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICd6
JzogCi0gICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDI7Ci0gICAgICAgICAgICBmaWVs
ZFNldFtpXSA9IGV4eXp3OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ2InOiAK
LSAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMjsKLSAgICAgICAgICAgIGZpZWxkU2V0
W2ldID0gZXJnYmE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAncCc6Ci0gICAg
ICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDI7Ci0gICAgICAgICAgICBmaWVsZFNldFtpXSA9
IGVzdHBxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAgICBjYXNlICd3Jzog
Ci0gICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDM7Ci0gICAgICAgICAgICBmaWVsZFNl
dFtpXSA9IGV4eXp3OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ2EnOiAKLSAg
ICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMzsKLSAgICAgICAgICAgIGZpZWxkU2V0W2ld
ID0gZXJnYmE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAncSc6Ci0gICAgICAg
ICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDM7Ci0gICAgICAgICAgICBmaWVsZFNldFtpXSA9IGVz
dHBxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBl
cnJvcihsaW5lLCAiaWxsZWdhbCB2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5j
X3N0cigpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgKytpKSB7Ci0gICAgICAgIGlmIChm
aWVsZHMub2Zmc2V0c1tpXSA+PSB2ZWNTaXplKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAi
dmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCAgY29tcFN0cmluZy5jX3N0cigp
KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChp
ID4gMCkgewotICAgICAgICAgICAgaWYgKGZpZWxkU2V0W2ldICE9IGZpZWxkU2V0W2ktMV0pIHsK
LSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCAtIHZlY3RvciBjb21wb25lbnQg
ZmllbGRzIG5vdCBmcm9tIHRoZSBzYW1lIHNldCIsIGNvbXBTdHJpbmcuY19zdHIoKSk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLQotLy8KLS8vIExvb2sgYXQgYSAnLicgZmllbGQg
c2VsZWN0b3Igc3RyaW5nIGFuZCBjaGFuZ2UgaXQgaW50byBvZmZzZXRzCi0vLyBmb3IgYSBtYXRy
aXguCi0vLwotYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3Ry
aW5nJiBjb21wU3RyaW5nLCBpbnQgbWF0U2l6ZSwgVE1hdHJpeEZpZWxkcyYgZmllbGRzLCBjb25z
dCBUU291cmNlTG9jJiBsaW5lKQotewotICAgIGZpZWxkcy53aG9sZVJvdyA9IGZhbHNlOwotICAg
IGZpZWxkcy53aG9sZUNvbCA9IGZhbHNlOwotICAgIGZpZWxkcy5yb3cgPSAtMTsKLSAgICBmaWVs
ZHMuY29sID0gLTE7Ci0KLSAgICBpZiAoY29tcFN0cmluZy5zaXplKCkgIT0gMikgewotICAgICAg
ICBlcnJvcihsaW5lLCAiaWxsZWdhbCBsZW5ndGggb2YgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIs
IGNvbXBTdHJpbmcuY19zdHIoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBpZiAoY29tcFN0cmluZ1swXSA9PSAnXycpIHsKLSAgICAgICAgaWYgKGNvbXBTdHJpbmdbMV0g
PCAnMCcgfHwgY29tcFN0cmluZ1sxXSA+ICczJykgewotICAgICAgICAgICAgZXJyb3IobGluZSwg
ImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgZmllbGRzLndob2xl
Q29sID0gdHJ1ZTsKLSAgICAgICAgZmllbGRzLmNvbCA9IGNvbXBTdHJpbmdbMV0gLSAnMCc7Ci0g
ICAgfSBlbHNlIGlmIChjb21wU3RyaW5nWzFdID09ICdfJykgewotICAgICAgICBpZiAoY29tcFN0
cmluZ1swXSA8ICcwJyB8fCBjb21wU3RyaW5nWzBdID4gJzMnKSB7Ci0gICAgICAgICAgICBlcnJv
cihsaW5lLCAiaWxsZWdhbCBtYXRyaXggZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0
cigpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBmaWVs
ZHMud2hvbGVSb3cgPSB0cnVlOwotICAgICAgICBmaWVsZHMucm93ID0gY29tcFN0cmluZ1swXSAt
ICcwJzsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoY29tcFN0cmluZ1swXSA8ICcwJyB8fCBj
b21wU3RyaW5nWzBdID4gJzMnIHx8Ci0gICAgICAgICAgICBjb21wU3RyaW5nWzFdIDwgJzAnIHx8
IGNvbXBTdHJpbmdbMV0gPiAnMycpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2Fs
IG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCkpOwotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGZpZWxkcy5yb3cgPSBjb21wU3Ry
aW5nWzBdIC0gJzAnOwotICAgICAgICBmaWVsZHMuY29sID0gY29tcFN0cmluZ1sxXSAtICcwJzsK
LSAgICB9Ci0KLSAgICBpZiAoZmllbGRzLnJvdyA+PSBtYXRTaXplIHx8IGZpZWxkcy5jb2wgPj0g
bWF0U2l6ZSkgewotICAgICAgICBlcnJvcihsaW5lLCAibWF0cml4IGZpZWxkIHNlbGVjdGlvbiBv
dXQgb2YgcmFuZ2UiLCBjb21wU3RyaW5nLmNfc3RyKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwotLy8g
RXJyb3JzCi0vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLS8vCi0vLyBUcmFjayB3aGV0aGVyIGVycm9y
cyBoYXZlIG9jY3VycmVkLgotLy8KLXZvaWQgVFBhcnNlQ29udGV4dDo6cmVjb3ZlcigpCi17Ci19
Ci0KLS8vCi0vLyBVc2VkIGJ5IGZsZXgvYmlzb24gdG8gb3V0cHV0IGFsbCBzeW50YXggYW5kIHBh
cnNpbmcgZXJyb3JzLgotLy8KLXZvaWQgVFBhcnNlQ29udGV4dDo6ZXJyb3IoY29uc3QgVFNvdXJj
ZUxvYyYgbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWFzb24s
IGNvbnN0IGNoYXIqIHRva2VuLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciogZXh0cmFJbmZvKQotewotICAgIHBwOjpTb3VyY2VMb2NhdGlvbiBzcmNMb2M7Ci0gICAgc3Jj
TG9jLmZpbGUgPSBsb2MuZmlyc3RfZmlsZTsKLSAgICBzcmNMb2MubGluZSA9IGxvYy5maXJzdF9s
aW5lOwotICAgIGRpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OkVSUk9SLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNMb2MsIHJlYXNvbiwgdG9rZW4sIGV4dHJhSW5m
byk7Ci0KLX0KLQotdm9pZCBUUGFyc2VDb250ZXh0Ojp3YXJuaW5nKGNvbnN0IFRTb3VyY2VMb2Mm
IGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWFzb24sIGNv
bnN0IGNoYXIqIHRva2VuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IGV4dHJhSW5mbykgewotICAgIHBwOjpTb3VyY2VMb2NhdGlvbiBzcmNMb2M7Ci0gICAgc3JjTG9j
LmZpbGUgPSBsb2MuZmlyc3RfZmlsZTsKLSAgICBzcmNMb2MubGluZSA9IGxvYy5maXJzdF9saW5l
OwotICAgIGRpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OldBUk5JTkcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIHNyY0xvYywgcmVhc29uLCB0b2tlbiwgZXh0cmFJbmZv
KTsKLX0KLQotdm9pZCBUUGFyc2VDb250ZXh0Ojp0cmFjZShjb25zdCBjaGFyKiBzdHIpCi17Ci0g
ICAgZGlhZ25vc3RpY3Mud3JpdGVEZWJ1ZyhzdHIpOwotfQotCi0vLwotLy8gU2FtZSBlcnJvciBt
ZXNzYWdlIGZvciBhbGwgcGxhY2VzIGFzc2lnbm1lbnRzIGRvbid0IHdvcmsuCi0vLwotdm9pZCBU
UGFyc2VDb250ZXh0Ojphc3NpZ25FcnJvcihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBj
aGFyKiBvcCwgVFN0cmluZyBsZWZ0LCBUU3RyaW5nIHJpZ2h0KQotewotICAgIHN0ZDo6c3RyaW5n
c3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKLSAgICBleHRyYUluZm9TdHJlYW0gPDwgImNhbm5vdCBj
b252ZXJ0IGZyb20gJyIgPDwgcmlnaHQgPDwgIicgdG8gJyIgPDwgbGVmdCA8PCAiJyI7Ci0gICAg
c3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOwotICAgIGVycm9y
KGxpbmUsICIiLCBvcCwgZXh0cmFJbmZvLmNfc3RyKCkpOwotfQotCi0vLwotLy8gU2FtZSBlcnJv
ciBtZXNzYWdlIGZvciBhbGwgcGxhY2VzIHVuYXJ5IG9wZXJhdGlvbnMgZG9uJ3Qgd29yay4KLS8v
Ci12b2lkIFRQYXJzZUNvbnRleHQ6OnVuYXJ5T3BFcnJvcihjb25zdCBUU291cmNlTG9jJiBsaW5l
LCBjb25zdCBjaGFyKiBvcCwgVFN0cmluZyBvcGVyYW5kKQotewotICAgIHN0ZDo6c3RyaW5nc3Ry
ZWFtIGV4dHJhSW5mb1N0cmVhbTsKLSAgICBleHRyYUluZm9TdHJlYW0gPDwgIm5vIG9wZXJhdGlv
biAnIiA8PCBvcCA8PCAiJyBleGlzdHMgdGhhdCB0YWtlcyBhbiBvcGVyYW5kIG9mIHR5cGUgIiA8
PCBvcGVyYW5kIAotICAgICAgICAgICAgICAgICAgICA8PCAiIChvciB0aGVyZSBpcyBubyBhY2Nl
cHRhYmxlIGNvbnZlcnNpb24pIjsKLSAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUlu
Zm9TdHJlYW0uc3RyKCk7Ci0gICAgZXJyb3IobGluZSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCBv
cCwgZXh0cmFJbmZvLmNfc3RyKCkpOwotfQotCi0vLwotLy8gU2FtZSBlcnJvciBtZXNzYWdlIGZv
ciBhbGwgYmluYXJ5IG9wZXJhdGlvbnMgZG9uJ3Qgd29yay4KLS8vCi12b2lkIFRQYXJzZUNvbnRl
eHQ6OmJpbmFyeU9wRXJyb3IoY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgY2hhciogb3As
IFRTdHJpbmcgbGVmdCwgVFN0cmluZyByaWdodCkKLXsKLSAgICBzdGQ6OnN0cmluZ3N0cmVhbSBl
eHRyYUluZm9TdHJlYW07Ci0gICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJubyBvcGVyYXRpb24gJyIg
PDwgb3AgPDwgIicgZXhpc3RzIHRoYXQgdGFrZXMgYSBsZWZ0LWhhbmQgb3BlcmFuZCBvZiB0eXBl
ICciIDw8IGxlZnQgCi0gICAgICAgICAgICAgICAgICAgIDw8ICInIGFuZCBhIHJpZ2h0IG9wZXJh
bmQgb2YgdHlwZSAnIiA8PCByaWdodCA8PCAiJyAob3IgdGhlcmUgaXMgbm8gYWNjZXB0YWJsZSBj
b252ZXJzaW9uKSI7Ci0gICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFt
LnN0cigpOwotICAgIGVycm9yKGxpbmUsICIgd3Jvbmcgb3BlcmFuZCB0eXBlcyAiLCBvcCwgZXh0
cmFJbmZvLmNfc3RyKCkpOyAKLX0KLQotYm9vbCBUUGFyc2VDb250ZXh0OjpwcmVjaXNpb25FcnJv
ckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRQcmVjaXNpb24gcHJlY2lzaW9uLCBUQmFz
aWNUeXBlIHR5cGUpewotICAgIGlmICghY2hlY2tzUHJlY2lzaW9uRXJyb3JzKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgc3dpdGNoKCB0eXBlICl7Ci0gICAgY2FzZSBFYnRGbG9hdDoKLSAg
ICAgICAgaWYoIHByZWNpc2lvbiA9PSBFYnBVbmRlZmluZWQgKXsKLSAgICAgICAgICAgIGVycm9y
KCBsaW5lLCAiTm8gcHJlY2lzaW9uIHNwZWNpZmllZCBmb3IgKGZsb2F0KSIsICIiICk7Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEVidEludDoKLSAgICAgICAgaWYoIHByZWNpc2lvbiA9PSBFYnBVbmRlZmluZWQgKXsKLSAgICAg
ICAgICAgIGVycm9yKCBsaW5lLCAiTm8gcHJlY2lzaW9uIHNwZWNpZmllZCAoaW50KSIsICIiICk7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotLy8KLS8vIEJvdGggdGVzdCBhbmQgaWYgbmVjZXNzYXJ5LCBzcGl0IG91dCBhbiBl
cnJvciwgdG8gc2VlIGlmIHRoZSBub2RlIGlzIHJlYWxseQotLy8gYW4gbC12YWx1ZSB0aGF0IGNh
biBiZSBvcGVyYXRlZCBvbiB0aGlzIHdheS4KLS8vCi0vLyBSZXR1cm5zIHRydWUgaWYgdGhlIHdh
cyBhbiBlcnJvci4KLS8vCi1ib29sIFRQYXJzZUNvbnRleHQ6OmxWYWx1ZUVycm9yQ2hlY2soY29u
c3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgY2hhciogb3AsIFRJbnRlcm1UeXBlZCogbm9kZSkK
LXsKLSAgICBUSW50ZXJtU3ltYm9sKiBzeW1Ob2RlID0gbm9kZS0+Z2V0QXNTeW1ib2xOb2RlKCk7
Ci0gICAgVEludGVybUJpbmFyeSogYmluYXJ5Tm9kZSA9IG5vZGUtPmdldEFzQmluYXJ5Tm9kZSgp
OwotCi0gICAgaWYgKGJpbmFyeU5vZGUpIHsKLSAgICAgICAgYm9vbCBlcnJvclJldHVybjsKLQot
ICAgICAgICBzd2l0Y2goYmluYXJ5Tm9kZS0+Z2V0T3AoKSkgewotICAgICAgICBjYXNlIEVPcElu
ZGV4RGlyZWN0OgotICAgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6Ci0gICAgICAgIGNhc2Ug
RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6Ci0gICAgICAgICAgICByZXR1cm4gbFZhbHVlRXJyb3JDaGVj
ayhsaW5lLCBvcCwgYmluYXJ5Tm9kZS0+Z2V0TGVmdCgpKTsKLSAgICAgICAgY2FzZSBFT3BWZWN0
b3JTd2l6emxlOgotICAgICAgICAgICAgZXJyb3JSZXR1cm4gPSBsVmFsdWVFcnJvckNoZWNrKGxp
bmUsIG9wLCBiaW5hcnlOb2RlLT5nZXRMZWZ0KCkpOwotICAgICAgICAgICAgaWYgKCFlcnJvclJl
dHVybikgewotICAgICAgICAgICAgICAgIGludCBvZmZzZXRbNF0gPSB7MCwwLDAsMH07Ci0KLSAg
ICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIHJpZ2h0Tm9kZSA9IGJpbmFyeU5vZGUtPmdldFJp
Z2h0KCk7Ci0gICAgICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSAqYWdnck5vZGUgPSByaWdo
dE5vZGUtPmdldEFzQWdncmVnYXRlKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHAgPSBhZ2dyTm9kZS0+Z2V0U2VxdWVu
Y2UoKS5iZWdpbigpOyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcCAhPSBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKS5lbmQoKTsgcCsrKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGludCB2YWx1ZSA9ICgqcCktPmdldEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFu
dFVuaW9uKCktPmdldElDb25zdCgwKTsKLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0W3ZhbHVl
XSsrOyAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXRbdmFsdWVdID4gMSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIG9mIHN3aXp6bGUg
Y2Fubm90IGhhdmUgZHVwbGljYXRlIGNvbXBvbmVudHMiLCBvcCk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfSAKLQotICAgICAgICAgICAgcmV0dXJuIGVycm9yUmV0dXJu
OwotICAgICAgICBkZWZhdWx0OiAKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wKTsKLQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLQotICAgIGNvbnN0IGNoYXIqIHN5bWJvbCA9IDA7Ci0gICAgaWYg
KHN5bU5vZGUgIT0gMCkKLSAgICAgICAgc3ltYm9sID0gc3ltTm9kZS0+Z2V0U3ltYm9sKCkuY19z
dHIoKTsKLQotICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2UgPSAwOwotICAgIHN3aXRjaCAobm9kZS0+
Z2V0UXVhbGlmaWVyKCkpIHsKLSAgICBjYXNlIEV2cUNvbnN0OiAgICAgICAgICBtZXNzYWdlID0g
ImNhbid0IG1vZGlmeSBhIGNvbnN0IjsgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXZxQ29uc3RS
ZWFkT25seTogIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgY29uc3QiOyAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBFdnFBdHRyaWJ1dGU6ICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYW4g
YXR0cmlidXRlIjsgICBicmVhazsKLSAgICBjYXNlIEV2cVVuaWZvcm06ICAgICAgICBtZXNzYWdl
ID0gImNhbid0IG1vZGlmeSBhIHVuaWZvcm0iOyAgICAgIGJyZWFrOwotICAgIGNhc2UgRXZxVmFy
eWluZ0luOiAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgdmFyeWluZyI7ICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBFdnFGcmFnQ29vcmQ6ICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkg
Z2xfRnJhZ0Nvb3JkIjsgICBicmVhazsKLSAgICBjYXNlIEV2cUZyb250RmFjaW5nOiAgICBtZXNz
YWdlID0gImNhbid0IG1vZGlmeSBnbF9Gcm9udEZhY2luZyI7IGJyZWFrOwotICAgIGNhc2UgRXZx
UG9pbnRDb29yZDogICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGdsX1BvaW50Q29vcmQiOyAg
YnJlYWs7Ci0gICAgZGVmYXVsdDoKLQotICAgICAgICAvLwotICAgICAgICAvLyBUeXBlIHRoYXQg
Y2FuJ3QgYmUgd3JpdHRlbiB0bz8KLSAgICAgICAgLy8KLSAgICAgICAgc3dpdGNoIChub2RlLT5n
ZXRCYXNpY1R5cGUoKSkgewotICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKLSAgICAgICAgY2Fz
ZSBFYnRTYW1wbGVyQ3ViZToKLSAgICAgICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEg
c2FtcGxlciI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFYnRWb2lkOgotICAg
ICAgICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgdm9pZCI7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgZGVmYXVsdDogCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmIChtZXNzYWdlID09IDAgJiYgYmluYXJ5Tm9kZSA9PSAwICYmIHN5bU5vZGUg
PT0gMCkgewotICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCk7Ci0K
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0KLSAgICAvLwotICAgIC8vIEV2ZXJ5dGhp
bmcgZWxzZSBpcyBva2F5LCBubyBlcnJvci4KLSAgICAvLwotICAgIGlmIChtZXNzYWdlID09IDAp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vCi0gICAgLy8gSWYgd2UgZ2V0IGhlcmUs
IHdlIGhhdmUgYW4gZXJyb3IgYW5kIGEgbWVzc2FnZS4KLSAgICAvLwotICAgIGlmIChzeW1Ob2Rl
KSB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKLSAgICAgICAg
ZXh0cmFJbmZvU3RyZWFtIDw8ICJcIiIgPDwgc3ltYm9sIDw8ICJcIiAoIiA8PCBtZXNzYWdlIDw8
ICIpIjsKLSAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0
cigpOwotICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCwgZXh0cmFJ
bmZvLmNfc3RyKCkpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgc3RkOjpzdHJpbmdzdHJl
YW0gZXh0cmFJbmZvU3RyZWFtOwotICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgIigiIDw8IG1l
c3NhZ2UgPDwgIikiOwotICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9T
dHJlYW0uc3RyKCk7Ci0gICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9w
LCBleHRyYUluZm8uY19zdHIoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8v
Ci0vLyBCb3RoIHRlc3QsIGFuZCBpZiBuZWNlc3Nhcnkgc3BpdCBvdXQgYW4gZXJyb3IsIHRvIHNl
ZSBpZiB0aGUgbm9kZSBpcyByZWFsbHkKLS8vIGEgY29uc3RhbnQuCi0vLwotLy8gUmV0dXJucyB0
cnVlIGlmIHRoZSB3YXMgYW4gZXJyb3IuCi0vLwotYm9vbCBUUGFyc2VDb250ZXh0Ojpjb25zdEVy
cm9yQ2hlY2soVEludGVybVR5cGVkKiBub2RlKQotewotICAgIGlmIChub2RlLT5nZXRRdWFsaWZp
ZXIoKSA9PSBFdnFDb25zdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZXJyb3Iobm9k
ZS0+Z2V0TGluZSgpLCAiY29uc3RhbnQgZXhwcmVzc2lvbiByZXF1aXJlZCIsICIiKTsKLQotICAg
IHJldHVybiB0cnVlOwotfQotCi0vLwotLy8gQm90aCB0ZXN0LCBhbmQgaWYgbmVjZXNzYXJ5IHNw
aXQgb3V0IGFuIGVycm9yLCB0byBzZWUgaWYgdGhlIG5vZGUgaXMgcmVhbGx5Ci0vLyBhbiBpbnRl
Z2VyLgotLy8KLS8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgd2FzIGFuIGVycm9yLgotLy8KLWJvb2wg
VFBhcnNlQ29udGV4dDo6aW50ZWdlckVycm9yQ2hlY2soVEludGVybVR5cGVkKiBub2RlLCBjb25z
dCBjaGFyKiB0b2tlbikKLXsKLSAgICBpZiAobm9kZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50
ICYmIG5vZGUtPmdldE5vbWluYWxTaXplKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiaW50ZWdlciBleHByZXNzaW9uIHJlcXVpcmVk
IiwgdG9rZW4pOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vCi0vLyBCb3RoIHRlc3QsIGFu
ZCBpZiBuZWNlc3Nhcnkgc3BpdCBvdXQgYW4gZXJyb3IsIHRvIHNlZSBpZiB3ZSBhcmUgY3VycmVu
dGx5Ci0vLyBnbG9iYWxseSBzY29wZWQuCi0vLwotLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB3YXMg
YW4gZXJyb3IuCi0vLwotYm9vbCBUUGFyc2VDb250ZXh0OjpnbG9iYWxFcnJvckNoZWNrKGNvbnN0
IFRTb3VyY2VMb2MmIGxpbmUsIGJvb2wgZ2xvYmFsLCBjb25zdCBjaGFyKiB0b2tlbikKLXsKLSAg
ICBpZiAoZ2xvYmFsKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBlcnJvcihsaW5lLCAi
b25seSBhbGxvd2VkIGF0IGdsb2JhbCBzY29wZSIsIHRva2VuKTsKLQotICAgIHJldHVybiB0cnVl
OwotfQotCi0vLwotLy8gRm9yIG5vdywga2VlcCBpdCBzaW1wbGU6ICBpZiBpdCBzdGFydHMgImds
XyIsIGl0J3MgcmVzZXJ2ZWQsIGluZGVwZW5kZW50Ci0vLyBvZiBzY29wZS4gIEV4Y2VwdCwgaWYg
dGhlIHN5bWJvbCB0YWJsZSBpcyBhdCB0aGUgYnVpbHQtaW4gcHVzaC1sZXZlbCwKLS8vIHdoaWNo
IGlzIHdoZW4gd2UgYXJlIHBhcnNpbmcgYnVpbHQtaW5zLgotLy8gQWxzbyBjaGVja3MgZm9yICJ3
ZWJnbF8iIGFuZCAiX3dlYmdsXyIgcmVzZXJ2ZWQgaWRlbnRpZmllcnMgaWYgcGFyc2luZyBhCi0v
LyB3ZWJnbCBzaGFkZXIuCi0vLwotLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdhcyBhbiBlcnJv
ci4KLS8vCi1ib29sIFRQYXJzZUNvbnRleHQ6OnJlc2VydmVkRXJyb3JDaGVjayhjb25zdCBUU291
cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyKQotewotICAgIHN0YXRpYyBj
b25zdCBjaGFyKiByZXNlcnZlZEVyck1zZyA9ICJyZXNlcnZlZCBidWlsdC1pbiBuYW1lIjsKLSAg
ICBpZiAoIXN5bWJvbFRhYmxlLmF0QnVpbHRJbkxldmVsKCkpIHsKLSAgICAgICAgaWYgKGlkZW50
aWZpZXIuY29tcGFyZSgwLCAzLCAiZ2xfIikgPT0gMCkgewotICAgICAgICAgICAgZXJyb3IobGlu
ZSwgcmVzZXJ2ZWRFcnJNc2csICJnbF8iKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChpc1dlYkdMQmFzZWRTcGVjKHNoYWRlclNwZWMpKSB7Ci0gICAg
ICAgICAgICBpZiAoaWRlbnRpZmllci5jb21wYXJlKDAsIDYsICJ3ZWJnbF8iKSA9PSAwKSB7Ci0g
ICAgICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJ3ZWJnbF8iKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChpZGVudGlmaWVyLmNvbXBhcmUoMCwgNywgIl93ZWJnbF8iKSA9PSAwKSB7Ci0gICAgICAgICAg
ICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJfd2ViZ2xfIik7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc2hhZGVy
U3BlYyA9PSBTSF9DU1NfU0hBREVSU19TUEVDICYmIGlkZW50aWZpZXIuY29tcGFyZSgwLCA0LCAi
Y3NzXyIpID09IDApIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1z
ZywgImNzc18iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBpZiAoaWRlbnRpZmllci5maW5kKCJfXyIpICE9IFRTdHJpbmc6
Om5wb3MpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJpZGVudGlmaWVycyBjb250YWluaW5n
IHR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyAoX18pIGFyZSByZXNlcnZlZCBhcyBwb3NzaWJs
ZSBmdXR1cmUga2V5d29yZHMiLCBpZGVudGlmaWVyLmNfc3RyKCkpOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8v
Ci0vLyBNYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIGRhdGEgcHJvdmlkZWQgdG8gdGhlIGNvbnN0
cnVjdG9yIHRvIGJ1aWxkCi0vLyBzb21ldGhpbmcgb2YgdGhlIHR5cGUgb2YgdGhlIGNvbnN0cnVj
dG9yLiAgQWxzbyByZXR1cm5zIHRoZSB0eXBlIG9mCi0vLyB0aGUgY29uc3RydWN0b3IuCi0vLwot
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvciBpbiBjb25zdHJ1Y3Rpb24uCi0v
LwotYm9vbCBUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RvckVycm9yQ2hlY2soY29uc3QgVFNvdXJj
ZUxvYyYgbGluZSwgVEludGVybU5vZGUqIG5vZGUsIFRGdW5jdGlvbiYgZnVuY3Rpb24sIFRPcGVy
YXRvciBvcCwgVFR5cGUqIHR5cGUpCi17Ci0gICAgKnR5cGUgPSBmdW5jdGlvbi5nZXRSZXR1cm5U
eXBlKCk7Ci0KLSAgICBib29sIGNvbnN0cnVjdGluZ01hdHJpeCA9IGZhbHNlOwotICAgIHN3aXRj
aChvcCkgewotICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MjoKLSAgICBjYXNlIEVPcENvbnN0cnVj
dE1hdDM6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQ0OgotICAgICAgICBjb25zdHJ1Y3RpbmdN
YXRyaXggPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OiAKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBOb3RlOiBJdCdzIG9rYXkgdG8gaGF2ZSB0b28g
bWFueSBjb21wb25lbnRzIGF2YWlsYWJsZSwgYnV0IG5vdCBva2F5IHRvIGhhdmUgdW51c2VkCi0g
ICAgLy8gYXJndW1lbnRzLiAgJ2Z1bGwnIHdpbGwgZ28gdG8gdHJ1ZSB3aGVuIGVub3VnaCBhcmdz
IGhhdmUgYmVlbiBzZWVuLiAgSWYgd2UgbG9vcAotICAgIC8vIGFnYWluLCB0aGVyZSBpcyBhbiBl
eHRyYSBhcmd1bWVudCwgc28gJ292ZXJmdWxsJyB3aWxsIGJlY29tZSB0cnVlLgotICAgIC8vCi0K
LSAgICBzaXplX3Qgc2l6ZSA9IDA7Ci0gICAgYm9vbCBjb25zdFR5cGUgPSB0cnVlOwotICAgIGJv
b2wgZnVsbCA9IGZhbHNlOwotICAgIGJvb2wgb3ZlckZ1bGwgPSBmYWxzZTsKLSAgICBib29sIG1h
dHJpeEluTWF0cml4ID0gZmFsc2U7Ci0gICAgYm9vbCBhcnJheUFyZyA9IGZhbHNlOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpOyArK2kpIHsKLSAg
ICAgICAgY29uc3QgVFBhcmFtZXRlciYgcGFyYW0gPSBmdW5jdGlvbi5nZXRQYXJhbShpKTsKLSAg
ICAgICAgc2l6ZSArPSBwYXJhbS50eXBlLT5nZXRPYmplY3RTaXplKCk7Ci0gICAgICAgIAotICAg
ICAgICBpZiAoY29uc3RydWN0aW5nTWF0cml4ICYmIHBhcmFtLnR5cGUtPmlzTWF0cml4KCkpCi0g
ICAgICAgICAgICBtYXRyaXhJbk1hdHJpeCA9IHRydWU7Ci0gICAgICAgIGlmIChmdWxsKQotICAg
ICAgICAgICAgb3ZlckZ1bGwgPSB0cnVlOwotICAgICAgICBpZiAob3AgIT0gRU9wQ29uc3RydWN0
U3RydWN0ICYmICF0eXBlLT5pc0FycmF5KCkgJiYgc2l6ZSA+PSB0eXBlLT5nZXRPYmplY3RTaXpl
KCkpCi0gICAgICAgICAgICBmdWxsID0gdHJ1ZTsKLSAgICAgICAgaWYgKHBhcmFtLnR5cGUtPmdl
dFF1YWxpZmllcigpICE9IEV2cUNvbnN0KQotICAgICAgICAgICAgY29uc3RUeXBlID0gZmFsc2U7
Ci0gICAgICAgIGlmIChwYXJhbS50eXBlLT5pc0FycmF5KCkpCi0gICAgICAgICAgICBhcnJheUFy
ZyA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIGlmIChjb25zdFR5cGUpCi0gICAgICAgIHR5cGUt
PnNldFF1YWxpZmllcihFdnFDb25zdCk7Ci0KLSAgICBpZiAodHlwZS0+aXNBcnJheSgpICYmIHN0
YXRpY19jYXN0PHNpemVfdD4odHlwZS0+Z2V0QXJyYXlTaXplKCkpICE9IGZ1bmN0aW9uLmdldFBh
cmFtQ291bnQoKSkgewotICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgY29uc3RydWN0b3IgbmVl
ZHMgb25lIGFyZ3VtZW50IHBlciBhcnJheSBlbGVtZW50IiwgImNvbnN0cnVjdG9yIik7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChhcnJheUFyZyAmJiBvcCAhPSBFT3BD
b25zdHJ1Y3RTdHJ1Y3QpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBmcm9t
IGEgbm9uLWRlcmVmZXJlbmNlZCBhcnJheSIsICJjb25zdHJ1Y3RvciIpOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobWF0cml4SW5NYXRyaXggJiYgIXR5cGUtPmlzQXJy
YXkoKSkgewotICAgICAgICBpZiAoZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpICE9IDEpIHsKLSAg
ICAgICAgICBlcnJvcihsaW5lLCAiY29uc3RydWN0aW5nIG1hdHJpeCBmcm9tIG1hdHJpeCBjYW4g
b25seSB0YWtlIG9uZSBhcmd1bWVudCIsICJjb25zdHJ1Y3RvciIpOwotICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG92ZXJGdWxsKSB7Ci0gICAgICAg
IGVycm9yKGxpbmUsICJ0b28gbWFueSBhcmd1bWVudHMiLCAiY29uc3RydWN0b3IiKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIGlmIChvcCA9PSBFT3BDb25zdHJ1Y3RT
dHJ1Y3QgJiYgIXR5cGUtPmlzQXJyYXkoKSAmJiBpbnQodHlwZS0+Z2V0U3RydWN0KCktPmZpZWxk
cygpLnNpemUoKSkgIT0gZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpKSB7Ci0gICAgICAgIGVycm9y
KGxpbmUsICJOdW1iZXIgb2YgY29uc3RydWN0b3IgcGFyYW1ldGVycyBkb2VzIG5vdCBtYXRjaCB0
aGUgbnVtYmVyIG9mIHN0cnVjdHVyZSBmaWVsZHMiLCAiY29uc3RydWN0b3IiKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCF0eXBlLT5pc01hdHJpeCgpIHx8ICFtYXRy
aXhJbk1hdHJpeCkgewotICAgICAgICBpZiAoKG9wICE9IEVPcENvbnN0cnVjdFN0cnVjdCAmJiBz
aXplICE9IDEgJiYgc2l6ZSA8IHR5cGUtPmdldE9iamVjdFNpemUoKSkgfHwKLSAgICAgICAgICAg
IChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QgJiYgc2l6ZSA8IHR5cGUtPmdldE9iamVjdFNpemUo
KSkpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJub3QgZW5vdWdoIGRhdGEgcHJvdmlkZWQg
Zm9yIGNvbnN0cnVjdGlvbiIsICJjb25zdHJ1Y3RvciIpOwotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBUSW50ZXJtVHlwZWQgKnR5cGVkID0gbm9kZSA/
IG5vZGUtPmdldEFzVHlwZWQoKSA6IDA7Ci0gICAgaWYgKHR5cGVkID09IDApIHsKLSAgICAgICAg
ZXJyb3IobGluZSwgImNvbnN0cnVjdG9yIGFyZ3VtZW50IGRvZXMgbm90IGhhdmUgYSB0eXBlIiwg
ImNvbnN0cnVjdG9yIik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAob3Ag
IT0gRU9wQ29uc3RydWN0U3RydWN0ICYmIElzU2FtcGxlcih0eXBlZC0+Z2V0QmFzaWNUeXBlKCkp
KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgY29udmVydCBhIHNhbXBsZXIiLCAiY29u
c3RydWN0b3IiKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmICh0eXBlZC0+
Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgewotICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90
IGNvbnZlcnQgYSB2b2lkIiwgImNvbnN0cnVjdG9yIik7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8gVGhpcyBmdW5jdGlvbiBjaGVja3Mg
dG8gc2VlIGlmIGEgdm9pZCB2YXJpYWJsZSBoYXMgYmVlbiBkZWNsYXJlZCBhbmQgcmFpc2UgYW4g
ZXJyb3IgbWVzc2FnZSBmb3Igc3VjaCBhIGNhc2UKLS8vCi0vLyByZXR1cm5zIHRydWUgaW4gY2Fz
ZSBvZiBhbiBlcnJvcgotLy8KLWJvb2wgVFBhcnNlQ29udGV4dDo6dm9pZEVycm9yQ2hlY2soY29u
c3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgVFB1
YmxpY1R5cGUmIHB1YlR5cGUpCi17Ci0gICAgaWYgKHB1YlR5cGUudHlwZSA9PSBFYnRWb2lkKSB7
Ci0gICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2b2lkJyIsIGlkZW50
aWZpZXIuY19zdHIoKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gCi0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRvIHNlZSBpZiB0aGUgbm9k
ZSAoZm9yIHRoZSBleHByZXNzaW9uKSBjb250YWlucyBhIHNjYWxhciBib29sZWFuIGV4cHJlc3Np
b24gb3Igbm90Ci0vLwotLy8gcmV0dXJucyB0cnVlIGluIGNhc2Ugb2YgYW4gZXJyb3IKLS8vCi1i
b29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUs
IGNvbnN0IFRJbnRlcm1UeXBlZCogdHlwZSkKLXsKLSAgICBpZiAodHlwZS0+Z2V0QmFzaWNUeXBl
KCkgIT0gRWJ0Qm9vbCB8fCB0eXBlLT5pc0FycmF5KCkgfHwgdHlwZS0+aXNNYXRyaXgoKSB8fCB0
eXBlLT5pc1ZlY3RvcigpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJib29sZWFuIGV4cHJlc3Np
b24gZXhwZWN0ZWQiLCAiIik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gCi0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRvIHNlZSBpZiB0aGUg
bm9kZSAoZm9yIHRoZSBleHByZXNzaW9uKSBjb250YWlucyBhIHNjYWxhciBib29sZWFuIGV4cHJl
c3Npb24gb3Igbm90Ci0vLwotLy8gcmV0dXJucyB0cnVlIGluIGNhc2Ugb2YgYW4gZXJyb3IKLS8v
Ci1ib29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZSkKLXsKLSAgICBpZiAocFR5cGUudHlwZSAhPSBF
YnRCb29sIHx8IHBUeXBlLmFycmF5IHx8IHBUeXBlLm1hdHJpeCB8fCAocFR5cGUuc2l6ZSA+IDEp
KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJib29sZWFuIGV4cHJlc3Npb24gZXhwZWN0ZWQiLCAi
Iik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gCi0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgVFBhcnNlQ29udGV4dDo6c2FtcGxlckVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxv
YyYgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlLCBjb25zdCBjaGFyKiByZWFzb24pCi17
Ci0gICAgaWYgKHBUeXBlLnR5cGUgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgIGlmIChjb250YWlu
c1NhbXBsZXIoKnBUeXBlLnVzZXJEZWYpKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCByZWFz
b24sIGdldEJhc2ljU3RyaW5nKHBUeXBlLnR5cGUpLCAiKHN0cnVjdHVyZSBjb250YWlucyBhIHNh
bXBsZXIpIik7Ci0gICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2UgaWYgKElzU2FtcGxl
cihwVHlwZS50eXBlKSkgewotICAgICAgICBlcnJvcihsaW5lLCByZWFzb24sIGdldEJhc2ljU3Ry
aW5nKHBUeXBlLnR5cGUpKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVFBhcnNlQ29udGV4dDo6c3RydWN0UXVhbGlmaWVyRXJy
b3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUp
Ci17Ci0gICAgaWYgKChwVHlwZS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8IHBUeXBlLnF1
YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8IHBUeXBlLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1
dGUpICYmCi0gICAgICAgIHBUeXBlLnR5cGUgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgIGVycm9y
KGxpbmUsICJjYW5ub3QgYmUgdXNlZCB3aXRoIGEgc3RydWN0dXJlIiwgZ2V0UXVhbGlmaWVyU3Ry
aW5nKHBUeXBlLnF1YWxpZmllcikpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCi0gICAgaWYgKHBUeXBlLnF1YWxpZmllciAhPSBFdnFVbmlmb3JtICYmIHNhbXBsZXJF
cnJvckNoZWNrKGxpbmUsIHBUeXBlLCAic2FtcGxlcnMgbXVzdCBiZSB1bmlmb3JtIikpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFRQYXJzZUNv
bnRleHQ6OnBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUs
IFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBjb25zdCBUVHlwZSYgdHlwZSkKLXsKLSAgICBpZiAoKHF1
YWxpZmllciA9PSBFdnFPdXQgfHwgcXVhbGlmaWVyID09IEV2cUluT3V0KSAmJiAKLSAgICAgICAg
ICAgICB0eXBlLmdldEJhc2ljVHlwZSgpICE9IEVidFN0cnVjdCAmJiBJc1NhbXBsZXIodHlwZS5n
ZXRCYXNpY1R5cGUoKSkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgInNhbXBsZXJzIGNhbm5vdCBi
ZSBvdXRwdXQgcGFyYW1ldGVycyIsIHR5cGUuZ2V0QmFzaWNTdHJpbmcoKSk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBUUGFyc2VD
b250ZXh0Ojpjb250YWluc1NhbXBsZXIoVFR5cGUmIHR5cGUpCi17Ci0gICAgaWYgKElzU2FtcGxl
cih0eXBlLmdldEJhc2ljVHlwZSgpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAo
dHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAgY29uc3QgVEZpZWxk
TGlzdCYgZmllbGRzID0gdHlwZS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAg
ICBpZiAoY29udGFpbnNTYW1wbGVyKCpmaWVsZHNbaV0tPnR5cGUoKSkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLS8vCi0vLyBEbyBzaXplIGNoZWNraW5nIGZvciBhbiBhcnJheSB0eXBlJ3Mgc2l6ZS4KLS8v
Ci0vLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgotLy8KLWJvb2wgVFBhcnNl
Q29udGV4dDo6YXJyYXlTaXplRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUSW50
ZXJtVHlwZWQqIGV4cHIsIGludCYgc2l6ZSkKLXsKLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiog
Y29uc3RhbnQgPSBleHByLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLSAgICBpZiAoY29uc3RhbnQg
PT0gMCB8fCBjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0SW50KSB7Ci0gICAgICAgIGVy
cm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBjb25zdGFudCBpbnRlZ2VyIGV4cHJlc3Np
b24iLCAiIik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHNpemUgPSBjb25z
dGFudC0+Z2V0SUNvbnN0KDApOwotCi0gICAgaWYgKHNpemUgPD0gMCkgewotICAgICAgICBlcnJv
cihsaW5lLCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciIsICIiKTsKLSAg
ICAgICAgc2l6ZSA9IDE7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotLy8KLS8vIFNlZSBpZiB0aGlzIHF1YWxpZmllciBjYW4gYmUgYW4gYXJy
YXkuCi0vLwotLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGFuIGVycm9yLgotLy8KLWJvb2wg
VFBhcnNlQ29udGV4dDo6YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2Mm
IGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpCi17Ci0gICAgaWYgKCh0eXBlLnF1YWxpZmllciA9PSBF
dnFBdHRyaWJ1dGUpIHx8ICh0eXBlLnF1YWxpZmllciA9PSBFdnFDb25zdCkpIHsKLSAgICAgICAg
ZXJyb3IobGluZSwgImNhbm5vdCBkZWNsYXJlIGFycmF5cyBvZiB0aGlzIHF1YWxpZmllciIsIFRU
eXBlKHR5cGUpLmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8KLS8vIFNlZSBpZiB0aGlz
IHR5cGUgY2FuIGJlIGFuIGFycmF5LgotLy8KLS8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBh
biBlcnJvci4KLS8vCi1ib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5VHlwZUVycm9yQ2hlY2soY29u
c3QgVFNvdXJjZUxvYyYgbGluZSwgVFB1YmxpY1R5cGUgdHlwZSkKLXsKLSAgICAvLwotICAgIC8v
IENhbiB0aGUgdHlwZSBiZSBhbiBhcnJheT8KLSAgICAvLwotICAgIGlmICh0eXBlLmFycmF5KSB7
Ci0gICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgZGVjbGFyZSBhcnJheXMgb2YgYXJyYXlzIiwg
VFR5cGUodHlwZSkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLwotLy8gRG8gYWxsIHRo
ZSBzZW1hbnRpYyBjaGVja2luZyBmb3IgZGVjbGFyaW5nIGFuIGFycmF5LCB3aXRoIGFuZCAKLS8v
IHdpdGhvdXQgYSBzaXplLCBhbmQgbWFrZSB0aGUgcmlnaHQgY2hhbmdlcyB0byB0aGUgc3ltYm9s
IHRhYmxlLgotLy8KLS8vIHNpemUgPT0gMCBtZWFucyBubyBzcGVjaWZpZWQgc2l6ZS4KLS8vCi0v
LyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgotLy8KLWJvb2wgVFBhcnNlQ29u
dGV4dDo6YXJyYXlFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlk
ZW50aWZpZXIsIFRQdWJsaWNUeXBlIHR5cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKQotewotICAg
IC8vCi0gICAgLy8gRG9uJ3QgY2hlY2sgZm9yIHJlc2VydmVkIHdvcmQgdXNlIHVudGlsIGFmdGVy
IHdlIGtub3cgaXQncyBub3QgaW4gdGhlIHN5bWJvbCB0YWJsZSwKLSAgICAvLyBiZWNhdXNlIHJl
c2VydmVkIGFycmF5cyBjYW4gYmUgcmVkZWNsYXJlZC4KLSAgICAvLwotCi0gICAgYm9vbCBidWls
dEluID0gZmFsc2U7IAotICAgIGJvb2wgc2FtZVNjb3BlID0gZmFsc2U7Ci0gICAgVFN5bWJvbCog
c3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChpZGVudGlmaWVyLCAmYnVpbHRJbiwgJnNhbWVTY29w
ZSk7Ci0gICAgaWYgKHN5bWJvbCA9PSAwIHx8ICFzYW1lU2NvcGUpIHsKLSAgICAgICAgaWYgKHJl
c2VydmVkRXJyb3JDaGVjayhsaW5lLCBpZGVudGlmaWVyKSkKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAKLSAgICAgICAgdmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCZpZGVudGlm
aWVyLCBUVHlwZSh0eXBlKSk7Ci0KLSAgICAgICAgaWYgKHR5cGUuYXJyYXlTaXplKQotICAgICAg
ICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5zZXRBcnJheVNpemUodHlwZS5hcnJheVNpemUpOwot
Ci0gICAgICAgIGlmICghIHN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7Ci0gICAgICAg
ICAgICBkZWxldGUgdmFyaWFibGU7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiSU5URVJOQUwg
RVJST1IgaW5zZXJ0aW5nIG5ldyBzeW1ib2wiLCBpZGVudGlmaWVyLmNfc3RyKCkpOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAo
ISBzeW1ib2wtPmlzVmFyaWFibGUoKSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwgInZhcmlh
YmxlIGV4cGVjdGVkIiwgaWRlbnRpZmllci5jX3N0cigpKTsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxUVmFyaWFi
bGUqPihzeW1ib2wpOwotICAgICAgICBpZiAoISB2YXJpYWJsZS0+Z2V0VHlwZSgpLmlzQXJyYXko
KSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyaW5nIG5vbi1hcnJheSBhcyBh
cnJheSIsIGlkZW50aWZpZXIuY19zdHIoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAodmFyaWFibGUtPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSA+
IDApIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlY2xhcmF0aW9uIG9mIGFycmF5IHdp
dGggc2l6ZSIsIGlkZW50aWZpZXIuY19zdHIoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKCEgdmFyaWFibGUtPmdldFR5cGUoKS5z
YW1lRWxlbWVudFR5cGUoVFR5cGUodHlwZSkpKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAi
cmVkZWNsYXJhdGlvbiBvZiBhcnJheSB3aXRoIGEgZGlmZmVyZW50IHR5cGUiLCBpZGVudGlmaWVy
LmNfc3RyKCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAodHlwZS5hcnJheVNpemUpCi0gICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNl
dEFycmF5U2l6ZSh0eXBlLmFycmF5U2l6ZSk7Ci0gICAgfSAKLQotICAgIGlmICh2b2lkRXJyb3JD
aGVjayhsaW5lLCBpZGVudGlmaWVyLCB0eXBlKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vCi0vLyBFbmZvcmNlIG5vbi1pbml0aWFsaXplciB0eXBl
L3F1YWxpZmllciBydWxlcy4KLS8vCi0vLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVy
cm9yLgotLy8KLWJvb2wgVFBhcnNlQ29udGV4dDo6bm9uSW5pdENvbnN0RXJyb3JDaGVjayhjb25z
dCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlw
ZSwgYm9vbCBhcnJheSkKLXsKLSAgICBpZiAodHlwZS5xdWFsaWZpZXIgPT0gRXZxQ29uc3QpCi0g
ICAgewotICAgICAgICAvLyBNYWtlIHRoZSBxdWFsaWZpZXIgbWFrZSBzZW5zZS4KLSAgICAgICAg
dHlwZS5xdWFsaWZpZXIgPSBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgIAotICAgICAgICBpZiAoYXJy
YXkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJhcnJheXMgbWF5IG5vdCBi
ZSBkZWNsYXJlZCBjb25zdGFudCBzaW5jZSB0aGV5IGNhbm5vdCBiZSBpbml0aWFsaXplZCIsIGlk
ZW50aWZpZXIuY19zdHIoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodHlwZS5pc1N0
cnVjdHVyZUNvbnRhaW5pbmdBcnJheXMoKSkKLSAgICAgICAgewotICAgICAgICAgICAgZXJyb3Io
bGluZSwgInN0cnVjdHVyZXMgY29udGFpbmluZyBhcnJheXMgbWF5IG5vdCBiZSBkZWNsYXJlZCBj
b25zdGFudCBzaW5jZSB0aGV5IGNhbm5vdCBiZSBpbml0aWFsaXplZCIsIGlkZW50aWZpZXIuY19z
dHIoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBl
cnJvcihsaW5lLCAidmFyaWFibGVzIHdpdGggcXVhbGlmaWVyICdjb25zdCcgbXVzdCBiZSBpbml0
aWFsaXplZCIsIGlkZW50aWZpZXIuY19zdHIoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vCi0vLyBEbyBzZW1h
bnRpYyBjaGVja2luZyBmb3IgYSB2YXJpYWJsZSBkZWNsYXJhdGlvbiB0aGF0IGhhcyBubyBpbml0
aWFsaXplciwKLS8vIGFuZCB1cGRhdGUgdGhlIHN5bWJvbCB0YWJsZS4KLS8vCi0vLyBSZXR1cm5z
IHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgotLy8KLWJvb2wgVFBhcnNlQ29udGV4dDo6bm9u
SW5pdEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFN0cmluZyYgaWRlbnRpZmll
ciwgVFB1YmxpY1R5cGUmIHR5cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKQotewotICAgIGlmIChy
ZXNlcnZlZEVycm9yQ2hlY2sobGluZSwgaWRlbnRpZmllcikpCi0gICAgICAgIHJlY292ZXIoKTsK
LQotICAgIHZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgmaWRlbnRpZmllciwgVFR5cGUodHlwZSkp
OwotCi0gICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKLSAgICAgICAg
ZXJyb3IobGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7
Ci0gICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKLSAgICAgICAgdmFyaWFibGUgPSAwOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAodm9pZEVycm9yQ2hlY2sobGluZSwgaWRl
bnRpZmllciwgdHlwZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIFRQYXJzZUNvbnRleHQ6OnBhcmFtRXJyb3JDaGVjayhjb25zdCBUU291cmNl
TG9jJiBsaW5lLCBUUXVhbGlmaWVyIHF1YWxpZmllciwgVFF1YWxpZmllciBwYXJhbVF1YWxpZmll
ciwgVFR5cGUqIHR5cGUpCi17ICAgIAotICAgIGlmIChxdWFsaWZpZXIgIT0gRXZxQ29uc3QgJiYg
cXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgewotICAgICAgICBlcnJvcihsaW5lLCAicXVhbGlm
aWVyIG5vdCBhbGxvd2VkIG9uIGZ1bmN0aW9uIHBhcmFtZXRlciIsIGdldFF1YWxpZmllclN0cmlu
ZyhxdWFsaWZpZXIpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmIChxdWFs
aWZpZXIgPT0gRXZxQ29uc3QgJiYgcGFyYW1RdWFsaWZpZXIgIT0gRXZxSW4pIHsKLSAgICAgICAg
ZXJyb3IobGluZSwgInF1YWxpZmllciBub3QgYWxsb3dlZCB3aXRoICIsIGdldFF1YWxpZmllclN0
cmluZyhxdWFsaWZpZXIpLCBnZXRRdWFsaWZpZXJTdHJpbmcocGFyYW1RdWFsaWZpZXIpKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHF1YWxpZmllciA9PSBFdnFDb25z
dCkKLSAgICAgICAgdHlwZS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0UmVhZE9ubHkpOwotICAgIGVs
c2UKLSAgICAgICAgdHlwZS0+c2V0UXVhbGlmaWVyKHBhcmFtUXVhbGlmaWVyKTsKLQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotYm9vbCBUUGFyc2VDb250ZXh0OjpleHRlbnNpb25FcnJvckNoZWNr
KGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGV4dGVuc2lvbikKLXsKLSAg
ICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yID0gZXh0ZW5zaW9uQmVoYXZp
b3IoKTsKLSAgICBURXh0ZW5zaW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRC
ZWhhdmlvci5maW5kKGV4dGVuc2lvbi5jX3N0cigpKTsKLSAgICBpZiAoaXRlciA9PSBleHRCZWhh
dmlvci5lbmQoKSkgewotICAgICAgICBlcnJvcihsaW5lLCAiZXh0ZW5zaW9uIiwgZXh0ZW5zaW9u
LmNfc3RyKCksICJpcyBub3Qgc3VwcG9ydGVkIik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICAvLyBJbiBHTFNMIEVTLCBhbiBleHRlbnNpb24ncyBkZWZhdWx0IGJlaGF2aW9yIGlz
ICJkaXNhYmxlIi4KLSAgICBpZiAoaXRlci0+c2Vjb25kID09IEVCaERpc2FibGUgfHwgaXRlci0+
c2Vjb25kID09IEVCaFVuZGVmaW5lZCkgewotICAgICAgICBlcnJvcihsaW5lLCAiZXh0ZW5zaW9u
IiwgZXh0ZW5zaW9uLmNfc3RyKCksICJpcyBkaXNhYmxlZCIpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgaWYgKGl0ZXItPnNlY29uZCA9PSBFQmhXYXJuKSB7Ci0gICAgICAgIHdh
cm5pbmcobGluZSwgImV4dGVuc2lvbiIsIGV4dGVuc2lvbi5jX3N0cigpLCAiaXMgYmVpbmcgdXNl
ZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIFRQYXJzZUNvbnRleHQ6OnN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IGNoYXIqIGV4
dGVuc2lvbikKLXsKLSAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dGJlaGF2aW9yID0g
ZXh0ZW5zaW9uQmVoYXZpb3IoKTsKLSAgICBURXh0ZW5zaW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJh
dG9yIGl0ZXIgPSBleHRiZWhhdmlvci5maW5kKGV4dGVuc2lvbik7Ci0gICAgcmV0dXJuIChpdGVy
ICE9IGV4dGJlaGF2aW9yLmVuZCgpKTsKLX0KLQotYm9vbCBUUGFyc2VDb250ZXh0Ojppc0V4dGVu
c2lvbkVuYWJsZWQoY29uc3QgY2hhciogZXh0ZW5zaW9uKSBjb25zdAotewotICAgIGNvbnN0IFRF
eHRlbnNpb25CZWhhdmlvciYgZXh0YmVoYXZpb3IgPSBleHRlbnNpb25CZWhhdmlvcigpOwotICAg
IFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dGJlaGF2aW9yLmZp
bmQoZXh0ZW5zaW9uKTsKLQotICAgIGlmIChpdGVyID09IGV4dGJlaGF2aW9yLmVuZCgpKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiAoaXRlci0+c2Vj
b25kID09IEVCaEVuYWJsZSB8fCBpdGVyLT5zZWNvbmQgPT0gRUJoUmVxdWlyZSk7Ci19Ci0KLS8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8KLS8vIE5vbi1FcnJvcnMuCi0vLwotLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCi0KLS8vCi0vLyBMb29rIHVwIGEgZnVuY3Rpb24gbmFtZSBpbiB0aGUg
c3ltYm9sIHRhYmxlLCBhbmQgbWFrZSBzdXJlIGl0IGlzIGEgZnVuY3Rpb24uCi0vLwotLy8gUmV0
dXJuIHRoZSBmdW5jdGlvbiBzeW1ib2wgaWYgZm91bmQsIG90aGVyd2lzZSAwLgotLy8KLWNvbnN0
IFRGdW5jdGlvbiogVFBhcnNlQ29udGV4dDo6ZmluZEZ1bmN0aW9uKGNvbnN0IFRTb3VyY2VMb2Mm
IGxpbmUsIFRGdW5jdGlvbiogY2FsbCwgYm9vbCAqYnVpbHRJbikKLXsKLSAgICAvLyBGaXJzdCBm
aW5kIGJ5IHVubWFuZ2xlZCBuYW1lIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIG5hbWUg
aGFzIGJlZW4KLSAgICAvLyBoaWRkZW4gYnkgYSB2YXJpYWJsZSBuYW1lIG9yIHN0cnVjdCB0eXBl
bmFtZS4KLSAgICAvLyBJZiBhIGZ1bmN0aW9uIGlzIGZvdW5kLCBjaGVjayBmb3Igb25lIHdpdGgg
YSBtYXRjaGluZyBhcmd1bWVudCBsaXN0LgotICAgIGNvbnN0IFRTeW1ib2wqIHN5bWJvbCA9IHN5
bWJvbFRhYmxlLmZpbmQoY2FsbC0+Z2V0TmFtZSgpLCBidWlsdEluKTsKLSAgICBpZiAoc3ltYm9s
ID09IDAgfHwgc3ltYm9sLT5pc0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgc3ltYm9sID0gc3ltYm9s
VGFibGUuZmluZChjYWxsLT5nZXRNYW5nbGVkTmFtZSgpLCBidWlsdEluKTsKLSAgICB9Ci0KLSAg
ICBpZiAoc3ltYm9sID09IDApIHsKLSAgICAgICAgZXJyb3IobGluZSwgIm5vIG1hdGNoaW5nIG92
ZXJsb2FkZWQgZnVuY3Rpb24gZm91bmQiLCBjYWxsLT5nZXROYW1lKCkuY19zdHIoKSk7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGlmICghc3ltYm9sLT5pc0Z1bmN0aW9uKCkpIHsK
LSAgICAgICAgZXJyb3IobGluZSwgImZ1bmN0aW9uIG5hbWUgZXhwZWN0ZWQiLCBjYWxsLT5nZXRO
YW1lKCkuY19zdHIoKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxjb25zdCBURnVuY3Rpb24qPihzeW1ib2wpOwotfQotCi0vLwotLy8gSW5pdGlh
bGl6ZXJzIHNob3cgdXAgaW4gc2V2ZXJhbCBwbGFjZXMgaW4gdGhlIGdyYW1tYXIuICBIYXZlIG9u
ZSBzZXQgb2YKLS8vIGNvZGUgdG8gaGFuZGxlIHRoZW0gaGVyZS4KLS8vCi1ib29sIFRQYXJzZUNv
bnRleHQ6OmV4ZWN1dGVJbml0aWFsaXplcihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5n
JiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgcFR5cGUsIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbml0aWFsaXplciwgVEludGVybU5vZGUq
JiBpbnRlcm1Ob2RlLCBUVmFyaWFibGUqIHZhcmlhYmxlKQotewotICAgIFRUeXBlIHR5cGUgPSBU
VHlwZShwVHlwZSk7Ci0KLSAgICBpZiAodmFyaWFibGUgPT0gMCkgewotICAgICAgICBpZiAocmVz
ZXJ2ZWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIpKQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICAgICAgaWYgKHZvaWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIsIHBUeXBl
KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIC8vCi0gICAgICAgIC8vIGFk
ZCB2YXJpYWJsZSB0byBzeW1ib2wgdGFibGUKLSAgICAgICAgLy8KLSAgICAgICAgdmFyaWFibGUg
PSBuZXcgVFZhcmlhYmxlKCZpZGVudGlmaWVyLCB0eXBlKTsKLSAgICAgICAgaWYgKCEgc3ltYm9s
VGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRl
ZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgICAgICAvLyBkb24ndCBkZWxldGUgdmFyaWFibGUsIGl0J3MgdXNl
ZCBieSBlcnJvciByZWNvdmVyeSwgYW5kIHRoZSBwb29sIAotICAgICAgICAgICAgLy8gcG9wIHdp
bGwgdGFrZSBjYXJlIG9mIHRoZSBtZW1vcnkKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vCi0g
ICAgLy8gaWRlbnRpZmllciBtdXN0IGJlIG9mIHR5cGUgY29uc3RhbnQsIGEgZ2xvYmFsLCBvciBh
IHRlbXBvcmFyeQotICAgIC8vCi0gICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSB2YXJpYWJsZS0+
Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpOwotICAgIGlmICgocXVhbGlmaWVyICE9IEV2cVRlbXBv
cmFyeSkgJiYgKHF1YWxpZmllciAhPSBFdnFHbG9iYWwpICYmIChxdWFsaWZpZXIgIT0gRXZxQ29u
c3QpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIgY2Fubm90IGluaXRpYWxpemUgdGhpcyB0eXBl
IG9mIHF1YWxpZmllciAiLCB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllclN0cmluZygp
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIC8vCi0gICAgLy8gdGVzdCBmb3Ig
YW5kIHByb3BhZ2F0ZSBjb25zdGFudAotICAgIC8vCi0KLSAgICBpZiAocXVhbGlmaWVyID09IEV2
cUNvbnN0KSB7Ci0gICAgICAgIGlmIChxdWFsaWZpZXIgIT0gaW5pdGlhbGl6ZXItPmdldFR5cGUo
KS5nZXRRdWFsaWZpZXIoKSkgewotICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJ
bmZvU3RyZWFtOwotICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICInIiA8PCB2YXJpYWJs
ZS0+Z2V0VHlwZSgpLmdldENvbXBsZXRlU3RyaW5nKCkgPDwgIiciOwotICAgICAgICAgICAgc3Rk
OjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOwotICAgICAgICAgICAg
ZXJyb3IobGluZSwgIiBhc3NpZ25pbmcgbm9uLWNvbnN0YW50IHRvIiwgIj0iLCBleHRyYUluZm8u
Y19zdHIoKSk7Ci0gICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldFF1YWxpZmllcihF
dnFUZW1wb3JhcnkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKHR5cGUgIT0gaW5pdGlhbGl6ZXItPmdldFR5cGUoKSkgewotICAgICAgICAgICAgZXJy
b3IobGluZSwgIiBub24tbWF0Y2hpbmcgdHlwZXMgZm9yIGNvbnN0IGluaXRpYWxpemVyICIsIAot
ICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyU3RyaW5nKCkp
OwotICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5zZXRRdWFsaWZpZXIoRXZxVGVtcG9y
YXJ5KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChp
bml0aWFsaXplci0+Z2V0QXNDb25zdGFudFVuaW9uKCkpIHsgCi0gICAgICAgICAgICB2YXJpYWJs
ZS0+c2hhcmVDb25zdFBvaW50ZXIoaW5pdGlhbGl6ZXItPmdldEFzQ29uc3RhbnRVbmlvbigpLT5n
ZXRVbmlvbkFycmF5UG9pbnRlcigpKTsKLSAgICAgICAgfSBlbHNlIGlmIChpbml0aWFsaXplci0+
Z2V0QXNTeW1ib2xOb2RlKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IFRTeW1ib2wqIHN5bWJvbCA9
IHN5bWJvbFRhYmxlLmZpbmQoaW5pdGlhbGl6ZXItPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1i
b2woKSk7Ci0gICAgICAgICAgICBjb25zdCBUVmFyaWFibGUqIHRWYXIgPSBzdGF0aWNfY2FzdDxj
b25zdCBUVmFyaWFibGUqPihzeW1ib2wpOwotCi0gICAgICAgICAgICBDb25zdGFudFVuaW9uKiBj
b25zdEFycmF5ID0gdFZhci0+Z2V0Q29uc3RQb2ludGVyKCk7Ci0gICAgICAgICAgICB2YXJpYWJs
ZS0+c2hhcmVDb25zdFBvaW50ZXIoY29uc3RBcnJheSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07Ci0gICAgICAgICAgICBl
eHRyYUluZm9TdHJlYW0gPDwgIiciIDw8IHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVT
dHJpbmcoKSA8PCAiJyI7Ci0gICAgICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRy
YUluZm9TdHJlYW0uc3RyKCk7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiIGNhbm5vdCBhc3Np
Z24gdG8iLCAiPSIsIGV4dHJhSW5mby5jX3N0cigpKTsKLSAgICAgICAgICAgIHZhcmlhYmxlLT5n
ZXRUeXBlKCkuc2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAKLSAgICBpZiAocXVhbGlmaWVyICE9IEV2cUNvbnN0
KSB7Ci0gICAgICAgIFRJbnRlcm1TeW1ib2wqIGludGVybVN5bWJvbCA9IGludGVybWVkaWF0ZS5h
ZGRTeW1ib2wodmFyaWFibGUtPmdldFVuaXF1ZUlkKCksIHZhcmlhYmxlLT5nZXROYW1lKCksIHZh
cmlhYmxlLT5nZXRUeXBlKCksIGxpbmUpOwotICAgICAgICBpbnRlcm1Ob2RlID0gaW50ZXJtZWRp
YXRlLmFkZEFzc2lnbihFT3BJbml0aWFsaXplLCBpbnRlcm1TeW1ib2wsIGluaXRpYWxpemVyLCBs
aW5lKTsKLSAgICAgICAgaWYgKGludGVybU5vZGUgPT0gMCkgewotICAgICAgICAgICAgYXNzaWdu
RXJyb3IobGluZSwgIj0iLCBpbnRlcm1TeW1ib2wtPmdldENvbXBsZXRlU3RyaW5nKCksIGluaXRp
YWxpemVyLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0gICAgfSBlbHNlIAotICAgICAgICBpbnRlcm1Ob2RlID0gMDsKLQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotYm9vbCBUUGFyc2VDb250ZXh0OjphcmVBbGxDaGlsZENvbnN0KFRJ
bnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlKQotewotICAgIEFTU0VSVChhZ2dyTm9kZSAhPSBOVUxM
KTsKLSAgICBpZiAoIWFnZ3JOb2RlLT5pc0NvbnN0cnVjdG9yKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGJvb2wgYWxsQ29uc3RhbnQgPSB0cnVlOwotCi0gICAgLy8gY2hlY2sgaWYg
YWxsIHRoZSBjaGlsZCBub2RlcyBhcmUgY29uc3RhbnRzIHNvIHRoYXQgdGhleSBjYW4gYmUgaW5z
ZXJ0ZWQgaW50byAKLSAgICAvLyB0aGUgcGFyZW50IG5vZGUKLSAgICBUSW50ZXJtU2VxdWVuY2Ug
JnNlcXVlbmNlID0gYWdnck5vZGUtPmdldFNlcXVlbmNlKCkgOwotICAgIGZvciAoVEludGVybVNl
cXVlbmNlOjppdGVyYXRvciBwID0gc2VxdWVuY2UuYmVnaW4oKTsgcCAhPSBzZXF1ZW5jZS5lbmQo
KTsgKytwKSB7Ci0gICAgICAgIGlmICghKCpwKS0+Z2V0QXNUeXBlZCgpLT5nZXRBc0NvbnN0YW50
VW5pb24oKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
YWxsQ29uc3RhbnQ7Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byB0ZXN0IGZvciB0
aGUgY29ycmVjdG5lc3Mgb2YgdGhlIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHZhcmlvdXMgY29uc3Ry
dWN0b3IgZnVuY3Rpb25zCi0vLyBhbmQgYWxzbyBjb252ZXJ0IHRoZW0gdG8gdGhlIHJpZ2h0IGRh
dGF0eXBlIGlmIGl0IGlzIGFsbG93ZWQgYW5kIHJlcXVpcmVkLiAKLS8vCi0vLyBSZXR1cm5zIDAg
Zm9yIGFuIGVycm9yIG9yIHRoZSBjb25zdHJ1Y3RlZCBub2RlIChhZ2dyZWdhdGUgb3IgdHlwZWQp
IGZvciBubyBlcnJvci4KLS8vCi1USW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0
cnVjdG9yKFRJbnRlcm1Ob2RlKiBub2RlLCBjb25zdCBUVHlwZSogdHlwZSwgVE9wZXJhdG9yIG9w
LCBURnVuY3Rpb24qIGZuQ2FsbCwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKLXsKLSAgICBpZiAo
bm9kZSA9PSAwKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFn
Z3JOb2RlID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsKLSAgICAKLSAgICBURmllbGRMaXN0Ojpj
b25zdF9pdGVyYXRvciBtZW1iZXJGaWVsZHM7Ci0gICAgaWYgKG9wID09IEVPcENvbnN0cnVjdFN0
cnVjdCkKLSAgICAgICAgbWVtYmVyRmllbGRzID0gdHlwZS0+Z2V0U3RydWN0KCktPmZpZWxkcygp
LmJlZ2luKCk7Ci0gICAgCi0gICAgVFR5cGUgZWxlbWVudFR5cGUgPSAqdHlwZTsKLSAgICBpZiAo
dHlwZS0+aXNBcnJheSgpKQotICAgICAgICBlbGVtZW50VHlwZS5jbGVhckFycmF5bmVzcygpOwot
Ci0gICAgYm9vbCBzaW5nbGVBcmc7Ci0gICAgaWYgKGFnZ3JOb2RlKSB7Ci0gICAgICAgIGlmIChh
Z2dyTm9kZS0+Z2V0T3AoKSAhPSBFT3BOdWxsIHx8IGFnZ3JOb2RlLT5nZXRTZXF1ZW5jZSgpLnNp
emUoKSA9PSAxKQotICAgICAgICAgICAgc2luZ2xlQXJnID0gdHJ1ZTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgc2luZ2xlQXJnID0gZmFsc2U7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNpbmds
ZUFyZyA9IHRydWU7Ci0KLSAgICBUSW50ZXJtVHlwZWQgKm5ld05vZGU7Ci0gICAgaWYgKHNpbmds
ZUFyZykgewotICAgICAgICAvLyBJZiBzdHJ1Y3R1cmUgY29uc3RydWN0b3Igb3IgYXJyYXkgY29u
c3RydWN0b3IgaXMgYmVpbmcgY2FsbGVkIAotICAgICAgICAvLyBmb3Igb25seSBvbmUgcGFyYW1l
dGVyIGluc2lkZSB0aGUgc3RydWN0dXJlLCB3ZSBuZWVkIHRvIGNhbGwgY29uc3RydWN0U3RydWN0
IGZ1bmN0aW9uIG9uY2UuCi0gICAgICAgIGlmICh0eXBlLT5pc0FycmF5KCkpCi0gICAgICAgICAg
ICBuZXdOb2RlID0gY29uc3RydWN0U3RydWN0KG5vZGUsICZlbGVtZW50VHlwZSwgMSwgbm9kZS0+
Z2V0TGluZSgpLCBmYWxzZSk7Ci0gICAgICAgIGVsc2UgaWYgKG9wID09IEVPcENvbnN0cnVjdFN0
cnVjdCkKLSAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RTdHJ1Y3Qobm9kZSwgKCptZW1i
ZXJGaWVsZHMpLT50eXBlKCksIDEsIG5vZGUtPmdldExpbmUoKSwgZmFsc2UpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0QnVpbHRJbih0eXBlLCBvcCwgbm9k
ZSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxzZSk7Ci0KLSAgICAgICAgaWYgKG5ld05vZGUgJiYgbmV3
Tm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKSkgewotICAgICAgICAgICAgVEludGVybVR5cGVkKiBjb25z
dENvbnN0cnVjdG9yID0gZm9sZENvbnN0Q29uc3RydWN0b3IobmV3Tm9kZS0+Z2V0QXNBZ2dyZWdh
dGUoKSwgKnR5cGUpOwotICAgICAgICAgICAgaWYgKGNvbnN0Q29uc3RydWN0b3IpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGNvbnN0Q29uc3RydWN0b3I7Ci0gICAgICAgIH0KLQotICAgICAgICBy
ZXR1cm4gbmV3Tm9kZTsKLSAgICB9Ci0gICAgCi0gICAgLy8KLSAgICAvLyBIYW5kbGUgbGlzdCBv
ZiBhcmd1bWVudHMuCi0gICAgLy8KLSAgICBUSW50ZXJtU2VxdWVuY2UgJnNlcXVlbmNlVmVjdG9y
ID0gYWdnck5vZGUtPmdldFNlcXVlbmNlKCkgOyAgICAvLyBTdG9yZXMgdGhlIGluZm9ybWF0aW9u
IGFib3V0IHRoZSBwYXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yCi0gICAgLy8gaWYgdGhlIHN0
cnVjdHVyZSBjb25zdHJ1Y3RvciBjb250YWlucyBtb3JlIHRoYW4gb25lIHBhcmFtZXRlciwgdGhl
biBjb25zdHJ1Y3QKLSAgICAvLyBlYWNoIHBhcmFtZXRlcgotICAgIAotICAgIGludCBwYXJhbUNv
dW50ID0gMDsgIC8vIGtlZXBzIGEgdHJhY2sgb2YgdGhlIGNvbnN0cnVjdG9yIHBhcmFtZXRlciBu
dW1iZXIgYmVpbmcgY2hlY2tlZCAgICAKLSAgICAKLSAgICAvLyBmb3IgZWFjaCBwYXJhbWV0ZXIg
dG8gdGhlIGNvbnN0cnVjdG9yIGNhbGwsIGNoZWNrIHRvIHNlZSBpZiB0aGUgcmlnaHQgdHlwZSBp
cyBwYXNzZWQgb3IgY29udmVydCB0aGVtIAotICAgIC8vIHRvIHRoZSByaWdodCB0eXBlIGlmIHBv
c3NpYmxlIChhbmQgYWxsb3dlZCkuCi0gICAgLy8gZm9yIHN0cnVjdHVyZSBjb25zdHJ1Y3RvcnMs
IGp1c3QgY2hlY2sgaWYgdGhlIHJpZ2h0IHR5cGUgaXMgcGFzc2VkLCBubyBjb252ZXJzaW9uIGlz
IGFsbG93ZWQuCi0gICAgCi0gICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHAgPSBz
ZXF1ZW5jZVZlY3Rvci5iZWdpbigpOyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcCAhPSBzZXF1ZW5jZVZlY3Rvci5lbmQoKTsgcCsrLCBwYXJhbUNvdW50KyspIHsKLSAgICAg
ICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkKLSAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RT
dHJ1Y3QoKnAsICZlbGVtZW50VHlwZSwgcGFyYW1Db3VudCsxLCBub2RlLT5nZXRMaW5lKCksIHRy
dWUpOwotICAgICAgICBlbHNlIGlmIChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QpCi0gICAgICAg
ICAgICBuZXdOb2RlID0gY29uc3RydWN0U3RydWN0KCpwLCBtZW1iZXJGaWVsZHNbcGFyYW1Db3Vu
dF0tPnR5cGUoKSwgcGFyYW1Db3VudCsxLCBub2RlLT5nZXRMaW5lKCksIHRydWUpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0QnVpbHRJbih0eXBlLCBvcCwg
KnAsIG5vZGUtPmdldExpbmUoKSwgdHJ1ZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAobmV3Tm9k
ZSkgewotICAgICAgICAgICAgKnAgPSBuZXdOb2RlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
VEludGVybVR5cGVkKiBjb25zdHJ1Y3RvciA9IGludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVy
YXRvcihhZ2dyTm9kZSwgb3AsIGxpbmUpOwotICAgIFRJbnRlcm1UeXBlZCogY29uc3RDb25zdHJ1
Y3RvciA9IGZvbGRDb25zdENvbnN0cnVjdG9yKGNvbnN0cnVjdG9yLT5nZXRBc0FnZ3JlZ2F0ZSgp
LCAqdHlwZSk7Ci0gICAgaWYgKGNvbnN0Q29uc3RydWN0b3IpCi0gICAgICAgIHJldHVybiBjb25z
dENvbnN0cnVjdG9yOwotCi0gICAgcmV0dXJuIGNvbnN0cnVjdG9yOwotfQotCi1USW50ZXJtVHlw
ZWQqIFRQYXJzZUNvbnRleHQ6OmZvbGRDb25zdENvbnN0cnVjdG9yKFRJbnRlcm1BZ2dyZWdhdGUq
IGFnZ3JOb2RlLCBjb25zdCBUVHlwZSYgdHlwZSkKLXsKLSAgICBib29sIGNhbkJlRm9sZGVkID0g
YXJlQWxsQ2hpbGRDb25zdChhZ2dyTm9kZSk7Ci0gICAgYWdnck5vZGUtPnNldFR5cGUodHlwZSk7
Ci0gICAgaWYgKGNhbkJlRm9sZGVkKSB7Ci0gICAgICAgIGJvb2wgcmV0dXJuVmFsID0gZmFsc2U7
Ci0gICAgICAgIENvbnN0YW50VW5pb24qIHVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblt0
eXBlLmdldE9iamVjdFNpemUoKV07Ci0gICAgICAgIGlmIChhZ2dyTm9kZS0+Z2V0U2VxdWVuY2Uo
KS5zaXplKCkgPT0gMSkgIHsKLSAgICAgICAgICAgIHJldHVyblZhbCA9IGludGVybWVkaWF0ZS5w
YXJzZUNvbnN0VHJlZShhZ2dyTm9kZS0+Z2V0TGluZSgpLCBhZ2dyTm9kZSwgdW5pb25BcnJheSwg
YWdnck5vZGUtPmdldE9wKCksIHN5bWJvbFRhYmxlLCAgdHlwZSwgdHJ1ZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm5WYWwgPSBpbnRlcm1lZGlhdGUucGFy
c2VDb25zdFRyZWUoYWdnck5vZGUtPmdldExpbmUoKSwgYWdnck5vZGUsIHVuaW9uQXJyYXksIGFn
Z3JOb2RlLT5nZXRPcCgpLCBzeW1ib2xUYWJsZSwgIHR5cGUpOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChyZXR1cm5WYWwpCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICByZXR1cm4g
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgdHlwZSwgYWdnck5vZGUt
PmdldExpbmUoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8vIEZ1bmN0aW9uIGZv
ciBjb25zdHJ1Y3RvciBpbXBsZW1lbnRhdGlvbi4gQ2FsbHMgYWRkVW5hcnlNYXRoIHdpdGggYXBw
cm9wcmlhdGUgRU9wIHZhbHVlCi0vLyBmb3IgdGhlIHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0
b3IgKHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uKS4gRXNzZW50aWFsbHksIGl0IGNvbnZlcnRzCi0v
LyB0aGUgcGFyYW1ldGVyIHR5cGVzIGNvcnJlY3RseS4gSWYgYSBjb25zdHJ1Y3RvciBleHBlY3Rz
IGFuIGludCAobGlrZSBpdmVjMikgYW5kIGlzIHBhc3NlZCBhIAotLy8gZmxvYXQsIHRoZW4gZmxv
YXQgaXMgY29udmVydGVkIHRvIGludC4KLS8vCi0vLyBSZXR1cm5zIDAgZm9yIGFuIGVycm9yIG9y
IHRoZSBjb25zdHJ1Y3RlZCBub2RlLgotLy8KLVRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6
Y29uc3RydWN0QnVpbHRJbihjb25zdCBUVHlwZSogdHlwZSwgVE9wZXJhdG9yIG9wLCBUSW50ZXJt
Tm9kZSogbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgYm9vbCBzdWJzZXQpCi17Ci0gICAg
VEludGVybVR5cGVkKiBuZXdOb2RlOwotICAgIFRPcGVyYXRvciBiYXNpY09wOwotCi0gICAgLy8K
LSAgICAvLyBGaXJzdCwgY29udmVydCB0eXBlcyBhcyBuZWVkZWQuCi0gICAgLy8KLSAgICBzd2l0
Y2ggKG9wKSB7Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMyOgotICAgIGNhc2UgRU9wQ29uc3Ry
dWN0VmVjMzoKLSAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzQ6Ci0gICAgY2FzZSBFT3BDb25zdHJ1
Y3RNYXQyOgotICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MzoKLSAgICBjYXNlIEVPcENvbnN0cnVj
dE1hdDQ6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RGbG9hdDoKLSAgICAgICAgYmFzaWNPcCA9IEVP
cENvbnN0cnVjdEZsb2F0OwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgRU9wQ29uc3RydWN0
SVZlYzI6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMzoKLSAgICBjYXNlIEVPcENvbnN0cnVj
dElWZWM0OgotICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OgotICAgICAgICBiYXNpY09wID0gRU9w
Q29uc3RydWN0SW50OwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgRU9wQ29uc3RydWN0QlZl
YzI6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMzoKLSAgICBjYXNlIEVPcENvbnN0cnVjdEJW
ZWM0OgotICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDoKLSAgICAgICAgYmFzaWNPcCA9IEVPcENv
bnN0cnVjdEJvb2w7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZXJy
b3IobGluZSwgInVuc3VwcG9ydGVkIGNvbnN0cnVjdGlvbiIsICIiKTsKLSAgICAgICAgcmVjb3Zl
cigpOwotCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBuZXdOb2RlID0gaW50ZXJtZWRp
YXRlLmFkZFVuYXJ5TWF0aChiYXNpY09wLCBub2RlLCBub2RlLT5nZXRMaW5lKCksIHN5bWJvbFRh
YmxlKTsKLSAgICBpZiAobmV3Tm9kZSA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjYW4n
dCBjb252ZXJ0IiwgImNvbnN0cnVjdG9yIik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQot
ICAgIC8vCi0gICAgLy8gTm93LCBpZiB0aGVyZSBzdGlsbCBpc24ndCBhbiBvcGVyYXRpb24gdG8g
ZG8gdGhlIGNvbnN0cnVjdGlvbiwgYW5kIHdlIG5lZWQgb25lLCBhZGQgb25lLgotICAgIC8vCi0g
ICAgCi0gICAgLy8gT3RoZXJ3aXNlLCBza2lwIG91dCBlYXJseS4KLSAgICBpZiAoc3Vic2V0IHx8
IChuZXdOb2RlICE9IG5vZGUgJiYgbmV3Tm9kZS0+Z2V0VHlwZSgpID09ICp0eXBlKSkKLSAgICAg
ICAgcmV0dXJuIG5ld05vZGU7Ci0KLSAgICAvLyBzZXRBZ2dyZWdhdGVPcGVyYXRvciB3aWxsIGlu
c2VydCBhIG5ldyBub2RlIGZvciB0aGUgY29uc3RydWN0b3IsIGFzIG5lZWRlZC4KLSAgICByZXR1
cm4gaW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5ld05vZGUsIG9wLCBsaW5lKTsK
LX0KLQotLy8gVGhpcyBmdW5jdGlvbiB0ZXN0cyBmb3IgdGhlIHR5cGUgb2YgdGhlIHBhcmFtZXRl
cnMgdG8gdGhlIHN0cnVjdHVyZXMgY29uc3RydWN0b3JzLiBSYWlzZXMKLS8vIGFuIGVycm9yIG1l
c3NhZ2UgaWYgdGhlIGV4cGVjdGVkIHR5cGUgZG9lcyBub3QgbWF0Y2ggdGhlIHBhcmFtZXRlciBw
YXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLgotLy8KLS8vIFJldHVybnMgMCBmb3IgYW4gZXJyb3Ig
b3IgdGhlIGlucHV0IG5vZGUgaXRzZWxmIGlmIHRoZSBleHBlY3RlZCBhbmQgdGhlIGdpdmVuIHBh
cmFtZXRlciB0eXBlcyBtYXRjaC4KLS8vCi1USW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmNv
bnN0cnVjdFN0cnVjdChUSW50ZXJtTm9kZSogbm9kZSwgVFR5cGUqIHR5cGUsIGludCBwYXJhbUNv
dW50LCBjb25zdCBUU291cmNlTG9jJiBsaW5lLCBib29sIHN1YnNldCkKLXsKLSAgICBpZiAoKnR5
cGUgPT0gbm9kZS0+Z2V0QXNUeXBlZCgpLT5nZXRUeXBlKCkpIHsKLSAgICAgICAgaWYgKHN1YnNl
dCkKLSAgICAgICAgICAgIHJldHVybiBub2RlLT5nZXRBc1R5cGVkKCk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHJldHVybiBpbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3Iobm9k
ZS0+Z2V0QXNUeXBlZCgpLCBFT3BDb25zdHJ1Y3RTdHJ1Y3QsIGxpbmUpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKLSAgICAgICAgZXh0
cmFJbmZvU3RyZWFtIDw8ICJjYW5ub3QgY29udmVydCBwYXJhbWV0ZXIgIiA8PCBwYXJhbUNvdW50
IAotICAgICAgICAgICAgICAgICAgICAgICAgPDwgIiBmcm9tICciIDw8IG5vZGUtPmdldEFzVHlw
ZWQoKS0+Z2V0VHlwZSgpLmdldEJhc2ljU3RyaW5nKCkKLSAgICAgICAgICAgICAgICAgICAgICAg
IDw8ICInIHRvICciIDw8IHR5cGUtPmdldEJhc2ljU3RyaW5nKCkgPDwgIiciOwotICAgICAgICBz
dGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7Ci0gICAgICAgIGVy
cm9yKGxpbmUsICIiLCAiY29uc3RydWN0b3IiLCBleHRyYUluZm8uY19zdHIoKSk7Ci0gICAgICAg
IHJlY292ZXIoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotLy8KLS8vIFRoaXMgZnVu
Y3Rpb24gcmV0dXJucyB0aGUgdHJlZSByZXByZXNlbnRhdGlvbiBmb3IgdGhlIHZlY3RvciBmaWVs
ZChzKSBiZWluZyBhY2Nlc3NlZCBmcm9tIGNvbnRhbnQgdmVjdG9yLgotLy8gSWYgb25seSBvbmUg
Y29tcG9uZW50IG9mIHZlY3RvciBpcyBhY2Nlc3NlZCAodi54IG9yIHZbMF0gd2hlcmUgdiBpcyBh
IGNvbnRhbnQgdmVjdG9yKSwgdGhlbiBhIGNvbnRhbnQgbm9kZSBpcwotLy8gcmV0dXJuZWQsIGVs
c2UgYW4gYWdncmVnYXRlIG5vZGUgaXMgcmV0dXJuZWQgKGZvciB2Lnh5KS4gVGhlIGlucHV0IHRv
IHRoaXMgZnVuY3Rpb24gY291bGQgZWl0aGVyIGJlIHRoZSBzeW1ib2wKLS8vIG5vZGUgb3IgaXQg
Y291bGQgYmUgdGhlIGludGVybWVkaWF0ZSB0cmVlIHJlcHJlc2VudGF0aW9uIG9mIGFjY2Vzc2lu
ZyBmaWVsZHMgaW4gYSBjb25zdGFudCBzdHJ1Y3R1cmUgb3IgY29sdW1uIG9mIAotLy8gYSBjb25z
dGFudCBtYXRyaXguCi0vLwotVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdFZl
Y3Rvck5vZGUoVFZlY3RvckZpZWxkcyYgZmllbGRzLCBUSW50ZXJtVHlwZWQqIG5vZGUsIGNvbnN0
IFRTb3VyY2VMb2MmIGxpbmUpCi17Ci0gICAgVEludGVybVR5cGVkKiB0eXBlZE5vZGU7Ci0gICAg
VEludGVybUNvbnN0YW50VW5pb24qIHRlbXBDb25zdGFudE5vZGUgPSBub2RlLT5nZXRBc0NvbnN0
YW50VW5pb24oKTsKLQotICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXk7Ci0gICAgaWYgKHRl
bXBDb25zdGFudE5vZGUpIHsKLSAgICAgICAgdW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUt
PmdldFVuaW9uQXJyYXlQb2ludGVyKCk7Ci0KLSAgICAgICAgaWYgKCF1bmlvbkFycmF5KSB7Ci0g
ICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7IC8vIFRoZSBu
b2RlIGhhcyB0byBiZSBlaXRoZXIgYSBzeW1ib2wgbm9kZSBvciBhbiBhZ2dyZWdhdGUgbm9kZSBv
ciBhIHRlbXBDb25zdGFudCBub2RlLCBlbHNlLCBpdHMgYW4gZXJyb3IKLSAgICAgICAgZXJyb3Io
bGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgdmVjdG9yIiwgIkVycm9yIik7Ci0gICAgICAg
IHJlY292ZXIoKTsKLQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBDb25zdGFudFVu
aW9uKiBjb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bZmllbGRzLm51bV07Ci0KLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IGZpZWxkcy5udW07IGkrKykgewotICAgICAgICBpZiAoZmllbGRz
Lm9mZnNldHNbaV0gPj0gbm9kZS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpIHsKLSAgICAg
ICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKLSAgICAgICAgICAgIGV4
dHJhSW5mb1N0cmVhbSA8PCAidmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIg
PDwgZmllbGRzLm9mZnNldHNbaV0gPDwgIiciOwotICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0
cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOwotICAgICAgICAgICAgZXJyb3IobGluZSwg
IiIsICJbIiwgZXh0cmFJbmZvLmNfc3RyKCkpOwotICAgICAgICAgICAgcmVjb3ZlcigpOwotICAg
ICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAwOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBjb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtmaWVsZHMub2Zmc2V0c1tpXV07Ci0KLSAg
ICB9IAotICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0
QXJyYXksIG5vZGUtPmdldFR5cGUoKSwgbGluZSk7Ci0gICAgcmV0dXJuIHR5cGVkTm9kZTsKLX0K
LQotLy8KLS8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY29sdW1uIGJlaW5nIGFjY2Vzc2Vk
IGZyb20gYSBjb25zdGFudCBtYXRyaXguIFRoZSB2YWx1ZXMgYXJlIHJldHJpZXZlZCBmcm9tCi0v
LyB0aGUgc3ltYm9sIHRhYmxlIGFuZCBwYXJzZS10cmVlIGlzIGJ1aWx0IGZvciBhIHZlY3RvciAo
ZWFjaCBjb2x1bW4gb2YgYSBtYXRyaXggaXMgYSB2ZWN0b3IpLiBUaGUgaW5wdXQgCi0vLyB0byB0
aGUgZnVuY3Rpb24gY291bGQgZWl0aGVyIGJlIGEgc3ltYm9sIG5vZGUgKG1bMF0gd2hlcmUgbSBp
cyBhIGNvbnN0YW50IG1hdHJpeCl0aGF0IHJlcHJlc2VudHMgYSAKLS8vIGNvbnN0YW50IG1hdHJp
eCBvciBpdCBjb3VsZCBiZSB0aGUgdHJlZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29uc3RhbnQg
bWF0cml4IChzLm0xWzBdIHdoZXJlIHMgaXMgYSBjb25zdGFudCBzdHJ1Y3R1cmUpCi0vLwotVElu
dGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdE1hdHJpeE5vZGUoaW50IGluZGV4LCBU
SW50ZXJtVHlwZWQqIG5vZGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCi17Ci0gICAgVEludGVy
bVR5cGVkKiB0eXBlZE5vZGU7Ci0gICAgVEludGVybUNvbnN0YW50VW5pb24qIHRlbXBDb25zdGFu
dE5vZGUgPSBub2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLQotICAgIGlmIChpbmRleCA+PSBu
b2RlLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkgewotICAgICAgICBzdGQ6OnN0cmluZ3N0
cmVhbSBleHRyYUluZm9TdHJlYW07Ci0gICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAibWF0cml4
IGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIgPDwgaW5kZXggPDwgIiciOwotICAgICAg
ICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7Ci0gICAgICAg
IGVycm9yKGxpbmUsICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsKLSAgICAgICAgcmVjb3Zl
cigpOwotICAgICAgICBpbmRleCA9IDA7Ci0gICAgfQotCi0gICAgaWYgKHRlbXBDb25zdGFudE5v
ZGUpIHsKLSAgICAgICAgIENvbnN0YW50VW5pb24qIHVuaW9uQXJyYXkgPSB0ZW1wQ29uc3RhbnRO
b2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOwotICAgICAgICAgaW50IHNpemUgPSB0ZW1wQ29u
c3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKTsKLSAgICAgICAgIHR5cGVkTm9k
ZSA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKCZ1bmlvbkFycmF5W3NpemUqaW5kZXhd
LCB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIG1hdHJpeCIsICJFcnJvciIp
OwotICAgICAgICByZWNvdmVyKCk7Ci0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHR5cGVkTm9kZTsKLX0KLQotCi0vLwotLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFu
IGVsZW1lbnQgb2YgYW4gYXJyYXkgYWNjZXNzZWQgZnJvbSBhIGNvbnN0YW50IGFycmF5LiBUaGUg
dmFsdWVzIGFyZSByZXRyaWV2ZWQgZnJvbQotLy8gdGhlIHN5bWJvbCB0YWJsZSBhbmQgcGFyc2Ut
dHJlZSBpcyBidWlsdCBmb3IgdGhlIHR5cGUgb2YgdGhlIGVsZW1lbnQuIFRoZSBpbnB1dCAKLS8v
IHRvIHRoZSBmdW5jdGlvbiBjb3VsZCBlaXRoZXIgYmUgYSBzeW1ib2wgbm9kZSAoYVswXSB3aGVy
ZSBhIGlzIGEgY29uc3RhbnQgYXJyYXkpdGhhdCByZXByZXNlbnRzIGEgCi0vLyBjb25zdGFudCBh
cnJheSBvciBpdCBjb3VsZCBiZSB0aGUgdHJlZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29uc3Rh
bnQgYXJyYXkgKHMuYTFbMF0gd2hlcmUgcyBpcyBhIGNvbnN0YW50IHN0cnVjdHVyZSkKLS8vCi1U
SW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0QXJyYXlOb2RlKGludCBpbmRleCwg
VEludGVybVR5cGVkKiBub2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQotewotICAgIFRJbnRl
cm1UeXBlZCogdHlwZWROb2RlOwotICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiB0ZW1wQ29uc3Rh
bnROb2RlID0gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0gICAgVFR5cGUgYXJyYXlFbGVt
ZW50VHlwZSA9IG5vZGUtPmdldFR5cGUoKTsKLSAgICBhcnJheUVsZW1lbnRUeXBlLmNsZWFyQXJy
YXluZXNzKCk7Ci0KLSAgICBpZiAoaW5kZXggPj0gbm9kZS0+Z2V0VHlwZSgpLmdldEFycmF5U2l6
ZSgpKSB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKLSAgICAg
ICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJhcnJheSBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdl
ICciIDw8IGluZGV4IDw8ICInIjsKLSAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0
cmFJbmZvU3RyZWFtLnN0cigpOwotICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCBleHRyYUlu
Zm8uY19zdHIoKSk7Ci0gICAgICAgIHJlY292ZXIoKTsKLSAgICAgICAgaW5kZXggPSAwOwotICAg
IH0KLQotICAgIGlmICh0ZW1wQ29uc3RhbnROb2RlKSB7Ci0gICAgICAgICBzaXplX3QgYXJyYXlF
bGVtZW50U2l6ZSA9IGFycmF5RWxlbWVudFR5cGUuZ2V0T2JqZWN0U2l6ZSgpOwotICAgICAgICAg
Q29uc3RhbnRVbmlvbiogdW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJy
YXlQb2ludGVyKCk7Ci0gICAgICAgICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3Rh
bnRVbmlvbigmdW5pb25BcnJheVthcnJheUVsZW1lbnRTaXplICogaW5kZXhdLCB0ZW1wQ29uc3Rh
bnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGVycm9yKGxp
bmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIGFycmF5IiwgIkVycm9yIik7Ci0gICAgICAgIHJl
Y292ZXIoKTsKLQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHlwZWRO
b2RlOwotfQotCi0KLS8vCi0vLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlIG9mIGEg
cGFydGljdWxhciBmaWVsZCBpbnNpZGUgYSBjb25zdGFudCBzdHJ1Y3R1cmUgZnJvbSB0aGUgc3lt
Ym9sIHRhYmxlLiAKLS8vIElmIHRoZXJlIGlzIGFuIGVtYmVkZGVkL25lc3RlZCBzdHJ1Y3QsIGl0
IGFwcHJvcHJpYXRlbHkgY2FsbHMgYWRkQ29uc3RTdHJ1Y3ROZXN0ZWQgb3IgYWRkQ29uc3RTdHJ1
Y3RGcm9tQWdncgotLy8gZnVuY3Rpb24gYW5kIHJldHVybnMgdGhlIHBhcnNlLXRyZWUgd2l0aCB0
aGUgdmFsdWVzIG9mIHRoZSBlbWJlZGRlZC9uZXN0ZWQgc3RydWN0LgotLy8KLVRJbnRlcm1UeXBl
ZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RTdHJ1Y3QoVFN0cmluZyYgaWRlbnRpZmllciwgVElu
dGVybVR5cGVkKiBub2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQotewotICAgIGNvbnN0IFRG
aWVsZExpc3QmIGZpZWxkcyA9IG5vZGUtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7
Ci0KLSAgICBzaXplX3QgaW5zdGFuY2VTaXplID0gMDsKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9
IDA7IGluZGV4IDwgZmllbGRzLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBpZiAoZmllbGRz
W2luZGV4XS0+bmFtZSgpID09IGlkZW50aWZpZXIpIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgaW5zdGFuY2VTaXplICs9IGZpZWxkc1tpbmRleF0t
PnR5cGUoKS0+Z2V0T2JqZWN0U2l6ZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgVEludGVy
bVR5cGVkKiB0eXBlZE5vZGUgPSAwOwotICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiB0ZW1wQ29u
c3RhbnROb2RlID0gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0gICAgaWYgKHRlbXBDb25z
dGFudE5vZGUpIHsKLSAgICAgICAgIENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSB0ZW1wQ29u
c3RhbnROb2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOwotCi0gICAgICAgICB0eXBlZE5vZGUg
PSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbihjb25zdEFycmF5K2luc3RhbmNlU2l6ZSwg
dGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsgLy8gdHlwZSB3aWxsIGJlIGNoYW5n
ZWQgaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb24KLSAgICB9IGVsc2UgewotICAgICAgICBlcnJvcihs
aW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSBzdHJ1Y3R1cmUiLCAiRXJyb3IiKTsKLSAgICAg
ICAgcmVjb3ZlcigpOwotCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiB0
eXBlZE5vZGU7Ci19Ci0KLWJvb2wgVFBhcnNlQ29udGV4dDo6ZW50ZXJTdHJ1Y3REZWNsYXJhdGlv
bihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyKQotewot
ICAgICsrc3RydWN0TmVzdGluZ0xldmVsOwotCi0gICAgLy8gRW1iZWRkZWQgc3RydWN0dXJlIGRl
ZmluaXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIHBlciBHTFNMIEVTIHNwZWMuCi0gICAgLy8gVGhl
eSBhcmVuJ3QgYWxsb3dlZCBpbiBHTFNMIGVpdGhlciwgYnV0IHdlIG5lZWQgdG8gZGV0ZWN0IHRo
aXMgaGVyZQotICAgIC8vIHNvIHdlIGRvbid0IHJlbHkgb24gdGhlIEdMU0wgY29tcGlsZXIgdG8g
Y2F0Y2ggaXQuCi0gICAgaWYgKHN0cnVjdE5lc3RpbmdMZXZlbCA+IDEpIHsKLSAgICAgICAgZXJy
b3IobGluZSwgIiIsICJFbWJlZGRlZCBzdHJ1Y3QgZGVmaW5pdGlvbnMgYXJlIG5vdCBhbGxvd2Vk
Iik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotdm9pZCBUUGFyc2VDb250ZXh0OjpleGl0U3RydWN0RGVjbGFyYXRpb24oKQotewotICAgIC0t
c3RydWN0TmVzdGluZ0xldmVsOwotfQotCi1uYW1lc3BhY2UgewotCi1jb25zdCBpbnQga1dlYkdM
TWF4U3RydWN0TmVzdGluZyA9IDQ7Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi1ib29sIFRQYXJzZUNv
bnRleHQ6OnN0cnVjdE5lc3RpbmdFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNv
bnN0IFRGaWVsZCYgZmllbGQpCi17Ci0gICAgaWYgKCFpc1dlYkdMQmFzZWRTcGVjKHNoYWRlclNw
ZWMpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoZmllbGQudHlw
ZSgpLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIC8vIFdlJ3JlIGFscmVhZHkgaW5zaWRlIGEgc3RydWN0dXJlIGRlZmlu
aXRpb24gYXQgdGhpcyBwb2ludCwgc28gYWRkCi0gICAgLy8gb25lIHRvIHRoZSBmaWVsZCdzIHN0
cnVjdCBuZXN0aW5nLgotICAgIGlmICgxICsgZmllbGQudHlwZSgpLT5nZXREZWVwZXN0U3RydWN0
TmVzdGluZygpID4ga1dlYkdMTWF4U3RydWN0TmVzdGluZykgewotICAgICAgICBzdGQ6OnN0cmlu
Z3N0cmVhbSByZWFzb25TdHJlYW07Ci0gICAgICAgIHJlYXNvblN0cmVhbSA8PCAiUmVmZXJlbmNl
IG9mIHN0cnVjdCB0eXBlICIKLSAgICAgICAgICAgICAgICAgICAgIDw8IGZpZWxkLnR5cGUoKS0+
Z2V0U3RydWN0KCktPm5hbWUoKS5jX3N0cigpCi0gICAgICAgICAgICAgICAgICAgICA8PCAiIGV4
Y2VlZHMgbWF4aW11bSBhbGxvd2VkIG5lc3RpbmcgbGV2ZWwgb2YgIgotICAgICAgICAgICAgICAg
ICAgICAgPDwga1dlYkdMTWF4U3RydWN0TmVzdGluZzsKLSAgICAgICAgc3RkOjpzdHJpbmcgcmVh
c29uID0gcmVhc29uU3RyZWFtLnN0cigpOwotICAgICAgICBlcnJvcihsaW5lLCByZWFzb24uY19z
dHIoKSwgZmllbGQubmFtZSgpLmNfc3RyKCksICIiKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLwotLy8gUGFyc2UgYW4gYXJyYXkgaW5k
ZXggZXhwcmVzc2lvbgotLy8KLVRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkSW5kZXhF
eHByZXNzaW9uKFRJbnRlcm1UeXBlZCAqYmFzZUV4cHJlc3Npb24sIGNvbnN0IFRTb3VyY2VMb2Mm
IGxvY2F0aW9uLCBUSW50ZXJtVHlwZWQgKmluZGV4RXhwcmVzc2lvbikKLXsKLSAgICBUSW50ZXJt
VHlwZWQgKmluZGV4ZWRFeHByZXNzaW9uID0gTlVMTDsKLQotICAgIGlmICghYmFzZUV4cHJlc3Np
b24tPmlzQXJyYXkoKSAmJiAhYmFzZUV4cHJlc3Npb24tPmlzTWF0cml4KCkgJiYgIWJhc2VFeHBy
ZXNzaW9uLT5pc1ZlY3RvcigpKQotICAgIHsKLSAgICAgICAgaWYgKGJhc2VFeHByZXNzaW9uLT5n
ZXRBc1N5bWJvbE5vZGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgZXJyb3IobG9jYXRpb24s
ICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIs
IGJhc2VFeHByZXNzaW9uLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBlcnJvcihs
b2NhdGlvbiwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBvciB2
ZWN0b3IgIiwgImV4cHJlc3Npb24iKTsKLSAgICAgICAgfQotICAgICAgICByZWNvdmVyKCk7Ci0g
ICAgfQotCi0gICAgaWYgKGluZGV4RXhwcmVzc2lvbi0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29u
c3QpCi0gICAgewotICAgICAgICBpbnQgaW5kZXggPSBpbmRleEV4cHJlc3Npb24tPmdldEFzQ29u
c3RhbnRVbmlvbigpLT5nZXRJQ29uc3QoMCk7Ci0gICAgICAgIGlmIChpbmRleCA8IDApCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGluZm9TdHJlYW07Ci0gICAgICAg
ICAgICBpbmZvU3RyZWFtIDw8IGluZGV4OwotICAgICAgICAgICAgc3RkOjpzdHJpbmcgaW5mbyA9
IGluZm9TdHJlYW0uc3RyKCk7Ci0gICAgICAgICAgICBlcnJvcihsb2NhdGlvbiwgIm5lZ2F0aXZl
IGluZGV4IiwgaW5mby5jX3N0cigpKTsKLSAgICAgICAgICAgIHJlY292ZXIoKTsKLSAgICAgICAg
ICAgIGluZGV4ID0gMDsKLSAgICAgICAgfQotICAgICAgICBpZiAoYmFzZUV4cHJlc3Npb24tPmdl
dFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKGJhc2VFeHByZXNzaW9uLT5pc0FycmF5KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgLy8gY29uc3RhbnQgZm9sZGluZyBmb3IgYXJyYXlzCi0gICAgICAgICAgICAgICAg
aW5kZXhlZEV4cHJlc3Npb24gPSBhZGRDb25zdEFycmF5Tm9kZShpbmRleCwgYmFzZUV4cHJlc3Np
b24sIGxvY2F0aW9uKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGJhc2VF
eHByZXNzaW9uLT5pc1ZlY3RvcigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8v
IGNvbnN0YW50IGZvbGRpbmcgZm9yIHZlY3RvcnMKLSAgICAgICAgICAgICAgICBUVmVjdG9yRmll
bGRzIGZpZWxkczsKLSAgICAgICAgICAgICAgICBmaWVsZHMubnVtID0gMTsKLSAgICAgICAgICAg
ICAgICBmaWVsZHMub2Zmc2V0c1swXSA9IGluZGV4OyAvLyBuZWVkIHRvIGRvIGl0IHRoaXMgd2F5
IGJlY2F1c2Ugdi54eSBzZW5kcyBmaWVsZHMgaW50ZWdlciBhcnJheQotICAgICAgICAgICAgICAg
IGluZGV4ZWRFeHByZXNzaW9uID0gYWRkQ29uc3RWZWN0b3JOb2RlKGZpZWxkcywgYmFzZUV4cHJl
c3Npb24sIGxvY2F0aW9uKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGJh
c2VFeHByZXNzaW9uLT5pc01hdHJpeCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IC8vIGNvbnN0YW50IGZvbGRpbmcgZm9yIG1hdHJpY2VzCi0gICAgICAgICAgICAgICAgaW5kZXhl
ZEV4cHJlc3Npb24gPSBhZGRDb25zdE1hdHJpeE5vZGUoaW5kZXgsIGJhc2VFeHByZXNzaW9uLCBs
b2NhdGlvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAoYmFzZUV4cHJlc3Npb24tPmlzQXJyYXkoKSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gYmFzZUV4cHJlc3Npb24tPmdldFR5
cGUoKS5nZXRBcnJheVNpemUoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKLSAgICAgICAgICAgICAgICAg
ICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJhcnJheSBpbmRleCBvdXQgb2YgcmFuZ2UgJyIgPDwgaW5k
ZXggPDwgIiciOwotICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBl
eHRyYUluZm9TdHJlYW0uc3RyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGVycm9yKGxvY2F0aW9u
LCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlY292
ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBiYXNlRXhwcmVzc2lvbi0+Z2V0VHlw
ZSgpLmdldEFycmF5U2l6ZSgpIC0gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgZWxzZSBpZiAoYmFzZUV4cHJlc3Npb24tPmdldFF1YWxpZmllcigpID09IEV2cUZyYWdEYXRh
ICYmIGluZGV4ID4gMCAmJiAhaXNFeHRlbnNpb25FbmFibGVkKCJHTF9FWFRfZHJhd19idWZmZXJz
IikpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBlcnJvcihsb2NhdGlv
biwgIiIsICJbIiwgImFycmF5IGluZGV4ZXMgZm9yIGdsX0ZyYWdEYXRhIG11c3QgYmUgemVybyB3
aGVuIEdMX0VYVF9kcmF3X2J1ZmZlcnMgaXMgZGlzYWJsZWQiKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICAgICBpbmRleCA9IDA7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoKGJhc2VFeHByZXNz
aW9uLT5pc1ZlY3RvcigpIHx8IGJhc2VFeHByZXNzaW9uLT5pc01hdHJpeCgpKSAmJiBiYXNlRXhw
cmVzc2lvbi0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkgPD0gaW5kZXgpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOwot
ICAgICAgICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiZmllbGQgc2VsZWN0aW9uIG91dCBv
ZiByYW5nZSAnIiA8PCBpbmRleCA8PCAiJyI7Ci0gICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcg
ZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOwotICAgICAgICAgICAgICAgIGVycm9y
KGxvY2F0aW9uLCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7Ci0gICAgICAgICAgICAgICAg
cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgIGluZGV4ID0gYmFzZUV4cHJlc3Npb24tPmdldFR5
cGUoKS5nZXROb21pbmFsU2l6ZSgpIC0gMTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aW5kZXhFeHByZXNzaW9uLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50
ZXIoKS0+c2V0SUNvbnN0KGluZGV4KTsKLSAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uID0g
aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCBiYXNlRXhwcmVzc2lvbiwgaW5k
ZXhFeHByZXNzaW9uLCBsb2NhdGlvbik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAg
IHsKLSAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBpbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9w
SW5kZXhJbmRpcmVjdCwgYmFzZUV4cHJlc3Npb24sIGluZGV4RXhwcmVzc2lvbiwgbG9jYXRpb24p
OwotICAgIH0KLQotICAgIGlmIChpbmRleGVkRXhwcmVzc2lvbiA9PSAwKQotICAgIHsKLSAgICAg
ICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAg
ICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3QoMC4wZik7Ci0gICAgICAgIGluZGV4ZWRFeHByZXNz
aW9uID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0
RmxvYXQsIEVicEhpZ2gsIEV2cUNvbnN0KSwgbG9jYXRpb24pOwotICAgIH0KLSAgICBlbHNlIGlm
IChiYXNlRXhwcmVzc2lvbi0+aXNBcnJheSgpKQotICAgIHsKLSAgICAgICAgY29uc3QgVFR5cGUg
JmJhc2VUeXBlID0gYmFzZUV4cHJlc3Npb24tPmdldFR5cGUoKTsKLSAgICAgICAgaWYgKGJhc2VU
eXBlLmdldFN0cnVjdCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBUVHlwZSBjb3B5T2ZUeXBl
KGJhc2VUeXBlLmdldFN0cnVjdCgpKTsKLSAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uLT5z
ZXRUeXBlKGNvcHlPZlR5cGUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewot
ICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoVFR5cGUoYmFzZUV4cHJlc3Np
b24tPmdldEJhc2ljVHlwZSgpLCBiYXNlRXhwcmVzc2lvbi0+Z2V0UHJlY2lzaW9uKCksIEV2cVRl
bXBvcmFyeSwgYmFzZUV4cHJlc3Npb24tPmdldE5vbWluYWxTaXplKCksIGJhc2VFeHByZXNzaW9u
LT5pc01hdHJpeCgpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYmFzZUV4cHJlc3Npb24t
PmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkKLSAgICAgICAgewotICAgICAg
ICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPmdldFR5cGVQb2ludGVyKCktPnNldFF1YWxpZmllcihF
dnFDb25zdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoYmFzZUV4cHJlc3Npb24t
PmlzTWF0cml4KCkpCi0gICAgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IGJhc2VF
eHByZXNzaW9uLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QgPyBFdnFDb25z
dCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoVFR5
cGUoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgpLCBiYXNlRXhwcmVzc2lvbi0+Z2V0UHJl
Y2lzaW9uKCksIHF1YWxpZmllciwgYmFzZUV4cHJlc3Npb24tPmdldE5vbWluYWxTaXplKCkpKTsK
LSAgICB9Ci0gICAgZWxzZSBpZiAoYmFzZUV4cHJlc3Npb24tPmlzVmVjdG9yKCkpCi0gICAgewot
ICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IGJhc2VFeHByZXNzaW9uLT5nZXRUeXBlKCku
Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QgPyBFdnFDb25zdCA6IEV2cVRlbXBvcmFyeTsKLSAg
ICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoVFR5cGUoYmFzZUV4cHJlc3Npb24tPmdl
dEJhc2ljVHlwZSgpLCBiYXNlRXhwcmVzc2lvbi0+Z2V0UHJlY2lzaW9uKCksIHF1YWxpZmllcikp
OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0
VHlwZShiYXNlRXhwcmVzc2lvbi0+Z2V0VHlwZSgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gaW5k
ZXhlZEV4cHJlc3Npb247Ci19Ci0KLS8vCi0vLyBQYXJzZSBhbiBhcnJheSBvZiBzdHJpbmdzIHVz
aW5nIHl5cGFyc2UuCi0vLwotLy8gUmV0dXJucyAwIGZvciBzdWNjZXNzLgotLy8KLWludCBQYVBh
cnNlU3RyaW5ncyhzaXplX3QgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25z
dCBpbnQgbGVuZ3RoW10sCi0gICAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4dCogY29udGV4
dCkgewotICAgIGlmICgoY291bnQgPT0gMCkgfHwgKHN0cmluZyA9PSBOVUxMKSkKLSAgICAgICAg
cmV0dXJuIDE7Ci0KLSAgICBpZiAoZ2xzbGFuZ19pbml0aWFsaXplKGNvbnRleHQpKQotICAgICAg
ICByZXR1cm4gMTsKLQotICAgIGludCBlcnJvciA9IGdsc2xhbmdfc2Nhbihjb3VudCwgc3RyaW5n
LCBsZW5ndGgsIGNvbnRleHQpOwotICAgIGlmICghZXJyb3IpCi0gICAgICAgIGVycm9yID0gZ2xz
bGFuZ19wYXJzZShjb250ZXh0KTsKLQotICAgIGdsc2xhbmdfZmluYWxpemUoY29udGV4dCk7Ci0K
LSAgICByZXR1cm4gKGVycm9yID09IDApICYmIChjb250ZXh0LT5udW1FcnJvcnMoKSA9PSAwKSA/
IDAgOiAxOwotfQotCi0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1BhcnNlQ29udGV4dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1BhcnNlQ29udGV4dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmIz
YzNmN2VjODliMGRmYzdmYTExNGNhZTM1N2IxNmRmZjU5M2JlLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9QYXJzZUNvbnRleHQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0vLwotI2lmbmRlZiBfUEFSU0VSX0hFTFBFUl9JTkNMVURFRF8KLSNkZWZp
bmUgX1BBUlNFUl9IRUxQRVJfSU5DTFVERURfCi0KLSNpbmNsdWRlICJjb21waWxlci9EaWFnbm9z
dGljcy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuaCIKLSNpbmNsdWRl
ICJjb21waWxlci9sb2NhbGludGVybWVkaWF0ZS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9QcmVwcm9jZXNzb3IuaCIKLSNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgot
I2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCi0KLXN0cnVjdCBUTWF0cml4RmllbGRz
IHsKLSAgICBib29sIHdob2xlUm93OwotICAgIGJvb2wgd2hvbGVDb2w7Ci0gICAgaW50IHJvdzsK
LSAgICBpbnQgY29sOwotfTsKLQotLy8KLS8vIFRoZSBmb2xsb3dpbmcgYXJlIGV4dHJhIHZhcmlh
YmxlcyBuZWVkZWQgZHVyaW5nIHBhcnNpbmcsIGdyb3VwZWQgdG9nZXRoZXIgc28KLS8vIHRoZXkg
Y2FuIGJlIHBhc3NlZCB0byB0aGUgcGFyc2VyIHdpdGhvdXQgbmVlZGluZyBhIGdsb2JhbC4KLS8v
Ci1zdHJ1Y3QgVFBhcnNlQ29udGV4dCB7Ci0gICAgVFBhcnNlQ29udGV4dChUU3ltYm9sVGFibGUm
IHN5bXQsIFRFeHRlbnNpb25CZWhhdmlvciYgZXh0LCBUSW50ZXJtZWRpYXRlJiBpbnRlcm0sIFNo
U2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywgaW50IG9wdGlvbnMsIGJvb2wgY2hl
Y2tzUHJlY0Vycm9ycywgY29uc3QgY2hhciogc291cmNlUGF0aCwgVEluZm9TaW5rJiBpcykgOgot
ICAgICAgICAgICAgaW50ZXJtZWRpYXRlKGludGVybSksCi0gICAgICAgICAgICBzeW1ib2xUYWJs
ZShzeW10KSwKLSAgICAgICAgICAgIHNoYWRlclR5cGUodHlwZSksCi0gICAgICAgICAgICBzaGFk
ZXJTcGVjKHNwZWMpLAotICAgICAgICAgICAgY29tcGlsZU9wdGlvbnMob3B0aW9ucyksCi0gICAg
ICAgICAgICBzb3VyY2VQYXRoKHNvdXJjZVBhdGgpLAotICAgICAgICAgICAgdHJlZVJvb3QoMCks
Ci0gICAgICAgICAgICBsb29wTmVzdGluZ0xldmVsKDApLAotICAgICAgICAgICAgc3RydWN0TmVz
dGluZ0xldmVsKDApLAotICAgICAgICAgICAgY3VycmVudEZ1bmN0aW9uVHlwZShOVUxMKSwKLSAg
ICAgICAgICAgIGZ1bmN0aW9uUmV0dXJuc1ZhbHVlKGZhbHNlKSwKLSAgICAgICAgICAgIGNoZWNr
c1ByZWNpc2lvbkVycm9ycyhjaGVja3NQcmVjRXJyb3JzKSwKLSAgICAgICAgICAgIGRpYWdub3N0
aWNzKGlzKSwKLSAgICAgICAgICAgIGRpcmVjdGl2ZUhhbmRsZXIoZXh0LCBkaWFnbm9zdGljcyks
Ci0gICAgICAgICAgICBwcmVwcm9jZXNzb3IoJmRpYWdub3N0aWNzLCAmZGlyZWN0aXZlSGFuZGxl
ciksCi0gICAgICAgICAgICBzY2FubmVyKE5VTEwpIHsgIH0KLSAgICBUSW50ZXJtZWRpYXRlJiBp
bnRlcm1lZGlhdGU7IC8vIHRvIGhvbGQgYW5kIGJ1aWxkIGEgcGFyc2UgdHJlZQotICAgIFRTeW1i
b2xUYWJsZSYgc3ltYm9sVGFibGU7ICAgLy8gc3ltYm9sIHRhYmxlIHRoYXQgZ29lcyB3aXRoIHRo
ZSBsYW5ndWFnZSBjdXJyZW50bHkgYmVpbmcgcGFyc2VkCi0gICAgU2hTaGFkZXJUeXBlIHNoYWRl
clR5cGU7ICAgICAgICAgICAgICAvLyB2ZXJ0ZXggb3IgZnJhZ21lbnQgbGFuZ3VhZ2UgKGZ1dHVy
ZTogcGFjayBvciB1bnBhY2spCi0gICAgU2hTaGFkZXJTcGVjIHNoYWRlclNwZWM7ICAgICAgICAg
ICAgICAvLyBUaGUgbGFuZ3VhZ2Ugc3BlY2lmaWNhdGlvbiBjb21waWxlciBjb25mb3JtcyB0byAt
IEdMRVMyIG9yIFdlYkdMLgotICAgIGludCBjb21waWxlT3B0aW9uczsKLSAgICBjb25zdCBjaGFy
KiBzb3VyY2VQYXRoOyAgICAgIC8vIFBhdGggb2Ygc291cmNlIGZpbGUgb3IgTlVMTC4KLSAgICBU
SW50ZXJtTm9kZSogdHJlZVJvb3Q7ICAgICAgIC8vIHJvb3Qgb2YgcGFyc2UgdHJlZSBiZWluZyBj
cmVhdGVkCi0gICAgaW50IGxvb3BOZXN0aW5nTGV2ZWw7ICAgICAgICAvLyAwIGlmIG91dHNpZGUg
YWxsIGxvb3BzCi0gICAgaW50IHN0cnVjdE5lc3RpbmdMZXZlbDsgICAgICAvLyBpbmNyZW1lbnRl
ZCB3aGlsZSBwYXJzaW5nIGEgc3RydWN0IGRlY2xhcmF0aW9uCi0gICAgY29uc3QgVFR5cGUqIGN1
cnJlbnRGdW5jdGlvblR5cGU7ICAvLyB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIHRo
YXQncyBjdXJyZW50bHkgYmVpbmcgcGFyc2VkCi0gICAgYm9vbCBmdW5jdGlvblJldHVybnNWYWx1
ZTsgICAvLyB0cnVlIGlmIGEgbm9uLXZvaWQgZnVuY3Rpb24gaGFzIGEgcmV0dXJuCi0gICAgYm9v
bCBjaGVja3NQcmVjaXNpb25FcnJvcnM7ICAvLyB0cnVlIGlmIGFuIGVycm9yIHdpbGwgYmUgZ2Vu
ZXJhdGVkIHdoZW4gYSB2YXJpYWJsZSBpcyBkZWNsYXJlZCB3aXRob3V0IHByZWNpc2lvbiwgZXhw
bGljaXQgb3IgaW1wbGljaXQuCi0gICAgYm9vbCBmcmFnbWVudFByZWNpc2lvbkhpZ2g7ICAvLyB0
cnVlIGlmIGhpZ2hwIHByZWNpc2lvbiBpcyBzdXBwb3J0ZWQgaW4gdGhlIGZyYWdtZW50IGxhbmd1
YWdlLgotICAgIFRTdHJpbmcgSGFzaEVyck1zZzsKLSAgICBURGlhZ25vc3RpY3MgZGlhZ25vc3Rp
Y3M7Ci0gICAgVERpcmVjdGl2ZUhhbmRsZXIgZGlyZWN0aXZlSGFuZGxlcjsKLSAgICBwcDo6UHJl
cHJvY2Vzc29yIHByZXByb2Nlc3NvcjsKLSAgICB2b2lkKiBzY2FubmVyOwotCi0gICAgaW50IG51
bUVycm9ycygpIGNvbnN0IHsgcmV0dXJuIGRpYWdub3N0aWNzLm51bUVycm9ycygpOyB9Ci0gICAg
VEluZm9TaW5rJiBpbmZvU2luaygpIHsgcmV0dXJuIGRpYWdub3N0aWNzLmluZm9TaW5rKCk7IH0K
LSAgICB2b2lkIGVycm9yKGNvbnN0IFRTb3VyY2VMb2MmIGxvYywgY29uc3QgY2hhciAqcmVhc29u
LCBjb25zdCBjaGFyKiB0b2tlbiwKLSAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5m
bz0iIik7Ci0gICAgdm9pZCB3YXJuaW5nKGNvbnN0IFRTb3VyY2VMb2MmIGxvYywgY29uc3QgY2hh
ciogcmVhc29uLCBjb25zdCBjaGFyKiB0b2tlbiwKLSAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciogZXh0cmFJbmZvPSIiKTsKLSAgICB2b2lkIHRyYWNlKGNvbnN0IGNoYXIqIHN0cik7Ci0gICAg
dm9pZCByZWNvdmVyKCk7Ci0KLSAgICBib29sIHBhcnNlVmVjdG9yRmllbGRzKGNvbnN0IFRTdHJp
bmcmLCBpbnQgdmVjU2l6ZSwgVFZlY3RvckZpZWxkcyYsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUp
OwotICAgIGJvb2wgcGFyc2VNYXRyaXhGaWVsZHMoY29uc3QgVFN0cmluZyYsIGludCBtYXRTaXpl
LCBUTWF0cml4RmllbGRzJiwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSk7Ci0KLSAgICBib29sIHJl
c2VydmVkRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBp
ZGVudGlmaWVyKTsKLSAgICB2b2lkIGFzc2lnbkVycm9yKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUs
IGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5nIGxlZnQsIFRTdHJpbmcgcmlnaHQpOwotICAgIHZvaWQg
dW5hcnlPcEVycm9yKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUU3Ry
aW5nIG9wZXJhbmQpOwotICAgIHZvaWQgYmluYXJ5T3BFcnJvcihjb25zdCBUU291cmNlTG9jJiBs
aW5lLCBjb25zdCBjaGFyKiBvcCwgVFN0cmluZyBsZWZ0LCBUU3RyaW5nIHJpZ2h0KTsKLSAgICBi
b29sIHByZWNpc2lvbkVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFByZWNpc2lv
biBwcmVjaXNpb24sIFRCYXNpY1R5cGUgdHlwZSk7Ci0gICAgYm9vbCBsVmFsdWVFcnJvckNoZWNr
KGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUSW50ZXJtVHlwZWQqKTsK
LSAgICBib29sIGNvbnN0RXJyb3JDaGVjayhUSW50ZXJtVHlwZWQqIG5vZGUpOwotICAgIGJvb2wg
aW50ZWdlckVycm9yQ2hlY2soVEludGVybVR5cGVkKiBub2RlLCBjb25zdCBjaGFyKiB0b2tlbik7
Ci0gICAgYm9vbCBnbG9iYWxFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGJvb2wg
Z2xvYmFsLCBjb25zdCBjaGFyKiB0b2tlbik7Ci0gICAgYm9vbCBjb25zdHJ1Y3RvckVycm9yQ2hl
Y2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVEludGVybU5vZGUqLCBURnVuY3Rpb24mLCBUT3Bl
cmF0b3IsIFRUeXBlKik7Ci0gICAgYm9vbCBhcnJheVNpemVFcnJvckNoZWNrKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxpbmUsIFRJbnRlcm1UeXBlZCogZXhwciwgaW50JiBzaXplKTsKLSAgICBib29sIGFy
cmF5UXVhbGlmaWVyRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUHVibGljVHlw
ZSB0eXBlKTsKLSAgICBib29sIGFycmF5VHlwZUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYg
bGluZSwgVFB1YmxpY1R5cGUgdHlwZSk7Ci0gICAgYm9vbCBhcnJheUVycm9yQ2hlY2soY29uc3Qg
VFNvdXJjZUxvYyYgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUgdHlwZSwg
VFZhcmlhYmxlKiYgdmFyaWFibGUpOwotICAgIGJvb2wgdm9pZEVycm9yQ2hlY2soY29uc3QgVFNv
dXJjZUxvYyYsIGNvbnN0IFRTdHJpbmcmLCBjb25zdCBUUHVibGljVHlwZSYpOwotICAgIGJvb2wg
Ym9vbEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYsIGNvbnN0IFRJbnRlcm1UeXBlZCopOwot
ICAgIGJvb2wgYm9vbEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYsIGNvbnN0IFRQdWJsaWNU
eXBlJik7Ci0gICAgYm9vbCBzYW1wbGVyRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5l
LCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUsIGNvbnN0IGNoYXIqIHJlYXNvbik7Ci0gICAgYm9v
bCBzdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0
IFRQdWJsaWNUeXBlJiBwVHlwZSk7Ci0gICAgYm9vbCBwYXJhbWV0ZXJTYW1wbGVyRXJyb3JDaGVj
ayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUXVhbGlmaWVyIHF1YWxpZmllciwgY29uc3QgVFR5
cGUmIHR5cGUpOwotICAgIGJvb2wgbm9uSW5pdENvbnN0RXJyb3JDaGVjayhjb25zdCBUU291cmNl
TG9jJiBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSwgYm9vbCBh
cnJheSk7Ci0gICAgYm9vbCBub25Jbml0RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5l
LCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSwgVFZhcmlhYmxlKiYgdmFy
aWFibGUpOwotICAgIGJvb2wgcGFyYW1FcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUs
IFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVyIHBhcmFtUXVhbGlmaWVyLCBUVHlwZSog
dHlwZSk7Ci0gICAgYm9vbCBleHRlbnNpb25FcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIGNvbnN0IFRTdHJpbmcmKTsKLQotICAgIGNvbnN0IFRQcmFnbWEmIHByYWdtYSgpIGNvbnN0
IHsgcmV0dXJuIGRpcmVjdGl2ZUhhbmRsZXIucHJhZ21hKCk7IH0KLSAgICBjb25zdCBURXh0ZW5z
aW9uQmVoYXZpb3ImIGV4dGVuc2lvbkJlaGF2aW9yKCkgY29uc3QgeyByZXR1cm4gZGlyZWN0aXZl
SGFuZGxlci5leHRlbnNpb25CZWhhdmlvcigpOyB9Ci0gICAgYm9vbCBzdXBwb3J0c0V4dGVuc2lv
bihjb25zdCBjaGFyKiBleHRlbnNpb24pOwotICAgIGJvb2wgaXNFeHRlbnNpb25FbmFibGVkKGNv
bnN0IGNoYXIqIGV4dGVuc2lvbikgY29uc3Q7Ci0KLSAgICBib29sIGNvbnRhaW5zU2FtcGxlcihU
VHlwZSYgdHlwZSk7Ci0gICAgYm9vbCBhcmVBbGxDaGlsZENvbnN0KFRJbnRlcm1BZ2dyZWdhdGUq
IGFnZ3JOb2RlKTsKLSAgICBjb25zdCBURnVuY3Rpb24qIGZpbmRGdW5jdGlvbihjb25zdCBUU291
cmNlTG9jJiBsaW5lLCBURnVuY3Rpb24qIHBmbkNhbGwsIGJvb2wgKmJ1aWx0SW4gPSAwKTsKLSAg
ICBib29sIGV4ZWN1dGVJbml0aWFsaXplcihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5n
JiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgcFR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVEludGVybVR5cGVkKiBpbml0aWFsaXplciwgVEludGVybU5vZGUqJiBpbnRlcm1Ob2Rl
LCBUVmFyaWFibGUqIHZhcmlhYmxlID0gMCk7Ci0KLSAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0
cnVjdG9yKFRJbnRlcm1Ob2RlKiwgY29uc3QgVFR5cGUqLCBUT3BlcmF0b3IsIFRGdW5jdGlvbios
IGNvbnN0IFRTb3VyY2VMb2MmKTsKLSAgICBUSW50ZXJtVHlwZWQqIGZvbGRDb25zdENvbnN0cnVj
dG9yKFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlLCBjb25zdCBUVHlwZSYgdHlwZSk7Ci0gICAg
VEludGVybVR5cGVkKiBjb25zdHJ1Y3RTdHJ1Y3QoVEludGVybU5vZGUqLCBUVHlwZSosIGludCwg
Y29uc3QgVFNvdXJjZUxvYyYsIGJvb2wgc3Vic2V0KTsKLSAgICBUSW50ZXJtVHlwZWQqIGNvbnN0
cnVjdEJ1aWx0SW4oY29uc3QgVFR5cGUqLCBUT3BlcmF0b3IsIFRJbnRlcm1Ob2RlKiwgY29uc3Qg
VFNvdXJjZUxvYyYsIGJvb2wgc3Vic2V0KTsKLSAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0VmVj
dG9yTm9kZShUVmVjdG9yRmllbGRzJiwgVEludGVybVR5cGVkKiwgY29uc3QgVFNvdXJjZUxvYyYp
OwotICAgIFRJbnRlcm1UeXBlZCogYWRkQ29uc3RNYXRyaXhOb2RlKGludCAsIFRJbnRlcm1UeXBl
ZCosIGNvbnN0IFRTb3VyY2VMb2MmKTsKLSAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0QXJyYXlO
b2RlKGludCBpbmRleCwgVEludGVybVR5cGVkKiBub2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5l
KTsKLSAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0U3RydWN0KFRTdHJpbmcmICwgVEludGVybVR5
cGVkKiwgY29uc3QgVFNvdXJjZUxvYyYpOwotICAgIFRJbnRlcm1UeXBlZCogYWRkSW5kZXhFeHBy
ZXNzaW9uKFRJbnRlcm1UeXBlZCAqYmFzZUV4cHJlc3Npb24sIGNvbnN0IFRTb3VyY2VMb2MmIGxv
Y2F0aW9uLCBUSW50ZXJtVHlwZWQgKmluZGV4RXhwcmVzc2lvbik7Ci0KLSAgICAvLyBQZXJmb3Jt
cyBhbiBlcnJvciBjaGVjayBmb3IgZW1iZWRkZWQgc3RydWN0IGRlY2xhcmF0aW9ucy4KLSAgICAv
LyBSZXR1cm5zIHRydWUgaWYgYW4gZXJyb3Igd2FzIHJhaXNlZCBkdWUgdG8gdGhlIGRlY2xhcmF0
aW9uIG9mCi0gICAgLy8gdGhpcyBzdHJ1Y3QuCi0gICAgYm9vbCBlbnRlclN0cnVjdERlY2xhcmF0
aW9uKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIpOwot
ICAgIHZvaWQgZXhpdFN0cnVjdERlY2xhcmF0aW9uKCk7Ci0KLSAgICBib29sIHN0cnVjdE5lc3Rp
bmdFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRGaWVsZCYgZmllbGQp
OwotfTsKLQotaW50IFBhUGFyc2VTdHJpbmdzKHNpemVfdCBjb3VudCwgY29uc3QgY2hhciogY29u
c3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKLSAgICAgICAgICAgICAgICAgICBUUGFy
c2VDb250ZXh0KiBjb250ZXh0KTsKLQotI2VuZGlmIC8vIF9QQVJTRVJfSEVMUEVSX0lOQ0xVREVE
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xB
bGxvYy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9j
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI5OTM1NjdiMzUzNWUxMjEyNDY4
OTVlOThmYThmNGM0MTAwZGZjOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9j
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI5NCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwot
Ci0jaW5jbHVkZSAiY29tcGlsZXIvUG9vbEFsbG9jLmgiCi0KLSNpZm5kZWYgX01TQ19WRVIKLSNp
bmNsdWRlIDxzdGRpbnQuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpbmNsdWRl
ICJjb21tb24vYW5nbGV1dGlscy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVHbG9i
YWxzLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvb3NpbmNsdWRlLmgiCi0KLU9TX1RMU0luZGV4IFBv
b2xJbmRleCA9IE9TX0lOVkFMSURfVExTX0lOREVYOwotCi1ib29sIEluaXRpYWxpemVQb29sSW5k
ZXgoKQotewotICAgIGFzc2VydChQb29sSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpOwot
Ci0gICAgUG9vbEluZGV4ID0gT1NfQWxsb2NUTFNJbmRleCgpOwotICAgIHJldHVybiBQb29sSW5k
ZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7Ci19Ci0KLXZvaWQgRnJlZVBvb2xJbmRleCgpCi17
Ci0gICAgYXNzZXJ0KFBvb2xJbmRleCAhPSBPU19JTlZBTElEX1RMU19JTkRFWCk7Ci0KLSAgICBP
U19GcmVlVExTSW5kZXgoUG9vbEluZGV4KTsKLSAgICBQb29sSW5kZXggPSBPU19JTlZBTElEX1RM
U19JTkRFWDsKLX0KLQotVFBvb2xBbGxvY2F0b3IqIEdldEdsb2JhbFBvb2xBbGxvY2F0b3IoKQot
ewotICAgIGFzc2VydChQb29sSW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpOwotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxUUG9vbEFsbG9jYXRvcio+KE9TX0dldFRMU1ZhbHVlKFBvb2xJbmRl
eCkpOwotfQotCi12b2lkIFNldEdsb2JhbFBvb2xBbGxvY2F0b3IoVFBvb2xBbGxvY2F0b3IqIHBv
b2xBbGxvY2F0b3IpCi17Ci0gICAgYXNzZXJ0KFBvb2xJbmRleCAhPSBPU19JTlZBTElEX1RMU19J
TkRFWCk7Ci0gICAgT1NfU2V0VExTVmFsdWUoUG9vbEluZGV4LCBwb29sQWxsb2NhdG9yKTsKLX0K
LQotLy8KLS8vIEltcGxlbWVudCB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgVFBvb2xBbGxvY2F0
b3IgY2xhc3MsIHdoaWNoCi0vLyBpcyBkb2N1bWVudGVkIGluIFBvb2xBbGxvYy5oLgotLy8KLVRQ
b29sQWxsb2NhdG9yOjpUUG9vbEFsbG9jYXRvcihpbnQgZ3Jvd3RoSW5jcmVtZW50LCBpbnQgYWxs
b2NhdGlvbkFsaWdubWVudCkgOiAKLSAgICBwYWdlU2l6ZShncm93dGhJbmNyZW1lbnQpLAotICAg
IGFsaWdubWVudChhbGxvY2F0aW9uQWxpZ25tZW50KSwKLSAgICBmcmVlTGlzdCgwKSwKLSAgICBp
blVzZUxpc3QoMCksCi0gICAgbnVtQ2FsbHMoMCksCi0gICAgdG90YWxCeXRlcygwKQotewotICAg
IC8vCi0gICAgLy8gRG9uJ3QgYWxsb3cgcGFnZSBzaXplcyB3ZSBrbm93IGFyZSBzbWFsbGVyIHRo
YW4gYWxsIGNvbW1vbgotICAgIC8vIE9TIHBhZ2Ugc2l6ZXMuCi0gICAgLy8KLSAgICBpZiAocGFn
ZVNpemUgPCA0KjEwMjQpCi0gICAgICAgIHBhZ2VTaXplID0gNCoxMDI0OwotCi0gICAgLy8KLSAg
ICAvLyBBIGxhcmdlIGN1cnJlbnRQYWdlT2Zmc2V0IGluZGljYXRlcyBhIG5ldyBwYWdlIG5lZWRz
IHRvCi0gICAgLy8gYmUgb2J0YWluZWQgdG8gYWxsb2NhdGUgbWVtb3J5LgotICAgIC8vCi0gICAg
Y3VycmVudFBhZ2VPZmZzZXQgPSBwYWdlU2l6ZTsKLQotICAgIC8vCi0gICAgLy8gQWRqdXN0IGFs
aWdubWVudCB0byBiZSBhdCBsZWFzdCBwb2ludGVyIGFsaWduZWQgYW5kCi0gICAgLy8gcG93ZXIg
b2YgMi4KLSAgICAvLwotICAgIHNpemVfdCBtaW5BbGlnbiA9IHNpemVvZih2b2lkKik7Ci0gICAg
YWxpZ25tZW50ICY9IH4obWluQWxpZ24gLSAxKTsKLSAgICBpZiAoYWxpZ25tZW50IDwgbWluQWxp
Z24pCi0gICAgICAgIGFsaWdubWVudCA9IG1pbkFsaWduOwotICAgIHNpemVfdCBhID0gMTsKLSAg
ICB3aGlsZSAoYSA8IGFsaWdubWVudCkKLSAgICAgICAgYSA8PD0gMTsKLSAgICBhbGlnbm1lbnQg
PSBhOwotICAgIGFsaWdubWVudE1hc2sgPSBhIC0gMTsKLQotICAgIC8vCi0gICAgLy8gQWxpZ24g
aGVhZGVyIHNraXAKLSAgICAvLwotICAgIGhlYWRlclNraXAgPSBtaW5BbGlnbjsKLSAgICBpZiAo
aGVhZGVyU2tpcCA8IHNpemVvZih0SGVhZGVyKSkgewotICAgICAgICBoZWFkZXJTa2lwID0gKHNp
emVvZih0SGVhZGVyKSArIGFsaWdubWVudE1hc2spICYgfmFsaWdubWVudE1hc2s7Ci0gICAgfQot
fQotCi1UUG9vbEFsbG9jYXRvcjo6flRQb29sQWxsb2NhdG9yKCkKLXsKLSAgICB3aGlsZSAoaW5V
c2VMaXN0KSB7Ci0gICAgICAgIHRIZWFkZXIqIG5leHQgPSBpblVzZUxpc3QtPm5leHRQYWdlOwot
ICAgICAgICBpblVzZUxpc3QtPn50SGVhZGVyKCk7Ci0gICAgICAgIGRlbGV0ZSBbXSByZWludGVy
cHJldF9jYXN0PGNoYXIqPihpblVzZUxpc3QpOwotICAgICAgICBpblVzZUxpc3QgPSBuZXh0Owot
ICAgIH0KLQotICAgIC8vIFdlIHNob3VsZCBub3QgY2hlY2sgdGhlIGd1YXJkIGJsb2NrcwotICAg
IC8vIGhlcmUsIGJlY2F1c2Ugd2UgZGlkIGl0IGFscmVhZHkgd2hlbiB0aGUgYmxvY2sgd2FzCi0g
ICAgLy8gcGxhY2VkIGludG8gdGhlIGZyZWUgbGlzdC4KLSAgICAvLwotICAgIHdoaWxlIChmcmVl
TGlzdCkgewotICAgICAgICB0SGVhZGVyKiBuZXh0ID0gZnJlZUxpc3QtPm5leHRQYWdlOwotICAg
ICAgICBkZWxldGUgW10gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZnJlZUxpc3QpOwotICAgICAg
ICBmcmVlTGlzdCA9IG5leHQ7Ci0gICAgfQotfQotCi0vLyBTdXBwb3J0IE1TVkMrKyA2LjAKLWNv
bnN0IHVuc2lnbmVkIGNoYXIgVEFsbG9jYXRpb246Omd1YXJkQmxvY2tCZWdpblZhbCA9IDB4ZmI7
Ci1jb25zdCB1bnNpZ25lZCBjaGFyIFRBbGxvY2F0aW9uOjpndWFyZEJsb2NrRW5kVmFsICAgPSAw
eGZlOwotY29uc3QgdW5zaWduZWQgY2hhciBUQWxsb2NhdGlvbjo6dXNlckRhdGFGaWxsICAgICAg
ID0gMHhjZDsKLQotI2lmZGVmIEdVQVJEX0JMT0NLUwotICAgIGNvbnN0IHNpemVfdCBUQWxsb2Nh
dGlvbjo6Z3VhcmRCbG9ja1NpemUgPSAxNjsKLSNlbHNlCi0gICAgY29uc3Qgc2l6ZV90IFRBbGxv
Y2F0aW9uOjpndWFyZEJsb2NrU2l6ZSA9IDA7Ci0jZW5kaWYKLQotLy8KLS8vIENoZWNrIGEgc2lu
Z2xlIGd1YXJkIGJsb2NrIGZvciBkYW1hZ2UKLS8vCi12b2lkIFRBbGxvY2F0aW9uOjpjaGVja0d1
YXJkQmxvY2sodW5zaWduZWQgY2hhciogYmxvY2tNZW0sIHVuc2lnbmVkIGNoYXIgdmFsLCBjb25z
dCBjaGFyKiBsb2NUZXh0KSBjb25zdAotewotI2lmZGVmIEdVQVJEX0JMT0NLUwotICAgIGZvciAo
c2l6ZV90IHggPSAwOyB4IDwgZ3VhcmRCbG9ja1NpemU7IHgrKykgewotICAgICAgICBpZiAoYmxv
Y2tNZW1beF0gIT0gdmFsKSB7Ci0gICAgICAgICAgICBjaGFyIGFzc2VydE1zZ1s4MF07Ci0KLSAg
ICAgICAgICAgIC8vIFdlIGRvbid0IHByaW50IHRoZSBhc3NlcnQgbWVzc2FnZS4gIEl0J3MgaGVy
ZSBqdXN0IHRvIGJlIGhlbHBmdWwuCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikKLSAgICAgICAgICAg
IHNucHJpbnRmKGFzc2VydE1zZywgc2l6ZW9mKGFzc2VydE1zZyksICJQb29sQWxsb2M6IERhbWFn
ZSAlcyAlSXUgYnl0ZSBhbGxvY2F0aW9uIGF0IDB4JXBcbiIsCi0gICAgICAgICAgICAgICAgICAg
IGxvY1RleHQsIHNpemUsIGRhdGEoKSk7Ci0jZWxzZQotICAgICAgICAgICAgc25wcmludGYoYXNz
ZXJ0TXNnLCBzaXplb2YoYXNzZXJ0TXNnKSwgIlBvb2xBbGxvYzogRGFtYWdlICVzICV6dSBieXRl
IGFsbG9jYXRpb24gYXQgMHglcFxuIiwKLSAgICAgICAgICAgICAgICAgICAgbG9jVGV4dCwgc2l6
ZSwgZGF0YSgpKTsKLSNlbmRpZgotICAgICAgICAgICAgYXNzZXJ0KDAgJiYgIlBvb2xBbGxvYzog
RGFtYWdlIGluIGd1YXJkIGJsb2NrIik7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLX0KLQot
Ci12b2lkIFRQb29sQWxsb2NhdG9yOjpwdXNoKCkKLXsKLSAgICB0QWxsb2NTdGF0ZSBzdGF0ZSA9
IHsgY3VycmVudFBhZ2VPZmZzZXQsIGluVXNlTGlzdCB9OwotCi0gICAgc3RhY2sucHVzaF9iYWNr
KHN0YXRlKTsKLSAgICAgICAgCi0gICAgLy8KLSAgICAvLyBJbmRpY2F0ZSB0aGVyZSBpcyBubyBj
dXJyZW50IHBhZ2UgdG8gYWxsb2NhdGUgZnJvbS4KLSAgICAvLwotICAgIGN1cnJlbnRQYWdlT2Zm
c2V0ID0gcGFnZVNpemU7Ci19Ci0KLS8vCi0vLyBEbyBhIG1hc3MtZGVhbGxvY2F0aW9uIG9mIGFs
bCB0aGUgaW5kaXZpZHVhbCBhbGxvY2F0aW9ucwotLy8gdGhhdCBoYXZlIG9jY3VycmVkIHNpbmNl
IHRoZSBsYXN0IHB1c2goKSwgb3Igc2luY2UgdGhlCi0vLyBsYXN0IHBvcCgpLCBvciBzaW5jZSB0
aGUgb2JqZWN0J3MgY3JlYXRpb24uCi0vLwotLy8gVGhlIGRlYWxsb2NhdGVkIHBhZ2VzIGFyZSBz
YXZlZCBmb3IgZnV0dXJlIGFsbG9jYXRpb25zLgotLy8KLXZvaWQgVFBvb2xBbGxvY2F0b3I6OnBv
cCgpCi17Ci0gICAgaWYgKHN0YWNrLnNpemUoKSA8IDEpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHRIZWFkZXIqIHBhZ2UgPSBzdGFjay5iYWNrKCkucGFnZTsKLSAgICBjdXJyZW50UGFnZU9mZnNl
dCA9IHN0YWNrLmJhY2soKS5vZmZzZXQ7Ci0KLSAgICB3aGlsZSAoaW5Vc2VMaXN0ICE9IHBhZ2Up
IHsKLSAgICAgICAgLy8gaW52b2tlIGRlc3RydWN0b3IgdG8gZnJlZSBhbGxvY2F0aW9uIGxpc3QK
LSAgICAgICAgaW5Vc2VMaXN0LT5+dEhlYWRlcigpOwotICAgICAgICAKLSAgICAgICAgdEhlYWRl
ciogbmV4dEluVXNlID0gaW5Vc2VMaXN0LT5uZXh0UGFnZTsKLSAgICAgICAgaWYgKGluVXNlTGlz
dC0+cGFnZUNvdW50ID4gMSkKLSAgICAgICAgICAgIGRlbGV0ZSBbXSByZWludGVycHJldF9jYXN0
PGNoYXIqPihpblVzZUxpc3QpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGluVXNlTGlz
dC0+bmV4dFBhZ2UgPSBmcmVlTGlzdDsKLSAgICAgICAgICAgIGZyZWVMaXN0ID0gaW5Vc2VMaXN0
OwotICAgICAgICB9Ci0gICAgICAgIGluVXNlTGlzdCA9IG5leHRJblVzZTsKLSAgICB9Ci0KLSAg
ICBzdGFjay5wb3BfYmFjaygpOwotfQotCi0vLwotLy8gRG8gYSBtYXNzLWRlYWxsb2NhdGlvbiBv
ZiBhbGwgdGhlIGluZGl2aWR1YWwgYWxsb2NhdGlvbnMKLS8vIHRoYXQgaGF2ZSBvY2N1cnJlZC4K
LS8vCi12b2lkIFRQb29sQWxsb2NhdG9yOjpwb3BBbGwoKQotewotICAgIHdoaWxlIChzdGFjay5z
aXplKCkgPiAwKQotICAgICAgICBwb3AoKTsKLX0KLQotdm9pZCogVFBvb2xBbGxvY2F0b3I6OmFs
bG9jYXRlKHNpemVfdCBudW1CeXRlcykKLXsKLSAgICAvLwotICAgIC8vIEp1c3Qga2VlcCBzb21l
IGludGVyZXN0aW5nIHN0YXRpc3RpY3MuCi0gICAgLy8KLSAgICArK251bUNhbGxzOwotICAgIHRv
dGFsQnl0ZXMgKz0gbnVtQnl0ZXM7Ci0KLSAgICAvLyBJZiB3ZSBhcmUgdXNpbmcgZ3VhcmQgYmxv
Y2tzLCBhbGwgYWxsb2NhdGlvbnMgYXJlIGJyYWNrZXRlZCBieQotICAgIC8vIHRoZW06IFtndWFy
ZGJsb2NrXVthbGxvY2F0aW9uXVtndWFyZGJsb2NrXS4gIG51bUJ5dGVzIGlzIGhvdwotICAgIC8v
IG11Y2ggbWVtb3J5IHRoZSBjYWxsZXIgYXNrZWQgZm9yLiAgYWxsb2NhdGlvblNpemUgaXMgdGhl
IHRvdGFsCi0gICAgLy8gc2l6ZSBpbmNsdWRpbmcgZ3VhcmQgYmxvY2tzLiAgSW4gcmVsZWFzZSBi
dWlsZCwKLSAgICAvLyBndWFyZEJsb2NrU2l6ZT0wIGFuZCB0aGlzIGFsbCBnZXRzIG9wdGltaXpl
ZCBhd2F5LgotICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IFRBbGxvY2F0aW9uOjphbGxvY2F0
aW9uU2l6ZShudW1CeXRlcyk7Ci0gICAgLy8gRGV0ZWN0IGludGVnZXIgb3ZlcmZsb3cuCi0gICAg
aWYgKGFsbG9jYXRpb25TaXplIDwgbnVtQnl0ZXMpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
Ly8KLSAgICAvLyBEbyB0aGUgYWxsb2NhdGlvbiwgbW9zdCBsaWtlbHkgY2FzZSBmaXJzdCwgZm9y
IGVmZmljaWVuY3kuCi0gICAgLy8gVGhpcyBzdGVwIGNvdWxkIGJlIG1vdmVkIHRvIGJlIGlubGlu
ZSBzb21ldGltZS4KLSAgICAvLwotICAgIGlmIChhbGxvY2F0aW9uU2l6ZSA8PSBwYWdlU2l6ZSAt
IGN1cnJlbnRQYWdlT2Zmc2V0KSB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIFNhZmUgdG8gYWxs
b2NhdGUgZnJvbSBjdXJyZW50UGFnZU9mZnNldC4KLSAgICAgICAgLy8KLSAgICAgICAgdW5zaWdu
ZWQgY2hhciogbWVtb3J5ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyICo+KGluVXNl
TGlzdCkgKyBjdXJyZW50UGFnZU9mZnNldDsKLSAgICAgICAgY3VycmVudFBhZ2VPZmZzZXQgKz0g
YWxsb2NhdGlvblNpemU7Ci0gICAgICAgIGN1cnJlbnRQYWdlT2Zmc2V0ID0gKGN1cnJlbnRQYWdl
T2Zmc2V0ICsgYWxpZ25tZW50TWFzaykgJiB+YWxpZ25tZW50TWFzazsKLQotICAgICAgICByZXR1
cm4gaW5pdGlhbGl6ZUFsbG9jYXRpb24oaW5Vc2VMaXN0LCBtZW1vcnksIG51bUJ5dGVzKTsKLSAg
ICB9Ci0KLSAgICBpZiAoYWxsb2NhdGlvblNpemUgPiBwYWdlU2l6ZSAtIGhlYWRlclNraXApIHsK
LSAgICAgICAgLy8KLSAgICAgICAgLy8gRG8gYSBtdWx0aS1wYWdlIGFsbG9jYXRpb24uICBEb24n
dCBtaXggdGhlc2Ugd2l0aCB0aGUgb3RoZXJzLgotICAgICAgICAvLyBUaGUgT1MgaXMgZWZmaWNp
ZW50IGFuZCBhbGxvY2F0aW5nIGFuZCBmcmVlLWluZyBtdWx0aXBsZSBwYWdlcy4KLSAgICAgICAg
Ly8KLSAgICAgICAgc2l6ZV90IG51bUJ5dGVzVG9BbGxvYyA9IGFsbG9jYXRpb25TaXplICsgaGVh
ZGVyU2tpcDsKLSAgICAgICAgLy8gRGV0ZWN0IGludGVnZXIgb3ZlcmZsb3cuCi0gICAgICAgIGlm
IChudW1CeXRlc1RvQWxsb2MgPCBhbGxvY2F0aW9uU2l6ZSkKLSAgICAgICAgICAgIHJldHVybiAw
OwotCi0gICAgICAgIHRIZWFkZXIqIG1lbW9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dEhlYWRlcio+
KDo6bmV3IGNoYXJbbnVtQnl0ZXNUb0FsbG9jXSk7Ci0gICAgICAgIGlmIChtZW1vcnkgPT0gMCkK
LSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIC8vIFVzZSBwbGFjZW1lbnQtbmV3IHRv
IGluaXRpYWxpemUgaGVhZGVyCi0gICAgICAgIG5ldyhtZW1vcnkpIHRIZWFkZXIoaW5Vc2VMaXN0
LCAobnVtQnl0ZXNUb0FsbG9jICsgcGFnZVNpemUgLSAxKSAvIHBhZ2VTaXplKTsKLSAgICAgICAg
aW5Vc2VMaXN0ID0gbWVtb3J5OwotCi0gICAgICAgIGN1cnJlbnRQYWdlT2Zmc2V0ID0gcGFnZVNp
emU7ICAvLyBtYWtlIG5leHQgYWxsb2NhdGlvbiBjb21lIGZyb20gYSBuZXcgcGFnZQotCi0gICAg
ICAgIC8vIE5vIGd1YXJkIGJsb2NrcyBmb3IgbXVsdGktcGFnZSBhbGxvY2F0aW9ucyAoeWV0KQot
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KG1lbW9yeSkgKyBoZWFkZXJTa2lwKTsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8v
IE5lZWQgYSBzaW1wbGUgcGFnZSB0byBhbGxvY2F0ZSBmcm9tLgotICAgIC8vCi0gICAgdEhlYWRl
ciogbWVtb3J5OwotICAgIGlmIChmcmVlTGlzdCkgewotICAgICAgICBtZW1vcnkgPSBmcmVlTGlz
dDsKLSAgICAgICAgZnJlZUxpc3QgPSBmcmVlTGlzdC0+bmV4dFBhZ2U7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgbWVtb3J5ID0gcmVpbnRlcnByZXRfY2FzdDx0SGVhZGVyKj4oOjpuZXcgY2hhcltw
YWdlU2l6ZV0pOwotICAgICAgICBpZiAobWVtb3J5ID09IDApCi0gICAgICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci0KLSAgICAvLyBVc2UgcGxhY2VtZW50LW5ldyB0byBpbml0aWFsaXplIGhlYWRl
cgotICAgIG5ldyhtZW1vcnkpIHRIZWFkZXIoaW5Vc2VMaXN0LCAxKTsKLSAgICBpblVzZUxpc3Qg
PSBtZW1vcnk7Ci0gICAgCi0gICAgdW5zaWduZWQgY2hhciogcmV0ID0gcmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZCBjaGFyICo+KGluVXNlTGlzdCkgKyBoZWFkZXJTa2lwOwotICAgIGN1cnJlbnRQ
YWdlT2Zmc2V0ID0gKGhlYWRlclNraXAgKyBhbGxvY2F0aW9uU2l6ZSArIGFsaWdubWVudE1hc2sp
ICYgfmFsaWdubWVudE1hc2s7Ci0KLSAgICByZXR1cm4gaW5pdGlhbGl6ZUFsbG9jYXRpb24oaW5V
c2VMaXN0LCByZXQsIG51bUJ5dGVzKTsKLX0KLQotCi0vLwotLy8gQ2hlY2sgYWxsIGFsbG9jYXRp
b25zIGluIGEgbGlzdCBmb3IgZGFtYWdlIGJ5IGNhbGxpbmcgY2hlY2sgb24gZWFjaC4KLS8vCi12
b2lkIFRBbGxvY2F0aW9uOjpjaGVja0FsbG9jTGlzdCgpIGNvbnN0Ci17Ci0gICAgZm9yIChjb25z
dCBUQWxsb2NhdGlvbiogYWxsb2MgPSB0aGlzOyBhbGxvYyAhPSAwOyBhbGxvYyA9IGFsbG9jLT5w
cmV2QWxsb2MpCi0gICAgICAgIGFsbG9jLT5jaGVjaygpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBlZGQyNDljNGQzYTM5YmIyMDFjMzg1NTQyMzk5MDgwOGY1NWYwN2U1Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuaAorKysgL2Rldi9udWxsCkBAIC0xLDMw
MCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIF9QT09MQUxMT0NfSU5DTFVE
RURfCi0jZGVmaW5lIF9QT09MQUxMT0NfSU5DTFVERURfCi0KLSNpZmRlZiBfREVCVUcKLSNkZWZp
bmUgR1VBUkRfQkxPQ0tTICAvLyBkZWZpbmUgdG8gZW5hYmxlIGd1YXJkIGJsb2NrIHNhbml0eSBj
aGVja2luZwotI2VuZGlmCi0KLS8vCi0vLyBUaGlzIGhlYWRlciBkZWZpbmVzIGFuIGFsbG9jYXRv
ciB0aGF0IGNhbiBiZSB1c2VkIHRvIGVmZmljaWVudGx5Ci0vLyBhbGxvY2F0ZSBhIGxhcmdlIG51
bWJlciBvZiBzbWFsbCByZXF1ZXN0cyBmb3IgaGVhcCBtZW1vcnksIHdpdGggdGhlIAotLy8gaW50
ZW50aW9uIHRoYXQgdGhleSBhcmUgbm90IGluZGl2aWR1YWxseSBkZWFsbG9jYXRlZCwgYnV0IHJh
dGhlciAKLS8vIGNvbGxlY3RpdmVseSBkZWFsbG9jYXRlZCBhdCBvbmUgdGltZS4KLS8vCi0vLyBU
aGlzIHNpbXVsdGFuZW91c2x5Ci0vLwotLy8gKiBNYWtlcyBlYWNoIGluZGl2aWR1YWwgYWxsb2Nh
dGlvbiBtdWNoIG1vcmUgZWZmaWNpZW50OyB0aGUKLS8vICAgICB0eXBpY2FsIGFsbG9jYXRpb24g
aXMgdHJpdmlhbC4KLS8vICogQ29tcGxldGVseSBhdm9pZHMgdGhlIGNvc3Qgb2YgZG9pbmcgaW5k
aXZpZHVhbCBkZWFsbG9jYXRpb24uCi0vLyAqIFNhdmVzIHRoZSB0cm91YmxlIG9mIHRyYWNraW5n
IGRvd24gYW5kIHBsdWdnaW5nIGEgbGFyZ2UgY2xhc3Mgb2YgbGVha3MuCi0vLwotLy8gSW5kaXZp
ZHVhbCBjbGFzc2VzIGNhbiB1c2UgdGhpcyBhbGxvY2F0b3IgYnkgc3VwcGx5aW5nIHRoZWlyIG93
bgotLy8gbmV3IGFuZCBkZWxldGUgbWV0aG9kcy4KLS8vCi0vLyBTVEwgY29udGFpbmVycyBjYW4g
dXNlIHRoaXMgYWxsb2NhdG9yIGJ5IHVzaW5nIHRoZSBwb29sX2FsbG9jYXRvcgotLy8gY2xhc3Mg
YXMgdGhlIGFsbG9jYXRvciAoc2Vjb25kKSB0ZW1wbGF0ZSBhcmd1bWVudC4KLS8vCi0KLSNpbmNs
dWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0K
LS8vIElmIHdlIGFyZSB1c2luZyBndWFyZCBibG9ja3MsIHdlIG11c3QgdHJhY2sgZWFjaCBpbmRp
dnVhbAotLy8gYWxsb2NhdGlvbi4gIElmIHdlIGFyZW4ndCB1c2luZyBndWFyZCBibG9ja3MsIHRo
ZXNlCi0vLyBuZXZlciBnZXQgaW5zdGFudGlhdGVkLCBzbyB3b24ndCBoYXZlIGFueSBpbXBhY3Qu
Ci0vLyAKLQotY2xhc3MgVEFsbG9jYXRpb24gewotcHVibGljOgotICAgIFRBbGxvY2F0aW9uKHNp
emVfdCBzaXplLCB1bnNpZ25lZCBjaGFyKiBtZW0sIFRBbGxvY2F0aW9uKiBwcmV2ID0gMCkgOgot
ICAgICAgICBzaXplKHNpemUpLCBtZW0obWVtKSwgcHJldkFsbG9jKHByZXYpIHsKLSAgICAgICAg
Ly8gQWxsb2NhdGlvbnMgYXJlIGJyYWNrZXRlZDoKLSAgICAgICAgLy8gICAgW2FsbG9jYXRpb25I
ZWFkZXJdW2luaXRpYWxHdWFyZEJsb2NrXVt1c2VyRGF0YV1bZmluYWxHdWFyZEJsb2NrXQotICAg
ICAgICAvLyBUaGlzIHdvdWxkIGJlIGNsZWFuZXIgd2l0aCBpZiAoZ3VhcmRCbG9ja1NpemUpLi4u
LCBidXQgdGhhdAotICAgICAgICAvLyBtYWtlcyB0aGUgY29tcGlsZXIgcHJpbnQgd2FybmluZ3Mg
YWJvdXQgMCBsZW5ndGggbWVtc2V0cywKLSAgICAgICAgLy8gZXZlbiB3aXRoIHRoZSBpZigpIHBy
b3RlY3RpbmcgdGhlbS4KLSNpZmRlZiBHVUFSRF9CTE9DS1MKLSAgICAgICAgbWVtc2V0KHByZUd1
YXJkKCksIGd1YXJkQmxvY2tCZWdpblZhbCwgZ3VhcmRCbG9ja1NpemUpOwotICAgICAgICBtZW1z
ZXQoZGF0YSgpLCAgICAgIHVzZXJEYXRhRmlsbCwgICAgICAgc2l6ZSk7Ci0gICAgICAgIG1lbXNl
dChwb3N0R3VhcmQoKSwgZ3VhcmRCbG9ja0VuZFZhbCwgICBndWFyZEJsb2NrU2l6ZSk7Ci0jZW5k
aWYKLSAgICB9Ci0KLSAgICB2b2lkIGNoZWNrKCkgY29uc3QgewotICAgICAgICBjaGVja0d1YXJk
QmxvY2socHJlR3VhcmQoKSwgIGd1YXJkQmxvY2tCZWdpblZhbCwgImJlZm9yZSIpOwotICAgICAg
ICBjaGVja0d1YXJkQmxvY2socG9zdEd1YXJkKCksIGd1YXJkQmxvY2tFbmRWYWwsICAgImFmdGVy
Iik7Ci0gICAgfQotCi0gICAgdm9pZCBjaGVja0FsbG9jTGlzdCgpIGNvbnN0OwotCi0gICAgLy8g
UmV0dXJuIHRvdGFsIHNpemUgbmVlZGVkIHRvIGFjY29tb2RhdGUgdXNlciBidWZmZXIgb2YgJ3Np
emUnLAotICAgIC8vIHBsdXMgb3VyIHRyYWNraW5nIGRhdGEuCi0gICAgaW5saW5lIHN0YXRpYyBz
aXplX3QgYWxsb2NhdGlvblNpemUoc2l6ZV90IHNpemUpIHsKLSAgICAgICAgcmV0dXJuIHNpemUg
KyAyICogZ3VhcmRCbG9ja1NpemUgKyBoZWFkZXJTaXplKCk7Ci0gICAgfQotCi0gICAgLy8gT2Zm
c2V0IGZyb20gc3Vycm91bmRpbmcgYnVmZmVyIHRvIGdldCB0byB1c2VyIGRhdGEgYnVmZmVyLgot
ICAgIGlubGluZSBzdGF0aWMgdW5zaWduZWQgY2hhciogb2Zmc2V0QWxsb2NhdGlvbih1bnNpZ25l
ZCBjaGFyKiBtKSB7Ci0gICAgICAgIHJldHVybiBtICsgZ3VhcmRCbG9ja1NpemUgKyBoZWFkZXJT
aXplKCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHZvaWQgY2hlY2tHdWFyZEJsb2NrKHVuc2ln
bmVkIGNoYXIqIGJsb2NrTWVtLCB1bnNpZ25lZCBjaGFyIHZhbCwgY29uc3QgY2hhciogbG9jVGV4
dCkgY29uc3Q7Ci0KLSAgICAvLyBGaW5kIG9mZnNldHMgdG8gcHJlIGFuZCBwb3N0IGd1YXJkIGJs
b2NrcywgYW5kIHVzZXIgZGF0YSBidWZmZXIKLSAgICB1bnNpZ25lZCBjaGFyKiBwcmVHdWFyZCgp
ICBjb25zdCB7IHJldHVybiBtZW0gKyBoZWFkZXJTaXplKCk7IH0KLSAgICB1bnNpZ25lZCBjaGFy
KiBkYXRhKCkgICAgICBjb25zdCB7IHJldHVybiBwcmVHdWFyZCgpICsgZ3VhcmRCbG9ja1NpemU7
IH0KLSAgICB1bnNpZ25lZCBjaGFyKiBwb3N0R3VhcmQoKSBjb25zdCB7IHJldHVybiBkYXRhKCkg
KyBzaXplOyB9Ci0KLSAgICBzaXplX3Qgc2l6ZTsgICAgICAgICAgICAgICAgICAvLyBzaXplIG9m
IHRoZSB1c2VyIGRhdGEgYXJlYQotICAgIHVuc2lnbmVkIGNoYXIqIG1lbTsgICAgICAgICAgIC8v
IGJlZ2lubmluZyBvZiBvdXIgYWxsb2NhdGlvbiAocHRzIHRvIGhlYWRlcikKLSAgICBUQWxsb2Nh
dGlvbiogcHJldkFsbG9jOyAgICAgICAvLyBwcmlvciBhbGxvY2F0aW9uIGluIHRoZSBjaGFpbgot
Ci0gICAgLy8gU3VwcG9ydCBNU1ZDKysgNi4wCi0gICAgY29uc3Qgc3RhdGljIHVuc2lnbmVkIGNo
YXIgZ3VhcmRCbG9ja0JlZ2luVmFsOwotICAgIGNvbnN0IHN0YXRpYyB1bnNpZ25lZCBjaGFyIGd1
YXJkQmxvY2tFbmRWYWw7Ci0gICAgY29uc3Qgc3RhdGljIHVuc2lnbmVkIGNoYXIgdXNlckRhdGFG
aWxsOwotCi0gICAgY29uc3Qgc3RhdGljIHNpemVfdCBndWFyZEJsb2NrU2l6ZTsKLSNpZmRlZiBH
VUFSRF9CTE9DS1MKLSAgICBpbmxpbmUgc3RhdGljIHNpemVfdCBoZWFkZXJTaXplKCkgeyByZXR1
cm4gc2l6ZW9mKFRBbGxvY2F0aW9uKTsgfQotI2Vsc2UKLSAgICBpbmxpbmUgc3RhdGljIHNpemVf
dCBoZWFkZXJTaXplKCkgeyByZXR1cm4gMDsgfQotI2VuZGlmCi19OwotCi0vLwotLy8gVGhlcmUg
YXJlIHNldmVyYWwgc3RhY2tzLiAgT25lIGlzIHRvIHRyYWNrIHRoZSBwdXNoaW5nIGFuZCBwb3Bw
aW5nCi0vLyBvZiB0aGUgdXNlciwgYW5kIG5vdCB5ZXQgaW1wbGVtZW50ZWQuICBUaGUgb3RoZXJz
IGFyZSBzaW1wbHkgYSAKLS8vIHJlcG9zaXRvcmllcyBvZiBmcmVlIHBhZ2VzIG9yIHVzZWQgcGFn
ZXMuCi0vLwotLy8gUGFnZSBzdGFja3MgYXJlIGxpbmtlZCB0b2dldGhlciB3aXRoIGEgc2ltcGxl
IGhlYWRlciBhdCB0aGUgYmVnaW5uaW5nCi0vLyBvZiBlYWNoIGFsbG9jYXRpb24gb2J0YWluZWQg
ZnJvbSB0aGUgdW5kZXJseWluZyBPUy4gIE11bHRpLXBhZ2UgYWxsb2NhdGlvbnMKLS8vIGFyZSBy
ZXR1cm5lZCB0byB0aGUgT1MuICBJbmRpdmlkdWFsIHBhZ2UgYWxsb2NhdGlvbnMgYXJlIGtlcHQg
Zm9yIGZ1dHVyZQotLy8gcmUtdXNlLgotLy8KLS8vIFRoZSAicGFnZSBzaXplIiB1c2VkIGlzIG5v
dCwgbm9yIG11c3QgaXQgbWF0Y2gsIHRoZSB1bmRlcmx5aW5nIE9TCi0vLyBwYWdlIHNpemUuICBC
dXQsIGhhdmluZyBpdCBiZSBhYm91dCB0aGF0IHNpemUgb3IgZXF1YWwgdG8gYSBzZXQgb2YgCi0v
LyBwYWdlcyBpcyBsaWtlbHkgbW9zdCBvcHRpbWFsLgotLy8KLWNsYXNzIFRQb29sQWxsb2NhdG9y
IHsKLXB1YmxpYzoKLSAgICBUUG9vbEFsbG9jYXRvcihpbnQgZ3Jvd3RoSW5jcmVtZW50ID0gOCox
MDI0LCBpbnQgYWxsb2NhdGlvbkFsaWdubWVudCA9IDE2KTsKLQotICAgIC8vCi0gICAgLy8gRG9u
J3QgY2FsbCB0aGUgZGVzdHJ1Y3RvciBqdXN0IHRvIGZyZWUgdXAgdGhlIG1lbW9yeSwgY2FsbCBw
b3AoKQotICAgIC8vCi0gICAgflRQb29sQWxsb2NhdG9yKCk7Ci0KLSAgICAvLwotICAgIC8vIENh
bGwgcHVzaCgpIHRvIGVzdGFibGlzaCBhIG5ldyBwbGFjZSB0byBwb3AgbWVtb3J5IHRvby4gIERv
ZXMgbm90Ci0gICAgLy8gaGF2ZSB0byBiZSBjYWxsZWQgdG8gZ2V0IHRoaW5ncyBzdGFydGVkLgot
ICAgIC8vCi0gICAgdm9pZCBwdXNoKCk7Ci0KLSAgICAvLwotICAgIC8vIENhbGwgcG9wKCkgdG8g
ZnJlZSBhbGwgbWVtb3J5IGFsbG9jYXRlZCBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvIHB1c2goKSwK
LSAgICAvLyBvciBpZiBubyBsYXN0IGNhbGwgdG8gcHVzaCwgZnJlZXMgYWxsIG1lbW9yeSBzaW5j
ZSBmaXJzdCBhbGxvY2F0aW9uLgotICAgIC8vCi0gICAgdm9pZCBwb3AoKTsKLQotICAgIC8vCi0g
ICAgLy8gQ2FsbCBwb3BBbGwoKSB0byBmcmVlIGFsbCBtZW1vcnkgYWxsb2NhdGVkLgotICAgIC8v
Ci0gICAgdm9pZCBwb3BBbGwoKTsKLQotICAgIC8vCi0gICAgLy8gQ2FsbCBhbGxvY2F0ZSgpIHRv
IGFjdHVhbGx5IGFjcXVpcmUgbWVtb3J5LiAgUmV0dXJucyAwIGlmIG5vIG1lbW9yeQotICAgIC8v
IGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGEgcHJvcGVybHkgYWxpZ25lZCBwb2ludGVyIHRvICdudW1C
eXRlcycgb2YgbWVtb3J5LgotICAgIC8vCi0gICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90IG51bUJ5
dGVzKTsKLQotICAgIC8vCi0gICAgLy8gVGhlcmUgaXMgbm8gZGVhbGxvY2F0ZS4gIFRoZSBwb2lu
dCBvZiB0aGlzIGNsYXNzIGlzIHRoYXQKLSAgICAvLyBkZWFsbG9jYXRpb24gY2FuIGJlIHNraXBw
ZWQgYnkgdGhlIHVzZXIgb2YgaXQsIGFzIHRoZSBtb2RlbAotICAgIC8vIG9mIHVzZSBpcyB0byBz
aW11bHRhbmVvdXNseSBkZWFsbG9jYXRlIGV2ZXJ5dGhpbmcgYXQgb25jZQotICAgIC8vIGJ5IGNh
bGxpbmcgcG9wKCksIGFuZCB0byBub3QgaGF2ZSB0byBzb2x2ZSBtZW1vcnkgbGVhayBwcm9ibGVt
cy4KLSAgICAvLwotCi1wcm90ZWN0ZWQ6Ci0gICAgZnJpZW5kIHN0cnVjdCB0SGVhZGVyOwotICAg
IAotICAgIHN0cnVjdCB0SGVhZGVyIHsKLSAgICAgICAgdEhlYWRlcih0SGVhZGVyKiBuZXh0UGFn
ZSwgc2l6ZV90IHBhZ2VDb3VudCkgOgotICAgICAgICAgICAgbmV4dFBhZ2UobmV4dFBhZ2UpLAot
ICAgICAgICAgICAgcGFnZUNvdW50KHBhZ2VDb3VudCkKLSNpZmRlZiBHVUFSRF9CTE9DS1MKLSAg
ICAgICAgICAsIGxhc3RBbGxvY2F0aW9uKDApCi0jZW5kaWYKLSAgICAgICAgICAgIHsgfQotCi0g
ICAgICAgIH50SGVhZGVyKCkgewotI2lmZGVmIEdVQVJEX0JMT0NLUwotICAgICAgICAgICAgaWYg
KGxhc3RBbGxvY2F0aW9uKQotICAgICAgICAgICAgICAgIGxhc3RBbGxvY2F0aW9uLT5jaGVja0Fs
bG9jTGlzdCgpOwotI2VuZGlmCi0gICAgICAgIH0KLQotICAgICAgICB0SGVhZGVyKiBuZXh0UGFn
ZTsKLSAgICAgICAgc2l6ZV90IHBhZ2VDb3VudDsKLSNpZmRlZiBHVUFSRF9CTE9DS1MKLSAgICAg
ICAgVEFsbG9jYXRpb24qIGxhc3RBbGxvY2F0aW9uOwotI2VuZGlmCi0gICAgfTsKLQotICAgIHN0
cnVjdCB0QWxsb2NTdGF0ZSB7Ci0gICAgICAgIHNpemVfdCBvZmZzZXQ7Ci0gICAgICAgIHRIZWFk
ZXIqIHBhZ2U7Ci0gICAgfTsKLSAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPHRBbGxvY1N0YXRlPiB0
QWxsb2NTdGFjazsKLQotICAgIC8vIFRyYWNrIGFsbG9jYXRpb25zIGlmIGFuZCBvbmx5IGlmIHdl
J3JlIHVzaW5nIGd1YXJkIGJsb2NrcwotICAgIHZvaWQqIGluaXRpYWxpemVBbGxvY2F0aW9uKHRI
ZWFkZXIqIGJsb2NrLCB1bnNpZ25lZCBjaGFyKiBtZW1vcnksIHNpemVfdCBudW1CeXRlcykgewot
I2lmZGVmIEdVQVJEX0JMT0NLUwotICAgICAgICBuZXcobWVtb3J5KSBUQWxsb2NhdGlvbihudW1C
eXRlcywgbWVtb3J5LCBibG9jay0+bGFzdEFsbG9jYXRpb24pOwotICAgICAgICBibG9jay0+bGFz
dEFsbG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PFRBbGxvY2F0aW9uKj4obWVtb3J5KTsKLSNl
bmRpZgotICAgICAgICAvLyBUaGlzIGlzIG9wdGltaXplZCBlbnRpcmVseSBhd2F5IGlmIEdVQVJE
X0JMT0NLUyBpcyBub3QgZGVmaW5lZC4KLSAgICAgICAgcmV0dXJuIFRBbGxvY2F0aW9uOjpvZmZz
ZXRBbGxvY2F0aW9uKG1lbW9yeSk7Ci0gICAgfQotCi0gICAgc2l6ZV90IHBhZ2VTaXplOyAgICAg
ICAgLy8gZ3JhbnVsYXJpdHkgb2YgYWxsb2NhdGlvbiBmcm9tIHRoZSBPUwotICAgIHNpemVfdCBh
bGlnbm1lbnQ7ICAgICAgIC8vIGFsbCByZXR1cm5lZCBhbGxvY2F0aW9ucyB3aWxsIGJlIGFsaWdu
ZWQgYXQgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBncmFudWxhcml0eSwg
d2hpY2ggd2lsbCBiZSBhIHBvd2VyIG9mIDIKLSAgICBzaXplX3QgYWxpZ25tZW50TWFzazsKLSAg
ICBzaXplX3QgaGVhZGVyU2tpcDsgICAgICAvLyBhbW91bnQgb2YgbWVtb3J5IHRvIHNraXAgdG8g
bWFrZSByb29tIGZvciB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIGhl
YWRlciAoYmFzaWNhbGx5LCBzaXplIG9mIGhlYWRlciwgcm91bmRlZAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vICAgICAgdXAgdG8gbWFrZSBpdCBhbGlnbmVkCi0gICAgc2l6ZV90IGN1
cnJlbnRQYWdlT2Zmc2V0OyAgLy8gbmV4dCBvZmZzZXQgaW4gdG9wIG9mIGluVXNlTGlzdCB0byBh
bGxvY2F0ZSBmcm9tCi0gICAgdEhlYWRlciogZnJlZUxpc3Q7ICAgICAgLy8gbGlzdCBvZiBwb3Bw
ZWQgbWVtb3J5Ci0gICAgdEhlYWRlciogaW5Vc2VMaXN0OyAgICAgLy8gbGlzdCBvZiBhbGwgbWVt
b3J5IGN1cnJlbnRseSBiZWluZyB1c2VkCi0gICAgdEFsbG9jU3RhY2sgc3RhY2s7ICAgICAgLy8g
c3RhY2sgb2Ygd2hlcmUgdG8gYWxsb2NhdGUgZnJvbSwgdG8gcGFydGl0aW9uIHBvb2wKLQotICAg
IGludCBudW1DYWxsczsgICAgICAgICAgIC8vIGp1c3QgYW4gaW50ZXJlc3Rpbmcgc3RhdGlzdGlj
Ci0gICAgc2l6ZV90IHRvdGFsQnl0ZXM7ICAgICAgLy8ganVzdCBhbiBpbnRlcmVzdGluZyBzdGF0
aXN0aWMKLXByaXZhdGU6Ci0gICAgVFBvb2xBbGxvY2F0b3ImIG9wZXJhdG9yPShjb25zdCBUUG9v
bEFsbG9jYXRvciYpOyAgLy8gZG9udCBhbGxvdyBhc3NpZ25tZW50IG9wZXJhdG9yCi0gICAgVFBv
b2xBbGxvY2F0b3IoY29uc3QgVFBvb2xBbGxvY2F0b3ImKTsgIC8vIGRvbnQgYWxsb3cgZGVmYXVs
dCBjb3B5IGNvbnN0cnVjdG9yCi19OwotCi0KLS8vCi0vLyBUaGVyZSBjb3VsZCBwb3RlbnRpYWxs
eSBiZSBtYW55IHBvb2xzIHdpdGggcG9wcyBoYXBwZW5pbmcgYXQKLS8vIGRpZmZlcmVudCB0aW1l
cy4gIEJ1dCBhIHNpbXBsZSB1c2UgaXMgdG8gaGF2ZSBhIGdsb2JhbCBwb3AKLS8vIHdpdGggZXZl
cnlvbmUgdXNpbmcgdGhlIHNhbWUgZ2xvYmFsIGFsbG9jYXRvci4KLS8vCi1leHRlcm4gVFBvb2xB
bGxvY2F0b3IqIEdldEdsb2JhbFBvb2xBbGxvY2F0b3IoKTsKLWV4dGVybiB2b2lkIFNldEdsb2Jh
bFBvb2xBbGxvY2F0b3IoVFBvb2xBbGxvY2F0b3IqIHBvb2xBbGxvY2F0b3IpOwotCi0vLwotLy8g
VGhpcyBTVEwgY29tcGF0aWJsZSBhbGxvY2F0b3IgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhcyB0
aGUgYWxsb2NhdG9yCi0vLyBwYXJhbWV0ZXIgdG8gdGVtcGxhdGl6ZWQgU1RMIGNvbnRhaW5lcnMs
IGxpa2UgdmVjdG9yIGFuZCBtYXAuCi0vLwotLy8gSXQgd2lsbCB1c2UgdGhlIHBvb2xzIGZvciBh
bGxvY2F0aW9uLCBhbmQgbm90Ci0vLyBkbyBhbnkgZGVhbGxvY2F0aW9uLCBidXQgd2lsbCBzdGls
bCBkbyBkZXN0cnVjdGlvbi4KLS8vCi10ZW1wbGF0ZTxjbGFzcyBUPgotY2xhc3MgcG9vbF9hbGxv
Y2F0b3IgewotcHVibGljOgotICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKLSAgICB0eXBl
ZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7Ci0gICAgdHlwZWRlZiBUKiBwb2ludGVyOwot
ICAgIHR5cGVkZWYgY29uc3QgVCogY29uc3RfcG9pbnRlcjsKLSAgICB0eXBlZGVmIFQmIHJlZmVy
ZW5jZTsKLSAgICB0eXBlZGVmIGNvbnN0IFQmIGNvbnN0X3JlZmVyZW5jZTsKLSAgICB0eXBlZGVm
IFQgdmFsdWVfdHlwZTsKLQotICAgIHRlbXBsYXRlPGNsYXNzIE90aGVyPiAKLSAgICBzdHJ1Y3Qg
cmViaW5kIHsKLSAgICAgICAgdHlwZWRlZiBwb29sX2FsbG9jYXRvcjxPdGhlcj4gb3RoZXI7Ci0g
ICAgfTsKLSAgICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIHgpIGNvbnN0IHsgcmV0dXJuICZ4
OyB9Ci0gICAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSB4KSBjb25zdCB7
IHJldHVybiAmeDsgfQotCi0gICAgcG9vbF9hbGxvY2F0b3IoKSA6IGFsbG9jYXRvcihHZXRHbG9i
YWxQb29sQWxsb2NhdG9yKCkpIHsgfQotICAgIHBvb2xfYWxsb2NhdG9yKFRQb29sQWxsb2NhdG9y
JiBhKSA6IGFsbG9jYXRvcigmYSkgeyB9Ci0gICAgcG9vbF9hbGxvY2F0b3IoY29uc3QgcG9vbF9h
bGxvY2F0b3I8VD4mIHApIDogYWxsb2NhdG9yKHAuYWxsb2NhdG9yKSB7IH0KLQotICAgIHRlbXBs
YXRlIDxjbGFzcyBPdGhlcj4KLSAgICBwb29sX2FsbG9jYXRvcjxUPiYgb3BlcmF0b3I9KGNvbnN0
IHBvb2xfYWxsb2NhdG9yPE90aGVyPiYgcCkgewotICAgICAgYWxsb2NhdG9yID0gcC5hbGxvY2F0
b3I7Ci0gICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8Y2xhc3MgT3Ro
ZXI+Ci0gICAgcG9vbF9hbGxvY2F0b3IoY29uc3QgcG9vbF9hbGxvY2F0b3I8T3RoZXI+JiBwKSA6
IGFsbG9jYXRvcigmcC5nZXRBbGxvY2F0b3IoKSkgeyB9Ci0KLSNpZiBkZWZpbmVkKF9fU1VOUFJP
X0NDKSAmJiAhZGVmaW5lZChfUldTVERfQUxMT0NBVE9SKQotICAgIC8vIGxpYkNTdGQgb24gc29t
ZSBwbGF0Zm9ybXMgaGF2ZSBhIGRpZmZlcmVudCBhbGxvY2F0ZS9kZWFsbG9jYXRlIGludGVyZmFj
ZS4KLSAgICAvLyBDYWxsZXIgcHJlLWJha2VzIHNpemVvZihUKSBpbnRvICduJyB3aGljaCBpcyB0
aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlCi0gICAgLy8gYWxsb2NhdGVkLCBub3QgdGhlIG51bWJl
ciBvZiBlbGVtZW50cy4KLSAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3R5cGUgbikgeyAKLSAgICAg
ICAgcmV0dXJuIGdldEFsbG9jYXRvcigpLmFsbG9jYXRlKG4pOwotICAgIH0KLSAgICB2b2lkKiBh
bGxvY2F0ZShzaXplX3R5cGUgbiwgY29uc3Qgdm9pZCopIHsKLSAgICAgICAgcmV0dXJuIGdldEFs
bG9jYXRvcigpLmFsbG9jYXRlKG4pOwotICAgIH0KLSAgICB2b2lkIGRlYWxsb2NhdGUodm9pZCos
IHNpemVfdHlwZSkge30KLSNlbHNlCi0gICAgcG9pbnRlciBhbGxvY2F0ZShzaXplX3R5cGUgbikg
eyAKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8cG9pbnRlcj4oZ2V0QWxsb2NhdG9y
KCkuYWxsb2NhdGUobiAqIHNpemVvZihUKSkpOwotICAgIH0KLSAgICBwb2ludGVyIGFsbG9jYXRl
KHNpemVfdHlwZSBuLCBjb25zdCB2b2lkKikgeyAKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8cG9pbnRlcj4oZ2V0QWxsb2NhdG9yKCkuYWxsb2NhdGUobiAqIHNpemVvZihUKSkpOwot
ICAgIH0KLSAgICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciwgc2l6ZV90eXBlKSB7fQotI2VuZGlm
ICAvLyBfUldTVERfQUxMT0NBVE9SCi0KLSAgICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIHAsIGNv
bnN0IFQmIHZhbCkgeyBuZXcgKCh2b2lkICopcCkgVCh2YWwpOyB9Ci0gICAgdm9pZCBkZXN0cm95
KHBvaW50ZXIgcCkgeyBwLT5UOjp+VCgpOyB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
cG9vbF9hbGxvY2F0b3ImIHJocykgY29uc3QgeyByZXR1cm4gJmdldEFsbG9jYXRvcigpID09ICZy
aHMuZ2V0QWxsb2NhdG9yKCk7IH0KLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgcG9vbF9hbGxv
Y2F0b3ImIHJocykgY29uc3QgeyByZXR1cm4gJmdldEFsbG9jYXRvcigpICE9ICZyaHMuZ2V0QWxs
b2NhdG9yKCk7IH0KLQotICAgIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PHNpemVfdHlwZT4oLTEpIC8gc2l6ZW9mKFQpOyB9Ci0gICAgc2l6ZV90eXBlIG1h
eF9zaXplKGludCBzaXplKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KC0x
KSAvIHNpemU7IH0KLQotICAgIHZvaWQgc2V0QWxsb2NhdG9yKFRQb29sQWxsb2NhdG9yKiBhKSB7
IGFsbG9jYXRvciA9IGE7IH0KLSAgICBUUG9vbEFsbG9jYXRvciYgZ2V0QWxsb2NhdG9yKCkgY29u
c3QgeyByZXR1cm4gKmFsbG9jYXRvcjsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgVFBvb2xBbGxvY2F0
b3IqIGFsbG9jYXRvcjsKLX07Ci0KLSNlbmRpZiAvLyBfUE9PTEFMTE9DX0lOQ0xVREVEXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ByYWdtYS5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ByYWdtYS5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAyZjc0NDEyM2I4Mjg5NDk4YzMxNzkxNGVhZDNkZjEzNjNhZTg2
MTZiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QcmFnbWEuaAorKysgL2Rldi9udWxsCkBA
IC0xLDE5ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1BSQUdNQV9I
XwotI2RlZmluZSBDT01QSUxFUl9QUkFHTUFfSF8KLQotc3RydWN0IFRQcmFnbWEgewotICAgIC8v
IEJ5IGRlZmF1bHQgb3B0aW1pemF0aW9uIGlzIHR1cm5lZCBvbiBhbmQgZGVidWcgaXMgdHVybmVk
IG9mZi4KLSAgICBUUHJhZ21hKCkgOiBvcHRpbWl6ZSh0cnVlKSwgZGVidWcoZmFsc2UpIHsgfQot
ICAgIFRQcmFnbWEoYm9vbCBvLCBib29sIGQpIDogb3B0aW1pemUobyksIGRlYnVnKGQpIHsgfQot
Ci0gICAgYm9vbCBvcHRpbWl6ZTsKLSAgICBib29sIGRlYnVnOwotfTsKLQotI2VuZGlmIC8vIENP
TVBJTEVSX1BSQUdNQV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDkyYTY4NzRlYjdiZTdjYjBlN2ZmY2NkNTllYWRiYzBiNTQ3ODQ4YzMuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU4
ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9pbnRlcm1l
ZGlhdGUuaCIKLQotY2xhc3MgVEFsaXZlVHJhdmVyc2VyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJz
ZXIgewotcHVibGljOgotICAgIFRBbGl2ZVRyYXZlcnNlcihUUXVhbGlmaWVyIHEpIDogVEludGVy
bVRyYXZlcnNlcih0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpLCBmb3VuZChmYWxzZSksIHF1YWxp
ZmllcihxKQotICAgIHsKLSAgICB9Ci0KLQlib29sIHdhc0ZvdW5kKCkgeyByZXR1cm4gZm91bmQ7
IH0KLQotcHJvdGVjdGVkOgotICAgIGJvb2wgZm91bmQ7Ci0gICAgVFF1YWxpZmllciBxdWFsaWZp
ZXI7Ci0KLSAgICB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKLSAgICBib29sIHZp
c2l0U2VsZWN0aW9uKFZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKik7Ci19OwotCi0vLwotLy8gUmVw
b3J0IHdoZXRoZXIgb3Igbm90IGEgdmFyaWFibGUgb2YgdGhlIGdpdmVuIHF1YWxpZmllciB0eXBl
Ci0vLyBpcyBndWFyYW50ZWVkIHdyaXR0ZW4uICBOb3QgYWx3YXlzIHBvc3NpYmxlIHRvIGRldGVy
bWluZSBpZgotLy8gaXQgaXMgd3JpdHRlbiBjb25kaXRpb25hbGx5LgotLy8KLS8vID8/IEl0IGRv
ZXMgbm90IGRvIHRoaXMgd2VsbCB5ZXQsIHRoaXMgaXMganVzdCBhIHBsYWNlIGhvbGRlcgotLy8g
dGhhdCBzaW1wbHkgZGV0ZXJtaW5lcyBpZiBpdCB3YXMgcmVmZXJlbmNlIGF0IGFsbCwgYW55d2hl
cmUuCi0vLwotYm9vbCBRdWFsaWZpZXJXcml0dGVuKFRJbnRlcm1Ob2RlKiBub2RlLCBUUXVhbGlm
aWVyIHF1YWxpZmllcikKLXsKLSAgICBUQWxpdmVUcmF2ZXJzZXIgaXQocXVhbGlmaWVyKTsKLQot
ICAgIGlmIChub2RlKQotICAgICAgICBub2RlLT50cmF2ZXJzZSgmaXQpOwotCi0gICAgcmV0dXJu
IGl0Lndhc0ZvdW5kKCk7Ci19Ci0KLXZvaWQgVEFsaXZlVHJhdmVyc2VyOjp2aXNpdFN5bWJvbChU
SW50ZXJtU3ltYm9sKiBub2RlKQotewotICAgIC8vCi0gICAgLy8gSWYgaXQncyB3aGF0IHdlJ3Jl
IGxvb2tpbmcgZm9yLCByZWNvcmQgaXQuCi0gICAgLy8KLSAgICBpZiAobm9kZS0+Z2V0UXVhbGlm
aWVyKCkgPT0gcXVhbGlmaWVyKQotICAgICAgICBmb3VuZCA9IHRydWU7Ci19Ci0KLWJvb2wgVEFs
aXZlVHJhdmVyc2VyOjp2aXNpdFNlbGVjdGlvbihWaXNpdCBwcmVWaXNpdCwgVEludGVybVNlbGVj
dGlvbiogbm9kZSkKLXsKLSAgICBpZiAod2FzRm91bmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgcmV0dXJuIHRydWU7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvUXVhbGlmaWVyQWxpdmUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA4NzJhMDZmNzIxOTJhZjFkMzc4ZjcyZDFlYTIxMGRhZTg5OWJiZjRiLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5oCisrKyAvZGV2L251bGwKQEAgLTEs
NyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi1ib29sIFF1YWxpZmllcldyaXR0ZW4oVElu
dGVybU5vZGUqIHJvb3QsIFRRdWFsaWZpZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBhNGI4YzFlNjNlMWRhZTA1OWE0MTllOTJjMWI3NTI0ODBhMDFkNmQ4Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc3
ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9pbnRlcm1l
ZGlhdGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9SZW1vdmVUcmVlLmgiCi0KLS8vCi0vLyBDb2Rl
IHRvIHJlY3Vyc2l2ZWx5IGRlbGV0ZSB0aGUgaW50ZXJtZWRpYXRlIHRyZWUuCi0vLwotCi1jbGFz
cyBSZW1vdmVUcmVlIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKLXsKLXB1YmxpYzoKLQlSZW1v
dmVUcmVlKCkgOiBUSW50ZXJtVHJhdmVyc2VyKGZhbHNlLCBmYWxzZSwgdHJ1ZSkKLQl7Ci0JfQot
Ci1wcm90ZWN0ZWQ6Ci0Jdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7Ci0Jdm9pZCB2
aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qKTsKLQlib29sIHZpc2l0Qmlu
YXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7Ci0JYm9vbCB2aXNpdFVuYXJ5KFZpc2l0
IHZpc2l0LCBUSW50ZXJtVW5hcnkqKTsKLQlib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0
LCBUSW50ZXJtU2VsZWN0aW9uKik7Ci0JYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwg
VEludGVybUFnZ3JlZ2F0ZSopOwotfTsKLQotdm9pZCBSZW1vdmVUcmVlOjp2aXNpdFN5bWJvbChU
SW50ZXJtU3ltYm9sKiBub2RlKQotewotCWRlbGV0ZSBub2RlOwotfQotCi1ib29sIFJlbW92ZVRy
ZWU6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBub2RlKQotewotCWRl
bGV0ZSBub2RlOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUmVtb3ZlVHJlZTo6dmlzaXRV
bmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQotewotICAgIGRlbGV0ZSBub2Rl
OwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUmVtb3ZlVHJlZTo6dmlzaXRBZ2dyZWdhdGUo
VmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCi17Ci0JZGVsZXRlIG5vZGU7Ci0K
LQlyZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBSZW1vdmVUcmVlOjp2aXNpdFNlbGVjdGlvbihWaXNp
dCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiogbm9kZSkKLXsKLQlkZWxldGUgbm9kZTsKLQotCXJl
dHVybiB0cnVlOwotfQotCi12b2lkIFJlbW92ZVRyZWU6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50
ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSkKLXsKLQlkZWxldGUgbm9kZTsKLX0KLQotLy8KLS8vIEVu
dHJ5IHBvaW50LgotLy8KLXZvaWQgUmVtb3ZlQWxsVHJlZU5vZGVzKFRJbnRlcm1Ob2RlKiByb290
KQotewotICAgIFJlbW92ZVRyZWUgaXQ7Ci0KLSAgICByb290LT50cmF2ZXJzZSgmaXQpOwotfQot
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVtb3Zl
VHJlZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdhODIxNjc5YzIzZmI5MjgwYjNlZGY0
YTdlOGZjYmU0MTU2MTQ2Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5o
CisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi12b2lk
IFJlbW92ZUFsbFRyZWVOb2RlcyhUSW50ZXJtTm9kZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMzkwOGJmZGRiODIwMTczNTNmODdiNDVkNTUwMmFiNzRlZjgxYTI3
Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaAorKysgL2Rldi9u
dWxsCkBAIC0xLDM2ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1JF
TkFNRV9GVU5DVElPTgotI2RlZmluZSBDT01QSUxFUl9SRU5BTUVfRlVOQ1RJT04KLQotI2luY2x1
ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotCi0vLwotLy8gUmVuYW1lcyBhIGZ1bmN0aW9u
LCBpbmNsdWRpbmcgaXRzIGRlY2xhcmF0aW9uIGFuZCBhbnkgY2FsbHMgdG8gaXQuCi0vLwotY2xh
c3MgUmVuYW1lRnVuY3Rpb24gOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgotewotcHVibGljOgot
ICAgIFJlbmFtZUZ1bmN0aW9uKGNvbnN0IFRTdHJpbmcmIG9sZEZ1bmN0aW9uTmFtZSwgY29uc3Qg
VFN0cmluZyYgbmV3RnVuY3Rpb25OYW1lKQotICAgIDogVEludGVybVRyYXZlcnNlcih0cnVlLCBm
YWxzZSwgZmFsc2UpCi0gICAgLCBtT2xkRnVuY3Rpb25OYW1lKG9sZEZ1bmN0aW9uTmFtZSkKLSAg
ICAsIG1OZXdGdW5jdGlvbk5hbWUobmV3RnVuY3Rpb25OYW1lKSB7fQotCi0gICAgdmlydHVhbCBi
b29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQot
ICAgIHsKLSAgICAgICAgVE9wZXJhdG9yIG9wID0gbm9kZS0+Z2V0T3AoKTsKLSAgICAgICAgaWYg
KChvcCA9PSBFT3BGdW5jdGlvbiB8fCBvcCA9PSBFT3BGdW5jdGlvbkNhbGwpICYmIG5vZGUtPmdl
dE5hbWUoKSA9PSBtT2xkRnVuY3Rpb25OYW1lKQotICAgICAgICAgICAgbm9kZS0+c2V0TmFtZSht
TmV3RnVuY3Rpb25OYW1lKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIGNvbnN0IFRTdHJpbmcgbU9sZEZ1bmN0aW9uTmFtZTsKLSAgICBjb25zdCBUU3RyaW5n
IG1OZXdGdW5jdGlvbk5hbWU7Ci19OwotCi0jZW5kaWYgIC8vIENPTVBJTEVSX1JFTkFNRV9GVU5D
VElPTgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Nl
YXJjaFN5bWJvbC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2Vh
cmNoU3ltYm9sLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM2OGYxYTRmYWY3
NjQ3YzRiNTlkMzQyYTc4OGZjZjAwMzJjM2ViNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
U2VhcmNoU3ltYm9sLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0vLyBTZWFyY2hTeW1ib2wgaXMgYW4gQVNUIHRyYXZlcnNlciB0byBkZXRlY3Qg
dGhlIHVzZSBvZiBhIGdpdmVuIHN5bWJvbCBuYW1lCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIv
U2VhcmNoU3ltYm9sLmgiCi0KLSNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgotI2luY2x1
ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIKLQotbmFtZXNwYWNlIHNoCi17Ci1TZWFyY2hTeW1i
b2w6OlNlYXJjaFN5bWJvbChjb25zdCBUU3RyaW5nICZzeW1ib2wpIDogbVN5bWJvbChzeW1ib2wp
Ci17Ci0gICAgbWF0Y2ggPSBmYWxzZTsKLX0KLQotdm9pZCBTZWFyY2hTeW1ib2w6OnRyYXZlcnNl
KFRJbnRlcm1Ob2RlICpub2RlKQotewotICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOwotfQotCi12
b2lkIFNlYXJjaFN5bWJvbDo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqc3ltYm9sTm9kZSkK
LXsKLSAgICBpZiAoc3ltYm9sTm9kZS0+Z2V0U3ltYm9sKCkgPT0gbVN5bWJvbCkKLSAgICB7Ci0g
ICAgICAgIG1hdGNoID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgU2VhcmNoU3ltYm9sOjpmb3Vu
ZE1hdGNoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWF0Y2g7Ci19Ci19CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2VhcmNoU3ltYm9sLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2VhcmNoU3ltYm9sLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyNGJjNzdjNmYyZGZlMzFjNzNlZDY5Mzg1YjMzYzZlMDVi
ZjA0MmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NlYXJjaFN5bWJvbC5oCisrKyAvZGV2
L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLS8vIFNlYXJjaFN5bWJv
bCBpcyBhbiBBU1QgdHJhdmVyc2VyIHRvIGRldGVjdCB0aGUgdXNlIG9mIGEgZ2l2ZW4gc3ltYm9s
IG5hbWUKLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfU0VBUkNIU1lNQk9MX0hfCi0jZGVmaW5lIENP
TVBJTEVSX1NFQVJDSFNZTUJPTF9IXwotCi0jaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRl
LmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VDb250ZXh0LmgiCi0KLW5hbWVzcGFjZSBzaAot
ewotY2xhc3MgU2VhcmNoU3ltYm9sIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKLXsKLSAgcHVi
bGljOgotICAgIFNlYXJjaFN5bWJvbChjb25zdCBUU3RyaW5nICZzeW1ib2wpOwotCi0gICAgdm9p
ZCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7Ci0gICAgdm9pZCB2aXNpdFN5bWJvbChUSW50
ZXJtU3ltYm9sICpzeW1ib2xOb2RlKTsKLQotICAgIGJvb2wgZm91bmRNYXRjaCgpIGNvbnN0Owot
Ci0gIHByb3RlY3RlZDoKLSAgICBjb25zdCBUU3RyaW5nICZtU3ltYm9sOwotICAgIGJvb2wgbWF0
Y2g7Ci19OwotfQotCi0jZW5kaWYgICAvLyBDT01QSUxFUl9TRUFSQ0hTWU1CT0xfSF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyMWQzMzFlYTlkZjEzZjAwODhjMThlNzZjOTFkYmFmZmE0
ZWQ3NDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxNzAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBfU0hIQU5E
TEVfSU5DTFVERURfCi0jZGVmaW5lIF9TSEhBTkRMRV9JTkNMVURFRF8KLQotLy8KLS8vIE1hY2hp
bmUgaW5kZXBlbmRlbnQgcGFydCBvZiB0aGUgY29tcGlsZXIgcHJpdmF0ZSBvYmplY3RzCi0vLyBz
ZW50IGFzIFNoSGFuZGxlIHRvIHRoZSBkcml2ZXIuCi0vLwotLy8gVGhpcyBzaG91bGQgbm90IGJl
IGluY2x1ZGVkIGJ5IGRyaXZlciBjb2RlLgotLy8KLQotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVy
TGFuZy5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCIK
LSNpbmNsdWRlICJjb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oIgotI2luY2x1ZGUgImNvbXBp
bGVyL0hhc2hOYW1lcy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCi0jaW5jbHVk
ZSAiY29tcGlsZXIvU3ltYm9sVGFibGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9WYXJpYWJsZUlu
Zm8uaCIKLSNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIu
aCIKLQotY2xhc3MgTG9uZ05hbWVNYXA7Ci1jbGFzcyBUQ29tcGlsZXI7Ci1jbGFzcyBURGVwZW5k
ZW5jeUdyYXBoOwotY2xhc3MgVHJhbnNsYXRvckhMU0w7Ci0KLS8vCi0vLyBIZWxwZXIgZnVuY3Rp
b24gdG8gaWRlbnRpZnkgc3BlY3MgdGhhdCBhcmUgYmFzZWQgb24gdGhlIFdlYkdMIHNwZWMsCi0v
LyBsaWtlIHRoZSBDU1MgU2hhZGVycyBzcGVjLgotLy8KLWJvb2wgaXNXZWJHTEJhc2VkU3BlYyhT
aFNoYWRlclNwZWMgc3BlYyk7Ci0KLS8vCi0vLyBUaGUgYmFzZSBjbGFzcyB1c2VkIHRvIGJhY2sg
aGFuZGxlcyByZXR1cm5lZCB0byB0aGUgZHJpdmVyLgotLy8KLWNsYXNzIFRTaEhhbmRsZUJhc2Ug
ewotcHVibGljOgotICAgIFRTaEhhbmRsZUJhc2UoKTsKLSAgICB2aXJ0dWFsIH5UU2hIYW5kbGVC
YXNlKCk7Ci0gICAgdmlydHVhbCBUQ29tcGlsZXIqIGdldEFzQ29tcGlsZXIoKSB7IHJldHVybiAw
OyB9Ci0gICAgdmlydHVhbCBUcmFuc2xhdG9ySExTTCogZ2V0QXNUcmFuc2xhdG9ySExTTCgpIHsg
cmV0dXJuIDA7IH0KLQotcHJvdGVjdGVkOgotICAgIC8vIE1lbW9yeSBhbGxvY2F0b3IuIEFsbG9j
YXRlcyBhbmQgdHJhY2tzIG1lbW9yeSByZXF1aXJlZCBieSB0aGUgY29tcGlsZXIuCi0gICAgLy8g
RGVhbGxvY2F0ZXMgYWxsIG1lbW9yeSB3aGVuIGNvbXBpbGVyIGlzIGRlc3RydWN0ZWQuCi0gICAg
VFBvb2xBbGxvY2F0b3IgYWxsb2NhdG9yOwotfTsKLQotLy8KLS8vIFRoZSBiYXNlIGNsYXNzIGZv
ciB0aGUgbWFjaGluZSBkZXBlbmRlbnQgY29tcGlsZXIgdG8gZGVyaXZlIGZyb20KLS8vIGZvciBt
YW5hZ2luZyBvYmplY3QgY29kZSBmcm9tIHRoZSBjb21waWxlLgotLy8KLWNsYXNzIFRDb21waWxl
ciA6IHB1YmxpYyBUU2hIYW5kbGVCYXNlIHsKLXB1YmxpYzoKLSAgICBUQ29tcGlsZXIoU2hTaGFk
ZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjKTsKLSAgICB2aXJ0dWFsIH5UQ29tcGlsZXIo
KTsKLSAgICB2aXJ0dWFsIFRDb21waWxlciogZ2V0QXNDb21waWxlcigpIHsgcmV0dXJuIHRoaXM7
IH0KLQotICAgIGJvb2wgSW5pdChjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291cmNlcyk7
Ci0gICAgYm9vbCBjb21waWxlKGNvbnN0IGNoYXIqIGNvbnN0IHNoYWRlclN0cmluZ3NbXSwKLSAg
ICAgICAgICAgICAgICAgc2l6ZV90IG51bVN0cmluZ3MsCi0gICAgICAgICAgICAgICAgIGludCBj
b21waWxlT3B0aW9ucyk7Ci0KLSAgICAvLyBHZXQgcmVzdWx0cyBvZiB0aGUgbGFzdCBjb21waWxh
dGlvbi4KLSAgICBUSW5mb1NpbmsmIGdldEluZm9TaW5rKCkgeyByZXR1cm4gaW5mb1Npbms7IH0K
LSAgICBjb25zdCBUVmFyaWFibGVJbmZvTGlzdCYgZ2V0QXR0cmlicygpIGNvbnN0IHsgcmV0dXJu
IGF0dHJpYnM7IH0KLSAgICBjb25zdCBUVmFyaWFibGVJbmZvTGlzdCYgZ2V0VW5pZm9ybXMoKSBj
b25zdCB7IHJldHVybiB1bmlmb3JtczsgfQotICAgIGNvbnN0IFRWYXJpYWJsZUluZm9MaXN0JiBn
ZXRWYXJ5aW5ncygpIGNvbnN0IHsgcmV0dXJuIHZhcnlpbmdzOyB9Ci0gICAgaW50IGdldE1hcHBl
ZE5hbWVNYXhMZW5ndGgoKSBjb25zdDsKLQotICAgIFNoSGFzaEZ1bmN0aW9uNjQgZ2V0SGFzaEZ1
bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gaGFzaEZ1bmN0aW9uOyB9Ci0gICAgTmFtZU1hcCYgZ2V0
TmFtZU1hcCgpIHsgcmV0dXJuIG5hbWVNYXA7IH0KLSAgICBUU3ltYm9sVGFibGUmIGdldFN5bWJv
bFRhYmxlKCkgeyByZXR1cm4gc3ltYm9sVGFibGU7IH0KLQotcHJvdGVjdGVkOgotICAgIFNoU2hh
ZGVyVHlwZSBnZXRTaGFkZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gc2hhZGVyVHlwZTsgfQotICAg
IFNoU2hhZGVyU3BlYyBnZXRTaGFkZXJTcGVjKCkgY29uc3QgeyByZXR1cm4gc2hhZGVyU3BlYzsg
fQotICAgIC8vIEluaXRpYWxpemUgc3ltYm9sLXRhYmxlIHdpdGggYnVpbHQtaW4gc3ltYm9scy4K
LSAgICBib29sIEluaXRCdWlsdEluU3ltYm9sVGFibGUoY29uc3QgU2hCdWlsdEluUmVzb3VyY2Vz
JiByZXNvdXJjZXMpOwotICAgIC8vIENsZWFycyB0aGUgcmVzdWx0cyBmcm9tIHRoZSBwcmV2aW91
cyBjb21waWxhdGlvbi4KLSAgICB2b2lkIGNsZWFyUmVzdWx0cygpOwotICAgIC8vIFJldHVybiB0
cnVlIGlmIGZ1bmN0aW9uIHJlY3Vyc2lvbiBpcyBkZXRlY3RlZCBvciBjYWxsIGRlcHRoIGV4Y2Vl
ZGVkLgotICAgIGJvb2wgZGV0ZWN0Q2FsbERlcHRoKFRJbnRlcm1Ob2RlKiByb290LCBUSW5mb1Np
bmsmIGluZm9TaW5rLCBib29sIGxpbWl0Q2FsbFN0YWNrRGVwdGgpOwotICAgIC8vIFJld3JpdGVz
IGEgc2hhZGVyJ3MgaW50ZXJtZWRpYXRlIHRyZWUgYWNjb3JkaW5nIHRvIHRoZSBDU1MgU2hhZGVy
cyBzcGVjLgotICAgIHZvaWQgcmV3cml0ZUNTU1NoYWRlcihUSW50ZXJtTm9kZSogcm9vdCk7Ci0g
ICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzaGFkZXIgZG9lcyBub3QgZXhjZWVkIHRo
ZSBtaW5pbXVtCi0gICAgLy8gZnVuY3Rpb25hbGl0eSBtYW5kYXRlZCBpbiBHTFNMIDEuMCBzcGVj
IEFwcGVuZGl4IEEuCi0gICAgYm9vbCB2YWxpZGF0ZUxpbWl0YXRpb25zKFRJbnRlcm1Ob2RlKiBy
b290KTsKLSAgICAvLyBDb2xsZWN0IGluZm8gZm9yIGFsbCBhdHRyaWJzLCB1bmlmb3JtcywgdmFy
eWluZ3MuCi0gICAgdm9pZCBjb2xsZWN0VmFyaWFibGVzKFRJbnRlcm1Ob2RlKiByb290KTsKLSAg
ICAvLyBNYXAgbG9uZyB2YXJpYWJsZSBuYW1lcyBpbnRvIHNob3J0ZXIgb25lcy4KLSAgICB2b2lk
IG1hcExvbmdWYXJpYWJsZU5hbWVzKFRJbnRlcm1Ob2RlKiByb290KTsKLSAgICAvLyBUcmFuc2xh
dGUgdG8gb2JqZWN0IGNvZGUuCi0gICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShUSW50ZXJtTm9k
ZSogcm9vdCkgPSAwOwotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiwgYWZ0ZXIgYXBwbHlpbmcgdGhl
IHBhY2tpbmcgcnVsZXMgaW4gdGhlIEdMU0wgMS4wMTcgc3BlYwotICAgIC8vIEFwcGVuZGl4IEEs
IHNlY3Rpb24gNywgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2UgdG9vIG1hbnkgdW5pZm9ybXMgb3Ig
dmFyeWluZ3MuCi0gICAgYm9vbCBlbmZvcmNlUGFja2luZ1Jlc3RyaWN0aW9ucygpOwotICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgc2hhZGVyIHBhc3NlcyB0aGUgcmVzdHJpY3Rpb25zIHRoYXQg
YWltIHRvIHByZXZlbnQgdGltaW5nIGF0dGFja3MuCi0gICAgYm9vbCBlbmZvcmNlVGltaW5nUmVz
dHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290LCBib29sIG91dHB1dEdyYXBoKTsKLSAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2Ugc2FtcGxlcnMuCi0gICAgYm9v
bCBlbmZvcmNlVmVydGV4U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290
KTsKLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2Ugc2FtcGxl
ciBkZXBlbmRlbnQgdmFsdWVzIHRvIGFmZmVjdCBjb250cm9sIAotICAgIC8vIGZsb3cgb3IgaW4g
b3BlcmF0aW9ucyB3aG9zZSB0aW1lIGNhbiBkZXBlbmQgb24gdGhlIGlucHV0IHZhbHVlcy4KLSAg
ICBib29sIGVuZm9yY2VGcmFnbWVudFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhjb25zdCBURGVw
ZW5kZW5jeUdyYXBoJiBncmFwaCk7Ci0gICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIG1heGltdW0g
ZXhwcmVzc2lvbiBjb21wbGV4aXR5IGJlbG93IHRoZSBsaW1pdC4KLSAgICBib29sIGxpbWl0RXhw
cmVzc2lvbkNvbXBsZXhpdHkoVEludGVybU5vZGUqIHJvb3QpOwotICAgIC8vIEdldCBidWlsdC1p
biBleHRlbnNpb25zIHdpdGggZGVmYXVsdCBiZWhhdmlvci4KLSAgICBjb25zdCBURXh0ZW5zaW9u
QmVoYXZpb3ImIGdldEV4dGVuc2lvbkJlaGF2aW9yKCkgY29uc3Q7Ci0gICAgLy8gR2V0IHRoZSBy
ZXNvdXJjZXMgc2V0IGJ5IEluaXRCdWlsdEluU3ltYm9sVGFibGUKLSAgICBjb25zdCBTaEJ1aWx0
SW5SZXNvdXJjZXMmIGdldFJlc291cmNlcygpIGNvbnN0OwotCi0gICAgY29uc3QgQXJyYXlCb3Vu
ZHNDbGFtcGVyJiBnZXRBcnJheUJvdW5kc0NsYW1wZXIoKSBjb25zdDsKLSAgICBTaEFycmF5SW5k
ZXhDbGFtcGluZ1N0cmF0ZWd5IGdldEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5KCkgY29uc3Q7
Ci0gICAgY29uc3QgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3ImIGdldEJ1aWx0SW5GdW5jdGlvbkVt
dWxhdG9yKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgU2hTaGFkZXJUeXBlIHNoYWRlclR5cGU7
Ci0gICAgU2hTaGFkZXJTcGVjIHNoYWRlclNwZWM7Ci0KLSAgICBpbnQgbWF4VW5pZm9ybVZlY3Rv
cnM7Ci0gICAgaW50IG1heFZhcnlpbmdWZWN0b3JzOwotICAgIGludCBtYXhFeHByZXNzaW9uQ29t
cGxleGl0eTsKLSAgICBpbnQgbWF4Q2FsbFN0YWNrRGVwdGg7Ci0KLSAgICBTaEJ1aWx0SW5SZXNv
dXJjZXMgY29tcGlsZVJlc291cmNlczsKLQotICAgIC8vIEJ1aWx0LWluIHN5bWJvbCB0YWJsZSBm
b3IgdGhlIGdpdmVuIGxhbmd1YWdlLCBzcGVjLCBhbmQgcmVzb3VyY2VzLgotICAgIC8vIEl0IGlz
IHByZXNlcnZlZCBmcm9tIGNvbXBpbGUtdG8tY29tcGlsZS4KLSAgICBUU3ltYm9sVGFibGUgc3lt
Ym9sVGFibGU7Ci0gICAgLy8gQnVpbHQtaW4gZXh0ZW5zaW9ucyB3aXRoIGRlZmF1bHQgYmVoYXZp
b3IuCi0gICAgVEV4dGVuc2lvbkJlaGF2aW9yIGV4dGVuc2lvbkJlaGF2aW9yOwotICAgIGJvb2wg
ZnJhZ21lbnRQcmVjaXNpb25IaWdoOwotCi0gICAgQXJyYXlCb3VuZHNDbGFtcGVyIGFycmF5Qm91
bmRzQ2xhbXBlcjsKLSAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IGNsYW1waW5nU3Ry
YXRlZ3k7Ci0gICAgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IgYnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3I7Ci0KLSAgICAvLyBSZXN1bHRzIG9mIGNvbXBpbGF0aW9uLgotICAgIFRJbmZvU2luayBpbmZv
U2luazsgIC8vIE91dHB1dCBzaW5rLgotICAgIFRWYXJpYWJsZUluZm9MaXN0IGF0dHJpYnM7ICAv
LyBBY3RpdmUgYXR0cmlidXRlcyBpbiB0aGUgY29tcGlsZWQgc2hhZGVyLgotICAgIFRWYXJpYWJs
ZUluZm9MaXN0IHVuaWZvcm1zOyAgLy8gQWN0aXZlIHVuaWZvcm1zIGluIHRoZSBjb21waWxlZCBz
aGFkZXIuCi0gICAgVFZhcmlhYmxlSW5mb0xpc3QgdmFyeWluZ3M7ICAvLyBWYXJ5aW5ncyBpbiB0
aGUgY29tcGlsZWQgc2hhZGVyLgotCi0gICAgLy8gQ2FjaGVkIGNvcHkgb2YgdGhlIHJlZi1jb3Vu
dGVkIHNpbmdsZXRvbi4KLSAgICBMb25nTmFtZU1hcCogbG9uZ05hbWVNYXA7Ci0KLSAgICAvLyBu
YW1lIGhhc2hpbmcuCi0gICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb247Ci0gICAgTmFt
ZU1hcCBuYW1lTWFwOwotfTsKLQotLy8KLS8vIFRoaXMgaXMgdGhlIGludGVyZmFjZSBiZXR3ZWVu
IHRoZSBtYWNoaW5lIGluZGVwZW5kZW50IGNvZGUKLS8vIGFuZCB0aGUgbWFjaGluZSBkZXBlbmRl
bnQgY29kZS4KLS8vCi0vLyBUaGUgbWFjaGluZSBkZXBlbmRlbnQgY29kZSBzaG91bGQgZGVyaXZl
IGZyb20gdGhlIGNsYXNzZXMKLS8vIGFib3ZlLiBUaGVuIENvbnN0cnVjdCooKSBhbmQgRGVsZXRl
KigpIHdpbGwgY3JlYXRlIGFuZCAKLS8vIGRlc3Ryb3kgdGhlIG1hY2hpbmUgZGVwZW5kZW50IG9i
amVjdHMsIHdoaWNoIGNvbnRhaW4gdGhlCi0vLyBhYm92ZSBtYWNoaW5lIGluZGVwZW5kZW50IGlu
Zm9ybWF0aW9uLgotLy8KLVRDb21waWxlciogQ29uc3RydWN0Q29tcGlsZXIoCi0gICAgU2hTaGFk
ZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBTaFNoYWRlck91dHB1dCBvdXRwdXQpOwot
dm9pZCBEZWxldGVDb21waWxlcihUQ29tcGlsZXIqKTsKLQotI2VuZGlmIC8vIF9TSEhBTkRMRV9J
TkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9TaGFkZXJMYW5nLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9T
aGFkZXJMYW5nLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJjZDVjYzVjMTVm
YmU3MDAyMDZjMzQ0MmI4YzhjYzgwM2U0NDliYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
U2hhZGVyTGFuZy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzODcgKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLQotLy8KLS8vIEltcGxlbWVudCB0aGUgdG9wLWxldmVsIG9mIGludGVyZmFjZSB0
byB0aGUgY29tcGlsZXIsCi0vLyBhcyBkZWZpbmVkIGluIFNoYWRlckxhbmcuaAotLy8KLQotI2lu
Y2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlh
bGl6ZURsbC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9sZW5ndGhfbGltaXRz
LmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5kbGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9U
cmFuc2xhdG9ySExTTC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1ZhcmlhYmxlUGFja2VyLmgiCi0K
LS8vCi0vLyBUaGlzIGlzIHRoZSBwbGF0Zm9ybSBpbmRlcGVuZGVudCBpbnRlcmZhY2UgYmV0d2Vl
biBhbiBPR0wgZHJpdmVyCi0vLyBhbmQgdGhlIHNoYWRpbmcgbGFuZ3VhZ2UgY29tcGlsZXIuCi0v
LwotCi1zdGF0aWMgYm9vbCBjaGVja1ZhcmlhYmxlTWF4TGVuZ3Rocyhjb25zdCBTaEhhbmRsZSBo
YW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZXhwZWN0
ZWRWYWx1ZSkKLXsKLSAgICBzaXplX3QgYWN0aXZlVW5pZm9ybUxpbWl0ID0gMDsKLSAgICBTaEdl
dEluZm8oaGFuZGxlLCBTSF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCAmYWN0aXZlVW5pZm9y
bUxpbWl0KTsKLSAgICBzaXplX3QgYWN0aXZlQXR0cmliTGltaXQgPSAwOwotICAgIFNoR2V0SW5m
byhoYW5kbGUsIFNIX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgJmFjdGl2ZUF0dHJpYkxp
bWl0KTsKLSAgICBzaXplX3QgdmFyeWluZ0xpbWl0ID0gMDsKLSAgICBTaEdldEluZm8oaGFuZGxl
LCBTSF9WQVJZSU5HX01BWF9MRU5HVEgsICZ2YXJ5aW5nTGltaXQpOwotICAgIHJldHVybiAoZXhw
ZWN0ZWRWYWx1ZSA9PSBhY3RpdmVVbmlmb3JtTGltaXQgJiYKLSAgICAgICAgICAgIGV4cGVjdGVk
VmFsdWUgPT0gYWN0aXZlQXR0cmliTGltaXQgJiYKLSAgICAgICAgICAgIGV4cGVjdGVkVmFsdWUg
PT0gdmFyeWluZ0xpbWl0KTsKLX0KLQotc3RhdGljIGJvb2wgY2hlY2tNYXBwZWROYW1lTWF4TGVu
Z3RoKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwgc2l6ZV90IGV4cGVjdGVkVmFsdWUpCi17Ci0gICAg
c2l6ZV90IG1hcHBlZE5hbWVNYXhMZW5ndGggPSAwOwotICAgIFNoR2V0SW5mbyhoYW5kbGUsIFNI
X01BUFBFRF9OQU1FX01BWF9MRU5HVEgsICZtYXBwZWROYW1lTWF4TGVuZ3RoKTsKLSAgICByZXR1
cm4gKGV4cGVjdGVkVmFsdWUgPT0gbWFwcGVkTmFtZU1heExlbmd0aCk7Ci19Ci0KLS8vCi0vLyBE
cml2ZXIgbXVzdCBjYWxsIHRoaXMgZmlyc3QsIG9uY2UsIGJlZm9yZSBkb2luZyBhbnkgb3RoZXIg
Y29tcGlsZXIgb3BlcmF0aW9ucy4KLS8vIFN1YnNlcXVlbnQgY2FsbHMgdG8gdGhpcyBmdW5jdGlv
biBhcmUgbm8tb3AuCi0vLwotaW50IFNoSW5pdGlhbGl6ZSgpCi17Ci0gICAgc3RhdGljIGNvbnN0
IGJvb2wga0luaXRpYWxpemVkID0gSW5pdFByb2Nlc3MoKTsKLSAgICByZXR1cm4ga0luaXRpYWxp
emVkID8gMSA6IDA7Ci19Ci0KLS8vCi0vLyBDbGVhbnVwIHN5bWJvbCB0YWJsZXMKLS8vCi1pbnQg
U2hGaW5hbGl6ZSgpCi17Ci0gICAgRGV0YWNoUHJvY2VzcygpOwotICAgIHJldHVybiAxOwotfQot
Ci0vLwotLy8gSW5pdGlhbGl6ZSBidWlsdC1pbiByZXNvdXJjZXMgd2l0aCBtaW5pbXVtIGV4cGVj
dGVkIHZhbHVlcy4KLS8vCi12b2lkIFNoSW5pdEJ1aWx0SW5SZXNvdXJjZXMoU2hCdWlsdEluUmVz
b3VyY2VzKiByZXNvdXJjZXMpCi17Ci0gICAgLy8gQ29uc3RhbnRzLgotICAgIHJlc291cmNlcy0+
TWF4VmVydGV4QXR0cmlicyA9IDg7Ci0gICAgcmVzb3VyY2VzLT5NYXhWZXJ0ZXhVbmlmb3JtVmVj
dG9ycyA9IDEyODsKLSAgICByZXNvdXJjZXMtPk1heFZhcnlpbmdWZWN0b3JzID0gODsKLSAgICBy
ZXNvdXJjZXMtPk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzID0gMDsKLSAgICByZXNvdXJjZXMt
Pk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSA4OwotICAgIHJlc291cmNlcy0+TWF4VGV4
dHVyZUltYWdlVW5pdHMgPSA4OwotICAgIHJlc291cmNlcy0+TWF4RnJhZ21lbnRVbmlmb3JtVmVj
dG9ycyA9IDE2OwotICAgIHJlc291cmNlcy0+TWF4RHJhd0J1ZmZlcnMgPSAxOwotCi0gICAgLy8g
RXh0ZW5zaW9ucy4KLSAgICByZXNvdXJjZXMtPk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA9IDA7
Ci0gICAgcmVzb3VyY2VzLT5PRVNfRUdMX2ltYWdlX2V4dGVybmFsID0gMDsKLSAgICByZXNvdXJj
ZXMtPkFSQl90ZXh0dXJlX3JlY3RhbmdsZSA9IDA7Ci0gICAgcmVzb3VyY2VzLT5FWFRfZHJhd19i
dWZmZXJzID0gMDsKLSAgICByZXNvdXJjZXMtPkVYVF9mcmFnX2RlcHRoID0gMDsKLQotICAgIC8v
IERpc2FibGUgaGlnaHAgcHJlY2lzaW9uIGluIGZyYWdtZW50IHNoYWRlciBieSBkZWZhdWx0Lgot
ICAgIHJlc291cmNlcy0+RnJhZ21lbnRQcmVjaXNpb25IaWdoID0gMDsKLQotICAgIC8vIERpc2Fi
bGUgbmFtZSBoYXNoaW5nIGJ5IGRlZmF1bHQuCi0gICAgcmVzb3VyY2VzLT5IYXNoRnVuY3Rpb24g
PSBOVUxMOwotCi0gICAgcmVzb3VyY2VzLT5BcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSA9IFNI
X0NMQU1QX1dJVEhfQ0xBTVBfSU5UUklOU0lDOwotfQotCi0vLwotLy8gRHJpdmVyIGNhbGxzIHRo
ZXNlIHRvIGNyZWF0ZSBhbmQgZGVzdHJveSBjb21waWxlciBvYmplY3RzLgotLy8KLVNoSGFuZGxl
IFNoQ29uc3RydWN0Q29tcGlsZXIoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVj
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaFNoYWRlck91dHB1dCBvdXRwdXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyogcmVz
b3VyY2VzKQotewotICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2FzdDxUU2hIYW5k
bGVCYXNlKj4oQ29uc3RydWN0Q29tcGlsZXIodHlwZSwgc3BlYywgb3V0cHV0KSk7Ci0gICAgVENv
bXBpbGVyKiBjb21waWxlciA9IGJhc2UtPmdldEFzQ29tcGlsZXIoKTsKLSAgICBpZiAoY29tcGls
ZXIgPT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBHZW5lcmF0ZSBidWlsdC1pbiBz
eW1ib2wgdGFibGUuCi0gICAgaWYgKCFjb21waWxlci0+SW5pdCgqcmVzb3VyY2VzKSkgewotICAg
ICAgICBTaERlc3RydWN0KGJhc2UpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZSk7Ci19Ci0KLXZvaWQgU2hEZXN0cnVj
dChTaEhhbmRsZSBoYW5kbGUpCi17Ci0gICAgaWYgKGhhbmRsZSA9PSAwKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBUU2hIYW5kbGVCYXNlKiBiYXNlID0gc3RhdGljX2Nhc3Q8VFNoSGFuZGxlQmFz
ZSo+KGhhbmRsZSk7Ci0KLSAgICBpZiAoYmFzZS0+Z2V0QXNDb21waWxlcigpKQotICAgICAgICBE
ZWxldGVDb21waWxlcihiYXNlLT5nZXRBc0NvbXBpbGVyKCkpOwotfQotCi0vLwotLy8gRG8gYW4g
YWN0dWFsIGNvbXBpbGUgb24gdGhlIGdpdmVuIHN0cmluZ3MuICBUaGUgcmVzdWx0IGlzIGxlZnQg
Ci0vLyBpbiB0aGUgZ2l2ZW4gY29tcGlsZSBvYmplY3QuCi0vLwotLy8gUmV0dXJuOiAgVGhlIHJl
dHVybiB2YWx1ZSBvZiBTaENvbXBpbGUgaXMgcmVhbGx5IGJvb2xlYW4sIGluZGljYXRpbmcKLS8v
IHN1Y2Nlc3Mgb3IgZmFpbHVyZS4KLS8vCi1pbnQgU2hDb21waWxlKAotICAgIGNvbnN0IFNoSGFu
ZGxlIGhhbmRsZSwKLSAgICBjb25zdCBjaGFyKiBjb25zdCBzaGFkZXJTdHJpbmdzW10sCi0gICAg
c2l6ZV90IG51bVN0cmluZ3MsCi0gICAgaW50IGNvbXBpbGVPcHRpb25zKQotewotICAgIGlmICho
YW5kbGUgPT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBUU2hIYW5kbGVCYXNlKiBiYXNl
ID0gcmVpbnRlcnByZXRfY2FzdDxUU2hIYW5kbGVCYXNlKj4oaGFuZGxlKTsKLSAgICBUQ29tcGls
ZXIqIGNvbXBpbGVyID0gYmFzZS0+Z2V0QXNDb21waWxlcigpOwotICAgIGlmIChjb21waWxlciA9
PSAwKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGJvb2wgc3VjY2VzcyA9IGNvbXBpbGVyLT5j
b21waWxlKHNoYWRlclN0cmluZ3MsIG51bVN0cmluZ3MsIGNvbXBpbGVPcHRpb25zKTsKLSAgICBy
ZXR1cm4gc3VjY2VzcyA/IDEgOiAwOwotfQotCi12b2lkIFNoR2V0SW5mbyhjb25zdCBTaEhhbmRs
ZSBoYW5kbGUsIFNoU2hhZGVySW5mbyBwbmFtZSwgc2l6ZV90KiBwYXJhbXMpCi17Ci0gICAgaWYg
KCFoYW5kbGUgfHwgIXBhcmFtcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVFNoSGFuZGxlQmFz
ZSogYmFzZSA9IHN0YXRpY19jYXN0PFRTaEhhbmRsZUJhc2UqPihoYW5kbGUpOwotICAgIFRDb21w
aWxlciogY29tcGlsZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7Ci0gICAgaWYgKCFjb21waWxl
cikgcmV0dXJuOwotCi0gICAgc3dpdGNoKHBuYW1lKQotICAgIHsKLSAgICBjYXNlIFNIX0lORk9f
TE9HX0xFTkdUSDoKLSAgICAgICAgKnBhcmFtcyA9IGNvbXBpbGVyLT5nZXRJbmZvU2luaygpLmlu
Zm8uc2l6ZSgpICsgMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTSF9PQkpFQ1RfQ09ERV9M
RU5HVEg6Ci0gICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0SW5mb1NpbmsoKS5vYmouc2l6
ZSgpICsgMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTSF9BQ1RJVkVfVU5JRk9STVM6Ci0g
ICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0VW5pZm9ybXMoKS5zaXplKCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgU0hfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSDoKLSAgICAgICAg
KnBhcmFtcyA9IDEgKyAgTUFYX1NZTUJPTF9OQU1FX0xFTjsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBTSF9BQ1RJVkVfQVRUUklCVVRFUzoKLSAgICAgICAgKnBhcmFtcyA9IGNvbXBpbGVyLT5n
ZXRBdHRyaWJzKCkuc2l6ZSgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNIX0FDVElWRV9B
VFRSSUJVVEVfTUFYX0xFTkdUSDoKLSAgICAgICAgKnBhcmFtcyA9IDEgKyBNQVhfU1lNQk9MX05B
TUVfTEVOOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNIX1ZBUllJTkdTOgotICAgICAgICAq
cGFyYW1zID0gY29tcGlsZXItPmdldFZhcnlpbmdzKCkuc2l6ZSgpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFNIX1ZBUllJTkdfTUFYX0xFTkdUSDoKLSAgICAgICAgKnBhcmFtcyA9IDEgKyBN
QVhfU1lNQk9MX05BTUVfTEVOOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNIX01BUFBFRF9O
QU1FX01BWF9MRU5HVEg6Ci0gICAgICAgIC8vIFVzZSBsb25nZXIgbGVuZ3RoIHRoYW4gTUFYX1NI
T1JURU5FRF9JREVOVElGSUVSX1NJWkUgdG8KLSAgICAgICAgLy8gaGFuZGxlIGFycmF5IGFuZCBz
dHJ1Y3QgZGVyZWZlcmVuY2VzLgotICAgICAgICAqcGFyYW1zID0gMSArIE1BWF9TWU1CT0xfTkFN
RV9MRU47Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU0hfTkFNRV9NQVhfTEVOR1RIOgotICAg
ICAgICAqcGFyYW1zID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgU0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSDoKLSAgICAgICAgaWYgKGNvbXBpbGVy
LT5nZXRIYXNoRnVuY3Rpb24oKSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAqcGFyYW1zID0gMDsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIDY0IGJpdHMgaGFzaGluZyBvdXRwdXQg
cmVxdWlyZXMgMTYgYnl0ZXMgZm9yIGhleCAKLSAgICAgICAgICAgIC8vIHJlcHJlc2VudGF0aW9u
LgotICAgICAgICAgICAgY29uc3QgY2hhciBIYXNoZWROYW1lUHJlZml4W10gPSBIQVNIRURfTkFN
RV9QUkVGSVg7Ci0gICAgICAgICAgICAqcGFyYW1zID0gMTYgKyBzaXplb2YoSGFzaGVkTmFtZVBy
ZWZpeCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTSF9IQVNIRURfTkFN
RVNfQ09VTlQ6Ci0gICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0TmFtZU1hcCgpLnNpemUo
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci19
Ci0KLS8vCi0vLyBSZXR1cm4gYW55IGNvbXBpbGVyIGxvZyBvZiBtZXNzYWdlcyBmb3IgdGhlIGFw
cGxpY2F0aW9uLgotLy8KLXZvaWQgU2hHZXRJbmZvTG9nKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwg
Y2hhciogaW5mb0xvZykKLXsKLSAgICBpZiAoIWhhbmRsZSB8fCAhaW5mb0xvZykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHN0YXRpY19jYXN0PFRTaEhhbmRs
ZUJhc2UqPihoYW5kbGUpOwotICAgIFRDb21waWxlciogY29tcGlsZXIgPSBiYXNlLT5nZXRBc0Nv
bXBpbGVyKCk7Ci0gICAgaWYgKCFjb21waWxlcikgcmV0dXJuOwotCi0gICAgVEluZm9TaW5rJiBp
bmZvU2luayA9IGNvbXBpbGVyLT5nZXRJbmZvU2luaygpOwotICAgIHN0cmNweShpbmZvTG9nLCBp
bmZvU2luay5pbmZvLmNfc3RyKCkpOwotfQotCi0vLwotLy8gUmV0dXJuIGFueSBvYmplY3QgY29k
ZS4KLS8vCi12b2lkIFNoR2V0T2JqZWN0Q29kZShjb25zdCBTaEhhbmRsZSBoYW5kbGUsIGNoYXIq
IG9iakNvZGUpCi17Ci0gICAgaWYgKCFoYW5kbGUgfHwgIW9iakNvZGUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2FzdDxUU2hIYW5kbGVCYXNl
Kj4oaGFuZGxlKTsKLSAgICBUQ29tcGlsZXIqIGNvbXBpbGVyID0gYmFzZS0+Z2V0QXNDb21waWxl
cigpOwotICAgIGlmICghY29tcGlsZXIpIHJldHVybjsKLQotICAgIFRJbmZvU2luayYgaW5mb1Np
bmsgPSBjb21waWxlci0+Z2V0SW5mb1NpbmsoKTsKLSAgICBzdHJjcHkob2JqQ29kZSwgaW5mb1Np
bmsub2JqLmNfc3RyKCkpOwotfQotCi12b2lkIFNoR2V0VmFyaWFibGVJbmZvKGNvbnN0IFNoSGFu
ZGxlIGhhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgU2hTaGFkZXJJbmZvIHZhclR5cGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90KiBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCogc2l6ZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgU2hEYXRhVHlwZSogdHlwZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgU2hQcmVjaXNpb25UeXBlKiBwcmVjaXNpb24sCi0gICAgICAgICAgICAgICAgICAgICAg
IGludCogc3RhdGljVXNlLAotICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBuYW1lLAotICAg
ICAgICAgICAgICAgICAgICAgICBjaGFyKiBtYXBwZWROYW1lKQotewotICAgIGlmICghaGFuZGxl
IHx8ICFzaXplIHx8ICF0eXBlIHx8ICFwcmVjaXNpb24gfHwgIXN0YXRpY1VzZSB8fCAhbmFtZSkK
LSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCgodmFyVHlwZSA9PSBTSF9BQ1RJVkVfQVRUUklC
VVRFUykgfHwKLSAgICAgICAgICAgKHZhclR5cGUgPT0gU0hfQUNUSVZFX1VOSUZPUk1TKSB8fAot
ICAgICAgICAgICAodmFyVHlwZSA9PSBTSF9WQVJZSU5HUykpOwotCi0gICAgVFNoSGFuZGxlQmFz
ZSogYmFzZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8VFNoSGFuZGxlQmFzZSo+KGhhbmRsZSk7Ci0gICAg
VENvbXBpbGVyKiBjb21waWxlciA9IGJhc2UtPmdldEFzQ29tcGlsZXIoKTsKLSAgICBpZiAoY29t
cGlsZXIgPT0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgVFZhcmlhYmxlSW5mb0xp
c3QmIHZhckxpc3QgPQotICAgICAgICB2YXJUeXBlID09IFNIX0FDVElWRV9BVFRSSUJVVEVTID8g
Y29tcGlsZXItPmdldEF0dHJpYnMoKSA6Ci0gICAgICAgICAgICAodmFyVHlwZSA9PSBTSF9BQ1RJ
VkVfVU5JRk9STVMgPyBjb21waWxlci0+Z2V0VW5pZm9ybXMoKSA6Ci0gICAgICAgICAgICAgICAg
Y29tcGlsZXItPmdldFZhcnlpbmdzKCkpOwotICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0g
c3RhdGljX2Nhc3Q8aW50Pih2YXJMaXN0LnNpemUoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGNvbnN0IFRWYXJpYWJsZUluZm8mIHZhckluZm8gPSB2YXJMaXN0W2luZGV4XTsKLSAgICBpZiAo
bGVuZ3RoKSAqbGVuZ3RoID0gdmFySW5mby5uYW1lLnNpemUoKTsKLSAgICAqc2l6ZSA9IHZhcklu
Zm8uc2l6ZTsKLSAgICAqdHlwZSA9IHZhckluZm8udHlwZTsKLSAgICBzd2l0Y2ggKHZhckluZm8u
cHJlY2lzaW9uKSB7Ci0gICAgY2FzZSBFYnBMb3c6Ci0gICAgICAgICpwcmVjaXNpb24gPSBTSF9Q
UkVDSVNJT05fTE9XUDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnBNZWRpdW06Ci0gICAg
ICAgICpwcmVjaXNpb24gPSBTSF9QUkVDSVNJT05fTUVESVVNUDsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBFYnBIaWdoOgotICAgICAgICAqcHJlY2lzaW9uID0gU0hfUFJFQ0lTSU9OX0hJR0hQ
OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICAvLyBTb21lIHR5cGVzIGRv
ZXMgbm90IHN1cHBvcnQgcHJlY2lzaW9uLCBmb3IgZXhhbXBsZSwgYm9vbGVhbi4KLSAgICAgICAg
KnByZWNpc2lvbiA9IFNIX1BSRUNJU0lPTl9VTkRFRklORUQ7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICAqc3RhdGljVXNlID0gdmFySW5mby5zdGF0aWNVc2UgPyAxIDogMDsKLQotICAgIC8v
IFRoaXMgc2l6ZSBtdXN0IG1hdGNoIHRoYXQgcXVlcmllZCBieQotICAgIC8vIFNIX0FDVElWRV9V
TklGT1JNX01BWF9MRU5HVEgsIFNIX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgU0hfVkFS
WUlOR19NQVhfTEVOR1RICi0gICAgLy8gaW4gU2hHZXRJbmZvLCBiZWxvdy4KLSAgICBzaXplX3Qg
dmFyaWFibGVMZW5ndGggPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsKLSAgICBBU1NFUlQoY2hl
Y2tWYXJpYWJsZU1heExlbmd0aHMoaGFuZGxlLCB2YXJpYWJsZUxlbmd0aCkpOwotICAgIHN0cm5j
cHkobmFtZSwgdmFySW5mby5uYW1lLmNfc3RyKCksIHZhcmlhYmxlTGVuZ3RoKTsKLSAgICBuYW1l
W3ZhcmlhYmxlTGVuZ3RoIC0gMV0gPSAwOwotICAgIGlmIChtYXBwZWROYW1lKSB7Ci0gICAgICAg
IC8vIFRoaXMgc2l6ZSBtdXN0IG1hdGNoIHRoYXQgcXVlcmllZCBieQotICAgICAgICAvLyBTSF9N
QVBQRURfTkFNRV9NQVhfTEVOR1RIIGluIFNoR2V0SW5mbywgYmVsb3cuCi0gICAgICAgIHNpemVf
dCBtYXhNYXBwZWROYW1lTGVuZ3RoID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47Ci0gICAgICAg
IEFTU0VSVChjaGVja01hcHBlZE5hbWVNYXhMZW5ndGgoaGFuZGxlLCBtYXhNYXBwZWROYW1lTGVu
Z3RoKSk7Ci0gICAgICAgIHN0cm5jcHkobWFwcGVkTmFtZSwgdmFySW5mby5tYXBwZWROYW1lLmNf
c3RyKCksIG1heE1hcHBlZE5hbWVMZW5ndGgpOwotICAgICAgICBtYXBwZWROYW1lW21heE1hcHBl
ZE5hbWVMZW5ndGggLSAxXSA9IDA7Ci0gICAgfQotfQotCi12b2lkIFNoR2V0TmFtZUhhc2hpbmdF
bnRyeShjb25zdCBTaEhhbmRsZSBoYW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBuYW1lLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciogaGFzaGVkTmFtZSkKLXsKLSAgICBpZiAoIWhhbmRs
ZSB8fCAhbmFtZSB8fCAhaGFzaGVkTmFtZSB8fCBpbmRleCA8IDApCi0gICAgICAgIHJldHVybjsK
LQotICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2FzdDxUU2hIYW5kbGVCYXNlKj4o
aGFuZGxlKTsKLSAgICBUQ29tcGlsZXIqIGNvbXBpbGVyID0gYmFzZS0+Z2V0QXNDb21waWxlcigp
OwotICAgIGlmICghY29tcGlsZXIpIHJldHVybjsKLQotICAgIGNvbnN0IE5hbWVNYXAmIG5hbWVN
YXAgPSBjb21waWxlci0+Z2V0TmFtZU1hcCgpOwotICAgIGlmIChpbmRleCA+PSBzdGF0aWNfY2Fz
dDxpbnQ+KG5hbWVNYXAuc2l6ZSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTmFtZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBuYW1lTWFwLmJlZ2luKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBpbmRleDsgKytpKQotICAgICAgICArK2l0OwotCi0gICAgc2l6ZV90IGxlbiA9IGl0LT5m
aXJzdC5sZW5ndGgoKSArIDE7Ci0gICAgc2l6ZV90IG1heF9sZW4gPSAwOwotICAgIFNoR2V0SW5m
byhoYW5kbGUsIFNIX05BTUVfTUFYX0xFTkdUSCwgJm1heF9sZW4pOwotICAgIGlmIChsZW4gPiBt
YXhfbGVuKSB7Ci0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgICAgIGxlbiA9IG1heF9sZW47
Ci0gICAgfQotICAgIHN0cm5jcHkobmFtZSwgaXQtPmZpcnN0LmNfc3RyKCksIGxlbik7Ci0gICAg
Ly8gVG8gYmUgb24gdGhlIHNhZmUgc2lkZSBpbiBjYXNlIHRoZSBzb3VyY2UgaXMgbG9uZ2VyIHRo
YW4gZXhwZWN0ZWQuCi0gICAgbmFtZVtsZW4gLSAxXSA9ICdcMCc7Ci0KLSAgICBsZW4gPSBpdC0+
c2Vjb25kLmxlbmd0aCgpICsgMTsKLSAgICBtYXhfbGVuID0gMDsKLSAgICBTaEdldEluZm8oaGFu
ZGxlLCBTSF9IQVNIRURfTkFNRV9NQVhfTEVOR1RILCAmbWF4X2xlbik7Ci0gICAgaWYgKGxlbiA+
IG1heF9sZW4pIHsKLSAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICAgICAgbGVuID0gbWF4X2xl
bjsKLSAgICB9Ci0gICAgc3RybmNweShoYXNoZWROYW1lLCBpdC0+c2Vjb25kLmNfc3RyKCksIGxl
bik7Ci0gICAgLy8gVG8gYmUgb24gdGhlIHNhZmUgc2lkZSBpbiBjYXNlIHRoZSBzb3VyY2UgaXMg
bG9uZ2VyIHRoYW4gZXhwZWN0ZWQuCi0gICAgaGFzaGVkTmFtZVtsZW4gLSAxXSA9ICdcMCc7Ci19
Ci0KLXZvaWQgU2hHZXRJbmZvUG9pbnRlcihjb25zdCBTaEhhbmRsZSBoYW5kbGUsIFNoU2hhZGVy
SW5mbyBwbmFtZSwgdm9pZCoqIHBhcmFtcykKLXsKLSAgICBpZiAoIWhhbmRsZSB8fCAhcGFyYW1z
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBUU2hIYW5kbGVCYXNlKiBiYXNlID0gc3RhdGljX2Nh
c3Q8VFNoSGFuZGxlQmFzZSo+KGhhbmRsZSk7Ci0gICAgVHJhbnNsYXRvckhMU0wqIHRyYW5zbGF0
b3IgPSBiYXNlLT5nZXRBc1RyYW5zbGF0b3JITFNMKCk7Ci0gICAgaWYgKCF0cmFuc2xhdG9yKSBy
ZXR1cm47Ci0KLSAgICBzd2l0Y2gocG5hbWUpCi0gICAgewotICAgIGNhc2UgU0hfQUNUSVZFX1VO
SUZPUk1TX0FSUkFZOgotICAgICAgICAqcGFyYW1zID0gKHZvaWQqKSZ0cmFuc2xhdG9yLT5nZXRV
bmlmb3JtcygpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwot
ICAgIH0KLX0KLQotaW50IFNoQ2hlY2tWYXJpYWJsZXNXaXRoaW5QYWNraW5nTGltaXRzKAotICAg
IGludCBtYXhWZWN0b3JzLCBTaFZhcmlhYmxlSW5mbyogdmFySW5mb0FycmF5LCBzaXplX3QgdmFy
SW5mb0FycmF5U2l6ZSkKLXsKLSAgICBpZiAodmFySW5mb0FycmF5U2l6ZSA9PSAwKQotICAgICAg
ICByZXR1cm4gMTsKLSAgICBBU1NFUlQodmFySW5mb0FycmF5KTsKLSAgICBUVmFyaWFibGVJbmZv
TGlzdCB2YXJpYWJsZXM7Ci0gICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHZhckluZm9BcnJh
eVNpemU7ICsraWkpCi0gICAgewotICAgICAgICBUVmFyaWFibGVJbmZvIHZhcih2YXJJbmZvQXJy
YXlbaWldLnR5cGUsIHZhckluZm9BcnJheVtpaV0uc2l6ZSk7Ci0gICAgICAgIHZhcmlhYmxlcy5w
dXNoX2JhY2sodmFyKTsKLSAgICB9Ci0gICAgVmFyaWFibGVQYWNrZXIgcGFja2VyOwotICAgIHJl
dHVybiBwYWNrZXIuQ2hlY2tWYXJpYWJsZXNXaXRoaW5QYWNraW5nTGltaXRzKG1heFZlY3RvcnMs
IHZhcmlhYmxlcykgPyAxIDogMDsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBhN2NlMjE2ODBmNWVlY2RiNTkwYzFkNWM2YzViNGEwNWZiOTZkNmM2Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMTYg
KzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8KLS8vIFN5bWJvbCB0YWJsZSBmb3IgcGFy
c2luZy4gIE1vc3QgZnVuY3Rpb25hbGl5IGFuZCBtYWluIGlkZWFzCi0vLyBhcmUgZG9jdW1lbnRl
ZCBpbiB0aGUgaGVhZGVyIGZpbGUuCi0vLwotCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikKLSNwcmFn
bWEgd2FybmluZyhkaXNhYmxlOiA0NzE4KQotI2VuZGlmCi0KLSNpbmNsdWRlICJjb21waWxlci9T
eW1ib2xUYWJsZS5oIgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxhbGdvcml0aG0+
Ci0jaW5jbHVkZSA8Y2xpbWl0cz4KLQotVFR5cGU6OlRUeXBlKGNvbnN0IFRQdWJsaWNUeXBlICZw
KSA6Ci0gICAgICAgICAgICB0eXBlKHAudHlwZSksIHByZWNpc2lvbihwLnByZWNpc2lvbiksIHF1
YWxpZmllcihwLnF1YWxpZmllciksIHNpemUocC5zaXplKSwgbWF0cml4KHAubWF0cml4KSwgYXJy
YXkocC5hcnJheSksIGFycmF5U2l6ZShwLmFycmF5U2l6ZSksIHN0cnVjdHVyZSgwKQotewotICAg
IGlmIChwLnVzZXJEZWYpCi0gICAgICAgIHN0cnVjdHVyZSA9IHAudXNlckRlZi0+Z2V0U3RydWN0
KCk7Ci19Ci0KLS8vCi0vLyBSZWN1cnNpdmVseSBnZW5lcmF0ZSBtYW5nbGVkIG5hbWVzLgotLy8K
LVRTdHJpbmcgVFR5cGU6OmJ1aWxkTWFuZ2xlZE5hbWUoKSBjb25zdAotewotICAgIFRTdHJpbmcg
bWFuZ2xlZE5hbWU7Ci0gICAgaWYgKGlzTWF0cml4KCkpCi0gICAgICAgIG1hbmdsZWROYW1lICs9
ICdtJzsKLSAgICBlbHNlIGlmIChpc1ZlY3RvcigpKQotICAgICAgICBtYW5nbGVkTmFtZSArPSAn
dic7Ci0KLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEVidEZsb2F0OiAgICAgICBtYW5n
bGVkTmFtZSArPSAnZic7ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRJbnQ6ICAgICAgICAgbWFu
Z2xlZE5hbWUgKz0gJ2knOyAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0Qm9vbDogICAgICAgIG1h
bmdsZWROYW1lICs9ICdiJzsgICAgICBicmVhazsKLSAgICBjYXNlIEVidFNhbXBsZXIyRDogICBt
YW5nbGVkTmFtZSArPSAiczIiOyAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRTYW1wbGVyQ3ViZTog
bWFuZ2xlZE5hbWUgKz0gInNDIjsgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0U3RydWN0OiAgICAg
IG1hbmdsZWROYW1lICs9IHN0cnVjdHVyZS0+bWFuZ2xlZE5hbWUoKTsgYnJlYWs7Ci0gICAgZGVm
YXVsdDogICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgbWFuZ2xlZE5hbWUgKz0gc3Rh
dGljX2Nhc3Q8Y2hhcj4oJzAnICsgZ2V0Tm9taW5hbFNpemUoKSk7Ci0gICAgaWYgKGlzQXJyYXko
KSkgewotICAgICAgICBjaGFyIGJ1ZlsyMF07Ci0gICAgICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9m
KGJ1ZiksICIlZCIsIGFycmF5U2l6ZSk7Ci0gICAgICAgIG1hbmdsZWROYW1lICs9ICdbJzsKLSAg
ICAgICAgbWFuZ2xlZE5hbWUgKz0gYnVmOwotICAgICAgICBtYW5nbGVkTmFtZSArPSAnXSc7Ci0g
ICAgfQotICAgIHJldHVybiBtYW5nbGVkTmFtZTsKLX0KLQotc2l6ZV90IFRUeXBlOjpnZXRPYmpl
Y3RTaXplKCkgY29uc3QKLXsKLSAgICBzaXplX3QgdG90YWxTaXplID0gMDsKLQotICAgIGlmIChn
ZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCi0gICAgICAgIHRvdGFsU2l6ZSA9IHN0cnVjdHVy
ZS0+b2JqZWN0U2l6ZSgpOwotICAgIGVsc2UgaWYgKG1hdHJpeCkKLSAgICAgICAgdG90YWxTaXpl
ID0gc2l6ZSAqIHNpemU7Ci0gICAgZWxzZQotICAgICAgICB0b3RhbFNpemUgPSBzaXplOwotCi0g
ICAgaWYgKGlzQXJyYXkoKSkgewotICAgICAgICBzaXplX3QgYXJyYXlTaXplID0gZ2V0QXJyYXlT
aXplKCk7Ci0gICAgICAgIGlmIChhcnJheVNpemUgPiBJTlRfTUFYIC8gdG90YWxTaXplKQotICAg
ICAgICAgICAgdG90YWxTaXplID0gSU5UX01BWDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
dG90YWxTaXplICo9IGFycmF5U2l6ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG90YWxTaXplOwot
fQotCi1ib29sIFRTdHJ1Y3R1cmU6OmNvbnRhaW5zQXJyYXlzKCkgY29uc3QKLXsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1GaWVsZHMtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0
IFRUeXBlKiBmaWVsZFR5cGUgPSAoKm1GaWVsZHMpW2ldLT50eXBlKCk7Ci0gICAgICAgIGlmIChm
aWVsZFR5cGUtPmlzQXJyYXkoKSB8fCBmaWVsZFR5cGUtPmlzU3RydWN0dXJlQ29udGFpbmluZ0Fy
cmF5cygpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotVFN0cmluZyBUU3RydWN0dXJlOjpidWlsZE1hbmdsZWROYW1lKCkgY29uc3QKLXsK
LSAgICBUU3RyaW5nIG1hbmdsZWROYW1lKCJzdHJ1Y3QtIik7Ci0gICAgbWFuZ2xlZE5hbWUgKz0g
Km1OYW1lOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUZpZWxkcy0+c2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJy0nOwotICAgICAgICBtYW5nbGVkTmFtZSArPSAo
Km1GaWVsZHMpW2ldLT50eXBlKCktPmdldE1hbmdsZWROYW1lKCk7Ci0gICAgfQotICAgIHJldHVy
biBtYW5nbGVkTmFtZTsKLX0KLQotc2l6ZV90IFRTdHJ1Y3R1cmU6OmNhbGN1bGF0ZU9iamVjdFNp
emUoKSBjb25zdAotewotICAgIHNpemVfdCBzaXplID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1GaWVsZHMtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHNpemVfdCBmaWVsZFNpemUg
PSAoKm1GaWVsZHMpW2ldLT50eXBlKCktPmdldE9iamVjdFNpemUoKTsKLSAgICAgICAgaWYgKGZp
ZWxkU2l6ZSA+IElOVF9NQVggLSBzaXplKQotICAgICAgICAgICAgc2l6ZSA9IElOVF9NQVg7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNpemUgKz0gZmllbGRTaXplOwotICAgIH0KLSAgICBy
ZXR1cm4gc2l6ZTsKLX0KLQotaW50IFRTdHJ1Y3R1cmU6OmNhbGN1bGF0ZURlZXBlc3ROZXN0aW5n
KCkgY29uc3QKLXsKLSAgICBpbnQgbWF4TmVzdGluZyA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtRmllbGRzLT5zaXplKCk7ICsraSkgewotICAgICAgICBtYXhOZXN0aW5nID0gc3Rk
OjptYXgobWF4TmVzdGluZywgKCptRmllbGRzKVtpXS0+dHlwZSgpLT5nZXREZWVwZXN0U3RydWN0
TmVzdGluZygpKTsKLSAgICB9Ci0gICAgcmV0dXJuIDEgKyBtYXhOZXN0aW5nOwotfQotCi0vLwot
Ly8gRHVtcCBmdW5jdGlvbnMuCi0vLwotCi12b2lkIFRWYXJpYWJsZTo6ZHVtcChUSW5mb1Npbmsm
IGluZm9TaW5rKSBjb25zdAotewotICAgIGluZm9TaW5rLmRlYnVnIDw8IGdldE5hbWUoKS5jX3N0
cigpIDw8ICI6ICIgPDwgdHlwZS5nZXRRdWFsaWZpZXJTdHJpbmcoKSA8PCAiICIgPDwgdHlwZS5n
ZXRQcmVjaXNpb25TdHJpbmcoKSA8PCAiICIgPDwgdHlwZS5nZXRCYXNpY1N0cmluZygpOwotICAg
IGlmICh0eXBlLmlzQXJyYXkoKSkgewotICAgICAgICBpbmZvU2luay5kZWJ1ZyA8PCAiWzBdIjsK
LSAgICB9Ci0gICAgaW5mb1NpbmsuZGVidWcgPDwgIlxuIjsKLX0KLQotdm9pZCBURnVuY3Rpb246
OmR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3QKLXsKLSAgICBpbmZvU2luay5kZWJ1ZyA8
PCBnZXROYW1lKCkuY19zdHIoKSA8PCAiOiAiIDw8ICByZXR1cm5UeXBlLmdldEJhc2ljU3RyaW5n
KCkgPDwgIiAiIDw8IGdldE1hbmdsZWROYW1lKCkuY19zdHIoKSA8PCAiXG4iOwotfQotCi12b2lk
IFRTeW1ib2xUYWJsZUxldmVsOjpkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0Ci17Ci0g
ICAgdExldmVsOjpjb25zdF9pdGVyYXRvciBpdDsKLSAgICBmb3IgKGl0ID0gbGV2ZWwuYmVnaW4o
KTsgaXQgIT0gbGV2ZWwuZW5kKCk7ICsraXQpCi0gICAgICAgICgqaXQpLnNlY29uZC0+ZHVtcChp
bmZvU2luayk7Ci19Ci0KLXZvaWQgVFN5bWJvbFRhYmxlOjpkdW1wKFRJbmZvU2luayAmaW5mb1Np
bmspIGNvbnN0Ci17Ci0gICAgZm9yIChpbnQgbGV2ZWwgPSBjdXJyZW50TGV2ZWwoKTsgbGV2ZWwg
Pj0gMDsgLS1sZXZlbCkgewotICAgICAgICBpbmZvU2luay5kZWJ1ZyA8PCAiTEVWRUwgIiA8PCBs
ZXZlbCA8PCAiXG4iOwotICAgICAgICB0YWJsZVtsZXZlbF0tPmR1bXAoaW5mb1NpbmspOwotICAg
IH0KLX0KLQotLy8KLS8vIEZ1bmN0aW9ucyBoYXZlIGJ1cmllZCBwb2ludGVycyB0byBkZWxldGUu
Ci0vLwotVEZ1bmN0aW9uOjp+VEZ1bmN0aW9uKCkKLXsKLSAgICBmb3IgKFRQYXJhbUxpc3Q6Oml0
ZXJhdG9yIGkgPSBwYXJhbWV0ZXJzLmJlZ2luKCk7IGkgIT0gcGFyYW1ldGVycy5lbmQoKTsgKytp
KQotICAgICAgICBkZWxldGUgKCppKS50eXBlOwotfQotCi0vLwotLy8gU3ltYm9sIHRhYmxlIGxl
dmVscyBhcmUgYSBtYXAgb2YgcG9pbnRlcnMgdG8gc3ltYm9scyB0aGF0IGhhdmUgdG8gYmUgZGVs
ZXRlZC4KLS8vCi1UU3ltYm9sVGFibGVMZXZlbDo6flRTeW1ib2xUYWJsZUxldmVsKCkKLXsKLSAg
ICBmb3IgKHRMZXZlbDo6aXRlcmF0b3IgaXQgPSBsZXZlbC5iZWdpbigpOyBpdCAhPSBsZXZlbC5l
bmQoKTsgKytpdCkKLSAgICAgICAgZGVsZXRlICgqaXQpLnNlY29uZDsKLX0KLQotLy8KLS8vIENo
YW5nZSBhbGwgZnVuY3Rpb24gZW50cmllcyBpbiB0aGUgdGFibGUgd2l0aCB0aGUgbm9uLW1hbmds
ZWQgbmFtZQotLy8gdG8gYmUgcmVsYXRlZCB0byB0aGUgcHJvdmlkZWQgYnVpbHQtaW4gb3BlcmF0
aW9uLiAgVGhpcyBpcyBhIGxvdwotLy8gcGVyZm9ybWFuY2Ugb3BlcmF0aW9uLCBhbmQgb25seSBp
bnRlbmRlZCBmb3Igc3ltYm9sIHRhYmxlcyB0aGF0Ci0vLyBsaXZlIGFjcm9zcyBhIGxhcmdlIG51
bWJlciBvZiBjb21waWxlcy4KLS8vCi12b2lkIFRTeW1ib2xUYWJsZUxldmVsOjpyZWxhdGVUb09w
ZXJhdG9yKGNvbnN0IGNoYXIqIG5hbWUsIFRPcGVyYXRvciBvcCkKLXsKLSAgICB0TGV2ZWw6Oml0
ZXJhdG9yIGl0OwotICAgIGZvciAoaXQgPSBsZXZlbC5iZWdpbigpOyBpdCAhPSBsZXZlbC5lbmQo
KTsgKytpdCkgewotICAgICAgICBpZiAoKCppdCkuc2Vjb25kLT5pc0Z1bmN0aW9uKCkpIHsKLSAg
ICAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPigo
Kml0KS5zZWNvbmQpOwotICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLT5nZXROYW1lKCkgPT0gbmFt
ZSkKLSAgICAgICAgICAgICAgICBmdW5jdGlvbi0+cmVsYXRlVG9PcGVyYXRvcihvcCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLS8vCi0vLyBDaGFuZ2UgYWxsIGZ1bmN0aW9uIGVudHJpZXMgaW4g
dGhlIHRhYmxlIHdpdGggdGhlIG5vbi1tYW5nbGVkIG5hbWUKLS8vIHRvIGJlIHJlbGF0ZWQgdG8g
dGhlIHByb3ZpZGVkIGJ1aWx0LWluIGV4dGVuc2lvbi4gVGhpcyBpcyBhIGxvdwotLy8gcGVyZm9y
bWFuY2Ugb3BlcmF0aW9uLCBhbmQgb25seSBpbnRlbmRlZCBmb3Igc3ltYm9sIHRhYmxlcyB0aGF0
Ci0vLyBsaXZlIGFjcm9zcyBhIGxhcmdlIG51bWJlciBvZiBjb21waWxlcy4KLS8vCi12b2lkIFRT
eW1ib2xUYWJsZUxldmVsOjpyZWxhdGVUb0V4dGVuc2lvbihjb25zdCBjaGFyKiBuYW1lLCBjb25z
dCBUU3RyaW5nJiBleHQpCi17Ci0gICAgZm9yICh0TGV2ZWw6Oml0ZXJhdG9yIGl0ID0gbGV2ZWwu
YmVnaW4oKTsgaXQgIT0gbGV2ZWwuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgVFN5bWJvbCogc3lt
Ym9sID0gaXQtPnNlY29uZDsKLSAgICAgICAgaWYgKHN5bWJvbC0+Z2V0TmFtZSgpID09IG5hbWUp
Ci0gICAgICAgICAgICBzeW1ib2wtPnJlbGF0ZVRvRXh0ZW5zaW9uKGV4dCk7Ci0gICAgfQotfQot
Ci1UU3ltYm9sVGFibGU6On5UU3ltYm9sVGFibGUoKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgdGFibGUuc2l6ZSgpOyArK2kpCi0gICAgICAgIGRlbGV0ZSB0YWJsZVtpXTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHByZWNpc2lvblN0YWNrLnNpemUoKTsgKytpKQotICAgICAg
ICBkZWxldGUgcHJlY2lzaW9uU3RhY2tbaV07Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiZWJhZDRiOTJlNzkwYmM2MjUzZDAyZWMwZjA3NjYxZjk4YzQzODBjLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzgy
ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgX1NZTUJPTF9UQUJMRV9JTkNM
VURFRF8KLSNkZWZpbmUgX1NZTUJPTF9UQUJMRV9JTkNMVURFRF8KLQotLy8KLS8vIFN5bWJvbCB0
YWJsZSBmb3IgcGFyc2luZy4gIEhhcyB0aGVzZSBkZXNpZ24gY2hhcmFjdGVyaXN0aWNzOgotLy8K
LS8vICogU2FtZSBzeW1ib2wgdGFibGUgY2FuIGJlIHVzZWQgdG8gY29tcGlsZSBtYW55IHNoYWRl
cnMsIHRvIHByZXNlcnZlCi0vLyAgIGVmZm9ydCBvZiBjcmVhdGluZyBhbmQgbG9hZGluZyB3aXRo
IHRoZSBsYXJnZSBudW1iZXJzIG9mIGJ1aWx0LWluCi0vLyAgIHN5bWJvbHMuCi0vLwotLy8gKiBO
YW1lIG1hbmdsaW5nIHdpbGwgYmUgdXNlZCB0byBnaXZlIGVhY2ggZnVuY3Rpb24gYSB1bmlxdWUg
bmFtZQotLy8gICBzbyB0aGF0IHN5bWJvbCB0YWJsZSBsb29rdXBzIGFyZSBuZXZlciBhbWJpZ3Vv
dXMuICBUaGlzIGFsbG93cwotLy8gICBhIHNpbXBsZXIgc3ltYm9sIHRhYmxlIHN0cnVjdHVyZS4K
LS8vCi0vLyAqIFB1c2hpbmcgYW5kIHBvcHBpbmcgb2Ygc2NvcGUsIHNvIHN5bWJvbCB0YWJsZSB3
aWxsIHJlYWxseSBiZSBhIHN0YWNrIAotLy8gICBvZiBzeW1ib2wgdGFibGVzLiAgU2VhcmNoZWQg
ZnJvbSB0aGUgdG9wLCB3aXRoIG5ldyBpbnNlcnRzIGdvaW5nIGludG8KLS8vICAgdGhlIHRvcC4K
LS8vCi0vLyAqIENvbnN0YW50czogIENvbXBpbGUgdGltZSBjb25zdGFudCBzeW1ib2xzIHdpbGwg
a2VlcCB0aGVpciB2YWx1ZXMKLS8vICAgaW4gdGhlIHN5bWJvbCB0YWJsZS4gIFRoZSBwYXJzZXIg
Y2FuIHN1YnN0aXR1dGUgY29uc3RhbnRzIGF0IHBhcnNlCi0vLyAgIHRpbWUsIGluY2x1ZGluZyBk
b2luZyBjb25zdGFudCBmb2xkaW5nIGFuZCBjb25zdGFudCBwcm9wYWdhdGlvbi4KLS8vCi0vLyAq
IE5vIHRlbXBvcmFyaWVzOiAgVGVtcG9yYXJpZXMgbWFkZSBmcm9tIG9wZXJhdGlvbnMgKCssIC0t
LCAueHksIGV0Yy4pCi0vLyAgIGFyZSB0cmFja2VkIGluIHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVz
ZW50YXRpb24sIG5vdCB0aGUgc3ltYm9sIHRhYmxlLgotLy8KLQotI2luY2x1ZGUgPGFzc2VydC5o
PgotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRlICJjb21waWxlci9J
bmZvU2luay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotCi0vLwotLy8g
U3ltYm9sIGJhc2UgY2xhc3MuICAoQ2FuIGJ1aWxkIGZ1bmN0aW9ucyBvciB2YXJpYWJsZXMgb3V0
IG9mIHRoZXNlLi4uKQotLy8KLWNsYXNzIFRTeW1ib2wgeyAgICAKLXB1YmxpYzoKLSAgICBQT09M
X0FMTE9DQVRPUl9ORVdfREVMRVRFKCk7Ci0gICAgVFN5bWJvbChjb25zdCBUU3RyaW5nKiBuKSA6
ICB1bmlxdWVJZCgwKSwgbmFtZShuKSB7IH0KLSAgICB2aXJ0dWFsIH5UU3ltYm9sKCkgeyAvKiBk
b24ndCBkZWxldGUgbmFtZSwgaXQncyBmcm9tIHRoZSBwb29sICovIH0KLQotICAgIGNvbnN0IFRT
dHJpbmcmIGdldE5hbWUoKSBjb25zdCB7IHJldHVybiAqbmFtZTsgfQotICAgIHZpcnR1YWwgY29u
c3QgVFN0cmluZyYgZ2V0TWFuZ2xlZE5hbWUoKSBjb25zdCB7IHJldHVybiBnZXROYW1lKCk7IH0K
LSAgICB2aXJ0dWFsIGJvb2wgaXNGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgdmlydHVhbCBib29sIGlzVmFyaWFibGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAg
IHZvaWQgc2V0VW5pcXVlSWQoaW50IGlkKSB7IHVuaXF1ZUlkID0gaWQ7IH0KLSAgICBpbnQgZ2V0
VW5pcXVlSWQoKSBjb25zdCB7IHJldHVybiB1bmlxdWVJZDsgfQotICAgIHZpcnR1YWwgdm9pZCBk
dW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0ID0gMDsKLSAgICB2b2lkIHJlbGF0ZVRvRXh0
ZW5zaW9uKGNvbnN0IFRTdHJpbmcmIGV4dCkgeyBleHRlbnNpb24gPSBleHQ7IH0KLSAgICBjb25z
dCBUU3RyaW5nJiBnZXRFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiBleHRlbnNpb247IH0KLQot
cHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVFN5bWJvbCk7Ci0KLSAgICBp
bnQgdW5pcXVlSWQ7ICAgICAgLy8gRm9yIHJlYWwgY29tcGFyaW5nIGR1cmluZyBjb2RlIGdlbmVy
YXRpb24KLSAgICBjb25zdCBUU3RyaW5nICpuYW1lOwotICAgIFRTdHJpbmcgZXh0ZW5zaW9uOwot
fTsKLQotLy8KLS8vIFZhcmlhYmxlIGNsYXNzLCBtZWFuaW5nIGEgc3ltYm9sIHRoYXQncyBub3Qg
YSBmdW5jdGlvbi4KLS8vIAotLy8gVGhlcmUgY291bGQgYmUgYSBzZXBhcmF0ZSBjbGFzcyBoZWly
YXJjaHkgZm9yIENvbnN0YW50IHZhcmlhYmxlczsKLS8vIE9ubHkgb25lIG9mIGludCwgYm9vbCwg
b3IgZmxvYXQsIChvciBub25lKSBpcyBjb3JyZWN0IGZvcgotLy8gYW55IHBhcnRpY3VsYXIgdXNl
LCBidXQgaXQncyBlYXN5IHRvIGRvIHRoaXMgd2F5LCBhbmQgZG9lc24ndAotLy8gc2VlbSB3b3J0
aCBoYXZpbmcgc2VwYXJhdGUgY2xhc3NlcywgYW5kICJnZXRDb25zdCIgY2FuJ3Qgc2ltcGx5IHJl
dHVybgotLy8gZGlmZmVyZW50IHZhbHVlcyBmb3IgZGlmZmVyZW50IHR5cGVzIHBvbHltb3JwaGlj
YWxseSwgc28gdGhpcyBpcyAKLS8vIGp1c3Qgc2ltcGxlIGFuZCBwcmFnbWF0aWMuCi0vLwotY2xh
c3MgVFZhcmlhYmxlIDogcHVibGljIFRTeW1ib2wgewotcHVibGljOgotICAgIFRWYXJpYWJsZShj
b25zdCBUU3RyaW5nICpuYW1lLCBjb25zdCBUVHlwZSYgdCwgYm9vbCB1VCA9IGZhbHNlICkgOiBU
U3ltYm9sKG5hbWUpLCB0eXBlKHQpLCB1c2VyVHlwZSh1VCksIHVuaW9uQXJyYXkoMCkgeyB9Ci0g
ICAgdmlydHVhbCB+VFZhcmlhYmxlKCkgeyB9Ci0gICAgdmlydHVhbCBib29sIGlzVmFyaWFibGUo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9ICAgIAotICAgIFRUeXBlJiBnZXRUeXBlKCkgeyByZXR1
cm4gdHlwZTsgfSAgICAKLSAgICBjb25zdCBUVHlwZSYgZ2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJu
IHR5cGU7IH0KLSAgICBib29sIGlzVXNlclR5cGUoKSBjb25zdCB7IHJldHVybiB1c2VyVHlwZTsg
fQotICAgIHZvaWQgc2V0UXVhbGlmaWVyKFRRdWFsaWZpZXIgcXVhbGlmaWVyKSB7IHR5cGUuc2V0
UXVhbGlmaWVyKHF1YWxpZmllcik7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRJbmZvU2lu
ayAmaW5mb1NpbmspIGNvbnN0OwotCi0gICAgQ29uc3RhbnRVbmlvbiogZ2V0Q29uc3RQb2ludGVy
KCkKLSAgICB7IAotICAgICAgICBpZiAoIXVuaW9uQXJyYXkpCi0gICAgICAgICAgICB1bmlvbkFy
cmF5ID0gbmV3IENvbnN0YW50VW5pb25bdHlwZS5nZXRPYmplY3RTaXplKCldOwotCi0gICAgICAg
IHJldHVybiB1bmlvbkFycmF5OwotICAgIH0KLQotICAgIENvbnN0YW50VW5pb24qIGdldENvbnN0
UG9pbnRlcigpIGNvbnN0IHsgcmV0dXJuIHVuaW9uQXJyYXk7IH0KLQotICAgIHZvaWQgc2hhcmVD
b25zdFBvaW50ZXIoIENvbnN0YW50VW5pb24gKmNvbnN0QXJyYXkpCi0gICAgewotICAgICAgICBp
ZiAodW5pb25BcnJheSA9PSBjb25zdEFycmF5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIGRlbGV0ZVtdIHVuaW9uQXJyYXk7Ci0gICAgICAgIHVuaW9uQXJyYXkgPSBjb25zdEFycmF5
OyAgCi0gICAgfQotCi1wcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUVmFy
aWFibGUpOwotCi0gICAgVFR5cGUgdHlwZTsKLSAgICBib29sIHVzZXJUeXBlOwotICAgIC8vIHdl
IGFyZSBhc3N1bWluZyB0aGF0IFBvb2wgQWxsb2NhdG9yIHdpbGwgZnJlZSB0aGUgbWVtb3J5IGFs
bG9jYXRlZCB0byB1bmlvbkFycmF5Ci0gICAgLy8gd2hlbiB0aGlzIG9iamVjdCBpcyBkZXN0cm95
ZWQKLSAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5OwotfTsKLQotLy8KLS8vIFRoZSBmdW5j
dGlvbiBzdWItY2xhc3Mgb2Ygc3ltYm9scyBhbmQgdGhlIHBhcnNlciB3aWxsIG5lZWQgdG8KLS8v
IHNoYXJlIHRoaXMgZGVmaW5pdGlvbiBvZiBhIGZ1bmN0aW9uIHBhcmFtZXRlci4KLS8vCi1zdHJ1
Y3QgVFBhcmFtZXRlciB7Ci0gICAgVFN0cmluZyAqbmFtZTsKLSAgICBUVHlwZSogdHlwZTsKLX07
Ci0KLS8vCi0vLyBUaGUgZnVuY3Rpb24gc3ViLWNsYXNzIG9mIGEgc3ltYm9sLiAgCi0vLwotY2xh
c3MgVEZ1bmN0aW9uIDogcHVibGljIFRTeW1ib2wgewotcHVibGljOgotICAgIFRGdW5jdGlvbihU
T3BlcmF0b3IgbykgOgotICAgICAgICBUU3ltYm9sKDApLAotICAgICAgICByZXR1cm5UeXBlKFRU
eXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCkpLAotICAgICAgICBvcChvKSwKLSAgICAgICAgZGVm
aW5lZChmYWxzZSkgeyB9Ci0gICAgVEZ1bmN0aW9uKGNvbnN0IFRTdHJpbmcgKm5hbWUsIFRUeXBl
JiByZXRUeXBlLCBUT3BlcmF0b3IgdE9wID0gRU9wTnVsbCkgOiAKLSAgICAgICAgVFN5bWJvbChu
YW1lKSwgCi0gICAgICAgIHJldHVyblR5cGUocmV0VHlwZSksCi0gICAgICAgIG1hbmdsZWROYW1l
KFRGdW5jdGlvbjo6bWFuZ2xlTmFtZSgqbmFtZSkpLAotICAgICAgICBvcCh0T3ApLAotICAgICAg
ICBkZWZpbmVkKGZhbHNlKSB7IH0KLSAgICB2aXJ0dWFsIH5URnVuY3Rpb24oKTsKLSAgICB2aXJ0
dWFsIGJvb2wgaXNGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0gICAgCi0KLSAgICBz
dGF0aWMgVFN0cmluZyBtYW5nbGVOYW1lKGNvbnN0IFRTdHJpbmcmIG5hbWUpIHsgcmV0dXJuIG5h
bWUgKyAnKCc7IH0KLSAgICBzdGF0aWMgVFN0cmluZyB1bm1hbmdsZU5hbWUoY29uc3QgVFN0cmlu
ZyYgbWFuZ2xlZE5hbWUpCi0gICAgewotICAgICAgICByZXR1cm4gVFN0cmluZyhtYW5nbGVkTmFt
ZS5jX3N0cigpLCBtYW5nbGVkTmFtZS5maW5kX2ZpcnN0X29mKCcoJykpOwotICAgIH0KLQotICAg
IHZvaWQgYWRkUGFyYW1ldGVyKFRQYXJhbWV0ZXImIHApIAotICAgIHsgCi0gICAgICAgIHBhcmFt
ZXRlcnMucHVzaF9iYWNrKHApOwotICAgICAgICBtYW5nbGVkTmFtZSA9IG1hbmdsZWROYW1lICsg
cC50eXBlLT5nZXRNYW5nbGVkTmFtZSgpOwotICAgIH0KLQotICAgIGNvbnN0IFRTdHJpbmcmIGdl
dE1hbmdsZWROYW1lKCkgY29uc3QgeyByZXR1cm4gbWFuZ2xlZE5hbWU7IH0KLSAgICBjb25zdCBU
VHlwZSYgZ2V0UmV0dXJuVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHJldHVyblR5cGU7IH0KLQotICAg
IHZvaWQgcmVsYXRlVG9PcGVyYXRvcihUT3BlcmF0b3IgbykgeyBvcCA9IG87IH0KLSAgICBUT3Bl
cmF0b3IgZ2V0QnVpbHRJbk9wKCkgY29uc3QgeyByZXR1cm4gb3A7IH0KLQotICAgIHZvaWQgc2V0
RGVmaW5lZCgpIHsgZGVmaW5lZCA9IHRydWU7IH0KLSAgICBib29sIGlzRGVmaW5lZCgpIHsgcmV0
dXJuIGRlZmluZWQ7IH0KLQotICAgIHNpemVfdCBnZXRQYXJhbUNvdW50KCkgY29uc3QgeyByZXR1
cm4gcGFyYW1ldGVycy5zaXplKCk7IH0gIAotICAgIGNvbnN0IFRQYXJhbWV0ZXImIGdldFBhcmFt
KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBwYXJhbWV0ZXJzW2ldOyB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBE
SVNBTExPV19DT1BZX0FORF9BU1NJR04oVEZ1bmN0aW9uKTsKLQotICAgIHR5cGVkZWYgVFZlY3Rv
cjxUUGFyYW1ldGVyPiBUUGFyYW1MaXN0OwotICAgIFRQYXJhbUxpc3QgcGFyYW1ldGVyczsKLSAg
ICBUVHlwZSByZXR1cm5UeXBlOwotICAgIFRTdHJpbmcgbWFuZ2xlZE5hbWU7Ci0gICAgVE9wZXJh
dG9yIG9wOwotICAgIGJvb2wgZGVmaW5lZDsKLX07Ci0KLQotY2xhc3MgVFN5bWJvbFRhYmxlTGV2
ZWwgewotcHVibGljOgotICAgIHR5cGVkZWYgVE1hcDxUU3RyaW5nLCBUU3ltYm9sKj4gdExldmVs
OwotICAgIHR5cGVkZWYgdExldmVsOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKLSAg
ICB0eXBlZGVmIGNvbnN0IHRMZXZlbDo6dmFsdWVfdHlwZSB0TGV2ZWxQYWlyOwotICAgIHR5cGVk
ZWYgc3RkOjpwYWlyPHRMZXZlbDo6aXRlcmF0b3IsIGJvb2w+IHRJbnNlcnRSZXN1bHQ7Ci0KLSAg
ICBUU3ltYm9sVGFibGVMZXZlbCgpIHsgfQotICAgIH5UU3ltYm9sVGFibGVMZXZlbCgpOwotCi0g
ICAgYm9vbCBpbnNlcnQoY29uc3QgVFN0cmluZyAmbmFtZSwgVFN5bWJvbCAmc3ltYm9sKQotICAg
IHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gcmV0dXJuaW5nIHRydWUgbWVhbnMgc3ltYm9sIHdh
cyBhZGRlZCB0byB0aGUgdGFibGUKLSAgICAgICAgLy8KLSAgICAgICAgdEluc2VydFJlc3VsdCBy
ZXN1bHQgPSBsZXZlbC5pbnNlcnQodExldmVsUGFpcihuYW1lLCAmc3ltYm9sKSk7Ci0KLSAgICAg
ICAgcmV0dXJuIHJlc3VsdC5zZWNvbmQ7Ci0gICAgfQotCi0gICAgYm9vbCBpbnNlcnQoVFN5bWJv
bCAmc3ltYm9sKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGluc2VydChzeW1ib2wuZ2V0TWFuZ2xl
ZE5hbWUoKSwgc3ltYm9sKTsKLSAgICB9Ci0KLSAgICBUU3ltYm9sKiBmaW5kKGNvbnN0IFRTdHJp
bmcmIG5hbWUpIGNvbnN0Ci0gICAgewotICAgICAgICB0TGV2ZWw6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbGV2ZWwuZmluZChuYW1lKTsKLSAgICAgICAgaWYgKGl0ID09IGxldmVsLmVuZCgpKQotICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiAoKml0
KS5zZWNvbmQ7Ci0gICAgfQotCi0gICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIGxldmVsLmJlZ2luKCk7Ci0gICAgfQotCi0gICAgY29uc3RfaXRl
cmF0b3IgZW5kKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBsZXZlbC5lbmQoKTsKLSAg
ICB9Ci0KLSAgICB2b2lkIHJlbGF0ZVRvT3BlcmF0b3IoY29uc3QgY2hhciogbmFtZSwgVE9wZXJh
dG9yIG9wKTsKLSAgICB2b2lkIHJlbGF0ZVRvRXh0ZW5zaW9uKGNvbnN0IGNoYXIqIG5hbWUsIGNv
bnN0IFRTdHJpbmcmIGV4dCk7Ci0gICAgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNv
bnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgdExldmVsIGxldmVsOwotfTsKLQotY2xhc3MgVFN5bWJv
bFRhYmxlIHsKLXB1YmxpYzoKLSAgICBUU3ltYm9sVGFibGUoKSA6IHVuaXF1ZUlkKDApCi0gICAg
ewotICAgICAgICAvLwotICAgICAgICAvLyBUaGUgc3ltYm9sIHRhYmxlIGNhbm5vdCBiZSB1c2Vk
IHVudGlsIHB1c2goKSBpcyBjYWxsZWQsIGJ1dAotICAgICAgICAvLyB0aGUgbGFjayBvZiBhbiBp
bml0aWFsIGNhbGwgdG8gcHVzaCgpIGNhbiBiZSB1c2VkIHRvIGRldGVjdAotICAgICAgICAvLyB0
aGF0IHRoZSBzeW1ib2wgdGFibGUgaGFzIG5vdCBiZWVuIHByZWxvYWRlZCB3aXRoIGJ1aWx0LWlu
cy4KLSAgICAgICAgLy8KLSAgICB9Ci0gICAgflRTeW1ib2xUYWJsZSgpOwotCi0gICAgLy8KLSAg
ICAvLyBXaGVuIHRoZSBzeW1ib2wgdGFibGUgaXMgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgYnVpbHQt
aW5zLCB0aGVyZSBzaG91bGQKLSAgICAvLyAncHVzaCcgY2FsbHMsIHNvIHRoYXQgYnVpbHQtaW5z
IGFyZSBhdCBsZXZlbCAwIGFuZCB0aGUgc2hhZGVyCi0gICAgLy8gZ2xvYmFscyBhcmUgYXQgbGV2
ZWwgMS4KLSAgICAvLwotICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIHRhYmxlLnNpemUoKSA9
PSAwOyB9Ci0gICAgYm9vbCBhdEJ1aWx0SW5MZXZlbCgpIHsgcmV0dXJuIHRhYmxlLnNpemUoKSA9
PSAxOyB9Ci0gICAgYm9vbCBhdEdsb2JhbExldmVsKCkgeyByZXR1cm4gdGFibGUuc2l6ZSgpIDw9
IDI7IH0KLSAgICB2b2lkIHB1c2goKQotICAgIHsKLSAgICAgICAgdGFibGUucHVzaF9iYWNrKG5l
dyBUU3ltYm9sVGFibGVMZXZlbCk7Ci0gICAgICAgIHByZWNpc2lvblN0YWNrLnB1c2hfYmFjayhu
ZXcgUHJlY2lzaW9uU3RhY2tMZXZlbCk7Ci0gICAgfQotCi0gICAgdm9pZCBwb3AoKQotICAgIHsK
LSAgICAgICAgZGVsZXRlIHRhYmxlLmJhY2soKTsKLSAgICAgICAgdGFibGUucG9wX2JhY2soKTsK
LQotICAgICAgICBkZWxldGUgcHJlY2lzaW9uU3RhY2suYmFjaygpOwotICAgICAgICBwcmVjaXNp
b25TdGFjay5wb3BfYmFjaygpOwotICAgIH0KLQotICAgIGJvb2wgaW5zZXJ0KFRTeW1ib2wmIHN5
bWJvbCkKLSAgICB7Ci0gICAgICAgIHN5bWJvbC5zZXRVbmlxdWVJZCgrK3VuaXF1ZUlkKTsKLSAg
ICAgICAgcmV0dXJuIHRhYmxlW2N1cnJlbnRMZXZlbCgpXS0+aW5zZXJ0KHN5bWJvbCk7Ci0gICAg
fQotCi0gICAgYm9vbCBpbnNlcnRDb25zdEludChjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUp
Ci0gICAgewotICAgICAgICBUVmFyaWFibGUgKmNvbnN0YW50ID0gbmV3IFRWYXJpYWJsZShOZXdQ
b29sVFN0cmluZyhuYW1lKSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0LCAx
KSk7Ci0gICAgICAgIGNvbnN0YW50LT5nZXRDb25zdFBvaW50ZXIoKS0+c2V0SUNvbnN0KHZhbHVl
KTsKLSAgICAgICAgcmV0dXJuIGluc2VydCgqY29uc3RhbnQpOwotICAgIH0KLQotICAgIGJvb2wg
aW5zZXJ0QnVpbHRJbihUVHlwZSAqcnZhbHVlLCBjb25zdCBjaGFyICpuYW1lLCBUVHlwZSAqcHR5
cGUxLCBUVHlwZSAqcHR5cGUyID0gMCwgVFR5cGUgKnB0eXBlMyA9IDApCi0gICAgewotICAgICAg
ICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbihOZXdQb29sVFN0cmluZyhuYW1l
KSwgKnJ2YWx1ZSk7Ci0KLSAgICAgICAgVFBhcmFtZXRlciBwYXJhbTEgPSB7TlVMTCwgcHR5cGUx
fTsKLSAgICAgICAgZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJhbTEpOwotCi0gICAgICAgIGlm
KHB0eXBlMikKLSAgICAgICAgewotICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJhbTIgPSB7TlVM
TCwgcHR5cGUyfTsKLSAgICAgICAgICAgIGZ1bmN0aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW0yKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmKHB0eXBlMykKLSAgICAgICAgewotICAgICAgICAgICAg
VFBhcmFtZXRlciBwYXJhbTMgPSB7TlVMTCwgcHR5cGUzfTsKLSAgICAgICAgICAgIGZ1bmN0aW9u
LT5hZGRQYXJhbWV0ZXIocGFyYW0zKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBpbnNl
cnQoKmZ1bmN0aW9uKTsKLSAgICB9Ci0KLSAgICBUU3ltYm9sKiBmaW5kKGNvbnN0IFRTdHJpbmcm
IG5hbWUsIGJvb2wqIGJ1aWx0SW4gPSAwLCBib29sICpzYW1lU2NvcGUgPSAwKSAKLSAgICB7Ci0g
ICAgICAgIGludCBsZXZlbCA9IGN1cnJlbnRMZXZlbCgpOwotICAgICAgICBUU3ltYm9sKiBzeW1i
b2w7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIHN5bWJvbCA9IHRhYmxlW2xldmVsXS0+Zmlu
ZChuYW1lKTsKLSAgICAgICAgICAgIC0tbGV2ZWw7Ci0gICAgICAgIH0gd2hpbGUgKHN5bWJvbCA9
PSAwICYmIGxldmVsID49IDApOwotICAgICAgICBsZXZlbCsrOwotICAgICAgICBpZiAoYnVpbHRJ
bikKLSAgICAgICAgICAgICpidWlsdEluID0gbGV2ZWwgPT0gMDsKLSAgICAgICAgaWYgKHNhbWVT
Y29wZSkKLSAgICAgICAgICAgICpzYW1lU2NvcGUgPSBsZXZlbCA9PSBjdXJyZW50TGV2ZWwoKTsK
LSAgICAgICAgcmV0dXJuIHN5bWJvbDsKLSAgICB9Ci0KLSAgICBUU3ltYm9sKiBmaW5kQnVpbHRJ
bihjb25zdCBUU3RyaW5nICZuYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRhYmxlWzBdLT5m
aW5kKG5hbWUpOwotICAgIH0KLQotICAgIFRTeW1ib2xUYWJsZUxldmVsKiBnZXRPdXRlckxldmVs
KCkgewotICAgICAgICBhc3NlcnQodGFibGUuc2l6ZSgpID49IDIpOwotICAgICAgICByZXR1cm4g
dGFibGVbY3VycmVudExldmVsKCkgLSAxXTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlbGF0ZVRvT3Bl
cmF0b3IoY29uc3QgY2hhciogbmFtZSwgVE9wZXJhdG9yIG9wKSB7Ci0gICAgICAgIHRhYmxlWzBd
LT5yZWxhdGVUb09wZXJhdG9yKG5hbWUsIG9wKTsKLSAgICB9Ci0gICAgdm9pZCByZWxhdGVUb0V4
dGVuc2lvbihjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBUU3RyaW5nJiBleHQpIHsKLSAgICAgICAg
dGFibGVbMF0tPnJlbGF0ZVRvRXh0ZW5zaW9uKG5hbWUsIGV4dCk7Ci0gICAgfQotICAgIHZvaWQg
ZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdDsKLQotICAgIGJvb2wgc2V0RGVmYXVsdFBy
ZWNpc2lvbihjb25zdCBUUHVibGljVHlwZSYgdHlwZSwgVFByZWNpc2lvbiBwcmVjKSB7Ci0gICAg
ICAgIGlmICghc3VwcG9ydHNQcmVjaXNpb24odHlwZS50eXBlKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgaWYgKHR5cGUuc2l6ZSAhPSAxIHx8IHR5cGUubWF0cml4IHx8IHR5
cGUuYXJyYXkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE5vdCBhbGxvd2VkIHRvIHNl
dCBmb3IgYWdncmVnYXRlIHR5cGVzCi0gICAgICAgIGludCBpbmRleE9mTGFzdEVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxpbnQ+KHByZWNpc2lvblN0YWNrLnNpemUoKSkgLSAxOwotICAgICAgICAoKnBy
ZWNpc2lvblN0YWNrW2luZGV4T2ZMYXN0RWxlbWVudF0pW3R5cGUudHlwZV0gPSBwcmVjOyAvLyBV
c2VzIG1hcCBvcGVyYXRvciBbXSwgb3ZlcndyaXRlcyB0aGUgY3VycmVudCB2YWx1ZQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBTZWFyY2hlcyBkb3duIHRoZSBwcmVjaXNp
b25TdGFjayBmb3IgYSBwcmVjaXNpb24gcXVhbGlmaWVyIGZvciB0aGUgc3BlY2lmaWVkIFRCYXNp
Y1R5cGUKLSAgICBUUHJlY2lzaW9uIGdldERlZmF1bHRQcmVjaXNpb24oVEJhc2ljVHlwZSB0eXBl
KSB7Ci0gICAgICAgIGlmICghc3VwcG9ydHNQcmVjaXNpb24odHlwZSkpCi0gICAgICAgICAgICBy
ZXR1cm4gRWJwVW5kZWZpbmVkOwotICAgICAgICBpbnQgbGV2ZWwgPSBzdGF0aWNfY2FzdDxpbnQ+
KHByZWNpc2lvblN0YWNrLnNpemUoKSkgLSAxOwotICAgICAgICBhc3NlcnQobGV2ZWwgPj0gMCk7
IC8vIEp1c3QgdG8gYmUgc2FmZS4gU2hvdWxkIG5vdCBoYXBwZW4uCi0gICAgICAgIFByZWNpc2lv
blN0YWNrTGV2ZWw6Oml0ZXJhdG9yIGl0OwotICAgICAgICBUUHJlY2lzaW9uIHByZWMgPSBFYnBV
bmRlZmluZWQ7IC8vIElmIHdlIGRvbnQgZmluZCBhbnl0aGluZyB3ZSByZXR1cm4gdGhpcy4gU2hv
dWxkIHdlIGVycm9yIGNoZWNrIHRoaXM/Ci0gICAgICAgIHdoaWxlIChsZXZlbCA+PSAwKSB7Ci0g
ICAgICAgICAgICBpdCA9IHByZWNpc2lvblN0YWNrW2xldmVsXS0+ZmluZCh0eXBlKTsKLSAgICAg
ICAgICAgIGlmIChpdCAhPSBwcmVjaXNpb25TdGFja1tsZXZlbF0tPmVuZCgpKSB7Ci0gICAgICAg
ICAgICAgICAgcHJlYyA9ICgqaXQpLnNlY29uZDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGxldmVsLS07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIHByZWM7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGludCBjdXJyZW50TGV2ZWwoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHRhYmxlLnNpemUoKSkgLSAxOyB9Ci0KLSAgICBi
b29sIHN1cHBvcnRzUHJlY2lzaW9uKFRCYXNpY1R5cGUgdHlwZSkgewotICAgICAgLy8gT25seSBz
dXBwb3J0cyBwcmVjaXNpb24gZm9yIGludCwgZmxvYXQsIGFuZCBzYW1wbGVyIHR5cGVzLgotICAg
ICAgcmV0dXJuIHR5cGUgPT0gRWJ0RmxvYXQgfHwgdHlwZSA9PSBFYnRJbnQgfHwgSXNTYW1wbGVy
KHR5cGUpOwotICAgIH0KLQotICAgIGludCB1bmlxdWVJZDsgICAgIC8vIGZvciB1bmlxdWUgaWRl
bnRpZmljYXRpb24gaW4gY29kZSBnZW5lcmF0aW9uCi0gICAgc3RkOjp2ZWN0b3I8VFN5bWJvbFRh
YmxlTGV2ZWwqPiB0YWJsZTsKLSAgICB0eXBlZGVmIFRNYXA8VEJhc2ljVHlwZSwgVFByZWNpc2lv
bj4gUHJlY2lzaW9uU3RhY2tMZXZlbDsKLSAgICBzdGQ6OnZlY3RvcjxQcmVjaXNpb25TdGFja0xl
dmVsKj4gcHJlY2lzaW9uU3RhY2s7Ci19OwotCi0jZW5kaWYgLy8gX1NZTUJPTF9UQUJMRV9JTkNM
VURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9U
cmFuc2xhdG9yRVNTTC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
VHJhbnNsYXRvckVTU0wuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTAwZjhh
OGVkZTlkNmEwNzc0YTQxZmY2YjZhMDFjNGU3MWQzNjk2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9UcmFuc2xhdG9yRVNTTC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuaCIK
LQotI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEVTU0wuaCIKLQotVHJhbnNsYXRvckVTU0w6OlRy
YW5zbGF0b3JFU1NMKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYykKLSAgICA6
IFRDb21waWxlcih0eXBlLCBzcGVjKSB7Ci19Ci0KLXZvaWQgVHJhbnNsYXRvckVTU0w6OnRyYW5z
bGF0ZShUSW50ZXJtTm9kZSogcm9vdCkgewotICAgIFRJbmZvU2lua0Jhc2UmIHNpbmsgPSBnZXRJ
bmZvU2luaygpLm9iajsKLQotICAgIC8vIFdyaXRlIGJ1aWx0LWluIGV4dGVuc2lvbiBiZWhhdmlv
cnMuCi0gICAgd3JpdGVFeHRlbnNpb25CZWhhdmlvcigpOwotCi0gICAgLy8gV3JpdGUgZW11bGF0
ZWQgYnVpbHQtaW4gZnVuY3Rpb25zIGlmIG5lZWRlZC4KLSAgICBnZXRCdWlsdEluRnVuY3Rpb25F
bXVsYXRvcigpLk91dHB1dEVtdWxhdGVkRnVuY3Rpb25EZWZpbml0aW9uKAotICAgICAgICBzaW5r
LCBnZXRTaGFkZXJUeXBlKCkgPT0gU0hfRlJBR01FTlRfU0hBREVSKTsKLQotICAgIC8vIFdyaXRl
IGFycmF5IGJvdW5kcyBjbGFtcGluZyBlbXVsYXRpb24gaWYgbmVlZGVkLgotICAgIGdldEFycmF5
Qm91bmRzQ2xhbXBlcigpLk91dHB1dENsYW1waW5nRnVuY3Rpb25EZWZpbml0aW9uKHNpbmspOwot
Ci0gICAgLy8gV3JpdGUgdHJhbnNsYXRlZCBzaGFkZXIuCi0gICAgVE91dHB1dEVTU0wgb3V0cHV0
RVNTTChzaW5rLCBnZXRBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSgpLCBnZXRIYXNoRnVuY3Rp
b24oKSwgZ2V0TmFtZU1hcCgpLCBnZXRTeW1ib2xUYWJsZSgpKTsKLSAgICByb290LT50cmF2ZXJz
ZSgmb3V0cHV0RVNTTCk7Ci19Ci0KLXZvaWQgVHJhbnNsYXRvckVTU0w6OndyaXRlRXh0ZW5zaW9u
QmVoYXZpb3IoKSB7Ci0gICAgVEluZm9TaW5rQmFzZSYgc2luayA9IGdldEluZm9TaW5rKCkub2Jq
OwotICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0ZW5zaW9uQmVoYXZpb3IgPSBnZXRF
eHRlbnNpb25CZWhhdmlvcigpOwotICAgIGZvciAoVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9p
dGVyYXRvciBpdGVyID0gZXh0ZW5zaW9uQmVoYXZpb3IuYmVnaW4oKTsKLSAgICAgICAgIGl0ZXIg
IT0gZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCk7ICsraXRlcikgewotICAgICAgICBpZiAoaXRlci0+
c2Vjb25kICE9IEVCaFVuZGVmaW5lZCkgewotICAgICAgICAgICAgc2luayA8PCAiI2V4dGVuc2lv
biAiIDw8IGl0ZXItPmZpcnN0IDw8ICIgOiAiCi0gICAgICAgICAgICAgICAgIDw8IGdldEJlaGF2
aW9yU3RyaW5nKGl0ZXItPnNlY29uZCkgPDwgIlxuIjsKLSAgICAgICAgfQotICAgIH0KLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9y
RVNTTC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JF
U1NMLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExMTk2YmQwMDEzYWNhYzQ0ZDc4
ZDU4NThmZTU4MTdhNmUyN2I1YmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0
b3JFU1NMLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwotCi0jaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JFU1NMX0hfCi0jZGVmaW5lIENPTVBJTEVS
X1RSQU5TTEFUT1JFU1NMX0hfCi0KLSNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgotCi1j
bGFzcyBUcmFuc2xhdG9yRVNTTCA6IHB1YmxpYyBUQ29tcGlsZXIgewotcHVibGljOgotICAgIFRy
YW5zbGF0b3JFU1NMKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYyk7Ci0KLXBy
b3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KTsK
LQotcHJpdmF0ZToKLSAgICB2b2lkIHdyaXRlRXh0ZW5zaW9uQmVoYXZpb3IoKTsKLX07Ci0KLSNl
bmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUkVTU0xfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2E0MzQxZGNkZWE3NzgzNDZmYTM2MjdlMjNhY2E0MTk4
ZjE1Njg5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVk
ZSAiY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuaCIKLQotI2luY2x1ZGUgImNvbXBpbGVyL091dHB1
dEdMU0wuaCIKLSNpbmNsdWRlICJjb21waWxlci9WZXJzaW9uR0xTTC5oIgotCi1zdGF0aWMgdm9p
ZCB3cml0ZVZlcnNpb24oU2hTaGFkZXJUeXBlIHR5cGUsIFRJbnRlcm1Ob2RlKiByb290LAotICAg
ICAgICAgICAgICAgICAgICAgICAgIFRJbmZvU2lua0Jhc2UmIHNpbmspIHsKLSAgICBUVmVyc2lv
bkdMU0wgdmVyc2lvbkdMU0wodHlwZSk7Ci0gICAgcm9vdC0+dHJhdmVyc2UoJnZlcnNpb25HTFNM
KTsKLSAgICBpbnQgdmVyc2lvbiA9IHZlcnNpb25HTFNMLmdldFZlcnNpb24oKTsKLSAgICAvLyBX
ZSBuZWVkIHRvIHdyaXRlIHZlcnNpb24gZGlyZWN0aXZlIG9ubHkgaWYgaXQgaXMgZ3JlYXRlciB0
aGFuIDExMC4KLSAgICAvLyBJZiB0aGVyZSBpcyBubyB2ZXJzaW9uIGRpcmVjdGl2ZSBpbiB0aGUg
c2hhZGVyLCAxMTAgaXMgaW1wbGllZC4KLSAgICBpZiAodmVyc2lvbiA+IDExMCkgewotICAgICAg
ICBzaW5rIDw8ICIjdmVyc2lvbiAiIDw8IHZlcnNpb24gPDwgIlxuIjsKLSAgICB9Ci19Ci0KLVRy
YW5zbGF0b3JHTFNMOjpUcmFuc2xhdG9yR0xTTChTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJT
cGVjIHNwZWMpCi0gICAgOiBUQ29tcGlsZXIodHlwZSwgc3BlYykgewotfQotCi12b2lkIFRyYW5z
bGF0b3JHTFNMOjp0cmFuc2xhdGUoVEludGVybU5vZGUqIHJvb3QpIHsKLSAgICBUSW5mb1NpbmtC
YXNlJiBzaW5rID0gZ2V0SW5mb1NpbmsoKS5vYmo7Ci0KLSAgICAvLyBXcml0ZSBHTFNMIHZlcnNp
b24uCi0gICAgd3JpdGVWZXJzaW9uKGdldFNoYWRlclR5cGUoKSwgcm9vdCwgc2luayk7Ci0KLSAg
ICAvLyBXcml0ZSBlbXVsYXRlZCBidWlsdC1pbiBmdW5jdGlvbnMgaWYgbmVlZGVkLgotICAgIGdl
dEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yKCkuT3V0cHV0RW11bGF0ZWRGdW5jdGlvbkRlZmluaXRp
b24oCi0gICAgICAgIHNpbmssIGZhbHNlKTsKLQotICAgIC8vIFdyaXRlIGFycmF5IGJvdW5kcyBj
bGFtcGluZyBlbXVsYXRpb24gaWYgbmVlZGVkLgotICAgIGdldEFycmF5Qm91bmRzQ2xhbXBlcigp
Lk91dHB1dENsYW1waW5nRnVuY3Rpb25EZWZpbml0aW9uKHNpbmspOwotCi0gICAgLy8gV3JpdGUg
dHJhbnNsYXRlZCBzaGFkZXIuCi0gICAgVE91dHB1dEdMU0wgb3V0cHV0R0xTTChzaW5rLCBnZXRB
cnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSgpLCBnZXRIYXNoRnVuY3Rpb24oKSwgZ2V0TmFtZU1h
cCgpLCBnZXRTeW1ib2xUYWJsZSgpKTsKLSAgICByb290LT50cmF2ZXJzZSgmb3V0cHV0R0xTTCk7
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJh
bnNsYXRvckdMU0wuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFu
c2xhdG9yR0xTTC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmNlMDZkMTkyZjBm
YzYxZGFiZDUzNmQyMDQ5ZmZiOWVkZWYzYTYzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9U
cmFuc2xhdG9yR0xTTC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SR0xTTF9IXwotI2RlZmluZSBD
T01QSUxFUl9UUkFOU0xBVE9SR0xTTF9IXwotCi0jaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5kbGUu
aCIKLQotY2xhc3MgVHJhbnNsYXRvckdMU0wgOiBwdWJsaWMgVENvbXBpbGVyIHsKLXB1YmxpYzoK
LSAgICBUcmFuc2xhdG9yR0xTTChTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMp
OwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShUSW50ZXJtTm9kZSog
cm9vdCk7Ci19OwotCi0jZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JHTFNMX0hfCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhM
U0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JI
TFNMLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc0MDhhMDdjNDk2Zjc2MTRl
MTc2YmU5YjViNjcxNWFhYzU4ZTU0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNs
YXRvckhMU0wuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLy8KLS8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmgiCi0KLSNpbmNsdWRl
ICJjb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCi0jaW5jbHVkZSAiY29tcGlsZXIv
T3V0cHV0SExTTC5oIgotCi1UcmFuc2xhdG9ySExTTDo6VHJhbnNsYXRvckhMU0woU2hTaGFkZXJU
eXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBTaFNoYWRlck91dHB1dCBvdXRwdXQpCi0gICAg
OiBUQ29tcGlsZXIodHlwZSwgc3BlYyksIG1PdXRwdXRUeXBlKG91dHB1dCkKLXsKLX0KLQotdm9p
ZCBUcmFuc2xhdG9ySExTTDo6dHJhbnNsYXRlKFRJbnRlcm1Ob2RlICpyb290KQotewotICAgIFRQ
YXJzZUNvbnRleHQmIHBhcnNlQ29udGV4dCA9ICpHZXRHbG9iYWxQYXJzZUNvbnRleHQoKTsKLSAg
ICBzaDo6T3V0cHV0SExTTCBvdXRwdXRITFNMKHBhcnNlQ29udGV4dCwgZ2V0UmVzb3VyY2VzKCks
IG1PdXRwdXRUeXBlKTsKLQotICAgIG91dHB1dEhMU0wub3V0cHV0KCk7Ci0gICAgbUFjdGl2ZVVu
aWZvcm1zID0gb3V0cHV0SExTTC5nZXRVbmlmb3JtcygpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggOTU1MGUxNWU4ZWY3NTIzOTJjMWIwMWJkNmIxZmRiYzQ0NjA5
ZDNiOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuaAorKysgL2Rl
di9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09N
UElMRVJfVFJBTlNMQVRPUkhMU0xfSF8KLSNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUkhMU0xf
SF8KLQotI2luY2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIv
VW5pZm9ybS5oIgotCi1jbGFzcyBUcmFuc2xhdG9ySExTTCA6IHB1YmxpYyBUQ29tcGlsZXIgewot
cHVibGljOgotICAgIFRyYW5zbGF0b3JITFNMKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNw
ZWMgc3BlYywgU2hTaGFkZXJPdXRwdXQgb3V0cHV0KTsKLQotICAgIHZpcnR1YWwgVHJhbnNsYXRv
ckhMU0wgKmdldEFzVHJhbnNsYXRvckhMU0woKSB7IHJldHVybiB0aGlzOyB9Ci0gICAgY29uc3Qg
c2g6OkFjdGl2ZVVuaWZvcm1zICZnZXRVbmlmb3JtcygpIHsgcmV0dXJuIG1BY3RpdmVVbmlmb3Jt
czsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShUSW50ZXJtTm9k
ZSogcm9vdCk7Ci0KLSAgICBzaDo6QWN0aXZlVW5pZm9ybXMgbUFjdGl2ZVVuaWZvcm1zOwotICAg
IFNoU2hhZGVyT3V0cHV0IG1PdXRwdXRUeXBlOwotfTsKLQotI2VuZGlmICAvLyBDT01QSUxFUl9U
UkFOU0xBVE9SSExTTF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1R5cGVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
VHlwZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzU1NjBkZGM2ZWZhNzQwYmU2
MWFhMjM0MWY2MDE4M2NkY2FmMDc2OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHlwZXMu
aAorKysgL2Rldi9udWxsCkBAIC0xLDMwNyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0j
aWZuZGVmIF9UWVBFU19JTkNMVURFRAotI2RlZmluZSBfVFlQRVNfSU5DTFVERUQKLQotI2luY2x1
ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0KLSNpbmNsdWRlICJjb21waWxlci9CYXNlVHlwZXMu
aCIKLSNpbmNsdWRlICJjb21waWxlci9Db21tb24uaCIKLSNpbmNsdWRlICJjb21waWxlci9kZWJ1
Zy5oIgotCi1zdHJ1Y3QgVFB1YmxpY1R5cGU7Ci1jbGFzcyBUVHlwZTsKLQotY2xhc3MgVEZpZWxk
Ci17Ci1wdWJsaWM6Ci0gICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSgpOwotICAgIFRGaWVs
ZChUVHlwZSogdHlwZSwgVFN0cmluZyogbmFtZSkgOiBtVHlwZSh0eXBlKSwgbU5hbWUobmFtZSkg
e30KLQotICAgIC8vIFRPRE8oYWxva3ApOiBXZSBzaG91bGQgb25seSByZXR1cm4gY29uc3QgdHlw
ZS4KLSAgICAvLyBGaXggaXQgYnkgdHdlYWtpbmcgZ3JhbW1hci4KLSAgICBUVHlwZSogdHlwZSgp
IHsgcmV0dXJuIG1UeXBlOyB9Ci0gICAgY29uc3QgVFR5cGUqIHR5cGUoKSBjb25zdCB7IHJldHVy
biBtVHlwZTsgfQotCi0gICAgY29uc3QgVFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuICpt
TmFtZTsgfQotCi1wcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihURmllbGQp
OwotICAgIFRUeXBlKiBtVHlwZTsKLSAgICBUU3RyaW5nKiBtTmFtZTsKLX07Ci0KLXR5cGVkZWYg
VFZlY3RvcjxURmllbGQqPiBURmllbGRMaXN0OwotaW5saW5lIFRGaWVsZExpc3QqIE5ld1Bvb2xU
RmllbGRMaXN0KCkKLXsKLSAgICB2b2lkKiBtZW1vcnkgPSBHZXRHbG9iYWxQb29sQWxsb2NhdG9y
KCktPmFsbG9jYXRlKHNpemVvZihURmllbGRMaXN0KSk7Ci0gICAgcmV0dXJuIG5ldyhtZW1vcnkp
IFRGaWVsZExpc3Q7Ci19Ci0KLWNsYXNzIFRTdHJ1Y3R1cmUKLXsKLXB1YmxpYzoKLSAgICBQT09M
X0FMTE9DQVRPUl9ORVdfREVMRVRFKCk7Ci0gICAgVFN0cnVjdHVyZShUU3RyaW5nKiBuYW1lLCBU
RmllbGRMaXN0KiBmaWVsZHMpCi0gICAgICAgIDogbU5hbWUobmFtZSksCi0gICAgICAgICAgbUZp
ZWxkcyhmaWVsZHMpLAotICAgICAgICAgIG1PYmplY3RTaXplKDApLAotICAgICAgICAgIG1EZWVw
ZXN0TmVzdGluZygwKSB7Ci0gICAgfQotCi0gICAgY29uc3QgVFN0cmluZyYgbmFtZSgpIGNvbnN0
IHsgcmV0dXJuICptTmFtZTsgfQotICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcygpIGNvbnN0
IHsgcmV0dXJuICptRmllbGRzOyB9Ci0KLSAgICBjb25zdCBUU3RyaW5nJiBtYW5nbGVkTmFtZSgp
IGNvbnN0IHsKLSAgICAgICAgaWYgKG1NYW5nbGVkTmFtZS5lbXB0eSgpKQotICAgICAgICAgICAg
bU1hbmdsZWROYW1lID0gYnVpbGRNYW5nbGVkTmFtZSgpOwotICAgICAgICByZXR1cm4gbU1hbmds
ZWROYW1lOwotICAgIH0KLSAgICBzaXplX3Qgb2JqZWN0U2l6ZSgpIGNvbnN0IHsKLSAgICAgICAg
aWYgKG1PYmplY3RTaXplID09IDApCi0gICAgICAgICAgICBtT2JqZWN0U2l6ZSA9IGNhbGN1bGF0
ZU9iamVjdFNpemUoKTsKLSAgICAgICAgcmV0dXJuIG1PYmplY3RTaXplOwotICAgIH07Ci0gICAg
aW50IGRlZXBlc3ROZXN0aW5nKCkgY29uc3QgewotICAgICAgICBpZiAobURlZXBlc3ROZXN0aW5n
ID09IDApCi0gICAgICAgICAgICBtRGVlcGVzdE5lc3RpbmcgPSBjYWxjdWxhdGVEZWVwZXN0TmVz
dGluZygpOwotICAgICAgICByZXR1cm4gbURlZXBlc3ROZXN0aW5nOwotICAgIH0KLSAgICBib29s
IGNvbnRhaW5zQXJyYXlzKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKFRTdHJ1Y3R1cmUpOwotICAgIFRTdHJpbmcgYnVpbGRNYW5nbGVkTmFtZSgpIGNv
bnN0OwotICAgIHNpemVfdCBjYWxjdWxhdGVPYmplY3RTaXplKCkgY29uc3Q7Ci0gICAgaW50IGNh
bGN1bGF0ZURlZXBlc3ROZXN0aW5nKCkgY29uc3Q7Ci0KLSAgICBUU3RyaW5nKiBtTmFtZTsKLSAg
ICBURmllbGRMaXN0KiBtRmllbGRzOwotCi0gICAgbXV0YWJsZSBUU3RyaW5nIG1NYW5nbGVkTmFt
ZTsKLSAgICBtdXRhYmxlIHNpemVfdCBtT2JqZWN0U2l6ZTsKLSAgICBtdXRhYmxlIGludCBtRGVl
cGVzdE5lc3Rpbmc7Ci19OwotCi0vLwotLy8gQmFzZSBjbGFzcyBmb3IgdGhpbmdzIHRoYXQgaGF2
ZSBhIHR5cGUuCi0vLwotY2xhc3MgVFR5cGUKLXsKLXB1YmxpYzoKLSAgICBQT09MX0FMTE9DQVRP
Ul9ORVdfREVMRVRFKCk7Ci0gICAgVFR5cGUoKSB7fQotICAgIFRUeXBlKFRCYXNpY1R5cGUgdCwg
VFByZWNpc2lvbiBwLCBUUXVhbGlmaWVyIHEgPSBFdnFUZW1wb3JhcnksIHVuc2lnbmVkIGNoYXIg
cyA9IDEsIGJvb2wgbSA9IGZhbHNlLCBib29sIGEgPSBmYWxzZSkgOgotICAgICAgICAgICAgdHlw
ZSh0KSwgcHJlY2lzaW9uKHApLCBxdWFsaWZpZXIocSksIHNpemUocyksIG1hdHJpeChtKSwgYXJy
YXkoYSksIGFycmF5U2l6ZSgwKSwgc3RydWN0dXJlKDApCi0gICAgewotICAgIH0KLSAgICBleHBs
aWNpdCBUVHlwZShjb25zdCBUUHVibGljVHlwZSAmcCk7Ci0gICAgVFR5cGUoVFN0cnVjdHVyZSog
dXNlckRlZiwgVFByZWNpc2lvbiBwID0gRWJwVW5kZWZpbmVkKSA6Ci0gICAgICAgICAgICB0eXBl
KEVidFN0cnVjdCksIHByZWNpc2lvbihwKSwgcXVhbGlmaWVyKEV2cVRlbXBvcmFyeSksIHNpemUo
MSksIG1hdHJpeChmYWxzZSksIGFycmF5KGZhbHNlKSwgYXJyYXlTaXplKDApLCBzdHJ1Y3R1cmUo
dXNlckRlZikKLSAgICB7Ci0gICAgfQotCi0gICAgVEJhc2ljVHlwZSBnZXRCYXNpY1R5cGUoKSBj
b25zdCB7IHJldHVybiB0eXBlOyB9Ci0gICAgdm9pZCBzZXRCYXNpY1R5cGUoVEJhc2ljVHlwZSB0
KSB7IHR5cGUgPSB0OyB9Ci0KLSAgICBUUHJlY2lzaW9uIGdldFByZWNpc2lvbigpIGNvbnN0IHsg
cmV0dXJuIHByZWNpc2lvbjsgfQotICAgIHZvaWQgc2V0UHJlY2lzaW9uKFRQcmVjaXNpb24gcCkg
eyBwcmVjaXNpb24gPSBwOyB9Ci0KLSAgICBUUXVhbGlmaWVyIGdldFF1YWxpZmllcigpIGNvbnN0
IHsgcmV0dXJuIHF1YWxpZmllcjsgfQotICAgIHZvaWQgc2V0UXVhbGlmaWVyKFRRdWFsaWZpZXIg
cSkgeyBxdWFsaWZpZXIgPSBxOyB9Ci0KLSAgICAvLyBPbmUtZGltZW5zaW9uYWwgc2l6ZSBvZiBz
aW5nbGUgaW5zdGFuY2UgdHlwZQotICAgIGludCBnZXROb21pbmFsU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIHNpemU7IH0KLSAgICB2b2lkIHNldE5vbWluYWxTaXplKHVuc2lnbmVkIGNoYXIgcykgeyBz
aXplID0gczsgfQotICAgIC8vIEZ1bGwgc2l6ZSBvZiBzaW5nbGUgaW5zdGFuY2Ugb2YgdHlwZQot
ICAgIHNpemVfdCBnZXRPYmplY3RTaXplKCkgY29uc3Q7Ci0KLSAgICBpbnQgZWxlbWVudFJlZ2lz
dGVyQ291bnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKHN0cnVjdHVyZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gZ2V0U3RydWN0KCktPmZp
ZWxkcygpOwotICAgICAgICAgICAgaW50IHJlZ2lzdGVyQ291bnQgPSAwOwotCi0gICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICByZWdpc3RlckNvdW50ICs9IGZpZWxkc1tpXS0+dHlwZSgpLT50
b3RhbFJlZ2lzdGVyQ291bnQoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJu
IHJlZ2lzdGVyQ291bnQ7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaXNNYXRyaXgoKSkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdldE5vbWluYWxTaXplKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGludCB0b3RhbFJlZ2lzdGVyQ291bnQoKSBjb25zdAotICAgIHsK
LSAgICAgICAgaWYgKGFycmF5KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXlT
aXplICogZWxlbWVudFJlZ2lzdGVyQ291bnQoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlbGVtZW50UmVnaXN0ZXJDb3VudCgpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgYm9vbCBpc01hdHJpeCgpIGNvbnN0IHsgcmV0dXJuIG1hdHJp
eCA/IHRydWUgOiBmYWxzZTsgfQotICAgIHZvaWQgc2V0TWF0cml4KGJvb2wgbSkgeyBtYXRyaXgg
PSBtOyB9Ci0KLSAgICBib29sIGlzQXJyYXkoKSBjb25zdCAgeyByZXR1cm4gYXJyYXkgPyB0cnVl
IDogZmFsc2U7IH0KLSAgICBpbnQgZ2V0QXJyYXlTaXplKCkgY29uc3QgeyByZXR1cm4gYXJyYXlT
aXplOyB9Ci0gICAgdm9pZCBzZXRBcnJheVNpemUoaW50IHMpIHsgYXJyYXkgPSB0cnVlOyBhcnJh
eVNpemUgPSBzOyB9Ci0gICAgdm9pZCBjbGVhckFycmF5bmVzcygpIHsgYXJyYXkgPSBmYWxzZTsg
YXJyYXlTaXplID0gMDsgfQotCi0gICAgYm9vbCBpc1ZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIHNp
emUgPiAxICYmICFtYXRyaXg7IH0KLSAgICBib29sIGlzU2NhbGFyKCkgY29uc3QgeyByZXR1cm4g
c2l6ZSA9PSAxICYmICFtYXRyaXggJiYgIXN0cnVjdHVyZTsgfQotCi0gICAgVFN0cnVjdHVyZSog
Z2V0U3RydWN0KCkgY29uc3QgeyByZXR1cm4gc3RydWN0dXJlOyB9Ci0gICAgdm9pZCBzZXRTdHJ1
Y3QoVFN0cnVjdHVyZSogcykgeyBzdHJ1Y3R1cmUgPSBzOyB9Ci0KLSAgICBjb25zdCBUU3RyaW5n
JiBnZXRNYW5nbGVkTmFtZSgpIGNvbnN0IHsKLSAgICAgICAgaWYgKG1hbmdsZWQuZW1wdHkoKSkg
ewotICAgICAgICAgICAgbWFuZ2xlZCA9IGJ1aWxkTWFuZ2xlZE5hbWUoKTsKLSAgICAgICAgICAg
IG1hbmdsZWQgKz0gJzsnOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtYW5nbGVkOwotICAg
IH0KLQotICAgIGJvb2wgc2FtZUVsZW1lbnRUeXBlKGNvbnN0IFRUeXBlJiByaWdodCkgY29uc3Qg
ewotICAgICAgICByZXR1cm4gICAgICB0eXBlID09IHJpZ2h0LnR5cGUgICAmJgotICAgICAgICAg
ICAgICAgICAgICBzaXplID09IHJpZ2h0LnNpemUgICAmJgotICAgICAgICAgICAgICAgICAgbWF0
cml4ID09IHJpZ2h0Lm1hdHJpeCAmJgotICAgICAgICAgICAgICAgc3RydWN0dXJlID09IHJpZ2h0
LnN0cnVjdHVyZTsKLSAgICB9Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRUeXBlJiByaWdo
dCkgY29uc3QgewotICAgICAgICByZXR1cm4gICAgICB0eXBlID09IHJpZ2h0LnR5cGUgICAmJgot
ICAgICAgICAgICAgICAgICAgICBzaXplID09IHJpZ2h0LnNpemUgICAmJgotICAgICAgICAgICAg
ICAgICAgbWF0cml4ID09IHJpZ2h0Lm1hdHJpeCAmJgotICAgICAgICAgICAgICAgICAgIGFycmF5
ID09IHJpZ2h0LmFycmF5ICAmJiAoIWFycmF5IHx8IGFycmF5U2l6ZSA9PSByaWdodC5hcnJheVNp
emUpICYmCi0gICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPT0gcmlnaHQuc3RydWN0dXJlOwotICAg
ICAgICAvLyBkb24ndCBjaGVjayB0aGUgcXVhbGlmaWVyLCBpdCdzIG5vdCBldmVyIHdoYXQncyBi
ZWluZyBzb3VnaHQgYWZ0ZXIKLSAgICB9Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRUeXBl
JiByaWdodCkgY29uc3QgewotICAgICAgICByZXR1cm4gIW9wZXJhdG9yPT0ocmlnaHQpOwotICAg
IH0KLSAgICBib29sIG9wZXJhdG9yPChjb25zdCBUVHlwZSYgcmlnaHQpIGNvbnN0IHsKLSAgICAg
ICAgaWYgKHR5cGUgIT0gcmlnaHQudHlwZSkgcmV0dXJuIHR5cGUgPCByaWdodC50eXBlOwotICAg
ICAgICBpZiAoc2l6ZSAhPSByaWdodC5zaXplKSByZXR1cm4gc2l6ZSA8IHJpZ2h0LnNpemU7Ci0g
ICAgICAgIGlmIChtYXRyaXggIT0gcmlnaHQubWF0cml4KSByZXR1cm4gbWF0cml4IDwgcmlnaHQu
bWF0cml4OwotICAgICAgICBpZiAoYXJyYXkgIT0gcmlnaHQuYXJyYXkpIHJldHVybiBhcnJheSA8
IHJpZ2h0LmFycmF5OwotICAgICAgICBpZiAoYXJyYXlTaXplICE9IHJpZ2h0LmFycmF5U2l6ZSkg
cmV0dXJuIGFycmF5U2l6ZSA8IHJpZ2h0LmFycmF5U2l6ZTsKLSAgICAgICAgaWYgKHN0cnVjdHVy
ZSAhPSByaWdodC5zdHJ1Y3R1cmUpIHJldHVybiBzdHJ1Y3R1cmUgPCByaWdodC5zdHJ1Y3R1cmU7
Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGNvbnN0IGNoYXIqIGdldEJh
c2ljU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gOjpnZXRCYXNpY1N0cmluZyh0eXBlKTsgfQotICAg
IGNvbnN0IGNoYXIqIGdldFByZWNpc2lvblN0cmluZygpIGNvbnN0IHsgcmV0dXJuIDo6Z2V0UHJl
Y2lzaW9uU3RyaW5nKHByZWNpc2lvbik7IH0KLSAgICBjb25zdCBjaGFyKiBnZXRRdWFsaWZpZXJT
dHJpbmcoKSBjb25zdCB7IHJldHVybiA6OmdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpOyB9
Ci0gICAgVFN0cmluZyBnZXRDb21wbGV0ZVN0cmluZygpIGNvbnN0OwotCi0gICAgLy8gSWYgdGhp
cyB0eXBlIGlzIGEgc3RydWN0LCByZXR1cm5zIHRoZSBkZWVwZXN0IHN0cnVjdCBuZXN0aW5nIG9m
Ci0gICAgLy8gYW55IGZpZWxkIGluIHRoZSBzdHJ1Y3QuIEZvciBleGFtcGxlOgotICAgIC8vICAg
c3RydWN0IG5lc3RpbmcxIHsKLSAgICAvLyAgICAgdmVjNCBwb3NpdGlvbjsKLSAgICAvLyAgIH07
Ci0gICAgLy8gICBzdHJ1Y3QgbmVzdGluZzIgewotICAgIC8vICAgICBuZXN0aW5nMSBmaWVsZDE7
Ci0gICAgLy8gICAgIHZlYzQgZmllbGQyOwotICAgIC8vICAgfTsKLSAgICAvLyBGb3IgdHlwZSAi
bmVzdGluZzIiLCB0aGlzIG1ldGhvZCB3b3VsZCByZXR1cm4gMiAtLSB0aGUgbnVtYmVyCi0gICAg
Ly8gb2Ygc3RydWN0dXJlcyB0aHJvdWdoIHdoaWNoIGluZGlyZWN0aW9uIG11c3Qgb2NjdXIgdG8g
cmVhY2ggdGhlCi0gICAgLy8gZGVlcGVzdCBmaWVsZCAobmVzdGluZzIuZmllbGQxLnBvc2l0aW9u
KS4KLSAgICBpbnQgZ2V0RGVlcGVzdFN0cnVjdE5lc3RpbmcoKSBjb25zdCB7Ci0gICAgICAgIHJl
dHVybiBzdHJ1Y3R1cmUgPyBzdHJ1Y3R1cmUtPmRlZXBlc3ROZXN0aW5nKCkgOiAwOwotICAgIH0K
LQotICAgIGJvb2wgaXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlzKCkgY29uc3QgewotICAgICAg
ICByZXR1cm4gc3RydWN0dXJlID8gc3RydWN0dXJlLT5jb250YWluc0FycmF5cygpIDogZmFsc2U7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFRTdHJpbmcgYnVpbGRNYW5nbGVkTmFtZSgpIGNvbnN0
OwotCi0gICAgVEJhc2ljVHlwZSB0eXBlOwotICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOwotICAg
IFRRdWFsaWZpZXIgcXVhbGlmaWVyOwotICAgIHVuc2lnbmVkIGNoYXIgc2l6ZTsKLSAgICBib29s
IG1hdHJpeDsKLSAgICBib29sIGFycmF5OwotICAgIGludCBhcnJheVNpemU7Ci0KLSAgICBUU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmU7ICAgICAgLy8gMCB1bmxlc3MgdGhpcyBpcyBhIHN0cnVjdAotCi0g
ICAgbXV0YWJsZSBUU3RyaW5nIG1hbmdsZWQ7Ci19OwotCi0vLwotLy8gVGhpcyBpcyBhIHdvcmth
cm91bmQgZm9yIGEgcHJvYmxlbSB3aXRoIHRoZSB5YWNjIHN0YWNrLCAgSXQgY2FuJ3QgaGF2ZQot
Ly8gdHlwZXMgdGhhdCBpdCB0aGlua3MgaGF2ZSBub24tdHJpdmlhbCBjb25zdHJ1Y3RvcnMuICBJ
dCBzaG91bGQKLS8vIGp1c3QgYmUgdXNlZCB3aGlsZSByZWNvZ25pemluZyB0aGUgZ3JhbW1hciwg
bm90IGFueXRoaW5nIGVsc2UuICBQb2ludGVycwotLy8gY291bGQgYmUgdXNlZCwgYnV0IGFsc28g
dHJ5aW5nIHRvIGF2b2lkIGxvdHMgb2YgbWVtb3J5IG1hbmFnZW1lbnQgb3ZlcmhlYWQuCi0vLwot
Ly8gTm90IGFzIGJhZCBhcyBpdCBsb29rcywgdGhlcmUgaXMgbm8gYWN0dWFsIGFzc3VtcHRpb24g
dGhhdCB0aGUgZmllbGRzCi0vLyBtYXRjaCB1cCBvciBhcmUgbmFtZSB0aGUgc2FtZSBvciBhbnl0
aGluZyBsaWtlIHRoYXQuCi0vLwotc3RydWN0IFRQdWJsaWNUeXBlCi17Ci0gICAgVEJhc2ljVHlw
ZSB0eXBlOwotICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyOwotICAgIFRQcmVjaXNpb24gcHJlY2lz
aW9uOwotICAgIHVuc2lnbmVkIGNoYXIgc2l6ZTsgICAgICAgICAgLy8gc2l6ZSBvZiB2ZWN0b3Ig
b3IgbWF0cml4LCBub3Qgc2l6ZSBvZiBhcnJheQotICAgIGJvb2wgbWF0cml4OwotICAgIGJvb2wg
YXJyYXk7Ci0gICAgaW50IGFycmF5U2l6ZTsKLSAgICBUVHlwZSogdXNlckRlZjsKLSAgICBUU291
cmNlTG9jIGxpbmU7Ci0KLSAgICB2b2lkIHNldEJhc2ljKFRCYXNpY1R5cGUgYnQsIFRRdWFsaWZp
ZXIgcSwgY29uc3QgVFNvdXJjZUxvYyYgbG4pCi0gICAgewotICAgICAgICB0eXBlID0gYnQ7Ci0g
ICAgICAgIHF1YWxpZmllciA9IHE7Ci0gICAgICAgIHByZWNpc2lvbiA9IEVicFVuZGVmaW5lZDsK
LSAgICAgICAgc2l6ZSA9IDE7Ci0gICAgICAgIG1hdHJpeCA9IGZhbHNlOwotICAgICAgICBhcnJh
eSA9IGZhbHNlOwotICAgICAgICBhcnJheVNpemUgPSAwOwotICAgICAgICB1c2VyRGVmID0gMDsK
LSAgICAgICAgbGluZSA9IGxuOwotICAgIH0KLQotICAgIHZvaWQgc2V0QWdncmVnYXRlKHVuc2ln
bmVkIGNoYXIgcywgYm9vbCBtID0gZmFsc2UpCi0gICAgewotICAgICAgICBzaXplID0gczsKLSAg
ICAgICAgbWF0cml4ID0gbTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEFycmF5KGJvb2wgYSwgaW50
IHMgPSAwKQotICAgIHsKLSAgICAgICAgYXJyYXkgPSBhOwotICAgICAgICBhcnJheVNpemUgPSBz
OwotICAgIH0KLQotICAgIGJvb2wgaXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlzKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIGlmICghdXNlckRlZikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHVzZXJEZWYtPmlzU3RydWN0
dXJlQ29udGFpbmluZ0FycmF5cygpOwotICAgIH0KLX07Ci0KLSNlbmRpZiAvLyBfVFlQRVNfSU5D
TFVERURfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
VW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA1Y2ZkZDMyMzBlNDg3NTY1ZDNiZWQ2NTZlYjcxOTE4NjlkNzBlY2FmLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MTg0ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0vLyBVbmZvbGRTaG9ydENpcmN1aXQgaXMg
YW4gQVNUIHRyYXZlcnNlciB0byBvdXRwdXQgc2hvcnQtY2lyY3VpdGluZyBvcGVyYXRvcnMgYXMg
aWYtZWxzZSBzdGF0ZW1lbnRzLgotLy8gVGhlIHJlc3VsdHMgYXJlIGFzc2lnbmVkIHRvIHMjIHRl
bXBvcmFyaWVzLCB3aGljaCBhcmUgdXNlZCBieSB0aGUgbWFpbiB0cmFuc2xhdG9yIGluc3RlYWQg
b2YKLS8vIHRoZSBvcmlnaW5hbCBleHByZXNzaW9uLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVy
L1VuZm9sZFNob3J0Q2lyY3VpdC5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIK
LSNpbmNsdWRlICJjb21waWxlci9PdXRwdXRITFNMLmgiCi0KLW5hbWVzcGFjZSBzaAotewotVW5m
b2xkU2hvcnRDaXJjdWl0OjpVbmZvbGRTaG9ydENpcmN1aXQoVFBhcnNlQ29udGV4dCAmY29udGV4
dCwgT3V0cHV0SExTTCAqb3V0cHV0SExTTCkgOiBtQ29udGV4dChjb250ZXh0KSwgbU91dHB1dEhM
U0wob3V0cHV0SExTTCkKLXsKLSAgICBtVGVtcG9yYXJ5SW5kZXggPSAwOwotfQotCi12b2lkIFVu
Zm9sZFNob3J0Q2lyY3VpdDo6dHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpCi17Ci0gICAgaW50
IHJld2luZEluZGV4ID0gbVRlbXBvcmFyeUluZGV4OwotICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMp
OwotICAgIG1UZW1wb3JhcnlJbmRleCA9IHJld2luZEluZGV4OwotfQotCi1ib29sIFVuZm9sZFNo
b3J0Q2lyY3VpdDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUp
Ci17Ci0gICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbU91dHB1dEhMU0wtPmdldEJvZHlTdHJlYW0o
KTsKLQotICAgIC8vIElmIG91ciByaWdodCBub2RlIGRvZXNuJ3QgaGF2ZSBzaWRlIGVmZmVjdHMs
IHdlIGtub3cgd2UgZG9uJ3QgbmVlZCB0byB1bmZvbGQgdGhpcwotICAgIC8vIGV4cHJlc3Npb246
IHRoZXJlIHdpbGwgYmUgbm8gc2hvcnQtY2lyY3VpdGluZyBzaWRlIGVmZmVjdHMgdG8gYXZvaWQK
LSAgICAvLyAobm90ZTogdW5mb2xkaW5nIGRvZXNuJ3QgZGVwZW5kIG9uIHRoZSBsZWZ0IG5vZGUg
LS0gaXQgd2lsbCBhbHdheXMgYmUgZXZhbHVhdGVkKQotICAgIGlmICghbm9kZS0+Z2V0UmlnaHQo
KS0+aGFzU2lkZUVmZmVjdHMoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKLSAgICB7Ci0gICAgICBjYXNlIEVPcExvZ2lj
YWxPcjoKLSAgICAgICAgLy8gInggfHwgeSIgaXMgZXF1aXZhbGVudCB0byAieCA/IHRydWUgOiB5
Iiwgd2hpY2ggdW5mb2xkcyB0byAiYm9vbCBzOyBpZih4KSBzID0gdHJ1ZTsgZWxzZSBzID0geTsi
LAotICAgICAgICAvLyBhbmQgdGhlbiBmdXJ0aGVyIHNpbXBsaWZpZXMgZG93biB0byAiYm9vbCBz
ID0geDsgaWYoIXMpIHMgPSB5OyIuCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBpID0gbVRl
bXBvcmFyeUluZGV4OwotCi0gICAgICAgICAgICBvdXQgPDwgImJvb2wgcyIgPDwgaSA8PCAiO1xu
IjsKLQotICAgICAgICAgICAgb3V0IDw8ICJ7XG4iOwotCi0gICAgICAgICAgICBtVGVtcG9yYXJ5
SW5kZXggPSBpICsgMTsKLSAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhp
cyk7Ci0gICAgICAgICAgICBvdXQgPDwgInMiIDw8IGkgPDwgIiA9ICI7Ci0gICAgICAgICAgICBt
VGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJh
dmVyc2UobU91dHB1dEhMU0wpOwotICAgICAgICAgICAgb3V0IDw8ICI7XG4iOwotICAgICAgICAg
ICAgb3V0IDw8ICJpZiAoIXMiIDw8IGkgPDwgIilcbiIKLSAgICAgICAgICAgICAgICAgICAie1xu
IjsKLSAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAgICAgICAgbm9k
ZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICBvdXQgPDwgIiAgICBz
IiA8PCBpIDw8ICIgPSAiOwotICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0g
ICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Ci0gICAg
ICAgICAgICBvdXQgPDwgIjtcbiIKLSAgICAgICAgICAgICAgICAgICAifVxuIjsKLQotICAgICAg
ICAgICAgb3V0IDw8ICJ9XG4iOwotCi0gICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsg
MTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBjYXNlIEVPcExvZ2lj
YWxBbmQ6Ci0gICAgICAgIC8vICJ4ICYmIHkiIGlzIGVxdWl2YWxlbnQgdG8gInggPyB5IDogZmFs
c2UiLCB3aGljaCB1bmZvbGRzIHRvICJib29sIHM7IGlmKHgpIHMgPSB5OyBlbHNlIHMgPSBmYWxz
ZTsiLAotICAgICAgICAvLyBhbmQgdGhlbiBmdXJ0aGVyIHNpbXBsaWZpZXMgZG93biB0byAiYm9v
bCBzID0geDsgaWYocykgcyA9IHk7Ii4KLSAgICAgICAgewotICAgICAgICAgICAgaW50IGkgPSBt
VGVtcG9yYXJ5SW5kZXg7Ci0KLSAgICAgICAgICAgIG91dCA8PCAiYm9vbCBzIiA8PCBpIDw8ICI7
XG4iOwotCi0gICAgICAgICAgICBvdXQgPDwgIntcbiI7Ci0KLSAgICAgICAgICAgIG1UZW1wb3Jh
cnlJbmRleCA9IGkgKyAxOwotICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJzZSh0
aGlzKTsKLSAgICAgICAgICAgIG91dCA8PCAicyIgPDwgaSA8PCAiID0gIjsKLSAgICAgICAgICAg
IG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50
cmF2ZXJzZShtT3V0cHV0SExTTCk7Ci0gICAgICAgICAgICBvdXQgPDwgIjtcbiI7Ci0gICAgICAg
ICAgICBvdXQgPDwgImlmIChzIiA8PCBpIDw8ICIpXG4iCi0gICAgICAgICAgICAgICAgICAgIntc
biI7Ci0gICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAgICAgICAgIG5v
ZGUtPmdldFJpZ2h0KCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAgICAgb3V0IDw8ICIgICAg
cyIgPDwgaSA8PCAiID0gIjsKLSAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwot
ICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOwotICAg
ICAgICAgICAgb3V0IDw8ICI7XG4iCi0gICAgICAgICAgICAgICAgICAgIn1cbiI7Ci0KLSAgICAg
ICAgICAgIG91dCA8PCAifVxuIjsKLQotICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSAr
IDE7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfQotCi1ib29sIFVuZm9sZFNob3J0Q2lyY3VpdDo6
dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpCi17Ci0g
ICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbU91dHB1dEhMU0wtPmdldEJvZHlTdHJlYW0oKTsKLQot
ICAgIC8vIFVuZm9sZCAiYiA/IHggOiB5IiBpbnRvICJ0eXBlIHM7IGlmKGIpIHMgPSB4OyBlbHNl
IHMgPSB5OyIKLSAgICBpZiAobm9kZS0+dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQotICAgIHsKLSAg
ICAgICAgaW50IGkgPSBtVGVtcG9yYXJ5SW5kZXg7Ci0KLSAgICAgICAgb3V0IDw8IG1PdXRwdXRI
TFNMLT50eXBlU3RyaW5nKG5vZGUtPmdldFR5cGUoKSkgPDwgIiBzIiA8PCBpIDw8ICI7XG4iOwot
Ci0gICAgICAgIG91dCA8PCAie1xuIjsKLQotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsg
MTsKLSAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAg
ICBvdXQgPDwgImlmICgiOwotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAg
ICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKLSAgICAgICAg
b3V0IDw8ICIpXG4iCi0gICAgICAgICAgICAgICAie1xuIjsKLSAgICAgICAgbVRlbXBvcmFyeUlu
ZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldFRydWVCbG9jaygpLT50cmF2ZXJzZSh0aGlz
KTsKLSAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8PCAiID0gIjsKLSAgICAgICAgbVRlbXBv
cmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldFRydWVCbG9jaygpLT50cmF2ZXJz
ZShtT3V0cHV0SExTTCk7Ci0gICAgICAgIG91dCA8PCAiO1xuIgotICAgICAgICAgICAgICAgIn1c
biIKLSAgICAgICAgICAgICAgICJlbHNlXG4iCi0gICAgICAgICAgICAgICAie1xuIjsKLSAgICAg
ICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldEZhbHNlQmxvY2so
KS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIG91dCA8PCAiICAgIHMiIDw8IGkgPDwgIiA9ICI7
Ci0gICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAgICBub2RlLT5nZXRGYWxz
ZUJsb2NrKCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKLSAgICAgICAgb3V0IDw8ICI7XG4iCi0g
ICAgICAgICAgICAgICAifVxuIjsKLQotICAgICAgICBvdXQgPDwgIn1cbiI7Ci0KLSAgICAgICAg
bVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1ib29sIFVuZm9sZFNob3J0Q2lyY3VpdDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJt
TG9vcCAqbm9kZSkKLXsKLSAgICBpbnQgcmV3aW5kSW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7Ci0K
LSAgICBpZiAobm9kZS0+Z2V0SW5pdCgpKQotICAgIHsKLSAgICAgICAgbm9kZS0+Z2V0SW5pdCgp
LT50cmF2ZXJzZSh0aGlzKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG5vZGUtPmdldENvbmRpdGlv
bigpKQotICAgIHsKLSAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMp
OwotICAgIH0KLQotICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkpCi0gICAgewotICAgICAg
ICBub2RlLT5nZXRFeHByZXNzaW9uKCktPnRyYXZlcnNlKHRoaXMpOwotICAgIH0KLQotICAgIG1U
ZW1wb3JhcnlJbmRleCA9IHJld2luZEluZGV4OwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1p
bnQgVW5mb2xkU2hvcnRDaXJjdWl0OjpnZXROZXh0VGVtcG9yYXJ5SW5kZXgoKQotewotICAgIHJl
dHVybiBtVGVtcG9yYXJ5SW5kZXgrKzsKLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYWUyOTg5ZmE0YWI0OTUwMjViYTRjOTE3NzVhMWIwZTdmYzI1
ZTlkNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmgKKysr
IC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotLy8gVW5mb2xk
U2hvcnRDaXJjdWl0IGlzIGFuIEFTVCB0cmF2ZXJzZXIgdG8gb3V0cHV0IHNob3J0LWNpcmN1aXRp
bmcgb3BlcmF0b3JzIGFzIGlmLWVsc2Ugc3RhdGVtZW50cwotLy8KLQotI2lmbmRlZiBDT01QSUxF
Ul9VTkZPTERTSE9SVENJUkNVSVRfSF8KLSNkZWZpbmUgQ09NUElMRVJfVU5GT0xEU0hPUlRDSVJD
VUlUX0hfCi0KLSNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKLSNpbmNsdWRlICJj
b21waWxlci9QYXJzZUNvbnRleHQuaCIKLQotbmFtZXNwYWNlIHNoCi17Ci1jbGFzcyBPdXRwdXRI
TFNMOwotCi1jbGFzcyBVbmZvbGRTaG9ydENpcmN1aXQgOiBwdWJsaWMgVEludGVybVRyYXZlcnNl
cgotewotICBwdWJsaWM6Ci0gICAgVW5mb2xkU2hvcnRDaXJjdWl0KFRQYXJzZUNvbnRleHQgJmNv
bnRleHQsIE91dHB1dEhMU0wgKm91dHB1dEhMU0wpOwotCi0gICAgdm9pZCB0cmF2ZXJzZShUSW50
ZXJtTm9kZSAqbm9kZSk7Ci0gICAgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVy
bUJpbmFyeSopOwotICAgIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1T
ZWxlY3Rpb24gKm5vZGUpOwotICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJt
TG9vcCAqbm9kZSk7Ci0KLSAgICBpbnQgZ2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7Ci0KLSAgcHJv
dGVjdGVkOgotICAgIFRQYXJzZUNvbnRleHQgJm1Db250ZXh0OwotICAgIE91dHB1dEhMU0wgKmNv
bnN0IG1PdXRwdXRITFNMOwotCi0gICAgaW50IG1UZW1wb3JhcnlJbmRleDsKLX07Ci19Ci0KLSNl
bmRpZiAgIC8vIENPTVBJTEVSX1VORk9MRFNIT1JUQ0lSQ1VJVF9IXwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdEFTVC5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJj
dWl0QVNULmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZkMGYyZjMwYmUxNjIx
YjgzYjAxZGI0ZmFiOTA0YjRhZTI4YmY0ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5m
b2xkU2hvcnRDaXJjdWl0QVNULmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXRB
U1QuaCIKLQotbmFtZXNwYWNlCi17Ci0KLS8vICJ4IHx8IHkiIGlzIGVxdWl2YWxlbnQgdG8gIngg
PyB0cnVlIDogeSIuCi1USW50ZXJtU2VsZWN0aW9uICpVbmZvbGRPUihUSW50ZXJtVHlwZWQgKngs
IFRJbnRlcm1UeXBlZCAqeSkKLXsKLSAgICBjb25zdCBUVHlwZSBib29sVHlwZShFYnRCb29sLCBF
YnBVbmRlZmluZWQpOwotICAgIENvbnN0YW50VW5pb24gKnUgPSBuZXcgQ29uc3RhbnRVbmlvbjsK
LSAgICB1LT5zZXRCQ29uc3QodHJ1ZSk7Ci0gICAgVEludGVybUNvbnN0YW50VW5pb24gKnRydWVO
b2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKAotICAgICAgICB1LCBUVHlwZShFYnRCb29s
LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0LCAxKSk7Ci0gICAgcmV0dXJuIG5ldyBUSW50ZXJtU2Vs
ZWN0aW9uKHgsIHRydWVOb2RlLCB5LCBib29sVHlwZSk7Ci19Ci0KLS8vICJ4ICYmIHkiIGlzIGVx
dWl2YWxlbnQgdG8gInggPyB5IDogZmFsc2UiLgotVEludGVybVNlbGVjdGlvbiAqVW5mb2xkQU5E
KFRJbnRlcm1UeXBlZCAqeCwgVEludGVybVR5cGVkICp5KQotewotICAgIGNvbnN0IFRUeXBlIGJv
b2xUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCk7Ci0gICAgQ29uc3RhbnRVbmlvbiAqdSA9IG5l
dyBDb25zdGFudFVuaW9uOwotICAgIHUtPnNldEJDb25zdChmYWxzZSk7Ci0gICAgVEludGVybUNv
bnN0YW50VW5pb24gKmZhbHNlTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbigKLSAgICAg
ICAgdSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCwgMSkpOwotICAgIHJl
dHVybiBuZXcgVEludGVybVNlbGVjdGlvbih4LCB5LCBmYWxzZU5vZGUsIGJvb2xUeXBlKTsKLX0K
LQotfSAgLy8gbmFtZXNwYWNlIGFub255bW91cwotCi1ib29sIFVuZm9sZFNob3J0Q2lyY3VpdEFT
VDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCi17Ci0gICAg
VEludGVybVNlbGVjdGlvbiAqcmVwbGFjZW1lbnQgPSBOVUxMOwotCi0gICAgc3dpdGNoIChub2Rl
LT5nZXRPcCgpKQotICAgIHsKLSAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgotICAgICAgICByZXBs
YWNlbWVudCA9IFVuZm9sZE9SKG5vZGUtPmdldExlZnQoKSwgbm9kZS0+Z2V0UmlnaHQoKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOgotICAgICAgICByZXBsYWNl
bWVudCA9IFVuZm9sZEFORChub2RlLT5nZXRMZWZ0KCksIG5vZGUtPmdldFJpZ2h0KCkpOwotICAg
ICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBp
ZiAocmVwbGFjZW1lbnQpCi0gICAgewotICAgICAgICByZXBsYWNlbWVudHMucHVzaF9iYWNrKAot
ICAgICAgICAgICAgTm9kZVVwZGF0ZUVudHJ5KGdldFBhcmVudE5vZGUoKSwgbm9kZSwgcmVwbGFj
ZW1lbnQpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgVW5mb2xkU2hvcnRD
aXJjdWl0QVNUOjp1cGRhdGVUcmVlKCkKLXsKLSAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwg
cmVwbGFjZW1lbnRzLnNpemUoKTsgKytpaSkKLSAgICB7Ci0gICAgICAgIGNvbnN0IE5vZGVVcGRh
dGVFbnRyeSYgZW50cnkgPSByZXBsYWNlbWVudHNbaWldOwotICAgICAgICBBU1NFUlQoZW50cnku
cGFyZW50KTsKLSAgICAgICAgYm9vbCByZXBsYWNlZCA9IGVudHJ5LnBhcmVudC0+cmVwbGFjZUNo
aWxkTm9kZSgKLSAgICAgICAgICAgIGVudHJ5Lm9yaWdpbmFsLCBlbnRyeS5yZXBsYWNlbWVudCk7
Ci0gICAgICAgIEFTU0VSVChyZXBsYWNlZCk7Ci0KLSAgICAgICAgLy8gSW4gQVNUIHRyYXZlcnNp
bmcsIGEgcGFyZW50IGlzIHZpc2l0ZWQgYmVmb3JlIGl0cyBjaGlsZHJlbi4KLSAgICAgICAgLy8g
QWZ0ZXIgd2UgcmVwbGFjZSBhIG5vZGUsIGlmIGFuIGltbWVkaWF0ZSBjaGlsZCBpcyB0bwotICAg
ICAgICAvLyBiZSByZXBsYWNlZCwgd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgdXBkYXRl
IHRoZSByZXBsYWNlZAotICAgIC8vIG5vZGU7IGluc3RlYWQsIHdlIHVwZGF0ZSB0aGUgcmVwbGFj
ZW1lbnQgbm9kZS4KLSAgICAgICAgZm9yIChzaXplX3QgamogPSBpaSArIDE7IGpqIDwgcmVwbGFj
ZW1lbnRzLnNpemUoKTsgKytqaikKLSAgICAgICAgewotICAgICAgICAgICAgTm9kZVVwZGF0ZUVu
dHJ5JiBlbnRyeTIgPSByZXBsYWNlbWVudHNbampdOwotICAgICAgICAgICAgaWYgKGVudHJ5Mi5w
YXJlbnQgPT0gZW50cnkub3JpZ2luYWwpCi0gICAgICAgICAgICAgICAgZW50cnkyLnBhcmVudCA9
IGVudHJ5LnJlcGxhY2VtZW50OwotICAgICAgICB9Ci0gICAgfQotfQotCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0QVNU
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJj
dWl0QVNULmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmYzUwMDY2NDg1NDY4YWQx
NjNmMzkxYjVjNjJmMTYxODI3YTFiNWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9s
ZFNob3J0Q2lyY3VpdEFTVC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLS8vIFVuZm9sZFNob3J0Q2lyY3VpdEFTVCBpcyBhbiBBU1QgdHJhdmVyc2Vy
IHRvIHJlcGxhY2Ugc2hvcnQtY2lyY3VpdGluZwotLy8gb3BlcmF0aW9ucyB3aXRoIHRlcm5hcnkg
b3BlcmF0aW9ucy4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfVU5GT0xEX1NIT1JUX0NJUkNVSVRf
QVNUX0hfCi0jZGVmaW5lIENPTVBJTEVSX1VORk9MRF9TSE9SVF9DSVJDVUlUX0FTVF9IXwotCi0j
aW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRlICJjb21waWxlci9pbnRlcm1l
ZGlhdGUuaCIKLQotLy8gVGhpcyB0cmF2ZXJzZXIgaWRlbnRpZmllcyBhbGwgdGhlIHNob3J0IGNp
cmN1aXQgYmluYXJ5ICBub2RlcyB0aGF0IG5lZWQgdG8KLS8vIGJlIHJlcGxhY2VkLCBhbmQgY3Jl
YXRlcyB0aGUgY29ycmVzcG9uZGluZyByZXBsYWNlbWVudCBub2Rlcy4gSG93ZXZlciwKLS8vIHRo
ZSBhY3R1YWwgcmVwbGFjZW1lbnRzIGhhcHBlbiBhZnRlciB0aGUgdHJhdmVyc2UgdGhyb3VnaCB1
cGRhdGVUcmVlKCkuCi0KLWNsYXNzIFVuZm9sZFNob3J0Q2lyY3VpdEFTVCA6IHB1YmxpYyBUSW50
ZXJtVHJhdmVyc2VyCi17Ci0gIHB1YmxpYzoKLSAgICBVbmZvbGRTaG9ydENpcmN1aXRBU1QoKSB7
IH0KLQotICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJp
bmFyeSAqKTsKLQotICAgIHZvaWQgdXBkYXRlVHJlZSgpOwotCi0gIHByaXZhdGU6Ci0gICAgc3Ry
dWN0IE5vZGVVcGRhdGVFbnRyeQotICAgIHsKLSAgICAgICAgTm9kZVVwZGF0ZUVudHJ5KFRJbnRl
cm1Ob2RlICpfcGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5vZGUgKl9v
cmlnaW5hbCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICpfcmVwbGFjZW1l
bnQpCi0gICAgICAgICAgICA6IHBhcmVudChfcGFyZW50KSwKLSAgICAgICAgICAgICAgb3JpZ2lu
YWwoX29yaWdpbmFsKSwKLSAgICAgICAgICAgICAgcmVwbGFjZW1lbnQoX3JlcGxhY2VtZW50KSB7
fQotCi0gICAgICAgIFRJbnRlcm1Ob2RlICpwYXJlbnQ7Ci0gICAgICAgIFRJbnRlcm1Ob2RlICpv
cmlnaW5hbDsKLSAgICAgICAgVEludGVybU5vZGUgKnJlcGxhY2VtZW50OwotICAgIH07Ci0KLSAg
ICAvLyBEdXJpbmcgdHJhdmVyc2luZywgc2F2ZSBhbGwgdGhlIHJlcGxhY2VtZW50cyB0aGF0IG5l
ZWQgdG8gaGFwcGVuOwotICAgIC8vIHRoZW4gcmVwbGFjZSB0aGVtIGJ5IGNhbGxpbmcgdXBkYXRl
Tm9kZXMoKS4KLSAgICBzdGQ6OnZlY3RvcjxOb2RlVXBkYXRlRW50cnk+IHJlcGxhY2VtZW50czsK
LQotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihVbmZvbGRTaG9ydENpcmN1aXRBU1QpOwot
fTsKLQotI2VuZGlmICAvLyBDT01QSUxFUl9VTkZPTERfU0hPUlRfQ0lSQ1VJVF9BU1RfSF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Vbmlmb3JtLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Vbmlmb3JtLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM2N2RiMmJlOGU0ZmY1ZDEzOWMwZTcxYzhiYWI4
NGM3NGQ0N2ZkYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5pZm9ybS5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBp
bGVyL1VuaWZvcm0uaCIKLQotbmFtZXNwYWNlIHNoCi17Ci0KLVVuaWZvcm06OlVuaWZvcm0oR0xl
bnVtIHR5cGUsIEdMZW51bSBwcmVjaXNpb24sIGNvbnN0IGNoYXIgKm5hbWUsIGludCBhcnJheVNp
emUsIGludCByZWdpc3RlckluZGV4KQotewotICAgIHRoaXMtPnR5cGUgPSB0eXBlOwotICAgIHRo
aXMtPnByZWNpc2lvbiA9IHByZWNpc2lvbjsKLSAgICB0aGlzLT5uYW1lID0gbmFtZTsKLSAgICB0
aGlzLT5hcnJheVNpemUgPSBhcnJheVNpemU7Ci0gICAgdGhpcy0+cmVnaXN0ZXJJbmRleCA9IHJl
Z2lzdGVySW5kZXg7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9Vbmlmb3JtLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvVW5pZm9ybS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzUzZmZhN2Qy
ZmM1ODRlNDAwYzJjZjA0ZDAxMmU2YWYxZTI1MmQ3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9Vbmlmb3JtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LQotI2lmbmRlZiBDT01QSUxFUl9VTklGT1JNX0hfCi0jZGVmaW5lIENPTVBJTEVSX1VOSUZPUk1f
SF8KLQotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNkZWZpbmUgR0xf
QVBJQ0FMTAotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotCi1uYW1lc3BhY2Ugc2gKLXsKLQotc3Ry
dWN0IFVuaWZvcm0KLXsKLSAgICBVbmlmb3JtKEdMZW51bSB0eXBlLCBHTGVudW0gcHJlY2lzaW9u
LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgYXJyYXlTaXplLCBpbnQgcmVnaXN0ZXJJbmRleCk7Ci0K
LSAgICBHTGVudW0gdHlwZTsKLSAgICBHTGVudW0gcHJlY2lzaW9uOwotICAgIHN0ZDo6c3RyaW5n
IG5hbWU7Ci0gICAgdW5zaWduZWQgaW50IGFycmF5U2l6ZTsKLSAgICAKLSAgICBpbnQgcmVnaXN0
ZXJJbmRleDsKLX07Ci0KLXR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybT4gQWN0aXZlVW5pZm9y
bXM7Ci0KLX0KLQotI2VuZGlmICAgLy8gQ09NUElMRVJfVU5JRk9STV9IXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMu
Y3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRh
dGlvbnMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDk2OWM0ODlmYTFkMGQ4
ZTg5Yzk3ODNhY2IxYTcxOWI3MWRlMDNkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYWxp
ZGF0ZUxpbWl0YXRpb25zLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUxMiArMCwwIEBACi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5o
IgotI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5p
dGlhbGl6ZVBhcnNlQ29udGV4dC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlQ29udGV4dC5o
IgotCi1uYW1lc3BhY2UgewotYm9vbCBJc0xvb3BJbmRleChjb25zdCBUSW50ZXJtU3ltYm9sKiBz
eW1ib2wsIGNvbnN0IFRMb29wU3RhY2smIHN0YWNrKSB7Ci0gICAgZm9yIChUTG9vcFN0YWNrOjpj
b25zdF9pdGVyYXRvciBpID0gc3RhY2suYmVnaW4oKTsgaSAhPSBzdGFjay5lbmQoKTsgKytpKSB7
Ci0gICAgICAgIGlmIChpLT5pbmRleC5pZCA9PSBzeW1ib2wtPmdldElkKCkpCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIE1hcmtM
b29wRm9yVW5yb2xsKGNvbnN0IFRJbnRlcm1TeW1ib2wqIHN5bWJvbCwgVExvb3BTdGFjayYgc3Rh
Y2spIHsKLSAgICBmb3IgKFRMb29wU3RhY2s6Oml0ZXJhdG9yIGkgPSBzdGFjay5iZWdpbigpOyBp
ICE9IHN0YWNrLmVuZCgpOyArK2kpIHsKLSAgICAgICAgaWYgKGktPmluZGV4LmlkID09IHN5bWJv
bC0+Z2V0SWQoKSkgewotICAgICAgICAgICAgQVNTRVJUKGktPmxvb3AgIT0gTlVMTCk7Ci0gICAg
ICAgICAgICBpLT5sb29wLT5zZXRVbnJvbGxGbGFnKHRydWUpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfQotICAgIFVOUkVBQ0hBQkxFKCk7Ci19Ci0KLS8vIFRyYXZlcnNl
cyBhIG5vZGUgdG8gY2hlY2sgaWYgaXQgcmVwcmVzZW50cyBhIGNvbnN0YW50IGluZGV4IGV4cHJl
c3Npb24uCi0vLyBEZWZpbml0aW9uOgotLy8gY29uc3RhbnQtaW5kZXgtZXhwcmVzc2lvbnMgYXJl
IGEgc3VwZXJzZXQgb2YgY29uc3RhbnQtZXhwcmVzc2lvbnMuCi0vLyBDb25zdGFudC1pbmRleC1l
eHByZXNzaW9ucyBjYW4gaW5jbHVkZSBsb29wIGluZGljZXMgYXMgZGVmaW5lZCBpbgotLy8gR0xT
TCBFUyAxLjAgc3BlYywgQXBwZW5kaXggQSwgc2VjdGlvbiA0LgotLy8gVGhlIGZvbGxvd2luZyBh
cmUgY29uc3RhbnQtaW5kZXgtZXhwcmVzc2lvbnM6Ci0vLyAtIENvbnN0YW50IGV4cHJlc3Npb25z
Ci0vLyAtIExvb3AgaW5kaWNlcyBhcyBkZWZpbmVkIGluIHNlY3Rpb24gNAotLy8gLSBFeHByZXNz
aW9ucyBjb21wb3NlZCBvZiBib3RoIG9mIHRoZSBhYm92ZQotY2xhc3MgVmFsaWRhdGVDb25zdElu
ZGV4RXhwciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKLXB1YmxpYzoKLSAgICBWYWxpZGF0
ZUNvbnN0SW5kZXhFeHByKGNvbnN0IFRMb29wU3RhY2smIHN0YWNrKQotICAgICAgICA6IG1WYWxp
ZCh0cnVlKSwgbUxvb3BTdGFjayhzdGFjaykge30KLQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgcGFyc2VkIG5vZGUgcmVwcmVzZW50cyBhIGNvbnN0YW50IGluZGV4IGV4cHJlc3Npb24uCi0g
ICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbVZhbGlkOyB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogc3ltYm9sKSB7Ci0gICAgICAgIC8vIE9u
bHkgY29uc3RhbnRzIGFuZCBsb29wIGluZGljZXMgYXJlIGFsbG93ZWQgaW4gYQotICAgICAgICAv
LyBjb25zdGFudCBpbmRleCBleHByZXNzaW9uLgotICAgICAgICBpZiAobVZhbGlkKSB7Ci0gICAg
ICAgICAgICBtVmFsaWQgPSAoc3ltYm9sLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgfHwK
LSAgICAgICAgICAgICAgICAgICAgIElzTG9vcEluZGV4KHN5bWJvbCwgbUxvb3BTdGFjayk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBtVmFsaWQ7Ci0gICAgY29uc3Qg
VExvb3BTdGFjayYgbUxvb3BTdGFjazsKLX07Ci0KLS8vIFRyYXZlcnNlcyBhIG5vZGUgdG8gY2hl
Y2sgaWYgaXQgdXNlcyBhIGxvb3AgaW5kZXguCi0vLyBJZiBhbiBpbnQgbG9vcCBpbmRleCBpcyB1
c2VkIGluIGl0cyBib2R5IGFzIGEgc2FtcGxlciBhcnJheSBpbmRleCwKLS8vIG1hcmsgdGhlIGxv
b3AgZm9yIHVucm9sbC4KLWNsYXNzIFZhbGlkYXRlTG9vcEluZGV4RXhwciA6IHB1YmxpYyBUSW50
ZXJtVHJhdmVyc2VyIHsKLXB1YmxpYzoKLSAgICBWYWxpZGF0ZUxvb3BJbmRleEV4cHIoVExvb3BT
dGFjayYgc3RhY2spCi0gICAgICAgIDogbVVzZXNGbG9hdExvb3BJbmRleChmYWxzZSksCi0gICAg
ICAgICAgbVVzZXNJbnRMb29wSW5kZXgoZmFsc2UpLAotICAgICAgICAgIG1Mb29wU3RhY2soc3Rh
Y2spIHt9Ci0KLSAgICBib29sIHVzZXNGbG9hdExvb3BJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1V
c2VzRmxvYXRMb29wSW5kZXg7IH0KLSAgICBib29sIHVzZXNJbnRMb29wSW5kZXgoKSBjb25zdCB7
IHJldHVybiBtVXNlc0ludExvb3BJbmRleDsgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0U3lt
Ym9sKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCkgewotICAgICAgICBpZiAoSXNMb29wSW5kZXgoc3lt
Ym9sLCBtTG9vcFN0YWNrKSkgewotICAgICAgICAgICAgc3dpdGNoIChzeW1ib2wtPmdldEJhc2lj
VHlwZSgpKSB7Ci0gICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6Ci0gICAgICAgICAgICAgICAg
bVVzZXNGbG9hdExvb3BJbmRleCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgRWJ0SW50OgotICAgICAgICAgICAgICAgIG1Vc2VzSW50TG9vcEluZGV4
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBNYXJrTG9vcEZvclVucm9sbChzeW1ib2wsIG1Mb29w
U3RhY2spOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBtVXNlc0Zsb2F0TG9vcEluZGV4OwotICAgIGJv
b2wgbVVzZXNJbnRMb29wSW5kZXg7Ci0gICAgVExvb3BTdGFjayYgbUxvb3BTdGFjazsKLX07Ci19
ICAvLyBuYW1lc3BhY2UKLQotVmFsaWRhdGVMaW1pdGF0aW9uczo6VmFsaWRhdGVMaW1pdGF0aW9u
cyhTaFNoYWRlclR5cGUgc2hhZGVyVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVEluZm9TaW5rQmFzZSYgc2luaykKLSAgICA6IG1TaGFkZXJUeXBlKHNoYWRl
clR5cGUpLAotICAgICAgbVNpbmsoc2luayksCi0gICAgICBtTnVtRXJyb3JzKDApCi17Ci19Ci0K
LWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5h
cnkqIG5vZGUpCi17Ci0gICAgLy8gQ2hlY2sgaWYgbG9vcCBpbmRleCBpcyBtb2RpZmllZCBpbiB0
aGUgbG9vcCBib2R5LgotICAgIHZhbGlkYXRlT3BlcmF0aW9uKG5vZGUsIG5vZGUtPmdldExlZnQo
KSk7Ci0KLSAgICAvLyBDaGVjayBpbmRleGluZy4KLSAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkp
IHsKLSAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6Ci0gICAgICAgIHZhbGlkYXRlSW5kZXhpbmco
bm9kZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OgotI2lm
IGRlZmluZWQoX19BUFBMRV9fKQotICAgICAgICAvLyBMb29wIHVucm9sbGluZyBpcyBhIHdvcmst
YXJvdW5kIGZvciBhIE1hYyBDZyBjb21waWxlciBidWcgd2hlcmUgaXQKLSAgICAgICAgLy8gY3Jh
c2hlcyB3aGVuIGEgc2FtcGxlciBhcnJheSdzIGluZGV4IGlzIGFsc28gdGhlIGxvb3AgaW5kZXgu
Ci0gICAgICAgIC8vIE9uY2UgQXBwbGUgZml4ZXMgdGhpcyBidWcsIHdlIHNob3VsZCByZW1vdmUg
dGhlIGNvZGUgaW4gdGhpcyBDTC4KLSAgICAgICAgLy8gU2VlIGh0dHA6Ly9jb2RlcmV2aWV3LmFw
cHNwb3QuY29tLzQzMzEwNDgvLgotICAgICAgICBpZiAoKG5vZGUtPmdldExlZnQoKSAhPSBOVUxM
KSAmJiAobm9kZS0+Z2V0UmlnaHQoKSAhPSBOVUxMKSAmJgotICAgICAgICAgICAgKG5vZGUtPmdl
dExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCkpKSB7Ci0gICAgICAgICAgICBUSW50ZXJtU3ltYm9s
KiBzeW1ib2wgPSBub2RlLT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOwotICAgICAgICAg
ICAgaWYgKElzU2FtcGxlcihzeW1ib2wtPmdldEJhc2ljVHlwZSgpKSAmJiBzeW1ib2wtPmlzQXJy
YXkoKSkgewotICAgICAgICAgICAgICAgIFZhbGlkYXRlTG9vcEluZGV4RXhwciB2YWxpZGF0ZSht
TG9vcFN0YWNrKTsKLSAgICAgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSgm
dmFsaWRhdGUpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZS51c2VzRmxvYXRMb29wSW5k
ZXgoKSkgewotICAgICAgICAgICAgICAgICAgICBlcnJvcihub2RlLT5nZXRMaW5lKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICJzYW1wbGVyIGFycmF5IGluZGV4IGlzIGZsb2F0IGxvb3Ag
aW5kZXgiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9yIik7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgdmFsaWRhdGVJ
bmRleGluZyhub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBicmVhazsKLSAg
ICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlz
aXRVbmFyeShWaXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQotewotICAgIC8vIENoZWNrIGlmIGxv
b3AgaW5kZXggaXMgbW9kaWZpZWQgaW4gdGhlIGxvb3AgYm9keS4KLSAgICB2YWxpZGF0ZU9wZXJh
dGlvbihub2RlLCBub2RlLT5nZXRPcGVyYW5kKCkpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1B
Z2dyZWdhdGUqIG5vZGUpCi17Ci0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKSB7Ci0gICAgICBj
YXNlIEVPcEZ1bmN0aW9uQ2FsbDoKLSAgICAgICAgdmFsaWRhdGVGdW5jdGlvbkNhbGwobm9kZSk7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZpc2l0TG9v
cChWaXNpdCwgVEludGVybUxvb3AqIG5vZGUpCi17Ci0gICAgaWYgKCF2YWxpZGF0ZUxvb3BUeXBl
KG5vZGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBUTG9vcEluZm8gaW5mbzsKLSAg
ICBtZW1zZXQoJmluZm8sIDAsIHNpemVvZihUTG9vcEluZm8pKTsKLSAgICBpbmZvLmxvb3AgPSBu
b2RlOwotICAgIGlmICghdmFsaWRhdGVGb3JMb29wSGVhZGVyKG5vZGUsICZpbmZvKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVEludGVybU5vZGUqIGJvZHkgPSBub2RlLT5nZXRCb2R5
KCk7Ci0gICAgaWYgKGJvZHkgIT0gTlVMTCkgewotICAgICAgICBtTG9vcFN0YWNrLnB1c2hfYmFj
ayhpbmZvKTsKLSAgICAgICAgYm9keS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIG1Mb29wU3Rh
Y2sucG9wX2JhY2soKTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgbG9vcCBpcyBmdWxseSBwcm9jZXNz
ZWQgLSBubyBuZWVkIHRvIHZpc2l0IGNoaWxkcmVuLgotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBWYWxpZGF0ZUxpbWl0YXRpb25zOjplcnJvcihUU291cmNlTG9jIGxvYywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcmVhc29uLCBjb25zdCBjaGFyKiB0
b2tlbikKLXsKLSAgICBtU2luay5wcmVmaXgoRVByZWZpeEVycm9yKTsKLSAgICBtU2luay5sb2Nh
dGlvbihsb2MpOwotICAgIG1TaW5rIDw8ICInIiA8PCB0b2tlbiA8PCAiJyA6ICIgPDwgcmVhc29u
IDw8ICJcbiI7Ci0gICAgKyttTnVtRXJyb3JzOwotfQotCi1ib29sIFZhbGlkYXRlTGltaXRhdGlv
bnM6OndpdGhpbkxvb3BCb2R5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gIW1Mb29wU3RhY2suZW1w
dHkoKTsKLX0KLQotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjppc0xvb3BJbmRleChjb25zdCBU
SW50ZXJtU3ltYm9sKiBzeW1ib2wpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElzTG9vcEluZGV4KHN5
bWJvbCwgbUxvb3BTdGFjayk7Ci19Ci0KLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRh
dGVMb29wVHlwZShUSW50ZXJtTG9vcCogbm9kZSkgewotICAgIFRMb29wVHlwZSB0eXBlID0gbm9k
ZS0+Z2V0VHlwZSgpOwotICAgIGlmICh0eXBlID09IEVMb29wRm9yKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIC8vIFJlamVjdCB3aGlsZSBhbmQgZG8td2hpbGUgbG9vcHMuCi0gICAgZXJy
b3Iobm9kZS0+Z2V0TGluZSgpLAotICAgICAgICAgICJUaGlzIHR5cGUgb2YgbG9vcCBpcyBub3Qg
YWxsb3dlZCIsCi0gICAgICAgICAgdHlwZSA9PSBFTG9vcFdoaWxlID8gIndoaWxlIiA6ICJkbyIp
OwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxp
ZGF0ZUZvckxvb3BIZWFkZXIoVEludGVybUxvb3AqIG5vZGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTG9vcEluZm8qIGluZm8pCi17Ci0gICAgQVNT
RVJUKG5vZGUtPmdldFR5cGUoKSA9PSBFTG9vcEZvcik7Ci0KLSAgICAvLwotICAgIC8vIFRoZSBm
b3Igc3RhdGVtZW50IGhhcyB0aGUgZm9ybToKLSAgICAvLyAgICBmb3IgKCBpbml0LWRlY2xhcmF0
aW9uIDsgY29uZGl0aW9uIDsgZXhwcmVzc2lvbiApIHN0YXRlbWVudAotICAgIC8vCi0gICAgaWYg
KCF2YWxpZGF0ZUZvckxvb3BJbml0KG5vZGUsIGluZm8pKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKCF2YWxpZGF0ZUZvckxvb3BDb25kKG5vZGUsIGluZm8pKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKCF2YWxpZGF0ZUZvckxvb3BFeHByKG5vZGUsIGluZm8pKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBWYWxpZGF0
ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvb3BJbml0KFRJbnRlcm1Mb29wKiBub2RlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRMb29wSW5mbyogaW5m
bykKLXsKLSAgICBUSW50ZXJtTm9kZSogaW5pdCA9IG5vZGUtPmdldEluaXQoKTsKLSAgICBpZiAo
aW5pdCA9PSBOVUxMKSB7Ci0gICAgICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgIk1pc3Npbmcg
aW5pdCBkZWNsYXJhdGlvbiIsICJmb3IiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIC8vCi0gICAgLy8gaW5pdC1kZWNsYXJhdGlvbiBoYXMgdGhlIGZvcm06Ci0gICAgLy8g
ICAgIHR5cGUtc3BlY2lmaWVyIGlkZW50aWZpZXIgPSBjb25zdGFudC1leHByZXNzaW9uCi0gICAg
Ly8KLSAgICBUSW50ZXJtQWdncmVnYXRlKiBkZWNsID0gaW5pdC0+Z2V0QXNBZ2dyZWdhdGUoKTsK
LSAgICBpZiAoKGRlY2wgPT0gTlVMTCkgfHwgKGRlY2wtPmdldE9wKCkgIT0gRU9wRGVjbGFyYXRp
b24pKSB7Ci0gICAgICAgIGVycm9yKGluaXQtPmdldExpbmUoKSwgIkludmFsaWQgaW5pdCBkZWNs
YXJhdGlvbiIsICJmb3IiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAvLyBU
byBrZWVwIHRoaW5ncyBzaW1wbGUgZG8gbm90IGFsbG93IGRlY2xhcmF0aW9uIGxpc3QuCi0gICAg
VEludGVybVNlcXVlbmNlJiBkZWNsU2VxID0gZGVjbC0+Z2V0U2VxdWVuY2UoKTsKLSAgICBpZiAo
ZGVjbFNlcS5zaXplKCkgIT0gMSkgewotICAgICAgICBlcnJvcihkZWNsLT5nZXRMaW5lKCksICJJ
bnZhbGlkIGluaXQgZGVjbGFyYXRpb24iLCAiZm9yIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgVEludGVybUJpbmFyeSogZGVjbEluaXQgPSBkZWNsU2VxWzBdLT5nZXRBc0Jp
bmFyeU5vZGUoKTsKLSAgICBpZiAoKGRlY2xJbml0ID09IE5VTEwpIHx8IChkZWNsSW5pdC0+Z2V0
T3AoKSAhPSBFT3BJbml0aWFsaXplKSkgewotICAgICAgICBlcnJvcihkZWNsLT5nZXRMaW5lKCks
ICJJbnZhbGlkIGluaXQgZGVjbGFyYXRpb24iLCAiZm9yIik7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gZGVjbEluaXQtPmdldExlZnQo
KS0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0gICAgaWYgKHN5bWJvbCA9PSBOVUxMKSB7Ci0gICAgICAg
IGVycm9yKGRlY2xJbml0LT5nZXRMaW5lKCksICJJbnZhbGlkIGluaXQgZGVjbGFyYXRpb24iLCAi
Zm9yIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgLy8gVGhlIGxvb3AgaW5k
ZXggaGFzIHR5cGUgaW50IG9yIGZsb2F0LgotICAgIFRCYXNpY1R5cGUgdHlwZSA9IHN5bWJvbC0+
Z2V0QmFzaWNUeXBlKCk7Ci0gICAgaWYgKCh0eXBlICE9IEVidEludCkgJiYgKHR5cGUgIT0gRWJ0
RmxvYXQpKSB7Ci0gICAgICAgIGVycm9yKHN5bWJvbC0+Z2V0TGluZSgpLAotICAgICAgICAgICAg
ICAiSW52YWxpZCB0eXBlIGZvciBsb29wIGluZGV4IiwgZ2V0QmFzaWNTdHJpbmcodHlwZSkpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIFRoZSBsb29wIGluZGV4IGlzIGlu
aXRpYWxpemVkIHdpdGggY29uc3RhbnQgZXhwcmVzc2lvbi4KLSAgICBpZiAoIWlzQ29uc3RFeHBy
KGRlY2xJbml0LT5nZXRSaWdodCgpKSkgewotICAgICAgICBlcnJvcihkZWNsSW5pdC0+Z2V0TGlu
ZSgpLAotICAgICAgICAgICAgICAiTG9vcCBpbmRleCBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgd2l0
aCBub24tY29uc3RhbnQgZXhwcmVzc2lvbiIsCi0gICAgICAgICAgICAgIHN5bWJvbC0+Z2V0U3lt
Ym9sKCkuY19zdHIoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbmZv
LT5pbmRleC5pZCA9IHN5bWJvbC0+Z2V0SWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvb3BDb25kKFRJbnRlcm1Mb29wKiBu
b2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRMb29w
SW5mbyogaW5mbykKLXsKLSAgICBUSW50ZXJtTm9kZSogY29uZCA9IG5vZGUtPmdldENvbmRpdGlv
bigpOwotICAgIGlmIChjb25kID09IE5VTEwpIHsKLSAgICAgICAgZXJyb3Iobm9kZS0+Z2V0TGlu
ZSgpLCAiTWlzc2luZyBjb25kaXRpb24iLCAiZm9yIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgLy8KLSAgICAvLyBjb25kaXRpb24gaGFzIHRoZSBmb3JtOgotICAgIC8vICAg
ICBsb29wX2luZGV4IHJlbGF0aW9uYWxfb3BlcmF0b3IgY29uc3RhbnRfZXhwcmVzc2lvbgotICAg
IC8vCi0gICAgVEludGVybUJpbmFyeSogYmluT3AgPSBjb25kLT5nZXRBc0JpbmFyeU5vZGUoKTsK
LSAgICBpZiAoYmluT3AgPT0gTlVMTCkgewotICAgICAgICBlcnJvcihub2RlLT5nZXRMaW5lKCks
ICJJbnZhbGlkIGNvbmRpdGlvbiIsICJmb3IiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICAvLyBMb29wIGluZGV4IHNob3VsZCBiZSB0byB0aGUgbGVmdCBvZiByZWxhdGlvbmFs
IG9wZXJhdG9yLgotICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGJpbk9wLT5nZXRMZWZ0KCkt
PmdldEFzU3ltYm9sTm9kZSgpOwotICAgIGlmIChzeW1ib2wgPT0gTlVMTCkgewotICAgICAgICBl
cnJvcihiaW5PcC0+Z2V0TGluZSgpLCAiSW52YWxpZCBjb25kaXRpb24iLCAiZm9yIik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHN5bWJvbC0+Z2V0SWQoKSAhPSBpbmZv
LT5pbmRleC5pZCkgewotICAgICAgICBlcnJvcihzeW1ib2wtPmdldExpbmUoKSwKLSAgICAgICAg
ICAgICAgIkV4cGVjdGVkIGxvb3AgaW5kZXgiLCBzeW1ib2wtPmdldFN5bWJvbCgpLmNfc3RyKCkp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIFJlbGF0aW9uYWwgb3BlcmF0
b3IgaXMgb25lIG9mOiA+ID49IDwgPD0gPT0gb3IgIT0uCi0gICAgc3dpdGNoIChiaW5PcC0+Z2V0
T3AoKSkgewotICAgICAgY2FzZSBFT3BFcXVhbDoKLSAgICAgIGNhc2UgRU9wTm90RXF1YWw6Ci0g
ICAgICBjYXNlIEVPcExlc3NUaGFuOgotICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjoKLSAgICAg
IGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoKLSAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBlcnJvcihiaW5PcC0+Z2V0
TGluZSgpLAotICAgICAgICAgICAgICAiSW52YWxpZCByZWxhdGlvbmFsIG9wZXJhdG9yIiwKLSAg
ICAgICAgICAgICAgZ2V0T3BlcmF0b3JTdHJpbmcoYmluT3AtPmdldE9wKCkpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIC8vIExvb3AgaW5kZXggbXVzdCBiZSBjb21wYXJlZCB3aXRoIGEg
Y29uc3RhbnQuCi0gICAgaWYgKCFpc0NvbnN0RXhwcihiaW5PcC0+Z2V0UmlnaHQoKSkpIHsKLSAg
ICAgICAgZXJyb3IoYmluT3AtPmdldExpbmUoKSwKLSAgICAgICAgICAgICAgIkxvb3AgaW5kZXgg
Y2Fubm90IGJlIGNvbXBhcmVkIHdpdGggbm9uLWNvbnN0YW50IGV4cHJlc3Npb24iLAotICAgICAg
ICAgICAgICBzeW1ib2wtPmdldFN5bWJvbCgpLmNfc3RyKCkpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmFsaWRhdGVMaW1pdGF0
aW9uczo6dmFsaWRhdGVGb3JMb29wRXhwcihUSW50ZXJtTG9vcCogbm9kZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTG9vcEluZm8qIGluZm8pCi17Ci0g
ICAgVEludGVybU5vZGUqIGV4cHIgPSBub2RlLT5nZXRFeHByZXNzaW9uKCk7Ci0gICAgaWYgKGV4
cHIgPT0gTlVMTCkgewotICAgICAgICBlcnJvcihub2RlLT5nZXRMaW5lKCksICJNaXNzaW5nIGV4
cHJlc3Npb24iLCAiZm9yIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAv
LyBmb3IgZXhwcmVzc2lvbiBoYXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9ybXM6Ci0gICAgLy8g
ICAgIGxvb3BfaW5kZXgrKwotICAgIC8vICAgICBsb29wX2luZGV4LS0KLSAgICAvLyAgICAgbG9v
cF9pbmRleCArPSBjb25zdGFudF9leHByZXNzaW9uCi0gICAgLy8gICAgIGxvb3BfaW5kZXggLT0g
Y29uc3RhbnRfZXhwcmVzc2lvbgotICAgIC8vICAgICArK2xvb3BfaW5kZXgKLSAgICAvLyAgICAg
LS1sb29wX2luZGV4Ci0gICAgLy8gVGhlIGxhc3QgdHdvIGZvcm1zIGFyZSBub3Qgc3BlY2lmaWVk
IGluIHRoZSBzcGVjLCBidXQgSSBhbSBhc3N1bWluZwotICAgIC8vIGl0cyBhbiBvdmVyc2lnaHQu
Ci0gICAgVEludGVybVVuYXJ5KiB1bk9wID0gZXhwci0+Z2V0QXNVbmFyeU5vZGUoKTsKLSAgICBU
SW50ZXJtQmluYXJ5KiBiaW5PcCA9IHVuT3AgPyBOVUxMIDogZXhwci0+Z2V0QXNCaW5hcnlOb2Rl
KCk7Ci0KLSAgICBUT3BlcmF0b3Igb3AgPSBFT3BOdWxsOwotICAgIFRJbnRlcm1TeW1ib2wqIHN5
bWJvbCA9IE5VTEw7Ci0gICAgaWYgKHVuT3AgIT0gTlVMTCkgewotICAgICAgICBvcCA9IHVuT3At
PmdldE9wKCk7Ci0gICAgICAgIHN5bWJvbCA9IHVuT3AtPmdldE9wZXJhbmQoKS0+Z2V0QXNTeW1i
b2xOb2RlKCk7Ci0gICAgfSBlbHNlIGlmIChiaW5PcCAhPSBOVUxMKSB7Ci0gICAgICAgIG9wID0g
YmluT3AtPmdldE9wKCk7Ci0gICAgICAgIHN5bWJvbCA9IGJpbk9wLT5nZXRMZWZ0KCktPmdldEFz
U3ltYm9sTm9kZSgpOwotICAgIH0KLQotICAgIC8vIFRoZSBvcGVyYW5kIG11c3QgYmUgbG9vcCBp
bmRleC4KLSAgICBpZiAoc3ltYm9sID09IE5VTEwpIHsKLSAgICAgICAgZXJyb3IoZXhwci0+Z2V0
TGluZSgpLCAiSW52YWxpZCBleHByZXNzaW9uIiwgImZvciIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIGlmIChzeW1ib2wtPmdldElkKCkgIT0gaW5mby0+aW5kZXguaWQpIHsK
LSAgICAgICAgZXJyb3Ioc3ltYm9sLT5nZXRMaW5lKCksCi0gICAgICAgICAgICAgICJFeHBlY3Rl
ZCBsb29wIGluZGV4Iiwgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFRoZSBvcGVyYXRvciBpcyBvbmUgb2Y6ICsrIC0t
ICs9IC09LgotICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50
OgotICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6Ci0gICAgICAgIGNhc2UgRU9wUHJlSW5j
cmVtZW50OgotICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDoKLSAgICAgICAgICAgIEFTU0VS
VCgodW5PcCAhPSBOVUxMKSAmJiAoYmluT3AgPT0gTlVMTCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgRU9wQWRkQXNzaWduOgotICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjoK
LSAgICAgICAgICAgIEFTU0VSVCgodW5PcCA9PSBOVUxMKSAmJiAoYmluT3AgIT0gTlVMTCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBlcnJvcihl
eHByLT5nZXRMaW5lKCksICJJbnZhbGlkIG9wZXJhdG9yIiwgZ2V0T3BlcmF0b3JTdHJpbmcob3Ap
KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBMb29wIGluZGV4
IG11c3QgYmUgaW5jcmVtZW50ZWQvZGVjcmVtZW50ZWQgd2l0aCBhIGNvbnN0YW50LgotICAgIGlm
IChiaW5PcCAhPSBOVUxMKSB7Ci0gICAgICAgIGlmICghaXNDb25zdEV4cHIoYmluT3AtPmdldFJp
Z2h0KCkpKSB7Ci0gICAgICAgICAgICBlcnJvcihiaW5PcC0+Z2V0TGluZSgpLAotICAgICAgICAg
ICAgICAgICAgIkxvb3AgaW5kZXggY2Fubm90IGJlIG1vZGlmaWVkIGJ5IG5vbi1jb25zdGFudCBl
eHByZXNzaW9uIiwKLSAgICAgICAgICAgICAgICAgIHN5bWJvbC0+Z2V0U3ltYm9sKCkuY19zdHIo
KSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZ1bmN0
aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBub2RlKQotewotICAgIEFTU0VSVChub2RlLT5nZXRP
cCgpID09IEVPcEZ1bmN0aW9uQ2FsbCk7Ci0KLSAgICAvLyBJZiBub3Qgd2l0aGluIGxvb3AgYm9k
eSwgdGhlcmUgaXMgbm90aGluZyB0byBjaGVjay4KLSAgICBpZiAoIXdpdGhpbkxvb3BCb2R5KCkp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gTGlzdCBvZiBwYXJhbSBpbmRpY2VzIGZv
ciB3aGljaCBsb29wIGluZGljZXMgYXJlIHVzZWQgYXMgYXJndW1lbnQuCi0gICAgdHlwZWRlZiBz
dGQ6OnZlY3RvcjxzaXplX3Q+IFBhcmFtSW5kZXg7Ci0gICAgUGFyYW1JbmRleCBwSW5kZXg7Ci0g
ICAgVEludGVybVNlcXVlbmNlJiBwYXJhbXMgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOwotICAgIGZv
ciAoVEludGVybVNlcXVlbmNlOjpzaXplX3R5cGUgaSA9IDA7IGkgPCBwYXJhbXMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gcGFyYW1zW2ldLT5nZXRBc1N5
bWJvbE5vZGUoKTsKLSAgICAgICAgaWYgKHN5bWJvbCAmJiBpc0xvb3BJbmRleChzeW1ib2wpKQot
ICAgICAgICAgICAgcEluZGV4LnB1c2hfYmFjayhpKTsKLSAgICB9Ci0gICAgLy8gSWYgbm9uZSBv
ZiB0aGUgbG9vcCBpbmRpY2VzIGFyZSB1c2VkIGFzIGFyZ3VtZW50cywKLSAgICAvLyB0aGVyZSBp
cyBub3RoaW5nIHRvIGNoZWNrLgotICAgIGlmIChwSW5kZXguZW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBib29sIHZhbGlkID0gdHJ1ZTsKLSAgICBUU3ltYm9sVGFibGUmIHN5
bWJvbFRhYmxlID0gR2V0R2xvYmFsUGFyc2VDb250ZXh0KCktPnN5bWJvbFRhYmxlOwotICAgIFRT
eW1ib2wqIHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQobm9kZS0+Z2V0TmFtZSgpKTsKLSAgICBB
U1NFUlQoc3ltYm9sICYmIHN5bWJvbC0+aXNGdW5jdGlvbigpKTsKLSAgICBURnVuY3Rpb24qIGZ1
bmN0aW9uID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oc3ltYm9sKTsKLSAgICBmb3IgKFBhcmFt
SW5kZXg6OmNvbnN0X2l0ZXJhdG9yIGkgPSBwSW5kZXguYmVnaW4oKTsKLSAgICAgICAgIGkgIT0g
cEluZGV4LmVuZCgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgVFBhcmFtZXRlciYgcGFyYW0gPSBm
dW5jdGlvbi0+Z2V0UGFyYW0oKmkpOwotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJhbS50
eXBlLT5nZXRRdWFsaWZpZXIoKTsKLSAgICAgICAgaWYgKChxdWFsID09IEV2cU91dCkgfHwgKHF1
YWwgPT0gRXZxSW5PdXQpKSB7Ci0gICAgICAgICAgICBlcnJvcihwYXJhbXNbKmldLT5nZXRMaW5l
KCksCi0gICAgICAgICAgICAgICAgICAiTG9vcCBpbmRleCBjYW5ub3QgYmUgdXNlZCBhcyBhcmd1
bWVudCB0byBhIGZ1bmN0aW9uIG91dCBvciBpbm91dCBwYXJhbWV0ZXIiLAotICAgICAgICAgICAg
ICAgICAgcGFyYW1zWyppXS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3RyKCkp
OwotICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJl
dHVybiB2YWxpZDsKLX0KLQotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZU9wZXJh
dGlvbihUSW50ZXJtT3BlcmF0b3IqIG5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlKiBvcGVyYW5kKSB7Ci0gICAgLy8gQ2hlY2sgaWYg
bG9vcCBpbmRleCBpcyBtb2RpZmllZCBpbiB0aGUgbG9vcCBib2R5LgotICAgIGlmICghd2l0aGlu
TG9vcEJvZHkoKSB8fCAhbm9kZS0+aXNBc3NpZ25tZW50KCkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgY29uc3QgVEludGVybVN5bWJvbCogc3ltYm9sID0gb3BlcmFuZC0+Z2V0QXNTeW1i
b2xOb2RlKCk7Ci0gICAgaWYgKHN5bWJvbCAmJiBpc0xvb3BJbmRleChzeW1ib2wpKSB7Ci0gICAg
ICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwKLSAgICAgICAgICAgICAgIkxvb3AgaW5kZXggY2Fu
bm90IGJlIHN0YXRpY2FsbHkgYXNzaWduZWQgdG8gd2l0aGluIHRoZSBib2R5IG9mIHRoZSBsb29w
IiwKLSAgICAgICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6aXNDb25zdEV4
cHIoVEludGVybU5vZGUqIG5vZGUpCi17Ci0gICAgQVNTRVJUKG5vZGUgIT0gTlVMTCk7Ci0gICAg
cmV0dXJuIG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpICE9IE5VTEw7Ci19Ci0KLWJvb2wgVmFs
aWRhdGVMaW1pdGF0aW9uczo6aXNDb25zdEluZGV4RXhwcihUSW50ZXJtTm9kZSogbm9kZSkKLXsK
LSAgICBBU1NFUlQobm9kZSAhPSBOVUxMKTsKLQotICAgIFZhbGlkYXRlQ29uc3RJbmRleEV4cHIg
dmFsaWRhdGUobUxvb3BTdGFjayk7Ci0gICAgbm9kZS0+dHJhdmVyc2UoJnZhbGlkYXRlKTsKLSAg
ICByZXR1cm4gdmFsaWRhdGUuaXNWYWxpZCgpOwotfQotCi1ib29sIFZhbGlkYXRlTGltaXRhdGlv
bnM6OnZhbGlkYXRlSW5kZXhpbmcoVEludGVybUJpbmFyeSogbm9kZSkKLXsKLSAgICBBU1NFUlQo
KG5vZGUtPmdldE9wKCkgPT0gRU9wSW5kZXhEaXJlY3QpIHx8Ci0gICAgICAgICAgIChub2RlLT5n
ZXRPcCgpID09IEVPcEluZGV4SW5kaXJlY3QpKTsKLQotICAgIGJvb2wgdmFsaWQgPSB0cnVlOwot
ICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBub2RlLT5nZXRSaWdodCgpOwotICAgIC8vIFRoZSBp
bmRleCBleHByZXNzaW9uIG11c3QgaGF2ZSBpbnRlZ3JhbCB0eXBlLgotICAgIGlmICghaW5kZXgt
PmlzU2NhbGFyKCkgfHwgKGluZGV4LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRJbnQpKSB7Ci0gICAg
ICAgIGVycm9yKGluZGV4LT5nZXRMaW5lKCksCi0gICAgICAgICAgICAgICJJbmRleCBleHByZXNz
aW9uIG11c3QgaGF2ZSBpbnRlZ3JhbCB0eXBlIiwKLSAgICAgICAgICAgICAgaW5kZXgtPmdldENv
bXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7Ci0gICAgICAgIHZhbGlkID0gZmFsc2U7Ci0gICAgfQot
ICAgIC8vIFRoZSBpbmRleCBleHBlc3Npb24gbXVzdCBiZSBhIGNvbnN0YW50LWluZGV4LWV4cHJl
c3Npb24gdW5sZXNzCi0gICAgLy8gdGhlIG9wZXJhbmQgaXMgYSB1bmlmb3JtIGluIGEgdmVydGV4
IHNoYWRlci4KLSAgICBUSW50ZXJtVHlwZWQqIG9wZXJhbmQgPSBub2RlLT5nZXRMZWZ0KCk7Ci0g
ICAgYm9vbCBza2lwID0gKG1TaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpICYmCi0gICAg
ICAgICAgICAgICAgKG9wZXJhbmQtPmdldFF1YWxpZmllcigpID09IEV2cVVuaWZvcm0pOwotICAg
IGlmICghc2tpcCAmJiAhaXNDb25zdEluZGV4RXhwcihpbmRleCkpIHsKLSAgICAgICAgZXJyb3Io
aW5kZXgtPmdldExpbmUoKSwgIkluZGV4IGV4cHJlc3Npb24gbXVzdCBiZSBjb25zdGFudCIsICJb
XSIpOwotICAgICAgICB2YWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdmFsaWQ7Ci19
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYWxp
ZGF0ZUxpbWl0YXRpb25zLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
VmFsaWRhdGVMaW1pdGF0aW9ucy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODM1
Y2IzYzIyNmU2MGYzZjZlZjhlYzJmNjY0OTBjYTEyYWFiNGI0Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCww
IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgotI2lu
Y2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotCi1jbGFzcyBUSW5mb1NpbmtCYXNlOwot
Ci1zdHJ1Y3QgVExvb3BJbmZvIHsKLSAgICBzdHJ1Y3QgVEluZGV4IHsKLSAgICAgICAgaW50IGlk
OyAgLy8gc3ltYm9sIGlkLgotICAgIH0gaW5kZXg7Ci0gICAgVEludGVybUxvb3AqIGxvb3A7Ci19
OwotdHlwZWRlZiBUVmVjdG9yPFRMb29wSW5mbz4gVExvb3BTdGFjazsKLQotLy8gVHJhdmVyc2Vz
IGludGVybWVkaWF0ZSB0cmVlIHRvIGVuc3VyZSB0aGF0IHRoZSBzaGFkZXIgZG9lcyBub3QgZXhj
ZWVkIHRoZQotLy8gbWluaW11bSBmdW5jdGlvbmFsaXR5IG1hbmRhdGVkIGluIEdMU0wgMS4wIHNw
ZWMsIEFwcGVuZGl4IEEuCi1jbGFzcyBWYWxpZGF0ZUxpbWl0YXRpb25zIDogcHVibGljIFRJbnRl
cm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIFZhbGlkYXRlTGltaXRhdGlvbnMoU2hTaGFkZXJU
eXBlIHNoYWRlclR5cGUsIFRJbmZvU2lua0Jhc2UmIHNpbmspOwotCi0gICAgaW50IG51bUVycm9y
cygpIGNvbnN0IHsgcmV0dXJuIG1OdW1FcnJvcnM7IH0KLQotICAgIHZpcnR1YWwgYm9vbCB2aXNp
dEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSopOwotICAgIHZpcnR1YWwgYm9vbCB2aXNpdFVu
YXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkqKTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdh
dGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRMb29w
KFZpc2l0LCBUSW50ZXJtTG9vcCopOwotCi1wcml2YXRlOgotICAgIHZvaWQgZXJyb3IoVFNvdXJj
ZUxvYyBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4pOwotCi0gICAg
Ym9vbCB3aXRoaW5Mb29wQm9keSgpIGNvbnN0OwotICAgIGJvb2wgaXNMb29wSW5kZXgoY29uc3Qg
VEludGVybVN5bWJvbCogc3ltYm9sKSBjb25zdDsKLSAgICBib29sIHZhbGlkYXRlTG9vcFR5cGUo
VEludGVybUxvb3AqIG5vZGUpOwotICAgIGJvb2wgdmFsaWRhdGVGb3JMb29wSGVhZGVyKFRJbnRl
cm1Mb29wKiBub2RlLCBUTG9vcEluZm8qIGluZm8pOwotICAgIGJvb2wgdmFsaWRhdGVGb3JMb29w
SW5pdChUSW50ZXJtTG9vcCogbm9kZSwgVExvb3BJbmZvKiBpbmZvKTsKLSAgICBib29sIHZhbGlk
YXRlRm9yTG9vcENvbmQoVEludGVybUxvb3AqIG5vZGUsIFRMb29wSW5mbyogaW5mbyk7Ci0gICAg
Ym9vbCB2YWxpZGF0ZUZvckxvb3BFeHByKFRJbnRlcm1Mb29wKiBub2RlLCBUTG9vcEluZm8qIGlu
Zm8pOwotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBub25lIG9mIHRoZSBsb29wIGluZGljZXMgaXMg
dXNlZCBhcyB0aGUgYXJndW1lbnQgdG8KLSAgICAvLyB0aGUgZ2l2ZW4gZnVuY3Rpb24gb3V0IG9y
IGlub3V0IHBhcmFtZXRlci4KLSAgICBib29sIHZhbGlkYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1B
Z2dyZWdhdGUqIG5vZGUpOwotICAgIGJvb2wgdmFsaWRhdGVPcGVyYXRpb24oVEludGVybU9wZXJh
dG9yKiBub2RlLCBUSW50ZXJtTm9kZSogb3BlcmFuZCk7Ci0KLSAgICAvLyBSZXR1cm5zIHRydWUg
aWYgaW5kZXhpbmcgZG9lcyBub3QgZXhjZWVkIHRoZSBtaW5pbXVtIGZ1bmN0aW9uYWxpdHkKLSAg
ICAvLyBtYW5kYXRlZCBpbiBHTFNMIDEuMCBzcGVjLCBBcHBlbmRpeCBBLCBTZWN0aW9uIDUuCi0g
ICAgYm9vbCBpc0NvbnN0RXhwcihUSW50ZXJtTm9kZSogbm9kZSk7Ci0gICAgYm9vbCBpc0NvbnN0
SW5kZXhFeHByKFRJbnRlcm1Ob2RlKiBub2RlKTsKLSAgICBib29sIHZhbGlkYXRlSW5kZXhpbmco
VEludGVybUJpbmFyeSogbm9kZSk7Ci0KLSAgICBTaFNoYWRlclR5cGUgbVNoYWRlclR5cGU7Ci0g
ICAgVEluZm9TaW5rQmFzZSYgbVNpbms7Ci0gICAgaW50IG1OdW1FcnJvcnM7Ci0gICAgVExvb3BT
dGFjayBtTG9vcFN0YWNrOwotfTsKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvVmFyaWFibGVJbmZvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMzRlYTRiNjU5MjY0ZDYyMjQyODkwNmZjYTg2YjdjOWYwZmI0NzMwMC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVJbmZvLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMw
OCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvVmFyaWFi
bGVJbmZvLmgiCi0KLW5hbWVzcGFjZSB7Ci0KLVRTdHJpbmcgYXJyYXlCcmFja2V0cyhpbnQgaW5k
ZXgpCi17Ci0gICAgVFN0cmluZ1N0cmVhbSBzdHJlYW07Ci0gICAgc3RyZWFtIDw8ICJbIiA8PCBp
bmRleCA8PCAiXSI7Ci0gICAgcmV0dXJuIHN0cmVhbS5zdHIoKTsKLX0KLQotLy8gUmV0dXJucyB0
aGUgZGF0YSB0eXBlIGZvciBhbiBhdHRyaWJ1dGUsIHVuaWZvcm0sIG9yIHZhcnlpbmcuCi1TaERh
dGFUeXBlIGdldFZhcmlhYmxlRGF0YVR5cGUoY29uc3QgVFR5cGUmIHR5cGUpCi17Ci0gICAgc3dp
dGNoICh0eXBlLmdldEJhc2ljVHlwZSgpKSB7Ci0gICAgICBjYXNlIEVidEZsb2F0OgotICAgICAg
ICAgIGlmICh0eXBlLmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdl
dE5vbWluYWxTaXplKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBTSF9GTE9B
VF9NQVQyOwotICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFNIX0ZMT0FUX01BVDM7Ci0g
ICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gU0hfRkxPQVRfTUFUNDsKLSAgICAgICAgICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
fSBlbHNlIGlmICh0eXBlLmlzVmVjdG9yKCkpIHsKLSAgICAgICAgICAgICAgc3dpdGNoICh0eXBl
LmdldE5vbWluYWxTaXplKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBTSF9G
TE9BVF9WRUMyOwotICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFNIX0ZMT0FUX1ZFQzM7
Ci0gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gU0hfRkxPQVRfVkVDNDsKLSAgICAgICAg
ICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgcmV0dXJuIFNIX0ZMT0FUOwotICAgICAgICAgIH0K
LSAgICAgIGNhc2UgRWJ0SW50OgotICAgICAgICAgIGlmICh0eXBlLmlzTWF0cml4KCkpIHsKLSAg
ICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUuaXNW
ZWN0b3IoKSkgewotICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkg
ewotICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIFNIX0lOVF9WRUMyOwotICAgICAgICAg
ICAgICAgIGNhc2UgMzogcmV0dXJuIFNIX0lOVF9WRUMzOwotICAgICAgICAgICAgICAgIGNhc2Ug
NDogcmV0dXJuIFNIX0lOVF9WRUM0OwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICByZXR1cm4gU0hfSU5UOwotICAgICAgICAgIH0KLSAgICAgIGNhc2UgRWJ0Qm9vbDoKLSAgICAg
ICAgICBpZiAodHlwZS5pc01hdHJpeCgpKSB7Ci0gICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7
Ci0gICAgICAgICAgfSBlbHNlIGlmICh0eXBlLmlzVmVjdG9yKCkpIHsKLSAgICAgICAgICAgICAg
c3dpdGNoICh0eXBlLmdldE5vbWluYWxTaXplKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDI6
IHJldHVybiBTSF9CT09MX1ZFQzI7Ci0gICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gU0hf
Qk9PTF9WRUMzOwotICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFNIX0JPT0xfVkVDNDsK
LSAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgcmV0dXJuIFNIX0JPT0w7Ci0gICAg
ICAgICAgfQotICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6IHJldHVybiBTSF9TQU1QTEVSXzJEOwot
ICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZTogcmV0dXJuIFNIX1NBTVBMRVJfQ1VCRTsKLSAgICAg
IGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOiByZXR1cm4gU0hfU0FNUExFUl9FWFRFUk5BTF9P
RVM7Ci0gICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6IHJldHVybiBTSF9TQU1QTEVSXzJEX1JF
Q1RfQVJCOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0gICAgcmV0dXJu
IFNIX05PTkU7Ci19Ci0KLXZvaWQgZ2V0QnVpbHRJblZhcmlhYmxlSW5mbyhjb25zdCBUVHlwZSYg
dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nJiBuYW1lLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcmIG1hcHBlZE5hbWUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIGluZm9MaXN0KTsK
LXZvaWQgZ2V0VXNlckRlZmluZWRWYXJpYWJsZUluZm8oY29uc3QgVFR5cGUmIHR5cGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcmIG1hcHBlZE5hbWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9MaXN0JiBpbmZvTGlzdCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVu
Y3Rpb24pOwotCi0vLyBSZXR1cm5zIGluZm8gZm9yIGFuIGF0dHJpYnV0ZSwgdW5pZm9ybSwgb3Ig
dmFyeWluZy4KLXZvaWQgZ2V0VmFyaWFibGVJbmZvKGNvbnN0IFRUeXBlJiB0eXBlLAotICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRTdHJpbmcmIG1hcHBlZE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICBUVmFyaWFi
bGVJbmZvTGlzdCYgaW5mb0xpc3QsCi0gICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlv
bjY0IGhhc2hGdW5jdGlvbikKLXsKLSAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRT
dHJ1Y3QpIHsKLSAgICAgICAgaWYgKHR5cGUuaXNBcnJheSgpKSB7Ci0gICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHR5cGUuZ2V0QXJyYXlTaXplKCk7ICsraSkgewotICAgICAgICAgICAg
ICAgIFRTdHJpbmcgbG5hbWUgPSBuYW1lICsgYXJyYXlCcmFja2V0cyhpKTsKLSAgICAgICAgICAg
ICAgICBUU3RyaW5nIGxtYXBwZWROYW1lID0gbWFwcGVkTmFtZSArIGFycmF5QnJhY2tldHMoaSk7
Ci0gICAgICAgICAgICAgICAgZ2V0VXNlckRlZmluZWRWYXJpYWJsZUluZm8odHlwZSwgbG5hbWUs
IGxtYXBwZWROYW1lLCBpbmZvTGlzdCwgaGFzaEZ1bmN0aW9uKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGdldFVzZXJEZWZpbmVkVmFyaWFibGVJbmZvKHR5
cGUsIG5hbWUsIG1hcHBlZE5hbWUsIGluZm9MaXN0LCBoYXNoRnVuY3Rpb24pOwotICAgICAgICB9
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZ2V0QnVpbHRJblZhcmlhYmxlSW5mbyh0eXBlLCBuYW1l
LCBtYXBwZWROYW1lLCBpbmZvTGlzdCk7Ci0gICAgfQotfQotCi12b2lkIGdldEJ1aWx0SW5WYXJp
YWJsZUluZm8oY29uc3QgVFR5cGUmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVFN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
U3RyaW5nJiBtYXBwZWROYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJs
ZUluZm9MaXN0JiBpbmZvTGlzdCkKLXsKLSAgICBBU1NFUlQodHlwZS5nZXRCYXNpY1R5cGUoKSAh
PSBFYnRTdHJ1Y3QpOwotCi0gICAgVFZhcmlhYmxlSW5mbyB2YXJJbmZvOwotICAgIGlmICh0eXBl
LmlzQXJyYXkoKSkgewotICAgICAgICB2YXJJbmZvLm5hbWUgPSAobmFtZSArICJbMF0iKS5jX3N0
cigpOwotICAgICAgICB2YXJJbmZvLm1hcHBlZE5hbWUgPSAobWFwcGVkTmFtZSArICJbMF0iKS5j
X3N0cigpOwotICAgICAgICB2YXJJbmZvLnNpemUgPSB0eXBlLmdldEFycmF5U2l6ZSgpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIHZhckluZm8ubmFtZSA9IG5hbWUuY19zdHIoKTsKLSAgICAgICAg
dmFySW5mby5tYXBwZWROYW1lID0gbWFwcGVkTmFtZS5jX3N0cigpOwotICAgICAgICB2YXJJbmZv
LnNpemUgPSAxOwotICAgIH0KLSAgICB2YXJJbmZvLnByZWNpc2lvbiA9IHR5cGUuZ2V0UHJlY2lz
aW9uKCk7Ci0gICAgdmFySW5mby50eXBlID0gZ2V0VmFyaWFibGVEYXRhVHlwZSh0eXBlKTsKLSAg
ICBpbmZvTGlzdC5wdXNoX2JhY2sodmFySW5mbyk7Ci19Ci0KLXZvaWQgZ2V0VXNlckRlZmluZWRW
YXJpYWJsZUluZm8oY29uc3QgVFR5cGUmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRTdHJpbmcmIG1hcHBlZE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFRWYXJpYWJsZUluZm9MaXN0JiBpbmZvTGlzdCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24pCi17Ci0gICAgQVNTRVJU
KHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KTsKLQotICAgIGNvbnN0IFRGaWVsZExp
c3QmIGZpZWxkcyA9IHR5cGUuZ2V0U3RydWN0KCktPmZpZWxkcygpOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFRUeXBlJiBm
aWVsZFR5cGUgPSAqKGZpZWxkc1tpXS0+dHlwZSgpKTsKLSAgICAgICAgY29uc3QgVFN0cmluZyYg
ZmllbGROYW1lID0gZmllbGRzW2ldLT5uYW1lKCk7Ci0gICAgICAgIGdldFZhcmlhYmxlSW5mbyhm
aWVsZFR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lICsgIi4iICsgZmllbGROYW1l
LAotICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGVkTmFtZSArICIuIiArIFRJbnRlcm1UcmF2
ZXJzZXI6Omhhc2goZmllbGROYW1lLCBoYXNoRnVuY3Rpb24pLAotICAgICAgICAgICAgICAgICAg
ICAgICAgaW5mb0xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICBoYXNoRnVuY3Rpb24pOwot
ICAgIH0KLX0KLQotVFZhcmlhYmxlSW5mbyogZmluZFZhcmlhYmxlKGNvbnN0IFRUeXBlJiB0eXBl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIGluZm9MaXN0KQotewot
ICAgIC8vIFRPRE8oem1vKTogb3B0aW1pemUgdGhpcyBmdW5jdGlvbi4KLSAgICBUU3RyaW5nIG15
TmFtZSA9IG5hbWU7Ci0gICAgaWYgKHR5cGUuaXNBcnJheSgpKQotICAgICAgICBteU5hbWUgKz0g
IlswXSI7Ci0gICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IGluZm9MaXN0LnNpemUoKTsgKytp
aSkKLSAgICB7Ci0gICAgICAgIGlmIChpbmZvTGlzdFtpaV0ubmFtZS5jX3N0cigpID09IG15TmFt
ZSkKLSAgICAgICAgICAgIHJldHVybiAmKGluZm9MaXN0W2lpXSk7Ci0gICAgfQotICAgIHJldHVy
biBOVUxMOwotfQotCi19ICAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCi0KLVRWYXJpYWJsZUluZm86
OlRWYXJpYWJsZUluZm8oKQotICAgIDogdHlwZShTSF9OT05FKSwKLSAgICAgIHNpemUoMCksCi0g
ICAgICBwcmVjaXNpb24oRWJwVW5kZWZpbmVkKSwKLSAgICAgIHN0YXRpY1VzZShmYWxzZSkKLXsK
LX0KLQotVFZhcmlhYmxlSW5mbzo6VFZhcmlhYmxlSW5mbyhTaERhdGFUeXBlIHR5cGUsIGludCBz
aXplKQotICAgIDogdHlwZSh0eXBlKSwKLSAgICAgIHNpemUoc2l6ZSksCi0gICAgICBwcmVjaXNp
b24oRWJwVW5kZWZpbmVkKSwKLSAgICAgIHN0YXRpY1VzZShmYWxzZSkKLXsKLX0KLQotQ29sbGVj
dFZhcmlhYmxlczo6Q29sbGVjdFZhcmlhYmxlcyhUVmFyaWFibGVJbmZvTGlzdCYgYXR0cmlicywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIHVu
aWZvcm1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFyaWFibGVJbmZv
TGlzdCYgdmFyeWluZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoSGFz
aEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uKQotICAgIDogbUF0dHJpYnMoYXR0cmlicyksCi0gICAg
ICBtVW5pZm9ybXModW5pZm9ybXMpLAotICAgICAgbVZhcnlpbmdzKHZhcnlpbmdzKSwKLSAgICAg
IG1Qb2ludENvb3JkQWRkZWQoZmFsc2UpLAotICAgICAgbUZyb250RmFjaW5nQWRkZWQoZmFsc2Up
LAotICAgICAgbUZyYWdDb29yZEFkZGVkKGZhbHNlKSwKLSAgICAgIG1IYXNoRnVuY3Rpb24oaGFz
aEZ1bmN0aW9uKQotewotfQotCi0vLyBXZSB3YW50IHRvIGNoZWNrIHdoZXRoZXIgYSB1bmlmb3Jt
L3ZhcnlpbmcgaXMgc3RhdGljYWxseSB1c2VkCi0vLyBiZWNhdXNlIHdlIG9ubHkgY291bnQgdGhl
IHVzZWQgb25lcyBpbiBwYWNraW5nIGNvbXB1dGluZy4KLS8vIEFsc28sIGdsX0ZyYWdDb29yZCwg
Z2xfUG9pbnRDb29yZCwgYW5kIGdsX0Zyb250RmFjaW5nIGNvdW50Ci0vLyB0b3dhcmQgdmFyeWlu
ZyBjb3VudGluZyBpZiB0aGV5IGFyZSBzdGF0aWNhbGx5IHVzZWQgaW4gYSBmcmFnbWVudAotLy8g
c2hhZGVyLgotdm9pZCBDb2xsZWN0VmFyaWFibGVzOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9s
KiBzeW1ib2wpCi17Ci0gICAgQVNTRVJUKHN5bWJvbCAhPSBOVUxMKTsKLSAgICBUVmFyaWFibGVJ
bmZvKiB2YXIgPSBOVUxMOwotICAgIHN3aXRjaCAoc3ltYm9sLT5nZXRRdWFsaWZpZXIoKSkKLSAg
ICB7Ci0gICAgY2FzZSBFdnFWYXJ5aW5nT3V0OgotICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWlu
Z091dDoKLSAgICBjYXNlIEV2cVZhcnlpbmdJbjoKLSAgICBjYXNlIEV2cUludmFyaWFudFZhcnlp
bmdJbjoKLSAgICAgICAgdmFyID0gZmluZFZhcmlhYmxlKHN5bWJvbC0+Z2V0VHlwZSgpLCBzeW1i
b2wtPmdldFN5bWJvbCgpLCBtVmFyeWluZ3MpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEV2
cVVuaWZvcm06Ci0gICAgICAgIHZhciA9IGZpbmRWYXJpYWJsZShzeW1ib2wtPmdldFR5cGUoKSwg
c3ltYm9sLT5nZXRTeW1ib2woKSwgbVVuaWZvcm1zKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBFdnFGcmFnQ29vcmQ6Ci0gICAgICAgIGlmICghbUZyYWdDb29yZEFkZGVkKSB7Ci0gICAgICAg
ICAgICBUVmFyaWFibGVJbmZvIGluZm87Ci0gICAgICAgICAgICBpbmZvLm5hbWUgPSAiZ2xfRnJh
Z0Nvb3JkIjsKLSAgICAgICAgICAgIGluZm8ubWFwcGVkTmFtZSA9ICJnbF9GcmFnQ29vcmQiOwot
ICAgICAgICAgICAgaW5mby50eXBlID0gU0hfRkxPQVRfVkVDNDsKLSAgICAgICAgICAgIGluZm8u
c2l6ZSA9IDE7Ci0gICAgICAgICAgICBpbmZvLnByZWNpc2lvbiA9IEVicE1lZGl1bTsgIC8vIFVz
ZSBtZWRpdW1wIGFzIGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlci4KLSAgICAgICAgICAgIGluZm8u
c3RhdGljVXNlID0gdHJ1ZTsKLSAgICAgICAgbVZhcnlpbmdzLnB1c2hfYmFjayhpbmZvKTsKLSAg
ICAgICAgICAgIG1GcmFnQ29vcmRBZGRlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgRXZxRnJvbnRGYWNpbmc6Ci0gICAgICAgIGlmICghbUZyb250RmFjaW5n
QWRkZWQpIHsKLSAgICAgICAgICAgIFRWYXJpYWJsZUluZm8gaW5mbzsKLSAgICAgICAgICAgIGlu
Zm8ubmFtZSA9ICJnbF9Gcm9udEZhY2luZyI7Ci0gICAgICAgICAgICBpbmZvLm1hcHBlZE5hbWUg
PSAiZ2xfRnJvbnRGYWNpbmciOwotICAgICAgICAgICAgaW5mby50eXBlID0gU0hfQk9PTDsKLSAg
ICAgICAgICAgIGluZm8uc2l6ZSA9IDE7Ci0gICAgICAgICAgICBpbmZvLnByZWNpc2lvbiA9IEVi
cFVuZGVmaW5lZDsKLSAgICAgICAgICAgIGluZm8uc3RhdGljVXNlID0gdHJ1ZTsKLSAgICAgICAg
bVZhcnlpbmdzLnB1c2hfYmFjayhpbmZvKTsKLSAgICAgICAgICAgIG1Gcm9udEZhY2luZ0FkZGVk
ID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBFdnFQb2ludENv
b3JkOgotICAgICAgICBpZiAoIW1Qb2ludENvb3JkQWRkZWQpIHsKLSAgICAgICAgICAgIFRWYXJp
YWJsZUluZm8gaW5mbzsKLSAgICAgICAgICAgIGluZm8ubmFtZSA9ICJnbF9Qb2ludENvb3JkIjsK
LSAgICAgICAgICAgIGluZm8ubWFwcGVkTmFtZSA9ICJnbF9Qb2ludENvb3JkIjsKLSAgICAgICAg
ICAgIGluZm8udHlwZSA9IFNIX0ZMT0FUX1ZFQzI7Ci0gICAgICAgICAgICBpbmZvLnNpemUgPSAx
OwotICAgICAgICAgICAgaW5mby5wcmVjaXNpb24gPSBFYnBNZWRpdW07ICAvLyBVc2UgbWVkaXVt
cCBhcyBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIuCi0gICAgICAgICAgICBpbmZvLnN0YXRpY1Vz
ZSA9IHRydWU7Ci0gICAgICAgIG1WYXJ5aW5ncy5wdXNoX2JhY2soaW5mbyk7Ci0gICAgICAgICAg
ICBtUG9pbnRDb29yZEFkZGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmICh2YXIpCi0gICAgICAg
IHZhci0+c3RhdGljVXNlID0gdHJ1ZTsKLX0KLQotYm9vbCBDb2xsZWN0VmFyaWFibGVzOjp2aXNp
dEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKLXsKLSAgICBib29sIHZp
c2l0Q2hpbGRyZW4gPSB0cnVlOwotCi0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQotICAgIHsK
LSAgICBjYXNlIEVPcERlY2xhcmF0aW9uOiB7Ci0gICAgICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5j
ZSYgc2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOwotICAgICAgICBUUXVhbGlmaWVyIHF1
YWxpZmllciA9IHNlcXVlbmNlLmZyb250KCktPmdldEFzVHlwZWQoKS0+Z2V0UXVhbGlmaWVyKCk7
Ci0gICAgICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlIHx8IHF1YWxpZmllciA9PSBF
dnFVbmlmb3JtIHx8Ci0gICAgICAgICAgICBxdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8IHF1
YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8Ci0gICAgICAgICAgICBxdWFsaWZpZXIgPT0gRXZx
SW52YXJpYW50VmFyeWluZ0luIHx8IHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0
KQotICAgICAgICB7Ci0gICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYgaW5mb0xpc3QgPSBx
dWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlID8gbUF0dHJpYnMgOgotICAgICAgICAgICAgICAgIChx
dWFsaWZpZXIgPT0gRXZxVW5pZm9ybSA/IG1Vbmlmb3JtcyA6IG1WYXJ5aW5ncyk7Ci0gICAgICAg
ICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgaSA9IHNlcXVlbmNlLmJl
Z2luKCk7Ci0gICAgICAgICAgICAgICAgIGkgIT0gc2VxdWVuY2UuZW5kKCk7ICsraSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCBUSW50ZXJtU3ltYm9sKiB2YXJpYWJsZSA9
ICgqaSktPmdldEFzU3ltYm9sTm9kZSgpOwotICAgICAgICAgICAgICAgIC8vIFRoZSBvbmx5IGNh
c2UgaW4gd2hpY2ggdGhlIHNlcXVlbmNlIHdpbGwgbm90IGNvbnRhaW4gYQotICAgICAgICAgICAg
ICAgIC8vIFRJbnRlcm1TeW1ib2wgbm9kZSBpcyBpbml0aWFsaXphdGlvbi4gSXQgd2lsbCBjb250
YWluIGEKLSAgICAgICAgICAgICAgICAvLyBUSW50ZXJCaW5hcnkgbm9kZSBpbiB0aGF0IGNhc2Uu
IFNpbmNlIGF0dHJpYnV0ZXMsIHVuaWZvcm1zLAotICAgICAgICAgICAgICAgIC8vIGFuZCB2YXJ5
aW5ncyBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgaW4gYSBzaGFkZXIsIHdlIG11c3QgaGF2ZQotICAg
ICAgICAgICAgICAgIC8vIG9ubHkgVEludGVybVN5bWJvbCBub2RlcyBpbiB0aGUgc2VxdWVuY2Uu
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhYmxlICE9IE5VTEwpOwotICAgICAgICAgICAg
ICAgIFRTdHJpbmcgcHJvY2Vzc2VkU3ltYm9sOwotICAgICAgICAgICAgICAgIGlmIChtSGFzaEZ1
bmN0aW9uID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZFN5bWJvbCA9IHZh
cmlhYmxlLT5nZXRTeW1ib2woKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIHByb2Nlc3NlZFN5bWJvbCA9IFRJbnRlcm1UcmF2ZXJzZXI6Omhhc2godmFyaWFibGUt
PmdldE9yaWdpbmFsU3ltYm9sKCksIG1IYXNoRnVuY3Rpb24pOwotICAgICAgICAgICAgICAgIGdl
dFZhcmlhYmxlSW5mbyh2YXJpYWJsZS0+Z2V0VHlwZSgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXJpYWJsZS0+Z2V0T3JpZ2luYWxTeW1ib2woKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkU3ltYm9sLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmZvTGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUhh
c2hGdW5jdGlvbik7Ci0gICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0
OiBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmlzaXRDaGlsZHJlbjsKLX0KLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzdmMmE1Zjg0ZjI2MzhlNTM3YWRlM2FmOTIy
ZmRhZmFjZmFmMDZmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uaAor
KysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5k
ZWYgQ09NUElMRVJfVkFSSUFCTEVfSU5GT19IXwotI2RlZmluZSBDT01QSUxFUl9WQVJJQUJMRV9J
TkZPX0hfCi0KLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLSNpbmNsdWRlICJjb21w
aWxlci9pbnRlcm1lZGlhdGUuaCIKLQotLy8gUHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgYSB2
YXJpYWJsZS4KLS8vIEl0IGlzIGN1cnJlbnRseSBiZWluZyB1c2VkIHRvIHN0b3JlIGluZm8gYWJv
dXQgYWN0aXZlIGF0dHJpYnMgYW5kIHVuaWZvcm1zLgotc3RydWN0IFRWYXJpYWJsZUluZm8gewot
ICAgIFRWYXJpYWJsZUluZm8oU2hEYXRhVHlwZSB0eXBlLCBpbnQgc2l6ZSk7Ci0gICAgVFZhcmlh
YmxlSW5mbygpOwotCi0gICAgVFBlcnNpc3RTdHJpbmcgbmFtZTsKLSAgICBUUGVyc2lzdFN0cmlu
ZyBtYXBwZWROYW1lOwotICAgIFNoRGF0YVR5cGUgdHlwZTsKLSAgICBpbnQgc2l6ZTsKLSAgICBU
UHJlY2lzaW9uIHByZWNpc2lvbjsKLSAgICBib29sIHN0YXRpY1VzZTsKLX07Ci10eXBlZGVmIHN0
ZDo6dmVjdG9yPFRWYXJpYWJsZUluZm8+IFRWYXJpYWJsZUluZm9MaXN0OwotCi0vLyBUcmF2ZXJz
ZXMgaW50ZXJtZWRpYXRlIHRyZWUgdG8gY29sbGVjdCBhbGwgYXR0cmlidXRlcywgdW5pZm9ybXMs
IHZhcnlpbmdzLgotY2xhc3MgQ29sbGVjdFZhcmlhYmxlcyA6IHB1YmxpYyBUSW50ZXJtVHJhdmVy
c2VyIHsKLXB1YmxpYzoKLSAgICBDb2xsZWN0VmFyaWFibGVzKFRWYXJpYWJsZUluZm9MaXN0JiBh
dHRyaWJzLAotICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIHVuaWZvcm1z
LAotICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIHZhcnlpbmdzLAotICAg
ICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24pOwotCi0gICAg
dmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKLSAgICB2aXJ0dWFsIGJv
b2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKLQotcHJpdmF0ZToK
LSAgICBUVmFyaWFibGVJbmZvTGlzdCYgbUF0dHJpYnM7Ci0gICAgVFZhcmlhYmxlSW5mb0xpc3Qm
IG1Vbmlmb3JtczsKLSAgICBUVmFyaWFibGVJbmZvTGlzdCYgbVZhcnlpbmdzOwotCi0gICAgYm9v
bCBtUG9pbnRDb29yZEFkZGVkOwotICAgIGJvb2wgbUZyb250RmFjaW5nQWRkZWQ7Ci0gICAgYm9v
bCBtRnJhZ0Nvb3JkQWRkZWQ7Ci0KLSAgICBTaEhhc2hGdW5jdGlvbjY0IG1IYXNoRnVuY3Rpb247
Ci19OwotCi0jZW5kaWYgIC8vIENPTVBJTEVSX1ZBUklBQkxFX0lORk9fSF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZVBhY2tlci5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVQYWNrZXIuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTU3Mjg3NzYzNWViMzhhNDcwZDQ3M2Iy
OTZiNWYxNzQ0YTllYTZhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZVBhY2tl
ci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyOTcgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LSNpbmNsdWRlICJjb21waWxlci9WYXJpYWJsZVBhY2tlci5oIgotCi0jaW5jbHVkZSA8YWxnb3Jp
dGhtPgotI2luY2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCi0KLW5hbWVzcGFjZSB7Ci1pbnQg
R2V0U29ydE9yZGVyKFNoRGF0YVR5cGUgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAg
ICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0OgotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
IGNhc2UgU0hfRkxPQVRfTUFUMjoKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICBjYXNl
IFNIX0ZMT0FUX1ZFQzQ6Ci0gICAgICAgIGNhc2UgU0hfSU5UX1ZFQzQ6Ci0gICAgICAgIGNhc2Ug
U0hfQk9PTF9WRUM0OgotICAgICAgICAgICAgcmV0dXJuIDI7Ci0gICAgICAgIGNhc2UgU0hfRkxP
QVRfTUFUMzoKLSAgICAgICAgICAgIHJldHVybiAzOwotICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZF
QzM6Ci0gICAgICAgIGNhc2UgU0hfSU5UX1ZFQzM6Ci0gICAgICAgIGNhc2UgU0hfQk9PTF9WRUMz
OgotICAgICAgICAgICAgcmV0dXJuIDQ7Ci0gICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMjoKLSAg
ICAgICAgY2FzZSBTSF9JTlRfVkVDMjoKLSAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzI6Ci0gICAg
ICAgICAgICByZXR1cm4gNTsKLSAgICAgICAgY2FzZSBTSF9GTE9BVDoKLSAgICAgICAgY2FzZSBT
SF9JTlQ6Ci0gICAgICAgIGNhc2UgU0hfQk9PTDoKLSAgICAgICAgY2FzZSBTSF9TQU1QTEVSXzJE
OgotICAgICAgICBjYXNlIFNIX1NBTVBMRVJfQ1VCRToKLSAgICAgICAgY2FzZSBTSF9TQU1QTEVS
X0VYVEVSTkFMX09FUzoKLSAgICAgICAgY2FzZSBTSF9TQU1QTEVSXzJEX1JFQ1RfQVJCOgotICAg
ICAgICAgICAgcmV0dXJuIDY7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlQo
ZmFsc2UpOwotICAgICAgICAgICAgcmV0dXJuIDc7Ci0gICAgfQotfQotfSAgICAvLyBuYW1lc3Bh
Y2UKLQotaW50IFZhcmlhYmxlUGFja2VyOjpHZXROdW1Db21wb25lbnRzUGVyUm93KFNoRGF0YVR5
cGUgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBTSF9GTE9BVF9N
QVQ0OgotICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDI6Ci0gICAgICAgIGNhc2UgU0hfRkxPQVRf
VkVDNDoKLSAgICAgICAgY2FzZSBTSF9JTlRfVkVDNDoKLSAgICAgICAgY2FzZSBTSF9CT09MX1ZF
QzQ6Ci0gICAgICAgICAgICByZXR1cm4gNDsKLSAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzOgot
ICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzM6Ci0gICAgICAgIGNhc2UgU0hfSU5UX1ZFQzM6Ci0g
ICAgICAgIGNhc2UgU0hfQk9PTF9WRUMzOgotICAgICAgICAgICAgcmV0dXJuIDM7Ci0gICAgICAg
IGNhc2UgU0hfRkxPQVRfVkVDMjoKLSAgICAgICAgY2FzZSBTSF9JTlRfVkVDMjoKLSAgICAgICAg
Y2FzZSBTSF9CT09MX1ZFQzI6Ci0gICAgICAgICAgICByZXR1cm4gMjsKLSAgICAgICAgY2FzZSBT
SF9GTE9BVDoKLSAgICAgICAgY2FzZSBTSF9JTlQ6Ci0gICAgICAgIGNhc2UgU0hfQk9PTDoKLSAg
ICAgICAgY2FzZSBTSF9TQU1QTEVSXzJEOgotICAgICAgICBjYXNlIFNIX1NBTVBMRVJfQ1VCRToK
LSAgICAgICAgY2FzZSBTSF9TQU1QTEVSX0VYVEVSTkFMX09FUzoKLSAgICAgICAgY2FzZSBTSF9T
QU1QTEVSXzJEX1JFQ1RfQVJCOgotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICAgICAgcmV0dXJuIDU7Ci0g
ICAgfQotfQotCi1pbnQgVmFyaWFibGVQYWNrZXI6OkdldE51bVJvd3MoU2hEYXRhVHlwZSB0eXBl
KQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDQ6Ci0g
ICAgICAgICAgICByZXR1cm4gNDsKLSAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzOgotICAgICAg
ICAgICAgcmV0dXJuIDM7Ci0gICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMjoKLSAgICAgICAgICAg
IHJldHVybiAyOwotICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzQ6Ci0gICAgICAgIGNhc2UgU0hf
SU5UX1ZFQzQ6Ci0gICAgICAgIGNhc2UgU0hfQk9PTF9WRUM0OgotICAgICAgICBjYXNlIFNIX0ZM
T0FUX1ZFQzM6Ci0gICAgICAgIGNhc2UgU0hfSU5UX1ZFQzM6Ci0gICAgICAgIGNhc2UgU0hfQk9P
TF9WRUMzOgotICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzI6Ci0gICAgICAgIGNhc2UgU0hfSU5U
X1ZFQzI6Ci0gICAgICAgIGNhc2UgU0hfQk9PTF9WRUMyOgotICAgICAgICBjYXNlIFNIX0ZMT0FU
OgotICAgICAgICBjYXNlIFNIX0lOVDoKLSAgICAgICAgY2FzZSBTSF9CT09MOgotICAgICAgICBj
YXNlIFNIX1NBTVBMRVJfMkQ6Ci0gICAgICAgIGNhc2UgU0hfU0FNUExFUl9DVUJFOgotICAgICAg
ICBjYXNlIFNIX1NBTVBMRVJfRVhURVJOQUxfT0VTOgotICAgICAgICBjYXNlIFNIX1NBTVBMRVJf
MkRfUkVDVF9BUkI6Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgICAgICAgICByZXR1cm4gMTAwMDAwOwotICAg
IH0KLX0KLQotc3RydWN0IFRWYXJpYWJsZUluZm9Db21wYXJlciB7Ci0gICAgYm9vbCBvcGVyYXRv
cigpKGNvbnN0IFRWYXJpYWJsZUluZm8mIGxocywgY29uc3QgVFZhcmlhYmxlSW5mbyYgcmhzKSBj
b25zdAotICAgIHsKLSAgICAgICAgaW50IGxoc1NvcnRPcmRlciA9IEdldFNvcnRPcmRlcihsaHMu
dHlwZSk7Ci0gICAgICAgIGludCByaHNTb3J0T3JkZXIgPSBHZXRTb3J0T3JkZXIocmhzLnR5cGUp
OwotICAgICAgICBpZiAobGhzU29ydE9yZGVyICE9IHJoc1NvcnRPcmRlcikgewotICAgICAgICAg
ICAgcmV0dXJuIGxoc1NvcnRPcmRlciA8IHJoc1NvcnRPcmRlcjsKLSAgICAgICAgfQotICAgICAg
ICAvLyBTb3J0IGJ5IGxhcmdlc3QgZmlyc3QuCi0gICAgICAgIHJldHVybiBsaHMuc2l6ZSA+IHJo
cy5zaXplOwotICAgIH0KLX07Ci0KLXVuc2lnbmVkIFZhcmlhYmxlUGFja2VyOjptYWtlQ29sdW1u
RmxhZ3MoaW50IGNvbHVtbiwgaW50IG51bUNvbXBvbmVudHNQZXJSb3cpCi17Ci0gICAgcmV0dXJu
ICgoa0NvbHVtbk1hc2sgPDwgKGtOdW1Db2x1bW5zIC0gbnVtQ29tcG9uZW50c1BlclJvdykpICYK
LSAgICAgICAgICAgICAgICAgICAga0NvbHVtbk1hc2spID4+IGNvbHVtbjsKLX0KLQotdm9pZCBW
YXJpYWJsZVBhY2tlcjo6ZmlsbENvbHVtbnMoaW50IHRvcFJvdywgaW50IG51bVJvd3MsIGludCBj
b2x1bW4sIGludCBudW1Db21wb25lbnRzUGVyUm93KQotewotICAgIHVuc2lnbmVkIGNvbHVtbkZs
YWdzID0gbWFrZUNvbHVtbkZsYWdzKGNvbHVtbiwgbnVtQ29tcG9uZW50c1BlclJvdyk7Ci0gICAg
Zm9yIChpbnQgciA9IDA7IHIgPCBudW1Sb3dzOyArK3IpIHsKLSAgICAgICAgaW50IHJvdyA9IHRv
cFJvdyArIHI7Ci0gICAgICAgIEFTU0VSVCgocm93c19bcm93XSAmIGNvbHVtbkZsYWdzKSA9PSAw
KTsKLSAgICAgICAgcm93c19bcm93XSB8PSBjb2x1bW5GbGFnczsKLSAgICB9Ci19Ci0KLWJvb2wg
VmFyaWFibGVQYWNrZXI6OnNlYXJjaENvbHVtbihpbnQgY29sdW1uLCBpbnQgbnVtUm93cywgaW50
KiBkZXN0Um93LCBpbnQqIGRlc3RTaXplKQotewotICAgIEFTU0VSVChkZXN0Um93KTsKLQotICAg
IGZvciAoOyB0b3BOb25GdWxsUm93XyA8IG1heFJvd3NfICYmIHJvd3NfW3RvcE5vbkZ1bGxSb3df
XSA9PSBrQ29sdW1uTWFzazsKLSAgICAgICAgICsrdG9wTm9uRnVsbFJvd18pIHsKLSAgICB9Ci0K
LSAgICBmb3IgKDsgYm90dG9tTm9uRnVsbFJvd18gPj0gMCAmJiByb3dzX1tib3R0b21Ob25GdWxs
Um93X10gPT0ga0NvbHVtbk1hc2s7Ci0gICAgICAgICAtLWJvdHRvbU5vbkZ1bGxSb3dfKSB7Ci0g
ICAgfQotCi0gICAgaWYgKGJvdHRvbU5vbkZ1bGxSb3dfIC0gdG9wTm9uRnVsbFJvd18gKyAxIDwg
bnVtUm93cykgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgdW5zaWduZWQg
Y29sdW1uRmxhZ3MgPSBtYWtlQ29sdW1uRmxhZ3MoY29sdW1uLCAxKTsKLSAgICBpbnQgdG9wR29v
ZFJvdyA9IDA7Ci0gICAgaW50IHNtYWxsZXN0R29vZFRvcCA9IC0xOwotICAgIGludCBzbWFsbGVz
dEdvb2RTaXplID0gbWF4Um93c18gKyAxOwotICAgIGludCBib3R0b21Sb3cgPSBib3R0b21Ob25G
dWxsUm93XyArIDE7Ci0gICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgIGZvciAoaW50IHJvdyA9
IHRvcE5vbkZ1bGxSb3dfOyByb3cgPD0gYm90dG9tUm93OyArK3JvdykgewotICAgICAgICBib29s
IHJvd0VtcHR5ID0gcm93IDwgYm90dG9tUm93ID8gKChyb3dzX1tyb3ddICYgY29sdW1uRmxhZ3Mp
ID09IDApIDogZmFsc2U7Ci0gICAgICAgIGlmIChyb3dFbXB0eSkgewotICAgICAgICAgICAgaWYg
KCFmb3VuZCkgewotICAgICAgICAgICAgICAgIHRvcEdvb2RSb3cgPSByb3c7Ci0gICAgICAgICAg
ICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgaWYgKGZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgaW50IHNpemUgPSByb3cgLSB0
b3BHb29kUm93OwotICAgICAgICAgICAgICAgIGlmIChzaXplID49IG51bVJvd3MgJiYgc2l6ZSA8
IHNtYWxsZXN0R29vZFNpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgc21hbGxlc3RHb29kU2l6
ZSA9IHNpemU7Ci0gICAgICAgICAgICAgICAgICAgIHNtYWxsZXN0R29vZFRvcCA9IHRvcEdvb2RS
b3c7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm91bmQg
PSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoc21hbGxlc3RHb29kVG9wIDwgMCkg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgKmRlc3RSb3cgPSBzbWFsbGVz
dEdvb2RUb3A7Ci0gICAgaWYgKGRlc3RTaXplKSB7Ci0gICAgICAgICpkZXN0U2l6ZSA9IHNtYWxs
ZXN0R29vZFNpemU7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFZhcmlhYmxl
UGFja2VyOjpDaGVja1ZhcmlhYmxlc1dpdGhpblBhY2tpbmdMaW1pdHMoaW50IG1heFZlY3RvcnMs
IGNvbnN0IFRWYXJpYWJsZUluZm9MaXN0JiBpbl92YXJpYWJsZXMpCi17Ci0gICAgQVNTRVJUKG1h
eFZlY3RvcnMgPiAwKTsKLSAgICBtYXhSb3dzXyA9IG1heFZlY3RvcnM7Ci0gICAgdG9wTm9uRnVs
bFJvd18gPSAwOwotICAgIGJvdHRvbU5vbkZ1bGxSb3dfID0gbWF4Um93c18gLSAxOwotICAgIFRW
YXJpYWJsZUluZm9MaXN0IHZhcmlhYmxlcyhpbl92YXJpYWJsZXMpOwotCi0gICAgLy8gQXMgcGVy
IEdMU0wgMS4wMTcgQXBwZW5kaXggQSwgU2VjdGlvbiA3IHZhcmlhYmxlcyBhcmUgcGFja2VkIGlu
IHNwZWNpZmljCi0gICAgLy8gb3JkZXIgYnkgdHlwZSwgdGhlbiBieSBzaXplIG9mIGFycmF5LCBs
YXJnZXN0IGZpcnN0LgotICAgIHN0ZDo6c29ydCh2YXJpYWJsZXMuYmVnaW4oKSwgdmFyaWFibGVz
LmVuZCgpLCBUVmFyaWFibGVJbmZvQ29tcGFyZXIoKSk7Ci0gICAgcm93c18uY2xlYXIoKTsKLSAg
ICByb3dzXy5yZXNpemUobWF4VmVjdG9ycywgMCk7Ci0KLSAgICAvLyBQYWNrcyB0aGUgNCBjb2x1
bW4gdmFyaWFibGVzLgotICAgIHNpemVfdCBpaSA9IDA7Ci0gICAgZm9yICg7IGlpIDwgdmFyaWFi
bGVzLnNpemUoKTsgKytpaSkgewotICAgICAgICBjb25zdCBUVmFyaWFibGVJbmZvJiB2YXJpYWJs
ZSA9IHZhcmlhYmxlc1tpaV07Ci0gICAgICAgIGlmIChHZXROdW1Db21wb25lbnRzUGVyUm93KHZh
cmlhYmxlLnR5cGUpICE9IDQpIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIHRvcE5vbkZ1bGxSb3dfICs9IEdldE51bVJvd3ModmFyaWFibGUudHlwZSkgKiB2YXJpYWJs
ZS5zaXplOwotICAgIH0KLQotICAgIGlmICh0b3BOb25GdWxsUm93XyA+IG1heFJvd3NfKSB7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBQYWNrcyB0aGUgMyBjb2x1bW4g
dmFyaWFibGVzLgotICAgIGludCBudW0zQ29sdW1uUm93cyA9IDA7Ci0gICAgZm9yICg7IGlpIDwg
dmFyaWFibGVzLnNpemUoKTsgKytpaSkgewotICAgICAgICBjb25zdCBUVmFyaWFibGVJbmZvJiB2
YXJpYWJsZSA9IHZhcmlhYmxlc1tpaV07Ci0gICAgICAgIGlmIChHZXROdW1Db21wb25lbnRzUGVy
Um93KHZhcmlhYmxlLnR5cGUpICE9IDMpIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIG51bTNDb2x1bW5Sb3dzICs9IEdldE51bVJvd3ModmFyaWFibGUudHlwZSkgKiB2
YXJpYWJsZS5zaXplOwotICAgIH0KLQotICAgIGlmICh0b3BOb25GdWxsUm93XyArIG51bTNDb2x1
bW5Sb3dzID4gbWF4Um93c18pIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IGZpbGxDb2x1bW5zKHRvcE5vbkZ1bGxSb3dfLCBudW0zQ29sdW1uUm93cywgMCwgMyk7Ci0KLSAg
ICAvLyBQYWNrcyB0aGUgMiBjb2x1bW4gdmFyaWFibGVzLgotICAgIGludCB0b3AyQ29sdW1uUm93
ID0gdG9wTm9uRnVsbFJvd18gKyBudW0zQ29sdW1uUm93czsKLSAgICBpbnQgdHdvQ29sdW1uUm93
c0F2YWlsYWJsZSA9IG1heFJvd3NfIC0gdG9wMkNvbHVtblJvdzsKLSAgICBpbnQgcm93c0F2YWls
YWJsZUluQ29sdW1uczAxID0gdHdvQ29sdW1uUm93c0F2YWlsYWJsZTsKLSAgICBpbnQgcm93c0F2
YWlsYWJsZUluQ29sdW1uczIzID0gdHdvQ29sdW1uUm93c0F2YWlsYWJsZTsKLSAgICBmb3IgKDsg
aWkgPCB2YXJpYWJsZXMuc2l6ZSgpOyArK2lpKSB7Ci0gICAgICAgIGNvbnN0IFRWYXJpYWJsZUlu
Zm8mIHZhcmlhYmxlID0gdmFyaWFibGVzW2lpXTsKLSAgICAgICAgaWYgKEdldE51bUNvbXBvbmVu
dHNQZXJSb3codmFyaWFibGUudHlwZSkgIT0gMikgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgaW50IG51bVJvd3MgPSBHZXROdW1Sb3dzKHZhcmlhYmxlLnR5cGUpICog
dmFyaWFibGUuc2l6ZTsKLSAgICAgICAgaWYgKG51bVJvd3MgPD0gcm93c0F2YWlsYWJsZUluQ29s
dW1uczAxKSB7Ci0gICAgICAgICAgICByb3dzQXZhaWxhYmxlSW5Db2x1bW5zMDEgLT0gbnVtUm93
czsKLSAgICAgICAgfSBlbHNlIGlmIChudW1Sb3dzIDw9IHJvd3NBdmFpbGFibGVJbkNvbHVtbnMy
MykgewotICAgICAgICAgICAgcm93c0F2YWlsYWJsZUluQ29sdW1uczIzIC09IG51bVJvd3M7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpbnQgbnVtUm93c1VzZWRJbkNvbHVtbnMwMSA9Ci0gICAgICAgIHR3b0NvbHVt
blJvd3NBdmFpbGFibGUgLSByb3dzQXZhaWxhYmxlSW5Db2x1bW5zMDE7Ci0gICAgaW50IG51bVJv
d3NVc2VkSW5Db2x1bW5zMjMgPQotICAgICAgICB0d29Db2x1bW5Sb3dzQXZhaWxhYmxlIC0gcm93
c0F2YWlsYWJsZUluQ29sdW1uczIzOwotICAgIGZpbGxDb2x1bW5zKHRvcDJDb2x1bW5Sb3csIG51
bVJvd3NVc2VkSW5Db2x1bW5zMDEsIDAsIDIpOwotICAgIGZpbGxDb2x1bW5zKG1heFJvd3NfIC0g
bnVtUm93c1VzZWRJbkNvbHVtbnMyMywgbnVtUm93c1VzZWRJbkNvbHVtbnMyMywKLSAgICAgICAg
ICAgICAgICAyLCAyKTsKLQotICAgIC8vIFBhY2tzIHRoZSAxIGNvbHVtbiB2YXJpYWJsZXMuCi0g
ICAgZm9yICg7IGlpIDwgdmFyaWFibGVzLnNpemUoKTsgKytpaSkgewotICAgICAgICBjb25zdCBU
VmFyaWFibGVJbmZvJiB2YXJpYWJsZSA9IHZhcmlhYmxlc1tpaV07Ci0gICAgICAgIEFTU0VSVCgx
ID09IEdldE51bUNvbXBvbmVudHNQZXJSb3codmFyaWFibGUudHlwZSkpOwotICAgICAgICBpbnQg
bnVtUm93cyA9IEdldE51bVJvd3ModmFyaWFibGUudHlwZSkgKiB2YXJpYWJsZS5zaXplOwotICAg
ICAgICBpbnQgc21hbGxlc3RDb2x1bW4gPSAtMTsKLSAgICAgICAgaW50IHNtYWxsZXN0U2l6ZSA9
IG1heFJvd3NfICsgMTsKLSAgICAgICAgaW50IHRvcFJvdyA9IC0xOwotICAgICAgICBmb3IgKGlu
dCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBrTnVtQ29sdW1uczsgKytjb2x1bW4pIHsKLSAgICAgICAg
ICAgIGludCByb3cgPSAwOwotICAgICAgICAgICAgaW50IHNpemUgPSAwOwotICAgICAgICAgICAg
aWYgKHNlYXJjaENvbHVtbihjb2x1bW4sIG51bVJvd3MsICZyb3csICZzaXplKSkgewotICAgICAg
ICAgICAgICAgIGlmIChzaXplIDwgc21hbGxlc3RTaXplKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHNtYWxsZXN0U2l6ZSA9IHNpemU7Ci0gICAgICAgICAgICAgICAgICAgIHNtYWxsZXN0Q29sdW1u
ID0gY29sdW1uOwotICAgICAgICAgICAgICAgICAgICB0b3BSb3cgPSByb3c7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNtYWxsZXN0
Q29sdW1uIDwgMCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZmlsbENvbHVtbnModG9wUm93LCBudW1Sb3dzLCBzbWFsbGVzdENvbHVtbiwgMSk7Ci0g
ICAgfQotCi0gICAgQVNTRVJUKHZhcmlhYmxlcy5zaXplKCkgPT0gaWkpOwotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvVmFyaWFibGVQYWNrZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9WYXJpYWJsZVBhY2tlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4
OTg3MDY2Y2MzN2NmZDc0MjMwZmEyNWJjMmFlMGU2Yzk5YzZkOGY1Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9WYXJpYWJsZVBhY2tlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBA
QAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBfVkFSSUFCTEVQQUNLRVJfSU5DTFVERURf
Ci0jZGVmaW5lIF9WQVJJQUJMRVBBQ0tFUl9JTkNMVURFRF8KLQotI2luY2x1ZGUgPHZlY3Rvcj4K
LSNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgotCi1jbGFzcyBWYXJpYWJsZVBhY2tlciB7
Ci0gcHVibGljOgotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGFzc2VkIGluIHZhcmlhYmxl
cyBwYWNrIGluIG1heFZlY3RvcnMgZm9sbG93aW5nCi0gICAgLy8gdGhlIHBhY2tpbmcgcnVsZXMg
ZnJvbSB0aGUgR0xTTCAxLjAxNyBzcGVjLCBBcHBlbmRpeCBBLCBzZWN0aW9uIDcuCi0gICAgYm9v
bCBDaGVja1ZhcmlhYmxlc1dpdGhpblBhY2tpbmdMaW1pdHMoCi0gICAgICAgIGludCBtYXhWZWN0
b3JzLAotICAgICAgICBjb25zdCBUVmFyaWFibGVJbmZvTGlzdCYgaW5fdmFyaWFibGVzKTsKLQot
ICAgIC8vIEdldHMgaG93IG1hbnkgY29tcG9uZW50cyBpbiBhIHJvdyBhIGRhdGEgdHlwZSB0YWtl
cy4KLSAgICBzdGF0aWMgaW50IEdldE51bUNvbXBvbmVudHNQZXJSb3coU2hEYXRhVHlwZSB0eXBl
KTsKLQotICAgIC8vIEdldHMgaG93IG1hbnkgcm93cyBhIGRhdGEgdHlwZSB0YWtlcy4KLSAgICBz
dGF0aWMgaW50IEdldE51bVJvd3MoU2hEYXRhVHlwZSB0eXBlKTsKLQotIHByaXZhdGU6Ci0gICAg
c3RhdGljIGNvbnN0IGludCBrTnVtQ29sdW1ucyA9IDQ7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGtDb2x1bW5NYXNrID0gKDEgPDwga051bUNvbHVtbnMpIC0gMTsKLQotICAgIHVuc2lnbmVk
IG1ha2VDb2x1bW5GbGFncyhpbnQgY29sdW1uLCBpbnQgbnVtQ29tcG9uZW50c1BlclJvdyk7Ci0g
ICAgdm9pZCBmaWxsQ29sdW1ucyhpbnQgdG9wUm93LCBpbnQgbnVtUm93cywgaW50IGNvbHVtbiwg
aW50IG51bUNvbXBvbmVudHNQZXJSb3cpOwotICAgIGJvb2wgc2VhcmNoQ29sdW1uKGludCBjb2x1
bW4sIGludCBudW1Sb3dzLCBpbnQqIGRlc3RSb3csIGludCogZGVzdFNpemUpOwotCi0gICAgaW50
IHRvcE5vbkZ1bGxSb3dfOwotICAgIGludCBib3R0b21Ob25GdWxsUm93XzsKLSAgICBpbnQgbWF4
Um93c187Ci0gICAgc3RkOjp2ZWN0b3I8dW5zaWduZWQ+IHJvd3NfOwotfTsKLQotI2VuZGlmIC8v
IF9WQVJJQUJMRVBBQ0tFUl9JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9WZXJzaW9uR0xTTC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA3YTgyYmI0ZGMxN2Q2MDUzMzU0ZTFhZmUzOTQ5ZWM4ZTU3ZmZhOWQxLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9WZXJzaW9uR0xTTC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwx
NDAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL1ZlcnNp
b25HTFNMLmgiCi0KLXN0YXRpYyBjb25zdCBpbnQgR0xTTF9WRVJTSU9OXzExMCA9IDExMDsKLXN0
YXRpYyBjb25zdCBpbnQgR0xTTF9WRVJTSU9OXzEyMCA9IDEyMDsKLQotLy8gV2UgbmVlZCB0byBz
Y2FuIGZvciB0aGUgZm9sbG93aW5nOgotLy8gMS4gImludmFyaWFudCIga2V5d29yZDogVGhpcyBj
YW4gb2NjdXIgaW4gYm90aCAtIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycwotLy8gICAgYnV0
IG9ubHkgYXQgdGhlIGdsb2JhbCBzY29wZS4KLS8vIDIuICJnbF9Qb2ludENvb3JkIiBidWlsdC1p
biB2YXJpYWJsZTogVGhpcyBjYW4gb25seSBvY2N1ciBpbiBmcmFnbWVudCBzaGFkZXIKLS8vICAg
IGJ1dCBpbnNpZGUgYW55IHNjb3BlLgotLy8gMy4gQ2FsbCB0byBhIG1hdHJpeCBjb25zdHJ1Y3Rv
ciB3aXRoIGFub3RoZXIgbWF0cml4IGFzIGFyZ3VtZW50LgotLy8gICAgKFRoZXNlIGNvbnN0cnVj
dG9ycyB3ZXJlIHJlc2VydmVkIGluIEdMU0wgdmVyc2lvbiAxLjEwLikKLS8vIDQuIEFycmF5cyBh
cyAib3V0IiBmdW5jdGlvbiBwYXJhbWV0ZXJzLgotLy8gICAgR0xTTCBzcGVjIHNlY3Rpb24gNi4x
LjE6ICJXaGVuIGNhbGxpbmcgYSBmdW5jdGlvbiwgZXhwcmVzc2lvbnMgdGhhdCBkbwotLy8gICAg
bm90IGV2YWx1YXRlIHRvIGwtdmFsdWVzIGNhbm5vdCBiZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBk
ZWNsYXJlZCBhcwotLy8gICAgb3V0IG9yIGlub3V0LiIKLS8vICAgIEdMU0wgMS4xIHNlY3Rpb24g
NS44OiAiT3RoZXIgYmluYXJ5IG9yIHVuYXJ5IGV4cHJlc3Npb25zLAotLy8gICAgbm9uLWRlcmVm
ZXJlbmNlZCBhcnJheXMsIGZ1bmN0aW9uIG5hbWVzLCBzd2l6emxlcyB3aXRoIHJlcGVhdGVkIGZp
ZWxkcywKLS8vICAgIGFuZCBjb25zdGFudHMgY2Fubm90IGJlIGwtdmFsdWVzLiIKLS8vICAgIEdM
U0wgMS4yIHJlbGF4ZWQgdGhlIHJlc3RyaWN0aW9uIG9uIGFycmF5cywgc2VjdGlvbiA1Ljg6ICJW
YXJpYWJsZXMgdGhhdAotLy8gICAgYXJlIGJ1aWx0LWluIHR5cGVzLCBlbnRpcmUgc3RydWN0dXJl
cyBvciBhcnJheXMuLi4gYXJlIGFsbCBsLXZhbHVlcy4iCi0vLwotLy8gVE9ETyhhbG9rcCk6IFRo
ZSBmb2xsb3dpbmcgdHdvIGNhc2VzIG9mIGludmFyaWFudCBkZWNhbGFyYXRpb24gZ2V0IGxvc3QK
LS8vIGR1cmluZyBwYXJzaW5nIC0gdGhleSBkbyBub3QgZ2V0IGNhcnJpZWQgb3ZlciB0byB0aGUg
aW50ZXJtZWRpYXRlIHRyZWUuCi0vLyBIYW5kbGUgdGhlc2UgY2FzZXM6Ci0vLyAxLiBXaGVuIGEg
cHJhZ21hIGlzIHVzZWQgdG8gZm9yY2UgYWxsIG91dHB1dCB2YXJpYWJsZXMgdG8gYmUgaW52YXJp
YW50OgotLy8gICAgLSAjcHJhZ21hIFNUREdMIGludmFyaWFudChhbGwpCi0vLyAyLiBXaGVuIGEg
cHJldmlvdXNseSBkZWNhbGFyZWQgb3IgYnVpbHQtaW4gdmFyaWFibGUgaXMgbWFya2VkIGludmFy
aWFudDoKLS8vICAgIC0gaW52YXJpYW50IGdsX1Bvc2l0aW9uOwotLy8gICAgLSB2YXJ5aW5nIHZl
YzMgY29sb3I7IGludmFyaWFudCBjb2xvcjsKLS8vCi1UVmVyc2lvbkdMU0w6OlRWZXJzaW9uR0xT
TChTaFNoYWRlclR5cGUgdHlwZSkKLSAgICA6IG1TaGFkZXJUeXBlKHR5cGUpLAotICAgICAgbVZl
cnNpb24oR0xTTF9WRVJTSU9OXzExMCkKLXsKLX0KLQotdm9pZCBUVmVyc2lvbkdMU0w6OnZpc2l0
U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCi17Ci0gICAgaWYgKG5vZGUtPmdldFN5bWJvbCgp
ID09ICJnbF9Qb2ludENvb3JkIikKLSAgICAgICAgdXBkYXRlVmVyc2lvbihHTFNMX1ZFUlNJT05f
MTIwKTsKLX0KLQotdm9pZCBUVmVyc2lvbkdMU0w6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJt
Q29uc3RhbnRVbmlvbiopCi17Ci19Ci0KLWJvb2wgVFZlcnNpb25HTFNMOjp2aXNpdEJpbmFyeShW
aXNpdCwgVEludGVybUJpbmFyeSopCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVFZl
cnNpb25HTFNMOjp2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkqKQotewotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFRWZXJzaW9uR0xTTDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQsIFRJ
bnRlcm1TZWxlY3Rpb24qKQotewotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFRWZXJzaW9u
R0xTTDo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCi17Ci0g
ICAgYm9vbCB2aXNpdENoaWxkcmVuID0gdHJ1ZTsKLQotICAgIHN3aXRjaCAobm9kZS0+Z2V0T3Ao
KSkgewotICAgICAgY2FzZSBFT3BTZXF1ZW5jZToKLSAgICAgICAgLy8gV2UgbmVlZCB0byB2aXNp
dCBzZXF1ZW5jZSBjaGlsZHJlbiB0byBnZXQgdG8gZ2xvYmFsIG9yIGlubmVyIHNjb3BlLgotICAg
ICAgICB2aXNpdENoaWxkcmVuID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVP
cERlY2xhcmF0aW9uOiB7Ci0gICAgICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2Ug
PSBub2RlLT5nZXRTZXF1ZW5jZSgpOwotICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHNl
cXVlbmNlLmZyb250KCktPmdldEFzVHlwZWQoKS0+Z2V0UXVhbGlmaWVyKCk7Ci0gICAgICAgIGlm
ICgocXVhbGlmaWVyID09IEV2cUludmFyaWFudFZhcnlpbmdJbikgfHwKLSAgICAgICAgICAgIChx
dWFsaWZpZXIgPT0gRXZxSW52YXJpYW50VmFyeWluZ091dCkpIHsKLSAgICAgICAgICAgIHVwZGF0
ZVZlcnNpb24oR0xTTF9WRVJTSU9OXzEyMCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgICB9Ci0gICAgICBjYXNlIEVPcFBhcmFtZXRlcnM6IHsKLSAgICAgICAgY29uc3QgVEludGVy
bVNlcXVlbmNlJiBwYXJhbXMgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOwotICAgICAgICBmb3IgKFRJ
bnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHBhcmFtcy5iZWdpbigpOwotICAg
ICAgICAgICAgIGl0ZXIgIT0gcGFyYW1zLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGNvbnN0IFRJbnRlcm1UeXBlZCogcGFyYW0gPSAoKml0ZXIpLT5nZXRBc1R5cGVkKCk7
Ci0gICAgICAgICAgICBpZiAocGFyYW0tPmlzQXJyYXkoKSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHBhcmFtLT5nZXRRdWFsaWZpZXIoKTsK
LSAgICAgICAgICAgICAgICBpZiAoKHF1YWxpZmllciA9PSBFdnFPdXQpIHx8IChxdWFsaWZpZXIg
PT0gIEV2cUluT3V0KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVw
ZGF0ZVZlcnNpb24oR0xTTF9WRVJTSU9OXzEyMCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAv
LyBGdWxseSBwcm9jZXNzZWQuIE5vIG5lZWQgdG8gdmlzaXQgY2hpbGRyZW4uCi0gICAgICAgIHZp
c2l0Q2hpbGRyZW4gPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNl
IEVPcENvbnN0cnVjdE1hdDI6Ci0gICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6Ci0gICAgICBj
YXNlIEVPcENvbnN0cnVjdE1hdDQ6IHsKLSAgICAgICAgY29uc3QgVEludGVybVNlcXVlbmNlJiBz
ZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAgIGlmIChzZXF1ZW5jZS5zaXpl
KCkgPT0gMSkgewotICAgICAgICAgIFRJbnRlcm1UeXBlZCogdHlwZWQgPSBzZXF1ZW5jZS5mcm9u
dCgpLT5nZXRBc1R5cGVkKCk7Ci0gICAgICAgICAgaWYgKHR5cGVkICYmIHR5cGVkLT5pc01hdHJp
eCgpKSB7Ci0gICAgICAgICAgICB1cGRhdGVWZXJzaW9uKEdMU0xfVkVSU0lPTl8xMjApOwotICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgZGVm
YXVsdDogYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZpc2l0Q2hpbGRyZW47Ci19Ci0KLWJv
b2wgVFZlcnNpb25HTFNMOjp2aXNpdExvb3AoVmlzaXQsIFRJbnRlcm1Mb29wKikKLXsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBUVmVyc2lvbkdMU0w6OnZpc2l0QnJhbmNoKFZpc2l0LCBU
SW50ZXJtQnJhbmNoKikKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBUVmVyc2lvbkdM
U0w6OnVwZGF0ZVZlcnNpb24oaW50IHZlcnNpb24pCi17Ci0gICAgbVZlcnNpb24gPSBzdGQ6Om1h
eCh2ZXJzaW9uLCBtVmVyc2lvbik7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9WZXJzaW9uR0xTTC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNMLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDFjMWNiMWFiOTdiOWRlNWVkNDdhOTEwNDhiMmU2ZDMzYmVjN2ViYTYuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNMLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCww
IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1ZFUlNJT05HTFNMX0hf
Ci0jZGVmaW5lIENPTVBJTEVSX1ZFUlNJT05HTFNMX0hfCi0KLSNpbmNsdWRlICJHTFNMQU5HL1No
YWRlckxhbmcuaCIKLSNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKLQotLy8gVHJh
dmVyc2VzIHRoZSBpbnRlcm1lZGlhdGUgdHJlZSB0byByZXR1cm4gdGhlIG1pbmltdW0gR0xTTCB2
ZXJzaW9uCi0vLyByZXF1aXJlZCB0byBsZWdhbGx5IGFjY2VzcyBhbGwgYnVpbHQtaW4gZmVhdHVy
ZXMgdXNlZCBpbiB0aGUgc2hhZGVyLgotLy8gR0xTTCAxLjEgd2hpY2ggaXMgbWFuZGF0ZWQgYnkg
T3BlbkdMIDIuMCBwcm92aWRlczoKLS8vICAgLSAjdmVyc2lvbiBhbmQgI2V4dGVuc2lvbiB0byBk
ZWNsYXJlIHZlcnNpb24gYW5kIGV4dGVuc2lvbnMuCi0vLyAgIC0gYnVpbHQtaW4gZnVuY3Rpb25z
IHJlZnJhY3QsIGV4cCwgYW5kIGxvZy4KLS8vICAgLSB1cGRhdGVkIHN0ZXAoKSB0byBjb21wYXJl
IHggPCBlZGdlIGluc3RlYWQgb2YgeCA8PSBlZGdlLgotLy8gR0xTTCAxLjIgd2hpY2ggaXMgbWFu
ZGF0ZWQgYnkgT3BlbkdMIDIuMSBwcm92aWRlczoKLS8vICAgLSBtYW55IGNoYW5nZXMgdG8gcmVk
dWNlIGRpZmZlcmVuY2VzIHdoZW4gY29tcGFyZWQgdG8gdGhlIEVTIHNwZWNpZmljYXRpb24uCi0v
LyAgIC0gaW52YXJpYW50IGtleXdvcmQgYW5kIGl0cyBzdXBwb3J0LgotLy8gICAtIGMrKyBzdHls
ZSBuYW1lIGhpZGluZyBydWxlcy4KLS8vICAgLSBidWlsdC1pbiB2YXJpYWJsZSBnbF9Qb2ludENv
b3JkIGZvciBmcmFnbWVudCBzaGFkZXJzLgotLy8gICAtIG1hdHJpeCBjb25zdHJ1Y3RvcnMgdGFr
aW5nIG1hdHJpeCBhcyBhcmd1bWVudC4KLS8vICAgLSBhcnJheSBhcyAib3V0IiBmdW5jdGlvbiBw
YXJhbWV0ZXJzCi0vLwotY2xhc3MgVFZlcnNpb25HTFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJz
ZXIgewotcHVibGljOgotICAgIFRWZXJzaW9uR0xTTChTaFNoYWRlclR5cGUgdHlwZSk7Ci0KLSAg
ICAvLyBSZXR1cm5zIDEyMCBpZiB0aGUgZm9sbG93aW5nIGlzIHVzZWQgdGhlIHNoYWRlcjoKLSAg
ICAvLyAtICJpbnZhcmlhbnQiLAotICAgIC8vIC0gImdsX1BvaW50Q29vcmQiLAotICAgIC8vIC0g
bWF0cml4L21hdHJpeCBjb25zdHJ1Y3RvcnMKLSAgICAvLyAtIGFycmF5ICJvdXQiIHBhcmFtZXRl
cnMKLSAgICAvLyBFbHNlIDExMCBpcyByZXR1cm5lZC4KLSAgICBpbnQgZ2V0VmVyc2lvbigpIHsg
cmV0dXJuIG1WZXJzaW9uOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVy
bVN5bWJvbCopOwotICAgIHZpcnR1YWwgdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNv
bnN0YW50VW5pb24qKTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRl
cm1CaW5hcnkqKTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRVbmFyeShWaXNpdCwgVEludGVybVVu
YXJ5Kik7Ci0gICAgdmlydHVhbCBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0LCBUSW50ZXJtU2Vs
ZWN0aW9uKik7Ci0gICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJt
QWdncmVnYXRlKik7Ci0gICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxv
b3AqKTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQsIFRJbnRlcm1CcmFuY2gq
KTsKLQotcHJvdGVjdGVkOgotICAgIHZvaWQgdXBkYXRlVmVyc2lvbihpbnQgdmVyc2lvbik7Ci0K
LXByaXZhdGU6Ci0gICAgU2hTaGFkZXJUeXBlIG1TaGFkZXJUeXBlOwotICAgIGludCBtVmVyc2lv
bjsKLX07Ci0KLSNlbmRpZiAgLy8gQ09NUElMRVJfVkVSU0lPTkdMU0xfSF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAzOGQ1NWFjYWY2N2FmYTJlMTAyODk1YzQ2OTRjNTk3OTVkNzdiNTM5Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwz
NyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBkZWJ1Zy5jcHA6IERlYnVnZ2luZyB1
dGlsaXRpZXMuCi0KLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgotCi0jaW5jbHVkZSA8c3Rk
YXJnLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxp
emVQYXJzZUNvbnRleHQuaCIKLSNpbmNsdWRlICJjb21waWxlci9QYXJzZUNvbnRleHQuaCIKLQot
I2lmZGVmIFRSQUNFX0VOQUJMRUQKLXN0YXRpYyBjb25zdCBpbnQga1RyYWNlQnVmZmVyTGVuID0g
MTAyNDsKLQotZXh0ZXJuICJDIiB7Ci12b2lkIFRyYWNlKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4u
KSB7Ci0gICAgaWYgKCFmb3JtYXQpIHJldHVybjsKLQotICAgIFRQYXJzZUNvbnRleHQqIHBhcnNl
Q29udGV4dCA9IEdldEdsb2JhbFBhcnNlQ29udGV4dCgpOwotICAgIGlmIChwYXJzZUNvbnRleHQp
IHsKLSAgICAgICAgY2hhciBidWZba1RyYWNlQnVmZmVyTGVuXTsKLSAgICAgICAgdmFfbGlzdCBh
cmdzOwotICAgICAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOwotICAgICAgICB2c25wcmludGYo
YnVmLCBrVHJhY2VCdWZmZXJMZW4sIGZvcm1hdCwgYXJncyk7Ci0gICAgICAgIHZhX2VuZChhcmdz
KTsKLQotICAgICAgICBwYXJzZUNvbnRleHQtPnRyYWNlKGJ1Zik7Ci0gICAgfQotfQotfSAgLy8g
ZXh0ZXJuICJDIgotI2VuZGlmICAvLyBUUkFDRV9FTkFCTEVECi0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDdhMzcxNTE2YWYwZmVlYzYxZjQ2ZWUxMTgyMWJhMjhkMzUxZGQ0OWUuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2RlYnVnLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0vLwotCi0vLyBkZWJ1Zy5oOiBEZWJ1Z2dpbmcgdXRpbGl0aWVzLgotCi0j
aWZuZGVmIENPTVBJTEVSX0RFQlVHX0hfCi0jZGVmaW5lIENPTVBJTEVSX0RFQlVHX0hfCi0KLSNp
bmNsdWRlIDxhc3NlcnQuaD4KLQotI2lmZGVmIF9ERUJVRwotI2RlZmluZSBUUkFDRV9FTkFCTEVE
ICAvLyBkZWZpbmUgdG8gZW5hYmxlIGRlYnVnIG1lc3NhZ2UgdHJhY2luZwotI2VuZGlmICAvLyBf
REVCVUcKLQotLy8gT3V0cHV0cyB0ZXh0IHRvIHRoZSBkZWJ1ZyBsb2cKLSNpZmRlZiBUUkFDRV9F
TkFCTEVECi0KLSNpZmRlZiAgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmICAvLyBf
X2NwbHVzcGx1cwotdm9pZCBUcmFjZShjb25zdCBjaGFyKiBmb3JtYXQsIC4uLik7Ci0jaWZkZWYg
IF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYgIC8vIF9fY3BsdXNwbHVzCi0KLSNlbHNlICAgLy8gVFJB
Q0VfRU5BQkxFRAotCi0jZGVmaW5lIFRyYWNlKC4uLikgKCh2b2lkKTApCi0KLSNlbmRpZiAgLy8g
VFJBQ0VfRU5BQkxFRAotCi0vLyBBIG1hY3JvIGFzc2VydGluZyBhIGNvbmRpdGlvbiBhbmQgb3V0
cHV0dGluZyBmYWlsdXJlcyB0byB0aGUgZGVidWcgbG9nCi0jZGVmaW5lIEFTU0VSVChleHByZXNz
aW9uKSBkbyB7IFwKLSAgICBpZighKGV4cHJlc3Npb24pKSBcCi0gICAgICAgIFRyYWNlKCJBc3Nl
cnQgZmFpbGVkOiAlcyglZCk6ICIjZXhwcmVzc2lvbiJcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5F
X18pOyBcCi0gICAgYXNzZXJ0KGV4cHJlc3Npb24pOyBcCi19IHdoaWxlKDApCi0KLSNkZWZpbmUg
VU5JTVBMRU1FTlRFRCgpIGRvIHsgXAotICAgIFRyYWNlKCJVbmltcGxlbWVudGVkIGludm9rZWQ6
ICVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7IFwKLSAgICBhc3NlcnQoZmFsc2Up
OyBcCi19IHdoaWxlKDApCi0KLSNkZWZpbmUgVU5SRUFDSEFCTEUoKSBkbyB7IFwKLSAgICBUcmFj
ZSgiVW5yZWFjaGFibGUgcmVhY2hlZDogJXMoJWQpXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9f
KTsgXAotICAgIGFzc2VydChmYWxzZSk7IFwKLX0gd2hpbGUoMCkKLQotI2VuZGlmICAgLy8gQ09N
UElMRVJfREVCVUdfSF8KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E2NjFkNjc2Nzg5YTY5M2NiMjY3ODQ0MDFkZGQxNzA1
NTZlMDgzOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdy
YXBoLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0j
cHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcxOCkKLQotI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdy
YXBoL0RlcGVuZGVuY3lHcmFwaC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVu
ZGVuY3lHcmFwaEJ1aWxkZXIuaCIKLQotVERlcGVuZGVuY3lHcmFwaDo6VERlcGVuZGVuY3lHcmFw
aChUSW50ZXJtTm9kZSogaW50ZXJtTm9kZSkKLXsKLSAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRl
cjo6YnVpbGQoaW50ZXJtTm9kZSwgdGhpcyk7Ci19Ci0KLVREZXBlbmRlbmN5R3JhcGg6On5URGVw
ZW5kZW5jeUdyYXBoKCkKLXsKLSAgICBmb3IgKFRHcmFwaE5vZGVWZWN0b3I6OmNvbnN0X2l0ZXJh
dG9yIGl0ZXIgPSBtQWxsTm9kZXMuYmVnaW4oKTsgaXRlciAhPSBtQWxsTm9kZXMuZW5kKCk7ICsr
aXRlcikKLSAgICB7Ci0gICAgICAgIFRHcmFwaE5vZGUqIG5vZGUgPSAqaXRlcjsKLSAgICAgICAg
ZGVsZXRlIG5vZGU7Ci0gICAgfQotfQotCi1UR3JhcGhBcmd1bWVudCogVERlcGVuZGVuY3lHcmFw
aDo6Y3JlYXRlQXJndW1lbnQoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcmd1
bWVudE51bWJlcikKLXsKLSAgICBUR3JhcGhBcmd1bWVudCogYXJndW1lbnQgPSBuZXcgVEdyYXBo
QXJndW1lbnQoaW50ZXJtRnVuY3Rpb25DYWxsLCBhcmd1bWVudE51bWJlcik7Ci0gICAgbUFsbE5v
ZGVzLnB1c2hfYmFjayhhcmd1bWVudCk7Ci0gICAgcmV0dXJuIGFyZ3VtZW50OwotfQotCi1UR3Jh
cGhGdW5jdGlvbkNhbGwqIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUZ1bmN0aW9uQ2FsbChUSW50
ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpCi17Ci0gICAgVEdyYXBoRnVuY3Rpb25D
YWxsKiBmdW5jdGlvbkNhbGwgPSBuZXcgVEdyYXBoRnVuY3Rpb25DYWxsKGludGVybUZ1bmN0aW9u
Q2FsbCk7Ci0gICAgbUFsbE5vZGVzLnB1c2hfYmFjayhmdW5jdGlvbkNhbGwpOwotICAgIGlmIChm
dW5jdGlvbkNhbGwtPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpLT5pc1VzZXJEZWZpbmVkKCkpCi0g
ICAgICAgIG1Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMucHVzaF9iYWNrKGZ1bmN0aW9uQ2FsbCk7
Ci0gICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKLX0KLQotVEdyYXBoU3ltYm9sKiBURGVwZW5kZW5j
eUdyYXBoOjpnZXRPckNyZWF0ZVN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wpCi17
Ci0gICAgVFN5bWJvbElkTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbVN5bWJvbElkTWFwLmZp
bmQoaW50ZXJtU3ltYm9sLT5nZXRJZCgpKTsKLQotICAgIFRHcmFwaFN5bWJvbCogc3ltYm9sID0g
TlVMTDsKLQotICAgIGlmIChpdGVyICE9IG1TeW1ib2xJZE1hcC5lbmQoKSkgewotICAgICAgICBU
U3ltYm9sSWRQYWlyIHBhaXIgPSAqaXRlcjsKLSAgICAgICAgc3ltYm9sID0gcGFpci5zZWNvbmQ7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3ltYm9sID0gbmV3IFRHcmFwaFN5bWJvbChpbnRlcm1T
eW1ib2wpOwotICAgICAgICBtQWxsTm9kZXMucHVzaF9iYWNrKHN5bWJvbCk7Ci0KLSAgICAgICAg
VFN5bWJvbElkUGFpciBwYWlyKGludGVybVN5bWJvbC0+Z2V0SWQoKSwgc3ltYm9sKTsKLSAgICAg
ICAgbVN5bWJvbElkTWFwLmluc2VydChwYWlyKTsKLQotICAgICAgICAvLyBXZSBzYXZlIGFsbCBz
YW1wbGVyIHN5bWJvbHMgaW4gYSBjb2xsZWN0aW9uLCBzbyB3ZSBjYW4gc3RhcnQgZ3JhcGggdHJh
dmVyc2FscyBmcm9tIHRoZW0gcXVpY2tseS4KLSAgICAgICAgaWYgKElzU2FtcGxlcihpbnRlcm1T
eW1ib2wtPmdldEJhc2ljVHlwZSgpKSkKLSAgICAgICAgICAgIG1TYW1wbGVyU3ltYm9scy5wdXNo
X2JhY2soc3ltYm9sKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3ltYm9sOwotfQotCi1UR3JhcGhT
ZWxlY3Rpb24qIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZVNlbGVjdGlvbihUSW50ZXJtU2VsZWN0
aW9uKiBpbnRlcm1TZWxlY3Rpb24pCi17Ci0gICAgVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24g
PSBuZXcgVEdyYXBoU2VsZWN0aW9uKGludGVybVNlbGVjdGlvbik7Ci0gICAgbUFsbE5vZGVzLnB1
c2hfYmFjayhzZWxlY3Rpb24pOwotICAgIHJldHVybiBzZWxlY3Rpb247Ci19Ci0KLVRHcmFwaExv
b3AqIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUxvb3AoVEludGVybUxvb3AqIGludGVybUxvb3Ap
Ci17Ci0gICAgVEdyYXBoTG9vcCogbG9vcCA9IG5ldyBUR3JhcGhMb29wKGludGVybUxvb3ApOwot
ICAgIG1BbGxOb2Rlcy5wdXNoX2JhY2sobG9vcCk7Ci0gICAgcmV0dXJuIGxvb3A7Ci19Ci0KLVRH
cmFwaExvZ2ljYWxPcCogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlTG9naWNhbE9wKFRJbnRlcm1C
aW5hcnkqIGludGVybUxvZ2ljYWxPcCkKLXsKLSAgICBUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxP
cCA9IG5ldyBUR3JhcGhMb2dpY2FsT3AoaW50ZXJtTG9naWNhbE9wKTsKLSAgICBtQWxsTm9kZXMu
cHVzaF9iYWNrKGxvZ2ljYWxPcCk7Ci0gICAgcmV0dXJuIGxvZ2ljYWxPcDsKLX0KLQotY29uc3Qg
Y2hhciogVEdyYXBoTG9naWNhbE9wOjpnZXRPcFN0cmluZygpIGNvbnN0Ci17Ci0gICAgY29uc3Qg
Y2hhciogb3BTdHJpbmcgPSBOVUxMOwotICAgIHN3aXRjaCAoZ2V0SW50ZXJtTG9naWNhbE9wKCkt
PmdldE9wKCkpIHsKLSAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiBvcFN0cmluZyA9ICJhbmQi
OyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6IG9wU3RyaW5nID0gIm9yIjsgYnJl
YWs7Ci0gICAgICAgIGRlZmF1bHQ6IG9wU3RyaW5nID0gInVua25vd24iOyBicmVhazsKLSAgICB9
Ci0gICAgcmV0dXJuIG9wU3RyaW5nOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTljMzVkMDBiN2EzMWQ5MjU3MTFlZjA1ZTg1
MjhkNDRmMWU3NjkyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRl
bmN5R3JhcGguaAorKysgL2Rldi9udWxsCkBAIC0xLDIxMiArMCwwIEBACi0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LQotI2lmbmRlZiBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0gKLSNkZWZpbmUg
Q09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9ICi0KLSNpbmNsdWRlICJjb21waWxl
ci9pbnRlcm1lZGlhdGUuaCIKLQotI2luY2x1ZGUgPHNldD4KLSNpbmNsdWRlIDxzdGFjaz4KLQot
Y2xhc3MgVEdyYXBoTm9kZTsKLWNsYXNzIFRHcmFwaFBhcmVudE5vZGU7Ci1jbGFzcyBUR3JhcGhB
cmd1bWVudDsKLWNsYXNzIFRHcmFwaEZ1bmN0aW9uQ2FsbDsKLWNsYXNzIFRHcmFwaFN5bWJvbDsK
LWNsYXNzIFRHcmFwaFNlbGVjdGlvbjsKLWNsYXNzIFRHcmFwaExvb3A7Ci1jbGFzcyBUR3JhcGhM
b2dpY2FsT3A7Ci1jbGFzcyBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyOwotY2xhc3MgVERlcGVu
ZGVuY3lHcmFwaE91dHB1dDsKLQotdHlwZWRlZiBzdGQ6OnNldDxUR3JhcGhOb2RlKj4gVEdyYXBo
Tm9kZVNldDsKLXR5cGVkZWYgc3RkOjp2ZWN0b3I8VEdyYXBoTm9kZSo+IFRHcmFwaE5vZGVWZWN0
b3I7Ci10eXBlZGVmIHN0ZDo6dmVjdG9yPFRHcmFwaFN5bWJvbCo+IFRHcmFwaFN5bWJvbFZlY3Rv
cjsKLXR5cGVkZWYgc3RkOjp2ZWN0b3I8VEdyYXBoRnVuY3Rpb25DYWxsKj4gVEZ1bmN0aW9uQ2Fs
bFZlY3RvcjsKLQotLy8KLS8vIEJhc2UgY2xhc3MgZm9yIGFsbCBkZXBlbmRlbmN5IGdyYXBoIG5v
ZGVzLgotLy8KLWNsYXNzIFRHcmFwaE5vZGUgewotcHVibGljOgotICAgIFRHcmFwaE5vZGUoVElu
dGVybU5vZGUqIG5vZGUpIDogaW50ZXJtTm9kZShub2RlKSB7fQotICAgIHZpcnR1YWwgflRHcmFw
aE5vZGUoKSB7fQotICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJh
dmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Ci1wcm90ZWN0ZWQ6Ci0gICAgVEludGVybU5vZGUqIGlu
dGVybU5vZGU7Ci19OwotCi0vLwotLy8gQmFzZSBjbGFzcyBmb3IgZGVwZW5kZW5jeSBncmFwaCBu
b2RlcyB0aGF0IG1heSBoYXZlIGNoaWxkcmVuLgotLy8KLWNsYXNzIFRHcmFwaFBhcmVudE5vZGUg
OiBwdWJsaWMgVEdyYXBoTm9kZSB7Ci1wdWJsaWM6Ci0gICAgVEdyYXBoUGFyZW50Tm9kZShUSW50
ZXJtTm9kZSogbm9kZSkgOiBUR3JhcGhOb2RlKG5vZGUpIHt9Ci0gICAgdmlydHVhbCB+VEdyYXBo
UGFyZW50Tm9kZSgpIHt9Ci0gICAgdm9pZCBhZGREZXBlbmRlbnROb2RlKFRHcmFwaE5vZGUqIG5v
ZGUpIHsgaWYgKG5vZGUgIT0gdGhpcykgbURlcGVuZGVudE5vZGVzLmluc2VydChub2RlKTsgfQot
ICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFw
aFRyYXZlcnNlcik7Ci1wcml2YXRlOgotICAgIFRHcmFwaE5vZGVTZXQgbURlcGVuZGVudE5vZGVz
OwotfTsKLQotLy8KLS8vIEhhbmRsZSBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50cy4KLS8vCi1jbGFz
cyBUR3JhcGhBcmd1bWVudCA6IHB1YmxpYyBUR3JhcGhQYXJlbnROb2RlIHsKLXB1YmxpYzoKLSAg
ICBUR3JhcGhBcmd1bWVudChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwsIGlu
dCBhcmd1bWVudE51bWJlcikKLSAgICAgICAgOiBUR3JhcGhQYXJlbnROb2RlKGludGVybUZ1bmN0
aW9uQ2FsbCkKLSAgICAgICAgLCBtQXJndW1lbnROdW1iZXIoYXJndW1lbnROdW1iZXIpIHt9Ci0g
ICAgdmlydHVhbCB+VEdyYXBoQXJndW1lbnQoKSB7fQotICAgIGNvbnN0IFRJbnRlcm1BZ2dyZWdh
dGUqIGdldEludGVybUZ1bmN0aW9uQ2FsbCgpIGNvbnN0IHsgcmV0dXJuIGludGVybU5vZGUtPmdl
dEFzQWdncmVnYXRlKCk7IH0KLSAgICBpbnQgZ2V0QXJndW1lbnROdW1iZXIoKSBjb25zdCB7IHJl
dHVybiBtQXJndW1lbnROdW1iZXI7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVu
ZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOwotcHJpdmF0ZToKLSAgICBpbnQg
bUFyZ3VtZW50TnVtYmVyOwotfTsKLQotLy8KLS8vIEhhbmRsZSBmdW5jdGlvbiBjYWxscy4KLS8v
Ci1jbGFzcyBUR3JhcGhGdW5jdGlvbkNhbGwgOiBwdWJsaWMgVEdyYXBoUGFyZW50Tm9kZSB7Ci1w
dWJsaWM6Ci0gICAgVEdyYXBoRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1
bmN0aW9uQ2FsbCkKLSAgICAgICAgOiBUR3JhcGhQYXJlbnROb2RlKGludGVybUZ1bmN0aW9uQ2Fs
bCkge30KLSAgICB2aXJ0dWFsIH5UR3JhcGhGdW5jdGlvbkNhbGwoKSB7fQotICAgIGNvbnN0IFRJ
bnRlcm1BZ2dyZWdhdGUqIGdldEludGVybUZ1bmN0aW9uQ2FsbCgpIGNvbnN0IHsgcmV0dXJuIGlu
dGVybU5vZGUtPmdldEFzQWdncmVnYXRlKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2Uo
VERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOwotfTsKLQotLy8KLS8v
IEhhbmRsZSBzeW1ib2xzLgotLy8KLWNsYXNzIFRHcmFwaFN5bWJvbCA6IHB1YmxpYyBUR3JhcGhQ
YXJlbnROb2RlIHsKLXB1YmxpYzoKLSAgICBUR3JhcGhTeW1ib2woVEludGVybVN5bWJvbCogaW50
ZXJtU3ltYm9sKSA6IFRHcmFwaFBhcmVudE5vZGUoaW50ZXJtU3ltYm9sKSB7fQotICAgIHZpcnR1
YWwgflRHcmFwaFN5bWJvbCgpIHt9Ci0gICAgY29uc3QgVEludGVybVN5bWJvbCogZ2V0SW50ZXJt
U3ltYm9sKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNTeW1ib2xOb2RlKCk7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3Jh
cGhUcmF2ZXJzZXIpOwotfTsKLQotLy8KLS8vIEhhbmRsZSBpZiBzdGF0ZW1lbnRzIGFuZCB0ZXJu
YXJ5IG9wZXJhdG9ycy4KLS8vCi1jbGFzcyBUR3JhcGhTZWxlY3Rpb24gOiBwdWJsaWMgVEdyYXBo
Tm9kZSB7Ci1wdWJsaWM6Ci0gICAgVEdyYXBoU2VsZWN0aW9uKFRJbnRlcm1TZWxlY3Rpb24qIGlu
dGVybVNlbGVjdGlvbikgOiBUR3JhcGhOb2RlKGludGVybVNlbGVjdGlvbikge30KLSAgICB2aXJ0
dWFsIH5UR3JhcGhTZWxlY3Rpb24oKSB7fQotICAgIGNvbnN0IFRJbnRlcm1TZWxlY3Rpb24qIGdl
dEludGVybVNlbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGludGVybU5vZGUtPmdldEFzU2VsZWN0
aW9uTm9kZSgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKLX07Ci0KLS8vCi0vLyBIYW5kbGUgZm9yLCBkby13
aGlsZSwgYW5kIHdoaWxlIGxvb3BzLgotLy8KLWNsYXNzIFRHcmFwaExvb3AgOiBwdWJsaWMgVEdy
YXBoTm9kZSB7Ci1wdWJsaWM6Ci0gICAgVEdyYXBoTG9vcChUSW50ZXJtTG9vcCogaW50ZXJtTG9v
cCkgOiBUR3JhcGhOb2RlKGludGVybUxvb3ApIHt9Ci0gICAgdmlydHVhbCB+VEdyYXBoTG9vcCgp
IHt9Ci0gICAgY29uc3QgVEludGVybUxvb3AqIGdldEludGVybUxvb3AoKSBjb25zdCB7IHJldHVy
biBpbnRlcm1Ob2RlLT5nZXRBc0xvb3BOb2RlKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhdmVy
c2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOwotfTsKLQotLy8K
LS8vIEhhbmRsZSBsb2dpY2FsIGFuZCwgb3IuCi0vLwotY2xhc3MgVEdyYXBoTG9naWNhbE9wIDog
cHVibGljIFRHcmFwaE5vZGUgewotcHVibGljOgotICAgIFRHcmFwaExvZ2ljYWxPcChUSW50ZXJt
QmluYXJ5KiBpbnRlcm1Mb2dpY2FsT3ApIDogVEdyYXBoTm9kZShpbnRlcm1Mb2dpY2FsT3ApIHt9
Ci0gICAgdmlydHVhbCB+VEdyYXBoTG9naWNhbE9wKCkge30KLSAgICBjb25zdCBUSW50ZXJtQmlu
YXJ5KiBnZXRJbnRlcm1Mb2dpY2FsT3AoKSBjb25zdCB7IHJldHVybiBpbnRlcm1Ob2RlLT5nZXRB
c0JpbmFyeU5vZGUoKTsgfQotICAgIGNvbnN0IGNoYXIqIGdldE9wU3RyaW5nKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBo
VHJhdmVyc2VyKTsKLX07Ci0KLS8vCi0vLyBBIGRlcGVuZGVuY3kgZ3JhcGggb2Ygc3ltYm9scywg
ZnVuY3Rpb24gY2FsbHMsIGNvbmRpdGlvbnMgZXRjLgotLy8KLS8vIFRoaXMgY2xhc3MgcHJvdmlk
ZXMgYW4gaW50ZXJmYWNlIHRvIHRoZSBlbnRyeSBwb2ludHMgb2YgdGhlIGRlcGVuZGVuY3kgZ3Jh
cGguCi0vLwotLy8gRGVwZW5kZW5jeSBncmFwaCBub2RlcyBzaG91bGQgYmUgY3JlYXRlZCBieSB1
c2luZyBvbmUgb2YgdGhlIHByb3ZpZGVkICJjcmVhdGUuLi4iIG1ldGhvZHMuCi0vLyBUaGlzIGNs
YXNzIChhbmQgbm9ib2R5IGVsc2UpIG1hbmFnZXMgdGhlIG1lbW9yeSBvZiB0aGUgY3JlYXRlZCBu
b2Rlcy4KLS8vIE5vZGVzIG1heSBub3QgYmUgcmVtb3ZlZCBhZnRlciBiZWluZyBhZGRlZCwgc28g
YWxsIGNyZWF0ZWQgbm9kZXMgd2lsbCBleGlzdCB3aGlsZSB0aGUKLS8vIFREZXBlbmRlbmN5R3Jh
cGggaW5zdGFuY2UgZXhpc3RzLgotLy8KLWNsYXNzIFREZXBlbmRlbmN5R3JhcGggewotcHVibGlj
OgotICAgIFREZXBlbmRlbmN5R3JhcGgoVEludGVybU5vZGUqIGludGVybU5vZGUpOwotICAgIH5U
RGVwZW5kZW5jeUdyYXBoKCk7Ci0gICAgVEdyYXBoTm9kZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3Ig
YmVnaW4oKSBjb25zdCB7IHJldHVybiBtQWxsTm9kZXMuYmVnaW4oKTsgfQotICAgIFRHcmFwaE5v
ZGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1BbGxOb2Rlcy5l
bmQoKTsgfQotCi0gICAgVEdyYXBoU3ltYm9sVmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpblNh
bXBsZXJTeW1ib2xzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtU2FtcGxlclN5bWJv
bHMuYmVnaW4oKTsKLSAgICB9Ci0KLSAgICBUR3JhcGhTeW1ib2xWZWN0b3I6OmNvbnN0X2l0ZXJh
dG9yIGVuZFNhbXBsZXJTeW1ib2xzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtU2Ft
cGxlclN5bWJvbHMuZW5kKCk7Ci0gICAgfQotCi0gICAgVEZ1bmN0aW9uQ2FsbFZlY3Rvcjo6Y29u
c3RfaXRlcmF0b3IgYmVnaW5Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMuYmVnaW4oKTsKLSAgICB9
Ci0KLSAgICBURnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9pdGVyYXRvciBlbmRVc2VyRGVmaW5l
ZEZ1bmN0aW9uQ2FsbHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1Vc2VyRGVmaW5l
ZEZ1bmN0aW9uQ2FsbHMuZW5kKCk7Ci0gICAgfQotCi0gICAgVEdyYXBoQXJndW1lbnQqIGNyZWF0
ZUFyZ3VtZW50KFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCwgaW50IGFyZ3Vt
ZW50TnVtYmVyKTsKLSAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIGNyZWF0ZUZ1bmN0aW9uQ2FsbChU
SW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpOwotICAgIFRHcmFwaFN5bWJvbCog
Z2V0T3JDcmVhdGVTeW1ib2woVEludGVybVN5bWJvbCogaW50ZXJtU3ltYm9sKTsKLSAgICBUR3Jh
cGhTZWxlY3Rpb24qIGNyZWF0ZVNlbGVjdGlvbihUSW50ZXJtU2VsZWN0aW9uKiBpbnRlcm1TZWxl
Y3Rpb24pOwotICAgIFRHcmFwaExvb3AqIGNyZWF0ZUxvb3AoVEludGVybUxvb3AqIGludGVybUxv
b3ApOwotICAgIFRHcmFwaExvZ2ljYWxPcCogY3JlYXRlTG9naWNhbE9wKFRJbnRlcm1CaW5hcnkq
IGludGVybUxvZ2ljYWxPcCk7Ci1wcml2YXRlOgotICAgIHR5cGVkZWYgVE1hcDxpbnQsIFRHcmFw
aFN5bWJvbCo+IFRTeW1ib2xJZE1hcDsKLSAgICB0eXBlZGVmIHN0ZDo6cGFpcjxpbnQsIFRHcmFw
aFN5bWJvbCo+IFRTeW1ib2xJZFBhaXI7Ci0KLSAgICBUR3JhcGhOb2RlVmVjdG9yIG1BbGxOb2Rl
czsKLSAgICBUR3JhcGhTeW1ib2xWZWN0b3IgbVNhbXBsZXJTeW1ib2xzOwotICAgIFRGdW5jdGlv
bkNhbGxWZWN0b3IgbVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxsczsKLSAgICBUU3ltYm9sSWRNYXAg
bVN5bWJvbElkTWFwOwotfTsKLQotLy8KLS8vIEZvciB0cmF2ZXJzaW5nIHRoZSBkZXBlbmRlbmN5
IGdyYXBoLiBVc2VycyBzaG91bGQgZGVyaXZlIGZyb20gdGhpcywKLS8vIHB1dCB0aGVpciB0cmF2
ZXJzYWwgc3BlY2lmaWMgZGF0YSBpbiBpdCwgYW5kIHRoZW4gcGFzcyBpdCB0byBhCi0vLyB0cmF2
ZXJzZSBtZXRob2QuCi0vLwotLy8gV2hlbiB1c2luZyB0aGlzLCBqdXN0IGZpbGwgaW4gdGhlIG1l
dGhvZHMgZm9yIG5vZGVzIHlvdSB3YW50IHZpc2l0ZWQuCi0vLwotY2xhc3MgVERlcGVuZGVuY3lH
cmFwaFRyYXZlcnNlciB7Ci1wdWJsaWM6Ci0gICAgVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcigp
IDogbURlcHRoKDApIHt9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEdyYXBoU3lt
Ym9sKiBzeW1ib2wpIHt9OwotICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFyZ3VtZW50KFRHcmFwaEFy
Z3VtZW50KiBzZWxlY3Rpb24pIHt9OwotICAgIHZpcnR1YWwgdm9pZCB2aXNpdEZ1bmN0aW9uQ2Fs
bChUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCkge307Ci0gICAgdmlydHVhbCB2b2lk
IHZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKSB7fTsKLSAgICB2aXJ0
dWFsIHZvaWQgdmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3ApIHt9OwotICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCkge307Ci0KLSAgICBp
bnQgZ2V0RGVwdGgoKSBjb25zdCB7IHJldHVybiBtRGVwdGg7IH0KLSAgICB2b2lkIGluY3JlbWVu
dERlcHRoKCkgeyArK21EZXB0aDsgfQotICAgIHZvaWQgZGVjcmVtZW50RGVwdGgoKSB7IC0tbURl
cHRoOyB9Ci0KLSAgICB2b2lkIGNsZWFyVmlzaXRlZCgpIHsgbVZpc2l0ZWQuY2xlYXIoKTsgfQot
ICAgIHZvaWQgbWFya1Zpc2l0ZWQoVEdyYXBoTm9kZSogbm9kZSkgeyBtVmlzaXRlZC5pbnNlcnQo
bm9kZSk7IH0KLSAgICBib29sIGlzVmlzaXRlZChUR3JhcGhOb2RlKiBub2RlKSBjb25zdCB7IHJl
dHVybiBtVmlzaXRlZC5maW5kKG5vZGUpICE9IG1WaXNpdGVkLmVuZCgpOyB9Ci1wcml2YXRlOgot
ICAgIGludCBtRGVwdGg7Ci0gICAgVEdyYXBoTm9kZVNldCBtVmlzaXRlZDsKLX07Ci0KLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdy
YXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjZlNmQ1N2E0ZmY4MjkzNzg0ZGNlYTVmZGVlMjA3MWNi
MTMwNmI4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIyNyArMCwwIEBACi0vLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLQotI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIu
aCIKLQotdm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6YnVpbGQoVEludGVybU5vZGUqIG5v
ZGUsIFREZXBlbmRlbmN5R3JhcGgqIGdyYXBoKQotewotICAgIFREZXBlbmRlbmN5R3JhcGhCdWls
ZGVyIGJ1aWxkZXIoZ3JhcGgpOwotICAgIGJ1aWxkZXIuYnVpbGQobm9kZSk7Ci19Ci0KLWJvb2wg
VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50
ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUpCi17Ci0gICAgc3dpdGNoIChpbnRlcm1BZ2dy
ZWdhdGUtPmdldE9wKCkpIHsKLSAgICAgICAgY2FzZSBFT3BGdW5jdGlvbjogdmlzaXRGdW5jdGlv
bkRlZmluaXRpb24oaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wRnVu
Y3Rpb25DYWxsOiB2aXNpdEZ1bmN0aW9uQ2FsbChpbnRlcm1BZ2dyZWdhdGUpOyBicmVhazsKLSAg
ICAgICAgZGVmYXVsdDogdmlzaXRBZ2dyZWdhdGVDaGlsZHJlbihpbnRlcm1BZ2dyZWdhdGUpOyBi
cmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgVERlcGVuZGVuY3lH
cmFwaEJ1aWxkZXI6OnZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFRJbnRlcm1BZ2dyZWdhdGUqIGlu
dGVybUFnZ3JlZ2F0ZSkKLXsKLSAgICAvLyBDdXJyZW50bHksIHdlIGRvIG5vdCBzdXBwb3J0IHVz
ZXIgZGVmaW5lZCBmdW5jdGlvbnMuCi0gICAgaWYgKGludGVybUFnZ3JlZ2F0ZS0+Z2V0TmFtZSgp
ICE9ICJtYWluKCIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHZpc2l0QWdncmVnYXRlQ2hpbGRy
ZW4oaW50ZXJtQWdncmVnYXRlKTsKLX0KLQotLy8gVGFrZXMgYW4gZXhwcmVzc2lvbiBsaWtlICJm
KHgpIiBhbmQgY3JlYXRlcyBhIGRlcGVuZGVuY3kgZ3JhcGggbGlrZQotLy8gInggLT4gYXJndW1l
bnQgMCAtPiBmdW5jdGlvbiBjYWxsIi4KLXZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZp
c2l0RnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCkKLXsK
LSAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCA9IG1HcmFwaC0+Y3JlYXRlRnVu
Y3Rpb25DYWxsKGludGVybUZ1bmN0aW9uQ2FsbCk7Ci0KLSAgICAvLyBSdW4gdGhyb3VnaCB0aGUg
ZnVuY3Rpb24gY2FsbCBhcmd1bWVudHMuCi0gICAgaW50IGFyZ3VtZW50TnVtYmVyID0gMDsKLSAg
ICBUSW50ZXJtU2VxdWVuY2UmIGludGVybUFyZ3VtZW50cyA9IGludGVybUZ1bmN0aW9uQ2FsbC0+
Z2V0U2VxdWVuY2UoKTsKLSAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IGludGVybUFyZ3VtZW50cy5iZWdpbigpOwotICAgICAgICAgaXRlciAhPSBpbnRlcm1B
cmd1bWVudHMuZW5kKCk7Ci0gICAgICAgICArK2l0ZXIsICsrYXJndW1lbnROdW1iZXIpCi0gICAg
ewotICAgICAgICBUTm9kZVNldE1haW50YWluZXIgbm9kZVNldE1haW50YWluZXIodGhpcyk7Ci0K
LSAgICAgICAgVEludGVybU5vZGUqIGludGVybUFyZ3VtZW50ID0gKml0ZXI7Ci0gICAgICAgIGlu
dGVybUFyZ3VtZW50LT50cmF2ZXJzZSh0aGlzKTsKLQotICAgICAgICBpZiAoVFBhcmVudE5vZGVT
ZXQqIGFyZ3VtZW50Tm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0KCkpIHsKLSAgICAgICAgICAg
IFRHcmFwaEFyZ3VtZW50KiBhcmd1bWVudCA9IG1HcmFwaC0+Y3JlYXRlQXJndW1lbnQoaW50ZXJt
RnVuY3Rpb25DYWxsLCBhcmd1bWVudE51bWJlcik7Ci0gICAgICAgICAgICBjb25uZWN0TXVsdGlw
bGVOb2Rlc1RvU2luZ2xlTm9kZShhcmd1bWVudE5vZGVzLCBhcmd1bWVudCk7Ci0gICAgICAgICAg
ICBhcmd1bWVudC0+YWRkRGVwZW5kZW50Tm9kZShmdW5jdGlvbkNhbGwpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgLy8gUHVzaCB0aGUgbGVmdG1vc3Qgc3ltYm9sIG9mIHRoaXMgZnVuY3Rpb24g
Y2FsbCBpbnRvIHRoZSBjdXJyZW50IHNldCBvZiBkZXBlbmRlbnQgc3ltYm9scyB0bwotICAgIC8v
IHJlcHJlc2VudCB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gY2FsbC4KLSAgICAvLyBUaHVz
LCBhbiBleHByZXNzaW9uIGxpa2UgInkgPSBmKHgpIiB3aWxsIHlpZWxkIGEgZGVwZW5kZW5jeSBn
cmFwaCBsaWtlCi0gICAgLy8gInggLT4gYXJndW1lbnQgMCAtPiBmdW5jdGlvbiBjYWxsIC0+IHki
LgotICAgIC8vIFRoaXMgbGluZSBlc3NlbnRpYWxseSBwYXNzZXMgdGhlIGZ1bmN0aW9uIGNhbGwg
bm9kZSBiYWNrIHVwIHRvIGFuIGVhcmxpZXIgdmlzaXRBc3NpZ25tZW50Ci0gICAgLy8gY2FsbCwg
d2hpY2ggd2lsbCBjcmVhdGUgdGhlIGNvbm5lY3Rpb24gImZ1bmN0aW9uIGNhbGwgLT4geSIuCi0g
ICAgbU5vZGVTZXRzLmluc2VydEludG9Ub3BTZXQoZnVuY3Rpb25DYWxsKTsKLX0KLQotdm9pZCBU
RGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBZ2dyZWdhdGVDaGlsZHJlbihUSW50ZXJtQWdn
cmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUpCi17Ci0gICAgVEludGVybVNlcXVlbmNlJiBzZXF1ZW5j
ZSA9IGludGVybUFnZ3JlZ2F0ZS0+Z2V0U2VxdWVuY2UoKTsKLSAgICBmb3IoVEludGVybVNlcXVl
bmNlOjpjb25zdF9pdGVyYXRvciBpdGVyID0gc2VxdWVuY2UuYmVnaW4oKTsgaXRlciAhPSBzZXF1
ZW5jZS5lbmQoKTsgKytpdGVyKQotICAgIHsKLSAgICAgICAgVEludGVybU5vZGUqIGludGVybUNo
aWxkID0gKml0ZXI7Ci0gICAgICAgIGludGVybUNoaWxkLT50cmF2ZXJzZSh0aGlzKTsKLSAgICB9
Ci19Ci0KLXZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0U3ltYm9sKFRJbnRlcm1T
eW1ib2wqIGludGVybVN5bWJvbCkKLXsKLSAgICAvLyBQdXNoIHRoaXMgc3ltYm9sIGludG8gdGhl
IHNldCBvZiBkZXBlbmRlbnQgc3ltYm9scyBmb3IgdGhlIGN1cnJlbnQgYXNzaWdubWVudCBvciBj
b25kaXRpb24KLSAgICAvLyB0aGF0IHdlIGFyZSB0cmF2ZXJzaW5nLgotICAgIFRHcmFwaFN5bWJv
bCogc3ltYm9sID0gbUdyYXBoLT5nZXRPckNyZWF0ZVN5bWJvbChpbnRlcm1TeW1ib2wpOwotICAg
IG1Ob2RlU2V0cy5pbnNlcnRJbnRvVG9wU2V0KHN5bWJvbCk7Ci0KLSAgICAvLyBJZiB0aGlzIHN5
bWJvbCBpcyB0aGUgY3VycmVudCBsZWZ0bW9zdCBzeW1ib2wgdW5kZXIgYW4gYXNzaWdubWVudCwg
cmVwbGFjZSB0aGUgcHJldmlvdXMKLSAgICAvLyBsZWZ0bW9zdCBzeW1ib2wgd2l0aCB0aGlzIHN5
bWJvbC4KLSAgICBpZiAoIW1MZWZ0bW9zdFN5bWJvbHMuZW1wdHkoKSAmJiBtTGVmdG1vc3RTeW1i
b2xzLnRvcCgpICE9ICZtUmlnaHRTdWJ0cmVlKSB7Ci0gICAgICAgIG1MZWZ0bW9zdFN5bWJvbHMu
cG9wKCk7Ci0gICAgICAgIG1MZWZ0bW9zdFN5bWJvbHMucHVzaChzeW1ib2wpOwotICAgIH0KLX0K
LQotYm9vbCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQs
IFRJbnRlcm1CaW5hcnkqIGludGVybUJpbmFyeSkKLXsKLSAgICBUT3BlcmF0b3Igb3AgPSBpbnRl
cm1CaW5hcnktPmdldE9wKCk7Ci0gICAgaWYgKG9wID09IEVPcEluaXRpYWxpemUgfHwgaW50ZXJt
QmluYXJ5LT5pc0Fzc2lnbm1lbnQoKSkKLSAgICAgICAgdmlzaXRBc3NpZ25tZW50KGludGVybUJp
bmFyeSk7Ci0gICAgZWxzZSBpZiAob3AgPT0gRU9wTG9naWNhbEFuZCB8fCBvcCA9PSBFT3BMb2dp
Y2FsT3IpCi0gICAgICAgIHZpc2l0TG9naWNhbE9wKGludGVybUJpbmFyeSk7Ci0gICAgZWxzZQot
ICAgICAgICB2aXNpdEJpbmFyeUNoaWxkcmVuKGludGVybUJpbmFyeSk7Ci0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QXNzaWdubWVu
dChUSW50ZXJtQmluYXJ5KiBpbnRlcm1Bc3NpZ25tZW50KQotewotICAgIFRJbnRlcm1UeXBlZCog
aW50ZXJtTGVmdCA9IGludGVybUFzc2lnbm1lbnQtPmdldExlZnQoKTsKLSAgICBpZiAoIWludGVy
bUxlZnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFRHcmFwaFN5bWJvbCogbGVmdG1vc3RTeW1i
b2wgPSBOVUxMOwotCi0gICAgewotICAgICAgICBUTm9kZVNldE1haW50YWluZXIgbm9kZVNldE1h
aW50YWluZXIodGhpcyk7Ci0KLSAgICAgICAgewotICAgICAgICAgICAgVExlZnRtb3N0U3ltYm9s
TWFpbnRhaW5lciBsZWZ0bW9zdFN5bWJvbE1haW50YWluZXIodGhpcywgbUxlZnRTdWJ0cmVlKTsK
LSAgICAgICAgICAgIGludGVybUxlZnQtPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAgICAgbGVm
dG1vc3RTeW1ib2wgPSBtTGVmdG1vc3RTeW1ib2xzLnRvcCgpOwotCi0gICAgICAgICAgICAvLyBB
ZnRlciB0cmF2ZXJzaW5nIHRoZSBsZWZ0IHN1YnRyZWUgb2YgdGhpcyBhc3NpZ25tZW50LCB3ZSBz
aG91bGQgaGF2ZSBmb3VuZCBhIHJlYWwKLSAgICAgICAgICAgIC8vIGxlZnRtb3N0IHN5bWJvbCwg
YW5kIHRoZSBsZWZ0bW9zdCBzeW1ib2wgc2hvdWxkIG5vdCBiZSBhIHBsYWNlaG9sZGVyLgotICAg
ICAgICAgICAgQVNTRVJUKGxlZnRtb3N0U3ltYm9sICE9ICZtTGVmdFN1YnRyZWUpOwotICAgICAg
ICAgICAgQVNTRVJUKGxlZnRtb3N0U3ltYm9sICE9ICZtUmlnaHRTdWJ0cmVlKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybVJpZ2h0ID0gaW50ZXJtQXNzaWdu
bWVudC0+Z2V0UmlnaHQoKSkgewotICAgICAgICAgICAgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5l
ciBsZWZ0bW9zdFN5bWJvbE1haW50YWluZXIodGhpcywgbVJpZ2h0U3VidHJlZSk7Ci0gICAgICAg
ICAgICBpbnRlcm1SaWdodC0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoVFBhcmVudE5vZGVTZXQqIGFzc2lnbm1lbnROb2RlcyA9IG1Ob2RlU2V0cy5nZXRUb3BTZXQo
KSkKLSAgICAgICAgICAgIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGFzc2lnbm1l
bnROb2RlcywgbGVmdG1vc3RTeW1ib2wpOwotICAgIH0KLQotICAgIC8vIFB1c2ggdGhlIGxlZnRt
b3N0IHN5bWJvbCBvZiB0aGlzIGFzc2lnbm1lbnQgaW50byB0aGUgY3VycmVudCBzZXQgb2YgZGVw
ZW5kZW50IHN5bWJvbHMgdG8KLSAgICAvLyByZXByZXNlbnQgdGhlIHJlc3VsdCBvZiB0aGlzIGFz
c2lnbm1lbnQuCi0gICAgLy8gQW4gZXhwcmVzc2lvbiBsaWtlICJhID0gKGIgPSBjKSIgd2lsbCB5
aWVsZCBhIGRlcGVuZGVuY3kgZ3JhcGggbGlrZSAiYyAtPiBiIC0+IGEiLgotICAgIC8vIFRoaXMg
bGluZSBlc3NlbnRpYWxseSBwYXNzZXMgdGhlIGxlZnRtb3N0IHN5bWJvbCBvZiB0aGUgbmVzdGVk
IGFzc2lnbm1lbnQgKCJiIiBpbiB0aGlzCi0gICAgLy8gZXhhbXBsZSkgYmFjayB1cCB0byB0aGUg
ZWFybGllciB2aXNpdEFzc2lnbm1lbnQgY2FsbCBmb3IgdGhlIG91dGVyIGFzc2lnbm1lbnQsIHdo
aWNoIHdpbGwKLSAgICAvLyBjcmVhdGUgdGhlIGNvbm5lY3Rpb24gImIgLT4gYSIuCi0gICAgbU5v
ZGVTZXRzLmluc2VydEludG9Ub3BTZXQobGVmdG1vc3RTeW1ib2wpOwotfQotCi12b2lkIFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdExvZ2ljYWxPcChUSW50ZXJtQmluYXJ5KiBpbnRlcm1M
b2dpY2FsT3ApCi17Ci0gICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtTGVmdCA9IGludGVybUxv
Z2ljYWxPcC0+Z2V0TGVmdCgpKSB7Ci0gICAgICAgIFROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFp
bmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMpOwotCi0gICAgICAgIGludGVybUxlZnQtPnRyYXZl
cnNlKHRoaXMpOwotICAgICAgICBpZiAoVFBhcmVudE5vZGVTZXQqIGxlZnROb2RlcyA9IG1Ob2Rl
U2V0cy5nZXRUb3BTZXQoKSkgewotICAgICAgICAgICAgVEdyYXBoTG9naWNhbE9wKiBsb2dpY2Fs
T3AgPSBtR3JhcGgtPmNyZWF0ZUxvZ2ljYWxPcChpbnRlcm1Mb2dpY2FsT3ApOwotICAgICAgICAg
ICAgY29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUobGVmdE5vZGVzLCBsb2dpY2FsT3Ap
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtUmlnaHQg
PSBpbnRlcm1Mb2dpY2FsT3AtPmdldFJpZ2h0KCkpIHsKLSAgICAgICAgVExlZnRtb3N0U3ltYm9s
TWFpbnRhaW5lciBsZWZ0bW9zdFN5bWJvbE1haW50YWluZXIodGhpcywgbVJpZ2h0U3VidHJlZSk7
Ci0gICAgICAgIGludGVybVJpZ2h0LT50cmF2ZXJzZSh0aGlzKTsKLSAgICB9Ci19Ci0KLXZvaWQg
VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QmluYXJ5Q2hpbGRyZW4oVEludGVybUJpbmFy
eSogaW50ZXJtQmluYXJ5KQotewotICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybUxlZnQgPSBp
bnRlcm1CaW5hcnktPmdldExlZnQoKSkKLSAgICAgICAgaW50ZXJtTGVmdC0+dHJhdmVyc2UodGhp
cyk7Ci0KLSAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1SaWdodCA9IGludGVybUJpbmFyeS0+
Z2V0UmlnaHQoKSkgewotICAgICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIGxlZnRtb3N0
U3ltYm9sTWFpbnRhaW5lcih0aGlzLCBtUmlnaHRTdWJ0cmVlKTsKLSAgICAgICAgaW50ZXJtUmln
aHQtPnRyYXZlcnNlKHRoaXMpOwotICAgIH0KLX0KLQotYm9vbCBURGVwZW5kZW5jeUdyYXBoQnVp
bGRlcjo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qIGludGVy
bVNlbGVjdGlvbikKLXsKLSAgICBpZiAoVEludGVybU5vZGUqIGludGVybUNvbmRpdGlvbiA9IGlu
dGVybVNlbGVjdGlvbi0+Z2V0Q29uZGl0aW9uKCkpIHsKLSAgICAgICAgVE5vZGVTZXRNYWludGFp
bmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMpOwotCi0gICAgICAgIGludGVybUNvbmRpdGlvbi0+
dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIGlmIChUUGFyZW50Tm9kZVNldCogY29uZGl0aW9uTm9k
ZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0KCkpIHsKLSAgICAgICAgICAgIFRHcmFwaFNlbGVjdGlv
biogc2VsZWN0aW9uID0gbUdyYXBoLT5jcmVhdGVTZWxlY3Rpb24oaW50ZXJtU2VsZWN0aW9uKTsK
LSAgICAgICAgICAgIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGNvbmRpdGlvbk5v
ZGVzLCBzZWxlY3Rpb24pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKFRJbnRlcm1Ob2Rl
KiBpbnRlcm1UcnVlQmxvY2sgPSBpbnRlcm1TZWxlY3Rpb24tPmdldFRydWVCbG9jaygpKQotICAg
ICAgICBpbnRlcm1UcnVlQmxvY2stPnRyYXZlcnNlKHRoaXMpOwotCi0gICAgaWYgKFRJbnRlcm1O
b2RlKiBpbnRlcm1GYWxzZUJsb2NrID0gaW50ZXJtU2VsZWN0aW9uLT5nZXRGYWxzZUJsb2NrKCkp
Ci0gICAgICAgIGludGVybUZhbHNlQmxvY2stPnRyYXZlcnNlKHRoaXMpOwotCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdExvb3AoVmlz
aXQgdmlzaXQsIFRJbnRlcm1Mb29wKiBpbnRlcm1Mb29wKQotewotICAgIGlmIChUSW50ZXJtVHlw
ZWQqIGludGVybUNvbmRpdGlvbiA9IGludGVybUxvb3AtPmdldENvbmRpdGlvbigpKSB7Ci0gICAg
ICAgIFROb2RlU2V0TWFpbnRhaW5lciBub2RlU2V0TWFpbnRhaW5lcih0aGlzKTsKLQotICAgICAg
ICBpbnRlcm1Db25kaXRpb24tPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBpZiAoVFBhcmVudE5v
ZGVTZXQqIGNvbmRpdGlvbk5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKSB7Ci0gICAgICAg
ICAgICBUR3JhcGhMb29wKiBsb29wID0gbUdyYXBoLT5jcmVhdGVMb29wKGludGVybUxvb3ApOwot
ICAgICAgICAgICAgY29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoY29uZGl0aW9uTm9k
ZXMsIGxvb3ApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKFRJbnRlcm1Ob2RlKiBpbnRl
cm1Cb2R5ID0gaW50ZXJtTG9vcC0+Z2V0Qm9keSgpKQotICAgICAgICBpbnRlcm1Cb2R5LT50cmF2
ZXJzZSh0aGlzKTsKLQotICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybUV4cHJlc3Npb24gPSBp
bnRlcm1Mb29wLT5nZXRFeHByZXNzaW9uKCkpCi0gICAgICAgIGludGVybUV4cHJlc3Npb24tPnRy
YXZlcnNlKHRoaXMpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0KLXZvaWQgVERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXI6OmNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKFRQYXJlbnRO
b2RlU2V0KiBub2RlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRHcmFwaE5vZGUqIG5vZGUpIGNvbnN0Ci17Ci0gICAgZm9y
IChUUGFyZW50Tm9kZVNldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG5vZGVzLT5iZWdpbigpOyBp
dGVyICE9IG5vZGVzLT5lbmQoKTsgKytpdGVyKQotICAgIHsKLSAgICAgICAgVEdyYXBoUGFyZW50
Tm9kZSogY3VycmVudE5vZGUgPSAqaXRlcjsKLSAgICAgICAgY3VycmVudE5vZGUtPmFkZERlcGVu
ZGVudE5vZGUobm9kZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1ZjIzMmNiMjFlOTM2
ZDkyN2E5NjcyNWQyZjBkMTZjOWRjNGUzOWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2Rl
cGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4MSAr
MCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRF
TkNZX0dSQVBIX0JVSUxERVJfSAotI2RlZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZ
X0dSQVBIX0JVSUxERVJfSAotCi0jaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5j
eUdyYXBoLmgiCi0KLS8vCi0vLyBDcmVhdGVzIGEgZGVwZW5kZW5jeSBncmFwaCBvZiBzeW1ib2xz
LCBmdW5jdGlvbiBjYWxscywgY29uZGl0aW9ucyBldGMuIGJ5IHRyYXZlcnNpbmcgYQotLy8gaW50
ZXJtZWRpYXRlIHRyZWUuCi0vLwotY2xhc3MgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIgOiBwdWJs
aWMgVEludGVybVRyYXZlcnNlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYnVpbGQoVElu
dGVybU5vZGUqIG5vZGUsIFREZXBlbmRlbmN5R3JhcGgqIGdyYXBoKTsKLQotICAgIHZpcnR1YWwg
dm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7Ci0gICAgdmlydHVhbCBib29sIHZpc2l0
QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7Ci0gICAgdmlydHVhbCBib29sIHZp
c2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKik7Ci0gICAgdmlydHVh
bCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7Ci0g
ICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqKTsKLQot
cHJpdmF0ZToKLSAgICB0eXBlZGVmIHN0ZDo6c3RhY2s8VEdyYXBoU3ltYm9sKj4gVFN5bWJvbFN0
YWNrOwotICAgIHR5cGVkZWYgc3RkOjpzZXQ8VEdyYXBoUGFyZW50Tm9kZSo+IFRQYXJlbnROb2Rl
U2V0OwotCi0gICAgLy8KLSAgICAvLyBGb3IgY29sbGVjdGluZyB0aGUgZGVwZW5kZW50IG5vZGVz
IG9mIGFzc2lnbm1lbnRzLCBjb25kaXRpb25zLCBldGMuCi0gICAgLy8gd2hpbGUgdHJhdmVyc2lu
ZyB0aGUgaW50ZXJtZWRpYXRlIHRyZWUuCi0gICAgLy8KLSAgICAvLyBUaGlzIGRhdGEgc3RydWN0
dXJlIGlzIHN0YWNrIG9mIHNldHMuIEVhY2ggc2V0IGNvbnRhaW5zIGRlcGVuZGVuY3kgZ3JhcGgg
cGFyZW50IG5vZGVzLgotICAgIC8vCi0gICAgY2xhc3MgVE5vZGVTZXRTdGFjayB7Ci0gICAgcHVi
bGljOgotICAgICAgICBUTm9kZVNldFN0YWNrKCkge307Ci0gICAgICAgIH5UTm9kZVNldFN0YWNr
KCkgeyBjbGVhcigpOyB9Ci0KLSAgICAgICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQg
YWZ0ZXIgYSBwdXNoU2V0LgotICAgICAgICAvLyBSZXR1cm5zIE5VTEwgaWYgdGhlIHRvcCBzZXQg
aXMgZW1wdHkuCi0gICAgICAgIFRQYXJlbnROb2RlU2V0KiBnZXRUb3BTZXQoKSBjb25zdAotICAg
ICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIW5vZGVTZXRzLmVtcHR5KCkpOwotICAgICAgICAg
ICAgVFBhcmVudE5vZGVTZXQqIHRvcFNldCA9IG5vZGVTZXRzLnRvcCgpOwotICAgICAgICAgICAg
cmV0dXJuICF0b3BTZXQtPmVtcHR5KCkgPyB0b3BTZXQgOiBOVUxMOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdm9pZCBwdXNoU2V0KCkgeyBub2RlU2V0cy5wdXNoKG5ldyBUUGFyZW50Tm9kZVNldCgp
KTsgfQotICAgICAgICB2b2lkIHBvcFNldCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VS
VCghbm9kZVNldHMuZW1wdHkoKSk7Ci0gICAgICAgICAgICBkZWxldGUgbm9kZVNldHMudG9wKCk7
Ci0gICAgICAgICAgICBub2RlU2V0cy5wb3AoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFBv
cHMgdGhlIHRvcCBzZXQgYW5kIGFkZHMgaXRzIGNvbnRlbnRzIHRvIHRoZSBuZXcgdG9wIHNldC4K
LSAgICAgICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYWZ0ZXIgYSBwdXNoU2V0Lgot
ICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBzZXQgYmVsb3cgdGhlIHRvcCBzZXQsIHRoZSB0b3Ag
c2V0IGlzIGp1c3QgZGVsZXRlZC4KLSAgICAgICAgdm9pZCBwb3BTZXRJbnRvTmV4dCgpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghbm9kZVNldHMuZW1wdHkoKSk7Ci0gICAgICAgICAg
ICBUUGFyZW50Tm9kZVNldCogb2xkVG9wU2V0ID0gbm9kZVNldHMudG9wKCk7Ci0gICAgICAgICAg
ICBub2RlU2V0cy5wb3AoKTsKLQotICAgICAgICAgICAgaWYgKCFub2RlU2V0cy5lbXB0eSgpKSB7
Ci0gICAgICAgICAgICAgICAgVFBhcmVudE5vZGVTZXQqIG5ld1RvcFNldCA9IG5vZGVTZXRzLnRv
cCgpOwotICAgICAgICAgICAgICAgIG5ld1RvcFNldC0+aW5zZXJ0KG9sZFRvcFNldC0+YmVnaW4o
KSwgb2xkVG9wU2V0LT5lbmQoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRlbGV0
ZSBvbGRUb3BTZXQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBEb2VzIG5vdGhpbmcgaWYgdGhl
cmUgaXMgbm8gdG9wIHNldC4KLSAgICAgICAgLy8gVGhpcyBjYW4gYmUgY2FsbGVkIHdoZW4gdGhl
cmUgaXMgbm8gdG9wIHNldCBpZiB3ZSBhcmUgdmlzaXRpbmcKLSAgICAgICAgLy8gc3ltYm9scyB0
aGF0IGFyZSBub3QgdW5kZXIgYW4gYXNzaWdubWVudCBvciBjb25kaXRpb24uCi0gICAgICAgIC8v
IFdlIGRvbid0IG5lZWQgdG8gdHJhY2sgdGhvc2Ugc3ltYm9scy4KLSAgICAgICAgdm9pZCBpbnNl
cnRJbnRvVG9wU2V0KFRHcmFwaFBhcmVudE5vZGUqIG5vZGUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmIChub2RlU2V0cy5lbXB0eSgpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICAgICAgbm9kZVNldHMudG9wKCktPmluc2VydChub2RlKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZvaWQgY2xlYXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICB3aGlsZSAoIW5vZGVTZXRz
LmVtcHR5KCkpCi0gICAgICAgICAgICAgICAgcG9wU2V0KCk7Ci0gICAgICAgIH0KLQotICAgIHBy
aXZhdGU6Ci0gICAgICAgIHR5cGVkZWYgc3RkOjpzdGFjazxUUGFyZW50Tm9kZVNldCo+IFRQYXJl
bnROb2RlU2V0U3RhY2s7Ci0KLSAgICAgICAgVFBhcmVudE5vZGVTZXRTdGFjayBub2RlU2V0czsK
LSAgICB9OwotCi0gICAgLy8KLSAgICAvLyBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIHB1c2hl
cyBhIG5ldyBub2RlIHNldCB3aGVuIGluc3RhbnRpYXRlZC4KLSAgICAvLyBXaGVuIHRoZSBpbnN0
YW5jZSBnb2VzIG91dCBvZiBzY29wZSwgaXQgYW5kIHBvcHMgdGhlIG5vZGUgc2V0LgotICAgIC8v
Ci0gICAgY2xhc3MgVE5vZGVTZXRNYWludGFpbmVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFRO
b2RlU2V0TWFpbnRhaW5lcihURGVwZW5kZW5jeUdyYXBoQnVpbGRlciogZmFjdG9yeSkKLSAgICAg
ICAgICAgIDogc2V0cyhmYWN0b3J5LT5tTm9kZVNldHMpIHsgc2V0cy5wdXNoU2V0KCk7IH0KLSAg
ICAgICAgflROb2RlU2V0TWFpbnRhaW5lcigpIHsgc2V0cy5wb3BTZXQoKTsgfQotICAgIHByb3Rl
Y3RlZDoKLSAgICAgICAgVE5vZGVTZXRTdGFjayYgc2V0czsKLSAgICB9OwotCi0gICAgLy8KLSAg
ICAvLyBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIHB1c2hlcyBhIG5ldyBub2RlIHNldCB3aGVu
IGluc3RhbnRpYXRlZC4KLSAgICAvLyBXaGVuIHRoZSBpbnN0YW5jZSBnb2VzIG91dCBvZiBzY29w
ZSwgaXQgYW5kIHBvcHMgdGhlIHRvcCBub2RlIHNldCBhbmQgYWRkcyBpdHMgY29udGVudHMgdG8K
LSAgICAvLyB0aGUgbmV3IHRvcCBub2RlIHNldC4KLSAgICAvLwotICAgIGNsYXNzIFROb2RlU2V0
UHJvcGFnYXRpbmdNYWludGFpbmVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFROb2RlU2V0UHJv
cGFnYXRpbmdNYWludGFpbmVyKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyKiBmYWN0b3J5KQotICAg
ICAgICAgICAgOiBzZXRzKGZhY3RvcnktPm1Ob2RlU2V0cykgeyBzZXRzLnB1c2hTZXQoKTsgfQot
ICAgICAgICB+VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIoKSB7IHNldHMucG9wU2V0SW50
b05leHQoKTsgfQotICAgIHByb3RlY3RlZDoKLSAgICAgICAgVE5vZGVTZXRTdGFjayYgc2V0czsK
LSAgICB9OwotCi0gICAgLy8KLSAgICAvLyBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGtlZXBz
IHRyYWNrIG9mIHRoZSBsZWZ0bW9zdCBzeW1ib2wgd2hpbGUgd2UncmUgZXhwbG9yaW5nIGFuCi0g
ICAgLy8gYXNzaWdubWVudC4KLSAgICAvLyBJdCB3aWxsIHB1c2ggdGhlIHBsYWNlaG9sZGVyIHN5
bWJvbCBrTGVmdFN1YnRyZWUgd2hlbiBpbnN0YW50aWF0ZWQgdW5kZXIgYSBsZWZ0IHN1YnRyZWUs
Ci0gICAgLy8gYW5kIGtSaWdodFN1YnRyZWUgdW5kZXIgYSByaWdodCBzdWJ0cmVlLgotICAgIC8v
IFdoZW4gaXQgZ29lcyBvdXQgb2Ygc2NvcGUsIGl0IHdpbGwgcG9wIHRoZSBsZWZ0bW9zdCBzeW1i
b2wgYXQgdGhlIHRvcCBvZiB0aGUgc2NvcGUuCi0gICAgLy8gRHVyaW5nIHRyYXZlcnNhbCwgdGhl
IFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyIHdpbGwgcmVwbGFjZSBrTGVmdFN1YnRyZWUgd2l0aCBh
IHJlYWwgc3ltYm9sLgotICAgIC8vIGtSaWdodFN1YnRyZWUgd2lsbCBuZXZlciBiZSByZXBsYWNl
ZCBieSBhIHJlYWwgc3ltYm9sIGJlY2F1c2Ugd2UgYXJlIHRyYWNraW5nIHRoZSBsZWZ0bW9zdAot
ICAgIC8vIHN5bWJvbC4KLSAgICAvLwotICAgIGNsYXNzIFRMZWZ0bW9zdFN5bWJvbE1haW50YWlu
ZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcihURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlciogZmFjdG9yeSwgVEdyYXBoU3ltYm9sJiBzdWJ0cmVlKQotICAg
ICAgICAgICAgOiBsZWZ0bW9zdFN5bWJvbHMoZmFjdG9yeS0+bUxlZnRtb3N0U3ltYm9scykKLSAg
ICAgICAgewotICAgICAgICAgICAgbmVlZHNQbGFjZWhvbGRlclN5bWJvbCA9IGxlZnRtb3N0U3lt
Ym9scy5lbXB0eSgpIHx8IGxlZnRtb3N0U3ltYm9scy50b3AoKSAhPSAmc3VidHJlZTsKLSAgICAg
ICAgICAgIGlmIChuZWVkc1BsYWNlaG9sZGVyU3ltYm9sKQotICAgICAgICAgICAgICAgIGxlZnRt
b3N0U3ltYm9scy5wdXNoKCZzdWJ0cmVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIH5UTGVmdG1v
c3RTeW1ib2xNYWludGFpbmVyKCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG5lZWRzUGxh
Y2Vob2xkZXJTeW1ib2wpCi0gICAgICAgICAgICAgICAgbGVmdG1vc3RTeW1ib2xzLnBvcCgpOwot
ICAgICAgICB9Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIFRTeW1ib2xTdGFjayYgbGVmdG1v
c3RTeW1ib2xzOwotICAgICAgICBib29sIG5lZWRzUGxhY2Vob2xkZXJTeW1ib2w7Ci0gICAgfTsK
LQotICAgIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyKFREZXBlbmRlbmN5R3JhcGgqIGdyYXBoKQot
ICAgICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIGZhbHNlKQotICAgICAgICAs
IG1MZWZ0U3VidHJlZShOVUxMKQotICAgICAgICAsIG1SaWdodFN1YnRyZWUoTlVMTCkKLSAgICAg
ICAgLCBtR3JhcGgoZ3JhcGgpIHt9Ci0gICAgdm9pZCBidWlsZChUSW50ZXJtTm9kZSogaW50ZXJt
Tm9kZSkgeyBpbnRlcm1Ob2RlLT50cmF2ZXJzZSh0aGlzKTsgfQotCi0gICAgdm9pZCBjb25uZWN0
TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShUUGFyZW50Tm9kZVNldCogbm9kZXMsIFRHcmFwaE5v
ZGUqIG5vZGUpIGNvbnN0OwotCi0gICAgdm9pZCB2aXNpdEFzc2lnbm1lbnQoVEludGVybUJpbmFy
eSopOwotICAgIHZvaWQgdmlzaXRMb2dpY2FsT3AoVEludGVybUJpbmFyeSopOwotICAgIHZvaWQg
dmlzaXRCaW5hcnlDaGlsZHJlbihUSW50ZXJtQmluYXJ5Kik7Ci0gICAgdm9pZCB2aXNpdEZ1bmN0
aW9uRGVmaW5pdGlvbihUSW50ZXJtQWdncmVnYXRlKik7Ci0gICAgdm9pZCB2aXNpdEZ1bmN0aW9u
Q2FsbChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpOwotICAgIHZvaWQgdmlz
aXRBZ2dyZWdhdGVDaGlsZHJlbihUSW50ZXJtQWdncmVnYXRlKik7Ci0KLSAgICBUR3JhcGhTeW1i
b2wgbUxlZnRTdWJ0cmVlOwotICAgIFRHcmFwaFN5bWJvbCBtUmlnaHRTdWJ0cmVlOwotCi0gICAg
VERlcGVuZGVuY3lHcmFwaCogbUdyYXBoOwotICAgIFROb2RlU2V0U3RhY2sgbU5vZGVTZXRzOwot
ICAgIFRTeW1ib2xTdGFjayBtTGVmdG1vc3RTeW1ib2xzOwotfTsKLQotI2VuZGlmICAvLyBDT01Q
SUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0JVSUxERVJfSApkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aE91dHB1dC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3Jh
cGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNmZjNDg5ZTdiNmYzMTQ2Y2M2YWRiOTMzOGMzMTlhZmE0MTNhNjQyZi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCi0KLXZvaWQgVERlcGVuZGVuY3lH
cmFwaE91dHB1dDo6b3V0cHV0SW5kZW50YXRpb24oKQotewotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgZ2V0RGVwdGgoKTsgKytpKQotICAgICAgICBtU2luayA8PCAiICAiOwotfQotCi12b2lkIFRE
ZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFt
ZXRlcikKLXsKLSAgICBvdXRwdXRJbmRlbnRhdGlvbigpOwotICAgIG1TaW5rIDw8ICJhcmd1bWVu
dCAiIDw8IHBhcmFtZXRlci0+Z2V0QXJndW1lbnROdW1iZXIoKSA8PCAiIG9mIGNhbGwgdG8gIgot
ICAgICAgICAgIDw8IHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCktPmdldE5hbWUo
KSA8PCAiXG4iOwotfQotCi12b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0RnVuY3Rp
b25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxsKQotewotICAgIG91dHB1dElu
ZGVudGF0aW9uKCk7Ci0gICAgbVNpbmsgPDwgImZ1bmN0aW9uIGNhbGwgIiA8PCAgZnVuY3Rpb25D
YWxsLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKS0+Z2V0TmFtZSgpIDw8ICJcbiI7Ci19Ci0KLXZv
aWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRTeW1ib2woVEdyYXBoU3ltYm9sKiBzeW1i
b2wpCi17Ci0gICAgb3V0cHV0SW5kZW50YXRpb24oKTsKLSAgICBtU2luayA8PCBzeW1ib2wtPmdl
dEludGVybVN5bWJvbCgpLT5nZXRTeW1ib2woKSA8PCAiIChzeW1ib2wgaWQ6ICIKLSAgICAgICAg
ICA8PCBzeW1ib2wtPmdldEludGVybVN5bWJvbCgpLT5nZXRJZCgpIDw8ICIpXG4iOwotfQotCi12
b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlv
biogc2VsZWN0aW9uKQotewotICAgIG91dHB1dEluZGVudGF0aW9uKCk7Ci0gICAgbVNpbmsgPDwg
InNlbGVjdGlvblxuIjsKLX0KLQotdm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExv
b3AoVEdyYXBoTG9vcCogbG9vcCkKLXsKLSAgICBvdXRwdXRJbmRlbnRhdGlvbigpOwotICAgIG1T
aW5rIDw8ICJsb29wIGNvbmRpdGlvblxuIjsKLX0KLQotdm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0
cHV0Ojp2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCkKLXsKLSAgICBv
dXRwdXRJbmRlbnRhdGlvbigpOwotICAgIG1TaW5rIDw8ICJsb2dpY2FsICIgPDwgbG9naWNhbE9w
LT5nZXRPcFN0cmluZygpIDw8ICJcbiI7Ci19Ci0KLXZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1
dDo6b3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhURGVwZW5kZW5jeUdyYXBoJiBncmFwaCkKLXsKLSAg
ICBtU2luayA8PCAiXG4iOwotCi0gICAgZm9yIChUR3JhcGhOb2RlVmVjdG9yOjpjb25zdF9pdGVy
YXRvciBpdGVyID0gZ3JhcGguYmVnaW4oKTsgaXRlciAhPSBncmFwaC5lbmQoKTsgKytpdGVyKQot
ICAgIHsKLSAgICAgICAgVEdyYXBoTm9kZSogc3ltYm9sID0gKml0ZXI7Ci0gICAgICAgIG1TaW5r
IDw8ICItLS0gRGVwZW5kZW5jeSBncmFwaCBzcGFubmluZyB0cmVlIC0tLVxuIjsKLSAgICAgICAg
Y2xlYXJWaXNpdGVkKCk7Ci0gICAgICAgIHN5bWJvbC0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAg
IG1TaW5rIDw8ICJcbiI7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aE91dHB1dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTQ0N2RhOTg3ZDJlMmVk
YWVkODM5YjYxMmQ3M2JmYjlmODY1MmZhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAg
QEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lf
R1JBUEhfT1VUUFVUX0gKLSNkZWZpbmUgQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQ
SF9PVVRQVVRfSAotCi0jaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBo
LmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKLQotY2xhc3MgVERlcGVuZGVuY3lH
cmFwaE91dHB1dCA6IHB1YmxpYyBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyIHsKLXB1YmxpYzoK
LSAgICBURGVwZW5kZW5jeUdyYXBoT3V0cHV0KFRJbmZvU2lua0Jhc2UmIHNpbmspIDogbVNpbmso
c2luaykge30KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEdyYXBoU3ltYm9sKiBzeW1i
b2wpOwotICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFyZ3VtZW50KFRHcmFwaEFyZ3VtZW50KiBwYXJh
bWV0ZXIpOwotICAgIHZpcnR1YWwgdm9pZCB2aXNpdEZ1bmN0aW9uQ2FsbChUR3JhcGhGdW5jdGlv
bkNhbGwqIGZ1bmN0aW9uQ2FsbCk7Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0U2VsZWN0aW9uKFRH
cmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKTsKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRMb29wKFRH
cmFwaExvb3AqIGxvb3ApOwotICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvZ2ljYWxPcChUR3JhcGhM
b2dpY2FsT3AqIGxvZ2ljYWxPcCk7Ci0KLSAgICB2b2lkIG91dHB1dEFsbFNwYW5uaW5nVHJlZXMo
VERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpOwotcHJpdmF0ZToKLSAgICB2b2lkIG91dHB1dEluZGVu
dGF0aW9uKCk7Ci0KLSAgICBUSW5mb1NpbmtCYXNlJiBtU2luazsKLX07Ci0KLSNlbmRpZiAgLy8g
Q09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9PVVRQVVRfSApkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lH
cmFwaFRyYXZlcnNlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9k
ZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGIxNTg1NzVjZWMzNTFjYmM2ODk4NTk4MjkyYzQ4ODkyYTgwMGZmODUuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVk
ZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCi0KLS8vIFRoZXNlIG1ldGhv
ZHMgZG8gYSBicmVhZHRoLWZpcnN0IHRyYXZlcnNhbCB0aHJvdWdoIHRoZSBncmFwaCBhbmQgbWFy
ayB2aXNpdGVkIG5vZGVzLgotCi12b2lkIFRHcmFwaE5vZGU6OnRyYXZlcnNlKFREZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQotewotICAgIGdyYXBoVHJhdmVyc2VyLT5t
YXJrVmlzaXRlZCh0aGlzKTsKLX0KLQotdm9pZCBUR3JhcGhQYXJlbnROb2RlOjp0cmF2ZXJzZShU
RGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKLXsKLSAgICBUR3JhcGhO
b2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Ci0KLSAgICBncmFwaFRyYXZlcnNlci0+aW5j
cmVtZW50RGVwdGgoKTsKLQotICAgIC8vIFZpc2l0IHRoZSBwYXJlbnQgbm9kZSdzIGNoaWxkcmVu
LgotICAgIGZvciAoVEdyYXBoTm9kZVNldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1EZXBlbmRl
bnROb2Rlcy5iZWdpbigpOwotICAgICAgICAgaXRlciAhPSBtRGVwZW5kZW50Tm9kZXMuZW5kKCk7
Ci0gICAgICAgICArK2l0ZXIpCi0gICAgewotICAgICAgICBUR3JhcGhOb2RlKiBub2RlID0gKml0
ZXI7Ci0gICAgICAgIGlmICghZ3JhcGhUcmF2ZXJzZXItPmlzVmlzaXRlZChub2RlKSkKLSAgICAg
ICAgICAgIG5vZGUtPnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKLSAgICB9Ci0KLSAgICBncmFw
aFRyYXZlcnNlci0+ZGVjcmVtZW50RGVwdGgoKTsKLX0KLQotdm9pZCBUR3JhcGhBcmd1bWVudDo6
dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCi17Ci0g
ICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0QXJndW1lbnQodGhpcyk7Ci0gICAgVEdyYXBoUGFyZW50
Tm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOwotfQotCi12b2lkIFRHcmFwaEZ1bmN0aW9u
Q2FsbDo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIp
Ci17Ci0gICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0RnVuY3Rpb25DYWxsKHRoaXMpOwotICAgIFRH
cmFwaFBhcmVudE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKLX0KLQotdm9pZCBUR3Jh
cGhTeW1ib2w6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVy
c2VyKQotewotICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdFN5bWJvbCh0aGlzKTsKLSAgICBUR3Jh
cGhQYXJlbnROb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Ci19Ci0KLXZvaWQgVEdyYXBo
U2VsZWN0aW9uOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZl
cnNlcikKLXsKLSAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRTZWxlY3Rpb24odGhpcyk7Ci0gICAg
VEdyYXBoTm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOwotfQotCi12b2lkIFRHcmFwaExv
b3A6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQot
ewotICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdExvb3AodGhpcyk7Ci0gICAgVEdyYXBoTm9kZTo6
dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOwotfQotCi12b2lkIFRHcmFwaExvZ2ljYWxPcDo6dHJh
dmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCi17Ci0gICAg
Z3JhcGhUcmF2ZXJzZXItPnZpc2l0TG9naWNhbE9wKHRoaXMpOwotICAgIFRHcmFwaE5vZGU6OnRy
YXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9nZW5lcmF0ZV9wYXJzZXIuc2ggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2VuZXJhdGVfcGFyc2VyLnNoCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDc1NQppbmRleCBlNGQ4OGIyZTg0Y2Q0YTZlYmNiYTdkZDY3MmMxN2RjYWY3ZGRhNjQzLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nZW5lcmF0ZV9wYXJzZXIuc2gKKysrIC9kZXYvbnVs
bApAQCAtMSwyOCArMCwwIEBACi0jIS9iaW4vYmFzaAotIyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jIEdlbmVyYXRlcyBHTFNMIEVT
IHBhcnNlciAtIGdsc2xhbmdfbGV4LmNwcCwgZ2xzbGFuZ190YWIuaCwgYW5kIGdsc2xhbmdfdGFi
LmNwcAotCi1ydW5fZmxleCgpCi17Ci1pbnB1dF9maWxlPSRzY3JpcHRfZGlyLyQxLmwKLW91dHB1
dF9zb3VyY2U9JHNjcmlwdF9kaXIvJDFfbGV4LmNwcAotZmxleCAtLW5vbGluZSAtLW5vdW5pc3Rk
IC0tb3V0ZmlsZT0kb3V0cHV0X3NvdXJjZSAkaW5wdXRfZmlsZQotfQotCi1ydW5fYmlzb24oKQot
ewotaW5wdXRfZmlsZT0kc2NyaXB0X2Rpci8kMS55Ci1vdXRwdXRfaGVhZGVyPSRzY3JpcHRfZGly
LyQxX3RhYi5oCi1vdXRwdXRfc291cmNlPSRzY3JpcHRfZGlyLyQxX3RhYi5jcHAKLWJpc29uIC0t
bm8tbGluZXMgLS1za2VsZXRvbj15YWNjLmMgLS1kZWZpbmVzPSRvdXRwdXRfaGVhZGVyIC0tb3V0
cHV0PSRvdXRwdXRfc291cmNlICRpbnB1dF9maWxlCi19Ci0KLXNjcmlwdF9kaXI9JChkaXJuYW1l
ICQwKQotCi0jIEdlbmVyYXRlIFBhcnNlcgotcnVuX2ZsZXggZ2xzbGFuZwotcnVuX2Jpc29uIGds
c2xhbmcKLXBhdGNoIC0tc2lsZW50IC0tZm9yd2FyZCA8IDY0Yml0LWxleGVyLXNhZmV0eS5wYXRj
aApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xh
bmcuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyMjExOTkwOTNjMjFhYjk3ZjgyMWE2ZmI2YjE4
NDgyMTZlMjI4NTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcuaAorKysgL2Rl
di9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi1zdHJ1Y3QgVFBhcnNlQ29u
dGV4dDsKLWV4dGVybiBpbnQgZ2xzbGFuZ19pbml0aWFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRl
eHQpOwotZXh0ZXJuIGludCBnbHNsYW5nX2ZpbmFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRleHQp
OwotCi1leHRlcm4gaW50IGdsc2xhbmdfc2NhbihzaXplX3QgY291bnQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGludCBsZW5ndGhbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFRQYXJz
ZUNvbnRleHQqIGNvbnRleHQpOwotZXh0ZXJuIGludCBnbHNsYW5nX3BhcnNlKFRQYXJzZUNvbnRl
eHQqIGNvbnRleHQpOwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvZ2xzbGFuZy5sIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L2dsc2xhbmcubApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQzNTBkNGMyNzM1MjE4
ZDlhMGIwNDk2YjViZmQwNzk5OTI1MzZmYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xz
bGFuZy5sCisrKyAvZGV2L251bGwKQEAgLTEsMzY1ICswLDAgQEAKLS8qCi0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
Ci0vLwotCi1UaGlzIGZpbGUgY29udGFpbnMgdGhlIExleCBzcGVjaWZpY2F0aW9uIGZvciBHTFNM
IEVTLgotQmFzZWQgb24gQU5TSSBDIGdyYW1tYXIsIExleCBzcGVjaWZpY2F0aW9uOgotaHR0cDov
L3d3dy5seXNhdG9yLmxpdS5zZS9jL0FOU0ktQy1ncmFtbWFyLWwuaHRtbAotCi1JRiBZT1UgTU9E
SUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2gsCi1X
SElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xhbmdfbGV4LmNwcCkuCi0qLwot
Ci0ldG9wewotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBi
eSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQotCi0vLyBJZ25vcmUgZXJyb3JzIGlu
IGF1dG8tZ2VuZXJhdGVkIGNvZGUuCi0jaWYgZGVmaW5lZChfX0dOVUNfXykKLSNwcmFnbWEgR0ND
IGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtZnVuY3Rpb24iCi0jcHJhZ21hIEdDQyBkaWFn
bm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLXZhcmlhYmxlIgotI3ByYWdtYSBHQ0MgZGlhZ25vc3Rp
YyBpZ25vcmVkICItV3N3aXRjaC1lbnVtIgotI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKLSNwcmFn
bWEgd2FybmluZyhkaXNhYmxlOiA0MDY1KQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQxODkp
Ci0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUwNSkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxl
OiA0NzAxKQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fY2xhbmdfXykKLSNwcmFnbWEgY2xhbmcg
ZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bmtu
b3duLXByYWdtYXMiCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNh
dGVkLXJlZ2lzdGVyIgotI2VuZGlmCi19Ci0KLSV7Ci0jaW5jbHVkZSAiY29tcGlsZXIvZ2xzbGFu
Zy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlQ29udGV4dC5oIgotI2luY2x1ZGUgImNvbXBp
bGVyL3ByZXByb2Nlc3Nvci9Ub2tlbi5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3V0aWwuaCIKLSNp
bmNsdWRlICJnbHNsYW5nX3RhYi5oIgotCi0vKiB3aW5kb3dzIG9ubHkgcHJhZ21hICovCi0jaWZk
ZWYgX01TQ19WRVIKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDEwMikKLSNlbmRpZgotCi0j
ZGVmaW5lIFlZX1VTRVJfQUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIHl5bGxvYy0+Zmlyc3RfZmlsZSA9IHl5bGxvYy0+bGFzdF9maWxlID0geXljb2x1bW47IFwK
LSAgICB5eWxsb2MtPmZpcnN0X2xpbmUgPSB5eWxsb2MtPmxhc3RfbGluZSA9IHl5bGluZW5vOwot
Ci0jZGVmaW5lIFlZX0lOUFVUKGJ1ZiwgcmVzdWx0LCBtYXhfc2l6ZSkgXAotICAgIHJlc3VsdCA9
IHN0cmluZ19pbnB1dChidWYsIG1heF9zaXplLCB5eXNjYW5uZXIpOwotCi1zdGF0aWMgeXlfc2l6
ZV90IHN0cmluZ19pbnB1dChjaGFyKiBidWYsIHl5X3NpemVfdCBtYXhfc2l6ZSwgeXlzY2FuX3Qg
eXlzY2FubmVyKTsKLXN0YXRpYyBpbnQgY2hlY2tfdHlwZSh5eXNjYW5fdCB5eXNjYW5uZXIpOwot
c3RhdGljIGludCByZXNlcnZlZF93b3JkKHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci1zdGF0aWMgaW50
IGludF9jb25zdGFudCh5eXNjYW5fdCB5eXNjYW5uZXIpOwotc3RhdGljIGludCBmbG9hdF9jb25z
dGFudCh5eXNjYW5fdCB5eXNjYW5uZXIpOwotJX0KLQotJW9wdGlvbiBub3l5d3JhcCBub3VucHV0
IG5ldmVyLWludGVyYWN0aXZlCi0lb3B0aW9uIHl5bGluZW5vIHJlZW50cmFudCBiaXNvbi1icmlk
Z2UgYmlzb24tbG9jYXRpb25zCi0lb3B0aW9uIGV4dHJhLXR5cGU9IlRQYXJzZUNvbnRleHQqIgot
Ci1EICAgICAgICAgICBbMC05XQotTCAgICAgICAgICAgW2EtekEtWl9dCi1IICAgICAgICAgICBb
YS1mQS1GMC05XQotRSAgICAgICAgICAgW0VlXVsrLV0/e0R9KwotTyAgICAgICAgICAgWzAtN10K
LQotJSUKLQotImludmFyaWFudCIgICAgeyByZXR1cm4gSU5WQVJJQU5UOyB9Ci0iaGlnaHAiICAg
ICAgICB7IHJldHVybiBISUdIX1BSRUNJU0lPTjsgfQotIm1lZGl1bXAiICAgICAgeyByZXR1cm4g
TUVESVVNX1BSRUNJU0lPTjsgfQotImxvd3AiICAgICAgICAgeyByZXR1cm4gTE9XX1BSRUNJU0lP
TjsgfQotInByZWNpc2lvbiIgICAgeyByZXR1cm4gUFJFQ0lTSU9OOyB9Ci0KLSJhdHRyaWJ1dGUi
ICAgIHsgcmV0dXJuIEFUVFJJQlVURTsgfQotImNvbnN0IiAgICAgICAgeyByZXR1cm4gQ09OU1Rf
UVVBTDsgfQotInVuaWZvcm0iICAgICAgeyByZXR1cm4gVU5JRk9STTsgfQotInZhcnlpbmciICAg
ICAgeyByZXR1cm4gVkFSWUlORzsgfQotCi0iYnJlYWsiICAgICAgICB7IHJldHVybiBCUkVBSzsg
fQotImNvbnRpbnVlIiAgICAgeyByZXR1cm4gQ09OVElOVUU7IH0KLSJkbyIgICAgICAgICAgIHsg
cmV0dXJuIERPOyB9Ci0iZm9yIiAgICAgICAgICB7IHJldHVybiBGT1I7IH0KLSJ3aGlsZSIgICAg
ICAgIHsgcmV0dXJuIFdISUxFOyB9Ci0KLSJpZiIgICAgICAgICAgIHsgcmV0dXJuIElGOyB9Ci0i
ZWxzZSIgICAgICAgICB7IHJldHVybiBFTFNFOyB9Ci0KLSJpbiIgICAgICAgICAgIHsgcmV0dXJu
IElOX1FVQUw7IH0KLSJvdXQiICAgICAgICAgIHsgcmV0dXJuIE9VVF9RVUFMOyB9Ci0iaW5vdXQi
ICAgICAgICB7IHJldHVybiBJTk9VVF9RVUFMOyB9Ci0KLSJmbG9hdCIgICAgICAgIHsgcmV0dXJu
IEZMT0FUX1RZUEU7IH0KLSJpbnQiICAgICAgICAgIHsgcmV0dXJuIElOVF9UWVBFOyB9Ci0idm9p
ZCIgICAgICAgICB7IHJldHVybiBWT0lEX1RZUEU7IH0KLSJib29sIiAgICAgICAgIHsgcmV0dXJu
IEJPT0xfVFlQRTsgfQotInRydWUiICAgICAgICAgeyB5eWx2YWwtPmxleC5iID0gdHJ1ZTsgIHJl
dHVybiBCT09MQ09OU1RBTlQ7IH0KLSJmYWxzZSIgICAgICAgIHsgeXlsdmFsLT5sZXguYiA9IGZh
bHNlOyByZXR1cm4gQk9PTENPTlNUQU5UOyB9Ci0KLSJkaXNjYXJkIiAgICAgIHsgcmV0dXJuIERJ
U0NBUkQ7IH0KLSJyZXR1cm4iICAgICAgIHsgcmV0dXJuIFJFVFVSTjsgfQotCi0ibWF0MiIgICAg
ICAgICB7IHJldHVybiBNQVRSSVgyOyB9Ci0ibWF0MyIgICAgICAgICB7IHJldHVybiBNQVRSSVgz
OyB9Ci0ibWF0NCIgICAgICAgICB7IHJldHVybiBNQVRSSVg0OyB9Ci0KLSJ2ZWMyIiAgICAgICAg
IHsgcmV0dXJuIFZFQzI7IH0KLSJ2ZWMzIiAgICAgICAgIHsgcmV0dXJuIFZFQzM7IH0KLSJ2ZWM0
IiAgICAgICAgIHsgcmV0dXJuIFZFQzQ7IH0KLSJpdmVjMiIgICAgICAgIHsgcmV0dXJuIElWRUMy
OyB9Ci0iaXZlYzMiICAgICAgICB7IHJldHVybiBJVkVDMzsgfQotIml2ZWM0IiAgICAgICAgeyBy
ZXR1cm4gSVZFQzQ7IH0KLSJidmVjMiIgICAgICAgIHsgcmV0dXJuIEJWRUMyOyB9Ci0iYnZlYzMi
ICAgICAgICB7IHJldHVybiBCVkVDMzsgfQotImJ2ZWM0IiAgICAgICAgeyByZXR1cm4gQlZFQzQ7
IH0KLQotInNhbXBsZXIyRCIgICAgICAgICAgeyByZXR1cm4gU0FNUExFUjJEOyB9Ci0ic2FtcGxl
ckN1YmUiICAgICAgICB7IHJldHVybiBTQU1QTEVSQ1VCRTsgfQotInNhbXBsZXJFeHRlcm5hbE9F
UyIgeyByZXR1cm4gU0FNUExFUl9FWFRFUk5BTF9PRVM7IH0KLSJzYW1wbGVyMkRSZWN0IiAgICAg
IHsgcmV0dXJuIFNBTVBMRVIyRFJFQ1Q7IH0KLQotInN0cnVjdCIgICAgICAgeyByZXR1cm4gU1RS
VUNUOyB9Ci0KLSJhc20iICAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQotCi0iY2xhc3MiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KLSJ1bmlvbiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQot
ImVudW0iICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0idHlw
ZWRlZiIgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJ0ZW1wbGF0
ZSIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInRoaXMiICAgICAg
ICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0icGFja2VkIiAgICAgICB7
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQotImdvdG8iICAgICAgICAgeyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0ic3dpdGNoIiAgICAgICB7IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJkZWZhdWx0IiAgICAgIHsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCi0iaW5saW5lIiAgICAgICB7IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJub2lubGluZSIgICAgIHsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQotInZvbGF0aWxlIiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9Ci0icHVibGljIiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KLSJzdGF0aWMiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQotImV4dGVybiIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0iZXh0ZXJuYWwiICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
LSJpbnRlcmZhY2UiICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImZs
YXQiICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0KLSJsb25n
IiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInNob3J0IiAg
ICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZG91YmxlIiAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJoYWxmIiAgICAgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImZpeGVkIiAgICAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0idW5zaWduZWQiICAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJzdXBlcnAiICAgICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCi0iaW5wdXQiICAgICAgICB7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJvdXRwdXQiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQotCi0iaHZlYzIiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KLSJodmVjMyIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQotImh2ZWM0IiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9Ci0iZHZlYzIiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KLSJkdmVjMyIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQot
ImR2ZWM0IiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZnZl
YzIiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJmdmVjMyIg
ICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImZ2ZWM0IiAgICAg
ICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0KLSJzYW1wbGVyMUQiICAg
ICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJzYW1wbGVyM0Qi
ICAgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJzYW1wbGVy
MURTaGFkb3ciICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJzYW1w
bGVyMkRTaGFkb3ciICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJz
YW1wbGVyM0RSZWN0IiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
LSJzYW1wbGVyMkRSZWN0U2hhZG93IiB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KLQotInNpemVvZiIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0iY2FzdCIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQot
Im5hbWVzcGFjZSIgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0idXNp
bmciICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQote0x9KHtM
fXx7RH0pKiAgICAgICB7Ci0gICB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5
eXRleHQpOyAKLSAgIHJldHVybiBjaGVja190eXBlKHl5c2Nhbm5lcik7Ci19Ci0KLTBbeFhde0h9
KyAgICAgICAgIHsgcmV0dXJuIGludF9jb25zdGFudCh5eXNjYW5uZXIpOyB9Ci0we099KyAgICAg
ICAgICAgICB7IHJldHVybiBpbnRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQote0R9KyAgICAgICAg
ICAgICAgeyByZXR1cm4gaW50X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KLQote0R9K3tFfSAgICAg
ICAgICAgeyByZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQote0R9KyIuIntEfSoo
e0V9KT8geyByZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQotIi4ie0R9Kyh7RX0p
PyAgICAgeyByZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQotCi0iKz0iICAgICAg
ICAgICAgeyByZXR1cm4gQUREX0FTU0lHTjsgfQotIi09IiAgICAgICAgICAgIHsgcmV0dXJuIFNV
Ql9BU1NJR047IH0KLSIqPSIgICAgICAgICAgICB7IHJldHVybiBNVUxfQVNTSUdOOyB9Ci0iLz0i
ICAgICAgICAgICAgeyByZXR1cm4gRElWX0FTU0lHTjsgfQotIiU9IiAgICAgICAgICAgIHsgcmV0
dXJuIE1PRF9BU1NJR047IH0KLSI8PD0iICAgICAgICAgICB7IHJldHVybiBMRUZUX0FTU0lHTjsg
fQotIj4+PSIgICAgICAgICAgIHsgcmV0dXJuIFJJR0hUX0FTU0lHTjsgfQotIiY9IiAgICAgICAg
ICAgIHsgcmV0dXJuIEFORF9BU1NJR047IH0KLSJePSIgICAgICAgICAgICB7IHJldHVybiBYT1Jf
QVNTSUdOOyB9Ci0ifD0iICAgICAgICAgICAgeyByZXR1cm4gT1JfQVNTSUdOOyB9Ci0KLSIrKyIg
ICAgICAgICAgICB7IHJldHVybiBJTkNfT1A7IH0KLSItLSIgICAgICAgICAgICB7IHJldHVybiBE
RUNfT1A7IH0KLSImJiIgICAgICAgICAgICB7IHJldHVybiBBTkRfT1A7IH0KLSJ8fCIgICAgICAg
ICAgICB7IHJldHVybiBPUl9PUDsgfQotIl5eIiAgICAgICAgICAgIHsgcmV0dXJuIFhPUl9PUDsg
fQotIjw9IiAgICAgICAgICAgIHsgcmV0dXJuIExFX09QOyB9Ci0iPj0iICAgICAgICAgICAgeyBy
ZXR1cm4gR0VfT1A7IH0KLSI9PSIgICAgICAgICAgICB7IHJldHVybiBFUV9PUDsgfQotIiE9IiAg
ICAgICAgICAgIHsgcmV0dXJuIE5FX09QOyB9Ci0iPDwiICAgICAgICAgICAgeyByZXR1cm4gTEVG
VF9PUDsgfQotIj4+IiAgICAgICAgICAgIHsgcmV0dXJuIFJJR0hUX09QOyB9Ci0iOyIgICAgICAg
ICAgICAgeyByZXR1cm4gU0VNSUNPTE9OOyB9Ci0oInsifCI8JSIpICAgICAgeyByZXR1cm4gTEVG
VF9CUkFDRTsgfQotKCJ9InwiJT4iKSAgICAgIHsgcmV0dXJuIFJJR0hUX0JSQUNFOyB9Ci0iLCIg
ICAgICAgICB7IHJldHVybiBDT01NQTsgfQotIjoiICAgICAgICAgeyByZXR1cm4gQ09MT047IH0K
LSI9IiAgICAgICAgIHsgcmV0dXJuIEVRVUFMOyB9Ci0iKCIgICAgICAgICB7IHJldHVybiBMRUZU
X1BBUkVOOyB9Ci0iKSIgICAgICAgICB7IHJldHVybiBSSUdIVF9QQVJFTjsgfQotKCJbInwiPDoi
KSAgeyByZXR1cm4gTEVGVF9CUkFDS0VUOyB9Ci0oIl0ifCI6PiIpICB7IHJldHVybiBSSUdIVF9C
UkFDS0VUOyB9Ci0iLiIgICAgICAgICB7IHJldHVybiBET1Q7IH0KLSIhIiAgICAgICAgIHsgcmV0
dXJuIEJBTkc7IH0KLSItIiAgICAgICAgIHsgcmV0dXJuIERBU0g7IH0KLSJ+IiAgICAgICAgIHsg
cmV0dXJuIFRJTERFOyB9Ci0iKyIgICAgICAgICB7IHJldHVybiBQTFVTOyB9Ci0iKiIgICAgICAg
ICB7IHJldHVybiBTVEFSOyB9Ci0iLyIgICAgICAgICB7IHJldHVybiBTTEFTSDsgfQotIiUiICAg
ICAgICAgeyByZXR1cm4gUEVSQ0VOVDsgfQotIjwiICAgICAgICAgeyByZXR1cm4gTEVGVF9BTkdM
RTsgfQotIj4iICAgICAgICAgeyByZXR1cm4gUklHSFRfQU5HTEU7IH0KLSJ8IiAgICAgICAgIHsg
cmV0dXJuIFZFUlRJQ0FMX0JBUjsgfQotIl4iICAgICAgICAgeyByZXR1cm4gQ0FSRVQ7IH0KLSIm
IiAgICAgICAgIHsgcmV0dXJuIEFNUEVSU0FORDsgfQotIj8iICAgICAgICAgeyByZXR1cm4gUVVF
U1RJT047IH0KLQotWyBcdFx2XG5cZlxyXSB7IH0KLTw8RU9GPj4gICAgeyB5eXRlcm1pbmF0ZSgp
OyB9Ci0uICAgICAgICAgIHsgYXNzZXJ0KGZhbHNlKTsgcmV0dXJuIDA7IH0KLQotJSUKLQotI2lm
IGRlZmluZWQoX19jbGFuZ19fKQotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAotI2VuZGlm
Ci0KLXl5X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCB5eV9zaXplX3QgbWF4X3NpemUs
IHl5c2Nhbl90IHl5c2Nhbm5lcikgewotICAgIHBwOjpUb2tlbiB0b2tlbjsKLSAgICB5eWdldF9l
eHRyYSh5eXNjYW5uZXIpLT5wcmVwcm9jZXNzb3IubGV4KCZ0b2tlbik7Ci0gICAgeXlfc2l6ZV90
IGxlbiA9IHRva2VuLnR5cGUgPT0gcHA6OlRva2VuOjpMQVNUID8gMCA6IHRva2VuLnRleHQuc2l6
ZSgpOwotICAgIGlmIChsZW4gPCBtYXhfc2l6ZSkKLSAgICAgICAgbWVtY3B5KGJ1ZiwgdG9rZW4u
dGV4dC5jX3N0cigpLCBsZW4pOwotICAgIHl5c2V0X2NvbHVtbih0b2tlbi5sb2NhdGlvbi5maWxl
LCB5eXNjYW5uZXIpOwotICAgIHl5c2V0X2xpbmVubyh0b2tlbi5sb2NhdGlvbi5saW5lLCB5eXNj
YW5uZXIpOwotCi0gICAgaWYgKGxlbiA+PSBtYXhfc2l6ZSkKLSAgICAgICAgWVlfRkFUQUxfRVJS
T1IoIklucHV0IGJ1ZmZlciBvdmVyZmxvdyIpOwotICAgIGVsc2UgaWYgKGxlbiA+IDApCi0gICAg
ICAgIGJ1ZltsZW4rK10gPSAnICc7Ci0gICAgcmV0dXJuIGxlbjsKLX0KLQotaW50IGNoZWNrX3R5
cGUoeXlzY2FuX3QgeXlzY2FubmVyKSB7Ci0gICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190KikgeXlzY2FubmVyOwotICAgIAotICAgIGludCB0b2tlbiA9IElERU5USUZJ
RVI7Ci0gICAgVFN5bWJvbCogc3ltYm9sID0geXlleHRyYS0+c3ltYm9sVGFibGUuZmluZCh5eXRl
eHQpOwotICAgIGlmIChzeW1ib2wgJiYgc3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKLSAgICAgICAg
VFZhcmlhYmxlKiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+KHN5bWJvbCk7Ci0g
ICAgICAgIGlmICh2YXJpYWJsZS0+aXNVc2VyVHlwZSgpKQotICAgICAgICAgICAgdG9rZW4gPSBU
WVBFX05BTUU7Ci0gICAgfQotICAgIHl5bHZhbC0+bGV4LnN5bWJvbCA9IHN5bWJvbDsKLSAgICBy
ZXR1cm4gdG9rZW47Ci19Ci0KLWludCByZXNlcnZlZF93b3JkKHl5c2Nhbl90IHl5c2Nhbm5lcikg
ewotICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIHl5c2Nhbm5l
cjsKLQotICAgIHl5ZXh0cmEtPmVycm9yKCp5eWxsb2MsICJJbGxlZ2FsIHVzZSBvZiByZXNlcnZl
ZCB3b3JkIiwgeXl0ZXh0LCAiIik7Ci0gICAgeXlleHRyYS0+cmVjb3ZlcigpOwotICAgIHJldHVy
biAwOwotfQotCi12b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxvYywgVFBhcnNlQ29udGV4dCogY29u
dGV4dCwgY29uc3QgY2hhciogcmVhc29uKSB7Ci0gICAgY29udGV4dC0+ZXJyb3IoKmxsb2MsIHJl
YXNvbiwgeXlnZXRfdGV4dChjb250ZXh0LT5zY2FubmVyKSk7Ci0gICAgY29udGV4dC0+cmVjb3Zl
cigpOwotfQotCi1pbnQgaW50X2NvbnN0YW50KHl5c2Nhbl90IHl5c2Nhbm5lcikgewotICAgIHN0
cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIHl5c2Nhbm5lcjsKLQotICAg
IGlmICghYXRvaV9jbGFtcCh5eXRleHQsICYoeXlsdmFsLT5sZXguaSkpKQotICAgICAgICB5eWV4
dHJhLT53YXJuaW5nKCp5eWxsb2MsICJJbnRlZ2VyIG92ZXJmbG93IiwgeXl0ZXh0LCAiIik7Ci0g
ICAgcmV0dXJuIElOVENPTlNUQU5UOwotfQotCi1pbnQgZmxvYXRfY29uc3RhbnQoeXlzY2FuX3Qg
eXlzY2FubmVyKSB7Ci0gICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
KikgeXlzY2FubmVyOwotCi0gICAgaWYgKCFhdG9mX2NsYW1wKHl5dGV4dCwgJih5eWx2YWwtPmxl
eC5mKSkpCi0gICAgICAgIHl5ZXh0cmEtPndhcm5pbmcoKnl5bGxvYywgIkZsb2F0IG92ZXJmbG93
IiwgeXl0ZXh0LCAiIik7Ci0gICAgcmV0dXJuIEZMT0FUQ09OU1RBTlQ7Ci19Ci0KLWludCBnbHNs
YW5nX2luaXRpYWxpemUoVFBhcnNlQ29udGV4dCogY29udGV4dCkgewotICAgIHl5c2Nhbl90IHNj
YW5uZXIgPSBOVUxMOwotICAgIGlmICh5eWxleF9pbml0X2V4dHJhKGNvbnRleHQsICZzY2FubmVy
KSkKLSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICBjb250ZXh0LT5zY2FubmVyID0gc2Nhbm5lcjsK
LSAgICByZXR1cm4gMDsKLX0KLQotaW50IGdsc2xhbmdfZmluYWxpemUoVFBhcnNlQ29udGV4dCog
Y29udGV4dCkgewotICAgIHl5c2Nhbl90IHNjYW5uZXIgPSBjb250ZXh0LT5zY2FubmVyOwotICAg
IGlmIChzY2FubmVyID09IE5VTEwpIHJldHVybiAwOwotICAgIAotICAgIGNvbnRleHQtPnNjYW5u
ZXIgPSBOVUxMOwotICAgIHl5bGV4X2Rlc3Ryb3koc2Nhbm5lcik7Ci0KLSAgICByZXR1cm4gMDsK
LX0KLQotaW50IGdsc2xhbmdfc2NhbihzaXplX3QgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0
cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCi0gICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRl
eHQqIGNvbnRleHQpIHsKLSAgICB5eXJlc3RhcnQoTlVMTCwgY29udGV4dC0+c2Nhbm5lcik7Ci0g
ICAgeXlzZXRfY29sdW1uKDAsIGNvbnRleHQtPnNjYW5uZXIpOwotICAgIHl5c2V0X2xpbmVubygx
LCBjb250ZXh0LT5zY2FubmVyKTsKLQotICAgIC8vIEluaXRpYWxpemUgcHJlcHJvY2Vzc29yLgot
ICAgIGlmICghY29udGV4dC0+cHJlcHJvY2Vzc29yLmluaXQoY291bnQsIHN0cmluZywgbGVuZ3Ro
KSkKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnNldE1heFRv
a2VuTGVuZ3RoKFNIX01BWF9UT0tFTl9MRU5HVEgpOwotCi0gICAgLy8gRGVmaW5lIGV4dGVuc2lv
biBtYWNyb3MuCi0gICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciA9IGNv
bnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yKCk7Ci0gICAgZm9yIChURXh0ZW5zaW9uQmVoYXZpb3I6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRCZWhhdmlvci5iZWdpbigpOwotICAgICAgICAgaXRl
ciAhPSBleHRCZWhhdmlvci5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGNvbnRleHQtPnByZXBy
b2Nlc3Nvci5wcmVkZWZpbmVNYWNybyhpdGVyLT5maXJzdC5jX3N0cigpLCAxKTsKLSAgICB9Ci0g
ICAgaWYgKGNvbnRleHQtPmZyYWdtZW50UHJlY2lzaW9uSGlnaCkKLSAgICAgICAgY29udGV4dC0+
cHJlcHJvY2Vzc29yLnByZWRlZmluZU1hY3JvKCJHTF9GUkFHTUVOVF9QUkVDSVNJT05fSElHSCIs
IDEpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLnkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvZ2xzbGFuZy55CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWQ1
ZDc4NzFhYTNiNmZhNzU0ZWU5ZmVhMDY5NTU2Y2Q1OThlNzA1Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9nbHNsYW5nLnkKKysrIC9kZXYvbnVsbApAQCAtMSwyMDAzICswLDAgQEAKLS8qCi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0vLwotCi1UaGlzIGZpbGUgY29udGFpbnMgdGhlIFlhY2MgZ3JhbW1hciBm
b3IgR0xTTCBFUy4KLUJhc2VkIG9uIEFOU0kgQyBZYWNjIGdyYW1tYXI6Ci1odHRwOi8vd3d3Lmx5
c2F0b3IubGl1LnNlL2MvQU5TSS1DLWdyYW1tYXIteS5odG1sCi0KLUlGIFlPVSBNT0RJRlkgVEhJ
UyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaCwKLVdISUNIIEdF
TkVSQVRFUyBUSEUgR0xTTCBFUyBQQVJTRVIgKGdsc2xhbmdfdGFiLmNwcCBBTkQgZ2xzbGFuZ190
YWIuaCkuCi0qLwotCi0lewotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVGhpcyBmaWxlIGlzIGF1
dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCi0KLS8vIEln
bm9yZSBlcnJvcnMgaW4gYXV0by1nZW5lcmF0ZWQgY29kZS4KLSNpZiBkZWZpbmVkKF9fR05VQ19f
KQotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1mdW5jdGlvbiIKLSNw
cmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtdmFyaWFibGUiCi0jcHJhZ21h
IEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc3dpdGNoLWVudW0iCi0jZWxpZiBkZWZpbmVkKF9N
U0NfVkVSKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQwNjUpCi0jcHJhZ21hIHdhcm5pbmco
ZGlzYWJsZTogNDE4OSkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NTA1KQotI3ByYWdtYSB3
YXJuaW5nKGRpc2FibGU6IDQ3MDEpCi0jZW5kaWYKLQotI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJv
bFRhYmxlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VDb250ZXh0LmgiCi0jaW5jbHVkZSAi
R0xTTEFORy9TaGFkZXJMYW5nLmgiCi0KLSNkZWZpbmUgWVlFTkFCTEVfTkxTIDAKLQotI2RlZmlu
ZSBZWUxFWF9QQVJBTSBjb250ZXh0LT5zY2FubmVyCi0lfQotCi0lZXhwZWN0IDEgLyogT25lIHNo
aWZ0IHJlZHVjZSBjb25mbGljdCBiZWNhdXNlIG9mIGlmIHwgZWxzZSAqLwotJXB1cmUtcGFyc2Vy
Ci0lcGFyc2UtcGFyYW0ge1RQYXJzZUNvbnRleHQqIGNvbnRleHR9Ci0lbG9jYXRpb25zCi0lbGV4
LXBhcmFtIHtZWUxFWF9QQVJBTX0KLQotJWNvZGUgcmVxdWlyZXMgewotI2RlZmluZSBZWUxUWVBF
IFRTb3VyY2VMb2MKLSNkZWZpbmUgWVlMVFlQRV9JU19ERUNMQVJFRCAxCi0jZGVmaW5lIFNIX01B
WF9UT0tFTl9MRU5HVEggMjU2ICAvLyBXZWJHTCBzcGVjLgotfQotCi0ldW5pb24gewotICAgIHN0
cnVjdCB7Ci0gICAgICAgIHVuaW9uIHsKLSAgICAgICAgICAgIFRTdHJpbmcgKnN0cmluZzsKLSAg
ICAgICAgICAgIGZsb2F0IGY7Ci0gICAgICAgICAgICBpbnQgaTsKLSAgICAgICAgICAgIGJvb2wg
YjsKLSAgICAgICAgfTsKLSAgICAgICAgVFN5bWJvbCogc3ltYm9sOwotICAgIH0gbGV4OwotICAg
IHN0cnVjdCB7Ci0gICAgICAgIFRPcGVyYXRvciBvcDsKLSAgICAgICAgdW5pb24gewotICAgICAg
ICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7Ci0gICAgICAgICAgICBUSW50ZXJtTm9kZVBh
aXIgbm9kZVBhaXI7Ci0gICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGludGVybVR5cGVkTm9kZTsK
LSAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUFnZ3JlZ2F0ZTsKLSAgICAgICAg
fTsKLSAgICAgICAgdW5pb24gewotICAgICAgICAgICAgVFB1YmxpY1R5cGUgdHlwZTsKLSAgICAg
ICAgICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOwotICAgICAgICAgICAgVFF1YWxpZmllciBxdWFs
aWZpZXI7Ci0gICAgICAgICAgICBURnVuY3Rpb24qIGZ1bmN0aW9uOwotICAgICAgICAgICAgVFBh
cmFtZXRlciBwYXJhbTsKLSAgICAgICAgICAgIFRGaWVsZCogZmllbGQ7Ci0gICAgICAgICAgICBU
RmllbGRMaXN0KiBmaWVsZExpc3Q7Ci0gICAgICAgIH07Ci0gICAgfSBpbnRlcm07Ci19Ci0KLSV7
Ci1leHRlcm4gaW50IHl5bGV4KFlZU1RZUEUqIHl5bHZhbCwgWVlMVFlQRSogeXlsbG9jLCB2b2lk
KiB5eXNjYW5uZXIpOwotZXh0ZXJuIHZvaWQgeXllcnJvcihZWUxUWVBFKiB5eWxsb2MsIFRQYXJz
ZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7Ci0KLSNkZWZpbmUgWVlMTE9D
X0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKSAgICAgICAgICAgICAgICAgICAgICBcCi0gIGRvIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgaWYgKE4pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2ZpbGUgPSBZWVJIU0xPQyhSaHMsIDEpLmZp
cnN0X2ZpbGU7ICBcCi0gICAgICAgIChDdXJyZW50KS5maXJzdF9saW5lID0gWVlSSFNMT0MoUmhz
LCAxKS5maXJzdF9saW5lOyAgXAotICAgICAgICAoQ3VycmVudCkubGFzdF9maWxlID0gWVlSSFNM
T0MoUmhzLCBOKS5sYXN0X2ZpbGU7ICAgIFwKLSAgICAgICAgKEN1cnJlbnQpLmxhc3RfbGluZSA9
IFlZUkhTTE9DKFJocywgTikubGFzdF9saW5lOyAgICBcCi0gICAgICB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZWxzZSB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
KEN1cnJlbnQpLmZpcnN0X2ZpbGUgPSBZWVJIU0xPQyhSaHMsIDApLmxhc3RfZmlsZTsgICBcCi0g
ICAgICAgIChDdXJyZW50KS5maXJzdF9saW5lID0gWVlSSFNMT0MoUmhzLCAwKS5sYXN0X2xpbmU7
ICAgXAotICAgICAgICAoQ3VycmVudCkubGFzdF9maWxlID0gWVlSSFNMT0MoUmhzLCAwKS5sYXN0
X2ZpbGU7ICAgIFwKLSAgICAgICAgKEN1cnJlbnQpLmxhc3RfbGluZSA9IFlZUkhTTE9DKFJocywg
MCkubGFzdF9saW5lOyAgICBcCi0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIFZFUlRF
WF9PTkxZKFMsIEwpIHsgIFwKLSAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSAhPSBTSF9WRVJU
RVhfU0hBREVSKSB7ICBcCi0gICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGlu
IHZlcnRleCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCi0gICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsgIFwKLSAgICB9ICBcCi19Ci0KLSNkZWZpbmUgRlJBR19PTkxZKFMsIEwpIHsgIFwKLSAgICBp
ZiAoY29udGV4dC0+c2hhZGVyVHlwZSAhPSBTSF9GUkFHTUVOVF9TSEFERVIpIHsgIFwKLSAgICAg
ICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21lbnQgc2hhZGVycyBvbmx5
ICIsIFMpOyAgXAotICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCi0gICAgfSAgXAotfQot
JX0KLQotJXRva2VuIDxsZXg+IElOVkFSSUFOVCBISUdIX1BSRUNJU0lPTiBNRURJVU1fUFJFQ0lT
SU9OIExPV19QUkVDSVNJT04gUFJFQ0lTSU9OCi0ldG9rZW4gPGxleD4gQVRUUklCVVRFIENPTlNU
X1FVQUwgQk9PTF9UWVBFIEZMT0FUX1RZUEUgSU5UX1RZUEUKLSV0b2tlbiA8bGV4PiBCUkVBSyBD
T05USU5VRSBETyBFTFNFIEZPUiBJRiBESVNDQVJEIFJFVFVSTgotJXRva2VuIDxsZXg+IEJWRUMy
IEJWRUMzIEJWRUM0IElWRUMyIElWRUMzIElWRUM0IFZFQzIgVkVDMyBWRUM0Ci0ldG9rZW4gPGxl
eD4gTUFUUklYMiBNQVRSSVgzIE1BVFJJWDQgSU5fUVVBTCBPVVRfUVVBTCBJTk9VVF9RVUFMIFVO
SUZPUk0gVkFSWUlORwotJXRva2VuIDxsZXg+IFNUUlVDVCBWT0lEX1RZUEUgV0hJTEUKLSV0b2tl
biA8bGV4PiBTQU1QTEVSMkQgU0FNUExFUkNVQkUgU0FNUExFUl9FWFRFUk5BTF9PRVMgU0FNUExF
UjJEUkVDVAotCi0ldG9rZW4gPGxleD4gSURFTlRJRklFUiBUWVBFX05BTUUgRkxPQVRDT05TVEFO
VCBJTlRDT05TVEFOVCBCT09MQ09OU1RBTlQKLSV0b2tlbiA8bGV4PiBMRUZUX09QIFJJR0hUX09Q
Ci0ldG9rZW4gPGxleD4gSU5DX09QIERFQ19PUCBMRV9PUCBHRV9PUCBFUV9PUCBORV9PUAotJXRv
a2VuIDxsZXg+IEFORF9PUCBPUl9PUCBYT1JfT1AgTVVMX0FTU0lHTiBESVZfQVNTSUdOIEFERF9B
U1NJR04KLSV0b2tlbiA8bGV4PiBNT0RfQVNTSUdOIExFRlRfQVNTSUdOIFJJR0hUX0FTU0lHTiBB
TkRfQVNTSUdOIFhPUl9BU1NJR04gT1JfQVNTSUdOCi0ldG9rZW4gPGxleD4gU1VCX0FTU0lHTgot
Ci0ldG9rZW4gPGxleD4gTEVGVF9QQVJFTiBSSUdIVF9QQVJFTiBMRUZUX0JSQUNLRVQgUklHSFRf
QlJBQ0tFVCBMRUZUX0JSQUNFIFJJR0hUX0JSQUNFIERPVAotJXRva2VuIDxsZXg+IENPTU1BIENP
TE9OIEVRVUFMIFNFTUlDT0xPTiBCQU5HIERBU0ggVElMREUgUExVUyBTVEFSIFNMQVNIIFBFUkNF
TlQKLSV0b2tlbiA8bGV4PiBMRUZUX0FOR0xFIFJJR0hUX0FOR0xFIFZFUlRJQ0FMX0JBUiBDQVJF
VCBBTVBFUlNBTkQgUVVFU1RJT04KLQotJXR5cGUgPGxleD4gaWRlbnRpZmllcgotJXR5cGUgPGlu
dGVybT4gYXNzaWdubWVudF9vcGVyYXRvciB1bmFyeV9vcGVyYXRvcgotJXR5cGUgPGludGVybS5p
bnRlcm1UeXBlZE5vZGU+IHZhcmlhYmxlX2lkZW50aWZpZXIgcHJpbWFyeV9leHByZXNzaW9uIHBv
c3RmaXhfZXhwcmVzc2lvbgotJXR5cGUgPGludGVybS5pbnRlcm1UeXBlZE5vZGU+IGV4cHJlc3Np
b24gaW50ZWdlcl9leHByZXNzaW9uIGFzc2lnbm1lbnRfZXhwcmVzc2lvbgotJXR5cGUgPGludGVy
bS5pbnRlcm1UeXBlZE5vZGU+IHVuYXJ5X2V4cHJlc3Npb24gbXVsdGlwbGljYXRpdmVfZXhwcmVz
c2lvbiBhZGRpdGl2ZV9leHByZXNzaW9uCi0ldHlwZSA8aW50ZXJtLmludGVybVR5cGVkTm9kZT4g
cmVsYXRpb25hbF9leHByZXNzaW9uIGVxdWFsaXR5X2V4cHJlc3Npb24KLSV0eXBlIDxpbnRlcm0u
aW50ZXJtVHlwZWROb2RlPiBjb25kaXRpb25hbF9leHByZXNzaW9uIGNvbnN0YW50X2V4cHJlc3Np
b24KLSV0eXBlIDxpbnRlcm0uaW50ZXJtVHlwZWROb2RlPiBsb2dpY2FsX29yX2V4cHJlc3Npb24g
bG9naWNhbF94b3JfZXhwcmVzc2lvbiBsb2dpY2FsX2FuZF9leHByZXNzaW9uCi0ldHlwZSA8aW50
ZXJtLmludGVybVR5cGVkTm9kZT4gc2hpZnRfZXhwcmVzc2lvbiBhbmRfZXhwcmVzc2lvbiBleGNs
dXNpdmVfb3JfZXhwcmVzc2lvbiBpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbgotJXR5cGUgPGludGVy
bS5pbnRlcm1UeXBlZE5vZGU+IGZ1bmN0aW9uX2NhbGwgaW5pdGlhbGl6ZXIgY29uZGl0aW9uIGNv
bmRpdGlvbm9wdAotCi0ldHlwZSA8aW50ZXJtLmludGVybU5vZGU+IHRyYW5zbGF0aW9uX3VuaXQg
ZnVuY3Rpb25fZGVmaW5pdGlvbgotJXR5cGUgPGludGVybS5pbnRlcm1Ob2RlPiBzdGF0ZW1lbnQg
c2ltcGxlX3N0YXRlbWVudAotJXR5cGUgPGludGVybS5pbnRlcm1BZ2dyZWdhdGU+ICBzdGF0ZW1l
bnRfbGlzdCBjb21wb3VuZF9zdGF0ZW1lbnQKLSV0eXBlIDxpbnRlcm0uaW50ZXJtTm9kZT4gZGVj
bGFyYXRpb25fc3RhdGVtZW50IHNlbGVjdGlvbl9zdGF0ZW1lbnQgZXhwcmVzc2lvbl9zdGF0ZW1l
bnQKLSV0eXBlIDxpbnRlcm0uaW50ZXJtTm9kZT4gZGVjbGFyYXRpb24gZXh0ZXJuYWxfZGVjbGFy
YXRpb24KLSV0eXBlIDxpbnRlcm0uaW50ZXJtTm9kZT4gZm9yX2luaXRfc3RhdGVtZW50IGNvbXBv
dW5kX3N0YXRlbWVudF9ub19uZXdfc2NvcGUKLSV0eXBlIDxpbnRlcm0ubm9kZVBhaXI+IHNlbGVj
dGlvbl9yZXN0X3N0YXRlbWVudCBmb3JfcmVzdF9zdGF0ZW1lbnQKLSV0eXBlIDxpbnRlcm0uaW50
ZXJtTm9kZT4gaXRlcmF0aW9uX3N0YXRlbWVudCBqdW1wX3N0YXRlbWVudCBzdGF0ZW1lbnRfbm9f
bmV3X3Njb3BlIHN0YXRlbWVudF93aXRoX3Njb3BlCi0ldHlwZSA8aW50ZXJtPiBzaW5nbGVfZGVj
bGFyYXRpb24gaW5pdF9kZWNsYXJhdG9yX2xpc3QKLQotJXR5cGUgPGludGVybT4gcGFyYW1ldGVy
X2RlY2xhcmF0aW9uIHBhcmFtZXRlcl9kZWNsYXJhdG9yIHBhcmFtZXRlcl90eXBlX3NwZWNpZmll
cgotJXR5cGUgPGludGVybS5xdWFsaWZpZXI+IHBhcmFtZXRlcl9xdWFsaWZpZXIKLQotJXR5cGUg
PGludGVybS5wcmVjaXNpb24+IHByZWNpc2lvbl9xdWFsaWZpZXIKLSV0eXBlIDxpbnRlcm0udHlw
ZT4gdHlwZV9xdWFsaWZpZXIgZnVsbHlfc3BlY2lmaWVkX3R5cGUgdHlwZV9zcGVjaWZpZXIKLSV0
eXBlIDxpbnRlcm0udHlwZT4gdHlwZV9zcGVjaWZpZXJfbm9fcHJlYyB0eXBlX3NwZWNpZmllcl9u
b25hcnJheQotJXR5cGUgPGludGVybS50eXBlPiBzdHJ1Y3Rfc3BlY2lmaWVyCi0ldHlwZSA8aW50
ZXJtLmZpZWxkPiBzdHJ1Y3RfZGVjbGFyYXRvcgotJXR5cGUgPGludGVybS5maWVsZExpc3Q+IHN0
cnVjdF9kZWNsYXJhdG9yX2xpc3Qgc3RydWN0X2RlY2xhcmF0aW9uIHN0cnVjdF9kZWNsYXJhdGlv
bl9saXN0Ci0ldHlwZSA8aW50ZXJtLmZ1bmN0aW9uPiBmdW5jdGlvbl9oZWFkZXIgZnVuY3Rpb25f
ZGVjbGFyYXRvciBmdW5jdGlvbl9pZGVudGlmaWVyCi0ldHlwZSA8aW50ZXJtLmZ1bmN0aW9uPiBm
dW5jdGlvbl9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIGZ1bmN0aW9uX2NhbGxfaGVhZGVyCi0ldHlw
ZSA8aW50ZXJtPiBmdW5jdGlvbl9jYWxsX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMgZnVuY3Rpb25f
Y2FsbF9oZWFkZXJfbm9fcGFyYW1ldGVycyBmdW5jdGlvbl9jYWxsX2dlbmVyaWMgZnVuY3Rpb25f
cHJvdG90eXBlCi0ldHlwZSA8aW50ZXJtPiBmdW5jdGlvbl9jYWxsX29yX21ldGhvZAotCi0lc3Rh
cnQgdHJhbnNsYXRpb25fdW5pdAotJSUKLQotaWRlbnRpZmllcgotICAgIDogSURFTlRJRklFUgot
ICAgIHwgVFlQRV9OQU1FCi0KLXZhcmlhYmxlX2lkZW50aWZpZXIKLSAgICA6IElERU5USUZJRVIg
ewotICAgICAgICAvLyBUaGUgc3ltYm9sIHRhYmxlIHNlYXJjaCB3YXMgZG9uZSBpbiB0aGUgbGV4
aWNhbCBwaGFzZQotICAgICAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSAkMS5zeW1ib2w7Ci0g
ICAgICAgIGNvbnN0IFRWYXJpYWJsZSogdmFyaWFibGU7Ci0gICAgICAgIGlmIChzeW1ib2wgPT0g
MCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJ1bmRlY2xhcmVkIGlkZW50aWZp
ZXIiLCAkMS5zdHJpbmctPmNfc3RyKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICAgICAgVFR5cGUgdHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkKTsKLSAgICAg
ICAgICAgIFRWYXJpYWJsZSogZmFrZVZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgkMS5zdHJpbmcs
IHR5cGUpOwotICAgICAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCpmYWtlVmFy
aWFibGUpOwotICAgICAgICAgICAgdmFyaWFibGUgPSBmYWtlVmFyaWFibGU7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlkZW50aWZpZXIgY2FuIG9ubHkgYmUgYSB2YXJp
YWJsZSB0eXBlIHN5bWJvbAotICAgICAgICAgICAgaWYgKCEgc3ltYm9sLT5pc1ZhcmlhYmxlKCkp
IHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgInZhcmlhYmxlIGV4cGVjdGVk
IiwgJDEuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHZhcmlhYmxlID0g
c3RhdGljX2Nhc3Q8Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKLQotICAgICAgICAgICAgaWYg
KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKHZhcmlhYmxlLT5nZXROYW1lKCkpICYm
Ci0gICAgICAgICAgICAgICAgIXZhcmlhYmxlLT5nZXRFeHRlbnNpb24oKS5lbXB0eSgpICYmCi0g
ICAgICAgICAgICAgICAgY29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjayhAMSwgdmFyaWFibGUt
PmdldEV4dGVuc2lvbigpKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGRvbid0IGRlbGV0ZSAkMS5z
dHJpbmcsIGl0J3MgdXNlZCBieSBlcnJvciByZWNvdmVyeSwgYW5kIHRoZSBwb29sCi0gICAgICAg
IC8vIHBvcCB3aWxsIHJlY2xhaW0gdGhlIG1lbW9yeQotCi0gICAgICAgIGlmICh2YXJpYWJsZS0+
Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0ICkgewotICAgICAgICAgICAgQ29u
c3RhbnRVbmlvbiogY29uc3RBcnJheSA9IHZhcmlhYmxlLT5nZXRDb25zdFBvaW50ZXIoKTsKLSAg
ICAgICAgICAgIFRUeXBlIHQodmFyaWFibGUtPmdldFR5cGUoKSk7Ci0gICAgICAgICAgICAkJCA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXksIHQsIEAx
KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRTeW1ib2wodmFyaWFibGUtPmdldFVuaXF1ZUlkKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldE5hbWUoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0
VHlwZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEAxKTsKLSAgICB9Ci0gICAgOwotCi1wcmltYXJ5X2V4cHJlc3Npb24KLSAgICA6IHZhcmlhYmxl
X2lkZW50aWZpZXIgewotICAgICAgICAkJCA9ICQxOwotICAgIH0KLSAgICB8IElOVENPTlNUQU5U
IHsKLSAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
WzFdOwotICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoJDEuaSk7Ci0gICAgICAgICQkID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUo
RWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDEpOwotICAgIH0KLSAgICB8IEZMT0FU
Q09OU1RBTlQgewotICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bMV07Ci0gICAgICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgkMS5mKTsKLSAgICAg
ICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5
LCBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAxKTsKLSAgICB9Ci0g
ICAgfCBCT09MQ09OU1RBTlQgewotICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0g
bmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdCgkMS5i
KTsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1
bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDEpOwot
ICAgIH0KLSAgICB8IExFRlRfUEFSRU4gZXhwcmVzc2lvbiBSSUdIVF9QQVJFTiB7Ci0gICAgICAg
ICQkID0gJDI7Ci0gICAgfQotICAgIDsKLQotcG9zdGZpeF9leHByZXNzaW9uCi0gICAgOiBwcmlt
YXJ5X2V4cHJlc3Npb24gewotICAgICAgICAkJCA9ICQxOwotICAgIH0KLSAgICB8IHBvc3RmaXhf
ZXhwcmVzc2lvbiBMRUZUX0JSQUNLRVQgaW50ZWdlcl9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQg
ewotICAgICAgICAkJCA9IGNvbnRleHQtPmFkZEluZGV4RXhwcmVzc2lvbigkMSwgQDIsICQzKTsK
LSAgICB9Ci0gICAgfCBmdW5jdGlvbl9jYWxsIHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICB9Ci0g
ICAgfCBwb3N0Zml4X2V4cHJlc3Npb24gRE9UIGlkZW50aWZpZXIgewotICAgICAgICBpZiAoJDEt
PmlzQXJyYXkoKSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDMsICJjYW5ub3QgYXBw
bHkgZG90IG9wZXJhdG9yIHRvIGFuIGFycmF5IiwgIi4iKTsKLSAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgkMS0+aXNWZWN0b3IoKSkgewot
ICAgICAgICAgICAgVFZlY3RvckZpZWxkcyBmaWVsZHM7Ci0gICAgICAgICAgICBpZiAoISBjb250
ZXh0LT5wYXJzZVZlY3RvckZpZWxkcygqJDMuc3RyaW5nLCAkMS0+Z2V0Tm9taW5hbFNpemUoKSwg
ZmllbGRzLCBAMykpIHsKLSAgICAgICAgICAgICAgICBmaWVsZHMubnVtID0gMTsKLSAgICAgICAg
ICAgICAgICBmaWVsZHMub2Zmc2V0c1swXSA9IDA7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUo
KS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgeyAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2
ZWN0b3IgZmllbGRzCi0gICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRDb25zdFZlY3Rv
ck5vZGUoZmllbGRzLCAkMSwgQDMpOwotICAgICAgICAgICAgICAgIGlmICgkJCA9PSAwKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICAg
ICAgJCQgPSAkMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQx
LT5nZXRQcmVjaXNpb24oKSwgRXZxQ29uc3QsIChpbnQpICgqJDMuc3RyaW5nKS5zaXplKCkpKTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVFN0cmluZyB2ZWN0b3JTdHJp
bmcgPSAqJDMuc3RyaW5nOwotICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3dpenpsZShmaWVsZHMsIEAzKTsKLSAgICAgICAgICAg
ICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BWZWN0b3JTd2l6emxl
LCAkMSwgaW5kZXgsIEAyKTsKLSAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+
Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAoaW50KSB2
ZWN0b3JTdHJpbmcuc2l6ZSgpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAo
JDEtPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgIFRNYXRyaXhGaWVsZHMgZmllbGRzOwotICAg
ICAgICAgICAgaWYgKCEgY29udGV4dC0+cGFyc2VNYXRyaXhGaWVsZHMoKiQzLnN0cmluZywgJDEt
PmdldE5vbWluYWxTaXplKCksIGZpZWxkcywgQDMpKSB7Ci0gICAgICAgICAgICAgICAgZmllbGRz
Lndob2xlUm93ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZmllbGRzLndob2xlQ29sID0gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgZmllbGRzLnJvdyA9IDA7Ci0gICAgICAgICAgICAgICAgZmll
bGRzLmNvbCA9IDA7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZpZWxkcy53aG9s
ZUNvbCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAiIG5vbi1zY2FsYXIg
ZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIpOwotICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5
ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0
SUNvbnN0KDApOwotICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQs
IEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMyk7Ci0gICAgICAgICAgICAgICAgJCQgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICQxLCBpbmRleCwgQDIp
OwotICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwg
JDEtPmdldFByZWNpc2lvbigpLEV2cVRlbXBvcmFyeSwgJDEtPmdldE5vbWluYWxTaXplKCkpKTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5p
b25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgIHVuaW9uQXJy
YXktPnNldElDb25zdChmaWVsZHMuY29sICogJDEtPmdldE5vbWluYWxTaXplKCkgKyBmaWVsZHMu
cm93KTsKLSAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBV
bmRlZmluZWQsIEV2cUNvbnN0KSwgQDMpOwotICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAkMSwgaW5kZXgsIEAyKTsKLSAg
ICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5n
ZXRQcmVjaXNpb24oKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCQxLT5n
ZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAgICAgIGJvb2wgZmllbGRGb3Vu
ZCA9IGZhbHNlOwotICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRzID0gJDEtPmdl
dFR5cGUoKS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQg
aTsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoZmllbGRzW2ldLT5uYW1lKCkgPT0gKiQzLnN0cmluZykgewotICAg
ICAgICAgICAgICAgICAgICBmaWVsZEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KGZpZWxkRm91bmQpIHsKLSAgICAgICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRRdWFs
aWZpZXIoKSA9PSBFdnFDb25zdCkgewotICAgICAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQt
PmFkZENvbnN0U3RydWN0KCokMy5zdHJpbmcsICQxLCBAMik7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
JCQtPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGNoYW5nZSB0aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1cm4gdHlwZSwgbm90IG9mIHRoZSBz
dHJ1Y3R1cmUgZmllbGQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHRoZSBzdHJ1Y3R1
cmUgZGVmaW5pdGlvbiBpcyBzaGFyZWQgYmV0d2VlbiB2YXJpb3VzIHN0cnVjdHVyZXMuCi0gICAg
ICAgICAgICAgICAgICAgICAgICAkJC0+Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2
cUNvbnN0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29u
c3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0
KGkpOwotICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgKmZpZWxkc1tpXS0+dHlw
ZSgpLCBAMyk7Ci0gICAgICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEluZGV4KEVPcEluZGV4RGlyZWN0U3RydWN0LCAkMSwgaW5kZXgsIEAyKTsKLSAgICAgICAg
ICAgICAgICAgICAgJCQtPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKEAyLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgJDMuc3RyaW5nLT5jX3N0cigp
KTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAg
JCQgPSAkMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKEAyLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1cmUsIHZl
Y3Rvciwgb3IgbWF0cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgJDMuc3RyaW5nLT5jX3N0cigpKTsK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQkID0gJDE7Ci0g
ICAgICAgIH0KLSAgICAgICAgLy8gZG9uJ3QgZGVsZXRlICQzLnN0cmluZywgaXQncyBmcm9tIHRo
ZSBwb29sCi0gICAgfQotICAgIHwgcG9zdGZpeF9leHByZXNzaW9uIElOQ19PUCB7Ci0gICAgICAg
IGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKEAyLCAiKysiLCAkMSkpCi0gICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZFVuYXJ5TWF0aChFT3BQb3N0SW5jcmVtZW50LCAkMSwgQDIsIGNvbnRleHQtPnN5bWJvbFRh
YmxlKTsKLSAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnVuYXJ5
T3BFcnJvcihAMiwgIisrIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgfQotICAg
IH0KLSAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBERUNfT1AgewotICAgICAgICBpZiAoY29udGV4
dC0+bFZhbHVlRXJyb3JDaGVjayhAMiwgIi0tIiwgJDEpKQotICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1h
dGgoRU9wUG9zdERlY3JlbWVudCwgJDEsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAg
ICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoQDIs
ICItLSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgICAgICQkID0gJDE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgOwot
Ci1pbnRlZ2VyX2V4cHJlc3Npb24KLSAgICA6IGV4cHJlc3Npb24gewotICAgICAgICBpZiAoY29u
dGV4dC0+aW50ZWdlckVycm9yQ2hlY2soJDEsICJbXSIpKQotICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICAkJCA9ICQxOwotICAgIH0KLSAgICA7Ci0KLWZ1bmN0aW9uX2Nh
bGwKLSAgICA6IGZ1bmN0aW9uX2NhbGxfb3JfbWV0aG9kIHsKLSAgICAgICAgVEZ1bmN0aW9uKiBm
bkNhbGwgPSAkMS5mdW5jdGlvbjsKLSAgICAgICAgVE9wZXJhdG9yIG9wID0gZm5DYWxsLT5nZXRC
dWlsdEluT3AoKTsKLQotICAgICAgICBpZiAob3AgIT0gRU9wTnVsbCkKLSAgICAgICAgewotICAg
ICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFRoZW4gdGhpcyBzaG91bGQgYmUgYSBjb25zdHJ1
Y3Rvci4KLSAgICAgICAgICAgIC8vIERvbid0IGdvIHRocm91Z2ggdGhlIHN5bWJvbCB0YWJsZSBm
b3IgY29uc3RydWN0b3JzLgotICAgICAgICAgICAgLy8gVGhlaXIgcGFyYW1ldGVycyB3aWxsIGJl
IHZlcmlmaWVkIGFsZ29yaXRobWljYWxseS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBU
VHlwZSB0eXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7ICAvLyB1c2UgdGhpcyB0byBnZXQgdGhl
IHR5cGUgYmFjawotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmNvbnN0cnVjdG9yRXJyb3JDaGVj
ayhAMSwgJDEuaW50ZXJtTm9kZSwgKmZuQ2FsbCwgb3AsICZ0eXBlKSkgewotICAgICAgICAgICAg
ICAgICQkID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8KLSAg
ICAgICAgICAgICAgICAvLyBJdCdzIGEgY29uc3RydWN0b3IsIG9mIHR5cGUgJ3R5cGUnLgotICAg
ICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRDb25zdHJ1
Y3RvcigkMS5pbnRlcm1Ob2RlLCAmdHlwZSwgb3AsIGZuQ2FsbCwgQDEpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5z
ZXRBZ2dyZWdhdGVPcGVyYXRvcigwLCBvcCwgQDEpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgJCQtPnNldFR5cGUodHlwZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLwot
ICAgICAgICAgICAgLy8gTm90IGEgY29uc3RydWN0b3IuICBGaW5kIGl0IGluIHRoZSBzeW1ib2wg
dGFibGUuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uKiBmbkNh
bmRpZGF0ZTsKLSAgICAgICAgICAgIGJvb2wgYnVpbHRJbjsKLSAgICAgICAgICAgIGZuQ2FuZGlk
YXRlID0gY29udGV4dC0+ZmluZEZ1bmN0aW9uKEAxLCBmbkNhbGwsICZidWlsdEluKTsKLSAgICAg
ICAgICAgIGlmIChmbkNhbmRpZGF0ZSkgewotICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAg
ICAgICAgLy8gQSBkZWNsYXJlZCBmdW5jdGlvbi4KLSAgICAgICAgICAgICAgICAvLwotICAgICAg
ICAgICAgICAgIGlmIChidWlsdEluICYmICFmbkNhbmRpZGF0ZS0+Z2V0RXh0ZW5zaW9uKCkuZW1w
dHkoKSAmJgotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNr
KEAxLCBmbkNhbmRpZGF0ZS0+Z2V0RXh0ZW5zaW9uKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
b3AgPSBmbkNhbmRpZGF0ZS0+Z2V0QnVpbHRJbk9wKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGJ1
aWx0SW4gJiYgb3AgIT0gRU9wTnVsbCkgewotICAgICAgICAgICAgICAgICAgICAvLwotICAgICAg
ICAgICAgICAgICAgICAvLyBBIGZ1bmN0aW9uIGNhbGwgbWFwcGVkIHRvIGEgYnVpbHQtaW4gb3Bl
cmF0aW9uLgotICAgICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgICAgICBpZiAo
Zm5DYW5kaWRhdGUtPmdldFBhcmFtQ291bnQoKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAvLwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJlYXQgaXQgbGlrZSBhIGJ1aWx0
LWluIHVuYXJ5IG9wZXJhdG9yLgotICAgICAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAg
ICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChv
cCwgJDEuaW50ZXJtTm9kZSwgQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICgkJCA9PSAwKSAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImJ1aWx0IGluIHVuYXJ5IG9wZXJhdG9yIGZ1bmN0
aW9uLiAgVHlwZTogIiA8PCBzdGF0aWNfY2FzdDxUSW50ZXJtVHlwZWQqPigkMS5pbnRlcm1Ob2Rl
KS0+Z2V0Q29tcGxldGVTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6
OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAi
IHdyb25nIG9wZXJhbmQgdHlwZSIsICJJbnRlcm5hbCBFcnJvciIsIGV4dHJhSW5mby5jX3N0cigp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBZWUVSUk9SOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3Io
JDEuaW50ZXJtQWdncmVnYXRlLCBvcCwgQDEpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHJl
YWwgZnVuY3Rpb24gY2FsbAotCi0gICAgICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKCQxLmludGVybUFnZ3JlZ2F0ZSwgRU9wRnVu
Y3Rpb25DYWxsLCBAMSk7Ci0gICAgICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKGZuQ2FuZGlk
YXRlLT5nZXRSZXR1cm5UeXBlKCkpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMg
aG93IHdlIGtub3cgd2hldGhlciB0aGUgZ2l2ZW4gZnVuY3Rpb24gaXMgYSBidWlsdEluIGZ1bmN0
aW9uIG9yIGEgdXNlciBkZWZpbmVkIGZ1bmN0aW9uCi0gICAgICAgICAgICAgICAgICAgIC8vIGlm
IGJ1aWx0SW4gPT0gZmFsc2UsIGl0J3MgYSB1c2VyRGVmaW5lZCAtPiBjb3VsZCBiZSBhbiBvdmVy
bG9hZGVkIGJ1aWx0SW4gZnVuY3Rpb24gYWxzbwotICAgICAgICAgICAgICAgICAgICAvLyBpZiBi
dWlsdEluID09IHRydWUsIGl0J3MgZGVmaW5pdGVseSBhIGJ1aWx0SW4gZnVuY3Rpb24gd2l0aCBF
T3BOdWxsCi0gICAgICAgICAgICAgICAgICAgIGlmICghYnVpbHRJbikKLSAgICAgICAgICAgICAg
ICAgICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRVc2VyRGVmaW5lZCgpOwotICAgICAg
ICAgICAgICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0TmFtZShmbkNhbmRpZGF0ZS0+
Z2V0TWFuZ2xlZE5hbWUoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgVFF1YWxpZmllciBxdWFs
OwotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZuQ2FuZGlkYXRl
LT5nZXRQYXJhbUNvdW50KCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcXVhbCA9
IGZuQ2FuZGlkYXRlLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChxdWFsID09IEV2cU91dCB8fCBxdWFsID09IEV2cUluT3V0KSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hl
Y2soJCQtPmdldExpbmUoKSwgImFzc2lnbiIsICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1
ZW5jZSgpW2ldLT5nZXRBc1R5cGVkKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQxLmludGVybU5vZGUtPmdldExpbmUoKSwgIkNvbnN0YW50IHZh
bHVlIGNhbm5vdCBiZSBwYXNzZWQgZm9yICdvdXQnIG9yICdpbm91dCcgcGFyYW1ldGVycy4iLCAi
RXJyb3IiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAkJC0+c2V0VHlwZShmbkNhbmRpZGF0ZS0+Z2V0UmV0dXJuVHlwZSgpKTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gZXJyb3IgbWVzc2FnZSB3YXMgcHV0
IG91dCBieSBQYUZpbmRGdW5jdGlvbigpCi0gICAgICAgICAgICAgICAgLy8gUHV0IG9uIGEgZHVt
bXkgbm9kZSBmb3IgZXJyb3IgcmVjb3ZlcnkKLSAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9u
ICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAgdW5p
b25BcnJheS0+c2V0RkNvbnN0KDAuMGYpOwotICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQs
IEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMSk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGRlbGV0ZSBmbkNh
bGw7Ci0gICAgfQotICAgIDsKLQotZnVuY3Rpb25fY2FsbF9vcl9tZXRob2QKLSAgICA6IGZ1bmN0
aW9uX2NhbGxfZ2VuZXJpYyB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgfQotICAgIHwgcG9zdGZp
eF9leHByZXNzaW9uIERPVCBmdW5jdGlvbl9jYWxsX2dlbmVyaWMgewotICAgICAgICBjb250ZXh0
LT5lcnJvcihAMywgIm1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQiLCAiIik7Ci0gICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgJCQgPSAkMzsKLSAgICB9Ci0gICAgOwotCi1mdW5j
dGlvbl9jYWxsX2dlbmVyaWMKLSAgICA6IGZ1bmN0aW9uX2NhbGxfaGVhZGVyX3dpdGhfcGFyYW1l
dGVycyBSSUdIVF9QQVJFTiB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgfQotICAgIHwgZnVuY3Rp
b25fY2FsbF9oZWFkZXJfbm9fcGFyYW1ldGVycyBSSUdIVF9QQVJFTiB7Ci0gICAgICAgICQkID0g
JDE7Ci0gICAgfQotICAgIDsKLQotZnVuY3Rpb25fY2FsbF9oZWFkZXJfbm9fcGFyYW1ldGVycwot
ICAgIDogZnVuY3Rpb25fY2FsbF9oZWFkZXIgVk9JRF9UWVBFIHsKLSAgICAgICAgJCQuZnVuY3Rp
b24gPSAkMTsKLSAgICAgICAgJCQuaW50ZXJtTm9kZSA9IDA7Ci0gICAgfQotICAgIHwgZnVuY3Rp
b25fY2FsbF9oZWFkZXIgewotICAgICAgICAkJC5mdW5jdGlvbiA9ICQxOwotICAgICAgICAkJC5p
bnRlcm1Ob2RlID0gMDsKLSAgICB9Ci0gICAgOwotCi1mdW5jdGlvbl9jYWxsX2hlYWRlcl93aXRo
X3BhcmFtZXRlcnMKLSAgICA6IGZ1bmN0aW9uX2NhbGxfaGVhZGVyIGFzc2lnbm1lbnRfZXhwcmVz
c2lvbiB7Ci0gICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7IDAsIG5ldyBUVHlwZSgkMi0+Z2V0
VHlwZSgpKSB9OwotICAgICAgICAkMS0+YWRkUGFyYW1ldGVyKHBhcmFtKTsKLSAgICAgICAgJCQu
ZnVuY3Rpb24gPSAkMTsKLSAgICAgICAgJCQuaW50ZXJtTm9kZSA9ICQyOwotICAgIH0KLSAgICB8
IGZ1bmN0aW9uX2NhbGxfaGVhZGVyX3dpdGhfcGFyYW1ldGVycyBDT01NQSBhc3NpZ25tZW50X2V4
cHJlc3Npb24gewotICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUoJDMt
PmdldFR5cGUoKSkgfTsKLSAgICAgICAgJDEuZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJhbSk7
Ci0gICAgICAgICQkLmZ1bmN0aW9uID0gJDEuZnVuY3Rpb247Ci0gICAgICAgICQkLmludGVybU5v
ZGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1Ob2RlLCAk
MywgQDIpOwotICAgIH0KLSAgICA7Ci0KLWZ1bmN0aW9uX2NhbGxfaGVhZGVyCi0gICAgOiBmdW5j
dGlvbl9pZGVudGlmaWVyIExFRlRfUEFSRU4gewotICAgICAgICAkJCA9ICQxOwotICAgIH0KLSAg
ICA7Ci0KLS8vIEdyYW1tYXIgTm90ZTogIENvbnN0cnVjdG9ycyBsb29rIGxpa2UgZnVuY3Rpb25z
LCBidXQgYXJlIHJlY29nbml6ZWQgYXMgdHlwZXMuCi0KLWZ1bmN0aW9uX2lkZW50aWZpZXIKLSAg
ICA6IHR5cGVfc3BlY2lmaWVyX25vbmFycmF5IHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gQ29u
c3RydWN0b3IKLSAgICAgICAgLy8KLSAgICAgICAgVE9wZXJhdG9yIG9wID0gRU9wTnVsbDsKLSAg
ICAgICAgaWYgKCQxLnVzZXJEZWYpIHsKLSAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0U3Ry
dWN0OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3dpdGNoICgkMS50eXBlKSB7Ci0g
ICAgICAgICAgICBjYXNlIEVidEZsb2F0OgotICAgICAgICAgICAgICAgIGlmICgkMS5tYXRyaXgp
IHsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoKCQxLnNpemUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdE1hdDI7ICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVjdE1hdDM7ICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVjdE1hdDQ7ICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHN3aXRjaCgkMS5zaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogb3Ag
PSBFT3BDb25zdHJ1Y3RGbG9hdDsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMjog
b3AgPSBFT3BDb25zdHJ1Y3RWZWMyOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
Mzogb3AgPSBFT3BDb25zdHJ1Y3RWZWMzOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNh
c2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RWZWM0OyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIEVidEludDoKLSAgICAgICAgICAgICAgICBzd2l0Y2goJDEuc2l6ZSkgewotICAgICAg
ICAgICAgICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RJbnQ7ICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdElWZWMyOyBicmVhazsKLSAgICAgICAg
ICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0SVZlYzM7IGJyZWFrOwotICAgICAgICAg
ICAgICAgIGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RJVmVjNDsgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFYnRCb29s
OgotICAgICAgICAgICAgICAgIHN3aXRjaCgkMS5zaXplKSB7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSAxOiBvcCA9IEVPcENvbnN0cnVjdEJvb2w7ICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNl
IDI6IG9wID0gRU9wQ29uc3RydWN0QlZlYzI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ug
Mzogb3AgPSBFT3BDb25zdHJ1Y3RCVmVjMzsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSA0
OiBvcCA9IEVPcENvbnN0cnVjdEJWZWM0OyBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OiBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmIChvcCA9PSBFT3BOdWxsKSB7Ci0gICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoQDEsICJjYW5ub3QgY29uc3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2lj
U3RyaW5nKCQxLnR5cGUpKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgICAgICAgICAgICAgJDEudHlwZSA9IEVidEZsb2F0OwotICAgICAgICAgICAgICAgIG9wID0g
RU9wQ29uc3RydWN0RmxvYXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgVFN0
cmluZyB0ZW1wU3RyaW5nOwotICAgICAgICBUVHlwZSB0eXBlKCQxKTsKLSAgICAgICAgVEZ1bmN0
aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oJnRlbXBTdHJpbmcsIHR5cGUsIG9wKTsKLSAg
ICAgICAgJCQgPSBmdW5jdGlvbjsKLSAgICB9Ci0gICAgfCBJREVOVElGSUVSIHsKLSAgICAgICAg
aWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjayhAMSwgKiQxLnN0cmluZykpCi0gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwgRWJw
VW5kZWZpbmVkKTsKLSAgICAgICAgVEZ1bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24o
JDEuc3RyaW5nLCB0eXBlKTsKLSAgICAgICAgJCQgPSBmdW5jdGlvbjsKLSAgICB9Ci0gICAgOwot
Ci11bmFyeV9leHByZXNzaW9uCi0gICAgOiBwb3N0Zml4X2V4cHJlc3Npb24gewotICAgICAgICAk
JCA9ICQxOwotICAgIH0KLSAgICB8IElOQ19PUCB1bmFyeV9leHByZXNzaW9uIHsKLSAgICAgICAg
aWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soQDEsICIrKyIsICQyKSkKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkVW5hcnlNYXRoKEVPcFByZUluY3JlbWVudCwgJDIsIEAxLCBjb250ZXh0LT5zeW1ib2xUYWJs
ZSk7Ci0gICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT51bmFyeU9w
RXJyb3IoQDEsICIrKyIsICQyLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQkID0gJDI7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgfCBERUNfT1AgdW5hcnlfZXhwcmVzc2lvbiB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5s
VmFsdWVFcnJvckNoZWNrKEAxLCAiLS0iLCAkMikpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChF
T3BQcmVEZWNyZW1lbnQsICQyLCBAMSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBp
ZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKEAxLCAiLS0i
LCAkMi0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgICAgICAkJCA9ICQyOwotICAgICAgICB9Ci0gICAgfQotICAgIHwgdW5hcnlf
b3BlcmF0b3IgdW5hcnlfZXhwcmVzc2lvbiB7Ci0gICAgICAgIGlmICgkMS5vcCAhPSBFT3BOdWxs
KSB7Ci0gICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgo
JDEub3AsICQyLCBAMSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICAgICAgaWYgKCQk
ID09IDApIHsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBlcnJvck9wID0gIiI7Ci0gICAg
ICAgICAgICAgICAgc3dpdGNoKCQxLm9wKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BOZWdh
dGl2ZTogICBlcnJvck9wID0gIi0iOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEVPcExv
Z2ljYWxOb3Q6IGVycm9yT3AgPSAiISI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6
IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb250ZXh0LT51bmFy
eU9wRXJyb3IoQDEsIGVycm9yT3AsICQyLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgJCQgPSAkMjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAkJCA9ICQyOwotICAgIH0K
LSAgICA7Ci0vLyBHcmFtbWFyIE5vdGU6ICBObyB0cmFkaXRpb25hbCBzdHlsZSB0eXBlIGNhc3Rz
LgotCi11bmFyeV9vcGVyYXRvcgotICAgIDogUExVUyAgeyAkJC5vcCA9IEVPcE51bGw7IH0KLSAg
ICB8IERBU0ggIHsgJCQub3AgPSBFT3BOZWdhdGl2ZTsgfQotICAgIHwgQkFORyAgeyAkJC5vcCA9
IEVPcExvZ2ljYWxOb3Q7IH0KLSAgICA7Ci0vLyBHcmFtbWFyIE5vdGU6ICBObyAnKicgb3IgJyYn
IHVuYXJ5IG9wcy4gIFBvaW50ZXJzIGFyZSBub3Qgc3VwcG9ydGVkLgotCi1tdWx0aXBsaWNhdGl2
ZV9leHByZXNzaW9uCi0gICAgOiB1bmFyeV9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQotICAgIHwg
bXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbiBTVEFSIHVuYXJ5X2V4cHJlc3Npb24gewotICAgICAg
ICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcE11bCwgJDEsICQz
LCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoJCQgPT0gMCkgewotICAg
ICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIioiLCAkMS0+Z2V0Q29tcGxldGVT
dHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgfQotICAgIH0KLSAgICB8
IG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24gU0xBU0ggdW5hcnlfZXhwcmVzc2lvbiB7Ci0gICAg
ICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wRGl2LCAkMSwg
JDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmICgkJCA9PSAwKSB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiLyIsICQxLT5nZXRDb21wbGV0
ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICB9Ci0gICAgfQotICAg
IDsKLQotYWRkaXRpdmVfZXhwcmVzc2lvbgotICAgIDogbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lv
biB7ICQkID0gJDE7IH0KLSAgICB8IGFkZGl0aXZlX2V4cHJlc3Npb24gUExVUyBtdWx0aXBsaWNh
dGl2ZV9leHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
QmluYXJ5TWF0aChFT3BBZGQsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKLSAg
ICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3Io
QDIsICIrIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygp
KTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQkID0gJDE7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgfCBhZGRpdGl2ZV9leHByZXNzaW9uIERBU0ggbXVsdGlw
bGljYXRpdmVfZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEJpbmFyeU1hdGgoRU9wU3ViLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7
Ci0gICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVy
cm9yKEAyLCAiLSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJp
bmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkJCA9
ICQxOwotICAgICAgICB9Ci0gICAgfQotICAgIDsKLQotc2hpZnRfZXhwcmVzc2lvbgotICAgIDog
YWRkaXRpdmVfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KLSAgICA7Ci0KLXJlbGF0aW9uYWxfZXhw
cmVzc2lvbgotICAgIDogc2hpZnRfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KLSAgICB8IHJlbGF0
aW9uYWxfZXhwcmVzc2lvbiBMRUZUX0FOR0xFIHNoaWZ0X2V4cHJlc3Npb24gewotICAgICAgICAk
JCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExlc3NUaGFuLCAkMSwg
JDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmICgkJCA9PSAwKSB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiPCIsICQxLT5nZXRDb21wbGV0
ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3
IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFs
c2UpOwotICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRV
bmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwg
QDIpOwotICAgICAgICB9Ci0gICAgfQotICAgIHwgcmVsYXRpb25hbF9leHByZXNzaW9uIFJJR0hU
X0FOR0xFIHNoaWZ0X2V4cHJlc3Npb24gIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbiwgJDEsICQzLCBAMiwgY29udGV4dC0+
c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgY29udGV4
dC0+YmluYXJ5T3BFcnJvcihAMiwgIj4iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdl
dENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFd
OwotICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAgICAgICAg
ICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwg
VFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAyKTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICB8IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiBMRV9PUCBzaGlmdF9leHByZXNzaW9u
ICB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9w
TGVzc1RoYW5FcXVhbCwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAg
ICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwg
Ijw9IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIENvbnN0YW50VW5p
b24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgIHVuaW9u
QXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QpLCBAMik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgfCByZWxhdGlv
bmFsX2V4cHJlc3Npb24gR0VfT1Agc2hpZnRfZXhwcmVzc2lvbiAgewotICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuRXF1YWwsICQx
LCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCQkID09IDApIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICI+PSIsICQxLT5nZXRDb21w
bGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0g
bmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3Qo
ZmFsc2UpOwotICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3Rh
bnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0
KSwgQDIpOwotICAgICAgICB9Ci0gICAgfQotICAgIDsKLQotZXF1YWxpdHlfZXhwcmVzc2lvbgot
ICAgIDogcmVsYXRpb25hbF9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQotICAgIHwgZXF1YWxpdHlf
ZXhwcmVzc2lvbiBFUV9PUCByZWxhdGlvbmFsX2V4cHJlc3Npb24gIHsKLSAgICAgICAgJCQgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BFcXVhbCwgJDEsICQzLCBAMiwg
Y29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoJCQgPT0gMCkgewotICAgICAgICAg
ICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIj09IiwgJDEtPmdldENvbXBsZXRlU3RyaW5n
KCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3Rh
bnRVbmlvblsxXTsKLSAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0g
ICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVu
aW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMik7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgfCBlcXVhbGl0eV9leHByZXNzaW9uIE5FX09QIHJlbGF0aW9u
YWxfZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJp
bmFyeU1hdGgoRU9wTm90RXF1YWwsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsK
LSAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJy
b3IoQDIsICIhPSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJp
bmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBDb25z
dGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAg
ICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwotICAgICAgICAgICAgJCQgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29s
LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDIpOwotICAgICAgICB9Ci0gICAgfQotICAgIDsK
LQotYW5kX2V4cHJlc3Npb24KLSAgICA6IGVxdWFsaXR5X2V4cHJlc3Npb24geyAkJCA9ICQxOyB9
Ci0gICAgOwotCi1leGNsdXNpdmVfb3JfZXhwcmVzc2lvbgotICAgIDogYW5kX2V4cHJlc3Npb24g
eyAkJCA9ICQxOyB9Ci0gICAgOwotCi1pbmNsdXNpdmVfb3JfZXhwcmVzc2lvbgotICAgIDogZXhj
bHVzaXZlX29yX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9Ci0gICAgOwotCi1sb2dpY2FsX2FuZF9l
eHByZXNzaW9uCi0gICAgOiBpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KLSAg
ICB8IGxvZ2ljYWxfYW5kX2V4cHJlc3Npb24gQU5EX09QIGluY2x1c2l2ZV9vcl9leHByZXNzaW9u
IHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BM
b2dpY2FsQW5kLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlm
ICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiJiYi
LCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAq
dW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgdW5pb25BcnJh
eS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZp
bmVkLCBFdnFDb25zdCksIEAyKTsKLSAgICAgICAgfQotICAgIH0KLSAgICA7Ci0KLWxvZ2ljYWxf
eG9yX2V4cHJlc3Npb24KLSAgICA6IGxvZ2ljYWxfYW5kX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9
Ci0gICAgfCBsb2dpY2FsX3hvcl9leHByZXNzaW9uIFhPUl9PUCBsb2dpY2FsX2FuZF9leHByZXNz
aW9uICB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgo
RU9wTG9naWNhbFhvciwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAg
ICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwg
Il5eIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIENvbnN0YW50VW5p
b24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgIHVuaW9u
QXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QpLCBAMik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgOwotCi1sb2dp
Y2FsX29yX2V4cHJlc3Npb24KLSAgICA6IGxvZ2ljYWxfeG9yX2V4cHJlc3Npb24geyAkJCA9ICQx
OyB9Ci0gICAgfCBsb2dpY2FsX29yX2V4cHJlc3Npb24gT1JfT1AgbG9naWNhbF94b3JfZXhwcmVz
c2lvbiAgewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRo
KEVPcExvZ2ljYWxPciwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAg
ICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwg
Inx8IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIENvbnN0YW50VW5p
b24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgIHVuaW9u
QXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QpLCBAMik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgOwotCi1jb25k
aXRpb25hbF9leHByZXNzaW9uCi0gICAgOiBsb2dpY2FsX29yX2V4cHJlc3Npb24geyAkJCA9ICQx
OyB9Ci0gICAgfCBsb2dpY2FsX29yX2V4cHJlc3Npb24gUVVFU1RJT04gZXhwcmVzc2lvbiBDT0xP
TiBhc3NpZ25tZW50X2V4cHJlc3Npb24gewotICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JD
aGVjayhAMiwgJDEpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAg
ICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFNlbGVjdGlvbigkMSwgJDMsICQ1LCBAMik7
Ci0gICAgICAgIGlmICgkMy0+Z2V0VHlwZSgpICE9ICQ1LT5nZXRUeXBlKCkpCi0gICAgICAgICAg
ICAkJCA9IDA7Ci0KLSAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQt
PmJpbmFyeU9wRXJyb3IoQDIsICI6IiwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCksICQ1LT5nZXRD
b21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgICAgICQkID0gJDU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgOwotCi1hc3NpZ25tZW50X2V4
cHJlc3Npb24KLSAgICA6IGNvbmRpdGlvbmFsX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9Ci0gICAg
fCB1bmFyeV9leHByZXNzaW9uIGFzc2lnbm1lbnRfb3BlcmF0b3IgYXNzaWdubWVudF9leHByZXNz
aW9uIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soQDIsICJhc3NpZ24i
LCAkMSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICQkID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZEFzc2lnbigkMi5vcCwgJDEsICQzLCBAMik7Ci0gICAgICAg
IGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5hc3NpZ25FcnJvcihAMiwgImFz
c2lnbiIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7
Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkJCA9ICQxOwot
ICAgICAgICB9Ci0gICAgfQotICAgIDsKLQotYXNzaWdubWVudF9vcGVyYXRvcgotICAgIDogRVFV
QUwgICAgICAgIHsgJCQub3AgPSBFT3BBc3NpZ247IH0KLSAgICB8IE1VTF9BU1NJR04gICB7ICQk
Lm9wID0gRU9wTXVsQXNzaWduOyB9Ci0gICAgfCBESVZfQVNTSUdOICAgeyAkJC5vcCA9IEVPcERp
dkFzc2lnbjsgfQotICAgIHwgQUREX0FTU0lHTiAgIHsgJCQub3AgPSBFT3BBZGRBc3NpZ247IH0K
LSAgICB8IFNVQl9BU1NJR04gICB7ICQkLm9wID0gRU9wU3ViQXNzaWduOyB9Ci0gICAgOwotCi1l
eHByZXNzaW9uCi0gICAgOiBhc3NpZ25tZW50X2V4cHJlc3Npb24gewotICAgICAgICAkJCA9ICQx
OwotICAgIH0KLSAgICB8IGV4cHJlc3Npb24gQ09NTUEgYXNzaWdubWVudF9leHByZXNzaW9uIHsK
LSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29tbWEoJDEsICQzLCBAMik7
Ci0gICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVy
cm9yKEAyLCAiLCIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJp
bmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkJCA9
ICQzOwotICAgICAgICB9Ci0gICAgfQotICAgIDsKLQotY29uc3RhbnRfZXhwcmVzc2lvbgotICAg
IDogY29uZGl0aW9uYWxfZXhwcmVzc2lvbiB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5jb25zdEVy
cm9yQ2hlY2soJDEpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAk
JCA9ICQxOwotICAgIH0KLSAgICA7Ci0KLWRlY2xhcmF0aW9uCi0gICAgOiBmdW5jdGlvbl9wcm90
b3R5cGUgU0VNSUNPTE9OICAgewotICAgICAgICBURnVuY3Rpb24gJmZ1bmN0aW9uID0gKigkMS5m
dW5jdGlvbik7Ci0gICAgICAgIAotICAgICAgICBUSW50ZXJtQWdncmVnYXRlICpwcm90b3R5cGUg
PSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKLSAgICAgICAgcHJvdG90eXBlLT5zZXRUeXBlKGZ1bmN0
aW9uLmdldFJldHVyblR5cGUoKSk7Ci0gICAgICAgIHByb3RvdHlwZS0+c2V0TmFtZShmdW5jdGlv
bi5nZXROYW1lKCkpOwotICAgICAgICAKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBm
dW5jdGlvbi5nZXRQYXJhbUNvdW50KCk7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgY29u
c3QgVFBhcmFtZXRlciAmcGFyYW0gPSBmdW5jdGlvbi5nZXRQYXJhbShpKTsKLSAgICAgICAgICAg
IGlmIChwYXJhbS5uYW1lICE9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVFZh
cmlhYmxlIHZhcmlhYmxlKHBhcmFtLm5hbWUsICpwYXJhbS50eXBlKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBwcm90b3R5cGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jv
d0FnZ3JlZ2F0ZShwcm90b3R5cGUsIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFy
aWFibGUuZ2V0VW5pcXVlSWQoKSwgdmFyaWFibGUuZ2V0TmFtZSgpLCB2YXJpYWJsZS5nZXRUeXBl
KCksIEAxKSwgQDEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHByb3RvdHlwZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5n
cm93QWdncmVnYXRlKHByb3RvdHlwZSwgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgw
LCAiIiwgKnBhcmFtLnR5cGUsIEAxKSwgQDEpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBwcm90b3R5cGUtPnNldE9wKEVPcFByb3RvdHlwZSk7Ci0gICAgICAg
ICQkID0gcHJvdG90eXBlOwotCi0gICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwot
ICAgIH0KLSAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IFNFTUlDT0xPTiB7Ci0gICAgICAgIGlm
ICgkMS5pbnRlcm1BZ2dyZWdhdGUpCi0gICAgICAgICAgICAkMS5pbnRlcm1BZ2dyZWdhdGUtPnNl
dE9wKEVPcERlY2xhcmF0aW9uKTsKLSAgICAgICAgJCQgPSAkMS5pbnRlcm1BZ2dyZWdhdGU7Ci0g
ICAgfQotICAgIHwgUFJFQ0lTSU9OIHByZWNpc2lvbl9xdWFsaWZpZXIgdHlwZV9zcGVjaWZpZXJf
bm9fcHJlYyBTRU1JQ09MT04gewotICAgICAgICBpZiAoKCQyID09IEVicEhpZ2gpICYmIChjb250
ZXh0LT5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikgJiYgIWNvbnRleHQtPmZyYWdt
ZW50UHJlY2lzaW9uSGlnaCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJwcmVj
aXNpb24gaXMgbm90IHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXIiLCAiaGlnaHAiKTsKLSAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWNv
bnRleHQtPnN5bWJvbFRhYmxlLnNldERlZmF1bHRQcmVjaXNpb24oICQzLCAkMiApKSB7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgImlsbGVnYWwgdHlwZSBhcmd1bWVudCBmb3IgZGVm
YXVsdCBwcmVjaXNpb24gcXVhbGlmaWVyIiwgZ2V0QmFzaWNTdHJpbmcoJDMudHlwZSkpOwotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgICQkID0gMDsK
LSAgICB9Ci0gICAgOwotCi1mdW5jdGlvbl9wcm90b3R5cGUKLSAgICA6IGZ1bmN0aW9uX2RlY2xh
cmF0b3IgUklHSFRfUEFSRU4gIHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gTXVsdGlwbGUgZGVj
bGFyYXRpb25zIG9mIHRoZSBzYW1lIGZ1bmN0aW9uIGFyZSBhbGxvd2VkLgotICAgICAgICAvLwot
ICAgICAgICAvLyBJZiB0aGlzIGlzIGEgZGVmaW5pdGlvbiwgdGhlIGRlZmluaXRpb24gcHJvZHVj
dGlvbiBjb2RlIHdpbGwgY2hlY2sgZm9yIHJlZGVmaW5pdGlvbnMKLSAgICAgICAgLy8gKHdlIGRv
bid0IGtub3cgYXQgdGhpcyBwb2ludCBpZiBpdCdzIGEgZGVmaW5pdGlvbiBvciBub3QpLgotICAg
ICAgICAvLwotICAgICAgICAvLyBSZWRlY2xhcmF0aW9ucyBhcmUgYWxsb3dlZC4gIEJ1dCwgcmV0
dXJuIHR5cGVzIGFuZCBwYXJhbWV0ZXIgcXVhbGlmaWVycyBtdXN0IG1hdGNoLgotICAgICAgICAv
LwotICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihj
b250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCQxLT5nZXRNYW5nbGVkTmFtZSgpKSk7Ci0gICAgICAg
IGlmIChwcmV2RGVjKSB7Ci0gICAgICAgICAgICBpZiAocHJldkRlYy0+Z2V0UmV0dXJuVHlwZSgp
ICE9ICQxLT5nZXRSZXR1cm5UeXBlKCkpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cihAMiwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSByZXR1cm4gdHlw
ZSIsICQxLT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNTdHJpbmcoKSk7Ci0gICAgICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBwcmV2RGVjLT5nZXRQYXJhbUNvdW50KCk7ICsraSkgewotICAgICAg
ICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSAh
PSAkMS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUg
dGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAkMS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0
UXVhbGlmaWVyU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8KLSAgICAgICAgLy8gQ2hlY2sgZm9yIHByZXZpb3VzbHkgZGVjbGFyZWQgdmFyaWFibGVz
IHVzaW5nIHRoZSBzYW1lIG5hbWUuCi0gICAgICAgIC8vCi0gICAgICAgIFRTeW1ib2wgKnByZXZT
eW0gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCQxLT5nZXROYW1lKCkpOwotICAgICAgICBp
ZiAocHJldlN5bSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFwcmV2U3ltLT5pc0Z1bmN0
aW9uKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIs
ICJyZWRlZmluaXRpb24iLCAkMS0+Z2V0TmFtZSgpLmNfc3RyKCksICJmdW5jdGlvbiIpOwotICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEluc2VydCB0aGUgdW5t
YW5nbGVkIG5hbWUgdG8gZGV0ZWN0IHBvdGVudGlhbCBmdXR1cmUgcmVkZWZpbml0aW9uIGFzIGEg
dmFyaWFibGUuCi0gICAgICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5nZXRPdXRlckxldmVs
KCktPmluc2VydCgkMS0+Z2V0TmFtZSgpLCAqJDEpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8K
LSAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHJlZGVjbGFyYXRpb24sIGl0IGNvdWxkIGFsc28gYmUg
YSBkZWZpbml0aW9uLAotICAgICAgICAvLyBpbiB3aGljaCBjYXNlLCB3ZSB3YW50IHRvIHVzZSB0
aGUgdmFyaWFibGUgbmFtZXMgZnJvbSB0aGlzIG9uZSwgYW5kIG5vdCB0aGUgb25lIHRoYXQncwot
ICAgICAgICAvLyBiZWluZyByZWRlY2xhcmVkLiAgU28sIHBhc3MgYmFjayB1cCB0aGlzIGRlY2xh
cmF0aW9uLCBub3QgdGhlIG9uZSBpbiB0aGUgc3ltYm9sIHRhYmxlLgotICAgICAgICAvLwotICAg
ICAgICAkJC5mdW5jdGlvbiA9ICQxOwotCi0gICAgICAgIC8vIFdlJ3JlIGF0IHRoZSBpbm5lciBz
Y29wZSBsZXZlbCBvZiB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudHMgYW5kIGJvZHkgc3RhdGVtZW50
LgotICAgICAgICAvLyBBZGQgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZSB0byB0aGUgc3Vycm91bmRp
bmcgc2NvcGUgaW5zdGVhZC4KLSAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUuZ2V0T3V0ZXJM
ZXZlbCgpLT5pbnNlcnQoKiQkLmZ1bmN0aW9uKTsKLSAgICB9Ci0gICAgOwotCi1mdW5jdGlvbl9k
ZWNsYXJhdG9yCi0gICAgOiBmdW5jdGlvbl9oZWFkZXIgewotICAgICAgICAkJCA9ICQxOwotICAg
IH0KLSAgICB8IGZ1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMgewotICAgICAgICAkJCA9
ICQxOwotICAgIH0KLSAgICA7Ci0KLQotZnVuY3Rpb25faGVhZGVyX3dpdGhfcGFyYW1ldGVycwot
ICAgIDogZnVuY3Rpb25faGVhZGVyIHBhcmFtZXRlcl9kZWNsYXJhdGlvbiB7Ci0gICAgICAgIC8v
IEFkZCB0aGUgcGFyYW1ldGVyCi0gICAgICAgICQkID0gJDE7Ci0gICAgICAgIGlmICgkMi5wYXJh
bS50eXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKQotICAgICAgICAgICAgJDEtPmFkZFBh
cmFtZXRlcigkMi5wYXJhbSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRlbGV0ZSAkMi5w
YXJhbS50eXBlOwotICAgIH0KLSAgICB8IGZ1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMg
Q09NTUEgcGFyYW1ldGVyX2RlY2xhcmF0aW9uIHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gT25s
eSBmaXJzdCBwYXJhbWV0ZXIgb2Ygb25lLXBhcmFtZXRlciBmdW5jdGlvbnMgY2FuIGJlIHZvaWQK
LSAgICAgICAgLy8gVGhlIGNoZWNrIGZvciBuYW1lZCBwYXJhbWV0ZXJzIG5vdCBiZWluZyB2b2lk
IGlzIGRvbmUgaW4gcGFyYW1ldGVyX2RlY2xhcmF0b3IKLSAgICAgICAgLy8KLSAgICAgICAgaWYg
KCQzLnBhcmFtLnR5cGUtPmdldEJhc2ljVHlwZSgpID09IEVidFZvaWQpIHsKLSAgICAgICAgICAg
IC8vCi0gICAgICAgICAgICAvLyBUaGlzIHBhcmFtZXRlciA+IGZpcnN0IGlzIHZvaWQKLSAgICAg
ICAgICAgIC8vCi0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgImNhbm5vdCBiZSBhbiBh
cmd1bWVudCB0eXBlIGV4Y2VwdCBmb3IgJyh2b2lkKSciLCAidm9pZCIpOwotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgZGVsZXRlICQzLnBhcmFtLnR5cGU7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBBZGQgdGhlIHBhcmFtZXRlcgotICAgICAg
ICAgICAgJCQgPSAkMTsKLSAgICAgICAgICAgICQxLT5hZGRQYXJhbWV0ZXIoJDMucGFyYW0pOwot
ICAgICAgICB9Ci0gICAgfQotICAgIDsKLQotZnVuY3Rpb25faGVhZGVyCi0gICAgOiBmdWxseV9z
cGVjaWZpZWRfdHlwZSBJREVOVElGSUVSIExFRlRfUEFSRU4gewotICAgICAgICBpZiAoJDEucXVh
bGlmaWVyICE9IEV2cUdsb2JhbCAmJiAkMS5xdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgIm5vIHF1YWxpZmllcnMgYWxsb3dlZCBmb3Ig
ZnVuY3Rpb24gcmV0dXJuIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikpOwotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgIC8vIG1ha2Ug
c3VyZSBhIHNhbXBsZXIgaXMgbm90IGludm9sdmVkIGFzIHdlbGwuLi4KLSAgICAgICAgaWYgKGNv
bnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soQDIsICQxKSkKLSAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICAvLyBBZGQgdGhlIGZ1bmN0aW9uIGFzIGEgcHJv
dG90eXBlIGFmdGVyIHBhcnNpbmcgaXQgKHdlIGRvIG5vdCBzdXBwb3J0IHJlY3Vyc2lvbikKLSAg
ICAgICAgVEZ1bmN0aW9uICpmdW5jdGlvbjsKLSAgICAgICAgVFR5cGUgdHlwZSgkMSk7Ci0gICAg
ICAgIGZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigkMi5zdHJpbmcsIHR5cGUpOwotICAgICAgICAk
JCA9IGZ1bmN0aW9uOwotICAgICAgICAKLSAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUucHVz
aCgpOwotICAgIH0KLSAgICA7Ci0KLXBhcmFtZXRlcl9kZWNsYXJhdG9yCi0gICAgLy8gVHlwZSAr
IG5hbWUKLSAgICA6IHR5cGVfc3BlY2lmaWVyIGlkZW50aWZpZXIgewotICAgICAgICBpZiAoJDEu
dHlwZSA9PSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgImlsbGVn
YWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgJDIuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY29udGV4dC0+cmVz
ZXJ2ZWRFcnJvckNoZWNrKEAyLCAqJDIuc3RyaW5nKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHskMi5zdHJpbmcsIG5ldyBUVHlw
ZSgkMSl9OwotICAgICAgICAkJC5wYXJhbSA9IHBhcmFtOwotICAgIH0KLSAgICB8IHR5cGVfc3Bl
Y2lmaWVyIGlkZW50aWZpZXIgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRf
QlJBQ0tFVCB7Ci0gICAgICAgIC8vIENoZWNrIHRoYXQgd2UgY2FuIG1ha2UgYW4gYXJyYXkgb3V0
IG9mIHRoaXMgdHlwZQotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjayhA
MywgJDEpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlmIChj
b250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soQDIsICokMi5zdHJpbmcpKQotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGludCBzaXplOwotICAgICAgICBpZiAoY29u
dGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjayhAMywgJDQsIHNpemUpKQotICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkMS5zZXRBcnJheSh0cnVlLCBzaXplKTsKLQotICAg
ICAgICBUVHlwZSogdHlwZSA9IG5ldyBUVHlwZSgkMSk7Ci0gICAgICAgIFRQYXJhbWV0ZXIgcGFy
YW0gPSB7ICQyLnN0cmluZywgdHlwZSB9OwotICAgICAgICAkJC5wYXJhbSA9IHBhcmFtOwotICAg
IH0KLSAgICA7Ci0KLXBhcmFtZXRlcl9kZWNsYXJhdGlvbgotICAgIC8vCi0gICAgLy8gVGhlIG9u
bHkgcGFyYW1ldGVyIHF1YWxpZmllciBhIHBhcmFtZXRlciBjYW4gaGF2ZSBhcmUKLSAgICAvLyBJ
Tl9RVUFMLCBPVVRfUVVBTCwgSU5PVVRfUVVBTCwgb3IgQ09OU1QuCi0gICAgLy8KLQotICAgIC8v
Ci0gICAgLy8gVHlwZSArIG5hbWUKLSAgICAvLwotICAgIDogdHlwZV9xdWFsaWZpZXIgcGFyYW1l
dGVyX3F1YWxpZmllciBwYXJhbWV0ZXJfZGVjbGFyYXRvciB7Ci0gICAgICAgICQkID0gJDM7Ci0g
ICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soQDMsICQxLnF1YWxpZmllciwgJDIs
ICQkLnBhcmFtLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgIH0K
LSAgICB8IHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX2RlY2xhcmF0b3IgewotICAgICAg
ICAkJCA9ICQyOwotICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1ldGVyU2FtcGxlckVycm9yQ2hl
Y2soQDIsICQxLCAqJDIucGFyYW0udHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soQDIsIEV2cVRlbXBvcmFy
eSwgJDEsICQkLnBhcmFtLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgIH0KLSAgICAvLwotICAgIC8vIE9ubHkgdHlwZQotICAgIC8vCi0gICAgfCB0eXBlX3F1YWxp
ZmllciBwYXJhbWV0ZXJfcXVhbGlmaWVyIHBhcmFtZXRlcl90eXBlX3NwZWNpZmllciB7Ci0gICAg
ICAgICQkID0gJDM7Ci0gICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soQDMsICQx
LnF1YWxpZmllciwgJDIsICQkLnBhcmFtLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotICAgIH0KLSAgICB8IHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX3R5cGVf
c3BlY2lmaWVyIHsKLSAgICAgICAgJCQgPSAkMjsKLSAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFt
ZXRlclNhbXBsZXJFcnJvckNoZWNrKEAyLCAkMSwgKiQyLnBhcmFtLnR5cGUpKQotICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNo
ZWNrKEAyLCBFdnFUZW1wb3JhcnksICQxLCAkJC5wYXJhbS50eXBlKSkKLSAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICB9Ci0gICAgOwotCi1wYXJhbWV0ZXJfcXVhbGlmaWVyCi0g
ICAgOiAvKiBlbXB0eSAqLyB7Ci0gICAgICAgICQkID0gRXZxSW47Ci0gICAgfQotICAgIHwgSU5f
UVVBTCB7Ci0gICAgICAgICQkID0gRXZxSW47Ci0gICAgfQotICAgIHwgT1VUX1FVQUwgewotICAg
ICAgICAkJCA9IEV2cU91dDsKLSAgICB9Ci0gICAgfCBJTk9VVF9RVUFMIHsKLSAgICAgICAgJCQg
PSBFdnFJbk91dDsKLSAgICB9Ci0gICAgOwotCi1wYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIKLSAg
ICA6IHR5cGVfc3BlY2lmaWVyIHsKLSAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3
IFRUeXBlKCQxKSB9OwotICAgICAgICAkJC5wYXJhbSA9IHBhcmFtOwotICAgIH0KLSAgICA7Ci0K
LWluaXRfZGVjbGFyYXRvcl9saXN0Ci0gICAgOiBzaW5nbGVfZGVjbGFyYXRpb24gewotICAgICAg
ICAkJCA9ICQxOwotICAgIH0KLSAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIGlkZW50
aWZpZXIgewotICAgICAgICBpZiAoJDEudHlwZS50eXBlID09IEVidEludmFyaWFudCAmJiAhJDMu
c3ltYm9sKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMywgInVuZGVj
bGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCAkMy5zdHJpbmctPmNfc3Ry
KCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJv
bCgwLCAqJDMuc3RyaW5nLCBUVHlwZSgkMS50eXBlKSwgQDMpOwotICAgICAgICAkJC5pbnRlcm1B
Z2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1O
b2RlLCBzeW1ib2wsIEAzKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RR
dWFsaWZpZXJFcnJvckNoZWNrKEAzLCAkJC50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjayhA
MywgKiQzLnN0cmluZywgJCQudHlwZSwgZmFsc2UpKQotICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotCi0gICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwotICAgICAgICBpZiAo
Y29udGV4dC0+bm9uSW5pdEVycm9yQ2hlY2soQDMsICokMy5zdHJpbmcsICQkLnR5cGUsIHZhcmlh
YmxlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgaWYgKHN5bWJv
bCAmJiB2YXJpYWJsZSkKLSAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUtPmdldFVu
aXF1ZUlkKCkpOwotICAgIH0KLSAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIGlkZW50
aWZpZXIgTEVGVF9CUkFDS0VUIFJJR0hUX0JSQUNLRVQgewotICAgICAgICBpZiAoY29udGV4dC0+
c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhAMywgJDEudHlwZSkpCi0gICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9y
Q2hlY2soQDMsICokMy5zdHJpbmcsICQxLnR5cGUsIHRydWUpKQotICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotCi0gICAgICAgICQkID0gJDE7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQt
PmFycmF5VHlwZUVycm9yQ2hlY2soQDQsICQxLnR5cGUpIHx8IGNvbnRleHQtPmFycmF5UXVhbGlm
aWVyRXJyb3JDaGVjayhANCwgJDEudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgJDEudHlwZS5zZXRBcnJheSh0cnVlKTsK
LSAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGU7Ci0gICAgICAgICAgICBpZiAoY29udGV4
dC0+YXJyYXlFcnJvckNoZWNrKEA0LCAqJDMuc3RyaW5nLCAkMS50eXBlLCB2YXJpYWJsZSkpCi0g
ICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgfQotICAg
IHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgaWRlbnRpZmllciBMRUZUX0JSQUNLRVQgY29u
c3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0
cnVjdFF1YWxpZmllckVycm9yQ2hlY2soQDMsICQxLnR5cGUpKQotICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNo
ZWNrKEAzLCAqJDMuc3RyaW5nLCAkMS50eXBlLCB0cnVlKSkKLSAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLQotICAgICAgICAkJCA9ICQxOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5h
cnJheVR5cGVFcnJvckNoZWNrKEA0LCAkMS50eXBlKSB8fCBjb250ZXh0LT5hcnJheVF1YWxpZmll
ckVycm9yQ2hlY2soQDQsICQxLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGludCBzaXplOwotICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soQDQsICQ1LCBzaXplKSkKLSAgICAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkMS50eXBlLnNldEFycmF5KHRy
dWUsIHNpemUpOwotICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7Ci0gICAgICAg
ICAgICBpZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKEA0LCAqJDMuc3RyaW5nLCAkMS50eXBl
LCB2YXJpYWJsZSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAg
ICAgICAgVFR5cGUgdHlwZSA9IFRUeXBlKCQxLnR5cGUpOwotICAgICAgICAgICAgdHlwZS5zZXRB
cnJheVNpemUoc2l6ZSk7Ci0gICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1Ob2RlLCBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlID8gdmFyaWFibGUtPmdldFVuaXF1ZUlkKCkgOiAw
LCAqJDMuc3RyaW5nLCB0eXBlLCBAMyksIEAzKTsKLSAgICAgICAgfQotICAgIH0KLSAgICB8IGlu
aXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIGlkZW50aWZpZXIgRVFVQUwgaW5pdGlhbGl6ZXIgewot
ICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhAMywgJDEudHlw
ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgJCQgPSAkMTsK
LQotICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKLSAgICAgICAgaWYgKCFjb250ZXh0
LT5leGVjdXRlSW5pdGlhbGl6ZXIoQDMsICokMy5zdHJpbmcsICQxLnR5cGUsICQ1LCBpbnRlcm1O
b2RlKSkgewotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIGJ1aWxkIHRoZSBpbnRlcm1l
ZGlhdGUgcmVwcmVzZW50YXRpb24KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBpZiAoaW50
ZXJtTm9kZSkKLSAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJtTm9kZSwgaW50ZXJtTm9kZSwgQDQpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9ICQxLmludGVy
bUFnZ3JlZ2F0ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgOwotCi1zaW5nbGVfZGVjbGFyYXRpb24KLSAgICA6IGZ1bGx5X3NwZWNpZmllZF90
eXBlIHsKLSAgICAgICAgJCQudHlwZSA9ICQxOwotICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkU3ltYm9sKDAsICIiLCBUVHlwZSgkMSksIEAxKSwgQDEpOwotICAgIH0KLSAgICB8IGZ1
bGx5X3NwZWNpZmllZF90eXBlIGlkZW50aWZpZXIgewotICAgICAgICBUSW50ZXJtU3ltYm9sKiBz
eW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICokMi5zdHJpbmcsIFRU
eXBlKCQxKSwgQDIpOwotICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsIEAyKTsKLSAgICAgICAgCi0gICAgICAgIGlm
IChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAyLCAkJC50eXBlKSkKLSAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5p
dENvbnN0RXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZywgJCQudHlwZSwgZmFsc2UpKQotICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAkJC50
eXBlID0gJDE7Ci0KLSAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7Ci0gICAgICAgIGlm
IChjb250ZXh0LT5ub25Jbml0RXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZywgJCQudHlwZSwgdmFy
aWFibGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBpZiAodmFy
aWFibGUgJiYgc3ltYm9sKQotICAgICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0
VW5pcXVlSWQoKSk7Ci0gICAgfQotICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUgaWRlbnRpZmll
ciBMRUZUX0JSQUNLRVQgUklHSFRfQlJBQ0tFVCB7Ci0gICAgICAgIGNvbnRleHQtPmVycm9yKEAy
LCAidW5zaXplZCBhcnJheSBkZWNsYXJhdGlvbnMgbm90IHN1cHBvcnRlZCIsICQyLnN0cmluZy0+
Y19zdHIoKSk7Ci0gICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBUSW50ZXJt
U3ltYm9sKiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICokMi5z
dHJpbmcsIFRUeXBlKCQxKSwgQDIpOwotICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsIEAyKTsKLSAgICAgICAgJCQu
dHlwZSA9ICQxOwotICAgIH0KLSAgICB8IGZ1bGx5X3NwZWNpZmllZF90eXBlIGlkZW50aWZpZXIg
TEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7Ci0gICAgICAg
IFRUeXBlIHR5cGUgPSBUVHlwZSgkMSk7Ci0gICAgICAgIGludCBzaXplOwotICAgICAgICBpZiAo
Y29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjayhAMiwgJDQsIHNpemUpKQotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB0eXBlLnNldEFycmF5U2l6ZShzaXplKTsKLSAg
ICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5
bWJvbCgwLCAqJDIuc3RyaW5nLCB0eXBlLCBAMik7Ci0gICAgICAgICQkLmludGVybUFnZ3JlZ2F0
ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgQDIpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soQDIs
ICQxKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoY29u
dGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZywgJDEsIHRydWUpKQot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgICQkLnR5cGUgPSAkMTsK
LQotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjayhAMywgJDEpIHx8IGNv
bnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayhAMywgJDEpKQotICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGludCBzaXplOwot
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soQDMsICQ0LCBzaXpl
KSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgICAgICQx
LnNldEFycmF5KHRydWUsIHNpemUpOwotICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9
IDA7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKEAzLCAqJDIuc3Ry
aW5nLCAkMSwgdmFyaWFibGUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCi0gICAgICAgICAgICAgICAgc3lt
Ym9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBpZGVudGlmaWVyIEVRVUFMIGluaXRpYWxpemVyIHsK
LSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soQDIsICQxKSkK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICAkJC50eXBlID0gJDE7
Ci0KLSAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7Ci0gICAgICAgIGlmICghY29udGV4
dC0+ZXhlY3V0ZUluaXRpYWxpemVyKEAyLCAqJDIuc3RyaW5nLCAkMSwgJDQsIGludGVybU5vZGUp
KSB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIEJ1aWxkIGludGVybWVkaWF0ZSByZXByZXNlbnRh
dGlvbgotICAgICAgICAvLwotICAgICAgICAgICAgaWYoaW50ZXJtTm9kZSkKLSAgICAgICAgICAg
ICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3Jl
Z2F0ZShpbnRlcm1Ob2RlLCBAMyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
JCQuaW50ZXJtQWdncmVnYXRlID0gMDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgfCBJTlZBUklBTlQgSURFTlRJRklFUiB7Ci0gICAgICAgIFZF
UlRFWF9PTkxZKCJpbnZhcmlhbnQgZGVjbGFyYXRpb24iLCBAMSk7Ci0gICAgICAgIGlmIChjb250
ZXh0LT5nbG9iYWxFcnJvckNoZWNrKEAxLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCksICJpbnZhcmlhbnQgdmFyeWluZyIpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotICAgICAgICAkJC50eXBlLnNldEJhc2ljKEVidEludmFyaWFudCwgRXZxSW52YXJpYW50
VmFyeWluZ091dCwgQDIpOwotICAgICAgICBpZiAoISQyLnN5bWJvbCkKLSAgICAgICAgewotICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFy
ZWQgYXMgaW52YXJpYW50IiwgJDIuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVn
YXRlID0gMDsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAg
IFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wo
MCwgKiQyLnN0cmluZywgVFR5cGUoJCQudHlwZSksIEAyKTsKLSAgICAgICAgICAgICQkLmludGVy
bUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwg
QDIpOwotICAgICAgICB9Ci0gICAgfQotICAgIDsKLQotZnVsbHlfc3BlY2lmaWVkX3R5cGUKLSAg
ICA6IHR5cGVfc3BlY2lmaWVyIHsKLSAgICAgICAgJCQgPSAkMTsKLQotICAgICAgICBpZiAoJDEu
YXJyYXkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAibm90IHN1cHBvcnRlZCIs
ICJmaXJzdC1jbGFzcyBhcnJheSIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICAgICAgJDEuc2V0QXJyYXkoZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQotICAgIHwg
dHlwZV9xdWFsaWZpZXIgdHlwZV9zcGVjaWZpZXIgIHsKLSAgICAgICAgaWYgKCQyLmFycmF5KSB7
Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3Qt
Y2xhc3MgYXJyYXkiKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
ICAgICQyLnNldEFycmF5KGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgkMS5xdWFs
aWZpZXIgPT0gRXZxQXR0cmlidXRlICYmCi0gICAgICAgICAgICAoJDIudHlwZSA9PSBFYnRCb29s
IHx8ICQyLnR5cGUgPT0gRWJ0SW50KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIs
ICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVy
KSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKCgkMS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8ICQxLnF1YWxpZmllciA9PSBFdnFW
YXJ5aW5nT3V0KSAmJgotICAgICAgICAgICAgKCQyLnR5cGUgPT0gRWJ0Qm9vbCB8fCAkMi50eXBl
ID09IEVidEludCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAiY2Fubm90IGJl
IGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikpOwotICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgICQkID0gJDI7Ci0g
ICAgICAgICQkLnF1YWxpZmllciA9ICQxLnF1YWxpZmllcjsKLSAgICB9Ci0gICAgOwotCi10eXBl
X3F1YWxpZmllcgotICAgIDogQ09OU1RfUVVBTCB7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidFZv
aWQsIEV2cUNvbnN0LCBAMSk7Ci0gICAgfQotICAgIHwgQVRUUklCVVRFIHsKLSAgICAgICAgVkVS
VEVYX09OTFkoImF0dHJpYnV0ZSIsIEAxKTsKLSAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVy
cm9yQ2hlY2soQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImF0dHJp
YnV0ZSIpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJC5zZXRC
YXNpYyhFYnRWb2lkLCBFdnFBdHRyaWJ1dGUsIEAxKTsKLSAgICB9Ci0gICAgfCBWQVJZSU5HIHsK
LSAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soQDEsIGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgInZhcnlpbmciKSkKLSAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfVkVSVEVY
X1NIQURFUikKLSAgICAgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cVZhcnlpbmdPdXQs
IEAxKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZx
VmFyeWluZ0luLCBAMSk7Ci0gICAgfQotICAgIHwgSU5WQVJJQU5UIFZBUllJTkcgewotICAgICAg
ICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjayhAMSwgY29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpLCAiaW52YXJpYW50IHZhcnlpbmciKSkKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfVkVS
VEVYX1NIQURFUikKLSAgICAgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFyaWFu
dFZhcnlpbmdPdXQsIEAxKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgJCQuc2V0QmFzaWMo
RWJ0Vm9pZCwgRXZxSW52YXJpYW50VmFyeWluZ0luLCBAMSk7Ci0gICAgfQotICAgIHwgVU5JRk9S
TSB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKEAxLCBjb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ1bmlmb3JtIikpCi0gICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cVVuaWZvcm0s
IEAxKTsKLSAgICB9Ci0gICAgOwotCi10eXBlX3NwZWNpZmllcgotICAgIDogdHlwZV9zcGVjaWZp
ZXJfbm9fcHJlYyB7Ci0gICAgICAgICQkID0gJDE7Ci0KLSAgICAgICAgaWYgKCQkLnByZWNpc2lv
biA9PSBFYnBVbmRlZmluZWQpIHsKLSAgICAgICAgICAgICQkLnByZWNpc2lvbiA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmdldERlZmF1bHRQcmVjaXNpb24oJDEudHlwZSk7Ci0gICAgICAgICAgICBp
ZiAoY29udGV4dC0+cHJlY2lzaW9uRXJyb3JDaGVjayhAMSwgJCQucHJlY2lzaW9uLCAkMS50eXBl
KSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLSAgICB8IHByZWNpc2lvbl9xdWFsaWZpZXIgdHlwZV9zcGVjaWZp
ZXJfbm9fcHJlYyB7Ci0gICAgICAgICQkID0gJDI7Ci0gICAgICAgICQkLnByZWNpc2lvbiA9ICQx
OwotICAgIH0KLSAgICA7Ci0KLXByZWNpc2lvbl9xdWFsaWZpZXIKLSAgICA6IEhJR0hfUFJFQ0lT
SU9OIHsKLSAgICAgICAgJCQgPSBFYnBIaWdoOwotICAgIH0KLSAgICB8IE1FRElVTV9QUkVDSVNJ
T04gewotICAgICAgICAkJCA9IEVicE1lZGl1bTsKLSAgICB9Ci0gICAgfCBMT1dfUFJFQ0lTSU9O
ICB7Ci0gICAgICAgICQkID0gRWJwTG93OwotICAgIH0KLSAgICA7Ci0KLXR5cGVfc3BlY2lmaWVy
X25vX3ByZWMKLSAgICA6IHR5cGVfc3BlY2lmaWVyX25vbmFycmF5IHsKLSAgICAgICAgJCQgPSAk
MTsKLSAgICB9Ci0gICAgfCB0eXBlX3NwZWNpZmllcl9ub25hcnJheSBMRUZUX0JSQUNLRVQgY29u
c3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKLSAgICAgICAgJCQgPSAkMTsKLQotICAg
ICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjayhAMiwgJDEpKQotICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGludCBz
aXplOwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soQDIsICQz
LCBzaXplKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAg
ICAkJC5zZXRBcnJheSh0cnVlLCBzaXplKTsKLSAgICAgICAgfQotICAgIH0KLSAgICA7Ci0KLXR5
cGVfc3BlY2lmaWVyX25vbmFycmF5Ci0gICAgOiBWT0lEX1RZUEUgewotICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIHF1YWwsIEAx
KTsKLSAgICB9Ci0gICAgfCBGTE9BVF9UWVBFIHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgQDEpOwotICAgIH0K
LSAgICB8IElOVF9UWVBFIHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAg
ICAgICAkJC5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsIEAxKTsKLSAgICB9Ci0gICAgfCBCT09MX1RZ
UEUgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICQkLnNldEJh
c2ljKEVidEJvb2wsIHF1YWwsIEAxKTsKLSAgICB9Ci0gICAgfCBWRUMyIHsKLSAgICAgICAgVFF1
YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZx
R2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVh
bCwgQDEpOwotICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMik7Ci0gICAgfQotICAgIHwgVkVDMyB7
Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgJCQuc2V0QmFzaWMo
RWJ0RmxvYXQsIHF1YWwsIEAxKTsKLSAgICAgICAgJCQuc2V0QWdncmVnYXRlKDMpOwotICAgIH0K
LSAgICB8IFZFQzQgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAg
ICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7Ci0gICAgICAgICQkLnNldEFnZ3JlZ2F0
ZSg0KTsKLSAgICB9Ci0gICAgfCBCVkVDMiB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKLSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgQDEpOwotICAgICAgICAk
JC5zZXRBZ2dyZWdhdGUoMik7Ci0gICAgfQotICAgIHwgQlZFQzMgewotICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidEJvb2wsIHF1YWwsIEAx
KTsKLSAgICAgICAgJCQuc2V0QWdncmVnYXRlKDMpOwotICAgIH0KLSAgICB8IEJWRUM0IHsKLSAg
ICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRC
b29sLCBxdWFsLCBAMSk7Ci0gICAgICAgICQkLnNldEFnZ3JlZ2F0ZSg0KTsKLSAgICB9Ci0gICAg
fCBJVkVDMiB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgJCQu
c2V0QmFzaWMoRWJ0SW50LCBxdWFsLCBAMSk7Ci0gICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgyKTsK
LSAgICB9Ci0gICAgfCBJVkVDMyB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
LSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCBAMSk7Ci0gICAgICAgICQkLnNldEFn
Z3JlZ2F0ZSgzKTsKLSAgICB9Ci0gICAgfCBJVkVDNCB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKLSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCBAMSk7Ci0gICAg
ICAgICQkLnNldEFnZ3JlZ2F0ZSg0KTsKLSAgICB9Ci0gICAgfCBNQVRSSVgyIHsKLSAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwg
cXVhbCwgQDEpOwotICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMiwgdHJ1ZSk7Ci0gICAgfQotICAg
IHwgTUFUUklYMyB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAg
JCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsKLSAgICAgICAgJCQuc2V0QWdncmVnYXRl
KDMsIHRydWUpOwotICAgIH0KLSAgICB8IE1BVFJJWDQgewotICAgICAgICBUUXVhbGlmaWVyIHF1
YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7Ci0g
ICAgICAgICQkLnNldEFnZ3JlZ2F0ZSg0LCB0cnVlKTsKLSAgICB9Ci0gICAgfCBTQU1QTEVSMkQg
ewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2Jh
bExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICQkLnNldEJhc2lj
KEVidFNhbXBsZXIyRCwgcXVhbCwgQDEpOwotICAgIH0KLSAgICB8IFNBTVBMRVJDVUJFIHsKLSAg
ICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRT
YW1wbGVyQ3ViZSwgcXVhbCwgQDEpOwotICAgIH0KLSAgICB8IFNBTVBMRVJfRVhURVJOQUxfT0VT
IHsKLSAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0V4dGVuc2lvbigiR0xfT0VTX0VHTF9p
bWFnZV9leHRlcm5hbCIpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgInVuc3Vw
cG9ydGVkIHR5cGUiLCAic2FtcGxlckV4dGVybmFsT0VTIik7Ci0gICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4
dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5
OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyRXh0ZXJuYWxPRVMsIHF1YWwsIEAxKTsK
LSAgICB9Ci0gICAgfCBTQU1QTEVSMkRSRUNUIHsKLSAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBw
b3J0c0V4dGVuc2lvbigiR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlIikpIHsKLSAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKEAxLCAidW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyMkRSZWN0Iik7
Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgVFF1
YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZx
R2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyMkRS
ZWN0LCBxdWFsLCBAMSk7Ci0gICAgfQotICAgIHwgc3RydWN0X3NwZWNpZmllciB7Ci0gICAgICAg
ICQkID0gJDE7Ci0gICAgICAgICQkLnF1YWxpZmllciA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0
R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICB9Ci0gICAgfCBU
WVBFX05BTUUgewotICAgICAgICAvLwotICAgICAgICAvLyBUaGlzIGlzIGZvciB1c2VyIGRlZmlu
ZWQgdHlwZSBuYW1lcy4gIFRoZSBsZXhpY2FsIHBoYXNlIGxvb2tlZCB1cCB0aGUKLSAgICAgICAg
Ly8gdHlwZS4KLSAgICAgICAgLy8KLSAgICAgICAgVFR5cGUmIHN0cnVjdHVyZSA9IHN0YXRpY19j
YXN0PFRWYXJpYWJsZSo+KCQxLnN5bWJvbCktPmdldFR5cGUoKTsKLSAgICAgICAgVFF1YWxpZmll
ciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFs
IDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRTdHJ1Y3QsIHF1YWwsIEAx
KTsKLSAgICAgICAgJCQudXNlckRlZiA9ICZzdHJ1Y3R1cmU7Ci0gICAgfQotICAgIDsKLQotc3Ry
dWN0X3NwZWNpZmllcgotICAgIDogU1RSVUNUIGlkZW50aWZpZXIgTEVGVF9CUkFDRSB7IGlmIChj
b250ZXh0LT5lbnRlclN0cnVjdERlY2xhcmF0aW9uKEAyLCAqJDIuc3RyaW5nKSkgY29udGV4dC0+
cmVjb3ZlcigpOyB9IHN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IFJJR0hUX0JSQUNFIHsKLSAgICAg
ICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZykpCi0gICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgVFR5cGUqIHN0cnVjdHVyZSA9
IG5ldyBUVHlwZShuZXcgVFN0cnVjdHVyZSgkMi5zdHJpbmcsICQ1KSk7Ci0gICAgICAgIFRWYXJp
YWJsZSogdXNlclR5cGVEZWYgPSBuZXcgVFZhcmlhYmxlKCQyLnN0cmluZywgKnN0cnVjdHVyZSwg
dHJ1ZSk7Ci0gICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgqdXNlclR5
cGVEZWYpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgInJlZGVmaW5pdGlvbiIs
ICQyLnN0cmluZy0+Y19zdHIoKSwgInN0cnVjdCIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgICQkLnNldEJhc2ljKEVidFN0cnVjdCwgRXZxVGVt
cG9yYXJ5LCBAMSk7Ci0gICAgICAgICQkLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7Ci0gICAgICAgIGNv
bnRleHQtPmV4aXRTdHJ1Y3REZWNsYXJhdGlvbigpOwotICAgIH0KLSAgICB8IFNUUlVDVCBMRUZU
X0JSQUNFIHsgaWYgKGNvbnRleHQtPmVudGVyU3RydWN0RGVjbGFyYXRpb24oQDIsICokMi5zdHJp
bmcpKSBjb250ZXh0LT5yZWNvdmVyKCk7IH0gc3RydWN0X2RlY2xhcmF0aW9uX2xpc3QgUklHSFRf
QlJBQ0UgewotICAgICAgICBUVHlwZSogc3RydWN0dXJlID0gbmV3IFRUeXBlKG5ldyBUU3RydWN0
dXJlKE5ld1Bvb2xUU3RyaW5nKCIiKSwgJDQpKTsKLSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U3Ry
dWN0LCBFdnFUZW1wb3JhcnksIEAxKTsKLSAgICAgICAgJCQudXNlckRlZiA9IHN0cnVjdHVyZTsK
LSAgICAgICAgY29udGV4dC0+ZXhpdFN0cnVjdERlY2xhcmF0aW9uKCk7Ci0gICAgfQotICAgIDsK
LQotc3RydWN0X2RlY2xhcmF0aW9uX2xpc3QKLSAgICA6IHN0cnVjdF9kZWNsYXJhdGlvbiB7Ci0g
ICAgICAgICQkID0gJDE7Ci0gICAgfQotICAgIHwgc3RydWN0X2RlY2xhcmF0aW9uX2xpc3Qgc3Ry
dWN0X2RlY2xhcmF0aW9uIHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCAkMi0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIFRGaWVsZCogZmllbGQg
PSAoKiQyKVtpXTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgJCQtPnNpemUo
KTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCgqJCQpW2pdLT5uYW1lKCkgPT0gZmllbGQt
Pm5hbWUoKSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgImR1cGxp
Y2F0ZSBmaWVsZCBuYW1lIGluIHN0cnVjdHVyZToiLCAic3RydWN0IiwgZmllbGQtPm5hbWUoKS5j
X3N0cigpKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICQkLT5wdXNoX2JhY2soZmll
bGQpOwotICAgICAgICB9Ci0gICAgfQotICAgIDsKLQotc3RydWN0X2RlY2xhcmF0aW9uCi0gICAg
OiB0eXBlX3NwZWNpZmllciBzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0IFNFTUlDT0xPTiB7Ci0gICAg
ICAgICQkID0gJDI7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPnZvaWRFcnJvckNoZWNrKEAxLCAo
KiQyKVswXS0+bmFtZSgpLCAkMSkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgfQotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8ICQkLT5zaXpl
KCk7ICsraSkgewotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIENhcmVmdWwgbm90IHRv
IHJlcGxhY2UgYWxyZWFkeSBrbm93biBhc3BlY3RzIG9mIHR5cGUsIGxpa2UgYXJyYXktbmVzcwot
ICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIFRUeXBlKiB0eXBlID0gKCokJClbaV0tPnR5cGUo
KTsKLSAgICAgICAgICAgIHR5cGUtPnNldEJhc2ljVHlwZSgkMS50eXBlKTsKLSAgICAgICAgICAg
IHR5cGUtPnNldE5vbWluYWxTaXplKCQxLnNpemUpOwotICAgICAgICAgICAgdHlwZS0+c2V0TWF0
cml4KCQxLm1hdHJpeCk7Ci0gICAgICAgICAgICB0eXBlLT5zZXRQcmVjaXNpb24oJDEucHJlY2lz
aW9uKTsKLQotICAgICAgICAgICAgLy8gZG9uJ3QgYWxsb3cgYXJyYXlzIG9mIGFycmF5cwotICAg
ICAgICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkgewotICAgICAgICAgICAgICAgIGlmIChjb250
ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKEAxLCAkMSkpCi0gICAgICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgkMS5hcnJh
eSkKLSAgICAgICAgICAgICAgICB0eXBlLT5zZXRBcnJheVNpemUoJDEuYXJyYXlTaXplKTsKLSAg
ICAgICAgICAgIGlmICgkMS51c2VyRGVmKQotICAgICAgICAgICAgICAgIHR5cGUtPnNldFN0cnVj
dCgkMS51c2VyRGVmLT5nZXRTdHJ1Y3QoKSk7Ci0KLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5z
dHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayhAMSwgKigqJCQpW2ldKSkKLSAgICAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgOwotCi1zdHJ1Y3RfZGVj
bGFyYXRvcl9saXN0Ci0gICAgOiBzdHJ1Y3RfZGVjbGFyYXRvciB7Ci0gICAgICAgICQkID0gTmV3
UG9vbFRGaWVsZExpc3QoKTsKLSAgICAgICAgJCQtPnB1c2hfYmFjaygkMSk7Ci0gICAgfQotICAg
IHwgc3RydWN0X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBzdHJ1Y3RfZGVjbGFyYXRvciB7Ci0gICAg
ICAgICQkLT5wdXNoX2JhY2soJDMpOwotICAgIH0KLSAgICA7Ci0KLXN0cnVjdF9kZWNsYXJhdG9y
Ci0gICAgOiBpZGVudGlmaWVyIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JD
aGVjayhAMSwgKiQxLnN0cmluZykpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0K
LSAgICAgICAgVFR5cGUqIHR5cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsK
LSAgICAgICAgJCQgPSBuZXcgVEZpZWxkKHR5cGUsICQxLnN0cmluZyk7Ci0gICAgfQotICAgIHwg
aWRlbnRpZmllciBMRUZUX0JSQUNLRVQgY29uc3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VU
IHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjayhAMSwgKiQxLnN0cmlu
ZykpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgVFR5cGUqIHR5
cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKLSAgICAgICAgaW50IHNpemUg
PSAwOwotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjayhAMywgJDMsIHNp
emUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB0eXBlLT5zZXRB
cnJheVNpemUoc2l6ZSk7Ci0KLSAgICAgICAgJCQgPSBuZXcgVEZpZWxkKHR5cGUsICQxLnN0cmlu
Zyk7Ci0gICAgfQotICAgIDsKLQotaW5pdGlhbGl6ZXIKLSAgICA6IGFzc2lnbm1lbnRfZXhwcmVz
c2lvbiB7ICQkID0gJDE7IH0KLSAgICA7Ci0KLWRlY2xhcmF0aW9uX3N0YXRlbWVudAotICAgIDog
ZGVjbGFyYXRpb24geyAkJCA9ICQxOyB9Ci0gICAgOwotCi1zdGF0ZW1lbnQKLSAgICA6IGNvbXBv
dW5kX3N0YXRlbWVudCAgeyAkJCA9ICQxOyB9Ci0gICAgfCBzaW1wbGVfc3RhdGVtZW50ICAgIHsg
JCQgPSAkMTsgfQotICAgIDsKLQotLy8gR3JhbW1hciBOb3RlOiAgTm8gbGFiZWxlZCBzdGF0ZW1l
bnRzOyAnZ290bycgaXMgbm90IHN1cHBvcnRlZC4KLQotc2ltcGxlX3N0YXRlbWVudAotICAgIDog
ZGVjbGFyYXRpb25fc3RhdGVtZW50IHsgJCQgPSAkMTsgfQotICAgIHwgZXhwcmVzc2lvbl9zdGF0
ZW1lbnQgIHsgJCQgPSAkMTsgfQotICAgIHwgc2VsZWN0aW9uX3N0YXRlbWVudCAgIHsgJCQgPSAk
MTsgfQotICAgIHwgaXRlcmF0aW9uX3N0YXRlbWVudCAgIHsgJCQgPSAkMTsgfQotICAgIHwganVt
cF9zdGF0ZW1lbnQgICAgICAgIHsgJCQgPSAkMTsgfQotICAgIDsKLQotY29tcG91bmRfc3RhdGVt
ZW50Ci0gICAgOiBMRUZUX0JSQUNFIFJJR0hUX0JSQUNFIHsgJCQgPSAwOyB9Ci0gICAgfCBMRUZU
X0JSQUNFIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyB9IHN0YXRlbWVudF9saXN0IHsg
Y29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7IH0gUklHSFRfQlJBQ0UgewotICAgICAgICBpZiAo
JDMgIT0gMCkgewotICAgICAgICAgICAgJDMtPnNldE9wKEVPcFNlcXVlbmNlKTsKLSAgICAgICAg
ICAgICQzLT5zZXRMaW5lKEAkKTsKLSAgICAgICAgfQotICAgICAgICAkJCA9ICQzOwotICAgIH0K
LSAgICA7Ci0KLXN0YXRlbWVudF9ub19uZXdfc2NvcGUKLSAgICA6IGNvbXBvdW5kX3N0YXRlbWVu
dF9ub19uZXdfc2NvcGUgeyAkJCA9ICQxOyB9Ci0gICAgfCBzaW1wbGVfc3RhdGVtZW50ICAgICAg
ICAgICAgICAgIHsgJCQgPSAkMTsgfQotICAgIDsKLQotc3RhdGVtZW50X3dpdGhfc2NvcGUKLSAg
ICA6IHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyB9IGNvbXBvdW5kX3N0YXRlbWVudF9u
b19uZXdfc2NvcGUgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgJCQgPSAkMjsgfQotICAg
IHwgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0gc2ltcGxlX3N0YXRlbWVudCAgICAg
ICAgICAgICAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOyAkJCA9ICQyOyB9Ci0gICAg
OwotCi1jb21wb3VuZF9zdGF0ZW1lbnRfbm9fbmV3X3Njb3BlCi0gICAgLy8gU3RhdGVtZW50IHRo
YXQgZG9lc24ndCBjcmVhdGUgYSBuZXcgc2NvcGUsIGZvciBzZWxlY3Rpb25fc3RhdGVtZW50LCBp
dGVyYXRpb25fc3RhdGVtZW50Ci0gICAgOiBMRUZUX0JSQUNFIFJJR0hUX0JSQUNFIHsKLSAgICAg
ICAgJCQgPSAwOwotICAgIH0KLSAgICB8IExFRlRfQlJBQ0Ugc3RhdGVtZW50X2xpc3QgUklHSFRf
QlJBQ0UgewotICAgICAgICBpZiAoJDIpIHsKLSAgICAgICAgICAgICQyLT5zZXRPcChFT3BTZXF1
ZW5jZSk7Ci0gICAgICAgICAgICAkMi0+c2V0TGluZShAJCk7Ci0gICAgICAgIH0KLSAgICAgICAg
JCQgPSAkMjsKLSAgICB9Ci0gICAgOwotCi1zdGF0ZW1lbnRfbGlzdAotICAgIDogc3RhdGVtZW50
IHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZSgkMSwg
QCQpOwotICAgIH0KLSAgICB8IHN0YXRlbWVudF9saXN0IHN0YXRlbWVudCB7Ci0gICAgICAgICQk
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEsICQyLCBAJCk7Ci0gICAg
fQotICAgIDsKLQotZXhwcmVzc2lvbl9zdGF0ZW1lbnQKLSAgICA6IFNFTUlDT0xPTiAgeyAkJCA9
IDA7IH0KLSAgICB8IGV4cHJlc3Npb24gU0VNSUNPTE9OICB7ICQkID0gc3RhdGljX2Nhc3Q8VElu
dGVybU5vZGUqPigkMSk7IH0KLSAgICA7Ci0KLXNlbGVjdGlvbl9zdGF0ZW1lbnQKLSAgICA6IElG
IExFRlRfUEFSRU4gZXhwcmVzc2lvbiBSSUdIVF9QQVJFTiBzZWxlY3Rpb25fcmVzdF9zdGF0ZW1l
bnQgewotICAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2soQDEsICQzKSkKLSAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkU2VsZWN0aW9uKCQzLCAkNSwgQDEpOwotICAgIH0KLSAgICA7Ci0KLXNlbGVjdGlv
bl9yZXN0X3N0YXRlbWVudAotICAgIDogc3RhdGVtZW50X3dpdGhfc2NvcGUgRUxTRSBzdGF0ZW1l
bnRfd2l0aF9zY29wZSB7Ci0gICAgICAgICQkLm5vZGUxID0gJDE7Ci0gICAgICAgICQkLm5vZGUy
ID0gJDM7Ci0gICAgfQotICAgIHwgc3RhdGVtZW50X3dpdGhfc2NvcGUgewotICAgICAgICAkJC5u
b2RlMSA9ICQxOwotICAgICAgICAkJC5ub2RlMiA9IDA7Ci0gICAgfQotICAgIDsKLQotLy8gR3Jh
bW1hciBOb3RlOiAgTm8gJ3N3aXRjaCcuICBTd2l0Y2ggc3RhdGVtZW50cyBub3Qgc3VwcG9ydGVk
LgotCi1jb25kaXRpb24KLSAgICAvLyBJbiAxOTk2IGMrKyBkcmFmdCwgY29uZGl0aW9ucyBjYW4g
aW5jbHVkZSBzaW5nbGUgZGVjbGFyYXRpb25zCi0gICAgOiBleHByZXNzaW9uIHsKLSAgICAgICAg
JCQgPSAkMTsKLSAgICAgICAgaWYgKGNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCQxLT5nZXRMaW5l
KCksICQxKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICB9Ci0gICAgfCBm
dWxseV9zcGVjaWZpZWRfdHlwZSBpZGVudGlmaWVyIEVRVUFMIGluaXRpYWxpemVyIHsKLSAgICAg
ICAgVEludGVybU5vZGUqIGludGVybU5vZGU7Ci0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RR
dWFsaWZpZXJFcnJvckNoZWNrKEAyLCAkMSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVjayhAMiwgJDEpKQotICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlmICghY29udGV4dC0+ZXhlY3V0
ZUluaXRpYWxpemVyKEAyLCAqJDIuc3RyaW5nLCAkMSwgJDQsIGludGVybU5vZGUpKQotICAgICAg
ICAgICAgJCQgPSAkNDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgICAgICAkJCA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgOwotCi1p
dGVyYXRpb25fc3RhdGVtZW50Ci0gICAgOiBXSElMRSBMRUZUX1BBUkVOIHsgY29udGV4dC0+c3lt
Ym9sVGFibGUucHVzaCgpOyArK2NvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0gY29uZGl0aW9u
IFJJR0hUX1BBUkVOIHN0YXRlbWVudF9ub19uZXdfc2NvcGUgewotICAgICAgICBjb250ZXh0LT5z
eW1ib2xUYWJsZS5wb3AoKTsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
TG9vcChFTG9vcFdoaWxlLCAwLCAkNCwgMCwgJDYsIEAxKTsKLSAgICAgICAgLS1jb250ZXh0LT5s
b29wTmVzdGluZ0xldmVsOwotICAgIH0KLSAgICB8IERPIHsgKytjb250ZXh0LT5sb29wTmVzdGlu
Z0xldmVsOyB9IHN0YXRlbWVudF93aXRoX3Njb3BlIFdISUxFIExFRlRfUEFSRU4gZXhwcmVzc2lv
biBSSUdIVF9QQVJFTiBTRU1JQ09MT04gewotICAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9y
Q2hlY2soQDgsICQ2KSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAg
ICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRMb29wKEVMb29wRG9XaGlsZSwgMCwgJDYs
IDAsICQzLCBANCk7Ci0gICAgICAgIC0tY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsKLSAgICB9
Ci0gICAgfCBGT1IgTEVGVF9QQVJFTiB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgKytj
b250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyB9IGZvcl9pbml0X3N0YXRlbWVudCBmb3JfcmVzdF9z
dGF0ZW1lbnQgUklHSFRfUEFSRU4gc3RhdGVtZW50X25vX25ld19zY29wZSB7Ci0gICAgICAgIGNv
bnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRMb29wKEVMb29wRm9yLCAkNCwgcmVpbnRlcnByZXRfY2FzdDxUSW50ZXJtVHlwZWQq
PigkNS5ub2RlMSksIHJlaW50ZXJwcmV0X2Nhc3Q8VEludGVybVR5cGVkKj4oJDUubm9kZTIpLCAk
NywgQDEpOwotICAgICAgICAtLWNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7Ci0gICAgfQotICAg
IDsKLQotZm9yX2luaXRfc3RhdGVtZW50Ci0gICAgOiBleHByZXNzaW9uX3N0YXRlbWVudCB7Ci0g
ICAgICAgICQkID0gJDE7Ci0gICAgfQotICAgIHwgZGVjbGFyYXRpb25fc3RhdGVtZW50IHsKLSAg
ICAgICAgJCQgPSAkMTsKLSAgICB9Ci0gICAgOwotCi1jb25kaXRpb25vcHQKLSAgICA6IGNvbmRp
dGlvbiB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgfQotICAgIHwgLyogTWF5IGJlIG51bGwgKi8g
ewotICAgICAgICAkJCA9IDA7Ci0gICAgfQotICAgIDsKLQotZm9yX3Jlc3Rfc3RhdGVtZW50Ci0g
ICAgOiBjb25kaXRpb25vcHQgU0VNSUNPTE9OIHsKLSAgICAgICAgJCQubm9kZTEgPSAkMTsKLSAg
ICAgICAgJCQubm9kZTIgPSAwOwotICAgIH0KLSAgICB8IGNvbmRpdGlvbm9wdCBTRU1JQ09MT04g
ZXhwcmVzc2lvbiAgewotICAgICAgICAkJC5ub2RlMSA9ICQxOwotICAgICAgICAkJC5ub2RlMiA9
ICQzOwotICAgIH0KLSAgICA7Ci0KLWp1bXBfc3RhdGVtZW50Ci0gICAgOiBDT05USU5VRSBTRU1J
Q09MT04gewotICAgICAgICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgImNvbnRpbnVlIHN0YXRlbWVudCBvbmx5IGFs
bG93ZWQgaW4gbG9vcHMiLCAiIik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVP
cENvbnRpbnVlLCBAMSk7Ci0gICAgfQotICAgIHwgQlJFQUsgU0VNSUNPTE9OIHsKLSAgICAgICAg
aWYgKGNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPD0gMCkgewotICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoQDEsICJicmVhayBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIp
OwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgICQk
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BCcmVhaywgQDEpOwotICAgIH0K
LSAgICB8IFJFVFVSTiBTRU1JQ09MT04gewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCBAMSk7Ci0gICAgICAgIGlmIChjb250ZXh0LT5jdXJy
ZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcihAMSwgIm5vbi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFs
dWUiLCAicmV0dXJuIik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgfCBSRVRVUk4gZXhwcmVzc2lvbiBTRU1JQ09MT04gewotICAgICAgICAk
JCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCAkMiwgQDEpOwot
ICAgICAgICBjb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IHRydWU7Ci0gICAgICAgIGlm
IChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lk
KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgInZvaWQgZnVuY3Rpb24gY2Fubm90
IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotICAgICAgICB9IGVsc2UgaWYgKCooY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZSkg
IT0gJDItPmdldFR5cGUoKSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJmdW5j
dGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6IiwgInJldHVybiIpOwotICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgfQotICAgIHwgRElTQ0FSRCBT
RU1JQ09MT04gewotICAgICAgICBGUkFHX09OTFkoImRpc2NhcmQiLCBAMSk7Ci0gICAgICAgICQk
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BLaWxsLCBAMSk7Ci0gICAgfQot
ICAgIDsKLQotLy8gR3JhbW1hciBOb3RlOiAgTm8gJ2dvdG8nLiAgR290b3MgYXJlIG5vdCBzdXBw
b3J0ZWQuCi0KLXRyYW5zbGF0aW9uX3VuaXQKLSAgICA6IGV4dGVybmFsX2RlY2xhcmF0aW9uIHsK
LSAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgY29udGV4dC0+dHJlZVJvb3QgPSAkJDsKLSAgICB9
Ci0gICAgfCB0cmFuc2xhdGlvbl91bml0IGV4dGVybmFsX2RlY2xhcmF0aW9uIHsKLSAgICAgICAg
JCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMSwgJDIsIEAkKTsKLSAg
ICAgICAgY29udGV4dC0+dHJlZVJvb3QgPSAkJDsKLSAgICB9Ci0gICAgOwotCi1leHRlcm5hbF9k
ZWNsYXJhdGlvbgotICAgIDogZnVuY3Rpb25fZGVmaW5pdGlvbiB7Ci0gICAgICAgICQkID0gJDE7
Ci0gICAgfQotICAgIHwgZGVjbGFyYXRpb24gewotICAgICAgICAkJCA9ICQxOwotICAgIH0KLSAg
ICA7Ci0KLWZ1bmN0aW9uX2RlZmluaXRpb24KLSAgICA6IGZ1bmN0aW9uX3Byb3RvdHlwZSB7Ci0g
ICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb24gPSAkMS5mdW5jdGlvbjsKLSAgICAgICAgCi0gICAg
ICAgIGNvbnN0IFRTeW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVp
bHRJbihmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAo
YnVpbHRJbikKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJidWls
dC1pbiBmdW5jdGlvbnMgY2Fubm90IGJlIHJlZGVmaW5lZCIsIGZ1bmN0aW9uLT5nZXROYW1lKCku
Y19zdHIoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRGdW5jdGlv
bio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoZnVuY3Rpb24tPmdldE1hbmdsZWROYW1lKCkp
KTsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gTm90ZTogICdwcmV2RGVjJyBjb3VsZCBiZSAnZnVu
Y3Rpb24nIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUgc2VlbiBmdW5jdGlvbgotICAg
ICAgICAvLyBhcyBpdCB3b3VsZCBoYXZlIGp1c3QgYmVlbiBwdXQgaW4gdGhlIHN5bWJvbCB0YWJs
ZS4gIE90aGVyd2lzZSwgd2UncmUgbG9va2luZyB1cAotICAgICAgICAvLyBhbiBlYXJsaWVyIG9j
Y3VyYW5jZS4KLSAgICAgICAgLy8KLSAgICAgICAgaWYgKHByZXZEZWMtPmlzRGVmaW5lZCgpKSB7
Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gVGhlbiB0aGlzIGZ1bmN0aW9uIGFscmVh
ZHkgaGFzIGEgYm9keS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBjb250ZXh0LT5lcnJv
cihAMSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9uLT5nZXROYW1lKCku
Y19zdHIoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcHJldkRlYy0+c2V0RGVmaW5lZCgpOwotCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFJh
aXNlIGVycm9yIG1lc3NhZ2UgaWYgbWFpbiBmdW5jdGlvbiB0YWtlcyBhbnkgcGFyYW1ldGVycyBv
ciByZXR1cm4gYW55dGhpbmcgb3RoZXIgdGhhbiB2b2lkCi0gICAgICAgIC8vCi0gICAgICAgIGlm
IChmdW5jdGlvbi0+Z2V0TmFtZSgpID09ICJtYWluIikgewotICAgICAgICAgICAgaWYgKGZ1bmN0
aW9uLT5nZXRQYXJhbUNvdW50KCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoQDEsICJmdW5jdGlvbiBjYW5ub3QgdGFrZSBhbnkgcGFyYW1ldGVyKHMpIiwgZnVuY3Rpb24t
PmdldE5hbWUoKS5jX3N0cigpKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZnVuY3Rpb24tPmdldFJldHVyblR5cGUo
KS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoQDEsICIiLCBmdW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCks
ICJtYWluIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIpOwotICAgICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IC8vCi0gICAgICAgIC8vIFJlbWVtYmVyIHRoZSByZXR1cm4gdHlwZSBmb3IgbGF0ZXIgY2hlY2tp
bmcgZm9yIFJFVFVSTiBzdGF0ZW1lbnRzLgotICAgICAgICAvLwotICAgICAgICBjb250ZXh0LT5j
dXJyZW50RnVuY3Rpb25UeXBlID0gJihwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkpOwotICAgICAg
ICBjb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IGZhbHNlOwotCi0gICAgICAgIC8vCi0g
ICAgICAgIC8vIEluc2VydCBwYXJhbWV0ZXJzIGludG8gdGhlIHN5bWJvbCB0YWJsZS4KLSAgICAg
ICAgLy8gSWYgdGhlIHBhcmFtZXRlciBoYXMgbm8gbmFtZSwgaXQncyBub3QgYW4gZXJyb3IsIGp1
c3QgZG9uJ3QgaW5zZXJ0IGl0Ci0gICAgICAgIC8vIChjb3VsZCBiZSB1c2VkIGZvciB1bnVzZWQg
YXJncykuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIEFsc28sIGFjY3VtdWxhdGUgdGhlIGxpc3Qg
b2YgcGFyYW1ldGVycyBpbnRvIHRoZSBISUwsIHNvIGxvd2VyIGxldmVsIGNvZGUKLSAgICAgICAg
Ly8ga25vd3Mgd2hlcmUgdG8gZmluZCBwYXJhbWV0ZXJzLgotICAgICAgICAvLwotICAgICAgICBU
SW50ZXJtQWdncmVnYXRlKiBwYXJhbU5vZGVzID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGU7Ci0gICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb24tPmdldFBhcmFtQ291bnQoKTsgaSsr
KSB7Ci0gICAgICAgICAgICBjb25zdCBUUGFyYW1ldGVyJiBwYXJhbSA9IGZ1bmN0aW9uLT5nZXRQ
YXJhbShpKTsKLSAgICAgICAgICAgIGlmIChwYXJhbS5uYW1lICE9IDApIHsKLSAgICAgICAgICAg
ICAgICBUVmFyaWFibGUgKnZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZShwYXJhbS5uYW1lLCAqcGFy
YW0udHlwZSk7Ci0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAvLyBJbnNlcnQg
dGhlIHBhcmFtZXRlcnMgd2l0aCBuYW1lIGluIHRoZSBzeW1ib2wgdGFibGUuCi0gICAgICAgICAg
ICAgICAgLy8KLSAgICAgICAgICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNl
cnQoKnZhcmlhYmxlKSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwg
InJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRl
IHZhcmlhYmxlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vCi0gICAg
ICAgICAgICAgICAgLy8gQWRkIHRoZSBwYXJhbWV0ZXIgdG8gdGhlIEhJTAotICAgICAgICAgICAg
ICAgIC8vCi0gICAgICAgICAgICAgICAgcGFyYW1Ob2RlcyA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5ncm93QWdncmVnYXRlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJhbU5vZGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRV
bmlxdWVJZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXROYW1lKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBAMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEAxKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcGFyYW1Ob2Rl
cyA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKHBhcmFtTm9kZXMsIGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsICpwYXJhbS50eXBlLCBAMSksIEAxKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
c2V0QWdncmVnYXRlT3BlcmF0b3IocGFyYW1Ob2RlcywgRU9wUGFyYW1ldGVycywgQDEpOwotICAg
ICAgICAkMS5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJhbU5vZGVzOwotICAgICAgICBjb250ZXh0LT5s
b29wTmVzdGluZ0xldmVsID0gMDsKLSAgICB9Ci0gICAgY29tcG91bmRfc3RhdGVtZW50X25vX25l
d19zY29wZSB7Ci0gICAgICAgIC8vPz8gQ2hlY2sgdGhhdCBhbGwgcGF0aHMgcmV0dXJuIGEgdmFs
dWUgaWYgcmV0dXJuIHR5cGUgIT0gdm9pZCA/Ci0gICAgICAgIC8vICAgTWF5IGJlIGJlc3QgZG9u
ZSBhcyBwb3N0IHByb2Nlc3MgcGhhc2Ugb24gaW50ZXJtZWRpYXRlIGNvZGUKLSAgICAgICAgaWYg
KGNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQg
JiYgISBjb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSkgewotICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoQDEsICJmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZToiLCAiIiwgJDEu
ZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1BZ2dyZWdhdGUsICQzLCBAJCk7Ci0gICAgICAg
IGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcigkJCwgRU9wRnVuY3Rp
b24sIEAxKTsKLSAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldE5hbWUoJDEuZnVuY3Rp
b24tPmdldE1hbmdsZWROYW1lKCkuY19zdHIoKSk7Ci0gICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0
ZSgpLT5zZXRUeXBlKCQxLmZ1bmN0aW9uLT5nZXRSZXR1cm5UeXBlKCkpOwotCi0gICAgICAgIC8v
IHN0b3JlIHRoZSBwcmFnbWEgaW5mb3JtYXRpb24gZm9yIGRlYnVnIGFuZCBvcHRpbWl6ZSBhbmQg
b3RoZXIgdmVuZG9yIHNwZWNpZmljCi0gICAgICAgIC8vIGluZm9ybWF0aW9uLiBUaGlzIGluZm9y
bWF0aW9uIGNhbiBiZSBxdWVyaWVkIGZyb20gdGhlIHBhcnNlIHRyZWUKLSAgICAgICAgJCQtPmdl
dEFzQWdncmVnYXRlKCktPnNldE9wdGltaXplKGNvbnRleHQtPnByYWdtYSgpLm9wdGltaXplKTsK
LSAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldERlYnVnKGNvbnRleHQtPnByYWdtYSgp
LmRlYnVnKTsKLQotICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKLSAgICB9Ci0g
ICAgOwotCi0lJQotCi1pbnQgZ2xzbGFuZ19wYXJzZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7
Ci0gICAgcmV0dXJuIHl5cGFyc2UoY29udGV4dCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNzkwNjJjYjc2YzkzMTI4ZGIxNzIxZGFjZTU2YjNiYmQ4NDg3OTkzYi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMjk3NCArMCwwIEBACi0jbGluZSAxNyAiLi9nbHNsYW5nLmwiCi0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4g
RE8gTk9UIEVESVQhCi0KLS8vIElnbm9yZSBlcnJvcnMgaW4gYXV0by1nZW5lcmF0ZWQgY29kZS4K
LSNpZiBkZWZpbmVkKF9fR05VQ19fKQotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICIt
V3VudXNlZC1mdW5jdGlvbiIKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVz
ZWQtdmFyaWFibGUiCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc3dpdGNoLWVu
dW0iCi0jZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQw
NjUpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDE4OSkKLSNwcmFnbWEgd2FybmluZyhkaXNh
YmxlOiA0NTA1KQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEpCi0jZW5kaWYKLQotI2lm
IGRlZmluZWQoX19jbGFuZ19fKQotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKLSNwcmFn
bWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vua25vd24tcHJhZ21hcyIKLSNwcmFnbWEg
Y2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtcmVnaXN0ZXIiCi0jZW5kaWYK
LQotCi0KLSNsaW5lIDI1ICIuL2dsc2xhbmdfbGV4LmNwcCIKLQotI2RlZmluZSAgWVlfSU5UX0FM
SUdORUQgc2hvcnQgaW50Ci0KLS8qIEEgbGV4aWNhbCBzY2FubmVyIGdlbmVyYXRlZCBieSBmbGV4
ICovCi0KLSNkZWZpbmUgRkxFWF9TQ0FOTkVSCi0jZGVmaW5lIFlZX0ZMRVhfTUFKT1JfVkVSU0lP
TiAyCi0jZGVmaW5lIFlZX0ZMRVhfTUlOT1JfVkVSU0lPTiA1Ci0jZGVmaW5lIFlZX0ZMRVhfU1VC
TUlOT1JfVkVSU0lPTiAzNQotI2lmIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiA+IDAKLSNkZWZp
bmUgRkxFWF9CRVRBCi0jZW5kaWYKLQotLyogRmlyc3QsIHdlIGRlYWwgd2l0aCAgcGxhdGZvcm0t
c3BlY2lmaWMgb3IgY29tcGlsZXItc3BlY2lmaWMgaXNzdWVzLiAqLwotCi0vKiBiZWdpbiBzdGFu
ZGFyZCBDIGhlYWRlcnMuICovCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcu
aD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0vKiBlbmQgc3Rh
bmRhcmQgQyBoZWFkZXJzLiAqLwotCi0vKiBmbGV4IGludGVnZXIgdHlwZSBkZWZpbml0aW9ucyAq
LwotCi0jaWZuZGVmIEZMRVhJTlRfSAotI2RlZmluZSBGTEVYSU5UX0gKLQotLyogQzk5IHN5c3Rl
bXMgaGF2ZSA8aW50dHlwZXMuaD4uIE5vbi1DOTkgc3lzdGVtcyBtYXkgb3IgbWF5IG5vdC4gKi8K
LQotI2lmIGRlZmluZWQgKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0g
MTk5OTAxTAotCi0vKiBDOTkgc2F5cyB0byBkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyBiZWZv
cmUgaW5jbHVkaW5nIHN0ZGludC5oLAotICogaWYgeW91IHdhbnQgdGhlIGxpbWl0IChtYXgvbWlu
KSBtYWNyb3MgZm9yIGludCB0eXBlcy4gCi0gKi8KLSNpZm5kZWYgX19TVERDX0xJTUlUX01BQ1JP
UwotI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIDEKLSNlbmRpZgotCi0jaW5jbHVkZSA8aW50
dHlwZXMuaD4KLXR5cGVkZWYgaW50OF90IGZsZXhfaW50OF90OwotdHlwZWRlZiB1aW50OF90IGZs
ZXhfdWludDhfdDsKLXR5cGVkZWYgaW50MTZfdCBmbGV4X2ludDE2X3Q7Ci10eXBlZGVmIHVpbnQx
Nl90IGZsZXhfdWludDE2X3Q7Ci10eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90OwotdHlwZWRl
ZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90OwotdHlwZWRlZiB1aW50NjRfdCBmbGV4X3VpbnQ2NF90
OwotI2Vsc2UKLXR5cGVkZWYgc2lnbmVkIGNoYXIgZmxleF9pbnQ4X3Q7Ci10eXBlZGVmIHNob3J0
IGludCBmbGV4X2ludDE2X3Q7Ci10eXBlZGVmIGludCBmbGV4X2ludDMyX3Q7Ci10eXBlZGVmIHVu
c2lnbmVkIGNoYXIgZmxleF91aW50OF90OyAKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IGZs
ZXhfdWludDE2X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90OwotI2VuZGlm
IC8qICEgQzk5ICovCi0KLS8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8KLSNpZm5kZWYg
SU5UOF9NSU4KLSNkZWZpbmUgSU5UOF9NSU4gICAgICAgICAgICAgICAoLTEyOCkKLSNlbmRpZgot
I2lmbmRlZiBJTlQxNl9NSU4KLSNkZWZpbmUgSU5UMTZfTUlOICAgICAgICAgICAgICAoLTMyNzY3
LTEpCi0jZW5kaWYKLSNpZm5kZWYgSU5UMzJfTUlOCi0jZGVmaW5lIElOVDMyX01JTiAgICAgICAg
ICAgICAgKC0yMTQ3NDgzNjQ3LTEpCi0jZW5kaWYKLSNpZm5kZWYgSU5UOF9NQVgKLSNkZWZpbmUg
SU5UOF9NQVggICAgICAgICAgICAgICAoMTI3KQotI2VuZGlmCi0jaWZuZGVmIElOVDE2X01BWAot
I2RlZmluZSBJTlQxNl9NQVggICAgICAgICAgICAgICgzMjc2NykKLSNlbmRpZgotI2lmbmRlZiBJ
TlQzMl9NQVgKLSNkZWZpbmUgSU5UMzJfTUFYICAgICAgICAgICAgICAoMjE0NzQ4MzY0NykKLSNl
bmRpZgotI2lmbmRlZiBVSU5UOF9NQVgKLSNkZWZpbmUgVUlOVDhfTUFYICAgICAgICAgICAgICAo
MjU1VSkKLSNlbmRpZgotI2lmbmRlZiBVSU5UMTZfTUFYCi0jZGVmaW5lIFVJTlQxNl9NQVggICAg
ICAgICAgICAgKDY1NTM1VSkKLSNlbmRpZgotI2lmbmRlZiBVSU5UMzJfTUFYCi0jZGVmaW5lIFVJ
TlQzMl9NQVggICAgICAgICAgICAgKDQyOTQ5NjcyOTVVKQotI2VuZGlmCi0KLSNlbmRpZiAvKiAh
IEZMRVhJTlRfSCAqLwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLQotLyogVGhlICJjb25zdCIgc3Rv
cmFnZS1jbGFzcy1tb2RpZmllciBpcyB2YWxpZC4gKi8KLSNkZWZpbmUgWVlfVVNFX0NPTlNUCi0K
LSNlbHNlCS8qICEgX19jcGx1c3BsdXMgKi8KLQotLyogQzk5IHJlcXVpcmVzIF9fU1REQ19fIHRv
IGJlIGRlZmluZWQgYXMgMS4gKi8KLSNpZiBkZWZpbmVkIChfX1NURENfXykKLQotI2RlZmluZSBZ
WV9VU0VfQ09OU1QKLQotI2VuZGlmCS8qIGRlZmluZWQgKF9fU1REQ19fKSAqLwotI2VuZGlmCS8q
ICEgX19jcGx1c3BsdXMgKi8KLQotI2lmZGVmIFlZX1VTRV9DT05TVAotI2RlZmluZSB5eWNvbnN0
IGNvbnN0Ci0jZWxzZQotI2RlZmluZSB5eWNvbnN0Ci0jZW5kaWYKLQotLyogUmV0dXJuZWQgdXBv
biBlbmQtb2YtZmlsZS4gKi8KLSNkZWZpbmUgWVlfTlVMTCAwCi0KLS8qIFByb21vdGVzIGEgcG9z
c2libHkgbmVnYXRpdmUsIHBvc3NpYmx5IHNpZ25lZCBjaGFyIHRvIGFuIHVuc2lnbmVkCi0gKiBp
bnRlZ2VyIGZvciB1c2UgYXMgYW4gYXJyYXkgaW5kZXguICBJZiB0aGUgc2lnbmVkIGNoYXIgaXMg
bmVnYXRpdmUsCi0gKiB3ZSB3YW50IHRvIGluc3RlYWQgdHJlYXQgaXQgYXMgYW4gOC1iaXQgdW5z
aWduZWQgY2hhciwgaGVuY2UgdGhlCi0gKiBkb3VibGUgY2FzdC4KLSAqLwotI2RlZmluZSBZWV9T
Q19UT19VSShjKSAoKHVuc2lnbmVkIGludCkgKHVuc2lnbmVkIGNoYXIpIGMpCi0KLS8qIEFuIG9w
YXF1ZSBwb2ludGVyLiAqLwotI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAotI2RlZmlu
ZSBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAotdHlwZWRlZiB2b2lkKiB5eXNjYW5fdDsKLSNlbmRp
ZgotCi0vKiBGb3IgY29udmVuaWVuY2UsIHRoZXNlIHZhcnMgKHBsdXMgdGhlIGJpc29uIHZhcnMg
ZmFyIGJlbG93KQotICAgYXJlIG1hY3JvcyBpbiB0aGUgcmVlbnRyYW50IHNjYW5uZXIuICovCi0j
ZGVmaW5lIHl5aW4geXlnLT55eWluX3IKLSNkZWZpbmUgeXlvdXQgeXlnLT55eW91dF9yCi0jZGVm
aW5lIHl5ZXh0cmEgeXlnLT55eWV4dHJhX3IKLSNkZWZpbmUgeXlsZW5nIHl5Zy0+eXlsZW5nX3IK
LSNkZWZpbmUgeXl0ZXh0IHl5Zy0+eXl0ZXh0X3IKLSNkZWZpbmUgeXlsaW5lbm8gKFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfYnNfbGluZW5vKQotI2RlZmluZSB5eWNvbHVtbiAoWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9ic19jb2x1bW4pCi0jZGVmaW5lIHl5X2ZsZXhfZGVidWcg
eXlnLT55eV9mbGV4X2RlYnVnX3IKLQotLyogRW50ZXIgYSBzdGFydCBjb25kaXRpb24uICBUaGlz
IG1hY3JvIHJlYWxseSBvdWdodCB0byB0YWtlIGEgcGFyYW1ldGVyLAotICogYnV0IHdlIGRvIGl0
IHRoZSBkaXNndXN0aW5nIGNydWZ0eSB3YXkgZm9yY2VkIG9uIHVzIGJ5IHRoZSAoKS1sZXNzCi0g
KiBkZWZpbml0aW9uIG9mIEJFR0lOLgotICovCi0jZGVmaW5lIEJFR0lOIHl5Zy0+eXlfc3RhcnQg
PSAxICsgMiAqCi0KLS8qIFRyYW5zbGF0ZSB0aGUgY3VycmVudCBzdGFydCBzdGF0ZSBpbnRvIGEg
dmFsdWUgdGhhdCBjYW4gYmUgbGF0ZXIgaGFuZGVkCi0gKiB0byBCRUdJTiB0byByZXR1cm4gdG8g
dGhlIHN0YXRlLiAgVGhlIFlZU1RBVEUgYWxpYXMgaXMgZm9yIGxleAotICogY29tcGF0aWJpbGl0
eS4KLSAqLwotI2RlZmluZSBZWV9TVEFSVCAoKHl5Zy0+eXlfc3RhcnQgLSAxKSAvIDIpCi0jZGVm
aW5lIFlZU1RBVEUgWVlfU1RBUlQKLQotLyogQWN0aW9uIG51bWJlciBmb3IgRU9GIHJ1bGUgb2Yg
YSBnaXZlbiBzdGFydCBzdGF0ZS4gKi8KLSNkZWZpbmUgWVlfU1RBVEVfRU9GKHN0YXRlKSAoWVlf
RU5EX09GX0JVRkZFUiArIHN0YXRlICsgMSkKLQotLyogU3BlY2lhbCBhY3Rpb24gbWVhbmluZyAi
c3RhcnQgcHJvY2Vzc2luZyBhIG5ldyBmaWxlIi4gKi8KLSNkZWZpbmUgWVlfTkVXX0ZJTEUgeXly
ZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lciApCi0KLSNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUl9DSEFS
IDAKLQotLyogU2l6ZSBvZiBkZWZhdWx0IGlucHV0IGJ1ZmZlci4gKi8KLSNpZm5kZWYgWVlfQlVG
X1NJWkUKLSNkZWZpbmUgWVlfQlVGX1NJWkUgMTYzODQKLSNlbmRpZgotCi0vKiBUaGUgc3RhdGUg
YnVmIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgb25lIHN0YXRlIHBlciBjaGFyYWN0ZXIg
aW4gdGhlIG1haW4gYnVmZmVyLgotICovCi0jZGVmaW5lIFlZX1NUQVRFX0JVRl9TSVpFICAgKChZ
WV9CVUZfU0laRSArIDIpICogc2l6ZW9mKHl5X3N0YXRlX3R5cGUpKQotCi0jaWZuZGVmIFlZX1RZ
UEVERUZfWVlfQlVGRkVSX1NUQVRFCi0jZGVmaW5lIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRF
Ci10eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFURTsKLSNlbmRp
ZgotCi0jaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCi0jZGVmaW5lIFlZX1RZUEVERUZfWVlf
U0laRV9UCi10eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7Ci0jZW5kaWYKLQotI2RlZmluZSBFT0Jf
QUNUX0NPTlRJTlVFX1NDQU4gMAotI2RlZmluZSBFT0JfQUNUX0VORF9PRl9GSUxFIDEKLSNkZWZp
bmUgRU9CX0FDVF9MQVNUX01BVENIIDIKLQotICAgIC8qIE5vdGU6IFdlIHNwZWNpZmljYWxseSBv
bWl0IHRoZSB0ZXN0IGZvciB5eV9ydWxlX2Nhbl9tYXRjaF9lb2wgYmVjYXVzZSBpdCByZXF1aXJl
cwotICAgICAqICAgICAgIGFjY2VzcyB0byB0aGUgbG9jYWwgdmFyaWFibGUgeXlfYWN0LiBTaW5j
ZSB5eWxlc3MoKSBpcyBhIG1hY3JvLCBpdCB3b3VsZCBicmVhawotICAgICAqICAgICAgIGV4aXN0
aW5nIHNjYW5uZXJzIHRoYXQgY2FsbCB5eWxlc3MoKSBmcm9tIE9VVFNJREUgeXlsZXguIAotICAg
ICAqICAgICAgIE9uZSBvYnZpb3VzIHNvbHV0aW9uIGl0IHRvIG1ha2UgeXlfYWN0IGEgZ2xvYmFs
LiBJIHRyaWVkIHRoYXQsIGFuZCBzYXcKLSAgICAgKiAgICAgICBhIDUlIHBlcmZvcm1hbmNlIGhp
dCBpbiBhIG5vbi15eWxpbmVubyBzY2FubmVyLCBiZWNhdXNlIHl5X2FjdCBpcwotICAgICAqICAg
ICAgIG5vcm1hbGx5IGRlY2xhcmVkIGFzIGEgcmVnaXN0ZXIgdmFyaWFibGUtLSBzbyBpdCBpcyBu
b3Qgd29ydGggaXQuCi0gICAgICovCi0gICAgI2RlZmluZSAgWVlfTEVTU19MSU5FTk8obikgXAot
ICAgICAgICAgICAgZG8geyBcCi0gICAgICAgICAgICAgICAgeXlfc2l6ZV90IHl5bDtcCi0gICAg
ICAgICAgICAgICAgZm9yICggeXlsID0gbjsgeXlsIDwgeXlsZW5nOyArK3l5bCApXAotICAgICAg
ICAgICAgICAgICAgICBpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKVwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC0teXlsaW5lbm87XAotICAgICAgICAgICAgfXdoaWxlKDApCi0gICAgCi0vKiBS
ZXR1cm4gYWxsIGJ1dCB0aGUgZmlyc3QgIm4iIG1hdGNoZWQgY2hhcmFjdGVycyBiYWNrIHRvIHRo
ZSBpbnB1dCBzdHJlYW0uICovCi0jZGVmaW5lIHl5bGVzcyhuKSBcCi0JZG8gXAotCQl7IFwKLQkJ
LyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCi0gICAgICAgIGludCB5
eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCi0gICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVzc19t
YWNyb19hcmcpO1wKLQkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7IFwKLQkJWVlfUkVTVE9S
RV9ZWV9NT1JFX09GRlNFVCBcCi0JCXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwID0geXlfYnAgKyB5
eWxlc3NfbWFjcm9fYXJnIC0gWVlfTU9SRV9BREo7IFwKLQkJWVlfRE9fQkVGT1JFX0FDVElPTjsg
Lyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLyBcCi0JCX0gXAotCXdoaWxlICggMCApCi0KLSNkZWZp
bmUgdW5wdXQoYykgeXl1bnB1dCggYywgeXlnLT55eXRleHRfcHRyICwgeXlzY2FubmVyICkKLQot
I2lmbmRlZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCi0jZGVmaW5lIFlZX1NUUlVDVF9ZWV9C
VUZGRVJfU1RBVEUKLXN0cnVjdCB5eV9idWZmZXJfc3RhdGUKLQl7Ci0JRklMRSAqeXlfaW5wdXRf
ZmlsZTsKLQotCWNoYXIgKnl5X2NoX2J1ZjsJCS8qIGlucHV0IGJ1ZmZlciAqLwotCWNoYXIgKnl5
X2J1Zl9wb3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1ZmZlciAqLwotCi0JLyog
U2l6ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBmb3IgRU9C
Ci0JICogY2hhcmFjdGVycy4KLQkgKi8KLQl5eV9zaXplX3QgeXlfYnVmX3NpemU7Ci0KLQkvKiBO
dW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBub3QgaW5jbHVkaW5nIEVP
QgotCSAqIGNoYXJhY3RlcnMuCi0JICovCi0JeXlfc2l6ZV90IHl5X25fY2hhcnM7Ci0KLQkvKiBX
aGV0aGVyIHdlICJvd24iIHRoZSBidWZmZXIgLSBpLmUuLCB3ZSBrbm93IHdlIGNyZWF0ZWQgaXQs
Ci0JICogYW5kIGNhbiByZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNob3VsZCBmcmVlKCkg
aXQgdG8KLQkgKiBkZWxldGUgaXQuCi0JICovCi0JaW50IHl5X2lzX291cl9idWZmZXI7Ci0KLQkv
KiBXaGV0aGVyIHRoaXMgaXMgYW4gImludGVyYWN0aXZlIiBpbnB1dCBzb3VyY2U7IGlmIHNvLCBh
bmQKLQkgKiBpZiB3ZSdyZSB1c2luZyBzdGRpbyBmb3IgaW5wdXQsIHRoZW4gd2Ugd2FudCB0byB1
c2UgZ2V0YygpCi0JICogaW5zdGVhZCBvZiBmcmVhZCgpLCB0byBtYWtlIHN1cmUgd2Ugc3RvcCBm
ZXRjaGluZyBpbnB1dCBhZnRlcgotCSAqIGVhY2ggbmV3bGluZS4KLQkgKi8KLQlpbnQgeXlfaXNf
aW50ZXJhY3RpdmU7Ci0KLQkvKiBXaGV0aGVyIHdlJ3JlIGNvbnNpZGVyZWQgdG8gYmUgYXQgdGhl
IGJlZ2lubmluZyBvZiBhIGxpbmUuCi0JICogSWYgc28sICdeJyBydWxlcyB3aWxsIGJlIGFjdGl2
ZSBvbiB0aGUgbmV4dCBtYXRjaCwgb3RoZXJ3aXNlCi0JICogbm90LgotCSAqLwotCWludCB5eV9h
dF9ib2w7Ci0KLSAgICBpbnQgeXlfYnNfbGluZW5vOyAvKio8IFRoZSBsaW5lIGNvdW50LiAqLwot
ICAgIGludCB5eV9ic19jb2x1bW47IC8qKjwgVGhlIGNvbHVtbiBjb3VudC4gKi8KLSAgICAKLQkv
KiBXaGV0aGVyIHRvIHRyeSB0byBmaWxsIHRoZSBpbnB1dCBidWZmZXIgd2hlbiB3ZSByZWFjaCB0
aGUKLQkgKiBlbmQgb2YgaXQuCi0JICovCi0JaW50IHl5X2ZpbGxfYnVmZmVyOwotCi0JaW50IHl5
X2J1ZmZlcl9zdGF0dXM7Ci0KLSNkZWZpbmUgWVlfQlVGRkVSX05FVyAwCi0jZGVmaW5lIFlZX0JV
RkZFUl9OT1JNQUwgMQotCS8qIFdoZW4gYW4gRU9GJ3MgYmVlbiBzZWVuIGJ1dCB0aGVyZSdzIHN0
aWxsIHNvbWUgdGV4dCB0byBwcm9jZXNzCi0JICogdGhlbiB3ZSBtYXJrIHRoZSBidWZmZXIgYXMg
WVlfRU9GX1BFTkRJTkcsIHRvIGluZGljYXRlIHRoYXQgd2UKLQkgKiBzaG91bGRuJ3QgdHJ5IHJl
YWRpbmcgZnJvbSB0aGUgaW5wdXQgc291cmNlIGFueSBtb3JlLiAgV2UgbWlnaHQKLQkgKiBzdGls
bCBoYXZlIGEgYnVuY2ggb2YgdG9rZW5zIHRvIG1hdGNoLCB0aG91Z2gsIGJlY2F1c2Ugb2YKLQkg
KiBwb3NzaWJsZSBiYWNraW5nLXVwLgotCSAqCi0JICogV2hlbiB3ZSBhY3R1YWxseSBzZWUgdGhl
IEVPRiwgd2UgY2hhbmdlIHRoZSBzdGF0dXMgdG8gIm5ldyIKLQkgKiAodmlhIHl5cmVzdGFydCgp
KSwgc28gdGhhdCB0aGUgdXNlciBjYW4gY29udGludWUgc2Nhbm5pbmcgYnkKLQkgKiBqdXN0IHBv
aW50aW5nIHl5aW4gYXQgYSBuZXcgaW5wdXQgZmlsZS4KLQkgKi8KLSNkZWZpbmUgWVlfQlVGRkVS
X0VPRl9QRU5ESU5HIDIKLQotCX07Ci0jZW5kaWYgLyogIVlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RB
VEUgKi8KLQotLyogV2UgcHJvdmlkZSBtYWNyb3MgZm9yIGFjY2Vzc2luZyBidWZmZXIgc3RhdGVz
IGluIGNhc2UgaW4gdGhlCi0gKiBmdXR1cmUgd2Ugd2FudCB0byBwdXQgdGhlIGJ1ZmZlciBzdGF0
ZXMgaW4gYSBtb3JlIGdlbmVyYWwKLSAqICJzY2FubmVyIHN0YXRlIi4KLSAqCi0gKiBSZXR1cm5z
IHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBvciBOVUxMLgotICovCi0jZGVmaW5lIFlZX0NVUlJFTlRf
QlVGRkVSICggeXlnLT55eV9idWZmZXJfc3RhY2sgXAotICAgICAgICAgICAgICAgICAgICAgICAg
ICA/IHl5Zy0+eXlfYnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcF0gXAotICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEwpCi0KLS8qIFNhbWUgYXMgcHJldmlvdXMgbWFj
cm8sIGJ1dCB1c2VmdWwgd2hlbiB3ZSBrbm93IHRoYXQgdGhlIGJ1ZmZlciBzdGFjayBpcyBub3QK
LSAqIE5VTEwgb3Igd2hlbiB3ZSBuZWVkIGFuIGx2YWx1ZS4gRm9yIGludGVybmFsIHVzZSBvbmx5
LgotICovCi0jZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSB5eWctPnl5X2J1ZmZlcl9z
dGFja1t5eWctPnl5X2J1ZmZlcl9zdGFja190b3BdCi0KLXZvaWQgeXlyZXN0YXJ0IChGSUxFICpp
bnB1dF9maWxlICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgeXlfc3dpdGNoX3RvX2J1ZmZl
ciAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotWVlf
QlVGRkVSX1NUQVRFIHl5X2NyZWF0ZV9idWZmZXIgKEZJTEUgKmZpbGUsaW50IHNpemUgLHl5c2Nh
bl90IHl5c2Nhbm5lciApOwotdm9pZCB5eV9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUg
YiAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHl5X2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVS
X1NUQVRFIGIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCB5eXB1c2hfYnVmZmVyX3N0YXRl
IChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lk
IHl5cG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXN0YXRpYyB2b2lk
IHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1zdGF0aWMgdm9p
ZCB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1zdGF0aWMgdm9p
ZCB5eV9pbml0X2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIsRklMRSAqZmlsZSAseXlzY2FuX3Qg
eXlzY2FubmVyICk7Ci0KLSNkZWZpbmUgWVlfRkxVU0hfQlVGRkVSIHl5X2ZsdXNoX2J1ZmZlcihZ
WV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyKQotCi1ZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9i
dWZmZXIgKGNoYXIgKmJhc2UseXlfc2l6ZV90IHNpemUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwot
WVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKnl5X3N0ciAseXlz
Y2FuX3QgeXlzY2FubmVyICk7Ci1ZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAoeXljb25z
dCBjaGFyICpieXRlcyx5eV9zaXplX3QgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9p
ZCAqeXlhbGxvYyAoeXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgKnl5cmVh
bGxvYyAodm9pZCAqLHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHl5ZnJl
ZSAodm9pZCAqICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotI2RlZmluZSB5eV9uZXdfYnVmZmVy
IHl5X2NyZWF0ZV9idWZmZXIKLQotI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNfaW50ZXJh
Y3RpdmUpIFwKLQl7IFwKLQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAotICAgICAgICB5
eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKLQkJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFID0gICAgXAotICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9T
SVpFICx5eXNjYW5uZXIpOyBcCi0JfSBcCi0JWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9p
c19pbnRlcmFjdGl2ZSA9IGlzX2ludGVyYWN0aXZlOyBcCi0JfQotCi0jZGVmaW5lIHl5X3NldF9i
b2woYXRfYm9sKSBcCi0JeyBcCi0JaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7XAotICAgICAg
ICB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKLQkJWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFID0gICAgXAotICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JV
Rl9TSVpFICx5eXNjYW5uZXIpOyBcCi0JfSBcCi0JWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9hdF9ib2wgPSBhdF9ib2w7IFwKLQl9Ci0KLSNkZWZpbmUgWVlfQVRfQk9MKCkgKFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sKQotCi0vKiBCZWdpbiB1c2VyIHNlY3QzICovCi0K
LSNkZWZpbmUgeXl3cmFwKG4pIDEKLSNkZWZpbmUgWVlfU0tJUF9ZWVdSQVAKLQotdHlwZWRlZiB1
bnNpZ25lZCBjaGFyIFlZX0NIQVI7Ci0KLXR5cGVkZWYgaW50IHl5X3N0YXRlX3R5cGU7Ci0KLSNk
ZWZpbmUgeXl0ZXh0X3B0ciB5eXRleHRfcgotCi1zdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRf
cHJldmlvdXNfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotc3RhdGljIHl5X3N0YXRlX3R5
cGUgeXlfdHJ5X05VTF90cmFucyAoeXlfc3RhdGVfdHlwZSBjdXJyZW50X3N0YXRlICAseXlzY2Fu
X3QgeXlzY2FubmVyKTsKLXN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKLXN0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIgbXNn
W10gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi0vKiBEb25lIGFmdGVyIHRoZSBjdXJyZW50IHBh
dHRlcm4gaGFzIGJlZW4gbWF0Y2hlZCBhbmQgYmVmb3JlIHRoZQotICogY29ycmVzcG9uZGluZyBh
Y3Rpb24gLSBzZXRzIHVwIHl5dGV4dC4KLSAqLwotI2RlZmluZSBZWV9ET19CRUZPUkVfQUNUSU9O
IFwKLQl5eWctPnl5dGV4dF9wdHIgPSB5eV9icDsgXAotCXl5bGVuZyA9ICh5eV9zaXplX3QpICh5
eV9jcCAtIHl5X2JwKTsgXAotCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2NwOyBcCi0JKnl5X2Nw
ID0gJ1wwJzsgXAotCXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwOwotCi0jZGVmaW5lIFlZX05VTV9S
VUxFUyAxNDcKLSNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUiAxNDgKLS8qIFRoaXMgc3RydWN0IGlz
IG5vdCB1c2VkIGluIHRoaXMgc2Nhbm5lciwKLSAgIGJ1dCBpdHMgcHJlc2VuY2UgaXMgbmVjZXNz
YXJ5LiAqLwotc3RydWN0IHl5X3RyYW5zX2luZm8KLQl7Ci0JZmxleF9pbnQzMl90IHl5X3Zlcmlm
eTsKLQlmbGV4X2ludDMyX3QgeXlfbnh0OwotCX07Ci1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2
X3QgeXlfYWNjZXB0WzQ0M10gPQotICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAgMTQ4LCAg
MTQ2LCAgMTQ1LCAgMTQ1LCAgMTMyLCAgMTM4LCAgMTQzLCAgMTI3LAotICAgICAgMTI4LCAgMTM2
LCAgMTM1LCAgMTI0LCAgMTMzLCAgMTMxLCAgMTM3LCAgIDk2LCAgIDk2LCAgMTI1LAotICAgICAg
MTIxLCAgMTM5LCAgMTI2LCAgMTQwLCAgMTQ0LCAgIDkzLCAgMTI5LCAgMTMwLCAgMTQyLCAgIDkz
LAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAg
IDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLCAgIDkzLCAgMTIyLAotICAgICAgMTQxLCAgMTIzLCAgMTM0LCAgMTE4LCAgMTA0LCAg
MTIzLCAgMTEyLCAgMTA3LCAgMTAyLCAgMTEwLAotICAgICAgMTAwLCAgMTExLCAgMTAxLCAgIDk5
LCAgMTAzLCAgIDk4LCAgIDk1LCAgIDk2LCAgICAwLCAgICAwLAotICAgICAgMTMwLCAgMTIyLCAg
MTI5LCAgMTE5LCAgMTE1LCAgMTE3LCAgMTE2LCAgMTIwLCAgIDkzLCAgMTA4LAotICAgICAgMTE0
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAot
ICAgICAgIDkzLCAgIDEyLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLAotCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgMTUsICAgMTcs
ICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAxMDksICAxMTMsICAgIDAsICAgOTgsICAgIDAsICAgIDAsCi0gICAgICAgOTcs
ICAgOTQsICAxMDUsICAxMDYsICAgNDUsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0g
ICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgMTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgMjEsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgMTgsICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0KLSAgICAgICA5Mywg
ICA5MywgICA5MywgICA5MywgICA5MywgICAgMCwgICA5OSwgICAgMCwgICA5OCwgICA5MywKLSAg
ICAgICAyMywgICA5MywgICA5MywgICA5MCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5Mywg
ICA5MywKLSAgICAgICA5MywgICAxNiwgICA0OCwgICA5MywgICA5MywgICA5MywgICA2NCwgICA5
MywgICA5MywgICA1MywKLSAgICAgICA2OCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5Mywg
ICA5MywgICA5MywgICA5MywgICA2NSwKLSAgICAgICAgNCwgICAyOCwgICAyOSwgICAzMCwgICA5
MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICA5Mywg
ICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA1MSwgICAy
NCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICAzMSwgICAzMiwKLSAgICAg
ICAzMywgICAyMiwgICA5MywgICA5MywgICA5MywgICAxMCwgICAzNywgICAzOCwgICAzOSwgICA0
NiwKLSAgICAgICAgNywgICA5MywgICA5MywgICA5MywgICA5MywgICA3NywgICA3OCwgICA3OSwg
ICA5MywgICAyNSwKLSAgICAgICA2OSwgICAyMCwgICA4MCwgICA4MSwgICA4MiwgICAgMiwgICA3
NCwgICA3NSwgICA3NiwgICA5MywKLQotICAgICAgIDE5LCAgIDcyLCAgIDkzLCAgIDkzLCAgIDM0
LCAgIDM1LCAgIDM2LCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAg
IDkzLCAgIDkzLCAgIDkzLCAgIDY2LCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDQ3LCAgIDkzLCAgIDkyLCAgIDkzLCAgIDkzLAotICAgICAg
IDE0LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDY3LCAgIDYxLCAgIDU2LCAgIDkzLCAgIDkz
LAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDczLCAgIDUyLCAgIDkzLCAgIDU5LCAgIDI3LCAg
IDkzLCAgIDg5LAotICAgICAgIDYwLCAgIDQ0LCAgIDcxLCAgIDU0LCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDU1LCAgIDI2LCAgIDkzLCAg
IDkzLCAgIDkzLCAgICAzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDQ5
LCAgICA4LCAgIDkzLCAgICA5LCAgIDkzLCAgIDkzLCAgIDExLAotICAgICAgIDYyLCAgIDkzLCAg
IDkzLCAgIDkzLCAgIDU3LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkz
LCAgIDUwLCAgIDcwLCAgIDU4LCAgICA2LCAgIDYzLCAgICAxLCAgIDkxLCAgICA1LCAgIDgzLAot
Ci0gICAgICAgNDAsICAgODQsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgNDEsICAgOTMsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgNDMsICAgOTMsICAgODcsICAg
OTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgODUsICAgOTMsICAgODYsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgNDIsCi0gICAgICAgODgsICAgIDAKLSAg
ICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQotICAgIHsg
ICAwLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAyLCAgICAzLAotICAgICAgICAyLCAgICAyLCAgICAyLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAyLCAgICA0LCAg
ICAxLCAgICAxLCAgICAxLCAgICA1LCAgICA2LCAgICAxLCAgICA3LAotICAgICAgICA4LCAgICA5
LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1LCAgIDE2LCAgIDE3LAotICAgICAg
IDE4LCAgIDE5LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIxLCAgIDIxLCAgIDIyLCAgIDIzLCAgIDI0
LAotICAgICAgIDI1LCAgIDI2LCAgIDI3LCAgICAxLCAgIDI4LCAgIDI4LCAgIDI5LCAgIDMwLCAg
IDMxLCAgIDI4LAotICAgICAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMy
LCAgIDMyLCAgIDMzLCAgIDMyLAotICAgICAgIDMyLCAgIDM0LCAgIDM1LCAgIDMyLCAgIDMyLCAg
IDMyLCAgIDMyLCAgIDM2LCAgIDMyLCAgIDMyLAotICAgICAgIDM3LCAgICAxLCAgIDM4LCAgIDM5
LCAgIDMyLCAgICAxLCAgIDQwLCAgIDQxLCAgIDQyLCAgIDQzLAotCi0gICAgICAgNDQsICAgNDUs
ICAgNDYsICAgNDcsICAgNDgsICAgMzIsICAgNDksICAgNTAsICAgNTEsICAgNTIsCi0gICAgICAg
NTMsICAgNTQsICAgMzIsICAgNTUsICAgNTYsICAgNTcsICAgNTgsICAgNTksICAgNjAsICAgNjEs
Ci0gICAgICAgNjIsICAgNjMsICAgNjQsICAgNjUsICAgNjYsICAgNjcsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0g
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsCi0KLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMQotICAgIH0gOwotCi1zdGF0
aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfbWV0YVs2OF0gPQotICAgIHsgICAwLAotICAgICAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAg
ICAyLCAgICAyLAotICAgICAgICAyLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAyLCAgICAyLCAgICAyLAotICAgICAgICAyLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAg
ICAzLCAgICAxLCAgICAxLCAgICAxLCAgICAyLAotICAgICAgICAyLCAgICAyLCAgICAyLCAgICAy
LCAgICAyLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLAotICAgICAgICAzLCAgICAzLCAg
ICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLAotICAgICAgICAz
LCAgICAzLCAgICAzLCAgICAxLCAgICAxLCAgICAxLCAgICAxCi0gICAgfSA7Ci0KLXN0YXRpYyB5
eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzQ0NV0gPQotICAgIHsgICAwLAotICAgICAgICAw
LCAgICAwLCAgNTg3LCAgNTg4LCAgNTg4LCAgNTg4LCAgNTYxLCAgIDQzLCAgIDY0LCAgNTg4LAot
ICAgICAgNTg4LCAgNTYwLCAgIDYxLCAgNTg4LCAgIDYwLCAgIDU4LCAgNTU5LCAgIDc3LCAgIDg2
LCAgNTU3LAotICAgICAgNTg4LCAgMTA0LCAgNTU3LCAgIDU1LCAgNTg4LCAgICAwLCAgNTg4LCAg
NTg4LCAgIDc1LCAgIDI2LAotICAgICAgIDU3LCAgIDgyLCAgIDgzLCAgIDczLCAgIDkzLCAgNTI4
LCAgIDk3LCAgIDk1LCAgNTI3LCAgIDQ0LAotICAgICAgIDcxLCAgNTIxLCAgMTA0LCAgNTM0LCAg
MTEwLCAgMTE2LCAgIDM1LCAgMTExLCAgNTMwLCAgNTg4LAotICAgICAgMTE0LCAgNTg4LCAgNTg4
LCAgNTg4LCAgNTg4LCAgNTg4LCAgNTg4LCAgNTg4LCAgNTg4LCAgNTg4LAotICAgICAgNTg4LCAg
NTg4LCAgNTg4LCAgMTY1LCAgNTg4LCAgMTcyLCAgMjAyLCAgMjExLCAgMjMzLCAgICAwLAotICAg
ICAgNTg4LCAgNTg4LCAgNTg4LCAgNTUxLCAgNTg4LCAgNTg4LCAgNTg4LCAgNTUwLCAgICAwLCAg
NTg4LAotICAgICAgNTg4LCAgNTIzLCAgNTE2LCAgNTE5LCAgNTI3LCAgNTI2LCAgNTEzLCAgNTI4
LCAgNTE1LCAgNTIxLAotICAgICAgNTA5LCAgNTA2LCAgNTE5LCAgNTA2LCAgNTAzLCAgNTAzLCAg
NTA5LCAgNDk3LCAgMTA4LCAgNTAyLAotCi0gICAgICA1MTIsICA0OTgsICA1MDQsICA1MDcsICA1
MDgsICAgIDAsICAxNDUsICA1MDcsICAxMTMsICA0OTMsCi0gICAgICA1MDYsICA0OTcsICA0OTks
ICA0ODksICA1MDMsICA1MDAsICA1MDIsICA0ODUsICA0OTAsICA0ODcsCi0gICAgICA0NzYsICAx
NTcsICA0ODQsICA0ODksICA0ODUsICA0ODcsICA0NzYsICA0NzksICAxMTgsICA0ODQsCi0gICAg
ICA0NzYsICA0ODgsICAgNzAsICA0ODEsICA1ODgsICA1ODgsICAyNDYsICAyNTMsICAyNzAsICAy
MTksCi0gICAgICAyODMsICAgIDAsICA1ODgsICA1ODgsICAgIDAsICA0NzMsICA0NzcsICA0ODYs
ICA0ODMsICA0NjcsCi0gICAgICA0NjcsICAxMTksICA0ODIsICA0NzksICA0NzksICA0NzcsICA0
NzQsICA0NjYsICA0NzIsICA0NTksCi0gICAgICA0NzAsICA0NTYsICA0NzIsICAgIDAsICA0Njks
ICA0NTcsICA0NjQsICA0NjEsICA0NjUsICA0NTgsCi0gICAgICA0NDcsICA0NDYsICA0NTksICA0
NjIsICA0NTksICA0NTQsICA0NDUsICAxODgsICA0NTAsICA0NTMsCi0gICAgICA0NDQsICA0NDEs
ICA0NDUsICA0NTEsICA0NDIsICA0MzMsICA0MzYsICA0MzQsICA0NDQsICA0MzAsCi0gICAgICA0
MjgsICA0NDEsICA0MjcsICA0MjksICA0MjYsICA0MzcsICA0MzYsICAxMjQsICA0MzEsICA0MjYs
Ci0KLSAgICAgIDQxNSwgIDI1OCwgIDQzMywgIDQzNSwgIDQyNCwgIDI5MCwgIDI5NywgIDMwNCwg
IDMxMSwgIDQyNSwKLSAgICAgICAgMCwgIDQyMywgIDI3NSwgICAgMCwgIDQxNSwgIDQxMywgIDQy
MSwgIDQxMCwgIDQyNywgIDQxNiwKLSAgICAgIDMxNiwgICAgMCwgICAgMCwgIDQxMCwgIDQyMCwg
IDQyMCwgICAgMCwgIDQwNSwgIDMxOSwgICAgMCwKLSAgICAgICAgMCwgIDQwNywgIDMyMiwgIDQw
OCwgIDQwMiwgIDQwMSwgIDQwMiwgIDQwMSwgIDMyNSwgICAgMCwKLSAgICAgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwgIDM5NywgIDM5OCwgIDQwMywgIDM5NCwgIDQwNywgIDQwMiwKLSAgICAgIDQw
MSwgIDM5MywgIDM5NywgIDM4OSwgIDM5MiwgIDM5NiwgIDQwMSwgIDM4NywgIDM5OSwgIDM5MCwK
LSAgICAgICAgMCwgICAgMCwgIDM5NiwgIDM4NSwgIDM4NSwgIDM5MCwgIDM4OSwgIDM4NiwgICAg
MCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgIDM3NiwgIDM4OCwgIDM5MCwgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgIDM3OCwgIDM3OSwgIDM3MywgIDM4MywgICAg
MCwgICAgMCwgICAgMCwgIDM3NCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDM4MSwKLQotICAgICAgICAwLCAgICAwLCAg
Mzc5LCAgMzc1LCAgICAwLCAgICAwLCAgICAwLCAgMzcxLCAgMzY3LCAgMzcyLAotICAgICAgMzYy
LCAgMzc1LCAgMzYxLCAgMzc0LCAgMzYzLCAgMzcwLCAgICAwLCAgMzY4LCAgMzcwLCAgMzU0LAot
ICAgICAgMzU2LCAgMzYyLCAgMzY4LCAgMzYzLCAgMzUxLCAgICAwLCAgMzUzLCAgICAwLCAgMzUy
LCAgMzU1LAotICAgICAgICAwLCAgMzQ0LCAgMzQzLCAgMzQzLCAgMzU2LCAgICAwLCAgMzU4LCAg
ICAwLCAgMzU3LCAgMzU2LAotICAgICAgMzQxLCAgMzU0LCAgMzQxLCAgICAwLCAgICAwLCAgMzQ0
LCAgICAwLCAgICAwLCAgMzM2LCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
MzMzLCAgMzQ0LCAgMzM3LCAgMzQzLCAgMzQwLCAgMzM1LAotICAgICAgMzI3LCAgMzM5LCAgICAw
LCAgICAwLCAgMzMyLCAgMzM5LCAgMzI4LCAgICAwLCAgMzM3LCAgMzM0LAotICAgICAgMzI0LCAg
MzI5LCAgMzMyLCAgICAwLCAgICAwLCAgMzMyLCAgICAwLCAgMzMwLCAgMzI5LCAgICAwLAotICAg
ICAgICAwLCAgMzI4LCAgMzE0LCAgMzI2LCAgICAwLCAgMzE3LCAgMzM4LCAgMzM3LCAgMzM2LCAg
MzA3LAotICAgICAgMzAzLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgMzI4LAotCi0gICAgICAxNjYsICAzMjUsICAzMTYsICAyOTksICAzMDgsICAzMTAs
ICAzMDYsICAzMDgsICAzMDcsICAzMDYsCi0gICAgICAzMDksICAzMDYsICAyNTYsICAyNTMsICAg
IDAsICAyMjgsICAyMzgsICAyMjIsICAyMzUsICAyMDMsCi0gICAgICAyMDcsICAyMDQsICAyMTIs
ICAxOTEsICAgIDAsICAyMDEsICAxNjUsICAxNjcsICAxNTMsICAxNjEsCi0gICAgICAgIDAsICAx
NzAsICAgIDAsICAxNzUsICAxNTEsICAxNDEsICAxMDAsICAxMTQsICAgNTksICAgIDAsCi0gICAg
ICAgIDAsICA1ODgsICAzNTksICAxMTMKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQxNl90IHl5X2RlZls0NDVdID0KLSAgICB7ICAgMCwKLSAgICAgIDQ0MiwgICAgMSwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MywgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0NCwKLSAgICAgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MywgIDQ0MiwKLSAgICAgIDQ0
MiwgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywK
LSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywKLQotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQy
LCAgNDQ0LCAgNDQyLCAgNDQyLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAot
ICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotCi0gICAgICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDMsCi0g
ICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAg
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsCi0KLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywK
LQotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgICAwLCAg
NDQyLCAgNDQyCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRb
NjU2XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDQsICAgIDUsICAgIDYsICAgIDcsICAgIDgsICAg
IDksICAgMTAsICAgMTEsICAgMTIsICAgMTMsCi0gICAgICAgMTQsICAgMTUsICAgMTYsICAgMTcs
ICAgMTgsICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksCi0gICAgICAgMTksICAgMjAsICAg
MjEsICAgMjIsICAgMjMsICAgMjQsICAgMjUsICAgMjYsICAgMjYsICAgMjYsCi0gICAgICAgMjYs
ICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjcsICAgMjgsICAgMjksICAgMzAsCi0g
ICAgICAgMzEsICAgMzIsICAgMzMsICAgMzQsICAgMzUsICAgMzYsICAgMzcsICAgMzgsICAgMjYs
ICAgMzksCi0gICAgICAgNDAsICAgNDEsICAgNDIsICAgNDMsICAgNDQsICAgNDUsICAgNDYsICAg
NDcsICAgNDgsICAgNDksCi0gICAgICAgMjYsICAgMjYsICAgMjYsICAgNTAsICAgNTEsICAgNTIs
ICAgNTMsICAgNTUsICAgNTYsICAgNTcsCi0gICAgICAgNjAsICAgNjIsICAgNjQsICAgNjQsICAg
NjQsICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNzcsCi0gICAgICAgNzgsICAgODIsICAgODMs
ICAxMTAsICAgNjMsICAgNjEsICAxMjksICAxMTEsICAgNTgsICAgNjYsCi0gICAgICAxMzAsICAg
NjcsICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAgNjgsICAgNjYsICAgODAsCi0KLSAg
ICAgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OSwgICA3Miwg
ICA4NCwKLSAgICAgIDExMiwgICA4NSwgICA3MCwgICA4MSwgIDE0MiwgICA4NiwgICA2OSwgIDIw
MywgIDQ0MSwgIDIwNCwKLSAgICAgICA2OSwgICA4NywgICA5NCwgIDExMywgICA5NSwgICA3Mywg
ICA5MCwgICA3NCwgICA3NSwgICA2OSwKLSAgICAgICA5MSwgICA4OCwgICA5NywgICA5NiwgICA4
OSwgICA5MiwgIDEwMywgICA3MCwgIDEzNSwgIDEwNiwKLSAgICAgICA5OCwgICA5MywgICA5OSwg
IDExNSwgIDEwNCwgIDEwMCwgIDEwNywgIDE2MiwgIDQ0MCwgIDExOSwKLSAgICAgIDEzMSwgIDEw
MSwgIDQzOSwgIDEwOCwgIDEzMiwgIDEwNSwgIDEyMCwgIDEyMSwgIDExNiwgIDEyNSwKLSAgICAg
IDE2MywgIDExNywgIDEyNiwgIDEzMywgIDE3NiwgIDE5OCwgIDEyMiwgIDEyMywgIDI2NCwgIDEy
NCwKLSAgICAgIDEyNywgIDQzOCwgIDE3NywgIDE5OSwgIDIxNiwgIDIxNywgIDI2NSwgIDEyOCwg
IDEzNiwgICA2NCwKLSAgICAgICA2NCwgICA2NCwgICA2NCwgICA2NCwgICA2NCwgICA2NCwgIDEz
OCwgIDEzOCwgIDEzOCwgIDEzOCwKLSAgICAgIDEzOCwgIDEzOCwgIDEzOCwgIDQzNywgIDE3MCwg
IDEzNywgIDE5MCwgIDE3MSwgIDE3MiwgIDQwNiwKLQotICAgICAgNDA3LCAgMTczLCAgMTM5LCAg
MTc0LCAgMjQyLCAgMjQzLCAgMjQ0LCAgNDM2LCAgMTM3LCAgNDM1LAotICAgICAgNDM0LCAgMTkx
LCAgNDMzLCAgNDMyLCAgIDY2LCAgMTM5LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LAotICAgICAg
IDY3LCAgIDY3LCAgIDY4LCAgIDY2LCAgNDMxLCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4
LAotICAgICAgIDY4LCAgIDY4LCAgIDY5LCAgMTQxLCAgMTQxLCAgMTQxLCAgMTQxLCAgMTQxLCAg
MTQxLCAgMTQxLAotICAgICAgNDMwLCAgIDY5LCAgMTQwLCAgNDI5LCAgMTQwLCAgIDY5LCAgNDI4
LCAgMTQxLCAgMTQxLCAgMTQxLAotICAgICAgMTQxLCAgMTQxLCAgMTQxLCAgMTQxLCAgIDY5LCAg
MjA2LCAgNDI3LCAgMjA2LCAgNDI2LCAgNDI1LAotICAgICAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3
LCAgMjA3LCAgMjA3LCAgMjA3LCAgMTM4LCAgMTM4LCAgMTM4LAotICAgICAgMTM4LCAgMTM4LCAg
MTM4LCAgMTM4LCAgMjY5LCAgMjcwLCAgMjcxLCAgNDI0LCAgNDIzLCAgMjA4LAotICAgICAgNDIy
LCAgMjA4LCAgNDIxLCAgMTM5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LAot
ICAgICAgMjA5LCAgMjc3LCAgMjc4LCAgMjc5LCAgNDIwLCAgNDE5LCAgMTM5LCAgMTQxLCAgMTQx
LCAgMTQxLAotCi0gICAgICAxNDEsICAxNDEsICAxNDEsICAxNDEsICAyMDcsICAyMDcsICAyMDcs
ICAyMDcsICAyMDcsICAyMDcsCi0gICAgICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAy
MDcsICAyMDcsICAyMDcsICAyMDksICAyMDksCi0gICAgICAyMDksICAyMDksICAyMDksICAyMDks
ICAyMDksICAyMDksICAyMDksICAyMDksICAyMDksICAyMDksCi0gICAgICAyMDksICAyMDksICAy
ODYsICAyODcsICAyODgsICAyOTMsICAyOTQsICAyOTUsICAyOTcsICAyOTgsCi0gICAgICAyOTks
ICAzMDUsICAzMDYsICAzMDcsICAzODcsICAzODgsICAzODksICA0MTgsICA0MTcsICA0MTYsCi0g
ICAgICA0MTUsICA0MTQsICA0MTMsICA0MTIsICA0MTEsICA0MTAsICA0MDksICAzOTAsICA0MDgs
ICAzOTEsCi0gICAgICAgNzksICAgNzksICA0MDUsICA0MDQsICA0MDMsICA0MDIsICA0MDEsICA0
MDAsICAzOTksICAzOTgsCi0gICAgICAzOTcsICAzOTYsICAzOTUsICAzOTQsICAzOTMsICAzOTIs
ICAzODYsICAzODUsICAzODQsICAzODMsCi0gICAgICAzODIsICAzODEsICAzODAsICAzNzksICAz
NzgsICAzNzcsICAzNzYsICAzNzUsICAzNzQsICAzNzMsCi0gICAgICAzNzIsICAzNzEsICAzNzAs
ICAzNjksICAzNjgsICAzNjcsICAzNjYsICAzNjUsICAzNjQsICAzNjMsCi0KLSAgICAgIDM2Miwg
IDM2MSwgIDM2MCwgIDM1OSwgIDM1OCwgIDM1NywgIDM1NiwgIDM1NSwgIDM1NCwgIDM1MywKLSAg
ICAgIDM1MiwgIDM1MSwgIDM1MCwgIDM0OSwgIDM0OCwgIDM0NywgIDM0NiwgIDM0NSwgIDM0NCwg
IDM0MywKLSAgICAgIDM0MiwgIDM0MSwgIDM0MCwgIDMzOSwgIDMzOCwgIDMzNywgIDMzNiwgIDMz
NSwgIDMzNCwgIDMzMywKLSAgICAgIDMzMiwgIDMzMSwgIDMzMCwgIDMyOSwgIDMyOCwgIDMyNywg
IDMyNiwgIDMyNSwgIDMyNCwgIDMyMywKLSAgICAgIDMyMiwgIDMyMSwgIDMyMCwgIDMxOSwgIDMx
OCwgIDMxNywgIDMxNiwgIDMxNSwgIDMxNCwgIDMxMywKLSAgICAgIDMxMiwgIDMxMSwgIDMxMCwg
IDMwOSwgIDMwOCwgIDMwNCwgIDMwMywgIDMwMiwgIDMwMSwgIDMwMCwKLSAgICAgIDI5NiwgIDI5
MiwgIDI5MSwgIDI5MCwgIDI4OSwgIDI4NSwgIDI4NCwgIDI4MywgIDI4MiwgIDI4MSwKLSAgICAg
IDI4MCwgIDI3NiwgIDI3NSwgIDI3NCwgIDI3MywgIDI3MiwgIDI2OCwgIDI2NywgIDI2NiwgIDI2
MywKLSAgICAgIDI2MiwgIDI2MSwgIDI2MCwgIDI1OSwgIDI1OCwgIDI1NywgIDI1NiwgIDI1NSwg
IDI1NCwgIDI1MywKLSAgICAgIDI1MiwgIDI1MSwgIDI1MCwgIDI0OSwgIDI0OCwgIDI0NywgIDI0
NiwgIDI0NSwgIDI0MSwgIDI0MCwKLQotICAgICAgMjM5LCAgMjM4LCAgMjM3LCAgMjM2LCAgMjM1
LCAgMjM0LCAgMjMzLCAgMjMyLCAgMjMxLCAgMjMwLAotICAgICAgMjI5LCAgMjI4LCAgMjI3LCAg
MjI2LCAgMjI1LCAgMjI0LCAgMjIzLCAgMjIyLCAgMjIxLCAgMjIwLAotICAgICAgMjE5LCAgMjE4
LCAgMjE1LCAgMjE0LCAgMjEzLCAgMjEyLCAgMjExLCAgMjEwLCAgMjA1LCAgMjAyLAotICAgICAg
MjAxLCAgMjAwLCAgMTk3LCAgMTk2LCAgMTk1LCAgMTk0LCAgMTkzLCAgMTkyLCAgMTg5LCAgMTg4
LAotICAgICAgMTg3LCAgMTg2LCAgMTg1LCAgMTg0LCAgMTgzLCAgMTgyLCAgMTgxLCAgMTgwLCAg
MTc5LCAgMTc4LAotICAgICAgMTc1LCAgMTY5LCAgMTY4LCAgMTY3LCAgMTY2LCAgMTY1LCAgMTY0
LCAgMTYxLCAgMTYwLCAgMTU5LAotICAgICAgMTU4LCAgMTU3LCAgMTU2LCAgMTU1LCAgMTU0LCAg
MTUzLCAgMTUyLCAgMTUxLCAgMTUwLCAgMTQ5LAotICAgICAgMTQ4LCAgMTQ3LCAgMTQ2LCAgMTQ1
LCAgMTQ0LCAgMTQzLCAgMTM0LCAgMTE4LCAgMTE0LCAgMTA5LAotICAgICAgMTAyLCAgIDc2LCAg
IDcxLCAgIDY1LCAgIDU5LCAgIDU0LCAgNDQyLCAgICAzLCAgNDQyLCAgNDQyLAotICAgICAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAot
Ci0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0
NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQxNl90IHl5X2Noa1s2NTZdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgOCwgICAgOCwgICAgOSwKLSAgICAgICAxMywgICAxNSwg
ICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAyNCwKLSAgICAgICAy
NCwgICAzMCwgICAzMCwgICA0MCwgICAxNSwgICAxMywgICA0NywgICA0MCwgICAgOSwgICAxOCwK
LSAgICAgICA0NywgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAx
OSwgICAyOSwKLQotICAgICAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5
LCAgIDE4LCAgIDIyLCAgIDMxLAotICAgICAgIDQxLCAgIDMxLCAgIDE4LCAgIDI5LCAgNDQ0LCAg
IDMxLCAgIDE5LCAgMTMzLCAgNDM5LCAgMTMzLAotICAgICAgIDE4LCAgIDMyLCAgIDM0LCAgIDQx
LCAgIDM0LCAgIDIyLCAgIDMzLCAgIDIyLCAgIDIyLCAgIDE5LAotICAgICAgIDMzLCAgIDMyLCAg
IDM1LCAgIDM0LCAgIDMyLCAgIDMzLCAgIDM3LCAgIDE4LCAgIDUxLCAgIDM4LAotICAgICAgIDM1
LCAgIDMzLCAgIDM1LCAgIDQzLCAgIDM3LCAgIDM1LCAgIDM4LCAgIDk5LCAgNDM4LCAgIDQ1LAot
ICAgICAgIDQ4LCAgIDM1LCAgNDM3LCAgIDM4LCAgIDQ4LCAgIDM3LCAgIDQ1LCAgIDQ1LCAgIDQz
LCAgIDQ2LAotICAgICAgIDk5LCAgIDQzLCAgIDQ2LCAgIDQ4LCAgMTA5LCAgMTI5LCAgIDQ1LCAg
IDQ1LCAgMTk4LCAgIDQ1LAotICAgICAgIDQ2LCAgNDM2LCAgMTA5LCAgMTI5LCAgMTUyLCAgMTUy
LCAgMTk4LCAgIDQ2LCAgIDUxLCAgIDY0LAotICAgICAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAg
IDY0LCAgIDY0LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LAotICAgICAgIDY2LCAgIDY2LCAgIDY2
LCAgNDM1LCAgMTA3LCAgIDY0LCAgMTIyLCAgMTA3LCAgMTA3LCAgNDAxLAotCi0gICAgICA0MDEs
ICAxMDcsICAgNjYsICAxMDcsICAxNzgsICAxNzgsICAxNzgsICA0MzQsICAgNjQsICA0MzIsCi0g
ICAgICA0MzAsICAxMjIsICA0MjksICA0MjgsICAgNjcsICAgNjYsICAgNjcsICAgNjcsICAgNjcs
ICAgNjcsCi0gICAgICAgNjcsICAgNjcsICAgNjcsICAgNjgsICA0MjcsICAgNjgsICAgNjgsICAg
NjgsICAgNjgsICAgNjgsCi0gICAgICAgNjgsICAgNjgsICAgNjcsICAxNDAsICAxNDAsICAxNDAs
ICAxNDAsICAxNDAsICAxNDAsICAxNDAsCi0gICAgICA0MjYsICAgNjgsICAgNjksICA0MjQsICAg
NjksICAgNjcsICA0MjMsICAgNjksICAgNjksICAgNjksCi0gICAgICAgNjksICAgNjksICAgNjks
ICAgNjksICAgNjgsICAxMzcsICA0MjIsICAxMzcsICA0MjEsICA0MjAsCi0gICAgICAxMzcsICAx
MzcsICAxMzcsICAxMzcsICAxMzcsICAxMzcsICAxMzcsICAxMzgsICAxMzgsICAxMzgsCi0gICAg
ICAxMzgsICAxMzgsICAxMzgsICAxMzgsICAyMDIsICAyMDIsICAyMDIsICA0MTksICA0MTgsICAx
MzksCi0gICAgICA0MTcsICAxMzksICA0MTYsICAxMzgsICAxMzksICAxMzksICAxMzksICAxMzks
ICAxMzksICAxMzksCi0gICAgICAxMzksICAyMTMsICAyMTMsICAyMTMsICA0MTQsICA0MTMsICAx
MzgsICAxNDEsICAxNDEsICAxNDEsCi0KLSAgICAgIDE0MSwgIDE0MSwgIDE0MSwgIDE0MSwgIDIw
NiwgIDIwNiwgIDIwNiwgIDIwNiwgIDIwNiwgIDIwNiwKLSAgICAgIDIwNiwgIDIwNywgIDIwNywg
IDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwOCwgIDIwOCwKLSAgICAgIDIwOCwgIDIw
OCwgIDIwOCwgIDIwOCwgIDIwOCwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwKLSAgICAg
IDIwOSwgIDIwOSwgIDIyMSwgIDIyMSwgIDIyMSwgIDIyOSwgIDIyOSwgIDIyOSwgIDIzMywgIDIz
MywKLSAgICAgIDIzMywgIDIzOSwgIDIzOSwgIDIzOSwgIDM3MiwgIDM3MiwgIDM3MiwgIDQxMiwg
IDQxMSwgIDQxMCwKLSAgICAgIDQwOSwgIDQwOCwgIDQwNywgIDQwNiwgIDQwNSwgIDQwNCwgIDQw
MywgIDM3MiwgIDQwMiwgIDM3MiwKLSAgICAgIDQ0MywgIDQ0MywgIDQwMCwgIDM5MSwgIDM5MCwg
IDM4OSwgIDM4OCwgIDM4NywgIDM4NiwgIDM4NCwKLSAgICAgIDM4MywgIDM4MiwgIDM3OSwgIDM3
OCwgIDM3NiwgIDM3MywgIDM3MSwgIDM3MCwgIDM2OSwgIDM2NywKLSAgICAgIDM2NiwgIDM2NSwg
IDM2MiwgIDM2MSwgIDM2MCwgIDM1OSwgIDM1OCwgIDM1NywgIDM1NiwgIDM1NSwKLSAgICAgIDM0
OSwgIDM0NiwgIDM0MywgIDM0MiwgIDM0MSwgIDM0MCwgIDMzOSwgIDMzNywgIDMzNSwgIDMzNCwK
LQotICAgICAgMzMzLCAgMzMyLCAgMzMwLCAgMzI5LCAgMzI3LCAgMzI1LCAgMzI0LCAgMzIzLCAg
MzIyLCAgMzIxLAotICAgICAgMzIwLCAgMzE5LCAgMzE4LCAgMzE2LCAgMzE1LCAgMzE0LCAgMzEz
LCAgMzEyLCAgMzExLCAgMzEwLAotICAgICAgMzA5LCAgMzA4LCAgMzA0LCAgMzAzLCAgMzAwLCAg
Mjg5LCAgMjg1LCAgMjg0LCAgMjgzLCAgMjgyLAotICAgICAgMjc1LCAgMjc0LCAgMjczLCAgMjY4
LCAgMjY3LCAgMjY2LCAgMjY1LCAgMjY0LCAgMjYzLCAgMjYwLAotICAgICAgMjU5LCAgMjU4LCAg
MjU3LCAgMjU2LCAgMjU1LCAgMjU0LCAgMjUzLCAgMjUyLCAgMjUxLCAgMjUwLAotICAgICAgMjQ5
LCAgMjQ4LCAgMjQ3LCAgMjQ2LCAgMjQ1LCAgMjM4LCAgMjM3LCAgMjM2LCAgMjM1LCAgMjM0LAot
ICAgICAgMjMyLCAgMjI4LCAgMjI2LCAgMjI1LCAgMjI0LCAgMjIwLCAgMjE5LCAgMjE4LCAgMjE3
LCAgMjE2LAotICAgICAgMjE1LCAgMjEyLCAgMjEwLCAgMjA1LCAgMjA0LCAgMjAzLCAgMjAxLCAg
MjAwLCAgMTk5LCAgMTk3LAotICAgICAgMTk2LCAgMTk1LCAgMTk0LCAgMTkzLCAgMTkyLCAgMTkx
LCAgMTkwLCAgMTg5LCAgMTg4LCAgMTg3LAotICAgICAgMTg2LCAgMTg1LCAgMTg0LCAgMTgzLCAg
MTgyLCAgMTgxLCAgMTgwLCAgMTc5LCAgMTc3LCAgMTc2LAotCi0gICAgICAxNzUsICAxNzQsICAx
NzMsICAxNzIsICAxNzEsICAxNzAsICAxNjksICAxNjgsICAxNjcsICAxNjYsCi0gICAgICAxNjUs
ICAxNjMsICAxNjIsICAxNjEsICAxNjAsICAxNTksICAxNTgsICAxNTcsICAxNTYsICAxNTUsCi0g
ICAgICAxNTQsICAxNTMsICAxNTEsICAxNTAsICAxNDksICAxNDgsICAxNDcsICAxNDYsICAxMzQs
ICAxMzIsCi0gICAgICAxMzEsICAxMzAsICAxMjgsICAxMjcsICAxMjYsICAxMjUsICAxMjQsICAx
MjMsICAxMjEsICAxMjAsCi0gICAgICAxMTksICAxMTgsICAxMTcsICAxMTYsICAxMTUsICAxMTQs
ICAxMTMsICAxMTIsICAxMTEsICAxMTAsCi0gICAgICAxMDgsICAxMDUsICAxMDQsICAxMDMsICAx
MDIsICAxMDEsICAxMDAsICAgOTgsICAgOTcsICAgOTYsCi0gICAgICAgOTUsICAgOTQsICAgOTMs
ICAgOTIsICAgOTEsICAgOTAsICAgODksICAgODgsICAgODcsICAgODYsCi0gICAgICAgODUsICAg
ODQsICAgODMsICAgODIsICAgNzgsICAgNzQsICAgNDksICAgNDQsICAgNDIsICAgMzksCi0gICAg
ICAgMzYsICAgMjMsICAgMjAsICAgMTcsICAgMTIsICAgIDcsICAgIDMsICA0NDIsICA0NDIsICA0
NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsCi0KLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MgotICAgIH0gOwotCi0vKiBUYWJs
ZSBvZiBib29sZWFucywgdHJ1ZSBpZiBydWxlIGNvdWxkIG1hdGNoIGVvbC4gKi8KLXN0YXRpYyB5
eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbMTQ4XSA9Ci0gICAgeyAg
IDAsCi0wLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAgICAgfTsKLQotLyogVGhlIGludGVudCBi
ZWhpbmQgdGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKLSAqIGFueSB1c2VzIG9m
IFJFSkVDVCB3aGljaCBmbGV4IG1pc3NlZC4KLSAqLwotI2RlZmluZSBSRUpFQ1QgcmVqZWN0X3Vz
ZWRfYnV0X25vdF9kZXRlY3RlZAotI2RlZmluZSB5eW1vcmUoKSB5eW1vcmVfdXNlZF9idXRfbm90
X2RldGVjdGVkCi0jZGVmaW5lIFlZX01PUkVfQURKIDAKLSNkZWZpbmUgWVlfUkVTVE9SRV9ZWV9N
T1JFX09GRlNFVAotLyoKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQot
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLVRoaXMgZmlsZSBjb250YWlucyB0
aGUgTGV4IHNwZWNpZmljYXRpb24gZm9yIEdMU0wgRVMuCi1CYXNlZCBvbiBBTlNJIEMgZ3JhbW1h
ciwgTGV4IHNwZWNpZmljYXRpb246Ci1odHRwOi8vd3d3Lmx5c2F0b3IubGl1LnNlL2MvQU5TSS1D
LWdyYW1tYXItbC5odG1sCi0KLUlGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQg
VE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaCwKLVdISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBM
RVhFUiAoZ2xzbGFuZ19sZXguY3BwKS4KLSovCi0KLSNpbmNsdWRlICJjb21waWxlci9nbHNsYW5n
LmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VDb250ZXh0LmgiCi0jaW5jbHVkZSAiY29tcGls
ZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvdXRpbC5oIgotI2lu
Y2x1ZGUgImdsc2xhbmdfdGFiLmgiCi0KLS8qIHdpbmRvd3Mgb25seSBwcmFnbWEgKi8KLSNpZmRl
ZiBfTVNDX1ZFUgotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0MTAyKQotI2VuZGlmCi0KLSNk
ZWZpbmUgWVlfVVNFUl9BQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgeXlsbG9jLT5maXJzdF9maWxlID0geXlsbG9jLT5sYXN0X2ZpbGUgPSB5eWNvbHVtbjsgXAot
ICAgIHl5bGxvYy0+Zmlyc3RfbGluZSA9IHl5bGxvYy0+bGFzdF9saW5lID0geXlsaW5lbm87Ci0K
LSNkZWZpbmUgWVlfSU5QVVQoYnVmLCByZXN1bHQsIG1heF9zaXplKSBcCi0gICAgcmVzdWx0ID0g
c3RyaW5nX2lucHV0KGJ1ZiwgbWF4X3NpemUsIHl5c2Nhbm5lcik7Ci0KLXN0YXRpYyB5eV9zaXpl
X3Qgc3RyaW5nX2lucHV0KGNoYXIqIGJ1ZiwgeXlfc2l6ZV90IG1heF9zaXplLCB5eXNjYW5fdCB5
eXNjYW5uZXIpOwotc3RhdGljIGludCBjaGVja190eXBlKHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci1z
dGF0aWMgaW50IHJlc2VydmVkX3dvcmQoeXlzY2FuX3QgeXlzY2FubmVyKTsKLXN0YXRpYyBpbnQg
aW50X2NvbnN0YW50KHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci1zdGF0aWMgaW50IGZsb2F0X2NvbnN0
YW50KHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0KLSNkZWZpbmUgSU5JVElBTCAwCi0KLSNkZWZpbmUg
WVlfRVhUUkFfVFlQRSBUUGFyc2VDb250ZXh0KgotCi0vKiBIb2xkcyB0aGUgZW50aXJlIHN0YXRl
IG9mIHRoZSByZWVudHJhbnQgc2Nhbm5lci4gKi8KLXN0cnVjdCB5eWd1dHNfdAotICAgIHsKLQot
ICAgIC8qIFVzZXItZGVmaW5lZC4gTm90IHRvdWNoZWQgYnkgZmxleC4gKi8KLSAgICBZWV9FWFRS
QV9UWVBFIHl5ZXh0cmFfcjsKLQotICAgIC8qIFRoZSByZXN0IGFyZSB0aGUgc2FtZSBhcyB0aGUg
Z2xvYmFscyBkZWNsYXJlZCBpbiB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLiAqLwotICAgIEZJ
TEUgKnl5aW5fciwgKnl5b3V0X3I7Ci0gICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja190b3A7IC8q
KjwgaW5kZXggb2YgdG9wIG9mIHN0YWNrLiAqLwotICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tf
bWF4OyAvKio8IGNhcGFjaXR5IG9mIHN0YWNrLiAqLwotICAgIFlZX0JVRkZFUl9TVEFURSAqIHl5
X2J1ZmZlcl9zdGFjazsgLyoqPCBTdGFjayBhcyBhbiBhcnJheS4gKi8KLSAgICBjaGFyIHl5X2hv
bGRfY2hhcjsKLSAgICB5eV9zaXplX3QgeXlfbl9jaGFyczsKLSAgICB5eV9zaXplX3QgeXlsZW5n
X3I7Ci0gICAgY2hhciAqeXlfY19idWZfcDsKLSAgICBpbnQgeXlfaW5pdDsKLSAgICBpbnQgeXlf
c3RhcnQ7Ci0gICAgaW50IHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZjsKLSAgICBpbnQgeXlf
c3RhcnRfc3RhY2tfcHRyOwotICAgIGludCB5eV9zdGFydF9zdGFja19kZXB0aDsKLSAgICBpbnQg
Knl5X3N0YXJ0X3N0YWNrOwotICAgIHl5X3N0YXRlX3R5cGUgeXlfbGFzdF9hY2NlcHRpbmdfc3Rh
dGU7Ci0gICAgY2hhciogeXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLQotICAgIGludCB5eWxpbmVu
b19yOwotICAgIGludCB5eV9mbGV4X2RlYnVnX3I7Ci0KLSAgICBjaGFyICp5eXRleHRfcjsKLSAg
ICBpbnQgeXlfbW9yZV9mbGFnOwotICAgIGludCB5eV9tb3JlX2xlbjsKLQotICAgIFlZU1RZUEUg
KiB5eWx2YWxfcjsKLQotICAgIFlZTFRZUEUgKiB5eWxsb2NfcjsKLQotICAgIH07IC8qIGVuZCBz
dHJ1Y3QgeXlndXRzX3QgKi8KLQotc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHl5c2Nhbl90
IHl5c2Nhbm5lciApOwotCi0gICAgLyogVGhpcyBtdXN0IGdvIGhlcmUgYmVjYXVzZSBZWVNUWVBF
IGFuZCBZWUxUWVBFIGFyZSBpbmNsdWRlZAotICAgICAqIGZyb20gYmlzb24gb3V0cHV0IGluIHNl
Y3Rpb24gMS4qLwotICAgICMgICAgZGVmaW5lIHl5bHZhbCB5eWctPnl5bHZhbF9yCi0gICAgCi0g
ICAgIyAgICBkZWZpbmUgeXlsbG9jIHl5Zy0+eXlsbG9jX3IKLSAgICAKLWludCB5eWxleF9pbml0
ICh5eXNjYW5fdCogc2Nhbm5lcik7Ci0KLWludCB5eWxleF9pbml0X2V4dHJhIChZWV9FWFRSQV9U
WVBFIHVzZXJfZGVmaW5lZCx5eXNjYW5fdCogc2Nhbm5lcik7Ci0KLS8qIEFjY2Vzc29yIG1ldGhv
ZHMgdG8gZ2xvYmFscy4KLSAgIFRoZXNlIGFyZSBtYWRlIHZpc2libGUgdG8gbm9uLXJlZW50cmFu
dCBzY2FubmVycyBmb3IgY29udmVuaWVuY2UuICovCi0KLWludCB5eWxleF9kZXN0cm95ICh5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKLQotaW50IHl5Z2V0X2RlYnVnICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKLQotdm9pZCB5eXNldF9kZWJ1ZyAoaW50IGRlYnVnX2ZsYWcgLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOwotCi1ZWV9FWFRSQV9UWVBFIHl5Z2V0X2V4dHJhICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
LQotdm9pZCB5eXNldF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQgLHl5c2Nhbl90
IHl5c2Nhbm5lciApOwotCi1GSUxFICp5eWdldF9pbiAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0K
LXZvaWQgeXlzZXRfaW4gIChGSUxFICogaW5fc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQot
RklMRSAqeXlnZXRfb3V0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCB5eXNldF9vdXQg
IChGSUxFICogb3V0X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXl5X3NpemVfdCB5eWdl
dF9sZW5nICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotY2hhciAqeXlnZXRfdGV4dCAoeXlzY2Fu
X3QgeXlzY2FubmVyICk7Ci0KLWludCB5eWdldF9saW5lbm8gKHl5c2Nhbl90IHl5c2Nhbm5lciAp
OwotCi12b2lkIHl5c2V0X2xpbmVubyAoaW50IGxpbmVfbnVtYmVyICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKLQotWVlTVFlQRSAqIHl5Z2V0X2x2YWwgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12
b2lkIHl5c2V0X2x2YWwgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0gLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOwotCi0gICAgICAgWVlMVFlQRSAqeXlnZXRfbGxvYyAoeXlzY2FuX3QgeXlzY2FubmVyICk7
Ci0gICAgCi0gICAgICAgIHZvaWQgeXlzZXRfbGxvYyAoWVlMVFlQRSAqIHl5bGxvY19wYXJhbSAs
eXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gICAgCi0vKiBNYWNyb3MgYWZ0ZXIgdGhpcyBwb2ludCBj
YW4gYWxsIGJlIG92ZXJyaWRkZW4gYnkgdXNlciBkZWZpbml0aW9ucyBpbgotICogc2VjdGlvbiAx
LgotICovCi0KLSNpZm5kZWYgWVlfU0tJUF9ZWVdSQVAKLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0
ZXJuICJDIiBpbnQgeXl3cmFwICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSNlbHNlCi1leHRlcm4g
aW50IHl5d3JhcCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWZu
ZGVmIHl5dGV4dF9wdHIKLXN0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciAqLHl5Y29u
c3QgY2hhciAqLGludCAseXlzY2FuX3QgeXlzY2FubmVyKTsKLSNlbmRpZgotCi0jaWZkZWYgWVlf
TkVFRF9TVFJMRU4KLXN0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqICx5
eXNjYW5fdCB5eXNjYW5uZXIpOwotI2VuZGlmCi0KLSNpZm5kZWYgWVlfTk9fSU5QVVQKLQotI2lm
ZGVmIF9fY3BsdXNwbHVzCi1zdGF0aWMgaW50IHl5aW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciAp
OwotI2Vsc2UKLXN0YXRpYyBpbnQgaW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotI2VuZGlm
Ci0KLSNlbmRpZgotCi0vKiBBbW91bnQgb2Ygc3R1ZmYgdG8gc2x1cnAgdXAgd2l0aCBlYWNoIHJl
YWQuICovCi0jaWZuZGVmIFlZX1JFQURfQlVGX1NJWkUKLSNkZWZpbmUgWVlfUkVBRF9CVUZfU0la
RSA4MTkyCi0jZW5kaWYKLQotLyogQ29weSB3aGF0ZXZlciB0aGUgbGFzdCBydWxlIG1hdGNoZWQg
dG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gKi8KLSNpZm5kZWYgRUNITwotLyogVGhpcyB1c2VkIHRv
IGJlIGFuIGZwdXRzKCksIGJ1dCBzaW5jZSB0aGUgc3RyaW5nIG1pZ2h0IGNvbnRhaW4gTlVMJ3Ms
Ci0gKiB3ZSBub3cgdXNlIGZ3cml0ZSgpLgotICovCi0jZGVmaW5lIEVDSE8gZndyaXRlKCB5eXRl
eHQsIHl5bGVuZywgMSwgeXlvdXQgKQotI2VuZGlmCi0KLS8qIEdldHMgaW5wdXQgYW5kIHN0dWZm
cyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVMTCwK
LSAqIGlzIHJldHVybmVkIGluICJyZXN1bHQiLgotICovCi0jaWZuZGVmIFlZX0lOUFVUCi0jZGVm
aW5lIFlZX0lOUFVUKGJ1ZixyZXN1bHQsbWF4X3NpemUpIFwKLQlpZiAoIFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCi0JCXsgXAotCQlpbnQgYyA9ICcqJzsg
XAotCQl5eV9zaXplX3QgbjsgXAotCQlmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKLQkJ
CSAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsrbiApIFwKLQkJ
CWJ1ZltuXSA9IChjaGFyKSBjOyBcCi0JCWlmICggYyA9PSAnXG4nICkgXAotCQkJYnVmW24rK10g
PSAoY2hhcikgYzsgXAotCQlpZiAoIGMgPT0gRU9GICYmIGZlcnJvciggeXlpbiApICkgXAotCQkJ
WVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCi0JCXJl
c3VsdCA9IG47IFwKLQkJfSBcCi0JZWxzZSBcCi0JCXsgXAotCQllcnJubz0wOyBcCi0JCXdoaWxl
ICggKHJlc3VsdCA9IGZyZWFkKGJ1ZiwgMSwgbWF4X3NpemUsIHl5aW4pKT09MCAmJiBmZXJyb3Io
eXlpbikpIFwKLQkJCXsgXAotCQkJaWYoIGVycm5vICE9IEVJTlRSKSBcCi0JCQkJeyBcCi0JCQkJ
WVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCi0JCQkJ
YnJlYWs7IFwKLQkJCQl9IFwKLQkJCWVycm5vPTA7IFwKLQkJCWNsZWFyZXJyKHl5aW4pOyBcCi0J
CQl9IFwKLQkJfVwKLVwKLQotI2VuZGlmCi0KLS8qIE5vIHNlbWktY29sb24gYWZ0ZXIgcmV0dXJu
OyBjb3JyZWN0IHVzYWdlIGlzIHRvIHdyaXRlICJ5eXRlcm1pbmF0ZSgpOyIgLQotICogd2UgZG9u
J3Qgd2FudCBhbiBleHRyYSAnOycgYWZ0ZXIgdGhlICJyZXR1cm4iIGJlY2F1c2UgdGhhdCB3aWxs
IGNhdXNlCi0gKiBzb21lIGNvbXBpbGVycyB0byBjb21wbGFpbiBhYm91dCB1bnJlYWNoYWJsZSBz
dGF0ZW1lbnRzLgotICovCi0jaWZuZGVmIHl5dGVybWluYXRlCi0jZGVmaW5lIHl5dGVybWluYXRl
KCkgcmV0dXJuIFlZX05VTEwKLSNlbmRpZgotCi0vKiBOdW1iZXIgb2YgZW50cmllcyBieSB3aGlj
aCBzdGFydC1jb25kaXRpb24gc3RhY2sgZ3Jvd3MuICovCi0jaWZuZGVmIFlZX1NUQVJUX1NUQUNL
X0lOQ1IKLSNkZWZpbmUgWVlfU1RBUlRfU1RBQ0tfSU5DUiAyNQotI2VuZGlmCi0KLS8qIFJlcG9y
dCBhIGZhdGFsIGVycm9yLiAqLwotI2lmbmRlZiBZWV9GQVRBTF9FUlJPUgotI2RlZmluZSBZWV9G
QVRBTF9FUlJPUihtc2cpIHl5X2ZhdGFsX2Vycm9yKCBtc2cgLCB5eXNjYW5uZXIpCi0jZW5kaWYK
LQotLyogZW5kIHRhYmxlcyBzZXJpYWxpemF0aW9uIHN0cnVjdHVyZXMgYW5kIHByb3RvdHlwZXMg
Ki8KLQotLyogRGVmYXVsdCBkZWNsYXJhdGlvbiBvZiBnZW5lcmF0ZWQgc2Nhbm5lciAtIGEgZGVm
aW5lIHNvIHRoZSB1c2VyIGNhbgotICogZWFzaWx5IGFkZCBwYXJhbWV0ZXJzLgotICovCi0jaWZu
ZGVmIFlZX0RFQ0wKLSNkZWZpbmUgWVlfREVDTF9JU19PVVJTIDEKLQotZXh0ZXJuIGludCB5eWxl
eCBcCi0gICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSxZWUxUWVBFICogeXls
bG9jX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotCi0jZGVmaW5lIFlZX0RFQ0wgaW50IHl5
bGV4IFwKLSAgICAgICAgICAgICAgIChZWVNUWVBFICogeXlsdmFsX3BhcmFtLCBZWUxUWVBFICog
eXlsbG9jX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQotI2VuZGlmIC8qICFZWV9ERUNMICov
Ci0KLS8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHJ1bGUsIGFmdGVy
IHl5dGV4dCBhbmQgeXlsZW5nCi0gKiBoYXZlIGJlZW4gc2V0IHVwLgotICovCi0jaWZuZGVmIFlZ
X1VTRVJfQUNUSU9OCi0jZGVmaW5lIFlZX1VTRVJfQUNUSU9OCi0jZW5kaWYKLQotLyogQ29kZSBl
eGVjdXRlZCBhdCB0aGUgZW5kIG9mIGVhY2ggcnVsZS4gKi8KLSNpZm5kZWYgWVlfQlJFQUsKLSNk
ZWZpbmUgWVlfQlJFQUsgYnJlYWs7Ci0jZW5kaWYKLQotI2RlZmluZSBZWV9SVUxFX1NFVFVQIFwK
LQlZWV9VU0VSX0FDVElPTgotCi0vKiogVGhlIG1haW4gc2Nhbm5lciBmdW5jdGlvbiB3aGljaCBk
b2VzIGFsbCB0aGUgd29yay4KLSAqLwotWVlfREVDTAotewotCXJlZ2lzdGVyIHl5X3N0YXRlX3R5
cGUgeXlfY3VycmVudF9zdGF0ZTsKLQlyZWdpc3RlciBjaGFyICp5eV9jcCwgKnl5X2JwOwotCXJl
Z2lzdGVyIGludCB5eV9hY3Q7Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgeXlsdmFsID0geXlsdmFsX3BhcmFtOwotCi0gICAg
eXlsbG9jID0geXlsbG9jX3BhcmFtOwotCi0JaWYgKCAheXlnLT55eV9pbml0ICkKLQkJewotCQl5
eWctPnl5X2luaXQgPSAxOwotCi0jaWZkZWYgWVlfVVNFUl9JTklUCi0JCVlZX1VTRVJfSU5JVDsK
LSNlbmRpZgotCi0JCWlmICggISB5eWctPnl5X3N0YXJ0ICkKLQkJCXl5Zy0+eXlfc3RhcnQgPSAx
OwkvKiBmaXJzdCBzdGFydCBzdGF0ZSAqLwotCi0JCWlmICggISB5eWluICkKLQkJCXl5aW4gPSBz
dGRpbjsKLQotCQlpZiAoICEgeXlvdXQgKQotCQkJeXlvdXQgPSBzdGRvdXQ7Ci0KLQkJaWYgKCAh
IFlZX0NVUlJFTlRfQlVGRkVSICkgewotCQkJeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5u
ZXIpOwotCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KLQkJCQl5eV9jcmVhdGVfYnVmZmVy
KHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7Ci0JCX0KLQotCQl5eV9sb2FkX2J1ZmZlcl9z
dGF0ZSh5eXNjYW5uZXIgKTsKLQkJfQotCi0Jd2hpbGUgKCAxICkJCS8qIGxvb3BzIHVudGlsIGVu
ZC1vZi1maWxlIGlzIHJlYWNoZWQgKi8KLQkJewotCQl5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsK
LQotCQkvKiBTdXBwb3J0IG9mIHl5dGV4dC4gKi8KLQkJKnl5X2NwID0geXlnLT55eV9ob2xkX2No
YXI7Ci0KLQkJLyogeXlfYnAgcG9pbnRzIHRvIHRoZSBwb3NpdGlvbiBpbiB5eV9jaF9idWYgb2Yg
dGhlIHN0YXJ0IG9mCi0JCSAqIHRoZSBjdXJyZW50IHJ1bi4KLQkJICovCi0JCXl5X2JwID0geXlf
Y3A7Ci0KLQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7Ci15eV9tYXRjaDoKLQkJ
ZG8KLQkJCXsKLQkJCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IHl5X2VjW1lZX1NDX1RPX1VJKCp5
eV9jcCldOwotCQkJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQotCQkJCXsKLQkJ
CQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKLQkJCQl5
eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKLQkJCQl9Ci0JCQl3aGlsZSAoIHl5
X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0
ZSApCi0JCQkJewotCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVu
dF9zdGF0ZV07Ci0JCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ0MyApCi0JCQkJCXl5X2Mg
PSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwotCQkJCX0KLQkJCXl5X2N1cnJlbnRfc3Rh
dGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5
X2NdOwotCQkJKyt5eV9jcDsKLQkJCX0KLQkJd2hpbGUgKCB5eV9jdXJyZW50X3N0YXRlICE9IDQ0
MiApOwotCQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLQkJeXlfY3VycmVu
dF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0KLXl5X2ZpbmRfYWN0aW9u
OgotCQl5eV9hY3QgPSB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV07Ci0KLQkJWVlfRE9fQkVG
T1JFX0FDVElPTjsKLQotCQlpZiAoIHl5X2FjdCAhPSBZWV9FTkRfT0ZfQlVGRkVSICYmIHl5X3J1
bGVfY2FuX21hdGNoX2VvbFt5eV9hY3RdICkKLQkJCXsKLQkJCXl5X3NpemVfdCB5eWw7Ci0JCQlm
b3IgKCB5eWwgPSAwOyB5eWwgPCB5eWxlbmc7ICsreXlsICkKLQkJCQlpZiAoIHl5dGV4dFt5eWxd
ID09ICdcbicgKQotCQkJCQkgICAKLSAgICBkb3sgeXlsaW5lbm8rKzsKLSAgICAgICAgeXljb2x1
bW49MDsKLSAgICB9d2hpbGUoMCkKLTsKLQkJCX0KLQotZG9fYWN0aW9uOgkvKiBUaGlzIGxhYmVs
IGlzIHVzZWQgb25seSB0byBhY2Nlc3MgRU9GIGFjdGlvbnMuICovCi0KLQkJc3dpdGNoICggeXlf
YWN0ICkKLQl7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dpdGNoICovCi0JCQljYXNlIDA6IC8q
IG11c3QgYmFjayB1cCAqLwotCQkJLyogdW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVf
QUNUSU9OICovCi0JCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLQkJCXl5X2NwID0geXln
LT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwotCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlf
bGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0JCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOwotCi1jYXNlIDE6
Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBJTlZBUklBTlQ7IH0KLQlZWV9CUkVBSwotY2FzZSAy
OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSElHSF9QUkVDSVNJT047IH0KLQlZWV9CUkVBSwot
Y2FzZSAzOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gTUVESVVNX1BSRUNJU0lPTjsgfQotCVlZ
X0JSRUFLCi1jYXNlIDQ6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBMT1dfUFJFQ0lTSU9OOyB9
Ci0JWVlfQlJFQUsKLWNhc2UgNToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFBSRUNJU0lPTjsg
fQotCVlZX0JSRUFLCi1jYXNlIDY6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBBVFRSSUJVVEU7
IH0KLQlZWV9CUkVBSwotY2FzZSA3OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gQ09OU1RfUVVB
TDsgfQotCVlZX0JSRUFLCi1jYXNlIDg6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBVTklGT1JN
OyB9Ci0JWVlfQlJFQUsKLWNhc2UgOToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFZBUllJTkc7
IH0KLQlZWV9CUkVBSwotY2FzZSAxMDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEJSRUFLOyB9
Ci0JWVlfQlJFQUsKLWNhc2UgMTE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBDT05USU5VRTsg
fQotCVlZX0JSRUFLCi1jYXNlIDEyOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gRE87IH0KLQlZ
WV9CUkVBSwotY2FzZSAxMzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEZPUjsgfQotCVlZX0JS
RUFLCi1jYXNlIDE0OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gV0hJTEU7IH0KLQlZWV9CUkVB
SwotY2FzZSAxNToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElGOyB9Ci0JWVlfQlJFQUsKLWNh
c2UgMTY6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBFTFNFOyB9Ci0JWVlfQlJFQUsKLWNhc2Ug
MTc6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBJTl9RVUFMOyB9Ci0JWVlfQlJFQUsKLWNhc2Ug
MTg6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBPVVRfUVVBTDsgfQotCVlZX0JSRUFLCi1jYXNl
IDE5OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSU5PVVRfUVVBTDsgfQotCVlZX0JSRUFLCi1j
YXNlIDIwOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gRkxPQVRfVFlQRTsgfQotCVlZX0JSRUFL
Ci1jYXNlIDIxOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSU5UX1RZUEU7IH0KLQlZWV9CUkVB
SwotY2FzZSAyMjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFZPSURfVFlQRTsgfQotCVlZX0JS
RUFLCi1jYXNlIDIzOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gQk9PTF9UWVBFOyB9Ci0JWVlf
QlJFQUsKLWNhc2UgMjQ6Ci1ZWV9SVUxFX1NFVFVQCi17IHl5bHZhbC0+bGV4LmIgPSB0cnVlOyAg
cmV0dXJuIEJPT0xDT05TVEFOVDsgfQotCVlZX0JSRUFLCi1jYXNlIDI1OgotWVlfUlVMRV9TRVRV
UAoteyB5eWx2YWwtPmxleC5iID0gZmFsc2U7IHJldHVybiBCT09MQ09OU1RBTlQ7IH0KLQlZWV9C
UkVBSwotY2FzZSAyNjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIERJU0NBUkQ7IH0KLQlZWV9C
UkVBSwotY2FzZSAyNzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFJFVFVSTjsgfQotCVlZX0JS
RUFLCi1jYXNlIDI4OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gTUFUUklYMjsgfQotCVlZX0JS
RUFLCi1jYXNlIDI5OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gTUFUUklYMzsgfQotCVlZX0JS
RUFLCi1jYXNlIDMwOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gTUFUUklYNDsgfQotCVlZX0JS
RUFLCi1jYXNlIDMxOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gVkVDMjsgfQotCVlZX0JSRUFL
Ci1jYXNlIDMyOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gVkVDMzsgfQotCVlZX0JSRUFLCi1j
YXNlIDMzOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gVkVDNDsgfQotCVlZX0JSRUFLCi1jYXNl
IDM0OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSVZFQzI7IH0KLQlZWV9CUkVBSwotY2FzZSAz
NToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElWRUMzOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMzY6
Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBJVkVDNDsgfQotCVlZX0JSRUFLCi1jYXNlIDM3Ogot
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gQlZFQzI7IH0KLQlZWV9CUkVBSwotY2FzZSAzODoKLVlZ
X1JVTEVfU0VUVVAKLXsgcmV0dXJuIEJWRUMzOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMzk6Ci1ZWV9S
VUxFX1NFVFVQCi17IHJldHVybiBCVkVDNDsgfQotCVlZX0JSRUFLCi1jYXNlIDQwOgotWVlfUlVM
RV9TRVRVUAoteyByZXR1cm4gU0FNUExFUjJEOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNDE6Ci1ZWV9S
VUxFX1NFVFVQCi17IHJldHVybiBTQU1QTEVSQ1VCRTsgfQotCVlZX0JSRUFLCi1jYXNlIDQyOgot
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gU0FNUExFUl9FWFRFUk5BTF9PRVM7IH0KLQlZWV9CUkVB
SwotY2FzZSA0MzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFNBTVBMRVIyRFJFQ1Q7IH0KLQlZ
WV9CUkVBSwotY2FzZSA0NDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFNUUlVDVDsgfQotCVlZ
X0JSRUFLCi1jYXNlIDQ1OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNDY6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA0NzoKLVlZX1JV
TEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFL
Ci1jYXNlIDQ4OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNDk6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA1MDoKLVlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNl
IDUxOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0JWVlfQlJFQUsKLWNhc2UgNTI6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA1MzoKLVlZX1JVTEVfU0VUVVAKLXsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDU0Ogot
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlf
QlJFQUsKLWNhc2UgNTU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA1NjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDU3OgotWVlfUlVM
RV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsK
LWNhc2UgNTg6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KLQlZWV9CUkVBSwotY2FzZSA1OToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDYwOgotWVlfUlVMRV9TRVRV
UAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2Ug
NjE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
LQlZWV9CUkVBSwotY2FzZSA2MjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDYzOgotWVlfUlVMRV9TRVRVUAoteyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNjQ6Ci1Z
WV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9C
UkVBSwotY2FzZSA2NToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDY2OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNjc6Ci1ZWV9SVUxF
X1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwot
Y2FzZSA2ODoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQotCVlZX0JSRUFLCi1jYXNlIDY5OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNzA6Ci1ZWV9SVUxFX1NFVFVQ
Ci17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA3
MToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQot
CVlZX0JSRUFLCi1jYXNlIDcyOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNzM6Ci1ZWV9SVUxFX1NFVFVQCi17IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA3NDoKLVlZ
X1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JS
RUFLCi1jYXNlIDc1OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNzY6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA3NzoKLVlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1j
YXNlIDc4OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0JWVlfQlJFQUsKLWNhc2UgNzk6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA4MDoKLVlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDgx
OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0J
WVlfQlJFQUsKLWNhc2UgODI6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA4MzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDg0OgotWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJF
QUsKLWNhc2UgODU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA4NjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDg3OgotWVlfUlVMRV9T
RVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNh
c2UgODg6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KLQlZWV9CUkVBSwotY2FzZSA4OToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDkwOgotWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgOTE6
Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZ
WV9CUkVBSwotY2FzZSA5MjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDkzOgotWVlfUlVMRV9TRVRVUAotewotICAg
eXlsdmFsLT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsgCi0gICByZXR1cm4g
Y2hlY2tfdHlwZSh5eXNjYW5uZXIpOwotfQotCVlZX0JSRUFLCi1jYXNlIDk0OgotWVlfUlVMRV9T
RVRVUAoteyByZXR1cm4gaW50X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2Fz
ZSA5NToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIGludF9jb25zdGFudCh5eXNjYW5uZXIpOyB9
Ci0JWVlfQlJFQUsKLWNhc2UgOTY6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBpbnRfY29uc3Rh
bnQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDk3OgotWVlfUlVMRV9TRVRVUAoteyBy
ZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDk4Ogot
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQotCVlZ
X0JSRUFLCi1jYXNlIDk5OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gZmxvYXRfY29uc3RhbnQo
eXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDEwMDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0
dXJuIEFERF9BU1NJR047IH0KLQlZWV9CUkVBSwotY2FzZSAxMDE6Ci1ZWV9SVUxFX1NFVFVQCi17
IHJldHVybiBTVUJfQVNTSUdOOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTAyOgotWVlfUlVMRV9TRVRV
UAoteyByZXR1cm4gTVVMX0FTU0lHTjsgfQotCVlZX0JSRUFLCi1jYXNlIDEwMzoKLVlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIERJVl9BU1NJR047IH0KLQlZWV9CUkVBSwotY2FzZSAxMDQ6Ci1ZWV9S
VUxFX1NFVFVQCi17IHJldHVybiBNT0RfQVNTSUdOOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTA1Ogot
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gTEVGVF9BU1NJR047IH0KLQlZWV9CUkVBSwotY2FzZSAx
MDY6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBSSUdIVF9BU1NJR047IH0KLQlZWV9CUkVBSwot
Y2FzZSAxMDc6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBBTkRfQVNTSUdOOyB9Ci0JWVlfQlJF
QUsKLWNhc2UgMTA4OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gWE9SX0FTU0lHTjsgfQotCVlZ
X0JSRUFLCi1jYXNlIDEwOToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIE9SX0FTU0lHTjsgfQot
CVlZX0JSRUFLCi1jYXNlIDExMDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElOQ19PUDsgfQot
CVlZX0JSRUFLCi1jYXNlIDExMToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIERFQ19PUDsgfQot
CVlZX0JSRUFLCi1jYXNlIDExMjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEFORF9PUDsgfQot
CVlZX0JSRUFLCi1jYXNlIDExMzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIE9SX09QOyB9Ci0J
WVlfQlJFQUsKLWNhc2UgMTE0OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gWE9SX09QOyB9Ci0J
WVlfQlJFQUsKLWNhc2UgMTE1OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gTEVfT1A7IH0KLQlZ
WV9CUkVBSwotY2FzZSAxMTY6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBHRV9PUDsgfQotCVlZ
X0JSRUFLCi1jYXNlIDExNzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEVRX09QOyB9Ci0JWVlf
QlJFQUsKLWNhc2UgMTE4OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gTkVfT1A7IH0KLQlZWV9C
UkVBSwotY2FzZSAxMTk6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBMRUZUX09QOyB9Ci0JWVlf
QlJFQUsKLWNhc2UgMTIwOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gUklHSFRfT1A7IH0KLQlZ
WV9CUkVBSwotY2FzZSAxMjE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBTRU1JQ09MT047IH0K
LQlZWV9CUkVBSwotY2FzZSAxMjI6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBMRUZUX0JSQUNF
OyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTIzOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gUklHSFRf
QlJBQ0U7IH0KLQlZWV9CUkVBSwotY2FzZSAxMjQ6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBD
T01NQTsgfQotCVlZX0JSRUFLCi1jYXNlIDEyNToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIENP
TE9OOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTI2OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gRVFV
QUw7IH0KLQlZWV9CUkVBSwotY2FzZSAxMjc6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBMRUZU
X1BBUkVOOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTI4OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4g
UklHSFRfUEFSRU47IH0KLQlZWV9CUkVBSwotY2FzZSAxMjk6Ci1ZWV9SVUxFX1NFVFVQCi17IHJl
dHVybiBMRUZUX0JSQUNLRVQ7IH0KLQlZWV9CUkVBSwotY2FzZSAxMzA6Ci1ZWV9SVUxFX1NFVFVQ
Ci17IHJldHVybiBSSUdIVF9CUkFDS0VUOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTMxOgotWVlfUlVM
RV9TRVRVUAoteyByZXR1cm4gRE9UOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTMyOgotWVlfUlVMRV9T
RVRVUAoteyByZXR1cm4gQkFORzsgfQotCVlZX0JSRUFLCi1jYXNlIDEzMzoKLVlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIERBU0g7IH0KLQlZWV9CUkVBSwotY2FzZSAxMzQ6Ci1ZWV9SVUxFX1NFVFVQ
Ci17IHJldHVybiBUSUxERTsgfQotCVlZX0JSRUFLCi1jYXNlIDEzNToKLVlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIFBMVVM7IH0KLQlZWV9CUkVBSwotY2FzZSAxMzY6Ci1ZWV9SVUxFX1NFVFVQCi17
IHJldHVybiBTVEFSOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTM3OgotWVlfUlVMRV9TRVRVUAoteyBy
ZXR1cm4gU0xBU0g7IH0KLQlZWV9CUkVBSwotY2FzZSAxMzg6Ci1ZWV9SVUxFX1NFVFVQCi17IHJl
dHVybiBQRVJDRU5UOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTM5OgotWVlfUlVMRV9TRVRVUAoteyBy
ZXR1cm4gTEVGVF9BTkdMRTsgfQotCVlZX0JSRUFLCi1jYXNlIDE0MDoKLVlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIFJJR0hUX0FOR0xFOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTQxOgotWVlfUlVMRV9T
RVRVUAoteyByZXR1cm4gVkVSVElDQUxfQkFSOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTQyOgotWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4gQ0FSRVQ7IH0KLQlZWV9CUkVBSwotY2FzZSAxNDM6Ci1ZWV9S
VUxFX1NFVFVQCi17IHJldHVybiBBTVBFUlNBTkQ7IH0KLQlZWV9CUkVBSwotY2FzZSAxNDQ6Ci1Z
WV9SVUxFX1NFVFVQCi17IHJldHVybiBRVUVTVElPTjsgfQotCVlZX0JSRUFLCi1jYXNlIDE0NToK
LS8qIHJ1bGUgMTQ1IGNhbiBtYXRjaCBlb2wgKi8KLVlZX1JVTEVfU0VUVVAKLXsgfQotCVlZX0JS
RUFLCi1jYXNlIFlZX1NUQVRFX0VPRihJTklUSUFMKToKLXsgeXl0ZXJtaW5hdGUoKTsgfQotCVlZ
X0JSRUFLCi1jYXNlIDE0NjoKLVlZX1JVTEVfU0VUVVAKLXsgYXNzZXJ0KGZhbHNlKTsgcmV0dXJu
IDA7IH0KLQlZWV9CUkVBSwotY2FzZSAxNDc6Ci1ZWV9SVUxFX1NFVFVQCi1FQ0hPOwotCVlZX0JS
RUFLCi0KLQljYXNlIFlZX0VORF9PRl9CVUZGRVI6Ci0JCXsKLQkJLyogQW1vdW50IG9mIHRleHQg
bWF0Y2hlZCBub3QgaW5jbHVkaW5nIHRoZSBFT0IgY2hhci4gKi8KLQkJaW50IHl5X2Ftb3VudF9v
Zl9tYXRjaGVkX3RleHQgPSAoaW50KSAoeXlfY3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsKLQot
CQkvKiBVbmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04uICovCi0JCSp5eV9j
cCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotCQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCi0KLQkJ
aWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVG
RkVSX05FVyApCi0JCQl7Ci0JCQkvKiBXZSdyZSBzY2FubmluZyBhIG5ldyBmaWxlIG9yIGlucHV0
IHNvdXJjZS4gIEl0J3MKLQkJCSAqIHBvc3NpYmxlIHRoYXQgdGhpcyBoYXBwZW5lZCBiZWNhdXNl
IHRoZSB1c2VyCi0JCQkgKiBqdXN0IHBvaW50ZWQgeXlpbiBhdCBhIG5ldyBzb3VyY2UgYW5kIGNh
bGxlZAotCQkJICogeXlsZXgoKS4gIElmIHNvLCB0aGVuIHdlIGhhdmUgdG8gYXNzdXJlCi0JCQkg
KiBjb25zaXN0ZW5jeSBiZXR3ZWVuIFlZX0NVUlJFTlRfQlVGRkVSIGFuZCBvdXIKLQkJCSAqIGds
b2JhbHMuICBIZXJlIGlzIHRoZSByaWdodCBwbGFjZSB0byBkbyBzbywgYmVjYXVzZQotCQkJICog
dGhpcyBpcyB0aGUgZmlyc3QgYWN0aW9uIChvdGhlciB0aGFuIHBvc3NpYmx5IGEKLQkJCSAqIGJh
Y2stdXApIHRoYXQgd2lsbCBtYXRjaCBmb3IgdGhlIG5ldyBpbnB1dCBzb3VyY2UuCi0JCQkgKi8K
LQkJCXl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFy
czsKLQkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZSA9IHl5aW47Ci0J
CQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJf
Tk9STUFMOwotCQkJfQotCi0JCS8qIE5vdGUgdGhhdCBoZXJlIHdlIHRlc3QgZm9yIHl5X2NfYnVm
X3AgIjw9IiB0byB0aGUgcG9zaXRpb24KLQkJICogb2YgdGhlIGZpcnN0IEVPQiBpbiB0aGUgYnVm
ZmVyLCBzaW5jZSB5eV9jX2J1Zl9wIHdpbGwKLQkJICogYWxyZWFkeSBoYXZlIGJlZW4gaW5jcmVt
ZW50ZWQgcGFzdCB0aGUgTlVMIGNoYXJhY3RlcgotCQkgKiAoc2luY2UgYWxsIHN0YXRlcyBtYWtl
IHRyYW5zaXRpb25zIG9uIEVPQiB0byB0aGUKLQkJICogZW5kLW9mLWJ1ZmZlciBzdGF0ZSkuICBD
b250cmFzdCB0aGlzIHdpdGggdGhlIHRlc3QKLQkJICogaW4gaW5wdXQoKS4KLQkJICovCi0JCWlm
ICggeXlnLT55eV9jX2J1Zl9wIDw9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1
Zlt5eWctPnl5X25fY2hhcnNdICkKLQkJCXsgLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLwot
CQkJeXlfc3RhdGVfdHlwZSB5eV9uZXh0X3N0YXRlOwotCi0JCQl5eWctPnl5X2NfYnVmX3AgPSB5
eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OwotCi0JCQl5eV9jdXJy
ZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKLQotCQkJLyog
T2theSwgd2UncmUgbm93IHBvc2l0aW9uZWQgdG8gbWFrZSB0aGUgTlVMCi0JCQkgKiB0cmFuc2l0
aW9uLiAgV2UgY291bGRuJ3QgaGF2ZQotCQkJICogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCkgZ28g
YWhlYWQgYW5kIGRvIGl0Ci0JCQkgKiBmb3IgdXMgYmVjYXVzZSBpdCBkb2Vzbid0IGtub3cgaG93
IHRvIGRlYWwKLQkJCSAqIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIGphbW1pbmcgKGFuZCB3ZSBk
b24ndAotCQkJICogd2FudCB0byBidWlsZCBqYW1taW5nIGludG8gaXQgYmVjYXVzZSB0aGVuIGl0
Ci0JCQkgKiB3aWxsIHJ1biBtb3JlIHNsb3dseSkuCi0JCQkgKi8KLQotCQkJeXlfbmV4dF9zdGF0
ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5uZXIpOwotCi0J
CQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOwotCi0JCQlpZiAoIHl5X25l
eHRfc3RhdGUgKQotCQkJCXsKLQkJCQkvKiBDb25zdW1lIHRoZSBOVUwuICovCi0JCQkJeXlfY3Ag
PSArK3l5Zy0+eXlfY19idWZfcDsKLQkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbmV4dF9zdGF0
ZTsKLQkJCQlnb3RvIHl5X21hdGNoOwotCQkJCX0KLQotCQkJZWxzZQotCQkJCXsKLQkJCQl5eV9j
cCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLQkJCQl5eV9jdXJyZW50X3N0YXRlID0g
eXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLQkJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOwot
CQkJCX0KLQkJCX0KLQotCQllbHNlIHN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2Fu
bmVyICkgKQotCQkJewotCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgotCQkJCXsKLQkJCQl5
eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDA7Ci0KLQkJCQlpZiAoIHl5d3JhcCh5
eXNjYW5uZXIgKSApCi0JCQkJCXsKLQkJCQkJLyogTm90ZTogYmVjYXVzZSB3ZSd2ZSB0YWtlbiBj
YXJlIGluCi0JCQkJCSAqIHl5X2dldF9uZXh0X2J1ZmZlcigpIHRvIGhhdmUgc2V0IHVwCi0JCQkJ
CSAqIHl5dGV4dCwgd2UgY2FuIG5vdyBzZXQgdXAKLQkJCQkJICogeXlfY19idWZfcCBzbyB0aGF0
IGlmIHNvbWUgdG90YWwKLQkJCQkJICogaG9zZXIgKGxpa2UgZmxleCBpdHNlbGYpIHdhbnRzIHRv
Ci0JCQkJCSAqIGNhbGwgdGhlIHNjYW5uZXIgYWZ0ZXIgd2UgcmV0dXJuIHRoZQotCQkJCQkgKiBZ
WV9OVUxMLCBpdCdsbCBzdGlsbCB3b3JrIC0gYW5vdGhlcgotCQkJCQkgKiBZWV9OVUxMIHdpbGwg
Z2V0IHJldHVybmVkLgotCQkJCQkgKi8KLQkJCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRl
eHRfcHRyICsgWVlfTU9SRV9BREo7Ci0KLQkJCQkJeXlfYWN0ID0gWVlfU1RBVEVfRU9GKFlZX1NU
QVJUKTsKLQkJCQkJZ290byBkb19hY3Rpb247Ci0JCQkJCX0KLQotCQkJCWVsc2UKLQkJCQkJewot
CQkJCQlpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQotCQkJCQkJWVlf
TkVXX0ZJTEU7Ci0JCQkJCX0KLQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCWNhc2UgRU9CX0FDVF9D
T05USU5VRV9TQ0FOOgotCQkJCXl5Zy0+eXlfY19idWZfcCA9Ci0JCQkJCXl5Zy0+eXl0ZXh0X3B0
ciArIHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7Ci0KLQkJCQl5eV9jdXJyZW50X3N0YXRlID0g
eXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKLQotCQkJCXl5X2NwID0geXlnLT55
eV9jX2J1Zl9wOwotCQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7Ci0J
CQkJZ290byB5eV9tYXRjaDsKLQotCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6Ci0JCQkJeXln
LT55eV9jX2J1Zl9wID0KLQkJCQkmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZb
eXlnLT55eV9uX2NoYXJzXTsKLQotCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlv
dXNfc3RhdGUoIHl5c2Nhbm5lciApOwotCi0JCQkJeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7Ci0J
CQkJeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKLQkJCQlnb3RvIHl5X2Zp
bmRfYWN0aW9uOwotCQkJfQotCQlicmVhazsKLQkJfQotCi0JZGVmYXVsdDoKLQkJWVlfRkFUQUxf
RVJST1IoCi0JCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1ubyBhY3Rpb24g
Zm91bmQiICk7Ci0JfSAvKiBlbmQgb2YgYWN0aW9uIHN3aXRjaCAqLwotCQl9IC8qIGVuZCBvZiBz
Y2FubmluZyBvbmUgdG9rZW4gKi8KLX0gLyogZW5kIG9mIHl5bGV4ICovCi0KLS8qIHl5X2dldF9u
ZXh0X2J1ZmZlciAtIHRyeSB0byByZWFkIGluIGEgbmV3IGJ1ZmZlcgotICoKLSAqIFJldHVybnMg
YSBjb2RlIHJlcHJlc2VudGluZyBhbiBhY3Rpb246Ci0gKglFT0JfQUNUX0xBU1RfTUFUQ0ggLQot
ICoJRU9CX0FDVF9DT05USU5VRV9TQ0FOIC0gY29udGludWUgc2Nhbm5pbmcgZnJvbSBjdXJyZW50
IHBvc2l0aW9uCi0gKglFT0JfQUNUX0VORF9PRl9GSUxFIC0gZW5kIG9mIGZpbGUKLSAqLwotc3Rh
dGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBz
dHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0JcmVn
aXN0ZXIgY2hhciAqZGVzdCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmOwot
CXJlZ2lzdGVyIGNoYXIgKnNvdXJjZSA9IHl5Zy0+eXl0ZXh0X3B0cjsKLQlyZWdpc3RlciBpbnQg
bnVtYmVyX3RvX21vdmUsIGk7Ci0JaW50IHJldF92YWw7Ci0KLQlpZiAoIHl5Zy0+eXlfY19idWZf
cCA+ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMg
KyAxXSApCi0JCVlZX0ZBVEFMX0VSUk9SKAotCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFs
IGVycm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKLQotCWlmICggWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9maWxsX2J1ZmZlciA9PSAwICkKLQkJeyAvKiBEb24ndCB0cnkgdG8gZmls
bCB0aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4gKi8KLQkJaWYgKCB5eWctPnl5X2NfYnVm
X3AgLSB5eWctPnl5dGV4dF9wdHIgLSBZWV9NT1JFX0FESiA9PSAxICkKLQkJCXsKLQkJCS8qIFdl
IG1hdGNoZWQgYSBzaW5nbGUgY2hhcmFjdGVyLCB0aGUgRU9CLCBzbwotCQkJICogdHJlYXQgdGhp
cyBhcyBhIGZpbmFsIEVPRi4KLQkJCSAqLwotCQkJcmV0dXJuIEVPQl9BQ1RfRU5EX09GX0ZJTEU7
Ci0JCQl9Ci0KLQkJZWxzZQotCQkJewotCQkJLyogV2UgbWF0Y2hlZCBzb21lIHRleHQgcHJpb3Ig
dG8gdGhlIEVPQiwgZmlyc3QKLQkJCSAqIHByb2Nlc3MgaXQuCi0JCQkgKi8KLQkJCXJldHVybiBF
T0JfQUNUX0xBU1RfTUFUQ0g7Ci0JCQl9Ci0JCX0KLQotCS8qIFRyeSB0byByZWFkIG1vcmUgZGF0
YS4gKi8KLQotCS8qIEZpcnN0IG1vdmUgbGFzdCBjaGFycyB0byBzdGFydCBvZiBidWZmZXIuICov
Ci0JbnVtYmVyX3RvX21vdmUgPSAoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRf
cHRyKSAtIDE7Ci0KLQlmb3IgKCBpID0gMDsgaSA8IG51bWJlcl90b19tb3ZlOyArK2kgKQotCQkq
KGRlc3QrKykgPSAqKHNvdXJjZSsrKTsKLQotCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9FT0ZfUEVORElORyApCi0JCS8qIGRvbid0
IGRvIHRoZSByZWFkLCBpdCdzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiBhbiBFT0YsCi0JCSAq
IGp1c3QgZm9yY2UgYW4gRU9GCi0JCSAqLwotCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnMgPSAwOwotCi0JZWxzZQotCQl7Ci0JCQl5eV9zaXpl
X3QgbnVtX3RvX3JlYWQgPQotCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6
ZSAtIG51bWJlcl90b19tb3ZlIC0gMTsKLQotCQl3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQot
CQkJeyAvKiBOb3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQuICovCi0KLQkJ
CS8qIGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciAqLwotCQkJWVlf
QlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUjsKLQotCQkJaW50IHl5X2NfYnVmX3Bf
b2Zmc2V0ID0KLQkJCQkoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0gYi0+eXlfY2hfYnVmKTsKLQot
CQkJaWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKLQkJCQl7Ci0JCQkJeXlfc2l6ZV90IG5ld19z
aXplID0gYi0+eXlfYnVmX3NpemUgKiAyOwotCi0JCQkJaWYgKCBuZXdfc2l6ZSA8PSAwICkKLQkJ
CQkJYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVmX3NpemUgLyA4OwotCQkJCWVsc2UKLQkJCQkJ
Yi0+eXlfYnVmX3NpemUgKj0gMjsKLQotCQkJCWItPnl5X2NoX2J1ZiA9IChjaGFyICopCi0JCQkJ
CS8qIEluY2x1ZGUgcm9vbSBpbiBmb3IgMiBFT0IgY2hhcnMuICovCi0JCQkJCXl5cmVhbGxvYygo
dm9pZCAqKSBiLT55eV9jaF9idWYsYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKLQkJ
CQl9Ci0JCQllbHNlCi0JCQkJLyogQ2FuJ3QgZ3JvdyBpdCwgd2UgZG9uJ3Qgb3duIGl0LiAqLwot
CQkJCWItPnl5X2NoX2J1ZiA9IDA7Ci0KLQkJCWlmICggISBiLT55eV9jaF9idWYgKQotCQkJCVlZ
X0ZBVEFMX0VSUk9SKAotCQkJCSJmYXRhbCBlcnJvciAtIHNjYW5uZXIgaW5wdXQgYnVmZmVyIG92
ZXJmbG93IiApOwotCi0JCQl5eWctPnl5X2NfYnVmX3AgPSAmYi0+eXlfY2hfYnVmW3l5X2NfYnVm
X3Bfb2Zmc2V0XTsKLQotCQkJbnVtX3RvX3JlYWQgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2J1Zl9zaXplIC0KLQkJCQkJCW51bWJlcl90b19tb3ZlIC0gMTsKLQotCQkJfQotCi0JCWlm
ICggbnVtX3RvX3JlYWQgPiBZWV9SRUFEX0JVRl9TSVpFICkKLQkJCW51bV90b19yZWFkID0gWVlf
UkVBRF9CVUZfU0laRTsKLQotCQkvKiBSZWFkIGluIG1vcmUgZGF0YS4gKi8KLQkJWVlfSU5QVVQo
ICgmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbbnVtYmVyX3RvX21vdmVdKSwK
LQkJCXl5Zy0+eXlfbl9jaGFycywgbnVtX3RvX3JlYWQgKTsKLQotCQlZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0JCX0KLQotCWlmICggeXln
LT55eV9uX2NoYXJzID09IDAgKQotCQl7Ci0JCWlmICggbnVtYmVyX3RvX21vdmUgPT0gWVlfTU9S
RV9BREogKQotCQkJewotCQkJcmV0X3ZhbCA9IEVPQl9BQ1RfRU5EX09GX0ZJTEU7Ci0JCQl5eXJl
c3RhcnQoeXlpbiAgLHl5c2Nhbm5lcik7Ci0JCQl9Ci0KLQkJZWxzZQotCQkJewotCQkJcmV0X3Zh
bCA9IEVPQl9BQ1RfTEFTVF9NQVRDSDsKLQkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
YnVmZmVyX3N0YXR1cyA9Ci0JCQkJWVlfQlVGRkVSX0VPRl9QRU5ESU5HOwotCQkJfQotCQl9Ci0K
LQllbHNlCi0JCXJldF92YWwgPSBFT0JfQUNUX0NPTlRJTlVFX1NDQU47Ci0KLQlpZiAoKHl5X3Np
emVfdCkgKHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlKSA+IFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfYnVmX3NpemUpIHsKLQkJLyogRXh0ZW5kIHRoZSBhcnJheSBieSA1MCUs
IHBsdXMgdGhlIG51bWJlciB3ZSByZWFsbHkgbmVlZC4gKi8KLQkJeXlfc2l6ZV90IG5ld19zaXpl
ID0geXlnLT55eV9uX2NoYXJzICsgbnVtYmVyX3RvX21vdmUgKyAoeXlnLT55eV9uX2NoYXJzID4+
IDEpOwotCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiA9IChjaGFyICopIHl5
cmVhbGxvYygodm9pZCAqKSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZixuZXdf
c2l6ZSAseXlzY2FubmVyICk7Ci0JCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2NoX2J1ZiApCi0JCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5
eV9nZXRfbmV4dF9idWZmZXIoKSIgKTsKLQl9Ci0KLQl5eWctPnl5X25fY2hhcnMgKz0gbnVtYmVy
X3RvX21vdmU7Ci0JWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9u
X2NoYXJzXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hB
UjsKLQotCXl5Zy0+eXl0ZXh0X3B0ciA9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2No
X2J1ZlswXTsKLQotCXJldHVybiByZXRfdmFsOwotfQotCi0vKiB5eV9nZXRfcHJldmlvdXNfc3Rh
dGUgLSBnZXQgdGhlIHN0YXRlIGp1c3QgYmVmb3JlIHRoZSBFT0IgY2hhciB3YXMgcmVhY2hlZCAq
LwotCi0gICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRlICh5eXNj
YW5fdCB5eXNjYW5uZXIpCi17Ci0JcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0
YXRlOwotCXJlZ2lzdGVyIGNoYXIgKnl5X2NwOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWct
Pnl5X3N0YXJ0OwotCi0JZm9yICggeXlfY3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FE
SjsgeXlfY3AgPCB5eWctPnl5X2NfYnVmX3A7ICsreXlfY3AgKQotCQl7Ci0JCXJlZ2lzdGVyIFlZ
X0NIQVIgeXlfYyA9ICgqeXlfY3AgPyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSA6IDEpOwot
CQlpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCi0JCQl7Ci0JCQl5eWctPnl5X2xh
c3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKLQkJCXl5Zy0+eXlfbGFzdF9h
Y2NlcHRpbmdfY3BvcyA9IHl5X2NwOwotCQkJfQotCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5
X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0JCQl7Ci0JCQl5
eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotCQkJaWYg
KCB5eV9jdXJyZW50X3N0YXRlID49IDQ0MyApCi0JCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVk
IGludCkgeXlfY107Ci0JCQl9Ci0JCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5
eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwotCQl9Ci0KLQlyZXR1cm4g
eXlfY3VycmVudF9zdGF0ZTsKLX0KLQotLyogeXlfdHJ5X05VTF90cmFucyAtIHRyeSB0byBtYWtl
IGEgdHJhbnNpdGlvbiBvbiB0aGUgTlVMIGNoYXJhY3RlcgotICoKLSAqIHN5bm9wc2lzCi0gKglu
ZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggY3VycmVudF9zdGF0ZSApOwotICovCi0gICAg
c3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAgKHl5X3N0YXRlX3R5cGUgeXlf
Y3VycmVudF9zdGF0ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLQlyZWdpc3RlciBpbnQgeXlf
aXNfamFtOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsgLyogVGhpcyB2YXIgbWF5IGJlIHVudXNlZCBkZXBlbmRpbmcgdXBvbiBvcHRpb25z
LiAqLwotCXJlZ2lzdGVyIGNoYXIgKnl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwotCi0JcmVnaXN0
ZXIgWVlfQ0hBUiB5eV9jID0gMTsKLQlpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSAp
Ci0JCXsKLQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7
Ci0JCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOwotCQl9Ci0Jd2hpbGUgKCB5
eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3Rh
dGUgKQotCQl7Ci0JCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9z
dGF0ZV07Ci0JCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NDMgKQotCQkJeXlfYyA9IHl5X21l
dGFbKHVuc2lnbmVkIGludCkgeXlfY107Ci0JCX0KLQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0
W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKLQl5eV9p
c19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9PSA0NDIpOwotCi0JcmV0dXJuIHl5X2lzX2phbSA/
IDAgOiB5eV9jdXJyZW50X3N0YXRlOwotfQotCi0jaWZuZGVmIFlZX05PX0lOUFVUCi0jaWZkZWYg
X19jcGx1c3BsdXMKLSAgICBzdGF0aWMgaW50IHl5aW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lcikK
LSNlbHNlCi0gICAgc3RhdGljIGludCBpbnB1dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLSNlbmRp
ZgotCi17Ci0JaW50IGM7Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOwotCi0JKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFy
OwotCi0JaWYgKCAqeXlnLT55eV9jX2J1Zl9wID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCi0J
CXsKLQkJLyogeXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2FudCB0
byByZXR1cm4uCi0JCSAqIElmIHRoaXMgb2NjdXJzICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFjdGVy
cywgdGhlbiBpdCdzIGEKLQkJICogdmFsaWQgTlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0IHRo
ZSBlbmQgb2YgdGhlIGJ1ZmZlci4KLQkJICovCi0JCWlmICggeXlnLT55eV9jX2J1Zl9wIDwgJllZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQotCQkJ
LyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLwotCQkJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7
Ci0KLQkJZWxzZQotCQkJeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8KLQkJCXl5X3NpemVfdCBvZmZz
ZXQgPSB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHI7Ci0JCQkrK3l5Zy0+eXlfY19i
dWZfcDsKLQotCQkJc3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCi0J
CQkJewotCQkJCWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgotCQkJCQkvKiBUaGlzIGhhcHBlbnMg
YmVjYXVzZSB5eV9nX25fYigpCi0JCQkJCSAqIHNlZXMgdGhhdCB3ZSd2ZSBhY2N1bXVsYXRlZCBh
Ci0JCQkJCSAqIHRva2VuIGFuZCBmbGFncyB0aGF0IHdlIG5lZWQgdG8KLQkJCQkJICogdHJ5IG1h
dGNoaW5nIHRoZSB0b2tlbiBiZWZvcmUKLQkJCQkJICogcHJvY2VlZGluZy4gIEJ1dCBmb3IgaW5w
dXQoKSwKLQkJCQkJICogdGhlcmUncyBubyBtYXRjaGluZyB0byBjb25zaWRlci4KLQkJCQkJICog
U28gY29udmVydCB0aGUgRU9CX0FDVF9MQVNUX01BVENICi0JCQkJCSAqIHRvIEVPQl9BQ1RfRU5E
X09GX0ZJTEUuCi0JCQkJCSAqLwotCi0JCQkJCS8qIFJlc2V0IGJ1ZmZlciBzdGF0dXMuICovCi0J
CQkJCXl5cmVzdGFydCh5eWluICx5eXNjYW5uZXIpOwotCi0JCQkJCS8qRkFMTFRIUk9VR0gqLwot
Ci0JCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgotCQkJCQl7Ci0JCQkJCWlmICggeXl3cmFw
KHl5c2Nhbm5lciApICkKLQkJCQkJCXJldHVybiBFT0Y7Ci0KLQkJCQkJaWYgKCAhIHl5Zy0+eXlf
ZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKLQkJCQkJCVlZX05FV19GSUxFOwotI2lmZGVmIF9f
Y3BsdXNwbHVzCi0JCQkJCXJldHVybiB5eWlucHV0KHl5c2Nhbm5lcik7Ci0jZWxzZQotCQkJCQly
ZXR1cm4gaW5wdXQoeXlzY2FubmVyKTsKLSNlbmRpZgotCQkJCQl9Ci0KLQkJCQljYXNlIEVPQl9B
Q1RfQ09OVElOVUVfU0NBTjoKLQkJCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRy
ICsgb2Zmc2V0OwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCWMgPSAqKHVuc2ln
bmVkIGNoYXIgKikgeXlnLT55eV9jX2J1Zl9wOwkvKiBjYXN0IGZvciA4LWJpdCBjaGFyJ3MgKi8K
LQkqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsJLyogcHJlc2VydmUgeXl0ZXh0ICovCi0JeXlnLT55
eV9ob2xkX2NoYXIgPSAqKyt5eWctPnl5X2NfYnVmX3A7Ci0KLQlpZiAoIGMgPT0gJ1xuJyApCi0J
CSAgIAotICAgIGRveyB5eWxpbmVubysrOwotICAgICAgICB5eWNvbHVtbj0wOwotICAgIH13aGls
ZSgwKQotOwotCi0JcmV0dXJuIGM7Ci19Ci0jZW5kaWYJLyogaWZuZGVmIFlZX05PX0lOUFVUICov
Ci0KLS8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgc3RyZWFtLgot
ICogQHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCi0gKiBAcGFyYW0geXlzY2Fu
bmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEBub3RlIFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qg
cmVzZXQgdGhlIHN0YXJ0IGNvbmRpdGlvbiB0byBAYyBJTklUSUFMIC4KLSAqLwotICAgIHZvaWQg
eXlyZXN0YXJ0ICAoRklMRSAqIGlucHV0X2ZpbGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0g
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwot
Ci0JaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7Ci0gICAgICAgIHl5ZW5zdXJlX2J1ZmZlcl9z
dGFjayAoeXlzY2FubmVyKTsKLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KLSAgICAgICAg
ICAgIHl5X2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsKLQl9Ci0K
LQl5eV9pbml0X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUixpbnB1dF9maWxlICx5eXNjYW5uZXIp
OwotCXl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotfQotCi0vKiogU3dpdGNoIHRv
IGEgZGlmZmVyZW50IGlucHV0IGJ1ZmZlci4KLSAqIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcg
aW5wdXQgYnVmZmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0g
Ki8KLSAgICB2b2lkIHl5X3N3aXRjaF90b19idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIG5ld19i
dWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0JLyogVE9ETy4gV2Ugc2hvdWxkIGJl
IGFibGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5Ci0JICogd2l0aAotCSAq
CQl5eXBvcF9idWZmZXJfc3RhdGUoKTsKLQkgKgkJeXlwdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVm
ZmVyKTsKLSAgICAgKi8KLQl5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7Ci0JaWYg
KCBZWV9DVVJSRU5UX0JVRkZFUiA9PSBuZXdfYnVmZmVyICkKLQkJcmV0dXJuOwotCi0JaWYgKCBZ
WV9DVVJSRU5UX0JVRkZFUiApCi0JCXsKLQkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBv
bGQgYnVmZmVyLiAqLwotCQkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7Ci0J
CVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsK
LQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJz
OwotCQl9Ci0KLQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOwotCXl5X2xv
YWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotCi0JLyogV2UgZG9uJ3QgYWN0dWFsbHkga25v
dyB3aGV0aGVyIHdlIGRpZCB0aGlzIHN3aXRjaCBkdXJpbmcKLQkgKiBFT0YgKHl5d3JhcCgpKSBw
cm9jZXNzaW5nLCBidXQgdGhlIG9ubHkgdGltZSB0aGlzIGZsYWcKLQkgKiBpcyBsb29rZWQgYXQg
aXMgYWZ0ZXIgeXl3cmFwKCkgaXMgY2FsbGVkLCBzbyBpdCdzIHNhZmUKLQkgKiB0byBnbyBhaGVh
ZCBhbmQgYWx3YXlzIHNldCBpdC4KLQkgKi8KLQl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29u
X2VvZiA9IDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHl5X2xvYWRfYnVmZmVyX3N0YXRlICAoeXlzY2Fu
X3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKLQl5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X25fY2hhcnM7Ci0JeXlnLT55eXRleHRfcHRyID0geXlnLT55eV9jX2J1Zl9wID0g
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zOwotCXl5aW4gPSBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGU7Ci0JeXlnLT55eV9ob2xkX2NoYXIgPSAqeXln
LT55eV9jX2J1Zl9wOwotfQotCi0vKiogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gaW5wdXQg
YnVmZmVyIHN0YXRlLgotICogQHBhcmFtIGZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCi0gKiBAcGFy
YW0gc2l6ZSBUaGUgY2hhcmFjdGVyIGJ1ZmZlciBzaXplIGluIGJ5dGVzLiBXaGVuIGluIGRvdWJ0
LCB1c2UgQGMgWVlfQlVGX1NJWkUuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9i
amVjdC4KLSAqIEByZXR1cm4gdGhlIGFsbG9jYXRlZCBidWZmZXIgc3RhdGUuCi0gKi8KLSAgICBZ
WV9CVUZGRVJfU1RBVEUgeXlfY3JlYXRlX2J1ZmZlciAgKEZJTEUgKiBmaWxlLCBpbnQgIHNpemUg
LCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0JWVlfQlVGRkVSX1NUQVRFIGI7Ci0gICAgCi0JYiA9
IChZWV9CVUZGRVJfU1RBVEUpIHl5YWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRl
ICkgLHl5c2Nhbm5lciApOwotCWlmICggISBiICkKLQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2Yg
ZHluYW1pYyBtZW1vcnkgaW4geXlfY3JlYXRlX2J1ZmZlcigpIiApOwotCi0JYi0+eXlfYnVmX3Np
emUgPSBzaXplOwotCi0JLyogeXlfY2hfYnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2Vy
IHRoYW4gdGhlIHNpemUgZ2l2ZW4gYmVjYXVzZQotCSAqIHdlIG5lZWQgdG8gcHV0IGluIDIgZW5k
LW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLgotCSAqLwotCWItPnl5X2NoX2J1ZiA9IChjaGFyICopIHl5
YWxsb2MoYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKLQlpZiAoICEgYi0+eXlfY2hf
YnVmICkKLQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfY3Jl
YXRlX2J1ZmZlcigpIiApOwotCi0JYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7Ci0KLQl5eV9pbml0
X2J1ZmZlcihiLGZpbGUgLHl5c2Nhbm5lcik7Ci0KLQlyZXR1cm4gYjsKLX0KLQotLyoqIERlc3Ry
b3kgdGhlIGJ1ZmZlci4KLSAqIEBwYXJhbSBiIGEgYnVmZmVyIGNyZWF0ZWQgd2l0aCB5eV9jcmVh
dGVfYnVmZmVyKCkKLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICov
Ci0gICAgdm9pZCB5eV9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOwotCi0JaWYgKCAhIGIgKQotCQlyZXR1cm47Ci0KLQlpZiAoIGIgPT0g
WVlfQ1VSUkVOVF9CVUZGRVIgKSAvKiBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgcG9wIGhlcmUuICov
Ci0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IChZWV9CVUZGRVJfU1RBVEUpIDA7Ci0KLQlp
ZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQotCQl5eWZyZWUoKHZvaWQgKikgYi0+eXlfY2hfYnVm
ICx5eXNjYW5uZXIgKTsKLQotCXl5ZnJlZSgodm9pZCAqKSBiICx5eXNjYW5uZXIgKTsKLX0KLQot
LyogSW5pdGlhbGl6ZXMgb3IgcmVpbml0aWFsaXplcyBhIGJ1ZmZlci4KLSAqIFRoaXMgZnVuY3Rp
b24gaXMgc29tZXRpbWVzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSBidWZmZXIs
Ci0gKiBzdWNoIGFzIGR1cmluZyBhIHl5cmVzdGFydCgpIG9yIGF0IEVPRi4KLSAqLwotICAgIHN0
YXRpYyB2b2lkIHl5X2luaXRfYnVmZmVyICAoWVlfQlVGRkVSX1NUQVRFICBiLCBGSUxFICogZmls
ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLQotewotCWludCBvZXJybm8gPSBlcnJubzsKLSAgICBz
dHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLQl5
eV9mbHVzaF9idWZmZXIoYiAseXlzY2FubmVyKTsKLQotCWItPnl5X2lucHV0X2ZpbGUgPSBmaWxl
OwotCWItPnl5X2ZpbGxfYnVmZmVyID0gMTsKLQotICAgIC8qIElmIGIgaXMgdGhlIGN1cnJlbnQg
YnVmZmVyLCB0aGVuIHl5X2luaXRfYnVmZmVyIHdhcyBfcHJvYmFibHlfCi0gICAgICogY2FsbGVk
IGZyb20geXlyZXN0YXJ0KCkgb3IgdGhyb3VnaCB5eV9nZXRfbmV4dF9idWZmZXIuCi0gICAgICog
SW4gdGhhdCBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIHJlc2V0IHRoZSBsaW5lbm8gb3IgY29sdW1u
LgotICAgICAqLwotICAgIGlmIChiICE9IFlZX0NVUlJFTlRfQlVGRkVSKXsKLSAgICAgICAgYi0+
eXlfYnNfbGluZW5vID0gMTsKLSAgICAgICAgYi0+eXlfYnNfY29sdW1uID0gMDsKLSAgICB9Ci0K
LSAgICAgICAgYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAwOwotICAgIAotCWVycm5vID0gb2Vycm5v
OwotfQotCi0vKiogRGlzY2FyZCBhbGwgYnVmZmVyZWQgY2hhcmFjdGVycy4gT24gdGhlIG5leHQg
c2NhbiwgWVlfSU5QVVQgd2lsbCBiZSBjYWxsZWQuCi0gKiBAcGFyYW0gYiB0aGUgYnVmZmVyIHN0
YXRlIHRvIGJlIGZsdXNoZWQsIHVzdWFsbHkgQGMgWVlfQ1VSUkVOVF9CVUZGRVIuCi0gKiBAcGFy
YW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotICAgIHZvaWQgeXlfZmx1c2hf
YnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCWlm
ICggISBiICkKLQkJcmV0dXJuOwotCi0JYi0+eXlfbl9jaGFycyA9IDA7Ci0KLQkvKiBXZSBhbHdh
eXMgbmVlZCB0d28gZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLiAgVGhlIGZpcnN0IGNhdXNlcwot
CSAqIGEgdHJhbnNpdGlvbiB0byB0aGUgZW5kLW9mLWJ1ZmZlciBzdGF0ZS4gIFRoZSBzZWNvbmQg
Y2F1c2VzCi0JICogYSBqYW0gaW4gdGhhdCBzdGF0ZS4KLQkgKi8KLQliLT55eV9jaF9idWZbMF0g
PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0JYi0+eXlfY2hfYnVmWzFdID0gWVlfRU5EX09GX0JV
RkZFUl9DSEFSOwotCi0JYi0+eXlfYnVmX3BvcyA9ICZiLT55eV9jaF9idWZbMF07Ci0KLQliLT55
eV9hdF9ib2wgPSAxOwotCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOwotCi0J
aWYgKCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkKLQkJeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlz
Y2FubmVyICk7Ci19Ci0KLS8qKiBQdXNoZXMgdGhlIG5ldyBzdGF0ZSBvbnRvIHRoZSBzdGFjay4g
VGhlIG5ldyBzdGF0ZSBiZWNvbWVzCi0gKiAgdGhlIGN1cnJlbnQgc3RhdGUuIFRoaXMgZnVuY3Rp
b24gd2lsbCBhbGxvY2F0ZSB0aGUgc3RhY2sKLSAqICBpZiBuZWNlc3NhcnkuCi0gKiAgQHBhcmFt
IG5ld19idWZmZXIgVGhlIG5ldyBzdGF0ZS4KLSAqICBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2Fu
bmVyIG9iamVjdC4KLSAqLwotdm9pZCB5eXB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RB
VEUgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0JaWYgKG5ld19idWZmZXIg
PT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JeXllbnN1cmVfYnVmZmVyX3N0YWNrKHl5c2Nhbm5lcik7
Ci0KLQkvKiBUaGlzIGJsb2NrIGlzIGNvcGllZCBmcm9tIHl5X3N3aXRjaF90b19idWZmZXIuICov
Ci0JaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCi0JCXsKLQkJLyogRmx1c2ggb3V0IGluZm9ybWF0
aW9uIGZvciBvbGQgYnVmZmVyLiAqLwotCQkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xk
X2NoYXI7Ci0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlf
Y19idWZfcDsKLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55
eV9uX2NoYXJzOwotCQl9Ci0KLQkvKiBPbmx5IHB1c2ggaWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNl
LCByZXBsYWNlIHRvcC4gKi8KLQlpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpCi0JCXl5Zy0+eXlfYnVm
ZmVyX3N0YWNrX3RvcCsrOwotCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7
Ci0KLQkvKiBjb3BpZWQgZnJvbSB5eV9zd2l0Y2hfdG9fYnVmZmVyLiAqLwotCXl5X2xvYWRfYnVm
ZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9m
ID0gMTsKLX0KLQotLyoqIFJlbW92ZXMgYW5kIGRlbGV0ZXMgdGhlIHRvcCBvZiB0aGUgc3RhY2ss
IGlmIHByZXNlbnQuCi0gKiAgVGhlIG5leHQgZWxlbWVudCBiZWNvbWVzIHRoZSBuZXcgdG9wLgot
ICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi12b2lkIHl5cG9w
X2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQlpZiAoIVlZX0NVUlJFTlRf
QlVGRkVSKQotCQlyZXR1cm47Ci0KLQl5eV9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVS
ICx5eXNjYW5uZXIpOwotCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7Ci0JaWYgKHl5
Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+IDApCi0JCS0teXlnLT55eV9idWZmZXJfc3RhY2tfdG9w
OwotCi0JaWYgKFlZX0NVUlJFTlRfQlVGRkVSKSB7Ci0JCXl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5
c2Nhbm5lciApOwotCQl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Ci0JfQot
fQotCi0vKiBBbGxvY2F0ZXMgdGhlIHN0YWNrIGlmIGl0IGRvZXMgbm90IGV4aXN0LgotICogIEd1
YXJhbnRlZXMgc3BhY2UgZm9yIGF0IGxlYXN0IG9uZSBwdXNoLgotICovCi1zdGF0aWMgdm9pZCB5
eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLQl5eV9zaXplX3Qg
bnVtX3RvX2FsbG9jOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKLQotCWlmICgheXlnLT55eV9idWZmZXJfc3RhY2spIHsKLQotCQkvKiBG
aXJzdCBhbGxvY2F0aW9uIGlzIGp1c3QgZm9yIDIgZWxlbWVudHMsIHNpbmNlIHdlIGRvbid0IGtu
b3cgaWYgdGhpcwotCQkgKiBzY2FubmVyIHdpbGwgZXZlbiBuZWVkIGEgc3RhY2suIFdlIHVzZSAy
IGluc3RlYWQgb2YgMSB0byBhdm9pZCBhbgotCQkgKiBpbW1lZGlhdGUgcmVhbGxvYyBvbiB0aGUg
bmV4dCBjYWxsLgotICAgICAgICAgKi8KLQkJbnVtX3RvX2FsbG9jID0gMTsKLQkJeXlnLT55eV9i
dWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXl5YWxsb2MKLQkJCQkJCQkJ
KG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKLQkJCQkJCQkJ
LCB5eXNjYW5uZXIpOwotCQlpZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQotCQkJWVlfRkFU
QUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXllbnN1cmVfYnVmZmVyX3N0YWNr
KCkiICk7Ci0JCQkJCQkJCSAgCi0JCW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjaywgMCwgbnVt
X3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7Ci0JCQkJCi0JCXl5
Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKLQkJeXlnLT55eV9idWZmZXJf
c3RhY2tfdG9wID0gMDsKLQkJcmV0dXJuOwotCX0KLQotCWlmICh5eWctPnl5X2J1ZmZlcl9zdGFj
a190b3AgPj0gKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCkgLSAxKXsKLQotCQkvKiBJbmNyZWFz
ZSB0aGUgYnVmZmVyIHRvIHByZXBhcmUgZm9yIGEgcG9zc2libGUgcHVzaC4gKi8KLQkJaW50IGdy
b3dfc2l6ZSA9IDggLyogYXJiaXRyYXJ5IGdyb3cgc2l6ZSAqLzsKLQotCQludW1fdG9fYWxsb2Mg
PSB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggKyBncm93X3NpemU7Ci0JCXl5Zy0+eXlfYnVmZmVy
X3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKil5eXJlYWxsb2MKLQkJCQkJCQkJKHl5
Zy0+eXlfYnVmZmVyX3N0YWNrLAotCQkJCQkJCQludW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0
IHl5X2J1ZmZlcl9zdGF0ZSopCi0JCQkJCQkJCSwgeXlzY2FubmVyKTsKLQkJaWYgKCAhIHl5Zy0+
eXlfYnVmZmVyX3N0YWNrICkKLQkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVt
b3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOwotCi0JCS8qIHplcm8gb25seSB0aGUg
bmV3IHNsb3RzLiovCi0JCW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+eXlfYnVm
ZmVyX3N0YWNrX21heCwgMCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3Rh
dGUqKSk7Ci0JCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKLQl9Ci19
Ci0KLS8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gZGlyZWN0bHkgZnJv
bSBhIHVzZXItc3BlY2lmaWVkIGNoYXJhY3RlciBidWZmZXIuCi0gKiBAcGFyYW0gYmFzZSB0aGUg
Y2hhcmFjdGVyIGJ1ZmZlcgotICogQHBhcmFtIHNpemUgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhl
IGNoYXJhY3RlciBidWZmZXIKLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0
LgotICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuIAot
ICovCi1ZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9idWZmZXIgIChjaGFyICogYmFzZSwgeXlfc2l6
ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotCVlZX0JVRkZFUl9TVEFURSBiOwot
ICAgIAotCWlmICggc2l6ZSA8IDIgfHwKLQkgICAgIGJhc2Vbc2l6ZS0yXSAhPSBZWV9FTkRfT0Zf
QlVGRkVSX0NIQVIgfHwKLQkgICAgIGJhc2Vbc2l6ZS0xXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NI
QVIgKQotCQkvKiBUaGV5IGZvcmdvdCB0byBsZWF2ZSByb29tIGZvciB0aGUgRU9CJ3MuICovCi0J
CXJldHVybiAwOwotCi0JYiA9IChZWV9CVUZGRVJfU1RBVEUpIHl5YWxsb2Moc2l6ZW9mKCBzdHJ1
Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciApOwotCWlmICggISBiICkKLQkJWVlfRkFU
QUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfc2Nhbl9idWZmZXIoKSIgKTsK
LQotCWItPnl5X2J1Zl9zaXplID0gc2l6ZSAtIDI7CS8qICItIDIiIHRvIHRha2UgY2FyZSBvZiBF
T0IncyAqLwotCWItPnl5X2J1Zl9wb3MgPSBiLT55eV9jaF9idWYgPSBiYXNlOwotCWItPnl5X2lz
X291cl9idWZmZXIgPSAwOwotCWItPnl5X2lucHV0X2ZpbGUgPSAwOwotCWItPnl5X25fY2hhcnMg
PSBiLT55eV9idWZfc2l6ZTsKLQliLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7Ci0JYi0+eXlfYXRf
Ym9sID0gMTsKLQliLT55eV9maWxsX2J1ZmZlciA9IDA7Ci0JYi0+eXlfYnVmZmVyX3N0YXR1cyA9
IFlZX0JVRkZFUl9ORVc7Ci0KLQl5eV9zd2l0Y2hfdG9fYnVmZmVyKGIgLHl5c2Nhbm5lciApOwot
Ci0JcmV0dXJuIGI7Ci19Ci0KLS8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNj
YW4gYSBzdHJpbmcuIFRoZSBuZXh0IGNhbGwgdG8geXlsZXgoKSB3aWxsCi0gKiBzY2FuIGZyb20g
YSBAZSBjb3B5IG9mIEBhIHN0ci4KLSAqIEBwYXJhbSB5eXN0ciBhIE5VTC10ZXJtaW5hdGVkIHN0
cmluZyB0byBzY2FuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAq
IEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgotICogQG5v
dGUgSWYgeW91IHdhbnQgdG8gc2NhbiBieXRlcyB0aGF0IG1heSBjb250YWluIE5VTCB2YWx1ZXMs
IHRoZW4gdXNlCi0gKiAgICAgICB5eV9zY2FuX2J5dGVzKCkgaW5zdGVhZC4KLSAqLwotWVlfQlVG
RkVSX1NUQVRFIHl5X3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0ciAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKLXsKLSAgICAKLQlyZXR1cm4geXlfc2Nhbl9ieXRlcyh5eXN0cixzdHJsZW4o
eXlzdHIpICx5eXNjYW5uZXIpOwotfQotCi0vKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0
ZSB0byBzY2FuIHRoZSBnaXZlbiBieXRlcy4gVGhlIG5leHQgY2FsbCB0byB5eWxleCgpIHdpbGwK
LSAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgYnl0ZXMuCi0gKiBAcGFyYW0gYnl0ZXMgdGhl
IGJ5dGUgYnVmZmVyIHRvIHNjYW4KLSAqIEBwYXJhbSBsZW4gdGhlIG51bWJlciBvZiBieXRlcyBp
biB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMuCi0gKiBAcGFyYW0geXlzY2FubmVy
IFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZm
ZXIgc3RhdGUgb2JqZWN0LgotICovCi1ZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAgKHl5
Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIHl5X3NpemVfdCAgX3l5Ynl0ZXNfbGVuICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQotewotCVlZX0JVRkZFUl9TVEFURSBiOwotCWNoYXIgKmJ1ZjsKLQl5eV9zaXpl
X3QgbiwgaTsKLSAgICAKLQkvKiBHZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwgaW5jbHVkaW5n
IHNwYWNlIGZvciB0cmFpbGluZyBFT0Incy4gKi8KLQluID0gX3l5Ynl0ZXNfbGVuICsgMjsKLQli
dWYgPSAoY2hhciAqKSB5eWFsbG9jKG4gLHl5c2Nhbm5lciApOwotCWlmICggISBidWYgKQotCQlZ
WV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9zY2FuX2J5dGVzKCki
ICk7Ci0KLQlmb3IgKCBpID0gMDsgaSA8IF95eWJ5dGVzX2xlbjsgKytpICkKLQkJYnVmW2ldID0g
eXlieXRlc1tpXTsKLQotCWJ1ZltfeXlieXRlc19sZW5dID0gYnVmW195eWJ5dGVzX2xlbisxXSA9
IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLQotCWIgPSB5eV9zY2FuX2J1ZmZlcihidWYsbiAseXlz
Y2FubmVyKTsKLQlpZiAoICEgYiApCi0JCVlZX0ZBVEFMX0VSUk9SKCAiYmFkIGJ1ZmZlciBpbiB5
eV9zY2FuX2J5dGVzKCkiICk7Ci0KLQkvKiBJdCdzIG9rYXkgdG8gZ3JvdyBldGMuIHRoaXMgYnVm
ZmVyLCBhbmQgd2Ugc2hvdWxkIHRocm93IGl0Ci0JICogYXdheSB3aGVuIHdlJ3JlIGRvbmUuCi0J
ICovCi0JYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7Ci0KLQlyZXR1cm4gYjsKLX0KLQotI2lmbmRl
ZiBZWV9FWElUX0ZBSUxVUkUKLSNkZWZpbmUgWVlfRVhJVF9GQUlMVVJFIDIKLSNlbmRpZgotCi1z
dGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyKiBtc2cgLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCi17Ci0gICAgCSh2b2lkKSBmcHJpbnRmKCBzdGRlcnIsICIlc1xuIiwgbXNnICk7
Ci0JZXhpdCggWVlfRVhJVF9GQUlMVVJFICk7Ci19Ci0KLS8qIFJlZGVmaW5lIHl5bGVzcygpIHNv
IGl0IHdvcmtzIGluIHNlY3Rpb24gMyBjb2RlLiAqLwotCi0jdW5kZWYgeXlsZXNzCi0jZGVmaW5l
IHl5bGVzcyhuKSBcCi0JZG8gXAotCQl7IFwKLQkJLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcg
dXAgeXl0ZXh0LiAqLyBcCi0gICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCi0g
ICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVzc19tYWNyb19hcmcpO1wKLQkJeXl0ZXh0W3l5bGVu
Z10gPSB5eWctPnl5X2hvbGRfY2hhcjsgXAotCQl5eWctPnl5X2NfYnVmX3AgPSB5eXRleHQgKyB5
eWxlc3NfbWFjcm9fYXJnOyBcCi0JCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZf
cDsgXAotCQkqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsgXAotCQl5eWxlbmcgPSB5eWxlc3NfbWFj
cm9fYXJnOyBcCi0JCX0gXAotCXdoaWxlICggMCApCi0KLS8qIEFjY2Vzc29yICBtZXRob2RzIChn
ZXQvc2V0IGZ1bmN0aW9ucykgdG8gc3RydWN0IG1lbWJlcnMuICovCi0KLS8qKiBHZXQgdGhlIHVz
ZXItZGVmaW5lZCBkYXRhIGZvciB0aGlzIHNjYW5uZXIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRo
ZSBzY2FubmVyIG9iamVjdC4KLSAqLwotWVlfRVhUUkFfVFlQRSB5eWdldF9leHRyYSAgKHl5c2Nh
bl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5ZXh0cmE7Ci19Ci0KLS8qKiBHZXQgdGhl
IGN1cnJlbnQgbGluZSBudW1iZXIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9i
amVjdC4KLSAqLwotaW50IHl5Z2V0X2xpbmVubyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0g
ICAgCi0gICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSKQotICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgCi0gICAgcmV0dXJuIHl5bGluZW5vOwotfQotCi0vKiogR2V0IHRoZSBjdXJyZW50
IGNvbHVtbiBudW1iZXIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4K
LSAqLwotaW50IHl5Z2V0X2NvbHVtbiAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1
Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgCi0g
ICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgCi0gICAgcmV0dXJuIHl5Y29sdW1uOwotfQotCi0vKiogR2V0IHRoZSBpbnB1dCBzdHJlYW0u
Ci0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotRklMRSAqeXln
ZXRfaW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eWluOwotfQotCi0v
KiogR2V0IHRoZSBvdXRwdXQgc3RyZWFtLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5l
ciBvYmplY3QuCi0gKi8KLUZJTEUgKnl5Z2V0X291dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsK
LSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
Ci0gICAgcmV0dXJuIHl5b3V0OwotfQotCi0vKiogR2V0IHRoZSBsZW5ndGggb2YgdGhlIGN1cnJl
bnQgdG9rZW4uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwot
eXlfc2l6ZV90IHl5Z2V0X2xlbmcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVy
biB5eWxlbmc7Ci19Ci0KLS8qKiBHZXQgdGhlIGN1cnJlbnQgdG9rZW4uCi0gKiBAcGFyYW0geXlz
Y2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotCi1jaGFyICp5eWdldF90ZXh0ICAoeXlz
Y2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXl0ZXh0OwotfQotCi0vKiogU2V0IHRo
ZSB1c2VyLWRlZmluZWQgZGF0YS4gVGhpcyBkYXRhIGlzIG5ldmVyIHRvdWNoZWQgYnkgdGhlIHNj
YW5uZXIuCi0gKiBAcGFyYW0gdXNlcl9kZWZpbmVkIFRoZSBkYXRhIHRvIGJlIGFzc29jaWF0ZWQg
d2l0aCB0aGlzIHNjYW5uZXIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVj
dC4KLSAqLwotdm9pZCB5eXNldF9leHRyYSAoWVlfRVhUUkFfVFlQRSAgdXNlcl9kZWZpbmVkICwg
eXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eWV4dHJhID0gdXNlcl9kZWZpbmVkIDsKLX0K
LQotLyoqIFNldCB0aGUgY3VycmVudCBsaW5lIG51bWJlci4KLSAqIEBwYXJhbSBsaW5lX251bWJl
cgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLXZvaWQgeXlz
ZXRfbGluZW5vIChpbnQgIGxpbmVfbnVtYmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQot
ICAgICAgICAvKiBsaW5lbm8gaXMgb25seSB2YWxpZCBpZiBhbiBpbnB1dCBidWZmZXIgZXhpc3Rz
LiAqLwotICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUiApCi0gICAgICAgICAgIHl5X2Zh
dGFsX2Vycm9yKCAieXlzZXRfbGluZW5vIGNhbGxlZCB3aXRoIG5vIGJ1ZmZlciIgLCB5eXNjYW5u
ZXIpOyAKLSAgICAKLSAgICB5eWxpbmVubyA9IGxpbmVfbnVtYmVyOwotfQotCi0vKiogU2V0IHRo
ZSBjdXJyZW50IGNvbHVtbi4KLSAqIEBwYXJhbSBsaW5lX251bWJlcgotICogQHBhcmFtIHl5c2Nh
bm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLXZvaWQgeXlzZXRfY29sdW1uIChpbnQgIGNv
bHVtbl9ubyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICAgICAgLyogY29sdW1uIGlz
IG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8KLSAgICAgICAgaWYgKCEg
WVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICAgICB5eV9mYXRhbF9lcnJvciggInl5c2V0X2Nv
bHVtbiBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2FubmVyKTsgCi0gICAgCi0gICAgeXlj
b2x1bW4gPSBjb2x1bW5fbm87Ci19Ci0KLS8qKiBTZXQgdGhlIGlucHV0IHN0cmVhbS4gVGhpcyBk
b2VzIG5vdCBkaXNjYXJkIHRoZSBjdXJyZW50Ci0gKiBpbnB1dCBidWZmZXIuCi0gKiBAcGFyYW0g
aW5fc3RyIEEgcmVhZGFibGUgc3RyZWFtLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5l
ciBvYmplY3QuCi0gKiBAc2VlIHl5X3N3aXRjaF90b19idWZmZXIKLSAqLwotdm9pZCB5eXNldF9p
biAoRklMRSAqICBpbl9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5aW4gPSBp
bl9zdHIgOwotfQotCi12b2lkIHl5c2V0X291dCAoRklMRSAqICBvdXRfc3RyICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKLSAgICB5eW91dCA9IG91dF9zdHIgOwotfQotCi1pbnQgeXlnZXRfZGVi
dWcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eV9mbGV4X2RlYnVnOwot
fQotCi12b2lkIHl5c2V0X2RlYnVnIChpbnQgIGJkZWJ1ZyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikK
LXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7Ci0gICAgeXlfZmxleF9kZWJ1ZyA9IGJkZWJ1ZyA7Ci19Ci0KLS8qIEFjY2Vzc29yIG1ldGhv
ZHMgZm9yIHl5bHZhbCBhbmQgeXlsbG9jICovCi0KLVlZU1RZUEUgKiB5eWdldF9sdmFsICAoeXlz
Y2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlsdmFsOwotfQotCi12b2lkIHl5c2V0
X2x2YWwgKFlZU1RZUEUgKiAgeXlsdmFsX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewot
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
LSAgICB5eWx2YWwgPSB5eWx2YWxfcGFyYW07Ci19Ci0KLVlZTFRZUEUgKnl5Z2V0X2xsb2MgICh5
eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eWxsb2M7Ci19Ci0gICAgCi12b2lk
IHl5c2V0X2xsb2MgKFlZTFRZUEUgKiAgeXlsbG9jX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVy
KQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKLSAgICB5eWxsb2MgPSB5eWxsb2NfcGFyYW07Ci19Ci0gICAgCi0vKiBVc2VyLXZpc2li
bGUgQVBJICovCi0KLS8qIHl5bGV4X2luaXQgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGNyZWF0ZXMg
dGhlIHNjYW5uZXIgaXRzZWxmLCBzbyBpdCBpcwotICogdGhlIE9OTFkgcmVlbnRyYW50IGZ1bmN0
aW9uIHRoYXQgZG9lc24ndCB0YWtlIHRoZSBzY2FubmVyIGFzIHRoZSBsYXN0IGFyZ3VtZW50Lgot
ICogVGhhdCdzIHdoeSB3ZSBleHBsaWNpdGx5IGhhbmRsZSB0aGUgZGVjbGFyYXRpb24sIGluc3Rl
YWQgb2YgdXNpbmcgb3VyIG1hY3Jvcy4KLSAqLwotCi1pbnQgeXlsZXhfaW5pdCh5eXNjYW5fdCog
cHRyX3l5X2dsb2JhbHMpCi0KLXsKLSAgICBpZiAocHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7Ci0g
ICAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICAq
cHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3QpIHl5YWxsb2MgKCBzaXplb2YoIHN0cnVjdCB5eWd1
dHNfdCApLCBOVUxMICk7Ci0KLSAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwpewotICAg
ICAgICBlcnJubyA9IEVOT01FTTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgLyog
Qnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2UgYnVncyBpbiB5eV9pbml0X2dsb2JhbHMuIExl
YXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLwotICAgIG1lbXNldCgqcHRyX3l5X2dsb2JhbHMs
MHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7Ci0KLSAgICByZXR1cm4geXlfaW5pdF9nbG9i
YWxzICggKnB0cl95eV9nbG9iYWxzICk7Ci19Ci0KLS8qIHl5bGV4X2luaXRfZXh0cmEgaGFzIHRo
ZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgeXlsZXhfaW5pdCwgYnV0IGZvbGxvd3MgdGhlCi0gKiBj
b252ZW50aW9uIG9mIHRha2luZyB0aGUgc2Nhbm5lciBhcyB0aGUgbGFzdCBhcmd1bWVudC4gTm90
ZSBob3dldmVyLCB0aGF0Ci0gKiB0aGlzIGlzIGEgKnBvaW50ZXIqIHRvIGEgc2Nhbm5lciwgYXMg
aXQgd2lsbCBiZSBhbGxvY2F0ZWQgYnkgdGhpcyBjYWxsIChhbmQKLSAqIGlzIHRoZSByZWFzb24s
IHRvbywgd2h5IHRoaXMgZnVuY3Rpb24gYWxzbyBtdXN0IGhhbmRsZSBpdHMgb3duIGRlY2xhcmF0
aW9uKS4KLSAqIFRoZSB1c2VyIGRlZmluZWQgdmFsdWUgaW4gdGhlIGZpcnN0IGFyZ3VtZW50IHdp
bGwgYmUgYXZhaWxhYmxlIHRvIHl5YWxsb2MgaW4KLSAqIHRoZSB5eWV4dHJhIGZpZWxkLgotICov
Ci0KLWludCB5eWxleF9pbml0X2V4dHJhKFlZX0VYVFJBX1RZUEUgeXlfdXNlcl9kZWZpbmVkLHl5
c2Nhbl90KiBwdHJfeXlfZ2xvYmFscyApCi0KLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgZHVtbXlf
eXlndXRzOwotCi0gICAgeXlzZXRfZXh0cmEgKHl5X3VzZXJfZGVmaW5lZCwgJmR1bW15X3l5Z3V0
cyk7Ci0KLSAgICBpZiAocHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7Ci0gICAgICAgIGVycm5vID0g
RUlOVkFMOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0JCi0gICAgKnB0cl95eV9nbG9iYWxz
ID0gKHl5c2Nhbl90KSB5eWFsbG9jICggc2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3QgKSwgJmR1bW15
X3l5Z3V0cyApOwotCQotICAgIGlmICgqcHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7Ci0gICAgICAg
IGVycm5vID0gRU5PTUVNOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgCi0gICAgLyog
Qnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2UgYnVncyBpbgotICAgIHl5X2luaXRfZ2xvYmFs
cy4gTGVhdmUgYXQgMHgwMCBmb3IgcmVsZWFzZXMuICovCi0gICAgbWVtc2V0KCpwdHJfeXlfZ2xv
YmFscywweDAwLHNpemVvZihzdHJ1Y3QgeXlndXRzX3QpKTsKLSAgICAKLSAgICB5eXNldF9leHRy
YSAoeXlfdXNlcl9kZWZpbmVkLCAqcHRyX3l5X2dsb2JhbHMpOwotICAgIAotICAgIHJldHVybiB5
eV9pbml0X2dsb2JhbHMgKCAqcHRyX3l5X2dsb2JhbHMgKTsKLX0KLQotc3RhdGljIGludCB5eV9p
bml0X2dsb2JhbHMgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgLyogSW5pdGlhbGl6YXRp
b24gaXMgdGhlIHNhbWUgYXMgZm9yIHRoZSBub24tcmVlbnRyYW50IHNjYW5uZXIuCi0gICAgICog
VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB5eWxleF9kZXN0cm95KCksIHNvIGRvbid0IGFs
bG9jYXRlIGhlcmUuCi0gICAgICovCi0KLSAgICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IDA7Ci0g
ICAgeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKLSAgICB5eWctPnl5X2J1ZmZlcl9zdGFj
a19tYXggPSAwOwotICAgIHl5Zy0+eXlfY19idWZfcCA9IChjaGFyICopIDA7Ci0gICAgeXlnLT55
eV9pbml0ID0gMDsKLSAgICB5eWctPnl5X3N0YXJ0ID0gMDsKLQotICAgIHl5Zy0+eXlfc3RhcnRf
c3RhY2tfcHRyID0gMDsKLSAgICB5eWctPnl5X3N0YXJ0X3N0YWNrX2RlcHRoID0gMDsKLSAgICB5
eWctPnl5X3N0YXJ0X3N0YWNrID0gIE5VTEw7Ci0KLS8qIERlZmluZWQgaW4gbWFpbi5jICovCi0j
aWZkZWYgWVlfU1RESU5JVAotICAgIHl5aW4gPSBzdGRpbjsKLSAgICB5eW91dCA9IHN0ZG91dDsK
LSNlbHNlCi0gICAgeXlpbiA9IChGSUxFICopIDA7Ci0gICAgeXlvdXQgPSAoRklMRSAqKSAwOwot
I2VuZGlmCi0KLSAgICAvKiBGb3IgZnV0dXJlIHJlZmVyZW5jZTogU2V0IGVycm5vIG9uIGVycm9y
LCBzaW5jZSB3ZSBhcmUgY2FsbGVkIGJ5Ci0gICAgICogeXlsZXhfaW5pdCgpCi0gICAgICovCi0g
ICAgcmV0dXJuIDA7Ci19Ci0KLS8qIHl5bGV4X2Rlc3Ryb3kgaXMgZm9yIGJvdGggcmVlbnRyYW50
IGFuZCBub24tcmVlbnRyYW50IHNjYW5uZXJzLiAqLwotaW50IHl5bGV4X2Rlc3Ryb3kgICh5eXNj
YW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgLyogUG9wIHRoZSBidWZmZXIgc3RhY2ssIGRlc3Ry
b3lpbmcgZWFjaCBlbGVtZW50LiAqLwotCXdoaWxlKFlZX0NVUlJFTlRfQlVGRkVSKXsKLQkJeXlf
ZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyICk7Ci0JCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7Ci0JCXl5cG9wX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIp
OwotCX0KLQotCS8qIERlc3Ryb3kgdGhlIHN0YWNrIGl0c2VsZi4gKi8KLQl5eWZyZWUoeXlnLT55
eV9idWZmZXJfc3RhY2sgLHl5c2Nhbm5lcik7Ci0JeXlnLT55eV9idWZmZXJfc3RhY2sgPSBOVUxM
OwotCi0gICAgLyogRGVzdHJveSB0aGUgc3RhcnQgY29uZGl0aW9uIHN0YWNrLiAqLwotICAgICAg
ICB5eWZyZWUoeXlnLT55eV9zdGFydF9zdGFjayAseXlzY2FubmVyICk7Ci0gICAgICAgIHl5Zy0+
eXlfc3RhcnRfc3RhY2sgPSBOVUxMOwotCi0gICAgLyogUmVzZXQgdGhlIGdsb2JhbHMuIFRoaXMg
aXMgaW1wb3J0YW50IGluIGEgbm9uLXJlZW50cmFudCBzY2FubmVyIHNvIHRoZSBuZXh0IHRpbWUK
LSAgICAgKiB5eWxleCgpIGlzIGNhbGxlZCwgaW5pdGlhbGl6YXRpb24gd2lsbCBvY2N1ci4gKi8K
LSAgICB5eV9pbml0X2dsb2JhbHMoIHl5c2Nhbm5lcik7Ci0KLSAgICAvKiBEZXN0cm95IHRoZSBt
YWluIHN0cnVjdCAocmVlbnRyYW50IG9ubHkpLiAqLwotICAgIHl5ZnJlZSAoIHl5c2Nhbm5lciAs
IHl5c2Nhbm5lciApOwotICAgIHl5c2Nhbm5lciA9IE5VTEw7Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LS8qCi0gKiBJbnRlcm5hbCB1dGlsaXR5IHJvdXRpbmVzLgotICovCi0KLSNpZm5kZWYgeXl0ZXh0
X3B0cgotc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyKiBzMSwgeXljb25zdCBjaGFy
ICogczIsIGludCBuICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotCXJlZ2lzdGVyIGludCBpOwot
CWZvciAoIGkgPSAwOyBpIDwgbjsgKytpICkKLQkJczFbaV0gPSBzMltpXTsKLX0KLSNlbmRpZgot
Ci0jaWZkZWYgWVlfTkVFRF9TVFJMRU4KLXN0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29u
c3QgY2hhciAqIHMgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0JcmVnaXN0ZXIgaW50IG47Ci0J
Zm9yICggbiA9IDA7IHNbbl07ICsrbiApCi0JCTsKLQotCXJldHVybiBuOwotfQotI2VuZGlmCi0K
LXZvaWQgKnl5YWxsb2MgKHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsK
LQlyZXR1cm4gKHZvaWQgKikgbWFsbG9jKCBzaXplICk7Ci19Ci0KLXZvaWQgKnl5cmVhbGxvYyAg
KHZvaWQgKiBwdHIsIHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLQkv
KiBUaGUgY2FzdCB0byAoY2hhciAqKSBpbiB0aGUgZm9sbG93aW5nIGFjY29tbW9kYXRlcyBib3Ro
Ci0JICogaW1wbGVtZW50YXRpb25zIHRoYXQgdXNlIGNoYXIqIGdlbmVyaWMgcG9pbnRlcnMsIGFu
ZCB0aG9zZQotCSAqIHRoYXQgdXNlIHZvaWQqIGdlbmVyaWMgcG9pbnRlcnMuICBJdCB3b3JrcyB3
aXRoIHRoZSBsYXR0ZXIKLQkgKiBiZWNhdXNlIGJvdGggQU5TSSBDIGFuZCBDKysgYWxsb3cgY2Fz
dGxlc3MgYXNzaWdubWVudCBmcm9tCi0JICogYW55IHBvaW50ZXIgdHlwZSB0byB2b2lkKiwgYW5k
IGRlYWwgd2l0aCBhcmd1bWVudCBjb252ZXJzaW9ucwotCSAqIGFzIHRob3VnaCBkb2luZyBhbiBh
c3NpZ25tZW50LgotCSAqLwotCXJldHVybiAodm9pZCAqKSByZWFsbG9jKCAoY2hhciAqKSBwdHIs
IHNpemUgKTsKLX0KLQotdm9pZCB5eWZyZWUgKHZvaWQgKiBwdHIgLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCi17Ci0JZnJlZSggKGNoYXIgKikgcHRyICk7CS8qIHNlZSB5eXJlYWxsb2MoKSBmb3IgKGNo
YXIgKikgY2FzdCAqLwotfQotCi0jZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5dGFibGVzIgotCi0j
aWYgZGVmaW5lZChfX2NsYW5nX18pCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCi0jZW5k
aWYKLQoteXlfc2l6ZV90IHN0cmluZ19pbnB1dChjaGFyKiBidWYsIHl5X3NpemVfdCBtYXhfc2l6
ZSwgeXlzY2FuX3QgeXlzY2FubmVyKSB7Ci0gICAgcHA6OlRva2VuIHRva2VuOwotICAgIHl5Z2V0
X2V4dHJhKHl5c2Nhbm5lciktPnByZXByb2Nlc3Nvci5sZXgoJnRva2VuKTsKLSAgICB5eV9zaXpl
X3QgbGVuID0gdG9rZW4udHlwZSA9PSBwcDo6VG9rZW46OkxBU1QgPyAwIDogdG9rZW4udGV4dC5z
aXplKCk7Ci0gICAgaWYgKGxlbiA8IG1heF9zaXplKQotICAgICAgICBtZW1jcHkoYnVmLCB0b2tl
bi50ZXh0LmNfc3RyKCksIGxlbik7Ci0gICAgeXlzZXRfY29sdW1uKHRva2VuLmxvY2F0aW9uLmZp
bGUseXlzY2FubmVyKTsKLSAgICB5eXNldF9saW5lbm8odG9rZW4ubG9jYXRpb24ubGluZSx5eXNj
YW5uZXIpOwotCi0gICAgaWYgKGxlbiA+PSBtYXhfc2l6ZSkKLSAgICAgICAgWVlfRkFUQUxfRVJS
T1IoIklucHV0IGJ1ZmZlciBvdmVyZmxvdyIpOwotICAgIGVsc2UgaWYgKGxlbiA+IDApCi0gICAg
ICAgIGJ1ZltsZW4rK10gPSAnICc7Ci0gICAgcmV0dXJuIGxlbjsKLX0KLQotaW50IGNoZWNrX3R5
cGUoeXlzY2FuX3QgeXlzY2FubmVyKSB7Ci0gICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190KikgeXlzY2FubmVyOwotICAgIAotICAgIGludCB0b2tlbiA9IElERU5USUZJ
RVI7Ci0gICAgVFN5bWJvbCogc3ltYm9sID0geXlleHRyYS0+c3ltYm9sVGFibGUuZmluZCh5eXRl
eHQpOwotICAgIGlmIChzeW1ib2wgJiYgc3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKLSAgICAgICAg
VFZhcmlhYmxlKiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+KHN5bWJvbCk7Ci0g
ICAgICAgIGlmICh2YXJpYWJsZS0+aXNVc2VyVHlwZSgpKQotICAgICAgICAgICAgdG9rZW4gPSBU
WVBFX05BTUU7Ci0gICAgfQotICAgIHl5bHZhbC0+bGV4LnN5bWJvbCA9IHN5bWJvbDsKLSAgICBy
ZXR1cm4gdG9rZW47Ci19Ci0KLWludCByZXNlcnZlZF93b3JkKHl5c2Nhbl90IHl5c2Nhbm5lcikg
ewotICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIHl5c2Nhbm5l
cjsKLQotICAgIHl5ZXh0cmEtPmVycm9yKCp5eWxsb2MsICJJbGxlZ2FsIHVzZSBvZiByZXNlcnZl
ZCB3b3JkIiwgeXl0ZXh0LCAiIik7Ci0gICAgeXlleHRyYS0+cmVjb3ZlcigpOwotICAgIHJldHVy
biAwOwotfQotCi12b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxvYywgVFBhcnNlQ29udGV4dCogY29u
dGV4dCwgY29uc3QgY2hhciogcmVhc29uKSB7Ci0gICAgY29udGV4dC0+ZXJyb3IoKmxsb2MsIHJl
YXNvbiwgeXlnZXRfdGV4dChjb250ZXh0LT5zY2FubmVyKSk7Ci0gICAgY29udGV4dC0+cmVjb3Zl
cigpOwotfQotCi1pbnQgaW50X2NvbnN0YW50KHl5c2Nhbl90IHl5c2Nhbm5lcikgewotICAgIHN0
cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIHl5c2Nhbm5lcjsKLQotICAg
IGlmICghYXRvaV9jbGFtcCh5eXRleHQsICYoeXlsdmFsLT5sZXguaSkpKQotICAgICAgICB5eWV4
dHJhLT53YXJuaW5nKCp5eWxsb2MsICJJbnRlZ2VyIG92ZXJmbG93IiwgeXl0ZXh0LCAiIik7Ci0g
ICAgcmV0dXJuIElOVENPTlNUQU5UOwotfQotCi1pbnQgZmxvYXRfY29uc3RhbnQoeXlzY2FuX3Qg
eXlzY2FubmVyKSB7Ci0gICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
KikgeXlzY2FubmVyOwotCi0gICAgaWYgKCFhdG9mX2NsYW1wKHl5dGV4dCwgJih5eWx2YWwtPmxl
eC5mKSkpCi0gICAgICAgIHl5ZXh0cmEtPndhcm5pbmcoKnl5bGxvYywgIkZsb2F0IG92ZXJmbG93
IiwgeXl0ZXh0LCAiIik7Ci0gICAgcmV0dXJuIEZMT0FUQ09OU1RBTlQ7Ci19Ci0KLWludCBnbHNs
YW5nX2luaXRpYWxpemUoVFBhcnNlQ29udGV4dCogY29udGV4dCkgewotICAgIHl5c2Nhbl90IHNj
YW5uZXIgPSBOVUxMOwotICAgIGlmICh5eWxleF9pbml0X2V4dHJhKGNvbnRleHQsJnNjYW5uZXIp
KQotICAgICAgICByZXR1cm4gMTsKLQotICAgIGNvbnRleHQtPnNjYW5uZXIgPSBzY2FubmVyOwot
ICAgIHJldHVybiAwOwotfQotCi1pbnQgZ2xzbGFuZ19maW5hbGl6ZShUUGFyc2VDb250ZXh0KiBj
b250ZXh0KSB7Ci0gICAgeXlzY2FuX3Qgc2Nhbm5lciA9IGNvbnRleHQtPnNjYW5uZXI7Ci0gICAg
aWYgKHNjYW5uZXIgPT0gTlVMTCkgcmV0dXJuIDA7Ci0gICAgCi0gICAgY29udGV4dC0+c2Nhbm5l
ciA9IE5VTEw7Ci0gICAgeXlsZXhfZGVzdHJveShzY2FubmVyKTsKLQotICAgIHJldHVybiAwOwot
fQotCi1pbnQgZ2xzbGFuZ19zY2FuKHNpemVfdCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3Ry
aW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKLSAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4
dCogY29udGV4dCkgewotICAgIHl5cmVzdGFydChOVUxMLGNvbnRleHQtPnNjYW5uZXIpOwotICAg
IHl5c2V0X2NvbHVtbigwLGNvbnRleHQtPnNjYW5uZXIpOwotICAgIHl5c2V0X2xpbmVubygxLGNv
bnRleHQtPnNjYW5uZXIpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSBwcmVwcm9jZXNzb3IuCi0gICAg
aWYgKCFjb250ZXh0LT5wcmVwcm9jZXNzb3IuaW5pdChjb3VudCwgc3RyaW5nLCBsZW5ndGgpKQot
ICAgICAgICByZXR1cm4gMTsKLSAgICBjb250ZXh0LT5wcmVwcm9jZXNzb3Iuc2V0TWF4VG9rZW5M
ZW5ndGgoU0hfTUFYX1RPS0VOX0xFTkdUSCk7Ci0KLSAgICAvLyBEZWZpbmUgZXh0ZW5zaW9uIG1h
Y3Jvcy4KLSAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yID0gY29udGV4
dC0+ZXh0ZW5zaW9uQmVoYXZpb3IoKTsKLSAgICBmb3IgKFRFeHRlbnNpb25CZWhhdmlvcjo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IGV4dEJlaGF2aW9yLmJlZ2luKCk7Ci0gICAgICAgICBpdGVyICE9
IGV4dEJlaGF2aW9yLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgY29udGV4dC0+cHJlcHJvY2Vz
c29yLnByZWRlZmluZU1hY3JvKGl0ZXItPmZpcnN0LmNfc3RyKCksIDEpOwotICAgIH0KLSAgICBp
ZiAoY29udGV4dC0+ZnJhZ21lbnRQcmVjaXNpb25IaWdoKQotICAgICAgICBjb250ZXh0LT5wcmVw
cm9jZXNzb3IucHJlZGVmaW5lTWFjcm8oIkdMX0ZSQUdNRU5UX1BSRUNJU0lPTl9ISUdIIiwgMSk7
Ci0KLSAgICByZXR1cm4gMDsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGNlN2IyYzcxMTcwYThiNDdiZjRkZjA4N2E5ZGJhM2EwZTZmNTE3YTUuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ4NzIg
KzAsMCBAQAotLyogQXBwbGUgTm90ZTogRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIEFwcGxl
IGVsZWN0cyB0byBkaXN0cmlidXRlIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEJT
RCBsaWNlbnNlLiAqLwotCi0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi43
LiAgKi8KLQotLyogQmlzb24gaW1wbGVtZW50YXRpb24gZm9yIFlhY2MtbGlrZSBwYXJzZXJzIGlu
IEMKLSAgIAotICAgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAxMiBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSAgIAotICAgVGhpcyBwcm9ncmFtIGlzIGZy
ZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lv
biAzIG9mIHRoZSBMaWNlbnNlLCBvcgotICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAgIAotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAgIAotICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFs
b25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9s
aWNlbnNlcy8+LiAgKi8KLQotLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVh
dGUgYSBsYXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCi0gICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlz
b24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawotICAgdW5kZXIgdGVy
bXMgb2YgeW91ciBjaG9pY2UsIHNvIGxvbmcgYXMgdGhhdCB3b3JrIGlzbid0IGl0c2VsZiBhCi0g
ICBwYXJzZXIgZ2VuZXJhdG9yIHVzaW5nIHRoZSBza2VsZXRvbiBvciBhIG1vZGlmaWVkIHZlcnNp
b24gdGhlcmVvZgotICAgYXMgYSBwYXJzZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5
b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZQotICAgdGhlIHBhcnNlciBza2VsZXRvbiBpdHNlbGYs
IHlvdSBtYXkgKGF0IHlvdXIgb3B0aW9uKSByZW1vdmUgdGhpcwotICAgc3BlY2lhbCBleGNlcHRp
b24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCi0gICBC
aXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1
YmxpYwotICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCi0gICAKLSAg
IFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24gaW4KLSAgIHZlcnNpb24gMi4yIG9mIEJpc29uLiAgKi8KLQotLyogQyBMQUxSKDEp
IHBhcnNlciBza2VsZXRvbiB3cml0dGVuIGJ5IFJpY2hhcmQgU3RhbGxtYW4sIGJ5Ci0gICBzaW1w
bGlmeWluZyB0aGUgb3JpZ2luYWwgc28tY2FsbGVkICJzZW1hbnRpYyIgcGFyc2VyLiAgKi8KLQot
LyogQWxsIHN5bWJvbHMgZGVmaW5lZCBiZWxvdyBzaG91bGQgYmVnaW4gd2l0aCB5eSBvciBZWSwg
dG8gYXZvaWQKLSAgIGluZnJpbmdpbmcgb24gdXNlciBuYW1lIHNwYWNlLiAgVGhpcyBzaG91bGQg
YmUgZG9uZSBldmVuIGZvciBsb2NhbAotICAgdmFyaWFibGVzLCBhcyB0aGV5IG1pZ2h0IG90aGVy
d2lzZSBiZSBleHBhbmRlZCBieSB1c2VyIG1hY3Jvcy4KLSAgIFRoZXJlIGFyZSBzb21lIHVuYXZv
aWRhYmxlIGV4Y2VwdGlvbnMgd2l0aGluIGluY2x1ZGUgZmlsZXMgdG8KLSAgIGRlZmluZSBuZWNl
c3NhcnkgbGlicmFyeSBzeW1ib2xzOyB0aGV5IGFyZSBub3RlZCAiSU5GUklOR0VTIE9OCi0gICBV
U0VSIE5BTUUgU1BBQ0UiIGJlbG93LiAgKi8KLQotLyogSWRlbnRpZnkgQmlzb24gb3V0cHV0LiAg
Ki8KLSNkZWZpbmUgWVlCSVNPTiAxCi0KLS8qIEJpc29uIHZlcnNpb24uICAqLwotI2RlZmluZSBZ
WUJJU09OX1ZFUlNJT04gIjIuNyIKLQotLyogU2tlbGV0b24gbmFtZS4gICovCi0jZGVmaW5lIFlZ
U0tFTEVUT05fTkFNRSAieWFjYy5jIgotCi0vKiBQdXJlIHBhcnNlcnMuICAqLwotI2RlZmluZSBZ
WVBVUkUgMQotCi0vKiBQdXNoIHBhcnNlcnMuICAqLwotI2RlZmluZSBZWVBVU0ggMAotCi0vKiBQ
dWxsIHBhcnNlcnMuICAqLwotI2RlZmluZSBZWVBVTEwgMQotCi0KLQotCi0vKiBDb3B5IHRoZSBm
aXJzdCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KLQotCi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwotCi0vLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNo
LiBETyBOT1QgRURJVCEKLQotLy8gSWdub3JlIGVycm9ycyBpbiBhdXRvLWdlbmVyYXRlZCBjb2Rl
LgotI2lmIGRlZmluZWQoX19HTlVDX18pCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQg
Ii1XdW51c2VkLWZ1bmN0aW9uIgotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vu
dXNlZC12YXJpYWJsZSIKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdzd2l0Y2gt
ZW51bSIKLSNlbGlmIGRlZmluZWQoX01TQ19WRVIpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTog
NDA2NSkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MTg5KQotI3ByYWdtYSB3YXJuaW5nKGRp
c2FibGU6IDQ1MDUpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcwMSkKLSNlbmRpZgotCi0j
aW5jbHVkZSAiY29tcGlsZXIvU3ltYm9sVGFibGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9QYXJz
ZUNvbnRleHQuaCIKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLQotI2RlZmluZSBZ
WUVOQUJMRV9OTFMgMAotCi0jZGVmaW5lIFlZTEVYX1BBUkFNIGNvbnRleHQtPnNjYW5uZXIKLQot
Ci0KLSMgaWZuZGVmIFlZX05VTEwKLSMgIGlmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgMjAxMTAz
TCA8PSBfX2NwbHVzcGx1cwotIyAgIGRlZmluZSBZWV9OVUxMIG51bGxwdHIKLSMgIGVsc2UKLSMg
ICBkZWZpbmUgWVlfTlVMTCAwCi0jICBlbmRpZgotIyBlbmRpZgotCi0vKiBFbmFibGluZyB2ZXJi
b3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8KLSNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKLSMgdW5kZWYg
WVlFUlJPUl9WRVJCT1NFCi0jIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQotI2Vsc2UKLSMgZGVm
aW5lIFlZRVJST1JfVkVSQk9TRSAwCi0jZW5kaWYKLQotLyogSW4gYSBmdXR1cmUgcmVsZWFzZSBv
ZiBCaXNvbiwgdGhpcyBzZWN0aW9uIHdpbGwgYmUgcmVwbGFjZWQKLSAgIGJ5ICNpbmNsdWRlICJn
bHNsYW5nX3RhYi5oIi4gICovCi0jaWZuZGVmIFlZX1lZX0dMU0xBTkdfVEFCX0hfSU5DTFVERUQK
LSMgZGVmaW5lIFlZX1lZX0dMU0xBTkdfVEFCX0hfSU5DTFVERUQKLS8qIEVuYWJsaW5nIHRyYWNl
cy4gICovCi0jaWZuZGVmIFlZREVCVUcKLSMgZGVmaW5lIFlZREVCVUcgMAotI2VuZGlmCi0jaWYg
WVlERUJVRwotZXh0ZXJuIGludCB5eWRlYnVnOwotI2VuZGlmCi0vKiAiJWNvZGUgcmVxdWlyZXMi
IGJsb2Nrcy4gICovCi0KLQotI2RlZmluZSBZWUxUWVBFIFRTb3VyY2VMb2MKLSNkZWZpbmUgWVlM
VFlQRV9JU19ERUNMQVJFRCAxCi0jZGVmaW5lIFNIX01BWF9UT0tFTl9MRU5HVEggMjU2ICAvLyBX
ZWJHTCBzcGVjLgotCi0KLQotCi0vKiBUb2tlbnMuICAqLwotI2lmbmRlZiBZWVRPS0VOVFlQRQot
IyBkZWZpbmUgWVlUT0tFTlRZUEUKLSAgIC8qIFB1dCB0aGUgdG9rZW5zIGludG8gdGhlIHN5bWJv
bCB0YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVyIGRlYnVnZ2VycwotICAgICAga25vdyBhYm91
dCB0aGVtLiAgKi8KLSAgIGVudW0geXl0b2tlbnR5cGUgewotICAgICBJTlZBUklBTlQgPSAyNTgs
Ci0gICAgIEhJR0hfUFJFQ0lTSU9OID0gMjU5LAotICAgICBNRURJVU1fUFJFQ0lTSU9OID0gMjYw
LAotICAgICBMT1dfUFJFQ0lTSU9OID0gMjYxLAotICAgICBQUkVDSVNJT04gPSAyNjIsCi0gICAg
IEFUVFJJQlVURSA9IDI2MywKLSAgICAgQ09OU1RfUVVBTCA9IDI2NCwKLSAgICAgQk9PTF9UWVBF
ID0gMjY1LAotICAgICBGTE9BVF9UWVBFID0gMjY2LAotICAgICBJTlRfVFlQRSA9IDI2NywKLSAg
ICAgQlJFQUsgPSAyNjgsCi0gICAgIENPTlRJTlVFID0gMjY5LAotICAgICBETyA9IDI3MCwKLSAg
ICAgRUxTRSA9IDI3MSwKLSAgICAgRk9SID0gMjcyLAotICAgICBJRiA9IDI3MywKLSAgICAgRElT
Q0FSRCA9IDI3NCwKLSAgICAgUkVUVVJOID0gMjc1LAotICAgICBCVkVDMiA9IDI3NiwKLSAgICAg
QlZFQzMgPSAyNzcsCi0gICAgIEJWRUM0ID0gMjc4LAotICAgICBJVkVDMiA9IDI3OSwKLSAgICAg
SVZFQzMgPSAyODAsCi0gICAgIElWRUM0ID0gMjgxLAotICAgICBWRUMyID0gMjgyLAotICAgICBW
RUMzID0gMjgzLAotICAgICBWRUM0ID0gMjg0LAotICAgICBNQVRSSVgyID0gMjg1LAotICAgICBN
QVRSSVgzID0gMjg2LAotICAgICBNQVRSSVg0ID0gMjg3LAotICAgICBJTl9RVUFMID0gMjg4LAot
ICAgICBPVVRfUVVBTCA9IDI4OSwKLSAgICAgSU5PVVRfUVVBTCA9IDI5MCwKLSAgICAgVU5JRk9S
TSA9IDI5MSwKLSAgICAgVkFSWUlORyA9IDI5MiwKLSAgICAgU1RSVUNUID0gMjkzLAotICAgICBW
T0lEX1RZUEUgPSAyOTQsCi0gICAgIFdISUxFID0gMjk1LAotICAgICBTQU1QTEVSMkQgPSAyOTYs
Ci0gICAgIFNBTVBMRVJDVUJFID0gMjk3LAotICAgICBTQU1QTEVSX0VYVEVSTkFMX09FUyA9IDI5
OCwKLSAgICAgU0FNUExFUjJEUkVDVCA9IDI5OSwKLSAgICAgSURFTlRJRklFUiA9IDMwMCwKLSAg
ICAgVFlQRV9OQU1FID0gMzAxLAotICAgICBGTE9BVENPTlNUQU5UID0gMzAyLAotICAgICBJTlRD
T05TVEFOVCA9IDMwMywKLSAgICAgQk9PTENPTlNUQU5UID0gMzA0LAotICAgICBMRUZUX09QID0g
MzA1LAotICAgICBSSUdIVF9PUCA9IDMwNiwKLSAgICAgSU5DX09QID0gMzA3LAotICAgICBERUNf
T1AgPSAzMDgsCi0gICAgIExFX09QID0gMzA5LAotICAgICBHRV9PUCA9IDMxMCwKLSAgICAgRVFf
T1AgPSAzMTEsCi0gICAgIE5FX09QID0gMzEyLAotICAgICBBTkRfT1AgPSAzMTMsCi0gICAgIE9S
X09QID0gMzE0LAotICAgICBYT1JfT1AgPSAzMTUsCi0gICAgIE1VTF9BU1NJR04gPSAzMTYsCi0g
ICAgIERJVl9BU1NJR04gPSAzMTcsCi0gICAgIEFERF9BU1NJR04gPSAzMTgsCi0gICAgIE1PRF9B
U1NJR04gPSAzMTksCi0gICAgIExFRlRfQVNTSUdOID0gMzIwLAotICAgICBSSUdIVF9BU1NJR04g
PSAzMjEsCi0gICAgIEFORF9BU1NJR04gPSAzMjIsCi0gICAgIFhPUl9BU1NJR04gPSAzMjMsCi0g
ICAgIE9SX0FTU0lHTiA9IDMyNCwKLSAgICAgU1VCX0FTU0lHTiA9IDMyNSwKLSAgICAgTEVGVF9Q
QVJFTiA9IDMyNiwKLSAgICAgUklHSFRfUEFSRU4gPSAzMjcsCi0gICAgIExFRlRfQlJBQ0tFVCA9
IDMyOCwKLSAgICAgUklHSFRfQlJBQ0tFVCA9IDMyOSwKLSAgICAgTEVGVF9CUkFDRSA9IDMzMCwK
LSAgICAgUklHSFRfQlJBQ0UgPSAzMzEsCi0gICAgIERPVCA9IDMzMiwKLSAgICAgQ09NTUEgPSAz
MzMsCi0gICAgIENPTE9OID0gMzM0LAotICAgICBFUVVBTCA9IDMzNSwKLSAgICAgU0VNSUNPTE9O
ID0gMzM2LAotICAgICBCQU5HID0gMzM3LAotICAgICBEQVNIID0gMzM4LAotICAgICBUSUxERSA9
IDMzOSwKLSAgICAgUExVUyA9IDM0MCwKLSAgICAgU1RBUiA9IDM0MSwKLSAgICAgU0xBU0ggPSAz
NDIsCi0gICAgIFBFUkNFTlQgPSAzNDMsCi0gICAgIExFRlRfQU5HTEUgPSAzNDQsCi0gICAgIFJJ
R0hUX0FOR0xFID0gMzQ1LAotICAgICBWRVJUSUNBTF9CQVIgPSAzNDYsCi0gICAgIENBUkVUID0g
MzQ3LAotICAgICBBTVBFUlNBTkQgPSAzNDgsCi0gICAgIFFVRVNUSU9OID0gMzQ5Ci0gICB9Owot
I2VuZGlmCi0KLQotI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lT
X0RFQ0xBUkVECi10eXBlZGVmIHVuaW9uIFlZU1RZUEUKLXsKLQotCi0gICAgc3RydWN0IHsKLSAg
ICAgICAgdW5pb24gewotICAgICAgICAgICAgVFN0cmluZyAqc3RyaW5nOwotICAgICAgICAgICAg
ZmxvYXQgZjsKLSAgICAgICAgICAgIGludCBpOwotICAgICAgICAgICAgYm9vbCBiOwotICAgICAg
ICB9OwotICAgICAgICBUU3ltYm9sKiBzeW1ib2w7Ci0gICAgfSBsZXg7Ci0gICAgc3RydWN0IHsK
LSAgICAgICAgVE9wZXJhdG9yIG9wOwotICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAgICBUSW50
ZXJtTm9kZSogaW50ZXJtTm9kZTsKLSAgICAgICAgICAgIFRJbnRlcm1Ob2RlUGFpciBub2RlUGFp
cjsKLSAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW50ZXJtVHlwZWROb2RlOwotICAgICAgICAg
ICAgVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtQWdncmVnYXRlOwotICAgICAgICB9OwotICAgICAg
ICB1bmlvbiB7Ci0gICAgICAgICAgICBUUHVibGljVHlwZSB0eXBlOwotICAgICAgICAgICAgVFBy
ZWNpc2lvbiBwcmVjaXNpb247Ci0gICAgICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllcjsKLSAg
ICAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb247Ci0gICAgICAgICAgICBUUGFyYW1ldGVyIHBh
cmFtOwotICAgICAgICAgICAgVEZpZWxkKiBmaWVsZDsKLSAgICAgICAgICAgIFRGaWVsZExpc3Qq
IGZpZWxkTGlzdDsKLSAgICAgICAgfTsKLSAgICB9IGludGVybTsKLQotCi0KLX0gWVlTVFlQRTsK
LSMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCi0jIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUg
Lyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCi0jIGRlZmluZSBZWVNUWVBFX0lT
X0RFQ0xBUkVEIDEKLSNlbmRpZgotCi0jaWYgISBkZWZpbmVkIFlZTFRZUEUgJiYgISBkZWZpbmVk
IFlZTFRZUEVfSVNfREVDTEFSRUQKLXR5cGVkZWYgc3RydWN0IFlZTFRZUEUKLXsKLSAgaW50IGZp
cnN0X2xpbmU7Ci0gIGludCBmaXJzdF9jb2x1bW47Ci0gIGludCBsYXN0X2xpbmU7Ci0gIGludCBs
YXN0X2NvbHVtbjsKLX0gWVlMVFlQRTsKLSMgZGVmaW5lIHl5bHR5cGUgWVlMVFlQRSAvKiBvYnNv
bGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KLSMgZGVmaW5lIFlZTFRZUEVfSVNfREVDTEFS
RUQgMQotIyBkZWZpbmUgWVlMVFlQRV9JU19UUklWSUFMIDEKLSNlbmRpZgotCi0KLSNpZmRlZiBZ
WVBBUlNFX1BBUkFNCi0jaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVz
Ci1pbnQgeXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSk7Ci0jZWxzZQotaW50IHl5cGFyc2Ug
KCk7Ci0jZW5kaWYKLSNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLwotI2lmIGRlZmluZWQgX19T
VERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cwotaW50IHl5cGFyc2UgKFRQYXJzZUNvbnRleHQq
IGNvbnRleHQpOwotI2Vsc2UKLWludCB5eXBhcnNlICgpOwotI2VuZGlmCi0jZW5kaWYgLyogISBZ
WVBBUlNFX1BBUkFNICovCi0KLSNlbmRpZiAvKiAhWVlfWVlfR0xTTEFOR19UQUJfSF9JTkNMVURF
RCAgKi8KLQotLyogQ29weSB0aGUgc2Vjb25kIHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAq
LwotCi0KLWV4dGVybiBpbnQgeXlsZXgoWVlTVFlQRSogeXlsdmFsLCBZWUxUWVBFKiB5eWxsb2Ms
IHZvaWQqIHl5c2Nhbm5lcik7Ci1leHRlcm4gdm9pZCB5eWVycm9yKFlZTFRZUEUqIHl5bGxvYywg
VFBhcnNlQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKTsKLQotI2RlZmluZSBZ
WUxMT0NfREVGQVVMVChDdXJyZW50LCBSaHMsIE4pICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICBpZiAoWVlJRChOKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICAoQ3VycmVudCkuZmlyc3RfZmlsZSA9IFlZUkhTTE9DKFJocywg
MSkuZmlyc3RfZmlsZTsgIFwKLSAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgPSBZWVJIU0xP
QyhSaHMsIDEpLmZpcnN0X2xpbmU7ICBcCi0gICAgICAgIChDdXJyZW50KS5sYXN0X2ZpbGUgPSBZ
WVJIU0xPQyhSaHMsIE4pLmxhc3RfZmlsZTsgICAgXAotICAgICAgICAoQ3VycmVudCkubGFzdF9s
aW5lID0gWVlSSFNMT0MoUmhzLCBOKS5sYXN0X2xpbmU7ICAgIFwKLSAgICAgIH0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBlbHNl
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAoQ3VycmVudCkuZmlyc3RfZmlsZSA9IFlZUkhTTE9DKFJocywgMCkubGFzdF9maWxlOyAg
IFwKLSAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgPSBZWVJIU0xPQyhSaHMsIDApLmxhc3Rf
bGluZTsgICBcCi0gICAgICAgIChDdXJyZW50KS5sYXN0X2ZpbGUgPSBZWVJIU0xPQyhSaHMsIDAp
Lmxhc3RfZmlsZTsgICAgXAotICAgICAgICAoQ3VycmVudCkubGFzdF9saW5lID0gWVlSSFNMT0Mo
UmhzLCAwKS5sYXN0X2xpbmU7ICAgIFwKLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUg
VkVSVEVYX09OTFkoUywgTCkgeyAgXAotICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNI
X1ZFUlRFWF9TSEFERVIpIHsgIFwKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0
ZWQgaW4gdmVydGV4IHNoYWRlcnMgb25seSAiLCBTKTsgIFwKLSAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOyAgXAotICAgIH0gIFwKLX0KLQotI2RlZmluZSBGUkFHX09OTFkoUywgTCkgeyAgXAot
ICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNIX0ZSQUdNRU5UX1NIQURFUikgeyAgXAot
ICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXJz
IG9ubHkgIiwgUyk7ICBcCi0gICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwKLSAgICB9ICBc
Ci19Ci0KLQotCi0jaWZkZWYgc2hvcnQKLSMgdW5kZWYgc2hvcnQKLSNlbmRpZgotCi0jaWZkZWYg
WVlUWVBFX1VJTlQ4Ci10eXBlZGVmIFlZVFlQRV9VSU5UOCB5eXR5cGVfdWludDg7Ci0jZWxzZQot
dHlwZWRlZiB1bnNpZ25lZCBjaGFyIHl5dHlwZV91aW50ODsKLSNlbmRpZgotCi0jaWZkZWYgWVlU
WVBFX0lOVDgKLXR5cGVkZWYgWVlUWVBFX0lOVDggeXl0eXBlX2ludDg7Ci0jZWxpZiAoZGVmaW5l
ZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9f
Y3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi10eXBlZGVmIHNpZ25lZCBjaGFyIHl5dHlw
ZV9pbnQ4OwotI2Vsc2UKLXR5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQ4OwotI2VuZGlmCi0K
LSNpZmRlZiBZWVRZUEVfVUlOVDE2Ci10eXBlZGVmIFlZVFlQRV9VSU5UMTYgeXl0eXBlX3VpbnQx
NjsKLSNlbHNlCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB5eXR5cGVfdWludDE2OwotI2Vu
ZGlmCi0KLSNpZmRlZiBZWVRZUEVfSU5UMTYKLXR5cGVkZWYgWVlUWVBFX0lOVDE2IHl5dHlwZV9p
bnQxNjsKLSNlbHNlCi10eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50MTY7Ci0jZW5kaWYKLQot
I2lmbmRlZiBZWVNJWkVfVAotIyBpZmRlZiBfX1NJWkVfVFlQRV9fCi0jICBkZWZpbmUgWVlTSVpF
X1QgX19TSVpFX1RZUEVfXwotIyBlbGlmIGRlZmluZWQgc2l6ZV90Ci0jICBkZWZpbmUgWVlTSVpF
X1Qgc2l6ZV90Ci0jIGVsaWYgISBkZWZpbmVkIFlZU0laRV9UICYmIChkZWZpbmVkIF9fU1REQ19f
IHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMg
fHwgZGVmaW5lZCBfTVNDX1ZFUikKLSMgIGluY2x1ZGUgPHN0ZGRlZi5oPiAvKiBJTkZSSU5HRVMg
T04gVVNFUiBOQU1FIFNQQUNFICovCi0jICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90Ci0jIGVsc2UK
LSMgIGRlZmluZSBZWVNJWkVfVCB1bnNpZ25lZCBpbnQKLSMgZW5kaWYKLSNlbmRpZgotCi0jZGVm
aW5lIFlZU0laRV9NQVhJTVVNICgoWVlTSVpFX1QpIC0xKQotCi0jaWZuZGVmIFlZXwotIyBpZiBk
ZWZpbmVkIFlZRU5BQkxFX05MUyAmJiBZWUVOQUJMRV9OTFMKLSMgIGlmIEVOQUJMRV9OTFMKLSMg
ICBpbmNsdWRlIDxsaWJpbnRsLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8K
LSMgICBkZWZpbmUgWVlfKE1zZ2lkKSBkZ2V0dGV4dCAoImJpc29uLXJ1bnRpbWUiLCBNc2dpZCkK
LSMgIGVuZGlmCi0jIGVuZGlmCi0jIGlmbmRlZiBZWV8KLSMgIGRlZmluZSBZWV8oTXNnaWQpIE1z
Z2lkCi0jIGVuZGlmCi0jZW5kaWYKLQotLyogU3VwcHJlc3MgdW51c2VkLXZhcmlhYmxlIHdhcm5p
bmdzIGJ5ICJ1c2luZyIgRS4gICovCi0jaWYgISBkZWZpbmVkIGxpbnQgfHwgZGVmaW5lZCBfX0dO
VUNfXwotIyBkZWZpbmUgWVlVU0UoRSkgKCh2b2lkKSAoRSkpCi0jZWxzZQotIyBkZWZpbmUgWVlV
U0UoRSkgLyogZW1wdHkgKi8KLSNlbmRpZgotCi0vKiBJZGVudGl0eSBmdW5jdGlvbiwgdXNlZCB0
byBzdXBwcmVzcyB3YXJuaW5ncyBhYm91dCBjb25zdGFudCBjb25kaXRpb25zLiAgKi8KLSNpZm5k
ZWYgbGludAotIyBkZWZpbmUgWVlJRChOKSAoTikKLSNlbHNlCi0jaWYgKGRlZmluZWQgX19TVERD
X18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1
cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIGludAotWVlJRCAoaW50IHl5aSkKLSNlbHNl
Ci1zdGF0aWMgaW50Ci1ZWUlEICh5eWkpCi0gICAgaW50IHl5aTsKLSNlbmRpZgotewotICByZXR1
cm4geXlpOwotfQotI2VuZGlmCi0KLSNpZiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9S
X1ZFUkJPU0UKLQotLyogVGhlIHBhcnNlciBpbnZva2VzIGFsbG9jYSBvciBtYWxsb2M7IGRlZmlu
ZSB0aGUgbmVjZXNzYXJ5IHN5bWJvbHMuICAqLwotCi0jIGlmZGVmIFlZU1RBQ0tfVVNFX0FMTE9D
QQotIyAgaWYgWVlTVEFDS19VU0VfQUxMT0NBCi0jICAgaWZkZWYgX19HTlVDX18KLSMgICAgZGVm
aW5lIFlZU1RBQ0tfQUxMT0MgX19idWlsdGluX2FsbG9jYQotIyAgIGVsaWYgZGVmaW5lZCBfX0JV
SUxUSU5fVkFfQVJHX0lOQ1IKLSMgICAgaW5jbHVkZSA8YWxsb2NhLmg+IC8qIElORlJJTkdFUyBP
TiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBlbGlmIGRlZmluZWQgX0FJWAotIyAgICBkZWZpbmUg
WVlTVEFDS19BTExPQyBfX2FsbG9jYQotIyAgIGVsaWYgZGVmaW5lZCBfTVNDX1ZFUgotIyAgICBp
bmNsdWRlIDxtYWxsb2MuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAg
ICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKLSMgICBlbHNlCi0jICAgIGRlZmluZSBZWVNUQUNLX0FM
TE9DIGFsbG9jYQotIyAgICBpZiAhIGRlZmluZWQgX0FMTE9DQV9IICYmICEgZGVmaW5lZCBFWElU
X1NVQ0NFU1MgJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwK
LSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotIyAgICAg
aW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSAg
ICAgIC8qIFVzZSBFWElUX1NVQ0NFU1MgYXMgYSB3aXRuZXNzIGZvciBzdGRsaWIuaC4gICovCi0j
ICAgICBpZm5kZWYgRVhJVF9TVUNDRVNTCi0jICAgICAgZGVmaW5lIEVYSVRfU1VDQ0VTUyAwCi0j
ICAgICBlbmRpZgotIyAgICBlbmRpZgotIyAgIGVuZGlmCi0jICBlbmRpZgotIyBlbmRpZgotCi0j
IGlmZGVmIFlZU1RBQ0tfQUxMT0MKLSAgIC8qIFBhY2lmeSBHQ0MncyBgZW1wdHkgaWYtYm9keScg
d2FybmluZy4gICovCi0jICBkZWZpbmUgWVlTVEFDS19GUkVFKFB0cikgZG8geyAvKiBlbXB0eSAq
LzsgfSB3aGlsZSAoWVlJRCAoMCkpCi0jICBpZm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNCi0g
ICAgLyogVGhlIE9TIG1pZ2h0IGd1YXJhbnRlZSBvbmx5IG9uZSBndWFyZCBwYWdlIGF0IHRoZSBi
b3R0b20gb2YgdGhlIHN0YWNrLAotICAgICAgIGFuZCBhIHBhZ2Ugc2l6ZSBjYW4gYmUgYXMgc21h
bGwgYXMgNDA5NiBieXRlcy4gIFNvIHdlIGNhbm5vdCBzYWZlbHkKLSAgICAgICBpbnZva2UgYWxs
b2NhIChOKSBpZiBOIGV4Y2VlZHMgNDA5Ni4gIFVzZSBhIHNsaWdodGx5IHNtYWxsZXIgbnVtYmVy
Ci0gICAgICAgdG8gYWxsb3cgZm9yIGEgZmV3IGNvbXBpbGVyLWFsbG9jYXRlZCB0ZW1wb3Jhcnkg
c3RhY2sgc2xvdHMuICAqLwotIyAgIGRlZmluZSBZWVNUQUNLX0FMTE9DX01BWElNVU0gNDAzMiAv
KiByZWFzb25hYmxlIGNpcmNhIDIwMDYgKi8KLSMgIGVuZGlmCi0jIGVsc2UKLSMgIGRlZmluZSBZ
WVNUQUNLX0FMTE9DIFlZTUFMTE9DCi0jICBkZWZpbmUgWVlTVEFDS19GUkVFIFlZRlJFRQotIyAg
aWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQotIyAgIGRlZmluZSBZWVNUQUNLX0FMTE9DX01B
WElNVU0gWVlTSVpFX01BWElNVU0KLSMgIGVuZGlmCi0jICBpZiAoZGVmaW5lZCBfX2NwbHVzcGx1
cyAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTIFwKLSAgICAgICAmJiAhICgoZGVmaW5lZCBZWU1B
TExPQyB8fCBkZWZpbmVkIG1hbGxvYykgXAotCSAgICAgJiYgKGRlZmluZWQgWVlGUkVFIHx8IGRl
ZmluZWQgZnJlZSkpKQotIyAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNF
UiBOQU1FIFNQQUNFICovCi0jICAgaWZuZGVmIEVYSVRfU1VDQ0VTUwotIyAgICBkZWZpbmUgRVhJ
VF9TVUNDRVNTIDAKLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgIGlmbmRlZiBZWU1BTExPQwotIyAg
IGRlZmluZSBZWU1BTExPQyBtYWxsb2MKLSMgICBpZiAhIGRlZmluZWQgbWFsbG9jICYmICEgZGVm
aW5lZCBFWElUX1NVQ0NFU1MgJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9f
RlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVS
KQotdm9pZCAqbWFsbG9jIChZWVNJWkVfVCk7IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BB
Q0UgKi8KLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgIGlmbmRlZiBZWUZSRUUKLSMgICBkZWZpbmUg
WVlGUkVFIGZyZWUKLSMgICBpZiAhIGRlZmluZWQgZnJlZSAmJiAhIGRlZmluZWQgRVhJVF9TVUND
RVNTICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAg
IHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXZvaWQgZnJlZSAo
dm9pZCAqKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgIGVuZGlmCi0j
ICBlbmRpZgotIyBlbmRpZgotI2VuZGlmIC8qICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJS
T1JfVkVSQk9TRSAqLwotCi0KLSNpZiAoISBkZWZpbmVkIHl5b3ZlcmZsb3cgXAotICAgICAmJiAo
ISBkZWZpbmVkIF9fY3BsdXNwbHVzIFwKLQkgfHwgKGRlZmluZWQgWVlMVFlQRV9JU19UUklWSUFM
ICYmIFlZTFRZUEVfSVNfVFJJVklBTCBcCi0JICAgICAmJiBkZWZpbmVkIFlZU1RZUEVfSVNfVFJJ
VklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkKLQotLyogQSB0eXBlIHRoYXQgaXMgcHJvcGVy
bHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1lbWJlci4gICovCi11bmlvbiB5eWFsbG9jCi17Ci0g
IHl5dHlwZV9pbnQxNiB5eXNzX2FsbG9jOwotICBZWVNUWVBFIHl5dnNfYWxsb2M7Ci0gIFlZTFRZ
UEUgeXlsc19hbGxvYzsKLX07Ci0KLS8qIFRoZSBzaXplIG9mIHRoZSBtYXhpbXVtIGdhcCBiZXR3
ZWVuIG9uZSBhbGlnbmVkIHN0YWNrIGFuZCB0aGUgbmV4dC4gICovCi0jIGRlZmluZSBZWVNUQUNL
X0dBUF9NQVhJTVVNIChzaXplb2YgKHVuaW9uIHl5YWxsb2MpIC0gMSkKLQotLyogVGhlIHNpemUg
b2YgYW4gYXJyYXkgbGFyZ2UgdG8gZW5vdWdoIHRvIGhvbGQgYWxsIHN0YWNrcywgZWFjaCB3aXRo
Ci0gICBOIGVsZW1lbnRzLiAgKi8KLSMgZGVmaW5lIFlZU1RBQ0tfQllURVMoTikgXAotICAgICAo
KE4pICogKHNpemVvZiAoeXl0eXBlX2ludDE2KSArIHNpemVvZiAoWVlTVFlQRSkgKyBzaXplb2Yg
KFlZTFRZUEUpKSBcCi0gICAgICArIDIgKiBZWVNUQUNLX0dBUF9NQVhJTVVNKQotCi0jIGRlZmlu
ZSBZWUNPUFlfTkVFREVEIDEKLQotLyogUmVsb2NhdGUgU1RBQ0sgZnJvbSBpdHMgb2xkIGxvY2F0
aW9uIHRvIHRoZSBuZXcgb25lLiAgVGhlCi0gICBsb2NhbCB2YXJpYWJsZXMgWVlTSVpFIGFuZCBZ
WVNUQUNLU0laRSBnaXZlIHRoZSBvbGQgYW5kIG5ldyBudW1iZXIgb2YKLSAgIGVsZW1lbnRzIGlu
IHRoZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlCi0gICBz
dGFjay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBwcm9wZXJseSBhbGlnbmVkIGxvY2F0aW9uIGZvciB0
aGUgbmV4dAotICAgc3RhY2suICAqLwotIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFja19h
bGxvYywgU3RhY2spCQkJCVwKLSAgICBkbwkJCQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJCQlcCi0J
WVlTSVpFX1QgeXluZXdieXRlczsJCQkJCQlcCi0JWVlDT1BZICgmeXlwdHItPlN0YWNrX2FsbG9j
LCBTdGFjaywgeXlzaXplKTsJCQlcCi0JU3RhY2sgPSAmeXlwdHItPlN0YWNrX2FsbG9jOwkJCQkJ
XAotCXl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNrKSArIFlZU1RBQ0tf
R0FQX01BWElNVU07IFwKLQl5eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIpOwkJ
CQlcCi0gICAgICB9CQkJCQkJCQkJXAotICAgIHdoaWxlIChZWUlEICgwKSkKLQotI2VuZGlmCi0K
LSNpZiBkZWZpbmVkIFlZQ09QWV9ORUVERUQgJiYgWVlDT1BZX05FRURFRAotLyogQ29weSBDT1VO
VCBvYmplY3RzIGZyb20gU1JDIHRvIERTVC4gIFRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRv
Ci0gICBub3Qgb3ZlcmxhcC4gICovCi0jIGlmbmRlZiBZWUNPUFkKLSMgIGlmIGRlZmluZWQgX19H
TlVDX18gJiYgMSA8IF9fR05VQ19fCi0jICAgZGVmaW5lIFlZQ09QWShEc3QsIFNyYywgQ291bnQp
IFwKLSAgICAgIF9fYnVpbHRpbl9tZW1jcHkgKERzdCwgU3JjLCAoQ291bnQpICogc2l6ZW9mICgq
KFNyYykpKQotIyAgZWxzZQotIyAgIGRlZmluZSBZWUNPUFkoRHN0LCBTcmMsIENvdW50KSAgICAg
ICAgICAgICAgXAotICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgIFlZU0laRV9UIHl5aTsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICAgIGZvciAoeXlpID0gMDsgeXlpIDwgKENvdW50KTsgeXlpKyspICAgXAotICAgICAgICAgICAg
KERzdClbeXlpXSA9IChTcmMpW3l5aV07ICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgd2hpbGUgKFlZSUQgKDApKQot
IyAgZW5kaWYKLSMgZW5kaWYKLSNlbmRpZiAvKiAhWVlDT1BZX05FRURFRCAqLwotCi0vKiBZWUZJ
TkFMIC0tIFN0YXRlIG51bWJlciBvZiB0aGUgdGVybWluYXRpb24gc3RhdGUuICAqLwotI2RlZmlu
ZSBZWUZJTkFMICA3NAotLyogWVlMQVNUIC0tIExhc3QgaW5kZXggaW4gWVlUQUJMRS4gICovCi0j
ZGVmaW5lIFlZTEFTVCAgIDE0OTAKLQotLyogWVlOVE9LRU5TIC0tIE51bWJlciBvZiB0ZXJtaW5h
bHMuICAqLwotI2RlZmluZSBZWU5UT0tFTlMgIDk1Ci0vKiBZWU5OVFMgLS0gTnVtYmVyIG9mIG5v
bnRlcm1pbmFscy4gICovCi0jZGVmaW5lIFlZTk5UUyAgODQKLS8qIFlZTlJVTEVTIC0tIE51bWJl
ciBvZiBydWxlcy4gICovCi0jZGVmaW5lIFlZTlJVTEVTICAyMDIKLS8qIFlZTlJVTEVTIC0tIE51
bWJlciBvZiBzdGF0ZXMuICAqLwotI2RlZmluZSBZWU5TVEFURVMgIDMwNwotCi0vKiBZWVRSQU5T
TEFURShZWUxFWCkgLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVY
LiAgKi8KLSNkZWZpbmUgWVlVTkRFRlRPSyAgMgotI2RlZmluZSBZWU1BWFVUT0sgICAzNDkKLQot
I2RlZmluZSBZWVRSQU5TTEFURShZWVgpCQkJCQkJXAotICAoKHVuc2lnbmVkIGludCkgKFlZWCkg
PD0gWVlNQVhVVE9LID8geXl0cmFuc2xhdGVbWVlYXSA6IFlZVU5ERUZUT0spCi0KLS8qIFlZVFJB
TlNMQVRFW1lZTEVYXSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlM
RVguICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRyYW5zbGF0ZVtdID0KLXsKLSAg
ICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
Ci0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsCi0gICAgICAgNSwgICAgIDYs
ICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwK
LSAgICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAy
MiwgICAgMjMsICAgIDI0LAotICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAg
ICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsCi0gICAgICAzNSwgICAgMzYsICAgIDM3
LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwKLSAgICAg
IDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAg
NTMsICAgIDU0LAotICAgICAgNTUsICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwg
ICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsCi0gICAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2
OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLCAgICA3NCwKLSAgICAgIDc1LCAg
ICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgxLCAgICA4MiwgICAgODMsICAg
IDg0LAotICAgICAgODUsICAgIDg2LCAgICA4NywgICAgODgsICAgIDg5LCAgICA5MCwgICAgOTEs
ICAgIDkyLCAgICA5MywgICAgOTQKLX07Ci0KLSNpZiBZWURFQlVHCi0vKiBZWVBSSFNbWVlOXSAt
LSBJbmRleCBvZiB0aGUgZmlyc3QgUkhTIHN5bWJvbCBvZiBydWxlIG51bWJlciBZWU4gaW4KLSAg
IFlZUkhTLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5cHJoc1tdID0KLXsKLSAg
ICAgICAwLCAgICAgMCwgICAgIDMsICAgICA1LCAgICAgNywgICAgIDksICAgIDExLCAgICAxMywg
ICAgMTUsICAgIDE3LAotICAgICAgMjEsICAgIDIzLCAgICAyOCwgICAgMzAsICAgIDM0LCAgICAz
NywgICAgNDAsICAgIDQyLCAgICA0NCwgICAgNDYsCi0gICAgICA1MCwgICAgNTMsICAgIDU2LCAg
ICA1OSwgICAgNjEsICAgIDY0LCAgICA2OCwgICAgNzEsICAgIDczLCAgICA3NSwKLSAgICAgIDc3
LCAgICA4MCwgICAgODMsICAgIDg2LCAgICA4OCwgICAgOTAsICAgIDkyLCAgICA5NCwgICAgOTgs
ICAgMTAyLAotICAgICAxMDQsICAgMTA4LCAgIDExMiwgICAxMTQsICAgMTE2LCAgIDEyMCwgICAx
MjQsICAgMTI4LCAgIDEzMiwgICAxMzQsCi0gICAgIDEzOCwgICAxNDIsICAgMTQ0LCAgIDE0Niwg
ICAxNDgsICAgMTUwLCAgIDE1NCwgICAxNTYsICAgMTYwLCAgIDE2MiwKLSAgICAgMTY2LCAgIDE2
OCwgICAxNzQsICAgMTc2LCAgIDE4MCwgICAxODIsICAgMTg0LCAgIDE4NiwgICAxODgsICAgMTkw
LAotICAgICAxOTIsICAgMTk2LCAgIDE5OCwgICAyMDEsICAgMjA0LCAgIDIwOSwgICAyMTIsICAg
MjE0LCAgIDIxNiwgICAyMTksCi0gICAgIDIyMywgICAyMjcsICAgMjMwLCAgIDIzNiwgICAyNDAs
ICAgMjQzLCAgIDI0NywgICAyNTAsICAgMjUxLCAgIDI1MywKLSAgICAgMjU1LCAgIDI1NywgICAy
NTksICAgMjYxLCAgIDI2NSwgICAyNzEsICAgMjc4LCAgIDI4NCwgICAyODYsICAgMjg5LAotICAg
ICAyOTQsICAgMzAwLCAgIDMwNSwgICAzMDgsICAgMzEwLCAgIDMxMywgICAzMTUsICAgMzE3LCAg
IDMxOSwgICAzMjIsCi0gICAgIDMyNCwgICAzMjYsICAgMzI5LCAgIDMzMSwgICAzMzMsICAgMzM1
LCAgIDMzNywgICAzNDIsICAgMzQ0LCAgIDM0NiwKLSAgICAgMzQ4LCAgIDM1MCwgICAzNTIsICAg
MzU0LCAgIDM1NiwgICAzNTgsICAgMzYwLCAgIDM2MiwgICAzNjQsICAgMzY2LAotICAgICAzNjgs
ICAgMzcwLCAgIDM3MiwgICAzNzQsICAgMzc2LCAgIDM3OCwgICAzODAsICAgMzgyLCAgIDM4NCwg
ICAzODYsCi0gICAgIDM4NywgICAzOTQsICAgMzk1LCAgIDQwMSwgICA0MDMsICAgNDA2LCAgIDQx
MCwgICA0MTIsICAgNDE2LCAgIDQxOCwKLSAgICAgNDIzLCAgIDQyNSwgICA0MjcsICAgNDI5LCAg
IDQzMSwgICA0MzMsICAgNDM1LCAgIDQzNywgICA0MzksICAgNDQxLAotICAgICA0NDQsICAgNDQ1
LCAgIDQ0NiwgICA0NTIsICAgNDU0LCAgIDQ1NiwgICA0NTcsICAgNDYwLCAgIDQ2MSwgICA0NjQs
Ci0gICAgIDQ2NywgICA0NzEsICAgNDczLCAgIDQ3NiwgICA0NzgsICAgNDgxLCAgIDQ4NywgICA0
OTEsICAgNDkzLCAgIDQ5NSwKLSAgICAgNTAwLCAgIDUwMSwgICA1MDgsICAgNTA5LCAgIDUxOCwg
ICA1MTksICAgNTI3LCAgIDUyOSwgICA1MzEsICAgNTMzLAotICAgICA1MzQsICAgNTM3LCAgIDU0
MSwgICA1NDQsICAgNTQ3LCAgIDU1MCwgICA1NTQsICAgNTU3LCAgIDU1OSwgICA1NjIsCi0gICAg
IDU2NCwgICA1NjYsICAgNTY3Ci19OwotCi0vKiBZWVJIUyAtLSBBIGAtMSctc2VwYXJhdGVkIGxp
c3Qgb2YgdGhlIHJ1bGVzJyBSSFMuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXJo
c1tdID0KLXsKLSAgICAgMTc1LCAgICAgMCwgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgNDYsICAg
IC0xLCAgICA0NSwgICAgLTEsICAgIDk3LAotICAgICAgLTEsICAgIDQ4LCAgICAtMSwgICAgNDcs
ICAgIC0xLCAgICA0OSwgICAgLTEsICAgIDcxLCAgIDEyNCwgICAgNzIsCi0gICAgICAtMSwgICAg
OTgsICAgIC0xLCAgICA5OSwgICAgNzMsICAgMTAwLCAgICA3NCwgICAgLTEsICAgMTAxLCAgICAt
MSwKLSAgICAgIDk5LCAgICA3NywgICAgOTYsICAgIC0xLCAgICA5OSwgICAgNTIsICAgIC0xLCAg
ICA5OSwgICAgNTMsICAgIC0xLAotICAgICAxMjQsICAgIC0xLCAgIDEwMiwgICAgLTEsICAgMTAz
LCAgICAtMSwgICAgOTksICAgIDc3LCAgIDEwMywgICAgLTEsCi0gICAgIDEwNSwgICAgNzIsICAg
IC0xLCAgIDEwNCwgICAgNzIsICAgIC0xLCAgIDEwNiwgICAgMzksICAgIC0xLCAgIDEwNiwKLSAg
ICAgIC0xLCAgIDEwNiwgICAxMjIsICAgIC0xLCAgIDEwNSwgICAgNzgsICAgMTIyLCAgICAtMSwg
ICAxMDcsICAgIDcxLAotICAgICAgLTEsICAgMTQyLCAgICAtMSwgICAgNDUsICAgIC0xLCAgICA5
OSwgICAgLTEsICAgIDUyLCAgIDEwOCwgICAgLTEsCi0gICAgICA1MywgICAxMDgsICAgIC0xLCAg
IDEwOSwgICAxMDgsICAgIC0xLCAgICA4NSwgICAgLTEsICAgIDgzLCAgICAtMSwKLSAgICAgIDgy
LCAgICAtMSwgICAxMDgsICAgIC0xLCAgIDExMCwgICAgODYsICAgMTA4LCAgICAtMSwgICAxMTAs
ICAgIDg3LAotICAgICAxMDgsICAgIC0xLCAgIDExMCwgICAgLTEsICAgMTExLCAgICA4NSwgICAx
MTAsICAgIC0xLCAgIDExMSwgICAgODMsCi0gICAgIDExMCwgICAgLTEsICAgMTExLCAgICAtMSwg
ICAxMTIsICAgIC0xLCAgIDExMywgICAgODksICAgMTEyLCAgICAtMSwKLSAgICAgMTEzLCAgICA5
MCwgICAxMTIsICAgIC0xLCAgIDExMywgICAgNTQsICAgMTEyLCAgICAtMSwgICAxMTMsICAgIDU1
LAotICAgICAxMTIsICAgIC0xLCAgIDExMywgICAgLTEsICAgMTE0LCAgICA1NiwgICAxMTMsICAg
IC0xLCAgIDExNCwgICAgNTcsCi0gICAgIDExMywgICAgLTEsICAgMTE0LCAgICAtMSwgICAxMTUs
ICAgIC0xLCAgIDExNiwgICAgLTEsICAgMTE3LCAgICAtMSwKLSAgICAgMTE4LCAgICA1OCwgICAx
MTcsICAgIC0xLCAgIDExOCwgICAgLTEsICAgMTE5LCAgICA2MCwgICAxMTgsICAgIC0xLAotICAg
ICAxMTksICAgIC0xLCAgIDEyMCwgICAgNTksICAgMTE5LCAgICAtMSwgICAxMjAsICAgIC0xLCAg
IDEyMCwgICAgOTQsCi0gICAgIDEyNCwgICAgNzksICAgMTIyLCAgICAtMSwgICAxMjEsICAgIC0x
LCAgIDEwOCwgICAxMjMsICAgMTIyLCAgICAtMSwKLSAgICAgIDgwLCAgICAtMSwgICAgNjEsICAg
IC0xLCAgICA2MiwgICAgLTEsICAgIDYzLCAgICAtMSwgICAgNzAsICAgIC0xLAotICAgICAxMjIs
ICAgIC0xLCAgIDEyNCwgICAgNzgsICAgMTIyLCAgICAtMSwgICAxMjEsICAgIC0xLCAgIDEyNywg
ICAgODEsCi0gICAgICAtMSwgICAxMzUsICAgIDgxLCAgICAtMSwgICAgIDcsICAgMTQwLCAgIDE0
MSwgICAgODEsICAgIC0xLCAgIDEyOCwKLSAgICAgIDcyLCAgICAtMSwgICAxMzAsICAgIC0xLCAg
IDEyOSwgICAgLTEsICAgMTMwLCAgIDEzMiwgICAgLTEsICAgMTI5LAotICAgICAgNzgsICAgMTMy
LCAgICAtMSwgICAxMzcsICAgIDQ1LCAgICA3MSwgICAgLTEsICAgMTM5LCAgICA5NiwgICAgLTEs
Ci0gICAgIDEzOSwgICAgOTYsICAgIDczLCAgIDEyNSwgICAgNzQsICAgIC0xLCAgIDEzOCwgICAx
MzMsICAgMTMxLCAgICAtMSwKLSAgICAgMTMzLCAgIDEzMSwgICAgLTEsICAgMTM4LCAgIDEzMywg
ICAxMzQsICAgIC0xLCAgIDEzMywgICAxMzQsICAgIC0xLAotICAgICAgLTEsICAgIDMzLCAgICAt
MSwgICAgMzQsICAgIC0xLCAgICAzNSwgICAgLTEsICAgMTM5LCAgICAtMSwgICAxMzYsCi0gICAg
ICAtMSwgICAxMzUsICAgIDc4LCAgICA5NiwgICAgLTEsICAgMTM1LCAgICA3OCwgICAgOTYsICAg
IDczLCAgICA3NCwKLSAgICAgIC0xLCAgIDEzNSwgICAgNzgsICAgIDk2LCAgICA3MywgICAxMjUs
ICAgIDc0LCAgICAtMSwgICAxMzUsICAgIDc4LAotICAgICAgOTYsICAgIDgwLCAgIDE1MCwgICAg
LTEsICAgMTM3LCAgICAtMSwgICAxMzcsICAgIDk2LCAgICAtMSwgICAxMzcsCi0gICAgICA5Niwg
ICAgNzMsICAgIDc0LCAgICAtMSwgICAxMzcsICAgIDk2LCAgICA3MywgICAxMjUsICAgIDc0LCAg
ICAtMSwKLSAgICAgMTM3LCAgICA5NiwgICAgODAsICAgMTUwLCAgICAtMSwgICAgIDMsICAgIDQ1
LCAgICAtMSwgICAxMzksICAgIC0xLAotICAgICAxMzgsICAgMTM5LCAgICAtMSwgICAgIDksICAg
IC0xLCAgICAgOCwgICAgLTEsICAgIDM3LCAgICAtMSwgICAgIDMsCi0gICAgICAzNywgICAgLTEs
ICAgIDM2LCAgICAtMSwgICAxNDEsICAgIC0xLCAgIDE0MCwgICAxNDEsICAgIC0xLCAgICAgNCwK
LSAgICAgIC0xLCAgICAgNSwgICAgLTEsICAgICA2LCAgICAtMSwgICAxNDIsICAgIC0xLCAgIDE0
MiwgICAgNzMsICAgMTI1LAotICAgICAgNzQsICAgIC0xLCAgICAzOSwgICAgLTEsICAgIDExLCAg
ICAtMSwgICAgMTIsICAgIC0xLCAgICAxMCwgICAgLTEsCi0gICAgICAyNywgICAgLTEsICAgIDI4
LCAgICAtMSwgICAgMjksICAgIC0xLCAgICAyMSwgICAgLTEsICAgIDIyLCAgICAtMSwKLSAgICAg
IDIzLCAgICAtMSwgICAgMjQsICAgIC0xLCAgICAyNSwgICAgLTEsICAgIDI2LCAgICAtMSwgICAg
MzAsICAgIC0xLAotICAgICAgMzEsICAgIC0xLCAgICAzMiwgICAgLTEsICAgIDQxLCAgICAtMSwg
ICAgNDIsICAgIC0xLCAgICA0MywgICAgLTEsCi0gICAgICA0NCwgICAgLTEsICAgMTQzLCAgICAt
MSwgICAgNDYsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDk2LCAgICA3NSwKLSAgICAgMTQ0LCAg
IDE0NiwgICAgNzYsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDc1LCAgIDE0NSwgICAxNDYsICAg
IDc2LAotICAgICAgLTEsICAgMTQ3LCAgICAtMSwgICAxNDYsICAgMTQ3LCAgICAtMSwgICAxMzks
ICAgMTQ4LCAgICA4MSwgICAgLTEsCi0gICAgIDE0OSwgICAgLTEsICAgMTQ4LCAgICA3OCwgICAx
NDksICAgIC0xLCAgICA5NiwgICAgLTEsICAgIDk2LCAgICA3MywKLSAgICAgMTI1LCAgICA3NCwg
ICAgLTEsICAgMTIyLCAgICAtMSwgICAxMjYsICAgIC0xLCAgIDE1NCwgICAgLTEsICAgMTUzLAot
ICAgICAgLTEsICAgMTUxLCAgICAtMSwgICAxNjMsICAgIC0xLCAgIDE2NCwgICAgLTEsICAgMTY3
LCAgICAtMSwgICAxNzQsCi0gICAgICAtMSwgICAgNzUsICAgIDc2LCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICA3NSwgICAxNTUsICAgMTYyLCAgIDE1NiwKLSAgICAgIDc2LCAgICAtMSwgICAxNjEs
ICAgIC0xLCAgIDE1MywgICAgLTEsICAgIC0xLCAgIDE1OSwgICAxNjEsICAgIC0xLAotICAgICAg
LTEsICAgMTYwLCAgIDE1MywgICAgLTEsICAgIDc1LCAgICA3NiwgICAgLTEsICAgIDc1LCAgIDE2
MiwgICAgNzYsCi0gICAgICAtMSwgICAxNTIsICAgIC0xLCAgIDE2MiwgICAxNTIsICAgIC0xLCAg
ICA4MSwgICAgLTEsICAgMTI0LCAgICA4MSwKLSAgICAgIC0xLCAgICAxOCwgICAgNzEsICAgMTI0
LCAgICA3MiwgICAxNjUsICAgIC0xLCAgIDE1OCwgICAgMTYsICAgMTU4LAotICAgICAgLTEsICAg
MTU4LCAgICAtMSwgICAxMjQsICAgIC0xLCAgIDEzNywgICAgOTYsICAgIDgwLCAgIDE1MCwgICAg
LTEsCi0gICAgICAtMSwgICAgNDAsICAgIDcxLCAgIDE2OCwgICAxNjYsICAgIDcyLCAgIDE1Nywg
ICAgLTEsICAgIC0xLCAgICAxNSwKLSAgICAgMTY5LCAgIDE1OCwgICAgNDAsICAgIDcxLCAgIDEy
NCwgICAgNzIsICAgIDgxLCAgICAtMSwgICAgLTEsICAgIDE3LAotICAgICAgNzEsICAgMTcwLCAg
IDE3MSwgICAxNzMsICAgIDcyLCAgIDE1NywgICAgLTEsICAgMTYzLCAgICAtMSwgICAxNTEsCi0g
ICAgICAtMSwgICAxNjYsICAgIC0xLCAgICAtMSwgICAxNzIsICAgIDgxLCAgICAtMSwgICAxNzIs
ICAgIDgxLCAgIDEyNCwKLSAgICAgIC0xLCAgICAxNCwgICAgODEsICAgIC0xLCAgICAxMywgICAg
ODEsICAgIC0xLCAgICAyMCwgICAgODEsICAgIC0xLAotICAgICAgMjAsICAgMTI0LCAgICA4MSwg
ICAgLTEsICAgIDE5LCAgICA4MSwgICAgLTEsICAgMTc2LCAgICAtMSwgICAxNzUsCi0gICAgIDE3
NiwgICAgLTEsICAgMTc3LCAgICAtMSwgICAxMjYsICAgIC0xLCAgICAtMSwgICAxMjcsICAgMTc4
LCAgIDE2MSwKLSAgICAgIC0xCi19OwotCi0vKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUg
d2hlcmUgcnVsZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5
cGVfdWludDE2IHl5cmxpbmVbXSA9Ci17Ci0gICAgICAgMCwgICAxODAsICAgMTgwLCAgIDE4MSwg
ICAxODQsICAgMjI3LCAgIDIzMCwgICAyNDMsICAgMjQ4LCAgIDI1MywKLSAgICAgMjU5LCAgIDI2
MiwgICAyNjUsICAgMjY4LCAgIDM2MywgICAzNzMsICAgMzg2LCAgIDM5NCwgICA0OTQsICAgNDk3
LAotICAgICA1MDUsICAgNTA4LCAgIDUxNCwgICA1MTgsICAgNTI1LCAgIDUzMSwgICA1NDAsICAg
NTQ4LCAgIDYwMywgICA2MTMsCi0gICAgIDYxNiwgICA2MjYsICAgNjM2LCAgIDY1NywgICA2NTgs
ICAgNjU5LCAgIDY2NCwgICA2NjUsICAgNjczLCAgIDY4NCwKLSAgICAgNjg1LCAgIDY5MywgICA3
MDQsICAgNzA4LCAgIDcwOSwgICA3MTksICAgNzI5LCAgIDczOSwgICA3NTIsICAgNzUzLAotICAg
ICA3NjMsICAgNzc2LCAgIDc4MCwgICA3ODQsICAgNzg4LCAgIDc4OSwgICA4MDIsICAgODAzLCAg
IDgxNiwgICA4MTcsCi0gICAgIDgzMCwgICA4MzEsICAgODQ4LCAgIDg0OSwgICA4NjIsICAgODYz
LCAgIDg2NCwgICA4NjUsICAgODY2LCAgIDg3MCwKLSAgICAgODczLCAgIDg4NCwgICA4OTIsICAg
OTE5LCAgIDkyNCwgICA5MzgsICAgOTkzLCAgIDk5NiwgIDEwMDMsICAxMDExLAotICAgIDEwMzIs
ICAxMDUzLCAgMTA2MywgIDEwOTEsICAxMDk2LCAgMTEwNiwgIDExMTEsICAxMTIxLCAgMTEyNCwg
IDExMjcsCi0gICAgMTEzMCwgIDExMzYsICAxMTQzLCAgMTE0NiwgIDExNjgsICAxMTg2LCAgMTIx
MCwgIDEyMzMsICAxMjM3LCAgMTI1NSwKLSAgICAxMjYzLCAgMTI5NSwgIDEzMTUsICAxMzM2LCAg
MTM0NSwgIDEzNjgsICAxMzcxLCAgMTM3NywgIDEzODUsICAxMzkzLAotICAgIDE0MDEsICAxNDEx
LCAgMTQxOCwgIDE0MjEsICAxNDI0LCAgMTQzMCwgIDE0MzMsICAxNDQ4LCAgMTQ1MiwgIDE0NTYs
Ci0gICAgMTQ2MCwgIDE0NjQsICAxNDY5LCAgMTQ3NCwgIDE0NzksICAxNDg0LCAgMTQ4OSwgIDE0
OTQsICAxNDk5LCAgMTUwNCwKLSAgICAxNTA5LCAgMTUxNCwgIDE1MTksICAxNTI0LCAgMTUyOCwg
IDE1MzIsICAxNTQwLCAgMTU0OCwgIDE1NTIsICAxNTY1LAotICAgIDE1NjUsICAxNTc5LCAgMTU3
OSwgIDE1ODgsICAxNTkxLCAgMTYwNywgIDE2NDAsICAxNjQ0LCAgMTY1MCwgIDE2NTcsCi0gICAg
MTY3MiwgIDE2NzYsICAxNjgwLCAgMTY4MSwgIDE2ODcsICAxNjg4LCAgMTY4OSwgIDE2OTAsICAx
NjkxLCAgMTY5NSwKLSAgICAxNjk2LCAgMTY5NiwgIDE2OTYsICAxNzA2LCAgMTcwNywgIDE3MTEs
ICAxNzExLCAgMTcxMiwgIDE3MTIsICAxNzE3LAotICAgIDE3MjAsICAxNzMwLCAgMTczMywgIDE3
MzksICAxNzQwLCAgMTc0NCwgIDE3NTIsICAxNzU2LCAgMTc2NiwgIDE3NzEsCi0gICAgMTc4OCwg
IDE3ODgsICAxNzkzLCAgMTc5MywgIDE4MDAsICAxODAwLCAgMTgwOCwgIDE4MTEsICAxODE3LCAg
MTgyMCwKLSAgICAxODI2LCAgMTgzMCwgIDE4MzcsICAxODQ0LCAgMTg1MSwgIDE4NTgsICAxODY5
LCAgMTg3OCwgIDE4ODIsICAxODg5LAotICAgIDE4OTIsICAxODk4LCAgMTg5OAotfTsKLSNlbmRp
ZgotCi0jaWYgWVlERUJVRyB8fCBZWUVSUk9SX1ZFUkJPU0UgfHwgMAotLyogWVlUTkFNRVtTWU1C
T0wtTlVNXSAtLSBTdHJpbmcgbmFtZSBvZiB0aGUgc3ltYm9sIFNZTUJPTC1OVU0uCi0gICBGaXJz
dCwgdGhlIHRlcm1pbmFscywgdGhlbiwgc3RhcnRpbmcgYXQgWVlOVE9LRU5TLCBub250ZXJtaW5h
bHMuICAqLwotc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHl5dG5hbWVbXSA9Ci17Ci0gICIkZW5k
IiwgImVycm9yIiwgIiR1bmRlZmluZWQiLCAiSU5WQVJJQU5UIiwgIkhJR0hfUFJFQ0lTSU9OIiwK
LSAgIk1FRElVTV9QUkVDSVNJT04iLCAiTE9XX1BSRUNJU0lPTiIsICJQUkVDSVNJT04iLCAiQVRU
UklCVVRFIiwKLSAgIkNPTlNUX1FVQUwiLCAiQk9PTF9UWVBFIiwgIkZMT0FUX1RZUEUiLCAiSU5U
X1RZUEUiLCAiQlJFQUsiLCAiQ09OVElOVUUiLAotICAiRE8iLCAiRUxTRSIsICJGT1IiLCAiSUYi
LCAiRElTQ0FSRCIsICJSRVRVUk4iLCAiQlZFQzIiLCAiQlZFQzMiLAotICAiQlZFQzQiLCAiSVZF
QzIiLCAiSVZFQzMiLCAiSVZFQzQiLCAiVkVDMiIsICJWRUMzIiwgIlZFQzQiLCAiTUFUUklYMiIs
Ci0gICJNQVRSSVgzIiwgIk1BVFJJWDQiLCAiSU5fUVVBTCIsICJPVVRfUVVBTCIsICJJTk9VVF9R
VUFMIiwgIlVOSUZPUk0iLAotICAiVkFSWUlORyIsICJTVFJVQ1QiLCAiVk9JRF9UWVBFIiwgIldI
SUxFIiwgIlNBTVBMRVIyRCIsICJTQU1QTEVSQ1VCRSIsCi0gICJTQU1QTEVSX0VYVEVSTkFMX09F
UyIsICJTQU1QTEVSMkRSRUNUIiwgIklERU5USUZJRVIiLCAiVFlQRV9OQU1FIiwKLSAgIkZMT0FU
Q09OU1RBTlQiLCAiSU5UQ09OU1RBTlQiLCAiQk9PTENPTlNUQU5UIiwgIkxFRlRfT1AiLCAiUklH
SFRfT1AiLAotICAiSU5DX09QIiwgIkRFQ19PUCIsICJMRV9PUCIsICJHRV9PUCIsICJFUV9PUCIs
ICJORV9PUCIsICJBTkRfT1AiLAotICAiT1JfT1AiLCAiWE9SX09QIiwgIk1VTF9BU1NJR04iLCAi
RElWX0FTU0lHTiIsICJBRERfQVNTSUdOIiwKLSAgIk1PRF9BU1NJR04iLCAiTEVGVF9BU1NJR04i
LCAiUklHSFRfQVNTSUdOIiwgIkFORF9BU1NJR04iLCAiWE9SX0FTU0lHTiIsCi0gICJPUl9BU1NJ
R04iLCAiU1VCX0FTU0lHTiIsICJMRUZUX1BBUkVOIiwgIlJJR0hUX1BBUkVOIiwgIkxFRlRfQlJB
Q0tFVCIsCi0gICJSSUdIVF9CUkFDS0VUIiwgIkxFRlRfQlJBQ0UiLCAiUklHSFRfQlJBQ0UiLCAi
RE9UIiwgIkNPTU1BIiwgIkNPTE9OIiwKLSAgIkVRVUFMIiwgIlNFTUlDT0xPTiIsICJCQU5HIiwg
IkRBU0giLCAiVElMREUiLCAiUExVUyIsICJTVEFSIiwgIlNMQVNIIiwKLSAgIlBFUkNFTlQiLCAi
TEVGVF9BTkdMRSIsICJSSUdIVF9BTkdMRSIsICJWRVJUSUNBTF9CQVIiLCAiQ0FSRVQiLAotICAi
QU1QRVJTQU5EIiwgIlFVRVNUSU9OIiwgIiRhY2NlcHQiLCAiaWRlbnRpZmllciIsICJ2YXJpYWJs
ZV9pZGVudGlmaWVyIiwKLSAgInByaW1hcnlfZXhwcmVzc2lvbiIsICJwb3N0Zml4X2V4cHJlc3Np
b24iLCAiaW50ZWdlcl9leHByZXNzaW9uIiwKLSAgImZ1bmN0aW9uX2NhbGwiLCAiZnVuY3Rpb25f
Y2FsbF9vcl9tZXRob2QiLCAiZnVuY3Rpb25fY2FsbF9nZW5lcmljIiwKLSAgImZ1bmN0aW9uX2Nh
bGxfaGVhZGVyX25vX3BhcmFtZXRlcnMiLAotICAiZnVuY3Rpb25fY2FsbF9oZWFkZXJfd2l0aF9w
YXJhbWV0ZXJzIiwgImZ1bmN0aW9uX2NhbGxfaGVhZGVyIiwKLSAgImZ1bmN0aW9uX2lkZW50aWZp
ZXIiLCAidW5hcnlfZXhwcmVzc2lvbiIsICJ1bmFyeV9vcGVyYXRvciIsCi0gICJtdWx0aXBsaWNh
dGl2ZV9leHByZXNzaW9uIiwgImFkZGl0aXZlX2V4cHJlc3Npb24iLCAic2hpZnRfZXhwcmVzc2lv
biIsCi0gICJyZWxhdGlvbmFsX2V4cHJlc3Npb24iLCAiZXF1YWxpdHlfZXhwcmVzc2lvbiIsICJh
bmRfZXhwcmVzc2lvbiIsCi0gICJleGNsdXNpdmVfb3JfZXhwcmVzc2lvbiIsICJpbmNsdXNpdmVf
b3JfZXhwcmVzc2lvbiIsCi0gICJsb2dpY2FsX2FuZF9leHByZXNzaW9uIiwgImxvZ2ljYWxfeG9y
X2V4cHJlc3Npb24iLAotICAibG9naWNhbF9vcl9leHByZXNzaW9uIiwgImNvbmRpdGlvbmFsX2V4
cHJlc3Npb24iLAotICAiYXNzaWdubWVudF9leHByZXNzaW9uIiwgImFzc2lnbm1lbnRfb3BlcmF0
b3IiLCAiZXhwcmVzc2lvbiIsCi0gICJjb25zdGFudF9leHByZXNzaW9uIiwgImRlY2xhcmF0aW9u
IiwgImZ1bmN0aW9uX3Byb3RvdHlwZSIsCi0gICJmdW5jdGlvbl9kZWNsYXJhdG9yIiwgImZ1bmN0
aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMiLAotICAiZnVuY3Rpb25faGVhZGVyIiwgInBhcmFt
ZXRlcl9kZWNsYXJhdG9yIiwgInBhcmFtZXRlcl9kZWNsYXJhdGlvbiIsCi0gICJwYXJhbWV0ZXJf
cXVhbGlmaWVyIiwgInBhcmFtZXRlcl90eXBlX3NwZWNpZmllciIsCi0gICJpbml0X2RlY2xhcmF0
b3JfbGlzdCIsICJzaW5nbGVfZGVjbGFyYXRpb24iLCAiZnVsbHlfc3BlY2lmaWVkX3R5cGUiLAot
ICAidHlwZV9xdWFsaWZpZXIiLCAidHlwZV9zcGVjaWZpZXIiLCAicHJlY2lzaW9uX3F1YWxpZmll
ciIsCi0gICJ0eXBlX3NwZWNpZmllcl9ub19wcmVjIiwgInR5cGVfc3BlY2lmaWVyX25vbmFycmF5
IiwgInN0cnVjdF9zcGVjaWZpZXIiLAotICAiJEAxIiwgIiRAMiIsICJzdHJ1Y3RfZGVjbGFyYXRp
b25fbGlzdCIsICJzdHJ1Y3RfZGVjbGFyYXRpb24iLAotICAic3RydWN0X2RlY2xhcmF0b3JfbGlz
dCIsICJzdHJ1Y3RfZGVjbGFyYXRvciIsICJpbml0aWFsaXplciIsCi0gICJkZWNsYXJhdGlvbl9z
dGF0ZW1lbnQiLCAic3RhdGVtZW50IiwgInNpbXBsZV9zdGF0ZW1lbnQiLAotICAiY29tcG91bmRf
c3RhdGVtZW50IiwgIiRAMyIsICIkQDQiLCAic3RhdGVtZW50X25vX25ld19zY29wZSIsCi0gICJz
dGF0ZW1lbnRfd2l0aF9zY29wZSIsICIkQDUiLCAiJEA2IiwgImNvbXBvdW5kX3N0YXRlbWVudF9u
b19uZXdfc2NvcGUiLAotICAic3RhdGVtZW50X2xpc3QiLCAiZXhwcmVzc2lvbl9zdGF0ZW1lbnQi
LCAic2VsZWN0aW9uX3N0YXRlbWVudCIsCi0gICJzZWxlY3Rpb25fcmVzdF9zdGF0ZW1lbnQiLCAi
Y29uZGl0aW9uIiwgIml0ZXJhdGlvbl9zdGF0ZW1lbnQiLCAiJEA3IiwKLSAgIiRAOCIsICIkQDki
LCAiZm9yX2luaXRfc3RhdGVtZW50IiwgImNvbmRpdGlvbm9wdCIsICJmb3JfcmVzdF9zdGF0ZW1l
bnQiLAotICAianVtcF9zdGF0ZW1lbnQiLCAidHJhbnNsYXRpb25fdW5pdCIsICJleHRlcm5hbF9k
ZWNsYXJhdGlvbiIsCi0gICJmdW5jdGlvbl9kZWZpbml0aW9uIiwgIiRAMTAiLCBZWV9OVUxMCi19
OwotI2VuZGlmCi0KLSMgaWZkZWYgWVlQUklOVAotLyogWVlUT0tOVU1bWVlMRVgtTlVNXSAtLSBJ
bnRlcm5hbCB0b2tlbiBudW1iZXIgY29ycmVzcG9uZGluZyB0bwotICAgdG9rZW4gWVlMRVgtTlVN
LiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5dG9rbnVtW10gPQotewotICAgICAg
IDAsICAgMjU2LCAgIDI1NywgICAyNTgsICAgMjU5LCAgIDI2MCwgICAyNjEsICAgMjYyLCAgIDI2
MywgICAyNjQsCi0gICAgIDI2NSwgICAyNjYsICAgMjY3LCAgIDI2OCwgICAyNjksICAgMjcwLCAg
IDI3MSwgICAyNzIsICAgMjczLCAgIDI3NCwKLSAgICAgMjc1LCAgIDI3NiwgICAyNzcsICAgMjc4
LCAgIDI3OSwgICAyODAsICAgMjgxLCAgIDI4MiwgICAyODMsICAgMjg0LAotICAgICAyODUsICAg
Mjg2LCAgIDI4NywgICAyODgsICAgMjg5LCAgIDI5MCwgICAyOTEsICAgMjkyLCAgIDI5MywgICAy
OTQsCi0gICAgIDI5NSwgICAyOTYsICAgMjk3LCAgIDI5OCwgICAyOTksICAgMzAwLCAgIDMwMSwg
ICAzMDIsICAgMzAzLCAgIDMwNCwKLSAgICAgMzA1LCAgIDMwNiwgICAzMDcsICAgMzA4LCAgIDMw
OSwgICAzMTAsICAgMzExLCAgIDMxMiwgICAzMTMsICAgMzE0LAotICAgICAzMTUsICAgMzE2LCAg
IDMxNywgICAzMTgsICAgMzE5LCAgIDMyMCwgICAzMjEsICAgMzIyLCAgIDMyMywgICAzMjQsCi0g
ICAgIDMyNSwgICAzMjYsICAgMzI3LCAgIDMyOCwgICAzMjksICAgMzMwLCAgIDMzMSwgICAzMzIs
ICAgMzMzLCAgIDMzNCwKLSAgICAgMzM1LCAgIDMzNiwgICAzMzcsICAgMzM4LCAgIDMzOSwgICAz
NDAsICAgMzQxLCAgIDM0MiwgICAzNDMsICAgMzQ0LAotICAgICAzNDUsICAgMzQ2LCAgIDM0Nywg
ICAzNDgsICAgMzQ5Ci19OwotIyBlbmRpZgotCi0vKiBZWVIxW1lZTl0gLS0gU3ltYm9sIG51bWJl
ciBvZiBzeW1ib2wgdGhhdCBydWxlIFlZTiBkZXJpdmVzLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5
cGVfdWludDggeXlyMVtdID0KLXsKLSAgICAgICAwLCAgICA5NSwgICAgOTYsICAgIDk2LCAgICA5
NywgICAgOTgsICAgIDk4LCAgICA5OCwgICAgOTgsICAgIDk4LAotICAgICAgOTksICAgIDk5LCAg
ICA5OSwgICAgOTksICAgIDk5LCAgICA5OSwgICAxMDAsICAgMTAxLCAgIDEwMiwgICAxMDIsCi0g
ICAgIDEwMywgICAxMDMsICAgMTA0LCAgIDEwNCwgICAxMDUsICAgMTA1LCAgIDEwNiwgICAxMDcs
ICAgMTA3LCAgIDEwOCwKLSAgICAgMTA4LCAgIDEwOCwgICAxMDgsICAgMTA5LCAgIDEwOSwgICAx
MDksICAgMTEwLCAgIDExMCwgICAxMTAsICAgMTExLAotICAgICAxMTEsICAgMTExLCAgIDExMiwg
ICAxMTMsICAgMTEzLCAgIDExMywgICAxMTMsICAgMTEzLCAgIDExNCwgICAxMTQsCi0gICAgIDEx
NCwgICAxMTUsICAgMTE2LCAgIDExNywgICAxMTgsICAgMTE4LCAgIDExOSwgICAxMTksICAgMTIw
LCAgIDEyMCwKLSAgICAgMTIxLCAgIDEyMSwgICAxMjIsICAgMTIyLCAgIDEyMywgICAxMjMsICAg
MTIzLCAgIDEyMywgICAxMjMsICAgMTI0LAotICAgICAxMjQsICAgMTI1LCAgIDEyNiwgICAxMjYs
ICAgMTI2LCAgIDEyNywgICAxMjgsICAgMTI4LCAgIDEyOSwgICAxMjksCi0gICAgIDEzMCwgICAx
MzEsICAgMTMxLCAgIDEzMiwgICAxMzIsICAgMTMyLCAgIDEzMiwgICAxMzMsICAgMTMzLCAgIDEz
MywKLSAgICAgMTMzLCAgIDEzNCwgICAxMzUsICAgMTM1LCAgIDEzNSwgICAxMzUsICAgMTM1LCAg
IDEzNiwgICAxMzYsICAgMTM2LAotICAgICAxMzYsICAgMTM2LCAgIDEzNiwgICAxMzcsICAgMTM3
LCAgIDEzOCwgICAxMzgsICAgMTM4LCAgIDEzOCwgICAxMzgsCi0gICAgIDEzOSwgICAxMzksICAg
MTQwLCAgIDE0MCwgICAxNDAsICAgMTQxLCAgIDE0MSwgICAxNDIsICAgMTQyLCAgIDE0MiwKLSAg
ICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0Miwg
ICAxNDIsICAgMTQyLAotICAgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0
MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDQsCi0gICAgIDE0MywgICAxNDUsICAgMTQzLCAg
IDE0NiwgICAxNDYsICAgMTQ3LCAgIDE0OCwgICAxNDgsICAgMTQ5LCAgIDE0OSwKLSAgICAgMTUw
LCAgIDE1MSwgICAxNTIsICAgMTUyLCAgIDE1MywgICAxNTMsICAgMTUzLCAgIDE1MywgICAxNTMs
ICAgMTU0LAotICAgICAxNTUsICAgMTU2LCAgIDE1NCwgICAxNTcsICAgMTU3LCAgIDE1OSwgICAx
NTgsICAgMTYwLCAgIDE1OCwgICAxNjEsCi0gICAgIDE2MSwgICAxNjIsICAgMTYyLCAgIDE2Mywg
ICAxNjMsICAgMTY0LCAgIDE2NSwgICAxNjUsICAgMTY2LCAgIDE2NiwKLSAgICAgMTY4LCAgIDE2
NywgICAxNjksICAgMTY3LCAgIDE3MCwgICAxNjcsICAgMTcxLCAgIDE3MSwgICAxNzIsICAgMTcy
LAotICAgICAxNzMsICAgMTczLCAgIDE3NCwgICAxNzQsICAgMTc0LCAgIDE3NCwgICAxNzQsICAg
MTc1LCAgIDE3NSwgICAxNzYsCi0gICAgIDE3NiwgICAxNzgsICAgMTc3Ci19OwotCi0vKiBZWVIy
W1lZTl0gLS0gTnVtYmVyIG9mIHN5bWJvbHMgY29tcG9zaW5nIHJpZ2h0IGhhbmQgc2lkZSBvZiBy
dWxlIFlZTi4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjJbXSA9Ci17Ci0gICAg
ICAgMCwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMywKLSAgICAgICAxLCAgICAgNCwgICAgIDEsICAgICAzLCAgICAgMiwgICAgIDIs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDEsICAgICAyLCAgICAgMywgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsCi0gICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAzLCAg
ICAgMSwKLSAgICAgICAzLCAgICAgMywgICAgIDEsICAgICAxLCAgICAgMywgICAgIDMsICAgICAz
LCAgICAgMywgICAgIDEsICAgICAzLAotICAgICAgIDMsICAgICAxLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMywgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDMsCi0gICAgICAgMSwgICAgIDUs
ICAgICAxLCAgICAgMywgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwK
LSAgICAgICAzLCAgICAgMSwgICAgIDIsICAgICAyLCAgICAgNCwgICAgIDIsICAgICAxLCAgICAg
MSwgICAgIDIsICAgICAzLAotICAgICAgIDMsICAgICAyLCAgICAgNSwgICAgIDMsICAgICAyLCAg
ICAgMywgICAgIDIsICAgICAwLCAgICAgMSwgICAgIDEsCi0gICAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMywgICAgIDUsICAgICA2LCAgICAgNSwgICAgIDEsICAgICAyLCAgICAgNCwKLSAgICAg
ICA1LCAgICAgNCwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDIsICAgICAxLAotICAgICAgIDEsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwg
ICAgIDQsICAgICAxLCAgICAgMSwgICAgIDEsCi0gICAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKLSAgICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAg
ICAwLAotICAgICAgIDYsICAgICAwLCAgICAgNSwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDEs
ICAgICAzLCAgICAgMSwgICAgIDQsCi0gICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMiwKLSAgICAgICAwLCAgICAgMCwg
ICAgIDUsICAgICAxLCAgICAgMSwgICAgIDAsICAgICAyLCAgICAgMCwgICAgIDIsICAgICAyLAot
ICAgICAgIDMsICAgICAxLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgNSwgICAgIDMsICAgICAx
LCAgICAgMSwgICAgIDQsCi0gICAgICAgMCwgICAgIDYsICAgICAwLCAgICAgOCwgICAgIDAsICAg
ICA3LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMCwKLSAgICAgICAyLCAgICAgMywgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAxLAotICAgICAg
IDEsICAgICAwLCAgICAgMwotfTsKLQotLyogWVlERUZBQ1RbU1RBVEUtTkFNRV0gLS0gRGVmYXVs
dCByZWR1Y3Rpb24gbnVtYmVyIGluIHN0YXRlIFNUQVRFLU5VTS4KLSAgIFBlcmZvcm1lZCB3aGVu
IFlZVEFCTEUgZG9lc24ndCBzcGVjaWZ5IHNvbWV0aGluZyBlbHNlIHRvIGRvLiAgWmVybwotICAg
bWVhbnMgdGhlIGRlZmF1bHQgaXMgYW4gZXJyb3IuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91
aW50OCB5eWRlZmFjdFtdID0KLXsKLSAgICAgICAwLCAgICAgMCwgICAxMTIsICAgMTEzLCAgIDEx
NCwgICAgIDAsICAgMTA2LCAgIDEwNSwgICAxMjAsICAgMTE4LAotICAgICAxMTksICAgMTI0LCAg
IDEyNSwgICAxMjYsICAgMTI3LCAgIDEyOCwgICAxMjksICAgMTIxLCAgIDEyMiwgICAxMjMsCi0g
ICAgIDEzMCwgICAxMzEsICAgMTMyLCAgIDEwOSwgICAxMDcsICAgICAwLCAgIDExNywgICAxMzMs
ICAgMTM0LCAgIDEzNSwKLSAgICAgMTM2LCAgIDEzOCwgICAyMDAsICAgMjAxLCAgICAgMCwgICAg
NzcsICAgIDg3LCAgICAgMCwgICAgOTIsICAgIDk3LAotICAgICAgIDAsICAgMTAzLCAgICAgMCwg
ICAxMTAsICAgMTE1LCAgIDEzNywgICAgIDAsICAgMTk3LCAgIDE5OSwgICAxMDgsCi0gICAgIDEw
MiwgICAgIDAsICAgICAyLCAgICAgMywgICAxNDEsICAgICAwLCAgICA3MiwgICAgIDAsICAgIDc1
LCAgICA4NywKLSAgICAgICAwLCAgICA4OCwgICAgODksICAgIDkwLCAgICA3OCwgICAgIDAsICAg
IDg3LCAgICAgMCwgICAgNzMsICAgICAyLAotICAgICAgOTgsICAgMTA0LCAgIDExMSwgICAgIDAs
ICAgICAxLCAgIDE5OCwgICAgIDAsICAgICAwLCAgIDEzOSwgICAgIDAsCi0gICAgIDIwMiwgICAg
NzksICAgIDg0LCAgICA4NiwgICAgOTEsICAgICAwLCAgICA5MywgICAgODAsICAgICAwLCAgICAg
MCwKLSAgICAgICA0LCAgICAgNywgICAgIDYsICAgICA4LCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAzNSwgICAgMzQsICAgIDMzLAotICAgICAgIDUsICAgIDEwLCAgICAyOSwgICAgMTIsICAgIDE3
LCAgICAxOCwgICAgIDAsICAgICAwLCAgICAyMywgICAgIDAsCi0gICAgICAzNiwgICAgIDAsICAg
IDM5LCAgICA0MiwgICAgNDMsICAgIDQ4LCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwKLSAg
ICAgIDU2LCAgICA1OCwgICAgNjAsICAgIDcxLCAgICAgMCwgICAgMjcsICAgIDc0LCAgICAgMCwg
ICAgIDAsICAgMTQzLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAxODIsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNjAsCi0gICAgIDE2OSwgICAxNzMsICAgIDM2LCAg
ICA2MiwgICAgNjksICAgICAwLCAgIDE1MSwgICAgIDAsICAgMTE1LCAgIDE1NCwKLSAgICAgMTcx
LCAgIDE1MywgICAxNTIsICAgICAwLCAgIDE1NSwgICAxNTYsICAgMTU3LCAgIDE1OCwgICAgODEs
ICAgIDgzLAotICAgICAgODUsICAgICAwLCAgICAgMCwgICAgOTksICAgICAwLCAgIDE1MCwgICAx
MDEsICAgIDMwLCAgICAzMSwgICAgIDAsCi0gICAgICAxNCwgICAgMTUsICAgICAwLCAgICAgMCwg
ICAgMjEsICAgIDIwLCAgICAgMCwgICAgMjIsICAgIDI0LCAgICAyNiwKLSAgICAgIDMyLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDExNiwgICAxNDgsICAg
ICAwLCAgIDE0NiwgICAxNDIsCi0gICAgIDE0NCwgICAgIDAsICAgMTkzLCAgIDE5MiwgICAxNjcs
ICAgMTg0LCAgICAgMCwgICAxOTYsICAgMTk0LCAgICAgMCwKLSAgICAgMTgwLCAgIDE1OSwgICAg
IDAsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2NCwgICAgIDAsICAgICAwLAotICAg
ICAxNzQsICAgMTcwLCAgIDE3MiwgICAgIDAsICAgIDk0LCAgICAgMCwgICAgOTYsICAgMTAwLCAg
ICAgOSwgICAgIDAsCi0gICAgICAxNiwgICAgIDIsICAgICAzLCAgICAxMywgICAgMTksICAgIDI1
LCAgICAzNywgICAgMzgsICAgIDQxLCAgICA0MCwKLSAgICAgIDQ2LCAgICA0NywgICAgNDQsICAg
IDQ1LCAgICA0OSwgICAgNTAsICAgIDU1LCAgICA1NywgICAgNTksICAgICAwLAotICAgICAgIDAs
ICAgICAwLCAgIDE0NSwgICAxNDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAxOTUsCi0gICAgICAgMCwgICAxNjEsICAgIDYzLCAgICA3MCwgICAgIDAsICAgIDk1LCAgICAx
MSwgICAgIDAsICAgICAwLCAgIDE0NywKLSAgICAgICAwLCAgIDE2NiwgICAxNjgsICAgMTg3LCAg
IDE4NiwgICAxODksICAgMTY3LCAgIDE3OCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgIDgy
LCAgICA2MSwgICAxNDksICAgICAwLCAgIDE4OCwgICAgIDAsICAgICAwLCAgIDE3NywgICAxNzUs
Ci0gICAgICAgMCwgICAgIDAsICAgMTYyLCAgICAgMCwgICAxOTAsICAgICAwLCAgIDE2NywgICAg
IDAsICAgMTY0LCAgIDE4MSwKLSAgICAgMTYzLCAgICAgMCwgICAxOTEsICAgMTg1LCAgIDE3Niwg
ICAxNzksICAgMTgzCi19OwotCi0vKiBZWURFRkdPVE9bTlRFUk0tTlVNXS4gICovCi1zdGF0aWMg
Y29uc3QgeXl0eXBlX2ludDE2IHl5ZGVmZ290b1tdID0KLXsKLSAgICAgIC0xLCAgIDE5NiwgICAx
MDAsICAgMTAxLCAgIDEwMiwgICAyMjksICAgMTAzLCAgIDEwNCwgICAxMDUsICAgMTA2LAotICAg
ICAxMDcsICAgMTA4LCAgIDEwOSwgICAxNDIsICAgMTExLCAgIDExMiwgICAxMTMsICAgMTE0LCAg
IDExNSwgICAxMTYsCi0gICAgIDExNywgICAxMTgsICAgMTE5LCAgIDEyMCwgICAxMjEsICAgMTIy
LCAgIDE0MywgICAxNDQsICAgMjE4LCAgIDE0NSwKLSAgICAgMTI0LCAgIDE0NiwgICAxNDcsICAg
IDM0LCAgICAzNSwgICAgMzYsICAgIDgyLCAgICA2NCwgICAgNjUsICAgIDgzLAotICAgICAgMzcs
ICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgMTI1LCAgICA0NSwg
ICAxMzAsCi0gICAgICA3NywgICAxMjgsICAgMTI5LCAgIDE5NywgICAxOTgsICAgMTY2LCAgIDE0
OSwgICAxNTAsICAgMTUxLCAgIDE1MiwKLSAgICAgMjEyLCAgIDI4MCwgICAyOTksICAgMjU0LCAg
IDI1NSwgICAyNTYsICAgMzAwLCAgIDE1MywgICAxNTQsICAgMTU1LAotICAgICAyODksICAgMjc5
LCAgIDE1NiwgICAyNjAsICAgMjA0LCAgIDI1NywgICAyNzUsICAgMjg2LCAgIDI4NywgICAxNTcs
Ci0gICAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA1NwotfTsKLQotLyogWVlQQUNUW1NUQVRFLU5V
TV0gLS0gSW5kZXggaW4gWVlUQUJMRSBvZiB0aGUgcG9ydGlvbiBkZXNjcmliaW5nCi0gICBTVEFU
RS1OVU0uICAqLwotI2RlZmluZSBZWVBBQ1RfTklORiAtMjYxCi1zdGF0aWMgY29uc3QgeXl0eXBl
X2ludDE2IHl5cGFjdFtdID0KLXsKLSAgICAxMzI3LCAgIC0yMCwgIC0yNjEsICAtMjYxLCAgLTI2
MSwgICAxMTMsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAtMjYxLCAg
LTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsCi0g
ICAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgLTE5LCAgLTI2MSwgIC0yNjEs
ICAtMjYxLCAgLTI2MSwKLSAgICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgLTYxLCAgIC00MCwgICAt
MjgsICAgIDc1LCAgICAtNywgIC0yNjEsICAgIDI0LAotICAgIDEzNzAsICAtMjYxLCAgMTQ0NCwg
IC0yNjEsICAgLTExLCAgLTI2MSwgIDEyODMsICAtMjYxLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2
MSwgIDE0NDQsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgICA2LCAgLTI2MSwgICAgNTQsICAtMjYx
LCAgICA4OCwKLSAgICAgIDYyLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIDEzNzAsICAg
IDU5LCAgICA5MSwgIC0yNjEsICAgIDM2LAotICAgICAtNTAsICAtMjYxLCAgLTI2MSwgIDEwNTEs
ICAtMjYxLCAgLTI2MSwgICAgNjMsICAxMzcwLCAgLTI2MSwgICAyOTMsCi0gICAgLTI2MSwgIC0y
NjEsICAtMjYxLCAgLTI2MSwgICAgOTEsICAxMzcwLCAgIC0xMiwgIC0yNjEsICAgODU2LCAgMTA1
MSwKLSAgICAgIDc3LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgMTA1MSwgIDEwNTEsICAxMDUxLCAg
LTI2MSwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAtMjYxLCAgIC0xNCwgIC0yNjEsICAtMjYx
LCAgLTI2MSwgICAgODQsICAgLTQ0LCAgMTExNiwgICAgOTUsCi0gICAgLTI2MSwgIDEwNTEsICAg
IDUzLCAgICAgMywgIC0yNjEsICAgLTM2LCAgICA4OSwgIC0yNjEsICAtMjYxLCAgLTI2MSwKLSAg
ICAgMTA0LCAgIDEwNywgICAtNDUsICAtMjYxLCAgICA5NiwgIC0yNjEsICAtMjYxLCAgICA5MSwg
IDExODQsICAtMjYxLAotICAgIDEzNzAsICAgIDkyLCAgICA5MywgIC0yNjEsICAgIDk4LCAgIDEw
MSwgICAgOTQsICAgOTIxLCAgIDEwNSwgICAxMDIsCi0gICAgLTI2MSwgIC0yNjEsICAgIDcyLCAg
LTI2MSwgIC0yNjEsICAgICA5LCAgLTI2MSwgICAtNjEsICAgIDQyLCAgLTI2MSwKLSAgICAtMjYx
LCAgLTI2MSwgIC0yNjEsICAgMzc2LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAxMDYs
ICAtMjYxLAotICAgIC0yNjEsICAgOTg2LCAgMTA1MSwgIC0yNjEsICAgMTAzLCAgLTI2MSwgIC0y
NjEsICAtMjYxLCAgLTI2MSwgICAtNDEsCi0gICAgLTI2MSwgIC0yNjEsICAxMDUxLCAgMTQwNywg
IC0yNjEsICAtMjYxLCAgMTA1MSwgICAxMTAsICAtMjYxLCAgLTI2MSwKLSAgICAtMjYxLCAgMTA1
MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAxMDUx
LAotICAgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgLTI2MSwgICAxMDksICAg
IDIzLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2MSwgIDEyMjcsICAtMjYxLCAgLTI2MSwgICAxMTEs
ICAtMjYxLCAgMTA1MSwgIC0yNjEsICAtMjYxLCAgICAyNSwKLSAgICAtMjYxLCAgLTI2MSwgICA0
NTksICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIDEwNTEsICAxMDUxLAotICAg
IC0yNjEsICAtMjYxLCAgLTI2MSwgIDEwNTEsICAtMjYxLCAgIDExNCwgIC0yNjEsICAtMjYxLCAg
LTI2MSwgICAxMTUsCi0gICAgIDExMiwgICAgNzcsICAgMTE2LCAgLTI2MSwgIC0yNjEsICAtMjYx
LCAgLTI2MSwgIC0yNjEsICAgIDUzLCAgICA1MywKLSAgICAtMjYxLCAgLTI2MSwgIC0yNjEsICAt
MjYxLCAgIC0zNiwgICAtMzYsICAtMjYxLCAgIDEwNCwgICAxMDcsICAgIDc2LAotICAgIDEwNTEs
ICAgIDkxLCAgLTI2MSwgIC0yNjEsICAgMTQ1LCAgICA1NCwgICA2MjUsICAgNzA4LCAgICAtNiwg
IC0yNjEsCi0gICAgIDc5MSwgICA0NTksICAtMjYxLCAgLTI2MSwgICAxMTcsICAtMjYxLCAgLTI2
MSwgIDEwNTEsICAgMTIwLCAgLTI2MSwKLSAgICAgMTI0LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAg
LTI2MSwgICA3OTEsICAgMTExLCAgIDExMiwgICAgOTEsICAgMTI1LAotICAgICAxMjIsICAtMjYx
LCAgLTI2MSwgIC0yNjEsICAxMDUxLCAgLTI2MSwgICAxMTgsICAgMTI4LCAgIDE4MCwgIC0yNjEs
Ci0gICAgIDEyNiwgICA1NDIsICAtMjYxLCAgICAtNSwgIDEwNTEsICAgNTQyLCAgIDExMSwgIDEw
NTEsICAtMjYxLCAgLTI2MSwKLSAgICAtMjYxLCAgIDEyMywgICAxMTIsICAtMjYxLCAgLTI2MSwg
IC0yNjEsICAtMjYxCi19OwotCi0vKiBZWVBHT1RPW05URVJNLU5VTV0uICAqLwotc3RhdGljIGNv
bnN0IHl5dHlwZV9pbnQxNiB5eXBnb3RvW10gPQotewotICAgIC0yNjEsICAgLTI0LCAgLTI2MSwg
IC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgICAzNCwgIC0yNjEsCi0gICAgLTI2
MSwgIC0yNjEsICAtMjYxLCAgICAzMiwgIC0yNjEsICAgLTMzLCAgLTI2MSwgICAtMjcsICAgLTI2
LCAgLTI2MSwKLSAgICAtMjYxLCAgLTI2MSwgICAgMTQsICAgIDE2LCAgICAxOCwgIC0yNjEsICAg
LTY2LCAgIC04NywgIC0yNjEsICAgLTkyLAotICAgICAtODUsICAgIDExLCAgICAxMiwgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgICAxNDEsICAgMTUwLCAgIDE2MSwgICAxNDMsCi0gICAgLTI2MSwgIC0y
NjEsICAtMjMxLCAgICAgNSwgICAtMzAsICAgMjI0LCAgIC0xOCwgICAgIDAsICAtMjYxLCAgLTI2
MSwKLSAgICAtMjYxLCAgIDEwMCwgIC0xMTksICAtMjYxLCAgIC0xNywgIC0xNTYsICAgLTI1LCAg
LTE0NSwgIC0yNDMsICAtMjYxLAotICAgIC0yNjEsICAtMjYxLCAgIC02NCwgIC0yNjAsICAtMjYx
LCAgLTI2MSwgICAtNTIsICAgIDIxLCAgIC0yMiwgIC0yNjEsCi0gICAgLTI2MSwgICAtMzksICAt
MjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwKLSAg
ICAtMjYxLCAgIDE5MSwgIC0yNjEsICAtMjYxCi19OwotCi0vKiBZWVRBQkxFW1lZUEFDVFtTVEFU
RS1OVU1dXS4gIFdoYXQgdG8gZG8gaW4gc3RhdGUgU1RBVEUtTlVNLiAgSWYKLSAgIHBvc2l0aXZl
LCBzaGlmdCB0aGF0IHRva2VuLiAgSWYgbmVnYXRpdmUsIHJlZHVjZSB0aGUgcnVsZSB3aGljaAot
ICAgbnVtYmVyIGlzIHRoZSBvcHBvc2l0ZS4gIElmIFlZVEFCTEVfTklORiwgc3ludGF4IGVycm9y
LiAgKi8KLSNkZWZpbmUgWVlUQUJMRV9OSU5GIC0xNjYKLXN0YXRpYyBjb25zdCB5eXR5cGVfaW50
MTYgeXl0YWJsZVtdID0KLXsKLSAgICAgIDQ0LCAgICA1NSwgICAxNjUsICAgMTY0LCAgIDE2OSwg
ICAgODAsICAgMjI2LCAgIDEyMywgICAyMjIsICAgMjAwLAotICAgICAgNzEsICAgIDMyLCAgICAz
MywgICAyNzIsICAgMTkzLCAgICA3MCwgICAyODgsICAgIDQ5LCAgIDE4NSwgICAxODYsCi0gICAg
ICA1NiwgICAxNzgsICAgMTIzLCAgICA4OCwgICAgNzIsICAgIDUwLCAgICA1MiwgICAgNTMsICAg
MTc1LCAgIDI3OCwKLSAgICAgIDg5LCAgIDIyOCwgICAgNTgsICAgIDc2LCAgIDE3NiwgICAgODQs
ICAgMzA0LCAgIDIxOSwgICAxNzAsICAgMTcxLAotICAgICAgNDQsICAgIDY2LCAgICA0NCwgICAg
ODYsICAgMjc4LCAgIDIwOSwgICAgNDQsICAgMTI3LCAgIDI5OCwgICAxOTQsCi0gICAgICA1OSwg
ICAgNDQsICAgMjk4LCAgIDE4NywgICAxODgsICAgIDg0LCAgICA1NCwgICAgMzIsICAgIDMzLCAg
IDE3MiwKLSAgICAgMTU4LCAgIDE2MSwgICAgNzMsICAgMTczLCAgICA2NiwgICAgNDQsICAgMjc2
LCAgIDMwMSwgICAxNjIsICAgIDY5LAotICAgICAgNTMsICAgIDY3LCAgIDIxOSwgICAyMTksICAg
IDY4LCAgIDE2NSwgICAyMjUsICAgIDQ0LCAgICA2MCwgICAxNDgsCi0gICAgIDIzMCwgICAgNzgs
ICAgMjAwLCAgICAgNiwgICAgIDcsICAgIDQ0LCAgIDE4MywgICAyMTksICAgMTg0LCAgIDIzNSwK
LSAgICAgMjIwLCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAxMjMsICAgICA2LCAgICAg
NywgICAxMjcsICAgIDQ5LAotICAgICAxMjcsICAgMjUxLCAgIDI0OSwgICAyMTksICAgMjUyLCAg
IDExMCwgICAyNTksICAgIDg3LCAgICA2MSwgICAgNjIsCi0gICAgICA2MywgICAgMjMsICAgIDI0
LCAgIC0yNywgICAyNTgsICAgIDczLCAgIDIyMiwgICAgIDIsICAgICAzLCAgICAgNCwKLSAgICAg
MTEwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICAyMywgICAgMjQsICAgMTY3LCAgIDE2OCwgICAg
NDQsICAgIDc5LAotICAgICAgNDQsICAgMjYyLCAgIDI2MywgICAyMTMsICAgMjE0LCAgIDIxNSwg
ICAgNTIsICAgIDUzLCAgIDI2NCwgICAxODEsCi0gICAgIDE4MiwgICAzMDUsICAgMjE2LCAgIDE4
MCwgICAxMjYsICAgMTg5LCAgIDE5MCwgICAtNzYsICAgLTI4LCAgIDIzMywKLSAgICAgMjM4LCAg
IDIzOSwgICAyMTcsICAgMTQ4LCAgIDIxOSwgICAyNjcsICAgMTc0LCAgIDEyMywgICAyNDAsICAg
MjQxLAotICAgICAyNDIsICAgMjQzLCAgIDE5MSwgICAyNDQsICAgMjQ1LCAgIDI2OCwgICAxNzks
ICAgMTkyLCAgIDI3NywgICAyMDUsCi0gICAgIDE5NSwgICAxMjcsICAgMjA2LCAgIDIwMiwgICAy
MDMsICAgMjA3LCAgIDIxMCwgICAyMjcsICAgMjExLCAgIDIyMywKLSAgICAgMjgyLCAgLTExNywg
ICAyNTAsICAgMjc3LCAgIDEyMywgICAyNzAsICAtMTY1LCAgLTEzOCwgICAyNjUsICAgMjY2LAot
ICAgICAyMTksICAgMjgxLCAgIDI5MywgICAxMTAsICAgMjgzLCAgIDI4NCwgICAyOTYsICAgMjkx
LCAgIDI5MiwgICAyOTQsCi0gICAgIDI5NSwgICAgNDQsICAgMzAyLCAgIDI3MSwgICAzMDYsICAg
MjQ2LCAgIDI5NywgICAyMzQsICAgMjQ3LCAgICA4MSwKLSAgICAgMTY1LCAgIDI0OCwgICAxNDgs
ICAgMjM2LCAgIDIzNywgICAxMTAsICAgMTEwLCAgIDExMCwgICAxMTAsICAgMTEwLAotICAgICAx
MTAsICAgMTEwLCAgIDExMCwgICAxMTAsICAgMTEwLCAgIDExMCwgICAxNTksICAgIDg1LCAgIDE2
MCwgICAgNTEsCi0gICAgIDIwMSwgICAzMDMsICAgMjczLCAgIDI2MSwgICAyNjksICAgMjc0LCAg
IDI4NSwgICAgNzUsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgMjkwLCAgIDExMCwgICAxNDgsICAgMTQ4LCAgICAgMCwgICAg
IDAsCi0gICAgIDE0OCwgICAxNDgsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAxNDgsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAg
IDExMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0g
ICAgICAgMCwgICAxNDgsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ4LCAgICAgMSwgICAgIDIs
ICAgICAzLCAgICAgNCwKLSAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAg
MTAsICAgMTMxLCAgIDEzMiwgICAxMzMsICAgICAwLAotICAgICAxMzQsICAgMTM1LCAgIDEzNiwg
ICAxMzcsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsCi0gICAgICAx
NywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAyMywKLSAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgMTM4LCAgICAyNywgICAgMjgsICAg
IDI5LCAgICAzMCwgICAgOTAsICAgIDMxLAotICAgICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAs
ICAgICAwLCAgICA5NCwgICAgOTUsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAxMzksICAgMTQwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQx
LCAgICA5NywgICAgOTgsICAgICAwLCAgICA5OSwgICAgIDEsCi0gICAgICAgMiwgICAgIDMsICAg
ICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgIDEzMSwKLSAg
ICAgMTMyLCAgIDEzMywgICAgIDAsICAgMTM0LCAgIDEzNSwgICAxMzYsICAgMTM3LCAgICAxMSwg
ICAgMTIsICAgIDEzLAotICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAx
OSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgIDIzLCAg
ICAyNCwgICAgMjUsICAgIDI2LCAgIDEzOCwgICAgMjcsICAgIDI4LCAgICAyOSwKLSAgICAgIDMw
LCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQs
ICAgIDk1LAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgIDEz
OSwgICAyMjEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0MSwgICAgOTcsICAgIDk4
LAotICAgICAgIDAsICAgIDk5LCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsICAg
ICA2LCAgICAgNywgICAgIDgsCi0gICAgICAgOSwgICAgMTAsICAgMTMxLCAgIDEzMiwgICAxMzMs
ICAgICAwLCAgIDEzNCwgICAxMzUsICAgMTM2LCAgIDEzNywKLSAgICAgIDExLCAgICAxMiwgICAg
MTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLAotICAg
ICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywgICAgMjQsICAgIDI1LCAg
ICAyNiwgICAxMzgsCi0gICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAsICAgIDMx
LCAgICA5MSwgICAgOTIsICAgIDkzLCAgICAgMCwKLSAgICAgICAwLCAgICA5NCwgICAgOTUsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsCi0gICAgICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMzksICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgMTQxLCAgICA5NywgICAgOTgsICAgICAwLCAg
ICA5OSwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LAotICAgICAgIDYsICAgICA3
LCAgICAgOCwgICAgIDksICAgIDEwLCAgIDEzMSwgICAxMzIsICAgMTMzLCAgICAgMCwgICAxMzQs
Ci0gICAgIDEzNSwgICAxMzYsICAgMTM3LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAg
MTUsICAgIDE2LCAgICAxNywKLSAgICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsICAgIDI0LAotICAgICAgMjUsICAgIDI2LCAgIDEz
OCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsCi0gICAg
ICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
OTYsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDc5LCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwg
ICAgIDAsICAgICAwLCAgIDE0MSwgICAgOTcsICAgIDk4LCAgICAgMCwgICAgOTksICAgICAxLCAg
ICAgMiwKLSAgICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5
LCAgICAxMCwgICAxMzEsICAgMTMyLAotICAgICAxMzMsICAgICAwLCAgIDEzNCwgICAxMzUsICAg
MTM2LCAgIDEzNywgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsCi0gICAgICAxNSwgICAgMTYs
ICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwK
LSAgICAgICAwLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAxMzgsICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDMwLAotICAgICAgOTAsICAgIDMxLCAgICA5MSwgICAgOTIsICAgIDkzLCAg
ICAgMCwgICAgIDAsICAgIDk0LCAgICA5NSwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMCwgICAg
IDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAxNDEsICAgIDk3LCAgICA5OCwgICAgIDAsCi0gICAgICA5OSwgICAgIDEsICAgICAyLCAgICAg
MywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwKLSAgICAgIDEwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
IDExLAotICAgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgs
ICAgIDE5LCAgICAyMCwgICAgMjEsCi0gICAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
MjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywKLSAgICAgIDI4LCAgICAyOSwg
ICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLAot
ICAgICAgOTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwKLSAgICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQxLAotICAgICAg
OTcsICAgIDk4LCAgICAgMCwgICAgOTksICAgIDYwLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAg
MCwgICAgIDYsCi0gICAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgMTEsICAgIDEy
LCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAotICAgICAgMTksICAg
IDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAyNCwgICAg
MjUsCi0gICAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICA5MCwg
ICAgMzEsICAgIDkxLCAgICA5MiwKLSAgICAgIDkzLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICA5
NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0g
ICAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgOCwgICAgIDks
ICAgIDEwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk3LCAgICA5OCwgICAg
IDAsICAgIDk5LCAgICAxMSwgICAgMTIsICAgIDEzLAotICAgICAgMTQsICAgIDE1LCAgICAxNiwg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsCi0gICAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4
LCAgICAyOSwKLSAgICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAg
ICAwLCAgICAgMCwgICAgOTQsICAgIDk1LAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAgICAg
MCwKLSAgICAgMTYzLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgOTcsICAgIDk4LAotICAgICAgIDAsICAgIDk5LCAgICAxMSwgICAgMTIsICAgIDEz
LCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCi0gICAgICAxOSwgICAgMjAsICAg
IDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwKLSAg
ICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDkwLCAgICAzMSwg
ICAgOTEsICAgIDkyLAotICAgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAw
LCAgICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAs
ICAgICAwLAotICAgICAgIDAsICAgICAwLCAgIDIwOCwgICAgOTcsICAgIDk4LCAgICAgMCwgICAg
OTksICAgIDExLCAgICAxMiwgICAgMTMsCi0gICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywg
ICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwKLSAgICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5
LAotICAgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAsICAg
ICAwLCAgICA5NCwgICAgOTUsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLAotICAg
ICAyMjQsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICA5NywgICAgOTgsCi0gICAgICAgMCwgICAgOTksICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0
LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKLSAgICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI1LAotICAgICAgMjYs
ICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwg
ICAgOTIsCi0gICAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAw
LCAgICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAs
Ci0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NywgICAgOTgsICAgICAwLCAgICA5OSwgICAg
MTEsICAgIDEyLCAgICAxMywKLSAgICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwg
ICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgIDI1LCAgIDE3NywgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksCi0gICAg
ICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwgICAgOTIsICAgIDkzLCAgICAgMCwgICAgIDAsICAg
IDk0LCAgICA5NSwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMiwgICAgIDMsCi0gICAgICAgNCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAgIDk3LCAg
ICA5OCwKLSAgICAgICAwLCAgICA5OSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTEsICAgIDEy
LCAgICAxMywgICAgMTQsICAgIDE1LAotICAgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAg
IDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAs
ICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAgMCwK
LSAgICAgIDMxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
OCwgICAgIDksICAgIDEwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwgICAgMTIsCi0gICAgICAxMywgICAgMTQsICAgIDE1
LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKLSAgICAg
MTk5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAg
MjcsICAgIDI4LAotICAgICAgMjksICAgIDMwLCAgICAgMCwgICAgMzEsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICA3
NCwgICAgIDAsICAgICAwLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwKLSAgICAgICA1LCAg
ICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAyNTMsICAgIDExLCAgICAxMiwgICAgMTMs
ICAgIDE0LCAgICAxNSwgICAgMTYsCi0gICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
MjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywKLSAgICAgIDI0LCAgICAyNSwg
ICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgIDAsICAgIDMxLAot
ICAgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4
LCAgICAgOSwgICAgMTAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwKLSAgICAgIDEzLCAgICAxNCwgICAgMTUs
ICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLAotICAgICAg
IDAsICAgICAwLCAgICAgMCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgICAwLCAgICAy
NywgICAgMjgsCi0gICAgICAyOSwgICAgMzAsICAgICAwLCAgICAzMSwgICAgIDIsICAgICAzLCAg
ICAgNCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICA4LCAgICAgOSwgICAgMTAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAg
IDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAg
MTksCi0gICAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgIDI1LCAgICAyNiwKLSAgICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAz
MCwgICAgIDAsICAgIDMxLCAgICAgOCwgICAgIDksICAgIDEwLAotICAgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwgICAgMTIsCi0g
ICAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAs
ICAgIDIxLCAgICAyMiwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
MjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LAotICAgICAgMjksICAgIDMwLCAgIDIzMSwg
ICAyMzIsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0
LCAgICAxNSwKLSAgICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAyNSwgICAgMjYs
ICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgIDAsCi0gICAgICAzMQotfTsK
LQotI2RlZmluZSB5eXBhY3RfdmFsdWVfaXNfZGVmYXVsdChZeXN0YXRlKSBcCi0gICghISgoWXlz
dGF0ZSkgPT0gKC0yNjEpKSkKLQotI2RlZmluZSB5eXRhYmxlX3ZhbHVlX2lzX2Vycm9yKFl5dGFi
bGVfdmFsdWUpIFwKLSAgWVlJRCAoMCkKLQotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eWNo
ZWNrW10gPQotewotICAgICAgIDAsICAgIDI1LCAgICA4OSwgICAgODgsICAgIDk2LCAgICA1Nywg
ICAxNjIsICAgIDczLCAgIDE1MywgICAxMjgsCi0gICAgICA0MCwgICAgIDAsICAgICAwLCAgIDI1
NiwgICAgNTksICAgIDM5LCAgIDI3NiwgICAgMzcsICAgIDU0LCAgICA1NSwKLSAgICAgIDgxLCAg
IDEwOCwgICAgODgsICAgIDczLCAgICA0MiwgICAgNDUsICAgIDQ1LCAgICA0NiwgICAgNzIsICAg
MjYwLAotICAgICAgODAsICAgIDcyLCAgICA3MiwgICAgNTEsICAgIDc4LCAgICA2NSwgICAyOTYs
ICAgIDc4LCAgICA1MiwgICAgNTMsCi0gICAgICA0MCwgICAgMzYsICAgIDQyLCAgICA2NywgICAy
NzUsICAgMTM3LCAgICA0NiwgICAgNzcsICAgMjkxLCAgICA5NCwKLSAgICAgIDc4LCAgICA1MSwg
ICAyOTUsICAgIDg5LCAgICA5MCwgICAgODUsICAgIDc1LCAgICA0NiwgICAgNDYsICAgIDczLAot
ICAgICAgODQsICAgIDczLCAgICA3MywgICAgNzcsICAgIDU5LCAgICA2NSwgICAgNzIsICAgIDcy
LCAgICA4MCwgICAgNDUsCi0gICAgICA0NiwgICAgNzgsICAgIDc4LCAgICA3OCwgICAgODEsICAg
MTYyLCAgIDE2MSwgICAgNzcsICAgICAzLCAgICA3OSwKLSAgICAgMTcyLCAgICA3NSwgICAyMDEs
ICAgICA4LCAgICAgOSwgICAgODUsICAgIDgzLCAgICA3OCwgICAgODUsICAgMTc2LAotICAgICAg
ODEsICAgICAzLCAgICAzMywgICAgMzQsICAgIDM1LCAgIDE2MSwgICAgIDgsICAgICA5LCAgIDEy
OCwgICAgMzcsCi0gICAgIDEzMCwgICAgNzgsICAgMTk0LCAgICA3OCwgICAgODEsICAgIDczLCAg
ICA4MSwgICAgNzEsICAgIDMzLCAgICAzNCwKLSAgICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDcx
LCAgIDIwNiwgICAgNzMsICAgMjYxLCAgICAgNCwgICAgIDUsICAgICA2LAotICAgICAgODgsICAg
IDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgOTQsICAgIDk1LCAgIDEyOCwgICAg
NzUsCi0gICAgIDEzMCwgICAyMTgsICAgMjE5LCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA0NSwg
ICAgNDYsICAgMjIzLCAgICA4NiwKLSAgICAgIDg3LCAgIDI5NywgICAgNzAsICAgMTExLCAgICA4
MSwgICAgNTYsICAgIDU3LCAgICA3MiwgICAgNzEsICAgMTczLAotICAgICAxODMsICAgMTg0LCAg
ICA4MCwgICAxNTMsICAgIDc4LCAgICA3OSwgICAgNzIsICAgMjIzLCAgIDE4NSwgICAxODYsCi0g
ICAgIDE4NywgICAxODgsICAgIDU4LCAgIDE4OSwgICAxOTAsICAgMjUwLCAgICA3MSwgICAgNjAs
ICAgMjYwLCAgICA3MSwKLSAgICAgIDc0LCAgIDIwMSwgICAgNzEsICAgIDgxLCAgICA4MSwgICAg
ODEsICAgIDcxLCAgICA3NCwgICAgNzYsICAgIDczLAotICAgICAyNjcsICAgIDcxLCAgICA3Mywg
ICAyNzUsICAgMjUwLCAgICA0MCwgICAgNzUsICAgIDcxLCAgICA3NCwgICAgNzQsCi0gICAgICA3
OCwgICAgNzQsICAgMjg0LCAgIDE2MSwgICAgNzQsICAgIDcxLCAgICAxNiwgICAgNzIsICAgIDc2
LCAgICA4MSwKLSAgICAgIDcyLCAgIDIwMSwgICAyOTQsICAgMjU1LCAgICA4MSwgICAxOTEsICAg
IDgwLCAgIDE3MywgICAxOTIsICAgIDU5LAotICAgICAyOTcsICAgMTkzLCAgIDIxMiwgICAxODEs
ICAgMTgyLCAgIDE4MywgICAxODQsICAgMTg1LCAgIDE4NiwgICAxODcsCi0gICAgIDE4OCwgICAx
ODksICAgMTkwLCAgIDE5MSwgICAxOTIsICAgMTkzLCAgICA4NSwgICAgNjYsICAgIDg1LCAgICAg
NSwKLSAgICAgMTMwLCAgIDI5NSwgICAyNTcsICAgMjEyLCAgIDI1MSwgICAyNTcsICAgMjc1LCAg
ICA0NiwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAyNzgsICAgMjIzLCAgIDI1NiwgICAyNTcsICAgIC0xLCAgICAtMSwKLSAg
ICAgMjYwLCAgIDI2MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDI3
NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgMjUwLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0x
LCAgIDI5MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAyOTUsICAgICAzLCAgICAgNCwgICAgIDUs
ICAgICA2LAotICAgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAg
MTMsICAgIDE0LCAgICAxNSwgICAgLTEsCi0gICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwg
ICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwKLSAgICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2
LAotICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAg
IDQ0LCAgICA0NSwgICAgNDYsCi0gICAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgLTEs
ICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICA3NSwgICAgNzYsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODEsICAgIDgy
LCAgICA4MywgICAgLTEsICAgIDg1LCAgICAgMywKLSAgICAgICA0LCAgICAgNSwgICAgIDYsICAg
ICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLAotICAgICAgMTQs
ICAgIDE1LCAgICAtMSwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwg
ICAgMjMsCi0gICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAz
MCwgICAgMzEsICAgIDMyLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDM3LCAg
ICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLAotICAgICAgNDQsICAgIDQ1
LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMs
Ci0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIDc1LCAgICA3
NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgxLCAgICA4MiwgICAgODMsCi0gICAg
ICAtMSwgICAgODUsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAg
ICA5LCAgICAxMCwKLSAgICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgLTEs
ICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLAotICAgICAgMjEsICAgIDIyLCAgICAyMywgICAg
MjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCi0gICAgICAzMSwg
ICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAg
ICA0MCwKLSAgICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3
LCAgICA0OCwgICAgNDksICAgIC0xLAotICAgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwK
LSAgICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3NSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLAotICAgICAgODEsICAgIDgyLCAgICA4MywgICAgLTEsICAgIDg1LCAg
ICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsCi0gICAgICAgOCwgICAgIDksICAgIDEw
LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIC0xLCAgICAxNywKLSAgICAg
IDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAg
MjYsICAgIDI3LAotICAgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAzNiwgICAgMzcsCi0gICAgICAzOCwgICAgMzksICAgIDQwLCAgICA0
MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywKLSAgICAgIDQ4LCAg
ICA0OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgNzUsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDgxLCAgICA4MiwgICAgODMsICAgIC0xLCAgICA4NSwgICAgIDMsICAgICA0LAot
ICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEy
LCAgICAxMywgICAgMTQsCi0gICAgICAxNSwgICAgLTEsICAgIDE3LCAgICAxOCwgICAgMTksICAg
IDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwKLSAgICAgIDI1LCAgICAyNiwgICAgMjcs
ICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLAotICAgICAg
LTEsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0
MywgICAgNDQsCi0gICAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIC0xLCAg
ICAtMSwgICAgNTIsICAgIDUzLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAtMSwgICAg
LTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MSwg
ICAgODIsICAgIDgzLCAgICAtMSwKLSAgICAgIDg1LCAgICAgMywgICAgIDQsICAgICA1LCAgICAg
NiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLAotICAgICAgMTIsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjEsCi0g
ICAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjks
ICAgIDMwLCAgICAzMSwKLSAgICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzNiwgICAg
MzcsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLAotICAgICAgNDIsICAgIDQzLCAgICA0NCwg
ICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgLTEsCi0gICAgICA1
MiwgICAgNTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDcxLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODEsCi0gICAgICA4MiwgICAg
ODMsICAgIC0xLCAgICA4NSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgIC0xLCAgICAg
OCwKLSAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsICAgIDIz
LCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCi0gICAgICAyOSwgICAgMzAsICAg
IDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDM3LCAgICAzOCwKLSAg
ICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0Niwg
ICAgNDcsICAgIDQ4LAotICAgICAgNDksICAgIC0xLCAgICAtMSwgICAgNTIsICAgIDUzLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0x
LCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDEwLCAgICAxMSwgICAgMTIs
ICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODIsICAgIDgzLCAgICAtMSwgICAg
ODUsICAgIDIxLCAgICAyMiwgICAgMjMsCi0gICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywg
ICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwKLSAgICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQz
LAotICAgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgLTEsICAg
IC0xLCAgICA1MiwgICAgNTMsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLAotICAg
ICAgNzQsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICA4MiwgICAgODMsCi0gICAgICAtMSwgICAgODUsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0
LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwKLSAgICAgIDI5LCAgICAzMCwgICAgMzEsICAg
IDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LAotICAgICAgMzks
ICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0Nywg
ICAgNDgsCi0gICAgICA0OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0x
LCAgICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEs
Ci0gICAgICAtMSwgICAgLTEsICAgIDgxLCAgICA4MiwgICAgODMsICAgIC0xLCAgICA4NSwgICAg
MjEsICAgIDIyLCAgICAyMywKLSAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwg
ICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsCi0gICAg
ICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgLTEsICAg
IDUyLCAgICA1MywKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsCi0gICAgICA3NCwg
ICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgyLCAg
ICA4MywKLSAgICAgIC0xLCAgICA4NSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1
LCAgICAyNiwgICAgMjcsICAgIDI4LAotICAgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsCi0gICAgICAzOSwgICAgLTEs
ICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwK
LSAgICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIDcx
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwKLSAgICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDgyLCAgICA4MywgICAgLTEsICAgIDg1LCAgICAyMSwgICAg
MjIsICAgIDIzLAotICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwg
ICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywKLSAgICAgIDQ0LCAg
ICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIC0xLCAgICAtMSwgICAgNTIsICAg
IDUzLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAgICA0LCAgICAgNSwKLSAgICAgICA2LCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgODIsICAgIDgzLAot
ICAgICAgLTEsICAgIDg1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsICAgIDIz
LCAgICAyNCwgICAgMjUsCi0gICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAg
IDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgMzgs
ICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIC0xLAotICAgICAg
NDYsICAgICA0LCAgICAgNSwgICAgIDYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDEwLCAgICAx
MSwgICAgMTIsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDIxLCAgICAyMiwKLSAgICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2
LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLAotICAgICAgNzYsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAg
NDIsCi0gICAgICA0MywgICAgNDQsICAgIC0xLCAgICA0NiwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgICAwLCAgICAt
MSwgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LAotICAgICAgIDcsICAgICA4LCAg
ICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0g
ICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3NiwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQs
ICAgIDI1LCAgICAyNiwKLSAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAg
MzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LAotICAgICAgMzcsICAgIDM4LCAgICAzOSwg
ICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICAtMSwgICAgNDYsCi0gICAgICAg
MywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDEx
LCAgICAxMiwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgMjEsICAgIDIyLAotICAgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYs
ICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsCi0gICAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0
MiwKLSAgICAgIDQzLCAgICA0NCwgICAgLTEsICAgIDQ2LCAgICAgNCwgICAgIDUsICAgICA2LCAg
ICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgMjEsICAg
IDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwKLSAg
ICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgMzgsICAgIDM5LAotICAgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICAt
MSwgICAgNDYsICAgIDEwLCAgICAxMSwgICAgMTIsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIxLCAgICAyMiwKLSAgICAgIDIz
LCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEs
ICAgIDMyLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwgICAg
MzksICAgIC0xLCAgICA0MSwgICAgNDIsCi0gICAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0Niwg
ICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1
LAotICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAg
IC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEs
ICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICAtMSwKLSAgICAgIDQ2Ci19OwotCi0vKiBZ
WVNUT1NbU1RBVEUtTlVNXSAtLSBUaGUgKGludGVybmFsIG51bWJlciBvZiB0aGUpIGFjY2Vzc2lu
ZwotICAgc3ltYm9sIG9mIHN0YXRlIFNUQVRFLU5VTS4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBl
X3VpbnQ4IHl5c3Rvc1tdID0KLXsKLSAgICAgICAwLCAgICAgMywgICAgIDQsICAgICA1LCAgICAg
NiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLAotICAgICAgMTIsICAgIDIxLCAg
ICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCi0g
ICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDEs
ICAgIDQyLCAgICA0MywKLSAgICAgIDQ0LCAgICA0NiwgICAxMjYsICAgMTI3LCAgIDEyOCwgICAx
MjksICAgMTMwLCAgIDEzNSwgICAxMzYsICAgMTM3LAotICAgICAxMzgsICAgMTM5LCAgIDE0MCwg
ICAxNDEsICAgMTQyLCAgIDE0MywgICAxNzUsICAgMTc2LCAgIDE3NywgICAgMzcsCi0gICAgICA0
NSwgICAxNDAsICAgIDQ1LCAgICA0NiwgICAgNzUsICAgIDk2LCAgICA4MSwgICAxNzgsICAgIDcy
LCAgICA3OCwKLSAgICAgICAzLCAgICAzMywgICAgMzQsICAgIDM1LCAgIDEzMiwgICAxMzMsICAg
MTM4LCAgICA3OCwgICAgODEsICAgIDQ1LAotICAgICAgOTYsICAgMTM5LCAgIDE0MSwgICAgNzMs
ICAgICAwLCAgIDE3NiwgICAxNDEsICAgMTQ1LCAgICA3NSwgICAgNzUsCi0gICAgIDE2MSwgICAx
MzIsICAgMTMxLCAgIDEzNCwgICAxMzksICAgMTMzLCAgICA5NiwgICAgNzEsICAgIDczLCAgICA4
MCwKLSAgICAgIDQ1LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MiwgICAgNTMsICAgIDcxLCAg
ICA4MiwgICAgODMsICAgIDg1LAotICAgICAgOTcsICAgIDk4LCAgICA5OSwgICAxMDEsICAgMTAy
LCAgIDEwMywgICAxMDQsICAgMTA1LCAgIDEwNiwgICAxMDcsCi0gICAgIDEwOCwgICAxMDksICAg
MTEwLCAgIDExMSwgICAxMTIsICAgMTEzLCAgIDExNCwgICAxMTUsICAgMTE2LCAgIDExNywKLSAg
ICAgMTE4LCAgIDExOSwgICAxMjAsICAgMTIxLCAgIDEyNSwgICAxNDIsICAgIDgxLCAgIDEzOSwg
ICAxNDYsICAgMTQ3LAotICAgICAxNDQsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE3LCAgICAx
OCwgICAgMTksICAgIDIwLCAgICA0MCwgICAgNzUsCi0gICAgICA3NiwgICAgODEsICAgMTA4LCAg
IDEyMSwgICAxMjIsICAgMTI0LCAgIDEyNiwgICAxMjcsICAgMTQyLCAgIDE1MSwKLSAgICAgMTUy
LCAgIDE1MywgICAxNTQsICAgMTYyLCAgIDE2MywgICAxNjQsICAgMTY3LCAgIDE3NCwgICAgOTYs
ICAgMTMxLAotICAgICAxMzQsICAgIDczLCAgICA4MCwgICAgNzQsICAgMTI1LCAgIDEyMiwgICAx
NTAsICAgMTA4LCAgIDEwOCwgICAxMjQsCi0gICAgICA1MiwgICAgNTMsICAgIDczLCAgICA3Nywg
ICAgNzIsICAgIDcyLCAgICA3OCwgICAgMzksICAgMTIyLCAgICA3MSwKLSAgICAgMTA4LCAgICA4
NiwgICAgODcsICAgIDgzLCAgICA4NSwgICAgNTQsICAgIDU1LCAgICA4OSwgICAgOTAsICAgIDU2
LAotICAgICAgNTcsICAgIDU4LCAgICA2MCwgICAgNTksICAgIDk0LCAgICA3NCwgICAgOTYsICAg
MTQ4LCAgIDE0OSwgICAgNzYsCi0gICAgIDE0NywgICAxNDYsICAgIDgxLCAgICA4MSwgICAxNjks
ICAgIDcxLCAgICA3MSwgICAgODEsICAgIDgxLCAgIDEyNCwKLSAgICAgIDcxLCAgICA3NiwgICAx
NTUsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDcwLCAgICA4MCwgICAxMjMsICAgIDc4LAotICAg
ICAgODEsICAgIDc2LCAgIDE1MiwgICAgNzMsICAgIDc0LCAgIDEyNSwgICAxNTAsICAgIDc0LCAg
ICA3MiwgICAxMDAsCi0gICAgIDEyNCwgICAgNDUsICAgIDQ2LCAgICA5NiwgICAxMDMsICAgMTIy
LCAgIDEwOCwgICAxMDgsICAgMTEwLCAgIDExMCwKLSAgICAgMTEyLCAgIDExMiwgICAxMTIsICAg
MTEyLCAgIDExMywgICAxMTMsICAgMTE3LCAgIDExOCwgICAxMTksICAgMTI0LAotICAgICAgNzMs
ICAgIDc4LCAgICA4MSwgICAgNzYsICAgMTU4LCAgIDE1OSwgICAxNjAsICAgMTcwLCAgIDEyNCwg
ICAgODEsCi0gICAgIDE2OCwgICAxNjIsICAgMTIyLCAgIDEyMiwgICAxMjUsICAgIDc0LCAgICA3
NCwgICAgNzksICAgMTI1LCAgIDE0OSwKLSAgICAgIDQwLCAgIDE2MSwgICAxNTMsICAgMTUxLCAg
IDE2MywgICAxNzEsICAgIDcyLCAgIDEyNCwgICAxMzcsICAgMTY2LAotICAgICAxNTYsICAgIDc0
LCAgIDEyMiwgICAgNzQsICAgIDcxLCAgIDE2NiwgICAxNzIsICAgMTczLCAgIDE1OCwgICAxNjUs
Ci0gICAgICA5NiwgICAgNzIsICAgIDc2LCAgIDEyNCwgICAgODEsICAgIDcyLCAgICAxNiwgICAg
ODAsICAgMTUzLCAgIDE1NywKLSAgICAgMTYxLCAgICA3MiwgICAxMjQsICAgMTU3LCAgIDE1OCwg
ICAxNTAsICAgIDgxCi19OwotCi0jZGVmaW5lIHl5ZXJyb2sJCSh5eWVycnN0YXR1cyA9IDApCi0j
ZGVmaW5lIHl5Y2xlYXJpbgkoeXljaGFyID0gWVlFTVBUWSkKLSNkZWZpbmUgWVlFTVBUWQkJKC0y
KQotI2RlZmluZSBZWUVPRgkJMAotCi0jZGVmaW5lIFlZQUNDRVBUCWdvdG8geXlhY2NlcHRsYWIK
LSNkZWZpbmUgWVlBQk9SVAkJZ290byB5eWFib3J0bGFiCi0jZGVmaW5lIFlZRVJST1IJCWdvdG8g
eXllcnJvcmxhYgotCi0KLS8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5eWVycm9yLiAg
VGhpcyByZW1haW5zIGhlcmUgdGVtcG9yYXJpbHkKLSAgIHRvIGVhc2UgdGhlIHRyYW5zaXRpb24g
dG8gdGhlIG5ldyBtZWFuaW5nIG9mIFlZRVJST1IsIGZvciBHQ0MuCi0gICBPbmNlIEdDQyB2ZXJz
aW9uIDIgaGFzIHN1cHBsYW50ZWQgdmVyc2lvbiAxLCB0aGlzIGNhbiBnby4gIEhvd2V2ZXIsCi0g
ICBZWUZBSUwgYXBwZWFycyB0byBiZSBpbiB1c2UuICBOZXZlcnRoZWxlc3MsIGl0IGlzIGZvcm1h
bGx5IGRlcHJlY2F0ZWQKLSAgIGluIEJpc29uIDIuNC4yJ3MgTkVXUyBlbnRyeSwgd2hlcmUgYSBw
bGFuIHRvIHBoYXNlIGl0IG91dCBpcwotICAgZGlzY3Vzc2VkLiAgKi8KLQotI2RlZmluZSBZWUZB
SUwJCWdvdG8geXllcnJsYWIKLSNpZiBkZWZpbmVkIFlZRkFJTAotICAvKiBUaGlzIGlzIGhlcmUg
dG8gc3VwcHJlc3Mgd2FybmluZ3MgZnJvbSB0aGUgR0NDIGNwcCdzCi0gICAgIC1XdW51c2VkLW1h
Y3Jvcy4gIE5vcm1hbGx5IHdlIGRvbid0IHdvcnJ5IGFib3V0IHRoYXQgd2FybmluZywgYnV0Ci0g
ICAgIHNvbWUgdXNlcnMgZG8sIGFuZCB3ZSB3YW50IHRvIG1ha2UgaXQgZWFzeSBmb3IgdXNlcnMg
dG8gcmVtb3ZlCi0gICAgIFlZRkFJTCB1c2VzLCB3aGljaCB3aWxsIHByb2R1Y2Ugd2FybmluZ3Mg
ZnJvbSBCaXNvbiAyLjUuICAqLwotI2VuZGlmCi0KLSNkZWZpbmUgWVlSRUNPVkVSSU5HKCkgICgh
IXl5ZXJyc3RhdHVzKQotCi0jZGVmaW5lIFlZQkFDS1VQKFRva2VuLCBWYWx1ZSkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5Y2hhciA9PSBZWUVN
UFRZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgeXljaGFyID0gKFRva2VuKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgIHl5bHZhbCA9IChWYWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICBZWVBPUFNUQUNLICh5eWxlbik7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeXlzdGF0ZSA9ICp5eXNzcDsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGdvdG8geXliYWNr
dXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB5eWVycm9yICgmeXlsbG9jLCBjb250ZXh0LCBZ
WV8oInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiKSk7IFwKLSAgICAgIFlZRVJST1I7CQkJ
CQkJCVwKLSAgICB9CQkJCQkJCQlcCi13aGlsZSAoWVlJRCAoMCkpCi0KLS8qIEVycm9yIHRva2Vu
IG51bWJlciAqLwotI2RlZmluZSBZWVRFUlJPUgkxCi0jZGVmaW5lIFlZRVJSQ09ERQkyNTYKLQot
Ci0vKiBZWUxMT0NfREVGQVVMVCAtLSBTZXQgQ1VSUkVOVCB0byBzcGFuIGZyb20gUkhTWzFdIHRv
IFJIU1tOXS4KLSAgIElmIE4gaXMgMCwgdGhlbiBzZXQgQ1VSUkVOVCB0byB0aGUgZW1wdHkgbG9j
YXRpb24gd2hpY2ggZW5kcwotICAgdGhlIHByZXZpb3VzIHN5bWJvbDogUkhTWzBdIChhbHdheXMg
ZGVmaW5lZCkuICAqLwotCi0jaWZuZGVmIFlZTExPQ19ERUZBVUxUCi0jIGRlZmluZSBZWUxMT0Nf
REVGQVVMVChDdXJyZW50LCBSaHMsIE4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICBpZiAoWVlJRCAoTikpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0
X2xpbmU7ICAgICAgICBcCi0gICAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IFlZUkhT
TE9DIChSaHMsIDEpLmZpcnN0X2NvbHVtbjsgICAgICBcCi0gICAgICAgICAgKEN1cnJlbnQpLmxh
c3RfbGluZSAgICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfbGluZTsgICAgICAgICBcCi0gICAg
ICAgICAgKEN1cnJlbnQpLmxhc3RfY29sdW1uICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfY29s
dW1uOyAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBlbHNlICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9IChDdXJyZW50KS5s
YXN0X2xpbmUgICA9ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBZWVJIU0xPQyAoUmhzLCAw
KS5sYXN0X2xpbmU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg
KEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IChDdXJyZW50KS5sYXN0X2NvbHVtbiA9ICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgICBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0X2NvbHVtbjsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgd2hpbGUgKFlZ
SUQgKDApKQotI2VuZGlmCi0KLSNkZWZpbmUgWVlSSFNMT0MoUmhzLCBLKSAoKFJocylbS10pCi0K
LQotLyogWVlfTE9DQVRJT05fUFJJTlQgLS0gUHJpbnQgdGhlIGxvY2F0aW9uIG9uIHRoZSBzdHJl
YW0uCi0gICBUaGlzIG1hY3JvIHdhcyBub3QgbWFuZGF0ZWQgb3JpZ2luYWxseTogZGVmaW5lIG9u
bHkgaWYgd2Uga25vdwotICAgd2Ugd29uJ3QgYnJlYWsgdXNlciBjb2RlOiB3aGVuIHRoZXNlIGFy
ZSB0aGUgbG9jYXRpb25zIHdlIGtub3cuICAqLwotCi0jaWZuZGVmIFlZX0xPQ0FUSU9OX1BSSU5U
Ci0jIGlmIGRlZmluZWQgWVlMVFlQRV9JU19UUklWSUFMICYmIFlZTFRZUEVfSVNfVFJJVklBTAot
Ci0vKiBQcmludCAqWVlMT0NQIG9uIFlZTy4gIFByaXZhdGUsIGRvIG5vdCByZWx5IG9uIGl0cyBl
eGlzdGVuY2UuICovCi0KLV9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQotI2lmIChkZWZpbmVk
IF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19j
cGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB1bnNpZ25lZAoteXlfbG9jYXRp
b25fcHJpbnRfIChGSUxFICp5eW8sIFlZTFRZUEUgY29uc3QgKiBjb25zdCB5eWxvY3ApCi0jZWxz
ZQotc3RhdGljIHVuc2lnbmVkCi15eV9sb2NhdGlvbl9wcmludF8gKHl5bywgeXlsb2NwKQotICAg
IEZJTEUgKnl5bzsKLSAgICBZWUxUWVBFIGNvbnN0ICogY29uc3QgeXlsb2NwOwotI2VuZGlmCi17
Ci0gIHVuc2lnbmVkIHJlcyA9IDA7Ci0gIGludCBlbmRfY29sID0gMCAhPSB5eWxvY3AtPmxhc3Rf
Y29sdW1uID8geXlsb2NwLT5sYXN0X2NvbHVtbiAtIDEgOiAwOwotICBpZiAoMCA8PSB5eWxvY3At
PmZpcnN0X2xpbmUpCi0gICAgewotICAgICAgcmVzICs9IGZwcmludGYgKHl5bywgIiVkIiwgeXls
b2NwLT5maXJzdF9saW5lKTsKLSAgICAgIGlmICgwIDw9IHl5bG9jcC0+Zmlyc3RfY29sdW1uKQot
ICAgICAgICByZXMgKz0gZnByaW50ZiAoeXlvLCAiLiVkIiwgeXlsb2NwLT5maXJzdF9jb2x1bW4p
OwotICAgIH0KLSAgaWYgKDAgPD0geXlsb2NwLT5sYXN0X2xpbmUpCi0gICAgewotICAgICAgaWYg
KHl5bG9jcC0+Zmlyc3RfbGluZSA8IHl5bG9jcC0+bGFzdF9saW5lKQotICAgICAgICB7Ci0gICAg
ICAgICAgcmVzICs9IGZwcmludGYgKHl5bywgIi0lZCIsIHl5bG9jcC0+bGFzdF9saW5lKTsKLSAg
ICAgICAgICBpZiAoMCA8PSBlbmRfY29sKQotICAgICAgICAgICAgcmVzICs9IGZwcmludGYgKHl5
bywgIi4lZCIsIGVuZF9jb2wpOwotICAgICAgICB9Ci0gICAgICBlbHNlIGlmICgwIDw9IGVuZF9j
b2wgJiYgeXlsb2NwLT5maXJzdF9jb2x1bW4gPCBlbmRfY29sKQotICAgICAgICByZXMgKz0gZnBy
aW50ZiAoeXlvLCAiLSVkIiwgZW5kX2NvbCk7Ci0gICAgfQotICByZXR1cm4gcmVzOwotIH0KLQot
IyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykgICAgICAgICAgXAotICB5eV9s
b2NhdGlvbl9wcmludF8gKEZpbGUsICYoTG9jKSkKLQotIyBlbHNlCi0jICBkZWZpbmUgWVlfTE9D
QVRJT05fUFJJTlQoRmlsZSwgTG9jKSAoKHZvaWQpIDApCi0jIGVuZGlmCi0jZW5kaWYKLQotCi0v
KiBZWUxFWCAtLSBjYWxsaW5nIGB5eWxleCcgd2l0aCB0aGUgcmlnaHQgYXJndW1lbnRzLiAgKi8K
LSNpZmRlZiBZWUxFWF9QQVJBTQotIyBkZWZpbmUgWVlMRVggeXlsZXggKCZ5eWx2YWwsICZ5eWxs
b2MsIFlZTEVYX1BBUkFNKQotI2Vsc2UKLSMgZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsLCAm
eXlsbG9jKQotI2VuZGlmCi0KLS8qIEVuYWJsZSBkZWJ1Z2dpbmcgaWYgcmVxdWVzdGVkLiAgKi8K
LSNpZiBZWURFQlVHCi0KLSMgaWZuZGVmIFlZRlBSSU5URgotIyAgaW5jbHVkZSA8c3RkaW8uaD4g
LyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgZGVmaW5lIFlZRlBSSU5URiBm
cHJpbnRmCi0jIGVuZGlmCi0KLSMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQkJCVwKLWRvIHsJCQkJ
CQlcCi0gIGlmICh5eWRlYnVnKQkJCQkJXAotICAgIFlZRlBSSU5URiBBcmdzOwkJCQlcCi19IHdo
aWxlIChZWUlEICgwKSkKLQotIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBW
YWx1ZSwgTG9jYXRpb24pCQkJICBcCi1kbyB7CQkJCQkJCQkJICBcCi0gIGlmICh5eWRlYnVnKQkJ
CQkJCQkJICBcCi0gICAgewkJCQkJCQkJCSAgXAotICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIl
cyAiLCBUaXRsZSk7CQkJCQkgIFwKLSAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLAkJCQkJ
CSAgXAotCQkgIFR5cGUsIFZhbHVlLCBMb2NhdGlvbiwgY29udGV4dCk7IFwKLSAgICAgIFlZRlBS
SU5URiAoc3RkZXJyLCAiXG4iKTsJCQkJCQkgIFwKLSAgICB9CQkJCQkJCQkJICBcCi19IHdoaWxl
IChZWUlEICgwKSkKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBQ
cmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSovCi0KLS8qQVJHU1VTRUQqLwotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRl
ZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVm
aW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xfdmFsdWVfcHJpbnQgKEZJTEUg
Knl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXAsIFlZ
TFRZUEUgY29uc3QgKiBjb25zdCB5eWxvY2F0aW9ucCwgVFBhcnNlQ29udGV4dCogY29udGV4dCkK
LSNlbHNlCi1zdGF0aWMgdm9pZAoteXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwgeXl0
eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAsIGNvbnRleHQpCi0gICAgRklMRSAqeXlvdXRwdXQ7
Ci0gICAgaW50IHl5dHlwZTsKLSAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7Ci0g
ICAgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jYXRpb25wOwotICAgIFRQYXJzZUNvbnRleHQq
IGNvbnRleHQ7Ci0jZW5kaWYKLXsKLSAgRklMRSAqeXlvID0geXlvdXRwdXQ7Ci0gIFlZVVNFICh5
eW8pOwotICBpZiAoIXl5dmFsdWVwKQotICAgIHJldHVybjsKLSAgWVlVU0UgKHl5bG9jYXRpb25w
KTsKLSAgWVlVU0UgKGNvbnRleHQpOwotIyBpZmRlZiBZWVBSSU5UCi0gIGlmICh5eXR5cGUgPCBZ
WU5UT0tFTlMpCi0gICAgWVlQUklOVCAoeXlvdXRwdXQsIHl5dG9rbnVtW3l5dHlwZV0sICp5eXZh
bHVlcCk7Ci0jIGVsc2UKLSAgWVlVU0UgKHl5b3V0cHV0KTsKLSMgZW5kaWYKLSAgc3dpdGNoICh5
eXR5cGUpCi0gICAgewotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQot
Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IFByaW50IHRoaXMgc3lt
Ym9sIG9uIFlZT1VUUFVULiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
LQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAg
IHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lk
Ci15eV9zeW1ib2xfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNv
bnN0ICogY29uc3QgeXl2YWx1ZXAsIFlZTFRZUEUgY29uc3QgKiBjb25zdCB5eWxvY2F0aW9ucCwg
VFBhcnNlQ29udGV4dCogY29udGV4dCkKLSNlbHNlCi1zdGF0aWMgdm9pZAoteXlfc3ltYm9sX3By
aW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAsIGNvbnRleHQpCi0g
ICAgRklMRSAqeXlvdXRwdXQ7Ci0gICAgaW50IHl5dHlwZTsKLSAgICBZWVNUWVBFIGNvbnN0ICog
Y29uc3QgeXl2YWx1ZXA7Ci0gICAgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jYXRpb25wOwot
ICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQ7Ci0jZW5kaWYKLXsKLSAgaWYgKHl5dHlwZSA8IFlZ
TlRPS0VOUykKLSAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAidG9rZW4gJXMgKCIsIHl5dG5hbWVb
eXl0eXBlXSk7Ci0gIGVsc2UKLSAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAibnRlcm0gJXMgKCIs
IHl5dG5hbWVbeXl0eXBlXSk7Ci0KLSAgWVlfTE9DQVRJT05fUFJJTlQgKHl5b3V0cHV0LCAqeXls
b2NhdGlvbnApOwotICBZWUZQUklOVEYgKHl5b3V0cHV0LCAiOiAiKTsKLSAgeXlfc3ltYm9sX3Zh
bHVlX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAsIGNvbnRl
eHQpOwotICBZWUZQUklOVEYgKHl5b3V0cHV0LCAiKSIpOwotfQotCi0vKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwg
eXlfc3RhY2tfcHJpbnQgLS0gUHJpbnQgdGhlIHN0YXRlIHN0YWNrIGZyb20gaXRzIEJPVFRPTSB1
cCB0byBpdHMgfAotfCBUT1AgKGluY2x1ZGVkKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmIChkZWZpbmVkIF9f
U1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1
c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15eV9zdGFja19wcmludCAo
eXl0eXBlX2ludDE2ICp5eWJvdHRvbSwgeXl0eXBlX2ludDE2ICp5eXRvcCkKLSNlbHNlCi1zdGF0
aWMgdm9pZAoteXlfc3RhY2tfcHJpbnQgKHl5Ym90dG9tLCB5eXRvcCkKLSAgICB5eXR5cGVfaW50
MTYgKnl5Ym90dG9tOwotICAgIHl5dHlwZV9pbnQxNiAqeXl0b3A7Ci0jZW5kaWYKLXsKLSAgWVlG
UFJJTlRGIChzdGRlcnIsICJTdGFjayBub3ciKTsKLSAgZm9yICg7IHl5Ym90dG9tIDw9IHl5dG9w
OyB5eWJvdHRvbSsrKQotICAgIHsKLSAgICAgIGludCB5eWJvdCA9ICp5eWJvdHRvbTsKLSAgICAg
IFlZRlBSSU5URiAoc3RkZXJyLCAiICVkIiwgeXlib3QpOwotICAgIH0KLSAgWVlGUFJJTlRGIChz
dGRlcnIsICJcbiIpOwotfQotCi0jIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkJ
CQkJXAotZG8gewkJCQkJCQkJXAotICBpZiAoeXlkZWJ1ZykJCQkJCQkJXAotICAgIHl5X3N0YWNr
X3ByaW50ICgoQm90dG9tKSwgKFRvcCkpOwkJCQlcCi19IHdoaWxlIChZWUlEICgwKSkKLQotCi0v
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgUmVw
b3J0IHRoYXQgdGhlIFlZUlVMRSBpcyBnb2luZyB0byBiZSByZWR1Y2VkLiAgfAotYC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNpZiAoZGVmaW5l
ZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9f
Y3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlfcmVkdWNlX3By
aW50IChZWVNUWVBFICp5eXZzcCwgWVlMVFlQRSAqeXlsc3AsIGludCB5eXJ1bGUsIFRQYXJzZUNv
bnRleHQqIGNvbnRleHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5X3JlZHVjZV9wcmludCAoeXl2
c3AsIHl5bHNwLCB5eXJ1bGUsIGNvbnRleHQpCi0gICAgWVlTVFlQRSAqeXl2c3A7Ci0gICAgWVlM
VFlQRSAqeXlsc3A7Ci0gICAgaW50IHl5cnVsZTsKLSAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0
OwotI2VuZGlmCi17Ci0gIGludCB5eW5yaHMgPSB5eXIyW3l5cnVsZV07Ci0gIGludCB5eWk7Ci0g
IHVuc2lnbmVkIGxvbmcgaW50IHl5bG5vID0geXlybGluZVt5eXJ1bGVdOwotICBZWUZQUklOVEYg
KHN0ZGVyciwgIlJlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgJWQgKGxpbmUgJWx1KTpcbiIsCi0JICAg
ICB5eXJ1bGUgLSAxLCB5eWxubyk7Ci0gIC8qIFRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQuICAq
LwotICBmb3IgKHl5aSA9IDA7IHl5aSA8IHl5bnJoczsgeXlpKyspCi0gICAgewotICAgICAgWVlG
UFJJTlRGIChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAxKTsKLSAgICAgIHl5X3N5bWJvbF9w
cmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNbeXlydWxlXSArIHl5aV0sCi0JCSAgICAgICAmKHl5
dnNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkKLQkJICAgICAgICwgJih5eWxzcFsoeXlpICsgMSkg
LSAoeXlucmhzKV0pCQkgICAgICAgLCBjb250ZXh0KTsKLSAgICAgIFlZRlBSSU5URiAoc3RkZXJy
LCAiXG4iKTsKLSAgICB9Ci19Ci0KLSMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQkJXAot
ZG8gewkJCQkJXAotICBpZiAoeXlkZWJ1ZykJCQkJXAotICAgIHl5X3JlZHVjZV9wcmludCAoeXl2
c3AsIHl5bHNwLCBSdWxlLCBjb250ZXh0KTsgXAotfSB3aGlsZSAoWVlJRCAoMCkpCi0KLS8qIE5v
bnplcm8gbWVhbnMgcHJpbnQgcGFyc2UgdHJhY2UuICBJdCBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQg
c28gdGhhdAotICAgbXVsdGlwbGUgcGFyc2VycyBjYW4gY29leGlzdC4gICovCi1pbnQgeXlkZWJ1
ZzsKLSNlbHNlIC8qICFZWURFQlVHICovCi0jIGRlZmluZSBZWURQUklOVEYoQXJncykKLSMgZGVm
aW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKQotIyBkZWZp
bmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApCi0jIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQo
UnVsZSkKLSNlbmRpZiAvKiAhWVlERUJVRyAqLwotCi0KLS8qIFlZSU5JVERFUFRIIC0tIGluaXRp
YWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAgKi8KLSNpZm5kZWYJWVlJTklUREVQVEgK
LSMgZGVmaW5lIFlZSU5JVERFUFRIIDIwMAotI2VuZGlmCi0KLS8qIFlZTUFYREVQVEggLS0gbWF4
aW11bSBzaXplIHRoZSBzdGFja3MgY2FuIGdyb3cgdG8gKGVmZmVjdGl2ZSBvbmx5Ci0gICBpZiB0
aGUgYnVpbHQtaW4gc3RhY2sgZXh0ZW5zaW9uIG1ldGhvZCBpcyB1c2VkKS4KLQotICAgRG8gbm90
IG1ha2UgdGhpcyB2YWx1ZSB0b28gbGFyZ2U7IHRoZSByZXN1bHRzIGFyZSB1bmRlZmluZWQgaWYK
LSAgIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA8IFlZU1RBQ0tfQllURVMgKFlZTUFYREVQVEgpCi0g
ICBldmFsdWF0ZWQgd2l0aCBpbmZpbml0ZS1wcmVjaXNpb24gaW50ZWdlciBhcml0aG1ldGljLiAg
Ki8KLQotI2lmbmRlZiBZWU1BWERFUFRICi0jIGRlZmluZSBZWU1BWERFUFRIIDEwMDAwCi0jZW5k
aWYKLQotCi0jaWYgWVlFUlJPUl9WRVJCT1NFCi0KLSMgaWZuZGVmIHl5c3RybGVuCi0jICBpZiBk
ZWZpbmVkIF9fR0xJQkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdfSAotIyAgIGRlZmluZSB5eXN0cmxl
biBzdHJsZW4KLSMgIGVsc2UKLS8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIFlZU1RSLiAgKi8KLSNp
ZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBk
ZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgWVlTSVpFX1QK
LXl5c3RybGVuIChjb25zdCBjaGFyICp5eXN0cikKLSNlbHNlCi1zdGF0aWMgWVlTSVpFX1QKLXl5
c3RybGVuICh5eXN0cikKLSAgICBjb25zdCBjaGFyICp5eXN0cjsKLSNlbmRpZgotewotICBZWVNJ
WkVfVCB5eWxlbjsKLSAgZm9yICh5eWxlbiA9IDA7IHl5c3RyW3l5bGVuXTsgeXlsZW4rKykKLSAg
ICBjb250aW51ZTsKLSAgcmV0dXJuIHl5bGVuOwotfQotIyAgZW5kaWYKLSMgZW5kaWYKLQotIyBp
Zm5kZWYgeXlzdHBjcHkKLSMgIGlmIGRlZmluZWQgX19HTElCQ19fICYmIGRlZmluZWQgX1NUUklO
R19IICYmIGRlZmluZWQgX0dOVV9TT1VSQ0UKLSMgICBkZWZpbmUgeXlzdHBjcHkgc3RwY3B5Ci0j
ICBlbHNlCi0vKiBDb3B5IFlZU1JDIHRvIFlZREVTVCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9m
IHRoZSB0ZXJtaW5hdGluZyAnXDAnIGluCi0gICBZWURFU1QuICAqLwotI2lmIChkZWZpbmVkIF9f
U1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1
c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyBjaGFyICoKLXl5c3RwY3B5IChjaGFy
ICp5eWRlc3QsIGNvbnN0IGNoYXIgKnl5c3JjKQotI2Vsc2UKLXN0YXRpYyBjaGFyICoKLXl5c3Rw
Y3B5ICh5eWRlc3QsIHl5c3JjKQotICAgIGNoYXIgKnl5ZGVzdDsKLSAgICBjb25zdCBjaGFyICp5
eXNyYzsKLSNlbmRpZgotewotICBjaGFyICp5eWQgPSB5eWRlc3Q7Ci0gIGNvbnN0IGNoYXIgKnl5
cyA9IHl5c3JjOwotCi0gIHdoaWxlICgoKnl5ZCsrID0gKnl5cysrKSAhPSAnXDAnKQotICAgIGNv
bnRpbnVlOwotCi0gIHJldHVybiB5eWQgLSAxOwotfQotIyAgZW5kaWYKLSMgZW5kaWYKLQotIyBp
Zm5kZWYgeXl0bmFtZXJyCi0vKiBDb3B5IHRvIFlZUkVTIHRoZSBjb250ZW50cyBvZiBZWVNUUiBh
ZnRlciBzdHJpcHBpbmcgYXdheSB1bm5lY2Vzc2FyeQotICAgcXVvdGVzIGFuZCBiYWNrc2xhc2hl
cywgc28gdGhhdCBpdCdzIHN1aXRhYmxlIGZvciB5eWVycm9yLiAgVGhlCi0gICBoZXVyaXN0aWMg
aXMgdGhhdCBkb3VibGUtcXVvdGluZyBpcyB1bm5lY2Vzc2FyeSB1bmxlc3MgdGhlIHN0cmluZwot
ICAgY29udGFpbnMgYW4gYXBvc3Ryb3BoZSwgYSBjb21tYSwgb3IgYmFja3NsYXNoIChvdGhlciB0
aGFuCi0gICBiYWNrc2xhc2gtYmFja3NsYXNoKS4gIFlZU1RSIGlzIHRha2VuIGZyb20geXl0bmFt
ZS4gIElmIFlZUkVTIGlzCi0gICBudWxsLCBkbyBub3QgY29weTsgaW5zdGVhZCwgcmV0dXJuIHRo
ZSBsZW5ndGggb2Ygd2hhdCB0aGUgcmVzdWx0Ci0gICB3b3VsZCBoYXZlIGJlZW4uICAqLwotc3Rh
dGljIFlZU0laRV9UCi15eXRuYW1lcnIgKGNoYXIgKnl5cmVzLCBjb25zdCBjaGFyICp5eXN0cikK
LXsKLSAgaWYgKCp5eXN0ciA9PSAnIicpCi0gICAgewotICAgICAgWVlTSVpFX1QgeXluID0gMDsK
LSAgICAgIGNoYXIgY29uc3QgKnl5cCA9IHl5c3RyOwotCi0gICAgICBmb3IgKDs7KQotCXN3aXRj
aCAoKisreXlwKQotCSAgewotCSAgY2FzZSAnXCcnOgotCSAgY2FzZSAnLCc6Ci0JICAgIGdvdG8g
ZG9fbm90X3N0cmlwX3F1b3RlczsKLQotCSAgY2FzZSAnXFwnOgotCSAgICBpZiAoKisreXlwICE9
ICdcXCcpCi0JICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOwotCSAgICAvKiBGYWxsIHRo
cm91Z2guICAqLwotCSAgZGVmYXVsdDoKLQkgICAgaWYgKHl5cmVzKQotCSAgICAgIHl5cmVzW3l5
bl0gPSAqeXlwOwotCSAgICB5eW4rKzsKLQkgICAgYnJlYWs7Ci0KLQkgIGNhc2UgJyInOgotCSAg
ICBpZiAoeXlyZXMpCi0JICAgICAgeXlyZXNbeXluXSA9ICdcMCc7Ci0JICAgIHJldHVybiB5eW47
Ci0JICB9Ci0gICAgZG9fbm90X3N0cmlwX3F1b3RlczogOwotICAgIH0KLQotICBpZiAoISB5eXJl
cykKLSAgICByZXR1cm4geXlzdHJsZW4gKHl5c3RyKTsKLQotICByZXR1cm4geXlzdHBjcHkgKHl5
cmVzLCB5eXN0cikgLSB5eXJlczsKLX0KLSMgZW5kaWYKLQotLyogQ29weSBpbnRvICpZWU1TRywg
d2hpY2ggaXMgb2Ygc2l6ZSAqWVlNU0dfQUxMT0MsIGFuIGVycm9yIG1lc3NhZ2UKLSAgIGFib3V0
IHRoZSB1bmV4cGVjdGVkIHRva2VuIFlZVE9LRU4gZm9yIHRoZSBzdGF0ZSBzdGFjayB3aG9zZSB0
b3AgaXMKLSAgIFlZU1NQLgotCi0gICBSZXR1cm4gMCBpZiAqWVlNU0cgd2FzIHN1Y2Nlc3NmdWxs
eSB3cml0dGVuLiAgUmV0dXJuIDEgaWYgKllZTVNHIGlzCi0gICBub3QgbGFyZ2UgZW5vdWdoIHRv
IGhvbGQgdGhlIG1lc3NhZ2UuICBJbiB0aGF0IGNhc2UsIGFsc28gc2V0Ci0gICAqWVlNU0dfQUxM
T0MgdG8gdGhlIHJlcXVpcmVkIG51bWJlciBvZiBieXRlcy4gIFJldHVybiAyIGlmIHRoZQotICAg
cmVxdWlyZWQgbnVtYmVyIG9mIGJ5dGVzIGlzIHRvbyBsYXJnZSB0byBzdG9yZS4gICovCi1zdGF0
aWMgaW50Ci15eXN5bnRheF9lcnJvciAoWVlTSVpFX1QgKnl5bXNnX2FsbG9jLCBjaGFyICoqeXlt
c2csCi0gICAgICAgICAgICAgICAgeXl0eXBlX2ludDE2ICp5eXNzcCwgaW50IHl5dG9rZW4pCi17
Ci0gIFlZU0laRV9UIHl5c2l6ZTAgPSB5eXRuYW1lcnIgKFlZX05VTEwsIHl5dG5hbWVbeXl0b2tl
bl0pOwotICBZWVNJWkVfVCB5eXNpemUgPSB5eXNpemUwOwotICBlbnVtIHsgWVlFUlJPUl9WRVJC
T1NFX0FSR1NfTUFYSU1VTSA9IDUgfTsKLSAgLyogSW50ZXJuYXRpb25hbGl6ZWQgZm9ybWF0IHN0
cmluZy4gKi8KLSAgY29uc3QgY2hhciAqeXlmb3JtYXQgPSBZWV9OVUxMOwotICAvKiBBcmd1bWVu
dHMgb2YgeXlmb3JtYXQuICovCi0gIGNoYXIgY29uc3QgKnl5YXJnW1lZRVJST1JfVkVSQk9TRV9B
UkdTX01BWElNVU1dOwotICAvKiBOdW1iZXIgb2YgcmVwb3J0ZWQgdG9rZW5zIChvbmUgZm9yIHRo
ZSAidW5leHBlY3RlZCIsIG9uZSBwZXIKLSAgICAgImV4cGVjdGVkIikuICovCi0gIGludCB5eWNv
dW50ID0gMDsKLQotICAvKiBUaGVyZSBhcmUgbWFueSBwb3NzaWJpbGl0aWVzIGhlcmUgdG8gY29u
c2lkZXI6Ci0gICAgIC0gQXNzdW1lIFlZRkFJTCBpcyBub3QgdXNlZC4gIEl0J3MgdG9vIGZsYXdl
ZCB0byBjb25zaWRlci4gIFNlZQotICAgICAgIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZl
L2h0bWwvYmlzb24tcGF0Y2hlcy8yMDA5LTEyL21zZzAwMDI0Lmh0bWw+Ci0gICAgICAgZm9yIGRl
dGFpbHMuICBZWUVSUk9SIGlzIGZpbmUgYXMgaXQgZG9lcyBub3QgaW52b2tlIHRoaXMKLSAgICAg
ICBmdW5jdGlvbi4KLSAgICAgLSBJZiB0aGlzIHN0YXRlIGlzIGEgY29uc2lzdGVudCBzdGF0ZSB3
aXRoIGEgZGVmYXVsdCBhY3Rpb24sIHRoZW4KLSAgICAgICB0aGUgb25seSB3YXkgdGhpcyBmdW5j
dGlvbiB3YXMgaW52b2tlZCBpcyBpZiB0aGUgZGVmYXVsdCBhY3Rpb24KLSAgICAgICBpcyBhbiBl
cnJvciBhY3Rpb24uICBJbiB0aGF0IGNhc2UsIGRvbid0IGNoZWNrIGZvciBleHBlY3RlZAotICAg
ICAgIHRva2VucyBiZWNhdXNlIHRoZXJlIGFyZSBub25lLgotICAgICAtIFRoZSBvbmx5IHdheSB0
aGVyZSBjYW4gYmUgbm8gbG9va2FoZWFkIHByZXNlbnQgKGluIHl5Y2hhcikgaXMgaWYKLSAgICAg
ICB0aGlzIHN0YXRlIGlzIGEgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgZGVmYXVsdCBhY3Rpb24u
ICBUaHVzLAotICAgICAgIGRldGVjdGluZyB0aGUgYWJzZW5jZSBvZiBhIGxvb2thaGVhZCBpcyBz
dWZmaWNpZW50IHRvIGRldGVybWluZQotICAgICAgIHRoYXQgdGhlcmUgaXMgbm8gdW5leHBlY3Rl
ZCBvciBleHBlY3RlZCB0b2tlbiB0byByZXBvcnQuICBJbiB0aGF0Ci0gICAgICAgY2FzZSwganVz
dCByZXBvcnQgYSBzaW1wbGUgInN5bnRheCBlcnJvciIuCi0gICAgIC0gRG9uJ3QgYXNzdW1lIHRo
ZXJlIGlzbid0IGEgbG9va2FoZWFkIGp1c3QgYmVjYXVzZSB0aGlzIHN0YXRlIGlzIGEKLSAgICAg
ICBjb25zaXN0ZW50IHN0YXRlIHdpdGggYSBkZWZhdWx0IGFjdGlvbi4gIFRoZXJlIG1pZ2h0IGhh
dmUgYmVlbiBhCi0gICAgICAgcHJldmlvdXMgaW5jb25zaXN0ZW50IHN0YXRlLCBjb25zaXN0ZW50
IHN0YXRlIHdpdGggYSBub24tZGVmYXVsdAotICAgICAgIGFjdGlvbiwgb3IgdXNlciBzZW1hbnRp
YyBhY3Rpb24gdGhhdCBtYW5pcHVsYXRlZCB5eWNoYXIuCi0gICAgIC0gT2YgY291cnNlLCB0aGUg
ZXhwZWN0ZWQgdG9rZW4gbGlzdCBkZXBlbmRzIG9uIHN0YXRlcyB0byBoYXZlCi0gICAgICAgY29y
cmVjdCBsb29rYWhlYWQgaW5mb3JtYXRpb24sIGFuZCBpdCBkZXBlbmRzIG9uIHRoZSBwYXJzZXIg
bm90Ci0gICAgICAgdG8gcGVyZm9ybSBleHRyYSByZWR1Y3Rpb25zIGFmdGVyIGZldGNoaW5nIGEg
bG9va2FoZWFkIGZyb20gdGhlCi0gICAgICAgc2Nhbm5lciBhbmQgYmVmb3JlIGRldGVjdGluZyBh
IHN5bnRheCBlcnJvci4gIFRodXMsIHN0YXRlIG1lcmdpbmcKLSAgICAgICAoZnJvbSBMQUxSIG9y
IElFTFIpIGFuZCBkZWZhdWx0IHJlZHVjdGlvbnMgY29ycnVwdCB0aGUgZXhwZWN0ZWQKLSAgICAg
ICB0b2tlbiBsaXN0LiAgSG93ZXZlciwgdGhlIGxpc3QgaXMgY29ycmVjdCBmb3IgY2Fub25pY2Fs
IExSIHdpdGgKLSAgICAgICBvbmUgZXhjZXB0aW9uOiBpdCB3aWxsIHN0aWxsIGNvbnRhaW4gYW55
IHRva2VuIHRoYXQgd2lsbCBub3QgYmUKLSAgICAgICBhY2NlcHRlZCBkdWUgdG8gYW4gZXJyb3Ig
YWN0aW9uIGluIGEgbGF0ZXIgc3RhdGUuCi0gICovCi0gIGlmICh5eXRva2VuICE9IFlZRU1QVFkp
Ci0gICAgewotICAgICAgaW50IHl5biA9IHl5cGFjdFsqeXlzc3BdOwotICAgICAgeXlhcmdbeXlj
b3VudCsrXSA9IHl5dG5hbWVbeXl0b2tlbl07Ci0gICAgICBpZiAoIXl5cGFjdF92YWx1ZV9pc19k
ZWZhdWx0ICh5eW4pKQotICAgICAgICB7Ci0gICAgICAgICAgLyogU3RhcnQgWVlYIGF0IC1ZWU4g
aWYgbmVnYXRpdmUgdG8gYXZvaWQgbmVnYXRpdmUgaW5kZXhlcyBpbgotICAgICAgICAgICAgIFlZ
Q0hFQ0suICBJbiBvdGhlciB3b3Jkcywgc2tpcCB0aGUgZmlyc3QgLVlZTiBhY3Rpb25zIGZvcgot
ICAgICAgICAgICAgIHRoaXMgc3RhdGUgYmVjYXVzZSB0aGV5IGFyZSBkZWZhdWx0IGFjdGlvbnMu
ICAqLwotICAgICAgICAgIGludCB5eXhiZWdpbiA9IHl5biA8IDAgPyAteXluIDogMDsKLSAgICAg
ICAgICAvKiBTdGF5IHdpdGhpbiBib3VuZHMgb2YgYm90aCB5eWNoZWNrIGFuZCB5eXRuYW1lLiAg
Ki8KLSAgICAgICAgICBpbnQgeXljaGVja2xpbSA9IFlZTEFTVCAtIHl5biArIDE7Ci0gICAgICAg
ICAgaW50IHl5eGVuZCA9IHl5Y2hlY2tsaW0gPCBZWU5UT0tFTlMgPyB5eWNoZWNrbGltIDogWVlO
VE9LRU5TOwotICAgICAgICAgIGludCB5eXg7Ci0KLSAgICAgICAgICBmb3IgKHl5eCA9IHl5eGJl
Z2luOyB5eXggPCB5eXhlbmQ7ICsreXl4KQotICAgICAgICAgICAgaWYgKHl5Y2hlY2tbeXl4ICsg
eXluXSA9PSB5eXggJiYgeXl4ICE9IFlZVEVSUk9SCi0gICAgICAgICAgICAgICAgJiYgIXl5dGFi
bGVfdmFsdWVfaXNfZXJyb3IgKHl5dGFibGVbeXl4ICsgeXluXSkpCi0gICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBpZiAoeXljb3VudCA9PSBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJ
TVVNKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB5eWNvdW50ID0g
MTsKLSAgICAgICAgICAgICAgICAgICAgeXlzaXplID0geXlzaXplMDsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgeXlhcmdb
eXljb3VudCsrXSA9IHl5dG5hbWVbeXl4XTsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICBZWVNJWkVfVCB5eXNpemUxID0geXlzaXplICsgeXl0bmFtZXJyIChZWV9OVUxMLCB5
eXRuYW1lW3l5eF0pOwotICAgICAgICAgICAgICAgICAgaWYgKCEgKHl5c2l6ZSA8PSB5eXNpemUx
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgJiYgeXlzaXplMSA8PSBZWVNUQUNLX0FMTE9DX01B
WElNVU0pKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMjsKLSAgICAgICAgICAgICAgICAg
IHl5c2l6ZSA9IHl5c2l6ZTE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgc3dpdGNoICh5eWNvdW50KQotICAgIHsKLSMgZGVmaW5lIFlZ
Q0FTRV8oTiwgUykgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgY2FzZSBOOiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHl5Zm9ybWF0ID0gUzsgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgIGJyZWFrCi0gICAgICBZWUNBU0VfKDAsIFlZXygic3ludGF4
IGVycm9yIikpOwotICAgICAgWVlDQVNFXygxLCBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3Rl
ZCAlcyIpKTsKLSAgICAgIFlZQ0FTRV8oMiwgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQg
JXMsIGV4cGVjdGluZyAlcyIpKTsKLSAgICAgIFlZQ0FTRV8oMywgWVlfKCJzeW50YXggZXJyb3Is
IHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIpKTsKLSAgICAgIFlZQ0FTRV8oNCwg
WVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAl
cyIpKTsKLSAgICAgIFlZQ0FTRV8oNSwgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMs
IGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIpKTsKLSMgdW5kZWYgWVlDQVNFXwotICAg
IH0KLQotICB7Ci0gICAgWVlTSVpFX1QgeXlzaXplMSA9IHl5c2l6ZSArIHl5c3RybGVuICh5eWZv
cm1hdCk7Ci0gICAgaWYgKCEgKHl5c2l6ZSA8PSB5eXNpemUxICYmIHl5c2l6ZTEgPD0gWVlTVEFD
S19BTExPQ19NQVhJTVVNKSkKLSAgICAgIHJldHVybiAyOwotICAgIHl5c2l6ZSA9IHl5c2l6ZTE7
Ci0gIH0KLQotICBpZiAoKnl5bXNnX2FsbG9jIDwgeXlzaXplKQotICAgIHsKLSAgICAgICp5eW1z
Z19hbGxvYyA9IDIgKiB5eXNpemU7Ci0gICAgICBpZiAoISAoeXlzaXplIDw9ICp5eW1zZ19hbGxv
YwotICAgICAgICAgICAgICYmICp5eW1zZ19hbGxvYyA8PSBZWVNUQUNLX0FMTE9DX01BWElNVU0p
KQotICAgICAgICAqeXltc2dfYWxsb2MgPSBZWVNUQUNLX0FMTE9DX01BWElNVU07Ci0gICAgICBy
ZXR1cm4gMTsKLSAgICB9Ci0KLSAgLyogQXZvaWQgc3ByaW50ZiwgYXMgdGhhdCBpbmZyaW5nZXMg
b24gdGhlIHVzZXIncyBuYW1lIHNwYWNlLgotICAgICBEb24ndCBoYXZlIHVuZGVmaW5lZCBiZWhh
dmlvciBldmVuIGlmIHRoZSB0cmFuc2xhdGlvbgotICAgICBwcm9kdWNlZCBhIHN0cmluZyB3aXRo
IHRoZSB3cm9uZyBudW1iZXIgb2YgIiVzInMuICAqLwotICB7Ci0gICAgY2hhciAqeXlwID0gKnl5
bXNnOwotICAgIGludCB5eWkgPSAwOwotICAgIHdoaWxlICgoKnl5cCA9ICp5eWZvcm1hdCkgIT0g
J1wwJykKLSAgICAgIGlmICgqeXlwID09ICclJyAmJiB5eWZvcm1hdFsxXSA9PSAncycgJiYgeXlp
IDwgeXljb3VudCkKLSAgICAgICAgewotICAgICAgICAgIHl5cCArPSB5eXRuYW1lcnIgKHl5cCwg
eXlhcmdbeXlpKytdKTsKLSAgICAgICAgICB5eWZvcm1hdCArPSAyOwotICAgICAgICB9Ci0gICAg
ICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICB5eXArKzsKLSAgICAgICAgICB5eWZvcm1hdCsr
OwotICAgICAgICB9Ci0gIH0KLSAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYgLyogWVlFUlJPUl9WRVJC
T1NFICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0uCi18IFJlbGVhc2UgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHRvIHRoaXMgc3ltYm9sLiAgfAot
YC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLypB
UkdTVVNFRCovCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19f
IFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3Rh
dGljIHZvaWQKLXl5ZGVzdHJ1Y3QgKGNvbnN0IGNoYXIgKnl5bXNnLCBpbnQgeXl0eXBlLCBZWVNU
WVBFICp5eXZhbHVlcCwgWVlMVFlQRSAqeXlsb2NhdGlvbnAsIFRQYXJzZUNvbnRleHQqIGNvbnRl
eHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5ZGVzdHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFs
dWVwLCB5eWxvY2F0aW9ucCwgY29udGV4dCkKLSAgICBjb25zdCBjaGFyICp5eW1zZzsKLSAgICBp
bnQgeXl0eXBlOwotICAgIFlZU1RZUEUgKnl5dmFsdWVwOwotICAgIFlZTFRZUEUgKnl5bG9jYXRp
b25wOwotICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQ7Ci0jZW5kaWYKLXsKLSAgWVlVU0UgKHl5
dmFsdWVwKTsKLSAgWVlVU0UgKHl5bG9jYXRpb25wKTsKLSAgWVlVU0UgKGNvbnRleHQpOwotCi0g
IGlmICgheXltc2cpCi0gICAgeXltc2cgPSAiRGVsZXRpbmciOwotICBZWV9TWU1CT0xfUFJJTlQg
KHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCk7Ci0KLSAgc3dpdGNoICh5eXR5
cGUpCi0gICAgewotCi0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0K
LQotCi0KLS8qLS0tLS0tLS0tLS4KLXwgeXlwYXJzZS4gIHwKLWAtLS0tLS0tLS0tKi8KLQotI2lm
ZGVmIFlZUEFSU0VfUEFSQU0KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5
X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19W
RVIpCi1pbnQKLXl5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pCi0jZWxzZQotaW50Ci15eXBh
cnNlIChZWVBBUlNFX1BBUkFNKQotICAgIHZvaWQgKllZUEFSU0VfUEFSQU07Ci0jZW5kaWYKLSNl
bHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLwotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmlu
ZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5l
ZCBfTVNDX1ZFUikKLWludAoteXlwYXJzZSAoVFBhcnNlQ29udGV4dCogY29udGV4dCkKLSNlbHNl
Ci1pbnQKLXl5cGFyc2UgKGNvbnRleHQpCi0gICAgVFBhcnNlQ29udGV4dCogY29udGV4dDsKLSNl
bmRpZgotI2VuZGlmCi17Ci0vKiBUaGUgbG9va2FoZWFkIHN5bWJvbC4gICovCi1pbnQgeXljaGFy
OwotCi0KLSNpZiBkZWZpbmVkIF9fR05VQ19fICYmIDQwNyA8PSBfX0dOVUNfXyAqIDEwMCArIF9f
R05VQ19NSU5PUl9fCi0vKiBTdXBwcmVzcyBhbiBpbmNvcnJlY3QgZGlhZ25vc3RpYyBhYm91dCB5
eWx2YWwgYmVpbmcgdW5pbml0aWFsaXplZC4gICovCi0jIGRlZmluZSBZWV9JR05PUkVfTUFZQkVf
VU5JTklUSUFMSVpFRF9CRUdJTiBcCi0gICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIHB1c2gi
KSBcCi0gICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3VuaW5pdGlhbGl6
ZWRcIiIpXAotICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdtYXliZS11
bmluaXRpYWxpemVkXCIiKQotIyBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURf
RU5EIFwKLSAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgcG9wIikKLSNlbHNlCi0vKiBEZWZh
dWx0IHZhbHVlIHVzZWQgZm9yIGluaXRpYWxpemF0aW9uLCBmb3IgcGFjaWZ5aW5nIG9sZGVyIEdD
Q3MKLSAgIG9yIG5vbi1HQ0MgY29tcGlsZXJzLiAgKi8KLXN0YXRpYyBZWVNUWVBFIHl5dmFsX2Rl
ZmF1bHQ7Ci0jIGRlZmluZSBZWV9JTklUSUFMX1ZBTFVFKFZhbHVlKSA9IFZhbHVlCi0jZW5kaWYK
LXN0YXRpYyBZWUxUWVBFIHl5bG9jX2RlZmF1bHQKLSMgaWYgZGVmaW5lZCBZWUxUWVBFX0lTX1RS
SVZJQUwgJiYgWVlMVFlQRV9JU19UUklWSUFMCi0gID0geyAxLCAxLCAxLCAxIH0KLSMgZW5kaWYK
LTsKLSNpZm5kZWYgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4KLSMgZGVmaW5l
IFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOCi0jIGRlZmluZSBZWV9JR05PUkVf
TUFZQkVfVU5JTklUSUFMSVpFRF9FTkQKLSNlbmRpZgotI2lmbmRlZiBZWV9JTklUSUFMX1ZBTFVF
Ci0jIGRlZmluZSBZWV9JTklUSUFMX1ZBTFVFKFZhbHVlKSAvKiBOb3RoaW5nLiAqLwotI2VuZGlm
Ci0KLS8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9va2FoZWFkIHN5bWJvbC4gICovCi1Z
WVNUWVBFIHl5bHZhbCBZWV9JTklUSUFMX1ZBTFVFKHl5dmFsX2RlZmF1bHQpOwotCi0vKiBMb2Nh
dGlvbiBkYXRhIGZvciB0aGUgbG9va2FoZWFkIHN5bWJvbC4gICovCi1ZWUxUWVBFIHl5bGxvYyA9
IHl5bG9jX2RlZmF1bHQ7Ci0KLQotICAgIC8qIE51bWJlciBvZiBzeW50YXggZXJyb3JzIHNvIGZh
ci4gICovCi0gICAgaW50IHl5bmVycnM7Ci0KLSAgICBpbnQgeXlzdGF0ZTsKLSAgICAvKiBOdW1i
ZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVkLiAgKi8K
LSAgICBpbnQgeXllcnJzdGF0dXM7Ci0KLSAgICAvKiBUaGUgc3RhY2tzIGFuZCB0aGVpciB0b29s
czoKLSAgICAgICBgeXlzcyc6IHJlbGF0ZWQgdG8gc3RhdGVzLgotICAgICAgIGB5eXZzJzogcmVs
YXRlZCB0byBzZW1hbnRpYyB2YWx1ZXMuCi0gICAgICAgYHl5bHMnOiByZWxhdGVkIHRvIGxvY2F0
aW9ucy4KLQotICAgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhyb3VnaCBzZXBhcmF0ZSBwb2lu
dGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdwotICAgICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNl
d2hlcmUuICAqLwotCi0gICAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KLSAgICB5eXR5cGVfaW50
MTYgeXlzc2FbWVlJTklUREVQVEhdOwotICAgIHl5dHlwZV9pbnQxNiAqeXlzczsKLSAgICB5eXR5
cGVfaW50MTYgKnl5c3NwOwotCi0gICAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAgKi8K
LSAgICBZWVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKLSAgICBZWVNUWVBFICp5eXZzOwotICAg
IFlZU1RZUEUgKnl5dnNwOwotCi0gICAgLyogVGhlIGxvY2F0aW9uIHN0YWNrLiAgKi8KLSAgICBZ
WUxUWVBFIHl5bHNhW1lZSU5JVERFUFRIXTsKLSAgICBZWUxUWVBFICp5eWxzOwotICAgIFlZTFRZ
UEUgKnl5bHNwOwotCi0gICAgLyogVGhlIGxvY2F0aW9ucyB3aGVyZSB0aGUgZXJyb3Igc3RhcnRl
ZCBhbmQgZW5kZWQuICAqLwotICAgIFlZTFRZUEUgeXllcnJvcl9yYW5nZVszXTsKLQotICAgIFlZ
U0laRV9UIHl5c3RhY2tzaXplOwotCi0gIGludCB5eW47Ci0gIGludCB5eXJlc3VsdDsKLSAgLyog
TG9va2FoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIu
ICAqLwotICBpbnQgeXl0b2tlbiA9IDA7Ci0gIC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1
cm4gc2VtYW50aWMgdmFsdWUgYW5kIGxvY2F0aW9uIGZyb20gdGhlCi0gICAgIGFjdGlvbiByb3V0
aW5lcy4gICovCi0gIFlZU1RZUEUgeXl2YWw7Ci0gIFlZTFRZUEUgeXlsb2M7Ci0KLSNpZiBZWUVS
Uk9SX1ZFUkJPU0UKLSAgLyogQnVmZmVyIGZvciBlcnJvciBtZXNzYWdlcywgYW5kIGl0cyBhbGxv
Y2F0ZWQgc2l6ZS4gICovCi0gIGNoYXIgeXltc2didWZbMTI4XTsKLSAgY2hhciAqeXltc2cgPSB5
eW1zZ2J1ZjsKLSAgWVlTSVpFX1QgeXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7Ci0jZW5k
aWYKLQotI2RlZmluZSBZWVBPUFNUQUNLKE4pICAgKHl5dnNwIC09IChOKSwgeXlzc3AgLT0gKE4p
LCB5eWxzcCAtPSAoTikpCi0KLSAgLyogVGhlIG51bWJlciBvZiBzeW1ib2xzIG9uIHRoZSBSSFMg
b2YgdGhlIHJlZHVjZWQgcnVsZS4KLSAgICAgS2VlcCB0byB6ZXJvIHdoZW4gbm8gc3ltYm9sIHNo
b3VsZCBiZSBwb3BwZWQuICAqLwotICBpbnQgeXlsZW4gPSAwOwotCi0gIHl5c3NwID0geXlzcyA9
IHl5c3NhOwotICB5eXZzcCA9IHl5dnMgPSB5eXZzYTsKLSAgeXlsc3AgPSB5eWxzID0geXlsc2E7
Ci0gIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7Ci0KLSAgWVlEUFJJTlRGICgoc3RkZXJyLCAi
U3RhcnRpbmcgcGFyc2VcbiIpKTsKLQotICB5eXN0YXRlID0gMDsKLSAgeXllcnJzdGF0dXMgPSAw
OwotICB5eW5lcnJzID0gMDsKLSAgeXljaGFyID0gWVlFTVBUWTsgLyogQ2F1c2UgYSB0b2tlbiB0
byBiZSByZWFkLiAgKi8KLSAgeXlsc3BbMF0gPSB5eWxsb2M7Ci0gIGdvdG8geXlzZXRzdGF0ZTsK
LQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0uCi18IHl5bmV3c3RhdGUgLS0gUHVzaCBhIG5ldyBzdGF0ZSwgd2hpY2ggaXMgZm91
bmQgaW4geXlzdGF0ZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotIHl5bmV3c3RhdGU6Ci0gIC8qIEluIGFsbCBjYXNl
cywgd2hlbiB5b3UgZ2V0IGhlcmUsIHRoZSB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2tzCi0gICAg
IGhhdmUganVzdCBiZWVuIHB1c2hlZC4gIFNvIHB1c2hpbmcgYSBzdGF0ZSBoZXJlIGV2ZW5zIHRo
ZSBzdGFja3MuICAqLwotICB5eXNzcCsrOwotCi0geXlzZXRzdGF0ZToKLSAgKnl5c3NwID0geXlz
dGF0ZTsKLQotICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkKLSAgICB7Ci0g
ICAgICAvKiBHZXQgdGhlIGN1cnJlbnQgdXNlZCBzaXplIG9mIHRoZSB0aHJlZSBzdGFja3MsIGlu
IGVsZW1lbnRzLiAgKi8KLSAgICAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5c3NwIC0geXlzcyArIDE7
Ci0KLSNpZmRlZiB5eW92ZXJmbG93Ci0gICAgICB7Ci0JLyogR2l2ZSB1c2VyIGEgY2hhbmNlIHRv
IHJlYWxsb2NhdGUgdGhlIHN0YWNrLiAgVXNlIGNvcGllcyBvZgotCSAgIHRoZXNlIHNvIHRoYXQg
dGhlICYncyBkb24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8KLQkgICBtZW1vcnkuICAqLwot
CVlZU1RZUEUgKnl5dnMxID0geXl2czsKLQl5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKLQlZ
WUxUWVBFICp5eWxzMSA9IHl5bHM7Ci0KLQkvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBp
cyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKLQkgICBkYXRhIGluIHVzZSBpbiB0aGF0IHN0
YWNrLCBpbiBieXRlcy4gIFRoaXMgdXNlZCB0byBiZSBhCi0JICAgY29uZGl0aW9uYWwgYXJvdW5k
IGp1c3QgdGhlIHR3byBleHRyYSBhcmdzLCBidXQgdGhhdCBtaWdodAotCSAgIGJlIHVuZGVmaW5l
ZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLwotCXl5b3ZlcmZsb3cgKFlZXygibWVtb3J5
IGV4aGF1c3RlZCIpLAotCQkgICAgJnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCksCi0J
CSAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKLQkJICAgICZ5eWxzMSwgeXlz
aXplICogc2l6ZW9mICgqeXlsc3ApLAotCQkgICAgJnl5c3RhY2tzaXplKTsKLQotCXl5bHMgPSB5
eWxzMTsKLQl5eXNzID0geXlzczE7Ci0JeXl2cyA9IHl5dnMxOwotICAgICAgfQotI2Vsc2UgLyog
bm8geXlvdmVyZmxvdyAqLwotIyBpZm5kZWYgWVlTVEFDS19SRUxPQ0FURQotICAgICAgZ290byB5
eWV4aGF1c3RlZGxhYjsKLSMgZWxzZQotICAgICAgLyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3du
IHdheS4gICovCi0gICAgICBpZiAoWVlNQVhERVBUSCA8PSB5eXN0YWNrc2l6ZSkKLQlnb3RvIHl5
ZXhoYXVzdGVkbGFiOwotICAgICAgeXlzdGFja3NpemUgKj0gMjsKLSAgICAgIGlmIChZWU1BWERF
UFRIIDwgeXlzdGFja3NpemUpCi0JeXlzdGFja3NpemUgPSBZWU1BWERFUFRIOwotCi0gICAgICB7
Ci0JeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7Ci0JdW5pb24geXlhbGxvYyAqeXlwdHIgPQot
CSAgKHVuaW9uIHl5YWxsb2MgKikgWVlTVEFDS19BTExPQyAoWVlTVEFDS19CWVRFUyAoeXlzdGFj
a3NpemUpKTsKLQlpZiAoISB5eXB0cikKLQkgIGdvdG8geXlleGhhdXN0ZWRsYWI7Ci0JWVlTVEFD
S19SRUxPQ0FURSAoeXlzc19hbGxvYywgeXlzcyk7Ci0JWVlTVEFDS19SRUxPQ0FURSAoeXl2c19h
bGxvYywgeXl2cyk7Ci0JWVlTVEFDS19SRUxPQ0FURSAoeXlsc19hbGxvYywgeXlscyk7Ci0jICB1
bmRlZiBZWVNUQUNLX1JFTE9DQVRFCi0JaWYgKHl5c3MxICE9IHl5c3NhKQotCSAgWVlTVEFDS19G
UkVFICh5eXNzMSk7Ci0gICAgICB9Ci0jIGVuZGlmCi0jZW5kaWYgLyogbm8geXlvdmVyZmxvdyAq
LwotCi0gICAgICB5eXNzcCA9IHl5c3MgKyB5eXNpemUgLSAxOwotICAgICAgeXl2c3AgPSB5eXZz
ICsgeXlzaXplIC0gMTsKLSAgICAgIHl5bHNwID0geXlscyArIHl5c2l6ZSAtIDE7Ci0KLSAgICAg
IFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKLQkJ
ICAodW5zaWduZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7Ci0KLSAgICAgIGlmICh5eXNzICsg
eXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQotCVlZQUJPUlQ7Ci0gICAgfQotCi0gIFlZRFBSSU5U
RiAoKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7Ci0KLSAgaWYgKHl5
c3RhdGUgPT0gWVlGSU5BTCkKLSAgICBZWUFDQ0VQVDsKLQotICBnb3RvIHl5YmFja3VwOwotCi0v
Ki0tLS0tLS0tLS0tLgotfCB5eWJhY2t1cC4gIHwKLWAtLS0tLS0tLS0tLSovCi15eWJhY2t1cDoK
LQotICAvKiBEbyBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRl
LiAgUmVhZCBhCi0gICAgIGxvb2thaGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3Qg
YWxyZWFkeSBoYXZlIG9uZS4gICovCi0KLSAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRv
IGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2thaGVhZCB0b2tlbi4gICovCi0gIHl5biA9IHl5
cGFjdFt5eXN0YXRlXTsKLSAgaWYgKHl5cGFjdF92YWx1ZV9pc19kZWZhdWx0ICh5eW4pKQotICAg
IGdvdG8geXlkZWZhdWx0OwotCi0gIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rYWhlYWQgdG9r
ZW4gaWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCi0KLSAgLyogWVlDSEFSIGlzIGVpdGhl
ciBZWUVNUFRZIG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9va2FoZWFkIHN5bWJvbC4gICovCi0gIGlm
ICh5eWNoYXIgPT0gWVlFTVBUWSkKLSAgICB7Ci0gICAgICBZWURQUklOVEYgKChzdGRlcnIsICJS
ZWFkaW5nIGEgdG9rZW46ICIpKTsKLSAgICAgIHl5Y2hhciA9IFlZTEVYOwotICAgIH0KLQotICBp
ZiAoeXljaGFyIDw9IFlZRU9GKQotICAgIHsKLSAgICAgIHl5Y2hhciA9IHl5dG9rZW4gPSBZWUVP
RjsKLSAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIk5vdyBhdCBlbmQgb2YgaW5wdXQuXG4iKSk7
Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNo
YXIpOwotICAgICAgWVlfU1lNQk9MX1BSSU5UICgiTmV4dCB0b2tlbiBpcyIsIHl5dG9rZW4sICZ5
eWx2YWwsICZ5eWxsb2MpOwotICAgIH0KLQotICAvKiBJZiB0aGUgcHJvcGVyIGFjdGlvbiBvbiBz
ZWVpbmcgdG9rZW4gWVlUT0tFTiBpcyB0byByZWR1Y2Ugb3IgdG8KLSAgICAgZGV0ZWN0IGFuIGVy
cm9yLCB0YWtlIHRoYXQgYWN0aW9uLiAgKi8KLSAgeXluICs9IHl5dG9rZW47Ci0gIGlmICh5eW4g
PCAwIHx8IFlZTEFTVCA8IHl5biB8fCB5eWNoZWNrW3l5bl0gIT0geXl0b2tlbikKLSAgICBnb3Rv
IHl5ZGVmYXVsdDsKLSAgeXluID0geXl0YWJsZVt5eW5dOwotICBpZiAoeXluIDw9IDApCi0gICAg
ewotICAgICAgaWYgKHl5dGFibGVfdmFsdWVfaXNfZXJyb3IgKHl5bikpCi0gICAgICAgIGdvdG8g
eXllcnJsYWI7Ci0gICAgICB5eW4gPSAteXluOwotICAgICAgZ290byB5eXJlZHVjZTsKLSAgICB9
Ci0KLSAgLyogQ291bnQgdG9rZW5zIHNoaWZ0ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0
dXJuIG9mZiBlcnJvcgotICAgICBzdGF0dXMuICAqLwotICBpZiAoeXllcnJzdGF0dXMpCi0gICAg
eXllcnJzdGF0dXMtLTsKLQotICAvKiBTaGlmdCB0aGUgbG9va2FoZWFkIHRva2VuLiAgKi8KLSAg
WVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsK
LQotICAvKiBEaXNjYXJkIHRoZSBzaGlmdGVkIHRva2VuLiAgKi8KLSAgeXljaGFyID0gWVlFTVBU
WTsKLQotICB5eXN0YXRlID0geXluOwotICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9C
RUdJTgotICAqKyt5eXZzcCA9IHl5bHZhbDsKLSAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTEla
RURfRU5ECi0gICorK3l5bHNwID0geXlsbG9jOwotICBnb3RvIHl5bmV3c3RhdGU7Ci0KLQotLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS4KLXwgeXlkZWZhdWx0IC0tIGRvIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgdGhlIGN1cnJlbnQg
c3RhdGUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLwoteXlkZWZhdWx0OgotICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsK
LSAgaWYgKHl5biA9PSAwKQotICAgIGdvdG8geXllcnJsYWI7Ci0gIGdvdG8geXlyZWR1Y2U7Ci0K
LQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlyZWR1Y2UgLS0gRG8gYSBy
ZWR1Y3Rpb24uICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXlyZWR1Y2U6
Ci0gIC8qIHl5biBpcyB0aGUgbnVtYmVyIG9mIGEgcnVsZSB0byByZWR1Y2Ugd2l0aC4gICovCi0g
IHl5bGVuID0geXlyMlt5eW5dOwotCi0gIC8qIElmIFlZTEVOIGlzIG5vbnplcm8sIGltcGxlbWVu
dCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYWN0aW9uOgotICAgICBgJCQgPSAkMScuCi0KLSAg
ICAgT3RoZXJ3aXNlLCB0aGUgZm9sbG93aW5nIGxpbmUgc2V0cyBZWVZBTCB0byBnYXJiYWdlLgot
ICAgICBUaGlzIGJlaGF2aW9yIGlzIHVuZG9jdW1lbnRlZCBhbmQgQmlzb24KLSAgICAgdXNlcnMg
c2hvdWxkIG5vdCByZWx5IHVwb24gaXQuICBBc3NpZ25pbmcgdG8gWVlWQUwKLSAgICAgdW5jb25k
aXRpb25hbGx5IG1ha2VzIHRoZSBwYXJzZXIgYSBiaXQgc21hbGxlciwgYW5kIGl0IGF2b2lkcyBh
Ci0gICAgIEdDQyB3YXJuaW5nIHRoYXQgWVlWQUwgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZC4g
ICovCi0gIHl5dmFsID0geXl2c3BbMS15eWxlbl07Ci0KLSAgLyogRGVmYXVsdCBsb2NhdGlvbi4g
ICovCi0gIFlZTExPQ19ERUZBVUxUICh5eWxvYywgKHl5bHNwIC0geXlsZW4pLCB5eWxlbik7Ci0g
IFlZX1JFRFVDRV9QUklOVCAoeXluKTsKLSAgc3dpdGNoICh5eW4pCi0gICAgewotICAgICAgICBj
YXNlIDQ6Ci0KLSAgICB7Ci0gICAgICAgIC8vIFRoZSBzeW1ib2wgdGFibGUgc2VhcmNoIHdhcyBk
b25lIGluIHRoZSBsZXhpY2FsIHBoYXNlCi0gICAgICAgIGNvbnN0IFRTeW1ib2wqIHN5bWJvbCA9
ICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3ltYm9sOwotICAgICAgICBjb25zdCBUVmFyaWFibGUq
IHZhcmlhYmxlOwotICAgICAgICBpZiAoc3ltYm9sID09IDApIHsKLSAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciIsICh5
eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIFRUeXBlIHR5cGUoRWJ0RmxvYXQsIEVicFVuZGVm
aW5lZCk7Ci0gICAgICAgICAgICBUVmFyaWFibGUqIGZha2VWYXJpYWJsZSA9IG5ldyBUVmFyaWFi
bGUoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcsIHR5cGUpOwotICAgICAgICAgICAgY29u
dGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCpmYWtlVmFyaWFibGUpOwotICAgICAgICAgICAgdmFy
aWFibGUgPSBmYWtlVmFyaWFibGU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBU
aGlzIGlkZW50aWZpZXIgY2FuIG9ubHkgYmUgYSB2YXJpYWJsZSB0eXBlIHN5bWJvbAotICAgICAg
ICAgICAgaWYgKCEgc3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSksICJ2YXJpYWJsZSBleHBlY3RlZCIsICh5eXZz
cFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKLQotICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKHZhcmlhYmxlLT5n
ZXROYW1lKCkpICYmCi0gICAgICAgICAgICAgICAgIXZhcmlhYmxlLT5nZXRFeHRlbnNpb24oKS5l
bXB0eSgpICYmCi0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjaygo
eXlsc3BbKDEpIC0gKDEpXSksIHZhcmlhYmxlLT5nZXRFeHRlbnNpb24oKSkpIHsKLSAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBkb24ndCBkZWxldGUgJDEuc3RyaW5nLCBpdCdzIHVzZWQgYnkgZXJyb3IgcmVj
b3ZlcnksIGFuZCB0aGUgcG9vbAotICAgICAgICAvLyBwb3Agd2lsbCByZWNsYWltIHRoZSBtZW1v
cnkKLQotICAgICAgICBpZiAodmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBF
dnFDb25zdCApIHsKLSAgICAgICAgICAgIENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSB2YXJp
YWJsZS0+Z2V0Q29uc3RQb2ludGVyKCk7Ci0gICAgICAgICAgICBUVHlwZSB0KHZhcmlhYmxlLT5n
ZXRUeXBlKCkpOwotICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24oY29uc3RBcnJheSwgdCwgKHl5
bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZh
cmlhYmxlLT5nZXRVbmlxdWVJZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXROYW1lKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXlsc3BbKDEpIC0g
KDEpXSkpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDU6Ci0KLSAgICB7Ci0gICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDY6Ci0KLSAg
ICB7Ci0gICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlv
blsxXTsKLSAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KCh5eXZzcFsoMSkgLSAoMSldLmxl
eCkuaSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwg
RWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgfQotICAg
IGJyZWFrOwotCi0gIGNhc2UgNzoKLQotICAgIHsKLSAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5p
b25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICB1bmlvbkFycmF5LT5zZXRG
Q29uc3QoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5mKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24o
dW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXls
c3BbKDEpIC0gKDEpXSkpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDg6Ci0KLSAgICB7
Ci0gICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsx
XTsKLSAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KCh5eXZzcFsoMSkgLSAoMSldLmxleCku
Yik7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVi
cFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgIH0KLSAgICBi
cmVhazsKLQotICBjYXNlIDk6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9ICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwot
ICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDEwOgotCi0gICAgewotICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMToKLQotICAgIHsKLSAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+YWRkSW5kZXhF
eHByZXNzaW9uKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXls
c3BbKDIpIC0gKDQpXSksICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
KTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMjoKLQotICAgIHsKLSAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTM6Ci0KLSAgICB7
Ci0gICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
aXNBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDMpIC0gKDMp
XSksICJjYW5ub3QgYXBwbHkgZG90IG9wZXJhdG9yIHRvIGFuIGFycmF5IiwgIi4iKTsKLSAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNWZWN0b3IoKSkgewotICAg
ICAgICAgICAgVFZlY3RvckZpZWxkcyBmaWVsZHM7Ci0gICAgICAgICAgICBpZiAoISBjb250ZXh0
LT5wYXJzZVZlY3RvckZpZWxkcygqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcsICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXROb21pbmFsU2l6ZSgpLCBm
aWVsZHMsICh5eWxzcFsoMykgLSAoMyldKSkpIHsKLSAgICAgICAgICAgICAgICBmaWVsZHMubnVt
ID0gMTsKLSAgICAgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1swXSA9IDA7Ci0gICAgICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5n
ZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgeyAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2ZWN0
b3IgZmllbGRzCi0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gY29udGV4dC0+YWRkQ29uc3RWZWN0b3JOb2RlKGZpZWxkcywgKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMykgLSAoMyldKSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRU
eXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRC
YXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dFByZWNpc2lvbigpLCBFdnFDb25zdCwgKGludCkgKCooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0
cmluZykuc2l6ZSgpKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFRT
dHJpbmcgdmVjdG9yU3RyaW5nID0gKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nOwotICAg
ICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkU3dpenpsZShmaWVsZHMsICh5eWxzcFsoMykgLSAoMyldKSk7Ci0gICAgICAgICAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZEluZGV4KEVPcFZlY3RvclN3aXp6bGUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLCBpbmRleCwgKHl5bHNwWygyKSAtICgzKV0pKTsKLSAgICAgICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBv
cmFyeSwgKGludCkgdmVjdG9yU3RyaW5nLnNpemUoKSkpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5p
c01hdHJpeCgpKSB7Ci0gICAgICAgICAgICBUTWF0cml4RmllbGRzIGZpZWxkczsKLSAgICAgICAg
ICAgIGlmICghIGNvbnRleHQtPnBhcnNlTWF0cml4RmllbGRzKCooeXl2c3BbKDMpIC0gKDMpXS5s
ZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dE5vbWluYWxTaXplKCksIGZpZWxkcywgKHl5bHNwWygzKSAtICgzKV0pKSkgewotICAgICAgICAg
ICAgICAgIGZpZWxkcy53aG9sZVJvdyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGZpZWxkcy53
aG9sZUNvbCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGZpZWxkcy5yb3cgPSAwOwotICAgICAg
ICAgICAgICAgIGZpZWxkcy5jb2wgPSAwOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGZpZWxkcy53aG9sZVJvdyB8
fCBmaWVsZHMud2hvbGVDb2wpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXls
c3BbKDIpIC0gKDMpXSksICIgbm9uLXNjYWxhciBmaWVsZHMgbm90IGltcGxlbWVudGVkIHlldCIs
ICIuIik7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAg
ICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAg
ICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoMCk7Ci0gICAgICAgICAgICAgICAg
VEludGVybVR5cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVu
aW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5
eWxzcFsoMykgLSAoMyldKSk7Ci0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0
LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eWxz
cFsoMikgLSAoMyldKSk7Ci0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5zZXRUeXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5nZXRCYXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldFByZWNpc2lvbigpLEV2cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxTaXplKCkpKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25z
dChmaWVsZHMuY29sICogKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldE5vbWluYWxTaXplKCkgKyBmaWVsZHMucm93KTsKLSAgICAgICAgICAgICAgICBUSW50ZXJt
VHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5p
b25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygz
KSAtICgzKV0pKTsKLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5bHNwWygyKSAt
ICgzKV0pKTsKLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+Z2V0UHJlY2lzaW9uKCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICgo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCkg
PT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgICAgICBib29sIGZpZWxkRm91bmQgPSBmYWxzZTsKLSAg
ICAgICAgICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9ICh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCktPmZpZWxkcygpOwot
ICAgICAgICAgICAgdW5zaWduZWQgaW50IGk7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwg
ZmllbGRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZpZWxkc1tpXS0+bmFt
ZSgpID09ICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZykgewotICAgICAgICAgICAgICAg
ICAgICBmaWVsZEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZpZWxkRm91bmQp
IHsKLSAgICAgICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgewotICAgICAg
ICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5h
ZGRDb25zdFN0cnVjdCgqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKCpmaWVsZHNbaV0tPnR5cGUoKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UgdGhlIHF1YWxpZmllciBvZiB0aGUg
cmV0dXJuIHR5cGUsIG5vdCBvZiB0aGUgc3RydWN0dXJlIGZpZWxkCi0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBhcyB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24gaXMgc2hhcmVkIGJldHdlZW4g
dmFyaW91cyBzdHJ1Y3R1cmVzLgotICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlUG9pbnRlcigpLT5zZXRRdWFsaWZpZXIoRXZxQ29u
c3QpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFu
dFVuaW9uWzFdOwotICAgICAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoaSk7
Ci0gICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCAqZmllbGRzW2ldLT50eXBlKCks
ICh5eWxzcFsoMykgLSAoMyldKSk7Ci0gICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRl
eERpcmVjdFN0cnVjdCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
IGluZGV4LCAoeXlsc3BbKDIpIC0gKDMpXSkpOwotICAgICAgICAgICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIiBubyBzdWNoIGZpZWxkIGluIHN0cnVj
dHVyZSIsICh5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICIgZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVz
IHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24gbGVmdCBoYW5kIHNpZGUiLCAoeXl2c3Bb
KDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICAgICAgfQotICAg
ICAgICAvLyBkb24ndCBkZWxldGUgJDMuc3RyaW5nLCBpdCdzIGZyb20gdGhlIHBvb2wKLSAgICB9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNDoKLQotICAgIHsKLSAgICAgICAgaWYgKGNvbnRleHQt
PmxWYWx1ZUVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgyKV0pLCAiKysiLCAoeXl2c3BbKDEpIC0g
KDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdEluY3JlbWVudCwgKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMildKSwgY29udGV4
dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcigoeXlsc3BbKDIp
IC0gKDIpXSksICIrKyIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkg
LSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgMTU6Ci0KLSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVF
cnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgIi0tIiwgKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSkpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFBvc3REZWNyZW1lbnQsICh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDIpXSksIGNvbnRleHQtPnN5bWJv
bFRhYmxlKTsKLSAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAw
KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgyKV0p
LCAiLS0iLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29t
cGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDIpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLQot
ICBjYXNlIDE2OgotCi0gICAgewotICAgICAgICBpZiAoY29udGV4dC0+aW50ZWdlckVycm9yQ2hl
Y2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICJbXSIpKQotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsK
LSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNzoKLQotICAgIHsKLSAgICAgICAgVEZ1bmN0
aW9uKiBmbkNhbGwgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmZ1bmN0aW9uOwotICAgICAg
ICBUT3BlcmF0b3Igb3AgPSBmbkNhbGwtPmdldEJ1aWx0SW5PcCgpOwotCi0gICAgICAgIGlmIChv
cCAhPSBFT3BOdWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8g
VGhlbiB0aGlzIHNob3VsZCBiZSBhIGNvbnN0cnVjdG9yLgotICAgICAgICAgICAgLy8gRG9uJ3Qg
Z28gdGhyb3VnaCB0aGUgc3ltYm9sIHRhYmxlIGZvciBjb25zdHJ1Y3RvcnMuCi0gICAgICAgICAg
ICAvLyBUaGVpciBwYXJhbWV0ZXJzIHdpbGwgYmUgdmVyaWZpZWQgYWxnb3JpdGhtaWNhbGx5Lgot
ICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZp
bmVkKTsgIC8vIHVzZSB0aGlzIHRvIGdldCB0aGUgdHlwZSBiYWNrCi0gICAgICAgICAgICBpZiAo
Y29udGV4dC0+Y29uc3RydWN0b3JFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCAqZm5DYWxsLCBvcCwgJnR5cGUpKSB7Ci0g
ICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gMDsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAvLyBJ
dCdzIGEgY29uc3RydWN0b3IsIG9mIHR5cGUgJ3R5cGUnLgotICAgICAgICAgICAgICAgIC8vCi0g
ICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
YWRkQ29uc3RydWN0b3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCAmdHlw
ZSwgb3AsIGZuQ2FsbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7Ci0gICAg
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdh
dGVPcGVyYXRvcigwLCBvcCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZSh0eXBlKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBOb3QgYSBj
b25zdHJ1Y3Rvci4gIEZpbmQgaXQgaW4gdGhlIHN5bWJvbCB0YWJsZS4KLSAgICAgICAgICAgIC8v
Ci0gICAgICAgICAgICBjb25zdCBURnVuY3Rpb24qIGZuQ2FuZGlkYXRlOwotICAgICAgICAgICAg
Ym9vbCBidWlsdEluOwotICAgICAgICAgICAgZm5DYW5kaWRhdGUgPSBjb250ZXh0LT5maW5kRnVu
Y3Rpb24oKHl5bHNwWygxKSAtICgxKV0pLCBmbkNhbGwsICZidWlsdEluKTsKLSAgICAgICAgICAg
IGlmIChmbkNhbmRpZGF0ZSkgewotICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAg
Ly8gQSBkZWNsYXJlZCBmdW5jdGlvbi4KLSAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAg
ICAgIGlmIChidWlsdEluICYmICFmbkNhbmRpZGF0ZS0+Z2V0RXh0ZW5zaW9uKCkuZW1wdHkoKSAm
JgotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCh5eWxz
cFsoMSkgLSAoMSldKSwgZm5DYW5kaWRhdGUtPmdldEV4dGVuc2lvbigpKSkgewotICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIG9wID0gZm5DYW5kaWRhdGUtPmdldEJ1aWx0SW5PcCgpOwotICAgICAgICAgICAg
ICAgIGlmIChidWlsdEluICYmIG9wICE9IEVPcE51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAg
Ly8KLSAgICAgICAgICAgICAgICAgICAgLy8gQSBmdW5jdGlvbiBjYWxsIG1hcHBlZCB0byBhIGJ1
aWx0LWluIG9wZXJhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGZuQ2FuZGlkYXRlLT5nZXRQYXJhbUNvdW50KCkgPT0gMSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyZWF0IGl0IGxp
a2UgYSBidWlsdC1pbiB1bmFyeSBvcGVyYXRvci4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
Ci0gICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKG9wLCAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0pLmludGVybU5vZGUsICh5eWxzcFsoMSkgLSAoMSldKSwgY29udGV4dC0+c3ltYm9s
VGFibGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9PSAwKSAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3Ry
aW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
eHRyYUluZm9TdHJlYW0gPDwgImJ1aWx0IGluIHVuYXJ5IG9wZXJhdG9yIGZ1bmN0aW9uLiAgVHlw
ZTogIiA8PCBzdGF0aWNfY2FzdDxUSW50ZXJtVHlwZWQqPigoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0pLmludGVybU5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0pLmludGVybU5vZGUtPmdldExpbmUoKSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUi
LCAiSW50ZXJuYWwgRXJyb3IiLCBleHRyYUluZm8uY19zdHIoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgWVlFUlJPUjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVP
cGVyYXRvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSwgb3AsICh5
eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgcmVhbCBmdW5jdGlv
biBjYWxsCi0KLSAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKCh5eXZzcFso
MSkgLSAoMSldLmludGVybSkuaW50ZXJtQWdncmVnYXRlLCBFT3BGdW5jdGlvbkNhbGwsICh5eWxz
cFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+c2V0VHlwZShmbkNhbmRpZGF0ZS0+Z2V0UmV0dXJuVHlwZSgpKTsKLQotICAg
ICAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGhvdyB3ZSBrbm93IHdoZXRoZXIgdGhlIGdpdmVu
IGZ1bmN0aW9uIGlzIGEgYnVpbHRJbiBmdW5jdGlvbiBvciBhIHVzZXIgZGVmaW5lZCBmdW5jdGlv
bgotICAgICAgICAgICAgICAgICAgICAvLyBpZiBidWlsdEluID09IGZhbHNlLCBpdCdzIGEgdXNl
ckRlZmluZWQgLT4gY291bGQgYmUgYW4gb3ZlcmxvYWRlZCBidWlsdEluIGZ1bmN0aW9uIGFsc28K
LSAgICAgICAgICAgICAgICAgICAgLy8gaWYgYnVpbHRJbiA9PSB0cnVlLCBpdCdzIGRlZmluaXRl
bHkgYSBidWlsdEluIGZ1bmN0aW9uIHdpdGggRU9wTnVsbAotICAgICAgICAgICAgICAgICAgICBp
ZiAoIWJ1aWx0SW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNldFVzZXJEZWZpbmVkKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNBZ2dyZWdh
dGUoKS0+c2V0TmFtZShmbkNhbmRpZGF0ZS0+Z2V0TWFuZ2xlZE5hbWUoKSk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgVFF1YWxpZmllciBxdWFsOwotICAgICAgICAgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGZuQ2FuZGlkYXRlLT5nZXRQYXJhbUNvdW50KCk7ICsraSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgcXVhbCA9IGZuQ2FuZGlkYXRlLT5nZXRQYXJhbShpKS50eXBl
LT5nZXRRdWFsaWZpZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdWFsID09IEV2
cU91dCB8fCBxdWFsID09IEV2cUluT3V0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRMaW5lKCksICJhc3NpZ24iLCAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldEFzQWdncmVnYXRlKCktPmdldFNlcXVlbmNlKClbaV0tPmdldEFzVHlwZWQoKSkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCksICJDb25zdGFudCB2YWx1ZSBjYW5u
b3QgYmUgcGFzc2VkIGZvciAnb3V0JyBvciAnaW5vdXQnIHBhcmFtZXRlcnMuIiwgIkVycm9yIik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKGZuQ2FuZGlkYXRlLT5nZXRS
ZXR1cm5UeXBlKCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBl
cnJvciBtZXNzYWdlIHdhcyBwdXQgb3V0IGJ5IFBhRmluZEZ1bmN0aW9uKCkKLSAgICAgICAgICAg
ICAgICAvLyBQdXQgb24gYSBkdW1teSBub2RlIGZvciBlcnJvciByZWNvdmVyeQotICAgICAgICAg
ICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsK
LSAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3QoMC4wZik7Ci0gICAgICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVm
aW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBkZWxl
dGUgZm5DYWxsOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE4OgotCi0gICAgewotICAg
ICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybSk7Ci0gICAgfQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgMTk6Ci0KLSAgICB7Ci0gICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eWxzcFsoMykgLSAoMyldKSwgIm1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQiLCAiIik7Ci0g
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2
c3BbKDMpIC0gKDMpXS5pbnRlcm0pOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDIwOgot
Ci0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVy
bSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjE6Ci0KLSAgICB7Ci0gICAgICAgICh5
eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKTsKLSAgICB9Ci0gICAgYnJl
YWs7Ci0KLSAgY2FzZSAyMjoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rp
b24gPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pOwotICAgICAgICAoeXl2YWwu
aW50ZXJtKS5pbnRlcm1Ob2RlID0gMDsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyMzoK
LQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0uZnVuY3Rpb24pOwotICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1Ob2Rl
ID0gMDsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyNDoKLQotICAgIHsKLSAgICAgICAg
VFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBlKCh5eXZzcFsoMikgLSAoMildLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkpIH07Ci0gICAgICAgICh5eXZzcFsoMSkgLSAo
MildLmludGVybS5mdW5jdGlvbiktPmFkZFBhcmFtZXRlcihwYXJhbSk7Ci0gICAgICAgICh5eXZh
bC5pbnRlcm0pLmZ1bmN0aW9uID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKTsK
LSAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtTm9kZSA9ICh5eXZzcFsoMikgLSAoMildLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDI1Ogot
Ci0gICAgewotICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUoKHl5dnNw
WygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKSkgfTsKLSAgICAg
ICAgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5mdW5jdGlvbi0+YWRkUGFyYW1ldGVyKHBhcmFt
KTsKLSAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0pLmZ1bmN0aW9uOwotICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1Ob2RlID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
KS5pbnRlcm1Ob2RlLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5bHNwWygyKSAtICgzKV0pKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyNjoKLQot
ICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0uZnVuY3Rpb24pOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDI3OgotCi0g
ICAgewotICAgICAgICAvLwotICAgICAgICAvLyBDb25zdHJ1Y3RvcgotICAgICAgICAvLwotICAg
ICAgICBUT3BlcmF0b3Igb3AgPSBFT3BOdWxsOwotICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLnR5cGUpLnVzZXJEZWYpIHsKLSAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0
U3RydWN0OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3dpdGNoICgoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSkgewotICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoK
LSAgICAgICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLm1hdHJp
eCkgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2goKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LnR5cGUpLnNpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0
cnVjdE1hdDI7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENv
bnN0cnVjdE1hdDM7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9IEVP
cENvbnN0cnVjdE1hdDQ7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCgoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0udHlwZSkuc2l6ZSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IG9w
ID0gRU9wQ29uc3RydWN0RmxvYXQ7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIDI6
IG9wID0gRU9wQ29uc3RydWN0VmVjMjsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNl
IDM6IG9wID0gRU9wQ29uc3RydWN0VmVjMzsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBj
YXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0VmVjNDsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAgICAgICAgICAgc3dpdGNoKCh5eXZzcFsoMSkgLSAoMSld
LmludGVybS50eXBlKS5zaXplKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAxOiBvcCA9IEVPcENv
bnN0cnVjdEludDsgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29u
c3RydWN0SVZlYzI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMzogb3AgPSBFT3BDb25z
dHJ1Y3RJVmVjMzsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0
cnVjdElWZWM0OyBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIEVidEJvb2w6Ci0gICAgICAgICAgICAgICAgc3dpdGNoKCh5
eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zaXplKSB7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSAxOiBvcCA9IEVPcENvbnN0cnVjdEJvb2w7ICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNl
IDI6IG9wID0gRU9wQ29uc3RydWN0QlZlYzI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ug
Mzogb3AgPSBFT3BDb25zdHJ1Y3RCVmVjMzsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSA0
OiBvcCA9IEVPcENvbnN0cnVjdEJWZWM0OyBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OiBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmIChvcCA9PSBFT3BOdWxsKSB7Ci0gICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0pLCAiY2Fubm90IGNvbnN0cnVjdCB0aGlz
IHR5cGUiLCBnZXRCYXNpY1N0cmluZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlw
ZSkpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAg
ICAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSA9IEVidEZsb2F0OwotICAgICAg
ICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgVFN0cmluZyB0ZW1wU3RyaW5nOwotICAgICAgICBUVHlwZSB0eXBlKCh5eXZz
cFsoMSkgLSAoMSldLmludGVybS50eXBlKSk7Ci0gICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24g
PSBuZXcgVEZ1bmN0aW9uKCZ0ZW1wU3RyaW5nLCB0eXBlLCBvcCk7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0uZnVuY3Rpb24pID0gZnVuY3Rpb247Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2Ug
Mjg6Ci0KLSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5
bHNwWygxKSAtICgxKV0pLCAqKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcpKQotICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBUVHlwZSB0eXBlKEVidFZvaWQsIEVi
cFVuZGVmaW5lZCk7Ci0gICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9u
KCh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLCB0eXBlKTsKLSAgICAgICAgKHl5dmFsLmlu
dGVybS5mdW5jdGlvbikgPSBmdW5jdGlvbjsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAy
OToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgfQotICAgIGJyZWFr
OwotCi0gIGNhc2UgMzA6Ci0KLSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJv
ckNoZWNrKCh5eWxzcFsoMSkgLSAoMildKSwgIisrIiwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSkpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkVW5hcnlNYXRoKEVPcFByZUluY3JlbWVudCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMSkgLSAoMildKSwgY29udGV4dC0+c3ltYm9sVGFi
bGUpOwotICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcigoeXlsc3BbKDEpIC0gKDIpXSksICIr
KyIsICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0
ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNh
c2UgMzE6Ci0KLSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCh5
eWxzcFsoMSkgLSAoMildKSwgIi0tIiwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSkpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5h
cnlNYXRoKEVPcFByZURlY3JlbWVudCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eWxzcFsoMSkgLSAoMildKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAg
ICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcigoeXlsc3BbKDEpIC0gKDIpXSksICItLSIsICh5eXZz
cFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygp
KTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzI6Ci0K
LSAgICB7Ci0gICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLm9wICE9IEVPcE51
bGwpIHsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5v
cCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMSkg
LSAoMildKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICAgICAgaWYgKCh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hh
ciogZXJyb3JPcCA9ICIiOwotICAgICAgICAgICAgICAgIHN3aXRjaCgoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0pLm9wKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZTogICBlcnJv
ck9wID0gIi0iOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6IGVy
cm9yT3AgPSAiISI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoKHl5
bHNwWygxKSAtICgyKV0pLCBlcnJvck9wLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwot
ICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDMzOgotCi0gICAgeyAoeXl2YWwuaW50ZXJtKS5v
cCA9IEVPcE51bGw7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDM0OgotCi0gICAgeyAoeXl2YWwu
aW50ZXJtKS5vcCA9IEVPcE5lZ2F0aXZlOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzNToKLQot
ICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BMb2dpY2FsTm90OyB9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSAzNjoKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KLSAgICBicmVhazsKLQot
ICBjYXNlIDM3OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BNdWwsICh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xU
YWJsZSk7Ci0gICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkg
ewotICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSks
ICIqIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBs
ZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFr
OwotCi0gIGNhc2UgMzg6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcERpdiwgKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5
bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAo
MyldKSwgIi8iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0
Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSAzOToKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KLSAgICBi
cmVhazsKLQotICBjYXNlIDQwOgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BBZGQs
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0
LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIp
IC0gKDMpXSksICIrIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgNDE6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVP
cFN1YiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFso
MykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNv
bnRleHQtPnN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxz
cFsoMikgLSAoMyldKSwgIi0iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0MjoKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7
IH0KLSAgICBicmVhazsKLQotICBjYXNlIDQzOgotCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsg
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDQ6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRo
KEVPcExlc3NUaGFuLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAo
MyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJy
b3IoKHl5bHNwWygyKSAtICgzKV0pLCAiPCIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5
ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29u
c3QoZmFsc2UpOwotICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUo
RWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMikgLSAoMyldKSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0NToKLQotICAgIHsKLSAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEJpbmFyeU1hdGgoRU9wR3JlYXRlclRoYW4sICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlm
ICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewotICAgICAgICAgICAgY29u
dGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICI+IiwgKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZz
cFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygp
KTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIENvbnN0YW50
VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgIHVu
aW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1
bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNw
WygyKSAtICgzKV0pKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDQ2
OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhhbkVxdWFsLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9s
VGFibGUpOwotICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDAp
IHsKLSAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0p
LCAiPD0iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29t
cGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
WzFdOwotICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5l
ZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwotICAgICAgICB9Ci0gICAgfQotICAg
IGJyZWFrOwotCi0gIGNhc2UgNDc6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdy
ZWF0ZXJUaGFuRXF1YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAt
ICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmICgoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BF
cnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICI+PSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFy
cmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRC
Q29uc3QoZmFsc2UpOwotICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5
cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMikgLSAoMyldKSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0ODoKLQotICAgIHsgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDQ5OgotCi0gICAgewotICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQmluYXJ5TWF0aChFT3BFcXVhbCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAo
eXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0
LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIj09IiwgKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFso
MykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIENvbnN0YW50VW5p
b24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgIHVuaW9u
QXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlv
bkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygy
KSAtICgzKV0pKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDUwOgot
Ci0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BOb3RFcXVhbCwgKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsK
LSAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIiE9Iiwg
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3Ry
aW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21w
bGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
ICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAg
ICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29u
c3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNv
bnN0KSwgKHl5bHNwWygyKSAtICgzKV0pKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsK
LQotICBjYXNlIDUxOgotCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgNTI6Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSA1MzoKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KLSAgICBicmVhazsKLQot
ICBjYXNlIDU0OgotCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQotICAgIGJyZWFrOwotCi0g
IGNhc2UgNTU6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxBbmQsICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5z
eW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0g
KDMpXSksICImJiIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50
VW5pb25bMV07Ci0gICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwotICAg
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5k
ZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMikgLSAoMyldKSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1NjoKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0K
LSAgICBicmVhazsKLQotICBjYXNlIDU3OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChF
T3BMb2dpY2FsWG9yLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAo
MyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJy
b3IoKHl5bHNwWygyKSAtICgzKV0pLCAiXl4iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJh
eSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNv
bnN0KGZhbHNlKTsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBl
KEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTg6Ci0KLSAgICB7ICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1OToKLQotICAgIHsKLSAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbE9yLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAo
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKLSAgICAgICAgICAgIGNvbnRl
eHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAifHwiLCAoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNw
WygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkp
OwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgQ29uc3RhbnRV
bmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgdW5p
b25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVu
aW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3Bb
KDIpIC0gKDMpXSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNjA6
Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA2MToK
LQotICAgIHsKLSAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2soKHl5bHNwWygyKSAt
ICg1KV0pLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCi0gICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFNlbGVjdGlvbigoeXl2c3Bb
KDEpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICg1KV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoNSkgLSAoNSldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDUpXSkpOwotICAgICAgICBpZiAoKHl5dnNwWygzKSAtICg1
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKSAhPSAoeXl2c3BbKDUpIC0gKDUp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpKQotICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gMDsKLQotICAgICAgICBpZiAoKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9w
RXJyb3IoKHl5bHNwWygyKSAtICg1KV0pLCAiOiIsICh5eXZzcFsoMykgLSAoNSldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDUpIC0gKDUpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDYyOgotCi0gICAgeyAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNjM6Ci0KLSAgICB7Ci0gICAgICAg
IGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMyldKSwgImFzc2ln
biIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKLSAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEFzc2lnbigoeXl2c3BbKDIpIC0gKDMp
XS5pbnRlcm0pLm9wLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAo
MyldKSk7Ci0gICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkg
ewotICAgICAgICAgICAgY29udGV4dC0+YXNzaWduRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAi
YXNzaWduIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENv
bXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgNjQ6Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wQXNzaWdu
OyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA2NToKLQotICAgIHsgKHl5dmFsLmludGVybSkub3Ag
PSBFT3BNdWxBc3NpZ247IH0KLSAgICBicmVhazsKLQotICBjYXNlIDY2OgotCi0gICAgeyAoeXl2
YWwuaW50ZXJtKS5vcCA9IEVPcERpdkFzc2lnbjsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNjc6
Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wQWRkQXNzaWduOyB9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSA2ODoKLQotICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BTdWJBc3NpZ247
IH0KLSAgICBicmVhazsKLQotICBjYXNlIDY5OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA3MDoKLQotICAgIHsKLSAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZENvbW1hKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2
c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0p
KTsKLSAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIiwi
LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVT
dHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENv
bXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygzKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSA3MToKLQotICAgIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPmNvbnN0RXJyb3JDaGVj
aygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCi0gICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgIH0K
LSAgICBicmVhazsKLQotICBjYXNlIDcyOgotCi0gICAgewotICAgICAgICBURnVuY3Rpb24gJmZ1
bmN0aW9uID0gKigoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmZ1bmN0aW9uKTsKLSAgICAgICAg
Ci0gICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUgKnByb3RvdHlwZSA9IG5ldyBUSW50ZXJtQWdncmVn
YXRlOwotICAgICAgICBwcm90b3R5cGUtPnNldFR5cGUoZnVuY3Rpb24uZ2V0UmV0dXJuVHlwZSgp
KTsKLSAgICAgICAgcHJvdG90eXBlLT5zZXROYW1lKGZ1bmN0aW9uLmdldE5hbWUoKSk7Ci0gICAg
ICAgIAotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uLmdldFBhcmFtQ291
bnQoKTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBUUGFyYW1ldGVyICZwYXJh
bSA9IGZ1bmN0aW9uLmdldFBhcmFtKGkpOwotICAgICAgICAgICAgaWYgKHBhcmFtLm5hbWUgIT0g
MCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUVmFyaWFibGUgdmFyaWFibGUocGFy
YW0ubmFtZSwgKnBhcmFtLnR5cGUpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IHByb3RvdHlwZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKHByb3RvdHlw
ZSwgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZS5nZXRVbmlxdWVJZCgp
LCB2YXJpYWJsZS5nZXROYW1lKCksIHZhcmlhYmxlLmdldFR5cGUoKSwgKHl5bHNwWygxKSAtICgy
KV0pKSwgKHl5bHNwWygxKSAtICgyKV0pKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcm90b3R5cGUgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShwcm90b3R5cGUsIGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRTeW1ib2woMCwgIiIsICpwYXJhbS50eXBlLCAoeXlsc3BbKDEpIC0gKDIpXSkpLCAoeXls
c3BbKDEpIC0gKDIpXSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBwcm90b3R5cGUtPnNldE9wKEVPcFByb3RvdHlwZSk7Ci0gICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSkgPSBwcm90b3R5cGU7Ci0KLSAgICAgICAgY29udGV4dC0+c3ltYm9sVGFi
bGUucG9wKCk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNzM6Ci0KLSAgICB7Ci0gICAg
ICAgIGlmICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSkKLSAgICAg
ICAgICAgICh5eXZzcFsoMSkgLSAoMildLmludGVybSkuaW50ZXJtQWdncmVnYXRlLT5zZXRPcChF
T3BEZWNsYXJhdGlvbik7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZTsKLSAgICB9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSA3NDoKLQotICAgIHsKLSAgICAgICAgaWYgKCgoeXl2c3BbKDIpIC0gKDQpXS5p
bnRlcm0ucHJlY2lzaW9uKSA9PSBFYnBIaWdoKSAmJiAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBT
SF9GUkFHTUVOVF9TSEFERVIpICYmICFjb250ZXh0LT5mcmFnbWVudFByZWNpc2lvbkhpZ2gpIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoNCldKSwgInByZWNpc2lv
biBpcyBub3Qgc3VwcG9ydGVkIGluIGZyYWdtZW50IHNoYWRlciIsICJoaWdocCIpOwotICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghY29udGV4
dC0+c3ltYm9sVGFibGUuc2V0RGVmYXVsdFByZWNpc2lvbiggKHl5dnNwWygzKSAtICg0KV0uaW50
ZXJtLnR5cGUpLCAoeXl2c3BbKDIpIC0gKDQpXS5pbnRlcm0ucHJlY2lzaW9uKSApKSB7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDQpXSksICJpbGxlZ2FsIHR5cGUg
YXJndW1lbnQgZm9yIGRlZmF1bHQgcHJlY2lzaW9uIHF1YWxpZmllciIsIGdldEJhc2ljU3RyaW5n
KCh5eXZzcFsoMykgLSAoNCldLmludGVybS50eXBlKS50eXBlKSk7Ci0gICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1O
b2RlKSA9IDA7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNzU6Ci0KLSAgICB7Ci0gICAg
ICAgIC8vCi0gICAgICAgIC8vIE11bHRpcGxlIGRlY2xhcmF0aW9ucyBvZiB0aGUgc2FtZSBmdW5j
dGlvbiBhcmUgYWxsb3dlZC4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGRl
ZmluaXRpb24sIHRoZSBkZWZpbml0aW9uIHByb2R1Y3Rpb24gY29kZSB3aWxsIGNoZWNrIGZvciBy
ZWRlZmluaXRpb25zCi0gICAgICAgIC8vICh3ZSBkb24ndCBrbm93IGF0IHRoaXMgcG9pbnQgaWYg
aXQncyBhIGRlZmluaXRpb24gb3Igbm90KS4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gUmVkZWNs
YXJhdGlvbnMgYXJlIGFsbG93ZWQuICBCdXQsIHJldHVybiB0eXBlcyBhbmQgcGFyYW1ldGVyIHF1
YWxpZmllcnMgbXVzdCBtYXRjaC4KLSAgICAgICAgLy8KLSAgICAgICAgVEZ1bmN0aW9uKiBwcmV2
RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9sVGFibGUuZmluZCgo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRNYW5nbGVkTmFtZSgpKSk7Ci0g
ICAgICAgIGlmIChwcmV2RGVjKSB7Ci0gICAgICAgICAgICBpZiAocHJldkRlYy0+Z2V0UmV0dXJu
VHlwZSgpICE9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFJldHVyblR5
cGUoKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMild
KSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSByZXR1cm4gdHlwZSIs
ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFJldHVyblR5cGUoKS5nZXRC
YXNpY1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZXZEZWMtPmdl
dFBhcmFtQ291bnQoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdldFBh
cmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpICE9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5m
dW5jdGlvbiktPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgIm92ZXJsb2FkZWQg
ZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSBwYXJhbWV0ZXIgcXVhbGlmaWVycyIsICh5eXZz
cFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxp
ZmllclN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8v
Ci0gICAgICAgIC8vIENoZWNrIGZvciBwcmV2aW91c2x5IGRlY2xhcmVkIHZhcmlhYmxlcyB1c2lu
ZyB0aGUgc2FtZSBuYW1lLgotICAgICAgICAvLwotICAgICAgICBUU3ltYm9sICpwcmV2U3ltID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuZmluZCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rp
b24pLT5nZXROYW1lKCkpOwotICAgICAgICBpZiAocHJldlN5bSkKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKCFwcmV2U3ltLT5pc0Z1bmN0aW9uKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgyKV0pLCAicmVkZWZpbml0aW9u
IiwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0TmFtZSgpLmNfc3RyKCks
ICJmdW5jdGlvbiIpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAg
IC8vIEluc2VydCB0aGUgdW5tYW5nbGVkIG5hbWUgdG8gZGV0ZWN0IHBvdGVudGlhbCBmdXR1cmUg
cmVkZWZpbml0aW9uIGFzIGEgdmFyaWFibGUuCi0gICAgICAgICAgICBjb250ZXh0LT5zeW1ib2xU
YWJsZS5nZXRPdXRlckxldmVsKCktPmluc2VydCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVu
Y3Rpb24pLT5nZXROYW1lKCksICooeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pKTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vCi0gICAgICAgIC8vIElmIHRoaXMgaXMgYSByZWRlY2xh
cmF0aW9uLCBpdCBjb3VsZCBhbHNvIGJlIGEgZGVmaW5pdGlvbiwKLSAgICAgICAgLy8gaW4gd2hp
Y2ggY2FzZSwgd2Ugd2FudCB0byB1c2UgdGhlIHZhcmlhYmxlIG5hbWVzIGZyb20gdGhpcyBvbmUs
IGFuZCBub3QgdGhlIG9uZSB0aGF0J3MKLSAgICAgICAgLy8gYmVpbmcgcmVkZWNsYXJlZC4gIFNv
LCBwYXNzIGJhY2sgdXAgdGhpcyBkZWNsYXJhdGlvbiwgbm90IHRoZSBvbmUgaW4gdGhlIHN5bWJv
bCB0YWJsZS4KLSAgICAgICAgLy8KLSAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pOwotCi0gICAgICAgIC8vIFdlJ3JlIGF0
IHRoZSBpbm5lciBzY29wZSBsZXZlbCBvZiB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudHMgYW5kIGJv
ZHkgc3RhdGVtZW50LgotICAgICAgICAvLyBBZGQgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZSB0byB0
aGUgc3Vycm91bmRpbmcgc2NvcGUgaW5zdGVhZC4KLSAgICAgICAgY29udGV4dC0+c3ltYm9sVGFi
bGUuZ2V0T3V0ZXJMZXZlbCgpLT5pbnNlcnQoKih5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uKTsKLSAg
ICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA3NjoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmlu
dGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24pOwotICAg
IH0KLSAgICBicmVhazsKLQotICBjYXNlIDc3OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50
ZXJtLmZ1bmN0aW9uKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5mdW5jdGlvbik7Ci0gICAg
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNzg6Ci0KLSAgICB7Ci0gICAgICAgIC8vIEFkZCB0aGUg
cGFyYW1ldGVyCi0gICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLmZ1bmN0aW9uKTsKLSAgICAgICAgaWYgKCh5eXZzcFsoMikgLSAoMildLmlu
dGVybSkucGFyYW0udHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkKLSAgICAgICAgICAg
ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmFkZFBhcmFtZXRlcigoeXl2c3Bb
KDIpIC0gKDIpXS5pbnRlcm0pLnBhcmFtKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZGVs
ZXRlICh5eXZzcFsoMikgLSAoMildLmludGVybSkucGFyYW0udHlwZTsKLSAgICB9Ci0gICAgYnJl
YWs7Ci0KLSAgY2FzZSA3OToKLQotICAgIHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gT25seSBm
aXJzdCBwYXJhbWV0ZXIgb2Ygb25lLXBhcmFtZXRlciBmdW5jdGlvbnMgY2FuIGJlIHZvaWQKLSAg
ICAgICAgLy8gVGhlIGNoZWNrIGZvciBuYW1lZCBwYXJhbWV0ZXJzIG5vdCBiZWluZyB2b2lkIGlz
IGRvbmUgaW4gcGFyYW1ldGVyX2RlY2xhcmF0b3IKLSAgICAgICAgLy8KLSAgICAgICAgaWYgKCh5
eXZzcFsoMykgLSAoMyldLmludGVybSkucGFyYW0udHlwZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0
Vm9pZCkgewotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFRoaXMgcGFyYW1ldGVyID4g
Zmlyc3QgaXMgdm9pZAotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eWxzcFsoMikgLSAoMyldKSwgImNhbm5vdCBiZSBhbiBhcmd1bWVudCB0eXBlIGV4Y2VwdCBm
b3IgJyh2b2lkKSciLCAidm9pZCIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICAgICAgZGVsZXRlICh5eXZzcFsoMykgLSAoMyldLmludGVybSkucGFyYW0udHlwZTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyCi0gICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5mdW5jdGlvbik7Ci0gICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uZnVuY3Rp
b24pLT5hZGRQYXJhbWV0ZXIoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKS5wYXJhbSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA4MDoKLQotICAgIHsKLSAgICAgICAg
aWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZpZXIgIT0gRXZxR2xvYmFs
ICYmICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZpZXIgIT0gRXZxVGVtcG9y
YXJ5KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICJu
byBxdWFsaWZpZXJzIGFsbG93ZWQgZm9yIGZ1bmN0aW9uIHJldHVybiIsIGdldFF1YWxpZmllclN0
cmluZygoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSk7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gbWFrZSBzdXJl
IGEgc2FtcGxlciBpcyBub3QgaW52b2x2ZWQgYXMgd2VsbC4uLgotICAgICAgICBpZiAoY29udGV4
dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDMpXSksICh5eXZzcFso
MSkgLSAoMyldLmludGVybS50eXBlKSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0KLSAgICAgICAgLy8gQWRkIHRoZSBmdW5jdGlvbiBhcyBhIHByb3RvdHlwZSBhZnRlciBwYXJz
aW5nIGl0ICh3ZSBkbyBub3Qgc3VwcG9ydCByZWN1cnNpb24pCi0gICAgICAgIFRGdW5jdGlvbiAq
ZnVuY3Rpb247Ci0gICAgICAgIFRUeXBlIHR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5
cGUpKTsKLSAgICAgICAgZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCh5eXZzcFsoMikgLSAoMyld
LmxleCkuc3RyaW5nLCB0eXBlKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSBm
dW5jdGlvbjsKLSAgICAgICAgCi0gICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsK
LSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA4MToKLQotICAgIHsKLSAgICAgICAgaWYgKCh5
eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidFZvaWQpIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgImlsbGVnYWwgdXNlIG9mIHR5
cGUgJ3ZvaWQnIiwgKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjb250
ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgyKV0pLCAqKHl5dnNwWygyKSAt
ICgyKV0ubGV4KS5zdHJpbmcpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyh5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLCBu
ZXcgVFR5cGUoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpKX07Ci0gICAgICAgICh5eXZh
bC5pbnRlcm0pLnBhcmFtID0gcGFyYW07Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgODI6
Ci0KLSAgICB7Ci0gICAgICAgIC8vIENoZWNrIHRoYXQgd2UgY2FuIG1ha2UgYW4gYXJyYXkgb3V0
IG9mIHRoaXMgdHlwZQotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygo
eXlsc3BbKDMpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSkpCi0gICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPnJlc2Vy
dmVkRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDUpXSksICooeXl2c3BbKDIpIC0gKDUpXS5sZXgp
LnN0cmluZykpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaW50
IHNpemU7Ci0gICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eWxzcFso
MykgLSAoNSldKSwgKHl5dnNwWyg0KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNp
emUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAoeXl2c3BbKDEp
IC0gKDUpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7Ci0KLSAgICAgICAgVFR5
cGUqIHR5cGUgPSBuZXcgVFR5cGUoKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKTsKLSAg
ICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcs
IHR5cGUgfTsKLSAgICAgICAgKHl5dmFsLmludGVybSkucGFyYW0gPSBwYXJhbTsKLSAgICB9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSA4MzoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybSkg
PSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pOwotICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1F
cnJvckNoZWNrKCh5eWxzcFsoMykgLSAoMyldKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5
cGUpLnF1YWxpZmllciwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZh
bC5pbnRlcm0pLnBhcmFtLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDg0OgotCi0gICAgewotICAgICAgICAoeXl2YWwu
aW50ZXJtKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybSk7Ci0gICAgICAgIGlmIChjb250ZXh0
LT5wYXJhbWV0ZXJTYW1wbGVyRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksICh5eXZzcFso
MSkgLSAoMildLmludGVybS5xdWFsaWZpZXIpLCAqKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKS5w
YXJhbS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgaWYg
KGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksIEV2cVRlbXBvcmFy
eSwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRlcm0pLnBh
cmFtLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgIH0KLSAgICBi
cmVhazsKLQotICBjYXNlIDg1OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5
eXZzcFsoMykgLSAoMyldLmludGVybSk7Ci0gICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9y
Q2hlY2soKHl5bHNwWygzKSAtICgzKV0pLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSku
cXVhbGlmaWVyLCAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0ucXVhbGlmaWVyKSwgKHl5dmFsLmlu
dGVybSkucGFyYW0udHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgODY6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRl
cm0pID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKTsKLSAgICAgICAgaWYgKGNvbnRleHQtPnBh
cmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLnF1YWxpZmllciksICooeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLnBhcmFt
LnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBpZiAoY29u
dGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgRXZxVGVtcG9yYXJ5LCAo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0ucXVhbGlmaWVyKSwgKHl5dmFsLmludGVybSkucGFyYW0u
dHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgfQotICAgIGJyZWFr
OwotCi0gIGNhc2UgODc6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVy
KSA9IEV2cUluOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDg4OgotCi0gICAgewotICAg
ICAgICAoeXl2YWwuaW50ZXJtLnF1YWxpZmllcikgPSBFdnFJbjsKLSAgICB9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSA4OToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5xdWFsaWZpZXIp
ID0gRXZxT3V0OwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDkwOgotCi0gICAgewotICAg
ICAgICAoeXl2YWwuaW50ZXJtLnF1YWxpZmllcikgPSBFdnFJbk91dDsKLSAgICB9Ci0gICAgYnJl
YWs7Ci0KLSAgY2FzZSA5MToKLQotICAgIHsKLSAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsg
MCwgbmV3IFRUeXBlKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSkgfTsKLSAgICAgICAg
KHl5dmFsLmludGVybSkucGFyYW0gPSBwYXJhbTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSA5MjoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0pOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDkzOgotCi0gICAgewotICAg
ICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS50eXBlLnR5cGUgPT0gRWJ0SW52YXJp
YW50ICYmICEoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN5bWJvbCkKLSAgICAgICAgewotICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygzKSAtICgzKV0pLCAidW5kZWNsYXJlZCBpZGVu
dGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICh5eXZzcFsoMykgLSAoMyldLmxleCkuc3Ry
aW5nLT5jX3N0cigpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
fQotCi0gICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0pLnR5cGUpLCAoeXlsc3BbKDMpIC0gKDMpXSkpOwotICAgICAg
ICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
Z3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmludGVybU5vZGUsIHN5bWJv
bCwgKHl5bHNwWygzKSAtICgzKV0pKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjb250ZXh0LT5z
dHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoMyldKSwgKHl5dmFsLmludGVy
bSkudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYg
KGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5bHNwWygzKSAtICgzKV0pLCAqKHl5
dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5cGUsIGZhbHNlKSkK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBUVmFyaWFibGUqIHZh
cmlhYmxlID0gMDsKLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRFcnJvckNoZWNrKCh5eWxz
cFsoMykgLSAoMyldKSwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2YWwuaW50
ZXJtKS50eXBlLCB2YXJpYWJsZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgICAgIGlmIChzeW1ib2wgJiYgdmFyaWFibGUpCi0gICAgICAgICAgICBzeW1ib2wtPnNldElk
KHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA5
NDoKLQotICAgIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hl
Y2soKHl5bHNwWygzKSAtICg1KV0pLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUpKQot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5u
b25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwgKih5eXZzcFsoMykgLSAo
NSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUsIHRydWUpKQot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgICh5eXZhbC5pbnRlcm0p
ID0gKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+YXJy
YXlUeXBlRXJyb3JDaGVjaygoeXlsc3BbKDQpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmlu
dGVybSkudHlwZSkgfHwgY29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFso
NCkgLSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlKSkKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAoeXl2c3Bb
KDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUuc2V0QXJyYXkodHJ1ZSk7Ci0gICAgICAgICAgICBUVmFy
aWFibGUqIHZhcmlhYmxlOwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVj
aygoeXlsc3BbKDQpIC0gKDUpXSksICooeXl2c3BbKDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5
dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlLCB2YXJpYWJsZSkpCi0gICAgICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNh
c2UgOTU6Ci0KLSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJv
ckNoZWNrKCh5eWxzcFsoMykgLSAoNildKSwgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50eXBl
KSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoY29udGV4
dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDYpXSksICooeXl2c3BbKDMp
IC0gKDYpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50eXBlLCB0cnVl
KSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICAoeXl2YWwuaW50
ZXJtKSA9ICh5eXZzcFsoMSkgLSAoNildLmludGVybSk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQt
PmFycmF5VHlwZUVycm9yQ2hlY2soKHl5bHNwWyg0KSAtICg2KV0pLCAoeXl2c3BbKDEpIC0gKDYp
XS5pbnRlcm0pLnR5cGUpIHx8IGNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjaygoeXls
c3BbKDQpIC0gKDYpXSksICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSkpCi0gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaW50
IHNpemU7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygoeXls
c3BbKDQpIC0gKDYpXSksICh5eXZzcFsoNSkgLSAoNildLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCBzaXplKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAg
ICAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7Ci0g
ICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAgICAgIGlmIChjb250
ZXh0LT5hcnJheUVycm9yQ2hlY2soKHl5bHNwWyg0KSAtICg2KV0pLCAqKHl5dnNwWygzKSAtICg2
KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSwgdmFyaWFibGUp
KQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIFRUeXBl
IHR5cGUgPSBUVHlwZSgoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUpOwotICAgICAgICAg
ICAgdHlwZS5zZXRBcnJheVNpemUoc2l6ZSk7Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5p
bnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2
c3BbKDEpIC0gKDYpXS5pbnRlcm0pLmludGVybU5vZGUsIGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRTeW1ib2wodmFyaWFibGUgPyB2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSA6IDAsICooeXl2c3Bb
KDMpIC0gKDYpXS5sZXgpLnN0cmluZywgdHlwZSwgKHl5bHNwWygzKSAtICg2KV0pKSwgKHl5bHNw
WygzKSAtICg2KV0pKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDk2
OgotCi0gICAgewotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVj
aygoeXlsc3BbKDMpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSkpCi0g
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgKHl5dmFsLmludGVybSkg
PSAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pOwotCi0gICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRl
cm1Ob2RlOwotICAgICAgICBpZiAoIWNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigoeXlsc3Bb
KDMpIC0gKDUpXSksICooeXl2c3BbKDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAt
ICg1KV0uaW50ZXJtKS50eXBlLCAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgaW50ZXJtTm9kZSkpIHsKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBidWls
ZCB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCi0gICAgICAgICAgICAvLwotICAgICAg
ICAgICAgaWYgKGludGVybU5vZGUpCi0gICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3Jl
Z2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAo
NSldLmludGVybSkuaW50ZXJtTm9kZSwgaW50ZXJtTm9kZSwgKHl5bHNwWyg0KSAtICg1KV0pKTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1B
Z2dyZWdhdGUgPSAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IDA7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA5NzoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVy
bSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsKLSAgICAgICAgKHl5dmFs
LmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dy
ZWdhdGUoY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAiIiwgVFR5cGUoKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLnR5cGUpKSwgKHl5bHNwWygxKSAtICgxKV0pKSwgKHl5bHNwWygx
KSAtICgxKV0pKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA5ODoKLQotICAgIHsKLSAg
ICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5
bWJvbCgwLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcsIFRUeXBlKCh5eXZzcFsoMSkg
LSAoMildLmludGVybS50eXBlKSksICh5eWxzcFsoMikgLSAoMildKSk7Ci0gICAgICAgICh5eXZh
bC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdn
cmVnYXRlKHN5bWJvbCwgKHl5bHNwWygyKSAtICgyKV0pKTsKLSAgICAgICAgCi0gICAgICAgIGlm
IChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwg
KHl5dmFsLmludGVybSkudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0K
LSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5bHNwWygyKSAt
ICgyKV0pLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5
cGUsIGZhbHNlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS50eXBlKTsKLQotICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAg
aWYgKGNvbnRleHQtPm5vbkluaXRFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgKih5eXZz
cFsoMikgLSAoMildLmxleCkuc3RyaW5nLCAoeXl2YWwuaW50ZXJtKS50eXBlLCB2YXJpYWJsZSkp
Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZSAm
JiBzeW1ib2wpCi0gICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJ
ZCgpKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA5OToKLQotICAgIHsKLSAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICg0KV0pLCAidW5zaXplZCBhcnJheSBkZWNsYXJh
dGlvbnMgbm90IHN1cHBvcnRlZCIsICh5eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nLT5jX3N0
cigpKTsKLSAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIFRJbnRlcm1TeW1i
b2wqIHN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFso
MikgLSAoNCldLmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlw
ZSkpLCAoeXlsc3BbKDIpIC0gKDQpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1B
Z2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsICh5
eWxzcFsoMikgLSAoNCldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3Bb
KDEpIC0gKDQpXS5pbnRlcm0udHlwZSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTAw
OgotCi0gICAgewotICAgICAgICBUVHlwZSB0eXBlID0gVFR5cGUoKHl5dnNwWygxKSAtICg1KV0u
aW50ZXJtLnR5cGUpKTsKLSAgICAgICAgaW50IHNpemU7Ci0gICAgICAgIGlmIChjb250ZXh0LT5h
cnJheVNpemVFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNSldKSwgKHl5dnNwWyg0KSAtICg1KV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNpemUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotICAgICAgICB0eXBlLnNldEFycmF5U2l6ZShzaXplKTsKLSAgICAgICAgVEludGVy
bVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5
dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsIHR5cGUsICh5eWxzcFsoMikgLSAoNSldKSk7Ci0g
ICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgKHl5bHNwWygyKSAtICg1KV0pKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFso
MikgLSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKSkKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0
RXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDUpXSksICooeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0
cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpLCB0cnVlKSkKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICAoeXl2YWwuaW50ZXJtKS50eXBlID0gKHl5
dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5hcnJh
eVR5cGVFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0uaW50
ZXJtLnR5cGUpKSB8fCBjb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygz
KSAtICg1KV0pLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSkpKQotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGludCBzaXpl
OwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soKHl5bHNwWygz
KSAtICg1KV0pLCAoeXl2c3BbKDQpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgc2l6
ZSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgICAgICAo
eXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7Ci0gICAg
ICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAgICAgIGlmIChjb250ZXh0
LT5hcnJheUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0pLCAqKHl5dnNwWygyKSAtICg1KV0u
bGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSwgdmFyaWFibGUpKQot
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIGlmICh2YXJp
YWJsZSAmJiBzeW1ib2wpCi0gICAgICAgICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+
Z2V0VW5pcXVlSWQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAx
MDE6Ci0KLSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNo
ZWNrKCh5eWxzcFsoMikgLSAoNCldKSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSkK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICAoeXl2YWwuaW50ZXJt
KS50eXBlID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpOwotCi0gICAgICAgIFRJbnRl
cm1Ob2RlKiBpbnRlcm1Ob2RlOwotICAgICAgICBpZiAoIWNvbnRleHQtPmV4ZWN1dGVJbml0aWFs
aXplcigoeXlsc3BbKDIpIC0gKDQpXSksICooeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZywg
KHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpLCAoeXl2c3BbKDQpIC0gKDQpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgaW50ZXJtTm9kZSkpIHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8g
QnVpbGQgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCi0gICAgICAgIC8vCi0gICAgICAgICAg
ICBpZihpbnRlcm1Ob2RlKQotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFn
Z3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKGludGVybU5vZGUs
ICh5eWxzcFsoMykgLSAoNCldKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
KHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gMDsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0p
LmludGVybUFnZ3JlZ2F0ZSA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSAxMDI6Ci0KLSAgICB7Ci0gICAgICAgIFZFUlRFWF9PTkxZKCJpbnZhcmlhbnQgZGVjbGFy
YXRpb24iLCAoeXlsc3BbKDEpIC0gKDIpXSkpOwotICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFs
RXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDIpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSwgImludmFyaWFudCB2YXJ5aW5nIikpCi0gICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUuc2V0QmFzaWMoRWJ0SW52YXJp
YW50LCBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCAoeXlsc3BbKDIpIC0gKDIpXSkpOwotICAgICAg
ICBpZiAoISh5eXZzcFsoMikgLSAoMildLmxleCkuc3ltYm9sKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICJ1bmRlY2xhcmVkIGlkZW50
aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJp
bmctPmNfc3RyKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAwOwotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgVEludGVybVN5bWJv
bCAqc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygy
KSAtICgyKV0ubGV4KS5zdHJpbmcsIFRUeXBlKCh5eXZhbC5pbnRlcm0pLnR5cGUpLCAoeXlsc3Bb
KDIpIC0gKDIpXSkpOwotICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRl
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCAoeXlsc3BbKDIp
IC0gKDIpXSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTAzOgot
Ci0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLnR5cGUpOwotCi0gICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlw
ZSkuYXJyYXkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSld
KSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKLSAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50
eXBlKS5zZXRBcnJheShmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSAxMDQ6Ci0KLSAgICB7Ci0gICAgICAgIGlmICgoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0u
dHlwZSkuYXJyYXkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAo
MildKSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICh5eXZzcFsoMikgLSAoMildLmludGVy
bS50eXBlKS5zZXRBcnJheShmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUgJiYKLSAg
ICAgICAgICAgICgoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRCb29s
IHx8ICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidEludCkpIHsKLSAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgImNhbm5vdCBiZSBi
b29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0u
dHlwZSkucXVhbGlmaWVyKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlm
aWVyID09IEV2cVZhcnlpbmdJbiB8fCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVh
bGlmaWVyID09IEV2cVZhcnlpbmdPdXQpICYmCi0gICAgICAgICAgICAoKHl5dnNwWygyKSAtICgy
KV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0Qm9vbCB8fCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRl
cm0udHlwZSkudHlwZSA9PSBFYnRJbnQpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXlsc3BbKDIpIC0gKDIpXSksICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJT
dHJpbmcoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcikpOwotICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSk7Ci0gICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkucXVhbGlmaWVyID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUp
LnF1YWxpZmllcjsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMDU6Ci0KLSAgICB7Ci0g
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxQ29uc3QsICh5
eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTA2OgotCi0g
ICAgewotICAgICAgICBWRVJURVhfT05MWSgiYXR0cmlidXRlIiwgKHl5bHNwWygxKSAtICgxKV0p
KTsKLSAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgx
KV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJhdHRyaWJ1dGUiKSkK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFBdHRyaWJ1dGUsICh5eWxzcFsoMSkgLSAoMSldKSk7
Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTA3OgotCi0gICAgewotICAgICAgICBpZiAo
Y29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDEpXSksIGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgInZhcnlpbmciKSkKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfVkVS
VEVYX1NIQURFUikKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0
Vm9pZCwgRXZxVmFyeWluZ091dCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFWYXJ5
aW5nSW4sICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2Ug
MTA4OgotCi0gICAgewotICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXls
c3BbKDEpIC0gKDIpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImlu
dmFyaWFudCB2YXJ5aW5nIikpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
ICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCi0gICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFyaWFudFZh
cnlpbmdPdXQsICh5eWxzcFsoMSkgLSAoMildKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxSW52YXJpYW50VmFyeWlu
Z0luLCAoeXlsc3BbKDEpIC0gKDIpXSkpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDEw
OToKLQotICAgIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5bHNw
WygxKSAtICgxKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ1bmlm
b3JtIikpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVW5pZm9ybSwgKHl5bHNwWygxKSAtICgx
KV0pKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMTA6Ci0KLSAgICB7Ci0gICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7Ci0K
LSAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0udHlwZSkucHJlY2lzaW9uID09IEVicFVuZGVmaW5l
ZCkgewotICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5wcmVjaXNpb24gPSBjb250ZXh0
LT5zeW1ib2xUYWJsZS5nZXREZWZhdWx0UHJlY2lzaW9uKCh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS50eXBlKS50eXBlKTsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5wcmVjaXNpb25FcnJvckNo
ZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgKHl5dmFsLmludGVybS50eXBlKS5wcmVjaXNpb24sICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS50eXBlKSkgewotICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBi
cmVhazsKLQotICBjYXNlIDExMToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKTsKLSAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5wcmVjaXNpb24gPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0ucHJlY2lzaW9uKTsK
LSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMTI6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZh
bC5pbnRlcm0ucHJlY2lzaW9uKSA9IEVicEhpZ2g7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNh
c2UgMTEzOgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLnByZWNpc2lvbikgPSBFYnBN
ZWRpdW07Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTE0OgotCi0gICAgewotICAgICAg
ICAoeXl2YWwuaW50ZXJtLnByZWNpc2lvbikgPSBFYnBMb3c7Ci0gICAgfQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgMTE1OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNl
IDExNjoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMSkg
LSAoNCldLmludGVybS50eXBlKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJy
b3JDaGVjaygoeXlsc3BbKDIpIC0gKDQpXSksICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBl
KSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgaW50IHNpemU7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJy
b3JDaGVjaygoeXlsc3BbKDIpIC0gKDQpXSksICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCBzaXplKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFycmF5KHRydWUsIHNpemUpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTE3OgotCi0gICAgewotICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICB9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSAxMTg6Ci0KLSAgICB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9h
dCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSAxMTk6Ci0KLSAgICB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5eWxzcFsoMSkg
LSAoMSldKSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTIwOgotCi0gICAgewotICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICB9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSAxMjE6Ci0KLSAgICB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9h
dCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRBZ2dyZWdhdGUoMik7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTIyOgotCi0g
ICAgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7
Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOwotICAgIH0KLSAg
ICBicmVhazsKLQotICBjYXNlIDEyMzoKLQotICAgIHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0
LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnNldEFnZ3JlZ2F0ZSg0KTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMjQ6Ci0KLSAg
ICB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwot
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgyKTsKLSAgICB9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSAxMjU6Ci0KLSAgICB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBx
dWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEFnZ3JlZ2F0ZSgzKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMjY6Ci0KLSAgICB7
Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKLSAgICB9Ci0gICAgYnJl
YWs7Ci0KLSAgY2FzZSAxMjc6Ci0KLSAgICB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJbnQsIHF1YWws
ICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdn
cmVnYXRlKDIpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDEyODoKLQotICAgIHsKLSAg
ICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEJhc2ljKEVidEludCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMyk7Ci0gICAgfQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgMTI5OgotCi0gICAgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7
Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXls
c3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0
ZSg0KTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMzA6Ci0KLSAgICB7Ci0gICAgICAg
IFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/
IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5z
ZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMiwgdHJ1ZSk7Ci0gICAgfQotICAgIGJyZWFr
OwotCi0gIGNhc2UgMTMxOgotCi0gICAgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jh
cnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWws
ICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdn
cmVnYXRlKDMsIHRydWUpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDEzMjoKLQotICAg
IHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9i
YWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwot
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0LCB0cnVlKTsKLSAgICB9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMzM6Ci0KLSAgICB7Ci0gICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRT
YW1wbGVyMkQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgfQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgMTM0OgotCi0gICAgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7
Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U2FtcGxlckN1YmUsIHF1
YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTM1
OgotCi0gICAgewotICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRXh0ZW5zaW9uKCJHTF9P
RVNfRUdMX2ltYWdlX2V4dGVybmFsIikpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eWxzcFsoMSkgLSAoMSldKSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlckV4dGVybmFsT0VT
Iik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEJhc2ljKEVidFNhbXBsZXJFeHRlcm5hbE9FUywgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsK
LSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMzY6Ci0KLSAgICB7Ci0gICAgICAgIGlmICgh
Y29udGV4dC0+c3VwcG9ydHNFeHRlbnNpb24oIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIpKSB7
Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSksICJ1bnN1cHBv
cnRlZCB0eXBlIiwgInNhbXBsZXIyRFJlY3QiKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1i
b2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U2FtcGxlcjJEUmVjdCwgcXVhbCwg
KHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMzc6Ci0K
LSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0udHlwZSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucXVhbGlmaWVyID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDEzODoKLQotICAgIHsKLSAgICAgICAg
Ly8KLSAgICAgICAgLy8gVGhpcyBpcyBmb3IgdXNlciBkZWZpbmVkIHR5cGUgbmFtZXMuICBUaGUg
bGV4aWNhbCBwaGFzZSBsb29rZWQgdXAgdGhlCi0gICAgICAgIC8vIHR5cGUuCi0gICAgICAgIC8v
Ci0gICAgICAgIFRUeXBlJiBzdHJ1Y3R1cmUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPigoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLnN5bWJvbCktPmdldFR5cGUoKTsKLSAgICAgICAgVFF1YWxpZmll
ciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFs
IDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVi
dFN0cnVjdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS51c2VyRGVmID0gJnN0cnVjdHVyZTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSAxMzk6Ci0KLSAgICB7IGlmIChjb250ZXh0LT5lbnRlclN0cnVjdERlY2xhcmF0aW9uKCh5eWxz
cFsoMikgLSAoMyldKSwgKih5eXZzcFsoMikgLSAoMyldLmxleCkuc3RyaW5nKSkgY29udGV4dC0+
cmVjb3ZlcigpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNDA6Ci0KLSAgICB7Ci0gICAgICAg
IGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg2KV0pLCAqKHl5
dnNwWygyKSAtICg2KV0ubGV4KS5zdHJpbmcpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotCi0gICAgICAgIFRUeXBlKiBzdHJ1Y3R1cmUgPSBuZXcgVFR5cGUobmV3IFRTdHJ1Y3R1
cmUoKHl5dnNwWygyKSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoNSkgLSAoNildLmludGVy
bS5maWVsZExpc3QpKSk7Ci0gICAgICAgIFRWYXJpYWJsZSogdXNlclR5cGVEZWYgPSBuZXcgVFZh
cmlhYmxlKCh5eXZzcFsoMikgLSAoNildLmxleCkuc3RyaW5nLCAqc3RydWN0dXJlLCB0cnVlKTsK
LSAgICAgICAgaWYgKCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp1c2VyVHlwZURlZikp
IHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoNildKSwgInJlZGVm
aW5pdGlvbiIsICh5eXZzcFsoMikgLSAoNildLmxleCkuc3RyaW5nLT5jX3N0cigpLCAic3RydWN0
Iik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgKHl5
bHNwWygxKSAtICg2KV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS51c2VyRGVmID0g
c3RydWN0dXJlOwotICAgICAgICBjb250ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsKLSAg
ICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNDE6Ci0KLSAgICB7IGlmIChjb250ZXh0LT5lbnRl
clN0cnVjdERlY2xhcmF0aW9uKCh5eWxzcFsoMikgLSAoMildKSwgKih5eXZzcFsoMikgLSAoMild
LmxleCkuc3RyaW5nKSkgY29udGV4dC0+cmVjb3ZlcigpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSAxNDI6Ci0KLSAgICB7Ci0gICAgICAgIFRUeXBlKiBzdHJ1Y3R1cmUgPSBuZXcgVFR5cGUobmV3
IFRTdHJ1Y3R1cmUoTmV3UG9vbFRTdHJpbmcoIiIpLCAoeXl2c3BbKDQpIC0gKDUpXS5pbnRlcm0u
ZmllbGRMaXN0KSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFN0
cnVjdCwgRXZxVGVtcG9yYXJ5LCAoeXlsc3BbKDEpIC0gKDUpXSkpOwotICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7Ci0gICAgICAgIGNvbnRleHQtPmV4aXRT
dHJ1Y3REZWNsYXJhdGlvbigpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE0MzoKLQot
ICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5maWVsZExpc3QpID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmZpZWxkTGlzdCk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTQ0Ogot
Ci0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSAoeXl2c3BbKDEpIC0g
KDIpXS5pbnRlcm0uZmllbGRMaXN0KTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAo
eXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uZmllbGRMaXN0KS0+c2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgICAgIFRGaWVsZCogZmllbGQgPSAoKih5eXZzcFsoMikgLSAoMildLmludGVybS5maWVsZExp
c3QpKVtpXTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgKHl5dmFsLmludGVy
bS5maWVsZExpc3QpLT5zaXplKCk7ICsraikgewotICAgICAgICAgICAgICAgIGlmICgoKih5eXZh
bC5pbnRlcm0uZmllbGRMaXN0KSlbal0tPm5hbWUoKSA9PSBmaWVsZC0+bmFtZSgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgImR1cGxp
Y2F0ZSBmaWVsZCBuYW1lIGluIHN0cnVjdHVyZToiLCAic3RydWN0IiwgZmllbGQtPm5hbWUoKS5j
X3N0cigpKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uZmll
bGRMaXN0KS0+cHVzaF9iYWNrKGZpZWxkKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsK
LQotICBjYXNlIDE0NToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5maWVsZExpc3Qp
ID0gKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmZpZWxkTGlzdCk7Ci0KLSAgICAgICAgaWYgKGNv
bnRleHQtPnZvaWRFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMyldKSwgKCooeXl2c3BbKDIpIC0g
KDMpXS5pbnRlcm0uZmllbGRMaXN0KSlbMF0tPm5hbWUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLnR5cGUpKSkgewotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgKHl5dmFsLmludGVybS5maWVs
ZExpc3QpLT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIENh
cmVmdWwgbm90IHRvIHJlcGxhY2UgYWxyZWFkeSBrbm93biBhc3BlY3RzIG9mIHR5cGUsIGxpa2Ug
YXJyYXktbmVzcwotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIFRUeXBlKiB0eXBlID0gKCoo
eXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkpW2ldLT50eXBlKCk7Ci0gICAgICAgICAgICB0eXBlLT5z
ZXRCYXNpY1R5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnR5cGUpOwotICAgICAg
ICAgICAgdHlwZS0+c2V0Tm9taW5hbFNpemUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUp
LnNpemUpOwotICAgICAgICAgICAgdHlwZS0+c2V0TWF0cml4KCh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS50eXBlKS5tYXRyaXgpOwotICAgICAgICAgICAgdHlwZS0+c2V0UHJlY2lzaW9uKCh5eXZz
cFsoMSkgLSAoMyldLmludGVybS50eXBlKS5wcmVjaXNpb24pOwotCi0gICAgICAgICAgICAvLyBk
b24ndCBhbGxvdyBhcnJheXMgb2YgYXJyYXlzCi0gICAgICAgICAgICBpZiAodHlwZS0+aXNBcnJh
eSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2so
KHl5bHNwWygxKSAtICgzKV0pLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkpKQotICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLmFycmF5KQotICAgICAg
ICAgICAgICAgIHR5cGUtPnNldEFycmF5U2l6ZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlw
ZSkuYXJyYXlTaXplKTsKLSAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
dHlwZSkudXNlckRlZikKLSAgICAgICAgICAgICAgICB0eXBlLT5zZXRTdHJ1Y3QoKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLnR5cGUpLnVzZXJEZWYtPmdldFN0cnVjdCgpKTsKLQotICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPnN0cnVjdE5lc3RpbmdFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMyld
KSwgKigqKHl5dmFsLmludGVybS5maWVsZExpc3QpKVtpXSkpCi0gICAgICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2Ug
MTQ2OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSBOZXdQb29s
VEZpZWxkTGlzdCgpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCktPnB1c2hfYmFj
aygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uZmllbGQpKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSAxNDc6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0KS0+
cHVzaF9iYWNrKCh5eXZzcFsoMykgLSAoMyldLmludGVybS5maWVsZCkpOwotICAgIH0KLSAgICBi
cmVhazsKLQotICBjYXNlIDE0ODoKLQotICAgIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnJlc2Vy
dmVkRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDEpXSksICooeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LnN0cmluZykpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgVFR5
cGUqIHR5cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKLSAgICAgICAgKHl5
dmFsLmludGVybS5maWVsZCkgPSBuZXcgVEZpZWxkKHR5cGUsICh5eXZzcFsoMSkgLSAoMSldLmxl
eCkuc3RyaW5nKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNDk6Ci0KLSAgICB7Ci0g
ICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICg0KV0p
LCAqKHl5dnNwWygxKSAtICg0KV0ubGV4KS5zdHJpbmcpKQotICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotCi0gICAgICAgIFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKEVidFZvaWQsIEVi
cFVuZGVmaW5lZCk7Ci0gICAgICAgIGludCBzaXplID0gMDsKLSAgICAgICAgaWYgKGNvbnRleHQt
PmFycmF5U2l6ZUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg0KV0pLCAoeXl2c3BbKDMpIC0gKDQp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0gICAgICAgIHR5cGUtPnNldEFycmF5U2l6ZShzaXplKTsKLQotICAgICAgICAo
eXl2YWwuaW50ZXJtLmZpZWxkKSA9IG5ldyBURmllbGQodHlwZSwgKHl5dnNwWygxKSAtICg0KV0u
bGV4KS5zdHJpbmcpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE1MDoKLQotICAgIHsg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDE1MToKLQotICAgIHsg
KHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1Ob2RlKTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTUyOgotCi0gICAgeyAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0
ZSk7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDE1MzoKLQotICAgIHsgKHl5dmFsLmludGVybS5p
bnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQotICAg
IGJyZWFrOwotCi0gIGNhc2UgMTU0OgotCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSAxNTU6Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDE1
NjoKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSld
LmludGVybS5pbnRlcm1Ob2RlKTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTU3OgotCi0gICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybU5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNTg6Ci0KLSAgICB7ICh5eXZhbC5p
bnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7
IH0KLSAgICBicmVhazsKLQotICBjYXNlIDE1OToKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRl
cm1BZ2dyZWdhdGUpID0gMDsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTYwOgotCi0gICAgeyBj
b250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDE2MToK
LQotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7IH0KLSAgICBicmVhazsKLQotICBj
YXNlIDE2MjoKLQotICAgIHsKLSAgICAgICAgaWYgKCh5eXZzcFsoMykgLSAoNSldLmludGVybS5p
bnRlcm1BZ2dyZWdhdGUpICE9IDApIHsKLSAgICAgICAgICAgICh5eXZzcFsoMykgLSAoNSldLmlu
dGVybS5pbnRlcm1BZ2dyZWdhdGUpLT5zZXRPcChFT3BTZXF1ZW5jZSk7Ci0gICAgICAgICAgICAo
eXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKS0+c2V0TGluZSgoeXlsb2Mp
KTsKLSAgICAgICAgfQotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgPSAo
eXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKTsKLSAgICB9Ci0gICAgYnJl
YWs7Ci0KLSAgY2FzZSAxNjM6Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KLSAgICBicmVhazsKLQotICBj
YXNlIDE2NDoKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTY1Ogot
Ci0gICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0KLSAgICBicmVhazsKLQotICBj
YXNlIDE2NjoKLQotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7ICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0K
LSAgICBicmVhazsKLQotICBjYXNlIDE2NzoKLQotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUu
cHVzaCgpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNjg6Ci0KLSAgICB7IGNvbnRleHQtPnN5
bWJvbFRhYmxlLnBvcCgpOyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygyKSAt
ICgyKV0uaW50ZXJtLmludGVybU5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNjk6Ci0K
LSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOwotICAgIH0KLSAg
ICBicmVhazsKLQotICBjYXNlIDE3MDoKLQotICAgIHsKLSAgICAgICAgaWYgKCh5eXZzcFsoMikg
LSAoMyldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpKSB7Ci0gICAgICAgICAgICAoeXl2c3BbKDIp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKS0+c2V0T3AoRU9wU2VxdWVuY2UpOwotICAg
ICAgICAgICAgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSktPnNldExp
bmUoKHl5bG9jKSk7Ci0gICAgICAgIH0KLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2Rl
KSA9ICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpOwotICAgIH0KLSAg
ICBicmVhazsKLQotICBjYXNlIDE3MToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1BZ2dyZWdhdGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXlsb2MpKTsKLSAgICB9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSAxNzI6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtQWdncmVnYXRlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZz
cFsoMSkgLSAoMildLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpLCAoeXl2c3BbKDIpIC0gKDIpXS5p
bnRlcm0uaW50ZXJtTm9kZSksICh5eWxvYykpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNl
IDE3MzoKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IDA7IH0KLSAgICBicmVh
azsKLQotICBjYXNlIDE3NDoKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IHN0
YXRpY19jYXN0PFRJbnRlcm1Ob2RlKj4oKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSkpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNzU6Ci0KLSAgICB7Ci0gICAgICAg
IGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDUpXSksICh5eXZzcFso
MykgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKLSAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRTZWxlY3Rpb24oKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eXZzcFsoNSkgLSAoNSldLmludGVybS5ub2RlUGFpciksICh5eWxzcFso
MSkgLSAoNSldKSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTc2OgotCi0gICAgewot
ICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1Ob2RlKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9k
ZTIgPSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgfQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgMTc3OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQ
YWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKLSAgICAg
ICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTIgPSAwOwotICAgIH0KLSAgICBicmVhazsK
LQotICBjYXNlIDE3ODoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAg
ICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+Z2V0TGluZSgpLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgfQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgMTc5OgotCi0gICAgewotICAgICAgICBUSW50ZXJtTm9kZSog
aW50ZXJtTm9kZTsKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hl
Y2soKHl5bHNwWygyKSAtICg0KV0pLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpKQot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBpZiAoY29udGV4dC0+Ym9v
bEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg0KV0pLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0u
dHlwZSkpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlmICgh
Y29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKCh5eWxzcFsoMikgLSAoNCldKSwgKih5eXZzcFso
MikgLSAoNCldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSksICh5
eXZzcFsoNCkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbnRlcm1Ob2RlKSkKLSAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoNCkgLSAo
NCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxODA6
Ci0KLSAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgKytjb250ZXh0LT5sb29wTmVz
dGluZ0xldmVsOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxODE6Ci0KLSAgICB7Ci0gICAgICAg
IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3AoRUxvb3BXaGlsZSwgMCwgKHl5
dnNwWyg0KSAtICg2KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIDAsICh5eXZzcFsoNikgLSAo
NildLmludGVybS5pbnRlcm1Ob2RlKSwgKHl5bHNwWygxKSAtICg2KV0pKTsKLSAgICAgICAgLS1j
b250ZXh0LT5sb29wTmVzdGluZ0xldmVsOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE4
MjoKLQotICAgIHsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyB9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSAxODM6Ci0KLSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVj
aygoeXlsc3BbKDgpIC0gKDgpXSksICh5eXZzcFsoNikgLSAoOCldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3AoRUxv
b3BEb1doaWxlLCAwLCAoeXl2c3BbKDYpIC0gKDgpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
MCwgKHl5dnNwWygzKSAtICg4KV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXlsc3BbKDQpIC0gKDgp
XSkpOwotICAgICAgICAtLWNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7Ci0gICAgfQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgMTg0OgotCi0gICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7
ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTg1
OgotCi0gICAgewotICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKLSAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRMb29w
KEVMb29wRm9yLCAoeXl2c3BbKDQpIC0gKDcpXS5pbnRlcm0uaW50ZXJtTm9kZSksIHJlaW50ZXJw
cmV0X2Nhc3Q8VEludGVybVR5cGVkKj4oKHl5dnNwWyg1KSAtICg3KV0uaW50ZXJtLm5vZGVQYWly
KS5ub2RlMSksIHJlaW50ZXJwcmV0X2Nhc3Q8VEludGVybVR5cGVkKj4oKHl5dnNwWyg1KSAtICg3
KV0uaW50ZXJtLm5vZGVQYWlyKS5ub2RlMiksICh5eXZzcFsoNykgLSAoNyldLmludGVybS5pbnRl
cm1Ob2RlKSwgKHl5bHNwWygxKSAtICg3KV0pKTsKLSAgICAgICAgLS1jb250ZXh0LT5sb29wTmVz
dGluZ0xldmVsOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE4NjoKLQotICAgIHsKLSAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1Ob2RlKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxODc6Ci0KLSAgICB7
Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTg4OgotCi0g
ICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSAxODk6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9IDA7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTkwOgotCi0gICAgewotICAgICAg
ICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2Rl
MiA9IDA7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTkxOgotCi0gICAgewotICAgICAg
ICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2Rl
MiA9ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgIH0KLSAg
ICBicmVhazsKLQotICBjYXNlIDE5MjoKLQotICAgIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPmxv
b3BOZXN0aW5nTGV2ZWwgPD0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNw
WygxKSAtICgyKV0pLCAiY29udGludWUgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIs
ICIiKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJy
YW5jaChFT3BDb250aW51ZSwgKHl5bHNwWygxKSAtICgyKV0pKTsKLSAgICB9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSAxOTM6Ci0KLSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGlu
Z0xldmVsIDw9IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAo
MildKSwgImJyZWFrIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIik7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wQnJl
YWssICh5eWxzcFsoMSkgLSAoMildKSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTk0
OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1cm4sICh5eWxzcFsoMSkgLSAoMildKSk7Ci0g
ICAgICAgIGlmIChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSAh
PSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDIp
XSksICJub24tdm9pZCBmdW5jdGlvbiBtdXN0IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIpOwot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgMTk1OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1cm4sICh5eXZz
cFsoMikgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDEpIC0gKDMpXSkp
OwotICAgICAgICBjb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IHRydWU7Ci0gICAgICAg
IGlmIChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRW
b2lkKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDMpXSksICJ2
b2lkIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iKTsKLSAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfSBlbHNlIGlmICgqKGNvbnRleHQtPmN1
cnJlbnRGdW5jdGlvblR5cGUpICE9ICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5nZXRUeXBlKCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFso
MSkgLSAoMyldKSwgImZ1bmN0aW9uIHJldHVybiBpcyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0
dXJuIik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxOTY6Ci0KLSAgICB7Ci0gICAgICAgIEZSQUdfT05MWSgi
ZGlzY2FyZCIsICh5eWxzcFsoMSkgLSAoMildKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcEtpbGwsICh5eWxz
cFsoMSkgLSAoMildKSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTk3OgotCi0gICAg
ewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybU5vZGUpOwotICAgICAgICBjb250ZXh0LT50cmVlUm9vdCA9ICh5eXZhbC5p
bnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTk4OgotCi0g
ICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUp
LCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eWxvYykpOwotICAgICAg
ICBjb250ZXh0LT50cmVlUm9vdCA9ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgfQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgMTk5OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwotICAg
IH0KLSAgICBicmVhazsKLQotICBjYXNlIDIwMDoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsK
LSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyMDE6Ci0KLSAgICB7Ci0gICAgICAgIFRGdW5j
dGlvbiogZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmZ1bmN0aW9uOwotICAg
ICAgICAKLSAgICAgICAgY29uc3QgVFN5bWJvbCAqYnVpbHRJbiA9IGNvbnRleHQtPnN5bWJvbFRh
YmxlLmZpbmRCdWlsdEluKGZ1bmN0aW9uLT5nZXRNYW5nbGVkTmFtZSgpKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChidWlsdEluKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXlsc3BbKDEpIC0gKDEpXSksICJidWlsdC1pbiBmdW5jdGlvbnMgY2Fubm90IGJlIHJlZGVm
aW5lZCIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSk7Ci0gICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFRGdW5jdGlvbiogcHJl
dkRlYyA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQo
ZnVuY3Rpb24tPmdldE1hbmdsZWROYW1lKCkpKTsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gTm90
ZTogICdwcmV2RGVjJyBjb3VsZCBiZSAnZnVuY3Rpb24nIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRp
bWUgd2UndmUgc2VlbiBmdW5jdGlvbgotICAgICAgICAvLyBhcyBpdCB3b3VsZCBoYXZlIGp1c3Qg
YmVlbiBwdXQgaW4gdGhlIHN5bWJvbCB0YWJsZS4gIE90aGVyd2lzZSwgd2UncmUgbG9va2luZyB1
cAotICAgICAgICAvLyBhbiBlYXJsaWVyIG9jY3VyYW5jZS4KLSAgICAgICAgLy8KLSAgICAgICAg
aWYgKHByZXZEZWMtPmlzRGVmaW5lZCgpKSB7Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAg
Ly8gVGhlbiB0aGlzIGZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keS4KLSAgICAgICAgICAgIC8v
Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSksICJmdW5jdGlv
biBhbHJlYWR5IGhhcyBhIGJvZHkiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgIHByZXZEZWMt
PnNldERlZmluZWQoKTsKLQotICAgICAgICAvLwotICAgICAgICAvLyBSYWlzZSBlcnJvciBtZXNz
YWdlIGlmIG1haW4gZnVuY3Rpb24gdGFrZXMgYW55IHBhcmFtZXRlcnMgb3IgcmV0dXJuIGFueXRo
aW5nIG90aGVyIHRoYW4gdm9pZAotICAgICAgICAvLwotICAgICAgICBpZiAoZnVuY3Rpb24tPmdl
dE5hbWUoKSA9PSAibWFpbiIpIHsKLSAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0UGFyYW1D
b3VudCgpID4gMCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkg
LSAoMSldKSwgImZ1bmN0aW9uIGNhbm5vdCB0YWtlIGFueSBwYXJhbWV0ZXIocykiLCBmdW5jdGlv
bi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0UmV0dXJuVHlw
ZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSksICIiLCBmdW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgp
LmdldEJhc2ljU3RyaW5nKCksICJtYWluIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIp
OwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFJlbWVtYmVyIHRoZSByZXR1cm4gdHlw
ZSBmb3IgbGF0ZXIgY2hlY2tpbmcgZm9yIFJFVFVSTiBzdGF0ZW1lbnRzLgotICAgICAgICAvLwot
ICAgICAgICBjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlID0gJihwcmV2RGVjLT5nZXRSZXR1
cm5UeXBlKCkpOwotICAgICAgICBjb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IGZhbHNl
OwotCi0gICAgICAgIC8vCi0gICAgICAgIC8vIEluc2VydCBwYXJhbWV0ZXJzIGludG8gdGhlIHN5
bWJvbCB0YWJsZS4KLSAgICAgICAgLy8gSWYgdGhlIHBhcmFtZXRlciBoYXMgbm8gbmFtZSwgaXQn
cyBub3QgYW4gZXJyb3IsIGp1c3QgZG9uJ3QgaW5zZXJ0IGl0Ci0gICAgICAgIC8vIChjb3VsZCBi
ZSB1c2VkIGZvciB1bnVzZWQgYXJncykuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIEFsc28sIGFj
Y3VtdWxhdGUgdGhlIGxpc3Qgb2YgcGFyYW1ldGVycyBpbnRvIHRoZSBISUwsIHNvIGxvd2VyIGxl
dmVsIGNvZGUKLSAgICAgICAgLy8ga25vd3Mgd2hlcmUgdG8gZmluZCBwYXJhbWV0ZXJzLgotICAg
ICAgICAvLwotICAgICAgICBUSW50ZXJtQWdncmVnYXRlKiBwYXJhbU5vZGVzID0gbmV3IFRJbnRl
cm1BZ2dyZWdhdGU7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb24tPmdl
dFBhcmFtQ291bnQoKTsgaSsrKSB7Ci0gICAgICAgICAgICBjb25zdCBUUGFyYW1ldGVyJiBwYXJh
bSA9IGZ1bmN0aW9uLT5nZXRQYXJhbShpKTsKLSAgICAgICAgICAgIGlmIChwYXJhbS5uYW1lICE9
IDApIHsKLSAgICAgICAgICAgICAgICBUVmFyaWFibGUgKnZhcmlhYmxlID0gbmV3IFRWYXJpYWJs
ZShwYXJhbS5uYW1lLCAqcGFyYW0udHlwZSk7Ci0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAg
ICAgICAgICAvLyBJbnNlcnQgdGhlIHBhcmFtZXRlcnMgd2l0aCBuYW1lIGluIHRoZSBzeW1ib2wg
dGFibGUuCi0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICBpZiAoISBjb250ZXh0
LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgewotICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSksICJyZWRlZmluaXRpb24iLCB2YXJpYWJs
ZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUg
cGFyYW1ldGVyIHRvIHRoZSBISUwKLSAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAg
IHBhcmFtTm9kZXMgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXJpYWJsZS0+Z2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
cmlhYmxlLT5nZXRUeXBlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHl5bHNwWygxKSAtICgx
KV0pKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHl5
bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
cGFyYW1Ob2RlcyA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKHBhcmFtTm9k
ZXMsIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsICpwYXJhbS50eXBlLCAo
eXlsc3BbKDEpIC0gKDEpXSkpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVy
YXRvcihwYXJhbU5vZGVzLCBFT3BQYXJhbWV0ZXJzLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAg
ICAgICAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IHBhcmFtTm9k
ZXM7Ci0gICAgICAgIGNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPSAwOwotICAgIH0KLSAgICBi
cmVhazsKLQotICBjYXNlIDIwMjoKLQotICAgIHsKLSAgICAgICAgLy8/PyBDaGVjayB0aGF0IGFs
bCBwYXRocyByZXR1cm4gYSB2YWx1ZSBpZiByZXR1cm4gdHlwZSAhPSB2b2lkID8KLSAgICAgICAg
Ly8gICBNYXkgYmUgYmVzdCBkb25lIGFzIHBvc3QgcHJvY2VzcyBwaGFzZSBvbiBpbnRlcm1lZGlh
dGUgY29kZQotICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+Z2V0QmFz
aWNUeXBlKCkgIT0gRWJ0Vm9pZCAmJiAhIGNvbnRleHQtPmZ1bmN0aW9uUmV0dXJuc1ZhbHVlKSB7
Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDMpXSksICJmdW5jdGlv
biBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZToiLCAiIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
KS5mdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUsICh5eXZzcFsoMykgLSAoMyldLmludGVybS5p
bnRlcm1Ob2RlKSwgKHl5bG9jKSk7Ci0gICAgICAgIGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRB
Z2dyZWdhdGVPcGVyYXRvcigoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLCBFT3BGdW5jdGlvbiwg
KHl5bHNwWygxKSAtICgzKV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKS0+
Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0TmFtZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmZ1bmN0
aW9uLT5nZXRNYW5nbGVkTmFtZSgpLmNfc3RyKCkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybSkuZnVuY3Rpb24tPmdldFJldHVyblR5cGUoKSk7Ci0KLSAgICAgICAgLy8gc3RvcmUgdGhl
IHByYWdtYSBpbmZvcm1hdGlvbiBmb3IgZGVidWcgYW5kIG9wdGltaXplIGFuZCBvdGhlciB2ZW5k
b3Igc3BlY2lmaWMKLSAgICAgICAgLy8gaW5mb3JtYXRpb24uIFRoaXMgaW5mb3JtYXRpb24gY2Fu
IGJlIHF1ZXJpZWQgZnJvbSB0aGUgcGFyc2UgdHJlZQotICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRPcHRpbWl6ZShjb250ZXh0LT5wcmFnbWEo
KS5vcHRpbWl6ZSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSktPmdldEFzQWdn
cmVnYXRlKCktPnNldERlYnVnKGNvbnRleHQtPnByYWdtYSgpLmRlYnVnKTsKLQotICAgICAgICBj
b250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLQotCi0gICAg
ICBkZWZhdWx0OiBicmVhazsKLSAgICB9Ci0gIC8qIFVzZXIgc2VtYW50aWMgYWN0aW9ucyBzb21l
dGltZXMgYWx0ZXIgeXljaGFyLCBhbmQgdGhhdCByZXF1aXJlcwotICAgICB0aGF0IHl5dG9rZW4g
YmUgdXBkYXRlZCB3aXRoIHRoZSBuZXcgdHJhbnNsYXRpb24uICBXZSB0YWtlIHRoZQotICAgICBh
cHByb2FjaCBvZiB0cmFuc2xhdGluZyBpbW1lZGlhdGVseSBiZWZvcmUgZXZlcnkgdXNlIG9mIHl5
dG9rZW4uCi0gICAgIE9uZSBhbHRlcm5hdGl2ZSBpcyB0cmFuc2xhdGluZyBoZXJlIGFmdGVyIGV2
ZXJ5IHNlbWFudGljIGFjdGlvbiwKLSAgICAgYnV0IHRoYXQgdHJhbnNsYXRpb24gd291bGQgYmUg
bWlzc2VkIGlmIHRoZSBzZW1hbnRpYyBhY3Rpb24gaW52b2tlcwotICAgICBZWUFCT1JULCBZWUFD
Q0VQVCwgb3IgWVlFUlJPUiBpbW1lZGlhdGVseSBhZnRlciBhbHRlcmluZyB5eWNoYXIgb3IKLSAg
ICAgaWYgaXQgaW52b2tlcyBZWUJBQ0tVUC4gIEluIHRoZSBjYXNlIG9mIFlZQUJPUlQgb3IgWVlB
Q0NFUFQsIGFuCi0gICAgIGluY29ycmVjdCBkZXN0cnVjdG9yIG1pZ2h0IHRoZW4gYmUgaW52b2tl
ZCBpbW1lZGlhdGVseS4gIEluIHRoZQotICAgICBjYXNlIG9mIFlZRVJST1Igb3IgWVlCQUNLVVAs
IHN1YnNlcXVlbnQgcGFyc2VyIGFjdGlvbnMgbWlnaHQgbGVhZAotICAgICB0byBhbiBpbmNvcnJl
Y3QgZGVzdHJ1Y3RvciBjYWxsIG9yIHZlcmJvc2Ugc3ludGF4IGVycm9yIG1lc3NhZ2UKLSAgICAg
YmVmb3JlIHRoZSBsb29rYWhlYWQgaXMgdHJhbnNsYXRlZC4gICovCi0gIFlZX1NZTUJPTF9QUklO
VCAoIi0+ICQkID0iLCB5eXIxW3l5bl0sICZ5eXZhbCwgJnl5bG9jKTsKLQotICBZWVBPUFNUQUNL
ICh5eWxlbik7Ci0gIHl5bGVuID0gMDsKLSAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsK
LQotICAqKyt5eXZzcCA9IHl5dmFsOwotICAqKyt5eWxzcCA9IHl5bG9jOwotCi0gIC8qIE5vdyBg
c2hpZnQnIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbi4gIERldGVybWluZSB3aGF0IHN0YXRl
Ci0gICAgIHRoYXQgZ29lcyB0bywgYmFzZWQgb24gdGhlIHN0YXRlIHdlIHBvcHBlZCBiYWNrIHRv
IGFuZCB0aGUgcnVsZQotICAgICBudW1iZXIgcmVkdWNlZCBieS4gICovCi0KLSAgeXluID0geXly
MVt5eW5dOwotCi0gIHl5c3RhdGUgPSB5eXBnb3RvW3l5biAtIFlZTlRPS0VOU10gKyAqeXlzc3A7
Ci0gIGlmICgwIDw9IHl5c3RhdGUgJiYgeXlzdGF0ZSA8PSBZWUxBU1QgJiYgeXljaGVja1t5eXN0
YXRlXSA9PSAqeXlzc3ApCi0gICAgeXlzdGF0ZSA9IHl5dGFibGVbeXlzdGF0ZV07Ci0gIGVsc2UK
LSAgICB5eXN0YXRlID0geXlkZWZnb3RvW3l5biAtIFlZTlRPS0VOU107Ci0KLSAgZ290byB5eW5l
d3N0YXRlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5
eWVycmxhYiAtLSBoZXJlIG9uIGRldGVjdGluZyBlcnJvciB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZXJybGFiOgotICAvKiBNYWtlIHN1cmUgd2UgaGF2ZSBs
YXRlc3QgbG9va2FoZWFkIHRyYW5zbGF0aW9uLiAgU2VlIGNvbW1lbnRzIGF0Ci0gICAgIHVzZXIg
c2VtYW50aWMgYWN0aW9ucyBmb3Igd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LiAgKi8KLSAgeXl0b2tl
biA9IHl5Y2hhciA9PSBZWUVNUFRZID8gWVlFTVBUWSA6IFlZVFJBTlNMQVRFICh5eWNoYXIpOwot
Ci0gIC8qIElmIG5vdCBhbHJlYWR5IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0IHRo
aXMgZXJyb3IuICAqLwotICBpZiAoIXl5ZXJyc3RhdHVzKQotICAgIHsKLSAgICAgICsreXluZXJy
czsKLSNpZiAhIFlZRVJST1JfVkVSQk9TRQotICAgICAgeXllcnJvciAoJnl5bGxvYywgY29udGV4
dCwgWVlfKCJzeW50YXggZXJyb3IiKSk7Ci0jZWxzZQotIyBkZWZpbmUgWVlTWU5UQVhfRVJST1Ig
eXlzeW50YXhfZXJyb3IgKCZ5eW1zZ19hbGxvYywgJnl5bXNnLCBcCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeXlzc3AsIHl5dG9rZW4pCi0gICAgICB7Ci0gICAgICAg
IGNoYXIgY29uc3QgKnl5bXNncCA9IFlZXygic3ludGF4IGVycm9yIik7Ci0gICAgICAgIGludCB5
eXN5bnRheF9lcnJvcl9zdGF0dXM7Ci0gICAgICAgIHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9IFlZ
U1lOVEFYX0VSUk9SOwotICAgICAgICBpZiAoeXlzeW50YXhfZXJyb3Jfc3RhdHVzID09IDApCi0g
ICAgICAgICAgeXltc2dwID0geXltc2c7Ci0gICAgICAgIGVsc2UgaWYgKHl5c3ludGF4X2Vycm9y
X3N0YXR1cyA9PSAxKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICh5eW1zZyAhPSB5eW1z
Z2J1ZikKLSAgICAgICAgICAgICAgWVlTVEFDS19GUkVFICh5eW1zZyk7Ci0gICAgICAgICAgICB5
eW1zZyA9IChjaGFyICopIFlZU1RBQ0tfQUxMT0MgKHl5bXNnX2FsbG9jKTsKLSAgICAgICAgICAg
IGlmICgheXltc2cpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB5eW1zZyA9IHl5
bXNnYnVmOwotICAgICAgICAgICAgICAgIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOwot
ICAgICAgICAgICAgICAgIHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9IDI7Ci0gICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHl5
c3ludGF4X2Vycm9yX3N0YXR1cyA9IFlZU1lOVEFYX0VSUk9SOwotICAgICAgICAgICAgICAgIHl5
bXNncCA9IHl5bXNnOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB5eWVy
cm9yICgmeXlsbG9jLCBjb250ZXh0LCB5eW1zZ3ApOwotICAgICAgICBpZiAoeXlzeW50YXhfZXJy
b3Jfc3RhdHVzID09IDIpCi0gICAgICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKLSAgICAgIH0K
LSMgdW5kZWYgWVlTWU5UQVhfRVJST1IKLSNlbmRpZgotICAgIH0KLQotICB5eWVycm9yX3Jhbmdl
WzFdID0geXlsbG9jOwotCi0gIGlmICh5eWVycnN0YXR1cyA9PSAzKQotICAgIHsKLSAgICAgIC8q
IElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIg
YW4KLQkgZXJyb3IsIGRpc2NhcmQgaXQuICAqLwotCi0gICAgICBpZiAoeXljaGFyIDw9IFlZRU9G
KQotCXsKLQkgIC8qIFJldHVybiBmYWlsdXJlIGlmIGF0IGVuZCBvZiBpbnB1dC4gICovCi0JICBp
ZiAoeXljaGFyID09IFlZRU9GKQotCSAgICBZWUFCT1JUOwotCX0KLSAgICAgIGVsc2UKLQl7Ci0J
ICB5eWRlc3RydWN0ICgiRXJyb3I6IGRpc2NhcmRpbmciLAotCQkgICAgICB5eXRva2VuLCAmeXls
dmFsLCAmeXlsbG9jLCBjb250ZXh0KTsKLQkgIHl5Y2hhciA9IFlZRU1QVFk7Ci0JfQotICAgIH0K
LQotICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBzaGlm
dGluZyB0aGUgZXJyb3IKLSAgICAgdG9rZW4uICAqLwotICBnb3RvIHl5ZXJybGFiMTsKLQotCi0v
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwg
eXllcnJvcmxhYiAtLSBlcnJvciByYWlzZWQgZXhwbGljaXRseSBieSBZWUVSUk9SLiAgfAotYC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWVy
cm9ybGFiOgotCi0gIC8qIFBhY2lmeSBjb21waWxlcnMgbGlrZSBHQ0Mgd2hlbiB0aGUgdXNlciBj
b2RlIG5ldmVyIGludm9rZXMKLSAgICAgWVlFUlJPUiBhbmQgdGhlIGxhYmVsIHl5ZXJyb3JsYWIg
dGhlcmVmb3JlIG5ldmVyIGFwcGVhcnMgaW4gdXNlcgotICAgICBjb2RlLiAgKi8KLSAgaWYgKC8q
Q09OU1RDT05EKi8gMCkKLSAgICAgZ290byB5eWVycm9ybGFiOwotCi0gIHl5ZXJyb3JfcmFuZ2Vb
MV0gPSB5eWxzcFsxLXl5bGVuXTsKLSAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2Yg
dGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAotICAgICB0aGlzIFlZRVJST1IuICAqLwot
ICBZWVBPUFNUQUNLICh5eWxlbik7Ci0gIHl5bGVuID0gMDsKLSAgWVlfU1RBQ0tfUFJJTlQgKHl5
c3MsIHl5c3NwKTsKLSAgeXlzdGF0ZSA9ICp5eXNzcDsKLSAgZ290byB5eWVycmxhYjE7Ci0KLQot
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLgotfCB5eWVycmxhYjEgLS0gY29tbW9uIGNvZGUgZm9yIGJvdGggc3ludGF4IGVycm9y
IGFuZCBZWUVSUk9SLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXllcnJsYWIxOgotICB5eWVycnN0YXR1cyA9IDM7
CS8qIEVhY2ggcmVhbCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVudHMgdGhpcy4gICovCi0KLSAgZm9y
ICg7OykKLSAgICB7Ci0gICAgICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07Ci0gICAgICBpZiAoIXl5
cGFjdF92YWx1ZV9pc19kZWZhdWx0ICh5eW4pKQotCXsKLQkgIHl5biArPSBZWVRFUlJPUjsKLQkg
IGlmICgwIDw9IHl5biAmJiB5eW4gPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXluXSA9PSBZWVRFUlJP
UikKLQkgICAgewotCSAgICAgIHl5biA9IHl5dGFibGVbeXluXTsKLQkgICAgICBpZiAoMCA8IHl5
bikKLQkJYnJlYWs7Ci0JICAgIH0KLQl9Ci0KLSAgICAgIC8qIFBvcCB0aGUgY3VycmVudCBzdGF0
ZSBiZWNhdXNlIGl0IGNhbm5vdCBoYW5kbGUgdGhlIGVycm9yIHRva2VuLiAgKi8KLSAgICAgIGlm
ICh5eXNzcCA9PSB5eXNzKQotCVlZQUJPUlQ7Ci0KLSAgICAgIHl5ZXJyb3JfcmFuZ2VbMV0gPSAq
eXlsc3A7Ci0gICAgICB5eWRlc3RydWN0ICgiRXJyb3I6IHBvcHBpbmciLAotCQkgIHl5c3Rvc1t5
eXN0YXRlXSwgeXl2c3AsIHl5bHNwLCBjb250ZXh0KTsKLSAgICAgIFlZUE9QU1RBQ0sgKDEpOwot
ICAgICAgeXlzdGF0ZSA9ICp5eXNzcDsKLSAgICAgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNz
cCk7Ci0gICAgfQotCi0gIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOCi0gICor
K3l5dnNwID0geXlsdmFsOwotICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9FTkQKLQot
ICB5eWVycm9yX3JhbmdlWzJdID0geXlsbG9jOwotICAvKiBVc2luZyBZWUxMT0MgaXMgdGVtcHRp
bmcsIGJ1dCB3b3VsZCBjaGFuZ2UgdGhlIGxvY2F0aW9uIG9mCi0gICAgIHRoZSBsb29rYWhlYWQu
ICBZWUxPQyBpcyBhdmFpbGFibGUgdGhvdWdoLiAgKi8KLSAgWVlMTE9DX0RFRkFVTFQgKHl5bG9j
LCB5eWVycm9yX3JhbmdlLCAyKTsKLSAgKisreXlsc3AgPSB5eWxvYzsKLQotICAvKiBTaGlmdCB0
aGUgZXJyb3IgdG9rZW4uICAqLwotICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5c3Rv
c1t5eW5dLCB5eXZzcCwgeXlsc3ApOwotCi0gIHl5c3RhdGUgPSB5eW47Ci0gIGdvdG8geXluZXdz
dGF0ZTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5
YWNjZXB0bGFiIC0tIFlZQUNDRVBUIGNvbWVzIGhlcmUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWFjY2VwdGxhYjoKLSAgeXlyZXN1bHQgPSAwOwotICBn
b3RvIHl5cmV0dXJuOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgot
fCB5eWFib3J0bGFiIC0tIFlZQUJPUlQgY29tZXMgaGVyZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWFib3J0bGFiOgotICB5eXJlc3VsdCA9IDE7Ci0gIGdv
dG8geXlyZXR1cm47Ci0KLSNpZiAhZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9T
RQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgot
fCB5eWV4aGF1c3RlZGxhYiAtLSBtZW1vcnkgZXhoYXVzdGlvbiBjb21lcyBoZXJlLiAgfAotYC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXlleGhh
dXN0ZWRsYWI6Ci0gIHl5ZXJyb3IgKCZ5eWxsb2MsIGNvbnRleHQsIFlZXygibWVtb3J5IGV4aGF1
c3RlZCIpKTsKLSAgeXlyZXN1bHQgPSAyOwotICAvKiBGYWxsIHRocm91Z2guICAqLwotI2VuZGlm
Ci0KLXl5cmV0dXJuOgotICBpZiAoeXljaGFyICE9IFlZRU1QVFkpCi0gICAgewotICAgICAgLyog
TWFrZSBzdXJlIHdlIGhhdmUgbGF0ZXN0IGxvb2thaGVhZCB0cmFuc2xhdGlvbi4gIFNlZSBjb21t
ZW50cyBhdAotICAgICAgICAgdXNlciBzZW1hbnRpYyBhY3Rpb25zIGZvciB3aHkgdGhpcyBpcyBu
ZWNlc3NhcnkuICAqLwotICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOwotICAg
ICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6IGRpc2NhcmRpbmcgbG9va2FoZWFkIiwKLSAgICAgICAg
ICAgICAgICAgIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MsIGNvbnRleHQpOwotICAgIH0KLSAg
LyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRy
aWdnZXJlZAotICAgICB0aGlzIFlZQUJPUlQgb3IgWVlBQ0NFUFQuICAqLwotICBZWVBPUFNUQUNL
ICh5eWxlbik7Ci0gIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7Ci0gIHdoaWxlICh5eXNz
cCAhPSB5eXNzKQotICAgIHsKLSAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBwb3BwaW5nIiwK
LQkJICB5eXN0b3NbKnl5c3NwXSwgeXl2c3AsIHl5bHNwLCBjb250ZXh0KTsKLSAgICAgIFlZUE9Q
U1RBQ0sgKDEpOwotICAgIH0KLSNpZm5kZWYgeXlvdmVyZmxvdwotICBpZiAoeXlzcyAhPSB5eXNz
YSkKLSAgICBZWVNUQUNLX0ZSRUUgKHl5c3MpOwotI2VuZGlmCi0jaWYgWVlFUlJPUl9WRVJCT1NF
Ci0gIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKLSAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKLSNl
bmRpZgotICAvKiBNYWtlIHN1cmUgWVlJRCBpcyB1c2VkLiAgKi8KLSAgcmV0dXJuIFlZSUQgKHl5
cmVzdWx0KTsKLX0KLQotCi0KLQotCi1pbnQgZ2xzbGFuZ19wYXJzZShUUGFyc2VDb250ZXh0KiBj
b250ZXh0KSB7Ci0gICAgcmV0dXJuIHl5cGFyc2UoY29udGV4dCk7Ci19CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBhMzViMDIxZmJmZWY0MTdjN2MzZjZhZDJmNjRjYjY1YzYwZmZj
NTc4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5oCisrKyAvZGV2L251
bGwKQEAgLTEsMjI1ICswLDAgQEAKLS8qIEFwcGxlIE5vdGU6IEZvciB0aGUgYXZvaWRhbmNlIG9m
IGRvdWJ0LCBBcHBsZSBlbGVjdHMgdG8gZGlzdHJpYnV0ZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBCU0QgbGljZW5zZS4gKi8KLQotLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkg
R05VIEJpc29uIDIuNy4gICovCi0KLS8qIEJpc29uIGludGVyZmFjZSBmb3IgWWFjYy1saWtlIHBh
cnNlcnMgaW4gQwotICAgCi0gICAgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODktMTk5MCwgMjAw
MC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotICAgCi0gICBUaGlzIHByb2dy
YW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm
eQotICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhl
ciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0gICAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICAgCi0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICBHTlUg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICAgCi0gICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5n
bnUub3JnL2xpY2Vuc2VzLz4uICAqLwotCi0vKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3Ug
bWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKLSAgIHBhcnQgb3IgYWxsIG9m
IHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCi0gICB1
bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3QgaXRz
ZWxmIGEKLSAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9kaWZp
ZWQgdmVyc2lvbiB0aGVyZW9mCi0gICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFsdGVybmF0aXZl
bHksIGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlCi0gICB0aGUgcGFyc2VyIHNrZWxldG9u
IGl0c2VsZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCi0gICBzcGVjaWFs
IGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRp
bmcKLSAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdl
bmVyYWwgUHVibGljCi0gICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4K
LSAgIAotICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiBpbgotICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLwotCi0jaWZu
ZGVmIFlZX1lZX0dMU0xBTkdfVEFCX0hfSU5DTFVERUQKLSMgZGVmaW5lIFlZX1lZX0dMU0xBTkdf
VEFCX0hfSU5DTFVERUQKLS8qIEVuYWJsaW5nIHRyYWNlcy4gICovCi0jaWZuZGVmIFlZREVCVUcK
LSMgZGVmaW5lIFlZREVCVUcgMAotI2VuZGlmCi0jaWYgWVlERUJVRwotZXh0ZXJuIGludCB5eWRl
YnVnOwotI2VuZGlmCi0vKiAiJWNvZGUgcmVxdWlyZXMiIGJsb2Nrcy4gICovCi0KLQotI2RlZmlu
ZSBZWUxUWVBFIFRTb3VyY2VMb2MKLSNkZWZpbmUgWVlMVFlQRV9JU19ERUNMQVJFRCAxCi0jZGVm
aW5lIFNIX01BWF9UT0tFTl9MRU5HVEggMjU2ICAvLyBXZWJHTCBzcGVjLgotCi0KLQotCi0vKiBU
b2tlbnMuICAqLwotI2lmbmRlZiBZWVRPS0VOVFlQRQotIyBkZWZpbmUgWVlUT0tFTlRZUEUKLSAg
IC8qIFB1dCB0aGUgdG9rZW5zIGludG8gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBHREIgYW5k
IG90aGVyIGRlYnVnZ2VycwotICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8KLSAgIGVudW0geXl0
b2tlbnR5cGUgewotICAgICBJTlZBUklBTlQgPSAyNTgsCi0gICAgIEhJR0hfUFJFQ0lTSU9OID0g
MjU5LAotICAgICBNRURJVU1fUFJFQ0lTSU9OID0gMjYwLAotICAgICBMT1dfUFJFQ0lTSU9OID0g
MjYxLAotICAgICBQUkVDSVNJT04gPSAyNjIsCi0gICAgIEFUVFJJQlVURSA9IDI2MywKLSAgICAg
Q09OU1RfUVVBTCA9IDI2NCwKLSAgICAgQk9PTF9UWVBFID0gMjY1LAotICAgICBGTE9BVF9UWVBF
ID0gMjY2LAotICAgICBJTlRfVFlQRSA9IDI2NywKLSAgICAgQlJFQUsgPSAyNjgsCi0gICAgIENP
TlRJTlVFID0gMjY5LAotICAgICBETyA9IDI3MCwKLSAgICAgRUxTRSA9IDI3MSwKLSAgICAgRk9S
ID0gMjcyLAotICAgICBJRiA9IDI3MywKLSAgICAgRElTQ0FSRCA9IDI3NCwKLSAgICAgUkVUVVJO
ID0gMjc1LAotICAgICBCVkVDMiA9IDI3NiwKLSAgICAgQlZFQzMgPSAyNzcsCi0gICAgIEJWRUM0
ID0gMjc4LAotICAgICBJVkVDMiA9IDI3OSwKLSAgICAgSVZFQzMgPSAyODAsCi0gICAgIElWRUM0
ID0gMjgxLAotICAgICBWRUMyID0gMjgyLAotICAgICBWRUMzID0gMjgzLAotICAgICBWRUM0ID0g
Mjg0LAotICAgICBNQVRSSVgyID0gMjg1LAotICAgICBNQVRSSVgzID0gMjg2LAotICAgICBNQVRS
SVg0ID0gMjg3LAotICAgICBJTl9RVUFMID0gMjg4LAotICAgICBPVVRfUVVBTCA9IDI4OSwKLSAg
ICAgSU5PVVRfUVVBTCA9IDI5MCwKLSAgICAgVU5JRk9STSA9IDI5MSwKLSAgICAgVkFSWUlORyA9
IDI5MiwKLSAgICAgU1RSVUNUID0gMjkzLAotICAgICBWT0lEX1RZUEUgPSAyOTQsCi0gICAgIFdI
SUxFID0gMjk1LAotICAgICBTQU1QTEVSMkQgPSAyOTYsCi0gICAgIFNBTVBMRVJDVUJFID0gMjk3
LAotICAgICBTQU1QTEVSX0VYVEVSTkFMX09FUyA9IDI5OCwKLSAgICAgU0FNUExFUjJEUkVDVCA9
IDI5OSwKLSAgICAgSURFTlRJRklFUiA9IDMwMCwKLSAgICAgVFlQRV9OQU1FID0gMzAxLAotICAg
ICBGTE9BVENPTlNUQU5UID0gMzAyLAotICAgICBJTlRDT05TVEFOVCA9IDMwMywKLSAgICAgQk9P
TENPTlNUQU5UID0gMzA0LAotICAgICBMRUZUX09QID0gMzA1LAotICAgICBSSUdIVF9PUCA9IDMw
NiwKLSAgICAgSU5DX09QID0gMzA3LAotICAgICBERUNfT1AgPSAzMDgsCi0gICAgIExFX09QID0g
MzA5LAotICAgICBHRV9PUCA9IDMxMCwKLSAgICAgRVFfT1AgPSAzMTEsCi0gICAgIE5FX09QID0g
MzEyLAotICAgICBBTkRfT1AgPSAzMTMsCi0gICAgIE9SX09QID0gMzE0LAotICAgICBYT1JfT1Ag
PSAzMTUsCi0gICAgIE1VTF9BU1NJR04gPSAzMTYsCi0gICAgIERJVl9BU1NJR04gPSAzMTcsCi0g
ICAgIEFERF9BU1NJR04gPSAzMTgsCi0gICAgIE1PRF9BU1NJR04gPSAzMTksCi0gICAgIExFRlRf
QVNTSUdOID0gMzIwLAotICAgICBSSUdIVF9BU1NJR04gPSAzMjEsCi0gICAgIEFORF9BU1NJR04g
PSAzMjIsCi0gICAgIFhPUl9BU1NJR04gPSAzMjMsCi0gICAgIE9SX0FTU0lHTiA9IDMyNCwKLSAg
ICAgU1VCX0FTU0lHTiA9IDMyNSwKLSAgICAgTEVGVF9QQVJFTiA9IDMyNiwKLSAgICAgUklHSFRf
UEFSRU4gPSAzMjcsCi0gICAgIExFRlRfQlJBQ0tFVCA9IDMyOCwKLSAgICAgUklHSFRfQlJBQ0tF
VCA9IDMyOSwKLSAgICAgTEVGVF9CUkFDRSA9IDMzMCwKLSAgICAgUklHSFRfQlJBQ0UgPSAzMzEs
Ci0gICAgIERPVCA9IDMzMiwKLSAgICAgQ09NTUEgPSAzMzMsCi0gICAgIENPTE9OID0gMzM0LAot
ICAgICBFUVVBTCA9IDMzNSwKLSAgICAgU0VNSUNPTE9OID0gMzM2LAotICAgICBCQU5HID0gMzM3
LAotICAgICBEQVNIID0gMzM4LAotICAgICBUSUxERSA9IDMzOSwKLSAgICAgUExVUyA9IDM0MCwK
LSAgICAgU1RBUiA9IDM0MSwKLSAgICAgU0xBU0ggPSAzNDIsCi0gICAgIFBFUkNFTlQgPSAzNDMs
Ci0gICAgIExFRlRfQU5HTEUgPSAzNDQsCi0gICAgIFJJR0hUX0FOR0xFID0gMzQ1LAotICAgICBW
RVJUSUNBTF9CQVIgPSAzNDYsCi0gICAgIENBUkVUID0gMzQ3LAotICAgICBBTVBFUlNBTkQgPSAz
NDgsCi0gICAgIFFVRVNUSU9OID0gMzQ5Ci0gICB9OwotI2VuZGlmCi0KLQotI2lmICEgZGVmaW5l
ZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECi10eXBlZGVmIHVuaW9u
IFlZU1RZUEUKLXsKLQotCi0gICAgc3RydWN0IHsKLSAgICAgICAgdW5pb24gewotICAgICAgICAg
ICAgVFN0cmluZyAqc3RyaW5nOwotICAgICAgICAgICAgZmxvYXQgZjsKLSAgICAgICAgICAgIGlu
dCBpOwotICAgICAgICAgICAgYm9vbCBiOwotICAgICAgICB9OwotICAgICAgICBUU3ltYm9sKiBz
eW1ib2w7Ci0gICAgfSBsZXg7Ci0gICAgc3RydWN0IHsKLSAgICAgICAgVE9wZXJhdG9yIG9wOwot
ICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKLSAg
ICAgICAgICAgIFRJbnRlcm1Ob2RlUGFpciBub2RlUGFpcjsKLSAgICAgICAgICAgIFRJbnRlcm1U
eXBlZCogaW50ZXJtVHlwZWROb2RlOwotICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSogaW50
ZXJtQWdncmVnYXRlOwotICAgICAgICB9OwotICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAgICBU
UHVibGljVHlwZSB0eXBlOwotICAgICAgICAgICAgVFByZWNpc2lvbiBwcmVjaXNpb247Ci0gICAg
ICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllcjsKLSAgICAgICAgICAgIFRGdW5jdGlvbiogZnVu
Y3Rpb247Ci0gICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtOwotICAgICAgICAgICAgVEZpZWxk
KiBmaWVsZDsKLSAgICAgICAgICAgIFRGaWVsZExpc3QqIGZpZWxkTGlzdDsKLSAgICAgICAgfTsK
LSAgICB9IGludGVybTsKLQotCi0KLX0gWVlTVFlQRTsKLSMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJ
VklBTCAxCi0jIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUg
d2l0aGRyYXduICovCi0jIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKLSNlbmRpZgotCi0j
aWYgISBkZWZpbmVkIFlZTFRZUEUgJiYgISBkZWZpbmVkIFlZTFRZUEVfSVNfREVDTEFSRUQKLXR5
cGVkZWYgc3RydWN0IFlZTFRZUEUKLXsKLSAgaW50IGZpcnN0X2xpbmU7Ci0gIGludCBmaXJzdF9j
b2x1bW47Ci0gIGludCBsYXN0X2xpbmU7Ci0gIGludCBsYXN0X2NvbHVtbjsKLX0gWVlMVFlQRTsK
LSMgZGVmaW5lIHl5bHR5cGUgWVlMVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJh
d24gKi8KLSMgZGVmaW5lIFlZTFRZUEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlMVFlQRV9J
U19UUklWSUFMIDEKLSNlbmRpZgotCi0KLSNpZmRlZiBZWVBBUlNFX1BBUkFNCi0jaWYgZGVmaW5l
ZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCi1pbnQgeXlwYXJzZSAodm9pZCAqWVlQ
QVJTRV9QQVJBTSk7Ci0jZWxzZQotaW50IHl5cGFyc2UgKCk7Ci0jZW5kaWYKLSNlbHNlIC8qICEg
WVlQQVJTRV9QQVJBTSAqLwotI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVz
cGx1cwotaW50IHl5cGFyc2UgKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOwotI2Vsc2UKLWludCB5
eXBhcnNlICgpOwotI2VuZGlmCi0jZW5kaWYgLyogISBZWVBBUlNFX1BBUkFNICovCi0KLSNlbmRp
ZiAvKiAhWVlfWVlfR0xTTEFOR19UQUJfSF9JTkNMVURFRCAgKi8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1PdXQuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDEzYWE5NmFmNmQ2MmQxMGU3ZWY3MmYyZmVhYzM2NjJlNzNkYjg2NmUu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw0MjQgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVy
L2xvY2FsaW50ZXJtZWRpYXRlLmgiCi0KLS8vCi0vLyBUd28gcHVycG9zZXM6Ci0vLyAxLiAgU2hv
dyBhbiBleGFtcGxlIG9mIGhvdyB0byBpdGVyYXRlIHRyZWUuICBGdW5jdGlvbnMgY2FuCi0vLyAg
ICAgYWxzbyBkaXJlY3RseSBjYWxsIFRyYXZlcnNlKCkgb24gY2hpbGRyZW4gdGhlbXNlbHZlcyB0
bwotLy8gICAgIGhhdmUgZmluZXIgZ3JhaW5lZCBjb250cm9sIG92ZXIgdGhlIHByb2Nlc3MgdGhh
biBzaG93biBoZXJlLgotLy8gICAgIFNlZSB0aGUgbGFzdCBmdW5jdGlvbiBmb3IgaG93IHRvIGdl
dCBzdGFydGVkLgotLy8gMi4gIFByaW50IG91dCBhIHRleHQgYmFzZWQgZGVzY3JpcHRpb24gb2Yg
dGhlIHRyZWUuCi0vLwotCi0vLwotLy8gVXNlIHRoaXMgY2xhc3MgdG8gY2FycnkgYWxvbmcgZGF0
YSBmcm9tIG5vZGUgdG8gbm9kZSBpbgotLy8gdGhlIHRyYXZlcnNhbAotLy8KLWNsYXNzIFRPdXRw
dXRUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7Ci1wdWJsaWM6Ci0gICAgVE91
dHB1dFRyYXZlcnNlcihUSW5mb1NpbmtCYXNlJiBpKSA6IHNpbmsoaSkgeyB9Ci0gICAgVEluZm9T
aW5rQmFzZSYgc2luazsKLQotcHJvdGVjdGVkOgotICAgIHZvaWQgdmlzaXRTeW1ib2woVEludGVy
bVN5bWJvbCopOwotICAgIHZvaWQgdmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVu
aW9uKik7Ci0gICAgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSop
OwotICAgIGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5Kik7Ci0gICAg
Ym9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiopOwotICAg
IGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKLSAg
ICBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqKTsKLSAgICBib29sIHZp
c2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKik7Ci19OwotCi1UU3RyaW5nIFRU
eXBlOjpnZXRDb21wbGV0ZVN0cmluZygpIGNvbnN0Ci17Ci0gICAgVFN0cmluZ1N0cmVhbSBzdHJl
YW07Ci0KLSAgICBpZiAocXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSAmJiBxdWFsaWZpZXIgIT0g
RXZxR2xvYmFsKQotICAgICAgICBzdHJlYW0gPDwgZ2V0UXVhbGlmaWVyU3RyaW5nKCkgPDwgIiAi
IDw8IGdldFByZWNpc2lvblN0cmluZygpIDw8ICIgIjsKLSAgICBpZiAoYXJyYXkpCi0gICAgICAg
IHN0cmVhbSA8PCAiYXJyYXlbIiA8PCBnZXRBcnJheVNpemUoKSA8PCAiXSBvZiAiOwotICAgIGlm
IChtYXRyaXgpCi0gICAgICAgIHN0cmVhbSA8PCBzaXplIDw8ICJYIiA8PCBzaXplIDw8ICIgbWF0
cml4IG9mICI7Ci0gICAgZWxzZSBpZiAoc2l6ZSA+IDEpCi0gICAgICAgIHN0cmVhbSA8PCBzaXpl
IDw8ICItY29tcG9uZW50IHZlY3RvciBvZiAiOwotCi0gICAgc3RyZWFtIDw8IGdldEJhc2ljU3Ry
aW5nKCk7Ci0gICAgcmV0dXJuIHN0cmVhbS5zdHIoKTsKLX0KLQotLy8KLS8vIEhlbHBlciBmdW5j
dGlvbnMgZm9yIHByaW50aW5nLCBub3QgcGFydCBvZiB0cmF2ZXJzaW5nLgotLy8KLQotdm9pZCBP
dXRwdXRUcmVlVGV4dChUSW5mb1NpbmtCYXNlJiBzaW5rLCBUSW50ZXJtTm9kZSogbm9kZSwgY29u
c3QgaW50IGRlcHRoKQotewotICAgIGludCBpOwotCi0gICAgc2luay5sb2NhdGlvbihub2RlLT5n
ZXRMaW5lKCkpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IGRlcHRoOyArK2kpCi0gICAgICAgIHNp
bmsgPDwgIiAgIjsKLX0KLQotLy8KLS8vIFRoZSByZXN0IG9mIHRoZSBmaWxlIGFyZSB0aGUgdHJh
dmVyc2FsIGZ1bmN0aW9ucy4gIFRoZSBsYXN0IG9uZQotLy8gaXMgdGhlIG9uZSB0aGF0IHN0YXJ0
cyB0aGUgdHJhdmVyc2FsLgotLy8KLS8vIFJldHVybiB0cnVlIGZyb20gaW50ZXJpb3Igbm9kZXMg
dG8gaGF2ZSB0aGUgZXh0ZXJuYWwgdHJhdmVyc2FsCi0vLyBjb250aW51ZSBvbiB0byBjaGlsZHJl
bi4gIElmIHlvdSBwcm9jZXNzIGNoaWxkcmVuIHlvdXJzZWxmLAotLy8gcmV0dXJuIGZhbHNlLgot
Ly8KLQotdm9pZCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBu
b2RlKQotewotICAgIE91dHB1dFRyZWVUZXh0KHNpbmssIG5vZGUsIGRlcHRoKTsKLQotICAgIHNp
bmsgPDwgIiciIDw8IG5vZGUtPmdldFN5bWJvbCgpIDw8ICInICI7Ci0gICAgc2luayA8PCAiKCIg
PDwgbm9kZS0+Z2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiKVxuIjsKLX0KLQotYm9vbCBUT3V0cHV0
VHJhdmVyc2VyOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSogbm9kZSkK
LXsKLSAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBzaW5rOwotCi0gICAgT3V0cHV0VHJlZVRleHQo
b3V0LCBub2RlLCBkZXB0aCk7Ci0KLSAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpIHsKLSAgICAg
ICAgY2FzZSBFT3BBc3NpZ246ICAgICAgICAgICAgICAgICAgIG91dCA8PCAibW92ZSBzZWNvbmQg
Y2hpbGQgdG8gZmlyc3QgY2hpbGQiOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9w
SW5pdGlhbGl6ZTogICAgICAgICAgICAgICBvdXQgPDwgImluaXRpYWxpemUgZmlyc3QgY2hpbGQg
d2l0aCBzZWNvbmQgY2hpbGQiOyAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjog
ICAgICAgICAgICAgICAgb3V0IDw8ICJhZGQgc2Vjb25kIGNoaWxkIGludG8gZmlyc3QgY2hpbGQi
OyAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246ICAgICAgICAgICAg
ICAgIG91dCA8PCAic3VidHJhY3Qgc2Vjb25kIGNoaWxkIGludG8gZmlyc3QgY2hpbGQiOyAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTXVsQXNzaWduOiAgICAgICAgICAgICAgICBvdXQgPDwg
Im11bHRpcGx5IHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOiAgb3V0IDw8ICJtYXRyaXggbXVs
dCBzZWNvbmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7ICBicmVhazsKLSAgICAgICAgY2FzZSBF
T3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjogIG91dCA8PCAidmVjdG9yIHNjYWxlIHNlY29uZCBj
aGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTWF0cml4VGlt
ZXNTY2FsYXJBc3NpZ246ICBvdXQgPDwgIm1hdHJpeCBzY2FsZSBzZWNvbmQgY2hpbGQgaW50byBm
aXJzdCBjaGlsZCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4QXNz
aWduOiAgb3V0IDw8ICJtYXRyaXggbXVsdCBzZWNvbmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7
IGJyZWFrOwotICAgICAgICBjYXNlIEVPcERpdkFzc2lnbjogICAgICAgICAgICAgICAgb3V0IDw8
ICJkaXZpZGUgc2Vjb25kIGNoaWxkIGludG8gZmlyc3QgY2hpbGQiOyAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDogICBvdXQgPDwgImRpcmVjdCBpbmRleCI7ICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgRU9wSW5kZXhJbmRpcmVjdDogb3V0IDw8ICJpbmRpcmVjdCBpbmRl
eCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3RydWN0OiAgIG91dCA8PCAi
ZGlyZWN0IGluZGV4IGZvciBzdHJ1Y3R1cmUiOyAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFZl
Y3RvclN3aXp6bGU6IG91dCA8PCAidmVjdG9yIHN3aXp6bGUiOyBicmVhazsKLQotICAgICAgICBj
YXNlIEVPcEFkZDogICAgb3V0IDw8ICJhZGQiOyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEVPcFN1YjogICAgb3V0IDw8ICJzdWJ0cmFjdCI7ICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEVPcE11bDogICAgb3V0IDw8ICJjb21wb25lbnQtd2lzZSBt
dWx0aXBseSI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcERpdjogICAgb3V0IDw8ICJkaXZpZGUi
OyAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEVxdWFsOiAgICAgICAg
ICAgIG91dCA8PCAiQ29tcGFyZSBFcXVhbCI7ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBFT3BOb3RFcXVhbDogICAgICAgICBvdXQgPDwgIkNvbXBhcmUgTm90IEVxdWFsIjsg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTGVzc1RoYW46ICAgICAgICAgb3V0
IDw8ICJDb21wYXJlIExlc3MgVGhhbiI7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEVPcEdyZWF0ZXJUaGFuOiAgICAgIG91dCA8PCAiQ29tcGFyZSBHcmVhdGVyIFRoYW4iOyAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOiAgICBvdXQgPDwgIkNv
bXBhcmUgTGVzcyBUaGFuIG9yIEVxdWFsIjsgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wR3Jl
YXRlclRoYW5FcXVhbDogb3V0IDw8ICJDb21wYXJlIEdyZWF0ZXIgVGhhbiBvciBFcXVhbCI7IGJy
ZWFrOwotCi0gICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXI6IG91dCA8PCAidmVjdG9y
LXNjYWxlIjsgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRy
aXg6IG91dCA8PCAidmVjdG9yLXRpbWVzLW1hdHJpeCI7ICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RU9wTWF0cml4VGltZXNWZWN0b3I6IG91dCA8PCAibWF0cml4LXRpbWVzLXZlY3RvciI7ICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXI6IG91dCA8PCAibWF0cml4LXNj
YWxlIjsgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXg6
IG91dCA8PCAibWF0cml4LW11bHRpcGx5IjsgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBF
T3BMb2dpY2FsT3I6ICBvdXQgPDwgImxvZ2ljYWwtb3IiOyAgIGJyZWFrOwotICAgICAgICBjYXNl
IEVPcExvZ2ljYWxYb3I6IG91dCA8PCAibG9naWNhbC14b3IiOyBicmVhazsKLSAgICAgICAgY2Fz
ZSBFT3BMb2dpY2FsQW5kOiBvdXQgPDwgImxvZ2ljYWwtYW5kIjsgYnJlYWs7Ci0gICAgICAgIGRl
ZmF1bHQ6IG91dCA8PCAiPHVua25vd24gb3A+IjsKLSAgICB9Ci0KLSAgICBvdXQgPDwgIiAoIiA8
PCBub2RlLT5nZXRDb21wbGV0ZVN0cmluZygpIDw8ICIpIjsKLQotICAgIG91dCA8PCAiXG4iOwot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRVbmFy
eShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQotewotICAgIFRJbmZvU2lua0Jhc2Um
IG91dCA9IHNpbms7Ci0KLSAgICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUsIGRlcHRoKTsKLQot
ICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkgewotICAgICAgICBjYXNlIEVPcE5lZ2F0aXZlOiAg
ICAgICBvdXQgPDwgIk5lZ2F0ZSB2YWx1ZSI7ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RU9wVmVjdG9yTG9naWNhbE5vdDoKLSAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OiAgICAgb3V0
IDw8ICJOZWdhdGUgY29uZGl0aW9uYWwiOyAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wUG9z
dEluY3JlbWVudDogIG91dCA8PCAiUG9zdC1JbmNyZW1lbnQiOyAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OiAgb3V0IDw8ICJQb3N0LURlY3JlbWVudCI7ICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDogICBvdXQgPDwgIlByZS1JbmNy
ZW1lbnQiOyAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OiAgIG91
dCA8PCAiUHJlLURlY3JlbWVudCI7ICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEVPcENv
bnZJbnRUb0Jvb2w6ICBvdXQgPDwgIkNvbnZlcnQgaW50IHRvIGJvb2wiOyAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRU9wQ29udkZsb2F0VG9Cb29sOm91dCA8PCAiQ29udmVydCBmbG9hdCB0byBib29s
IjticmVhazsKLSAgICAgICAgY2FzZSBFT3BDb252Qm9vbFRvRmxvYXQ6b3V0IDw8ICJDb252ZXJ0
IGJvb2wgdG8gZmxvYXQiO2JyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnZJbnRUb0Zsb2F0OiBv
dXQgPDwgIkNvbnZlcnQgaW50IHRvIGZsb2F0IjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29u
dkZsb2F0VG9JbnQ6IG91dCA8PCAiQ29udmVydCBmbG9hdCB0byBpbnQiOyBicmVhazsKLSAgICAg
ICAgY2FzZSBFT3BDb252Qm9vbFRvSW50OiAgb3V0IDw8ICJDb252ZXJ0IGJvb2wgdG8gaW50Ijsg
IGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wUmFkaWFuczogICAgICAgIG91dCA8PCAicmFkaWFu
cyI7ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BEZWdyZWVzOiAgICAgICAg
b3V0IDw8ICJkZWdyZWVzIjsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFNp
bjogICAgICAgICAgICBvdXQgPDwgInNpbmUiOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRU9wQ29zOiAgICAgICAgICAgIG91dCA8PCAiY29zaW5lIjsgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BUYW46ICAgICAgICAgICAgb3V0IDw8ICJ0YW5nZW50
IjsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEFzaW46ICAgICAgICAgICBv
dXQgPDwgImFyYyBzaW5lIjsgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQWNv
czogICAgICAgICAgIG91dCA8PCAiYXJjIGNvc2luZSI7ICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBFT3BBdGFuOiAgICAgICAgICAgb3V0IDw8ICJhcmMgdGFuZ2VudCI7ICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wRXhwOiAgICAgICAgICAgIG91dCA8PCAiZXhwIjsg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BMb2c6ICAgICAgICAgICAg
b3V0IDw8ICJsb2ciOyAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEV4
cDI6ICAgICAgICAgICBvdXQgPDwgImV4cDIiOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRU9wTG9nMjogICAgICAgICAgIG91dCA8PCAibG9nMiI7ICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BTcXJ0OiAgICAgICAgICAgb3V0IDw8ICJzcXJ0Ijsg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEludmVyc2VTcXJ0OiAgICBv
dXQgPDwgImludmVyc2Ugc3FydCI7ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BB
YnM6ICAgICAgICAgICAgb3V0IDw8ICJBYnNvbHV0ZSB2YWx1ZSI7ICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEVPcFNpZ246ICAgICAgICAgICBvdXQgPDwgIlNpZ24iOyAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wRmxvb3I6ICAgICAgICAgIG91dCA8PCAiRmxvb3Ii
OyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDZWlsOiAgICAgICAgICAg
b3V0IDw8ICJDZWlsaW5nIjsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEZy
YWN0OiAgICAgICAgICBvdXQgPDwgIkZyYWN0aW9uIjsgICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgY2FzZSBFT3BMZW5ndGg6ICAgICAgICAgb3V0IDw8ICJsZW5ndGgiOyAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcE5vcm1hbGl6ZTogICAgICBvdXQgPDwgIm5vcm1h
bGl6ZSI7ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAvLwljYXNlIEVPcERQZHg6ICAg
ICAgICAgICBvdXQgPDwgImRQZHgiOyAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAvLwljYXNlIEVPcERQZHk6ICAgICAgICAgICBvdXQgPDwgImRQZHki
OyAgICAgICAgICAgICAgICAgYnJlYWs7ICAgCi0gICAgICAgICAgICAvLwljYXNlIEVPcEZ3aWR0
aDogICAgICAgICBvdXQgPDwgImZ3aWR0aCI7ICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAg
ICAgICAgICAgIAotCi0gICAgICAgIGNhc2UgRU9wQW55OiAgICAgICAgICAgIG91dCA8PCAiYW55
IjsgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BBbGw6ICAgICAgICAg
ICAgb3V0IDw8ICJhbGwiOyAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBvdXQucHJlZml4KEVQcmVmaXhFcnJvcik7Ci0gICAgICAgICAgICBv
dXQgPDwgIkJhZCB1bmFyeSBvcCI7Ci0gICAgfQotCi0gICAgb3V0IDw8ICIgKCIgPDwgbm9kZS0+
Z2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiKSI7Ci0KLSAgICBvdXQgPDwgIlxuIjsKLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0QWdncmVnYXRlKFZp
c2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQotewotICAgIFRJbmZvU2lua0Jhc2Um
IG91dCA9IHNpbms7Ci0KLSAgICBpZiAobm9kZS0+Z2V0T3AoKSA9PSBFT3BOdWxsKSB7Ci0gICAg
ICAgIG91dC5wcmVmaXgoRVByZWZpeEVycm9yKTsKLSAgICAgICAgb3V0IDw8ICJub2RlIGlzIHN0
aWxsIEVPcE51bGwhIjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgT3V0cHV0
VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7Ci0KLSAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkp
IHsKLSAgICAgICAgY2FzZSBFT3BTZXF1ZW5jZTogICAgICBvdXQgPDwgIlNlcXVlbmNlXG4iOyBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBFT3BDb21tYTogICAgICAgICBvdXQgPDwgIkNvbW1h
XG4iOyByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBFT3BGdW5jdGlvbjogICAgICBvdXQgPDwg
IkZ1bmN0aW9uIERlZmluaXRpb246ICIgPDwgbm9kZS0+Z2V0TmFtZSgpOyBicmVhazsKLSAgICAg
ICAgY2FzZSBFT3BGdW5jdGlvbkNhbGw6ICBvdXQgPDwgIkZ1bmN0aW9uIENhbGw6ICIgPDwgbm9k
ZS0+Z2V0TmFtZSgpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BQYXJhbWV0ZXJzOiAgICBvdXQg
PDwgIkZ1bmN0aW9uIFBhcmFtZXRlcnM6ICI7ICAgICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OiBvdXQgPDwgIkNvbnN0cnVjdCBmbG9hdCI7IGJyZWFr
OwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzI6ICBvdXQgPDwgIkNvbnN0cnVjdCB2ZWMy
IjsgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzM6ICBvdXQgPDwgIkNvbnN0
cnVjdCB2ZWMzIjsgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzQ6ICBvdXQg
PDwgIkNvbnN0cnVjdCB2ZWM0IjsgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJv
b2w6ICBvdXQgPDwgIkNvbnN0cnVjdCBib29sIjsgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdEJWZWMyOiBvdXQgPDwgIkNvbnN0cnVjdCBidmVjMiI7IGJyZWFrOwotICAgICAgICBj
YXNlIEVPcENvbnN0cnVjdEJWZWMzOiBvdXQgPDwgIkNvbnN0cnVjdCBidmVjMyI7IGJyZWFrOwot
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWM0OiBvdXQgPDwgIkNvbnN0cnVjdCBidmVjNCI7
IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDogICBvdXQgPDwgIkNvbnN0cnVj
dCBpbnQiOyAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMyOiBvdXQgPDwg
IkNvbnN0cnVjdCBpdmVjMiI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMz
OiBvdXQgPDwgIkNvbnN0cnVjdCBpdmVjMyI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0
cnVjdElWZWM0OiBvdXQgPDwgIkNvbnN0cnVjdCBpdmVjNCI7IGJyZWFrOwotICAgICAgICBjYXNl
IEVPcENvbnN0cnVjdE1hdDI6ICBvdXQgPDwgIkNvbnN0cnVjdCBtYXQyIjsgIGJyZWFrOwotICAg
ICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6ICBvdXQgPDwgIkNvbnN0cnVjdCBtYXQzIjsgIGJy
ZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6ICBvdXQgPDwgIkNvbnN0cnVjdCBt
YXQ0IjsgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFN0cnVjdDogIG91dCA8PCAi
Q29uc3RydWN0IHN0cnVjdHVyZSI7ICBicmVhazsKLQotICAgICAgICBjYXNlIEVPcExlc3NUaGFu
OiAgICAgICAgIG91dCA8PCAiQ29tcGFyZSBMZXNzIFRoYW4iOyAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjogICAgICBvdXQgPDwgIkNvbXBhcmUgR3JlYXRl
ciBUaGFuIjsgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDog
ICAgb3V0IDw8ICJDb21wYXJlIExlc3MgVGhhbiBvciBFcXVhbCI7ICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6IG91dCA8PCAiQ29tcGFyZSBHcmVhdGVyIFRoYW4g
b3IgRXF1YWwiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BWZWN0b3JFcXVhbDogICAgICBvdXQg
PDwgIkVxdWFsIjsgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RU9wVmVjdG9yTm90RXF1YWw6ICAgb3V0IDw8ICJOb3RFcXVhbCI7ICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wTW9kOiAgICAgICAgICAgb3V0IDw8ICJtb2Qi
OyAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFBvdzogICAgICAgICAgIG91dCA8PCAi
cG93IjsgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEVPcEF0YW46ICAgICAgICAgIG91
dCA8PCAiYXJjIHRhbmdlbnQiOyBicmVhazsKLQotICAgICAgICBjYXNlIEVPcE1pbjogICAgICAg
ICAgIG91dCA8PCAibWluIjsgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BNYXg6ICAg
ICAgICAgICBvdXQgPDwgIm1heCI7ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ2xh
bXA6ICAgICAgICAgb3V0IDw8ICJjbGFtcCI7ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVP
cE1peDogICAgICAgICAgIG91dCA8PCAibWl4IjsgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBFT3BTdGVwOiAgICAgICAgICBvdXQgPDwgInN0ZXAiOyAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRU9wU21vb3RoU3RlcDogICAgb3V0IDw8ICJzbW9vdGhzdGVwIjsgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgRU9wRGlzdGFuY2U6ICAgICAgb3V0IDw8ICJkaXN0YW5jZSI7ICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcERvdDogICAgICAgICAgIG91dCA8PCAiZG90
LXByb2R1Y3QiOyAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDcm9zczogICAg
ICAgICBvdXQgPDwgImNyb3NzLXByb2R1Y3QiOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRU9wRmFjZUZvcndhcmQ6ICAgb3V0IDw8ICJmYWNlLWZvcndhcmQiOyAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEVPcFJlZmxlY3Q6ICAgICAgIG91dCA8PCAicmVmbGVjdCI7ICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BSZWZyYWN0OiAgICAgICBvdXQg
PDwgInJlZnJhY3QiOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTXVs
OiAgICAgICAgICAgb3V0IDw8ICJjb21wb25lbnQtd2lzZSBtdWx0aXBseSI7IGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgRU9wRGVjbGFyYXRpb246ICAgb3V0IDw8ICJEZWNsYXJhdGlvbjogIjsgICBi
cmVhazsKLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgb3V0LnByZWZpeChFUHJlZml4
RXJyb3IpOwotICAgICAgICAgICAgb3V0IDw8ICJCYWQgYWdncmVnYXRpb24gb3AiOwotICAgIH0K
LQotICAgIGlmIChub2RlLT5nZXRPcCgpICE9IEVPcFNlcXVlbmNlICYmIG5vZGUtPmdldE9wKCkg
IT0gRU9wUGFyYW1ldGVycykKLSAgICAgICAgb3V0IDw8ICIgKCIgPDwgbm9kZS0+Z2V0Q29tcGxl
dGVTdHJpbmcoKSA8PCAiKSI7Ci0KLSAgICBvdXQgPDwgIlxuIjsKLQotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0
LCBUSW50ZXJtU2VsZWN0aW9uKiBub2RlKQotewotICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IHNp
bms7Ci0KLSAgICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUsIGRlcHRoKTsKLQotICAgIG91dCA8
PCAiVGVzdCBjb25kaXRpb24gYW5kIHNlbGVjdCI7Ci0gICAgb3V0IDw8ICIgKCIgPDwgbm9kZS0+
Z2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiKVxuIjsKLQotICAgICsrZGVwdGg7Ci0KLSAgICBPdXRw
dXRUcmVlVGV4dChzaW5rLCBub2RlLCBkZXB0aCk7Ci0gICAgb3V0IDw8ICJDb25kaXRpb25cbiI7
Ci0gICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOwotCi0gICAgT3V0cHV0
VHJlZVRleHQoc2luaywgbm9kZSwgZGVwdGgpOwotICAgIGlmIChub2RlLT5nZXRUcnVlQmxvY2so
KSkgewotICAgICAgICBvdXQgPDwgInRydWUgY2FzZVxuIjsKLSAgICAgICAgbm9kZS0+Z2V0VHJ1
ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOwotICAgIH0gZWxzZQotICAgICAgICBvdXQgPDwgInRy
dWUgY2FzZSBpcyBudWxsXG4iOwotCi0gICAgaWYgKG5vZGUtPmdldEZhbHNlQmxvY2soKSkgewot
ICAgICAgICBPdXRwdXRUcmVlVGV4dChzaW5rLCBub2RlLCBkZXB0aCk7Ci0gICAgICAgIG91dCA8
PCAiZmFsc2UgY2FzZVxuIjsKLSAgICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9jaygpLT50cmF2ZXJz
ZSh0aGlzKTsKLSAgICB9Ci0KLSAgICAtLWRlcHRoOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci12b2lkIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3Rh
bnRVbmlvbiogbm9kZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBzaW5rOwotCi0gICAg
c2l6ZV90IHNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOwotCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgT3V0cHV0VHJlZVRleHQo
b3V0LCBub2RlLCBkZXB0aCk7Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0VW5pb25BcnJheVBv
aW50ZXIoKVtpXS5nZXRUeXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKLSAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVtpXS5nZXRCQ29uc3Qo
KSkKLSAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJ0cnVlIjsKLSAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZmFsc2UiOwotCi0gICAgICAgICAgICAg
ICAgb3V0IDw8ICIgKCIgPDwgImNvbnN0IGJvb2wiIDw8ICIpIjsKLSAgICAgICAgICAgICAgICBv
dXQgPDwgIlxuIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRWJ0
RmxvYXQ6Ci0gICAgICAgICAgICAgICAgb3V0IDw8IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVy
KClbaV0uZ2V0RkNvbnN0KCk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIgKGNvbnN0IGZsb2F0
KVxuIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRWJ0SW50Ogot
ICAgICAgICAgICAgICAgIG91dCA8PCBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpW2ldLmdl
dElDb25zdCgpOwotICAgICAgICAgICAgICAgIG91dCA8PCAiIChjb25zdCBpbnQpXG4iOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICBvdXQubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiVW5r
bm93biBjb25zdGFudCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
fQotfQotCi1ib29sIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVElu
dGVybUxvb3AqIG5vZGUpCi17Ci0gICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gc2luazsKLQotICAg
IE91dHB1dFRyZWVUZXh0KG91dCwgbm9kZSwgZGVwdGgpOwotCi0gICAgb3V0IDw8ICJMb29wIHdp
dGggY29uZGl0aW9uICI7Ci0gICAgaWYgKG5vZGUtPmdldFR5cGUoKSA9PSBFTG9vcERvV2hpbGUp
Ci0gICAgICAgIG91dCA8PCAibm90ICI7Ci0gICAgb3V0IDw8ICJ0ZXN0ZWQgZmlyc3RcbiI7Ci0K
LSAgICArK2RlcHRoOwotCi0gICAgT3V0cHV0VHJlZVRleHQoc2luaywgbm9kZSwgZGVwdGgpOwot
ICAgIGlmIChub2RlLT5nZXRDb25kaXRpb24oKSkgewotICAgICAgICBvdXQgPDwgIkxvb3AgQ29u
ZGl0aW9uXG4iOwotICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIG91dCA8PCAiTm8gbG9vcCBjb25kaXRpb25cbiI7Ci0KLSAg
ICBPdXRwdXRUcmVlVGV4dChzaW5rLCBub2RlLCBkZXB0aCk7Ci0gICAgaWYgKG5vZGUtPmdldEJv
ZHkoKSkgewotICAgICAgICBvdXQgPDwgIkxvb3AgQm9keVxuIjsKLSAgICAgICAgbm9kZS0+Z2V0
Qm9keSgpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgb3V0IDw8ICJObyBs
b29wIGJvZHlcbiI7Ci0KLSAgICBpZiAobm9kZS0+Z2V0RXhwcmVzc2lvbigpKSB7Ci0gICAgICAg
IE91dHB1dFRyZWVUZXh0KHNpbmssIG5vZGUsIGRlcHRoKTsKLSAgICAgICAgb3V0IDw8ICJMb29w
IFRlcm1pbmFsIEV4cHJlc3Npb25cbiI7Ci0gICAgICAgIG5vZGUtPmdldEV4cHJlc3Npb24oKS0+
dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotCi0gICAgLS1kZXB0aDsKLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotYm9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwg
VEludGVybUJyYW5jaCogbm9kZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBzaW5rOwot
Ci0gICAgT3V0cHV0VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7Ci0KLSAgICBzd2l0Y2ggKG5v
ZGUtPmdldEZsb3dPcCgpKSB7Ci0gICAgICAgIGNhc2UgRU9wS2lsbDogICAgICBvdXQgPDwgIkJy
YW5jaDogS2lsbCI7ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BCcmVhazogICAg
IG91dCA8PCAiQnJhbmNoOiBCcmVhayI7ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVP
cENvbnRpbnVlOiAgb3V0IDw8ICJCcmFuY2g6IENvbnRpbnVlIjsgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRU9wUmV0dXJuOiAgICBvdXQgPDwgIkJyYW5jaDogUmV0dXJuIjsgICAgICAgICBi
cmVhazsKLSAgICAgICAgZGVmYXVsdDogICAgICAgICAgIG91dCA8PCAiQnJhbmNoOiBVbmtub3du
IEJyYW5jaCI7IGJyZWFrOwotICAgIH0KLQotICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkp
IHsKLSAgICAgICAgb3V0IDw8ICIgd2l0aCBleHByZXNzaW9uXG4iOwotICAgICAgICArK2RlcHRo
OwotICAgICAgICBub2RlLT5nZXRFeHByZXNzaW9uKCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAg
ICAtLWRlcHRoOwotICAgIH0gZWxzZQotICAgICAgICBvdXQgPDwgIlxuIjsKLQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotLy8KLS8vIFRoaXMgZnVuY3Rpb24gaXMgdGhlIG9uZSB0byBjYWxsIGV4
dGVybmFsbHkgdG8gc3RhcnQgdGhlIHRyYXZlcnNhbC4KLS8vIEluZGl2aWR1YWwgZnVuY3Rpb25z
IGNhbiBiZSBpbml0aWFsaXplZCB0byAwIHRvIHNraXAgcHJvY2Vzc2luZyBvZiB0aGF0Ci0vLyB0
eXBlIG9mIG5vZGUuICBJdCdzIGNoaWxkcmVuIHdpbGwgc3RpbGwgYmUgcHJvY2Vzc2VkLgotLy8K
LXZvaWQgVEludGVybWVkaWF0ZTo6b3V0cHV0VHJlZShUSW50ZXJtTm9kZSogcm9vdCkKLXsKLSAg
ICBpZiAocm9vdCA9PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBUT3V0cHV0VHJhdmVyc2Vy
IGl0KGluZm9TaW5rLmluZm8pOwotCi0gICAgcm9vdC0+dHJhdmVyc2UoJml0KTsKLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRlMzlmZDU2MmRjMDQ1NTQxYzMxZmM0MzE5
MDYzYjUwNjAyMDk5Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw2MzUgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8K
LS8vIERlZmluaXRpb24gb2YgdGhlIGluLW1lbW9yeSBoaWdoLWxldmVsIGludGVybWVkaWF0ZSBy
ZXByZXNlbnRhdGlvbgotLy8gb2Ygc2hhZGVycy4gIFRoaXMgaXMgYSB0cmVlIHRoYXQgcGFyc2Vy
IGNyZWF0ZXMuCi0vLwotLy8gTm9kZXMgaW4gdGhlIHRyZWUgYXJlIGRlZmluZWQgYXMgYSBoaWVy
YXJjaHkgb2YgY2xhc3NlcyBkZXJpdmVkIGZyb20gCi0vLyBUSW50ZXJtTm9kZS4gRWFjaCBpcyBh
IG5vZGUgaW4gYSB0cmVlLiAgVGhlcmUgaXMgbm8gcHJlc2V0IGJyYW5jaGluZyBmYWN0b3I7Ci0v
LyBlYWNoIG5vZGUgY2FuIGhhdmUgaXQncyBvd24gdHlwZSBvZiBsaXN0IG9mIGNoaWxkcmVuLgot
Ly8KLQotI2lmbmRlZiBfX0lOVEVSTUVESUFURV9ICi0jZGVmaW5lIF9fSU5URVJNRURJQVRFX0gK
LQotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgotCi0jaW5jbHVkZSA8YWxnb3JpdGht
PgotI2luY2x1ZGUgImNvbXBpbGVyL0NvbW1vbi5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1R5cGVz
LmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvQ29uc3RhbnRVbmlvbi5oIgotCi0vLwotLy8gT3BlcmF0
b3JzIHVzZWQgYnkgdGhlIGhpZ2gtbGV2ZWwgKHBhcnNlIHRyZWUpIHJlcHJlc2VudGF0aW9uLgot
Ly8KLWVudW0gVE9wZXJhdG9yIHsKLSAgICBFT3BOdWxsLCAgICAgICAgICAgIC8vIGlmIGluIGEg
bm9kZSwgc2hvdWxkIG9ubHkgbWVhbiBhIG5vZGUgaXMgc3RpbGwgYmVpbmcgYnVpbHQKLSAgICBF
T3BTZXF1ZW5jZSwgICAgICAgIC8vIGRlbm90ZXMgYSBsaXN0IG9mIHN0YXRlbWVudHMsIG9yIHBh
cmFtZXRlcnMsIGV0Yy4KLSAgICBFT3BGdW5jdGlvbkNhbGwsICAgIAotICAgIEVPcEZ1bmN0aW9u
LCAgICAgICAgLy8gRm9yIGZ1bmN0aW9uIGRlZmluaXRpb24KLSAgICBFT3BQYXJhbWV0ZXJzLCAg
ICAgIC8vIGFuIGFnZ3JlZ2F0ZSBsaXN0aW5nIHRoZSBwYXJhbWV0ZXJzIHRvIGEgZnVuY3Rpb24K
LQotICAgIEVPcERlY2xhcmF0aW9uLAotICAgIEVPcFByb3RvdHlwZSwKLQotICAgIC8vCi0gICAg
Ly8gVW5hcnkgb3BlcmF0b3JzCi0gICAgLy8KLQotICAgIEVPcE5lZ2F0aXZlLAotICAgIEVPcExv
Z2ljYWxOb3QsCi0gICAgRU9wVmVjdG9yTG9naWNhbE5vdCwKLQotICAgIEVPcFBvc3RJbmNyZW1l
bnQsCi0gICAgRU9wUG9zdERlY3JlbWVudCwKLSAgICBFT3BQcmVJbmNyZW1lbnQsCi0gICAgRU9w
UHJlRGVjcmVtZW50LAotCi0gICAgRU9wQ29udkludFRvQm9vbCwKLSAgICBFT3BDb252RmxvYXRU
b0Jvb2wsCi0gICAgRU9wQ29udkJvb2xUb0Zsb2F0LAotICAgIEVPcENvbnZJbnRUb0Zsb2F0LAot
ICAgIEVPcENvbnZGbG9hdFRvSW50LAotICAgIEVPcENvbnZCb29sVG9JbnQsCi0KLSAgICAvLwot
ICAgIC8vIGJpbmFyeSBvcGVyYXRpb25zCi0gICAgLy8KLQotICAgIEVPcEFkZCwKLSAgICBFT3BT
dWIsCi0gICAgRU9wTXVsLAotICAgIEVPcERpdiwKLSAgICBFT3BFcXVhbCwKLSAgICBFT3BOb3RF
cXVhbCwKLSAgICBFT3BWZWN0b3JFcXVhbCwKLSAgICBFT3BWZWN0b3JOb3RFcXVhbCwKLSAgICBF
T3BMZXNzVGhhbiwKLSAgICBFT3BHcmVhdGVyVGhhbiwKLSAgICBFT3BMZXNzVGhhbkVxdWFsLAot
ICAgIEVPcEdyZWF0ZXJUaGFuRXF1YWwsCi0gICAgRU9wQ29tbWEsCi0KLSAgICBFT3BWZWN0b3JU
aW1lc1NjYWxhciwKLSAgICBFT3BWZWN0b3JUaW1lc01hdHJpeCwKLSAgICBFT3BNYXRyaXhUaW1l
c1ZlY3RvciwKLSAgICBFT3BNYXRyaXhUaW1lc1NjYWxhciwKLQotICAgIEVPcExvZ2ljYWxPciwK
LSAgICBFT3BMb2dpY2FsWG9yLAotICAgIEVPcExvZ2ljYWxBbmQsCi0KLSAgICBFT3BJbmRleERp
cmVjdCwKLSAgICBFT3BJbmRleEluZGlyZWN0LAotICAgIEVPcEluZGV4RGlyZWN0U3RydWN0LAot
Ci0gICAgRU9wVmVjdG9yU3dpenpsZSwKLQotICAgIC8vCi0gICAgLy8gQnVpbHQtaW4gZnVuY3Rp
b25zIHBvdGVudGlhbGx5IG1hcHBlZCB0byBvcGVyYXRvcnMKLSAgICAvLwotCi0gICAgRU9wUmFk
aWFucywKLSAgICBFT3BEZWdyZWVzLAotICAgIEVPcFNpbiwKLSAgICBFT3BDb3MsCi0gICAgRU9w
VGFuLAotICAgIEVPcEFzaW4sCi0gICAgRU9wQWNvcywKLSAgICBFT3BBdGFuLAotCi0gICAgRU9w
UG93LAotICAgIEVPcEV4cCwKLSAgICBFT3BMb2csCi0gICAgRU9wRXhwMiwKLSAgICBFT3BMb2cy
LAotICAgIEVPcFNxcnQsCi0gICAgRU9wSW52ZXJzZVNxcnQsCi0KLSAgICBFT3BBYnMsCi0gICAg
RU9wU2lnbiwKLSAgICBFT3BGbG9vciwKLSAgICBFT3BDZWlsLAotICAgIEVPcEZyYWN0LAotICAg
IEVPcE1vZCwKLSAgICBFT3BNaW4sCi0gICAgRU9wTWF4LAotICAgIEVPcENsYW1wLAotICAgIEVP
cE1peCwKLSAgICBFT3BTdGVwLAotICAgIEVPcFNtb290aFN0ZXAsCi0KLSAgICBFT3BMZW5ndGgs
Ci0gICAgRU9wRGlzdGFuY2UsCi0gICAgRU9wRG90LAotICAgIEVPcENyb3NzLAotICAgIEVPcE5v
cm1hbGl6ZSwKLSAgICBFT3BGYWNlRm9yd2FyZCwKLSAgICBFT3BSZWZsZWN0LAotICAgIEVPcFJl
ZnJhY3QsCi0KLSAgICBFT3BERmR4LCAgICAgICAgICAgIC8vIEZyYWdtZW50IG9ubHksIE9FU19z
dGFuZGFyZF9kZXJpdmF0aXZlcyBleHRlbnNpb24KLSAgICBFT3BERmR5LCAgICAgICAgICAgIC8v
IEZyYWdtZW50IG9ubHksIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyBleHRlbnNpb24KLSAgICBF
T3BGd2lkdGgsICAgICAgICAgIC8vIEZyYWdtZW50IG9ubHksIE9FU19zdGFuZGFyZF9kZXJpdmF0
aXZlcyBleHRlbnNpb24KLQotICAgIEVPcE1hdHJpeFRpbWVzTWF0cml4LAotCi0gICAgRU9wQW55
LAotICAgIEVPcEFsbCwKLQotICAgIC8vCi0gICAgLy8gQnJhbmNoCi0gICAgLy8KLQotICAgIEVP
cEtpbGwsICAgICAgICAgICAgLy8gRnJhZ21lbnQgb25seQotICAgIEVPcFJldHVybiwKLSAgICBF
T3BCcmVhaywKLSAgICBFT3BDb250aW51ZSwKLQotICAgIC8vCi0gICAgLy8gQ29uc3RydWN0b3Jz
Ci0gICAgLy8KLQotICAgIEVPcENvbnN0cnVjdEludCwKLSAgICBFT3BDb25zdHJ1Y3RCb29sLAot
ICAgIEVPcENvbnN0cnVjdEZsb2F0LAotICAgIEVPcENvbnN0cnVjdFZlYzIsCi0gICAgRU9wQ29u
c3RydWN0VmVjMywKLSAgICBFT3BDb25zdHJ1Y3RWZWM0LAotICAgIEVPcENvbnN0cnVjdEJWZWMy
LAotICAgIEVPcENvbnN0cnVjdEJWZWMzLAotICAgIEVPcENvbnN0cnVjdEJWZWM0LAotICAgIEVP
cENvbnN0cnVjdElWZWMyLAotICAgIEVPcENvbnN0cnVjdElWZWMzLAotICAgIEVPcENvbnN0cnVj
dElWZWM0LAotICAgIEVPcENvbnN0cnVjdE1hdDIsCi0gICAgRU9wQ29uc3RydWN0TWF0MywKLSAg
ICBFT3BDb25zdHJ1Y3RNYXQ0LAotICAgIEVPcENvbnN0cnVjdFN0cnVjdCwKLQotICAgIC8vCi0g
ICAgLy8gbW92ZXMKLSAgICAvLwotCi0gICAgRU9wQXNzaWduLAotICAgIEVPcEluaXRpYWxpemUs
Ci0gICAgRU9wQWRkQXNzaWduLAotICAgIEVPcFN1YkFzc2lnbiwKLSAgICBFT3BNdWxBc3NpZ24s
Ci0gICAgRU9wVmVjdG9yVGltZXNNYXRyaXhBc3NpZ24sCi0gICAgRU9wVmVjdG9yVGltZXNTY2Fs
YXJBc3NpZ24sCi0gICAgRU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ24sCi0gICAgRU9wTWF0cml4
VGltZXNNYXRyaXhBc3NpZ24sCi0gICAgRU9wRGl2QXNzaWduCi19OwotCi1leHRlcm4gY29uc3Qg
Y2hhciogZ2V0T3BlcmF0b3JTdHJpbmcoVE9wZXJhdG9yIG9wKTsKLQotY2xhc3MgVEludGVybVRy
YXZlcnNlcjsKLWNsYXNzIFRJbnRlcm1BZ2dyZWdhdGU7Ci1jbGFzcyBUSW50ZXJtQmluYXJ5Owot
Y2xhc3MgVEludGVybVVuYXJ5OwotY2xhc3MgVEludGVybUNvbnN0YW50VW5pb247Ci1jbGFzcyBU
SW50ZXJtU2VsZWN0aW9uOwotY2xhc3MgVEludGVybVR5cGVkOwotY2xhc3MgVEludGVybVN5bWJv
bDsKLWNsYXNzIFRJbnRlcm1Mb29wOwotY2xhc3MgVEluZm9TaW5rOwotCi0vLwotLy8gQmFzZSBj
bGFzcyBmb3IgdGhlIHRyZWUgbm9kZXMKLS8vCi1jbGFzcyBUSW50ZXJtTm9kZSB7Ci1wdWJsaWM6
Ci0gICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSgpOwotICAgIFRJbnRlcm1Ob2RlKCkgewot
ICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgdG8gVFNvdXJjZUxvYyBjb25zdHJ1Y3RvcgotICAg
ICAgICAvLyBhZnRlciBnZXR0aW5nIHJpZCBvZiBUUHVibGljVHlwZS4KLSAgICAgICAgbGluZS5m
aXJzdF9maWxlID0gbGluZS5sYXN0X2ZpbGUgPSAwOwotICAgICAgICBsaW5lLmZpcnN0X2xpbmUg
PSBsaW5lLmxhc3RfbGluZSA9IDA7Ci0gICAgfQotICAgIHZpcnR1YWwgflRJbnRlcm1Ob2RlKCkg
eyB9Ci0KLSAgICBjb25zdCBUU291cmNlTG9jJiBnZXRMaW5lKCkgY29uc3QgeyByZXR1cm4gbGlu
ZTsgfQotICAgIHZvaWQgc2V0TGluZShjb25zdCBUU291cmNlTG9jJiBsKSB7IGxpbmUgPSBsOyB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopID0gMDsKLSAg
ICB2aXJ0dWFsIFRJbnRlcm1UeXBlZCogZ2V0QXNUeXBlZCgpIHsgcmV0dXJuIDA7IH0KLSAgICB2
aXJ0dWFsIFRJbnRlcm1Db25zdGFudFVuaW9uKiBnZXRBc0NvbnN0YW50VW5pb24oKSB7IHJldHVy
biAwOyB9Ci0gICAgdmlydHVhbCBUSW50ZXJtQWdncmVnYXRlKiBnZXRBc0FnZ3JlZ2F0ZSgpIHsg
cmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIFRJbnRlcm1CaW5hcnkqIGdldEFzQmluYXJ5Tm9kZSgp
IHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIFRJbnRlcm1VbmFyeSogZ2V0QXNVbmFyeU5vZGUo
KSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBUSW50ZXJtU2VsZWN0aW9uKiBnZXRBc1NlbGVj
dGlvbk5vZGUoKSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBUSW50ZXJtU3ltYm9sKiBnZXRB
c1N5bWJvbE5vZGUoKSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBUSW50ZXJtTG9vcCogZ2V0
QXNMb29wTm9kZSgpIHsgcmV0dXJuIDA7IH0KLQotICAgIC8vIFJlcGxhY2UgYSBjaGlsZCBub2Rl
LiBSZXR1cm4gdHJ1ZSBpZiB8b3JpZ2luYWx8IGlzIGEgY2hpbGQKLSAgICAvLyBub2RlIGFuZCBp
dCBpcyByZXBsYWNlZDsgb3RoZXJ3aXNlLCByZXR1cm4gZmFsc2UuCi0gICAgdmlydHVhbCBib29s
IHJlcGxhY2VDaGlsZE5vZGUoCi0gICAgICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVy
bU5vZGUgKnJlcGxhY2VtZW50KSA9IDA7Ci0KLXByb3RlY3RlZDoKLSAgICBUU291cmNlTG9jIGxp
bmU7Ci19OwotCi0vLwotLy8gVGhpcyBpcyBqdXN0IHRvIGhlbHAgeWFjYy4KLS8vCi1zdHJ1Y3Qg
VEludGVybU5vZGVQYWlyIHsKLSAgICBUSW50ZXJtTm9kZSogbm9kZTE7Ci0gICAgVEludGVybU5v
ZGUqIG5vZGUyOwotfTsKLQotLy8KLS8vIEludGVybWVkaWF0ZSBjbGFzcyBmb3Igbm9kZXMgdGhh
dCBoYXZlIGEgdHlwZS4KLS8vCi1jbGFzcyBUSW50ZXJtVHlwZWQgOiBwdWJsaWMgVEludGVybU5v
ZGUgewotcHVibGljOgotICAgIFRJbnRlcm1UeXBlZChjb25zdCBUVHlwZSYgdCkgOiB0eXBlKHQp
ICB7IH0KLSAgICB2aXJ0dWFsIFRJbnRlcm1UeXBlZCogZ2V0QXNUeXBlZCgpIHsgcmV0dXJuIHRo
aXM7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBoYXNTaWRlRWZmZWN0cygpIGNvbnN0ID0gMDsKLQot
ICAgIHZvaWQgc2V0VHlwZShjb25zdCBUVHlwZSYgdCkgeyB0eXBlID0gdDsgfQotICAgIGNvbnN0
IFRUeXBlJiBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZTsgfQotICAgIFRUeXBlKiBnZXRU
eXBlUG9pbnRlcigpIHsgcmV0dXJuICZ0eXBlOyB9Ci0KLSAgICBUQmFzaWNUeXBlIGdldEJhc2lj
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0QmFzaWNUeXBlKCk7IH0KLSAgICBUUXVhbGlm
aWVyIGdldFF1YWxpZmllcigpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0UXVhbGlmaWVyKCk7IH0K
LSAgICBUUHJlY2lzaW9uIGdldFByZWNpc2lvbigpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0UHJl
Y2lzaW9uKCk7IH0KLSAgICBpbnQgZ2V0Tm9taW5hbFNpemUoKSBjb25zdCB7IHJldHVybiB0eXBl
LmdldE5vbWluYWxTaXplKCk7IH0KLSAgICAKLSAgICBib29sIGlzTWF0cml4KCkgY29uc3QgeyBy
ZXR1cm4gdHlwZS5pc01hdHJpeCgpOyB9Ci0gICAgYm9vbCBpc0FycmF5KCkgIGNvbnN0IHsgcmV0
dXJuIHR5cGUuaXNBcnJheSgpOyB9Ci0gICAgYm9vbCBpc1ZlY3RvcigpIGNvbnN0IHsgcmV0dXJu
IHR5cGUuaXNWZWN0b3IoKTsgfQotICAgIGJvb2wgaXNTY2FsYXIoKSBjb25zdCB7IHJldHVybiB0
eXBlLmlzU2NhbGFyKCk7IH0KLSAgICBjb25zdCBjaGFyKiBnZXRCYXNpY1N0cmluZygpIGNvbnN0
IHsgcmV0dXJuIHR5cGUuZ2V0QmFzaWNTdHJpbmcoKTsgfQotICAgIGNvbnN0IGNoYXIqIGdldFF1
YWxpZmllclN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0UXVhbGlmaWVyU3RyaW5nKCk7
IH0KLSAgICBUU3RyaW5nIGdldENvbXBsZXRlU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gdHlwZS5n
ZXRDb21wbGV0ZVN0cmluZygpOyB9Ci0KLSAgICBpbnQgdG90YWxSZWdpc3RlckNvdW50KCkgY29u
c3QgeyByZXR1cm4gdHlwZS50b3RhbFJlZ2lzdGVyQ291bnQoKTsgfQotICAgIGludCBlbGVtZW50
UmVnaXN0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZWxlbWVudFJlZ2lzdGVyQ291bnQo
KTsgfQotICAgIGludCBnZXRBcnJheVNpemUoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldEFycmF5
U2l6ZSgpOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBUVHlwZSB0eXBlOwotfTsKLQotLy8KLS8vIEhh
bmRsZSBmb3IsIGRvLXdoaWxlLCBhbmQgd2hpbGUgbG9vcHMuCi0vLwotZW51bSBUTG9vcFR5cGUg
ewotICAgIEVMb29wRm9yLAotICAgIEVMb29wV2hpbGUsCi0gICAgRUxvb3BEb1doaWxlCi19Owot
Ci1jbGFzcyBUSW50ZXJtTG9vcCA6IHB1YmxpYyBUSW50ZXJtTm9kZSB7Ci1wdWJsaWM6Ci0gICAg
VEludGVybUxvb3AoVExvb3BUeXBlIGFUeXBlLAotICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2Rl
ICphSW5pdCwgVEludGVybVR5cGVkKiBhQ29uZCwgVEludGVybVR5cGVkKiBhRXhwciwKLSAgICAg
ICAgICAgICAgICBUSW50ZXJtTm9kZSogYUJvZHkpIDoKLSAgICAgICAgICAgIHR5cGUoYVR5cGUp
LAotICAgICAgICAgICAgaW5pdChhSW5pdCksCi0gICAgICAgICAgICBjb25kKGFDb25kKSwKLSAg
ICAgICAgICAgIGV4cHIoYUV4cHIpLAotICAgICAgICAgICAgYm9keShhQm9keSksCi0gICAgICAg
ICAgICB1bnJvbGxGbGFnKGZhbHNlKSB7IH0KLQotICAgIHZpcnR1YWwgVEludGVybUxvb3AqIGdl
dEFzTG9vcE5vZGUoKSB7IHJldHVybiB0aGlzOyB9Ci0gICAgdmlydHVhbCB2b2lkIHRyYXZlcnNl
KFRJbnRlcm1UcmF2ZXJzZXIqKTsKLSAgICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxkTm9kZSgK
LSAgICAgICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFjZW1lbnQp
OwotCi0gICAgVExvb3BUeXBlIGdldFR5cGUoKSBjb25zdCB7IHJldHVybiB0eXBlOyB9Ci0gICAg
VEludGVybU5vZGUqIGdldEluaXQoKSB7IHJldHVybiBpbml0OyB9Ci0gICAgVEludGVybVR5cGVk
KiBnZXRDb25kaXRpb24oKSB7IHJldHVybiBjb25kOyB9Ci0gICAgVEludGVybVR5cGVkKiBnZXRF
eHByZXNzaW9uKCkgeyByZXR1cm4gZXhwcjsgfQotICAgIFRJbnRlcm1Ob2RlKiBnZXRCb2R5KCkg
eyByZXR1cm4gYm9keTsgfQotCi0gICAgdm9pZCBzZXRVbnJvbGxGbGFnKGJvb2wgZmxhZykgeyB1
bnJvbGxGbGFnID0gZmxhZzsgfQotICAgIGJvb2wgZ2V0VW5yb2xsRmxhZygpIHsgcmV0dXJuIHVu
cm9sbEZsYWc7IH0KLQotcHJvdGVjdGVkOgotICAgIFRMb29wVHlwZSB0eXBlOwotICAgIFRJbnRl
cm1Ob2RlKiBpbml0OyAgLy8gZm9yLWxvb3AgaW5pdGlhbGl6YXRpb24KLSAgICBUSW50ZXJtVHlw
ZWQqIGNvbmQ7IC8vIGxvb3AgZXhpdCBjb25kaXRpb24KLSAgICBUSW50ZXJtVHlwZWQqIGV4cHI7
IC8vIGZvci1sb29wIGV4cHJlc3Npb24KLSAgICBUSW50ZXJtTm9kZSogYm9keTsgIC8vIGxvb3Ag
Ym9keQotCi0gICAgYm9vbCB1bnJvbGxGbGFnOyAvLyBXaGV0aGVyIHRoZSBsb29wIHNob3VsZCBi
ZSB1bnJvbGxlZCBvciBub3QuCi19OwotCi0vLwotLy8gSGFuZGxlIGJyZWFrLCBjb250aW51ZSwg
cmV0dXJuLCBhbmQga2lsbC4KLS8vCi1jbGFzcyBUSW50ZXJtQnJhbmNoIDogcHVibGljIFRJbnRl
cm1Ob2RlIHsKLXB1YmxpYzoKLSAgICBUSW50ZXJtQnJhbmNoKFRPcGVyYXRvciBvcCwgVEludGVy
bVR5cGVkKiBlKSA6Ci0gICAgICAgICAgICBmbG93T3Aob3ApLAotICAgICAgICAgICAgZXhwcmVz
c2lvbihlKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2Vy
Kik7Ci0gICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGlsZE5vZGUoCi0gICAgICAgIFRJbnRlcm1O
b2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KTsKLQotICAgIFRPcGVyYXRv
ciBnZXRGbG93T3AoKSB7IHJldHVybiBmbG93T3A7IH0KLSAgICBUSW50ZXJtVHlwZWQqIGdldEV4
cHJlc3Npb24oKSB7IHJldHVybiBleHByZXNzaW9uOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBUT3Bl
cmF0b3IgZmxvd09wOwotICAgIFRJbnRlcm1UeXBlZCogZXhwcmVzc2lvbjsgIC8vIG5vbi16ZXJv
IGV4Y2VwdCBmb3IgInJldHVybiBleHA7IiBzdGF0ZW1lbnRzCi19OwotCi0vLwotLy8gTm9kZXMg
dGhhdCBjb3JyZXNwb25kIHRvIHN5bWJvbHMgb3IgY29uc3RhbnRzIGluIHRoZSBzb3VyY2UgY29k
ZS4KLS8vCi1jbGFzcyBUSW50ZXJtU3ltYm9sIDogcHVibGljIFRJbnRlcm1UeXBlZCB7Ci1wdWJs
aWM6Ci0gICAgLy8gaWYgc3ltYm9sIGlzIGluaXRpYWxpemVkIGFzIHN5bWJvbChzeW0pLCB0aGUg
bWVtb3J5IGNvbWVzIGZyb20gdGhlIHBvb2xhbGxvY2F0b3Igb2Ygc3ltLiBJZiBzeW0gY29tZXMg
ZnJvbQotICAgIC8vIHBlciBwcm9jZXNzIGdsb2JhbHBvb2xhbGxvY2F0b3IsIHRoZW4gaXQgY2F1
c2VzIGluY3JlYXNlZCBtZW1vcnkgdXNhZ2UgcGVyIGNvbXBpbGUKLSAgICAvLyBpdCBpcyBlc3Nl
bnRpYWwgdG8gdXNlICJzeW1ib2wgPSBzeW0iIHRvIGFzc2lnbiB0byBzeW1ib2wKLSAgICBUSW50
ZXJtU3ltYm9sKGludCBpLCBjb25zdCBUU3RyaW5nJiBzeW0sIGNvbnN0IFRUeXBlJiB0KSA6IAot
ICAgICAgICAgICAgVEludGVybVR5cGVkKHQpLCBpZChpKSAgeyBzeW1ib2wgPSBzeW07IG9yaWdp
bmFsU3ltYm9sID0gc3ltOyB9IAotCi0gICAgdmlydHVhbCBib29sIGhhc1NpZGVFZmZlY3RzKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIGludCBnZXRJZCgpIGNvbnN0IHsgcmV0dXJu
IGlkOyB9Ci0gICAgY29uc3QgVFN0cmluZyYgZ2V0U3ltYm9sKCkgY29uc3QgeyByZXR1cm4gc3lt
Ym9sOyB9Ci0KLSAgICB2b2lkIHNldElkKGludCBuZXdJZCkgeyBpZCA9IG5ld0lkOyB9Ci0gICAg
dm9pZCBzZXRTeW1ib2woY29uc3QgVFN0cmluZyYgc3ltKSB7IHN5bWJvbCA9IHN5bTsgfQotCi0g
ICAgY29uc3QgVFN0cmluZyYgZ2V0T3JpZ2luYWxTeW1ib2woKSBjb25zdCB7IHJldHVybiBvcmln
aW5hbFN5bWJvbDsgfQotCi0gICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJz
ZXIqKTsKLSAgICB2aXJ0dWFsIFRJbnRlcm1TeW1ib2wqIGdldEFzU3ltYm9sTm9kZSgpIHsgcmV0
dXJuIHRoaXM7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxkTm9kZShUSW50ZXJtTm9k
ZSAqLCBUSW50ZXJtTm9kZSAqKSB7IHJldHVybiBmYWxzZTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAg
aW50IGlkOwotICAgIFRTdHJpbmcgc3ltYm9sOwotICAgIFRTdHJpbmcgb3JpZ2luYWxTeW1ib2w7
Ci19OwotCi1jbGFzcyBUSW50ZXJtQ29uc3RhbnRVbmlvbiA6IHB1YmxpYyBUSW50ZXJtVHlwZWQg
ewotcHVibGljOgotICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKENvbnN0YW50VW5pb24gKnVuaW9u
UG9pbnRlciwgY29uc3QgVFR5cGUmIHQpIDogVEludGVybVR5cGVkKHQpLCB1bmlvbkFycmF5UG9p
bnRlcih1bmlvblBvaW50ZXIpIHsgfQotCi0gICAgdmlydHVhbCBib29sIGhhc1NpZGVFZmZlY3Rz
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIENvbnN0YW50VW5pb24qIGdldFVuaW9u
QXJyYXlQb2ludGVyKCkgY29uc3QgeyByZXR1cm4gdW5pb25BcnJheVBvaW50ZXI7IH0KLSAgICAK
LSAgICBpbnQgZ2V0SUNvbnN0KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gdW5pb25BcnJheVBv
aW50ZXIgPyB1bmlvbkFycmF5UG9pbnRlcltpbmRleF0uZ2V0SUNvbnN0KCkgOiAwOyB9Ci0gICAg
ZmxvYXQgZ2V0RkNvbnN0KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gdW5pb25BcnJheVBvaW50
ZXIgPyB1bmlvbkFycmF5UG9pbnRlcltpbmRleF0uZ2V0RkNvbnN0KCkgOiAwLjBmOyB9Ci0gICAg
Ym9vbCBnZXRCQ29uc3QoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiB1bmlvbkFycmF5UG9pbnRl
ciA/IHVuaW9uQXJyYXlQb2ludGVyW2luZGV4XS5nZXRCQ29uc3QoKSA6IGZhbHNlOyB9Ci0KLSAg
ICB2aXJ0dWFsIFRJbnRlcm1Db25zdGFudFVuaW9uKiBnZXRBc0NvbnN0YW50VW5pb24oKSAgeyBy
ZXR1cm4gdGhpczsgfQotICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2Vy
Kik7Ci0gICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGlsZE5vZGUoVEludGVybU5vZGUgKiwgVElu
dGVybU5vZGUgKikgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIFRJbnRlcm1UeXBlZCogZm9sZChU
T3BlcmF0b3IsIFRJbnRlcm1UeXBlZCosIFRJbmZvU2luayYpOwotCi1wcm90ZWN0ZWQ6Ci0gICAg
Q29uc3RhbnRVbmlvbiAqdW5pb25BcnJheVBvaW50ZXI7Ci19OwotCi0vLwotLy8gSW50ZXJtZWRp
YXRlIGNsYXNzIGZvciBub2RlIHR5cGVzIHRoYXQgaG9sZCBvcGVyYXRvcnMuCi0vLwotY2xhc3Mg
VEludGVybU9wZXJhdG9yIDogcHVibGljIFRJbnRlcm1UeXBlZCB7Ci1wdWJsaWM6Ci0gICAgVE9w
ZXJhdG9yIGdldE9wKCkgY29uc3QgeyByZXR1cm4gb3A7IH0KLSAgICB2b2lkIHNldE9wKFRPcGVy
YXRvciBvKSB7IG9wID0gbzsgfQotCi0gICAgYm9vbCBpc0Fzc2lnbm1lbnQoKSBjb25zdDsKLSAg
ICBib29sIGlzQ29uc3RydWN0b3IoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgYm9vbCBoYXNTaWRl
RWZmZWN0cygpIGNvbnN0IHsgcmV0dXJuIGlzQXNzaWdubWVudCgpOyB9Ci0KLXByb3RlY3RlZDoK
LSAgICBUSW50ZXJtT3BlcmF0b3IoVE9wZXJhdG9yIG8pIDogVEludGVybVR5cGVkKFRUeXBlKEVi
dEZsb2F0LCBFYnBVbmRlZmluZWQpKSwgb3Aobykge30KLSAgICBUSW50ZXJtT3BlcmF0b3IoVE9w
ZXJhdG9yIG8sIFRUeXBlJiB0KSA6IFRJbnRlcm1UeXBlZCh0KSwgb3Aobykge30gICAKLSAgICBU
T3BlcmF0b3Igb3A7Ci19OwotCi0vLwotLy8gTm9kZXMgZm9yIGFsbCB0aGUgYmFzaWMgYmluYXJ5
IG1hdGggb3BlcmF0b3JzLgotLy8KLWNsYXNzIFRJbnRlcm1CaW5hcnkgOiBwdWJsaWMgVEludGVy
bU9wZXJhdG9yIHsKLXB1YmxpYzoKLSAgICBUSW50ZXJtQmluYXJ5KFRPcGVyYXRvciBvKSA6IFRJ
bnRlcm1PcGVyYXRvcihvKSwgYWRkSW5kZXhDbGFtcChmYWxzZSkge30KLQotICAgIHZpcnR1YWwg
VEludGVybUJpbmFyeSogZ2V0QXNCaW5hcnlOb2RlKCkgeyByZXR1cm4gdGhpczsgfQotICAgIHZp
cnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7Ci0gICAgdmlydHVhbCBib29s
IHJlcGxhY2VDaGlsZE5vZGUoCi0gICAgICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVy
bU5vZGUgKnJlcGxhY2VtZW50KTsKLQotICAgIHZpcnR1YWwgYm9vbCBoYXNTaWRlRWZmZWN0cygp
IGNvbnN0IHsgcmV0dXJuIChpc0Fzc2lnbm1lbnQoKSB8fCBsZWZ0LT5oYXNTaWRlRWZmZWN0cygp
IHx8IHJpZ2h0LT5oYXNTaWRlRWZmZWN0cygpKTsgfQotCi0gICAgdm9pZCBzZXRMZWZ0KFRJbnRl
cm1UeXBlZCogbikgeyBsZWZ0ID0gbjsgfQotICAgIHZvaWQgc2V0UmlnaHQoVEludGVybVR5cGVk
KiBuKSB7IHJpZ2h0ID0gbjsgfQotICAgIFRJbnRlcm1UeXBlZCogZ2V0TGVmdCgpIGNvbnN0IHsg
cmV0dXJuIGxlZnQ7IH0KLSAgICBUSW50ZXJtVHlwZWQqIGdldFJpZ2h0KCkgY29uc3QgeyByZXR1
cm4gcmlnaHQ7IH0KLSAgICBib29sIHByb21vdGUoVEluZm9TaW5rJik7Ci0KLSAgICB2b2lkIHNl
dEFkZEluZGV4Q2xhbXAoKSB7IGFkZEluZGV4Q2xhbXAgPSB0cnVlOyB9Ci0gICAgYm9vbCBnZXRB
ZGRJbmRleENsYW1wKCkgeyByZXR1cm4gYWRkSW5kZXhDbGFtcDsgfQotCi1wcm90ZWN0ZWQ6Ci0g
ICAgVEludGVybVR5cGVkKiBsZWZ0OwotICAgIFRJbnRlcm1UeXBlZCogcmlnaHQ7Ci0KLSAgICAv
LyBJZiBzZXQgdG8gdHJ1ZSwgd3JhcCBhbnkgRU9wSW5kZXhJbmRpcmVjdCB3aXRoIGEgY2xhbXAg
dG8gYm91bmRzLgotICAgIGJvb2wgYWRkSW5kZXhDbGFtcDsKLX07Ci0KLS8vCi0vLyBOb2RlcyBm
b3IgdW5hcnkgbWF0aCBvcGVyYXRvcnMuCi0vLwotY2xhc3MgVEludGVybVVuYXJ5IDogcHVibGlj
IFRJbnRlcm1PcGVyYXRvciB7Ci1wdWJsaWM6Ci0gICAgVEludGVybVVuYXJ5KFRPcGVyYXRvciBv
LCBUVHlwZSYgdCkgOiBUSW50ZXJtT3BlcmF0b3IobywgdCksIG9wZXJhbmQoMCksIHVzZUVtdWxh
dGVkRnVuY3Rpb24oZmFsc2UpIHt9Ci0gICAgVEludGVybVVuYXJ5KFRPcGVyYXRvciBvKSA6IFRJ
bnRlcm1PcGVyYXRvcihvKSwgb3BlcmFuZCgwKSwgdXNlRW11bGF0ZWRGdW5jdGlvbihmYWxzZSkg
e30KLQotICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7Ci0gICAg
dmlydHVhbCBUSW50ZXJtVW5hcnkqIGdldEFzVW5hcnlOb2RlKCkgeyByZXR1cm4gdGhpczsgfQot
ICAgIHZpcnR1YWwgYm9vbCByZXBsYWNlQ2hpbGROb2RlKAotICAgICAgICBUSW50ZXJtTm9kZSAq
b3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wg
aGFzU2lkZUVmZmVjdHMoKSBjb25zdCB7IHJldHVybiAoaXNBc3NpZ25tZW50KCkgfHwgb3BlcmFu
ZC0+aGFzU2lkZUVmZmVjdHMoKSk7IH0KLQotICAgIHZvaWQgc2V0T3BlcmFuZChUSW50ZXJtVHlw
ZWQqIG8pIHsgb3BlcmFuZCA9IG87IH0KLSAgICBUSW50ZXJtVHlwZWQqIGdldE9wZXJhbmQoKSB7
IHJldHVybiBvcGVyYW5kOyB9ICAgIAotICAgIGJvb2wgcHJvbW90ZShUSW5mb1NpbmsmKTsKLQot
ICAgIHZvaWQgc2V0VXNlRW11bGF0ZWRGdW5jdGlvbigpIHsgdXNlRW11bGF0ZWRGdW5jdGlvbiA9
IHRydWU7IH0KLSAgICBib29sIGdldFVzZUVtdWxhdGVkRnVuY3Rpb24oKSB7IHJldHVybiB1c2VF
bXVsYXRlZEZ1bmN0aW9uOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBUSW50ZXJtVHlwZWQqIG9wZXJh
bmQ7Ci0KLSAgICAvLyBJZiBzZXQgdG8gdHJ1ZSwgcmVwbGFjZSB0aGUgYnVpbHQtaW4gZnVuY3Rp
b24gY2FsbCB3aXRoIGFuIGVtdWxhdGVkIG9uZQotICAgIC8vIHRvIHdvcmsgYXJvdW5kIGRyaXZl
ciBidWdzLgotICAgIGJvb2wgdXNlRW11bGF0ZWRGdW5jdGlvbjsKLX07Ci0KLXR5cGVkZWYgVFZl
Y3RvcjxUSW50ZXJtTm9kZSo+IFRJbnRlcm1TZXF1ZW5jZTsKLXR5cGVkZWYgVFZlY3RvcjxpbnQ+
IFRRdWFsaWZpZXJMaXN0OwotCi0vLwotLy8gTm9kZXMgdGhhdCBvcGVyYXRlIG9uIGFuIGFyYml0
cmFyeSBzaXplZCBzZXQgb2YgY2hpbGRyZW4uCi0vLwotY2xhc3MgVEludGVybUFnZ3JlZ2F0ZSA6
IHB1YmxpYyBUSW50ZXJtT3BlcmF0b3IgewotcHVibGljOgotICAgIFRJbnRlcm1BZ2dyZWdhdGUo
KSA6IFRJbnRlcm1PcGVyYXRvcihFT3BOdWxsKSwgdXNlckRlZmluZWQoZmFsc2UpLCB1c2VFbXVs
YXRlZEZ1bmN0aW9uKGZhbHNlKSB7IH0KLSAgICBUSW50ZXJtQWdncmVnYXRlKFRPcGVyYXRvciBv
KSA6IFRJbnRlcm1PcGVyYXRvcihvKSwgdXNlRW11bGF0ZWRGdW5jdGlvbihmYWxzZSkgeyB9Ci0g
ICAgflRJbnRlcm1BZ2dyZWdhdGUoKSB7IH0KLQotICAgIHZpcnR1YWwgVEludGVybUFnZ3JlZ2F0
ZSogZ2V0QXNBZ2dyZWdhdGUoKSB7IHJldHVybiB0aGlzOyB9Ci0gICAgdmlydHVhbCB2b2lkIHRy
YXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKLSAgICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxk
Tm9kZSgKLSAgICAgICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFj
ZW1lbnQpOwotCi0gICAgLy8gQ29uc2VydmF0aXZlbHkgYXNzdW1lIGZ1bmN0aW9uIGNhbGxzIGFu
ZCBvdGhlciBhZ2dyZWdhdGUgb3BlcmF0b3JzIGhhdmUgc2lkZS1lZmZlY3RzCi0gICAgdmlydHVh
bCBib29sIGhhc1NpZGVFZmZlY3RzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgVElu
dGVybVNlcXVlbmNlJiBnZXRTZXF1ZW5jZSgpIHsgcmV0dXJuIHNlcXVlbmNlOyB9Ci0KLSAgICB2
b2lkIHNldE5hbWUoY29uc3QgVFN0cmluZyYgbikgeyBuYW1lID0gbjsgfQotICAgIGNvbnN0IFRT
dHJpbmcmIGdldE5hbWUoKSBjb25zdCB7IHJldHVybiBuYW1lOyB9Ci0KLSAgICB2b2lkIHNldFVz
ZXJEZWZpbmVkKCkgeyB1c2VyRGVmaW5lZCA9IHRydWU7IH0KLSAgICBib29sIGlzVXNlckRlZmlu
ZWQoKSBjb25zdCB7IHJldHVybiB1c2VyRGVmaW5lZDsgfQotCi0gICAgdm9pZCBzZXRPcHRpbWl6
ZShib29sIG8pIHsgb3B0aW1pemUgPSBvOyB9Ci0gICAgYm9vbCBnZXRPcHRpbWl6ZSgpIHsgcmV0
dXJuIG9wdGltaXplOyB9Ci0gICAgdm9pZCBzZXREZWJ1Zyhib29sIGQpIHsgZGVidWcgPSBkOyB9
Ci0gICAgYm9vbCBnZXREZWJ1ZygpIHsgcmV0dXJuIGRlYnVnOyB9Ci0KLSAgICB2b2lkIHNldFVz
ZUVtdWxhdGVkRnVuY3Rpb24oKSB7IHVzZUVtdWxhdGVkRnVuY3Rpb24gPSB0cnVlOyB9Ci0gICAg
Ym9vbCBnZXRVc2VFbXVsYXRlZEZ1bmN0aW9uKCkgeyByZXR1cm4gdXNlRW11bGF0ZWRGdW5jdGlv
bjsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgVEludGVybUFnZ3JlZ2F0ZShjb25zdCBUSW50ZXJtQWdn
cmVnYXRlJik7IC8vIGRpc2FsbG93IGNvcHkgY29uc3RydWN0b3IKLSAgICBUSW50ZXJtQWdncmVn
YXRlJiBvcGVyYXRvcj0oY29uc3QgVEludGVybUFnZ3JlZ2F0ZSYpOyAvLyBkaXNhbGxvdyBhc3Np
Z25tZW50IG9wZXJhdG9yCi0gICAgVEludGVybVNlcXVlbmNlIHNlcXVlbmNlOwotICAgIFRTdHJp
bmcgbmFtZTsKLSAgICBib29sIHVzZXJEZWZpbmVkOyAvLyB1c2VkIGZvciB1c2VyIGRlZmluZWQg
ZnVuY3Rpb24gbmFtZXMKLQotICAgIGJvb2wgb3B0aW1pemU7Ci0gICAgYm9vbCBkZWJ1ZzsKLQot
ICAgIC8vIElmIHNldCB0byB0cnVlLCByZXBsYWNlIHRoZSBidWlsdC1pbiBmdW5jdGlvbiBjYWxs
IHdpdGggYW4gZW11bGF0ZWQgb25lCi0gICAgLy8gdG8gd29yayBhcm91bmQgZHJpdmVyIGJ1Z3Mu
Ci0gICAgYm9vbCB1c2VFbXVsYXRlZEZ1bmN0aW9uOwotfTsKLQotLy8KLS8vIEZvciBpZiB0ZXN0
cy4gIFNpbXBsaWZpZWQgc2luY2UgdGhlcmUgaXMgbm8gc3dpdGNoIHN0YXRlbWVudC4KLS8vCi1j
bGFzcyBUSW50ZXJtU2VsZWN0aW9uIDogcHVibGljIFRJbnRlcm1UeXBlZCB7Ci1wdWJsaWM6Ci0g
ICAgVEludGVybVNlbGVjdGlvbihUSW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1Ob2RlKiB0cnVl
QiwgVEludGVybU5vZGUqIGZhbHNlQikgOgotICAgICAgICAgICAgVEludGVybVR5cGVkKFRUeXBl
KEVidFZvaWQsIEVicFVuZGVmaW5lZCkpLCBjb25kaXRpb24oY29uZCksIHRydWVCbG9jayh0cnVl
QiksIGZhbHNlQmxvY2soZmFsc2VCKSB7fQotICAgIFRJbnRlcm1TZWxlY3Rpb24oVEludGVybVR5
cGVkKiBjb25kLCBUSW50ZXJtTm9kZSogdHJ1ZUIsIFRJbnRlcm1Ob2RlKiBmYWxzZUIsIGNvbnN0
IFRUeXBlJiB0eXBlKSA6Ci0gICAgICAgICAgICBUSW50ZXJtVHlwZWQodHlwZSksIGNvbmRpdGlv
bihjb25kKSwgdHJ1ZUJsb2NrKHRydWVCKSwgZmFsc2VCbG9jayhmYWxzZUIpIHt9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOwotICAgIHZpcnR1YWwgYm9v
bCByZXBsYWNlQ2hpbGROb2RlKAotICAgICAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRl
cm1Ob2RlICpyZXBsYWNlbWVudCk7Ci0KLSAgICAvLyBDb25zZXJ2YXRpdmVseSBhc3N1bWUgc2Vs
ZWN0aW9ucyBoYXZlIHNpZGUtZWZmZWN0cwotICAgIHZpcnR1YWwgYm9vbCBoYXNTaWRlRWZmZWN0
cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIGJvb2wgdXNlc1Rlcm5hcnlPcGVyYXRv
cigpIGNvbnN0IHsgcmV0dXJuIGdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQ7IH0KLSAgICBUSW50
ZXJtTm9kZSogZ2V0Q29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uOyB9Ci0gICAg
VEludGVybU5vZGUqIGdldFRydWVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIHRydWVCbG9jazsgfQot
ICAgIFRJbnRlcm1Ob2RlKiBnZXRGYWxzZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gZmFsc2VCbG9j
azsgfQotICAgIFRJbnRlcm1TZWxlY3Rpb24qIGdldEFzU2VsZWN0aW9uTm9kZSgpIHsgcmV0dXJu
IHRoaXM7IH0KLQotcHJvdGVjdGVkOgotICAgIFRJbnRlcm1UeXBlZCogY29uZGl0aW9uOwotICAg
IFRJbnRlcm1Ob2RlKiB0cnVlQmxvY2s7Ci0gICAgVEludGVybU5vZGUqIGZhbHNlQmxvY2s7Ci19
OwotCi1lbnVtIFZpc2l0Ci17Ci0gICAgUHJlVmlzaXQsCi0gICAgSW5WaXNpdCwKLSAgICBQb3N0
VmlzaXQKLX07Ci0KLS8vCi0vLyBGb3IgdHJhdmVyc2luZyB0aGUgdHJlZS4gIFVzZXIgc2hvdWxk
IGRlcml2ZSBmcm9tIHRoaXMsIAotLy8gcHV0IHRoZWlyIHRyYXZlcnNhbCBzcGVjaWZpYyBkYXRh
IGluIGl0LCBhbmQgdGhlbiBwYXNzCi0vLyBpdCB0byBhIFRyYXZlcnNlIG1ldGhvZC4KLS8vCi0v
LyBXaGVuIHVzaW5nIHRoaXMsIGp1c3QgZmlsbCBpbiB0aGUgbWV0aG9kcyBmb3Igbm9kZXMgeW91
IHdhbnQgdmlzaXRlZC4KLS8vIFJldHVybiBmYWxzZSBmcm9tIGEgcHJlLXZpc2l0IHRvIHNraXAg
dmlzaXRpbmcgdGhhdCBub2RlJ3Mgc3VidHJlZS4KLS8vCi1jbGFzcyBUSW50ZXJtVHJhdmVyc2Vy
Ci17Ci1wdWJsaWM6Ci0gICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSgpOwotICAgIFRJbnRl
cm1UcmF2ZXJzZXIoYm9vbCBwcmVWaXNpdCA9IHRydWUsIGJvb2wgaW5WaXNpdCA9IGZhbHNlLCBi
b29sIHBvc3RWaXNpdCA9IGZhbHNlLCBib29sIHJpZ2h0VG9MZWZ0ID0gZmFsc2UpIDogCi0gICAg
ICAgICAgICBwcmVWaXNpdChwcmVWaXNpdCksCi0gICAgICAgICAgICBpblZpc2l0KGluVmlzaXQp
LAotICAgICAgICAgICAgcG9zdFZpc2l0KHBvc3RWaXNpdCksCi0gICAgICAgICAgICByaWdodFRv
TGVmdChyaWdodFRvTGVmdCksCi0gICAgICAgICAgICBkZXB0aCgwKSwKLSAgICAgICAgICAgIG1h
eERlcHRoKDApIHt9Ci0gICAgdmlydHVhbCB+VEludGVybVRyYXZlcnNlcigpIHt9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopIHt9Ci0gICAgdmlydHVhbCB2
b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiopIHt9Ci0gICAgdmly
dHVhbCBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kikge3JldHVy
biB0cnVlO30KLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVy
bVVuYXJ5Kikge3JldHVybiB0cnVlO30KLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRTZWxlY3Rpb24o
VmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKSB7cmV0dXJuIHRydWU7fQotICAgIHZpcnR1
YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopIHty
ZXR1cm4gdHJ1ZTt9Ci0gICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVElu
dGVybUxvb3AqKSB7cmV0dXJuIHRydWU7fQotICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJyYW5jaChW
aXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCopIHtyZXR1cm4gdHJ1ZTt9Ci0KLSAgICBpbnQgZ2V0
TWF4RGVwdGgoKSBjb25zdCB7cmV0dXJuIG1heERlcHRoO30KLQotICAgIHZvaWQgaW5jcmVtZW50
RGVwdGgoVEludGVybU5vZGUgKmN1cnJlbnQpCi0gICAgewotICAgICAgICBkZXB0aCsrOwotICAg
ICAgICBtYXhEZXB0aCA9IHN0ZDo6bWF4KG1heERlcHRoLCBkZXB0aCk7Ci0gICAgICAgIHBhdGgu
cHVzaF9iYWNrKGN1cnJlbnQpOwotICAgIH0KLQotICAgIHZvaWQgZGVjcmVtZW50RGVwdGgoKQot
ICAgIHsKLSAgICAgICAgZGVwdGgtLTsKLSAgICAgICAgcGF0aC5wb3BfYmFjaygpOwotICAgIH0K
LQotICAgIFRJbnRlcm1Ob2RlICpnZXRQYXJlbnROb2RlKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBwYXRoLnNpemUoKSA9PSAwID8gTlVMTCA6IHBhdGguYmFjaygpOwotICAgIH0KLQotICAgIC8v
IFJldHVybiB0aGUgb3JpZ2luYWwgbmFtZSBpZiBoYXNoIGZ1bmN0aW9uIHBvaW50ZXIgaXMgTlVM
TDsKLSAgICAvLyBvdGhlcndpc2UgcmV0dXJuIHRoZSBoYXNoZWQgbmFtZS4KLSAgICBzdGF0aWMg
VFN0cmluZyBoYXNoKGNvbnN0IFRTdHJpbmcmIG5hbWUsIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1
bmN0aW9uKTsKLQotICAgIGNvbnN0IGJvb2wgcHJlVmlzaXQ7Ci0gICAgY29uc3QgYm9vbCBpblZp
c2l0OwotICAgIGNvbnN0IGJvb2wgcG9zdFZpc2l0OwotICAgIGNvbnN0IGJvb2wgcmlnaHRUb0xl
ZnQ7Ci0KLXByb3RlY3RlZDoKLSAgICBpbnQgZGVwdGg7Ci0gICAgaW50IG1heERlcHRoOwotCi0g
ICAgLy8gQWxsIHRoZSBub2RlcyBmcm9tIHJvb3QgdG8gdGhlIGN1cnJlbnQgbm9kZSdzIHBhcmVu
dCBkdXJpbmcgdHJhdmVyc2luZy4KLSAgICBUVmVjdG9yPFRJbnRlcm1Ob2RlICo+IHBhdGg7Ci19
OwotCi0jZW5kaWYgLy8gX19JTlRFUk1FRElBVEVfSApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2xvY2FsaW50ZXJtZWRpYXRlLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvbG9jYWxpbnRlcm1lZGlhdGUuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggY2NiYzQwMTc4YWNmNjNlZTRiM2RjMTU3N2RlM2M3MGJiM2Ez
YTM3YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvbG9jYWxpbnRlcm1lZGlhdGUuaAorKysg
L2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYg
X0xPQ0FMX0lOVEVSTUVESUFURV9JTkNMVURFRF8KLSNkZWZpbmUgX0xPQ0FMX0lOVEVSTUVESUFU
RV9JTkNMVURFRF8KLQotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgotI2luY2x1ZGUg
ImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxl
LmgiCi0KLXN0cnVjdCBUVmVjdG9yRmllbGRzIHsKLSAgICBpbnQgb2Zmc2V0c1s0XTsKLSAgICBp
bnQgbnVtOwotfTsKLQotLy8KLS8vIFNldCBvZiBoZWxwZXIgZnVuY3Rpb25zIHRvIGhlbHAgcGFy
c2UgYW5kIGJ1aWxkIHRoZSB0cmVlLgotLy8KLWNsYXNzIFRJbmZvU2luazsKLWNsYXNzIFRJbnRl
cm1lZGlhdGUgewotcHVibGljOiAgICAKLSAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKCk7
Ci0gICAgVEludGVybWVkaWF0ZShUSW5mb1NpbmsmIGkpIDogaW5mb1NpbmsoaSkgeyB9Ci0KLSAg
ICBUSW50ZXJtU3ltYm9sKiBhZGRTeW1ib2woaW50IElkLCBjb25zdCBUU3RyaW5nJiwgY29uc3Qg
VFR5cGUmLCBjb25zdCBUU291cmNlTG9jJik7Ci0gICAgVEludGVybVR5cGVkKiBhZGRDb252ZXJz
aW9uKFRPcGVyYXRvciwgY29uc3QgVFR5cGUmLCBUSW50ZXJtVHlwZWQqKTsKLSAgICBUSW50ZXJt
VHlwZWQqIGFkZEJpbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGxlZnQsIFRJ
bnRlcm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmLCBUU3ltYm9sVGFibGUmKTsKLSAg
ICBUSW50ZXJtVHlwZWQqIGFkZEFzc2lnbihUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogbGVm
dCwgVEludGVybVR5cGVkKiByaWdodCwgY29uc3QgVFNvdXJjZUxvYyYpOwotICAgIFRJbnRlcm1U
eXBlZCogYWRkSW5kZXgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGJhc2UsIFRJbnRlcm1U
eXBlZCogaW5kZXgsIGNvbnN0IFRTb3VyY2VMb2MmKTsKLSAgICBUSW50ZXJtVHlwZWQqIGFkZFVu
YXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBjaGlsZCwgY29uc3QgVFNvdXJjZUxv
YyYsIFRTeW1ib2xUYWJsZSYpOwotICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGdyb3dBZ2dyZWdhdGUo
VEludGVybU5vZGUqIGxlZnQsIFRJbnRlcm1Ob2RlKiByaWdodCwgY29uc3QgVFNvdXJjZUxvYyYp
OwotICAgIFRJbnRlcm1BZ2dyZWdhdGUqIG1ha2VBZ2dyZWdhdGUoVEludGVybU5vZGUqIG5vZGUs
IGNvbnN0IFRTb3VyY2VMb2MmKTsKLSAgICBUSW50ZXJtQWdncmVnYXRlKiBzZXRBZ2dyZWdhdGVP
cGVyYXRvcihUSW50ZXJtTm9kZSosIFRPcGVyYXRvciwgY29uc3QgVFNvdXJjZUxvYyYpOwotICAg
IFRJbnRlcm1Ob2RlKiAgYWRkU2VsZWN0aW9uKFRJbnRlcm1UeXBlZCogY29uZCwgVEludGVybU5v
ZGVQYWlyIGNvZGUsIGNvbnN0IFRTb3VyY2VMb2MmKTsKLSAgICBUSW50ZXJtVHlwZWQqIGFkZFNl
bGVjdGlvbihUSW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1UeXBlZCogdHJ1ZUJsb2NrLCBUSW50
ZXJtVHlwZWQqIGZhbHNlQmxvY2ssIGNvbnN0IFRTb3VyY2VMb2MmKTsKLSAgICBUSW50ZXJtVHlw
ZWQqIGFkZENvbW1hKFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdodCwgY29u
c3QgVFNvdXJjZUxvYyYpOwotICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiBhZGRDb25zdGFudFVu
aW9uKENvbnN0YW50VW5pb24qLCBjb25zdCBUVHlwZSYsIGNvbnN0IFRTb3VyY2VMb2MmKTsKLSAg
ICBUSW50ZXJtVHlwZWQqIHByb21vdGVDb25zdGFudFVuaW9uKFRCYXNpY1R5cGUsIFRJbnRlcm1D
b25zdGFudFVuaW9uKikgOwotICAgIGJvb2wgcGFyc2VDb25zdFRyZWUoY29uc3QgVFNvdXJjZUxv
YyYsIFRJbnRlcm1Ob2RlKiwgQ29uc3RhbnRVbmlvbiosIFRPcGVyYXRvciwgVFN5bWJvbFRhYmxl
JiwgVFR5cGUsIGJvb2wgc2luZ2xlQ29uc3RhbnRQYXJhbSA9IGZhbHNlKTsgICAgICAgIAotICAg
IFRJbnRlcm1Ob2RlKiBhZGRMb29wKFRMb29wVHlwZSwgVEludGVybU5vZGUqLCBUSW50ZXJtVHlw
ZWQqLCBUSW50ZXJtVHlwZWQqLCBUSW50ZXJtTm9kZSosIGNvbnN0IFRTb3VyY2VMb2MmKTsKLSAg
ICBUSW50ZXJtQnJhbmNoKiBhZGRCcmFuY2goVE9wZXJhdG9yLCBjb25zdCBUU291cmNlTG9jJik7
Ci0gICAgVEludGVybUJyYW5jaCogYWRkQnJhbmNoKFRPcGVyYXRvciwgVEludGVybVR5cGVkKiwg
Y29uc3QgVFNvdXJjZUxvYyYpOwotICAgIFRJbnRlcm1UeXBlZCogYWRkU3dpenpsZShUVmVjdG9y
RmllbGRzJiwgY29uc3QgVFNvdXJjZUxvYyYpOwotICAgIGJvb2wgcG9zdFByb2Nlc3MoVEludGVy
bU5vZGUqKTsKLSAgICB2b2lkIHJlbW92ZShUSW50ZXJtTm9kZSopOwotICAgIHZvaWQgb3V0cHV0
VHJlZShUSW50ZXJtTm9kZSopOwotCi1wcml2YXRlOgotICAgIHZvaWQgb3BlcmF0b3I9KFRJbnRl
cm1lZGlhdGUmKTsgLy8gcHJldmVudCBhc3NpZ25tZW50cwotCi0gICAgVEluZm9TaW5rJiBpbmZv
U2luazsKLX07Ci0KLSNlbmRpZiAvLyBfTE9DQUxfSU5URVJNRURJQVRFX0lOQ0xVREVEXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL29zaW5jbHVkZS5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL29zaW5jbHVkZS5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGJiMWE3OTdjNGQ4ZDkyZmQ2MzU0MmE5ZTE5NWRl
NTBkZjA2ODhiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9vc2luY2x1ZGUuaAorKysgL2Rl
di9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgX19P
U0lOQ0xVREVfSAotI2RlZmluZSBfX09TSU5DTFVERV9ICi0KLS8vCi0vLyBUaGlzIGZpbGUgY29u
dGFpbnMgY29udGFpbnMgb3Mtc3BlY2lmaWMgZGF0YXR5cGVzIGFuZAotLy8gZGVjbGFyZXMgYW55
IG9zLXNwZWNpZmljIGZ1bmN0aW9ucy4KLS8vCi0KLSNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVm
aW5lZChfV0lONjQpCi0jZGVmaW5lIEFOR0xFX09TX1dJTgotI2VsaWYgZGVmaW5lZChfX0FQUExF
X18pIHx8IGRlZmluZWQoX19saW51eF9fKSB8fCBcCi0gICAgICBkZWZpbmVkKF9fRnJlZUJTRF9f
KSB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBcCi0gICAgICBkZWZpbmVkKF9fc3VuKSB8fCBk
ZWZpbmVkKEFORFJPSUQpIHx8IFwKLSAgICAgIGRlZmluZWQoX19HTElCQ19fKSB8fCBkZWZpbmVk
KF9fR05VX18pIHx8IFwKLSAgICAgIGRlZmluZWQoX19RTlhfXykKLSNkZWZpbmUgQU5HTEVfT1Nf
UE9TSVgKLSNlbHNlCi0jZXJyb3IgVW5zdXBwb3J0ZWQgcGxhdGZvcm0uCi0jZW5kaWYKLQotI2lm
IGRlZmluZWQoQU5HTEVfT1NfV0lOKQotI2RlZmluZSBTVFJJQ1QKLSNkZWZpbmUgVkNfRVhUUkFM
RUFOIDEKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jZWxpZiBkZWZpbmVkKEFOR0xFX09TX1BPU0lY
KQotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KLSNpbmNsdWRl
IDxlcnJuby5oPgotI2VuZGlmICAvLyBBTkdMRV9PU19XSU4KLQotCi0jaW5jbHVkZSAiY29tcGls
ZXIvZGVidWcuaCIKLQotLy8KLS8vIFRocmVhZCBMb2NhbCBTdG9yYWdlIE9wZXJhdGlvbnMKLS8v
Ci0jaWYgZGVmaW5lZChBTkdMRV9PU19XSU4pCi10eXBlZGVmIERXT1JEIE9TX1RMU0luZGV4Owot
I2RlZmluZSBPU19JTlZBTElEX1RMU19JTkRFWCAoVExTX09VVF9PRl9JTkRFWEVTKQotI2VsaWYg
ZGVmaW5lZChBTkdMRV9PU19QT1NJWCkKLXR5cGVkZWYgcHRocmVhZF9rZXlfdCBPU19UTFNJbmRl
eDsKLSNkZWZpbmUgT1NfSU5WQUxJRF9UTFNfSU5ERVggKHN0YXRpY19jYXN0PE9TX1RMU0luZGV4
PigtMSkpCi0jZW5kaWYgIC8vIEFOR0xFX09TX1dJTgotCi1PU19UTFNJbmRleCBPU19BbGxvY1RM
U0luZGV4KCk7Ci1ib29sIE9TX1NldFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCwgdm9pZCAq
bHB2VmFsdWUpOwotYm9vbCBPU19GcmVlVExTSW5kZXgoT1NfVExTSW5kZXggbkluZGV4KTsKLQot
aW5saW5lIHZvaWQqIE9TX0dldFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCkKLXsKLSAgICBB
U1NFUlQobkluZGV4ICE9IE9TX0lOVkFMSURfVExTX0lOREVYKTsKLSNpZiBkZWZpbmVkKEFOR0xF
X09TX1dJTikKLSAgICByZXR1cm4gVGxzR2V0VmFsdWUobkluZGV4KTsKLSNlbGlmIGRlZmluZWQo
QU5HTEVfT1NfUE9TSVgpCi0gICAgcmV0dXJuIHB0aHJlYWRfZ2V0c3BlY2lmaWMobkluZGV4KTsK
LSNlbmRpZiAgLy8gQU5HTEVfT1NfV0lOCi19Ci0KLSNlbmRpZiAvLyBfX09TSU5DTFVERV9ICmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3Nzb3VyY2Vf
cG9zaXguY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL29zc291cmNl
X3Bvc2l4LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWUxZTY5OWFlYmMzYTI3
YmEzZGExN2VlODEzMTVkYzY2MmI5OThlOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3Nz
b3VyY2VfcG9zaXguY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLQotLy8KLS8vIFRoaXMgZmlsZSBjb250YWlucyB0aGUgcG9zaXggc3BlY2lmaWMg
ZnVuY3Rpb25zCi0vLwotI2luY2x1ZGUgImNvbXBpbGVyL29zaW5jbHVkZS5oIgotCi0jaWYgIWRl
ZmluZWQoQU5HTEVfT1NfUE9TSVgpCi0jZXJyb3IgVHJ5aW5nIHRvIGJ1aWxkIGEgcG9zaXggc3Bl
Y2lmaWMgZmlsZSBpbiBhIG5vbi1wb3NpeCBidWlsZC4KLSNlbmRpZgotCi0vLwotLy8gVGhyZWFk
IExvY2FsIFN0b3JhZ2UgT3BlcmF0aW9ucwotLy8KLU9TX1RMU0luZGV4IE9TX0FsbG9jVExTSW5k
ZXgoKQotewotICAgIHB0aHJlYWRfa2V5X3QgcFBvb2xJbmRleDsKLQotICAgIC8vCi0gICAgLy8g
Q3JlYXRlIGdsb2JhbCBwb29sIGtleS4KLSAgICAvLwotICAgIGlmICgocHRocmVhZF9rZXlfY3Jl
YXRlKCZwUG9vbEluZGV4LCBOVUxMKSkgIT0gMCkgewotICAgICAgICBhc3NlcnQoMCAmJiAiT1Nf
QWxsb2NUTFNJbmRleCgpOiBVbmFibGUgdG8gYWxsb2NhdGUgVGhyZWFkIExvY2FsIFN0b3JhZ2Ui
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgcmV0
dXJuIHBQb29sSW5kZXg7Ci0gICAgfQotfQotCi0KLWJvb2wgT1NfU2V0VExTVmFsdWUoT1NfVExT
SW5kZXggbkluZGV4LCB2b2lkICpscHZWYWx1ZSkKLXsKLSAgICBpZiAobkluZGV4ID09IE9TX0lO
VkFMSURfVExTX0lOREVYKSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJPU19TZXRUTFNWYWx1ZSgp
OiBJbnZhbGlkIFRMUyBJbmRleCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgaWYgKHB0aHJlYWRfc2V0c3BlY2lmaWMobkluZGV4LCBscHZWYWx1ZSkgPT0gMCkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLQot
Ym9vbCBPU19GcmVlVExTSW5kZXgoT1NfVExTSW5kZXggbkluZGV4KQotewotICAgIGlmIChuSW5k
ZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIk9TX1Nl
dFRMU1ZhbHVlKCk6IEludmFsaWQgVExTIEluZGV4Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICAvLwotICAgIC8vIERlbGV0ZSB0aGUgZ2xvYmFsIHBvb2wga2V5LgotICAg
IC8vCi0gICAgaWYgKHB0aHJlYWRfa2V5X2RlbGV0ZShuSW5kZXgpID09IDApCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL29zc291cmNlX3dpbi5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3Nzb3VyY2Vfd2luLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk5MjJmZWYzZjQxMWVkYmI4M2I1MjI0MTJi
NmNmNzI4YzNmOWYzOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3Nzb3VyY2Vfd2luLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNp
bmNsdWRlICJjb21waWxlci9vc2luY2x1ZGUuaCIKLS8vCi0vLyBUaGlzIGZpbGUgY29udGFpbnMg
Y29udGFpbnMgdGhlIHdpbmRvdydzIHNwZWNpZmljIGZ1bmN0aW9ucwotLy8KLQotI2lmICFkZWZp
bmVkKEFOR0xFX09TX1dJTikKLSNlcnJvciBUcnlpbmcgdG8gYnVpbGQgYSB3aW5kb3dzIHNwZWNp
ZmljIGZpbGUgaW4gYSBub24gd2luZG93cyBidWlsZC4KLSNlbmRpZgotCi0KLS8vCi0vLyBUaHJl
YWQgTG9jYWwgU3RvcmFnZSBPcGVyYXRpb25zCi0vLwotT1NfVExTSW5kZXggT1NfQWxsb2NUTFNJ
bmRleCgpCi17Ci0JRFdPUkQgZHdJbmRleCA9IFRsc0FsbG9jKCk7Ci0JaWYgKGR3SW5kZXggPT0g
VExTX09VVF9PRl9JTkRFWEVTKSB7Ci0JCWFzc2VydCgwICYmICJPU19BbGxvY1RMU0luZGV4KCk6
IFVuYWJsZSB0byBhbGxvY2F0ZSBUaHJlYWQgTG9jYWwgU3RvcmFnZSIpOwotCQlyZXR1cm4gT1Nf
SU5WQUxJRF9UTFNfSU5ERVg7Ci0JfQotCi0JcmV0dXJuIGR3SW5kZXg7Ci19Ci0KLQotYm9vbCBP
U19TZXRUTFNWYWx1ZShPU19UTFNJbmRleCBuSW5kZXgsIHZvaWQgKmxwdlZhbHVlKQotewotCWlm
IChuSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKLQkJYXNzZXJ0KDAgJiYgIk9TX1Nl
dFRMU1ZhbHVlKCk6IEludmFsaWQgVExTIEluZGV4Iik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0K
LQlpZiAoVGxzU2V0VmFsdWUobkluZGV4LCBscHZWYWx1ZSkpCi0JCXJldHVybiB0cnVlOwotCWVs
c2UKLQkJcmV0dXJuIGZhbHNlOwotfQotCi0KLWJvb2wgT1NfRnJlZVRMU0luZGV4KE9TX1RMU0lu
ZGV4IG5JbmRleCkKLXsKLQlpZiAobkluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7Ci0J
CWFzc2VydCgwICYmICJPU19TZXRUTFNWYWx1ZSgpOiBJbnZhbGlkIFRMUyBJbmRleCIpOwotCQly
ZXR1cm4gZmFsc2U7Ci0JfQotCi0JaWYgKFRsc0ZyZWUobkluZGV4KSkKLQkJcmV0dXJuIHRydWU7
Ci0JZWxzZQotCQlyZXR1cm4gZmFsc2U7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcGFyc2VDb25zdC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcGFyc2VDb25zdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDY1ZWQxMTVjYmNiMzM4Nzk4N2QzMTM5YWY4Y2UzZjJlMDIwNzU0MjIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3BhcnNlQ29uc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjQ1
ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9QYXJzZUNv
bnRleHQuaCIKLQotLy8KLS8vIFVzZSB0aGlzIGNsYXNzIHRvIGNhcnJ5IGFsb25nIGRhdGEgZnJv
bSBub2RlIHRvIG5vZGUgaW4gCi0vLyB0aGUgdHJhdmVyc2FsCi0vLwotY2xhc3MgVENvbnN0VHJh
dmVyc2VyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIFRDb25zdFRy
YXZlcnNlcihDb25zdGFudFVuaW9uKiBjVW5pb24sIGJvb2wgc2luZ2xlQ29uc3RQYXJhbSwgVE9w
ZXJhdG9yIGNvbnN0cnVjdFR5cGUsIFRJbmZvU2luayYgc2luaywgVFN5bWJvbFRhYmxlJiBzeW1U
YWJsZSwgVFR5cGUmIHQpCi0gICAgICAgIDogZXJyb3IoZmFsc2UpLAotICAgICAgICAgIGluZGV4
KDApLAotICAgICAgICAgIHVuaW9uQXJyYXkoY1VuaW9uKSwKLSAgICAgICAgICB0eXBlKHQpLAot
ICAgICAgICAgIGNvbnN0cnVjdG9yVHlwZShjb25zdHJ1Y3RUeXBlKSwKLSAgICAgICAgICBzaW5n
bGVDb25zdGFudFBhcmFtKHNpbmdsZUNvbnN0UGFyYW0pLAotICAgICAgICAgIGluZm9TaW5rKHNp
bmspLAotICAgICAgICAgIHN5bWJvbFRhYmxlKHN5bVRhYmxlKSwKLSAgICAgICAgICBzaXplKDAp
LAotICAgICAgICAgIGlzTWF0cml4KGZhbHNlKSwKLSAgICAgICAgICBtYXRyaXhTaXplKDApIHsK
LSAgICB9Ci0KLSAgICBib29sIGVycm9yOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCB2aXNpdFN5
bWJvbChUSW50ZXJtU3ltYm9sKik7Ci0gICAgdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVy
bUNvbnN0YW50VW5pb24qKTsKLSAgICBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50
ZXJtQmluYXJ5Kik7Ci0gICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5h
cnkqKTsKLSAgICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0
aW9uKik7Ci0gICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3Jl
Z2F0ZSopOwotICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCopOwot
ICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqKTsKLQotICAg
IHNpemVfdCBpbmRleDsKLSAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5OwotICAgIFRUeXBl
IHR5cGU7Ci0gICAgVE9wZXJhdG9yIGNvbnN0cnVjdG9yVHlwZTsKLSAgICBib29sIHNpbmdsZUNv
bnN0YW50UGFyYW07Ci0gICAgVEluZm9TaW5rJiBpbmZvU2luazsKLSAgICBUU3ltYm9sVGFibGUm
IHN5bWJvbFRhYmxlOwotICAgIHNpemVfdCBzaXplOyAvLyBzaXplIG9mIHRoZSBjb25zdHJ1Y3Rv
ciAoIDQgZm9yIHZlYzQpCi0gICAgYm9vbCBpc01hdHJpeDsKLSAgICBzaXplX3QgbWF0cml4U2l6
ZTsgLy8gZGltZW5zaW9uIG9mIHRoZSBtYXRyaXggKG5vbWluYWwgc2l6ZSBhbmQgbm90IHRoZSBp
bnN0YW5jZSBzaXplKQotfTsKLQotLy8KLS8vIFRoZSByZXN0IG9mIHRoZSBmaWxlIGFyZSB0aGUg
dHJhdmVyc2FsIGZ1bmN0aW9ucy4gIFRoZSBsYXN0IG9uZQotLy8gaXMgdGhlIG9uZSB0aGF0IHN0
YXJ0cyB0aGUgdHJhdmVyc2FsLgotLy8KLS8vIFJldHVybiB0cnVlIGZyb20gaW50ZXJpb3Igbm9k
ZXMgdG8gaGF2ZSB0aGUgZXh0ZXJuYWwgdHJhdmVyc2FsCi0vLyBjb250aW51ZSBvbiB0byBjaGls
ZHJlbi4gIElmIHlvdSBwcm9jZXNzIGNoaWxkcmVuIHlvdXJzZWxmLAotLy8gcmV0dXJuIGZhbHNl
LgotLy8KLQotdm9pZCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wq
IG5vZGUpCi17Ci0gICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9y
LCBub2RlLT5nZXRMaW5lKCksICJTeW1ib2wgTm9kZSBmb3VuZCBpbiBjb25zdGFudCBjb25zdHJ1
Y3RvciIpOwotICAgIHJldHVybjsKLQotfQotCi1ib29sIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRC
aW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5vZGUpCi17Ci0gICAgVFF1YWxpZmll
ciBxdWFsaWZpZXIgPSBub2RlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCk7Ci0gICAgCi0gICAg
aWYgKHF1YWxpZmllciAhPSBFdnFDb25zdCkgewotICAgICAgICBUU3RyaW5nIGJ1ZjsKLSAgICAg
ICAgYnVmLmFwcGVuZCgiJ2NvbnN0cnVjdG9yJyA6IGFzc2lnbmluZyBub24tY29uc3RhbnQgdG8g
Iik7Ci0gICAgICAgIGJ1Zi5hcHBlbmQodHlwZS5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAg
ICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCBi
dWYuY19zdHIoKSk7Ci0gICAgICAgIGVycm9yID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OyAgCi0gICAgfQotCi0gICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJy
b3IsIG5vZGUtPmdldExpbmUoKSwgIkJpbmFyeSBOb2RlIGZvdW5kIGluIGNvbnN0YW50IGNvbnN0
cnVjdG9yIik7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFRDb25zdFRyYXZl
cnNlcjo6dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQotewotICAg
IFRTdHJpbmcgYnVmOwotICAgIGJ1Zi5hcHBlbmQoIidjb25zdHJ1Y3RvcicgOiBhc3NpZ25pbmcg
bm9uLWNvbnN0YW50IHRvICIpOwotICAgIGJ1Zi5hcHBlbmQodHlwZS5nZXRDb21wbGV0ZVN0cmlu
ZygpKTsKLSAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEVycm9yLCBub2RlLT5nZXRM
aW5lKCksIGJ1Zi5jX3N0cigpKTsKLSAgICBlcnJvciA9IHRydWU7Ci0gICAgcmV0dXJuIGZhbHNl
OyAgCi19Ci0KLWJvb2wgVENvbnN0VHJhdmVyc2VyOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNp
dCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKLXsKLSAgICBpZiAoIW5vZGUtPmlzQ29uc3RydWN0
b3IoKSAmJiBub2RlLT5nZXRPcCgpICE9IEVPcENvbW1hKSB7Ci0gICAgICAgIFRTdHJpbmcgYnVm
OwotICAgICAgICBidWYuYXBwZW5kKCInY29uc3RydWN0b3InIDogYXNzaWduaW5nIG5vbi1jb25z
dGFudCB0byAiKTsKLSAgICAgICAgYnVmLmFwcGVuZCh0eXBlLmdldENvbXBsZXRlU3RyaW5nKCkp
OwotICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEVycm9yLCBub2RlLT5nZXRM
aW5lKCksIGJ1Zi5jX3N0cigpKTsKLSAgICAgICAgZXJyb3IgPSB0cnVlOwotICAgICAgICByZXR1
cm4gZmFsc2U7ICAKLSAgICB9Ci0KLSAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkg
PT0gMCkgewotICAgICAgICBlcnJvciA9IHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBib29sIGZsYWcgPSBub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAxICYm
IG5vZGUtPmdldFNlcXVlbmNlKClbMF0tPmdldEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9u
KCk7Ci0gICAgaWYgKGZsYWcpIAotICAgIHsKLSAgICAgICAgc2luZ2xlQ29uc3RhbnRQYXJhbSA9
IHRydWU7IAotICAgICAgICBjb25zdHJ1Y3RvclR5cGUgPSBub2RlLT5nZXRPcCgpOwotICAgICAg
ICBzaXplID0gbm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsKLQotICAgICAgICBpZiAo
bm9kZS0+Z2V0VHlwZSgpLmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgIGlzTWF0cml4ID0gdHJ1
ZTsKLSAgICAgICAgICAgIG1hdHJpeFNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNp
emUoKTsKLSAgICAgICAgfQotICAgIH0gICAgICAgCi0KLSAgICBmb3IgKFRJbnRlcm1TZXF1ZW5j
ZTo6aXRlcmF0b3IgcCA9IG5vZGUtPmdldFNlcXVlbmNlKCkuYmVnaW4oKTsgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHAgIT0gbm9kZS0+Z2V0U2VxdWVuY2UoKS5lbmQoKTsg
cCsrKSB7Ci0KLSAgICAgICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9wQ29tbWEpCi0gICAgICAg
ICAgICBpbmRleCA9IDA7ICAgICAgICAgICAKLQotICAgICAgICAoKnApLT50cmF2ZXJzZSh0aGlz
KTsKLSAgICB9ICAgCi0gICAgaWYgKGZsYWcpIAotICAgIHsKLSAgICAgICAgc2luZ2xlQ29uc3Rh
bnRQYXJhbSA9IGZhbHNlOyAgIAotICAgICAgICBjb25zdHJ1Y3RvclR5cGUgPSBFT3BOdWxsOwot
ICAgICAgICBzaXplID0gMDsKLSAgICAgICAgaXNNYXRyaXggPSBmYWxzZTsKLSAgICAgICAgbWF0
cml4U2l6ZSA9IDA7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBUQ29uc3RU
cmF2ZXJzZXI6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBu
b2RlKQotewotICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwg
bm9kZS0+Z2V0TGluZSgpLCAiU2VsZWN0aW9uIE5vZGUgZm91bmQgaW4gY29uc3RhbnQgY29uc3Ry
dWN0b3IiKTsKLSAgICBlcnJvciA9IHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lk
IFRDb25zdFRyYXZlcnNlcjo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9u
KiBub2RlKQotewotICAgIGlmICghbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSkKLSAgICB7
Ci0gICAgICAgIC8vIFRoZSBjb25zdGFudCB3YXMgbm90IGluaXRpYWxpemVkLCB0aGlzIHNob3Vs
ZCBhbHJlYWR5IGhhdmUgYmVlbiBsb2dnZWQKLSAgICAgICAgYXNzZXJ0KGluZm9TaW5rLmluZm8u
c2l6ZSgpICE9IDApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ29uc3RhbnRVbmlv
biogbGVmdFVuaW9uQXJyYXkgPSB1bmlvbkFycmF5OwotICAgIHNpemVfdCBpbnN0YW5jZVNpemUg
PSB0eXBlLmdldE9iamVjdFNpemUoKTsKLQotICAgIGlmIChpbmRleCA+PSBpbnN0YW5jZVNpemUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghc2luZ2xlQ29uc3RhbnRQYXJhbSkgewotICAg
ICAgICBzaXplX3Qgc2l6ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7Ci0gICAg
Ci0gICAgICAgIENvbnN0YW50VW5pb24gKnJpZ2h0VW5pb25BcnJheSA9IG5vZGUtPmdldFVuaW9u
QXJyYXlQb2ludGVyKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsr
KSB7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPj0gaW5zdGFuY2VTaXplKQotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2luZGV4XSA9IHJpZ2h0VW5p
b25BcnJheVtpXTsKLQotICAgICAgICAgICAgKGluZGV4KSsrOwotICAgICAgICB9Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgc2l6ZV90IHRvdGFsU2l6ZSA9IGluZGV4ICsgc2l6ZTsKLSAgICAgICAg
Q29uc3RhbnRVbmlvbiAqcmlnaHRVbmlvbkFycmF5ID0gbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50
ZXIoKTsKLSAgICAgICAgaWYgKCFpc01hdHJpeCkgewotICAgICAgICAgICAgc2l6ZV90IGNvdW50
ID0gMDsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBpbmRleDsgaSA8IHRvdGFsU2l6ZTsg
aSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGkgPj0gaW5zdGFuY2VTaXplKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXSA9
IHJpZ2h0VW5pb25BcnJheVtjb3VudF07Ci0KLSAgICAgICAgICAgICAgICAoaW5kZXgpKys7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFR5cGUoKS5nZXRP
YmplY3RTaXplKCkgPiAxKQotICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAg
ICAgfQotICAgICAgICB9IGVsc2UgeyAgLy8gZm9yIG1hdHJpeCBjb25zdHJ1Y3RvcnMKLSAgICAg
ICAgICAgIHNpemVfdCBjb3VudCA9IDA7Ci0gICAgICAgICAgICBzaXplX3QgZWxlbWVudCA9IGlu
ZGV4OwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGluZGV4OyBpIDwgdG90YWxTaXplOyBp
KyspIHsKLSAgICAgICAgICAgICAgICBpZiAoaSA+PSBpbnN0YW5jZVNpemUpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCAtIGkgPT0gMCB8
fCAoaSAtIGVsZW1lbnQpICUgKG1hdHJpeFNpemUgKyAxKSA9PSAwICkKLSAgICAgICAgICAgICAg
ICAgICAgbGVmdFVuaW9uQXJyYXlbaV0gPSByaWdodFVuaW9uQXJyYXlbY291bnRdOwotICAgICAg
ICAgICAgICAgIGVsc2UgCi0gICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNl
dEZDb25zdCgwLjBmKTsKLQotICAgICAgICAgICAgICAgIChpbmRleCkrKzsKLQotICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpID4gMSkKLSAgICAgICAg
ICAgICAgICAgICAgY291bnQrKzsgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgVENvbnN0VHJhdmVyc2VyOjp2aXNpdExvb3AoVmlzaXQg
dmlzaXQsIFRJbnRlcm1Mb29wKiBub2RlKQotewotICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShF
UHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiTG9vcCBOb2RlIGZvdW5kIGlu
IGNvbnN0YW50IGNvbnN0cnVjdG9yIik7Ci0gICAgZXJyb3IgPSB0cnVlOwotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotYm9vbCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0
LCBUSW50ZXJtQnJhbmNoKiBub2RlKQotewotICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQnJhbmNoIE5vZGUgZm91bmQgaW4g
Y29uc3RhbnQgY29uc3RydWN0b3IiKTsKLSAgICBlcnJvciA9IHRydWU7Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi0vLwotLy8gVGhpcyBmdW5jdGlvbiBpcyB0aGUgb25lIHRvIGNhbGwgZXh0ZXJu
YWxseSB0byBzdGFydCB0aGUgdHJhdmVyc2FsLgotLy8gSW5kaXZpZHVhbCBmdW5jdGlvbnMgY2Fu
IGJlIGluaXRpYWxpemVkIHRvIDAgdG8gc2tpcCBwcm9jZXNzaW5nIG9mIHRoYXQKLS8vIHR5cGUg
b2Ygbm9kZS4gIEl0J3MgY2hpbGRyZW4gd2lsbCBzdGlsbCBiZSBwcm9jZXNzZWQuCi0vLwotYm9v
bCBUSW50ZXJtZWRpYXRlOjpwYXJzZUNvbnN0VHJlZShjb25zdCBUU291cmNlTG9jJiBsaW5lLCBU
SW50ZXJtTm9kZSogcm9vdCwgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSwgVE9wZXJhdG9yIGNv
bnN0cnVjdG9yVHlwZSwgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVFR5cGUgdCwgYm9vbCBz
aW5nbGVDb25zdGFudFBhcmFtKQotewotICAgIGlmIChyb290ID09IDApCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIFRDb25zdFRyYXZlcnNlciBpdCh1bmlvbkFycmF5LCBzaW5nbGVDb25z
dGFudFBhcmFtLCBjb25zdHJ1Y3RvclR5cGUsIGluZm9TaW5rLCBzeW1ib2xUYWJsZSwgdCk7Ci0K
LSAgICByb290LT50cmF2ZXJzZSgmaXQpOwotICAgIGlmIChpdC5lcnJvcikKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpYWdu
b3N0aWNzQmFzZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL0RpYWdub3N0aWNzQmFzZS5jcHAKaW5kZXggM2UyMmUxZjFjNTc5ZGZjYzFjYTY1
YmYyNDg0MDFiNGRlZTY5OTQwOC4uYTdjZTg2MmJjYjQ1YmQ1OTkyN2UxMDFkODFmYWQ0Y2FlMDU5
NmVlMSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9EaWFnbm9zdGljc0Jhc2UuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NCYXNlLmNwcApAQCAtMjUs
MTQgKzI1LDE0IEBAIHZvaWQgRGlhZ25vc3RpY3M6OnJlcG9ydChJRCBpZCwKIAogRGlhZ25vc3Rp
Y3M6OlNldmVyaXR5IERpYWdub3N0aWNzOjpzZXZlcml0eShJRCBpZCkKIHsKLSAgICBpZiAoKGlk
ID4gRVJST1JfQkVHSU4pICYmIChpZCA8IEVSUk9SX0VORCkpCi0gICAgICAgIHJldHVybiBFUlJP
UjsKKyAgICBpZiAoKGlkID4gUFBfRVJST1JfQkVHSU4pICYmIChpZCA8IFBQX0VSUk9SX0VORCkp
CisgICAgICAgIHJldHVybiBQUF9FUlJPUjsKIAotICAgIGlmICgoaWQgPiBXQVJOSU5HX0JFR0lO
KSAmJiAoaWQgPCBXQVJOSU5HX0VORCkpCi0gICAgICAgIHJldHVybiBXQVJOSU5HOworICAgIGlm
ICgoaWQgPiBQUF9XQVJOSU5HX0JFR0lOKSAmJiAoaWQgPCBQUF9XQVJOSU5HX0VORCkpCisgICAg
ICAgIHJldHVybiBQUF9XQVJOSU5HOwogCiAgICAgYXNzZXJ0KGZhbHNlKTsKLSAgICByZXR1cm4g
RVJST1I7CisgICAgcmV0dXJuIFBQX0VSUk9SOwogfQogCiBzdGQ6OnN0cmluZyBEaWFnbm9zdGlj
czo6bWVzc2FnZShJRCBpZCkKQEAgLTQwLDgyICs0MCw4MiBAQCBzdGQ6OnN0cmluZyBEaWFnbm9z
dGljczo6bWVzc2FnZShJRCBpZCkKICAgICBzd2l0Y2ggKGlkKQogICAgIHsKICAgICAgIC8vIEVy
cm9ycyBiZWdpbi4KLSAgICAgIGNhc2UgSU5URVJOQUxfRVJST1I6CisgICAgICBjYXNlIFBQX0lO
VEVSTkFMX0VSUk9SOgogICAgICAgICAgIHJldHVybiAiaW50ZXJuYWwgZXJyb3IiOwotICAgICAg
Y2FzZSBPVVRfT0ZfTUVNT1JZOgorICAgICAgY2FzZSBQUF9PVVRfT0ZfTUVNT1JZOgogICAgICAg
ICAgIHJldHVybiAib3V0IG9mIG1lbW9yeSI7Ci0gICAgICBjYXNlIElOVkFMSURfQ0hBUkFDVEVS
OgorICAgICAgY2FzZSBQUF9JTlZBTElEX0NIQVJBQ1RFUjoKICAgICAgICAgICByZXR1cm4gImlu
dmFsaWQgY2hhcmFjdGVyIjsKLSAgICAgIGNhc2UgSU5WQUxJRF9OVU1CRVI6CisgICAgICBjYXNl
IFBQX0lOVkFMSURfTlVNQkVSOgogICAgICAgICAgIHJldHVybiAiaW52YWxpZCBudW1iZXIiOwot
ICAgICAgY2FzZSBJTlRFR0VSX09WRVJGTE9XOgorICAgICAgY2FzZSBQUF9JTlRFR0VSX09WRVJG
TE9XOgogICAgICAgICAgIHJldHVybiAiaW50ZWdlciBvdmVyZmxvdyI7Ci0gICAgICBjYXNlIEZM
T0FUX09WRVJGTE9XOgorICAgICAgY2FzZSBQUF9GTE9BVF9PVkVSRkxPVzoKICAgICAgICAgICBy
ZXR1cm4gImZsb2F0IG92ZXJmbG93IjsKLSAgICAgIGNhc2UgVE9LRU5fVE9PX0xPTkc6CisgICAg
ICBjYXNlIFBQX1RPS0VOX1RPT19MT05HOgogICAgICAgICAgIHJldHVybiAidG9rZW4gdG9vIGxv
bmciOwotICAgICAgY2FzZSBJTlZBTElEX0VYUFJFU1NJT046CisgICAgICBjYXNlIFBQX0lOVkFM
SURfRVhQUkVTU0lPTjoKICAgICAgICAgICByZXR1cm4gImludmFsaWQgZXhwcmVzc2lvbiI7Ci0g
ICAgICBjYXNlIERJVklTSU9OX0JZX1pFUk86CisgICAgICBjYXNlIFBQX0RJVklTSU9OX0JZX1pF
Uk86CiAgICAgICAgICAgcmV0dXJuICJkaXZpc2lvbiBieSB6ZXJvIjsKLSAgICAgIGNhc2UgRU9G
X0lOX0NPTU1FTlQ6CisgICAgICBjYXNlIFBQX0VPRl9JTl9DT01NRU5UOgogICAgICAgICAgIHJl
dHVybiAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSBmb3VuZCBpbiBjb21tZW50IjsKLSAgICAgIGNh
c2UgVU5FWFBFQ1RFRF9UT0tFTjoKKyAgICAgIGNhc2UgUFBfVU5FWFBFQ1RFRF9UT0tFTjoKICAg
ICAgICAgICByZXR1cm4gInVuZXhwZWN0ZWQgdG9rZW4iOwotICAgICAgY2FzZSBESVJFQ1RJVkVf
SU5WQUxJRF9OQU1FOgorICAgICAgY2FzZSBQUF9ESVJFQ1RJVkVfSU5WQUxJRF9OQU1FOgogICAg
ICAgICAgIHJldHVybiAiaW52YWxpZCBkaXJlY3RpdmUgbmFtZSI7Ci0gICAgICBjYXNlIE1BQ1JP
X05BTUVfUkVTRVJWRUQ6CisgICAgICBjYXNlIFBQX01BQ1JPX05BTUVfUkVTRVJWRUQ6CiAgICAg
ICAgICAgcmV0dXJuICJtYWNybyBuYW1lIGlzIHJlc2VydmVkIjsKLSAgICAgIGNhc2UgTUFDUk9f
UkVERUZJTkVEOgorICAgICAgY2FzZSBQUF9NQUNST19SRURFRklORUQ6CiAgICAgICAgICAgcmV0
dXJuICJtYWNybyByZWRlZmluZWQiOwotICAgICAgY2FzZSBNQUNST19QUkVERUZJTkVEX1JFREVG
SU5FRDoKKyAgICAgIGNhc2UgUFBfTUFDUk9fUFJFREVGSU5FRF9SRURFRklORUQ6CiAgICAgICAg
ICAgcmV0dXJuICJwcmVkZWZpbmVkIG1hY3JvIHJlZGVmaW5lZCI7Ci0gICAgICBjYXNlIE1BQ1JP
X1BSRURFRklORURfVU5ERUZJTkVEOgorICAgICAgY2FzZSBQUF9NQUNST19QUkVERUZJTkVEX1VO
REVGSU5FRDoKICAgICAgICAgICByZXR1cm4gInByZWRlZmluZWQgbWFjcm8gdW5kZWZpbmVkIjsK
LSAgICAgIGNhc2UgTUFDUk9fVU5URVJNSU5BVEVEX0lOVk9DQVRJT046CisgICAgICBjYXNlIFBQ
X01BQ1JPX1VOVEVSTUlOQVRFRF9JTlZPQ0FUSU9OOgogICAgICAgICAgIHJldHVybiAidW50ZXJt
aW5hdGVkIG1hY3JvIGludm9jYXRpb24iOwotICAgICAgY2FzZSBNQUNST19UT09fRkVXX0FSR1M6
CisgICAgICBjYXNlIFBQX01BQ1JPX1RPT19GRVdfQVJHUzoKICAgICAgICAgICByZXR1cm4gIk5v
dCBlbm91Z2ggYXJndW1lbnRzIGZvciBtYWNybyI7Ci0gICAgICBjYXNlIE1BQ1JPX1RPT19NQU5Z
X0FSR1M6CisgICAgICBjYXNlIFBQX01BQ1JPX1RPT19NQU5ZX0FSR1M6CiAgICAgICAgICAgcmV0
dXJuICJUb28gbWFueSBhcmd1bWVudHMgZm9yIG1hY3JvIjsKLSAgICAgIGNhc2UgQ09ORElUSU9O
QUxfRU5ESUZfV0lUSE9VVF9JRjoKKyAgICAgIGNhc2UgUFBfQ09ORElUSU9OQUxfRU5ESUZfV0lU
SE9VVF9JRjoKICAgICAgICAgICByZXR1cm4gInVuZXhwZWN0ZWQgI2VuZGlmIGZvdW5kIHdpdGhv
dXQgYSBtYXRjaGluZyAjaWYiOwotICAgICAgY2FzZSBDT05ESVRJT05BTF9FTFNFX1dJVEhPVVRf
SUY6CisgICAgICBjYXNlIFBQX0NPTkRJVElPTkFMX0VMU0VfV0lUSE9VVF9JRjoKICAgICAgICAg
ICByZXR1cm4gInVuZXhwZWN0ZWQgI2Vsc2UgZm91bmQgd2l0aG91dCBhIG1hdGNoaW5nICNpZiI7
Ci0gICAgICBjYXNlIENPTkRJVElPTkFMX0VMU0VfQUZURVJfRUxTRToKKyAgICAgIGNhc2UgUFBf
Q09ORElUSU9OQUxfRUxTRV9BRlRFUl9FTFNFOgogICAgICAgICAgIHJldHVybiAidW5leHBlY3Rl
ZCAjZWxzZSBmb3VuZCBhZnRlciBhbm90aGVyICNlbHNlIjsKLSAgICAgIGNhc2UgQ09ORElUSU9O
QUxfRUxJRl9XSVRIT1VUX0lGOgorICAgICAgY2FzZSBQUF9DT05ESVRJT05BTF9FTElGX1dJVEhP
VVRfSUY6CiAgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkICNlbGlmIGZvdW5kIHdpdGhvdXQg
YSBtYXRjaGluZyAjaWYiOwotICAgICAgY2FzZSBDT05ESVRJT05BTF9FTElGX0FGVEVSX0VMU0U6
CisgICAgICBjYXNlIFBQX0NPTkRJVElPTkFMX0VMSUZfQUZURVJfRUxTRToKICAgICAgICAgICBy
ZXR1cm4gInVuZXhwZWN0ZWQgI2VsaWYgZm91bmQgYWZ0ZXIgI2Vsc2UiOwotICAgICAgY2FzZSBD
T05ESVRJT05BTF9VTlRFUk1JTkFURUQ6CisgICAgICBjYXNlIFBQX0NPTkRJVElPTkFMX1VOVEVS
TUlOQVRFRDoKICAgICAgICAgICByZXR1cm4gInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUgZm91bmQg
aW4gY29uZGl0aW9uYWwgYmxvY2siOwotICAgICAgY2FzZSBJTlZBTElEX0VYVEVOU0lPTl9OQU1F
OgorICAgICAgY2FzZSBQUF9JTlZBTElEX0VYVEVOU0lPTl9OQU1FOgogICAgICAgICAgIHJldHVy
biAiaW52YWxpZCBleHRlbnNpb24gbmFtZSI7Ci0gICAgICBjYXNlIElOVkFMSURfRVhURU5TSU9O
X0JFSEFWSU9SOgorICAgICAgY2FzZSBQUF9JTlZBTElEX0VYVEVOU0lPTl9CRUhBVklPUjoKICAg
ICAgICAgICByZXR1cm4gImludmFsaWQgZXh0ZW5zaW9uIGJlaGF2aW9yIjsKLSAgICAgIGNhc2Ug
SU5WQUxJRF9FWFRFTlNJT05fRElSRUNUSVZFOgorICAgICAgY2FzZSBQUF9JTlZBTElEX0VYVEVO
U0lPTl9ESVJFQ1RJVkU6CiAgICAgICAgICAgcmV0dXJuICJpbnZhbGlkIGV4dGVuc2lvbiBkaXJl
Y3RpdmUiOwotICAgICAgY2FzZSBJTlZBTElEX1ZFUlNJT05fTlVNQkVSOgorICAgICAgY2FzZSBQ
UF9JTlZBTElEX1ZFUlNJT05fTlVNQkVSOgogICAgICAgICAgIHJldHVybiAiaW52YWxpZCB2ZXJz
aW9uIG51bWJlciI7Ci0gICAgICBjYXNlIElOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkU6CisgICAg
ICBjYXNlIFBQX0lOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkU6CiAgICAgICAgICAgcmV0dXJuICJp
bnZhbGlkIHZlcnNpb24gZGlyZWN0aXZlIjsKLSAgICAgIGNhc2UgVkVSU0lPTl9OT1RfRklSU1Rf
U1RBVEVNRU5UOgorICAgICAgY2FzZSBQUF9WRVJTSU9OX05PVF9GSVJTVF9TVEFURU1FTlQ6CiAg
ICAgICAgIHJldHVybiAiI3ZlcnNpb24gZGlyZWN0aXZlIG11c3Qgb2NjdXIgYmVmb3JlIGFueXRo
aW5nIGVsc2UsICIKICAgICAgICAgICAgICAgICJleGNlcHQgZm9yIGNvbW1lbnRzIGFuZCB3aGl0
ZSBzcGFjZSI7Ci0gICAgICBjYXNlIElOVkFMSURfTElORV9OVU1CRVI6CisgICAgICBjYXNlIFBQ
X0lOVkFMSURfTElORV9OVU1CRVI6CiAgICAgICAgICAgcmV0dXJuICJpbnZhbGlkIGxpbmUgbnVt
YmVyIjsKLSAgICAgIGNhc2UgSU5WQUxJRF9GSUxFX05VTUJFUjoKKyAgICAgIGNhc2UgUFBfSU5W
QUxJRF9GSUxFX05VTUJFUjoKICAgICAgICAgICByZXR1cm4gImludmFsaWQgZmlsZSBudW1iZXIi
OwotICAgICAgY2FzZSBJTlZBTElEX0xJTkVfRElSRUNUSVZFOgorICAgICAgY2FzZSBQUF9JTlZB
TElEX0xJTkVfRElSRUNUSVZFOgogICAgICAgICAgIHJldHVybiAiaW52YWxpZCBsaW5lIGRpcmVj
dGl2ZSI7CiAgICAgICAvLyBFcnJvcnMgZW5kLgogICAgICAgLy8gV2FybmluZ3MgYmVnaW4uCi0g
ICAgICBjYXNlIEVPRl9JTl9ESVJFQ1RJVkU6CisgICAgICBjYXNlIFBQX0VPRl9JTl9ESVJFQ1RJ
VkU6CiAgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIGZvdW5kIGluIGRp
cmVjdGl2ZSI7Ci0gICAgICBjYXNlIENPTkRJVElPTkFMX1VORVhQRUNURURfVE9LRU46CisgICAg
ICBjYXNlIFBQX0NPTkRJVElPTkFMX1VORVhQRUNURURfVE9LRU46CiAgICAgICAgICAgcmV0dXJu
ICJ1bmV4cGVjdGVkIHRva2VuIGFmdGVyIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24iOwotICAgICAg
Y2FzZSBVTlJFQ09HTklaRURfUFJBR01BOgorICAgICAgY2FzZSBQUF9VTlJFQ09HTklaRURfUFJB
R01BOgogICAgICAgICAgIHJldHVybiAidW5yZWNvZ25pemVkIHByYWdtYSI7CiAgICAgICAvLyBX
YXJuaW5ncyBlbmQuCiAgICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaWFnbm9zdGljc0Jhc2UuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3Rp
Y3NCYXNlLmgKaW5kZXggMDdiYzQxMTg0NjQyYTNkYzc0MmVmNGRmNDZkZjJlNDRlZTZlMjY0OS4u
MmM4YzUzOTEzN2I5NmE3Njk2MTUxYjNjZjA3YzUwYTk0MDc0MmJhMSAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaWFnbm9zdGlj
c0Jhc2UuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL0RpYWdub3N0aWNzQmFzZS5oCkBAIC0yMSw1MyArMjEsNTMgQEAgY2xhc3MgRGlhZ25v
c3RpY3MKICAgcHVibGljOgogICAgIGVudW0gU2V2ZXJpdHkKICAgICB7Ci0gICAgICAgIEVSUk9S
LAotICAgICAgICBXQVJOSU5HCisgICAgICAgIFBQX0VSUk9SLAorICAgICAgICBQUF9XQVJOSU5H
CiAgICAgfTsKICAgICBlbnVtIElECiAgICAgewotICAgICAgICBFUlJPUl9CRUdJTiwKLSAgICAg
ICAgSU5URVJOQUxfRVJST1IsCi0gICAgICAgIE9VVF9PRl9NRU1PUlksCi0gICAgICAgIElOVkFM
SURfQ0hBUkFDVEVSLAotICAgICAgICBJTlZBTElEX05VTUJFUiwKLSAgICAgICAgSU5URUdFUl9P
VkVSRkxPVywKLSAgICAgICAgRkxPQVRfT1ZFUkZMT1csCi0gICAgICAgIFRPS0VOX1RPT19MT05H
LAotICAgICAgICBJTlZBTElEX0VYUFJFU1NJT04sCi0gICAgICAgIERJVklTSU9OX0JZX1pFUk8s
Ci0gICAgICAgIEVPRl9JTl9DT01NRU5ULAotICAgICAgICBVTkVYUEVDVEVEX1RPS0VOLAotICAg
ICAgICBESVJFQ1RJVkVfSU5WQUxJRF9OQU1FLAotICAgICAgICBNQUNST19OQU1FX1JFU0VSVkVE
LAotICAgICAgICBNQUNST19SRURFRklORUQsCi0gICAgICAgIE1BQ1JPX1BSRURFRklORURfUkVE
RUZJTkVELAotICAgICAgICBNQUNST19QUkVERUZJTkVEX1VOREVGSU5FRCwKLSAgICAgICAgTUFD
Uk9fVU5URVJNSU5BVEVEX0lOVk9DQVRJT04sCi0gICAgICAgIE1BQ1JPX1RPT19GRVdfQVJHUywK
LSAgICAgICAgTUFDUk9fVE9PX01BTllfQVJHUywKLSAgICAgICAgQ09ORElUSU9OQUxfRU5ESUZf
V0lUSE9VVF9JRiwKLSAgICAgICAgQ09ORElUSU9OQUxfRUxTRV9XSVRIT1VUX0lGLAotICAgICAg
ICBDT05ESVRJT05BTF9FTFNFX0FGVEVSX0VMU0UsCi0gICAgICAgIENPTkRJVElPTkFMX0VMSUZf
V0lUSE9VVF9JRiwKLSAgICAgICAgQ09ORElUSU9OQUxfRUxJRl9BRlRFUl9FTFNFLAotICAgICAg
ICBDT05ESVRJT05BTF9VTlRFUk1JTkFURUQsCi0gICAgICAgIElOVkFMSURfRVhURU5TSU9OX05B
TUUsCi0gICAgICAgIElOVkFMSURfRVhURU5TSU9OX0JFSEFWSU9SLAotICAgICAgICBJTlZBTElE
X0VYVEVOU0lPTl9ESVJFQ1RJVkUsCi0gICAgICAgIElOVkFMSURfVkVSU0lPTl9OVU1CRVIsCi0g
ICAgICAgIElOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkUsCi0gICAgICAgIFZFUlNJT05fTk9UX0ZJ
UlNUX1NUQVRFTUVOVCwKLSAgICAgICAgSU5WQUxJRF9MSU5FX05VTUJFUiwKLSAgICAgICAgSU5W
QUxJRF9GSUxFX05VTUJFUiwKLSAgICAgICAgSU5WQUxJRF9MSU5FX0RJUkVDVElWRSwKLSAgICAg
ICAgRVJST1JfRU5ELAorICAgICAgICBQUF9FUlJPUl9CRUdJTiwKKyAgICAgICAgUFBfSU5URVJO
QUxfRVJST1IsCisgICAgICAgIFBQX09VVF9PRl9NRU1PUlksCisgICAgICAgIFBQX0lOVkFMSURf
Q0hBUkFDVEVSLAorICAgICAgICBQUF9JTlZBTElEX05VTUJFUiwKKyAgICAgICAgUFBfSU5URUdF
Ul9PVkVSRkxPVywKKyAgICAgICAgUFBfRkxPQVRfT1ZFUkZMT1csCisgICAgICAgIFBQX1RPS0VO
X1RPT19MT05HLAorICAgICAgICBQUF9JTlZBTElEX0VYUFJFU1NJT04sCisgICAgICAgIFBQX0RJ
VklTSU9OX0JZX1pFUk8sCisgICAgICAgIFBQX0VPRl9JTl9DT01NRU5ULAorICAgICAgICBQUF9V
TkVYUEVDVEVEX1RPS0VOLAorICAgICAgICBQUF9ESVJFQ1RJVkVfSU5WQUxJRF9OQU1FLAorICAg
ICAgICBQUF9NQUNST19OQU1FX1JFU0VSVkVELAorICAgICAgICBQUF9NQUNST19SRURFRklORUQs
CisgICAgICAgIFBQX01BQ1JPX1BSRURFRklORURfUkVERUZJTkVELAorICAgICAgICBQUF9NQUNS
T19QUkVERUZJTkVEX1VOREVGSU5FRCwKKyAgICAgICAgUFBfTUFDUk9fVU5URVJNSU5BVEVEX0lO
Vk9DQVRJT04sCisgICAgICAgIFBQX01BQ1JPX1RPT19GRVdfQVJHUywKKyAgICAgICAgUFBfTUFD
Uk9fVE9PX01BTllfQVJHUywKKyAgICAgICAgUFBfQ09ORElUSU9OQUxfRU5ESUZfV0lUSE9VVF9J
RiwKKyAgICAgICAgUFBfQ09ORElUSU9OQUxfRUxTRV9XSVRIT1VUX0lGLAorICAgICAgICBQUF9D
T05ESVRJT05BTF9FTFNFX0FGVEVSX0VMU0UsCisgICAgICAgIFBQX0NPTkRJVElPTkFMX0VMSUZf
V0lUSE9VVF9JRiwKKyAgICAgICAgUFBfQ09ORElUSU9OQUxfRUxJRl9BRlRFUl9FTFNFLAorICAg
ICAgICBQUF9DT05ESVRJT05BTF9VTlRFUk1JTkFURUQsCisgICAgICAgIFBQX0lOVkFMSURfRVhU
RU5TSU9OX05BTUUsCisgICAgICAgIFBQX0lOVkFMSURfRVhURU5TSU9OX0JFSEFWSU9SLAorICAg
ICAgICBQUF9JTlZBTElEX0VYVEVOU0lPTl9ESVJFQ1RJVkUsCisgICAgICAgIFBQX0lOVkFMSURf
VkVSU0lPTl9OVU1CRVIsCisgICAgICAgIFBQX0lOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkUsCisg
ICAgICAgIFBQX1ZFUlNJT05fTk9UX0ZJUlNUX1NUQVRFTUVOVCwKKyAgICAgICAgUFBfSU5WQUxJ
RF9MSU5FX05VTUJFUiwKKyAgICAgICAgUFBfSU5WQUxJRF9GSUxFX05VTUJFUiwKKyAgICAgICAg
UFBfSU5WQUxJRF9MSU5FX0RJUkVDVElWRSwKKyAgICAgICAgUFBfRVJST1JfRU5ELAogCi0gICAg
ICAgIFdBUk5JTkdfQkVHSU4sCi0gICAgICAgIEVPRl9JTl9ESVJFQ1RJVkUsCi0gICAgICAgIENP
TkRJVElPTkFMX1VORVhQRUNURURfVE9LRU4sCi0gICAgICAgIFVOUkVDT0dOSVpFRF9QUkFHTUEs
Ci0gICAgICAgIFdBUk5JTkdfRU5ECisgICAgICAgIFBQX1dBUk5JTkdfQkVHSU4sCisgICAgICAg
IFBQX0VPRl9JTl9ESVJFQ1RJVkUsCisgICAgICAgIFBQX0NPTkRJVElPTkFMX1VORVhQRUNURURf
VE9LRU4sCisgICAgICAgIFBQX1VOUkVDT0dOSVpFRF9QUkFHTUEsCisgICAgICAgIFBQX1dBUk5J
TkdfRU5ECiAgICAgfTsKIAogICAgIHZpcnR1YWwgfkRpYWdub3N0aWNzKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVj
dGl2ZVBhcnNlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL0RpcmVjdGl2ZVBhcnNlci5jcHAKaW5kZXggOTRkZmRmNTEzZDc1NTM4NGM1ZjVh
MWFlNWNiNjMxNjU4NGM0NjBhMy4uZWJlYzc5ODA0ZGNlZjgzNmE0YjQyZjk2NDQ3MjM2YzcxNjM0
NzAyMSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9EaXJlY3RpdmVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFyc2VyLmNwcApAQCAtMTcy
LDcgKzE3Miw3IEBAIGNsYXNzIERlZmluZWRQYXJzZXIgOiBwdWJsaWMgTGV4ZXIKIAogICAgICAg
ICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VO
LAorICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX1VORVhQ
RUNURURfVE9LRU4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9j
YXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgICAgIHNraXBVbnRpbEVPRChtTGV4ZXIsIHRv
a2VuKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE4NSw3ICsxODUsNyBAQCBjbGFzcyBEZWZp
bmVkUGFyc2VyIDogcHVibGljIExleGVyCiAgICAgICAgICAgICBtTGV4ZXItPmxleCh0b2tlbik7
CiAgICAgICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gJyknKQogICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVE
X1RPS0VOLAorICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNz
OjpQUF9VTkVYUEVDVEVEX1RPS0VOLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICAgICAgICAgIHNraXBV
bnRpbEVPRChtTGV4ZXIsIHRva2VuKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yMzMs
NyArMjMzLDcgQEAgdm9pZCBEaXJlY3RpdmVQYXJzZXI6OmxleChUb2tlbiogdG9rZW4pCiAgICAg
ICAgICAgICBpZiAoIW1Db25kaXRpb25hbFN0YWNrLmVtcHR5KCkpCiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgY29uc3QgQ29uZGl0aW9uYWxCbG9jayYgYmxvY2sgPSBtQ29uZGl0aW9u
YWxTdGFjay5iYWNrKCk7Ci0gICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6OkNPTkRJVElPTkFMX1VOVEVSTUlOQVRFRCwKKyAgICAgICAgICAgICAgICBtRGlh
Z25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfQ09ORElUSU9OQUxfVU5URVJNSU5BVEVE
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLmxvY2F0aW9uLCBi
bG9jay50eXBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjY4LDcg
KzI2OCw3IEBAIHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZURpcmVjdGl2ZShUb2tlbiogdG9r
ZW4pCiAgICAgc3dpdGNoKGRpcmVjdGl2ZSkKICAgICB7CiAgICAgICBjYXNlIERJUkVDVElWRV9O
T05FOgotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6RElSRUNUSVZF
X0lOVkFMSURfTkFNRSwKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OlBQX0RJUkVDVElWRV9JTlZBTElEX05BTUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICBza2lwVW50aWxFT0QobVRv
a2VuaXplciwgdG9rZW4pOwogICAgICAgICBicmVhazsKQEAgLTMxOSw3ICszMTksNyBAQCB2b2lk
IERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VEaXJlY3RpdmUoVG9rZW4qIHRva2VuKQogICAgIHNraXBV
bnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CiAgICAgaWYgKHRva2VuLT50eXBlID09IFRva2Vu
OjpMQVNUKQogICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OkVPRl9JTl9ESVJFQ1RJVkUsCisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpQUF9FT0ZfSU5fRElSRUNUSVZFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICB9CiB9CkBAIC0zMzEsMTkgKzMzMSwx
OSBAQCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VEZWZpbmUoVG9rZW4qIHRva2VuKQogICAg
IG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CiAgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJ
REVOVElGSUVSKQogICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpQUF9VTkVYUEVDVEVEX1RPS0VOLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBpZiAoaXNNYWNyb1ByZWRlZmluZWQodG9rZW4tPnRleHQsICptTWFjcm9TZXQpKQogICAg
IHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1BQ1JPX1BSRURF
RklORURfUkVERUZJTkVELAorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGlj
czo6UFBfTUFDUk9fUFJFREVGSU5FRF9SRURFRklORUQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIGlmIChpc01hY3JvTmFtZVJlc2VydmVkKHRva2VuLT50ZXh0KSkKICAgICB7Ci0g
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19OQU1FX1JFU0VS
VkVELAorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfTUFDUk9f
TkFNRV9SRVNFUlZFRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0
aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNjgsNyArMzY4
LDcgQEAgdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGVmaW5lKFRva2VuKiB0b2tlbikKIAog
ICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gJyknKQogICAgICAgICB7Ci0gICAgICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAg
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9VTkVYUEVDVEVEX1RP
S0VOLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPnRleHQpOwogICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtMzk2LDcgKzM5Niw3IEBAIHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJz
ZURlZmluZShUb2tlbiogdG9rZW4pCiAgICAgTWFjcm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBtTWFjcm9TZXQtPmZpbmQobWFjcm8ubmFtZSk7CiAgICAgaWYgKGl0ZXIgIT0gbU1hY3JvU2V0
LT5lbmQoKSAmJiAhbWFjcm8uZXF1YWxzKGl0ZXItPnNlY29uZCkpCiAgICAgewotICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6TUFDUk9fUkVERUZJTkVELAorICAgICAg
ICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfTUFDUk9fUkVERUZJTkVELAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1hY3JvLm5hbWUpOwogICAgICAgICByZXR1cm47CkBAIC00MTEs
NyArNDExLDcgQEAgdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVW5kZWYoVG9rZW4qIHRva2Vu
KQogICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CiAgICAgaWYgKHRva2VuLT50eXBlICE9IFRv
a2VuOjpJREVOVElGSUVSKQogICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0
KERpYWdub3N0aWNzOjpQUF9VTkVYUEVDVEVEX1RPS0VOLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTQyMSw3ICs0MjEsNyBAQCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VVbmRl
ZihUb2tlbiogdG9rZW4pCiAgICAgewogICAgICAgICBpZiAoaXRlci0+c2Vjb25kLnByZWRlZmlu
ZWQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpNQUNST19QUkVERUZJTkVEX1VOREVGSU5FRCwKKyAgICAgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9NQUNST19QUkVERUZJTkVEX1VOREVGSU5FRCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRl
eHQpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKQEAgLTQ1Nyw3ICs0NTcsNyBAQCB2b2lkIERp
cmVjdGl2ZVBhcnNlcjo6cGFyc2VFbHNlKFRva2VuKiB0b2tlbikKIAogICAgIGlmIChtQ29uZGl0
aW9uYWxTdGFjay5lbXB0eSgpKQogICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQo
RGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX0VMU0VfV0lUSE9VVF9JRiwKKyAgICAgICAgbURpYWdu
b3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX0NPTkRJVElPTkFMX0VMU0VfV0lUSE9VVF9J
RiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+
dGV4dCk7CiAgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CiAgICAgICAg
IHJldHVybjsKQEAgLTQ3Miw3ICs0NzIsNyBAQCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VF
bHNlKFRva2VuKiB0b2tlbikKICAgICB9CiAgICAgaWYgKGJsb2NrLmZvdW5kRWxzZUdyb3VwKQog
ICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElP
TkFMX0VMU0VfQUZURVJfRUxTRSwKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25v
c3RpY3M6OlBQX0NPTkRJVElPTkFMX0VMU0VfQUZURVJfRUxTRSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgIHNraXBV
bnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CiAgICAgICAgIHJldHVybjsKQEAgLTQ4Niw3ICs0
ODYsNyBAQCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFbHNlKFRva2VuKiB0b2tlbikKICAg
ICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwogICAgIGlmICghaXNFT0QodG9rZW4pKQogICAgIHsK
LSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX1VO
RVhQRUNURURfVE9LRU4sCisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNz
OjpQUF9DT05ESVRJT05BTF9VTkVYUEVDVEVEX1RPS0VOLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgc2tpcFVudGls
RU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKICAgICB9CkBAIC00OTgsNyArNDk4LDcgQEAgdm9pZCBE
aXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxpZihUb2tlbiogdG9rZW4pCiAKICAgICBpZiAobUNvbmRp
dGlvbmFsU3RhY2suZW1wdHkoKSkKICAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0
KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9FTElGX1dJVEhPVVRfSUYsCisgICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9DT05ESVRJT05BTF9FTElGX1dJVEhPVVRf
SUYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4t
PnRleHQpOwogICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOwogICAgICAg
ICByZXR1cm47CkBAIC01MTMsNyArNTEzLDcgQEAgdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNl
RWxpZihUb2tlbiogdG9rZW4pCiAgICAgfQogICAgIGlmIChibG9jay5mb3VuZEVsc2VHcm91cCkK
ICAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJ
T05BTF9FTElGX0FGVEVSX0VMU0UsCisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpQUF9DT05ESVRJT05BTF9FTElGX0FGVEVSX0VMU0UsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICBza2lw
VW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOwogICAgICAgICByZXR1cm47CkBAIC01MzgsNyAr
NTM4LDcgQEAgdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRW5kaWYoVG9rZW4qIHRva2VuKQog
CiAgICAgaWYgKG1Db25kaXRpb25hbFN0YWNrLmVtcHR5KCkpCiAgICAgewotICAgICAgICBtRGlh
Z25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfRU5ESUZfV0lUSE9VVF9J
RiwKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX0NPTkRJVElP
TkFMX0VORElGX1dJVEhPVVRfSUYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
LT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXpl
ciwgdG9rZW4pOwogICAgICAgICByZXR1cm47CkBAIC01NTAsNyArNTUwLDcgQEAgdm9pZCBEaXJl
Y3RpdmVQYXJzZXI6OnBhcnNlRW5kaWYoVG9rZW4qIHRva2VuKQogICAgIG1Ub2tlbml6ZXItPmxl
eCh0b2tlbik7CiAgICAgaWYgKCFpc0VPRCh0b2tlbikpCiAgICAgewotICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfVU5FWFBFQ1RFRF9UT0tFTiwK
KyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX0NPTkRJVElPTkFM
X1VORVhQRUNURURfVE9LRU4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5s
b2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwg
dG9rZW4pOwogICAgIH0KQEAgLTYxOCw3ICs2MTgsNyBAQCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6
cGFyc2VQcmFnbWEoVG9rZW4qIHRva2VuKQogICAgICAgICAgICAgICAgICAgICAgIChzdGF0ZSA9
PSBSSUdIVF9QQVJFTiArIDEpKTsgIC8vIFdpdGggdmFsdWUuCiAgICAgaWYgKCF2YWxpZCkKICAg
ICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTlJFQ09HTkla
RURfUFJBR01BLAorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBf
VU5SRUNPR05JWkVEX1BSQUdNQSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4t
PmxvY2F0aW9uLCBuYW1lKTsKICAgICB9CiAgICAgZWxzZSBpZiAoc3RhdGUgPiBQUkFHTUFfTkFN
RSkgIC8vIERvIG5vdCBub3RpZnkgZm9yIGVtcHR5IHByYWdtYS4KQEAgLTY1MCw3ICs2NTAsNyBA
QCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFeHRlbnNpb24oVG9rZW4qIHRva2VuKQogICAg
ICAgICAgIGNhc2UgRVhUX05BTUU6CiAgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50
eXBlICE9IFRva2VuOjpJREVOVElGSUVSKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9FWFRFTlNJT05fTkFN
RSwKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBf
SU5WQUxJRF9FWFRFTlNJT05fTkFNRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgICAgICAgICB2YWxp
ZCA9IGZhbHNlOwogICAgICAgICAgICAgfQpAQCAtNjU5LDcgKzY1OSw3IEBAIHZvaWQgRGlyZWN0
aXZlUGFyc2VyOjpwYXJzZUV4dGVuc2lvbihUb2tlbiogdG9rZW4pCiAgICAgICAgICAgY2FzZSBD
T0xPTjoKICAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gJzonKSkKICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJl
cG9ydChEaWFnbm9zdGljczo6UFBfVU5FWFBFQ1RFRF9UT0tFTiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAg
ICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgfQpAQCAtNjY3LDcgKzY2Nyw3
IEBAIHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4dGVuc2lvbihUb2tlbiogdG9rZW4pCiAg
ICAgICAgICAgY2FzZSBFWFRfQkVIQVZJT1I6CiAgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRv
a2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKSkKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9FWFRFTlNJ
T05fQkVIQVZJT1IsCisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25v
c3RpY3M6OlBQX0lOVkFMSURfRVhURU5TSU9OX0JFSEFWSU9SLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAg
ICAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICB9CkBAIC02NzYsNyArNjc2LDcg
QEAgdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXh0ZW5zaW9uKFRva2VuKiB0b2tlbikKICAg
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgaWYgKHZhbGlkKQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVD
VEVEX1RPS0VOLAorICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpQUF9VTkVYUEVDVEVEX1RPS0VOLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICAgICAgICAgIHZh
bGlkID0gZmFsc2U7CiAgICAgICAgICAgICB9CkBAIC02ODYsNyArNjg2LDcgQEAgdm9pZCBEaXJl
Y3RpdmVQYXJzZXI6OnBhcnNlRXh0ZW5zaW9uKFRva2VuKiB0b2tlbikKICAgICB9CiAgICAgaWYg
KHZhbGlkICYmIChzdGF0ZSAhPSBFWFRfQkVIQVZJT1IgKyAxKSkKICAgICB7Ci0gICAgICAgIG1E
aWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0VYVEVOU0lPTl9ESVJFQ1RJ
VkUsCisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9JTlZBTElE
X0VYVEVOU0lPTl9ESVJFQ1RJVkUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
LT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgIH0K
QEAgLTcwMCw3ICs3MDAsNyBAQCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VWZXJzaW9uKFRv
a2VuKiB0b2tlbikKIAogICAgIGlmIChtUGFzdEZpcnN0U3RhdGVtZW50KQogICAgIHsKLSAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlZFUlNJT05fTk9UX0ZJUlNUX1NU
QVRFTUVOVCwKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX1ZF
UlNJT05fTk9UX0ZJUlNUX1NUQVRFTUVOVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgIHNraXBVbnRpbEVPRChtVG9r
ZW5pemVyLCB0b2tlbik7CiAgICAgICAgIHJldHVybjsKQEAgLTcyMywxMyArNzIzLDEzIEBAIHZv
aWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZVZlcnNpb24oVG9rZW4qIHRva2VuKQogICAgICAgICAg
IGNhc2UgVkVSU0lPTl9OVU1CRVI6CiAgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50
eXBlICE9IFRva2VuOjpDT05TVF9JTlQpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX1ZFUlNJT05fTlVNQkVS
LAorICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9J
TlZBTElEX1ZFUlNJT05fTlVNQkVSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICAgICAgICAgIHZhbGlk
ID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAodmFsaWQgJiYgIXRva2Vu
LT5pVmFsdWUoJnZlcnNpb24pKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlRFR0VSX09WRVJGTE9XLAorICAgICAgICAg
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9JTlRFR0VSX09WRVJG
TE9XLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwgdG9rZW4tPnRleHQpOwogICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgICAg
ICAgICB9CkBAIC03MzcsNyArNzM3LDcgQEAgdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVmVy
c2lvbihUb2tlbiogdG9rZW4pCiAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGlmICh2
YWxpZCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfVU5FWFBFQ1RFRF9UT0tFTiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0
KTsKICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgfQpAQCAtNzQ3
LDcgKzc0Nyw3IEBAIHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZVZlcnNpb24oVG9rZW4qIHRv
a2VuKQogICAgIH0KICAgICBpZiAodmFsaWQgJiYgKHN0YXRlICE9IFZFUlNJT05fTlVNQkVSICsg
MSkpCiAgICAgewotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5W
QUxJRF9WRVJTSU9OX0RJUkVDVElWRSwKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6OlBQX0lOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICB2YWxp
ZCA9IGZhbHNlOwogICAgIH0KQEAgLTc3OCwxMyArNzc4LDEzIEBAIHZvaWQgRGlyZWN0aXZlUGFy
c2VyOjpwYXJzZUxpbmUoVG9rZW4qIHRva2VuKQogICAgICAgICAgIGNhc2UgTElORV9OVU1CRVI6
CiAgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpDT05TVF9J
TlQpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0
KERpYWdub3N0aWNzOjpJTlZBTElEX0xJTkVfTlVNQkVSLAorICAgICAgICAgICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9JTlZBTElEX0xJTkVfTlVNQkVSLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4t
PnRleHQpOwogICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpZiAodmFsaWQgJiYgIXRva2VuLT5pVmFsdWUoJmxpbmUpKQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJ
TlRFR0VSX09WRVJGTE9XLAorICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERp
YWdub3N0aWNzOjpQUF9JTlRFR0VSX09WRVJGTE9XLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICAgICAg
ICAgIHZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICB9CkBAIC03OTIsMTMgKzc5MiwxMyBAQCB2
b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VMaW5lKFRva2VuKiB0b2tlbikKICAgICAgICAgICBj
YXNlIEZJTEVfTlVNQkVSOgogICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAh
PSBUb2tlbjo6Q09OU1RfSU5UKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGlh
Z25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9GSUxFX05VTUJFUiwKKyAgICAg
ICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfSU5WQUxJRF9G
SUxFX05VTUJFUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+
bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHZhbGlkICYmICF0b2tlbi0+aVZhbHVlKCZm
aWxlKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6SU5URUdFUl9PVkVSRkxPVywKKyAgICAgICAgICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfSU5URUdFUl9PVkVSRkxPVywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0
KTsKICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgfQpAQCAtODA2
LDcgKzgwNiw3IEBAIHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUxpbmUoVG9rZW4qIHRva2Vu
KQogICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBpZiAodmFsaWQpCiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVO
RVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6OlBQX1VORVhQRUNURURfVE9LRU4sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgICAgICAg
ICAgdmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KQEAgLTgxNyw3ICs4MTcsNyBAQCB2b2lk
IERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VMaW5lKFRva2VuKiB0b2tlbikKIAogICAgIGlmICh2YWxp
ZCAmJiAoc3RhdGUgIT0gRklMRV9OVU1CRVIpICYmIChzdGF0ZSAhPSBGSUxFX05VTUJFUiArIDEp
KQogICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFM
SURfTElORV9ESVJFQ1RJVkUsCisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpQUF9JTlZBTElEX0xJTkVfRElSRUNUSVZFLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgdmFsaWQgPSBmYWxz
ZTsKICAgICB9CkBAIC04OTMsNyArODkzLDcgQEAgaW50IERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VF
eHByZXNzaW9uSWYoVG9rZW4qIHRva2VuKQogICAgIC8vIFdhcm4gaWYgdGhlcmUgYXJlIHRva2Vu
cyBhZnRlciAjaWYgZXhwcmVzc2lvbi4KICAgICBpZiAoIWlzRU9EKHRva2VuKSkKICAgICB7Ci0g
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9VTkVY
UEVDVEVEX1RPS0VOLAorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6
UFBfQ09ORElUSU9OQUxfVU5FWFBFQ1RFRF9UT0tFTiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgIHNraXBVbnRpbEVP
RChtVG9rZW5pemVyLCB0b2tlbik7CiAgICAgfQpAQCAtOTA5LDcgKzkwOSw3IEBAIGludCBEaXJl
Y3RpdmVQYXJzZXI6OnBhcnNlRXhwcmVzc2lvbklmZGVmKFRva2VuKiB0b2tlbikKICAgICBtVG9r
ZW5pemVyLT5sZXgodG9rZW4pOwogICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJ
RklFUikKICAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpV
TkVYUEVDVEVEX1RPS0VOLAorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGlj
czo6UFBfVU5FWFBFQ1RFRF9UT0tFTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5p
emVyLCB0b2tlbik7CiAgICAgICAgIHJldHVybiAwOwpAQCAtOTIyLDcgKzkyMiw3IEBAIGludCBE
aXJlY3RpdmVQYXJzZXI6OnBhcnNlRXhwcmVzc2lvbklmZGVmKFRva2VuKiB0b2tlbikKICAgICBt
VG9rZW5pemVyLT5sZXgodG9rZW4pOwogICAgIGlmICghaXNFT0QodG9rZW4pKQogICAgIHsKLSAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX1VORVhQ
RUNURURfVE9LRU4sCisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQ
UF9DT05ESVRJT05BTF9VTkVYUEVDVEVEX1RPS0VOLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgc2tpcFVudGlsRU9E
KG1Ub2tlbml6ZXIsIHRva2VuKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNz
aW9uUGFyc2VyLmNwcAppbmRleCAxZmFlMDA5NDU2YTE5YTZiZGE4MGEyMzA0YzBiOGVhYzc0YmVk
ZDliLi4zYjgwYjQ2NjI0YTczYjlkNjM2NWYyZjZiYzAxYWE2MTY3OTI0ODZmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJl
c3Npb25QYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci5jcHAKQEAgLTEsMjEgKzEsMjEgQEAKLS8q
IEFwcGxlIE5vdGU6IEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBBcHBsZSBlbGVjdHMgdG8g
ZGlzdHJpYnV0ZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBCU0QgbGljZW5zZS4g
Ki8KKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjcuICAqLwogCi0vKiBB
IEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMy4wLjEuICAqLworLyogQXBwbGUgTm90
ZTogRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIEFwcGxlIGVsZWN0cyB0byBkaXN0cmlidXRl
IHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEJTRCBsaWNlbnNlLiAqLwogCiAvKiBC
aXNvbiBpbXBsZW1lbnRhdGlvbiBmb3IgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwotCi0gICBDb3B5
cmlnaHQgKEMpIDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLgotCisgICAKKyAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAy
MDAwLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAKICAgIFRoaXMgcHJv
Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k
aWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieQogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0
aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKICAgIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0KKyAgIAogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQorICAgCiAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQogICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDov
L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCkBAIC0yOCw3ICsyOCw3IEBACiAgICBzcGVj
aWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1
bHRpbmcKICAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05V
IEdlbmVyYWwgUHVibGljCiAgICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlv
bi4KLQorICAgCiAgICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluCiAgICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICovCiAK
QEAgLTQ2LDcgKzQ2LDcgQEAKICNkZWZpbmUgWVlCSVNPTiAxCiAKIC8qIEJpc29uIHZlcnNpb24u
ICAqLwotI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjMuMC4xIgorI2RlZmluZSBZWUJJU09OX1ZF
UlNJT04gIjIuNyIKIAogLyogU2tlbGV0b24gbmFtZS4gICovCiAjZGVmaW5lIFlZU0tFTEVUT05f
TkFNRSAieWFjYy5jIgpAQCAtNjUsMTAgKzY1LDExIEBACiAjZGVmaW5lIHl5cGFyc2UgICAgICAg
ICBwcHBhcnNlCiAjZGVmaW5lIHl5bGV4ICAgICAgICAgICBwcGxleAogI2RlZmluZSB5eWVycm9y
ICAgICAgICAgcHBlcnJvcgorI2RlZmluZSB5eWx2YWwgICAgICAgICAgcHBsdmFsCisjZGVmaW5l
IHl5Y2hhciAgICAgICAgICBwcGNoYXIKICNkZWZpbmUgeXlkZWJ1ZyAgICAgICAgIHBwZGVidWcK
ICNkZWZpbmUgeXluZXJycyAgICAgICAgIHBwbmVycnMKIAotCiAvKiBDb3B5IHRoZSBmaXJzdCBw
YXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KIAogCkBAIC0xMzMsMTEgKzEzNCwxMSBAQCBz
dGF0aWMgdm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7
CiAKIAogCi0jIGlmbmRlZiBZWV9OVUxMUFRSCisjIGlmbmRlZiBZWV9OVUxMCiAjICBpZiBkZWZp
bmVkIF9fY3BsdXNwbHVzICYmIDIwMTEwM0wgPD0gX19jcGx1c3BsdXMKLSMgICBkZWZpbmUgWVlf
TlVMTFBUUiBudWxscHRyCisjICAgZGVmaW5lIFlZX05VTEwgbnVsbHB0cgogIyAgZWxzZQotIyAg
IGRlZmluZSBZWV9OVUxMUFRSIDAKKyMgICBkZWZpbmUgWVlfTlVMTCAwCiAjICBlbmRpZgogIyBl
bmRpZgogCkBAIC0xNTAsNyArMTUxLDcgQEAgc3RhdGljIHZvaWQgeXllcnJvcihDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pOwogI2VuZGlmCiAKIAotLyogRGVidWcgdHJhY2Vz
LiAgKi8KKy8qIEVuYWJsaW5nIHRyYWNlcy4gICovCiAjaWZuZGVmIFlZREVCVUcKICMgZGVmaW5l
IFlZREVCVUcgMAogI2VuZGlmCkBAIC0xNTgsMzQgKzE1OSw0NyBAQCBzdGF0aWMgdm9pZCB5eWVy
cm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7CiBleHRlcm4gaW50IHBw
ZGVidWc7CiAjZW5kaWYKIAotLyogVG9rZW4gdHlwZS4gICovCisvKiBUb2tlbnMuICAqLwogI2lm
bmRlZiBZWVRPS0VOVFlQRQogIyBkZWZpbmUgWVlUT0tFTlRZUEUKLSAgZW51bSB5eXRva2VudHlw
ZQotICB7Ci0gICAgVE9LX0NPTlNUX0lOVCA9IDI1OCwKLSAgICBUT0tfT1BfT1IgPSAyNTksCi0g
ICAgVE9LX09QX0FORCA9IDI2MCwKLSAgICBUT0tfT1BfRVEgPSAyNjEsCi0gICAgVE9LX09QX05F
ID0gMjYyLAotICAgIFRPS19PUF9MRSA9IDI2MywKLSAgICBUT0tfT1BfR0UgPSAyNjQsCi0gICAg
VE9LX09QX0xFRlQgPSAyNjUsCi0gICAgVE9LX09QX1JJR0hUID0gMjY2LAotICAgIFRPS19VTkFS
WSA9IDI2NwotICB9OworICAgLyogUHV0IHRoZSB0b2tlbnMgaW50byB0aGUgc3ltYm9sIHRhYmxl
LCBzbyB0aGF0IEdEQiBhbmQgb3RoZXIgZGVidWdnZXJzCisgICAgICBrbm93IGFib3V0IHRoZW0u
ICAqLworICAgZW51bSB5eXRva2VudHlwZSB7CisgICAgIFRPS19DT05TVF9JTlQgPSAyNTgsCisg
ICAgIFRPS19PUF9PUiA9IDI1OSwKKyAgICAgVE9LX09QX0FORCA9IDI2MCwKKyAgICAgVE9LX09Q
X05FID0gMjYxLAorICAgICBUT0tfT1BfRVEgPSAyNjIsCisgICAgIFRPS19PUF9HRSA9IDI2MywK
KyAgICAgVE9LX09QX0xFID0gMjY0LAorICAgICBUT0tfT1BfUklHSFQgPSAyNjUsCisgICAgIFRP
S19PUF9MRUZUID0gMjY2LAorICAgICBUT0tfVU5BUlkgPSAyNjcKKyAgIH07CiAjZW5kaWYKIAot
LyogVmFsdWUgdHlwZS4gICovCisKICNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQg
WVlTVFlQRV9JU19ERUNMQVJFRAogdHlwZWRlZiBpbnQgWVlTVFlQRTsKICMgZGVmaW5lIFlZU1RZ
UEVfSVNfVFJJVklBTCAxCisjIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jzb2xlc2NlbnQ7
IHdpbGwgYmUgd2l0aGRyYXduICovCiAjIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKICNl
bmRpZgogCiAKLQorI2lmZGVmIFlZUEFSU0VfUEFSQU0KKyNpZiBkZWZpbmVkIF9fU1REQ19fIHx8
IGRlZmluZWQgX19jcGx1c3BsdXMKK2ludCBwcHBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKTsK
KyNlbHNlCitpbnQgcHBwYXJzZSAoKTsKKyNlbmRpZgorI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFN
ICovCisjaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCiBpbnQgcHBw
YXJzZSAoQ29udGV4dCAqY29udGV4dCk7CisjZWxzZQoraW50IHBwcGFyc2UgKCk7CisjZW5kaWYK
KyNlbmRpZiAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KIAogCiAKQEAgLTIwNSw4ICsyMTksMTEgQEAg
dHlwZWRlZiB1bnNpZ25lZCBjaGFyIHl5dHlwZV91aW50ODsKIAogI2lmZGVmIFlZVFlQRV9JTlQ4
CiB0eXBlZGVmIFlZVFlQRV9JTlQ4IHl5dHlwZV9pbnQ4OwotI2Vsc2UKKyNlbGlmIChkZWZpbmVk
IF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19j
cGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKIHR5cGVkZWYgc2lnbmVkIGNoYXIgeXl0eXBl
X2ludDg7CisjZWxzZQordHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDg7CiAjZW5kaWYKIAog
I2lmZGVmIFlZVFlQRV9VSU5UMTYKQEAgLTIyNiw3ICsyNDMsOCBAQCB0eXBlZGVmIHNob3J0IGlu
dCB5eXR5cGVfaW50MTY7CiAjICBkZWZpbmUgWVlTSVpFX1QgX19TSVpFX1RZUEVfXwogIyBlbGlm
IGRlZmluZWQgc2l6ZV90CiAjICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90Ci0jIGVsaWYgISBkZWZp
bmVkIFlZU0laRV9UCisjIGVsaWYgISBkZWZpbmVkIFlZU0laRV9UICYmIChkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3Bs
dXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKICMgIGluY2x1ZGUgPHN0ZGRlZi5oPiAvKiBJTkZSSU5H
RVMgT04gVVNFUiBOQU1FIFNQQUNFICovCiAjICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90CiAjIGVs
c2UKQEAgLTI0OCwzMyArMjY2LDYgQEAgdHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDE2Owog
IyBlbmRpZgogI2VuZGlmCiAKLSNpZm5kZWYgWVlfQVRUUklCVVRFCi0jIGlmIChkZWZpbmVkIF9f
R05VQ19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAmJiAoMiA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSAyICYmIDk2IDw9IF9fR05VQ19N
SU5PUl9fKSkpICBcCi0gICAgIHx8IGRlZmluZWQgX19TVU5QUk9fQyAmJiAweDUxMTAgPD0gX19T
VU5QUk9fQwotIyAgZGVmaW5lIFlZX0FUVFJJQlVURShTcGVjKSBfX2F0dHJpYnV0ZV9fKFNwZWMp
Ci0jIGVsc2UKLSMgIGRlZmluZSBZWV9BVFRSSUJVVEUoU3BlYykgLyogZW1wdHkgKi8KLSMgZW5k
aWYKLSNlbmRpZgotCi0jaWZuZGVmIFlZX0FUVFJJQlVURV9QVVJFCi0jIGRlZmluZSBZWV9BVFRS
SUJVVEVfUFVSRSAgIFlZX0FUVFJJQlVURSAoKF9fcHVyZV9fKSkKLSNlbmRpZgotCi0jaWZuZGVm
IFlZX0FUVFJJQlVURV9VTlVTRUQKLSMgZGVmaW5lIFlZX0FUVFJJQlVURV9VTlVTRUQgWVlfQVRU
UklCVVRFICgoX191bnVzZWRfXykpCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkIF9Ob3JldHVybiBc
Ci0gICAgICYmICghZGVmaW5lZCBfX1NURENfVkVSU0lPTl9fIHx8IF9fU1REQ19WRVJTSU9OX18g
PCAyMDExMTIpCi0jIGlmIGRlZmluZWQgX01TQ19WRVIgJiYgMTIwMCA8PSBfTVNDX1ZFUgotIyAg
ZGVmaW5lIF9Ob3JldHVybiBfX2RlY2xzcGVjIChub3JldHVybikKLSMgZWxzZQotIyAgZGVmaW5l
IF9Ob3JldHVybiBZWV9BVFRSSUJVVEUgKChfX25vcmV0dXJuX18pKQotIyBlbmRpZgotI2VuZGlm
Ci0KIC8qIFN1cHByZXNzIHVudXNlZC12YXJpYWJsZSB3YXJuaW5ncyBieSAidXNpbmciIEUuICAq
LwogI2lmICEgZGVmaW5lZCBsaW50IHx8IGRlZmluZWQgX19HTlVDX18KICMgZGVmaW5lIFlZVVNF
KEUpICgodm9pZCkgKEUpKQpAQCAtMjgyLDI2ICsyNzMsMjQgQEAgdHlwZWRlZiBzaG9ydCBpbnQg
eXl0eXBlX2ludDE2OwogIyBkZWZpbmUgWVlVU0UoRSkgLyogZW1wdHkgKi8KICNlbmRpZgogCi0j
aWYgZGVmaW5lZCBfX0dOVUNfXyAmJiA0MDcgPD0gX19HTlVDX18gKiAxMDAgKyBfX0dOVUNfTUlO
T1JfXwotLyogU3VwcHJlc3MgYW4gaW5jb3JyZWN0IGRpYWdub3N0aWMgYWJvdXQgeXlsdmFsIGJl
aW5nIHVuaW5pdGlhbGl6ZWQuICAqLwotIyBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElB
TElaRURfQkVHSU4gXAotICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBwdXNoIikgXAotICAg
IF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVd1bmluaXRpYWxpemVkXCIiKVwK
LSAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XbWF5YmUtdW5pbml0aWFs
aXplZFwiIikKLSMgZGVmaW5lIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORCBcCi0g
ICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIHBvcCIpCisvKiBJZGVudGl0eSBmdW5jdGlvbiwg
dXNlZCB0byBzdXBwcmVzcyB3YXJuaW5ncyBhYm91dCBjb25zdGFudCBjb25kaXRpb25zLiAgKi8K
KyNpZm5kZWYgbGludAorIyBkZWZpbmUgWVlJRChOKSAoTikKICNlbHNlCi0jIGRlZmluZSBZWV9J
TklUSUFMX1ZBTFVFKFZhbHVlKSBWYWx1ZQotI2VuZGlmCi0jaWZuZGVmIFlZX0lHTk9SRV9NQVlC
RV9VTklOSVRJQUxJWkVEX0JFR0lOCi0jIGRlZmluZSBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFM
SVpFRF9CRUdJTgotIyBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5ECisj
aWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwg
ZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIGludAorWVlJ
RCAoaW50IHl5aSkKKyNlbHNlCitzdGF0aWMgaW50CitZWUlEICh5eWkpCisgICAgaW50IHl5aTsK
ICNlbmRpZgotI2lmbmRlZiBZWV9JTklUSUFMX1ZBTFVFCi0jIGRlZmluZSBZWV9JTklUSUFMX1ZB
TFVFKFZhbHVlKSAvKiBOb3RoaW5nLiAqLworeworICByZXR1cm4geXlpOworfQogI2VuZGlmCiAK
LQogI2lmICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRQogCiAvKiBUaGUg
cGFyc2VyIGludm9rZXMgYWxsb2NhIG9yIG1hbGxvYzsgZGVmaW5lIHRoZSBuZWNlc3Nhcnkgc3lt
Ym9scy4gICovCkBAIC0zMTksNyArMzA4LDggQEAgdHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2lu
dDE2OwogIyAgICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKICMgICBlbHNlCiAjICAgIGRlZmluZSBZ
WVNUQUNLX0FMTE9DIGFsbG9jYQotIyAgICBpZiAhIGRlZmluZWQgX0FMTE9DQV9IICYmICEgZGVm
aW5lZCBFWElUX1NVQ0NFU1MKKyMgICAgaWYgISBkZWZpbmVkIF9BTExPQ0FfSCAmJiAhIGRlZmlu
ZWQgRVhJVF9TVUNDRVNTICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZV
TkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikK
ICMgICAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNF
ICovCiAgICAgICAvKiBVc2UgRVhJVF9TVUNDRVNTIGFzIGEgd2l0bmVzcyBmb3Igc3RkbGliLmgu
ICAqLwogIyAgICAgaWZuZGVmIEVYSVRfU1VDQ0VTUwpAQCAtMzMxLDggKzMyMSw4IEBAIHR5cGVk
ZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQxNjsKICMgZW5kaWYKIAogIyBpZmRlZiBZWVNUQUNLX0FM
TE9DCi0gICAvKiBQYWNpZnkgR0NDJ3MgJ2VtcHR5IGlmLWJvZHknIHdhcm5pbmcuICAqLwotIyAg
ZGVmaW5lIFlZU1RBQ0tfRlJFRShQdHIpIGRvIHsgLyogZW1wdHkgKi87IH0gd2hpbGUgKDApCisg
ICAvKiBQYWNpZnkgR0NDJ3MgYGVtcHR5IGlmLWJvZHknIHdhcm5pbmcuICAqLworIyAgZGVmaW5l
IFlZU1RBQ0tfRlJFRShQdHIpIGRvIHsgLyogZW1wdHkgKi87IH0gd2hpbGUgKFlZSUQgKDApKQog
IyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQogICAgIC8qIFRoZSBPUyBtaWdodCBndWFy
YW50ZWUgb25seSBvbmUgZ3VhcmQgcGFnZSBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjaywKICAg
ICAgICBhbmQgYSBwYWdlIHNpemUgY2FuIGJlIGFzIHNtYWxsIGFzIDQwOTYgYnl0ZXMuICBTbyB3
ZSBjYW5ub3Qgc2FmZWx5CkBAIC0zNDgsNyArMzM4LDcgQEAgdHlwZWRlZiBzaG9ydCBpbnQgeXl0
eXBlX2ludDE2OwogIyAgZW5kaWYKICMgIGlmIChkZWZpbmVkIF9fY3BsdXNwbHVzICYmICEgZGVm
aW5lZCBFWElUX1NVQ0NFU1MgXAogICAgICAgICYmICEgKChkZWZpbmVkIFlZTUFMTE9DIHx8IGRl
ZmluZWQgbWFsbG9jKSBcCi0gICAgICAgICAgICAgJiYgKGRlZmluZWQgWVlGUkVFIHx8IGRlZmlu
ZWQgZnJlZSkpKQorCSAgICAgJiYgKGRlZmluZWQgWVlGUkVFIHx8IGRlZmluZWQgZnJlZSkpKQog
IyAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICov
CiAjICAgaWZuZGVmIEVYSVRfU1VDQ0VTUwogIyAgICBkZWZpbmUgRVhJVF9TVUNDRVNTIDAKQEAg
LTM1NiwxMyArMzQ2LDE1IEBAIHR5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQxNjsKICMgIGVu
ZGlmCiAjICBpZm5kZWYgWVlNQUxMT0MKICMgICBkZWZpbmUgWVlNQUxMT0MgbWFsbG9jCi0jICAg
aWYgISBkZWZpbmVkIG1hbGxvYyAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTCisjICAgaWYgISBk
ZWZpbmVkIG1hbGxvYyAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTICYmIChkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3Bs
dXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKIHZvaWQgKm1hbGxvYyAoWVlTSVpFX1QpOyAvKiBJTkZS
SU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCiAjICAgZW5kaWYKICMgIGVuZGlmCiAjICBpZm5k
ZWYgWVlGUkVFCiAjICAgZGVmaW5lIFlZRlJFRSBmcmVlCi0jICAgaWYgISBkZWZpbmVkIGZyZWUg
JiYgISBkZWZpbmVkIEVYSVRfU1VDQ0VTUworIyAgIGlmICEgZGVmaW5lZCBmcmVlICYmICEgZGVm
aW5lZCBFWElUX1NVQ0NFU1MgJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9f
RlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVS
KQogdm9pZCBmcmVlICh2b2lkICopOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICov
CiAjICAgZW5kaWYKICMgIGVuZGlmCkBAIC0zNzIsNyArMzY0LDcgQEAgdm9pZCBmcmVlICh2b2lk
ICopOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCiAKICNpZiAoISBkZWZpbmVk
IHl5b3ZlcmZsb3cgXAogICAgICAmJiAoISBkZWZpbmVkIF9fY3BsdXNwbHVzIFwKLSAgICAgICAg
IHx8IChkZWZpbmVkIFlZU1RZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkK
KwkgfHwgKGRlZmluZWQgWVlTVFlQRV9JU19UUklWSUFMICYmIFlZU1RZUEVfSVNfVFJJVklBTCkp
KQogCiAvKiBBIHR5cGUgdGhhdCBpcyBwcm9wZXJseSBhbGlnbmVkIGZvciBhbnkgc3RhY2sgbWVt
YmVyLiAgKi8KIHVuaW9uIHl5YWxsb2MKQEAgLTM5NywxNiArMzg5LDE2IEBAIHVuaW9uIHl5YWxs
b2MKICAgIGVsZW1lbnRzIGluIHRoZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9j
YXRpb24gb2YgdGhlCiAgICBzdGFjay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBwcm9wZXJseSBhbGln
bmVkIGxvY2F0aW9uIGZvciB0aGUgbmV4dAogICAgc3RhY2suICAqLwotIyBkZWZpbmUgWVlTVEFD
S19SRUxPQ0FURShTdGFja19hbGxvYywgU3RhY2spICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBZWVNJWkVfVCB5
eW5ld2J5dGVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICBZWUNPUFkgKCZ5eXB0ci0+U3RhY2tfYWxsb2MsIFN0YWNrLCB5eXNpemUpOyAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICBTdGFjayA9ICZ5eXB0ci0+U3RhY2tfYWxsb2M7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB5eW5ld2J5dGVzID0g
eXlzdGFja3NpemUgKiBzaXplb2YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJTVVNOyBcCi0g
ICAgICAgIHl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7ICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgd2hpbGUgKDApCisjIGRlZmlu
ZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrX2FsbG9jLCBTdGFjaykJCQkJXAorICAgIGRvCQkJCQkJ
CQkJXAorICAgICAgewkJCQkJCQkJCVwKKwlZWVNJWkVfVCB5eW5ld2J5dGVzOwkJCQkJCVwKKwlZ
WUNPUFkgKCZ5eXB0ci0+U3RhY2tfYWxsb2MsIFN0YWNrLCB5eXNpemUpOwkJCVwKKwlTdGFjayA9
ICZ5eXB0ci0+U3RhY2tfYWxsb2M7CQkJCQlcCisJeXluZXdieXRlcyA9IHl5c3RhY2tzaXplICog
c2l6ZW9mICgqU3RhY2spICsgWVlTVEFDS19HQVBfTUFYSU1VTTsgXAorCXl5cHRyICs9IHl5bmV3
Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7CQkJCVwKKyAgICAgIH0JCQkJCQkJCQlcCisgICAgd2hp
bGUgKFlZSUQgKDApKQogCiAjZW5kaWYKIApAQCAtNDI1LDcgKzQxNyw3IEBAIHVuaW9uIHl5YWxs
b2MKICAgICAgICAgICBmb3IgKHl5aSA9IDA7IHl5aSA8IChDb3VudCk7IHl5aSsrKSAgIFwKICAg
ICAgICAgICAgIChEc3QpW3l5aV0gPSAoU3JjKVt5eWldOyAgICAgICAgICAgIFwKICAgICAgICAg
fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHdoaWxlICgw
KQorICAgICAgd2hpbGUgKFlZSUQgKDApKQogIyAgZW5kaWYKICMgZW5kaWYKICNlbmRpZiAvKiAh
WVlDT1BZX05FRURFRCAqLwpAQCAtNDQxLDE5ICs0MzMsMTcgQEAgdW5pb24geXlhbGxvYwogI2Rl
ZmluZSBZWU5OVFMgIDMKIC8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBydWxlcy4gICovCiAjZGVm
aW5lIFlZTlJVTEVTICAyNgotLyogWVlOU1RBVEVTIC0tIE51bWJlciBvZiBzdGF0ZXMuICAqLwor
LyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHN0YXRlcy4gICovCiAjZGVmaW5lIFlZTlNUQVRFUyAg
NTIKIAotLyogWVlUUkFOU0xBVEVbWVlYXSAtLSBTeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcg
dG8gWVlYIGFzIHJldHVybmVkCi0gICBieSB5eWxleCwgd2l0aCBvdXQtb2YtYm91bmRzIGNoZWNr
aW5nLiAgKi8KKy8qIFlZVFJBTlNMQVRFKFlZTEVYKSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNv
cnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLwogI2RlZmluZSBZWVVOREVGVE9LICAyCiAjZGVmaW5l
IFlZTUFYVVRPSyAgIDI2NwogCi0jZGVmaW5lIFlZVFJBTlNMQVRFKFlZWCkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIFlZVFJBTlNMQVRF
KFlZWCkJCQkJCQlcCiAgICgodW5zaWduZWQgaW50KSAoWVlYKSA8PSBZWU1BWFVUT0sgPyB5eXRy
YW5zbGF0ZVtZWVhdIDogWVlVTkRFRlRPSykKIAotLyogWVlUUkFOU0xBVEVbVE9LRU4tTlVNXSAt
LSBTeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gVE9LRU4tTlVNCi0gICBhcyByZXR1cm5l
ZCBieSB5eWxleCwgd2l0aG91dCBvdXQtb2YtYm91bmRzIGNoZWNraW5nLiAgKi8KKy8qIFlZVFJB
TlNMQVRFW1lZTEVYXSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlM
RVguICAqLwogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRyYW5zbGF0ZVtdID0KIHsKICAg
ICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLApAQCAtNDg2LDEyICs0NzYsMzYgQEAgc3RhdGljIGNvbnN0IHl5dHlwZV91
aW50OCB5eXRyYW5zbGF0ZVtdID0KIH07CiAKICNpZiBZWURFQlVHCi0gIC8qIFlZUkxJTkVbWVlO
XSAtLSBTb3VyY2UgbGluZSB3aGVyZSBydWxlIG51bWJlciBZWU4gd2FzIGRlZmluZWQuICAqLwor
LyogWVlQUkhTW1lZTl0gLS0gSW5kZXggb2YgdGhlIGZpcnN0IFJIUyBzeW1ib2wgb2YgcnVsZSBu
dW1iZXIgWVlOIGluCisgICBZWVJIUy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5
cHJoc1tdID0KK3sKKyAgICAgICAwLCAgICAgMCwgICAgIDMsICAgICA1LCAgICAgNywgICAgMTEs
ICAgIDE1LCAgICAxOSwgICAgMjMsICAgIDI3LAorICAgICAgMzEsICAgIDM1LCAgICAzOSwgICAg
NDMsICAgIDQ3LCAgICA1MSwgICAgNTUsICAgIDU5LCAgICA2MywgICAgNjcsCisgICAgICA3MSwg
ICAgNzUsICAgIDc5LCAgICA4MiwgICAgODUsICAgIDg4LCAgICA5MQorfTsKKworLyogWVlSSFMg
LS0gQSBgLTEnLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBydWxlcycgUkhTLiAgKi8KK3N0YXRpYyBj
b25zdCB5eXR5cGVfaW50OCB5eXJoc1tdID0KK3sKKyAgICAgIDI4LCAgICAgMCwgICAgLTEsICAg
IDI5LCAgICAtMSwgICAgIDMsICAgIC0xLCAgICAyOSwgICAgIDQsICAgIDI5LAorICAgICAgLTEs
ICAgIDI5LCAgICAgNSwgICAgMjksICAgIC0xLCAgICAyOSwgICAgIDYsICAgIDI5LCAgICAtMSwg
ICAgMjksCisgICAgICAgNywgICAgMjksICAgIC0xLCAgICAyOSwgICAgIDgsICAgIDI5LCAgICAt
MSwgICAgMjksICAgICA5LCAgICAyOSwKKyAgICAgIC0xLCAgICAyOSwgICAgMTAsICAgIDI5LCAg
ICAtMSwgICAgMjksICAgIDEzLCAgICAyOSwgICAgLTEsICAgIDI5LAorICAgICAgMTQsICAgIDI5
LCAgICAtMSwgICAgMjksICAgIDEyLCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxMSwgICAgMjks
CisgICAgICAtMSwgICAgMjksICAgIDE1LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxNiwgICAg
MjksICAgIC0xLCAgICAyOSwKKyAgICAgIDE4LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxNywg
ICAgMjksICAgIC0xLCAgICAyOSwgICAgMjEsICAgIDI5LAorICAgICAgLTEsICAgIDI5LCAgICAy
MCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTksICAgIDI5LCAgICAtMSwgICAgMjMsCisgICAg
ICAyOSwgICAgLTEsICAgIDI0LCAgICAyOSwgICAgLTEsICAgIDE4LCAgICAyOSwgICAgLTEsICAg
IDE3LCAgICAyOSwKKyAgICAgIC0xLCAgICAyNSwgICAgMjksICAgIDI2LCAgICAtMQorfTsKKwor
LyogWVlSTElORVtZWU5dIC0tIHNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVyIFlZTiB3YXMg
ZGVmaW5lZC4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cmxpbmVbXSA9CiB7Ci0g
ICAgICAgMCwgICAgOTcsICAgIDk3LCAgIDEwNCwgICAxMDUsICAgMTA4LCAgIDExMSwgICAxMTQs
ICAgMTE3LCAgIDEyMCwKLSAgICAgMTIzLCAgIDEyNiwgICAxMjksICAgMTMyLCAgIDEzNSwgICAx
MzgsICAgMTQxLCAgIDE0NCwgICAxNDcsICAgMTUwLAotICAgICAxNjMsICAgMTc2LCAgIDE3OSwg
ICAxODIsICAgMTg1LCAgIDE4OCwgICAxOTEKKyAgICAgICAwLCAgICA5MSwgICAgOTEsICAgIDk4
LCAgICA5OSwgICAxMDIsICAgMTA1LCAgIDEwOCwgICAxMTEsICAgMTE0LAorICAgICAxMTcsICAg
MTIwLCAgIDEyMywgICAxMjYsICAgMTI5LCAgIDEzMiwgICAxMzUsICAgMTM4LCAgIDE0MSwgICAx
NDQsCisgICAgIDE1NywgICAxNzAsICAgMTczLCAgIDE3NiwgICAxNzksICAgMTgyLCAgIDE4NQog
fTsKICNlbmRpZgogCkBAIC01MDEsMTYgKzUxNSwxNiBAQCBzdGF0aWMgY29uc3QgeXl0eXBlX3Vp
bnQ4IHl5cmxpbmVbXSA9CiBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgeXl0bmFtZVtdID0KIHsK
ICAgIiRlbmQiLCAiZXJyb3IiLCAiJHVuZGVmaW5lZCIsICJUT0tfQ09OU1RfSU5UIiwgIlRPS19P
UF9PUiIsCi0gICJUT0tfT1BfQU5EIiwgIid8JyIsICInXiciLCAiJyYnIiwgIlRPS19PUF9FUSIs
ICJUT0tfT1BfTkUiLCAiJzwnIiwKLSAgIic+JyIsICJUT0tfT1BfTEUiLCAiVE9LX09QX0dFIiwg
IlRPS19PUF9MRUZUIiwgIlRPS19PUF9SSUdIVCIsICInKyciLAorICAiVE9LX09QX0FORCIsICIn
fCciLCAiJ14nIiwgIicmJyIsICJUT0tfT1BfTkUiLCAiVE9LX09QX0VRIiwgIic8JyIsCisgICIn
PiciLCAiVE9LX09QX0dFIiwgIlRPS19PUF9MRSIsICJUT0tfT1BfUklHSFQiLCAiVE9LX09QX0xF
RlQiLCAiJysnIiwKICAgIictJyIsICInKiciLCAiJy8nIiwgIiclJyIsICJUT0tfVU5BUlkiLCAi
JyEnIiwgIid+JyIsICInKCciLCAiJyknIiwKLSAgIiRhY2NlcHQiLCAiaW5wdXQiLCAiZXhwcmVz
c2lvbiIsIFlZX05VTExQVFIKKyAgIiRhY2NlcHQiLCAiaW5wdXQiLCAiZXhwcmVzc2lvbiIsIFlZ
X05VTEwKIH07CiAjZW5kaWYKIAogIyBpZmRlZiBZWVBSSU5UCi0vKiBZWVRPS05VTVtOVU1dIC0t
IChFeHRlcm5hbCkgdG9rZW4gbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlCi0gICAoaW50ZXJu
YWwpIHN5bWJvbCBudW1iZXIgTlVNICh3aGljaCBtdXN0IGJlIHRoYXQgb2YgYSB0b2tlbikuICAq
LworLyogWVlUT0tOVU1bWVlMRVgtTlVNXSAtLSBJbnRlcm5hbCB0b2tlbiBudW1iZXIgY29ycmVz
cG9uZGluZyB0bworICAgdG9rZW4gWVlMRVgtTlVNLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVf
dWludDE2IHl5dG9rbnVtW10gPQogewogICAgICAgIDAsICAgMjU2LCAgIDI1NywgICAyNTgsICAg
MjU5LCAgIDI2MCwgICAxMjQsICAgIDk0LCAgICAzOCwgICAyNjEsCkBAIC01MTksMTggKzUzMyw0
NCBAQCBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXRva251bVtdID0KIH07CiAjIGVuZGlm
CiAKLSNkZWZpbmUgWVlQQUNUX05JTkYgLTExCisvKiBZWVIxW1lZTl0gLS0gU3ltYm9sIG51bWJl
ciBvZiBzeW1ib2wgdGhhdCBydWxlIFlZTiBkZXJpdmVzLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5
cGVfdWludDggeXlyMVtdID0KK3sKKyAgICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAy
OSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LAorICAgICAgMjksICAgIDI5LCAg
ICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksCisg
ICAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOQorfTsKIAot
I2RlZmluZSB5eXBhY3RfdmFsdWVfaXNfZGVmYXVsdChZeXN0YXRlKSBcCi0gICghISgoWXlzdGF0
ZSkgPT0gKC0xMSkpKQorLyogWVlSMltZWU5dIC0tIE51bWJlciBvZiBzeW1ib2xzIGNvbXBvc2lu
ZyByaWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91
aW50OCB5eXIyW10gPQoreworICAgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAzLCAg
ICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsCisgICAgICAgMywgICAgIDMsICAgICAz
LCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywKKyAgICAg
ICAzLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAzCit9OwogCi0jZGVm
aW5lIFlZVEFCTEVfTklORiAtMQorLyogWVlERUZBQ1RbU1RBVEUtTkFNRV0gLS0gRGVmYXVsdCBy
ZWR1Y3Rpb24gbnVtYmVyIGluIHN0YXRlIFNUQVRFLU5VTS4KKyAgIFBlcmZvcm1lZCB3aGVuIFlZ
VEFCTEUgZG9lc24ndCBzcGVjaWZ5IHNvbWV0aGluZyBlbHNlIHRvIGRvLiAgWmVybworICAgbWVh
bnMgdGhlIGRlZmF1bHQgaXMgYW4gZXJyb3IuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50
OCB5eWRlZmFjdFtdID0KK3sKKyAgICAgICAwLCAgICAgMywgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDIsICAgIDI1LAorICAgICAgMjQsICAgIDIyLCAgICAy
MywgICAgIDAsICAgICAxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI2LCAgICAgNCwgICAgIDUs
ICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAorICAgICAgMTAsICAgIDE0LCAgICAxMywgICAg
MTEsICAgIDEyLCAgICAxNSwgICAgMTYsICAgIDE4LCAgICAxNywgICAgMjEsCisgICAgICAyMCwg
ICAgMTkKK307CiAKLSNkZWZpbmUgeXl0YWJsZV92YWx1ZV9pc19lcnJvcihZeXRhYmxlX3ZhbHVl
KSBcCi0gIDAKKy8qIFlZREVGR09UT1tOVEVSTS1OVU1dLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5
cGVfaW50OCB5eWRlZmdvdG9bXSA9Cit7CisgICAgICAtMSwgICAgIDcsICAgICA4Cit9OwogCi0g
IC8qIFlZUEFDVFtTVEFURS1OVU1dIC0tIEluZGV4IGluIFlZVEFCTEUgb2YgdGhlIHBvcnRpb24g
ZGVzY3JpYmluZwotICAgICBTVEFURS1OVU0uICAqLworLyogWVlQQUNUW1NUQVRFLU5VTV0gLS0g
SW5kZXggaW4gWVlUQUJMRSBvZiB0aGUgcG9ydGlvbiBkZXNjcmliaW5nCisgICBTVEFURS1OVU0u
ICAqLworI2RlZmluZSBZWVBBQ1RfTklORiAtMTEKIHN0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYg
eXlwYWN0W10gPQogewogICAgICAgNDYsICAgLTExLCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0
NiwgICAgNDYsICAgIDEyLCAgICA2OCwgICAtMTEsCkBAIC01NDEsMzQgKzU4MSwxNiBAQCBzdGF0
aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cGFjdFtdID0KICAgICAgLTExLCAgIC0xMQogfTsKIAot
ICAvKiBZWURFRkFDVFtTVEFURS1OVU1dIC0tIERlZmF1bHQgcmVkdWN0aW9uIG51bWJlciBpbiBz
dGF0ZSBTVEFURS1OVU0uCi0gICAgIFBlcmZvcm1lZCB3aGVuIFlZVEFCTEUgZG9lcyBub3Qgc3Bl
Y2lmeSBzb21ldGhpbmcgZWxzZSB0byBkby4gIFplcm8KLSAgICAgbWVhbnMgdGhlIGRlZmF1bHQg
aXMgYW4gZXJyb3IuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eWRlZmFjdFtdID0K
LXsKLSAgICAgICAwLCAgICAgMywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDIsICAgIDI1LAotICAgICAgMjQsICAgIDIyLCAgICAyMywgICAgIDAsICAgICAx
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAg
ICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI2LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywg
ICAgIDgsICAgIDEwLAotICAgICAgIDksICAgIDE0LCAgICAxMywgICAgMTIsICAgIDExLCAgICAx
NiwgICAgMTUsICAgIDE4LCAgICAxNywgICAgMjEsCi0gICAgICAyMCwgICAgMTkKLX07Ci0KLSAg
LyogWVlQR09UT1tOVEVSTS1OVU1dLiAgKi8KKy8qIFlZUEdPVE9bTlRFUk0tTlVNXS4gICovCiBz
dGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlwZ290b1tdID0KIHsKICAgICAgLTExLCAgIC0xMSwg
ICAgLTIKIH07CiAKLSAgLyogWVlERUZHT1RPW05URVJNLU5VTV0uICAqLwotc3RhdGljIGNvbnN0
IHl5dHlwZV9pbnQ4IHl5ZGVmZ290b1tdID0KLXsKLSAgICAgIC0xLCAgICAgNywgICAgIDgKLX07
Ci0KLSAgLyogWVlUQUJMRVtZWVBBQ1RbU1RBVEUtTlVNXV0gLS0gV2hhdCB0byBkbyBpbiBzdGF0
ZSBTVEFURS1OVU0uICBJZgotICAgICBwb3NpdGl2ZSwgc2hpZnQgdGhhdCB0b2tlbi4gIElmIG5l
Z2F0aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hvc2UKLSAgICAgbnVtYmVyIGlzIHRoZSBvcHBvc2l0
ZS4gIElmIFlZVEFCTEVfTklORiwgc3ludGF4IGVycm9yLiAgKi8KKy8qIFlZVEFCTEVbWVlQQUNU
W1NUQVRFLU5VTV1dLiAgV2hhdCB0byBkbyBpbiBzdGF0ZSBTVEFURS1OVU0uICBJZgorICAgcG9z
aXRpdmUsIHNoaWZ0IHRoYXQgdG9rZW4uICBJZiBuZWdhdGl2ZSwgcmVkdWNlIHRoZSBydWxlIHdo
aWNoCisgICBudW1iZXIgaXMgdGhlIG9wcG9zaXRlLiAgSWYgWVlUQUJMRV9OSU5GLCBzeW50YXgg
ZXJyb3IuICAqLworI2RlZmluZSBZWVRBQkxFX05JTkYgLTEKIHN0YXRpYyBjb25zdCB5eXR5cGVf
dWludDggeXl0YWJsZVtdID0KIHsKICAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAx
MywgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLApAQCAtNTkxLDYgKzYxMywxMiBA
QCBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dGFibGVbXSA9CiAgICAgICAyNywgICAgMjgs
ICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyCiB9OwogCisjZGVmaW5lIHl5cGFjdF92YWx1ZV9p
c19kZWZhdWx0KFl5c3RhdGUpIFwKKyAgKCEhKChZeXN0YXRlKSA9PSAoLTExKSkpCisKKyNkZWZp
bmUgeXl0YWJsZV92YWx1ZV9pc19lcnJvcihZeXRhYmxlX3ZhbHVlKSBcCisgIFlZSUQgKDApCisK
IHN0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eWNoZWNrW10gPQogewogICAgICAgIDIsICAgICAz
LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTks
CkBAIC02MTMsOCArNjQxLDggQEAgc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5Y2hlY2tbXSA9
CiAgICAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxCiB9OwogCi0gIC8q
IFlZU1RPU1tTVEFURS1OVU1dIC0tIFRoZSAoaW50ZXJuYWwgbnVtYmVyIG9mIHRoZSkgYWNjZXNz
aW5nCi0gICAgIHN5bWJvbCBvZiBzdGF0ZSBTVEFURS1OVU0uICAqLworLyogWVlTVE9TW1NUQVRF
LU5VTV0gLS0gVGhlIChpbnRlcm5hbCBudW1iZXIgb2YgdGhlKSBhY2Nlc3NpbmcKKyAgIHN5bWJv
bCBvZiBzdGF0ZSBTVEFURS1OVU0uICAqLwogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXN0
b3NbXSA9CiB7CiAgICAgICAgMCwgICAgIDMsICAgIDE3LCAgICAxOCwgICAgMjMsICAgIDI0LCAg
ICAyNSwgICAgMjgsICAgIDI5LCAgICAyOSwKQEAgLTYyNSwzMiArNjUzLDMwIEBAIHN0YXRpYyBj
b25zdCB5eXR5cGVfdWludDggeXlzdG9zW10gPQogICAgICAgMjksICAgIDI5CiB9OwogCi0gIC8q
IFlZUjFbWVlOXSAtLSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1bGUgWVlOIGRlcml2
ZXMuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIxW10gPQotewotICAgICAgIDAs
ICAgIDI3LCAgICAyOCwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwg
ICAgMjksCi0gICAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAy
OSwgICAgMjksICAgIDI5LCAgICAyOSwKLSAgICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAg
ICAyOSwgICAgMjksICAgIDI5Ci19OwotCi0gIC8qIFlZUjJbWVlOXSAtLSBOdW1iZXIgb2Ygc3lt
Ym9scyBvbiB0aGUgcmlnaHQgaGFuZCBzaWRlIG9mIHJ1bGUgWVlOLiAgKi8KLXN0YXRpYyBjb25z
dCB5eXR5cGVfdWludDggeXlyMltdID0KLXsKLSAgICAgICAwLCAgICAgMiwgICAgIDEsICAgICAx
LCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLAotICAgICAgIDMsICAg
ICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAg
IDMsCi0gICAgICAgMywgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMwot
fTsKLQotCi0jZGVmaW5lIHl5ZXJyb2sgICAgICAgICAoeXllcnJzdGF0dXMgPSAwKQotI2RlZmlu
ZSB5eWNsZWFyaW4gICAgICAgKHl5Y2hhciA9IFlZRU1QVFkpCi0jZGVmaW5lIFlZRU1QVFkgICAg
ICAgICAoLTIpCi0jZGVmaW5lIFlZRU9GICAgICAgICAgICAwCi0KLSNkZWZpbmUgWVlBQ0NFUFQg
ICAgICAgIGdvdG8geXlhY2NlcHRsYWIKLSNkZWZpbmUgWVlBQk9SVCAgICAgICAgIGdvdG8geXlh
Ym9ydGxhYgotI2RlZmluZSBZWUVSUk9SICAgICAgICAgZ290byB5eWVycm9ybGFiCi0KKyNkZWZp
bmUgeXllcnJvawkJKHl5ZXJyc3RhdHVzID0gMCkKKyNkZWZpbmUgeXljbGVhcmluCSh5eWNoYXIg
PSBZWUVNUFRZKQorI2RlZmluZSBZWUVNUFRZCQkoLTIpCisjZGVmaW5lIFlZRU9GCQkwCisKKyNk
ZWZpbmUgWVlBQ0NFUFQJZ290byB5eWFjY2VwdGxhYgorI2RlZmluZSBZWUFCT1JUCQlnb3RvIHl5
YWJvcnRsYWIKKyNkZWZpbmUgWVlFUlJPUgkJZ290byB5eWVycm9ybGFiCisKKworLyogTGlrZSBZ
WUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3IuICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3Jh
cmlseQorICAgdG8gZWFzZSB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1lYW5pbmcgb2YgWVlF
UlJPUiwgZm9yIEdDQy4KKyAgIE9uY2UgR0NDIHZlcnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJz
aW9uIDEsIHRoaXMgY2FuIGdvLiAgSG93ZXZlciwKKyAgIFlZRkFJTCBhcHBlYXJzIHRvIGJlIGlu
IHVzZS4gIE5ldmVydGhlbGVzcywgaXQgaXMgZm9ybWFsbHkgZGVwcmVjYXRlZAorICAgaW4gQmlz
b24gMi40LjIncyBORVdTIGVudHJ5LCB3aGVyZSBhIHBsYW4gdG8gcGhhc2UgaXQgb3V0IGlzCisg
ICBkaXNjdXNzZWQuICAqLworCisjZGVmaW5lIFlZRkFJTAkJZ290byB5eWVycmxhYgorI2lmIGRl
ZmluZWQgWVlGQUlMCisgIC8qIFRoaXMgaXMgaGVyZSB0byBzdXBwcmVzcyB3YXJuaW5ncyBmcm9t
IHRoZSBHQ0MgY3BwJ3MKKyAgICAgLVd1bnVzZWQtbWFjcm9zLiAgTm9ybWFsbHkgd2UgZG9uJ3Qg
d29ycnkgYWJvdXQgdGhhdCB3YXJuaW5nLCBidXQKKyAgICAgc29tZSB1c2VycyBkbywgYW5kIHdl
IHdhbnQgdG8gbWFrZSBpdCBlYXN5IGZvciB1c2VycyB0byByZW1vdmUKKyAgICAgWVlGQUlMIHVz
ZXMsIHdoaWNoIHdpbGwgcHJvZHVjZSB3YXJuaW5ncyBmcm9tIEJpc29uIDIuNS4gICovCisjZW5k
aWYKIAogI2RlZmluZSBZWVJFQ09WRVJJTkcoKSAgKCEheXllcnJzdGF0dXMpCiAKQEAgLTY2Nywx
NSArNjkzLDI3IEBAIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCiAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgIHl5ZXJyb3Ig
KGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIpKTsgXAotICAgICAg
WVlFUlJPUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi13aGlsZSAoMCkKKyAgICAgIFlZRVJST1I7CQkJCQkJCVwKKyAgICB9CQkJ
CQkJCQlcCit3aGlsZSAoWVlJRCAoMCkpCiAKIC8qIEVycm9yIHRva2VuIG51bWJlciAqLwotI2Rl
ZmluZSBZWVRFUlJPUiAgICAgICAgMQotI2RlZmluZSBZWUVSUkNPREUgICAgICAgMjU2CisjZGVm
aW5lIFlZVEVSUk9SCTEKKyNkZWZpbmUgWVlFUlJDT0RFCTI1NgogCiAKKy8qIFRoaXMgbWFjcm8g
aXMgcHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICovCisjaWZuZGVmIFlZX0xP
Q0FUSU9OX1BSSU5UCisjIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpICgodm9p
ZCkgMCkKKyNlbmRpZgorCisKKy8qIFlZTEVYIC0tIGNhbGxpbmcgYHl5bGV4JyB3aXRoIHRoZSBy
aWdodCBhcmd1bWVudHMuICAqLworI2lmZGVmIFlZTEVYX1BBUkFNCisjIGRlZmluZSBZWUxFWCB5
eWxleCAoJnl5bHZhbCwgWVlMRVhfUEFSQU0pCisjZWxzZQorIyBkZWZpbmUgWVlMRVggeXlsZXgg
KCZ5eWx2YWwsIGNvbnRleHQpCisjZW5kaWYKIAogLyogRW5hYmxlIGRlYnVnZ2luZyBpZiByZXF1
ZXN0ZWQuICAqLwogI2lmIFlZREVCVUcKQEAgLTY4NSw0NyArNzIzLDU4IEBAIHdoaWxlICgwKQog
IyAgZGVmaW5lIFlZRlBSSU5URiBmcHJpbnRmCiAjIGVuZGlmCiAKLSMgZGVmaW5lIFlZRFBSSU5U
RihBcmdzKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICBZWUZQUklOVEYgQXJnczsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLX0gd2hpbGUgKDApCisjIGRlZmluZSBZWURQUklOVEYoQXJncykJCQlc
CitkbyB7CQkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJCVwKKyAgICBZWUZQUklOVEYgQXJnczsJ
CQkJXAorfSB3aGlsZSAoWVlJRCAoMCkpCiAKLS8qIFRoaXMgbWFjcm8gaXMgcHJvdmlkZWQgZm9y
IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICovCi0jaWZuZGVmIFlZX0xPQ0FUSU9OX1BSSU5UCi0j
IGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpICgodm9pZCkgMCkKLSNlbmRpZgor
IyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCQkJ
ICBcCitkbyB7CQkJCQkJCQkJICBcCisgIGlmICh5eWRlYnVnKQkJCQkJCQkJICBcCisgICAgewkJ
CQkJCQkJCSAgXAorICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRsZSk7CQkJCQkg
IFwKKyAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLAkJCQkJCSAgXAorCQkgIFR5cGUsIFZh
bHVlLCBjb250ZXh0KTsgXAorICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwkJCQkJCSAg
XAorICAgIH0JCQkJCQkJCQkgIFwKK30gd2hpbGUgKFlZSUQgKDApKQogCiAKLSMgZGVmaW5lIFlZ
X1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKSAgICAgICAgICAgICAg
ICAgICAgXAotZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRsZSk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0
ZGVyciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICAgICAgICAgIFR5cGUsIFZhbHVlLCBjb250ZXh0KTsgXAotICAgICAgWVlGUFJJTlRGIChz
dGRlcnIsICJcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLX0gd2hpbGUgKDApCi0KLQotLyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBQcmludCB0aGlzIHN5bWJvbCdzIHZhbHVlIG9u
IFlZT1VUUFVULiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUHJpbnQgdGhpcyBzeW1i
b2wgb24gWVlPVVRQVVQuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwog
CisvKkFSR1NVU0VEKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19G
VU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIp
CiBzdGF0aWMgdm9pZAogeXlfc3ltYm9sX3ZhbHVlX3ByaW50IChGSUxFICp5eW91dHB1dCwgaW50
IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwLCBDb250ZXh0ICpjb250ZXh0
KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0LCB5
eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KQorICAgIEZJTEUgKnl5b3V0cHV0OworICAgIGludCB5
eXR5cGU7CisgICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOworICAgIENvbnRleHQg
KmNvbnRleHQ7CisjZW5kaWYKIHsKICAgRklMRSAqeXlvID0geXlvdXRwdXQ7CiAgIFlZVVNFICh5
eW8pOwotICBZWVVTRSAoY29udGV4dCk7CiAgIGlmICgheXl2YWx1ZXApCiAgICAgcmV0dXJuOwor
ICBZWVVTRSAoY29udGV4dCk7CiAjIGlmZGVmIFlZUFJJTlQKICAgaWYgKHl5dHlwZSA8IFlZTlRP
S0VOUykKICAgICBZWVBSSU5UICh5eW91dHB1dCwgeXl0b2tudW1beXl0eXBlXSwgKnl5dmFsdWVw
KTsKKyMgZWxzZQorICBZWVVTRSAoeXlvdXRwdXQpOwogIyBlbmRpZgotICBZWVVTRSAoeXl0eXBl
KTsKKyAgc3dpdGNoICh5eXR5cGUpCisgICAgeworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJl
YWs7CisgICAgfQogfQogCiAKQEAgLTczMywxMSArNzgyLDIzIEBAIHl5X3N5bWJvbF92YWx1ZV9w
cmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5
eXZhbHVlCiB8IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAogYC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmlu
ZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5l
ZCBfTVNDX1ZFUikKIHN0YXRpYyB2b2lkCiB5eV9zeW1ib2xfcHJpbnQgKEZJTEUgKnl5b3V0cHV0
LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXAsIENvbnRleHQgKmNv
bnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3N5bWJvbF9wcmludCAoeXlvdXRwdXQsIHl5
dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpCisgICAgRklMRSAqeXlvdXRwdXQ7CisgICAgaW50IHl5
dHlwZTsKKyAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7CisgICAgQ29udGV4dCAq
Y29udGV4dDsKKyNlbmRpZgogewotICBZWUZQUklOVEYgKHl5b3V0cHV0LCAiJXMgJXMgKCIsCi0g
ICAgICAgICAgICAgeXl0eXBlIDwgWVlOVE9LRU5TID8gInRva2VuIiA6ICJudGVybSIsIHl5dG5h
bWVbeXl0eXBlXSk7CisgIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCisgICAgWVlGUFJJTlRGICh5
eW91dHB1dCwgInRva2VuICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOworICBlbHNlCisgICAgWVlG
UFJJTlRGICh5eW91dHB1dCwgIm50ZXJtICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOwogCiAgIHl5
X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQp
OwogICBZWUZQUklOVEYgKHl5b3V0cHV0LCAiKSIpOwpAQCAtNzQ4LDggKzgwOSwxNiBAQCB5eV9z
eW1ib2xfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICog
Y29uc3QgeXl2YWx1ZXAsIENvbgogfCBUT1AgKGluY2x1ZGVkKS4gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorI2lmIChk
ZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmlu
ZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKIHN0YXRpYyB2b2lkCiB5eV9zdGFj
a19wcmludCAoeXl0eXBlX2ludDE2ICp5eWJvdHRvbSwgeXl0eXBlX2ludDE2ICp5eXRvcCkKKyNl
bHNlCitzdGF0aWMgdm9pZAoreXlfc3RhY2tfcHJpbnQgKHl5Ym90dG9tLCB5eXRvcCkKKyAgICB5
eXR5cGVfaW50MTYgKnl5Ym90dG9tOworICAgIHl5dHlwZV9pbnQxNiAqeXl0b3A7CisjZW5kaWYK
IHsKICAgWVlGUFJJTlRGIChzdGRlcnIsICJTdGFjayBub3ciKTsKICAgZm9yICg7IHl5Ym90dG9t
IDw9IHl5dG9wOyB5eWJvdHRvbSsrKQpAQCAtNzYwLDQyICs4MjksNTAgQEAgeXlfc3RhY2tfcHJp
bnQgKHl5dHlwZV9pbnQxNiAqeXlib3R0b20sIHl5dHlwZV9pbnQxNiAqeXl0b3ApCiAgIFlZRlBS
SU5URiAoc3RkZXJyLCAiXG4iKTsKIH0KIAotIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9t
LCBUb3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh5eWRl
YnVnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIHl5X3N0YWNrX3ByaW50ICgoQm90dG9tKSwgKFRvcCkpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLX0gd2hpbGUgKDApCisjIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRv
cCkJCQkJXAorZG8gewkJCQkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJCQkJXAorICAgIHl5X3N0
YWNrX3ByaW50ICgoQm90dG9tKSwgKFRvcCkpOwkJCQlcCit9IHdoaWxlIChZWUlEICgwKSkKIAog
CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KIHwg
UmVwb3J0IHRoYXQgdGhlIFlZUlVMRSBpcyBnb2luZyB0byBiZSByZWR1Y2VkLiAgfAogYC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKyNpZiAoZGVm
aW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVk
IF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCiBzdGF0aWMgdm9pZAoteXlfcmVkdWNl
X3ByaW50ICh5eXR5cGVfaW50MTYgKnl5c3NwLCBZWVNUWVBFICp5eXZzcCwgaW50IHl5cnVsZSwg
Q29udGV4dCAqY29udGV4dCkKK3l5X3JlZHVjZV9wcmludCAoWVlTVFlQRSAqeXl2c3AsIGludCB5
eXJ1bGUsIENvbnRleHQgKmNvbnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3JlZHVjZV9w
cmludCAoeXl2c3AsIHl5cnVsZSwgY29udGV4dCkKKyAgICBZWVNUWVBFICp5eXZzcDsKKyAgICBp
bnQgeXlydWxlOworICAgIENvbnRleHQgKmNvbnRleHQ7CisjZW5kaWYKIHsKLSAgdW5zaWduZWQg
bG9uZyBpbnQgeXlsbm8gPSB5eXJsaW5lW3l5cnVsZV07CiAgIGludCB5eW5yaHMgPSB5eXIyW3l5
cnVsZV07CiAgIGludCB5eWk7CisgIHVuc2lnbmVkIGxvbmcgaW50IHl5bG5vID0geXlybGluZVt5
eXJ1bGVdOwogICBZWUZQUklOVEYgKHN0ZGVyciwgIlJlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgJWQg
KGxpbmUgJWx1KTpcbiIsCi0gICAgICAgICAgICAgeXlydWxlIC0gMSwgeXlsbm8pOworCSAgICAg
eXlydWxlIC0gMSwgeXlsbm8pOwogICAvKiBUaGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLiAgKi8K
ICAgZm9yICh5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsrKQogICAgIHsKICAgICAgIFlZRlBS
SU5URiAoc3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsgMSk7Ci0gICAgICB5eV9zeW1ib2xfcHJp
bnQgKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgeXlzdG9zW3l5c3NwW3l5aSArIDEg
LSB5eW5yaHNdXSwKLSAgICAgICAgICAgICAgICAgICAgICAgJih5eXZzcFsoeXlpICsgMSkgLSAo
eXlucmhzKV0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCBjb250ZXh0KTsKKyAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNb
eXlydWxlXSArIHl5aV0sCisJCSAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkK
KwkJICAgICAgIAkJICAgICAgICwgY29udGV4dCk7CiAgICAgICBZWUZQUklOVEYgKHN0ZGVyciwg
IlxuIik7CiAgICAgfQogfQogCi0jIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkgICAgICAg
ICAgXAotZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5
ZGVidWcpICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeXlfcmVkdWNlX3ByaW50ICh5
eXNzcCwgeXl2c3AsIFJ1bGUsIGNvbnRleHQpOyBcCi19IHdoaWxlICgwKQorIyBkZWZpbmUgWVlf
UkVEVUNFX1BSSU5UKFJ1bGUpCQlcCitkbyB7CQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQlcCisg
ICAgeXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgUnVsZSwgY29udGV4dCk7IFwKK30gd2hpbGUgKFlZ
SUQgKDApKQogCiAvKiBOb256ZXJvIG1lYW5zIHByaW50IHBhcnNlIHRyYWNlLiAgSXQgaXMgbGVm
dCB1bmluaXRpYWxpemVkIHNvIHRoYXQKICAgIG11bHRpcGxlIHBhcnNlcnMgY2FuIGNvZXhpc3Qu
ICAqLwpAQCAtODA5LDcgKzg4Niw3IEBAIGludCB5eWRlYnVnOwogCiAKIC8qIFlZSU5JVERFUFRI
IC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAgKi8KLSNpZm5kZWYgWVlJ
TklUREVQVEgKKyNpZm5kZWYJWVlJTklUREVQVEgKICMgZGVmaW5lIFlZSU5JVERFUFRIIDIwMAog
I2VuZGlmCiAKQEAgLTgzMiw4ICs5MDksMTUgQEAgaW50IHl5ZGVidWc7CiAjICAgZGVmaW5lIHl5
c3RybGVuIHN0cmxlbgogIyAgZWxzZQogLyogUmV0dXJuIHRoZSBsZW5ndGggb2YgWVlTVFIuICAq
LworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAg
IHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKIHN0YXRpYyBZWVNJ
WkVfVAogeXlzdHJsZW4gKGNvbnN0IGNoYXIgKnl5c3RyKQorI2Vsc2UKK3N0YXRpYyBZWVNJWkVf
VAoreXlzdHJsZW4gKHl5c3RyKQorICAgIGNvbnN0IGNoYXIgKnl5c3RyOworI2VuZGlmCiB7CiAg
IFlZU0laRV9UIHl5bGVuOwogICBmb3IgKHl5bGVuID0gMDsgeXlzdHJbeXlsZW5dOyB5eWxlbisr
KQpAQCAtODQ5LDggKzkzMywxNiBAQCB5eXN0cmxlbiAoY29uc3QgY2hhciAqeXlzdHIpCiAjICBl
bHNlCiAvKiBDb3B5IFlZU1JDIHRvIFlZREVTVCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIHRo
ZSB0ZXJtaW5hdGluZyAnXDAnIGluCiAgICBZWURFU1QuICAqLworI2lmIChkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3Bs
dXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKIHN0YXRpYyBjaGFyICoKIHl5c3RwY3B5IChjaGFyICp5
eWRlc3QsIGNvbnN0IGNoYXIgKnl5c3JjKQorI2Vsc2UKK3N0YXRpYyBjaGFyICoKK3l5c3RwY3B5
ICh5eWRlc3QsIHl5c3JjKQorICAgIGNoYXIgKnl5ZGVzdDsKKyAgICBjb25zdCBjaGFyICp5eXNy
YzsKKyNlbmRpZgogewogICBjaGFyICp5eWQgPSB5eWRlc3Q7CiAgIGNvbnN0IGNoYXIgKnl5cyA9
IHl5c3JjOwpAQCAtODgwLDI3ICs5NzIsMjcgQEAgeXl0bmFtZXJyIChjaGFyICp5eXJlcywgY29u
c3QgY2hhciAqeXlzdHIpCiAgICAgICBjaGFyIGNvbnN0ICp5eXAgPSB5eXN0cjsKIAogICAgICAg
Zm9yICg7OykKLSAgICAgICAgc3dpdGNoICgqKyt5eXApCi0gICAgICAgICAgewotICAgICAgICAg
IGNhc2UgJ1wnJzoKLSAgICAgICAgICBjYXNlICcsJzoKLSAgICAgICAgICAgIGdvdG8gZG9fbm90
X3N0cmlwX3F1b3RlczsKLQotICAgICAgICAgIGNhc2UgJ1xcJzoKLSAgICAgICAgICAgIGlmICgq
Kyt5eXAgIT0gJ1xcJykKLSAgICAgICAgICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOwot
ICAgICAgICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KLSAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgaWYgKHl5cmVzKQotICAgICAgICAgICAgICB5eXJlc1t5eW5dID0gKnl5cDsKLSAg
ICAgICAgICAgIHl5bisrOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlICci
JzoKLSAgICAgICAgICAgIGlmICh5eXJlcykKLSAgICAgICAgICAgICAgeXlyZXNbeXluXSA9ICdc
MCc7Ci0gICAgICAgICAgICByZXR1cm4geXluOwotICAgICAgICAgIH0KKwlzd2l0Y2ggKCorK3l5
cCkKKwkgIHsKKwkgIGNhc2UgJ1wnJzoKKwkgIGNhc2UgJywnOgorCSAgICBnb3RvIGRvX25vdF9z
dHJpcF9xdW90ZXM7CisKKwkgIGNhc2UgJ1xcJzoKKwkgICAgaWYgKCorK3l5cCAhPSAnXFwnKQor
CSAgICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKKwkgICAgLyogRmFsbCB0aHJvdWdoLiAg
Ki8KKwkgIGRlZmF1bHQ6CisJICAgIGlmICh5eXJlcykKKwkgICAgICB5eXJlc1t5eW5dID0gKnl5
cDsKKwkgICAgeXluKys7CisJICAgIGJyZWFrOworCisJICBjYXNlICciJzoKKwkgICAgaWYgKHl5
cmVzKQorCSAgICAgIHl5cmVzW3l5bl0gPSAnXDAnOworCSAgICByZXR1cm4geXluOworCSAgfQog
ICAgIGRvX25vdF9zdHJpcF9xdW90ZXM6IDsKICAgICB9CiAKQEAgLTkyMywxMSArMTAxNSwxMSBA
QCBzdGF0aWMgaW50CiB5eXN5bnRheF9lcnJvciAoWVlTSVpFX1QgKnl5bXNnX2FsbG9jLCBjaGFy
ICoqeXltc2csCiAgICAgICAgICAgICAgICAgeXl0eXBlX2ludDE2ICp5eXNzcCwgaW50IHl5dG9r
ZW4pCiB7Ci0gIFlZU0laRV9UIHl5c2l6ZTAgPSB5eXRuYW1lcnIgKFlZX05VTExQVFIsIHl5dG5h
bWVbeXl0b2tlbl0pOworICBZWVNJWkVfVCB5eXNpemUwID0geXl0bmFtZXJyIChZWV9OVUxMLCB5
eXRuYW1lW3l5dG9rZW5dKTsKICAgWVlTSVpFX1QgeXlzaXplID0geXlzaXplMDsKICAgZW51bSB7
IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0gPSA1IH07CiAgIC8qIEludGVybmF0aW9uYWxp
emVkIGZvcm1hdCBzdHJpbmcuICovCi0gIGNvbnN0IGNoYXIgKnl5Zm9ybWF0ID0gWVlfTlVMTFBU
UjsKKyAgY29uc3QgY2hhciAqeXlmb3JtYXQgPSBZWV9OVUxMOwogICAvKiBBcmd1bWVudHMgb2Yg
eXlmb3JtYXQuICovCiAgIGNoYXIgY29uc3QgKnl5YXJnW1lZRVJST1JfVkVSQk9TRV9BUkdTX01B
WElNVU1dOwogICAvKiBOdW1iZXIgb2YgcmVwb3J0ZWQgdG9rZW5zIChvbmUgZm9yIHRoZSAidW5l
eHBlY3RlZCIsIG9uZSBwZXIKQEAgLTkzNSw2ICsxMDI3LDEwIEBAIHl5c3ludGF4X2Vycm9yIChZ
WVNJWkVfVCAqeXltc2dfYWxsb2MsIGNoYXIgKip5eW1zZywKICAgaW50IHl5Y291bnQgPSAwOwog
CiAgIC8qIFRoZXJlIGFyZSBtYW55IHBvc3NpYmlsaXRpZXMgaGVyZSB0byBjb25zaWRlcjoKKyAg
ICAgLSBBc3N1bWUgWVlGQUlMIGlzIG5vdCB1c2VkLiAgSXQncyB0b28gZmxhd2VkIHRvIGNvbnNp
ZGVyLiAgU2VlCisgICAgICAgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNv
bi1wYXRjaGVzLzIwMDktMTIvbXNnMDAwMjQuaHRtbD4KKyAgICAgICBmb3IgZGV0YWlscy4gIFlZ
RVJST1IgaXMgZmluZSBhcyBpdCBkb2VzIG5vdCBpbnZva2UgdGhpcworICAgICAgIGZ1bmN0aW9u
LgogICAgICAtIElmIHRoaXMgc3RhdGUgaXMgYSBjb25zaXN0ZW50IHN0YXRlIHdpdGggYSBkZWZh
dWx0IGFjdGlvbiwgdGhlbgogICAgICAgIHRoZSBvbmx5IHdheSB0aGlzIGZ1bmN0aW9uIHdhcyBp
bnZva2VkIGlzIGlmIHRoZSBkZWZhdWx0IGFjdGlvbgogICAgICAgIGlzIGFuIGVycm9yIGFjdGlv
bi4gIEluIHRoYXQgY2FzZSwgZG9uJ3QgY2hlY2sgZm9yIGV4cGVjdGVkCkBAIC05ODQsNyArMTA4
MCw3IEBAIHl5c3ludGF4X2Vycm9yIChZWVNJWkVfVCAqeXltc2dfYWxsb2MsIGNoYXIgKip5eW1z
ZywKICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB5eWFyZ1t5eWNvdW50Kytd
ID0geXl0bmFtZVt5eXhdOwogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIFlZ
U0laRV9UIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXRuYW1lcnIgKFlZX05VTExQVFIsIHl5dG5hbWVb
eXl4XSk7CisgICAgICAgICAgICAgICAgICBZWVNJWkVfVCB5eXNpemUxID0geXlzaXplICsgeXl0
bmFtZXJyIChZWV9OVUxMLCB5eXRuYW1lW3l5eF0pOwogICAgICAgICAgICAgICAgICAgaWYgKCEg
KHl5c2l6ZSA8PSB5eXNpemUxCiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgeXlzaXplMSA8
PSBZWVNUQUNLX0FMTE9DX01BWElNVU0pKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMjsK
QEAgLTEwNTEsMTggKzExNDcsMzMgQEAgeXlzeW50YXhfZXJyb3IgKFlZU0laRV9UICp5eW1zZ19h
bGxvYywgY2hhciAqKnl5bXNnLAogfCBSZWxlYXNlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB0byB0
aGlzIHN5bWJvbC4gIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCiAKKy8qQVJHU1VTRUQqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmlu
ZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5l
ZCBfTVNDX1ZFUikKIHN0YXRpYyB2b2lkCiB5eWRlc3RydWN0IChjb25zdCBjaGFyICp5eW1zZywg
aW50IHl5dHlwZSwgWVlTVFlQRSAqeXl2YWx1ZXAsIENvbnRleHQgKmNvbnRleHQpCisjZWxzZQor
c3RhdGljIHZvaWQKK3l5ZGVzdHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0
KQorICAgIGNvbnN0IGNoYXIgKnl5bXNnOworICAgIGludCB5eXR5cGU7CisgICAgWVlTVFlQRSAq
eXl2YWx1ZXA7CisgICAgQ29udGV4dCAqY29udGV4dDsKKyNlbmRpZgogewogICBZWVVTRSAoeXl2
YWx1ZXApOwogICBZWVVTRSAoY29udGV4dCk7CisKICAgaWYgKCF5eW1zZykKICAgICB5eW1zZyA9
ICJEZWxldGluZyI7CiAgIFlZX1NZTUJPTF9QUklOVCAoeXltc2csIHl5dHlwZSwgeXl2YWx1ZXAs
IHl5bG9jYXRpb25wKTsKIAotICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTgot
ICBZWVVTRSAoeXl0eXBlKTsKLSAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5ECisg
IHN3aXRjaCAoeXl0eXBlKQorICAgIHsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7
CisgICAgfQogfQogCiAKQEAgLTEwNzIsMTggKzExODMsNTYgQEAgeXlkZXN0cnVjdCAoY29uc3Qg
Y2hhciAqeXltc2csIGludCB5eXR5cGUsIFlZU1RZUEUgKnl5dmFsdWVwLCBDb250ZXh0ICpjb250
ZXh0KQogfCB5eXBhcnNlLiAgfAogYC0tLS0tLS0tLS0qLwogCisjaWZkZWYgWVlQQVJTRV9QQVJB
TQorI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAg
IHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK2ludAoreXlwYXJz
ZSAodm9pZCAqWVlQQVJTRV9QQVJBTSkKKyNlbHNlCitpbnQKK3l5cGFyc2UgKFlZUEFSU0VfUEFS
QU0pCisgICAgdm9pZCAqWVlQQVJTRV9QQVJBTTsKKyNlbmRpZgorI2Vsc2UgLyogISBZWVBBUlNF
X1BBUkFNICovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19f
IFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQogaW50
CiB5eXBhcnNlIChDb250ZXh0ICpjb250ZXh0KQorI2Vsc2UKK2ludAoreXlwYXJzZSAoY29udGV4
dCkKKyAgICBDb250ZXh0ICpjb250ZXh0OworI2VuZGlmCisjZW5kaWYKIHsKIC8qIFRoZSBsb29r
YWhlYWQgc3ltYm9sLiAgKi8KIGludCB5eWNoYXI7CiAKIAotLyogVGhlIHNlbWFudGljIHZhbHVl
IG9mIHRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8KKyNpZiBkZWZpbmVkIF9fR05VQ19fICYmIDQw
NyA8PSBfX0dOVUNfXyAqIDEwMCArIF9fR05VQ19NSU5PUl9fCisvKiBTdXBwcmVzcyBhbiBpbmNv
cnJlY3QgZGlhZ25vc3RpYyBhYm91dCB5eWx2YWwgYmVpbmcgdW5pbml0aWFsaXplZC4gICovCisj
IGRlZmluZSBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTiBcCisgICAgX1ByYWdt
YSAoIkdDQyBkaWFnbm9zdGljIHB1c2giKSBcCisgICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGlj
IGlnbm9yZWQgXCItV3VuaW5pdGlhbGl6ZWRcIiIpXAorICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25v
c3RpYyBpZ25vcmVkIFwiLVdtYXliZS11bmluaXRpYWxpemVkXCIiKQorIyBkZWZpbmUgWVlfSUdO
T1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5EIFwKKyAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0
aWMgcG9wIikKKyNlbHNlCiAvKiBEZWZhdWx0IHZhbHVlIHVzZWQgZm9yIGluaXRpYWxpemF0aW9u
LCBmb3IgcGFjaWZ5aW5nIG9sZGVyIEdDQ3MKICAgIG9yIG5vbi1HQ0MgY29tcGlsZXJzLiAgKi8K
LVlZX0lOSVRJQUxfVkFMVUUgKHN0YXRpYyBZWVNUWVBFIHl5dmFsX2RlZmF1bHQ7KQotWVlTVFlQ
RSB5eWx2YWwgWVlfSU5JVElBTF9WQUxVRSAoPSB5eXZhbF9kZWZhdWx0KTsKK3N0YXRpYyBZWVNU
WVBFIHl5dmFsX2RlZmF1bHQ7CisjIGRlZmluZSBZWV9JTklUSUFMX1ZBTFVFKFZhbHVlKSA9IFZh
bHVlCisjZW5kaWYKKyNpZm5kZWYgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4K
KyMgZGVmaW5lIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOCisjIGRlZmluZSBZ
WV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9FTkQKKyNlbmRpZgorI2lmbmRlZiBZWV9JTklU
SUFMX1ZBTFVFCisjIGRlZmluZSBZWV9JTklUSUFMX1ZBTFVFKFZhbHVlKSAvKiBOb3RoaW5nLiAq
LworI2VuZGlmCisKKy8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9va2FoZWFkIHN5bWJv
bC4gICovCitZWVNUWVBFIHl5bHZhbCBZWV9JTklUSUFMX1ZBTFVFKHl5dmFsX2RlZmF1bHQpOwog
CiAgICAgLyogTnVtYmVyIG9mIHN5bnRheCBlcnJvcnMgc28gZmFyLiAgKi8KICAgICBpbnQgeXlu
ZXJyczsKQEAgLTEwOTMsOCArMTI0Miw4IEBAIFlZU1RZUEUgeXlsdmFsIFlZX0lOSVRJQUxfVkFM
VUUgKD0geXl2YWxfZGVmYXVsdCk7CiAgICAgaW50IHl5ZXJyc3RhdHVzOwogCiAgICAgLyogVGhl
IHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6Ci0gICAgICAgJ3l5c3MnOiByZWxhdGVkIHRvIHN0YXRl
cy4KLSAgICAgICAneXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLgorICAgICAgIGB5
eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMuCisgICAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNlbWFu
dGljIHZhbHVlcy4KIAogICAgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhyb3VnaCBzZXBhcmF0
ZSBwb2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdwogICAgICAgIHRvIHJlYWxsb2NhdGUgdGhl
bSBlbHNld2hlcmUuICAqLwpAQCAtMTE2MiwyMyArMTMxMSwyMyBAQCBZWVNUWVBFIHl5bHZhbCBZ
WV9JTklUSUFMX1ZBTFVFICg9IHl5dmFsX2RlZmF1bHQpOwogCiAjaWZkZWYgeXlvdmVyZmxvdwog
ICAgICAgewotICAgICAgICAvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUg
c3RhY2suICBVc2UgY29waWVzIG9mCi0gICAgICAgICAgIHRoZXNlIHNvIHRoYXQgdGhlICYncyBk
b24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8KLSAgICAgICAgICAgbWVtb3J5LiAgKi8KLSAg
ICAgICAgWVlTVFlQRSAqeXl2czEgPSB5eXZzOwotICAgICAgICB5eXR5cGVfaW50MTYgKnl5c3Mx
ID0geXlzczsKLQotICAgICAgICAvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xs
b3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKLSAgICAgICAgICAgZGF0YSBpbiB1c2UgaW4gdGhhdCBz
dGFjaywgaW4gYnl0ZXMuICBUaGlzIHVzZWQgdG8gYmUgYQotICAgICAgICAgICBjb25kaXRpb25h
bCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0aGF0IG1pZ2h0Ci0gICAgICAg
ICAgIGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLwotICAgICAgICB5
eW92ZXJmbG93IChZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSwKLSAgICAgICAgICAgICAgICAgICAg
Jnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCksCi0gICAgICAgICAgICAgICAgICAgICZ5
eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAotICAgICAgICAgICAgICAgICAgICAmeXlz
dGFja3NpemUpOwotCi0gICAgICAgIHl5c3MgPSB5eXNzMTsKLSAgICAgICAgeXl2cyA9IHl5dnMx
OworCS8qIEdpdmUgdXNlciBhIGNoYW5jZSB0byByZWFsbG9jYXRlIHRoZSBzdGFjay4gIFVzZSBj
b3BpZXMgb2YKKwkgICB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJlYWwg
b25lcyBpbnRvCisJICAgbWVtb3J5LiAgKi8KKwlZWVNUWVBFICp5eXZzMSA9IHl5dnM7CisJeXl0
eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7CisKKwkvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVz
cyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKKwkgICBkYXRhIGluIHVzZSBpbiB0aGF0
IHN0YWNrLCBpbiBieXRlcy4gIFRoaXMgdXNlZCB0byBiZSBhCisJICAgY29uZGl0aW9uYWwgYXJv
dW5kIGp1c3QgdGhlIHR3byBleHRyYSBhcmdzLCBidXQgdGhhdCBtaWdodAorCSAgIGJlIHVuZGVm
aW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLworCXl5b3ZlcmZsb3cgKFlZXygibWVt
b3J5IGV4aGF1c3RlZCIpLAorCQkgICAgJnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCks
CisJCSAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKKwkJICAgICZ5eXN0YWNr
c2l6ZSk7CisKKwl5eXNzID0geXlzczE7CisJeXl2cyA9IHl5dnMxOwogICAgICAgfQogI2Vsc2Ug
Lyogbm8geXlvdmVyZmxvdyAqLwogIyBpZm5kZWYgWVlTVEFDS19SRUxPQ0FURQpAQCAtMTE4Niwy
MiArMTMzNSwyMiBAQCBZWVNUWVBFIHl5bHZhbCBZWV9JTklUSUFMX1ZBTFVFICg9IHl5dmFsX2Rl
ZmF1bHQpOwogIyBlbHNlCiAgICAgICAvKiBFeHRlbmQgdGhlIHN0YWNrIG91ciBvd24gd2F5LiAg
Ki8KICAgICAgIGlmIChZWU1BWERFUFRIIDw9IHl5c3RhY2tzaXplKQotICAgICAgICBnb3RvIHl5
ZXhoYXVzdGVkbGFiOworCWdvdG8geXlleGhhdXN0ZWRsYWI7CiAgICAgICB5eXN0YWNrc2l6ZSAq
PSAyOwogICAgICAgaWYgKFlZTUFYREVQVEggPCB5eXN0YWNrc2l6ZSkKLSAgICAgICAgeXlzdGFj
a3NpemUgPSBZWU1BWERFUFRIOworCXl5c3RhY2tzaXplID0gWVlNQVhERVBUSDsKIAogICAgICAg
ewotICAgICAgICB5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKLSAgICAgICAgdW5pb24geXlh
bGxvYyAqeXlwdHIgPQotICAgICAgICAgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tfQUxMT0Mg
KFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7Ci0gICAgICAgIGlmICghIHl5cHRyKQotICAg
ICAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7Ci0gICAgICAgIFlZU1RBQ0tfUkVMT0NBVEUgKHl5
c3NfYWxsb2MsIHl5c3MpOwotICAgICAgICBZWVNUQUNLX1JFTE9DQVRFICh5eXZzX2FsbG9jLCB5
eXZzKTsKKwl5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKKwl1bmlvbiB5eWFsbG9jICp5eXB0
ciA9CisJICAodW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5
eXN0YWNrc2l6ZSkpOworCWlmICghIHl5cHRyKQorCSAgZ290byB5eWV4aGF1c3RlZGxhYjsKKwlZ
WVNUQUNLX1JFTE9DQVRFICh5eXNzX2FsbG9jLCB5eXNzKTsKKwlZWVNUQUNLX1JFTE9DQVRFICh5
eXZzX2FsbG9jLCB5eXZzKTsKICMgIHVuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKLSAgICAgICAgaWYg
KHl5c3MxICE9IHl5c3NhKQotICAgICAgICAgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOworCWlmICh5
eXNzMSAhPSB5eXNzYSkKKwkgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOwogICAgICAgfQogIyBlbmRp
ZgogI2VuZGlmIC8qIG5vIHl5b3ZlcmZsb3cgKi8KQEAgLTEyMTAsMTAgKzEzNTksMTAgQEAgWVlT
VFlQRSB5eWx2YWwgWVlfSU5JVElBTF9WQUxVRSAoPSB5eXZhbF9kZWZhdWx0KTsKICAgICAgIHl5
dnNwID0geXl2cyArIHl5c2l6ZSAtIDE7CiAKICAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0
YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKLSAgICAgICAgICAgICAgICAgICh1bnNpZ25l
ZCBsb25nIGludCkgeXlzdGFja3NpemUpKTsKKwkJICAodW5zaWduZWQgbG9uZyBpbnQpIHl5c3Rh
Y2tzaXplKSk7CiAKICAgICAgIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQot
ICAgICAgICBZWUFCT1JUOworCVlZQUJPUlQ7CiAgICAgfQogCiAgIFlZRFBSSU5URiAoKHN0ZGVy
ciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7CkBAIC0xMjQyLDcgKzEzOTEsNyBA
QCB5eWJhY2t1cDoKICAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQogICAgIHsKICAgICAgIFlZRFBS
SU5URiAoKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIikpOwotICAgICAgeXljaGFyID0geXls
ZXggKCZ5eWx2YWwsIGNvbnRleHQpOworICAgICAgeXljaGFyID0gWVlMRVg7CiAgICAgfQogCiAg
IGlmICh5eWNoYXIgPD0gWVlFT0YpCkBAIC0xMzA3LDcgKzE0NTYsNyBAQCB5eXJlZHVjZToKICAg
eXlsZW4gPSB5eXIyW3l5bl07CiAKICAgLyogSWYgWVlMRU4gaXMgbm9uemVybywgaW1wbGVtZW50
IHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBhY3Rpb246Ci0gICAgICckJCA9ICQxJy4KKyAgICAg
YCQkID0gJDEnLgogCiAgICAgIE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZyBsaW5lIHNldHMgWVlW
QUwgdG8gZ2FyYmFnZS4KICAgICAgVGhpcyBiZWhhdmlvciBpcyB1bmRvY3VtZW50ZWQgYW5kIEJp
c29uCkBAIC0xMzIzLDIxNCArMTQ3MiwxOTAgQEAgeXlyZWR1Y2U6CiAgICAgICAgIGNhc2UgMjoK
IAogICAgIHsKLSAgICAgICAgKihjb250ZXh0LT5yZXN1bHQpID0gc3RhdGljX2Nhc3Q8aW50Pigo
eXl2c3BbMF0pKTsKKyAgICAgICAgKihjb250ZXh0LT5yZXN1bHQpID0gc3RhdGljX2Nhc3Q8aW50
PigoeXl2c3BbKDEpIC0gKDEpXSkpOwogICAgICAgICBZWUFDQ0VQVDsKICAgICB9Ci0KICAgICBi
cmVhazsKIAogICBjYXNlIDQ6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3BbLTJd
KSB8fCAoeXl2c3BbMF0pOworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIHx8
ICh5eXZzcFsoMykgLSAoMyldKTsKICAgICB9Ci0KICAgICBicmVhazsKIAogICBjYXNlIDU6CiAK
ICAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3BbLTJdKSAmJiAoeXl2c3BbMF0pOworICAg
ICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICYmICh5eXZzcFsoMykgLSAoMyldKTsK
ICAgICB9Ci0KICAgICBicmVhazsKIAogICBjYXNlIDY6CiAKICAgICB7Ci0gICAgICAgICh5eXZh
bCkgPSAoeXl2c3BbLTJdKSB8ICh5eXZzcFswXSk7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3Bb
KDEpIC0gKDMpXSkgfCAoeXl2c3BbKDMpIC0gKDMpXSk7CiAgICAgfQotCiAgICAgYnJlYWs7CiAK
ICAgY2FzZSA3OgogCiAgICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWy0yXSkgXiAoeXl2
c3BbMF0pOworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIF4gKHl5dnNwWygz
KSAtICgzKV0pOwogICAgIH0KLQogICAgIGJyZWFrOwogCiAgIGNhc2UgODoKIAogICAgIHsKLSAg
ICAgICAgKHl5dmFsKSA9ICh5eXZzcFstMl0pICYgKHl5dnNwWzBdKTsKKyAgICAgICAgKHl5dmFs
KSA9ICh5eXZzcFsoMSkgLSAoMyldKSAmICh5eXZzcFsoMykgLSAoMyldKTsKICAgICB9Ci0KICAg
ICBicmVhazsKIAogICBjYXNlIDk6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3Bb
LTJdKSAhPSAoeXl2c3BbMF0pOworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0p
ICE9ICh5eXZzcFsoMykgLSAoMyldKTsKICAgICB9Ci0KICAgICBicmVhazsKIAogICBjYXNlIDEw
OgogCiAgICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWy0yXSkgPT0gKHl5dnNwWzBdKTsK
KyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA9PSAoeXl2c3BbKDMpIC0gKDMp
XSk7CiAgICAgfQotCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMToKIAogICAgIHsKLSAgICAgICAg
KHl5dmFsKSA9ICh5eXZzcFstMl0pID49ICh5eXZzcFswXSk7CisgICAgICAgICh5eXZhbCkgPSAo
eXl2c3BbKDEpIC0gKDMpXSkgPj0gKHl5dnNwWygzKSAtICgzKV0pOwogICAgIH0KLQogICAgIGJy
ZWFrOwogCiAgIGNhc2UgMTI6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3BbLTJd
KSA8PSAoeXl2c3BbMF0pOworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIDw9
ICh5eXZzcFsoMykgLSAoMyldKTsKICAgICB9Ci0KICAgICBicmVhazsKIAogICBjYXNlIDEzOgog
CiAgICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWy0yXSkgPiAoeXl2c3BbMF0pOworICAg
ICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pID4gKHl5dnNwWygzKSAtICgzKV0pOwog
ICAgIH0KLQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQ6CiAKICAgICB7Ci0gICAgICAgICh5eXZh
bCkgPSAoeXl2c3BbLTJdKSA8ICh5eXZzcFswXSk7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3Bb
KDEpIC0gKDMpXSkgPCAoeXl2c3BbKDMpIC0gKDMpXSk7CiAgICAgfQotCiAgICAgYnJlYWs7CiAK
ICAgY2FzZSAxNToKIAogICAgIHsKLSAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFstMl0pID4+ICh5
eXZzcFswXSk7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPj4gKHl5dnNw
WygzKSAtICgzKV0pOwogICAgIH0KLQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY6CiAKICAgICB7
Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3BbLTJdKSA8PCAoeXl2c3BbMF0pOworICAgICAgICAo
eXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIDw8ICh5eXZzcFsoMykgLSAoMyldKTsKICAgICB9
Ci0KICAgICBicmVhazsKIAogICBjYXNlIDE3OgogCiAgICAgewotICAgICAgICAoeXl2YWwpID0g
KHl5dnNwWy0yXSkgLSAoeXl2c3BbMF0pOworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAt
ICgzKV0pIC0gKHl5dnNwWygzKSAtICgzKV0pOwogICAgIH0KLQogICAgIGJyZWFrOwogCiAgIGNh
c2UgMTg6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3BbLTJdKSArICh5eXZzcFsw
XSk7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgKyAoeXl2c3BbKDMpIC0g
KDMpXSk7CiAgICAgfQotCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOToKIAogICAgIHsKLSAgICAg
ICAgaWYgKCh5eXZzcFswXSkgPT0gMCkgeworICAgICAgICBpZiAoKHl5dnNwWygzKSAtICgzKV0p
ID09IDApIHsKICAgICAgICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBzdHJlYW07Ci0gICAgICAg
ICAgICBzdHJlYW0gPDwgKHl5dnNwWy0yXSkgPDwgIiAlICIgPDwgKHl5dnNwWzBdKTsKKyAgICAg
ICAgICAgIHN0cmVhbSA8PCAoeXl2c3BbKDEpIC0gKDMpXSkgPDwgIiAlICIgPDwgKHl5dnNwWygz
KSAtICgzKV0pOwogICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsK
LSAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNz
OjpESVZJU0lPTl9CWV9aRVJPLAorICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJl
cG9ydChwcDo6RGlhZ25vc3RpY3M6OlBQX0RJVklTSU9OX0JZX1pFUk8sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKICAg
ICAgICAgICAgIFlZQUJPUlQ7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAoeXl2YWwp
ID0gKHl5dnNwWy0yXSkgJSAoeXl2c3BbMF0pOworICAgICAgICAgICAgKHl5dmFsKSA9ICh5eXZz
cFsoMSkgLSAoMyldKSAlICh5eXZzcFsoMykgLSAoMyldKTsKICAgICAgICAgfQogICAgIH0KLQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMjA6CiAKICAgICB7Ci0gICAgICAgIGlmICgoeXl2c3BbMF0p
ID09IDApIHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMykgLSAoMyldKSA9PSAwKSB7CiAgICAgICAg
ICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyZWFtOwotICAgICAgICAgICAgc3RyZWFtIDw8ICh5
eXZzcFstMl0pIDw8ICIgLyAiIDw8ICh5eXZzcFswXSk7CisgICAgICAgICAgICBzdHJlYW0gPDwg
KHl5dnNwWygxKSAtICgzKV0pIDw8ICIgLyAiIDw8ICh5eXZzcFsoMykgLSAoMyldKTsKICAgICAg
ICAgICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBzdHJlYW0uc3RyKCk7Ci0gICAgICAgICAgICBjb250
ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RElWSVNJT05fQllfWkVS
TywKKyAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0
aWNzOjpQUF9ESVZJU0lPTl9CWV9aRVJPLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHQuY19zdHIoKSk7CiAgICAgICAgICAgICBZWUFCT1JU
OwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFstMl0pIC8g
KHl5dnNwWzBdKTsKKyAgICAgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgLyAo
eXl2c3BbKDMpIC0gKDMpXSk7CiAgICAgICAgIH0KICAgICB9Ci0KICAgICBicmVhazsKIAogICBj
YXNlIDIxOgogCiAgICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWy0yXSkgKiAoeXl2c3Bb
MF0pOworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICogKHl5dnNwWygzKSAt
ICgzKV0pOwogICAgIH0KLQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjI6CiAKICAgICB7Ci0gICAg
ICAgICh5eXZhbCkgPSAhICh5eXZzcFswXSk7CisgICAgICAgICh5eXZhbCkgPSAhICh5eXZzcFso
MikgLSAoMildKTsKICAgICB9Ci0KICAgICBicmVhazsKIAogICBjYXNlIDIzOgogCiAgICAgewot
ICAgICAgICAoeXl2YWwpID0gfiAoeXl2c3BbMF0pOworICAgICAgICAoeXl2YWwpID0gfiAoeXl2
c3BbKDIpIC0gKDIpXSk7CiAgICAgfQotCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyNDoKIAogICAg
IHsKLSAgICAgICAgKHl5dmFsKSA9IC0gKHl5dnNwWzBdKTsKKyAgICAgICAgKHl5dmFsKSA9IC0g
KHl5dnNwWygyKSAtICgyKV0pOwogICAgIH0KLQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjU6CiAK
ICAgICB7Ci0gICAgICAgICh5eXZhbCkgPSArICh5eXZzcFswXSk7CisgICAgICAgICh5eXZhbCkg
PSArICh5eXZzcFsoMikgLSAoMildKTsKICAgICB9Ci0KICAgICBicmVhazsKIAogICBjYXNlIDI2
OgogCiAgICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWy0xXSk7CisgICAgICAgICh5eXZh
bCkgPSAoeXl2c3BbKDIpIC0gKDMpXSk7CiAgICAgfQotCiAgICAgYnJlYWs7CiAKIApAQCAtMTU1
Niw3ICsxNjgxLDcgQEAgeXlyZWR1Y2U6CiAKICAgKisreXl2c3AgPSB5eXZhbDsKIAotICAvKiBO
b3cgJ3NoaWZ0JyB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24uICBEZXRlcm1pbmUgd2hhdCBz
dGF0ZQorICAvKiBOb3cgYHNoaWZ0JyB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24uICBEZXRl
cm1pbmUgd2hhdCBzdGF0ZQogICAgICB0aGF0IGdvZXMgdG8sIGJhc2VkIG9uIHRoZSBzdGF0ZSB3
ZSBwb3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUKICAgICAgbnVtYmVyIHJlZHVjZWQgYnkuICAq
LwogCkBAIC0xNTcxLDkgKzE2OTYsOSBAQCB5eXJlZHVjZToKICAgZ290byB5eW5ld3N0YXRlOwog
CiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZXJybGFi
IC0tIGhlcmUgb24gZGV0ZWN0aW5nIGVycm9yLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LgorfCB5eWVycmxhYiAtLSBoZXJlIG9uIGRldGVjdGluZyBlcnJvciB8CitgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHl5ZXJybGFiOgogICAvKiBNYWtlIHN1cmUgd2Ug
aGF2ZSBsYXRlc3QgbG9va2FoZWFkIHRyYW5zbGF0aW9uLiAgU2VlIGNvbW1lbnRzIGF0CiAgICAg
IHVzZXIgc2VtYW50aWMgYWN0aW9ucyBmb3Igd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LiAgKi8KQEAg
LTE2MjQsMjAgKzE3NDksMjAgQEAgeXllcnJsYWI6CiAgIGlmICh5eWVycnN0YXR1cyA9PSAzKQog
ICAgIHsKICAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rYWhl
YWQgdG9rZW4gYWZ0ZXIgYW4KLSAgICAgICAgIGVycm9yLCBkaXNjYXJkIGl0LiAgKi8KKwkgZXJy
b3IsIGRpc2NhcmQgaXQuICAqLwogCiAgICAgICBpZiAoeXljaGFyIDw9IFlZRU9GKQotICAgICAg
ICB7Ci0gICAgICAgICAgLyogUmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0LiAgKi8K
LSAgICAgICAgICBpZiAoeXljaGFyID09IFlZRU9GKQotICAgICAgICAgICAgWVlBQk9SVDsKLSAg
ICAgICAgfQorCXsKKwkgIC8qIFJldHVybiBmYWlsdXJlIGlmIGF0IGVuZCBvZiBpbnB1dC4gICov
CisJICBpZiAoeXljaGFyID09IFlZRU9GKQorCSAgICBZWUFCT1JUOworCX0KICAgICAgIGVsc2UK
LSAgICAgICAgewotICAgICAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogZGlzY2FyZGluZyIsCi0g
ICAgICAgICAgICAgICAgICAgICAgeXl0b2tlbiwgJnl5bHZhbCwgY29udGV4dCk7Ci0gICAgICAg
ICAgeXljaGFyID0gWVlFTVBUWTsKLSAgICAgICAgfQorCXsKKwkgIHl5ZGVzdHJ1Y3QgKCJFcnJv
cjogZGlzY2FyZGluZyIsCisJCSAgICAgIHl5dG9rZW4sICZ5eWx2YWwsIGNvbnRleHQpOworCSAg
eXljaGFyID0gWVlFTVBUWTsKKwl9CiAgICAgfQogCiAgIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1
c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRoZSBlcnJvcgpAQCAtMTY1Niw3ICsx
NzgxLDcgQEAgeXllcnJvcmxhYjoKICAgaWYgKC8qQ09OU1RDT05EKi8gMCkKICAgICAgZ290byB5
eWVycm9ybGFiOwogCi0gIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxl
IHdob3NlIGFjdGlvbiB0cmlnZ2VyZWQKKyAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMg
b2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAogICAgICB0aGlzIFlZRVJST1IuICAq
LwogICBZWVBPUFNUQUNLICh5eWxlbik7CiAgIHl5bGVuID0gMDsKQEAgLTE2NjksMjkgKzE3OTQs
MjkgQEAgeXllcnJvcmxhYjoKIHwgeXllcnJsYWIxIC0tIGNvbW1vbiBjb2RlIGZvciBib3RoIHN5
bnRheCBlcnJvciBhbmQgWVlFUlJPUi4gIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHl5ZXJybGFiMToKLSAgeXllcnJz
dGF0dXMgPSAzOyAgICAgIC8qIEVhY2ggcmVhbCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVudHMgdGhp
cy4gICovCisgIHl5ZXJyc3RhdHVzID0gMzsJLyogRWFjaCByZWFsIHRva2VuIHNoaWZ0ZWQgZGVj
cmVtZW50cyB0aGlzLiAgKi8KIAogICBmb3IgKDs7KQogICAgIHsKICAgICAgIHl5biA9IHl5cGFj
dFt5eXN0YXRlXTsKICAgICAgIGlmICgheXlwYWN0X3ZhbHVlX2lzX2RlZmF1bHQgKHl5bikpCi0g
ICAgICAgIHsKLSAgICAgICAgICB5eW4gKz0gWVlURVJST1I7Ci0gICAgICAgICAgaWYgKDAgPD0g
eXluICYmIHl5biA8PSBZWUxBU1QgJiYgeXljaGVja1t5eW5dID09IFlZVEVSUk9SKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICB5eW4gPSB5eXRhYmxlW3l5bl07Ci0gICAgICAgICAgICAg
IGlmICgwIDwgeXluKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICB9CisJeworCSAgeXluICs9IFlZVEVSUk9SOworCSAgaWYgKDAgPD0geXluICYmIHl5biA8
PSBZWUxBU1QgJiYgeXljaGVja1t5eW5dID09IFlZVEVSUk9SKQorCSAgICB7CisJICAgICAgeXlu
ID0geXl0YWJsZVt5eW5dOworCSAgICAgIGlmICgwIDwgeXluKQorCQlicmVhazsKKwkgICAgfQor
CX0KIAogICAgICAgLyogUG9wIHRoZSBjdXJyZW50IHN0YXRlIGJlY2F1c2UgaXQgY2Fubm90IGhh
bmRsZSB0aGUgZXJyb3IgdG9rZW4uICAqLwogICAgICAgaWYgKHl5c3NwID09IHl5c3MpCi0gICAg
ICAgIFlZQUJPUlQ7CisJWVlBQk9SVDsKIAogCiAgICAgICB5eWRlc3RydWN0ICgiRXJyb3I6IHBv
cHBpbmciLAotICAgICAgICAgICAgICAgICAgeXlzdG9zW3l5c3RhdGVdLCB5eXZzcCwgY29udGV4
dCk7CisJCSAgeXlzdG9zW3l5c3RhdGVdLCB5eXZzcCwgY29udGV4dCk7CiAgICAgICBZWVBPUFNU
QUNLICgxKTsKICAgICAgIHl5c3RhdGUgPSAqeXlzc3A7CiAgICAgICBZWV9TVEFDS19QUklOVCAo
eXlzcywgeXlzc3ApOwpAQCAtMTc0MiwxNCArMTg2NywxNCBAQCB5eXJldHVybjoKICAgICAgIHl5
ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVhZCIsCiAgICAgICAgICAgICAg
ICAgICB5eXRva2VuLCAmeXlsdmFsLCBjb250ZXh0KTsKICAgICB9Ci0gIC8qIERvIG5vdCByZWNs
YWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdob3NlIGFjdGlvbiB0cmlnZ2VyZWQKKyAgLyog
RG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdn
ZXJlZAogICAgICB0aGlzIFlZQUJPUlQgb3IgWVlBQ0NFUFQuICAqLwogICBZWVBPUFNUQUNLICh5
eWxlbik7CiAgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CiAgIHdoaWxlICh5eXNzcCAh
PSB5eXNzKQogICAgIHsKICAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBwb3BwaW5nIiwKLSAg
ICAgICAgICAgICAgICAgIHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCwgY29udGV4dCk7CisJCSAgeXlz
dG9zWyp5eXNzcF0sIHl5dnNwLCBjb250ZXh0KTsKICAgICAgIFlZUE9QU1RBQ0sgKDEpOwogICAg
IH0KICNpZm5kZWYgeXlvdmVyZmxvdwpAQCAtMTc2MCwxMSArMTg4NSwxNCBAQCB5eXJldHVybjoK
ICAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQogICAgIFlZU1RBQ0tfRlJFRSAoeXltc2cpOwogI2Vu
ZGlmCi0gIHJldHVybiB5eXJlc3VsdDsKKyAgLyogTWFrZSBzdXJlIFlZSUQgaXMgdXNlZC4gICov
CisgIHJldHVybiBZWUlEICh5eXJlc3VsdCk7CiB9CiAKIAogCisKKwogaW50IHl5bGV4KFlZU1RZ
UEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KQogewogICAgIGludCB0eXBlID0gMDsKQEAgLTE3
NzcsNyArMTkwNSw3IEBAIGludCB5eWxleChZWVNUWVBFKiBsdmFscCwgQ29udGV4dCogY29udGV4
dCkKICAgICAgICAgdW5zaWduZWQgaW50IHZhbCA9IDA7CiAgICAgICAgIGlmICghdG9rZW4tPnVW
YWx1ZSgmdmFsKSkKICAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3Mt
PnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OklOVEVHRVJfT1ZFUkZMT1csCisgICAgICAgICAgICBj
b250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6UFBfSU5URUdFUl9P
VkVSRkxPVywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4t
PmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgIH0KICAgICAgICAgKmx2YWxwID0gc3Rh
dGljX2Nhc3Q8WVlTVFlQRT4odmFsKTsKQEAgLTE4MTgsNyArMTk0Niw3IEBAIGludCB5eWxleChZ
WVNUWVBFKiBsdmFscCwgQ29udGV4dCogY29udGV4dCkKIAogdm9pZCB5eWVycm9yKENvbnRleHQq
IGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikKIHsKLSAgICBjb250ZXh0LT5kaWFnbm9zdGlj
cy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJRF9FWFBSRVNTSU9OLAorICAgIGNvbnRl
eHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpQUF9JTlZBTElEX0VYUFJF
U1NJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+
bG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24pOwogfQpA
QCAtMTg0NiwxMiArMTk3NCwxMiBAQCBib29sIEV4cHJlc3Npb25QYXJzZXI6OnBhcnNlKFRva2Vu
KiB0b2tlbiwgaW50KiByZXN1bHQpCiAgICAgICAgIGJyZWFrOwogCiAgICAgICBjYXNlIDI6Ci0g
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpPVVRfT0ZfTUVNT1JZLCB0
b2tlbi0+bG9jYXRpb24sICIiKTsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25v
c3RpY3M6OlBQX09VVF9PRl9NRU1PUlksIHRva2VuLT5sb2NhdGlvbiwgIiIpOwogICAgICAgICBi
cmVhazsKIAogICAgICAgZGVmYXVsdDoKICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKLSAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVEVSTkFMX0VSUk9SLCB0b2tlbi0+
bG9jYXRpb24sICIiKTsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OlBQX0lOVEVSTkFMX0VSUk9SLCB0b2tlbi0+bG9jYXRpb24sICIiKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL01hY3JvRXhwYW5kZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyb0V4cGFuZGVyLmNwcAppbmRleCAxMTE2
YzUxNmZmNjI2ODQxZGZkMzE5OTM1YjkzODJlMDhkYzIzNjYzLi5iNzg5MjYwYWY5MTYzYTdiZGJk
OGI0NTRiYjNmZDQ4NjhhNGUzMGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL01hY3JvRXhwYW5kZXIuY3BwCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvTWFjcm9FeHBhbmRl
ci5jcHAKQEAgLTI1NCw3ICsyNTQsNyBAQCBib29sIE1hY3JvRXhwYW5kZXI6OmNvbGxlY3RNYWNy
b0FyZ3MoY29uc3QgTWFjcm8mIG1hY3JvLAogCiAgICAgICAgIGlmICh0b2tlbi50eXBlID09IFRv
a2VuOjpMQVNUKQogICAgICAgICB7Ci0gICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6TUFDUk9fVU5URVJNSU5BVEVEX0lOVk9DQVRJT04sCisgICAgICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfTUFDUk9fVU5URVJNSU5BVEVEX0lO
Vk9DQVRJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyLmxv
Y2F0aW9uLCBpZGVudGlmaWVyLnRleHQpOwogICAgICAgICAgICAgLy8gRG8gbm90IGxvc2UgRU9G
IHRva2VuLgogICAgICAgICAgICAgdW5nZXRUb2tlbih0b2tlbik7CkBAIC0zMDIsOCArMzAyLDgg
QEAgYm9vbCBNYWNyb0V4cGFuZGVyOjpjb2xsZWN0TWFjcm9BcmdzKGNvbnN0IE1hY3JvJiBtYWNy
bywKICAgICBpZiAoYXJncy0+c2l6ZSgpICE9IHBhcmFtcy5zaXplKCkpCiAgICAgewogICAgICAg
ICBEaWFnbm9zdGljczo6SUQgaWQgPSBhcmdzLT5zaXplKCkgPCBtYWNyby5wYXJhbWV0ZXJzLnNp
emUoKSA/Ci0gICAgICAgICAgICBEaWFnbm9zdGljczo6TUFDUk9fVE9PX0ZFV19BUkdTIDoKLSAg
ICAgICAgICAgIERpYWdub3N0aWNzOjpNQUNST19UT09fTUFOWV9BUkdTOworICAgICAgICAgICAg
RGlhZ25vc3RpY3M6OlBQX01BQ1JPX1RPT19GRVdfQVJHUyA6CisgICAgICAgICAgICBEaWFnbm9z
dGljczo6UFBfTUFDUk9fVE9PX01BTllfQVJHUzsKICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBv
cnQoaWQsIGlkZW50aWZpZXIubG9jYXRpb24sIGlkZW50aWZpZXIudGV4dCk7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1ByZXByb2Nlc3Nvci5jcHAgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1ByZXByb2Nlc3Nvci5jcHAKaW5k
ZXggYjYxNWM4NWRjZTA0YWM4MWI2MWU1MjJhMDViZjJhYWViZjlkOTA5My4uNTgwZmZiYTQ1OWY5
Y2FmYzE3NDI4YjMzYjlkMGFhYTljOTUzYTdlZSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuY3BwCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJv
Y2Vzc29yLmNwcApAQCAtMTAxLDExICsxMDEsMTEgQEAgdm9pZCBQcmVwcm9jZXNzb3I6OmxleChU
b2tlbiogdG9rZW4pCiAgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgY2FzZSBUb2tlbjo6UFBfTlVNQkVSOgotICAgICAgICAgICAgbUltcGwt
PmRpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfTlVNQkVSLAorICAgICAg
ICAgICAgbUltcGwtPmRpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX0lOVkFMSURf
TlVNQkVSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxv
Y2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNl
IFRva2VuOjpQUF9PVEhFUjoKLSAgICAgICAgICAgIG1JbXBsLT5kaWFnbm9zdGljcy0+cmVwb3J0
KERpYWdub3N0aWNzOjpJTlZBTElEX0NIQVJBQ1RFUiwKKyAgICAgICAgICAgIG1JbXBsLT5kaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9JTlZBTElEX0NIQVJBQ1RFUiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4t
PnRleHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgZGVmYXVsdDoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9r
ZW5pemVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvVG9rZW5pemVyLmNwcAppbmRleCAzNjNhMzdiMzY1YTY0OTc2ZDkwZGI2ZTBmNjE5YmQz
OTI4YWFiMDc3Li5kZDRlZjM4MTgwNTE1ZDk1ZWU4MzYyMDAxMzdiNGRhMzIxMGIyOWNhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L1Rva2VuaXplci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuY3BwCkBAIC02ODAsNiArNjgwLDE4IEBAIHN0YXRpYyB2
b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciAqLHl5Y29uc3QgY2hhciAqLGludCAseXlzY2FuX3Qg
eXlzY2FubmVyKTsKIHN0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqICx5
eXNjYW5fdCB5eXNjYW5uZXIpOwogI2VuZGlmCiAKKyNkZWZpbmUgWVlfTk9fSU5QVVQKKworI2lm
bmRlZiBZWV9OT19JTlBVVAorCisjaWZkZWYgX19jcGx1c3BsdXMKK3N0YXRpYyBpbnQgeXlpbnB1
dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZWxzZQorc3RhdGljIGludCBpbnB1dCAoeXlzY2Fu
X3QgeXlzY2FubmVyICk7CisjZW5kaWYKKworI2VuZGlmCisKIC8qIEFtb3VudCBvZiBzdHVmZiB0
byBzbHVycCB1cCB3aXRoIGVhY2ggcmVhZC4gKi8KICNpZm5kZWYgWVlfUkVBRF9CVUZfU0laRQog
I2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDgxOTIKQEAgLTExMzksNyArMTE1MSw3IEBAIGNhc2Ug
WVlfU1RBVEVfRU9GKENPTU1FTlQpOgogCiAgICAgaWYgKFlZX1NUQVJUID09IENPTU1FTlQpCiAg
ICAgewotICAgICAgICB5eWV4dHJhLT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGlj
czo6RU9GX0lOX0NPTU1FTlQsCisgICAgICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQo
cHA6OkRpYWdub3N0aWNzOjpQUF9FT0ZfSU5fQ09NTUVOVCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcDo6U291cmNlTG9jYXRpb24oeXlmaWxlbm8sIHl5bGluZW5vKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIik7CiAgICAgfQpAQCAtMTQ4
MCw2ICsxNDkyLDgxIEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5
eXNjYW5uZXIpCiAJcmV0dXJuIHl5X2lzX2phbSA/IDAgOiB5eV9jdXJyZW50X3N0YXRlOwogfQog
CisjaWZuZGVmIFlZX05PX0lOUFVUCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBzdGF0aWMgaW50
IHl5aW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lcikKKyNlbHNlCisgICAgc3RhdGljIGludCBpbnB1
dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKKyNlbmRpZgorCit7CisJaW50IGM7CisgICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJKnl5Zy0+
eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCisJaWYgKCAqeXlnLT55eV9jX2J1Zl9w
ID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCisJCXsKKwkJLyogeXlfY19idWZfcCBub3cgcG9p
bnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2FudCB0byByZXR1cm4uCisJCSAqIElmIHRoaXMgb2Nj
dXJzICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFjdGVycywgdGhlbiBpdCdzIGEKKwkJICogdmFsaWQg
TlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KKwkJICov
CisJCWlmICggeXlnLT55eV9jX2J1Zl9wIDwgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
Y2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQorCQkJLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAq
LworCQkJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7CisKKwkJZWxzZQorCQkJeyAvKiBuZWVkIG1v
cmUgaW5wdXQgKi8KKwkJCXl5X3NpemVfdCBvZmZzZXQgPSB5eWctPnl5X2NfYnVmX3AgLSB5eWct
Pnl5dGV4dF9wdHI7CisJCQkrK3l5Zy0+eXlfY19idWZfcDsKKworCQkJc3dpdGNoICggeXlfZ2V0
X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCisJCQkJeworCQkJCWNhc2UgRU9CX0FDVF9MQVNU
X01BVENIOgorCQkJCQkvKiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB5eV9nX25fYigpCisJCQkJCSAq
IHNlZXMgdGhhdCB3ZSd2ZSBhY2N1bXVsYXRlZCBhCisJCQkJCSAqIHRva2VuIGFuZCBmbGFncyB0
aGF0IHdlIG5lZWQgdG8KKwkJCQkJICogdHJ5IG1hdGNoaW5nIHRoZSB0b2tlbiBiZWZvcmUKKwkJ
CQkJICogcHJvY2VlZGluZy4gIEJ1dCBmb3IgaW5wdXQoKSwKKwkJCQkJICogdGhlcmUncyBubyBt
YXRjaGluZyB0byBjb25zaWRlci4KKwkJCQkJICogU28gY29udmVydCB0aGUgRU9CX0FDVF9MQVNU
X01BVENICisJCQkJCSAqIHRvIEVPQl9BQ1RfRU5EX09GX0ZJTEUuCisJCQkJCSAqLworCisJCQkJ
CS8qIFJlc2V0IGJ1ZmZlciBzdGF0dXMuICovCisJCQkJCXBwcmVzdGFydCh5eWluICx5eXNjYW5u
ZXIpOworCisJCQkJCS8qRkFMTFRIUk9VR0gqLworCisJCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9G
SUxFOgorCQkJCQl7CisJCQkJCWlmICggcHB3cmFwKHl5c2Nhbm5lciApICkKKwkJCQkJCXJldHVy
biBFT0Y7CisKKwkJCQkJaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkK
KwkJCQkJCVlZX05FV19GSUxFOworI2lmZGVmIF9fY3BsdXNwbHVzCisJCQkJCXJldHVybiB5eWlu
cHV0KHl5c2Nhbm5lcik7CisjZWxzZQorCQkJCQlyZXR1cm4gaW5wdXQoeXlzY2FubmVyKTsKKyNl
bmRpZgorCQkJCQl9CisKKwkJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJCQkJeXln
LT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgb2Zmc2V0OworCQkJCQlicmVhazsKKwkJ
CQl9CisJCQl9CisJCX0KKworCWMgPSAqKHVuc2lnbmVkIGNoYXIgKikgeXlnLT55eV9jX2J1Zl9w
OwkvKiBjYXN0IGZvciA4LWJpdCBjaGFyJ3MgKi8KKwkqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsJ
LyogcHJlc2VydmUgeXl0ZXh0ICovCisJeXlnLT55eV9ob2xkX2NoYXIgPSAqKyt5eWctPnl5X2Nf
YnVmX3A7CisKKwlyZXR1cm4gYzsKK30KKyNlbmRpZgkvKiBpZm5kZWYgWVlfTk9fSU5QVVQgKi8K
KwogLyoqIEltbWVkaWF0ZWx5IHN3aXRjaCB0byBhIGRpZmZlcmVudCBpbnB1dCBzdHJlYW0uCiAg
KiBAcGFyYW0gaW5wdXRfZmlsZSBBIHJlYWRhYmxlIHN0cmVhbS4KICAqIEBwYXJhbSB5eXNjYW5u
ZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgpAQCAtMjI1Miw3ICsyMzM5LDcgQEAgdm9pZCBUb2tlbml6
ZXI6OmxleChUb2tlbiogdG9rZW4pCiAgICAgdG9rZW4tPnR5cGUgPSBwcGxleCgmdG9rZW4tPnRl
eHQsJnRva2VuLT5sb2NhdGlvbixtSGFuZGxlKTsKICAgICBpZiAodG9rZW4tPnRleHQuc2l6ZSgp
ID4gbU1heFRva2VuTGVuZ3RoKQogICAgIHsKLSAgICAgICAgbUNvbnRleHQuZGlhZ25vc3RpY3Mt
PnJlcG9ydChEaWFnbm9zdGljczo6VE9LRU5fVE9PX0xPTkcsCisgICAgICAgIG1Db250ZXh0LmRp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX1RPS0VOX1RPT19MT05HLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRl
eHQpOwogICAgICAgICB0b2tlbi0+dGV4dC5lcmFzZShtTWF4VG9rZW5MZW5ndGgpOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvVG9rZW5pemVyLmwgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL1Rva2VuaXplci5sCmluZGV4IDkwYzQyYzg3MGJlMDAwZTlhNTczZGMxOTFk
NDhiY2RmNzBlY2Q2ZTEuLjAxZjAxNzdiNmMyNjNlMjI3YTk1NDBkMzJiZGE3NDZkMDdmNzljZjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvVG9rZW5pemVyLmwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIubApAQCAtMzMsMTIgKzMzLDYgQEAgSUYgWU9VIE1P
RElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNoLgog
I3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3Npbmctbm9yZXR1cm4iCiAjZW5k
aWYKIAotI2lmIGRlZmluZWQoX19jbGFuZ19fKQotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1
c2gKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vua25vd24tcHJhZ21hcyIK
LSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtcmVnaXN0ZXIi
Ci0jZW5kaWYKLQogdHlwZWRlZiBzdGQ6OnN0cmluZyBZWVNUWVBFOwogdHlwZWRlZiBwcDo6U291
cmNlTG9jYXRpb24gWVlMVFlQRTsKIApAQCAtMjcxLDEwICsyNjUsNiBAQCBGUkFDVElPTkFMX0NP
TlNUQU5UICAoe0RJR0lUfSoiLiJ7RElHSVR9Kyl8KHtESUdJVH0rIi4iKQogCiAlJQogCi0jaWYg
ZGVmaW5lZChfX2NsYW5nX18pCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCi0jZW5kaWYK
LQogbmFtZXNwYWNlIHBwIHsKIAogVG9rZW5pemVyOjpUb2tlbml6ZXIoRGlhZ25vc3RpY3MqIGRp
YWdub3N0aWNzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzb3IudmN4cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzc29yLnZjeHByb2oKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhODUzMGI1MDc0YTE3M2RkMDA4NzQyYzM4MzBk
ZTZjMWU4NDIzOGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVw
cm9jZXNzb3IudmN4cHJvagorKysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi3vu788P3ht
bCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTxQcm9qZWN0IERlZmF1bHRUYXJn
ZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNy
b3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPg0KLSAgPEl0ZW1Hcm91cCBMYWJlbD0i
UHJvamVjdENvbmZpZ3VyYXRpb25zIj4NCi0gICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1
ZGU9IkRlYnVnfFdpbjMyIj4NCi0gICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJh
dGlvbj4NCi0gICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPg0KLSAgICA8L1Byb2plY3RD
b25maWd1cmF0aW9uPg0KLSAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8
eDY0Ij4NCi0gICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4NCi0gICAg
ICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4NCi0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4N
Ci0gICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPg0KLSAg
ICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+DQotICAgICAgPFBsYXRm
b3JtPldpbjMyPC9QbGF0Zm9ybT4NCi0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCi0gICAg
PFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4NCi0gICAgICA8Q29u
ZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPg0KLSAgICAgIDxQbGF0Zm9ybT54NjQ8
L1BsYXRmb3JtPg0KLSAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KLSAgPC9JdGVtR3JvdXA+
DQotICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+DQotICAgIDxQcm9qZWN0R3VpZD57
RkJFMzJERjMtMEZCMC00RjJGLUE0MjQtMkMyMUJEN0JDMzI1fTwvUHJvamVjdEd1aWQ+DQotICAg
IDxSb290TmFtZXNwYWNlPnByZXByb2Nlc3NvcjwvUm9vdE5hbWVzcGFjZT4NCi0gICAgPEtleXdv
cmQ+V2luMzJQcm9qPC9LZXl3b3JkPg0KLSAgPC9Qcm9wZXJ0eUdyb3VwPg0KLSAgPEltcG9ydCBQ
cm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4N
Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9y
bSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCi0gICAgPENvbmZp
Z3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KLSAgICA8Q2hh
cmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4NCi0gICAgPFdob2xlUHJvZ3JhbU9wdGlt
aXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+DQotICA8L1Byb3BlcnR5R3Jv
dXA+DQotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KLSAgICA8Q29u
ZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+DQotICAgIDxD
aGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0Pg0KLSAgPC9Qcm9wZXJ0eUdyb3VwPg0K
LSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCi0gICAgPENvbmZpZ3Vy
YXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KLSAgICA8Q2hhcmFj
dGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4NCi0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXph
dGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+DQotICA8L1Byb3BlcnR5R3JvdXA+
DQotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZv
cm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCi0gICAgPENvbmZpZ3Vy
YXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KLSAgICA8Q2hhcmFj
dGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4NCi0gIDwvUHJvcGVydHlHcm91cD4NCi0gIDxJ
bXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPg0K
LSAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+DQotICA8L0ltcG9ydEdy
b3VwPg0KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQotICAgIDxJ
bXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51
c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNw
cC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIg
Lz4NCi0gIDwvSW1wb3J0R3JvdXA+DQotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25m
aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNo
ZWV0cyI+DQotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNw
cC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERp
cilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFw
cERhdGFQbGF0Zm9ybSIgLz4NCi0gIDwvSW1wb3J0R3JvdXA+DQotICA8SW1wb3J0R3JvdXAgQ29u
ZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExh
YmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERp
cilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0
cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJyki
IExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCi0gIDwvSW1wb3J0R3JvdXA+DQotICA8
SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdE
ZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KLSAgICA8SW1wb3J0IFByb2plY3Q9
IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29u
ZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSku
dXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQotICA8L0ltcG9y
dEdyb3VwPg0KLSAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+DQotICA8UHJv
cGVydHlHcm91cD4NCi0gICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC40MDIxOS4xPC9fUHJv
amVjdEZpbGVWZXJzaW9uPg0KLSAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlv
bil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4kKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJh
dGlvbilcPC9PdXREaXI+DQotICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u
KXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+
DQotICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdEZWJ1Z3x4NjQnIj4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilc
PC9PdXREaXI+DQotICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4kKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvSW50
RGlyPg0KLSAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9y
bSknPT0nUmVsZWFzZXxXaW4zMiciPiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uKVw8L091
dERpcj4NCi0gICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZv
cm0pJz09J1JlbGVhc2V8V2luMzInIj4kKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPg0KLSAgICA8
T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFz
ZXx4NjQnIj4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9PdXRE
aXI+DQotICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdSZWxlYXNlfHg2NCciPiQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+
DQotICA8L1Byb3BlcnR5R3JvdXA+DQotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249
IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+DQotICAgIDxD
bENvbXBpbGU+DQotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0K
LSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X1dJTkRPV1M7X1VT
UkRMTDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7Tk9NSU5NQVg7JShQcmVwcm9jZXNzb3JEZWZp
bml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxNaW5pbWFsUmVidWls
ZD50cnVlPC9NaW5pbWFsUmVidWlsZD4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkVuYWJs
ZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8UnVudGltZUxpYnJhcnk+
TXVsdGlUaHJlYWRlZERlYnVnPC9SdW50aW1lTGlicmFyeT4NCi0gICAgICA8UHJlY29tcGlsZWRI
ZWFkZXI+DQotICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4NCi0gICAgICA8V2FybmluZ0xldmVs
PkxldmVsNDwvV2FybmluZ0xldmVsPg0KLSAgICAgIDxUcmVhdFdhcm5pbmdBc0Vycm9yPnRydWU8
L1RyZWF0V2FybmluZ0FzRXJyb3I+DQotICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+RWRp
dEFuZENvbnRpbnVlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KLSAgICAgIDxEaXNhYmxlU3Bl
Y2lmaWNXYXJuaW5ncz40MTAwOzQxMjc7NDE4OTs0MjM5OzQyNDQ7NDI0NTs0NTEyOzQ3MDI7NDI2
NzslKERpc2FibGVTcGVjaWZpY1dhcm5pbmdzKTwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+DQot
ICAgIDwvQ2xDb21waWxlPg0KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KLSAgPEl0ZW1EZWZp
bml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdE
ZWJ1Z3x4NjQnIj4NCi0gICAgPE1pZGw+DQotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwv
VGFyZ2V0RW52aXJvbm1lbnQ+DQotICAgIDwvTWlkbD4NCi0gICAgPENsQ29tcGlsZT4NCi0gICAg
ICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPFByZXByb2Nl
c3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMO19DUlRfU0VDVVJF
X05PX0RFUFJFQ0FURTtOT01JTk1BWDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJv
Y2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPE1pbmltYWxSZWJ1aWxkPnRydWU8L01pbmltYWxS
ZWJ1aWxkPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RW5hYmxlRmFzdENoZWNrczwvQmFz
aWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVi
dWc8L1J1bnRpbWVMaWJyYXJ5Pg0KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4NCi0gICAgICA8
L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWw0PC9XYXJuaW5n
TGV2ZWw+DQotICAgICAgPFRyZWF0V2FybmluZ0FzRXJyb3I+dHJ1ZTwvVHJlYXRXYXJuaW5nQXNF
cnJvcj4NCi0gICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0Rl
YnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQotICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzPjQx
MDA7NDEyNzs0MTg5OzQyMzk7NDI0NDs0MjQ1OzQ1MTI7NDcwMjs0NzE4OzQyNjc7JShEaXNhYmxl
U3BlY2lmaWNXYXJuaW5ncyk8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPg0KLSAgICA8L0NsQ29t
cGlsZT4NCi0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCi0gIDxJdGVtRGVmaW5pdGlvbkdyb3Vw
IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4z
MiciPg0KLSAgICA8Q2xDb21waWxlPg0KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09w
dGltaXphdGlvbj4NCi0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+QW55U3VpdGFibGU8
L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9u
cz5XSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7
Tk9NSU5NQVg7X1NFQ1VSRV9TQ0w9MDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJv
Y2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8
L1J1bnRpbWVMaWJyYXJ5Pg0KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4NCi0gICAgICA8L1By
ZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWw0PC9XYXJuaW5nTGV2
ZWw+DQotICAgICAgPFRyZWF0V2FybmluZ0FzRXJyb3I+dHJ1ZTwvVHJlYXRXYXJuaW5nQXNFcnJv
cj4NCi0gICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVn
SW5mb3JtYXRpb25Gb3JtYXQ+DQotICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzPjQxMDA7
NDEyNzs0MTg5OzQyMzk7NDI0NDs0MjQ1OzQ1MTI7NDcwMjs0NzE4OzQyNjc7JShEaXNhYmxlU3Bl
Y2lmaWNXYXJuaW5ncyk8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPg0KLSAgICA8L0NsQ29tcGls
ZT4NCi0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCi0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4N
Ci0gICAgPE1pZGw+DQotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJv
bm1lbnQ+DQotICAgIDwvTWlkbD4NCi0gICAgPENsQ29tcGlsZT4NCi0gICAgICA8T3B0aW1pemF0
aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5z
aW9uPkFueVN1aXRhYmxlPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCi0gICAgICA8UHJlcHJv
Y2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7X0NSVF9TRUNV
UkVfTk9fREVQUkVDQVRFO05PTUlOTUFYO19TRUNVUkVfU0NMPTA7JShQcmVwcm9jZXNzb3JEZWZp
bml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxSdW50aW1lTGlicmFy
eT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4NCi0gICAgICA8UHJlY29tcGlsZWRIZWFk
ZXI+DQotICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4NCi0gICAgICA8V2FybmluZ0xldmVsPkxl
dmVsNDwvV2FybmluZ0xldmVsPg0KLSAgICAgIDxUcmVhdFdhcm5pbmdBc0Vycm9yPnRydWU8L1Ry
ZWF0V2FybmluZ0FzRXJyb3I+DQotICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3Jh
bURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KLSAgICAgIDxEaXNhYmxlU3BlY2lm
aWNXYXJuaW5ncz40MTAwOzQxMjc7NDE4OTs0MjM5OzQyNDQ7NDI0NTs0NTEyOzQ3MDI7NDcxODs0
MjY3OyUoRGlzYWJsZVNwZWNpZmljV2FybmluZ3MpPC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4N
Ci0gICAgPC9DbENvbXBpbGU+DQotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQotICA8SXRlbUdy
b3VwPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkRpYWdub3N0aWNzQmFzZS5jcHAiIC8+DQot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwIiAvPg0KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9IkRpcmVjdGl2ZVBhcnNlci5jcHAiIC8+DQotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iRXhwcmVzc2lvblBhcnNlci5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iSW5wdXQuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkxleGVyLmNw
cCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJNYWNyby5jcHAiIC8+DQotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iTWFjcm9FeHBhbmRlci5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iUHJlcHJvY2Vzc29yLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJUb2tl
bi5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iVG9rZW5pemVyLmNwcCIgLz4NCi0g
IDwvSXRlbUdyb3VwPg0KLSAgPEl0ZW1Hcm91cD4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJs
ZW5ndGhfbGltaXRzLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iRGlhZ25vc3RpY3NC
YXNlLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iRGlyZWN0aXZlSGFuZGxlckJhc2Uu
aCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJEaXJlY3RpdmVQYXJzZXIuaCIgLz4NCi0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSJFeHByZXNzaW9uUGFyc2VyLmgiIC8+DQotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iSW5wdXQuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJMZXhl
ci5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ik1hY3JvLmgiIC8+DQotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iTWFjcm9FeHBhbmRlci5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Im51bWVyaWNfbGV4LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icHBfdXRpbHMu
aCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJQcmVwcm9jZXNzb3IuaCIgLz4NCi0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSJTb3VyY2VMb2NhdGlvbi5oIiAvPg0KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9IlRva2VuLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iVG9rZW5pemVy
LmgiIC8+DQotICA8L0l0ZW1Hcm91cD4NCi0gIDxJdGVtR3JvdXA+DQotICAgIDxOb25lIEluY2x1
ZGU9IlRva2VuaXplci5sIiAvPg0KLSAgPC9JdGVtR3JvdXA+DQotICA8SW1wb3J0IFByb2plY3Q9
IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPg0KLSAgPEltcG9ydEdy
b3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4NCi0gIDwvSW1wb3J0R3JvdXA+DQotPC9Qcm9q
ZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzc29yLnZjeHBy
b2ouZmlsdGVycyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvcHJlcHJvY2Vzc29yLnZjeHByb2ouZmlsdGVycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNGFjMjAyZjQwMDJhMjkyYzYxNGY5NGFkM2Q3ZDhjYzNjODE0MzdkMy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3Nvci52Y3hwcm9qLmZp
bHRlcnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAot77u/PD94bWwgdmVyc2lvbj0i
MS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgeG1s
bnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+
DQotICA8SXRlbUdyb3VwPg0KLSAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+DQot
ICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUy
QTJGRn08L1VuaXF1ZUlkZW50aWZpZXI+DQotICAgICAgPEV4dGVuc2lvbnM+Y3BwO2M7Y2M7Y3h4
O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXg8L0V4dGVuc2lvbnM+DQotICAgIDwvRmlsdGVy
Pg0KLSAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlcyI+DQotICAgICAgPFVuaXF1ZUlk
ZW50aWZpZXI+ezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJGQn08L1VuaXF1ZUlk
ZW50aWZpZXI+DQotICAgICAgPEV4dGVuc2lvbnM+aDtocHA7aHh4O2htO2lubDtpbmM7eHNkPC9F
eHRlbnNpb25zPg0KLSAgICA8L0ZpbHRlcj4NCi0gIDwvSXRlbUdyb3VwPg0KLSAgPEl0ZW1Hcm91
cD4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJEaXJlY3RpdmVQYXJzZXIuY3BwIj4NCi0gICAg
ICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSJFeHByZXNzaW9uUGFyc2VyLmNwcCI+DQotICAgICAgPEZpbHRl
cj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iSW5wdXQuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmls
dGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJMZXhlci5j
cHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21w
aWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ik1hY3JvLmNwcCI+DQotICAgICAgPEZpbHRl
cj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iTWFjcm9FeHBhbmRlci5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZp
bGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
IlByZXByb2Nlc3Nvci5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+
DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlRva2VuLmNwcCI+
DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+
DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iVG9rZW5pemVyLmNwcCI+DQotICAgICAgPEZpbHRl
cj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iRGlhZ25vc3RpY3NCYXNlLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2Ug
RmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxl
czwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gIDwvSXRlbUdyb3VwPg0KLSAgPEl0ZW1H
cm91cD4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJEaXJlY3RpdmVQYXJzZXIuaCI+DQotICAg
ICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iRXhwcmVzc2lvblBhcnNlci5oIj4NCi0gICAgICA8RmlsdGVy
PkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSJJbnB1dC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVy
Pg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJMZXhlci5oIj4N
Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJNYWNyby5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRl
ciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSJNYWNyb0V4cGFuZGVyLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0
ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Im51bWVyaWNf
bGV4LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJ
bmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InBwX3V0aWxzLmgiPg0KLSAgICAgIDxG
aWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9IlByZXByb2Nlc3Nvci5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBG
aWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSJTb3VyY2VMb2NhdGlvbi5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVy
Pg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJUb2tlbi5oIj4N
Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJUb2tlbml6ZXIuaCI+DQotICAgICAgPEZpbHRlcj5I
ZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0ibGVuZ3RoX2xpbWl0cy5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwv
RmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJEaWFn
bm9zdGljc0Jhc2UuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0g
ICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iRGlyZWN0aXZlSGFuZGxl
ckJhc2UuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9D
bEluY2x1ZGU+DQotICA8L0l0ZW1Hcm91cD4NCi0gIDxJdGVtR3JvdXA+DQotICAgIDxOb25lIElu
Y2x1ZGU9IlRva2VuaXplci5sIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVy
Pg0KLSAgICA8L05vbmU+DQotICA8L0l0ZW1Hcm91cD4NCi08L1Byb2plY3Q+ClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5ZDJiYWIxN2Y4
MTRhZTRjY2IzZGZhMTMxOTY0ODFiNDg3YTFlNDguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDEyNyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL0luZm9T
aW5rLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VDb250ZXh0LmgiCi0jaW5jbHVkZSAiY29t
cGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCi0jaW5jbHVkZSAiY29tcGls
ZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCIKLQotUmVzdHJpY3RGcmFn
bWVudFNoYWRlclRpbWluZzo6UmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZyhUSW5mb1NpbmtC
YXNlJiBzaW5rKQotICAgIDogbVNpbmsoc2luaykKLSAgICAsIG1OdW1FcnJvcnMoMCkKLXsKLSAg
ICAvLyBTYW1wbGluZyBvcHMgZm91bmQgb25seSBpbiBmcmFnbWVudCBzaGFkZXJzLgotICAgIG1T
YW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRChzMjE7dmYyO2YxOyIpOwotICAgIG1TYW1wbGlu
Z09wcy5pbnNlcnQoInRleHR1cmUyRFByb2ooczIxO3ZmMztmMTsiKTsKLSAgICBtU2FtcGxpbmdP
cHMuaW5zZXJ0KCJ0ZXh0dXJlMkRQcm9qKHMyMTt2ZjQ7ZjE7Iik7Ci0gICAgbVNhbXBsaW5nT3Bz
Lmluc2VydCgidGV4dHVyZUN1YmUoc0MxO3ZmMztmMTsiKTsKLSAgICAvLyBTYW1wbGluZyBvcHMg
Zm91bmQgaW4gYm90aCB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMuCi0gICAgbVNhbXBsaW5n
T3BzLmluc2VydCgidGV4dHVyZTJEKHMyMTt2ZjI7Iik7Ci0gICAgbVNhbXBsaW5nT3BzLmluc2Vy
dCgidGV4dHVyZTJEUHJvaihzMjE7dmYzOyIpOwotICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRl
eHR1cmUyRFByb2ooczIxO3ZmNDsiKTsKLSAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJl
Q3ViZShzQzE7dmYzOyIpOwotICAgIC8vIFNhbXBsaW5nIG9wcyBwcm92aWRlZCBieSBPRVNfRUdM
X2ltYWdlX2V4dGVybmFsLgotICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRCgxO3Zm
MjsiKTsKLSAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRQcm9qKDE7dmYzOyIpOwot
ICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFByb2ooMTt2ZjQ7Iik7Ci0gICAgLy8g
U2FtcGxpbmcgb3BzIHByb3ZpZGVkIGJ5IEFSQl90ZXh0dXJlX3JlY3RhbmdsZS4KLSAgICBtU2Ft
cGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRSZWN0KDE7dmYyOyIpOwotICAgIG1TYW1wbGluZ09w
cy5pbnNlcnQoInRleHR1cmUyRFJlY3RQcm9qKDE7dmYzOyIpOwotICAgIG1TYW1wbGluZ09wcy5p
bnNlcnQoInRleHR1cmUyRFJlY3RQcm9qKDE7dmY0OyIpOwotfQotCi0vLyBGSVhNRShtdnVqb3Zp
Yyk6IFdlIGRvIG5vdCBrbm93IGlmIHRoZSBleGVjdXRpb24gdGltZSBvZiBidWlsdC1pbiBvcGVy
YXRpb25zIGxpa2Ugc2luLCBwb3csIGV0Yy4KLS8vIGNhbiB2YXJ5IGJhc2VkIG9uIHRoZSB2YWx1
ZSBvZiB0aGUgaW5wdXQgYXJndW1lbnRzLiBJZiBzbywgd2Ugc2hvdWxkIHJlc3RyaWN0IHRob3Nl
IGFzIHdlbGwuCi12b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OmVuZm9yY2VSZXN0
cmljdGlvbnMoY29uc3QgVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpCi17Ci0gICAgbU51bUVycm9y
cyA9IDA7Ci0KLSAgICAvLyBGSVhNRShtdnVqb3ZpYyk6IFRoZSBkZXBlbmRlbmN5IGdyYXBoIGRv
ZXMgbm90IHN1cHBvcnQgdXNlciBkZWZpbmVkIGZ1bmN0aW9uIGNhbGxzIHJpZ2h0IG5vdywKLSAg
ICAvLyBzbyB3ZSBnZW5lcmF0ZSBlcnJvcnMgZm9yIHRoZW0uCi0gICAgdmFsaWRhdGVVc2VyRGVm
aW5lZEZ1bmN0aW9uQ2FsbFVzYWdlKGdyYXBoKTsKLQotICAgIC8vIFN0YXJ0aW5nIGZyb20gZWFj
aCBzYW1wbGVyLCB0cmF2ZXJzZSB0aGUgZGVwZW5kZW5jeSBncmFwaCBhbmQgZ2VuZXJhdGUgYW4g
ZXJyb3IgZWFjaCB0aW1lIHdlCi0gICAgLy8gaGl0IGEgbm9kZSB3aGVyZSBzYW1wbGVyIGRlcGVu
ZGVudCB2YWx1ZXMgYXJlIG5vdCBhbGxvd2VkLgotICAgIGZvciAoVEdyYXBoU3ltYm9sVmVjdG9y
Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gZ3JhcGguYmVnaW5TYW1wbGVyU3ltYm9scygpOwotICAg
ICAgICAgaXRlciAhPSBncmFwaC5lbmRTYW1wbGVyU3ltYm9scygpOwotICAgICAgICAgKytpdGVy
KQotICAgIHsKLSAgICAgICAgVEdyYXBoU3ltYm9sKiBzYW1wbGVyU3ltYm9sID0gKml0ZXI7Ci0g
ICAgICAgIGNsZWFyVmlzaXRlZCgpOwotICAgICAgICBzYW1wbGVyU3ltYm9sLT50cmF2ZXJzZSh0
aGlzKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmFs
aWRhdGVVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbFVzYWdlKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgm
IGdyYXBoKQotewotICAgIGZvciAoVEZ1bmN0aW9uQ2FsbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IGdyYXBoLmJlZ2luVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKCk7Ci0gICAgICAgICBp
dGVyICE9IGdyYXBoLmVuZFVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpOwotICAgICAgICAgKytp
dGVyKQotICAgIHsKLSAgICAgICAgVEdyYXBoRnVuY3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwgPSAq
aXRlcjsKLSAgICAgICAgYmVnaW5FcnJvcihmdW5jdGlvbkNhbGwtPmdldEludGVybUZ1bmN0aW9u
Q2FsbCgpKTsKLSAgICAgICAgbVNpbmsgPDwgIkEgY2FsbCB0byBhIHVzZXIgZGVmaW5lZCBmdW5j
dGlvbiBpcyBub3QgcGVybWl0dGVkLlxuIjsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzdHJpY3RGcmFn
bWVudFNoYWRlclRpbWluZzo6YmVnaW5FcnJvcihjb25zdCBUSW50ZXJtTm9kZSogbm9kZSkKLXsK
LSAgICArK21OdW1FcnJvcnM7Ci0gICAgbVNpbmsucHJlZml4KEVQcmVmaXhFcnJvcik7Ci0gICAg
bVNpbmsubG9jYXRpb24obm9kZS0+Z2V0TGluZSgpKTsKLX0KLQotYm9vbCBSZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nOjppc1NhbXBsaW5nT3AoY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogaW50
ZXJtRnVuY3Rpb25DYWxsKSBjb25zdAotewotICAgIHJldHVybiAhaW50ZXJtRnVuY3Rpb25DYWxs
LT5pc1VzZXJEZWZpbmVkKCkgJiYKLSAgICAgICAgICAgbVNhbXBsaW5nT3BzLmZpbmQoaW50ZXJt
RnVuY3Rpb25DYWxsLT5nZXROYW1lKCkpICE9IG1TYW1wbGluZ09wcy5lbmQoKTsKLX0KLQotdm9p
ZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdEFyZ3VtZW50KFRHcmFwaEFyZ3Vt
ZW50KiBwYXJhbWV0ZXIpCi17Ci0gICAgLy8gVGV4dHVyZSBjYWNoZSBhY2Nlc3MgdGltZSBtaWdo
dCBsZWFrIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi4KLSAgICAvLyBUaHVzLCB3ZSByZXN0cmljdCBz
YW1wbGVyIGRlcGVuZGVudCB2YWx1ZXMgZnJvbSBhZmZlY3RpbmcgdGhlIGNvb3JkaW5hdGUgb3Ig
TE9EIGJpYXMgb2YgYQotICAgIC8vIHNhbXBsaW5nIG9wZXJhdGlvbi4KLSAgICBpZiAoaXNTYW1w
bGluZ09wKHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkpKSB7Ci0gICAgICAgIHN3
aXRjaCAocGFyYW1ldGVyLT5nZXRBcmd1bWVudE51bWJlcigpKSB7Ci0gICAgICAgICAgICBjYXNl
IDE6Ci0gICAgICAgICAgICAgICAgLy8gU2Vjb25kIGFyZ3VtZW50IChjb29yZCkKLSAgICAgICAg
ICAgICAgICBiZWdpbkVycm9yKHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkpOwot
ICAgICAgICAgICAgICAgIG1TaW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNh
bXBsZXIgaXMgbm90IHBlcm1pdHRlZCB0byBiZSB0aGUiCi0gICAgICAgICAgICAgICAgICAgICAg
PDwgIiBjb29yZGluYXRlIGFyZ3VtZW50IG9mIGEgc2FtcGxpbmcgb3BlcmF0aW9uLlxuIjsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAg
ICAvLyBUaGlyZCBhcmd1bWVudCAoYmlhcykKLSAgICAgICAgICAgICAgICBiZWdpbkVycm9yKHBh
cmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkpOwotICAgICAgICAgICAgICAgIG1TaW5r
IDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1pdHRl
ZCB0byBiZSB0aGUiCi0gICAgICAgICAgICAgICAgICAgICAgPDwgIiBiaWFzIGFyZ3VtZW50IG9m
IGEgc2FtcGxpbmcgb3BlcmF0aW9uLlxuIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgLy8gRmlyc3QgYXJndW1lbnQgKHNhbXBs
ZXIpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
UmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0
aW9uKiBzZWxlY3Rpb24pCi17Ci0gICAgYmVnaW5FcnJvcihzZWxlY3Rpb24tPmdldEludGVybVNl
bGVjdGlvbigpKTsKLSAgICBtU2luayA8PCAiQW4gZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24gYSBz
YW1wbGVyIGlzIG5vdCBwZXJtaXR0ZWQgaW4gYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQuXG4iOwot
fQotCi12b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0TG9vcChUR3JhcGhM
b29wKiBsb29wKQotewotICAgIGJlZ2luRXJyb3IobG9vcC0+Z2V0SW50ZXJtTG9vcCgpKTsKLSAg
ICBtU2luayA8PCAiQW4gZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24gYSBzYW1wbGVyIGlzIG5vdCBw
ZXJtaXR0ZWQgaW4gYSBsb29wIGNvbmRpdGlvbi5cbiI7Ci19Ci0KLXZvaWQgUmVzdHJpY3RGcmFn
bWVudFNoYWRlclRpbWluZzo6dmlzaXRMb2dpY2FsT3AoVEdyYXBoTG9naWNhbE9wKiBsb2dpY2Fs
T3ApCi17Ci0gICAgYmVnaW5FcnJvcihsb2dpY2FsT3AtPmdldEludGVybUxvZ2ljYWxPcCgpKTsK
LSAgICBtU2luayA8PCAiQW4gZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24gYSBzYW1wbGVyIGlzIG5v
dCBwZXJtaXR0ZWQgb24gdGhlIGxlZnQgaGFuZCBzaWRlIG9mIGEgbG9naWNhbCAiCi0gICAgICAg
ICAgPDwgbG9naWNhbE9wLT5nZXRPcFN0cmluZygpCi0gICAgICAgICAgPDwgIiBvcGVyYXRvci5c
biI7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTkxNjVjYTI4N2UzMzEwMjU3ZDJjMDYw
YjIwZmVjOWQ0ZTMwM2I3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX0ZSQUdNRU5U
X1NIQURFUl9USU1JTkdfSF8KLSNkZWZpbmUgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX0ZSQUdN
RU5UX1NIQURFUl9USU1JTkdfSF8KLQotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgot
Ci0jaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCi0KLWNsYXNzIFRJbmZvU2lua0Jhc2U7Ci0KLWNs
YXNzIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcgOiBURGVwZW5kZW5jeUdyYXBoVHJhdmVy
c2VyIHsKLXB1YmxpYzoKLSAgICBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nKFRJbmZvU2lu
a0Jhc2UmIHNpbmspOwotICAgIHZvaWQgZW5mb3JjZVJlc3RyaWN0aW9ucyhjb25zdCBURGVwZW5k
ZW5jeUdyYXBoJiBncmFwaCk7Ci0gICAgaW50IG51bUVycm9ycygpIGNvbnN0IHsgcmV0dXJuIG1O
dW1FcnJvcnM7IH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFyZ3VtZW50KFRHcmFwaEFyZ3Vt
ZW50KiBwYXJhbWV0ZXIpOwotICAgIHZpcnR1YWwgdm9pZCB2aXNpdFNlbGVjdGlvbihUR3JhcGhT
ZWxlY3Rpb24qIHNlbGVjdGlvbik7Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0TG9vcChUR3JhcGhM
b29wKiBsb29wKTsKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRMb2dpY2FsT3AoVEdyYXBoTG9naWNh
bE9wKiBsb2dpY2FsT3ApOwotCi1wcml2YXRlOgotICAgIHZvaWQgYmVnaW5FcnJvcihjb25zdCBU
SW50ZXJtTm9kZSogbm9kZSk7Ci0gICAgdm9pZCB2YWxpZGF0ZVVzZXJEZWZpbmVkRnVuY3Rpb25D
YWxsVXNhZ2UoY29uc3QgVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpOwotICAgIGJvb2wgaXNTYW1w
bGluZ09wKGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCkgY29uc3Q7
Ci0KLSAgICBUSW5mb1NpbmtCYXNlJiBtU2luazsKLSAgICBpbnQgbU51bUVycm9yczsKLQotICAg
IHR5cGVkZWYgc3RkOjpzZXQ8VFN0cmluZz4gU3RyaW5nU2V0OwotICAgIFN0cmluZ1NldCBtU2Ft
cGxpbmdPcHM7Ci19OwotCi0jZW5kaWYgIC8vIENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9GUkFH
TUVOVF9TSEFERVJfVElNSU5HX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhT
aGFkZXJUaW1pbmcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTVlYjYyZDY1
MGI5OWRlNDY4NWFhOWQwMTQxZDRiZjI2ZTU5MDA0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTcgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci90aW1pbmcv
UmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCIKLQotdm9pZCBSZXN0cmljdFZlcnRleFNoYWRl
clRpbWluZzo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKLXsKLSAgICBpZiAoSXNT
YW1wbGVyKG5vZGUtPmdldEJhc2ljVHlwZSgpKSkgewotICAgICAgICArK21OdW1FcnJvcnM7Ci0g
ICAgICAgIG1TaW5rLm1lc3NhZ2UoRVByZWZpeEVycm9yLAotICAgICAgICAgICAgICAgICAgICAg
IG5vZGUtPmdldExpbmUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAiU2FtcGxlcnMgYXJlIG5v
dCBwZXJtaXR0ZWQgaW4gdmVydGV4IHNoYWRlcnMiKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4
U2hhZGVyVGltaW5nLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGlt
aW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDE5YTA1ZmE2OGJjOGJmZmY3OGI2OGI0MTk2Mjg2MzEyNDhjYjZjODEuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oCisr
KyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09N
UElMRVJfVElNSU5HX1JFU1RSSUNUX1ZFUlRFWF9TSEFERVJfVElNSU5HX0hfCi0jZGVmaW5lIENP
TVBJTEVSX1RJTUlOR19SRVNUUklDVF9WRVJURVhfU0hBREVSX1RJTUlOR19IXwotCi0jaW5jbHVk
ZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCi0KLSNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlh
dGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgotCi1jbGFzcyBUSW5mb1NpbmtC
YXNlOwotCi1jbGFzcyBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZyA6IHB1YmxpYyBUSW50ZXJt
VHJhdmVyc2VyIHsKLXB1YmxpYzoKLSAgICBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZyhUSW5m
b1NpbmtCYXNlJiBzaW5rKQotICAgICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgZmFsc2Us
IGZhbHNlKQotICAgICAgICAsIG1TaW5rKHNpbmspCi0gICAgICAgICwgbU51bUVycm9ycygwKSB7
fQotCi0gICAgdm9pZCBlbmZvcmNlUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290KSB7IHJv
b3QtPnRyYXZlcnNlKHRoaXMpOyB9Ci0gICAgaW50IG51bUVycm9ycygpIHsgcmV0dXJuIG1OdW1F
cnJvcnM7IH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7
Ci1wcml2YXRlOgotICAgIFRJbmZvU2lua0Jhc2UmIG1TaW5rOwotICAgIGludCBtTnVtRXJyb3Jz
OwotfTsKLQotI2VuZGlmICAvLyBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfVkVSVEVYX1NIQURF
Ul9USU1JTkdfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yLnZjeHByb2ogYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci52Y3hwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBh
MjY5NDlmMDgzZGE1N2MzY2QxMjM0YjBkZGI4YjAyMDgxNzk5NTkwLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yLnZjeHByb2oKKysrIC9kZXYvbnVsbApAQCAtMSwzMDQgKzAs
MCBAQAot77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08UHJvamVj
dCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDov
L3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4NCi0gIDxJdGVt
R3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+DQotICAgIDxQcm9qZWN0Q29uZmln
dXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+DQotICAgICAgPENvbmZpZ3VyYXRpb24+RGVi
dWc8L0NvbmZpZ3VyYXRpb24+DQotICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4NCi0g
ICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCi0gICAgPFByb2plY3RDb25maWd1cmF0aW9uIElu
Y2x1ZGU9IkRlYnVnfHg2NCI+DQotICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3Vy
YXRpb24+DQotICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+DQotICAgIDwvUHJvamVjdENv
bmZpZ3VyYXRpb24+DQotICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNl
fFdpbjMyIj4NCi0gICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPg0K
LSAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+DQotICAgIDwvUHJvamVjdENvbmZpZ3Vy
YXRpb24+DQotICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+
DQotICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4NCi0gICAgICA8
UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4NCi0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCi0g
IDwvSXRlbUdyb3VwPg0KLSAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPg0KLSAgICA8
UHJvamVjdEd1aWQ+ezVCM0E2REI4LTFFN0UtNDBENy05MkI5LURBOEFBRTYxOUZBRH08L1Byb2pl
Y3RHdWlkPg0KLSAgICA8Um9vdE5hbWVzcGFjZT5jb21waWxlcjwvUm9vdE5hbWVzcGFjZT4NCi0g
ICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPg0KLSAgICA8UHJvamVjdE5hbWU+dHJhbnNs
YXRvcjwvUHJvamVjdE5hbWU+DQotICA8L1Byb3BlcnR5R3JvdXA+DQotICA8SW1wb3J0IFByb2pl
Y3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPg0KLSAg
PFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KLSAgICA8Q29uZmlndXJh
dGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+DQotICAgIDxDaGFyYWN0
ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+DQotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRp
b24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPg0KLSAgPC9Qcm9wZXJ0eUdyb3VwPg0K
LSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCi0gICAgPENvbmZpZ3Vy
YXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KLSAgICA8Q2hhcmFj
dGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0Pg0KLSAgPC9Qcm9wZXJ0eUdyb3VwPg0KLSAgPFBy
b3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdS
ZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCi0gICAgPENvbmZpZ3VyYXRpb25U
eXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KLSAgICA8Q2hhcmFjdGVyU2V0
Pk5vdFNldDwvQ2hhcmFjdGVyU2V0Pg0KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRy
dWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4NCi0gIDwvUHJvcGVydHlHcm91cD4NCi0gIDxQ
cm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n
RGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KLSAgICA8Q29uZmlndXJhdGlvblR5
cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+DQotICAgIDxDaGFyYWN0ZXJTZXQ+
Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+DQotICA8L1Byb3BlcnR5R3JvdXA+DQotICA8SW1wb3J0IFBy
b2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4NCi0gIDxJbXBv
cnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPg0KLSAgPC9JbXBvcnRHcm91cD4NCi0g
IDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09
J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KLSAgICA8SW1wb3J0IFBy
b2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9w
cyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0
Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQotICA8
L0ltcG9ydEdyb3VwPg0KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlv
bil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0K
LSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0
Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jv
c29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxh
dGZvcm0iIC8+DQotICA8L0ltcG9ydEdyb3VwPg0KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJv
cGVydHlTaGVldHMiPg0KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jv
c29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNl
clJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0i
TG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQotICA8L0ltcG9ydEdyb3VwPg0KLSAgPEltcG9ydEdy
b3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0
JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCi0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJS
b290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0i
ZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJv
cHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KLSAgPC9JbXBvcnRHcm91cD4N
Ci0gIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPg0KLSAgPFByb3BlcnR5R3Jv
dXA+DQotICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuNDAyMTkuMTwvX1Byb2plY3RGaWxl
VmVyc2lvbj4NCi0gICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb24pXDwv
T3V0RGlyPg0KLSAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nRGVidWd8V2luMzInIj4kKENvbmZpZ3VyYXRpb24pXGNvbW1vblw8L0ludERpcj4N
Ci0gICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09
J0RlYnVnfHg2NCciPiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8
L091dERpcj4NCi0gICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJz09J0RlYnVnfHg2NCciPiQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9JbnRE
aXI+DQotICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdSZWxlYXNlfFdpbjMyJyI+JChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb24pXDwvT3V0
RGlyPg0KLSAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9y
bSknPT0nUmVsZWFzZXxXaW4zMiciPiQoQ29uZmlndXJhdGlvbilcY29tbW9uXDwvSW50RGlyPg0K
LSAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n
UmVsZWFzZXx4NjQnIj4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilc
PC9PdXREaXI+DQotICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9J
bnREaXI+DQotICA8L1Byb3BlcnR5R3JvdXA+DQotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25k
aXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+DQot
ICAgIDxDbENvbXBpbGU+DQotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0
aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQoUHJvamVjdERpcik7
JChQcm9qZWN0RGlyKS4uLzskKFByb2plY3REaXIpLi4vLi4vaW5jbHVkZTslKEFkZGl0aW9uYWxJ
bmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAg
IDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0xJQjtfQ1JUX1NFQ1VSRV9O
T19ERVBSRUNBVEU7Tk9NSU5NQVg7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nl
c3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxNaW5pbWFsUmVidWlsZD50cnVlPC9NaW5pbWFsUmVi
dWlsZD4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2lj
UnVudGltZUNoZWNrcz4NCi0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVn
PC9SdW50aW1lTGlicmFyeT4NCi0gICAgICA8UHJlY29tcGlsZWRIZWFkZXI+DQotICAgICAgPC9Q
cmVjb21waWxlZEhlYWRlcj4NCi0gICAgICA8V2FybmluZ0xldmVsPkxldmVsNDwvV2FybmluZ0xl
dmVsPg0KLSAgICAgIDxUcmVhdFdhcm5pbmdBc0Vycm9yPnRydWU8L1RyZWF0V2FybmluZ0FzRXJy
b3I+DQotICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+RWRpdEFuZENvbnRpbnVlPC9EZWJ1
Z0luZm9ybWF0aW9uRm9ybWF0Pg0KLSAgICAgIDxEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz40MTAw
OzQxMjc7NDE4OTs0MjM5OzQyNDQ7NDI0NTs0NTEyOzQ3MDI7NDcxODslKERpc2FibGVTcGVjaWZp
Y1dhcm5pbmdzKTwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+DQotICAgIDwvQ2xDb21waWxlPg0K
LSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4NCi0gICAg
PE1pZGw+DQotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+
DQotICAgIDwvTWlkbD4NCi0gICAgPENsQ29tcGlsZT4NCi0gICAgICA8T3B0aW1pemF0aW9uPkRp
c2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3Jp
ZXM+JChQcm9qZWN0RGlyKTskKFByb2plY3REaXIpLi4vOyQoUHJvamVjdERpcikuLi8uLi9pbmNs
dWRlOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGly
ZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztf
TElCO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWDslKFByZXByb2Nlc3NvckRlZmlu
aXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPE1pbmltYWxSZWJ1aWxk
PnRydWU8L01pbmltYWxSZWJ1aWxkPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RW5hYmxl
RmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxSdW50aW1lTGlicmFyeT5N
dWx0aVRocmVhZGVkRGVidWc8L1J1bnRpbWVMaWJyYXJ5Pg0KLSAgICAgIDxQcmVjb21waWxlZEhl
YWRlcj4NCi0gICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDxXYXJuaW5nTGV2ZWw+
TGV2ZWw0PC9XYXJuaW5nTGV2ZWw+DQotICAgICAgPFRyZWF0V2FybmluZ0FzRXJyb3I+dHJ1ZTwv
VHJlYXRXYXJuaW5nQXNFcnJvcj4NCi0gICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9n
cmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQotICAgICAgPERpc2FibGVTcGVj
aWZpY1dhcm5pbmdzPjQxMDA7NDEyNzs0MTg5OzQyMzk7NDI0NDs0MjQ1OzQyNjc7NDUxMjs0NzAy
OzQ3MTg7JShEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncyk8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdz
Pg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCi0gIDxJdGVt
RGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nUmVsZWFzZXxXaW4zMiciPg0KLSAgICA8Q2xDb21waWxlPg0KLSAgICAgIDxPcHRpbWl6YXRp
b24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNp
b24+QW55U3VpdGFibGU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPg0KLSAgICAgIDxBZGRpdGlv
bmFsSW5jbHVkZURpcmVjdG9yaWVzPiQoUHJvamVjdERpcik7JChQcm9qZWN0RGlyKS4uLzskKFBy
b2plY3REaXIpLi4vLi4vaW5jbHVkZTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9B
ZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0
aW9ucz5XSU4zMjtOREVCVUc7X0xJQjtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7Tk9NSU5NQVg7
X1NFQ1VSRV9TQ0w9MDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVm
aW5pdGlvbnM+DQotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVM
aWJyYXJ5Pg0KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4NCi0gICAgICA8L1ByZWNvbXBpbGVk
SGVhZGVyPg0KLSAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWw0PC9XYXJuaW5nTGV2ZWw+DQotICAg
ICAgPFRyZWF0V2FybmluZ0FzRXJyb3I+dHJ1ZTwvVHJlYXRXYXJuaW5nQXNFcnJvcj4NCi0gICAg
ICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRp
b25Gb3JtYXQ+DQotICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzPjQxMDA7NDEyNzs0MTg5
OzQyMzk7NDI0NDs0MjQ1OzQ1MTI7NDcwMjs0NzE4OyUoRGlzYWJsZVNwZWNpZmljV2FybmluZ3Mp
PC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4NCi0gICAgPC9DbENvbXBpbGU+DQotICA8L0l0ZW1E
ZWZpbml0aW9uR3JvdXA+DQotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENv
bmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+DQotICAgIDxNaWRsPg0K
LSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50Pg0KLSAgICA8
L01pZGw+DQotICAgIDxDbENvbXBpbGU+DQotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwv
T3B0aW1pemF0aW9uPg0KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5BbnlTdWl0YWJs
ZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGly
ZWN0b3JpZXM+JChQcm9qZWN0RGlyKTskKFByb2plY3REaXIpLi4vOyQoUHJvamVjdERpcikuLi8u
Li9pbmNsdWRlOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNs
dWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05E
RUJVRztfTElCO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWDtfU0VDVVJFX1NDTD0w
OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0g
ICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+DQotICAg
ICAgPFByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAg
ICAgPFdhcm5pbmdMZXZlbD5MZXZlbDQ8L1dhcm5pbmdMZXZlbD4NCi0gICAgICA8VHJlYXRXYXJu
aW5nQXNFcnJvcj50cnVlPC9UcmVhdFdhcm5pbmdBc0Vycm9yPg0KLSAgICAgIDxEZWJ1Z0luZm9y
bWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCi0g
ICAgICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+NDEwMDs0MTI3OzQxODk7NDIzOTs0MjQ0OzQy
NDU7NDI2Nzs0NTEyOzQ3MDI7NDcxODslKERpc2FibGVTcGVjaWZpY1dhcm5pbmdzKTwvRGlzYWJs
ZVNwZWNpZmljV2FybmluZ3M+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgPC9JdGVtRGVmaW5pdGlv
bkdyb3VwPg0KLSAgPEl0ZW1Hcm91cD4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJCdWlsdElu
RnVuY3Rpb25FbXVsYXRvci5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iQ29kZUdl
bi5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iQ29tcGlsZXIuY3BwIiAvPg0KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9ImRlYnVnLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSJEZXRlY3RDYWxsRGVwdGguY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkRl
dGVjdERpc2NvbnRpbnVpdHkuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkRpYWdu
b3N0aWNzLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJEaXJlY3RpdmVIYW5kbGVy
LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJGb3JMb29wVW5yb2xsLmNwcCIgLz4N
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJJbmZvU2luay5jcHAiIC8+DQotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iSW5pdGlhbGl6ZS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
SW5pdGlhbGl6ZURsbC5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iSW5pdGlhbGl6
ZUdMUG9zaXRpb24uY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkluaXRpYWxpemVQ
YXJzZUNvbnRleHQuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkludGVybWVkaWF0
ZS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iaW50ZXJtT3V0LmNwcCIgLz4NCi0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSJJbnRlcm1UcmF2ZXJzZS5jcHAiIC8+DQotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwIiAvPg0KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Im9zc291cmNlX3dpbi5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iT3V0cHV0RVNTTC5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iT3V0cHV0R0xT
TC5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iT3V0cHV0R0xTTEJhc2UuY3BwIiAv
Pg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ik91dHB1dEhMU0wuY3BwIiAvPg0KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9InBhcnNlQ29uc3QuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9IlBhcnNlQ29udGV4dC5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iUG9vbEFs
bG9jLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJRdWFsaWZpZXJBbGl2ZS5jcHAi
IC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iUmVtb3ZlVHJlZS5jcHAiIC8+DQotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iU2VhcmNoU3ltYm9sLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSJTaGFkZXJMYW5nLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJTeW1i
b2xUYWJsZS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iVHJhbnNsYXRvckVTU0wu
Y3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlRyYW5zbGF0b3JHTFNMLmNwcCIgLz4N
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJUcmFuc2xhdG9ySExTTC5jcHAiIC8+DQotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCIgLz4NCi0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSJVbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwIiAvPg0KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9IlVuaWZvcm0uY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InV0
aWwuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlZhbGlkYXRlTGltaXRhdGlvbnMu
Y3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlZhcmlhYmxlSW5mby5jcHAiIC8+DQot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iVmFyaWFibGVQYWNrZXIuY3BwIiAvPg0KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Imdsc2xhbmdfbGV4LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSJnbHNsYW5nX3RhYi5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iZGVwZ3Jh
cGhcRGVwZW5kZW5jeUdyYXBoLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJkZXBn
cmFwaFxEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSJkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIiAvPg0KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9ImRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCIgLz4NCi0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSJ0aW1pbmdcUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWlu
Zy5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0idGltaW5nXFJlc3RyaWN0VmVydGV4
U2hhZGVyVGltaW5nLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx0aGlyZF9w
YXJ0eVxjb21waWxlclxBcnJheUJvdW5kc0NsYW1wZXIuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9IlZlcnNpb25HTFNMLmNwcCIgLz4NCi0gIDwvSXRlbUdyb3VwPg0KLSAgPEl0ZW1H
cm91cD4NCi0gICAgPEN1c3RvbUJ1aWxkIEluY2x1ZGU9Imdsc2xhbmcubCI+DQotICAgICAgPE1l
c3NhZ2UgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xX
aW4zMiciPg0KLSAgICAgIDwvTWVzc2FnZT4NCi0gICAgICA8Q29tbWFuZCBDb25kaXRpb249Iick
KENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+DQotICAgICAgPC9D
b21tYW5kPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5wdXRzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKEFkZGl0aW9uYWxJbnB1dHMpPC9B
ZGRpdGlvbmFsSW5wdXRzPg0KLSAgICAgIDxPdXRwdXRzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKE91dHB1dHMpPC9PdXRwdXRzPg0K
LSAgICAgIDxNZXNzYWdlIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nRGVidWd8eDY0JyI+DQotICAgICAgPC9NZXNzYWdlPg0KLSAgICAgIDxDb21tYW5kIENvbmRp
dGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+DQotICAg
ICAgPC9Db21tYW5kPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5wdXRzIENvbmRpdGlvbj0iJyQoQ29u
ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JShBZGRpdGlvbmFsSW5wdXRz
KTwvQWRkaXRpb25hbElucHV0cz4NCi0gICAgICA8T3V0cHV0cyBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoT3V0cHV0cyk8L091dHB1dHM+
DQotICAgICAgPE1lc3NhZ2UgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdSZWxlYXNlfFdpbjMyJyI+DQotICAgICAgPC9NZXNzYWdlPg0KLSAgICAgIDxDb21tYW5k
IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4z
MiciPg0KLSAgICAgIDwvQ29tbWFuZD4NCi0gICAgICA8QWRkaXRpb25hbElucHV0cyBDb25kaXRp
b249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKEFk
ZGl0aW9uYWxJbnB1dHMpPC9BZGRpdGlvbmFsSW5wdXRzPg0KLSAgICAgIDxPdXRwdXRzIENvbmRp
dGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUo
T3V0cHV0cyk8L091dHB1dHM+DQotICAgICAgPE1lc3NhZ2UgQ29uZGl0aW9uPSInJChDb25maWd1
cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPg0KLSAgICAgIDwvTWVzc2FnZT4N
Ci0gICAgICA8Q29tbWFuZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p
Jz09J1JlbGVhc2V8eDY0JyI+DQotICAgICAgPC9Db21tYW5kPg0KLSAgICAgIDxBZGRpdGlvbmFs
SW5wdXRzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFz
ZXx4NjQnIj4lKEFkZGl0aW9uYWxJbnB1dHMpPC9BZGRpdGlvbmFsSW5wdXRzPg0KLSAgICAgIDxP
dXRwdXRzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFz
ZXx4NjQnIj4lKE91dHB1dHMpPC9PdXRwdXRzPg0KLSAgICA8L0N1c3RvbUJ1aWxkPg0KLSAgICA8
Q3VzdG9tQnVpbGQgSW5jbHVkZT0iZ2xzbGFuZy55Ij4NCi0gICAgICA8TWVzc2FnZSBDb25kaXRp
b249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+DQotICAg
ICAgPC9NZXNzYWdlPg0KLSAgICAgIDxDb21tYW5kIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlv
bil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4NCi0gICAgICA8L0NvbW1hbmQ+DQotICAg
ICAgPE91dHB1dHMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdE
ZWJ1Z3xXaW4zMiciPiUoT3V0cHV0cyk8L091dHB1dHM+DQotICAgICAgPE1lc3NhZ2UgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4NCi0gICAg
ICA8L01lc3NhZ2U+DQotICAgICAgPENvbW1hbmQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u
KXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4NCi0gICAgICA8L0NvbW1hbmQ+DQotICAgICAg
PE91dHB1dHMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1
Z3x4NjQnIj4lKE91dHB1dHMpPC9PdXRwdXRzPg0KLSAgICAgIDxNZXNzYWdlIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPg0KLSAgICAg
IDwvTWVzc2FnZT4NCi0gICAgICA8Q29tbWFuZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p
fCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4NCi0gICAgICA8L0NvbW1hbmQ+DQotICAg
ICAgPE91dHB1dHMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdS
ZWxlYXNlfFdpbjMyJyI+JShPdXRwdXRzKTwvT3V0cHV0cz4NCi0gICAgICA8TWVzc2FnZSBDb25k
aXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+DQot
ICAgICAgPC9NZXNzYWdlPg0KLSAgICAgIDxDb21tYW5kIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4NCi0gICAgICA8L0NvbW1hbmQ+DQot
ICAgICAgPE91dHB1dHMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdSZWxlYXNlfHg2NCciPiUoT3V0cHV0cyk8L091dHB1dHM+DQotICAgIDwvQ3VzdG9tQnVpbGQ+
DQotICA8L0l0ZW1Hcm91cD4NCi0gIDxJdGVtR3JvdXA+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iQmFzZVR5cGVzLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJDb21tb24uaCIgLz4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJDb25zdGFudFVuaW9uLmgiIC8+DQotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iZGVidWcuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJEZXRl
Y3RDYWxsRGVwdGguaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJEZXRlY3REaXNjb250
aW51aXR5LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iRGlhZ25vc3RpY3MuaCIgLz4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJEaXJlY3RpdmVIYW5kbGVyLmgiIC8+DQotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iRm9yTG9vcFVucm9sbC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ikhhc2hOYW1lcy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkluZm9TaW5r
LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iSW5pdGlhbGl6ZS5oIiAvPg0KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9IkluaXRpYWxpemVEbGwuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSJJbml0aWFsaXplR2xvYmFscy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
IkluaXRpYWxpemVHTFBvc2l0aW9uLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iSW5p
dGlhbGl6ZVBhcnNlQ29udGV4dC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImludGVy
bWVkaWF0ZS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImxvY2FsaW50ZXJtZWRpYXRl
LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCIg
Lz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJNTWFwLmgiIC8+DQotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iTm9kZVNlYXJjaC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Im9zaW5j
bHVkZS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ik91dHB1dEVTU0wuaCIgLz4NCi0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSJPdXRwdXRHTFNMLmgiIC8+DQotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iT3V0cHV0R0xTTEJhc2UuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJP
dXRwdXRITFNMLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iUGFyc2VDb250ZXh0Lmgi
IC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iUG9vbEFsbG9jLmgiIC8+DQotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iUXVhbGlmaWVyQWxpdmUuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSJSZW1vdmVUcmVlLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iUmVuYW1lRnVu
Y3Rpb24uaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXEdMU0xB
TkdcU2hhZGVyTGFuZy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlNlYXJjaFN5bWJv
bC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlNoSGFuZGxlLmgiIC8+DQotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iU3ltYm9sVGFibGUuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSJUcmFuc2xhdG9yRVNTTC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlRyYW5z
bGF0b3JHTFNMLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iVHJhbnNsYXRvckhMU0wu
aCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJUeXBlcy5oIiAvPg0KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9IlVuZm9sZFNob3J0Q2lyY3VpdC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9IlVuZm9sZFNob3J0Q2lyY3VpdEFTVC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9IlVuaWZvcm0uaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJ1dGlsLmgiIC8+DQot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iVmFsaWRhdGVMaW1pdGF0aW9ucy5oIiAvPg0KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9IlZhcmlhYmxlSW5mby5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9IlZhcmlhYmxlUGFja2VyLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iZ2xz
bGFuZ190YWIuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJ0aW1pbmdcUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InRpbWlu
Z1xSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9ImRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9ImRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCIgLz4NCi0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSJkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCIgLz4NCi0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlx0aGlyZF9wYXJ0eVxjb21waWxlclxBcnJheUJvdW5kc0NsYW1w
ZXIuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJWZXJzaW9uR0xTTC5oIiAvPg0KLSAg
PC9JdGVtR3JvdXA+DQotICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9z
b2Z0LkNwcC50YXJnZXRzIiAvPg0KLSAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJn
ZXRzIj4NCi0gIDwvSW1wb3J0R3JvdXA+DQotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yLnZjeHByb2ouZmlsdGVycwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMjI2MzEzN2U2MWZhZTFiODdhZjhmYWUwNTU4NzJkMGFkZmJhM2Q2NC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci52Y3hwcm9qLmZpbHRlcnMKKysrIC9k
ZXYvbnVsbApAQCAtMSwzNjEgKzAsMCBAQAot77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGlu
Zz0idXRmLTgiPz4NCi08UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9z
Y2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+DQotICA8SXRlbUdy
b3VwPg0KLSAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+DQotICAgICAgPFVuaXF1
ZUlkZW50aWZpZXI+ezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn08L1VuaXF1
ZUlkZW50aWZpZXI+DQotICAgICAgPEV4dGVuc2lvbnM+Y3BwO2M7Y2M7Y3h4O2RlZjtvZGw7aWRs
O2hwajtiYXQ7YXNtO2FzbXg8L0V4dGVuc2lvbnM+DQotICAgIDwvRmlsdGVyPg0KLSAgICA8Rmls
dGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlc1xnZW5lcmF0ZWQiPg0KLSAgICAgIDxVbmlxdWVJZGVu
dGlmaWVyPntlYjhkYTE1Ny1iMjljLTQzYzMtODgwZC01NDY3OWUxNzZkYzV9PC9VbmlxdWVJZGVu
dGlmaWVyPg0KLSAgICA8L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmls
ZXNcZGVwZ3JhcGgiPg0KLSAgICAgIDxVbmlxdWVJZGVudGlmaWVyPntiNTQxMGQzYS1jM2M4LTRh
ZTYtODQzYS1iMDAwZDY1MjYzMmV9PC9VbmlxdWVJZGVudGlmaWVyPg0KLSAgICA8L0ZpbHRlcj4N
Ci0gICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXNcdGltaW5nIj4NCi0gICAgICA8VW5p
cXVlSWRlbnRpZmllcj57YTk4NDc2MTEtZGNkNS00Yzg5LTgyNjItYTIyYjk2YzdjOThkfTwvVW5p
cXVlSWRlbnRpZmllcj4NCi0gICAgPC9GaWx0ZXI+DQotICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVh
ZGVyIEZpbGVzIj4NCi0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57OTM5OTUzODAtODlCRC00YjA0
LTg4RUItNjI1RkJFNTJFQkZCfTwvVW5pcXVlSWRlbnRpZmllcj4NCi0gICAgICA8RXh0ZW5zaW9u
cz5oO2hwcDtoeHg7aG07aW5sO2luYzt4c2Q8L0V4dGVuc2lvbnM+DQotICAgIDwvRmlsdGVyPg0K
LSAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlc1xnZW5lcmF0ZWQiPg0KLSAgICAgIDxV
bmlxdWVJZGVudGlmaWVyPnswOTRmNzExNS0zNWQzLTRjNjMtODcwYy1hYjVmMzkzZGMyYzJ9PC9V
bmlxdWVJZGVudGlmaWVyPg0KLSAgICA8L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJbmNsdWRlPSJI
ZWFkZXIgRmlsZXNcdGltaW5nIj4NCi0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57NWY1NzQyZTkt
MTVlMS00M2I0LWIxZTctMGMxMThiZTE0ZTA0fTwvVW5pcXVlSWRlbnRpZmllcj4NCi0gICAgPC9G
aWx0ZXI+DQotICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzXGRlcGdyYXBoIj4NCi0g
ICAgICA8VW5pcXVlSWRlbnRpZmllcj57YzQwMDdlMzUtM2MxMS00NGQ2LTk1ZjctYmI4MWRiNTI4
MDY4fTwvVW5pcXVlSWRlbnRpZmllcj4NCi0gICAgPC9GaWx0ZXI+DQotICA8L0l0ZW1Hcm91cD4N
Ci0gIDxJdGVtR3JvdXA+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3IuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAg
ICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJDb21waWxlci5jcHAiPg0K
LSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImRlYnVnLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3Vy
Y2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iRGV0ZWN0Q2FsbERlcHRoLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8
L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iRGlh
Z25vc3RpY3MuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAg
ICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJEaXJlY3RpdmVIYW5kbGVy
LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENv
bXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iRm9yTG9vcFVucm9sbC5jcHAiPg0KLSAg
ICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9IkluZm9TaW5rLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3Vy
Y2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iSW5pdGlhbGl6ZS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0
ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkluaXRpYWxp
emVEbGwuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8
L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJJbml0aWFsaXplUGFyc2VDb250
ZXh0LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9D
bENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iSW50ZXJtZWRpYXRlLmNwcCI+DQot
ICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iaW50ZXJtT3V0LmNwcCI+DQotICAgICAgPEZpbHRlcj5T
b3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iSW50ZXJtVHJhdmVyc2UuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxl
czwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJN
YXBMb25nVmFyaWFibGVOYW1lcy5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9G
aWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Im9zc291
cmNlX3dpbi5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAg
IDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InBhcnNlQ29uc3QuY3BwIj4N
Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4N
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJQb29sQWxsb2MuY3BwIj4NCi0gICAgICA8RmlsdGVy
PlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSJRdWFsaWZpZXJBbGl2ZS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZp
bGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
IlJlbW92ZVRyZWUuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0K
LSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJTaGFkZXJMYW5nLmNw
cCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBp
bGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iU3ltYm9sVGFibGUuY3BwIj4NCi0gICAgICA8
RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSJ1dGlsLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8
L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iVmFs
aWRhdGVMaW1pdGF0aW9ucy5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0
ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlZhcmlhYmxl
SW5mby5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwv
Q2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlZhcmlhYmxlUGFja2VyLmNwcCI+
DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+
DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iZ2xzbGFuZ19sZXguY3BwIj4NCi0gICAgICA8Rmls
dGVyPlNvdXJjZSBGaWxlc1xnZW5lcmF0ZWQ8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iZ2xzbGFuZ190YWIuY3BwIj4NCi0gICAgICA8RmlsdGVy
PlNvdXJjZSBGaWxlc1xnZW5lcmF0ZWQ8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoLmNwcCI+DQotICAg
ICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcZGVwZ3JhcGg8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBp
bGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoQnVp
bGRlci5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGRlcGdyYXBoPC9GaWx0ZXI+
DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImRlcGdyYXBoXERl
cGVuZGVuY3lHcmFwaE91dHB1dC5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGRl
cGdyYXBoPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9ImRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCI+DQotICAgICAgPEZpbHRl
cj5Tb3VyY2UgRmlsZXNcZGVwZ3JhcGg8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0idGltaW5nXFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcu
Y3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aW1pbmc8L0ZpbHRlcj4NCi0gICAg
PC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0idGltaW5nXFJlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGltaW5n
PC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHRoaXJkX3BhcnR5XGNvbXBpbGVyXEFycmF5Qm91bmRzQ2xhbXBlci5jcHAiPg0KLSAgICAgIDxG
aWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9IkluaXRpYWxpemVHTFBvc2l0aW9uLmNwcCI+DQotICAgICAgPEZpbHRl
cj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iRGV0ZWN0RGlzY29udGludWl0eS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291
cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ik91dHB1dEhMU0wuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmls
dGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJTZWFyY2hT
eW1ib2wuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8
L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJUcmFuc2xhdG9ySExTTC5jcHAi
Pg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxl
Pg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlVuZm9sZFNob3J0Q2lyY3VpdC5jcHAiPg0KLSAg
ICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9IlVuaWZvcm0uY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJj
ZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSJDb2RlR2VuLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4N
Ci0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iVHJhbnNsYXRvckdM
U0wuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0Ns
Q29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJUcmFuc2xhdG9yRVNTTC5jcHAiPg0K
LSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ik91dHB1dEVTU0wuY3BwIj4NCi0gICAgICA8RmlsdGVy
PlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSJPdXRwdXRHTFNMLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8
L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iT3V0
cHV0R0xTTEJhc2UuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0K
LSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJWZXJzaW9uR0xTTC5j
cHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21w
aWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlVuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAi
Pg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxl
Pg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlBhcnNlQ29udGV4dC5jcHAiPg0KLSAgICAgIDxG
aWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgPC9JdGVt
R3JvdXA+DQotICA8SXRlbUdyb3VwPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkJhc2VUeXBl
cy5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5j
bHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5o
Ij4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVk
ZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJDb21tb24uaCI+DQotICAgICAgPEZpbHRlcj5I
ZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iQ29uc3RhbnRVbmlvbi5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwv
RmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJkZWJ1
Zy5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5j
bHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJEZXRlY3RDYWxsRGVwdGguaCI+DQotICAg
ICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iRGlhZ25vc3RpY3MuaCI+DQotICAgICAgPEZpbHRlcj5IZWFk
ZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iRGlyZWN0aXZlSGFuZGxlci5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwv
RmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJGb3JM
b29wVW5yb2xsLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAg
IDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkluZm9TaW5rLmgiPg0KLSAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkluaXRpYWxpemUuaCI+DQotICAgICAgPEZpbHRlcj5IZWFk
ZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iSW5pdGlhbGl6ZURsbC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmls
dGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJJbml0aWFs
aXplR2xvYmFscy5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAg
ICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJJbml0aWFsaXplUGFyc2VD
b250ZXh0LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwv
Q2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImludGVybWVkaWF0ZS5oIj4NCi0g
ICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSJsb2NhbGludGVybWVkaWF0ZS5oIj4NCi0gICAgICA8Rmls
dGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSJNYXBMb25nVmFyaWFibGVOYW1lcy5oIj4NCi0gICAgICA8RmlsdGVyPkhl
YWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSJNTWFwLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQot
ICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Im9zaW5jbHVkZS5oIj4N
Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJQb29sQWxsb2MuaCI+DQotICAgICAgPEZpbHRlcj5I
ZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iUXVhbGlmaWVyQWxpdmUuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8
L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iUmVt
b3ZlVHJlZS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8
L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJSZW5hbWVGdW5jdGlvbi5oIj4N
Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXEdMU0xBTkdcU2hhZGVyTGFu
Zy5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5j
bHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJTaEhhbmRsZS5oIj4NCi0gICAgICA8Rmls
dGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSJTeW1ib2xUYWJsZS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxl
czwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJU
eXBlcy5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0Ns
SW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJ1dGlsLmgiPg0KLSAgICAgIDxGaWx0
ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9IlZhbGlkYXRlTGltaXRhdGlvbnMuaCI+DQotICAgICAgPEZpbHRlcj5IZWFk
ZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iVmFyaWFibGVJbmZvLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0
ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlZhcmlhYmxl
UGFja2VyLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwv
Q2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Imdsc2xhbmdfdGFiLmgiPg0KLSAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXGdlbmVyYXRlZDwvRmlsdGVyPg0KLSAgICA8L0NsSW5j
bHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJ0aW1pbmdcUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZy5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aW1pbmc8L0ZpbHRl
cj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0idGltaW5nXFJl
c3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVz
XHRpbWluZzwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSJkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGguaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIg
RmlsZXNcZGVwZ3JhcGg8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIj4NCi0gICAgICA8
RmlsdGVyPkhlYWRlciBGaWxlc1xkZXBncmFwaDwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGhPdXRwdXQu
aCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcZGVwZ3JhcGg8L0ZpbHRlcj4NCi0gICAg
PC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iSGFzaE5hbWVzLmgiPg0KLSAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkluaXRpYWxpemVHTFBvc2l0aW9uLmgiPg0KLSAgICAgIDxG
aWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHRoaXJkX3BhcnR5XGNvbXBpbGVyXEFycmF5Qm91bmRzQ2xhbXBl
ci5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5j
bHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJEZXRlY3REaXNjb250aW51aXR5LmgiPg0K
LSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ik91dHB1dEhMU0wuaCI+DQotICAgICAgPEZpbHRlcj5I
ZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iU2VhcmNoU3ltYm9sLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9G
aWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlRyYW5z
bGF0b3JITFNMLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAg
IDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlVuZm9sZFNob3J0Q2lyY3Vp
dC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5j
bHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJVbmlmb3JtLmgiPg0KLSAgICAgIDxGaWx0
ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9IlRyYW5zbGF0b3JHTFNMLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZp
bGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
IlRyYW5zbGF0b3JFU1NMLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+
DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ik91dHB1dEVTU0wu
aCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1
ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iT3V0cHV0R0xTTC5oIj4NCi0gICAgICA8Rmls
dGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSJPdXRwdXRHTFNMQmFzZS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBG
aWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSJWZXJzaW9uR0xTTC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0K
LSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJVbmZvbGRTaG9ydENp
cmN1aXRBU1QuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAg
PC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iUGFyc2VDb250ZXh0LmgiPg0K
LSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ik5vZGVTZWFyY2guaCI+DQotICAgICAgPEZpbHRlcj5I
ZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICA8L0l0ZW1Hcm91cD4N
Ci0gIDxJdGVtR3JvdXA+DQotICAgIDxDdXN0b21CdWlsZCBJbmNsdWRlPSJnbHNsYW5nLmwiPg0K
LSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ3VzdG9tQnVpbGQ+
DQotICAgIDxDdXN0b21CdWlsZCBJbmNsdWRlPSJnbHNsYW5nLnkiPg0KLSAgICAgIDxGaWx0ZXI+
U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ3VzdG9tQnVpbGQ+DQotICA8L0l0ZW1Hcm91
cD4NCi08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQmFzZVR5cGVz
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9CYXNl
VHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43YmRhZjE0OTgzOWQwYWY3YmI1NjQ0MGY4NDEzYThkNDIwOTQ1
MGY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvQmFzZVR5cGVzLmgKQEAgLTAsMCArMSwxNDkgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpZm5kZWYgX0JBU0lDVFlQRVNfSU5DTFVERURfCisjZGVmaW5lIF9CQVNJQ1RZ
UEVTX0lOQ0xVREVEXworCisvLworLy8gUHJlY2lzaW9uIHF1YWxpZmllcnMKKy8vCitlbnVtIFRQ
cmVjaXNpb24KK3sKKyAgICAvLyBUaGVzZSBuZWVkIHRvIGJlIGtlcHQgc29ydGVkCisgICAgRWJw
VW5kZWZpbmVkLAorICAgIEVicExvdywKKyAgICBFYnBNZWRpdW0sCisgICAgRWJwSGlnaAorfTsK
KworaW5saW5lIGNvbnN0IGNoYXIqIGdldFByZWNpc2lvblN0cmluZyhUUHJlY2lzaW9uIHApCit7
CisgICAgc3dpdGNoKHApCisgICAgeworICAgIGNhc2UgRWJwSGlnaDoJCXJldHVybiAiaGlnaHAi
OwkJYnJlYWs7CisgICAgY2FzZSBFYnBNZWRpdW06CQlyZXR1cm4gIm1lZGl1bXAiOwlicmVhazsK
KyAgICBjYXNlIEVicExvdzoJCXJldHVybiAibG93cCI7CQlicmVhazsKKyAgICBkZWZhdWx0OgkJ
CXJldHVybiAibWVkaXVtcCI7ICAgYnJlYWs7ICAgLy8gU2FmZXN0IGZhbGxiYWNrCisgICAgfQor
fQorCisvLworLy8gQmFzaWMgdHlwZS4gIEFycmF5cywgdmVjdG9ycywgZXRjLiwgYXJlIG9ydGhv
Z29uYWwgdG8gdGhpcy4KKy8vCitlbnVtIFRCYXNpY1R5cGUKK3sKKyAgICBFYnRWb2lkLAorICAg
IEVidEZsb2F0LAorICAgIEVidEludCwKKyAgICBFYnRCb29sLAorICAgIEVidEd1YXJkU2FtcGxl
ckJlZ2luLCAgLy8gbm9uIHR5cGU6ICBzZWUgaW1wbGVtZW50YXRpb24gb2YgSXNTYW1wbGVyKCkK
KyAgICBFYnRTYW1wbGVyMkQsCisgICAgRWJ0U2FtcGxlckN1YmUsCisgICAgRWJ0U2FtcGxlckV4
dGVybmFsT0VTLCAgLy8gT25seSB2YWxpZCBpZiBPRVNfRUdMX2ltYWdlX2V4dGVybmFsIGV4aXN0
cy4KKyAgICBFYnRTYW1wbGVyMkRSZWN0LCAgICAgICAvLyBPbmx5IHZhbGlkIGlmIEdMX0FSQl90
ZXh0dXJlX3JlY3RhbmdsZSBleGlzdHMuCisgICAgRWJ0R3VhcmRTYW1wbGVyRW5kLCAgICAvLyBu
b24gdHlwZTogIHNlZSBpbXBsZW1lbnRhdGlvbiBvZiBJc1NhbXBsZXIoKQorICAgIEVidFN0cnVj
dCwKKyAgICBFYnRBZGRyZXNzLCAgICAgICAgICAgIC8vIHNob3VsZCBiZSBkZXByZWNhdGVkPz8K
KyAgICBFYnRJbnZhcmlhbnQgICAgICAgICAgLy8gdXNlZCBhcyBhIHR5cGUgd2hlbiBxdWFsaWZ5
aW5nIGEgcHJldmlvdXNseSBkZWNsYXJlZCB2YXJpYWJsZSBhcyBiZWluZyBpbnZhcmlhbnQKK307
CisKK2lubGluZSBjb25zdCBjaGFyKiBnZXRCYXNpY1N0cmluZyhUQmFzaWNUeXBlIHQpCit7Cisg
ICAgc3dpdGNoICh0KQorICAgIHsKKyAgICBjYXNlIEVidFZvaWQ6ICAgICAgICAgICAgICByZXR1
cm4gInZvaWQiOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFYnRGbG9hdDogICAgICAg
ICAgICAgcmV0dXJuICJmbG9hdCI7ICAgICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRWJ0SW50
OiAgICAgICAgICAgICAgIHJldHVybiAiaW50IjsgICAgICAgICAgICAgICBicmVhazsKKyAgICBj
YXNlIEVidEJvb2w6ICAgICAgICAgICAgICByZXR1cm4gImJvb2wiOyAgICAgICAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkQiOyAg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6ICAgICAgIHJldHVybiAic2Ft
cGxlckN1YmUiOyAgICAgICBicmVhazsKKyAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzog
cmV0dXJuICJzYW1wbGVyRXh0ZXJuYWxPRVMiOyBicmVhazsKKyAgICBjYXNlIEVidFNhbXBsZXIy
RFJlY3Q6ICAgICByZXR1cm4gInNhbXBsZXIyRFJlY3QiOyAgICAgYnJlYWs7CisgICAgY2FzZSBF
YnRTdHJ1Y3Q6ICAgICAgICAgICAgcmV0dXJuICJzdHJ1Y3R1cmUiOyAgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgIHJldHVybiAidW5rbm93biB0eXBlIjsKKyAg
ICB9Cit9CisKK2lubGluZSBib29sIElzU2FtcGxlcihUQmFzaWNUeXBlIHR5cGUpCit7CisgICAg
cmV0dXJuIHR5cGUgPiBFYnRHdWFyZFNhbXBsZXJCZWdpbiAmJiB0eXBlIDwgRWJ0R3VhcmRTYW1w
bGVyRW5kOworfQorCisvLworLy8gUXVhbGlmaWVycyBhbmQgYnVpbHQtaW5zLiAgVGhlc2UgYXJl
IG1haW5seSB1c2VkIHRvIHNlZSB3aGF0IGNhbiBiZSByZWFkCisvLyBvciB3cml0dGVuLCBhbmQg
YnkgdGhlIG1hY2hpbmUgZGVwZW5kZW50IHRyYW5zbGF0b3IgdG8ga25vdyB3aGljaCByZWdpc3Rl
cnMKKy8vIHRvIGFsbG9jYXRlIHZhcmlhYmxlcyBpbi4gIFNpbmNlIGJ1aWx0LWlucyB0ZW5kIHRv
IGdvIHRvIGRpZmZlcmVudCByZWdpc3RlcnMKKy8vIHRoYW4gdmFyeWluZyBvciB1bmlmb3JtLCBp
dCBtYWtlcyBzZW5zZSB0aGV5IGFyZSBwZWVycywgbm90IHN1Yi1jbGFzc2VzLgorLy8KK2VudW0g
VFF1YWxpZmllcgoreworICAgIEV2cVRlbXBvcmFyeSwgICAgIC8vIEZvciB0ZW1wb3JhcmllcyAo
d2l0aGluIGEgZnVuY3Rpb24pLCByZWFkL3dyaXRlCisgICAgRXZxR2xvYmFsLCAgICAgICAgLy8g
Rm9yIGdsb2JhbHMgcmVhZC93cml0ZQorICAgIEV2cUludGVybmFsLCAgICAgIC8vIEZvciBpbnRl
cm5hbCB1c2UsIG5vdCB2aXNpYmxlIHRvIHRoZSB1c2VyCisgICAgRXZxQ29uc3QsICAgICAgICAg
Ly8gVXNlciBkZWZpbmVkIGNvbnN0YW50cyBhbmQgbm9uLW91dHB1dCBwYXJhbWV0ZXJzIGluIGZ1
bmN0aW9ucworICAgIEV2cUF0dHJpYnV0ZSwgICAgIC8vIFJlYWRvbmx5CisgICAgRXZxVmFyeWlu
Z0luLCAgICAgLy8gcmVhZG9ubHksIGZyYWdtZW50IHNoYWRlcnMgb25seQorICAgIEV2cVZhcnlp
bmdPdXQsICAgIC8vIHZlcnRleCBzaGFkZXJzIG9ubHkgIHJlYWQvd3JpdGUKKyAgICBFdnFJbnZh
cmlhbnRWYXJ5aW5nSW4sICAgICAvLyByZWFkb25seSwgZnJhZ21lbnQgc2hhZGVycyBvbmx5Cisg
ICAgRXZxSW52YXJpYW50VmFyeWluZ091dCwgICAgLy8gdmVydGV4IHNoYWRlcnMgb25seSAgcmVh
ZC93cml0ZQorICAgIEV2cVVuaWZvcm0sICAgICAgIC8vIFJlYWRvbmx5LCB2ZXJ0ZXggYW5kIGZy
YWdtZW50CisKKyAgICAvLyBwYXJhbWV0ZXJzCisgICAgRXZxSW4sCisgICAgRXZxT3V0LAorICAg
IEV2cUluT3V0LAorICAgIEV2cUNvbnN0UmVhZE9ubHksCisKKyAgICAvLyBidWlsdC1pbnMgd3Jp
dHRlbiBieSB2ZXJ0ZXggc2hhZGVyCisgICAgRXZxUG9zaXRpb24sCisgICAgRXZxUG9pbnRTaXpl
LAorCisgICAgLy8gYnVpbHQtaW5zIHJlYWQgYnkgZnJhZ21lbnQgc2hhZGVyCisgICAgRXZxRnJh
Z0Nvb3JkLAorICAgIEV2cUZyb250RmFjaW5nLAorICAgIEV2cVBvaW50Q29vcmQsCisKKyAgICAv
LyBidWlsdC1pbnMgd3JpdHRlbiBieSBmcmFnbWVudCBzaGFkZXIKKyAgICBFdnFGcmFnQ29sb3Is
CisgICAgRXZxRnJhZ0RhdGEsCisgICAgRXZxRnJhZ0RlcHRoLAorCisgICAgLy8gZW5kIG9mIGxp
c3QKKyAgICBFdnFMYXN0Cit9OworCisvLworLy8gVGhpcyBpcyBqdXN0IGZvciBkZWJ1ZyBwcmlu
dCBvdXQsIGNhcnJpZWQgYWxvbmcgd2l0aCB0aGUgZGVmaW5pdGlvbnMgYWJvdmUuCisvLworaW5s
aW5lIGNvbnN0IGNoYXIqIGdldFF1YWxpZmllclN0cmluZyhUUXVhbGlmaWVyIHEpCit7CisgICAg
c3dpdGNoKHEpCisgICAgeworICAgIGNhc2UgRXZxVGVtcG9yYXJ5OiAgICAgIHJldHVybiAiVGVt
cG9yYXJ5IjsgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUdsb2JhbDogICAgICAgICByZXR1cm4g
Ikdsb2JhbCI7ICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFDb25zdDogICAgICAgICAgcmV0
dXJuICJjb25zdCI7ICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxQ29uc3RSZWFkT25seTog
IHJldHVybiAiY29uc3QiOyAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUF0dHJpYnV0ZTog
ICAgICByZXR1cm4gImF0dHJpYnV0ZSI7ICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFWYXJ5aW5n
SW46ICAgICAgcmV0dXJuICJ2YXJ5aW5nIjsgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxVmFy
eWluZ091dDogICAgIHJldHVybiAidmFyeWluZyI7ICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2
cUludmFyaWFudFZhcnlpbmdJbjogcmV0dXJuICJpbnZhcmlhbnQgdmFyeWluZyI7CWJyZWFrOwor
ICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWluZ091dDpyZXR1cm4gImludmFyaWFudCB2YXJ5aW5n
IjsJYnJlYWs7CisgICAgY2FzZSBFdnFVbmlmb3JtOiAgICAgICAgcmV0dXJuICJ1bmlmb3JtIjsg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxSW46ICAgICAgICAgICAgIHJldHVybiAiaW4iOyAg
ICAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cU91dDogICAgICAgICAgICByZXR1cm4gIm91
dCI7ICAgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFJbk91dDogICAgICAgICAgcmV0dXJu
ICJpbm91dCI7ICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxUG9zaXRpb246ICAgICAgIHJl
dHVybiAiUG9zaXRpb24iOyAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cVBvaW50U2l6ZTogICAg
ICByZXR1cm4gIlBvaW50U2l6ZSI7ICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFGcmFnQ29vcmQ6
ICAgICAgcmV0dXJuICJGcmFnQ29vcmQiOyAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxRnJvbnRG
YWNpbmc6ICAgIHJldHVybiAiRnJvbnRGYWNpbmciOyAgICBicmVhazsKKyAgICBjYXNlIEV2cUZy
YWdDb2xvcjogICAgICByZXR1cm4gIkZyYWdDb2xvciI7ICAgICAgYnJlYWs7CisgICAgY2FzZSBF
dnFGcmFnRGF0YTogICAgICAgcmV0dXJuICJGcmFnRGF0YSI7ICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBFdnFGcmFnRGVwdGg6ICAgICAgcmV0dXJuICJGcmFnRGVwdGgiOyAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDogICAgICAgICAgICAgICAgcmV0dXJuICJ1bmtub3duIHF1YWxpZmllciI7CisgICAg
fQorfQorCisjZW5kaWYgLy8gX0JBU0lDVFlQRVNfSU5DTFVERURfCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9CdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTJiNzFjNmJk
YjE3MzdjMDEyYjY5NmQ1ZmQ5MGVmMDM3Mjc1Y2NlZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0J1aWx0SW5GdW5jdGlv
bkVtdWxhdG9yLmNwcApAQCAtMCwwICsxLDQwNiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCIKKwor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuaCIKKworbmFtZXNwYWNl
IHsKKworLy8gd2UgdXNlIG1hY3JvcyBoZXJlIGluc3RlYWQgb2YgZnVuY3Rpb24gZGVmaW5pdGlv
bnMgdG8gd29yayBhcm91bmQgbW9yZSBHTFNMCisvLyBjb21waWxlciBidWdzLCBpbiBwYXJ0aWN1
bGFyIG9uIE5WSURJQSBoYXJkd2FyZSBvbiBNYWMgT1NYLiBNYWNyb3MgYXJlCisvLyBwcm9ibGVt
YXRpYyBiZWNhdXNlIGlmIHRoZSBhcmd1bWVudCBoYXMgc2lkZS1lZmZlY3RzIHRoZXkgd2lsbCBi
ZSByZXBlYXRlZGx5CisvLyBldmFsdWF0ZWQuIFRoaXMgaXMgdW5saWtlbHkgdG8gc2hvdyB1cCBp
biByZWFsIHNoYWRlcnMsIGJ1dCBpcyBzb21ldGhpbmcgdG8KKy8vIGNvbnNpZGVyLgorY29uc3Qg
Y2hhcioga0Z1bmN0aW9uRW11bGF0aW9uVmVydGV4U291cmNlW10gPSB7CisgICAgIiNlcnJvciBu
byBlbXVsYXRpb24gZm9yIGNvcyhmbG9hdCkiLAorICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZv
ciBjb3ModmVjMikiLAorICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBjb3ModmVjMykiLAor
ICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBjb3ModmVjNCkiLAorCisgICAgIiNkZWZpbmUg
d2ViZ2xfZGlzdGFuY2VfZW11KHgsIHkpICgoeCkgPj0gKHkpID8gKHgpIC0gKHkpIDogKHkpIC0g
KHgpKSIsCisgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRpc3RhbmNlKHZlYzIsIHZlYzIp
IiwKKyAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UodmVjMywgdmVjMykiLAor
ICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkaXN0YW5jZSh2ZWM0LCB2ZWM0KSIsCisKKyAg
ICAiI2RlZmluZSB3ZWJnbF9kb3RfZW11KHgsIHkpICgoeCkgKiAoeSkpIiwKKyAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgZG90KHZlYzIsIHZlYzIpIiwKKyAgICAiI2Vycm9yIG5vIGVtdWxh
dGlvbiBmb3IgZG90KHZlYzMsIHZlYzMpIiwKKyAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Ig
ZG90KHZlYzQsIHZlYzQpIiwKKworICAgICIjZGVmaW5lIHdlYmdsX2xlbmd0aF9lbXUoeCkgKCh4
KSA+PSAwLjAgPyAoeCkgOiAtKHgpKSIsCisgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxl
bmd0aCh2ZWMyKSIsCisgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2ZWMzKSIs
CisgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2ZWM0KSIsCisKKyAgICAiI2Rl
ZmluZSB3ZWJnbF9ub3JtYWxpemVfZW11KHgpICgoeCkgPT0gMC4wID8gMC4wIDogKCh4KSA+IDAu
MCA/IDEuMCA6IC0xLjApKSIsCisgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6
ZSh2ZWMyKSIsCisgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2ZWMzKSIs
CisgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2ZWM0KSIsCisKKyAgICAi
I2RlZmluZSB3ZWJnbF9yZWZsZWN0X2VtdShJLCBOKSAoKEkpIC0gMi4wICogKE4pICogKEkpICog
KE4pKSIsCisgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIHJlZmxlY3QodmVjMiwgdmVjMiki
LAorICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciByZWZsZWN0KHZlYzMsIHZlYzMpIiwKKyAg
ICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgcmVmbGVjdCh2ZWM0LCB2ZWM0KSIKK307CisKK2Nv
bnN0IGNoYXIqIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50U291cmNlW10gPSB7CisgICAgIndl
YmdsX2VtdV9wcmVjaXNpb24gZmxvYXQgd2ViZ2xfY29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9u
IGZsb2F0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCisgICAgIndlYmdsX2VtdV9wcmVjaXNpb24g
dmVjMiB3ZWJnbF9jb3NfZW11KHdlYmdsX2VtdV9wcmVjaXNpb24gdmVjMiBhKSB7IHJldHVybiBj
b3MoYSk7IH0iLAorICAgICJ3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzMgd2ViZ2xfY29zX2VtdSh3
ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzMgYSkgeyByZXR1cm4gY29zKGEpOyB9IiwKKyAgICAid2Vi
Z2xfZW11X3ByZWNpc2lvbiB2ZWM0IHdlYmdsX2Nvc19lbXUod2ViZ2xfZW11X3ByZWNpc2lvbiB2
ZWM0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCisKKyAgICAiI2RlZmluZSB3ZWJnbF9kaXN0YW5j
ZV9lbXUoeCwgeSkgKCh4KSA+PSAoeSkgPyAoeCkgLSAoeSkgOiAoeSkgLSAoeCkpIiwKKyAgICAi
I2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UodmVjMiwgdmVjMikiLAorICAgICIjZXJy
b3Igbm8gZW11bGF0aW9uIGZvciBkaXN0YW5jZSh2ZWMzLCB2ZWMzKSIsCisgICAgIiNlcnJvciBu
byBlbXVsYXRpb24gZm9yIGRpc3RhbmNlKHZlYzQsIHZlYzQpIiwKKworICAgICIjZGVmaW5lIHdl
YmdsX2RvdF9lbXUoeCwgeSkgKCh4KSAqICh5KSkiLAorICAgICIjZXJyb3Igbm8gZW11bGF0aW9u
IGZvciBkb3QodmVjMiwgdmVjMikiLAorICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3Qo
dmVjMywgdmVjMykiLAorICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjNCwgdmVj
NCkiLAorCisgICAgIiNkZWZpbmUgd2ViZ2xfbGVuZ3RoX2VtdSh4KSAoKHgpID49IDAuMCA/ICh4
KSA6IC0oeCkpIiwKKyAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3RoKHZlYzIpIiwK
KyAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3RoKHZlYzMpIiwKKyAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3RoKHZlYzQpIiwKKworICAgICIjZGVmaW5lIHdlYmdsX25v
cm1hbGl6ZV9lbXUoeCkgKCh4KSA9PSAwLjAgPyAwLjAgOiAoKHgpID4gMC4wID8gMS4wIDogLTEu
MCkpIiwKKyAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzIpIiwKKyAg
ICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzMpIiwKKyAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzQpIiwKKworICAgICIjZGVmaW5lIHdlYmds
X3JlZmxlY3RfZW11KEksIE4pICgoSSkgLSAyLjAgKiAoTikgKiAoSSkgKiAoTikpIiwKKyAgICAi
I2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgcmVmbGVjdCh2ZWMyLCB2ZWMyKSIsCisgICAgIiNlcnJv
ciBubyBlbXVsYXRpb24gZm9yIHJlZmxlY3QodmVjMywgdmVjMykiLAorICAgICIjZXJyb3Igbm8g
ZW11bGF0aW9uIGZvciByZWZsZWN0KHZlYzQsIHZlYzQpIgorfTsKKworY29uc3QgYm9vbCBrRnVu
Y3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7CisjaWYgZGVmaW5lZChfX0FQUExFX18pCisg
ICAgLy8gV29yayBhcm91bmQgQVRJIGRyaXZlciBidWdzIGluIE1hYy4KKyAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uQ29zMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MyCisgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkNvczMKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zNAorICAgIHRydWUsICAv
LyBURnVuY3Rpb25EaXN0YW5jZTFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTJf
MgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTNfMworICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25EaXN0YW5jZTRfNAorICAgIHRydWUsICAvLyBURnVuY3Rpb25Eb3QxXzEKKyAgICBmYWxz
ZSwgLy8gVEZ1bmN0aW9uRG90Ml8yCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDNfMworICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25Eb3Q0XzQKKyAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uTGVuZ3Ro
MQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgyCisgICAgZmFsc2UsIC8vIFRGdW5jdGlv
bkxlbmd0aDMKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoNAorICAgIHRydWUsICAvLyBU
RnVuY3Rpb25Ob3JtYWxpemUxCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTIKKyAg
ICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25O
b3JtYWxpemU0CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvblJlZmxlY3QxXzEKKyAgICBmYWxzZSwg
Ly8gVEZ1bmN0aW9uUmVmbGVjdDJfMgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0M18z
CisgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3Q0XzQKKyNlbHNlCisgICAgLy8gV29yayBh
cm91bmQgRDNEIGRyaXZlciBidWcgaW4gV2luLgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3Mx
CisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29z
MworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3M0CisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRp
c3RhbmNlMV8xCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlMl8yCisgICAgZmFsc2Us
IC8vIFRGdW5jdGlvbkRpc3RhbmNlM18zCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNl
NF80CisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rp
b25Eb3QyXzIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90M18zCisgICAgZmFsc2UsIC8vIFRG
dW5jdGlvbkRvdDRfNAorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgxCisgICAgZmFsc2Us
IC8vIFRGdW5jdGlvbkxlbmd0aDIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMworICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0CisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1h
bGl6ZTEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMgorICAgIGZhbHNlLCAvLyBU
RnVuY3Rpb25Ob3JtYWxpemUzCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTQKKyAg
ICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25S
ZWZsZWN0Ml8yCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QzXzMKKyAgICBmYWxzZSwg
Ly8gVEZ1bmN0aW9uUmVmbGVjdDRfNAorI2VuZGlmCisgICAgZmFsc2UgIC8vIFRGdW5jdGlvblVu
a25vd24KK307CisKK2NvbnN0IGJvb2wga0Z1bmN0aW9uRW11bGF0aW9uRnJhZ21lbnRNYXNrW10g
PSB7CisjaWYgZGVmaW5lZChfX0FQUExFX18pCisgICAgLy8gV29yayBhcm91bmQgQVRJIGRyaXZl
ciBidWdzIGluIE1hYy4KKyAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uQ29zMQorICAgIHRydWUsICAv
LyBURnVuY3Rpb25Db3MyCisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczMKKyAgICB0cnVlLCAg
Ly8gVEZ1bmN0aW9uQ29zNAorICAgIHRydWUsICAvLyBURnVuY3Rpb25EaXN0YW5jZTFfMQorICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTJfMgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25E
aXN0YW5jZTNfMworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTRfNAorICAgIHRydWUs
ICAvLyBURnVuY3Rpb25Eb3QxXzEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90Ml8yCisgICAg
ZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDNfMworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3Q0XzQK
KyAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uTGVuZ3RoMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25M
ZW5ndGgyCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDMKKyAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uTGVuZ3RoNAorICAgIHRydWUsICAvLyBURnVuY3Rpb25Ob3JtYWxpemUxCisgICAgZmFs
c2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFs
aXplMworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemU0CisgICAgdHJ1ZSwgIC8vIFRG
dW5jdGlvblJlZmxlY3QxXzEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDJfMgorICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0M18zCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJl
ZmxlY3Q0XzQKKyNlbHNlCisgICAgLy8gV29yayBhcm91bmQgRDNEIGRyaXZlciBidWcgaW4gV2lu
LgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MxCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNv
czIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25D
b3M0CisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlMV8xCisgICAgZmFsc2UsIC8vIFRG
dW5jdGlvbkRpc3RhbmNlMl8yCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlM18zCisg
ICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlNF80CisgICAgZmFsc2UsIC8vIFRGdW5jdGlv
bkRvdDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3QyXzIKKyAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uRG90M18zCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDRfNAorICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25MZW5ndGgxCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKKyAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0
CisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uTm9ybWFsaXplMgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUzCisgICAgZmFs
c2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTQKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVj
dDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0Ml8yCisgICAgZmFsc2UsIC8vIFRG
dW5jdGlvblJlZmxlY3QzXzMKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDRfNAorI2Vu
ZGlmCisgICAgZmFsc2UgIC8vIFRGdW5jdGlvblVua25vd24KK307CisKK2NsYXNzIEJ1aWx0SW5G
dW5jdGlvbkVtdWxhdGlvbk1hcmtlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKK3B1Ymxp
YzoKKyAgICBCdWlsdEluRnVuY3Rpb25FbXVsYXRpb25NYXJrZXIoQnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3ImIGVtdWxhdG9yKQorICAgICAgICA6IG1FbXVsYXRvcihlbXVsYXRvcikKKyAgICB7Cisg
ICAgfQorCisgICAgdmlydHVhbCBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1V
bmFyeSogbm9kZSkKKyAgICB7CisgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkgeworICAg
ICAgICAgICAgYm9vbCBuZWVkVG9FbXVsYXRlID0gbUVtdWxhdG9yLlNldEZ1bmN0aW9uQ2FsbGVk
KAorICAgICAgICAgICAgICAgIG5vZGUtPmdldE9wKCksIG5vZGUtPmdldE9wZXJhbmQoKS0+Z2V0
VHlwZSgpKTsKKyAgICAgICAgICAgIGlmIChuZWVkVG9FbXVsYXRlKQorICAgICAgICAgICAgICAg
IG5vZGUtPnNldFVzZUVtdWxhdGVkRnVuY3Rpb24oKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQg
dmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCisgICAgeworICAgICAgICBpZiAodmlzaXQg
PT0gUHJlVmlzaXQpIHsKKyAgICAgICAgICAgIC8vIEhlcmUgd2UgaGFuZGxlIGFsbCB0aGUgYnVp
bHQtaW4gZnVuY3Rpb25zIGluc3RlYWQgb2YgdGhlIG9uZXMgd2UKKyAgICAgICAgICAgIC8vIGN1
cnJlbnRseSBpZGVudGlmaWVkIGFzIHByb2JsZW1hdGljLgorICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5nZXRPcCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjoKKyAgICAg
ICAgICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgorICAgICAgICAgICAgICAgIGNhc2UgRU9w
TGVzc1RoYW5FcXVhbDoKKyAgICAgICAgICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6
CisgICAgICAgICAgICAgICAgY2FzZSBFT3BWZWN0b3JFcXVhbDoKKyAgICAgICAgICAgICAgICBj
YXNlIEVPcFZlY3Rvck5vdEVxdWFsOgorICAgICAgICAgICAgICAgIGNhc2UgRU9wTW9kOgorICAg
ICAgICAgICAgICAgIGNhc2UgRU9wUG93OgorICAgICAgICAgICAgICAgIGNhc2UgRU9wQXRhbjoK
KyAgICAgICAgICAgICAgICBjYXNlIEVPcE1pbjoKKyAgICAgICAgICAgICAgICBjYXNlIEVPcE1h
eDoKKyAgICAgICAgICAgICAgICBjYXNlIEVPcENsYW1wOgorICAgICAgICAgICAgICAgIGNhc2Ug
RU9wTWl4OgorICAgICAgICAgICAgICAgIGNhc2UgRU9wU3RlcDoKKyAgICAgICAgICAgICAgICBj
YXNlIEVPcFNtb290aFN0ZXA6CisgICAgICAgICAgICAgICAgY2FzZSBFT3BEaXN0YW5jZToKKyAg
ICAgICAgICAgICAgICBjYXNlIEVPcERvdDoKKyAgICAgICAgICAgICAgICBjYXNlIEVPcENyb3Nz
OgorICAgICAgICAgICAgICAgIGNhc2UgRU9wRmFjZUZvcndhcmQ6CisgICAgICAgICAgICAgICAg
Y2FzZSBFT3BSZWZsZWN0OgorICAgICAgICAgICAgICAgIGNhc2UgRU9wUmVmcmFjdDoKKyAgICAg
ICAgICAgICAgICBjYXNlIEVPcE11bDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICB9OworICAgICAgICAgICAgY29uc3QgVEludGVybVNlcXVlbmNlJiBzZXF1ZW5j
ZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAgICAvLyBSaWdodCBub3cgd2Ugb25s
eSBoYW5kbGUgYnVpbHQtaW4gZnVuY3Rpb25zIHdpdGggdHdvIHBhcmFtZXRlcnMuCisgICAgICAg
ICAgICBpZiAoc2VxdWVuY2Uuc2l6ZSgpICE9IDIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIHBhcmFtMSA9IHNlcXVlbmNlWzBdLT5nZXRB
c1R5cGVkKCk7CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIHBhcmFtMiA9IHNlcXVlbmNlWzFd
LT5nZXRBc1R5cGVkKCk7CisgICAgICAgICAgICBpZiAoIXBhcmFtMSB8fCAhcGFyYW0yKQorICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgYm9vbCBuZWVkVG9FbXVsYXRl
ID0gbUVtdWxhdG9yLlNldEZ1bmN0aW9uQ2FsbGVkKAorICAgICAgICAgICAgICAgIG5vZGUtPmdl
dE9wKCksIHBhcmFtMS0+Z2V0VHlwZSgpLCBwYXJhbTItPmdldFR5cGUoKSk7CisgICAgICAgICAg
ICBpZiAobmVlZFRvRW11bGF0ZSkKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRVc2VFbXVsYXRl
ZEZ1bmN0aW9uKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitw
cml2YXRlOgorICAgIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yJiBtRW11bGF0b3I7Cit9OworCit9
ICAvLyBhbm9ueW1vdXMgbmFtZXBzYWNlCisKK0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpCdWls
dEluRnVuY3Rpb25FbXVsYXRvcihTaFNoYWRlclR5cGUgc2hhZGVyVHlwZSkKK3sKKyAgICBpZiAo
c2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpIHsKKyAgICAgICAgbUZ1bmN0aW9uTWFz
ayA9IGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50TWFzazsKKyAgICAgICAgbUZ1bmN0aW9uU291
cmNlID0ga0Z1bmN0aW9uRW11bGF0aW9uRnJhZ21lbnRTb3VyY2U7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgbUZ1bmN0aW9uTWFzayA9IGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2s7CisgICAg
ICAgIG1GdW5jdGlvblNvdXJjZSA9IGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleFNvdXJjZTsKKyAg
ICB9Cit9CisKK2Jvb2wgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OlNldEZ1bmN0aW9uQ2FsbGVk
KAorICAgIFRPcGVyYXRvciBvcCwgY29uc3QgVFR5cGUmIHBhcmFtKQoreworICAgIFRCdWlsdElu
RnVuY3Rpb24gZnVuY3Rpb24gPSBJZGVudGlmeUZ1bmN0aW9uKG9wLCBwYXJhbSk7CisgICAgcmV0
dXJuIFNldEZ1bmN0aW9uQ2FsbGVkKGZ1bmN0aW9uKTsKK30KKworYm9vbCBCdWlsdEluRnVuY3Rp
b25FbXVsYXRvcjo6U2V0RnVuY3Rpb25DYWxsZWQoCisgICAgVE9wZXJhdG9yIG9wLCBjb25zdCBU
VHlwZSYgcGFyYW0xLCBjb25zdCBUVHlwZSYgcGFyYW0yKQoreworICAgIFRCdWlsdEluRnVuY3Rp
b24gZnVuY3Rpb24gPSBJZGVudGlmeUZ1bmN0aW9uKG9wLCBwYXJhbTEsIHBhcmFtMik7CisgICAg
cmV0dXJuIFNldEZ1bmN0aW9uQ2FsbGVkKGZ1bmN0aW9uKTsKK30KKworYm9vbCBCdWlsdEluRnVu
Y3Rpb25FbXVsYXRvcjo6U2V0RnVuY3Rpb25DYWxsZWQoCisgICAgQnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3I6OlRCdWlsdEluRnVuY3Rpb24gZnVuY3Rpb24pIHsKKyAgICBpZiAoZnVuY3Rpb24gPT0g
VEZ1bmN0aW9uVW5rbm93biB8fCBtRnVuY3Rpb25NYXNrW2Z1bmN0aW9uXSA9PSBmYWxzZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUZ1bmN0aW9u
cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobUZ1bmN0aW9uc1tpXSA9PSBmdW5jdGlvbikK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBtRnVuY3Rpb25zLnB1c2hfYmFj
ayhmdW5jdGlvbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3I6Ok91dHB1dEVtdWxhdGVkRnVuY3Rpb25EZWZpbml0aW9uKAorICAgIFRJbmZvU2lu
a0Jhc2UmIG91dCwgYm9vbCB3aXRoUHJlY2lzaW9uKSBjb25zdAoreworICAgIGlmIChtRnVuY3Rp
b25zLnNpemUoKSA9PSAwKQorICAgICAgICByZXR1cm47CisgICAgb3V0IDw8ICIvLyBCRUdJTjog
R2VuZXJhdGVkIGNvZGUgZm9yIGJ1aWx0LWluIGZ1bmN0aW9uIGVtdWxhdGlvblxuXG4iOworICAg
IGlmICh3aXRoUHJlY2lzaW9uKSB7CisgICAgICAgIG91dCA8PCAiI2lmIGRlZmluZWQoR0xfRlJB
R01FTlRfUFJFQ0lTSU9OX0hJR0gpXG4iCisgICAgICAgICAgICA8PCAiI2RlZmluZSB3ZWJnbF9l
bXVfcHJlY2lzaW9uIGhpZ2hwXG4iCisgICAgICAgICAgICA8PCAiI2Vsc2VcbiIKKyAgICAgICAg
ICAgIDw8ICIjZGVmaW5lIHdlYmdsX2VtdV9wcmVjaXNpb24gbWVkaXVtcFxuIgorICAgICAgICAg
ICAgPDwgIiNlbmRpZlxuXG4iOworICAgIH0gZWxzZSB7CisgICAgICAgIG91dCA8PCAiI2RlZmlu
ZSB3ZWJnbF9lbXVfcHJlY2lzaW9uXG5cbiI7CisgICAgfQorICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbUZ1bmN0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBvdXQgPDwgbUZ1bmN0aW9u
U291cmNlW21GdW5jdGlvbnNbaV1dIDw8ICJcblxuIjsKKyAgICB9CisgICAgb3V0IDw8ICIvLyBF
TkQ6IEdlbmVyYXRlZCBjb2RlIGZvciBidWlsdC1pbiBmdW5jdGlvbiBlbXVsYXRpb25cblxuIjsK
K30KKworQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OlRCdWlsdEluRnVuY3Rpb24KK0J1aWx0SW5G
dW5jdGlvbkVtdWxhdG9yOjpJZGVudGlmeUZ1bmN0aW9uKAorICAgIFRPcGVyYXRvciBvcCwgY29u
c3QgVFR5cGUmIHBhcmFtKQoreworICAgIGlmIChwYXJhbS5nZXROb21pbmFsU2l6ZSgpID4gNCkK
KyAgICAgICAgcmV0dXJuIFRGdW5jdGlvblVua25vd247CisgICAgdW5zaWduZWQgaW50IGZ1bmN0
aW9uID0gVEZ1bmN0aW9uVW5rbm93bjsKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2Ug
RU9wQ29zOgorICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25Db3MxOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTGVuZ3RoOgorICAgICAgICAgICAgZnVuY3Rpb24g
PSBURnVuY3Rpb25MZW5ndGgxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
Tm9ybWFsaXplOgorICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25Ob3JtYWxpemUxOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsK
KyAgICB9CisgICAgaWYgKGZ1bmN0aW9uID09IFRGdW5jdGlvblVua25vd24pCisgICAgICAgIHJl
dHVybiBURnVuY3Rpb25Vbmtub3duOworICAgIGlmIChwYXJhbS5pc1ZlY3RvcigpKQorICAgICAg
ICBmdW5jdGlvbiArPSBwYXJhbS5nZXROb21pbmFsU2l6ZSgpIC0gMTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8VEJ1aWx0SW5GdW5jdGlvbj4oZnVuY3Rpb24pOworfQorCitCdWlsdEluRnVuY3Rp
b25FbXVsYXRvcjo6VEJ1aWx0SW5GdW5jdGlvbgorQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6Oklk
ZW50aWZ5RnVuY3Rpb24oCisgICAgVE9wZXJhdG9yIG9wLCBjb25zdCBUVHlwZSYgcGFyYW0xLCBj
b25zdCBUVHlwZSYgcGFyYW0yKQoreworICAgIC8vIFJpZ2h0IG5vdyBmb3IgYWxsIHRoZSBlbXVs
YXRlZCBmdW5jdGlvbnMgd2l0aCB0d28gcGFyYW1ldGVycywgdGhlIHR3bworICAgIC8vIHBhcmFt
ZXRlcnMgaGF2ZSB0aGUgc2FtZSB0eXBlLgorICAgIGlmIChwYXJhbTEuaXNWZWN0b3IoKSAhPSBw
YXJhbTIuaXNWZWN0b3IoKSB8fAorICAgICAgICBwYXJhbTEuZ2V0Tm9taW5hbFNpemUoKSAhPSBw
YXJhbTIuZ2V0Tm9taW5hbFNpemUoKSB8fAorICAgICAgICBwYXJhbTEuZ2V0Tm9taW5hbFNpemUo
KSA+IDQpCisgICAgICAgIHJldHVybiBURnVuY3Rpb25Vbmtub3duOworCisgICAgdW5zaWduZWQg
aW50IGZ1bmN0aW9uID0gVEZ1bmN0aW9uVW5rbm93bjsKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAg
ICAgIGNhc2UgRU9wRGlzdGFuY2U6CisgICAgICAgICAgICBmdW5jdGlvbiA9IFRGdW5jdGlvbkRp
c3RhbmNlMV8xOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRG90OgorICAg
ICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25Eb3QxXzE7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BSZWZsZWN0OgorICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rp
b25SZWZsZWN0MV8xOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKGZ1bmN0aW9uID09IFRGdW5jdGlvblVua25v
d24pCisgICAgICAgIHJldHVybiBURnVuY3Rpb25Vbmtub3duOworICAgIGlmIChwYXJhbTEuaXNW
ZWN0b3IoKSkKKyAgICAgICAgZnVuY3Rpb24gKz0gcGFyYW0xLmdldE5vbWluYWxTaXplKCkgLSAx
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUQnVpbHRJbkZ1bmN0aW9uPihmdW5jdGlvbik7Cit9
CisKK3ZvaWQgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6Ok1hcmtCdWlsdEluRnVuY3Rpb25zRm9y
RW11bGF0aW9uKAorICAgIFRJbnRlcm1Ob2RlKiByb290KQoreworICAgIEFTU0VSVChyb290KTsK
KworICAgIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdGlvbk1hcmtlciBtYXJrZXIoKnRoaXMpOworICAg
IHJvb3QtPnRyYXZlcnNlKCZtYXJrZXIpOworfQorCit2b2lkIEJ1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yOjpDbGVhbnVwKCkKK3sKKyAgICBtRnVuY3Rpb25zLmNsZWFyKCk7Cit9CisKKy8vc3RhdGlj
CitUU3RyaW5nIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpHZXRFbXVsYXRlZEZ1bmN0aW9uTmFt
ZSgKKyAgICBjb25zdCBUU3RyaW5nJiBuYW1lKQoreworICAgIEFTU0VSVChuYW1lW25hbWUubGVu
Z3RoKCkgLSAxXSA9PSAnKCcpOworICAgIHJldHVybiAid2ViZ2xfIiArIG5hbWUuc3Vic3RyKDAs
IG5hbWUubGVuZ3RoKCkgLSAxKSArICJfZW11KCI7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0J1aWx0SW5GdW5jdGlvbkVt
dWxhdG9yLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNmYjcxYTgwM2FjYzdkMjgz
NGJmNDBmNDlmZDlmOGFiYjI0NjlkMzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9CdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5oCkBAIC0wLDAgKzEsOTMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTElFUl9C
VUlMVF9JTl9GVU5DVElPTl9FTVVMQVRPUl9IXworI2RlZmluZSBDT01QSUxJRVJfQlVJTFRfSU5f
RlVOQ1RJT05fRU1VTEFUT1JfSF8KKworI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgor
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisKKy8vCisvLyBUaGlzIGNsYXNzIGRl
Y2lkZXMgd2hpY2ggYnVpbHQtaW4gZnVuY3Rpb25zIG5lZWQgdG8gYmUgcmVwbGFjZWQgd2l0aCB0
aGUKKy8vIGVtdWxhdGVkIG9uZXMuCisvLyBJdCdzIG9ubHkgYSB3b3JrYXJvdW5kIGZvciBPcGVu
R0wgZHJpdmVyIGJ1Z3MsIGFuZCBpc24ndCBuZWVkZWQgaW4gZ2VuZXJhbC4KKy8vCitjbGFzcyBC
dWlsdEluRnVuY3Rpb25FbXVsYXRvciB7CitwdWJsaWM6CisgICAgQnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3IoU2hTaGFkZXJUeXBlIHNoYWRlclR5cGUpOworICAgIC8vIFJlY29yZHMgdGhhdCBhIGZ1
bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgc2hhZGVyIGFuZCBtaWdodCBuZWVkcyB0byBiZQorICAg
IC8vIGVtdWxhdGVkLiAgSWYgdGhlIGZ1bmN0aW9uJ3MgZ3JvdXAgaXMgbm90IGluIG1GdW5jdGlv
bkdyb3VwRmlsdGVyLCB0aGlzCisgICAgLy8gYmVjb21lcyBhbiBuby1vcC4KKyAgICAvLyBSZXR1
cm5zIHRydWUgaWYgdGhlIGZ1bmN0aW9uIGNhbGwgbmVlZHMgdG8gYmUgcmVwbGFjZWQgd2l0aCBh
biBlbXVsYXRlZAorICAgIC8vIG9uZS4KKyAgICBib29sIFNldEZ1bmN0aW9uQ2FsbGVkKFRPcGVy
YXRvciBvcCwgY29uc3QgVFR5cGUmIHBhcmFtKTsKKyAgICBib29sIFNldEZ1bmN0aW9uQ2FsbGVk
KAorICAgICAgICBUT3BlcmF0b3Igb3AsIGNvbnN0IFRUeXBlJiBwYXJhbTEsIGNvbnN0IFRUeXBl
JiBwYXJhbTIpOworCisgICAgLy8gT3V0cHV0IGZ1bmN0aW9uIGVtdWxhdGlvbiBkZWZpbml0aW9u
LiAgVGhpcyBzaG91bGQgYmUgYmVmb3JlIGFueSBvdGhlcgorICAgIC8vIHNoYWRlciBzb3VyY2Uu
CisgICAgdm9pZCBPdXRwdXRFbXVsYXRlZEZ1bmN0aW9uRGVmaW5pdGlvbihUSW5mb1NpbmtCYXNl
JiBvdXQsIGJvb2wgd2l0aFByZWNpc2lvbikgY29uc3Q7CisKKyAgICB2b2lkIE1hcmtCdWlsdElu
RnVuY3Rpb25zRm9yRW11bGF0aW9uKFRJbnRlcm1Ob2RlKiByb290KTsKKworICAgIHZvaWQgQ2xl
YW51cCgpOworCisgICAgLy8gIm5hbWUoIiBiZWNvbWVzICJ3ZWJnbF9uYW1lX2VtdSgiLgorICAg
IHN0YXRpYyBUU3RyaW5nIEdldEVtdWxhdGVkRnVuY3Rpb25OYW1lKGNvbnN0IFRTdHJpbmcmIG5h
bWUpOworCitwcml2YXRlOgorICAgIC8vCisgICAgLy8gQnVpbHQtaW4gZnVuY3Rpb25zLgorICAg
IC8vCisgICAgZW51bSBUQnVpbHRJbkZ1bmN0aW9uIHsKKyAgICAgICAgVEZ1bmN0aW9uQ29zMSA9
IDAsICAvLyBmbG9hdCBjb3MoZmxvYXQpOworICAgICAgICBURnVuY3Rpb25Db3MyLCAgLy8gdmVj
MiBjb3ModmVjMik7CisgICAgICAgIFRGdW5jdGlvbkNvczMsICAvLyB2ZWMzIGNvcyh2ZWMzKTsK
KyAgICAgICAgVEZ1bmN0aW9uQ29zNCwgIC8vIHZlYzQgY29zKHZlYzQpOworCisgICAgICAgIFRG
dW5jdGlvbkRpc3RhbmNlMV8xLCAgLy8gZmxvYXQgZGlzdGFuY2UoZmxvYXQsIGZsb2F0KTsKKyAg
ICAgICAgVEZ1bmN0aW9uRGlzdGFuY2UyXzIsICAvLyB2ZWMyIGRpc3RhbmNlKHZlYzIsIHZlYzIp
OworICAgICAgICBURnVuY3Rpb25EaXN0YW5jZTNfMywgIC8vIHZlYzMgZGlzdGFuY2UodmVjMywg
dmVjMyk7CisgICAgICAgIFRGdW5jdGlvbkRpc3RhbmNlNF80LCAgLy8gdmVjNCBkaXN0YW5jZSh2
ZWM0LCB2ZWM0KTsKKworICAgICAgICBURnVuY3Rpb25Eb3QxXzEsICAvLyBmbG9hdCBkb3QoZmxv
YXQsIGZsb2F0KTsKKyAgICAgICAgVEZ1bmN0aW9uRG90Ml8yLCAgLy8gdmVjMiBkb3QodmVjMiwg
dmVjMik7CisgICAgICAgIFRGdW5jdGlvbkRvdDNfMywgIC8vIHZlYzMgZG90KHZlYzMsIHZlYzMp
OworICAgICAgICBURnVuY3Rpb25Eb3Q0XzQsICAvLyB2ZWM0IGRvdCh2ZWM0LCB2ZWM0KTsKKwor
ICAgICAgICBURnVuY3Rpb25MZW5ndGgxLCAgLy8gZmxvYXQgbGVuZ3RoKGZsb2F0KTsKKyAgICAg
ICAgVEZ1bmN0aW9uTGVuZ3RoMiwgIC8vIGZsb2F0IGxlbmd0aCh2ZWMyKTsKKyAgICAgICAgVEZ1
bmN0aW9uTGVuZ3RoMywgIC8vIGZsb2F0IGxlbmd0aCh2ZWMzKTsKKyAgICAgICAgVEZ1bmN0aW9u
TGVuZ3RoNCwgIC8vIGZsb2F0IGxlbmd0aCh2ZWM0KTsKKworICAgICAgICBURnVuY3Rpb25Ob3Jt
YWxpemUxLCAgLy8gZmxvYXQgbm9ybWFsaXplKGZsb2F0KTsKKyAgICAgICAgVEZ1bmN0aW9uTm9y
bWFsaXplMiwgIC8vIHZlYzIgbm9ybWFsaXplKHZlYzIpOworICAgICAgICBURnVuY3Rpb25Ob3Jt
YWxpemUzLCAgLy8gdmVjMyBub3JtYWxpemUodmVjMyk7CisgICAgICAgIFRGdW5jdGlvbk5vcm1h
bGl6ZTQsICAvLyB2ZWM0IG5vcm1hbGl6ZSh2ZWM0KTsKKworICAgICAgICBURnVuY3Rpb25SZWZs
ZWN0MV8xLCAgLy8gZmxvYXQgcmVmbGVjdChmbG9hdCwgZmxvYXQpOworICAgICAgICBURnVuY3Rp
b25SZWZsZWN0Ml8yLCAgLy8gdmVjMiByZWZsZWN0KHZlYzIsIHZlYzIpOworICAgICAgICBURnVu
Y3Rpb25SZWZsZWN0M18zLCAgLy8gdmVjMyByZWZsZWN0KHZlYzMsIHZlYzMpOworICAgICAgICBU
RnVuY3Rpb25SZWZsZWN0NF80LCAgLy8gdmVjNCByZWZsZWN0KHZlYzQsIHZlYzQpOworCisgICAg
ICAgIFRGdW5jdGlvblVua25vd24KKyAgICB9OworCisgICAgVEJ1aWx0SW5GdW5jdGlvbiBJZGVu
dGlmeUZ1bmN0aW9uKFRPcGVyYXRvciBvcCwgY29uc3QgVFR5cGUmIHBhcmFtKTsKKyAgICBUQnVp
bHRJbkZ1bmN0aW9uIElkZW50aWZ5RnVuY3Rpb24oCisgICAgICAgIFRPcGVyYXRvciBvcCwgY29u
c3QgVFR5cGUmIHBhcmFtMSwgY29uc3QgVFR5cGUmIHBhcmFtMik7CisKKyAgICBib29sIFNldEZ1
bmN0aW9uQ2FsbGVkKFRCdWlsdEluRnVuY3Rpb24gZnVuY3Rpb24pOworCisgICAgc3RkOjp2ZWN0
b3I8VEJ1aWx0SW5GdW5jdGlvbj4gbUZ1bmN0aW9uczsKKworICAgIGNvbnN0IGJvb2wqIG1GdW5j
dGlvbk1hc2s7ICAvLyBhIGJvb2xlYW4gZmxhZyBmb3IgZWFjaCBmdW5jdGlvbi4KKyAgICBjb25z
dCBjaGFyKiogbUZ1bmN0aW9uU291cmNlOworfTsKKworI2VuZGlmICAvLyBDT01QSUxJRVJfQlVJ
TFRfSU5fRlVOQ1RJT05fRU1VTEFUT1JfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvZGVHZW4uY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29kZUdlbi5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOGY1ZDEyOTEwNDBkMDEzMjMxYzU1YmIyNGE1NjIxOTk0MDgzZDlmNAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Nv
ZGVHZW4uY3BwCkBAIC0wLDAgKzEsMzggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JFU1NMLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yR0xTTC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvckhMU0wuaCIKKworLy8KKy8vIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBw
cm92aWRlZCB0byBjcmVhdGUgdGhlIGFjdHVhbAorLy8gY29tcGlsZSBvYmplY3QgdXNlZCBieSBo
aWdoZXIgbGV2ZWwgY29kZS4gIEl0IHJldHVybnMKKy8vIGEgc3ViY2xhc3Mgb2YgVENvbXBpbGVy
LgorLy8KK1RDb21waWxlciogQ29uc3RydWN0Q29tcGlsZXIoCisgICAgU2hTaGFkZXJUeXBlIHR5
cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBTaFNoYWRlck91dHB1dCBvdXRwdXQpCit7CisgICAgc3dp
dGNoIChvdXRwdXQpIHsKKyAgICAgIGNhc2UgU0hfRVNTTF9PVVRQVVQ6CisgICAgICAgIHJldHVy
biBuZXcgVHJhbnNsYXRvckVTU0wodHlwZSwgc3BlYyk7CisgICAgICBjYXNlIFNIX0dMU0xfT1VU
UFVUOgorICAgICAgICByZXR1cm4gbmV3IFRyYW5zbGF0b3JHTFNMKHR5cGUsIHNwZWMpOworICAg
ICAgY2FzZSBTSF9ITFNMOV9PVVRQVVQ6CisgICAgICBjYXNlIFNIX0hMU0wxMV9PVVRQVVQ6Cisg
ICAgICAgIHJldHVybiBuZXcgVHJhbnNsYXRvckhMU0wodHlwZSwgc3BlYywgb3V0cHV0KTsKKyAg
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKworLy8KKy8vIERl
bGV0ZSB0aGUgY29tcGlsZXIgbWFkZSBieSBDb25zdHJ1Y3RDb21waWxlcgorLy8KK3ZvaWQgRGVs
ZXRlQ29tcGlsZXIoVENvbXBpbGVyKiBjb21waWxlcikKK3sKKyAgICBkZWxldGUgY29tcGlsZXI7
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9Db21tb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL0NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFlNDUwM2UzNDBjZjc0YjIwOWE4MmRjYzU3
ZGMwNDNjMjdkZTk0M2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21tb24uaApAQCAtMCwwICsxLDkyIEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9DT01NT05fSU5DTFVERURfCisjZGVmaW5lIF9DT01N
T05fSU5DTFVERURfCisKKyNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNs
dWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNs
dWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Qb29sQWxsb2Mu
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2NvbXBpbGVyZGVidWcuaCIKKyNpbmNs
dWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorCitzdHJ1Y3QgVFNvdXJjZUxvYyB7CisgICAgaW50
IGZpcnN0X2ZpbGU7CisgICAgaW50IGZpcnN0X2xpbmU7CisgICAgaW50IGxhc3RfZmlsZTsKKyAg
ICBpbnQgbGFzdF9saW5lOworfTsKKworLy8KKy8vIFB1dCBQT09MX0FMTE9DQVRPUl9ORVdfREVM
RVRFIGluIGJhc2UgY2xhc3NlcyB0byBtYWtlIHRoZW0gdXNlIHRoaXMgc2NoZW1lLgorLy8KKyNk
ZWZpbmUgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSgpICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVf
dCBzKSB7IHJldHVybiBHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCktPmFsbG9jYXRlKHMpOyB9ICAg
XAorICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIHZvaWQgKl9XaGVyZSkgeyByZXR1cm4g
KF9XaGVyZSk7IH0gICAgICAgICAgICAgICAgICAgIFwKKyAgICB2b2lkIG9wZXJhdG9yIGRlbGV0
ZSh2b2lkKikgeyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAqLCB2b2lkICopIHsgfSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHZvaWQqIG9wZXJhdG9y
IG5ld1tdKHNpemVfdCBzKSB7IHJldHVybiBHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCktPmFsbG9j
YXRlKHMpOyB9IFwKKyAgICB2b2lkKiBvcGVyYXRvciBuZXdbXShzaXplX3QsIHZvaWQgKl9XaGVy
ZSkgeyByZXR1cm4gKF9XaGVyZSk7IH0gICAgICAgICAgICAgICAgICBcCisgICAgdm9pZCBvcGVy
YXRvciBkZWxldGVbXSh2b2lkKikgeyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCAqLCB2b2lk
ICopIHsgfQorCisvLworLy8gUG9vbCB2ZXJzaW9uIG9mIHN0cmluZy4KKy8vCit0eXBlZGVmIHBv
b2xfYWxsb2NhdG9yPGNoYXI+IFRTdHJpbmdBbGxvY2F0b3I7Cit0eXBlZGVmIHN0ZDo6YmFzaWNf
c3RyaW5nIDxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBUU3RyaW5nQWxsb2NhdG9yPiBU
U3RyaW5nOwordHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJpbmdzdHJlYW08Y2hhciwgc3RkOjpjaGFy
X3RyYWl0czxjaGFyPiwgVFN0cmluZ0FsbG9jYXRvcj4gVFN0cmluZ1N0cmVhbTsKK2lubGluZSBU
U3RyaW5nKiBOZXdQb29sVFN0cmluZyhjb25zdCBjaGFyKiBzKQoreworCXZvaWQqIG1lbW9yeSA9
IEdldEdsb2JhbFBvb2xBbGxvY2F0b3IoKS0+YWxsb2NhdGUoc2l6ZW9mKFRTdHJpbmcpKTsKKwly
ZXR1cm4gbmV3KG1lbW9yeSkgVFN0cmluZyhzKTsKK30KKworLy8KKy8vIFBlcnNpc3RlbnQgc3Ry
aW5nIG1lbW9yeS4gIFNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHN0cmluZ3MgdGhhdCBzdXJ2aXZl
CisvLyBhY3Jvc3MgY29tcGlsZXMuCisvLworI2RlZmluZSBUUGVyc2lzdFN0cmluZyBzdGQ6OnN0
cmluZworI2RlZmluZSBUUGVyc2lzdFN0cmluZ1N0cmVhbSBzdGQ6Om9zdHJpbmdzdHJlYW0KKwor
Ly8KKy8vIFBvb2wgYWxsb2NhdG9yIHZlcnNpb25zIG9mIHZlY3RvcnMsIGxpc3RzLCBhbmQgbWFw
cworLy8KK3RlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBUVmVjdG9yIDogcHVibGljIHN0ZDo6dmVj
dG9yPFQsIHBvb2xfYWxsb2NhdG9yPFQ+ID4geworcHVibGljOgorICAgIHR5cGVkZWYgdHlwZW5h
bWUgc3RkOjp2ZWN0b3I8VCwgcG9vbF9hbGxvY2F0b3I8VD4gPjo6c2l6ZV90eXBlIHNpemVfdHlw
ZTsKKyAgICBUVmVjdG9yKCkgOiBzdGQ6OnZlY3RvcjxULCBwb29sX2FsbG9jYXRvcjxUPiA+KCkg
e30KKyAgICBUVmVjdG9yKGNvbnN0IHBvb2xfYWxsb2NhdG9yPFQ+JiBhKSA6IHN0ZDo6dmVjdG9y
PFQsIHBvb2xfYWxsb2NhdG9yPFQ+ID4oYSkge30KKyAgICBUVmVjdG9yKHNpemVfdHlwZSBpKTog
c3RkOjp2ZWN0b3I8VCwgcG9vbF9hbGxvY2F0b3I8VD4gPihpKSB7fQorfTsKKwordGVtcGxhdGUg
PGNsYXNzIEssIGNsYXNzIEQsIGNsYXNzIENNUCA9IHN0ZDo6bGVzczxLPiA+IAorY2xhc3MgVE1h
cCA6IHB1YmxpYyBzdGQ6Om1hcDxLLCBELCBDTVAsIHBvb2xfYWxsb2NhdG9yPHN0ZDo6cGFpcjxj
b25zdCBLLCBEPiA+ID4geworcHVibGljOgorICAgIHR5cGVkZWYgcG9vbF9hbGxvY2F0b3I8c3Rk
OjpwYWlyPGNvbnN0IEssIEQ+ID4gdEFsbG9jYXRvcjsKKworICAgIFRNYXAoKSA6IHN0ZDo6bWFw
PEssIEQsIENNUCwgdEFsbG9jYXRvcj4oKSB7fQorICAgIC8vIHVzZSBjb3JyZWN0IHR3by1zdGFn
ZSBuYW1lIGxvb2t1cCBzdXBwb3J0ZWQgaW4gZ2NjIDMuNCBhbmQgYWJvdmUKKyAgICBUTWFwKGNv
bnN0IHRBbGxvY2F0b3ImIGEpIDogc3RkOjptYXA8SywgRCwgQ01QLCB0QWxsb2NhdG9yPihzdGQ6
Om1hcDxLLCBELCBDTVAsIHRBbGxvY2F0b3I+OjprZXlfY29tcGFyZSgpLCBhKSB7fQorfTsKKwor
Ly8gSW50ZWdlciB0byBUU3RyaW5nIGNvbnZlcnNpb24KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
aW5saW5lIFRTdHJpbmcgc3RyKFQgaSkKK3sKKyAgICBBU1NFUlQoc3RkOjpudW1lcmljX2xpbWl0
czxUPjo6aXNfaW50ZWdlcik7CisgICAgY2hhciBidWZmZXJbKCg4ICogc2l6ZW9mKFQpKSAvIDMp
ICsgM107CisgICAgY29uc3QgY2hhciAqZm9ybWF0U3RyID0gc3RkOjpudW1lcmljX2xpbWl0czxU
Pjo6aXNfc2lnbmVkID8gIiVkIiA6ICIldSI7CisgICAgc25wcmludGYoYnVmZmVyLCBzaXplb2Yo
YnVmZmVyKSwgZm9ybWF0U3RyLCBpKTsKKyAgICByZXR1cm4gYnVmZmVyOworfQorCisjZW5kaWYg
Ly8gX0NPTU1PTl9JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5l
Yjc0NjVlMzVjODBmNjg5OGU1MzNmYjYxZWYwMDFlZjY2OWFkOTQ0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGls
ZXIuY3BwCkBAIC0wLDAgKzEsNTI3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0Q2FsbERlcHRoLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9Gb3JMb29wVW5yb2xsLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9Jbml0aWFsaXplLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFs
aXplUGFyc2VDb250ZXh0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFs
aXplVmFyaWFibGVzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9NYXBMb25nVmFy
aWFibGVOYW1lcy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9SZW5hbWVGdW5jdGlvbi5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU2hIYW5kbGUuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1VuZm9sZFNob3J0Q2lyY3VpdEFTVC5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1pdGF0aW9ucy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVmFyaWFibGVQYWNrZXIuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5n
LmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvY29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmgi
CisKK2Jvb2wgaXNXZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNwZWMgc3BlYykKK3sKKyAgICAgcmV0
dXJuIHNwZWMgPT0gU0hfV0VCR0xfU1BFQyB8fCBzcGVjID09IFNIX0NTU19TSEFERVJTX1NQRUM7
Cit9CisKK25hbWVzcGFjZSB7CitjbGFzcyBUU2NvcGVkUG9vbEFsbG9jYXRvcgoreworICBwdWJs
aWM6CisgICAgVFNjb3BlZFBvb2xBbGxvY2F0b3IoVFBvb2xBbGxvY2F0b3IqIGFsbG9jYXRvcikg
OiBtQWxsb2NhdG9yKGFsbG9jYXRvcikKKyAgICB7CisgICAgICAgIG1BbGxvY2F0b3ItPnB1c2go
KTsKKyAgICAgICAgU2V0R2xvYmFsUG9vbEFsbG9jYXRvcihtQWxsb2NhdG9yKTsKKyAgICB9Cisg
ICAgflRTY29wZWRQb29sQWxsb2NhdG9yKCkKKyAgICB7CisgICAgICAgIFNldEdsb2JhbFBvb2xB
bGxvY2F0b3IoTlVMTCk7CisgICAgICAgIG1BbGxvY2F0b3ItPnBvcCgpOworICAgIH0KKworICBw
cml2YXRlOgorICAgIFRQb29sQWxsb2NhdG9yKiBtQWxsb2NhdG9yOworfTsKKworY2xhc3MgVFNj
b3BlZFN5bWJvbFRhYmxlTGV2ZWwKK3sKKyAgcHVibGljOgorICAgIFRTY29wZWRTeW1ib2xUYWJs
ZUxldmVsKFRTeW1ib2xUYWJsZSogdGFibGUpIDogbVRhYmxlKHRhYmxlKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKG1UYWJsZS0+YXRCdWlsdEluTGV2ZWwoKSk7CisgICAgICAgIG1UYWJsZS0+cHVz
aCgpOworICAgIH0KKyAgICB+VFNjb3BlZFN5bWJvbFRhYmxlTGV2ZWwoKQorICAgIHsKKyAgICAg
ICAgd2hpbGUgKCFtVGFibGUtPmF0QnVpbHRJbkxldmVsKCkpCisgICAgICAgICAgICBtVGFibGUt
PnBvcCgpOworICAgIH0KKworICBwcml2YXRlOgorICAgIFRTeW1ib2xUYWJsZSogbVRhYmxlOwor
fTsKK30gIC8vIG5hbWVzcGFjZQorCitUU2hIYW5kbGVCYXNlOjpUU2hIYW5kbGVCYXNlKCkKK3sK
KyAgICBhbGxvY2F0b3IucHVzaCgpOworICAgIFNldEdsb2JhbFBvb2xBbGxvY2F0b3IoJmFsbG9j
YXRvcik7Cit9CisKK1RTaEhhbmRsZUJhc2U6On5UU2hIYW5kbGVCYXNlKCkKK3sKKyAgICBTZXRH
bG9iYWxQb29sQWxsb2NhdG9yKE5VTEwpOworICAgIGFsbG9jYXRvci5wb3BBbGwoKTsKK30KKwor
VENvbXBpbGVyOjpUQ29tcGlsZXIoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVj
KQorICAgIDogc2hhZGVyVHlwZSh0eXBlKSwKKyAgICAgIHNoYWRlclNwZWMoc3BlYyksCisgICAg
ICBtYXhVbmlmb3JtVmVjdG9ycygwKSwKKyAgICAgIG1heEV4cHJlc3Npb25Db21wbGV4aXR5KDAp
LAorICAgICAgbWF4Q2FsbFN0YWNrRGVwdGgoMCksCisgICAgICBmcmFnbWVudFByZWNpc2lvbkhp
Z2goZmFsc2UpLAorICAgICAgY2xhbXBpbmdTdHJhdGVneShTSF9DTEFNUF9XSVRIX0NMQU1QX0lO
VFJJTlNJQyksCisgICAgICBidWlsdEluRnVuY3Rpb25FbXVsYXRvcih0eXBlKQoreworICAgIGxv
bmdOYW1lTWFwID0gTG9uZ05hbWVNYXA6OkdldEluc3RhbmNlKCk7Cit9CisKK1RDb21waWxlcjo6
flRDb21waWxlcigpCit7CisgICAgQVNTRVJUKGxvbmdOYW1lTWFwKTsKKyAgICBsb25nTmFtZU1h
cC0+UmVsZWFzZSgpOworfQorCitib29sIFRDb21waWxlcjo6SW5pdChjb25zdCBTaEJ1aWx0SW5S
ZXNvdXJjZXMmIHJlc291cmNlcykKK3sKKyAgICBtYXhVbmlmb3JtVmVjdG9ycyA9IChzaGFkZXJU
eXBlID09IFNIX1ZFUlRFWF9TSEFERVIpID8KKyAgICAgICAgcmVzb3VyY2VzLk1heFZlcnRleFVu
aWZvcm1WZWN0b3JzIDoKKyAgICAgICAgcmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3Rv
cnM7CisgICAgbWF4RXhwcmVzc2lvbkNvbXBsZXhpdHkgPSByZXNvdXJjZXMuTWF4RXhwcmVzc2lv
bkNvbXBsZXhpdHk7CisgICAgbWF4Q2FsbFN0YWNrRGVwdGggPSByZXNvdXJjZXMuTWF4Q2FsbFN0
YWNrRGVwdGg7CisKKyAgICBTZXRHbG9iYWxQb29sQWxsb2NhdG9yKCZhbGxvY2F0b3IpOworCisg
ICAgLy8gR2VuZXJhdGUgYnVpbHQtaW4gc3ltYm9sIHRhYmxlLgorICAgIGlmICghSW5pdEJ1aWx0
SW5TeW1ib2xUYWJsZShyZXNvdXJjZXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSW5p
dEV4dGVuc2lvbkJlaGF2aW9yKHJlc291cmNlcywgZXh0ZW5zaW9uQmVoYXZpb3IpOworICAgIGZy
YWdtZW50UHJlY2lzaW9uSGlnaCA9IHJlc291cmNlcy5GcmFnbWVudFByZWNpc2lvbkhpZ2ggPT0g
MTsKKworICAgIGFycmF5Qm91bmRzQ2xhbXBlci5TZXRDbGFtcGluZ1N0cmF0ZWd5KHJlc291cmNl
cy5BcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSk7CisgICAgY2xhbXBpbmdTdHJhdGVneSA9IHJl
c291cmNlcy5BcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneTsKKworICAgIGhhc2hGdW5jdGlvbiA9
IHJlc291cmNlcy5IYXNoRnVuY3Rpb247CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBU
Q29tcGlsZXI6OmNvbXBpbGUoY29uc3QgY2hhciogY29uc3Qgc2hhZGVyU3RyaW5nc1tdLAorICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG51bVN0cmluZ3MsCisgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgY29tcGlsZU9wdGlvbnMpCit7CisgICAgVFNjb3BlZFBvb2xBbGxvY2F0b3Ig
c2NvcGVkQWxsb2MoJmFsbG9jYXRvcik7CisgICAgY2xlYXJSZXN1bHRzKCk7CisKKyAgICBpZiAo
bnVtU3RyaW5ncyA9PSAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIElmIGNvbXBp
bGluZyBmb3IgV2ViR0wsIHZhbGlkYXRlIGxvb3AgYW5kIGluZGV4aW5nIGFzIHdlbGwuCisgICAg
aWYgKGlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpCisgICAgICAgIGNvbXBpbGVPcHRpb25z
IHw9IFNIX1ZBTElEQVRFX0xPT1BfSU5ERVhJTkc7CisKKyAgICAvLyBGaXJzdCBzdHJpbmcgaXMg
cGF0aCBvZiBzb3VyY2UgZmlsZSBpZiBmbGFnIGlzIHNldC4gVGhlIGFjdHVhbCBzb3VyY2UgZm9s
bG93cy4KKyAgICBjb25zdCBjaGFyKiBzb3VyY2VQYXRoID0gTlVMTDsKKyAgICBzaXplX3QgZmly
c3RTb3VyY2UgPSAwOworICAgIGlmIChjb21waWxlT3B0aW9ucyAmIFNIX1NPVVJDRV9QQVRIKQor
ICAgIHsKKyAgICAgICAgc291cmNlUGF0aCA9IHNoYWRlclN0cmluZ3NbMF07CisgICAgICAgICsr
Zmlyc3RTb3VyY2U7CisgICAgfQorCisgICAgVEludGVybWVkaWF0ZSBpbnRlcm1lZGlhdGUoaW5m
b1NpbmspOworICAgIFRQYXJzZUNvbnRleHQgcGFyc2VDb250ZXh0KHN5bWJvbFRhYmxlLCBleHRl
bnNpb25CZWhhdmlvciwgaW50ZXJtZWRpYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNoYWRlclR5cGUsIHNoYWRlclNwZWMsIGNvbXBpbGVPcHRpb25zLCB0cnVlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVBhdGgsIGluZm9TaW5rKTsKKyAgICBwYXJz
ZUNvbnRleHQuZnJhZ21lbnRQcmVjaXNpb25IaWdoID0gZnJhZ21lbnRQcmVjaXNpb25IaWdoOwor
ICAgIFNldEdsb2JhbFBhcnNlQ29udGV4dCgmcGFyc2VDb250ZXh0KTsKKworICAgIC8vIFdlIHBy
ZXNlcnZlIHN5bWJvbHMgYXQgdGhlIGJ1aWx0LWluIGxldmVsIGZyb20gY29tcGlsZS10by1jb21w
aWxlLgorICAgIC8vIFN0YXJ0IHB1c2hpbmcgdGhlIHVzZXItZGVmaW5lZCBzeW1ib2xzIGF0IGds
b2JhbCBsZXZlbC4KKyAgICBUU2NvcGVkU3ltYm9sVGFibGVMZXZlbCBzY29wZWRTeW1ib2xMZXZl
bCgmc3ltYm9sVGFibGUpOworCisgICAgLy8gUGFyc2Ugc2hhZGVyLgorICAgIGJvb2wgc3VjY2Vz
cyA9CisgICAgICAgIChQYVBhcnNlU3RyaW5ncyhudW1TdHJpbmdzIC0gZmlyc3RTb3VyY2UsICZz
aGFkZXJTdHJpbmdzW2ZpcnN0U291cmNlXSwgTlVMTCwgJnBhcnNlQ29udGV4dCkgPT0gMCkgJiYK
KyAgICAgICAgKHBhcnNlQ29udGV4dC50cmVlUm9vdCAhPSBOVUxMKTsKKyAgICBpZiAoc3VjY2Vz
cykKKyAgICB7CisgICAgICAgIFRJbnRlcm1Ob2RlKiByb290ID0gcGFyc2VDb250ZXh0LnRyZWVS
b290OworICAgICAgICBzdWNjZXNzID0gaW50ZXJtZWRpYXRlLnBvc3RQcm9jZXNzKHJvb3QpOwor
CisgICAgICAgIGlmIChzdWNjZXNzKQorICAgICAgICAgICAgc3VjY2VzcyA9IGRldGVjdENhbGxE
ZXB0aChyb290LCBpbmZvU2luaywgKGNvbXBpbGVPcHRpb25zICYgU0hfTElNSVRfQ0FMTF9TVEFD
S19ERVBUSCkgIT0gMCk7CisKKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25z
ICYgU0hfVkFMSURBVEVfTE9PUF9JTkRFWElORykpCisgICAgICAgICAgICBzdWNjZXNzID0gdmFs
aWRhdGVMaW1pdGF0aW9ucyhyb290KTsKKworICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGls
ZU9wdGlvbnMgJiBTSF9USU1JTkdfUkVTVFJJQ1RJT05TKSkKKyAgICAgICAgICAgIHN1Y2Nlc3Mg
PSBlbmZvcmNlVGltaW5nUmVzdHJpY3Rpb25zKHJvb3QsIChjb21waWxlT3B0aW9ucyAmIFNIX0RF
UEVOREVOQ1lfR1JBUEgpICE9IDApOworCisgICAgICAgIGlmIChzdWNjZXNzICYmIHNoYWRlclNw
ZWMgPT0gU0hfQ1NTX1NIQURFUlNfU1BFQykKKyAgICAgICAgICAgIHJld3JpdGVDU1NTaGFkZXIo
cm9vdCk7CisKKyAgICAgICAgLy8gVW5yb2xsIGZvci1sb29wIG1hcmt1cCBuZWVkcyB0byBoYXBw
ZW4gYWZ0ZXIgdmFsaWRhdGVMaW1pdGF0aW9ucyBwYXNzLgorICAgICAgICBpZiAoc3VjY2VzcyAm
JiAoY29tcGlsZU9wdGlvbnMgJiBTSF9VTlJPTExfRk9SX0xPT1BfV0lUSF9JTlRFR0VSX0lOREVY
KSkKKyAgICAgICAgICAgIEZvckxvb3BVbnJvbGw6Ok1hcmtGb3JMb29wc1dpdGhJbnRlZ2VySW5k
aWNlc0ZvclVucm9sbGluZyhyb290KTsKKworICAgICAgICAvLyBCdWlsdC1pbiBmdW5jdGlvbiBl
bXVsYXRpb24gbmVlZHMgdG8gaGFwcGVuIGFmdGVyIHZhbGlkYXRlTGltaXRhdGlvbnMgcGFzcy4K
KyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfRU1VTEFURV9CVUlM
VF9JTl9GVU5DVElPTlMpKQorICAgICAgICAgICAgYnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuTWFy
a0J1aWx0SW5GdW5jdGlvbnNGb3JFbXVsYXRpb24ocm9vdCk7CisKKyAgICAgICAgLy8gQ2xhbXBp
bmcgdW5pZm9ybSBhcnJheSBib3VuZHMgbmVlZHMgdG8gaGFwcGVuIGFmdGVyIHZhbGlkYXRlTGlt
aXRhdGlvbnMgcGFzcy4KKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYg
U0hfQ0xBTVBfSU5ESVJFQ1RfQVJSQVlfQk9VTkRTKSkKKyAgICAgICAgICAgIGFycmF5Qm91bmRz
Q2xhbXBlci5NYXJrSW5kaXJlY3RBcnJheUJvdW5kc0ZvckNsYW1waW5nKHJvb3QpOworCisgICAg
ICAgIC8vIERpc2FsbG93IGV4cHJlc3Npb25zIGRlZW1lZCB0b28gY29tcGxleC4KKyAgICAgICAg
aWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfTElNSVRfRVhQUkVTU0lPTl9DT01Q
TEVYSVRZKSkKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBsaW1pdEV4cHJlc3Npb25Db21wbGV4aXR5
KHJvb3QpOworCisgICAgICAgIC8vIENhbGwgbWFwTG9uZ1ZhcmlhYmxlTmFtZXMoKSBiZWZvcmUg
Y29sbGVjdEF0dHJpYnNVbmlmb3JtcygpIHNvIGluCisgICAgICAgIC8vIGNvbGxlY3RBdHRyaWJz
VW5pZm9ybXMoKSB3ZSBhbHJlYWR5IGhhdmUgdGhlIG1hcHBlZCBzeW1ib2wgbmFtZXMgYW5kCisg
ICAgICAgIC8vIHdlIGNvdWxkIGNvbXBvc2l0ZSBtYXBwZWQgYW5kIG9yaWdpbmFsIHZhcmlhYmxl
IG5hbWVzLgorICAgICAgICAvLyBBbHNvLCBpZiB3ZSBoYXNoIGFsbCB0aGUgbmFtZXMsIHRoZW4g
bm8gbmVlZCB0byBkbyB0aGlzIGZvciBsb25nIG5hbWVzLgorICAgICAgICBpZiAoc3VjY2VzcyAm
JiAoY29tcGlsZU9wdGlvbnMgJiBTSF9NQVBfTE9OR19WQVJJQUJMRV9OQU1FUykgJiYgaGFzaEZ1
bmN0aW9uID09IE5VTEwpCisgICAgICAgICAgICBtYXBMb25nVmFyaWFibGVOYW1lcyhyb290KTsK
KworICAgICAgICBpZiAoc3VjY2VzcyAmJiBzaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIg
JiYgKGNvbXBpbGVPcHRpb25zICYgU0hfSU5JVF9HTF9QT1NJVElPTikpCisgICAgICAgICAgICBp
bml0aWFsaXplR0xQb3NpdGlvbihyb290KTsKKworICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29t
cGlsZU9wdGlvbnMgJiBTSF9VTkZPTERfU0hPUlRfQ0lSQ1VJVCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIFVuZm9sZFNob3J0Q2lyY3VpdEFTVCB1bmZvbGRTaG9ydENpcmN1aXQ7CisgICAgICAg
ICAgICByb290LT50cmF2ZXJzZSgmdW5mb2xkU2hvcnRDaXJjdWl0KTsKKyAgICAgICAgICAgIHVu
Zm9sZFNob3J0Q2lyY3VpdC51cGRhdGVUcmVlKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
c3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9WQVJJQUJMRVMpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb2xsZWN0VmFyaWFibGVzKHJvb3QpOworICAgICAgICAgICAgaWYgKGNvbXBp
bGVPcHRpb25zICYgU0hfRU5GT1JDRV9QQUNLSU5HX1JFU1RSSUNUSU9OUykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gZW5mb3JjZVBhY2tpbmdSZXN0cmljdGlvbnMo
KTsKKyAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLnByZWZpeChFUHJlZml4RXJyb3IpOworICAg
ICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvIDw8ICJ0b28gbWFueSB1bmlmb3JtcyI7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHN1Y2Nlc3Mg
JiYgc2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSICYmCisgICAgICAgICAgICAgICAgKGNv
bXBpbGVPcHRpb25zICYgU0hfSU5JVF9WQVJZSU5HU19XSVRIT1VUX1NUQVRJQ19VU0UpKQorICAg
ICAgICAgICAgICAgIGluaXRpYWxpemVWYXJ5aW5nc1dpdGhvdXRTdGF0aWNVc2Uocm9vdCk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9J
TlRFUk1FRElBVEVfVFJFRSkpCisgICAgICAgICAgICBpbnRlcm1lZGlhdGUub3V0cHV0VHJlZShy
b290KTsKKworICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9PQkpF
Q1RfQ09ERSkpCisgICAgICAgICAgICB0cmFuc2xhdGUocm9vdCk7CisgICAgfQorCisgICAgLy8g
Q2xlYW51cCBtZW1vcnkuCisgICAgaW50ZXJtZWRpYXRlLnJlbW92ZShwYXJzZUNvbnRleHQudHJl
ZVJvb3QpOworCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK2Jvb2wgVENvbXBpbGVyOjpJbml0
QnVpbHRJblN5bWJvbFRhYmxlKGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyAmcmVzb3VyY2VzKQor
eworICAgIGNvbXBpbGVSZXNvdXJjZXMgPSByZXNvdXJjZXM7CisKKyAgICBhc3NlcnQoc3ltYm9s
VGFibGUuaXNFbXB0eSgpKTsKKyAgICBzeW1ib2xUYWJsZS5wdXNoKCk7CisKKyAgICBUUHVibGlj
VHlwZSBpbnRlZ2VyOworICAgIGludGVnZXIudHlwZSA9IEVidEludDsKKyAgICBpbnRlZ2VyLnNp
emUgPSAxOworICAgIGludGVnZXIubWF0cml4ID0gZmFsc2U7CisgICAgaW50ZWdlci5hcnJheSA9
IGZhbHNlOworCisgICAgVFB1YmxpY1R5cGUgZmxvYXRpbmdQb2ludDsKKyAgICBmbG9hdGluZ1Bv
aW50LnR5cGUgPSBFYnRGbG9hdDsKKyAgICBmbG9hdGluZ1BvaW50LnNpemUgPSAxOworICAgIGZs
b2F0aW5nUG9pbnQubWF0cml4ID0gZmFsc2U7CisgICAgZmxvYXRpbmdQb2ludC5hcnJheSA9IGZh
bHNlOworCisgICAgVFB1YmxpY1R5cGUgc2FtcGxlcjsKKyAgICBzYW1wbGVyLnNpemUgPSAxOwor
ICAgIHNhbXBsZXIubWF0cml4ID0gZmFsc2U7CisgICAgc2FtcGxlci5hcnJheSA9IGZhbHNlOwor
CisgICAgc3dpdGNoKHNoYWRlclR5cGUpCisgICAgeworICAgICAgY2FzZSBTSF9GUkFHTUVOVF9T
SEFERVI6CisgICAgICAgIHN5bWJvbFRhYmxlLnNldERlZmF1bHRQcmVjaXNpb24oaW50ZWdlciwg
RWJwTWVkaXVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNIX1ZFUlRFWF9TSEFERVI6
CisgICAgICAgIHN5bWJvbFRhYmxlLnNldERlZmF1bHRQcmVjaXNpb24oaW50ZWdlciwgRWJwSGln
aCk7CisgICAgICAgIHN5bWJvbFRhYmxlLnNldERlZmF1bHRQcmVjaXNpb24oZmxvYXRpbmdQb2lu
dCwgRWJwSGlnaCk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNz
ZXJ0KGZhbHNlICYmICJMYW5ndWFnZSBub3Qgc3VwcG9ydGVkIik7CisgICAgfQorICAgIC8vIFdl
IHNldCBkZWZhdWx0cyBmb3IgYWxsIHRoZSBzYW1wbGVyIHR5cGVzLCBldmVuIHRob3NlIHRoYXQg
YXJlCisgICAgLy8gb25seSBhdmFpbGFibGUgaWYgYW4gZXh0ZW5zaW9uIGV4aXN0cy4KKyAgICBm
b3IgKGludCBzYW1wbGVyVHlwZSA9IEVidEd1YXJkU2FtcGxlckJlZ2luICsgMTsKKyAgICAgICAg
IHNhbXBsZXJUeXBlIDwgRWJ0R3VhcmRTYW1wbGVyRW5kOyArK3NhbXBsZXJUeXBlKQorICAgIHsK
KyAgICAgICAgc2FtcGxlci50eXBlID0gc3RhdGljX2Nhc3Q8VEJhc2ljVHlwZT4oc2FtcGxlclR5
cGUpOworICAgICAgICBzeW1ib2xUYWJsZS5zZXREZWZhdWx0UHJlY2lzaW9uKHNhbXBsZXIsIEVi
cExvdyk7CisgICAgfQorCisgICAgSW5zZXJ0QnVpbHRJbkZ1bmN0aW9ucyhzaGFkZXJUeXBlLCBz
aGFkZXJTcGVjLCByZXNvdXJjZXMsIHN5bWJvbFRhYmxlKTsKKworICAgIElkZW50aWZ5QnVpbHRJ
bnMoc2hhZGVyVHlwZSwgc2hhZGVyU3BlYywgcmVzb3VyY2VzLCBzeW1ib2xUYWJsZSk7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBUQ29tcGlsZXI6OmNsZWFyUmVzdWx0cygpCit7Cisg
ICAgYXJyYXlCb3VuZHNDbGFtcGVyLkNsZWFudXAoKTsKKyAgICBpbmZvU2luay5pbmZvLmVyYXNl
KCk7CisgICAgaW5mb1Npbmsub2JqLmVyYXNlKCk7CisgICAgaW5mb1NpbmsuZGVidWcuZXJhc2Uo
KTsKKworICAgIGF0dHJpYnMuY2xlYXIoKTsKKyAgICB1bmlmb3Jtcy5jbGVhcigpOworICAgIHZh
cnlpbmdzLmNsZWFyKCk7CisKKyAgICBidWlsdEluRnVuY3Rpb25FbXVsYXRvci5DbGVhbnVwKCk7
CisKKyAgICBuYW1lTWFwLmNsZWFyKCk7Cit9CisKK2Jvb2wgVENvbXBpbGVyOjpkZXRlY3RDYWxs
RGVwdGgoVEludGVybU5vZGUqIHJvb3QsIFRJbmZvU2luayYgaW5mb1NpbmssIGJvb2wgbGltaXRD
YWxsU3RhY2tEZXB0aCkKK3sKKyAgICBEZXRlY3RDYWxsRGVwdGggZGV0ZWN0KGluZm9TaW5rLCBs
aW1pdENhbGxTdGFja0RlcHRoLCBtYXhDYWxsU3RhY2tEZXB0aCk7CisgICAgcm9vdC0+dHJhdmVy
c2UoJmRldGVjdCk7CisgICAgc3dpdGNoIChkZXRlY3QuZGV0ZWN0Q2FsbERlcHRoKCkpCisgICAg
eworICAgICAgY2FzZSBEZXRlY3RDYWxsRGVwdGg6OmtFcnJvck5vbmU6CisgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgY2FzZSBEZXRlY3RDYWxsRGVwdGg6OmtFcnJvck1pc3NpbmdNYWluOgor
ICAgICAgICBpbmZvU2luay5pbmZvLnByZWZpeChFUHJlZml4RXJyb3IpOworICAgICAgICBpbmZv
U2luay5pbmZvIDw8ICJNaXNzaW5nIG1haW4oKSI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgIGNhc2UgRGV0ZWN0Q2FsbERlcHRoOjprRXJyb3JSZWN1cnNpb246CisgICAgICAgIGluZm9T
aW5rLmluZm8ucHJlZml4KEVQcmVmaXhFcnJvcik7CisgICAgICAgIGluZm9TaW5rLmluZm8gPDwg
IkZ1bmN0aW9uIHJlY3Vyc2lvbiBkZXRlY3RlZCI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgIGNhc2UgRGV0ZWN0Q2FsbERlcHRoOjprRXJyb3JNYXhEZXB0aEV4Y2VlZGVkOgorICAgICAg
ICBpbmZvU2luay5pbmZvLnByZWZpeChFUHJlZml4RXJyb3IpOworICAgICAgICBpbmZvU2luay5p
bmZvIDw8ICJGdW5jdGlvbiBjYWxsIHN0YWNrIHRvbyBkZWVwIjsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KK30KKwordm9pZCBUQ29tcGlsZXI6OnJld3JpdGVDU1NTaGFkZXIo
VEludGVybU5vZGUqIHJvb3QpCit7CisgICAgUmVuYW1lRnVuY3Rpb24gcmVuYW1lcigibWFpbigi
LCAiY3NzX21haW4oIik7CisgICAgcm9vdC0+dHJhdmVyc2UoJnJlbmFtZXIpOworfQorCitib29s
IFRDb21waWxlcjo6dmFsaWRhdGVMaW1pdGF0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCkKK3sKKyAg
ICBWYWxpZGF0ZUxpbWl0YXRpb25zIHZhbGlkYXRlKHNoYWRlclR5cGUsIGluZm9TaW5rLmluZm8p
OworICAgIHJvb3QtPnRyYXZlcnNlKCZ2YWxpZGF0ZSk7CisgICAgcmV0dXJuIHZhbGlkYXRlLm51
bUVycm9ycygpID09IDA7Cit9CisKK2Jvb2wgVENvbXBpbGVyOjplbmZvcmNlVGltaW5nUmVzdHJp
Y3Rpb25zKFRJbnRlcm1Ob2RlKiByb290LCBib29sIG91dHB1dEdyYXBoKQoreworICAgIGlmIChz
aGFkZXJTcGVjICE9IFNIX1dFQkdMX1NQRUMpCisgICAgeworICAgICAgICBpbmZvU2luay5pbmZv
IDw8ICJUaW1pbmcgcmVzdHJpY3Rpb25zIG11c3QgYmUgZW5mb3JjZWQgdW5kZXIgdGhlIFdlYkdM
IHNwZWMuIjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChzaGFkZXJU
eXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICB7CisgICAgICAgIFREZXBlbmRlbmN5R3Jh
cGggZ3JhcGgocm9vdCk7CisKKyAgICAgICAgLy8gT3V0cHV0IGFueSBlcnJvcnMgZmlyc3QuCisg
ICAgICAgIGJvb2wgc3VjY2VzcyA9IGVuZm9yY2VGcmFnbWVudFNoYWRlclRpbWluZ1Jlc3RyaWN0
aW9ucyhncmFwaCk7CisgICAgICAgIAorICAgICAgICAvLyBUaGVuLCBvdXRwdXQgdGhlIGRlcGVu
ZGVuY3kgZ3JhcGguCisgICAgICAgIGlmIChvdXRwdXRHcmFwaCkKKyAgICAgICAgeworICAgICAg
ICAgICAgVERlcGVuZGVuY3lHcmFwaE91dHB1dCBvdXRwdXQoaW5mb1NpbmsuaW5mbyk7CisgICAg
ICAgICAgICBvdXRwdXQub3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhncmFwaCk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHJldHVybiBzdWNjZXNzOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICByZXR1cm4gZW5mb3JjZVZlcnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhy
b290KTsKKyAgICB9Cit9CisKK2Jvb2wgVENvbXBpbGVyOjpsaW1pdEV4cHJlc3Npb25Db21wbGV4
aXR5KFRJbnRlcm1Ob2RlKiByb290KQoreworICAgIFRJbnRlcm1UcmF2ZXJzZXIgdHJhdmVyc2Vy
OworICAgIHJvb3QtPnRyYXZlcnNlKCZ0cmF2ZXJzZXIpOworICAgIFREZXBlbmRlbmN5R3JhcGgg
Z3JhcGgocm9vdCk7CisKKyAgICBmb3IgKFRGdW5jdGlvbkNhbGxWZWN0b3I6OmNvbnN0X2l0ZXJh
dG9yIGl0ZXIgPSBncmFwaC5iZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpOworICAgICAg
ICAgaXRlciAhPSBncmFwaC5lbmRVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMoKTsKKyAgICAgICAg
ICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaEZ1bmN0aW9uQ2FsbCogc2FtcGxlclN5bWJv
bCA9ICppdGVyOworICAgICAgICBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyIGdyYXBoVHJhdmVy
c2VyOworICAgICAgICBzYW1wbGVyU3ltYm9sLT50cmF2ZXJzZSgmZ3JhcGhUcmF2ZXJzZXIpOwor
ICAgIH0KKworICAgIGlmICh0cmF2ZXJzZXIuZ2V0TWF4RGVwdGgoKSA+IG1heEV4cHJlc3Npb25D
b21wbGV4aXR5KQorICAgIHsKKyAgICAgICAgaW5mb1NpbmsuaW5mbyA8PCAiRXhwcmVzc2lvbiB0
b28gY29tcGxleC4iOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFRDb21waWxlcjo6ZW5mb3JjZUZyYWdtZW50U2hhZGVyVGltaW5nUmVz
dHJpY3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKQoreworICAgIFJlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmcgcmVzdHJpY3RvcihpbmZvU2luay5pbmZvKTsKKyAgICByZXN0
cmljdG9yLmVuZm9yY2VSZXN0cmljdGlvbnMoZ3JhcGgpOworICAgIHJldHVybiByZXN0cmljdG9y
Lm51bUVycm9ycygpID09IDA7Cit9CisKK2Jvb2wgVENvbXBpbGVyOjplbmZvcmNlVmVydGV4U2hh
ZGVyVGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290KQoreworICAgIFJlc3RyaWN0
VmVydGV4U2hhZGVyVGltaW5nIHJlc3RyaWN0b3IoaW5mb1NpbmsuaW5mbyk7CisgICAgcmVzdHJp
Y3Rvci5lbmZvcmNlUmVzdHJpY3Rpb25zKHJvb3QpOworICAgIHJldHVybiByZXN0cmljdG9yLm51
bUVycm9ycygpID09IDA7Cit9CisKK3ZvaWQgVENvbXBpbGVyOjpjb2xsZWN0VmFyaWFibGVzKFRJ
bnRlcm1Ob2RlKiByb290KQoreworICAgIENvbGxlY3RWYXJpYWJsZXMgY29sbGVjdChhdHRyaWJz
LCB1bmlmb3JtcywgdmFyeWluZ3MsIGhhc2hGdW5jdGlvbik7CisgICAgcm9vdC0+dHJhdmVyc2Uo
JmNvbGxlY3QpOworfQorCitib29sIFRDb21waWxlcjo6ZW5mb3JjZVBhY2tpbmdSZXN0cmljdGlv
bnMoKQoreworICAgIFZhcmlhYmxlUGFja2VyIHBhY2tlcjsKKyAgICByZXR1cm4gcGFja2VyLkNo
ZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cyhtYXhVbmlmb3JtVmVjdG9ycywgdW5pZm9y
bXMpOworfQorCit2b2lkIFRDb21waWxlcjo6aW5pdGlhbGl6ZUdMUG9zaXRpb24oVEludGVybU5v
ZGUqIHJvb3QpCit7CisgICAgSW5pdGlhbGl6ZVZhcmlhYmxlczo6SW5pdFZhcmlhYmxlSW5mb0xp
c3QgdmFyaWFibGVzOworICAgIEluaXRpYWxpemVWYXJpYWJsZXM6OkluaXRWYXJpYWJsZUluZm8g
dmFyKAorICAgICAgICAiZ2xfUG9zaXRpb24iLCBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVk
LCBFdnFQb3NpdGlvbiwgNCkpOworICAgIHZhcmlhYmxlcy5wdXNoX2JhY2sodmFyKTsKKyAgICBJ
bml0aWFsaXplVmFyaWFibGVzIGluaXRpYWxpemVyKHZhcmlhYmxlcyk7CisgICAgcm9vdC0+dHJh
dmVyc2UoJmluaXRpYWxpemVyKTsKK30KKwordm9pZCBUQ29tcGlsZXI6OmluaXRpYWxpemVWYXJ5
aW5nc1dpdGhvdXRTdGF0aWNVc2UoVEludGVybU5vZGUqIHJvb3QpCit7CisgICAgSW5pdGlhbGl6
ZVZhcmlhYmxlczo6SW5pdFZhcmlhYmxlSW5mb0xpc3QgdmFyaWFibGVzOworICAgIGZvciAoc2l6
ZV90IGlpID0gMDsgaWkgPCB2YXJ5aW5ncy5zaXplKCk7ICsraWkpCisgICAgeworICAgICAgICBj
b25zdCBUVmFyaWFibGVJbmZvJiB2YXJ5aW5nID0gdmFyeWluZ3NbaWldOworICAgICAgICBpZiAo
dmFyeWluZy5zdGF0aWNVc2UpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgdW5zaWdu
ZWQgY2hhciBzaXplID0gMDsKKyAgICAgICAgYm9vbCBtYXRyaXggPSBmYWxzZTsKKyAgICAgICAg
c3dpdGNoICh2YXJ5aW5nLnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIFNIX0ZMT0FU
OgorICAgICAgICAgICAgc2l6ZSA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBj
YXNlIFNIX0ZMT0FUX1ZFQzI6CisgICAgICAgICAgICBzaXplID0gMjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMzoKKyAgICAgICAgICAgIHNpemUgPSAz
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUM0OgorICAg
ICAgICAgICAgc2l6ZSA9IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFNI
X0ZMT0FUX01BVDI6CisgICAgICAgICAgICBzaXplID0gMjsKKyAgICAgICAgICAgIG1hdHJpeCA9
IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDM6
CisgICAgICAgICAgICBzaXplID0gMzsKKyAgICAgICAgICAgIG1hdHJpeCA9IHRydWU7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDQ6CisgICAgICAgICAg
ICBzaXplID0gNDsKKyAgICAgICAgICAgIG1hdHJpeCA9IHRydWU7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAg
ICAgfQorICAgICAgICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cVZhcnlp
bmdPdXQsIHNpemUsIG1hdHJpeCwgdmFyeWluZy5pc0FycmF5KTsKKyAgICAgICAgVFN0cmluZyBu
YW1lID0gdmFyeWluZy5uYW1lLmNfc3RyKCk7CisgICAgICAgIGlmICh2YXJ5aW5nLmlzQXJyYXkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHR5cGUuc2V0QXJyYXlTaXplKHZhcnlpbmcuc2l6ZSk7
CisgICAgICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHIoMCwgbmFtZS5maW5kX2ZpcnN0X29mKCdb
JykpOworICAgICAgICB9CisKKyAgICAgICAgSW5pdGlhbGl6ZVZhcmlhYmxlczo6SW5pdFZhcmlh
YmxlSW5mbyB2YXIobmFtZSwgdHlwZSk7CisgICAgICAgIHZhcmlhYmxlcy5wdXNoX2JhY2sodmFy
KTsKKyAgICB9CisgICAgSW5pdGlhbGl6ZVZhcmlhYmxlcyBpbml0aWFsaXplcih2YXJpYWJsZXMp
OworICAgIHJvb3QtPnRyYXZlcnNlKCZpbml0aWFsaXplcik7Cit9CisKK3ZvaWQgVENvbXBpbGVy
OjptYXBMb25nVmFyaWFibGVOYW1lcyhUSW50ZXJtTm9kZSogcm9vdCkKK3sKKyAgICBBU1NFUlQo
bG9uZ05hbWVNYXApOworICAgIE1hcExvbmdWYXJpYWJsZU5hbWVzIG1hcChsb25nTmFtZU1hcCk7
CisgICAgcm9vdC0+dHJhdmVyc2UoJm1hcCk7Cit9CisKK2ludCBUQ29tcGlsZXI6OmdldE1hcHBl
ZE5hbWVNYXhMZW5ndGgoKSBjb25zdAoreworICAgIHJldHVybiBNQVhfU0hPUlRFTkVEX0lERU5U
SUZJRVJfU0laRSArIDE7Cit9CisKK2NvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgVENvbXBpbGVy
OjpnZXRFeHRlbnNpb25CZWhhdmlvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGV4dGVuc2lvbkJl
aGF2aW9yOworfQorCitjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIFRDb21waWxlcjo6Z2V0UmVz
b3VyY2VzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29tcGlsZVJlc291cmNlczsKK30KKworY29u
c3QgQXJyYXlCb3VuZHNDbGFtcGVyJiBUQ29tcGlsZXI6OmdldEFycmF5Qm91bmRzQ2xhbXBlcigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGFycmF5Qm91bmRzQ2xhbXBlcjsKK30KKworU2hBcnJheUlu
ZGV4Q2xhbXBpbmdTdHJhdGVneSBUQ29tcGlsZXI6OmdldEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0
ZWd5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2xhbXBpbmdTdHJhdGVneTsKK30KKworY29uc3Qg
QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3ImIFRDb21waWxlcjo6Z2V0QnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3IoKSBjb25zdAoreworICAgIHJldHVybiBidWlsdEluRnVuY3Rpb25FbXVsYXRvcjsKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL0NvbnN0YW50VW5pb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMWUzNzg4NWY5MDFiMDI0
ZDYzNDY1ODQ3NzEyYmZiNjg4NjA3MzRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5oCkBAIC0w
LDAgKzEsMjU3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9DT05TVEFOVF9VTklP
Tl9JTkNMVURFRF8KKyNkZWZpbmUgX0NPTlNUQU5UX1VOSU9OX0lOQ0xVREVEXworCisjaW5jbHVk
ZSA8YXNzZXJ0Lmg+CisKK2NsYXNzIENvbnN0YW50VW5pb24geworcHVibGljOgorICAgIFBPT0xf
QUxMT0NBVE9SX05FV19ERUxFVEUoKTsKKyAgICBDb25zdGFudFVuaW9uKCkKKyAgICB7CisgICAg
ICAgIGlDb25zdCA9IDA7CisgICAgICAgIHR5cGUgPSBFYnRWb2lkOworICAgIH0KKworICAgIHZv
aWQgc2V0SUNvbnN0KGludCBpKSB7aUNvbnN0ID0gaTsgdHlwZSA9IEVidEludDsgfQorICAgIHZv
aWQgc2V0RkNvbnN0KGZsb2F0IGYpIHtmQ29uc3QgPSBmOyB0eXBlID0gRWJ0RmxvYXQ7IH0KKyAg
ICB2b2lkIHNldEJDb25zdChib29sIGIpIHtiQ29uc3QgPSBiOyB0eXBlID0gRWJ0Qm9vbDsgfQor
CisgICAgaW50IGdldElDb25zdCgpIHsgcmV0dXJuIGlDb25zdDsgfQorICAgIGZsb2F0IGdldEZD
b25zdCgpIHsgcmV0dXJuIGZDb25zdDsgfQorICAgIGJvb2wgZ2V0QkNvbnN0KCkgeyByZXR1cm4g
YkNvbnN0OyB9CisgICAgaW50IGdldElDb25zdCgpIGNvbnN0IHsgcmV0dXJuIGlDb25zdDsgfQor
ICAgIGZsb2F0IGdldEZDb25zdCgpIGNvbnN0IHsgcmV0dXJuIGZDb25zdDsgfQorICAgIGJvb2wg
Z2V0QkNvbnN0KCkgY29uc3QgeyByZXR1cm4gYkNvbnN0OyB9CisKKyAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgaW50IGkpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaSA9PSBpQ29uc3Q7
CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGZsb2F0IGYpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gZiA9PSBmQ29uc3Q7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IGJvb2wgYikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBiID09IGJDb25z
dDsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29uc3RhbnRVbmlvbiYgY29u
c3RhbnQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoY29uc3RhbnQudHlwZSAhPSB0eXBlKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAg
ICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgIHJldHVybiBjb25zdGFudC5pQ29uc3QgPT0g
aUNvbnN0OworICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgcmV0dXJuIGNvbnN0
YW50LmZDb25zdCA9PSBmQ29uc3Q7CisgICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICAg
IHJldHVybiBjb25zdGFudC5iQ29uc3QgPT0gYkNvbnN0OworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IGludCBpKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFvcGVyYXRv
cj09KGkpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBmbG9hdCBmKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KGYpOworICAgIH0KKworICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBib29sIGIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
IW9wZXJhdG9yPT0oYik7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvbnN0
YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFvcGVyYXRv
cj09KGNvbnN0YW50KTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPihjb25zdCBDb25zdGFu
dFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBhc3NlcnQodHlwZSA9PSBj
b25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0
SW50OgorICAgICAgICAgICAgcmV0dXJuIGlDb25zdCA+IGNvbnN0YW50LmlDb25zdDsKKyAgICAg
ICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgIHJldHVybiBmQ29uc3QgPiBjb25zdGFudC5m
Q29uc3Q7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8g
SW52YWxpZCBvcGVyYXRpb24sIGhhbmRsZWQgYXQgc2VtYW50aWMgYW5hbHlzaXMKKyAgICAgICAg
fQorICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0
YW50KSBjb25zdAorICAgIHsgCisgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUp
OworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAg
ICAgICByZXR1cm4gaUNvbnN0IDwgY29uc3RhbnQuaUNvbnN0OworICAgICAgICBjYXNlIEVidEZs
b2F0OgorICAgICAgICAgICAgcmV0dXJuIGZDb25zdCA8IGNvbnN0YW50LmZDb25zdDsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBJbnZhbGlkIG9wZXJh
dGlvbiwgaGFuZGxlZCBhdCBzZW1hbnRpYyBhbmFseXNpcworICAgICAgICB9CisgICAgfQorCisg
ICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvcisoY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQp
IGNvbnN0CisgICAgeyAKKyAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKKyAgICAg
ICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkg
eworICAgICAgICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCArIGNv
bnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBjYXNlIEVidEZsb2F0OiByZXR1cm5WYWx1
ZS5zZXRGQ29uc3QoZkNvbnN0ICsgY29uc3RhbnQuZkNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiBv
cGVyYXRvci0oY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAKKyAg
ICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYXNzZXJ0KHR5cGUgPT0g
Y29uc3RhbnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEVi
dEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAtIGNvbnN0YW50LmlDb25zdCk7IGJy
ZWFrOworICAgICAgICBjYXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0
IC0gY29uc3RhbnQuZkNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IGFzc2VydChmYWxz
ZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0
dXJuVmFsdWU7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvciooY29uc3QgQ29u
c3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAKKyAgICAgICAgQ29uc3RhbnRVbmlv
biByZXR1cm5WYWx1ZTsKKyAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7Cisg
ICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUu
c2V0SUNvbnN0KGlDb25zdCAqIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBjYXNl
IEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0ICogY29uc3RhbnQuZkNvbnN0
KTsgYnJlYWs7IAorICAgICAgICBkZWZhdWx0OiBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlz
c2luZyIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0K
KworICAgIENvbnN0YW50VW5pb24gb3BlcmF0b3IlKGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0
YW50KSBjb25zdAorICAgIHsgCisgICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7Cisg
ICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOworICAgICAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNldElDb25zdChpQ29uc3Qg
JSBjb25zdGFudC5pQ29uc3QpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChm
YWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
cmV0dXJuVmFsdWU7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvcj4+KGNvbnN0
IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAorICAgIHsgCisgICAgICAgIENvbnN0YW50
VW5pb24gcmV0dXJuVmFsdWU7CisgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUp
OworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6IHJldHVyblZh
bHVlLnNldElDb25zdChpQ29uc3QgPj4gY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0KKworICAgIENvbnN0YW50
VW5pb24gb3BlcmF0b3I8PChjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAg
ICB7IAorICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQo
dHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAg
IGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0IDw8IGNvbnN0YW50LmlD
b25zdCk7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZh
dWx0IG1pc3NpbmciKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsK
KyAgICB9CisKKyAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yJihjb25zdCBDb25zdGFudFVuaW9u
JiBjb25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZh
bHVlOworICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dp
dGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50OiAgcmV0dXJuVmFsdWUuc2V0SUNvbnN0
KGlDb25zdCAmIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiAgICAg
YXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9CisKKyAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9y
fChjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBD
b25zdGFudFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFu
dC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50OiAg
cmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCB8IGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9CisKKyAgICBD
b25zdGFudFVuaW9uIG9wZXJhdG9yXihjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29u
c3QKKyAgICB7IAorICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBh
c3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgICAgIGNhc2UgRWJ0SW50OiAgcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCBeIGNvbnN0
YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYm
ICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXR1cm5W
YWx1ZTsKKyAgICB9CisKKyAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yJiYoY29uc3QgQ29uc3Rh
bnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAKKyAgICAgICAgQ29uc3RhbnRVbmlvbiBy
ZXR1cm5WYWx1ZTsKKyAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CisgICAg
ICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEVidEJvb2w6IHJldHVyblZhbHVlLnNl
dEJDb25zdChiQ29uc3QgJiYgY29uc3RhbnQuYkNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0KKworICAgIENvbnN0YW50VW5pb24g
b3BlcmF0b3J8fChjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7IAor
ICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQodHlwZSA9
PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2Ug
RWJ0Qm9vbDogcmV0dXJuVmFsdWUuc2V0QkNvbnN0KGJDb25zdCB8fCBjb25zdGFudC5iQ29uc3Qp
OyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBt
aXNzaW5nIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAg
fQorCisgICAgVEJhc2ljVHlwZSBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZTsgfQorcHJp
dmF0ZToKKworICAgIHVuaW9uICB7CisgICAgICAgIGludCBpQ29uc3Q7ICAvLyB1c2VkIGZvciBp
dmVjLCBzY2FsYXIgaW50cworICAgICAgICBib29sIGJDb25zdDsgLy8gdXNlZCBmb3IgYnZlYywg
c2NhbGFyIGJvb2xzCisgICAgICAgIGZsb2F0IGZDb25zdDsgICAvLyB1c2VkIGZvciB2ZWMsIG1h
dCwgc2NhbGFyIGZsb2F0cworICAgIH0gOworCisgICAgVEJhc2ljVHlwZSB0eXBlOworfTsKKwor
I2VuZGlmIC8vIF9DT05TVEFOVF9VTklPTl9JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RldGVjdENhbGxEZXB0aC5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EZXRl
Y3RDYWxsRGVwdGguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmYzFkNTg1MmZmMmRjNmZhZDMzMGM3NTkxMGZj
M2Q1NzZmOGZlMTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9EZXRlY3RDYWxsRGVwdGguY3BwCkBAIC0wLDAgKzEsMTg1
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9E
ZXRlY3RDYWxsRGVwdGguaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luZm9TaW5r
LmgiCisKK0RldGVjdENhbGxEZXB0aDo6RnVuY3Rpb25Ob2RlOjpGdW5jdGlvbk5vZGUoY29uc3Qg
VFN0cmluZyYgZm5hbWUpCisgICAgOiBuYW1lKGZuYW1lKSwKKyAgICAgIHZpc2l0KFByZVZpc2l0
KQoreworfQorCitjb25zdCBUU3RyaW5nJiBEZXRlY3RDYWxsRGVwdGg6OkZ1bmN0aW9uTm9kZTo6
Z2V0TmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG5hbWU7Cit9CisKK3ZvaWQgRGV0ZWN0Q2Fs
bERlcHRoOjpGdW5jdGlvbk5vZGU6OmFkZENhbGxlZSgKKyAgICBEZXRlY3RDYWxsRGVwdGg6OkZ1
bmN0aW9uTm9kZSogY2FsbGVlKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FsbGVl
cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoY2FsbGVlc1tpXSA9PSBjYWxsZWUpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhbGxlZXMucHVzaF9iYWNrKGNhbGxlZSk7Cit9
CisKK2ludCBEZXRlY3RDYWxsRGVwdGg6OkZ1bmN0aW9uTm9kZTo6ZGV0ZWN0Q2FsbERlcHRoKERl
dGVjdENhbGxEZXB0aCogZGV0ZWN0Q2FsbERlcHRoLCBpbnQgZGVwdGgpCit7CisgICAgQVNTRVJU
KHZpc2l0ID09IFByZVZpc2l0KTsKKyAgICBBU1NFUlQoZGV0ZWN0Q2FsbERlcHRoKTsKKworICAg
IGludCBtYXhEZXB0aCA9IGRlcHRoOworICAgIHZpc2l0ID0gSW5WaXNpdDsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGNhbGxlZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgc3dpdGNoIChj
YWxsZWVzW2ldLT52aXNpdCkgeworICAgICAgICAgICAgY2FzZSBJblZpc2l0OgorICAgICAgICAg
ICAgICAgIC8vIGN5Y2xlIGRldGVjdGVkLCBpLmUuLCByZWN1cnNpb24gZGV0ZWN0ZWQuCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGtJbmZpbml0ZUNhbGxEZXB0aDsKKyAgICAgICAgICAgIGNhc2Ug
UG9zdFZpc2l0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBQcmVW
aXNpdDogeworICAgICAgICAgICAgICAgIC8vIENoZWNrIGJlZm9yZSB3ZSByZWN1cnNlIHNvIHdl
IGRvbid0IGdvIHRvbyBkZXB0aAorICAgICAgICAgICAgICAgIGlmIChkZXRlY3RDYWxsRGVwdGgt
PmNoZWNrRXhjZWVkc01heERlcHRoKGRlcHRoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGRlcHRoOworICAgICAgICAgICAgICAgIGludCBjYWxsRGVwdGggPSBjYWxsZWVzW2ldLT5kZXRl
Y3RDYWxsRGVwdGgoZGV0ZWN0Q2FsbERlcHRoLCBkZXB0aCArIDEpOworICAgICAgICAgICAgICAg
IC8vIENoZWNrIGFmdGVyIHdlIHJlY3Vyc2Ugc28gd2UgY2FuIGV4aXQgaW1tZWRpYXRlbHkgYW5k
IHByb3ZpZGUgaW5mby4KKyAgICAgICAgICAgICAgICBpZiAoZGV0ZWN0Q2FsbERlcHRoLT5jaGVj
a0V4Y2VlZHNNYXhEZXB0aChjYWxsRGVwdGgpKSB7CisgICAgICAgICAgICAgICAgICAgIGRldGVj
dENhbGxEZXB0aC0+Z2V0SW5mb1NpbmsoKS5pbmZvIDw8ICI8LSIgPDwgY2FsbGVlc1tpXS0+Z2V0
TmFtZSgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbERlcHRoOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBtYXhEZXB0aCA9IHN0ZDo6bWF4KGNhbGxEZXB0aCwg
bWF4RGVwdGgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHZpc2l0ID0gUG9zdFZpc2l0Owor
ICAgIHJldHVybiBtYXhEZXB0aDsKK30KKwordm9pZCBEZXRlY3RDYWxsRGVwdGg6OkZ1bmN0aW9u
Tm9kZTo6cmVzZXQoKQoreworICAgIHZpc2l0ID0gUHJlVmlzaXQ7Cit9CisKK0RldGVjdENhbGxE
ZXB0aDo6RGV0ZWN0Q2FsbERlcHRoKFRJbmZvU2luayYgaW5mb1NpbmssIGJvb2wgbGltaXRDYWxs
U3RhY2tEZXB0aCwgaW50IG1heENhbGxTdGFja0RlcHRoKQorICAgIDogVEludGVybVRyYXZlcnNl
cih0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpLAorICAgICAgY3VycmVudEZ1bmN0aW9uKE5VTEwp
LAorICAgICAgaW5mb1NpbmsoaW5mb1NpbmspLAorICAgICAgbWF4RGVwdGgobGltaXRDYWxsU3Rh
Y2tEZXB0aCA/IG1heENhbGxTdGFja0RlcHRoIDogRnVuY3Rpb25Ob2RlOjprSW5maW5pdGVDYWxs
RGVwdGgpCit7Cit9CisKK0RldGVjdENhbGxEZXB0aDo6fkRldGVjdENhbGxEZXB0aCgpCit7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAg
IGRlbGV0ZSBmdW5jdGlvbnNbaV07Cit9CisKK2Jvb2wgRGV0ZWN0Q2FsbERlcHRoOjp2aXNpdEFn
Z3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK3sKKyAgICBzd2l0
Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAgICBjYXNlIEVPcFByb3RvdHlwZToKKyAg
ICAgICAgICAgIC8vIEZ1bmN0aW9uIGRlY2xhcmF0aW9uLgorICAgICAgICAgICAgLy8gRG9uJ3Qg
YWRkIEZ1bmN0aW9uTm9kZSBoZXJlIGJlY2F1c2Ugbm9kZS0+Z2V0TmFtZSgpIGlzIHRoZQorICAg
ICAgICAgICAgLy8gdW5tYW5nbGVkIGZ1bmN0aW9uIG5hbWUuCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BGdW5jdGlvbjogeworICAgICAgICAgICAgLy8gRnVuY3Rpb24gZGVm
aW5pdGlvbi4KKyAgICAgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkgeworICAgICAgICAg
ICAgICAgIGN1cnJlbnRGdW5jdGlvbiA9IGZpbmRGdW5jdGlvbkJ5TmFtZShub2RlLT5nZXROYW1l
KCkpOworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50RnVuY3Rpb24gPT0gTlVMTCkgeworICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50RnVuY3Rpb24gPSBuZXcgRnVuY3Rpb25Ob2RlKG5vZGUt
PmdldE5hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9ucy5wdXNoX2JhY2soY3Vy
cmVudEZ1bmN0aW9uKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYg
KHZpc2l0ID09IFBvc3RWaXNpdCkgeworICAgICAgICAgICAgICAgIGN1cnJlbnRGdW5jdGlvbiA9
IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIEVPcEZ1bmN0aW9uQ2FsbDogeworICAgICAgICAgICAgLy8gRnVuY3Rpb24gY2Fs
bC4KKyAgICAgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkgeworICAgICAgICAgICAgICAg
IEZ1bmN0aW9uTm9kZSogZnVuYyA9IGZpbmRGdW5jdGlvbkJ5TmFtZShub2RlLT5nZXROYW1lKCkp
OworICAgICAgICAgICAgICAgIGlmIChmdW5jID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZnVuYyA9IG5ldyBGdW5jdGlvbk5vZGUobm9kZS0+Z2V0TmFtZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgZnVuY3Rpb25zLnB1c2hfYmFjayhmdW5jKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGdW5jdGlvbikKKyAgICAgICAgICAgICAgICAgICAg
Y3VycmVudEZ1bmN0aW9uLT5hZGRDYWxsZWUoZnVuYyk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIERldGVjdENhbGxEZXB0aDo6
Y2hlY2tFeGNlZWRzTWF4RGVwdGgoaW50IGRlcHRoKQoreworICAgIHJldHVybiBkZXB0aCA+PSBt
YXhEZXB0aDsKK30KKwordm9pZCBEZXRlY3RDYWxsRGVwdGg6OnJlc2V0RnVuY3Rpb25Ob2Rlcygp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbnMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgZnVuY3Rpb25zW2ldLT5yZXNldCgpOworICAgIH0KK30KKworRGV0ZWN0Q2FsbERl
cHRoOjpFcnJvckNvZGUgRGV0ZWN0Q2FsbERlcHRoOjpkZXRlY3RDYWxsRGVwdGhGb3JGdW5jdGlv
bihGdW5jdGlvbk5vZGUqIGZ1bmMpCit7CisgICAgY3VycmVudEZ1bmN0aW9uID0gTlVMTDsKKyAg
ICByZXNldEZ1bmN0aW9uTm9kZXMoKTsKKworICAgIGludCBtYXhDYWxsRGVwdGggPSBmdW5jLT5k
ZXRlY3RDYWxsRGVwdGgodGhpcywgMSk7CisKKyAgICBpZiAobWF4Q2FsbERlcHRoID09IEZ1bmN0
aW9uTm9kZTo6a0luZmluaXRlQ2FsbERlcHRoKQorICAgICAgICByZXR1cm4ga0Vycm9yUmVjdXJz
aW9uOworCisgICAgaWYgKG1heENhbGxEZXB0aCA+PSBtYXhEZXB0aCkKKyAgICAgICAgcmV0dXJu
IGtFcnJvck1heERlcHRoRXhjZWVkZWQ7CisKKyAgICByZXR1cm4ga0Vycm9yTm9uZTsKK30KKwor
RGV0ZWN0Q2FsbERlcHRoOjpFcnJvckNvZGUgRGV0ZWN0Q2FsbERlcHRoOjpkZXRlY3RDYWxsRGVw
dGgoKQoreworICAgIGlmIChtYXhEZXB0aCAhPSBGdW5jdGlvbk5vZGU6OmtJbmZpbml0ZUNhbGxE
ZXB0aCkgeworICAgICAgICAvLyBDaGVjayBhbGwgZnVuY3Rpb25zIGJlY2F1c2UgdGhlIGRyaXZl
ciBtYXkgZmFpbCBvbiB0aGVtCisgICAgICAgIC8vIFRPRE86IEJlZm9yZSBkZXRlY3RpbmdSZWN1
cnNpb24sIHN0cmlwIHVudXNlZCBmdW5jdGlvbnMuCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZnVuY3Rpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBFcnJvckNvZGUgZXJy
b3IgPSBkZXRlY3RDYWxsRGVwdGhGb3JGdW5jdGlvbihmdW5jdGlvbnNbaV0pOworICAgICAgICAg
ICAgaWYgKGVycm9yICE9IGtFcnJvck5vbmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgRnVuY3Rpb25Ob2RlKiBtYWluID0g
ZmluZEZ1bmN0aW9uQnlOYW1lKCJtYWluKCIpOworICAgICAgICBpZiAobWFpbiA9PSBOVUxMKQor
ICAgICAgICAgICAgcmV0dXJuIGtFcnJvck1pc3NpbmdNYWluOworCisgICAgICAgIHJldHVybiBk
ZXRlY3RDYWxsRGVwdGhGb3JGdW5jdGlvbihtYWluKTsKKyAgICB9CisKKyAgICByZXR1cm4ga0Vy
cm9yTm9uZTsKK30KKworRGV0ZWN0Q2FsbERlcHRoOjpGdW5jdGlvbk5vZGUqIERldGVjdENhbGxE
ZXB0aDo6ZmluZEZ1bmN0aW9uQnlOYW1lKAorICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUpCit7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgaWYgKGZ1bmN0aW9uc1tpXS0+Z2V0TmFtZSgpID09IG5hbWUpCisgICAgICAgICAgICByZXR1
cm4gZnVuY3Rpb25zW2ldOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0
Q2FsbERlcHRoLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9EZXRlY3RDYWxsRGVwdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZTdmMjNkMTVmOGMxODZmMjU3Mzc2
ODEwN2QyNWIyNWJhZDNhMmJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0Q2FsbERlcHRoLmgKQEAgLTAsMCAr
MSw4MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9ERVRFQ1RfUkVD
VVJTSU9OX0hfCisjZGVmaW5lIENPTVBJTEVSX0RFVEVDVF9SRUNVUlNJT05fSF8KKworI2luY2x1
ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5oIgorCitjbGFzcyBUSW5mb1Npbms7CisKKy8vIFRy
YXZlcnNlcyBpbnRlcm1lZGlhdGUgdHJlZSB0byBkZXRlY3QgZnVuY3Rpb24gcmVjdXJzaW9uLgor
Y2xhc3MgRGV0ZWN0Q2FsbERlcHRoIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGlj
OgorICAgIGVudW0gRXJyb3JDb2RlIHsKKyAgICAgICAga0Vycm9yTWlzc2luZ01haW4sCisgICAg
ICAgIGtFcnJvclJlY3Vyc2lvbiwKKyAgICAgICAga0Vycm9yTWF4RGVwdGhFeGNlZWRlZCwKKyAg
ICAgICAga0Vycm9yTm9uZQorICAgIH07CisKKyAgICBEZXRlY3RDYWxsRGVwdGgoVEluZm9TaW5r
JiBpbmZvU3luYywgYm9vbCBsaW1pdENhbGxTdGFja0RlcHRoLCBpbnQgbWF4Q2FsbFN0YWNrRGVw
dGgpOworICAgIH5EZXRlY3RDYWxsRGVwdGgoKTsKKworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEFn
Z3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOworCisgICAgYm9vbCBjaGVja0V4Y2Vl
ZHNNYXhEZXB0aChpbnQgZGVwdGgpOworCisgICAgRXJyb3JDb2RlIGRldGVjdENhbGxEZXB0aCgp
OworCitwcml2YXRlOgorICAgIGNsYXNzIEZ1bmN0aW9uTm9kZSB7CisgICAgcHVibGljOgorICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IGtJbmZpbml0ZUNhbGxEZXB0aCA9IElOVF9NQVg7CisKKyAg
ICAgICAgRnVuY3Rpb25Ob2RlKGNvbnN0IFRTdHJpbmcmIGZuYW1lKTsKKworICAgICAgICBjb25z
dCBUU3RyaW5nJiBnZXROYW1lKCkgY29uc3Q7CisKKyAgICAgICAgLy8gSWYgYSBmdW5jdGlvbiBp
cyBhbHJlYWR5IGluIHRoZSBjYWxsZWUgbGlzdCwgdGhpcyBiZWNvbWVzIGEgbm8tb3AuCisgICAg
ICAgIHZvaWQgYWRkQ2FsbGVlKEZ1bmN0aW9uTm9kZSogY2FsbGVlKTsKKworICAgICAgICAvLyBS
ZXR1cm5zIGtJbmlmaW5pdHlDYWxsRGVwdGggaWYgcmVjdXJzaXZlIGZ1bmN0aW9uIGNhbGxzIGFy
ZSBkZXRlY3RlZC4KKyAgICAgICAgaW50IGRldGVjdENhbGxEZXB0aChEZXRlY3RDYWxsRGVwdGgq
IGRldGVjdENhbGxEZXB0aCwgaW50IGRlcHRoKTsKKworICAgICAgICAvLyBSZXNldCBzdGF0ZS4K
KyAgICAgICAgdm9pZCByZXNldCgpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgLy8gbWFuZ2xl
ZCBmdW5jdGlvbiBuYW1lIGlzIHVuaXF1ZS4KKyAgICAgICAgVFN0cmluZyBuYW1lOworCisgICAg
ICAgIC8vIGZ1bmN0aW9ucyB0aGF0IGFyZSBkaXJlY3RseSBjYWxsZWQgYnkgdGhpcyBmdW5jdGlv
bi4KKyAgICAgICAgVFZlY3RvcjxGdW5jdGlvbk5vZGUqPiBjYWxsZWVzOworCisgICAgICAgIFZp
c2l0IHZpc2l0OworICAgIH07CisKKyAgICBFcnJvckNvZGUgZGV0ZWN0Q2FsbERlcHRoRm9yRnVu
Y3Rpb24oRnVuY3Rpb25Ob2RlKiBmdW5jKTsKKyAgICBGdW5jdGlvbk5vZGUqIGZpbmRGdW5jdGlv
bkJ5TmFtZShjb25zdCBUU3RyaW5nJiBuYW1lKTsKKyAgICB2b2lkIHJlc2V0RnVuY3Rpb25Ob2Rl
cygpOworCisgICAgVEluZm9TaW5rJiBnZXRJbmZvU2luaygpIHsgcmV0dXJuIGluZm9TaW5rOyB9
CisKKyAgICBUVmVjdG9yPEZ1bmN0aW9uTm9kZSo+IGZ1bmN0aW9uczsKKyAgICBGdW5jdGlvbk5v
ZGUqIGN1cnJlbnRGdW5jdGlvbjsKKyAgICBUSW5mb1NpbmsmIGluZm9TaW5rOworICAgIGludCBt
YXhEZXB0aDsKKworICAgIERldGVjdENhbGxEZXB0aChjb25zdCBEZXRlY3RDYWxsRGVwdGgmKTsK
KyAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBEZXRlY3RDYWxsRGVwdGgmKTsKK307CisKKyNlbmRp
ZiAgLy8gQ09NUElMRVJfREVURUNUX1JFQ1VSU0lPTl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0RGlzY29udGludWl0
eS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9E
ZXRlY3REaXNjb250aW51aXR5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMzRlYjBiZmE4YmFmNWEyNDYwYTFk
MjZmNzVlMGM1NWUxMDc4MDZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0RGlzY29udGludWl0eS5jcHAKQEAg
LTAsMCArMSwxMzkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gQ29udGFpbnMgYW5hbHlzaXMgdXRpbGl0
aWVzIGZvciBkZWFsaW5nIHdpdGggSExTTCdzIGxhY2sgb2Ygc3VwcG9ydCBmb3IKKy8vIHRoZSB1
c2Ugb2YgaW50cmluc2ljIGZ1bmN0aW9ucyB3aGljaCAoaW1wbGljaXRseSBvciBleHBsaWNpdGx5
KSBjb21wdXRlCisvLyBncmFkaWVudHMgb2YgZnVuY3Rpb25zIHdpdGggZGlzY29udGludWl0aWVz
LiAKKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0RldGVjdERpc2NvbnRpbnVp
dHkuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCisK
K25hbWVzcGFjZSBzaAoreworYm9vbCBEZXRlY3RMb29wRGlzY29udGludWl0eTo6dHJhdmVyc2Uo
VEludGVybU5vZGUgKm5vZGUpCit7CisgICAgbUxvb3BEZXB0aCA9IDA7CisgICAgbUxvb3BEaXNj
b250aW51aXR5ID0gZmFsc2U7CisgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgcmV0dXJu
IG1Mb29wRGlzY29udGludWl0eTsKK30KKworYm9vbCBEZXRlY3RMb29wRGlzY29udGludWl0eTo6
dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbG9vcCkKK3sKKyAgICBpZiAodmlz
aXQgPT0gUHJlVmlzaXQpCisgICAgeworICAgICAgICArK21Mb29wRGVwdGg7CisgICAgfQorICAg
IGVsc2UgaWYgKHZpc2l0ID09IFBvc3RWaXNpdCkKKyAgICB7CisgICAgICAgIC0tbUxvb3BEZXB0
aDsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBEZXRlY3RMb29wRGlzY29u
dGludWl0eTo6dmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2ggKm5vZGUpCit7
CisgICAgaWYgKG1Mb29wRGlzY29udGludWl0eSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBpZiAoIW1Mb29wRGVwdGgpCisgICAgeworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldEZsb3dPcCgpKQorICAgIHsKKyAg
ICAgIGNhc2UgRU9wS2lsbDoKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEJyZWFrOgor
ICAgICAgY2FzZSBFT3BDb250aW51ZToKKyAgICAgIGNhc2UgRU9wUmV0dXJuOgorICAgICAgICBt
TG9vcERpc2NvbnRpbnVpdHkgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuICFtTG9vcERpc2NvbnRpbnVpdHk7
Cit9CisKK2Jvb2wgRGV0ZWN0TG9vcERpc2NvbnRpbnVpdHk6OnZpc2l0QWdncmVnYXRlKFZpc2l0
IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQoreworICAgIHJldHVybiAhbUxvb3BEaXNj
b250aW51aXR5OworfQorCitib29sIGNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkoVEludGVybU5v
ZGUgKm5vZGUpCit7CisgICAgRGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkgZGV0ZWN0TG9vcERpc2Nv
bnRpbnVpdHk7CisgICAgcmV0dXJuIGRldGVjdExvb3BEaXNjb250aW51aXR5LnRyYXZlcnNlKG5v
ZGUpOworfQorCitib29sIERldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp0cmF2ZXJzZShUSW50ZXJt
Tm9kZSAqbm9kZSkKK3sKKyAgICBtR3JhZGllbnRPcGVyYXRpb24gPSBmYWxzZTsKKyAgICBub2Rl
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICByZXR1cm4gbUdyYWRpZW50T3BlcmF0aW9uOworfQorCiti
b29sIERldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50
ZXJtVW5hcnkgKm5vZGUpCit7CisgICAgaWYgKG1HcmFkaWVudE9wZXJhdGlvbikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkp
CisgICAgeworICAgICAgY2FzZSBFT3BERmR4OgorICAgICAgY2FzZSBFT3BERmR5OgorICAgICAg
ICBtR3JhZGllbnRPcGVyYXRpb24gPSB0cnVlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgcmV0dXJuICFtR3JhZGllbnRPcGVyYXRpb247Cit9CisKK2Jvb2wg
RGV0ZWN0R3JhZGllbnRPcGVyYXRpb246OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50
ZXJtQWdncmVnYXRlICpub2RlKQoreworICAgIGlmIChtR3JhZGllbnRPcGVyYXRpb24pCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG5vZGUtPmdldE9wKCkg
PT0gRU9wRnVuY3Rpb25DYWxsKQorICAgIHsKKyAgICAgICAgaWYgKCFub2RlLT5pc1VzZXJEZWZp
bmVkKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6
dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7CisKKyAgICAgICAgICAgIGlmIChuYW1lID09
ICJ0ZXh0dXJlMkQiIHx8CisgICAgICAgICAgICAgICAgbmFtZSA9PSAidGV4dHVyZTJEUHJvaiIg
fHwKKyAgICAgICAgICAgICAgICBuYW1lID09ICJ0ZXh0dXJlQ3ViZSIpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgbUdyYWRpZW50T3BlcmF0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFdo
ZW4gYSB1c2VyIGRlZmluZWQgZnVuY3Rpb24gaXMgY2FsbGVkLCB3ZSBoYXZlIHRvCisgICAgICAg
ICAgICAvLyBjb25zZXJ2YXRpdmVseSBhc3N1bWUgaXQgdG8gY29udGFpbiBncmFkaWVudCBvcGVy
YXRpb25zCisgICAgICAgICAgICBtR3JhZGllbnRPcGVyYXRpb24gPSB0cnVlOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuICFtR3JhZGllbnRPcGVyYXRpb247Cit9CisKK2Jvb2wgY29u
dGFpbnNHcmFkaWVudE9wZXJhdGlvbihUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBEZXRlY3RH
cmFkaWVudE9wZXJhdGlvbiBkZXRlY3RHcmFkaWVudE9wZXJhdGlvbjsKKyAgICByZXR1cm4gZGV0
ZWN0R3JhZGllbnRPcGVyYXRpb24udHJhdmVyc2Uobm9kZSk7Cit9Cit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EZXRlY3REaXNj
b250aW51aXR5LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9EZXRlY3REaXNjb250aW51aXR5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWRkOGJlOTIzMzU5YzNmZTZk
YWM5NGY1MjcyNjBjMzM1YjMzMTM5MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RldGVjdERpc2NvbnRpbnVpdHkuaApA
QCAtMCwwICsxLDUyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIENvbnRhaW5zIGFuYWx5c2lzIHV0aWxp
dGllcyBmb3IgZGVhbGluZyB3aXRoIEhMU0wncyBsYWNrIG9mIHN1cHBvcnQgZm9yCisvLyB0aGUg
dXNlIG9mIGludHJpbnNpYyBmdW5jdGlvbnMgd2hpY2ggKGltcGxpY2l0bHkgb3IgZXhwbGljaXRs
eSkgY29tcHV0ZQorLy8gZ3JhZGllbnRzIG9mIGZ1bmN0aW9ucyB3aXRoIGRpc2NvbnRpbnVpdGll
cy4gCisvLworCisjaWZuZGVmIENPTVBJTEVSX0RFVEVDVERJU0NPTlRJTlVJVFlfSF8KKyNkZWZp
bmUgQ09NUElMRVJfREVURUNURElTQ09OVElOVUlUWV9IXworCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKworbmFtZXNwYWNlIHNoCit7CisvLyBDaGVja3Mg
d2hldGhlciBhIGxvb3AgY2FuIHJ1biBmb3IgYSB2YXJpYWJsZSBudW1iZXIgb2YgaXRlcmF0aW9u
cworY2xhc3MgRGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkgOiBwdWJsaWMgVEludGVybVRyYXZlcnNl
cgoreworICBwdWJsaWM6CisgICAgYm9vbCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7CisK
KyAgcHJvdGVjdGVkOgorICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1C
cmFuY2ggKm5vZGUpOworICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9v
cCAqbG9vcCk7CisgICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFn
Z3JlZ2F0ZSAqbm9kZSk7CisKKyAgICBpbnQgbUxvb3BEZXB0aDsKKyAgICBib29sIG1Mb29wRGlz
Y29udGludWl0eTsKK307CisKK2Jvb2wgY29udGFpbnNMb29wRGlzY29udGludWl0eShUSW50ZXJt
Tm9kZSAqbm9kZSk7CisKKy8vIENoZWNrcyBmb3IgaW50cmluc2ljIGZ1bmN0aW9ucyB3aGljaCBj
b21wdXRlIGdyYWRpZW50cworY2xhc3MgRGV0ZWN0R3JhZGllbnRPcGVyYXRpb24gOiBwdWJsaWMg
VEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgYm9vbCB0cmF2ZXJzZShUSW50ZXJt
Tm9kZSAqbm9kZSk7CisKKyAgcHJvdGVjdGVkOgorICAgIGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2
aXNpdCwgVEludGVybVVuYXJ5ICpub2RlKTsKKyAgICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0
IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKTsKKworICAgIGJvb2wgbUdyYWRpZW50T3Bl
cmF0aW9uOworfTsKKworYm9vbCBjb250YWluc0dyYWRpZW50T3BlcmF0aW9uKFRJbnRlcm1Ob2Rl
ICpub2RlKTsKKworfQorCisjZW5kaWYgICAvLyBDT01QSUxFUl9ERVRFQ1RESVNDT05USU5VSVRZ
X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9EaWFnbm9zdGljcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTk1MDZjMDg0OTQy
MmZlMWRiMzI0OWJhZmI4NzcyZGFiYzU2MTExNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RpYWdub3N0aWNzLmNwcApA
QCAtMCwwICsxLDYzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvRGlhZ25vc3RpY3MuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvY29t
cGlsZXJkZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIK
KyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvU291cmNlTG9jYXRpb24uaCIKKworVERp
YWdub3N0aWNzOjpURGlhZ25vc3RpY3MoVEluZm9TaW5rJiBpbmZvU2luaykgOgorICAgIG1JbmZv
U2luayhpbmZvU2luayksCisgICAgbU51bUVycm9ycygwKSwKKyAgICBtTnVtV2FybmluZ3MoMCkK
K3sKK30KKworVERpYWdub3N0aWNzOjp+VERpYWdub3N0aWNzKCkKK3sKK30KKwordm9pZCBURGlh
Z25vc3RpY3M6OndyaXRlSW5mbyhTZXZlcml0eSBzZXZlcml0eSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiByZWFzb24sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0b2tlbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGV4dHJhKQoreworICAgIFRQcmVmaXhU
eXBlIHByZWZpeCA9IEVQcmVmaXhOb25lOworICAgIHN3aXRjaCAoc2V2ZXJpdHkpCisgICAgewor
ICAgICAgY2FzZSBQUF9FUlJPUjoKKyAgICAgICAgKyttTnVtRXJyb3JzOworICAgICAgICBwcmVm
aXggPSBFUHJlZml4RXJyb3I7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBQUF9XQVJOSU5H
OgorICAgICAgICArK21OdW1XYXJuaW5nczsKKyAgICAgICAgcHJlZml4ID0gRVByZWZpeFdhcm5p
bmc7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgVEluZm9TaW5rQmFzZSYgc2luayA9IG1J
bmZvU2luay5pbmZvOworICAgIC8qIFZDKysgZm9ybWF0OiBmaWxlKGxpbmVudW0pIDogZXJyb3Ig
IzogJ3Rva2VuJyA6IGV4dHJhaW5mbyAqLworICAgIHNpbmsucHJlZml4KHByZWZpeCk7CisgICAg
c2luay5sb2NhdGlvbihsb2MuZmlsZSwgbG9jLmxpbmUpOworICAgIHNpbmsgPDwgIiciIDw8IHRv
a2VuIDw8ICAiJyA6ICIgPDwgcmVhc29uIDw8ICIgIiA8PCBleHRyYSA8PCAiXG4iOworfQorCit2
b2lkIFREaWFnbm9zdGljczo6d3JpdGVEZWJ1Zyhjb25zdCBzdGQ6OnN0cmluZyYgc3RyKQorewor
ICAgIG1JbmZvU2luay5kZWJ1ZyA8PCBzdHI7Cit9CisKK3ZvaWQgVERpYWdub3N0aWNzOjpwcmlu
dChJRCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcDo6U291cmNlTG9jYXRp
b24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdGV4
dCkKK3sKKyAgICB3cml0ZUluZm8oc2V2ZXJpdHkoaWQpLCBsb2MsIG1lc3NhZ2UoaWQpLCB0ZXh0
LCAiIik7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlhZ25vc3RpY3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYjcxYmIxMjA0
MjI4YTc0NzM3NGEyNmVmZDg5YzdjNjcyYmI1NmI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlhZ25vc3RpY3MuaApA
QCAtMCwwICsxLDQ0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9ESUFHTk9T
VElDU19IXworI2RlZmluZSBDT01QSUxFUl9ESUFHTk9TVElDU19IXworCisjaW5jbHVkZSAiY29t
cGlsZXIvcHJlcHJvY2Vzc29yL0RpYWdub3N0aWNzQmFzZS5oIgorCitjbGFzcyBUSW5mb1Npbms7
CisKK2NsYXNzIFREaWFnbm9zdGljcyA6IHB1YmxpYyBwcDo6RGlhZ25vc3RpY3MKK3sKKyAgcHVi
bGljOgorICAgIFREaWFnbm9zdGljcyhUSW5mb1NpbmsmIGluZm9TaW5rKTsKKyAgICB2aXJ0dWFs
IH5URGlhZ25vc3RpY3MoKTsKKworICAgIFRJbmZvU2luayYgaW5mb1NpbmsoKSB7IHJldHVybiBt
SW5mb1Npbms7IH0KKworICAgIGludCBudW1FcnJvcnMoKSBjb25zdCB7IHJldHVybiBtTnVtRXJy
b3JzOyB9CisgICAgaW50IG51bVdhcm5pbmdzKCkgY29uc3QgeyByZXR1cm4gbU51bVdhcm5pbmdz
OyB9CisKKyAgICB2b2lkIHdyaXRlSW5mbyhTZXZlcml0eSBzZXZlcml0eSwKKyAgICAgICAgICAg
ICAgICAgICBjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdGQ6OnN0cmluZyYgcmVhc29uLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0
ZDo6c3RyaW5nJiB0b2tlbiwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYg
ZXh0cmEpOworCisgICAgdm9pZCB3cml0ZURlYnVnKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIpOwor
CisgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoSUQgaWQsCisgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdGV4dCk7CisKKyAgcHJpdmF0ZToKKyAgICBU
SW5mb1NpbmsmIG1JbmZvU2luazsKKyAgICBpbnQgbU51bUVycm9yczsKKyAgICBpbnQgbU51bVdh
cm5pbmdzOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9ESUFHTk9TVElDU19IXwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGly
ZWN0aXZlSGFuZGxlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NjJjOGFlNjI0MDFi
ZmIzNjllZjBmOGVjZGE4ODVhMmRlNjQ4NWIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFuZGxlci5j
cHAKQEAgLTAsMCArMSwxNjEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmgiCisKKyNpbmNsdWRlIDxzc3RyZWFtPgorCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9jb21waWxlcmRlYnVnLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5oIgorCitzdGF0aWMgVEJlaGF2aW9yIGdl
dEJlaGF2aW9yKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIpCit7CisgICAgc3RhdGljIGNvbnN0IHN0
ZDo6c3RyaW5nIGtSZXF1aXJlKCJyZXF1aXJlIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3Ry
aW5nIGtFbmFibGUoImVuYWJsZSIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlz
YWJsZSgiZGlzYWJsZSIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrV2Fybigid2Fy
biIpOworCisgICAgaWYgKHN0ciA9PSBrUmVxdWlyZSkgcmV0dXJuIEVCaFJlcXVpcmU7CisgICAg
ZWxzZSBpZiAoc3RyID09IGtFbmFibGUpIHJldHVybiBFQmhFbmFibGU7CisgICAgZWxzZSBpZiAo
c3RyID09IGtEaXNhYmxlKSByZXR1cm4gRUJoRGlzYWJsZTsKKyAgICBlbHNlIGlmIChzdHIgPT0g
a1dhcm4pIHJldHVybiBFQmhXYXJuOworICAgIHJldHVybiBFQmhVbmRlZmluZWQ7Cit9CisKK1RE
aXJlY3RpdmVIYW5kbGVyOjpURGlyZWN0aXZlSGFuZGxlcihURXh0ZW5zaW9uQmVoYXZpb3ImIGV4
dEJlaGF2aW9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9z
dGljcyYgZGlhZ25vc3RpY3MpCisgICAgOiBtRXh0ZW5zaW9uQmVoYXZpb3IoZXh0QmVoYXZpb3Ip
LAorICAgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQoreworfQorCitURGlyZWN0aXZlSGFu
ZGxlcjo6flREaXJlY3RpdmVIYW5kbGVyKCkKK3sKK30KKwordm9pZCBURGlyZWN0aXZlSGFuZGxl
cjo6aGFuZGxlRXJyb3IoY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbXNnKQoreworICAg
IG1EaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpQUF9FUlJPUiwgbG9jLCBt
c2csICIiLCAiIik7Cit9CisKK3ZvaWQgVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZVByYWdtYShj
b25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpCit7CisgICAgc3RhdGlj
IGNvbnN0IHN0ZDo6c3RyaW5nIGtTVERHTCgiU1RER0wiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3Rk
OjpzdHJpbmcga09wdGltaXplKCJvcHRpbWl6ZSIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0
cmluZyBrRGVidWcoImRlYnVnIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtPbigi
b24iKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga09mZigib2ZmIik7CisKKyAgICBi
b29sIGludmFsaWRWYWx1ZSA9IGZhbHNlOworICAgIGlmIChuYW1lID09IGtTVERHTCkKKyAgICB7
CisgICAgICAgIC8vIFRoZSBTVERHTCBwcmFnbWEgaXMgdXNlZCB0byByZXNlcnZlIHByYWdtYXMg
Zm9yIHVzZSBieSBmdXR1cmUKKyAgICAgICAgLy8gcmV2aXNpb25zIG9mIEdMU0wuIElnbm9yZSBp
dC4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBlbHNlIGlmIChuYW1lID09IGtPcHRpbWl6
ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSA9PSBrT24pIG1QcmFnbWEub3B0aW1pemUgPSB0
cnVlOworICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBrT2ZmKSBtUHJhZ21hLm9wdGltaXplID0g
ZmFsc2U7CisgICAgICAgIGVsc2UgaW52YWxpZFZhbHVlID0gdHJ1ZTsKKyAgICB9CisgICAgZWxz
ZSBpZiAobmFtZSA9PSBrRGVidWcpCisgICAgeworICAgICAgICBpZiAodmFsdWUgPT0ga09uKSBt
UHJhZ21hLmRlYnVnID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0ga09mZikgbVBy
YWdtYS5kZWJ1ZyA9IGZhbHNlOworICAgICAgICBlbHNlIGludmFsaWRWYWx1ZSA9IHRydWU7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy5yZXBvcnQocHA6OkRp
YWdub3N0aWNzOjpQUF9VTlJFQ09HTklaRURfUFJBR01BLCBsb2MsIG5hbWUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGludmFsaWRWYWx1ZSkKKyAgICAgIG1EaWFnbm9zdGlj
cy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpQUF9FUlJPUiwgbG9jLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiaW52YWxpZCBwcmFnbWEgdmFsdWUiLCB2YWx1ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIidvbicgb3IgJ29mZicgZXhwZWN0ZWQiKTsKK30KKwordm9p
ZCBURGlyZWN0aXZlSGFuZGxlcjo6aGFuZGxlRXh0ZW5zaW9uKGNvbnN0IHBwOjpTb3VyY2VMb2Nh
dGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHN0ZDo6c3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBiZWhhdmlvcikKK3sKKyAgICBzdGF0aWMgY29uc3Qgc3Rk
OjpzdHJpbmcga0V4dEFsbCgiYWxsIik7CisKKyAgICBUQmVoYXZpb3IgYmVoYXZpb3JWYWwgPSBn
ZXRCZWhhdmlvcihiZWhhdmlvcik7CisgICAgaWYgKGJlaGF2aW9yVmFsID09IEVCaFVuZGVmaW5l
ZCkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNz
OjpQUF9FUlJPUiwgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZWhhdmlv
ciIsIG5hbWUsICJpbnZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
bmFtZSA9PSBrRXh0QWxsKQorICAgIHsKKyAgICAgICAgaWYgKGJlaGF2aW9yVmFsID09IEVCaFJl
cXVpcmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EaWFnbm9zdGljcy53cml0ZUluZm8ocHA6
OkRpYWdub3N0aWNzOjpQUF9FUlJPUiwgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiZXh0ZW5zaW9uIiwgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImNhbm5vdCBoYXZlICdyZXF1aXJlJyBiZWhhdmlvciIpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKGJlaGF2aW9yVmFsID09IEVCaEVuYWJsZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgbURpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OlBQX0VSUk9SLCBs
b2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHRlbnNpb24iLCBuYW1l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IGhhdmUgJ2VuYWJs
ZScgYmVoYXZpb3IiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGZvciAoVEV4dGVuc2lvbkJlaGF2aW9yOjppdGVyYXRvciBpdGVyID0gbUV4dGVuc2lv
bkJlaGF2aW9yLmJlZ2luKCk7CisgICAgICAgICAgICAgICAgIGl0ZXIgIT0gbUV4dGVuc2lvbkJl
aGF2aW9yLmVuZCgpOyArK2l0ZXIpCisgICAgICAgICAgICAgICAgaXRlci0+c2Vjb25kID0gYmVo
YXZpb3JWYWw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFRFeHRl
bnNpb25CZWhhdmlvcjo6aXRlcmF0b3IgaXRlciA9IG1FeHRlbnNpb25CZWhhdmlvci5maW5kKG5h
bWUpOworICAgIGlmIChpdGVyICE9IG1FeHRlbnNpb25CZWhhdmlvci5lbmQoKSkKKyAgICB7Cisg
ICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgcHA6OkRpYWdub3N0aWNzOjpTZXZlcml0eSBzZXZlcml0eSA9IHBwOjpEaWFnbm9z
dGljczo6UFBfRVJST1I7CisgICAgc3dpdGNoIChiZWhhdmlvclZhbCkgeworICAgICAgY2FzZSBF
QmhSZXF1aXJlOgorICAgICAgICBzZXZlcml0eSA9IHBwOjpEaWFnbm9zdGljczo6UFBfRVJST1I7
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFQmhFbmFibGU6CisgICAgICBjYXNlIEVCaFdh
cm46CisgICAgICBjYXNlIEVCaERpc2FibGU6CisgICAgICAgIHNldmVyaXR5ID0gcHA6OkRpYWdu
b3N0aWNzOjpQUF9XQVJOSU5HOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBtRGlhZ25vc3Rp
Y3Mud3JpdGVJbmZvKHNldmVyaXR5LCBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ZXh0ZW5zaW9uIiwgbmFtZSwgImlzIG5vdCBzdXBwb3J0ZWQiKTsKK30KKwordm9pZCBURGlyZWN0
aXZlSGFuZGxlcjo6aGFuZGxlVmVyc2lvbihjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZlcnNpb24pCit7Cisg
ICAgc3RhdGljIGNvbnN0IGludCBrVmVyc2lvbiA9IDEwMDsKKworICAgIGlmICh2ZXJzaW9uICE9
IGtWZXJzaW9uKQorICAgIHsKKyAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOworICAg
ICAgICBzdHJlYW0gPDwgdmVyc2lvbjsKKyAgICAgICAgc3RkOjpzdHJpbmcgc3RyID0gc3RyZWFt
LnN0cigpOworICAgICAgICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6
UFBfRVJST1IsIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmVyc2lvbiBu
dW1iZXIiLCBzdHIsICJub3Qgc3VwcG9ydGVkIik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFu
ZGxlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
RGlyZWN0aXZlSGFuZGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmViNWYwNTU0OTQ5ODg5MTVjMTRjMmM2YmZh
Y2FiMWFhNGNkY2UzMWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmgKQEAgLTAsMCArMSw0
NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfRElSRUNUSVZFX0hBTkRMRVJf
SF8KKyNkZWZpbmUgQ09NUElMRVJfRElSRUNUSVZFX0hBTkRMRVJfSF8KKworI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvRXh0ZW5zaW9uQmVoYXZpb3IuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1ByYWdtYS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9E
aXJlY3RpdmVIYW5kbGVyQmFzZS5oIgorCitjbGFzcyBURGlhZ25vc3RpY3M7CisKK2NsYXNzIFRE
aXJlY3RpdmVIYW5kbGVyIDogcHVibGljIHBwOjpEaXJlY3RpdmVIYW5kbGVyCit7CisgIHB1Ymxp
YzoKKyAgICBURGlyZWN0aXZlSGFuZGxlcihURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9y
LAorICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9zdGljcyYgZGlhZ25vc3RpY3MpOworICAg
IHZpcnR1YWwgflREaXJlY3RpdmVIYW5kbGVyKCk7CisKKyAgICBjb25zdCBUUHJhZ21hJiBwcmFn
bWEoKSBjb25zdCB7IHJldHVybiBtUHJhZ21hOyB9CisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2
aW9yJiBleHRlbnNpb25CZWhhdmlvcigpIGNvbnN0IHsgcmV0dXJuIG1FeHRlbnNpb25CZWhhdmlv
cjsgfQorCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUVycm9yKGNvbnN0IHBwOjpTb3VyY2VMb2Nh
dGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmlu
ZyYgbXNnKTsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVQcmFnbWEoY29uc3QgcHA6OlNvdXJj
ZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6
OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6
c3RyaW5nJiB2YWx1ZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXh0ZW5zaW9uKGNvbnN0
IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBzdGQ6OnN0cmluZyYgYmVoYXZpb3IpOworCisgICAgdmlydHVhbCB2b2lkIGhh
bmRsZVZlcnNpb24oY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IHZlcnNpb24pOworCisgIHByaXZhdGU6CisgICAgVFByYWdt
YSBtUHJhZ21hOworICAgIFRFeHRlbnNpb25CZWhhdmlvciYgbUV4dGVuc2lvbkJlaGF2aW9yOwor
ICAgIFREaWFnbm9zdGljcyYgbURpYWdub3N0aWNzOworfTsKKworI2VuZGlmICAvLyBDT01QSUxF
Ul9ESVJFQ1RJVkVfSEFORExFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRXh0ZW5zaW9uQmVoYXZpb3IuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0V4dGVuc2lvbkJlaGF2aW9y
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNWMxNTk1ZmIyMTIxYThlYTc2YmJhMjI1N2M2ZjM2MzU2ZWYwMGU5ZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL0V4dGVuc2lvbkJlaGF2aW9yLmgKQEAgLTAsMCArMSwzNyBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworI2lmbmRlZiBfRVhURU5TSU9OX0JFSEFWSU9SX0lOQ0xVREVEXworI2RlZmlu
ZSBfRVhURU5TSU9OX0JFSEFWSU9SX0lOQ0xVREVEXworCisjaW5jbHVkZSA8bWFwPgorI2luY2x1
ZGUgPHN0cmluZz4KKwordHlwZWRlZiBlbnVtCit7CisgICAgRUJoUmVxdWlyZSwKKyAgICBFQmhF
bmFibGUsCisgICAgRUJoV2FybiwKKyAgICBFQmhEaXNhYmxlLAorICAgIEVCaFVuZGVmaW5lZAor
fSBUQmVoYXZpb3I7CisKK2lubGluZSBjb25zdCBjaGFyKiBnZXRCZWhhdmlvclN0cmluZyhUQmVo
YXZpb3IgYikKK3sKKyAgICBzd2l0Y2goYikKKyAgICB7CisgICAgICBjYXNlIEVCaFJlcXVpcmU6
IHJldHVybiAicmVxdWlyZSI7CisgICAgICBjYXNlIEVCaEVuYWJsZTogcmV0dXJuICJlbmFibGUi
OworICAgICAgY2FzZSBFQmhXYXJuOiByZXR1cm4gIndhcm4iOworICAgICAgY2FzZSBFQmhEaXNh
YmxlOiByZXR1cm4gImRpc2FibGUiOworICAgICAgZGVmYXVsdDogcmV0dXJuIE5VTEw7CisgICAg
fQorfQorCisvLyBNYXBwaW5nIGJldHdlZW4gZXh0ZW5zaW9uIG5hbWUgYW5kIGJlaGF2aW9yLgor
dHlwZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgVEJlaGF2aW9yPiBURXh0ZW5zaW9uQmVoYXZp
b3I7CisKKyNlbmRpZiAvLyBfRVhURU5TSU9OX1RBQkxFX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRm9yTG9vcFVu
cm9sbC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9Gb3JMb29wVW5yb2xsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OWU2ZjFhNjJiMWI5NTkyNzcwNjA4MDE1
NWI0MWY4NjdiZDYzYzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRm9yTG9vcFVucm9sbC5jcHAKQEAgLTAsMCArMSwy
MTUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L0Zvckxvb3BVbnJvbGwuaCIKKworbmFtZXNwYWNlIHsKKworY2xhc3MgSW50ZWdlckZvckxvb3BV
bnJvbGxNYXJrZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7CitwdWJsaWM6CisKKyAgICB2
aXJ0dWFsIGJvb2wgdmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCogbm9kZSkKKyAgICB7Cisg
ICAgICAgIC8vIFRoaXMgaXMgY2FsbGVkIGFmdGVyIFZhbGlkYXRlTGltaXRhdGlvbnMgcGFzcywg
c28gYWxsIHRoZSBBU1NFUlQKKyAgICAgICAgLy8gc2hvdWxkIG5ldmVyIGZhaWwuCisgICAgICAg
IC8vIFNlZSBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvb3BJbml0KCkuCisgICAg
ICAgIEFTU0VSVChub2RlKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmdldFR5cGUoKSA9PSBFTG9v
cEZvcik7CisgICAgICAgIEFTU0VSVChub2RlLT5nZXRJbml0KCkpOworICAgICAgICBUSW50ZXJt
QWdncmVnYXRlKiBkZWNsID0gbm9kZS0+Z2V0SW5pdCgpLT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAg
ICAgICBBU1NFUlQoZGVjbCAmJiBkZWNsLT5nZXRPcCgpID09IEVPcERlY2xhcmF0aW9uKTsKKyAg
ICAgICAgVEludGVybVNlcXVlbmNlJiBkZWNsU2VxID0gZGVjbC0+Z2V0U2VxdWVuY2UoKTsKKyAg
ICAgICAgQVNTRVJUKGRlY2xTZXEuc2l6ZSgpID09IDEpOworICAgICAgICBUSW50ZXJtQmluYXJ5
KiBkZWNsSW5pdCA9IGRlY2xTZXFbMF0tPmdldEFzQmluYXJ5Tm9kZSgpOworICAgICAgICBBU1NF
UlQoZGVjbEluaXQgJiYgZGVjbEluaXQtPmdldE9wKCkgPT0gRU9wSW5pdGlhbGl6ZSk7CisgICAg
ICAgIEFTU0VSVChkZWNsSW5pdC0+Z2V0TGVmdCgpKTsKKyAgICAgICAgVEludGVybVN5bWJvbCog
c3ltYm9sID0gZGVjbEluaXQtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgICAg
IEFTU0VSVChzeW1ib2wpOworICAgICAgICBUQmFzaWNUeXBlIHR5cGUgPSBzeW1ib2wtPmdldEJh
c2ljVHlwZSgpOworICAgICAgICBBU1NFUlQodHlwZSA9PSBFYnRJbnQgfHwgdHlwZSA9PSBFYnRG
bG9hdCk7CisgICAgICAgIGlmICh0eXBlID09IEVidEludCkKKyAgICAgICAgICAgIG5vZGUtPnNl
dFVucm9sbEZsYWcodHJ1ZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworfTsKKwor
fSAgLy8gYW5vbnltb3VzIG5hbWVwc2FjZQorCit2b2lkIEZvckxvb3BVbnJvbGw6OkZpbGxMb29w
SW5kZXhJbmZvKFRJbnRlcm1Mb29wKiBub2RlLCBUTG9vcEluZGV4SW5mbyYgaW5mbykKK3sKKyAg
ICBBU1NFUlQobm9kZS0+Z2V0VHlwZSgpID09IEVMb29wRm9yKTsKKyAgICBBU1NFUlQobm9kZS0+
Z2V0VW5yb2xsRmxhZygpKTsKKworICAgIFRJbnRlcm1Ob2RlKiBpbml0ID0gbm9kZS0+Z2V0SW5p
dCgpOworICAgIEFTU0VSVChpbml0ICE9IE5VTEwpOworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGRl
Y2wgPSBpbml0LT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAgIEFTU0VSVCgoZGVjbCAhPSBOVUxMKSAm
JiAoZGVjbC0+Z2V0T3AoKSA9PSBFT3BEZWNsYXJhdGlvbikpOworICAgIFRJbnRlcm1TZXF1ZW5j
ZSYgZGVjbFNlcSA9IGRlY2wtPmdldFNlcXVlbmNlKCk7CisgICAgQVNTRVJUKGRlY2xTZXEuc2l6
ZSgpID09IDEpOworICAgIFRJbnRlcm1CaW5hcnkqIGRlY2xJbml0ID0gZGVjbFNlcVswXS0+Z2V0
QXNCaW5hcnlOb2RlKCk7CisgICAgQVNTRVJUKChkZWNsSW5pdCAhPSBOVUxMKSAmJiAoZGVjbElu
aXQtPmdldE9wKCkgPT0gRU9wSW5pdGlhbGl6ZSkpOworICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJv
bCA9IGRlY2xJbml0LT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOworICAgIEFTU0VSVChz
eW1ib2wgIT0gTlVMTCk7CisgICAgQVNTRVJUKHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0
SW50KTsKKworICAgIGluZm8uaWQgPSBzeW1ib2wtPmdldElkKCk7CisKKyAgICBBU1NFUlQoZGVj
bEluaXQtPmdldFJpZ2h0KCkgIT0gTlVMTCk7CisgICAgVEludGVybUNvbnN0YW50VW5pb24qIGlu
aXROb2RlID0gZGVjbEluaXQtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAg
IEFTU0VSVChpbml0Tm9kZSAhPSBOVUxMKTsKKworICAgIGluZm8uaW5pdFZhbHVlID0gZXZhbHVh
dGVJbnRDb25zdGFudChpbml0Tm9kZSk7CisgICAgaW5mby5jdXJyZW50VmFsdWUgPSBpbmZvLmlu
aXRWYWx1ZTsKKworICAgIFRJbnRlcm1Ob2RlKiBjb25kID0gbm9kZS0+Z2V0Q29uZGl0aW9uKCk7
CisgICAgQVNTRVJUKGNvbmQgIT0gTlVMTCk7CisgICAgVEludGVybUJpbmFyeSogYmluT3AgPSBj
b25kLT5nZXRBc0JpbmFyeU5vZGUoKTsKKyAgICBBU1NFUlQoYmluT3AgIT0gTlVMTCk7CisgICAg
QVNTRVJUKGJpbk9wLT5nZXRSaWdodCgpICE9IE5VTEwpOworICAgIEFTU0VSVChiaW5PcC0+Z2V0
UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCkgIT0gTlVMTCk7CisKKyAgICBpbmZvLmluY3Jl
bWVudFZhbHVlID0gZ2V0TG9vcEluY3JlbWVudChub2RlKTsKKyAgICBpbmZvLnN0b3BWYWx1ZSA9
IGV2YWx1YXRlSW50Q29uc3RhbnQoCisgICAgICAgIGJpbk9wLT5nZXRSaWdodCgpLT5nZXRBc0Nv
bnN0YW50VW5pb24oKSk7CisgICAgaW5mby5vcCA9IGJpbk9wLT5nZXRPcCgpOworfQorCit2b2lk
IEZvckxvb3BVbnJvbGw6OlN0ZXAoKQoreworICAgIEFTU0VSVChtTG9vcEluZGV4U3RhY2suc2l6
ZSgpID4gMCk7CisgICAgVExvb3BJbmRleEluZm8mIGluZm8gPSBtTG9vcEluZGV4U3RhY2tbbUxv
b3BJbmRleFN0YWNrLnNpemUoKSAtIDFdOworICAgIGluZm8uY3VycmVudFZhbHVlICs9IGluZm8u
aW5jcmVtZW50VmFsdWU7Cit9CisKK2Jvb2wgRm9yTG9vcFVucm9sbDo6U2F0aXNmaWVzTG9vcENv
bmRpdGlvbigpCit7CisgICAgQVNTRVJUKG1Mb29wSW5kZXhTdGFjay5zaXplKCkgPiAwKTsKKyAg
ICBUTG9vcEluZGV4SW5mbyYgaW5mbyA9IG1Mb29wSW5kZXhTdGFja1ttTG9vcEluZGV4U3RhY2su
c2l6ZSgpIC0gMV07CisgICAgLy8gUmVsYXRpb25hbCBvcGVyYXRvciBpcyBvbmUgb2Y6ID4gPj0g
PCA8PSA9PSBvciAhPS4KKyAgICBzd2l0Y2ggKGluZm8ub3ApIHsKKyAgICAgIGNhc2UgRU9wRXF1
YWw6CisgICAgICAgIHJldHVybiAoaW5mby5jdXJyZW50VmFsdWUgPT0gaW5mby5zdG9wVmFsdWUp
OworICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKKyAgICAgICAgcmV0dXJuIChpbmZvLmN1cnJlbnRW
YWx1ZSAhPSBpbmZvLnN0b3BWYWx1ZSk7CisgICAgICBjYXNlIEVPcExlc3NUaGFuOgorICAgICAg
ICByZXR1cm4gKGluZm8uY3VycmVudFZhbHVlIDwgaW5mby5zdG9wVmFsdWUpOworICAgICAgY2Fz
ZSBFT3BHcmVhdGVyVGhhbjoKKyAgICAgICAgcmV0dXJuIChpbmZvLmN1cnJlbnRWYWx1ZSA+IGlu
Zm8uc3RvcFZhbHVlKTsKKyAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoKKyAgICAgICAgcmV0
dXJuIChpbmZvLmN1cnJlbnRWYWx1ZSA8PSBpbmZvLnN0b3BWYWx1ZSk7CisgICAgICBjYXNlIEVP
cEdyZWF0ZXJUaGFuRXF1YWw6CisgICAgICAgIHJldHVybiAoaW5mby5jdXJyZW50VmFsdWUgPj0g
aW5mby5zdG9wVmFsdWUpOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEZvckxvb3BVbnJvbGw6Ok5lZWRz
VG9SZXBsYWNlU3ltYm9sV2l0aFZhbHVlKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCkKK3sKKyAgICBm
b3IgKFRWZWN0b3I8VExvb3BJbmRleEluZm8+OjppdGVyYXRvciBpID0gbUxvb3BJbmRleFN0YWNr
LmJlZ2luKCk7CisgICAgICAgICBpICE9IG1Mb29wSW5kZXhTdGFjay5lbmQoKTsKKyAgICAgICAg
ICsraSkgeworICAgICAgICBpZiAoaS0+aWQgPT0gc3ltYm9sLT5nZXRJZCgpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworaW50IEZvckxv
b3BVbnJvbGw6OkdldExvb3BJbmRleFZhbHVlKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCkKK3sKKyAg
ICBmb3IgKFRWZWN0b3I8VExvb3BJbmRleEluZm8+OjppdGVyYXRvciBpID0gbUxvb3BJbmRleFN0
YWNrLmJlZ2luKCk7CisgICAgICAgICBpICE9IG1Mb29wSW5kZXhTdGFjay5lbmQoKTsKKyAgICAg
ICAgICsraSkgeworICAgICAgICBpZiAoaS0+aWQgPT0gc3ltYm9sLT5nZXRJZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIGktPmN1cnJlbnRWYWx1ZTsKKyAgICB9CisgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgRm9yTG9vcFVucm9sbDo6UHVzaChUTG9vcElu
ZGV4SW5mbyYgaW5mbykKK3sKKyAgICBtTG9vcEluZGV4U3RhY2sucHVzaF9iYWNrKGluZm8pOwor
fQorCit2b2lkIEZvckxvb3BVbnJvbGw6OlBvcCgpCit7CisgICAgbUxvb3BJbmRleFN0YWNrLnBv
cF9iYWNrKCk7Cit9CisKKy8vIHN0YXRpYwordm9pZCBGb3JMb29wVW5yb2xsOjpNYXJrRm9yTG9v
cHNXaXRoSW50ZWdlckluZGljZXNGb3JVbnJvbGxpbmcoCisgICAgVEludGVybU5vZGUqIHJvb3Qp
Cit7CisgICAgQVNTRVJUKHJvb3QpOworCisgICAgSW50ZWdlckZvckxvb3BVbnJvbGxNYXJrZXIg
bWFya2VyOworICAgIHJvb3QtPnRyYXZlcnNlKCZtYXJrZXIpOworfQorCitpbnQgRm9yTG9vcFVu
cm9sbDo6Z2V0TG9vcEluY3JlbWVudChUSW50ZXJtTG9vcCogbm9kZSkKK3sKKyAgICBUSW50ZXJt
Tm9kZSogZXhwciA9IG5vZGUtPmdldEV4cHJlc3Npb24oKTsKKyAgICBBU1NFUlQoZXhwciAhPSBO
VUxMKTsKKyAgICAvLyBmb3IgZXhwcmVzc2lvbiBoYXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9y
bXM6CisgICAgLy8gICAgIGxvb3BfaW5kZXgrKworICAgIC8vICAgICBsb29wX2luZGV4LS0KKyAg
ICAvLyAgICAgbG9vcF9pbmRleCArPSBjb25zdGFudF9leHByZXNzaW9uCisgICAgLy8gICAgIGxv
b3BfaW5kZXggLT0gY29uc3RhbnRfZXhwcmVzc2lvbgorICAgIC8vICAgICArK2xvb3BfaW5kZXgK
KyAgICAvLyAgICAgLS1sb29wX2luZGV4CisgICAgLy8gVGhlIGxhc3QgdHdvIGZvcm1zIGFyZSBu
b3Qgc3BlY2lmaWVkIGluIHRoZSBzcGVjLCBidXQgSSBhbSBhc3N1bWluZworICAgIC8vIGl0cyBh
biBvdmVyc2lnaHQuCisgICAgVEludGVybVVuYXJ5KiB1bk9wID0gZXhwci0+Z2V0QXNVbmFyeU5v
ZGUoKTsKKyAgICBUSW50ZXJtQmluYXJ5KiBiaW5PcCA9IHVuT3AgPyBOVUxMIDogZXhwci0+Z2V0
QXNCaW5hcnlOb2RlKCk7CisKKyAgICBUT3BlcmF0b3Igb3AgPSBFT3BOdWxsOworICAgIFRJbnRl
cm1Db25zdGFudFVuaW9uKiBpbmNyZW1lbnROb2RlID0gTlVMTDsKKyAgICBpZiAodW5PcCAhPSBO
VUxMKSB7CisgICAgICAgIG9wID0gdW5PcC0+Z2V0T3AoKTsKKyAgICB9IGVsc2UgaWYgKGJpbk9w
ICE9IE5VTEwpIHsKKyAgICAgICAgb3AgPSBiaW5PcC0+Z2V0T3AoKTsKKyAgICAgICAgQVNTRVJU
KGJpbk9wLT5nZXRSaWdodCgpICE9IE5VTEwpOworICAgICAgICBpbmNyZW1lbnROb2RlID0gYmlu
T3AtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAgICAgICBBU1NFUlQoaW5j
cmVtZW50Tm9kZSAhPSBOVUxMKTsKKyAgICB9CisKKyAgICBpbnQgaW5jcmVtZW50ID0gMDsKKyAg
ICAvLyBUaGUgb3BlcmF0b3IgaXMgb25lIG9mOiArKyAtLSArPSAtPS4KKyAgICBzd2l0Y2ggKG9w
KSB7CisgICAgICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQcmVJ
bmNyZW1lbnQ6CisgICAgICAgICAgICBBU1NFUlQoKHVuT3AgIT0gTlVMTCkgJiYgKGJpbk9wID09
IE5VTEwpKTsKKyAgICAgICAgICAgIGluY3JlbWVudCA9IDE7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OgorICAgICAgICBjYXNlIEVPcFByZURlY3Jl
bWVudDoKKyAgICAgICAgICAgIEFTU0VSVCgodW5PcCAhPSBOVUxMKSAmJiAoYmluT3AgPT0gTlVM
TCkpOworICAgICAgICAgICAgaW5jcmVtZW50ID0gLTE7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BBZGRBc3NpZ246CisgICAgICAgICAgICBBU1NFUlQoKHVuT3AgPT0gTlVM
TCkgJiYgKGJpbk9wICE9IE5VTEwpKTsKKyAgICAgICAgICAgIGluY3JlbWVudCA9IGV2YWx1YXRl
SW50Q29uc3RhbnQoaW5jcmVtZW50Tm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BTdWJBc3NpZ246CisgICAgICAgICAgICBBU1NFUlQoKHVuT3AgPT0gTlVMTCkgJiYg
KGJpbk9wICE9IE5VTEwpKTsKKyAgICAgICAgICAgIGluY3JlbWVudCA9IC0gZXZhbHVhdGVJbnRD
b25zdGFudChpbmNyZW1lbnROb2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gaW5j
cmVtZW50OworfQorCitpbnQgRm9yTG9vcFVucm9sbDo6ZXZhbHVhdGVJbnRDb25zdGFudChUSW50
ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSkKK3sKKyAgICBBU1NFUlQoKG5vZGUgIT0gTlVMTCkgJiYg
KG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCkgIT0gTlVMTCkpOworICAgIHJldHVybiBub2Rl
LT5nZXRJQ29uc3QoMCk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hZmQ3MGQxZmQyNWM5OTU0NjgwY2Q0ZGFhMDI4NWMwMDhkZWNiMDZkCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Rm9yTG9vcFVucm9sbC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVm
IENPTVBJTEVSX0ZPUkxPT1BVTlJPTExfSF8KKyNkZWZpbmUgQ09NUElMRVJfRk9STE9PUFVOUk9M
TF9IXworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKwor
c3RydWN0IFRMb29wSW5kZXhJbmZvIHsKKyAgICBpbnQgaWQ7CisgICAgaW50IGluaXRWYWx1ZTsK
KyAgICBpbnQgc3RvcFZhbHVlOworICAgIGludCBpbmNyZW1lbnRWYWx1ZTsKKyAgICBUT3BlcmF0
b3Igb3A7CisgICAgaW50IGN1cnJlbnRWYWx1ZTsKK307CisKK2NsYXNzIEZvckxvb3BVbnJvbGwg
eworcHVibGljOgorICAgIEZvckxvb3BVbnJvbGwoKSB7IH0KKworICAgIHZvaWQgRmlsbExvb3BJ
bmRleEluZm8oVEludGVybUxvb3AqIG5vZGUsIFRMb29wSW5kZXhJbmZvJiBpbmZvKTsKKworICAg
IC8vIFVwZGF0ZSB0aGUgaW5mby5jdXJyZW50VmFsdWUgZm9yIHRoZSBuZXh0IGxvb3AgaXRlcmF0
aW9uLgorICAgIHZvaWQgU3RlcCgpOworCisgICAgLy8gUmV0dXJuIGZhbHNlIGlmIGxvb3AgY29u
ZGl0aW9uIGlzIG5vIGxvbmdlciBzYXRpc2ZpZWQuCisgICAgYm9vbCBTYXRpc2ZpZXNMb29wQ29u
ZGl0aW9uKCk7CisKKyAgICAvLyBDaGVjayBpZiB0aGUgc3ltYm9sIGlzIHRoZSBpbmRleCBvZiBh
IGxvb3AgdGhhdCdzIHVucm9sbGVkLgorICAgIGJvb2wgTmVlZHNUb1JlcGxhY2VTeW1ib2xXaXRo
VmFsdWUoVEludGVybVN5bWJvbCogc3ltYm9sKTsKKworICAgIC8vIFJldHVybiB0aGUgY3VycmVu
dCB2YWx1ZSBvZiBhIGdpdmVuIGxvb3AgaW5kZXggc3ltYm9sLgorICAgIGludCBHZXRMb29wSW5k
ZXhWYWx1ZShUSW50ZXJtU3ltYm9sKiBzeW1ib2wpOworCisgICAgdm9pZCBQdXNoKFRMb29wSW5k
ZXhJbmZvJiBpbmZvKTsKKyAgICB2b2lkIFBvcCgpOworCisgICAgc3RhdGljIHZvaWQgTWFya0Zv
ckxvb3BzV2l0aEludGVnZXJJbmRpY2VzRm9yVW5yb2xsaW5nKFRJbnRlcm1Ob2RlKiByb290KTsK
KworcHJpdmF0ZToKKyAgICBpbnQgZ2V0TG9vcEluY3JlbWVudChUSW50ZXJtTG9vcCogbm9kZSk7
CisKKyAgICBpbnQgZXZhbHVhdGVJbnRDb25zdGFudChUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9k
ZSk7CisKKyAgICBUVmVjdG9yPFRMb29wSW5kZXhJbmZvPiBtTG9vcEluZGV4U3RhY2s7Cit9Owor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0hhc2hOYW1lcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvSGFzaE5hbWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzUxMjY1Yjc1OTM1Nzdl
Y2E4ZWI4YjYzOTFmOGViMDY1ODVjMTdhOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0hhc2hOYW1lcy5oCkBAIC0wLDAg
KzEsMTkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfSEFTSF9OQU1F
U19IXworI2RlZmluZSBDT01QSUxFUl9IQVNIX05BTUVTX0hfCisKKyNpbmNsdWRlIDxtYXA+CisK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUg
IkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisjZGVmaW5lIEhBU0hFRF9OQU1FX1BSRUZJWCAid2Vi
Z2xfIgorCit0eXBlZGVmIHN0ZDo6bWFwPFRQZXJzaXN0U3RyaW5nLCBUUGVyc2lzdFN0cmluZz4g
TmFtZU1hcDsKKworI2VuZGlmICAvLyBDT01QSUxFUl9IQVNIX05BTUVTX0hfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2lu
ay5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9J
bmZvU2luay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Q1OTY1OGZmNzZjOTU3NzhmNTBkNDE5ZTlhNzQzZTYz
MjJjOTJhNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL0luZm9TaW5rLmNwcApAQCAtMCwwICsxLDU0IEBACisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgor
Cit2b2lkIFRJbmZvU2lua0Jhc2U6OnByZWZpeChUUHJlZml4VHlwZSBwKSB7CisgICAgc3dpdGNo
KHApIHsKKyAgICAgICAgY2FzZSBFUHJlZml4Tm9uZToKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEVQcmVmaXhXYXJuaW5nOgorICAgICAgICAgICAgc2luay5hcHBlbmQoIldBUk5J
Tkc6ICIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVByZWZpeEVycm9yOgor
ICAgICAgICAgICAgc2luay5hcHBlbmQoIkVSUk9SOiAiKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEVQcmVmaXhJbnRlcm5hbEVycm9yOgorICAgICAgICAgICAgc2luay5hcHBl
bmQoIklOVEVSTkFMIEVSUk9SOiAiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEVQcmVmaXhVbmltcGxlbWVudGVkOgorICAgICAgICAgICAgc2luay5hcHBlbmQoIlVOSU1QTEVN
RU5URUQ6ICIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVByZWZpeE5vdGU6
CisgICAgICAgICAgICBzaW5rLmFwcGVuZCgiTk9URTogIik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNpbmsuYXBwZW5kKCJVTktPV04gRVJST1I6
ICIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIFRJbmZvU2lua0Jhc2U6
OmxvY2F0aW9uKGludCBmaWxlLCBpbnQgbGluZSkgeworICAgIFRQZXJzaXN0U3RyaW5nU3RyZWFt
IHN0cmVhbTsKKyAgICBpZiAobGluZSkKKyAgICAgICAgc3RyZWFtIDw8IGZpbGUgPDwgIjoiIDw8
IGxpbmU7CisgICAgZWxzZQorICAgICAgICBzdHJlYW0gPDwgZmlsZSA8PCAiOj8gIjsKKyAgICBz
dHJlYW0gPDwgIjogIjsKKworICAgIHNpbmsuYXBwZW5kKHN0cmVhbS5zdHIoKSk7Cit9CisKK3Zv
aWQgVEluZm9TaW5rQmFzZTo6bG9jYXRpb24oY29uc3QgVFNvdXJjZUxvYyYgbG9jKSB7CisgICAg
bG9jYXRpb24obG9jLmZpcnN0X2ZpbGUsIGxvYy5maXJzdF9saW5lKTsKK30KKwordm9pZCBUSW5m
b1NpbmtCYXNlOjptZXNzYWdlKFRQcmVmaXhUeXBlIHAsIGNvbnN0IFRTb3VyY2VMb2MmIGxvYywg
Y29uc3QgY2hhciogbSkgeworICAgIHByZWZpeChwKTsKKyAgICBsb2NhdGlvbihsb2MpOworICAg
IHNpbmsuYXBwZW5kKG0pOworICAgIHNpbmsuYXBwZW5kKCJcbiIpOworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1Npbmsu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luZm9T
aW5rLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNjk4YThiNDU0YjNjZmE5ZDRlZDJkMDBiODYxNjdlOGMxMzJkMWZm
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0luZm9TaW5rLmgKQEAgLTAsMCArMSwxMTYgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNpZm5kZWYgX0lORk9TSU5LX0lOQ0xVREVEXworI2RlZmluZSBfSU5GT1NJTktfSU5D
TFVERURfCisKKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21tb24uaCIKKworLy8gUmV0dXJucyB0aGUgZnJhY3Rp
b25hbCBwYXJ0IG9mIHRoZSBnaXZlbiBmbG9hdGluZy1wb2ludCBudW1iZXIuCitpbmxpbmUgZmxv
YXQgZnJhY3Rpb25hbFBhcnQoZmxvYXQgZikgeworICBmbG9hdCBpbnRQYXJ0ID0gMC4wZjsKKyAg
cmV0dXJuIG1vZGZmKGYsICZpbnRQYXJ0KTsKK30KKworLy8KKy8vIFRQcmVmaXhUeXBlIGlzIHVz
ZWQgdG8gY2VudHJhbGl6ZSBob3cgaW5mbyBsb2cgbWVzc2FnZXMgc3RhcnQuCisvLyBTZWUgYmVs
b3cuCisvLworZW51bSBUUHJlZml4VHlwZSB7CisgICAgRVByZWZpeE5vbmUsCisgICAgRVByZWZp
eFdhcm5pbmcsCisgICAgRVByZWZpeEVycm9yLAorICAgIEVQcmVmaXhJbnRlcm5hbEVycm9yLAor
ICAgIEVQcmVmaXhVbmltcGxlbWVudGVkLAorICAgIEVQcmVmaXhOb3RlCit9OworCisvLworLy8g
RW5jYXBzdWxhdGUgaW5mbyBsb2dzIGZvciBhbGwgb2JqZWN0cyB0aGF0IGhhdmUgdGhlbS4KKy8v
CisvLyBUaGUgbWV0aG9kcyBhcmUgYSBnZW5lcmFsIHNldCBvZiB0b29scyBmb3IgZ2V0dGluZyBh
IHZhcmlldHkgb2YKKy8vIG1lc3NhZ2VzIGFuZCB0eXBlcyBpbnNlcnRlZCBpbnRvIHRoZSBsb2cu
CisvLworY2xhc3MgVEluZm9TaW5rQmFzZSB7CitwdWJsaWM6CisgICAgVEluZm9TaW5rQmFzZSgp
IHt9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBUSW5mb1NpbmtCYXNlJiBvcGVy
YXRvcjw8KGNvbnN0IFQmIHQpIHsKKyAgICAgICAgVFBlcnNpc3RTdHJpbmdTdHJlYW0gc3RyZWFt
OworICAgICAgICBzdHJlYW0gPDwgdDsKKyAgICAgICAgc2luay5hcHBlbmQoc3RyZWFtLnN0cigp
KTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICAvLyBPdmVycmlkZSA8PCBvcGVy
YXRvciBmb3Igc3BlY2lmaWMgdHlwZXMuIEl0IGlzIGZhc3RlciB0byBhcHBlbmQgc3RyaW5ncwor
ICAgIC8vIGFuZCBjaGFyYWN0ZXJzIGRpcmVjdGx5IHRvIHRoZSBzaW5rLgorICAgIFRJbmZvU2lu
a0Jhc2UmIG9wZXJhdG9yPDwoY2hhciBjKSB7CisgICAgICAgIHNpbmsuYXBwZW5kKDEsIGMpOwor
ICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIFRJbmZvU2lua0Jhc2UmIG9wZXJhdG9y
PDwoY29uc3QgY2hhciogc3RyKSB7CisgICAgICAgIHNpbmsuYXBwZW5kKHN0cik7CisgICAgICAg
IHJldHVybiAqdGhpczsKKyAgICB9CisgICAgVEluZm9TaW5rQmFzZSYgb3BlcmF0b3I8PChjb25z
dCBUUGVyc2lzdFN0cmluZyYgc3RyKSB7CisgICAgICAgIHNpbmsuYXBwZW5kKHN0cik7CisgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgVEluZm9TaW5rQmFzZSYgb3BlcmF0b3I8PChj
b25zdCBUU3RyaW5nJiBzdHIpIHsKKyAgICAgICAgc2luay5hcHBlbmQoc3RyLmNfc3RyKCkpOwor
ICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIC8vIE1ha2Ugc3VyZSBmbG9hdHMgYXJl
IHdyaXR0ZW4gd2l0aCBjb3JyZWN0IHByZWNpc2lvbi4KKyAgICBUSW5mb1NpbmtCYXNlJiBvcGVy
YXRvcjw8KGZsb2F0IGYpIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYXQgbGVhc3Qgb25l
IGRlY2ltYWwgcG9pbnQgaXMgd3JpdHRlbi4gSWYgYSBudW1iZXIKKyAgICAgICAgLy8gZG9lcyBu
b3QgaGF2ZSBhIGZyYWN0aW9uYWwgcGFydCwgdGhlIGRlZmF1bHQgcHJlY2lzaW9uIGZvcm1hdCBk
b2VzCisgICAgICAgIC8vIG5vdCB3cml0ZSB0aGUgZGVjaW1hbCBwb3J0aW9uIHdoaWNoIGdldHMg
aW50ZXJwcmV0ZWQgYXMgaW50ZWdlciBieQorICAgICAgICAvLyB0aGUgY29tcGlsZXIuCisgICAg
ICAgIFRQZXJzaXN0U3RyaW5nU3RyZWFtIHN0cmVhbTsKKyAgICAgICAgaWYgKGZyYWN0aW9uYWxQ
YXJ0KGYpID09IDAuMGYpIHsKKyAgICAgICAgICAgIHN0cmVhbS5wcmVjaXNpb24oMSk7CisgICAg
ICAgICAgICBzdHJlYW0gPDwgc3RkOjpzaG93cG9pbnQgPDwgc3RkOjpmaXhlZCA8PCBmOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RyZWFtLnVuc2V0ZihzdGQ6Omlvczo6Zml4ZWQp
OworICAgICAgICAgICAgc3RyZWFtLnVuc2V0ZihzdGQ6Omlvczo6c2NpZW50aWZpYyk7CisgICAg
ICAgICAgICBzdHJlYW0ucHJlY2lzaW9uKDgpOworICAgICAgICAgICAgc3RyZWFtIDw8IGY7Cisg
ICAgICAgIH0KKyAgICAgICAgc2luay5hcHBlbmQoc3RyZWFtLnN0cigpKTsKKyAgICAgICAgcmV0
dXJuICp0aGlzOworICAgIH0KKyAgICAvLyBXcml0ZSBib29sZWFuIHZhbHVlcyBhcyB0aGVpciBu
YW1lcyBpbnN0ZWFkIG9mIGludGVncmFsIHZhbHVlLgorICAgIFRJbmZvU2lua0Jhc2UmIG9wZXJh
dG9yPDwoYm9vbCBiKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIHN0ciA9IGIgPyAidHJ1ZSIgOiAi
ZmFsc2UiOworICAgICAgICBzaW5rLmFwcGVuZChzdHIpOworICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgfQorCisgICAgdm9pZCBlcmFzZSgpIHsgc2luay5jbGVhcigpOyB9CisgICAgaW50IHNp
emUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHNpbmsuc2l6ZSgpKTsgfQorCisgICAgY29u
c3QgVFBlcnNpc3RTdHJpbmcmIHN0cigpIGNvbnN0IHsgcmV0dXJuIHNpbms7IH0KKyAgICBjb25z
dCBjaGFyKiBjX3N0cigpIGNvbnN0IHsgcmV0dXJuIHNpbmsuY19zdHIoKTsgfQorCisgICAgdm9p
ZCBwcmVmaXgoVFByZWZpeFR5cGUgcCk7CisgICAgdm9pZCBsb2NhdGlvbihpbnQgZmlsZSwgaW50
IGxpbmUpOworICAgIHZvaWQgbG9jYXRpb24oY29uc3QgVFNvdXJjZUxvYyYgbG9jKTsKKyAgICB2
b2lkIG1lc3NhZ2UoVFByZWZpeFR5cGUgcCwgY29uc3QgVFNvdXJjZUxvYyYgbG9jLCBjb25zdCBj
aGFyKiBtKTsKKworcHJpdmF0ZToKKyAgICBUUGVyc2lzdFN0cmluZyBzaW5rOworfTsKKworY2xh
c3MgVEluZm9TaW5rIHsKK3B1YmxpYzoKKyAgICBUSW5mb1NpbmtCYXNlIGluZm87CisgICAgVElu
Zm9TaW5rQmFzZSBkZWJ1ZzsKKyAgICBUSW5mb1NpbmtCYXNlIG9iajsKK307CisKKyNlbmRpZiAv
LyBfSU5GT1NJTktfSU5DTFVERURfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemUuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmRiNzI4YjIxMjkzNzE2NzAxOTdkZjFkYzhkYWMyOTg0ZWU5YjI3YzgKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9J
bml0aWFsaXplLmNwcApAQCAtMCwwICsxLDU2NCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8K
Ky8vIENyZWF0ZSBzdHJpbmdzIHRoYXQgZGVjbGFyZSBidWlsdC1pbiBkZWZpbml0aW9ucywgYWRk
IGJ1aWx0LWlucyB0aGF0CisvLyBjYW5ub3QgYmUgZXhwcmVzc2VkIGluIHRoZSBmaWxlcywgYW5k
IGVzdGFibGlzaCBtYXBwaW5ncyBiZXR3ZWVuIAorLy8gYnVpbHQtaW4gZnVuY3Rpb25zIGFuZCBv
cGVyYXRvcnMuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXpl
LmgiCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgorCit2
b2lkIEluc2VydEJ1aWx0SW5GdW5jdGlvbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3Bl
YyBzcGVjLCBjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMgJnJlc291cmNlcywgVFN5bWJvbFRhYmxl
ICZzeW1ib2xUYWJsZSkKK3sKKyAgICBUVHlwZSAqZmxvYXQxID0gbmV3IFRUeXBlKEVidEZsb2F0
LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMSk7CisgICAgVFR5cGUgKmZsb2F0MiA9IG5ldyBU
VHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDIpOworICAgIFRUeXBlICpm
bG9hdDMgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAzKTsK
KyAgICBUVHlwZSAqZmxvYXQ0ID0gbmV3IFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2
cUdsb2JhbCwgNCk7CisKKyAgICBUVHlwZSAqaW50MiA9IG5ldyBUVHlwZShFYnRJbnQsIEVicFVu
ZGVmaW5lZCwgRXZxR2xvYmFsLCAyKTsKKyAgICBUVHlwZSAqaW50MyA9IG5ldyBUVHlwZShFYnRJ
bnQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAzKTsKKyAgICBUVHlwZSAqaW50NCA9IG5ldyBU
VHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCA0KTsKKworICAgIC8vCisgICAg
Ly8gQW5nbGUgYW5kIFRyaWdvbm9tZXRyaWMgRnVuY3Rpb25zLgorICAgIC8vCisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJyYWRpYW5zIiwgZmxvYXQxKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInJhZGlhbnMiLCBmbG9hdDIpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAicmFkaWFucyIsIGZsb2F0Myk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJyYWRpYW5zIiwgZmxvYXQ0KTsKKwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZGVncmVlcyIsIGZsb2F0MSk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJkZWdyZWVzIiwgZmxvYXQy
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImRlZ3JlZXMiLCBmbG9h
dDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZGVncmVlcyIsIGZs
b2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInNpbiIsIGZs
b2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJzaW4iLCBmbG9h
dDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAic2luIiwgZmxvYXQz
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInNpbiIsIGZsb2F0NCk7
CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImNvcyIsIGZsb2F0MSk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJjb3MiLCBmbG9hdDIpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiY29zIiwgZmxvYXQzKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImNvcyIsIGZsb2F0NCk7CisKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInRhbiIsIGZsb2F0MSk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJ0YW4iLCBmbG9hdDIpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAidGFuIiwgZmxvYXQzKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRhbiIsIGZsb2F0NCk7CisKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImFzaW4iLCBmbG9hdDEpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiYXNpbiIsIGZsb2F0Mik7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJhc2luIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImFzaW4iLCBmbG9hdDQpOworCisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJhY29zIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImFjb3MiLCBmbG9hdDIpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiYWNvcyIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJhY29zIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiYXRhbiIsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImF0YW4iLCBmbG9hdDIsIGZsb2F0Mik7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJhdGFuIiwgZmxvYXQzLCBm
bG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiYXRhbiIsIGZs
b2F0NCwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAi
YXRhbiIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJh
dGFuIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImF0
YW4iLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiYXRh
biIsIGZsb2F0NCk7CisKKyAgICAvLworICAgIC8vIEV4cG9uZW50aWFsIEZ1bmN0aW9ucy4KKyAg
ICAvLworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAicG93IiwgZmxvYXQx
LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAicG93Iiwg
ZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAi
cG93IiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQ0LCAicG93IiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDEsICJleHAiLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQyLCAiZXhwIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MywgImV4cCIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDQsICJleHAiLCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDEsICJsb2ciLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQyLCAibG9nIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MywgImxvZyIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQs
ICJsb2ciLCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEs
ICJleHAyIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0Miwg
ImV4cDIiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAi
ZXhwMiIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJl
eHAyIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAi
bG9nMiIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJs
b2cyIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImxv
ZzIiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibG9n
MiIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInNx
cnQiLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic3Fy
dCIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzcXJ0
IiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInNxcnQi
LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJpbnZl
cnNlc3FydCIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIs
ICJpbnZlcnNlc3FydCIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDMsICJpbnZlcnNlc3FydCIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDQsICJpbnZlcnNlc3FydCIsIGZsb2F0NCk7CisKKyAgICAvLworICAgIC8vIENv
bW1vbiBGdW5jdGlvbnMuCisgICAgLy8KKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MSwgImFicyIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDIsICJhYnMiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQz
LCAiYWJzIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwg
ImFicyIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwg
InNpZ24iLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAi
c2lnbiIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJz
aWduIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInNp
Z24iLCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJm
bG9vciIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJm
bG9vciIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJm
bG9vciIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJm
bG9vciIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwg
ImNlaWwiLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAi
Y2VpbCIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJj
ZWlsIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImNl
aWwiLCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJm
cmFjdCIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJm
cmFjdCIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJm
cmFjdCIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJm
cmFjdCIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwg
Im1vZCIsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MiwgIm1vZCIsIGZsb2F0MiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MywgIm1vZCIsIGZsb2F0MywgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0NCwgIm1vZCIsIGZsb2F0NCwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgIm1vZCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgIm1vZCIsIGZsb2F0MywgZmxvYXQzKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1vZCIsIGZsb2F0NCwgZmxvYXQ0
KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibWluIiwgZmxvYXQx
LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibWluIiwg
ZmxvYXQyLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAi
bWluIiwgZmxvYXQzLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQ0LCAibWluIiwgZmxvYXQ0LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQyLCAibWluIiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQzLCAibWluIiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibWluIiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJtYXgiLCBmbG9hdDEsIGZsb2F0MSk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJtYXgiLCBmbG9hdDIsIGZsb2F0
MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtYXgiLCBmbG9hdDMs
IGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJtYXgiLCBm
bG9hdDQsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJt
YXgiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDMsICJtYXgiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDQsICJtYXgiLCBmbG9hdDQsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MSwgImNsYW1wIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJjbGFtcCIsIGZsb2F0MiwgZmxvYXQx
LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiY2xhbXAi
LCBmbG9hdDMsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0NCwgImNsYW1wIiwgZmxvYXQ0LCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJjbGFtcCIsIGZsb2F0MiwgZmxvYXQyLCBmbG9hdDIp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiY2xhbXAiLCBmbG9hdDMs
IGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwg
ImNsYW1wIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MSwgIm1peCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibWl4IiwgZmxvYXQyLCBmbG9hdDIsIGZs
b2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtaXgiLCBmbG9h
dDMsIGZsb2F0MywgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
NCwgIm1peCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQyLCAibWl4IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtaXgiLCBmbG9hdDMsIGZsb2F0MywgZmxv
YXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1peCIsIGZsb2F0
NCwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDEsICJzdGVwIiwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQyLCAic3RlcCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MywgInN0ZXAiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJzdGVwIiwgZmxvYXQ0LCBmbG9hdDQpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQyKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInN0ZXAiLCBmbG9hdDEsIGZs
b2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJzdGVwIiwgZmxv
YXQxLCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJz
bW9vdGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDIsICJzbW9vdGhzdGVwIiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzbW9vdGhzdGVwIiwgZmxv
YXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDQsICJzbW9vdGhzdGVwIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJzbW9vdGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZs
b2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzbW9vdGhzdGVw
IiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDQsICJzbW9vdGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0NCk7CisKKyAgICAv
LworICAgIC8vIEdlb21ldHJpYyBGdW5jdGlvbnMuCisgICAgLy8KKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDEsICJsZW5ndGgiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibGVuZ3RoIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRpc3RhbmNlIiwgZmxvYXQxLCBmbG9hdDEpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZGlzdGFuY2UiLCBmbG9hdDIs
IGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkaXN0YW5j
ZSIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MSwgImRpc3RhbmNlIiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDEsICJkb3QiLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkb3QiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkb3QiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkb3QiLCBmbG9hdDQsIGZsb2F0NCk7
CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImNyb3NzIiwgZmxvYXQz
LCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibm9ybWFs
aXplIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgIm5v
cm1hbGl6ZSIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMs
ICJub3JtYWxpemUiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQ0LCAibm9ybWFsaXplIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQxLCAiZmFjZWZvcndhcmQiLCBmbG9hdDEsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImZhY2Vmb3J3YXJkIiwgZmxvYXQyLCBm
bG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJm
YWNlZm9yd2FyZCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQ0LCAiZmFjZWZvcndhcmQiLCBmbG9hdDQsIGZsb2F0NCwgZmxvYXQ0
KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAicmVmbGVjdCIsIGZs
b2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInJl
ZmxlY3QiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDMsICJyZWZsZWN0IiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQ0LCAicmVmbGVjdCIsIGZsb2F0NCwgZmxvYXQ0KTsKKworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAicmVmcmFjdCIsIGZsb2F0MSwgZmxvYXQxLCBm
bG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAicmVmcmFjdCIs
IGZsb2F0MiwgZmxvYXQyLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQzLCAicmVmcmFjdCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDEpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAicmVmcmFjdCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9h
dDEpOworCisgICAgVFR5cGUgKm1hdDIgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5l
ZCwgRXZxR2xvYmFsLCAyLCB0cnVlKTsKKyAgICBUVHlwZSAqbWF0MyA9IG5ldyBUVHlwZShFYnRG
bG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDMsIHRydWUpOworICAgIFRUeXBlICptYXQ0
ID0gbmV3IFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgNCwgdHJ1ZSk7
CisKKyAgICAvLworICAgIC8vIE1hdHJpeCBGdW5jdGlvbnMuCisgICAgLy8KKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKG1hdDIsICJtYXRyaXhDb21wTXVsdCIsIG1hdDIsIG1hdDIpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4obWF0MywgIm1hdHJpeENvbXBNdWx0IiwgbWF0
MywgbWF0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihtYXQ0LCAibWF0cml4Q29t
cE11bHQiLCBtYXQ0LCBtYXQ0KTsKKworICAgIFRUeXBlICpib29sMSA9IG5ldyBUVHlwZShFYnRC
b29sLCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMSk7CisgICAgVFR5cGUgKmJvb2wyID0gbmV3
IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAyKTsKKyAgICBUVHlwZSAq
Ym9vbDMgPSBuZXcgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDMpOwor
ICAgIFRUeXBlICpib29sNCA9IG5ldyBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUds
b2JhbCwgNCk7CisKKyAgICAvLworICAgIC8vIFZlY3RvciByZWxhdGlvbmFsIGZ1bmN0aW9ucy4K
KyAgICAvLworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJsZXNzVGhhbiIs
IGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAi
bGVzc1RoYW4iLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihib29sNCwgImxlc3NUaGFuIiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihib29sMiwgImxlc3NUaGFuIiwgaW50MiwgaW50Mik7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImxlc3NUaGFuIiwgaW50MywgaW50Myk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImxlc3NUaGFuIiwgaW50NCwgaW50NCk7
CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAibGVzc1RoYW5FcXVhbCIs
IGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAi
bGVzc1RoYW5FcXVhbCIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGJvb2w0LCAibGVzc1RoYW5FcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsKKworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJsZXNzVGhhbkVxdWFsIiwgaW50MiwgaW50
Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImxlc3NUaGFuRXF1YWwi
LCBpbnQzLCBpbnQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAibGVz
c1RoYW5FcXVhbCIsIGludDQsIGludDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihib29sMiwgImdyZWF0ZXJUaGFuIiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oYm9vbDMsICJncmVhdGVyVGhhbiIsIGZsb2F0MywgZmxvYXQzKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAiZ3JlYXRlclRoYW4iLCBmbG9hdDQs
IGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZ3JlYXRl
clRoYW4iLCBpbnQyLCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wz
LCAiZ3JlYXRlclRoYW4iLCBpbnQzLCBpbnQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGJvb2w0LCAiZ3JlYXRlclRoYW4iLCBpbnQ0LCBpbnQ0KTsKKworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oYm9vbDIsICJncmVhdGVyVGhhbkVxdWFsIiwgZmxvYXQyLCBmbG9hdDIp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJncmVhdGVyVGhhbkVxdWFs
IiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQs
ICJncmVhdGVyVGhhbkVxdWFsIiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihib29sMiwgImdyZWF0ZXJUaGFuRXF1YWwiLCBpbnQyLCBpbnQyKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZ3JlYXRlclRoYW5FcXVhbCIsIGlu
dDMsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJncmVhdGVy
VGhhbkVxdWFsIiwgaW50NCwgaW50NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGJvb2wyLCAiZXF1YWwiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihib29sMywgImVxdWFsIiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oYm9vbDQsICJlcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsKKworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJlcXVhbCIsIGludDIsIGludDIpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJlcXVhbCIsIGludDMsIGludDMpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJlcXVhbCIsIGludDQsIGludDQp
OworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImVxdWFsIiwgYm9vbDIs
IGJvb2wyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZXF1YWwiLCBi
b29sMywgYm9vbDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJlcXVh
bCIsIGJvb2w0LCBib29sNCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wy
LCAibm90RXF1YWwiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihib29sMywgIm5vdEVxdWFsIiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oYm9vbDQsICJub3RFcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsKKworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJub3RFcXVhbCIsIGludDIsIGludDIp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJub3RFcXVhbCIsIGludDMs
IGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJub3RFcXVhbCIs
IGludDQsIGludDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgIm5v
dEVxdWFsIiwgYm9vbDIsIGJvb2wyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJv
b2wzLCAibm90RXF1YWwiLCBib29sMywgYm9vbDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oYm9vbDQsICJub3RFcXVhbCIsIGJvb2w0LCBib29sNCk7CisKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGJvb2wxLCAiYW55IiwgYm9vbDIpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oYm9vbDEsICJhbnkiLCBib29sMyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihib29sMSwgImFueSIsIGJvb2w0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oYm9vbDEsICJhbGwiLCBib29sMik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihib29sMSwgImFsbCIsIGJvb2wzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJv
b2wxLCAiYWxsIiwgYm9vbDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29s
MiwgIm5vdCIsIGJvb2wyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAi
bm90IiwgYm9vbDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJub3Qi
LCBib29sNCk7CisKKyAgICBUVHlwZSAqc2FtcGxlcjJEID0gbmV3IFRUeXBlKEVidFNhbXBsZXIy
RCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDEpOworICAgIFRUeXBlICpzYW1wbGVyQ3ViZSA9
IG5ldyBUVHlwZShFYnRTYW1wbGVyQ3ViZSwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDEpOwor
CisgICAgLy8KKyAgICAvLyBUZXh0dXJlIEZ1bmN0aW9ucyBmb3IgR0xTTCBFUyAxLjAKKyAgICAv
LworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEIiwgc2Ft
cGxlcjJELCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAi
dGV4dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVyMkQsIGZsb2F0NCk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlQ3ViZSIsIHNhbXBs
ZXJDdWJlLCBmbG9hdDMpOworCisgICAgaWYgKHJlc291cmNlcy5PRVNfRUdMX2ltYWdlX2V4dGVy
bmFsKQorICAgIHsKKyAgICAgICAgVFR5cGUgKnNhbXBsZXJFeHRlcm5hbE9FUyA9IG5ldyBUVHlw
ZShFYnRTYW1wbGVyRXh0ZXJuYWxPRVMsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAxKTsKKwor
ICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRCIsIHNh
bXBsZXJFeHRlcm5hbE9FUywgZmxvYXQyKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlckV4dGVybmFsT0VTLCBmbG9hdDMp
OworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFBy
b2oiLCBzYW1wbGVyRXh0ZXJuYWxPRVMsIGZsb2F0NCk7CisgICAgfQorCisgICAgaWYgKHJlc291
cmNlcy5BUkJfdGV4dHVyZV9yZWN0YW5nbGUpCisgICAgeworICAgICAgICBUVHlwZSAqc2FtcGxl
cjJEUmVjdCA9IG5ldyBUVHlwZShFYnRTYW1wbGVyMkRSZWN0LCBFYnBVbmRlZmluZWQsIEV2cUds
b2JhbCwgMSk7CisKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0
ZXh0dXJlMkRSZWN0Iiwgc2FtcGxlcjJEUmVjdCwgZmxvYXQyKTsKKyAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRSZWN0UHJvaiIsIHNhbXBsZXIyRFJl
Y3QsIGZsb2F0Myk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAi
dGV4dHVyZTJEUmVjdFByb2oiLCBzYW1wbGVyMkRSZWN0LCBmbG9hdDQpOworICAgIH0KKworICAg
IGlmICh0eXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICB7CisgICAgICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEIiwgc2FtcGxlcjJELCBmbG9hdDIs
IGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4
dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVyMkQsIGZs
b2F0NCwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQs
ICJ0ZXh0dXJlQ3ViZSIsIHNhbXBsZXJDdWJlLCBmbG9hdDMsIGZsb2F0MSk7CisKKyAgICAgICAg
aWYgKHJlc291cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZEZkeCIsIGZsb2F0MSk7
CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImRGZHgiLCBm
bG9hdDIpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJk
RmR4IiwgZmxvYXQzKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQ0LCAiZEZkeCIsIGZsb2F0NCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZEZkeSIsIGZsb2F0MSk7CisgICAgICAgICAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImRGZHkiLCBmbG9hdDIpOworICAgICAg
ICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJkRmR5IiwgZmxvYXQzKTsK
KyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZEZkeSIsIGZs
b2F0NCk7CisKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAi
ZndpZHRoIiwgZmxvYXQxKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQyLCAiZndpZHRoIiwgZmxvYXQyKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQzLCAiZndpZHRoIiwgZmxvYXQzKTsKKyAgICAgICAgICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZndpZHRoIiwgZmxvYXQ0KTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmKHR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUikKKyAgICB7CisgICAgICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJETG9kIiwgc2FtcGxl
cjJELCBmbG9hdDIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQ0LCAidGV4dHVyZTJEUHJvakxvZCIsIHNhbXBsZXIyRCwgZmxvYXQzLCBmbG9hdDEpOwor
ICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFByb2pM
b2QiLCBzYW1wbGVyMkQsIGZsb2F0NCwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlQ3ViZUxvZCIsIHNhbXBsZXJDdWJlLCBmbG9hdDMs
IGZsb2F0MSk7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBEZXB0aCByYW5nZSBpbiB3aW5kb3cg
Y29vcmRpbmF0ZXMKKyAgICAvLworICAgIFRGaWVsZExpc3QgKmZpZWxkcyA9IE5ld1Bvb2xURmll
bGRMaXN0KCk7CisgICAgVEZpZWxkICpuZWFyID0gbmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0Rmxv
YXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSksIE5ld1Bvb2xUU3RyaW5nKCJuZWFyIikpOworICAg
IFRGaWVsZCAqZmFyID0gbmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2
cUdsb2JhbCwgMSksIE5ld1Bvb2xUU3RyaW5nKCJmYXIiKSk7CisgICAgVEZpZWxkICpkaWZmID0g
bmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSksIE5l
d1Bvb2xUU3RyaW5nKCJkaWZmIikpOworICAgIGZpZWxkcy0+cHVzaF9iYWNrKG5lYXIpOworICAg
IGZpZWxkcy0+cHVzaF9iYWNrKGZhcik7CisgICAgZmllbGRzLT5wdXNoX2JhY2soZGlmZik7Cisg
ICAgVFN0cnVjdHVyZSAqZGVwdGhSYW5nZVN0cnVjdCA9IG5ldyBUU3RydWN0dXJlKE5ld1Bvb2xU
U3RyaW5nKCJnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyIpLCBmaWVsZHMpOworICAgIFRWYXJpYWJs
ZSAqZGVwdGhSYW5nZVBhcmFtZXRlcnMgPSBuZXcgVFZhcmlhYmxlKCZkZXB0aFJhbmdlU3RydWN0
LT5uYW1lKCksIGRlcHRoUmFuZ2VTdHJ1Y3QsIHRydWUpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dCgqZGVwdGhSYW5nZVBhcmFtZXRlcnMpOworICAgIFRWYXJpYWJsZSAqZGVwdGhSYW5nZSA9IG5l
dyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0RlcHRoUmFuZ2UiKSwgVFR5cGUoZGVwdGhS
YW5nZVN0cnVjdCkpOworICAgIGRlcHRoUmFuZ2UtPnNldFF1YWxpZmllcihFdnFVbmlmb3JtKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKmRlcHRoUmFuZ2UpOworCisgICAgLy8KKyAgICAvLyBJ
bXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQgYnVpbHQtaW4gY29uc3RhbnRzLgorICAgIC8vCisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heFZlcnRleEF0dHJpYnMiLCByZXNvdXJj
ZXMuTWF4VmVydGV4QXR0cmlicyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImds
X01heFZlcnRleFVuaWZvcm1WZWN0b3JzIiwgcmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0
b3JzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xfTWF4VmFyeWluZ1ZlY3Rv
cnMiLCByZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dENvbnN0SW50KCJnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhW
ZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQo
ImdsX01heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMiLCByZXNvdXJjZXMuTWF4Q29tYmluZWRU
ZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01h
eFRleHR1cmVJbWFnZVVuaXRzIiwgcmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xfTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9y
cyIsIHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKTsKKworICAgIGlmIChzcGVj
ICE9IFNIX0NTU19TSEFERVJTX1NQRUMpCisgICAgeworICAgICAgICBzeW1ib2xUYWJsZS5pbnNl
cnRDb25zdEludCgiZ2xfTWF4RHJhd0J1ZmZlcnMiLCByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMp
OworICAgIH0KK30KKwordm9pZCBJZGVudGlmeUJ1aWx0SW5zKFNoU2hhZGVyVHlwZSB0eXBlLCBT
aFNoYWRlclNwZWMgc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaEJ1aWx0SW5S
ZXNvdXJjZXMgJnJlc291cmNlcywKKyAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUg
JnN5bWJvbFRhYmxlKQoreworICAgIC8vCisgICAgLy8gRmlyc3QsIGluc2VydCBzb21lIHNwZWNp
YWwgYnVpbHQtaW4gdmFyaWFibGVzIHRoYXQgYXJlIG5vdCBpbiAKKyAgICAvLyB0aGUgYnVpbHQt
aW4gaGVhZGVyIGZpbGVzLgorICAgIC8vCisgICAgc3dpdGNoKHR5cGUpIHsKKyAgICBjYXNlIFNI
X0ZSQUdNRU5UX1NIQURFUjoKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlh
YmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29vcmQiKSwgICAgICAgICAgICAgICAgICAgICAg
IFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb29yZCwgICA0KSkpOworICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zy
b250RmFjaW5nIiksICAgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0Qm9vbCwgIEVicFVuZGVm
aW5lZCwgRXZxRnJvbnRGYWNpbmcsIDEpKSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgq
bmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfUG9pbnRDb29yZCIpLCAgICAgICAgICAg
ICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludENvb3JkLCAgMikp
KTsKKworICAgICAgICAvLworICAgICAgICAvLyBJbiBDU1MgU2hhZGVycywgZ2xfRnJhZ0NvbG9y
LCBnbF9GcmFnRGF0YSwgYW5kIGdsX01heERyYXdCdWZmZXJzIGFyZSBub3QgYXZhaWxhYmxlLgor
ICAgICAgICAvLyBJbnN0ZWFkLCBjc3NfTWl4Q29sb3IgYW5kIGNzc19Db2xvck1hdHJpeCBhcmUg
YXZhaWxhYmxlLgorICAgICAgICAvLworICAgICAgICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVS
U19TUEVDKSB7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUo
TmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb2xvciIpLCAgICAgICAgICAgICAgICAgICBUVHlwZShF
YnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29sb3IsICAgNCkpKTsKKyAgICAgICAgICAgIHN5
bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Rh
dGFbZ2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZy
YWdEYXRhLCAgICA0KSkpOworICAgICAgICAgICAgaWYgKHJlc291cmNlcy5FWFRfZnJhZ19kZXB0
aCkgeworICAgICAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RlcHRoRVhUIiksICAgICAgICAgICAgVFR5cGUoRWJ0Rmxv
YXQsIHJlc291cmNlcy5GcmFnbWVudFByZWNpc2lvbkhpZ2ggPyBFYnBIaWdoIDogRWJwTWVkaXVt
LCBFdnFGcmFnRGVwdGgsIDEpKSk7CisgICAgICAgICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9FeHRlbnNpb24oImdsX0ZyYWdEZXB0aEVYVCIsICJHTF9FWFRfZnJhZ19kZXB0aCIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJjc3NfTWl4Q29sb3IiKSwgICAgICAg
ICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAgIDQp
KSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9v
bFRTdHJpbmcoImNzc19Db2xvck1hdHJpeCIpLCAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9h
dCwgRWJwTWVkaXVtLCBFdnFHbG9iYWwsICAgICAgNCwgdHJ1ZSkpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTSF9WRVJURVhfU0hBREVSOgorICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1Bvc2l0aW9u
IiksICAgIFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFQb3NpdGlvbiwgICAgNCkpKTsKKyAg
ICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJn
bF9Qb2ludFNpemUiKSwgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludFNpemUs
ICAgMSkpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OiBhc3NlcnQoZmFsc2UgJiYg
Ikxhbmd1YWdlIG5vdCBzdXBwb3J0ZWQiKTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIE5leHQs
IGlkZW50aWZ5IHdoaWNoIGJ1aWx0LWlucyBmcm9tIHRoZSBhbHJlYWR5IGxvYWRlZCBoZWFkZXJz
IGhhdmUKKyAgICAvLyBhIG1hcHBpbmcgdG8gYW4gb3BlcmF0b3IuICBUaG9zZSB0aGF0IGFyZSBu
b3QgaWRlbnRpZmllZCBhcyBzdWNoIGFyZQorICAgIC8vIGV4cGVjdGVkIHRvIGJlIHJlc29sdmVk
IHRocm91Z2ggYSBsaWJyYXJ5IG9mIGZ1bmN0aW9ucywgdmVyc3VzIGFzCisgICAgLy8gb3BlcmF0
aW9ucy4KKyAgICAvLworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm1hdHJpeENv
bXBNdWx0IiwgICBFT3BNdWwpOworCisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigi
ZXF1YWwiLCAgICAgICAgICAgIEVPcFZlY3RvckVxdWFsKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKCJub3RFcXVhbCIsICAgICAgICAgRU9wVmVjdG9yTm90RXF1YWwpOworICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxlc3NUaGFuIiwgICAgICAgICBFT3BMZXNz
VGhhbik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZ3JlYXRlclRoYW4iLCAg
ICAgIEVPcEdyZWF0ZXJUaGFuKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJs
ZXNzVGhhbkVxdWFsIiwgICAgRU9wTGVzc1RoYW5FcXVhbCk7CisgICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcigiZ3JlYXRlclRoYW5FcXVhbCIsIEVPcEdyZWF0ZXJUaGFuRXF1YWwpOwor
ICAgIAorICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInJhZGlhbnMiLCAgICAgIEVP
cFJhZGlhbnMpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImRlZ3JlZXMiLCAg
ICAgIEVPcERlZ3JlZXMpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInNpbiIs
ICAgICAgICAgIEVPcFNpbik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiY29z
IiwgICAgICAgICAgRU9wQ29zKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJ0
YW4iLCAgICAgICAgICBFT3BUYW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
ImFzaW4iLCAgICAgICAgIEVPcEFzaW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0
b3IoImFjb3MiLCAgICAgICAgIEVPcEFjb3MpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoImF0YW4iLCAgICAgICAgIEVPcEF0YW4pOworCisgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcigicG93IiwgICAgICAgICAgRU9wUG93KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKCJleHAyIiwgICAgICAgICBFT3BFeHAyKTsKKyAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKCJsb2ciLCAgICAgICAgICBFT3BMb2cpOworICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoImV4cCIsICAgICAgICAgIEVPcEV4cCk7CisgICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9PcGVyYXRvcigibG9nMiIsICAgICAgICAgRU9wTG9nMik7CisgICAgc3ltYm9s
VGFibGUucmVsYXRlVG9PcGVyYXRvcigic3FydCIsICAgICAgICAgRU9wU3FydCk7CisgICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiaW52ZXJzZXNxcnQiLCAgRU9wSW52ZXJzZVNxcnQp
OworCisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiYWJzIiwgICAgICAgICAgRU9w
QWJzKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzaWduIiwgICAgICAgICBF
T3BTaWduKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJmbG9vciIsICAgICAg
ICBFT3BGbG9vcik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiY2VpbCIsICAg
ICAgICAgRU9wQ2VpbCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZnJhY3Qi
LCAgICAgICAgRU9wRnJhY3QpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm1v
ZCIsICAgICAgICAgIEVPcE1vZCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigi
bWluIiwgICAgICAgICAgRU9wTWluKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KCJtYXgiLCAgICAgICAgICBFT3BNYXgpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0
b3IoImNsYW1wIiwgICAgICAgIEVPcENsYW1wKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKCJtaXgiLCAgICAgICAgICBFT3BNaXgpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoInN0ZXAiLCAgICAgICAgIEVPcFN0ZXApOworICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoInNtb290aHN0ZXAiLCAgIEVPcFNtb290aFN0ZXApOworCisgICAgc3ltYm9s
VGFibGUucmVsYXRlVG9PcGVyYXRvcigibGVuZ3RoIiwgICAgICAgRU9wTGVuZ3RoKTsKKyAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkaXN0YW5jZSIsICAgICBFT3BEaXN0YW5jZSk7
CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZG90IiwgICAgICAgICAgRU9wRG90
KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJjcm9zcyIsICAgICAgICBFT3BD
cm9zcyk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibm9ybWFsaXplIiwgICAg
RU9wTm9ybWFsaXplKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJmYWNlZm9y
d2FyZCIsICBFT3BGYWNlRm9yd2FyZCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cigicmVmbGVjdCIsICAgICAgRU9wUmVmbGVjdCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9P
cGVyYXRvcigicmVmcmFjdCIsICAgICAgRU9wUmVmcmFjdCk7CisgICAgCisgICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9PcGVyYXRvcigiYW55IiwgICAgICAgICAgRU9wQW55KTsKKyAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhbGwiLCAgICAgICAgICBFT3BBbGwpOworICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm5vdCIsICAgICAgICAgIEVPcFZlY3RvckxvZ2ljYWxO
b3QpOworCisgICAgLy8gTWFwIGxhbmd1YWdlLXNwZWNpZmljIG9wZXJhdG9ycy4KKyAgICBzd2l0
Y2godHlwZSkgeworICAgIGNhc2UgU0hfVkVSVEVYX1NIQURFUjoKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBTSF9GUkFHTUVOVF9TSEFERVI6CisgICAgICAgIGlmIChyZXNvdXJjZXMuT0VTX3N0
YW5kYXJkX2Rlcml2YXRpdmVzKSB7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKCJkRmR4IiwgICBFT3BERmR4KTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoImRGZHkiLCAgIEVPcERGZHkpOworICAgICAgICAgICAgc3ltYm9sVGFibGUu
cmVsYXRlVG9PcGVyYXRvcigiZndpZHRoIiwgRU9wRndpZHRoKTsKKworICAgICAgICAgICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9FeHRlbnNpb24oImRGZHgiLCAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2
YXRpdmVzIik7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbigiZEZk
eSIsICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKKyAgICAgICAgICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKCJmd2lkdGgiLCAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRp
dmVzIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDogYnJlYWs7Cisg
ICAgfQorCisgICAgLy8gRmluYWxseSBhZGQgcmVzb3VyY2Utc3BlY2lmaWMgdmFyaWFibGVzLgor
ICAgIHN3aXRjaCh0eXBlKSB7CisgICAgY2FzZSBTSF9GUkFHTUVOVF9TSEFERVI6CisgICAgICAg
IGlmIChzcGVjICE9IFNIX0NTU19TSEFERVJTX1NQRUMpIHsKKyAgICAgICAgICAgIC8vIFNldCB1
cCBnbF9GcmFnRGF0YS4gIFRoZSBhcnJheSBzaXplLgorICAgICAgICAgICAgVFR5cGUgZnJhZ0Rh
dGEoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0RhdGEsIDQsIGZhbHNlLCB0cnVlKTsKKyAg
ICAgICAgICAgIGZyYWdEYXRhLnNldEFycmF5U2l6ZShyZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMp
OworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xU
U3RyaW5nKCJnbF9GcmFnRGF0YSIpLCAgICBmcmFnRGF0YSkpOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KK30KKwordm9pZCBJbml0RXh0ZW5z
aW9uQmVoYXZpb3IoY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yKQorewor
ICAgIGlmIChyZXNvdXJjZXMuT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzKQorICAgICAgICBleHRC
ZWhhdmlvclsiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIl0gPSBFQmhVbmRlZmluZWQ7Cisg
ICAgaWYgKHJlc291cmNlcy5PRVNfRUdMX2ltYWdlX2V4dGVybmFsKQorICAgICAgICBleHRCZWhh
dmlvclsiR0xfT0VTX0VHTF9pbWFnZV9leHRlcm5hbCJdID0gRUJoVW5kZWZpbmVkOworICAgIGlm
IChyZXNvdXJjZXMuQVJCX3RleHR1cmVfcmVjdGFuZ2xlKQorICAgICAgICBleHRCZWhhdmlvclsi
R0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlIl0gPSBFQmhVbmRlZmluZWQ7CisgICAgaWYgKHJlc291
cmNlcy5FWFRfZHJhd19idWZmZXJzKQorICAgICAgICBleHRCZWhhdmlvclsiR0xfRVhUX2RyYXdf
YnVmZmVycyJdID0gRUJoVW5kZWZpbmVkOworICAgIGlmIChyZXNvdXJjZXMuRVhUX2ZyYWdfZGVw
dGgpCisgICAgICAgIGV4dEJlaGF2aW9yWyJHTF9FWFRfZnJhZ19kZXB0aCJdID0gRUJoVW5kZWZp
bmVkOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvSW5pdGlhbGl6ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1NjQyODY5YWExOTlh
OGNhZDk3MzAxYWVjMzA3NjAzMzlkZDU0MWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplLmgKQEAgLTAs
MCArMSwyMyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfSU5JVElBTElaRV9JTkNM
VURFRF8KKyNkZWZpbmUgX0lOSVRJQUxJWkVfSU5DTFVERURfCisKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL0NvbW1vbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU2hI
YW5kbGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgiCisK
K3ZvaWQgSW5zZXJ0QnVpbHRJbkZ1bmN0aW9ucyhTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJT
cGVjIHNwZWMsIGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyAmcmVzb3VyY2VzLCBUU3ltYm9sVGFi
bGUgJnRhYmxlKTsKKwordm9pZCBJZGVudGlmeUJ1aWx0SW5zKFNoU2hhZGVyVHlwZSB0eXBlLCBT
aFNoYWRlclNwZWMgc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaEJ1aWx0SW5S
ZXNvdXJjZXMmIHJlc291cmNlcywKKyAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUm
IHN5bWJvbFRhYmxlKTsKKwordm9pZCBJbml0RXh0ZW5zaW9uQmVoYXZpb3IoY29uc3QgU2hCdWls
dEluUmVzb3VyY2VzJiByZXNvdXJjZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBURXh0
ZW5zaW9uQmVoYXZpb3ImIGV4dGVuc2lvbkJlaGF2aW9yKTsKKworI2VuZGlmIC8vIF9JTklUSUFM
SVpFX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZURsbC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplRGxsLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40M2Y4MTc4NGQwYWRlYzVhYjExNmE4YmUzNGU1N2FkZjA2MTMzYmFkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5p
dGlhbGl6ZURsbC5jcHAKQEAgLTAsMCArMSwzMiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZURsbC5oIgorCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplR2xvYmFscy5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3Ivb3NpbmNsdWRlLmgiCisKK2Jvb2wgSW5pdFByb2Nlc3MoKQoreworICAg
IGlmICghSW5pdGlhbGl6ZVBvb2xJbmRleCgpKSB7CisgICAgICAgIGFzc2VydCgwICYmICJJbml0
UHJvY2VzcygpOiBGYWlsZWQgdG8gaW5pdGFsaXplIGdsb2JhbCBwb29sIik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIUluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRl
eCgpKSB7CisgICAgICAgIGFzc2VydCgwICYmICJJbml0UHJvY2VzcygpOiBGYWlsZWQgdG8gaW5p
dGFsaXplIHBhcnNlIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIERldGFjaFByb2Nlc3MoKQoreworICAgIEZyZWVQ
YXJzZUNvbnRleHRJbmRleCgpOworICAgIEZyZWVQb29sSW5kZXgoKTsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxp
emVEbGwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L0luaXRpYWxpemVEbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MzA3MGNjM2ZmNzhmNzUzYTI0NmM0NjA2OTg5
MDg2YTYzYmYwOGJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZURsbC5oCkBAIC0wLDAgKzEsMTMgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisjaWZuZGVmIF9fSU5JVElBTElaRURMTF9ICisjZGVmaW5lIF9f
SU5JVElBTElaRURMTF9ICisKK2Jvb2wgSW5pdFByb2Nlc3MoKTsKK3ZvaWQgRGV0YWNoUHJvY2Vz
cygpOworCisjZW5kaWYgLy8gX19JTklUSUFMSVpFRExMX0gKKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZUdsb2Jh
bHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0lu
aXRpYWxpemVHbG9iYWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDcxNTk0MTQyNDcxMDUzMDgwMzg2MjgxMzg2
YTk1MDZmYWJkMDU2MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVHbG9iYWxzLmgKQEAgLTAsMCArMSwx
MyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfX0lOSVRJQUxJWkVfR0xPQkFMU19J
TkNMVURFRF8KKyNkZWZpbmUgX19JTklUSUFMSVpFX0dMT0JBTFNfSU5DTFVERURfCisKK2Jvb2wg
SW5pdGlhbGl6ZVBvb2xJbmRleCgpOwordm9pZCBGcmVlUG9vbEluZGV4KCk7CisKKyNlbmRpZiAv
LyBfX0lOSVRJQUxJWkVfR0xPQkFMU19JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVQYXJzZUNvbnRl
eHQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
SW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjRkZWZhZTU2OTUzYTlhYjg4
ODU0ZmU0NzUzYzU3ZGNlNjQwMjFkNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVQYXJzZUNvbnRleHQu
Y3BwCkBAIC0wLDAgKzEsNDAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCisKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL29zaW5jbHVkZS5oIgorCitPU19UTFNJbmRleCBHbG9iYWxQYXJzZUNvbnRl
eHRJbmRleCA9IE9TX0lOVkFMSURfVExTX0lOREVYOworCitib29sIEluaXRpYWxpemVQYXJzZUNv
bnRleHRJbmRleCgpCit7CisgICAgYXNzZXJ0KEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID09IE9T
X0lOVkFMSURfVExTX0lOREVYKTsKKworICAgIEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1Nf
QWxsb2NUTFNJbmRleCgpOworICAgIHJldHVybiBHbG9iYWxQYXJzZUNvbnRleHRJbmRleCAhPSBP
U19JTlZBTElEX1RMU19JTkRFWDsKK30KKwordm9pZCBGcmVlUGFyc2VDb250ZXh0SW5kZXgoKQor
eworICAgIGFzc2VydChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCAhPSBPU19JTlZBTElEX1RMU19J
TkRFWCk7CisKKyAgICBPU19GcmVlVExTSW5kZXgoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgpOwor
ICAgIEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7Cit9CisK
K3ZvaWQgU2V0R2xvYmFsUGFyc2VDb250ZXh0KFRQYXJzZUNvbnRleHQqIGNvbnRleHQpCit7Cisg
ICAgYXNzZXJ0KEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ICE9IE9TX0lOVkFMSURfVExTX0lOREVY
KTsKKyAgICBPU19TZXRUTFNWYWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCwgY29udGV4dCk7
Cit9CisKK1RQYXJzZUNvbnRleHQqIEdldEdsb2JhbFBhcnNlQ29udGV4dCgpCit7CisgICAgYXNz
ZXJ0KEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ICE9IE9TX0lOVkFMSURfVExTX0lOREVYKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8VFBhcnNlQ29udGV4dCo+KE9TX0dldFRMU1ZhbHVlKEdsb2Jh
bFBhcnNlQ29udGV4dEluZGV4KSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxp
emVQYXJzZUNvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZmZiYWI4N2QwNzIzYTYzMjg0Njg0M2MzMGQ5
Y2FjMzMwMjcwNzc2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oCkBAIC0wLDAg
KzEsMTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX19JTklUSUFMSVpFX1BBUlNF
X0NPTlRFWFRfSU5DTFVERURfCisjZGVmaW5lIF9fSU5JVElBTElaRV9QQVJTRV9DT05URVhUX0lO
Q0xVREVEXworCitib29sIEluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCgpOwordm9pZCBGcmVl
UGFyc2VDb250ZXh0SW5kZXgoKTsKKworc3RydWN0IFRQYXJzZUNvbnRleHQ7CitleHRlcm4gdm9p
ZCBTZXRHbG9iYWxQYXJzZUNvbnRleHQoVFBhcnNlQ29udGV4dCogY29udGV4dCk7CitleHRlcm4g
VFBhcnNlQ29udGV4dCogR2V0R2xvYmFsUGFyc2VDb250ZXh0KCk7CisKKyNlbmRpZiAvLyBfX0lO
SVRJQUxJWkVfUEFSU0VfQ09OVEVYVF9JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVWYXJpYWJsZXMu
Y3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5p
dGlhbGl6ZVZhcmlhYmxlcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTE1YzU2MWM3NzVmMTU2MTY3N2YxOTlj
NmVjMTljMzhhYTdkODdlNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVWYXJpYWJsZXMuY3BwCkBAIC0w
LDAgKzEsMTE2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9Jbml0aWFsaXplVmFyaWFibGVzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9jb21waWxlcmRlYnVnLmgiCisKK25hbWVzcGFjZQoreworCitUSW50ZXJtQ29uc3RhbnRV
bmlvbiogY29uc3RydWN0RmxvYXRDb25zdFVuaW9uTm9kZShjb25zdCBUVHlwZSYgdHlwZSkKK3sK
KyAgICBUVHlwZSBteVR5cGUgPSB0eXBlOworICAgIHVuc2lnbmVkIGNoYXIgc2l6ZSA9IG15VHlw
ZS5nZXROb21pbmFsU2l6ZSgpOworICAgIGlmIChteVR5cGUuaXNNYXRyaXgoKSkKKyAgICAgICAg
c2l6ZSAqPSBzaXplOworICAgIENvbnN0YW50VW5pb24gKnUgPSBuZXcgQ29uc3RhbnRVbmlvbltz
aXplXTsKKyAgICBmb3IgKGludCBpaSA9IDA7IGlpIDwgc2l6ZTsgKytpaSkKKyAgICAgICAgdVtp
aV0uc2V0RkNvbnN0KDAuMGYpOworCisgICAgbXlUeXBlLmNsZWFyQXJyYXluZXNzKCk7CisgICAg
bXlUeXBlLnNldFF1YWxpZmllcihFdnFDb25zdCk7CisgICAgVEludGVybUNvbnN0YW50VW5pb24g
Km5vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24odSwgbXlUeXBlKTsKKyAgICByZXR1cm4g
bm9kZTsKK30KKworVEludGVybUNvbnN0YW50VW5pb24qIGNvbnN0cnVjdEluZGV4Tm9kZShpbnQg
aW5kZXgpCit7CisgICAgQ29uc3RhbnRVbmlvbiAqdSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwor
ICAgIHVbMF0uc2V0SUNvbnN0KGluZGV4KTsKKworICAgIFRUeXBlIHR5cGUoRWJ0SW50LCBFYnBV
bmRlZmluZWQsIEV2cUNvbnN0LCAxKTsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbm9kZSA9
IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih1LCB0eXBlKTsKKyAgICByZXR1cm4gbm9kZTsKK30K
KworfSAgLy8gbmFtZXNwYWNlIGFub255bW91cworCitib29sIEluaXRpYWxpemVWYXJpYWJsZXM6
OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQorewor
ICAgIGJvb2wgdmlzaXRDaGlsZHJlbiA9ICFtQ29kZUluc2VydGVkOworICAgIHN3aXRjaCAobm9k
ZS0+Z2V0T3AoKSkKKyAgICB7CisgICAgICBjYXNlIEVPcFNlcXVlbmNlOgorICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRU9wRnVuY3Rpb246CisgICAgICB7CisgICAgICAgIC8vIEZ1bmN0aW9u
IGRlZmluaXRpb24uCisgICAgICAgIEFTU0VSVCh2aXNpdCA9PSBQcmVWaXNpdCk7CisgICAgICAg
IGlmIChub2RlLT5nZXROYW1lKCkgPT0gIm1haW4oIikKKyAgICAgICAgeworICAgICAgICAgICAg
VEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CisgICAgICAg
ICAgICBBU1NFUlQoKHNlcXVlbmNlLnNpemUoKSA9PSAxKSB8fCAoc2VxdWVuY2Uuc2l6ZSgpID09
IDIpKTsKKyAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUgKmJvZHkgPSBOVUxMOworICAgICAg
ICAgICAgaWYgKHNlcXVlbmNlLnNpemUoKSA9PSAxKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGJvZHkgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZShFT3BTZXF1ZW5jZSk7CisgICAgICAg
ICAgICAgICAgc2VxdWVuY2UucHVzaF9iYWNrKGJvZHkpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvZHkgPSBzZXF1ZW5j
ZVsxXS0+Z2V0QXNBZ2dyZWdhdGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VS
VChib2R5KTsKKyAgICAgICAgICAgIGluc2VydEluaXRDb2RlKGJvZHktPmdldFNlcXVlbmNlKCkp
OworICAgICAgICAgICAgbUNvZGVJbnNlcnRlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgICB9CisgICAgICBkZWZhdWx0OgorICAgICAgICB2aXNpdENoaWxkcmVuID0g
ZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gdmlzaXRDaGlsZHJlbjsK
K30KKwordm9pZCBJbml0aWFsaXplVmFyaWFibGVzOjppbnNlcnRJbml0Q29kZShUSW50ZXJtU2Vx
dWVuY2UmIHNlcXVlbmNlKQoreworICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCBtVmFyaWFi
bGVzLnNpemUoKTsgKytpaSkKKyAgICB7CisgICAgICAgIGNvbnN0IEluaXRWYXJpYWJsZUluZm8m
IHZhckluZm8gPSBtVmFyaWFibGVzW2lpXTsKKworICAgICAgICBpZiAodmFySW5mby50eXBlLmlz
QXJyYXkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSB2YXJJbmZv
LnR5cGUuZ2V0QXJyYXlTaXplKCkgLSAxOyBpbmRleCA+PSAwOyAtLWluZGV4KQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIFRJbnRlcm1CaW5hcnkgKmFzc2lnbiA9IG5ldyBUSW50ZXJt
QmluYXJ5KEVPcEFzc2lnbik7CisgICAgICAgICAgICAgICAgc2VxdWVuY2UuaW5zZXJ0KHNlcXVl
bmNlLmJlZ2luKCksIGFzc2lnbik7CisKKyAgICAgICAgICAgICAgICBUSW50ZXJtQmluYXJ5ICpp
bmRleERpcmVjdCA9IG5ldyBUSW50ZXJtQmluYXJ5KEVPcEluZGV4RGlyZWN0KTsKKyAgICAgICAg
ICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBuZXcgVEludGVybVN5bWJvbCgwLCB2YXJJ
bmZvLm5hbWUsIHZhckluZm8udHlwZSk7CisgICAgICAgICAgICAgICAgaW5kZXhEaXJlY3QtPnNl
dExlZnQoc3ltYm9sKTsKKyAgICAgICAgICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqaW5k
ZXhOb2RlID0gY29uc3RydWN0SW5kZXhOb2RlKGluZGV4KTsKKyAgICAgICAgICAgICAgICBpbmRl
eERpcmVjdC0+c2V0UmlnaHQoaW5kZXhOb2RlKTsKKworICAgICAgICAgICAgICAgIGFzc2lnbi0+
c2V0TGVmdChpbmRleERpcmVjdCk7CisKKyAgICAgICAgICAgICAgICBUSW50ZXJtQ29uc3RhbnRV
bmlvbiAqemVyb0NvbnN0ID0gY29uc3RydWN0RmxvYXRDb25zdFVuaW9uTm9kZSh2YXJJbmZvLnR5
cGUpOworICAgICAgICAgICAgICAgIGFzc2lnbi0+c2V0UmlnaHQoemVyb0NvbnN0KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IFRJbnRlcm1CaW5hcnkgKmFzc2lnbiA9IG5ldyBUSW50ZXJtQmluYXJ5KEVPcEFzc2lnbik7Cisg
ICAgICAgICAgICBzZXF1ZW5jZS5pbnNlcnQoc2VxdWVuY2UuYmVnaW4oKSwgYXNzaWduKTsKKyAg
ICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IG5ldyBUSW50ZXJtU3ltYm9sKDAsIHZh
ckluZm8ubmFtZSwgdmFySW5mby50eXBlKTsKKyAgICAgICAgICAgIGFzc2lnbi0+c2V0TGVmdChz
eW1ib2wpOworICAgICAgICAgICAgVEludGVybUNvbnN0YW50VW5pb24gKnplcm9Db25zdCA9IGNv
bnN0cnVjdEZsb2F0Q29uc3RVbmlvbk5vZGUodmFySW5mby50eXBlKTsKKyAgICAgICAgICAgIGFz
c2lnbi0+c2V0UmlnaHQoemVyb0NvbnN0KTsKKyAgICAgICAgfQorCisgICAgfQorfQorCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9J
bml0aWFsaXplVmFyaWFibGVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplVmFyaWFibGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWNkNmQ3ZTFi
NTExYWNlNDZhYzU4ZDQwZDY5NTViMzg4YjZkYTQ3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVWYXJp
YWJsZXMuaApAQCAtMCwwICsxLDUwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENP
TVBJTEVSX0lOSVRJQUxJWkVfVkFSSUFCTEVTX0hfCisjZGVmaW5lIENPTVBJTEVSX0lOSVRJQUxJ
WkVfVkFSSUFCTEVTX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVk
aWF0ZS5oIgorCitjbGFzcyBJbml0aWFsaXplVmFyaWFibGVzIDogcHVibGljIFRJbnRlcm1UcmF2
ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIHN0cnVjdCBJbml0VmFyaWFibGVJbmZvCisgICAgewor
ICAgICAgICBUU3RyaW5nIG5hbWU7CisgICAgICAgIFRUeXBlIHR5cGU7CisKKyAgICAgICAgSW5p
dFZhcmlhYmxlSW5mbyhjb25zdCBUU3RyaW5nJiBfbmFtZSwgY29uc3QgVFR5cGUmIF90eXBlKQor
ICAgICAgICAgICAgOiBuYW1lKF9uYW1lKSwKKyAgICAgICAgICAgICAgdHlwZShfdHlwZSkKKyAg
ICAgICAgeworICAgICAgICB9CisgICAgfTsKKyAgICB0eXBlZGVmIFRWZWN0b3I8SW5pdFZhcmlh
YmxlSW5mbz4gSW5pdFZhcmlhYmxlSW5mb0xpc3Q7CisKKyAgICBJbml0aWFsaXplVmFyaWFibGVz
KGNvbnN0IEluaXRWYXJpYWJsZUluZm9MaXN0JiB2YXJzKQorICAgICAgICA6IG1Db2RlSW5zZXJ0
ZWQoZmFsc2UpLAorICAgICAgICAgIG1WYXJpYWJsZXModmFycykKKyAgICB7CisgICAgfQorCisg
IHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1CaW5hcnkqIG5vZGUpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHZp
c2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSogbm9kZSkgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1T
ZWxlY3Rpb24qIG5vZGUpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHZpc2l0
TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqIG5vZGUpIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgdmlydHVhbCBib29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKiBu
b2RlKSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRl
KFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKTsKKworICBwcml2YXRlOgorICAg
IHZvaWQgaW5zZXJ0SW5pdENvZGUoVEludGVybVNlcXVlbmNlJiBzZXF1ZW5jZSk7CisKKyAgICBJ
bml0VmFyaWFibGVJbmZvTGlzdCBtVmFyaWFibGVzOworICAgIGJvb2wgbUNvZGVJbnNlcnRlZDsK
K307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfSU5JVElBTElaRV9WQVJJQUJMRVNfSF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0lu
dGVybVRyYXZlcnNlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL0ludGVybVRyYXZlcnNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NTRiODM0MDlhYzAwYThi
N2JjMzU0OTU3MGJkNTk4YzBjN2UyOTBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtVHJhdmVyc2UuY3BwCkBA
IC0wLDAgKzEsMjU5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKworLy8KKy8vIFRyYXZlcnNlIHRoZSBpbnRlcm1l
ZGlhdGUgcmVwcmVzZW50YXRpb24gdHJlZSwgYW5kCisvLyBjYWxsIGEgbm9kZSB0eXBlIHNwZWNp
ZmljIGZ1bmN0aW9uIGZvciBlYWNoIG5vZGUuCisvLyBEb25lIHJlY3Vyc2l2ZWx5IHRocm91Z2gg
dGhlIG1lbWJlciBmdW5jdGlvbiBUcmF2ZXJzZSgpLgorLy8gTm9kZSB0eXBlcyBjYW4gYmUgc2tp
cHBlZCBpZiB0aGVpciBmdW5jdGlvbiB0byBjYWxsIGlzIDAsCisvLyBidXQgdGhlaXIgc3VidHJl
ZSB3aWxsIHN0aWxsIGJlIHRyYXZlcnNlZC4KKy8vIE5vZGVzIHdpdGggY2hpbGRyZW4gY2FuIGhh
dmUgdGhlaXIgd2hvbGUgc3VidHJlZSBza2lwcGVkCisvLyBpZiBwcmVWaXNpdCBpcyB0dXJuZWQg
b24gYW5kIHRoZSB0eXBlIHNwZWNpZmljIGZ1bmN0aW9uCisvLyByZXR1cm5zIGZhbHNlLgorLy8K
Ky8vIHByZVZpc2l0LCBwb3N0VmlzaXQsIGFuZCByaWdodFRvTGVmdCBjb250cm9sIHdoYXQgb3Jk
ZXIKKy8vIG5vZGVzIGFyZSB2aXNpdGVkIGluLgorLy8KKworLy8KKy8vIFRyYXZlcnNhbCBmdW5j
dGlvbnMgZm9yIHRlcm1pbmFscyBhcmUgc3RyYWlnaGZvcndhcmQuLi4uCisvLwordm9pZCBUSW50
ZXJtU3ltYm9sOjp0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyICppdCkKK3sKKyAgICBpdC0+dmlz
aXRTeW1ib2wodGhpcyk7Cit9CisKK3ZvaWQgVEludGVybUNvbnN0YW50VW5pb246OnRyYXZlcnNl
KFRJbnRlcm1UcmF2ZXJzZXIgKml0KQoreworICAgIGl0LT52aXNpdENvbnN0YW50VW5pb24odGhp
cyk7Cit9CisKKy8vCisvLyBUcmF2ZXJzZSBhIGJpbmFyeSBub2RlLgorLy8KK3ZvaWQgVEludGVy
bUJpbmFyeTo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciAqaXQpCit7CisgICAgYm9vbCB2aXNp
dCA9IHRydWU7CisKKyAgICAvLworICAgIC8vIHZpc2l0IHRoZSBub2RlIGJlZm9yZSBjaGlsZHJl
biBpZiBwcmUtdmlzaXRpbmcuCisgICAgLy8KKyAgICBpZiAoaXQtPnByZVZpc2l0KQorICAgICAg
ICB2aXNpdCA9IGl0LT52aXNpdEJpbmFyeShQcmVWaXNpdCwgdGhpcyk7CisgICAgCisgICAgLy8K
KyAgICAvLyBWaXNpdCB0aGUgY2hpbGRyZW4sIGluIHRoZSByaWdodCBvcmRlci4KKyAgICAvLwor
ICAgIGlmICh2aXNpdCkKKyAgICB7CisgICAgICAgIGl0LT5pbmNyZW1lbnREZXB0aCh0aGlzKTsK
KworICAgICAgICBpZiAoaXQtPnJpZ2h0VG9MZWZ0KSAKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKHJpZ2h0KQorICAgICAgICAgICAgICAgIHJpZ2h0LT50cmF2ZXJzZShpdCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmIChpdC0+aW5WaXNpdCkKKyAgICAgICAgICAgICAgICB2aXNp
dCA9IGl0LT52aXNpdEJpbmFyeShJblZpc2l0LCB0aGlzKTsKKworICAgICAgICAgICAgaWYgKHZp
c2l0ICYmIGxlZnQpCisgICAgICAgICAgICAgICAgbGVmdC0+dHJhdmVyc2UoaXQpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGxlZnQpCisgICAg
ICAgICAgICAgICAgbGVmdC0+dHJhdmVyc2UoaXQpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAoaXQtPmluVmlzaXQpCisgICAgICAgICAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRCaW5h
cnkoSW5WaXNpdCwgdGhpcyk7CisKKyAgICAgICAgICAgIGlmICh2aXNpdCAmJiByaWdodCkKKyAg
ICAgICAgICAgICAgICByaWdodC0+dHJhdmVyc2UoaXQpOworICAgICAgICB9CisKKyAgICAgICAg
aXQtPmRlY3JlbWVudERlcHRoKCk7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBWaXNpdCB0aGUg
bm9kZSBhZnRlciB0aGUgY2hpbGRyZW4sIGlmIHJlcXVlc3RlZCBhbmQgdGhlIHRyYXZlcnNhbAor
ICAgIC8vIGhhc24ndCBiZWVuIGNhbmNlbGxlZCB5ZXQuCisgICAgLy8KKyAgICBpZiAodmlzaXQg
JiYgaXQtPnBvc3RWaXNpdCkKKyAgICAgICAgaXQtPnZpc2l0QmluYXJ5KFBvc3RWaXNpdCwgdGhp
cyk7Cit9CisKKy8vCisvLyBUcmF2ZXJzZSBhIHVuYXJ5IG5vZGUuICBTYW1lIGNvbW1lbnRzIGlu
IGJpbmFyeSBub2RlIGFwcGx5IGhlcmUuCisvLwordm9pZCBUSW50ZXJtVW5hcnk6OnRyYXZlcnNl
KFRJbnRlcm1UcmF2ZXJzZXIgKml0KQoreworICAgIGJvb2wgdmlzaXQgPSB0cnVlOworCisgICAg
aWYgKGl0LT5wcmVWaXNpdCkKKyAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRVbmFyeShQcmVWaXNp
dCwgdGhpcyk7CisKKyAgICBpZiAodmlzaXQpIHsKKyAgICAgICAgaXQtPmluY3JlbWVudERlcHRo
KHRoaXMpOworICAgICAgICBvcGVyYW5kLT50cmF2ZXJzZShpdCk7CisgICAgICAgIGl0LT5kZWNy
ZW1lbnREZXB0aCgpOworICAgIH0KKyAgICAKKyAgICBpZiAodmlzaXQgJiYgaXQtPnBvc3RWaXNp
dCkKKyAgICAgICAgaXQtPnZpc2l0VW5hcnkoUG9zdFZpc2l0LCB0aGlzKTsKK30KKworLy8KKy8v
IFRyYXZlcnNlIGFuIGFnZ3JlZ2F0ZSBub2RlLiAgU2FtZSBjb21tZW50cyBpbiBiaW5hcnkgbm9k
ZSBhcHBseSBoZXJlLgorLy8KK3ZvaWQgVEludGVybUFnZ3JlZ2F0ZTo6dHJhdmVyc2UoVEludGVy
bVRyYXZlcnNlciAqaXQpCit7CisgICAgYm9vbCB2aXNpdCA9IHRydWU7CisgICAgCisgICAgaWYg
KGl0LT5wcmVWaXNpdCkKKyAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRBZ2dyZWdhdGUoUHJlVmlz
aXQsIHRoaXMpOworICAgIAorICAgIGlmICh2aXNpdCkKKyAgICB7CisgICAgICAgIGl0LT5pbmNy
ZW1lbnREZXB0aCh0aGlzKTsKKworICAgICAgICBpZiAoaXQtPnJpZ2h0VG9MZWZ0KQorICAgICAg
ICB7CisgICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6cmV2ZXJzZV9pdGVyYXRvciBz
aXQgPSBzZXF1ZW5jZS5yYmVnaW4oKTsgc2l0ICE9IHNlcXVlbmNlLnJlbmQoKTsgc2l0KyspCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKCpzaXQpLT50cmF2ZXJzZShpdCk7CisKKyAg
ICAgICAgICAgICAgICBpZiAodmlzaXQgJiYgaXQtPmluVmlzaXQpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBpZiAoKnNpdCAhPSBzZXF1ZW5jZS5mcm9udCgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRBZ2dyZWdhdGUoSW5WaXNpdCwg
dGhpcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0
ZXJhdG9yIHNpdCA9IHNlcXVlbmNlLmJlZ2luKCk7IHNpdCAhPSBzZXF1ZW5jZS5lbmQoKTsgc2l0
KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKCpzaXQpLT50cmF2ZXJzZShpdCk7
CisKKyAgICAgICAgICAgICAgICBpZiAodmlzaXQgJiYgaXQtPmluVmlzaXQpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoKnNpdCAhPSBzZXF1ZW5jZS5iYWNrKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdCA9IGl0LT52aXNpdEFnZ3JlZ2F0ZShJblZp
c2l0LCB0aGlzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGl0LT5kZWNyZW1lbnREZXB0aCgpOworICAgIH0KKworICAgIGlm
ICh2aXNpdCAmJiBpdC0+cG9zdFZpc2l0KQorICAgICAgICBpdC0+dmlzaXRBZ2dyZWdhdGUoUG9z
dFZpc2l0LCB0aGlzKTsKK30KKworLy8KKy8vIFRyYXZlcnNlIGEgc2VsZWN0aW9uIG5vZGUuICBT
YW1lIGNvbW1lbnRzIGluIGJpbmFyeSBub2RlIGFwcGx5IGhlcmUuCisvLwordm9pZCBUSW50ZXJt
U2VsZWN0aW9uOjp0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyICppdCkKK3sKKyAgICBib29sIHZp
c2l0ID0gdHJ1ZTsKKworICAgIGlmIChpdC0+cHJlVmlzaXQpCisgICAgICAgIHZpc2l0ID0gaXQt
PnZpc2l0U2VsZWN0aW9uKFByZVZpc2l0LCB0aGlzKTsKKyAgICAKKyAgICBpZiAodmlzaXQpIHsK
KyAgICAgICAgaXQtPmluY3JlbWVudERlcHRoKHRoaXMpOworICAgICAgICBpZiAoaXQtPnJpZ2h0
VG9MZWZ0KSB7CisgICAgICAgICAgICBpZiAoZmFsc2VCbG9jaykKKyAgICAgICAgICAgICAgICBm
YWxzZUJsb2NrLT50cmF2ZXJzZShpdCk7CisgICAgICAgICAgICBpZiAodHJ1ZUJsb2NrKQorICAg
ICAgICAgICAgICAgIHRydWVCbG9jay0+dHJhdmVyc2UoaXQpOworICAgICAgICAgICAgY29uZGl0
aW9uLT50cmF2ZXJzZShpdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb25kaXRp
b24tPnRyYXZlcnNlKGl0KTsKKyAgICAgICAgICAgIGlmICh0cnVlQmxvY2spCisgICAgICAgICAg
ICAgICAgdHJ1ZUJsb2NrLT50cmF2ZXJzZShpdCk7CisgICAgICAgICAgICBpZiAoZmFsc2VCbG9j
aykKKyAgICAgICAgICAgICAgICBmYWxzZUJsb2NrLT50cmF2ZXJzZShpdCk7CisgICAgICAgIH0K
KyAgICAgICAgaXQtPmRlY3JlbWVudERlcHRoKCk7CisgICAgfQorCisgICAgaWYgKHZpc2l0ICYm
IGl0LT5wb3N0VmlzaXQpCisgICAgICAgIGl0LT52aXNpdFNlbGVjdGlvbihQb3N0VmlzaXQsIHRo
aXMpOworfQorCisvLworLy8gVHJhdmVyc2UgYSBsb29wIG5vZGUuICBTYW1lIGNvbW1lbnRzIGlu
IGJpbmFyeSBub2RlIGFwcGx5IGhlcmUuCisvLwordm9pZCBUSW50ZXJtTG9vcDo6dHJhdmVyc2Uo
VEludGVybVRyYXZlcnNlciAqaXQpCit7CisgICAgYm9vbCB2aXNpdCA9IHRydWU7CisKKyAgICBp
ZiAoaXQtPnByZVZpc2l0KQorICAgICAgICB2aXNpdCA9IGl0LT52aXNpdExvb3AoUHJlVmlzaXQs
IHRoaXMpOworICAgIAorICAgIGlmICh2aXNpdCkKKyAgICB7CisgICAgICAgIGl0LT5pbmNyZW1l
bnREZXB0aCh0aGlzKTsKKworICAgICAgICBpZiAoaXQtPnJpZ2h0VG9MZWZ0KQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoZXhwcikKKyAgICAgICAgICAgICAgICBleHByLT50cmF2ZXJzZShp
dCk7CisKKyAgICAgICAgICAgIGlmIChib2R5KQorICAgICAgICAgICAgICAgIGJvZHktPnRyYXZl
cnNlKGl0KTsKKworICAgICAgICAgICAgaWYgKGNvbmQpCisgICAgICAgICAgICAgICAgY29uZC0+
dHJhdmVyc2UoaXQpOworCisgICAgICAgICAgICBpZiAoaW5pdCkKKyAgICAgICAgICAgICAgICBp
bml0LT50cmF2ZXJzZShpdCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoaW5pdCkKKyAgICAgICAgICAgICAgICBpbml0LT50cmF2ZXJzZShpdCk7
CisKKyAgICAgICAgICAgIGlmIChjb25kKQorICAgICAgICAgICAgICAgIGNvbmQtPnRyYXZlcnNl
KGl0KTsKKworICAgICAgICAgICAgaWYgKGJvZHkpCisgICAgICAgICAgICAgICAgYm9keS0+dHJh
dmVyc2UoaXQpOworCisgICAgICAgICAgICBpZiAoZXhwcikKKyAgICAgICAgICAgICAgICBleHBy
LT50cmF2ZXJzZShpdCk7CisgICAgICAgIH0KKworICAgICAgICBpdC0+ZGVjcmVtZW50RGVwdGgo
KTsKKyAgICB9CisKKyAgICBpZiAodmlzaXQgJiYgaXQtPnBvc3RWaXNpdCkKKyAgICAgICAgaXQt
PnZpc2l0TG9vcChQb3N0VmlzaXQsIHRoaXMpOworfQorCisvLworLy8gVHJhdmVyc2UgYSBicmFu
Y2ggbm9kZS4gIFNhbWUgY29tbWVudHMgaW4gYmluYXJ5IG5vZGUgYXBwbHkgaGVyZS4KKy8vCit2
b2lkIFRJbnRlcm1CcmFuY2g6OnRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIgKml0KQoreworICAg
IGJvb2wgdmlzaXQgPSB0cnVlOworCisgICAgaWYgKGl0LT5wcmVWaXNpdCkKKyAgICAgICAgdmlz
aXQgPSBpdC0+dmlzaXRCcmFuY2goUHJlVmlzaXQsIHRoaXMpOworICAgIAorICAgIGlmICh2aXNp
dCAmJiBleHByZXNzaW9uKSB7CisgICAgICAgIGl0LT5pbmNyZW1lbnREZXB0aCh0aGlzKTsKKyAg
ICAgICAgZXhwcmVzc2lvbi0+dHJhdmVyc2UoaXQpOworICAgICAgICBpdC0+ZGVjcmVtZW50RGVw
dGgoKTsKKyAgICB9CisKKyAgICBpZiAodmlzaXQgJiYgaXQtPnBvc3RWaXNpdCkKKyAgICAgICAg
aXQtPnZpc2l0QnJhbmNoKFBvc3RWaXNpdCwgdGhpcyk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybWVkaWF0ZS5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRl
cm1lZGlhdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc3N2NhYjU0NTg1MWU0NzcwZDM1ZjQyYWRmODhkOWJm
MTc1YjZlMjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1lZGlhdGUuY3BwCkBAIC0wLDAgKzEsMTUwMCBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworLy8KKy8vIEJ1aWxkIHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVz
ZW50YXRpb24uCisvLworCisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4K
KyNpbmNsdWRlIDxhbGdvcml0aG0+CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0hh
c2hOYW1lcy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvbG9jYWxpbnRlcm1lZGlh
dGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1F1YWxpZmllckFsaXZlLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9SZW1vdmVUcmVlLmgiCisKK2Jvb2wgQ29tcGFy
ZVN0cnVjdHVyZShjb25zdCBUVHlwZSYgbGVmdE5vZGVUeXBlLCBDb25zdGFudFVuaW9uKiByaWdo
dFVuaW9uQXJyYXksIENvbnN0YW50VW5pb24qIGxlZnRVbmlvbkFycmF5KTsKKworc3RhdGljIFRQ
cmVjaXNpb24gR2V0SGlnaGVyUHJlY2lzaW9uKFRQcmVjaXNpb24gbGVmdCwgVFByZWNpc2lvbiBy
aWdodCkKK3sKKyAgICByZXR1cm4gbGVmdCA+IHJpZ2h0ID8gbGVmdCA6IHJpZ2h0OworfQorCitj
b25zdCBjaGFyKiBnZXRPcGVyYXRvclN0cmluZyhUT3BlcmF0b3Igb3ApCit7CisgICAgc3dpdGNo
IChvcCkgeworICAgICAgY2FzZSBFT3BJbml0aWFsaXplOiByZXR1cm4gIj0iOworICAgICAgY2Fz
ZSBFT3BBc3NpZ246IHJldHVybiAiPSI7CisgICAgICBjYXNlIEVPcEFkZEFzc2lnbjogcmV0dXJu
ICIrPSI7CisgICAgICBjYXNlIEVPcFN1YkFzc2lnbjogcmV0dXJuICItPSI7CisgICAgICBjYXNl
IEVPcERpdkFzc2lnbjogcmV0dXJuICIvPSI7CisKKyAgICAgIC8vIEZhbGwtdGhyb3VnaC4KKyAg
ICAgIGNhc2UgRU9wTXVsQXNzaWduOiAKKyAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXhB
c3NpZ246CisgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOgorICAgICAgY2Fz
ZSBFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbjoKKyAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNN
YXRyaXhBc3NpZ246IHJldHVybiAiKj0iOworCisgICAgICAvLyBGYWxsLXRocm91Z2guCisgICAg
ICBjYXNlIEVPcEluZGV4RGlyZWN0OgorICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OiByZXR1
cm4gIltdIjsKKworICAgICAgY2FzZSBFT3BJbmRleERpcmVjdFN0cnVjdDogcmV0dXJuICIuIjsK
KyAgICAgIGNhc2UgRU9wVmVjdG9yU3dpenpsZTogcmV0dXJuICIuIjsKKyAgICAgIGNhc2UgRU9w
QWRkOiByZXR1cm4gIisiOworICAgICAgY2FzZSBFT3BTdWI6IHJldHVybiAiLSI7CisgICAgICBj
YXNlIEVPcE11bDogcmV0dXJuICIqIjsKKyAgICAgIGNhc2UgRU9wRGl2OiByZXR1cm4gIi8iOwor
ICAgICAgY2FzZSBFT3BNb2Q6IFVOSU1QTEVNRU5URUQoKTsgYnJlYWs7CisgICAgICBjYXNlIEVP
cEVxdWFsOiByZXR1cm4gIj09IjsKKyAgICAgIGNhc2UgRU9wTm90RXF1YWw6IHJldHVybiAiIT0i
OworICAgICAgY2FzZSBFT3BMZXNzVGhhbjogcmV0dXJuICI8IjsKKyAgICAgIGNhc2UgRU9wR3Jl
YXRlclRoYW46IHJldHVybiAiPiI7CisgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6IHJldHVy
biAiPD0iOworICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiByZXR1cm4gIj49IjsKKwor
ICAgICAgLy8gRmFsbC10aHJvdWdoLgorICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjoK
KyAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXg6CisgICAgICBjYXNlIEVPcE1hdHJpeFRp
bWVzVmVjdG9yOgorICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhcjoKKyAgICAgIGNhc2Ug
RU9wTWF0cml4VGltZXNNYXRyaXg6IHJldHVybiAiKiI7CisKKyAgICAgIGNhc2UgRU9wTG9naWNh
bE9yOiByZXR1cm4gInx8IjsKKyAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjogcmV0dXJuICJeXiI7
CisgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6IHJldHVybiAiJiYiOworICAgICAgY2FzZSBFT3BO
ZWdhdGl2ZTogcmV0dXJuICItIjsKKyAgICAgIGNhc2UgRU9wVmVjdG9yTG9naWNhbE5vdDogcmV0
dXJuICJub3QiOworICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OiByZXR1cm4gIiEiOworICAgICAg
Y2FzZSBFT3BQb3N0SW5jcmVtZW50OiByZXR1cm4gIisrIjsKKyAgICAgIGNhc2UgRU9wUG9zdERl
Y3JlbWVudDogcmV0dXJuICItLSI7CisgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDogcmV0dXJu
ICIrKyI7CisgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDogcmV0dXJuICItLSI7CisKKyAgICAg
IC8vIEZhbGwtdGhyb3VnaC4KKyAgICAgIGNhc2UgRU9wQ29udkludFRvQm9vbDoKKyAgICAgIGNh
c2UgRU9wQ29udkZsb2F0VG9Cb29sOiByZXR1cm4gImJvb2wiOworIAorICAgICAgLy8gRmFsbC10
aHJvdWdoLgorICAgICAgY2FzZSBFT3BDb252Qm9vbFRvRmxvYXQ6CisgICAgICBjYXNlIEVPcENv
bnZJbnRUb0Zsb2F0OiByZXR1cm4gImZsb2F0IjsKKyAKKyAgICAgIC8vIEZhbGwtdGhyb3VnaC4K
KyAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9JbnQ6CisgICAgICBjYXNlIEVPcENvbnZCb29sVG9J
bnQ6IHJldHVybiAiaW50IjsKKworICAgICAgY2FzZSBFT3BSYWRpYW5zOiByZXR1cm4gInJhZGlh
bnMiOworICAgICAgY2FzZSBFT3BEZWdyZWVzOiByZXR1cm4gImRlZ3JlZXMiOworICAgICAgY2Fz
ZSBFT3BTaW46IHJldHVybiAic2luIjsKKyAgICAgIGNhc2UgRU9wQ29zOiByZXR1cm4gImNvcyI7
CisgICAgICBjYXNlIEVPcFRhbjogcmV0dXJuICJ0YW4iOworICAgICAgY2FzZSBFT3BBc2luOiBy
ZXR1cm4gImFzaW4iOworICAgICAgY2FzZSBFT3BBY29zOiByZXR1cm4gImFjb3MiOworICAgICAg
Y2FzZSBFT3BBdGFuOiByZXR1cm4gImF0YW4iOworICAgICAgY2FzZSBFT3BFeHA6IHJldHVybiAi
ZXhwIjsKKyAgICAgIGNhc2UgRU9wTG9nOiByZXR1cm4gImxvZyI7CisgICAgICBjYXNlIEVPcEV4
cDI6IHJldHVybiAiZXhwMiI7CisgICAgICBjYXNlIEVPcExvZzI6IHJldHVybiAibG9nMiI7Cisg
ICAgICBjYXNlIEVPcFNxcnQ6IHJldHVybiAic3FydCI7CisgICAgICBjYXNlIEVPcEludmVyc2VT
cXJ0OiByZXR1cm4gImludmVyc2VzcXJ0IjsKKyAgICAgIGNhc2UgRU9wQWJzOiByZXR1cm4gImFi
cyI7CisgICAgICBjYXNlIEVPcFNpZ246IHJldHVybiAic2lnbiI7CisgICAgICBjYXNlIEVPcEZs
b29yOiByZXR1cm4gImZsb29yIjsKKyAgICAgIGNhc2UgRU9wQ2VpbDogcmV0dXJuICJjZWlsIjsK
KyAgICAgIGNhc2UgRU9wRnJhY3Q6IHJldHVybiAiZnJhY3QiOworICAgICAgY2FzZSBFT3BMZW5n
dGg6IHJldHVybiAibGVuZ3RoIjsKKyAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiByZXR1cm4gIm5v
cm1hbGl6ZSI7CisgICAgICBjYXNlIEVPcERGZHg6IHJldHVybiAiZEZkeCI7CisgICAgICBjYXNl
IEVPcERGZHk6IHJldHVybiAiZEZkeSI7CisgICAgICBjYXNlIEVPcEZ3aWR0aDogcmV0dXJuICJm
d2lkdGgiOworICAgICAgY2FzZSBFT3BBbnk6IHJldHVybiAiYW55IjsKKyAgICAgIGNhc2UgRU9w
QWxsOiByZXR1cm4gImFsbCI7CisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKyAgICBy
ZXR1cm4gIiI7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBGaXJzdCBzZXQgb2Yg
ZnVuY3Rpb25zIGFyZSB0byBoZWxwIGJ1aWxkIHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRp
b24uCisvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBtZW1iZXIgZnVuY3Rpb25zIG9mIHRoZSBu
b2Rlcy4KKy8vIFRoZXkgYXJlIGNhbGxlZCBmcm9tIHBhcnNlciBwcm9kdWN0aW9ucy4KKy8vCisv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLworCisvLworLy8gQWRkIGEgdGVybWluYWwgbm9kZSBmb3IgYW4g
aWRlbnRpZmllciBpbiBhbiBleHByZXNzaW9uLgorLy8KKy8vIFJldHVybnMgdGhlIGFkZGVkIG5v
ZGUuCisvLworVEludGVybVN5bWJvbCogVEludGVybWVkaWF0ZTo6YWRkU3ltYm9sKGludCBpZCwg
Y29uc3QgVFN0cmluZyYgbmFtZSwgY29uc3QgVFR5cGUmIHR5cGUsIGNvbnN0IFRTb3VyY2VMb2Mm
IGxpbmUpCit7CisgICAgVEludGVybVN5bWJvbCogbm9kZSA9IG5ldyBUSW50ZXJtU3ltYm9sKGlk
LCBuYW1lLCB0eXBlKTsKKyAgICBub2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAgcmV0dXJuIG5v
ZGU7Cit9CisKKy8vCisvLyBDb25uZWN0IHR3byBub2RlcyB3aXRoIGEgbmV3IHBhcmVudCB0aGF0
IGRvZXMgYSBiaW5hcnkgb3BlcmF0aW9uIG9uIHRoZSBub2Rlcy4KKy8vCisvLyBSZXR1cm5zIHRo
ZSBhZGRlZCBub2RlLgorLy8KK1RJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkQmluYXJ5
TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdo
dCwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKK3sK
KyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9wRXF1YWw6CisgICAgICAgIGNhc2Ug
RU9wTm90RXF1YWw6CisgICAgICAgICAgICBpZiAobGVmdC0+aXNBcnJheSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTGVz
c1RoYW46CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46CisgICAgICAgIGNhc2UgRU9wTGVz
c1RoYW5FcXVhbDoKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgorICAgICAgICAg
ICAgaWYgKGxlZnQtPmlzTWF0cml4KCkgfHwgbGVmdC0+aXNBcnJheSgpIHx8IGxlZnQtPmlzVmVj
dG9yKCkgfHwgbGVmdC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BMb2dpY2FsT3I6CisgICAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjoKKyAgICAg
ICAgY2FzZSBFT3BMb2dpY2FsQW5kOgorICAgICAgICAgICAgaWYgKGxlZnQtPmdldEJhc2ljVHlw
ZSgpICE9IEVidEJvb2wgfHwgbGVmdC0+aXNNYXRyaXgoKSB8fCBsZWZ0LT5pc0FycmF5KCkgfHwg
bGVmdC0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQWRkOgorICAgICAgICBj
YXNlIEVPcFN1YjoKKyAgICAgICAgY2FzZSBFT3BEaXY6CisgICAgICAgIGNhc2UgRU9wTXVsOgor
ICAgICAgICAgICAgaWYgKGxlZnQtPmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCB8fCBsZWZ0
LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRCb29sKQorICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICAvLworICAgIC8vIEZpcnN0IHRy
eSBjb252ZXJ0aW5nIHRoZSBjaGlsZHJlbiB0byBjb21wYXRpYmxlIHR5cGVzLgorICAgIC8vCisg
ICAgaWYgKGxlZnQtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKSAmJiByaWdodC0+Z2V0VHlwZSgpLmdl
dFN0cnVjdCgpKSB7CisgICAgICAgIGlmIChsZWZ0LT5nZXRUeXBlKCkgIT0gcmlnaHQtPmdldFR5
cGUoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSB7CisgICAgICAgIFRJbnRl
cm1UeXBlZCogY2hpbGQgPSBhZGRDb252ZXJzaW9uKG9wLCBsZWZ0LT5nZXRUeXBlKCksIHJpZ2h0
KTsKKyAgICAgICAgaWYgKGNoaWxkKQorICAgICAgICAgICAgcmlnaHQgPSBjaGlsZDsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBjaGlsZCA9IGFkZENvbnZlcnNpb24ob3AsIHJpZ2h0LT5n
ZXRUeXBlKCksIGxlZnQpOworICAgICAgICAgICAgaWYgKGNoaWxkKQorICAgICAgICAgICAgICAg
IGxlZnQgPSBjaGlsZDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vCisgICAgLy8gTmVlZCBhIG5ldyBub2RlIGhv
bGRpbmcgdGhpbmdzIHRvZ2V0aGVyIHRoZW4uICBNYWtlCisgICAgLy8gb25lIGFuZCBwcm9tb3Rl
IGl0IHRvIHRoZSByaWdodCB0eXBlLgorICAgIC8vCisgICAgVEludGVybUJpbmFyeSogbm9kZSA9
IG5ldyBUSW50ZXJtQmluYXJ5KG9wKTsKKyAgICBub2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAg
bm9kZS0+c2V0TGVmdChsZWZ0KTsKKyAgICBub2RlLT5zZXRSaWdodChyaWdodCk7CisgICAgaWYg
KCFub2RlLT5wcm9tb3RlKGluZm9TaW5rKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLwor
ICAgIC8vIFNlZSBpZiB3ZSBjYW4gZm9sZCBjb25zdGFudHMuCisgICAgLy8KKyAgICBUSW50ZXJt
VHlwZWQqIHR5cGVkUmV0dXJuTm9kZSA9IDA7CisgICAgVEludGVybUNvbnN0YW50VW5pb24gKmxl
ZnRUZW1wQ29uc3RhbnQgPSBsZWZ0LT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKyAgICBUSW50ZXJt
Q29uc3RhbnRVbmlvbiAqcmlnaHRUZW1wQ29uc3RhbnQgPSByaWdodC0+Z2V0QXNDb25zdGFudFVu
aW9uKCk7CisgICAgaWYgKGxlZnRUZW1wQ29uc3RhbnQgJiYgcmlnaHRUZW1wQ29uc3RhbnQpIHsK
KyAgICAgICAgdHlwZWRSZXR1cm5Ob2RlID0gbGVmdFRlbXBDb25zdGFudC0+Zm9sZChub2RlLT5n
ZXRPcCgpLCByaWdodFRlbXBDb25zdGFudCwgaW5mb1NpbmspOworCisgICAgICAgIGlmICh0eXBl
ZFJldHVybk5vZGUpCisgICAgICAgICAgICByZXR1cm4gdHlwZWRSZXR1cm5Ob2RlOworICAgIH0K
KworICAgIHJldHVybiBub2RlOworfQorCisvLworLy8gQ29ubmVjdCB0d28gbm9kZXMgdGhyb3Vn
aCBhbiBhc3NpZ25tZW50LgorLy8KKy8vIFJldHVybnMgdGhlIGFkZGVkIG5vZGUuCisvLworVElu
dGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRBc3NpZ24oVE9wZXJhdG9yIG9wLCBUSW50ZXJt
VHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUp
Cit7CisgICAgLy8KKyAgICAvLyBMaWtlIGFkZGluZyBiaW5hcnkgbWF0aCwgZXhjZXB0IHRoZSBj
b252ZXJzaW9uIGNhbiBvbmx5IGdvCisgICAgLy8gZnJvbSByaWdodCB0byBsZWZ0LgorICAgIC8v
CisgICAgVEludGVybUJpbmFyeSogbm9kZSA9IG5ldyBUSW50ZXJtQmluYXJ5KG9wKTsKKyAgICBu
b2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAgVEludGVybVR5cGVkKiBjaGlsZCA9IGFkZENvbnZl
cnNpb24ob3AsIGxlZnQtPmdldFR5cGUoKSwgcmlnaHQpOworICAgIGlmIChjaGlsZCA9PSAwKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIG5vZGUtPnNldExlZnQobGVmdCk7CisgICAgbm9kZS0+
c2V0UmlnaHQoY2hpbGQpOworICAgIGlmICghIG5vZGUtPnByb21vdGUoaW5mb1NpbmspKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBub2RlOworfQorCisvLworLy8gQ29ubmVjdCB0
d28gbm9kZXMgdGhyb3VnaCBhbiBpbmRleCBvcGVyYXRvciwgd2hlcmUgdGhlIGxlZnQgbm9kZSBp
cyB0aGUgYmFzZQorLy8gb2YgYW4gYXJyYXkgb3Igc3RydWN0LCBhbmQgdGhlIHJpZ2h0IG5vZGUg
aXMgYSBkaXJlY3Qgb3IgaW5kaXJlY3Qgb2Zmc2V0LgorLy8KKy8vIFJldHVybnMgdGhlIGFkZGVk
IG5vZGUuCisvLyBUaGUgY2FsbGVyIHNob3VsZCBzZXQgdGhlIHR5cGUgb2YgdGhlIHJldHVybmVk
IG5vZGUuCisvLworVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRJbmRleChUT3BlcmF0
b3Igb3AsIFRJbnRlcm1UeXBlZCogYmFzZSwgVEludGVybVR5cGVkKiBpbmRleCwgY29uc3QgVFNv
dXJjZUxvYyYgbGluZSkKK3sKKyAgICBUSW50ZXJtQmluYXJ5KiBub2RlID0gbmV3IFRJbnRlcm1C
aW5hcnkob3ApOworICAgIG5vZGUtPnNldExpbmUobGluZSk7CisgICAgbm9kZS0+c2V0TGVmdChi
YXNlKTsKKyAgICBub2RlLT5zZXRSaWdodChpbmRleCk7CisKKyAgICAvLyBjYWxsZXIgc2hvdWxk
IHNldCB0aGUgdHlwZQorCisgICAgcmV0dXJuIG5vZGU7Cit9CisKKy8vCisvLyBBZGQgb25lIG5v
ZGUgYXMgdGhlIHBhcmVudCBvZiBhbm90aGVyIHRoYXQgaXQgb3BlcmF0ZXMgb24uCisvLworLy8g
UmV0dXJucyB0aGUgYWRkZWQgbm9kZS4KKy8vCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6
OmFkZFVuYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBjaGlsZE5vZGUsIGNvbnN0
IFRTb3VyY2VMb2MmIGxpbmUsIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCit7CisgICAgVElu
dGVybVVuYXJ5KiBub2RlOworICAgIFRJbnRlcm1UeXBlZCogY2hpbGQgPSBjaGlsZE5vZGUtPmdl
dEFzVHlwZWQoKTsKKworICAgIGlmIChjaGlsZCA9PSAwKSB7CisgICAgICAgIGluZm9TaW5rLmlu
Zm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbGluZSwgIkJhZCB0eXBlIGluIEFkZFVu
YXJ5TWF0aCIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG9wKSB7
CisgICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDoKKyAgICAgICAgICAgIGlmIChjaGlsZC0+Z2V0
VHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidEJvb2wgfHwgY2hpbGQtPmdldFR5cGUoKS5pc01h
dHJpeCgpIHx8IGNoaWxkLT5nZXRUeXBlKCkuaXNBcnJheSgpIHx8IGNoaWxkLT5nZXRUeXBlKCku
aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50OgorICAg
ICAgICBjYXNlIEVPcFByZUluY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50
OgorICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BOZWdhdGl2
ZToKKyAgICAgICAgICAgIGlmIChjaGlsZC0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVi
dFN0cnVjdCB8fCBjaGlsZC0+Z2V0VHlwZSgpLmlzQXJyYXkoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorCisgICAgLy8KKyAgICAv
LyBEbyB3ZSBuZWVkIHRvIHByb21vdGUgdGhlIG9wZXJhbmQ/CisgICAgLy8KKyAgICAvLyBOb3Rl
OiBJbXBsaWNpdCBwcm9tb3Rpb25zIHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBsYW5ndWFnZS4KKyAg
ICAvLworICAgIFRCYXNpY1R5cGUgbmV3VHlwZSA9IEVidFZvaWQ7CisgICAgc3dpdGNoIChvcCkg
eworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDogICBuZXdUeXBlID0gRWJ0SW50OyAgIGJy
ZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6ICBuZXdUeXBlID0gRWJ0Qm9vbDsg
IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OiBuZXdUeXBlID0gRWJ0Rmxv
YXQ7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICBpZiAobmV3
VHlwZSAhPSBFYnRWb2lkKSB7CisgICAgICAgIGNoaWxkID0gYWRkQ29udmVyc2lvbihvcCwgVFR5
cGUobmV3VHlwZSwgY2hpbGQtPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksCisgICAgICAg
ICAgICBjaGlsZC0+Z2V0Tm9taW5hbFNpemUoKSwKKyAgICAgICAgICAgIGNoaWxkLT5pc01hdHJp
eCgpLAorICAgICAgICAgICAgY2hpbGQtPmlzQXJyYXkoKSksCisgICAgICAgICAgICBjaGlsZCk7
CisgICAgICAgIGlmIChjaGlsZCA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
CisgICAgLy8KKyAgICAvLyBGb3IgY29uc3RydWN0b3JzLCB3ZSBhcmUgbm93IGRvbmUsIGl0J3Mg
YWxsIGluIHRoZSBjb252ZXJzaW9uLgorICAgIC8vCisgICAgc3dpdGNoIChvcCkgeworICAgICAg
ICBjYXNlIEVPcENvbnN0cnVjdEludDoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29sOgor
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OgorICAgICAgICAgICAgcmV0dXJuIGNoaWxk
OworICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICBUSW50ZXJtQ29uc3RhbnRV
bmlvbiAqY2hpbGRUZW1wQ29uc3RhbnQgPSAwOworICAgIGlmIChjaGlsZC0+Z2V0QXNDb25zdGFu
dFVuaW9uKCkpCisgICAgICAgIGNoaWxkVGVtcENvbnN0YW50ID0gY2hpbGQtPmdldEFzQ29uc3Rh
bnRVbmlvbigpOworCisgICAgLy8KKyAgICAvLyBNYWtlIGEgbmV3IG5vZGUgZm9yIHRoZSBvcGVy
YXRvci4KKyAgICAvLworICAgIG5vZGUgPSBuZXcgVEludGVybVVuYXJ5KG9wKTsKKyAgICBub2Rl
LT5zZXRMaW5lKGxpbmUpOworICAgIG5vZGUtPnNldE9wZXJhbmQoY2hpbGQpOworCisgICAgaWYg
KCEgbm9kZS0+cHJvbW90ZShpbmZvU2luaykpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYg
KGNoaWxkVGVtcENvbnN0YW50KSAgeworICAgICAgICBUSW50ZXJtVHlwZWQqIG5ld0NoaWxkID0g
Y2hpbGRUZW1wQ29uc3RhbnQtPmZvbGQob3AsIDAsIGluZm9TaW5rKTsKKworICAgICAgICBpZiAo
bmV3Q2hpbGQpCisgICAgICAgICAgICByZXR1cm4gbmV3Q2hpbGQ7CisgICAgfQorCisgICAgcmV0
dXJuIG5vZGU7Cit9CisKKy8vCisvLyBUaGlzIGlzIHRoZSBzYWZlIHdheSB0byBjaGFuZ2UgdGhl
IG9wZXJhdG9yIG9uIGFuIGFnZ3JlZ2F0ZSwgYXMgaXQKKy8vIGRvZXMgbG90cyBvZiBlcnJvciBj
aGVja2luZyBhbmQgZml4aW5nLiAgRXNwZWNpYWxseSBmb3IgZXN0YWJsaXNoaW5nCisvLyBhIGZ1
bmN0aW9uIGNhbGwncyBvcGVyYXRpb24gb24gaXQncyBzZXQgb2YgcGFyYW1ldGVycy4gIFNlcXVl
bmNlcworLy8gb2YgaW5zdHJ1Y3Rpb25zIGFyZSBhbHNvIGFnZ3JlZ2F0ZXMsIGJ1dCB0aGV5IGp1
c3QgZGlyZW5jdGx5IHNldAorLy8gdGhlaXIgb3BlcmF0b3IgdG8gRU9wU2VxdWVuY2UuCisvLwor
Ly8gUmV0dXJucyBhbiBhZ2dyZWdhdGUgbm9kZSwgd2hpY2ggY291bGQgYmUgdGhlIG9uZSBwYXNz
ZWQgaW4gaWYKKy8vIGl0IHdhcyBhbHJlYWR5IGFuIGFnZ3JlZ2F0ZSBidXQgbm8gb3BlcmF0b3Ig
d2FzIHNldC4KKy8vCitUSW50ZXJtQWdncmVnYXRlKiBUSW50ZXJtZWRpYXRlOjpzZXRBZ2dyZWdh
dGVPcGVyYXRvcihUSW50ZXJtTm9kZSogbm9kZSwgVE9wZXJhdG9yIG9wLCBjb25zdCBUU291cmNl
TG9jJiBsaW5lKQoreworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ05vZGU7CisKKyAgICAvLwor
ICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIGFnZ3JlZ2F0ZS4gIElmIG5vdCB0dXJuIGl0IGlu
dG8gb25lLgorICAgIC8vCisgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgYWdnTm9kZSA9IG5vZGUt
PmdldEFzQWdncmVnYXRlKCk7CisgICAgICAgIGlmIChhZ2dOb2RlID09IDAgfHwgYWdnTm9kZS0+
Z2V0T3AoKSAhPSBFT3BOdWxsKSB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gTWFr
ZSBhbiBhZ2dyZWdhdGUgY29udGFpbmluZyB0aGlzIG5vZGUuCisgICAgICAgICAgICAvLworICAg
ICAgICAgICAgYWdnTm9kZSA9IG5ldyBUSW50ZXJtQWdncmVnYXRlKCk7CisgICAgICAgICAgICBh
Z2dOb2RlLT5nZXRTZXF1ZW5jZSgpLnB1c2hfYmFjayhub2RlKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZQorICAgICAgICBhZ2dOb2RlID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGUoKTsKKworICAgIC8v
CisgICAgLy8gU2V0IHRoZSBvcGVyYXRvci4KKyAgICAvLworICAgIGFnZ05vZGUtPnNldE9wKG9w
KTsKKyAgICBhZ2dOb2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAgcmV0dXJuIGFnZ05vZGU7Cit9
CisKKy8vCisvLyBDb252ZXJ0IG9uZSB0eXBlIHRvIGFub3RoZXIuCisvLworLy8gUmV0dXJucyB0
aGUgbm9kZSByZXByZXNlbnRpbmcgdGhlIGNvbnZlcnNpb24sIHdoaWNoIGNvdWxkIGJlIHRoZSBz
YW1lCisvLyBub2RlIHBhc3NlZCBpbiBpZiBubyBjb252ZXJzaW9uIHdhcyBuZWVkZWQuCisvLwor
Ly8gUmV0dXJuIDAgaWYgYSBjb252ZXJzaW9uIGNhbid0IGJlIGRvbmUuCisvLworVEludGVybVR5
cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRDb252ZXJzaW9uKFRPcGVyYXRvciBvcCwgY29uc3QgVFR5
cGUmIHR5cGUsIFRJbnRlcm1UeXBlZCogbm9kZSkKK3sKKyAgICAvLworICAgIC8vIERvZXMgdGhl
IGJhc2UgdHlwZSBhbGxvdyBvcGVyYXRpb24/CisgICAgLy8KKyAgICBzd2l0Y2ggKG5vZGUtPmdl
dEJhc2ljVHlwZSgpKSB7CisgICAgICAgIGNhc2UgRWJ0Vm9pZDoKKyAgICAgICAgY2FzZSBFYnRT
YW1wbGVyMkQ6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6CisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBP
dGhlcndpc2UsIGlmIHR5cGVzIGFyZSBpZGVudGljYWwsIG5vIHByb2JsZW0KKyAgICAvLworICAg
IGlmICh0eXBlID09IG5vZGUtPmdldFR5cGUoKSkKKyAgICAgICAgcmV0dXJuIG5vZGU7CisKKyAg
ICAvLworICAgIC8vIElmIG9uZSdzIGEgc3RydWN0dXJlLCB0aGVuIG5vIGNvbnZlcnNpb25zLgor
ICAgIC8vCisgICAgaWYgKHR5cGUuZ2V0U3RydWN0KCkgfHwgbm9kZS0+Z2V0VHlwZSgpLmdldFN0
cnVjdCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vCisgICAgLy8gSWYgb25lJ3MgYW4g
YXJyYXksIHRoZW4gbm8gY29udmVyc2lvbnMuCisgICAgLy8KKyAgICBpZiAodHlwZS5pc0FycmF5
KCkgfHwgbm9kZS0+Z2V0VHlwZSgpLmlzQXJyYXkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBUQmFzaWNUeXBlIHByb21vdGVUbzsKKworICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gRXhwbGljaXQgY29udmVyc2lvbnMKKyAgICAgICAgLy8KKyAgICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RCb29sOgorICAgICAgICAgICAgcHJvbW90ZVRvID0gRWJ0Qm9vbDsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OgorICAgICAg
ICAgICAgcHJvbW90ZVRvID0gRWJ0RmxvYXQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BDb25zdHJ1Y3RJbnQ6CisgICAgICAgICAgICBwcm9tb3RlVG8gPSBFYnRJbnQ7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAvLyBpbXBsaWNpdCBjb252ZXJzaW9ucyB3ZXJlIHJlbW92ZWQgZnJvbSB0aGUgbGFu
Z3VhZ2UuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBl
KCkgIT0gbm9kZS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFNpemUgYW5kIHN0cnVjdHVy
ZSBjb3VsZCBzdGlsbCBkaWZmZXIsIGJ1dCB0aGF0J3MKKyAgICAgICAgICAgIC8vIGhhbmRsZWQg
Ynkgb3BlcmF0b3IgcHJvbW90aW9uLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIHJldHVy
biBub2RlOworICAgIH0KKworICAgIGlmIChub2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKSkgewor
CisgICAgICAgIHJldHVybiAocHJvbW90ZUNvbnN0YW50VW5pb24ocHJvbW90ZVRvLCBub2RlLT5n
ZXRBc0NvbnN0YW50VW5pb24oKSkpOworICAgIH0gZWxzZSB7CisKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gQWRkIGEgbmV3IG5ld05vZGUgZm9yIHRoZSBjb252ZXJzaW9uLgorICAgICAgICAvLwor
ICAgICAgICBUSW50ZXJtVW5hcnkqIG5ld05vZGUgPSAwOworCisgICAgICAgIFRPcGVyYXRvciBu
ZXdPcCA9IEVPcE51bGw7CisgICAgICAgIHN3aXRjaCAocHJvbW90ZVRvKSB7CisgICAgICAgICAg
ICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNU
eXBlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgbmV3T3AgPSBFT3BD
b252SW50VG9GbG9hdDsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6
ICBuZXdPcCA9IEVPcENvbnZCb29sVG9GbG9hdDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2Uo
RVByZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIkJhZCBwcm9tb3Rpb24gbm9k
ZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRCb29sOgorICAg
ICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgbmV3T3AgPSBFT3BDb252SW50VG9Cb29sOyAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OiBuZXdPcCA9IEVPcENvbnZGbG9h
dFRvQm9vbDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3Is
IG5vZGUtPmdldExpbmUoKSwgIkJhZCBwcm9tb3Rpb24gbm9kZSIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6
ICAgbmV3T3AgPSBFT3BDb252Qm9vbFRvSW50OyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgRWJ0RmxvYXQ6ICBuZXdPcCA9IEVPcENvbnZGbG9hdFRvSW50OyBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5r
LmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQmFk
IHByb21vdGlvbiBub2RlIik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJu
YWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQmFkIHByb21vdGlvbiB0eXBlIik7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBUVHlwZSB0eXBlKHByb21v
dGVUbywgbm9kZS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgbm9kZS0+Z2V0Tm9taW5h
bFNpemUoKSwgbm9kZS0+aXNNYXRyaXgoKSwgbm9kZS0+aXNBcnJheSgpKTsKKyAgICAgICAgbmV3
Tm9kZSA9IG5ldyBUSW50ZXJtVW5hcnkobmV3T3AsIHR5cGUpOworICAgICAgICBuZXdOb2RlLT5z
ZXRMaW5lKG5vZGUtPmdldExpbmUoKSk7CisgICAgICAgIG5ld05vZGUtPnNldE9wZXJhbmQobm9k
ZSk7CisKKyAgICAgICAgcmV0dXJuIG5ld05vZGU7CisgICAgfQorfQorCisvLworLy8gU2FmZSB3
YXkgdG8gY29tYmluZSB0d28gbm9kZXMgaW50byBhbiBhZ2dyZWdhdGUuICBXb3JrcyB3aXRoIG51
bGwgcG9pbnRlcnMsCisvLyBhIG5vZGUgdGhhdCdzIG5vdCBhIGFnZ3JlZ2F0ZSB5ZXQsIGV0Yy4K
Ky8vCisvLyBSZXR1cm5zIHRoZSByZXN1bHRpbmcgYWdncmVnYXRlLCB1bmxlc3MgMCB3YXMgcGFz
c2VkIGluIGZvcgorLy8gYm90aCBleGlzdGluZyBub2Rlcy4KKy8vCitUSW50ZXJtQWdncmVnYXRl
KiBUSW50ZXJtZWRpYXRlOjpncm93QWdncmVnYXRlKFRJbnRlcm1Ob2RlKiBsZWZ0LCBUSW50ZXJt
Tm9kZSogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCit7CisgICAgaWYgKGxlZnQgPT0g
MCAmJiByaWdodCA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRJbnRlcm1BZ2dyZWdh
dGUqIGFnZ05vZGUgPSAwOworICAgIGlmIChsZWZ0KQorICAgICAgICBhZ2dOb2RlID0gbGVmdC0+
Z2V0QXNBZ2dyZWdhdGUoKTsKKyAgICBpZiAoIWFnZ05vZGUgfHwgYWdnTm9kZS0+Z2V0T3AoKSAh
PSBFT3BOdWxsKSB7CisgICAgICAgIGFnZ05vZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKKyAg
ICAgICAgaWYgKGxlZnQpCisgICAgICAgICAgICBhZ2dOb2RlLT5nZXRTZXF1ZW5jZSgpLnB1c2hf
YmFjayhsZWZ0KTsKKyAgICB9CisKKyAgICBpZiAocmlnaHQpCisgICAgICAgIGFnZ05vZGUtPmdl
dFNlcXVlbmNlKCkucHVzaF9iYWNrKHJpZ2h0KTsKKworICAgIGFnZ05vZGUtPnNldExpbmUobGlu
ZSk7CisKKyAgICByZXR1cm4gYWdnTm9kZTsKK30KKworLy8KKy8vIFR1cm4gYW4gZXhpc3Rpbmcg
bm9kZSBpbnRvIGFuIGFnZ3JlZ2F0ZS4KKy8vCisvLyBSZXR1cm5zIGFuIGFnZ3JlZ2F0ZSwgdW5s
ZXNzIDAgd2FzIHBhc3NlZCBpbiBmb3IgdGhlIGV4aXN0aW5nIG5vZGUuCisvLworVEludGVybUFn
Z3JlZ2F0ZSogVEludGVybWVkaWF0ZTo6bWFrZUFnZ3JlZ2F0ZShUSW50ZXJtTm9kZSogbm9kZSwg
Y29uc3QgVFNvdXJjZUxvYyYgbGluZSkKK3sKKyAgICBpZiAobm9kZSA9PSAwKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ05vZGUgPSBuZXcgVEludGVybUFn
Z3JlZ2F0ZTsKKyAgICBhZ2dOb2RlLT5nZXRTZXF1ZW5jZSgpLnB1c2hfYmFjayhub2RlKTsKKyAg
ICBhZ2dOb2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAgcmV0dXJuIGFnZ05vZGU7Cit9CisKKy8v
CisvLyBGb3IgImlmIiB0ZXN0IG5vZGVzLiAgVGhlcmUgYXJlIHRocmVlIGNoaWxkcmVuOyBhIGNv
bmRpdGlvbiwKKy8vIGEgdHJ1ZSBwYXRoLCBhbmQgYSBmYWxzZSBwYXRoLiAgVGhlIHR3byBwYXRo
cyBhcmUgaW4gdGhlCisvLyBub2RlUGFpci4KKy8vCisvLyBSZXR1cm5zIHRoZSBzZWxlY3Rpb24g
bm9kZSBjcmVhdGVkLgorLy8KK1RJbnRlcm1Ob2RlKiBUSW50ZXJtZWRpYXRlOjphZGRTZWxlY3Rp
b24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtTm9kZVBhaXIgbm9kZVBhaXIsIGNvbnN0IFRT
b3VyY2VMb2MmIGxpbmUpCit7CisgICAgLy8KKyAgICAvLyBGb3IgY29tcGlsZSB0aW1lIGNvbnN0
YW50IHNlbGVjdGlvbnMsIHBydW5lIHRoZSBjb2RlIGFuZAorICAgIC8vIHRlc3Qgbm93LgorICAg
IC8vCisKKyAgICBpZiAoY29uZC0+Z2V0QXNUeXBlZCgpICYmIGNvbmQtPmdldEFzVHlwZWQoKS0+
Z2V0QXNDb25zdGFudFVuaW9uKCkpIHsKKyAgICAgICAgaWYgKGNvbmQtPmdldEFzQ29uc3RhbnRV
bmlvbigpLT5nZXRCQ29uc3QoMCkgPT0gdHJ1ZSkKKyAgICAgICAgICAgIHJldHVybiBub2RlUGFp
ci5ub2RlMSA/IHNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5vZGVQYWlyLm5vZGUxLCBFT3BTZXF1ZW5j
ZSwgbm9kZVBhaXIubm9kZTEtPmdldExpbmUoKSkgOiBOVUxMOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICByZXR1cm4gbm9kZVBhaXIubm9kZTIgPyBzZXRBZ2dyZWdhdGVPcGVyYXRvcihub2Rl
UGFpci5ub2RlMiwgRU9wU2VxdWVuY2UsIG5vZGVQYWlyLm5vZGUyLT5nZXRMaW5lKCkpIDogTlVM
TDsKKyAgICB9CisKKyAgICBUSW50ZXJtU2VsZWN0aW9uKiBub2RlID0gbmV3IFRJbnRlcm1TZWxl
Y3Rpb24oY29uZCwgbm9kZVBhaXIubm9kZTEsIG5vZGVQYWlyLm5vZGUyKTsKKyAgICBub2RlLT5z
ZXRMaW5lKGxpbmUpOworCisgICAgcmV0dXJuIG5vZGU7Cit9CisKKworVEludGVybVR5cGVkKiBU
SW50ZXJtZWRpYXRlOjphZGRDb21tYShUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCog
cmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCit7CisgICAgaWYgKGxlZnQtPmdldFR5cGUo
KS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCAmJiByaWdodC0+Z2V0VHlwZSgpLmdldFF1YWxp
ZmllcigpID09IEV2cUNvbnN0KSB7CisgICAgICAgIHJldHVybiByaWdodDsKKyAgICB9IGVsc2Ug
eworICAgICAgICBUSW50ZXJtVHlwZWQgKmNvbW1hQWdncmVnYXRlID0gZ3Jvd0FnZ3JlZ2F0ZShs
ZWZ0LCByaWdodCwgbGluZSk7CisgICAgICAgIGNvbW1hQWdncmVnYXRlLT5nZXRBc0FnZ3JlZ2F0
ZSgpLT5zZXRPcChFT3BDb21tYSk7CisgICAgICAgIGNvbW1hQWdncmVnYXRlLT5zZXRUeXBlKHJp
Z2h0LT5nZXRUeXBlKCkpOworICAgICAgICBjb21tYUFnZ3JlZ2F0ZS0+Z2V0VHlwZVBvaW50ZXIo
KS0+c2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CisgICAgICAgIHJldHVybiBjb21tYUFnZ3Jl
Z2F0ZTsKKyAgICB9Cit9CisKKy8vCisvLyBGb3IgIj86IiB0ZXN0IG5vZGVzLiAgVGhlcmUgYXJl
IHRocmVlIGNoaWxkcmVuOyBhIGNvbmRpdGlvbiwKKy8vIGEgdHJ1ZSBwYXRoLCBhbmQgYSBmYWxz
ZSBwYXRoLiAgVGhlIHR3byBwYXRocyBhcmUgc3BlY2lmaWVkCisvLyBhcyBzZXBhcmF0ZSBwYXJh
bWV0ZXJzLgorLy8KKy8vIFJldHVybnMgdGhlIHNlbGVjdGlvbiBub2RlIGNyZWF0ZWQsIG9yIDAg
aWYgb25lIGNvdWxkIG5vdCBiZS4KKy8vCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFk
ZFNlbGVjdGlvbihUSW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1UeXBlZCogdHJ1ZUJsb2NrLCBU
SW50ZXJtVHlwZWQqIGZhbHNlQmxvY2ssIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCit7CisgICAg
Ly8KKyAgICAvLyBHZXQgY29tcGF0aWJsZSB0eXBlcy4KKyAgICAvLworICAgIFRJbnRlcm1UeXBl
ZCogY2hpbGQgPSBhZGRDb252ZXJzaW9uKEVPcFNlcXVlbmNlLCB0cnVlQmxvY2stPmdldFR5cGUo
KSwgZmFsc2VCbG9jayk7CisgICAgaWYgKGNoaWxkKQorICAgICAgICBmYWxzZUJsb2NrID0gY2hp
bGQ7CisgICAgZWxzZSB7CisgICAgICAgIGNoaWxkID0gYWRkQ29udmVyc2lvbihFT3BTZXF1ZW5j
ZSwgZmFsc2VCbG9jay0+Z2V0VHlwZSgpLCB0cnVlQmxvY2spOworICAgICAgICBpZiAoY2hpbGQp
CisgICAgICAgICAgICB0cnVlQmxvY2sgPSBjaGlsZDsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBTZWUgaWYgYWxsIHRoZSBvcGVy
YW5kcyBhcmUgY29uc3RhbnQsIHRoZW4gZm9sZCBpdCBvdGhlcndpc2Ugbm90LgorICAgIC8vCisK
KyAgICBpZiAoY29uZC0+Z2V0QXNDb25zdGFudFVuaW9uKCkgJiYgdHJ1ZUJsb2NrLT5nZXRBc0Nv
bnN0YW50VW5pb24oKSAmJiBmYWxzZUJsb2NrLT5nZXRBc0NvbnN0YW50VW5pb24oKSkgeworICAg
ICAgICBpZiAoY29uZC0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldEJDb25zdCgwKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlQmxvY2s7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZUJsb2NrOworICAgIH0KKworICAgIC8vCisgICAgLy8gTWFrZSBhIHNlbGVjdGlvbiBu
b2RlLgorICAgIC8vCisgICAgVEludGVybVNlbGVjdGlvbiogbm9kZSA9IG5ldyBUSW50ZXJtU2Vs
ZWN0aW9uKGNvbmQsIHRydWVCbG9jaywgZmFsc2VCbG9jaywgdHJ1ZUJsb2NrLT5nZXRUeXBlKCkp
OworICAgIG5vZGUtPmdldFR5cGVQb2ludGVyKCktPnNldFF1YWxpZmllcihFdnFUZW1wb3Jhcnkp
OworICAgIG5vZGUtPnNldExpbmUobGluZSk7CisKKyAgICByZXR1cm4gbm9kZTsKK30KKworLy8K
Ky8vIENvbnN0YW50IHRlcm1pbmFsIG5vZGVzLiAgSGFzIGEgdW5pb24gdGhhdCBjb250YWlucyBi
b29sLCBmbG9hdCBvciBpbnQgY29uc3RhbnRzCisvLworLy8gUmV0dXJucyB0aGUgY29uc3RhbnQg
dW5pb24gbm9kZSBjcmVhdGVkLgorLy8KKworVEludGVybUNvbnN0YW50VW5pb24qIFRJbnRlcm1l
ZGlhdGU6OmFkZENvbnN0YW50VW5pb24oQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheVBvaW50ZXIs
IGNvbnN0IFRUeXBlJiB0LCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQoreworICAgIFRJbnRlcm1D
b25zdGFudFVuaW9uKiBub2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHVuaW9uQXJyYXlQ
b2ludGVyLCB0KTsKKyAgICBub2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAgcmV0dXJuIG5vZGU7
Cit9CisKK1RJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkU3dpenpsZShUVmVjdG9yRmll
bGRzJiBmaWVsZHMsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCit7CisKKyAgICBUSW50ZXJtQWdn
cmVnYXRlKiBub2RlID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGUoRU9wU2VxdWVuY2UpOworCisgICAg
bm9kZS0+c2V0TGluZShsaW5lKTsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogY29uc3RJbnRO
b2RlOworICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2VWZWN0b3IgPSBub2RlLT5nZXRTZXF1
ZW5jZSgpOworICAgIENvbnN0YW50VW5pb24qIHVuaW9uQXJyYXk7CisKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGZpZWxkcy5udW07IGkrKykgeworICAgICAgICB1bmlvbkFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bMV07CisgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChmaWVsZHMub2Zm
c2V0c1tpXSk7CisgICAgICAgIGNvbnN0SW50Tm9kZSA9IGFkZENvbnN0YW50VW5pb24odW5pb25B
cnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgbGluZSk7CisgICAg
ICAgIHNlcXVlbmNlVmVjdG9yLnB1c2hfYmFjayhjb25zdEludE5vZGUpOworICAgIH0KKworICAg
IHJldHVybiBub2RlOworfQorCisvLworLy8gQ3JlYXRlIGxvb3Agbm9kZXMuCisvLworVEludGVy
bU5vZGUqIFRJbnRlcm1lZGlhdGU6OmFkZExvb3AoVExvb3BUeXBlIHR5cGUsIFRJbnRlcm1Ob2Rl
KiBpbml0LCBUSW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1UeXBlZCogZXhwciwgVEludGVybU5v
ZGUqIGJvZHksIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCit7CisgICAgVEludGVybU5vZGUqIG5v
ZGUgPSBuZXcgVEludGVybUxvb3AodHlwZSwgaW5pdCwgY29uZCwgZXhwciwgYm9keSk7CisgICAg
bm9kZS0+c2V0TGluZShsaW5lKTsKKworICAgIHJldHVybiBub2RlOworfQorCisvLworLy8gQWRk
IGJyYW5jaGVzLgorLy8KK1RJbnRlcm1CcmFuY2gqIFRJbnRlcm1lZGlhdGU6OmFkZEJyYW5jaChU
T3BlcmF0b3IgYnJhbmNoT3AsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCit7CisgICAgcmV0dXJu
IGFkZEJyYW5jaChicmFuY2hPcCwgMCwgbGluZSk7Cit9CisKK1RJbnRlcm1CcmFuY2gqIFRJbnRl
cm1lZGlhdGU6OmFkZEJyYW5jaChUT3BlcmF0b3IgYnJhbmNoT3AsIFRJbnRlcm1UeXBlZCogZXhw
cmVzc2lvbiwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKK3sKKyAgICBUSW50ZXJtQnJhbmNoKiBu
b2RlID0gbmV3IFRJbnRlcm1CcmFuY2goYnJhbmNoT3AsIGV4cHJlc3Npb24pOworICAgIG5vZGUt
PnNldExpbmUobGluZSk7CisKKyAgICByZXR1cm4gbm9kZTsKK30KKworLy8KKy8vIFRoaXMgaXMg
dG8gYmUgZXhlY3V0ZWQgb25jZSB0aGUgZmluYWwgcm9vdCBpcyBwdXQgb24gdG9wIGJ5IHRoZSBw
YXJzaW5nCisvLyBwcm9jZXNzLgorLy8KK2Jvb2wgVEludGVybWVkaWF0ZTo6cG9zdFByb2Nlc3Mo
VEludGVybU5vZGUqIHJvb3QpCit7CisgICAgaWYgKHJvb3QgPT0gMCkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICAvLworICAgIC8vIEZpcnN0LCBmaW5pc2ggb2ZmIHRoZSB0b3AgbGV2ZWwg
c2VxdWVuY2UsIGlmIGFueQorICAgIC8vCisgICAgVEludGVybUFnZ3JlZ2F0ZSogYWdnUm9vdCA9
IHJvb3QtPmdldEFzQWdncmVnYXRlKCk7CisgICAgaWYgKGFnZ1Jvb3QgJiYgYWdnUm9vdC0+Z2V0
T3AoKSA9PSBFT3BOdWxsKQorICAgICAgICBhZ2dSb290LT5zZXRPcChFT3BTZXF1ZW5jZSk7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8KKy8vIFRoaXMgZGVsZXRlcyB0aGUgdHJlZS4KKy8v
Cit2b2lkIFRJbnRlcm1lZGlhdGU6OnJlbW92ZShUSW50ZXJtTm9kZSogcm9vdCkKK3sKKyAgICBp
ZiAocm9vdCkKKyAgICAgICAgUmVtb3ZlQWxsVHJlZU5vZGVzKHJvb3QpOworfQorCisvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisvLworLy8gTWVtYmVyIGZ1bmN0aW9ucyBvZiB0aGUgbm9kZXMgdXNlZCBmb3IgYnVpbGRpbmcg
dGhlIHRyZWUuCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjZGVmaW5lIFJFUExBQ0VfSUZfSVMobm9kZSwgdHlw
ZSwgb3JpZ2luYWwsIHJlcGxhY2VtZW50KSBcCisgICAgaWYgKG5vZGUgPT0gb3JpZ2luYWwpIHsg
XAorICAgICAgICBub2RlID0gc3RhdGljX2Nhc3Q8dHlwZSAqPihyZXBsYWNlbWVudCk7IFwKKyAg
ICAgICAgcmV0dXJuIHRydWU7IFwKKyAgICB9CisKK2Jvb2wgVEludGVybUxvb3A6OnJlcGxhY2VD
aGlsZE5vZGUoCisgICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFj
ZW1lbnQpCit7CisgICAgUkVQTEFDRV9JRl9JUyhpbml0LCBUSW50ZXJtTm9kZSwgb3JpZ2luYWws
IHJlcGxhY2VtZW50KTsKKyAgICBSRVBMQUNFX0lGX0lTKGNvbmQsIFRJbnRlcm1UeXBlZCwgb3Jp
Z2luYWwsIHJlcGxhY2VtZW50KTsKKyAgICBSRVBMQUNFX0lGX0lTKGV4cHIsIFRJbnRlcm1UeXBl
ZCwgb3JpZ2luYWwsIHJlcGxhY2VtZW50KTsKKyAgICBSRVBMQUNFX0lGX0lTKGJvZHksIFRJbnRl
cm1Ob2RlLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBUSW50ZXJtQnJhbmNoOjpyZXBsYWNlQ2hpbGROb2RlKAorICAgIFRJbnRlcm1Ob2RlICpv
cmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KQoreworICAgIFJFUExBQ0VfSUZfSVMo
ZXhwcmVzc2lvbiwgVEludGVybVR5cGVkLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBUSW50ZXJtQmluYXJ5OjpyZXBsYWNlQ2hpbGROb2RlKAor
ICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KQorewor
ICAgIFJFUExBQ0VfSUZfSVMobGVmdCwgVEludGVybVR5cGVkLCBvcmlnaW5hbCwgcmVwbGFjZW1l
bnQpOworICAgIFJFUExBQ0VfSUZfSVMocmlnaHQsIFRJbnRlcm1UeXBlZCwgb3JpZ2luYWwsIHJl
cGxhY2VtZW50KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVEludGVybVVuYXJ5Ojpy
ZXBsYWNlQ2hpbGROb2RlKAorICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUg
KnJlcGxhY2VtZW50KQoreworICAgIFJFUExBQ0VfSUZfSVMob3BlcmFuZCwgVEludGVybVR5cGVk
LCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBU
SW50ZXJtQWdncmVnYXRlOjpyZXBsYWNlQ2hpbGROb2RlKAorICAgIFRJbnRlcm1Ob2RlICpvcmln
aW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KQoreworICAgIGZvciAoc2l6ZV90IGlpID0g
MDsgaWkgPCBzZXF1ZW5jZS5zaXplKCk7ICsraWkpCisgICAgeworICAgICAgICBSRVBMQUNFX0lG
X0lTKHNlcXVlbmNlW2lpXSwgVEludGVybU5vZGUsIG9yaWdpbmFsLCByZXBsYWNlbWVudCk7Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUSW50ZXJtU2VsZWN0aW9uOjpyZXBs
YWNlQ2hpbGROb2RlKAorICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJl
cGxhY2VtZW50KQoreworICAgIFJFUExBQ0VfSUZfSVMoY29uZGl0aW9uLCBUSW50ZXJtVHlwZWQs
IG9yaWdpbmFsLCByZXBsYWNlbWVudCk7CisgICAgUkVQTEFDRV9JRl9JUyh0cnVlQmxvY2ssIFRJ
bnRlcm1Ob2RlLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpOworICAgIFJFUExBQ0VfSUZfSVMoZmFs
c2VCbG9jaywgVEludGVybU5vZGUsIG9yaWdpbmFsLCByZXBsYWNlbWVudCk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCisvLworLy8gU2F5IHdoZXRoZXIgb3Igbm90IGFuIG9wZXJhdGlvbiBub2Rl
IGNoYW5nZXMgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuCisvLworYm9vbCBUSW50ZXJtT3BlcmF0
b3I6OmlzQXNzaWdubWVudCgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChvcCkgeworICAgICAgICBj
YXNlIEVPcFBvc3RJbmNyZW1lbnQ6CisgICAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDoKKyAg
ICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6CisgICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50
OgorICAgICAgICBjYXNlIEVPcEFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BBZGRBc3NpZ246Cisg
ICAgICAgIGNhc2UgRU9wU3ViQXNzaWduOgorICAgICAgICBjYXNlIEVPcE11bEFzc2lnbjoKKyAg
ICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BW
ZWN0b3JUaW1lc1NjYWxhckFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxh
ckFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjoKKyAgICAg
ICAgY2FzZSBFT3BEaXZBc3NpZ246CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKKy8vCisvLyBy
ZXR1cm5zIHRydWUgaWYgdGhlIG9wZXJhdG9yIGlzIGZvciBvbmUgb2YgdGhlIGNvbnN0cnVjdG9y
cworLy8KK2Jvb2wgVEludGVybU9wZXJhdG9yOjppc0NvbnN0cnVjdG9yKCkgY29uc3QKK3sKKyAg
ICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMjoKKyAgICAgICAg
Y2FzZSBFT3BDb25zdHJ1Y3RWZWMzOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzQ6Cisg
ICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MjoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RN
YXQzOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6CisgICAgICAgIGNhc2UgRU9wQ29u
c3RydWN0RmxvYXQ6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6CisgICAgICAgIGNh
c2UgRU9wQ29uc3RydWN0SVZlYzM6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzQ6Cisg
ICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJW
ZWMyOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMzOgorICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdEJWZWM0OgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6CisgICAgICAgIGNh
c2UgRU9wQ29uc3RydWN0U3RydWN0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCisvLworLy8g
TWFrZSBzdXJlIHRoZSB0eXBlIG9mIGEgdW5hcnkgb3BlcmF0b3IgaXMgYXBwcm9wcmlhdGUgZm9y
IGl0cworLy8gY29tYmluYXRpb24gb2Ygb3BlcmF0aW9uIGFuZCBvcGVyYW5kIHR5cGUuCisvLwor
Ly8gUmV0dXJucyBmYWxzZSBpbiBub3RoaW5nIG1ha2VzIHNlbnNlLgorLy8KK2Jvb2wgVEludGVy
bVVuYXJ5Ojpwcm9tb3RlKFRJbmZvU2luayYpCit7CisgICAgc3dpdGNoIChvcCkgeworICAgICAg
ICBjYXNlIEVPcExvZ2ljYWxOb3Q6CisgICAgICAgICAgICBpZiAob3BlcmFuZC0+Z2V0QmFzaWNU
eXBlKCkgIT0gRWJ0Qm9vbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZToKKyAgICAgICAgY2FzZSBFT3BQ
b3N0SW5jcmVtZW50OgorICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6CisgICAgICAgIGNh
c2UgRU9wUHJlSW5jcmVtZW50OgorICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDoKKyAgICAg
ICAgICAgIGlmIChvcGVyYW5kLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRCb29sKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAv
LyBvcGVyYXRvcnMgZm9yIGJ1aWx0LWlucyBhcmUgYWxyZWFkeSB0eXBlIGNoZWNrZWQgYWdhaW5z
dCB0aGVpciBwcm90b3R5cGUKKyAgICAgICAgY2FzZSBFT3BBbnk6CisgICAgICAgIGNhc2UgRU9w
QWxsOgorICAgICAgICBjYXNlIEVPcFZlY3RvckxvZ2ljYWxOb3Q6CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKG9wZXJhbmQtPmdl
dEJhc2ljVHlwZSgpICE9IEVidEZsb2F0KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBzZXRUeXBlKG9wZXJhbmQtPmdldFR5cGUoKSk7CisgICAgdHlwZS5zZXRR
dWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKKworICAgIHJldHVybiB0cnVlOworfQorCisvLworLy8g
RXN0YWJsaXNoZXMgdGhlIHR5cGUgb2YgdGhlIHJlc3VsdGFudCBvcGVyYXRpb24sIGFzIHdlbGwg
YXMKKy8vIG1ha2VzIHRoZSBvcGVyYXRvciB0aGUgY29ycmVjdCBvbmUgZm9yIHRoZSBvcGVyYW5k
cy4KKy8vCisvLyBSZXR1cm5zIGZhbHNlIGlmIG9wZXJhdG9yIGNhbid0IHdvcmsgb24gb3BlcmFu
ZHMuCisvLworYm9vbCBUSW50ZXJtQmluYXJ5Ojpwcm9tb3RlKFRJbmZvU2luayYgaW5mb1Npbmsp
Cit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBvbmx5IGhhbmRsZXMgc2NhbGFycywgdmVjdG9ycywg
YW5kIG1hdHJpY2VzLgorICAgIGlmIChsZWZ0LT5pc0FycmF5KCkgfHwgcmlnaHQtPmlzQXJyYXko
KSkgeworICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3Is
IGdldExpbmUoKSwgIkludmFsaWQgb3BlcmF0aW9uIGZvciBhcnJheXMiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIEdMU0wgRVMgMi4wIGRvZXMgbm90IHN1cHBvcnQg
aW1wbGljaXQgdHlwZSBjYXN0aW5nLgorICAgIC8vIFNvIHRoZSBiYXNpYyB0eXBlIHNob3VsZCBh
bHdheXMgbWF0Y2guCisgICAgaWYgKGxlZnQtPmdldEJhc2ljVHlwZSgpICE9IHJpZ2h0LT5nZXRC
YXNpY1R5cGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8KKyAgICAvLyBCYXNl
IGFzc3VtcHRpb246ICBqdXN0IG1ha2UgdGhlIHR5cGUgdGhlIHNhbWUgYXMgdGhlIGxlZnQKKyAg
ICAvLyBvcGVyYW5kLiAgVGhlbiBvbmx5IGRldmlhdGlvbnMgZnJvbSB0aGlzIG5lZWQgYmUgY29k
ZWQuCisgICAgLy8KKyAgICBzZXRUeXBlKGxlZnQtPmdldFR5cGUoKSk7CisKKyAgICAvLyBUaGUg
cmVzdWx0IGdldHMgcHJvbW90ZWQgdG8gdGhlIGhpZ2hlc3QgcHJlY2lzaW9uLgorICAgIFRQcmVj
aXNpb24gaGlnaGVyUHJlY2lzaW9uID0gR2V0SGlnaGVyUHJlY2lzaW9uKGxlZnQtPmdldFByZWNp
c2lvbigpLCByaWdodC0+Z2V0UHJlY2lzaW9uKCkpOworICAgIGdldFR5cGVQb2ludGVyKCktPnNl
dFByZWNpc2lvbihoaWdoZXJQcmVjaXNpb24pOworCisgICAgLy8gQmluYXJ5IG9wZXJhdGlvbnMg
cmVzdWx0cyBpbiB0ZW1wb3JhcnkgdmFyaWFibGVzIHVubGVzcyBib3RoCisgICAgLy8gb3BlcmFu
ZHMgYXJlIGNvbnN0LgorICAgIGlmIChsZWZ0LT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFDb25zdCB8
fCByaWdodC0+Z2V0UXVhbGlmaWVyKCkgIT0gRXZxQ29uc3QpIHsKKyAgICAgICAgZ2V0VHlwZVBv
aW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CisgICAgfQorCisgICAgaW50IHNp
emUgPSBzdGQ6Om1heChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpLCByaWdodC0+Z2V0Tm9taW5hbFNp
emUoKSk7CisKKyAgICAvLworICAgIC8vIEFsbCBzY2FsYXJzLiBDb2RlIGFmdGVyIHRoaXMgdGVz
dCBhc3N1bWVzIHRoaXMgY2FzZSBpcyByZW1vdmVkIQorICAgIC8vCisgICAgaWYgKHNpemUgPT0g
MSkgeworICAgICAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAg
Ly8gUHJvbW90ZSB0byBjb25kaXRpb25hbAorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIGNh
c2UgRU9wRXF1YWw6CisgICAgICAgICAgICBjYXNlIEVPcE5vdEVxdWFsOgorICAgICAgICAgICAg
Y2FzZSBFT3BMZXNzVGhhbjoKKyAgICAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46CisgICAg
ICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6CisgICAgICAgICAgICBjYXNlIEVPcEdyZWF0
ZXJUaGFuRXF1YWw6CisgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShFYnRCb29sLCBFYnBV
bmRlZmluZWQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgIC8vIEFuZCBhbmQgT3Igb3BlcmF0ZSBvbiBjb25kaXRpb25hbHMKKyAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6CisgICAgICAgICAgICBjYXNl
IEVPcExvZ2ljYWxPcjoKKyAgICAgICAgICAgICAgICAvLyBCb3RoIG9wZXJhbmRzIG11c3QgYmUg
b2YgdHlwZSBib29sLgorICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5nZXRCYXNpY1R5cGUoKSAh
PSBFYnRCb29sIHx8IHJpZ2h0LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShF
YnRCb29sLCBFYnBVbmRlZmluZWQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSByZWFjaCBoZXJlLCBhdCBsZWFz
dCBvbmUgb2YgdGhlIG9wZXJhbmRzIGlzIHZlY3RvciBvciBtYXRyaXguCisgICAgLy8gVGhlIG90
aGVyIG9wZXJhbmQgY291bGQgYmUgYSBzY2FsYXIsIHZlY3Rvciwgb3IgbWF0cml4LgorICAgIC8v
IEFyZSB0aGUgc2l6ZXMgY29tcGF0aWJsZT8KKyAgICAvLworICAgIGlmIChsZWZ0LT5nZXROb21p
bmFsU2l6ZSgpICE9IHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpKSB7CisgICAgICAgIC8vIElmIHRo
ZSBub21pbmFsIHNpemUgb2Ygb3BlcmFuZHMgZG8gbm90IG1hdGNoOgorICAgICAgICAvLyBPbmUg
b2YgdGhlbSBtdXN0IGJlIHNjYWxhci4KKyAgICAgICAgaWYgKGxlZnQtPmdldE5vbWluYWxTaXpl
KCkgIT0gMSAmJiByaWdodC0+Z2V0Tm9taW5hbFNpemUoKSAhPSAxKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAvLyBPcGVyYXRvciBjYW5ub3QgYmUgb2YgdHlwZSBwdXJlIGFz
c2lnbm1lbnQuCisgICAgICAgIGlmIChvcCA9PSBFT3BBc3NpZ24gfHwgb3AgPT0gRU9wSW5pdGlh
bGl6ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLworICAgIC8v
IENhbiB0aGVzZSB0d28gb3BlcmFuZHMgYmUgY29tYmluZWQ/CisgICAgLy8KKyAgICBUQmFzaWNU
eXBlIGJhc2ljVHlwZSA9IGxlZnQtPmdldEJhc2ljVHlwZSgpOworICAgIHN3aXRjaCAob3ApIHsK
KyAgICAgICAgY2FzZSBFT3BNdWw6CisgICAgICAgICAgICBpZiAoIWxlZnQtPmlzTWF0cml4KCkg
JiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobGVmdC0+aXNWZWN0
b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc01hdHJpeDsKKyAg
ICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhU
aW1lc1NjYWxhcjsKKyAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUs
IGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCB0cnVlKSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5pc01hdHJpeCgpICYmICFyaWdo
dC0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgICAgIGlmIChyaWdodC0+aXNWZWN0b3IoKSkg
eworICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzVmVjdG9yOworICAgICAg
ICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBF
dnFUZW1wb3JhcnksIHNpemUsIGZhbHNlKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc1NjYWxhcjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQt
PmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzTWF0cml4
OworICAgICAgICAgICAgfSBlbHNlIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlz
TWF0cml4KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobGVmdC0+aXNWZWN0b3IoKSAmJiByaWdo
dC0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBsZWF2ZSBhcyBjb21wb25l
bnQgcHJvZHVjdAorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNWZWN0b3IoKSB8
fCByaWdodC0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcFZlY3Rv
clRpbWVzU2NhbGFyOworICAgICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlw
ZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUsIGZhbHNlKSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbmZvU2lu
ay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIk1pc3Npbmcg
ZWxzZXMiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNdWxBc3NpZ246CisgICAgICAgICAg
ICBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAobGVmdC0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgb3AgPSBF
T3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAocmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIG9wID0gRU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ247CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5p
c01hdHJpeCgpKSB7CisgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc01hdHJpeEFz
c2lnbjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0
LT5pc01hdHJpeCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkgJiYg
cmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gbGVhdmUgYXMgY29t
cG9uZW50IHByb2R1Y3QKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzVmVjdG9y
KCkgfHwgcmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCEgbGVm
dC0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjsKKyAgICAg
ICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwg
RXZxVGVtcG9yYXJ5LCBzaXplLCBmYWxzZSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVm
aXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJNaXNzaW5nIGVsc2VzIik7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSBFT3BBc3NpZ246CisgICAgICAgIGNhc2UgRU9wSW5pdGlhbGl6ZToKKyAg
ICAgICAgY2FzZSBFT3BBZGQ6CisgICAgICAgIGNhc2UgRU9wU3ViOgorICAgICAgICBjYXNlIEVP
cERpdjoKKyAgICAgICAgY2FzZSBFT3BBZGRBc3NpZ246CisgICAgICAgIGNhc2UgRU9wU3ViQXNz
aWduOgorICAgICAgICBjYXNlIEVPcERpdkFzc2lnbjoKKyAgICAgICAgICAgIGlmICgobGVmdC0+
aXNNYXRyaXgoKSAmJiByaWdodC0+aXNWZWN0b3IoKSkgfHwKKyAgICAgICAgICAgICAgICAobGVm
dC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclBy
ZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCBsZWZ0LT5pc01hdHJpeCgpIHx8IHJpZ2h0LT5p
c01hdHJpeCgpKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcEVxdWFs
OgorICAgICAgICBjYXNlIEVPcE5vdEVxdWFsOgorICAgICAgICBjYXNlIEVPcExlc3NUaGFuOgor
ICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgorICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1
YWw6CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKKyAgICAgICAgICAgIGlmICgo
bGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNWZWN0b3IoKSkgfHwKKyAgICAgICAgICAgICAg
ICAobGVmdC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgc2V0VHlwZShUVHlwZShFYnRCb29sLCBFYnBV
bmRlZmluZWQpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQor
Citib29sIENvbXBhcmVTdHJ1Y3QoY29uc3QgVFR5cGUmIGxlZnROb2RlVHlwZSwgQ29uc3RhbnRV
bmlvbiogcmlnaHRVbmlvbkFycmF5LCBDb25zdGFudFVuaW9uKiBsZWZ0VW5pb25BcnJheSkKK3sK
KyAgICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSBsZWZ0Tm9kZVR5cGUuZ2V0U3RydWN0KCkt
PmZpZWxkcygpOworCisgICAgc2l6ZV90IHN0cnVjdFNpemUgPSBmaWVsZHMuc2l6ZSgpOworICAg
IHNpemVfdCBpbmRleCA9IDA7CisKKyAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHN0cnVjdFNp
emU7IGorKykgeworICAgICAgICBzaXplX3Qgc2l6ZSA9IGZpZWxkc1tqXS0+dHlwZSgpLT5nZXRP
YmplY3RTaXplKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7
CisgICAgICAgICAgICBpZiAoZmllbGRzW2pdLT50eXBlKCktPmdldEJhc2ljVHlwZSgpID09IEVi
dFN0cnVjdCkgeworICAgICAgICAgICAgICAgIGlmICghQ29tcGFyZVN0cnVjdHVyZSgqKGZpZWxk
c1tqXS0+dHlwZSgpKSwgJnJpZ2h0VW5pb25BcnJheVtpbmRleF0sICZsZWZ0VW5pb25BcnJheVtp
bmRleF0pKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChsZWZ0VW5pb25BcnJheVtpbmRleF0gIT0gcmln
aHRVbmlvbkFycmF5W2luZGV4XSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ29tcGFyZVN0cnVjdHVyZShjb25zdCBUVHlw
ZSYgbGVmdE5vZGVUeXBlLCBDb25zdGFudFVuaW9uKiByaWdodFVuaW9uQXJyYXksIENvbnN0YW50
VW5pb24qIGxlZnRVbmlvbkFycmF5KQoreworICAgIGlmIChsZWZ0Tm9kZVR5cGUuaXNBcnJheSgp
KSB7CisgICAgICAgIFRUeXBlIHR5cGVXaXRob3V0QXJyYXluZXNzID0gbGVmdE5vZGVUeXBlOwor
ICAgICAgICB0eXBlV2l0aG91dEFycmF5bmVzcy5jbGVhckFycmF5bmVzcygpOworCisgICAgICAg
IHNpemVfdCBhcnJheVNpemUgPSBsZWZ0Tm9kZVR5cGUuZ2V0QXJyYXlTaXplKCk7CisKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheVNpemU7ICsraSkgeworICAgICAgICAgICAg
c2l6ZV90IG9mZnNldCA9IHR5cGVXaXRob3V0QXJyYXluZXNzLmdldE9iamVjdFNpemUoKSAqIGk7
CisgICAgICAgICAgICBpZiAoIUNvbXBhcmVTdHJ1Y3QodHlwZVdpdGhvdXRBcnJheW5lc3MsICZy
aWdodFVuaW9uQXJyYXlbb2Zmc2V0XSwgJmxlZnRVbmlvbkFycmF5W29mZnNldF0pKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBy
ZXR1cm4gQ29tcGFyZVN0cnVjdChsZWZ0Tm9kZVR5cGUsIHJpZ2h0VW5pb25BcnJheSwgbGVmdFVu
aW9uQXJyYXkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vCisvLyBUaGUgZm9sZCBmdW5j
dGlvbnMgc2VlIGlmIGFuIG9wZXJhdGlvbiBvbiBhIGNvbnN0YW50IGNhbiBiZSBkb25lIGluIHBs
YWNlLAorLy8gd2l0aG91dCBnZW5lcmF0aW5nIHJ1bi10aW1lIGNvZGUuCisvLworLy8gUmV0dXJu
cyB0aGUgbm9kZSB0byBrZWVwIHVzaW5nLCB3aGljaCBtYXkgb3IgbWF5IG5vdCBiZSB0aGUgbm9k
ZSBwYXNzZWQgaW4uCisvLworCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1Db25zdGFudFVuaW9uOjpm
b2xkKFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBjb25zdGFudE5vZGUsIFRJbmZvU2luayYg
aW5mb1NpbmspCit7CisgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IGdldFVuaW9uQXJy
YXlQb2ludGVyKCk7CisgICAgc2l6ZV90IG9iamVjdFNpemUgPSBnZXRUeXBlKCkuZ2V0T2JqZWN0
U2l6ZSgpOworCisgICAgaWYgKGNvbnN0YW50Tm9kZSkgeyAgLy8gYmluYXJ5IG9wZXJhdGlvbnMK
KyAgICAgICAgVEludGVybUNvbnN0YW50VW5pb24gKm5vZGUgPSBjb25zdGFudE5vZGUtPmdldEFz
Q29uc3RhbnRVbmlvbigpOworICAgICAgICBDb25zdGFudFVuaW9uICpyaWdodFVuaW9uQXJyYXkg
PSBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOworICAgICAgICBUVHlwZSByZXR1cm5UeXBl
ID0gZ2V0VHlwZSgpOworCisgICAgICAgIC8vIGZvciBhIGNhc2UgbGlrZSBmbG9hdCBmID0gMS4y
ICsgdmVjNCgyLDMsNCw1KTsKKyAgICAgICAgaWYgKGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdl
dE9iamVjdFNpemUoKSA9PSAxICYmIG9iamVjdFNpemUgPiAxKSB7CisgICAgICAgICAgICByaWdo
dFVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKKyAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgKytpKQorICAgICAgICAgICAgICAg
IHJpZ2h0VW5pb25BcnJheVtpXSA9ICpub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOworICAg
ICAgICAgICAgcmV0dXJuVHlwZSA9IGdldFR5cGUoKTsKKyAgICAgICAgfSBlbHNlIGlmIChjb25z
dGFudE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCkgPiAxICYmIG9iamVjdFNpemUgPT0g
MSkgeworICAgICAgICAgICAgLy8gZm9yIGEgY2FzZSBsaWtlIGZsb2F0IGYgPSB2ZWM0KDIsMyw0
LDUpICsgMS4yOworICAgICAgICAgICAgdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW2Nv
bnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKV07CisgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUo
KTsgKytpKQorICAgICAgICAgICAgICAgIHVuaW9uQXJyYXlbaV0gPSAqZ2V0VW5pb25BcnJheVBv
aW50ZXIoKTsKKyAgICAgICAgICAgIHJldHVyblR5cGUgPSBub2RlLT5nZXRUeXBlKCk7CisgICAg
ICAgICAgICBvYmplY3RTaXplID0gY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6
ZSgpOworICAgICAgICB9CisKKyAgICAgICAgQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0QXJyYXkg
PSAwOworICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqdGVtcE5vZGU7CisKKyAgICAgICAg
Ym9vbCBib29sTm9kZUZsYWcgPSBmYWxzZTsKKyAgICAgICAgc3dpdGNoKG9wKSB7CisgICAgICAg
ICAgICBjYXNlIEVPcEFkZDoKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBD
b25zdGFudFVuaW9uW29iamVjdFNpemVdOworICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1T
VkMrKzYuMAorICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVj
dFNpemU7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0g
dW5pb25BcnJheVtpXSArIHJpZ2h0VW5pb25BcnJheVtpXTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVPcFN1YjoKKyAgICAgICAg
ICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwor
ICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAorICAgICAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSAtIHJpZ2h0VW5pb25B
cnJheVtpXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgIGNhc2UgRU9wTXVsOgorICAgICAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1Nj
YWxhcjoKKyAgICAgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXI6CisgICAgICAgICAg
ICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKKyAg
ICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKKyAgICAgICAgICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAg
ICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gKiByaWdodFVuaW9uQXJy
YXlbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeDoKKyAgICAgICAgICAgICAgICBpZiAoZ2V0
VHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidEZsb2F0IHx8IG5vZGUtPmdldEJhc2ljVHlwZSgp
ICE9IEVidEZsb2F0KSB7CisgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2Fn
ZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiQ29uc3RhbnQgRm9sZGluZyBjYW5u
b3QgYmUgZG9uZSBmb3IgbWF0cml4IG11bHRpcGx5Iik7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBN
U1ZDKys2LjAKKyAgICAgICAgICAgICAgICAgICAgaW50IHNpemUgPSBnZXROb21pbmFsU2l6ZSgp
OworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
W3NpemUqc2l6ZV07CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8
IHNpemU7IHJvdysrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2x1bW4g
PSAwOyBjb2x1bW4gPCBzaXplOyBjb2x1bW4rKykgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRlbXBDb25zdEFycmF5W3NpemUgKiBjb2x1bW4gKyByb3ddLnNldEZDb25zdCgwLjBmKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkr
KykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtzaXpl
ICogY29sdW1uICsgcm93XS5zZXRGQ29uc3QodGVtcENvbnN0QXJyYXlbc2l6ZSAqIGNvbHVtbiAr
IHJvd10uZ2V0RkNvbnN0KCkgKyB1bmlvbkFycmF5W2kgKiBzaXplICsgcm93XS5nZXRGQ29uc3Qo
KSAqIChyaWdodFVuaW9uQXJyYXlbY29sdW1uICogc2l6ZSArIGldLmdldEZDb25zdCgpKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBFT3BEaXY6CisgICAgICAgICAgICAgICAgdGVtcENv
bnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKKyAgICAgICAgICAgICAg
ICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3
aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEVidEZs
b2F0OgorICAgICAgICAgICAgICAgIGlmIChyaWdodFVuaW9uQXJyYXlbaV0gPT0gMC4wZikgewor
ICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeFdhcm5pbmcs
IGdldExpbmUoKSwgIkRpdmlkZSBieSB6ZXJvIGVycm9yIGR1cmluZyBjb25zdGFudCBmb2xkaW5n
Iik7CisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCh1bmlv
bkFycmF5W2ldLmdldEZDb25zdCgpIDwgMCA/IC1GTFRfTUFYIDogRkxUX01BWCk7CisgICAgICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNl
dEZDb25zdCh1bmlvbkFycmF5W2ldLmdldEZDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdl
dEZDb25zdCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBF
YnRJbnQ6CisgICAgICAgICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtpXSA9PSAwKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywg
Z2V0TGluZSgpLCAiRGl2aWRlIGJ5IHplcm8gZXJyb3IgZHVyaW5nIGNvbnN0YW50IGZvbGRpbmci
KTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0SUNvbnN0KElOVF9N
QVgpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheVtpXS5zZXRJQ29uc3QodW5pb25BcnJheVtpXS5nZXRJQ29uc3QoKSAvIHJpZ2h0VW5p
b25BcnJheVtpXS5nZXRJQ29uc3QoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiQ29uc3RhbnQgZm9sZGluZyBjYW5ub3QgYmUg
ZG9uZSBmb3IgXCIvXCIiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1l
c1ZlY3RvcjoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0
RmxvYXQpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVm
aXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJDb25zdGFudCBGb2xkaW5nIGNhbm5vdCBiZSBk
b25lIGZvciBtYXRyaXggdGltZXMgdmVjdG9yIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9
IG5ldyBDb25zdGFudFVuaW9uW2dldE5vbWluYWxTaXplKCldOworCisgICAgICAgICAgICAgICAg
ey8vIHN1cHBvcnQgTVNWQysrNi4wCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHNpemUg
PSBnZXROb21pbmFsU2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KDAuMGYpOworICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzaXplOyBqKyspIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QodGVtcENvbnN0
QXJyYXlbaV0uZ2V0RkNvbnN0KCkgKyAoKHVuaW9uQXJyYXlbaipzaXplICsgaV0uZ2V0RkNvbnN0
KCkpICogcmlnaHRVbmlvbkFycmF5W2pdLmdldEZDb25zdCgpKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29u
c3RBcnJheSwgbm9kZS0+Z2V0VHlwZSgpKTsKKyAgICAgICAgICAgICAgICB0ZW1wTm9kZS0+c2V0
TGluZShnZXRMaW5lKCkpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOworCisg
ICAgICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4OgorICAgICAgICAgICAgICAgIGlm
IChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5l
KCksICJDb25zdGFudCBGb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciB2ZWN0b3IgdGltZXMgbWF0
cml4Iik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bZ2V0
Tm9taW5hbFNpemUoKV07CisgICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCisg
ICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHNpemUgPSBnZXROb21pbmFsU2l6ZSgpLCBpID0g
MDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXlbaV0uc2V0RkNvbnN0KDAuMGYpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQg
aiA9IDA7IGogPCBzaXplOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1w
Q29uc3RBcnJheVtpXS5zZXRGQ29uc3QodGVtcENvbnN0QXJyYXlbaV0uZ2V0RkNvbnN0KCkgKyAo
KHVuaW9uQXJyYXlbal0uZ2V0RkNvbnN0KCkpICogcmlnaHRVbmlvbkFycmF5W2kqc2l6ZSArIGpd
LmdldEZDb25zdCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9y
IHBvc3NpYmxlIGZ1dHVyZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkKKyAg
ICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNp
emVdOworICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAorICAgICAgICAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSAmJiByaWdo
dFVuaW9uQXJyYXlbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjogLy8gdGhpcyBjb2RlIGlzIHdyaXR0
ZW4gZm9yIHBvc3NpYmxlIGZ1dHVyZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50
bHkKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29i
amVjdFNpemVdOworICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAorICAgICAg
ICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSB8
fCByaWdodFVuaW9uQXJyYXlbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6CisgICAgICAgICAgICAg
ICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKKyAgICAg
ICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKKyAgICAgICAgICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgY2Fz
ZSBFYnRCb29sOiB0ZW1wQ29uc3RBcnJheVtpXS5zZXRCQ29uc3QoKHVuaW9uQXJyYXlbaV0gPT0g
cmlnaHRVbmlvbkFycmF5W2ldKSA/IGZhbHNlIDogdHJ1ZSk7IGJyZWFrOworICAgICAgICAgICAg
ZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjoKKyAgICAgICAgICAgICAgICBhc3NlcnQob2Jq
ZWN0U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3Qo
KnVuaW9uQXJyYXkgPCAqcmlnaHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAgICAgICByZXR1cm5U
eXBlID0gVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgorICAgICAgICAg
ICAgICAgIGFzc2VydChvYmplY3RTaXplID09IDEpOworICAgICAgICAgICAgICAgIHRlbXBDb25z
dEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXktPnNldEJDb25zdCgqdW5pb25BcnJheSA+ICpyaWdodFVuaW9uQXJyYXkpOworICAgICAg
ICAgICAgICAgIHJldHVyblR5cGUgPSBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNv
bnN0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRU9wTGVzc1Ro
YW5FcXVhbDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChv
YmplY3RTaXplID09IDEpOworICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uIGNvbnN0
YW50OworICAgICAgICAgICAgICAgICAgICBjb25zdGFudC5zZXRCQ29uc3QoKnVuaW9uQXJyYXkg
PiAqcmlnaHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkg
PSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXktPnNldEJDb25zdCghY29uc3RhbnQuZ2V0QkNvbnN0KCkpOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm5UeXBlID0gVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGFzc2VydChvYmplY3RTaXplID09IDEpOworICAgICAgICAgICAgICAgICAgICBD
b25zdGFudFVuaW9uIGNvbnN0YW50OworICAgICAgICAgICAgICAgICAgICBjb25zdGFudC5zZXRC
Q29uc3QoKnVuaW9uQXJyYXkgPCAqcmlnaHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAgICAgICAg
ICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAg
ICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCghY29uc3RhbnQuZ2V0QkNvbnN0KCkpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZp
bmVkLCBFdnFDb25zdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgY2FzZSBFT3BFcXVhbDoKKyAgICAgICAgICAgICAgICBpZiAo
Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoIUNvbXBhcmVTdHJ1Y3R1cmUobm9kZS0+Z2V0VHlwZSgpLCBub2RlLT5nZXRVbmlv
bkFycmF5UG9pbnRlcigpLCB1bmlvbkFycmF5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2xOb2RlRmxhZyA9IHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh1bmlvbkFycmF5W2ldICE9IHJpZ2h0VW5pb25BcnJheVtp
XSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAvLyBicmVhayBvdXQgb2YgZm9yIGxv
b3AKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgaWYgKCFib29sTm9kZUZsYWcpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCh0cnVlKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBD
b25zdEFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSk7CisgICAg
ICAgICAgICAgICAgdGVtcE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKKworICAgICAgICAgICAg
ICAgIHJldHVybiB0ZW1wTm9kZTsKKworICAgICAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKKyAg
ICAgICAgICAgICAgICBpZiAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoQ29tcGFyZVN0cnVjdHVyZShub2RlLT5nZXRUeXBl
KCksIG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCksIHVuaW9uQXJyYXkpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbE5vZGVGbGFnID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNp
emU7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaW9uQXJyYXlbaV0gPT0g
cmlnaHRVbmlvbkFycmF5W2ldKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbE5v
ZGVGbGFnID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgIC8vIGJy
ZWFrIG91dCBvZiBmb3IgbG9vcAorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdGVtcENv
bnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICBpZiAoIWJv
b2xOb2RlRmxhZykgeworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNv
bnN0KHRydWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdGVtcE5vZGUgPSBuZXcgVEludGVybUNv
bnN0YW50VW5pb24odGVtcENvbnN0QXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwg
RXZxQ29uc3QpKTsKKyAgICAgICAgICAgICAgICB0ZW1wTm9kZS0+c2V0TGluZShnZXRMaW5lKCkp
OworCisgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOworCisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJu
YWxFcnJvciwgZ2V0TGluZSgpLCAiSW52YWxpZCBvcGVyYXRvciBmb3IgY29uc3RhbnQgZm9sZGlu
ZyIpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHRlbXBO
b2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCByZXR1cm5UeXBl
KTsKKyAgICAgICAgdGVtcE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKKworICAgICAgICByZXR1
cm4gdGVtcE5vZGU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRG8gdW5h
cnkgb3BlcmF0aW9ucworICAgICAgICAvLworICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAq
bmV3Tm9kZSA9IDA7CisgICAgICAgIENvbnN0YW50VW5pb24qIHRlbXBDb25zdEFycmF5ID0gbmV3
IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgb2JqZWN0U2l6ZTsgaSsrKSB7CisgICAgICAgICAgICBzd2l0Y2gob3ApIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIEVPcE5lZ2F0aXZlOgorICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdl
dFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBF
YnRGbG9hdDogdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KC11bmlvbkFycmF5W2ldLmdldEZD
b25zdCgpKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDogICB0
ZW1wQ29uc3RBcnJheVtpXS5zZXRJQ29uc3QoLXVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkpOyBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBn
ZXRMaW5lKCksICJVbmFyeSBvcGVyYXRpb24gbm90IGZvbGRlZCBpbnRvIGNvbnN0YW50Iik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBFT3BM
b2dpY2FsTm90OiAvLyB0aGlzIGNvZGUgaXMgd3JpdHRlbiBmb3IgcG9zc2libGUgZnV0dXJlIHVz
ZSwgd2lsbCBub3QgZ2V0IGV4ZWN1dGVkIGN1cnJlbnRseQorICAgICAgICAgICAgICAgICAgICBz
d2l0Y2ggKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBFYnRCb29sOiAgdGVtcENvbnN0QXJyYXlbaV0uc2V0QkNvbnN0KCF1bmlvbkFycmF5
W2ldLmdldEJDb25zdCgpKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiVW5hcnkgb3BlcmF0aW9uIG5vdCBmb2xkZWQg
aW50byBjb25zdGFudCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIG5ld05vZGUgPSBuZXcgVEludGVybUNvbnN0YW50
VW5pb24odGVtcENvbnN0QXJyYXksIGdldFR5cGUoKSk7CisgICAgICAgIG5ld05vZGUtPnNldExp
bmUoZ2V0TGluZSgpKTsKKyAgICAgICAgcmV0dXJuIG5ld05vZGU7CisgICAgfQorfQorCitUSW50
ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OnByb21vdGVDb25zdGFudFVuaW9uKFRCYXNpY1R5cGUg
cHJvbW90ZVRvLCBUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSkKK3sKKyAgICBzaXplX3Qgc2l6
ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CisKKyAgICBDb25zdGFudFVuaW9u
ICpsZWZ0VW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW3NpemVdOworCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKworICAgICAgICBzd2l0Y2ggKHByb21vdGVU
bykgeworICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICBj
YXNlIEVidEludDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNl
dEZDb25zdChzdGF0aWNfY2FzdDxmbG9hdD4obm9kZS0+Z2V0SUNvbnN0KGkpKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29s
OgorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0RkNvbnN0KHN0
YXRpY19jYXN0PGZsb2F0Pihub2RlLT5nZXRCQ29uc3QoaSkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAg
ICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0RkNvbnN0KHN0YXRpY19jYXN0
PGZsb2F0Pihub2RlLT5nZXRGQ29uc3QoaSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAg
ICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRM
aW5lKCksICJDYW5ub3QgcHJvbW90ZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRUeXBlKCku
Z2V0QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAg
ICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRJQ29uc3Qoc3RhdGljX2Nh
c3Q8aW50Pihub2RlLT5nZXRJQ29uc3QoaSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAgICAgICAg
ICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRJQ29uc3Qoc3RhdGljX2Nhc3Q8aW50Pihub2Rl
LT5nZXRCQ29uc3QoaSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgICAgICAgICAgICAgbGVm
dFVuaW9uQXJyYXlbaV0uc2V0SUNvbnN0KHN0YXRpY19jYXN0PGludD4obm9kZS0+Z2V0RkNvbnN0
KGkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2Fn
ZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQ2Fubm90IHByb21vdGUi
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgeworICAg
ICAgICAgICAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxl
ZnRVbmlvbkFycmF5W2ldLnNldEJDb25zdChub2RlLT5nZXRJQ29uc3QoaSkgIT0gMCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRC
b29sOgorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0QkNvbnN0
KG5vZGUtPmdldEJDb25zdChpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAgICAgICAgICAg
IGxlZnRVbmlvbkFycmF5W2ldLnNldEJDb25zdChub2RlLT5nZXRGQ29uc3QoaSkgIT0gMC4wZik7
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQ2Fubm90IHByb21vdGUiKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdldExp
bmUoKSwgIkluY29ycmVjdCBkYXRhIHR5cGUgZm91bmQiKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgfQorCisgICAgfQorCisgICAgY29uc3QgVFR5cGUmIHQgPSBub2RlLT5n
ZXRUeXBlKCk7CisKKyAgICByZXR1cm4gYWRkQ29uc3RhbnRVbmlvbihsZWZ0VW5pb25BcnJheSwg
VFR5cGUocHJvbW90ZVRvLCB0LmdldFByZWNpc2lvbigpLCB0LmdldFF1YWxpZmllcigpLCB0Lmdl
dE5vbWluYWxTaXplKCksIHQuaXNNYXRyaXgoKSwgdC5pc0FycmF5KCkpLCBub2RlLT5nZXRMaW5l
KCkpOworfQorCisvLyBzdGF0aWMKK1RTdHJpbmcgVEludGVybVRyYXZlcnNlcjo6aGFzaChjb25z
dCBUU3RyaW5nJiBuYW1lLCBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbikKK3sKKyAgICBp
ZiAoaGFzaEZ1bmN0aW9uID09IE5VTEwgfHwgbmFtZS5lbXB0eSgpKQorICAgICAgICByZXR1cm4g
bmFtZTsKKyAgICBraHJvbm9zX3VpbnQ2NF90IG51bWJlciA9ICgqaGFzaEZ1bmN0aW9uKShuYW1l
LmNfc3RyKCksIG5hbWUubGVuZ3RoKCkpOworICAgIFRTdHJpbmdTdHJlYW0gc3RyZWFtOworICAg
IHN0cmVhbSA8PCBIQVNIRURfTkFNRV9QUkVGSVggPDwgc3RkOjpoZXggPDwgbnVtYmVyOworICAg
IFRTdHJpbmcgaGFzaGVkTmFtZSA9IHN0cmVhbS5zdHIoKTsKKyAgICByZXR1cm4gaGFzaGVkTmFt
ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL01NYXAuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL01NYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMzA4NjcxNTE0Y2M2M2U4ZTcwYTAzZTM4Njhi
NTc5NTFiODVlOTg3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTU1hcC5oCkBAIC0wLDAgKzEsNTYgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpZm5kZWYgX01NQVBfSU5DTFVERURfCisjZGVmaW5lIF9NTUFQX0lOQ0xV
REVEXworCisvLworLy8gRW5jYXBzdWxhdGUgbWVtb3J5IG1hcHBlZCBmaWxlcworLy8KKworY2xh
c3MgVE1NYXAgeworcHVibGljOgorICAgIFRNTWFwKGNvbnN0IGNoYXIqIGZpbGVOYW1lKSA6IAor
ICAgICAgICBmU2l6ZSgtMSksIC8vIC0xIGlzIHRoZSBlcnJvciB2YWx1ZSByZXR1cm5lZCBieSBH
ZXRGaWxlU2l6ZSgpCisgICAgICAgIGZwKE5VTEwpLAorICAgICAgICBmQnVmZigwKSAgIC8vIDAg
aXMgdGhlIGVycm9yIHZhbHVlIHJldHVybmVkIGJ5IE1hcFZpZXdPZkZpbGUoKQorICAgIHsKKyAg
ICAgICAgaWYgKChmcCA9IGZvcGVuKGZpbGVOYW1lLCAiciIpKSA9PSBOVUxMKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBjaGFyIGMgPSBnZXRjKGZwKTsKKyAgICAgICAgZlNpemUgPSAw
OworICAgICAgICB3aGlsZSAoYyAhPSBFT0YpIHsKKyAgICAgICAgICAgIGZTaXplKys7CisgICAg
ICAgICAgICBjID0gZ2V0YyhmcCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGMgPT0gRU9GKQor
ICAgICAgICAgICAgZlNpemUrKzsKKyAgICAgICAgcmV3aW5kKGZwKTsKKyAgICAgICAgZkJ1ZmYg
PSAoY2hhciopbWFsbG9jKHNpemVvZihjaGFyKSAqIGZTaXplKTsKKyAgICAgICAgaW50IGNvdW50
ID0gMDsKKyAgICAgICAgYyA9IGdldGMoZnApOworICAgICAgICB3aGlsZSAoYyAhPSBFT0YpIHsK
KyAgICAgICAgICAgIGZCdWZmW2NvdW50KytdID0gYzsKKyAgICAgICAgICAgIGMgPSBnZXRjKGZw
KTsKKyAgICAgICAgfQorICAgICAgICBmQnVmZltjb3VudCsrXSA9IGM7CisgICAgfQorCisgICAg
Y2hhciogZ2V0RGF0YSgpIHsgcmV0dXJuIGZCdWZmOyB9CisgICAgaW50ICAgZ2V0U2l6ZSgpIHsg
cmV0dXJuIGZTaXplOyB9CisKKyAgICB+VE1NYXAoKSB7CisgICAgICAgIGlmIChmcCAhPSBOVUxM
KQorICAgICAgICAgICAgZmNsb3NlKGZwKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIGlu
dCAgICAgICAgICAgICBmU2l6ZTsgICAgICAvLyBzaXplIG9mIGZpbGUgdG8gbWFwIGluCisgICAg
RklMRSAqZnA7CisgICAgY2hhciogICAgICAgICAgIGZCdWZmOyAgICAgIC8vIHRoZSBhY3R1YWwg
ZGF0YTsKK307CisKKyNlbmRpZiAvLyBfTU1BUF9JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL01hcExvbmdWYXJpYWJs
ZU5hbWVzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZjYyOWMyNmIxYTQ2NDU4
MGM4ZTJiM2RlODBkNzI0NGMwZDUzMjljCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMu
Y3BwCkBAIC0wLDAgKzEsMTE1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5oIgorCituYW1lc3BhY2Ugewor
CitUU3RyaW5nIG1hcExvbmdOYW1lKHNpemVfdCBpZCwgY29uc3QgVFN0cmluZyYgbmFtZSwgYm9v
bCBpc0dsb2JhbCkKK3sKKyAgICBBU1NFUlQobmFtZS5zaXplKCkgPiBNQVhfU0hPUlRFTkVEX0lE
RU5USUZJRVJfU0laRSk7CisgICAgVFN0cmluZ1N0cmVhbSBzdHJlYW07CisgICAgc3RyZWFtIDw8
ICJ3ZWJnbF8iOworICAgIGlmIChpc0dsb2JhbCkKKyAgICAgICAgc3RyZWFtIDw8ICJnIjsKKyAg
ICBzdHJlYW0gPDwgaWQ7CisgICAgaWYgKG5hbWVbMF0gIT0gJ18nKQorICAgICAgICBzdHJlYW0g
PDwgIl8iOworICAgIHN0cmVhbSA8PCBuYW1lLnN1YnN0cigwLCBNQVhfU0hPUlRFTkVEX0lERU5U
SUZJRVJfU0laRSAtIHN0cmVhbS5zdHIoKS5zaXplKCkpOworICAgIHJldHVybiBzdHJlYW0uc3Ry
KCk7Cit9CisKK0xvbmdOYW1lTWFwKiBnTG9uZ05hbWVNYXBJbnN0YW5jZSA9IE5VTEw7CisKK30g
IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworTG9uZ05hbWVNYXA6OkxvbmdOYW1lTWFwKCkKKyAg
ICA6IHJlZkNvdW50KDApCit7Cit9CisKK0xvbmdOYW1lTWFwOjp+TG9uZ05hbWVNYXAoKQorewor
fQorCisvLyBzdGF0aWMKK0xvbmdOYW1lTWFwKiBMb25nTmFtZU1hcDo6R2V0SW5zdGFuY2UoKQor
eworICAgIGlmIChnTG9uZ05hbWVNYXBJbnN0YW5jZSA9PSBOVUxMKQorICAgICAgICBnTG9uZ05h
bWVNYXBJbnN0YW5jZSA9IG5ldyBMb25nTmFtZU1hcDsKKyAgICBnTG9uZ05hbWVNYXBJbnN0YW5j
ZS0+cmVmQ291bnQrKzsKKyAgICByZXR1cm4gZ0xvbmdOYW1lTWFwSW5zdGFuY2U7Cit9CisKK3Zv
aWQgTG9uZ05hbWVNYXA6OlJlbGVhc2UoKQoreworICAgIEFTU0VSVChnTG9uZ05hbWVNYXBJbnN0
YW5jZSA9PSB0aGlzKTsKKyAgICBBU1NFUlQocmVmQ291bnQgPiAwKTsKKyAgICByZWZDb3VudC0t
OworICAgIGlmIChyZWZDb3VudCA9PSAwKSB7CisgICAgICAgIGRlbGV0ZSBnTG9uZ05hbWVNYXBJ
bnN0YW5jZTsKKyAgICAgICAgZ0xvbmdOYW1lTWFwSW5zdGFuY2UgPSBOVUxMOworICAgIH0KK30K
KworY29uc3QgY2hhciogTG9uZ05hbWVNYXA6OkZpbmQoY29uc3QgY2hhciogb3JpZ2luYWxOYW1l
KSBjb25zdAoreworICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbUxvbmdOYW1lTWFwLmZpbmQoCisgICAgICAgIG9yaWdpbmFsTmFtZSk7
CisgICAgaWYgKGl0ICE9IG1Mb25nTmFtZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuICgqaXQp
LnNlY29uZC5jX3N0cigpOworICAgIHJldHVybiBOVUxMOworfQorCit2b2lkIExvbmdOYW1lTWFw
OjpJbnNlcnQoY29uc3QgY2hhciogb3JpZ2luYWxOYW1lLCBjb25zdCBjaGFyKiBtYXBwZWROYW1l
KQoreworICAgIG1Mb25nTmFtZU1hcC5pbnNlcnQoc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6
c3RyaW5nPjo6dmFsdWVfdHlwZSgKKyAgICAgICAgb3JpZ2luYWxOYW1lLCBtYXBwZWROYW1lKSk7
Cit9CisKK3NpemVfdCBMb25nTmFtZU1hcDo6U2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1M
b25nTmFtZU1hcC5zaXplKCk7Cit9CisKK01hcExvbmdWYXJpYWJsZU5hbWVzOjpNYXBMb25nVmFy
aWFibGVOYW1lcyhMb25nTmFtZU1hcCogZ2xvYmFsTWFwKQoreworICAgIEFTU0VSVChnbG9iYWxN
YXApOworICAgIG1HbG9iYWxNYXAgPSBnbG9iYWxNYXA7Cit9CisKK3ZvaWQgTWFwTG9uZ1Zhcmlh
YmxlTmFtZXM6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCkKK3sKKyAgICBBU1NF
UlQoc3ltYm9sICE9IE5VTEwpOworICAgIGlmIChzeW1ib2wtPmdldFN5bWJvbCgpLnNpemUoKSA+
IE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFKSB7CisgICAgICAgIHN3aXRjaCAoc3ltYm9s
LT5nZXRRdWFsaWZpZXIoKSkgeworICAgICAgICAgIGNhc2UgRXZxVmFyeWluZ0luOgorICAgICAg
ICAgIGNhc2UgRXZxVmFyeWluZ091dDoKKyAgICAgICAgICBjYXNlIEV2cUludmFyaWFudFZhcnlp
bmdJbjoKKyAgICAgICAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdPdXQ6CisgICAgICAgICAg
Y2FzZSBFdnFVbmlmb3JtOgorICAgICAgICAgICAgc3ltYm9sLT5zZXRTeW1ib2woCisgICAgICAg
ICAgICAgICAgbWFwR2xvYmFsTG9uZ05hbWUoc3ltYm9sLT5nZXRTeW1ib2woKSkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHN5bWJvbC0+c2V0
U3ltYm9sKAorICAgICAgICAgICAgICAgIG1hcExvbmdOYW1lKHN5bWJvbC0+Z2V0SWQoKSwgc3lt
Ym9sLT5nZXRTeW1ib2woKSwgZmFsc2UpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
OworICAgIH0KK30KKworVFN0cmluZyBNYXBMb25nVmFyaWFibGVOYW1lczo6bWFwR2xvYmFsTG9u
Z05hbWUoY29uc3QgVFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NFUlQobUdsb2JhbE1hcCk7Cisg
ICAgY29uc3QgY2hhciogbWFwcGVkTmFtZSA9IG1HbG9iYWxNYXAtPkZpbmQobmFtZS5jX3N0cigp
KTsKKyAgICBpZiAobWFwcGVkTmFtZSAhPSBOVUxMKQorICAgICAgICByZXR1cm4gbWFwcGVkTmFt
ZTsKKyAgICBzaXplX3QgaWQgPSBtR2xvYmFsTWFwLT5TaXplKCk7CisgICAgVFN0cmluZyBydCA9
IG1hcExvbmdOYW1lKGlkLCBuYW1lLCB0cnVlKTsKKyAgICBtR2xvYmFsTWFwLT5JbnNlcnQobmFt
ZS5jX3N0cigpLCBydC5jX3N0cigpKTsKKyAgICByZXR1cm4gcnQ7Cit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9NYXBMb25nVmFy
aWFibGVOYW1lcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYjA4NWEzNjg3N2IwMTA1
NjA1NGRhMmQxMmU0NDAwZjgyOWVhMzllCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMu
aApAQCAtMCwwICsxLDU4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVS
X01BUF9MT05HX1ZBUklBQkxFX05BTUVTX0hfCisjZGVmaW5lIENPTVBJTEVSX01BUF9MT05HX1ZB
UklBQkxFX05BTUVTX0hfCisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZUluZm8uaCIKKworLy8gVGhpcyBzaXplIGRvZXMgbm90
IGluY2x1ZGUgJ1wwJyBpbiB0aGUgZW5kLgorI2RlZmluZSBNQVhfU0hPUlRFTkVEX0lERU5USUZJ
RVJfU0laRSAzMgorCisvLyBUaGlzIGlzIGEgcmVmLWNvdW50ZWQgc2luZ2xldG9uLiBHZXRJbnN0
YW5jZSgpIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZQorLy8gc2luZ2xldG9uLCBhbmQgYWZ0ZXIg
dXNlLCBjYWxsIFJlbGVhc2UoKS4gR2V0SW5zdGFuY2UoKSBhbmQgUmVsZWFzZSgpIHNob3VsZAor
Ly8gYmUgcGFpcmVkLgorY2xhc3MgTG9uZ05hbWVNYXAgeworcHVibGljOgorICAgIHN0YXRpYyBM
b25nTmFtZU1hcCogR2V0SW5zdGFuY2UoKTsKKyAgICB2b2lkIFJlbGVhc2UoKTsKKworICAgIC8v
IFJldHVybiB0aGUgbWFwcGVkIG5hbWUgaWYgPG9yaWdpbmFsTmFtZSwgbWFwcGVkTmFtZT4gaXMg
aW4gdGhlIG1hcDsKKyAgICAvLyBvdGhlcndpc2UsIHJldHVybiBOVUxMLgorICAgIGNvbnN0IGNo
YXIqIEZpbmQoY29uc3QgY2hhciogb3JpZ2luYWxOYW1lKSBjb25zdDsKKworICAgIC8vIEluc2Vy
dCBhIHBhaXIgaW50byB0aGUgbWFwLgorICAgIHZvaWQgSW5zZXJ0KGNvbnN0IGNoYXIqIG9yaWdp
bmFsTmFtZSwgY29uc3QgY2hhciogbWFwcGVkTmFtZSk7CisKKyAgICAvLyBSZXR1cm4gdGhlIG51
bWJlciBvZiBlbnRyaWVzIGluIHRoZSBtYXAuCisgICAgc2l6ZV90IFNpemUoKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICBMb25nTmFtZU1hcCgpOworICAgIH5Mb25nTmFtZU1hcCgpOworCisgICAg
c2l6ZV90IHJlZkNvdW50OworICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4g
bUxvbmdOYW1lTWFwOworfTsKKworLy8gVHJhdmVyc2VzIGludGVybWVkaWF0ZSB0cmVlIHRvIG1h
cCBhdHRyaWJ1dGVzIGFuZCB1bmlmb3JtcyBuYW1lcyB0aGF0IGFyZQorLy8gbG9uZ2VyIHRoYW4g
TUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJWkUgdG8gTUFYX1NIT1JURU5FRF9JREVOVElGSUVS
X1NJWkUuCitjbGFzcyBNYXBMb25nVmFyaWFibGVOYW1lcyA6IHB1YmxpYyBUSW50ZXJtVHJhdmVy
c2VyIHsKK3B1YmxpYzoKKyAgICBNYXBMb25nVmFyaWFibGVOYW1lcyhMb25nTmFtZU1hcCogZ2xv
YmFsTWFwKTsKKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7
CisKK3ByaXZhdGU6CisgICAgVFN0cmluZyBtYXBHbG9iYWxMb25nTmFtZShjb25zdCBUU3RyaW5n
JiBuYW1lKTsKKworICAgIExvbmdOYW1lTWFwKiBtR2xvYmFsTWFwOworfTsKKworI2VuZGlmICAv
LyBDT01QSUxFUl9NQVBfTE9OR19WQVJJQUJMRV9OQU1FU19IXwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTm9kZVNlYXJjaC5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTm9kZVNlYXJj
aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmI1OGM3ZWM2ODk0NTg4YzA4MzUwZTg4Njk2ZTczMTQzZGY0OWUxMjcK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9Ob2RlU2VhcmNoLmgKQEAgLTAsMCArMSw4MCBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKy8vIE5vZGVTZWFyY2guaDogVXRpbGl0aWVzIGZvciBzZWFyY2hpbmcgdHJhbnNsYXRvciBu
b2RlIGdyYXBocworLy8KKworI2lmbmRlZiBUUkFOU0xBVE9SX05PREVTRUFSQ0hfSF8KKyNkZWZp
bmUgVFJBTlNMQVRPUl9OT0RFU0VBUkNIX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL2ludGVybWVkaWF0ZS5oIgorCituYW1lc3BhY2Ugc2gKK3sKKwordGVtcGxhdGUgPGNsYXNz
IFBhcmVudD4KK2NsYXNzIE5vZGVTZWFyY2hUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZl
cnNlcgoreworICBwdWJsaWM6CisgICAgTm9kZVNlYXJjaFRyYXZlcnNlcigpCisgICAgICAgIDog
bUZvdW5kKGZhbHNlKQorICAgIHt9CisKKyAgICBib29sIGZvdW5kKCkgY29uc3QgeyByZXR1cm4g
bUZvdW5kOyB9CisKKyAgICBzdGF0aWMgYm9vbCBzZWFyY2goVEludGVybU5vZGUgKm5vZGUpCisg
ICAgeworICAgICAgICBQYXJlbnQgc2VhcmNoVHJhdmVyc2VyOworICAgICAgICBub2RlLT50cmF2
ZXJzZSgmc2VhcmNoVHJhdmVyc2VyKTsKKyAgICAgICAgcmV0dXJuIHNlYXJjaFRyYXZlcnNlci5m
b3VuZCgpOworICAgIH0KKworICBwcm90ZWN0ZWQ6CisgICAgYm9vbCBtRm91bmQ7Cit9OworCitj
bGFzcyBGaW5kRGlzY2FyZCA6IHB1YmxpYyBOb2RlU2VhcmNoVHJhdmVyc2VyPEZpbmREaXNjYXJk
PgoreworICBwdWJsaWM6CisgICAgdmlydHVhbCBib29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0
LCBUSW50ZXJtQnJhbmNoICpub2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5nZXRG
bG93T3AoKSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRU9wS2lsbDoKKyAgICAgICAgICAg
IG1Gb3VuZCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGRlZmF1bHQ6
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICFtRm91bmQ7CisgICAgfQorfTsK
KworY2xhc3MgRmluZFNpZGVFZmZlY3RSZXdyaXRpbmcgOiBwdWJsaWMgTm9kZVNlYXJjaFRyYXZl
cnNlcjxGaW5kU2lkZUVmZmVjdFJld3JpdGluZz4KK3sKKyAgcHVibGljOgorICAgIHZpcnR1YWwg
Ym9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm9kZSkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKKyAgICAgICAgeworICAgICAgICAgIGNh
c2UgRU9wTG9naWNhbE9yOgorICAgICAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDoKKyAgICAgICAg
ICAgIGlmIChub2RlLT5nZXRSaWdodCgpLT5oYXNTaWRlRWZmZWN0cygpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG1Gb3VuZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuICFtRm91bmQ7CisgICAgfQorfTsKKworfQorCisjZW5kaWYgLy8gVFJBTlNM
QVRPUl9OT0RFU0VBUkNIX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRFU1NMLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEVTU0wuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjgzNjc0MTI0NjIxMWE2MmQzYjQyODMwZmU2Y2M0ZDRmNzFjM2Q2MTcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRw
dXRFU1NMLmNwcApAQCAtMCwwICsxLDI2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRFU1NMLmgiCisKK1RPdXRwdXRFU1NMOjpUT3V0
cHV0RVNTTChUSW5mb1NpbmtCYXNlJiBvYmpTaW5rLAorICAgICAgICAgICAgICAgICAgICAgICAg
IFNoQXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJhdGVneSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBOYW1lTWFwJiBuYW1lTWFwLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCisgICAgOiBUT3V0cHV0R0xTTEJhc2Uob2Jq
U2luaywgY2xhbXBpbmdTdHJhdGVneSwgaGFzaEZ1bmN0aW9uLCBuYW1lTWFwLCBzeW1ib2xUYWJs
ZSkKK3sKK30KKworYm9vbCBUT3V0cHV0RVNTTDo6d3JpdGVWYXJpYWJsZVByZWNpc2lvbihUUHJl
Y2lzaW9uIHByZWNpc2lvbikKK3sKKyAgICBpZiAocHJlY2lzaW9uID09IEVicFVuZGVmaW5lZCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2lu
aygpOworICAgIG91dCA8PCBnZXRQcmVjaXNpb25TdHJpbmcocHJlY2lzaW9uKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL091dHB1dEVTU0wuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEVTU0wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZjAyOTc5YTA1
MDQ0YzM0MmRiYTYxZjUwZDIzZjQ2ZTRlYmY2NTZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0RVNTTC5oCkBA
IC0wLDAgKzEsMjUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ1JPU1NDT01QSUxF
UkdMU0xfT1VUUFVURVNTTF9IXworI2RlZmluZSBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRFU1NM
X0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0xCYXNlLmgiCisK
K2NsYXNzIFRPdXRwdXRFU1NMIDogcHVibGljIFRPdXRwdXRHTFNMQmFzZQoreworcHVibGljOgor
ICAgIFRPdXRwdXRFU1NMKFRJbmZvU2lua0Jhc2UmIG9ialNpbmssCisgICAgICAgICAgICAgICAg
U2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAorICAgICAgICAg
ICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAorICAgICAgICAgICAgICAgIE5h
bWVNYXAmIG5hbWVNYXAsCisgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJs
ZSk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIGJvb2wgd3JpdGVWYXJpYWJsZVByZWNpc2lv
bihUUHJlY2lzaW9uIHByZWNpc2lvbik7Cit9OworCisjZW5kaWYgIC8vIENST1NTQ09NUElMRVJH
TFNMX09VVFBVVEVTU0xfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NTU4OTU2MDY4MmI2MjhiNTk2ZjNhNzU5MDg3OWY3MWM0NjdmMzlhMgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1
dEdMU0wuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0wuaCIKKworVE91dHB1dEdMU0w6OlRPdXRw
dXRHTFNMKFRJbmZvU2lua0Jhc2UmIG9ialNpbmssCisgICAgICAgICAgICAgICAgICAgICAgICAg
U2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAorICAgICAgICAg
ICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKKyAgICA6IFRPdXRwdXRHTFNMQmFzZShvYmpT
aW5rLCBjbGFtcGluZ1N0cmF0ZWd5LCBoYXNoRnVuY3Rpb24sIG5hbWVNYXAsIHN5bWJvbFRhYmxl
KQoreworfQorCitib29sIFRPdXRwdXRHTFNMOjp3cml0ZVZhcmlhYmxlUHJlY2lzaW9uKFRQcmVj
aXNpb24pCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFRPdXRwdXRHTFNMOjp2aXNp
dFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9
IG9ialNpbmsoKTsKKworICAgIGlmIChub2RlLT5nZXRTeW1ib2woKSA9PSAiZ2xfRnJhZ0RlcHRo
RVhUIikKKyAgICB7CisgICAgICAgIG91dCA8PCAiZ2xfRnJhZ0RlcHRoIjsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgVE91dHB1dEdMU0xCYXNlOjp2aXNpdFN5bWJvbChub2RlKTsK
KyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTFmMTE0ZDM0N2I0
MTIyZDkzNDE2ZTYyNDRjYmFhZjkzMGQ0OTdjMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0wuaApAQCAt
MCwwICsxLDI2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENST1NTQ09NUElMRVJH
TFNMX09VVFBVVEdMU0xfSF8KKyNkZWZpbmUgQ1JPU1NDT01QSUxFUkdMU0xfT1VUUFVUR0xTTF9I
XworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMQmFzZS5oIgorCitj
bGFzcyBUT3V0cHV0R0xTTCA6IHB1YmxpYyBUT3V0cHV0R0xTTEJhc2UKK3sKK3B1YmxpYzoKKyAg
ICBUT3V0cHV0R0xTTChUSW5mb1NpbmtCYXNlJiBvYmpTaW5rLAorICAgICAgICAgICAgICAgIFNo
QXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJhdGVneSwKKyAgICAgICAgICAg
ICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwKKyAgICAgICAgICAgICAgICBOYW1l
TWFwJiBuYW1lTWFwLAorICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUp
OworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBib29sIHdyaXRlVmFyaWFibGVQcmVjaXNpb24o
VFByZWNpc2lvbik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wq
IG5vZGUpOworfTsKKworI2VuZGlmICAvLyBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRHTFNMX0hf
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9PdXRwdXRHTFNMQmFzZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMQmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjJmMGEzZDZi
ZTM4MDJlMzhlMDEzMTVhZjE4YWEwYTAyZDljMTQyNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0xCYXNl
LmNwcApAQCAtMCwwICsxLDgxNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL2NvbXBpbGVyZGVidWcuaCIKKworI2luY2x1ZGUgPGNmbG9hdD4KKworbmFtZXNw
YWNlCit7CitUU3RyaW5nIGFycmF5QnJhY2tldHMoY29uc3QgVFR5cGUmIHR5cGUpCit7CisgICAg
QVNTRVJUKHR5cGUuaXNBcnJheSgpKTsKKyAgICBUSW5mb1NpbmtCYXNlIG91dDsKKyAgICBvdXQg
PDwgIlsiIDw8IHR5cGUuZ2V0QXJyYXlTaXplKCkgPDwgIl0iOworICAgIHJldHVybiBUU3RyaW5n
KG91dC5jX3N0cigpKTsKK30KKworYm9vbCBpc1NpbmdsZVN0YXRlbWVudChUSW50ZXJtTm9kZSog
bm9kZSkgeworICAgIGlmIChjb25zdCBUSW50ZXJtQWdncmVnYXRlKiBhZ2dyZWdhdGUgPSBub2Rl
LT5nZXRBc0FnZ3JlZ2F0ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChhZ2dyZWdhdGUtPmdl
dE9wKCkgIT0gRU9wRnVuY3Rpb24pICYmCisgICAgICAgICAgICAgICAoYWdncmVnYXRlLT5nZXRP
cCgpICE9IEVPcFNlcXVlbmNlKTsKKyAgICB9CisgICAgZWxzZSBpZiAoY29uc3QgVEludGVybVNl
bGVjdGlvbiogc2VsZWN0aW9uID0gbm9kZS0+Z2V0QXNTZWxlY3Rpb25Ob2RlKCkpCisgICAgewor
ICAgICAgICAvLyBUZXJuYXJ5IG9wZXJhdG9ycyBhcmUgdXN1YWxseSBwYXJ0IG9mIGFuIGFzc2ln
bm1lbnQgb3BlcmF0b3IuCisgICAgICAgIC8vIFRoaXMgaGFuZGxlcyB0aG9zZSByYXJlIGNhc2Vz
IGluIHdoaWNoIHRoZXkgYXJlIGFsbCBieSB0aGVtc2VsdmVzLgorICAgICAgICByZXR1cm4gc2Vs
ZWN0aW9uLT51c2VzVGVybmFyeU9wZXJhdG9yKCk7CisgICAgfQorICAgIGVsc2UgaWYgKG5vZGUt
PmdldEFzTG9vcE5vZGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9Cit9ICAvLyBuYW1lc3BhY2UKKworVE91dHB1dEdMU0xCYXNlOjpU
T3V0cHV0R0xTTEJhc2UoVEluZm9TaW5rQmFzZSYgb2JqU2luaywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNoQXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJh
dGVneSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQg
aGFzaEZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZU1hcCYg
bmFtZU1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYg
c3ltYm9sVGFibGUpCisgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIHRydWUsIHRydWUpLAor
ICAgICAgbU9ialNpbmsob2JqU2luayksCisgICAgICBtRGVjbGFyaW5nVmFyaWFibGVzKGZhbHNl
KSwKKyAgICAgIG1DbGFtcGluZ1N0cmF0ZWd5KGNsYW1waW5nU3RyYXRlZ3kpLAorICAgICAgbUhh
c2hGdW5jdGlvbihoYXNoRnVuY3Rpb24pLAorICAgICAgbU5hbWVNYXAobmFtZU1hcCksCisgICAg
ICBtU3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCit7Cit9CisKK3ZvaWQgVE91dHB1dEdMU0xCYXNl
Ojp3cml0ZVRyaXBsZXQoVmlzaXQgdmlzaXQsIGNvbnN0IGNoYXIqIHByZVN0ciwgY29uc3QgY2hh
ciogaW5TdHIsIGNvbnN0IGNoYXIqIHBvc3RTdHIpCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0
ID0gb2JqU2luaygpOworICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCAmJiBwcmVTdHIpCisgICAg
eworICAgICAgICBvdXQgPDwgcHJlU3RyOworICAgIH0KKyAgICBlbHNlIGlmICh2aXNpdCA9PSBJ
blZpc2l0ICYmIGluU3RyKQorICAgIHsKKyAgICAgICAgb3V0IDw8IGluU3RyOworICAgIH0KKyAg
ICBlbHNlIGlmICh2aXNpdCA9PSBQb3N0VmlzaXQgJiYgcG9zdFN0cikKKyAgICB7CisgICAgICAg
IG91dCA8PCBwb3N0U3RyOworICAgIH0KK30KKwordm9pZCBUT3V0cHV0R0xTTEJhc2U6OndyaXRl
VmFyaWFibGVUeXBlKGNvbnN0IFRUeXBlJiB0eXBlKQoreworICAgIFRJbmZvU2lua0Jhc2UmIG91
dCA9IG9ialNpbmsoKTsKKyAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHR5cGUuZ2V0UXVhbGlm
aWVyKCk7CisgICAgLy8gVE9ETyhhbG9rcCk6IFZhbGlkYXRlIHF1YWxpZmllciBmb3IgdmFyaWFi
bGUgZGVjbGFyYXRpb25zLgorICAgIGlmICgocXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgJiYg
KHF1YWxpZmllciAhPSBFdnFHbG9iYWwpKQorICAgICAgICBvdXQgPDwgdHlwZS5nZXRRdWFsaWZp
ZXJTdHJpbmcoKSA8PCAiICI7CisgICAgLy8gRGVjbGFyZSB0aGUgc3RydWN0IGlmIHdlIGhhdmUg
bm90IGRvbmUgc28gYWxyZWFkeS4KKyAgICBpZiAoKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0
U3RydWN0KSAmJiAhc3RydWN0RGVjbGFyZWQodHlwZS5nZXRTdHJ1Y3QoKSkpCisgICAgeworICAg
ICAgICBkZWNsYXJlU3RydWN0KHR5cGUuZ2V0U3RydWN0KCkpOworICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICBpZiAod3JpdGVWYXJpYWJsZVByZWNpc2lvbih0eXBlLmdldFByZWNpc2lv
bigpKSkKKyAgICAgICAgICAgIG91dCA8PCAiICI7CisgICAgICAgIG91dCA8PCBnZXRUeXBlTmFt
ZSh0eXBlKTsKKyAgICB9Cit9CisKK3ZvaWQgVE91dHB1dEdMU0xCYXNlOjp3cml0ZUZ1bmN0aW9u
UGFyYW1ldGVycyhjb25zdCBUSW50ZXJtU2VxdWVuY2UmIGFyZ3MpCit7CisgICAgVEluZm9TaW5r
QmFzZSYgb3V0ID0gb2JqU2luaygpOworICAgIGZvciAoVEludGVybVNlcXVlbmNlOjpjb25zdF9p
dGVyYXRvciBpdGVyID0gYXJncy5iZWdpbigpOworICAgICAgICAgaXRlciAhPSBhcmdzLmVuZCgp
OyArK2l0ZXIpCisgICAgeworICAgICAgICBjb25zdCBUSW50ZXJtU3ltYm9sKiBhcmcgPSAoKml0
ZXIpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICAgICAgQVNTRVJUKGFyZyAhPSBOVUxMKTsKKwor
ICAgICAgICBjb25zdCBUVHlwZSYgdHlwZSA9IGFyZy0+Z2V0VHlwZSgpOworICAgICAgICB3cml0
ZVZhcmlhYmxlVHlwZSh0eXBlKTsKKworICAgICAgICBjb25zdCBUU3RyaW5nJiBuYW1lID0gYXJn
LT5nZXRTeW1ib2woKTsKKyAgICAgICAgaWYgKCFuYW1lLmVtcHR5KCkpCisgICAgICAgICAgICBv
dXQgPDwgIiAiIDw8IGhhc2hOYW1lKG5hbWUpOworICAgICAgICBpZiAodHlwZS5pc0FycmF5KCkp
CisgICAgICAgICAgICBvdXQgPDwgYXJyYXlCcmFja2V0cyh0eXBlKTsKKworICAgICAgICAvLyBQ
dXQgYSBjb21tYSBpZiB0aGlzIGlzIG5vdCB0aGUgbGFzdCBhcmd1bWVudC4KKyAgICAgICAgaWYg
KGl0ZXIgIT0gYXJncy5lbmQoKSAtIDEpCisgICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAgICB9
Cit9CisKK2NvbnN0IENvbnN0YW50VW5pb24qIFRPdXRwdXRHTFNMQmFzZTo6d3JpdGVDb25zdGFu
dFVuaW9uKGNvbnN0IFRUeXBlJiB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29uc3RhbnRVbmlvbiogcENvbnN0VW5p
b24pCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOworCisgICAgaWYgKHR5
cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQorICAgIHsKKyAgICAgICAgY29uc3QgVFN0
cnVjdHVyZSogc3RydWN0dXJlID0gdHlwZS5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgb3V0IDw8IGhh
c2hOYW1lKHN0cnVjdHVyZS0+bmFtZSgpKSA8PCAiKCI7CisKKyAgICAgICAgY29uc3QgVEZpZWxk
TGlzdCYgZmllbGRzID0gc3RydWN0dXJlLT5maWVsZHMoKTsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNv
bnN0IFRUeXBlKiBmaWVsZFR5cGUgPSBmaWVsZHNbaV0tPnR5cGUoKTsKKyAgICAgICAgICAgIEFT
U0VSVChmaWVsZFR5cGUgIT0gTlVMTCk7CisgICAgICAgICAgICBwQ29uc3RVbmlvbiA9IHdyaXRl
Q29uc3RhbnRVbmlvbigqZmllbGRUeXBlLCBwQ29uc3RVbmlvbik7CisgICAgICAgICAgICBpZiAo
aSAhPSBmaWVsZHMuc2l6ZSgpIC0gMSkgb3V0IDw8ICIsICI7CisgICAgICAgIH0KKyAgICAgICAg
b3V0IDw8ICIpIjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc2l6ZV90IHNpemUg
PSB0eXBlLmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgYm9vbCB3cml0ZVR5cGUgPSBzaXplID4g
MTsKKyAgICAgICAgaWYgKHdyaXRlVHlwZSkgb3V0IDw8IGdldFR5cGVOYW1lKHR5cGUpIDw8ICIo
IjsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2ksICsrcENvbnN0VW5p
b24pCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAocENvbnN0VW5pb24tPmdldFR5cGUo
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OiBvdXQgPDwg
c3RkOjptaW4oRkxUX01BWCwgc3RkOjptYXgoLUZMVF9NQVgsIHBDb25zdFVuaW9uLT5nZXRGQ29u
c3QoKSkpOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEVidEludDogb3V0IDw8IHBDb25z
dFVuaW9uLT5nZXRJQ29uc3QoKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29s
OiBvdXQgPDwgcENvbnN0VW5pb24tPmdldEJDb25zdCgpOyBicmVhazsKKyAgICAgICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGkgIT0gc2l6ZSAtIDEpIG91dCA8PCAiLCAiOworICAgICAgICB9CisgICAgICAgIGlmICh3cml0
ZVR5cGUpIG91dCA8PCAiKSI7CisgICAgfQorICAgIHJldHVybiBwQ29uc3RVbmlvbjsKK30KKwor
dm9pZCBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCit7
CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOworICAgIGlmIChtTG9vcFVucm9s
bC5OZWVkc1RvUmVwbGFjZVN5bWJvbFdpdGhWYWx1ZShub2RlKSkKKyAgICAgICAgb3V0IDw8IG1M
b29wVW5yb2xsLkdldExvb3BJbmRleFZhbHVlKG5vZGUpOworICAgIGVsc2UKKyAgICAgICAgb3V0
IDw8IGhhc2hWYXJpYWJsZU5hbWUobm9kZS0+Z2V0U3ltYm9sKCkpOworCisgICAgaWYgKG1EZWNs
YXJpbmdWYXJpYWJsZXMgJiYgbm9kZS0+Z2V0VHlwZSgpLmlzQXJyYXkoKSkKKyAgICAgICAgb3V0
IDw8IGFycmF5QnJhY2tldHMobm9kZS0+Z2V0VHlwZSgpKTsKK30KKwordm9pZCBUT3V0cHV0R0xT
TEJhc2U6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSkKK3sK
KyAgICB3cml0ZUNvbnN0YW50VW5pb24obm9kZS0+Z2V0VHlwZSgpLCBub2RlLT5nZXRVbmlvbkFy
cmF5UG9pbnRlcigpKTsKK30KKworYm9vbCBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0QmluYXJ5KFZp
c2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBub2RlKQoreworICAgIGJvb2wgdmlzaXRDaGlsZHJl
biA9IHRydWU7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOworICAgIHN3aXRj
aCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7CisgICAgICAgIGNhc2UgRU9wSW5pdGlhbGl6ZToKKyAg
ICAgICAgICAgIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG91dCA8PCAiID0gIjsKKyAgICAgICAgICAgICAgICAvLyBSSFMgb2YgaW5pdGlhbGl6
ZSBpcyBub3QgYmVpbmcgZGVjbGFyZWQuCisgICAgICAgICAgICAgICAgbURlY2xhcmluZ1Zhcmlh
YmxlcyA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wQXNzaWduOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiA9ICIsICIpIik7IGJy
ZWFrOworICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIs
ICIgKz0gIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU3ViQXNzaWduOiB3cml0ZVRy
aXBsZXQodmlzaXQsICIoIiwgIiAtPSAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BE
aXZBc3NpZ246IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiIC89ICIsICIpIik7IGJyZWFrOwor
ICAgICAgICAvLyBOb3RpY2UgdGhlIGZhbGwtdGhyb3VnaC4KKyAgICAgICAgY2FzZSBFT3BNdWxB
c3NpZ246IAorICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOgorICAgICAg
ICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOgorICAgICAgICBjYXNlIEVPcE1hdHJp
eFRpbWVzU2NhbGFyQXNzaWduOgorICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4QXNz
aWduOgorICAgICAgICAgICAgd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgKj0gIiwgIikiKTsK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6CisgICAg
ICAgICAgICB3cml0ZVRyaXBsZXQodmlzaXQsIE5VTEwsICJbIiwgIl0iKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6CisgICAgICAgICAgICBpZiAo
bm9kZS0+Z2V0QWRkSW5kZXhDbGFtcCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG1DbGFtcGluZ1N0cmF0ZWd5ID09IFNIX0NMQU1QX1dJVEhfQ0xBTVBfSU5UUklO
U0lDKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIltpbnQoY2xhbXAoZmxvYXQo
IjsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG91dCA8PCAiW3dlYmdsX2ludF9jbGFtcCgiOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IFBvc3RWaXNp
dCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGludCBtYXhTaXplOwor
ICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgKmxlZnQgPSBub2RlLT5nZXRMZWZ0KCk7
CisgICAgICAgICAgICAgICAgICAgIFRUeXBlIGxlZnRUeXBlID0gbGVmdC0+Z2V0VHlwZSgpOwor
CisgICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5pc0FycmF5KCkpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBzaGFkZXIgd2lsbCBmYWls
IHZhbGlkYXRpb24gaWYgdGhlIGFycmF5IGxlbmd0aCBpcyBub3QgPiAwLgorICAgICAgICAgICAg
ICAgICAgICAgICAgbWF4U2l6ZSA9IGxlZnRUeXBlLmdldEFycmF5U2l6ZSgpIC0gMTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heFNpemUgPSBsZWZ0VHlwZS5nZXRO
b21pbmFsU2l6ZSgpIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgIGlmIChtQ2xhbXBpbmdTdHJhdGVneSA9PSBTSF9DTEFNUF9XSVRIX0NMQU1QX0lOVFJJ
TlNJQykgeworICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIpLCAwLjAsIGZsb2F0KCIg
PDwgbWF4U2l6ZSA8PCAiKSkpXSI7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgMCwgIiA8PCBtYXhTaXplIDw8ICIpXSI7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd3JpdGVUcmlw
bGV0KHZpc2l0LCBOVUxMLCAiWyIsICJdIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdFN0cnVjdDoKKyAgICAgICAgICAgIGlm
ICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIEhl
cmUgd2UgYXJlIHdyaXRpbmcgb3V0ICJmb28uYmFyIiwgd2hlcmUgImZvbyIgaXMgc3RydWN0Cisg
ICAgICAgICAgICAgICAgLy8gYW5kICJiYXIiIGlzIGZpZWxkLiBJbiBBU1QsIGl0IGlzIHJlcHJl
c2VudGVkIGFzIGEgYmluYXJ5CisgICAgICAgICAgICAgICAgLy8gbm9kZSwgd2hlcmUgbGVmdCBj
aGlsZCByZXByZXNlbnRzICJmb28iIGFuZCByaWdodCBjaGlsZCAiYmFyIi4KKyAgICAgICAgICAg
ICAgICAvLyBUaGUgbm9kZSBpdHNlbGYgcmVwcmVzZW50cyAiLiIuIFRoZSBzdHJ1Y3QgZmllbGQg
ImJhciIgaXMKKyAgICAgICAgICAgICAgICAvLyBhY3R1YWxseSBzdG9yZWQgYXMgYW4gaW5kZXgg
aW50byBUU3RydWN0dXJlOjpmaWVsZHMuCisgICAgICAgICAgICAgICAgb3V0IDw8ICIuIjsKKyAg
ICAgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBub2RlLT5nZXRMZWZ0
KCktPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUSW50ZXJt
Q29uc3RhbnRVbmlvbiogaW5kZXggPSBub2RlLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5p
b24oKTsKKyAgICAgICAgICAgICAgICBjb25zdCBURmllbGQqIGZpZWxkID0gc3RydWN0dXJlLT5m
aWVsZHMoKVtpbmRleC0+Z2V0SUNvbnN0KDApXTsKKworICAgICAgICAgICAgICAgIFRTdHJpbmcg
ZmllbGROYW1lID0gZmllbGQtPm5hbWUoKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1TeW1ib2xU
YWJsZS5maW5kQnVpbHRJbihzdHJ1Y3R1cmUtPm5hbWUoKSkpCisgICAgICAgICAgICAgICAgICAg
IGZpZWxkTmFtZSA9IGhhc2hOYW1lKGZpZWxkTmFtZSk7CisKKyAgICAgICAgICAgICAgICBvdXQg
PDwgZmllbGROYW1lOworICAgICAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFZlY3RvclN3
aXp6bGU6CisgICAgICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgIi4iOworICAgICAgICAgICAgICAgIFRJbnRlcm1BZ2dy
ZWdhdGUqIHJpZ2h0Q2hpbGQgPSBub2RlLT5nZXRSaWdodCgpLT5nZXRBc0FnZ3JlZ2F0ZSgpOwor
ICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSByaWdodENoaWxkLT5n
ZXRTZXF1ZW5jZSgpOworICAgICAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjppdGVy
YXRvciBzaXQgPSBzZXF1ZW5jZS5iZWdpbigpOyBzaXQgIT0gc2VxdWVuY2UuZW5kKCk7ICsrc2l0
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVEludGVybUNvbnN0YW50
VW5pb24qIGVsZW1lbnQgPSAoKnNpdCktPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoZWxlbWVudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50KTsKKyAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnQtPmdldE5vbWluYWxTaXplKCkgPT0gMSk7
CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbnN0YW50VW5pb24mIGRhdGEgPSBlbGVtZW50
LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpWzBdOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
ZGF0YS5nZXRUeXBlKCkgPT0gRWJ0SW50KTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChk
YXRhLmdldElDb25zdCgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIDA6IG91dCA8PCAieCI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAxOiBvdXQgPDwgInkiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgMjogb3V0IDw8ICJ6IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6
IG91dCA8PCAidyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BBZGQ6IHdyaXRlVHJpcGxl
dCh2aXNpdCwgIigiLCAiICsgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU3ViOiB3
cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAtICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNl
IEVPcE11bDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgKiAiLCAiKSIpOyBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BEaXY6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiIC8gIiwgIikiKTsg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wTW9kOiBVTklNUExFTUVOVEVEKCk7IGJyZWFrOworICAg
ICAgICBjYXNlIEVPcEVxdWFsOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiA9PSAiLCAiKSIp
OyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAi
KCIsICIgIT0gIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW46IHdyaXRl
VHJpcGxldCh2aXNpdCwgIigiLCAiIDwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
R3JlYXRlclRoYW46IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiID4gIiwgIikiKTsgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIs
ICIgPD0gIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDog
d3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgPj0gIiwgIikiKTsgYnJlYWs7CisKKyAgICAgICAg
Ly8gTm90aWNlIHRoZSBmYWxsLXRocm91Z2guCisgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNT
Y2FsYXI6CisgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXg6CisgICAgICAgIGNhc2Ug
RU9wTWF0cml4VGltZXNWZWN0b3I6CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXI6
CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXg6CisgICAgICAgICAgICB3cml0ZVRy
aXBsZXQodmlzaXQsICIoIiwgIiAqICIsICIpIik7CisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBjYXNlIEVPcExvZ2ljYWxPcjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgfHwgIiwg
IikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjogd3JpdGVUcmlwbGV0KHZp
c2l0LCAiKCIsICIgXl4gIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9naWNhbEFu
ZDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgJiYgIiwgIikiKTsgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB2aXNp
dENoaWxkcmVuOworfQorCitib29sIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRVbmFyeShWaXNpdCB2
aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQoreworICAgIFRTdHJpbmcgcHJlU3RyaW5nOworICAg
IFRTdHJpbmcgcG9zdFN0cmluZyA9ICIpIjsKKworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkK
KyAgICB7CisgICAgICAgIGNhc2UgRU9wTmVnYXRpdmU6IHByZVN0cmluZyA9ICIoLSI7IGJyZWFr
OworICAgICAgICBjYXNlIEVPcFZlY3RvckxvZ2ljYWxOb3Q6IHByZVN0cmluZyA9ICJub3QoIjsg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDogcHJlU3RyaW5nID0gIighIjsgYnJl
YWs7CisKKyAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50OiBwcmVTdHJpbmcgPSAiKCI7IHBv
c3RTdHJpbmcgPSAiKyspIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDog
cHJlU3RyaW5nID0gIigiOyBwb3N0U3RyaW5nID0gIi0tKSI7IGJyZWFrOworICAgICAgICBjYXNl
IEVPcFByZUluY3JlbWVudDogcHJlU3RyaW5nID0gIigrKyI7IGJyZWFrOworICAgICAgICBjYXNl
IEVPcFByZURlY3JlbWVudDogcHJlU3RyaW5nID0gIigtLSI7IGJyZWFrOworCisgICAgICAgIGNh
c2UgRU9wQ29udkludFRvQm9vbDoKKyAgICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0Jvb2w6Cisg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wZXJhbmQoKS0+Z2V0VHlwZSgpLmdldE5vbWlu
YWxTaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSAxOiBwcmVTdHJp
bmcgPSAgImJvb2woIjsgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjogcHJlU3RyaW5n
ID0gImJ2ZWMyKCI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMzogcHJlU3RyaW5nID0g
ImJ2ZWMzKCI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDogcHJlU3RyaW5nID0gImJ2
ZWM0KCI7IGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb252Qm9v
bFRvRmxvYXQ6CisgICAgICAgIGNhc2UgRU9wQ29udkludFRvRmxvYXQ6CisgICAgICAgICAgICBz
d2l0Y2ggKG5vZGUtPmdldE9wZXJhbmQoKS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSAxOiBwcmVTdHJpbmcgPSAiZmxvYXQo
IjsgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjogcHJlU3RyaW5nID0gInZlYzIoIjsg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAzOiBwcmVTdHJpbmcgPSAidmVjMygiOyBicmVh
azsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6IHByZVN0cmluZyA9ICJ2ZWM0KCI7IGJyZWFrOwor
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0ludDoKKyAgICAg
ICAgY2FzZSBFT3BDb252Qm9vbFRvSW50OgorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRP
cGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGNhc2UgMTogcHJlU3RyaW5nID0gImludCgiOyAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSAyOiBwcmVTdHJpbmcgPSAiaXZlYzIoIjsgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2FzZSAzOiBwcmVTdHJpbmcgPSAiaXZlYzMoIjsgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSA0OiBwcmVTdHJpbmcgPSAiaXZlYzQoIjsgYnJlYWs7CisgICAgICAgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGNhc2UgRU9wUmFkaWFuczogcHJlU3RyaW5nID0gInJhZGlhbnMoIjsgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wRGVncmVlczogcHJlU3RyaW5nID0gImRlZ3JlZXMoIjsgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wU2luOiBwcmVTdHJpbmcgPSAic2luKCI7IGJyZWFrOworICAg
ICAgICBjYXNlIEVPcENvczogcHJlU3RyaW5nID0gImNvcygiOyBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BUYW46IHByZVN0cmluZyA9ICJ0YW4oIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQXNp
bjogcHJlU3RyaW5nID0gImFzaW4oIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQWNvczogcHJl
U3RyaW5nID0gImFjb3MoIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQXRhbjogcHJlU3RyaW5n
ID0gImF0YW4oIjsgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BFeHA6IHByZVN0cmluZyA9ICJl
eHAoIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9nOiBwcmVTdHJpbmcgPSAibG9nKCI7IGJy
ZWFrOworICAgICAgICBjYXNlIEVPcEV4cDI6IHByZVN0cmluZyA9ICJleHAyKCI7IGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcExvZzI6IHByZVN0cmluZyA9ICJsb2cyKCI7IGJyZWFrOworICAgICAg
ICBjYXNlIEVPcFNxcnQ6IHByZVN0cmluZyA9ICJzcXJ0KCI7IGJyZWFrOworICAgICAgICBjYXNl
IEVPcEludmVyc2VTcXJ0OiBwcmVTdHJpbmcgPSAiaW52ZXJzZXNxcnQoIjsgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBFT3BBYnM6IHByZVN0cmluZyA9ICJhYnMoIjsgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wU2lnbjogcHJlU3RyaW5nID0gInNpZ24oIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
Rmxvb3I6IHByZVN0cmluZyA9ICJmbG9vcigiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDZWls
OiBwcmVTdHJpbmcgPSAiY2VpbCgiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BGcmFjdDogcHJl
U3RyaW5nID0gImZyYWN0KCI7IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wTGVuZ3RoOiBwcmVT
dHJpbmcgPSAibGVuZ3RoKCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcE5vcm1hbGl6ZTogcHJl
U3RyaW5nID0gIm5vcm1hbGl6ZSgiOyBicmVhazsKKworICAgICAgICBjYXNlIEVPcERGZHg6IHBy
ZVN0cmluZyA9ICJkRmR4KCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcERGZHk6IHByZVN0cmlu
ZyA9ICJkRmR5KCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEZ3aWR0aDogcHJlU3RyaW5nID0g
ImZ3aWR0aCgiOyBicmVhazsKKworICAgICAgICBjYXNlIEVPcEFueTogcHJlU3RyaW5nID0gImFu
eSgiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BBbGw6IHByZVN0cmluZyA9ICJhbGwoIjsgYnJl
YWs7CisKKyAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7CisgICAgfQorCisg
ICAgaWYgKHZpc2l0ID09IFByZVZpc2l0ICYmIG5vZGUtPmdldFVzZUVtdWxhdGVkRnVuY3Rpb24o
KSkKKyAgICAgICAgcHJlU3RyaW5nID0gQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OkdldEVtdWxh
dGVkRnVuY3Rpb25OYW1lKHByZVN0cmluZyk7CisgICAgd3JpdGVUcmlwbGV0KHZpc2l0LCBwcmVT
dHJpbmcuY19zdHIoKSwgTlVMTCwgcG9zdFN0cmluZy5jX3N0cigpKTsKKworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlz
aXQsIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0g
b2JqU2luaygpOworCisgICAgaWYgKG5vZGUtPnVzZXNUZXJuYXJ5T3BlcmF0b3IoKSkKKyAgICB7
CisgICAgICAgIC8vIE5vdGljZSB0d28gYnJhY2tldHMgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5k
LiBUaGUgb3V0ZXIgb25lcworICAgICAgICAvLyBlbmNhcHN1bGF0ZSB0aGUgd2hvbGUgdGVybmFy
eSBleHByZXNzaW9uLiBUaGlzIHByZXNlcnZlcyB0aGUKKyAgICAgICAgLy8gb3JkZXIgb2YgcHJl
Y2VkZW5jZSB3aGVuIHRlcm5hcnkgZXhwcmVzc2lvbnMgYXJlIHVzZWQgaW4gYQorICAgICAgICAv
LyBjb21wb3VuZCBleHByZXNzaW9uLCBpLmUuLCBjID0gMiAqIChhIDwgYiA/IDEgOiAyKS4KKyAg
ICAgICAgb3V0IDw8ICIoKCI7CisgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJz
ZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIpID8gKCI7CisgICAgICAgIG5vZGUtPmdldFRydWVC
bG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIpIDogKCI7CisgICAgICAg
IG5vZGUtPmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG91dCA8PCAi
KSkiOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBvdXQgPDwgImlmICgiOworICAg
ICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG91dCA8
PCAiKVxuIjsKKworICAgICAgICBpbmNyZW1lbnREZXB0aChub2RlKTsKKyAgICAgICAgdmlzaXRD
b2RlQmxvY2sobm9kZS0+Z2V0VHJ1ZUJsb2NrKCkpOworCisgICAgICAgIGlmIChub2RlLT5nZXRG
YWxzZUJsb2NrKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZWxzZVxuIjsKKyAg
ICAgICAgICAgIHZpc2l0Q29kZUJsb2NrKG5vZGUtPmdldEZhbHNlQmxvY2soKSk7CisgICAgICAg
IH0KKyAgICAgICAgZGVjcmVtZW50RGVwdGgoKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1BZ2dyZWdhdGUqIG5vZGUpCit7CisgICAgYm9vbCB2aXNpdENoaWxkcmVuID0gdHJ1ZTsK
KyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7CisgICAgVFN0cmluZyBwcmVTdHJp
bmc7CisgICAgYm9vbCBkZWxheWVkV3JpdGUgPSBmYWxzZTsKKyAgICBzd2l0Y2ggKG5vZGUtPmdl
dE9wKCkpCisgICAgeworICAgICAgICBjYXNlIEVPcFNlcXVlbmNlOiB7CisgICAgICAgICAgICAv
LyBTY29wZSB0aGUgc2VxdWVuY2VzIGV4Y2VwdCB3aGVuIGF0IHRoZSBnbG9iYWwgc2NvcGUuCisg
ICAgICAgICAgICBpZiAoZGVwdGggPiAwKSBvdXQgPDwgIntcbiI7CisKKyAgICAgICAgICAgIGlu
Y3JlbWVudERlcHRoKG5vZGUpOworICAgICAgICAgICAgY29uc3QgVEludGVybVNlcXVlbmNlJiBz
ZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAgICBmb3IgKFRJbnRlcm1T
ZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHNlcXVlbmNlLmJlZ2luKCk7CisgICAgICAg
ICAgICAgICAgIGl0ZXIgIT0gc2VxdWVuY2UuZW5kKCk7ICsraXRlcikKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSogbm9kZSA9ICppdGVyOworICAgICAgICAgICAg
ICAgIEFTU0VSVChub2RlICE9IE5VTEwpOworICAgICAgICAgICAgICAgIG5vZGUtPnRyYXZlcnNl
KHRoaXMpOworCisgICAgICAgICAgICAgICAgaWYgKGlzU2luZ2xlU3RhdGVtZW50KG5vZGUpKQor
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIjtcbiI7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBkZWNyZW1lbnREZXB0aCgpOworCisgICAgICAgICAgICAvLyBTY29wZSB0aGUgc2VxdWVu
Y2VzIGV4Y2VwdCB3aGVuIGF0IHRoZSBnbG9iYWwgc2NvcGUuCisgICAgICAgICAgICBpZiAoZGVw
dGggPiAwKSBvdXQgPDwgIn1cbiI7CisgICAgICAgICAgICB2aXNpdENoaWxkcmVuID0gZmFsc2U7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEVPcFByb3RvdHlw
ZTogeworICAgICAgICAgICAgLy8gRnVuY3Rpb24gZGVjbGFyYXRpb24uCisgICAgICAgICAgICBB
U1NFUlQodmlzaXQgPT0gUHJlVmlzaXQpOworICAgICAgICAgICAgd3JpdGVWYXJpYWJsZVR5cGUo
bm9kZS0+Z2V0VHlwZSgpKTsKKyAgICAgICAgICAgIG91dCA8PCAiICIgPDwgaGFzaE5hbWUobm9k
ZS0+Z2V0TmFtZSgpKTsKKworICAgICAgICAgICAgb3V0IDw8ICIoIjsKKyAgICAgICAgICAgIHdy
aXRlRnVuY3Rpb25QYXJhbWV0ZXJzKG5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICAgICAg
b3V0IDw8ICIpIjsKKworICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBFT3BGdW5jdGlvbjogeworICAg
ICAgICAgICAgLy8gRnVuY3Rpb24gZGVmaW5pdGlvbi4KKyAgICAgICAgICAgIEFTU0VSVCh2aXNp
dCA9PSBQcmVWaXNpdCk7CisgICAgICAgICAgICB3cml0ZVZhcmlhYmxlVHlwZShub2RlLT5nZXRU
eXBlKCkpOworICAgICAgICAgICAgb3V0IDw8ICIgIiA8PCBoYXNoRnVuY3Rpb25OYW1lKG5vZGUt
PmdldE5hbWUoKSk7CisKKyAgICAgICAgICAgIGluY3JlbWVudERlcHRoKG5vZGUpOworICAgICAg
ICAgICAgLy8gRnVuY3Rpb24gZGVmaW5pdGlvbiBub2RlIGNvbnRhaW5zIG9uZSBvciB0d28gY2hp
bGRyZW4gbm9kZXMKKyAgICAgICAgICAgIC8vIHJlcHJlc2VudGluZyBmdW5jdGlvbiBwYXJhbWV0
ZXJzIGFuZCBmdW5jdGlvbiBib2R5LiBUaGUgbGF0dGVyCisgICAgICAgICAgICAvLyBpcyBub3Qg
cHJlc2VudCBpbiBjYXNlIG9mIGVtcHR5IGZ1bmN0aW9uIGJvZGllcy4KKyAgICAgICAgICAgIGNv
bnN0IFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOworICAg
ICAgICAgICAgQVNTRVJUKChzZXF1ZW5jZS5zaXplKCkgPT0gMSkgfHwgKHNlcXVlbmNlLnNpemUo
KSA9PSAyKSk7CisgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIHNl
cUl0ZXIgPSBzZXF1ZW5jZS5iZWdpbigpOworCisgICAgICAgICAgICAvLyBUcmF2ZXJzZSBmdW5j
dGlvbiBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSogcGFyYW1zID0g
KCpzZXFJdGVyKS0+Z2V0QXNBZ2dyZWdhdGUoKTsKKyAgICAgICAgICAgIEFTU0VSVChwYXJhbXMg
IT0gTlVMTCk7CisgICAgICAgICAgICBBU1NFUlQocGFyYW1zLT5nZXRPcCgpID09IEVPcFBhcmFt
ZXRlcnMpOworICAgICAgICAgICAgcGFyYW1zLT50cmF2ZXJzZSh0aGlzKTsKKworICAgICAgICAg
ICAgLy8gVHJhdmVyc2UgZnVuY3Rpb24gYm9keS4KKyAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdh
dGUqIGJvZHkgPSArK3NlcUl0ZXIgIT0gc2VxdWVuY2UuZW5kKCkgPworICAgICAgICAgICAgICAg
ICgqc2VxSXRlciktPmdldEFzQWdncmVnYXRlKCkgOiBOVUxMOworICAgICAgICAgICAgdmlzaXRD
b2RlQmxvY2soYm9keSk7CisgICAgICAgICAgICBkZWNyZW1lbnREZXB0aCgpOworIAorICAgICAg
ICAgICAgLy8gRnVsbHkgcHJvY2Vzc2VkOyBubyBuZWVkIHRvIHZpc2l0IGNoaWxkcmVuLgorICAg
ICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBFT3BGdW5jdGlvbkNhbGw6CisgICAgICAgICAgICAvLyBGdW5j
dGlvbiBjYWxsLgorICAgICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG91dCA8PCBoYXNoRnVuY3Rpb25OYW1lKG5vZGUtPmdldE5h
bWUoKSkgPDwgIigiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodmlzaXQg
PT0gSW5WaXNpdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBvdXQgPDwgIikiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wUGFyYW1ldGVyczogeworICAgICAgICAgICAgLy8gRnVuY3Rpb24gcGFy
YW1ldGVycy4KKyAgICAgICAgICAgIEFTU0VSVCh2aXNpdCA9PSBQcmVWaXNpdCk7CisgICAgICAg
ICAgICBvdXQgPDwgIigiOworICAgICAgICAgICAgd3JpdGVGdW5jdGlvblBhcmFtZXRlcnMobm9k
ZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgICAgICBvdXQgPDwgIikiOworICAgICAgICAgICAg
dmlzaXRDaGlsZHJlbiA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBFT3BEZWNsYXJhdGlvbjogeworICAgICAgICAgICAgLy8gVmFyaWFibGUgZGVj
bGFyYXRpb24uCisgICAgICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgY29uc3QgVEludGVybVNlcXVlbmNlJiBzZXF1ZW5jZSA9IG5v
ZGUtPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAgICAgICAgY29uc3QgVEludGVybVR5cGVkKiB2
YXJpYWJsZSA9IHNlcXVlbmNlLmZyb250KCktPmdldEFzVHlwZWQoKTsKKyAgICAgICAgICAgICAg
ICB3cml0ZVZhcmlhYmxlVHlwZSh2YXJpYWJsZS0+Z2V0VHlwZSgpKTsKKyAgICAgICAgICAgICAg
ICBvdXQgPDwgIiAiOworICAgICAgICAgICAgICAgIG1EZWNsYXJpbmdWYXJpYWJsZXMgPSB0cnVl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAgICAgICAgICAg
ICAgICBtRGVjbGFyaW5nVmFyaWFibGVzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGVjbGFyaW5nVmFyaWFi
bGVzID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OiB3cml0ZVRyaXBsZXQodmlzaXQsICJm
bG9hdCgiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMy
OiB3cml0ZVRyaXBsZXQodmlzaXQsICJ2ZWMyKCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAg
ICBjYXNlIEVPcENvbnN0cnVjdFZlYzM6IHdyaXRlVHJpcGxldCh2aXNpdCwgInZlYzMoIiwgIiwg
IiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjNDogd3JpdGVUcmlw
bGV0KHZpc2l0LCAidmVjNCgiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BD
b25zdHJ1Y3RCb29sOiB3cml0ZVRyaXBsZXQodmlzaXQsICJib29sKCIsIE5VTEwsICIpIik7IGJy
ZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMyOiB3cml0ZVRyaXBsZXQodmlzaXQs
ICJidmVjMigiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RC
VmVjMzogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYnZlYzMoIiwgIiwgIiwgIikiKTsgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgImJ2ZWM0
KCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDogd3Jp
dGVUcmlwbGV0KHZpc2l0LCAiaW50KCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNl
IEVPcENvbnN0cnVjdElWZWMyOiB3cml0ZVRyaXBsZXQodmlzaXQsICJpdmVjMigiLCAiLCAiLCAi
KSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMzogd3JpdGVUcmlwbGV0
KHZpc2l0LCAiaXZlYzMoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29u
c3RydWN0SVZlYzQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgIml2ZWM0KCIsICIsICIsICIpIik7IGJy
ZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6IHdyaXRlVHJpcGxldCh2aXNpdCwg
Im1hdDIoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0
Mzogd3JpdGVUcmlwbGV0KHZpc2l0LCAibWF0MygiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQ0OiB3cml0ZVRyaXBsZXQodmlzaXQsICJtYXQ0KCIsICIs
ICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFN0cnVjdDoKKyAgICAg
ICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBjb25zdCBUVHlwZSYgdHlwZSA9IG5vZGUtPmdldFR5cGUoKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpOworICAgICAgICAgICAg
ICAgIG91dCA8PCBoYXNoTmFtZSh0eXBlLmdldFN0cnVjdCgpLT5uYW1lKCkpIDw8ICIoIjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIp
IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9w
TGVzc1RoYW46IHByZVN0cmluZyA9ICJsZXNzVGhhbigiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjogcHJlU3RyaW5nID0gImdyZWF0ZXJU
aGFuKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOworICAgICAgICBjYXNlIEVPcExlc3NU
aGFuRXF1YWw6IHByZVN0cmluZyA9ICJsZXNzVGhhbkVxdWFsKCI7IGRlbGF5ZWRXcml0ZSA9IHRy
dWU7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6IHByZVN0cmluZyA9
ICJncmVhdGVyVGhhbkVxdWFsKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOworICAgICAg
ICBjYXNlIEVPcFZlY3RvckVxdWFsOiBwcmVTdHJpbmcgPSAiZXF1YWwoIjsgZGVsYXllZFdyaXRl
ID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVjdG9yTm90RXF1YWw6IHByZVN0cmlu
ZyA9ICJub3RFcXVhbCgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BDb21tYTogd3JpdGVUcmlwbGV0KHZpc2l0LCBOVUxMLCAiLCAiLCBOVUxMKTsgYnJlYWs7
CisKKyAgICAgICAgY2FzZSBFT3BNb2Q6IHByZVN0cmluZyA9ICJtb2QoIjsgZGVsYXllZFdyaXRl
ID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUG93OiBwcmVTdHJpbmcgPSAicG93KCI7
IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEF0YW46IHByZVN0
cmluZyA9ICJhdGFuKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOworICAgICAgICBjYXNl
IEVPcE1pbjogcHJlU3RyaW5nID0gIm1pbigiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BNYXg6IHByZVN0cmluZyA9ICJtYXgoIjsgZGVsYXllZFdyaXRlID0g
dHJ1ZTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ2xhbXA6IHByZVN0cmluZyA9ICJjbGFtcCgi
OyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNaXg6IHByZVN0
cmluZyA9ICJtaXgoIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wU3RlcDogcHJlU3RyaW5nID0gInN0ZXAoIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wU21vb3RoU3RlcDogcHJlU3RyaW5nID0gInNtb290aHN0ZXAoIjsg
ZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BEaXN0YW5jZTog
cHJlU3RyaW5nID0gImRpc3RhbmNlKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOworICAg
ICAgICBjYXNlIEVPcERvdDogcHJlU3RyaW5nID0gImRvdCgiOyBkZWxheWVkV3JpdGUgPSB0cnVl
OyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDcm9zczogcHJlU3RyaW5nID0gImNyb3NzKCI7IGRl
bGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEZhY2VGb3J3YXJkOiBw
cmVTdHJpbmcgPSAiZmFjZWZvcndhcmQoIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wUmVmbGVjdDogcHJlU3RyaW5nID0gInJlZmxlY3QoIjsgZGVsYXllZFdy
aXRlID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUmVmcmFjdDogcHJlU3RyaW5nID0g
InJlZnJhY3QoIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
TXVsOiBwcmVTdHJpbmcgPSAibWF0cml4Q29tcE11bHQoIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsg
YnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7CisgICAgfQor
ICAgIGlmIChkZWxheWVkV3JpdGUgJiYgdmlzaXQgPT0gUHJlVmlzaXQgJiYgbm9kZS0+Z2V0VXNl
RW11bGF0ZWRGdW5jdGlvbigpKQorICAgICAgICBwcmVTdHJpbmcgPSBCdWlsdEluRnVuY3Rpb25F
bXVsYXRvcjo6R2V0RW11bGF0ZWRGdW5jdGlvbk5hbWUocHJlU3RyaW5nKTsKKyAgICBpZiAoZGVs
YXllZFdyaXRlKQorICAgICAgICB3cml0ZVRyaXBsZXQodmlzaXQsIHByZVN0cmluZy5jX3N0cigp
LCAiLCAiLCAiKSIpOworICAgIHJldHVybiB2aXNpdENoaWxkcmVuOworfQorCitib29sIFRPdXRw
dXRHTFNMQmFzZTo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCogbm9kZSkKK3sK
KyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7CisKKyAgICBpbmNyZW1lbnREZXB0
aChub2RlKTsKKyAgICAvLyBMb29wIGhlYWRlci4KKyAgICBUTG9vcFR5cGUgbG9vcFR5cGUgPSBu
b2RlLT5nZXRUeXBlKCk7CisgICAgaWYgKGxvb3BUeXBlID09IEVMb29wRm9yKSAgLy8gZm9yIGxv
b3AKKyAgICB7CisgICAgICAgIGlmICghbm9kZS0+Z2V0VW5yb2xsRmxhZygpKSB7CisgICAgICAg
ICAgICBvdXQgPDwgImZvciAoIjsKKyAgICAgICAgICAgIGlmIChub2RlLT5nZXRJbml0KCkpCisg
ICAgICAgICAgICAgICAgbm9kZS0+Z2V0SW5pdCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAg
ICAgIG91dCA8PCAiOyAiOworCisgICAgICAgICAgICBpZiAobm9kZS0+Z2V0Q29uZGl0aW9uKCkp
CisgICAgICAgICAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOwor
ICAgICAgICAgICAgb3V0IDw8ICI7ICI7CisKKyAgICAgICAgICAgIGlmIChub2RlLT5nZXRFeHBy
ZXNzaW9uKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Z2V0RXhwcmVzc2lvbigpLT50cmF2ZXJz
ZSh0aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAiKVxuIjsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBlbHNlIGlmIChsb29wVHlwZSA9PSBFTG9vcFdoaWxlKSAgLy8gd2hpbGUgbG9vcAorICAgIHsK
KyAgICAgICAgb3V0IDw8ICJ3aGlsZSAoIjsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmdldENvbmRp
dGlvbigpICE9IE5VTEwpOworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2Uo
dGhpcyk7CisgICAgICAgIG91dCA8PCAiKVxuIjsKKyAgICB9CisgICAgZWxzZSAgLy8gZG8td2hp
bGUgbG9vcAorICAgIHsKKyAgICAgICAgQVNTRVJUKGxvb3BUeXBlID09IEVMb29wRG9XaGlsZSk7
CisgICAgICAgIG91dCA8PCAiZG9cbiI7CisgICAgfQorCisgICAgLy8gTG9vcCBib2R5LgorICAg
IGlmIChub2RlLT5nZXRVbnJvbGxGbGFnKCkpCisgICAgeworICAgICAgICBUTG9vcEluZGV4SW5m
byBpbmRleEluZm87CisgICAgICAgIG1Mb29wVW5yb2xsLkZpbGxMb29wSW5kZXhJbmZvKG5vZGUs
IGluZGV4SW5mbyk7CisgICAgICAgIG1Mb29wVW5yb2xsLlB1c2goaW5kZXhJbmZvKTsKKyAgICAg
ICAgd2hpbGUgKG1Mb29wVW5yb2xsLlNhdGlzZmllc0xvb3BDb25kaXRpb24oKSkKKyAgICAgICAg
eworICAgICAgICAgICAgdmlzaXRDb2RlQmxvY2sobm9kZS0+Z2V0Qm9keSgpKTsKKyAgICAgICAg
ICAgIG1Mb29wVW5yb2xsLlN0ZXAoKTsKKyAgICAgICAgfQorICAgICAgICBtTG9vcFVucm9sbC5Q
b3AoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdmlzaXRDb2RlQmxvY2sobm9k
ZS0+Z2V0Qm9keSgpKTsKKyAgICB9CisKKyAgICAvLyBMb29wIGZvb3Rlci4KKyAgICBpZiAobG9v
cFR5cGUgPT0gRUxvb3BEb1doaWxlKSAgLy8gZG8td2hpbGUgbG9vcAorICAgIHsKKyAgICAgICAg
b3V0IDw8ICJ3aGlsZSAoIjsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmdldENvbmRpdGlvbigpICE9
IE5VTEwpOworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7Cisg
ICAgICAgIG91dCA8PCAiKTtcbiI7CisgICAgfQorICAgIGRlY3JlbWVudERlcHRoKCk7CisKKyAg
ICAvLyBObyBuZWVkIHRvIHZpc2l0IGNoaWxkcmVuLiBUaGV5IGhhdmUgYmVlbiBhbHJlYWR5IHBy
b2Nlc3NlZCBpbgorICAgIC8vIHRoaXMgZnVuY3Rpb24uCisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1C
cmFuY2gqIG5vZGUpCit7CisgICAgc3dpdGNoIChub2RlLT5nZXRGbG93T3AoKSkKKyAgICB7Cisg
ICAgICAgIGNhc2UgRU9wS2lsbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZGlzY2FyZCIsIE5VTEws
IE5VTEwpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BCcmVhazogd3JpdGVUcmlwbGV0KHZpc2l0
LCAiYnJlYWsiLCBOVUxMLCBOVUxMKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udGludWU6
IHdyaXRlVHJpcGxldCh2aXNpdCwgImNvbnRpbnVlIiwgTlVMTCwgTlVMTCk7IGJyZWFrOworICAg
ICAgICBjYXNlIEVPcFJldHVybjogd3JpdGVUcmlwbGV0KHZpc2l0LCAicmV0dXJuICIsIE5VTEws
IE5VTEwpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgVE91dHB1dEdMU0xCYXNlOjp2aXNp
dENvZGVCbG9jayhUSW50ZXJtTm9kZSogbm9kZSkgeworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9
IG9ialNpbmsoKTsKKyAgICBpZiAobm9kZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbm9kZS0+
dHJhdmVyc2UodGhpcyk7CisgICAgICAgIC8vIFNpbmdsZSBzdGF0ZW1lbnRzIG5vdCBwYXJ0IG9m
IGEgc2VxdWVuY2UgbmVlZCB0byBiZSB0ZXJtaW5hdGVkCisgICAgICAgIC8vIHdpdGggc2VtaS1j
b2xvbi4KKyAgICAgICAgaWYgKGlzU2luZ2xlU3RhdGVtZW50KG5vZGUpKQorICAgICAgICAgICAg
b3V0IDw8ICI7XG4iOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBvdXQgPDwgIntc
bn1cbiI7ICAvLyBFbXB0eSBjb2RlIGJsb2NrLgorICAgIH0KK30KKworVFN0cmluZyBUT3V0cHV0
R0xTTEJhc2U6OmdldFR5cGVOYW1lKGNvbnN0IFRUeXBlJiB0eXBlKQoreworICAgIFRJbmZvU2lu
a0Jhc2Ugb3V0OworICAgIGlmICh0eXBlLmlzTWF0cml4KCkpCisgICAgeworICAgICAgICBvdXQg
PDwgIm1hdCI7CisgICAgICAgIG91dCA8PCB0eXBlLmdldE5vbWluYWxTaXplKCk7CisgICAgfQor
ICAgIGVsc2UgaWYgKHR5cGUuaXNWZWN0b3IoKSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlw
ZS5nZXRCYXNpY1R5cGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDog
b3V0IDw8ICJ2ZWMiOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0SW50OiBvdXQgPDwgIml2
ZWMiOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogb3V0IDw8ICJidmVjIjsgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBvdXQgPDwgdHlwZS5nZXROb21pbmFsU2l6ZSgpOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisg
ICAgICAgICAgICBvdXQgPDwgaGFzaE5hbWUodHlwZS5nZXRTdHJ1Y3QoKS0+bmFtZSgpKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgb3V0IDw8IHR5cGUuZ2V0QmFzaWNTdHJpbmcoKTsKKyAg
ICB9CisgICAgcmV0dXJuIFRTdHJpbmcob3V0LmNfc3RyKCkpOworfQorCitUU3RyaW5nIFRPdXRw
dXRHTFNMQmFzZTo6aGFzaE5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobUhh
c2hGdW5jdGlvbiA9PSBOVUxMIHx8IG5hbWUuZW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG5hbWU7
CisgICAgTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtTmFtZU1hcC5maW5kKG5hbWUuY19z
dHIoKSk7CisgICAgaWYgKGl0ICE9IG1OYW1lTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gaXQt
PnNlY29uZC5jX3N0cigpOworICAgIFRTdHJpbmcgaGFzaGVkTmFtZSA9IFRJbnRlcm1UcmF2ZXJz
ZXI6Omhhc2gobmFtZSwgbUhhc2hGdW5jdGlvbik7CisgICAgbU5hbWVNYXBbbmFtZS5jX3N0cigp
XSA9IGhhc2hlZE5hbWUuY19zdHIoKTsKKyAgICByZXR1cm4gaGFzaGVkTmFtZTsKK30KKworVFN0
cmluZyBUT3V0cHV0R0xTTEJhc2U6Omhhc2hWYXJpYWJsZU5hbWUoY29uc3QgVFN0cmluZyYgbmFt
ZSkKK3sKKyAgICBpZiAobVN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKG5hbWUpICE9IE5VTEwpCisg
ICAgICAgIHJldHVybiBuYW1lOworICAgIHJldHVybiBoYXNoTmFtZShuYW1lKTsKK30KKworVFN0
cmluZyBUT3V0cHV0R0xTTEJhc2U6Omhhc2hGdW5jdGlvbk5hbWUoY29uc3QgVFN0cmluZyYgbWFu
Z2xlZF9uYW1lKQoreworICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1l
KG1hbmdsZWRfbmFtZSk7CisgICAgaWYgKG1TeW1ib2xUYWJsZS5maW5kQnVpbHRJbihtYW5nbGVk
X25hbWUpICE9IE5VTEwgfHwgbmFtZSA9PSAibWFpbiIpCisgICAgICAgIHJldHVybiBuYW1lOwor
ICAgIHJldHVybiBoYXNoTmFtZShuYW1lKTsKK30KKworYm9vbCBUT3V0cHV0R0xTTEJhc2U6OnN0
cnVjdERlY2xhcmVkKGNvbnN0IFRTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbURlY2xhcmVkU3RydWN0cy5maW5kKHN0cnVjdHVyZS0+bmFtZSgpKSAhPSBtRGVjbGFy
ZWRTdHJ1Y3RzLmVuZCgpOworfQorCit2b2lkIFRPdXRwdXRHTFNMQmFzZTo6ZGVjbGFyZVN0cnVj
dChjb25zdCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0
ID0gb2JqU2luaygpOworCisgICAgb3V0IDw8ICJzdHJ1Y3QgIiA8PCBoYXNoTmFtZShzdHJ1Y3R1
cmUtPm5hbWUoKSkgPDwgIntcbiI7CisgICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRzID0gc3Ry
dWN0dXJlLT5maWVsZHMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpZWxkcy5zaXpl
KCk7ICsraSkKKyAgICB7CisgICAgICAgIGNvbnN0IFRGaWVsZCogZmllbGQgPSBmaWVsZHNbaV07
CisgICAgICAgIGlmICh3cml0ZVZhcmlhYmxlUHJlY2lzaW9uKGZpZWxkLT50eXBlKCktPmdldFBy
ZWNpc2lvbigpKSkKKyAgICAgICAgICAgIG91dCA8PCAiICI7CisgICAgICAgIG91dCA8PCBnZXRU
eXBlTmFtZSgqZmllbGQtPnR5cGUoKSkgPDwgIiAiIDw8IGhhc2hOYW1lKGZpZWxkLT5uYW1lKCkp
OworICAgICAgICBpZiAoZmllbGQtPnR5cGUoKS0+aXNBcnJheSgpKQorICAgICAgICAgICAgb3V0
IDw8IGFycmF5QnJhY2tldHMoKmZpZWxkLT50eXBlKCkpOworICAgICAgICBvdXQgPDwgIjtcbiI7
CisgICAgfQorICAgIG91dCA8PCAifSI7CisKKyAgICBtRGVjbGFyZWRTdHJ1Y3RzLmluc2VydChz
dHJ1Y3R1cmUtPm5hbWUoKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMQmFzZS5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43NmJlYzRkZTYxZTA0MWFjMThkYWVmMTIwZmVkYzNmZGJjZDlkOTgzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvT3V0cHV0R0xTTEJhc2UuaApAQCAtMCwwICsxLDc5IEBACisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaWZuZGVmIENST1NTQ09NUElMRVJHTFNMX09VVFBVVEdMU0xCQVNFX0hfCisjZGVmaW5lIENS
T1NTQ09NUElMRVJHTFNMX09VVFBVVEdMU0xCQVNFX0hfCisKKyNpbmNsdWRlIDxzZXQ+CisKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCisKK2NsYXNzIFRPdXRwdXRHTFNMQmFzZSA6IHB1Ymxp
YyBUSW50ZXJtVHJhdmVyc2VyCit7CitwdWJsaWM6CisgICAgVE91dHB1dEdMU0xCYXNlKFRJbmZv
U2lua0Jhc2UmIG9ialNpbmssCisgICAgICAgICAgICAgICAgICAgIFNoQXJyYXlJbmRleENsYW1w
aW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJhdGVneSwKKyAgICAgICAgICAgICAgICAgICAgU2hIYXNo
RnVuY3Rpb242NCBoYXNoRnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5h
bWVNYXAsCisgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpOwor
Citwcm90ZWN0ZWQ6CisgICAgVEluZm9TaW5rQmFzZSYgb2JqU2luaygpIHsgcmV0dXJuIG1PYmpT
aW5rOyB9CisgICAgdm9pZCB3cml0ZVRyaXBsZXQoVmlzaXQgdmlzaXQsIGNvbnN0IGNoYXIqIHBy
ZVN0ciwgY29uc3QgY2hhciogaW5TdHIsIGNvbnN0IGNoYXIqIHBvc3RTdHIpOworICAgIHZvaWQg
d3JpdGVWYXJpYWJsZVR5cGUoY29uc3QgVFR5cGUmIHR5cGUpOworICAgIHZpcnR1YWwgYm9vbCB3
cml0ZVZhcmlhYmxlUHJlY2lzaW9uKFRQcmVjaXNpb24gcHJlY2lzaW9uKSA9IDA7CisgICAgdm9p
ZCB3cml0ZUZ1bmN0aW9uUGFyYW1ldGVycyhjb25zdCBUSW50ZXJtU2VxdWVuY2UmIGFyZ3MpOwor
ICAgIGNvbnN0IENvbnN0YW50VW5pb24qIHdyaXRlQ29uc3RhbnRVbmlvbihjb25zdCBUVHlwZSYg
dHlwZSwgY29uc3QgQ29uc3RhbnRVbmlvbiogcENvbnN0VW5pb24pOworICAgIFRTdHJpbmcgZ2V0
VHlwZU5hbWUoY29uc3QgVFR5cGUmIHR5cGUpOworCisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3lt
Ym9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdENvbnN0YW50
VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qIG5vZGUpOworICAgIHZpcnR1YWwgYm9vbCB2aXNp
dEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSogbm9kZSk7CisgICAgdmlydHVhbCBi
b29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSogbm9kZSk7CisgICAgdmly
dHVhbCBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBu
b2RlKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRl
cm1BZ2dyZWdhdGUqIG5vZGUpOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlz
aXQsIFRJbnRlcm1Mb29wKiBub2RlKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCcmFuY2goVmlz
aXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqIG5vZGUpOworCisgICAgdm9pZCB2aXNpdENvZGVCbG9j
ayhUSW50ZXJtTm9kZSogbm9kZSk7CisKKworICAgIC8vIFJldHVybiB0aGUgb3JpZ2luYWwgbmFt
ZSBpZiBoYXNoIGZ1bmN0aW9uIHBvaW50ZXIgaXMgTlVMTDsKKyAgICAvLyBvdGhlcndpc2UgcmV0
dXJuIHRoZSBoYXNoZWQgbmFtZS4KKyAgICBUU3RyaW5nIGhhc2hOYW1lKGNvbnN0IFRTdHJpbmcm
IG5hbWUpOworICAgIC8vIFNhbWUgYXMgaGFzaE5hbWUoKSwgYnV0IHdpdGhvdXQgaGFzaGluZyBi
dWlsdC1pbiB2YXJpYWJsZXMuCisgICAgVFN0cmluZyBoYXNoVmFyaWFibGVOYW1lKGNvbnN0IFRT
dHJpbmcmIG5hbWUpOworICAgIC8vIFNhbWUgYXMgaGFzaE5hbWUoKSwgYnV0IHdpdGhvdXQgaGFz
aGluZyBidWlsdC1pbiBmdW5jdGlvbnMuCisgICAgVFN0cmluZyBoYXNoRnVuY3Rpb25OYW1lKGNv
bnN0IFRTdHJpbmcmIG1hbmdsZWRfbmFtZSk7CisKK3ByaXZhdGU6CisgICAgYm9vbCBzdHJ1Y3RE
ZWNsYXJlZChjb25zdCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0OworICAgIHZvaWQgZGVj
bGFyZVN0cnVjdChjb25zdCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUpOworCisgICAgVEluZm9TaW5r
QmFzZSYgbU9ialNpbms7CisgICAgYm9vbCBtRGVjbGFyaW5nVmFyaWFibGVzOworCisgICAgLy8g
U3RydWN0cyBhcmUgZGVjbGFyZWQgYXMgdGhlIHRyZWUgaXMgdHJhdmVyc2VkLiBUaGlzIHNldCBj
b250YWlucyBhbGwKKyAgICAvLyB0aGUgc3RydWN0cyBhbHJlYWR5IGRlY2xhcmVkLiBJdCBpcyBt
YWludGFpbmVkIHNvIHRoYXQgYSBzdHJ1Y3QgaXMKKyAgICAvLyBkZWNsYXJlZCBvbmx5IG9uY2Uu
CisgICAgdHlwZWRlZiBzdGQ6OnNldDxUU3RyaW5nPiBEZWNsYXJlZFN0cnVjdHM7CisgICAgRGVj
bGFyZWRTdHJ1Y3RzIG1EZWNsYXJlZFN0cnVjdHM7CisKKyAgICBGb3JMb29wVW5yb2xsIG1Mb29w
VW5yb2xsOworCisgICAgU2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBtQ2xhbXBpbmdTdHJh
dGVneTsKKworICAgIC8vIG5hbWUgaGFzaGluZy4KKyAgICBTaEhhc2hGdW5jdGlvbjY0IG1IYXNo
RnVuY3Rpb247CisKKyAgICBOYW1lTWFwJiBtTmFtZU1hcDsKKworICAgIFRTeW1ib2xUYWJsZSYg
bVN5bWJvbFRhYmxlOworfTsKKworI2VuZGlmICAvLyBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRH
TFNMQkFTRV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvT3V0cHV0SExTTC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRITFNMLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZjk5NmRm
NzE5ZmM0ZmFmZjhhMGE1MjBjYzdlODNhOGMyZDdhNzc5Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0SExTTC5j
cHAKQEAgLTAsMCArMSwzMTM4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9PdXRwdXRITFNMLmgiCisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1
dGlscy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvY29tcGlsZXJkZWJ1Zy5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0RGlzY29udGludWl0eS5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1NlYXJjaFN5bWJvbC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvVW5mb2xkU2hvcnRDaXJjdWl0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9O
b2RlU2VhcmNoLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9SZXdyaXRlRWxzZUJs
b2Nrcy5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNmbG9hdD4KKyNpbmNs
dWRlIDxzdGRpby5oPgorCituYW1lc3BhY2Ugc2gKK3sKKworT3V0cHV0SExTTDo6T3V0cHV0SExT
TChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291
cmNlcywgU2hTaGFkZXJPdXRwdXQgb3V0cHV0VHlwZSkKKyAgICA6IFRJbnRlcm1UcmF2ZXJzZXIo
dHJ1ZSwgdHJ1ZSwgdHJ1ZSksIG1Db250ZXh0KGNvbnRleHQpLCBtT3V0cHV0VHlwZShvdXRwdXRU
eXBlKQoreworICAgIG1VbmZvbGRTaG9ydENpcmN1aXQgPSBuZXcgVW5mb2xkU2hvcnRDaXJjdWl0
KGNvbnRleHQsIHRoaXMpOworICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNlOworCisgICAgbVVz
ZXNUZXh0dXJlMkQgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmUyRF9iaWFzID0gZmFsc2U7Cisg
ICAgbVVzZXNUZXh0dXJlMkRQcm9qID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRQcm9qX2Jp
YXMgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QgPSBmYWxzZTsKKyAgICBtVXNl
c1RleHR1cmUyRExvZCA9IGZhbHNlOworICAgIG1Vc2VzVGV4dHVyZUN1YmUgPSBmYWxzZTsKKyAg
ICBtVXNlc1RleHR1cmVDdWJlX2JpYXMgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmVDdWJlTG9k
ID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRMb2QwID0gZmFsc2U7CisgICAgbVVzZXNUZXh0
dXJlMkRMb2QwX2JpYXMgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QwID0gZmFs
c2U7CisgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzID0gZmFsc2U7CisgICAgbVVzZXNU
ZXh0dXJlQ3ViZUxvZDAgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzID0g
ZmFsc2U7CisgICAgbVVzZXNGcmFnQ29sb3IgPSBmYWxzZTsKKyAgICBtVXNlc0ZyYWdEYXRhID0g
ZmFsc2U7CisgICAgbVVzZXNEZXB0aFJhbmdlID0gZmFsc2U7CisgICAgbVVzZXNGcmFnQ29vcmQg
PSBmYWxzZTsKKyAgICBtVXNlc1BvaW50Q29vcmQgPSBmYWxzZTsKKyAgICBtVXNlc0Zyb250RmFj
aW5nID0gZmFsc2U7CisgICAgbVVzZXNQb2ludFNpemUgPSBmYWxzZTsKKyAgICBtVXNlc0ZyYWdE
ZXB0aCA9IGZhbHNlOworICAgIG1Vc2VzWG9yID0gZmFsc2U7CisgICAgbVVzZXNNb2QxID0gZmFs
c2U7CisgICAgbVVzZXNNb2QydiA9IGZhbHNlOworICAgIG1Vc2VzTW9kMmYgPSBmYWxzZTsKKyAg
ICBtVXNlc01vZDN2ID0gZmFsc2U7CisgICAgbVVzZXNNb2QzZiA9IGZhbHNlOworICAgIG1Vc2Vz
TW9kNHYgPSBmYWxzZTsKKyAgICBtVXNlc01vZDRmID0gZmFsc2U7CisgICAgbVVzZXNGYWNlZm9y
d2FyZDEgPSBmYWxzZTsKKyAgICBtVXNlc0ZhY2Vmb3J3YXJkMiA9IGZhbHNlOworICAgIG1Vc2Vz
RmFjZWZvcndhcmQzID0gZmFsc2U7CisgICAgbVVzZXNGYWNlZm9yd2FyZDQgPSBmYWxzZTsKKyAg
ICBtVXNlc0F0YW4yXzEgPSBmYWxzZTsKKyAgICBtVXNlc0F0YW4yXzIgPSBmYWxzZTsKKyAgICBt
VXNlc0F0YW4yXzMgPSBmYWxzZTsKKyAgICBtVXNlc0F0YW4yXzQgPSBmYWxzZTsKKyAgICBtVXNl
c0Rpc2NhcmRSZXdyaXRpbmcgPSBmYWxzZTsKKworICAgIG1OdW1SZW5kZXJUYXJnZXRzID0gcmVz
b3VyY2VzLkVYVF9kcmF3X2J1ZmZlcnMgPyByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgOiAxOwor
CisgICAgbVNjb3BlRGVwdGggPSAwOworCisgICAgbVVuaXF1ZUluZGV4ID0gMDsKKworICAgIG1D
b250YWluc0xvb3BEaXNjb250aW51aXR5ID0gZmFsc2U7CisgICAgbU91dHB1dExvZDBGdW5jdGlv
biA9IGZhbHNlOworICAgIG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCA9IGZhbHNlOworCisgICAg
bUV4Y2Vzc2l2ZUxvb3BJbmRleCA9IE5VTEw7CisKKyAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hf
SExTTDlfT1VUUFVUKQorICAgIHsKKyAgICAgICAgaWYgKG1Db250ZXh0LnNoYWRlclR5cGUgPT0g
U0hfRlJBR01FTlRfU0hBREVSKQorICAgICAgICB7CisgICAgICAgICAgICBtVW5pZm9ybVJlZ2lz
dGVyID0gMzsgICAvLyBSZXNlcnZlIHJlZ2lzdGVycyBmb3IgZHhfRGVwdGhSYW5nZSwgZHhfVmll
d0Nvb3JkcyBhbmQgZHhfRGVwdGhGcm9udAorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgbVVuaWZvcm1SZWdpc3RlciA9IDI7ICAgLy8gUmVzZXJ2ZSByZWdp
c3RlcnMgZm9yIGR4X0RlcHRoUmFuZ2UgYW5kIGR4X1ZpZXdBZGp1c3QKKyAgICAgICAgfQorICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtVW5pZm9ybVJlZ2lzdGVyID0gMDsKKyAgICB9
CisKKyAgICBtU2FtcGxlclJlZ2lzdGVyID0gMDsKK30KKworT3V0cHV0SExTTDo6fk91dHB1dEhM
U0woKQoreworICAgIGRlbGV0ZSBtVW5mb2xkU2hvcnRDaXJjdWl0OworfQorCit2b2lkIE91dHB1
dEhMU0w6Om91dHB1dCgpCit7CisgICAgbUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkgPSBtQ29u
dGV4dC5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUiAmJiBjb250YWluc0xvb3BEaXNj
b250aW51aXR5KG1Db250ZXh0LnRyZWVSb290KTsKKworICAgIC8vIFdvcmsgYXJvdW5kIEQzRDkg
YnVnIHRoYXQgd291bGQgbWFuaWZlc3QgaW4gdmVydGV4IHNoYWRlcnMgd2l0aCBzZWxlY3Rpb24g
YmxvY2tzIHdoaWNoCisgICAgLy8gdXNlIGEgdmVydGV4IGF0dHJpYnV0ZSBhcyBhIGNvbmRpdGlv
biwgYW5kIHNvbWUgcmVsYXRlZCBjb21wdXRhdGlvbiBpbiB0aGUgZWxzZSBibG9jay4KKyAgICBp
ZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUICYmIG1Db250ZXh0LnNoYWRlclR5cGUg
PT0gU0hfVkVSVEVYX1NIQURFUikKKyAgICB7CisgICAgICAgIFJld3JpdGVFbHNlQmxvY2tzKG1D
b250ZXh0LnRyZWVSb290KTsKKyAgICB9CisKKyAgICBtQ29udGV4dC50cmVlUm9vdC0+dHJhdmVy
c2UodGhpcyk7ICAgLy8gT3V0cHV0IHRoZSBib2R5IGZpcnN0IHRvIGRldGVybWluZSB3aGF0IGhh
cyB0byBnbyBpbiB0aGUgaGVhZGVyCisgICAgaGVhZGVyKCk7CisKKyAgICBtQ29udGV4dC5pbmZv
U2luaygpLm9iaiA8PCBtSGVhZGVyLmNfc3RyKCk7CisgICAgbUNvbnRleHQuaW5mb1NpbmsoKS5v
YmogPDwgbUJvZHkuY19zdHIoKTsKK30KKworVEluZm9TaW5rQmFzZSAmT3V0cHV0SExTTDo6Z2V0
Qm9keVN0cmVhbSgpCit7CisgICAgcmV0dXJuIG1Cb2R5OworfQorCitjb25zdCBBY3RpdmVVbmlm
b3JtcyAmT3V0cHV0SExTTDo6Z2V0VW5pZm9ybXMoKQoreworICAgIHJldHVybiBtQWN0aXZlVW5p
Zm9ybXM7Cit9CisKK2ludCBPdXRwdXRITFNMOjp2ZWN0b3JTaXplKGNvbnN0IFRUeXBlICZ0eXBl
KSBjb25zdAoreworICAgIGludCBlbGVtZW50U2l6ZSA9IHR5cGUuaXNNYXRyaXgoKSA/IHR5cGUu
Z2V0Tm9taW5hbFNpemUoKSA6IDE7CisgICAgaW50IGFycmF5U2l6ZSA9IHR5cGUuaXNBcnJheSgp
ID8gdHlwZS5nZXRBcnJheVNpemUoKSA6IDE7CisKKyAgICByZXR1cm4gZWxlbWVudFNpemUgKiBh
cnJheVNpemU7Cit9CisKK3ZvaWQgT3V0cHV0SExTTDo6aGVhZGVyKCkKK3sKKyAgICBTaFNoYWRl
clR5cGUgc2hhZGVyVHlwZSA9IG1Db250ZXh0LnNoYWRlclR5cGU7CisgICAgVEluZm9TaW5rQmFz
ZSAmb3V0ID0gbUhlYWRlcjsKKworICAgIGZvciAoU3RydWN0RGVjbGFyYXRpb25zOjppdGVyYXRv
ciBzdHJ1Y3REZWNsYXJhdGlvbiA9IG1TdHJ1Y3REZWNsYXJhdGlvbnMuYmVnaW4oKTsgc3RydWN0
RGVjbGFyYXRpb24gIT0gbVN0cnVjdERlY2xhcmF0aW9ucy5lbmQoKTsgc3RydWN0RGVjbGFyYXRp
b24rKykKKyAgICB7CisgICAgICAgIG91dCA8PCAqc3RydWN0RGVjbGFyYXRpb247CisgICAgfQor
CisgICAgZm9yIChDb25zdHJ1Y3RvcnM6Oml0ZXJhdG9yIGNvbnN0cnVjdG9yID0gbUNvbnN0cnVj
dG9ycy5iZWdpbigpOyBjb25zdHJ1Y3RvciAhPSBtQ29uc3RydWN0b3JzLmVuZCgpOyBjb25zdHJ1
Y3RvcisrKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICpjb25zdHJ1Y3RvcjsKKyAgICB9CisKKyAg
ICBUU3RyaW5nIHVuaWZvcm1zOworICAgIFRTdHJpbmcgdmFyeWluZ3M7CisgICAgVFN0cmluZyBh
dHRyaWJ1dGVzOworCisgICAgZm9yIChSZWZlcmVuY2VkU3ltYm9sczo6Y29uc3RfaXRlcmF0b3Ig
dW5pZm9ybSA9IG1SZWZlcmVuY2VkVW5pZm9ybXMuYmVnaW4oKTsgdW5pZm9ybSAhPSBtUmVmZXJl
bmNlZFVuaWZvcm1zLmVuZCgpOyB1bmlmb3JtKyspCisgICAgeworICAgICAgICBjb25zdCBUVHlw
ZSAmdHlwZSA9IHVuaWZvcm0tPnNlY29uZC0+Z2V0VHlwZSgpOworICAgICAgICBjb25zdCBUU3Ry
aW5nICZuYW1lID0gdW5pZm9ybS0+c2Vjb25kLT5nZXRTeW1ib2woKTsKKworICAgICAgICBpZiAo
bU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCAmJiBJc1NhbXBsZXIodHlwZS5nZXRCYXNp
Y1R5cGUoKSkpICAgLy8gQWxzbyBkZWNsYXJlIHRoZSB0ZXh0dXJlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGludCBpbmRleCA9IHNhbXBsZXJSZWdpc3RlcihtUmVmZXJlbmNlZFVuaWZvcm1zW25h
bWVdKTsKKworICAgICAgICAgICAgdW5pZm9ybXMgKz0gInVuaWZvcm0gU2FtcGxlclN0YXRlIHNh
bXBsZXJfIiArIGRlY29yYXRlVW5pZm9ybShuYW1lLCB0eXBlKSArIGFycmF5U3RyaW5nKHR5cGUp
ICsgCisgICAgICAgICAgICAgICAgICAgICAgICAiIDogcmVnaXN0ZXIocyIgKyBzdHIoaW5kZXgp
ICsgIik7XG4iOworCisgICAgICAgICAgICB1bmlmb3JtcyArPSAidW5pZm9ybSAiICsgdGV4dHVy
ZVN0cmluZyh0eXBlKSArICIgdGV4dHVyZV8iICsgZGVjb3JhdGVVbmlmb3JtKG5hbWUsIHR5cGUp
ICsgYXJyYXlTdHJpbmcodHlwZSkgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICIgOiByZWdp
c3Rlcih0IiArIHN0cihpbmRleCkgKyAiKTtcbiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICB1bmlmb3JtcyArPSAidW5pZm9ybSAiICsgdHlwZVN0cmlu
Zyh0eXBlKSArICIgIiArIGRlY29yYXRlVW5pZm9ybShuYW1lLCB0eXBlKSArIGFycmF5U3RyaW5n
KHR5cGUpICsgCisgICAgICAgICAgICAgICAgICAgICAgICAiIDogcmVnaXN0ZXIoIiArIHJlZ2lz
dGVyU3RyaW5nKG1SZWZlcmVuY2VkVW5pZm9ybXNbbmFtZV0pICsgIik7XG4iOworICAgICAgICB9
CisgICAgfQorCisgICAgZm9yIChSZWZlcmVuY2VkU3ltYm9sczo6Y29uc3RfaXRlcmF0b3IgdmFy
eWluZyA9IG1SZWZlcmVuY2VkVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBtUmVmZXJlbmNl
ZFZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCisgICAgeworICAgICAgICBjb25zdCBUVHlwZSAm
dHlwZSA9IHZhcnlpbmctPnNlY29uZC0+Z2V0VHlwZSgpOworICAgICAgICBjb25zdCBUU3RyaW5n
ICZuYW1lID0gdmFyeWluZy0+c2Vjb25kLT5nZXRTeW1ib2woKTsKKworICAgICAgICAvLyBQcm9n
cmFtIGxpbmtpbmcgZGVwZW5kcyBvbiB0aGlzIGV4YWN0IGZvcm1hdAorICAgICAgICB2YXJ5aW5n
cyArPSAic3RhdGljICIgKyB0eXBlU3RyaW5nKHR5cGUpICsgIiAiICsgZGVjb3JhdGUobmFtZSkg
KyBhcnJheVN0cmluZyh0eXBlKSArICIgPSAiICsgaW5pdGlhbGl6ZXIodHlwZSkgKyAiO1xuIjsK
KyAgICB9CisKKyAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpjb25zdF9pdGVyYXRvciBhdHRy
aWJ1dGUgPSBtUmVmZXJlbmNlZEF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1SZWZl
cmVuY2VkQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgeworICAgICAgICBjb25z
dCBUVHlwZSAmdHlwZSA9IGF0dHJpYnV0ZS0+c2Vjb25kLT5nZXRUeXBlKCk7CisgICAgICAgIGNv
bnN0IFRTdHJpbmcgJm5hbWUgPSBhdHRyaWJ1dGUtPnNlY29uZC0+Z2V0U3ltYm9sKCk7CisKKyAg
ICAgICAgYXR0cmlidXRlcyArPSAic3RhdGljICIgKyB0eXBlU3RyaW5nKHR5cGUpICsgIiAiICsg
ZGVjb3JhdGUobmFtZSkgKyBhcnJheVN0cmluZyh0eXBlKSArICIgPSAiICsgaW5pdGlhbGl6ZXIo
dHlwZSkgKyAiO1xuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNEaXNjYXJkUmV3cml0aW5nKQor
ICAgIHsKKyAgICAgICAgb3V0IDw8ICIjZGVmaW5lIEFOR0xFX1VTRVNfRElTQ0FSRF9SRVdSSVRJ
TkciIDw8ICJcbiI7CisgICAgfQorCisgICAgaWYgKHNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRf
U0hBREVSKQorICAgIHsKKyAgICAgICAgVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRv
ciBpdGVyID0gbUNvbnRleHQuZXh0ZW5zaW9uQmVoYXZpb3IoKS5maW5kKCJHTF9FWFRfZHJhd19i
dWZmZXJzIik7CisgICAgICAgIGNvbnN0IGJvb2wgdXNpbmdNUlRFeHRlbnNpb24gPSAoaXRlciAh
PSBtQ29udGV4dC5leHRlbnNpb25CZWhhdmlvcigpLmVuZCgpICYmIChpdGVyLT5zZWNvbmQgPT0g
RUJoRW5hYmxlIHx8IGl0ZXItPnNlY29uZCA9PSBFQmhSZXF1aXJlKSk7CisKKyAgICAgICAgY29u
c3QgdW5zaWduZWQgaW50IG51bUNvbG9yVmFsdWVzID0gdXNpbmdNUlRFeHRlbnNpb24gPyBtTnVt
UmVuZGVyVGFyZ2V0cyA6IDE7CisKKyAgICAgICAgb3V0IDw8ICIvLyBWYXJ5aW5nc1xuIjsKKyAg
ICAgICAgb3V0IDw8ICB2YXJ5aW5nczsKKyAgICAgICAgb3V0IDw8ICJcbiIKKyAgICAgICAgICAg
ICAgICJzdGF0aWMgZmxvYXQ0IGdsX0NvbG9yWyIgPDwgbnVtQ29sb3JWYWx1ZXMgPDwgIl0gPVxu
IgorICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgbnVtQ29sb3JWYWx1ZXM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8
ICIgICAgZmxvYXQ0KDAsIDAsIDAsIDApIjsKKyAgICAgICAgICAgIGlmIChpICsgMSAhPSBudW1D
b2xvclZhbHVlcykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiwiOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0IDw8ICJcbiI7CisgICAgICAgIH0KKyAgICAg
ICAgb3V0IDw8ICJ9O1xuIjsKKworICAgICAgICBpZiAobVVzZXNGcmFnRGVwdGgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGZsb2F0IGdsX0RlcHRoID0gMC4wO1xuIjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc0ZyYWdDb29yZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgb3V0IDw8ICJzdGF0aWMgZmxvYXQ0IGdsX0ZyYWdDb29yZCA9IGZsb2F0NCgwLCAw
LCAwLCAwKTtcbiI7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNQb2ludENvb3JkKQor
ICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgInN0YXRpYyBmbG9hdDIgZ2xfUG9pbnRDb29y
ZCA9IGZsb2F0MigwLjUsIDAuNSk7XG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2Vz
RnJvbnRGYWNpbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGJvb2wg
Z2xfRnJvbnRGYWNpbmcgPSBmYWxzZTtcbiI7CisgICAgICAgIH0KKworICAgICAgICBvdXQgPDwg
IlxuIjsKKworICAgICAgICBpZiAobVVzZXNEZXB0aFJhbmdlKQorICAgICAgICB7CisgICAgICAg
ICAgICBvdXQgPDwgInN0cnVjdCBnbF9EZXB0aFJhbmdlUGFyYW1ldGVyc1xuIgorICAgICAgICAg
ICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBuZWFyO1xuIgor
ICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZmFyO1xuIgorICAgICAgICAgICAgICAgICAg
ICIgICAgZmxvYXQgZGlmZjtcbiIKKyAgICAgICAgICAgICAgICAgICAifTtcbiIKKyAgICAgICAg
ICAgICAgICAgICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09
IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiY2J1ZmZl
ciBEcml2ZXJDb25zdGFudHMgOiByZWdpc3RlcihiMSlcbiIKKyAgICAgICAgICAgICAgICAgICAi
e1xuIjsKKworICAgICAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdDMgZHhfRGVwdGhSYW5nZSA6IHBhY2tv
ZmZzZXQoYzApO1xuIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG1Vc2VzRnJh
Z0Nvb3JkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0
NCBkeF9WaWV3Q29vcmRzIDogcGFja29mZnNldChjMSk7XG4iOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAobVVzZXNGcmFnQ29vcmQgfHwgbVVzZXNGcm9udEZhY2luZykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdDMgZHhfRGVwdGhGcm9u
dCA6IHBhY2tvZmZzZXQoYzIpO1xuIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgb3V0
IDw8ICJ9O1xuIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChtVXNlc0RlcHRoUmFuZ2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
b3V0IDw8ICJ1bmlmb3JtIGZsb2F0MyBkeF9EZXB0aFJhbmdlIDogcmVnaXN0ZXIoYzApOyI7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtVXNlc0ZyYWdDb29yZCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgInVuaWZvcm0gZmxvYXQ0IGR4X1ZpZXdDb29y
ZHMgOiByZWdpc3RlcihjMSk7XG4iOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
bVVzZXNGcmFnQ29vcmQgfHwgbVVzZXNGcm9udEZhY2luZykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBvdXQgPDwgInVuaWZvcm0gZmxvYXQzIGR4X0RlcHRoRnJvbnQgOiByZWdpc3Rl
cihjMik7XG4iOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgb3V0IDw8ICJc
biI7CisKKyAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgb3V0IDw8ICJzdGF0aWMgZ2xfRGVwdGhSYW5nZVBhcmFtZXRlcnMgZ2xfRGVwdGhSYW5nZSA9
IHtkeF9EZXB0aFJhbmdlLngsIGR4X0RlcHRoUmFuZ2UueSwgZHhfRGVwdGhSYW5nZS56fTtcbiIK
KyAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBv
dXQgPDwgIHVuaWZvcm1zOworICAgICAgICBvdXQgPDwgIlxuIjsKKworICAgICAgICBpZiAobVVz
ZXNUZXh0dXJlMkQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBT
SF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJm
bG9hdDQgZ2xfdGV4dHVyZTJEKHNhbXBsZXIyRCBzLCBmbG9hdDIgdClcbiIKKyAgICAgICAgICAg
ICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4
MkQocywgdCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtT3V0
cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRl
IHMsIGZsb2F0MiB1dilcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGUocywgdXYpO1xuIgorICAgICAgICAg
ICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEX2JpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKHNhbXBsZXIyRCBzLCBmbG9hdDIg
dCwgZmxvYXQgYmlhcylcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRiaWFzKHMsIGZsb2F0NCh0LngsIHQueSwg
MCwgYmlhcykpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAg
ICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobU91
dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0
ZSBzLCBmbG9hdDIgdXYsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlQmlhcyhzLCB1
diwgYmlhcyk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRQcm9qKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUy
RFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0MyB0KVxuIgorICAgICAgICAgICAgICAgICAgICAgICAi
e1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRHByb2oocywgZmxv
YXQ0KHQueCwgdC55LCAwLCB0LnopKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICAgICAiZmxv
YXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxuIgorICAgICAgICAg
ICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0
ZXgyRHByb2oocywgdCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAg
ICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlm
IChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVyZTJEIHQsIFNh
bXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3KVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xu
IgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZShzLCBmbG9hdDIo
dXZ3LnggLyB1dncueiwgdXZ3LnkgLyB1dncueikpO1xuIgorICAgICAgICAgICAgICAgICAgICAg
ICAifVxuIgorICAgICAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAg
ICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMs
IGZsb2F0NCB1dncpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAg
ICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlKHMsIGZsb2F0Mih1dncueCAvIHV2dy53
LCB1dncueSAvIHV2dy53KSk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRQ
cm9qX2JpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9I
TFNMOV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9h
dDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4i
CisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIg
ICAgcmV0dXJuIHRleDJEYmlhcyhzLCBmbG9hdDQodC54IC8gdC56LCB0LnkgLyB0LnosIDAsIGJp
YXMpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFBy
b2ooc2FtcGxlcjJEIHMsIGZsb2F0NCB0LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAg
ICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJp
YXMocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53LCAwLCBiaWFzKSk7XG4iCisgICAgICAg
ICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFf
T1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGds
X3RleHR1cmUyRFByb2ooVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3LCBm
bG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAg
ICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUJpYXMocywgZmxvYXQyKHV2dy54IC8gdXZ3
LnosIHV2dy55IC8gdXZ3LnopLCBiaWFzKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1c
biIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICAgICAi
ZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9h
dDQgdXZ3LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAg
ICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUJpYXMocywgZmxvYXQyKHV2
dy54IC8gdXZ3LncsIHV2dy55IC8gdXZ3LncpLCBiaWFzKTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChtVXNlc1RleHR1cmVDdWJlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobU91dHB1dFR5
cGUgPT0gU0hfSExTTDlfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91
dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0KVxuIgor
ICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0ZXhDVUJFKHMsIHQpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIgor
ICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShUZXh0dXJlQ3Vi
ZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dylcbiIKKyAgICAgICAgICAgICAgICAgICAg
ICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGUocywg
dXZ3KTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmVDdWJlX2JpYXMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1
YmUoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENV
QkViaWFzKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCBiaWFzKSk7XG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVU
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1
cmVDdWJlKFRleHR1cmVDdWJlIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3LCBmbG9hdCBi
aWFzKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0LlNhbXBsZUJpYXMocywgdXZ3LCBiaWFzKTtcbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIFRoZXNlICpMb2QwIGludHJpbnNpY3MgYXJlIG5vdCBhdmFpbGFibGUgaW4gR0wg
ZnJhZ21lbnQgc2hhZGVycy4KKyAgICAgICAgLy8gVGhleSBhcmUgdXNlZCB0byBzYW1wbGUgdXNp
bmcgZGlzY29udGludW91cyB0ZXh0dXJlIGNvb3JkaW5hdGVzLgorICAgICAgICBpZiAobVVzZXNU
ZXh0dXJlMkRMb2QwKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0g
U0hfSExTTDlfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAi
ZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoc2FtcGxlcjJEIHMsIGZsb2F0MiB0KVxuIgorICAgICAg
ICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVy
biB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCB0LnksIDAsIDApKTtcbiIKKyAgICAgICAgICAgICAg
ICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVy
ZTJETG9kMChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MiB1dilcbiIKKyAgICAg
ICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdC5TYW1wbGVMZXZlbChzLCB1diwgMCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNU
ZXh0dXJlMkRMb2QwX2JpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtT3V0cHV0VHlw
ZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0
IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kMChzYW1wbGVyMkQgcywgZmxvYXQyIHQsIGZsb2F0
IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgMCkpO1xu
IgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICAgICAi
XG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0g
U0hfSExTTDExX09VVFBVVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwg
ImZsb2F0NCBnbF90ZXh0dXJlMkRMb2QwKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxv
YXQyIHV2LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAg
ICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIHV2LCAwKTtc
biIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAg
IlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pMb2QwKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pM
b2QwKHNhbXBsZXIyRCBzLCBmbG9hdDMgdClcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIntc
biIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0
KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgICAg
ICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAg
ICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBzLCBmbG9hdDQgdClcbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAg
ICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53LCAwLCAwKSk7
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAg
ICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9
PSBTSF9ITFNMMTFfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8
PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUg
cywgZmxvYXQzIHV2dylcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIodXZ3Lngg
LyB1dncueiwgdXZ3LnkgLyB1dncueiksIDApO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAi
fVxuIgorICAgICAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAgICAg
ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZDAoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBz
LCBmbG9hdDQgdXZ3KVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAg
ICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAv
IHV2dy53LCB1dncueSAvIHV2dy53KSwgMCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNU
ZXh0dXJlMkRQcm9qTG9kMF9iaWFzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobU91dHB1
dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwX2JpYXMoc2FtcGxlcjJEIHMsIGZs
b2F0MyB0LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAg
ICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8g
dC56LCB0LnkgLyB0LnosIDAsIDApKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICAgICAiZmxv
YXQ0IGdsX3RleHR1cmUyRFByb2pMb2RfYmlhcyhzYW1wbGVyMkQgcywgZmxvYXQ0IHQsIGZsb2F0
IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAvIHQu
dywgMCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAg
ICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobU91
dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kX2JpYXMoVGV4dHVyZTJEIHQs
IFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAg
ICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNh
bXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy56LCB1dncueSAvIHV2dy56KSwgMCk7XG4i
CisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJc
biIKKyAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kX2Jp
YXMoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3LCBmbG9hdCBiaWFzKVxu
IgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAi
ICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy53LCB1dncueSAv
IHV2dy53KSwgMCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAg
ICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZUxvZDAp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQ
VVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4
dHVyZUN1YmVMb2QwKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0KVxuIgorICAgICAgICAgICAgICAg
ICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJF
bG9kKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAg
ICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJl
TG9kMChUZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dylcbiIKKyAgICAg
ICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdC5TYW1wbGVMZXZlbChzLCB1dncsIDApO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAi
fVxuIgorICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2Vz
VGV4dHVyZUN1YmVMb2QwX2JpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtT3V0cHV0
VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
b3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmVMb2QwKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0
LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAg
ICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFbG9kKHMsIGZsb2F0NCh0LngsIHQueSwg
dC56LCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtT3V0
cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChUZXh0dXJlQ3ViZSB0LCBTYW1w
bGVyU3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQgYmlhcylcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVM
ZXZlbChzLCB1dncsIDApO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAg
ICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBV
TlJFQUNIQUJMRSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzaW5nTVJURXh0ZW5zaW9u
ICYmIG1OdW1SZW5kZXJUYXJnZXRzID4gMSkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8
ICIjZGVmaW5lIEdMX1VTRVNfTVJUXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2Vz
RnJhZ0NvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIiNkZWZpbmUgR0xfVVNF
U19GUkFHX0NPTE9SXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzRnJhZ0RhdGEp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX0ZSQUdfREFU
QVxuIjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlICAgLy8gVmVydGV4IHNoYWRlcgorICAg
IHsKKyAgICAgICAgb3V0IDw8ICIvLyBBdHRyaWJ1dGVzXG4iOworICAgICAgICBvdXQgPDwgIGF0
dHJpYnV0ZXM7CisgICAgICAgIG91dCA8PCAiXG4iCisgICAgICAgICAgICAgICAic3RhdGljIGZs
b2F0NCBnbF9Qb3NpdGlvbiA9IGZsb2F0NCgwLCAwLCAwLCAwKTtcbiI7CisgICAgICAgIAorICAg
ICAgICBpZiAobVVzZXNQb2ludFNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAi
c3RhdGljIGZsb2F0IGdsX1BvaW50U2l6ZSA9IGZsb2F0KDEpO1xuIjsKKyAgICAgICAgfQorCisg
ICAgICAgIG91dCA8PCAiXG4iCisgICAgICAgICAgICAgICAiLy8gVmFyeWluZ3NcbiI7CisgICAg
ICAgIG91dCA8PCAgdmFyeWluZ3M7CisgICAgICAgIG91dCA8PCAiXG4iOworCisgICAgICAgIGlm
IChtVXNlc0RlcHRoUmFuZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAic3RydWN0
IGdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJzXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAg
ICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IG5lYXI7XG4iCisgICAgICAgICAgICAgICAgICAg
IiAgICBmbG9hdCBmYXI7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBkaWZmO1xu
IgorICAgICAgICAgICAgICAgICAgICJ9O1xuIgorICAgICAgICAgICAgICAgICAgICJcbiI7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgImNidWZmZXIgRHJpdmVyQ29uc3RhbnRzIDogcmVn
aXN0ZXIoYjEpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICIgICAgZmxvYXQzIGR4X0RlcHRoUmFuZ2UgOiBwYWNrb2Zmc2V0KGMwKTtcbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgIn07XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJc
biI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAobVVzZXNEZXB0aFJhbmdlKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG91dCA8PCAidW5pZm9ybSBmbG9hdDMgZHhfRGVwdGhSYW5nZSA6IHJlZ2lzdGVyKGMw
KTtcbiI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dCA8PCAidW5pZm9ybSBmbG9h
dDQgZHhfVmlld0FkanVzdCA6IHJlZ2lzdGVyKGMxKTtcbiIKKyAgICAgICAgICAgICAgICAgICAi
XG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkKKyAgICAgICAg
eworICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgZ2xfRGVwdGhSYW5nZVBhcmFtZXRlcnMgZ2xf
RGVwdGhSYW5nZSA9IHtkeF9EZXB0aFJhbmdlLngsIGR4X0RlcHRoUmFuZ2UueSwgZHhfRGVwdGhS
YW5nZS56fTtcbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CisKKyAgICAg
ICAgb3V0IDw8IHVuaWZvcm1zOworICAgICAgICBvdXQgPDwgIlxuIjsKKyAgICAgICAgCisgICAg
ICAgIGlmIChtVXNlc1RleHR1cmUyRCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1PdXRw
dXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoc2FtcGxlcjJEIHMsIGZsb2F0MiB0KVxuIgor
ICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCB0LnksIDAsIDApKTtcbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9P
VVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xf
dGV4dHVyZTJEKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2KVxuIgorICAg
ICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0LlNhbXBsZUxldmVsKHMsIHV2LCAwKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAg
In1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNl
c1RleHR1cmUyRExvZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09
IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwg
ImZsb2F0NCBnbF90ZXh0dXJlMkRMb2Qoc2FtcGxlcjJEIHMsIGZsb2F0MiB0LCBmbG9hdCBsb2Qp
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgbG9kKSk7XG4iCisg
ICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9I
TFNMMTFfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxv
YXQ0IGdsX3RleHR1cmUyRExvZChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MiB1
diwgZmxvYXQgbG9kKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAg
ICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIHV2LCBsb2QpO1xuIgor
ICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICAgICAiXG4i
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJvaikKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIy
RCBzLCBmbG9hdDMgdClcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQueiwg
dC55IC8gdC56LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBn
bF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDQgdClcbiIKKyAgICAgICAgICAgICAg
ICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRs
b2QocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53LCAwLCAwKSk7XG4iCisgICAgICAgICAg
ICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VU
UFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3Rl
eHR1cmUyRFByb2ooVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3KVxuIgor
ICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy56LCB1dncueSAvIHV2
dy56KSwgMCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJl
MkRQcm9qKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQ0IHV2dylcbiIKKyAgICAg
ICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIodXZ3LnggLyB1dncudywgdXZ3LnkgLyB1dncudyks
IDApO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAg
ICAgICAiXG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJvakxvZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQ
cm9qTG9kKHNhbXBsZXIyRCBzLCBmbG9hdDMgdCwgZmxvYXQgbG9kKVxuIgorICAgICAgICAgICAg
ICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgy
RGxvZChzLCBmbG9hdDQodC54IC8gdC56LCB0LnkgLyB0LnosIDAsIGxvZCkpO1xuIgorICAgICAg
ICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICAgICAiXG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZChzYW1wbGVyMkQg
cywgZmxvYXQ0IHQsIGZsb2F0IGxvZClcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIntcbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQu
eCAvIHQudywgdC55IC8gdC53LCAwLCBsb2QpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAg
In1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxv
ZChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncsIGZsb2F0IGxvZClcbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAg
ICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIodXZ3LnggLyB1dncueiwgdXZ3LnkgLyB1
dncueiksIGxvZCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAg
ICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0
dXJlMkRQcm9qTG9kKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQ0IHV2dywgZmxv
YXQgbG9kKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy53
LCB1dncueSAvIHV2dy53KSwgbG9kKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1
cmVDdWJlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExT
TDlfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0
IGdsX3RleHR1cmVDdWJlKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0KVxuIgorICAgICAgICAgICAg
ICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhD
VUJFbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCAwKSk7XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVD
dWJlKFRleHR1cmVDdWJlIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3KVxuIgorICAgICAg
ICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVy
biB0LlNhbXBsZUxldmVsKHMsIHV2dywgMCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNU
ZXh0dXJlQ3ViZUxvZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09
IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwg
ImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxvZChzYW1wbGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxvYXQg
bG9kKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0ZXhDVUJFbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCBsb2Qp
KTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAg
ICAgIlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBl
ID09IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0
IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmVMb2QoVGV4dHVyZUN1YmUgdCwgU2FtcGxlclN0YXRl
IHMsIGZsb2F0MyB1dncsIGZsb2F0IGxvZClcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIntc
biIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1
dncsIGxvZCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobVVzZXNGcmFnQ29vcmQpCisgICAg
eworICAgICAgICBvdXQgPDwgIiNkZWZpbmUgR0xfVVNFU19GUkFHX0NPT1JEXG4iOworICAgIH0K
KworICAgIGlmIChtVXNlc1BvaW50Q29vcmQpCisgICAgeworICAgICAgICBvdXQgPDwgIiNkZWZp
bmUgR0xfVVNFU19QT0lOVF9DT09SRFxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNGcm9udEZh
Y2luZykKKyAgICB7CisgICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX0ZST05UX0ZBQ0lO
R1xuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNQb2ludFNpemUpCisgICAgeworICAgICAgICBv
dXQgPDwgIiNkZWZpbmUgR0xfVVNFU19QT0lOVF9TSVpFXG4iOworICAgIH0KKworICAgIGlmICht
VXNlc0ZyYWdEZXB0aCkKKyAgICB7CisgICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX0ZS
QUdfREVQVEhcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkKKyAgICB7Cisg
ICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX0RFUFRIX1JBTkdFXG4iOworICAgIH0KKwor
ICAgIGlmIChtVXNlc1hvcikKKyAgICB7CisgICAgICAgIG91dCA8PCAiYm9vbCB4b3IoYm9vbCBw
LCBib29sIHEpXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gKHAgfHwgcSkgJiYgIShwICYmIHEpO1xuIgorICAgICAgICAgICAgICAgIn1cbiIKKyAg
ICAgICAgICAgICAgICJcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzTW9kMSkKKyAgICB7Cisg
ICAgICAgIG91dCA8PCAiZmxvYXQgbW9kKGZsb2F0IHgsIGZsb2F0IHkpXG4iCisgICAgICAgICAg
ICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4geCAtIHkgKiBmbG9vcih4IC8g
eSk7XG4iCisgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgIlxuIjsKKyAgICB9
CisKKyAgICBpZiAobVVzZXNNb2QydikKKyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQyIG1v
ZChmbG9hdDIgeCwgZmxvYXQyIHkpXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4geCAtIHkgKiBmbG9vcih4IC8geSk7XG4iCisgICAgICAgICAgICAg
ICAifVxuIgorICAgICAgICAgICAgICAgIlxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNNb2Qy
ZikKKyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQyIG1vZChmbG9hdDIgeCwgZmxvYXQgeSlc
biIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIHJldHVybiB4IC0g
eSAqIGZsb29yKHggLyB5KTtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAg
ICAiXG4iOworICAgIH0KKyAgICAKKyAgICBpZiAobVVzZXNNb2QzdikKKyAgICB7CisgICAgICAg
IG91dCA8PCAiZmxvYXQzIG1vZChmbG9hdDMgeCwgZmxvYXQzIHkpXG4iCisgICAgICAgICAgICAg
ICAie1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4geCAtIHkgKiBmbG9vcih4IC8geSk7
XG4iCisgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgIlxuIjsKKyAgICB9CisK
KyAgICBpZiAobVVzZXNNb2QzZikKKyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQzIG1vZChm
bG9hdDMgeCwgZmxvYXQgeSlcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAg
ICAiICAgIHJldHVybiB4IC0geSAqIGZsb29yKHggLyB5KTtcbiIKKyAgICAgICAgICAgICAgICJ9
XG4iCisgICAgICAgICAgICAgICAiXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc01vZDR2KQor
ICAgIHsKKyAgICAgICAgb3V0IDw8ICJmbG9hdDQgbW9kKGZsb2F0NCB4LCBmbG9hdDQgeSlcbiIK
KyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIHJldHVybiB4IC0geSAq
IGZsb29yKHggLyB5KTtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAi
XG4iOworICAgIH0KKworICAgIGlmIChtVXNlc01vZDRmKQorICAgIHsKKyAgICAgICAgb3V0IDw8
ICJmbG9hdDQgbW9kKGZsb2F0NCB4LCBmbG9hdCB5KVxuIgorICAgICAgICAgICAgICAgIntcbiIK
KyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHggLSB5ICogZmxvb3IoeCAvIHkpO1xuIgorICAg
ICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICJcbiI7CisgICAgfQorCisgICAgaWYg
KG1Vc2VzRmFjZWZvcndhcmQxKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJmbG9hdCBmYWNlZm9y
d2FyZChmbG9hdCBOLCBmbG9hdCBJLCBmbG9hdCBOcmVmKVxuIgorICAgICAgICAgICAgICAgIntc
biIKKyAgICAgICAgICAgICAgICIgICAgaWYoZG90KE5yZWYsIEkpID49IDApXG4iCisgICAgICAg
ICAgICAgICAiICAgIHtcbiIKKyAgICAgICAgICAgICAgICIgICAgICAgIHJldHVybiAtTjtcbiIK
KyAgICAgICAgICAgICAgICIgICAgfVxuIgorICAgICAgICAgICAgICAgIiAgICBlbHNlXG4iCisg
ICAgICAgICAgICAgICAiICAgIHtcbiIKKyAgICAgICAgICAgICAgICIgICAgICAgIHJldHVybiBO
O1xuIgorICAgICAgICAgICAgICAgIiAgICB9XG4iCisgICAgICAgICAgICAgICAifVxuIgorICAg
ICAgICAgICAgICAgIlxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNGYWNlZm9yd2FyZDIpCisg
ICAgeworICAgICAgICBvdXQgPDwgImZsb2F0MiBmYWNlZm9yd2FyZChmbG9hdDIgTiwgZmxvYXQy
IEksIGZsb2F0MiBOcmVmKVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAg
ICIgICAgaWYoZG90KE5yZWYsIEkpID49IDApXG4iCisgICAgICAgICAgICAgICAiICAgIHtcbiIK
KyAgICAgICAgICAgICAgICIgICAgICAgIHJldHVybiAtTjtcbiIKKyAgICAgICAgICAgICAgICIg
ICAgfVxuIgorICAgICAgICAgICAgICAgIiAgICBlbHNlXG4iCisgICAgICAgICAgICAgICAiICAg
IHtcbiIKKyAgICAgICAgICAgICAgICIgICAgICAgIHJldHVybiBOO1xuIgorICAgICAgICAgICAg
ICAgIiAgICB9XG4iCisgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgIlxuIjsK
KyAgICB9CisKKyAgICBpZiAobVVzZXNGYWNlZm9yd2FyZDMpCisgICAgeworICAgICAgICBvdXQg
PDwgImZsb2F0MyBmYWNlZm9yd2FyZChmbG9hdDMgTiwgZmxvYXQzIEksIGZsb2F0MyBOcmVmKVxu
IgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgaWYoZG90KE5yZWYs
IEkpID49IDApXG4iCisgICAgICAgICAgICAgICAiICAgIHtcbiIKKyAgICAgICAgICAgICAgICIg
ICAgICAgIHJldHVybiAtTjtcbiIKKyAgICAgICAgICAgICAgICIgICAgfVxuIgorICAgICAgICAg
ICAgICAgIiAgICBlbHNlXG4iCisgICAgICAgICAgICAgICAiICAgIHtcbiIKKyAgICAgICAgICAg
ICAgICIgICAgICAgIHJldHVybiBOO1xuIgorICAgICAgICAgICAgICAgIiAgICB9XG4iCisgICAg
ICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgIlxuIjsKKyAgICB9CisKKyAgICBpZiAo
bVVzZXNGYWNlZm9yd2FyZDQpCisgICAgeworICAgICAgICBvdXQgPDwgImZsb2F0NCBmYWNlZm9y
d2FyZChmbG9hdDQgTiwgZmxvYXQ0IEksIGZsb2F0NCBOcmVmKVxuIgorICAgICAgICAgICAgICAg
IntcbiIKKyAgICAgICAgICAgICAgICIgICAgaWYoZG90KE5yZWYsIEkpID49IDApXG4iCisgICAg
ICAgICAgICAgICAiICAgIHtcbiIKKyAgICAgICAgICAgICAgICIgICAgICAgIHJldHVybiAtTjtc
biIKKyAgICAgICAgICAgICAgICIgICAgfVxuIgorICAgICAgICAgICAgICAgIiAgICBlbHNlXG4i
CisgICAgICAgICAgICAgICAiICAgIHtcbiIKKyAgICAgICAgICAgICAgICIgICAgICAgIHJldHVy
biBOO1xuIgorICAgICAgICAgICAgICAgIiAgICB9XG4iCisgICAgICAgICAgICAgICAifVxuIgor
ICAgICAgICAgICAgICAgIlxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNBdGFuMl8xKQorICAg
IHsKKyAgICAgICAgb3V0IDw8ICJmbG9hdCBhdGFueXgoZmxvYXQgeSwgZmxvYXQgeClcbiIKKyAg
ICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIGlmKHggPT0gMCAmJiB5ID09
IDApIHggPSAxO1xuIiAgIC8vIEF2b2lkIHByb2R1Y2luZyBhIE5hTgorICAgICAgICAgICAgICAg
IiAgICByZXR1cm4gYXRhbjIoeSwgeCk7XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9
CisKKyAgICBpZiAobVVzZXNBdGFuMl8yKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJmbG9hdDIg
YXRhbnl4KGZsb2F0MiB5LCBmbG9hdDIgeClcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAg
ICAgICAgICAgICAiICAgIGlmKHhbMF0gPT0gMCAmJiB5WzBdID09IDApIHhbMF0gPSAxO1xuIgor
ICAgICAgICAgICAgICAgIiAgICBpZih4WzFdID09IDAgJiYgeVsxXSA9PSAwKSB4WzFdID0gMTtc
biIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIGZsb2F0MihhdGFuMih5WzBdLCB4WzBdKSwg
YXRhbjIoeVsxXSwgeFsxXSkpO1xuIgorICAgICAgICAgICAgICAgIn1cbiI7CisgICAgfQorCisg
ICAgaWYgKG1Vc2VzQXRhbjJfMykKKyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQzIGF0YW55
eChmbG9hdDMgeSwgZmxvYXQzIHgpXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAg
ICAgICAgIiAgICBpZih4WzBdID09IDAgJiYgeVswXSA9PSAwKSB4WzBdID0gMTtcbiIKKyAgICAg
ICAgICAgICAgICIgICAgaWYoeFsxXSA9PSAwICYmIHlbMV0gPT0gMCkgeFsxXSA9IDE7XG4iCisg
ICAgICAgICAgICAgICAiICAgIGlmKHhbMl0gPT0gMCAmJiB5WzJdID09IDApIHhbMl0gPSAxO1xu
IgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4gZmxvYXQzKGF0YW4yKHlbMF0sIHhbMF0pLCBh
dGFuMih5WzFdLCB4WzFdKSwgYXRhbjIoeVsyXSwgeFsyXSkpO1xuIgorICAgICAgICAgICAgICAg
In1cbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzQXRhbjJfNCkKKyAgICB7CisgICAgICAgIG91
dCA8PCAiZmxvYXQ0IGF0YW55eChmbG9hdDQgeSwgZmxvYXQ0IHgpXG4iCisgICAgICAgICAgICAg
ICAie1xuIgorICAgICAgICAgICAgICAgIiAgICBpZih4WzBdID09IDAgJiYgeVswXSA9PSAwKSB4
WzBdID0gMTtcbiIKKyAgICAgICAgICAgICAgICIgICAgaWYoeFsxXSA9PSAwICYmIHlbMV0gPT0g
MCkgeFsxXSA9IDE7XG4iCisgICAgICAgICAgICAgICAiICAgIGlmKHhbMl0gPT0gMCAmJiB5WzJd
ID09IDApIHhbMl0gPSAxO1xuIgorICAgICAgICAgICAgICAgIiAgICBpZih4WzNdID09IDAgJiYg
eVszXSA9PSAwKSB4WzNdID0gMTtcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIGZsb2F0
NChhdGFuMih5WzBdLCB4WzBdKSwgYXRhbjIoeVsxXSwgeFsxXSksIGF0YW4yKHlbMl0sIHhbMl0p
LCBhdGFuMih5WzNdLCB4WzNdKSk7XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9Cit9
CisKK3ZvaWQgT3V0cHV0SExTTDo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqbm9kZSkKK3sK
KyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKKworICAgIFRTdHJpbmcgbmFtZSA9IG5v
ZGUtPmdldFN5bWJvbCgpOworCisgICAgaWYgKG5hbWUgPT0gImdsX0ZyYWdDb2xvciIpCisgICAg
eworICAgICAgICBvdXQgPDwgImdsX0NvbG9yWzBdIjsKKyAgICAgICAgbVVzZXNGcmFnQ29sb3Ig
PSB0cnVlOworICAgIH0KKyAgICBlbHNlIGlmIChuYW1lID09ICJnbF9GcmFnRGF0YSIpCisgICAg
eworICAgICAgICBvdXQgPDwgImdsX0NvbG9yIjsKKyAgICAgICAgbVVzZXNGcmFnRGF0YSA9IHRy
dWU7CisgICAgfQorICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX0RlcHRoUmFuZ2UiKQorICAgIHsK
KyAgICAgICAgbVVzZXNEZXB0aFJhbmdlID0gdHJ1ZTsKKyAgICAgICAgb3V0IDw8IG5hbWU7Cisg
ICAgfQorICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX0ZyYWdDb29yZCIpCisgICAgeworICAgICAg
ICBtVXNlc0ZyYWdDb29yZCA9IHRydWU7CisgICAgICAgIG91dCA8PCBuYW1lOworICAgIH0KKyAg
ICBlbHNlIGlmIChuYW1lID09ICJnbF9Qb2ludENvb3JkIikKKyAgICB7CisgICAgICAgIG1Vc2Vz
UG9pbnRDb29yZCA9IHRydWU7CisgICAgICAgIG91dCA8PCBuYW1lOworICAgIH0KKyAgICBlbHNl
IGlmIChuYW1lID09ICJnbF9Gcm9udEZhY2luZyIpCisgICAgeworICAgICAgICBtVXNlc0Zyb250
RmFjaW5nID0gdHJ1ZTsKKyAgICAgICAgb3V0IDw8IG5hbWU7CisgICAgfQorICAgIGVsc2UgaWYg
KG5hbWUgPT0gImdsX1BvaW50U2l6ZSIpCisgICAgeworICAgICAgICBtVXNlc1BvaW50U2l6ZSA9
IHRydWU7CisgICAgICAgIG91dCA8PCBuYW1lOworICAgIH0KKyAgICBlbHNlIGlmIChuYW1lID09
ICJnbF9GcmFnRGVwdGhFWFQiKQorICAgIHsKKyAgICAgICAgbVVzZXNGcmFnRGVwdGggPSB0cnVl
OworICAgICAgICBvdXQgPDwgImdsX0RlcHRoIjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBub2RlLT5nZXRRdWFsaWZpZXIoKTsKKworICAg
ICAgICBpZiAocXVhbGlmaWVyID09IEV2cVVuaWZvcm0pCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1SZWZlcmVuY2VkVW5pZm9ybXNbbmFtZV0gPSBub2RlOworICAgICAgICAgICAgb3V0IDw8IGRl
Y29yYXRlVW5pZm9ybShuYW1lLCBub2RlLT5nZXRUeXBlKCkpOworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1SZWZlcmVuY2VkQXR0cmlidXRlc1tuYW1lXSA9IG5vZGU7CisgICAgICAgICAgICBvdXQg
PDwgZGVjb3JhdGUobmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocXVhbGlmaWVy
ID09IEV2cVZhcnlpbmdPdXQgfHwgcXVhbGlmaWVyID09IEV2cUludmFyaWFudFZhcnlpbmdPdXQg
fHwgcXVhbGlmaWVyID09IEV2cVZhcnlpbmdJbiB8fCBxdWFsaWZpZXIgPT0gRXZxSW52YXJpYW50
VmFyeWluZ0luKQorICAgICAgICB7CisgICAgICAgICAgICBtUmVmZXJlbmNlZFZhcnlpbmdzW25h
bWVdID0gbm9kZTsKKyAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxSW50ZXJuYWwpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG91dCA8PCBuYW1lOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgb3V0IDw8IGRlY29yYXRlKG5hbWUpOworICAgICAgICB9CisgICAg
fQorfQorCitib29sIE91dHB1dEhMU0w6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJt
QmluYXJ5ICpub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OworCisgICAg
c3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wQXNzaWduOiAgICAg
ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA9ICIsICIpIik7ICAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wSW5pdGlhbGl6ZToKKyAgICAgICAgaWYgKHZpc2l0
ID09IFByZVZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBHTFNMIGFsbG93cyB0byB3
cml0ZSB0aGluZ3MgbGlrZSAiZmxvYXQgeCA9IHg7IiB3aGVyZSBhIG5ldyB2YXJpYWJsZSB4IGlz
IGRlZmluZWQKKyAgICAgICAgICAgIC8vIGFuZCB0aGUgdmFsdWUgb2YgYW4gZXhpc3RpbmcgdmFy
aWFibGUgeCBpcyBhc3NpZ25lZC4gSExTTCB1c2VzIEMgc2VtYW50aWNzICh0aGUKKyAgICAgICAg
ICAgIC8vIG5ldyB2YXJpYWJsZSBpcyBjcmVhdGVkIGJlZm9yZSB0aGUgYXNzaWdubWVudCBpcyBl
dmFsdWF0ZWQpLCBzbyB3ZSBuZWVkIHRvIGNvbnZlcnQKKyAgICAgICAgICAgIC8vIHRoaXMgdG8g
ImZsb2F0IHQgPSB4LCB4ID0gdDsiLgorCisgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1i
b2xOb2RlID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICAgICAgICAg
IFRJbnRlcm1UeXBlZCAqZXhwcmVzc2lvbiA9IG5vZGUtPmdldFJpZ2h0KCk7CisKKyAgICAgICAg
ICAgIHNoOjpTZWFyY2hTeW1ib2wgc2VhcmNoU3ltYm9sKHN5bWJvbE5vZGUtPmdldFN5bWJvbCgp
KTsKKyAgICAgICAgICAgIGV4cHJlc3Npb24tPnRyYXZlcnNlKCZzZWFyY2hTeW1ib2wpOworICAg
ICAgICAgICAgYm9vbCBzYW1lU3ltYm9sID0gc2VhcmNoU3ltYm9sLmZvdW5kTWF0Y2goKTsKKwor
ICAgICAgICAgICAgaWYgKHNhbWVTeW1ib2wpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgLy8gVHlwZSBhbHJlYWR5IHByaW50ZWQKKyAgICAgICAgICAgICAgICBvdXQgPDwgInQiICsg
c3RyKG1VbmlxdWVJbmRleCkgKyAiID0gIjsKKyAgICAgICAgICAgICAgICBleHByZXNzaW9uLT50
cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAgICAgICAgICAg
ICAgICBzeW1ib2xOb2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICBvdXQgPDwg
IiA9IHQiICsgc3RyKG1VbmlxdWVJbmRleCk7CisKKyAgICAgICAgICAgICAgICBtVW5pcXVlSW5k
ZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAgICAgeworICAg
ICAgICAgICAgb3V0IDw8ICIgPSAiOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFT3BBZGRBc3NpZ246ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigi
LCAiICs9ICIsICIpIik7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BTdWJBc3NpZ246
ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIC09ICIsICIpIik7ICAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BNdWxBc3NpZ246ICAgICAgICAgICAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICo9ICIsICIpIik7ICAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjogb3V0cHV0VHJpcGxldCh2aXNpdCwg
IigiLCAiICo9ICIsICIpIik7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BNYXRyaXhU
aW1lc1NjYWxhckFzc2lnbjogb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICo9ICIsICIpIik7
ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjoK
KyAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBv
dXQgPDwgIigiOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiID0gbXVsKCI7CisgICAgICAgICAgICBu
b2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICIsIHRy
YW5zcG9zZSgiOyAgIAorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg
ICAgICAgb3V0IDw8ICIpKSkiOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjoKKyAgICAgICAgaWYgKHZpc2l0ID09IFByZVZp
c2l0KQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIigiOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91
dCA8PCAiID0gbXVsKCI7CisgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRo
aXMpOworICAgICAgICAgICAgb3V0IDw8ICIsICI7ICAgCisgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIikpIjsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wRGl2QXNzaWduOiAgICAgICAgICAgICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICIoIiwgIiAvPSAiLCAiKSIpOyAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRU9wSW5kZXhEaXJlY3Q6ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIiLCAi
WyIsICJdIik7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wSW5kZXhJbmRpcmVj
dDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIiLCAiWyIsICJdIik7ICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CisgICAgICAgIGlm
ICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsK
KyAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1Db25zdGFudFVuaW9uKiBpbmRleCA9IG5vZGUtPmdl
dFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAgICAgICAgICAgY29uc3QgVEZpZWxk
KiBmaWVsZCA9IHN0cnVjdHVyZS0+ZmllbGRzKClbaW5kZXgtPmdldElDb25zdCgwKV07CisgICAg
ICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3JhdGVGaWVsZChmaWVsZC0+bmFtZSgpLCBub2RlLT5n
ZXRMZWZ0KCktPmdldFR5cGUoKSk7CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wVmVjdG9yU3dpenpsZToKKyAgICAg
ICAgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAi
LiI7CisKKyAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUgKnN3aXp6bGUgPSBub2RlLT5nZXRS
aWdodCgpLT5nZXRBc0FnZ3JlZ2F0ZSgpOworCisgICAgICAgICAgICBpZiAoc3dpenpsZSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJnNlcXVlbmNlID0g
c3dpenpsZS0+Z2V0U2VxdWVuY2UoKTsKKworICAgICAgICAgICAgICAgIGZvciAoVEludGVybVNl
cXVlbmNlOjppdGVyYXRvciBzaXQgPSBzZXF1ZW5jZS5iZWdpbigpOyBzaXQgIT0gc2VxdWVuY2Uu
ZW5kKCk7IHNpdCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVElu
dGVybUNvbnN0YW50VW5pb24gKmVsZW1lbnQgPSAoKnNpdCktPmdldEFzQ29uc3RhbnRVbmlvbigp
OworCisgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50KQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaSA9IGVsZW1lbnQtPmdldElDb25zdCgw
KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiBvdXQgPDwgIngiOyBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogb3V0IDw8ICJ5IjsgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IG91dCA8PCAieiI7IGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvdXQgPDwgInciOyBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxz
ZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAg
IC8vIEZ1bGx5IHByb2Nlc3NlZAorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BBZGQ6ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICsgIiwg
IikiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcFN1YjogICAgICAgICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiKCIsICIgLSAiLCAiKSIpOyBicmVhazsKKyAgICAgIGNhc2UgRU9wTXVsOiAg
ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAqICIsICIpIik7IGJyZWFr
OworICAgICAgY2FzZSBFT3BEaXY6ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
IigiLCAiIC8gIiwgIikiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcEVxdWFsOgorICAgICAgY2Fz
ZSBFT3BOb3RFcXVhbDoKKyAgICAgICAgaWYgKG5vZGUtPmdldExlZnQoKS0+aXNTY2FsYXIoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9wRXF1YWwpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAi
ID09ICIsICIpIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICE9ICIsICIp
Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0
TGVmdCgpLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChub2RlLT5nZXRPcCgpID09IEVPcEVxdWFsKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIG91dCA8PCAiKCI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIhKCI7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IG5vZGUtPmdldExlZnQo
KS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKKworICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgY29uc3QgVEZpZWxkICpmaWVsZCA9IGZpZWxkc1tpXTsKKworICAgICAgICAg
ICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAg
b3V0IDw8ICIuIiArIGRlY29yYXRlRmllbGQoZmllbGQtPm5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgp
LT5nZXRUeXBlKCkpICsgIiA9PSAiOworICAgICAgICAgICAgICAgIG5vZGUtPmdldFJpZ2h0KCkt
PnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZp
ZWxkKGZpZWxkLT5uYW1lKCksIG5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpKTsKKworICAgICAg
ICAgICAgICAgIGlmIChpIDwgZmllbGRzLnNpemUoKSAtIDEpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAmJiAiOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgb3V0IDw8ICIpIjsKKworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKG5vZGUtPmdldExlZnQoKS0+aXNNYXRyaXgoKSB8fCBub2RlLT5nZXRMZWZ0KCkt
PmlzVmVjdG9yKCkpOworCisgICAgICAgICAgICBpZiAobm9kZS0+Z2V0T3AoKSA9PSBFT3BFcXVh
bCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
YWxsKCIsICIgPT0gIiwgIikiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiIWFsbCgi
LCAiID09ICIsICIpIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEVPcExlc3NUaGFuOiAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
KCIsICIgPCAiLCAiKSIpOyAgIGJyZWFrOworICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjogICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiID4gIiwgIikiKTsgICBicmVhazsKKyAgICAg
IGNhc2UgRU9wTGVzc1RoYW5FcXVhbDogICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA8
PSAiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6ICBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPj0gIiwgIikiKTsgIGJyZWFrOworICAgICAgY2FzZSBF
T3BWZWN0b3JUaW1lc1NjYWxhcjogb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICogIiwgIiki
KTsgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXI6IG91dHB1dFRyaXBs
ZXQodmlzaXQsICIoIiwgIiAqICIsICIpIik7ICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFZlY3Rv
clRpbWVzTWF0cml4OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibXVsKCIsICIsIHRyYW5zcG9zZSgi
LCAiKSkiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVjdG9yOiBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAibXVsKHRyYW5zcG9zZSgiLCAiKSwgIiwgIikiKTsgYnJlYWs7CisgICAg
ICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidHJhbnNw
b3NlKG11bCh0cmFuc3Bvc2UoIiwgIiksIHRyYW5zcG9zZSgiLCAiKSkpIik7IGJyZWFrOworICAg
ICAgY2FzZSBFT3BMb2dpY2FsT3I6CisgICAgICAgIGlmIChub2RlLT5nZXRSaWdodCgpLT5oYXNT
aWRlRWZmZWN0cygpKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgInMiIDw8IG1VbmZv
bGRTaG9ydENpcmN1aXQtPmdldE5leHRUZW1wb3JhcnlJbmRleCgpOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgfHwgIiwgIikiKTsKKyAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjoKKyAgICAgICAg
bVVzZXNYb3IgPSB0cnVlOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAieG9yKCIsICIs
ICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOgorICAg
ICAgICBpZiAobm9kZS0+Z2V0UmlnaHQoKS0+aGFzU2lkZUVmZmVjdHMoKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xkU2hvcnRDaXJjdWl0LT5nZXROZXh0VGVt
cG9yYXJ5SW5kZXgoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigi
LCAiICYmICIsICIpIik7CisgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIE91dHB1dEhMU0w6OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAq
bm9kZSkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAgY2FzZSBF
T3BOZWdhdGl2ZTogICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKC0iLCAiIiwgIikiKTsg
IGJyZWFrOworICAgICAgY2FzZSBFT3BWZWN0b3JMb2dpY2FsTm90OiBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAiKCEiLCAiIiwgIikiKTsgIGJyZWFrOworICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OiAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCEiLCAiIiwgIikiKTsgIGJyZWFrOworICAgICAg
Y2FzZSBFT3BQb3N0SW5jcmVtZW50OiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIiLCAi
KyspIik7IGJyZWFrOworICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OiAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiKCIsICIiLCAiLS0pIik7IGJyZWFrOworICAgICAgY2FzZSBFT3BQcmVJbmNy
ZW1lbnQ6ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCsrIiwgIiIsICIpIik7IGJyZWFrOwor
ICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKC0t
IiwgIiIsICIpIik7IGJyZWFrOworICAgICAgY2FzZSBFT3BDb252SW50VG9Cb29sOgorICAgICAg
Y2FzZSBFT3BDb252RmxvYXRUb0Jvb2w6CisgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFu
ZCgpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgeworICAgICAgICAgIGNh
c2UgMTogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImJvb2woIiwgIiIsICIpIik7ICBicmVhazsK
KyAgICAgICAgICBjYXNlIDI6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJib29sMigiLCAiIiwg
IikiKTsgYnJlYWs7CisgICAgICAgICAgY2FzZSAzOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
Ym9vbDMoIiwgIiIsICIpIik7IGJyZWFrOworICAgICAgICAgIGNhc2UgNDogICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgImJvb2w0KCIsICIiLCAiKSIpOyBicmVhazsKKyAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
T3BDb252Qm9vbFRvRmxvYXQ6CisgICAgICBjYXNlIEVPcENvbnZJbnRUb0Zsb2F0OgorICAgICAg
ICBzd2l0Y2ggKG5vZGUtPmdldE9wZXJhbmQoKS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkp
CisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIDE6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJm
bG9hdCgiLCAiIiwgIikiKTsgIGJyZWFrOworICAgICAgICAgIGNhc2UgMjogICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgImZsb2F0MigiLCAiIiwgIikiKTsgYnJlYWs7CisgICAgICAgICAgY2FzZSAz
OiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZmxvYXQzKCIsICIiLCAiKSIpOyBicmVhazsKKyAg
ICAgICAgICBjYXNlIDQ6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJmbG9hdDQoIiwgIiIsICIp
Iik7IGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnZGbG9hdFRvSW50OgorICAgICAgY2Fz
ZSBFT3BDb252Qm9vbFRvSW50OgorICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wZXJhbmQoKS0+
Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIDE6
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJpbnQoIiwgIiIsICIpIik7ICBicmVhazsKKyAgICAg
ICAgICBjYXNlIDI6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJpbnQyKCIsICIiLCAiKSIpOyBi
cmVhazsKKyAgICAgICAgICBjYXNlIDM6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJpbnQzKCIs
ICIiLCAiKSIpOyBicmVhazsKKyAgICAgICAgICBjYXNlIDQ6ICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICJpbnQ0KCIsICIiLCAiKSIpOyBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BSYWRpYW5z
OiAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAicmFkaWFucygiLCAiIiwgIikiKTsgICBi
cmVhazsKKyAgICAgIGNhc2UgRU9wRGVncmVlczogICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgImRlZ3JlZXMoIiwgIiIsICIpIik7ICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFNpbjogICAg
ICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJzaW4oIiwgIiIsICIpIik7ICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBFT3BDb3M6ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAiY29zKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wVGFuOiAgICAg
ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInRhbigiLCAiIiwgIikiKTsgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEVPcEFzaW46ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICJhc2luKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BBY29zOiAgICAg
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYWNvcygiLCAiIiwgIikiKTsgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRU9wQXRhbjogICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
ImF0YW4oIiwgIiIsICIpIik7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEV4cDogICAgICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJleHAoIiwgIiIsICIpIik7ICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBFT3BMb2c6ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
bG9nKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRXhwMjogICAgICAg
ICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImV4cDIoIiwgIiIsICIpIik7ICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEVPcExvZzI6ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJs
b2cyKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BTcXJ0OiAgICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAic3FydCgiLCAiIiwgIikiKTsgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRU9wSW52ZXJzZVNxcnQ6ICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInJz
cXJ0KCIsICIiLCAiKSIpOyAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEFiczogICAgICAgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJhYnMoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFT3BTaWduOiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAic2ln
bigiLCAiIiwgIikiKTsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRmxvb3I6ICAgICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZsb29yKCIsICIiLCAiKSIpOyAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEVPcENlaWw6ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJjZWls
KCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BGcmFjdDogICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZnJhYygiLCAiIiwgIikiKTsgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRU9wTGVuZ3RoOiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImxlbmd0
aCgiLCAiIiwgIikiKTsgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcE5vcm1hbGl6ZTogICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICJub3JtYWxpemUoIiwgIiIsICIpIik7IGJyZWFrOworICAg
ICAgY2FzZSBFT3BERmR4OgorICAgICAgICBpZihtSW5zaWRlRGlzY29udGludW91c0xvb3AgfHwg
bU91dHB1dExvZDBGdW5jdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgIigiLCAiIiwgIiwgMC4wKSIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImRkeCgiLCAiIiwgIiki
KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wREZkeToKKyAgICAg
ICAgaWYobUluc2lkZURpc2NvbnRpbnVvdXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb24pCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIsIDAu
MCkiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgImRkeSgiLCAiIiwgIikiKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRU9wRndpZHRoOgorICAgICAgICBpZihtSW5zaWRlRGlzY29udGlu
dW91c0xvb3AgfHwgbU91dHB1dExvZDBGdW5jdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIiwgIiwgMC4wKSIpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZ3
aWR0aCgiLCAiIiwgIikiKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RU9wQW55OiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFueSgiLCAiIiwgIiki
KTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEFsbDogICAgICAgICAgICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICJhbGwoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOworICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBP
dXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAq
bm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKKworICAgIHN3aXRjaCAo
bm9kZS0+Z2V0T3AoKSkKKyAgICB7CisgICAgICBjYXNlIEVPcFNlcXVlbmNlOgorICAgICAgICB7
CisgICAgICAgICAgICBpZiAobUluc2lkZUZ1bmN0aW9uKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0TGluZSgpLmZpcnN0X2xpbmUp
OworICAgICAgICAgICAgICAgIG91dCA8PCAie1xuIjsKKworICAgICAgICAgICAgICAgIG1TY29w
ZURlcHRoKys7CisKKyAgICAgICAgICAgICAgICBpZiAobVNjb3BlQnJhY2tldC5zaXplKCkgPCBt
U2NvcGVEZXB0aCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1TY29w
ZUJyYWNrZXQucHVzaF9iYWNrKDApOyAgIC8vIE5ldyBzY29wZSBsZXZlbAorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBtU2NvcGVCcmFja2V0W21TY29wZURlcHRoIC0gMV0rKzsgICAvLyBOZXcgc2Nv
cGUgYXQgZXhpc3RpbmcgbGV2ZWwKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBzaXQgPSBub2RlLT5n
ZXRTZXF1ZW5jZSgpLmJlZ2luKCk7IHNpdCAhPSBub2RlLT5nZXRTZXF1ZW5jZSgpLmVuZCgpOyBz
aXQrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZl
KCgqc2l0KS0+Z2V0TGluZSgpLmZpcnN0X2xpbmUpOworCisgICAgICAgICAgICAgICAgdHJhdmVy
c2VTdGF0ZW1lbnRzKCpzaXQpOworCisgICAgICAgICAgICAgICAgb3V0IDw8ICI7XG4iOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobUluc2lkZUZ1bmN0aW9uKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0TGluZSgp
Lmxhc3RfbGluZSk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJ9XG4iOworCisgICAgICAgICAg
ICAgICAgbVNjb3BlRGVwdGgtLTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICBjYXNlIEVPcERlY2xhcmF0aW9uOgorICAgICAgICBp
ZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRJbnRlcm1TZXF1
ZW5jZSAmc2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOworICAgICAgICAgICAgVEludGVy
bVR5cGVkICp2YXJpYWJsZSA9IHNlcXVlbmNlWzBdLT5nZXRBc1R5cGVkKCk7CisKKyAgICAgICAg
ICAgIGlmICh2YXJpYWJsZSAmJiAodmFyaWFibGUtPmdldFF1YWxpZmllcigpID09IEV2cVRlbXBv
cmFyeSB8fCB2YXJpYWJsZS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxR2xvYmFsKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmdldFR5cGUoKS5nZXRTdHJ1Y3Qo
KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFkZENvbnN0cnVjdG9y
KHZhcmlhYmxlLT5nZXRUeXBlKCksIHNjb3BlZFN0cnVjdCh2YXJpYWJsZS0+Z2V0VHlwZSgpLmdl
dFN0cnVjdCgpLT5uYW1lKCkpLCBOVUxMKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBpZiAoIXZhcmlhYmxlLT5nZXRBc1N5bWJvbE5vZGUoKSB8fCB2YXJpYWJsZS0+Z2V0
QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpICE9ICIiKSAgIC8vIFZhcmlhYmxlIGRlY2xhcmF0
aW9uCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoIW1JbnNpZGVG
dW5jdGlvbikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
b3V0IDw8ICJzdGF0aWMgIjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgIG91dCA8PCB0eXBlU3RyaW5nKHZhcmlhYmxlLT5nZXRUeXBlKCkpICsgIiAiOworCisg
ICAgICAgICAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBzaXQgPSBz
ZXF1ZW5jZS5iZWdpbigpOyBzaXQgIT0gc2VxdWVuY2UuZW5kKCk7IHNpdCsrKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1i
b2wgPSAoKnNpdCktPmdldEFzU3ltYm9sTm9kZSgpOworCisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc3ltYm9sKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN5bWJvbC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0IDw8IGFycmF5U3RyaW5nKHN5bWJvbC0+Z2V0VHlwZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiA9ICIgKyBpbml0aWFsaXplcihzeW1ib2wtPmdl
dFR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKCpzaXQpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpzaXQgIT0gc2VxdWVuY2UuYmFjaygp
KQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dCA8PCAiLCAiOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhcmlh
YmxlLT5nZXRBc1N5bWJvbE5vZGUoKSAmJiB2YXJpYWJsZS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdl
dFN5bWJvbCgpID09ICIiKSAgIC8vIFR5cGUgKHN0cnVjdCkgZGVjbGFyYXRpb24KKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIEFscmVhZHkgYWRkZWQgdG8gY29uc3Ry
dWN0b3IgbWFwCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHZhcmlhYmxlICYm
ICh2YXJpYWJsZS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxVmFyeWluZ091dCB8fCB2YXJpYWJsZS0+
Z2V0UXVhbGlmaWVyKCkgPT0gRXZxSW52YXJpYW50VmFyeWluZ091dCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNpdCA9IHNl
cXVlbmNlLmJlZ2luKCk7IHNpdCAhPSBzZXF1ZW5jZS5lbmQoKTsgc2l0KyspCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSAoKnNp
dCktPmdldEFzU3ltYm9sTm9kZSgpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wp
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFZlcnRl
eCAob3V0cHV0KSB2YXJ5aW5ncyB3aGljaCBhcmUgZGVjbGFyZWQgYnV0IG5vdCB3cml0dGVuIHRv
IHNob3VsZCBzdGlsbCBiZSBkZWNsYXJlZCB0byBhbGxvdyBzdWNjZXNzZnVsIGxpbmtpbmcKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1SZWZlcmVuY2VkVmFyeWluZ3Nbc3ltYm9sLT5nZXRTeW1i
b2woKV0gPSBzeW1ib2w7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAo
KnNpdCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAgICAgeworICAg
ICAgICAgICAgb3V0IDw8ICIsICI7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEVPcFByb3RvdHlwZToKKyAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAg
ICB7CisgICAgICAgICAgICBvdXQgPDwgdHlwZVN0cmluZyhub2RlLT5nZXRUeXBlKCkpIDw8ICIg
IiA8PCBkZWNvcmF0ZShub2RlLT5nZXROYW1lKCkpIDw8IChtT3V0cHV0TG9kMEZ1bmN0aW9uID8g
IkxvZDAoIiA6ICIoIik7CisKKyAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJndW1lbnRz
ID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gYXJndW1lbnRzW2ldLT5nZXRBc1N5bWJv
bE5vZGUoKTsKKworICAgICAgICAgICAgICAgIGlmIChzeW1ib2wpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgYXJndW1lbnRTdHJpbmcoc3ltYm9sKTsKKwor
ICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGFyZ3VtZW50cy5zaXplKCkgLSAxKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dCA8PCAi
KTtcbiI7CisKKyAgICAgICAgICAgIC8vIEFsc28gcHJvdG90eXBlIHRoZSBMb2QwIHZhcmlhbnQg
aWYgbmVlZGVkCisgICAgICAgICAgICBpZiAobUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkgJiYg
IW1PdXRwdXRMb2QwRnVuY3Rpb24pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbU91
dHB1dExvZDBGdW5jdGlvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgbm9kZS0+dHJhdmVyc2Uo
dGhpcyk7CisgICAgICAgICAgICAgICAgbU91dHB1dExvZDBGdW5jdGlvbiA9IGZhbHNlOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbW1hOiAgICAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICIoIiwgIiwgIiwgIikiKTsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEVPcEZ1bmN0aW9uOgorICAgICAgICB7CisgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVu
Y3Rpb246OnVubWFuZ2xlTmFtZShub2RlLT5nZXROYW1lKCkpOworCisgICAgICAgICAgICBvdXQg
PDwgdHlwZVN0cmluZyhub2RlLT5nZXRUeXBlKCkpIDw8ICIgIjsKKworICAgICAgICAgICAgaWYg
KG5hbWUgPT0gIm1haW4iKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAi
Z2xfbWFpbigiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAobU91dHB1dExvZDBG
dW5jdGlvbiA/ICJMb2QwKCIgOiAiKCIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBU
SW50ZXJtU2VxdWVuY2UgJnNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAg
ICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJndW1lbnRzID0gc2VxdWVuY2VbMF0tPmdldEFzQWdncmVn
YXRlKCktPmdldFNlcXVlbmNlKCk7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IGFyZ3VtZW50c1tpXS0+Z2V0QXNTeW1ib2xO
b2RlKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoc3ltYm9sKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbC0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRDb25zdHJ1
Y3RvcihzeW1ib2wtPmdldFR5cGUoKSwgc2NvcGVkU3RydWN0KHN5bWJvbC0+Z2V0VHlwZSgpLmdl
dFN0cnVjdCgpLT5uYW1lKCkpLCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCBhcmd1bWVudFN0cmluZyhzeW1ib2wpOworCisgICAgICAg
ICAgICAgICAgICAgIGlmIChpIDwgYXJndW1lbnRzLnNpemUoKSAtIDEpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgb3V0IDw8ICIpXG4iCisg
ICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzZXF1
ZW5jZS5zaXplKCkgPiAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1JbnNpZGVG
dW5jdGlvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgc2VxdWVuY2VbMV0tPnRyYXZlcnNlKHRo
aXMpOworICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBvdXQgPDwgIn1cbiI7CisKKyAgICAgICAg
ICAgIGlmIChtQ29udGFpbnNMb29wRGlzY29udGludWl0eSAmJiAhbU91dHB1dExvZDBGdW5jdGlv
bikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobmFtZSAhPSAibWFpbiIpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtT3V0cHV0TG9kMEZ1bmN0aW9u
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAg
ICAgICAgICAgICAgICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRnVuY3Rpb25DYWxsOgorICAgICAg
ICB7CisgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShu
b2RlLT5nZXROYW1lKCkpOworICAgICAgICAgICAgYm9vbCBsb2QwID0gbUluc2lkZURpc2NvbnRp
bnVvdXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb247CisKKyAgICAgICAgICAgIGlmIChub2Rl
LT5pc1VzZXJEZWZpbmVkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8
IGRlY29yYXRlKG5hbWUpIDw8IChsb2QwID8gIkxvZDAoIiA6ICIoIik7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG5h
bWUgPT0gInRleHR1cmUyRCIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoIWxvZDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRf
YmlhcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG91
dCA8PCAiZ2xfdGV4dHVyZTJEKCI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRExv
ZDAgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1
cmUyRExvZDBfYmlhcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJETG9kMCgiOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRl
eHR1cmUyRFByb2oiKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFsb2QwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2ogPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFBy
b2pfYmlhcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvaigiOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0
dXJlMkRQcm9qTG9kMCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAz
KQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1Vc2VzVGV4dHVyZTJEUHJvakxvZDBfYmlhcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvakxvZDAoIjsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlQ3ViZSIpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoIWxvZDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2Vz
VGV4dHVyZUN1YmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykK
KyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
VXNlc1RleHR1cmVDdWJlX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgICAg
ICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmVDdWJlKCI7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0g
MikKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtVXNlc1RleHR1cmVDdWJlTG9kMCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNp
emUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXMgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgp
OworCisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmVDdWJlTG9kMCgi
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmUyRExvZCIpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0
dXJlMkRMb2QgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImds
X3RleHR1cmUyRExvZCgiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
IGlmIChuYW1lID09ICJ0ZXh0dXJlMkRQcm9qTG9kIikKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUy
RFByb2pMb2QgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImds
X3RleHR1cmUyRFByb2pMb2QoIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZUN1YmVMb2QiKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVy
ZUN1YmVMb2QgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImds
X3RleHR1cmVDdWJlTG9kKCI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVEludGVybVNl
cXVlbmNlICZhcmd1bWVudHMgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOworCisgICAgICAgICAgICBm
b3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3IgYXJnID0gYXJndW1lbnRzLmJlZ2luKCk7IGFy
ZyAhPSBhcmd1bWVudHMuZW5kKCk7IGFyZysrKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUICYmIElzU2FtcGxlcigoKmFy
ZyktPmdldEFzVHlwZWQoKS0+Z2V0QmFzaWNUeXBlKCkpKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICJ0ZXh0dXJlXyI7CisgICAgICAgICAgICAgICAgICAg
ICgqYXJnKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCBz
YW1wbGVyXyI7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgKCphcmcpLT50
cmF2ZXJzZSh0aGlzKTsKKworICAgICAgICAgICAgICAgIGlmIChhcmcgPCBhcmd1bWVudHMuZW5k
KCkgLSAxKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIs
ICI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvdXQg
PDwgIikiOworCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEVPcFBhcmFtZXRlcnM6ICAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICIoIiwgIiwgIiwgIilcbntcbiIpOyAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0RmxvYXQ6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUo
KSwgInZlYzEiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJ2ZWMxKCIsICIiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9w
Q29uc3RydWN0VmVjMjoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAi
dmVjMiIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgInZlYzIoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENv
bnN0cnVjdFZlYzM6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgInZl
YzMiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICJ2ZWMzKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25z
dHJ1Y3RWZWM0OgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJ2ZWM0
IiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
dmVjNCgiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0Qm9vbDoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiYnZlYzEi
LCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJi
dmVjMSgiLCAiIiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVj
dEJWZWMyOgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJidmVjMiIs
ICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImJ2
ZWMyKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RCVmVjMzoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiYnZlYzMi
LCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJi
dmVjMygiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0QlZlYzQ6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgImJ2ZWM0
IiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
YnZlYzQoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0
cnVjdEludDoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiaXZlYzEi
LCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJp
dmVjMSgiLCAiIiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVj
dElWZWMyOgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJpdmVjMiIs
ICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIml2
ZWMyKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RJVmVjMzoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiaXZlYzMi
LCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJp
dmVjMygiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0SVZlYzQ6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgIml2ZWM0
IiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
aXZlYzQoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0
cnVjdE1hdDI6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgIm1hdDIi
LCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJt
YXQyKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RNYXQzOgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJtYXQzIiwg
Jm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibWF0
MygiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0
TWF0NDogCisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgIm1hdDQiLCAm
bm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJtYXQ0
KCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RT
dHJ1Y3Q6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgc2NvcGVkU3Ry
dWN0KG5vZGUtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+bmFtZSgpKSwgJm5vZGUtPmdldFNlcXVl
bmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCBzdHJ1Y3RMb29rdXAobm9kZS0+
Z2V0VHlwZSgpLmdldFN0cnVjdCgpLT5uYW1lKCkpICsgIl9jdG9yKCIsICIsICIsICIpIik7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BMZXNzVGhhbjogICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiKCIsICIgPCAiLCAiKSIpOyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVPcEdyZWF0ZXJUaGFuOiAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA+
ICIsICIpIik7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTGVzc1RoYW5F
cXVhbDogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIDw9ICIsICIpIik7ICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiKCIsICIgPj0gIiwgIikiKTsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVPcFZlY3RvckVxdWFsOiAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA9
PSAiLCAiKSIpOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wVmVjdG9yTm90
RXF1YWw6ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICE9ICIsICIpIik7ICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BNb2Q6CisgICAgICAgIHsKKyAgICAgICAgICAg
IC8vIFdlIG5lZWQgdG8gbG9vayBhdCB0aGUgbnVtYmVyIG9mIGNvbXBvbmVudHMgaW4gYm90aCBh
cmd1bWVudHMKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0U2VxdWVuY2UoKVswXS0+Z2V0
QXNUeXBlZCgpLT5nZXROb21pbmFsU2l6ZSgpICogMTAKKyAgICAgICAgICAgICAgICAgICAgICsg
bm9kZS0+Z2V0U2VxdWVuY2UoKVsxXS0+Z2V0QXNUeXBlZCgpLT5nZXROb21pbmFsU2l6ZSgpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDExOiBtVXNlc01vZDEgPSB0cnVlOyBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSAyMjogbVVzZXNNb2QydiA9IHRydWU7IGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIDIxOiBtVXNlc01vZDJmID0gdHJ1ZTsgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgMzM6IG1Vc2VzTW9kM3YgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSAzMTogbVVzZXNNb2QzZiA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDQ0
OiBtVXNlc01vZDR2ID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgNDE6IG1Vc2Vz
TW9kNGYgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm1v
ZCgiLCAiLCAiLCAiKSIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
T3BQb3c6ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAicG93KCIsICIsICIsICIp
Iik7ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEF0YW46CisgICAgICAgIEFT
U0VSVChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKTsgICAvLyBhdGFuKHgpIGlzIGEg
dW5hcnkgb3BlcmF0b3IKKyAgICAgICAgc3dpdGNoIChub2RlLT5nZXRTZXF1ZW5jZSgpWzBdLT5n
ZXRBc1R5cGVkKCktPmdldE5vbWluYWxTaXplKCkpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNl
IDE6IG1Vc2VzQXRhbjJfMSA9IHRydWU7IGJyZWFrOworICAgICAgICAgIGNhc2UgMjogbVVzZXNB
dGFuMl8yID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgY2FzZSAzOiBtVXNlc0F0YW4yXzMgPSB0
cnVlOyBicmVhazsKKyAgICAgICAgICBjYXNlIDQ6IG1Vc2VzQXRhbjJfNCA9IHRydWU7IGJyZWFr
OworICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgImF0YW55eCgiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRU9wTWluOiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm1p
bigiLCAiLCAiLCAiKSIpOyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcE1heDogICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJtYXgoIiwgIiwgIiwgIikiKTsgICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBFT3BDbGFtcDogICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAiY2xhbXAoIiwgIiwgIiwgIikiKTsgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTWl4
OiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImxlcnAoIiwgIiwgIiwgIikiKTsgICAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFN0ZXA6ICAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJzdGVwKCIsICIsICIsICIpIik7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
T3BTbW9vdGhTdGVwOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAic21vb3Roc3RlcCgiLCAiLCAi
LCAiKSIpOyAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRGlzdGFuY2U6ICAgICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgImRpc3RhbmNlKCIsICIsICIsICIpIik7ICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEVPcERvdDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkb3QoIiwgIiwgIiwg
IikiKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDcm9zczogICAgICAgICBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAiY3Jvc3MoIiwgIiwgIiwgIikiKTsgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRU9wRmFjZUZvcndhcmQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS0+Z2V0U2VxdWVuY2UoKVswXS0+Z2V0QXNUeXBlZCgpLT5nZXROb21pbmFsU2l6ZSgpKSAg
IC8vIE51bWJlciBvZiBjb21wb25lbnRzIGluIHRoZSBmaXJzdCBhcmd1bWVudAorICAgICAgICAg
ICAgeworICAgICAgICAgICAgY2FzZSAxOiBtVXNlc0ZhY2Vmb3J3YXJkMSA9IHRydWU7IGJyZWFr
OworICAgICAgICAgICAgY2FzZSAyOiBtVXNlc0ZhY2Vmb3J3YXJkMiA9IHRydWU7IGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSAzOiBtVXNlc0ZhY2Vmb3J3YXJkMyA9IHRydWU7IGJyZWFrOworICAg
ICAgICAgICAgY2FzZSA0OiBtVXNlc0ZhY2Vmb3J3YXJkNCA9IHRydWU7IGJyZWFrOworICAgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZhY2Vmb3J3YXJkKCIsICIsICIs
ICIpIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFJlZmxlY3Q6
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJyZWZsZWN0KCIsICIsICIsICIpIik7ICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBFT3BSZWZyYWN0OiAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAicmVmcmFjdCgiLCAiLCAiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTXVs
OiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICogIiwgIikiKTsgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIE91dHB1dEhMU0w6OnZpc2l0U2VsZWN0aW9uKFZpc2l0
IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uICpub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91
dCA9IG1Cb2R5OworCisgICAgaWYgKG5vZGUtPnVzZXNUZXJuYXJ5T3BlcmF0b3IoKSkKKyAgICB7
CisgICAgICAgIG91dCA8PCAicyIgPDwgbVVuZm9sZFNob3J0Q2lyY3VpdC0+Z2V0TmV4dFRlbXBv
cmFyeUluZGV4KCk7CisgICAgfQorICAgIGVsc2UgIC8vIGlmL2Vsc2Ugc3RhdGVtZW50CisgICAg
eworICAgICAgICBtVW5mb2xkU2hvcnRDaXJjdWl0LT50cmF2ZXJzZShub2RlLT5nZXRDb25kaXRp
b24oKSk7CisKKyAgICAgICAgb3V0IDw8ICJpZiAoIjsKKworICAgICAgICBub2RlLT5nZXRDb25k
aXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CisKKyAgICAgICAgb3V0IDw8ICIpXG4iOworICAgICAg
ICAKKyAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRMaW5lKCkuZmlyc3RfbGlu
ZSk7CisgICAgICAgIG91dCA8PCAie1xuIjsKKworICAgICAgICBib29sIGRpc2NhcmQgPSBmYWxz
ZTsKKworICAgICAgICBpZiAobm9kZS0+Z2V0VHJ1ZUJsb2NrKCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHRyYXZlcnNlU3RhdGVtZW50cyhub2RlLT5nZXRUcnVlQmxvY2soKSk7CisKKyAgICAg
ICAgICAgIC8vIERldGVjdCB0cnVlIGRpc2NhcmQKKyAgICAgICAgICAgIGRpc2NhcmQgPSAoZGlz
Y2FyZCB8fCBGaW5kRGlzY2FyZDo6c2VhcmNoKG5vZGUtPmdldFRydWVCbG9jaygpKSk7CisgICAg
ICAgIH0KKworICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKS5maXJz
dF9saW5lKTsKKyAgICAgICAgb3V0IDw8ICI7XG59XG4iOworCisgICAgICAgIGlmIChub2RlLT5n
ZXRGYWxzZUJsb2NrKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZWxzZVxuIjsK
KworICAgICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRGYWxzZUJsb2NrKCkt
PmdldExpbmUoKS5maXJzdF9saW5lKTsKKyAgICAgICAgICAgIG91dCA8PCAie1xuIjsKKworICAg
ICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRGYWxzZUJsb2NrKCktPmdldExp
bmUoKS5maXJzdF9saW5lKTsKKyAgICAgICAgICAgIHRyYXZlcnNlU3RhdGVtZW50cyhub2RlLT5n
ZXRGYWxzZUJsb2NrKCkpOworCisgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUt
PmdldEZhbHNlQmxvY2soKS0+Z2V0TGluZSgpLmZpcnN0X2xpbmUpOworICAgICAgICAgICAgb3V0
IDw8ICI7XG59XG4iOworCisgICAgICAgICAgICAvLyBEZXRlY3QgZmFsc2UgZGlzY2FyZAorICAg
ICAgICAgICAgZGlzY2FyZCA9IChkaXNjYXJkIHx8IEZpbmREaXNjYXJkOjpzZWFyY2gobm9kZS0+
Z2V0RmFsc2VCbG9jaygpKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBBTkdMRSBpc3N1ZSA0
ODY6IERldGVjdCBwcm9ibGVtYXRpYyBjb25kaXRpb25hbCBkaXNjYXJkCisgICAgICAgIGlmIChk
aXNjYXJkICYmIEZpbmRTaWRlRWZmZWN0UmV3cml0aW5nOjpzZWFyY2gobm9kZSkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1Vc2VzRGlzY2FyZFJld3JpdGluZyA9IHRydWU7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgT3V0cHV0SExTTDo6dmlzaXRD
b25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uICpub2RlKQoreworICAgIHdyaXRlQ29u
c3RhbnRVbmlvbihub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCkp
OworfQorCitib29sIE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxv
b3AgKm5vZGUpCit7CisgICAgYm9vbCB3YXNEaXNjb250aW51b3VzID0gbUluc2lkZURpc2NvbnRp
bnVvdXNMb29wOworCisgICAgaWYgKG1Db250YWluc0xvb3BEaXNjb250aW51aXR5ICYmICFtSW5z
aWRlRGlzY29udGludW91c0xvb3ApCisgICAgeworICAgICAgICBtSW5zaWRlRGlzY29udGludW91
c0xvb3AgPSBjb250YWluc0xvb3BEaXNjb250aW51aXR5KG5vZGUpOworICAgIH0KKworICAgIGlm
IChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgeworICAgICAgICBpZiAoaGFu
ZGxlRXhjZXNzaXZlTG9vcChub2RlKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorCisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7
CisKKyAgICBpZiAobm9kZS0+Z2V0VHlwZSgpID09IEVMb29wRG9XaGlsZSkKKyAgICB7CisgICAg
ICAgIG91dCA8PCAie2RvXG4iOworCisgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+
Z2V0TGluZSgpLmZpcnN0X2xpbmUpOworICAgICAgICBvdXQgPDwgIntcbiI7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIG91dCA8PCAie2ZvcigiOworICAgICAgICAKKyAgICAgICAg
aWYgKG5vZGUtPmdldEluaXQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbm9kZS0+Z2V0SW5p
dCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIG91dCA8PCAiOyAiOwor
CisgICAgICAgIGlmIChub2RlLT5nZXRDb25kaXRpb24oKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB9CisKKyAg
ICAgICAgb3V0IDw8ICI7ICI7CisKKyAgICAgICAgaWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkK
KyAgICAgICAgeworICAgICAgICAgICAgbm9kZS0+Z2V0RXhwcmVzc2lvbigpLT50cmF2ZXJzZSh0
aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIG91dCA8PCAiKVxuIjsKKyAgICAgICAgCisgICAg
ICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0TGluZSgpLmZpcnN0X2xpbmUpOworICAg
ICAgICBvdXQgPDwgIntcbiI7CisgICAgfQorCisgICAgaWYgKG5vZGUtPmdldEJvZHkoKSkKKyAg
ICB7CisgICAgICAgIHRyYXZlcnNlU3RhdGVtZW50cyhub2RlLT5nZXRCb2R5KCkpOworICAgIH0K
KworICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0TGluZSgpLmZpcnN0X2xpbmUpOwor
ICAgIG91dCA8PCAiO31cbiI7CisKKyAgICBpZiAobm9kZS0+Z2V0VHlwZSgpID09IEVMb29wRG9X
aGlsZSkKKyAgICB7CisgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0Q29uZGl0
aW9uKCktPmdldExpbmUoKS5maXJzdF9saW5lKTsKKyAgICAgICAgb3V0IDw8ICJ3aGlsZShcbiI7
CisKKyAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOworCisgICAg
ICAgIG91dCA8PCAiKTsiOworICAgIH0KKworICAgIG91dCA8PCAifVxuIjsKKworICAgIG1JbnNp
ZGVEaXNjb250aW51b3VzTG9vcCA9IHdhc0Rpc2NvbnRpbnVvdXM7CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgT3V0cHV0SExTTDo6dmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRl
cm1CcmFuY2ggKm5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CisKKyAg
ICBzd2l0Y2ggKG5vZGUtPmdldEZsb3dPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wS2lsbDoK
KyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImRpc2NhcmQ7XG4iLCAiIiwgIiIpOworICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQnJlYWs6CisgICAgICAgIGlmICh2aXNpdCA9PSBQ
cmVWaXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1FeGNlc3NpdmVMb29wSW5kZXgp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJ7QnJlYWsiOworICAgICAg
ICAgICAgICAgIG1FeGNlc3NpdmVMb29wSW5kZXgtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAg
ICAgICAgIG91dCA8PCAiID0gdHJ1ZTsgYnJlYWs7fVxuIjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgImJyZWFr
O1xuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRU9wQ29udGludWU6IG91dHB1dFRyaXBsZXQodmlzaXQsICJjb250aW51ZTtcbiIsICIiLCAi
Iik7IGJyZWFrOworICAgICAgY2FzZSBFT3BSZXR1cm46CisgICAgICAgIGlmICh2aXNpdCA9PSBQ
cmVWaXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vZGUtPmdldEV4cHJlc3Npb24o
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgInJldHVybiAiOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG91dCA8PCAicmV0dXJuO1xuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmICh2aXNpdCA9PSBQb3N0VmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChub2RlLT5nZXRFeHByZXNzaW9uKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
b3V0IDw8ICI7XG4iOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBPdXRwdXRITFNMOjp0cmF2ZXJzZVN0YXRlbWVudHMoVEludGVybU5vZGUgKm5v
ZGUpCit7CisgICAgaWYgKGlzU2luZ2xlU3RhdGVtZW50KG5vZGUpKQorICAgIHsKKyAgICAgICAg
bVVuZm9sZFNob3J0Q2lyY3VpdC0+dHJhdmVyc2Uobm9kZSk7CisgICAgfQorCisgICAgbm9kZS0+
dHJhdmVyc2UodGhpcyk7Cit9CisKK2Jvb2wgT3V0cHV0SExTTDo6aXNTaW5nbGVTdGF0ZW1lbnQo
VEludGVybU5vZGUgKm5vZGUpCit7CisgICAgVEludGVybUFnZ3JlZ2F0ZSAqYWdncmVnYXRlID0g
bm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsKKworICAgIGlmIChhZ2dyZWdhdGUpCisgICAgeworICAg
ICAgICBpZiAoYWdncmVnYXRlLT5nZXRPcCgpID09IEVPcFNlcXVlbmNlKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg
ICB7CisgICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gYWdn
cmVnYXRlLT5nZXRTZXF1ZW5jZSgpLmJlZ2luKCk7IHNpdCAhPSBhZ2dyZWdhdGUtPmdldFNlcXVl
bmNlKCkuZW5kKCk7IHNpdCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgh
aXNTaW5nbGVTdGF0ZW1lbnQoKnNpdCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCisvLyBIYW5kbGUgbG9vcHMgd2l0aCBtb3JlIHRoYW4gMjU0IGl0ZXJhdGlv
bnMgKHVuc3VwcG9ydGVkIGJ5IEQzRDkpIGJ5IHNwbGl0dGluZyB0aGVtCisvLyAoVGhlIEQzRCBk
b2N1bWVudGF0aW9uIHNheXMgMjU1IGl0ZXJhdGlvbnMsIGJ1dCB0aGUgY29tcGlsZXIgY29tcGxh
aW5zIGF0IGFueXRoaW5nIG1vcmUgdGhhbiAyNTQpLgorYm9vbCBPdXRwdXRITFNMOjpoYW5kbGVF
eGNlc3NpdmVMb29wKFRJbnRlcm1Mb29wICpub2RlKQoreworICAgIGNvbnN0IGludCBNQVhfTE9P
UF9JVEVSQVRJT05TID0gMjU0OworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OworCisg
ICAgLy8gUGFyc2UgbG9vcHMgb2YgdGhlIGZvcm06CisgICAgLy8gZm9yKGludCBpbmRleCA9IGlu
aXRpYWw7IGluZGV4IFtjb21wYXJhdG9yXSBsaW1pdDsgaW5kZXggKz0gaW5jcmVtZW50KQorICAg
IFRJbnRlcm1TeW1ib2wgKmluZGV4ID0gTlVMTDsKKyAgICBUT3BlcmF0b3IgY29tcGFyYXRvciA9
IEVPcE51bGw7CisgICAgaW50IGluaXRpYWwgPSAwOworICAgIGludCBsaW1pdCA9IDA7CisgICAg
aW50IGluY3JlbWVudCA9IDA7CisKKyAgICAvLyBQYXJzZSBpbmRleCBuYW1lIGFuZCBpbnRpYWwg
dmFsdWUKKyAgICBpZiAobm9kZS0+Z2V0SW5pdCgpKQorICAgIHsKKyAgICAgICAgVEludGVybUFn
Z3JlZ2F0ZSAqaW5pdCA9IG5vZGUtPmdldEluaXQoKS0+Z2V0QXNBZ2dyZWdhdGUoKTsKKworICAg
ICAgICBpZiAoaW5pdCkKKyAgICAgICAgeworICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZz
ZXF1ZW5jZSA9IGluaXQtPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQg
KnZhcmlhYmxlID0gc2VxdWVuY2VbMF0tPmdldEFzVHlwZWQoKTsKKworICAgICAgICAgICAgaWYg
KHZhcmlhYmxlICYmIHZhcmlhYmxlLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFUZW1wb3JhcnkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVEludGVybUJpbmFyeSAqYXNzaWduID0gdmFy
aWFibGUtPmdldEFzQmluYXJ5Tm9kZSgpOworCisgICAgICAgICAgICAgICAgaWYgKGFzc2lnbi0+
Z2V0T3AoKSA9PSBFT3BJbml0aWFsaXplKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gYXNzaWduLT5nZXRMZWZ0KCktPmdldEFz
U3ltYm9sTm9kZSgpOworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAq
Y29uc3RhbnQgPSBhc3NpZ24tPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpOworCisg
ICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wgJiYgY29uc3RhbnQpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdGFudC0+Z2V0QmFzaWNU
eXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5nZXROb21pbmFsU2l6ZSgpID09IDEpCisgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgg
PSBzeW1ib2w7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbCA9IGNvbnN0YW50
LT5nZXRJQ29uc3QoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBQYXJzZSBjb21wYXJhdG9yIGFuZCBsaW1pdCB2YWx1ZQorICAgIGlmIChp
bmRleCAhPSBOVUxMICYmIG5vZGUtPmdldENvbmRpdGlvbigpKQorICAgIHsKKyAgICAgICAgVElu
dGVybUJpbmFyeSAqdGVzdCA9IG5vZGUtPmdldENvbmRpdGlvbigpLT5nZXRBc0JpbmFyeU5vZGUo
KTsKKyAgICAgICAgCisgICAgICAgIGlmICh0ZXN0ICYmIHRlc3QtPmdldExlZnQoKS0+Z2V0QXNT
eW1ib2xOb2RlKCktPmdldElkKCkgPT0gaW5kZXgtPmdldElkKCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpjb25zdGFudCA9IHRlc3QtPmdldFJpZ2h0KCkt
PmdldEFzQ29uc3RhbnRVbmlvbigpOworCisgICAgICAgICAgICBpZiAoY29uc3RhbnQpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSA9
PSBFYnRJbnQgJiYgY29uc3RhbnQtPmdldE5vbWluYWxTaXplKCkgPT0gMSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbXBhcmF0b3IgPSB0ZXN0LT5nZXRPcCgpOwor
ICAgICAgICAgICAgICAgICAgICBsaW1pdCA9IGNvbnN0YW50LT5nZXRJQ29uc3QoMCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8g
UGFyc2UgaW5jcmVtZW50CisgICAgaWYgKGluZGV4ICE9IE5VTEwgJiYgY29tcGFyYXRvciAhPSBF
T3BOdWxsICYmIG5vZGUtPmdldEV4cHJlc3Npb24oKSkKKyAgICB7CisgICAgICAgIFRJbnRlcm1C
aW5hcnkgKmJpbmFyeVRlcm1pbmFsID0gbm9kZS0+Z2V0RXhwcmVzc2lvbigpLT5nZXRBc0JpbmFy
eU5vZGUoKTsKKyAgICAgICAgVEludGVybVVuYXJ5ICp1bmFyeVRlcm1pbmFsID0gbm9kZS0+Z2V0
RXhwcmVzc2lvbigpLT5nZXRBc1VuYXJ5Tm9kZSgpOworICAgICAgICAKKyAgICAgICAgaWYgKGJp
bmFyeVRlcm1pbmFsKQorICAgICAgICB7CisgICAgICAgICAgICBUT3BlcmF0b3Igb3AgPSBiaW5h
cnlUZXJtaW5hbC0+Z2V0T3AoKTsKKyAgICAgICAgICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpj
b25zdGFudCA9IGJpbmFyeVRlcm1pbmFsLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24o
KTsKKworICAgICAgICAgICAgaWYgKGNvbnN0YW50KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGlmIChjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50
LT5nZXROb21pbmFsU2l6ZSgpID09IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBpbnQgdmFsdWUgPSBjb25zdGFudC0+Z2V0SUNvbnN0KDApOworCisgICAgICAgICAg
ICAgICAgICAgIHN3aXRjaCAob3ApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjogaW5jcmVtZW50ID0gdmFsdWU7ICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjogaW5jcmVtZW50ID0gLXZh
bHVlOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTklNUExFTUVOVEVE
KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodW5hcnlUZXJtaW5hbCkKKyAgICAgICAg
eworICAgICAgICAgICAgVE9wZXJhdG9yIG9wID0gdW5hcnlUZXJtaW5hbC0+Z2V0T3AoKTsKKwor
ICAgICAgICAgICAgc3dpdGNoIChvcCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2Fz
ZSBFT3BQb3N0SW5jcmVtZW50OiBpbmNyZW1lbnQgPSAxOyAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRU9wUG9zdERlY3JlbWVudDogaW5jcmVtZW50ID0gLTE7IGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEVPcFByZUluY3JlbWVudDogIGluY3JlbWVudCA9IDE7ICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6ICBpbmNyZW1lbnQgPSAtMTsgYnJlYWs7Cisg
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOSU1QTEVNRU5URUQoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmIChpbmRleCAhPSBOVUxMICYmIGNvbXBhcmF0b3IgIT0g
RU9wTnVsbCAmJiBpbmNyZW1lbnQgIT0gMCkKKyAgICB7CisgICAgICAgIGlmIChjb21wYXJhdG9y
ID09IEVPcExlc3NUaGFuRXF1YWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbXBhcmF0b3Ig
PSBFT3BMZXNzVGhhbjsKKyAgICAgICAgICAgIGxpbWl0ICs9IDE7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoY29tcGFyYXRvciA9PSBFT3BMZXNzVGhhbikKKyAgICAgICAgeworICAgICAgICAg
ICAgaW50IGl0ZXJhdGlvbnMgPSAobGltaXQgLSBpbml0aWFsKSAvIGluY3JlbWVudDsKKworICAg
ICAgICAgICAgaWYgKGl0ZXJhdGlvbnMgPD0gTUFYX0xPT1BfSVRFUkFUSU9OUykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gTm90IGFuIGV4Y2Vzc2l2
ZSBsb29wCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnJlc3Rv
cmVJbmRleCA9IG1FeGNlc3NpdmVMb29wSW5kZXg7CisgICAgICAgICAgICBtRXhjZXNzaXZlTG9v
cEluZGV4ID0gaW5kZXg7CisKKyAgICAgICAgICAgIG91dCA8PCAie2ludCAiOworICAgICAgICAg
ICAgaW5kZXgtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICI7XG4iCisgICAg
ICAgICAgICAgICAgICAgImJvb2wgQnJlYWsiOworICAgICAgICAgICAgaW5kZXgtPnRyYXZlcnNl
KHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICIgPSBmYWxzZTtcbiI7CisKKyAgICAgICAgICAg
IGJvb2wgZmlyc3RMb29wRnJhZ21lbnQgPSB0cnVlOworCisgICAgICAgICAgICB3aGlsZSAoaXRl
cmF0aW9ucyA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IGNsYW1wZWRM
aW1pdCA9IGluaXRpYWwgKyBpbmNyZW1lbnQgKiBzdGQ6Om1pbihNQVhfTE9PUF9JVEVSQVRJT05T
LCBpdGVyYXRpb25zKTsKKworICAgICAgICAgICAgICAgIGlmICghZmlyc3RMb29wRnJhZ21lbnQp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImlmICghQnJl
YWsiOworICAgICAgICAgICAgICAgICAgICBpbmRleC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAg
ICAgICAgICAgICAgIG91dCA8PCAiKSB7XG4iOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIGlmIChpdGVyYXRpb25zIDw9IE1BWF9MT09QX0lURVJBVElPTlMpICAgLy8gTGFz
dCBsb29wIGZyYWdtZW50CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBt
RXhjZXNzaXZlTG9vcEluZGV4ID0gTlVMTDsgICAvLyBTdG9wcyBzZXR0aW5nIHRoZSBCcmVhayBm
bGFnCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IC8vIGZvcihpbnQgaW5kZXggPSBpbml0aWFsOyBpbmRleCA8IGNsYW1wZWRMaW1pdDsgaW5kZXgg
Kz0gaW5jcmVtZW50KQorCisgICAgICAgICAgICAgICAgb3V0IDw8ICJmb3IoIjsKKyAgICAgICAg
ICAgICAgICBpbmRleC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIg
PSAiOworICAgICAgICAgICAgICAgIG91dCA8PCBpbml0aWFsOworCisgICAgICAgICAgICAgICAg
b3V0IDw8ICI7ICI7CisgICAgICAgICAgICAgICAgaW5kZXgtPnRyYXZlcnNlKHRoaXMpOworICAg
ICAgICAgICAgICAgIG91dCA8PCAiIDwgIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgY2xhbXBl
ZExpbWl0OworCisgICAgICAgICAgICAgICAgb3V0IDw8ICI7ICI7CisgICAgICAgICAgICAgICAg
aW5kZXgtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAgIG91dCA8PCAiICs9ICI7Cisg
ICAgICAgICAgICAgICAgb3V0IDw8IGluY3JlbWVudDsKKyAgICAgICAgICAgICAgICBvdXQgPDwg
IilcbiI7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgb3V0cHV0TGluZURpcmVj
dGl2ZShub2RlLT5nZXRMaW5lKCkuZmlyc3RfbGluZSk7CisgICAgICAgICAgICAgICAgb3V0IDw8
ICJ7XG4iOworCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldEJvZHkoKSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmdldEJvZHkoKS0+dHJhdmVyc2Uo
dGhpcyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgb3V0cHV0TGluZURp
cmVjdGl2ZShub2RlLT5nZXRMaW5lKCkuZmlyc3RfbGluZSk7CisgICAgICAgICAgICAgICAgb3V0
IDw8ICI7fVxuIjsKKworICAgICAgICAgICAgICAgIGlmICghZmlyc3RMb29wRnJhZ21lbnQpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIn1cbiI7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZmlyc3RMb29wRnJhZ21lbnQgPSBmYWxz
ZTsKKworICAgICAgICAgICAgICAgIGluaXRpYWwgKz0gTUFYX0xPT1BfSVRFUkFUSU9OUyAqIGlu
Y3JlbWVudDsKKyAgICAgICAgICAgICAgICBpdGVyYXRpb25zIC09IE1BWF9MT09QX0lURVJBVElP
TlM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG91dCA8PCAifSI7
CisKKyAgICAgICAgICAgIG1FeGNlc3NpdmVMb29wSW5kZXggPSByZXN0b3JlSW5kZXg7CisKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgVU5JTVBMRU1F
TlRFRCgpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsgICAvLyBOb3QgaGFuZGxlZCBhcyBh
biBleGNlc3NpdmUgbG9vcAorfQorCit2b2lkIE91dHB1dEhMU0w6Om91dHB1dFRyaXBsZXQoVmlz
aXQgdmlzaXQsIGNvbnN0IFRTdHJpbmcgJnByZVN0cmluZywgY29uc3QgVFN0cmluZyAmaW5TdHJp
bmcsIGNvbnN0IFRTdHJpbmcgJnBvc3RTdHJpbmcpCit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0
ID0gbUJvZHk7CisKKyAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAgeworICAgICAgICBv
dXQgPDwgcHJlU3RyaW5nOworICAgIH0KKyAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQor
ICAgIHsKKyAgICAgICAgb3V0IDw8IGluU3RyaW5nOworICAgIH0KKyAgICBlbHNlIGlmICh2aXNp
dCA9PSBQb3N0VmlzaXQpCisgICAgeworICAgICAgICBvdXQgPDwgcG9zdFN0cmluZzsKKyAgICB9
Cit9CisKK3ZvaWQgT3V0cHV0SExTTDo6b3V0cHV0TGluZURpcmVjdGl2ZShpbnQgbGluZSkKK3sK
KyAgICBpZiAoKG1Db250ZXh0LmNvbXBpbGVPcHRpb25zICYgU0hfTElORV9ESVJFQ1RJVkVTKSAm
JiAobGluZSA+IDApKQorICAgIHsKKyAgICAgICAgbUJvZHkgPDwgIlxuIjsKKyAgICAgICAgbUJv
ZHkgPDwgIiNsaW5lICIgPDwgbGluZTsKKworICAgICAgICBpZiAobUNvbnRleHQuc291cmNlUGF0
aCkKKyAgICAgICAgeworICAgICAgICAgICAgbUJvZHkgPDwgIiBcIiIgPDwgbUNvbnRleHQuc291
cmNlUGF0aCA8PCAiXCIiOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtQm9keSA8PCAi
XG4iOworICAgIH0KK30KKworVFN0cmluZyBPdXRwdXRITFNMOjphcmd1bWVudFN0cmluZyhjb25z
dCBUSW50ZXJtU3ltYm9sICpzeW1ib2wpCit7CisgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBz
eW1ib2wtPmdldFF1YWxpZmllcigpOworICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gc3ltYm9sLT5n
ZXRUeXBlKCk7CisgICAgVFN0cmluZyBuYW1lID0gc3ltYm9sLT5nZXRTeW1ib2woKTsKKworICAg
IGlmIChuYW1lLmVtcHR5KCkpICAgLy8gSExTTCBkZW1hbmRzIG5hbWVkIGFyZ3VtZW50cywgYWxz
byBmb3IgcHJvdG90eXBlcworICAgIHsKKyAgICAgICAgbmFtZSA9ICJ4IiArIHN0cihtVW5pcXVl
SW5kZXgrKyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG5hbWUgPSBkZWNvcmF0
ZShuYW1lKTsKKyAgICB9CisKKyAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBV
VCAmJiBJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpCisgICAgeworICAgICAgIHJldHVy
biBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIgIiArIHRleHR1cmVTdHJpbmcodHlwZSkg
KyAiIHRleHR1cmVfIiArIG5hbWUgKyBhcnJheVN0cmluZyh0eXBlKSArICIsICIgKworICAgICAg
ICAgICAgICBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIgU2FtcGxlclN0YXRlIHNhbXBs
ZXJfIiArIG5hbWUgKyBhcnJheVN0cmluZyh0eXBlKTsKKyAgICB9CisKKyAgICByZXR1cm4gcXVh
bGlmaWVyU3RyaW5nKHF1YWxpZmllcikgKyAiICIgKyB0eXBlU3RyaW5nKHR5cGUpICsgIiAiICsg
bmFtZSArIGFycmF5U3RyaW5nKHR5cGUpOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OnF1YWxp
ZmllclN0cmluZyhUUXVhbGlmaWVyIHF1YWxpZmllcikKK3sKKyAgICBzd2l0Y2gocXVhbGlmaWVy
KQorICAgIHsKKyAgICAgIGNhc2UgRXZxSW46ICAgICAgICAgICAgcmV0dXJuICJpbiI7CisgICAg
ICBjYXNlIEV2cU91dDogICAgICAgICAgIHJldHVybiAib3V0IjsKKyAgICAgIGNhc2UgRXZxSW5P
dXQ6ICAgICAgICAgcmV0dXJuICJpbm91dCI7CisgICAgICBjYXNlIEV2cUNvbnN0UmVhZE9ubHk6
IHJldHVybiAiY29uc3QiOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisK
KyAgICByZXR1cm4gIiI7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6dHlwZVN0cmluZyhjb25z
dCBUVHlwZSAmdHlwZSkKK3sKKyAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1
Y3QpCisgICAgeworICAgICAgICBjb25zdCBUU3RyaW5nJiB0eXBlTmFtZSA9IHR5cGUuZ2V0U3Ry
dWN0KCktPm5hbWUoKTsKKyAgICAgICAgaWYgKHR5cGVOYW1lICE9ICIiKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gc3RydWN0TG9va3VwKHR5cGVOYW1lKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlICAgLy8gTmFtZWxlc3Mgc3RydWN0dXJlLCBkZWZpbmUgaW4gcGxhY2UKKyAgICAg
ICAgeworICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gdHlwZS5nZXRTdHJ1
Y3QoKS0+ZmllbGRzKCk7CisKKyAgICAgICAgICAgIFRTdHJpbmcgc3RyaW5nID0gInN0cnVjdFxu
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAie1xuIjsKKworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICpmaWVsZCA9IGZpZWxkc1tpXTsKKwor
ICAgICAgICAgICAgICAgIHN0cmluZyArPSAiICAgICIgKyB0eXBlU3RyaW5nKCpmaWVsZC0+dHlw
ZSgpKSArICIgIiArIGRlY29yYXRlKGZpZWxkLT5uYW1lKCkpICsgYXJyYXlTdHJpbmcoKmZpZWxk
LT50eXBlKCkpICsgIjtcbiI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN0cmluZyAr
PSAifSAiOworCisgICAgICAgICAgICByZXR1cm4gc3RyaW5nOworICAgICAgICB9CisgICAgfQor
ICAgIGVsc2UgaWYgKHR5cGUuaXNNYXRyaXgoKSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlw
ZS5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSAyOiByZXR1cm4g
ImZsb2F0MngyIjsKKyAgICAgICAgICBjYXNlIDM6IHJldHVybiAiZmxvYXQzeDMiOworICAgICAg
ICAgIGNhc2UgNDogcmV0dXJuICJmbG9hdDR4NCI7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlLmdldEJhc2ljVHlwZSgpKQorICAgICAgICB7
CisgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZS5nZXRO
b21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IHJldHVy
biAiZmxvYXQiOworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiAiZmxvYXQyIjsKKyAgICAg
ICAgICAgICAgY2FzZSAzOiByZXR1cm4gImZsb2F0MyI7CisgICAgICAgICAgICAgIGNhc2UgNDog
cmV0dXJuICJmbG9hdDQiOworICAgICAgICAgICAgfQorICAgICAgICAgIGNhc2UgRWJ0SW50Ogor
ICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuICJpbnQiOworICAgICAgICAgICAgICBjYXNl
IDI6IHJldHVybiAiaW50MiI7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuICJpbnQzIjsK
KyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gImludDQiOworICAgICAgICAgICAgfQorICAg
ICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFs
U2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiAiYm9v
bCI7CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuICJib29sMiI7CisgICAgICAgICAgICAg
IGNhc2UgMzogcmV0dXJuICJib29sMyI7CisgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuICJi
b29sNCI7CisgICAgICAgICAgICB9CisgICAgICAgICAgY2FzZSBFYnRWb2lkOgorICAgICAgICAg
ICAgcmV0dXJuICJ2b2lkIjsKKyAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAgICAgICAg
ICAgIHJldHVybiAic2FtcGxlcjJEIjsKKyAgICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgor
ICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyQ1VCRSI7CisgICAgICAgICAgY2FzZSBFYnRTYW1w
bGVyRXh0ZXJuYWxPRVM6CisgICAgICAgICAgICByZXR1cm4gInNhbXBsZXIyRCI7CisgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAg
VU5SRUFDSEFCTEUoKTsKKyAgICByZXR1cm4gIjx1bmtub3duIHR5cGU+IjsKK30KKworVFN0cmlu
ZyBPdXRwdXRITFNMOjp0ZXh0dXJlU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQoreworICAgIHN3
aXRjaCAodHlwZS5nZXRCYXNpY1R5cGUoKSkKKyAgICB7CisgICAgICBjYXNlIEVidFNhbXBsZXIy
RDoKKyAgICAgICAgcmV0dXJuICJUZXh0dXJlMkQiOworICAgICAgY2FzZSBFYnRTYW1wbGVyQ3Vi
ZToKKyAgICAgICAgcmV0dXJuICJUZXh0dXJlQ3ViZSI7CisgICAgICBjYXNlIEVidFNhbXBsZXJF
eHRlcm5hbE9FUzoKKyAgICAgICAgcmV0dXJuICJUZXh0dXJlMkQiOworICAgICAgZGVmYXVsdDoK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgVU5SRUFDSEFCTEUoKTsKKyAgICByZXR1cm4g
Ijx1bmtub3duIHRleHR1cmUgdHlwZT4iOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OmFycmF5
U3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQoreworICAgIGlmICghdHlwZS5pc0FycmF5KCkpCisg
ICAgeworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAgcmV0dXJuICJbIiArIHN0cih0
eXBlLmdldEFycmF5U2l6ZSgpKSArICJdIjsKK30KKworVFN0cmluZyBPdXRwdXRITFNMOjppbml0
aWFsaXplcihjb25zdCBUVHlwZSAmdHlwZSkKK3sKKyAgICBUU3RyaW5nIHN0cmluZzsKKworICAg
IHNpemVfdCBzaXplID0gdHlwZS5nZXRPYmplY3RTaXplKCk7CisgICAgZm9yIChzaXplX3QgY29t
cG9uZW50ID0gMDsgY29tcG9uZW50IDwgc2l6ZTsgY29tcG9uZW50KyspCisgICAgeworICAgICAg
ICBzdHJpbmcgKz0gIjAiOworCisgICAgICAgIGlmIChjb21wb25lbnQgKyAxIDwgc2l6ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgc3RyaW5nICs9ICIsICI7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gInsiICsgc3RyaW5nICsgIn0iOworfQorCit2b2lkIE91dHB1dEhMU0w6OmFk
ZENvbnN0cnVjdG9yKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5nICZuYW1lLCBjb25z
dCBUSW50ZXJtU2VxdWVuY2UgKnBhcmFtZXRlcnMpCit7CisgICAgaWYgKG5hbWUgPT0gIiIpCisg
ICAgeworICAgICAgICByZXR1cm47ICAgLy8gTmFtZWxlc3Mgc3RydWN0dXJlcyBkb24ndCBoYXZl
IGNvbnN0cnVjdG9ycworICAgIH0KKworICAgIGlmICh0eXBlLmdldFN0cnVjdCgpICYmIG1TdHJ1
Y3ROYW1lcy5maW5kKGRlY29yYXRlKG5hbWUpKSAhPSBtU3RydWN0TmFtZXMuZW5kKCkpCisgICAg
eworICAgICAgICByZXR1cm47ICAgLy8gQWxyZWFkeSBhZGRlZAorICAgIH0KKworICAgIFRUeXBl
IGN0b3JUeXBlID0gdHlwZTsKKyAgICBjdG9yVHlwZS5jbGVhckFycmF5bmVzcygpOworICAgIGN0
b3JUeXBlLnNldFByZWNpc2lvbihFYnBIaWdoKTsKKyAgICBjdG9yVHlwZS5zZXRRdWFsaWZpZXIo
RXZxVGVtcG9yYXJ5KTsKKworICAgIFRTdHJpbmcgY3Rvck5hbWUgPSB0eXBlLmdldFN0cnVjdCgp
ID8gZGVjb3JhdGUobmFtZSkgOiBuYW1lOworCisgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxUVHlw
ZT4gUGFyYW1ldGVyQXJyYXk7CisgICAgUGFyYW1ldGVyQXJyYXkgY3RvclBhcmFtZXRlcnM7CisK
KyAgICBpZiAodHlwZS5nZXRTdHJ1Y3QoKSkKKyAgICB7CisgICAgICAgIG1TdHJ1Y3ROYW1lcy5p
bnNlcnQoZGVjb3JhdGUobmFtZSkpOworCisgICAgICAgIFRTdHJpbmcgc3RydWN0dXJlOworICAg
ICAgICBzdHJ1Y3R1cmUgKz0gInN0cnVjdCAiICsgZGVjb3JhdGUobmFtZSkgKyAiXG4iCisgICAg
ICAgICAgICAgICAgICAgICAie1xuIjsKKworICAgICAgICBjb25zdCBURmllbGRMaXN0ICZmaWVs
ZHMgPSB0eXBlLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgY29uc3QgVEZpZWxkICpmaWVsZCA9IGZpZWxkc1tpXTsKKworICAgICAgICAgICAgc3RydWN0
dXJlICs9ICIgICAgIiArIHR5cGVTdHJpbmcoKmZpZWxkLT50eXBlKCkpICsgIiAiICsgZGVjb3Jh
dGVGaWVsZChmaWVsZC0+bmFtZSgpLCB0eXBlKSArIGFycmF5U3RyaW5nKCpmaWVsZC0+dHlwZSgp
KSArICI7XG4iOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0dXJlICs9ICJ9O1xuIjsKKwor
ICAgICAgICBpZiAoc3RkOjpmaW5kKG1TdHJ1Y3REZWNsYXJhdGlvbnMuYmVnaW4oKSwgbVN0cnVj
dERlY2xhcmF0aW9ucy5lbmQoKSwgc3RydWN0dXJlKSA9PSBtU3RydWN0RGVjbGFyYXRpb25zLmVu
ZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBtU3RydWN0RGVjbGFyYXRpb25zLnB1c2hfYmFj
ayhzdHJ1Y3R1cmUpOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGN0b3JQ
YXJhbWV0ZXJzLnB1c2hfYmFjaygqZmllbGRzW2ldLT50eXBlKCkpOworICAgICAgICB9CisgICAg
fQorICAgIGVsc2UgaWYgKHBhcmFtZXRlcnMpCisgICAgeworICAgICAgICBmb3IgKFRJbnRlcm1T
ZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgcGFyYW1ldGVyID0gcGFyYW1ldGVycy0+YmVnaW4oKTsg
cGFyYW1ldGVyICE9IHBhcmFtZXRlcnMtPmVuZCgpOyBwYXJhbWV0ZXIrKykKKyAgICAgICAgewor
ICAgICAgICAgICAgY3RvclBhcmFtZXRlcnMucHVzaF9iYWNrKCgqcGFyYW1ldGVyKS0+Z2V0QXNU
eXBlZCgpLT5nZXRUeXBlKCkpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgVU5SRUFDSEFC
TEUoKTsKKworICAgIFRTdHJpbmcgY29uc3RydWN0b3I7CisKKyAgICBpZiAoY3RvclR5cGUuZ2V0
U3RydWN0KCkpCisgICAgeworICAgICAgICBjb25zdHJ1Y3RvciArPSBjdG9yTmFtZSArICIgIiAr
IGN0b3JOYW1lICsgIl9jdG9yKCI7CisgICAgfQorICAgIGVsc2UgICAvLyBCdWlsdC1pbiB0eXBl
CisgICAgeworICAgICAgICBjb25zdHJ1Y3RvciArPSB0eXBlU3RyaW5nKGN0b3JUeXBlKSArICIg
IiArIGN0b3JOYW1lICsgIigiOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW50IHBhcmFt
ZXRlciA9IDA7IHBhcmFtZXRlciA8IGN0b3JQYXJhbWV0ZXJzLnNpemUoKTsgcGFyYW1ldGVyKysp
CisgICAgeworICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IGN0b3JQYXJhbWV0ZXJzW3BhcmFt
ZXRlcl07CisKKyAgICAgICAgY29uc3RydWN0b3IgKz0gdHlwZVN0cmluZyh0eXBlKSArICIgeCIg
KyBzdHIocGFyYW1ldGVyKSArIGFycmF5U3RyaW5nKHR5cGUpOworCisgICAgICAgIGlmIChwYXJh
bWV0ZXIgPCBjdG9yUGFyYW1ldGVycy5zaXplKCkgLSAxKQorICAgICAgICB7CisgICAgICAgICAg
ICBjb25zdHJ1Y3RvciArPSAiLCAiOworICAgICAgICB9CisgICAgfQorCisgICAgY29uc3RydWN0
b3IgKz0gIilcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIjsKKworICAgIGlmIChjdG9yVHlw
ZS5nZXRTdHJ1Y3QoKSkKKyAgICB7CisgICAgICAgIGNvbnN0cnVjdG9yICs9ICIgICAgIiArIGN0
b3JOYW1lICsgIiBzdHJ1Y3R1cmUgPSB7IjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgY29uc3RydWN0b3IgKz0gIiAgICByZXR1cm4gIiArIHR5cGVTdHJpbmcoY3RvclR5cGUpICsg
IigiOworICAgIH0KKworICAgIGlmIChjdG9yVHlwZS5pc01hdHJpeCgpICYmIGN0b3JQYXJhbWV0
ZXJzLnNpemUoKSA9PSAxKQorICAgIHsKKyAgICAgICAgaW50IGRpbSA9IGN0b3JUeXBlLmdldE5v
bWluYWxTaXplKCk7CisgICAgICAgIGNvbnN0IFRUeXBlICZwYXJhbWV0ZXIgPSBjdG9yUGFyYW1l
dGVyc1swXTsKKworICAgICAgICBpZiAocGFyYW1ldGVyLmlzU2NhbGFyKCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGRpbTsgcm93KyspCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgZGltOyBjb2wr
KykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9
IFRTdHJpbmcoKHJvdyA9PSBjb2wpID8gIngwIiA6ICIwLjAiKTsKKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChyb3cgPCBkaW0gLSAxIHx8IGNvbCA8IGRpbSAt
IDEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
cnVjdG9yICs9ICIsICI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocGFyYW1ldGVyLmlz
TWF0cml4KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8
IGRpbTsgcm93KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgY29s
ID0gMDsgY29sIDwgZGltOyBjb2wrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChyb3cgPCBwYXJhbWV0ZXIuZ2V0Tm9taW5hbFNpemUoKSAmJiBjb2wgPCBwYXJh
bWV0ZXIuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gVFN0cmluZygieDAiKSArICJbIiArIHN0cihy
b3cpICsgIl0iICsgIlsiICsgc3RyKGNvbCkgKyAiXSI7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSBUU3RyaW5nKChyb3cgPT0gY29sKSA/ICIx
LjAiIDogIjAuMCIpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHJvdyA8IGRpbSAtIDEgfHwgY29sIDwgZGltIC0gMSkKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gIiwgIjsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIHNpemVfdCByZW1haW5pbmdDb21wb25lbnRzID0gY3RvclR5cGUuZ2V0T2JqZWN0
U2l6ZSgpOworICAgICAgICBzaXplX3QgcGFyYW1ldGVySW5kZXggPSAwOworCisgICAgICAgIHdo
aWxlIChyZW1haW5pbmdDb21wb25lbnRzID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgY29u
c3QgVFR5cGUgJnBhcmFtZXRlciA9IGN0b3JQYXJhbWV0ZXJzW3BhcmFtZXRlckluZGV4XTsKKyAg
ICAgICAgICAgIGNvbnN0IHNpemVfdCBwYXJhbWV0ZXJTaXplID0gcGFyYW1ldGVyLmdldE9iamVj
dFNpemUoKTsKKyAgICAgICAgICAgIGJvb2wgbW9yZVBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJJbmRl
eCArIDEgPCBjdG9yUGFyYW1ldGVycy5zaXplKCk7CisKKyAgICAgICAgICAgIGNvbnN0cnVjdG9y
ICs9ICJ4IiArIHN0cihwYXJhbWV0ZXJJbmRleCk7CisKKyAgICAgICAgICAgIGlmIChwYXJhbWV0
ZXIuaXNTY2FsYXIoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQocGFy
YW1ldGVyU2l6ZSA8PSByZW1haW5pbmdDb21wb25lbnRzKTsKKyAgICAgICAgICAgICAgICByZW1h
aW5pbmdDb21wb25lbnRzIC09IHBhcmFtZXRlclNpemU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIGlmIChwYXJhbWV0ZXIuaXNWZWN0b3IoKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpZiAocmVtYWluaW5nQ29tcG9uZW50cyA9PSBwYXJhbWV0ZXJTaXplIHx8IG1v
cmVQYXJhbWV0ZXJzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKHBhcmFtZXRlclNpemUgPD0gcmVtYWluaW5nQ29tcG9uZW50cyk7CisgICAgICAgICAgICAg
ICAgICAgIHJlbWFpbmluZ0NvbXBvbmVudHMgLT0gcGFyYW1ldGVyU2l6ZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVtYWluaW5nQ29tcG9uZW50cyA8IHN0
YXRpY19jYXN0PHNpemVfdD4ocGFyYW1ldGVyLmdldE5vbWluYWxTaXplKCkpKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChyZW1haW5pbmdDb21wb25lbnRz
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBj
b25zdHJ1Y3RvciArPSAiLngiOyAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNl
IDI6IGNvbnN0cnVjdG9yICs9ICIueHkiOyAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgMzogY29uc3RydWN0b3IgKz0gIi54eXoiOyAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSA0OiBjb25zdHJ1Y3RvciArPSAiLnh5enciOyBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nQ29tcG9uZW50cyA9IDA7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHBhcmFtZXRlci5pc01hdHJpeCgpIHx8IHBhcmFt
ZXRlci5nZXRTdHJ1Y3QoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
cmVtYWluaW5nQ29tcG9uZW50cyA9PSBwYXJhbWV0ZXJTaXplIHx8IG1vcmVQYXJhbWV0ZXJzKTsK
KyAgICAgICAgICAgICAgICBBU1NFUlQocGFyYW1ldGVyU2l6ZSA8PSByZW1haW5pbmdDb21wb25l
bnRzKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZW1haW5pbmdDb21wb25l
bnRzIC09IHBhcmFtZXRlclNpemU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIFVO
UkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgIGlmIChtb3JlUGFyYW1ldGVycykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJJbmRleCsrOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAocmVtYWluaW5nQ29tcG9uZW50cykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSAiLCAiOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKGN0b3JUeXBlLmdldFN0cnVjdCgpKQorICAgIHsKKyAgICAg
ICAgY29uc3RydWN0b3IgKz0gIn07XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHN0cnVjdHVyZTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiI7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNvbnN0cnVjdG9yICs9ICIpO1xuIgorICAgICAgICAg
ICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisKKyAgICBtQ29uc3RydWN0b3JzLmluc2VydChj
b25zdHJ1Y3Rvcik7Cit9CisKK2NvbnN0IENvbnN0YW50VW5pb24gKk91dHB1dEhMU0w6OndyaXRl
Q29uc3RhbnRVbmlvbihjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgQ29uc3RhbnRVbmlvbiAqY29u
c3RVbmlvbikKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKKworICAgIGlmICh0
eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAgICB7CisgICAgICAgIG91dCA8PCBz
dHJ1Y3RMb29rdXAodHlwZS5nZXRTdHJ1Y3QoKS0+bmFtZSgpKSArICJfY3RvcigiOworICAgICAg
ICAKKyAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gdHlwZS5nZXRTdHJ1Y3QoKS0+
ZmllbGRzKCk7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgp
OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICpmaWVsZFR5cGUgPSBm
aWVsZHNbaV0tPnR5cGUoKTsKKworICAgICAgICAgICAgY29uc3RVbmlvbiA9IHdyaXRlQ29uc3Rh
bnRVbmlvbigqZmllbGRUeXBlLCBjb25zdFVuaW9uKTsKKworICAgICAgICAgICAgaWYgKGkgIT0g
ZmllbGRzLnNpemUoKSAtIDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8
ICIsICI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBvdXQgPDwgIikiOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzaXplX3Qgc2l6ZSA9IHR5cGUuZ2V0T2Jq
ZWN0U2l6ZSgpOworICAgICAgICBib29sIHdyaXRlVHlwZSA9IHNpemUgPiAxOworICAgICAgICAK
KyAgICAgICAgaWYgKHdyaXRlVHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8IHR5
cGVTdHJpbmcodHlwZSkgPDwgIigiOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzaXplOyBpKyssIGNvbnN0VW5pb24rKykKKyAgICAgICAgeworICAgICAgICAg
ICAgc3dpdGNoIChjb25zdFVuaW9uLT5nZXRUeXBlKCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgIGNhc2UgRWJ0RmxvYXQ6IG91dCA8PCBzdGQ6Om1pbihGTFRfTUFYLCBzdGQ6Om1heCgt
RkxUX01BWCwgY29uc3RVbmlvbi0+Z2V0RkNvbnN0KCkpKTsgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0SW50OiAgIG91dCA8PCBjb25zdFVuaW9uLT5nZXRJQ29uc3QoKTsgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogIG91dCA8PCBjb25zdFVuaW9uLT5nZXRCQ29uc3Qo
KTsgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmIChpICE9IHNpemUgLSAxKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgaWYgKHdyaXRlVHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICIp
IjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBjb25zdFVuaW9uOworfQorCitUU3Ry
aW5nIE91dHB1dEhMU0w6OnNjb3BlU3RyaW5nKHVuc2lnbmVkIGludCBkZXB0aExpbWl0KQorewor
ICAgIFRTdHJpbmcgc3RyaW5nOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBt
U2NvcGVCcmFja2V0LnNpemUoKSAmJiBpIDwgZGVwdGhMaW1pdDsgaSsrKQorICAgIHsKKyAgICAg
ICAgc3RyaW5nICs9ICJfIiArIHN0cihpKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RyaW5nOwor
fQorCitUU3RyaW5nIE91dHB1dEhMU0w6OnNjb3BlZFN0cnVjdChjb25zdCBUU3RyaW5nICZ0eXBl
TmFtZSkKK3sKKyAgICBpZiAodHlwZU5hbWUgPT0gIiIpCisgICAgeworICAgICAgICByZXR1cm4g
dHlwZU5hbWU7CisgICAgfQorCisgICAgcmV0dXJuIHR5cGVOYW1lICsgc2NvcGVTdHJpbmcobVNj
b3BlRGVwdGgpOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OnN0cnVjdExvb2t1cChjb25zdCBU
U3RyaW5nICZ0eXBlTmFtZSkKK3sKKyAgICBmb3IgKGludCBkZXB0aCA9IG1TY29wZURlcHRoOyBk
ZXB0aCA+PSAwOyBkZXB0aC0tKQorICAgIHsKKyAgICAgICAgVFN0cmluZyBzY29wZWROYW1lID0g
ZGVjb3JhdGUodHlwZU5hbWUgKyBzY29wZVN0cmluZyhkZXB0aCkpOworCisgICAgICAgIGZvciAo
U3RydWN0TmFtZXM6Oml0ZXJhdG9yIHN0cnVjdE5hbWUgPSBtU3RydWN0TmFtZXMuYmVnaW4oKTsg
c3RydWN0TmFtZSAhPSBtU3RydWN0TmFtZXMuZW5kKCk7IHN0cnVjdE5hbWUrKykKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKCpzdHJ1Y3ROYW1lID09IHNjb3BlZE5hbWUpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNjb3BlZE5hbWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBVTlJFQUNIQUJMRSgpOyAgIC8vIFNob3VsZCBoYXZlIGZv
dW5kIGEgbWF0Y2hpbmcgY29uc3RydWN0b3IKKworICAgIHJldHVybiB0eXBlTmFtZTsKK30KKwor
VFN0cmluZyBPdXRwdXRITFNMOjpkZWNvcmF0ZShjb25zdCBUU3RyaW5nICZzdHJpbmcpCit7Cisg
ICAgaWYgKHN0cmluZy5jb21wYXJlKDAsIDMsICJnbF8iKSAhPSAwICYmIHN0cmluZy5jb21wYXJl
KDAsIDMsICJkeF8iKSAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJfIiArIHN0cmluZzsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIHN0cmluZzsKK30KKworVFN0cmluZyBPdXRwdXRITFNM
OjpkZWNvcmF0ZVVuaWZvcm0oY29uc3QgVFN0cmluZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAmdHlw
ZSkKK3sKKyAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTYW1wbGVyRXh0ZXJuYWxP
RVMpCisgICAgeworICAgICAgICByZXR1cm4gImV4XyIgKyBzdHJpbmc7CisgICAgfQorICAgIAor
ICAgIHJldHVybiBkZWNvcmF0ZShzdHJpbmcpOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OmRl
Y29yYXRlRmllbGQoY29uc3QgVFN0cmluZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAmc3RydWN0dXJl
KQoreworICAgIGlmIChzdHJ1Y3R1cmUuZ2V0U3RydWN0KCktPm5hbWUoKS5jb21wYXJlKDAsIDMs
ICJnbF8iKSAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29yYXRlKHN0cmluZyk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHN0cmluZzsKK30KKworVFN0cmluZyBPdXRwdXRITFNMOjpyZWdp
c3RlclN0cmluZyhUSW50ZXJtU3ltYm9sICpvcGVyYW5kKQoreworICAgIEFTU0VSVChvcGVyYW5k
LT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFVbmlmb3JtKTsKKworICAgIGlmIChJc1NhbXBsZXIob3Bl
cmFuZC0+Z2V0QmFzaWNUeXBlKCkpKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJzIiArIHN0cihz
YW1wbGVyUmVnaXN0ZXIob3BlcmFuZCkpOworICAgIH0KKworICAgIHJldHVybiAiYyIgKyBzdHIo
dW5pZm9ybVJlZ2lzdGVyKG9wZXJhbmQpKTsKK30KKworaW50IE91dHB1dEhMU0w6OnNhbXBsZXJS
ZWdpc3RlcihUSW50ZXJtU3ltYm9sICpzYW1wbGVyKQoreworICAgIGNvbnN0IFRUeXBlICZ0eXBl
ID0gc2FtcGxlci0+Z2V0VHlwZSgpOworICAgIEFTU0VSVChJc1NhbXBsZXIodHlwZS5nZXRCYXNp
Y1R5cGUoKSkpOworCisgICAgaW50IGluZGV4ID0gbVNhbXBsZXJSZWdpc3RlcjsKKyAgICBtU2Ft
cGxlclJlZ2lzdGVyICs9IHNhbXBsZXItPnRvdGFsUmVnaXN0ZXJDb3VudCgpOworCisgICAgZGVj
bGFyZVVuaWZvcm0odHlwZSwgc2FtcGxlci0+Z2V0U3ltYm9sKCksIGluZGV4KTsKKworICAgIHJl
dHVybiBpbmRleDsKK30KKworaW50IE91dHB1dEhMU0w6OnVuaWZvcm1SZWdpc3RlcihUSW50ZXJt
U3ltYm9sICp1bmlmb3JtKQoreworICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gdW5pZm9ybS0+Z2V0
VHlwZSgpOworICAgIEFTU0VSVCghSXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKTsKKwor
ICAgIGludCBpbmRleCA9IG1Vbmlmb3JtUmVnaXN0ZXI7CisgICAgbVVuaWZvcm1SZWdpc3RlciAr
PSB1bmlmb3JtLT50b3RhbFJlZ2lzdGVyQ291bnQoKTsKKworICAgIGRlY2xhcmVVbmlmb3JtKHR5
cGUsIHVuaWZvcm0tPmdldFN5bWJvbCgpLCBpbmRleCk7CisKKyAgICByZXR1cm4gaW5kZXg7Cit9
CisKK3ZvaWQgT3V0cHV0SExTTDo6ZGVjbGFyZVVuaWZvcm0oY29uc3QgVFR5cGUgJnR5cGUsIGNv
bnN0IFRTdHJpbmcgJm5hbWUsIGludCBpbmRleCkKK3sKKyAgICBUU3RydWN0dXJlICpzdHJ1Y3R1
cmUgPSB0eXBlLmdldFN0cnVjdCgpOworCisgICAgaWYgKCFzdHJ1Y3R1cmUpCisgICAgeworICAg
ICAgICBtQWN0aXZlVW5pZm9ybXMucHVzaF9iYWNrKFVuaWZvcm0oZ2xWYXJpYWJsZVR5cGUodHlw
ZSksIGdsVmFyaWFibGVQcmVjaXNpb24odHlwZSksIG5hbWUuY19zdHIoKSwgdHlwZS5nZXRBcnJh
eVNpemUoKSwgaW5kZXgpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY29uc3Qg
VEZpZWxkTGlzdCAmZmllbGRzID0gc3RydWN0dXJlLT5maWVsZHMoKTsKKworICAgICAgICBpZiAo
dHlwZS5pc0FycmF5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBlbGVtZW50SW5kZXgg
PSBpbmRleDsKKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlLmdldEFycmF5
U2l6ZSgpOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3Qg
aiA9IDA7IGogPCBmaWVsZHMuc2l6ZSgpOyBqKyspCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBjb25zdCBUVHlwZSAmZmllbGRUeXBlID0gKmZpZWxkc1tqXS0+dHlwZSgp
OworICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nIHVuaWZvcm1OYW1lID0gbmFtZSAr
ICJbIiArIHN0cihpKSArICJdLiIgKyBmaWVsZHNbal0tPm5hbWUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgZGVjbGFyZVVuaWZvcm0oZmllbGRUeXBlLCB1bmlmb3JtTmFtZSwgZWxlbWVudEluZGV4
KTsKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudEluZGV4ICs9IGZpZWxkVHlwZS50b3RhbFJl
Z2lzdGVyQ291bnQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgZmllbGRJbmRleCA9
IGluZGV4OworCisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpZWxkcy5zaXpl
KCk7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAmZmll
bGRUeXBlID0gKmZpZWxkc1tpXS0+dHlwZSgpOworICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJp
bmcgdW5pZm9ybU5hbWUgPSBuYW1lICsgIi4iICsgZmllbGRzW2ldLT5uYW1lKCk7CisgICAgICAg
ICAgICAgICAgZGVjbGFyZVVuaWZvcm0oZmllbGRUeXBlLCB1bmlmb3JtTmFtZSwgZmllbGRJbmRl
eCk7CisgICAgICAgICAgICAgICAgZmllbGRJbmRleCArPSBmaWVsZFR5cGUudG90YWxSZWdpc3Rl
ckNvdW50KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK0dMZW51bSBP
dXRwdXRITFNMOjpnbFZhcmlhYmxlVHlwZShjb25zdCBUVHlwZSAmdHlwZSkKK3sKKyAgICBpZiAo
dHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRGbG9hdCkKKyAgICB7CisgICAgICAgIGlmICh0eXBl
LmlzU2NhbGFyKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHTF9GTE9BVDsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIGlmICh0eXBlLmlzVmVjdG9yKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHN3aXRjaCh0eXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIEdMX0ZMT0FUX1ZFQzI7CisgICAgICAgICAgICAg
IGNhc2UgMzogcmV0dXJuIEdMX0ZMT0FUX1ZFQzM7CisgICAgICAgICAgICAgIGNhc2UgNDogcmV0
dXJuIEdMX0ZMT0FUX1ZFQzQ7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodHlwZS5pc01hdHJp
eCgpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2godHlwZS5nZXROb21pbmFsU2l6ZSgp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBHTF9GTE9BVF9N
QVQyOworICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBHTF9GTE9BVF9NQVQzOworICAgICAg
ICAgICAgICBjYXNlIDQ6IHJldHVybiBHTF9GTE9BVF9NQVQ0OworICAgICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUo
KSA9PSBFYnRJbnQpCisgICAgeworICAgICAgICBpZiAodHlwZS5pc1NjYWxhcigpKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gR0xfSU5UOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKHR5cGUuaXNWZWN0b3IoKSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKHR5cGUu
Z2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAyOiBy
ZXR1cm4gR0xfSU5UX1ZFQzI7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIEdMX0lOVF9W
RUMzOworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBHTF9JTlRfVkVDNDsKKyAgICAgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUuZ2V0
QmFzaWNUeXBlKCkgPT0gRWJ0Qm9vbCkKKyAgICB7CisgICAgICAgIGlmICh0eXBlLmlzU2NhbGFy
KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHTF9CT09MOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKHR5cGUuaXNWZWN0b3IoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
c3dpdGNoKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSAyOiByZXR1cm4gR0xfQk9PTF9WRUMyOworICAgICAgICAgICAgICBjYXNlIDM6IHJl
dHVybiBHTF9CT09MX1ZFQzM7CisgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIEdMX0JPT0xf
VkVDNDsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIGVs
c2UgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U2FtcGxlcjJEKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEdMX1NBTVBMRVJfMkQ7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUuZ2V0QmFz
aWNUeXBlKCkgPT0gRWJ0U2FtcGxlckN1YmUpCisgICAgeworICAgICAgICByZXR1cm4gR0xfU0FN
UExFUl9DVUJFOworICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICByZXR1cm4g
R0xfTk9ORTsKK30KKworR0xlbnVtIE91dHB1dEhMU0w6OmdsVmFyaWFibGVQcmVjaXNpb24oY29u
c3QgVFR5cGUgJnR5cGUpCit7CisgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0Rmxv
YXQpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0UHJlY2lzaW9uKCkpCisgICAgICAg
IHsKKyAgICAgICAgICBjYXNlIEVicEhpZ2g6ICAgcmV0dXJuIEdMX0hJR0hfRkxPQVQ7CisgICAg
ICAgICAgY2FzZSBFYnBNZWRpdW06IHJldHVybiBHTF9NRURJVU1fRkxPQVQ7CisgICAgICAgICAg
Y2FzZSBFYnBMb3c6ICAgIHJldHVybiBHTF9MT1dfRkxPQVQ7CisgICAgICAgICAgY2FzZSBFYnBV
bmRlZmluZWQ6CisgICAgICAgICAgICAvLyBTaG91bGQgYmUgZGVmaW5lZCBhcyB0aGUgZGVmYXVs
dCBwcmVjaXNpb24gYnkgdGhlIHBhcnNlcgorICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9
PSBFYnRJbnQpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0UHJlY2lzaW9uKCkpCisg
ICAgICAgIHsKKyAgICAgICAgICBjYXNlIEVicEhpZ2g6ICAgcmV0dXJuIEdMX0hJR0hfSU5UOwor
ICAgICAgICAgIGNhc2UgRWJwTWVkaXVtOiByZXR1cm4gR0xfTUVESVVNX0lOVDsKKyAgICAgICAg
ICBjYXNlIEVicExvdzogICAgcmV0dXJuIEdMX0xPV19JTlQ7CisgICAgICAgICAgY2FzZSBFYnBV
bmRlZmluZWQ6CisgICAgICAgICAgICAvLyBTaG91bGQgYmUgZGVmaW5lZCBhcyB0aGUgZGVmYXVs
dCBwcmVjaXNpb24gYnkgdGhlIHBhcnNlcgorICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBPdGhlciB0eXBlcyAoYm9vbGVhbiwgc2Ft
cGxlcikgZG9uJ3QgaGF2ZSBhIHByZWNpc2lvbgorICAgIHJldHVybiBHTF9OT05FOworfQorCit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9PdXRwdXRITFNMLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9PdXRwdXRITFNMLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2FmZDhlOWFkYWIwMTE3YzQ5OWZi
YzcxZWUzZmM5Y2JkMzZiMmRmZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuaApAQCAtMCwwICsxLDE2
NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9PVVRQVVRITFNMX0hf
CisjZGVmaW5lIENPTVBJTEVSX09VVFBVVEhMU0xfSF8KKworI2luY2x1ZGUgPGxpc3Q+CisjaW5j
bHVkZSA8c2V0PgorI2luY2x1ZGUgPG1hcD4KKworI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVk
ZSA8R0xFUzIvZ2wyLmg+CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVk
aWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmgiCisKK25hbWVzcGFjZSBzaAor
eworY2xhc3MgVW5mb2xkU2hvcnRDaXJjdWl0OworCitjbGFzcyBPdXRwdXRITFNMIDogcHVibGlj
IFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIE91dHB1dEhMU0woVFBhcnNlQ29u
dGV4dCAmY29udGV4dCwgY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMsIFNoU2hh
ZGVyT3V0cHV0IG91dHB1dFR5cGUpOworICAgIH5PdXRwdXRITFNMKCk7CisKKyAgICB2b2lkIG91
dHB1dCgpOworCisgICAgVEluZm9TaW5rQmFzZSAmZ2V0Qm9keVN0cmVhbSgpOworICAgIGNvbnN0
IEFjdGl2ZVVuaWZvcm1zICZnZXRVbmlmb3JtcygpOworCisgICAgVFN0cmluZyB0eXBlU3RyaW5n
KGNvbnN0IFRUeXBlICZ0eXBlKTsKKyAgICBUU3RyaW5nIHRleHR1cmVTdHJpbmcoY29uc3QgVFR5
cGUgJnR5cGUpOworICAgIHN0YXRpYyBUU3RyaW5nIHF1YWxpZmllclN0cmluZyhUUXVhbGlmaWVy
IHF1YWxpZmllcik7CisgICAgc3RhdGljIFRTdHJpbmcgYXJyYXlTdHJpbmcoY29uc3QgVFR5cGUg
JnR5cGUpOworICAgIHN0YXRpYyBUU3RyaW5nIGluaXRpYWxpemVyKGNvbnN0IFRUeXBlICZ0eXBl
KTsKKyAgICBzdGF0aWMgVFN0cmluZyBkZWNvcmF0ZShjb25zdCBUU3RyaW5nICZzdHJpbmcpOyAg
ICAgICAgICAgICAgICAgICAgICAvLyBQcmVwZW5kcyBhbiB1bmRlcnNjb3JlIHRvIGF2b2lkIG5h
bWluZyBjbGFzaGVzCisgICAgc3RhdGljIFRTdHJpbmcgZGVjb3JhdGVVbmlmb3JtKGNvbnN0IFRT
dHJpbmcgJnN0cmluZywgY29uc3QgVFR5cGUgJnR5cGUpOworICAgIHN0YXRpYyBUU3RyaW5nIGRl
Y29yYXRlRmllbGQoY29uc3QgVFN0cmluZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAmc3RydWN0dXJl
KTsKKworICBwcm90ZWN0ZWQ6CisgICAgdm9pZCBoZWFkZXIoKTsKKworICAgIC8vIFZpc2l0IEFT
VCBub2RlcyBhbmQgb3V0cHV0IHRoZWlyIGNvZGUgdG8gdGhlIGJvZHkgc3RyZWFtCisgICAgdm9p
ZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7CisgICAgdm9pZCB2aXNpdENvbnN0YW50VW5p
b24oVEludGVybUNvbnN0YW50VW5pb24qKTsKKyAgICBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZp
c2l0LCBUSW50ZXJtQmluYXJ5Kik7CisgICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBU
SW50ZXJtVW5hcnkqKTsKKyAgICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50
ZXJtU2VsZWN0aW9uKik7CisgICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVElu
dGVybUFnZ3JlZ2F0ZSopOworICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJt
TG9vcCopOworICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gq
KTsKKworICAgIHZvaWQgdHJhdmVyc2VTdGF0ZW1lbnRzKFRJbnRlcm1Ob2RlICpub2RlKTsKKyAg
ICBib29sIGlzU2luZ2xlU3RhdGVtZW50KFRJbnRlcm1Ob2RlICpub2RlKTsKKyAgICBib29sIGhh
bmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxvb3AgKm5vZGUpOworICAgIHZvaWQgb3V0cHV0VHJp
cGxldChWaXNpdCB2aXNpdCwgY29uc3QgVFN0cmluZyAmcHJlU3RyaW5nLCBjb25zdCBUU3RyaW5n
ICZpblN0cmluZywgY29uc3QgVFN0cmluZyAmcG9zdFN0cmluZyk7CisgICAgdm9pZCBvdXRwdXRM
aW5lRGlyZWN0aXZlKGludCBsaW5lKTsKKyAgICBUU3RyaW5nIGFyZ3VtZW50U3RyaW5nKGNvbnN0
IFRJbnRlcm1TeW1ib2wgKnN5bWJvbCk7CisgICAgaW50IHZlY3RvclNpemUoY29uc3QgVFR5cGUg
JnR5cGUpIGNvbnN0OworCisgICAgdm9pZCBhZGRDb25zdHJ1Y3Rvcihjb25zdCBUVHlwZSAmdHlw
ZSwgY29uc3QgVFN0cmluZyAmbmFtZSwgY29uc3QgVEludGVybVNlcXVlbmNlICpwYXJhbWV0ZXJz
KTsKKyAgICBjb25zdCBDb25zdGFudFVuaW9uICp3cml0ZUNvbnN0YW50VW5pb24oY29uc3QgVFR5
cGUgJnR5cGUsIGNvbnN0IENvbnN0YW50VW5pb24gKmNvbnN0VW5pb24pOworCisgICAgVFN0cmlu
ZyBzY29wZVN0cmluZyh1bnNpZ25lZCBpbnQgZGVwdGhMaW1pdCk7CisgICAgVFN0cmluZyBzY29w
ZWRTdHJ1Y3QoY29uc3QgVFN0cmluZyAmdHlwZU5hbWUpOworICAgIFRTdHJpbmcgc3RydWN0TG9v
a3VwKGNvbnN0IFRTdHJpbmcgJnR5cGVOYW1lKTsKKworICAgIFRQYXJzZUNvbnRleHQgJm1Db250
ZXh0OworICAgIGNvbnN0IFNoU2hhZGVyT3V0cHV0IG1PdXRwdXRUeXBlOworICAgIFVuZm9sZFNo
b3J0Q2lyY3VpdCAqbVVuZm9sZFNob3J0Q2lyY3VpdDsKKyAgICBib29sIG1JbnNpZGVGdW5jdGlv
bjsKKworICAgIC8vIE91dHB1dCBzdHJlYW1zCisgICAgVEluZm9TaW5rQmFzZSBtSGVhZGVyOwor
ICAgIFRJbmZvU2lua0Jhc2UgbUJvZHk7CisgICAgVEluZm9TaW5rQmFzZSBtRm9vdGVyOworCisg
ICAgdHlwZWRlZiBzdGQ6Om1hcDxUU3RyaW5nLCBUSW50ZXJtU3ltYm9sKj4gUmVmZXJlbmNlZFN5
bWJvbHM7CisgICAgUmVmZXJlbmNlZFN5bWJvbHMgbVJlZmVyZW5jZWRVbmlmb3JtczsKKyAgICBS
ZWZlcmVuY2VkU3ltYm9scyBtUmVmZXJlbmNlZEF0dHJpYnV0ZXM7CisgICAgUmVmZXJlbmNlZFN5
bWJvbHMgbVJlZmVyZW5jZWRWYXJ5aW5nczsKKworICAgIC8vIFBhcmFtZXRlcnMgZGV0ZXJtaW5p
bmcgd2hhdCBnb2VzIGluIHRoZSBoZWFkZXIgb3V0cHV0CisgICAgYm9vbCBtVXNlc1RleHR1cmUy
RDsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJEX2JpYXM7CisgICAgYm9vbCBtVXNlc1RleHR1cmUy
RExvZDsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJEUHJvajsKKyAgICBib29sIG1Vc2VzVGV4dHVy
ZTJEUHJval9iaWFzOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kOworICAgIGJvb2wg
bVVzZXNUZXh0dXJlQ3ViZTsKKyAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmVfYmlhczsKKyAgICBi
b29sIG1Vc2VzVGV4dHVyZUN1YmVMb2Q7CisgICAgYm9vbCBtVXNlc1RleHR1cmUyRExvZDA7Cisg
ICAgYm9vbCBtVXNlc1RleHR1cmUyRExvZDBfYmlhczsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJE
UHJvakxvZDA7CisgICAgYm9vbCBtVXNlc1RleHR1cmUyRFByb2pMb2QwX2JpYXM7CisgICAgYm9v
bCBtVXNlc1RleHR1cmVDdWJlTG9kMDsKKyAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2Jp
YXM7CisgICAgYm9vbCBtVXNlc0ZyYWdDb2xvcjsKKyAgICBib29sIG1Vc2VzRnJhZ0RhdGE7Cisg
ICAgYm9vbCBtVXNlc0RlcHRoUmFuZ2U7CisgICAgYm9vbCBtVXNlc0ZyYWdDb29yZDsKKyAgICBi
b29sIG1Vc2VzUG9pbnRDb29yZDsKKyAgICBib29sIG1Vc2VzRnJvbnRGYWNpbmc7CisgICAgYm9v
bCBtVXNlc1BvaW50U2l6ZTsKKyAgICBib29sIG1Vc2VzRnJhZ0RlcHRoOworICAgIGJvb2wgbVVz
ZXNYb3I7CisgICAgYm9vbCBtVXNlc01vZDE7CisgICAgYm9vbCBtVXNlc01vZDJ2OworICAgIGJv
b2wgbVVzZXNNb2QyZjsKKyAgICBib29sIG1Vc2VzTW9kM3Y7CisgICAgYm9vbCBtVXNlc01vZDNm
OworICAgIGJvb2wgbVVzZXNNb2Q0djsKKyAgICBib29sIG1Vc2VzTW9kNGY7CisgICAgYm9vbCBt
VXNlc0ZhY2Vmb3J3YXJkMTsKKyAgICBib29sIG1Vc2VzRmFjZWZvcndhcmQyOworICAgIGJvb2wg
bVVzZXNGYWNlZm9yd2FyZDM7CisgICAgYm9vbCBtVXNlc0ZhY2Vmb3J3YXJkNDsKKyAgICBib29s
IG1Vc2VzQXRhbjJfMTsKKyAgICBib29sIG1Vc2VzQXRhbjJfMjsKKyAgICBib29sIG1Vc2VzQXRh
bjJfMzsKKyAgICBib29sIG1Vc2VzQXRhbjJfNDsKKyAgICBib29sIG1Vc2VzRGlzY2FyZFJld3Jp
dGluZzsKKworICAgIGludCBtTnVtUmVuZGVyVGFyZ2V0czsKKworICAgIHR5cGVkZWYgc3RkOjpz
ZXQ8VFN0cmluZz4gQ29uc3RydWN0b3JzOworICAgIENvbnN0cnVjdG9ycyBtQ29uc3RydWN0b3Jz
OworCisgICAgdHlwZWRlZiBzdGQ6OnNldDxUU3RyaW5nPiBTdHJ1Y3ROYW1lczsKKyAgICBTdHJ1
Y3ROYW1lcyBtU3RydWN0TmFtZXM7CisKKyAgICB0eXBlZGVmIHN0ZDo6bGlzdDxUU3RyaW5nPiBT
dHJ1Y3REZWNsYXJhdGlvbnM7CisgICAgU3RydWN0RGVjbGFyYXRpb25zIG1TdHJ1Y3REZWNsYXJh
dGlvbnM7CisKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPGludD4gU2NvcGVCcmFja2V0OworICAg
IFNjb3BlQnJhY2tldCBtU2NvcGVCcmFja2V0OworICAgIHVuc2lnbmVkIGludCBtU2NvcGVEZXB0
aDsKKworICAgIGludCBtVW5pcXVlSW5kZXg7ICAgLy8gRm9yIGNyZWF0aW5nIHVuaXF1ZSBuYW1l
cworCisgICAgYm9vbCBtQ29udGFpbnNMb29wRGlzY29udGludWl0eTsKKyAgICBib29sIG1PdXRw
dXRMb2QwRnVuY3Rpb247CisgICAgYm9vbCBtSW5zaWRlRGlzY29udGludW91c0xvb3A7CisKKyAg
ICBUSW50ZXJtU3ltYm9sICptRXhjZXNzaXZlTG9vcEluZGV4OworCisgICAgaW50IG1Vbmlmb3Jt
UmVnaXN0ZXI7CisgICAgaW50IG1TYW1wbGVyUmVnaXN0ZXI7CisKKyAgICBUU3RyaW5nIHJlZ2lz
dGVyU3RyaW5nKFRJbnRlcm1TeW1ib2wgKm9wZXJhbmQpOworICAgIGludCBzYW1wbGVyUmVnaXN0
ZXIoVEludGVybVN5bWJvbCAqc2FtcGxlcik7CisgICAgaW50IHVuaWZvcm1SZWdpc3RlcihUSW50
ZXJtU3ltYm9sICp1bmlmb3JtKTsKKyAgICB2b2lkIGRlY2xhcmVVbmlmb3JtKGNvbnN0IFRUeXBl
ICZ0eXBlLCBjb25zdCBUU3RyaW5nICZuYW1lLCBpbnQgaW5kZXgpOworICAgIHN0YXRpYyBHTGVu
dW0gZ2xWYXJpYWJsZVR5cGUoY29uc3QgVFR5cGUgJnR5cGUpOworICAgIHN0YXRpYyBHTGVudW0g
Z2xWYXJpYWJsZVByZWNpc2lvbihjb25zdCBUVHlwZSAmdHlwZSk7CisKKyAgICBBY3RpdmVVbmlm
b3JtcyBtQWN0aXZlVW5pZm9ybXM7Cit9OworfQorCisjZW5kaWYgICAvLyBDT01QSUxFUl9PVVRQ
VVRITFNMX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYTFl
MGQxNDBjNWE2MWViOGQ2ZGUyMWUxOTVmODYzNzAwYTRiOGY3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250
ZXh0LmNwcApAQCAtMCwwICsxLDE2MDIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5oIgorCisjaW5jbHVkZSA8c3RkYXJn
Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
Z2xzbGFuZy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9Tb3VyY2VMb2NhdGlv
bi5oIgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFN1Yi0gdmVjdG9yIGFuZCBtYXRyaXggZmll
bGRzCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vCisvLyBMb29rIGF0IGEgJy4nIGZpZWxkIHNl
bGVjdG9yIHN0cmluZyBhbmQgY2hhbmdlIGl0IGludG8gb2Zmc2V0cworLy8gZm9yIGEgdmVjdG9y
LgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VWZWN0b3JGaWVsZHMoY29uc3QgVFN0cmlu
ZyYgY29tcFN0cmluZywgaW50IHZlY1NpemUsIFRWZWN0b3JGaWVsZHMmIGZpZWxkcywgY29uc3Qg
VFNvdXJjZUxvYyYgbGluZSkKK3sKKyAgICBmaWVsZHMubnVtID0gKGludCkgY29tcFN0cmluZy5z
aXplKCk7CisgICAgaWYgKGZpZWxkcy5udW0gPiA0KSB7CisgICAgICAgIGVycm9yKGxpbmUsICJp
bGxlZ2FsIHZlY3RvciBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCkpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZW51bSB7CisgICAgICAgIGV4eXp3LAor
ICAgICAgICBlcmdiYSwKKyAgICAgICAgZXN0cHEKKyAgICB9IGZpZWxkU2V0WzRdOworCisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZHMubnVtOyArK2kpIHsKKyAgICAgICAgc3dpdGNoIChj
b21wU3RyaW5nW2ldKSAgeworICAgICAgICBjYXNlICd4JzogCisgICAgICAgICAgICBmaWVsZHMu
b2Zmc2V0c1tpXSA9IDA7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGV4eXp3OworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3InOiAKKyAgICAgICAgICAgIGZpZWxkcy5vZmZz
ZXRzW2ldID0gMDsKKyAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXJnYmE7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSAncyc6CisgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tp
XSA9IDA7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGVzdHBxOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgJ3knOiAKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0g
MTsKKyAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXh5enc7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSAnZyc6IAorICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAxOwor
ICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBlcmdiYTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlICd0JzoKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMTsKKyAgICAg
ICAgICAgIGZpZWxkU2V0W2ldID0gZXN0cHE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSAneic6IAorICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAyOworICAgICAgICAg
ICAgZmllbGRTZXRbaV0gPSBleHl6dzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
ICdiJzogCisgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDI7CisgICAgICAgICAgICBm
aWVsZFNldFtpXSA9IGVyZ2JhOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3An
OgorICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAyOworICAgICAgICAgICAgZmllbGRT
ZXRbaV0gPSBlc3RwcTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAgY2Fz
ZSAndyc6IAorICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAzOworICAgICAgICAgICAg
ZmllbGRTZXRbaV0gPSBleHl6dzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdh
JzogCisgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDM7CisgICAgICAgICAgICBmaWVs
ZFNldFtpXSA9IGVyZ2JhOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3EnOgor
ICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAzOworICAgICAgICAgICAgZmllbGRTZXRb
aV0gPSBlc3RwcTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgdmVjdG9yIGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBT
dHJpbmcuY19zdHIoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpZWxkcy5udW07ICsraSkgeworICAgICAg
ICBpZiAoZmllbGRzLm9mZnNldHNbaV0gPj0gdmVjU2l6ZSkgeworICAgICAgICAgICAgZXJyb3Io
bGluZSwgInZlY3RvciBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlIiwgIGNvbXBTdHJpbmcu
Y19zdHIoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoaSA+IDApIHsKKyAgICAgICAgICAgIGlmIChmaWVsZFNldFtpXSAhPSBmaWVsZFNldFtp
LTFdKSB7CisgICAgICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgLSB2ZWN0b3IgY29t
cG9uZW50IGZpZWxkcyBub3QgZnJvbSB0aGUgc2FtZSBzZXQiLCBjb21wU3RyaW5nLmNfc3RyKCkp
OworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCisKKy8vCisvLyBMb29rIGF0IGEgJy4n
IGZpZWxkIHNlbGVjdG9yIHN0cmluZyBhbmQgY2hhbmdlIGl0IGludG8gb2Zmc2V0cworLy8gZm9y
IGEgbWF0cml4LgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VNYXRyaXhGaWVsZHMoY29u
c3QgVFN0cmluZyYgY29tcFN0cmluZywgaW50IG1hdFNpemUsIFRNYXRyaXhGaWVsZHMmIGZpZWxk
cywgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKK3sKKyAgICBmaWVsZHMud2hvbGVSb3cgPSBmYWxz
ZTsKKyAgICBmaWVsZHMud2hvbGVDb2wgPSBmYWxzZTsKKyAgICBmaWVsZHMucm93ID0gLTE7Cisg
ICAgZmllbGRzLmNvbCA9IC0xOworCisgICAgaWYgKGNvbXBTdHJpbmcuc2l6ZSgpICE9IDIpIHsK
KyAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbGVuZ3RoIG9mIG1hdHJpeCBmaWVsZCBzZWxl
Y3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaWYgKGNvbXBTdHJpbmdbMF0gPT0gJ18nKSB7CisgICAgICAgIGlmIChjb21wU3Ry
aW5nWzFdIDwgJzAnIHx8IGNvbXBTdHJpbmdbMV0gPiAnMycpIHsKKyAgICAgICAgICAgIGVycm9y
KGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3Ry
KCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGZpZWxk
cy53aG9sZUNvbCA9IHRydWU7CisgICAgICAgIGZpZWxkcy5jb2wgPSBjb21wU3RyaW5nWzFdIC0g
JzAnOworICAgIH0gZWxzZSBpZiAoY29tcFN0cmluZ1sxXSA9PSAnXycpIHsKKyAgICAgICAgaWYg
KGNvbXBTdHJpbmdbMF0gPCAnMCcgfHwgY29tcFN0cmluZ1swXSA+ICczJykgeworICAgICAgICAg
ICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJp
bmcuY19zdHIoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgZmllbGRzLndob2xlUm93ID0gdHJ1ZTsKKyAgICAgICAgZmllbGRzLnJvdyA9IGNvbXBTdHJp
bmdbMF0gLSAnMCc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGNvbXBTdHJpbmdbMF0gPCAn
MCcgfHwgY29tcFN0cmluZ1swXSA+ICczJyB8fAorICAgICAgICAgICAgY29tcFN0cmluZ1sxXSA8
ICcwJyB8fCBjb21wU3RyaW5nWzFdID4gJzMnKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAi
aWxsZWdhbCBtYXRyaXggZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBmaWVsZHMucm93ID0g
Y29tcFN0cmluZ1swXSAtICcwJzsKKyAgICAgICAgZmllbGRzLmNvbCA9IGNvbXBTdHJpbmdbMV0g
LSAnMCc7CisgICAgfQorCisgICAgaWYgKGZpZWxkcy5yb3cgPj0gbWF0U2l6ZSB8fCBmaWVsZHMu
Y29sID49IG1hdFNpemUpIHsKKyAgICAgICAgZXJyb3IobGluZSwgIm1hdHJpeCBmaWVsZCBzZWxl
Y3Rpb24gb3V0IG9mIHJhbmdlIiwgY29tcFN0cmluZy5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCisvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor
Ly8KKy8vIEVycm9ycworLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLworLy8gVHJhY2sgd2hldGhl
ciBlcnJvcnMgaGF2ZSBvY2N1cnJlZC4KKy8vCit2b2lkIFRQYXJzZUNvbnRleHQ6OnJlY292ZXIo
KQoreworfQorCisvLworLy8gVXNlZCBieSBmbGV4L2Jpc29uIHRvIG91dHB1dCBhbGwgc3ludGF4
IGFuZCBwYXJzaW5nIGVycm9ycy4KKy8vCit2b2lkIFRQYXJzZUNvbnRleHQ6OmVycm9yKGNvbnN0
IFRTb3VyY2VMb2MmIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
cmVhc29uLCBjb25zdCBjaGFyKiB0b2tlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIGV4dHJhSW5mbykKK3sKKyAgICBwcDo6U291cmNlTG9jYXRpb24gc3JjTG9jOwor
ICAgIHNyY0xvYy5maWxlID0gbG9jLmZpcnN0X2ZpbGU7CisgICAgc3JjTG9jLmxpbmUgPSBsb2Mu
Zmlyc3RfbGluZTsKKyAgICBkaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpQ
UF9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjTG9jLCByZWFzb24sIHRva2Vu
LCBleHRyYUluZm8pOworCit9CisKK3ZvaWQgVFBhcnNlQ29udGV4dDo6d2FybmluZyhjb25zdCBU
U291cmNlTG9jJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
cmVhc29uLCBjb25zdCBjaGFyKiB0b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiBleHRyYUluZm8pIHsKKyAgICBwcDo6U291cmNlTG9jYXRpb24gc3JjTG9jOwor
ICAgIHNyY0xvYy5maWxlID0gbG9jLmZpcnN0X2ZpbGU7CisgICAgc3JjTG9jLmxpbmUgPSBsb2Mu
Zmlyc3RfbGluZTsKKyAgICBkaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpQ
UF9XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNMb2MsIHJlYXNvbiwgdG9r
ZW4sIGV4dHJhSW5mbyk7Cit9CisKK3ZvaWQgVFBhcnNlQ29udGV4dDo6dHJhY2UoY29uc3QgY2hh
ciogc3RyKQoreworICAgIGRpYWdub3N0aWNzLndyaXRlRGVidWcoc3RyKTsKK30KKworLy8KKy8v
IFNhbWUgZXJyb3IgbWVzc2FnZSBmb3IgYWxsIHBsYWNlcyBhc3NpZ25tZW50cyBkb24ndCB3b3Jr
LgorLy8KK3ZvaWQgVFBhcnNlQ29udGV4dDo6YXNzaWduRXJyb3IoY29uc3QgVFNvdXJjZUxvYyYg
bGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgbGVmdCwgVFN0cmluZyByaWdodCkKK3sKKyAg
ICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgZXh0cmFJbmZvU3RyZWFt
IDw8ICJjYW5ub3QgY29udmVydCBmcm9tICciIDw8IHJpZ2h0IDw8ICInIHRvICciIDw8IGxlZnQg
PDwgIiciOworICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIo
KTsKKyAgICBlcnJvcihsaW5lLCAiIiwgb3AsIGV4dHJhSW5mby5jX3N0cigpKTsKK30KKworLy8K
Ky8vIFNhbWUgZXJyb3IgbWVzc2FnZSBmb3IgYWxsIHBsYWNlcyB1bmFyeSBvcGVyYXRpb25zIGRv
bid0IHdvcmsuCisvLwordm9pZCBUUGFyc2VDb250ZXh0Ojp1bmFyeU9wRXJyb3IoY29uc3QgVFNv
dXJjZUxvYyYgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgb3BlcmFuZCkKK3sKKyAgICBz
dGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgZXh0cmFJbmZvU3RyZWFtIDw8
ICJubyBvcGVyYXRpb24gJyIgPDwgb3AgPDwgIicgZXhpc3RzIHRoYXQgdGFrZXMgYW4gb3BlcmFu
ZCBvZiB0eXBlICIgPDwgb3BlcmFuZCAKKyAgICAgICAgICAgICAgICAgICAgPDwgIiAob3IgdGhl
cmUgaXMgbm8gYWNjZXB0YWJsZSBjb252ZXJzaW9uKSI7CisgICAgc3RkOjpzdHJpbmcgZXh0cmFJ
bmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgIGVycm9yKGxpbmUsICIgd3Jvbmcgb3Bl
cmFuZCB0eXBlIiwgb3AsIGV4dHJhSW5mby5jX3N0cigpKTsKK30KKworLy8KKy8vIFNhbWUgZXJy
b3IgbWVzc2FnZSBmb3IgYWxsIGJpbmFyeSBvcGVyYXRpb25zIGRvbid0IHdvcmsuCisvLwordm9p
ZCBUUGFyc2VDb250ZXh0OjpiaW5hcnlPcEVycm9yKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNv
bnN0IGNoYXIqIG9wLCBUU3RyaW5nIGxlZnQsIFRTdHJpbmcgcmlnaHQpCit7CisgICAgc3RkOjpz
dHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAibm8g
b3BlcmF0aW9uICciIDw8IG9wIDw8ICInIGV4aXN0cyB0aGF0IHRha2VzIGEgbGVmdC1oYW5kIG9w
ZXJhbmQgb2YgdHlwZSAnIiA8PCBsZWZ0IAorICAgICAgICAgICAgICAgICAgICA8PCAiJyBhbmQg
YSByaWdodCBvcGVyYW5kIG9mIHR5cGUgJyIgPDwgcmlnaHQgPDwgIicgKG9yIHRoZXJlIGlzIG5v
IGFjY2VwdGFibGUgY29udmVyc2lvbikiOworICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4
dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICBlcnJvcihsaW5lLCAiIHdyb25nIG9wZXJhbmQgdHlw
ZXMgIiwgb3AsIGV4dHJhSW5mby5jX3N0cigpKTsgCit9CisKK2Jvb2wgVFBhcnNlQ29udGV4dDo6
cHJlY2lzaW9uRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUHJlY2lzaW9uIHBy
ZWNpc2lvbiwgVEJhc2ljVHlwZSB0eXBlKXsKKyAgICBpZiAoIWNoZWNrc1ByZWNpc2lvbkVycm9y
cykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHN3aXRjaCggdHlwZSApeworICAgIGNhc2Ug
RWJ0RmxvYXQ6CisgICAgICAgIGlmKCBwcmVjaXNpb24gPT0gRWJwVW5kZWZpbmVkICl7CisgICAg
ICAgICAgICBlcnJvciggbGluZSwgIk5vIHByZWNpc2lvbiBzcGVjaWZpZWQgZm9yIChmbG9hdCki
LCAiIiApOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgIGlmKCBwcmVjaXNpb24gPT0gRWJwVW5kZWZp
bmVkICl7CisgICAgICAgICAgICBlcnJvciggbGluZSwgIk5vIHByZWNpc2lvbiBzcGVjaWZpZWQg
KGludCkiLCAiIiApOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKKy8vCisvLyBCb3RoIHRlc3QgYW5kIGlmIG5lY2Vzc2FyeSwg
c3BpdCBvdXQgYW4gZXJyb3IsIHRvIHNlZSBpZiB0aGUgbm9kZSBpcyByZWFsbHkKKy8vIGFuIGwt
dmFsdWUgdGhhdCBjYW4gYmUgb3BlcmF0ZWQgb24gdGhpcyB3YXkuCisvLworLy8gUmV0dXJucyB0
cnVlIGlmIHRoZSB3YXMgYW4gZXJyb3IuCisvLworYm9vbCBUUGFyc2VDb250ZXh0OjpsVmFsdWVF
cnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUSW50ZXJt
VHlwZWQqIG5vZGUpCit7CisgICAgVEludGVybVN5bWJvbCogc3ltTm9kZSA9IG5vZGUtPmdldEFz
U3ltYm9sTm9kZSgpOworICAgIFRJbnRlcm1CaW5hcnkqIGJpbmFyeU5vZGUgPSBub2RlLT5nZXRB
c0JpbmFyeU5vZGUoKTsKKworICAgIGlmIChiaW5hcnlOb2RlKSB7CisgICAgICAgIGJvb2wgZXJy
b3JSZXR1cm47CisKKyAgICAgICAgc3dpdGNoKGJpbmFyeU5vZGUtPmdldE9wKCkpIHsKKyAgICAg
ICAgY2FzZSBFT3BJbmRleERpcmVjdDoKKyAgICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0Ogor
ICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3RydWN0OgorICAgICAgICAgICAgcmV0dXJuIGxW
YWx1ZUVycm9yQ2hlY2sobGluZSwgb3AsIGJpbmFyeU5vZGUtPmdldExlZnQoKSk7CisgICAgICAg
IGNhc2UgRU9wVmVjdG9yU3dpenpsZToKKyAgICAgICAgICAgIGVycm9yUmV0dXJuID0gbFZhbHVl
RXJyb3JDaGVjayhsaW5lLCBvcCwgYmluYXJ5Tm9kZS0+Z2V0TGVmdCgpKTsKKyAgICAgICAgICAg
IGlmICghZXJyb3JSZXR1cm4pIHsKKyAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0WzRdID0gezAs
MCwwLDB9OworCisgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiByaWdodE5vZGUgPSBiaW5h
cnlOb2RlLT5nZXRSaWdodCgpOworICAgICAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUgKmFn
Z3JOb2RlID0gcmlnaHROb2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBwID0gYWdnck5v
ZGUtPmdldFNlcXVlbmNlKCkuYmVnaW4oKTsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHAgIT0gYWdnck5vZGUtPmdldFNlcXVlbmNlKCkuZW5kKCk7IHAr
KykgeworICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWUgPSAoKnApLT5nZXRBc1R5cGVkKCkt
PmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRJQ29uc3QoMCk7CisgICAgICAgICAgICAgICAgICAg
IG9mZnNldFt2YWx1ZV0rKzsgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0W3Zh
bHVlXSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1
ZSBvZiBzd2l6emxlIGNhbm5vdCBoYXZlIGR1cGxpY2F0ZSBjb21wb25lbnRzIiwgb3ApOworCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gCisKKyAgICAgICAgICAgIHJldHVy
biBlcnJvclJldHVybjsKKyAgICAgICAgZGVmYXVsdDogCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCk7CisK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisKKyAgICBjb25zdCBjaGFyKiBzeW1ib2wg
PSAwOworICAgIGlmIChzeW1Ob2RlICE9IDApCisgICAgICAgIHN5bWJvbCA9IHN5bU5vZGUtPmdl
dFN5bWJvbCgpLmNfc3RyKCk7CisKKyAgICBjb25zdCBjaGFyKiBtZXNzYWdlID0gMDsKKyAgICBz
d2l0Y2ggKG5vZGUtPmdldFF1YWxpZmllcigpKSB7CisgICAgY2FzZSBFdnFDb25zdDogICAgICAg
ICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYSBjb25zdCI7ICAgICAgICBicmVhazsKKyAgICBj
YXNlIEV2cUNvbnN0UmVhZE9ubHk6ICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhIGNvbnN0Ijsg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxQXR0cmlidXRlOiAgICAgIG1lc3NhZ2UgPSAiY2Fu
J3QgbW9kaWZ5IGFuIGF0dHJpYnV0ZSI7ICAgYnJlYWs7CisgICAgY2FzZSBFdnFVbmlmb3JtOiAg
ICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYSB1bmlmb3JtIjsgICAgICBicmVhazsKKyAg
ICBjYXNlIEV2cVZhcnlpbmdJbjogICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhIHZhcnlp
bmciOyAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxRnJhZ0Nvb3JkOiAgICAgIG1lc3NhZ2UgPSAi
Y2FuJ3QgbW9kaWZ5IGdsX0ZyYWdDb29yZCI7ICAgYnJlYWs7CisgICAgY2FzZSBFdnFGcm9udEZh
Y2luZzogICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgZ2xfRnJvbnRGYWNpbmciOyBicmVhazsK
KyAgICBjYXNlIEV2cVBvaW50Q29vcmQ6ICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBnbF9Q
b2ludENvb3JkIjsgIGJyZWFrOworICAgIGRlZmF1bHQ6CisKKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gVHlwZSB0aGF0IGNhbid0IGJlIHdyaXR0ZW4gdG8/CisgICAgICAgIC8vCisgICAgICAgIHN3
aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6
CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6CisgICAgICAgICAgICBtZXNzYWdlID0gImNh
bid0IG1vZGlmeSBhIHNhbXBsZXIiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RWJ0Vm9pZDoKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IHZvaWQiOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IAorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobWVzc2FnZSA9PSAwICYmIGJpbmFyeU5vZGUgPT0g
MCAmJiBzeW1Ob2RlID09IDApIHsKKyAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIHJlcXVp
cmVkIiwgb3ApOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworCisgICAgLy8KKyAg
ICAvLyBFdmVyeXRoaW5nIGVsc2UgaXMgb2theSwgbm8gZXJyb3IuCisgICAgLy8KKyAgICBpZiAo
bWVzc2FnZSA9PSAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLworICAgIC8vIElm
IHdlIGdldCBoZXJlLCB3ZSBoYXZlIGFuIGVycm9yIGFuZCBhIG1lc3NhZ2UuCisgICAgLy8KKyAg
ICBpZiAoc3ltTm9kZSkgeworICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJl
YW07CisgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiXCIiIDw8IHN5bWJvbCA8PCAiXCIgKCIg
PDwgbWVzc2FnZSA8PCAiKSI7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJh
SW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIHJlcXVpcmVk
Iiwgb3AsIGV4dHJhSW5mby5jX3N0cigpKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHN0
ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgZXh0cmFJbmZvU3RyZWFt
IDw8ICIoIiA8PCBtZXNzYWdlIDw8ICIpIjsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZv
ID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUg
cmVxdWlyZWQiLCBvcCwgZXh0cmFJbmZvLmNfc3RyKCkpOworICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCisvLworLy8gQm90aCB0ZXN0LCBhbmQgaWYgbmVjZXNzYXJ5IHNwaXQgb3V0IGFu
IGVycm9yLCB0byBzZWUgaWYgdGhlIG5vZGUgaXMgcmVhbGx5CisvLyBhIGNvbnN0YW50LgorLy8K
Ky8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgd2FzIGFuIGVycm9yLgorLy8KK2Jvb2wgVFBhcnNlQ29u
dGV4dDo6Y29uc3RFcnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSkKK3sKKyAgICBpZiAobm9k
ZS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImNvbnN0YW50IGV4cHJlc3Npb24gcmVxdWlyZWQi
LCAiIik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8KKy8vIEJvdGggdGVzdCwgYW5kIGlm
IG5lY2Vzc2FyeSBzcGl0IG91dCBhbiBlcnJvciwgdG8gc2VlIGlmIHRoZSBub2RlIGlzIHJlYWxs
eQorLy8gYW4gaW50ZWdlci4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHdhcyBhbiBlcnJv
ci4KKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OmludGVnZXJFcnJvckNoZWNrKFRJbnRlcm1UeXBl
ZCogbm9kZSwgY29uc3QgY2hhciogdG9rZW4pCit7CisgICAgaWYgKG5vZGUtPmdldEJhc2ljVHlw
ZSgpID09IEVidEludCAmJiBub2RlLT5nZXROb21pbmFsU2l6ZSgpID09IDEpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImludGVnZXIgZXhwcmVz
c2lvbiByZXF1aXJlZCIsIHRva2VuKTsKKworICAgIHJldHVybiB0cnVlOworfQorCisvLworLy8g
Qm90aCB0ZXN0LCBhbmQgaWYgbmVjZXNzYXJ5IHNwaXQgb3V0IGFuIGVycm9yLCB0byBzZWUgaWYg
d2UgYXJlIGN1cnJlbnRseQorLy8gZ2xvYmFsbHkgc2NvcGVkLgorLy8KKy8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgd2FzIGFuIGVycm9yLgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6Z2xvYmFsRXJy
b3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBib29sIGdsb2JhbCwgY29uc3QgY2hhciog
dG9rZW4pCit7CisgICAgaWYgKGdsb2JhbCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ZXJyb3IobGluZSwgIm9ubHkgYWxsb3dlZCBhdCBnbG9iYWwgc2NvcGUiLCB0b2tlbik7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworLy8KKy8vIEZvciBub3csIGtlZXAgaXQgc2ltcGxlOiAgaWYg
aXQgc3RhcnRzICJnbF8iLCBpdCdzIHJlc2VydmVkLCBpbmRlcGVuZGVudAorLy8gb2Ygc2NvcGUu
ICBFeGNlcHQsIGlmIHRoZSBzeW1ib2wgdGFibGUgaXMgYXQgdGhlIGJ1aWx0LWluIHB1c2gtbGV2
ZWwsCisvLyB3aGljaCBpcyB3aGVuIHdlIGFyZSBwYXJzaW5nIGJ1aWx0LWlucy4KKy8vIEFsc28g
Y2hlY2tzIGZvciAid2ViZ2xfIiBhbmQgIl93ZWJnbF8iIHJlc2VydmVkIGlkZW50aWZpZXJzIGlm
IHBhcnNpbmcgYQorLy8gd2ViZ2wgc2hhZGVyLgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGVy
ZSB3YXMgYW4gZXJyb3IuCisvLworYm9vbCBUUGFyc2VDb250ZXh0OjpyZXNlcnZlZEVycm9yQ2hl
Y2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllcikKK3sK
KyAgICBzdGF0aWMgY29uc3QgY2hhciogcmVzZXJ2ZWRFcnJNc2cgPSAicmVzZXJ2ZWQgYnVpbHQt
aW4gbmFtZSI7CisgICAgaWYgKCFzeW1ib2xUYWJsZS5hdEJ1aWx0SW5MZXZlbCgpKSB7CisgICAg
ICAgIGlmIChpZGVudGlmaWVyLmNvbXBhcmUoMCwgMywgImdsXyIpID09IDApIHsKKyAgICAgICAg
ICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAiZ2xfIik7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNXZWJHTEJhc2VkU3BlYyhzaGFkZXJT
cGVjKSkgeworICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuY29tcGFyZSgwLCA2LCAid2ViZ2xf
IikgPT0gMCkgeworICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAi
d2ViZ2xfIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoaWRlbnRpZmllci5jb21wYXJlKDAsIDcsICJfd2ViZ2xfIikgPT0gMCkg
eworICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAiX3dlYmdsXyIp
OworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKHNoYWRlclNwZWMgPT0gU0hfQ1NTX1NIQURFUlNfU1BFQyAmJiBpZGVudGlmaWVyLmNv
bXBhcmUoMCwgNCwgImNzc18iKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgZXJyb3IobGluZSwg
cmVzZXJ2ZWRFcnJNc2csICJjc3NfIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlkZW50aWZpZXIuZmluZCgiX18i
KSAhPSBUU3RyaW5nOjpucG9zKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWRlbnRpZmll
cnMgY29udGFpbmluZyB0d28gY29uc2VjdXRpdmUgdW5kZXJzY29yZXMgKF9fKSBhcmUgcmVzZXJ2
ZWQgYXMgcG9zc2libGUgZnV0dXJlIGtleXdvcmRzIiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCisvLworLy8gTWFrZSBzdXJlIHRoZXJlIGlzIGVub3VnaCBkYXRhIHByb3ZpZGVk
IHRvIHRoZSBjb25zdHJ1Y3RvciB0byBidWlsZAorLy8gc29tZXRoaW5nIG9mIHRoZSB0eXBlIG9m
IHRoZSBjb25zdHJ1Y3Rvci4gIEFsc28gcmV0dXJucyB0aGUgdHlwZSBvZgorLy8gdGhlIGNvbnN0
cnVjdG9yLgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaW4gY29u
c3RydWN0aW9uLgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6Y29uc3RydWN0b3JFcnJvckNoZWNr
KGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRJbnRlcm1Ob2RlKiBub2RlLCBURnVuY3Rpb24mIGZ1
bmN0aW9uLCBUT3BlcmF0b3Igb3AsIFRUeXBlKiB0eXBlKQoreworICAgICp0eXBlID0gZnVuY3Rp
b24uZ2V0UmV0dXJuVHlwZSgpOworCisgICAgYm9vbCBjb25zdHJ1Y3RpbmdNYXRyaXggPSBmYWxz
ZTsKKyAgICBzd2l0Y2gob3ApIHsKKyAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6CisgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RNYXQzOgorICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0NDoKKyAgICAgICAg
Y29uc3RydWN0aW5nTWF0cml4ID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDog
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vCisgICAgLy8gTm90ZTogSXQncyBva2F5
IHRvIGhhdmUgdG9vIG1hbnkgY29tcG9uZW50cyBhdmFpbGFibGUsIGJ1dCBub3Qgb2theSB0byBo
YXZlIHVudXNlZAorICAgIC8vIGFyZ3VtZW50cy4gICdmdWxsJyB3aWxsIGdvIHRvIHRydWUgd2hl
biBlbm91Z2ggYXJncyBoYXZlIGJlZW4gc2Vlbi4gIElmIHdlIGxvb3AKKyAgICAvLyBhZ2Fpbiwg
dGhlcmUgaXMgYW4gZXh0cmEgYXJndW1lbnQsIHNvICdvdmVyZnVsbCcgd2lsbCBiZWNvbWUgdHJ1
ZS4KKyAgICAvLworCisgICAgc2l6ZV90IHNpemUgPSAwOworICAgIGJvb2wgY29uc3RUeXBlID0g
dHJ1ZTsKKyAgICBib29sIGZ1bGwgPSBmYWxzZTsKKyAgICBib29sIG92ZXJGdWxsID0gZmFsc2U7
CisgICAgYm9vbCBtYXRyaXhJbk1hdHJpeCA9IGZhbHNlOworICAgIGJvb2wgYXJyYXlBcmcgPSBm
YWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQo
KTsgKytpKSB7CisgICAgICAgIGNvbnN0IFRQYXJhbWV0ZXImIHBhcmFtID0gZnVuY3Rpb24uZ2V0
UGFyYW0oaSk7CisgICAgICAgIHNpemUgKz0gcGFyYW0udHlwZS0+Z2V0T2JqZWN0U2l6ZSgpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKGNvbnN0cnVjdGluZ01hdHJpeCAmJiBwYXJhbS50eXBlLT5p
c01hdHJpeCgpKQorICAgICAgICAgICAgbWF0cml4SW5NYXRyaXggPSB0cnVlOworICAgICAgICBp
ZiAoZnVsbCkKKyAgICAgICAgICAgIG92ZXJGdWxsID0gdHJ1ZTsKKyAgICAgICAgaWYgKG9wICE9
IEVPcENvbnN0cnVjdFN0cnVjdCAmJiAhdHlwZS0+aXNBcnJheSgpICYmIHNpemUgPj0gdHlwZS0+
Z2V0T2JqZWN0U2l6ZSgpKQorICAgICAgICAgICAgZnVsbCA9IHRydWU7CisgICAgICAgIGlmIChw
YXJhbS50eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFDb25zdCkKKyAgICAgICAgICAgIGNvbnN0
VHlwZSA9IGZhbHNlOworICAgICAgICBpZiAocGFyYW0udHlwZS0+aXNBcnJheSgpKQorICAgICAg
ICAgICAgYXJyYXlBcmcgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAoY29uc3RUeXBlKQor
ICAgICAgICB0eXBlLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3QpOworCisgICAgaWYgKHR5cGUtPmlz
QXJyYXkoKSAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KHR5cGUtPmdldEFycmF5U2l6ZSgpKSAhPSBm
dW5jdGlvbi5nZXRQYXJhbUNvdW50KCkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImFycmF5IGNv
bnN0cnVjdG9yIG5lZWRzIG9uZSBhcmd1bWVudCBwZXIgYXJyYXkgZWxlbWVudCIsICJjb25zdHJ1
Y3RvciIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYXJyYXlBcmcg
JiYgb3AgIT0gRU9wQ29uc3RydWN0U3RydWN0KSB7CisgICAgICAgIGVycm9yKGxpbmUsICJjb25z
dHJ1Y3RpbmcgZnJvbSBhIG5vbi1kZXJlZmVyZW5jZWQgYXJyYXkiLCAiY29uc3RydWN0b3IiKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKG1hdHJpeEluTWF0cml4ICYm
ICF0eXBlLT5pc0FycmF5KCkpIHsKKyAgICAgICAgaWYgKGZ1bmN0aW9uLmdldFBhcmFtQ291bnQo
KSAhPSAxKSB7CisgICAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBtYXRyaXggZnJv
bSBtYXRyaXggY2FuIG9ubHkgdGFrZSBvbmUgYXJndW1lbnQiLCAiY29uc3RydWN0b3IiKTsKKyAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChvdmVyRnVs
bCkgeworICAgICAgICBlcnJvcihsaW5lLCAidG9vIG1hbnkgYXJndW1lbnRzIiwgImNvbnN0cnVj
dG9yIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAob3AgPT0g
RU9wQ29uc3RydWN0U3RydWN0ICYmICF0eXBlLT5pc0FycmF5KCkgJiYgdHlwZS0+Z2V0U3RydWN0
KCktPmZpZWxkcygpLnNpemUoKSAhPSBmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCkpIHsKKyAgICAg
ICAgZXJyb3IobGluZSwgIk51bWJlciBvZiBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzIGRvZXMgbm90
IG1hdGNoIHRoZSBudW1iZXIgb2Ygc3RydWN0dXJlIGZpZWxkcyIsICJjb25zdHJ1Y3RvciIpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIXR5cGUtPmlzTWF0cml4KCkg
fHwgIW1hdHJpeEluTWF0cml4KSB7CisgICAgICAgIGlmICgob3AgIT0gRU9wQ29uc3RydWN0U3Ry
dWN0ICYmIHNpemUgIT0gMSAmJiBzaXplIDwgdHlwZS0+Z2V0T2JqZWN0U2l6ZSgpKSB8fAorICAg
ICAgICAgICAgKG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCAmJiBzaXplIDwgdHlwZS0+Z2V0T2Jq
ZWN0U2l6ZSgpKSkgeworICAgICAgICAgICAgZXJyb3IobGluZSwgIm5vdCBlbm91Z2ggZGF0YSBw
cm92aWRlZCBmb3IgY29uc3RydWN0aW9uIiwgImNvbnN0cnVjdG9yIik7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFRJbnRlcm1UeXBlZCAqdHlwZWQg
PSBub2RlID8gbm9kZS0+Z2V0QXNUeXBlZCgpIDogMDsKKyAgICBpZiAodHlwZWQgPT0gMCkgewor
ICAgICAgICBlcnJvcihsaW5lLCAiY29uc3RydWN0b3IgYXJndW1lbnQgZG9lcyBub3QgaGF2ZSBh
IHR5cGUiLCAiY29uc3RydWN0b3IiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IGlmIChvcCAhPSBFT3BDb25zdHJ1Y3RTdHJ1Y3QgJiYgSXNTYW1wbGVyKHR5cGVkLT5nZXRCYXNp
Y1R5cGUoKSkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBjb252ZXJ0IGEgc2FtcGxl
ciIsICJjb25zdHJ1Y3RvciIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYg
KHR5cGVkLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkKSB7CisgICAgICAgIGVycm9yKGxpbmUs
ICJjYW5ub3QgY29udmVydCBhIHZvaWQiLCAiY29uc3RydWN0b3IiKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBUaGlzIGZ1bmN0aW9u
IGNoZWNrcyB0byBzZWUgaWYgYSB2b2lkIHZhcmlhYmxlIGhhcyBiZWVuIGRlY2xhcmVkIGFuZCBy
YWlzZSBhbiBlcnJvciBtZXNzYWdlIGZvciBzdWNoIGEgY2FzZQorLy8KKy8vIHJldHVybnMgdHJ1
ZSBpbiBjYXNlIG9mIGFuIGVycm9yCisvLworYm9vbCBUUGFyc2VDb250ZXh0Ojp2b2lkRXJyb3JD
aGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBj
b25zdCBUUHVibGljVHlwZSYgcHViVHlwZSkKK3sKKyAgICBpZiAocHViVHlwZS50eXBlID09IEVi
dFZvaWQpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQn
IiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSAKKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gVGhpcyBmdW5jdGlvbiBjaGVja3MgdG8gc2VlIGlm
IHRoZSBub2RlIChmb3IgdGhlIGV4cHJlc3Npb24pIGNvbnRhaW5zIGEgc2NhbGFyIGJvb2xlYW4g
ZXhwcmVzc2lvbiBvciBub3QKKy8vCisvLyByZXR1cm5zIHRydWUgaW4gY2FzZSBvZiBhbiBlcnJv
cgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6Ym9vbEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxv
YyYgbGluZSwgY29uc3QgVEludGVybVR5cGVkKiB0eXBlKQoreworICAgIGlmICh0eXBlLT5nZXRC
YXNpY1R5cGUoKSAhPSBFYnRCb29sIHx8IHR5cGUtPmlzQXJyYXkoKSB8fCB0eXBlLT5pc01hdHJp
eCgpIHx8IHR5cGUtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImJvb2xlYW4g
ZXhwcmVzc2lvbiBleHBlY3RlZCIsICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSAK
KworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gVGhpcyBmdW5jdGlvbiBjaGVja3MgdG8gc2Vl
IGlmIHRoZSBub2RlIChmb3IgdGhlIGV4cHJlc3Npb24pIGNvbnRhaW5zIGEgc2NhbGFyIGJvb2xl
YW4gZXhwcmVzc2lvbiBvciBub3QKKy8vCisvLyByZXR1cm5zIHRydWUgaW4gY2FzZSBvZiBhbiBl
cnJvcgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6Ym9vbEVycm9yQ2hlY2soY29uc3QgVFNvdXJj
ZUxvYyYgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlKQoreworICAgIGlmIChwVHlwZS50
eXBlICE9IEVidEJvb2wgfHwgcFR5cGUuYXJyYXkgfHwgcFR5cGUubWF0cml4IHx8IChwVHlwZS5z
aXplID4gMSkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImJvb2xlYW4gZXhwcmVzc2lvbiBleHBl
Y3RlZCIsICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSAKKworICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0OjpzYW1wbGVyRXJyb3JDaGVjayhjb25zdCBU
U291cmNlTG9jJiBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUsIGNvbnN0IGNoYXIqIHJl
YXNvbikKK3sKKyAgICBpZiAocFR5cGUudHlwZSA9PSBFYnRTdHJ1Y3QpIHsKKyAgICAgICAgaWYg
KGNvbnRhaW5zU2FtcGxlcigqcFR5cGUudXNlckRlZikpIHsKKyAgICAgICAgICAgIGVycm9yKGxp
bmUsIHJlYXNvbiwgZ2V0QmFzaWNTdHJpbmcocFR5cGUudHlwZSksICIoc3RydWN0dXJlIGNvbnRh
aW5zIGEgc2FtcGxlcikiKTsKKyAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSBpZiAo
SXNTYW1wbGVyKHBUeXBlLnR5cGUpKSB7CisgICAgICAgIGVycm9yKGxpbmUsIHJlYXNvbiwgZ2V0
QmFzaWNTdHJpbmcocFR5cGUudHlwZSkpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0OjpzdHJ1Y3RRdWFs
aWZpZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBl
JiBwVHlwZSkKK3sKKyAgICBpZiAoKHBUeXBlLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwg
cFR5cGUucXVhbGlmaWVyID09IEV2cVZhcnlpbmdPdXQgfHwgcFR5cGUucXVhbGlmaWVyID09IEV2
cUF0dHJpYnV0ZSkgJiYKKyAgICAgICAgcFR5cGUudHlwZSA9PSBFYnRTdHJ1Y3QpIHsKKyAgICAg
ICAgZXJyb3IobGluZSwgImNhbm5vdCBiZSB1c2VkIHdpdGggYSBzdHJ1Y3R1cmUiLCBnZXRRdWFs
aWZpZXJTdHJpbmcocFR5cGUucXVhbGlmaWVyKSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBpZiAocFR5cGUucXVhbGlmaWVyICE9IEV2cVVuaWZvcm0gJiYg
c2FtcGxlckVycm9yQ2hlY2sobGluZSwgcFR5cGUsICJzYW1wbGVycyBtdXN0IGJlIHVuaWZvcm0i
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
VFBhcnNlQ29udGV4dDo6cGFyYW1ldGVyU2FtcGxlckVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxv
YyYgbGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIGNvbnN0IFRUeXBlJiB0eXBlKQoreworICAg
IGlmICgocXVhbGlmaWVyID09IEV2cU91dCB8fCBxdWFsaWZpZXIgPT0gRXZxSW5PdXQpICYmIAor
ICAgICAgICAgICAgIHR5cGUuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0U3RydWN0ICYmIElzU2FtcGxl
cih0eXBlLmdldEJhc2ljVHlwZSgpKSkgeworICAgICAgICBlcnJvcihsaW5lLCAic2FtcGxlcnMg
Y2Fubm90IGJlIG91dHB1dCBwYXJhbWV0ZXJzIiwgdHlwZS5nZXRCYXNpY1N0cmluZygpKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFRQYXJzZUNvbnRleHQ6OmNvbnRhaW5zU2FtcGxlcihUVHlwZSYgdHlwZSkKK3sKKyAgICBpZiAo
SXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgeworICAgICAgICBjb25z
dCBURmllbGRMaXN0JiBmaWVsZHMgPSB0eXBlLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgICAgIGlmIChjb250YWluc1NhbXBsZXIoKmZpZWxkc1tpXS0+dHlwZSgpKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBm
YWxzZTsKK30KKworLy8KKy8vIERvIHNpemUgY2hlY2tpbmcgZm9yIGFuIGFycmF5IHR5cGUncyBz
aXplLgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCisvLworYm9v
bCBUUGFyc2VDb250ZXh0OjphcnJheVNpemVFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIFRJbnRlcm1UeXBlZCogZXhwciwgaW50JiBzaXplKQoreworICAgIFRJbnRlcm1Db25zdGFu
dFVuaW9uKiBjb25zdGFudCA9IGV4cHItPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAgIGlmIChj
b25zdGFudCA9PSAwIHx8IGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRJbnQpIHsKKyAg
ICAgICAgZXJyb3IobGluZSwgImFycmF5IHNpemUgbXVzdCBiZSBhIGNvbnN0YW50IGludGVnZXIg
ZXhwcmVzc2lvbiIsICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgc2l6
ZSA9IGNvbnN0YW50LT5nZXRJQ29uc3QoMCk7CisKKyAgICBpZiAoc2l6ZSA8PSAwKSB7CisgICAg
ICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIiwg
IiIpOworICAgICAgICBzaXplID0gMTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCisvLworLy8gU2VlIGlmIHRoaXMgcXVhbGlmaWVyIGNhbiBi
ZSBhbiBhcnJheS4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYW4gZXJyb3IuCisv
LworYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVF1YWxpZmllckVycm9yQ2hlY2soY29uc3QgVFNv
dXJjZUxvYyYgbGluZSwgVFB1YmxpY1R5cGUgdHlwZSkKK3sKKyAgICBpZiAoKHR5cGUucXVhbGlm
aWVyID09IEV2cUF0dHJpYnV0ZSkgfHwgKHR5cGUucXVhbGlmaWVyID09IEV2cUNvbnN0KSkgewor
ICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGRlY2xhcmUgYXJyYXlzIG9mIHRoaXMgcXVhbGlm
aWVyIiwgVFR5cGUodHlwZSkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLworLy8gU2Vl
IGlmIHRoaXMgdHlwZSBjYW4gYmUgYW4gYXJyYXkuCisvLworLy8gUmV0dXJucyB0cnVlIGlmIHRo
ZXJlIGlzIGFuIGVycm9yLgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlUeXBlRXJyb3JD
aGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUHVibGljVHlwZSB0eXBlKQoreworICAgIC8v
CisgICAgLy8gQ2FuIHRoZSB0eXBlIGJlIGFuIGFycmF5PworICAgIC8vCisgICAgaWYgKHR5cGUu
YXJyYXkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBkZWNsYXJlIGFycmF5cyBvZiBh
cnJheXMiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vCisvLyBE
byBhbGwgdGhlIHNlbWFudGljIGNoZWNraW5nIGZvciBkZWNsYXJpbmcgYW4gYXJyYXksIHdpdGgg
YW5kIAorLy8gd2l0aG91dCBhIHNpemUsIGFuZCBtYWtlIHRoZSByaWdodCBjaGFuZ2VzIHRvIHRo
ZSBzeW1ib2wgdGFibGUuCisvLworLy8gc2l6ZSA9PSAwIG1lYW5zIG5vIHNwZWNpZmllZCBzaXpl
LgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCisvLworYm9vbCBU
UGFyc2VDb250ZXh0OjphcnJheUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFN0
cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUgdHlwZSwgVFZhcmlhYmxlKiYgdmFyaWFibGUp
Cit7CisgICAgLy8KKyAgICAvLyBEb24ndCBjaGVjayBmb3IgcmVzZXJ2ZWQgd29yZCB1c2UgdW50
aWwgYWZ0ZXIgd2Uga25vdyBpdCdzIG5vdCBpbiB0aGUgc3ltYm9sIHRhYmxlLAorICAgIC8vIGJl
Y2F1c2UgcmVzZXJ2ZWQgYXJyYXlzIGNhbiBiZSByZWRlY2xhcmVkLgorICAgIC8vCisKKyAgICBi
b29sIGJ1aWx0SW4gPSBmYWxzZTsgCisgICAgYm9vbCBzYW1lU2NvcGUgPSBmYWxzZTsKKyAgICBU
U3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKGlkZW50aWZpZXIsICZidWlsdEluLCAm
c2FtZVNjb3BlKTsKKyAgICBpZiAoc3ltYm9sID09IDAgfHwgIXNhbWVTY29wZSkgeworICAgICAg
ICBpZiAocmVzZXJ2ZWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIAorICAgICAgICB2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUo
JmlkZW50aWZpZXIsIFRUeXBlKHR5cGUpKTsKKworICAgICAgICBpZiAodHlwZS5hcnJheVNpemUp
CisgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldEFycmF5U2l6ZSh0eXBlLmFycmF5
U2l6ZSk7CisKKyAgICAgICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsK
KyAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJJ
TlRFUk5BTCBFUlJPUiBpbnNlcnRpbmcgbmV3IHN5bWJvbCIsIGlkZW50aWZpZXIuY19zdHIoKSk7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIGlmICghIHN5bWJvbC0+aXNWYXJpYWJsZSgpKSB7CisgICAgICAgICAgICBlcnJvcihsaW5l
LCAidmFyaWFibGUgZXhwZWN0ZWQiLCBpZGVudGlmaWVyLmNfc3RyKCkpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICB2YXJpYWJsZSA9IHN0YXRpY19jYXN0
PFRWYXJpYWJsZSo+KHN5bWJvbCk7CisgICAgICAgIGlmICghIHZhcmlhYmxlLT5nZXRUeXBlKCku
aXNBcnJheSgpKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAicmVkZWNsYXJpbmcgbm9uLWFy
cmF5IGFzIGFycmF5IiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldEFycmF5
U2l6ZSgpID4gMCkgeworICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyYXRpb24gb2Yg
YXJyYXkgd2l0aCBzaXplIiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoISB2YXJpYWJsZS0+Z2V0
VHlwZSgpLnNhbWVFbGVtZW50VHlwZShUVHlwZSh0eXBlKSkpIHsKKyAgICAgICAgICAgIGVycm9y
KGxpbmUsICJyZWRlY2xhcmF0aW9uIG9mIGFycmF5IHdpdGggYSBkaWZmZXJlbnQgdHlwZSIsIGlk
ZW50aWZpZXIuY19zdHIoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICh0eXBlLmFycmF5U2l6ZSkKKyAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRU
eXBlKCkuc2V0QXJyYXlTaXplKHR5cGUuYXJyYXlTaXplKTsKKyAgICB9IAorCisgICAgaWYgKHZv
aWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIsIHR5cGUpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8KKy8vIEVuZm9yY2Ugbm9uLWluaXRpYWxp
emVyIHR5cGUvcXVhbGlmaWVyIHJ1bGVzLgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3
YXMgYW4gZXJyb3IuCisvLworYm9vbCBUUGFyc2VDb250ZXh0Ojpub25Jbml0Q29uc3RFcnJvckNo
ZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNU
eXBlJiB0eXBlLCBib29sIGFycmF5KQoreworICAgIGlmICh0eXBlLnF1YWxpZmllciA9PSBFdnFD
b25zdCkKKyAgICB7CisgICAgICAgIC8vIE1ha2UgdGhlIHF1YWxpZmllciBtYWtlIHNlbnNlLgor
ICAgICAgICB0eXBlLnF1YWxpZmllciA9IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgCisgICAgICAg
IGlmIChhcnJheSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IobGluZSwgImFycmF5cyBt
YXkgbm90IGJlIGRlY2xhcmVkIGNvbnN0YW50IHNpbmNlIHRoZXkgY2Fubm90IGJlIGluaXRpYWxp
emVkIiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0
eXBlLmlzU3RydWN0dXJlQ29udGFpbmluZ0FycmF5cygpKQorICAgICAgICB7CisgICAgICAgICAg
ICBlcnJvcihsaW5lLCAic3RydWN0dXJlcyBjb250YWluaW5nIGFycmF5cyBtYXkgbm90IGJlIGRl
Y2xhcmVkIGNvbnN0YW50IHNpbmNlIHRoZXkgY2Fubm90IGJlIGluaXRpYWxpemVkIiwgaWRlbnRp
Zmllci5jX3N0cigpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGVycm9yKGxpbmUsICJ2YXJpYWJsZXMgd2l0aCBxdWFsaWZpZXIgJ2NvbnN0JyBtdXN0
IGJlIGluaXRpYWxpemVkIiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8KKy8v
IERvIHNlbWFudGljIGNoZWNraW5nIGZvciBhIHZhcmlhYmxlIGRlY2xhcmF0aW9uIHRoYXQgaGFz
IG5vIGluaXRpYWxpemVyLAorLy8gYW5kIHVwZGF0ZSB0aGUgc3ltYm9sIHRhYmxlLgorLy8KKy8v
IFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCisvLworYm9vbCBUUGFyc2VDb250
ZXh0Ojpub25Jbml0RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5nJiBp
ZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSwgVFZhcmlhYmxlKiYgdmFyaWFibGUpCit7Cisg
ICAgaWYgKHJlc2VydmVkRXJyb3JDaGVjayhsaW5lLCBpZGVudGlmaWVyKSkKKyAgICAgICAgcmVj
b3ZlcigpOworCisgICAgdmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCZpZGVudGlmaWVyLCBUVHlw
ZSh0eXBlKSk7CisKKyAgICBpZiAoISBzeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgewor
ICAgICAgICBlcnJvcihsaW5lLCAicmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5hbWUoKS5j
X3N0cigpKTsKKyAgICAgICAgZGVsZXRlIHZhcmlhYmxlOworICAgICAgICB2YXJpYWJsZSA9IDA7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICh2b2lkRXJyb3JDaGVjayhs
aW5lLCBpZGVudGlmaWVyLCB0eXBlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2Jvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1FcnJvckNoZWNrKGNvbnN0
IFRTb3VyY2VMb2MmIGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVyIHBhcmFt
UXVhbGlmaWVyLCBUVHlwZSogdHlwZSkKK3sgICAgCisgICAgaWYgKHF1YWxpZmllciAhPSBFdnFD
b25zdCAmJiBxdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7CisgICAgICAgIGVycm9yKGxpbmUs
ICJxdWFsaWZpZXIgbm90IGFsbG93ZWQgb24gZnVuY3Rpb24gcGFyYW1ldGVyIiwgZ2V0UXVhbGlm
aWVyU3RyaW5nKHF1YWxpZmllcikpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
aWYgKHF1YWxpZmllciA9PSBFdnFDb25zdCAmJiBwYXJhbVF1YWxpZmllciAhPSBFdnFJbikgewor
ICAgICAgICBlcnJvcihsaW5lLCAicXVhbGlmaWVyIG5vdCBhbGxvd2VkIHdpdGggIiwgZ2V0UXVh
bGlmaWVyU3RyaW5nKHF1YWxpZmllciksIGdldFF1YWxpZmllclN0cmluZyhwYXJhbVF1YWxpZmll
cikpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAocXVhbGlmaWVyID09
IEV2cUNvbnN0KQorICAgICAgICB0eXBlLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3RSZWFkT25seSk7
CisgICAgZWxzZQorICAgICAgICB0eXBlLT5zZXRRdWFsaWZpZXIocGFyYW1RdWFsaWZpZXIpOwor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRQYXJzZUNvbnRleHQ6OmV4dGVuc2lvbkVy
cm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgZXh0ZW5zaW9u
KQoreworICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0QmVoYXZpb3IgPSBleHRlbnNp
b25CZWhhdmlvcigpOworICAgIFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRl
ciA9IGV4dEJlaGF2aW9yLmZpbmQoZXh0ZW5zaW9uLmNfc3RyKCkpOworICAgIGlmIChpdGVyID09
IGV4dEJlaGF2aW9yLmVuZCgpKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJleHRlbnNpb24iLCBl
eHRlbnNpb24uY19zdHIoKSwgImlzIG5vdCBzdXBwb3J0ZWQiKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIC8vIEluIEdMU0wgRVMsIGFuIGV4dGVuc2lvbidzIGRlZmF1bHQgYmVo
YXZpb3IgaXMgImRpc2FibGUiLgorICAgIGlmIChpdGVyLT5zZWNvbmQgPT0gRUJoRGlzYWJsZSB8
fCBpdGVyLT5zZWNvbmQgPT0gRUJoVW5kZWZpbmVkKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJl
eHRlbnNpb24iLCBleHRlbnNpb24uY19zdHIoKSwgImlzIGRpc2FibGVkIik7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICBpZiAoaXRlci0+c2Vjb25kID09IEVCaFdhcm4pIHsKKyAg
ICAgICAgd2FybmluZyhsaW5lLCAiZXh0ZW5zaW9uIiwgZXh0ZW5zaW9uLmNfc3RyKCksICJpcyBi
ZWluZyB1c2VkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgVFBhcnNlQ29udGV4dDo6c3VwcG9ydHNFeHRlbnNpb24oY29uc3Qg
Y2hhciogZXh0ZW5zaW9uKQoreworICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0YmVo
YXZpb3IgPSBleHRlbnNpb25CZWhhdmlvcigpOworICAgIFRFeHRlbnNpb25CZWhhdmlvcjo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IGV4dGJlaGF2aW9yLmZpbmQoZXh0ZW5zaW9uKTsKKyAgICByZXR1
cm4gKGl0ZXIgIT0gZXh0YmVoYXZpb3IuZW5kKCkpOworfQorCitib29sIFRQYXJzZUNvbnRleHQ6
OmlzRXh0ZW5zaW9uRW5hYmxlZChjb25zdCBjaGFyKiBleHRlbnNpb24pIGNvbnN0Cit7CisgICAg
Y29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRiZWhhdmlvciA9IGV4dGVuc2lvbkJlaGF2aW9y
KCk7CisgICAgVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0YmVo
YXZpb3IuZmluZChleHRlbnNpb24pOworCisgICAgaWYgKGl0ZXIgPT0gZXh0YmVoYXZpb3IuZW5k
KCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIChp
dGVyLT5zZWNvbmQgPT0gRUJoRW5hYmxlIHx8IGl0ZXItPnNlY29uZCA9PSBFQmhSZXF1aXJlKTsK
K30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTm9uLUVycm9ycy4KKy8vCisv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8KKy8vIExvb2sgdXAgYSBmdW5jdGlvbiBuYW1l
IGluIHRoZSBzeW1ib2wgdGFibGUsIGFuZCBtYWtlIHN1cmUgaXQgaXMgYSBmdW5jdGlvbi4KKy8v
CisvLyBSZXR1cm4gdGhlIGZ1bmN0aW9uIHN5bWJvbCBpZiBmb3VuZCwgb3RoZXJ3aXNlIDAuCisv
LworY29uc3QgVEZ1bmN0aW9uKiBUUGFyc2VDb250ZXh0OjpmaW5kRnVuY3Rpb24oY29uc3QgVFNv
dXJjZUxvYyYgbGluZSwgVEZ1bmN0aW9uKiBjYWxsLCBib29sICpidWlsdEluKQoreworICAgIC8v
IEZpcnN0IGZpbmQgYnkgdW5tYW5nbGVkIG5hbWUgdG8gY2hlY2sgd2hldGhlciB0aGUgZnVuY3Rp
b24gbmFtZSBoYXMgYmVlbgorICAgIC8vIGhpZGRlbiBieSBhIHZhcmlhYmxlIG5hbWUgb3Igc3Ry
dWN0IHR5cGVuYW1lLgorICAgIC8vIElmIGEgZnVuY3Rpb24gaXMgZm91bmQsIGNoZWNrIGZvciBv
bmUgd2l0aCBhIG1hdGNoaW5nIGFyZ3VtZW50IGxpc3QuCisgICAgY29uc3QgVFN5bWJvbCogc3lt
Ym9sID0gc3ltYm9sVGFibGUuZmluZChjYWxsLT5nZXROYW1lKCksIGJ1aWx0SW4pOworICAgIGlm
IChzeW1ib2wgPT0gMCB8fCBzeW1ib2wtPmlzRnVuY3Rpb24oKSkgeworICAgICAgICBzeW1ib2wg
PSBzeW1ib2xUYWJsZS5maW5kKGNhbGwtPmdldE1hbmdsZWROYW1lKCksIGJ1aWx0SW4pOworICAg
IH0KKworICAgIGlmIChzeW1ib2wgPT0gMCkgeworICAgICAgICBlcnJvcihsaW5lLCAibm8gbWF0
Y2hpbmcgb3ZlcmxvYWRlZCBmdW5jdGlvbiBmb3VuZCIsIGNhbGwtPmdldE5hbWUoKS5jX3N0cigp
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCFzeW1ib2wtPmlzRnVuY3Rp
b24oKSkgeworICAgICAgICBlcnJvcihsaW5lLCAiZnVuY3Rpb24gbmFtZSBleHBlY3RlZCIsIGNh
bGwtPmdldE5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFRGdW5jdGlvbio+KHN5bWJvbCk7Cit9CisKKy8vCisv
LyBJbml0aWFsaXplcnMgc2hvdyB1cCBpbiBzZXZlcmFsIHBsYWNlcyBpbiB0aGUgZ3JhbW1hci4g
IEhhdmUgb25lIHNldCBvZgorLy8gY29kZSB0byBoYW5kbGUgdGhlbSBoZXJlLgorLy8KK2Jvb2wg
VFBhcnNlQ29udGV4dDo6ZXhlY3V0ZUluaXRpYWxpemVyKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUs
IFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiBwVHlwZSwgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluaXRpYWxpemVyLCBUSW50
ZXJtTm9kZSomIGludGVybU5vZGUsIFRWYXJpYWJsZSogdmFyaWFibGUpCit7CisgICAgVFR5cGUg
dHlwZSA9IFRUeXBlKHBUeXBlKTsKKworICAgIGlmICh2YXJpYWJsZSA9PSAwKSB7CisgICAgICAg
IGlmIChyZXNlcnZlZEVycm9yQ2hlY2sobGluZSwgaWRlbnRpZmllcikpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgICAgICBpZiAodm9pZEVycm9yQ2hlY2sobGluZSwgaWRlbnRpZmll
ciwgcFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gYWRkIHZhcmlhYmxlIHRvIHN5bWJvbCB0YWJsZQorICAgICAgICAvLworICAgICAgICB2
YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50aWZpZXIsIHR5cGUpOworICAgICAgICBpZiAo
ISBzeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgeworICAgICAgICAgICAgZXJyb3IobGlu
ZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIC8vIGRvbid0IGRlbGV0ZSB2YXJpYWJsZSwg
aXQncyB1c2VkIGJ5IGVycm9yIHJlY292ZXJ5LCBhbmQgdGhlIHBvb2wgCisgICAgICAgICAgICAv
LyBwb3Agd2lsbCB0YWtlIGNhcmUgb2YgdGhlIG1lbW9yeQorICAgICAgICB9CisgICAgfQorCisg
ICAgLy8KKyAgICAvLyBpZGVudGlmaWVyIG11c3QgYmUgb2YgdHlwZSBjb25zdGFudCwgYSBnbG9i
YWwsIG9yIGEgdGVtcG9yYXJ5CisgICAgLy8KKyAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHZh
cmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCk7CisgICAgaWYgKChxdWFsaWZpZXIgIT0g
RXZxVGVtcG9yYXJ5KSAmJiAocXVhbGlmaWVyICE9IEV2cUdsb2JhbCkgJiYgKHF1YWxpZmllciAh
PSBFdnFDb25zdCkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgIiBjYW5ub3QgaW5pdGlhbGl6ZSB0
aGlzIHR5cGUgb2YgcXVhbGlmaWVyICIsIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVy
U3RyaW5nKCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgLy8KKyAgICAvLyB0
ZXN0IGZvciBhbmQgcHJvcGFnYXRlIGNvbnN0YW50CisgICAgLy8KKworICAgIGlmIChxdWFsaWZp
ZXIgPT0gRXZxQ29uc3QpIHsKKyAgICAgICAgaWYgKHF1YWxpZmllciAhPSBpbml0aWFsaXplci0+
Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVh
bSBleHRyYUluZm9TdHJlYW07CisgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgIiciIDw8
IHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiJyI7CisgICAgICAg
ICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAg
ICAgICAgICBlcnJvcihsaW5lLCAiIGFzc2lnbmluZyBub24tY29uc3RhbnQgdG8iLCAiPSIsIGV4
dHJhSW5mby5jX3N0cigpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2V0UXVh
bGlmaWVyKEV2cVRlbXBvcmFyeSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgICBpZiAodHlwZSAhPSBpbml0aWFsaXplci0+Z2V0VHlwZSgpKSB7CisgICAgICAg
ICAgICBlcnJvcihsaW5lLCAiIG5vbi1tYXRjaGluZyB0eXBlcyBmb3IgY29uc3QgaW5pdGlhbGl6
ZXIgIiwgCisgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXJT
dHJpbmcoKSk7CisgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldFF1YWxpZmllcihF
dnFUZW1wb3JhcnkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGluaXRpYWxpemVyLT5nZXRBc0NvbnN0YW50VW5pb24oKSkgeyAKKyAgICAgICAgICAg
IHZhcmlhYmxlLT5zaGFyZUNvbnN0UG9pbnRlcihpbml0aWFsaXplci0+Z2V0QXNDb25zdGFudFVu
aW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCkpOworICAgICAgICB9IGVsc2UgaWYgKGluaXRp
YWxpemVyLT5nZXRBc1N5bWJvbE5vZGUoKSkgeworICAgICAgICAgICAgY29uc3QgVFN5bWJvbCog
c3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChpbml0aWFsaXplci0+Z2V0QXNTeW1ib2xOb2RlKCkt
PmdldFN5bWJvbCgpKTsKKyAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSogdFZhciA9IHN0YXRp
Y19jYXN0PGNvbnN0IFRWYXJpYWJsZSo+KHN5bWJvbCk7CisKKyAgICAgICAgICAgIENvbnN0YW50
VW5pb24qIGNvbnN0QXJyYXkgPSB0VmFyLT5nZXRDb25zdFBvaW50ZXIoKTsKKyAgICAgICAgICAg
IHZhcmlhYmxlLT5zaGFyZUNvbnN0UG9pbnRlcihjb25zdEFycmF5KTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAg
ICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiJyIgPDwgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRD
b21wbGV0ZVN0cmluZygpIDw8ICInIjsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5m
byA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICIgY2Fu
bm90IGFzc2lnbiB0byIsICI9IiwgZXh0cmFJbmZvLmNfc3RyKCkpOworICAgICAgICAgICAgdmFy
aWFibGUtPmdldFR5cGUoKS5zZXRRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorIAorICAgIGlmIChxdWFsaWZpZXIgIT0g
RXZxQ29uc3QpIHsKKyAgICAgICAgVEludGVybVN5bWJvbCogaW50ZXJtU3ltYm9sID0gaW50ZXJt
ZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwgdmFyaWFibGUtPmdldE5h
bWUoKSwgdmFyaWFibGUtPmdldFR5cGUoKSwgbGluZSk7CisgICAgICAgIGludGVybU5vZGUgPSBp
bnRlcm1lZGlhdGUuYWRkQXNzaWduKEVPcEluaXRpYWxpemUsIGludGVybVN5bWJvbCwgaW5pdGlh
bGl6ZXIsIGxpbmUpOworICAgICAgICBpZiAoaW50ZXJtTm9kZSA9PSAwKSB7CisgICAgICAgICAg
ICBhc3NpZ25FcnJvcihsaW5lLCAiPSIsIGludGVybVN5bWJvbC0+Z2V0Q29tcGxldGVTdHJpbmco
KSwgaW5pdGlhbGl6ZXItPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAgICAgIGludGVybU5vZGUgPSAwOwor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRQYXJzZUNvbnRleHQ6OmFyZUFsbENoaWxk
Q29uc3QoVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUpCit7CisgICAgQVNTRVJUKGFnZ3JOb2Rl
ICE9IE5VTEwpOworICAgIGlmICghYWdnck5vZGUtPmlzQ29uc3RydWN0b3IoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBhbGxDb25zdGFudCA9IHRydWU7CisKKyAgICAvLyBj
aGVjayBpZiBhbGwgdGhlIGNoaWxkIG5vZGVzIGFyZSBjb25zdGFudHMgc28gdGhhdCB0aGV5IGNh
biBiZSBpbnNlcnRlZCBpbnRvIAorICAgIC8vIHRoZSBwYXJlbnQgbm9kZQorICAgIFRJbnRlcm1T
ZXF1ZW5jZSAmc2VxdWVuY2UgPSBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKSA7CisgICAgZm9yIChU
SW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHAgPSBzZXF1ZW5jZS5iZWdpbigpOyBwICE9IHNlcXVl
bmNlLmVuZCgpOyArK3ApIHsKKyAgICAgICAgaWYgKCEoKnApLT5nZXRBc1R5cGVkKCktPmdldEFz
Q29uc3RhbnRVbmlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHJldHVybiBhbGxDb25zdGFudDsKK30KKworLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHRl
c3QgZm9yIHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgcGFyYW1ldGVycyBwYXNzZWQgdG8gdmFyaW91
cyBjb25zdHJ1Y3RvciBmdW5jdGlvbnMKKy8vIGFuZCBhbHNvIGNvbnZlcnQgdGhlbSB0byB0aGUg
cmlnaHQgZGF0YXR5cGUgaWYgaXQgaXMgYWxsb3dlZCBhbmQgcmVxdWlyZWQuIAorLy8KKy8vIFJl
dHVybnMgMCBmb3IgYW4gZXJyb3Igb3IgdGhlIGNvbnN0cnVjdGVkIG5vZGUgKGFnZ3JlZ2F0ZSBv
ciB0eXBlZCkgZm9yIG5vIGVycm9yLgorLy8KK1RJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6
YWRkQ29uc3RydWN0b3IoVEludGVybU5vZGUqIG5vZGUsIGNvbnN0IFRUeXBlKiB0eXBlLCBUT3Bl
cmF0b3Igb3AsIFRGdW5jdGlvbiogZm5DYWxsLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQorewor
ICAgIGlmIChub2RlID09IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgVEludGVybUFnZ3Jl
Z2F0ZSogYWdnck5vZGUgPSBub2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAgIAorICAgIFRGaWVs
ZExpc3Q6OmNvbnN0X2l0ZXJhdG9yIG1lbWJlckZpZWxkczsKKyAgICBpZiAob3AgPT0gRU9wQ29u
c3RydWN0U3RydWN0KQorICAgICAgICBtZW1iZXJGaWVsZHMgPSB0eXBlLT5nZXRTdHJ1Y3QoKS0+
ZmllbGRzKCkuYmVnaW4oKTsKKyAgICAKKyAgICBUVHlwZSBlbGVtZW50VHlwZSA9ICp0eXBlOwor
ICAgIGlmICh0eXBlLT5pc0FycmF5KCkpCisgICAgICAgIGVsZW1lbnRUeXBlLmNsZWFyQXJyYXlu
ZXNzKCk7CisKKyAgICBib29sIHNpbmdsZUFyZzsKKyAgICBpZiAoYWdnck5vZGUpIHsKKyAgICAg
ICAgaWYgKGFnZ3JOb2RlLT5nZXRPcCgpICE9IEVPcE51bGwgfHwgYWdnck5vZGUtPmdldFNlcXVl
bmNlKCkuc2l6ZSgpID09IDEpCisgICAgICAgICAgICBzaW5nbGVBcmcgPSB0cnVlOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBzaW5nbGVBcmcgPSBmYWxzZTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgc2luZ2xlQXJnID0gdHJ1ZTsKKworICAgIFRJbnRlcm1UeXBlZCAqbmV3Tm9kZTsKKyAgICBp
ZiAoc2luZ2xlQXJnKSB7CisgICAgICAgIC8vIElmIHN0cnVjdHVyZSBjb25zdHJ1Y3RvciBvciBh
cnJheSBjb25zdHJ1Y3RvciBpcyBiZWluZyBjYWxsZWQgCisgICAgICAgIC8vIGZvciBvbmx5IG9u
ZSBwYXJhbWV0ZXIgaW5zaWRlIHRoZSBzdHJ1Y3R1cmUsIHdlIG5lZWQgdG8gY2FsbCBjb25zdHJ1
Y3RTdHJ1Y3QgZnVuY3Rpb24gb25jZS4KKyAgICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkKKyAg
ICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RTdHJ1Y3Qobm9kZSwgJmVsZW1lbnRUeXBlLCAx
LCBub2RlLT5nZXRMaW5lKCksIGZhbHNlKTsKKyAgICAgICAgZWxzZSBpZiAob3AgPT0gRU9wQ29u
c3RydWN0U3RydWN0KQorICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdFN0cnVjdChub2Rl
LCAoKm1lbWJlckZpZWxkcyktPnR5cGUoKSwgMSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxzZSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RCdWlsdEluKHR5cGUs
IG9wLCBub2RlLCBub2RlLT5nZXRMaW5lKCksIGZhbHNlKTsKKworICAgICAgICBpZiAobmV3Tm9k
ZSAmJiBuZXdOb2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpKSB7CisgICAgICAgICAgICBUSW50ZXJtVHlw
ZWQqIGNvbnN0Q29uc3RydWN0b3IgPSBmb2xkQ29uc3RDb25zdHJ1Y3RvcihuZXdOb2RlLT5nZXRB
c0FnZ3JlZ2F0ZSgpLCAqdHlwZSk7CisgICAgICAgICAgICBpZiAoY29uc3RDb25zdHJ1Y3RvcikK
KyAgICAgICAgICAgICAgICByZXR1cm4gY29uc3RDb25zdHJ1Y3RvcjsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBuZXdOb2RlOworICAgIH0KKyAgICAKKyAgICAvLworICAgIC8vIEhhbmRs
ZSBsaXN0IG9mIGFyZ3VtZW50cy4KKyAgICAvLworICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVu
Y2VWZWN0b3IgPSBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKSA7ICAgIC8vIFN0b3JlcyB0aGUgaW5m
b3JtYXRpb24gYWJvdXQgdGhlIHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0b3IKKyAgICAvLyBp
ZiB0aGUgc3RydWN0dXJlIGNvbnN0cnVjdG9yIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgcGFyYW1l
dGVyLCB0aGVuIGNvbnN0cnVjdAorICAgIC8vIGVhY2ggcGFyYW1ldGVyCisgICAgCisgICAgaW50
IHBhcmFtQ291bnQgPSAwOyAgLy8ga2VlcHMgYSB0cmFjayBvZiB0aGUgY29uc3RydWN0b3IgcGFy
YW1ldGVyIG51bWJlciBiZWluZyBjaGVja2VkICAgIAorICAgIAorICAgIC8vIGZvciBlYWNoIHBh
cmFtZXRlciB0byB0aGUgY29uc3RydWN0b3IgY2FsbCwgY2hlY2sgdG8gc2VlIGlmIHRoZSByaWdo
dCB0eXBlIGlzIHBhc3NlZCBvciBjb252ZXJ0IHRoZW0gCisgICAgLy8gdG8gdGhlIHJpZ2h0IHR5
cGUgaWYgcG9zc2libGUgKGFuZCBhbGxvd2VkKS4KKyAgICAvLyBmb3Igc3RydWN0dXJlIGNvbnN0
cnVjdG9ycywganVzdCBjaGVjayBpZiB0aGUgcmlnaHQgdHlwZSBpcyBwYXNzZWQsIG5vIGNvbnZl
cnNpb24gaXMgYWxsb3dlZC4KKyAgICAKKyAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0
b3IgcCA9IHNlcXVlbmNlVmVjdG9yLmJlZ2luKCk7IAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwICE9IHNlcXVlbmNlVmVjdG9yLmVuZCgpOyBwKyssIHBhcmFtQ291bnQrKykg
eworICAgICAgICBpZiAodHlwZS0+aXNBcnJheSgpKQorICAgICAgICAgICAgbmV3Tm9kZSA9IGNv
bnN0cnVjdFN0cnVjdCgqcCwgJmVsZW1lbnRUeXBlLCBwYXJhbUNvdW50KzEsIG5vZGUtPmdldExp
bmUoKSwgdHJ1ZSk7CisgICAgICAgIGVsc2UgaWYgKG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCkK
KyAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RTdHJ1Y3QoKnAsIG1lbWJlckZpZWxkc1tw
YXJhbUNvdW50XS0+dHlwZSgpLCBwYXJhbUNvdW50KzEsIG5vZGUtPmdldExpbmUoKSwgdHJ1ZSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RCdWlsdEluKHR5
cGUsIG9wLCAqcCwgbm9kZS0+Z2V0TGluZSgpLCB0cnVlKTsKKyAgICAgICAgCisgICAgICAgIGlm
IChuZXdOb2RlKSB7CisgICAgICAgICAgICAqcCA9IG5ld05vZGU7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBUSW50ZXJtVHlwZWQqIGNvbnN0cnVjdG9yID0gaW50ZXJtZWRpYXRlLnNldEFnZ3Jl
Z2F0ZU9wZXJhdG9yKGFnZ3JOb2RlLCBvcCwgbGluZSk7CisgICAgVEludGVybVR5cGVkKiBjb25z
dENvbnN0cnVjdG9yID0gZm9sZENvbnN0Q29uc3RydWN0b3IoY29uc3RydWN0b3ItPmdldEFzQWdn
cmVnYXRlKCksICp0eXBlKTsKKyAgICBpZiAoY29uc3RDb25zdHJ1Y3RvcikKKyAgICAgICAgcmV0
dXJuIGNvbnN0Q29uc3RydWN0b3I7CisKKyAgICByZXR1cm4gY29uc3RydWN0b3I7Cit9CisKK1RJ
bnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6Zm9sZENvbnN0Q29uc3RydWN0b3IoVEludGVybUFn
Z3JlZ2F0ZSogYWdnck5vZGUsIGNvbnN0IFRUeXBlJiB0eXBlKQoreworICAgIGJvb2wgY2FuQmVG
b2xkZWQgPSBhcmVBbGxDaGlsZENvbnN0KGFnZ3JOb2RlKTsKKyAgICBhZ2dyTm9kZS0+c2V0VHlw
ZSh0eXBlKTsKKyAgICBpZiAoY2FuQmVGb2xkZWQpIHsKKyAgICAgICAgYm9vbCByZXR1cm5WYWwg
PSBmYWxzZTsKKyAgICAgICAgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSA9IG5ldyBDb25zdGFu
dFVuaW9uW3R5cGUuZ2V0T2JqZWN0U2l6ZSgpXTsKKyAgICAgICAgaWYgKGFnZ3JOb2RlLT5nZXRT
ZXF1ZW5jZSgpLnNpemUoKSA9PSAxKSAgeworICAgICAgICAgICAgcmV0dXJuVmFsID0gaW50ZXJt
ZWRpYXRlLnBhcnNlQ29uc3RUcmVlKGFnZ3JOb2RlLT5nZXRMaW5lKCksIGFnZ3JOb2RlLCB1bmlv
bkFycmF5LCBhZ2dyTm9kZS0+Z2V0T3AoKSwgc3ltYm9sVGFibGUsICB0eXBlLCB0cnVlKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVyblZhbCA9IGludGVybWVk
aWF0ZS5wYXJzZUNvbnN0VHJlZShhZ2dyTm9kZS0+Z2V0TGluZSgpLCBhZ2dyTm9kZSwgdW5pb25B
cnJheSwgYWdnck5vZGUtPmdldE9wKCksIHN5bWJvbFRhYmxlLCAgdHlwZSk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHJldHVyblZhbCkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAg
IHJldHVybiBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCB0eXBlLCBh
Z2dyTm9kZS0+Z2V0TGluZSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworLy8gRnVu
Y3Rpb24gZm9yIGNvbnN0cnVjdG9yIGltcGxlbWVudGF0aW9uLiBDYWxscyBhZGRVbmFyeU1hdGgg
d2l0aCBhcHByb3ByaWF0ZSBFT3AgdmFsdWUKKy8vIGZvciB0aGUgcGFyYW1ldGVyIHRvIHRoZSBj
b25zdHJ1Y3RvciAocGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24pLiBFc3NlbnRpYWxseSwgaXQgY29u
dmVydHMKKy8vIHRoZSBwYXJhbWV0ZXIgdHlwZXMgY29ycmVjdGx5LiBJZiBhIGNvbnN0cnVjdG9y
IGV4cGVjdHMgYW4gaW50IChsaWtlIGl2ZWMyKSBhbmQgaXMgcGFzc2VkIGEgCisvLyBmbG9hdCwg
dGhlbiBmbG9hdCBpcyBjb252ZXJ0ZWQgdG8gaW50LgorLy8KKy8vIFJldHVybnMgMCBmb3IgYW4g
ZXJyb3Igb3IgdGhlIGNvbnN0cnVjdGVkIG5vZGUuCisvLworVEludGVybVR5cGVkKiBUUGFyc2VD
b250ZXh0Ojpjb25zdHJ1Y3RCdWlsdEluKGNvbnN0IFRUeXBlKiB0eXBlLCBUT3BlcmF0b3Igb3As
IFRJbnRlcm1Ob2RlKiBub2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lLCBib29sIHN1YnNldCkK
K3sKKyAgICBUSW50ZXJtVHlwZWQqIG5ld05vZGU7CisgICAgVE9wZXJhdG9yIGJhc2ljT3A7CisK
KyAgICAvLworICAgIC8vIEZpcnN0LCBjb252ZXJ0IHR5cGVzIGFzIG5lZWRlZC4KKyAgICAvLwor
ICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzI6CisgICAgY2FzZSBF
T3BDb25zdHJ1Y3RWZWMzOgorICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjNDoKKyAgICBjYXNlIEVP
cENvbnN0cnVjdE1hdDI6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQzOgorICAgIGNhc2UgRU9w
Q29uc3RydWN0TWF0NDoKKyAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OgorICAgICAgICBiYXNp
Y09wID0gRU9wQ29uc3RydWN0RmxvYXQ7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBFT3BD
b25zdHJ1Y3RJVmVjMjoKKyAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMzOgorICAgIGNhc2UgRU9w
Q29uc3RydWN0SVZlYzQ6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6CisgICAgICAgIGJhc2lj
T3AgPSBFT3BDb25zdHJ1Y3RJbnQ7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBFT3BDb25z
dHJ1Y3RCVmVjMjoKKyAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMzOgorICAgIGNhc2UgRU9wQ29u
c3RydWN0QlZlYzQ6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29sOgorICAgICAgICBiYXNpY09w
ID0gRU9wQ29uc3RydWN0Qm9vbDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAg
ICAgICBlcnJvcihsaW5lLCAidW5zdXBwb3J0ZWQgY29uc3RydWN0aW9uIiwgIiIpOworICAgICAg
ICByZWNvdmVyKCk7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIG5ld05vZGUgPSBp
bnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKGJhc2ljT3AsIG5vZGUsIG5vZGUtPmdldExpbmUoKSwg
c3ltYm9sVGFibGUpOworICAgIGlmIChuZXdOb2RlID09IDApIHsKKyAgICAgICAgZXJyb3IobGlu
ZSwgImNhbid0IGNvbnZlcnQiLCAiY29uc3RydWN0b3IiKTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorCisgICAgLy8KKyAgICAvLyBOb3csIGlmIHRoZXJlIHN0aWxsIGlzbid0IGFuIG9wZXJh
dGlvbiB0byBkbyB0aGUgY29uc3RydWN0aW9uLCBhbmQgd2UgbmVlZCBvbmUsIGFkZCBvbmUuCisg
ICAgLy8KKyAgICAKKyAgICAvLyBPdGhlcndpc2UsIHNraXAgb3V0IGVhcmx5LgorICAgIGlmIChz
dWJzZXQgfHwgKG5ld05vZGUgIT0gbm9kZSAmJiBuZXdOb2RlLT5nZXRUeXBlKCkgPT0gKnR5cGUp
KQorICAgICAgICByZXR1cm4gbmV3Tm9kZTsKKworICAgIC8vIHNldEFnZ3JlZ2F0ZU9wZXJhdG9y
IHdpbGwgaW5zZXJ0IGEgbmV3IG5vZGUgZm9yIHRoZSBjb25zdHJ1Y3RvciwgYXMgbmVlZGVkLgor
ICAgIHJldHVybiBpbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IobmV3Tm9kZSwgb3As
IGxpbmUpOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIHRlc3RzIGZvciB0aGUgdHlwZSBvZiB0aGUg
cGFyYW1ldGVycyB0byB0aGUgc3RydWN0dXJlcyBjb25zdHJ1Y3RvcnMuIFJhaXNlcworLy8gYW4g
ZXJyb3IgbWVzc2FnZSBpZiB0aGUgZXhwZWN0ZWQgdHlwZSBkb2VzIG5vdCBtYXRjaCB0aGUgcGFy
YW1ldGVyIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IuCisvLworLy8gUmV0dXJucyAwIGZvciBh
biBlcnJvciBvciB0aGUgaW5wdXQgbm9kZSBpdHNlbGYgaWYgdGhlIGV4cGVjdGVkIGFuZCB0aGUg
Z2l2ZW4gcGFyYW1ldGVyIHR5cGVzIG1hdGNoLgorLy8KK1RJbnRlcm1UeXBlZCogVFBhcnNlQ29u
dGV4dDo6Y29uc3RydWN0U3RydWN0KFRJbnRlcm1Ob2RlKiBub2RlLCBUVHlwZSogdHlwZSwgaW50
IHBhcmFtQ291bnQsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGJvb2wgc3Vic2V0KQoreworICAg
IGlmICgqdHlwZSA9PSBub2RlLT5nZXRBc1R5cGVkKCktPmdldFR5cGUoKSkgeworICAgICAgICBp
ZiAoc3Vic2V0KQorICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmdldEFzVHlwZWQoKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIGludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVy
YXRvcihub2RlLT5nZXRBc1R5cGVkKCksIEVPcENvbnN0cnVjdFN0cnVjdCwgbGluZSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAg
ICAgICBleHRyYUluZm9TdHJlYW0gPDwgImNhbm5vdCBjb252ZXJ0IHBhcmFtZXRlciAiIDw8IHBh
cmFtQ291bnQgCisgICAgICAgICAgICAgICAgICAgICAgICA8PCAiIGZyb20gJyIgPDwgbm9kZS0+
Z2V0QXNUeXBlZCgpLT5nZXRUeXBlKCkuZ2V0QmFzaWNTdHJpbmcoKQorICAgICAgICAgICAgICAg
ICAgICAgICAgPDwgIicgdG8gJyIgPDwgdHlwZS0+Z2V0QmFzaWNTdHJpbmcoKSA8PCAiJyI7Cisg
ICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAg
ICAgICAgZXJyb3IobGluZSwgIiIsICJjb25zdHJ1Y3RvciIsIGV4dHJhSW5mby5jX3N0cigpKTsK
KyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCisvLworLy8g
VGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0cmVlIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgdmVj
dG9yIGZpZWxkKHMpIGJlaW5nIGFjY2Vzc2VkIGZyb20gY29udGFudCB2ZWN0b3IuCisvLyBJZiBv
bmx5IG9uZSBjb21wb25lbnQgb2YgdmVjdG9yIGlzIGFjY2Vzc2VkICh2Lnggb3IgdlswXSB3aGVy
ZSB2IGlzIGEgY29udGFudCB2ZWN0b3IpLCB0aGVuIGEgY29udGFudCBub2RlIGlzCisvLyByZXR1
cm5lZCwgZWxzZSBhbiBhZ2dyZWdhdGUgbm9kZSBpcyByZXR1cm5lZCAoZm9yIHYueHkpLiBUaGUg
aW5wdXQgdG8gdGhpcyBmdW5jdGlvbiBjb3VsZCBlaXRoZXIgYmUgdGhlIHN5bWJvbAorLy8gbm9k
ZSBvciBpdCBjb3VsZCBiZSB0aGUgaW50ZXJtZWRpYXRlIHRyZWUgcmVwcmVzZW50YXRpb24gb2Yg
YWNjZXNzaW5nIGZpZWxkcyBpbiBhIGNvbnN0YW50IHN0cnVjdHVyZSBvciBjb2x1bW4gb2YgCisv
LyBhIGNvbnN0YW50IG1hdHJpeC4KKy8vCitUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFk
ZENvbnN0VmVjdG9yTm9kZShUVmVjdG9yRmllbGRzJiBmaWVsZHMsIFRJbnRlcm1UeXBlZCogbm9k
ZSwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKK3sKKyAgICBUSW50ZXJtVHlwZWQqIHR5cGVkTm9k
ZTsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0YW50Tm9kZSA9IG5vZGUtPmdl
dEFzQ29uc3RhbnRVbmlvbigpOworCisgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheTsKKyAg
ICBpZiAodGVtcENvbnN0YW50Tm9kZSkgeworICAgICAgICB1bmlvbkFycmF5ID0gdGVtcENvbnN0
YW50Tm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKworICAgICAgICBpZiAoIXVuaW9uQXJy
YXkpIHsKKyAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICB9CisgICAgfSBlbHNlIHsg
Ly8gVGhlIG5vZGUgaGFzIHRvIGJlIGVpdGhlciBhIHN5bWJvbCBub2RlIG9yIGFuIGFnZ3JlZ2F0
ZSBub2RlIG9yIGEgdGVtcENvbnN0YW50IG5vZGUsIGVsc2UsIGl0cyBhbiBlcnJvcgorICAgICAg
ICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSB2ZWN0b3IiLCAiRXJyb3IiKTsK
KyAgICAgICAgcmVjb3ZlcigpOworCisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIENv
bnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltmaWVsZHMubnVtXTsK
KworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgaSsrKSB7CisgICAgICAgIGlm
IChmaWVsZHMub2Zmc2V0c1tpXSA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkg
eworICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAg
ICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJ2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIG91dCBvZiBy
YW5nZSAnIiA8PCBmaWVsZHMub2Zmc2V0c1tpXSA8PCAiJyI7CisgICAgICAgICAgICBzdGQ6OnN0
cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgICAgICBlcnJv
cihsaW5lLCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7CisgICAgICAgICAgICByZWNvdmVy
KCk7CisgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDA7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGNvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ZpZWxkcy5vZmZzZXRzW2ld
XTsKKworICAgIH0gCisgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5p
b24oY29uc3RBcnJheSwgbm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsKKyAgICByZXR1cm4gdHlwZWRO
b2RlOworfQorCisvLworLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjb2x1bW4gYmVpbmcg
YWNjZXNzZWQgZnJvbSBhIGNvbnN0YW50IG1hdHJpeC4gVGhlIHZhbHVlcyBhcmUgcmV0cmlldmVk
IGZyb20KKy8vIHRoZSBzeW1ib2wgdGFibGUgYW5kIHBhcnNlLXRyZWUgaXMgYnVpbHQgZm9yIGEg
dmVjdG9yIChlYWNoIGNvbHVtbiBvZiBhIG1hdHJpeCBpcyBhIHZlY3RvcikuIFRoZSBpbnB1dCAK
Ky8vIHRvIHRoZSBmdW5jdGlvbiBjb3VsZCBlaXRoZXIgYmUgYSBzeW1ib2wgbm9kZSAobVswXSB3
aGVyZSBtIGlzIGEgY29uc3RhbnQgbWF0cml4KXRoYXQgcmVwcmVzZW50cyBhIAorLy8gY29uc3Rh
bnQgbWF0cml4IG9yIGl0IGNvdWxkIGJlIHRoZSB0cmVlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBj
b25zdGFudCBtYXRyaXggKHMubTFbMF0gd2hlcmUgcyBpcyBhIGNvbnN0YW50IHN0cnVjdHVyZSkK
Ky8vCitUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0TWF0cml4Tm9kZShpbnQg
aW5kZXgsIFRJbnRlcm1UeXBlZCogbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKK3sKKyAg
ICBUSW50ZXJtVHlwZWQqIHR5cGVkTm9kZTsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogdGVt
cENvbnN0YW50Tm9kZSA9IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOworCisgICAgaWYgKGlu
ZGV4ID49IG5vZGUtPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKSB7CisgICAgICAgIHN0ZDo6
c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8
ICJtYXRyaXggZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnIiA8PCBpbmRleCA8PCAiJyI7
CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsK
KyAgICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwgZXh0cmFJbmZvLmNfc3RyKCkpOworICAgICAg
ICByZWNvdmVyKCk7CisgICAgICAgIGluZGV4ID0gMDsKKyAgICB9CisKKyAgICBpZiAodGVtcENv
bnN0YW50Tm9kZSkgeworICAgICAgICAgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSA9IHRlbXBD
b25zdGFudE5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAgICAgICBpbnQgc2l6ZSA9
IHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICAg
dHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24oJnVuaW9uQXJyYXlbc2l6
ZSppbmRleF0sIHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKSwgbGluZSk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgbWF0cml4Iiwg
IkVycm9yIik7CisgICAgICAgIHJlY292ZXIoKTsKKworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisKKyAgICByZXR1cm4gdHlwZWROb2RlOworfQorCisKKy8vCisvLyBUaGlzIGZ1bmN0aW9uIHJl
dHVybnMgYW4gZWxlbWVudCBvZiBhbiBhcnJheSBhY2Nlc3NlZCBmcm9tIGEgY29uc3RhbnQgYXJy
YXkuIFRoZSB2YWx1ZXMgYXJlIHJldHJpZXZlZCBmcm9tCisvLyB0aGUgc3ltYm9sIHRhYmxlIGFu
ZCBwYXJzZS10cmVlIGlzIGJ1aWx0IGZvciB0aGUgdHlwZSBvZiB0aGUgZWxlbWVudC4gVGhlIGlu
cHV0IAorLy8gdG8gdGhlIGZ1bmN0aW9uIGNvdWxkIGVpdGhlciBiZSBhIHN5bWJvbCBub2RlIChh
WzBdIHdoZXJlIGEgaXMgYSBjb25zdGFudCBhcnJheSl0aGF0IHJlcHJlc2VudHMgYSAKKy8vIGNv
bnN0YW50IGFycmF5IG9yIGl0IGNvdWxkIGJlIHRoZSB0cmVlIHJlcHJlc2VudGF0aW9uIG9mIHRo
ZSBjb25zdGFudCBhcnJheSAocy5hMVswXSB3aGVyZSBzIGlzIGEgY29uc3RhbnQgc3RydWN0dXJl
KQorLy8KK1RJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RBcnJheU5vZGUoaW50
IGluZGV4LCBUSW50ZXJtVHlwZWQqIG5vZGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCit7Cisg
ICAgVEludGVybVR5cGVkKiB0eXBlZE5vZGU7CisgICAgVEludGVybUNvbnN0YW50VW5pb24qIHRl
bXBDb25zdGFudE5vZGUgPSBub2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKyAgICBUVHlwZSBh
cnJheUVsZW1lbnRUeXBlID0gbm9kZS0+Z2V0VHlwZSgpOworICAgIGFycmF5RWxlbWVudFR5cGUu
Y2xlYXJBcnJheW5lc3MoKTsKKworICAgIGlmIChpbmRleCA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0
QXJyYXlTaXplKCkpIHsKKyAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFt
OworICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImFycmF5IGZpZWxkIHNlbGVjdGlvbiBvdXQg
b2YgcmFuZ2UgJyIgPDwgaW5kZXggPDwgIiciOworICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUlu
Zm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIs
IGV4dHJhSW5mby5jX3N0cigpKTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgICAgICBpbmRleCA9
IDA7CisgICAgfQorCisgICAgaWYgKHRlbXBDb25zdGFudE5vZGUpIHsKKyAgICAgICAgIHNpemVf
dCBhcnJheUVsZW1lbnRTaXplID0gYXJyYXlFbGVtZW50VHlwZS5nZXRPYmplY3RTaXplKCk7Cisg
ICAgICAgICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0
VW5pb25BcnJheVBvaW50ZXIoKTsKKyAgICAgICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5h
ZGRDb25zdGFudFVuaW9uKCZ1bmlvbkFycmF5W2FycmF5RWxlbWVudFNpemUgKiBpbmRleF0sIHRl
bXBDb25zdGFudE5vZGUtPmdldFR5cGUoKSwgbGluZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgYXJyYXkiLCAiRXJyb3IiKTsKKyAg
ICAgICAgcmVjb3ZlcigpOworCisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVy
biB0eXBlZE5vZGU7Cit9CisKKworLy8KKy8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFs
dWUgb2YgYSBwYXJ0aWN1bGFyIGZpZWxkIGluc2lkZSBhIGNvbnN0YW50IHN0cnVjdHVyZSBmcm9t
IHRoZSBzeW1ib2wgdGFibGUuIAorLy8gSWYgdGhlcmUgaXMgYW4gZW1iZWRkZWQvbmVzdGVkIHN0
cnVjdCwgaXQgYXBwcm9wcmlhdGVseSBjYWxscyBhZGRDb25zdFN0cnVjdE5lc3RlZCBvciBhZGRD
b25zdFN0cnVjdEZyb21BZ2dyCisvLyBmdW5jdGlvbiBhbmQgcmV0dXJucyB0aGUgcGFyc2UtdHJl
ZSB3aXRoIHRoZSB2YWx1ZXMgb2YgdGhlIGVtYmVkZGVkL25lc3RlZCBzdHJ1Y3QuCisvLworVElu
dGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdFN0cnVjdChUU3RyaW5nJiBpZGVudGlm
aWVyLCBUSW50ZXJtVHlwZWQqIG5vZGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCit7CisgICAg
Y29uc3QgVEZpZWxkTGlzdCYgZmllbGRzID0gbm9kZS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpLT5m
aWVsZHMoKTsKKworICAgIHNpemVfdCBpbnN0YW5jZVNpemUgPSAwOworICAgIGZvciAoc2l6ZV90
IGluZGV4ID0gMDsgaW5kZXggPCBmaWVsZHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgIGlm
IChmaWVsZHNbaW5kZXhdLT5uYW1lKCkgPT0gaWRlbnRpZmllcikgeworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbnN0YW5jZVNpemUgKz0gZmllbGRz
W2luZGV4XS0+dHlwZSgpLT5nZXRPYmplY3RTaXplKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBUSW50ZXJtVHlwZWQqIHR5cGVkTm9kZSA9IDA7CisgICAgVEludGVybUNvbnN0YW50VW5pb24q
IHRlbXBDb25zdGFudE5vZGUgPSBub2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKyAgICBpZiAo
dGVtcENvbnN0YW50Tm9kZSkgeworICAgICAgICAgQ29uc3RhbnRVbmlvbiogY29uc3RBcnJheSA9
IHRlbXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisKKyAgICAgICAgIHR5
cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXkraW5zdGFu
Y2VTaXplLCB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOyAvLyB0eXBlIHdpbGwg
YmUgY2hhbmdlZCBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbgorICAgIH0gZWxzZSB7CisgICAgICAg
IGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIHN0cnVjdHVyZSIsICJFcnJvciIp
OworICAgICAgICByZWNvdmVyKCk7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
cmV0dXJuIHR5cGVkTm9kZTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0OjplbnRlclN0cnVjdERl
Y2xhcmF0aW9uKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZp
ZXIpCit7CisgICAgKytzdHJ1Y3ROZXN0aW5nTGV2ZWw7CisKKyAgICAvLyBFbWJlZGRlZCBzdHJ1
Y3R1cmUgZGVmaW5pdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgcGVyIEdMU0wgRVMgc3BlYy4KKyAg
ICAvLyBUaGV5IGFyZW4ndCBhbGxvd2VkIGluIEdMU0wgZWl0aGVyLCBidXQgd2UgbmVlZCB0byBk
ZXRlY3QgdGhpcyBoZXJlCisgICAgLy8gc28gd2UgZG9uJ3QgcmVseSBvbiB0aGUgR0xTTCBjb21w
aWxlciB0byBjYXRjaCBpdC4KKyAgICBpZiAoc3RydWN0TmVzdGluZ0xldmVsID4gMSkgeworICAg
ICAgICBlcnJvcihsaW5lLCAiIiwgIkVtYmVkZGVkIHN0cnVjdCBkZWZpbml0aW9ucyBhcmUgbm90
IGFsbG93ZWQiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIFRQYXJzZUNvbnRleHQ6OmV4aXRTdHJ1Y3REZWNsYXJhdGlvbigpCit7
CisgICAgLS1zdHJ1Y3ROZXN0aW5nTGV2ZWw7Cit9CisKK25hbWVzcGFjZSB7CisKK2NvbnN0IGlu
dCBrV2ViR0xNYXhTdHJ1Y3ROZXN0aW5nID0gNDsKKworfSAgLy8gbmFtZXNwYWNlCisKK2Jvb2wg
VFBhcnNlQ29udGV4dDo6c3RydWN0TmVzdGluZ0Vycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYg
bGluZSwgY29uc3QgVEZpZWxkJiBmaWVsZCkKK3sKKyAgICBpZiAoIWlzV2ViR0xCYXNlZFNwZWMo
c2hhZGVyU3BlYykpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChm
aWVsZC50eXBlKCktPmdldEJhc2ljVHlwZSgpICE9IEVidFN0cnVjdCkgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gV2UncmUgYWxyZWFkeSBpbnNpZGUgYSBzdHJ1Y3R1
cmUgZGVmaW5pdGlvbiBhdCB0aGlzIHBvaW50LCBzbyBhZGQKKyAgICAvLyBvbmUgdG8gdGhlIGZp
ZWxkJ3Mgc3RydWN0IG5lc3RpbmcuCisgICAgaWYgKDEgKyBmaWVsZC50eXBlKCktPmdldERlZXBl
c3RTdHJ1Y3ROZXN0aW5nKCkgPiBrV2ViR0xNYXhTdHJ1Y3ROZXN0aW5nKSB7CisgICAgICAgIHN0
ZDo6c3RyaW5nc3RyZWFtIHJlYXNvblN0cmVhbTsKKyAgICAgICAgcmVhc29uU3RyZWFtIDw8ICJS
ZWZlcmVuY2Ugb2Ygc3RydWN0IHR5cGUgIgorICAgICAgICAgICAgICAgICAgICAgPDwgZmllbGQu
dHlwZSgpLT5nZXRTdHJ1Y3QoKS0+bmFtZSgpLmNfc3RyKCkKKyAgICAgICAgICAgICAgICAgICAg
IDw8ICIgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgbmVzdGluZyBsZXZlbCBvZiAiCisgICAgICAg
ICAgICAgICAgICAgICA8PCBrV2ViR0xNYXhTdHJ1Y3ROZXN0aW5nOworICAgICAgICBzdGQ6OnN0
cmluZyByZWFzb24gPSByZWFzb25TdHJlYW0uc3RyKCk7CisgICAgICAgIGVycm9yKGxpbmUsIHJl
YXNvbi5jX3N0cigpLCBmaWVsZC5uYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vCisvLyBQYXJzZSBhbiBh
cnJheSBpbmRleCBleHByZXNzaW9uCisvLworVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0Ojph
ZGRJbmRleEV4cHJlc3Npb24oVEludGVybVR5cGVkICpiYXNlRXhwcmVzc2lvbiwgY29uc3QgVFNv
dXJjZUxvYyYgbG9jYXRpb24sIFRJbnRlcm1UeXBlZCAqaW5kZXhFeHByZXNzaW9uKQoreworICAg
IFRJbnRlcm1UeXBlZCAqaW5kZXhlZEV4cHJlc3Npb24gPSBOVUxMOworCisgICAgaWYgKCFiYXNl
RXhwcmVzc2lvbi0+aXNBcnJheSgpICYmICFiYXNlRXhwcmVzc2lvbi0+aXNNYXRyaXgoKSAmJiAh
YmFzZUV4cHJlc3Npb24tPmlzVmVjdG9yKCkpCisgICAgeworICAgICAgICBpZiAoYmFzZUV4cHJl
c3Npb24tPmdldEFzU3ltYm9sTm9kZSgpKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihs
b2NhdGlvbiwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBvciB2
ZWN0b3IgIiwgYmFzZUV4cHJlc3Npb24tPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKS5j
X3N0cigpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IGVycm9yKGxvY2F0aW9uLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRy
aXgsIG9yIHZlY3RvciAiLCAiZXhwcmVzc2lvbiIpOworICAgICAgICB9CisgICAgICAgIHJlY292
ZXIoKTsKKyAgICB9CisKKyAgICBpZiAoaW5kZXhFeHByZXNzaW9uLT5nZXRRdWFsaWZpZXIoKSA9
PSBFdnFDb25zdCkKKyAgICB7CisgICAgICAgIGludCBpbmRleCA9IGluZGV4RXhwcmVzc2lvbi0+
Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldElDb25zdCgwKTsKKyAgICAgICAgaWYgKGluZGV4IDwg
MCkKKyAgICAgICAgeworICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gaW5mb1N0cmVhbTsK
KyAgICAgICAgICAgIGluZm9TdHJlYW0gPDwgaW5kZXg7CisgICAgICAgICAgICBzdGQ6OnN0cmlu
ZyBpbmZvID0gaW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGVycm9yKGxvY2F0aW9uLCAi
bmVnYXRpdmUgaW5kZXgiLCBpbmZvLmNfc3RyKCkpOworICAgICAgICAgICAgcmVjb3ZlcigpOwor
ICAgICAgICAgICAgaW5kZXggPSAwOworICAgICAgICB9CisgICAgICAgIGlmIChiYXNlRXhwcmVz
c2lvbi0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoYmFzZUV4cHJlc3Npb24tPmlzQXJyYXkoKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAvLyBjb25zdGFudCBmb2xkaW5nIGZvciBhcnJheXMKKyAgICAgICAg
ICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGFkZENvbnN0QXJyYXlOb2RlKGluZGV4LCBiYXNl
RXhwcmVzc2lvbiwgbG9jYXRpb24pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBp
ZiAoYmFzZUV4cHJlc3Npb24tPmlzVmVjdG9yKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgLy8gY29uc3RhbnQgZm9sZGluZyBmb3IgdmVjdG9ycworICAgICAgICAgICAgICAgIFRW
ZWN0b3JGaWVsZHMgZmllbGRzOworICAgICAgICAgICAgICAgIGZpZWxkcy5udW0gPSAxOworICAg
ICAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzWzBdID0gaW5kZXg7IC8vIG5lZWQgdG8gZG8gaXQg
dGhpcyB3YXkgYmVjYXVzZSB2Lnh5IHNlbmRzIGZpZWxkcyBpbnRlZ2VyIGFycmF5CisgICAgICAg
ICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBhZGRDb25zdFZlY3Rvck5vZGUoZmllbGRzLCBi
YXNlRXhwcmVzc2lvbiwgbG9jYXRpb24pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSBpZiAoYmFzZUV4cHJlc3Npb24tPmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgLy8gY29uc3RhbnQgZm9sZGluZyBmb3IgbWF0cmljZXMKKyAgICAgICAgICAgICAg
ICBpbmRleGVkRXhwcmVzc2lvbiA9IGFkZENvbnN0TWF0cml4Tm9kZShpbmRleCwgYmFzZUV4cHJl
c3Npb24sIGxvY2F0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNBcnJheSgpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBiYXNlRXhwcmVzc2lv
bi0+Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICAg
ICAgICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImFycmF5IGluZGV4IG91dCBvZiByYW5nZSAn
IiA8PCBpbmRleCA8PCAiJyI7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJh
SW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgICAgICAgICAgZXJyb3Io
bG9jYXRpb24sICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmVjb3ZlcigpOworICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGJhc2VFeHByZXNzaW9u
LT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkgLSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBlbHNlIGlmIChiYXNlRXhwcmVzc2lvbi0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZx
RnJhZ0RhdGEgJiYgaW5kZXggPiAwICYmICFpc0V4dGVuc2lvbkVuYWJsZWQoIkdMX0VYVF9kcmF3
X2J1ZmZlcnMiKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGVycm9y
KGxvY2F0aW9uLCAiIiwgIlsiLCAiYXJyYXkgaW5kZXhlcyBmb3IgZ2xfRnJhZ0RhdGEgbXVzdCBi
ZSB6ZXJvIHdoZW4gR0xfRVhUX2RyYXdfYnVmZmVycyBpcyBkaXNhYmxlZCIpOworICAgICAgICAg
ICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gMDsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICgoYmFz
ZUV4cHJlc3Npb24tPmlzVmVjdG9yKCkgfHwgYmFzZUV4cHJlc3Npb24tPmlzTWF0cml4KCkpICYm
IGJhc2VFeHByZXNzaW9uLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSA8PSBpbmRleCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9T
dHJlYW07CisgICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJmaWVsZCBzZWxlY3Rp
b24gb3V0IG9mIHJhbmdlICciIDw8IGluZGV4IDw8ICInIjsKKyAgICAgICAgICAgICAgICBzdGQ6
OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgICAgICAg
ICAgZXJyb3IobG9jYXRpb24sICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsKKyAgICAgICAg
ICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgaW5kZXggPSBiYXNlRXhwcmVzc2lv
bi0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkgLSAxOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpbmRleEV4cHJlc3Npb24tPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFy
cmF5UG9pbnRlcigpLT5zZXRJQ29uc3QoaW5kZXgpOworICAgICAgICAgICAgaW5kZXhlZEV4cHJl
c3Npb24gPSBpbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsIGJhc2VFeHByZXNz
aW9uLCBpbmRleEV4cHJlc3Npb24sIGxvY2F0aW9uKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGludGVybWVkaWF0ZS5hZGRJ
bmRleChFT3BJbmRleEluZGlyZWN0LCBiYXNlRXhwcmVzc2lvbiwgaW5kZXhFeHByZXNzaW9uLCBs
b2NhdGlvbik7CisgICAgfQorCisgICAgaWYgKGluZGV4ZWRFeHByZXNzaW9uID09IDApCisgICAg
eworICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25b
MV07CisgICAgICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgwLjBmKTsKKyAgICAgICAgaW5kZXhl
ZEV4cHJlc3Npb24gPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBU
VHlwZShFYnRGbG9hdCwgRWJwSGlnaCwgRXZxQ29uc3QpLCBsb2NhdGlvbik7CisgICAgfQorICAg
IGVsc2UgaWYgKGJhc2VFeHByZXNzaW9uLT5pc0FycmF5KCkpCisgICAgeworICAgICAgICBjb25z
dCBUVHlwZSAmYmFzZVR5cGUgPSBiYXNlRXhwcmVzc2lvbi0+Z2V0VHlwZSgpOworICAgICAgICBp
ZiAoYmFzZVR5cGUuZ2V0U3RydWN0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRUeXBlIGNv
cHlPZlR5cGUoYmFzZVR5cGUuZ2V0U3RydWN0KCkpOworICAgICAgICAgICAgaW5kZXhlZEV4cHJl
c3Npb24tPnNldFR5cGUoY29weU9mVHlwZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0VHlwZShUVHlwZShiYXNl
RXhwcmVzc2lvbi0+Z2V0QmFzaWNUeXBlKCksIGJhc2VFeHByZXNzaW9uLT5nZXRQcmVjaXNpb24o
KSwgRXZxVGVtcG9yYXJ5LCBiYXNlRXhwcmVzc2lvbi0+Z2V0Tm9taW5hbFNpemUoKSwgYmFzZUV4
cHJlc3Npb24tPmlzTWF0cml4KCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChiYXNlRXhw
cmVzc2lvbi0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQorICAgICAgICB7
CisgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVh
bGlmaWVyKEV2cUNvbnN0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChiYXNlRXhw
cmVzc2lvbi0+aXNNYXRyaXgoKSkKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVy
ID0gYmFzZUV4cHJlc3Npb24tPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCA/
IEV2cUNvbnN0IDogRXZxVGVtcG9yYXJ5OworICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0
VHlwZShUVHlwZShiYXNlRXhwcmVzc2lvbi0+Z2V0QmFzaWNUeXBlKCksIGJhc2VFeHByZXNzaW9u
LT5nZXRQcmVjaXNpb24oKSwgcXVhbGlmaWVyLCBiYXNlRXhwcmVzc2lvbi0+Z2V0Tm9taW5hbFNp
emUoKSkpOworICAgIH0KKyAgICBlbHNlIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNWZWN0b3IoKSkK
KyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gYmFzZUV4cHJlc3Npb24tPmdl
dFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCA/IEV2cUNvbnN0IDogRXZxVGVtcG9y
YXJ5OworICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0VHlwZShUVHlwZShiYXNlRXhwcmVz
c2lvbi0+Z2V0QmFzaWNUeXBlKCksIGJhc2VFeHByZXNzaW9uLT5nZXRQcmVjaXNpb24oKSwgcXVh
bGlmaWVyKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGluZGV4ZWRFeHByZXNz
aW9uLT5zZXRUeXBlKGJhc2VFeHByZXNzaW9uLT5nZXRUeXBlKCkpOworICAgIH0KKworICAgIHJl
dHVybiBpbmRleGVkRXhwcmVzc2lvbjsKK30KKworLy8KKy8vIFBhcnNlIGFuIGFycmF5IG9mIHN0
cmluZ3MgdXNpbmcgeXlwYXJzZS4KKy8vCisvLyBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MuCisvLwor
aW50IFBhUGFyc2VTdHJpbmdzKHNpemVfdCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5n
W10sIGNvbnN0IGludCBsZW5ndGhbXSwKKyAgICAgICAgICAgICAgICAgICBUUGFyc2VDb250ZXh0
KiBjb250ZXh0KSB7CisgICAgaWYgKChjb3VudCA9PSAwKSB8fCAoc3RyaW5nID09IE5VTEwpKQor
ICAgICAgICByZXR1cm4gMTsKKworICAgIGlmIChnbHNsYW5nX2luaXRpYWxpemUoY29udGV4dCkp
CisgICAgICAgIHJldHVybiAxOworCisgICAgaW50IGVycm9yID0gZ2xzbGFuZ19zY2FuKGNvdW50
LCBzdHJpbmcsIGxlbmd0aCwgY29udGV4dCk7CisgICAgaWYgKCFlcnJvcikKKyAgICAgICAgZXJy
b3IgPSBnbHNsYW5nX3BhcnNlKGNvbnRleHQpOworCisgICAgZ2xzbGFuZ19maW5hbGl6ZShjb250
ZXh0KTsKKworICAgIHJldHVybiAoZXJyb3IgPT0gMCkgJiYgKGNvbnRleHQtPm51bUVycm9ycygp
ID09IDApID8gMCA6IDE7Cit9CisKKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmIzMjRlNTc1ZDM1YjM5OWQ1ODlmNDdjZmVjZDYzNGE1YTQ5N2U2YmIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9QYXJzZUNvbnRleHQuaApAQCAtMCwwICsxLDEzNCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKyNp
Zm5kZWYgX1BBUlNFUl9IRUxQRVJfSU5DTFVERURfCisjZGVmaW5lIF9QQVJTRVJfSEVMUEVSX0lO
Q0xVREVEXworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFuZGxlci5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvbG9jYWxpbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJj
b21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9TaEhhbmRsZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3lt
Ym9sVGFibGUuaCIKKworc3RydWN0IFRNYXRyaXhGaWVsZHMgeworICAgIGJvb2wgd2hvbGVSb3c7
CisgICAgYm9vbCB3aG9sZUNvbDsKKyAgICBpbnQgcm93OworICAgIGludCBjb2w7Cit9OworCisv
LworLy8gVGhlIGZvbGxvd2luZyBhcmUgZXh0cmEgdmFyaWFibGVzIG5lZWRlZCBkdXJpbmcgcGFy
c2luZywgZ3JvdXBlZCB0b2dldGhlciBzbworLy8gdGhleSBjYW4gYmUgcGFzc2VkIHRvIHRoZSBw
YXJzZXIgd2l0aG91dCBuZWVkaW5nIGEgZ2xvYmFsLgorLy8KK3N0cnVjdCBUUGFyc2VDb250ZXh0
IHsKKyAgICBUUGFyc2VDb250ZXh0KFRTeW1ib2xUYWJsZSYgc3ltdCwgVEV4dGVuc2lvbkJlaGF2
aW9yJiBleHQsIFRJbnRlcm1lZGlhdGUmIGludGVybSwgU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hh
ZGVyU3BlYyBzcGVjLCBpbnQgb3B0aW9ucywgYm9vbCBjaGVja3NQcmVjRXJyb3JzLCBjb25zdCBj
aGFyKiBzb3VyY2VQYXRoLCBUSW5mb1NpbmsmIGlzKSA6CisgICAgICAgICAgICBpbnRlcm1lZGlh
dGUoaW50ZXJtKSwKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlKHN5bXQpLAorICAgICAgICAgICAg
c2hhZGVyVHlwZSh0eXBlKSwKKyAgICAgICAgICAgIHNoYWRlclNwZWMoc3BlYyksCisgICAgICAg
ICAgICBjb21waWxlT3B0aW9ucyhvcHRpb25zKSwKKyAgICAgICAgICAgIHNvdXJjZVBhdGgoc291
cmNlUGF0aCksCisgICAgICAgICAgICB0cmVlUm9vdCgwKSwKKyAgICAgICAgICAgIGxvb3BOZXN0
aW5nTGV2ZWwoMCksCisgICAgICAgICAgICBzdHJ1Y3ROZXN0aW5nTGV2ZWwoMCksCisgICAgICAg
ICAgICBjdXJyZW50RnVuY3Rpb25UeXBlKE5VTEwpLAorICAgICAgICAgICAgZnVuY3Rpb25SZXR1
cm5zVmFsdWUoZmFsc2UpLAorICAgICAgICAgICAgY2hlY2tzUHJlY2lzaW9uRXJyb3JzKGNoZWNr
c1ByZWNFcnJvcnMpLAorICAgICAgICAgICAgZGlhZ25vc3RpY3MoaXMpLAorICAgICAgICAgICAg
ZGlyZWN0aXZlSGFuZGxlcihleHQsIGRpYWdub3N0aWNzKSwKKyAgICAgICAgICAgIHByZXByb2Nl
c3NvcigmZGlhZ25vc3RpY3MsICZkaXJlY3RpdmVIYW5kbGVyKSwKKyAgICAgICAgICAgIHNjYW5u
ZXIoTlVMTCkgeyAgfQorICAgIFRJbnRlcm1lZGlhdGUmIGludGVybWVkaWF0ZTsgLy8gdG8gaG9s
ZCBhbmQgYnVpbGQgYSBwYXJzZSB0cmVlCisgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZTsg
ICAvLyBzeW1ib2wgdGFibGUgdGhhdCBnb2VzIHdpdGggdGhlIGxhbmd1YWdlIGN1cnJlbnRseSBi
ZWluZyBwYXJzZWQKKyAgICBTaFNoYWRlclR5cGUgc2hhZGVyVHlwZTsgICAgICAgICAgICAgIC8v
IHZlcnRleCBvciBmcmFnbWVudCBsYW5ndWFnZSAoZnV0dXJlOiBwYWNrIG9yIHVucGFjaykKKyAg
ICBTaFNoYWRlclNwZWMgc2hhZGVyU3BlYzsgICAgICAgICAgICAgIC8vIFRoZSBsYW5ndWFnZSBz
cGVjaWZpY2F0aW9uIGNvbXBpbGVyIGNvbmZvcm1zIHRvIC0gR0xFUzIgb3IgV2ViR0wuCisgICAg
aW50IGNvbXBpbGVPcHRpb25zOworICAgIGNvbnN0IGNoYXIqIHNvdXJjZVBhdGg7ICAgICAgLy8g
UGF0aCBvZiBzb3VyY2UgZmlsZSBvciBOVUxMLgorICAgIFRJbnRlcm1Ob2RlKiB0cmVlUm9vdDsg
ICAgICAgLy8gcm9vdCBvZiBwYXJzZSB0cmVlIGJlaW5nIGNyZWF0ZWQKKyAgICBpbnQgbG9vcE5l
c3RpbmdMZXZlbDsgICAgICAgIC8vIDAgaWYgb3V0c2lkZSBhbGwgbG9vcHMKKyAgICBpbnQgc3Ry
dWN0TmVzdGluZ0xldmVsOyAgICAgIC8vIGluY3JlbWVudGVkIHdoaWxlIHBhcnNpbmcgYSBzdHJ1
Y3QgZGVjbGFyYXRpb24KKyAgICBjb25zdCBUVHlwZSogY3VycmVudEZ1bmN0aW9uVHlwZTsgIC8v
IHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCdzIGN1cnJlbnRseSBiZWluZyBw
YXJzZWQKKyAgICBib29sIGZ1bmN0aW9uUmV0dXJuc1ZhbHVlOyAgIC8vIHRydWUgaWYgYSBub24t
dm9pZCBmdW5jdGlvbiBoYXMgYSByZXR1cm4KKyAgICBib29sIGNoZWNrc1ByZWNpc2lvbkVycm9y
czsgIC8vIHRydWUgaWYgYW4gZXJyb3Igd2lsbCBiZSBnZW5lcmF0ZWQgd2hlbiBhIHZhcmlhYmxl
IGlzIGRlY2xhcmVkIHdpdGhvdXQgcHJlY2lzaW9uLCBleHBsaWNpdCBvciBpbXBsaWNpdC4KKyAg
ICBib29sIGZyYWdtZW50UHJlY2lzaW9uSGlnaDsgIC8vIHRydWUgaWYgaGlnaHAgcHJlY2lzaW9u
IGlzIHN1cHBvcnRlZCBpbiB0aGUgZnJhZ21lbnQgbGFuZ3VhZ2UuCisgICAgVFN0cmluZyBIYXNo
RXJyTXNnOworICAgIFREaWFnbm9zdGljcyBkaWFnbm9zdGljczsKKyAgICBURGlyZWN0aXZlSGFu
ZGxlciBkaXJlY3RpdmVIYW5kbGVyOworICAgIHBwOjpQcmVwcm9jZXNzb3IgcHJlcHJvY2Vzc29y
OworICAgIHZvaWQqIHNjYW5uZXI7CisKKyAgICBpbnQgbnVtRXJyb3JzKCkgY29uc3QgeyByZXR1
cm4gZGlhZ25vc3RpY3MubnVtRXJyb3JzKCk7IH0KKyAgICBUSW5mb1NpbmsmIGluZm9TaW5rKCkg
eyByZXR1cm4gZGlhZ25vc3RpY3MuaW5mb1NpbmsoKTsgfQorICAgIHZvaWQgZXJyb3IoY29uc3Qg
VFNvdXJjZUxvYyYgbG9jLCBjb25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuLAor
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXh0cmFJbmZvPSIiKTsKKyAgICB2b2lkIHdhcm5p
bmcoY29uc3QgVFNvdXJjZUxvYyYgbG9jLCBjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IGNoYXIq
IHRva2VuLAorICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm89IiIpOworICAg
IHZvaWQgdHJhY2UoY29uc3QgY2hhciogc3RyKTsKKyAgICB2b2lkIHJlY292ZXIoKTsKKworICAg
IGJvb2wgcGFyc2VWZWN0b3JGaWVsZHMoY29uc3QgVFN0cmluZyYsIGludCB2ZWNTaXplLCBUVmVj
dG9yRmllbGRzJiwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSk7CisgICAgYm9vbCBwYXJzZU1hdHJp
eEZpZWxkcyhjb25zdCBUU3RyaW5nJiwgaW50IG1hdFNpemUsIFRNYXRyaXhGaWVsZHMmLCBjb25z
dCBUU291cmNlTG9jJiBsaW5lKTsKKworICAgIGJvb2wgcmVzZXJ2ZWRFcnJvckNoZWNrKGNvbnN0
IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIpOworICAgIHZvaWQg
YXNzaWduRXJyb3IoY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJp
bmcgbGVmdCwgVFN0cmluZyByaWdodCk7CisgICAgdm9pZCB1bmFyeU9wRXJyb3IoY29uc3QgVFNv
dXJjZUxvYyYgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgb3BlcmFuZCk7CisgICAgdm9p
ZCBiaW5hcnlPcEVycm9yKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBU
U3RyaW5nIGxlZnQsIFRTdHJpbmcgcmlnaHQpOworICAgIGJvb2wgcHJlY2lzaW9uRXJyb3JDaGVj
ayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUHJlY2lzaW9uIHByZWNpc2lvbiwgVEJhc2ljVHlw
ZSB0eXBlKTsKKyAgICBib29sIGxWYWx1ZUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGlu
ZSwgY29uc3QgY2hhciogb3AsIFRJbnRlcm1UeXBlZCopOworICAgIGJvb2wgY29uc3RFcnJvckNo
ZWNrKFRJbnRlcm1UeXBlZCogbm9kZSk7CisgICAgYm9vbCBpbnRlZ2VyRXJyb3JDaGVjayhUSW50
ZXJtVHlwZWQqIG5vZGUsIGNvbnN0IGNoYXIqIHRva2VuKTsKKyAgICBib29sIGdsb2JhbEVycm9y
Q2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgYm9vbCBnbG9iYWwsIGNvbnN0IGNoYXIqIHRv
a2VuKTsKKyAgICBib29sIGNvbnN0cnVjdG9yRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBs
aW5lLCBUSW50ZXJtTm9kZSosIFRGdW5jdGlvbiYsIFRPcGVyYXRvciwgVFR5cGUqKTsKKyAgICBi
b29sIGFycmF5U2l6ZUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVEludGVybVR5
cGVkKiBleHByLCBpbnQmIHNpemUpOworICAgIGJvb2wgYXJyYXlRdWFsaWZpZXJFcnJvckNoZWNr
KGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpOworICAgIGJvb2wgYXJy
YXlUeXBlRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUHVibGljVHlwZSB0eXBl
KTsKKyAgICBib29sIGFycmF5RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3Ry
aW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSB0eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSk7
CisgICAgYm9vbCB2b2lkRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiwgY29uc3QgVFN0cmlu
ZyYsIGNvbnN0IFRQdWJsaWNUeXBlJik7CisgICAgYm9vbCBib29sRXJyb3JDaGVjayhjb25zdCBU
U291cmNlTG9jJiwgY29uc3QgVEludGVybVR5cGVkKik7CisgICAgYm9vbCBib29sRXJyb3JDaGVj
ayhjb25zdCBUU291cmNlTG9jJiwgY29uc3QgVFB1YmxpY1R5cGUmKTsKKyAgICBib29sIHNhbXBs
ZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBw
VHlwZSwgY29uc3QgY2hhciogcmVhc29uKTsKKyAgICBib29sIHN0cnVjdFF1YWxpZmllckVycm9y
Q2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlKTsK
KyAgICBib29sIHBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBjb25zdCBUVHlwZSYgdHlwZSk7CisgICAgYm9vbCBu
b25Jbml0Q29uc3RFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlk
ZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBib29sIGFycmF5KTsKKyAgICBib29sIG5vbklu
aXRFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIs
IFRQdWJsaWNUeXBlJiB0eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSk7CisgICAgYm9vbCBwYXJh
bUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIs
IFRRdWFsaWZpZXIgcGFyYW1RdWFsaWZpZXIsIFRUeXBlKiB0eXBlKTsKKyAgICBib29sIGV4dGVu
c2lvbkVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYpOwor
CisgICAgY29uc3QgVFByYWdtYSYgcHJhZ21hKCkgY29uc3QgeyByZXR1cm4gZGlyZWN0aXZlSGFu
ZGxlci5wcmFnbWEoKTsgfQorICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0ZW5zaW9u
QmVoYXZpb3IoKSBjb25zdCB7IHJldHVybiBkaXJlY3RpdmVIYW5kbGVyLmV4dGVuc2lvbkJlaGF2
aW9yKCk7IH0KKyAgICBib29sIHN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IGNoYXIqIGV4dGVuc2lv
bik7CisgICAgYm9vbCBpc0V4dGVuc2lvbkVuYWJsZWQoY29uc3QgY2hhciogZXh0ZW5zaW9uKSBj
b25zdDsKKworICAgIGJvb2wgY29udGFpbnNTYW1wbGVyKFRUeXBlJiB0eXBlKTsKKyAgICBib29s
IGFyZUFsbENoaWxkQ29uc3QoVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUpOworICAgIGNvbnN0
IFRGdW5jdGlvbiogZmluZEZ1bmN0aW9uKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRGdW5jdGlv
biogcGZuQ2FsbCwgYm9vbCAqYnVpbHRJbiA9IDApOworICAgIGJvb2wgZXhlY3V0ZUluaXRpYWxp
emVyKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNU
eXBlJiBwVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGlu
aXRpYWxpemVyLCBUSW50ZXJtTm9kZSomIGludGVybU5vZGUsIFRWYXJpYWJsZSogdmFyaWFibGUg
PSAwKTsKKworICAgIFRJbnRlcm1UeXBlZCogYWRkQ29uc3RydWN0b3IoVEludGVybU5vZGUqLCBj
b25zdCBUVHlwZSosIFRPcGVyYXRvciwgVEZ1bmN0aW9uKiwgY29uc3QgVFNvdXJjZUxvYyYpOwor
ICAgIFRJbnRlcm1UeXBlZCogZm9sZENvbnN0Q29uc3RydWN0b3IoVEludGVybUFnZ3JlZ2F0ZSog
YWdnck5vZGUsIGNvbnN0IFRUeXBlJiB0eXBlKTsKKyAgICBUSW50ZXJtVHlwZWQqIGNvbnN0cnVj
dFN0cnVjdChUSW50ZXJtTm9kZSosIFRUeXBlKiwgaW50LCBjb25zdCBUU291cmNlTG9jJiwgYm9v
bCBzdWJzZXQpOworICAgIFRJbnRlcm1UeXBlZCogY29uc3RydWN0QnVpbHRJbihjb25zdCBUVHlw
ZSosIFRPcGVyYXRvciwgVEludGVybU5vZGUqLCBjb25zdCBUU291cmNlTG9jJiwgYm9vbCBzdWJz
ZXQpOworICAgIFRJbnRlcm1UeXBlZCogYWRkQ29uc3RWZWN0b3JOb2RlKFRWZWN0b3JGaWVsZHMm
LCBUSW50ZXJtVHlwZWQqLCBjb25zdCBUU291cmNlTG9jJik7CisgICAgVEludGVybVR5cGVkKiBh
ZGRDb25zdE1hdHJpeE5vZGUoaW50ICwgVEludGVybVR5cGVkKiwgY29uc3QgVFNvdXJjZUxvYyYp
OworICAgIFRJbnRlcm1UeXBlZCogYWRkQ29uc3RBcnJheU5vZGUoaW50IGluZGV4LCBUSW50ZXJt
VHlwZWQqIG5vZGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpOworICAgIFRJbnRlcm1UeXBlZCog
YWRkQ29uc3RTdHJ1Y3QoVFN0cmluZyYgLCBUSW50ZXJtVHlwZWQqLCBjb25zdCBUU291cmNlTG9j
Jik7CisgICAgVEludGVybVR5cGVkKiBhZGRJbmRleEV4cHJlc3Npb24oVEludGVybVR5cGVkICpi
YXNlRXhwcmVzc2lvbiwgY29uc3QgVFNvdXJjZUxvYyYgbG9jYXRpb24sIFRJbnRlcm1UeXBlZCAq
aW5kZXhFeHByZXNzaW9uKTsKKworICAgIC8vIFBlcmZvcm1zIGFuIGVycm9yIGNoZWNrIGZvciBl
bWJlZGRlZCBzdHJ1Y3QgZGVjbGFyYXRpb25zLgorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhbiBl
cnJvciB3YXMgcmFpc2VkIGR1ZSB0byB0aGUgZGVjbGFyYXRpb24gb2YKKyAgICAvLyB0aGlzIHN0
cnVjdC4KKyAgICBib29sIGVudGVyU3RydWN0RGVjbGFyYXRpb24oY29uc3QgVFNvdXJjZUxvYyYg
bGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllcik7CisgICAgdm9pZCBleGl0U3RydWN0RGVj
bGFyYXRpb24oKTsKKworICAgIGJvb2wgc3RydWN0TmVzdGluZ0Vycm9yQ2hlY2soY29uc3QgVFNv
dXJjZUxvYyYgbGluZSwgY29uc3QgVEZpZWxkJiBmaWVsZCk7Cit9OworCitpbnQgUGFQYXJzZVN0
cmluZ3Moc2l6ZV90IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50
IGxlbmd0aFtdLAorICAgICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOwor
CisjZW5kaWYgLy8gX1BBUlNFUl9IRUxQRVJfSU5DTFVERURfCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Qb29sQWxsb2MuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUG9vbEFsbG9j
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5hYmU3MDI2MmYyZDBkOWVmMDE1MDI1NWEzM2U2NWZkZDBlOTMzZjU3
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvUG9vbEFsbG9jLmNwcApAQCAtMCwwICsxLDI5NCBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUG9vbEFsbG9jLmgiCisKKyNp
Zm5kZWYgX01TQ19WRVIKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0
ZGlvLmg+CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZUdsb2JhbHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL29zaW5jbHVkZS5oIgorCitPU19UTFNJbmRleCBQb29sSW5kZXggPSBPU19JTlZB
TElEX1RMU19JTkRFWDsKKworYm9vbCBJbml0aWFsaXplUG9vbEluZGV4KCkKK3sKKyAgICBhc3Nl
cnQoUG9vbEluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKTsKKworICAgIFBvb2xJbmRleCA9
IE9TX0FsbG9jVExTSW5kZXgoKTsKKyAgICByZXR1cm4gUG9vbEluZGV4ICE9IE9TX0lOVkFMSURf
VExTX0lOREVYOworfQorCit2b2lkIEZyZWVQb29sSW5kZXgoKQoreworICAgIGFzc2VydChQb29s
SW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpOworCisgICAgT1NfRnJlZVRMU0luZGV4KFBv
b2xJbmRleCk7CisgICAgUG9vbEluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7Cit9CisKK1RQ
b29sQWxsb2NhdG9yKiBHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCkKK3sKKyAgICBhc3NlcnQoUG9v
bEluZGV4ICE9IE9TX0lOVkFMSURfVExTX0lOREVYKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
VFBvb2xBbGxvY2F0b3IqPihPU19HZXRUTFNWYWx1ZShQb29sSW5kZXgpKTsKK30KKwordm9pZCBT
ZXRHbG9iYWxQb29sQWxsb2NhdG9yKFRQb29sQWxsb2NhdG9yKiBwb29sQWxsb2NhdG9yKQorewor
ICAgIGFzc2VydChQb29sSW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpOworICAgIE9TX1Nl
dFRMU1ZhbHVlKFBvb2xJbmRleCwgcG9vbEFsbG9jYXRvcik7Cit9CisKKy8vCisvLyBJbXBsZW1l
bnQgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIFRQb29sQWxsb2NhdG9yIGNsYXNzLCB3aGljaAor
Ly8gaXMgZG9jdW1lbnRlZCBpbiBQb29sQWxsb2MuaC4KKy8vCitUUG9vbEFsbG9jYXRvcjo6VFBv
b2xBbGxvY2F0b3IoaW50IGdyb3d0aEluY3JlbWVudCwgaW50IGFsbG9jYXRpb25BbGlnbm1lbnQp
IDogCisgICAgcGFnZVNpemUoZ3Jvd3RoSW5jcmVtZW50KSwKKyAgICBhbGlnbm1lbnQoYWxsb2Nh
dGlvbkFsaWdubWVudCksCisgICAgZnJlZUxpc3QoMCksCisgICAgaW5Vc2VMaXN0KDApLAorICAg
IG51bUNhbGxzKDApLAorICAgIHRvdGFsQnl0ZXMoMCkKK3sKKyAgICAvLworICAgIC8vIERvbid0
IGFsbG93IHBhZ2Ugc2l6ZXMgd2Uga25vdyBhcmUgc21hbGxlciB0aGFuIGFsbCBjb21tb24KKyAg
ICAvLyBPUyBwYWdlIHNpemVzLgorICAgIC8vCisgICAgaWYgKHBhZ2VTaXplIDwgNCoxMDI0KQor
ICAgICAgICBwYWdlU2l6ZSA9IDQqMTAyNDsKKworICAgIC8vCisgICAgLy8gQSBsYXJnZSBjdXJy
ZW50UGFnZU9mZnNldCBpbmRpY2F0ZXMgYSBuZXcgcGFnZSBuZWVkcyB0bworICAgIC8vIGJlIG9i
dGFpbmVkIHRvIGFsbG9jYXRlIG1lbW9yeS4KKyAgICAvLworICAgIGN1cnJlbnRQYWdlT2Zmc2V0
ID0gcGFnZVNpemU7CisKKyAgICAvLworICAgIC8vIEFkanVzdCBhbGlnbm1lbnQgdG8gYmUgYXQg
bGVhc3QgcG9pbnRlciBhbGlnbmVkIGFuZAorICAgIC8vIHBvd2VyIG9mIDIuCisgICAgLy8KKyAg
ICBzaXplX3QgbWluQWxpZ24gPSBzaXplb2Yodm9pZCopOworICAgIGFsaWdubWVudCAmPSB+KG1p
bkFsaWduIC0gMSk7CisgICAgaWYgKGFsaWdubWVudCA8IG1pbkFsaWduKQorICAgICAgICBhbGln
bm1lbnQgPSBtaW5BbGlnbjsKKyAgICBzaXplX3QgYSA9IDE7CisgICAgd2hpbGUgKGEgPCBhbGln
bm1lbnQpCisgICAgICAgIGEgPDw9IDE7CisgICAgYWxpZ25tZW50ID0gYTsKKyAgICBhbGlnbm1l
bnRNYXNrID0gYSAtIDE7CisKKyAgICAvLworICAgIC8vIEFsaWduIGhlYWRlciBza2lwCisgICAg
Ly8KKyAgICBoZWFkZXJTa2lwID0gbWluQWxpZ247CisgICAgaWYgKGhlYWRlclNraXAgPCBzaXpl
b2YodEhlYWRlcikpIHsKKyAgICAgICAgaGVhZGVyU2tpcCA9IChzaXplb2YodEhlYWRlcikgKyBh
bGlnbm1lbnRNYXNrKSAmIH5hbGlnbm1lbnRNYXNrOworICAgIH0KK30KKworVFBvb2xBbGxvY2F0
b3I6On5UUG9vbEFsbG9jYXRvcigpCit7CisgICAgd2hpbGUgKGluVXNlTGlzdCkgeworICAgICAg
ICB0SGVhZGVyKiBuZXh0ID0gaW5Vc2VMaXN0LT5uZXh0UGFnZTsKKyAgICAgICAgaW5Vc2VMaXN0
LT5+dEhlYWRlcigpOworICAgICAgICBkZWxldGUgW10gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
aW5Vc2VMaXN0KTsKKyAgICAgICAgaW5Vc2VMaXN0ID0gbmV4dDsKKyAgICB9CisKKyAgICAvLyBX
ZSBzaG91bGQgbm90IGNoZWNrIHRoZSBndWFyZCBibG9ja3MKKyAgICAvLyBoZXJlLCBiZWNhdXNl
IHdlIGRpZCBpdCBhbHJlYWR5IHdoZW4gdGhlIGJsb2NrIHdhcworICAgIC8vIHBsYWNlZCBpbnRv
IHRoZSBmcmVlIGxpc3QuCisgICAgLy8KKyAgICB3aGlsZSAoZnJlZUxpc3QpIHsKKyAgICAgICAg
dEhlYWRlciogbmV4dCA9IGZyZWVMaXN0LT5uZXh0UGFnZTsKKyAgICAgICAgZGVsZXRlIFtdIHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGZyZWVMaXN0KTsKKyAgICAgICAgZnJlZUxpc3QgPSBuZXh0
OworICAgIH0KK30KKworLy8gU3VwcG9ydCBNU1ZDKysgNi4wCitjb25zdCB1bnNpZ25lZCBjaGFy
IFRBbGxvY2F0aW9uOjpndWFyZEJsb2NrQmVnaW5WYWwgPSAweGZiOworY29uc3QgdW5zaWduZWQg
Y2hhciBUQWxsb2NhdGlvbjo6Z3VhcmRCbG9ja0VuZFZhbCAgID0gMHhmZTsKK2NvbnN0IHVuc2ln
bmVkIGNoYXIgVEFsbG9jYXRpb246OnVzZXJEYXRhRmlsbCAgICAgICA9IDB4Y2Q7CisKKyNpZmRl
ZiBHVUFSRF9CTE9DS1MKKyAgICBjb25zdCBzaXplX3QgVEFsbG9jYXRpb246Omd1YXJkQmxvY2tT
aXplID0gMTY7CisjZWxzZQorICAgIGNvbnN0IHNpemVfdCBUQWxsb2NhdGlvbjo6Z3VhcmRCbG9j
a1NpemUgPSAwOworI2VuZGlmCisKKy8vCisvLyBDaGVjayBhIHNpbmdsZSBndWFyZCBibG9jayBm
b3IgZGFtYWdlCisvLwordm9pZCBUQWxsb2NhdGlvbjo6Y2hlY2tHdWFyZEJsb2NrKHVuc2lnbmVk
IGNoYXIqIGJsb2NrTWVtLCB1bnNpZ25lZCBjaGFyIHZhbCwgY29uc3QgY2hhciogbG9jVGV4dCkg
Y29uc3QKK3sKKyNpZmRlZiBHVUFSRF9CTE9DS1MKKyAgICBmb3IgKHNpemVfdCB4ID0gMDsgeCA8
IGd1YXJkQmxvY2tTaXplOyB4KyspIHsKKyAgICAgICAgaWYgKGJsb2NrTWVtW3hdICE9IHZhbCkg
eworICAgICAgICAgICAgY2hhciBhc3NlcnRNc2dbODBdOworCisgICAgICAgICAgICAvLyBXZSBk
b24ndCBwcmludCB0aGUgYXNzZXJ0IG1lc3NhZ2UuICBJdCdzIGhlcmUganVzdCB0byBiZSBoZWxw
ZnVsLgorI2lmIGRlZmluZWQoX01TQ19WRVIpCisgICAgICAgICAgICBzbnByaW50Zihhc3NlcnRN
c2csIHNpemVvZihhc3NlcnRNc2cpLCAiUG9vbEFsbG9jOiBEYW1hZ2UgJXMgJUl1IGJ5dGUgYWxs
b2NhdGlvbiBhdCAweCVwXG4iLAorICAgICAgICAgICAgICAgICAgICBsb2NUZXh0LCBzaXplLCBk
YXRhKCkpOworI2Vsc2UKKyAgICAgICAgICAgIHNucHJpbnRmKGFzc2VydE1zZywgc2l6ZW9mKGFz
c2VydE1zZyksICJQb29sQWxsb2M6IERhbWFnZSAlcyAlenUgYnl0ZSBhbGxvY2F0aW9uIGF0IDB4
JXBcbiIsCisgICAgICAgICAgICAgICAgICAgIGxvY1RleHQsIHNpemUsIGRhdGEoKSk7CisjZW5k
aWYKKyAgICAgICAgICAgIGFzc2VydCgwICYmICJQb29sQWxsb2M6IERhbWFnZSBpbiBndWFyZCBi
bG9jayIpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCit9CisKKwordm9pZCBUUG9vbEFsbG9j
YXRvcjo6cHVzaCgpCit7CisgICAgdEFsbG9jU3RhdGUgc3RhdGUgPSB7IGN1cnJlbnRQYWdlT2Zm
c2V0LCBpblVzZUxpc3QgfTsKKworICAgIHN0YWNrLnB1c2hfYmFjayhzdGF0ZSk7CisgICAgICAg
IAorICAgIC8vCisgICAgLy8gSW5kaWNhdGUgdGhlcmUgaXMgbm8gY3VycmVudCBwYWdlIHRvIGFs
bG9jYXRlIGZyb20uCisgICAgLy8KKyAgICBjdXJyZW50UGFnZU9mZnNldCA9IHBhZ2VTaXplOwor
fQorCisvLworLy8gRG8gYSBtYXNzLWRlYWxsb2NhdGlvbiBvZiBhbGwgdGhlIGluZGl2aWR1YWwg
YWxsb2NhdGlvbnMKKy8vIHRoYXQgaGF2ZSBvY2N1cnJlZCBzaW5jZSB0aGUgbGFzdCBwdXNoKCks
IG9yIHNpbmNlIHRoZQorLy8gbGFzdCBwb3AoKSwgb3Igc2luY2UgdGhlIG9iamVjdCdzIGNyZWF0
aW9uLgorLy8KKy8vIFRoZSBkZWFsbG9jYXRlZCBwYWdlcyBhcmUgc2F2ZWQgZm9yIGZ1dHVyZSBh
bGxvY2F0aW9ucy4KKy8vCit2b2lkIFRQb29sQWxsb2NhdG9yOjpwb3AoKQoreworICAgIGlmIChz
dGFjay5zaXplKCkgPCAxKQorICAgICAgICByZXR1cm47CisKKyAgICB0SGVhZGVyKiBwYWdlID0g
c3RhY2suYmFjaygpLnBhZ2U7CisgICAgY3VycmVudFBhZ2VPZmZzZXQgPSBzdGFjay5iYWNrKCku
b2Zmc2V0OworCisgICAgd2hpbGUgKGluVXNlTGlzdCAhPSBwYWdlKSB7CisgICAgICAgIC8vIGlu
dm9rZSBkZXN0cnVjdG9yIHRvIGZyZWUgYWxsb2NhdGlvbiBsaXN0CisgICAgICAgIGluVXNlTGlz
dC0+fnRIZWFkZXIoKTsKKyAgICAgICAgCisgICAgICAgIHRIZWFkZXIqIG5leHRJblVzZSA9IGlu
VXNlTGlzdC0+bmV4dFBhZ2U7CisgICAgICAgIGlmIChpblVzZUxpc3QtPnBhZ2VDb3VudCA+IDEp
CisgICAgICAgICAgICBkZWxldGUgW10gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oaW5Vc2VMaXN0
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpblVzZUxpc3QtPm5leHRQYWdlID0gZnJl
ZUxpc3Q7CisgICAgICAgICAgICBmcmVlTGlzdCA9IGluVXNlTGlzdDsKKyAgICAgICAgfQorICAg
ICAgICBpblVzZUxpc3QgPSBuZXh0SW5Vc2U7CisgICAgfQorCisgICAgc3RhY2sucG9wX2JhY2so
KTsKK30KKworLy8KKy8vIERvIGEgbWFzcy1kZWFsbG9jYXRpb24gb2YgYWxsIHRoZSBpbmRpdmlk
dWFsIGFsbG9jYXRpb25zCisvLyB0aGF0IGhhdmUgb2NjdXJyZWQuCisvLwordm9pZCBUUG9vbEFs
bG9jYXRvcjo6cG9wQWxsKCkKK3sKKyAgICB3aGlsZSAoc3RhY2suc2l6ZSgpID4gMCkKKyAgICAg
ICAgcG9wKCk7Cit9CisKK3ZvaWQqIFRQb29sQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3QgbnVt
Qnl0ZXMpCit7CisgICAgLy8KKyAgICAvLyBKdXN0IGtlZXAgc29tZSBpbnRlcmVzdGluZyBzdGF0
aXN0aWNzLgorICAgIC8vCisgICAgKytudW1DYWxsczsKKyAgICB0b3RhbEJ5dGVzICs9IG51bUJ5
dGVzOworCisgICAgLy8gSWYgd2UgYXJlIHVzaW5nIGd1YXJkIGJsb2NrcywgYWxsIGFsbG9jYXRp
b25zIGFyZSBicmFja2V0ZWQgYnkKKyAgICAvLyB0aGVtOiBbZ3VhcmRibG9ja11bYWxsb2NhdGlv
bl1bZ3VhcmRibG9ja10uICBudW1CeXRlcyBpcyBob3cKKyAgICAvLyBtdWNoIG1lbW9yeSB0aGUg
Y2FsbGVyIGFza2VkIGZvci4gIGFsbG9jYXRpb25TaXplIGlzIHRoZSB0b3RhbAorICAgIC8vIHNp
emUgaW5jbHVkaW5nIGd1YXJkIGJsb2Nrcy4gIEluIHJlbGVhc2UgYnVpbGQsCisgICAgLy8gZ3Vh
cmRCbG9ja1NpemU9MCBhbmQgdGhpcyBhbGwgZ2V0cyBvcHRpbWl6ZWQgYXdheS4KKyAgICBzaXpl
X3QgYWxsb2NhdGlvblNpemUgPSBUQWxsb2NhdGlvbjo6YWxsb2NhdGlvblNpemUobnVtQnl0ZXMp
OworICAgIC8vIERldGVjdCBpbnRlZ2VyIG92ZXJmbG93LgorICAgIGlmIChhbGxvY2F0aW9uU2l6
ZSA8IG51bUJ5dGVzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vCisgICAgLy8gRG8gdGhl
IGFsbG9jYXRpb24sIG1vc3QgbGlrZWx5IGNhc2UgZmlyc3QsIGZvciBlZmZpY2llbmN5LgorICAg
IC8vIFRoaXMgc3RlcCBjb3VsZCBiZSBtb3ZlZCB0byBiZSBpbmxpbmUgc29tZXRpbWUuCisgICAg
Ly8KKyAgICBpZiAoYWxsb2NhdGlvblNpemUgPD0gcGFnZVNpemUgLSBjdXJyZW50UGFnZU9mZnNl
dCkgeworICAgICAgICAvLworICAgICAgICAvLyBTYWZlIHRvIGFsbG9jYXRlIGZyb20gY3VycmVu
dFBhZ2VPZmZzZXQuCisgICAgICAgIC8vCisgICAgICAgIHVuc2lnbmVkIGNoYXIqIG1lbW9yeSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhciAqPihpblVzZUxpc3QpICsgY3VycmVudFBh
Z2VPZmZzZXQ7CisgICAgICAgIGN1cnJlbnRQYWdlT2Zmc2V0ICs9IGFsbG9jYXRpb25TaXplOwor
ICAgICAgICBjdXJyZW50UGFnZU9mZnNldCA9IChjdXJyZW50UGFnZU9mZnNldCArIGFsaWdubWVu
dE1hc2spICYgfmFsaWdubWVudE1hc2s7CisKKyAgICAgICAgcmV0dXJuIGluaXRpYWxpemVBbGxv
Y2F0aW9uKGluVXNlTGlzdCwgbWVtb3J5LCBudW1CeXRlcyk7CisgICAgfQorCisgICAgaWYgKGFs
bG9jYXRpb25TaXplID4gcGFnZVNpemUgLSBoZWFkZXJTa2lwKSB7CisgICAgICAgIC8vCisgICAg
ICAgIC8vIERvIGEgbXVsdGktcGFnZSBhbGxvY2F0aW9uLiAgRG9uJ3QgbWl4IHRoZXNlIHdpdGgg
dGhlIG90aGVycy4KKyAgICAgICAgLy8gVGhlIE9TIGlzIGVmZmljaWVudCBhbmQgYWxsb2NhdGlu
ZyBhbmQgZnJlZS1pbmcgbXVsdGlwbGUgcGFnZXMuCisgICAgICAgIC8vCisgICAgICAgIHNpemVf
dCBudW1CeXRlc1RvQWxsb2MgPSBhbGxvY2F0aW9uU2l6ZSArIGhlYWRlclNraXA7CisgICAgICAg
IC8vIERldGVjdCBpbnRlZ2VyIG92ZXJmbG93LgorICAgICAgICBpZiAobnVtQnl0ZXNUb0FsbG9j
IDwgYWxsb2NhdGlvblNpemUpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICB0SGVh
ZGVyKiBtZW1vcnkgPSByZWludGVycHJldF9jYXN0PHRIZWFkZXIqPig6Om5ldyBjaGFyW251bUJ5
dGVzVG9BbGxvY10pOworICAgICAgICBpZiAobWVtb3J5ID09IDApCisgICAgICAgICAgICByZXR1
cm4gMDsKKworICAgICAgICAvLyBVc2UgcGxhY2VtZW50LW5ldyB0byBpbml0aWFsaXplIGhlYWRl
cgorICAgICAgICBuZXcobWVtb3J5KSB0SGVhZGVyKGluVXNlTGlzdCwgKG51bUJ5dGVzVG9BbGxv
YyArIHBhZ2VTaXplIC0gMSkgLyBwYWdlU2l6ZSk7CisgICAgICAgIGluVXNlTGlzdCA9IG1lbW9y
eTsKKworICAgICAgICBjdXJyZW50UGFnZU9mZnNldCA9IHBhZ2VTaXplOyAgLy8gbWFrZSBuZXh0
IGFsbG9jYXRpb24gY29tZSBmcm9tIGEgbmV3IHBhZ2UKKworICAgICAgICAvLyBObyBndWFyZCBi
bG9ja3MgZm9yIG11bHRpLXBhZ2UgYWxsb2NhdGlvbnMgKHlldCkKKyAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtZW1vcnkp
ICsgaGVhZGVyU2tpcCk7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBOZWVkIGEgc2ltcGxlIHBh
Z2UgdG8gYWxsb2NhdGUgZnJvbS4KKyAgICAvLworICAgIHRIZWFkZXIqIG1lbW9yeTsKKyAgICBp
ZiAoZnJlZUxpc3QpIHsKKyAgICAgICAgbWVtb3J5ID0gZnJlZUxpc3Q7CisgICAgICAgIGZyZWVM
aXN0ID0gZnJlZUxpc3QtPm5leHRQYWdlOworICAgIH0gZWxzZSB7CisgICAgICAgIG1lbW9yeSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dEhlYWRlcio+KDo6bmV3IGNoYXJbcGFnZVNpemVdKTsKKyAgICAg
ICAgaWYgKG1lbW9yeSA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
Ly8gVXNlIHBsYWNlbWVudC1uZXcgdG8gaW5pdGlhbGl6ZSBoZWFkZXIKKyAgICBuZXcobWVtb3J5
KSB0SGVhZGVyKGluVXNlTGlzdCwgMSk7CisgICAgaW5Vc2VMaXN0ID0gbWVtb3J5OworICAgIAor
ICAgIHVuc2lnbmVkIGNoYXIqIHJldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhciAq
PihpblVzZUxpc3QpICsgaGVhZGVyU2tpcDsKKyAgICBjdXJyZW50UGFnZU9mZnNldCA9IChoZWFk
ZXJTa2lwICsgYWxsb2NhdGlvblNpemUgKyBhbGlnbm1lbnRNYXNrKSAmIH5hbGlnbm1lbnRNYXNr
OworCisgICAgcmV0dXJuIGluaXRpYWxpemVBbGxvY2F0aW9uKGluVXNlTGlzdCwgcmV0LCBudW1C
eXRlcyk7Cit9CisKKworLy8KKy8vIENoZWNrIGFsbCBhbGxvY2F0aW9ucyBpbiBhIGxpc3QgZm9y
IGRhbWFnZSBieSBjYWxsaW5nIGNoZWNrIG9uIGVhY2guCisvLwordm9pZCBUQWxsb2NhdGlvbjo6
Y2hlY2tBbGxvY0xpc3QoKSBjb25zdAoreworICAgIGZvciAoY29uc3QgVEFsbG9jYXRpb24qIGFs
bG9jID0gdGhpczsgYWxsb2MgIT0gMDsgYWxsb2MgPSBhbGxvYy0+cHJldkFsbG9jKQorICAgICAg
ICBhbGxvYy0+Y2hlY2soKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Bvb2xBbGxvYy5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUG9vbEFsbG9jLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWRk
MjQ5YzRkM2EzOWJiMjAxYzM4NTU0MjM5OTA4MDhmNTVmMDdlNQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Bvb2xBbGxv
Yy5oCkBAIC0wLDAgKzEsMzAwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9QT09M
QUxMT0NfSU5DTFVERURfCisjZGVmaW5lIF9QT09MQUxMT0NfSU5DTFVERURfCisKKyNpZmRlZiBf
REVCVUcKKyNkZWZpbmUgR1VBUkRfQkxPQ0tTICAvLyBkZWZpbmUgdG8gZW5hYmxlIGd1YXJkIGJs
b2NrIHNhbml0eSBjaGVja2luZworI2VuZGlmCisKKy8vCisvLyBUaGlzIGhlYWRlciBkZWZpbmVz
IGFuIGFsbG9jYXRvciB0aGF0IGNhbiBiZSB1c2VkIHRvIGVmZmljaWVudGx5CisvLyBhbGxvY2F0
ZSBhIGxhcmdlIG51bWJlciBvZiBzbWFsbCByZXF1ZXN0cyBmb3IgaGVhcCBtZW1vcnksIHdpdGgg
dGhlIAorLy8gaW50ZW50aW9uIHRoYXQgdGhleSBhcmUgbm90IGluZGl2aWR1YWxseSBkZWFsbG9j
YXRlZCwgYnV0IHJhdGhlciAKKy8vIGNvbGxlY3RpdmVseSBkZWFsbG9jYXRlZCBhdCBvbmUgdGlt
ZS4KKy8vCisvLyBUaGlzIHNpbXVsdGFuZW91c2x5CisvLworLy8gKiBNYWtlcyBlYWNoIGluZGl2
aWR1YWwgYWxsb2NhdGlvbiBtdWNoIG1vcmUgZWZmaWNpZW50OyB0aGUKKy8vICAgICB0eXBpY2Fs
IGFsbG9jYXRpb24gaXMgdHJpdmlhbC4KKy8vICogQ29tcGxldGVseSBhdm9pZHMgdGhlIGNvc3Qg
b2YgZG9pbmcgaW5kaXZpZHVhbCBkZWFsbG9jYXRpb24uCisvLyAqIFNhdmVzIHRoZSB0cm91Ymxl
IG9mIHRyYWNraW5nIGRvd24gYW5kIHBsdWdnaW5nIGEgbGFyZ2UgY2xhc3Mgb2YgbGVha3MuCisv
LworLy8gSW5kaXZpZHVhbCBjbGFzc2VzIGNhbiB1c2UgdGhpcyBhbGxvY2F0b3IgYnkgc3VwcGx5
aW5nIHRoZWlyIG93bgorLy8gbmV3IGFuZCBkZWxldGUgbWV0aG9kcy4KKy8vCisvLyBTVEwgY29u
dGFpbmVycyBjYW4gdXNlIHRoaXMgYWxsb2NhdG9yIGJ5IHVzaW5nIHRoZSBwb29sX2FsbG9jYXRv
cgorLy8gY2xhc3MgYXMgdGhlIGFsbG9jYXRvciAoc2Vjb25kKSB0ZW1wbGF0ZSBhcmd1bWVudC4K
Ky8vCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRl
IDx2ZWN0b3I+CisKKy8vIElmIHdlIGFyZSB1c2luZyBndWFyZCBibG9ja3MsIHdlIG11c3QgdHJh
Y2sgZWFjaCBpbmRpdnVhbAorLy8gYWxsb2NhdGlvbi4gIElmIHdlIGFyZW4ndCB1c2luZyBndWFy
ZCBibG9ja3MsIHRoZXNlCisvLyBuZXZlciBnZXQgaW5zdGFudGlhdGVkLCBzbyB3b24ndCBoYXZl
IGFueSBpbXBhY3QuCisvLyAKKworY2xhc3MgVEFsbG9jYXRpb24geworcHVibGljOgorICAgIFRB
bGxvY2F0aW9uKHNpemVfdCBzaXplLCB1bnNpZ25lZCBjaGFyKiBtZW0sIFRBbGxvY2F0aW9uKiBw
cmV2ID0gMCkgOgorICAgICAgICBzaXplKHNpemUpLCBtZW0obWVtKSwgcHJldkFsbG9jKHByZXYp
IHsKKyAgICAgICAgLy8gQWxsb2NhdGlvbnMgYXJlIGJyYWNrZXRlZDoKKyAgICAgICAgLy8gICAg
W2FsbG9jYXRpb25IZWFkZXJdW2luaXRpYWxHdWFyZEJsb2NrXVt1c2VyRGF0YV1bZmluYWxHdWFy
ZEJsb2NrXQorICAgICAgICAvLyBUaGlzIHdvdWxkIGJlIGNsZWFuZXIgd2l0aCBpZiAoZ3VhcmRC
bG9ja1NpemUpLi4uLCBidXQgdGhhdAorICAgICAgICAvLyBtYWtlcyB0aGUgY29tcGlsZXIgcHJp
bnQgd2FybmluZ3MgYWJvdXQgMCBsZW5ndGggbWVtc2V0cywKKyAgICAgICAgLy8gZXZlbiB3aXRo
IHRoZSBpZigpIHByb3RlY3RpbmcgdGhlbS4KKyNpZmRlZiBHVUFSRF9CTE9DS1MKKyAgICAgICAg
bWVtc2V0KHByZUd1YXJkKCksIGd1YXJkQmxvY2tCZWdpblZhbCwgZ3VhcmRCbG9ja1NpemUpOwor
ICAgICAgICBtZW1zZXQoZGF0YSgpLCAgICAgIHVzZXJEYXRhRmlsbCwgICAgICAgc2l6ZSk7Cisg
ICAgICAgIG1lbXNldChwb3N0R3VhcmQoKSwgZ3VhcmRCbG9ja0VuZFZhbCwgICBndWFyZEJsb2Nr
U2l6ZSk7CisjZW5kaWYKKyAgICB9CisKKyAgICB2b2lkIGNoZWNrKCkgY29uc3QgeworICAgICAg
ICBjaGVja0d1YXJkQmxvY2socHJlR3VhcmQoKSwgIGd1YXJkQmxvY2tCZWdpblZhbCwgImJlZm9y
ZSIpOworICAgICAgICBjaGVja0d1YXJkQmxvY2socG9zdEd1YXJkKCksIGd1YXJkQmxvY2tFbmRW
YWwsICAgImFmdGVyIik7CisgICAgfQorCisgICAgdm9pZCBjaGVja0FsbG9jTGlzdCgpIGNvbnN0
OworCisgICAgLy8gUmV0dXJuIHRvdGFsIHNpemUgbmVlZGVkIHRvIGFjY29tb2RhdGUgdXNlciBi
dWZmZXIgb2YgJ3NpemUnLAorICAgIC8vIHBsdXMgb3VyIHRyYWNraW5nIGRhdGEuCisgICAgaW5s
aW5lIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUoc2l6ZV90IHNpemUpIHsKKyAgICAgICAg
cmV0dXJuIHNpemUgKyAyICogZ3VhcmRCbG9ja1NpemUgKyBoZWFkZXJTaXplKCk7CisgICAgfQor
CisgICAgLy8gT2Zmc2V0IGZyb20gc3Vycm91bmRpbmcgYnVmZmVyIHRvIGdldCB0byB1c2VyIGRh
dGEgYnVmZmVyLgorICAgIGlubGluZSBzdGF0aWMgdW5zaWduZWQgY2hhciogb2Zmc2V0QWxsb2Nh
dGlvbih1bnNpZ25lZCBjaGFyKiBtKSB7CisgICAgICAgIHJldHVybiBtICsgZ3VhcmRCbG9ja1Np
emUgKyBoZWFkZXJTaXplKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgY2hlY2tHdWFy
ZEJsb2NrKHVuc2lnbmVkIGNoYXIqIGJsb2NrTWVtLCB1bnNpZ25lZCBjaGFyIHZhbCwgY29uc3Qg
Y2hhciogbG9jVGV4dCkgY29uc3Q7CisKKyAgICAvLyBGaW5kIG9mZnNldHMgdG8gcHJlIGFuZCBw
b3N0IGd1YXJkIGJsb2NrcywgYW5kIHVzZXIgZGF0YSBidWZmZXIKKyAgICB1bnNpZ25lZCBjaGFy
KiBwcmVHdWFyZCgpICBjb25zdCB7IHJldHVybiBtZW0gKyBoZWFkZXJTaXplKCk7IH0KKyAgICB1
bnNpZ25lZCBjaGFyKiBkYXRhKCkgICAgICBjb25zdCB7IHJldHVybiBwcmVHdWFyZCgpICsgZ3Vh
cmRCbG9ja1NpemU7IH0KKyAgICB1bnNpZ25lZCBjaGFyKiBwb3N0R3VhcmQoKSBjb25zdCB7IHJl
dHVybiBkYXRhKCkgKyBzaXplOyB9CisKKyAgICBzaXplX3Qgc2l6ZTsgICAgICAgICAgICAgICAg
ICAvLyBzaXplIG9mIHRoZSB1c2VyIGRhdGEgYXJlYQorICAgIHVuc2lnbmVkIGNoYXIqIG1lbTsg
ICAgICAgICAgIC8vIGJlZ2lubmluZyBvZiBvdXIgYWxsb2NhdGlvbiAocHRzIHRvIGhlYWRlcikK
KyAgICBUQWxsb2NhdGlvbiogcHJldkFsbG9jOyAgICAgICAvLyBwcmlvciBhbGxvY2F0aW9uIGlu
IHRoZSBjaGFpbgorCisgICAgLy8gU3VwcG9ydCBNU1ZDKysgNi4wCisgICAgY29uc3Qgc3RhdGlj
IHVuc2lnbmVkIGNoYXIgZ3VhcmRCbG9ja0JlZ2luVmFsOworICAgIGNvbnN0IHN0YXRpYyB1bnNp
Z25lZCBjaGFyIGd1YXJkQmxvY2tFbmRWYWw7CisgICAgY29uc3Qgc3RhdGljIHVuc2lnbmVkIGNo
YXIgdXNlckRhdGFGaWxsOworCisgICAgY29uc3Qgc3RhdGljIHNpemVfdCBndWFyZEJsb2NrU2l6
ZTsKKyNpZmRlZiBHVUFSRF9CTE9DS1MKKyAgICBpbmxpbmUgc3RhdGljIHNpemVfdCBoZWFkZXJT
aXplKCkgeyByZXR1cm4gc2l6ZW9mKFRBbGxvY2F0aW9uKTsgfQorI2Vsc2UKKyAgICBpbmxpbmUg
c3RhdGljIHNpemVfdCBoZWFkZXJTaXplKCkgeyByZXR1cm4gMDsgfQorI2VuZGlmCit9OworCisv
LworLy8gVGhlcmUgYXJlIHNldmVyYWwgc3RhY2tzLiAgT25lIGlzIHRvIHRyYWNrIHRoZSBwdXNo
aW5nIGFuZCBwb3BwaW5nCisvLyBvZiB0aGUgdXNlciwgYW5kIG5vdCB5ZXQgaW1wbGVtZW50ZWQu
ICBUaGUgb3RoZXJzIGFyZSBzaW1wbHkgYSAKKy8vIHJlcG9zaXRvcmllcyBvZiBmcmVlIHBhZ2Vz
IG9yIHVzZWQgcGFnZXMuCisvLworLy8gUGFnZSBzdGFja3MgYXJlIGxpbmtlZCB0b2dldGhlciB3
aXRoIGEgc2ltcGxlIGhlYWRlciBhdCB0aGUgYmVnaW5uaW5nCisvLyBvZiBlYWNoIGFsbG9jYXRp
b24gb2J0YWluZWQgZnJvbSB0aGUgdW5kZXJseWluZyBPUy4gIE11bHRpLXBhZ2UgYWxsb2NhdGlv
bnMKKy8vIGFyZSByZXR1cm5lZCB0byB0aGUgT1MuICBJbmRpdmlkdWFsIHBhZ2UgYWxsb2NhdGlv
bnMgYXJlIGtlcHQgZm9yIGZ1dHVyZQorLy8gcmUtdXNlLgorLy8KKy8vIFRoZSAicGFnZSBzaXpl
IiB1c2VkIGlzIG5vdCwgbm9yIG11c3QgaXQgbWF0Y2gsIHRoZSB1bmRlcmx5aW5nIE9TCisvLyBw
YWdlIHNpemUuICBCdXQsIGhhdmluZyBpdCBiZSBhYm91dCB0aGF0IHNpemUgb3IgZXF1YWwgdG8g
YSBzZXQgb2YgCisvLyBwYWdlcyBpcyBsaWtlbHkgbW9zdCBvcHRpbWFsLgorLy8KK2NsYXNzIFRQ
b29sQWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAgICBUUG9vbEFsbG9jYXRvcihpbnQgZ3Jvd3RoSW5j
cmVtZW50ID0gOCoxMDI0LCBpbnQgYWxsb2NhdGlvbkFsaWdubWVudCA9IDE2KTsKKworICAgIC8v
CisgICAgLy8gRG9uJ3QgY2FsbCB0aGUgZGVzdHJ1Y3RvciBqdXN0IHRvIGZyZWUgdXAgdGhlIG1l
bW9yeSwgY2FsbCBwb3AoKQorICAgIC8vCisgICAgflRQb29sQWxsb2NhdG9yKCk7CisKKyAgICAv
LworICAgIC8vIENhbGwgcHVzaCgpIHRvIGVzdGFibGlzaCBhIG5ldyBwbGFjZSB0byBwb3AgbWVt
b3J5IHRvby4gIERvZXMgbm90CisgICAgLy8gaGF2ZSB0byBiZSBjYWxsZWQgdG8gZ2V0IHRoaW5n
cyBzdGFydGVkLgorICAgIC8vCisgICAgdm9pZCBwdXNoKCk7CisKKyAgICAvLworICAgIC8vIENh
bGwgcG9wKCkgdG8gZnJlZSBhbGwgbWVtb3J5IGFsbG9jYXRlZCBzaW5jZSB0aGUgbGFzdCBjYWxs
IHRvIHB1c2goKSwKKyAgICAvLyBvciBpZiBubyBsYXN0IGNhbGwgdG8gcHVzaCwgZnJlZXMgYWxs
IG1lbW9yeSBzaW5jZSBmaXJzdCBhbGxvY2F0aW9uLgorICAgIC8vCisgICAgdm9pZCBwb3AoKTsK
KworICAgIC8vCisgICAgLy8gQ2FsbCBwb3BBbGwoKSB0byBmcmVlIGFsbCBtZW1vcnkgYWxsb2Nh
dGVkLgorICAgIC8vCisgICAgdm9pZCBwb3BBbGwoKTsKKworICAgIC8vCisgICAgLy8gQ2FsbCBh
bGxvY2F0ZSgpIHRvIGFjdHVhbGx5IGFjcXVpcmUgbWVtb3J5LiAgUmV0dXJucyAwIGlmIG5vIG1l
bW9yeQorICAgIC8vIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGEgcHJvcGVybHkgYWxpZ25lZCBwb2lu
dGVyIHRvICdudW1CeXRlcycgb2YgbWVtb3J5LgorICAgIC8vCisgICAgdm9pZCogYWxsb2NhdGUo
c2l6ZV90IG51bUJ5dGVzKTsKKworICAgIC8vCisgICAgLy8gVGhlcmUgaXMgbm8gZGVhbGxvY2F0
ZS4gIFRoZSBwb2ludCBvZiB0aGlzIGNsYXNzIGlzIHRoYXQKKyAgICAvLyBkZWFsbG9jYXRpb24g
Y2FuIGJlIHNraXBwZWQgYnkgdGhlIHVzZXIgb2YgaXQsIGFzIHRoZSBtb2RlbAorICAgIC8vIG9m
IHVzZSBpcyB0byBzaW11bHRhbmVvdXNseSBkZWFsbG9jYXRlIGV2ZXJ5dGhpbmcgYXQgb25jZQor
ICAgIC8vIGJ5IGNhbGxpbmcgcG9wKCksIGFuZCB0byBub3QgaGF2ZSB0byBzb2x2ZSBtZW1vcnkg
bGVhayBwcm9ibGVtcy4KKyAgICAvLworCitwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIHN0cnVjdCB0
SGVhZGVyOworICAgIAorICAgIHN0cnVjdCB0SGVhZGVyIHsKKyAgICAgICAgdEhlYWRlcih0SGVh
ZGVyKiBuZXh0UGFnZSwgc2l6ZV90IHBhZ2VDb3VudCkgOgorICAgICAgICAgICAgbmV4dFBhZ2Uo
bmV4dFBhZ2UpLAorICAgICAgICAgICAgcGFnZUNvdW50KHBhZ2VDb3VudCkKKyNpZmRlZiBHVUFS
RF9CTE9DS1MKKyAgICAgICAgICAsIGxhc3RBbGxvY2F0aW9uKDApCisjZW5kaWYKKyAgICAgICAg
ICAgIHsgfQorCisgICAgICAgIH50SGVhZGVyKCkgeworI2lmZGVmIEdVQVJEX0JMT0NLUworICAg
ICAgICAgICAgaWYgKGxhc3RBbGxvY2F0aW9uKQorICAgICAgICAgICAgICAgIGxhc3RBbGxvY2F0
aW9uLT5jaGVja0FsbG9jTGlzdCgpOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICB0SGVh
ZGVyKiBuZXh0UGFnZTsKKyAgICAgICAgc2l6ZV90IHBhZ2VDb3VudDsKKyNpZmRlZiBHVUFSRF9C
TE9DS1MKKyAgICAgICAgVEFsbG9jYXRpb24qIGxhc3RBbGxvY2F0aW9uOworI2VuZGlmCisgICAg
fTsKKworICAgIHN0cnVjdCB0QWxsb2NTdGF0ZSB7CisgICAgICAgIHNpemVfdCBvZmZzZXQ7Cisg
ICAgICAgIHRIZWFkZXIqIHBhZ2U7CisgICAgfTsKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPHRB
bGxvY1N0YXRlPiB0QWxsb2NTdGFjazsKKworICAgIC8vIFRyYWNrIGFsbG9jYXRpb25zIGlmIGFu
ZCBvbmx5IGlmIHdlJ3JlIHVzaW5nIGd1YXJkIGJsb2NrcworICAgIHZvaWQqIGluaXRpYWxpemVB
bGxvY2F0aW9uKHRIZWFkZXIqIGJsb2NrLCB1bnNpZ25lZCBjaGFyKiBtZW1vcnksIHNpemVfdCBu
dW1CeXRlcykgeworI2lmZGVmIEdVQVJEX0JMT0NLUworICAgICAgICBuZXcobWVtb3J5KSBUQWxs
b2NhdGlvbihudW1CeXRlcywgbWVtb3J5LCBibG9jay0+bGFzdEFsbG9jYXRpb24pOworICAgICAg
ICBibG9jay0+bGFzdEFsbG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PFRBbGxvY2F0aW9uKj4o
bWVtb3J5KTsKKyNlbmRpZgorICAgICAgICAvLyBUaGlzIGlzIG9wdGltaXplZCBlbnRpcmVseSBh
d2F5IGlmIEdVQVJEX0JMT0NLUyBpcyBub3QgZGVmaW5lZC4KKyAgICAgICAgcmV0dXJuIFRBbGxv
Y2F0aW9uOjpvZmZzZXRBbGxvY2F0aW9uKG1lbW9yeSk7CisgICAgfQorCisgICAgc2l6ZV90IHBh
Z2VTaXplOyAgICAgICAgLy8gZ3JhbnVsYXJpdHkgb2YgYWxsb2NhdGlvbiBmcm9tIHRoZSBPUwor
ICAgIHNpemVfdCBhbGlnbm1lbnQ7ICAgICAgIC8vIGFsbCByZXR1cm5lZCBhbGxvY2F0aW9ucyB3
aWxsIGJlIGFsaWduZWQgYXQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBn
cmFudWxhcml0eSwgd2hpY2ggd2lsbCBiZSBhIHBvd2VyIG9mIDIKKyAgICBzaXplX3QgYWxpZ25t
ZW50TWFzazsKKyAgICBzaXplX3QgaGVhZGVyU2tpcDsgICAgICAvLyBhbW91bnQgb2YgbWVtb3J5
IHRvIHNraXAgdG8gbWFrZSByb29tIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgIGhlYWRlciAoYmFzaWNhbGx5LCBzaXplIG9mIGhlYWRlciwgcm91bmRlZAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgdXAgdG8gbWFrZSBpdCBhbGlnbmVkCisg
ICAgc2l6ZV90IGN1cnJlbnRQYWdlT2Zmc2V0OyAgLy8gbmV4dCBvZmZzZXQgaW4gdG9wIG9mIGlu
VXNlTGlzdCB0byBhbGxvY2F0ZSBmcm9tCisgICAgdEhlYWRlciogZnJlZUxpc3Q7ICAgICAgLy8g
bGlzdCBvZiBwb3BwZWQgbWVtb3J5CisgICAgdEhlYWRlciogaW5Vc2VMaXN0OyAgICAgLy8gbGlz
dCBvZiBhbGwgbWVtb3J5IGN1cnJlbnRseSBiZWluZyB1c2VkCisgICAgdEFsbG9jU3RhY2sgc3Rh
Y2s7ICAgICAgLy8gc3RhY2sgb2Ygd2hlcmUgdG8gYWxsb2NhdGUgZnJvbSwgdG8gcGFydGl0aW9u
IHBvb2wKKworICAgIGludCBudW1DYWxsczsgICAgICAgICAgIC8vIGp1c3QgYW4gaW50ZXJlc3Rp
bmcgc3RhdGlzdGljCisgICAgc2l6ZV90IHRvdGFsQnl0ZXM7ICAgICAgLy8ganVzdCBhbiBpbnRl
cmVzdGluZyBzdGF0aXN0aWMKK3ByaXZhdGU6CisgICAgVFBvb2xBbGxvY2F0b3ImIG9wZXJhdG9y
PShjb25zdCBUUG9vbEFsbG9jYXRvciYpOyAgLy8gZG9udCBhbGxvdyBhc3NpZ25tZW50IG9wZXJh
dG9yCisgICAgVFBvb2xBbGxvY2F0b3IoY29uc3QgVFBvb2xBbGxvY2F0b3ImKTsgIC8vIGRvbnQg
YWxsb3cgZGVmYXVsdCBjb3B5IGNvbnN0cnVjdG9yCit9OworCisKKy8vCisvLyBUaGVyZSBjb3Vs
ZCBwb3RlbnRpYWxseSBiZSBtYW55IHBvb2xzIHdpdGggcG9wcyBoYXBwZW5pbmcgYXQKKy8vIGRp
ZmZlcmVudCB0aW1lcy4gIEJ1dCBhIHNpbXBsZSB1c2UgaXMgdG8gaGF2ZSBhIGdsb2JhbCBwb3AK
Ky8vIHdpdGggZXZlcnlvbmUgdXNpbmcgdGhlIHNhbWUgZ2xvYmFsIGFsbG9jYXRvci4KKy8vCitl
eHRlcm4gVFBvb2xBbGxvY2F0b3IqIEdldEdsb2JhbFBvb2xBbGxvY2F0b3IoKTsKK2V4dGVybiB2
b2lkIFNldEdsb2JhbFBvb2xBbGxvY2F0b3IoVFBvb2xBbGxvY2F0b3IqIHBvb2xBbGxvY2F0b3Ip
OworCisvLworLy8gVGhpcyBTVEwgY29tcGF0aWJsZSBhbGxvY2F0b3IgaXMgaW50ZW5kZWQgdG8g
YmUgdXNlZCBhcyB0aGUgYWxsb2NhdG9yCisvLyBwYXJhbWV0ZXIgdG8gdGVtcGxhdGl6ZWQgU1RM
IGNvbnRhaW5lcnMsIGxpa2UgdmVjdG9yIGFuZCBtYXAuCisvLworLy8gSXQgd2lsbCB1c2UgdGhl
IHBvb2xzIGZvciBhbGxvY2F0aW9uLCBhbmQgbm90CisvLyBkbyBhbnkgZGVhbGxvY2F0aW9uLCBi
dXQgd2lsbCBzdGlsbCBkbyBkZXN0cnVjdGlvbi4KKy8vCit0ZW1wbGF0ZTxjbGFzcyBUPgorY2xh
c3MgcG9vbF9hbGxvY2F0b3IgeworcHVibGljOgorICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlw
ZTsKKyAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CisgICAgdHlwZWRlZiBU
KiBwb2ludGVyOworICAgIHR5cGVkZWYgY29uc3QgVCogY29uc3RfcG9pbnRlcjsKKyAgICB0eXBl
ZGVmIFQmIHJlZmVyZW5jZTsKKyAgICB0eXBlZGVmIGNvbnN0IFQmIGNvbnN0X3JlZmVyZW5jZTsK
KyAgICB0eXBlZGVmIFQgdmFsdWVfdHlwZTsKKworICAgIHRlbXBsYXRlPGNsYXNzIE90aGVyPiAK
KyAgICBzdHJ1Y3QgcmViaW5kIHsKKyAgICAgICAgdHlwZWRlZiBwb29sX2FsbG9jYXRvcjxPdGhl
cj4gb3RoZXI7CisgICAgfTsKKyAgICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIHgpIGNvbnN0
IHsgcmV0dXJuICZ4OyB9CisgICAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5j
ZSB4KSBjb25zdCB7IHJldHVybiAmeDsgfQorCisgICAgcG9vbF9hbGxvY2F0b3IoKSA6IGFsbG9j
YXRvcihHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCkpIHsgfQorICAgIHBvb2xfYWxsb2NhdG9yKFRQ
b29sQWxsb2NhdG9yJiBhKSA6IGFsbG9jYXRvcigmYSkgeyB9CisgICAgcG9vbF9hbGxvY2F0b3Io
Y29uc3QgcG9vbF9hbGxvY2F0b3I8VD4mIHApIDogYWxsb2NhdG9yKHAuYWxsb2NhdG9yKSB7IH0K
KworICAgIHRlbXBsYXRlIDxjbGFzcyBPdGhlcj4KKyAgICBwb29sX2FsbG9jYXRvcjxUPiYgb3Bl
cmF0b3I9KGNvbnN0IHBvb2xfYWxsb2NhdG9yPE90aGVyPiYgcCkgeworICAgICAgYWxsb2NhdG9y
ID0gcC5hbGxvY2F0b3I7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdGVtcGxh
dGU8Y2xhc3MgT3RoZXI+CisgICAgcG9vbF9hbGxvY2F0b3IoY29uc3QgcG9vbF9hbGxvY2F0b3I8
T3RoZXI+JiBwKSA6IGFsbG9jYXRvcigmcC5nZXRBbGxvY2F0b3IoKSkgeyB9CisKKyNpZiBkZWZp
bmVkKF9fU1VOUFJPX0NDKSAmJiAhZGVmaW5lZChfUldTVERfQUxMT0NBVE9SKQorICAgIC8vIGxp
YkNTdGQgb24gc29tZSBwbGF0Zm9ybXMgaGF2ZSBhIGRpZmZlcmVudCBhbGxvY2F0ZS9kZWFsbG9j
YXRlIGludGVyZmFjZS4KKyAgICAvLyBDYWxsZXIgcHJlLWJha2VzIHNpemVvZihUKSBpbnRvICdu
JyB3aGljaCBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlCisgICAgLy8gYWxsb2NhdGVkLCBu
b3QgdGhlIG51bWJlciBvZiBlbGVtZW50cy4KKyAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3R5cGUg
bikgeyAKKyAgICAgICAgcmV0dXJuIGdldEFsbG9jYXRvcigpLmFsbG9jYXRlKG4pOworICAgIH0K
KyAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3R5cGUgbiwgY29uc3Qgdm9pZCopIHsKKyAgICAgICAg
cmV0dXJuIGdldEFsbG9jYXRvcigpLmFsbG9jYXRlKG4pOworICAgIH0KKyAgICB2b2lkIGRlYWxs
b2NhdGUodm9pZCosIHNpemVfdHlwZSkge30KKyNlbHNlCisgICAgcG9pbnRlciBhbGxvY2F0ZShz
aXplX3R5cGUgbikgeyAKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8cG9pbnRlcj4o
Z2V0QWxsb2NhdG9yKCkuYWxsb2NhdGUobiAqIHNpemVvZihUKSkpOworICAgIH0KKyAgICBwb2lu
dGVyIGFsbG9jYXRlKHNpemVfdHlwZSBuLCBjb25zdCB2b2lkKikgeyAKKyAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8cG9pbnRlcj4oZ2V0QWxsb2NhdG9yKCkuYWxsb2NhdGUobiAqIHNp
emVvZihUKSkpOworICAgIH0KKyAgICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciwgc2l6ZV90eXBl
KSB7fQorI2VuZGlmICAvLyBfUldTVERfQUxMT0NBVE9SCisKKyAgICB2b2lkIGNvbnN0cnVjdChw
b2ludGVyIHAsIGNvbnN0IFQmIHZhbCkgeyBuZXcgKCh2b2lkICopcCkgVCh2YWwpOyB9CisgICAg
dm9pZCBkZXN0cm95KHBvaW50ZXIgcCkgeyBwLT5UOjp+VCgpOyB9CisKKyAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgcG9vbF9hbGxvY2F0b3ImIHJocykgY29uc3QgeyByZXR1cm4gJmdldEFsbG9j
YXRvcigpID09ICZyaHMuZ2V0QWxsb2NhdG9yKCk7IH0KKyAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgcG9vbF9hbGxvY2F0b3ImIHJocykgY29uc3QgeyByZXR1cm4gJmdldEFsbG9jYXRvcigpICE9
ICZyaHMuZ2V0QWxsb2NhdG9yKCk7IH0KKworICAgIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdHlwZT4oLTEpIC8gc2l6ZW9mKFQpOyB9CisgICAg
c2l6ZV90eXBlIG1heF9zaXplKGludCBzaXplKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxz
aXplX3R5cGU+KC0xKSAvIHNpemU7IH0KKworICAgIHZvaWQgc2V0QWxsb2NhdG9yKFRQb29sQWxs
b2NhdG9yKiBhKSB7IGFsbG9jYXRvciA9IGE7IH0KKyAgICBUUG9vbEFsbG9jYXRvciYgZ2V0QWxs
b2NhdG9yKCkgY29uc3QgeyByZXR1cm4gKmFsbG9jYXRvcjsgfQorCitwcm90ZWN0ZWQ6CisgICAg
VFBvb2xBbGxvY2F0b3IqIGFsbG9jYXRvcjsKK307CisKKyNlbmRpZiAvLyBfUE9PTEFMTE9DX0lO
Q0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvUHJhZ21hLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9QcmFnbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZjc0NDEyM2I4Mjg5NDk4YzMxNzkx
NGVhZDNkZjEzNjNhZTg2MTZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUHJhZ21hLmgKQEAgLTAsMCArMSwxOSBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJBR01BX0hfCisjZGVmaW5lIENPTVBJ
TEVSX1BSQUdNQV9IXworCitzdHJ1Y3QgVFByYWdtYSB7CisgICAgLy8gQnkgZGVmYXVsdCBvcHRp
bWl6YXRpb24gaXMgdHVybmVkIG9uIGFuZCBkZWJ1ZyBpcyB0dXJuZWQgb2ZmLgorICAgIFRQcmFn
bWEoKSA6IG9wdGltaXplKHRydWUpLCBkZWJ1ZyhmYWxzZSkgeyB9CisgICAgVFByYWdtYShib29s
IG8sIGJvb2wgZCkgOiBvcHRpbWl6ZShvKSwgZGVidWcoZCkgeyB9CisKKyAgICBib29sIG9wdGlt
aXplOworICAgIGJvb2wgZGVidWc7Cit9OworCisjZW5kaWYgLy8gQ09NUElMRVJfUFJBR01BX0hf
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9RdWFsaWZpZXJBbGl2ZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9RdWFsaWZpZXJBbGl2ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWJhMDg3ZTE3
NjU4ZGQ0NTU1NmQyYmRkMzUwYjhiNzZlYjdmN2MzYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1F1YWxpZmllckFsaXZl
LmNwcApAQCAtMCwwICsxLDU4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKworY2xhc3MgVEFsaXZlVHJhdmVyc2Vy
IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgorICAgIFRBbGl2ZVRyYXZlcnNl
cihUUXVhbGlmaWVyIHEpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwgZmFsc2UsIHRy
dWUpLCBmb3VuZChmYWxzZSksIHF1YWxpZmllcihxKQorICAgIHsKKyAgICB9CisKKwlib29sIHdh
c0ZvdW5kKCkgeyByZXR1cm4gZm91bmQ7IH0KKworcHJvdGVjdGVkOgorICAgIGJvb2wgZm91bmQ7
CisgICAgVFF1YWxpZmllciBxdWFsaWZpZXI7CisKKyAgICB2b2lkIHZpc2l0U3ltYm9sKFRJbnRl
cm1TeW1ib2wqKTsKKyAgICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0LCBUSW50ZXJtU2VsZWN0
aW9uKik7Cit9OworCisvLworLy8gUmVwb3J0IHdoZXRoZXIgb3Igbm90IGEgdmFyaWFibGUgb2Yg
dGhlIGdpdmVuIHF1YWxpZmllciB0eXBlCisvLyBpcyBndWFyYW50ZWVkIHdyaXR0ZW4uICBOb3Qg
YWx3YXlzIHBvc3NpYmxlIHRvIGRldGVybWluZSBpZgorLy8gaXQgaXMgd3JpdHRlbiBjb25kaXRp
b25hbGx5LgorLy8KKy8vID8/IEl0IGRvZXMgbm90IGRvIHRoaXMgd2VsbCB5ZXQsIHRoaXMgaXMg
anVzdCBhIHBsYWNlIGhvbGRlcgorLy8gdGhhdCBzaW1wbHkgZGV0ZXJtaW5lcyBpZiBpdCB3YXMg
cmVmZXJlbmNlIGF0IGFsbCwgYW55d2hlcmUuCisvLworYm9vbCBRdWFsaWZpZXJXcml0dGVuKFRJ
bnRlcm1Ob2RlKiBub2RlLCBUUXVhbGlmaWVyIHF1YWxpZmllcikKK3sKKyAgICBUQWxpdmVUcmF2
ZXJzZXIgaXQocXVhbGlmaWVyKTsKKworICAgIGlmIChub2RlKQorICAgICAgICBub2RlLT50cmF2
ZXJzZSgmaXQpOworCisgICAgcmV0dXJuIGl0Lndhc0ZvdW5kKCk7Cit9CisKK3ZvaWQgVEFsaXZl
VHJhdmVyc2VyOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQoreworICAgIC8vCisg
ICAgLy8gSWYgaXQncyB3aGF0IHdlJ3JlIGxvb2tpbmcgZm9yLCByZWNvcmQgaXQuCisgICAgLy8K
KyAgICBpZiAobm9kZS0+Z2V0UXVhbGlmaWVyKCkgPT0gcXVhbGlmaWVyKQorICAgICAgICBmb3Vu
ZCA9IHRydWU7Cit9CisKK2Jvb2wgVEFsaXZlVHJhdmVyc2VyOjp2aXNpdFNlbGVjdGlvbihWaXNp
dCBwcmVWaXNpdCwgVEludGVybVNlbGVjdGlvbiogbm9kZSkKK3sKKyAgICBpZiAod2FzRm91bmQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9RdWFs
aWZpZXJBbGl2ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvUXVhbGlmaWVyQWxpdmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NzJhMDZmNzIxOTJhZjFkMzc4Zjcy
ZDFlYTIxMGRhZTg5OWJiZjRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUXVhbGlmaWVyQWxpdmUuaApAQCAtMCwwICsx
LDcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK2Jvb2wgUXVhbGlmaWVyV3JpdHRlbihUSW50ZXJt
Tm9kZSogcm9vdCwgVFF1YWxpZmllcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZW1vdmVUcmVlLmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1JlbW92ZVRyZWUuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjkyZTVkYmJmZTE0OGU1Y2MzOTk0NzFiNzc4ZGE2NzlhMTkyN2U3NTcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9SZW1vdmVUcmVlLmNwcApAQCAtMCwwICsxLDc3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1JlbW92ZVRyZWUuaCIKKworLy8KKy8vIENvZGUgdG8gcmVjdXJz
aXZlbHkgZGVsZXRlIHRoZSBpbnRlcm1lZGlhdGUgdHJlZS4KKy8vCisKK2NsYXNzIFJlbW92ZVRy
ZWUgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworcHVibGljOgorCVJlbW92ZVRyZWUoKSA6
IFRJbnRlcm1UcmF2ZXJzZXIoZmFsc2UsIGZhbHNlLCB0cnVlKQorCXsKKwl9CisKK3Byb3RlY3Rl
ZDoKKwl2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKKwl2b2lkIHZpc2l0Q29uc3Rh
bnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiopOworCWJvb2wgdmlzaXRCaW5hcnkoVmlzaXQg
dmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKwlib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1VbmFyeSopOworCWJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1T
ZWxlY3Rpb24qKTsKKwlib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdn
cmVnYXRlKik7Cit9OworCit2b2lkIFJlbW92ZVRyZWU6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1i
b2wqIG5vZGUpCit7CisJZGVsZXRlIG5vZGU7Cit9CisKK2Jvb2wgUmVtb3ZlVHJlZTo6dmlzaXRC
aW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5vZGUpCit7CisJZGVsZXRlIG5vZGU7
CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW1vdmVUcmVlOjp2aXNpdFVuYXJ5KFZpc2l0
IHZpc2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUpCit7CisgICAgZGVsZXRlIG5vZGU7CisKKwlyZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBSZW1vdmVUcmVlOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNp
dCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK3sKKwlkZWxldGUgbm9kZTsKKworCXJldHVybiB0
cnVlOworfQorCitib29sIFJlbW92ZVRyZWU6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBU
SW50ZXJtU2VsZWN0aW9uKiBub2RlKQoreworCWRlbGV0ZSBub2RlOworCisJcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgUmVtb3ZlVHJlZTo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFu
dFVuaW9uKiBub2RlKQoreworCWRlbGV0ZSBub2RlOworfQorCisvLworLy8gRW50cnkgcG9pbnQu
CisvLwordm9pZCBSZW1vdmVBbGxUcmVlTm9kZXMoVEludGVybU5vZGUqIHJvb3QpCit7CisgICAg
UmVtb3ZlVHJlZSBpdDsKKworICAgIHJvb3QtPnRyYXZlcnNlKCZpdCk7Cit9CisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1JlbW92
ZVRyZWUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1JlbW92ZVRyZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45N2E4MjE2NzljMjNmYjkyODBiM2VkZjRhN2U4ZmNi
ZTQxNTYxNDY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvUmVtb3ZlVHJlZS5oCkBAIC0wLDAgKzEsNyBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKwordm9pZCBSZW1vdmVBbGxUcmVlTm9kZXMoVEludGVybU5vZGUqKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1JlbmFtZUZ1bmN0aW9uLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9SZW5hbWVGdW5jdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFmN2ZiMTZjNDU5NzljZDFk
YTJiZjE5ZWE4NjE3OWQyNjRkNWZmYWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZW5hbWVGdW5jdGlvbi5oCkBAIC0w
LDAgKzEsMzYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1JFTkFNRV9GVU5D
VElPTgorI2RlZmluZSBDT01QSUxFUl9SRU5BTUVfRlVOQ1RJT04KKworI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisKKy8vCisvLyBSZW5hbWVzIGEgZnVuY3Rp
b24sIGluY2x1ZGluZyBpdHMgZGVjbGFyYXRpb24gYW5kIGFueSBjYWxscyB0byBpdC4KKy8vCitj
bGFzcyBSZW5hbWVGdW5jdGlvbiA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CitwdWJsaWM6
CisgICAgUmVuYW1lRnVuY3Rpb24oY29uc3QgVFN0cmluZyYgb2xkRnVuY3Rpb25OYW1lLCBjb25z
dCBUU3RyaW5nJiBuZXdGdW5jdGlvbk5hbWUpCisgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUs
IGZhbHNlLCBmYWxzZSkKKyAgICAsIG1PbGRGdW5jdGlvbk5hbWUob2xkRnVuY3Rpb25OYW1lKQor
ICAgICwgbU5ld0Z1bmN0aW9uTmFtZShuZXdGdW5jdGlvbk5hbWUpIHt9CisKKyAgICB2aXJ0dWFs
IGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUp
CisgICAgeworICAgICAgICBUT3BlcmF0b3Igb3AgPSBub2RlLT5nZXRPcCgpOworICAgICAgICBp
ZiAoKG9wID09IEVPcEZ1bmN0aW9uIHx8IG9wID09IEVPcEZ1bmN0aW9uQ2FsbCkgJiYgbm9kZS0+
Z2V0TmFtZSgpID09IG1PbGRGdW5jdGlvbk5hbWUpCisgICAgICAgICAgICBub2RlLT5zZXROYW1l
KG1OZXdGdW5jdGlvbk5hbWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgY29uc3QgVFN0cmluZyBtT2xkRnVuY3Rpb25OYW1lOworICAgIGNvbnN0IFRTdHJp
bmcgbU5ld0Z1bmN0aW9uTmFtZTsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfUkVOQU1FX0ZV
TkNUSU9OCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9SZXdyaXRlRWxzZUJsb2Nrcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZXdyaXRlRWxzZUJsb2Nrcy5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNDhlODdjZDU3YTg4MjhhYmY2Nzc3NzlhMjI5N2NiOWIwNjMwMzJmNgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Jl
d3JpdGVFbHNlQmxvY2tzLmNwcApAQCAtMCwwICsxLDk4IEBACisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIFJl
d3JpdGVFbHNlQmxvY2tzLmNwcDogSW1wbGVtZW50YXRpb24gZm9yIHRyZWUgdHJhbnNmb3JtIHRv
IGNoYW5nZQorLy8gICBhbGwgaWYtZWxzZSBibG9ja3MgdG8gaWYtaWYgYmxvY2tzLgorLy8KKwor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUmV3cml0ZUVsc2VCbG9ja3MuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL05vZGVTZWFyY2guaCIKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgiCisKK25hbWVzcGFjZSBzaAoreworCitUSW50ZXJt
U3ltYm9sICpNYWtlTmV3VGVtcG9yYXJ5KGNvbnN0IFRTdHJpbmcgJm5hbWUsIFRCYXNpY1R5cGUg
dHlwZSkKK3sKKyAgICBUVHlwZSB2YXJpYWJsZVR5cGUodHlwZSwgRWJwSGlnaCwgRXZxSW50ZXJu
YWwpOworICAgIHJldHVybiBuZXcgVEludGVybVN5bWJvbCgtMSwgbmFtZSwgdmFyaWFibGVUeXBl
KTsKK30KKworVEludGVybUJpbmFyeSAqTWFrZU5ld0JpbmFyeShUT3BlcmF0b3Igb3AsIFRJbnRl
cm1UeXBlZCAqbGVmdCwgVEludGVybVR5cGVkICpyaWdodCwgY29uc3QgVFR5cGUgJnJlc3VsdFR5
cGUpCit7CisgICAgVEludGVybUJpbmFyeSAqYmluYXJ5ID0gbmV3IFRJbnRlcm1CaW5hcnkob3Ap
OworICAgIGJpbmFyeS0+c2V0TGVmdChsZWZ0KTsKKyAgICBiaW5hcnktPnNldFJpZ2h0KHJpZ2h0
KTsKKyAgICBiaW5hcnktPnNldFR5cGUocmVzdWx0VHlwZSk7CisgICAgcmV0dXJuIGJpbmFyeTsK
K30KKworVEludGVybVVuYXJ5ICpNYWtlTmV3VW5hcnkoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlw
ZWQgKm9wZXJhbmQpCit7CisgICAgVEludGVybVVuYXJ5ICp1bmFyeSA9IG5ldyBUSW50ZXJtVW5h
cnkob3AsIG9wZXJhbmQtPmdldFR5cGUoKSk7CisgICAgdW5hcnktPnNldE9wZXJhbmQob3BlcmFu
ZCk7CisgICAgcmV0dXJuIHVuYXJ5OworfQorCitib29sIEVsc2VCbG9ja1Jld3JpdGVyOjp2aXNp
dEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSkKK3sKKyAgICBz
d2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BTZXF1ZW5jZToKKyAg
ICAgICAgeworICAgICAgICAgICAgZm9yIChzaXplX3Qgc3RhdGVtZW50SW5kZXggPSAwOyBzdGF0
ZW1lbnRJbmRleCAhPSBub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKTsgc3RhdGVtZW50SW5kZXgr
KykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSAqc3RhdGVtZW50
ID0gbm9kZS0+Z2V0U2VxdWVuY2UoKVtzdGF0ZW1lbnRJbmRleF07CisgICAgICAgICAgICAgICAg
VEludGVybVNlbGVjdGlvbiAqc2VsZWN0aW9uID0gc3RhdGVtZW50LT5nZXRBc1NlbGVjdGlvbk5v
ZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi0+Z2V0RmFs
c2VCbG9jaygpICE9IE5VTEwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBub2RlLT5nZXRTZXF1ZW5jZSgpW3N0YXRlbWVudEluZGV4XSA9IHJld3JpdGVTZWxlY3Rpb24o
c2VsZWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNlbGVjdGlvbjsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisK
KyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitU
SW50ZXJtTm9kZSAqRWxzZUJsb2NrUmV3cml0ZXI6OnJld3JpdGVTZWxlY3Rpb24oVEludGVybVNl
bGVjdGlvbiAqc2VsZWN0aW9uKQoreworICAgIEFTU0VSVChzZWxlY3Rpb24tPmdldEZhbHNlQmxv
Y2soKSAhPSBOVUxMKTsKKworICAgIFRTdHJpbmcgdGVtcG9yYXJ5TmFtZSA9ICJjb25kXyIgKyBz
dHIobVRlbXBvcmFyeUluZGV4KyspOworICAgIFRJbnRlcm1UeXBlZCAqdHlwZWRDb25kaXRpb24g
PSBzZWxlY3Rpb24tPmdldENvbmRpdGlvbigpLT5nZXRBc1R5cGVkKCk7CisgICAgVFR5cGUgcmVz
dWx0VHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQpOworICAgIFRJbnRlcm1TeW1ib2wgKmNvbmRp
dGlvblN5bWJvbEEgPSBNYWtlTmV3VGVtcG9yYXJ5KHRlbXBvcmFyeU5hbWUsIEVidEJvb2wpOwor
ICAgIFRJbnRlcm1TeW1ib2wgKmNvbmRpdGlvblN5bWJvbEIgPSBNYWtlTmV3VGVtcG9yYXJ5KHRl
bXBvcmFyeU5hbWUsIEVidEJvb2wpOworICAgIFRJbnRlcm1TeW1ib2wgKmNvbmRpdGlvblN5bWJv
bEMgPSBNYWtlTmV3VGVtcG9yYXJ5KHRlbXBvcmFyeU5hbWUsIEVidEJvb2wpOworICAgIFRJbnRl
cm1CaW5hcnkgKnN0b3JlQ29uZGl0aW9uID0gTWFrZU5ld0JpbmFyeShFT3BJbml0aWFsaXplLCBj
b25kaXRpb25TeW1ib2xBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0eXBlZENvbmRpdGlvbiwgcmVzdWx0VHlwZSk7CisgICAgVEludGVybVVuYXJ5
ICpuZWdhdGVkQ29uZGl0aW9uID0gTWFrZU5ld1VuYXJ5KEVPcExvZ2ljYWxOb3QsIGNvbmRpdGlv
blN5bWJvbEIpOworICAgIFRJbnRlcm1TZWxlY3Rpb24gKmZhbHNlQmxvY2sgPSBuZXcgVEludGVy
bVNlbGVjdGlvbihuZWdhdGVkQ29uZGl0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24tPmdldEZhbHNlQmxvY2soKSwg
TlVMTCk7CisgICAgVEludGVybVNlbGVjdGlvbiAqbmV3SWZFbHNlID0gbmV3IFRJbnRlcm1TZWxl
Y3Rpb24oY29uZGl0aW9uU3ltYm9sQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24tPmdldFRydWVCbG9jaygpLCBmYWxzZUJs
b2NrKTsKKworICAgIFRJbnRlcm1BZ2dyZWdhdGUgKmRlY2xhcmF0aW9uID0gbmV3IFRJbnRlcm1B
Z2dyZWdhdGUoRU9wRGVjbGFyYXRpb24pOworICAgIGRlY2xhcmF0aW9uLT5nZXRTZXF1ZW5jZSgp
LnB1c2hfYmFjayhzdG9yZUNvbmRpdGlvbik7CisKKyAgICBUSW50ZXJtQWdncmVnYXRlICpibG9j
ayA9IG5ldyBUSW50ZXJtQWdncmVnYXRlKEVPcFNlcXVlbmNlKTsKKyAgICBibG9jay0+Z2V0U2Vx
dWVuY2UoKS5wdXNoX2JhY2soZGVjbGFyYXRpb24pOworICAgIGJsb2NrLT5nZXRTZXF1ZW5jZSgp
LnB1c2hfYmFjayhuZXdJZkVsc2UpOworCisgICAgcmV0dXJuIGJsb2NrOworfQorCit2b2lkIFJl
d3JpdGVFbHNlQmxvY2tzKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIEVsc2VCbG9ja1Jld3Jp
dGVyIHJld3JpdGVyOworICAgIG5vZGUtPnRyYXZlcnNlKCZyZXdyaXRlcik7Cit9CisKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1Jld3JpdGVFbHNlQmxvY2tzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9SZXdyaXRlRWxzZUJsb2Nrcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEwMjIxMzM1Y2U3
MGZjOTZkZjIzYTkwOGM0ZGU1YzA3NWUwNDljMWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZXdyaXRlRWxzZUJsb2Nr
cy5oCkBAIC0wLDAgKzEsMzkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gUmV3cml0ZUVsc2VCbG9ja3Mu
aDogUHJvdG90eXBlIGZvciB0cmVlIHRyYW5zZm9ybSB0byBjaGFuZ2UKKy8vICAgYWxsIGlmLWVs
c2UgYmxvY2tzIHRvIGlmLWlmIGJsb2Nrcy4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUkVXUklU
RV9FTFNFX0JMT0NLU19IXworI2RlZmluZSBDT01QSUxFUl9SRVdSSVRFX0VMU0VfQkxPQ0tTX0hf
CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgorCituYW1l
c3BhY2Ugc2gKK3sKKworY2xhc3MgRWxzZUJsb2NrUmV3cml0ZXIgOiBwdWJsaWMgVEludGVybVRy
YXZlcnNlcgoreworICBwdWJsaWM6CisgICAgICBFbHNlQmxvY2tSZXdyaXRlcigpCisgICAgICAg
ICAgOiBUSW50ZXJtVHJhdmVyc2VyKGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpCisgICAgICAg
ICAgLCBtVGVtcG9yYXJ5SW5kZXgoMCkKKyAgICAgIHt9CisKKyAgcHJvdGVjdGVkOgorICAgIGJv
b2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKmFnZ3JlZ2F0
ZSk7CisKKyAgcHJpdmF0ZToKKyAgICBpbnQgbVRlbXBvcmFyeUluZGV4OworCisgICAgVEludGVy
bU5vZGUgKnJld3JpdGVTZWxlY3Rpb24oVEludGVybVNlbGVjdGlvbiAqc2VsZWN0aW9uKTsKK307
CisKK3ZvaWQgUmV3cml0ZUVsc2VCbG9ja3MoVEludGVybU5vZGUgKm5vZGUpOworCit9CisKKyNl
bmRpZiAvLyBDT01QSUxFUl9SRVdSSVRFX0VMU0VfQkxPQ0tTX0hfCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TZWFyY2hTeW1ib2wu
Y3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU2Vh
cmNoU3ltYm9sLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNzhjODRlMzcwZGFmNzNhNDYxNWYyOGNiZWRhN2Yw
YjMzOTMxYzU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvU2VhcmNoU3ltYm9sLmNwcApAQCAtMCwwICsxLDM4IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworLy8gU2VhcmNoU3ltYm9sIGlzIGFuIEFTVCB0cmF2ZXJzZXIgdG8g
ZGV0ZWN0IHRoZSB1c2Ugb2YgYSBnaXZlbiBzeW1ib2wgbmFtZQorLy8KKworI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvU2VhcmNoU3ltYm9sLmgiCisKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL0luZm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9PdXRw
dXRITFNMLmgiCisKK25hbWVzcGFjZSBzaAoreworU2VhcmNoU3ltYm9sOjpTZWFyY2hTeW1ib2wo
Y29uc3QgVFN0cmluZyAmc3ltYm9sKSA6IG1TeW1ib2woc3ltYm9sKQoreworICAgIG1hdGNoID0g
ZmFsc2U7Cit9CisKK3ZvaWQgU2VhcmNoU3ltYm9sOjp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9k
ZSkKK3sKKyAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKK30KKwordm9pZCBTZWFyY2hTeW1ib2w6
OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUpCit7CisgICAgaWYgKHN5bWJv
bE5vZGUtPmdldFN5bWJvbCgpID09IG1TeW1ib2wpCisgICAgeworICAgICAgICBtYXRjaCA9IHRy
dWU7CisgICAgfQorfQorCitib29sIFNlYXJjaFN5bWJvbDo6Zm91bmRNYXRjaCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1hdGNoOworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU2VhcmNoU3ltYm9sLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TZWFyY2hTeW1ib2wuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44ZGRkM2NiMWFjM2ExODJkZTllMjkxZjE1MWZjM2IxZWQxYWE5OWFmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvU2VhcmNoU3ltYm9sLmgKQEAgLTAsMCArMSwzMyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8v
IFNlYXJjaFN5bWJvbCBpcyBhbiBBU1QgdHJhdmVyc2VyIHRvIGRldGVjdCB0aGUgdXNlIG9mIGEg
Z2l2ZW4gc3ltYm9sIG5hbWUKKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfU0VBUkNIU1lNQk9MX0hf
CisjZGVmaW5lIENPTVBJTEVSX1NFQVJDSFNZTUJPTF9IXworCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1BhcnNlQ29udGV4dC5oIgorCituYW1lc3BhY2Ugc2gKK3sKK2NsYXNzIFNlYXJjaFN5bWJvbCA6
IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBTZWFyY2hTeW1ib2wo
Y29uc3QgVFN0cmluZyAmc3ltYm9sKTsKKworICAgIHZvaWQgdHJhdmVyc2UoVEludGVybU5vZGUg
Km5vZGUpOworICAgIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqc3ltYm9sTm9kZSk7
CisKKyAgICBib29sIGZvdW5kTWF0Y2goKSBjb25zdDsKKworICBwcm90ZWN0ZWQ6CisgICAgY29u
c3QgVFN0cmluZyAmbVN5bWJvbDsKKyAgICBib29sIG1hdGNoOworfTsKK30KKworI2VuZGlmICAg
Ly8gQ09NUElMRVJfU0VBUkNIU1lNQk9MX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU2hIYW5kbGUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41NGFlMjc4NTJkZDUzMjliMGQ4ZTNkZGFjNGUwM2JjYjE4MDY1ZWNhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU2hI
YW5kbGUuaApAQCAtMCwwICsxLDE3OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBf
U0hIQU5ETEVfSU5DTFVERURfCisjZGVmaW5lIF9TSEhBTkRMRV9JTkNMVURFRF8KKworLy8KKy8v
IE1hY2hpbmUgaW5kZXBlbmRlbnQgcGFydCBvZiB0aGUgY29tcGlsZXIgcHJpdmF0ZSBvYmplY3Rz
CisvLyBzZW50IGFzIFNoSGFuZGxlIHRvIHRoZSBkcml2ZXIuCisvLworLy8gVGhpcyBzaG91bGQg
bm90IGJlIGluY2x1ZGVkIGJ5IGRyaXZlciBjb2RlLgorLy8KKworI2luY2x1ZGUgIkdMU0xBTkcv
U2hhZGVyTGFuZy5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9CdWlsdEluRnVu
Y3Rpb25FbXVsYXRvci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRXh0ZW5zaW9u
QmVoYXZpb3IuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0hhc2hOYW1lcy5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9WYXJpYWJsZUluZm8uaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jb21waWxlci9BcnJh
eUJvdW5kc0NsYW1wZXIuaCIKKworY2xhc3MgTG9uZ05hbWVNYXA7CitjbGFzcyBUQ29tcGlsZXI7
CitjbGFzcyBURGVwZW5kZW5jeUdyYXBoOworY2xhc3MgVHJhbnNsYXRvckhMU0w7CisKKy8vCisv
LyBIZWxwZXIgZnVuY3Rpb24gdG8gaWRlbnRpZnkgc3BlY3MgdGhhdCBhcmUgYmFzZWQgb24gdGhl
IFdlYkdMIHNwZWMsCisvLyBsaWtlIHRoZSBDU1MgU2hhZGVycyBzcGVjLgorLy8KK2Jvb2wgaXNX
ZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNwZWMgc3BlYyk7CisKKy8vCisvLyBUaGUgYmFzZSBjbGFz
cyB1c2VkIHRvIGJhY2sgaGFuZGxlcyByZXR1cm5lZCB0byB0aGUgZHJpdmVyLgorLy8KK2NsYXNz
IFRTaEhhbmRsZUJhc2UgeworcHVibGljOgorICAgIFRTaEhhbmRsZUJhc2UoKTsKKyAgICB2aXJ0
dWFsIH5UU2hIYW5kbGVCYXNlKCk7CisgICAgdmlydHVhbCBUQ29tcGlsZXIqIGdldEFzQ29tcGls
ZXIoKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBUcmFuc2xhdG9ySExTTCogZ2V0QXNUcmFu
c2xhdG9ySExTTCgpIHsgcmV0dXJuIDA7IH0KKworcHJvdGVjdGVkOgorICAgIC8vIE1lbW9yeSBh
bGxvY2F0b3IuIEFsbG9jYXRlcyBhbmQgdHJhY2tzIG1lbW9yeSByZXF1aXJlZCBieSB0aGUgY29t
cGlsZXIuCisgICAgLy8gRGVhbGxvY2F0ZXMgYWxsIG1lbW9yeSB3aGVuIGNvbXBpbGVyIGlzIGRl
c3RydWN0ZWQuCisgICAgVFBvb2xBbGxvY2F0b3IgYWxsb2NhdG9yOworfTsKKworLy8KKy8vIFRo
ZSBiYXNlIGNsYXNzIGZvciB0aGUgbWFjaGluZSBkZXBlbmRlbnQgY29tcGlsZXIgdG8gZGVyaXZl
IGZyb20KKy8vIGZvciBtYW5hZ2luZyBvYmplY3QgY29kZSBmcm9tIHRoZSBjb21waWxlLgorLy8K
K2NsYXNzIFRDb21waWxlciA6IHB1YmxpYyBUU2hIYW5kbGVCYXNlIHsKK3B1YmxpYzoKKyAgICBU
Q29tcGlsZXIoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjKTsKKyAgICB2aXJ0
dWFsIH5UQ29tcGlsZXIoKTsKKyAgICB2aXJ0dWFsIFRDb21waWxlciogZ2V0QXNDb21waWxlcigp
IHsgcmV0dXJuIHRoaXM7IH0KKworICAgIGJvb2wgSW5pdChjb25zdCBTaEJ1aWx0SW5SZXNvdXJj
ZXMmIHJlc291cmNlcyk7CisgICAgYm9vbCBjb21waWxlKGNvbnN0IGNoYXIqIGNvbnN0IHNoYWRl
clN0cmluZ3NbXSwKKyAgICAgICAgICAgICAgICAgc2l6ZV90IG51bVN0cmluZ3MsCisgICAgICAg
ICAgICAgICAgIGludCBjb21waWxlT3B0aW9ucyk7CisKKyAgICAvLyBHZXQgcmVzdWx0cyBvZiB0
aGUgbGFzdCBjb21waWxhdGlvbi4KKyAgICBUSW5mb1NpbmsmIGdldEluZm9TaW5rKCkgeyByZXR1
cm4gaW5mb1Npbms7IH0KKyAgICBjb25zdCBUVmFyaWFibGVJbmZvTGlzdCYgZ2V0QXR0cmlicygp
IGNvbnN0IHsgcmV0dXJuIGF0dHJpYnM7IH0KKyAgICBjb25zdCBUVmFyaWFibGVJbmZvTGlzdCYg
Z2V0VW5pZm9ybXMoKSBjb25zdCB7IHJldHVybiB1bmlmb3JtczsgfQorICAgIGNvbnN0IFRWYXJp
YWJsZUluZm9MaXN0JiBnZXRWYXJ5aW5ncygpIGNvbnN0IHsgcmV0dXJuIHZhcnlpbmdzOyB9Cisg
ICAgaW50IGdldE1hcHBlZE5hbWVNYXhMZW5ndGgoKSBjb25zdDsKKworICAgIFNoSGFzaEZ1bmN0
aW9uNjQgZ2V0SGFzaEZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gaGFzaEZ1bmN0aW9uOyB9Cisg
ICAgTmFtZU1hcCYgZ2V0TmFtZU1hcCgpIHsgcmV0dXJuIG5hbWVNYXA7IH0KKyAgICBUU3ltYm9s
VGFibGUmIGdldFN5bWJvbFRhYmxlKCkgeyByZXR1cm4gc3ltYm9sVGFibGU7IH0KKworcHJvdGVj
dGVkOgorICAgIFNoU2hhZGVyVHlwZSBnZXRTaGFkZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gc2hh
ZGVyVHlwZTsgfQorICAgIFNoU2hhZGVyU3BlYyBnZXRTaGFkZXJTcGVjKCkgY29uc3QgeyByZXR1
cm4gc2hhZGVyU3BlYzsgfQorICAgIC8vIEluaXRpYWxpemUgc3ltYm9sLXRhYmxlIHdpdGggYnVp
bHQtaW4gc3ltYm9scy4KKyAgICBib29sIEluaXRCdWlsdEluU3ltYm9sVGFibGUoY29uc3QgU2hC
dWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMpOworICAgIC8vIENsZWFycyB0aGUgcmVzdWx0cyBm
cm9tIHRoZSBwcmV2aW91cyBjb21waWxhdGlvbi4KKyAgICB2b2lkIGNsZWFyUmVzdWx0cygpOwor
ICAgIC8vIFJldHVybiB0cnVlIGlmIGZ1bmN0aW9uIHJlY3Vyc2lvbiBpcyBkZXRlY3RlZCBvciBj
YWxsIGRlcHRoIGV4Y2VlZGVkLgorICAgIGJvb2wgZGV0ZWN0Q2FsbERlcHRoKFRJbnRlcm1Ob2Rl
KiByb290LCBUSW5mb1NpbmsmIGluZm9TaW5rLCBib29sIGxpbWl0Q2FsbFN0YWNrRGVwdGgpOwor
ICAgIC8vIFJld3JpdGVzIGEgc2hhZGVyJ3MgaW50ZXJtZWRpYXRlIHRyZWUgYWNjb3JkaW5nIHRv
IHRoZSBDU1MgU2hhZGVycyBzcGVjLgorICAgIHZvaWQgcmV3cml0ZUNTU1NoYWRlcihUSW50ZXJt
Tm9kZSogcm9vdCk7CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzaGFkZXIgZG9l
cyBub3QgZXhjZWVkIHRoZSBtaW5pbXVtCisgICAgLy8gZnVuY3Rpb25hbGl0eSBtYW5kYXRlZCBp
biBHTFNMIDEuMCBzcGVjIEFwcGVuZGl4IEEuCisgICAgYm9vbCB2YWxpZGF0ZUxpbWl0YXRpb25z
KFRJbnRlcm1Ob2RlKiByb290KTsKKyAgICAvLyBDb2xsZWN0IGluZm8gZm9yIGFsbCBhdHRyaWJz
LCB1bmlmb3JtcywgdmFyeWluZ3MuCisgICAgdm9pZCBjb2xsZWN0VmFyaWFibGVzKFRJbnRlcm1O
b2RlKiByb290KTsKKyAgICAvLyBNYXAgbG9uZyB2YXJpYWJsZSBuYW1lcyBpbnRvIHNob3J0ZXIg
b25lcy4KKyAgICB2b2lkIG1hcExvbmdWYXJpYWJsZU5hbWVzKFRJbnRlcm1Ob2RlKiByb290KTsK
KyAgICAvLyBUcmFuc2xhdGUgdG8gb2JqZWN0IGNvZGUuCisgICAgdmlydHVhbCB2b2lkIHRyYW5z
bGF0ZShUSW50ZXJtTm9kZSogcm9vdCkgPSAwOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiwgYWZ0
ZXIgYXBwbHlpbmcgdGhlIHBhY2tpbmcgcnVsZXMgaW4gdGhlIEdMU0wgMS4wMTcgc3BlYworICAg
IC8vIEFwcGVuZGl4IEEsIHNlY3Rpb24gNywgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2UgdG9vIG1h
bnkgdW5pZm9ybXMuCisgICAgYm9vbCBlbmZvcmNlUGFja2luZ1Jlc3RyaWN0aW9ucygpOworICAg
IC8vIEluc2VydCBzdGF0ZW1lbnRzIHRvIGluaXRpYWxpemUgdmFyeWluZ3Mgd2l0aG91dCBzdGF0
aWMgdXNlIGluIHRoZSBiZWdpbm5pbmcKKyAgICAvLyBvZiBtYWluKCkuIEl0IGlzIHRvIHdvcmsg
YXJvdW5kIGEgTWFjIGRyaXZlciB3aGVyZSBzdWNoIHZhcnlpbmdzIGluIGEgdmVydGV4CisgICAg
Ly8gc2hhZGVyIG1heSBiZSBvcHRpbWl6ZWQgb3V0IGluY29ycmVjdGx5IGF0IGNvbXBpbGUgdGlt
ZSwgY2F1c2luZyBhIGxpbmsgZmFpbHVyZS4KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBv
bmx5IGJlIGFwcGxpZWQgdG8gdmVydGV4IHNoYWRlcnMuCisgICAgdm9pZCBpbml0aWFsaXplVmFy
eWluZ3NXaXRob3V0U3RhdGljVXNlKFRJbnRlcm1Ob2RlKiByb290KTsKKyAgICAvLyBJbnNlcnQg
Z2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApIHRvIHRoZSBiZWdpbm5pbmcgb2YgbWFpbigpLgor
ICAgIC8vIEl0IGlzIHRvIHdvcmsgYXJvdW5kIGEgTGludXggZHJpdmVyIGJ1ZyB3aGVyZSBtaXNz
aW5nIHRoaXMgY2F1c2VzIGNvbXBpbGUgZmFpbHVyZQorICAgIC8vIHdoaWxlIHNwZWMgc2F5cyBp
dCBpcyBhbGxvd2VkLgorICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgYXBwbGll
ZCB0byB2ZXJ0ZXggc2hhZGVycy4KKyAgICB2b2lkIGluaXRpYWxpemVHTFBvc2l0aW9uKFRJbnRl
cm1Ob2RlKiByb290KTsKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRlciBwYXNzZXMg
dGhlIHJlc3RyaWN0aW9ucyB0aGF0IGFpbSB0byBwcmV2ZW50IHRpbWluZyBhdHRhY2tzLgorICAg
IGJvb2wgZW5mb3JjZVRpbWluZ1Jlc3RyaWN0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCwgYm9vbCBv
dXRwdXRHcmFwaCk7CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzaGFkZXIgZG9lcyBub3Qg
dXNlIHNhbXBsZXJzLgorICAgIGJvb2wgZW5mb3JjZVZlcnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0
aW9ucyhUSW50ZXJtTm9kZSogcm9vdCk7CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzaGFk
ZXIgZG9lcyBub3QgdXNlIHNhbXBsZXIgZGVwZW5kZW50IHZhbHVlcyB0byBhZmZlY3QgY29udHJv
bCAKKyAgICAvLyBmbG93IG9yIGluIG9wZXJhdGlvbnMgd2hvc2UgdGltZSBjYW4gZGVwZW5kIG9u
IHRoZSBpbnB1dCB2YWx1ZXMuCisgICAgYm9vbCBlbmZvcmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdS
ZXN0cmljdGlvbnMoY29uc3QgVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpOworICAgIC8vIFJldHVy
biB0cnVlIGlmIHRoZSBtYXhpbXVtIGV4cHJlc3Npb24gY29tcGxleGl0eSBiZWxvdyB0aGUgbGlt
aXQuCisgICAgYm9vbCBsaW1pdEV4cHJlc3Npb25Db21wbGV4aXR5KFRJbnRlcm1Ob2RlKiByb290
KTsKKyAgICAvLyBHZXQgYnVpbHQtaW4gZXh0ZW5zaW9ucyB3aXRoIGRlZmF1bHQgYmVoYXZpb3Iu
CisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBnZXRFeHRlbnNpb25CZWhhdmlvcigpIGNv
bnN0OworICAgIC8vIEdldCB0aGUgcmVzb3VyY2VzIHNldCBieSBJbml0QnVpbHRJblN5bWJvbFRh
YmxlCisgICAgY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiBnZXRSZXNvdXJjZXMoKSBjb25zdDsK
KworICAgIGNvbnN0IEFycmF5Qm91bmRzQ2xhbXBlciYgZ2V0QXJyYXlCb3VuZHNDbGFtcGVyKCkg
Y29uc3Q7CisgICAgU2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBnZXRBcnJheUluZGV4Q2xh
bXBpbmdTdHJhdGVneSgpIGNvbnN0OworICAgIGNvbnN0IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9y
JiBnZXRCdWlsdEluRnVuY3Rpb25FbXVsYXRvcigpIGNvbnN0OworCitwcml2YXRlOgorICAgIFNo
U2hhZGVyVHlwZSBzaGFkZXJUeXBlOworICAgIFNoU2hhZGVyU3BlYyBzaGFkZXJTcGVjOworCisg
ICAgaW50IG1heFVuaWZvcm1WZWN0b3JzOworICAgIGludCBtYXhFeHByZXNzaW9uQ29tcGxleGl0
eTsKKyAgICBpbnQgbWF4Q2FsbFN0YWNrRGVwdGg7CisKKyAgICBTaEJ1aWx0SW5SZXNvdXJjZXMg
Y29tcGlsZVJlc291cmNlczsKKworICAgIC8vIEJ1aWx0LWluIHN5bWJvbCB0YWJsZSBmb3IgdGhl
IGdpdmVuIGxhbmd1YWdlLCBzcGVjLCBhbmQgcmVzb3VyY2VzLgorICAgIC8vIEl0IGlzIHByZXNl
cnZlZCBmcm9tIGNvbXBpbGUtdG8tY29tcGlsZS4KKyAgICBUU3ltYm9sVGFibGUgc3ltYm9sVGFi
bGU7CisgICAgLy8gQnVpbHQtaW4gZXh0ZW5zaW9ucyB3aXRoIGRlZmF1bHQgYmVoYXZpb3IuCisg
ICAgVEV4dGVuc2lvbkJlaGF2aW9yIGV4dGVuc2lvbkJlaGF2aW9yOworICAgIGJvb2wgZnJhZ21l
bnRQcmVjaXNpb25IaWdoOworCisgICAgQXJyYXlCb3VuZHNDbGFtcGVyIGFycmF5Qm91bmRzQ2xh
bXBlcjsKKyAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IGNsYW1waW5nU3RyYXRlZ3k7
CisgICAgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IgYnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I7CisK
KyAgICAvLyBSZXN1bHRzIG9mIGNvbXBpbGF0aW9uLgorICAgIFRJbmZvU2luayBpbmZvU2luazsg
IC8vIE91dHB1dCBzaW5rLgorICAgIFRWYXJpYWJsZUluZm9MaXN0IGF0dHJpYnM7ICAvLyBBY3Rp
dmUgYXR0cmlidXRlcyBpbiB0aGUgY29tcGlsZWQgc2hhZGVyLgorICAgIFRWYXJpYWJsZUluZm9M
aXN0IHVuaWZvcm1zOyAgLy8gQWN0aXZlIHVuaWZvcm1zIGluIHRoZSBjb21waWxlZCBzaGFkZXIu
CisgICAgVFZhcmlhYmxlSW5mb0xpc3QgdmFyeWluZ3M7ICAvLyBWYXJ5aW5ncyBpbiB0aGUgY29t
cGlsZWQgc2hhZGVyLgorCisgICAgLy8gQ2FjaGVkIGNvcHkgb2YgdGhlIHJlZi1jb3VudGVkIHNp
bmdsZXRvbi4KKyAgICBMb25nTmFtZU1hcCogbG9uZ05hbWVNYXA7CisKKyAgICAvLyBuYW1lIGhh
c2hpbmcuCisgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb247CisgICAgTmFtZU1hcCBu
YW1lTWFwOworfTsKKworLy8KKy8vIFRoaXMgaXMgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBt
YWNoaW5lIGluZGVwZW5kZW50IGNvZGUKKy8vIGFuZCB0aGUgbWFjaGluZSBkZXBlbmRlbnQgY29k
ZS4KKy8vCisvLyBUaGUgbWFjaGluZSBkZXBlbmRlbnQgY29kZSBzaG91bGQgZGVyaXZlIGZyb20g
dGhlIGNsYXNzZXMKKy8vIGFib3ZlLiBUaGVuIENvbnN0cnVjdCooKSBhbmQgRGVsZXRlKigpIHdp
bGwgY3JlYXRlIGFuZCAKKy8vIGRlc3Ryb3kgdGhlIG1hY2hpbmUgZGVwZW5kZW50IG9iamVjdHMs
IHdoaWNoIGNvbnRhaW4gdGhlCisvLyBhYm92ZSBtYWNoaW5lIGluZGVwZW5kZW50IGluZm9ybWF0
aW9uLgorLy8KK1RDb21waWxlciogQ29uc3RydWN0Q29tcGlsZXIoCisgICAgU2hTaGFkZXJUeXBl
IHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBTaFNoYWRlck91dHB1dCBvdXRwdXQpOwordm9pZCBE
ZWxldGVDb21waWxlcihUQ29tcGlsZXIqKTsKKworI2VuZGlmIC8vIF9TSEhBTkRMRV9JTkNMVURF
RF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1NoYWRlckxhbmcuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvU2hhZGVyTGFuZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjA4MjM3ODYwYzE1ODE2
ZTdmNDlhZDI1NWViYWYwNTdmNGJjZjczMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1NoYWRlckxhbmcuY3BwCkBAIC0w
LDAgKzEsMzkwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLworLy8gSW1wbGVtZW50IHRoZSB0
b3AtbGV2ZWwgb2YgaW50ZXJmYWNlIHRvIHRoZSBjb21waWxlciwKKy8vIGFzIGRlZmluZWQgaW4g
U2hhZGVyTGFuZy5oCisvLworCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVEbGwuaCIKKyNpbmNsdWRlICJj
b21waWxlci9wcmVwcm9jZXNzb3IvbGVuZ3RoX2xpbWl0cy5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvU2hIYW5kbGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JITFNMLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZVBh
Y2tlci5oIgorCisvLworLy8gVGhpcyBpcyB0aGUgcGxhdGZvcm0gaW5kZXBlbmRlbnQgaW50ZXJm
YWNlIGJldHdlZW4gYW4gT0dMIGRyaXZlcgorLy8gYW5kIHRoZSBzaGFkaW5nIGxhbmd1YWdlIGNv
bXBpbGVyLgorLy8KKworc3RhdGljIGJvb2wgY2hlY2tWYXJpYWJsZU1heExlbmd0aHMoY29uc3Qg
U2hIYW5kbGUgaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IGV4cGVjdGVkVmFsdWUpCit7CisgICAgc2l6ZV90IGFjdGl2ZVVuaWZvcm1MaW1pdCA9IDA7
CisgICAgU2hHZXRJbmZvKGhhbmRsZSwgU0hfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwgJmFj
dGl2ZVVuaWZvcm1MaW1pdCk7CisgICAgc2l6ZV90IGFjdGl2ZUF0dHJpYkxpbWl0ID0gMDsKKyAg
ICBTaEdldEluZm8oaGFuZGxlLCBTSF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsICZhY3Rp
dmVBdHRyaWJMaW1pdCk7CisgICAgc2l6ZV90IHZhcnlpbmdMaW1pdCA9IDA7CisgICAgU2hHZXRJ
bmZvKGhhbmRsZSwgU0hfVkFSWUlOR19NQVhfTEVOR1RILCAmdmFyeWluZ0xpbWl0KTsKKyAgICBy
ZXR1cm4gKGV4cGVjdGVkVmFsdWUgPT0gYWN0aXZlVW5pZm9ybUxpbWl0ICYmCisgICAgICAgICAg
ICBleHBlY3RlZFZhbHVlID09IGFjdGl2ZUF0dHJpYkxpbWl0ICYmCisgICAgICAgICAgICBleHBl
Y3RlZFZhbHVlID09IHZhcnlpbmdMaW1pdCk7Cit9CisKK3N0YXRpYyBib29sIGNoZWNrTWFwcGVk
TmFtZU1heExlbmd0aChjb25zdCBTaEhhbmRsZSBoYW5kbGUsIHNpemVfdCBleHBlY3RlZFZhbHVl
KQoreworICAgIHNpemVfdCBtYXBwZWROYW1lTWF4TGVuZ3RoID0gMDsKKyAgICBTaEdldEluZm8o
aGFuZGxlLCBTSF9NQVBQRURfTkFNRV9NQVhfTEVOR1RILCAmbWFwcGVkTmFtZU1heExlbmd0aCk7
CisgICAgcmV0dXJuIChleHBlY3RlZFZhbHVlID09IG1hcHBlZE5hbWVNYXhMZW5ndGgpOworfQor
CisvLworLy8gRHJpdmVyIG11c3QgY2FsbCB0aGlzIGZpcnN0LCBvbmNlLCBiZWZvcmUgZG9pbmcg
YW55IG90aGVyIGNvbXBpbGVyIG9wZXJhdGlvbnMuCisvLyBTdWJzZXF1ZW50IGNhbGxzIHRvIHRo
aXMgZnVuY3Rpb24gYXJlIG5vLW9wLgorLy8KK2ludCBTaEluaXRpYWxpemUoKQoreworICAgIHN0
YXRpYyBjb25zdCBib29sIGtJbml0aWFsaXplZCA9IEluaXRQcm9jZXNzKCk7CisgICAgcmV0dXJu
IGtJbml0aWFsaXplZCA/IDEgOiAwOworfQorCisvLworLy8gQ2xlYW51cCBzeW1ib2wgdGFibGVz
CisvLworaW50IFNoRmluYWxpemUoKQoreworICAgIERldGFjaFByb2Nlc3MoKTsKKyAgICByZXR1
cm4gMTsKK30KKworLy8KKy8vIEluaXRpYWxpemUgYnVpbHQtaW4gcmVzb3VyY2VzIHdpdGggbWlu
aW11bSBleHBlY3RlZCB2YWx1ZXMuCisvLwordm9pZCBTaEluaXRCdWlsdEluUmVzb3VyY2VzKFNo
QnVpbHRJblJlc291cmNlcyogcmVzb3VyY2VzKQoreworICAgIC8vIENvbnN0YW50cy4KKyAgICBy
ZXNvdXJjZXMtPk1heFZlcnRleEF0dHJpYnMgPSA4OworICAgIHJlc291cmNlcy0+TWF4VmVydGV4
VW5pZm9ybVZlY3RvcnMgPSAxMjg7CisgICAgcmVzb3VyY2VzLT5NYXhWYXJ5aW5nVmVjdG9ycyA9
IDg7CisgICAgcmVzb3VyY2VzLT5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyA9IDA7CisgICAg
cmVzb3VyY2VzLT5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gODsKKyAgICByZXNvdXJj
ZXMtPk1heFRleHR1cmVJbWFnZVVuaXRzID0gODsKKyAgICByZXNvdXJjZXMtPk1heEZyYWdtZW50
VW5pZm9ybVZlY3RvcnMgPSAxNjsKKyAgICByZXNvdXJjZXMtPk1heERyYXdCdWZmZXJzID0gMTsK
KworICAgIC8vIEV4dGVuc2lvbnMuCisgICAgcmVzb3VyY2VzLT5PRVNfc3RhbmRhcmRfZGVyaXZh
dGl2ZXMgPSAwOworICAgIHJlc291cmNlcy0+T0VTX0VHTF9pbWFnZV9leHRlcm5hbCA9IDA7Cisg
ICAgcmVzb3VyY2VzLT5BUkJfdGV4dHVyZV9yZWN0YW5nbGUgPSAwOworICAgIHJlc291cmNlcy0+
RVhUX2RyYXdfYnVmZmVycyA9IDA7CisgICAgcmVzb3VyY2VzLT5FWFRfZnJhZ19kZXB0aCA9IDA7
CisKKyAgICAvLyBEaXNhYmxlIGhpZ2hwIHByZWNpc2lvbiBpbiBmcmFnbWVudCBzaGFkZXIgYnkg
ZGVmYXVsdC4KKyAgICByZXNvdXJjZXMtPkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9IDA7CisKKyAg
ICAvLyBEaXNhYmxlIG5hbWUgaGFzaGluZyBieSBkZWZhdWx0LgorICAgIHJlc291cmNlcy0+SGFz
aEZ1bmN0aW9uID0gTlVMTDsKKworICAgIHJlc291cmNlcy0+QXJyYXlJbmRleENsYW1waW5nU3Ry
YXRlZ3kgPSBTSF9DTEFNUF9XSVRIX0NMQU1QX0lOVFJJTlNJQzsKKworICAgIHJlc291cmNlcy0+
TWF4RXhwcmVzc2lvbkNvbXBsZXhpdHkgPSAyNTY7CisgICAgcmVzb3VyY2VzLT5NYXhDYWxsU3Rh
Y2tEZXB0aCA9IDI1NjsKK30KKworLy8KKy8vIERyaXZlciBjYWxscyB0aGVzZSB0byBjcmVhdGUg
YW5kIGRlc3Ryb3kgY29tcGlsZXIgb2JqZWN0cy4KKy8vCitTaEhhbmRsZSBTaENvbnN0cnVjdENv
bXBpbGVyKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU2hTaGFkZXJPdXRwdXQgb3V0cHV0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMqIHJlc291cmNlcykKK3sKKyAg
ICBUU2hIYW5kbGVCYXNlKiBiYXNlID0gc3RhdGljX2Nhc3Q8VFNoSGFuZGxlQmFzZSo+KENvbnN0
cnVjdENvbXBpbGVyKHR5cGUsIHNwZWMsIG91dHB1dCkpOworICAgIFRDb21waWxlciogY29tcGls
ZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7CisgICAgaWYgKGNvbXBpbGVyID09IDApCisgICAg
ICAgIHJldHVybiAwOworCisgICAgLy8gR2VuZXJhdGUgYnVpbHQtaW4gc3ltYm9sIHRhYmxlLgor
ICAgIGlmICghY29tcGlsZXItPkluaXQoKnJlc291cmNlcykpIHsKKyAgICAgICAgU2hEZXN0cnVj
dChiYXNlKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KGJhc2UpOworfQorCit2b2lkIFNoRGVzdHJ1Y3QoU2hIYW5kbGUgaGFu
ZGxlKQoreworICAgIGlmIChoYW5kbGUgPT0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgVFNo
SGFuZGxlQmFzZSogYmFzZSA9IHN0YXRpY19jYXN0PFRTaEhhbmRsZUJhc2UqPihoYW5kbGUpOwor
CisgICAgaWYgKGJhc2UtPmdldEFzQ29tcGlsZXIoKSkKKyAgICAgICAgRGVsZXRlQ29tcGlsZXIo
YmFzZS0+Z2V0QXNDb21waWxlcigpKTsKK30KKworLy8KKy8vIERvIGFuIGFjdHVhbCBjb21waWxl
IG9uIHRoZSBnaXZlbiBzdHJpbmdzLiAgVGhlIHJlc3VsdCBpcyBsZWZ0IAorLy8gaW4gdGhlIGdp
dmVuIGNvbXBpbGUgb2JqZWN0LgorLy8KKy8vIFJldHVybjogIFRoZSByZXR1cm4gdmFsdWUgb2Yg
U2hDb21waWxlIGlzIHJlYWxseSBib29sZWFuLCBpbmRpY2F0aW5nCisvLyBzdWNjZXNzIG9yIGZh
aWx1cmUuCisvLworaW50IFNoQ29tcGlsZSgKKyAgICBjb25zdCBTaEhhbmRsZSBoYW5kbGUsCisg
ICAgY29uc3QgY2hhciogY29uc3Qgc2hhZGVyU3RyaW5nc1tdLAorICAgIHNpemVfdCBudW1TdHJp
bmdzLAorICAgIGludCBjb21waWxlT3B0aW9ucykKK3sKKyAgICBpZiAoaGFuZGxlID09IDApCisg
ICAgICAgIHJldHVybiAwOworCisgICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8VFNoSGFuZGxlQmFzZSo+KGhhbmRsZSk7CisgICAgVENvbXBpbGVyKiBjb21waWxlciA9
IGJhc2UtPmdldEFzQ29tcGlsZXIoKTsKKyAgICBpZiAoY29tcGlsZXIgPT0gMCkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBib29sIHN1Y2Nlc3MgPSBjb21waWxlci0+Y29tcGlsZShzaGFkZXJT
dHJpbmdzLCBudW1TdHJpbmdzLCBjb21waWxlT3B0aW9ucyk7CisgICAgcmV0dXJuIHN1Y2Nlc3Mg
PyAxIDogMDsKK30KKwordm9pZCBTaEdldEluZm8oY29uc3QgU2hIYW5kbGUgaGFuZGxlLCBTaFNo
YWRlckluZm8gcG5hbWUsIHNpemVfdCogcGFyYW1zKQoreworICAgIGlmICghaGFuZGxlIHx8ICFw
YXJhbXMpCisgICAgICAgIHJldHVybjsKKworICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0
aWNfY2FzdDxUU2hIYW5kbGVCYXNlKj4oaGFuZGxlKTsKKyAgICBUQ29tcGlsZXIqIGNvbXBpbGVy
ID0gYmFzZS0+Z2V0QXNDb21waWxlcigpOworICAgIGlmICghY29tcGlsZXIpIHJldHVybjsKKwor
ICAgIHN3aXRjaChwbmFtZSkKKyAgICB7CisgICAgY2FzZSBTSF9JTkZPX0xPR19MRU5HVEg6Cisg
ICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0SW5mb1NpbmsoKS5pbmZvLnNpemUoKSArIDE7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hfT0JKRUNUX0NPREVfTEVOR1RIOgorICAgICAg
ICAqcGFyYW1zID0gY29tcGlsZXItPmdldEluZm9TaW5rKCkub2JqLnNpemUoKSArIDE7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgU0hfQUNUSVZFX1VOSUZPUk1TOgorICAgICAgICAqcGFyYW1z
ID0gY29tcGlsZXItPmdldFVuaWZvcm1zKCkuc2l6ZSgpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFNIX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEg6CisgICAgICAgICpwYXJhbXMgPSAxICsg
IE1BWF9TWU1CT0xfTkFNRV9MRU47CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hfQUNUSVZF
X0FUVFJJQlVURVM6CisgICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0QXR0cmlicygpLnNp
emUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSF9BQ1RJVkVfQVRUUklCVVRFX01BWF9M
RU5HVEg6CisgICAgICAgICpwYXJhbXMgPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBTSF9WQVJZSU5HUzoKKyAgICAgICAgKnBhcmFtcyA9IGNvbXBp
bGVyLT5nZXRWYXJ5aW5ncygpLnNpemUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSF9W
QVJZSU5HX01BWF9MRU5HVEg6CisgICAgICAgICpwYXJhbXMgPSAxICsgTUFYX1NZTUJPTF9OQU1F
X0xFTjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSF9NQVBQRURfTkFNRV9NQVhfTEVOR1RI
OgorICAgICAgICAvLyBVc2UgbG9uZ2VyIGxlbmd0aCB0aGFuIE1BWF9TSE9SVEVORURfSURFTlRJ
RklFUl9TSVpFIHRvCisgICAgICAgIC8vIGhhbmRsZSBhcnJheSBhbmQgc3RydWN0IGRlcmVmZXJl
bmNlcy4KKyAgICAgICAgKnBhcmFtcyA9IDEgKyBNQVhfU1lNQk9MX05BTUVfTEVOOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFNIX05BTUVfTUFYX0xFTkdUSDoKKyAgICAgICAgKnBhcmFtcyA9
IDEgKyBNQVhfU1lNQk9MX05BTUVfTEVOOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNIX0hB
U0hFRF9OQU1FX01BWF9MRU5HVEg6CisgICAgICAgIGlmIChjb21waWxlci0+Z2V0SGFzaEZ1bmN0
aW9uKCkgPT0gTlVMTCkgeworICAgICAgICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyA2NCBiaXRzIGhhc2hpbmcgb3V0cHV0IHJlcXVpcmVzIDE2IGJ5
dGVzIGZvciBoZXggCisgICAgICAgICAgICAvLyByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgICAg
IGNvbnN0IGNoYXIgSGFzaGVkTmFtZVByZWZpeFtdID0gSEFTSEVEX05BTUVfUFJFRklYOworICAg
ICAgICAgICAgKnBhcmFtcyA9IDE2ICsgc2l6ZW9mKEhhc2hlZE5hbWVQcmVmaXgpOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hfSEFTSEVEX05BTUVTX0NPVU5UOgorICAg
ICAgICAqcGFyYW1zID0gY29tcGlsZXItPmdldE5hbWVNYXAoKS5zaXplKCk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorfQorCisvLworLy8gUmV0
dXJuIGFueSBjb21waWxlciBsb2cgb2YgbWVzc2FnZXMgZm9yIHRoZSBhcHBsaWNhdGlvbi4KKy8v
Cit2b2lkIFNoR2V0SW5mb0xvZyhjb25zdCBTaEhhbmRsZSBoYW5kbGUsIGNoYXIqIGluZm9Mb2cp
Cit7CisgICAgaWYgKCFoYW5kbGUgfHwgIWluZm9Mb2cpCisgICAgICAgIHJldHVybjsKKworICAg
IFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2FzdDxUU2hIYW5kbGVCYXNlKj4oaGFuZGxl
KTsKKyAgICBUQ29tcGlsZXIqIGNvbXBpbGVyID0gYmFzZS0+Z2V0QXNDb21waWxlcigpOworICAg
IGlmICghY29tcGlsZXIpIHJldHVybjsKKworICAgIFRJbmZvU2luayYgaW5mb1NpbmsgPSBjb21w
aWxlci0+Z2V0SW5mb1NpbmsoKTsKKyAgICBzdHJjcHkoaW5mb0xvZywgaW5mb1NpbmsuaW5mby5j
X3N0cigpKTsKK30KKworLy8KKy8vIFJldHVybiBhbnkgb2JqZWN0IGNvZGUuCisvLwordm9pZCBT
aEdldE9iamVjdENvZGUoY29uc3QgU2hIYW5kbGUgaGFuZGxlLCBjaGFyKiBvYmpDb2RlKQorewor
ICAgIGlmICghaGFuZGxlIHx8ICFvYmpDb2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBUU2hI
YW5kbGVCYXNlKiBiYXNlID0gc3RhdGljX2Nhc3Q8VFNoSGFuZGxlQmFzZSo+KGhhbmRsZSk7Cisg
ICAgVENvbXBpbGVyKiBjb21waWxlciA9IGJhc2UtPmdldEFzQ29tcGlsZXIoKTsKKyAgICBpZiAo
IWNvbXBpbGVyKSByZXR1cm47CisKKyAgICBUSW5mb1NpbmsmIGluZm9TaW5rID0gY29tcGlsZXIt
PmdldEluZm9TaW5rKCk7CisgICAgc3RyY3B5KG9iakNvZGUsIGluZm9TaW5rLm9iai5jX3N0cigp
KTsKK30KKwordm9pZCBTaEdldFZhcmlhYmxlSW5mbyhjb25zdCBTaEhhbmRsZSBoYW5kbGUsCisg
ICAgICAgICAgICAgICAgICAgICAgIFNoU2hhZGVySW5mbyB2YXJUeXBlLAorICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogbGVu
Z3RoLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHNpemUsCisgICAgICAgICAgICAgICAg
ICAgICAgIFNoRGF0YVR5cGUqIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgIFNoUHJlY2lz
aW9uVHlwZSogcHJlY2lzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHN0YXRpY1Vz
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY2hhciogbmFtZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciogbWFwcGVkTmFtZSkKK3sKKyAgICBpZiAoIWhhbmRsZSB8fCAhc2l6ZSB8fCAh
dHlwZSB8fCAhcHJlY2lzaW9uIHx8ICFzdGF0aWNVc2UgfHwgIW5hbWUpCisgICAgICAgIHJldHVy
bjsKKyAgICBBU1NFUlQoKHZhclR5cGUgPT0gU0hfQUNUSVZFX0FUVFJJQlVURVMpIHx8CisgICAg
ICAgICAgICh2YXJUeXBlID09IFNIX0FDVElWRV9VTklGT1JNUykgfHwKKyAgICAgICAgICAgKHZh
clR5cGUgPT0gU0hfVkFSWUlOR1MpKTsKKworICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSByZWlu
dGVycHJldF9jYXN0PFRTaEhhbmRsZUJhc2UqPihoYW5kbGUpOworICAgIFRDb21waWxlciogY29t
cGlsZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7CisgICAgaWYgKGNvbXBpbGVyID09IDApCisg
ICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IFRWYXJpYWJsZUluZm9MaXN0JiB2YXJMaXN0ID0K
KyAgICAgICAgdmFyVHlwZSA9PSBTSF9BQ1RJVkVfQVRUUklCVVRFUyA/IGNvbXBpbGVyLT5nZXRB
dHRyaWJzKCkgOgorICAgICAgICAgICAgKHZhclR5cGUgPT0gU0hfQUNUSVZFX1VOSUZPUk1TID8g
Y29tcGlsZXItPmdldFVuaWZvcm1zKCkgOgorICAgICAgICAgICAgICAgIGNvbXBpbGVyLT5nZXRW
YXJ5aW5ncygpKTsKKyAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHN0YXRpY19jYXN0PGlu
dD4odmFyTGlzdC5zaXplKCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBUVmFyaWFi
bGVJbmZvJiB2YXJJbmZvID0gdmFyTGlzdFtpbmRleF07CisgICAgaWYgKGxlbmd0aCkgKmxlbmd0
aCA9IHZhckluZm8ubmFtZS5zaXplKCk7CisgICAgKnNpemUgPSB2YXJJbmZvLnNpemU7CisgICAg
KnR5cGUgPSB2YXJJbmZvLnR5cGU7CisgICAgc3dpdGNoICh2YXJJbmZvLnByZWNpc2lvbikgewor
ICAgIGNhc2UgRWJwTG93OgorICAgICAgICAqcHJlY2lzaW9uID0gU0hfUFJFQ0lTSU9OX0xPV1A7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRWJwTWVkaXVtOgorICAgICAgICAqcHJlY2lzaW9u
ID0gU0hfUFJFQ0lTSU9OX01FRElVTVA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRWJwSGln
aDoKKyAgICAgICAgKnByZWNpc2lvbiA9IFNIX1BSRUNJU0lPTl9ISUdIUDsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gU29tZSB0eXBlcyBkb2VzIG5vdCBzdXBwb3J0
IHByZWNpc2lvbiwgZm9yIGV4YW1wbGUsIGJvb2xlYW4uCisgICAgICAgICpwcmVjaXNpb24gPSBT
SF9QUkVDSVNJT05fVU5ERUZJTkVEOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgKnN0YXRp
Y1VzZSA9IHZhckluZm8uc3RhdGljVXNlID8gMSA6IDA7CisKKyAgICAvLyBUaGlzIHNpemUgbXVz
dCBtYXRjaCB0aGF0IHF1ZXJpZWQgYnkKKyAgICAvLyBTSF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVO
R1RILCBTSF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsIFNIX1ZBUllJTkdfTUFYX0xFTkdU
SAorICAgIC8vIGluIFNoR2V0SW5mbywgYmVsb3cuCisgICAgc2l6ZV90IHZhcmlhYmxlTGVuZ3Ro
ID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CisgICAgQVNTRVJUKGNoZWNrVmFyaWFibGVNYXhM
ZW5ndGhzKGhhbmRsZSwgdmFyaWFibGVMZW5ndGgpKTsKKyAgICBzdHJuY3B5KG5hbWUsIHZhcklu
Zm8ubmFtZS5jX3N0cigpLCB2YXJpYWJsZUxlbmd0aCk7CisgICAgbmFtZVt2YXJpYWJsZUxlbmd0
aCAtIDFdID0gMDsKKyAgICBpZiAobWFwcGVkTmFtZSkgeworICAgICAgICAvLyBUaGlzIHNpemUg
bXVzdCBtYXRjaCB0aGF0IHF1ZXJpZWQgYnkKKyAgICAgICAgLy8gU0hfTUFQUEVEX05BTUVfTUFY
X0xFTkdUSCBpbiBTaEdldEluZm8sIGJlbG93LgorICAgICAgICBzaXplX3QgbWF4TWFwcGVkTmFt
ZUxlbmd0aCA9IDEgKyBNQVhfU1lNQk9MX05BTUVfTEVOOworICAgICAgICBBU1NFUlQoY2hlY2tN
YXBwZWROYW1lTWF4TGVuZ3RoKGhhbmRsZSwgbWF4TWFwcGVkTmFtZUxlbmd0aCkpOworICAgICAg
ICBzdHJuY3B5KG1hcHBlZE5hbWUsIHZhckluZm8ubWFwcGVkTmFtZS5jX3N0cigpLCBtYXhNYXBw
ZWROYW1lTGVuZ3RoKTsKKyAgICAgICAgbWFwcGVkTmFtZVttYXhNYXBwZWROYW1lTGVuZ3RoIC0g
MV0gPSAwOworICAgIH0KK30KKwordm9pZCBTaEdldE5hbWVIYXNoaW5nRW50cnkoY29uc3QgU2hI
YW5kbGUgaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIqIGhhc2hlZE5hbWUpCit7CisgICAgaWYgKCFoYW5kbGUgfHwgIW5hbWUgfHwg
IWhhc2hlZE5hbWUgfHwgaW5kZXggPCAwKQorICAgICAgICByZXR1cm47CisKKyAgICBUU2hIYW5k
bGVCYXNlKiBiYXNlID0gc3RhdGljX2Nhc3Q8VFNoSGFuZGxlQmFzZSo+KGhhbmRsZSk7CisgICAg
VENvbXBpbGVyKiBjb21waWxlciA9IGJhc2UtPmdldEFzQ29tcGlsZXIoKTsKKyAgICBpZiAoIWNv
bXBpbGVyKSByZXR1cm47CisKKyAgICBjb25zdCBOYW1lTWFwJiBuYW1lTWFwID0gY29tcGlsZXIt
PmdldE5hbWVNYXAoKTsKKyAgICBpZiAoaW5kZXggPj0gc3RhdGljX2Nhc3Q8aW50PihuYW1lTWFw
LnNpemUoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIE5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbmFtZU1hcC5iZWdpbigpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5kZXg7ICsr
aSkKKyAgICAgICAgKytpdDsKKworICAgIHNpemVfdCBsZW4gPSBpdC0+Zmlyc3QubGVuZ3RoKCkg
KyAxOworICAgIHNpemVfdCBtYXhfbGVuID0gMDsKKyAgICBTaEdldEluZm8oaGFuZGxlLCBTSF9O
QU1FX01BWF9MRU5HVEgsICZtYXhfbGVuKTsKKyAgICBpZiAobGVuID4gbWF4X2xlbikgeworICAg
ICAgICBBU1NFUlQoZmFsc2UpOworICAgICAgICBsZW4gPSBtYXhfbGVuOworICAgIH0KKyAgICBz
dHJuY3B5KG5hbWUsIGl0LT5maXJzdC5jX3N0cigpLCBsZW4pOworICAgIC8vIFRvIGJlIG9uIHRo
ZSBzYWZlIHNpZGUgaW4gY2FzZSB0aGUgc291cmNlIGlzIGxvbmdlciB0aGFuIGV4cGVjdGVkLgor
ICAgIG5hbWVbbGVuIC0gMV0gPSAnXDAnOworCisgICAgbGVuID0gaXQtPnNlY29uZC5sZW5ndGgo
KSArIDE7CisgICAgbWF4X2xlbiA9IDA7CisgICAgU2hHZXRJbmZvKGhhbmRsZSwgU0hfSEFTSEVE
X05BTUVfTUFYX0xFTkdUSCwgJm1heF9sZW4pOworICAgIGlmIChsZW4gPiBtYXhfbGVuKSB7Cisg
ICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgIGxlbiA9IG1heF9sZW47CisgICAgfQorICAg
IHN0cm5jcHkoaGFzaGVkTmFtZSwgaXQtPnNlY29uZC5jX3N0cigpLCBsZW4pOworICAgIC8vIFRv
IGJlIG9uIHRoZSBzYWZlIHNpZGUgaW4gY2FzZSB0aGUgc291cmNlIGlzIGxvbmdlciB0aGFuIGV4
cGVjdGVkLgorICAgIGhhc2hlZE5hbWVbbGVuIC0gMV0gPSAnXDAnOworfQorCit2b2lkIFNoR2V0
SW5mb1BvaW50ZXIoY29uc3QgU2hIYW5kbGUgaGFuZGxlLCBTaFNoYWRlckluZm8gcG5hbWUsIHZv
aWQqKiBwYXJhbXMpCit7CisgICAgaWYgKCFoYW5kbGUgfHwgIXBhcmFtcykKKyAgICAgICAgcmV0
dXJuOworCisgICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHN0YXRpY19jYXN0PFRTaEhhbmRsZUJh
c2UqPihoYW5kbGUpOworICAgIFRyYW5zbGF0b3JITFNMKiB0cmFuc2xhdG9yID0gYmFzZS0+Z2V0
QXNUcmFuc2xhdG9ySExTTCgpOworICAgIGlmICghdHJhbnNsYXRvcikgcmV0dXJuOworCisgICAg
c3dpdGNoKHBuYW1lKQorICAgIHsKKyAgICBjYXNlIFNIX0FDVElWRV9VTklGT1JNU19BUlJBWToK
KyAgICAgICAgKnBhcmFtcyA9ICh2b2lkKikmdHJhbnNsYXRvci0+Z2V0VW5pZm9ybXMoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9Cit9CisKK2lu
dCBTaENoZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cygKKyAgICBpbnQgbWF4VmVjdG9y
cywgU2hWYXJpYWJsZUluZm8qIHZhckluZm9BcnJheSwgc2l6ZV90IHZhckluZm9BcnJheVNpemUp
Cit7CisgICAgaWYgKHZhckluZm9BcnJheVNpemUgPT0gMCkKKyAgICAgICAgcmV0dXJuIDE7Cisg
ICAgQVNTRVJUKHZhckluZm9BcnJheSk7CisgICAgVFZhcmlhYmxlSW5mb0xpc3QgdmFyaWFibGVz
OworICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCB2YXJJbmZvQXJyYXlTaXplOyArK2lpKQor
ICAgIHsKKyAgICAgICAgVFZhcmlhYmxlSW5mbyB2YXIodmFySW5mb0FycmF5W2lpXS50eXBlLCB2
YXJJbmZvQXJyYXlbaWldLnNpemUpOworICAgICAgICB2YXJpYWJsZXMucHVzaF9iYWNrKHZhcik7
CisgICAgfQorICAgIFZhcmlhYmxlUGFja2VyIHBhY2tlcjsKKyAgICByZXR1cm4gcGFja2VyLkNo
ZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cyhtYXhWZWN0b3JzLCB2YXJpYWJsZXMpID8g
MSA6IDA7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJsZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDA0ZmU1
ZDM1NTZjOWZhZjkxYjM1ODMxNjkyMzJiODU4NTQ3MWFmMgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxl
LmNwcApAQCAtMCwwICsxLDIxNiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8KKy8vIFN5bWJv
bCB0YWJsZSBmb3IgcGFyc2luZy4gIE1vc3QgZnVuY3Rpb25hbGl5IGFuZCBtYWluIGlkZWFzCisv
LyBhcmUgZG9jdW1lbnRlZCBpbiB0aGUgaGVhZGVyIGZpbGUuCisvLworCisjaWYgZGVmaW5lZChf
TVNDX1ZFUikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzE4KQorI2VuZGlmCisKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgiCisKKyNpbmNsdWRlIDxzdGRp
by5oPgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjbGltaXRzPgorCitUVHlwZTo6
VFR5cGUoY29uc3QgVFB1YmxpY1R5cGUgJnApIDoKKyAgICAgICAgICAgIHR5cGUocC50eXBlKSwg
cHJlY2lzaW9uKHAucHJlY2lzaW9uKSwgcXVhbGlmaWVyKHAucXVhbGlmaWVyKSwgc2l6ZShwLnNp
emUpLCBtYXRyaXgocC5tYXRyaXgpLCBhcnJheShwLmFycmF5KSwgYXJyYXlTaXplKHAuYXJyYXlT
aXplKSwgc3RydWN0dXJlKDApCit7CisgICAgaWYgKHAudXNlckRlZikKKyAgICAgICAgc3RydWN0
dXJlID0gcC51c2VyRGVmLT5nZXRTdHJ1Y3QoKTsKK30KKworLy8KKy8vIFJlY3Vyc2l2ZWx5IGdl
bmVyYXRlIG1hbmdsZWQgbmFtZXMuCisvLworVFN0cmluZyBUVHlwZTo6YnVpbGRNYW5nbGVkTmFt
ZSgpIGNvbnN0Cit7CisgICAgVFN0cmluZyBtYW5nbGVkTmFtZTsKKyAgICBpZiAoaXNNYXRyaXgo
KSkKKyAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ20nOworICAgIGVsc2UgaWYgKGlzVmVjdG9yKCkp
CisgICAgICAgIG1hbmdsZWROYW1lICs9ICd2JzsKKworICAgIHN3aXRjaCAodHlwZSkgeworICAg
IGNhc2UgRWJ0RmxvYXQ6ICAgICAgIG1hbmdsZWROYW1lICs9ICdmJzsgICAgICBicmVhazsKKyAg
ICBjYXNlIEVidEludDogICAgICAgICBtYW5nbGVkTmFtZSArPSAnaSc7ICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBFYnRCb29sOiAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ2InOyAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgIG1hbmdsZWROYW1lICs9ICJzMiI7ICAgICBicmVhazsK
KyAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiBtYW5nbGVkTmFtZSArPSAic0MiOyAgICAgYnJlYWs7
CisgICAgY2FzZSBFYnRTdHJ1Y3Q6ICAgICAgbWFuZ2xlZE5hbWUgKz0gc3RydWN0dXJlLT5tYW5n
bGVkTmFtZSgpOyBicmVhazsKKyAgICBkZWZhdWx0OiAgICAgICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBtYW5nbGVkTmFtZSArPSBzdGF0aWNfY2FzdDxjaGFyPignMCcgKyBnZXROb21pbmFs
U2l6ZSgpKTsKKyAgICBpZiAoaXNBcnJheSgpKSB7CisgICAgICAgIGNoYXIgYnVmWzIwXTsKKyAg
ICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwgYXJyYXlTaXplKTsKKyAgICAg
ICAgbWFuZ2xlZE5hbWUgKz0gJ1snOworICAgICAgICBtYW5nbGVkTmFtZSArPSBidWY7CisgICAg
ICAgIG1hbmdsZWROYW1lICs9ICddJzsKKyAgICB9CisgICAgcmV0dXJuIG1hbmdsZWROYW1lOwor
fQorCitzaXplX3QgVFR5cGU6OmdldE9iamVjdFNpemUoKSBjb25zdAoreworICAgIHNpemVfdCB0
b3RhbFNpemUgPSAwOworCisgICAgaWYgKGdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAg
ICAgICAgdG90YWxTaXplID0gc3RydWN0dXJlLT5vYmplY3RTaXplKCk7CisgICAgZWxzZSBpZiAo
bWF0cml4KQorICAgICAgICB0b3RhbFNpemUgPSBzaXplICogc2l6ZTsKKyAgICBlbHNlCisgICAg
ICAgIHRvdGFsU2l6ZSA9IHNpemU7CisKKyAgICBpZiAoaXNBcnJheSgpKSB7CisgICAgICAgIHNp
emVfdCBhcnJheVNpemUgPSBnZXRBcnJheVNpemUoKTsKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA+
IElOVF9NQVggLyB0b3RhbFNpemUpCisgICAgICAgICAgICB0b3RhbFNpemUgPSBJTlRfTUFYOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICB0b3RhbFNpemUgKj0gYXJyYXlTaXplOworICAgIH0K
KworICAgIHJldHVybiB0b3RhbFNpemU7Cit9CisKK2Jvb2wgVFN0cnVjdHVyZTo6Y29udGFpbnNB
cnJheXMoKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUZpZWxkcy0+c2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgVFR5cGUqIGZpZWxkVHlwZSA9ICgqbUZpZWxkcylb
aV0tPnR5cGUoKTsKKyAgICAgICAgaWYgKGZpZWxkVHlwZS0+aXNBcnJheSgpIHx8IGZpZWxkVHlw
ZS0+aXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitUU3RyaW5nIFRTdHJ1Y3R1cmU6OmJ1
aWxkTWFuZ2xlZE5hbWUoKSBjb25zdAoreworICAgIFRTdHJpbmcgbWFuZ2xlZE5hbWUoInN0cnVj
dC0iKTsKKyAgICBtYW5nbGVkTmFtZSArPSAqbU5hbWU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtRmllbGRzLT5zaXplKCk7ICsraSkgeworICAgICAgICBtYW5nbGVkTmFtZSArPSAnLSc7
CisgICAgICAgIG1hbmdsZWROYW1lICs9ICgqbUZpZWxkcylbaV0tPnR5cGUoKS0+Z2V0TWFuZ2xl
ZE5hbWUoKTsKKyAgICB9CisgICAgcmV0dXJuIG1hbmdsZWROYW1lOworfQorCitzaXplX3QgVFN0
cnVjdHVyZTo6Y2FsY3VsYXRlT2JqZWN0U2l6ZSgpIGNvbnN0Cit7CisgICAgc2l6ZV90IHNpemUg
PSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUZpZWxkcy0+c2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgc2l6ZV90IGZpZWxkU2l6ZSA9ICgqbUZpZWxkcylbaV0tPnR5cGUoKS0+Z2V0T2Jq
ZWN0U2l6ZSgpOworICAgICAgICBpZiAoZmllbGRTaXplID4gSU5UX01BWCAtIHNpemUpCisgICAg
ICAgICAgICBzaXplID0gSU5UX01BWDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2l6ZSAr
PSBmaWVsZFNpemU7CisgICAgfQorICAgIHJldHVybiBzaXplOworfQorCitpbnQgVFN0cnVjdHVy
ZTo6Y2FsY3VsYXRlRGVlcGVzdE5lc3RpbmcoKSBjb25zdAoreworICAgIGludCBtYXhOZXN0aW5n
ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1GaWVsZHMtPnNpemUoKTsgKytpKSB7
CisgICAgICAgIG1heE5lc3RpbmcgPSBzdGQ6Om1heChtYXhOZXN0aW5nLCAoKm1GaWVsZHMpW2ld
LT50eXBlKCktPmdldERlZXBlc3RTdHJ1Y3ROZXN0aW5nKCkpOworICAgIH0KKyAgICByZXR1cm4g
MSArIG1heE5lc3Rpbmc7Cit9CisKKy8vCisvLyBEdW1wIGZ1bmN0aW9ucy4KKy8vCisKK3ZvaWQg
VFZhcmlhYmxlOjpkdW1wKFRJbmZvU2luayYgaW5mb1NpbmspIGNvbnN0Cit7CisgICAgaW5mb1Np
bmsuZGVidWcgPDwgZ2V0TmFtZSgpLmNfc3RyKCkgPDwgIjogIiA8PCB0eXBlLmdldFF1YWxpZmll
clN0cmluZygpIDw8ICIgIiA8PCB0eXBlLmdldFByZWNpc2lvblN0cmluZygpIDw8ICIgIiA8PCB0
eXBlLmdldEJhc2ljU3RyaW5nKCk7CisgICAgaWYgKHR5cGUuaXNBcnJheSgpKSB7CisgICAgICAg
IGluZm9TaW5rLmRlYnVnIDw8ICJbMF0iOworICAgIH0KKyAgICBpbmZvU2luay5kZWJ1ZyA8PCAi
XG4iOworfQorCit2b2lkIFRGdW5jdGlvbjo6ZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25z
dAoreworICAgIGluZm9TaW5rLmRlYnVnIDw8IGdldE5hbWUoKS5jX3N0cigpIDw8ICI6ICIgPDwg
IHJldHVyblR5cGUuZ2V0QmFzaWNTdHJpbmcoKSA8PCAiICIgPDwgZ2V0TWFuZ2xlZE5hbWUoKS5j
X3N0cigpIDw8ICJcbiI7Cit9CisKK3ZvaWQgVFN5bWJvbFRhYmxlTGV2ZWw6OmR1bXAoVEluZm9T
aW5rICZpbmZvU2luaykgY29uc3QKK3sKKyAgICB0TGV2ZWw6OmNvbnN0X2l0ZXJhdG9yIGl0Owor
ICAgIGZvciAoaXQgPSBsZXZlbC5iZWdpbigpOyBpdCAhPSBsZXZlbC5lbmQoKTsgKytpdCkKKyAg
ICAgICAgKCppdCkuc2Vjb25kLT5kdW1wKGluZm9TaW5rKTsKK30KKwordm9pZCBUU3ltYm9sVGFi
bGU6OmR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3QKK3sKKyAgICBmb3IgKGludCBsZXZl
bCA9IGN1cnJlbnRMZXZlbCgpOyBsZXZlbCA+PSAwOyAtLWxldmVsKSB7CisgICAgICAgIGluZm9T
aW5rLmRlYnVnIDw8ICJMRVZFTCAiIDw8IGxldmVsIDw8ICJcbiI7CisgICAgICAgIHRhYmxlW2xl
dmVsXS0+ZHVtcChpbmZvU2luayk7CisgICAgfQorfQorCisvLworLy8gRnVuY3Rpb25zIGhhdmUg
YnVyaWVkIHBvaW50ZXJzIHRvIGRlbGV0ZS4KKy8vCitURnVuY3Rpb246On5URnVuY3Rpb24oKQor
eworICAgIGZvciAoVFBhcmFtTGlzdDo6aXRlcmF0b3IgaSA9IHBhcmFtZXRlcnMuYmVnaW4oKTsg
aSAhPSBwYXJhbWV0ZXJzLmVuZCgpOyArK2kpCisgICAgICAgIGRlbGV0ZSAoKmkpLnR5cGU7Cit9
CisKKy8vCisvLyBTeW1ib2wgdGFibGUgbGV2ZWxzIGFyZSBhIG1hcCBvZiBwb2ludGVycyB0byBz
eW1ib2xzIHRoYXQgaGF2ZSB0byBiZSBkZWxldGVkLgorLy8KK1RTeW1ib2xUYWJsZUxldmVsOjp+
VFN5bWJvbFRhYmxlTGV2ZWwoKQoreworICAgIGZvciAodExldmVsOjppdGVyYXRvciBpdCA9IGxl
dmVsLmJlZ2luKCk7IGl0ICE9IGxldmVsLmVuZCgpOyArK2l0KQorICAgICAgICBkZWxldGUgKCpp
dCkuc2Vjb25kOworfQorCisvLworLy8gQ2hhbmdlIGFsbCBmdW5jdGlvbiBlbnRyaWVzIGluIHRo
ZSB0YWJsZSB3aXRoIHRoZSBub24tbWFuZ2xlZCBuYW1lCisvLyB0byBiZSByZWxhdGVkIHRvIHRo
ZSBwcm92aWRlZCBidWlsdC1pbiBvcGVyYXRpb24uICBUaGlzIGlzIGEgbG93CisvLyBwZXJmb3Jt
YW5jZSBvcGVyYXRpb24sIGFuZCBvbmx5IGludGVuZGVkIGZvciBzeW1ib2wgdGFibGVzIHRoYXQK
Ky8vIGxpdmUgYWNyb3NzIGEgbGFyZ2UgbnVtYmVyIG9mIGNvbXBpbGVzLgorLy8KK3ZvaWQgVFN5
bWJvbFRhYmxlTGV2ZWw6OnJlbGF0ZVRvT3BlcmF0b3IoY29uc3QgY2hhciogbmFtZSwgVE9wZXJh
dG9yIG9wKQoreworICAgIHRMZXZlbDo6aXRlcmF0b3IgaXQ7CisgICAgZm9yIChpdCA9IGxldmVs
LmJlZ2luKCk7IGl0ICE9IGxldmVsLmVuZCgpOyArK2l0KSB7CisgICAgICAgIGlmICgoKml0KS5z
ZWNvbmQtPmlzRnVuY3Rpb24oKSkgeworICAgICAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlvbiA9
IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KCgqaXQpLnNlY29uZCk7CisgICAgICAgICAgICBpZiAo
ZnVuY3Rpb24tPmdldE5hbWUoKSA9PSBuYW1lKQorICAgICAgICAgICAgICAgIGZ1bmN0aW9uLT5y
ZWxhdGVUb09wZXJhdG9yKG9wKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8KKy8vIENoYW5n
ZSBhbGwgZnVuY3Rpb24gZW50cmllcyBpbiB0aGUgdGFibGUgd2l0aCB0aGUgbm9uLW1hbmdsZWQg
bmFtZQorLy8gdG8gYmUgcmVsYXRlZCB0byB0aGUgcHJvdmlkZWQgYnVpbHQtaW4gZXh0ZW5zaW9u
LiBUaGlzIGlzIGEgbG93CisvLyBwZXJmb3JtYW5jZSBvcGVyYXRpb24sIGFuZCBvbmx5IGludGVu
ZGVkIGZvciBzeW1ib2wgdGFibGVzIHRoYXQKKy8vIGxpdmUgYWNyb3NzIGEgbGFyZ2UgbnVtYmVy
IG9mIGNvbXBpbGVzLgorLy8KK3ZvaWQgVFN5bWJvbFRhYmxlTGV2ZWw6OnJlbGF0ZVRvRXh0ZW5z
aW9uKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFRTdHJpbmcmIGV4dCkKK3sKKyAgICBmb3IgKHRM
ZXZlbDo6aXRlcmF0b3IgaXQgPSBsZXZlbC5iZWdpbigpOyBpdCAhPSBsZXZlbC5lbmQoKTsgKytp
dCkgeworICAgICAgICBUU3ltYm9sKiBzeW1ib2wgPSBpdC0+c2Vjb25kOworICAgICAgICBpZiAo
c3ltYm9sLT5nZXROYW1lKCkgPT0gbmFtZSkKKyAgICAgICAgICAgIHN5bWJvbC0+cmVsYXRlVG9F
eHRlbnNpb24oZXh0KTsKKyAgICB9Cit9CisKK1RTeW1ib2xUYWJsZTo6flRTeW1ib2xUYWJsZSgp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YWJsZS5zaXplKCk7ICsraSkKKyAgICAg
ICAgZGVsZXRlIHRhYmxlW2ldOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJlY2lzaW9u
U3RhY2suc2l6ZSgpOyArK2kpCisgICAgICAgIGRlbGV0ZSBwcmVjaXNpb25TdGFja1tpXTsKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1N5bWJvbFRhYmxlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9TeW1ib2xUYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZjNzIxMWYyYTk1MmM4OTUxNzgz
NTE1MjU3NmQ2OGM5Mzg4Njc3YjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJsZS5oCkBAIC0wLDAgKzEs
MzgyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9TWU1CT0xfVEFCTEVfSU5DTFVE
RURfCisjZGVmaW5lIF9TWU1CT0xfVEFCTEVfSU5DTFVERURfCisKKy8vCisvLyBTeW1ib2wgdGFi
bGUgZm9yIHBhcnNpbmcuICBIYXMgdGhlc2UgZGVzaWduIGNoYXJhY3RlcmlzdGljczoKKy8vCisv
LyAqIFNhbWUgc3ltYm9sIHRhYmxlIGNhbiBiZSB1c2VkIHRvIGNvbXBpbGUgbWFueSBzaGFkZXJz
LCB0byBwcmVzZXJ2ZQorLy8gICBlZmZvcnQgb2YgY3JlYXRpbmcgYW5kIGxvYWRpbmcgd2l0aCB0
aGUgbGFyZ2UgbnVtYmVycyBvZiBidWlsdC1pbgorLy8gICBzeW1ib2xzLgorLy8KKy8vICogTmFt
ZSBtYW5nbGluZyB3aWxsIGJlIHVzZWQgdG8gZ2l2ZSBlYWNoIGZ1bmN0aW9uIGEgdW5pcXVlIG5h
bWUKKy8vICAgc28gdGhhdCBzeW1ib2wgdGFibGUgbG9va3VwcyBhcmUgbmV2ZXIgYW1iaWd1b3Vz
LiAgVGhpcyBhbGxvd3MKKy8vICAgYSBzaW1wbGVyIHN5bWJvbCB0YWJsZSBzdHJ1Y3R1cmUuCisv
LworLy8gKiBQdXNoaW5nIGFuZCBwb3BwaW5nIG9mIHNjb3BlLCBzbyBzeW1ib2wgdGFibGUgd2ls
bCByZWFsbHkgYmUgYSBzdGFjayAKKy8vICAgb2Ygc3ltYm9sIHRhYmxlcy4gIFNlYXJjaGVkIGZy
b20gdGhlIHRvcCwgd2l0aCBuZXcgaW5zZXJ0cyBnb2luZyBpbnRvCisvLyAgIHRoZSB0b3AuCisv
LworLy8gKiBDb25zdGFudHM6ICBDb21waWxlIHRpbWUgY29uc3RhbnQgc3ltYm9scyB3aWxsIGtl
ZXAgdGhlaXIgdmFsdWVzCisvLyAgIGluIHRoZSBzeW1ib2wgdGFibGUuICBUaGUgcGFyc2VyIGNh
biBzdWJzdGl0dXRlIGNvbnN0YW50cyBhdCBwYXJzZQorLy8gICB0aW1lLCBpbmNsdWRpbmcgZG9p
bmcgY29uc3RhbnQgZm9sZGluZyBhbmQgY29uc3RhbnQgcHJvcGFnYXRpb24uCisvLworLy8gKiBO
byB0ZW1wb3JhcmllczogIFRlbXBvcmFyaWVzIG1hZGUgZnJvbSBvcGVyYXRpb25zICgrLCAtLSwg
Lnh5LCBldGMuKQorLy8gICBhcmUgdHJhY2tlZCBpbiB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2Vu
dGF0aW9uLCBub3QgdGhlIHN5bWJvbCB0YWJsZS4KKy8vCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4K
KworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9JbmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJt
ZWRpYXRlLmgiCisKKy8vCisvLyBTeW1ib2wgYmFzZSBjbGFzcy4gIChDYW4gYnVpbGQgZnVuY3Rp
b25zIG9yIHZhcmlhYmxlcyBvdXQgb2YgdGhlc2UuLi4pCisvLworY2xhc3MgVFN5bWJvbCB7ICAg
IAorcHVibGljOgorICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKKyAgICBUU3ltYm9s
KGNvbnN0IFRTdHJpbmcqIG4pIDogIHVuaXF1ZUlkKDApLCBuYW1lKG4pIHsgfQorICAgIHZpcnR1
YWwgflRTeW1ib2woKSB7IC8qIGRvbid0IGRlbGV0ZSBuYW1lLCBpdCdzIGZyb20gdGhlIHBvb2wg
Ki8gfQorCisgICAgY29uc3QgVFN0cmluZyYgZ2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJuICpuYW1l
OyB9CisgICAgdmlydHVhbCBjb25zdCBUU3RyaW5nJiBnZXRNYW5nbGVkTmFtZSgpIGNvbnN0IHsg
cmV0dXJuIGdldE5hbWUoKTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0Z1bmN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNWYXJpYWJsZSgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBzZXRVbmlxdWVJZChpbnQgaWQpIHsgdW5pcXVlSWQg
PSBpZDsgfQorICAgIGludCBnZXRVbmlxdWVJZCgpIGNvbnN0IHsgcmV0dXJuIHVuaXF1ZUlkOyB9
CisgICAgdmlydHVhbCB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3QgPSAwOwor
ICAgIHZvaWQgcmVsYXRlVG9FeHRlbnNpb24oY29uc3QgVFN0cmluZyYgZXh0KSB7IGV4dGVuc2lv
biA9IGV4dDsgfQorICAgIGNvbnN0IFRTdHJpbmcmIGdldEV4dGVuc2lvbigpIGNvbnN0IHsgcmV0
dXJuIGV4dGVuc2lvbjsgfQorCitwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihUU3ltYm9sKTsKKworICAgIGludCB1bmlxdWVJZDsgICAgICAvLyBGb3IgcmVhbCBjb21wYXJp
bmcgZHVyaW5nIGNvZGUgZ2VuZXJhdGlvbgorICAgIGNvbnN0IFRTdHJpbmcgKm5hbWU7CisgICAg
VFN0cmluZyBleHRlbnNpb247Cit9OworCisvLworLy8gVmFyaWFibGUgY2xhc3MsIG1lYW5pbmcg
YSBzeW1ib2wgdGhhdCdzIG5vdCBhIGZ1bmN0aW9uLgorLy8gCisvLyBUaGVyZSBjb3VsZCBiZSBh
IHNlcGFyYXRlIGNsYXNzIGhlaXJhcmNoeSBmb3IgQ29uc3RhbnQgdmFyaWFibGVzOworLy8gT25s
eSBvbmUgb2YgaW50LCBib29sLCBvciBmbG9hdCwgKG9yIG5vbmUpIGlzIGNvcnJlY3QgZm9yCisv
LyBhbnkgcGFydGljdWxhciB1c2UsIGJ1dCBpdCdzIGVhc3kgdG8gZG8gdGhpcyB3YXksIGFuZCBk
b2Vzbid0CisvLyBzZWVtIHdvcnRoIGhhdmluZyBzZXBhcmF0ZSBjbGFzc2VzLCBhbmQgImdldENv
bnN0IiBjYW4ndCBzaW1wbHkgcmV0dXJuCisvLyBkaWZmZXJlbnQgdmFsdWVzIGZvciBkaWZmZXJl
bnQgdHlwZXMgcG9seW1vcnBoaWNhbGx5LCBzbyB0aGlzIGlzIAorLy8ganVzdCBzaW1wbGUgYW5k
IHByYWdtYXRpYy4KKy8vCitjbGFzcyBUVmFyaWFibGUgOiBwdWJsaWMgVFN5bWJvbCB7CitwdWJs
aWM6CisgICAgVFZhcmlhYmxlKGNvbnN0IFRTdHJpbmcgKm5hbWUsIGNvbnN0IFRUeXBlJiB0LCBi
b29sIHVUID0gZmFsc2UgKSA6IFRTeW1ib2wobmFtZSksIHR5cGUodCksIHVzZXJUeXBlKHVUKSwg
dW5pb25BcnJheSgwKSB7IH0KKyAgICB2aXJ0dWFsIH5UVmFyaWFibGUoKSB7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgaXNWYXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0gICAgCisgICAgVFR5
cGUmIGdldFR5cGUoKSB7IHJldHVybiB0eXBlOyB9ICAgIAorICAgIGNvbnN0IFRUeXBlJiBnZXRU
eXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZTsgfQorICAgIGJvb2wgaXNVc2VyVHlwZSgpIGNvbnN0
IHsgcmV0dXJuIHVzZXJUeXBlOyB9CisgICAgdm9pZCBzZXRRdWFsaWZpZXIoVFF1YWxpZmllciBx
dWFsaWZpZXIpIHsgdHlwZS5zZXRRdWFsaWZpZXIocXVhbGlmaWVyKTsgfQorCisgICAgdmlydHVh
bCB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7CisKKyAgICBDb25zdGFudFVu
aW9uKiBnZXRDb25zdFBvaW50ZXIoKQorICAgIHsgCisgICAgICAgIGlmICghdW5pb25BcnJheSkK
KyAgICAgICAgICAgIHVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblt0eXBlLmdldE9iamVj
dFNpemUoKV07CisKKyAgICAgICAgcmV0dXJuIHVuaW9uQXJyYXk7CisgICAgfQorCisgICAgQ29u
c3RhbnRVbmlvbiogZ2V0Q29uc3RQb2ludGVyKCkgY29uc3QgeyByZXR1cm4gdW5pb25BcnJheTsg
fQorCisgICAgdm9pZCBzaGFyZUNvbnN0UG9pbnRlciggQ29uc3RhbnRVbmlvbiAqY29uc3RBcnJh
eSkKKyAgICB7CisgICAgICAgIGlmICh1bmlvbkFycmF5ID09IGNvbnN0QXJyYXkpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgZGVsZXRlW10gdW5pb25BcnJheTsKKyAgICAgICAgdW5p
b25BcnJheSA9IGNvbnN0QXJyYXk7ICAKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRElTQUxMT1df
Q09QWV9BTkRfQVNTSUdOKFRWYXJpYWJsZSk7CisKKyAgICBUVHlwZSB0eXBlOworICAgIGJvb2wg
dXNlclR5cGU7CisgICAgLy8gd2UgYXJlIGFzc3VtaW5nIHRoYXQgUG9vbCBBbGxvY2F0b3Igd2ls
bCBmcmVlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIHRvIHVuaW9uQXJyYXkKKyAgICAvLyB3aGVuIHRo
aXMgb2JqZWN0IGlzIGRlc3Ryb3llZAorICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXk7Cit9
OworCisvLworLy8gVGhlIGZ1bmN0aW9uIHN1Yi1jbGFzcyBvZiBzeW1ib2xzIGFuZCB0aGUgcGFy
c2VyIHdpbGwgbmVlZCB0bworLy8gc2hhcmUgdGhpcyBkZWZpbml0aW9uIG9mIGEgZnVuY3Rpb24g
cGFyYW1ldGVyLgorLy8KK3N0cnVjdCBUUGFyYW1ldGVyIHsKKyAgICBUU3RyaW5nICpuYW1lOwor
ICAgIFRUeXBlKiB0eXBlOworfTsKKworLy8KKy8vIFRoZSBmdW5jdGlvbiBzdWItY2xhc3Mgb2Yg
YSBzeW1ib2wuICAKKy8vCitjbGFzcyBURnVuY3Rpb24gOiBwdWJsaWMgVFN5bWJvbCB7CitwdWJs
aWM6CisgICAgVEZ1bmN0aW9uKFRPcGVyYXRvciBvKSA6CisgICAgICAgIFRTeW1ib2woMCksCisg
ICAgICAgIHJldHVyblR5cGUoVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKSksCisgICAgICAg
IG9wKG8pLAorICAgICAgICBkZWZpbmVkKGZhbHNlKSB7IH0KKyAgICBURnVuY3Rpb24oY29uc3Qg
VFN0cmluZyAqbmFtZSwgVFR5cGUmIHJldFR5cGUsIFRPcGVyYXRvciB0T3AgPSBFT3BOdWxsKSA6
IAorICAgICAgICBUU3ltYm9sKG5hbWUpLCAKKyAgICAgICAgcmV0dXJuVHlwZShyZXRUeXBlKSwK
KyAgICAgICAgbWFuZ2xlZE5hbWUoVEZ1bmN0aW9uOjptYW5nbGVOYW1lKCpuYW1lKSksCisgICAg
ICAgIG9wKHRPcCksCisgICAgICAgIGRlZmluZWQoZmFsc2UpIHsgfQorICAgIHZpcnR1YWwgflRG
dW5jdGlvbigpOworICAgIHZpcnR1YWwgYm9vbCBpc0Z1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfSAgICAKKworICAgIHN0YXRpYyBUU3RyaW5nIG1hbmdsZU5hbWUoY29uc3QgVFN0cmlu
ZyYgbmFtZSkgeyByZXR1cm4gbmFtZSArICcoJzsgfQorICAgIHN0YXRpYyBUU3RyaW5nIHVubWFu
Z2xlTmFtZShjb25zdCBUU3RyaW5nJiBtYW5nbGVkTmFtZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBUU3RyaW5nKG1hbmdsZWROYW1lLmNfc3RyKCksIG1hbmdsZWROYW1lLmZpbmRfZmlyc3Rfb2Yo
JygnKSk7CisgICAgfQorCisgICAgdm9pZCBhZGRQYXJhbWV0ZXIoVFBhcmFtZXRlciYgcCkgCisg
ICAgeyAKKyAgICAgICAgcGFyYW1ldGVycy5wdXNoX2JhY2socCk7CisgICAgICAgIG1hbmdsZWRO
YW1lID0gbWFuZ2xlZE5hbWUgKyBwLnR5cGUtPmdldE1hbmdsZWROYW1lKCk7CisgICAgfQorCisg
ICAgY29uc3QgVFN0cmluZyYgZ2V0TWFuZ2xlZE5hbWUoKSBjb25zdCB7IHJldHVybiBtYW5nbGVk
TmFtZTsgfQorICAgIGNvbnN0IFRUeXBlJiBnZXRSZXR1cm5UeXBlKCkgY29uc3QgeyByZXR1cm4g
cmV0dXJuVHlwZTsgfQorCisgICAgdm9pZCByZWxhdGVUb09wZXJhdG9yKFRPcGVyYXRvciBvKSB7
IG9wID0gbzsgfQorICAgIFRPcGVyYXRvciBnZXRCdWlsdEluT3AoKSBjb25zdCB7IHJldHVybiBv
cDsgfQorCisgICAgdm9pZCBzZXREZWZpbmVkKCkgeyBkZWZpbmVkID0gdHJ1ZTsgfQorICAgIGJv
b2wgaXNEZWZpbmVkKCkgeyByZXR1cm4gZGVmaW5lZDsgfQorCisgICAgc2l6ZV90IGdldFBhcmFt
Q291bnQoKSBjb25zdCB7IHJldHVybiBwYXJhbWV0ZXJzLnNpemUoKTsgfSAgCisgICAgY29uc3Qg
VFBhcmFtZXRlciYgZ2V0UGFyYW0oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIHBhcmFtZXRlcnNb
aV07IH0KKworICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0
OworCitwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihURnVuY3Rpb24pOwor
CisgICAgdHlwZWRlZiBUVmVjdG9yPFRQYXJhbWV0ZXI+IFRQYXJhbUxpc3Q7CisgICAgVFBhcmFt
TGlzdCBwYXJhbWV0ZXJzOworICAgIFRUeXBlIHJldHVyblR5cGU7CisgICAgVFN0cmluZyBtYW5n
bGVkTmFtZTsKKyAgICBUT3BlcmF0b3Igb3A7CisgICAgYm9vbCBkZWZpbmVkOworfTsKKworCitj
bGFzcyBUU3ltYm9sVGFibGVMZXZlbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBUTWFwPFRTdHJp
bmcsIFRTeW1ib2wqPiB0TGV2ZWw7CisgICAgdHlwZWRlZiB0TGV2ZWw6OmNvbnN0X2l0ZXJhdG9y
IGNvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgY29uc3QgdExldmVsOjp2YWx1ZV90eXBlIHRM
ZXZlbFBhaXI7CisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8dExldmVsOjppdGVyYXRvciwgYm9vbD4g
dEluc2VydFJlc3VsdDsKKworICAgIFRTeW1ib2xUYWJsZUxldmVsKCkgeyB9CisgICAgflRTeW1i
b2xUYWJsZUxldmVsKCk7CisKKyAgICBib29sIGluc2VydChjb25zdCBUU3RyaW5nICZuYW1lLCBU
U3ltYm9sICZzeW1ib2wpCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyByZXR1cm5pbmcg
dHJ1ZSBtZWFucyBzeW1ib2wgd2FzIGFkZGVkIHRvIHRoZSB0YWJsZQorICAgICAgICAvLworICAg
ICAgICB0SW5zZXJ0UmVzdWx0IHJlc3VsdCA9IGxldmVsLmluc2VydCh0TGV2ZWxQYWlyKG5hbWUs
ICZzeW1ib2wpKTsKKworICAgICAgICByZXR1cm4gcmVzdWx0LnNlY29uZDsKKyAgICB9CisKKyAg
ICBib29sIGluc2VydChUU3ltYm9sICZzeW1ib2wpCisgICAgeworICAgICAgICByZXR1cm4gaW5z
ZXJ0KHN5bWJvbC5nZXRNYW5nbGVkTmFtZSgpLCBzeW1ib2wpOworICAgIH0KKworICAgIFRTeW1i
b2wqIGZpbmQoY29uc3QgVFN0cmluZyYgbmFtZSkgY29uc3QKKyAgICB7CisgICAgICAgIHRMZXZl
bDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsZXZlbC5maW5kKG5hbWUpOworICAgICAgICBpZiAoaXQg
PT0gbGV2ZWwuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgcmV0dXJuICgqaXQpLnNlY29uZDsKKyAgICB9CisKKyAgICBjb25zdF9pdGVyYXRv
ciBiZWdpbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbGV2ZWwuYmVnaW4oKTsKKyAg
ICB9CisKKyAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGxldmVsLmVuZCgpOworICAgIH0KKworICAgIHZvaWQgcmVsYXRlVG9PcGVyYXRvcihjb25z
dCBjaGFyKiBuYW1lLCBUT3BlcmF0b3Igb3ApOworICAgIHZvaWQgcmVsYXRlVG9FeHRlbnNpb24o
Y29uc3QgY2hhciogbmFtZSwgY29uc3QgVFN0cmluZyYgZXh0KTsKKyAgICB2b2lkIGR1bXAoVElu
Zm9TaW5rICZpbmZvU2luaykgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICB0TGV2ZWwgbGV2ZWw7
Cit9OworCitjbGFzcyBUU3ltYm9sVGFibGUgeworcHVibGljOgorICAgIFRTeW1ib2xUYWJsZSgp
IDogdW5pcXVlSWQoMCkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFRoZSBzeW1ib2wg
dGFibGUgY2Fubm90IGJlIHVzZWQgdW50aWwgcHVzaCgpIGlzIGNhbGxlZCwgYnV0CisgICAgICAg
IC8vIHRoZSBsYWNrIG9mIGFuIGluaXRpYWwgY2FsbCB0byBwdXNoKCkgY2FuIGJlIHVzZWQgdG8g
ZGV0ZWN0CisgICAgICAgIC8vIHRoYXQgdGhlIHN5bWJvbCB0YWJsZSBoYXMgbm90IGJlZW4gcHJl
bG9hZGVkIHdpdGggYnVpbHQtaW5zLgorICAgICAgICAvLworICAgIH0KKyAgICB+VFN5bWJvbFRh
YmxlKCk7CisKKyAgICAvLworICAgIC8vIFdoZW4gdGhlIHN5bWJvbCB0YWJsZSBpcyBpbml0aWFs
aXplZCB3aXRoIHRoZSBidWlsdC1pbnMsIHRoZXJlIHNob3VsZAorICAgIC8vICdwdXNoJyBjYWxs
cywgc28gdGhhdCBidWlsdC1pbnMgYXJlIGF0IGxldmVsIDAgYW5kIHRoZSBzaGFkZXIKKyAgICAv
LyBnbG9iYWxzIGFyZSBhdCBsZXZlbCAxLgorICAgIC8vCisgICAgYm9vbCBpc0VtcHR5KCkgeyBy
ZXR1cm4gdGFibGUuc2l6ZSgpID09IDA7IH0KKyAgICBib29sIGF0QnVpbHRJbkxldmVsKCkgeyBy
ZXR1cm4gdGFibGUuc2l6ZSgpID09IDE7IH0KKyAgICBib29sIGF0R2xvYmFsTGV2ZWwoKSB7IHJl
dHVybiB0YWJsZS5zaXplKCkgPD0gMjsgfQorICAgIHZvaWQgcHVzaCgpCisgICAgeworICAgICAg
ICB0YWJsZS5wdXNoX2JhY2sobmV3IFRTeW1ib2xUYWJsZUxldmVsKTsKKyAgICAgICAgcHJlY2lz
aW9uU3RhY2sucHVzaF9iYWNrKG5ldyBQcmVjaXNpb25TdGFja0xldmVsKTsKKyAgICB9CisKKyAg
ICB2b2lkIHBvcCgpCisgICAgeworICAgICAgICBkZWxldGUgdGFibGUuYmFjaygpOworICAgICAg
ICB0YWJsZS5wb3BfYmFjaygpOworCisgICAgICAgIGRlbGV0ZSBwcmVjaXNpb25TdGFjay5iYWNr
KCk7CisgICAgICAgIHByZWNpc2lvblN0YWNrLnBvcF9iYWNrKCk7CisgICAgfQorCisgICAgYm9v
bCBpbnNlcnQoVFN5bWJvbCYgc3ltYm9sKQorICAgIHsKKyAgICAgICAgc3ltYm9sLnNldFVuaXF1
ZUlkKCsrdW5pcXVlSWQpOworICAgICAgICByZXR1cm4gdGFibGVbY3VycmVudExldmVsKCldLT5p
bnNlcnQoc3ltYm9sKTsKKyAgICB9CisKKyAgICBib29sIGluc2VydENvbnN0SW50KGNvbnN0IGNo
YXIgKm5hbWUsIGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIFRWYXJpYWJsZSAqY29uc3RhbnQg
PSBuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKG5hbWUpLCBUVHlwZShFYnRJbnQsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QsIDEpKTsKKyAgICAgICAgY29uc3RhbnQtPmdldENvbnN0UG9pbnRl
cigpLT5zZXRJQ29uc3QodmFsdWUpOworICAgICAgICByZXR1cm4gaW5zZXJ0KCpjb25zdGFudCk7
CisgICAgfQorCisgICAgYm9vbCBpbnNlcnRCdWlsdEluKFRUeXBlICpydmFsdWUsIGNvbnN0IGNo
YXIgKm5hbWUsIFRUeXBlICpwdHlwZTEsIFRUeXBlICpwdHlwZTIgPSAwLCBUVHlwZSAqcHR5cGUz
ID0gMCkKKyAgICB7CisgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9u
KE5ld1Bvb2xUU3RyaW5nKG5hbWUpLCAqcnZhbHVlKTsKKworICAgICAgICBUUGFyYW1ldGVyIHBh
cmFtMSA9IHtOVUxMLCBwdHlwZTF9OworICAgICAgICBmdW5jdGlvbi0+YWRkUGFyYW1ldGVyKHBh
cmFtMSk7CisKKyAgICAgICAgaWYocHR5cGUyKQorICAgICAgICB7CisgICAgICAgICAgICBUUGFy
YW1ldGVyIHBhcmFtMiA9IHtOVUxMLCBwdHlwZTJ9OworICAgICAgICAgICAgZnVuY3Rpb24tPmFk
ZFBhcmFtZXRlcihwYXJhbTIpOworICAgICAgICB9CisKKyAgICAgICAgaWYocHR5cGUzKQorICAg
ICAgICB7CisgICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtMyA9IHtOVUxMLCBwdHlwZTN9Owor
ICAgICAgICAgICAgZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJhbTMpOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIGluc2VydCgqZnVuY3Rpb24pOworICAgIH0KKworICAgIFRTeW1ib2wq
IGZpbmQoY29uc3QgVFN0cmluZyYgbmFtZSwgYm9vbCogYnVpbHRJbiA9IDAsIGJvb2wgKnNhbWVT
Y29wZSA9IDApIAorICAgIHsKKyAgICAgICAgaW50IGxldmVsID0gY3VycmVudExldmVsKCk7Cisg
ICAgICAgIFRTeW1ib2wqIHN5bWJvbDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgc3ltYm9s
ID0gdGFibGVbbGV2ZWxdLT5maW5kKG5hbWUpOworICAgICAgICAgICAgLS1sZXZlbDsKKyAgICAg
ICAgfSB3aGlsZSAoc3ltYm9sID09IDAgJiYgbGV2ZWwgPj0gMCk7CisgICAgICAgIGxldmVsKys7
CisgICAgICAgIGlmIChidWlsdEluKQorICAgICAgICAgICAgKmJ1aWx0SW4gPSBsZXZlbCA9PSAw
OworICAgICAgICBpZiAoc2FtZVNjb3BlKQorICAgICAgICAgICAgKnNhbWVTY29wZSA9IGxldmVs
ID09IGN1cnJlbnRMZXZlbCgpOworICAgICAgICByZXR1cm4gc3ltYm9sOworICAgIH0KKworICAg
IFRTeW1ib2wqIGZpbmRCdWlsdEluKGNvbnN0IFRTdHJpbmcgJm5hbWUpCisgICAgeworICAgICAg
ICByZXR1cm4gdGFibGVbMF0tPmZpbmQobmFtZSk7CisgICAgfQorCisgICAgVFN5bWJvbFRhYmxl
TGV2ZWwqIGdldE91dGVyTGV2ZWwoKSB7CisgICAgICAgIGFzc2VydCh0YWJsZS5zaXplKCkgPj0g
Mik7CisgICAgICAgIHJldHVybiB0YWJsZVtjdXJyZW50TGV2ZWwoKSAtIDFdOworICAgIH0KKwor
ICAgIHZvaWQgcmVsYXRlVG9PcGVyYXRvcihjb25zdCBjaGFyKiBuYW1lLCBUT3BlcmF0b3Igb3Ap
IHsKKyAgICAgICAgdGFibGVbMF0tPnJlbGF0ZVRvT3BlcmF0b3IobmFtZSwgb3ApOworICAgIH0K
KyAgICB2b2lkIHJlbGF0ZVRvRXh0ZW5zaW9uKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFRTdHJp
bmcmIGV4dCkgeworICAgICAgICB0YWJsZVswXS0+cmVsYXRlVG9FeHRlbnNpb24obmFtZSwgZXh0
KTsKKyAgICB9CisgICAgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0OworCisg
ICAgYm9vbCBzZXREZWZhdWx0UHJlY2lzaW9uKGNvbnN0IFRQdWJsaWNUeXBlJiB0eXBlLCBUUHJl
Y2lzaW9uIHByZWMpIHsKKyAgICAgICAgaWYgKCFzdXBwb3J0c1ByZWNpc2lvbih0eXBlLnR5cGUp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAodHlwZS5zaXplICE9IDEg
fHwgdHlwZS5tYXRyaXggfHwgdHlwZS5hcnJheSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gTm90IGFsbG93ZWQgdG8gc2V0IGZvciBhZ2dyZWdhdGUgdHlwZXMKKyAgICAgICAgaW50IGlu
ZGV4T2ZMYXN0RWxlbWVudCA9IHN0YXRpY19jYXN0PGludD4ocHJlY2lzaW9uU3RhY2suc2l6ZSgp
KSAtIDE7CisgICAgICAgICgqcHJlY2lzaW9uU3RhY2tbaW5kZXhPZkxhc3RFbGVtZW50XSlbdHlw
ZS50eXBlXSA9IHByZWM7IC8vIFVzZXMgbWFwIG9wZXJhdG9yIFtdLCBvdmVyd3JpdGVzIHRoZSBj
dXJyZW50IHZhbHVlCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIFNlYXJj
aGVzIGRvd24gdGhlIHByZWNpc2lvblN0YWNrIGZvciBhIHByZWNpc2lvbiBxdWFsaWZpZXIgZm9y
IHRoZSBzcGVjaWZpZWQgVEJhc2ljVHlwZQorICAgIFRQcmVjaXNpb24gZ2V0RGVmYXVsdFByZWNp
c2lvbihUQmFzaWNUeXBlIHR5cGUpIHsKKyAgICAgICAgaWYgKCFzdXBwb3J0c1ByZWNpc2lvbih0
eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBFYnBVbmRlZmluZWQ7CisgICAgICAgIGludCBsZXZl
bCA9IHN0YXRpY19jYXN0PGludD4ocHJlY2lzaW9uU3RhY2suc2l6ZSgpKSAtIDE7CisgICAgICAg
IGFzc2VydChsZXZlbCA+PSAwKTsgLy8gSnVzdCB0byBiZSBzYWZlLiBTaG91bGQgbm90IGhhcHBl
bi4KKyAgICAgICAgUHJlY2lzaW9uU3RhY2tMZXZlbDo6aXRlcmF0b3IgaXQ7CisgICAgICAgIFRQ
cmVjaXNpb24gcHJlYyA9IEVicFVuZGVmaW5lZDsgLy8gSWYgd2UgZG9udCBmaW5kIGFueXRoaW5n
IHdlIHJldHVybiB0aGlzLiBTaG91bGQgd2UgZXJyb3IgY2hlY2sgdGhpcz8KKyAgICAgICAgd2hp
bGUgKGxldmVsID49IDApIHsKKyAgICAgICAgICAgIGl0ID0gcHJlY2lzaW9uU3RhY2tbbGV2ZWxd
LT5maW5kKHR5cGUpOworICAgICAgICAgICAgaWYgKGl0ICE9IHByZWNpc2lvblN0YWNrW2xldmVs
XS0+ZW5kKCkpIHsKKyAgICAgICAgICAgICAgICBwcmVjID0gKCppdCkuc2Vjb25kOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGV2ZWwtLTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gcHJlYzsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgaW50
IGN1cnJlbnRMZXZlbCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4odGFibGUuc2l6
ZSgpKSAtIDE7IH0KKworICAgIGJvb2wgc3VwcG9ydHNQcmVjaXNpb24oVEJhc2ljVHlwZSB0eXBl
KSB7CisgICAgICAvLyBPbmx5IHN1cHBvcnRzIHByZWNpc2lvbiBmb3IgaW50LCBmbG9hdCwgYW5k
IHNhbXBsZXIgdHlwZXMuCisgICAgICByZXR1cm4gdHlwZSA9PSBFYnRGbG9hdCB8fCB0eXBlID09
IEVidEludCB8fCBJc1NhbXBsZXIodHlwZSk7CisgICAgfQorCisgICAgaW50IHVuaXF1ZUlkOyAg
ICAgLy8gZm9yIHVuaXF1ZSBpZGVudGlmaWNhdGlvbiBpbiBjb2RlIGdlbmVyYXRpb24KKyAgICBz
dGQ6OnZlY3RvcjxUU3ltYm9sVGFibGVMZXZlbCo+IHRhYmxlOworICAgIHR5cGVkZWYgVE1hcDxU
QmFzaWNUeXBlLCBUUHJlY2lzaW9uPiBQcmVjaXNpb25TdGFja0xldmVsOworICAgIHN0ZDo6dmVj
dG9yPFByZWNpc2lvblN0YWNrTGV2ZWwqPiBwcmVjaXNpb25TdGFjazsKK307CisKKyNlbmRpZiAv
LyBfU1lNQk9MX1RBQkxFX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckVTU0wuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckVTU0wu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjkyNjJmN2FmOGNiODVhNjIzYzg4MGM3MTM1ODIzZTBlMzI0OTY2MWUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yRVNTTC5jcHAKQEAgLTAsMCArMSw0MyBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckVTU0wu
aCIKKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0RVNTTC5oIgorCitUcmFu
c2xhdG9yRVNTTDo6VHJhbnNsYXRvckVTU0woU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3Bl
YyBzcGVjKQorICAgIDogVENvbXBpbGVyKHR5cGUsIHNwZWMpIHsKK30KKwordm9pZCBUcmFuc2xh
dG9yRVNTTDo6dHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KSB7CisgICAgVEluZm9TaW5rQmFz
ZSYgc2luayA9IGdldEluZm9TaW5rKCkub2JqOworCisgICAgLy8gV3JpdGUgYnVpbHQtaW4gZXh0
ZW5zaW9uIGJlaGF2aW9ycy4KKyAgICB3cml0ZUV4dGVuc2lvbkJlaGF2aW9yKCk7CisKKyAgICAv
LyBXcml0ZSBlbXVsYXRlZCBidWlsdC1pbiBmdW5jdGlvbnMgaWYgbmVlZGVkLgorICAgIGdldEJ1
aWx0SW5GdW5jdGlvbkVtdWxhdG9yKCkuT3V0cHV0RW11bGF0ZWRGdW5jdGlvbkRlZmluaXRpb24o
CisgICAgICAgIHNpbmssIGdldFNoYWRlclR5cGUoKSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpOwor
CisgICAgLy8gV3JpdGUgYXJyYXkgYm91bmRzIGNsYW1waW5nIGVtdWxhdGlvbiBpZiBuZWVkZWQu
CisgICAgZ2V0QXJyYXlCb3VuZHNDbGFtcGVyKCkuT3V0cHV0Q2xhbXBpbmdGdW5jdGlvbkRlZmlu
aXRpb24oc2luayk7CisKKyAgICAvLyBXcml0ZSB0cmFuc2xhdGVkIHNoYWRlci4KKyAgICBUT3V0
cHV0RVNTTCBvdXRwdXRFU1NMKHNpbmssIGdldEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5KCks
IGdldEhhc2hGdW5jdGlvbigpLCBnZXROYW1lTWFwKCksIGdldFN5bWJvbFRhYmxlKCkpOworICAg
IHJvb3QtPnRyYXZlcnNlKCZvdXRwdXRFU1NMKTsKK30KKwordm9pZCBUcmFuc2xhdG9yRVNTTDo6
d3JpdGVFeHRlbnNpb25CZWhhdmlvcigpIHsKKyAgICBUSW5mb1NpbmtCYXNlJiBzaW5rID0gZ2V0
SW5mb1NpbmsoKS5vYmo7CisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRlbnNpb25C
ZWhhdmlvciA9IGdldEV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgZm9yIChURXh0ZW5zaW9uQmVo
YXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRlbnNpb25CZWhhdmlvci5iZWdpbigpOwor
ICAgICAgICAgaXRlciAhPSBleHRlbnNpb25CZWhhdmlvci5lbmQoKTsgKytpdGVyKSB7CisgICAg
ICAgIGlmIChpdGVyLT5zZWNvbmQgIT0gRUJoVW5kZWZpbmVkKSB7CisgICAgICAgICAgICBzaW5r
IDw8ICIjZXh0ZW5zaW9uICIgPDwgaXRlci0+Zmlyc3QgPDwgIiA6ICIKKyAgICAgICAgICAgICAg
ICAgPDwgZ2V0QmVoYXZpb3JTdHJpbmcoaXRlci0+c2Vjb25kKSA8PCAiXG4iOworICAgICAgICB9
CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckVTU0wuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JFU1NMLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTE4
ZjNjMjVlYzhiOWVlNTI5NmRkODhhZGRkNWUxM2Q2NjMyZjJhMwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JFU1NMLmgKQEAgLTAsMCArMSwyMyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEx
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBD
T01QSUxFUl9UUkFOU0xBVE9SRVNTTF9IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SRVNT
TF9IXworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oIgorCitjbGFz
cyBUcmFuc2xhdG9yRVNTTCA6IHB1YmxpYyBUQ29tcGlsZXIgeworcHVibGljOgorICAgIFRyYW5z
bGF0b3JFU1NMKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYyk7CisKK3Byb3Rl
Y3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KTsKKwor
cHJpdmF0ZToKKyAgICB2b2lkIHdyaXRlRXh0ZW5zaW9uQmVoYXZpb3IoKTsKK307CisKKyNlbmRp
ZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUkVTU0xfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JHTFNMLmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JHTFNMLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42Njg4ZDdmMzYyZTkwYmRjYzdhZjhmMWE0YWQ1MWE2MDRi
NTJjMGExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckdMU0wuY3BwCkBAIC0wLDAgKzEsNDQgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JHTFNMLmgiCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0wuaCIK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1ZlcnNpb25HTFNMLmgiCisKK3N0YXRpYyB2
b2lkIHdyaXRlVmVyc2lvbihTaFNoYWRlclR5cGUgdHlwZSwgVEludGVybU5vZGUqIHJvb3QsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgVEluZm9TaW5rQmFzZSYgc2luaykgeworICAgIFRWZXJz
aW9uR0xTTCB2ZXJzaW9uR0xTTCh0eXBlKTsKKyAgICByb290LT50cmF2ZXJzZSgmdmVyc2lvbkdM
U0wpOworICAgIGludCB2ZXJzaW9uID0gdmVyc2lvbkdMU0wuZ2V0VmVyc2lvbigpOworICAgIC8v
IFdlIG5lZWQgdG8gd3JpdGUgdmVyc2lvbiBkaXJlY3RpdmUgb25seSBpZiBpdCBpcyBncmVhdGVy
IHRoYW4gMTEwLgorICAgIC8vIElmIHRoZXJlIGlzIG5vIHZlcnNpb24gZGlyZWN0aXZlIGluIHRo
ZSBzaGFkZXIsIDExMCBpcyBpbXBsaWVkLgorICAgIGlmICh2ZXJzaW9uID4gMTEwKSB7CisgICAg
ICAgIHNpbmsgPDwgIiN2ZXJzaW9uICIgPDwgdmVyc2lvbiA8PCAiXG4iOworICAgIH0KK30KKwor
VHJhbnNsYXRvckdMU0w6OlRyYW5zbGF0b3JHTFNMKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRl
clNwZWMgc3BlYykKKyAgICA6IFRDb21waWxlcih0eXBlLCBzcGVjKSB7Cit9CisKK3ZvaWQgVHJh
bnNsYXRvckdMU0w6OnRyYW5zbGF0ZShUSW50ZXJtTm9kZSogcm9vdCkgeworICAgIFRJbmZvU2lu
a0Jhc2UmIHNpbmsgPSBnZXRJbmZvU2luaygpLm9iajsKKworICAgIC8vIFdyaXRlIEdMU0wgdmVy
c2lvbi4KKyAgICB3cml0ZVZlcnNpb24oZ2V0U2hhZGVyVHlwZSgpLCByb290LCBzaW5rKTsKKwor
ICAgIC8vIFdyaXRlIGVtdWxhdGVkIGJ1aWx0LWluIGZ1bmN0aW9ucyBpZiBuZWVkZWQuCisgICAg
Z2V0QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IoKS5PdXRwdXRFbXVsYXRlZEZ1bmN0aW9uRGVmaW5p
dGlvbigKKyAgICAgICAgc2luaywgZmFsc2UpOworCisgICAgLy8gV3JpdGUgYXJyYXkgYm91bmRz
IGNsYW1waW5nIGVtdWxhdGlvbiBpZiBuZWVkZWQuCisgICAgZ2V0QXJyYXlCb3VuZHNDbGFtcGVy
KCkuT3V0cHV0Q2xhbXBpbmdGdW5jdGlvbkRlZmluaXRpb24oc2luayk7CisKKyAgICAvLyBXcml0
ZSB0cmFuc2xhdGVkIHNoYWRlci4KKyAgICBUT3V0cHV0R0xTTCBvdXRwdXRHTFNMKHNpbmssIGdl
dEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5KCksIGdldEhhc2hGdW5jdGlvbigpLCBnZXROYW1l
TWFwKCksIGdldFN5bWJvbFRhYmxlKCkpOworICAgIHJvb3QtPnRyYXZlcnNlKCZvdXRwdXRHTFNM
KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JHTFNMLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yR0xTTC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQwYmIzMTQ1
ZTgwZjdiMjIyYzUzY2JkMzgzMmUxOGZlYmU3OTc2YzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yR0xT
TC5oCkBAIC0wLDAgKzEsMjAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElM
RVJfVFJBTlNMQVRPUkdMU0xfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUkdMU0xfSF8K
KworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU2hIYW5kbGUuaCIKKworY2xhc3MgVHJh
bnNsYXRvckdMU0wgOiBwdWJsaWMgVENvbXBpbGVyIHsKK3B1YmxpYzoKKyAgICBUcmFuc2xhdG9y
R0xTTChTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMpOworCitwcm90ZWN0ZWQ6
CisgICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShUSW50ZXJtTm9kZSogcm9vdCk7Cit9OworCisj
ZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JHTFNMX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9ySExTTC5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9ySExTTC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2MxZGIwMTFiNjZhMjJlYTI2NGZlOWIxZDY3NTFk
MmE5OWQ3ZGY3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JITFNMLmNwcApAQCAtMCwwICsxLDI0IEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9ySExTTC5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXpl
UGFyc2VDb250ZXh0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRITFNM
LmgiCisKK1RyYW5zbGF0b3JITFNMOjpUcmFuc2xhdG9ySExTTChTaFNoYWRlclR5cGUgdHlwZSwg
U2hTaGFkZXJTcGVjIHNwZWMsIFNoU2hhZGVyT3V0cHV0IG91dHB1dCkKKyAgICA6IFRDb21waWxl
cih0eXBlLCBzcGVjKSwgbU91dHB1dFR5cGUob3V0cHV0KQoreworfQorCit2b2lkIFRyYW5zbGF0
b3JITFNMOjp0cmFuc2xhdGUoVEludGVybU5vZGUgKnJvb3QpCit7CisgICAgVFBhcnNlQ29udGV4
dCYgcGFyc2VDb250ZXh0ID0gKkdldEdsb2JhbFBhcnNlQ29udGV4dCgpOworICAgIHNoOjpPdXRw
dXRITFNMIG91dHB1dEhMU0wocGFyc2VDb250ZXh0LCBnZXRSZXNvdXJjZXMoKSwgbU91dHB1dFR5
cGUpOworCisgICAgb3V0cHV0SExTTC5vdXRwdXQoKTsKKyAgICBtQWN0aXZlVW5pZm9ybXMgPSBv
dXRwdXRITFNMLmdldFVuaWZvcm1zKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9ySExTTC5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckhMU0wu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42MjA0YjMwY2MyNDFhYzc5MGYzNjZjZjIzZGNlZDdmZWIxNzA5NDYzCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvckhMU0wuaApAQCAtMCwwICsxLDI3IEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JITFNMX0hfCisjZGVmaW5lIENPTVBJ
TEVSX1RSQU5TTEFUT1JITFNMX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1No
SGFuZGxlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmgiCisKK2Ns
YXNzIFRyYW5zbGF0b3JITFNMIDogcHVibGljIFRDb21waWxlciB7CitwdWJsaWM6CisgICAgVHJh
bnNsYXRvckhMU0woU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBTaFNoYWRl
ck91dHB1dCBvdXRwdXQpOworCisgICAgdmlydHVhbCBUcmFuc2xhdG9ySExTTCAqZ2V0QXNUcmFu
c2xhdG9ySExTTCgpIHsgcmV0dXJuIHRoaXM7IH0KKyAgICBjb25zdCBzaDo6QWN0aXZlVW5pZm9y
bXMgJmdldFVuaWZvcm1zKCkgeyByZXR1cm4gbUFjdGl2ZVVuaWZvcm1zOyB9CisKK3Byb3RlY3Rl
ZDoKKyAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KTsKKworICAg
IHNoOjpBY3RpdmVVbmlmb3JtcyBtQWN0aXZlVW5pZm9ybXM7CisgICAgU2hTaGFkZXJPdXRwdXQg
bU91dHB1dFR5cGU7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JITFNMX0hf
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UeXBlcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMTlmNGYyOWU1NWZmMWY2Nzc4Yzg5MDJmMmFlZTZj
NTNhOGQwYmI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHlwZXMuaApAQCAtMCwwICsxLDMwNyBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworI2lmbmRlZiBfVFlQRVNfSU5DTFVERUQKKyNkZWZpbmUgX1RZUEVTX0lOQ0xV
REVECisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9CYXNlVHlwZXMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L0NvbW1vbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvY29tcGlsZXJkZWJ1Zy5o
IgorCitzdHJ1Y3QgVFB1YmxpY1R5cGU7CitjbGFzcyBUVHlwZTsKKworY2xhc3MgVEZpZWxkCit7
CitwdWJsaWM6CisgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSgpOworICAgIFRGaWVsZChU
VHlwZSogdHlwZSwgVFN0cmluZyogbmFtZSkgOiBtVHlwZSh0eXBlKSwgbU5hbWUobmFtZSkge30K
KworICAgIC8vIFRPRE8oYWxva3ApOiBXZSBzaG91bGQgb25seSByZXR1cm4gY29uc3QgdHlwZS4K
KyAgICAvLyBGaXggaXQgYnkgdHdlYWtpbmcgZ3JhbW1hci4KKyAgICBUVHlwZSogdHlwZSgpIHsg
cmV0dXJuIG1UeXBlOyB9CisgICAgY29uc3QgVFR5cGUqIHR5cGUoKSBjb25zdCB7IHJldHVybiBt
VHlwZTsgfQorCisgICAgY29uc3QgVFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuICptTmFt
ZTsgfQorCitwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihURmllbGQpOwor
ICAgIFRUeXBlKiBtVHlwZTsKKyAgICBUU3RyaW5nKiBtTmFtZTsKK307CisKK3R5cGVkZWYgVFZl
Y3RvcjxURmllbGQqPiBURmllbGRMaXN0OworaW5saW5lIFRGaWVsZExpc3QqIE5ld1Bvb2xURmll
bGRMaXN0KCkKK3sKKyAgICB2b2lkKiBtZW1vcnkgPSBHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCkt
PmFsbG9jYXRlKHNpemVvZihURmllbGRMaXN0KSk7CisgICAgcmV0dXJuIG5ldyhtZW1vcnkpIFRG
aWVsZExpc3Q7Cit9CisKK2NsYXNzIFRTdHJ1Y3R1cmUKK3sKK3B1YmxpYzoKKyAgICBQT09MX0FM
TE9DQVRPUl9ORVdfREVMRVRFKCk7CisgICAgVFN0cnVjdHVyZShUU3RyaW5nKiBuYW1lLCBURmll
bGRMaXN0KiBmaWVsZHMpCisgICAgICAgIDogbU5hbWUobmFtZSksCisgICAgICAgICAgbUZpZWxk
cyhmaWVsZHMpLAorICAgICAgICAgIG1PYmplY3RTaXplKDApLAorICAgICAgICAgIG1EZWVwZXN0
TmVzdGluZygwKSB7CisgICAgfQorCisgICAgY29uc3QgVFN0cmluZyYgbmFtZSgpIGNvbnN0IHsg
cmV0dXJuICptTmFtZTsgfQorICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcygpIGNvbnN0IHsg
cmV0dXJuICptRmllbGRzOyB9CisKKyAgICBjb25zdCBUU3RyaW5nJiBtYW5nbGVkTmFtZSgpIGNv
bnN0IHsKKyAgICAgICAgaWYgKG1NYW5nbGVkTmFtZS5lbXB0eSgpKQorICAgICAgICAgICAgbU1h
bmdsZWROYW1lID0gYnVpbGRNYW5nbGVkTmFtZSgpOworICAgICAgICByZXR1cm4gbU1hbmdsZWRO
YW1lOworICAgIH0KKyAgICBzaXplX3Qgb2JqZWN0U2l6ZSgpIGNvbnN0IHsKKyAgICAgICAgaWYg
KG1PYmplY3RTaXplID09IDApCisgICAgICAgICAgICBtT2JqZWN0U2l6ZSA9IGNhbGN1bGF0ZU9i
amVjdFNpemUoKTsKKyAgICAgICAgcmV0dXJuIG1PYmplY3RTaXplOworICAgIH07CisgICAgaW50
IGRlZXBlc3ROZXN0aW5nKCkgY29uc3QgeworICAgICAgICBpZiAobURlZXBlc3ROZXN0aW5nID09
IDApCisgICAgICAgICAgICBtRGVlcGVzdE5lc3RpbmcgPSBjYWxjdWxhdGVEZWVwZXN0TmVzdGlu
ZygpOworICAgICAgICByZXR1cm4gbURlZXBlc3ROZXN0aW5nOworICAgIH0KKyAgICBib29sIGNv
bnRhaW5zQXJyYXlzKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRf
QVNTSUdOKFRTdHJ1Y3R1cmUpOworICAgIFRTdHJpbmcgYnVpbGRNYW5nbGVkTmFtZSgpIGNvbnN0
OworICAgIHNpemVfdCBjYWxjdWxhdGVPYmplY3RTaXplKCkgY29uc3Q7CisgICAgaW50IGNhbGN1
bGF0ZURlZXBlc3ROZXN0aW5nKCkgY29uc3Q7CisKKyAgICBUU3RyaW5nKiBtTmFtZTsKKyAgICBU
RmllbGRMaXN0KiBtRmllbGRzOworCisgICAgbXV0YWJsZSBUU3RyaW5nIG1NYW5nbGVkTmFtZTsK
KyAgICBtdXRhYmxlIHNpemVfdCBtT2JqZWN0U2l6ZTsKKyAgICBtdXRhYmxlIGludCBtRGVlcGVz
dE5lc3Rpbmc7Cit9OworCisvLworLy8gQmFzZSBjbGFzcyBmb3IgdGhpbmdzIHRoYXQgaGF2ZSBh
IHR5cGUuCisvLworY2xhc3MgVFR5cGUKK3sKK3B1YmxpYzoKKyAgICBQT09MX0FMTE9DQVRPUl9O
RVdfREVMRVRFKCk7CisgICAgVFR5cGUoKSB7fQorICAgIFRUeXBlKFRCYXNpY1R5cGUgdCwgVFBy
ZWNpc2lvbiBwLCBUUXVhbGlmaWVyIHEgPSBFdnFUZW1wb3JhcnksIHVuc2lnbmVkIGNoYXIgcyA9
IDEsIGJvb2wgbSA9IGZhbHNlLCBib29sIGEgPSBmYWxzZSkgOgorICAgICAgICAgICAgdHlwZSh0
KSwgcHJlY2lzaW9uKHApLCBxdWFsaWZpZXIocSksIHNpemUocyksIG1hdHJpeChtKSwgYXJyYXko
YSksIGFycmF5U2l6ZSgwKSwgc3RydWN0dXJlKDApCisgICAgeworICAgIH0KKyAgICBleHBsaWNp
dCBUVHlwZShjb25zdCBUUHVibGljVHlwZSAmcCk7CisgICAgVFR5cGUoVFN0cnVjdHVyZSogdXNl
ckRlZiwgVFByZWNpc2lvbiBwID0gRWJwVW5kZWZpbmVkKSA6CisgICAgICAgICAgICB0eXBlKEVi
dFN0cnVjdCksIHByZWNpc2lvbihwKSwgcXVhbGlmaWVyKEV2cVRlbXBvcmFyeSksIHNpemUoMSks
IG1hdHJpeChmYWxzZSksIGFycmF5KGZhbHNlKSwgYXJyYXlTaXplKDApLCBzdHJ1Y3R1cmUodXNl
ckRlZikKKyAgICB7CisgICAgfQorCisgICAgVEJhc2ljVHlwZSBnZXRCYXNpY1R5cGUoKSBjb25z
dCB7IHJldHVybiB0eXBlOyB9CisgICAgdm9pZCBzZXRCYXNpY1R5cGUoVEJhc2ljVHlwZSB0KSB7
IHR5cGUgPSB0OyB9CisKKyAgICBUUHJlY2lzaW9uIGdldFByZWNpc2lvbigpIGNvbnN0IHsgcmV0
dXJuIHByZWNpc2lvbjsgfQorICAgIHZvaWQgc2V0UHJlY2lzaW9uKFRQcmVjaXNpb24gcCkgeyBw
cmVjaXNpb24gPSBwOyB9CisKKyAgICBUUXVhbGlmaWVyIGdldFF1YWxpZmllcigpIGNvbnN0IHsg
cmV0dXJuIHF1YWxpZmllcjsgfQorICAgIHZvaWQgc2V0UXVhbGlmaWVyKFRRdWFsaWZpZXIgcSkg
eyBxdWFsaWZpZXIgPSBxOyB9CisKKyAgICAvLyBPbmUtZGltZW5zaW9uYWwgc2l6ZSBvZiBzaW5n
bGUgaW5zdGFuY2UgdHlwZQorICAgIGludCBnZXROb21pbmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IHNpemU7IH0KKyAgICB2b2lkIHNldE5vbWluYWxTaXplKHVuc2lnbmVkIGNoYXIgcykgeyBzaXpl
ID0gczsgfQorICAgIC8vIEZ1bGwgc2l6ZSBvZiBzaW5nbGUgaW5zdGFuY2Ugb2YgdHlwZQorICAg
IHNpemVfdCBnZXRPYmplY3RTaXplKCkgY29uc3Q7CisKKyAgICBpbnQgZWxlbWVudFJlZ2lzdGVy
Q291bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gZ2V0U3RydWN0KCktPmZpZWxk
cygpOworICAgICAgICAgICAgaW50IHJlZ2lzdGVyQ291bnQgPSAwOworCisgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZWdpc3RlckNvdW50ICs9IGZpZWxkc1tpXS0+dHlwZSgpLT50b3Rh
bFJlZ2lzdGVyQ291bnQoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHJl
Z2lzdGVyQ291bnQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaXNNYXRyaXgoKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdldE5vbWluYWxTaXplKCk7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGludCB0b3RhbFJlZ2lzdGVyQ291bnQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKGFycmF5KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYXJyYXlTaXpl
ICogZWxlbWVudFJlZ2lzdGVyQ291bnQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50UmVnaXN0ZXJDb3VudCgpOworICAgICAg
ICB9CisgICAgfQorCisgICAgYm9vbCBpc01hdHJpeCgpIGNvbnN0IHsgcmV0dXJuIG1hdHJpeCA/
IHRydWUgOiBmYWxzZTsgfQorICAgIHZvaWQgc2V0TWF0cml4KGJvb2wgbSkgeyBtYXRyaXggPSBt
OyB9CisKKyAgICBib29sIGlzQXJyYXkoKSBjb25zdCAgeyByZXR1cm4gYXJyYXkgPyB0cnVlIDog
ZmFsc2U7IH0KKyAgICBpbnQgZ2V0QXJyYXlTaXplKCkgY29uc3QgeyByZXR1cm4gYXJyYXlTaXpl
OyB9CisgICAgdm9pZCBzZXRBcnJheVNpemUoaW50IHMpIHsgYXJyYXkgPSB0cnVlOyBhcnJheVNp
emUgPSBzOyB9CisgICAgdm9pZCBjbGVhckFycmF5bmVzcygpIHsgYXJyYXkgPSBmYWxzZTsgYXJy
YXlTaXplID0gMDsgfQorCisgICAgYm9vbCBpc1ZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIHNpemUg
PiAxICYmICFtYXRyaXg7IH0KKyAgICBib29sIGlzU2NhbGFyKCkgY29uc3QgeyByZXR1cm4gc2l6
ZSA9PSAxICYmICFtYXRyaXggJiYgIXN0cnVjdHVyZTsgfQorCisgICAgVFN0cnVjdHVyZSogZ2V0
U3RydWN0KCkgY29uc3QgeyByZXR1cm4gc3RydWN0dXJlOyB9CisgICAgdm9pZCBzZXRTdHJ1Y3Qo
VFN0cnVjdHVyZSogcykgeyBzdHJ1Y3R1cmUgPSBzOyB9CisKKyAgICBjb25zdCBUU3RyaW5nJiBn
ZXRNYW5nbGVkTmFtZSgpIGNvbnN0IHsKKyAgICAgICAgaWYgKG1hbmdsZWQuZW1wdHkoKSkgewor
ICAgICAgICAgICAgbWFuZ2xlZCA9IGJ1aWxkTWFuZ2xlZE5hbWUoKTsKKyAgICAgICAgICAgIG1h
bmdsZWQgKz0gJzsnOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtYW5nbGVkOworICAgIH0K
KworICAgIGJvb2wgc2FtZUVsZW1lbnRUeXBlKGNvbnN0IFRUeXBlJiByaWdodCkgY29uc3Qgewor
ICAgICAgICByZXR1cm4gICAgICB0eXBlID09IHJpZ2h0LnR5cGUgICAmJgorICAgICAgICAgICAg
ICAgICAgICBzaXplID09IHJpZ2h0LnNpemUgICAmJgorICAgICAgICAgICAgICAgICAgbWF0cml4
ID09IHJpZ2h0Lm1hdHJpeCAmJgorICAgICAgICAgICAgICAgc3RydWN0dXJlID09IHJpZ2h0LnN0
cnVjdHVyZTsKKyAgICB9CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRUeXBlJiByaWdodCkg
Y29uc3QgeworICAgICAgICByZXR1cm4gICAgICB0eXBlID09IHJpZ2h0LnR5cGUgICAmJgorICAg
ICAgICAgICAgICAgICAgICBzaXplID09IHJpZ2h0LnNpemUgICAmJgorICAgICAgICAgICAgICAg
ICAgbWF0cml4ID09IHJpZ2h0Lm1hdHJpeCAmJgorICAgICAgICAgICAgICAgICAgIGFycmF5ID09
IHJpZ2h0LmFycmF5ICAmJiAoIWFycmF5IHx8IGFycmF5U2l6ZSA9PSByaWdodC5hcnJheVNpemUp
ICYmCisgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPT0gcmlnaHQuc3RydWN0dXJlOworICAgICAg
ICAvLyBkb24ndCBjaGVjayB0aGUgcXVhbGlmaWVyLCBpdCdzIG5vdCBldmVyIHdoYXQncyBiZWlu
ZyBzb3VnaHQgYWZ0ZXIKKyAgICB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRUeXBlJiBy
aWdodCkgY29uc3QgeworICAgICAgICByZXR1cm4gIW9wZXJhdG9yPT0ocmlnaHQpOworICAgIH0K
KyAgICBib29sIG9wZXJhdG9yPChjb25zdCBUVHlwZSYgcmlnaHQpIGNvbnN0IHsKKyAgICAgICAg
aWYgKHR5cGUgIT0gcmlnaHQudHlwZSkgcmV0dXJuIHR5cGUgPCByaWdodC50eXBlOworICAgICAg
ICBpZiAoc2l6ZSAhPSByaWdodC5zaXplKSByZXR1cm4gc2l6ZSA8IHJpZ2h0LnNpemU7CisgICAg
ICAgIGlmIChtYXRyaXggIT0gcmlnaHQubWF0cml4KSByZXR1cm4gbWF0cml4IDwgcmlnaHQubWF0
cml4OworICAgICAgICBpZiAoYXJyYXkgIT0gcmlnaHQuYXJyYXkpIHJldHVybiBhcnJheSA8IHJp
Z2h0LmFycmF5OworICAgICAgICBpZiAoYXJyYXlTaXplICE9IHJpZ2h0LmFycmF5U2l6ZSkgcmV0
dXJuIGFycmF5U2l6ZSA8IHJpZ2h0LmFycmF5U2l6ZTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZSAh
PSByaWdodC5zdHJ1Y3R1cmUpIHJldHVybiBzdHJ1Y3R1cmUgPCByaWdodC5zdHJ1Y3R1cmU7CisK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGNvbnN0IGNoYXIqIGdldEJhc2lj
U3RyaW5nKCkgY29uc3QgeyByZXR1cm4gOjpnZXRCYXNpY1N0cmluZyh0eXBlKTsgfQorICAgIGNv
bnN0IGNoYXIqIGdldFByZWNpc2lvblN0cmluZygpIGNvbnN0IHsgcmV0dXJuIDo6Z2V0UHJlY2lz
aW9uU3RyaW5nKHByZWNpc2lvbik7IH0KKyAgICBjb25zdCBjaGFyKiBnZXRRdWFsaWZpZXJTdHJp
bmcoKSBjb25zdCB7IHJldHVybiA6OmdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpOyB9Cisg
ICAgVFN0cmluZyBnZXRDb21wbGV0ZVN0cmluZygpIGNvbnN0OworCisgICAgLy8gSWYgdGhpcyB0
eXBlIGlzIGEgc3RydWN0LCByZXR1cm5zIHRoZSBkZWVwZXN0IHN0cnVjdCBuZXN0aW5nIG9mCisg
ICAgLy8gYW55IGZpZWxkIGluIHRoZSBzdHJ1Y3QuIEZvciBleGFtcGxlOgorICAgIC8vICAgc3Ry
dWN0IG5lc3RpbmcxIHsKKyAgICAvLyAgICAgdmVjNCBwb3NpdGlvbjsKKyAgICAvLyAgIH07Cisg
ICAgLy8gICBzdHJ1Y3QgbmVzdGluZzIgeworICAgIC8vICAgICBuZXN0aW5nMSBmaWVsZDE7Cisg
ICAgLy8gICAgIHZlYzQgZmllbGQyOworICAgIC8vICAgfTsKKyAgICAvLyBGb3IgdHlwZSAibmVz
dGluZzIiLCB0aGlzIG1ldGhvZCB3b3VsZCByZXR1cm4gMiAtLSB0aGUgbnVtYmVyCisgICAgLy8g
b2Ygc3RydWN0dXJlcyB0aHJvdWdoIHdoaWNoIGluZGlyZWN0aW9uIG11c3Qgb2NjdXIgdG8gcmVh
Y2ggdGhlCisgICAgLy8gZGVlcGVzdCBmaWVsZCAobmVzdGluZzIuZmllbGQxLnBvc2l0aW9uKS4K
KyAgICBpbnQgZ2V0RGVlcGVzdFN0cnVjdE5lc3RpbmcoKSBjb25zdCB7CisgICAgICAgIHJldHVy
biBzdHJ1Y3R1cmUgPyBzdHJ1Y3R1cmUtPmRlZXBlc3ROZXN0aW5nKCkgOiAwOworICAgIH0KKwor
ICAgIGJvb2wgaXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlzKCkgY29uc3QgeworICAgICAgICBy
ZXR1cm4gc3RydWN0dXJlID8gc3RydWN0dXJlLT5jb250YWluc0FycmF5cygpIDogZmFsc2U7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIFRTdHJpbmcgYnVpbGRNYW5nbGVkTmFtZSgpIGNvbnN0Owor
CisgICAgVEJhc2ljVHlwZSB0eXBlOworICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOworICAgIFRR
dWFsaWZpZXIgcXVhbGlmaWVyOworICAgIHVuc2lnbmVkIGNoYXIgc2l6ZTsKKyAgICBib29sIG1h
dHJpeDsKKyAgICBib29sIGFycmF5OworICAgIGludCBhcnJheVNpemU7CisKKyAgICBUU3RydWN0
dXJlKiBzdHJ1Y3R1cmU7ICAgICAgLy8gMCB1bmxlc3MgdGhpcyBpcyBhIHN0cnVjdAorCisgICAg
bXV0YWJsZSBUU3RyaW5nIG1hbmdsZWQ7Cit9OworCisvLworLy8gVGhpcyBpcyBhIHdvcmthcm91
bmQgZm9yIGEgcHJvYmxlbSB3aXRoIHRoZSB5YWNjIHN0YWNrLCAgSXQgY2FuJ3QgaGF2ZQorLy8g
dHlwZXMgdGhhdCBpdCB0aGlua3MgaGF2ZSBub24tdHJpdmlhbCBjb25zdHJ1Y3RvcnMuICBJdCBz
aG91bGQKKy8vIGp1c3QgYmUgdXNlZCB3aGlsZSByZWNvZ25pemluZyB0aGUgZ3JhbW1hciwgbm90
IGFueXRoaW5nIGVsc2UuICBQb2ludGVycworLy8gY291bGQgYmUgdXNlZCwgYnV0IGFsc28gdHJ5
aW5nIHRvIGF2b2lkIGxvdHMgb2YgbWVtb3J5IG1hbmFnZW1lbnQgb3ZlcmhlYWQuCisvLworLy8g
Tm90IGFzIGJhZCBhcyBpdCBsb29rcywgdGhlcmUgaXMgbm8gYWN0dWFsIGFzc3VtcHRpb24gdGhh
dCB0aGUgZmllbGRzCisvLyBtYXRjaCB1cCBvciBhcmUgbmFtZSB0aGUgc2FtZSBvciBhbnl0aGlu
ZyBsaWtlIHRoYXQuCisvLworc3RydWN0IFRQdWJsaWNUeXBlCit7CisgICAgVEJhc2ljVHlwZSB0
eXBlOworICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyOworICAgIFRQcmVjaXNpb24gcHJlY2lzaW9u
OworICAgIHVuc2lnbmVkIGNoYXIgc2l6ZTsgICAgICAgICAgLy8gc2l6ZSBvZiB2ZWN0b3Igb3Ig
bWF0cml4LCBub3Qgc2l6ZSBvZiBhcnJheQorICAgIGJvb2wgbWF0cml4OworICAgIGJvb2wgYXJy
YXk7CisgICAgaW50IGFycmF5U2l6ZTsKKyAgICBUVHlwZSogdXNlckRlZjsKKyAgICBUU291cmNl
TG9jIGxpbmU7CisKKyAgICB2b2lkIHNldEJhc2ljKFRCYXNpY1R5cGUgYnQsIFRRdWFsaWZpZXIg
cSwgY29uc3QgVFNvdXJjZUxvYyYgbG4pCisgICAgeworICAgICAgICB0eXBlID0gYnQ7CisgICAg
ICAgIHF1YWxpZmllciA9IHE7CisgICAgICAgIHByZWNpc2lvbiA9IEVicFVuZGVmaW5lZDsKKyAg
ICAgICAgc2l6ZSA9IDE7CisgICAgICAgIG1hdHJpeCA9IGZhbHNlOworICAgICAgICBhcnJheSA9
IGZhbHNlOworICAgICAgICBhcnJheVNpemUgPSAwOworICAgICAgICB1c2VyRGVmID0gMDsKKyAg
ICAgICAgbGluZSA9IGxuOworICAgIH0KKworICAgIHZvaWQgc2V0QWdncmVnYXRlKHVuc2lnbmVk
IGNoYXIgcywgYm9vbCBtID0gZmFsc2UpCisgICAgeworICAgICAgICBzaXplID0gczsKKyAgICAg
ICAgbWF0cml4ID0gbTsKKyAgICB9CisKKyAgICB2b2lkIHNldEFycmF5KGJvb2wgYSwgaW50IHMg
PSAwKQorICAgIHsKKyAgICAgICAgYXJyYXkgPSBhOworICAgICAgICBhcnJheVNpemUgPSBzOwor
ICAgIH0KKworICAgIGJvb2wgaXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlzKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmICghdXNlckRlZikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHVzZXJEZWYtPmlzU3RydWN0dXJl
Q29udGFpbmluZ0FycmF5cygpOworICAgIH0KK307CisKKyNlbmRpZiAvLyBfVFlQRVNfSU5DTFVE
RURfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iNzgyNjExOWFlYTAwNzRkNGZjY2MwNDg1NTdkMDExMWY3ODkwODMyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5m
b2xkU2hvcnRDaXJjdWl0LmNwcApAQCAtMCwwICsxLDE4NCBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
Ky8vIFVuZm9sZFNob3J0Q2lyY3VpdCBpcyBhbiBBU1QgdHJhdmVyc2VyIHRvIG91dHB1dCBzaG9y
dC1jaXJjdWl0aW5nIG9wZXJhdG9ycyBhcyBpZi1lbHNlIHN0YXRlbWVudHMuCisvLyBUaGUgcmVz
dWx0cyBhcmUgYXNzaWduZWQgdG8gcyMgdGVtcG9yYXJpZXMsIHdoaWNoIGFyZSB1c2VkIGJ5IHRo
ZSBtYWluIHRyYW5zbGF0b3IgaW5zdGVhZCBvZgorLy8gdGhlIG9yaWdpbmFsIGV4cHJlc3Npb24u
CisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXQu
aCIKKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuaCIKKworbmFtZXNwYWNlIHNoCit7CitV
bmZvbGRTaG9ydENpcmN1aXQ6OlVuZm9sZFNob3J0Q2lyY3VpdChUUGFyc2VDb250ZXh0ICZjb250
ZXh0LCBPdXRwdXRITFNMICpvdXRwdXRITFNMKSA6IG1Db250ZXh0KGNvbnRleHQpLCBtT3V0cHV0
SExTTChvdXRwdXRITFNMKQoreworICAgIG1UZW1wb3JhcnlJbmRleCA9IDA7Cit9CisKK3ZvaWQg
VW5mb2xkU2hvcnRDaXJjdWl0Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBp
bnQgcmV3aW5kSW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7CisgICAgbm9kZS0+dHJhdmVyc2UodGhp
cyk7CisgICAgbVRlbXBvcmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7Cit9CisKK2Jvb2wgVW5mb2xk
U2hvcnRDaXJjdWl0Ojp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm9k
ZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtT3V0cHV0SExTTC0+Z2V0Qm9keVN0cmVh
bSgpOworCisgICAgLy8gSWYgb3VyIHJpZ2h0IG5vZGUgZG9lc24ndCBoYXZlIHNpZGUgZWZmZWN0
cywgd2Uga25vdyB3ZSBkb24ndCBuZWVkIHRvIHVuZm9sZCB0aGlzCisgICAgLy8gZXhwcmVzc2lv
bjogdGhlcmUgd2lsbCBiZSBubyBzaG9ydC1jaXJjdWl0aW5nIHNpZGUgZWZmZWN0cyB0byBhdm9p
ZAorICAgIC8vIChub3RlOiB1bmZvbGRpbmcgZG9lc24ndCBkZXBlbmQgb24gdGhlIGxlZnQgbm9k
ZSAtLSBpdCB3aWxsIGFsd2F5cyBiZSBldmFsdWF0ZWQpCisgICAgaWYgKCFub2RlLT5nZXRSaWdo
dCgpLT5oYXNTaWRlRWZmZWN0cygpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wTG9n
aWNhbE9yOgorICAgICAgICAvLyAieCB8fCB5IiBpcyBlcXVpdmFsZW50IHRvICJ4ID8gdHJ1ZSA6
IHkiLCB3aGljaCB1bmZvbGRzIHRvICJib29sIHM7IGlmKHgpIHMgPSB0cnVlOyBlbHNlIHMgPSB5
OyIsCisgICAgICAgIC8vIGFuZCB0aGVuIGZ1cnRoZXIgc2ltcGxpZmllcyBkb3duIHRvICJib29s
IHMgPSB4OyBpZighcykgcyA9IHk7Ii4KKyAgICAgICAgeworICAgICAgICAgICAgaW50IGkgPSBt
VGVtcG9yYXJ5SW5kZXg7CisKKyAgICAgICAgICAgIG91dCA8PCAiYm9vbCBzIiA8PCBpIDw8ICI7
XG4iOworCisgICAgICAgICAgICBvdXQgPDwgIntcbiI7CisKKyAgICAgICAgICAgIG1UZW1wb3Jh
cnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJzZSh0
aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAicyIgPDwgaSA8PCAiID0gIjsKKyAgICAgICAgICAg
IG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50
cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgICAgICBvdXQgPDwgIjtcbiI7CisgICAgICAg
ICAgICBvdXQgPDwgImlmICghcyIgPDwgaSA8PCAiKVxuIgorICAgICAgICAgICAgICAgICAgICJ7
XG4iOworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBu
b2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAiICAg
IHMiIDw8IGkgPDwgIiA9ICI7CisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsK
KyAgICAgICAgICAgIG5vZGUtPmdldFJpZ2h0KCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKKyAg
ICAgICAgICAgIG91dCA8PCAiO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iOworCisgICAg
ICAgICAgICBvdXQgPDwgIn1cbiI7CisKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkg
KyAxOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGNhc2UgRU9wTG9n
aWNhbEFuZDoKKyAgICAgICAgLy8gInggJiYgeSIgaXMgZXF1aXZhbGVudCB0byAieCA/IHkgOiBm
YWxzZSIsIHdoaWNoIHVuZm9sZHMgdG8gImJvb2wgczsgaWYoeCkgcyA9IHk7IGVsc2UgcyA9IGZh
bHNlOyIsCisgICAgICAgIC8vIGFuZCB0aGVuIGZ1cnRoZXIgc2ltcGxpZmllcyBkb3duIHRvICJi
b29sIHMgPSB4OyBpZihzKSBzID0geTsiLgorICAgICAgICB7CisgICAgICAgICAgICBpbnQgaSA9
IG1UZW1wb3JhcnlJbmRleDsKKworICAgICAgICAgICAgb3V0IDw8ICJib29sIHMiIDw8IGkgPDwg
IjtcbiI7CisKKyAgICAgICAgICAgIG91dCA8PCAie1xuIjsKKworICAgICAgICAgICAgbVRlbXBv
cmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNl
KHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICJzIiA8PCBpIDw8ICIgPSAiOworICAgICAgICAg
ICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCkt
PnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKKyAgICAgICAgICAgIG91dCA8PCAiO1xuIjsKKyAgICAg
ICAgICAgIG91dCA8PCAiaWYgKHMiIDw8IGkgPDwgIilcbiIKKyAgICAgICAgICAgICAgICAgICAi
e1xuIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAg
bm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICBvdXQgPDwgIiAg
ICBzIiA8PCBpIDw8ICIgPSAiOworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7
CisgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Cisg
ICAgICAgICAgICBvdXQgPDwgIjtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxuIjsKKworICAg
ICAgICAgICAgb3V0IDw8ICJ9XG4iOworCisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBp
ICsgMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgVW5mb2xkU2hvcnRDaXJjdWl0
Ojp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKK3sK
KyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtT3V0cHV0SExTTC0+Z2V0Qm9keVN0cmVhbSgpOwor
CisgICAgLy8gVW5mb2xkICJiID8geCA6IHkiIGludG8gInR5cGUgczsgaWYoYikgcyA9IHg7IGVs
c2UgcyA9IHk7IgorICAgIGlmIChub2RlLT51c2VzVGVybmFyeU9wZXJhdG9yKCkpCisgICAgewor
ICAgICAgICBpbnQgaSA9IG1UZW1wb3JhcnlJbmRleDsKKworICAgICAgICBvdXQgPDwgbU91dHB1
dEhMU0wtPnR5cGVTdHJpbmcobm9kZS0+Z2V0VHlwZSgpKSA8PCAiIHMiIDw8IGkgPDwgIjtcbiI7
CisKKyAgICAgICAgb3V0IDw8ICJ7XG4iOworCisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkg
KyAxOworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAg
ICAgIG91dCA8PCAiaWYgKCI7CisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAg
ICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAg
ICBvdXQgPDwgIilcbiIKKyAgICAgICAgICAgICAgICJ7XG4iOworICAgICAgICBtVGVtcG9yYXJ5
SW5kZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKHRo
aXMpOworICAgICAgICBvdXQgPDwgIiAgICBzIiA8PCBpIDw8ICIgPSAiOworICAgICAgICBtVGVt
cG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZl
cnNlKG1PdXRwdXRITFNMKTsKKyAgICAgICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAgICAgICAi
fVxuIgorICAgICAgICAgICAgICAgImVsc2VcbiIKKyAgICAgICAgICAgICAgICJ7XG4iOworICAg
ICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9j
aygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8PCAiID0g
IjsKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgIG5vZGUtPmdldEZh
bHNlQmxvY2soKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICBvdXQgPDwgIjtcbiIK
KyAgICAgICAgICAgICAgICJ9XG4iOworCisgICAgICAgIG91dCA8PCAifVxuIjsKKworICAgICAg
ICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgVW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRl
cm1Mb29wICpub2RlKQoreworICAgIGludCByZXdpbmRJbmRleCA9IG1UZW1wb3JhcnlJbmRleDsK
KworICAgIGlmIChub2RlLT5nZXRJbml0KCkpCisgICAgeworICAgICAgICBub2RlLT5nZXRJbml0
KCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKyAgICAKKyAgICBpZiAobm9kZS0+Z2V0Q29uZGl0
aW9uKCkpCisgICAgeworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhp
cyk7CisgICAgfQorCisgICAgaWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkKKyAgICB7CisgICAg
ICAgIG5vZGUtPmdldEV4cHJlc3Npb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorCisgICAg
bVRlbXBvcmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2ludCBVbmZvbGRTaG9ydENpcmN1aXQ6OmdldE5leHRUZW1wb3JhcnlJbmRleCgpCit7CisgICAg
cmV0dXJuIG1UZW1wb3JhcnlJbmRleCsrOworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0Lmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRT
aG9ydENpcmN1aXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZTQxNmJjMDRjMTRmNTNjYTA0Yjg1Yjk3YTlkOTI0
NWRjMGY3MmMwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0LmgKQEAgLTAsMCArMSwzOSBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIFVuZm9sZFNob3J0Q2lyY3VpdCBpcyBhbiBBU1QgdHJh
dmVyc2VyIHRvIG91dHB1dCBzaG9ydC1jaXJjdWl0aW5nIG9wZXJhdG9ycyBhcyBpZi1lbHNlIHN0
YXRlbWVudHMKKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVU5GT0xEU0hPUlRDSVJDVUlUX0hfCisj
ZGVmaW5lIENPTVBJTEVSX1VORk9MRFNIT1JUQ0lSQ1VJVF9IXworCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1BhcnNlQ29udGV4dC5oIgorCituYW1lc3BhY2Ugc2gKK3sKK2NsYXNzIE91dHB1dEhMU0w7
CisKK2NsYXNzIFVuZm9sZFNob3J0Q2lyY3VpdCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7
CisgIHB1YmxpYzoKKyAgICBVbmZvbGRTaG9ydENpcmN1aXQoVFBhcnNlQ29udGV4dCAmY29udGV4
dCwgT3V0cHV0SExTTCAqb3V0cHV0SExTTCk7CisKKyAgICB2b2lkIHRyYXZlcnNlKFRJbnRlcm1O
b2RlICpub2RlKTsKKyAgICBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmlu
YXJ5Kik7CisgICAgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVj
dGlvbiAqbm9kZSk7CisgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29w
ICpub2RlKTsKKworICAgIGludCBnZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKKworICBwcm90ZWN0
ZWQ6CisgICAgVFBhcnNlQ29udGV4dCAmbUNvbnRleHQ7CisgICAgT3V0cHV0SExTTCAqY29uc3Qg
bU91dHB1dEhMU0w7CisKKyAgICBpbnQgbVRlbXBvcmFyeUluZGV4OworfTsKK30KKworI2VuZGlm
ICAgLy8gQ09NUElMRVJfVU5GT0xEU0hPUlRDSVJDVUlUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1
aXRBU1QuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOWM0Mzk3ZDU2MWVhMmFh
ZGYzOTk4NDhlMDQ2MDU0ZTQzYzM5MjcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0QVNU
LmNwcApAQCAtMCwwICsxLDgxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuaCIKKworbmFtZXNwYWNlCit7
CisKKy8vICJ4IHx8IHkiIGlzIGVxdWl2YWxlbnQgdG8gInggPyB0cnVlIDogeSIuCitUSW50ZXJt
U2VsZWN0aW9uICpVbmZvbGRPUihUSW50ZXJtVHlwZWQgKngsIFRJbnRlcm1UeXBlZCAqeSkKK3sK
KyAgICBjb25zdCBUVHlwZSBib29sVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQpOworICAgIENv
bnN0YW50VW5pb24gKnUgPSBuZXcgQ29uc3RhbnRVbmlvbjsKKyAgICB1LT5zZXRCQ29uc3QodHJ1
ZSk7CisgICAgVEludGVybUNvbnN0YW50VW5pb24gKnRydWVOb2RlID0gbmV3IFRJbnRlcm1Db25z
dGFudFVuaW9uKAorICAgICAgICB1LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNv
bnN0LCAxKSk7CisgICAgcmV0dXJuIG5ldyBUSW50ZXJtU2VsZWN0aW9uKHgsIHRydWVOb2RlLCB5
LCBib29sVHlwZSk7Cit9CisKKy8vICJ4ICYmIHkiIGlzIGVxdWl2YWxlbnQgdG8gInggPyB5IDog
ZmFsc2UiLgorVEludGVybVNlbGVjdGlvbiAqVW5mb2xkQU5EKFRJbnRlcm1UeXBlZCAqeCwgVElu
dGVybVR5cGVkICp5KQoreworICAgIGNvbnN0IFRUeXBlIGJvb2xUeXBlKEVidEJvb2wsIEVicFVu
ZGVmaW5lZCk7CisgICAgQ29uc3RhbnRVbmlvbiAqdSA9IG5ldyBDb25zdGFudFVuaW9uOworICAg
IHUtPnNldEJDb25zdChmYWxzZSk7CisgICAgVEludGVybUNvbnN0YW50VW5pb24gKmZhbHNlTm9k
ZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbigKKyAgICAgICAgdSwgVFR5cGUoRWJ0Qm9vbCwg
RWJwVW5kZWZpbmVkLCBFdnFDb25zdCwgMSkpOworICAgIHJldHVybiBuZXcgVEludGVybVNlbGVj
dGlvbih4LCB5LCBmYWxzZU5vZGUsIGJvb2xUeXBlKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIGFu
b255bW91cworCitib29sIFVuZm9sZFNob3J0Q2lyY3VpdEFTVDo6dmlzaXRCaW5hcnkoVmlzaXQg
dmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCit7CisgICAgVEludGVybVNlbGVjdGlvbiAqcmVw
bGFjZW1lbnQgPSBOVUxMOworCisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAg
ICAgIGNhc2UgRU9wTG9naWNhbE9yOgorICAgICAgICByZXBsYWNlbWVudCA9IFVuZm9sZE9SKG5v
ZGUtPmdldExlZnQoKSwgbm9kZS0+Z2V0UmlnaHQoKSk7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFT3BMb2dpY2FsQW5kOgorICAgICAgICByZXBsYWNlbWVudCA9IFVuZm9sZEFORChub2Rl
LT5nZXRMZWZ0KCksIG5vZGUtPmdldFJpZ2h0KCkpOworICAgICAgICBicmVhazsKKyAgICAgIGRl
ZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAocmVwbGFjZW1lbnQpCisgICAg
eworICAgICAgICByZXBsYWNlbWVudHMucHVzaF9iYWNrKAorICAgICAgICAgICAgTm9kZVVwZGF0
ZUVudHJ5KGdldFBhcmVudE5vZGUoKSwgbm9kZSwgcmVwbGFjZW1lbnQpKTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgVW5mb2xkU2hvcnRDaXJjdWl0QVNUOjp1cGRhdGVUcmVl
KCkKK3sKKyAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgcmVwbGFjZW1lbnRzLnNpemUoKTsg
KytpaSkKKyAgICB7CisgICAgICAgIGNvbnN0IE5vZGVVcGRhdGVFbnRyeSYgZW50cnkgPSByZXBs
YWNlbWVudHNbaWldOworICAgICAgICBBU1NFUlQoZW50cnkucGFyZW50KTsKKyAgICAgICAgYm9v
bCByZXBsYWNlZCA9IGVudHJ5LnBhcmVudC0+cmVwbGFjZUNoaWxkTm9kZSgKKyAgICAgICAgICAg
IGVudHJ5Lm9yaWdpbmFsLCBlbnRyeS5yZXBsYWNlbWVudCk7CisgICAgICAgIEFTU0VSVChyZXBs
YWNlZCk7CisKKyAgICAgICAgLy8gSW4gQVNUIHRyYXZlcnNpbmcsIGEgcGFyZW50IGlzIHZpc2l0
ZWQgYmVmb3JlIGl0cyBjaGlsZHJlbi4KKyAgICAgICAgLy8gQWZ0ZXIgd2UgcmVwbGFjZSBhIG5v
ZGUsIGlmIGFuIGltbWVkaWF0ZSBjaGlsZCBpcyB0bworICAgICAgICAvLyBiZSByZXBsYWNlZCwg
d2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgdXBkYXRlIHRoZSByZXBsYWNlZAorCS8vIG5v
ZGU7IGluc3RlYWQsIHdlIHVwZGF0ZSB0aGUgcmVwbGFjZW1lbnQgbm9kZS4KKyAgICAgICAgZm9y
IChzaXplX3QgamogPSBpaSArIDE7IGpqIDwgcmVwbGFjZW1lbnRzLnNpemUoKTsgKytqaikKKyAg
ICAgICAgeworICAgICAgICAgICAgTm9kZVVwZGF0ZUVudHJ5JiBlbnRyeTIgPSByZXBsYWNlbWVu
dHNbampdOworICAgICAgICAgICAgaWYgKGVudHJ5Mi5wYXJlbnQgPT0gZW50cnkub3JpZ2luYWwp
CisgICAgICAgICAgICAgICAgZW50cnkyLnBhcmVudCA9IGVudHJ5LnJlcGxhY2VtZW50OworICAg
ICAgICB9CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1VuZm9sZFNob3J0Q2lyY3Vp
dEFTVC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjI0YzE0YTYwZTM3ZmVkYjIyMmNmOTI2ZDA4NjNiYmQyMjM1Nzc5
YzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuaApAQCAtMCwwICsxLDUxIEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworLy8gVW5mb2xkU2hvcnRDaXJjdWl0QVNUIGlzIGFuIEFTVCB0cmF2
ZXJzZXIgdG8gcmVwbGFjZSBzaG9ydC1jaXJjdWl0aW5nCisvLyBvcGVyYXRpb25zIHdpdGggdGVy
bmFyeSBvcGVyYXRpb25zLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9VTkZPTERfU0hPUlRfQ0lS
Q1VJVF9BU1RfSF8KKyNkZWZpbmUgQ09NUElMRVJfVU5GT0xEX1NIT1JUX0NJUkNVSVRfQVNUX0hf
CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisKKy8vIFRoaXMgdHJhdmVyc2VyIGlkZW50aWZpZXMg
YWxsIHRoZSBzaG9ydCBjaXJjdWl0IGJpbmFyeSAgbm9kZXMgdGhhdCBuZWVkIHRvCisvLyBiZSBy
ZXBsYWNlZCwgYW5kIGNyZWF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgcmVwbGFjZW1lbnQgbm9kZXMu
IEhvd2V2ZXIsCisvLyB0aGUgYWN0dWFsIHJlcGxhY2VtZW50cyBoYXBwZW4gYWZ0ZXIgdGhlIHRy
YXZlcnNlIHRocm91Z2ggdXBkYXRlVHJlZSgpLgorCitjbGFzcyBVbmZvbGRTaG9ydENpcmN1aXRB
U1QgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgVW5mb2xkU2hv
cnRDaXJjdWl0QVNUKCkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQg
dmlzaXQsIFRJbnRlcm1CaW5hcnkgKik7CisKKyAgICB2b2lkIHVwZGF0ZVRyZWUoKTsKKworICBw
cml2YXRlOgorICAgIHN0cnVjdCBOb2RlVXBkYXRlRW50cnkKKyAgICB7CisgICAgICAgIE5vZGVV
cGRhdGVFbnRyeShUSW50ZXJtTm9kZSAqX3BhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IFRJbnRlcm1Ob2RlICpfb3JpZ2luYWwsCisgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJt
Tm9kZSAqX3JlcGxhY2VtZW50KQorICAgICAgICAgICAgOiBwYXJlbnQoX3BhcmVudCksCisgICAg
ICAgICAgICAgIG9yaWdpbmFsKF9vcmlnaW5hbCksCisgICAgICAgICAgICAgIHJlcGxhY2VtZW50
KF9yZXBsYWNlbWVudCkge30KKworICAgICAgICBUSW50ZXJtTm9kZSAqcGFyZW50OworICAgICAg
ICBUSW50ZXJtTm9kZSAqb3JpZ2luYWw7CisgICAgICAgIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVu
dDsKKyAgICB9OworCisgICAgLy8gRHVyaW5nIHRyYXZlcnNpbmcsIHNhdmUgYWxsIHRoZSByZXBs
YWNlbWVudHMgdGhhdCBuZWVkIHRvIGhhcHBlbjsKKyAgICAvLyB0aGVuIHJlcGxhY2UgdGhlbSBi
eSBjYWxsaW5nIHVwZGF0ZU5vZGVzKCkuCisgICAgc3RkOjp2ZWN0b3I8Tm9kZVVwZGF0ZUVudHJ5
PiByZXBsYWNlbWVudHM7CisKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVW5mb2xkU2hv
cnRDaXJjdWl0QVNUKTsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVU5GT0xEX1NIT1JUX0NJ
UkNVSVRfQVNUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1VuaWZvcm0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkyMmUxM2YwNzEy
MDgxZTU1NzRjODBkNDlkNWY3NGRlMDUzN2E5ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmNwcApAQCAt
MCwwICsxLDIxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvVW5pZm9ybS5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworVW5pZm9ybTo6VW5pZm9ybShHTGVu
dW0gdHlwZSwgR0xlbnVtIHByZWNpc2lvbiwgY29uc3QgY2hhciAqbmFtZSwgaW50IGFycmF5U2l6
ZSwgaW50IHJlZ2lzdGVySW5kZXgpCit7CisgICAgdGhpcy0+dHlwZSA9IHR5cGU7CisgICAgdGhp
cy0+cHJlY2lzaW9uID0gcHJlY2lzaW9uOworICAgIHRoaXMtPm5hbWUgPSBuYW1lOworICAgIHRo
aXMtPmFycmF5U2l6ZSA9IGFycmF5U2l6ZTsKKyAgICB0aGlzLT5yZWdpc3RlckluZGV4ID0gcmVn
aXN0ZXJJbmRleDsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5pZm9ybS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5pZm9ybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRjNTNmZmE3
ZDJmYzU4NGU0MDBjMmNmMDRkMDEyZTZhZjFlMjUyZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmgKQEAg
LTAsMCArMSwzNSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVU5JRk9STV9I
XworI2RlZmluZSBDT01QSUxFUl9VTklGT1JNX0hfCisKKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5j
bHVkZSA8dmVjdG9yPgorCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMi9nbDIu
aD4KKworbmFtZXNwYWNlIHNoCit7CisKK3N0cnVjdCBVbmlmb3JtCit7CisgICAgVW5pZm9ybShH
TGVudW0gdHlwZSwgR0xlbnVtIHByZWNpc2lvbiwgY29uc3QgY2hhciAqbmFtZSwgaW50IGFycmF5
U2l6ZSwgaW50IHJlZ2lzdGVySW5kZXgpOworCisgICAgR0xlbnVtIHR5cGU7CisgICAgR0xlbnVt
IHByZWNpc2lvbjsKKyAgICBzdGQ6OnN0cmluZyBuYW1lOworICAgIHVuc2lnbmVkIGludCBhcnJh
eVNpemU7CisgICAgCisgICAgaW50IHJlZ2lzdGVySW5kZXg7Cit9OworCit0eXBlZGVmIHN0ZDo6
dmVjdG9yPFVuaWZvcm0+IEFjdGl2ZVVuaWZvcm1zOworCit9CisKKyNlbmRpZiAgIC8vIENPTVBJ
TEVSX1VOSUZPUk1fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1pdGF0aW9ucy5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uM2MyY2M0MWNkYTM2ZjgxMzcxMWZmMzY4ODRmMjViMDY2YmJjODg0OAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwCkBAIC0wLDAgKzEsNTEyIEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUxp
bWl0YXRpb25zLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCisKK25hbWVzcGFj
ZSB7Citib29sIElzTG9vcEluZGV4KGNvbnN0IFRJbnRlcm1TeW1ib2wqIHN5bWJvbCwgY29uc3Qg
VExvb3BTdGFjayYgc3RhY2spIHsKKyAgICBmb3IgKFRMb29wU3RhY2s6OmNvbnN0X2l0ZXJhdG9y
IGkgPSBzdGFjay5iZWdpbigpOyBpICE9IHN0YWNrLmVuZCgpOyArK2kpIHsKKyAgICAgICAgaWYg
KGktPmluZGV4LmlkID09IHN5bWJvbC0+Z2V0SWQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgTWFya0xvb3BGb3JVbnJvbGwo
Y29uc3QgVEludGVybVN5bWJvbCogc3ltYm9sLCBUTG9vcFN0YWNrJiBzdGFjaykgeworICAgIGZv
ciAoVExvb3BTdGFjazo6aXRlcmF0b3IgaSA9IHN0YWNrLmJlZ2luKCk7IGkgIT0gc3RhY2suZW5k
KCk7ICsraSkgeworICAgICAgICBpZiAoaS0+aW5kZXguaWQgPT0gc3ltYm9sLT5nZXRJZCgpKSB7
CisgICAgICAgICAgICBBU1NFUlQoaS0+bG9vcCAhPSBOVUxMKTsKKyAgICAgICAgICAgIGktPmxv
b3AtPnNldFVucm9sbEZsYWcodHJ1ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisgICAgVU5SRUFDSEFCTEUoKTsKK30KKworLy8gVHJhdmVyc2VzIGEgbm9kZSB0byBj
aGVjayBpZiBpdCByZXByZXNlbnRzIGEgY29uc3RhbnQgaW5kZXggZXhwcmVzc2lvbi4KKy8vIERl
ZmluaXRpb246CisvLyBjb25zdGFudC1pbmRleC1leHByZXNzaW9ucyBhcmUgYSBzdXBlcnNldCBv
ZiBjb25zdGFudC1leHByZXNzaW9ucy4KKy8vIENvbnN0YW50LWluZGV4LWV4cHJlc3Npb25zIGNh
biBpbmNsdWRlIGxvb3AgaW5kaWNlcyBhcyBkZWZpbmVkIGluCisvLyBHTFNMIEVTIDEuMCBzcGVj
LCBBcHBlbmRpeCBBLCBzZWN0aW9uIDQuCisvLyBUaGUgZm9sbG93aW5nIGFyZSBjb25zdGFudC1p
bmRleC1leHByZXNzaW9uczoKKy8vIC0gQ29uc3RhbnQgZXhwcmVzc2lvbnMKKy8vIC0gTG9vcCBp
bmRpY2VzIGFzIGRlZmluZWQgaW4gc2VjdGlvbiA0CisvLyAtIEV4cHJlc3Npb25zIGNvbXBvc2Vk
IG9mIGJvdGggb2YgdGhlIGFib3ZlCitjbGFzcyBWYWxpZGF0ZUNvbnN0SW5kZXhFeHByIDogcHVi
bGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgorICAgIFZhbGlkYXRlQ29uc3RJbmRleEV4
cHIoY29uc3QgVExvb3BTdGFjayYgc3RhY2spCisgICAgICAgIDogbVZhbGlkKHRydWUpLCBtTG9v
cFN0YWNrKHN0YWNrKSB7fQorCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBwYXJzZWQgbm9k
ZSByZXByZXNlbnRzIGEgY29uc3RhbnQgaW5kZXggZXhwcmVzc2lvbi4KKyAgICBib29sIGlzVmFs
aWQoKSBjb25zdCB7IHJldHVybiBtVmFsaWQ7IH0KKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5
bWJvbChUSW50ZXJtU3ltYm9sKiBzeW1ib2wpIHsKKyAgICAgICAgLy8gT25seSBjb25zdGFudHMg
YW5kIGxvb3AgaW5kaWNlcyBhcmUgYWxsb3dlZCBpbiBhCisgICAgICAgIC8vIGNvbnN0YW50IGlu
ZGV4IGV4cHJlc3Npb24uCisgICAgICAgIGlmIChtVmFsaWQpIHsKKyAgICAgICAgICAgIG1WYWxp
ZCA9IChzeW1ib2wtPmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB8fAorICAgICAgICAgICAg
ICAgICAgICAgSXNMb29wSW5kZXgoc3ltYm9sLCBtTG9vcFN0YWNrKTsKKyAgICAgICAgfQorICAg
IH0KKworcHJpdmF0ZToKKyAgICBib29sIG1WYWxpZDsKKyAgICBjb25zdCBUTG9vcFN0YWNrJiBt
TG9vcFN0YWNrOworfTsKKworLy8gVHJhdmVyc2VzIGEgbm9kZSB0byBjaGVjayBpZiBpdCB1c2Vz
IGEgbG9vcCBpbmRleC4KKy8vIElmIGFuIGludCBsb29wIGluZGV4IGlzIHVzZWQgaW4gaXRzIGJv
ZHkgYXMgYSBzYW1wbGVyIGFycmF5IGluZGV4LAorLy8gbWFyayB0aGUgbG9vcCBmb3IgdW5yb2xs
LgorY2xhc3MgVmFsaWRhdGVMb29wSW5kZXhFeHByIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIg
eworcHVibGljOgorICAgIFZhbGlkYXRlTG9vcEluZGV4RXhwcihUTG9vcFN0YWNrJiBzdGFjaykK
KyAgICAgICAgOiBtVXNlc0Zsb2F0TG9vcEluZGV4KGZhbHNlKSwKKyAgICAgICAgICBtVXNlc0lu
dExvb3BJbmRleChmYWxzZSksCisgICAgICAgICAgbUxvb3BTdGFjayhzdGFjaykge30KKworICAg
IGJvb2wgdXNlc0Zsb2F0TG9vcEluZGV4KCkgY29uc3QgeyByZXR1cm4gbVVzZXNGbG9hdExvb3BJ
bmRleDsgfQorICAgIGJvb2wgdXNlc0ludExvb3BJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1Vc2Vz
SW50TG9vcEluZGV4OyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5
bWJvbCogc3ltYm9sKSB7CisgICAgICAgIGlmIChJc0xvb3BJbmRleChzeW1ib2wsIG1Mb29wU3Rh
Y2spKSB7CisgICAgICAgICAgICBzd2l0Y2ggKHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCkpIHsKKyAg
ICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAgICBtVXNlc0Zsb2F0TG9v
cEluZGV4ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBFYnRJbnQ6CisgICAgICAgICAgICAgICAgbVVzZXNJbnRMb29wSW5kZXggPSB0cnVlOworICAg
ICAgICAgICAgICAgIE1hcmtMb29wRm9yVW5yb2xsKHN5bWJvbCwgbUxvb3BTdGFjayk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworcHJp
dmF0ZToKKyAgICBib29sIG1Vc2VzRmxvYXRMb29wSW5kZXg7CisgICAgYm9vbCBtVXNlc0ludExv
b3BJbmRleDsKKyAgICBUTG9vcFN0YWNrJiBtTG9vcFN0YWNrOworfTsKK30gIC8vIG5hbWVzcGFj
ZQorCitWYWxpZGF0ZUxpbWl0YXRpb25zOjpWYWxpZGF0ZUxpbWl0YXRpb25zKFNoU2hhZGVyVHlw
ZSBzaGFkZXJUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
SW5mb1NpbmtCYXNlJiBzaW5rKQorICAgIDogbVNoYWRlclR5cGUoc2hhZGVyVHlwZSksCisgICAg
ICBtU2luayhzaW5rKSwKKyAgICAgIG1OdW1FcnJvcnMoMCkKK3sKK30KKworYm9vbCBWYWxpZGF0
ZUxpbWl0YXRpb25zOjp2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSogbm9kZSkKK3sK
KyAgICAvLyBDaGVjayBpZiBsb29wIGluZGV4IGlzIG1vZGlmaWVkIGluIHRoZSBsb29wIGJvZHku
CisgICAgdmFsaWRhdGVPcGVyYXRpb24obm9kZSwgbm9kZS0+Z2V0TGVmdCgpKTsKKworICAgIC8v
IENoZWNrIGluZGV4aW5nLgorICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkgeworICAgICAgY2Fz
ZSBFT3BJbmRleERpcmVjdDoKKyAgICAgICAgdmFsaWRhdGVJbmRleGluZyhub2RlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6CisjaWYgZGVmaW5lZChfX0FQ
UExFX18pCisgICAgICAgIC8vIExvb3AgdW5yb2xsaW5nIGlzIGEgd29yay1hcm91bmQgZm9yIGEg
TWFjIENnIGNvbXBpbGVyIGJ1ZyB3aGVyZSBpdAorICAgICAgICAvLyBjcmFzaGVzIHdoZW4gYSBz
YW1wbGVyIGFycmF5J3MgaW5kZXggaXMgYWxzbyB0aGUgbG9vcCBpbmRleC4KKyAgICAgICAgLy8g
T25jZSBBcHBsZSBmaXhlcyB0aGlzIGJ1Zywgd2Ugc2hvdWxkIHJlbW92ZSB0aGUgY29kZSBpbiB0
aGlzIENMLgorICAgICAgICAvLyBTZWUgaHR0cDovL2NvZGVyZXZpZXcuYXBwc3BvdC5jb20vNDMz
MTA0OC8uCisgICAgICAgIGlmICgobm9kZS0+Z2V0TGVmdCgpICE9IE5VTEwpICYmIChub2RlLT5n
ZXRSaWdodCgpICE9IE5VTEwpICYmCisgICAgICAgICAgICAobm9kZS0+Z2V0TGVmdCgpLT5nZXRB
c1N5bWJvbE5vZGUoKSkpIHsKKyAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IG5v
ZGUtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgICAgICAgICBpZiAoSXNTYW1w
bGVyKHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCkpICYmIHN5bWJvbC0+aXNBcnJheSgpKSB7CisgICAg
ICAgICAgICAgICAgVmFsaWRhdGVMb29wSW5kZXhFeHByIHZhbGlkYXRlKG1Mb29wU3RhY2spOwor
ICAgICAgICAgICAgICAgIG5vZGUtPmdldFJpZ2h0KCktPnRyYXZlcnNlKCZ2YWxpZGF0ZSk7Cisg
ICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlLnVzZXNGbG9hdExvb3BJbmRleCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgInNhbXBsZXIgYXJyYXkgaW5kZXggaXMgZmxvYXQgbG9vcCBpbmRleCIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICJmb3IiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICB2YWxpZGF0ZUluZGV4aW5nKG5vZGUp
OworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdFVuYXJ5KFZpc2l0
LCBUSW50ZXJtVW5hcnkqIG5vZGUpCit7CisgICAgLy8gQ2hlY2sgaWYgbG9vcCBpbmRleCBpcyBt
b2RpZmllZCBpbiB0aGUgbG9vcCBib2R5LgorICAgIHZhbGlkYXRlT3BlcmF0aW9uKG5vZGUsIG5v
ZGUtPmdldE9wZXJhbmQoKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBWYWxpZGF0
ZUxpbWl0YXRpb25zOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9k
ZSkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpIHsKKyAgICAgIGNhc2UgRU9wRnVuY3Rp
b25DYWxsOgorICAgICAgICB2YWxpZGF0ZUZ1bmN0aW9uQ2FsbChub2RlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRMb29wKFZpc2l0LCBUSW50
ZXJtTG9vcCogbm9kZSkKK3sKKyAgICBpZiAoIXZhbGlkYXRlTG9vcFR5cGUobm9kZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIFRMb29wSW5mbyBpbmZvOworICAgIG1lbXNldCgmaW5m
bywgMCwgc2l6ZW9mKFRMb29wSW5mbykpOworICAgIGluZm8ubG9vcCA9IG5vZGU7CisgICAgaWYg
KCF2YWxpZGF0ZUZvckxvb3BIZWFkZXIobm9kZSwgJmluZm8pKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBUSW50ZXJtTm9kZSogYm9keSA9IG5vZGUtPmdldEJvZHkoKTsKKyAgICBpZiAo
Ym9keSAhPSBOVUxMKSB7CisgICAgICAgIG1Mb29wU3RhY2sucHVzaF9iYWNrKGluZm8pOworICAg
ICAgICBib2R5LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgbUxvb3BTdGFjay5wb3BfYmFjaygp
OworICAgIH0KKworICAgIC8vIFRoZSBsb29wIGlzIGZ1bGx5IHByb2Nlc3NlZCAtIG5vIG5lZWQg
dG8gdmlzaXQgY2hpbGRyZW4uCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFZhbGlkYXRl
TGltaXRhdGlvbnM6OmVycm9yKFRTb3VyY2VMb2MgbG9jLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuKQoreworICAg
IG1TaW5rLnByZWZpeChFUHJlZml4RXJyb3IpOworICAgIG1TaW5rLmxvY2F0aW9uKGxvYyk7Cisg
ICAgbVNpbmsgPDwgIiciIDw8IHRva2VuIDw8ICInIDogIiA8PCByZWFzb24gPDwgIlxuIjsKKyAg
ICArK21OdW1FcnJvcnM7Cit9CisKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6d2l0aGluTG9v
cEJvZHkoKSBjb25zdAoreworICAgIHJldHVybiAhbUxvb3BTdGFjay5lbXB0eSgpOworfQorCiti
b29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OmlzTG9vcEluZGV4KGNvbnN0IFRJbnRlcm1TeW1ib2wq
IHN5bWJvbCkgY29uc3QKK3sKKyAgICByZXR1cm4gSXNMb29wSW5kZXgoc3ltYm9sLCBtTG9vcFN0
YWNrKTsKK30KKworYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUxvb3BUeXBlKFRJ
bnRlcm1Mb29wKiBub2RlKSB7CisgICAgVExvb3BUeXBlIHR5cGUgPSBub2RlLT5nZXRUeXBlKCk7
CisgICAgaWYgKHR5cGUgPT0gRUxvb3BGb3IpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
Ly8gUmVqZWN0IHdoaWxlIGFuZCBkby13aGlsZSBsb29wcy4KKyAgICBlcnJvcihub2RlLT5nZXRM
aW5lKCksCisgICAgICAgICAgIlRoaXMgdHlwZSBvZiBsb29wIGlzIG5vdCBhbGxvd2VkIiwKKyAg
ICAgICAgICB0eXBlID09IEVMb29wV2hpbGUgPyAid2hpbGUiIDogImRvIik7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcEhl
YWRlcihUSW50ZXJtTG9vcCogbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRMb29wSW5mbyogaW5mbykKK3sKKyAgICBBU1NFUlQobm9kZS0+Z2V0
VHlwZSgpID09IEVMb29wRm9yKTsKKworICAgIC8vCisgICAgLy8gVGhlIGZvciBzdGF0ZW1lbnQg
aGFzIHRoZSBmb3JtOgorICAgIC8vICAgIGZvciAoIGluaXQtZGVjbGFyYXRpb24gOyBjb25kaXRp
b24gOyBleHByZXNzaW9uICkgc3RhdGVtZW50CisgICAgLy8KKyAgICBpZiAoIXZhbGlkYXRlRm9y
TG9vcEluaXQobm9kZSwgaW5mbykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXZh
bGlkYXRlRm9yTG9vcENvbmQobm9kZSwgaW5mbykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIXZhbGlkYXRlRm9yTG9vcEV4cHIobm9kZSwgaW5mbykpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6
OnZhbGlkYXRlRm9yTG9vcEluaXQoVEludGVybUxvb3AqIG5vZGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVExvb3BJbmZvKiBpbmZvKQoreworICAgIFRJ
bnRlcm1Ob2RlKiBpbml0ID0gbm9kZS0+Z2V0SW5pdCgpOworICAgIGlmIChpbml0ID09IE5VTEwp
IHsKKyAgICAgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiTWlzc2luZyBpbml0IGRlY2xhcmF0
aW9uIiwgImZvciIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8KKyAg
ICAvLyBpbml0LWRlY2xhcmF0aW9uIGhhcyB0aGUgZm9ybToKKyAgICAvLyAgICAgdHlwZS1zcGVj
aWZpZXIgaWRlbnRpZmllciA9IGNvbnN0YW50LWV4cHJlc3Npb24KKyAgICAvLworICAgIFRJbnRl
cm1BZ2dyZWdhdGUqIGRlY2wgPSBpbml0LT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAgIGlmICgoZGVj
bCA9PSBOVUxMKSB8fCAoZGVjbC0+Z2V0T3AoKSAhPSBFT3BEZWNsYXJhdGlvbikpIHsKKyAgICAg
ICAgZXJyb3IoaW5pdC0+Z2V0TGluZSgpLCAiSW52YWxpZCBpbml0IGRlY2xhcmF0aW9uIiwgImZv
ciIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8vIFRvIGtlZXAgdGhpbmdz
IHNpbXBsZSBkbyBub3QgYWxsb3cgZGVjbGFyYXRpb24gbGlzdC4KKyAgICBUSW50ZXJtU2VxdWVu
Y2UmIGRlY2xTZXEgPSBkZWNsLT5nZXRTZXF1ZW5jZSgpOworICAgIGlmIChkZWNsU2VxLnNpemUo
KSAhPSAxKSB7CisgICAgICAgIGVycm9yKGRlY2wtPmdldExpbmUoKSwgIkludmFsaWQgaW5pdCBk
ZWNsYXJhdGlvbiIsICJmb3IiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBU
SW50ZXJtQmluYXJ5KiBkZWNsSW5pdCA9IGRlY2xTZXFbMF0tPmdldEFzQmluYXJ5Tm9kZSgpOwor
ICAgIGlmICgoZGVjbEluaXQgPT0gTlVMTCkgfHwgKGRlY2xJbml0LT5nZXRPcCgpICE9IEVPcElu
aXRpYWxpemUpKSB7CisgICAgICAgIGVycm9yKGRlY2wtPmdldExpbmUoKSwgIkludmFsaWQgaW5p
dCBkZWNsYXJhdGlvbiIsICJmb3IiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBkZWNsSW5pdC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJv
bE5vZGUoKTsKKyAgICBpZiAoc3ltYm9sID09IE5VTEwpIHsKKyAgICAgICAgZXJyb3IoZGVjbElu
aXQtPmdldExpbmUoKSwgIkludmFsaWQgaW5pdCBkZWNsYXJhdGlvbiIsICJmb3IiKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBUaGUgbG9vcCBpbmRleCBoYXMgdHlwZSBp
bnQgb3IgZmxvYXQuCisgICAgVEJhc2ljVHlwZSB0eXBlID0gc3ltYm9sLT5nZXRCYXNpY1R5cGUo
KTsKKyAgICBpZiAoKHR5cGUgIT0gRWJ0SW50KSAmJiAodHlwZSAhPSBFYnRGbG9hdCkpIHsKKyAg
ICAgICAgZXJyb3Ioc3ltYm9sLT5nZXRMaW5lKCksCisgICAgICAgICAgICAgICJJbnZhbGlkIHR5
cGUgZm9yIGxvb3AgaW5kZXgiLCBnZXRCYXNpY1N0cmluZyh0eXBlKSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgLy8gVGhlIGxvb3AgaW5kZXggaXMgaW5pdGlhbGl6ZWQgd2l0
aCBjb25zdGFudCBleHByZXNzaW9uLgorICAgIGlmICghaXNDb25zdEV4cHIoZGVjbEluaXQtPmdl
dFJpZ2h0KCkpKSB7CisgICAgICAgIGVycm9yKGRlY2xJbml0LT5nZXRMaW5lKCksCisgICAgICAg
ICAgICAgICJMb29wIGluZGV4IGNhbm5vdCBiZSBpbml0aWFsaXplZCB3aXRoIG5vbi1jb25zdGFu
dCBleHByZXNzaW9uIiwKKyAgICAgICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigp
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGluZm8tPmluZGV4LmlkID0g
c3ltYm9sLT5nZXRJZCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFZhbGlkYXRlTGlt
aXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcENvbmQoVEludGVybUxvb3AqIG5vZGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVExvb3BJbmZvKiBpbmZvKQor
eworICAgIFRJbnRlcm1Ob2RlKiBjb25kID0gbm9kZS0+Z2V0Q29uZGl0aW9uKCk7CisgICAgaWYg
KGNvbmQgPT0gTlVMTCkgeworICAgICAgICBlcnJvcihub2RlLT5nZXRMaW5lKCksICJNaXNzaW5n
IGNvbmRpdGlvbiIsICJmb3IiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAv
LworICAgIC8vIGNvbmRpdGlvbiBoYXMgdGhlIGZvcm06CisgICAgLy8gICAgIGxvb3BfaW5kZXgg
cmVsYXRpb25hbF9vcGVyYXRvciBjb25zdGFudF9leHByZXNzaW9uCisgICAgLy8KKyAgICBUSW50
ZXJtQmluYXJ5KiBiaW5PcCA9IGNvbmQtPmdldEFzQmluYXJ5Tm9kZSgpOworICAgIGlmIChiaW5P
cCA9PSBOVUxMKSB7CisgICAgICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgIkludmFsaWQgY29u
ZGl0aW9uIiwgImZvciIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8vIExv
b3AgaW5kZXggc2hvdWxkIGJlIHRvIHRoZSBsZWZ0IG9mIHJlbGF0aW9uYWwgb3BlcmF0b3IuCisg
ICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gYmluT3AtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xO
b2RlKCk7CisgICAgaWYgKHN5bWJvbCA9PSBOVUxMKSB7CisgICAgICAgIGVycm9yKGJpbk9wLT5n
ZXRMaW5lKCksICJJbnZhbGlkIGNvbmRpdGlvbiIsICJmb3IiKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICBpZiAoc3ltYm9sLT5nZXRJZCgpICE9IGluZm8tPmluZGV4LmlkKSB7
CisgICAgICAgIGVycm9yKHN5bWJvbC0+Z2V0TGluZSgpLAorICAgICAgICAgICAgICAiRXhwZWN0
ZWQgbG9vcCBpbmRleCIsIHN5bWJvbC0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgLy8gUmVsYXRpb25hbCBvcGVyYXRvciBpcyBvbmUgb2Y6
ID4gPj0gPCA8PSA9PSBvciAhPS4KKyAgICBzd2l0Y2ggKGJpbk9wLT5nZXRPcCgpKSB7CisgICAg
ICBjYXNlIEVPcEVxdWFsOgorICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKKyAgICAgIGNhc2UgRU9w
TGVzc1RoYW46CisgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgorICAgICAgY2FzZSBFT3BMZXNz
VGhhbkVxdWFsOgorICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgorICAgICAgICBicmVh
azsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGVycm9yKGJpbk9wLT5nZXRMaW5lKCksCisgICAg
ICAgICAgICAgICJJbnZhbGlkIHJlbGF0aW9uYWwgb3BlcmF0b3IiLAorICAgICAgICAgICAgICBn
ZXRPcGVyYXRvclN0cmluZyhiaW5PcC0+Z2V0T3AoKSkpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgLy8gTG9vcCBpbmRleCBtdXN0IGJlIGNvbXBhcmVkIHdpdGggYSBjb25zdGFudC4KKyAg
ICBpZiAoIWlzQ29uc3RFeHByKGJpbk9wLT5nZXRSaWdodCgpKSkgeworICAgICAgICBlcnJvcihi
aW5PcC0+Z2V0TGluZSgpLAorICAgICAgICAgICAgICAiTG9vcCBpbmRleCBjYW5ub3QgYmUgY29t
cGFyZWQgd2l0aCBub24tY29uc3RhbnQgZXhwcmVzc2lvbiIsCisgICAgICAgICAgICAgIHN5bWJv
bC0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0
ZUZvckxvb3BFeHByKFRJbnRlcm1Mb29wKiBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRMb29wSW5mbyogaW5mbykKK3sKKyAgICBUSW50ZXJtTm9k
ZSogZXhwciA9IG5vZGUtPmdldEV4cHJlc3Npb24oKTsKKyAgICBpZiAoZXhwciA9PSBOVUxMKSB7
CisgICAgICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgIk1pc3NpbmcgZXhwcmVzc2lvbiIsICJm
b3IiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIGZvciBleHByZXNz
aW9uIGhhcyBvbmUgb2YgdGhlIGZvbGxvd2luZyBmb3JtczoKKyAgICAvLyAgICAgbG9vcF9pbmRl
eCsrCisgICAgLy8gICAgIGxvb3BfaW5kZXgtLQorICAgIC8vICAgICBsb29wX2luZGV4ICs9IGNv
bnN0YW50X2V4cHJlc3Npb24KKyAgICAvLyAgICAgbG9vcF9pbmRleCAtPSBjb25zdGFudF9leHBy
ZXNzaW9uCisgICAgLy8gICAgICsrbG9vcF9pbmRleAorICAgIC8vICAgICAtLWxvb3BfaW5kZXgK
KyAgICAvLyBUaGUgbGFzdCB0d28gZm9ybXMgYXJlIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHNwZWMs
IGJ1dCBJIGFtIGFzc3VtaW5nCisgICAgLy8gaXRzIGFuIG92ZXJzaWdodC4KKyAgICBUSW50ZXJt
VW5hcnkqIHVuT3AgPSBleHByLT5nZXRBc1VuYXJ5Tm9kZSgpOworICAgIFRJbnRlcm1CaW5hcnkq
IGJpbk9wID0gdW5PcCA/IE5VTEwgOiBleHByLT5nZXRBc0JpbmFyeU5vZGUoKTsKKworICAgIFRP
cGVyYXRvciBvcCA9IEVPcE51bGw7CisgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gTlVMTDsK
KyAgICBpZiAodW5PcCAhPSBOVUxMKSB7CisgICAgICAgIG9wID0gdW5PcC0+Z2V0T3AoKTsKKyAg
ICAgICAgc3ltYm9sID0gdW5PcC0+Z2V0T3BlcmFuZCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAg
ICB9IGVsc2UgaWYgKGJpbk9wICE9IE5VTEwpIHsKKyAgICAgICAgb3AgPSBiaW5PcC0+Z2V0T3Ao
KTsKKyAgICAgICAgc3ltYm9sID0gYmluT3AtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7
CisgICAgfQorCisgICAgLy8gVGhlIG9wZXJhbmQgbXVzdCBiZSBsb29wIGluZGV4LgorICAgIGlm
IChzeW1ib2wgPT0gTlVMTCkgeworICAgICAgICBlcnJvcihleHByLT5nZXRMaW5lKCksICJJbnZh
bGlkIGV4cHJlc3Npb24iLCAiZm9yIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgaWYgKHN5bWJvbC0+Z2V0SWQoKSAhPSBpbmZvLT5pbmRleC5pZCkgeworICAgICAgICBlcnJv
cihzeW1ib2wtPmdldExpbmUoKSwKKyAgICAgICAgICAgICAgIkV4cGVjdGVkIGxvb3AgaW5kZXgi
LCBzeW1ib2wtPmdldFN5bWJvbCgpLmNfc3RyKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgLy8gVGhlIG9wZXJhdG9yIGlzIG9uZSBvZjogKysgLS0gKz0gLT0uCisgICAg
c3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6CisgICAgICAgIGNh
c2UgRU9wUG9zdERlY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6CisgICAg
ICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OgorICAgICAgICAgICAgQVNTRVJUKCh1bk9wICE9IE5V
TEwpICYmIChiaW5PcCA9PSBOVUxMKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BBZGRBc3NpZ246CisgICAgICAgIGNhc2UgRU9wU3ViQXNzaWduOgorICAgICAgICAgICAg
QVNTRVJUKCh1bk9wID09IE5VTEwpICYmIChiaW5PcCAhPSBOVUxMKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGVycm9yKGV4cHItPmdldExpbmUo
KSwgIkludmFsaWQgb3BlcmF0b3IiLCBnZXRPcGVyYXRvclN0cmluZyhvcCkpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIExvb3AgaW5kZXggbXVzdCBiZSBpbmNy
ZW1lbnRlZC9kZWNyZW1lbnRlZCB3aXRoIGEgY29uc3RhbnQuCisgICAgaWYgKGJpbk9wICE9IE5V
TEwpIHsKKyAgICAgICAgaWYgKCFpc0NvbnN0RXhwcihiaW5PcC0+Z2V0UmlnaHQoKSkpIHsKKyAg
ICAgICAgICAgIGVycm9yKGJpbk9wLT5nZXRMaW5lKCksCisgICAgICAgICAgICAgICAgICAiTG9v
cCBpbmRleCBjYW5ub3QgYmUgbW9kaWZpZWQgYnkgbm9uLWNvbnN0YW50IGV4cHJlc3Npb24iLAor
ICAgICAgICAgICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRnVuY3Rpb25DYWxsKFRJbnRl
cm1BZ2dyZWdhdGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUtPmdldE9wKCkgPT0gRU9wRnVu
Y3Rpb25DYWxsKTsKKworICAgIC8vIElmIG5vdCB3aXRoaW4gbG9vcCBib2R5LCB0aGVyZSBpcyBu
b3RoaW5nIHRvIGNoZWNrLgorICAgIGlmICghd2l0aGluTG9vcEJvZHkoKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICAvLyBMaXN0IG9mIHBhcmFtIGluZGljZXMgZm9yIHdoaWNoIGxvb3Ag
aW5kaWNlcyBhcmUgdXNlZCBhcyBhcmd1bWVudC4KKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPHNp
emVfdD4gUGFyYW1JbmRleDsKKyAgICBQYXJhbUluZGV4IHBJbmRleDsKKyAgICBUSW50ZXJtU2Vx
dWVuY2UmIHBhcmFtcyA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CisgICAgZm9yIChUSW50ZXJtU2Vx
dWVuY2U6OnNpemVfdHlwZSBpID0gMDsgaSA8IHBhcmFtcy5zaXplKCk7ICsraSkgeworICAgICAg
ICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBwYXJhbXNbaV0tPmdldEFzU3ltYm9sTm9kZSgpOwor
ICAgICAgICBpZiAoc3ltYm9sICYmIGlzTG9vcEluZGV4KHN5bWJvbCkpCisgICAgICAgICAgICBw
SW5kZXgucHVzaF9iYWNrKGkpOworICAgIH0KKyAgICAvLyBJZiBub25lIG9mIHRoZSBsb29wIGlu
ZGljZXMgYXJlIHVzZWQgYXMgYXJndW1lbnRzLAorICAgIC8vIHRoZXJlIGlzIG5vdGhpbmcgdG8g
Y2hlY2suCisgICAgaWYgKHBJbmRleC5lbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGJvb2wgdmFsaWQgPSB0cnVlOworICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUgPSBH
ZXRHbG9iYWxQYXJzZUNvbnRleHQoKS0+c3ltYm9sVGFibGU7CisgICAgVFN5bWJvbCogc3ltYm9s
ID0gc3ltYm9sVGFibGUuZmluZChub2RlLT5nZXROYW1lKCkpOworICAgIEFTU0VSVChzeW1ib2wg
JiYgc3ltYm9sLT5pc0Z1bmN0aW9uKCkpOworICAgIFRGdW5jdGlvbiogZnVuY3Rpb24gPSBzdGF0
aWNfY2FzdDxURnVuY3Rpb24qPihzeW1ib2wpOworICAgIGZvciAoUGFyYW1JbmRleDo6Y29uc3Rf
aXRlcmF0b3IgaSA9IHBJbmRleC5iZWdpbigpOworICAgICAgICAgaSAhPSBwSW5kZXguZW5kKCk7
ICsraSkgeworICAgICAgICBjb25zdCBUUGFyYW1ldGVyJiBwYXJhbSA9IGZ1bmN0aW9uLT5nZXRQ
YXJhbSgqaSk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcmFtLnR5cGUtPmdldFF1YWxp
ZmllcigpOworICAgICAgICBpZiAoKHF1YWwgPT0gRXZxT3V0KSB8fCAocXVhbCA9PSBFdnFJbk91
dCkpIHsKKyAgICAgICAgICAgIGVycm9yKHBhcmFtc1sqaV0tPmdldExpbmUoKSwKKyAgICAgICAg
ICAgICAgICAgICJMb29wIGluZGV4IGNhbm5vdCBiZSB1c2VkIGFzIGFyZ3VtZW50IHRvIGEgZnVu
Y3Rpb24gb3V0IG9yIGlub3V0IHBhcmFtZXRlciIsCisgICAgICAgICAgICAgICAgICBwYXJhbXNb
KmldLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7CisgICAgICAgICAg
ICB2YWxpZCA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHZhbGlkOwor
fQorCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlT3BlcmF0aW9uKFRJbnRlcm1P
cGVyYXRvciogbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVEludGVybU5vZGUqIG9wZXJhbmQpIHsKKyAgICAvLyBDaGVjayBpZiBsb29wIGluZGV4IGlz
IG1vZGlmaWVkIGluIHRoZSBsb29wIGJvZHkuCisgICAgaWYgKCF3aXRoaW5Mb29wQm9keSgpIHx8
ICFub2RlLT5pc0Fzc2lnbm1lbnQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjb25z
dCBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBvcGVyYW5kLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAg
ICBpZiAoc3ltYm9sICYmIGlzTG9vcEluZGV4KHN5bWJvbCkpIHsKKyAgICAgICAgZXJyb3Iobm9k
ZS0+Z2V0TGluZSgpLAorICAgICAgICAgICAgICAiTG9vcCBpbmRleCBjYW5ub3QgYmUgc3RhdGlj
YWxseSBhc3NpZ25lZCB0byB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIGxvb3AiLAorICAgICAgICAg
ICAgICBzeW1ib2wtPmdldFN5bWJvbCgpLmNfc3RyKCkpOworICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjppc0NvbnN0RXhwcihUSW50ZXJtTm9k
ZSogbm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZSAhPSBOVUxMKTsKKyAgICByZXR1cm4gbm9kZS0+
Z2V0QXNDb25zdGFudFVuaW9uKCkgIT0gTlVMTDsKK30KKworYm9vbCBWYWxpZGF0ZUxpbWl0YXRp
b25zOjppc0NvbnN0SW5kZXhFeHByKFRJbnRlcm1Ob2RlKiBub2RlKQoreworICAgIEFTU0VSVChu
b2RlICE9IE5VTEwpOworCisgICAgVmFsaWRhdGVDb25zdEluZGV4RXhwciB2YWxpZGF0ZShtTG9v
cFN0YWNrKTsKKyAgICBub2RlLT50cmF2ZXJzZSgmdmFsaWRhdGUpOworICAgIHJldHVybiB2YWxp
ZGF0ZS5pc1ZhbGlkKCk7Cit9CisKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVJ
bmRleGluZyhUSW50ZXJtQmluYXJ5KiBub2RlKQoreworICAgIEFTU0VSVCgobm9kZS0+Z2V0T3Ao
KSA9PSBFT3BJbmRleERpcmVjdCkgfHwKKyAgICAgICAgICAgKG5vZGUtPmdldE9wKCkgPT0gRU9w
SW5kZXhJbmRpcmVjdCkpOworCisgICAgYm9vbCB2YWxpZCA9IHRydWU7CisgICAgVEludGVybVR5
cGVkKiBpbmRleCA9IG5vZGUtPmdldFJpZ2h0KCk7CisgICAgLy8gVGhlIGluZGV4IGV4cHJlc3Np
b24gbXVzdCBoYXZlIGludGVncmFsIHR5cGUuCisgICAgaWYgKCFpbmRleC0+aXNTY2FsYXIoKSB8
fCAoaW5kZXgtPmdldEJhc2ljVHlwZSgpICE9IEVidEludCkpIHsKKyAgICAgICAgZXJyb3IoaW5k
ZXgtPmdldExpbmUoKSwKKyAgICAgICAgICAgICAgIkluZGV4IGV4cHJlc3Npb24gbXVzdCBoYXZl
IGludGVncmFsIHR5cGUiLAorICAgICAgICAgICAgICBpbmRleC0+Z2V0Q29tcGxldGVTdHJpbmco
KS5jX3N0cigpKTsKKyAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICB9CisgICAgLy8gVGhlIGlu
ZGV4IGV4cGVzc2lvbiBtdXN0IGJlIGEgY29uc3RhbnQtaW5kZXgtZXhwcmVzc2lvbiB1bmxlc3MK
KyAgICAvLyB0aGUgb3BlcmFuZCBpcyBhIHVuaWZvcm0gaW4gYSB2ZXJ0ZXggc2hhZGVyLgorICAg
IFRJbnRlcm1UeXBlZCogb3BlcmFuZCA9IG5vZGUtPmdldExlZnQoKTsKKyAgICBib29sIHNraXAg
PSAobVNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUikgJiYKKyAgICAgICAgICAgICAgICAo
b3BlcmFuZC0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxVW5pZm9ybSk7CisgICAgaWYgKCFza2lwICYm
ICFpc0NvbnN0SW5kZXhFeHByKGluZGV4KSkgeworICAgICAgICBlcnJvcihpbmRleC0+Z2V0TGlu
ZSgpLCAiSW5kZXggZXhwcmVzc2lvbiBtdXN0IGJlIGNvbnN0YW50IiwgIltdIik7CisgICAgICAg
IHZhbGlkID0gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB2YWxpZDsKK30KKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRh
dGVMaW1pdGF0aW9ucy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVmFsaWRhdGVMaW1pdGF0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg4MzlkZDhiOGFmMzY1
NmQxMzMyNDFkMDE2MTc4ODM3OTgxODExZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUxpbWl0YXRpb25z
LmgKQEAgLTAsMCArMSw1OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJHTFNMQU5HL1No
YWRlckxhbmcuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5o
IgorCitjbGFzcyBUSW5mb1NpbmtCYXNlOworCitzdHJ1Y3QgVExvb3BJbmZvIHsKKyAgICBzdHJ1
Y3QgVEluZGV4IHsKKyAgICAgICAgaW50IGlkOyAgLy8gc3ltYm9sIGlkLgorICAgIH0gaW5kZXg7
CisgICAgVEludGVybUxvb3AqIGxvb3A7Cit9OwordHlwZWRlZiBUVmVjdG9yPFRMb29wSW5mbz4g
VExvb3BTdGFjazsKKworLy8gVHJhdmVyc2VzIGludGVybWVkaWF0ZSB0cmVlIHRvIGVuc3VyZSB0
aGF0IHRoZSBzaGFkZXIgZG9lcyBub3QgZXhjZWVkIHRoZQorLy8gbWluaW11bSBmdW5jdGlvbmFs
aXR5IG1hbmRhdGVkIGluIEdMU0wgMS4wIHNwZWMsIEFwcGVuZGl4IEEuCitjbGFzcyBWYWxpZGF0
ZUxpbWl0YXRpb25zIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgorICAgIFZh
bGlkYXRlTGltaXRhdGlvbnMoU2hTaGFkZXJUeXBlIHNoYWRlclR5cGUsIFRJbmZvU2lua0Jhc2Um
IHNpbmspOworCisgICAgaW50IG51bUVycm9ycygpIGNvbnN0IHsgcmV0dXJuIG1OdW1FcnJvcnM7
IH0KKworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSop
OworICAgIHZpcnR1YWwgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkqKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsK
KyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCopOworCitwcml2
YXRlOgorICAgIHZvaWQgZXJyb3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwg
Y29uc3QgY2hhciogdG9rZW4pOworCisgICAgYm9vbCB3aXRoaW5Mb29wQm9keSgpIGNvbnN0Owor
ICAgIGJvb2wgaXNMb29wSW5kZXgoY29uc3QgVEludGVybVN5bWJvbCogc3ltYm9sKSBjb25zdDsK
KyAgICBib29sIHZhbGlkYXRlTG9vcFR5cGUoVEludGVybUxvb3AqIG5vZGUpOworICAgIGJvb2wg
dmFsaWRhdGVGb3JMb29wSGVhZGVyKFRJbnRlcm1Mb29wKiBub2RlLCBUTG9vcEluZm8qIGluZm8p
OworICAgIGJvb2wgdmFsaWRhdGVGb3JMb29wSW5pdChUSW50ZXJtTG9vcCogbm9kZSwgVExvb3BJ
bmZvKiBpbmZvKTsKKyAgICBib29sIHZhbGlkYXRlRm9yTG9vcENvbmQoVEludGVybUxvb3AqIG5v
ZGUsIFRMb29wSW5mbyogaW5mbyk7CisgICAgYm9vbCB2YWxpZGF0ZUZvckxvb3BFeHByKFRJbnRl
cm1Mb29wKiBub2RlLCBUTG9vcEluZm8qIGluZm8pOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBu
b25lIG9mIHRoZSBsb29wIGluZGljZXMgaXMgdXNlZCBhcyB0aGUgYXJndW1lbnQgdG8KKyAgICAv
LyB0aGUgZ2l2ZW4gZnVuY3Rpb24gb3V0IG9yIGlub3V0IHBhcmFtZXRlci4KKyAgICBib29sIHZh
bGlkYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpOworICAgIGJvb2wgdmFs
aWRhdGVPcGVyYXRpb24oVEludGVybU9wZXJhdG9yKiBub2RlLCBUSW50ZXJtTm9kZSogb3BlcmFu
ZCk7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgaW5kZXhpbmcgZG9lcyBub3QgZXhjZWVkIHRo
ZSBtaW5pbXVtIGZ1bmN0aW9uYWxpdHkKKyAgICAvLyBtYW5kYXRlZCBpbiBHTFNMIDEuMCBzcGVj
LCBBcHBlbmRpeCBBLCBTZWN0aW9uIDUuCisgICAgYm9vbCBpc0NvbnN0RXhwcihUSW50ZXJtTm9k
ZSogbm9kZSk7CisgICAgYm9vbCBpc0NvbnN0SW5kZXhFeHByKFRJbnRlcm1Ob2RlKiBub2RlKTsK
KyAgICBib29sIHZhbGlkYXRlSW5kZXhpbmcoVEludGVybUJpbmFyeSogbm9kZSk7CisKKyAgICBT
aFNoYWRlclR5cGUgbVNoYWRlclR5cGU7CisgICAgVEluZm9TaW5rQmFzZSYgbVNpbms7CisgICAg
aW50IG1OdW1FcnJvcnM7CisgICAgVExvb3BTdGFjayBtTG9vcFN0YWNrOworfTsKKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFy
aWFibGVJbmZvLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1ZhcmlhYmxlSW5mby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWY4ODhhZmYxMTA0NzMzZGEzOWU2
M2Q0ZjE4MWE2NmI0MThhNTVkYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5jcHAKQEAgLTAsMCAr
MSwzMTIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1ZhcmlhYmxlSW5mby5oIgorCituYW1lc3BhY2UgeworCitUU3RyaW5nIGFycmF5QnJhY2tl
dHMoaW50IGluZGV4KQoreworICAgIFRTdHJpbmdTdHJlYW0gc3RyZWFtOworICAgIHN0cmVhbSA8
PCAiWyIgPDwgaW5kZXggPDwgIl0iOworICAgIHJldHVybiBzdHJlYW0uc3RyKCk7Cit9CisKKy8v
IFJldHVybnMgdGhlIGRhdGEgdHlwZSBmb3IgYW4gYXR0cmlidXRlLCB1bmlmb3JtLCBvciB2YXJ5
aW5nLgorU2hEYXRhVHlwZSBnZXRWYXJpYWJsZURhdGFUeXBlKGNvbnN0IFRUeXBlJiB0eXBlKQor
eworICAgIHN3aXRjaCAodHlwZS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgY2FzZSBFYnRGbG9h
dDoKKyAgICAgICAgICBpZiAodHlwZS5pc01hdHJpeCgpKSB7CisgICAgICAgICAgICAgIHN3aXRj
aCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1
cm4gU0hfRkxPQVRfTUFUMjsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBTSF9GTE9B
VF9NQVQzOworICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFNIX0ZMT0FUX01BVDQ7Cisg
ICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgfQor
ICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5pc1ZlY3RvcigpKSB7CisgICAgICAgICAgICAgIHN3
aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSAyOiBy
ZXR1cm4gU0hfRkxPQVRfVkVDMjsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBTSF9G
TE9BVF9WRUMzOworICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFNIX0ZMT0FUX1ZFQzQ7
CisgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAg
fQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHJldHVybiBTSF9GTE9BVDsKKyAg
ICAgICAgICB9CisgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICBpZiAodHlwZS5pc01hdHJp
eCgpKSB7CisgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgfSBlbHNlIGlm
ICh0eXBlLmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldE5vbWlu
YWxTaXplKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBTSF9JTlRfVkVDMjsK
KyAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBTSF9JTlRfVkVDMzsKKyAgICAgICAgICAg
ICAgICBjYXNlIDQ6IHJldHVybiBTSF9JTlRfVkVDNDsKKyAgICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgcmV0dXJuIFNIX0lOVDsKKyAgICAgICAgICB9CisgICAgICBjYXNlIEVidEJv
b2w6CisgICAgICAgICAgaWYgKHR5cGUuaXNNYXRyaXgoKSkgeworICAgICAgICAgICAgICBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5pc1ZlY3RvcigpKSB7CisgICAg
ICAgICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKSB7CisgICAgICAgICAgICAg
ICAgY2FzZSAyOiByZXR1cm4gU0hfQk9PTF9WRUMyOworICAgICAgICAgICAgICAgIGNhc2UgMzog
cmV0dXJuIFNIX0JPT0xfVkVDMzsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBTSF9C
T09MX1ZFQzQ7CisgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHJldHVybiBTSF9C
T09MOworICAgICAgICAgIH0KKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiByZXR1cm4gU0hfU0FN
UExFUl8yRDsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6IHJldHVybiBTSF9TQU1QTEVSX0NV
QkU7CisgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzogcmV0dXJuIFNIX1NBTVBMRVJf
RVhURVJOQUxfT0VTOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OiByZXR1cm4gU0hfU0FN
UExFUl8yRF9SRUNUX0FSQjsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQor
ICAgIHJldHVybiBTSF9OT05FOworfQorCit2b2lkIGdldEJ1aWx0SW5WYXJpYWJsZUluZm8oY29u
c3QgVFR5cGUmIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmlu
ZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nJiBtYXBw
ZWROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9MaXN0JiBp
bmZvTGlzdCk7Cit2b2lkIGdldFVzZXJEZWZpbmVkVmFyaWFibGVJbmZvKGNvbnN0IFRUeXBlJiB0
eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nJiBuYW1l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nJiBtYXBwZWRO
YW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYg
aW5mb0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9u
NjQgaGFzaEZ1bmN0aW9uKTsKKworLy8gUmV0dXJucyBpbmZvIGZvciBhbiBhdHRyaWJ1dGUsIHVu
aWZvcm0sIG9yIHZhcnlpbmcuCit2b2lkIGdldFZhcmlhYmxlSW5mbyhjb25zdCBUVHlwZSYgdHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUsCisgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBUU3RyaW5nJiBtYXBwZWROYW1lLAorICAgICAgICAgICAgICAgICAg
ICAgVFZhcmlhYmxlSW5mb0xpc3QmIGluZm9MaXN0LAorICAgICAgICAgICAgICAgICAgICAgU2hI
YXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24pCit7CisgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBl
KCkgPT0gRWJ0U3RydWN0KSB7CisgICAgICAgIGlmICh0eXBlLmlzQXJyYXkoKSkgeworICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlLmdldEFycmF5U2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgICAgICAgICBUU3RyaW5nIGxuYW1lID0gbmFtZSArIGFycmF5QnJhY2tldHMoaSk7Cisg
ICAgICAgICAgICAgICAgVFN0cmluZyBsbWFwcGVkTmFtZSA9IG1hcHBlZE5hbWUgKyBhcnJheUJy
YWNrZXRzKGkpOworICAgICAgICAgICAgICAgIGdldFVzZXJEZWZpbmVkVmFyaWFibGVJbmZvKHR5
cGUsIGxuYW1lLCBsbWFwcGVkTmFtZSwgaW5mb0xpc3QsIGhhc2hGdW5jdGlvbik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBnZXRVc2VyRGVmaW5lZFZhcmlh
YmxlSW5mbyh0eXBlLCBuYW1lLCBtYXBwZWROYW1lLCBpbmZvTGlzdCwgaGFzaEZ1bmN0aW9uKTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGdldEJ1aWx0SW5WYXJpYWJsZUluZm8o
dHlwZSwgbmFtZSwgbWFwcGVkTmFtZSwgaW5mb0xpc3QpOworICAgIH0KK30KKwordm9pZCBnZXRC
dWlsdEluVmFyaWFibGVJbmZvKGNvbnN0IFRUeXBlJiB0eXBlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVFN0cmluZyYgbWFwcGVkTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUVmFyaWFibGVJbmZvTGlzdCYgaW5mb0xpc3QpCit7CisgICAgQVNTRVJUKHR5cGUuZ2V0QmFz
aWNUeXBlKCkgIT0gRWJ0U3RydWN0KTsKKworICAgIFRWYXJpYWJsZUluZm8gdmFySW5mbzsKKyAg
ICBpZiAodHlwZS5pc0FycmF5KCkpIHsKKyAgICAgICAgdmFySW5mby5uYW1lID0gKG5hbWUgKyAi
WzBdIikuY19zdHIoKTsKKyAgICAgICAgdmFySW5mby5tYXBwZWROYW1lID0gKG1hcHBlZE5hbWUg
KyAiWzBdIikuY19zdHIoKTsKKyAgICAgICAgdmFySW5mby5zaXplID0gdHlwZS5nZXRBcnJheVNp
emUoKTsKKyAgICAgICAgdmFySW5mby5pc0FycmF5ID0gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAg
ICAgICB2YXJJbmZvLm5hbWUgPSBuYW1lLmNfc3RyKCk7CisgICAgICAgIHZhckluZm8ubWFwcGVk
TmFtZSA9IG1hcHBlZE5hbWUuY19zdHIoKTsKKyAgICAgICAgdmFySW5mby5zaXplID0gMTsKKyAg
ICAgICAgdmFySW5mby5pc0FycmF5ID0gZmFsc2U7CisgICAgfQorICAgIHZhckluZm8ucHJlY2lz
aW9uID0gdHlwZS5nZXRQcmVjaXNpb24oKTsKKyAgICB2YXJJbmZvLnR5cGUgPSBnZXRWYXJpYWJs
ZURhdGFUeXBlKHR5cGUpOworICAgIGluZm9MaXN0LnB1c2hfYmFjayh2YXJJbmZvKTsKK30KKwor
dm9pZCBnZXRVc2VyRGVmaW5lZFZhcmlhYmxlSW5mbyhjb25zdCBUVHlwZSYgdHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyYgbmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyYgbWFwcGVkTmFtZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIGluZm9MaXN0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5j
dGlvbikKK3sKKyAgICBBU1NFUlQodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpOwor
CisgICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRzID0gdHlwZS5nZXRTdHJ1Y3QoKS0+ZmllbGRz
KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgY29uc3QgVFR5cGUmIGZpZWxkVHlwZSA9ICooZmllbGRzW2ldLT50eXBlKCkpOworICAg
ICAgICBjb25zdCBUU3RyaW5nJiBmaWVsZE5hbWUgPSBmaWVsZHNbaV0tPm5hbWUoKTsKKyAgICAg
ICAgZ2V0VmFyaWFibGVJbmZvKGZpZWxkVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5h
bWUgKyAiLiIgKyBmaWVsZE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBtYXBwZWROYW1l
ICsgIi4iICsgVEludGVybVRyYXZlcnNlcjo6aGFzaChmaWVsZE5hbWUsIGhhc2hGdW5jdGlvbiks
CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvTGlzdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGhhc2hGdW5jdGlvbik7CisgICAgfQorfQorCitUVmFyaWFibGVJbmZvKiBmaW5kVmFyaWFi
bGUoY29uc3QgVFR5cGUmIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VFN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFyaWFibGVJbmZv
TGlzdCYgaW5mb0xpc3QpCit7CisgICAgLy8gVE9ETyh6bW8pOiBvcHRpbWl6ZSB0aGlzIGZ1bmN0
aW9uLgorICAgIFRTdHJpbmcgbXlOYW1lID0gbmFtZTsKKyAgICBpZiAodHlwZS5pc0FycmF5KCkp
CisgICAgICAgIG15TmFtZSArPSAiWzBdIjsKKyAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwg
aW5mb0xpc3Quc2l6ZSgpOyArK2lpKQorICAgIHsKKyAgICAgICAgaWYgKGluZm9MaXN0W2lpXS5u
YW1lLmNfc3RyKCkgPT0gbXlOYW1lKQorICAgICAgICAgICAgcmV0dXJuICYoaW5mb0xpc3RbaWld
KTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBhbm9ueW1v
dXMKKworVFZhcmlhYmxlSW5mbzo6VFZhcmlhYmxlSW5mbygpCisgICAgOiB0eXBlKFNIX05PTkUp
LAorICAgICAgc2l6ZSgwKSwKKyAgICAgIGlzQXJyYXkoZmFsc2UpLAorICAgICAgcHJlY2lzaW9u
KEVicFVuZGVmaW5lZCksCisgICAgICBzdGF0aWNVc2UoZmFsc2UpCit7Cit9CisKK1RWYXJpYWJs
ZUluZm86OlRWYXJpYWJsZUluZm8oU2hEYXRhVHlwZSB0eXBlLCBpbnQgc2l6ZSkKKyAgICA6IHR5
cGUodHlwZSksCisgICAgICBzaXplKHNpemUpLAorICAgICAgaXNBcnJheShmYWxzZSksCisgICAg
ICBwcmVjaXNpb24oRWJwVW5kZWZpbmVkKSwKKyAgICAgIHN0YXRpY1VzZShmYWxzZSkKK3sKK30K
KworQ29sbGVjdFZhcmlhYmxlczo6Q29sbGVjdFZhcmlhYmxlcyhUVmFyaWFibGVJbmZvTGlzdCYg
YXR0cmlicywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5m
b0xpc3QmIHVuaWZvcm1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFy
aWFibGVJbmZvTGlzdCYgdmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uKQorICAgIDogbUF0dHJpYnMoYXR0cmli
cyksCisgICAgICBtVW5pZm9ybXModW5pZm9ybXMpLAorICAgICAgbVZhcnlpbmdzKHZhcnlpbmdz
KSwKKyAgICAgIG1Qb2ludENvb3JkQWRkZWQoZmFsc2UpLAorICAgICAgbUZyb250RmFjaW5nQWRk
ZWQoZmFsc2UpLAorICAgICAgbUZyYWdDb29yZEFkZGVkKGZhbHNlKSwKKyAgICAgIG1IYXNoRnVu
Y3Rpb24oaGFzaEZ1bmN0aW9uKQoreworfQorCisvLyBXZSB3YW50IHRvIGNoZWNrIHdoZXRoZXIg
YSB1bmlmb3JtL3ZhcnlpbmcgaXMgc3RhdGljYWxseSB1c2VkCisvLyBiZWNhdXNlIHdlIG9ubHkg
Y291bnQgdGhlIHVzZWQgb25lcyBpbiBwYWNraW5nIGNvbXB1dGluZy4KKy8vIEFsc28sIGdsX0Zy
YWdDb29yZCwgZ2xfUG9pbnRDb29yZCwgYW5kIGdsX0Zyb250RmFjaW5nIGNvdW50CisvLyB0b3dh
cmQgdmFyeWluZyBjb3VudGluZyBpZiB0aGV5IGFyZSBzdGF0aWNhbGx5IHVzZWQgaW4gYSBmcmFn
bWVudAorLy8gc2hhZGVyLgordm9pZCBDb2xsZWN0VmFyaWFibGVzOjp2aXNpdFN5bWJvbChUSW50
ZXJtU3ltYm9sKiBzeW1ib2wpCit7CisgICAgQVNTRVJUKHN5bWJvbCAhPSBOVUxMKTsKKyAgICBU
VmFyaWFibGVJbmZvKiB2YXIgPSBOVUxMOworICAgIHN3aXRjaCAoc3ltYm9sLT5nZXRRdWFsaWZp
ZXIoKSkKKyAgICB7CisgICAgY2FzZSBFdnFWYXJ5aW5nT3V0OgorICAgIGNhc2UgRXZxSW52YXJp
YW50VmFyeWluZ091dDoKKyAgICBjYXNlIEV2cVZhcnlpbmdJbjoKKyAgICBjYXNlIEV2cUludmFy
aWFudFZhcnlpbmdJbjoKKyAgICAgICAgdmFyID0gZmluZFZhcmlhYmxlKHN5bWJvbC0+Z2V0VHlw
ZSgpLCBzeW1ib2wtPmdldFN5bWJvbCgpLCBtVmFyeWluZ3MpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEV2cVVuaWZvcm06CisgICAgICAgIHZhciA9IGZpbmRWYXJpYWJsZShzeW1ib2wtPmdl
dFR5cGUoKSwgc3ltYm9sLT5nZXRTeW1ib2woKSwgbVVuaWZvcm1zKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBFdnFGcmFnQ29vcmQ6CisgICAgICAgIGlmICghbUZyYWdDb29yZEFkZGVkKSB7
CisgICAgICAgICAgICBUVmFyaWFibGVJbmZvIGluZm87CisgICAgICAgICAgICBpbmZvLm5hbWUg
PSAiZ2xfRnJhZ0Nvb3JkIjsKKyAgICAgICAgICAgIGluZm8ubWFwcGVkTmFtZSA9ICJnbF9GcmFn
Q29vcmQiOworICAgICAgICAgICAgaW5mby50eXBlID0gU0hfRkxPQVRfVkVDNDsKKyAgICAgICAg
ICAgIGluZm8uc2l6ZSA9IDE7CisgICAgICAgICAgICBpbmZvLnByZWNpc2lvbiA9IEVicE1lZGl1
bTsgIC8vIFVzZSBtZWRpdW1wIGFzIGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlci4KKyAgICAgICAg
ICAgIGluZm8uc3RhdGljVXNlID0gdHJ1ZTsKKwkgICAgbVZhcnlpbmdzLnB1c2hfYmFjayhpbmZv
KTsKKyAgICAgICAgICAgIG1GcmFnQ29vcmRBZGRlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgRXZxRnJvbnRGYWNpbmc6CisgICAgICAgIGlmICghbUZyb250
RmFjaW5nQWRkZWQpIHsKKyAgICAgICAgICAgIFRWYXJpYWJsZUluZm8gaW5mbzsKKyAgICAgICAg
ICAgIGluZm8ubmFtZSA9ICJnbF9Gcm9udEZhY2luZyI7CisgICAgICAgICAgICBpbmZvLm1hcHBl
ZE5hbWUgPSAiZ2xfRnJvbnRGYWNpbmciOworICAgICAgICAgICAgaW5mby50eXBlID0gU0hfQk9P
TDsKKyAgICAgICAgICAgIGluZm8uc2l6ZSA9IDE7CisgICAgICAgICAgICBpbmZvLnByZWNpc2lv
biA9IEVicFVuZGVmaW5lZDsKKyAgICAgICAgICAgIGluZm8uc3RhdGljVXNlID0gdHJ1ZTsKKwkg
ICAgbVZhcnlpbmdzLnB1c2hfYmFjayhpbmZvKTsKKyAgICAgICAgICAgIG1Gcm9udEZhY2luZ0Fk
ZGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgY2FzZSBFdnFQb2lu
dENvb3JkOgorICAgICAgICBpZiAoIW1Qb2ludENvb3JkQWRkZWQpIHsKKyAgICAgICAgICAgIFRW
YXJpYWJsZUluZm8gaW5mbzsKKyAgICAgICAgICAgIGluZm8ubmFtZSA9ICJnbF9Qb2ludENvb3Jk
IjsKKyAgICAgICAgICAgIGluZm8ubWFwcGVkTmFtZSA9ICJnbF9Qb2ludENvb3JkIjsKKyAgICAg
ICAgICAgIGluZm8udHlwZSA9IFNIX0ZMT0FUX1ZFQzI7CisgICAgICAgICAgICBpbmZvLnNpemUg
PSAxOworICAgICAgICAgICAgaW5mby5wcmVjaXNpb24gPSBFYnBNZWRpdW07ICAvLyBVc2UgbWVk
aXVtcCBhcyBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIuCisgICAgICAgICAgICBpbmZvLnN0YXRp
Y1VzZSA9IHRydWU7CisJICAgIG1WYXJ5aW5ncy5wdXNoX2JhY2soaW5mbyk7CisgICAgICAgICAg
ICBtUG9pbnRDb29yZEFkZGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmICh2YXIpCisgICAgICAg
IHZhci0+c3RhdGljVXNlID0gdHJ1ZTsKK30KKworYm9vbCBDb2xsZWN0VmFyaWFibGVzOjp2aXNp
dEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK3sKKyAgICBib29sIHZp
c2l0Q2hpbGRyZW4gPSB0cnVlOworCisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsK
KyAgICBjYXNlIEVPcERlY2xhcmF0aW9uOiB7CisgICAgICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5j
ZSYgc2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOworICAgICAgICBUUXVhbGlmaWVyIHF1
YWxpZmllciA9IHNlcXVlbmNlLmZyb250KCktPmdldEFzVHlwZWQoKS0+Z2V0UXVhbGlmaWVyKCk7
CisgICAgICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlIHx8IHF1YWxpZmllciA9PSBF
dnFVbmlmb3JtIHx8CisgICAgICAgICAgICBxdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8IHF1
YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8CisgICAgICAgICAgICBxdWFsaWZpZXIgPT0gRXZx
SW52YXJpYW50VmFyeWluZ0luIHx8IHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0
KQorICAgICAgICB7CisgICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYgaW5mb0xpc3QgPSBx
dWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlID8gbUF0dHJpYnMgOgorICAgICAgICAgICAgICAgIChx
dWFsaWZpZXIgPT0gRXZxVW5pZm9ybSA/IG1Vbmlmb3JtcyA6IG1WYXJ5aW5ncyk7CisgICAgICAg
ICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgaSA9IHNlcXVlbmNlLmJl
Z2luKCk7CisgICAgICAgICAgICAgICAgIGkgIT0gc2VxdWVuY2UuZW5kKCk7ICsraSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBUSW50ZXJtU3ltYm9sKiB2YXJpYWJsZSA9
ICgqaSktPmdldEFzU3ltYm9sTm9kZSgpOworICAgICAgICAgICAgICAgIC8vIFRoZSBvbmx5IGNh
c2UgaW4gd2hpY2ggdGhlIHNlcXVlbmNlIHdpbGwgbm90IGNvbnRhaW4gYQorICAgICAgICAgICAg
ICAgIC8vIFRJbnRlcm1TeW1ib2wgbm9kZSBpcyBpbml0aWFsaXphdGlvbi4gSXQgd2lsbCBjb250
YWluIGEKKyAgICAgICAgICAgICAgICAvLyBUSW50ZXJCaW5hcnkgbm9kZSBpbiB0aGF0IGNhc2Uu
IFNpbmNlIGF0dHJpYnV0ZXMsIHVuaWZvcm1zLAorICAgICAgICAgICAgICAgIC8vIGFuZCB2YXJ5
aW5ncyBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgaW4gYSBzaGFkZXIsIHdlIG11c3QgaGF2ZQorICAg
ICAgICAgICAgICAgIC8vIG9ubHkgVEludGVybVN5bWJvbCBub2RlcyBpbiB0aGUgc2VxdWVuY2Uu
CisgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhYmxlICE9IE5VTEwpOworICAgICAgICAgICAg
ICAgIFRTdHJpbmcgcHJvY2Vzc2VkU3ltYm9sOworICAgICAgICAgICAgICAgIGlmIChtSGFzaEZ1
bmN0aW9uID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZFN5bWJvbCA9IHZh
cmlhYmxlLT5nZXRTeW1ib2woKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHByb2Nlc3NlZFN5bWJvbCA9IFRJbnRlcm1UcmF2ZXJzZXI6Omhhc2godmFyaWFibGUt
PmdldE9yaWdpbmFsU3ltYm9sKCksIG1IYXNoRnVuY3Rpb24pOworICAgICAgICAgICAgICAgIGdl
dFZhcmlhYmxlSW5mbyh2YXJpYWJsZS0+Z2V0VHlwZSgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXJpYWJsZS0+Z2V0T3JpZ2luYWxTeW1ib2woKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkU3ltYm9sLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmZvTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUhh
c2hGdW5jdGlvbik7CisgICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0
OiBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gdmlzaXRDaGlsZHJlbjsKK30KKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFy
aWFibGVJbmZvLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9WYXJpYWJsZUluZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNzIxNmNkMTQyOGYyZGNkMjBiMWNjZjBm
NmYwNTg5ZTllYjk4ZTQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVJbmZvLmgKQEAgLTAsMCArMSw1MiBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9WQVJJQUJMRV9JTkZPX0hf
CisjZGVmaW5lIENPTVBJTEVSX1ZBUklBQkxFX0lORk9fSF8KKworI2luY2x1ZGUgIkdMU0xBTkcv
U2hhZGVyTGFuZy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRl
LmgiCisKKy8vIFByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IGEgdmFyaWFibGUuCisvLyBJdCBp
cyBjdXJyZW50bHkgYmVpbmcgdXNlZCB0byBzdG9yZSBpbmZvIGFib3V0IGFjdGl2ZSBhdHRyaWJz
IGFuZCB1bmlmb3Jtcy4KK3N0cnVjdCBUVmFyaWFibGVJbmZvIHsKKyAgICBUVmFyaWFibGVJbmZv
KFNoRGF0YVR5cGUgdHlwZSwgaW50IHNpemUpOworICAgIFRWYXJpYWJsZUluZm8oKTsKKworICAg
IFRQZXJzaXN0U3RyaW5nIG5hbWU7CisgICAgVFBlcnNpc3RTdHJpbmcgbWFwcGVkTmFtZTsKKyAg
ICBTaERhdGFUeXBlIHR5cGU7CisgICAgaW50IHNpemU7CisgICAgYm9vbCBpc0FycmF5OworICAg
IFRQcmVjaXNpb24gcHJlY2lzaW9uOworICAgIGJvb2wgc3RhdGljVXNlOworfTsKK3R5cGVkZWYg
c3RkOjp2ZWN0b3I8VFZhcmlhYmxlSW5mbz4gVFZhcmlhYmxlSW5mb0xpc3Q7CisKKy8vIFRyYXZl
cnNlcyBpbnRlcm1lZGlhdGUgdHJlZSB0byBjb2xsZWN0IGFsbCBhdHRyaWJ1dGVzLCB1bmlmb3Jt
cywgdmFyeWluZ3MuCitjbGFzcyBDb2xsZWN0VmFyaWFibGVzIDogcHVibGljIFRJbnRlcm1UcmF2
ZXJzZXIgeworcHVibGljOgorICAgIENvbGxlY3RWYXJpYWJsZXMoVFZhcmlhYmxlSW5mb0xpc3Qm
IGF0dHJpYnMsCisgICAgICAgICAgICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYgdW5pZm9y
bXMsCisgICAgICAgICAgICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYgdmFyeWluZ3MsCisg
ICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbik7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOworICAgIHZpcnR1YWwg
Ym9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOworCitwcml2YXRl
OgorICAgIFRWYXJpYWJsZUluZm9MaXN0JiBtQXR0cmliczsKKyAgICBUVmFyaWFibGVJbmZvTGlz
dCYgbVVuaWZvcm1zOworICAgIFRWYXJpYWJsZUluZm9MaXN0JiBtVmFyeWluZ3M7CisKKyAgICBi
b29sIG1Qb2ludENvb3JkQWRkZWQ7CisgICAgYm9vbCBtRnJvbnRGYWNpbmdBZGRlZDsKKyAgICBi
b29sIG1GcmFnQ29vcmRBZGRlZDsKKworICAgIFNoSGFzaEZ1bmN0aW9uNjQgbUhhc2hGdW5jdGlv
bjsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVkFSSUFCTEVfSU5GT19IXwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFi
bGVQYWNrZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVmFyaWFibGVQYWNrZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2MzRkODYzMzc3YzlmOTcxYTUy
ZTcyNzFmZTk3OGVlZGMzNWViMWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZVBhY2tlci5jcHAKQEAgLTAs
MCArMSwyOTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9WYXJpYWJsZVBhY2tlci5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvU2hIYW5kbGUuaCIKKworbmFtZXNwYWNlIHsKK2ludCBHZXRT
b3J0T3JkZXIoU2hEYXRhVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgICAg
ICBjYXNlIFNIX0ZMT0FUX01BVDQ6CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2Fz
ZSBTSF9GTE9BVF9NQVQyOgorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgU0hf
RkxPQVRfVkVDNDoKKyAgICAgICAgY2FzZSBTSF9JTlRfVkVDNDoKKyAgICAgICAgY2FzZSBTSF9C
T09MX1ZFQzQ6CisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9N
QVQzOgorICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMzoK
KyAgICAgICAgY2FzZSBTSF9JTlRfVkVDMzoKKyAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzM6Cisg
ICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUMyOgorICAgICAg
ICBjYXNlIFNIX0lOVF9WRUMyOgorICAgICAgICBjYXNlIFNIX0JPT0xfVkVDMjoKKyAgICAgICAg
ICAgIHJldHVybiA1OworICAgICAgICBjYXNlIFNIX0ZMT0FUOgorICAgICAgICBjYXNlIFNIX0lO
VDoKKyAgICAgICAgY2FzZSBTSF9CT09MOgorICAgICAgICBjYXNlIFNIX1NBTVBMRVJfMkQ6Cisg
ICAgICAgIGNhc2UgU0hfU0FNUExFUl9DVUJFOgorICAgICAgICBjYXNlIFNIX1NBTVBMRVJfRVhU
RVJOQUxfT0VTOgorICAgICAgICBjYXNlIFNIX1NBTVBMRVJfMkRfUkVDVF9BUkI6CisgICAgICAg
ICAgICByZXR1cm4gNjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVChmYWxz
ZSk7CisgICAgICAgICAgICByZXR1cm4gNzsKKyAgICB9Cit9Cit9ICAgIC8vIG5hbWVzcGFjZQor
CitpbnQgVmFyaWFibGVQYWNrZXI6OkdldE51bUNvbXBvbmVudHNQZXJSb3coU2hEYXRhVHlwZSB0
eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDQ6
CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMjoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUM0
OgorICAgICAgICBjYXNlIFNIX0lOVF9WRUM0OgorICAgICAgICBjYXNlIFNIX0JPT0xfVkVDNDoK
KyAgICAgICAgICAgIHJldHVybiA0OworICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDM6CisgICAg
ICAgIGNhc2UgU0hfRkxPQVRfVkVDMzoKKyAgICAgICAgY2FzZSBTSF9JTlRfVkVDMzoKKyAgICAg
ICAgY2FzZSBTSF9CT09MX1ZFQzM6CisgICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgY2Fz
ZSBTSF9GTE9BVF9WRUMyOgorICAgICAgICBjYXNlIFNIX0lOVF9WRUMyOgorICAgICAgICBjYXNl
IFNIX0JPT0xfVkVDMjoKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICBjYXNlIFNIX0ZM
T0FUOgorICAgICAgICBjYXNlIFNIX0lOVDoKKyAgICAgICAgY2FzZSBTSF9CT09MOgorICAgICAg
ICBjYXNlIFNIX1NBTVBMRVJfMkQ6CisgICAgICAgIGNhc2UgU0hfU0FNUExFUl9DVUJFOgorICAg
ICAgICBjYXNlIFNIX1NBTVBMRVJfRVhURVJOQUxfT0VTOgorICAgICAgICBjYXNlIFNIX1NBTVBM
RVJfMkRfUkVDVF9BUkI6CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gNTsKKyAgICB9
Cit9CisKK2ludCBWYXJpYWJsZVBhY2tlcjo6R2V0TnVtUm93cyhTaERhdGFUeXBlIHR5cGUpCit7
CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUNDoKKyAgICAg
ICAgICAgIHJldHVybiA0OworICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDM6CisgICAgICAgICAg
ICByZXR1cm4gMzsKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQyOgorICAgICAgICAgICAgcmV0
dXJuIDI7CisgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDNDoKKyAgICAgICAgY2FzZSBTSF9JTlRf
VkVDNDoKKyAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzQ6CisgICAgICAgIGNhc2UgU0hfRkxPQVRf
VkVDMzoKKyAgICAgICAgY2FzZSBTSF9JTlRfVkVDMzoKKyAgICAgICAgY2FzZSBTSF9CT09MX1ZF
QzM6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMjoKKyAgICAgICAgY2FzZSBTSF9JTlRfVkVD
MjoKKyAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzI6CisgICAgICAgIGNhc2UgU0hfRkxPQVQ6Cisg
ICAgICAgIGNhc2UgU0hfSU5UOgorICAgICAgICBjYXNlIFNIX0JPT0w6CisgICAgICAgIGNhc2Ug
U0hfU0FNUExFUl8yRDoKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSX0NVQkU6CisgICAgICAgIGNh
c2UgU0hfU0FNUExFUl9FWFRFUk5BTF9PRVM6CisgICAgICAgIGNhc2UgU0hfU0FNUExFUl8yRF9S
RUNUX0FSQjoKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybiAxMDAwMDA7CisgICAgfQor
fQorCitzdHJ1Y3QgVFZhcmlhYmxlSW5mb0NvbXBhcmVyIHsKKyAgICBib29sIG9wZXJhdG9yKCko
Y29uc3QgVFZhcmlhYmxlSW5mbyYgbGhzLCBjb25zdCBUVmFyaWFibGVJbmZvJiByaHMpIGNvbnN0
CisgICAgeworICAgICAgICBpbnQgbGhzU29ydE9yZGVyID0gR2V0U29ydE9yZGVyKGxocy50eXBl
KTsKKyAgICAgICAgaW50IHJoc1NvcnRPcmRlciA9IEdldFNvcnRPcmRlcihyaHMudHlwZSk7Cisg
ICAgICAgIGlmIChsaHNTb3J0T3JkZXIgIT0gcmhzU29ydE9yZGVyKSB7CisgICAgICAgICAgICBy
ZXR1cm4gbGhzU29ydE9yZGVyIDwgcmhzU29ydE9yZGVyOworICAgICAgICB9CisgICAgICAgIC8v
IFNvcnQgYnkgbGFyZ2VzdCBmaXJzdC4KKyAgICAgICAgcmV0dXJuIGxocy5zaXplID4gcmhzLnNp
emU7CisgICAgfQorfTsKKwordW5zaWduZWQgVmFyaWFibGVQYWNrZXI6Om1ha2VDb2x1bW5GbGFn
cyhpbnQgY29sdW1uLCBpbnQgbnVtQ29tcG9uZW50c1BlclJvdykKK3sKKyAgICByZXR1cm4gKChr
Q29sdW1uTWFzayA8PCAoa051bUNvbHVtbnMgLSBudW1Db21wb25lbnRzUGVyUm93KSkgJgorICAg
ICAgICAgICAgICAgICAgICBrQ29sdW1uTWFzaykgPj4gY29sdW1uOworfQorCit2b2lkIFZhcmlh
YmxlUGFja2VyOjpmaWxsQ29sdW1ucyhpbnQgdG9wUm93LCBpbnQgbnVtUm93cywgaW50IGNvbHVt
biwgaW50IG51bUNvbXBvbmVudHNQZXJSb3cpCit7CisgICAgdW5zaWduZWQgY29sdW1uRmxhZ3Mg
PSBtYWtlQ29sdW1uRmxhZ3MoY29sdW1uLCBudW1Db21wb25lbnRzUGVyUm93KTsKKyAgICBmb3Ig
KGludCByID0gMDsgciA8IG51bVJvd3M7ICsrcikgeworICAgICAgICBpbnQgcm93ID0gdG9wUm93
ICsgcjsKKyAgICAgICAgQVNTRVJUKChyb3dzX1tyb3ddICYgY29sdW1uRmxhZ3MpID09IDApOwor
ICAgICAgICByb3dzX1tyb3ddIHw9IGNvbHVtbkZsYWdzOworICAgIH0KK30KKworYm9vbCBWYXJp
YWJsZVBhY2tlcjo6c2VhcmNoQ29sdW1uKGludCBjb2x1bW4sIGludCBudW1Sb3dzLCBpbnQqIGRl
c3RSb3csIGludCogZGVzdFNpemUpCit7CisgICAgQVNTRVJUKGRlc3RSb3cpOworCisgICAgZm9y
ICg7IHRvcE5vbkZ1bGxSb3dfIDwgbWF4Um93c18gJiYgcm93c19bdG9wTm9uRnVsbFJvd19dID09
IGtDb2x1bW5NYXNrOworICAgICAgICAgKyt0b3BOb25GdWxsUm93XykgeworICAgIH0KKworICAg
IGZvciAoOyBib3R0b21Ob25GdWxsUm93XyA+PSAwICYmIHJvd3NfW2JvdHRvbU5vbkZ1bGxSb3df
XSA9PSBrQ29sdW1uTWFzazsKKyAgICAgICAgIC0tYm90dG9tTm9uRnVsbFJvd18pIHsKKyAgICB9
CisKKyAgICBpZiAoYm90dG9tTm9uRnVsbFJvd18gLSB0b3BOb25GdWxsUm93XyArIDEgPCBudW1S
b3dzKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBjb2x1
bW5GbGFncyA9IG1ha2VDb2x1bW5GbGFncyhjb2x1bW4sIDEpOworICAgIGludCB0b3BHb29kUm93
ID0gMDsKKyAgICBpbnQgc21hbGxlc3RHb29kVG9wID0gLTE7CisgICAgaW50IHNtYWxsZXN0R29v
ZFNpemUgPSBtYXhSb3dzXyArIDE7CisgICAgaW50IGJvdHRvbVJvdyA9IGJvdHRvbU5vbkZ1bGxS
b3dfICsgMTsKKyAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgZm9yIChpbnQgcm93ID0gdG9w
Tm9uRnVsbFJvd187IHJvdyA8PSBib3R0b21Sb3c7ICsrcm93KSB7CisgICAgICAgIGJvb2wgcm93
RW1wdHkgPSByb3cgPCBib3R0b21Sb3cgPyAoKHJvd3NfW3Jvd10gJiBjb2x1bW5GbGFncykgPT0g
MCkgOiBmYWxzZTsKKyAgICAgICAgaWYgKHJvd0VtcHR5KSB7CisgICAgICAgICAgICBpZiAoIWZv
dW5kKSB7CisgICAgICAgICAgICAgICAgdG9wR29vZFJvdyA9IHJvdzsKKyAgICAgICAgICAgICAg
ICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBpZiAoZm91bmQpIHsKKyAgICAgICAgICAgICAgICBpbnQgc2l6ZSA9IHJvdyAtIHRvcEdv
b2RSb3c7CisgICAgICAgICAgICAgICAgaWYgKHNpemUgPj0gbnVtUm93cyAmJiBzaXplIDwgc21h
bGxlc3RHb29kU2l6ZSkgeworICAgICAgICAgICAgICAgICAgICBzbWFsbGVzdEdvb2RTaXplID0g
c2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgc21hbGxlc3RHb29kVG9wID0gdG9wR29vZFJvdzsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3VuZCA9IGZh
bHNlOworICAgICAgICB9CisgICAgfQorICAgIGlmIChzbWFsbGVzdEdvb2RUb3AgPCAwKSB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAqZGVzdFJvdyA9IHNtYWxsZXN0R29v
ZFRvcDsKKyAgICBpZiAoZGVzdFNpemUpIHsKKyAgICAgICAgKmRlc3RTaXplID0gc21hbGxlc3RH
b29kU2l6ZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVmFyaWFibGVQYWNr
ZXI6OkNoZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cyhpbnQgbWF4VmVjdG9ycywgY29u
c3QgVFZhcmlhYmxlSW5mb0xpc3QmIGluX3ZhcmlhYmxlcykKK3sKKyAgICBBU1NFUlQobWF4VmVj
dG9ycyA+IDApOworICAgIG1heFJvd3NfID0gbWF4VmVjdG9yczsKKyAgICB0b3BOb25GdWxsUm93
XyA9IDA7CisgICAgYm90dG9tTm9uRnVsbFJvd18gPSBtYXhSb3dzXyAtIDE7CisgICAgVFZhcmlh
YmxlSW5mb0xpc3QgdmFyaWFibGVzKGluX3ZhcmlhYmxlcyk7CisKKyAgICAvLyBBcyBwZXIgR0xT
TCAxLjAxNyBBcHBlbmRpeCBBLCBTZWN0aW9uIDcgdmFyaWFibGVzIGFyZSBwYWNrZWQgaW4gc3Bl
Y2lmaWMKKyAgICAvLyBvcmRlciBieSB0eXBlLCB0aGVuIGJ5IHNpemUgb2YgYXJyYXksIGxhcmdl
c3QgZmlyc3QuCisgICAgc3RkOjpzb3J0KHZhcmlhYmxlcy5iZWdpbigpLCB2YXJpYWJsZXMuZW5k
KCksIFRWYXJpYWJsZUluZm9Db21wYXJlcigpKTsKKyAgICByb3dzXy5jbGVhcigpOworICAgIHJv
d3NfLnJlc2l6ZShtYXhWZWN0b3JzLCAwKTsKKworICAgIC8vIFBhY2tzIHRoZSA0IGNvbHVtbiB2
YXJpYWJsZXMuCisgICAgc2l6ZV90IGlpID0gMDsKKyAgICBmb3IgKDsgaWkgPCB2YXJpYWJsZXMu
c2l6ZSgpOyArK2lpKSB7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZUluZm8mIHZhcmlhYmxlID0g
dmFyaWFibGVzW2lpXTsKKyAgICAgICAgaWYgKEdldE51bUNvbXBvbmVudHNQZXJSb3codmFyaWFi
bGUudHlwZSkgIT0gNCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
dG9wTm9uRnVsbFJvd18gKz0gR2V0TnVtUm93cyh2YXJpYWJsZS50eXBlKSAqIHZhcmlhYmxlLnNp
emU7CisgICAgfQorCisgICAgaWYgKHRvcE5vbkZ1bGxSb3dfID4gbWF4Um93c18pIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFBhY2tzIHRoZSAzIGNvbHVtbiB2YXJp
YWJsZXMuCisgICAgaW50IG51bTNDb2x1bW5Sb3dzID0gMDsKKyAgICBmb3IgKDsgaWkgPCB2YXJp
YWJsZXMuc2l6ZSgpOyArK2lpKSB7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZUluZm8mIHZhcmlh
YmxlID0gdmFyaWFibGVzW2lpXTsKKyAgICAgICAgaWYgKEdldE51bUNvbXBvbmVudHNQZXJSb3co
dmFyaWFibGUudHlwZSkgIT0gMykgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgbnVtM0NvbHVtblJvd3MgKz0gR2V0TnVtUm93cyh2YXJpYWJsZS50eXBlKSAqIHZhcmlh
YmxlLnNpemU7CisgICAgfQorCisgICAgaWYgKHRvcE5vbkZ1bGxSb3dfICsgbnVtM0NvbHVtblJv
d3MgPiBtYXhSb3dzXykgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZmls
bENvbHVtbnModG9wTm9uRnVsbFJvd18sIG51bTNDb2x1bW5Sb3dzLCAwLCAzKTsKKworICAgIC8v
IFBhY2tzIHRoZSAyIGNvbHVtbiB2YXJpYWJsZXMuCisgICAgaW50IHRvcDJDb2x1bW5Sb3cgPSB0
b3BOb25GdWxsUm93XyArIG51bTNDb2x1bW5Sb3dzOworICAgIGludCB0d29Db2x1bW5Sb3dzQXZh
aWxhYmxlID0gbWF4Um93c18gLSB0b3AyQ29sdW1uUm93OworICAgIGludCByb3dzQXZhaWxhYmxl
SW5Db2x1bW5zMDEgPSB0d29Db2x1bW5Sb3dzQXZhaWxhYmxlOworICAgIGludCByb3dzQXZhaWxh
YmxlSW5Db2x1bW5zMjMgPSB0d29Db2x1bW5Sb3dzQXZhaWxhYmxlOworICAgIGZvciAoOyBpaSA8
IHZhcmlhYmxlcy5zaXplKCk7ICsraWkpIHsKKyAgICAgICAgY29uc3QgVFZhcmlhYmxlSW5mbyYg
dmFyaWFibGUgPSB2YXJpYWJsZXNbaWldOworICAgICAgICBpZiAoR2V0TnVtQ29tcG9uZW50c1Bl
clJvdyh2YXJpYWJsZS50eXBlKSAhPSAyKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBpbnQgbnVtUm93cyA9IEdldE51bVJvd3ModmFyaWFibGUudHlwZSkgKiB2YXJp
YWJsZS5zaXplOworICAgICAgICBpZiAobnVtUm93cyA8PSByb3dzQXZhaWxhYmxlSW5Db2x1bW5z
MDEpIHsKKyAgICAgICAgICAgIHJvd3NBdmFpbGFibGVJbkNvbHVtbnMwMSAtPSBudW1Sb3dzOwor
ICAgICAgICB9IGVsc2UgaWYgKG51bVJvd3MgPD0gcm93c0F2YWlsYWJsZUluQ29sdW1uczIzKSB7
CisgICAgICAgICAgICByb3dzQXZhaWxhYmxlSW5Db2x1bW5zMjMgLT0gbnVtUm93czsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGludCBudW1Sb3dzVXNlZEluQ29sdW1uczAxID0KKyAgICAgICAgdHdvQ29sdW1uUm93
c0F2YWlsYWJsZSAtIHJvd3NBdmFpbGFibGVJbkNvbHVtbnMwMTsKKyAgICBpbnQgbnVtUm93c1Vz
ZWRJbkNvbHVtbnMyMyA9CisgICAgICAgIHR3b0NvbHVtblJvd3NBdmFpbGFibGUgLSByb3dzQXZh
aWxhYmxlSW5Db2x1bW5zMjM7CisgICAgZmlsbENvbHVtbnModG9wMkNvbHVtblJvdywgbnVtUm93
c1VzZWRJbkNvbHVtbnMwMSwgMCwgMik7CisgICAgZmlsbENvbHVtbnMobWF4Um93c18gLSBudW1S
b3dzVXNlZEluQ29sdW1uczIzLCBudW1Sb3dzVXNlZEluQ29sdW1uczIzLAorICAgICAgICAgICAg
ICAgIDIsIDIpOworCisgICAgLy8gUGFja3MgdGhlIDEgY29sdW1uIHZhcmlhYmxlcy4KKyAgICBm
b3IgKDsgaWkgPCB2YXJpYWJsZXMuc2l6ZSgpOyArK2lpKSB7CisgICAgICAgIGNvbnN0IFRWYXJp
YWJsZUluZm8mIHZhcmlhYmxlID0gdmFyaWFibGVzW2lpXTsKKyAgICAgICAgQVNTRVJUKDEgPT0g
R2V0TnVtQ29tcG9uZW50c1BlclJvdyh2YXJpYWJsZS50eXBlKSk7CisgICAgICAgIGludCBudW1S
b3dzID0gR2V0TnVtUm93cyh2YXJpYWJsZS50eXBlKSAqIHZhcmlhYmxlLnNpemU7CisgICAgICAg
IGludCBzbWFsbGVzdENvbHVtbiA9IC0xOworICAgICAgICBpbnQgc21hbGxlc3RTaXplID0gbWF4
Um93c18gKyAxOworICAgICAgICBpbnQgdG9wUm93ID0gLTE7CisgICAgICAgIGZvciAoaW50IGNv
bHVtbiA9IDA7IGNvbHVtbiA8IGtOdW1Db2x1bW5zOyArK2NvbHVtbikgeworICAgICAgICAgICAg
aW50IHJvdyA9IDA7CisgICAgICAgICAgICBpbnQgc2l6ZSA9IDA7CisgICAgICAgICAgICBpZiAo
c2VhcmNoQ29sdW1uKGNvbHVtbiwgbnVtUm93cywgJnJvdywgJnNpemUpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHNpemUgPCBzbWFsbGVzdFNpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgc21h
bGxlc3RTaXplID0gc2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgc21hbGxlc3RDb2x1bW4gPSBj
b2x1bW47CisgICAgICAgICAgICAgICAgICAgIHRvcFJvdyA9IHJvdzsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoc21hbGxlc3RDb2x1
bW4gPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAg
ICBmaWxsQ29sdW1ucyh0b3BSb3csIG51bVJvd3MsIHNtYWxsZXN0Q29sdW1uLCAxKTsKKyAgICB9
CisKKyAgICBBU1NFUlQodmFyaWFibGVzLnNpemUoKSA9PSBpaSk7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlUGFja2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZVBhY2tlci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZk
NjA5MDgyN2NkOGUxOTU5MzhjZTQ1OTVjZjkzNzFlNzRkMTZhNTcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJs
ZVBhY2tlci5oCkBAIC0wLDAgKzEsNDEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYg
X1ZBUklBQkxFUEFDS0VSX0lOQ0xVREVEXworI2RlZmluZSBfVkFSSUFCTEVQQUNLRVJfSU5DTFVE
RURfCisKKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9T
aEhhbmRsZS5oIgorCitjbGFzcyBWYXJpYWJsZVBhY2tlciB7CisgcHVibGljOgorICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiB0aGUgcGFzc2VkIGluIHZhcmlhYmxlcyBwYWNrIGluIG1heFZlY3RvcnMg
Zm9sbG93aW5nCisgICAgLy8gdGhlIHBhY2tpbmcgcnVsZXMgZnJvbSB0aGUgR0xTTCAxLjAxNyBz
cGVjLCBBcHBlbmRpeCBBLCBzZWN0aW9uIDcuCisgICAgYm9vbCBDaGVja1ZhcmlhYmxlc1dpdGhp
blBhY2tpbmdMaW1pdHMoCisgICAgICAgIGludCBtYXhWZWN0b3JzLAorICAgICAgICBjb25zdCBU
VmFyaWFibGVJbmZvTGlzdCYgaW5fdmFyaWFibGVzKTsKKworICAgIC8vIEdldHMgaG93IG1hbnkg
Y29tcG9uZW50cyBpbiBhIHJvdyBhIGRhdGEgdHlwZSB0YWtlcy4KKyAgICBzdGF0aWMgaW50IEdl
dE51bUNvbXBvbmVudHNQZXJSb3coU2hEYXRhVHlwZSB0eXBlKTsKKworICAgIC8vIEdldHMgaG93
IG1hbnkgcm93cyBhIGRhdGEgdHlwZSB0YWtlcy4KKyAgICBzdGF0aWMgaW50IEdldE51bVJvd3Mo
U2hEYXRhVHlwZSB0eXBlKTsKKworIHByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IGludCBrTnVt
Q29sdW1ucyA9IDQ7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGtDb2x1bW5NYXNrID0gKDEg
PDwga051bUNvbHVtbnMpIC0gMTsKKworICAgIHVuc2lnbmVkIG1ha2VDb2x1bW5GbGFncyhpbnQg
Y29sdW1uLCBpbnQgbnVtQ29tcG9uZW50c1BlclJvdyk7CisgICAgdm9pZCBmaWxsQ29sdW1ucyhp
bnQgdG9wUm93LCBpbnQgbnVtUm93cywgaW50IGNvbHVtbiwgaW50IG51bUNvbXBvbmVudHNQZXJS
b3cpOworICAgIGJvb2wgc2VhcmNoQ29sdW1uKGludCBjb2x1bW4sIGludCBudW1Sb3dzLCBpbnQq
IGRlc3RSb3csIGludCogZGVzdFNpemUpOworCisgICAgaW50IHRvcE5vbkZ1bGxSb3dfOworICAg
IGludCBib3R0b21Ob25GdWxsUm93XzsKKyAgICBpbnQgbWF4Um93c187CisgICAgc3RkOjp2ZWN0
b3I8dW5zaWduZWQ+IHJvd3NfOworfTsKKworI2VuZGlmIC8vIF9WQVJJQUJMRVBBQ0tFUl9JTkNM
VURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1ZlcnNpb25HTFNMLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1ZlcnNpb25HTFNMLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZDExZjk5ZWI4
OWM2YTU1YTA5MTVhZjA4ODMwNzZhZDZkZGU0NzM3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmVyc2lvbkdMU0wuY3Bw
CkBAIC0wLDAgKzEsMTQwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9WZXJzaW9uR0xTTC5oIgorCitzdGF0aWMgY29uc3QgaW50IEdMU0xfVkVS
U0lPTl8xMTAgPSAxMTA7CitzdGF0aWMgY29uc3QgaW50IEdMU0xfVkVSU0lPTl8xMjAgPSAxMjA7
CisKKy8vIFdlIG5lZWQgdG8gc2NhbiBmb3IgdGhlIGZvbGxvd2luZzoKKy8vIDEuICJpbnZhcmlh
bnQiIGtleXdvcmQ6IFRoaXMgY2FuIG9jY3VyIGluIGJvdGggLSB2ZXJ0ZXggYW5kIGZyYWdtZW50
IHNoYWRlcnMKKy8vICAgIGJ1dCBvbmx5IGF0IHRoZSBnbG9iYWwgc2NvcGUuCisvLyAyLiAiZ2xf
UG9pbnRDb29yZCIgYnVpbHQtaW4gdmFyaWFibGU6IFRoaXMgY2FuIG9ubHkgb2NjdXIgaW4gZnJh
Z21lbnQgc2hhZGVyCisvLyAgICBidXQgaW5zaWRlIGFueSBzY29wZS4KKy8vIDMuIENhbGwgdG8g
YSBtYXRyaXggY29uc3RydWN0b3Igd2l0aCBhbm90aGVyIG1hdHJpeCBhcyBhcmd1bWVudC4KKy8v
ICAgIChUaGVzZSBjb25zdHJ1Y3RvcnMgd2VyZSByZXNlcnZlZCBpbiBHTFNMIHZlcnNpb24gMS4x
MC4pCisvLyA0LiBBcnJheXMgYXMgIm91dCIgZnVuY3Rpb24gcGFyYW1ldGVycy4KKy8vICAgIEdM
U0wgc3BlYyBzZWN0aW9uIDYuMS4xOiAiV2hlbiBjYWxsaW5nIGEgZnVuY3Rpb24sIGV4cHJlc3Np
b25zIHRoYXQgZG8KKy8vICAgIG5vdCBldmFsdWF0ZSB0byBsLXZhbHVlcyBjYW5ub3QgYmUgcGFz
c2VkIHRvIHBhcmFtZXRlcnMgZGVjbGFyZWQgYXMKKy8vICAgIG91dCBvciBpbm91dC4iCisvLyAg
ICBHTFNMIDEuMSBzZWN0aW9uIDUuODogIk90aGVyIGJpbmFyeSBvciB1bmFyeSBleHByZXNzaW9u
cywKKy8vICAgIG5vbi1kZXJlZmVyZW5jZWQgYXJyYXlzLCBmdW5jdGlvbiBuYW1lcywgc3dpenps
ZXMgd2l0aCByZXBlYXRlZCBmaWVsZHMsCisvLyAgICBhbmQgY29uc3RhbnRzIGNhbm5vdCBiZSBs
LXZhbHVlcy4iCisvLyAgICBHTFNMIDEuMiByZWxheGVkIHRoZSByZXN0cmljdGlvbiBvbiBhcnJh
eXMsIHNlY3Rpb24gNS44OiAiVmFyaWFibGVzIHRoYXQKKy8vICAgIGFyZSBidWlsdC1pbiB0eXBl
cywgZW50aXJlIHN0cnVjdHVyZXMgb3IgYXJyYXlzLi4uIGFyZSBhbGwgbC12YWx1ZXMuIgorLy8K
Ky8vIFRPRE8oYWxva3ApOiBUaGUgZm9sbG93aW5nIHR3byBjYXNlcyBvZiBpbnZhcmlhbnQgZGVj
YWxhcmF0aW9uIGdldCBsb3N0CisvLyBkdXJpbmcgcGFyc2luZyAtIHRoZXkgZG8gbm90IGdldCBj
YXJyaWVkIG92ZXIgdG8gdGhlIGludGVybWVkaWF0ZSB0cmVlLgorLy8gSGFuZGxlIHRoZXNlIGNh
c2VzOgorLy8gMS4gV2hlbiBhIHByYWdtYSBpcyB1c2VkIHRvIGZvcmNlIGFsbCBvdXRwdXQgdmFy
aWFibGVzIHRvIGJlIGludmFyaWFudDoKKy8vICAgIC0gI3ByYWdtYSBTVERHTCBpbnZhcmlhbnQo
YWxsKQorLy8gMi4gV2hlbiBhIHByZXZpb3VzbHkgZGVjYWxhcmVkIG9yIGJ1aWx0LWluIHZhcmlh
YmxlIGlzIG1hcmtlZCBpbnZhcmlhbnQ6CisvLyAgICAtIGludmFyaWFudCBnbF9Qb3NpdGlvbjsK
Ky8vICAgIC0gdmFyeWluZyB2ZWMzIGNvbG9yOyBpbnZhcmlhbnQgY29sb3I7CisvLworVFZlcnNp
b25HTFNMOjpUVmVyc2lvbkdMU0woU2hTaGFkZXJUeXBlIHR5cGUpCisgICAgOiBtU2hhZGVyVHlw
ZSh0eXBlKSwKKyAgICAgIG1WZXJzaW9uKEdMU0xfVkVSU0lPTl8xMTApCit7Cit9CisKK3ZvaWQg
VFZlcnNpb25HTFNMOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQoreworICAgIGlm
IChub2RlLT5nZXRTeW1ib2woKSA9PSAiZ2xfUG9pbnRDb29yZCIpCisgICAgICAgIHVwZGF0ZVZl
cnNpb24oR0xTTF9WRVJTSU9OXzEyMCk7Cit9CisKK3ZvaWQgVFZlcnNpb25HTFNMOjp2aXNpdENv
bnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qKQoreworfQorCitib29sIFRWZXJzaW9u
R0xTTDo6dmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkqKQoreworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFRWZXJzaW9uR0xTTDo6dmlzaXRVbmFyeShWaXNpdCwgVEludGVybVVu
YXJ5KikKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUVmVyc2lvbkdMU0w6OnZpc2l0
U2VsZWN0aW9uKFZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKikKK3sKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBUVmVyc2lvbkdMU0w6OnZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdn
cmVnYXRlKiBub2RlKQoreworICAgIGJvb2wgdmlzaXRDaGlsZHJlbiA9IHRydWU7CisKKyAgICBz
d2l0Y2ggKG5vZGUtPmdldE9wKCkpIHsKKyAgICAgIGNhc2UgRU9wU2VxdWVuY2U6CisgICAgICAg
IC8vIFdlIG5lZWQgdG8gdmlzaXQgc2VxdWVuY2UgY2hpbGRyZW4gdG8gZ2V0IHRvIGdsb2JhbCBv
ciBpbm5lciBzY29wZS4KKyAgICAgICAgdmlzaXRDaGlsZHJlbiA9IHRydWU7CisgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBFT3BEZWNsYXJhdGlvbjogeworICAgICAgICBjb25zdCBUSW50ZXJt
U2VxdWVuY2UmIHNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAgVFF1YWxp
ZmllciBxdWFsaWZpZXIgPSBzZXF1ZW5jZS5mcm9udCgpLT5nZXRBc1R5cGVkKCktPmdldFF1YWxp
ZmllcigpOworICAgICAgICBpZiAoKHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5aW5nSW4p
IHx8CisgICAgICAgICAgICAocXVhbGlmaWVyID09IEV2cUludmFyaWFudFZhcnlpbmdPdXQpKSB7
CisgICAgICAgICAgICB1cGRhdGVWZXJzaW9uKEdMU0xfVkVSU0lPTl8xMjApOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBFT3BQYXJhbWV0ZXJzOiB7Cisg
ICAgICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgcGFyYW1zID0gbm9kZS0+Z2V0U2VxdWVuY2Uo
KTsKKyAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBw
YXJhbXMuYmVnaW4oKTsKKyAgICAgICAgICAgICBpdGVyICE9IHBhcmFtcy5lbmQoKTsgKytpdGVy
KQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUSW50ZXJtVHlwZWQqIHBhcmFtID0gKCpp
dGVyKS0+Z2V0QXNUeXBlZCgpOworICAgICAgICAgICAgaWYgKHBhcmFtLT5pc0FycmF5KCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBwYXJh
bS0+Z2V0UXVhbGlmaWVyKCk7CisgICAgICAgICAgICAgICAgaWYgKChxdWFsaWZpZXIgPT0gRXZx
T3V0KSB8fCAocXVhbGlmaWVyID09ICBFdnFJbk91dCkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICB1cGRhdGVWZXJzaW9uKEdMU0xfVkVSU0lPTl8xMjApOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gRnVsbHkgcHJvY2Vzc2VkLiBObyBuZWVkIHRvIHZpc2l0IGNo
aWxkcmVuLgorICAgICAgICB2aXNpdENoaWxkcmVuID0gZmFsc2U7CisgICAgICAgIGJyZWFrOwor
ICAgICAgfQorICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQyOgorICAgICAgY2FzZSBFT3BDb25z
dHJ1Y3RNYXQzOgorICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQ0OiB7CisgICAgICAgIGNvbnN0
IFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOworICAgICAg
ICBpZiAoc2VxdWVuY2Uuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgICBUSW50ZXJtVHlwZWQqIHR5
cGVkID0gc2VxdWVuY2UuZnJvbnQoKS0+Z2V0QXNUeXBlZCgpOworICAgICAgICAgIGlmICh0eXBl
ZCAmJiB0eXBlZC0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgdXBkYXRlVmVyc2lvbihHTFNM
X1ZFUlNJT05fMTIwKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgICB9CisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB2aXNp
dENoaWxkcmVuOworfQorCitib29sIFRWZXJzaW9uR0xTTDo6dmlzaXRMb29wKFZpc2l0LCBUSW50
ZXJtTG9vcCopCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVFZlcnNpb25HTFNMOjp2
aXNpdEJyYW5jaChWaXNpdCwgVEludGVybUJyYW5jaCopCit7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgVFZlcnNpb25HTFNMOjp1cGRhdGVWZXJzaW9uKGludCB2ZXJzaW9uKQoreworICAg
IG1WZXJzaW9uID0gc3RkOjptYXgodmVyc2lvbiwgbVZlcnNpb24pOworfQorCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WZXJzaW9u
R0xTTC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VmVyc2lvbkdMU0wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMzEwMDY2MTcxMTQ1N2ZiNjk4ZDAxNDE2MTk5YTZk
ZjJmMGFhZjBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVmVyc2lvbkdMU0wuaApAQCAtMCwwICsxLDU2IEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1ZFUlNJT05HTFNMX0hfCisjZGVmaW5l
IENPTVBJTEVSX1ZFUlNJT05HTFNMX0hfCisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcu
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgorCisvLyBU
cmF2ZXJzZXMgdGhlIGludGVybWVkaWF0ZSB0cmVlIHRvIHJldHVybiB0aGUgbWluaW11bSBHTFNM
IHZlcnNpb24KKy8vIHJlcXVpcmVkIHRvIGxlZ2FsbHkgYWNjZXNzIGFsbCBidWlsdC1pbiBmZWF0
dXJlcyB1c2VkIGluIHRoZSBzaGFkZXIuCisvLyBHTFNMIDEuMSB3aGljaCBpcyBtYW5kYXRlZCBi
eSBPcGVuR0wgMi4wIHByb3ZpZGVzOgorLy8gICAtICN2ZXJzaW9uIGFuZCAjZXh0ZW5zaW9uIHRv
IGRlY2xhcmUgdmVyc2lvbiBhbmQgZXh0ZW5zaW9ucy4KKy8vICAgLSBidWlsdC1pbiBmdW5jdGlv
bnMgcmVmcmFjdCwgZXhwLCBhbmQgbG9nLgorLy8gICAtIHVwZGF0ZWQgc3RlcCgpIHRvIGNvbXBh
cmUgeCA8IGVkZ2UgaW5zdGVhZCBvZiB4IDw9IGVkZ2UuCisvLyBHTFNMIDEuMiB3aGljaCBpcyBt
YW5kYXRlZCBieSBPcGVuR0wgMi4xIHByb3ZpZGVzOgorLy8gICAtIG1hbnkgY2hhbmdlcyB0byBy
ZWR1Y2UgZGlmZmVyZW5jZXMgd2hlbiBjb21wYXJlZCB0byB0aGUgRVMgc3BlY2lmaWNhdGlvbi4K
Ky8vICAgLSBpbnZhcmlhbnQga2V5d29yZCBhbmQgaXRzIHN1cHBvcnQuCisvLyAgIC0gYysrIHN0
eWxlIG5hbWUgaGlkaW5nIHJ1bGVzLgorLy8gICAtIGJ1aWx0LWluIHZhcmlhYmxlIGdsX1BvaW50
Q29vcmQgZm9yIGZyYWdtZW50IHNoYWRlcnMuCisvLyAgIC0gbWF0cml4IGNvbnN0cnVjdG9ycyB0
YWtpbmcgbWF0cml4IGFzIGFyZ3VtZW50LgorLy8gICAtIGFycmF5IGFzICJvdXQiIGZ1bmN0aW9u
IHBhcmFtZXRlcnMKKy8vCitjbGFzcyBUVmVyc2lvbkdMU0wgOiBwdWJsaWMgVEludGVybVRyYXZl
cnNlciB7CitwdWJsaWM6CisgICAgVFZlcnNpb25HTFNMKFNoU2hhZGVyVHlwZSB0eXBlKTsKKwor
ICAgIC8vIFJldHVybnMgMTIwIGlmIHRoZSBmb2xsb3dpbmcgaXMgdXNlZCB0aGUgc2hhZGVyOgor
ICAgIC8vIC0gImludmFyaWFudCIsCisgICAgLy8gLSAiZ2xfUG9pbnRDb29yZCIsCisgICAgLy8g
LSBtYXRyaXgvbWF0cml4IGNvbnN0cnVjdG9ycworICAgIC8vIC0gYXJyYXkgIm91dCIgcGFyYW1l
dGVycworICAgIC8vIEVsc2UgMTEwIGlzIHJldHVybmVkLgorICAgIGludCBnZXRWZXJzaW9uKCkg
eyByZXR1cm4gbVZlcnNpb247IH0KKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50
ZXJtU3ltYm9sKik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJt
Q29uc3RhbnRVbmlvbiopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCwgVElu
dGVybUJpbmFyeSopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJt
VW5hcnkqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQsIFRJbnRlcm1T
ZWxlY3Rpb24qKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRl
cm1BZ2dyZWdhdGUqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRMb29wKFZpc2l0LCBUSW50ZXJt
TG9vcCopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCwgVEludGVybUJyYW5j
aCopOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCB1cGRhdGVWZXJzaW9uKGludCB2ZXJzaW9uKTsK
KworcHJpdmF0ZToKKyAgICBTaFNoYWRlclR5cGUgbVNoYWRlclR5cGU7CisgICAgaW50IG1WZXJz
aW9uOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9WRVJTSU9OR0xTTF9IXwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvY29tcGls
ZXJkZWJ1Zy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9jb21waWxlcmRlYnVnLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMGNiZTQzYjhkNTQ4YjhlMjYxODU4
YTc5NzRmMjg0MzYzNGNkODRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvY29tcGlsZXJkZWJ1Zy5jcHAKQEAgLTAsMCAr
MSwzNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gZGVidWcuY3BwOiBEZWJ1Z2dpbmcgdXRp
bGl0aWVzLgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9jb21waWxlcmRlYnVnLmgi
CisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaCIKKworI2lmZGVmIFRSQUNFX0VOQUJM
RUQKK3N0YXRpYyBjb25zdCBpbnQga1RyYWNlQnVmZmVyTGVuID0gMTAyNDsKKworZXh0ZXJuICJD
IiB7Cit2b2lkIFRyYWNlKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSB7CisgICAgaWYgKCFmb3Jt
YXQpIHJldHVybjsKKworICAgIFRQYXJzZUNvbnRleHQqIHBhcnNlQ29udGV4dCA9IEdldEdsb2Jh
bFBhcnNlQ29udGV4dCgpOworICAgIGlmIChwYXJzZUNvbnRleHQpIHsKKyAgICAgICAgY2hhciBi
dWZba1RyYWNlQnVmZmVyTGVuXTsKKyAgICAgICAgdmFfbGlzdCBhcmdzOworICAgICAgICB2YV9z
dGFydChhcmdzLCBmb3JtYXQpOworICAgICAgICB2c25wcmludGYoYnVmLCBrVHJhY2VCdWZmZXJM
ZW4sIGZvcm1hdCwgYXJncyk7CisgICAgICAgIHZhX2VuZChhcmdzKTsKKworICAgICAgICBwYXJz
ZUNvbnRleHQtPnRyYWNlKGJ1Zik7CisgICAgfQorfQorfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlm
ICAvLyBUUkFDRV9FTkFCTEVECisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL2NvbXBpbGVyZGVidWcuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2NvbXBpbGVyZGVidWcuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43YTM3MTUxNmFmMGZlZWM2MWY0NmVlMTE4MjFiYTI4ZDM1MWRkNDllCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Y29tcGlsZXJkZWJ1Zy5oCkBAIC0wLDAgKzEsNTMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
IGRlYnVnLmg6IERlYnVnZ2luZyB1dGlsaXRpZXMuCisKKyNpZm5kZWYgQ09NUElMRVJfREVCVUdf
SF8KKyNkZWZpbmUgQ09NUElMRVJfREVCVUdfSF8KKworI2luY2x1ZGUgPGFzc2VydC5oPgorCisj
aWZkZWYgX0RFQlVHCisjZGVmaW5lIFRSQUNFX0VOQUJMRUQgIC8vIGRlZmluZSB0byBlbmFibGUg
ZGVidWcgbWVzc2FnZSB0cmFjaW5nCisjZW5kaWYgIC8vIF9ERUJVRworCisvLyBPdXRwdXRzIHRl
eHQgdG8gdGhlIGRlYnVnIGxvZworI2lmZGVmIFRSQUNFX0VOQUJMRUQKKworI2lmZGVmICBfX2Nw
bHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgIC8vIF9fY3BsdXNwbHVzCit2b2lkIFRyYWNl
KGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKTsKKyNpZmRlZiAgX19jcGx1c3BsdXMKK30KKyNlbmRp
ZiAgLy8gX19jcGx1c3BsdXMKKworI2Vsc2UgICAvLyBUUkFDRV9FTkFCTEVECisKKyNkZWZpbmUg
VHJhY2UoLi4uKSAoKHZvaWQpMCkKKworI2VuZGlmICAvLyBUUkFDRV9FTkFCTEVECisKKy8vIEEg
bWFjcm8gYXNzZXJ0aW5nIGEgY29uZGl0aW9uIGFuZCBvdXRwdXR0aW5nIGZhaWx1cmVzIHRvIHRo
ZSBkZWJ1ZyBsb2cKKyNkZWZpbmUgQVNTRVJUKGV4cHJlc3Npb24pIGRvIHsgXAorICAgIGlmKCEo
ZXhwcmVzc2lvbikpIFwKKyAgICAgICAgVHJhY2UoIkFzc2VydCBmYWlsZWQ6ICVzKCVkKTogIiNl
eHByZXNzaW9uIlxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7IFwKKyAgICBhc3NlcnQoZXhw
cmVzc2lvbik7IFwKK30gd2hpbGUoMCkKKworI2RlZmluZSBVTklNUExFTUVOVEVEKCkgZG8geyBc
CisgICAgVHJhY2UoIlVuaW1wbGVtZW50ZWQgaW52b2tlZDogJXMoJWQpXG4iLCBfX0ZVTkNUSU9O
X18sIF9fTElORV9fKTsgXAorICAgIGFzc2VydChmYWxzZSk7IFwKK30gd2hpbGUoMCkKKworI2Rl
ZmluZSBVTlJFQUNIQUJMRSgpIGRvIHsgXAorICAgIFRyYWNlKCJVbnJlYWNoYWJsZSByZWFjaGVk
OiAlcyglZClcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOyBcCisgICAgYXNzZXJ0KGZhbHNl
KTsgXAorfSB3aGlsZSgwKQorCisjZW5kaWYgICAvLyBDT01QSUxFUl9ERUJVR19IXworCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9k
ZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4xOWRkZjVjNDM5MjU4ODNjNzk0YzcxNGU3OTk4NmUyM2FiYjUxNDdhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNwcApAQCAtMCwwICsxLDk3IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MTgpCisKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIgorCitURGVw
ZW5kZW5jeUdyYXBoOjpURGVwZW5kZW5jeUdyYXBoKFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlKQor
eworICAgIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpidWlsZChpbnRlcm1Ob2RlLCB0aGlzKTsK
K30KKworVERlcGVuZGVuY3lHcmFwaDo6flREZXBlbmRlbmN5R3JhcGgoKQoreworICAgIGZvciAo
VEdyYXBoTm9kZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1BbGxOb2Rlcy5iZWdpbigp
OyBpdGVyICE9IG1BbGxOb2Rlcy5lbmQoKTsgKytpdGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBo
Tm9kZSogbm9kZSA9ICppdGVyOworICAgICAgICBkZWxldGUgbm9kZTsKKyAgICB9Cit9CisKK1RH
cmFwaEFyZ3VtZW50KiBURGVwZW5kZW5jeUdyYXBoOjpjcmVhdGVBcmd1bWVudChUSW50ZXJtQWdn
cmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50TnVtYmVyKQoreworICAgIFRHcmFwaEFy
Z3VtZW50KiBhcmd1bWVudCA9IG5ldyBUR3JhcGhBcmd1bWVudChpbnRlcm1GdW5jdGlvbkNhbGws
IGFyZ3VtZW50TnVtYmVyKTsKKyAgICBtQWxsTm9kZXMucHVzaF9iYWNrKGFyZ3VtZW50KTsKKyAg
ICByZXR1cm4gYXJndW1lbnQ7Cit9CisKK1RHcmFwaEZ1bmN0aW9uQ2FsbCogVERlcGVuZGVuY3lH
cmFwaDo6Y3JlYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9u
Q2FsbCkKK3sKKyAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCA9IG5ldyBUR3Jh
cGhGdW5jdGlvbkNhbGwoaW50ZXJtRnVuY3Rpb25DYWxsKTsKKyAgICBtQWxsTm9kZXMucHVzaF9i
YWNrKGZ1bmN0aW9uQ2FsbCk7CisgICAgaWYgKGZ1bmN0aW9uQ2FsbC0+Z2V0SW50ZXJtRnVuY3Rp
b25DYWxsKCktPmlzVXNlckRlZmluZWQoKSkKKyAgICAgICAgbVVzZXJEZWZpbmVkRnVuY3Rpb25D
YWxscy5wdXNoX2JhY2soZnVuY3Rpb25DYWxsKTsKKyAgICByZXR1cm4gZnVuY3Rpb25DYWxsOwor
fQorCitUR3JhcGhTeW1ib2wqIFREZXBlbmRlbmN5R3JhcGg6OmdldE9yQ3JlYXRlU3ltYm9sKFRJ
bnRlcm1TeW1ib2wqIGludGVybVN5bWJvbCkKK3sKKyAgICBUU3ltYm9sSWRNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBtU3ltYm9sSWRNYXAuZmluZChpbnRlcm1TeW1ib2wtPmdldElkKCkpOwor
CisgICAgVEdyYXBoU3ltYm9sKiBzeW1ib2wgPSBOVUxMOworCisgICAgaWYgKGl0ZXIgIT0gbVN5
bWJvbElkTWFwLmVuZCgpKSB7CisgICAgICAgIFRTeW1ib2xJZFBhaXIgcGFpciA9ICppdGVyOwor
ICAgICAgICBzeW1ib2wgPSBwYWlyLnNlY29uZDsKKyAgICB9IGVsc2UgeworICAgICAgICBzeW1i
b2wgPSBuZXcgVEdyYXBoU3ltYm9sKGludGVybVN5bWJvbCk7CisgICAgICAgIG1BbGxOb2Rlcy5w
dXNoX2JhY2soc3ltYm9sKTsKKworICAgICAgICBUU3ltYm9sSWRQYWlyIHBhaXIoaW50ZXJtU3lt
Ym9sLT5nZXRJZCgpLCBzeW1ib2wpOworICAgICAgICBtU3ltYm9sSWRNYXAuaW5zZXJ0KHBhaXIp
OworCisgICAgICAgIC8vIFdlIHNhdmUgYWxsIHNhbXBsZXIgc3ltYm9scyBpbiBhIGNvbGxlY3Rp
b24sIHNvIHdlIGNhbiBzdGFydCBncmFwaCB0cmF2ZXJzYWxzIGZyb20gdGhlbSBxdWlja2x5Lgor
ICAgICAgICBpZiAoSXNTYW1wbGVyKGludGVybVN5bWJvbC0+Z2V0QmFzaWNUeXBlKCkpKQorICAg
ICAgICAgICAgbVNhbXBsZXJTeW1ib2xzLnB1c2hfYmFjayhzeW1ib2wpOworICAgIH0KKworICAg
IHJldHVybiBzeW1ib2w7Cit9CisKK1RHcmFwaFNlbGVjdGlvbiogVERlcGVuZGVuY3lHcmFwaDo6
Y3JlYXRlU2VsZWN0aW9uKFRJbnRlcm1TZWxlY3Rpb24qIGludGVybVNlbGVjdGlvbikKK3sKKyAg
ICBUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbiA9IG5ldyBUR3JhcGhTZWxlY3Rpb24oaW50ZXJt
U2VsZWN0aW9uKTsKKyAgICBtQWxsTm9kZXMucHVzaF9iYWNrKHNlbGVjdGlvbik7CisgICAgcmV0
dXJuIHNlbGVjdGlvbjsKK30KKworVEdyYXBoTG9vcCogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRl
TG9vcChUSW50ZXJtTG9vcCogaW50ZXJtTG9vcCkKK3sKKyAgICBUR3JhcGhMb29wKiBsb29wID0g
bmV3IFRHcmFwaExvb3AoaW50ZXJtTG9vcCk7CisgICAgbUFsbE5vZGVzLnB1c2hfYmFjayhsb29w
KTsKKyAgICByZXR1cm4gbG9vcDsKK30KKworVEdyYXBoTG9naWNhbE9wKiBURGVwZW5kZW5jeUdy
YXBoOjpjcmVhdGVMb2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJtTG9naWNhbE9wKQorewor
ICAgIFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wID0gbmV3IFRHcmFwaExvZ2ljYWxPcChpbnRl
cm1Mb2dpY2FsT3ApOworICAgIG1BbGxOb2Rlcy5wdXNoX2JhY2sobG9naWNhbE9wKTsKKyAgICBy
ZXR1cm4gbG9naWNhbE9wOworfQorCitjb25zdCBjaGFyKiBUR3JhcGhMb2dpY2FsT3A6OmdldE9w
U3RyaW5nKCkgY29uc3QKK3sKKyAgICBjb25zdCBjaGFyKiBvcFN0cmluZyA9IE5VTEw7CisgICAg
c3dpdGNoIChnZXRJbnRlcm1Mb2dpY2FsT3AoKS0+Z2V0T3AoKSkgeworICAgICAgICBjYXNlIEVP
cExvZ2ljYWxBbmQ6IG9wU3RyaW5nID0gImFuZCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcExv
Z2ljYWxPcjogb3BTdHJpbmcgPSAib3IiOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogb3BTdHJp
bmcgPSAidW5rbm93biI7IGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gb3BTdHJpbmc7Cit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjVlYTFjYmI4MzdkY2I0NGRmZjFiMTIyNTFmZTg4ZmMwZjNkOGEwNTYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9k
ZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaApAQCAtMCwwICsxLDIxMiBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpZm5kZWYgQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9ICisjZGVmaW5l
IENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfSAorCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKworI2luY2x1ZGUgPHNldD4KKyNpbmNsdWRl
IDxzdGFjaz4KKworY2xhc3MgVEdyYXBoTm9kZTsKK2NsYXNzIFRHcmFwaFBhcmVudE5vZGU7Citj
bGFzcyBUR3JhcGhBcmd1bWVudDsKK2NsYXNzIFRHcmFwaEZ1bmN0aW9uQ2FsbDsKK2NsYXNzIFRH
cmFwaFN5bWJvbDsKK2NsYXNzIFRHcmFwaFNlbGVjdGlvbjsKK2NsYXNzIFRHcmFwaExvb3A7Citj
bGFzcyBUR3JhcGhMb2dpY2FsT3A7CitjbGFzcyBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyOwor
Y2xhc3MgVERlcGVuZGVuY3lHcmFwaE91dHB1dDsKKwordHlwZWRlZiBzdGQ6OnNldDxUR3JhcGhO
b2RlKj4gVEdyYXBoTm9kZVNldDsKK3R5cGVkZWYgc3RkOjp2ZWN0b3I8VEdyYXBoTm9kZSo+IFRH
cmFwaE5vZGVWZWN0b3I7Cit0eXBlZGVmIHN0ZDo6dmVjdG9yPFRHcmFwaFN5bWJvbCo+IFRHcmFw
aFN5bWJvbFZlY3RvcjsKK3R5cGVkZWYgc3RkOjp2ZWN0b3I8VEdyYXBoRnVuY3Rpb25DYWxsKj4g
VEZ1bmN0aW9uQ2FsbFZlY3RvcjsKKworLy8KKy8vIEJhc2UgY2xhc3MgZm9yIGFsbCBkZXBlbmRl
bmN5IGdyYXBoIG5vZGVzLgorLy8KK2NsYXNzIFRHcmFwaE5vZGUgeworcHVibGljOgorICAgIFRH
cmFwaE5vZGUoVEludGVybU5vZGUqIG5vZGUpIDogaW50ZXJtTm9kZShub2RlKSB7fQorICAgIHZp
cnR1YWwgflRHcmFwaE5vZGUoKSB7fQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5k
ZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Citwcm90ZWN0ZWQ6CisgICAgVElu
dGVybU5vZGUqIGludGVybU5vZGU7Cit9OworCisvLworLy8gQmFzZSBjbGFzcyBmb3IgZGVwZW5k
ZW5jeSBncmFwaCBub2RlcyB0aGF0IG1heSBoYXZlIGNoaWxkcmVuLgorLy8KK2NsYXNzIFRHcmFw
aFBhcmVudE5vZGUgOiBwdWJsaWMgVEdyYXBoTm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoUGFy
ZW50Tm9kZShUSW50ZXJtTm9kZSogbm9kZSkgOiBUR3JhcGhOb2RlKG5vZGUpIHt9CisgICAgdmly
dHVhbCB+VEdyYXBoUGFyZW50Tm9kZSgpIHt9CisgICAgdm9pZCBhZGREZXBlbmRlbnROb2RlKFRH
cmFwaE5vZGUqIG5vZGUpIHsgaWYgKG5vZGUgIT0gdGhpcykgbURlcGVuZGVudE5vZGVzLmluc2Vy
dChub2RlKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJh
dmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Citwcml2YXRlOgorICAgIFRHcmFwaE5vZGVTZXQgbURl
cGVuZGVudE5vZGVzOworfTsKKworLy8KKy8vIEhhbmRsZSBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50
cy4KKy8vCitjbGFzcyBUR3JhcGhBcmd1bWVudCA6IHB1YmxpYyBUR3JhcGhQYXJlbnROb2RlIHsK
K3B1YmxpYzoKKyAgICBUR3JhcGhBcmd1bWVudChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5j
dGlvbkNhbGwsIGludCBhcmd1bWVudE51bWJlcikKKyAgICAgICAgOiBUR3JhcGhQYXJlbnROb2Rl
KGludGVybUZ1bmN0aW9uQ2FsbCkKKyAgICAgICAgLCBtQXJndW1lbnROdW1iZXIoYXJndW1lbnRO
dW1iZXIpIHt9CisgICAgdmlydHVhbCB+VEdyYXBoQXJndW1lbnQoKSB7fQorICAgIGNvbnN0IFRJ
bnRlcm1BZ2dyZWdhdGUqIGdldEludGVybUZ1bmN0aW9uQ2FsbCgpIGNvbnN0IHsgcmV0dXJuIGlu
dGVybU5vZGUtPmdldEFzQWdncmVnYXRlKCk7IH0KKyAgICBpbnQgZ2V0QXJndW1lbnROdW1iZXIo
KSBjb25zdCB7IHJldHVybiBtQXJndW1lbnROdW1iZXI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJh
dmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOworcHJpdmF0
ZToKKyAgICBpbnQgbUFyZ3VtZW50TnVtYmVyOworfTsKKworLy8KKy8vIEhhbmRsZSBmdW5jdGlv
biBjYWxscy4KKy8vCitjbGFzcyBUR3JhcGhGdW5jdGlvbkNhbGwgOiBwdWJsaWMgVEdyYXBoUGFy
ZW50Tm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdh
dGUqIGludGVybUZ1bmN0aW9uQ2FsbCkKKyAgICAgICAgOiBUR3JhcGhQYXJlbnROb2RlKGludGVy
bUZ1bmN0aW9uQ2FsbCkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhGdW5jdGlvbkNhbGwoKSB7fQor
ICAgIGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUqIGdldEludGVybUZ1bmN0aW9uQ2FsbCgpIGNvbnN0
IHsgcmV0dXJuIGludGVybU5vZGUtPmdldEFzQWdncmVnYXRlKCk7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOwor
fTsKKworLy8KKy8vIEhhbmRsZSBzeW1ib2xzLgorLy8KK2NsYXNzIFRHcmFwaFN5bWJvbCA6IHB1
YmxpYyBUR3JhcGhQYXJlbnROb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhTeW1ib2woVEludGVy
bVN5bWJvbCogaW50ZXJtU3ltYm9sKSA6IFRHcmFwaFBhcmVudE5vZGUoaW50ZXJtU3ltYm9sKSB7
fQorICAgIHZpcnR1YWwgflRHcmFwaFN5bWJvbCgpIHt9CisgICAgY29uc3QgVEludGVybVN5bWJv
bCogZ2V0SW50ZXJtU3ltYm9sKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNTeW1i
b2xOb2RlKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRy
YXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOworfTsKKworLy8KKy8vIEhhbmRsZSBpZiBzdGF0ZW1l
bnRzIGFuZCB0ZXJuYXJ5IG9wZXJhdG9ycy4KKy8vCitjbGFzcyBUR3JhcGhTZWxlY3Rpb24gOiBw
dWJsaWMgVEdyYXBoTm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoU2VsZWN0aW9uKFRJbnRlcm1T
ZWxlY3Rpb24qIGludGVybVNlbGVjdGlvbikgOiBUR3JhcGhOb2RlKGludGVybVNlbGVjdGlvbikg
e30KKyAgICB2aXJ0dWFsIH5UR3JhcGhTZWxlY3Rpb24oKSB7fQorICAgIGNvbnN0IFRJbnRlcm1T
ZWxlY3Rpb24qIGdldEludGVybVNlbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGludGVybU5vZGUt
PmdldEFzU2VsZWN0aW9uTm9kZSgpOyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBl
bmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK307CisKKy8vCisvLyBIYW5k
bGUgZm9yLCBkby13aGlsZSwgYW5kIHdoaWxlIGxvb3BzLgorLy8KK2NsYXNzIFRHcmFwaExvb3Ag
OiBwdWJsaWMgVEdyYXBoTm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoTG9vcChUSW50ZXJtTG9v
cCogaW50ZXJtTG9vcCkgOiBUR3JhcGhOb2RlKGludGVybUxvb3ApIHt9CisgICAgdmlydHVhbCB+
VEdyYXBoTG9vcCgpIHt9CisgICAgY29uc3QgVEludGVybUxvb3AqIGdldEludGVybUxvb3AoKSBj
b25zdCB7IHJldHVybiBpbnRlcm1Ob2RlLT5nZXRBc0xvb3BOb2RlKCk7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIp
OworfTsKKworLy8KKy8vIEhhbmRsZSBsb2dpY2FsIGFuZCwgb3IuCisvLworY2xhc3MgVEdyYXBo
TG9naWNhbE9wIDogcHVibGljIFRHcmFwaE5vZGUgeworcHVibGljOgorICAgIFRHcmFwaExvZ2lj
YWxPcChUSW50ZXJtQmluYXJ5KiBpbnRlcm1Mb2dpY2FsT3ApIDogVEdyYXBoTm9kZShpbnRlcm1M
b2dpY2FsT3ApIHt9CisgICAgdmlydHVhbCB+VEdyYXBoTG9naWNhbE9wKCkge30KKyAgICBjb25z
dCBUSW50ZXJtQmluYXJ5KiBnZXRJbnRlcm1Mb2dpY2FsT3AoKSBjb25zdCB7IHJldHVybiBpbnRl
cm1Ob2RlLT5nZXRBc0JpbmFyeU5vZGUoKTsgfQorICAgIGNvbnN0IGNoYXIqIGdldE9wU3RyaW5n
KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2
ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK307CisKKy8vCisvLyBBIGRlcGVuZGVuY3kgZ3JhcGgg
b2Ygc3ltYm9scywgZnVuY3Rpb24gY2FsbHMsIGNvbmRpdGlvbnMgZXRjLgorLy8KKy8vIFRoaXMg
Y2xhc3MgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIHRvIHRoZSBlbnRyeSBwb2ludHMgb2YgdGhlIGRl
cGVuZGVuY3kgZ3JhcGguCisvLworLy8gRGVwZW5kZW5jeSBncmFwaCBub2RlcyBzaG91bGQgYmUg
Y3JlYXRlZCBieSB1c2luZyBvbmUgb2YgdGhlIHByb3ZpZGVkICJjcmVhdGUuLi4iIG1ldGhvZHMu
CisvLyBUaGlzIGNsYXNzIChhbmQgbm9ib2R5IGVsc2UpIG1hbmFnZXMgdGhlIG1lbW9yeSBvZiB0
aGUgY3JlYXRlZCBub2Rlcy4KKy8vIE5vZGVzIG1heSBub3QgYmUgcmVtb3ZlZCBhZnRlciBiZWlu
ZyBhZGRlZCwgc28gYWxsIGNyZWF0ZWQgbm9kZXMgd2lsbCBleGlzdCB3aGlsZSB0aGUKKy8vIFRE
ZXBlbmRlbmN5R3JhcGggaW5zdGFuY2UgZXhpc3RzLgorLy8KK2NsYXNzIFREZXBlbmRlbmN5R3Jh
cGggeworcHVibGljOgorICAgIFREZXBlbmRlbmN5R3JhcGgoVEludGVybU5vZGUqIGludGVybU5v
ZGUpOworICAgIH5URGVwZW5kZW5jeUdyYXBoKCk7CisgICAgVEdyYXBoTm9kZVZlY3Rvcjo6Y29u
c3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtQWxsTm9kZXMuYmVnaW4oKTsgfQor
ICAgIFRHcmFwaE5vZGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJu
IG1BbGxOb2Rlcy5lbmQoKTsgfQorCisgICAgVEdyYXBoU3ltYm9sVmVjdG9yOjpjb25zdF9pdGVy
YXRvciBiZWdpblNhbXBsZXJTeW1ib2xzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
U2FtcGxlclN5bWJvbHMuYmVnaW4oKTsKKyAgICB9CisKKyAgICBUR3JhcGhTeW1ib2xWZWN0b3I6
OmNvbnN0X2l0ZXJhdG9yIGVuZFNhbXBsZXJTeW1ib2xzKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtU2FtcGxlclN5bWJvbHMuZW5kKCk7CisgICAgfQorCisgICAgVEZ1bmN0aW9uQ2Fs
bFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgYmVnaW5Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMuYmVn
aW4oKTsKKyAgICB9CisKKyAgICBURnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9pdGVyYXRvciBl
bmRVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMuZW5kKCk7CisgICAgfQorCisgICAgVEdyYXBoQXJn
dW1lbnQqIGNyZWF0ZUFyZ3VtZW50KFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2Fs
bCwgaW50IGFyZ3VtZW50TnVtYmVyKTsKKyAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIGNyZWF0ZUZ1
bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpOworICAgIFRH
cmFwaFN5bWJvbCogZ2V0T3JDcmVhdGVTeW1ib2woVEludGVybVN5bWJvbCogaW50ZXJtU3ltYm9s
KTsKKyAgICBUR3JhcGhTZWxlY3Rpb24qIGNyZWF0ZVNlbGVjdGlvbihUSW50ZXJtU2VsZWN0aW9u
KiBpbnRlcm1TZWxlY3Rpb24pOworICAgIFRHcmFwaExvb3AqIGNyZWF0ZUxvb3AoVEludGVybUxv
b3AqIGludGVybUxvb3ApOworICAgIFRHcmFwaExvZ2ljYWxPcCogY3JlYXRlTG9naWNhbE9wKFRJ
bnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxPcCk7Citwcml2YXRlOgorICAgIHR5cGVkZWYgVE1h
cDxpbnQsIFRHcmFwaFN5bWJvbCo+IFRTeW1ib2xJZE1hcDsKKyAgICB0eXBlZGVmIHN0ZDo6cGFp
cjxpbnQsIFRHcmFwaFN5bWJvbCo+IFRTeW1ib2xJZFBhaXI7CisKKyAgICBUR3JhcGhOb2RlVmVj
dG9yIG1BbGxOb2RlczsKKyAgICBUR3JhcGhTeW1ib2xWZWN0b3IgbVNhbXBsZXJTeW1ib2xzOwor
ICAgIFRGdW5jdGlvbkNhbGxWZWN0b3IgbVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxsczsKKyAgICBU
U3ltYm9sSWRNYXAgbVN5bWJvbElkTWFwOworfTsKKworLy8KKy8vIEZvciB0cmF2ZXJzaW5nIHRo
ZSBkZXBlbmRlbmN5IGdyYXBoLiBVc2VycyBzaG91bGQgZGVyaXZlIGZyb20gdGhpcywKKy8vIHB1
dCB0aGVpciB0cmF2ZXJzYWwgc3BlY2lmaWMgZGF0YSBpbiBpdCwgYW5kIHRoZW4gcGFzcyBpdCB0
byBhCisvLyB0cmF2ZXJzZSBtZXRob2QuCisvLworLy8gV2hlbiB1c2luZyB0aGlzLCBqdXN0IGZp
bGwgaW4gdGhlIG1ldGhvZHMgZm9yIG5vZGVzIHlvdSB3YW50IHZpc2l0ZWQuCisvLworY2xhc3Mg
VERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgVERlcGVuZGVuY3lHcmFw
aFRyYXZlcnNlcigpIDogbURlcHRoKDApIHt9CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1i
b2woVEdyYXBoU3ltYm9sKiBzeW1ib2wpIHt9OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFyZ3Vt
ZW50KFRHcmFwaEFyZ3VtZW50KiBzZWxlY3Rpb24pIHt9OworICAgIHZpcnR1YWwgdm9pZCB2aXNp
dEZ1bmN0aW9uQ2FsbChUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCkge307CisgICAg
dmlydHVhbCB2b2lkIHZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKSB7
fTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3ApIHt9OworICAg
IHZpcnR1YWwgdm9pZCB2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCkg
e307CisKKyAgICBpbnQgZ2V0RGVwdGgoKSBjb25zdCB7IHJldHVybiBtRGVwdGg7IH0KKyAgICB2
b2lkIGluY3JlbWVudERlcHRoKCkgeyArK21EZXB0aDsgfQorICAgIHZvaWQgZGVjcmVtZW50RGVw
dGgoKSB7IC0tbURlcHRoOyB9CisKKyAgICB2b2lkIGNsZWFyVmlzaXRlZCgpIHsgbVZpc2l0ZWQu
Y2xlYXIoKTsgfQorICAgIHZvaWQgbWFya1Zpc2l0ZWQoVEdyYXBoTm9kZSogbm9kZSkgeyBtVmlz
aXRlZC5pbnNlcnQobm9kZSk7IH0KKyAgICBib29sIGlzVmlzaXRlZChUR3JhcGhOb2RlKiBub2Rl
KSBjb25zdCB7IHJldHVybiBtVmlzaXRlZC5maW5kKG5vZGUpICE9IG1WaXNpdGVkLmVuZCgpOyB9
Citwcml2YXRlOgorICAgIGludCBtRGVwdGg7CisgICAgVEdyYXBoTm9kZVNldCBtVmlzaXRlZDsK
K307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9E
ZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNWYyY2JhNWZjMDE4NzM0ZDE4
NTdmZDhkNTk5ZTcwYTVmMjY3ODU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBo
QnVpbGRlci5jcHAKQEAgLTAsMCArMSwyMjcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmgiCisK
K3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OmJ1aWxkKFRJbnRlcm1Ob2RlKiBub2RlLCBU
RGVwZW5kZW5jeUdyYXBoKiBncmFwaCkKK3sKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlciBi
dWlsZGVyKGdyYXBoKTsKKyAgICBidWlsZGVyLmJ1aWxkKG5vZGUpOworfQorCitib29sIFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFn
Z3JlZ2F0ZSogaW50ZXJtQWdncmVnYXRlKQoreworICAgIHN3aXRjaCAoaW50ZXJtQWdncmVnYXRl
LT5nZXRPcCgpKSB7CisgICAgICAgIGNhc2UgRU9wRnVuY3Rpb246IHZpc2l0RnVuY3Rpb25EZWZp
bml0aW9uKGludGVybUFnZ3JlZ2F0ZSk7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEZ1bmN0aW9u
Q2FsbDogdmlzaXRGdW5jdGlvbkNhbGwoaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6IHZpc2l0QWdncmVnYXRlQ2hpbGRyZW4oaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7
CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhC
dWlsZGVyOjp2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbihUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1B
Z2dyZWdhdGUpCit7CisgICAgLy8gQ3VycmVudGx5LCB3ZSBkbyBub3Qgc3VwcG9ydCB1c2VyIGRl
ZmluZWQgZnVuY3Rpb25zLgorICAgIGlmIChpbnRlcm1BZ2dyZWdhdGUtPmdldE5hbWUoKSAhPSAi
bWFpbigiKQorICAgICAgICByZXR1cm47CisKKyAgICB2aXNpdEFnZ3JlZ2F0ZUNoaWxkcmVuKGlu
dGVybUFnZ3JlZ2F0ZSk7Cit9CisKKy8vIFRha2VzIGFuIGV4cHJlc3Npb24gbGlrZSAiZih4KSIg
YW5kIGNyZWF0ZXMgYSBkZXBlbmRlbmN5IGdyYXBoIGxpa2UKKy8vICJ4IC0+IGFyZ3VtZW50IDAg
LT4gZnVuY3Rpb24gY2FsbCIuCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEZ1
bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpCit7CisgICAg
VEdyYXBoRnVuY3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwgPSBtR3JhcGgtPmNyZWF0ZUZ1bmN0aW9u
Q2FsbChpbnRlcm1GdW5jdGlvbkNhbGwpOworCisgICAgLy8gUnVuIHRocm91Z2ggdGhlIGZ1bmN0
aW9uIGNhbGwgYXJndW1lbnRzLgorICAgIGludCBhcmd1bWVudE51bWJlciA9IDA7CisgICAgVElu
dGVybVNlcXVlbmNlJiBpbnRlcm1Bcmd1bWVudHMgPSBpbnRlcm1GdW5jdGlvbkNhbGwtPmdldFNl
cXVlbmNlKCk7CisgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBpbnRlcm1Bcmd1bWVudHMuYmVnaW4oKTsKKyAgICAgICAgIGl0ZXIgIT0gaW50ZXJtQXJndW1l
bnRzLmVuZCgpOworICAgICAgICAgKytpdGVyLCArK2FyZ3VtZW50TnVtYmVyKQorICAgIHsKKyAg
ICAgICAgVE5vZGVTZXRNYWludGFpbmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMpOworCisgICAg
ICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Bcmd1bWVudCA9ICppdGVyOworICAgICAgICBpbnRlcm1B
cmd1bWVudC0+dHJhdmVyc2UodGhpcyk7CisKKyAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBh
cmd1bWVudE5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKSB7CisgICAgICAgICAgICBUR3Jh
cGhBcmd1bWVudCogYXJndW1lbnQgPSBtR3JhcGgtPmNyZWF0ZUFyZ3VtZW50KGludGVybUZ1bmN0
aW9uQ2FsbCwgYXJndW1lbnROdW1iZXIpOworICAgICAgICAgICAgY29ubmVjdE11bHRpcGxlTm9k
ZXNUb1NpbmdsZU5vZGUoYXJndW1lbnROb2RlcywgYXJndW1lbnQpOworICAgICAgICAgICAgYXJn
dW1lbnQtPmFkZERlcGVuZGVudE5vZGUoZnVuY3Rpb25DYWxsKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIFB1c2ggdGhlIGxlZnRtb3N0IHN5bWJvbCBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwg
aW50byB0aGUgY3VycmVudCBzZXQgb2YgZGVwZW5kZW50IHN5bWJvbHMgdG8KKyAgICAvLyByZXBy
ZXNlbnQgdGhlIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwuCisgICAgLy8gVGh1cywgYW4g
ZXhwcmVzc2lvbiBsaWtlICJ5ID0gZih4KSIgd2lsbCB5aWVsZCBhIGRlcGVuZGVuY3kgZ3JhcGgg
bGlrZQorICAgIC8vICJ4IC0+IGFyZ3VtZW50IDAgLT4gZnVuY3Rpb24gY2FsbCAtPiB5Ii4KKyAg
ICAvLyBUaGlzIGxpbmUgZXNzZW50aWFsbHkgcGFzc2VzIHRoZSBmdW5jdGlvbiBjYWxsIG5vZGUg
YmFjayB1cCB0byBhbiBlYXJsaWVyIHZpc2l0QXNzaWdubWVudAorICAgIC8vIGNhbGwsIHdoaWNo
IHdpbGwgY3JlYXRlIHRoZSBjb25uZWN0aW9uICJmdW5jdGlvbiBjYWxsIC0+IHkiLgorICAgIG1O
b2RlU2V0cy5pbnNlcnRJbnRvVG9wU2V0KGZ1bmN0aW9uQ2FsbCk7Cit9CisKK3ZvaWQgVERlcGVu
ZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdncmVnYXRlQ2hpbGRyZW4oVEludGVybUFnZ3JlZ2F0
ZSogaW50ZXJtQWdncmVnYXRlKQoreworICAgIFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBp
bnRlcm1BZ2dyZWdhdGUtPmdldFNlcXVlbmNlKCk7CisgICAgZm9yKFRJbnRlcm1TZXF1ZW5jZTo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IHNlcXVlbmNlLmJlZ2luKCk7IGl0ZXIgIT0gc2VxdWVuY2Uu
ZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1DaGlsZCA9
ICppdGVyOworICAgICAgICBpbnRlcm1DaGlsZC0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorfQor
Cit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9s
KiBpbnRlcm1TeW1ib2wpCit7CisgICAgLy8gUHVzaCB0aGlzIHN5bWJvbCBpbnRvIHRoZSBzZXQg
b2YgZGVwZW5kZW50IHN5bWJvbHMgZm9yIHRoZSBjdXJyZW50IGFzc2lnbm1lbnQgb3IgY29uZGl0
aW9uCisgICAgLy8gdGhhdCB3ZSBhcmUgdHJhdmVyc2luZy4KKyAgICBUR3JhcGhTeW1ib2wqIHN5
bWJvbCA9IG1HcmFwaC0+Z2V0T3JDcmVhdGVTeW1ib2woaW50ZXJtU3ltYm9sKTsKKyAgICBtTm9k
ZVNldHMuaW5zZXJ0SW50b1RvcFNldChzeW1ib2wpOworCisgICAgLy8gSWYgdGhpcyBzeW1ib2wg
aXMgdGhlIGN1cnJlbnQgbGVmdG1vc3Qgc3ltYm9sIHVuZGVyIGFuIGFzc2lnbm1lbnQsIHJlcGxh
Y2UgdGhlIHByZXZpb3VzCisgICAgLy8gbGVmdG1vc3Qgc3ltYm9sIHdpdGggdGhpcyBzeW1ib2wu
CisgICAgaWYgKCFtTGVmdG1vc3RTeW1ib2xzLmVtcHR5KCkgJiYgbUxlZnRtb3N0U3ltYm9scy50
b3AoKSAhPSAmbVJpZ2h0U3VidHJlZSkgeworICAgICAgICBtTGVmdG1vc3RTeW1ib2xzLnBvcCgp
OworICAgICAgICBtTGVmdG1vc3RTeW1ib2xzLnB1c2goc3ltYm9sKTsKKyAgICB9Cit9CisKK2Jv
b2wgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50
ZXJtQmluYXJ5KiBpbnRlcm1CaW5hcnkpCit7CisgICAgVE9wZXJhdG9yIG9wID0gaW50ZXJtQmlu
YXJ5LT5nZXRPcCgpOworICAgIGlmIChvcCA9PSBFT3BJbml0aWFsaXplIHx8IGludGVybUJpbmFy
eS0+aXNBc3NpZ25tZW50KCkpCisgICAgICAgIHZpc2l0QXNzaWdubWVudChpbnRlcm1CaW5hcnkp
OworICAgIGVsc2UgaWYgKG9wID09IEVPcExvZ2ljYWxBbmQgfHwgb3AgPT0gRU9wTG9naWNhbE9y
KQorICAgICAgICB2aXNpdExvZ2ljYWxPcChpbnRlcm1CaW5hcnkpOworICAgIGVsc2UKKyAgICAg
ICAgdmlzaXRCaW5hcnlDaGlsZHJlbihpbnRlcm1CaW5hcnkpOworCisgICAgcmV0dXJuIGZhbHNl
OworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEFzc2lnbm1lbnQoVElu
dGVybUJpbmFyeSogaW50ZXJtQXNzaWdubWVudCkKK3sKKyAgICBUSW50ZXJtVHlwZWQqIGludGVy
bUxlZnQgPSBpbnRlcm1Bc3NpZ25tZW50LT5nZXRMZWZ0KCk7CisgICAgaWYgKCFpbnRlcm1MZWZ0
KQorICAgICAgICByZXR1cm47CisKKyAgICBUR3JhcGhTeW1ib2wqIGxlZnRtb3N0U3ltYm9sID0g
TlVMTDsKKworICAgIHsKKyAgICAgICAgVE5vZGVTZXRNYWludGFpbmVyIG5vZGVTZXRNYWludGFp
bmVyKHRoaXMpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50
YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIG1MZWZ0U3VidHJlZSk7CisgICAg
ICAgICAgICBpbnRlcm1MZWZ0LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIGxlZnRtb3N0
U3ltYm9sID0gbUxlZnRtb3N0U3ltYm9scy50b3AoKTsKKworICAgICAgICAgICAgLy8gQWZ0ZXIg
dHJhdmVyc2luZyB0aGUgbGVmdCBzdWJ0cmVlIG9mIHRoaXMgYXNzaWdubWVudCwgd2Ugc2hvdWxk
IGhhdmUgZm91bmQgYSByZWFsCisgICAgICAgICAgICAvLyBsZWZ0bW9zdCBzeW1ib2wsIGFuZCB0
aGUgbGVmdG1vc3Qgc3ltYm9sIHNob3VsZCBub3QgYmUgYSBwbGFjZWhvbGRlci4KKyAgICAgICAg
ICAgIEFTU0VSVChsZWZ0bW9zdFN5bWJvbCAhPSAmbUxlZnRTdWJ0cmVlKTsKKyAgICAgICAgICAg
IEFTU0VSVChsZWZ0bW9zdFN5bWJvbCAhPSAmbVJpZ2h0U3VidHJlZSk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1SaWdodCA9IGludGVybUFzc2lnbm1lbnQt
PmdldFJpZ2h0KCkpIHsKKyAgICAgICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIgbGVm
dG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIG1SaWdodFN1YnRyZWUpOworICAgICAgICAgICAg
aW50ZXJtUmlnaHQtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFRQ
YXJlbnROb2RlU2V0KiBhc3NpZ25tZW50Tm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0KCkpCisg
ICAgICAgICAgICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShhc3NpZ25tZW50Tm9k
ZXMsIGxlZnRtb3N0U3ltYm9sKTsKKyAgICB9CisKKyAgICAvLyBQdXNoIHRoZSBsZWZ0bW9zdCBz
eW1ib2wgb2YgdGhpcyBhc3NpZ25tZW50IGludG8gdGhlIGN1cnJlbnQgc2V0IG9mIGRlcGVuZGVu
dCBzeW1ib2xzIHRvCisgICAgLy8gcmVwcmVzZW50IHRoZSByZXN1bHQgb2YgdGhpcyBhc3NpZ25t
ZW50LgorICAgIC8vIEFuIGV4cHJlc3Npb24gbGlrZSAiYSA9IChiID0gYykiIHdpbGwgeWllbGQg
YSBkZXBlbmRlbmN5IGdyYXBoIGxpa2UgImMgLT4gYiAtPiBhIi4KKyAgICAvLyBUaGlzIGxpbmUg
ZXNzZW50aWFsbHkgcGFzc2VzIHRoZSBsZWZ0bW9zdCBzeW1ib2wgb2YgdGhlIG5lc3RlZCBhc3Np
Z25tZW50ICgiYiIgaW4gdGhpcworICAgIC8vIGV4YW1wbGUpIGJhY2sgdXAgdG8gdGhlIGVhcmxp
ZXIgdmlzaXRBc3NpZ25tZW50IGNhbGwgZm9yIHRoZSBvdXRlciBhc3NpZ25tZW50LCB3aGljaCB3
aWxsCisgICAgLy8gY3JlYXRlIHRoZSBjb25uZWN0aW9uICJiIC0+IGEiLgorICAgIG1Ob2RlU2V0
cy5pbnNlcnRJbnRvVG9wU2V0KGxlZnRtb3N0U3ltYm9sKTsKK30KKwordm9pZCBURGVwZW5kZW5j
eUdyYXBoQnVpbGRlcjo6dmlzaXRMb2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJtTG9naWNh
bE9wKQoreworICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybUxlZnQgPSBpbnRlcm1Mb2dpY2Fs
T3AtPmdldExlZnQoKSkgeworICAgICAgICBUTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lciBu
b2RlU2V0TWFpbnRhaW5lcih0aGlzKTsKKworICAgICAgICBpbnRlcm1MZWZ0LT50cmF2ZXJzZSh0
aGlzKTsKKyAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBsZWZ0Tm9kZXMgPSBtTm9kZVNldHMu
Z2V0VG9wU2V0KCkpIHsKKyAgICAgICAgICAgIFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wID0g
bUdyYXBoLT5jcmVhdGVMb2dpY2FsT3AoaW50ZXJtTG9naWNhbE9wKTsKKyAgICAgICAgICAgIGNv
bm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGxlZnROb2RlcywgbG9naWNhbE9wKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybVJpZ2h0ID0gaW50
ZXJtTG9naWNhbE9wLT5nZXRSaWdodCgpKSB7CisgICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50
YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIG1SaWdodFN1YnRyZWUpOworICAg
ICAgICBpbnRlcm1SaWdodC0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorfQorCit2b2lkIFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEJpbmFyeUNoaWxkcmVuKFRJbnRlcm1CaW5hcnkqIGlu
dGVybUJpbmFyeSkKK3sKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1MZWZ0ID0gaW50ZXJt
QmluYXJ5LT5nZXRMZWZ0KCkpCisgICAgICAgIGludGVybUxlZnQtPnRyYXZlcnNlKHRoaXMpOwor
CisgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtUmlnaHQgPSBpbnRlcm1CaW5hcnktPmdldFJp
Z2h0KCkpIHsKKyAgICAgICAgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lciBsZWZ0bW9zdFN5bWJv
bE1haW50YWluZXIodGhpcywgbVJpZ2h0U3VidHJlZSk7CisgICAgICAgIGludGVybVJpZ2h0LT50
cmF2ZXJzZSh0aGlzKTsKKyAgICB9Cit9CisKK2Jvb2wgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6
OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBpbnRlcm1TZWxl
Y3Rpb24pCit7CisgICAgaWYgKFRJbnRlcm1Ob2RlKiBpbnRlcm1Db25kaXRpb24gPSBpbnRlcm1T
ZWxlY3Rpb24tPmdldENvbmRpdGlvbigpKSB7CisgICAgICAgIFROb2RlU2V0TWFpbnRhaW5lciBu
b2RlU2V0TWFpbnRhaW5lcih0aGlzKTsKKworICAgICAgICBpbnRlcm1Db25kaXRpb24tPnRyYXZl
cnNlKHRoaXMpOworICAgICAgICBpZiAoVFBhcmVudE5vZGVTZXQqIGNvbmRpdGlvbk5vZGVzID0g
bU5vZGVTZXRzLmdldFRvcFNldCgpKSB7CisgICAgICAgICAgICBUR3JhcGhTZWxlY3Rpb24qIHNl
bGVjdGlvbiA9IG1HcmFwaC0+Y3JlYXRlU2VsZWN0aW9uKGludGVybVNlbGVjdGlvbik7CisgICAg
ICAgICAgICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShjb25kaXRpb25Ob2Rlcywg
c2VsZWN0aW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJtTm9kZSogaW50
ZXJtVHJ1ZUJsb2NrID0gaW50ZXJtU2VsZWN0aW9uLT5nZXRUcnVlQmxvY2soKSkKKyAgICAgICAg
aW50ZXJtVHJ1ZUJsb2NrLT50cmF2ZXJzZSh0aGlzKTsKKworICAgIGlmIChUSW50ZXJtTm9kZSog
aW50ZXJtRmFsc2VCbG9jayA9IGludGVybVNlbGVjdGlvbi0+Z2V0RmFsc2VCbG9jaygpKQorICAg
ICAgICBpbnRlcm1GYWxzZUJsb2NrLT50cmF2ZXJzZSh0aGlzKTsKKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRMb29wKFZpc2l0IHZp
c2l0LCBUSW50ZXJtTG9vcCogaW50ZXJtTG9vcCkKK3sKKyAgICBpZiAoVEludGVybVR5cGVkKiBp
bnRlcm1Db25kaXRpb24gPSBpbnRlcm1Mb29wLT5nZXRDb25kaXRpb24oKSkgeworICAgICAgICBU
Tm9kZVNldE1haW50YWluZXIgbm9kZVNldE1haW50YWluZXIodGhpcyk7CisKKyAgICAgICAgaW50
ZXJtQ29uZGl0aW9uLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0
KiBjb25kaXRpb25Ob2RlcyA9IG1Ob2RlU2V0cy5nZXRUb3BTZXQoKSkgeworICAgICAgICAgICAg
VEdyYXBoTG9vcCogbG9vcCA9IG1HcmFwaC0+Y3JlYXRlTG9vcChpbnRlcm1Mb29wKTsKKyAgICAg
ICAgICAgIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGNvbmRpdGlvbk5vZGVzLCBs
b29wKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJtTm9kZSogaW50ZXJtQm9k
eSA9IGludGVybUxvb3AtPmdldEJvZHkoKSkKKyAgICAgICAgaW50ZXJtQm9keS0+dHJhdmVyc2Uo
dGhpcyk7CisKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1FeHByZXNzaW9uID0gaW50ZXJt
TG9vcC0+Z2V0RXhwcmVzc2lvbigpKQorICAgICAgICBpbnRlcm1FeHByZXNzaW9uLT50cmF2ZXJz
ZSh0aGlzKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworCit2b2lkIFREZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyOjpjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShUUGFyZW50Tm9kZVNl
dCogbm9kZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUR3JhcGhOb2RlKiBub2RlKSBjb25zdAoreworICAgIGZvciAoVFBh
cmVudE5vZGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBub2Rlcy0+YmVnaW4oKTsgaXRlciAh
PSBub2Rlcy0+ZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaFBhcmVudE5vZGUq
IGN1cnJlbnROb2RlID0gKml0ZXI7CisgICAgICAgIGN1cnJlbnROb2RlLT5hZGREZXBlbmRlbnRO
b2RlKG5vZGUpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2RlcGdy
YXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZTkyOGZiNzdlYjQ4MWQ4
M2NmODVmNWZlNmMzNWZkZWExOGVjNTY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdy
YXBoQnVpbGRlci5oCkBAIC0wLDAgKzEsMTgxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBD
T01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0JVSUxERVJfSAorI2RlZmluZSBDT01Q
SUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0JVSUxERVJfSAorCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCIKKworLy8KKy8vIENy
ZWF0ZXMgYSBkZXBlbmRlbmN5IGdyYXBoIG9mIHN5bWJvbHMsIGZ1bmN0aW9uIGNhbGxzLCBjb25k
aXRpb25zIGV0Yy4gYnkgdHJhdmVyc2luZyBhCisvLyBpbnRlcm1lZGlhdGUgdHJlZS4KKy8vCitj
bGFzcyBURGVwZW5kZW5jeUdyYXBoQnVpbGRlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBidWlsZChUSW50ZXJtTm9kZSogbm9kZSwgVERlcGVu
ZGVuY3lHcmFwaCogZ3JhcGgpOworCisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRl
cm1TeW1ib2wqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1CaW5hcnkqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlz
aXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUo
VmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRM
b29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCopOworCitwcml2YXRlOgorICAgIHR5cGVkZWYg
c3RkOjpzdGFjazxUR3JhcGhTeW1ib2wqPiBUU3ltYm9sU3RhY2s7CisgICAgdHlwZWRlZiBzdGQ6
OnNldDxUR3JhcGhQYXJlbnROb2RlKj4gVFBhcmVudE5vZGVTZXQ7CisKKyAgICAvLworICAgIC8v
IEZvciBjb2xsZWN0aW5nIHRoZSBkZXBlbmRlbnQgbm9kZXMgb2YgYXNzaWdubWVudHMsIGNvbmRp
dGlvbnMsIGV0Yy4KKyAgICAvLyB3aGlsZSB0cmF2ZXJzaW5nIHRoZSBpbnRlcm1lZGlhdGUgdHJl
ZS4KKyAgICAvLworICAgIC8vIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgaXMgc3RhY2sgb2Ygc2V0cy4g
RWFjaCBzZXQgY29udGFpbnMgZGVwZW5kZW5jeSBncmFwaCBwYXJlbnQgbm9kZXMuCisgICAgLy8K
KyAgICBjbGFzcyBUTm9kZVNldFN0YWNrIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFROb2RlU2V0
U3RhY2soKSB7fTsKKyAgICAgICAgflROb2RlU2V0U3RhY2soKSB7IGNsZWFyKCk7IH0KKworICAg
ICAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBhZnRlciBhIHB1c2hTZXQuCisgICAg
ICAgIC8vIFJldHVybnMgTlVMTCBpZiB0aGUgdG9wIHNldCBpcyBlbXB0eS4KKyAgICAgICAgVFBh
cmVudE5vZGVTZXQqIGdldFRvcFNldCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVCghbm9kZVNldHMuZW1wdHkoKSk7CisgICAgICAgICAgICBUUGFyZW50Tm9kZVNldCogdG9w
U2V0ID0gbm9kZVNldHMudG9wKCk7CisgICAgICAgICAgICByZXR1cm4gIXRvcFNldC0+ZW1wdHko
KSA/IHRvcFNldCA6IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHB1c2hTZXQoKSB7
IG5vZGVTZXRzLnB1c2gobmV3IFRQYXJlbnROb2RlU2V0KCkpOyB9CisgICAgICAgIHZvaWQgcG9w
U2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKCFub2RlU2V0cy5lbXB0eSgpKTsK
KyAgICAgICAgICAgIGRlbGV0ZSBub2RlU2V0cy50b3AoKTsKKyAgICAgICAgICAgIG5vZGVTZXRz
LnBvcCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gUG9wcyB0aGUgdG9wIHNldCBhbmQgYWRk
cyBpdHMgY29udGVudHMgdG8gdGhlIG5ldyB0b3Agc2V0LgorICAgICAgICAvLyBUaGlzIHNob3Vs
ZCBvbmx5IGJlIGNhbGxlZCBhZnRlciBhIHB1c2hTZXQuCisgICAgICAgIC8vIElmIHRoZXJlIGlz
IG5vIHNldCBiZWxvdyB0aGUgdG9wIHNldCwgdGhlIHRvcCBzZXQgaXMganVzdCBkZWxldGVkLgor
ICAgICAgICB2b2lkIHBvcFNldEludG9OZXh0KCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUKCFub2RlU2V0cy5lbXB0eSgpKTsKKyAgICAgICAgICAgIFRQYXJlbnROb2RlU2V0KiBvbGRU
b3BTZXQgPSBub2RlU2V0cy50b3AoKTsKKyAgICAgICAgICAgIG5vZGVTZXRzLnBvcCgpOworCisg
ICAgICAgICAgICBpZiAoIW5vZGVTZXRzLmVtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBUUGFy
ZW50Tm9kZVNldCogbmV3VG9wU2V0ID0gbm9kZVNldHMudG9wKCk7CisgICAgICAgICAgICAgICAg
bmV3VG9wU2V0LT5pbnNlcnQob2xkVG9wU2V0LT5iZWdpbigpLCBvbGRUb3BTZXQtPmVuZCgpKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVsZXRlIG9sZFRvcFNldDsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIERvZXMgbm90aGluZyBpZiB0aGVyZSBpcyBubyB0b3Agc2V0LgorICAg
ICAgICAvLyBUaGlzIGNhbiBiZSBjYWxsZWQgd2hlbiB0aGVyZSBpcyBubyB0b3Agc2V0IGlmIHdl
IGFyZSB2aXNpdGluZworICAgICAgICAvLyBzeW1ib2xzIHRoYXQgYXJlIG5vdCB1bmRlciBhbiBh
c3NpZ25tZW50IG9yIGNvbmRpdGlvbi4KKyAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byB0cmFj
ayB0aG9zZSBzeW1ib2xzLgorICAgICAgICB2b2lkIGluc2VydEludG9Ub3BTZXQoVEdyYXBoUGFy
ZW50Tm9kZSogbm9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vZGVTZXRzLmVtcHR5
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBub2RlU2V0cy50b3Ao
KS0+aW5zZXJ0KG5vZGUpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBjbGVhcigpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHdoaWxlICghbm9kZVNldHMuZW1wdHkoKSkKKyAgICAgICAgICAg
ICAgICBwb3BTZXQoKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgdHlwZWRl
ZiBzdGQ6OnN0YWNrPFRQYXJlbnROb2RlU2V0Kj4gVFBhcmVudE5vZGVTZXRTdGFjazsKKworICAg
ICAgICBUUGFyZW50Tm9kZVNldFN0YWNrIG5vZGVTZXRzOworICAgIH07CisKKyAgICAvLworICAg
IC8vIEFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgcHVzaGVzIGEgbmV3IG5vZGUgc2V0IHdoZW4g
aW5zdGFudGlhdGVkLgorICAgIC8vIFdoZW4gdGhlIGluc3RhbmNlIGdvZXMgb3V0IG9mIHNjb3Bl
LCBpdCBhbmQgcG9wcyB0aGUgbm9kZSBzZXQuCisgICAgLy8KKyAgICBjbGFzcyBUTm9kZVNldE1h
aW50YWluZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgVE5vZGVTZXRNYWludGFpbmVyKFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyKiBmYWN0b3J5KQorICAgICAgICAgICAgOiBzZXRzKGZhY3Rvcnkt
Pm1Ob2RlU2V0cykgeyBzZXRzLnB1c2hTZXQoKTsgfQorICAgICAgICB+VE5vZGVTZXRNYWludGFp
bmVyKCkgeyBzZXRzLnBvcFNldCgpOyB9CisgICAgcHJvdGVjdGVkOgorICAgICAgICBUTm9kZVNl
dFN0YWNrJiBzZXRzOworICAgIH07CisKKyAgICAvLworICAgIC8vIEFuIGluc3RhbmNlIG9mIHRo
aXMgY2xhc3MgcHVzaGVzIGEgbmV3IG5vZGUgc2V0IHdoZW4gaW5zdGFudGlhdGVkLgorICAgIC8v
IFdoZW4gdGhlIGluc3RhbmNlIGdvZXMgb3V0IG9mIHNjb3BlLCBpdCBhbmQgcG9wcyB0aGUgdG9w
IG5vZGUgc2V0IGFuZCBhZGRzIGl0cyBjb250ZW50cyB0bworICAgIC8vIHRoZSBuZXcgdG9wIG5v
ZGUgc2V0LgorICAgIC8vCisgICAgY2xhc3MgVE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIg
eworICAgIHB1YmxpYzoKKyAgICAgICAgVE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIoVERl
cGVuZGVuY3lHcmFwaEJ1aWxkZXIqIGZhY3RvcnkpCisgICAgICAgICAgICA6IHNldHMoZmFjdG9y
eS0+bU5vZGVTZXRzKSB7IHNldHMucHVzaFNldCgpOyB9CisgICAgICAgIH5UTm9kZVNldFByb3Bh
Z2F0aW5nTWFpbnRhaW5lcigpIHsgc2V0cy5wb3BTZXRJbnRvTmV4dCgpOyB9CisgICAgcHJvdGVj
dGVkOgorICAgICAgICBUTm9kZVNldFN0YWNrJiBzZXRzOworICAgIH07CisKKyAgICAvLworICAg
IC8vIEFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3Mga2VlcHMgdHJhY2sgb2YgdGhlIGxlZnRtb3N0
IHN5bWJvbCB3aGlsZSB3ZSdyZSBleHBsb3JpbmcgYW4KKyAgICAvLyBhc3NpZ25tZW50LgorICAg
IC8vIEl0IHdpbGwgcHVzaCB0aGUgcGxhY2Vob2xkZXIgc3ltYm9sIGtMZWZ0U3VidHJlZSB3aGVu
IGluc3RhbnRpYXRlZCB1bmRlciBhIGxlZnQgc3VidHJlZSwKKyAgICAvLyBhbmQga1JpZ2h0U3Vi
dHJlZSB1bmRlciBhIHJpZ2h0IHN1YnRyZWUuCisgICAgLy8gV2hlbiBpdCBnb2VzIG91dCBvZiBz
Y29wZSwgaXQgd2lsbCBwb3AgdGhlIGxlZnRtb3N0IHN5bWJvbCBhdCB0aGUgdG9wIG9mIHRoZSBz
Y29wZS4KKyAgICAvLyBEdXJpbmcgdHJhdmVyc2FsLCB0aGUgVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXIgd2lsbCByZXBsYWNlIGtMZWZ0U3VidHJlZSB3aXRoIGEgcmVhbCBzeW1ib2wuCisgICAgLy8g
a1JpZ2h0U3VidHJlZSB3aWxsIG5ldmVyIGJlIHJlcGxhY2VkIGJ5IGEgcmVhbCBzeW1ib2wgYmVj
YXVzZSB3ZSBhcmUgdHJhY2tpbmcgdGhlIGxlZnRtb3N0CisgICAgLy8gc3ltYm9sLgorICAgIC8v
CisgICAgY2xhc3MgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lciB7CisgICAgcHVibGljOgorICAg
ICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyKiBm
YWN0b3J5LCBUR3JhcGhTeW1ib2wmIHN1YnRyZWUpCisgICAgICAgICAgICA6IGxlZnRtb3N0U3lt
Ym9scyhmYWN0b3J5LT5tTGVmdG1vc3RTeW1ib2xzKQorICAgICAgICB7CisgICAgICAgICAgICBu
ZWVkc1BsYWNlaG9sZGVyU3ltYm9sID0gbGVmdG1vc3RTeW1ib2xzLmVtcHR5KCkgfHwgbGVmdG1v
c3RTeW1ib2xzLnRvcCgpICE9ICZzdWJ0cmVlOworICAgICAgICAgICAgaWYgKG5lZWRzUGxhY2Vo
b2xkZXJTeW1ib2wpCisgICAgICAgICAgICAgICAgbGVmdG1vc3RTeW1ib2xzLnB1c2goJnN1YnRy
ZWUpOworICAgICAgICB9CisKKyAgICAgICAgflRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIoKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAobmVlZHNQbGFjZWhvbGRlclN5bWJvbCkKKyAgICAg
ICAgICAgICAgICBsZWZ0bW9zdFN5bWJvbHMucG9wKCk7CisgICAgICAgIH0KKworICAgIHByb3Rl
Y3RlZDoKKyAgICAgICAgVFN5bWJvbFN0YWNrJiBsZWZ0bW9zdFN5bWJvbHM7CisgICAgICAgIGJv
b2wgbmVlZHNQbGFjZWhvbGRlclN5bWJvbDsKKyAgICB9OworCisgICAgVERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXIoVERlcGVuZGVuY3lHcmFwaCogZ3JhcGgpCisgICAgICAgIDogVEludGVybVRyYXZl
cnNlcih0cnVlLCBmYWxzZSwgZmFsc2UpCisgICAgICAgICwgbUxlZnRTdWJ0cmVlKE5VTEwpCisg
ICAgICAgICwgbVJpZ2h0U3VidHJlZShOVUxMKQorICAgICAgICAsIG1HcmFwaChncmFwaCkge30K
KyAgICB2b2lkIGJ1aWxkKFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlKSB7IGludGVybU5vZGUtPnRy
YXZlcnNlKHRoaXMpOyB9CisKKyAgICB2b2lkIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVO
b2RlKFRQYXJlbnROb2RlU2V0KiBub2RlcywgVEdyYXBoTm9kZSogbm9kZSkgY29uc3Q7CisKKyAg
ICB2b2lkIHZpc2l0QXNzaWdubWVudChUSW50ZXJtQmluYXJ5Kik7CisgICAgdm9pZCB2aXNpdExv
Z2ljYWxPcChUSW50ZXJtQmluYXJ5Kik7CisgICAgdm9pZCB2aXNpdEJpbmFyeUNoaWxkcmVuKFRJ
bnRlcm1CaW5hcnkqKTsKKyAgICB2b2lkIHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFRJbnRlcm1B
Z2dyZWdhdGUqKTsKKyAgICB2b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUq
IGludGVybUZ1bmN0aW9uQ2FsbCk7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZUNoaWxkcmVuKFRJ
bnRlcm1BZ2dyZWdhdGUqKTsKKworICAgIFRHcmFwaFN5bWJvbCBtTGVmdFN1YnRyZWU7CisgICAg
VEdyYXBoU3ltYm9sIG1SaWdodFN1YnRyZWU7CisKKyAgICBURGVwZW5kZW5jeUdyYXBoKiBtR3Jh
cGg7CisgICAgVE5vZGVTZXRTdGFjayBtTm9kZVNldHM7CisgICAgVFN5bWJvbFN0YWNrIG1MZWZ0
bW9zdFN5bWJvbHM7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVO
Q1lfR1JBUEhfQlVJTERFUl9ICmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3Jh
cGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMjI2MzMzNTQ1ZjczYTdk
ODVkZmI3NDIwYjQ1YzFhNzkzZTQ4MGI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdy
YXBoT3V0cHV0LmNwcApAQCAtMCwwICsxLDY1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisK
K3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6b3V0cHV0SW5kZW50YXRpb24oKQoreworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgZ2V0RGVwdGgoKTsgKytpKQorICAgICAgICBtU2luayA8PCAi
ICAiOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0QXJndW1lbnQoVEdy
YXBoQXJndW1lbnQqIHBhcmFtZXRlcikKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAg
IG1TaW5rIDw8ICJhcmd1bWVudCAiIDw8IHBhcmFtZXRlci0+Z2V0QXJndW1lbnROdW1iZXIoKSA8
PCAiIG9mIGNhbGwgdG8gIgorICAgICAgICAgIDw8IHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rp
b25DYWxsKCktPmdldE5hbWUoKSA8PCAiXG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhP
dXRwdXQ6OnZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxs
KQoreworICAgIG91dHB1dEluZGVudGF0aW9uKCk7CisgICAgbVNpbmsgPDwgImZ1bmN0aW9uIGNh
bGwgIiA8PCAgZnVuY3Rpb25DYWxsLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKS0+Z2V0TmFtZSgp
IDw8ICJcbiI7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRTeW1ib2wo
VEdyYXBoU3ltYm9sKiBzeW1ib2wpCit7CisgICAgb3V0cHV0SW5kZW50YXRpb24oKTsKKyAgICBt
U2luayA8PCBzeW1ib2wtPmdldEludGVybVN5bWJvbCgpLT5nZXRTeW1ib2woKSA8PCAiIChzeW1i
b2wgaWQ6ICIKKyAgICAgICAgICA8PCBzeW1ib2wtPmdldEludGVybVN5bWJvbCgpLT5nZXRJZCgp
IDw8ICIpXG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0U2VsZWN0
aW9uKFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKQoreworICAgIG91dHB1dEluZGVudGF0aW9u
KCk7CisgICAgbVNpbmsgPDwgInNlbGVjdGlvblxuIjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdy
YXBoT3V0cHV0Ojp2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCkKK3sKKyAgICBvdXRwdXRJbmRl
bnRhdGlvbigpOworICAgIG1TaW5rIDw8ICJsb29wIGNvbmRpdGlvblxuIjsKK30KKwordm9pZCBU
RGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxv
Z2ljYWxPcCkKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5rIDw8ICJsb2dp
Y2FsICIgPDwgbG9naWNhbE9wLT5nZXRPcFN0cmluZygpIDw8ICJcbiI7Cit9CisKK3ZvaWQgVERl
cGVuZGVuY3lHcmFwaE91dHB1dDo6b3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhURGVwZW5kZW5jeUdy
YXBoJiBncmFwaCkKK3sKKyAgICBtU2luayA8PCAiXG4iOworCisgICAgZm9yIChUR3JhcGhOb2Rl
VmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZ3JhcGguYmVnaW4oKTsgaXRlciAhPSBncmFw
aC5lbmQoKTsgKytpdGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBoTm9kZSogc3ltYm9sID0gKml0
ZXI7CisgICAgICAgIG1TaW5rIDw8ICItLS0gRGVwZW5kZW5jeSBncmFwaCBzcGFubmluZyB0cmVl
IC0tLVxuIjsKKyAgICAgICAgY2xlYXJWaXNpdGVkKCk7CisgICAgICAgIHN5bWJvbC0+dHJhdmVy
c2UodGhpcyk7CisgICAgICAgIG1TaW5rIDw8ICJcbiI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgv
RGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5jM2E0MTEyMjc4ZmJiZDRmMDkxNzUzZThkNDQ0NTQxNTVjYzE3MjVhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgKQEAgLTAsMCArMSwzMCBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9PVVRQ
VVRfSAorI2RlZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX09VVFBVVF9I
CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKKworY2xhc3Mg
VERlcGVuZGVuY3lHcmFwaE91dHB1dCA6IHB1YmxpYyBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2Vy
IHsKK3B1YmxpYzoKKyAgICBURGVwZW5kZW5jeUdyYXBoT3V0cHV0KFRJbmZvU2lua0Jhc2UmIHNp
bmspIDogbVNpbmsoc2luaykge30KKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEdyYXBo
U3ltYm9sKiBzeW1ib2wpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFyZ3VtZW50KFRHcmFwaEFy
Z3VtZW50KiBwYXJhbWV0ZXIpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdEZ1bmN0aW9uQ2FsbChU
R3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCk7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0
U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3ApOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvZ2lj
YWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCk7CisKKyAgICB2b2lkIG91dHB1dEFsbFNw
YW5uaW5nVHJlZXMoVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpOworcHJpdmF0ZToKKyAgICB2b2lk
IG91dHB1dEluZGVudGF0aW9uKCk7CisKKyAgICBUSW5mb1NpbmtCYXNlJiBtU2luazsKK307CisK
KyNlbmRpZiAgLy8gQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9PVVRQVVRfSApk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBo
VHJhdmVyc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5N2ZkZTk3ZTI2MGQwYjUwMmUxNGQ5ODBjNWU2ZmNk
MTg4MDc2MWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAK
QEAgLTAsMCArMSw2OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorCisvLyBUaGVzZSBtZXRob2RzIGRv
IGEgYnJlYWR0aC1maXJzdCB0cmF2ZXJzYWwgdGhyb3VnaCB0aGUgZ3JhcGggYW5kIG1hcmsgdmlz
aXRlZCBub2Rlcy4KKwordm9pZCBUR3JhcGhOb2RlOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBo
VHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+bWFya1Zp
c2l0ZWQodGhpcyk7Cit9CisKK3ZvaWQgVEdyYXBoUGFyZW50Tm9kZTo6dHJhdmVyc2UoVERlcGVu
ZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCit7CisgICAgVEdyYXBoTm9kZTo6
dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworCisgICAgZ3JhcGhUcmF2ZXJzZXItPmluY3JlbWVu
dERlcHRoKCk7CisKKyAgICAvLyBWaXNpdCB0aGUgcGFyZW50IG5vZGUncyBjaGlsZHJlbi4KKyAg
ICBmb3IgKFRHcmFwaE5vZGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtRGVwZW5kZW50Tm9k
ZXMuYmVnaW4oKTsKKyAgICAgICAgIGl0ZXIgIT0gbURlcGVuZGVudE5vZGVzLmVuZCgpOworICAg
ICAgICAgKytpdGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBoTm9kZSogbm9kZSA9ICppdGVyOwor
ICAgICAgICBpZiAoIWdyYXBoVHJhdmVyc2VyLT5pc1Zpc2l0ZWQobm9kZSkpCisgICAgICAgICAg
ICBub2RlLT50cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7CisgICAgfQorCisgICAgZ3JhcGhUcmF2
ZXJzZXItPmRlY3JlbWVudERlcHRoKCk7Cit9CisKK3ZvaWQgVEdyYXBoQXJndW1lbnQ6OnRyYXZl
cnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdy
YXBoVHJhdmVyc2VyLT52aXNpdEFyZ3VtZW50KHRoaXMpOworICAgIFRHcmFwaFBhcmVudE5vZGU6
OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhGdW5jdGlvbkNhbGw6
OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQorewor
ICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdEZ1bmN0aW9uQ2FsbCh0aGlzKTsKKyAgICBUR3JhcGhQ
YXJlbnROb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CisKK3ZvaWQgVEdyYXBoU3lt
Ym9sOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikK
K3sKKyAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRTeW1ib2wodGhpcyk7CisgICAgVEdyYXBoUGFy
ZW50Tm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworfQorCit2b2lkIFRHcmFwaFNlbGVj
dGlvbjo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIp
Cit7CisgICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0U2VsZWN0aW9uKHRoaXMpOworICAgIFRHcmFw
aE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhMb29wOjp0
cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAg
ICBncmFwaFRyYXZlcnNlci0+dmlzaXRMb29wKHRoaXMpOworICAgIFRHcmFwaE5vZGU6OnRyYXZl
cnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhMb2dpY2FsT3A6OnRyYXZlcnNl
KFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBo
VHJhdmVyc2VyLT52aXNpdExvZ2ljYWxPcCh0aGlzKTsKKyAgICBUR3JhcGhOb2RlOjp0cmF2ZXJz
ZShncmFwaFRyYXZlcnNlcik7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nZW5lcmF0ZV9wYXJzZXIuc2ggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nZW5lcmF0ZV9wYXJzZXIuc2gK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZTQ3MjE5MTVlM2NmYjI3Yzg3ZmY5M2EwZjk1M2FkOTE2NDNjYzZiNwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL2dlbmVyYXRlX3BhcnNlci5zaApAQCAtMCwwICsxLDI3IEBACisjIS9iaW4vYmFzaAor
IyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorCisjIEdlbmVyYXRlcyBHTFNMIEVTIHBhcnNlciAtIGdsc2xhbmdfbGV4LmNwcCwgZ2xzbGFu
Z190YWIuaCwgYW5kIGdsc2xhbmdfdGFiLmNwcAorCitydW5fZmxleCgpCit7CitpbnB1dF9maWxl
PSRzY3JpcHRfZGlyLyQxLmwKK291dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIvJDFfbGV4LmNwcAor
ZmxleCAtLW5vbGluZSAtLW5vdW5pc3RkIC0tb3V0ZmlsZT0kb3V0cHV0X3NvdXJjZSAkaW5wdXRf
ZmlsZQorfQorCitydW5fYmlzb24oKQoreworaW5wdXRfZmlsZT0kc2NyaXB0X2Rpci8kMS55Citv
dXRwdXRfaGVhZGVyPSRzY3JpcHRfZGlyLyQxX3RhYi5oCitvdXRwdXRfc291cmNlPSRzY3JpcHRf
ZGlyLyQxX3RhYi5jcHAKK2Jpc29uIC0tbm8tbGluZXMgLS1za2VsZXRvbj15YWNjLmMgLS1kZWZp
bmVzPSRvdXRwdXRfaGVhZGVyIC0tb3V0cHV0PSRvdXRwdXRfc291cmNlICRpbnB1dF9maWxlCit9
CisKK3NjcmlwdF9kaXI9JChkaXJuYW1lICQwKQorCisjIEdlbmVyYXRlIFBhcnNlcgorcnVuX2Zs
ZXggZ2xzbGFuZworcnVuX2Jpc29uIGdsc2xhbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mMjIxMTk5MDkzYzIxYWI5N2Y4MjFhNmZiNmIxODQ4MjE2ZTIyODUxCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xz
bGFuZy5oCkBAIC0wLDAgKzEsMTYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCitzdHJ1Y3QgVFBhcnNlQ29u
dGV4dDsKK2V4dGVybiBpbnQgZ2xzbGFuZ19pbml0aWFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRl
eHQpOworZXh0ZXJuIGludCBnbHNsYW5nX2ZpbmFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRleHQp
OworCitleHRlcm4gaW50IGdsc2xhbmdfc2NhbihzaXplX3QgY291bnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGludCBsZW5ndGhbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRQYXJz
ZUNvbnRleHQqIGNvbnRleHQpOworZXh0ZXJuIGludCBnbHNsYW5nX3BhcnNlKFRQYXJzZUNvbnRl
eHQqIGNvbnRleHQpOworCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nLmwgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nLmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmI2MjNlYzQxMDYy
YmU2Y2E4OWQ4MjU4NDczYWI4MGJhNzdhZDFkZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcubApAQCAtMCww
ICsxLDM1NSBAQAorLyoKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK1RoaXMgZmlsZSBjb250YWlucyB0
aGUgTGV4IHNwZWNpZmljYXRpb24gZm9yIEdMU0wgRVMuCitCYXNlZCBvbiBBTlNJIEMgZ3JhbW1h
ciwgTGV4IHNwZWNpZmljYXRpb246CitodHRwOi8vd3d3Lmx5c2F0b3IubGl1LnNlL2MvQU5TSS1D
LWdyYW1tYXItbC5odG1sCisKK0lGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQg
VE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaCwKK1dISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBM
RVhFUiAoZ2xzbGFuZ19sZXguY3BwKS4KKyovCisKKyV0b3B7CisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8g
VGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9U
IEVESVQhCisKKy8vIElnbm9yZSBlcnJvcnMgaW4gYXV0by1nZW5lcmF0ZWQgY29kZS4KKyNpZiBk
ZWZpbmVkKF9fR05VQ19fKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNl
ZC1mdW5jdGlvbiIKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtdmFy
aWFibGUiCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc3dpdGNoLWVudW0iCisj
ZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQwNjUpCisj
cHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDE4OSkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0
NTA1KQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEpCisjZW5kaWYKK30KKworJXsKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nl
c3Nvci9Ub2tlbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuaCIKKworLyogd2luZG93cyBv
bmx5IHByYWdtYSAqLworI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZSA6
IDQxMDIpCisjZW5kaWYKKworI2RlZmluZSBZWV9VU0VSX0FDVElPTiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICB5eWxsb2MtPmZpcnN0X2ZpbGUgPSB5eWxsb2MtPmxhc3Rf
ZmlsZSA9IHl5Y29sdW1uOyBcCisgICAgeXlsbG9jLT5maXJzdF9saW5lID0geXlsbG9jLT5sYXN0
X2xpbmUgPSB5eWxpbmVubzsKKworI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4X3Np
emUpIFwKKyAgICByZXN1bHQgPSBzdHJpbmdfaW5wdXQoYnVmLCBtYXhfc2l6ZSwgeXlzY2FubmVy
KTsKKworc3RhdGljIHl5X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCB5eV9zaXplX3Qg
bWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcik7CitzdGF0aWMgaW50IGNoZWNrX3R5cGUoeXlz
Y2FuX3QgeXlzY2FubmVyKTsKK3N0YXRpYyBpbnQgcmVzZXJ2ZWRfd29yZCh5eXNjYW5fdCB5eXNj
YW5uZXIpOworc3RhdGljIGludCBpbnRfY29uc3RhbnQoeXlzY2FuX3QgeXlzY2FubmVyKTsKK3N0
YXRpYyBpbnQgZmxvYXRfY29uc3RhbnQoeXlzY2FuX3QgeXlzY2FubmVyKTsKKyV9CisKKyVvcHRp
b24gbm95eXdyYXAgbm91bnB1dCBuZXZlci1pbnRlcmFjdGl2ZQorJW9wdGlvbiB5eWxpbmVubyBy
ZWVudHJhbnQgYmlzb24tYnJpZGdlIGJpc29uLWxvY2F0aW9ucworJW9wdGlvbiBleHRyYS10eXBl
PSJUUGFyc2VDb250ZXh0KiIKKworRCAgICAgICAgICAgWzAtOV0KK0wgICAgICAgICAgIFthLXpB
LVpfXQorSCAgICAgICAgICAgW2EtZkEtRjAtOV0KK0UgICAgICAgICAgIFtFZV1bKy1dP3tEfSsK
K08gICAgICAgICAgIFswLTddCisKKyUlCisKKyJpbnZhcmlhbnQiICAgIHsgcmV0dXJuIElOVkFS
SUFOVDsgfQorImhpZ2hwIiAgICAgICAgeyByZXR1cm4gSElHSF9QUkVDSVNJT047IH0KKyJtZWRp
dW1wIiAgICAgIHsgcmV0dXJuIE1FRElVTV9QUkVDSVNJT047IH0KKyJsb3dwIiAgICAgICAgIHsg
cmV0dXJuIExPV19QUkVDSVNJT047IH0KKyJwcmVjaXNpb24iICAgIHsgcmV0dXJuIFBSRUNJU0lP
TjsgfQorCisiYXR0cmlidXRlIiAgICB7IHJldHVybiBBVFRSSUJVVEU7IH0KKyJjb25zdCIgICAg
ICAgIHsgcmV0dXJuIENPTlNUX1FVQUw7IH0KKyJ1bmlmb3JtIiAgICAgIHsgcmV0dXJuIFVOSUZP
Uk07IH0KKyJ2YXJ5aW5nIiAgICAgIHsgcmV0dXJuIFZBUllJTkc7IH0KKworImJyZWFrIiAgICAg
ICAgeyByZXR1cm4gQlJFQUs7IH0KKyJjb250aW51ZSIgICAgIHsgcmV0dXJuIENPTlRJTlVFOyB9
CisiZG8iICAgICAgICAgICB7IHJldHVybiBETzsgfQorImZvciIgICAgICAgICAgeyByZXR1cm4g
Rk9SOyB9Cisid2hpbGUiICAgICAgICB7IHJldHVybiBXSElMRTsgfQorCisiaWYiICAgICAgICAg
ICB7IHJldHVybiBJRjsgfQorImVsc2UiICAgICAgICAgeyByZXR1cm4gRUxTRTsgfQorCisiaW4i
ICAgICAgICAgICB7IHJldHVybiBJTl9RVUFMOyB9Cisib3V0IiAgICAgICAgICB7IHJldHVybiBP
VVRfUVVBTDsgfQorImlub3V0IiAgICAgICAgeyByZXR1cm4gSU5PVVRfUVVBTDsgfQorCisiZmxv
YXQiICAgICAgICB7IHJldHVybiBGTE9BVF9UWVBFOyB9CisiaW50IiAgICAgICAgICB7IHJldHVy
biBJTlRfVFlQRTsgfQorInZvaWQiICAgICAgICAgeyByZXR1cm4gVk9JRF9UWVBFOyB9CisiYm9v
bCIgICAgICAgICB7IHJldHVybiBCT09MX1RZUEU7IH0KKyJ0cnVlIiAgICAgICAgIHsgeXlsdmFs
LT5sZXguYiA9IHRydWU7ICByZXR1cm4gQk9PTENPTlNUQU5UOyB9CisiZmFsc2UiICAgICAgICB7
IHl5bHZhbC0+bGV4LmIgPSBmYWxzZTsgcmV0dXJuIEJPT0xDT05TVEFOVDsgfQorCisiZGlzY2Fy
ZCIgICAgICB7IHJldHVybiBESVNDQVJEOyB9CisicmV0dXJuIiAgICAgICB7IHJldHVybiBSRVRV
Uk47IH0KKworIm1hdDIiICAgICAgICAgeyByZXR1cm4gTUFUUklYMjsgfQorIm1hdDMiICAgICAg
ICAgeyByZXR1cm4gTUFUUklYMzsgfQorIm1hdDQiICAgICAgICAgeyByZXR1cm4gTUFUUklYNDsg
fQorCisidmVjMiIgICAgICAgICB7IHJldHVybiBWRUMyOyB9CisidmVjMyIgICAgICAgICB7IHJl
dHVybiBWRUMzOyB9CisidmVjNCIgICAgICAgICB7IHJldHVybiBWRUM0OyB9CisiaXZlYzIiICAg
ICAgICB7IHJldHVybiBJVkVDMjsgfQorIml2ZWMzIiAgICAgICAgeyByZXR1cm4gSVZFQzM7IH0K
KyJpdmVjNCIgICAgICAgIHsgcmV0dXJuIElWRUM0OyB9CisiYnZlYzIiICAgICAgICB7IHJldHVy
biBCVkVDMjsgfQorImJ2ZWMzIiAgICAgICAgeyByZXR1cm4gQlZFQzM7IH0KKyJidmVjNCIgICAg
ICAgIHsgcmV0dXJuIEJWRUM0OyB9CisKKyJzYW1wbGVyMkQiICAgICAgICAgIHsgcmV0dXJuIFNB
TVBMRVIyRDsgfQorInNhbXBsZXJDdWJlIiAgICAgICAgeyByZXR1cm4gU0FNUExFUkNVQkU7IH0K
KyJzYW1wbGVyRXh0ZXJuYWxPRVMiIHsgcmV0dXJuIFNBTVBMRVJfRVhURVJOQUxfT0VTOyB9Cisi
c2FtcGxlcjJEUmVjdCIgICAgICB7IHJldHVybiBTQU1QTEVSMkRSRUNUOyB9CisKKyJzdHJ1Y3Qi
ICAgICAgIHsgcmV0dXJuIFNUUlVDVDsgfQorCisiYXNtIiAgICAgICAgICB7IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworImNsYXNzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisidW5pb24iICAgICAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KKyJlbnVtIiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQorInR5cGVkZWYiICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9CisidGVtcGxhdGUiICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KKyJ0aGlzIiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQorInBhY2tlZCIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisK
KyJnb3RvIiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInN3
aXRjaCIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZGVmYXVs
dCIgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworImlubGluZSIg
ICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisibm9pbmxpbmUiICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJ2b2xhdGlsZSIgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInB1YmxpYyIgICAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic3RhdGljIiAgICAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJleHRlcm4iICAgICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImV4dGVybmFsIiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9CisiaW50ZXJmYWNlIiAgICB7IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KKyJmbGF0IiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQorCisibG9uZyIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KKyJzaG9ydCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQorImRvdWJsZSIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
CisiaGFsZiIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJm
aXhlZCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInVuc2ln
bmVkIiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic3VwZXJwIiAg
ICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworImlucHV0IiAgICAg
ICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisib3V0cHV0IiAgICAgICB7
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworImh2ZWMyIiAgICAgICAgeyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiaHZlYzMiICAgICAgICB7IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJodmVjNCIgICAgICAgIHsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImR2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZHZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KKyJkdmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQorImZ2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9CisiZnZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KKyJmdmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQorCisic2FtcGxlcjFEIiAgICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9Cisic2FtcGxlcjNEIiAgICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9Cisic2FtcGxlcjFEU2hhZG93IiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9Cisic2FtcGxlcjJEU2hhZG93IiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxlcjNEUmVjdCIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxlcjJEUmVjdFNoYWRvdyIgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisKKyJzaXplb2YiICAgICAgIHsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQorImNhc3QiICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9CisKKyJuYW1lc3BhY2UiICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQorInVzaW5nIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9CisKK3tMfSh7TH18e0R9KSogICAgICAgeworICAgeXlsdmFsLT5sZXguc3RyaW5n
ID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsgCisgICByZXR1cm4gY2hlY2tfdHlwZSh5eXNjYW5u
ZXIpOworfQorCiswW3hYXXtIfSsgICAgICAgICB7IHJldHVybiBpbnRfY29uc3RhbnQoeXlzY2Fu
bmVyKTsgfQorMHtPfSsgICAgICAgICAgICAgeyByZXR1cm4gaW50X2NvbnN0YW50KHl5c2Nhbm5l
cik7IH0KK3tEfSsgICAgICAgICAgICAgIHsgcmV0dXJuIGludF9jb25zdGFudCh5eXNjYW5uZXIp
OyB9CisKK3tEfSt7RX0gICAgICAgICAgIHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nhbm5l
cik7IH0KK3tEfSsiLiJ7RH0qKHtFfSk/IHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nhbm5l
cik7IH0KKyIuIntEfSsoe0V9KT8gICAgIHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nhbm5l
cik7IH0KKworIis9IiAgICAgICAgICAgIHsgcmV0dXJuIEFERF9BU1NJR047IH0KKyItPSIgICAg
ICAgICAgICB7IHJldHVybiBTVUJfQVNTSUdOOyB9CisiKj0iICAgICAgICAgICAgeyByZXR1cm4g
TVVMX0FTU0lHTjsgfQorIi89IiAgICAgICAgICAgIHsgcmV0dXJuIERJVl9BU1NJR047IH0KKyIl
PSIgICAgICAgICAgICB7IHJldHVybiBNT0RfQVNTSUdOOyB9CisiPDw9IiAgICAgICAgICAgeyBy
ZXR1cm4gTEVGVF9BU1NJR047IH0KKyI+Pj0iICAgICAgICAgICB7IHJldHVybiBSSUdIVF9BU1NJ
R047IH0KKyImPSIgICAgICAgICAgICB7IHJldHVybiBBTkRfQVNTSUdOOyB9CisiXj0iICAgICAg
ICAgICAgeyByZXR1cm4gWE9SX0FTU0lHTjsgfQorInw9IiAgICAgICAgICAgIHsgcmV0dXJuIE9S
X0FTU0lHTjsgfQorCisiKysiICAgICAgICAgICAgeyByZXR1cm4gSU5DX09QOyB9CisiLS0iICAg
ICAgICAgICAgeyByZXR1cm4gREVDX09QOyB9CisiJiYiICAgICAgICAgICAgeyByZXR1cm4gQU5E
X09QOyB9CisifHwiICAgICAgICAgICAgeyByZXR1cm4gT1JfT1A7IH0KKyJeXiIgICAgICAgICAg
ICB7IHJldHVybiBYT1JfT1A7IH0KKyI8PSIgICAgICAgICAgICB7IHJldHVybiBMRV9PUDsgfQor
Ij49IiAgICAgICAgICAgIHsgcmV0dXJuIEdFX09QOyB9CisiPT0iICAgICAgICAgICAgeyByZXR1
cm4gRVFfT1A7IH0KKyIhPSIgICAgICAgICAgICB7IHJldHVybiBORV9PUDsgfQorIjw8IiAgICAg
ICAgICAgIHsgcmV0dXJuIExFRlRfT1A7IH0KKyI+PiIgICAgICAgICAgICB7IHJldHVybiBSSUdI
VF9PUDsgfQorIjsiICAgICAgICAgICAgIHsgcmV0dXJuIFNFTUlDT0xPTjsgfQorKCJ7InwiPCUi
KSAgICAgIHsgcmV0dXJuIExFRlRfQlJBQ0U7IH0KKygifSJ8IiU+IikgICAgICB7IHJldHVybiBS
SUdIVF9CUkFDRTsgfQorIiwiICAgICAgICAgeyByZXR1cm4gQ09NTUE7IH0KKyI6IiAgICAgICAg
IHsgcmV0dXJuIENPTE9OOyB9CisiPSIgICAgICAgICB7IHJldHVybiBFUVVBTDsgfQorIigiICAg
ICAgICAgeyByZXR1cm4gTEVGVF9QQVJFTjsgfQorIikiICAgICAgICAgeyByZXR1cm4gUklHSFRf
UEFSRU47IH0KKygiWyJ8Ijw6IikgIHsgcmV0dXJuIExFRlRfQlJBQ0tFVDsgfQorKCJdInwiOj4i
KSAgeyByZXR1cm4gUklHSFRfQlJBQ0tFVDsgfQorIi4iICAgICAgICAgeyByZXR1cm4gRE9UOyB9
CisiISIgICAgICAgICB7IHJldHVybiBCQU5HOyB9CisiLSIgICAgICAgICB7IHJldHVybiBEQVNI
OyB9CisifiIgICAgICAgICB7IHJldHVybiBUSUxERTsgfQorIisiICAgICAgICAgeyByZXR1cm4g
UExVUzsgfQorIioiICAgICAgICAgeyByZXR1cm4gU1RBUjsgfQorIi8iICAgICAgICAgeyByZXR1
cm4gU0xBU0g7IH0KKyIlIiAgICAgICAgIHsgcmV0dXJuIFBFUkNFTlQ7IH0KKyI8IiAgICAgICAg
IHsgcmV0dXJuIExFRlRfQU5HTEU7IH0KKyI+IiAgICAgICAgIHsgcmV0dXJuIFJJR0hUX0FOR0xF
OyB9CisifCIgICAgICAgICB7IHJldHVybiBWRVJUSUNBTF9CQVI7IH0KKyJeIiAgICAgICAgIHsg
cmV0dXJuIENBUkVUOyB9CisiJiIgICAgICAgICB7IHJldHVybiBBTVBFUlNBTkQ7IH0KKyI/IiAg
ICAgICAgIHsgcmV0dXJuIFFVRVNUSU9OOyB9CisKK1sgXHRcdlxuXGZccl0geyB9Cis8PEVPRj4+
ICAgIHsgeXl0ZXJtaW5hdGUoKTsgfQorLiAgICAgICAgICB7IGFzc2VydChmYWxzZSk7IHJldHVy
biAwOyB9CisKKyUlCisKK3l5X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCB5eV9zaXpl
X3QgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikgeworICAgIHBwOjpUb2tlbiB0b2tlbjsK
KyAgICB5eWdldF9leHRyYSh5eXNjYW5uZXIpLT5wcmVwcm9jZXNzb3IubGV4KCZ0b2tlbik7Cisg
ICAgeXlfc2l6ZV90IGxlbiA9IHRva2VuLnR5cGUgPT0gcHA6OlRva2VuOjpMQVNUID8gMCA6IHRv
a2VuLnRleHQuc2l6ZSgpOworICAgIGlmIChsZW4gPCBtYXhfc2l6ZSkKKyAgICAgICAgbWVtY3B5
KGJ1ZiwgdG9rZW4udGV4dC5jX3N0cigpLCBsZW4pOworICAgIHl5c2V0X2NvbHVtbih0b2tlbi5s
b2NhdGlvbi5maWxlLCB5eXNjYW5uZXIpOworICAgIHl5c2V0X2xpbmVubyh0b2tlbi5sb2NhdGlv
bi5saW5lLCB5eXNjYW5uZXIpOworCisgICAgaWYgKGxlbiA+PSBtYXhfc2l6ZSkKKyAgICAgICAg
WVlfRkFUQUxfRVJST1IoIklucHV0IGJ1ZmZlciBvdmVyZmxvdyIpOworICAgIGVsc2UgaWYgKGxl
biA+IDApCisgICAgICAgIGJ1ZltsZW4rK10gPSAnICc7CisgICAgcmV0dXJuIGxlbjsKK30KKwor
aW50IGNoZWNrX3R5cGUoeXlzY2FuX3QgeXlzY2FubmVyKSB7CisgICAgc3RydWN0IHl5Z3V0c190
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgeXlzY2FubmVyOworICAgIAorICAgIGludCB0b2tl
biA9IElERU5USUZJRVI7CisgICAgVFN5bWJvbCogc3ltYm9sID0geXlleHRyYS0+c3ltYm9sVGFi
bGUuZmluZCh5eXRleHQpOworICAgIGlmIChzeW1ib2wgJiYgc3ltYm9sLT5pc1ZhcmlhYmxlKCkp
IHsKKyAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+
KHN5bWJvbCk7CisgICAgICAgIGlmICh2YXJpYWJsZS0+aXNVc2VyVHlwZSgpKQorICAgICAgICAg
ICAgdG9rZW4gPSBUWVBFX05BTUU7CisgICAgfQorICAgIHl5bHZhbC0+bGV4LnN5bWJvbCA9IHN5
bWJvbDsKKyAgICByZXR1cm4gdG9rZW47Cit9CisKK2ludCByZXNlcnZlZF93b3JkKHl5c2Nhbl90
IHl5c2Nhbm5lcikgeworICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopIHl5c2Nhbm5lcjsKKworICAgIHl5ZXh0cmEtPmVycm9yKCp5eWxsb2MsICJJbGxlZ2FsIHVz
ZSBvZiByZXNlcnZlZCB3b3JkIiwgeXl0ZXh0LCAiIik7CisgICAgeXlleHRyYS0+cmVjb3Zlcigp
OworICAgIHJldHVybiAwOworfQorCit2b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxvYywgVFBhcnNl
Q29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKSB7CisgICAgY29udGV4dC0+ZXJy
b3IoKmxsb2MsIHJlYXNvbiwgeXlnZXRfdGV4dChjb250ZXh0LT5zY2FubmVyKSk7CisgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworfQorCitpbnQgaW50X2NvbnN0YW50KHl5c2Nhbl90IHl5c2Nhbm5l
cikgeworICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIHl5c2Nh
bm5lcjsKKworICAgIGlmICghYXRvaV9jbGFtcCh5eXRleHQsICYoeXlsdmFsLT5sZXguaSkpKQor
ICAgICAgICB5eWV4dHJhLT53YXJuaW5nKCp5eWxsb2MsICJJbnRlZ2VyIG92ZXJmbG93IiwgeXl0
ZXh0LCAiIik7CisgICAgcmV0dXJuIElOVENPTlNUQU5UOworfQorCitpbnQgZmxvYXRfY29uc3Rh
bnQoeXlzY2FuX3QgeXlzY2FubmVyKSB7CisgICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190KikgeXlzY2FubmVyOworCisgICAgaWYgKCFhdG9mX2NsYW1wKHl5dGV4dCwg
Jih5eWx2YWwtPmxleC5mKSkpCisgICAgICAgIHl5ZXh0cmEtPndhcm5pbmcoKnl5bGxvYywgIkZs
b2F0IG92ZXJmbG93IiwgeXl0ZXh0LCAiIik7CisgICAgcmV0dXJuIEZMT0FUQ09OU1RBTlQ7Cit9
CisKK2ludCBnbHNsYW5nX2luaXRpYWxpemUoVFBhcnNlQ29udGV4dCogY29udGV4dCkgeworICAg
IHl5c2Nhbl90IHNjYW5uZXIgPSBOVUxMOworICAgIGlmICh5eWxleF9pbml0X2V4dHJhKGNvbnRl
eHQsICZzY2FubmVyKSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBjb250ZXh0LT5zY2FubmVy
ID0gc2Nhbm5lcjsKKyAgICByZXR1cm4gMDsKK30KKworaW50IGdsc2xhbmdfZmluYWxpemUoVFBh
cnNlQ29udGV4dCogY29udGV4dCkgeworICAgIHl5c2Nhbl90IHNjYW5uZXIgPSBjb250ZXh0LT5z
Y2FubmVyOworICAgIGlmIChzY2FubmVyID09IE5VTEwpIHJldHVybiAwOworICAgIAorICAgIGNv
bnRleHQtPnNjYW5uZXIgPSBOVUxMOworICAgIHl5bGV4X2Rlc3Ryb3koc2Nhbm5lcik7CisKKyAg
ICByZXR1cm4gMDsKK30KKworaW50IGdsc2xhbmdfc2NhbihzaXplX3QgY291bnQsIGNvbnN0IGNo
YXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAgICAgICAgICAg
IFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKKyAgICB5eXJlc3RhcnQoTlVMTCwgY29udGV4dC0+
c2Nhbm5lcik7CisgICAgeXlzZXRfY29sdW1uKDAsIGNvbnRleHQtPnNjYW5uZXIpOworICAgIHl5
c2V0X2xpbmVubygxLCBjb250ZXh0LT5zY2FubmVyKTsKKworICAgIC8vIEluaXRpYWxpemUgcHJl
cHJvY2Vzc29yLgorICAgIGlmICghY29udGV4dC0+cHJlcHJvY2Vzc29yLmluaXQoY291bnQsIHN0
cmluZywgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY29udGV4dC0+cHJlcHJvY2Vz
c29yLnNldE1heFRva2VuTGVuZ3RoKFNIX01BWF9UT0tFTl9MRU5HVEgpOworCisgICAgLy8gRGVm
aW5lIGV4dGVuc2lvbiBtYWNyb3MuCisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRC
ZWhhdmlvciA9IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgZm9yIChURXh0ZW5z
aW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRCZWhhdmlvci5iZWdpbigpOwor
ICAgICAgICAgaXRlciAhPSBleHRCZWhhdmlvci5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIGNv
bnRleHQtPnByZXByb2Nlc3Nvci5wcmVkZWZpbmVNYWNybyhpdGVyLT5maXJzdC5jX3N0cigpLCAx
KTsKKyAgICB9CisgICAgaWYgKGNvbnRleHQtPmZyYWdtZW50UHJlY2lzaW9uSGlnaCkKKyAgICAg
ICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnByZWRlZmluZU1hY3JvKCJHTF9GUkFHTUVOVF9QUkVD
SVNJT05fSElHSCIsIDEpOworCisgICAgcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcueSBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcueQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43NjE0ZmYzNDQ3ZjVjZDE2YzQxZWM0ZjFjNDZhNDA5ZTdlMWM5MjA5Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvZ2xzbGFuZy55CkBAIC0wLDAgKzEsMjAxNCBAQAorLyoKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgWWFjYyBncmFtbWFyIGZvciBHTFNMIEVTLgorQmFz
ZWQgb24gQU5TSSBDIFlhY2MgZ3JhbW1hcjoKK2h0dHA6Ly93d3cubHlzYXRvci5saXUuc2UvYy9B
TlNJLUMtZ3JhbW1hci15Lmh0bWwKKworSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08g
TkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNoLAorV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNM
IEVTIFBBUlNFUiAoZ2xzbGFuZ190YWIuY3BwIEFORCBnbHNsYW5nX3RhYi5oKS4KKyovCisKKyV7
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkg
Z2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKKworLy8gSWdub3JlIGVycm9ycyBpbiBh
dXRvLWdlbmVyYXRlZCBjb2RlLgorI2lmIGRlZmluZWQoX19HTlVDX18pCisjcHJhZ21hIEdDQyBk
aWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLWZ1bmN0aW9uIgorI3ByYWdtYSBHQ0MgZGlhZ25v
c3RpYyBpZ25vcmVkICItV3VudXNlZC12YXJpYWJsZSIKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMg
aWdub3JlZCAiLVdzd2l0Y2gtZW51bSIKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpCisjcHJhZ21h
IHdhcm5pbmcoZGlzYWJsZTogNDA2NSkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MTg5KQor
I3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ1MDUpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTog
NDcwMSkKKyNlbmRpZgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJs
ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCisjaW5j
bHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisKKyNkZWZpbmUgWVlFTkFCTEVfTkxTIDAKKwor
I2RlZmluZSBZWUxFWF9QQVJBTSBjb250ZXh0LT5zY2FubmVyCislfQorCislZXhwZWN0IDEgLyog
T25lIHNoaWZ0IHJlZHVjZSBjb25mbGljdCBiZWNhdXNlIG9mIGlmIHwgZWxzZSAqLworJXB1cmUt
cGFyc2VyCislcGFyc2UtcGFyYW0ge1RQYXJzZUNvbnRleHQqIGNvbnRleHR9CislbG9jYXRpb25z
CisKKyVjb2RlIHJlcXVpcmVzIHsKKyNkZWZpbmUgWVlMVFlQRSBUU291cmNlTG9jCisjZGVmaW5l
IFlZTFRZUEVfSVNfREVDTEFSRUQgMQorI2RlZmluZSBTSF9NQVhfVE9LRU5fTEVOR1RIIDI1NiAg
Ly8gV2ViR0wgc3BlYy4KK30KKworJXVuaW9uIHsKKyAgICBzdHJ1Y3QgeworICAgICAgICB1bmlv
biB7CisgICAgICAgICAgICBUU3RyaW5nICpzdHJpbmc7CisgICAgICAgICAgICBmbG9hdCBmOwor
ICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICBib29sIGI7CisgICAgICAgIH07CisgICAg
ICAgIFRTeW1ib2wqIHN5bWJvbDsKKyAgICB9IGxleDsKKyAgICBzdHJ1Y3QgeworICAgICAgICBU
T3BlcmF0b3Igb3A7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFRJbnRlcm1Ob2RlKiBp
bnRlcm1Ob2RlOworICAgICAgICAgICAgVEludGVybU5vZGVQYWlyIG5vZGVQYWlyOworICAgICAg
ICAgICAgVEludGVybVR5cGVkKiBpbnRlcm1UeXBlZE5vZGU7CisgICAgICAgICAgICBUSW50ZXJt
QWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGU7CisgICAgICAgIH07CisgICAgICAgIHVuaW9uIHsK
KyAgICAgICAgICAgIFRQdWJsaWNUeXBlIHR5cGU7CisgICAgICAgICAgICBUUHJlY2lzaW9uIHBy
ZWNpc2lvbjsKKyAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyOworICAgICAgICAgICAg
VEZ1bmN0aW9uKiBmdW5jdGlvbjsKKyAgICAgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW07CisgICAg
ICAgICAgICBURmllbGQqIGZpZWxkOworICAgICAgICAgICAgVEZpZWxkTGlzdCogZmllbGRMaXN0
OworICAgICAgICB9OworICAgIH0gaW50ZXJtOworfQorCisleworZXh0ZXJuIGludCB5eWxleChZ
WVNUWVBFKiB5eWx2YWwsIFlZTFRZUEUqIHl5bGxvYywgdm9pZCogeXlzY2FubmVyKTsKK2V4dGVy
biB2b2lkIHl5ZXJyb3IoWVlMVFlQRSogeXlsbG9jLCBUUGFyc2VDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBjaGFyKiByZWFzb24pOworCisjZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJo
cywgTikgICAgICAgICAgICAgICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmIChZWUlEKE4pKSB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChDdXJy
ZW50KS5maXJzdF9maWxlID0gWVlSSFNMT0MoUmhzLCAxKS5maXJzdF9maWxlOyAgXAorICAgICAg
ICAoQ3VycmVudCkuZmlyc3RfbGluZSA9IFlZUkhTTE9DKFJocywgMSkuZmlyc3RfbGluZTsgIFwK
KyAgICAgICAgKEN1cnJlbnQpLmxhc3RfZmlsZSA9IFlZUkhTTE9DKFJocywgTikubGFzdF9maWxl
OyAgICBcCisgICAgICAgIChDdXJyZW50KS5sYXN0X2xpbmUgPSBZWVJIU0xPQyhSaHMsIE4pLmxh
c3RfbGluZTsgICAgXAorICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChDdXJyZW50KS5maXJzdF9maWxl
ID0gWVlSSFNMT0MoUmhzLCAwKS5sYXN0X2ZpbGU7ICAgXAorICAgICAgICAoQ3VycmVudCkuZmly
c3RfbGluZSA9IFlZUkhTTE9DKFJocywgMCkubGFzdF9saW5lOyAgIFwKKyAgICAgICAgKEN1cnJl
bnQpLmxhc3RfZmlsZSA9IFlZUkhTTE9DKFJocywgMCkubGFzdF9maWxlOyAgICBcCisgICAgICAg
IChDdXJyZW50KS5sYXN0X2xpbmUgPSBZWVJIU0xPQyhSaHMsIDApLmxhc3RfbGluZTsgICAgXAor
ICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBWRVJURVhfT05MWShTLCBMKSB7ICBcCisg
ICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgIT0gU0hfVkVSVEVYX1NIQURFUikgeyAgXAorICAg
ICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXggc2hhZGVycyBvbmx5
ICIsIFMpOyAgXAorICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCisgICAgfSAgXAorfQor
CisjZGVmaW5lIEZSQUdfT05MWShTLCBMKSB7ICBcCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5
cGUgIT0gU0hfRlJBR01FTlRfU0hBREVSKSB7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEws
ICIgc3VwcG9ydGVkIGluIGZyYWdtZW50IHNoYWRlcnMgb25seSAiLCBTKTsgIFwKKyAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOyAgXAorICAgIH0gIFwKK30KKyV9CisKKyV0b2tlbiA8bGV4PiBJ
TlZBUklBTlQgSElHSF9QUkVDSVNJT04gTUVESVVNX1BSRUNJU0lPTiBMT1dfUFJFQ0lTSU9OIFBS
RUNJU0lPTgorJXRva2VuIDxsZXg+IEFUVFJJQlVURSBDT05TVF9RVUFMIEJPT0xfVFlQRSBGTE9B
VF9UWVBFIElOVF9UWVBFCisldG9rZW4gPGxleD4gQlJFQUsgQ09OVElOVUUgRE8gRUxTRSBGT1Ig
SUYgRElTQ0FSRCBSRVRVUk4KKyV0b2tlbiA8bGV4PiBCVkVDMiBCVkVDMyBCVkVDNCBJVkVDMiBJ
VkVDMyBJVkVDNCBWRUMyIFZFQzMgVkVDNAorJXRva2VuIDxsZXg+IE1BVFJJWDIgTUFUUklYMyBN
QVRSSVg0IElOX1FVQUwgT1VUX1FVQUwgSU5PVVRfUVVBTCBVTklGT1JNIFZBUllJTkcKKyV0b2tl
biA8bGV4PiBTVFJVQ1QgVk9JRF9UWVBFIFdISUxFCisldG9rZW4gPGxleD4gU0FNUExFUjJEIFNB
TVBMRVJDVUJFIFNBTVBMRVJfRVhURVJOQUxfT0VTIFNBTVBMRVIyRFJFQ1QKKworJXRva2VuIDxs
ZXg+IElERU5USUZJRVIgVFlQRV9OQU1FIEZMT0FUQ09OU1RBTlQgSU5UQ09OU1RBTlQgQk9PTENP
TlNUQU5UCisldG9rZW4gPGxleD4gTEVGVF9PUCBSSUdIVF9PUAorJXRva2VuIDxsZXg+IElOQ19P
UCBERUNfT1AgTEVfT1AgR0VfT1AgRVFfT1AgTkVfT1AKKyV0b2tlbiA8bGV4PiBBTkRfT1AgT1Jf
T1AgWE9SX09QIE1VTF9BU1NJR04gRElWX0FTU0lHTiBBRERfQVNTSUdOCisldG9rZW4gPGxleD4g
TU9EX0FTU0lHTiBMRUZUX0FTU0lHTiBSSUdIVF9BU1NJR04gQU5EX0FTU0lHTiBYT1JfQVNTSUdO
IE9SX0FTU0lHTgorJXRva2VuIDxsZXg+IFNVQl9BU1NJR04KKworJXRva2VuIDxsZXg+IExFRlRf
UEFSRU4gUklHSFRfUEFSRU4gTEVGVF9CUkFDS0VUIFJJR0hUX0JSQUNLRVQgTEVGVF9CUkFDRSBS
SUdIVF9CUkFDRSBET1QKKyV0b2tlbiA8bGV4PiBDT01NQSBDT0xPTiBFUVVBTCBTRU1JQ09MT04g
QkFORyBEQVNIIFRJTERFIFBMVVMgU1RBUiBTTEFTSCBQRVJDRU5UCisldG9rZW4gPGxleD4gTEVG
VF9BTkdMRSBSSUdIVF9BTkdMRSBWRVJUSUNBTF9CQVIgQ0FSRVQgQU1QRVJTQU5EIFFVRVNUSU9O
CisKKyV0eXBlIDxsZXg+IGlkZW50aWZpZXIKKyV0eXBlIDxpbnRlcm0+IGFzc2lnbm1lbnRfb3Bl
cmF0b3IgdW5hcnlfb3BlcmF0b3IKKyV0eXBlIDxpbnRlcm0uaW50ZXJtVHlwZWROb2RlPiB2YXJp
YWJsZV9pZGVudGlmaWVyIHByaW1hcnlfZXhwcmVzc2lvbiBwb3N0Zml4X2V4cHJlc3Npb24KKyV0
eXBlIDxpbnRlcm0uaW50ZXJtVHlwZWROb2RlPiBleHByZXNzaW9uIGludGVnZXJfZXhwcmVzc2lv
biBhc3NpZ25tZW50X2V4cHJlc3Npb24KKyV0eXBlIDxpbnRlcm0uaW50ZXJtVHlwZWROb2RlPiB1
bmFyeV9leHByZXNzaW9uIG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24gYWRkaXRpdmVfZXhwcmVz
c2lvbgorJXR5cGUgPGludGVybS5pbnRlcm1UeXBlZE5vZGU+IHJlbGF0aW9uYWxfZXhwcmVzc2lv
biBlcXVhbGl0eV9leHByZXNzaW9uCisldHlwZSA8aW50ZXJtLmludGVybVR5cGVkTm9kZT4gY29u
ZGl0aW9uYWxfZXhwcmVzc2lvbiBjb25zdGFudF9leHByZXNzaW9uCisldHlwZSA8aW50ZXJtLmlu
dGVybVR5cGVkTm9kZT4gbG9naWNhbF9vcl9leHByZXNzaW9uIGxvZ2ljYWxfeG9yX2V4cHJlc3Np
b24gbG9naWNhbF9hbmRfZXhwcmVzc2lvbgorJXR5cGUgPGludGVybS5pbnRlcm1UeXBlZE5vZGU+
IHNoaWZ0X2V4cHJlc3Npb24gYW5kX2V4cHJlc3Npb24gZXhjbHVzaXZlX29yX2V4cHJlc3Npb24g
aW5jbHVzaXZlX29yX2V4cHJlc3Npb24KKyV0eXBlIDxpbnRlcm0uaW50ZXJtVHlwZWROb2RlPiBm
dW5jdGlvbl9jYWxsIGluaXRpYWxpemVyIGNvbmRpdGlvbiBjb25kaXRpb25vcHQKKworJXR5cGUg
PGludGVybS5pbnRlcm1Ob2RlPiB0cmFuc2xhdGlvbl91bml0IGZ1bmN0aW9uX2RlZmluaXRpb24K
KyV0eXBlIDxpbnRlcm0uaW50ZXJtTm9kZT4gc3RhdGVtZW50IHNpbXBsZV9zdGF0ZW1lbnQKKyV0
eXBlIDxpbnRlcm0uaW50ZXJtQWdncmVnYXRlPiAgc3RhdGVtZW50X2xpc3QgY29tcG91bmRfc3Rh
dGVtZW50CisldHlwZSA8aW50ZXJtLmludGVybU5vZGU+IGRlY2xhcmF0aW9uX3N0YXRlbWVudCBz
ZWxlY3Rpb25fc3RhdGVtZW50IGV4cHJlc3Npb25fc3RhdGVtZW50CisldHlwZSA8aW50ZXJtLmlu
dGVybU5vZGU+IGRlY2xhcmF0aW9uIGV4dGVybmFsX2RlY2xhcmF0aW9uCisldHlwZSA8aW50ZXJt
LmludGVybU5vZGU+IGZvcl9pbml0X3N0YXRlbWVudCBjb21wb3VuZF9zdGF0ZW1lbnRfbm9fbmV3
X3Njb3BlCisldHlwZSA8aW50ZXJtLm5vZGVQYWlyPiBzZWxlY3Rpb25fcmVzdF9zdGF0ZW1lbnQg
Zm9yX3Jlc3Rfc3RhdGVtZW50CisldHlwZSA8aW50ZXJtLmludGVybU5vZGU+IGl0ZXJhdGlvbl9z
dGF0ZW1lbnQganVtcF9zdGF0ZW1lbnQgc3RhdGVtZW50X25vX25ld19zY29wZSBzdGF0ZW1lbnRf
d2l0aF9zY29wZQorJXR5cGUgPGludGVybT4gc2luZ2xlX2RlY2xhcmF0aW9uIGluaXRfZGVjbGFy
YXRvcl9saXN0CisKKyV0eXBlIDxpbnRlcm0+IHBhcmFtZXRlcl9kZWNsYXJhdGlvbiBwYXJhbWV0
ZXJfZGVjbGFyYXRvciBwYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIKKyV0eXBlIDxpbnRlcm0ucXVh
bGlmaWVyPiBwYXJhbWV0ZXJfcXVhbGlmaWVyCisKKyV0eXBlIDxpbnRlcm0ucHJlY2lzaW9uPiBw
cmVjaXNpb25fcXVhbGlmaWVyCisldHlwZSA8aW50ZXJtLnR5cGU+IHR5cGVfcXVhbGlmaWVyIGZ1
bGx5X3NwZWNpZmllZF90eXBlIHR5cGVfc3BlY2lmaWVyCisldHlwZSA8aW50ZXJtLnR5cGU+IHR5
cGVfc3BlY2lmaWVyX25vX3ByZWMgdHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkKKyV0eXBlIDxpbnRl
cm0udHlwZT4gc3RydWN0X3NwZWNpZmllcgorJXR5cGUgPGludGVybS5maWVsZD4gc3RydWN0X2Rl
Y2xhcmF0b3IKKyV0eXBlIDxpbnRlcm0uZmllbGRMaXN0PiBzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0
IHN0cnVjdF9kZWNsYXJhdGlvbiBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdAorJXR5cGUgPGludGVy
bS5mdW5jdGlvbj4gZnVuY3Rpb25faGVhZGVyIGZ1bmN0aW9uX2RlY2xhcmF0b3IgZnVuY3Rpb25f
aWRlbnRpZmllcgorJXR5cGUgPGludGVybS5mdW5jdGlvbj4gZnVuY3Rpb25faGVhZGVyX3dpdGhf
cGFyYW1ldGVycyBmdW5jdGlvbl9jYWxsX2hlYWRlcgorJXR5cGUgPGludGVybT4gZnVuY3Rpb25f
Y2FsbF9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIGZ1bmN0aW9uX2NhbGxfaGVhZGVyX25vX3BhcmFt
ZXRlcnMgZnVuY3Rpb25fY2FsbF9nZW5lcmljIGZ1bmN0aW9uX3Byb3RvdHlwZQorJXR5cGUgPGlu
dGVybT4gZnVuY3Rpb25fY2FsbF9vcl9tZXRob2QKKworJXN0YXJ0IHRyYW5zbGF0aW9uX3VuaXQK
KyUlCisKK2lkZW50aWZpZXIKKyAgICA6IElERU5USUZJRVIKKyAgICB8IFRZUEVfTkFNRQorCit2
YXJpYWJsZV9pZGVudGlmaWVyCisgICAgOiBJREVOVElGSUVSIHsKKyAgICAgICAgLy8gVGhlIHN5
bWJvbCB0YWJsZSBzZWFyY2ggd2FzIGRvbmUgaW4gdGhlIGxleGljYWwgcGhhc2UKKyAgICAgICAg
Y29uc3QgVFN5bWJvbCAqc3ltYm9sID0gJDEuc3ltYm9sOworICAgICAgICBjb25zdCBUVmFyaWFi
bGUgKnZhcmlhYmxlID0gMDsKKworICAgICAgICBpZiAoIXN5bWJvbCkKKyAgICAgICAgeworICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCAkMS5z
dHJpbmctPmNfc3RyKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKCFzeW1ib2wtPmlzVmFyaWFibGUoKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJ2YXJpYWJsZSBleHBlY3RlZCIsICQxLnN0
cmluZy0+Y19zdHIoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB2YXJpYWJsZSA9IHN0YXRp
Y19jYXN0PGNvbnN0IFRWYXJpYWJsZSo+KHN5bWJvbCk7CisKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbih2YXJpYWJsZS0+Z2V0TmFtZSgpKSAmJgorICAg
ICAgICAgICAgICAgICF2YXJpYWJsZS0+Z2V0RXh0ZW5zaW9uKCkuZW1wdHkoKSAmJgorICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soQDEsIHZhcmlhYmxlLT5nZXRF
eHRlbnNpb24oKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCF2YXJpYWJs
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgVFR5cGUgdHlwZShFYnRGbG9hdCwgRWJwVW5kZWZp
bmVkKTsKKyAgICAgICAgICAgIFRWYXJpYWJsZSAqZmFrZVZhcmlhYmxlID0gbmV3IFRWYXJpYWJs
ZSgkMS5zdHJpbmcsIHR5cGUpOworICAgICAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUuaW5z
ZXJ0KCpmYWtlVmFyaWFibGUpOworICAgICAgICAgICAgdmFyaWFibGUgPSBmYWtlVmFyaWFibGU7
CisgICAgICAgIH0KKworICAgICAgICBpZiAodmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZp
ZXIoKSA9PSBFdnFDb25zdCkKKyAgICAgICAgeworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiog
Y29uc3RBcnJheSA9IHZhcmlhYmxlLT5nZXRDb25zdFBvaW50ZXIoKTsKKyAgICAgICAgICAgIFRU
eXBlIHQodmFyaWFibGUtPmdldFR5cGUoKSk7CisgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXksIHQsIEAxKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0TmFtZSgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlh
YmxlLT5nZXRUeXBlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQDEpOworICAgICAgICB9CisKKyAgICAgICAgLy8gZG9uJ3QgZGVsZXRlICQxLnN0
cmluZywgaXQncyB1c2VkIGJ5IGVycm9yIHJlY292ZXJ5LCBhbmQgdGhlIHBvb2wKKyAgICAgICAg
Ly8gcG9wIHdpbGwgcmVjbGFpbSB0aGUgbWVtb3J5CisgICAgfQorICAgIDsKKworcHJpbWFyeV9l
eHByZXNzaW9uCisgICAgOiB2YXJpYWJsZV9pZGVudGlmaWVyIHsKKyAgICAgICAgJCQgPSAkMTsK
KyAgICB9CisgICAgfCBJTlRDT05TVEFOVCB7CisgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9u
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgdW5pb25BcnJheS0+c2V0SUNv
bnN0KCQxLmkpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFu
dFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCks
IEAxKTsKKyAgICB9CisgICAgfCBGTE9BVENPTlNUQU5UIHsKKyAgICAgICAgQ29uc3RhbnRVbmlv
biAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICB1bmlvbkFycmF5
LT5zZXRGQ29uc3QoJDEuZik7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwg
RXZxQ29uc3QpLCBAMSk7CisgICAgfQorICAgIHwgQk9PTENPTlNUQU5UIHsKKyAgICAgICAgQ29u
c3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICB1
bmlvbkFycmF5LT5zZXRCQ29uc3QoJDEuYik7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5k
ZWZpbmVkLCBFdnFDb25zdCksIEAxKTsKKyAgICB9CisgICAgfCBMRUZUX1BBUkVOIGV4cHJlc3Np
b24gUklHSFRfUEFSRU4geworICAgICAgICAkJCA9ICQyOworICAgIH0KKyAgICA7CisKK3Bvc3Rm
aXhfZXhwcmVzc2lvbgorICAgIDogcHJpbWFyeV9leHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAk
MTsKKyAgICB9CisgICAgfCBwb3N0Zml4X2V4cHJlc3Npb24gTEVGVF9CUkFDS0VUIGludGVnZXJf
ZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRJbmRl
eEV4cHJlc3Npb24oJDEsIEAyLCAkMyk7CisgICAgfQorICAgIHwgZnVuY3Rpb25fY2FsbCB7Cisg
ICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgcG9zdGZpeF9leHByZXNzaW9uIERPVCBpZGVu
dGlmaWVyIHsKKyAgICAgICAgaWYgKCQxLT5pc0FycmF5KCkpIHsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKEAzLCAiY2Fubm90IGFwcGx5IGRvdCBvcGVyYXRvciB0byBhbiBhcnJheSIsICIu
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoJDEtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgIFRWZWN0b3JGaWVsZHMgZmllbGRz
OworICAgICAgICAgICAgaWYgKCEgY29udGV4dC0+cGFyc2VWZWN0b3JGaWVsZHMoKiQzLnN0cmlu
ZywgJDEtPmdldE5vbWluYWxTaXplKCksIGZpZWxkcywgQDMpKSB7CisgICAgICAgICAgICAgICAg
ZmllbGRzLm51bSA9IDE7CisgICAgICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbMF0gPSAwOwor
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCQxLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsg
Ly8gY29uc3RhbnQgZm9sZGluZyBmb3IgdmVjdG9yIGZpZWxkcworICAgICAgICAgICAgICAgICQk
ID0gY29udGV4dC0+YWRkQ29uc3RWZWN0b3JOb2RlKGZpZWxkcywgJDEsIEAzKTsKKyAgICAgICAg
ICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICAgICAgICAgICQkID0gJDE7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoVFR5
cGUoJDEtPmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCksIEV2cUNvbnN0LCAoaW50
KSAoKiQzLnN0cmluZykuc2l6ZSgpKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIFRTdHJpbmcgdmVjdG9yU3RyaW5nID0gKiQzLnN0cmluZzsKKyAgICAgICAgICAgICAg
ICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN3aXp6bGUo
ZmllbGRzLCBAMyk7CisgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkSW5kZXgoRU9wVmVjdG9yU3dpenpsZSwgJDEsIGluZGV4LCBAMik7CisgICAgICAgICAgICAg
ICAgJCQtPnNldFR5cGUoVFR5cGUoJDEtPmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9u
KCksIEV2cVRlbXBvcmFyeSwgKGludCkgdmVjdG9yU3RyaW5nLnNpemUoKSkpOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgaWYgKCQxLT5pc01hdHJpeCgpKSB7CisgICAgICAgICAgICBU
TWF0cml4RmllbGRzIGZpZWxkczsKKyAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnBhcnNlTWF0
cml4RmllbGRzKCokMy5zdHJpbmcsICQxLT5nZXROb21pbmFsU2l6ZSgpLCBmaWVsZHMsIEAzKSkg
eworICAgICAgICAgICAgICAgIGZpZWxkcy53aG9sZVJvdyA9IGZhbHNlOworICAgICAgICAgICAg
ICAgIGZpZWxkcy53aG9sZUNvbCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGZpZWxkcy5yb3cg
PSAwOworICAgICAgICAgICAgICAgIGZpZWxkcy5jb2wgPSAwOworICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGZpZWxk
cy53aG9sZVJvdyB8fCBmaWVsZHMud2hvbGVDb2wpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcihAMiwgIiBub24tc2NhbGFyIGZpZWxkcyBub3QgaW1wbGVtZW50ZWQgeWV0IiwgIi4i
KTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAg
Q29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAg
ICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdCgwKTsKKyAgICAgICAgICAgICAgICBUSW50
ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24o
dW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDMpOwor
ICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcElu
ZGV4RGlyZWN0LCAkMSwgaW5kZXgsIEAyKTsKKyAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShU
VHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSxFdnFUZW1wb3Jhcnks
ICQxLT5nZXROb21pbmFsU2l6ZSgpKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsK
KyAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoZmllbGRzLmNvbCAqICQxLT5n
ZXROb21pbmFsU2l6ZSgpICsgZmllbGRzLnJvdyk7CisgICAgICAgICAgICAgICAgVEludGVybVR5
cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9u
QXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAzKTsKKyAgICAg
ICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERp
cmVjdCwgJDEsIGluZGV4LCBAMik7CisgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoVFR5cGUo
JDEtPmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCkpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIGlmICgkMS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7Cisg
ICAgICAgICAgICBib29sIGZpZWxkRm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgIGNvbnN0IFRG
aWVsZExpc3QmIGZpZWxkcyA9ICQxLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCktPmZpZWxkcygpOwor
ICAgICAgICAgICAgdW5zaWduZWQgaW50IGk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwg
ZmllbGRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZpZWxkc1tpXS0+bmFt
ZSgpID09ICokMy5zdHJpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgZmllbGRGb3VuZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmaWVsZEZvdW5kKSB7CisgICAgICAgICAgICAgICAg
aWYgKCQxLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsKKyAgICAgICAg
ICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRDb25zdFN0cnVjdCgqJDMuc3RyaW5nLCAkMSwg
QDIpOworICAgICAgICAgICAgICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgJCQg
PSAkMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKCpmaWVsZHNbaV0tPnR5cGUoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UgdGhlIHF1YWxpZmllciBvZiB0aGUg
cmV0dXJuIHR5cGUsIG5vdCBvZiB0aGUgc3RydWN0dXJlIGZpZWxkCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBhcyB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24gaXMgc2hhcmVkIGJldHdlZW4g
dmFyaW91cyBzdHJ1Y3R1cmVzLgorICAgICAgICAgICAgICAgICAgICAgICAgJCQtPmdldFR5cGVQ
b2ludGVyKCktPnNldFF1YWxpZmllcihFdnFDb25zdCk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVu
aW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAg
ICAgIHVuaW9uQXJyYXktPnNldElDb25zdChpKTsKKyAgICAgICAgICAgICAgICAgICAgVEludGVy
bVR5cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVu
aW9uQXJyYXksICpmaWVsZHNbaV0tPnR5cGUoKSwgQDMpOworICAgICAgICAgICAgICAgICAgICAk
JCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdFN0cnVjdCwg
JDEsIGluZGV4LCBAMik7CisgICAgICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKCpmaWVsZHNb
aV0tPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgIiBubyBzdWNoIGZpZWxkIGluIHN0cnVj
dHVyZSIsICQzLnN0cmluZy0+Y19zdHIoKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICAgICAgICAgICQkID0gJDE7CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgIiBmaWVsZCBzZWxlY3Rp
b24gcmVxdWlyZXMgc3RydWN0dXJlLCB2ZWN0b3IsIG9yIG1hdHJpeCBvbiBsZWZ0IGhhbmQgc2lk
ZSIsICQzLnN0cmluZy0+Y19zdHIoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgICAgICAkJCA9ICQxOworICAgICAgICB9CisgICAgICAgIC8vIGRvbid0IGRlbGV0
ZSAkMy5zdHJpbmcsIGl0J3MgZnJvbSB0aGUgcG9vbAorICAgIH0KKyAgICB8IHBvc3RmaXhfZXhw
cmVzc2lvbiBJTkNfT1AgeworICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjayhA
MiwgIisrIiwgJDEpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAk
JCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdEluY3JlbWVudCwg
JDEsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7Cisg
ICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoQDIsICIrKyIsICQxLT5nZXRDb21wbGV0
ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAg
ICQkID0gJDE7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBwb3N0Zml4X2V4cHJlc3Npb24gREVD
X09QIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soQDIsICItLSIsICQx
KSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFBvc3REZWNyZW1lbnQsICQxLCBAMiwgY29u
dGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAg
Y29udGV4dC0+dW5hcnlPcEVycm9yKEAyLCAiLS0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7
CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9ICQxOwor
ICAgICAgICB9CisgICAgfQorICAgIDsKKworaW50ZWdlcl9leHByZXNzaW9uCisgICAgOiBleHBy
ZXNzaW9uIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPmludGVnZXJFcnJvckNoZWNrKCQxLCAiW10i
KSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQgPSAkMTsKKyAg
ICB9CisgICAgOworCitmdW5jdGlvbl9jYWxsCisgICAgOiBmdW5jdGlvbl9jYWxsX29yX21ldGhv
ZCB7CisgICAgICAgIFRGdW5jdGlvbiogZm5DYWxsID0gJDEuZnVuY3Rpb247CisgICAgICAgIFRP
cGVyYXRvciBvcCA9IGZuQ2FsbC0+Z2V0QnVpbHRJbk9wKCk7CisKKyAgICAgICAgaWYgKG9wICE9
IEVPcE51bGwpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBUaGVu
IHRoaXMgc2hvdWxkIGJlIGEgY29uc3RydWN0b3IuCisgICAgICAgICAgICAvLyBEb24ndCBnbyB0
aHJvdWdoIHRoZSBzeW1ib2wgdGFibGUgZm9yIGNvbnN0cnVjdG9ycy4KKyAgICAgICAgICAgIC8v
IFRoZWlyIHBhcmFtZXRlcnMgd2lsbCBiZSB2ZXJpZmllZCBhbGdvcml0aG1pY2FsbHkuCisgICAg
ICAgICAgICAvLworICAgICAgICAgICAgVFR5cGUgdHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQp
OyAgLy8gdXNlIHRoaXMgdG8gZ2V0IHRoZSB0eXBlIGJhY2sKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5jb25zdHJ1Y3RvckVycm9yQ2hlY2soQDEsICQxLmludGVybU5vZGUsICpmbkNhbGwsIG9w
LCAmdHlwZSkpIHsKKyAgICAgICAgICAgICAgICAkJCA9IDA7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gSXQncyBhIGNvbnN0cnVj
dG9yLCBvZiB0eXBlICd0eXBlJy4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAg
ICQkID0gY29udGV4dC0+YWRkQ29uc3RydWN0b3IoJDEuaW50ZXJtTm9kZSwgJnR5cGUsIG9wLCBm
bkNhbGwsIEAxKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCQkID09IDApIHsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgJCQg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IoMCwgb3AsIEAxKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICQkLT5zZXRUeXBlKHR5cGUpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIE5vdCBhIGNvbnN0cnVjdG9y
LiAgRmluZCBpdCBpbiB0aGUgc3ltYm9sIHRhYmxlLgorICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgIGNvbnN0IFRGdW5jdGlvbiogZm5DYW5kaWRhdGU7CisgICAgICAgICAgICBib29sIGJ1aWx0
SW47CisgICAgICAgICAgICBmbkNhbmRpZGF0ZSA9IGNvbnRleHQtPmZpbmRGdW5jdGlvbihAMSwg
Zm5DYWxsLCAmYnVpbHRJbik7CisgICAgICAgICAgICBpZiAoZm5DYW5kaWRhdGUpIHsKKyAgICAg
ICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIEEgZGVjbGFyZWQgZnVuY3Rpb24uCisg
ICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICBpZiAoYnVpbHRJbiAmJiAhZm5DYW5k
aWRhdGUtPmdldEV4dGVuc2lvbigpLmVtcHR5KCkgJiYKKyAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjayhAMSwgZm5DYW5kaWRhdGUtPmdldEV4dGVuc2lvbigp
KSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIG9wID0gZm5DYW5kaWRhdGUtPmdldEJ1aWx0SW5PcCgp
OworICAgICAgICAgICAgICAgIGlmIChidWlsdEluICYmIG9wICE9IEVPcE51bGwpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gQSBmdW5jdGlvbiBjYWxs
IG1hcHBlZCB0byBhIGJ1aWx0LWluIG9wZXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgICAgICAgICAgaWYgKGZuQ2FuZGlkYXRlLT5nZXRQYXJhbUNvdW50KCkgPT0g
MSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFRyZWF0IGl0IGxpa2UgYSBidWlsdC1pbiB1bmFyeSBvcGVyYXRvci4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgob3AsICQxLmludGVybU5vZGUsIEAxLCBjb250ZXh0LT5z
eW1ib2xUYWJsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJCQgPT0gMCkgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJl
YW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJidWls
dCBpbiB1bmFyeSBvcGVyYXRvciBmdW5jdGlvbi4gIFR5cGU6ICIgPDwgc3RhdGljX2Nhc3Q8VElu
dGVybVR5cGVkKj4oJDEuaW50ZXJtTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3Ry
ZWFtLnN0cigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQx
LmludGVybU5vZGUtPmdldExpbmUoKSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCAiSW50ZXJuYWwg
RXJyb3IiLCBleHRyYUluZm8uY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WVlFUlJPUjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKCQxLmludGVybUFnZ3JlZ2F0ZSwgb3AsIEAxKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIFRoaXMgaXMgYSByZWFsIGZ1bmN0aW9uIGNhbGwKKworICAgICAgICAgICAg
ICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcigk
MS5pbnRlcm1BZ2dyZWdhdGUsIEVPcEZ1bmN0aW9uQ2FsbCwgQDEpOworICAgICAgICAgICAgICAg
ICAgICAkJC0+c2V0VHlwZShmbkNhbmRpZGF0ZS0+Z2V0UmV0dXJuVHlwZSgpKTsKKworICAgICAg
ICAgICAgICAgICAgICAvLyB0aGlzIGlzIGhvdyB3ZSBrbm93IHdoZXRoZXIgdGhlIGdpdmVuIGZ1
bmN0aW9uIGlzIGEgYnVpbHRJbiBmdW5jdGlvbiBvciBhIHVzZXIgZGVmaW5lZCBmdW5jdGlvbgor
ICAgICAgICAgICAgICAgICAgICAvLyBpZiBidWlsdEluID09IGZhbHNlLCBpdCdzIGEgdXNlckRl
ZmluZWQgLT4gY291bGQgYmUgYW4gb3ZlcmxvYWRlZCBidWlsdEluIGZ1bmN0aW9uIGFsc28KKyAg
ICAgICAgICAgICAgICAgICAgLy8gaWYgYnVpbHRJbiA9PSB0cnVlLCBpdCdzIGRlZmluaXRlbHkg
YSBidWlsdEluIGZ1bmN0aW9uIHdpdGggRU9wTnVsbAorICAgICAgICAgICAgICAgICAgICBpZiAo
IWJ1aWx0SW4pCisgICAgICAgICAgICAgICAgICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+
c2V0VXNlckRlZmluZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgJCQtPmdldEFzQWdncmVnYXRl
KCktPnNldE5hbWUoZm5DYW5kaWRhdGUtPmdldE1hbmdsZWROYW1lKCkpOworCisgICAgICAgICAg
ICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbDsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBmbkNhbmRpZGF0ZS0+Z2V0UGFyYW1Db3VudCgpOyArK2kpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHF1YWwgPSBmbkNhbmRpZGF0ZS0+Z2V0UGFyYW0oaSkudHlwZS0+
Z2V0UXVhbGlmaWVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVhbCA9PSBFdnFP
dXQgfHwgcXVhbCA9PSBFdnFJbk91dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCQkLT5nZXRMaW5lKCksICJhc3NpZ24iLCAkJC0+
Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKVtpXS0+Z2V0QXNUeXBlZCgpKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5pbnRlcm1Ob2Rl
LT5nZXRMaW5lKCksICJDb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFzc2VkIGZvciAnb3V0JyBv
ciAnaW5vdXQnIHBhcmFtZXRlcnMuIiwgIkVycm9yIik7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoZm5DYW5kaWRhdGUt
PmdldFJldHVyblR5cGUoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IC8vIGVycm9yIG1lc3NhZ2Ugd2FzIHB1dCBvdXQgYnkgUGFGaW5kRnVuY3Rpb24oKQorICAgICAg
ICAgICAgICAgIC8vIFB1dCBvbiBhIGR1bW15IG5vZGUgZm9yIGVycm9yIHJlY292ZXJ5CisgICAg
ICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
WzFdOworICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgwLjBmKTsKKyAgICAg
ICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVu
aW9uQXJyYXksIFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDEpOwor
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBkZWxldGUgZm5DYWxsOworICAgIH0KKyAgICA7CisKK2Z1bmN0aW9uX2Nh
bGxfb3JfbWV0aG9kCisgICAgOiBmdW5jdGlvbl9jYWxsX2dlbmVyaWMgeworICAgICAgICAkJCA9
ICQxOworICAgIH0KKyAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBET1QgZnVuY3Rpb25fY2FsbF9n
ZW5lcmljIHsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoQDMsICJtZXRob2RzIGFyZSBub3Qgc3Vw
cG9ydGVkIiwgIiIpOworICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQkID0g
JDM7CisgICAgfQorICAgIDsKKworZnVuY3Rpb25fY2FsbF9nZW5lcmljCisgICAgOiBmdW5jdGlv
bl9jYWxsX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMgUklHSFRfUEFSRU4geworICAgICAgICAkJCA9
ICQxOworICAgIH0KKyAgICB8IGZ1bmN0aW9uX2NhbGxfaGVhZGVyX25vX3BhcmFtZXRlcnMgUklH
SFRfUEFSRU4geworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICA7CisKK2Z1bmN0aW9uX2Nh
bGxfaGVhZGVyX25vX3BhcmFtZXRlcnMKKyAgICA6IGZ1bmN0aW9uX2NhbGxfaGVhZGVyIFZPSURf
VFlQRSB7CisgICAgICAgICQkLmZ1bmN0aW9uID0gJDE7CisgICAgICAgICQkLmludGVybU5vZGUg
PSAwOworICAgIH0KKyAgICB8IGZ1bmN0aW9uX2NhbGxfaGVhZGVyIHsKKyAgICAgICAgJCQuZnVu
Y3Rpb24gPSAkMTsKKyAgICAgICAgJCQuaW50ZXJtTm9kZSA9IDA7CisgICAgfQorICAgIDsKKwor
ZnVuY3Rpb25fY2FsbF9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzCisgICAgOiBmdW5jdGlvbl9jYWxs
X2hlYWRlciBhc3NpZ25tZW50X2V4cHJlc3Npb24geworICAgICAgICBUUGFyYW1ldGVyIHBhcmFt
ID0geyAwLCBuZXcgVFR5cGUoJDItPmdldFR5cGUoKSkgfTsKKyAgICAgICAgJDEtPmFkZFBhcmFt
ZXRlcihwYXJhbSk7CisgICAgICAgICQkLmZ1bmN0aW9uID0gJDE7CisgICAgICAgICQkLmludGVy
bU5vZGUgPSAkMjsKKyAgICB9CisgICAgfCBmdW5jdGlvbl9jYWxsX2hlYWRlcl93aXRoX3BhcmFt
ZXRlcnMgQ09NTUEgYXNzaWdubWVudF9leHByZXNzaW9uIHsKKyAgICAgICAgVFBhcmFtZXRlciBw
YXJhbSA9IHsgMCwgbmV3IFRUeXBlKCQzLT5nZXRUeXBlKCkpIH07CisgICAgICAgICQxLmZ1bmN0
aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW0pOworICAgICAgICAkJC5mdW5jdGlvbiA9ICQxLmZ1bmN0
aW9uOworICAgICAgICAkJC5pbnRlcm1Ob2RlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dB
Z2dyZWdhdGUoJDEuaW50ZXJtTm9kZSwgJDMsIEAyKTsKKyAgICB9CisgICAgOworCitmdW5jdGlv
bl9jYWxsX2hlYWRlcgorICAgIDogZnVuY3Rpb25faWRlbnRpZmllciBMRUZUX1BBUkVOIHsKKyAg
ICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgOworCisvLyBHcmFtbWFyIE5vdGU6ICBDb25zdHJ1
Y3RvcnMgbG9vayBsaWtlIGZ1bmN0aW9ucywgYnV0IGFyZSByZWNvZ25pemVkIGFzIHR5cGVzLgor
CitmdW5jdGlvbl9pZGVudGlmaWVyCisgICAgOiB0eXBlX3NwZWNpZmllcl9ub25hcnJheSB7Cisg
ICAgICAgIC8vCisgICAgICAgIC8vIENvbnN0cnVjdG9yCisgICAgICAgIC8vCisgICAgICAgIFRP
cGVyYXRvciBvcCA9IEVPcE51bGw7CisgICAgICAgIGlmICgkMS51c2VyRGVmKSB7CisgICAgICAg
ICAgICBvcCA9IEVPcENvbnN0cnVjdFN0cnVjdDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAoJDEudHlwZSkgeworICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAg
ICAgICAgICAgICBpZiAoJDEubWF0cml4KSB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCgk
MS5zaXplKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBFT3BDb25zdHJ1Y3RN
YXQyOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1
Y3RNYXQzOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBFT3BDb25z
dHJ1Y3RNYXQ0OyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2goJDEuc2l6ZSkgeworICAgICAg
ICAgICAgICAgICAgICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7IGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0VmVjMjsgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0VmVjMzsgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0VmVjNDsgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAgICAgICAg
c3dpdGNoKCQxLnNpemUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDE6IG9wID0gRU9wQ29uc3Ry
dWN0SW50OyAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBFT3BDb25zdHJ1
Y3RJVmVjMjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVj
dElWZWMzOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0
SVZlYzQ7IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICAgICAgICBzd2l0Y2goJDEuc2l6
ZSkgeworICAgICAgICAgICAgICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RCb29sOyAgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdEJWZWMyOyBicmVh
azsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0QlZlYzM7IGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RCVmVjNDsgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ZGVmYXVsdDogYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob3AgPT0gRU9w
TnVsbCkgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAiY2Fubm90IGNvbnN0
cnVjdCB0aGlzIHR5cGUiLCBnZXRCYXNpY1N0cmluZygkMS50eXBlKSk7CisgICAgICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICQxLnR5cGUgPSBFYnRGbG9h
dDsKKyAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIFRTdHJpbmcgdGVtcFN0cmluZzsKKyAgICAgICAgVFR5cGUg
dHlwZSgkMSk7CisgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCZ0
ZW1wU3RyaW5nLCB0eXBlLCBvcCk7CisgICAgICAgICQkID0gZnVuY3Rpb247CisgICAgfQorICAg
IHwgSURFTlRJRklFUiB7CisgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2so
QDEsICokMS5zdHJpbmcpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICBUVHlwZSB0eXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7CisgICAgICAgIFRGdW5jdGlvbiAq
ZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCQxLnN0cmluZywgdHlwZSk7CisgICAgICAgICQkID0g
ZnVuY3Rpb247CisgICAgfQorICAgIDsKKwordW5hcnlfZXhwcmVzc2lvbgorICAgIDogcG9zdGZp
eF9leHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgfCBJTkNfT1AgdW5h
cnlfZXhwcmVzc2lvbiB7CisgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKEAx
LCAiKysiLCAkMikpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQk
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQcmVJbmNyZW1lbnQsICQy
LCBAMSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAg
ICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKEAxLCAiKysiLCAkMi0+Z2V0Q29tcGxldGVT
dHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAk
JCA9ICQyOworICAgICAgICB9CisgICAgfQorICAgIHwgREVDX09QIHVuYXJ5X2V4cHJlc3Npb24g
eworICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjayhAMSwgIi0tIiwgJDIpKQor
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAkJCA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUHJlRGVjcmVtZW50LCAkMiwgQDEsIGNvbnRleHQt
PnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIGNvbnRl
eHQtPnVuYXJ5T3BFcnJvcihAMSwgIi0tIiwgJDItPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQgPSAkMjsKKyAgICAg
ICAgfQorICAgIH0KKyAgICB8IHVuYXJ5X29wZXJhdG9yIHVuYXJ5X2V4cHJlc3Npb24geworICAg
ICAgICBpZiAoJDEub3AgIT0gRU9wTnVsbCkgeworICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKCQxLm9wLCAkMiwgQDEsIGNvbnRleHQtPnN5bWJvbFRh
YmxlKTsKKyAgICAgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciogZXJyb3JPcCA9ICIiOworICAgICAgICAgICAgICAgIHN3aXRjaCgkMS5vcCkgeworICAg
ICAgICAgICAgICAgIGNhc2UgRU9wTmVnYXRpdmU6ICAgZXJyb3JPcCA9ICItIjsgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OiBlcnJvck9wID0gIiEiOyBicmVhazsK
KyAgICAgICAgICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKEAxLCBlcnJvck9wLCAkMi0+Z2V0Q29t
cGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICAgICAgICAgICQkID0gJDI7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgJCQgPSAkMjsKKyAgICB9CisgICAgOworLy8gR3JhbW1hciBOb3RlOiAgTm8gdHJh
ZGl0aW9uYWwgc3R5bGUgdHlwZSBjYXN0cy4KKwordW5hcnlfb3BlcmF0b3IKKyAgICA6IFBMVVMg
IHsgJCQub3AgPSBFT3BOdWxsOyB9CisgICAgfCBEQVNIICB7ICQkLm9wID0gRU9wTmVnYXRpdmU7
IH0KKyAgICB8IEJBTkcgIHsgJCQub3AgPSBFT3BMb2dpY2FsTm90OyB9CisgICAgOworLy8gR3Jh
bW1hciBOb3RlOiAgTm8gJyonIG9yICcmJyB1bmFyeSBvcHMuICBQb2ludGVycyBhcmUgbm90IHN1
cHBvcnRlZC4KKworbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbgorICAgIDogdW5hcnlfZXhwcmVz
c2lvbiB7ICQkID0gJDE7IH0KKyAgICB8IG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24gU1RBUiB1
bmFyeV9leHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
QmluYXJ5TWF0aChFT3BNdWwsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAg
ICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3Io
QDIsICIqIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygp
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkID0gJDE7
CisgICAgICAgIH0KKyAgICB9CisgICAgfCBtdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uIFNMQVNI
IHVuYXJ5X2V4cHJlc3Npb24geworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRCaW5hcnlNYXRoKEVPcERpdiwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOwor
ICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJv
cihAMiwgIi8iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5n
KCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQgPSAk
MTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisKK2FkZGl0aXZlX2V4cHJlc3Npb24KKyAgICA6
IG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAgfCBhZGRpdGl2ZV9l
eHByZXNzaW9uIFBMVVMgbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wQWRkLCAkMSwgJDMsIEAyLCBj
b250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAg
ICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiKyIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygp
LCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICAkJCA9ICQxOworICAgICAgICB9CisgICAgfQorICAgIHwgYWRkaXRp
dmVfZXhwcmVzc2lvbiBEQVNIIG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24geworICAgICAgICAk
JCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcFN1YiwgJDEsICQzLCBA
MiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAg
ICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIi0iLCAkMS0+Z2V0Q29tcGxldGVTdHJp
bmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisK
K3NoaWZ0X2V4cHJlc3Npb24KKyAgICA6IGFkZGl0aXZlX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9
CisgICAgOworCityZWxhdGlvbmFsX2V4cHJlc3Npb24KKyAgICA6IHNoaWZ0X2V4cHJlc3Npb24g
eyAkJCA9ICQxOyB9CisgICAgfCByZWxhdGlvbmFsX2V4cHJlc3Npb24gTEVGVF9BTkdMRSBzaGlm
dF9leHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmlu
YXJ5TWF0aChFT3BMZXNzVGhhbiwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOwor
ICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJv
cihAMiwgIjwiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5n
KCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3Rh
bnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAg
dW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICQkID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwg
RWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IHJl
bGF0aW9uYWxfZXhwcmVzc2lvbiBSSUdIVF9BTkdMRSBzaGlmdF9leHByZXNzaW9uICB7CisgICAg
ICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wR3JlYXRlclRo
YW4sICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09
IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICI+IiwgJDEtPmdl
dENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJy
YXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJD
b25zdChmYWxzZSk7CisgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZx
Q29uc3QpLCBAMik7CisgICAgICAgIH0KKyAgICB9CisgICAgfCByZWxhdGlvbmFsX2V4cHJlc3Np
b24gTEVfT1Agc2hpZnRfZXhwcmVzc2lvbiAgeworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExlc3NUaGFuRXF1YWwsICQxLCAkMywgQDIsIGNvbnRl
eHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIGNv
bnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICI8PSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAk
My0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAg
ICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFy
cmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDIpOworICAgICAg
ICB9CisgICAgfQorICAgIHwgcmVsYXRpb25hbF9leHByZXNzaW9uIEdFX09QIHNoaWZ0X2V4cHJl
c3Npb24gIHsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0
aChFT3BHcmVhdGVyVGhhbkVxdWFsLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7
CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVy
cm9yKEAyLCAiPj0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3Ry
aW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29u
c3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAg
ICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICQkID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9v
bCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7
CisKK2VxdWFsaXR5X2V4cHJlc3Npb24KKyAgICA6IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiB7ICQk
ID0gJDE7IH0KKyAgICB8IGVxdWFsaXR5X2V4cHJlc3Npb24gRVFfT1AgcmVsYXRpb25hbF9leHBy
ZXNzaW9uICB7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1h
dGgoRU9wRXF1YWwsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAg
aWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICI9
PSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Cisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9u
ICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFy
cmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRl
ZmluZWQsIEV2cUNvbnN0KSwgQDIpOworICAgICAgICB9CisgICAgfQorICAgIHwgZXF1YWxpdHlf
ZXhwcmVzc2lvbiBORV9PUCByZWxhdGlvbmFsX2V4cHJlc3Npb24geworICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcE5vdEVxdWFsLCAkMSwgJDMsIEAy
LCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAg
ICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiIT0iLCAkMS0+Z2V0Q29tcGxldGVTdHJp
bmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsK
KyAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24o
dW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAyKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICA7CisKK2FuZF9leHByZXNzaW9uCisgICAgOiBlcXVhbGl0
eV9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIDsKKworZXhjbHVzaXZlX29yX2V4cHJlc3Np
b24KKyAgICA6IGFuZF9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIDsKKworaW5jbHVzaXZl
X29yX2V4cHJlc3Npb24KKyAgICA6IGV4Y2x1c2l2ZV9vcl9leHByZXNzaW9uIHsgJCQgPSAkMTsg
fQorICAgIDsKKworbG9naWNhbF9hbmRfZXhwcmVzc2lvbgorICAgIDogaW5jbHVzaXZlX29yX2V4
cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAgfCBsb2dpY2FsX2FuZF9leHByZXNzaW9uIEFORF9P
UCBpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbEFuZCwgJDEsICQzLCBAMiwgY29udGV4dC0+
c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgY29udGV4
dC0+YmluYXJ5T3BFcnJvcihAMiwgIiYmIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5n
ZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsx
XTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAg
ICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXks
IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMik7CisgICAgICAgIH0K
KyAgICB9CisgICAgOworCitsb2dpY2FsX3hvcl9leHByZXNzaW9uCisgICAgOiBsb2dpY2FsX2Fu
ZF9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIHwgbG9naWNhbF94b3JfZXhwcmVzc2lvbiBY
T1JfT1AgbG9naWNhbF9hbmRfZXhwcmVzc2lvbiAgeworICAgICAgICAkJCA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxYb3IsICQxLCAkMywgQDIsIGNvbnRl
eHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIGNv
bnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICJeXiIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAk
My0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAg
ICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFy
cmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDIpOworICAgICAg
ICB9CisgICAgfQorICAgIDsKKworbG9naWNhbF9vcl9leHByZXNzaW9uCisgICAgOiBsb2dpY2Fs
X3hvcl9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIHwgbG9naWNhbF9vcl9leHByZXNzaW9u
IE9SX09QIGxvZ2ljYWxfeG9yX2V4cHJlc3Npb24gIHsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2FsT3IsICQxLCAkMywgQDIsIGNvbnRl
eHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIGNv
bnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICJ8fCIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAk
My0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAg
ICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFy
cmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDIpOworICAgICAg
ICB9CisgICAgfQorICAgIDsKKworY29uZGl0aW9uYWxfZXhwcmVzc2lvbgorICAgIDogbG9naWNh
bF9vcl9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIHwgbG9naWNhbF9vcl9leHByZXNzaW9u
IFFVRVNUSU9OIGV4cHJlc3Npb24gQ09MT04gYXNzaWdubWVudF9leHByZXNzaW9uIHsKKyAgICAg
ICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2soQDIsICQxKSkKKyAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKKworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRT
ZWxlY3Rpb24oJDEsICQzLCAkNSwgQDIpOworICAgICAgICBpZiAoJDMtPmdldFR5cGUoKSAhPSAk
NS0+Z2V0VHlwZSgpKQorICAgICAgICAgICAgJCQgPSAwOworCisgICAgICAgIGlmICgkJCA9PSAw
KSB7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiOiIsICQzLT5nZXRD
b21wbGV0ZVN0cmluZygpLCAkNS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9ICQ1OworICAgICAgICB9CisgICAg
fQorICAgIDsKKworYXNzaWdubWVudF9leHByZXNzaW9uCisgICAgOiBjb25kaXRpb25hbF9leHBy
ZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIHwgdW5hcnlfZXhwcmVzc2lvbiBhc3NpZ25tZW50X29w
ZXJhdG9yIGFzc2lnbm1lbnRfZXhwcmVzc2lvbiB7CisgICAgICAgIGlmIChjb250ZXh0LT5sVmFs
dWVFcnJvckNoZWNrKEAyLCAiYXNzaWduIiwgJDEpKQorICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRBc3NpZ24oJDIu
b3AsICQxLCAkMywgQDIpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgY29u
dGV4dC0+YXNzaWduRXJyb3IoQDIsICJhc3NpZ24iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwg
JDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisKK2Fzc2ln
bm1lbnRfb3BlcmF0b3IKKyAgICA6IEVRVUFMICAgICAgICB7ICQkLm9wID0gRU9wQXNzaWduOyB9
CisgICAgfCBNVUxfQVNTSUdOICAgeyAkJC5vcCA9IEVPcE11bEFzc2lnbjsgfQorICAgIHwgRElW
X0FTU0lHTiAgIHsgJCQub3AgPSBFT3BEaXZBc3NpZ247IH0KKyAgICB8IEFERF9BU1NJR04gICB7
ICQkLm9wID0gRU9wQWRkQXNzaWduOyB9CisgICAgfCBTVUJfQVNTSUdOICAgeyAkJC5vcCA9IEVP
cFN1YkFzc2lnbjsgfQorICAgIDsKKworZXhwcmVzc2lvbgorICAgIDogYXNzaWdubWVudF9leHBy
ZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIENPTU1B
IGFzc2lnbm1lbnRfZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZENvbW1hKCQxLCAkMywgQDIpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAg
ICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIiwiLCAkMS0+Z2V0Q29tcGxldGVTdHJp
bmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICAgICAgJCQgPSAkMzsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisK
K2NvbnN0YW50X2V4cHJlc3Npb24KKyAgICA6IGNvbmRpdGlvbmFsX2V4cHJlc3Npb24geworICAg
ICAgICBpZiAoY29udGV4dC0+Y29uc3RFcnJvckNoZWNrKCQxKSkKKyAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgOworCitkZWNsYXJh
dGlvbgorICAgIDogZnVuY3Rpb25fcHJvdG90eXBlIFNFTUlDT0xPTiAgIHsKKyAgICAgICAgVEZ1
bmN0aW9uICZmdW5jdGlvbiA9ICooJDEuZnVuY3Rpb24pOworICAgICAgICAKKyAgICAgICAgVElu
dGVybUFnZ3JlZ2F0ZSAqcHJvdG90eXBlID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGU7CisgICAgICAg
IHByb3RvdHlwZS0+c2V0VHlwZShmdW5jdGlvbi5nZXRSZXR1cm5UeXBlKCkpOworICAgICAgICBw
cm90b3R5cGUtPnNldE5hbWUoZnVuY3Rpb24uZ2V0TmFtZSgpKTsKKyAgICAgICAgCisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpOyBpKyspCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRQYXJhbWV0ZXIgJnBhcmFtID0gZnVuY3Rpb24u
Z2V0UGFyYW0oaSk7CisgICAgICAgICAgICBpZiAocGFyYW0ubmFtZSAhPSAwKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIFRWYXJpYWJsZSB2YXJpYWJsZShwYXJhbS5uYW1lLCAqcGFy
YW0udHlwZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcHJvdG90eXBlID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUocHJvdG90eXBlLCBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLmdldFVuaXF1ZUlkKCksIHZhcmlhYmxlLmdl
dE5hbWUoKSwgdmFyaWFibGUuZ2V0VHlwZSgpLCBAMSksIEAxKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcm90b3R5cGUg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShwcm90b3R5cGUsIGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsICpwYXJhbS50eXBlLCBAMSksIEAxKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcHJvdG90eXBlLT5zZXRP
cChFT3BQcm90b3R5cGUpOworICAgICAgICAkJCA9IHByb3RvdHlwZTsKKworICAgICAgICBjb250
ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKKyAgICB9CisgICAgfCBpbml0X2RlY2xhcmF0b3JfbGlz
dCBTRU1JQ09MT04geworICAgICAgICBpZiAoJDEuaW50ZXJtQWdncmVnYXRlKQorICAgICAgICAg
ICAgJDEuaW50ZXJtQWdncmVnYXRlLT5zZXRPcChFT3BEZWNsYXJhdGlvbik7CisgICAgICAgICQk
ID0gJDEuaW50ZXJtQWdncmVnYXRlOworICAgIH0KKyAgICB8IFBSRUNJU0lPTiBwcmVjaXNpb25f
cXVhbGlmaWVyIHR5cGVfc3BlY2lmaWVyX25vX3ByZWMgU0VNSUNPTE9OIHsKKyAgICAgICAgaWYg
KCgkMiA9PSBFYnBIaWdoKSAmJiAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9T
SEFERVIpICYmICFjb250ZXh0LT5mcmFnbWVudFByZWNpc2lvbkhpZ2gpIHsKKyAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKEAxLCAicHJlY2lzaW9uIGlzIG5vdCBzdXBwb3J0ZWQgaW4gZnJhZ21l
bnQgc2hhZGVyIiwgImhpZ2hwIik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKCFjb250ZXh0LT5zeW1ib2xUYWJsZS5zZXREZWZhdWx0UHJl
Y2lzaW9uKCAkMywgJDIgKSkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJpbGxl
Z2FsIHR5cGUgYXJndW1lbnQgZm9yIGRlZmF1bHQgcHJlY2lzaW9uIHF1YWxpZmllciIsIGdldEJh
c2ljU3RyaW5nKCQzLnR5cGUpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgfQorICAgICAgICAkJCA9IDA7CisgICAgfQorICAgIDsKKworZnVuY3Rpb25fcHJvdG90
eXBlCisgICAgOiBmdW5jdGlvbl9kZWNsYXJhdG9yIFJJR0hUX1BBUkVOICB7CisgICAgICAgIC8v
CisgICAgICAgIC8vIE11bHRpcGxlIGRlY2xhcmF0aW9ucyBvZiB0aGUgc2FtZSBmdW5jdGlvbiBh
cmUgYWxsb3dlZC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGRlZmluaXRp
b24sIHRoZSBkZWZpbml0aW9uIHByb2R1Y3Rpb24gY29kZSB3aWxsIGNoZWNrIGZvciByZWRlZmlu
aXRpb25zCisgICAgICAgIC8vICh3ZSBkb24ndCBrbm93IGF0IHRoaXMgcG9pbnQgaWYgaXQncyBh
IGRlZmluaXRpb24gb3Igbm90KS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gUmVkZWNsYXJhdGlv
bnMgYXJlIGFsbG93ZWQuICBCdXQsIHJldHVybiB0eXBlcyBhbmQgcGFyYW1ldGVyIHF1YWxpZmll
cnMgbXVzdCBtYXRjaC4KKyAgICAgICAgLy8KKyAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0g
c3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9sVGFibGUuZmluZCgkMS0+Z2V0
TWFuZ2xlZE5hbWUoKSkpOworICAgICAgICBpZiAocHJldkRlYykgeworICAgICAgICAgICAgaWYg
KHByZXZEZWMtPmdldFJldHVyblR5cGUoKSAhPSAkMS0+Z2V0UmV0dXJuVHlwZSgpKSB7CisgICAg
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0
IGhhdmUgdGhlIHNhbWUgcmV0dXJuIHR5cGUiLCAkMS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2lj
U3RyaW5nKCkpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJldkRlYy0+Z2V0UGFy
YW1Db3VudCgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAocHJldkRlYy0+Z2V0UGFyYW0o
aSkudHlwZS0+Z2V0UXVhbGlmaWVyKCkgIT0gJDEtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxp
ZmllcigpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAib3Zlcmxv
YWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHBhcmFtZXRlciBxdWFsaWZpZXJzIiwg
JDEtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllclN0cmluZygpKTsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vCisgICAgICAgIC8vIENoZWNrIGZvciBwcmV2
aW91c2x5IGRlY2xhcmVkIHZhcmlhYmxlcyB1c2luZyB0aGUgc2FtZSBuYW1lLgorICAgICAgICAv
LworICAgICAgICBUU3ltYm9sICpwcmV2U3ltID0gY29udGV4dC0+c3ltYm9sVGFibGUuZmluZCgk
MS0+Z2V0TmFtZSgpKTsKKyAgICAgICAgaWYgKHByZXZTeW0pCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmICghcHJldlN5bS0+aXNGdW5jdGlvbigpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAicmVkZWZpbml0aW9uIiwgJDEtPmdldE5hbWUoKS5j
X3N0cigpLCAiZnVuY3Rpb24iKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgICAvLyBJbnNlcnQgdGhlIHVubWFuZ2xlZCBuYW1lIHRvIGRldGVjdCBwb3RlbnRpYWwg
ZnV0dXJlIHJlZGVmaW5pdGlvbiBhcyBhIHZhcmlhYmxlLgorICAgICAgICAgICAgY29udGV4dC0+
c3ltYm9sVGFibGUuZ2V0T3V0ZXJMZXZlbCgpLT5pbnNlcnQoJDEtPmdldE5hbWUoKSwgKiQxKTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vCisgICAgICAgIC8vIElmIHRoaXMgaXMgYSByZWRlY2xh
cmF0aW9uLCBpdCBjb3VsZCBhbHNvIGJlIGEgZGVmaW5pdGlvbiwKKyAgICAgICAgLy8gaW4gd2hp
Y2ggY2FzZSwgd2Ugd2FudCB0byB1c2UgdGhlIHZhcmlhYmxlIG5hbWVzIGZyb20gdGhpcyBvbmUs
IGFuZCBub3QgdGhlIG9uZSB0aGF0J3MKKyAgICAgICAgLy8gYmVpbmcgcmVkZWNsYXJlZC4gIFNv
LCBwYXNzIGJhY2sgdXAgdGhpcyBkZWNsYXJhdGlvbiwgbm90IHRoZSBvbmUgaW4gdGhlIHN5bWJv
bCB0YWJsZS4KKyAgICAgICAgLy8KKyAgICAgICAgJCQuZnVuY3Rpb24gPSAkMTsKKworICAgICAg
ICAvLyBXZSdyZSBhdCB0aGUgaW5uZXIgc2NvcGUgbGV2ZWwgb2YgdGhlIGZ1bmN0aW9uJ3MgYXJn
dW1lbnRzIGFuZCBib2R5IHN0YXRlbWVudC4KKyAgICAgICAgLy8gQWRkIHRoZSBmdW5jdGlvbiBw
cm90b3R5cGUgdG8gdGhlIHN1cnJvdW5kaW5nIHNjb3BlIGluc3RlYWQuCisgICAgICAgIGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmdldE91dGVyTGV2ZWwoKS0+aW5zZXJ0KCokJC5mdW5jdGlvbik7Cisg
ICAgfQorICAgIDsKKworZnVuY3Rpb25fZGVjbGFyYXRvcgorICAgIDogZnVuY3Rpb25faGVhZGVy
IHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgfCBmdW5jdGlvbl9oZWFkZXJfd2l0aF9w
YXJhbWV0ZXJzIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgOworCisKK2Z1bmN0aW9u
X2hlYWRlcl93aXRoX3BhcmFtZXRlcnMKKyAgICA6IGZ1bmN0aW9uX2hlYWRlciBwYXJhbWV0ZXJf
ZGVjbGFyYXRpb24geworICAgICAgICAvLyBBZGQgdGhlIHBhcmFtZXRlcgorICAgICAgICAkJCA9
ICQxOworICAgICAgICBpZiAoJDIucGFyYW0udHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9p
ZCkKKyAgICAgICAgICAgICQxLT5hZGRQYXJhbWV0ZXIoJDIucGFyYW0pOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBkZWxldGUgJDIucGFyYW0udHlwZTsKKyAgICB9CisgICAgfCBmdW5jdGlv
bl9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIENPTU1BIHBhcmFtZXRlcl9kZWNsYXJhdGlvbiB7Cisg
ICAgICAgIC8vCisgICAgICAgIC8vIE9ubHkgZmlyc3QgcGFyYW1ldGVyIG9mIG9uZS1wYXJhbWV0
ZXIgZnVuY3Rpb25zIGNhbiBiZSB2b2lkCisgICAgICAgIC8vIFRoZSBjaGVjayBmb3IgbmFtZWQg
cGFyYW1ldGVycyBub3QgYmVpbmcgdm9pZCBpcyBkb25lIGluIHBhcmFtZXRlcl9kZWNsYXJhdG9y
CisgICAgICAgIC8vCisgICAgICAgIGlmICgkMy5wYXJhbS50eXBlLT5nZXRCYXNpY1R5cGUoKSA9
PSBFYnRWb2lkKSB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVGhpcyBwYXJhbWV0
ZXIgPiBmaXJzdCBpcyB2b2lkCisgICAgICAgICAgICAvLworICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoQDIsICJjYW5ub3QgYmUgYW4gYXJndW1lbnQgdHlwZSBleGNlcHQgZm9yICcodm9pZCkn
IiwgInZvaWQiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAg
IGRlbGV0ZSAkMy5wYXJhbS50eXBlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8g
QWRkIHRoZSBwYXJhbWV0ZXIKKyAgICAgICAgICAgICQkID0gJDE7CisgICAgICAgICAgICAkMS0+
YWRkUGFyYW1ldGVyKCQzLnBhcmFtKTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisKK2Z1bmN0
aW9uX2hlYWRlcgorICAgIDogZnVsbHlfc3BlY2lmaWVkX3R5cGUgSURFTlRJRklFUiBMRUZUX1BB
UkVOIHsKKyAgICAgICAgaWYgKCQxLnF1YWxpZmllciAhPSBFdnFHbG9iYWwgJiYgJDEucXVhbGlm
aWVyICE9IEV2cVRlbXBvcmFyeSkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJu
byBxdWFsaWZpZXJzIGFsbG93ZWQgZm9yIGZ1bmN0aW9uIHJldHVybiIsIGdldFF1YWxpZmllclN0
cmluZygkMS5xdWFsaWZpZXIpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgfQorICAgICAgICAvLyBtYWtlIHN1cmUgYSBzYW1wbGVyIGlzIG5vdCBpbnZvbHZlZCBh
cyB3ZWxsLi4uCisgICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNr
KEAyLCAkMSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgLy8g
QWRkIHRoZSBmdW5jdGlvbiBhcyBhIHByb3RvdHlwZSBhZnRlciBwYXJzaW5nIGl0ICh3ZSBkbyBu
b3Qgc3VwcG9ydCByZWN1cnNpb24pCisgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb247CisgICAg
ICAgIFRUeXBlIHR5cGUoJDEpOworICAgICAgICBmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oJDIu
c3RyaW5nLCB0eXBlKTsKKyAgICAgICAgJCQgPSBmdW5jdGlvbjsKKyAgICAgICAgCisgICAgICAg
IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsKKyAgICB9CisgICAgOworCitwYXJhbWV0ZXJf
ZGVjbGFyYXRvcgorICAgIC8vIFR5cGUgKyBuYW1lCisgICAgOiB0eXBlX3NwZWNpZmllciBpZGVu
dGlmaWVyIHsKKyAgICAgICAgaWYgKCQxLnR5cGUgPT0gRWJ0Vm9pZCkgeworICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoQDIsICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2b2lkJyIsICQyLnN0cmlu
Zy0+Y19zdHIoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZykp
CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIFRQYXJhbWV0ZXIgcGFy
YW0gPSB7JDIuc3RyaW5nLCBuZXcgVFR5cGUoJDEpfTsKKyAgICAgICAgJCQucGFyYW0gPSBwYXJh
bTsKKyAgICB9CisgICAgfCB0eXBlX3NwZWNpZmllciBpZGVudGlmaWVyIExFRlRfQlJBQ0tFVCBj
b25zdGFudF9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQgeworICAgICAgICAvLyBDaGVjayB0aGF0
IHdlIGNhbiBtYWtlIGFuIGFycmF5IG91dCBvZiB0aGlzIHR5cGUKKyAgICAgICAgaWYgKGNvbnRl
eHQtPmFycmF5VHlwZUVycm9yQ2hlY2soQDMsICQxKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKKworICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKEAyLCAq
JDIuc3RyaW5nKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBp
bnQgc2l6ZTsKKyAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soQDMsICQ0
LCBzaXplKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJDEuc2V0
QXJyYXkodHJ1ZSwgc2l6ZSk7CisKKyAgICAgICAgVFR5cGUqIHR5cGUgPSBuZXcgVFR5cGUoJDEp
OworICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAkMi5zdHJpbmcsIHR5cGUgfTsKKyAgICAg
ICAgJCQucGFyYW0gPSBwYXJhbTsKKyAgICB9CisgICAgOworCitwYXJhbWV0ZXJfZGVjbGFyYXRp
b24KKyAgICAvLworICAgIC8vIFRoZSBvbmx5IHBhcmFtZXRlciBxdWFsaWZpZXIgYSBwYXJhbWV0
ZXIgY2FuIGhhdmUgYXJlCisgICAgLy8gSU5fUVVBTCwgT1VUX1FVQUwsIElOT1VUX1FVQUwsIG9y
IENPTlNULgorICAgIC8vCisKKyAgICAvLworICAgIC8vIFR5cGUgKyBuYW1lCisgICAgLy8KKyAg
ICA6IHR5cGVfcXVhbGlmaWVyIHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX2RlY2xhcmF0
b3IgeworICAgICAgICAkJCA9ICQzOworICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNo
ZWNrKEAzLCAkMS5xdWFsaWZpZXIsICQyLCAkJC5wYXJhbS50eXBlKSkKKyAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICB9CisgICAgfCBwYXJhbWV0ZXJfcXVhbGlmaWVyIHBhcmFt
ZXRlcl9kZWNsYXJhdG9yIHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICAgICAgaWYgKGNvbnRleHQt
PnBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKEAyLCAkMSwgKiQyLnBhcmFtLnR5cGUpKQorICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1F
cnJvckNoZWNrKEAyLCBFdnFUZW1wb3JhcnksICQxLCAkJC5wYXJhbS50eXBlKSkKKyAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICB9CisgICAgLy8KKyAgICAvLyBPbmx5IHR5cGUK
KyAgICAvLworICAgIHwgdHlwZV9xdWFsaWZpZXIgcGFyYW1ldGVyX3F1YWxpZmllciBwYXJhbWV0
ZXJfdHlwZV9zcGVjaWZpZXIgeworICAgICAgICAkJCA9ICQzOworICAgICAgICBpZiAoY29udGV4
dC0+cGFyYW1FcnJvckNoZWNrKEAzLCAkMS5xdWFsaWZpZXIsICQyLCAkJC5wYXJhbS50eXBlKSkK
KyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICB9CisgICAgfCBwYXJhbWV0ZXJf
cXVhbGlmaWVyIHBhcmFtZXRlcl90eXBlX3NwZWNpZmllciB7CisgICAgICAgICQkID0gJDI7Cisg
ICAgICAgIGlmIChjb250ZXh0LT5wYXJhbWV0ZXJTYW1wbGVyRXJyb3JDaGVjayhAMiwgJDEsICok
Mi5wYXJhbS50eXBlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
aWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjayhAMiwgRXZxVGVtcG9yYXJ5LCAkMSwgJCQucGFy
YW0udHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgfQorICAgIDsK
KworcGFyYW1ldGVyX3F1YWxpZmllcgorICAgIDogLyogZW1wdHkgKi8geworICAgICAgICAkJCA9
IEV2cUluOworICAgIH0KKyAgICB8IElOX1FVQUwgeworICAgICAgICAkJCA9IEV2cUluOworICAg
IH0KKyAgICB8IE9VVF9RVUFMIHsKKyAgICAgICAgJCQgPSBFdnFPdXQ7CisgICAgfQorICAgIHwg
SU5PVVRfUVVBTCB7CisgICAgICAgICQkID0gRXZxSW5PdXQ7CisgICAgfQorICAgIDsKKworcGFy
YW1ldGVyX3R5cGVfc3BlY2lmaWVyCisgICAgOiB0eXBlX3NwZWNpZmllciB7CisgICAgICAgIFRQ
YXJhbWV0ZXIgcGFyYW0gPSB7IDAsIG5ldyBUVHlwZSgkMSkgfTsKKyAgICAgICAgJCQucGFyYW0g
PSBwYXJhbTsKKyAgICB9CisgICAgOworCitpbml0X2RlY2xhcmF0b3JfbGlzdAorICAgIDogc2lu
Z2xlX2RlY2xhcmF0aW9uIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgfCBpbml0X2Rl
Y2xhcmF0b3JfbGlzdCBDT01NQSBpZGVudGlmaWVyIHsKKyAgICAgICAgaWYgKCQxLnR5cGUudHlw
ZSA9PSBFYnRJbnZhcmlhbnQgJiYgISQzLnN5bWJvbCkKKyAgICAgICAgeworICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoQDMsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52
YXJpYW50IiwgJDMuc3RyaW5nLT5jX3N0cigpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQzLnN0cmluZywgVFR5cGUoJDEudHlwZSks
IEAzKTsKKyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
Lmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJtTm9kZSwgc3ltYm9sLCBAMyk7CisgICAgICAgIAorICAg
ICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhAMywgJCQudHlwZSkp
CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQt
Pm5vbkluaXRDb25zdEVycm9yQ2hlY2soQDMsICokMy5zdHJpbmcsICQkLnR5cGUsIGZhbHNlKSkK
KyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBUVmFyaWFibGUqIHZh
cmlhYmxlID0gMDsKKyAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRFcnJvckNoZWNrKEAzLCAq
JDMuc3RyaW5nLCAkJC50eXBlLCB2YXJpYWJsZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgIGlmIChzeW1ib2wgJiYgdmFyaWFibGUpCisgICAgICAgICAgICBzeW1i
b2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKKyAgICB9CisgICAgfCBpbml0X2Rl
Y2xhcmF0b3JfbGlzdCBDT01NQSBpZGVudGlmaWVyIExFRlRfQlJBQ0tFVCBSSUdIVF9CUkFDS0VU
IHsKKyAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soQDMsICQx
LnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmIChj
b250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKEAzLCAqJDMuc3RyaW5nLCAkMS50eXBlLCB0
cnVlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAkJCA9ICQx
OworCisgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKEA0LCAkMS50eXBl
KSB8fCBjb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soQDQsICQxLnR5cGUpKQorICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICQxLnR5cGUuc2V0QXJyYXkodHJ1ZSk7CisgICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxl
OworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVjayhANCwgKiQzLnN0cmlu
ZywgJDEudHlwZSwgdmFyaWFibGUpKQorICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIGlk
ZW50aWZpZXIgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7
CisgICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAzLCAkMS50
eXBlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBpZiAoY29u
dGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjayhAMywgKiQzLnN0cmluZywgJDEudHlwZSwgdHJ1
ZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgJCQgPSAkMTsK
KworICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjayhANCwgJDEudHlwZSkg
fHwgY29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKEA0LCAkMS50eXBlKSkKKyAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBp
bnQgc2l6ZTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKEA0
LCAkNSwgc2l6ZSkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICAgICAgJDEudHlwZS5zZXRBcnJheSh0cnVlLCBzaXplKTsKKyAgICAgICAgICAgIFRWYXJpYWJs
ZSogdmFyaWFibGUgPSAwOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVj
ayhANCwgKiQzLnN0cmluZywgJDEudHlwZSwgdmFyaWFibGUpKQorICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIFRUeXBlIHR5cGUgPSBUVHlwZSgkMS50eXBl
KTsKKyAgICAgICAgICAgIHR5cGUuc2V0QXJyYXlTaXplKHNpemUpOworICAgICAgICAgICAgJCQu
aW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEu
aW50ZXJtTm9kZSwgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZSA/IHZh
cmlhYmxlLT5nZXRVbmlxdWVJZCgpIDogMCwgKiQzLnN0cmluZywgdHlwZSwgQDMpLCBAMyk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgfCBpbml0X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBpZGVudGlm
aWVyIEVRVUFMIGluaXRpYWxpemVyIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxp
ZmllckVycm9yQ2hlY2soQDMsICQxLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworCisgICAgICAgICQkID0gJDE7CisKKyAgICAgICAgVEludGVybU5vZGUqIGludGVybU5v
ZGU7CisgICAgICAgIGlmICghY29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKEAzLCAqJDMuc3Ry
aW5nLCAkMS50eXBlLCAkNSwgaW50ZXJtTm9kZSkpIHsKKyAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICAvLyBidWlsZCB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCisgICAgICAgICAg
ICAvLworICAgICAgICAgICAgaWYgKGludGVybU5vZGUpCisgICAgICAgICQkLmludGVybUFnZ3Jl
Z2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLmludGVybU5vZGUs
IGludGVybU5vZGUsIEA0KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAkJC5p
bnRlcm1BZ2dyZWdhdGUgPSAkMS5pbnRlcm1BZ2dyZWdhdGU7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJC5pbnRlcm1BZ2dy
ZWdhdGUgPSAwOworICAgICAgICB9CisgICAgfQorICAgIDsKKworc2luZ2xlX2RlY2xhcmF0aW9u
CisgICAgOiBmdWxseV9zcGVjaWZpZWRfdHlwZSB7CisgICAgICAgICQkLnR5cGUgPSAkMTsKKyAg
ICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dy
ZWdhdGUoY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAiIiwgVFR5cGUoJDEpLCBA
MSksIEAxKTsKKyAgICB9CisgICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBpZGVudGlmaWVyIHsK
KyAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZFN5bWJvbCgwLCAqJDIuc3RyaW5nLCBUVHlwZSgkMSksIEAyKTsKKyAgICAgICAgJCQuaW50ZXJt
QWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCBA
Mik7CisgICAgICAgIAorICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JD
aGVjayhAMiwgJCQudHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAg
ICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soQDIsICokMi5zdHJpbmcs
ICQkLnR5cGUsIGZhbHNlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgJCQudHlwZSA9ICQxOworCisgICAgICAgIFRWYXJpYWJsZSog
dmFyaWFibGUgPSAwOworICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdEVycm9yQ2hlY2soQDIs
ICokMi5zdHJpbmcsICQkLnR5cGUsIHZhcmlhYmxlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgaWYgKHZhcmlhYmxlICYmIHN5bWJvbCkKKyAgICAgICAgICAgIHN5
bWJvbC0+c2V0SWQodmFyaWFibGUtPmdldFVuaXF1ZUlkKCkpOworICAgIH0KKyAgICB8IGZ1bGx5
X3NwZWNpZmllZF90eXBlIGlkZW50aWZpZXIgTEVGVF9CUkFDS0VUIFJJR0hUX0JSQUNLRVQgewor
ICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgInVuc2l6ZWQgYXJyYXkgZGVjbGFyYXRpb25zIG5v
dCBzdXBwb3J0ZWQiLCAkMi5zdHJpbmctPmNfc3RyKCkpOworICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisKKyAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDIuc3RyaW5nLCBUVHlwZSgkMSksIEAyKTsKKyAgICAgICAg
JCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUo
c3ltYm9sLCBAMik7CisgICAgICAgICQkLnR5cGUgPSAkMTsKKyAgICB9CisgICAgfCBmdWxseV9z
cGVjaWZpZWRfdHlwZSBpZGVudGlmaWVyIExFRlRfQlJBQ0tFVCBjb25zdGFudF9leHByZXNzaW9u
IFJJR0hUX0JSQUNLRVQgeworICAgICAgICBUVHlwZSB0eXBlID0gVFR5cGUoJDEpOworICAgICAg
ICBpbnQgc2l6ZTsKKyAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soQDIs
ICQ0LCBzaXplKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgdHlw
ZS5zZXRBcnJheVNpemUoc2l6ZSk7CisgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQyLnN0cmluZywgdHlwZSwgQDIpOwor
ICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFn
Z3JlZ2F0ZShzeW1ib2wsIEAyKTsKKyAgICAgICAgCisgICAgICAgIGlmIChjb250ZXh0LT5zdHJ1
Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAyLCAkMSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soQDIs
ICokMi5zdHJpbmcsICQxLCB0cnVlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KworICAgICAgICAkJC50eXBlID0gJDE7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlw
ZUVycm9yQ2hlY2soQDMsICQxKSB8fCBjb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2so
QDMsICQxKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNp
emVFcnJvckNoZWNrKEAzLCAkNCwgc2l6ZSkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOworCisgICAgICAgICAgICAkMS5zZXRBcnJheSh0cnVlLCBzaXplKTsKKyAgICAgICAg
ICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFy
cmF5RXJyb3JDaGVjayhAMywgKiQyLnN0cmluZywgJDEsIHZhcmlhYmxlKSkKKyAgICAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBpZiAodmFyaWFibGUgJiYgc3lt
Ym9sKQorICAgICAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUtPmdldFVuaXF1ZUlk
KCkpOworICAgICAgICB9CisgICAgfQorICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUgaWRlbnRp
ZmllciBFUVVBTCBpbml0aWFsaXplciB7CisgICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFs
aWZpZXJFcnJvckNoZWNrKEAyLCAkMSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CisKKyAgICAgICAgJCQudHlwZSA9ICQxOworCisgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1O
b2RlOworICAgICAgICBpZiAoIWNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcihAMiwgKiQyLnN0
cmluZywgJDEsICQ0LCBpbnRlcm1Ob2RlKSkgeworICAgICAgICAvLworICAgICAgICAvLyBCdWls
ZCBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24KKyAgICAgICAgLy8KKyAgICAgICAgICAgIGlm
KGludGVybU5vZGUpCisgICAgICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoaW50ZXJtTm9kZSwgQDMpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAk
JC5pbnRlcm1BZ2dyZWdhdGUgPSAwOworICAgICAgICB9CisgICAgfQorICAgIHwgSU5WQVJJQU5U
IElERU5USUZJRVIgeworICAgICAgICBWRVJURVhfT05MWSgiaW52YXJpYW50IGRlY2xhcmF0aW9u
IiwgQDEpOworICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjayhAMSwgY29udGV4
dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAiaW52YXJpYW50IHZhcnlpbmciKSkKKyAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQudHlwZS5zZXRCYXNpYyhF
YnRJbnZhcmlhbnQsIEV2cUludmFyaWFudFZhcnlpbmdPdXQsIEAyKTsKKyAgICAgICAgaWYgKCEk
Mi5zeW1ib2wpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAidW5k
ZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICQyLnN0cmluZy0+Y19z
dHIoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICB7CisgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICokMi5zdHJpbmcsIFRUeXBlKCQkLnR5cGUpLCBA
Mik7CisgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsIEAyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisK
K2Z1bGx5X3NwZWNpZmllZF90eXBlCisgICAgOiB0eXBlX3NwZWNpZmllciB7CisgICAgICAgICQk
ID0gJDE7CisKKyAgICAgICAgaWYgKCQxLmFycmF5KSB7CisgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcihAMSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKKyAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQxLnNldEFycmF5KGZhbHNlKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICB8IHR5cGVfcXVhbGlmaWVyIHR5cGVfc3BlY2lmaWVyICB7
CisgICAgICAgIGlmICgkMi5hcnJheSkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIs
ICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5Iik7CisgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkMi5zZXRBcnJheShmYWxzZSk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoJDEucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSAmJgorICAgICAg
ICAgICAgKCQyLnR5cGUgPT0gRWJ0Qm9vbCB8fCAkMi50eXBlID09IEVidEludCkpIHsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVh
bGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICB9CisgICAgICAgIGlmICgoJDEucXVhbGlmaWVyID09IEV2cVZhcnlpbmdJ
biB8fCAkMS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKKyAgICAgICAgICAgICgkMi50
eXBlID09IEVidEJvb2wgfHwgJDIudHlwZSA9PSBFYnRJbnQpKSB7CisgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcihAMiwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmlu
ZygkMS5xdWFsaWZpZXIpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgfQorICAgICAgICAkJCA9ICQyOworICAgICAgICAkJC5xdWFsaWZpZXIgPSAkMS5xdWFsaWZp
ZXI7CisgICAgfQorICAgIDsKKwordHlwZV9xdWFsaWZpZXIKKyAgICA6IENPTlNUX1FVQUwgewor
ICAgICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFDb25zdCwgQDEpOworICAgIH0KKyAgICB8
IEFUVFJJQlVURSB7CisgICAgICAgIFZFUlRFWF9PTkxZKCJhdHRyaWJ1dGUiLCBAMSk7CisgICAg
ICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKEAxLCBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5hdEdsb2JhbExldmVsKCksICJhdHRyaWJ1dGUiKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxQXR0cmlidXRlLCBAMSk7
CisgICAgfQorICAgIHwgVkFSWUlORyB7CisgICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJv
ckNoZWNrKEAxLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ2YXJ5aW5n
IikpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChjb250ZXh0
LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCisgICAgICAgICAgICAkJC5zZXRCYXNp
YyhFYnRWb2lkLCBFdnFWYXJ5aW5nT3V0LCBAMSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cVZhcnlpbmdJbiwgQDEpOworICAgIH0KKyAgICB8IElO
VkFSSUFOVCBWQVJZSU5HIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2so
QDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImludmFyaWFudCB2YXJ5
aW5nIikpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChjb250
ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCisgICAgICAgICAgICAkJC5zZXRC
YXNpYyhFYnRWb2lkLCBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCBAMSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFyaWFudFZhcnlpbmdJbiwg
QDEpOworICAgIH0KKyAgICB8IFVOSUZPUk0geworICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFs
RXJyb3JDaGVjayhAMSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAidW5p
Zm9ybSIpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAkJC5zZXRC
YXNpYyhFYnRWb2lkLCBFdnFVbmlmb3JtLCBAMSk7CisgICAgfQorICAgIDsKKwordHlwZV9zcGVj
aWZpZXIKKyAgICA6IHR5cGVfc3BlY2lmaWVyX25vX3ByZWMgeworICAgICAgICAkJCA9ICQxOwor
CisgICAgICAgIGlmICgkJC5wcmVjaXNpb24gPT0gRWJwVW5kZWZpbmVkKSB7CisgICAgICAgICAg
ICAkJC5wcmVjaXNpb24gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5nZXREZWZhdWx0UHJlY2lzaW9u
KCQxLnR5cGUpOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPnByZWNpc2lvbkVycm9yQ2hlY2so
QDEsICQkLnByZWNpc2lvbiwgJDEudHlwZSkpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgfCBwcmVjaXNp
b25fcXVhbGlmaWVyIHR5cGVfc3BlY2lmaWVyX25vX3ByZWMgeworICAgICAgICAkJCA9ICQyOwor
ICAgICAgICAkJC5wcmVjaXNpb24gPSAkMTsKKyAgICB9CisgICAgOworCitwcmVjaXNpb25fcXVh
bGlmaWVyCisgICAgOiBISUdIX1BSRUNJU0lPTiB7CisgICAgICAgICQkID0gRWJwSGlnaDsKKyAg
ICB9CisgICAgfCBNRURJVU1fUFJFQ0lTSU9OIHsKKyAgICAgICAgJCQgPSBFYnBNZWRpdW07Cisg
ICAgfQorICAgIHwgTE9XX1BSRUNJU0lPTiAgeworICAgICAgICAkJCA9IEVicExvdzsKKyAgICB9
CisgICAgOworCit0eXBlX3NwZWNpZmllcl9ub19wcmVjCisgICAgOiB0eXBlX3NwZWNpZmllcl9u
b25hcnJheSB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgdHlwZV9zcGVjaWZpZXJf
bm9uYXJyYXkgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7
CisgICAgICAgICQkID0gJDE7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9y
Q2hlY2soQDIsICQxKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5h
cnJheVNpemVFcnJvckNoZWNrKEAyLCAkMywgc2l6ZSkpCisgICAgICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgOworCit0eXBlX3NwZWNpZmllcl9ub25hcnJheQorICAgIDogVk9J
RF9UWVBFIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5z
ZXRCYXNpYyhFYnRWb2lkLCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgRkxPQVRfVFlQRSB7Cisg
ICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2
ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0
RmxvYXQsIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBJTlRfVFlQRSB7CisgICAgICAgIFRRdWFs
aWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUds
b2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCBA
MSk7CisgICAgfQorICAgIHwgQk9PTF9UWVBFIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCBAMSk7CisgICAgfQor
ICAgIHwgVkVDMiB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAg
JCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRl
KDIpOworICAgIH0KKyAgICB8IFZFQzMgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jh
cnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7CisgICAgICAgICQk
LnNldEFnZ3JlZ2F0ZSgzKTsKKyAgICB9CisgICAgfCBWRUM0IHsKKyAgICAgICAgVFF1YWxpZmll
ciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFs
IDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgQDEp
OworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoNCk7CisgICAgfQorICAgIHwgQlZFQzIgeworICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEJv
b2wsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRlKDIpOworICAgIH0KKyAgICB8
IEJWRUMzIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5z
ZXRCYXNpYyhFYnRCb29sLCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgzKTsK
KyAgICB9CisgICAgfCBCVkVDNCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
KyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgQDEpOworICAgICAgICAkJC5zZXRB
Z2dyZWdhdGUoNCk7CisgICAgfQorICAgIHwgSVZFQzIgeworICAgICAgICBUUXVhbGlmaWVyIHF1
YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEludCwgcXVhbCwgQDEpOworICAg
ICAgICAkJC5zZXRBZ2dyZWdhdGUoMik7CisgICAgfQorICAgIHwgSVZFQzMgeworICAgICAgICBU
UXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBF
dnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEludCwgcXVh
bCwgQDEpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMyk7CisgICAgfQorICAgIHwgSVZFQzQg
eworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2Jh
bExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2lj
KEVidEludCwgcXVhbCwgQDEpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoNCk7CisgICAgfQor
ICAgIHwgTUFUUklYMiB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAg
ICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0QWdncmVn
YXRlKDIsIHRydWUpOworICAgIH0KKyAgICB8IE1BVFJJWDMgeworICAgICAgICBUUXVhbGlmaWVy
IHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7
CisgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgzLCB0cnVlKTsKKyAgICB9CisgICAgfCBNQVRSSVg0
IHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9i
YWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNp
YyhFYnRGbG9hdCwgcXVhbCwgQDEpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoNCwgdHJ1ZSk7
CisgICAgfQorICAgIHwgU0FNUExFUjJEIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyMkQsIHF1YWwsIEAxKTsKKyAgICB9
CisgICAgfCBTQU1QTEVSQ1VCRSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
KyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxlckN1YmUsIHF1YWwsIEAxKTsKKyAgICB9Cisg
ICAgfCBTQU1QTEVSX0VYVEVSTkFMX09FUyB7CisgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9y
dHNFeHRlbnNpb24oIkdMX09FU19FR0xfaW1hZ2VfZXh0ZXJuYWwiKSkgeworICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoQDEsICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXJFeHRlcm5hbE9F
UyIpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAg
IFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/
IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxl
ckV4dGVybmFsT0VTLCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgU0FNUExFUjJEUkVDVCB7Cisg
ICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNFeHRlbnNpb24oIkdMX0FSQl90ZXh0dXJlX3Jl
Y3RhbmdsZSIpKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgInVuc3VwcG9ydGVk
IHR5cGUiLCAic2FtcGxlcjJEUmVjdCIpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICB9CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAg
JCQuc2V0QmFzaWMoRWJ0U2FtcGxlcjJEUmVjdCwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IHN0
cnVjdF9zcGVjaWZpZXIgeworICAgICAgICAkJCA9ICQxOworICAgICAgICAkJC5xdWFsaWZpZXIg
PSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7CisgICAgfQorICAgIHwgVFlQRV9OQU1FIHsKKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gVGhpcyBpcyBmb3IgdXNlciBkZWZpbmVkIHR5cGUgbmFtZXMuICBUaGUgbGV4aWNhbCBwaGFz
ZSBsb29rZWQgdXAgdGhlCisgICAgICAgIC8vIHR5cGUuCisgICAgICAgIC8vCisgICAgICAgIFRU
eXBlJiBzdHJ1Y3R1cmUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPigkMS5zeW1ib2wpLT5nZXRU
eXBlKCk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0
R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0
QmFzaWMoRWJ0U3RydWN0LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnVzZXJEZWYgPSAmc3RydWN0
dXJlOworICAgIH0KKyAgICA7CisKK3N0cnVjdF9zcGVjaWZpZXIKKyAgICA6IFNUUlVDVCBpZGVu
dGlmaWVyIExFRlRfQlJBQ0UgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbihA
MiwgKiQyLnN0cmluZykpIGNvbnRleHQtPnJlY292ZXIoKTsgfSBzdHJ1Y3RfZGVjbGFyYXRpb25f
bGlzdCBSSUdIVF9CUkFDRSB7CisgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hl
Y2soQDIsICokMi5zdHJpbmcpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisg
ICAgICAgIFRUeXBlKiBzdHJ1Y3R1cmUgPSBuZXcgVFR5cGUobmV3IFRTdHJ1Y3R1cmUoJDIuc3Ry
aW5nLCAkNSkpOworICAgICAgICBUVmFyaWFibGUqIHVzZXJUeXBlRGVmID0gbmV3IFRWYXJpYWJs
ZSgkMi5zdHJpbmcsICpzdHJ1Y3R1cmUsIHRydWUpOworICAgICAgICBpZiAoISBjb250ZXh0LT5z
eW1ib2xUYWJsZS5pbnNlcnQoKnVzZXJUeXBlRGVmKSkgeworICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoQDIsICJyZWRlZmluaXRpb24iLCAkMi5zdHJpbmctPmNfc3RyKCksICJzdHJ1Y3QiKTsK
KyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAkJC5z
ZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgQDEpOworICAgICAgICAkJC51c2VyRGVm
ID0gc3RydWN0dXJlOworICAgICAgICBjb250ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsK
KyAgICB9CisgICAgfCBTVFJVQ1QgTEVGVF9CUkFDRSB7IGlmIChjb250ZXh0LT5lbnRlclN0cnVj
dERlY2xhcmF0aW9uKEAyLCAqJDIuc3RyaW5nKSkgY29udGV4dC0+cmVjb3ZlcigpOyB9IHN0cnVj
dF9kZWNsYXJhdGlvbl9saXN0IFJJR0hUX0JSQUNFIHsKKyAgICAgICAgVFR5cGUqIHN0cnVjdHVy
ZSA9IG5ldyBUVHlwZShuZXcgVFN0cnVjdHVyZShOZXdQb29sVFN0cmluZygiIiksICQ0KSk7Cisg
ICAgICAgICQkLnNldEJhc2ljKEVidFN0cnVjdCwgRXZxVGVtcG9yYXJ5LCBAMSk7CisgICAgICAg
ICQkLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7CisgICAgICAgIGNvbnRleHQtPmV4aXRTdHJ1Y3REZWNs
YXJhdGlvbigpOworICAgIH0KKyAgICA7CisKK3N0cnVjdF9kZWNsYXJhdGlvbl9saXN0CisgICAg
OiBzdHJ1Y3RfZGVjbGFyYXRpb24geworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IHN0
cnVjdF9kZWNsYXJhdGlvbl9saXN0IHN0cnVjdF9kZWNsYXJhdGlvbiB7CisgICAgICAgICQkID0g
JDE7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgJDItPnNpemUoKTsgKytpKSB7Cisg
ICAgICAgICAgICBURmllbGQqIGZpZWxkID0gKCokMilbaV07CisgICAgICAgICAgICBmb3IgKHNp
emVfdCBqID0gMDsgaiA8ICQkLT5zaXplKCk7ICsraikgeworICAgICAgICAgICAgICAgIGlmICgo
KiQkKVtqXS0+bmFtZSgpID09IGZpZWxkLT5uYW1lKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoQDIsICJkdXBsaWNhdGUgZmllbGQgbmFtZSBpbiBzdHJ1Y3R1cmU6Iiwg
InN0cnVjdCIsIGZpZWxkLT5uYW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAkJC0+cHVzaF9iYWNrKGZpZWxkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisK
K3N0cnVjdF9kZWNsYXJhdGlvbgorICAgIDogdHlwZV9zcGVjaWZpZXIgc3RydWN0X2RlY2xhcmF0
b3JfbGlzdCBTRU1JQ09MT04geworICAgICAgICAkJCA9ICQyOworCisgICAgICAgIGlmIChjb250
ZXh0LT52b2lkRXJyb3JDaGVjayhAMSwgKCokMilbMF0tPm5hbWUoKSwgJDEpKSB7CisgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCAkJC0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAvLyBDYXJlZnVsIG5vdCB0byByZXBsYWNlIGFscmVhZHkga25vd24gYXNwZWN0cyBv
ZiB0eXBlLCBsaWtlIGFycmF5LW5lc3MKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBUVHlw
ZSogdHlwZSA9ICgqJCQpW2ldLT50eXBlKCk7CisgICAgICAgICAgICB0eXBlLT5zZXRCYXNpY1R5
cGUoJDEudHlwZSk7CisgICAgICAgICAgICB0eXBlLT5zZXROb21pbmFsU2l6ZSgkMS5zaXplKTsK
KyAgICAgICAgICAgIHR5cGUtPnNldE1hdHJpeCgkMS5tYXRyaXgpOworICAgICAgICAgICAgdHlw
ZS0+c2V0UHJlY2lzaW9uKCQxLnByZWNpc2lvbik7CisKKyAgICAgICAgICAgIC8vIGRvbid0IGFs
bG93IGFycmF5cyBvZiBhcnJheXMKKyAgICAgICAgICAgIGlmICh0eXBlLT5pc0FycmF5KCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjayhAMSwgJDEp
KQorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoJDEuYXJyYXkpCisgICAgICAgICAgICAgICAgdHlwZS0+c2V0QXJy
YXlTaXplKCQxLmFycmF5U2l6ZSk7CisgICAgICAgICAgICBpZiAoJDEudXNlckRlZikKKyAgICAg
ICAgICAgICAgICB0eXBlLT5zZXRTdHJ1Y3QoJDEudXNlckRlZi0+Z2V0U3RydWN0KCkpOworCisg
ICAgICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0TmVzdGluZ0Vycm9yQ2hlY2soQDEsICooKiQk
KVtpXSkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9Cisg
ICAgfQorICAgIDsKKworc3RydWN0X2RlY2xhcmF0b3JfbGlzdAorICAgIDogc3RydWN0X2RlY2xh
cmF0b3IgeworICAgICAgICAkJCA9IE5ld1Bvb2xURmllbGRMaXN0KCk7CisgICAgICAgICQkLT5w
dXNoX2JhY2soJDEpOworICAgIH0KKyAgICB8IHN0cnVjdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEg
c3RydWN0X2RlY2xhcmF0b3IgeworICAgICAgICAkJC0+cHVzaF9iYWNrKCQzKTsKKyAgICB9Cisg
ICAgOworCitzdHJ1Y3RfZGVjbGFyYXRvcgorICAgIDogaWRlbnRpZmllciB7CisgICAgICAgIGlm
IChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soQDEsICokMS5zdHJpbmcpKQorICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIFRUeXBlKiB0eXBlID0gbmV3IFRUeXBl
KEVidFZvaWQsIEVicFVuZGVmaW5lZCk7CisgICAgICAgICQkID0gbmV3IFRGaWVsZCh0eXBlLCAk
MS5zdHJpbmcpOworICAgIH0KKyAgICB8IGlkZW50aWZpZXIgTEVGVF9CUkFDS0VUIGNvbnN0YW50
X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7CisgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZl
ZEVycm9yQ2hlY2soQDEsICokMS5zdHJpbmcpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworCisgICAgICAgIFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKEVidFZvaWQsIEVicFVuZGVm
aW5lZCk7CisgICAgICAgIGludCBzaXplID0gMDsKKyAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5
U2l6ZUVycm9yQ2hlY2soQDMsICQzLCBzaXplKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgdHlwZS0+c2V0QXJyYXlTaXplKHNpemUpOworCisgICAgICAgICQkID0g
bmV3IFRGaWVsZCh0eXBlLCAkMS5zdHJpbmcpOworICAgIH0KKyAgICA7CisKK2luaXRpYWxpemVy
CisgICAgOiBhc3NpZ25tZW50X2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAgOworCitkZWNs
YXJhdGlvbl9zdGF0ZW1lbnQKKyAgICA6IGRlY2xhcmF0aW9uIHsgJCQgPSAkMTsgfQorICAgIDsK
Kworc3RhdGVtZW50CisgICAgOiBjb21wb3VuZF9zdGF0ZW1lbnQgIHsgJCQgPSAkMTsgfQorICAg
IHwgc2ltcGxlX3N0YXRlbWVudCAgICB7ICQkID0gJDE7IH0KKyAgICA7CisKKy8vIEdyYW1tYXIg
Tm90ZTogIE5vIGxhYmVsZWQgc3RhdGVtZW50czsgJ2dvdG8nIGlzIG5vdCBzdXBwb3J0ZWQuCisK
K3NpbXBsZV9zdGF0ZW1lbnQKKyAgICA6IGRlY2xhcmF0aW9uX3N0YXRlbWVudCB7ICQkID0gJDE7
IH0KKyAgICB8IGV4cHJlc3Npb25fc3RhdGVtZW50ICB7ICQkID0gJDE7IH0KKyAgICB8IHNlbGVj
dGlvbl9zdGF0ZW1lbnQgICB7ICQkID0gJDE7IH0KKyAgICB8IGl0ZXJhdGlvbl9zdGF0ZW1lbnQg
ICB7ICQkID0gJDE7IH0KKyAgICB8IGp1bXBfc3RhdGVtZW50ICAgICAgICB7ICQkID0gJDE7IH0K
KyAgICA7CisKK2NvbXBvdW5kX3N0YXRlbWVudAorICAgIDogTEVGVF9CUkFDRSBSSUdIVF9CUkFD
RSB7ICQkID0gMDsgfQorICAgIHwgTEVGVF9CUkFDRSB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1
c2goKTsgfSBzdGF0ZW1lbnRfbGlzdCB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOyB9IFJJ
R0hUX0JSQUNFIHsKKyAgICAgICAgaWYgKCQzICE9IDApIHsKKyAgICAgICAgICAgICQzLT5zZXRP
cChFT3BTZXF1ZW5jZSk7CisgICAgICAgICAgICAkMy0+c2V0TGluZShAJCk7CisgICAgICAgIH0K
KyAgICAgICAgJCQgPSAkMzsKKyAgICB9CisgICAgOworCitzdGF0ZW1lbnRfbm9fbmV3X3Njb3Bl
CisgICAgOiBjb21wb3VuZF9zdGF0ZW1lbnRfbm9fbmV3X3Njb3BlIHsgJCQgPSAkMTsgfQorICAg
IHwgc2ltcGxlX3N0YXRlbWVudCAgICAgICAgICAgICAgICB7ICQkID0gJDE7IH0KKyAgICA7CisK
K3N0YXRlbWVudF93aXRoX3Njb3BlCisgICAgOiB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2go
KTsgfSBjb21wb3VuZF9zdGF0ZW1lbnRfbm9fbmV3X3Njb3BlIHsgY29udGV4dC0+c3ltYm9sVGFi
bGUucG9wKCk7ICQkID0gJDI7IH0KKyAgICB8IHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgp
OyB9IHNpbXBsZV9zdGF0ZW1lbnQgICAgICAgICAgICAgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5wb3AoKTsgJCQgPSAkMjsgfQorICAgIDsKKworY29tcG91bmRfc3RhdGVtZW50X25vX25ld19z
Y29wZQorICAgIC8vIFN0YXRlbWVudCB0aGF0IGRvZXNuJ3QgY3JlYXRlIGEgbmV3IHNjb3BlLCBm
b3Igc2VsZWN0aW9uX3N0YXRlbWVudCwgaXRlcmF0aW9uX3N0YXRlbWVudAorICAgIDogTEVGVF9C
UkFDRSBSSUdIVF9CUkFDRSB7CisgICAgICAgICQkID0gMDsKKyAgICB9CisgICAgfCBMRUZUX0JS
QUNFIHN0YXRlbWVudF9saXN0IFJJR0hUX0JSQUNFIHsKKyAgICAgICAgaWYgKCQyKSB7CisgICAg
ICAgICAgICAkMi0+c2V0T3AoRU9wU2VxdWVuY2UpOworICAgICAgICAgICAgJDItPnNldExpbmUo
QCQpOworICAgICAgICB9CisgICAgICAgICQkID0gJDI7CisgICAgfQorICAgIDsKKworc3RhdGVt
ZW50X2xpc3QKKyAgICA6IHN0YXRlbWVudCB7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLm1ha2VBZ2dyZWdhdGUoJDEsIEAkKTsKKyAgICB9CisgICAgfCBzdGF0ZW1lbnRfbGlz
dCBzdGF0ZW1lbnQgeworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdn
cmVnYXRlKCQxLCAkMiwgQCQpOworICAgIH0KKyAgICA7CisKK2V4cHJlc3Npb25fc3RhdGVtZW50
CisgICAgOiBTRU1JQ09MT04gIHsgJCQgPSAwOyB9CisgICAgfCBleHByZXNzaW9uIFNFTUlDT0xP
TiAgeyAkJCA9IHN0YXRpY19jYXN0PFRJbnRlcm1Ob2RlKj4oJDEpOyB9CisgICAgOworCitzZWxl
Y3Rpb25fc3RhdGVtZW50CisgICAgOiBJRiBMRUZUX1BBUkVOIGV4cHJlc3Npb24gUklHSFRfUEFS
RU4gc2VsZWN0aW9uX3Jlc3Rfc3RhdGVtZW50IHsKKyAgICAgICAgaWYgKGNvbnRleHQtPmJvb2xF
cnJvckNoZWNrKEAxLCAkMykpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFNlbGVjdGlvbigkMywgJDUsIEAxKTsK
KyAgICB9CisgICAgOworCitzZWxlY3Rpb25fcmVzdF9zdGF0ZW1lbnQKKyAgICA6IHN0YXRlbWVu
dF93aXRoX3Njb3BlIEVMU0Ugc3RhdGVtZW50X3dpdGhfc2NvcGUgeworICAgICAgICAkJC5ub2Rl
MSA9ICQxOworICAgICAgICAkJC5ub2RlMiA9ICQzOworICAgIH0KKyAgICB8IHN0YXRlbWVudF93
aXRoX3Njb3BlIHsKKyAgICAgICAgJCQubm9kZTEgPSAkMTsKKyAgICAgICAgJCQubm9kZTIgPSAw
OworICAgIH0KKyAgICA7CisKKy8vIEdyYW1tYXIgTm90ZTogIE5vICdzd2l0Y2gnLiAgU3dpdGNo
IHN0YXRlbWVudHMgbm90IHN1cHBvcnRlZC4KKworY29uZGl0aW9uCisgICAgLy8gSW4gMTk5NiBj
KysgZHJhZnQsIGNvbmRpdGlvbnMgY2FuIGluY2x1ZGUgc2luZ2xlIGRlY2xhcmF0aW9ucworICAg
IDogZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDE7CisgICAgICAgIGlmIChjb250ZXh0LT5i
b29sRXJyb3JDaGVjaygkMS0+Z2V0TGluZSgpLCAkMSkpCisgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgfQorICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUgaWRlbnRpZmllciBF
UVVBTCBpbml0aWFsaXplciB7CisgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOworICAg
ICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhAMiwgJDEpKQorICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVy
cm9yQ2hlY2soQDIsICQxKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAg
ICAgICBpZiAoIWNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcihAMiwgKiQyLnN0cmluZywgJDEs
ICQ0LCBpbnRlcm1Ob2RlKSkKKyAgICAgICAgICAgICQkID0gJDQ7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQgPSAwOworICAg
ICAgICB9CisgICAgfQorICAgIDsKKworaXRlcmF0aW9uX3N0YXRlbWVudAorICAgIDogV0hJTEUg
TEVGVF9QQVJFTiB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgKytjb250ZXh0LT5sb29w
TmVzdGluZ0xldmVsOyB9IGNvbmRpdGlvbiBSSUdIVF9QQVJFTiBzdGF0ZW1lbnRfbm9fbmV3X3Nj
b3BlIHsKKyAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7CisgICAgICAgICQkID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3AoRUxvb3BXaGlsZSwgMCwgJDQsIDAsICQ2LCBA
MSk7CisgICAgICAgIC0tY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsKKyAgICB9CisgICAgfCBE
TyB7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfSBzdGF0ZW1lbnRfd2l0aF9zY29wZSBX
SElMRSBMRUZUX1BBUkVOIGV4cHJlc3Npb24gUklHSFRfUEFSRU4gU0VNSUNPTE9OIHsKKyAgICAg
ICAgaWYgKGNvbnRleHQtPmJvb2xFcnJvckNoZWNrKEA4LCAkNikpCisgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
TG9vcChFTG9vcERvV2hpbGUsIDAsICQ2LCAwLCAkMywgQDQpOworICAgICAgICAtLWNvbnRleHQt
Pmxvb3BOZXN0aW5nTGV2ZWw7CisgICAgfQorICAgIHwgRk9SIExFRlRfUEFSRU4geyBjb250ZXh0
LT5zeW1ib2xUYWJsZS5wdXNoKCk7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfSBmb3Jf
aW5pdF9zdGF0ZW1lbnQgZm9yX3Jlc3Rfc3RhdGVtZW50IFJJR0hUX1BBUkVOIHN0YXRlbWVudF9u
b19uZXdfc2NvcGUgeworICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKKyAgICAg
ICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkTG9vcChFTG9vcEZvciwgJDQsIHJlaW50
ZXJwcmV0X2Nhc3Q8VEludGVybVR5cGVkKj4oJDUubm9kZTEpLCByZWludGVycHJldF9jYXN0PFRJ
bnRlcm1UeXBlZCo+KCQ1Lm5vZGUyKSwgJDcsIEAxKTsKKyAgICAgICAgLS1jb250ZXh0LT5sb29w
TmVzdGluZ0xldmVsOworICAgIH0KKyAgICA7CisKK2Zvcl9pbml0X3N0YXRlbWVudAorICAgIDog
ZXhwcmVzc2lvbl9zdGF0ZW1lbnQgeworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IGRl
Y2xhcmF0aW9uX3N0YXRlbWVudCB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIDsKKwor
Y29uZGl0aW9ub3B0CisgICAgOiBjb25kaXRpb24geworICAgICAgICAkJCA9ICQxOworICAgIH0K
KyAgICB8IC8qIE1heSBiZSBudWxsICovIHsKKyAgICAgICAgJCQgPSAwOworICAgIH0KKyAgICA7
CisKK2Zvcl9yZXN0X3N0YXRlbWVudAorICAgIDogY29uZGl0aW9ub3B0IFNFTUlDT0xPTiB7Cisg
ICAgICAgICQkLm5vZGUxID0gJDE7CisgICAgICAgICQkLm5vZGUyID0gMDsKKyAgICB9CisgICAg
fCBjb25kaXRpb25vcHQgU0VNSUNPTE9OIGV4cHJlc3Npb24gIHsKKyAgICAgICAgJCQubm9kZTEg
PSAkMTsKKyAgICAgICAgJCQubm9kZTIgPSAkMzsKKyAgICB9CisgICAgOworCitqdW1wX3N0YXRl
bWVudAorICAgIDogQ09OVElOVUUgU0VNSUNPTE9OIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPmxv
b3BOZXN0aW5nTGV2ZWwgPD0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJj
b250aW51ZSBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIpOworICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgICQkID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BDb250aW51ZSwgQDEpOworICAgIH0KKyAgICB8IEJS
RUFLIFNFTUlDT0xPTiB7CisgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9
IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAiYnJlYWsgc3RhdGVtZW50IG9u
bHkgYWxsb3dlZCBpbiBsb29wcyIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgfQorICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFu
Y2goRU9wQnJlYWssIEAxKTsKKyAgICB9CisgICAgfCBSRVRVUk4gU0VNSUNPTE9OIHsKKyAgICAg
ICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVybiwgQDEpOwor
ICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkg
IT0gRWJ0Vm9pZCkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJub24tdm9pZCBm
dW5jdGlvbiBtdXN0IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIpOworICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgfQorICAgIHwgUkVUVVJOIGV4cHJlc3Np
b24gU0VNSUNPTE9OIHsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJh
bmNoKEVPcFJldHVybiwgJDIsIEAxKTsKKyAgICAgICAgY29udGV4dC0+ZnVuY3Rpb25SZXR1cm5z
VmFsdWUgPSB0cnVlOworICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+
Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
QDEsICJ2b2lkIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iKTsKKyAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfSBlbHNlIGlmICgqKGNvbnRl
eHQtPmN1cnJlbnRGdW5jdGlvblR5cGUpICE9ICQyLT5nZXRUeXBlKCkpIHsKKyAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKEAxLCAiZnVuY3Rpb24gcmV0dXJuIGlzIG5vdCBtYXRjaGluZyB0eXBl
OiIsICJyZXR1cm4iKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICB8IERJU0NBUkQgU0VNSUNPTE9OIHsKKyAgICAgICAgRlJBR19PTkxZKCJk
aXNjYXJkIiwgQDEpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFu
Y2goRU9wS2lsbCwgQDEpOworICAgIH0KKyAgICA7CisKKy8vIEdyYW1tYXIgTm90ZTogIE5vICdn
b3RvJy4gIEdvdG9zIGFyZSBub3Qgc3VwcG9ydGVkLgorCit0cmFuc2xhdGlvbl91bml0CisgICAg
OiBleHRlcm5hbF9kZWNsYXJhdGlvbiB7CisgICAgICAgICQkID0gJDE7CisgICAgICAgIGNvbnRl
eHQtPnRyZWVSb290ID0gJCQ7CisgICAgfQorICAgIHwgdHJhbnNsYXRpb25fdW5pdCBleHRlcm5h
bF9kZWNsYXJhdGlvbiB7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dB
Z2dyZWdhdGUoJDEsICQyLCBAJCk7CisgICAgICAgIGNvbnRleHQtPnRyZWVSb290ID0gJCQ7Cisg
ICAgfQorICAgIDsKKworZXh0ZXJuYWxfZGVjbGFyYXRpb24KKyAgICA6IGZ1bmN0aW9uX2RlZmlu
aXRpb24geworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IGRlY2xhcmF0aW9uIHsKKyAg
ICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgOworCitmdW5jdGlvbl9kZWZpbml0aW9uCisgICAg
OiBmdW5jdGlvbl9wcm90b3R5cGUgeworICAgICAgICBURnVuY3Rpb24qIGZ1bmN0aW9uID0gJDEu
ZnVuY3Rpb247CisgICAgICAgIAorICAgICAgICBjb25zdCBUU3ltYm9sICpidWlsdEluID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuZmluZEJ1aWx0SW4oZnVuY3Rpb24tPmdldE1hbmdsZWROYW1lKCkp
OworICAgICAgICAKKyAgICAgICAgaWYgKGJ1aWx0SW4pCisgICAgICAgIHsKKyAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKEAxLCAiYnVpbHQtaW4gZnVuY3Rpb25zIGNhbm5vdCBiZSByZWRlZmlu
ZWQiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOworICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBURnVuY3Rpb24qIHByZXZE
ZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKGZ1
bmN0aW9uLT5nZXRNYW5nbGVkTmFtZSgpKSk7CisgICAgICAgIC8vCisgICAgICAgIC8vIE5vdGU6
ICAncHJldkRlYycgY291bGQgYmUgJ2Z1bmN0aW9uJyBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1l
IHdlJ3ZlIHNlZW4gZnVuY3Rpb24KKyAgICAgICAgLy8gYXMgaXQgd291bGQgaGF2ZSBqdXN0IGJl
ZW4gcHV0IGluIHRoZSBzeW1ib2wgdGFibGUuICBPdGhlcndpc2UsIHdlJ3JlIGxvb2tpbmcgdXAK
KyAgICAgICAgLy8gYW4gZWFybGllciBvY2N1cmFuY2UuCisgICAgICAgIC8vCisgICAgICAgIGlm
IChwcmV2RGVjLT5pc0RlZmluZWQoKSkgeworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8v
IFRoZW4gdGhpcyBmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkuCisgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJv
ZHkiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOworICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIHByZXZEZWMtPnNldERlZmluZWQoKTsKKwor
ICAgICAgICAvLworICAgICAgICAvLyBSYWlzZSBlcnJvciBtZXNzYWdlIGlmIG1haW4gZnVuY3Rp
b24gdGFrZXMgYW55IHBhcmFtZXRlcnMgb3IgcmV0dXJuIGFueXRoaW5nIG90aGVyIHRoYW4gdm9p
ZAorICAgICAgICAvLworICAgICAgICBpZiAoZnVuY3Rpb24tPmdldE5hbWUoKSA9PSAibWFpbiIp
IHsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0UGFyYW1Db3VudCgpID4gMCkgeworICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAiZnVuY3Rpb24gY2Fubm90IHRha2UgYW55
IHBhcmFtZXRlcihzKSIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSk7CisgICAgICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGZ1bmN0aW9uLT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkgewor
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAiIiwgZnVuY3Rpb24tPmdldFJldHVy
blR5cGUoKS5nZXRCYXNpY1N0cmluZygpLCAibWFpbiBmdW5jdGlvbiBjYW5ub3QgcmV0dXJuIGEg
dmFsdWUiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICAvLworICAgICAgICAvLyBSZW1lbWJlciB0aGUgcmV0
dXJuIHR5cGUgZm9yIGxhdGVyIGNoZWNraW5nIGZvciBSRVRVUk4gc3RhdGVtZW50cy4KKyAgICAg
ICAgLy8KKyAgICAgICAgY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZSA9ICYocHJldkRlYy0+
Z2V0UmV0dXJuVHlwZSgpKTsKKyAgICAgICAgY29udGV4dC0+ZnVuY3Rpb25SZXR1cm5zVmFsdWUg
PSBmYWxzZTsKKworICAgICAgICAvLworICAgICAgICAvLyBJbnNlcnQgcGFyYW1ldGVycyBpbnRv
IHRoZSBzeW1ib2wgdGFibGUuCisgICAgICAgIC8vIElmIHRoZSBwYXJhbWV0ZXIgaGFzIG5vIG5h
bWUsIGl0J3Mgbm90IGFuIGVycm9yLCBqdXN0IGRvbid0IGluc2VydCBpdAorICAgICAgICAvLyAo
Y291bGQgYmUgdXNlZCBmb3IgdW51c2VkIGFyZ3MpLgorICAgICAgICAvLworICAgICAgICAvLyBB
bHNvLCBhY2N1bXVsYXRlIHRoZSBsaXN0IG9mIHBhcmFtZXRlcnMgaW50byB0aGUgSElMLCBzbyBs
b3dlciBsZXZlbCBjb2RlCisgICAgICAgIC8vIGtub3dzIHdoZXJlIHRvIGZpbmQgcGFyYW1ldGVy
cy4KKyAgICAgICAgLy8KKyAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSogcGFyYW1Ob2RlcyA9IG5l
dyBUSW50ZXJtQWdncmVnYXRlOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0
aW9uLT5nZXRQYXJhbUNvdW50KCk7IGkrKykgeworICAgICAgICAgICAgY29uc3QgVFBhcmFtZXRl
ciYgcGFyYW0gPSBmdW5jdGlvbi0+Z2V0UGFyYW0oaSk7CisgICAgICAgICAgICBpZiAocGFyYW0u
bmFtZSAhPSAwKSB7CisgICAgICAgICAgICAgICAgVFZhcmlhYmxlICp2YXJpYWJsZSA9IG5ldyBU
VmFyaWFibGUocGFyYW0ubmFtZSwgKnBhcmFtLnR5cGUpOworICAgICAgICAgICAgICAgIC8vCisg
ICAgICAgICAgICAgICAgLy8gSW5zZXJ0IHRoZSBwYXJhbWV0ZXJzIHdpdGggbmFtZSBpbiB0aGUg
c3ltYm9sIHRhYmxlLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgaWYgKCEg
Y29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFt
ZSgpLmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVy
IHRvIHRoZSBISUwKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIHBhcmFtTm9k
ZXMgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZFN5bWJvbCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXJpYWJsZS0+Z2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5n
ZXRUeXBlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDEpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMSk7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIHBhcmFtTm9kZXMgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0Fn
Z3JlZ2F0ZShwYXJhbU5vZGVzLCBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICIi
LCAqcGFyYW0udHlwZSwgQDEpLCBAMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgY29udGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKHBhcmFtTm9kZXMs
IEVPcFBhcmFtZXRlcnMsIEAxKTsKKyAgICAgICAgJDEuaW50ZXJtQWdncmVnYXRlID0gcGFyYW1O
b2RlczsKKyAgICAgICAgY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA9IDA7CisgICAgfQorICAg
IGNvbXBvdW5kX3N0YXRlbWVudF9ub19uZXdfc2NvcGUgeworICAgICAgICAvLz8/IENoZWNrIHRo
YXQgYWxsIHBhdGhzIHJldHVybiBhIHZhbHVlIGlmIHJldHVybiB0eXBlICE9IHZvaWQgPworICAg
ICAgICAvLyAgIE1heSBiZSBiZXN0IGRvbmUgYXMgcG9zdCBwcm9jZXNzIHBoYXNlIG9uIGludGVy
bWVkaWF0ZSBjb2RlCisgICAgICAgIGlmIChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5n
ZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkICYmICEgY29udGV4dC0+ZnVuY3Rpb25SZXR1cm5zVmFs
dWUpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAiZnVuY3Rpb24gZG9lcyBub3Qg
cmV0dXJuIGEgdmFsdWU6IiwgIiIsICQxLmZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSk7Cisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJtQWdn
cmVnYXRlLCAkMywgQCQpOworICAgICAgICBjb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVn
YXRlT3BlcmF0b3IoJCQsIEVPcEZ1bmN0aW9uLCBAMSk7CisgICAgICAgICQkLT5nZXRBc0FnZ3Jl
Z2F0ZSgpLT5zZXROYW1lKCQxLmZ1bmN0aW9uLT5nZXRNYW5nbGVkTmFtZSgpLmNfc3RyKCkpOwor
ICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0VHlwZSgkMS5mdW5jdGlvbi0+Z2V0UmV0
dXJuVHlwZSgpKTsKKworICAgICAgICAvLyBzdG9yZSB0aGUgcHJhZ21hIGluZm9ybWF0aW9uIGZv
ciBkZWJ1ZyBhbmQgb3B0aW1pemUgYW5kIG90aGVyIHZlbmRvciBzcGVjaWZpYworICAgICAgICAv
LyBpbmZvcm1hdGlvbi4gVGhpcyBpbmZvcm1hdGlvbiBjYW4gYmUgcXVlcmllZCBmcm9tIHRoZSBw
YXJzZSB0cmVlCisgICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRPcHRpbWl6ZShjb250
ZXh0LT5wcmFnbWEoKS5vcHRpbWl6ZSk7CisgICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5z
ZXREZWJ1Zyhjb250ZXh0LT5wcmFnbWEoKS5kZWJ1Zyk7CisKKyAgICAgICAgY29udGV4dC0+c3lt
Ym9sVGFibGUucG9wKCk7CisgICAgfQorICAgIDsKKworJSUKKworaW50IGdsc2xhbmdfcGFyc2Uo
VFBhcnNlQ29udGV4dCogY29udGV4dCkgeworICAgIHJldHVybiB5eXBhcnNlKGNvbnRleHQpOwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvZ2xzbGFuZ19sZXguY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ19sZXguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY0OGU3NjEwNjYzZjI3
NzkwNTU2NWI0Mzk3ZmUxNGE0OTc1MzNiNGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX2xleC5jcHAKQEAg
LTAsMCArMSwyOTc4IEBACisjbGluZSAxNyAiLi9nbHNsYW5nLmwiCisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
Ly8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8g
Tk9UIEVESVQhCisKKy8vIElnbm9yZSBlcnJvcnMgaW4gYXV0by1nZW5lcmF0ZWQgY29kZS4KKyNp
ZiBkZWZpbmVkKF9fR05VQ19fKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vu
dXNlZC1mdW5jdGlvbiIKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQt
dmFyaWFibGUiCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc3dpdGNoLWVudW0i
CisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQwNjUp
CisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDE4OSkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxl
OiA0NTA1KQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEpCisjZW5kaWYKKworI2lmIGRl
ZmluZWQoX19jbGFuZ19fKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEg
Y2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vua25vd24tcHJhZ21hcyIKKyNwcmFnbWEgY2xh
bmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtcmVnaXN0ZXIiCisjZW5kaWYKKwor
I2xpbmUgMjUgIi4vZ2xzbGFuZ19sZXguY3BwIgorCisjZGVmaW5lICBZWV9JTlRfQUxJR05FRCBz
aG9ydCBpbnQKKworLyogQSBsZXhpY2FsIHNjYW5uZXIgZ2VuZXJhdGVkIGJ5IGZsZXggKi8KKwor
I2RlZmluZSBGTEVYX1NDQU5ORVIKKyNkZWZpbmUgWVlfRkxFWF9NQUpPUl9WRVJTSU9OIDIKKyNk
ZWZpbmUgWVlfRkxFWF9NSU5PUl9WRVJTSU9OIDUKKyNkZWZpbmUgWVlfRkxFWF9TVUJNSU5PUl9W
RVJTSU9OIDM3CisjaWYgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OID4gMAorI2RlZmluZSBGTEVY
X0JFVEEKKyNlbmRpZgorCisvKiBGaXJzdCwgd2UgZGVhbCB3aXRoICBwbGF0Zm9ybS1zcGVjaWZp
YyBvciBjb21waWxlci1zcGVjaWZpYyBpc3N1ZXMuICovCisKKy8qIGJlZ2luIHN0YW5kYXJkIEMg
aGVhZGVycy4gKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lu
Y2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8qIGVuZCBzdGFuZGFyZCBD
IGhlYWRlcnMuICovCisKKy8qIGZsZXggaW50ZWdlciB0eXBlIGRlZmluaXRpb25zICovCisKKyNp
Zm5kZWYgRkxFWElOVF9ICisjZGVmaW5lIEZMRVhJTlRfSAorCisvKiBDOTkgc3lzdGVtcyBoYXZl
IDxpbnR0eXBlcy5oPi4gTm9uLUM5OSBzeXN0ZW1zIG1heSBvciBtYXkgbm90LiAqLworCisjaWYg
ZGVmaW5lZCAoX19TVERDX1ZFUlNJT05fXykgJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFM
CisKKy8qIEM5OSBzYXlzIHRvIGRlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIGJlZm9yZSBpbmNs
dWRpbmcgc3RkaW50LmgsCisgKiBpZiB5b3Ugd2FudCB0aGUgbGltaXQgKG1heC9taW4pIG1hY3Jv
cyBmb3IgaW50IHR5cGVzLiAKKyAqLworI2lmbmRlZiBfX1NURENfTElNSVRfTUFDUk9TCisjZGVm
aW5lIF9fU1REQ19MSU1JVF9NQUNST1MgMQorI2VuZGlmCisKKyNpbmNsdWRlIDxpbnR0eXBlcy5o
PgordHlwZWRlZiBpbnQ4X3QgZmxleF9pbnQ4X3Q7Cit0eXBlZGVmIHVpbnQ4X3QgZmxleF91aW50
OF90OwordHlwZWRlZiBpbnQxNl90IGZsZXhfaW50MTZfdDsKK3R5cGVkZWYgdWludDE2X3QgZmxl
eF91aW50MTZfdDsKK3R5cGVkZWYgaW50MzJfdCBmbGV4X2ludDMyX3Q7Cit0eXBlZGVmIHVpbnQz
Ml90IGZsZXhfdWludDMyX3Q7CisjZWxzZQordHlwZWRlZiBzaWduZWQgY2hhciBmbGV4X2ludDhf
dDsKK3R5cGVkZWYgc2hvcnQgaW50IGZsZXhfaW50MTZfdDsKK3R5cGVkZWYgaW50IGZsZXhfaW50
MzJfdDsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBmbGV4X3VpbnQ4X3Q7IAordHlwZWRlZiB1bnNp
Z25lZCBzaG9ydCBpbnQgZmxleF91aW50MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IGZsZXhf
dWludDMyX3Q7CisKKy8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8KKyNpZm5kZWYgSU5U
OF9NSU4KKyNkZWZpbmUgSU5UOF9NSU4gICAgICAgICAgICAgICAoLTEyOCkKKyNlbmRpZgorI2lm
bmRlZiBJTlQxNl9NSU4KKyNkZWZpbmUgSU5UMTZfTUlOICAgICAgICAgICAgICAoLTMyNzY3LTEp
CisjZW5kaWYKKyNpZm5kZWYgSU5UMzJfTUlOCisjZGVmaW5lIElOVDMyX01JTiAgICAgICAgICAg
ICAgKC0yMTQ3NDgzNjQ3LTEpCisjZW5kaWYKKyNpZm5kZWYgSU5UOF9NQVgKKyNkZWZpbmUgSU5U
OF9NQVggICAgICAgICAgICAgICAoMTI3KQorI2VuZGlmCisjaWZuZGVmIElOVDE2X01BWAorI2Rl
ZmluZSBJTlQxNl9NQVggICAgICAgICAgICAgICgzMjc2NykKKyNlbmRpZgorI2lmbmRlZiBJTlQz
Ml9NQVgKKyNkZWZpbmUgSU5UMzJfTUFYICAgICAgICAgICAgICAoMjE0NzQ4MzY0NykKKyNlbmRp
ZgorI2lmbmRlZiBVSU5UOF9NQVgKKyNkZWZpbmUgVUlOVDhfTUFYICAgICAgICAgICAgICAoMjU1
VSkKKyNlbmRpZgorI2lmbmRlZiBVSU5UMTZfTUFYCisjZGVmaW5lIFVJTlQxNl9NQVggICAgICAg
ICAgICAgKDY1NTM1VSkKKyNlbmRpZgorI2lmbmRlZiBVSU5UMzJfTUFYCisjZGVmaW5lIFVJTlQz
Ml9NQVggICAgICAgICAgICAgKDQyOTQ5NjcyOTVVKQorI2VuZGlmCisKKyNlbmRpZiAvKiAhIEM5
OSAqLworCisjZW5kaWYgLyogISBGTEVYSU5UX0ggKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCisK
Ky8qIFRoZSAiY29uc3QiIHN0b3JhZ2UtY2xhc3MtbW9kaWZpZXIgaXMgdmFsaWQuICovCisjZGVm
aW5lIFlZX1VTRV9DT05TVAorCisjZWxzZQkvKiAhIF9fY3BsdXNwbHVzICovCisKKy8qIEM5OSBy
ZXF1aXJlcyBfX1NURENfXyB0byBiZSBkZWZpbmVkIGFzIDEuICovCisjaWYgZGVmaW5lZCAoX19T
VERDX18pCisKKyNkZWZpbmUgWVlfVVNFX0NPTlNUCisKKyNlbmRpZgkvKiBkZWZpbmVkIChfX1NU
RENfXykgKi8KKyNlbmRpZgkvKiAhIF9fY3BsdXNwbHVzICovCisKKyNpZmRlZiBZWV9VU0VfQ09O
U1QKKyNkZWZpbmUgeXljb25zdCBjb25zdAorI2Vsc2UKKyNkZWZpbmUgeXljb25zdAorI2VuZGlm
CisKKy8qIFJldHVybmVkIHVwb24gZW5kLW9mLWZpbGUuICovCisjZGVmaW5lIFlZX05VTEwgMAor
CisvKiBQcm9tb3RlcyBhIHBvc3NpYmx5IG5lZ2F0aXZlLCBwb3NzaWJseSBzaWduZWQgY2hhciB0
byBhbiB1bnNpZ25lZAorICogaW50ZWdlciBmb3IgdXNlIGFzIGFuIGFycmF5IGluZGV4LiAgSWYg
dGhlIHNpZ25lZCBjaGFyIGlzIG5lZ2F0aXZlLAorICogd2Ugd2FudCB0byBpbnN0ZWFkIHRyZWF0
IGl0IGFzIGFuIDgtYml0IHVuc2lnbmVkIGNoYXIsIGhlbmNlIHRoZQorICogZG91YmxlIGNhc3Qu
CisgKi8KKyNkZWZpbmUgWVlfU0NfVE9fVUkoYykgKCh1bnNpZ25lZCBpbnQpICh1bnNpZ25lZCBj
aGFyKSBjKQorCisvKiBBbiBvcGFxdWUgcG9pbnRlci4gKi8KKyNpZm5kZWYgWVlfVFlQRURFRl9Z
WV9TQ0FOTkVSX1QKKyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TQ0FOTkVSX1QKK3R5cGVkZWYgdm9p
ZCogeXlzY2FuX3Q7CisjZW5kaWYKKworLyogRm9yIGNvbnZlbmllbmNlLCB0aGVzZSB2YXJzIChw
bHVzIHRoZSBiaXNvbiB2YXJzIGZhciBiZWxvdykKKyAgIGFyZSBtYWNyb3MgaW4gdGhlIHJlZW50
cmFudCBzY2FubmVyLiAqLworI2RlZmluZSB5eWluIHl5Zy0+eXlpbl9yCisjZGVmaW5lIHl5b3V0
IHl5Zy0+eXlvdXRfcgorI2RlZmluZSB5eWV4dHJhIHl5Zy0+eXlleHRyYV9yCisjZGVmaW5lIHl5
bGVuZyB5eWctPnl5bGVuZ19yCisjZGVmaW5lIHl5dGV4dCB5eWctPnl5dGV4dF9yCisjZGVmaW5l
IHl5bGluZW5vIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2JzX2xpbmVubykKKyNkZWZp
bmUgeXljb2x1bW4gKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnNfY29sdW1uKQorI2Rl
ZmluZSB5eV9mbGV4X2RlYnVnIHl5Zy0+eXlfZmxleF9kZWJ1Z19yCisKKy8qIEVudGVyIGEgc3Rh
cnQgY29uZGl0aW9uLiAgVGhpcyBtYWNybyByZWFsbHkgb3VnaHQgdG8gdGFrZSBhIHBhcmFtZXRl
ciwKKyAqIGJ1dCB3ZSBkbyBpdCB0aGUgZGlzZ3VzdGluZyBjcnVmdHkgd2F5IGZvcmNlZCBvbiB1
cyBieSB0aGUgKCktbGVzcworICogZGVmaW5pdGlvbiBvZiBCRUdJTi4KKyAqLworI2RlZmluZSBC
RUdJTiB5eWctPnl5X3N0YXJ0ID0gMSArIDIgKgorCisvKiBUcmFuc2xhdGUgdGhlIGN1cnJlbnQg
c3RhcnQgc3RhdGUgaW50byBhIHZhbHVlIHRoYXQgY2FuIGJlIGxhdGVyIGhhbmRlZAorICogdG8g
QkVHSU4gdG8gcmV0dXJuIHRvIHRoZSBzdGF0ZS4gIFRoZSBZWVNUQVRFIGFsaWFzIGlzIGZvciBs
ZXgKKyAqIGNvbXBhdGliaWxpdHkuCisgKi8KKyNkZWZpbmUgWVlfU1RBUlQgKCh5eWctPnl5X3N0
YXJ0IC0gMSkgLyAyKQorI2RlZmluZSBZWVNUQVRFIFlZX1NUQVJUCisKKy8qIEFjdGlvbiBudW1i
ZXIgZm9yIEVPRiBydWxlIG9mIGEgZ2l2ZW4gc3RhcnQgc3RhdGUuICovCisjZGVmaW5lIFlZX1NU
QVRFX0VPRihzdGF0ZSkgKFlZX0VORF9PRl9CVUZGRVIgKyBzdGF0ZSArIDEpCisKKy8qIFNwZWNp
YWwgYWN0aW9uIG1lYW5pbmcgInN0YXJ0IHByb2Nlc3NpbmcgYSBuZXcgZmlsZSIuICovCisjZGVm
aW5lIFlZX05FV19GSUxFIHl5cmVzdGFydCh5eWluICx5eXNjYW5uZXIgKQorCisjZGVmaW5lIFlZ
X0VORF9PRl9CVUZGRVJfQ0hBUiAwCisKKy8qIFNpemUgb2YgZGVmYXVsdCBpbnB1dCBidWZmZXIu
ICovCisjaWZuZGVmIFlZX0JVRl9TSVpFCisjZGVmaW5lIFlZX0JVRl9TSVpFIDE2Mzg0CisjZW5k
aWYKKworLyogVGhlIHN0YXRlIGJ1ZiBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIG9uZSBz
dGF0ZSBwZXIgY2hhcmFjdGVyIGluIHRoZSBtYWluIGJ1ZmZlci4KKyAqLworI2RlZmluZSBZWV9T
VEFURV9CVUZfU0laRSAgICgoWVlfQlVGX1NJWkUgKyAyKSAqIHNpemVvZih5eV9zdGF0ZV90eXBl
KSkKKworI2lmbmRlZiBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQorI2RlZmluZSBZWV9UWVBF
REVGX1lZX0JVRkZFUl9TVEFURQordHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9C
VUZGRVJfU1RBVEU7CisjZW5kaWYKKworI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAorI2Rl
ZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAordHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OworI2Vu
ZGlmCisKKyNkZWZpbmUgRU9CX0FDVF9DT05USU5VRV9TQ0FOIDAKKyNkZWZpbmUgRU9CX0FDVF9F
TkRfT0ZfRklMRSAxCisjZGVmaW5lIEVPQl9BQ1RfTEFTVF9NQVRDSCAyCisKKyAgICAvKiBOb3Rl
OiBXZSBzcGVjaWZpY2FsbHkgb21pdCB0aGUgdGVzdCBmb3IgeXlfcnVsZV9jYW5fbWF0Y2hfZW9s
IGJlY2F1c2UgaXQgcmVxdWlyZXMKKyAgICAgKiAgICAgICBhY2Nlc3MgdG8gdGhlIGxvY2FsIHZh
cmlhYmxlIHl5X2FjdC4gU2luY2UgeXlsZXNzKCkgaXMgYSBtYWNybywgaXQgd291bGQgYnJlYWsK
KyAgICAgKiAgICAgICBleGlzdGluZyBzY2FubmVycyB0aGF0IGNhbGwgeXlsZXNzKCkgZnJvbSBP
VVRTSURFIHl5bGV4LiAKKyAgICAgKiAgICAgICBPbmUgb2J2aW91cyBzb2x1dGlvbiBpdCB0byBt
YWtlIHl5X2FjdCBhIGdsb2JhbC4gSSB0cmllZCB0aGF0LCBhbmQgc2F3CisgICAgICogICAgICAg
YSA1JSBwZXJmb3JtYW5jZSBoaXQgaW4gYSBub24teXlsaW5lbm8gc2Nhbm5lciwgYmVjYXVzZSB5
eV9hY3QgaXMKKyAgICAgKiAgICAgICBub3JtYWxseSBkZWNsYXJlZCBhcyBhIHJlZ2lzdGVyIHZh
cmlhYmxlLS0gc28gaXQgaXMgbm90IHdvcnRoIGl0LgorICAgICAqLworICAgICNkZWZpbmUgIFlZ
X0xFU1NfTElORU5PKG4pIFwKKyAgICAgICAgICAgIGRvIHsgXAorICAgICAgICAgICAgICAgIGlu
dCB5eWw7XAorICAgICAgICAgICAgICAgIGZvciAoIHl5bCA9IG47IHl5bCA8IHl5bGVuZzsgKyt5
eWwgKVwKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nIClcCisg
ICAgICAgICAgICAgICAgICAgICAgICAtLXl5bGluZW5vO1wKKyAgICAgICAgICAgIH13aGlsZSgw
KQorICAgIAorLyogUmV0dXJuIGFsbCBidXQgdGhlIGZpcnN0ICJuIiBtYXRjaGVkIGNoYXJhY3Rl
cnMgYmFjayB0byB0aGUgaW5wdXQgc3RyZWFtLiAqLworI2RlZmluZSB5eWxlc3MobikgXAorCWRv
IFwKKwkJeyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAor
ICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAorICAgICAgICBZWV9MRVNTX0xJ
TkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBc
CisJCVlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQgXAorCQl5eWctPnl5X2NfYnVmX3AgPSB5eV9j
cCA9IHl5X2JwICsgeXlsZXNzX21hY3JvX2FyZyAtIFlZX01PUkVfQURKOyBcCisJCVlZX0RPX0JF
Rk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8gXAorCQl9IFwKKwl3aGlsZSAo
IDAgKQorCisjZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQoIGMsIHl5Zy0+eXl0ZXh0X3B0ciAsIHl5
c2Nhbm5lciApCisKKyNpZm5kZWYgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQorI2RlZmluZSBZ
WV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCitzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlCisJeworCUZJ
TEUgKnl5X2lucHV0X2ZpbGU7CisKKwljaGFyICp5eV9jaF9idWY7CQkvKiBpbnB1dCBidWZmZXIg
Ki8KKwljaGFyICp5eV9idWZfcG9zOwkJLyogY3VycmVudCBwb3NpdGlvbiBpbiBpbnB1dCBidWZm
ZXIgKi8KKworCS8qIFNpemUgb2YgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLCBub3QgaW5jbHVkaW5n
IHJvb20gZm9yIEVPQgorCSAqIGNoYXJhY3RlcnMuCisJICovCisJeXlfc2l6ZV90IHl5X2J1Zl9z
aXplOworCisJLyogTnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2NoX2J1Ziwgbm90
IGluY2x1ZGluZyBFT0IKKwkgKiBjaGFyYWN0ZXJzLgorCSAqLworCXl5X3NpemVfdCB5eV9uX2No
YXJzOworCisJLyogV2hldGhlciB3ZSAib3duIiB0aGUgYnVmZmVyIC0gaS5lLiwgd2Uga25vdyB3
ZSBjcmVhdGVkIGl0LAorCSAqIGFuZCBjYW4gcmVhbGxvYygpIGl0IHRvIGdyb3cgaXQsIGFuZCBz
aG91bGQgZnJlZSgpIGl0IHRvCisJICogZGVsZXRlIGl0LgorCSAqLworCWludCB5eV9pc19vdXJf
YnVmZmVyOworCisJLyogV2hldGhlciB0aGlzIGlzIGFuICJpbnRlcmFjdGl2ZSIgaW5wdXQgc291
cmNlOyBpZiBzbywgYW5kCisJICogaWYgd2UncmUgdXNpbmcgc3RkaW8gZm9yIGlucHV0LCB0aGVu
IHdlIHdhbnQgdG8gdXNlIGdldGMoKQorCSAqIGluc3RlYWQgb2YgZnJlYWQoKSwgdG8gbWFrZSBz
dXJlIHdlIHN0b3AgZmV0Y2hpbmcgaW5wdXQgYWZ0ZXIKKwkgKiBlYWNoIG5ld2xpbmUuCisJICov
CisJaW50IHl5X2lzX2ludGVyYWN0aXZlOworCisJLyogV2hldGhlciB3ZSdyZSBjb25zaWRlcmVk
IHRvIGJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLgorCSAqIElmIHNvLCAnXicgcnVsZXMg
d2lsbCBiZSBhY3RpdmUgb24gdGhlIG5leHQgbWF0Y2gsIG90aGVyd2lzZQorCSAqIG5vdC4KKwkg
Ki8KKwlpbnQgeXlfYXRfYm9sOworCisgICAgaW50IHl5X2JzX2xpbmVubzsgLyoqPCBUaGUgbGlu
ZSBjb3VudC4gKi8KKyAgICBpbnQgeXlfYnNfY29sdW1uOyAvKio8IFRoZSBjb2x1bW4gY291bnQu
ICovCisgICAgCisJLyogV2hldGhlciB0byB0cnkgdG8gZmlsbCB0aGUgaW5wdXQgYnVmZmVyIHdo
ZW4gd2UgcmVhY2ggdGhlCisJICogZW5kIG9mIGl0LgorCSAqLworCWludCB5eV9maWxsX2J1ZmZl
cjsKKworCWludCB5eV9idWZmZXJfc3RhdHVzOworCisjZGVmaW5lIFlZX0JVRkZFUl9ORVcgMAor
I2RlZmluZSBZWV9CVUZGRVJfTk9STUFMIDEKKwkvKiBXaGVuIGFuIEVPRidzIGJlZW4gc2VlbiBi
dXQgdGhlcmUncyBzdGlsbCBzb21lIHRleHQgdG8gcHJvY2VzcworCSAqIHRoZW4gd2UgbWFyayB0
aGUgYnVmZmVyIGFzIFlZX0VPRl9QRU5ESU5HLCB0byBpbmRpY2F0ZSB0aGF0IHdlCisJICogc2hv
dWxkbid0IHRyeSByZWFkaW5nIGZyb20gdGhlIGlucHV0IHNvdXJjZSBhbnkgbW9yZS4gIFdlIG1p
Z2h0CisJICogc3RpbGwgaGF2ZSBhIGJ1bmNoIG9mIHRva2VucyB0byBtYXRjaCwgdGhvdWdoLCBi
ZWNhdXNlIG9mCisJICogcG9zc2libGUgYmFja2luZy11cC4KKwkgKgorCSAqIFdoZW4gd2UgYWN0
dWFsbHkgc2VlIHRoZSBFT0YsIHdlIGNoYW5nZSB0aGUgc3RhdHVzIHRvICJuZXciCisJICogKHZp
YSB5eXJlc3RhcnQoKSksIHNvIHRoYXQgdGhlIHVzZXIgY2FuIGNvbnRpbnVlIHNjYW5uaW5nIGJ5
CisJICoganVzdCBwb2ludGluZyB5eWluIGF0IGEgbmV3IGlucHV0IGZpbGUuCisJICovCisjZGVm
aW5lIFlZX0JVRkZFUl9FT0ZfUEVORElORyAyCisKKwl9OworI2VuZGlmIC8qICFZWV9TVFJVQ1Rf
WVlfQlVGRkVSX1NUQVRFICovCisKKy8qIFdlIHByb3ZpZGUgbWFjcm9zIGZvciBhY2Nlc3Npbmcg
YnVmZmVyIHN0YXRlcyBpbiBjYXNlIGluIHRoZQorICogZnV0dXJlIHdlIHdhbnQgdG8gcHV0IHRo
ZSBidWZmZXIgc3RhdGVzIGluIGEgbW9yZSBnZW5lcmFsCisgKiAic2Nhbm5lciBzdGF0ZSIuCisg
KgorICogUmV0dXJucyB0aGUgdG9wIG9mIHRoZSBzdGFjaywgb3IgTlVMTC4KKyAqLworI2RlZmlu
ZSBZWV9DVVJSRU5UX0JVRkZFUiAoIHl5Zy0+eXlfYnVmZmVyX3N0YWNrIFwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgPyB5eWctPnl5X2J1ZmZlcl9zdGFja1t5eWctPnl5X2J1ZmZlcl9zdGFj
a190b3BdIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiBOVUxMKQorCisvKiBTYW1lIGFz
IHByZXZpb3VzIG1hY3JvLCBidXQgdXNlZnVsIHdoZW4gd2Uga25vdyB0aGF0IHRoZSBidWZmZXIg
c3RhY2sgaXMgbm90CisgKiBOVUxMIG9yIHdoZW4gd2UgbmVlZCBhbiBsdmFsdWUuIEZvciBpbnRl
cm5hbCB1c2Ugb25seS4KKyAqLworI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgeXln
LT55eV9idWZmZXJfc3RhY2tbeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wXQorCit2b2lkIHl5cmVz
dGFydCAoRklMRSAqaW5wdXRfZmlsZSAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHl5X3N3
aXRjaF90b19idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICx5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKK1lZX0JVRkZFUl9TVEFURSB5eV9jcmVhdGVfYnVmZmVyIChGSUxFICpmaWxlLGlu
dCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgeXlfZGVsZXRlX2J1ZmZlciAoWVlf
QlVGRkVSX1NUQVRFIGIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCB5eV9mbHVzaF9idWZm
ZXIgKFlZX0JVRkZFUl9TVEFURSBiICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgeXlwdXNo
X2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nh
bm5lciApOwordm9pZCB5eXBvcF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwor
CitzdGF0aWMgdm9pZCB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lciAp
Oworc3RhdGljIHZvaWQgeXlfbG9hZF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciAp
Oworc3RhdGljIHZvaWQgeXlfaW5pdF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiLEZJTEUgKmZp
bGUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisjZGVmaW5lIFlZX0ZMVVNIX0JVRkZFUiB5eV9m
bHVzaF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lcikKKworWVlfQlVGRkVSX1NU
QVRFIHl5X3NjYW5fYnVmZmVyIChjaGFyICpiYXNlLHl5X3NpemVfdCBzaXplICx5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFy
ICp5eV9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5f
Ynl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMseXlfc2l6ZV90IGxlbiAseXlzY2FuX3QgeXlzY2Fu
bmVyICk7CisKK3ZvaWQgKnl5YWxsb2MgKHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7
Cit2b2lkICp5eXJlYWxsb2MgKHZvaWQgKix5eV9zaXplX3QgLHl5c2Nhbl90IHl5c2Nhbm5lciAp
Owordm9pZCB5eWZyZWUgKHZvaWQgKiAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKKyNkZWZpbmUg
eXlfbmV3X2J1ZmZlciB5eV9jcmVhdGVfYnVmZmVyCisKKyNkZWZpbmUgeXlfc2V0X2ludGVyYWN0
aXZlKGlzX2ludGVyYWN0aXZlKSBcCisJeyBcCisJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7
IFwKKyAgICAgICAgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOyBcCisJCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKKyAgICAgICAgICAgIHl5X2NyZWF0ZV9idWZmZXIo
eXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsgXAorCX0gXAorCVlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgPSBpc19pbnRlcmFjdGl2ZTsgXAorCX0KKworI2Rl
ZmluZSB5eV9zZXRfYm9sKGF0X2JvbCkgXAorCXsgXAorCWlmICggISBZWV9DVVJSRU5UX0JVRkZF
UiApe1wKKyAgICAgICAgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOyBcCisJCVlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKKyAgICAgICAgICAgIHl5X2NyZWF0ZV9idWZm
ZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsgXAorCX0gXAorCVlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gYXRfYm9sOyBcCisJfQorCisjZGVmaW5lIFlZX0FUX0JP
TCgpIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCkKKworLyogQmVnaW4gdXNl
ciBzZWN0MyAqLworCisjZGVmaW5lIHl5d3JhcCh5eXNjYW5uZXIpIDEKKyNkZWZpbmUgWVlfU0tJ
UF9ZWVdSQVAKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIFlZX0NIQVI7CisKK3R5cGVkZWYgaW50
IHl5X3N0YXRlX3R5cGU7CisKKyNkZWZpbmUgeXl0ZXh0X3B0ciB5eXRleHRfcgorCitzdGF0aWMg
eXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciAp
Oworc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAoeXlfc3RhdGVfdHlwZSBj
dXJyZW50X3N0YXRlICAseXlzY2FuX3QgeXlzY2FubmVyKTsKK3N0YXRpYyBpbnQgeXlfZ2V0X25l
eHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3N0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vy
cm9yICh5eWNvbnN0IGNoYXIgbXNnW10gLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisvKiBEb25l
IGFmdGVyIHRoZSBjdXJyZW50IHBhdHRlcm4gaGFzIGJlZW4gbWF0Y2hlZCBhbmQgYmVmb3JlIHRo
ZQorICogY29ycmVzcG9uZGluZyBhY3Rpb24gLSBzZXRzIHVwIHl5dGV4dC4KKyAqLworI2RlZmlu
ZSBZWV9ET19CRUZPUkVfQUNUSU9OIFwKKwl5eWctPnl5dGV4dF9wdHIgPSB5eV9icDsgXAorCXl5
bGVuZyA9IChzaXplX3QpICh5eV9jcCAtIHl5X2JwKTsgXAorCXl5Zy0+eXlfaG9sZF9jaGFyID0g
Knl5X2NwOyBcCisJKnl5X2NwID0gJ1wwJzsgXAorCXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwOwor
CisjZGVmaW5lIFlZX05VTV9SVUxFUyAxNDcKKyNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUiAxNDgK
Ky8qIFRoaXMgc3RydWN0IGlzIG5vdCB1c2VkIGluIHRoaXMgc2Nhbm5lciwKKyAgIGJ1dCBpdHMg
cHJlc2VuY2UgaXMgbmVjZXNzYXJ5LiAqLworc3RydWN0IHl5X3RyYW5zX2luZm8KKwl7CisJZmxl
eF9pbnQzMl90IHl5X3ZlcmlmeTsKKwlmbGV4X2ludDMyX3QgeXlfbnh0OworCX07CitzdGF0aWMg
eXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0WzQ0M10gPQorICAgIHsgICAwLAorICAgICAg
ICAwLCAgICAwLCAgMTQ4LCAgMTQ2LCAgMTQ1LCAgMTQ1LCAgMTMyLCAgMTM4LCAgMTQzLCAgMTI3
LAorICAgICAgMTI4LCAgMTM2LCAgMTM1LCAgMTI0LCAgMTMzLCAgMTMxLCAgMTM3LCAgIDk2LCAg
IDk2LCAgMTI1LAorICAgICAgMTIxLCAgMTM5LCAgMTI2LCAgMTQwLCAgMTQ0LCAgIDkzLCAgMTI5
LCAgMTMwLCAgMTQyLCAgIDkzLAorICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAg
IDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAorICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgMTIyLAorICAgICAgMTQxLCAgMTIzLCAg
MTM0LCAgMTE4LCAgMTA0LCAgMTIzLCAgMTEyLCAgMTA3LCAgMTAyLCAgMTEwLAorICAgICAgMTAw
LCAgMTExLCAgMTAxLCAgIDk5LCAgMTAzLCAgIDk4LCAgIDk1LCAgIDk2LCAgICAwLCAgICAwLAor
ICAgICAgMTMwLCAgMTIyLCAgMTI5LCAgMTE5LCAgMTE1LCAgMTE3LCAgMTE2LCAgMTIwLCAgIDkz
LCAgMTA4LAorICAgICAgMTE0LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAg
IDkzLCAgIDkzLCAgIDkzLAorICAgICAgIDkzLCAgIDEyLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAorCisgICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsICAgMTUsICAgMTcsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCisg
ICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAxMDksICAxMTMsICAgIDAsICAgOTgsICAgIDAs
ICAgIDAsCisgICAgICAgOTcsICAgOTQsICAxMDUsICAxMDYsICAgNDUsICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsCisgICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgOTMsICAgOTMsICAgOTMsICAgMTMsICAg
OTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgOTMsICAgOTMsICAgMjEs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgOTMsICAg
MTgsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCisgICAg
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsCisKKyAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICAgMCwgICA5OSwgICAg
MCwgICA5OCwgICA5MywKKyAgICAgICAyMywgICA5MywgICA5MywgICA5MCwgICA5MywgICA5Mywg
ICA5MywgICA5MywgICA5MywgICA5MywKKyAgICAgICA5MywgICAxNiwgICA0OCwgICA5MywgICA5
MywgICA5MywgICA2NCwgICA5MywgICA5MywgICA1MywKKyAgICAgICA2OCwgICA5MywgICA5Mywg
ICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA2NSwKKyAgICAgICAgNCwgICAy
OCwgICAyOSwgICAzMCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKKyAgICAg
ICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5
MywKKyAgICAgICA1MSwgICAyNCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5Mywg
ICAzMSwgICAzMiwKKyAgICAgICAzMywgICAyMiwgICA5MywgICA5MywgICA5MywgICAxMCwgICAz
NywgICAzOCwgICAzOSwgICA0NiwKKyAgICAgICAgNywgICA5MywgICA5MywgICA5MywgICA5Mywg
ICA3NywgICA3OCwgICA3OSwgICA5MywgICAyNSwKKyAgICAgICA2OSwgICAyMCwgICA4MCwgICA4
MSwgICA4MiwgICAgMiwgICA3NCwgICA3NSwgICA3NiwgICA5MywKKworICAgICAgIDE5LCAgIDcy
LCAgIDkzLCAgIDkzLCAgIDM0LCAgIDM1LCAgIDM2LCAgIDkzLCAgIDkzLCAgIDkzLAorICAgICAg
IDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDY2LCAgIDkzLCAgIDkzLCAgIDkz
LAorICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDQ3LCAgIDkzLCAgIDkyLCAg
IDkzLCAgIDkzLAorICAgICAgIDE0LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDY3LCAgIDYx
LCAgIDU2LCAgIDkzLCAgIDkzLAorICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDczLCAgIDUyLCAg
IDkzLCAgIDU5LCAgIDI3LCAgIDkzLCAgIDg5LAorICAgICAgIDYwLCAgIDQ0LCAgIDcxLCAgIDU0
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAorICAgICAgIDkzLCAgIDkzLCAg
IDU1LCAgIDI2LCAgIDkzLCAgIDkzLCAgIDkzLCAgICAzLCAgIDkzLCAgIDkzLAorICAgICAgIDkz
LCAgIDkzLCAgIDkzLCAgIDQ5LCAgICA4LCAgIDkzLCAgICA5LCAgIDkzLCAgIDkzLCAgIDExLAor
ICAgICAgIDYyLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDU3LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLAorICAgICAgIDkzLCAgIDUwLCAgIDcwLCAgIDU4LCAgICA2LCAgIDYzLCAgICAxLCAg
IDkxLCAgICA1LCAgIDgzLAorCisgICAgICAgNDAsICAgODQsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgNDEsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgOTMsICAgOTMsICAg
NDMsICAgOTMsICAgODcsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgODUs
ICAgOTMsICAgODYsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgNDIsCisg
ICAgICAgODgsICAgIDAKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5
X2VjWzI1Nl0gPQorICAgIHsgICAwLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAyLCAgICAzLAorICAgICAgICAyLCAgICAyLCAgICAyLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAg
ICAxLCAgICAyLCAgICA0LCAgICAxLCAgICAxLCAgICAxLCAgICA1LCAgICA2LCAgICAxLCAgICA3
LAorICAgICAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1LCAg
IDE2LCAgIDE3LAorICAgICAgIDE4LCAgIDE5LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIxLCAgIDIx
LCAgIDIyLCAgIDIzLCAgIDI0LAorICAgICAgIDI1LCAgIDI2LCAgIDI3LCAgICAxLCAgIDI4LCAg
IDI4LCAgIDI5LCAgIDMwLCAgIDMxLCAgIDI4LAorICAgICAgIDMyLCAgIDMyLCAgIDMyLCAgIDMy
LCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMzLCAgIDMyLAorICAgICAgIDMyLCAgIDM0LCAg
IDM1LCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDM2LCAgIDMyLCAgIDMyLAorICAgICAgIDM3
LCAgICAxLCAgIDM4LCAgIDM5LCAgIDMyLCAgICAxLCAgIDQwLCAgIDQxLCAgIDQyLCAgIDQzLAor
CisgICAgICAgNDQsICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAgMzIsICAgNDksICAgNTAsICAg
NTEsICAgNTIsCisgICAgICAgNTMsICAgNTQsICAgMzIsICAgNTUsICAgNTYsICAgNTcsICAgNTgs
ICAgNTksICAgNjAsICAgNjEsCisgICAgICAgNjIsICAgNjMsICAgNjQsICAgNjUsICAgNjYsICAg
NjcsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisg
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisKKyAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MQorICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfbWV0YVs2OF0gPQor
ICAgIHsgICAwLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAyLCAg
ICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLAorICAgICAgICAyLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAyLCAgICAyLCAgICAyLAorICAgICAgICAyLCAgICAzLCAg
ICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAxLCAgICAxLCAgICAxLCAgICAyLAorICAgICAgICAy
LCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLAor
ICAgICAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAz
LCAgICAzLAorICAgICAgICAzLCAgICAzLCAgICAzLCAgICAxLCAgICAxLCAgICAxLCAgICAxCisg
ICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzQ0NV0gPQorICAg
IHsgICAwLAorICAgICAgICAwLCAgICAwLCAgNTg3LCAgNTg4LCAgNTg4LCAgNTg4LCAgNTYxLCAg
IDQzLCAgIDY0LCAgNTg4LAorICAgICAgNTg4LCAgNTYwLCAgIDYxLCAgNTg4LCAgIDYwLCAgIDU4
LCAgNTU5LCAgIDc3LCAgIDg2LCAgNTU3LAorICAgICAgNTg4LCAgMTA0LCAgNTU3LCAgIDU1LCAg
NTg4LCAgICAwLCAgNTg4LCAgNTg4LCAgIDc1LCAgIDI2LAorICAgICAgIDU3LCAgIDgyLCAgIDgz
LCAgIDczLCAgIDkzLCAgNTI4LCAgIDk3LCAgIDk1LCAgNTI3LCAgIDQ0LAorICAgICAgIDcxLCAg
NTIxLCAgMTA0LCAgNTM0LCAgMTEwLCAgMTE2LCAgIDM1LCAgMTExLCAgNTMwLCAgNTg4LAorICAg
ICAgMTE0LCAgNTg4LCAgNTg4LCAgNTg4LCAgNTg4LCAgNTg4LCAgNTg4LCAgNTg4LCAgNTg4LCAg
NTg4LAorICAgICAgNTg4LCAgNTg4LCAgNTg4LCAgMTY1LCAgNTg4LCAgMTcyLCAgMjAyLCAgMjEx
LCAgMjMzLCAgICAwLAorICAgICAgNTg4LCAgNTg4LCAgNTg4LCAgNTUxLCAgNTg4LCAgNTg4LCAg
NTg4LCAgNTUwLCAgICAwLCAgNTg4LAorICAgICAgNTg4LCAgNTIzLCAgNTE2LCAgNTE5LCAgNTI3
LCAgNTI2LCAgNTEzLCAgNTI4LCAgNTE1LCAgNTIxLAorICAgICAgNTA5LCAgNTA2LCAgNTE5LCAg
NTA2LCAgNTAzLCAgNTAzLCAgNTA5LCAgNDk3LCAgMTA4LCAgNTAyLAorCisgICAgICA1MTIsICA0
OTgsICA1MDQsICA1MDcsICA1MDgsICAgIDAsICAxNDUsICA1MDcsICAxMTMsICA0OTMsCisgICAg
ICA1MDYsICA0OTcsICA0OTksICA0ODksICA1MDMsICA1MDAsICA1MDIsICA0ODUsICA0OTAsICA0
ODcsCisgICAgICA0NzYsICAxNTcsICA0ODQsICA0ODksICA0ODUsICA0ODcsICA0NzYsICA0Nzks
ICAxMTgsICA0ODQsCisgICAgICA0NzYsICA0ODgsICAgNzAsICA0ODEsICA1ODgsICA1ODgsICAy
NDYsICAyNTMsICAyNzAsICAyMTksCisgICAgICAyODMsICAgIDAsICA1ODgsICA1ODgsICAgIDAs
ICA0NzMsICA0NzcsICA0ODYsICA0ODMsICA0NjcsCisgICAgICA0NjcsICAxMTksICA0ODIsICA0
NzksICA0NzksICA0NzcsICA0NzQsICA0NjYsICA0NzIsICA0NTksCisgICAgICA0NzAsICA0NTYs
ICA0NzIsICAgIDAsICA0NjksICA0NTcsICA0NjQsICA0NjEsICA0NjUsICA0NTgsCisgICAgICA0
NDcsICA0NDYsICA0NTksICA0NjIsICA0NTksICA0NTQsICA0NDUsICAxODgsICA0NTAsICA0NTMs
CisgICAgICA0NDQsICA0NDEsICA0NDUsICA0NTEsICA0NDIsICA0MzMsICA0MzYsICA0MzQsICA0
NDQsICA0MzAsCisgICAgICA0MjgsICA0NDEsICA0MjcsICA0MjksICA0MjYsICA0MzcsICA0MzYs
ICAxMjQsICA0MzEsICA0MjYsCisKKyAgICAgIDQxNSwgIDI1OCwgIDQzMywgIDQzNSwgIDQyNCwg
IDI5MCwgIDI5NywgIDMwNCwgIDMxMSwgIDQyNSwKKyAgICAgICAgMCwgIDQyMywgIDI3NSwgICAg
MCwgIDQxNSwgIDQxMywgIDQyMSwgIDQxMCwgIDQyNywgIDQxNiwKKyAgICAgIDMxNiwgICAgMCwg
ICAgMCwgIDQxMCwgIDQyMCwgIDQyMCwgICAgMCwgIDQwNSwgIDMxOSwgICAgMCwKKyAgICAgICAg
MCwgIDQwNywgIDMyMiwgIDQwOCwgIDQwMiwgIDQwMSwgIDQwMiwgIDQwMSwgIDMyNSwgICAgMCwK
KyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDM5NywgIDM5OCwgIDQwMywgIDM5NCwgIDQw
NywgIDQwMiwKKyAgICAgIDQwMSwgIDM5MywgIDM5NywgIDM4OSwgIDM5MiwgIDM5NiwgIDQwMSwg
IDM4NywgIDM5OSwgIDM5MCwKKyAgICAgICAgMCwgICAgMCwgIDM5NiwgIDM4NSwgIDM4NSwgIDM5
MCwgIDM4OSwgIDM4NiwgICAgMCwgICAgMCwKKyAgICAgICAgMCwgICAgMCwgIDM3NiwgIDM4OCwg
IDM5MCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgICAgMCwgIDM3OCwgIDM3
OSwgIDM3MywgIDM4MywgICAgMCwgICAgMCwgICAgMCwgIDM3NCwgICAgMCwKKyAgICAgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDM4MSwKKwor
ICAgICAgICAwLCAgICAwLCAgMzc5LCAgMzc1LCAgICAwLCAgICAwLCAgICAwLCAgMzcxLCAgMzY3
LCAgMzcyLAorICAgICAgMzYyLCAgMzc1LCAgMzYxLCAgMzc0LCAgMzYzLCAgMzcwLCAgICAwLCAg
MzY4LCAgMzcwLCAgMzU0LAorICAgICAgMzU2LCAgMzYyLCAgMzY4LCAgMzYzLCAgMzUxLCAgICAw
LCAgMzUzLCAgICAwLCAgMzUyLCAgMzU1LAorICAgICAgICAwLCAgMzQ0LCAgMzQzLCAgMzQzLCAg
MzU2LCAgICAwLCAgMzU4LCAgICAwLCAgMzU3LCAgMzU2LAorICAgICAgMzQxLCAgMzU0LCAgMzQx
LCAgICAwLCAgICAwLCAgMzQ0LCAgICAwLCAgICAwLCAgMzM2LCAgICAwLAorICAgICAgICAwLCAg
ICAwLCAgICAwLCAgICAwLCAgMzMzLCAgMzQ0LCAgMzM3LCAgMzQzLCAgMzQwLCAgMzM1LAorICAg
ICAgMzI3LCAgMzM5LCAgICAwLCAgICAwLCAgMzMyLCAgMzM5LCAgMzI4LCAgICAwLCAgMzM3LCAg
MzM0LAorICAgICAgMzI0LCAgMzI5LCAgMzMyLCAgICAwLCAgICAwLCAgMzMyLCAgICAwLCAgMzMw
LCAgMzI5LCAgICAwLAorICAgICAgICAwLCAgMzI4LCAgMzE0LCAgMzI2LCAgICAwLCAgMzE3LCAg
MzM4LCAgMzM3LCAgMzM2LCAgMzA3LAorICAgICAgMzAzLCAgICAwLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMzI4LAorCisgICAgICAxNjYsICAzMjUsICAzMTYs
ICAyOTksICAzMDgsICAzMTAsICAzMDYsICAzMDgsICAzMDcsICAzMDYsCisgICAgICAzMDksICAz
MDYsICAyNTYsICAyNTMsICAgIDAsICAyMjgsICAyMzgsICAyMjIsICAyMzUsICAyMDMsCisgICAg
ICAyMDcsICAyMDQsICAyMTIsICAxOTEsICAgIDAsICAyMDEsICAxNjUsICAxNjcsICAxNTMsICAx
NjEsCisgICAgICAgIDAsICAxNzAsICAgIDAsICAxNzUsICAxNTEsICAxNDEsICAxMDAsICAxMTQs
ICAgNTksICAgIDAsCisgICAgICAgIDAsICA1ODgsICAzNTksICAxMTMKKyAgICB9IDsKKworc3Rh
dGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZls0NDVdID0KKyAgICB7ICAgMCwKKyAgICAg
IDQ0MiwgICAgMSwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwKKyAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwKKyAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MywgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MywKKyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKKyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MiwKKyAgICAgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKKyAgICAgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0NCwK
KyAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MywgIDQ0MiwKKyAgICAgIDQ0MiwgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywKKyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKKworICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAor
ICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLAorICAgICAgNDQyLCAgNDQ0LCAgNDQyLCAgNDQyLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAg
ICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLAorCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisgICAgICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisgICAg
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisKKyAgICAgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKKyAgICAg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywKKyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywKKyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywKKyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKKyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKKyAgICAgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKKyAgICAgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywK
KyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywKKyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywKKworICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAor
ICAgICAgNDQzLCAgICAwLCAgNDQyLCAgNDQyCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZs
ZXhfaW50MTZfdCB5eV9ueHRbNjU2XSA9CisgICAgeyAgIDAsCisgICAgICAgIDQsICAgIDUsICAg
IDYsICAgIDcsICAgIDgsICAgIDksICAgMTAsICAgMTEsICAgMTIsICAgMTMsCisgICAgICAgMTQs
ICAgMTUsICAgMTYsICAgMTcsICAgMTgsICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksCisg
ICAgICAgMTksICAgMjAsICAgMjEsICAgMjIsICAgMjMsICAgMjQsICAgMjUsICAgMjYsICAgMjYs
ICAgMjYsCisgICAgICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjcsICAg
MjgsICAgMjksICAgMzAsCisgICAgICAgMzEsICAgMzIsICAgMzMsICAgMzQsICAgMzUsICAgMzYs
ICAgMzcsICAgMzgsICAgMjYsICAgMzksCisgICAgICAgNDAsICAgNDEsICAgNDIsICAgNDMsICAg
NDQsICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAgNDksCisgICAgICAgMjYsICAgMjYsICAgMjYs
ICAgNTAsICAgNTEsICAgNTIsICAgNTMsICAgNTUsICAgNTYsICAgNTcsCisgICAgICAgNjAsICAg
NjIsICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNzcsCisgICAg
ICAgNzgsICAgODIsICAgODMsICAxMTAsICAgNjMsICAgNjEsICAxMjksICAxMTEsICAgNTgsICAg
NjYsCisgICAgICAxMzAsICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAgNjgs
ICAgNjYsICAgODAsCisKKyAgICAgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwg
ICA2OCwgICA2OSwgICA3MiwgICA4NCwKKyAgICAgIDExMiwgICA4NSwgICA3MCwgICA4MSwgIDE0
MiwgICA4NiwgICA2OSwgIDIwMywgIDQ0MSwgIDIwNCwKKyAgICAgICA2OSwgICA4NywgICA5NCwg
IDExMywgICA5NSwgICA3MywgICA5MCwgICA3NCwgICA3NSwgICA2OSwKKyAgICAgICA5MSwgICA4
OCwgICA5NywgICA5NiwgICA4OSwgICA5MiwgIDEwMywgICA3MCwgIDEzNSwgIDEwNiwKKyAgICAg
ICA5OCwgICA5MywgICA5OSwgIDExNSwgIDEwNCwgIDEwMCwgIDEwNywgIDE2MiwgIDQ0MCwgIDEx
OSwKKyAgICAgIDEzMSwgIDEwMSwgIDQzOSwgIDEwOCwgIDEzMiwgIDEwNSwgIDEyMCwgIDEyMSwg
IDExNiwgIDEyNSwKKyAgICAgIDE2MywgIDExNywgIDEyNiwgIDEzMywgIDE3NiwgIDE5OCwgIDEy
MiwgIDEyMywgIDI2NCwgIDEyNCwKKyAgICAgIDEyNywgIDQzOCwgIDE3NywgIDE5OSwgIDIxNiwg
IDIxNywgIDI2NSwgIDEyOCwgIDEzNiwgICA2NCwKKyAgICAgICA2NCwgICA2NCwgICA2NCwgICA2
NCwgICA2NCwgICA2NCwgIDEzOCwgIDEzOCwgIDEzOCwgIDEzOCwKKyAgICAgIDEzOCwgIDEzOCwg
IDEzOCwgIDQzNywgIDE3MCwgIDEzNywgIDE5MCwgIDE3MSwgIDE3MiwgIDQwNiwKKworICAgICAg
NDA3LCAgMTczLCAgMTM5LCAgMTc0LCAgMjQyLCAgMjQzLCAgMjQ0LCAgNDM2LCAgMTM3LCAgNDM1
LAorICAgICAgNDM0LCAgMTkxLCAgNDMzLCAgNDMyLCAgIDY2LCAgMTM5LCAgIDY3LCAgIDY3LCAg
IDY3LCAgIDY3LAorICAgICAgIDY3LCAgIDY3LCAgIDY4LCAgIDY2LCAgNDMxLCAgIDY4LCAgIDY4
LCAgIDY4LCAgIDY4LCAgIDY4LAorICAgICAgIDY4LCAgIDY4LCAgIDY5LCAgMTQxLCAgMTQxLCAg
MTQxLCAgMTQxLCAgMTQxLCAgMTQxLCAgMTQxLAorICAgICAgNDMwLCAgIDY5LCAgMTQwLCAgNDI5
LCAgMTQwLCAgIDY5LCAgNDI4LCAgMTQxLCAgMTQxLCAgMTQxLAorICAgICAgMTQxLCAgMTQxLCAg
MTQxLCAgMTQxLCAgIDY5LCAgMjA2LCAgNDI3LCAgMjA2LCAgNDI2LCAgNDI1LAorICAgICAgMjA3
LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMTM4LCAgMTM4LCAgMTM4LAor
ICAgICAgMTM4LCAgMTM4LCAgMTM4LCAgMTM4LCAgMjY5LCAgMjcwLCAgMjcxLCAgNDI0LCAgNDIz
LCAgMjA4LAorICAgICAgNDIyLCAgMjA4LCAgNDIxLCAgMTM5LCAgMjA5LCAgMjA5LCAgMjA5LCAg
MjA5LCAgMjA5LCAgMjA5LAorICAgICAgMjA5LCAgMjc3LCAgMjc4LCAgMjc5LCAgNDIwLCAgNDE5
LCAgMTM5LCAgMTQxLCAgMTQxLCAgMTQxLAorCisgICAgICAxNDEsICAxNDEsICAxNDEsICAxNDEs
ICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDcsCisgICAgICAyMDcsICAyMDcsICAy
MDcsICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDksICAyMDksCisgICAgICAyMDks
ICAyMDksICAyMDksICAyMDksICAyMDksICAyMDksICAyMDksICAyMDksICAyMDksICAyMDksCisg
ICAgICAyMDksICAyMDksICAyODYsICAyODcsICAyODgsICAyOTMsICAyOTQsICAyOTUsICAyOTcs
ICAyOTgsCisgICAgICAyOTksICAzMDUsICAzMDYsICAzMDcsICAzODcsICAzODgsICAzODksICA0
MTgsICA0MTcsICA0MTYsCisgICAgICA0MTUsICA0MTQsICA0MTMsICA0MTIsICA0MTEsICA0MTAs
ICA0MDksICAzOTAsICA0MDgsICAzOTEsCisgICAgICAgNzksICAgNzksICA0MDUsICA0MDQsICA0
MDMsICA0MDIsICA0MDEsICA0MDAsICAzOTksICAzOTgsCisgICAgICAzOTcsICAzOTYsICAzOTUs
ICAzOTQsICAzOTMsICAzOTIsICAzODYsICAzODUsICAzODQsICAzODMsCisgICAgICAzODIsICAz
ODEsICAzODAsICAzNzksICAzNzgsICAzNzcsICAzNzYsICAzNzUsICAzNzQsICAzNzMsCisgICAg
ICAzNzIsICAzNzEsICAzNzAsICAzNjksICAzNjgsICAzNjcsICAzNjYsICAzNjUsICAzNjQsICAz
NjMsCisKKyAgICAgIDM2MiwgIDM2MSwgIDM2MCwgIDM1OSwgIDM1OCwgIDM1NywgIDM1NiwgIDM1
NSwgIDM1NCwgIDM1MywKKyAgICAgIDM1MiwgIDM1MSwgIDM1MCwgIDM0OSwgIDM0OCwgIDM0Nywg
IDM0NiwgIDM0NSwgIDM0NCwgIDM0MywKKyAgICAgIDM0MiwgIDM0MSwgIDM0MCwgIDMzOSwgIDMz
OCwgIDMzNywgIDMzNiwgIDMzNSwgIDMzNCwgIDMzMywKKyAgICAgIDMzMiwgIDMzMSwgIDMzMCwg
IDMyOSwgIDMyOCwgIDMyNywgIDMyNiwgIDMyNSwgIDMyNCwgIDMyMywKKyAgICAgIDMyMiwgIDMy
MSwgIDMyMCwgIDMxOSwgIDMxOCwgIDMxNywgIDMxNiwgIDMxNSwgIDMxNCwgIDMxMywKKyAgICAg
IDMxMiwgIDMxMSwgIDMxMCwgIDMwOSwgIDMwOCwgIDMwNCwgIDMwMywgIDMwMiwgIDMwMSwgIDMw
MCwKKyAgICAgIDI5NiwgIDI5MiwgIDI5MSwgIDI5MCwgIDI4OSwgIDI4NSwgIDI4NCwgIDI4Mywg
IDI4MiwgIDI4MSwKKyAgICAgIDI4MCwgIDI3NiwgIDI3NSwgIDI3NCwgIDI3MywgIDI3MiwgIDI2
OCwgIDI2NywgIDI2NiwgIDI2MywKKyAgICAgIDI2MiwgIDI2MSwgIDI2MCwgIDI1OSwgIDI1OCwg
IDI1NywgIDI1NiwgIDI1NSwgIDI1NCwgIDI1MywKKyAgICAgIDI1MiwgIDI1MSwgIDI1MCwgIDI0
OSwgIDI0OCwgIDI0NywgIDI0NiwgIDI0NSwgIDI0MSwgIDI0MCwKKworICAgICAgMjM5LCAgMjM4
LCAgMjM3LCAgMjM2LCAgMjM1LCAgMjM0LCAgMjMzLCAgMjMyLCAgMjMxLCAgMjMwLAorICAgICAg
MjI5LCAgMjI4LCAgMjI3LCAgMjI2LCAgMjI1LCAgMjI0LCAgMjIzLCAgMjIyLCAgMjIxLCAgMjIw
LAorICAgICAgMjE5LCAgMjE4LCAgMjE1LCAgMjE0LCAgMjEzLCAgMjEyLCAgMjExLCAgMjEwLCAg
MjA1LCAgMjAyLAorICAgICAgMjAxLCAgMjAwLCAgMTk3LCAgMTk2LCAgMTk1LCAgMTk0LCAgMTkz
LCAgMTkyLCAgMTg5LCAgMTg4LAorICAgICAgMTg3LCAgMTg2LCAgMTg1LCAgMTg0LCAgMTgzLCAg
MTgyLCAgMTgxLCAgMTgwLCAgMTc5LCAgMTc4LAorICAgICAgMTc1LCAgMTY5LCAgMTY4LCAgMTY3
LCAgMTY2LCAgMTY1LCAgMTY0LCAgMTYxLCAgMTYwLCAgMTU5LAorICAgICAgMTU4LCAgMTU3LCAg
MTU2LCAgMTU1LCAgMTU0LCAgMTUzLCAgMTUyLCAgMTUxLCAgMTUwLCAgMTQ5LAorICAgICAgMTQ4
LCAgMTQ3LCAgMTQ2LCAgMTQ1LCAgMTQ0LCAgMTQzLCAgMTM0LCAgMTE4LCAgMTE0LCAgMTA5LAor
ICAgICAgMTAyLCAgIDc2LCAgIDcxLCAgIDY1LCAgIDU5LCAgIDU0LCAgNDQyLCAgICAzLCAgNDQy
LCAgNDQyLAorICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLAorCisgICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCisgICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCisgICAgICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCisgICAgICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCisg
ICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsCisgICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIKKyAgICB9IDsKKworc3Rh
dGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1s2NTZdID0KKyAgICB7ICAgMCwKKyAgICAg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgOCwgICAgOCwgICAgOSwK
KyAgICAgICAxMywgICAxNSwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAx
NiwgICAyNCwKKyAgICAgICAyNCwgICAzMCwgICAzMCwgICA0MCwgICAxNSwgICAxMywgICA0Nywg
ICA0MCwgICAgOSwgICAxOCwKKyAgICAgICA0NywgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAx
OCwgICAxOCwgICAxOCwgICAxOSwgICAyOSwKKworICAgICAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5
LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE4LCAgIDIyLCAgIDMxLAorICAgICAgIDQxLCAgIDMxLCAg
IDE4LCAgIDI5LCAgNDQ0LCAgIDMxLCAgIDE5LCAgMTMzLCAgNDM5LCAgMTMzLAorICAgICAgIDE4
LCAgIDMyLCAgIDM0LCAgIDQxLCAgIDM0LCAgIDIyLCAgIDMzLCAgIDIyLCAgIDIyLCAgIDE5LAor
ICAgICAgIDMzLCAgIDMyLCAgIDM1LCAgIDM0LCAgIDMyLCAgIDMzLCAgIDM3LCAgIDE4LCAgIDUx
LCAgIDM4LAorICAgICAgIDM1LCAgIDMzLCAgIDM1LCAgIDQzLCAgIDM3LCAgIDM1LCAgIDM4LCAg
IDk5LCAgNDM4LCAgIDQ1LAorICAgICAgIDQ4LCAgIDM1LCAgNDM3LCAgIDM4LCAgIDQ4LCAgIDM3
LCAgIDQ1LCAgIDQ1LCAgIDQzLCAgIDQ2LAorICAgICAgIDk5LCAgIDQzLCAgIDQ2LCAgIDQ4LCAg
MTA5LCAgMTI5LCAgIDQ1LCAgIDQ1LCAgMTk4LCAgIDQ1LAorICAgICAgIDQ2LCAgNDM2LCAgMTA5
LCAgMTI5LCAgMTUyLCAgMTUyLCAgMTk4LCAgIDQ2LCAgIDUxLCAgIDY0LAorICAgICAgIDY0LCAg
IDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LAorICAg
ICAgIDY2LCAgIDY2LCAgIDY2LCAgNDM1LCAgMTA3LCAgIDY0LCAgMTIyLCAgMTA3LCAgMTA3LCAg
NDAxLAorCisgICAgICA0MDEsICAxMDcsICAgNjYsICAxMDcsICAxNzgsICAxNzgsICAxNzgsICA0
MzQsICAgNjQsICA0MzIsCisgICAgICA0MzAsICAxMjIsICA0MjksICA0MjgsICAgNjcsICAgNjYs
ICAgNjcsICAgNjcsICAgNjcsICAgNjcsCisgICAgICAgNjcsICAgNjcsICAgNjcsICAgNjgsICA0
MjcsICAgNjgsICAgNjgsICAgNjgsICAgNjgsICAgNjgsCisgICAgICAgNjgsICAgNjgsICAgNjcs
ICAxNDAsICAxNDAsICAxNDAsICAxNDAsICAxNDAsICAxNDAsICAxNDAsCisgICAgICA0MjYsICAg
NjgsICAgNjksICA0MjQsICAgNjksICAgNjcsICA0MjMsICAgNjksICAgNjksICAgNjksCisgICAg
ICAgNjksICAgNjksICAgNjksICAgNjksICAgNjgsICAxMzcsICA0MjIsICAxMzcsICA0MjEsICA0
MjAsCisgICAgICAxMzcsICAxMzcsICAxMzcsICAxMzcsICAxMzcsICAxMzcsICAxMzcsICAxMzgs
ICAxMzgsICAxMzgsCisgICAgICAxMzgsICAxMzgsICAxMzgsICAxMzgsICAyMDIsICAyMDIsICAy
MDIsICA0MTksICA0MTgsICAxMzksCisgICAgICA0MTcsICAxMzksICA0MTYsICAxMzgsICAxMzks
ICAxMzksICAxMzksICAxMzksICAxMzksICAxMzksCisgICAgICAxMzksICAyMTMsICAyMTMsICAy
MTMsICA0MTQsICA0MTMsICAxMzgsICAxNDEsICAxNDEsICAxNDEsCisKKyAgICAgIDE0MSwgIDE0
MSwgIDE0MSwgIDE0MSwgIDIwNiwgIDIwNiwgIDIwNiwgIDIwNiwgIDIwNiwgIDIwNiwKKyAgICAg
IDIwNiwgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwOCwgIDIw
OCwKKyAgICAgIDIwOCwgIDIwOCwgIDIwOCwgIDIwOCwgIDIwOCwgIDIwOSwgIDIwOSwgIDIwOSwg
IDIwOSwgIDIwOSwKKyAgICAgIDIwOSwgIDIwOSwgIDIyMSwgIDIyMSwgIDIyMSwgIDIyOSwgIDIy
OSwgIDIyOSwgIDIzMywgIDIzMywKKyAgICAgIDIzMywgIDIzOSwgIDIzOSwgIDIzOSwgIDM3Miwg
IDM3MiwgIDM3MiwgIDQxMiwgIDQxMSwgIDQxMCwKKyAgICAgIDQwOSwgIDQwOCwgIDQwNywgIDQw
NiwgIDQwNSwgIDQwNCwgIDQwMywgIDM3MiwgIDQwMiwgIDM3MiwKKyAgICAgIDQ0MywgIDQ0Mywg
IDQwMCwgIDM5MSwgIDM5MCwgIDM4OSwgIDM4OCwgIDM4NywgIDM4NiwgIDM4NCwKKyAgICAgIDM4
MywgIDM4MiwgIDM3OSwgIDM3OCwgIDM3NiwgIDM3MywgIDM3MSwgIDM3MCwgIDM2OSwgIDM2NywK
KyAgICAgIDM2NiwgIDM2NSwgIDM2MiwgIDM2MSwgIDM2MCwgIDM1OSwgIDM1OCwgIDM1NywgIDM1
NiwgIDM1NSwKKyAgICAgIDM0OSwgIDM0NiwgIDM0MywgIDM0MiwgIDM0MSwgIDM0MCwgIDMzOSwg
IDMzNywgIDMzNSwgIDMzNCwKKworICAgICAgMzMzLCAgMzMyLCAgMzMwLCAgMzI5LCAgMzI3LCAg
MzI1LCAgMzI0LCAgMzIzLCAgMzIyLCAgMzIxLAorICAgICAgMzIwLCAgMzE5LCAgMzE4LCAgMzE2
LCAgMzE1LCAgMzE0LCAgMzEzLCAgMzEyLCAgMzExLCAgMzEwLAorICAgICAgMzA5LCAgMzA4LCAg
MzA0LCAgMzAzLCAgMzAwLCAgMjg5LCAgMjg1LCAgMjg0LCAgMjgzLCAgMjgyLAorICAgICAgMjc1
LCAgMjc0LCAgMjczLCAgMjY4LCAgMjY3LCAgMjY2LCAgMjY1LCAgMjY0LCAgMjYzLCAgMjYwLAor
ICAgICAgMjU5LCAgMjU4LCAgMjU3LCAgMjU2LCAgMjU1LCAgMjU0LCAgMjUzLCAgMjUyLCAgMjUx
LCAgMjUwLAorICAgICAgMjQ5LCAgMjQ4LCAgMjQ3LCAgMjQ2LCAgMjQ1LCAgMjM4LCAgMjM3LCAg
MjM2LCAgMjM1LCAgMjM0LAorICAgICAgMjMyLCAgMjI4LCAgMjI2LCAgMjI1LCAgMjI0LCAgMjIw
LCAgMjE5LCAgMjE4LCAgMjE3LCAgMjE2LAorICAgICAgMjE1LCAgMjEyLCAgMjEwLCAgMjA1LCAg
MjA0LCAgMjAzLCAgMjAxLCAgMjAwLCAgMTk5LCAgMTk3LAorICAgICAgMTk2LCAgMTk1LCAgMTk0
LCAgMTkzLCAgMTkyLCAgMTkxLCAgMTkwLCAgMTg5LCAgMTg4LCAgMTg3LAorICAgICAgMTg2LCAg
MTg1LCAgMTg0LCAgMTgzLCAgMTgyLCAgMTgxLCAgMTgwLCAgMTc5LCAgMTc3LCAgMTc2LAorCisg
ICAgICAxNzUsICAxNzQsICAxNzMsICAxNzIsICAxNzEsICAxNzAsICAxNjksICAxNjgsICAxNjcs
ICAxNjYsCisgICAgICAxNjUsICAxNjMsICAxNjIsICAxNjEsICAxNjAsICAxNTksICAxNTgsICAx
NTcsICAxNTYsICAxNTUsCisgICAgICAxNTQsICAxNTMsICAxNTEsICAxNTAsICAxNDksICAxNDgs
ICAxNDcsICAxNDYsICAxMzQsICAxMzIsCisgICAgICAxMzEsICAxMzAsICAxMjgsICAxMjcsICAx
MjYsICAxMjUsICAxMjQsICAxMjMsICAxMjEsICAxMjAsCisgICAgICAxMTksICAxMTgsICAxMTcs
ICAxMTYsICAxMTUsICAxMTQsICAxMTMsICAxMTIsICAxMTEsICAxMTAsCisgICAgICAxMDgsICAx
MDUsICAxMDQsICAxMDMsICAxMDIsICAxMDEsICAxMDAsICAgOTgsICAgOTcsICAgOTYsCisgICAg
ICAgOTUsICAgOTQsICAgOTMsICAgOTIsICAgOTEsICAgOTAsICAgODksICAgODgsICAgODcsICAg
ODYsCisgICAgICAgODUsICAgODQsICAgODMsICAgODIsICAgNzgsICAgNzQsICAgNDksICAgNDQs
ICAgNDIsICAgMzksCisgICAgICAgMzYsICAgMjMsICAgMjAsICAgMTcsICAgMTIsICAgIDcsICAg
IDMsICA0NDIsICA0NDIsICA0NDIsCisgICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCisKKyAgICAgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKKyAgICAgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKKyAgICAg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwKKyAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwKKyAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKKyAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0Mgor
ICAgIH0gOworCisvKiBUYWJsZSBvZiBib29sZWFucywgdHJ1ZSBpZiBydWxlIGNvdWxkIG1hdGNo
IGVvbC4gKi8KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl9tYXRjaF9l
b2xbMTQ4XSA9CisgICAgeyAgIDAsCiswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAgICAgfTsK
KworLyogVGhlIGludGVudCBiZWhpbmQgdGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0
Y2gKKyAqIGFueSB1c2VzIG9mIFJFSkVDVCB3aGljaCBmbGV4IG1pc3NlZC4KKyAqLworI2RlZmlu
ZSBSRUpFQ1QgcmVqZWN0X3VzZWRfYnV0X25vdF9kZXRlY3RlZAorI2RlZmluZSB5eW1vcmUoKSB5
eW1vcmVfdXNlZF9idXRfbm90X2RldGVjdGVkCisjZGVmaW5lIFlZX01PUkVfQURKIDAKKyNkZWZp
bmUgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAorLyoKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK1Ro
aXMgZmlsZSBjb250YWlucyB0aGUgTGV4IHNwZWNpZmljYXRpb24gZm9yIEdMU0wgRVMuCitCYXNl
ZCBvbiBBTlNJIEMgZ3JhbW1hciwgTGV4IHNwZWNpZmljYXRpb246CitodHRwOi8vd3d3Lmx5c2F0
b3IubGl1LnNlL2MvQU5TSS1DLWdyYW1tYXItbC5odG1sCisKK0lGIFlPVSBNT0RJRlkgVEhJUyBG
SUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaCwKK1dISUNIIEdFTkVS
QVRFUyBUSEUgR0xTTCBFUyBMRVhFUiAoZ2xzbGFuZ19sZXguY3BwKS4KKyovCisKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1BhcnNlQ29udGV4dC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9U
b2tlbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuaCIKKworLyogd2luZG93cyBvbmx5IHBy
YWdtYSAqLworI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZSA6IDQxMDIp
CisjZW5kaWYKKworI2RlZmluZSBZWV9VU0VSX0FDVElPTiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICB5eWxsb2MtPmZpcnN0X2ZpbGUgPSB5eWxsb2MtPmxhc3RfZmlsZSA9
IHl5Y29sdW1uOyBcCisgICAgeXlsbG9jLT5maXJzdF9saW5lID0geXlsbG9jLT5sYXN0X2xpbmUg
PSB5eWxpbmVubzsKKworI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4X3NpemUpIFwK
KyAgICByZXN1bHQgPSBzdHJpbmdfaW5wdXQoYnVmLCBtYXhfc2l6ZSwgeXlzY2FubmVyKTsKKwor
c3RhdGljIHl5X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCB5eV9zaXplX3QgbWF4X3Np
emUsIHl5c2Nhbl90IHl5c2Nhbm5lcik7CitzdGF0aWMgaW50IGNoZWNrX3R5cGUoeXlzY2FuX3Qg
eXlzY2FubmVyKTsKK3N0YXRpYyBpbnQgcmVzZXJ2ZWRfd29yZCh5eXNjYW5fdCB5eXNjYW5uZXIp
Oworc3RhdGljIGludCBpbnRfY29uc3RhbnQoeXlzY2FuX3QgeXlzY2FubmVyKTsKK3N0YXRpYyBp
bnQgZmxvYXRfY29uc3RhbnQoeXlzY2FuX3QgeXlzY2FubmVyKTsKKworI2RlZmluZSBJTklUSUFM
IDAKKworI2RlZmluZSBZWV9FWFRSQV9UWVBFIFRQYXJzZUNvbnRleHQqCisKKy8qIEhvbGRzIHRo
ZSBlbnRpcmUgc3RhdGUgb2YgdGhlIHJlZW50cmFudCBzY2FubmVyLiAqLworc3RydWN0IHl5Z3V0
c190CisgICAgeworCisgICAgLyogVXNlci1kZWZpbmVkLiBOb3QgdG91Y2hlZCBieSBmbGV4LiAq
LworICAgIFlZX0VYVFJBX1RZUEUgeXlleHRyYV9yOworCisgICAgLyogVGhlIHJlc3QgYXJlIHRo
ZSBzYW1lIGFzIHRoZSBnbG9iYWxzIGRlY2xhcmVkIGluIHRoZSBub24tcmVlbnRyYW50IHNjYW5u
ZXIuICovCisgICAgRklMRSAqeXlpbl9yLCAqeXlvdXRfcjsKKyAgICBzaXplX3QgeXlfYnVmZmVy
X3N0YWNrX3RvcDsgLyoqPCBpbmRleCBvZiB0b3Agb2Ygc3RhY2suICovCisgICAgc2l6ZV90IHl5
X2J1ZmZlcl9zdGFja19tYXg7IC8qKjwgY2FwYWNpdHkgb2Ygc3RhY2suICovCisgICAgWVlfQlVG
RkVSX1NUQVRFICogeXlfYnVmZmVyX3N0YWNrOyAvKio8IFN0YWNrIGFzIGFuIGFycmF5LiAqLwor
ICAgIGNoYXIgeXlfaG9sZF9jaGFyOworICAgIHl5X3NpemVfdCB5eV9uX2NoYXJzOworICAgIHl5
X3NpemVfdCB5eWxlbmdfcjsKKyAgICBjaGFyICp5eV9jX2J1Zl9wOworICAgIGludCB5eV9pbml0
OworICAgIGludCB5eV9zdGFydDsKKyAgICBpbnQgeXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9m
OworICAgIGludCB5eV9zdGFydF9zdGFja19wdHI7CisgICAgaW50IHl5X3N0YXJ0X3N0YWNrX2Rl
cHRoOworICAgIGludCAqeXlfc3RhcnRfc3RhY2s7CisgICAgeXlfc3RhdGVfdHlwZSB5eV9sYXN0
X2FjY2VwdGluZ19zdGF0ZTsKKyAgICBjaGFyKiB5eV9sYXN0X2FjY2VwdGluZ19jcG9zOworCisg
ICAgaW50IHl5bGluZW5vX3I7CisgICAgaW50IHl5X2ZsZXhfZGVidWdfcjsKKworICAgIGNoYXIg
Knl5dGV4dF9yOworICAgIGludCB5eV9tb3JlX2ZsYWc7CisgICAgaW50IHl5X21vcmVfbGVuOwor
CisgICAgWVlTVFlQRSAqIHl5bHZhbF9yOworCisgICAgWVlMVFlQRSAqIHl5bGxvY19yOworCisg
ICAgfTsgLyogZW5kIHN0cnVjdCB5eWd1dHNfdCAqLworCitzdGF0aWMgaW50IHl5X2luaXRfZ2xv
YmFscyAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKKyAgICAvKiBUaGlzIG11c3QgZ28gaGVyZSBi
ZWNhdXNlIFlZU1RZUEUgYW5kIFlZTFRZUEUgYXJlIGluY2x1ZGVkCisgICAgICogZnJvbSBiaXNv
biBvdXRwdXQgaW4gc2VjdGlvbiAxLiovCisgICAgIyAgICBkZWZpbmUgeXlsdmFsIHl5Zy0+eXls
dmFsX3IKKyAgICAKKyAgICAjICAgIGRlZmluZSB5eWxsb2MgeXlnLT55eWxsb2NfcgorICAgIAor
aW50IHl5bGV4X2luaXQgKHl5c2Nhbl90KiBzY2FubmVyKTsKKworaW50IHl5bGV4X2luaXRfZXh0
cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkLHl5c2Nhbl90KiBzY2FubmVyKTsKKworLyog
QWNjZXNzb3IgbWV0aG9kcyB0byBnbG9iYWxzLgorICAgVGhlc2UgYXJlIG1hZGUgdmlzaWJsZSB0
byBub24tcmVlbnRyYW50IHNjYW5uZXJzIGZvciBjb252ZW5pZW5jZS4gKi8KKworaW50IHl5bGV4
X2Rlc3Ryb3kgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitpbnQgeXlnZXRfZGVidWcgKHl5c2Nh
bl90IHl5c2Nhbm5lciApOworCit2b2lkIHl5c2V0X2RlYnVnIChpbnQgZGVidWdfZmxhZyAseXlz
Y2FuX3QgeXlzY2FubmVyICk7CisKK1lZX0VYVFJBX1RZUEUgeXlnZXRfZXh0cmEgKHl5c2Nhbl90
IHl5c2Nhbm5lciApOworCit2b2lkIHl5c2V0X2V4dHJhIChZWV9FWFRSQV9UWVBFIHVzZXJfZGVm
aW5lZCAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKK0ZJTEUgKnl5Z2V0X2luICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKKwordm9pZCB5eXNldF9pbiAgKEZJTEUgKiBpbl9zdHIgLHl5c2Nhbl90IHl5
c2Nhbm5lciApOworCitGSUxFICp5eWdldF9vdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2
b2lkIHl5c2V0X291dCAgKEZJTEUgKiBvdXRfc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwor
eXlfc2l6ZV90IHl5Z2V0X2xlbmcgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitjaGFyICp5eWdl
dF90ZXh0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworaW50IHl5Z2V0X2xpbmVubyAoeXlzY2Fu
X3QgeXlzY2FubmVyICk7CisKK3ZvaWQgeXlzZXRfbGluZW5vIChpbnQgbGluZV9udW1iZXIgLHl5
c2Nhbl90IHl5c2Nhbm5lciApOworCitpbnQgeXlnZXRfY29sdW1uICAoeXlzY2FuX3QgeXlzY2Fu
bmVyICk7CisKK3ZvaWQgeXlzZXRfY29sdW1uIChpbnQgY29sdW1uX25vICx5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKKworWVlTVFlQRSAqIHl5Z2V0X2x2YWwgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwor
Cit2b2lkIHl5c2V0X2x2YWwgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0gLHl5c2Nhbl90IHl5c2Nh
bm5lciApOworCisgICAgICAgWVlMVFlQRSAqeXlnZXRfbGxvYyAoeXlzY2FuX3QgeXlzY2FubmVy
ICk7CisgICAgCisgICAgICAgIHZvaWQgeXlzZXRfbGxvYyAoWVlMVFlQRSAqIHl5bGxvY19wYXJh
bSAseXlzY2FuX3QgeXlzY2FubmVyICk7CisgICAgCisvKiBNYWNyb3MgYWZ0ZXIgdGhpcyBwb2lu
dCBjYW4gYWxsIGJlIG92ZXJyaWRkZW4gYnkgdXNlciBkZWZpbml0aW9ucyBpbgorICogc2VjdGlv
biAxLgorICovCisKKyNpZm5kZWYgWVlfU0tJUF9ZWVdSQVAKKyNpZmRlZiBfX2NwbHVzcGx1cwor
ZXh0ZXJuICJDIiBpbnQgeXl3cmFwICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyNlbHNlCitleHRl
cm4gaW50IHl5d3JhcCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZW5kaWYKKyNlbmRpZgorCisj
aWZuZGVmIHl5dGV4dF9wdHIKK3N0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciAqLHl5
Y29uc3QgY2hhciAqLGludCAseXlzY2FuX3QgeXlzY2FubmVyKTsKKyNlbmRpZgorCisjaWZkZWYg
WVlfTkVFRF9TVFJMRU4KK3N0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAq
ICx5eXNjYW5fdCB5eXNjYW5uZXIpOworI2VuZGlmCisKKyNpZm5kZWYgWVlfTk9fSU5QVVQKKwor
I2lmZGVmIF9fY3BsdXNwbHVzCitzdGF0aWMgaW50IHl5aW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5l
ciApOworI2Vsc2UKK3N0YXRpYyBpbnQgaW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworI2Vu
ZGlmCisKKyNlbmRpZgorCisvKiBBbW91bnQgb2Ygc3R1ZmYgdG8gc2x1cnAgdXAgd2l0aCBlYWNo
IHJlYWQuICovCisjaWZuZGVmIFlZX1JFQURfQlVGX1NJWkUKKyNkZWZpbmUgWVlfUkVBRF9CVUZf
U0laRSA4MTkyCisjZW5kaWYKKworLyogQ29weSB3aGF0ZXZlciB0aGUgbGFzdCBydWxlIG1hdGNo
ZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gKi8KKyNpZm5kZWYgRUNITworLyogVGhpcyB1c2Vk
IHRvIGJlIGFuIGZwdXRzKCksIGJ1dCBzaW5jZSB0aGUgc3RyaW5nIG1pZ2h0IGNvbnRhaW4gTlVM
J3MsCisgKiB3ZSBub3cgdXNlIGZ3cml0ZSgpLgorICovCisjZGVmaW5lIEVDSE8gZG8geyBpZiAo
ZndyaXRlKCB5eXRleHQsIHl5bGVuZywgMSwgeXlvdXQgKSkge30gfSB3aGlsZSAoMCkKKyNlbmRp
ZgorCisvKiBHZXRzIGlucHV0IGFuZCBzdHVmZnMgaXQgaW50byAiYnVmIi4gIG51bWJlciBvZiBj
aGFyYWN0ZXJzIHJlYWQsIG9yIFlZX05VTEwsCisgKiBpcyByZXR1cm5lZCBpbiAicmVzdWx0Ii4K
KyAqLworI2lmbmRlZiBZWV9JTlBVVAorI2RlZmluZSBZWV9JTlBVVChidWYscmVzdWx0LG1heF9z
aXplKSBcCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZl
ICkgXAorCQl7IFwKKwkJaW50IGMgPSAnKic7IFwKKwkJc2l6ZV90IG47IFwKKwkJZm9yICggbiA9
IDA7IG4gPCBtYXhfc2l6ZSAmJiBcCisJCQkgICAgIChjID0gZ2V0YyggeXlpbiApKSAhPSBFT0Yg
JiYgYyAhPSAnXG4nOyArK24gKSBcCisJCQlidWZbbl0gPSAoY2hhcikgYzsgXAorCQlpZiAoIGMg
PT0gJ1xuJyApIFwKKwkJCWJ1ZltuKytdID0gKGNoYXIpIGM7IFwKKwkJaWYgKCBjID09IEVPRiAm
JiBmZXJyb3IoIHl5aW4gKSApIFwKKwkJCVlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQgaW4gZmxleCBz
Y2FubmVyIGZhaWxlZCIgKTsgXAorCQlyZXN1bHQgPSBuOyBcCisJCX0gXAorCWVsc2UgXAorCQl7
IFwKKwkJZXJybm89MDsgXAorCQl3aGlsZSAoIChyZXN1bHQgPSBmcmVhZChidWYsIDEsIG1heF9z
aXplLCB5eWluKSk9PTAgJiYgZmVycm9yKHl5aW4pKSBcCisJCQl7IFwKKwkJCWlmKCBlcnJubyAh
PSBFSU5UUikgXAorCQkJCXsgXAorCQkJCVlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQgaW4gZmxleCBz
Y2FubmVyIGZhaWxlZCIgKTsgXAorCQkJCWJyZWFrOyBcCisJCQkJfSBcCisJCQllcnJubz0wOyBc
CisJCQljbGVhcmVycih5eWluKTsgXAorCQkJfSBcCisJCX1cCitcCisKKyNlbmRpZgorCisvKiBO
byBzZW1pLWNvbG9uIGFmdGVyIHJldHVybjsgY29ycmVjdCB1c2FnZSBpcyB0byB3cml0ZSAieXl0
ZXJtaW5hdGUoKTsiIC0KKyAqIHdlIGRvbid0IHdhbnQgYW4gZXh0cmEgJzsnIGFmdGVyIHRoZSAi
cmV0dXJuIiBiZWNhdXNlIHRoYXQgd2lsbCBjYXVzZQorICogc29tZSBjb21waWxlcnMgdG8gY29t
cGxhaW4gYWJvdXQgdW5yZWFjaGFibGUgc3RhdGVtZW50cy4KKyAqLworI2lmbmRlZiB5eXRlcm1p
bmF0ZQorI2RlZmluZSB5eXRlcm1pbmF0ZSgpIHJldHVybiBZWV9OVUxMCisjZW5kaWYKKworLyog
TnVtYmVyIG9mIGVudHJpZXMgYnkgd2hpY2ggc3RhcnQtY29uZGl0aW9uIHN0YWNrIGdyb3dzLiAq
LworI2lmbmRlZiBZWV9TVEFSVF9TVEFDS19JTkNSCisjZGVmaW5lIFlZX1NUQVJUX1NUQUNLX0lO
Q1IgMjUKKyNlbmRpZgorCisvKiBSZXBvcnQgYSBmYXRhbCBlcnJvci4gKi8KKyNpZm5kZWYgWVlf
RkFUQUxfRVJST1IKKyNkZWZpbmUgWVlfRkFUQUxfRVJST1IobXNnKSB5eV9mYXRhbF9lcnJvcigg
bXNnICwgeXlzY2FubmVyKQorI2VuZGlmCisKKy8qIGVuZCB0YWJsZXMgc2VyaWFsaXphdGlvbiBz
dHJ1Y3R1cmVzIGFuZCBwcm90b3R5cGVzICovCisKKy8qIERlZmF1bHQgZGVjbGFyYXRpb24gb2Yg
Z2VuZXJhdGVkIHNjYW5uZXIgLSBhIGRlZmluZSBzbyB0aGUgdXNlciBjYW4KKyAqIGVhc2lseSBh
ZGQgcGFyYW1ldGVycy4KKyAqLworI2lmbmRlZiBZWV9ERUNMCisjZGVmaW5lIFlZX0RFQ0xfSVNf
T1VSUyAxCisKK2V4dGVybiBpbnQgeXlsZXggXAorICAgICAgICAgICAgICAgKFlZU1RZUEUgKiB5
eWx2YWxfcGFyYW0sWVlMVFlQRSAqIHl5bGxvY19wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyKTsK
KworI2RlZmluZSBZWV9ERUNMIGludCB5eWxleCBcCisgICAgICAgICAgICAgICAoWVlTVFlQRSAq
IHl5bHZhbF9wYXJhbSwgWVlMVFlQRSAqIHl5bGxvY19wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKKyNlbmRpZiAvKiAhWVlfREVDTCAqLworCisvKiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBiZWdp
bm5pbmcgb2YgZWFjaCBydWxlLCBhZnRlciB5eXRleHQgYW5kIHl5bGVuZworICogaGF2ZSBiZWVu
IHNldCB1cC4KKyAqLworI2lmbmRlZiBZWV9VU0VSX0FDVElPTgorI2RlZmluZSBZWV9VU0VSX0FD
VElPTgorI2VuZGlmCisKKy8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGVuZCBvZiBlYWNoIHJ1bGUu
ICovCisjaWZuZGVmIFlZX0JSRUFLCisjZGVmaW5lIFlZX0JSRUFLIGJyZWFrOworI2VuZGlmCisK
KyNkZWZpbmUgWVlfUlVMRV9TRVRVUCBcCisJWVlfVVNFUl9BQ1RJT04KKworLyoqIFRoZSBtYWlu
IHNjYW5uZXIgZnVuY3Rpb24gd2hpY2ggZG9lcyBhbGwgdGhlIHdvcmsuCisgKi8KK1lZX0RFQ0wK
K3sKKwlyZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7CisJcmVnaXN0ZXIg
Y2hhciAqeXlfY3AsICp5eV9icDsKKwlyZWdpc3RlciBpbnQgeXlfYWN0OworICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworICAgIHl5bHZh
bCA9IHl5bHZhbF9wYXJhbTsKKworICAgIHl5bGxvYyA9IHl5bGxvY19wYXJhbTsKKworCWlmICgg
IXl5Zy0+eXlfaW5pdCApCisJCXsKKwkJeXlnLT55eV9pbml0ID0gMTsKKworI2lmZGVmIFlZX1VT
RVJfSU5JVAorCQlZWV9VU0VSX0lOSVQ7CisjZW5kaWYKKworCQlpZiAoICEgeXlnLT55eV9zdGFy
dCApCisJCQl5eWctPnl5X3N0YXJ0ID0gMTsJLyogZmlyc3Qgc3RhcnQgc3RhdGUgKi8KKworCQlp
ZiAoICEgeXlpbiApCisJCQl5eWluID0gc3RkaW47CisKKwkJaWYgKCAhIHl5b3V0ICkKKwkJCXl5
b3V0ID0gc3Rkb3V0OworCisJCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApIHsKKwkJCXl5ZW5z
dXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RSA9CisJCQkJeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOwor
CQl9CisKKwkJeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisJCX0KKworCXdoaWxl
ICggMSApCQkvKiBsb29wcyB1bnRpbCBlbmQtb2YtZmlsZSBpcyByZWFjaGVkICovCisJCXsKKwkJ
eXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7CisKKwkJLyogU3VwcG9ydCBvZiB5eXRleHQuICovCisJ
CSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCisJCS8qIHl5X2JwIHBvaW50cyB0byB0aGUg
cG9zaXRpb24gaW4geXlfY2hfYnVmIG9mIHRoZSBzdGFydCBvZgorCQkgKiB0aGUgY3VycmVudCBy
dW4uCisJCSAqLworCQl5eV9icCA9IHl5X2NwOworCisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWct
Pnl5X3N0YXJ0OworeXlfbWF0Y2g6CisJCWRvCisJCQl7CisJCQlyZWdpc3RlciBZWV9DSEFSIHl5
X2MgPSB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXTsKKwkJCWlmICggeXlfYWNjZXB0W3l5X2N1
cnJlbnRfc3RhdGVdICkKKwkJCQl7CisJCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9
IHl5X2N1cnJlbnRfc3RhdGU7CisJCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlf
Y3A7CisJCQkJfQorCQkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSAr
IHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQorCQkJCXsKKwkJCQl5eV9jdXJyZW50X3N0YXRl
ID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOworCQkJCWlmICggeXlfY3VycmVudF9z
dGF0ZSA+PSA0NDMgKQorCQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsK
KwkJCQl9CisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9z
dGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCSsreXlfY3A7CisJCQl9CisJCXdoaWxl
ICggeXlfY3VycmVudF9zdGF0ZSAhPSA0NDIgKTsKKwkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNj
ZXB0aW5nX2Nwb3M7CisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5n
X3N0YXRlOworCit5eV9maW5kX2FjdGlvbjoKKwkJeXlfYWN0ID0geXlfYWNjZXB0W3l5X2N1cnJl
bnRfc3RhdGVdOworCisJCVlZX0RPX0JFRk9SRV9BQ1RJT047CisKKwkJaWYgKCB5eV9hY3QgIT0g
WVlfRU5EX09GX0JVRkZFUiAmJiB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbeXlfYWN0XSApCisJCQl7
CisJCQl5eV9zaXplX3QgeXlsOworCQkJZm9yICggeXlsID0gMDsgeXlsIDwgeXlsZW5nOyArK3l5
bCApCisJCQkJaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nICkKKwkJCQkJICAgCisgICAgZG97IHl5
bGluZW5vKys7CisgICAgICAgIHl5Y29sdW1uPTA7CisgICAgfXdoaWxlKDApCis7CisJCQl9CisK
K2RvX2FjdGlvbjoJLyogVGhpcyBsYWJlbCBpcyB1c2VkIG9ubHkgdG8gYWNjZXNzIEVPRiBhY3Rp
b25zLiAqLworCisJCXN3aXRjaCAoIHl5X2FjdCApCisJeyAvKiBiZWdpbm5pbmcgb2YgYWN0aW9u
IHN3aXRjaCAqLworCQkJY2FzZSAwOiAvKiBtdXN0IGJhY2sgdXAgKi8KKwkJCS8qIHVuZG8gdGhl
IGVmZmVjdHMgb2YgWVlfRE9fQkVGT1JFX0FDVElPTiAqLworCQkJKnl5X2NwID0geXlnLT55eV9o
b2xkX2NoYXI7CisJCQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKwkJCXl5
X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOworCQkJZ290byB5
eV9maW5kX2FjdGlvbjsKKworY2FzZSAxOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gSU5WQVJJ
QU5UOyB9CisJWVlfQlJFQUsKK2Nhc2UgMjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIEhJR0hf
UFJFQ0lTSU9OOyB9CisJWVlfQlJFQUsKK2Nhc2UgMzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJu
IE1FRElVTV9QUkVDSVNJT047IH0KKwlZWV9CUkVBSworY2FzZSA0OgorWVlfUlVMRV9TRVRVUAor
eyByZXR1cm4gTE9XX1BSRUNJU0lPTjsgfQorCVlZX0JSRUFLCitjYXNlIDU6CitZWV9SVUxFX1NF
VFVQCit7IHJldHVybiBQUkVDSVNJT047IH0KKwlZWV9CUkVBSworY2FzZSA2OgorWVlfUlVMRV9T
RVRVUAoreyByZXR1cm4gQVRUUklCVVRFOyB9CisJWVlfQlJFQUsKK2Nhc2UgNzoKK1lZX1JVTEVf
U0VUVVAKK3sgcmV0dXJuIENPTlNUX1FVQUw7IH0KKwlZWV9CUkVBSworY2FzZSA4OgorWVlfUlVM
RV9TRVRVUAoreyByZXR1cm4gVU5JRk9STTsgfQorCVlZX0JSRUFLCitjYXNlIDk6CitZWV9SVUxF
X1NFVFVQCit7IHJldHVybiBWQVJZSU5HOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTA6CitZWV9SVUxF
X1NFVFVQCit7IHJldHVybiBCUkVBSzsgfQorCVlZX0JSRUFLCitjYXNlIDExOgorWVlfUlVMRV9T
RVRVUAoreyByZXR1cm4gQ09OVElOVUU7IH0KKwlZWV9CUkVBSworY2FzZSAxMjoKK1lZX1JVTEVf
U0VUVVAKK3sgcmV0dXJuIERPOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTM6CitZWV9SVUxFX1NFVFVQ
Cit7IHJldHVybiBGT1I7IH0KKwlZWV9CUkVBSworY2FzZSAxNDoKK1lZX1JVTEVfU0VUVVAKK3sg
cmV0dXJuIFdISUxFOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTU6CitZWV9SVUxFX1NFVFVQCit7IHJl
dHVybiBJRjsgfQorCVlZX0JSRUFLCitjYXNlIDE2OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4g
RUxTRTsgfQorCVlZX0JSRUFLCitjYXNlIDE3OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gSU5f
UVVBTDsgfQorCVlZX0JSRUFLCitjYXNlIDE4OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gT1VU
X1FVQUw7IH0KKwlZWV9CUkVBSworY2FzZSAxOToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIElO
T1VUX1FVQUw7IH0KKwlZWV9CUkVBSworY2FzZSAyMDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJu
IEZMT0FUX1RZUEU7IH0KKwlZWV9CUkVBSworY2FzZSAyMToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0
dXJuIElOVF9UWVBFOyB9CisJWVlfQlJFQUsKK2Nhc2UgMjI6CitZWV9SVUxFX1NFVFVQCit7IHJl
dHVybiBWT0lEX1RZUEU7IH0KKwlZWV9CUkVBSworY2FzZSAyMzoKK1lZX1JVTEVfU0VUVVAKK3sg
cmV0dXJuIEJPT0xfVFlQRTsgfQorCVlZX0JSRUFLCitjYXNlIDI0OgorWVlfUlVMRV9TRVRVUAor
eyB5eWx2YWwtPmxleC5iID0gdHJ1ZTsgIHJldHVybiBCT09MQ09OU1RBTlQ7IH0KKwlZWV9CUkVB
SworY2FzZSAyNToKK1lZX1JVTEVfU0VUVVAKK3sgeXlsdmFsLT5sZXguYiA9IGZhbHNlOyByZXR1
cm4gQk9PTENPTlNUQU5UOyB9CisJWVlfQlJFQUsKK2Nhc2UgMjY6CitZWV9SVUxFX1NFVFVQCit7
IHJldHVybiBESVNDQVJEOyB9CisJWVlfQlJFQUsKK2Nhc2UgMjc6CitZWV9SVUxFX1NFVFVQCit7
IHJldHVybiBSRVRVUk47IH0KKwlZWV9CUkVBSworY2FzZSAyODoKK1lZX1JVTEVfU0VUVVAKK3sg
cmV0dXJuIE1BVFJJWDI7IH0KKwlZWV9CUkVBSworY2FzZSAyOToKK1lZX1JVTEVfU0VUVVAKK3sg
cmV0dXJuIE1BVFJJWDM7IH0KKwlZWV9CUkVBSworY2FzZSAzMDoKK1lZX1JVTEVfU0VUVVAKK3sg
cmV0dXJuIE1BVFJJWDQ7IH0KKwlZWV9CUkVBSworY2FzZSAzMToKK1lZX1JVTEVfU0VUVVAKK3sg
cmV0dXJuIFZFQzI7IH0KKwlZWV9CUkVBSworY2FzZSAzMjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0
dXJuIFZFQzM7IH0KKwlZWV9CUkVBSworY2FzZSAzMzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJu
IFZFQzQ7IH0KKwlZWV9CUkVBSworY2FzZSAzNDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIElW
RUMyOyB9CisJWVlfQlJFQUsKK2Nhc2UgMzU6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBJVkVD
MzsgfQorCVlZX0JSRUFLCitjYXNlIDM2OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gSVZFQzQ7
IH0KKwlZWV9CUkVBSworY2FzZSAzNzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIEJWRUMyOyB9
CisJWVlfQlJFQUsKK2Nhc2UgMzg6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBCVkVDMzsgfQor
CVlZX0JSRUFLCitjYXNlIDM5OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gQlZFQzQ7IH0KKwlZ
WV9CUkVBSworY2FzZSA0MDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIFNBTVBMRVIyRDsgfQor
CVlZX0JSRUFLCitjYXNlIDQxOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gU0FNUExFUkNVQkU7
IH0KKwlZWV9CUkVBSworY2FzZSA0MjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIFNBTVBMRVJf
RVhURVJOQUxfT0VTOyB9CisJWVlfQlJFQUsKK2Nhc2UgNDM6CitZWV9SVUxFX1NFVFVQCit7IHJl
dHVybiBTQU1QTEVSMkRSRUNUOyB9CisJWVlfQlJFQUsKK2Nhc2UgNDQ6CitZWV9SVUxFX1NFVFVQ
Cit7IHJldHVybiBTVFJVQ1Q7IH0KKwlZWV9CUkVBSworY2FzZSA0NToKK1lZX1JVTEVfU0VUVVAK
K3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDQ2
OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJ
WVlfQlJFQUsKK2Nhc2UgNDc6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA0ODoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDQ5OgorWVlf
UlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJF
QUsKK2Nhc2UgNTA6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA1MToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDUyOgorWVlfUlVMRV9T
RVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nh
c2UgNTM6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KKwlZWV9CUkVBSworY2FzZSA1NDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDU1OgorWVlfUlVMRV9TRVRVUAor
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNTY6
CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZ
WV9CUkVBSworY2FzZSA1NzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDU4OgorWVlfUlVMRV9TRVRVUAoreyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNTk6CitZWV9S
VUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVB
SworY2FzZSA2MDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDYxOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNjI6CitZWV9SVUxFX1NF
VFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2Fz
ZSA2MzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQorCVlZX0JSRUFLCitjYXNlIDY0OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNjU6CitZWV9SVUxFX1NFVFVQCit7
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA2NjoK
K1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZ
X0JSRUFLCitjYXNlIDY3OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNjg6CitZWV9SVUxFX1NFVFVQCit7IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA2OToKK1lZX1JV
TEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFL
CitjYXNlIDcwOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNzE6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA3MjoKK1lZX1JVTEVfU0VU
VVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNl
IDczOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
CisJWVlfQlJFQUsKK2Nhc2UgNzQ6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA3NToKK1lZX1JVTEVfU0VUVVAKK3sg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDc2Ogor
WVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlf
QlJFQUsKK2Nhc2UgNzc6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA3ODoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDc5OgorWVlfUlVM
RV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsK
K2Nhc2UgODA6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KKwlZWV9CUkVBSworY2FzZSA4MToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDgyOgorWVlfUlVMRV9TRVRV
UAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2Ug
ODM6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
KwlZWV9CUkVBSworY2FzZSA4NDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDg1OgorWVlfUlVMRV9TRVRVUAoreyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgODY6CitZ
WV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9C
UkVBSworY2FzZSA4NzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDg4OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgODk6CitZWV9SVUxF
X1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSwor
Y2FzZSA5MDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQorCVlZX0JSRUFLCitjYXNlIDkxOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTI6CitZWV9SVUxFX1NFVFVQ
Cit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5
MzoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgIHl5bHZhbC0+bGV4LnN0cmluZyA9IE5ld1Bvb2xUU3Ry
aW5nKHl5dGV4dCk7IAorICAgcmV0dXJuIGNoZWNrX3R5cGUoeXlzY2FubmVyKTsKK30KKwlZWV9C
UkVBSworY2FzZSA5NDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIGludF9jb25zdGFudCh5eXNj
YW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTU6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBp
bnRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDk2OgorWVlfUlVMRV9T
RVRVUAoreyByZXR1cm4gaW50X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2Fz
ZSA5NzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nhbm5lcik7
IH0KKwlZWV9CUkVBSworY2FzZSA5ODoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIGZsb2F0X2Nv
bnN0YW50KHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5OToKK1lZX1JVTEVfU0VUVVAK
K3sgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSAx
MDA6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBBRERfQVNTSUdOOyB9CisJWVlfQlJFQUsKK2Nh
c2UgMTAxOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gU1VCX0FTU0lHTjsgfQorCVlZX0JSRUFL
CitjYXNlIDEwMjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIE1VTF9BU1NJR047IH0KKwlZWV9C
UkVBSworY2FzZSAxMDM6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBESVZfQVNTSUdOOyB9CisJ
WVlfQlJFQUsKK2Nhc2UgMTA0OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gTU9EX0FTU0lHTjsg
fQorCVlZX0JSRUFLCitjYXNlIDEwNToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIExFRlRfQVNT
SUdOOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTA2OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gUklH
SFRfQVNTSUdOOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTA3OgorWVlfUlVMRV9TRVRVUAoreyByZXR1
cm4gQU5EX0FTU0lHTjsgfQorCVlZX0JSRUFLCitjYXNlIDEwODoKK1lZX1JVTEVfU0VUVVAKK3sg
cmV0dXJuIFhPUl9BU1NJR047IH0KKwlZWV9CUkVBSworY2FzZSAxMDk6CitZWV9SVUxFX1NFVFVQ
Cit7IHJldHVybiBPUl9BU1NJR047IH0KKwlZWV9CUkVBSworY2FzZSAxMTA6CitZWV9SVUxFX1NF
VFVQCit7IHJldHVybiBJTkNfT1A7IH0KKwlZWV9CUkVBSworY2FzZSAxMTE6CitZWV9SVUxFX1NF
VFVQCit7IHJldHVybiBERUNfT1A7IH0KKwlZWV9CUkVBSworY2FzZSAxMTI6CitZWV9SVUxFX1NF
VFVQCit7IHJldHVybiBBTkRfT1A7IH0KKwlZWV9CUkVBSworY2FzZSAxMTM6CitZWV9SVUxFX1NF
VFVQCit7IHJldHVybiBPUl9PUDsgfQorCVlZX0JSRUFLCitjYXNlIDExNDoKK1lZX1JVTEVfU0VU
VVAKK3sgcmV0dXJuIFhPUl9PUDsgfQorCVlZX0JSRUFLCitjYXNlIDExNToKK1lZX1JVTEVfU0VU
VVAKK3sgcmV0dXJuIExFX09QOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTE2OgorWVlfUlVMRV9TRVRV
UAoreyByZXR1cm4gR0VfT1A7IH0KKwlZWV9CUkVBSworY2FzZSAxMTc6CitZWV9SVUxFX1NFVFVQ
Cit7IHJldHVybiBFUV9PUDsgfQorCVlZX0JSRUFLCitjYXNlIDExODoKK1lZX1JVTEVfU0VUVVAK
K3sgcmV0dXJuIE5FX09QOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTE5OgorWVlfUlVMRV9TRVRVUAor
eyByZXR1cm4gTEVGVF9PUDsgfQorCVlZX0JSRUFLCitjYXNlIDEyMDoKK1lZX1JVTEVfU0VUVVAK
K3sgcmV0dXJuIFJJR0hUX09QOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTIxOgorWVlfUlVMRV9TRVRV
UAoreyByZXR1cm4gU0VNSUNPTE9OOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTIyOgorWVlfUlVMRV9T
RVRVUAoreyByZXR1cm4gTEVGVF9CUkFDRTsgfQorCVlZX0JSRUFLCitjYXNlIDEyMzoKK1lZX1JV
TEVfU0VUVVAKK3sgcmV0dXJuIFJJR0hUX0JSQUNFOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTI0Ogor
WVlfUlVMRV9TRVRVUAoreyByZXR1cm4gQ09NTUE7IH0KKwlZWV9CUkVBSworY2FzZSAxMjU6CitZ
WV9SVUxFX1NFVFVQCit7IHJldHVybiBDT0xPTjsgfQorCVlZX0JSRUFLCitjYXNlIDEyNjoKK1lZ
X1JVTEVfU0VUVVAKK3sgcmV0dXJuIEVRVUFMOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTI3OgorWVlf
UlVMRV9TRVRVUAoreyByZXR1cm4gTEVGVF9QQVJFTjsgfQorCVlZX0JSRUFLCitjYXNlIDEyODoK
K1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIFJJR0hUX1BBUkVOOyB9CisJWVlfQlJFQUsKK2Nhc2Ug
MTI5OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gTEVGVF9CUkFDS0VUOyB9CisJWVlfQlJFQUsK
K2Nhc2UgMTMwOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gUklHSFRfQlJBQ0tFVDsgfQorCVlZ
X0JSRUFLCitjYXNlIDEzMToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIERPVDsgfQorCVlZX0JS
RUFLCitjYXNlIDEzMjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIEJBTkc7IH0KKwlZWV9CUkVB
SworY2FzZSAxMzM6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBEQVNIOyB9CisJWVlfQlJFQUsK
K2Nhc2UgMTM0OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gVElMREU7IH0KKwlZWV9CUkVBSwor
Y2FzZSAxMzU6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBQTFVTOyB9CisJWVlfQlJFQUsKK2Nh
c2UgMTM2OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gU1RBUjsgfQorCVlZX0JSRUFLCitjYXNl
IDEzNzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIFNMQVNIOyB9CisJWVlfQlJFQUsKK2Nhc2Ug
MTM4OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gUEVSQ0VOVDsgfQorCVlZX0JSRUFLCitjYXNl
IDEzOToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIExFRlRfQU5HTEU7IH0KKwlZWV9CUkVBSwor
Y2FzZSAxNDA6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBSSUdIVF9BTkdMRTsgfQorCVlZX0JS
RUFLCitjYXNlIDE0MToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIFZFUlRJQ0FMX0JBUjsgfQor
CVlZX0JSRUFLCitjYXNlIDE0MjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIENBUkVUOyB9CisJ
WVlfQlJFQUsKK2Nhc2UgMTQzOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gQU1QRVJTQU5EOyB9
CisJWVlfQlJFQUsKK2Nhc2UgMTQ0OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gUVVFU1RJT047
IH0KKwlZWV9CUkVBSworY2FzZSAxNDU6CisvKiBydWxlIDE0NSBjYW4gbWF0Y2ggZW9sICovCitZ
WV9SVUxFX1NFVFVQCit7IH0KKwlZWV9CUkVBSworY2FzZSBZWV9TVEFURV9FT0YoSU5JVElBTCk6
Cit7IHl5dGVybWluYXRlKCk7IH0KKwlZWV9CUkVBSworY2FzZSAxNDY6CitZWV9SVUxFX1NFVFVQ
Cit7IGFzc2VydChmYWxzZSk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTQ3OgorWVlf
UlVMRV9TRVRVUAorRUNITzsKKwlZWV9CUkVBSworCisJY2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgor
CQl7CisJCS8qIEFtb3VudCBvZiB0ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9CIGNo
YXIuICovCisJCWludCB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5X2NwIC0g
eXlnLT55eXRleHRfcHRyKSAtIDE7CisKKwkJLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19C
RUZPUkVfQUNUSU9OLiAqLworCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfUkVT
VE9SRV9ZWV9NT1JFX09GRlNFVAorCisJCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9ORVcgKQorCQkJeworCQkJLyogV2UncmUgc2Nh
bm5pbmcgYSBuZXcgZmlsZSBvciBpbnB1dCBzb3VyY2UuICBJdCdzCisJCQkgKiBwb3NzaWJsZSB0
aGF0IHRoaXMgaGFwcGVuZWQgYmVjYXVzZSB0aGUgdXNlcgorCQkJICoganVzdCBwb2ludGVkIHl5
aW4gYXQgYSBuZXcgc291cmNlIGFuZCBjYWxsZWQKKwkJCSAqIHl5bGV4KCkuICBJZiBzbywgdGhl
biB3ZSBoYXZlIHRvIGFzc3VyZQorCQkJICogY29uc2lzdGVuY3kgYmV0d2VlbiBZWV9DVVJSRU5U
X0JVRkZFUiBhbmQgb3VyCisJCQkgKiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxhY2Ug
dG8gZG8gc28sIGJlY2F1c2UKKwkJCSAqIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAob3RoZXIg
dGhhbiBwb3NzaWJseSBhCisJCQkgKiBiYWNrLXVwKSB0aGF0IHdpbGwgbWF0Y2ggZm9yIHRoZSBu
ZXcgaW5wdXQgc291cmNlLgorCQkJICovCisJCQl5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2lucHV0X2ZpbGUgPSB5eWluOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9i
dWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05PUk1BTDsKKwkJCX0KKworCQkvKiBOb3RlIHRoYXQg
aGVyZSB3ZSB0ZXN0IGZvciB5eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9uCisJCSAqIG9m
IHRoZSBmaXJzdCBFT0IgaW4gdGhlIGJ1ZmZlciwgc2luY2UgeXlfY19idWZfcCB3aWxsCisJCSAq
IGFscmVhZHkgaGF2ZSBiZWVuIGluY3JlbWVudGVkIHBhc3QgdGhlIE5VTCBjaGFyYWN0ZXIKKwkJ
ICogKHNpbmNlIGFsbCBzdGF0ZXMgbWFrZSB0cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhlCisJCSAq
IGVuZC1vZi1idWZmZXIgc3RhdGUpLiAgQ29udHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0CisJCSAq
IGluIGlucHV0KCkuCisJCSAqLworCQlpZiAoIHl5Zy0+eXlfY19idWZfcCA8PSAmWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSApCisJCQl7IC8qIFRo
aXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KKwkJCXl5X3N0YXRlX3R5cGUgeXlfbmV4dF9zdGF0ZTsK
KworCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21h
dGNoZWRfdGV4dDsKKworCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0
ZSggeXlzY2FubmVyICk7CisKKwkJCS8qIE9rYXksIHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1h
a2UgdGhlIE5VTAorCQkJICogdHJhbnNpdGlvbi4gIFdlIGNvdWxkbid0IGhhdmUKKwkJCSAqIHl5
X2dldF9wcmV2aW91c19zdGF0ZSgpIGdvIGFoZWFkIGFuZCBkbyBpdAorCQkJICogZm9yIHVzIGJl
Y2F1c2UgaXQgZG9lc24ndCBrbm93IGhvdyB0byBkZWFsCisJCQkgKiB3aXRoIHRoZSBwb3NzaWJp
bGl0eSBvZiBqYW1taW5nIChhbmQgd2UgZG9uJ3QKKwkJCSAqIHdhbnQgdG8gYnVpbGQgamFtbWlu
ZyBpbnRvIGl0IGJlY2F1c2UgdGhlbiBpdAorCQkJICogd2lsbCBydW4gbW9yZSBzbG93bHkpLgor
CQkJICovCisKKwkJCXl5X25leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50
X3N0YXRlICwgeXlzY2FubmVyKTsKKworCQkJeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9N
T1JFX0FESjsKKworCQkJaWYgKCB5eV9uZXh0X3N0YXRlICkKKwkJCQl7CisJCQkJLyogQ29uc3Vt
ZSB0aGUgTlVMLiAqLworCQkJCXl5X2NwID0gKyt5eWctPnl5X2NfYnVmX3A7CisJCQkJeXlfY3Vy
cmVudF9zdGF0ZSA9IHl5X25leHRfc3RhdGU7CisJCQkJZ290byB5eV9tYXRjaDsKKwkJCQl9CisK
KwkJCWVsc2UKKwkJCQl7CisJCQkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7
CisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisJ
CQkJZ290byB5eV9maW5kX2FjdGlvbjsKKwkJCQl9CisJCQl9CisKKwkJZWxzZSBzd2l0Y2ggKCB5
eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKKwkJCXsKKwkJCWNhc2UgRU9CX0FDVF9F
TkRfT0ZfRklMRToKKwkJCQl7CisJCQkJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2Yg
PSAwOworCisJCQkJaWYgKCB5eXdyYXAoeXlzY2FubmVyICkgKQorCQkJCQl7CisJCQkJCS8qIE5v
dGU6IGJlY2F1c2Ugd2UndmUgdGFrZW4gY2FyZSBpbgorCQkJCQkgKiB5eV9nZXRfbmV4dF9idWZm
ZXIoKSB0byBoYXZlIHNldCB1cAorCQkJCQkgKiB5eXRleHQsIHdlIGNhbiBub3cgc2V0IHVwCisJ
CQkJCSAqIHl5X2NfYnVmX3Agc28gdGhhdCBpZiBzb21lIHRvdGFsCisJCQkJCSAqIGhvc2VyIChs
aWtlIGZsZXggaXRzZWxmKSB3YW50cyB0bworCQkJCQkgKiBjYWxsIHRoZSBzY2FubmVyIGFmdGVy
IHdlIHJldHVybiB0aGUKKwkJCQkJICogWVlfTlVMTCwgaXQnbGwgc3RpbGwgd29yayAtIGFub3Ro
ZXIKKwkJCQkJICogWVlfTlVMTCB3aWxsIGdldCByZXR1cm5lZC4KKwkJCQkJICovCisJCQkJCXl5
Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOworCisJCQkJCXl5
X2FjdCA9IFlZX1NUQVRFX0VPRihZWV9TVEFSVCk7CisJCQkJCWdvdG8gZG9fYWN0aW9uOworCQkJ
CQl9CisKKwkJCQllbHNlCisJCQkJCXsKKwkJCQkJaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9z
d2l0Y2hfb25fZW9mICkKKwkJCQkJCVlZX05FV19GSUxFOworCQkJCQl9CisJCQkJYnJlYWs7CisJ
CQkJfQorCisJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJCQl5eWctPnl5X2NfYnVm
X3AgPQorCQkJCQl5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0Owor
CisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVy
ICk7CisKKwkJCQl5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKKwkJCQl5eV9icCA9IHl5Zy0+eXl0
ZXh0X3B0ciArIFlZX01PUkVfQURKOworCQkJCWdvdG8geXlfbWF0Y2g7CisKKwkJCWNhc2UgRU9C
X0FDVF9MQVNUX01BVENIOgorCQkJCXl5Zy0+eXlfY19idWZfcCA9CisJCQkJJllZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc107CisKKwkJCQl5eV9jdXJy
ZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKKworCQkJCXl5
X2NwID0geXlnLT55eV9jX2J1Zl9wOworCQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlf
TU9SRV9BREo7CisJCQkJZ290byB5eV9maW5kX2FjdGlvbjsKKwkJCX0KKwkJYnJlYWs7CisJCX0K
KworCWRlZmF1bHQ6CisJCVlZX0ZBVEFMX0VSUk9SKAorCQkJImZhdGFsIGZsZXggc2Nhbm5lciBp
bnRlcm5hbCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kIiApOworCX0gLyogZW5kIG9mIGFjdGlvbiBz
d2l0Y2ggKi8KKwkJfSAvKiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCit9IC8qIGVuZCBv
ZiB5eWxleCAqLworCisvKiB5eV9nZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8gcmVhZCBpbiBhIG5l
dyBidWZmZXIKKyAqCisgKiBSZXR1cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4gYWN0aW9uOgor
ICoJRU9CX0FDVF9MQVNUX01BVENIIC0KKyAqCUVPQl9BQ1RfQ09OVElOVUVfU0NBTiAtIGNvbnRp
bnVlIHNjYW5uaW5nIGZyb20gY3VycmVudCBwb3NpdGlvbgorICoJRU9CX0FDVF9FTkRfT0ZfRklM
RSAtIGVuZCBvZiBmaWxlCisgKi8KK3N0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNj
YW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOworCXJlZ2lzdGVyIGNoYXIgKmRlc3QgPSBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2NoX2J1ZjsKKwlyZWdpc3RlciBjaGFyICpzb3VyY2UgPSB5eWctPnl5
dGV4dF9wdHI7CisJcmVnaXN0ZXIgaW50IG51bWJlcl90b19tb3ZlLCBpOworCWludCByZXRfdmFs
OworCisJaWYgKCB5eWctPnl5X2NfYnVmX3AgPiAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gKQorCQlZWV9GQVRBTF9FUlJPUigKKwkJImZh
dGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tZW5kIG9mIGJ1ZmZlciBtaXNzZWQiICk7
CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfZmlsbF9idWZmZXIgPT0gMCAp
CisJCXsgLyogRG9uJ3QgdHJ5IHRvIGZpbGwgdGhlIGJ1ZmZlciwgc28gdGhpcyBpcyBhbiBFT0Yu
ICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyIC0gWVlfTU9SRV9B
REogPT0gMSApCisJCQl7CisJCQkvKiBXZSBtYXRjaGVkIGEgc2luZ2xlIGNoYXJhY3RlciwgdGhl
IEVPQiwgc28KKwkJCSAqIHRyZWF0IHRoaXMgYXMgYSBmaW5hbCBFT0YuCisJCQkgKi8KKwkJCXJl
dHVybiBFT0JfQUNUX0VORF9PRl9GSUxFOworCQkJfQorCisJCWVsc2UKKwkJCXsKKwkJCS8qIFdl
IG1hdGNoZWQgc29tZSB0ZXh0IHByaW9yIHRvIHRoZSBFT0IsIGZpcnN0CisJCQkgKiBwcm9jZXNz
IGl0LgorCQkJICovCisJCQlyZXR1cm4gRU9CX0FDVF9MQVNUX01BVENIOworCQkJfQorCQl9CisK
KwkvKiBUcnkgdG8gcmVhZCBtb3JlIGRhdGEuICovCisKKwkvKiBGaXJzdCBtb3ZlIGxhc3QgY2hh
cnMgdG8gc3RhcnQgb2YgYnVmZmVyLiAqLworCW51bWJlcl90b19tb3ZlID0gKGludCkgKHl5Zy0+
eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cikgLSAxOworCisJZm9yICggaSA9IDA7IGkgPCBu
dW1iZXJfdG9fbW92ZTsgKytpICkKKwkJKihkZXN0KyspID0gKihzb3VyY2UrKyk7CisKKwlpZiAo
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJf
RU9GX1BFTkRJTkcgKQorCQkvKiBkb24ndCBkbyB0aGUgcmVhZCwgaXQncyBub3QgZ3VhcmFudGVl
ZCB0byByZXR1cm4gYW4gRU9GLAorCQkgKiBqdXN0IGZvcmNlIGFuIEVPRgorCQkgKi8KKwkJWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzID0gMDsK
KworCWVsc2UKKwkJeworCQkJeXlfc2l6ZV90IG51bV90b19yZWFkID0KKwkJCVlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJd2hp
bGUgKCBudW1fdG9fcmVhZCA8PSAwICkKKwkJCXsgLyogTm90IGVub3VnaCByb29tIGluIHRoZSBi
dWZmZXIgLSBncm93IGl0LiAqLworCisJCQkvKiBqdXN0IGEgc2hvcnRlciBuYW1lIGZvciB0aGUg
Y3VycmVudCBidWZmZXIgKi8KKwkJCVlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFOworCisJCQlpbnQgeXlfY19idWZfcF9vZmZzZXQgPQorCQkJCShpbnQpICh5eWct
Pnl5X2NfYnVmX3AgLSBiLT55eV9jaF9idWYpOworCisJCQlpZiAoIGItPnl5X2lzX291cl9idWZm
ZXIgKQorCQkJCXsKKwkJCQl5eV9zaXplX3QgbmV3X3NpemUgPSBiLT55eV9idWZfc2l6ZSAqIDI7
CisKKwkJCQlpZiAoIG5ld19zaXplIDw9IDAgKQorCQkJCQliLT55eV9idWZfc2l6ZSArPSBiLT55
eV9idWZfc2l6ZSAvIDg7CisJCQkJZWxzZQorCQkJCQliLT55eV9idWZfc2l6ZSAqPSAyOworCisJ
CQkJYi0+eXlfY2hfYnVmID0gKGNoYXIgKikKKwkJCQkJLyogSW5jbHVkZSByb29tIGluIGZvciAy
IEVPQiBjaGFycy4gKi8KKwkJCQkJeXlyZWFsbG9jKCh2b2lkICopIGItPnl5X2NoX2J1ZixiLT55
eV9idWZfc2l6ZSArIDIgLHl5c2Nhbm5lciApOworCQkJCX0KKwkJCWVsc2UKKwkJCQkvKiBDYW4n
dCBncm93IGl0LCB3ZSBkb24ndCBvd24gaXQuICovCisJCQkJYi0+eXlfY2hfYnVmID0gMDsKKwor
CQkJaWYgKCAhIGItPnl5X2NoX2J1ZiApCisJCQkJWVlfRkFUQUxfRVJST1IoCisJCQkJImZhdGFs
IGVycm9yIC0gc2Nhbm5lciBpbnB1dCBidWZmZXIgb3ZlcmZsb3ciICk7CisKKwkJCXl5Zy0+eXlf
Y19idWZfcCA9ICZiLT55eV9jaF9idWZbeXlfY19idWZfcF9vZmZzZXRdOworCisJCQludW1fdG9f
cmVhZCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLQorCQkJCQkJbnVt
YmVyX3RvX21vdmUgLSAxOworCisJCQl9CisKKwkJaWYgKCBudW1fdG9fcmVhZCA+IFlZX1JFQURf
QlVGX1NJWkUgKQorCQkJbnVtX3RvX3JlYWQgPSBZWV9SRUFEX0JVRl9TSVpFOworCisJCS8qIFJl
YWQgaW4gbW9yZSBkYXRhLiAqLworCQlZWV9JTlBVVCggKCZZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2NoX2J1ZltudW1iZXJfdG9fbW92ZV0pLAorCQkJeXlnLT55eV9uX2NoYXJzLCBudW1f
dG9fcmVhZCApOworCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5
Zy0+eXlfbl9jaGFyczsKKwkJfQorCisJaWYgKCB5eWctPnl5X25fY2hhcnMgPT0gMCApCisJCXsK
KwkJaWYgKCBudW1iZXJfdG9fbW92ZSA9PSBZWV9NT1JFX0FESiApCisJCQl7CisJCQlyZXRfdmFs
ID0gRU9CX0FDVF9FTkRfT0ZfRklMRTsKKwkJCXl5cmVzdGFydCh5eWluICAseXlzY2FubmVyKTsK
KwkJCX0KKworCQllbHNlCisJCQl7CisJCQlyZXRfdmFsID0gRU9CX0FDVF9MQVNUX01BVENIOwor
CQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0KKwkJCQlZWV9C
VUZGRVJfRU9GX1BFTkRJTkc7CisJCQl9CisJCX0KKworCWVsc2UKKwkJcmV0X3ZhbCA9IEVPQl9B
Q1RfQ09OVElOVUVfU0NBTjsKKworCWlmICgoeXlfc2l6ZV90KSAoeXlnLT55eV9uX2NoYXJzICsg
bnVtYmVyX3RvX21vdmUpID4gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSkg
eworCQkvKiBFeHRlbmQgdGhlIGFycmF5IGJ5IDUwJSwgcGx1cyB0aGUgbnVtYmVyIHdlIHJlYWxs
eSBuZWVkLiAqLworCQl5eV9zaXplX3QgbmV3X3NpemUgPSB5eWctPnl5X25fY2hhcnMgKyBudW1i
ZXJfdG9fbW92ZSArICh5eWctPnl5X25fY2hhcnMgPj4gMSk7CisJCVlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfY2hfYnVmID0gKGNoYXIgKikgeXlyZWFsbG9jKCh2b2lkICopIFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmLG5ld19zaXplICx5eXNjYW5uZXIgKTsKKwkJaWYg
KCAhIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmICkKKwkJCVlZX0ZBVEFMX0VS
Uk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2dldF9uZXh0X2J1ZmZlcigpIiApOwor
CX0KKworCXl5Zy0+eXlfbl9jaGFycyArPSBudW1iZXJfdG9fbW92ZTsKKwlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdID0gWVlfRU5EX09GX0JVRkZF
Ul9DSEFSOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9j
aGFycyArIDFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCisJeXlnLT55eXRleHRfcHRyID0g
JllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWzBdOworCisJcmV0dXJuIHJldF92
YWw7Cit9CisKKy8qIHl5X2dldF9wcmV2aW91c19zdGF0ZSAtIGdldCB0aGUgc3RhdGUganVzdCBi
ZWZvcmUgdGhlIEVPQiBjaGFyIHdhcyByZWFjaGVkICovCisKKyAgICBzdGF0aWMgeXlfc3RhdGVf
dHlwZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZWdp
c3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7CisJcmVnaXN0ZXIgY2hhciAqeXlf
Y3A7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOworCisJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7CisKKwlmb3IgKCB5eV9j
cCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOyB5eV9jcCA8IHl5Zy0+eXlfY19idWZf
cDsgKyt5eV9jcCApCisJCXsKKwkJcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gKCp5eV9jcCA/IHl5
X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldIDogMSk7CisJCWlmICggeXlfYWNjZXB0W3l5X2N1cnJl
bnRfc3RhdGVdICkKKwkJCXsKKwkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9j
dXJyZW50X3N0YXRlOworCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7CisJ
CQl9CisJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAh
PSB5eV9jdXJyZW50X3N0YXRlICkKKwkJCXsKKwkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5
eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDQz
ICkKKwkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCX0KKwkJeXlf
Y3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2ln
bmVkIGludCkgeXlfY107CisJCX0KKworCXJldHVybiB5eV9jdXJyZW50X3N0YXRlOworfQorCisv
KiB5eV90cnlfTlVMX3RyYW5zIC0gdHJ5IHRvIG1ha2UgYSB0cmFuc2l0aW9uIG9uIHRoZSBOVUwg
Y2hhcmFjdGVyCisgKgorICogc3lub3BzaXMKKyAqCW5leHRfc3RhdGUgPSB5eV90cnlfTlVMX3Ry
YW5zKCBjdXJyZW50X3N0YXRlICk7CisgKi8KKyAgICBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV90
cnlfTlVMX3RyYW5zICAoeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQoreworCXJlZ2lzdGVyIGludCB5eV9pc19qYW07CisgICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOyAvKiBUaGlzIHZhciBtYXkg
YmUgdW51c2VkIGRlcGVuZGluZyB1cG9uIG9wdGlvbnMuICovCisJcmVnaXN0ZXIgY2hhciAqeXlf
Y3AgPSB5eWctPnl5X2NfYnVmX3A7CisKKwlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSAxOworCWlm
ICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKKwkJeworCQl5eWctPnl5X2xhc3RfYWNj
ZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKKwkJeXlnLT55eV9sYXN0X2FjY2VwdGlu
Z19jcG9zID0geXlfY3A7CisJCX0KKwl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRf
c3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCisJCXsKKwkJeXlfY3VycmVudF9z
dGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKKwkJaWYgKCB5eV9jdXJyZW50
X3N0YXRlID49IDQ0MyApCisJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsK
KwkJfQorCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRl
XSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOworCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRl
ID09IDQ0Mik7CisKKwkodm9pZCl5eWc7CisJcmV0dXJuIHl5X2lzX2phbSA/IDAgOiB5eV9jdXJy
ZW50X3N0YXRlOworfQorCisjaWZuZGVmIFlZX05PX0lOUFVUCisjaWZkZWYgX19jcGx1c3BsdXMK
KyAgICBzdGF0aWMgaW50IHl5aW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lcikKKyNlbHNlCisgICAg
c3RhdGljIGludCBpbnB1dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKKyNlbmRpZgorCit7CisJaW50
IGM7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOworCisJKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCisJaWYgKCAq
eXlnLT55eV9jX2J1Zl9wID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCisJCXsKKwkJLyogeXlf
Y19idWZfcCBub3cgcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2FudCB0byByZXR1cm4uCisJ
CSAqIElmIHRoaXMgb2NjdXJzICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFjdGVycywgdGhlbiBpdCdz
IGEKKwkJICogdmFsaWQgTlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0IHRoZSBlbmQgb2YgdGhl
IGJ1ZmZlci4KKwkJICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9wIDwgJllZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQorCQkJLyogVGhpcyB3YXMg
cmVhbGx5IGEgTlVMLiAqLworCQkJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7CisKKwkJZWxzZQor
CQkJeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8KKwkJCXl5X3NpemVfdCBvZmZzZXQgPSB5eWctPnl5
X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHI7CisJCQkrK3l5Zy0+eXlfY19idWZfcDsKKworCQkJ
c3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCisJCQkJeworCQkJCWNh
c2UgRU9CX0FDVF9MQVNUX01BVENIOgorCQkJCQkvKiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB5eV9n
X25fYigpCisJCQkJCSAqIHNlZXMgdGhhdCB3ZSd2ZSBhY2N1bXVsYXRlZCBhCisJCQkJCSAqIHRv
a2VuIGFuZCBmbGFncyB0aGF0IHdlIG5lZWQgdG8KKwkJCQkJICogdHJ5IG1hdGNoaW5nIHRoZSB0
b2tlbiBiZWZvcmUKKwkJCQkJICogcHJvY2VlZGluZy4gIEJ1dCBmb3IgaW5wdXQoKSwKKwkJCQkJ
ICogdGhlcmUncyBubyBtYXRjaGluZyB0byBjb25zaWRlci4KKwkJCQkJICogU28gY29udmVydCB0
aGUgRU9CX0FDVF9MQVNUX01BVENICisJCQkJCSAqIHRvIEVPQl9BQ1RfRU5EX09GX0ZJTEUuCisJ
CQkJCSAqLworCisJCQkJCS8qIFJlc2V0IGJ1ZmZlciBzdGF0dXMuICovCisJCQkJCXl5cmVzdGFy
dCh5eWluICx5eXNjYW5uZXIpOworCisJCQkJCS8qRkFMTFRIUk9VR0gqLworCisJCQkJY2FzZSBF
T0JfQUNUX0VORF9PRl9GSUxFOgorCQkJCQl7CisJCQkJCWlmICggeXl3cmFwKHl5c2Nhbm5lciAp
ICkKKwkJCQkJCXJldHVybiBFT0Y7CisKKwkJCQkJaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9z
d2l0Y2hfb25fZW9mICkKKwkJCQkJCVlZX05FV19GSUxFOworI2lmZGVmIF9fY3BsdXNwbHVzCisJ
CQkJCXJldHVybiB5eWlucHV0KHl5c2Nhbm5lcik7CisjZWxzZQorCQkJCQlyZXR1cm4gaW5wdXQo
eXlzY2FubmVyKTsKKyNlbmRpZgorCQkJCQl9CisKKwkJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVf
U0NBTjoKKwkJCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgb2Zmc2V0Owor
CQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCWMgPSAqKHVuc2lnbmVkIGNoYXIgKikg
eXlnLT55eV9jX2J1Zl9wOwkvKiBjYXN0IGZvciA4LWJpdCBjaGFyJ3MgKi8KKwkqeXlnLT55eV9j
X2J1Zl9wID0gJ1wwJzsJLyogcHJlc2VydmUgeXl0ZXh0ICovCisJeXlnLT55eV9ob2xkX2NoYXIg
PSAqKyt5eWctPnl5X2NfYnVmX3A7CisKKwlpZiAoIGMgPT0gJ1xuJyApCisJCSAgIAorICAgIGRv
eyB5eWxpbmVubysrOworICAgICAgICB5eWNvbHVtbj0wOworICAgIH13aGlsZSgwKQorOworCisJ
cmV0dXJuIGM7Cit9CisjZW5kaWYJLyogaWZuZGVmIFlZX05PX0lOUFVUICovCisKKy8qKiBJbW1l
ZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgc3RyZWFtLgorICogQHBhcmFtIGlu
cHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2Fu
bmVyIG9iamVjdC4KKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVzZXQgdGhlIHN0
YXJ0IGNvbmRpdGlvbiB0byBAYyBJTklUSUFMIC4KKyAqLworICAgIHZvaWQgeXlyZXN0YXJ0ICAo
RklMRSAqIGlucHV0X2ZpbGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJaWYgKCAhIFlZ
X0NVUlJFTlRfQlVGRkVSICl7CisgICAgICAgIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2Fu
bmVyKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KKyAgICAgICAgICAgIHl5X2NyZWF0
ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsKKwl9CisKKwl5eV9pbml0X2J1
ZmZlcihZWV9DVVJSRU5UX0JVRkZFUixpbnB1dF9maWxlICx5eXNjYW5uZXIpOworCXl5X2xvYWRf
YnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworfQorCisvKiogU3dpdGNoIHRvIGEgZGlmZmVyZW50
IGlucHV0IGJ1ZmZlci4KKyAqIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgaW5wdXQgYnVmZmVy
LgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KKyAgICB2b2lk
IHl5X3N3aXRjaF90b19idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIG5ld19idWZmZXIgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOworCisJLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVw
bGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5CisJICogd2l0aAorCSAqCQl5eXBvcF9idWZm
ZXJfc3RhdGUoKTsKKwkgKgkJeXlwdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVyKTsKKyAgICAg
Ki8KKwl5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7CisJaWYgKCBZWV9DVVJSRU5U
X0JVRkZFUiA9PSBuZXdfYnVmZmVyICkKKwkJcmV0dXJuOworCisJaWYgKCBZWV9DVVJSRU5UX0JV
RkZFUiApCisJCXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAq
LworCQkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKKwkJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOworCXl5X2xvYWRfYnVmZmVyX3N0
YXRlKHl5c2Nhbm5lciApOworCisJLyogV2UgZG9uJ3QgYWN0dWFsbHkga25vdyB3aGV0aGVyIHdl
IGRpZCB0aGlzIHN3aXRjaCBkdXJpbmcKKwkgKiBFT0YgKHl5d3JhcCgpKSBwcm9jZXNzaW5nLCBi
dXQgdGhlIG9ubHkgdGltZSB0aGlzIGZsYWcKKwkgKiBpcyBsb29rZWQgYXQgaXMgYWZ0ZXIgeXl3
cmFwKCkgaXMgY2FsbGVkLCBzbyBpdCdzIHNhZmUKKwkgKiB0byBnbyBhaGVhZCBhbmQgYWx3YXlz
IHNldCBpdC4KKwkgKi8KKwl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Cit9
CisKK3N0YXRpYyB2b2lkIHl5X2xvYWRfYnVmZmVyX3N0YXRlICAoeXlzY2FuX3QgeXlzY2FubmVy
KQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKKwl5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25f
Y2hhcnM7CisJeXlnLT55eXRleHRfcHRyID0geXlnLT55eV9jX2J1Zl9wID0gWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9idWZfcG9zOworCXl5aW4gPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2lucHV0X2ZpbGU7CisJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9w
OworfQorCisvKiogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gaW5wdXQgYnVmZmVyIHN0YXRl
LgorICogQHBhcmFtIGZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFyYW0gc2l6ZSBUaGUg
Y2hhcmFjdGVyIGJ1ZmZlciBzaXplIGluIGJ5dGVzLiBXaGVuIGluIGRvdWJ0LCB1c2UgQGMgWVlf
QlVGX1NJWkUuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEBy
ZXR1cm4gdGhlIGFsbG9jYXRlZCBidWZmZXIgc3RhdGUuCisgKi8KKyAgICBZWV9CVUZGRVJfU1RB
VEUgeXlfY3JlYXRlX2J1ZmZlciAgKEZJTEUgKiBmaWxlLCBpbnQgIHNpemUgLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCit7CisJWVlfQlVGRkVSX1NUQVRFIGI7CisgICAgCisJYiA9IChZWV9CVUZGRVJf
U1RBVEUpIHl5YWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5l
ciApOworCWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1v
cnkgaW4geXlfY3JlYXRlX2J1ZmZlcigpIiApOworCisJYi0+eXlfYnVmX3NpemUgPSBzaXplOwor
CisJLyogeXlfY2hfYnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2VyIHRoYW4gdGhlIHNp
emUgZ2l2ZW4gYmVjYXVzZQorCSAqIHdlIG5lZWQgdG8gcHV0IGluIDIgZW5kLW9mLWJ1ZmZlciBj
aGFyYWN0ZXJzLgorCSAqLworCWItPnl5X2NoX2J1ZiA9IChjaGFyICopIHl5YWxsb2MoYi0+eXlf
YnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJWVlf
RkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfY3JlYXRlX2J1ZmZlcigp
IiApOworCisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7CisKKwl5eV9pbml0X2J1ZmZlcihiLGZp
bGUgLHl5c2Nhbm5lcik7CisKKwlyZXR1cm4gYjsKK30KKworLyoqIERlc3Ryb3kgdGhlIGJ1ZmZl
ci4KKyAqIEBwYXJhbSBiIGEgYnVmZmVyIGNyZWF0ZWQgd2l0aCB5eV9jcmVhdGVfYnVmZmVyKCkK
KyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCisgICAgdm9pZCB5
eV9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIp
Cit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOworCisJaWYgKCAhIGIgKQorCQlyZXR1cm47CisKKwlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9C
VUZGRVIgKSAvKiBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgcG9wIGhlcmUuICovCisJCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRSA9IChZWV9CVUZGRVJfU1RBVEUpIDA7CisKKwlpZiAoIGItPnl5X2lz
X291cl9idWZmZXIgKQorCQl5eWZyZWUoKHZvaWQgKikgYi0+eXlfY2hfYnVmICx5eXNjYW5uZXIg
KTsKKworCXl5ZnJlZSgodm9pZCAqKSBiICx5eXNjYW5uZXIgKTsKK30KKworLyogSW5pdGlhbGl6
ZXMgb3IgcmVpbml0aWFsaXplcyBhIGJ1ZmZlci4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgc29tZXRp
bWVzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSBidWZmZXIsCisgKiBzdWNoIGFz
IGR1cmluZyBhIHl5cmVzdGFydCgpIG9yIGF0IEVPRi4KKyAqLworICAgIHN0YXRpYyB2b2lkIHl5
X2luaXRfYnVmZmVyICAoWVlfQlVGRkVSX1NUQVRFICBiLCBGSUxFICogZmlsZSAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKKworeworCWludCBvZXJybm8gPSBlcnJubzsKKyAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwl5eV9mbHVzaF9idWZm
ZXIoYiAseXlzY2FubmVyKTsKKworCWItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOworCWItPnl5X2Zp
bGxfYnVmZmVyID0gMTsKKworICAgIC8qIElmIGIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGVu
IHl5X2luaXRfYnVmZmVyIHdhcyBfcHJvYmFibHlfCisgICAgICogY2FsbGVkIGZyb20geXlyZXN0
YXJ0KCkgb3IgdGhyb3VnaCB5eV9nZXRfbmV4dF9idWZmZXIuCisgICAgICogSW4gdGhhdCBjYXNl
LCB3ZSBkb24ndCB3YW50IHRvIHJlc2V0IHRoZSBsaW5lbm8gb3IgY29sdW1uLgorICAgICAqLwor
ICAgIGlmIChiICE9IFlZX0NVUlJFTlRfQlVGRkVSKXsKKyAgICAgICAgYi0+eXlfYnNfbGluZW5v
ID0gMTsKKyAgICAgICAgYi0+eXlfYnNfY29sdW1uID0gMDsKKyAgICB9CisKKyAgICAgICAgYi0+
eXlfaXNfaW50ZXJhY3RpdmUgPSAwOworICAgIAorCWVycm5vID0gb2Vycm5vOworfQorCisvKiog
RGlzY2FyZCBhbGwgYnVmZmVyZWQgY2hhcmFjdGVycy4gT24gdGhlIG5leHQgc2NhbiwgWVlfSU5Q
VVQgd2lsbCBiZSBjYWxsZWQuCisgKiBAcGFyYW0gYiB0aGUgYnVmZmVyIHN0YXRlIHRvIGJlIGZs
dXNoZWQsIHVzdWFsbHkgQGMgWVlfQ1VSUkVOVF9CVUZGRVIuCisgKiBAcGFyYW0geXlzY2FubmVy
IFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworICAgIHZvaWQgeXlfZmx1c2hfYnVmZmVyIChZWV9C
VUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCWlmICggISBiICkKKwkJ
cmV0dXJuOworCisJYi0+eXlfbl9jaGFycyA9IDA7CisKKwkvKiBXZSBhbHdheXMgbmVlZCB0d28g
ZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLiAgVGhlIGZpcnN0IGNhdXNlcworCSAqIGEgdHJhbnNp
dGlvbiB0byB0aGUgZW5kLW9mLWJ1ZmZlciBzdGF0ZS4gIFRoZSBzZWNvbmQgY2F1c2VzCisJICog
YSBqYW0gaW4gdGhhdCBzdGF0ZS4KKwkgKi8KKwliLT55eV9jaF9idWZbMF0gPSBZWV9FTkRfT0Zf
QlVGRkVSX0NIQVI7CisJYi0+eXlfY2hfYnVmWzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwor
CisJYi0+eXlfYnVmX3BvcyA9ICZiLT55eV9jaF9idWZbMF07CisKKwliLT55eV9hdF9ib2wgPSAx
OworCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOworCisJaWYgKCBiID09IFlZ
X0NVUlJFTlRfQlVGRkVSICkKKwkJeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Cit9
CisKKy8qKiBQdXNoZXMgdGhlIG5ldyBzdGF0ZSBvbnRvIHRoZSBzdGFjay4gVGhlIG5ldyBzdGF0
ZSBiZWNvbWVzCisgKiAgdGhlIGN1cnJlbnQgc3RhdGUuIFRoaXMgZnVuY3Rpb24gd2lsbCBhbGxv
Y2F0ZSB0aGUgc3RhY2sKKyAqICBpZiBuZWNlc3NhcnkuCisgKiAgQHBhcmFtIG5ld19idWZmZXIg
VGhlIG5ldyBzdGF0ZS4KKyAqICBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4K
KyAqLwordm9pZCB5eXB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZl
ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisJaWYgKG5ld19idWZmZXIgPT0gTlVMTCkKKwkJ
cmV0dXJuOworCisJeXllbnN1cmVfYnVmZmVyX3N0YWNrKHl5c2Nhbm5lcik7CisKKwkvKiBUaGlz
IGJsb2NrIGlzIGNvcGllZCBmcm9tIHl5X3N3aXRjaF90b19idWZmZXIuICovCisJaWYgKCBZWV9D
VVJSRU5UX0JVRkZFUiApCisJCXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQg
YnVmZmVyLiAqLworCQkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKKwkJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOwor
CQl9CisKKwkvKiBPbmx5IHB1c2ggaWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRv
cC4gKi8KKwlpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpCisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3Rv
cCsrOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7CisKKwkvKiBjb3Bp
ZWQgZnJvbSB5eV9zd2l0Y2hfdG9fYnVmZmVyLiAqLworCXl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5
c2Nhbm5lciApOworCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKK30KKwor
LyoqIFJlbW92ZXMgYW5kIGRlbGV0ZXMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIGlmIHByZXNlbnQu
CisgKiAgVGhlIG5leHQgZWxlbWVudCBiZWNvbWVzIHRoZSBuZXcgdG9wLgorICogIEBwYXJhbSB5
eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHl5cG9wX2J1ZmZlcl9zdGF0
ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwlpZiAoIVlZX0NVUlJFTlRfQlVGRkVSKQorCQly
ZXR1cm47CisKKwl5eV9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIp
OworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7CisJaWYgKHl5Zy0+eXlfYnVmZmVy
X3N0YWNrX3RvcCA+IDApCisJCS0teXlnLT55eV9idWZmZXJfc3RhY2tfdG9wOworCisJaWYgKFlZ
X0NVUlJFTlRfQlVGRkVSKSB7CisJCXl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwor
CQl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7CisJfQorfQorCisvKiBBbGxv
Y2F0ZXMgdGhlIHN0YWNrIGlmIGl0IGRvZXMgbm90IGV4aXN0LgorICogIEd1YXJhbnRlZXMgc3Bh
Y2UgZm9yIGF0IGxlYXN0IG9uZSBwdXNoLgorICovCitzdGF0aWMgdm9pZCB5eWVuc3VyZV9idWZm
ZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwl5eV9zaXplX3QgbnVtX3RvX2FsbG9j
OworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5l
cjsKKworCWlmICgheXlnLT55eV9idWZmZXJfc3RhY2spIHsKKworCQkvKiBGaXJzdCBhbGxvY2F0
aW9uIGlzIGp1c3QgZm9yIDIgZWxlbWVudHMsIHNpbmNlIHdlIGRvbid0IGtub3cgaWYgdGhpcwor
CQkgKiBzY2FubmVyIHdpbGwgZXZlbiBuZWVkIGEgc3RhY2suIFdlIHVzZSAyIGluc3RlYWQgb2Yg
MSB0byBhdm9pZCBhbgorCQkgKiBpbW1lZGlhdGUgcmVhbGxvYyBvbiB0aGUgbmV4dCBjYWxsLgor
ICAgICAgICAgKi8KKwkJbnVtX3RvX2FsbG9jID0gMTsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2sg
PSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXl5YWxsb2MKKwkJCQkJCQkJKG51bV90b19hbGxv
YyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKKwkJCQkJCQkJLCB5eXNjYW5uZXIp
OworCQlpZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQorCQkJWVlfRkFUQUxfRVJST1IoICJv
dXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXllbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7CisJCQkJ
CQkJCSAgCisJCW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjaywgMCwgbnVtX3RvX2FsbG9jICog
c2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CisJCQkJCisJCXl5Zy0+eXlfYnVmZmVy
X3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0g
MDsKKwkJcmV0dXJuOworCX0KKworCWlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPj0gKHl5
Zy0+eXlfYnVmZmVyX3N0YWNrX21heCkgLSAxKXsKKworCQkvKiBJbmNyZWFzZSB0aGUgYnVmZmVy
IHRvIHByZXBhcmUgZm9yIGEgcG9zc2libGUgcHVzaC4gKi8KKwkJaW50IGdyb3dfc2l6ZSA9IDgg
LyogYXJiaXRyYXJ5IGdyb3cgc2l6ZSAqLzsKKworCQludW1fdG9fYWxsb2MgPSB5eWctPnl5X2J1
ZmZlcl9zdGFja19tYXggKyBncm93X3NpemU7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0
cnVjdCB5eV9idWZmZXJfc3RhdGUqKil5eXJlYWxsb2MKKwkJCQkJCQkJKHl5Zy0+eXlfYnVmZmVy
X3N0YWNrLAorCQkJCQkJCQludW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9z
dGF0ZSopCisJCQkJCQkJCSwgeXlzY2FubmVyKTsKKwkJaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0
YWNrICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5z
dXJlX2J1ZmZlcl9zdGFjaygpIiApOworCisJCS8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiov
CisJCW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21h
eCwgMCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CisJCXl5
Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKKwl9Cit9CisKKy8qKiBTZXR1
cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gZGlyZWN0bHkgZnJvbSBhIHVzZXItc3Bl
Y2lmaWVkIGNoYXJhY3RlciBidWZmZXIuCisgKiBAcGFyYW0gYmFzZSB0aGUgY2hhcmFjdGVyIGJ1
ZmZlcgorICogQHBhcmFtIHNpemUgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGNoYXJhY3RlciBi
dWZmZXIKKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHJldHVy
biB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuIAorICovCitZWV9CVUZG
RVJfU1RBVEUgeXlfc2Nhbl9idWZmZXIgIChjaGFyICogYmFzZSwgeXlfc2l6ZV90ICBzaXplICwg
eXlzY2FuX3QgeXlzY2FubmVyKQoreworCVlZX0JVRkZFUl9TVEFURSBiOworICAgIAorCWlmICgg
c2l6ZSA8IDIgfHwKKwkgICAgIGJhc2Vbc2l6ZS0yXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIg
fHwKKwkgICAgIGJhc2Vbc2l6ZS0xXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQorCQkvKiBU
aGV5IGZvcmdvdCB0byBsZWF2ZSByb29tIGZvciB0aGUgRU9CJ3MuICovCisJCXJldHVybiAwOwor
CisJYiA9IChZWV9CVUZGRVJfU1RBVEUpIHl5YWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVy
X3N0YXRlICkgLHl5c2Nhbm5lciApOworCWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJv
dXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfc2Nhbl9idWZmZXIoKSIgKTsKKworCWItPnl5X2J1
Zl9zaXplID0gc2l6ZSAtIDI7CS8qICItIDIiIHRvIHRha2UgY2FyZSBvZiBFT0IncyAqLworCWIt
Pnl5X2J1Zl9wb3MgPSBiLT55eV9jaF9idWYgPSBiYXNlOworCWItPnl5X2lzX291cl9idWZmZXIg
PSAwOworCWItPnl5X2lucHV0X2ZpbGUgPSAwOworCWItPnl5X25fY2hhcnMgPSBiLT55eV9idWZf
c2l6ZTsKKwliLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7CisJYi0+eXlfYXRfYm9sID0gMTsKKwli
LT55eV9maWxsX2J1ZmZlciA9IDA7CisJYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9O
RVc7CisKKwl5eV9zd2l0Y2hfdG9fYnVmZmVyKGIgLHl5c2Nhbm5lciApOworCisJcmV0dXJuIGI7
Cit9CisKKy8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gYSBzdHJpbmcu
IFRoZSBuZXh0IGNhbGwgdG8geXlsZXgoKSB3aWxsCisgKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9m
IEBhIHN0ci4KKyAqIEBwYXJhbSB5eXN0ciBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyB0byBzY2Fu
CisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEByZXR1cm4gdGhl
IG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgorICogQG5vdGUgSWYgeW91IHdh
bnQgdG8gc2NhbiBieXRlcyB0aGF0IG1heSBjb250YWluIE5VTCB2YWx1ZXMsIHRoZW4gdXNlCisg
KiAgICAgICB5eV9zY2FuX2J5dGVzKCkgaW5zdGVhZC4KKyAqLworWVlfQlVGRkVSX1NUQVRFIHl5
X3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikK
K3sKKyAgICAKKwlyZXR1cm4geXlfc2Nhbl9ieXRlcyh5eXN0cixzdHJsZW4oeXlzdHIpICx5eXNj
YW5uZXIpOworfQorCisvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRo
ZSBnaXZlbiBieXRlcy4gVGhlIG5leHQgY2FsbCB0byB5eWxleCgpIHdpbGwKKyAqIHNjYW4gZnJv
bSBhIEBlIGNvcHkgb2YgQGEgYnl0ZXMuCisgKiBAcGFyYW0geXlieXRlcyB0aGUgYnl0ZSBidWZm
ZXIgdG8gc2NhbgorICogQHBhcmFtIF95eWJ5dGVzX2xlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGlu
IHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBAYSBieXRlcy4KKyAqIEBwYXJhbSB5eXNjYW5uZXIg
VGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZl
ciBzdGF0ZSBvYmplY3QuCisgKi8KK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J5dGVzICAoeXlj
b25zdCBjaGFyICogeXlieXRlcywgeXlfc2l6ZV90ICBfeXlieXRlc19sZW4gLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCit7CisJWVlfQlVGRkVSX1NUQVRFIGI7CisJY2hhciAqYnVmOworCXl5X3NpemVf
dCBuOworCXl5X3NpemVfdCBpOworICAgIAorCS8qIEdldCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVy
LCBpbmNsdWRpbmcgc3BhY2UgZm9yIHRyYWlsaW5nIEVPQidzLiAqLworCW4gPSBfeXlieXRlc19s
ZW4gKyAyOworCWJ1ZiA9IChjaGFyICopIHl5YWxsb2MobiAseXlzY2FubmVyICk7CisJaWYgKCAh
IGJ1ZiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X3Nj
YW5fYnl0ZXMoKSIgKTsKKworCWZvciAoIGkgPSAwOyBpIDwgX3l5Ynl0ZXNfbGVuOyArK2kgKQor
CQlidWZbaV0gPSB5eWJ5dGVzW2ldOworCisJYnVmW195eWJ5dGVzX2xlbl0gPSBidWZbX3l5Ynl0
ZXNfbGVuKzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCisJYiA9IHl5X3NjYW5fYnVmZmVy
KGJ1ZixuICx5eXNjYW5uZXIpOworCWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJiYWQg
YnVmZmVyIGluIHl5X3NjYW5fYnl0ZXMoKSIgKTsKKworCS8qIEl0J3Mgb2theSB0byBncm93IGV0
Yy4gdGhpcyBidWZmZXIsIGFuZCB3ZSBzaG91bGQgdGhyb3cgaXQKKwkgKiBhd2F5IHdoZW4gd2Un
cmUgZG9uZS4KKwkgKi8KKwliLT55eV9pc19vdXJfYnVmZmVyID0gMTsKKworCXJldHVybiBiOwor
fQorCisjaWZuZGVmIFlZX0VYSVRfRkFJTFVSRQorI2RlZmluZSBZWV9FWElUX0ZBSUxVUkUgMgor
I2VuZGlmCisKK3N0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIqIG1zZyAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICAJKHZvaWQpIGZwcmludGYoIHN0ZGVyciwgIiVz
XG4iLCBtc2cgKTsKKwlleGl0KCBZWV9FWElUX0ZBSUxVUkUgKTsKK30KKworLyogUmVkZWZpbmUg
eXlsZXNzKCkgc28gaXQgd29ya3MgaW4gc2VjdGlvbiAzIGNvZGUuICovCisKKyN1bmRlZiB5eWxl
c3MKKyNkZWZpbmUgeXlsZXNzKG4pIFwKKwlkbyBcCisJCXsgXAorCQkvKiBVbmRvIGVmZmVjdHMg
b2Ygc2V0dGluZyB1cCB5eXRleHQuICovIFwKKyAgICAgICAgaW50IHl5bGVzc19tYWNyb19hcmcg
PSAobik7IFwKKyAgICAgICAgWVlfTEVTU19MSU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7XAorCQl5
eXRleHRbeXlsZW5nXSA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBcCisJCXl5Zy0+eXlfY19idWZfcCA9
IHl5dGV4dCArIHl5bGVzc19tYWNyb19hcmc7IFwKKwkJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXln
LT55eV9jX2J1Zl9wOyBcCisJCSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOyBcCisJCXl5bGVuZyA9
IHl5bGVzc19tYWNyb19hcmc7IFwKKwkJfSBcCisJd2hpbGUgKCAwICkKKworLyogQWNjZXNzb3Ig
IG1ldGhvZHMgKGdldC9zZXQgZnVuY3Rpb25zKSB0byBzdHJ1Y3QgbWVtYmVycy4gKi8KKworLyoq
IEdldCB0aGUgdXNlci1kZWZpbmVkIGRhdGEgZm9yIHRoaXMgc2Nhbm5lci4KKyAqIEBwYXJhbSB5
eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCitZWV9FWFRSQV9UWVBFIHl5Z2V0X2V4
dHJhICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlleHRyYTsKK30KKwor
LyoqIEdldCB0aGUgY3VycmVudCBsaW5lIG51bWJlci4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhl
IHNjYW5uZXIgb2JqZWN0LgorICovCitpbnQgeXlnZXRfbGluZW5vICAoeXlzY2FuX3QgeXlzY2Fu
bmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKKyAgICAKKyAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIpCisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4geXlsaW5lbm87Cit9CisKKy8qKiBHZXQg
dGhlIGN1cnJlbnQgY29sdW1uIG51bWJlci4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5u
ZXIgb2JqZWN0LgorICovCitpbnQgeXlnZXRfY29sdW1uICAoeXlzY2FuX3QgeXlzY2FubmVyKQor
eworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5l
cjsKKyAgICAKKyAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIpCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4geXljb2x1bW47Cit9CisKKy8qKiBHZXQgdGhlIGlu
cHV0IHN0cmVhbS4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICov
CitGSUxFICp5eWdldF9pbiAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5
aW47Cit9CisKKy8qKiBHZXQgdGhlIG91dHB1dCBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVy
IFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworRklMRSAqeXlnZXRfb3V0ICAoeXlzY2FuX3QgeXlz
Y2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlvdXQ7Cit9CisKKy8qKiBHZXQgdGhlIGxlbmd0aCBv
ZiB0aGUgY3VycmVudCB0b2tlbi4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2Jq
ZWN0LgorICovCit5eV9zaXplX3QgeXlnZXRfbGVuZyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sK
KyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
CisgICAgcmV0dXJuIHl5bGVuZzsKK30KKworLyoqIEdldCB0aGUgY3VycmVudCB0b2tlbi4KKyAq
IEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCisKK2NoYXIgKnl5Z2V0
X3RleHQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eXRleHQ7Cit9CisK
Ky8qKiBTZXQgdGhlIHVzZXItZGVmaW5lZCBkYXRhLiBUaGlzIGRhdGEgaXMgbmV2ZXIgdG91Y2hl
ZCBieSB0aGUgc2Nhbm5lci4KKyAqIEBwYXJhbSB1c2VyX2RlZmluZWQgVGhlIGRhdGEgdG8gYmUg
YXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Nhbm5lci4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNj
YW5uZXIgb2JqZWN0LgorICovCit2b2lkIHl5c2V0X2V4dHJhIChZWV9FWFRSQV9UWVBFICB1c2Vy
X2RlZmluZWQgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5ZXh0cmEgPSB1c2VyX2Rl
ZmluZWQgOworfQorCisvKiogU2V0IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgorICogQHBhcmFt
IGxpbmVfbnVtYmVyCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAq
Lwordm9pZCB5eXNldF9saW5lbm8gKGludCAgbGluZV9udW1iZXIgLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOworCisgICAgICAgIC8qIGxpbmVubyBpcyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1
ZmZlciBleGlzdHMuICovCisgICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSICkKKyAgICAg
ICAgICAgWVlfRkFUQUxfRVJST1IoICJ5eXNldF9saW5lbm8gY2FsbGVkIHdpdGggbm8gYnVmZmVy
IiApOworICAgIAorICAgIHl5bGluZW5vID0gbGluZV9udW1iZXI7Cit9CisKKy8qKiBTZXQgdGhl
IGN1cnJlbnQgY29sdW1uLgorICogQHBhcmFtIGxpbmVfbnVtYmVyCisgKiBAcGFyYW0geXlzY2Fu
bmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCB5eXNldF9jb2x1bW4gKGludCAgY29s
dW1uX25vICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworICAgICAgICAvKiBjb2x1bW4gaXMg
b25seSB2YWxpZCBpZiBhbiBpbnB1dCBidWZmZXIgZXhpc3RzLiAqLworICAgICAgICBpZiAoISBZ
WV9DVVJSRU5UX0JVRkZFUiApCisgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAieXlzZXRfY29s
dW1uIGNhbGxlZCB3aXRoIG5vIGJ1ZmZlciIgKTsKKyAgICAKKyAgICB5eWNvbHVtbiA9IGNvbHVt
bl9ubzsKK30KKworLyoqIFNldCB0aGUgaW5wdXQgc3RyZWFtLiBUaGlzIGRvZXMgbm90IGRpc2Nh
cmQgdGhlIGN1cnJlbnQKKyAqIGlucHV0IGJ1ZmZlci4KKyAqIEBwYXJhbSBpbl9zdHIgQSByZWFk
YWJsZSBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAq
IEBzZWUgeXlfc3dpdGNoX3RvX2J1ZmZlcgorICovCit2b2lkIHl5c2V0X2luIChGSUxFICogIGlu
X3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlpbiA9IGluX3N0ciA7Cit9CisK
K3ZvaWQgeXlzZXRfb3V0IChGSUxFICogIG91dF9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7
CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OworICAgIHl5b3V0ID0gb3V0X3N0ciA7Cit9CisKK2ludCB5eWdldF9kZWJ1ZyAgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5X2ZsZXhfZGVidWc7Cit9CisKK3ZvaWQgeXlz
ZXRfZGVidWcgKGludCAgYmRlYnVnICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eV9m
bGV4X2RlYnVnID0gYmRlYnVnIDsKK30KKworLyogQWNjZXNzb3IgbWV0aG9kcyBmb3IgeXlsdmFs
IGFuZCB5eWxsb2MgKi8KKworWVlTVFlQRSAqIHl5Z2V0X2x2YWwgICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOworICAgIHJldHVybiB5eWx2YWw7Cit9CisKK3ZvaWQgeXlzZXRfbHZhbCAoWVlTVFlQ
RSAqICB5eWx2YWxfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5bHZhbCA9
IHl5bHZhbF9wYXJhbTsKK30KKworWVlMVFlQRSAqeXlnZXRfbGxvYyAgKHl5c2Nhbl90IHl5c2Nh
bm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5bGxvYzsKK30KKyAgICAKK3ZvaWQgeXlzZXRfbGxvYyAo
WVlMVFlQRSAqICB5eWxsb2NfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5
bGxvYyA9IHl5bGxvY19wYXJhbTsKK30KKyAgICAKKy8qIFVzZXItdmlzaWJsZSBBUEkgKi8KKwor
LyogeXlsZXhfaW5pdCBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgY3JlYXRlcyB0aGUgc2Nhbm5lciBp
dHNlbGYsIHNvIGl0IGlzCisgKiB0aGUgT05MWSByZWVudHJhbnQgZnVuY3Rpb24gdGhhdCBkb2Vz
bid0IHRha2UgdGhlIHNjYW5uZXIgYXMgdGhlIGxhc3QgYXJndW1lbnQuCisgKiBUaGF0J3Mgd2h5
IHdlIGV4cGxpY2l0bHkgaGFuZGxlIHRoZSBkZWNsYXJhdGlvbiwgaW5zdGVhZCBvZiB1c2luZyBv
dXIgbWFjcm9zLgorICovCisKK2ludCB5eWxleF9pbml0KHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFs
cykKKworeworICAgIGlmIChwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKKyAgICAgICAgZXJybm8g
PSBFSU5WQUw7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgICpwdHJfeXlfZ2xvYmFs
cyA9ICh5eXNjYW5fdCkgeXlhbGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0c190ICksIE5VTEwg
KTsKKworICAgIGlmICgqcHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0g
RU5PTUVNOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAvKiBCeSBzZXR0aW5nIHRv
IDB4QUEsIHdlIGV4cG9zZSBidWdzIGluIHl5X2luaXRfZ2xvYmFscy4gTGVhdmUgYXQgMHgwMCBm
b3IgcmVsZWFzZXMuICovCisgICAgbWVtc2V0KCpwdHJfeXlfZ2xvYmFscywweDAwLHNpemVvZihz
dHJ1Y3QgeXlndXRzX3QpKTsKKworICAgIHJldHVybiB5eV9pbml0X2dsb2JhbHMgKCAqcHRyX3l5
X2dsb2JhbHMgKTsKK30KKworLyogeXlsZXhfaW5pdF9leHRyYSBoYXMgdGhlIHNhbWUgZnVuY3Rp
b25hbGl0eSBhcyB5eWxleF9pbml0LCBidXQgZm9sbG93cyB0aGUKKyAqIGNvbnZlbnRpb24gb2Yg
dGFraW5nIHRoZSBzY2FubmVyIGFzIHRoZSBsYXN0IGFyZ3VtZW50LiBOb3RlIGhvd2V2ZXIsIHRo
YXQKKyAqIHRoaXMgaXMgYSAqcG9pbnRlciogdG8gYSBzY2FubmVyLCBhcyBpdCB3aWxsIGJlIGFs
bG9jYXRlZCBieSB0aGlzIGNhbGwgKGFuZAorICogaXMgdGhlIHJlYXNvbiwgdG9vLCB3aHkgdGhp
cyBmdW5jdGlvbiBhbHNvIG11c3QgaGFuZGxlIGl0cyBvd24gZGVjbGFyYXRpb24pLgorICogVGhl
IHVzZXIgZGVmaW5lZCB2YWx1ZSBpbiB0aGUgZmlyc3QgYXJndW1lbnQgd2lsbCBiZSBhdmFpbGFi
bGUgdG8geXlhbGxvYyBpbgorICogdGhlIHl5ZXh0cmEgZmllbGQuCisgKi8KKworaW50IHl5bGV4
X2luaXRfZXh0cmEoWVlfRVhUUkFfVFlQRSB5eV91c2VyX2RlZmluZWQseXlzY2FuX3QqIHB0cl95
eV9nbG9iYWxzICkKKworeworICAgIHN0cnVjdCB5eWd1dHNfdCBkdW1teV95eWd1dHM7CisKKyAg
ICB5eXNldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAmZHVtbXlfeXlndXRzKTsKKworICAgIGlm
IChwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKKyAgICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAg
ICAgIHJldHVybiAxOworICAgIH0KKwkKKyAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3Qp
IHl5YWxsb2MgKCBzaXplb2YoIHN0cnVjdCB5eWd1dHNfdCApLCAmZHVtbXlfeXlndXRzICk7CisJ
CisgICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKKyAgICAgICAgZXJybm8gPSBFTk9N
RU07CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICAKKyAgICAvKiBCeSBzZXR0aW5nIHRv
IDB4QUEsIHdlIGV4cG9zZSBidWdzIGluCisgICAgeXlfaW5pdF9nbG9iYWxzLiBMZWF2ZSBhdCAw
eDAwIGZvciByZWxlYXNlcy4gKi8KKyAgICBtZW1zZXQoKnB0cl95eV9nbG9iYWxzLDB4MDAsc2l6
ZW9mKHN0cnVjdCB5eWd1dHNfdCkpOworICAgIAorICAgIHl5c2V0X2V4dHJhICh5eV91c2VyX2Rl
ZmluZWQsICpwdHJfeXlfZ2xvYmFscyk7CisgICAgCisgICAgcmV0dXJuIHl5X2luaXRfZ2xvYmFs
cyAoICpwdHJfeXlfZ2xvYmFscyApOworfQorCitzdGF0aWMgaW50IHl5X2luaXRfZ2xvYmFscyAo
eXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICAvKiBJbml0aWFsaXphdGlvbiBpcyB0aGUgc2Ft
ZSBhcyBmb3IgdGhlIG5vbi1yZWVudHJhbnQgc2Nhbm5lci4KKyAgICAgKiBUaGlzIGZ1bmN0aW9u
IGlzIGNhbGxlZCBmcm9tIHl5bGV4X2Rlc3Ryb3koKSwgc28gZG9uJ3QgYWxsb2NhdGUgaGVyZS4K
KyAgICAgKi8KKworICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gMDsKKyAgICB5eWctPnl5X2J1
ZmZlcl9zdGFja190b3AgPSAwOworICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IDA7Cisg
ICAgeXlnLT55eV9jX2J1Zl9wID0gKGNoYXIgKikgMDsKKyAgICB5eWctPnl5X2luaXQgPSAwOwor
ICAgIHl5Zy0+eXlfc3RhcnQgPSAwOworCisgICAgeXlnLT55eV9zdGFydF9zdGFja19wdHIgPSAw
OworICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tfZGVwdGggPSAwOworICAgIHl5Zy0+eXlfc3RhcnRf
c3RhY2sgPSAgTlVMTDsKKworLyogRGVmaW5lZCBpbiBtYWluLmMgKi8KKyNpZmRlZiBZWV9TVERJ
TklUCisgICAgeXlpbiA9IHN0ZGluOworICAgIHl5b3V0ID0gc3Rkb3V0OworI2Vsc2UKKyAgICB5
eWluID0gKEZJTEUgKikgMDsKKyAgICB5eW91dCA9IChGSUxFICopIDA7CisjZW5kaWYKKworICAg
IC8qIEZvciBmdXR1cmUgcmVmZXJlbmNlOiBTZXQgZXJybm8gb24gZXJyb3IsIHNpbmNlIHdlIGFy
ZSBjYWxsZWQgYnkKKyAgICAgKiB5eWxleF9pbml0KCkKKyAgICAgKi8KKyAgICByZXR1cm4gMDsK
K30KKworLyogeXlsZXhfZGVzdHJveSBpcyBmb3IgYm90aCByZWVudHJhbnQgYW5kIG5vbi1yZWVu
dHJhbnQgc2Nhbm5lcnMuICovCitpbnQgeXlsZXhfZGVzdHJveSAgKHl5c2Nhbl90IHl5c2Nhbm5l
cikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7CisKKyAgICAvKiBQb3AgdGhlIGJ1ZmZlciBzdGFjaywgZGVzdHJveWluZyBlYWNoIGVs
ZW1lbnQuICovCisJd2hpbGUoWVlfQ1VSUkVOVF9CVUZGRVIpeworCQl5eV9kZWxldGVfYnVmZmVy
KFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIgKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFID0gTlVMTDsKKwkJeXlwb3BfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lcik7CisJfQorCisJLyog
RGVzdHJveSB0aGUgc3RhY2sgaXRzZWxmLiAqLworCXl5ZnJlZSh5eWctPnl5X2J1ZmZlcl9zdGFj
ayAseXlzY2FubmVyKTsKKwl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IE5VTEw7CisKKyAgICAvKiBE
ZXN0cm95IHRoZSBzdGFydCBjb25kaXRpb24gc3RhY2suICovCisgICAgICAgIHl5ZnJlZSh5eWct
Pnl5X3N0YXJ0X3N0YWNrICx5eXNjYW5uZXIgKTsKKyAgICAgICAgeXlnLT55eV9zdGFydF9zdGFj
ayA9IE5VTEw7CisKKyAgICAvKiBSZXNldCB0aGUgZ2xvYmFscy4gVGhpcyBpcyBpbXBvcnRhbnQg
aW4gYSBub24tcmVlbnRyYW50IHNjYW5uZXIgc28gdGhlIG5leHQgdGltZQorICAgICAqIHl5bGV4
KCkgaXMgY2FsbGVkLCBpbml0aWFsaXphdGlvbiB3aWxsIG9jY3VyLiAqLworICAgIHl5X2luaXRf
Z2xvYmFscyggeXlzY2FubmVyKTsKKworICAgIC8qIERlc3Ryb3kgdGhlIG1haW4gc3RydWN0IChy
ZWVudHJhbnQgb25seSkuICovCisgICAgeXlmcmVlICggeXlzY2FubmVyICwgeXlzY2FubmVyICk7
CisgICAgeXlzY2FubmVyID0gTlVMTDsKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIEludGVy
bmFsIHV0aWxpdHkgcm91dGluZXMuCisgKi8KKworI2lmbmRlZiB5eXRleHRfcHRyCitzdGF0aWMg
dm9pZCB5eV9mbGV4X3N0cm5jcHkgKGNoYXIqIHMxLCB5eWNvbnN0IGNoYXIgKiBzMiwgaW50IG4g
LCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJcmVnaXN0ZXIgaW50IGk7CisJZm9yICggaSA9IDA7
IGkgPCBuOyArK2kgKQorCQlzMVtpXSA9IHMyW2ldOworfQorI2VuZGlmCisKKyNpZmRlZiBZWV9O
RUVEX1NUUkxFTgorc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBjaGFyICogcyAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZWdpc3RlciBpbnQgbjsKKwlmb3IgKCBuID0gMDsg
c1tuXTsgKytuICkKKwkJOworCisJcmV0dXJuIG47Cit9CisjZW5kaWYKKwordm9pZCAqeXlhbGxv
YyAoeXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJldHVybiAodm9p
ZCAqKSBtYWxsb2MoIHNpemUgKTsKK30KKwordm9pZCAqeXlyZWFsbG9jICAodm9pZCAqIHB0ciwg
eXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCS8qIFRoZSBjYXN0IHRv
IChjaGFyICopIGluIHRoZSBmb2xsb3dpbmcgYWNjb21tb2RhdGVzIGJvdGgKKwkgKiBpbXBsZW1l
bnRhdGlvbnMgdGhhdCB1c2UgY2hhciogZ2VuZXJpYyBwb2ludGVycywgYW5kIHRob3NlCisJICog
dGhhdCB1c2Ugdm9pZCogZ2VuZXJpYyBwb2ludGVycy4gIEl0IHdvcmtzIHdpdGggdGhlIGxhdHRl
cgorCSAqIGJlY2F1c2UgYm90aCBBTlNJIEMgYW5kIEMrKyBhbGxvdyBjYXN0bGVzcyBhc3NpZ25t
ZW50IGZyb20KKwkgKiBhbnkgcG9pbnRlciB0eXBlIHRvIHZvaWQqLCBhbmQgZGVhbCB3aXRoIGFy
Z3VtZW50IGNvbnZlcnNpb25zCisJICogYXMgdGhvdWdoIGRvaW5nIGFuIGFzc2lnbm1lbnQuCisJ
ICovCisJcmV0dXJuICh2b2lkICopIHJlYWxsb2MoIChjaGFyICopIHB0ciwgc2l6ZSApOworfQor
Cit2b2lkIHl5ZnJlZSAodm9pZCAqIHB0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlmcmVl
KCAoY2hhciAqKSBwdHIgKTsJLyogc2VlIHl5cmVhbGxvYygpIGZvciAoY2hhciAqKSBjYXN0ICov
Cit9CisKKyNkZWZpbmUgWVlUQUJMRVNfTkFNRSAieXl0YWJsZXMiCisKKyNpZiBkZWZpbmVkKF9f
Y2xhbmdfXykKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKKyNlbmRpZgorCit5eV9zaXpl
X3Qgc3RyaW5nX2lucHV0KGNoYXIqIGJ1ZiwgeXlfc2l6ZV90IG1heF9zaXplLCB5eXNjYW5fdCB5
eXNjYW5uZXIpIHsKKyAgICBwcDo6VG9rZW4gdG9rZW47CisgICAgeXlnZXRfZXh0cmEoeXlzY2Fu
bmVyKS0+cHJlcHJvY2Vzc29yLmxleCgmdG9rZW4pOworICAgIHl5X3NpemVfdCBsZW4gPSB0b2tl
bi50eXBlID09IHBwOjpUb2tlbjo6TEFTVCA/IDAgOiB0b2tlbi50ZXh0LnNpemUoKTsKKyAgICBp
ZiAobGVuIDwgbWF4X3NpemUpCisgICAgICAgIG1lbWNweShidWYsIHRva2VuLnRleHQuY19zdHIo
KSwgbGVuKTsKKyAgICB5eXNldF9jb2x1bW4odG9rZW4ubG9jYXRpb24uZmlsZSx5eXNjYW5uZXIp
OworICAgIHl5c2V0X2xpbmVubyh0b2tlbi5sb2NhdGlvbi5saW5lLHl5c2Nhbm5lcik7CisKKyAg
ICBpZiAobGVuID49IG1heF9zaXplKQorICAgICAgICBZWV9GQVRBTF9FUlJPUigiSW5wdXQgYnVm
ZmVyIG92ZXJmbG93Iik7CisgICAgZWxzZSBpZiAobGVuID4gMCkKKyAgICAgICAgYnVmW2xlbisr
XSA9ICcgJzsKKyAgICByZXR1cm4gbGVuOworfQorCitpbnQgY2hlY2tfdHlwZSh5eXNjYW5fdCB5
eXNjYW5uZXIpIHsKKyAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KSB5eXNjYW5uZXI7CisgICAgCisgICAgaW50IHRva2VuID0gSURFTlRJRklFUjsKKyAgICBUU3lt
Ym9sKiBzeW1ib2wgPSB5eWV4dHJhLT5zeW1ib2xUYWJsZS5maW5kKHl5dGV4dCk7CisgICAgaWYg
KHN5bWJvbCAmJiBzeW1ib2wtPmlzVmFyaWFibGUoKSkgeworICAgICAgICBUVmFyaWFibGUqIHZh
cmlhYmxlID0gc3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4oc3ltYm9sKTsKKyAgICAgICAgaWYgKHZh
cmlhYmxlLT5pc1VzZXJUeXBlKCkpCisgICAgICAgICAgICB0b2tlbiA9IFRZUEVfTkFNRTsKKyAg
ICB9CisgICAgeXlsdmFsLT5sZXguc3ltYm9sID0gc3ltYm9sOworICAgIHJldHVybiB0b2tlbjsK
K30KKworaW50IHJlc2VydmVkX3dvcmQoeXlzY2FuX3QgeXlzY2FubmVyKSB7CisgICAgc3RydWN0
IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgeXlzY2FubmVyOworCisgICAgeXll
eHRyYS0+ZXJyb3IoKnl5bGxvYywgIklsbGVnYWwgdXNlIG9mIHJlc2VydmVkIHdvcmQiLCB5eXRl
eHQsICIiKTsKKyAgICB5eWV4dHJhLT5yZWNvdmVyKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3Zv
aWQgeXllcnJvcihZWUxUWVBFKiBsbG9jLCBUUGFyc2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBj
aGFyKiByZWFzb24pIHsKKyAgICBjb250ZXh0LT5lcnJvcigqbGxvYywgcmVhc29uLCB5eWdldF90
ZXh0KGNvbnRleHQtPnNjYW5uZXIpKTsKKyAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cit9CisKK2lu
dCBpbnRfY29uc3RhbnQoeXlzY2FuX3QgeXlzY2FubmVyKSB7CisgICAgc3RydWN0IHl5Z3V0c190
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgeXlzY2FubmVyOworCisgICAgaWYgKCFhdG9pX2Ns
YW1wKHl5dGV4dCwgJih5eWx2YWwtPmxleC5pKSkpCisgICAgICAgIHl5ZXh0cmEtPndhcm5pbmco
Knl5bGxvYywgIkludGVnZXIgb3ZlcmZsb3ciLCB5eXRleHQsICIiKTsKKyAgICByZXR1cm4gSU5U
Q09OU1RBTlQ7Cit9CisKK2ludCBmbG9hdF9jb25zdGFudCh5eXNjYW5fdCB5eXNjYW5uZXIpIHsK
KyAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSB5eXNjYW5uZXI7
CisKKyAgICBpZiAoIWF0b2ZfY2xhbXAoeXl0ZXh0LCAmKHl5bHZhbC0+bGV4LmYpKSkKKyAgICAg
ICAgeXlleHRyYS0+d2FybmluZygqeXlsbG9jLCAiRmxvYXQgb3ZlcmZsb3ciLCB5eXRleHQsICIi
KTsKKyAgICByZXR1cm4gRkxPQVRDT05TVEFOVDsKK30KKworaW50IGdsc2xhbmdfaW5pdGlhbGl6
ZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7CisgICAgeXlzY2FuX3Qgc2Nhbm5lciA9IE5VTEw7
CisgICAgaWYgKHl5bGV4X2luaXRfZXh0cmEoY29udGV4dCwmc2Nhbm5lcikpCisgICAgICAgIHJl
dHVybiAxOworCisgICAgY29udGV4dC0+c2Nhbm5lciA9IHNjYW5uZXI7CisgICAgcmV0dXJuIDA7
Cit9CisKK2ludCBnbHNsYW5nX2ZpbmFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKKyAg
ICB5eXNjYW5fdCBzY2FubmVyID0gY29udGV4dC0+c2Nhbm5lcjsKKyAgICBpZiAoc2Nhbm5lciA9
PSBOVUxMKSByZXR1cm4gMDsKKyAgICAKKyAgICBjb250ZXh0LT5zY2FubmVyID0gTlVMTDsKKyAg
ICB5eWxleF9kZXN0cm95KHNjYW5uZXIpOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBnbHNs
YW5nX3NjYW4oc2l6ZV90IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3Qg
aW50IGxlbmd0aFtdLAorICAgICAgICAgICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7
CisgICAgeXlyZXN0YXJ0KE5VTEwsY29udGV4dC0+c2Nhbm5lcik7CisgICAgeXlzZXRfY29sdW1u
KDAsY29udGV4dC0+c2Nhbm5lcik7CisgICAgeXlzZXRfbGluZW5vKDEsY29udGV4dC0+c2Nhbm5l
cik7CisKKyAgICAvLyBJbml0aWFsaXplIHByZXByb2Nlc3Nvci4KKyAgICBpZiAoIWNvbnRleHQt
PnByZXByb2Nlc3Nvci5pbml0KGNvdW50LCBzdHJpbmcsIGxlbmd0aCkpCisgICAgICAgIHJldHVy
biAxOworICAgIGNvbnRleHQtPnByZXByb2Nlc3Nvci5zZXRNYXhUb2tlbkxlbmd0aChTSF9NQVhf
VE9LRU5fTEVOR1RIKTsKKworICAgIC8vIERlZmluZSBleHRlbnNpb24gbWFjcm9zLgorICAgIGNv
bnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0QmVoYXZpb3IgPSBjb250ZXh0LT5leHRlbnNpb25C
ZWhhdmlvcigpOworICAgIGZvciAoVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBp
dGVyID0gZXh0QmVoYXZpb3IuYmVnaW4oKTsKKyAgICAgICAgIGl0ZXIgIT0gZXh0QmVoYXZpb3Iu
ZW5kKCk7ICsraXRlcikgeworICAgICAgICBjb250ZXh0LT5wcmVwcm9jZXNzb3IucHJlZGVmaW5l
TWFjcm8oaXRlci0+Zmlyc3QuY19zdHIoKSwgMSk7CisgICAgfQorICAgIGlmIChjb250ZXh0LT5m
cmFnbWVudFByZWNpc2lvbkhpZ2gpCisgICAgICAgIGNvbnRleHQtPnByZXByb2Nlc3Nvci5wcmVk
ZWZpbmVNYWNybygiR0xfRlJBR01FTlRfUFJFQ0lTSU9OX0hJR0giLCAxKTsKKworICAgIHJldHVy
biAwOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGZhZjYy
YTQ1YjBhZjI5NWUzZGQxZmExMjBjZmU1NmYyOWE2OTdhZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFi
LmNwcApAQCAtMCwwICsxLDQ4ODQgQEAKKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBC
aXNvbiAyLjcuMS4gICovCisKKy8qIEFwcGxlIE5vdGU6IEZvciB0aGUgYXZvaWRhbmNlIG9mIGRv
dWJ0LCBBcHBsZSBlbGVjdHMgdG8gZGlzdHJpYnV0ZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBCU0QgbGljZW5zZS4gKi8KKworLyogQmlzb24gaW1wbGVtZW50YXRpb24gZm9yIFlh
Y2MtbGlrZSBwYXJzZXJzIGluIEMKKyAgIAorICAgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5
LTE5OTAsIDIwMDAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIAorICAg
VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgIAor
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0
dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogQXMgYSBzcGVjaWFsIGV4Y2Vw
dGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCisgICBwYXJ0
IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQg
d29yaworICAgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHNvIGxvbmcgYXMgdGhhdCB3b3Jr
IGlzbid0IGl0c2VsZiBhCisgICBwYXJzZXIgZ2VuZXJhdG9yIHVzaW5nIHRoZSBza2VsZXRvbiBv
ciBhIG1vZGlmaWVkIHZlcnNpb24gdGhlcmVvZgorICAgYXMgYSBwYXJzZXIgc2tlbGV0b24uICBB
bHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZQorICAgdGhlIHBhcnNl
ciBza2VsZXRvbiBpdHNlbGYsIHlvdSBtYXkgKGF0IHlvdXIgb3B0aW9uKSByZW1vdmUgdGhpcwor
ICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0
aGUgcmVzdWx0aW5nCisgICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIg
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBl
eGNlcHRpb24uCisgICAKKyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KKyAgIHZlcnNpb24gMi4yIG9mIEJpc29uLiAg
Ki8KKworLyogQyBMQUxSKDEpIHBhcnNlciBza2VsZXRvbiB3cml0dGVuIGJ5IFJpY2hhcmQgU3Rh
bGxtYW4sIGJ5CisgICBzaW1wbGlmeWluZyB0aGUgb3JpZ2luYWwgc28tY2FsbGVkICJzZW1hbnRp
YyIgcGFyc2VyLiAgKi8KKworLyogQWxsIHN5bWJvbHMgZGVmaW5lZCBiZWxvdyBzaG91bGQgYmVn
aW4gd2l0aCB5eSBvciBZWSwgdG8gYXZvaWQKKyAgIGluZnJpbmdpbmcgb24gdXNlciBuYW1lIHNw
YWNlLiAgVGhpcyBzaG91bGQgYmUgZG9uZSBldmVuIGZvciBsb2NhbAorICAgdmFyaWFibGVzLCBh
cyB0aGV5IG1pZ2h0IG90aGVyd2lzZSBiZSBleHBhbmRlZCBieSB1c2VyIG1hY3Jvcy4KKyAgIFRo
ZXJlIGFyZSBzb21lIHVuYXZvaWRhYmxlIGV4Y2VwdGlvbnMgd2l0aGluIGluY2x1ZGUgZmlsZXMg
dG8KKyAgIGRlZmluZSBuZWNlc3NhcnkgbGlicmFyeSBzeW1ib2xzOyB0aGV5IGFyZSBub3RlZCAi
SU5GUklOR0VTIE9OCisgICBVU0VSIE5BTUUgU1BBQ0UiIGJlbG93LiAgKi8KKworLyogSWRlbnRp
ZnkgQmlzb24gb3V0cHV0LiAgKi8KKyNkZWZpbmUgWVlCSVNPTiAxCisKKy8qIEJpc29uIHZlcnNp
b24uICAqLworI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjIuNy4xIgorCisvKiBTa2VsZXRvbiBu
YW1lLiAgKi8KKyNkZWZpbmUgWVlTS0VMRVRPTl9OQU1FICJ5YWNjLmMiCisKKy8qIFB1cmUgcGFy
c2Vycy4gICovCisjZGVmaW5lIFlZUFVSRSAxCisKKy8qIFB1c2ggcGFyc2Vycy4gICovCisjZGVm
aW5lIFlZUFVTSCAwCisKKy8qIFB1bGwgcGFyc2Vycy4gICovCisjZGVmaW5lIFlZUFVMTCAxCisK
KworCisKKy8qIENvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLwor
CisKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBi
eSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQorCisvLyBJZ25vcmUgZXJyb3JzIGlu
IGF1dG8tZ2VuZXJhdGVkIGNvZGUuCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKyNwcmFnbWEgR0ND
IGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtZnVuY3Rpb24iCisjcHJhZ21hIEdDQyBkaWFn
bm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLXZhcmlhYmxlIgorI3ByYWdtYSBHQ0MgZGlhZ25vc3Rp
YyBpZ25vcmVkICItV3N3aXRjaC1lbnVtIgorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNwcmFn
bWEgd2FybmluZyhkaXNhYmxlOiA0MDY1KQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQxODkp
CisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUwNSkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxl
OiA0NzAxKQorI2VuZGlmCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRh
YmxlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaCIKKyNp
bmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2RlZmluZSBZWUVOQUJMRV9OTFMgMAor
CisjZGVmaW5lIFlZTEVYX1BBUkFNIGNvbnRleHQtPnNjYW5uZXIKKworCisKKyMgaWZuZGVmIFlZ
X05VTEwKKyMgIGlmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgMjAxMTAzTCA8PSBfX2NwbHVzcGx1
cworIyAgIGRlZmluZSBZWV9OVUxMIG51bGxwdHIKKyMgIGVsc2UKKyMgICBkZWZpbmUgWVlfTlVM
TCAwCisjICBlbmRpZgorIyBlbmRpZgorCisvKiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1lc3Nh
Z2VzLiAgKi8KKyNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyMgdW5kZWYgWVlFUlJPUl9WRVJCT1NF
CisjIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQorI2Vsc2UKKyMgZGVmaW5lIFlZRVJST1JfVkVS
Qk9TRSAwCisjZW5kaWYKKworLyogSW4gYSBmdXR1cmUgcmVsZWFzZSBvZiBCaXNvbiwgdGhpcyBz
ZWN0aW9uIHdpbGwgYmUgcmVwbGFjZWQKKyAgIGJ5ICNpbmNsdWRlICJnbHNsYW5nX3RhYi5oIi4g
ICovCisjaWZuZGVmIFlZX1lZX0dMU0xBTkdfVEFCX0hfSU5DTFVERUQKKyMgZGVmaW5lIFlZX1lZ
X0dMU0xBTkdfVEFCX0hfSU5DTFVERUQKKy8qIEVuYWJsaW5nIHRyYWNlcy4gICovCisjaWZuZGVm
IFlZREVCVUcKKyMgZGVmaW5lIFlZREVCVUcgMAorI2VuZGlmCisjaWYgWVlERUJVRworZXh0ZXJu
IGludCB5eWRlYnVnOworI2VuZGlmCisvKiAiJWNvZGUgcmVxdWlyZXMiIGJsb2Nrcy4gICovCisK
KworI2RlZmluZSBZWUxUWVBFIFRTb3VyY2VMb2MKKyNkZWZpbmUgWVlMVFlQRV9JU19ERUNMQVJF
RCAxCisjZGVmaW5lIFNIX01BWF9UT0tFTl9MRU5HVEggMjU2ICAvLyBXZWJHTCBzcGVjLgorCisK
KworCisvKiBUb2tlbnMuICAqLworI2lmbmRlZiBZWVRPS0VOVFlQRQorIyBkZWZpbmUgWVlUT0tF
TlRZUEUKKyAgIC8qIFB1dCB0aGUgdG9rZW5zIGludG8gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhh
dCBHREIgYW5kIG90aGVyIGRlYnVnZ2VycworICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8KKyAg
IGVudW0geXl0b2tlbnR5cGUgeworICAgICBJTlZBUklBTlQgPSAyNTgsCisgICAgIEhJR0hfUFJF
Q0lTSU9OID0gMjU5LAorICAgICBNRURJVU1fUFJFQ0lTSU9OID0gMjYwLAorICAgICBMT1dfUFJF
Q0lTSU9OID0gMjYxLAorICAgICBQUkVDSVNJT04gPSAyNjIsCisgICAgIEFUVFJJQlVURSA9IDI2
MywKKyAgICAgQ09OU1RfUVVBTCA9IDI2NCwKKyAgICAgQk9PTF9UWVBFID0gMjY1LAorICAgICBG
TE9BVF9UWVBFID0gMjY2LAorICAgICBJTlRfVFlQRSA9IDI2NywKKyAgICAgQlJFQUsgPSAyNjgs
CisgICAgIENPTlRJTlVFID0gMjY5LAorICAgICBETyA9IDI3MCwKKyAgICAgRUxTRSA9IDI3MSwK
KyAgICAgRk9SID0gMjcyLAorICAgICBJRiA9IDI3MywKKyAgICAgRElTQ0FSRCA9IDI3NCwKKyAg
ICAgUkVUVVJOID0gMjc1LAorICAgICBCVkVDMiA9IDI3NiwKKyAgICAgQlZFQzMgPSAyNzcsCisg
ICAgIEJWRUM0ID0gMjc4LAorICAgICBJVkVDMiA9IDI3OSwKKyAgICAgSVZFQzMgPSAyODAsCisg
ICAgIElWRUM0ID0gMjgxLAorICAgICBWRUMyID0gMjgyLAorICAgICBWRUMzID0gMjgzLAorICAg
ICBWRUM0ID0gMjg0LAorICAgICBNQVRSSVgyID0gMjg1LAorICAgICBNQVRSSVgzID0gMjg2LAor
ICAgICBNQVRSSVg0ID0gMjg3LAorICAgICBJTl9RVUFMID0gMjg4LAorICAgICBPVVRfUVVBTCA9
IDI4OSwKKyAgICAgSU5PVVRfUVVBTCA9IDI5MCwKKyAgICAgVU5JRk9STSA9IDI5MSwKKyAgICAg
VkFSWUlORyA9IDI5MiwKKyAgICAgU1RSVUNUID0gMjkzLAorICAgICBWT0lEX1RZUEUgPSAyOTQs
CisgICAgIFdISUxFID0gMjk1LAorICAgICBTQU1QTEVSMkQgPSAyOTYsCisgICAgIFNBTVBMRVJD
VUJFID0gMjk3LAorICAgICBTQU1QTEVSX0VYVEVSTkFMX09FUyA9IDI5OCwKKyAgICAgU0FNUExF
UjJEUkVDVCA9IDI5OSwKKyAgICAgSURFTlRJRklFUiA9IDMwMCwKKyAgICAgVFlQRV9OQU1FID0g
MzAxLAorICAgICBGTE9BVENPTlNUQU5UID0gMzAyLAorICAgICBJTlRDT05TVEFOVCA9IDMwMywK
KyAgICAgQk9PTENPTlNUQU5UID0gMzA0LAorICAgICBMRUZUX09QID0gMzA1LAorICAgICBSSUdI
VF9PUCA9IDMwNiwKKyAgICAgSU5DX09QID0gMzA3LAorICAgICBERUNfT1AgPSAzMDgsCisgICAg
IExFX09QID0gMzA5LAorICAgICBHRV9PUCA9IDMxMCwKKyAgICAgRVFfT1AgPSAzMTEsCisgICAg
IE5FX09QID0gMzEyLAorICAgICBBTkRfT1AgPSAzMTMsCisgICAgIE9SX09QID0gMzE0LAorICAg
ICBYT1JfT1AgPSAzMTUsCisgICAgIE1VTF9BU1NJR04gPSAzMTYsCisgICAgIERJVl9BU1NJR04g
PSAzMTcsCisgICAgIEFERF9BU1NJR04gPSAzMTgsCisgICAgIE1PRF9BU1NJR04gPSAzMTksCisg
ICAgIExFRlRfQVNTSUdOID0gMzIwLAorICAgICBSSUdIVF9BU1NJR04gPSAzMjEsCisgICAgIEFO
RF9BU1NJR04gPSAzMjIsCisgICAgIFhPUl9BU1NJR04gPSAzMjMsCisgICAgIE9SX0FTU0lHTiA9
IDMyNCwKKyAgICAgU1VCX0FTU0lHTiA9IDMyNSwKKyAgICAgTEVGVF9QQVJFTiA9IDMyNiwKKyAg
ICAgUklHSFRfUEFSRU4gPSAzMjcsCisgICAgIExFRlRfQlJBQ0tFVCA9IDMyOCwKKyAgICAgUklH
SFRfQlJBQ0tFVCA9IDMyOSwKKyAgICAgTEVGVF9CUkFDRSA9IDMzMCwKKyAgICAgUklHSFRfQlJB
Q0UgPSAzMzEsCisgICAgIERPVCA9IDMzMiwKKyAgICAgQ09NTUEgPSAzMzMsCisgICAgIENPTE9O
ID0gMzM0LAorICAgICBFUVVBTCA9IDMzNSwKKyAgICAgU0VNSUNPTE9OID0gMzM2LAorICAgICBC
QU5HID0gMzM3LAorICAgICBEQVNIID0gMzM4LAorICAgICBUSUxERSA9IDMzOSwKKyAgICAgUExV
UyA9IDM0MCwKKyAgICAgU1RBUiA9IDM0MSwKKyAgICAgU0xBU0ggPSAzNDIsCisgICAgIFBFUkNF
TlQgPSAzNDMsCisgICAgIExFRlRfQU5HTEUgPSAzNDQsCisgICAgIFJJR0hUX0FOR0xFID0gMzQ1
LAorICAgICBWRVJUSUNBTF9CQVIgPSAzNDYsCisgICAgIENBUkVUID0gMzQ3LAorICAgICBBTVBF
UlNBTkQgPSAzNDgsCisgICAgIFFVRVNUSU9OID0gMzQ5CisgICB9OworI2VuZGlmCisKKworI2lm
ICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECit0eXBl
ZGVmIHVuaW9uIFlZU1RZUEUKK3sKKworCisgICAgc3RydWN0IHsKKyAgICAgICAgdW5pb24gewor
ICAgICAgICAgICAgVFN0cmluZyAqc3RyaW5nOworICAgICAgICAgICAgZmxvYXQgZjsKKyAgICAg
ICAgICAgIGludCBpOworICAgICAgICAgICAgYm9vbCBiOworICAgICAgICB9OworICAgICAgICBU
U3ltYm9sKiBzeW1ib2w7CisgICAgfSBsZXg7CisgICAgc3RydWN0IHsKKyAgICAgICAgVE9wZXJh
dG9yIG9wOworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJt
Tm9kZTsKKyAgICAgICAgICAgIFRJbnRlcm1Ob2RlUGFpciBub2RlUGFpcjsKKyAgICAgICAgICAg
IFRJbnRlcm1UeXBlZCogaW50ZXJtVHlwZWROb2RlOworICAgICAgICAgICAgVEludGVybUFnZ3Jl
Z2F0ZSogaW50ZXJtQWdncmVnYXRlOworICAgICAgICB9OworICAgICAgICB1bmlvbiB7CisgICAg
ICAgICAgICBUUHVibGljVHlwZSB0eXBlOworICAgICAgICAgICAgVFByZWNpc2lvbiBwcmVjaXNp
b247CisgICAgICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllcjsKKyAgICAgICAgICAgIFRGdW5j
dGlvbiogZnVuY3Rpb247CisgICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtOworICAgICAgICAg
ICAgVEZpZWxkKiBmaWVsZDsKKyAgICAgICAgICAgIFRGaWVsZExpc3QqIGZpZWxkTGlzdDsKKyAg
ICAgICAgfTsKKyAgICB9IGludGVybTsKKworCisKK30gWVlTVFlQRTsKKyMgZGVmaW5lIFlZU1RZ
UEVfSVNfVFJJVklBTCAxCisjIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jzb2xlc2NlbnQ7
IHdpbGwgYmUgd2l0aGRyYXduICovCisjIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKKyNl
bmRpZgorCisjaWYgISBkZWZpbmVkIFlZTFRZUEUgJiYgISBkZWZpbmVkIFlZTFRZUEVfSVNfREVD
TEFSRUQKK3R5cGVkZWYgc3RydWN0IFlZTFRZUEUKK3sKKyAgaW50IGZpcnN0X2xpbmU7CisgIGlu
dCBmaXJzdF9jb2x1bW47CisgIGludCBsYXN0X2xpbmU7CisgIGludCBsYXN0X2NvbHVtbjsKK30g
WVlMVFlQRTsKKyMgZGVmaW5lIHl5bHR5cGUgWVlMVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBi
ZSB3aXRoZHJhd24gKi8KKyMgZGVmaW5lIFlZTFRZUEVfSVNfREVDTEFSRUQgMQorIyBkZWZpbmUg
WVlMVFlQRV9JU19UUklWSUFMIDEKKyNlbmRpZgorCisKKyNpZmRlZiBZWVBBUlNFX1BBUkFNCisj
aWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCitpbnQgeXlwYXJzZSAo
dm9pZCAqWVlQQVJTRV9QQVJBTSk7CisjZWxzZQoraW50IHl5cGFyc2UgKCk7CisjZW5kaWYKKyNl
bHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLworI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5l
ZCBfX2NwbHVzcGx1cworaW50IHl5cGFyc2UgKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOworI2Vs
c2UKK2ludCB5eXBhcnNlICgpOworI2VuZGlmCisjZW5kaWYgLyogISBZWVBBUlNFX1BBUkFNICov
CisKKyNlbmRpZiAvKiAhWVlfWVlfR0xTTEFOR19UQUJfSF9JTkNMVURFRCAgKi8KKworLyogQ29w
eSB0aGUgc2Vjb25kIHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLworCisKK2V4dGVybiBp
bnQgeXlsZXgoWVlTVFlQRSogeXlsdmFsLCBZWUxUWVBFKiB5eWxsb2MsIHZvaWQqIHl5c2Nhbm5l
cik7CitleHRlcm4gdm9pZCB5eWVycm9yKFlZTFRZUEUqIHl5bGxvYywgVFBhcnNlQ29udGV4dCog
Y29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKTsKKworI2RlZmluZSBZWUxMT0NfREVGQVVMVChD
dXJyZW50LCBSaHMsIE4pICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8geyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBpZiAo
WVlJRChOKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAoQ3VycmVudCkuZmlyc3RfZmlsZSA9IFlZUkhTTE9DKFJocywgMSkuZmlyc3RfZmlsZTsg
IFwKKyAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgPSBZWVJIU0xPQyhSaHMsIDEpLmZpcnN0
X2xpbmU7ICBcCisgICAgICAgIChDdXJyZW50KS5sYXN0X2ZpbGUgPSBZWVJIU0xPQyhSaHMsIE4p
Lmxhc3RfZmlsZTsgICAgXAorICAgICAgICAoQ3VycmVudCkubGFzdF9saW5lID0gWVlSSFNMT0Mo
UmhzLCBOKS5sYXN0X2xpbmU7ICAgIFwKKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBlbHNlIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoQ3VycmVudCku
Zmlyc3RfZmlsZSA9IFlZUkhTTE9DKFJocywgMCkubGFzdF9maWxlOyAgIFwKKyAgICAgICAgKEN1
cnJlbnQpLmZpcnN0X2xpbmUgPSBZWVJIU0xPQyhSaHMsIDApLmxhc3RfbGluZTsgICBcCisgICAg
ICAgIChDdXJyZW50KS5sYXN0X2ZpbGUgPSBZWVJIU0xPQyhSaHMsIDApLmxhc3RfZmlsZTsgICAg
XAorICAgICAgICAoQ3VycmVudCkubGFzdF9saW5lID0gWVlSSFNMT0MoUmhzLCAwKS5sYXN0X2xp
bmU7ICAgIFwKKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgVkVSVEVYX09OTFkoUywg
TCkgeyAgXAorICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNIX1ZFUlRFWF9TSEFERVIp
IHsgIFwKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4IHNo
YWRlcnMgb25seSAiLCBTKTsgIFwKKyAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAorICAg
IH0gIFwKK30KKworI2RlZmluZSBGUkFHX09OTFkoUywgTCkgeyAgXAorICAgIGlmIChjb250ZXh0
LT5zaGFkZXJUeXBlICE9IFNIX0ZSQUdNRU5UX1NIQURFUikgeyAgXAorICAgICAgICBjb250ZXh0
LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBc
CisgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwKKyAgICB9ICBcCit9CisKKworCisjaWZk
ZWYgc2hvcnQKKyMgdW5kZWYgc2hvcnQKKyNlbmRpZgorCisjaWZkZWYgWVlUWVBFX1VJTlQ4Cit0
eXBlZGVmIFlZVFlQRV9VSU5UOCB5eXR5cGVfdWludDg7CisjZWxzZQordHlwZWRlZiB1bnNpZ25l
ZCBjaGFyIHl5dHlwZV91aW50ODsKKyNlbmRpZgorCisjaWZkZWYgWVlUWVBFX0lOVDgKK3R5cGVk
ZWYgWVlUWVBFX0lOVDggeXl0eXBlX2ludDg7CisjZWxpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBk
ZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRl
ZmluZWQgX01TQ19WRVIpCit0eXBlZGVmIHNpZ25lZCBjaGFyIHl5dHlwZV9pbnQ4OworI2Vsc2UK
K3R5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQ4OworI2VuZGlmCisKKyNpZmRlZiBZWVRZUEVf
VUlOVDE2Cit0eXBlZGVmIFlZVFlQRV9VSU5UMTYgeXl0eXBlX3VpbnQxNjsKKyNlbHNlCit0eXBl
ZGVmIHVuc2lnbmVkIHNob3J0IGludCB5eXR5cGVfdWludDE2OworI2VuZGlmCisKKyNpZmRlZiBZ
WVRZUEVfSU5UMTYKK3R5cGVkZWYgWVlUWVBFX0lOVDE2IHl5dHlwZV9pbnQxNjsKKyNlbHNlCit0
eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50MTY7CisjZW5kaWYKKworI2lmbmRlZiBZWVNJWkVf
VAorIyBpZmRlZiBfX1NJWkVfVFlQRV9fCisjICBkZWZpbmUgWVlTSVpFX1QgX19TSVpFX1RZUEVf
XworIyBlbGlmIGRlZmluZWQgc2l6ZV90CisjICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90CisjIGVs
aWYgISBkZWZpbmVkIFlZU0laRV9UICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19D
OTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVND
X1ZFUikKKyMgIGluY2x1ZGUgPHN0ZGRlZi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQ
QUNFICovCisjICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90CisjIGVsc2UKKyMgIGRlZmluZSBZWVNJ
WkVfVCB1bnNpZ25lZCBpbnQKKyMgZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIFlZU0laRV9NQVhJ
TVVNICgoWVlTSVpFX1QpIC0xKQorCisjaWZuZGVmIFlZXworIyBpZiBkZWZpbmVkIFlZRU5BQkxF
X05MUyAmJiBZWUVOQUJMRV9OTFMKKyMgIGlmIEVOQUJMRV9OTFMKKyMgICBpbmNsdWRlIDxsaWJp
bnRsLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBkZWZpbmUgWVlf
KE1zZ2lkKSBkZ2V0dGV4dCAoImJpc29uLXJ1bnRpbWUiLCBNc2dpZCkKKyMgIGVuZGlmCisjIGVu
ZGlmCisjIGlmbmRlZiBZWV8KKyMgIGRlZmluZSBZWV8oTXNnaWQpIE1zZ2lkCisjIGVuZGlmCisj
ZW5kaWYKKworI2lmbmRlZiBfX2F0dHJpYnV0ZV9fCisvKiBUaGlzIGZlYXR1cmUgaXMgYXZhaWxh
YmxlIGluIGdjYyB2ZXJzaW9ucyAyLjUgYW5kIGxhdGVyLiAgKi8KKyMgaWYgKCEgZGVmaW5lZCBf
X0dOVUNfXyB8fCBfX0dOVUNfXyA8IDIgXAorICAgICAgfHwgKF9fR05VQ19fID09IDIgJiYgX19H
TlVDX01JTk9SX18gPCA1KSkKKyMgIGRlZmluZSBfX2F0dHJpYnV0ZV9fKFNwZWMpIC8qIGVtcHR5
ICovCisjIGVuZGlmCisjZW5kaWYKKworLyogU3VwcHJlc3MgdW51c2VkLXZhcmlhYmxlIHdhcm5p
bmdzIGJ5ICJ1c2luZyIgRS4gICovCisjaWYgISBkZWZpbmVkIGxpbnQgfHwgZGVmaW5lZCBfX0dO
VUNfXworIyBkZWZpbmUgWVlVU0UoRSkgKCh2b2lkKSAoRSkpCisjZWxzZQorIyBkZWZpbmUgWVlV
U0UoRSkgLyogZW1wdHkgKi8KKyNlbmRpZgorCisKKy8qIElkZW50aXR5IGZ1bmN0aW9uLCB1c2Vk
IHRvIHN1cHByZXNzIHdhcm5pbmdzIGFib3V0IGNvbnN0YW50IGNvbmRpdGlvbnMuICAqLworI2lm
bmRlZiBsaW50CisjIGRlZmluZSBZWUlEKE4pIChOKQorI2Vsc2UKKyNpZiAoZGVmaW5lZCBfX1NU
RENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNw
bHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgaW50CitZWUlEIChpbnQgeXlpKQorI2Vs
c2UKK3N0YXRpYyBpbnQKK1lZSUQgKHl5aSkKKyAgICBpbnQgeXlpOworI2VuZGlmCit7CisgIHJl
dHVybiB5eWk7Cit9CisjZW5kaWYKKworI2lmICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJS
T1JfVkVSQk9TRQorCisvKiBUaGUgcGFyc2VyIGludm9rZXMgYWxsb2NhIG9yIG1hbGxvYzsgZGVm
aW5lIHRoZSBuZWNlc3Nhcnkgc3ltYm9scy4gICovCisKKyMgaWZkZWYgWVlTVEFDS19VU0VfQUxM
T0NBCisjICBpZiBZWVNUQUNLX1VTRV9BTExPQ0EKKyMgICBpZmRlZiBfX0dOVUNfXworIyAgICBk
ZWZpbmUgWVlTVEFDS19BTExPQyBfX2J1aWx0aW5fYWxsb2NhCisjICAgZWxpZiBkZWZpbmVkIF9f
QlVJTFRJTl9WQV9BUkdfSU5DUgorIyAgICBpbmNsdWRlIDxhbGxvY2EuaD4gLyogSU5GUklOR0VT
IE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGVsaWYgZGVmaW5lZCBfQUlYCisjICAgIGRlZmlu
ZSBZWVNUQUNLX0FMTE9DIF9fYWxsb2NhCisjICAgZWxpZiBkZWZpbmVkIF9NU0NfVkVSCisjICAg
IGluY2x1ZGUgPG1hbGxvYy5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisj
ICAgIGRlZmluZSBhbGxvY2EgX2FsbG9jYQorIyAgIGVsc2UKKyMgICAgZGVmaW5lIFlZU1RBQ0tf
QUxMT0MgYWxsb2NhCisjICAgIGlmICEgZGVmaW5lZCBfQUxMT0NBX0ggJiYgISBkZWZpbmVkIEVY
SVRfU1VDQ0VTUyAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18g
XAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCisjICAg
ICBpbmNsdWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwor
ICAgICAgLyogVXNlIEVYSVRfU1VDQ0VTUyBhcyBhIHdpdG5lc3MgZm9yIHN0ZGxpYi5oLiAgKi8K
KyMgICAgIGlmbmRlZiBFWElUX1NVQ0NFU1MKKyMgICAgICBkZWZpbmUgRVhJVF9TVUNDRVNTIDAK
KyMgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCisK
KyMgaWZkZWYgWVlTVEFDS19BTExPQworICAgLyogUGFjaWZ5IEdDQydzIGBlbXB0eSBpZi1ib2R5
JyB3YXJuaW5nLiAgKi8KKyMgIGRlZmluZSBZWVNUQUNLX0ZSRUUoUHRyKSBkbyB7IC8qIGVtcHR5
ICovOyB9IHdoaWxlIChZWUlEICgwKSkKKyMgIGlmbmRlZiBZWVNUQUNLX0FMTE9DX01BWElNVU0K
KyAgICAvKiBUaGUgT1MgbWlnaHQgZ3VhcmFudGVlIG9ubHkgb25lIGd1YXJkIHBhZ2UgYXQgdGhl
IGJvdHRvbSBvZiB0aGUgc3RhY2ssCisgICAgICAgYW5kIGEgcGFnZSBzaXplIGNhbiBiZSBhcyBz
bWFsbCBhcyA0MDk2IGJ5dGVzLiAgU28gd2UgY2Fubm90IHNhZmVseQorICAgICAgIGludm9rZSBh
bGxvY2EgKE4pIGlmIE4gZXhjZWVkcyA0MDk2LiAgVXNlIGEgc2xpZ2h0bHkgc21hbGxlciBudW1i
ZXIKKyAgICAgICB0byBhbGxvdyBmb3IgYSBmZXcgY29tcGlsZXItYWxsb2NhdGVkIHRlbXBvcmFy
eSBzdGFjayBzbG90cy4gICovCisjICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA0MDMy
IC8qIHJlYXNvbmFibGUgY2lyY2EgMjAwNiAqLworIyAgZW5kaWYKKyMgZWxzZQorIyAgZGVmaW5l
IFlZU1RBQ0tfQUxMT0MgWVlNQUxMT0MKKyMgIGRlZmluZSBZWVNUQUNLX0ZSRUUgWVlGUkVFCisj
ICBpZm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNCisjICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0Nf
TUFYSU1VTSBZWVNJWkVfTUFYSU1VTQorIyAgZW5kaWYKKyMgIGlmIChkZWZpbmVkIF9fY3BsdXNw
bHVzICYmICEgZGVmaW5lZCBFWElUX1NVQ0NFU1MgXAorICAgICAgICYmICEgKChkZWZpbmVkIFlZ
TUFMTE9DIHx8IGRlZmluZWQgbWFsbG9jKSBcCisJICAgICAmJiAoZGVmaW5lZCBZWUZSRUUgfHwg
ZGVmaW5lZCBmcmVlKSkpCisjICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBV
U0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBpZm5kZWYgRVhJVF9TVUNDRVNTCisjICAgIGRlZmluZSBF
WElUX1NVQ0NFU1MgMAorIyAgIGVuZGlmCisjICBlbmRpZgorIyAgaWZuZGVmIFlZTUFMTE9DCisj
ICAgZGVmaW5lIFlZTUFMTE9DIG1hbGxvYworIyAgIGlmICEgZGVmaW5lZCBtYWxsb2MgJiYgISBk
ZWZpbmVkIEVYSVRfU1VDQ0VTUyAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5
X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19W
RVIpCit2b2lkICptYWxsb2MgKFlZU0laRV9UKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBT
UEFDRSAqLworIyAgIGVuZGlmCisjICBlbmRpZgorIyAgaWZuZGVmIFlZRlJFRQorIyAgIGRlZmlu
ZSBZWUZSRUUgZnJlZQorIyAgIGlmICEgZGVmaW5lZCBmcmVlICYmICEgZGVmaW5lZCBFWElUX1NV
Q0NFU1MgJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAg
ICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQordm9pZCBmcmVl
ICh2b2lkICopOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZW5kaWYK
KyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYgLyogISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlF
UlJPUl9WRVJCT1NFICovCisKKworI2lmICghIGRlZmluZWQgeXlvdmVyZmxvdyBcCisgICAgICYm
ICghIGRlZmluZWQgX19jcGx1c3BsdXMgXAorCSB8fCAoZGVmaW5lZCBZWUxUWVBFX0lTX1RSSVZJ
QUwgJiYgWVlMVFlQRV9JU19UUklWSUFMIFwKKwkgICAgICYmIGRlZmluZWQgWVlTVFlQRV9JU19U
UklWSUFMICYmIFlZU1RZUEVfSVNfVFJJVklBTCkpKQorCisvKiBBIHR5cGUgdGhhdCBpcyBwcm9w
ZXJseSBhbGlnbmVkIGZvciBhbnkgc3RhY2sgbWVtYmVyLiAgKi8KK3VuaW9uIHl5YWxsb2MKK3sK
KyAgeXl0eXBlX2ludDE2IHl5c3NfYWxsb2M7CisgIFlZU1RZUEUgeXl2c19hbGxvYzsKKyAgWVlM
VFlQRSB5eWxzX2FsbG9jOworfTsKKworLyogVGhlIHNpemUgb2YgdGhlIG1heGltdW0gZ2FwIGJl
dHdlZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRoZSBuZXh0LiAgKi8KKyMgZGVmaW5lIFlZU1RB
Q0tfR0FQX01BWElNVU0gKHNpemVvZiAodW5pb24geXlhbGxvYykgLSAxKQorCisvKiBUaGUgc2l6
ZSBvZiBhbiBhcnJheSBsYXJnZSB0byBlbm91Z2ggdG8gaG9sZCBhbGwgc3RhY2tzLCBlYWNoIHdp
dGgKKyAgIE4gZWxlbWVudHMuICAqLworIyBkZWZpbmUgWVlTVEFDS19CWVRFUyhOKSBcCisgICAg
ICgoTikgKiAoc2l6ZW9mICh5eXR5cGVfaW50MTYpICsgc2l6ZW9mIChZWVNUWVBFKSArIHNpemVv
ZiAoWVlMVFlQRSkpIFwKKyAgICAgICsgMiAqIFlZU1RBQ0tfR0FQX01BWElNVU0pCisKKyMgZGVm
aW5lIFlZQ09QWV9ORUVERUQgMQorCisvKiBSZWxvY2F0ZSBTVEFDSyBmcm9tIGl0cyBvbGQgbG9j
YXRpb24gdG8gdGhlIG5ldyBvbmUuICBUaGUKKyAgIGxvY2FsIHZhcmlhYmxlcyBZWVNJWkUgYW5k
IFlZU1RBQ0tTSVpFIGdpdmUgdGhlIG9sZCBhbmQgbmV3IG51bWJlciBvZgorICAgZWxlbWVudHMg
aW4gdGhlIHN0YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUKKyAg
IHN0YWNrLiAgQWR2YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRpb24gZm9y
IHRoZSBuZXh0CisgICBzdGFjay4gICovCisjIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNr
X2FsbG9jLCBTdGFjaykJCQkJXAorICAgIGRvCQkJCQkJCQkJXAorICAgICAgewkJCQkJCQkJCVwK
KwlZWVNJWkVfVCB5eW5ld2J5dGVzOwkJCQkJCVwKKwlZWUNPUFkgKCZ5eXB0ci0+U3RhY2tfYWxs
b2MsIFN0YWNrLCB5eXNpemUpOwkJCVwKKwlTdGFjayA9ICZ5eXB0ci0+U3RhY2tfYWxsb2M7CQkJ
CQlcCisJeXluZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9mICgqU3RhY2spICsgWVlTVEFD
S19HQVBfTUFYSU1VTTsgXAorCXl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7
CQkJCVwKKyAgICAgIH0JCQkJCQkJCQlcCisgICAgd2hpbGUgKFlZSUQgKDApKQorCisjZW5kaWYK
KworI2lmIGRlZmluZWQgWVlDT1BZX05FRURFRCAmJiBZWUNPUFlfTkVFREVECisvKiBDb3B5IENP
VU5UIG9iamVjdHMgZnJvbSBTUkMgdG8gRFNULiAgVGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24g
ZG8KKyAgIG5vdCBvdmVybGFwLiAgKi8KKyMgaWZuZGVmIFlZQ09QWQorIyAgaWYgZGVmaW5lZCBf
X0dOVUNfXyAmJiAxIDwgX19HTlVDX18KKyMgICBkZWZpbmUgWVlDT1BZKERzdCwgU3JjLCBDb3Vu
dCkgXAorICAgICAgX19idWlsdGluX21lbWNweSAoRHN0LCBTcmMsIChDb3VudCkgKiBzaXplb2Yg
KCooU3JjKSkpCisjICBlbHNlCisjICAgZGVmaW5lIFlZQ09QWShEc3QsIFNyYywgQ291bnQpICAg
ICAgICAgICAgICBcCisgICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgICAgWVlTSVpFX1QgeXlpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgZm9yICh5eWkgPSAwOyB5eWkgPCAoQ291bnQpOyB5eWkrKykgICBcCisgICAgICAgICAg
ICAoRHN0KVt5eWldID0gKFNyYylbeXlpXTsgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB3aGlsZSAoWVlJRCAoMCkp
CisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmIC8qICFZWUNPUFlfTkVFREVEICovCisKKy8qIFlZ
RklOQUwgLS0gU3RhdGUgbnVtYmVyIG9mIHRoZSB0ZXJtaW5hdGlvbiBzdGF0ZS4gICovCisjZGVm
aW5lIFlZRklOQUwgIDc0CisvKiBZWUxBU1QgLS0gTGFzdCBpbmRleCBpbiBZWVRBQkxFLiAgKi8K
KyNkZWZpbmUgWVlMQVNUICAgMTQ5MAorCisvKiBZWU5UT0tFTlMgLS0gTnVtYmVyIG9mIHRlcm1p
bmFscy4gICovCisjZGVmaW5lIFlZTlRPS0VOUyAgOTUKKy8qIFlZTk5UUyAtLSBOdW1iZXIgb2Yg
bm9udGVybWluYWxzLiAgKi8KKyNkZWZpbmUgWVlOTlRTICA4NAorLyogWVlOUlVMRVMgLS0gTnVt
YmVyIG9mIHJ1bGVzLiAgKi8KKyNkZWZpbmUgWVlOUlVMRVMgIDIwMgorLyogWVlOUlVMRVMgLS0g
TnVtYmVyIG9mIHN0YXRlcy4gICovCisjZGVmaW5lIFlZTlNUQVRFUyAgMzA3CisKKy8qIFlZVFJB
TlNMQVRFKFlZTEVYKSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlM
RVguICAqLworI2RlZmluZSBZWVVOREVGVE9LICAyCisjZGVmaW5lIFlZTUFYVVRPSyAgIDM0OQor
CisjZGVmaW5lIFlZVFJBTlNMQVRFKFlZWCkJCQkJCQlcCisgICgodW5zaWduZWQgaW50KSAoWVlY
KSA8PSBZWU1BWFVUT0sgPyB5eXRyYW5zbGF0ZVtZWVhdIDogWVlVTkRFRlRPSykKKworLyogWVlU
UkFOU0xBVEVbWVlMRVhdIC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZ
WUxFWC4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dHJhbnNsYXRlW10gPQorewor
ICAgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisg
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAg
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwKKyAgICAgICA1LCAgICAg
NiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0
LAorICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLCAgICAyMywgICAgMjQsCisgICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjks
ICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwKKyAgICAgIDM1LCAgICAzNiwgICAg
MzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LAorICAg
ICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAg
ICA1MywgICAgNTQsCisgICAgICA1NSwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYw
LCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwKKyAgICAgIDY1LCAgICA2NiwgICAgNjcsICAg
IDY4LCAgICA2OSwgICAgNzAsICAgIDcxLCAgICA3MiwgICAgNzMsICAgIDc0LAorICAgICAgNzUs
ICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIDgyLCAgICA4Mywg
ICAgODQsCisgICAgICA4NSwgICAgODYsICAgIDg3LCAgICA4OCwgICAgODksICAgIDkwLCAgICA5
MSwgICAgOTIsICAgIDkzLCAgICA5NAorfTsKKworI2lmIFlZREVCVUcKKy8qIFlZUFJIU1tZWU5d
IC0tIEluZGV4IG9mIHRoZSBmaXJzdCBSSFMgc3ltYm9sIG9mIHJ1bGUgbnVtYmVyIFlZTiBpbgor
ICAgWVlSSFMuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXlwcmhzW10gPQorewor
ICAgICAgIDAsICAgICAwLCAgICAgMywgICAgIDUsICAgICA3LCAgICAgOSwgICAgMTEsICAgIDEz
LCAgICAxNSwgICAgMTcsCisgICAgICAyMSwgICAgMjMsICAgIDI4LCAgICAzMCwgICAgMzQsICAg
IDM3LCAgICA0MCwgICAgNDIsICAgIDQ0LCAgICA0NiwKKyAgICAgIDUwLCAgICA1MywgICAgNTYs
ICAgIDU5LCAgICA2MSwgICAgNjQsICAgIDY4LCAgICA3MSwgICAgNzMsICAgIDc1LAorICAgICAg
NzcsICAgIDgwLCAgICA4MywgICAgODYsICAgIDg4LCAgICA5MCwgICAgOTIsICAgIDk0LCAgICA5
OCwgICAxMDIsCisgICAgIDEwNCwgICAxMDgsICAgMTEyLCAgIDExNCwgICAxMTYsICAgMTIwLCAg
IDEyNCwgICAxMjgsICAgMTMyLCAgIDEzNCwKKyAgICAgMTM4LCAgIDE0MiwgICAxNDQsICAgMTQ2
LCAgIDE0OCwgICAxNTAsICAgMTU0LCAgIDE1NiwgICAxNjAsICAgMTYyLAorICAgICAxNjYsICAg
MTY4LCAgIDE3NCwgICAxNzYsICAgMTgwLCAgIDE4MiwgICAxODQsICAgMTg2LCAgIDE4OCwgICAx
OTAsCisgICAgIDE5MiwgICAxOTYsICAgMTk4LCAgIDIwMSwgICAyMDQsICAgMjA5LCAgIDIxMiwg
ICAyMTQsICAgMjE2LCAgIDIxOSwKKyAgICAgMjIzLCAgIDIyNywgICAyMzAsICAgMjM2LCAgIDI0
MCwgICAyNDMsICAgMjQ3LCAgIDI1MCwgICAyNTEsICAgMjUzLAorICAgICAyNTUsICAgMjU3LCAg
IDI1OSwgICAyNjEsICAgMjY1LCAgIDI3MSwgICAyNzgsICAgMjg0LCAgIDI4NiwgICAyODksCisg
ICAgIDI5NCwgICAzMDAsICAgMzA1LCAgIDMwOCwgICAzMTAsICAgMzEzLCAgIDMxNSwgICAzMTcs
ICAgMzE5LCAgIDMyMiwKKyAgICAgMzI0LCAgIDMyNiwgICAzMjksICAgMzMxLCAgIDMzMywgICAz
MzUsICAgMzM3LCAgIDM0MiwgICAzNDQsICAgMzQ2LAorICAgICAzNDgsICAgMzUwLCAgIDM1Miwg
ICAzNTQsICAgMzU2LCAgIDM1OCwgICAzNjAsICAgMzYyLCAgIDM2NCwgICAzNjYsCisgICAgIDM2
OCwgICAzNzAsICAgMzcyLCAgIDM3NCwgICAzNzYsICAgMzc4LCAgIDM4MCwgICAzODIsICAgMzg0
LCAgIDM4NiwKKyAgICAgMzg3LCAgIDM5NCwgICAzOTUsICAgNDAxLCAgIDQwMywgICA0MDYsICAg
NDEwLCAgIDQxMiwgICA0MTYsICAgNDE4LAorICAgICA0MjMsICAgNDI1LCAgIDQyNywgICA0Mjks
ICAgNDMxLCAgIDQzMywgICA0MzUsICAgNDM3LCAgIDQzOSwgICA0NDEsCisgICAgIDQ0NCwgICA0
NDUsICAgNDQ2LCAgIDQ1MiwgICA0NTQsICAgNDU2LCAgIDQ1NywgICA0NjAsICAgNDYxLCAgIDQ2
NCwKKyAgICAgNDY3LCAgIDQ3MSwgICA0NzMsICAgNDc2LCAgIDQ3OCwgICA0ODEsICAgNDg3LCAg
IDQ5MSwgICA0OTMsICAgNDk1LAorICAgICA1MDAsICAgNTAxLCAgIDUwOCwgICA1MDksICAgNTE4
LCAgIDUxOSwgICA1MjcsICAgNTI5LCAgIDUzMSwgICA1MzMsCisgICAgIDUzNCwgICA1MzcsICAg
NTQxLCAgIDU0NCwgICA1NDcsICAgNTUwLCAgIDU1NCwgICA1NTcsICAgNTU5LCAgIDU2MiwKKyAg
ICAgNTY0LCAgIDU2NiwgICA1NjcKK307CisKKy8qIFlZUkhTIC0tIEEgYC0xJy1zZXBhcmF0ZWQg
bGlzdCBvZiB0aGUgcnVsZXMnIFJIUy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5
cmhzW10gPQoreworICAgICAxNzUsICAgICAwLCAgICAtMSwgICAgNDUsICAgIC0xLCAgICA0Niwg
ICAgLTEsICAgIDQ1LCAgICAtMSwgICAgOTcsCisgICAgICAtMSwgICAgNDgsICAgIC0xLCAgICA0
NywgICAgLTEsICAgIDQ5LCAgICAtMSwgICAgNzEsICAgMTI0LCAgICA3MiwKKyAgICAgIC0xLCAg
ICA5OCwgICAgLTEsICAgIDk5LCAgICA3MywgICAxMDAsICAgIDc0LCAgICAtMSwgICAxMDEsICAg
IC0xLAorICAgICAgOTksICAgIDc3LCAgICA5NiwgICAgLTEsICAgIDk5LCAgICA1MiwgICAgLTEs
ICAgIDk5LCAgICA1MywgICAgLTEsCisgICAgIDEyNCwgICAgLTEsICAgMTAyLCAgICAtMSwgICAx
MDMsICAgIC0xLCAgICA5OSwgICAgNzcsICAgMTAzLCAgICAtMSwKKyAgICAgMTA1LCAgICA3Miwg
ICAgLTEsICAgMTA0LCAgICA3MiwgICAgLTEsICAgMTA2LCAgICAzOSwgICAgLTEsICAgMTA2LAor
ICAgICAgLTEsICAgMTA2LCAgIDEyMiwgICAgLTEsICAgMTA1LCAgICA3OCwgICAxMjIsICAgIC0x
LCAgIDEwNywgICAgNzEsCisgICAgICAtMSwgICAxNDIsICAgIC0xLCAgICA0NSwgICAgLTEsICAg
IDk5LCAgICAtMSwgICAgNTIsICAgMTA4LCAgICAtMSwKKyAgICAgIDUzLCAgIDEwOCwgICAgLTEs
ICAgMTA5LCAgIDEwOCwgICAgLTEsICAgIDg1LCAgICAtMSwgICAgODMsICAgIC0xLAorICAgICAg
ODIsICAgIC0xLCAgIDEwOCwgICAgLTEsICAgMTEwLCAgICA4NiwgICAxMDgsICAgIC0xLCAgIDEx
MCwgICAgODcsCisgICAgIDEwOCwgICAgLTEsICAgMTEwLCAgICAtMSwgICAxMTEsICAgIDg1LCAg
IDExMCwgICAgLTEsICAgMTExLCAgICA4MywKKyAgICAgMTEwLCAgICAtMSwgICAxMTEsICAgIC0x
LCAgIDExMiwgICAgLTEsICAgMTEzLCAgICA4OSwgICAxMTIsICAgIC0xLAorICAgICAxMTMsICAg
IDkwLCAgIDExMiwgICAgLTEsICAgMTEzLCAgICA1NCwgICAxMTIsICAgIC0xLCAgIDExMywgICAg
NTUsCisgICAgIDExMiwgICAgLTEsICAgMTEzLCAgICAtMSwgICAxMTQsICAgIDU2LCAgIDExMywg
ICAgLTEsICAgMTE0LCAgICA1NywKKyAgICAgMTEzLCAgICAtMSwgICAxMTQsICAgIC0xLCAgIDEx
NSwgICAgLTEsICAgMTE2LCAgICAtMSwgICAxMTcsICAgIC0xLAorICAgICAxMTgsICAgIDU4LCAg
IDExNywgICAgLTEsICAgMTE4LCAgICAtMSwgICAxMTksICAgIDYwLCAgIDExOCwgICAgLTEsCisg
ICAgIDExOSwgICAgLTEsICAgMTIwLCAgICA1OSwgICAxMTksICAgIC0xLCAgIDEyMCwgICAgLTEs
ICAgMTIwLCAgICA5NCwKKyAgICAgMTI0LCAgICA3OSwgICAxMjIsICAgIC0xLCAgIDEyMSwgICAg
LTEsICAgMTA4LCAgIDEyMywgICAxMjIsICAgIC0xLAorICAgICAgODAsICAgIC0xLCAgICA2MSwg
ICAgLTEsICAgIDYyLCAgICAtMSwgICAgNjMsICAgIC0xLCAgICA3MCwgICAgLTEsCisgICAgIDEy
MiwgICAgLTEsICAgMTI0LCAgICA3OCwgICAxMjIsICAgIC0xLCAgIDEyMSwgICAgLTEsICAgMTI3
LCAgICA4MSwKKyAgICAgIC0xLCAgIDEzNSwgICAgODEsICAgIC0xLCAgICAgNywgICAxNDAsICAg
MTQxLCAgICA4MSwgICAgLTEsICAgMTI4LAorICAgICAgNzIsICAgIC0xLCAgIDEzMCwgICAgLTEs
ICAgMTI5LCAgICAtMSwgICAxMzAsICAgMTMyLCAgICAtMSwgICAxMjksCisgICAgICA3OCwgICAx
MzIsICAgIC0xLCAgIDEzNywgICAgNDUsICAgIDcxLCAgICAtMSwgICAxMzksICAgIDk2LCAgICAt
MSwKKyAgICAgMTM5LCAgICA5NiwgICAgNzMsICAgMTI1LCAgICA3NCwgICAgLTEsICAgMTM4LCAg
IDEzMywgICAxMzEsICAgIC0xLAorICAgICAxMzMsICAgMTMxLCAgICAtMSwgICAxMzgsICAgMTMz
LCAgIDEzNCwgICAgLTEsICAgMTMzLCAgIDEzNCwgICAgLTEsCisgICAgICAtMSwgICAgMzMsICAg
IC0xLCAgICAzNCwgICAgLTEsICAgIDM1LCAgICAtMSwgICAxMzksICAgIC0xLCAgIDEzNiwKKyAg
ICAgIC0xLCAgIDEzNSwgICAgNzgsICAgIDk2LCAgICAtMSwgICAxMzUsICAgIDc4LCAgICA5Niwg
ICAgNzMsICAgIDc0LAorICAgICAgLTEsICAgMTM1LCAgICA3OCwgICAgOTYsICAgIDczLCAgIDEy
NSwgICAgNzQsICAgIC0xLCAgIDEzNSwgICAgNzgsCisgICAgICA5NiwgICAgODAsICAgMTUwLCAg
ICAtMSwgICAxMzcsICAgIC0xLCAgIDEzNywgICAgOTYsICAgIC0xLCAgIDEzNywKKyAgICAgIDk2
LCAgICA3MywgICAgNzQsICAgIC0xLCAgIDEzNywgICAgOTYsICAgIDczLCAgIDEyNSwgICAgNzQs
ICAgIC0xLAorICAgICAxMzcsICAgIDk2LCAgICA4MCwgICAxNTAsICAgIC0xLCAgICAgMywgICAg
NDUsICAgIC0xLCAgIDEzOSwgICAgLTEsCisgICAgIDEzOCwgICAxMzksICAgIC0xLCAgICAgOSwg
ICAgLTEsICAgICA4LCAgICAtMSwgICAgMzcsICAgIC0xLCAgICAgMywKKyAgICAgIDM3LCAgICAt
MSwgICAgMzYsICAgIC0xLCAgIDE0MSwgICAgLTEsICAgMTQwLCAgIDE0MSwgICAgLTEsICAgICA0
LAorICAgICAgLTEsICAgICA1LCAgICAtMSwgICAgIDYsICAgIC0xLCAgIDE0MiwgICAgLTEsICAg
MTQyLCAgICA3MywgICAxMjUsCisgICAgICA3NCwgICAgLTEsICAgIDM5LCAgICAtMSwgICAgMTEs
ICAgIC0xLCAgICAxMiwgICAgLTEsICAgIDEwLCAgICAtMSwKKyAgICAgIDI3LCAgICAtMSwgICAg
MjgsICAgIC0xLCAgICAyOSwgICAgLTEsICAgIDIxLCAgICAtMSwgICAgMjIsICAgIC0xLAorICAg
ICAgMjMsICAgIC0xLCAgICAyNCwgICAgLTEsICAgIDI1LCAgICAtMSwgICAgMjYsICAgIC0xLCAg
ICAzMCwgICAgLTEsCisgICAgICAzMSwgICAgLTEsICAgIDMyLCAgICAtMSwgICAgNDEsICAgIC0x
LCAgICA0MiwgICAgLTEsICAgIDQzLCAgICAtMSwKKyAgICAgIDQ0LCAgICAtMSwgICAxNDMsICAg
IC0xLCAgICA0NiwgICAgLTEsICAgIC0xLCAgICAzOCwgICAgOTYsICAgIDc1LAorICAgICAxNDQs
ICAgMTQ2LCAgICA3NiwgICAgLTEsICAgIC0xLCAgICAzOCwgICAgNzUsICAgMTQ1LCAgIDE0Niwg
ICAgNzYsCisgICAgICAtMSwgICAxNDcsICAgIC0xLCAgIDE0NiwgICAxNDcsICAgIC0xLCAgIDEz
OSwgICAxNDgsICAgIDgxLCAgICAtMSwKKyAgICAgMTQ5LCAgICAtMSwgICAxNDgsICAgIDc4LCAg
IDE0OSwgICAgLTEsICAgIDk2LCAgICAtMSwgICAgOTYsICAgIDczLAorICAgICAxMjUsICAgIDc0
LCAgICAtMSwgICAxMjIsICAgIC0xLCAgIDEyNiwgICAgLTEsICAgMTU0LCAgICAtMSwgICAxNTMs
CisgICAgICAtMSwgICAxNTEsICAgIC0xLCAgIDE2MywgICAgLTEsICAgMTY0LCAgICAtMSwgICAx
NjcsICAgIC0xLCAgIDE3NCwKKyAgICAgIC0xLCAgICA3NSwgICAgNzYsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDc1LCAgIDE1NSwgICAxNjIsICAgMTU2LAorICAgICAgNzYsICAgIC0xLCAgIDE2
MSwgICAgLTEsICAgMTUzLCAgICAtMSwgICAgLTEsICAgMTU5LCAgIDE2MSwgICAgLTEsCisgICAg
ICAtMSwgICAxNjAsICAgMTUzLCAgICAtMSwgICAgNzUsICAgIDc2LCAgICAtMSwgICAgNzUsICAg
MTYyLCAgICA3NiwKKyAgICAgIC0xLCAgIDE1MiwgICAgLTEsICAgMTYyLCAgIDE1MiwgICAgLTEs
ICAgIDgxLCAgICAtMSwgICAxMjQsICAgIDgxLAorICAgICAgLTEsICAgIDE4LCAgICA3MSwgICAx
MjQsICAgIDcyLCAgIDE2NSwgICAgLTEsICAgMTU4LCAgICAxNiwgICAxNTgsCisgICAgICAtMSwg
ICAxNTgsICAgIC0xLCAgIDEyNCwgICAgLTEsICAgMTM3LCAgICA5NiwgICAgODAsICAgMTUwLCAg
ICAtMSwKKyAgICAgIC0xLCAgICA0MCwgICAgNzEsICAgMTY4LCAgIDE2NiwgICAgNzIsICAgMTU3
LCAgICAtMSwgICAgLTEsICAgIDE1LAorICAgICAxNjksICAgMTU4LCAgICA0MCwgICAgNzEsICAg
MTI0LCAgICA3MiwgICAgODEsICAgIC0xLCAgICAtMSwgICAgMTcsCisgICAgICA3MSwgICAxNzAs
ICAgMTcxLCAgIDE3MywgICAgNzIsICAgMTU3LCAgICAtMSwgICAxNjMsICAgIC0xLCAgIDE1MSwK
KyAgICAgIC0xLCAgIDE2NiwgICAgLTEsICAgIC0xLCAgIDE3MiwgICAgODEsICAgIC0xLCAgIDE3
MiwgICAgODEsICAgMTI0LAorICAgICAgLTEsICAgIDE0LCAgICA4MSwgICAgLTEsICAgIDEzLCAg
ICA4MSwgICAgLTEsICAgIDIwLCAgICA4MSwgICAgLTEsCisgICAgICAyMCwgICAxMjQsICAgIDgx
LCAgICAtMSwgICAgMTksICAgIDgxLCAgICAtMSwgICAxNzYsICAgIC0xLCAgIDE3NSwKKyAgICAg
MTc2LCAgICAtMSwgICAxNzcsICAgIC0xLCAgIDEyNiwgICAgLTEsICAgIC0xLCAgIDEyNywgICAx
NzgsICAgMTYxLAorICAgICAgLTEKK307CisKKy8qIFlZUkxJTkVbWVlOXSAtLSBzb3VyY2UgbGlu
ZSB3aGVyZSBydWxlIG51bWJlciBZWU4gd2FzIGRlZmluZWQuICAqLworc3RhdGljIGNvbnN0IHl5
dHlwZV91aW50MTYgeXlybGluZVtdID0KK3sKKyAgICAgICAwLCAgIDE4MCwgICAxODAsICAgMTgx
LCAgIDE4NCwgICAyMzksICAgMjQyLCAgIDI0NywgICAyNTIsICAgMjU3LAorICAgICAyNjMsICAg
MjY2LCAgIDI2OSwgICAyNzIsICAgMzY3LCAgIDM3NywgICAzOTAsICAgMzk4LCAgIDQ5OCwgICA1
MDEsCisgICAgIDUwOSwgICA1MTIsICAgNTE4LCAgIDUyMiwgICA1MjksICAgNTM1LCAgIDU0NCwg
ICA1NTIsICAgNjA3LCAgIDYxNywKKyAgICAgNjIwLCAgIDYzMCwgICA2NDAsICAgNjYxLCAgIDY2
MiwgICA2NjMsICAgNjY4LCAgIDY2OSwgICA2NzcsICAgNjg4LAorICAgICA2ODksICAgNjk3LCAg
IDcwOCwgICA3MTIsICAgNzEzLCAgIDcyMywgICA3MzMsICAgNzQzLCAgIDc1NiwgICA3NTcsCisg
ICAgIDc2NywgICA3ODAsICAgNzg0LCAgIDc4OCwgICA3OTIsICAgNzkzLCAgIDgwNiwgICA4MDcs
ICAgODIwLCAgIDgyMSwKKyAgICAgODM0LCAgIDgzNSwgICA4NTIsICAgODUzLCAgIDg2NiwgICA4
NjcsICAgODY4LCAgIDg2OSwgICA4NzAsICAgODc0LAorICAgICA4NzcsICAgODg4LCAgIDg5Niwg
ICA5MjMsICAgOTI4LCAgIDk0MiwgICA5OTcsICAxMDAwLCAgMTAwNywgIDEwMTUsCisgICAgMTAz
NiwgIDEwNTcsICAxMDY3LCAgMTA5NSwgIDExMDAsICAxMTEwLCAgMTExNSwgIDExMjUsICAxMTI4
LCAgMTEzMSwKKyAgICAxMTM0LCAgMTE0MCwgIDExNDcsICAxMTUwLCAgMTE3MiwgIDExOTAsICAx
MjE0LCAgMTIzNywgIDEyNDEsICAxMjU5LAorICAgIDEyNjcsICAxMjk5LCAgMTMxOSwgIDEzNDAs
ICAxMzQ5LCAgMTM3MiwgIDEzNzUsICAxMzgxLCAgMTM4OSwgIDEzOTcsCisgICAgMTQwNSwgIDE0
MTUsICAxNDIyLCAgMTQyNSwgIDE0MjgsICAxNDM0LCAgMTQzNywgIDE0NTIsICAxNDU2LCAgMTQ2
MCwKKyAgICAxNDY0LCAgMTQ2OCwgIDE0NzMsICAxNDc4LCAgMTQ4MywgIDE0ODgsICAxNDkzLCAg
MTQ5OCwgIDE1MDMsICAxNTA4LAorICAgIDE1MTMsICAxNTE4LCAgMTUyMywgIDE1MjgsICAxNTMy
LCAgMTUzNiwgIDE1NDQsICAxNTUyLCAgMTU1NiwgIDE1NjksCisgICAgMTU2OSwgIDE1ODMsICAx
NTgzLCAgMTU5MiwgIDE1OTUsICAxNjExLCAgMTY0NCwgIDE2NDgsICAxNjU0LCAgMTY2MSwKKyAg
ICAxNjc2LCAgMTY4MCwgIDE2ODQsICAxNjg1LCAgMTY5MSwgIDE2OTIsICAxNjkzLCAgMTY5NCwg
IDE2OTUsICAxNjk5LAorICAgIDE3MDAsICAxNzAwLCAgMTcwMCwgIDE3MTAsICAxNzExLCAgMTcx
NSwgIDE3MTUsICAxNzE2LCAgMTcxNiwgIDE3MjEsCisgICAgMTcyNCwgIDE3MzQsICAxNzM3LCAg
MTc0MywgIDE3NDQsICAxNzQ4LCAgMTc1NiwgIDE3NjAsICAxNzcwLCAgMTc3NSwKKyAgICAxNzky
LCAgMTc5MiwgIDE3OTcsICAxNzk3LCAgMTgwNCwgIDE4MDQsICAxODEyLCAgMTgxNSwgIDE4MjEs
ICAxODI0LAorICAgIDE4MzAsICAxODM0LCAgMTg0MSwgIDE4NDgsICAxODU1LCAgMTg2MiwgIDE4
NzMsICAxODgyLCAgMTg4NiwgIDE4OTMsCisgICAgMTg5NiwgIDE5MDIsICAxOTAyCit9OworI2Vu
ZGlmCisKKyNpZiBZWURFQlVHIHx8IFlZRVJST1JfVkVSQk9TRSB8fCAwCisvKiBZWVROQU1FW1NZ
TUJPTC1OVU1dIC0tIFN0cmluZyBuYW1lIG9mIHRoZSBzeW1ib2wgU1lNQk9MLU5VTS4KKyAgIEZp
cnN0LCB0aGUgdGVybWluYWxzLCB0aGVuLCBzdGFydGluZyBhdCBZWU5UT0tFTlMsIG5vbnRlcm1p
bmFscy4gICovCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgeXl0bmFtZVtdID0KK3sKKyAgIiRl
bmQiLCAiZXJyb3IiLCAiJHVuZGVmaW5lZCIsICJJTlZBUklBTlQiLCAiSElHSF9QUkVDSVNJT04i
LAorICAiTUVESVVNX1BSRUNJU0lPTiIsICJMT1dfUFJFQ0lTSU9OIiwgIlBSRUNJU0lPTiIsICJB
VFRSSUJVVEUiLAorICAiQ09OU1RfUVVBTCIsICJCT09MX1RZUEUiLCAiRkxPQVRfVFlQRSIsICJJ
TlRfVFlQRSIsICJCUkVBSyIsICJDT05USU5VRSIsCisgICJETyIsICJFTFNFIiwgIkZPUiIsICJJ
RiIsICJESVNDQVJEIiwgIlJFVFVSTiIsICJCVkVDMiIsICJCVkVDMyIsCisgICJCVkVDNCIsICJJ
VkVDMiIsICJJVkVDMyIsICJJVkVDNCIsICJWRUMyIiwgIlZFQzMiLCAiVkVDNCIsICJNQVRSSVgy
IiwKKyAgIk1BVFJJWDMiLCAiTUFUUklYNCIsICJJTl9RVUFMIiwgIk9VVF9RVUFMIiwgIklOT1VU
X1FVQUwiLCAiVU5JRk9STSIsCisgICJWQVJZSU5HIiwgIlNUUlVDVCIsICJWT0lEX1RZUEUiLCAi
V0hJTEUiLCAiU0FNUExFUjJEIiwgIlNBTVBMRVJDVUJFIiwKKyAgIlNBTVBMRVJfRVhURVJOQUxf
T0VTIiwgIlNBTVBMRVIyRFJFQ1QiLCAiSURFTlRJRklFUiIsICJUWVBFX05BTUUiLAorICAiRkxP
QVRDT05TVEFOVCIsICJJTlRDT05TVEFOVCIsICJCT09MQ09OU1RBTlQiLCAiTEVGVF9PUCIsICJS
SUdIVF9PUCIsCisgICJJTkNfT1AiLCAiREVDX09QIiwgIkxFX09QIiwgIkdFX09QIiwgIkVRX09Q
IiwgIk5FX09QIiwgIkFORF9PUCIsCisgICJPUl9PUCIsICJYT1JfT1AiLCAiTVVMX0FTU0lHTiIs
ICJESVZfQVNTSUdOIiwgIkFERF9BU1NJR04iLAorICAiTU9EX0FTU0lHTiIsICJMRUZUX0FTU0lH
TiIsICJSSUdIVF9BU1NJR04iLCAiQU5EX0FTU0lHTiIsICJYT1JfQVNTSUdOIiwKKyAgIk9SX0FT
U0lHTiIsICJTVUJfQVNTSUdOIiwgIkxFRlRfUEFSRU4iLCAiUklHSFRfUEFSRU4iLCAiTEVGVF9C
UkFDS0VUIiwKKyAgIlJJR0hUX0JSQUNLRVQiLCAiTEVGVF9CUkFDRSIsICJSSUdIVF9CUkFDRSIs
ICJET1QiLCAiQ09NTUEiLCAiQ09MT04iLAorICAiRVFVQUwiLCAiU0VNSUNPTE9OIiwgIkJBTkci
LCAiREFTSCIsICJUSUxERSIsICJQTFVTIiwgIlNUQVIiLCAiU0xBU0giLAorICAiUEVSQ0VOVCIs
ICJMRUZUX0FOR0xFIiwgIlJJR0hUX0FOR0xFIiwgIlZFUlRJQ0FMX0JBUiIsICJDQVJFVCIsCisg
ICJBTVBFUlNBTkQiLCAiUVVFU1RJT04iLCAiJGFjY2VwdCIsICJpZGVudGlmaWVyIiwgInZhcmlh
YmxlX2lkZW50aWZpZXIiLAorICAicHJpbWFyeV9leHByZXNzaW9uIiwgInBvc3RmaXhfZXhwcmVz
c2lvbiIsICJpbnRlZ2VyX2V4cHJlc3Npb24iLAorICAiZnVuY3Rpb25fY2FsbCIsICJmdW5jdGlv
bl9jYWxsX29yX21ldGhvZCIsICJmdW5jdGlvbl9jYWxsX2dlbmVyaWMiLAorICAiZnVuY3Rpb25f
Y2FsbF9oZWFkZXJfbm9fcGFyYW1ldGVycyIsCisgICJmdW5jdGlvbl9jYWxsX2hlYWRlcl93aXRo
X3BhcmFtZXRlcnMiLCAiZnVuY3Rpb25fY2FsbF9oZWFkZXIiLAorICAiZnVuY3Rpb25faWRlbnRp
ZmllciIsICJ1bmFyeV9leHByZXNzaW9uIiwgInVuYXJ5X29wZXJhdG9yIiwKKyAgIm11bHRpcGxp
Y2F0aXZlX2V4cHJlc3Npb24iLCAiYWRkaXRpdmVfZXhwcmVzc2lvbiIsICJzaGlmdF9leHByZXNz
aW9uIiwKKyAgInJlbGF0aW9uYWxfZXhwcmVzc2lvbiIsICJlcXVhbGl0eV9leHByZXNzaW9uIiwg
ImFuZF9leHByZXNzaW9uIiwKKyAgImV4Y2x1c2l2ZV9vcl9leHByZXNzaW9uIiwgImluY2x1c2l2
ZV9vcl9leHByZXNzaW9uIiwKKyAgImxvZ2ljYWxfYW5kX2V4cHJlc3Npb24iLCAibG9naWNhbF94
b3JfZXhwcmVzc2lvbiIsCisgICJsb2dpY2FsX29yX2V4cHJlc3Npb24iLCAiY29uZGl0aW9uYWxf
ZXhwcmVzc2lvbiIsCisgICJhc3NpZ25tZW50X2V4cHJlc3Npb24iLCAiYXNzaWdubWVudF9vcGVy
YXRvciIsICJleHByZXNzaW9uIiwKKyAgImNvbnN0YW50X2V4cHJlc3Npb24iLCAiZGVjbGFyYXRp
b24iLCAiZnVuY3Rpb25fcHJvdG90eXBlIiwKKyAgImZ1bmN0aW9uX2RlY2xhcmF0b3IiLCAiZnVu
Y3Rpb25faGVhZGVyX3dpdGhfcGFyYW1ldGVycyIsCisgICJmdW5jdGlvbl9oZWFkZXIiLCAicGFy
YW1ldGVyX2RlY2xhcmF0b3IiLCAicGFyYW1ldGVyX2RlY2xhcmF0aW9uIiwKKyAgInBhcmFtZXRl
cl9xdWFsaWZpZXIiLCAicGFyYW1ldGVyX3R5cGVfc3BlY2lmaWVyIiwKKyAgImluaXRfZGVjbGFy
YXRvcl9saXN0IiwgInNpbmdsZV9kZWNsYXJhdGlvbiIsICJmdWxseV9zcGVjaWZpZWRfdHlwZSIs
CisgICJ0eXBlX3F1YWxpZmllciIsICJ0eXBlX3NwZWNpZmllciIsICJwcmVjaXNpb25fcXVhbGlm
aWVyIiwKKyAgInR5cGVfc3BlY2lmaWVyX25vX3ByZWMiLCAidHlwZV9zcGVjaWZpZXJfbm9uYXJy
YXkiLCAic3RydWN0X3NwZWNpZmllciIsCisgICIkQDEiLCAiJEAyIiwgInN0cnVjdF9kZWNsYXJh
dGlvbl9saXN0IiwgInN0cnVjdF9kZWNsYXJhdGlvbiIsCisgICJzdHJ1Y3RfZGVjbGFyYXRvcl9s
aXN0IiwgInN0cnVjdF9kZWNsYXJhdG9yIiwgImluaXRpYWxpemVyIiwKKyAgImRlY2xhcmF0aW9u
X3N0YXRlbWVudCIsICJzdGF0ZW1lbnQiLCAic2ltcGxlX3N0YXRlbWVudCIsCisgICJjb21wb3Vu
ZF9zdGF0ZW1lbnQiLCAiJEAzIiwgIiRANCIsICJzdGF0ZW1lbnRfbm9fbmV3X3Njb3BlIiwKKyAg
InN0YXRlbWVudF93aXRoX3Njb3BlIiwgIiRANSIsICIkQDYiLCAiY29tcG91bmRfc3RhdGVtZW50
X25vX25ld19zY29wZSIsCisgICJzdGF0ZW1lbnRfbGlzdCIsICJleHByZXNzaW9uX3N0YXRlbWVu
dCIsICJzZWxlY3Rpb25fc3RhdGVtZW50IiwKKyAgInNlbGVjdGlvbl9yZXN0X3N0YXRlbWVudCIs
ICJjb25kaXRpb24iLCAiaXRlcmF0aW9uX3N0YXRlbWVudCIsICIkQDciLAorICAiJEA4IiwgIiRA
OSIsICJmb3JfaW5pdF9zdGF0ZW1lbnQiLCAiY29uZGl0aW9ub3B0IiwgImZvcl9yZXN0X3N0YXRl
bWVudCIsCisgICJqdW1wX3N0YXRlbWVudCIsICJ0cmFuc2xhdGlvbl91bml0IiwgImV4dGVybmFs
X2RlY2xhcmF0aW9uIiwKKyAgImZ1bmN0aW9uX2RlZmluaXRpb24iLCAiJEAxMCIsIFlZX05VTEwK
K307CisjZW5kaWYKKworIyBpZmRlZiBZWVBSSU5UCisvKiBZWVRPS05VTVtZWUxFWC1OVU1dIC0t
IEludGVybmFsIHRva2VuIG51bWJlciBjb3JyZXNwb25kaW5nIHRvCisgICB0b2tlbiBZWUxFWC1O
VU0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXl0b2tudW1bXSA9Cit7CisgICAg
ICAgMCwgICAyNTYsICAgMjU3LCAgIDI1OCwgICAyNTksICAgMjYwLCAgIDI2MSwgICAyNjIsICAg
MjYzLCAgIDI2NCwKKyAgICAgMjY1LCAgIDI2NiwgICAyNjcsICAgMjY4LCAgIDI2OSwgICAyNzAs
ICAgMjcxLCAgIDI3MiwgICAyNzMsICAgMjc0LAorICAgICAyNzUsICAgMjc2LCAgIDI3NywgICAy
NzgsICAgMjc5LCAgIDI4MCwgICAyODEsICAgMjgyLCAgIDI4MywgICAyODQsCisgICAgIDI4NSwg
ICAyODYsICAgMjg3LCAgIDI4OCwgICAyODksICAgMjkwLCAgIDI5MSwgICAyOTIsICAgMjkzLCAg
IDI5NCwKKyAgICAgMjk1LCAgIDI5NiwgICAyOTcsICAgMjk4LCAgIDI5OSwgICAzMDAsICAgMzAx
LCAgIDMwMiwgICAzMDMsICAgMzA0LAorICAgICAzMDUsICAgMzA2LCAgIDMwNywgICAzMDgsICAg
MzA5LCAgIDMxMCwgICAzMTEsICAgMzEyLCAgIDMxMywgICAzMTQsCisgICAgIDMxNSwgICAzMTYs
ICAgMzE3LCAgIDMxOCwgICAzMTksICAgMzIwLCAgIDMyMSwgICAzMjIsICAgMzIzLCAgIDMyNCwK
KyAgICAgMzI1LCAgIDMyNiwgICAzMjcsICAgMzI4LCAgIDMyOSwgICAzMzAsICAgMzMxLCAgIDMz
MiwgICAzMzMsICAgMzM0LAorICAgICAzMzUsICAgMzM2LCAgIDMzNywgICAzMzgsICAgMzM5LCAg
IDM0MCwgICAzNDEsICAgMzQyLCAgIDM0MywgICAzNDQsCisgICAgIDM0NSwgICAzNDYsICAgMzQ3
LCAgIDM0OCwgICAzNDkKK307CisjIGVuZGlmCisKKy8qIFlZUjFbWVlOXSAtLSBTeW1ib2wgbnVt
YmVyIG9mIHN5bWJvbCB0aGF0IHJ1bGUgWVlOIGRlcml2ZXMuICAqLworc3RhdGljIGNvbnN0IHl5
dHlwZV91aW50OCB5eXIxW10gPQoreworICAgICAgIDAsICAgIDk1LCAgICA5NiwgICAgOTYsICAg
IDk3LCAgICA5OCwgICAgOTgsICAgIDk4LCAgICA5OCwgICAgOTgsCisgICAgICA5OSwgICAgOTks
ICAgIDk5LCAgICA5OSwgICAgOTksICAgIDk5LCAgIDEwMCwgICAxMDEsICAgMTAyLCAgIDEwMiwK
KyAgICAgMTAzLCAgIDEwMywgICAxMDQsICAgMTA0LCAgIDEwNSwgICAxMDUsICAgMTA2LCAgIDEw
NywgICAxMDcsICAgMTA4LAorICAgICAxMDgsICAgMTA4LCAgIDEwOCwgICAxMDksICAgMTA5LCAg
IDEwOSwgICAxMTAsICAgMTEwLCAgIDExMCwgICAxMTEsCisgICAgIDExMSwgICAxMTEsICAgMTEy
LCAgIDExMywgICAxMTMsICAgMTEzLCAgIDExMywgICAxMTMsICAgMTE0LCAgIDExNCwKKyAgICAg
MTE0LCAgIDExNSwgICAxMTYsICAgMTE3LCAgIDExOCwgICAxMTgsICAgMTE5LCAgIDExOSwgICAx
MjAsICAgMTIwLAorICAgICAxMjEsICAgMTIxLCAgIDEyMiwgICAxMjIsICAgMTIzLCAgIDEyMywg
ICAxMjMsICAgMTIzLCAgIDEyMywgICAxMjQsCisgICAgIDEyNCwgICAxMjUsICAgMTI2LCAgIDEy
NiwgICAxMjYsICAgMTI3LCAgIDEyOCwgICAxMjgsICAgMTI5LCAgIDEyOSwKKyAgICAgMTMwLCAg
IDEzMSwgICAxMzEsICAgMTMyLCAgIDEzMiwgICAxMzIsICAgMTMyLCAgIDEzMywgICAxMzMsICAg
MTMzLAorICAgICAxMzMsICAgMTM0LCAgIDEzNSwgICAxMzUsICAgMTM1LCAgIDEzNSwgICAxMzUs
ICAgMTM2LCAgIDEzNiwgICAxMzYsCisgICAgIDEzNiwgICAxMzYsICAgMTM2LCAgIDEzNywgICAx
MzcsICAgMTM4LCAgIDEzOCwgICAxMzgsICAgMTM4LCAgIDEzOCwKKyAgICAgMTM5LCAgIDEzOSwg
ICAxNDAsICAgMTQwLCAgIDE0MCwgICAxNDEsICAgMTQxLCAgIDE0MiwgICAxNDIsICAgMTQyLAor
ICAgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQy
LCAgIDE0MiwgICAxNDIsCisgICAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAg
MTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0NCwKKyAgICAgMTQzLCAgIDE0NSwgICAxNDMs
ICAgMTQ2LCAgIDE0NiwgICAxNDcsICAgMTQ4LCAgIDE0OCwgICAxNDksICAgMTQ5LAorICAgICAx
NTAsICAgMTUxLCAgIDE1MiwgICAxNTIsICAgMTUzLCAgIDE1MywgICAxNTMsICAgMTUzLCAgIDE1
MywgICAxNTQsCisgICAgIDE1NSwgICAxNTYsICAgMTU0LCAgIDE1NywgICAxNTcsICAgMTU5LCAg
IDE1OCwgICAxNjAsICAgMTU4LCAgIDE2MSwKKyAgICAgMTYxLCAgIDE2MiwgICAxNjIsICAgMTYz
LCAgIDE2MywgICAxNjQsICAgMTY1LCAgIDE2NSwgICAxNjYsICAgMTY2LAorICAgICAxNjgsICAg
MTY3LCAgIDE2OSwgICAxNjcsICAgMTcwLCAgIDE2NywgICAxNzEsICAgMTcxLCAgIDE3MiwgICAx
NzIsCisgICAgIDE3MywgICAxNzMsICAgMTc0LCAgIDE3NCwgICAxNzQsICAgMTc0LCAgIDE3NCwg
ICAxNzUsICAgMTc1LCAgIDE3NiwKKyAgICAgMTc2LCAgIDE3OCwgICAxNzcKK307CisKKy8qIFlZ
UjJbWVlOXSAtLSBOdW1iZXIgb2Ygc3ltYm9scyBjb21wb3NpbmcgcmlnaHQgaGFuZCBzaWRlIG9m
IHJ1bGUgWVlOLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlyMltdID0KK3sKKyAg
ICAgICAwLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAzLAorICAgICAgIDEsICAgICA0LCAgICAgMSwgICAgIDMsICAgICAyLCAgICAg
MiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMSwgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwKKyAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMywgICAgIDMs
ICAgICAxLAorICAgICAgIDMsICAgICAzLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMywgICAg
IDMsICAgICAzLCAgICAgMSwgICAgIDMsCisgICAgICAgMywgICAgIDEsICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAzLCAgICAgMSwgICAgIDMsICAgICAxLCAgICAgMywKKyAgICAgICAxLCAgICAg
NSwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAx
LAorICAgICAgIDMsICAgICAxLCAgICAgMiwgICAgIDIsICAgICA0LCAgICAgMiwgICAgIDEsICAg
ICAxLCAgICAgMiwgICAgIDMsCisgICAgICAgMywgICAgIDIsICAgICA1LCAgICAgMywgICAgIDIs
ICAgICAzLCAgICAgMiwgICAgIDAsICAgICAxLCAgICAgMSwKKyAgICAgICAxLCAgICAgMSwgICAg
IDEsICAgICAzLCAgICAgNSwgICAgIDYsICAgICA1LCAgICAgMSwgICAgIDIsICAgICA0LAorICAg
ICAgIDUsICAgICA0LCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAg
ICAgMiwgICAgIDEsCisgICAgICAgMSwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgNCwgICAgIDEsICAgICAxLCAgICAgMSwKKyAgICAgICAxLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAorICAgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwg
ICAgIDAsCisgICAgICAgNiwgICAgIDAsICAgICA1LCAgICAgMSwgICAgIDIsICAgICAzLCAgICAg
MSwgICAgIDMsICAgICAxLCAgICAgNCwKKyAgICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLAorICAgICAgIDAsICAgICAw
LCAgICAgNSwgICAgIDEsICAgICAxLCAgICAgMCwgICAgIDIsICAgICAwLCAgICAgMiwgICAgIDIs
CisgICAgICAgMywgICAgIDEsICAgICAyLCAgICAgMSwgICAgIDIsICAgICA1LCAgICAgMywgICAg
IDEsICAgICAxLCAgICAgNCwKKyAgICAgICAwLCAgICAgNiwgICAgIDAsICAgICA4LCAgICAgMCwg
ICAgIDcsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAwLAorICAgICAgIDIsICAgICAzLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMywgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDEsCisgICAg
ICAgMSwgICAgIDAsICAgICAzCit9OworCisvKiBZWURFRkFDVFtTVEFURS1OQU1FXSAtLSBEZWZh
dWx0IHJlZHVjdGlvbiBudW1iZXIgaW4gc3RhdGUgU1RBVEUtTlVNLgorICAgUGVyZm9ybWVkIHdo
ZW4gWVlUQUJMRSBkb2Vzbid0IHNwZWNpZnkgc29tZXRoaW5nIGVsc2UgdG8gZG8uICBaZXJvCisg
ICBtZWFucyB0aGUgZGVmYXVsdCBpcyBhbiBlcnJvci4gICovCitzdGF0aWMgY29uc3QgeXl0eXBl
X3VpbnQ4IHl5ZGVmYWN0W10gPQoreworICAgICAgIDAsICAgICAwLCAgIDExMiwgICAxMTMsICAg
MTE0LCAgICAgMCwgICAxMDYsICAgMTA1LCAgIDEyMCwgICAxMTgsCisgICAgIDExOSwgICAxMjQs
ICAgMTI1LCAgIDEyNiwgICAxMjcsICAgMTI4LCAgIDEyOSwgICAxMjEsICAgMTIyLCAgIDEyMywK
KyAgICAgMTMwLCAgIDEzMSwgICAxMzIsICAgMTA5LCAgIDEwNywgICAgIDAsICAgMTE3LCAgIDEz
MywgICAxMzQsICAgMTM1LAorICAgICAxMzYsICAgMTM4LCAgIDIwMCwgICAyMDEsICAgICAwLCAg
ICA3NywgICAgODcsICAgICAwLCAgICA5MiwgICAgOTcsCisgICAgICAgMCwgICAxMDMsICAgICAw
LCAgIDExMCwgICAxMTUsICAgMTM3LCAgICAgMCwgICAxOTcsICAgMTk5LCAgIDEwOCwKKyAgICAg
MTAyLCAgICAgMCwgICAgIDIsICAgICAzLCAgIDE0MSwgICAgIDAsICAgIDcyLCAgICAgMCwgICAg
NzUsICAgIDg3LAorICAgICAgIDAsICAgIDg4LCAgICA4OSwgICAgOTAsICAgIDc4LCAgICAgMCwg
ICAgODcsICAgICAwLCAgICA3MywgICAgIDIsCisgICAgICA5OCwgICAxMDQsICAgMTExLCAgICAg
MCwgICAgIDEsICAgMTk4LCAgICAgMCwgICAgIDAsICAgMTM5LCAgICAgMCwKKyAgICAgMjAyLCAg
ICA3OSwgICAgODQsICAgIDg2LCAgICA5MSwgICAgIDAsICAgIDkzLCAgICA4MCwgICAgIDAsICAg
ICAwLAorICAgICAgIDQsICAgICA3LCAgICAgNiwgICAgIDgsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgIDM1LCAgICAzNCwgICAgMzMsCisgICAgICAgNSwgICAgMTAsICAgIDI5LCAgICAxMiwgICAg
MTcsICAgIDE4LCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAgMCwKKyAgICAgIDM2LCAgICAgMCwg
ICAgMzksICAgIDQyLCAgICA0MywgICAgNDgsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LAor
ICAgICAgNTYsICAgIDU4LCAgICA2MCwgICAgNzEsICAgICAwLCAgICAyNywgICAgNzQsICAgICAw
LCAgICAgMCwgICAxNDMsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgIDE4MiwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE2MCwKKyAgICAgMTY5LCAgIDE3MywgICAgMzYs
ICAgIDYyLCAgICA2OSwgICAgIDAsICAgMTUxLCAgICAgMCwgICAxMTUsICAgMTU0LAorICAgICAx
NzEsICAgMTUzLCAgIDE1MiwgICAgIDAsICAgMTU1LCAgIDE1NiwgICAxNTcsICAgMTU4LCAgICA4
MSwgICAgODMsCisgICAgICA4NSwgICAgIDAsICAgICAwLCAgICA5OSwgICAgIDAsICAgMTUwLCAg
IDEwMSwgICAgMzAsICAgIDMxLCAgICAgMCwKKyAgICAgIDE0LCAgICAxNSwgICAgIDAsICAgICAw
LCAgICAyMSwgICAgMjAsICAgICAwLCAgICAyMiwgICAgMjQsICAgIDI2LAorICAgICAgMzIsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTE2LCAgIDE0OCwg
ICAgIDAsICAgMTQ2LCAgIDE0MiwKKyAgICAgMTQ0LCAgICAgMCwgICAxOTMsICAgMTkyLCAgIDE2
NywgICAxODQsICAgICAwLCAgIDE5NiwgICAxOTQsICAgICAwLAorICAgICAxODAsICAgMTU5LCAg
ICAgMCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY0LCAgICAgMCwgICAgIDAsCisg
ICAgIDE3NCwgICAxNzAsICAgMTcyLCAgICAgMCwgICAgOTQsICAgICAwLCAgICA5NiwgICAxMDAs
ICAgICA5LCAgICAgMCwKKyAgICAgIDE2LCAgICAgMiwgICAgIDMsICAgIDEzLCAgICAxOSwgICAg
MjUsICAgIDM3LCAgICAzOCwgICAgNDEsICAgIDQwLAorICAgICAgNDYsICAgIDQ3LCAgICA0NCwg
ICAgNDUsICAgIDQ5LCAgICA1MCwgICAgNTUsICAgIDU3LCAgICA1OSwgICAgIDAsCisgICAgICAg
MCwgICAgIDAsICAgMTQ1LCAgIDE0MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgIDE5NSwKKyAgICAgICAwLCAgIDE2MSwgICAgNjMsICAgIDcwLCAgICAgMCwgICAgOTUsICAg
IDExLCAgICAgMCwgICAgIDAsICAgMTQ3LAorICAgICAgIDAsICAgMTY2LCAgIDE2OCwgICAxODcs
ICAgMTg2LCAgIDE4OSwgICAxNjcsICAgMTc4LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAg
ODIsICAgIDYxLCAgIDE0OSwgICAgIDAsICAgMTg4LCAgICAgMCwgICAgIDAsICAgMTc3LCAgIDE3
NSwKKyAgICAgICAwLCAgICAgMCwgICAxNjIsICAgICAwLCAgIDE5MCwgICAgIDAsICAgMTY3LCAg
ICAgMCwgICAxNjQsICAgMTgxLAorICAgICAxNjMsICAgICAwLCAgIDE5MSwgICAxODUsICAgMTc2
LCAgIDE3OSwgICAxODMKK307CisKKy8qIFlZREVGR09UT1tOVEVSTS1OVU1dLiAgKi8KK3N0YXRp
YyBjb25zdCB5eXR5cGVfaW50MTYgeXlkZWZnb3RvW10gPQoreworICAgICAgLTEsICAgMTk2LCAg
IDEwMCwgICAxMDEsICAgMTAyLCAgIDIyOSwgICAxMDMsICAgMTA0LCAgIDEwNSwgICAxMDYsCisg
ICAgIDEwNywgICAxMDgsICAgMTA5LCAgIDE0MiwgICAxMTEsICAgMTEyLCAgIDExMywgICAxMTQs
ICAgMTE1LCAgIDExNiwKKyAgICAgMTE3LCAgIDExOCwgICAxMTksICAgMTIwLCAgIDEyMSwgICAx
MjIsICAgMTQzLCAgIDE0NCwgICAyMTgsICAgMTQ1LAorICAgICAxMjQsICAgMTQ2LCAgIDE0Nywg
ICAgMzQsICAgIDM1LCAgICAzNiwgICAgODIsICAgIDY0LCAgICA2NSwgICAgODMsCisgICAgICAz
NywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAxMjUsICAgIDQ1
LCAgIDEzMCwKKyAgICAgIDc3LCAgIDEyOCwgICAxMjksICAgMTk3LCAgIDE5OCwgICAxNjYsICAg
MTQ5LCAgIDE1MCwgICAxNTEsICAgMTUyLAorICAgICAyMTIsICAgMjgwLCAgIDI5OSwgICAyNTQs
ICAgMjU1LCAgIDI1NiwgICAzMDAsICAgMTUzLCAgIDE1NCwgICAxNTUsCisgICAgIDI4OSwgICAy
NzksICAgMTU2LCAgIDI2MCwgICAyMDQsICAgMjU3LCAgIDI3NSwgICAyODYsICAgMjg3LCAgIDE1
NywKKyAgICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDU3Cit9OworCisvKiBZWVBBQ1RbU1RBVEUt
TlVNXSAtLSBJbmRleCBpbiBZWVRBQkxFIG9mIHRoZSBwb3J0aW9uIGRlc2NyaWJpbmcKKyAgIFNU
QVRFLU5VTS4gICovCisjZGVmaW5lIFlZUEFDVF9OSU5GIC0yNjEKK3N0YXRpYyBjb25zdCB5eXR5
cGVfaW50MTYgeXlwYWN0W10gPQoreworICAgIDEzMjcsICAgLTIwLCAgLTI2MSwgIC0yNjEsICAt
MjYxLCAgIDExMywgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsCisgICAgLTI2MSwgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwK
KyAgICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAtMTksICAtMjYxLCAgLTI2
MSwgIC0yNjEsICAtMjYxLAorICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAtNjEsICAgLTQwLCAg
IC0yOCwgICAgNzUsICAgIC03LCAgLTI2MSwgICAgMjQsCisgICAgMTM3MCwgIC0yNjEsICAxNDQ0
LCAgLTI2MSwgICAtMTEsICAtMjYxLCAgMTI4MywgIC0yNjEsICAtMjYxLCAgLTI2MSwKKyAgICAt
MjYxLCAgMTQ0NCwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAgIDYsICAtMjYxLCAgICA1NCwgIC0y
NjEsICAgIDg4LAorICAgICAgNjIsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgMTM3MCwg
ICAgNTksICAgIDkxLCAgLTI2MSwgICAgMzYsCisgICAgIC01MCwgIC0yNjEsICAtMjYxLCAgMTA1
MSwgIC0yNjEsICAtMjYxLCAgICA2MywgIDEzNzAsICAtMjYxLCAgIDI5MywKKyAgICAtMjYxLCAg
LTI2MSwgIC0yNjEsICAtMjYxLCAgICA5MSwgIDEzNzAsICAgLTEyLCAgLTI2MSwgICA4NTYsICAx
MDUxLAorICAgICAgNzcsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAxMDUxLCAgMTA1MSwgIDEwNTEs
ICAtMjYxLCAgLTI2MSwgIC0yNjEsCisgICAgLTI2MSwgIC0yNjEsICAgLTE0LCAgLTI2MSwgIC0y
NjEsICAtMjYxLCAgICA4NCwgICAtNDQsICAxMTE2LCAgICA5NSwKKyAgICAtMjYxLCAgMTA1MSwg
ICAgNTMsICAgICAzLCAgLTI2MSwgICAtMzYsICAgIDg5LCAgLTI2MSwgIC0yNjEsICAtMjYxLAor
ICAgICAxMDQsICAgMTA3LCAgIC00NSwgIC0yNjEsICAgIDk2LCAgLTI2MSwgIC0yNjEsICAgIDkx
LCAgMTE4NCwgIC0yNjEsCisgICAgMTM3MCwgICAgOTIsICAgIDkzLCAgLTI2MSwgICAgOTgsICAg
MTAxLCAgICA5NCwgICA5MjEsICAgMTA1LCAgIDEwMiwKKyAgICAtMjYxLCAgLTI2MSwgICAgNzIs
ICAtMjYxLCAgLTI2MSwgICAgIDksICAtMjYxLCAgIC02MSwgICAgNDIsICAtMjYxLAorICAgIC0y
NjEsICAtMjYxLCAgLTI2MSwgICAzNzYsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgIDEw
NiwgIC0yNjEsCisgICAgLTI2MSwgICA5ODYsICAxMDUxLCAgLTI2MSwgICAxMDMsICAtMjYxLCAg
LTI2MSwgIC0yNjEsICAtMjYxLCAgIC00MSwKKyAgICAtMjYxLCAgLTI2MSwgIDEwNTEsICAxNDA3
LCAgLTI2MSwgIC0yNjEsICAxMDUxLCAgIDExMCwgIC0yNjEsICAtMjYxLAorICAgIC0yNjEsICAx
MDUxLCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEw
NTEsCisgICAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAtMjYxLCAgIDEwOSwg
ICAgMjMsICAtMjYxLCAgLTI2MSwKKyAgICAtMjYxLCAgMTIyNywgIC0yNjEsICAtMjYxLCAgIDEx
MSwgIC0yNjEsICAxMDUxLCAgLTI2MSwgIC0yNjEsICAgIDI1LAorICAgIC0yNjEsICAtMjYxLCAg
IDQ1OSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgMTA1MSwgIDEwNTEsCisg
ICAgLTI2MSwgIC0yNjEsICAtMjYxLCAgMTA1MSwgIC0yNjEsICAgMTE0LCAgLTI2MSwgIC0yNjEs
ICAtMjYxLCAgIDExNSwKKyAgICAgMTEyLCAgICA3NywgICAxMTYsICAtMjYxLCAgLTI2MSwgIC0y
NjEsICAtMjYxLCAgLTI2MSwgICAgNTMsICAgIDUzLAorICAgIC0yNjEsICAtMjYxLCAgLTI2MSwg
IC0yNjEsICAgLTM2LCAgIC0zNiwgIC0yNjEsICAgMTA0LCAgIDEwNywgICAgNzYsCisgICAgMTA1
MSwgICAgOTEsICAtMjYxLCAgLTI2MSwgICAxNDUsICAgIDU0LCAgIDYyNSwgICA3MDgsICAgIC02
LCAgLTI2MSwKKyAgICAgNzkxLCAgIDQ1OSwgIC0yNjEsICAtMjYxLCAgIDExNywgIC0yNjEsICAt
MjYxLCAgMTA1MSwgICAxMjAsICAtMjYxLAorICAgICAxMjQsICAtMjYxLCAgLTI2MSwgIC0yNjEs
ICAtMjYxLCAgIDc5MSwgICAxMTEsICAgMTEyLCAgICA5MSwgICAxMjUsCisgICAgIDEyMiwgIC0y
NjEsICAtMjYxLCAgLTI2MSwgIDEwNTEsICAtMjYxLCAgIDExOCwgICAxMjgsICAgMTgwLCAgLTI2
MSwKKyAgICAgMTI2LCAgIDU0MiwgIC0yNjEsICAgIC01LCAgMTA1MSwgICA1NDIsICAgMTExLCAg
MTA1MSwgIC0yNjEsICAtMjYxLAorICAgIC0yNjEsICAgMTIzLCAgIDExMiwgIC0yNjEsICAtMjYx
LCAgLTI2MSwgIC0yNjEKK307CisKKy8qIFlZUEdPVE9bTlRFUk0tTlVNXS4gICovCitzdGF0aWMg
Y29uc3QgeXl0eXBlX2ludDE2IHl5cGdvdG9bXSA9Cit7CisgICAgLTI2MSwgICAtMjQsICAtMjYx
LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgIDM0LCAgLTI2MSwKKyAgICAt
MjYxLCAgLTI2MSwgIC0yNjEsICAgIDMyLCAgLTI2MSwgICAtMzMsICAtMjYxLCAgIC0yNywgICAt
MjYsICAtMjYxLAorICAgIC0yNjEsICAtMjYxLCAgICAxNCwgICAgMTYsICAgIDE4LCAgLTI2MSwg
ICAtNjYsICAgLTg3LCAgLTI2MSwgICAtOTIsCisgICAgIC04NSwgICAgMTEsICAgIDEyLCAgLTI2
MSwgIC0yNjEsICAtMjYxLCAgIDE0MSwgICAxNTAsICAgMTYxLCAgIDE0MywKKyAgICAtMjYxLCAg
LTI2MSwgIC0yMzEsICAgICA1LCAgIC0zMCwgICAyMjQsICAgLTE4LCAgICAgMCwgIC0yNjEsICAt
MjYxLAorICAgIC0yNjEsICAgMTAwLCAgLTExOSwgIC0yNjEsICAgLTE3LCAgLTE1NiwgICAtMjUs
ICAtMTQ1LCAgLTI0MywgIC0yNjEsCisgICAgLTI2MSwgIC0yNjEsICAgLTY0LCAgLTI2MCwgIC0y
NjEsICAtMjYxLCAgIC01MiwgICAgMjEsICAgLTIyLCAgLTI2MSwKKyAgICAtMjYxLCAgIC0zOSwg
IC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLAor
ICAgIC0yNjEsICAgMTkxLCAgLTI2MSwgIC0yNjEKK307CisKKy8qIFlZVEFCTEVbWVlQQUNUW1NU
QVRFLU5VTV1dLiAgV2hhdCB0byBkbyBpbiBzdGF0ZSBTVEFURS1OVU0uICBJZgorICAgcG9zaXRp
dmUsIHNoaWZ0IHRoYXQgdG9rZW4uICBJZiBuZWdhdGl2ZSwgcmVkdWNlIHRoZSBydWxlIHdoaWNo
CisgICBudW1iZXIgaXMgdGhlIG9wcG9zaXRlLiAgSWYgWVlUQUJMRV9OSU5GLCBzeW50YXggZXJy
b3IuICAqLworI2RlZmluZSBZWVRBQkxFX05JTkYgLTE2Ngorc3RhdGljIGNvbnN0IHl5dHlwZV9p
bnQxNiB5eXRhYmxlW10gPQoreworICAgICAgNDQsICAgIDU1LCAgIDE2NSwgICAxNjQsICAgMTY5
LCAgICA4MCwgICAyMjYsICAgMTIzLCAgIDIyMiwgICAyMDAsCisgICAgICA3MSwgICAgMzIsICAg
IDMzLCAgIDI3MiwgICAxOTMsICAgIDcwLCAgIDI4OCwgICAgNDksICAgMTg1LCAgIDE4NiwKKyAg
ICAgIDU2LCAgIDE3OCwgICAxMjMsICAgIDg4LCAgICA3MiwgICAgNTAsICAgIDUyLCAgICA1Mywg
ICAxNzUsICAgMjc4LAorICAgICAgODksICAgMjI4LCAgICA1OCwgICAgNzYsICAgMTc2LCAgICA4
NCwgICAzMDQsICAgMjE5LCAgIDE3MCwgICAxNzEsCisgICAgICA0NCwgICAgNjYsICAgIDQ0LCAg
ICA4NiwgICAyNzgsICAgMjA5LCAgICA0NCwgICAxMjcsICAgMjk4LCAgIDE5NCwKKyAgICAgIDU5
LCAgICA0NCwgICAyOTgsICAgMTg3LCAgIDE4OCwgICAgODQsICAgIDU0LCAgICAzMiwgICAgMzMs
ICAgMTcyLAorICAgICAxNTgsICAgMTYxLCAgICA3MywgICAxNzMsICAgIDY2LCAgICA0NCwgICAy
NzYsICAgMzAxLCAgIDE2MiwgICAgNjksCisgICAgICA1MywgICAgNjcsICAgMjE5LCAgIDIxOSwg
ICAgNjgsICAgMTY1LCAgIDIyNSwgICAgNDQsICAgIDYwLCAgIDE0OCwKKyAgICAgMjMwLCAgICA3
OCwgICAyMDAsICAgICA2LCAgICAgNywgICAgNDQsICAgMTgzLCAgIDIxOSwgICAxODQsICAgMjM1
LAorICAgICAyMjAsICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgIDEyMywgICAgIDYsICAg
ICA3LCAgIDEyNywgICAgNDksCisgICAgIDEyNywgICAyNTEsICAgMjQ5LCAgIDIxOSwgICAyNTIs
ICAgMTEwLCAgIDI1OSwgICAgODcsICAgIDYxLCAgICA2MiwKKyAgICAgIDYzLCAgICAyMywgICAg
MjQsICAgLTI3LCAgIDI1OCwgICAgNzMsICAgMjIyLCAgICAgMiwgICAgIDMsICAgICA0LAorICAg
ICAxMTAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDIzLCAgICAyNCwgICAxNjcsICAgMTY4LCAg
ICA0NCwgICAgNzksCisgICAgICA0NCwgICAyNjIsICAgMjYzLCAgIDIxMywgICAyMTQsICAgMjE1
LCAgICA1MiwgICAgNTMsICAgMjY0LCAgIDE4MSwKKyAgICAgMTgyLCAgIDMwNSwgICAyMTYsICAg
MTgwLCAgIDEyNiwgICAxODksICAgMTkwLCAgIC03NiwgICAtMjgsICAgMjMzLAorICAgICAyMzgs
ICAgMjM5LCAgIDIxNywgICAxNDgsICAgMjE5LCAgIDI2NywgICAxNzQsICAgMTIzLCAgIDI0MCwg
ICAyNDEsCisgICAgIDI0MiwgICAyNDMsICAgMTkxLCAgIDI0NCwgICAyNDUsICAgMjY4LCAgIDE3
OSwgICAxOTIsICAgMjc3LCAgIDIwNSwKKyAgICAgMTk1LCAgIDEyNywgICAyMDYsICAgMjAyLCAg
IDIwMywgICAyMDcsICAgMjEwLCAgIDIyNywgICAyMTEsICAgMjIzLAorICAgICAyODIsICAtMTE3
LCAgIDI1MCwgICAyNzcsICAgMTIzLCAgIDI3MCwgIC0xNjUsICAtMTM4LCAgIDI2NSwgICAyNjYs
CisgICAgIDIxOSwgICAyODEsICAgMjkzLCAgIDExMCwgICAyODMsICAgMjg0LCAgIDI5NiwgICAy
OTEsICAgMjkyLCAgIDI5NCwKKyAgICAgMjk1LCAgICA0NCwgICAzMDIsICAgMjcxLCAgIDMwNiwg
ICAyNDYsICAgMjk3LCAgIDIzNCwgICAyNDcsICAgIDgxLAorICAgICAxNjUsICAgMjQ4LCAgIDE0
OCwgICAyMzYsICAgMjM3LCAgIDExMCwgICAxMTAsICAgMTEwLCAgIDExMCwgICAxMTAsCisgICAg
IDExMCwgICAxMTAsICAgMTEwLCAgIDExMCwgICAxMTAsICAgMTEwLCAgIDE1OSwgICAgODUsICAg
MTYwLCAgICA1MSwKKyAgICAgMjAxLCAgIDMwMywgICAyNzMsICAgMjYxLCAgIDI2OSwgICAyNzQs
ICAgMjg1LCAgICA3NSwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAyOTAsICAgMTEwLCAgIDE0OCwgICAxNDgsICAgICAwLCAg
ICAgMCwKKyAgICAgMTQ4LCAgIDE0OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgIDE0OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAs
ICAgMTEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwK
KyAgICAgICAwLCAgIDE0OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDgsICAgICAxLCAgICAg
MiwgICAgIDMsICAgICA0LAorICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAg
ICAxMCwgICAxMzEsICAgMTMyLCAgIDEzMywgICAgIDAsCisgICAgIDEzNCwgICAxMzUsICAgMTM2
LCAgIDEzNywgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwKKyAgICAg
IDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAg
IDAsICAgIDIzLAorICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAxMzgsICAgIDI3LCAgICAyOCwg
ICAgMjksICAgIDMwLCAgICA5MCwgICAgMzEsCisgICAgICA5MSwgICAgOTIsICAgIDkzLCAgICAg
MCwgICAgIDAsICAgIDk0LCAgICA5NSwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAs
ICAgICAwLCAgIDEzOSwgICAxNDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAx
NDEsICAgIDk3LCAgICA5OCwgICAgIDAsICAgIDk5LCAgICAgMSwKKyAgICAgICAyLCAgICAgMywg
ICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgMTMxLAor
ICAgICAxMzIsICAgMTMzLCAgICAgMCwgICAxMzQsICAgMTM1LCAgIDEzNiwgICAxMzcsICAgIDEx
LCAgICAxMiwgICAgMTMsCisgICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAg
IDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgMjMs
ICAgIDI0LCAgICAyNSwgICAgMjYsICAgMTM4LCAgICAyNywgICAgMjgsICAgIDI5LAorICAgICAg
MzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICA5
NCwgICAgOTUsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAg
MTM5LCAgIDIyMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQxLCAgICA5NywgICAg
OTgsCisgICAgICAgMCwgICAgOTksICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgNSwg
ICAgIDYsICAgICA3LCAgICAgOCwKKyAgICAgICA5LCAgICAxMCwgICAxMzEsICAgMTMyLCAgIDEz
MywgICAgIDAsICAgMTM0LCAgIDEzNSwgICAxMzYsICAgMTM3LAorICAgICAgMTEsICAgIDEyLCAg
ICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsCisg
ICAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAyNCwgICAgMjUs
ICAgIDI2LCAgIDEzOCwKKyAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICA5MCwgICAg
MzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLAorICAgICAgIDAsICAgIDk0LCAgICA5NSwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwKKyAgICAgIDk2LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEzOSwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAxNDEsICAgIDk3LCAgICA5OCwgICAgIDAs
ICAgIDk5LCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsCisgICAgICAgNiwgICAg
IDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgMTMxLCAgIDEzMiwgICAxMzMsICAgICAwLCAgIDEz
NCwKKyAgICAgMTM1LCAgIDEzNiwgICAxMzcsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAg
ICAxNSwgICAgMTYsICAgIDE3LAorICAgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIy
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywgICAgMjQsCisgICAgICAyNSwgICAgMjYsICAg
MTM4LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwKKyAg
ICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAg
ICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNzksICAgICAwLCAgICAgMCwKKyAgICAgICAw
LCAgICAgMCwgICAgIDAsICAgMTQxLCAgICA5NywgICAgOTgsICAgICAwLCAgICA5OSwgICAgIDEs
ICAgICAyLAorICAgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAg
IDksICAgIDEwLCAgIDEzMSwgICAxMzIsCisgICAgIDEzMywgICAgIDAsICAgMTM0LCAgIDEzNSwg
ICAxMzYsICAgMTM3LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwKKyAgICAgIDE1LCAgICAx
NiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAw
LAorICAgICAgIDAsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgIDEzOCwgICAgMjcsICAg
IDI4LCAgICAyOSwgICAgMzAsCisgICAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMs
ICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAg
ICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgIDE0MSwgICAgOTcsICAgIDk4LCAgICAgMCwKKyAgICAgIDk5LCAgICAgMSwgICAgIDIsICAg
ICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAorICAgICAgMTAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgMTEsCisgICAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwKKyAgICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LAorICAgICAgMjgsICAgIDI5
LCAgICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwgICAgOTIsICAgIDkzLCAgICAgMCwgICAgIDAs
CisgICAgICA5NCwgICAgOTUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk2LAorICAgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDEsCisgICAg
ICA5NywgICAgOTgsICAgICAwLCAgICA5OSwgICAgNjAsICAgICAyLCAgICAgMywgICAgIDQsICAg
ICAwLCAgICAgNiwKKyAgICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAxMSwgICAg
MTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCisgICAgICAxOSwg
ICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsICAgIDI0LCAg
ICAyNSwKKyAgICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDkw
LCAgICAzMSwgICAgOTEsICAgIDkyLAorICAgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAg
IDk1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwK
KyAgICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA4LCAgICAg
OSwgICAgMTAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTcsICAgIDk4LCAg
ICAgMCwgICAgOTksICAgIDExLCAgICAxMiwgICAgMTMsCisgICAgICAxNCwgICAgMTUsICAgIDE2
LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwKKyAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAg
MjgsICAgIDI5LAorICAgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLCAgICA5Mywg
ICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAsICAg
ICAwLAorICAgICAxNjMsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICA5NywgICAgOTgsCisgICAgICAgMCwgICAgOTksICAgIDExLCAgICAxMiwgICAg
MTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwg
ICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI1LAor
ICAgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAsICAgIDMx
LCAgICA5MSwgICAgOTIsCisgICAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAg
IDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAgICAx
MCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgMjA4LCAgICA5NywgICAgOTgsICAgICAwLCAg
ICA5OSwgICAgMTEsICAgIDEyLCAgICAxMywKKyAgICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3
LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLAorICAgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAg
MjksCisgICAgICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwgICAgOTIsICAgIDkzLCAgICAgMCwg
ICAgIDAsICAgIDk0LCAgICA5NSwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAsCisg
ICAgIDIyNCwgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgIDk3LCAgICA5OCwKKyAgICAgICAwLCAgICA5OSwgICAgMTEsICAgIDEyLCAgICAxMywgICAg
MTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwg
ICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjUsCisgICAgICAy
NiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkx
LCAgICA5MiwKKyAgICAgIDkzLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICA5NSwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAg
IDAsICAgIDk2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAg
MCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk3LCAgICA5OCwgICAgIDAsICAgIDk5LCAg
ICAxMSwgICAgMTIsICAgIDEzLAorICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgMjUsICAgMTc3LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwKKyAg
ICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwg
ICAgOTQsICAgIDk1LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTYsICAgICAyLCAgICAgMywKKyAgICAgICA0
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgOTcs
ICAgIDk4LAorICAgICAgIDAsICAgIDk5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwgICAg
MTIsICAgIDEzLCAgICAxNCwgICAgMTUsCisgICAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwg
ICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAg
MCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgICAw
LAorICAgICAgMzEsICAgICAyLCAgICAgMywgICAgIDQsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICA4LCAgICAgOSwgICAgMTAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwKKyAgICAgIDEzLCAgICAxNCwgICAg
MTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLAorICAg
ICAxOTksICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwgICAgMjYsICAgICAwLCAg
ICAyNywgICAgMjgsCisgICAgICAyOSwgICAgMzAsICAgICAwLCAgICAzMSwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAg
IDc0LCAgICAgMCwgICAgIDAsICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LAorICAgICAgIDUs
ICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgIDI1MywgICAgMTEsICAgIDEyLCAgICAx
MywgICAgMTQsICAgIDE1LCAgICAxNiwKKyAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAg
ICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLAorICAgICAgMjQsICAgIDI1
LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAgMCwgICAgMzEs
CisgICAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAg
IDgsICAgICA5LCAgICAxMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgMTEsICAgIDEyLAorICAgICAgMTMsICAgIDE0LCAgICAx
NSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCisgICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgIDAsICAg
IDI3LCAgICAyOCwKKyAgICAgIDI5LCAgICAzMCwgICAgIDAsICAgIDMxLCAgICAgMiwgICAgIDMs
ICAgICA0LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDgsICAgICA5LCAgICAxMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwg
ICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAg
ICAxOSwKKyAgICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgMjUsICAgIDI2LAorICAgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAg
IDMwLCAgICAgMCwgICAgMzEsICAgICA4LCAgICAgOSwgICAgMTAsCisgICAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwK
KyAgICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAy
MCwgICAgMjEsICAgIDIyLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsCisgICAgICAyOSwgICAgMzAsICAgMjMx
LCAgIDIzMiwgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAg
MTQsICAgIDE1LAorICAgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwg
ICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgIDI1LCAgICAy
NiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAgMCwKKyAgICAgIDMxCit9
OworCisjZGVmaW5lIHl5cGFjdF92YWx1ZV9pc19kZWZhdWx0KFl5c3RhdGUpIFwKKyAgKCEhKChZ
eXN0YXRlKSA9PSAoLTI2MSkpKQorCisjZGVmaW5lIHl5dGFibGVfdmFsdWVfaXNfZXJyb3IoWXl0
YWJsZV92YWx1ZSkgXAorICBZWUlEICgwKQorCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5
Y2hlY2tbXSA9Cit7CisgICAgICAgMCwgICAgMjUsICAgIDg5LCAgICA4OCwgICAgOTYsICAgIDU3
LCAgIDE2MiwgICAgNzMsICAgMTUzLCAgIDEyOCwKKyAgICAgIDQwLCAgICAgMCwgICAgIDAsICAg
MjU2LCAgICA1OSwgICAgMzksICAgMjc2LCAgICAzNywgICAgNTQsICAgIDU1LAorICAgICAgODEs
ICAgMTA4LCAgICA4OCwgICAgNzMsICAgIDQyLCAgICA0NSwgICAgNDUsICAgIDQ2LCAgICA3Miwg
ICAyNjAsCisgICAgICA4MCwgICAgNzIsICAgIDcyLCAgICA1MSwgICAgNzgsICAgIDY1LCAgIDI5
NiwgICAgNzgsICAgIDUyLCAgICA1MywKKyAgICAgIDQwLCAgICAzNiwgICAgNDIsICAgIDY3LCAg
IDI3NSwgICAxMzcsICAgIDQ2LCAgICA3NywgICAyOTEsICAgIDk0LAorICAgICAgNzgsICAgIDUx
LCAgIDI5NSwgICAgODksICAgIDkwLCAgICA4NSwgICAgNzUsICAgIDQ2LCAgICA0NiwgICAgNzMs
CisgICAgICA4NCwgICAgNzMsICAgIDczLCAgICA3NywgICAgNTksICAgIDY1LCAgICA3MiwgICAg
NzIsICAgIDgwLCAgICA0NSwKKyAgICAgIDQ2LCAgICA3OCwgICAgNzgsICAgIDc4LCAgICA4MSwg
ICAxNjIsICAgMTYxLCAgICA3NywgICAgIDMsICAgIDc5LAorICAgICAxNzIsICAgIDc1LCAgIDIw
MSwgICAgIDgsICAgICA5LCAgICA4NSwgICAgODMsICAgIDc4LCAgICA4NSwgICAxNzYsCisgICAg
ICA4MSwgICAgIDMsICAgIDMzLCAgICAzNCwgICAgMzUsICAgMTYxLCAgICAgOCwgICAgIDksICAg
MTI4LCAgICAzNywKKyAgICAgMTMwLCAgICA3OCwgICAxOTQsICAgIDc4LCAgICA4MSwgICAgNzMs
ICAgIDgxLCAgICA3MSwgICAgMzMsICAgIDM0LAorICAgICAgMzUsICAgIDM2LCAgICAzNywgICAg
NzEsICAgMjA2LCAgICA3MywgICAyNjEsICAgICA0LCAgICAgNSwgICAgIDYsCisgICAgICA4OCwg
ICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICA5NCwgICAgOTUsICAgMTI4LCAg
ICA3NSwKKyAgICAgMTMwLCAgIDIxOCwgICAyMTksICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDQ1
LCAgICA0NiwgICAyMjMsICAgIDg2LAorICAgICAgODcsICAgMjk3LCAgICA3MCwgICAxMTEsICAg
IDgxLCAgICA1NiwgICAgNTcsICAgIDcyLCAgICA3MSwgICAxNzMsCisgICAgIDE4MywgICAxODQs
ICAgIDgwLCAgIDE1MywgICAgNzgsICAgIDc5LCAgICA3MiwgICAyMjMsICAgMTg1LCAgIDE4NiwK
KyAgICAgMTg3LCAgIDE4OCwgICAgNTgsICAgMTg5LCAgIDE5MCwgICAyNTAsICAgIDcxLCAgICA2
MCwgICAyNjAsICAgIDcxLAorICAgICAgNzQsICAgMjAxLCAgICA3MSwgICAgODEsICAgIDgxLCAg
ICA4MSwgICAgNzEsICAgIDc0LCAgICA3NiwgICAgNzMsCisgICAgIDI2NywgICAgNzEsICAgIDcz
LCAgIDI3NSwgICAyNTAsICAgIDQwLCAgICA3NSwgICAgNzEsICAgIDc0LCAgICA3NCwKKyAgICAg
IDc4LCAgICA3NCwgICAyODQsICAgMTYxLCAgICA3NCwgICAgNzEsICAgIDE2LCAgICA3MiwgICAg
NzYsICAgIDgxLAorICAgICAgNzIsICAgMjAxLCAgIDI5NCwgICAyNTUsICAgIDgxLCAgIDE5MSwg
ICAgODAsICAgMTczLCAgIDE5MiwgICAgNTksCisgICAgIDI5NywgICAxOTMsICAgMjEyLCAgIDE4
MSwgICAxODIsICAgMTgzLCAgIDE4NCwgICAxODUsICAgMTg2LCAgIDE4NywKKyAgICAgMTg4LCAg
IDE4OSwgICAxOTAsICAgMTkxLCAgIDE5MiwgICAxOTMsICAgIDg1LCAgICA2NiwgICAgODUsICAg
ICA1LAorICAgICAxMzAsICAgMjk1LCAgIDI1NywgICAyMTIsICAgMjUxLCAgIDI1NywgICAyNzUs
ICAgIDQ2LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgIDI3OCwgICAyMjMsICAgMjU2LCAgIDI1NywgICAgLTEsICAgIC0xLAor
ICAgICAyNjAsICAgMjYxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
Mjc1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAyNTAs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAg
LTEsICAgMjkxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDI5NSwgICAgIDMsICAgICA0LCAgICAg
NSwgICAgIDYsCisgICAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAg
ICAxMywgICAgMTQsICAgIDE1LCAgICAtMSwKKyAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIw
LCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAorICAgICAgMjcsICAg
IDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
MzYsCisgICAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0Mywg
ICAgNDQsICAgIDQ1LCAgICA0NiwKKyAgICAgIDQ3LCAgICA0OCwgICAgNDksICAgIC0xLCAgICAt
MSwgICAgNTIsICAgIDUzLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisg
ICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDc1LCAgICA3NiwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MSwgICAg
ODIsICAgIDgzLCAgICAtMSwgICAgODUsICAgICAzLAorICAgICAgIDQsICAgICA1LCAgICAgNiwg
ICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsCisgICAgICAx
NCwgICAgMTUsICAgIC0xLCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIy
LCAgICAyMywKKyAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAg
IDMwLCAgICAzMSwgICAgMzIsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAzNiwgICAgMzcs
ICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsCisgICAgICA0NCwgICAg
NDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1
MywKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgNzUsICAg
IDc2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODEsICAgIDgyLCAgICA4MywKKyAg
ICAgIC0xLCAgICA4NSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwg
ICAgIDksICAgIDEwLAorICAgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAt
MSwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsCisgICAgICAyMSwgICAgMjIsICAgIDIzLCAg
ICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKKyAgICAgIDMx
LCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzks
ICAgIDQwLAorICAgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAg
NDcsICAgIDQ4LCAgICA0OSwgICAgLTEsCisgICAgICAtMSwgICAgNTIsICAgIDUzLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LAorICAgICAgNzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc1LCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsCisgICAgICA4MSwgICAgODIsICAgIDgzLCAgICAtMSwgICAgODUs
ICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywKKyAgICAgICA4LCAgICAgOSwgICAg
MTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgLTEsICAgIDE3LAorICAg
ICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAg
ICAyNiwgICAgMjcsCisgICAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywKKyAgICAgIDM4LCAgICAzOSwgICAgNDAsICAg
IDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LAorICAgICAgNDgs
ICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICA3NSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgODEsICAgIDgyLCAgICA4MywgICAgLTEsICAgIDg1LCAgICAgMywgICAgIDQs
CisgICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAg
MTIsICAgIDEzLCAgICAxNCwKKyAgICAgIDE1LCAgICAtMSwgICAgMTcsICAgIDE4LCAgICAxOSwg
ICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LAorICAgICAgMjUsICAgIDI2LCAgICAy
NywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsCisgICAg
ICAtMSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAg
IDQzLCAgICA0NCwKKyAgICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgLTEs
ICAgIC0xLCAgICA1MiwgICAgNTMsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLCAg
ICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgx
LCAgICA4MiwgICAgODMsICAgIC0xLAorICAgICAgODUsICAgICAzLCAgICAgNCwgICAgIDUsICAg
ICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAxMiwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwK
KyAgICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAy
OSwgICAgMzAsICAgIDMxLAorICAgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAg
ICAzNywgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsCisgICAgICA0MiwgICAgNDMsICAgIDQ0
LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIC0xLCAgICAtMSwKKyAgICAg
IDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MSwKKyAgICAgIDgyLCAg
ICA4MywgICAgLTEsICAgIDg1LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgLTEsICAg
ICA4LAorICAgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIDIxLCAgICAyMiwgICAg
MjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwKKyAgICAgIDI5LCAgICAzMCwg
ICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzNiwgICAgMzcsICAgIDM4LAor
ICAgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2
LCAgICA0NywgICAgNDgsCisgICAgICA0OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAg
LTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTAsICAgIDExLCAgICAx
MiwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MiwgICAgODMsICAgIC0xLCAg
ICA4NSwgICAgMjEsICAgIDIyLCAgICAyMywKKyAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3
LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLAorICAgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAg
NDMsCisgICAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwg
ICAgLTEsICAgIDUyLCAgICA1MywKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsCisg
ICAgICA3NCwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDgyLCAgICA4MywKKyAgICAgIC0xLCAgICA4NSwgICAgMjEsICAgIDIyLCAgICAyMywgICAg
MjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LAorICAgICAgMjksICAgIDMwLCAgICAzMSwg
ICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsCisgICAgICAz
OSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3
LCAgICA0OCwKKyAgICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAg
LTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAt
MSwKKyAgICAgIC0xLCAgICAtMSwgICAgODEsICAgIDgyLCAgICA4MywgICAgLTEsICAgIDg1LCAg
ICAyMSwgICAgMjIsICAgIDIzLAorICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4
LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywKKyAg
ICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIC0xLCAgICAtMSwg
ICAgNTIsICAgIDUzLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAtMSwKKyAgICAgIDc0
LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODIs
ICAgIDgzLAorICAgICAgLTEsICAgIDg1LCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAg
MjUsICAgIDI2LCAgICAyNywgICAgMjgsCisgICAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwKKyAgICAgIDM5LCAgICAt
MSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4
LAorICAgICAgNDksICAgIC0xLCAgICAtMSwgICAgNTIsICAgIDUzLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAg
NzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLAorICAg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgODIsICAgIDgzLCAgICAtMSwgICAgODUsICAgIDIxLCAg
ICAyMiwgICAgMjMsCisgICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5
LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQzLAorICAgICAgNDQs
ICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIC0xLCAgICA1Miwg
ICAgNTMsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICA3MSwgICAgIDQsICAgICA1LAorICAgICAgIDYsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAgICA4MiwgICAgODMs
CisgICAgICAtMSwgICAgODUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIxLCAgICAyMiwgICAg
MjMsICAgIDI0LCAgICAyNSwKKyAgICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwg
ICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAz
OCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgLTEsCisgICAg
ICA0NiwgICAgIDQsICAgICA1LCAgICAgNiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTAsICAg
IDExLCAgICAxMiwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgMjEsICAgIDIyLAorICAgICAgMjMsICAgIDI0LCAgICAyNSwgICAg
MjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsCisgICAgICA3Niwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAg
ICA0MiwKKyAgICAgIDQzLCAgICA0NCwgICAgLTEsICAgIDQ2LCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDAsICAg
IC0xLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsCisgICAgICAgNywgICAgIDgs
ICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc2LCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAy
NCwgICAgMjUsICAgIDI2LAorICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAg
ICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsCisgICAgICAzNywgICAgMzgsICAgIDM5
LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIC0xLCAgICA0NiwKKyAgICAg
ICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAg
MTEsICAgIDEyLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsCisgICAgICAyMywgICAgMjQsICAgIDI1LCAgICAy
NiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwKKyAgICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAg
IDQyLAorICAgICAgNDMsICAgIDQ0LCAgICAtMSwgICAgNDYsICAgICA0LCAgICAgNSwgICAgIDYs
ICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAyMSwg
ICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LAor
ICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAzOCwgICAgMzksCisgICAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAg
IC0xLCAgICA0NiwgICAgMTAsICAgIDExLCAgICAxMiwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjEsICAgIDIyLAorICAgICAg
MjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAz
MSwgICAgMzIsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAg
ICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwKKyAgICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2
LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAg
MjUsCisgICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwg
ICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAt
MSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIC0xLAorICAgICAgNDYKK307CisKKy8q
IFlZU1RPU1tTVEFURS1OVU1dIC0tIFRoZSAoaW50ZXJuYWwgbnVtYmVyIG9mIHRoZSkgYWNjZXNz
aW5nCisgICBzeW1ib2wgb2Ygc3RhdGUgU1RBVEUtTlVNLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5
cGVfdWludDggeXlzdG9zW10gPQoreworICAgICAgIDAsICAgICAzLCAgICAgNCwgICAgIDUsICAg
ICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAxMiwgICAgMjEs
ICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwK
KyAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0
MSwgICAgNDIsICAgIDQzLAorICAgICAgNDQsICAgIDQ2LCAgIDEyNiwgICAxMjcsICAgMTI4LCAg
IDEyOSwgICAxMzAsICAgMTM1LCAgIDEzNiwgICAxMzcsCisgICAgIDEzOCwgICAxMzksICAgMTQw
LCAgIDE0MSwgICAxNDIsICAgMTQzLCAgIDE3NSwgICAxNzYsICAgMTc3LCAgICAzNywKKyAgICAg
IDQ1LCAgIDE0MCwgICAgNDUsICAgIDQ2LCAgICA3NSwgICAgOTYsICAgIDgxLCAgIDE3OCwgICAg
NzIsICAgIDc4LAorICAgICAgIDMsICAgIDMzLCAgICAzNCwgICAgMzUsICAgMTMyLCAgIDEzMywg
ICAxMzgsICAgIDc4LCAgICA4MSwgICAgNDUsCisgICAgICA5NiwgICAxMzksICAgMTQxLCAgICA3
MywgICAgIDAsICAgMTc2LCAgIDE0MSwgICAxNDUsICAgIDc1LCAgICA3NSwKKyAgICAgMTYxLCAg
IDEzMiwgICAxMzEsICAgMTM0LCAgIDEzOSwgICAxMzMsICAgIDk2LCAgICA3MSwgICAgNzMsICAg
IDgwLAorICAgICAgNDUsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUyLCAgICA1MywgICAgNzEs
ICAgIDgyLCAgICA4MywgICAgODUsCisgICAgICA5NywgICAgOTgsICAgIDk5LCAgIDEwMSwgICAx
MDIsICAgMTAzLCAgIDEwNCwgICAxMDUsICAgMTA2LCAgIDEwNywKKyAgICAgMTA4LCAgIDEwOSwg
ICAxMTAsICAgMTExLCAgIDExMiwgICAxMTMsICAgMTE0LCAgIDExNSwgICAxMTYsICAgMTE3LAor
ICAgICAxMTgsICAgMTE5LCAgIDEyMCwgICAxMjEsICAgMTI1LCAgIDE0MiwgICAgODEsICAgMTM5
LCAgIDE0NiwgICAxNDcsCisgICAgIDE0NCwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTcsICAg
IDE4LCAgICAxOSwgICAgMjAsICAgIDQwLCAgICA3NSwKKyAgICAgIDc2LCAgICA4MSwgICAxMDgs
ICAgMTIxLCAgIDEyMiwgICAxMjQsICAgMTI2LCAgIDEyNywgICAxNDIsICAgMTUxLAorICAgICAx
NTIsICAgMTUzLCAgIDE1NCwgICAxNjIsICAgMTYzLCAgIDE2NCwgICAxNjcsICAgMTc0LCAgICA5
NiwgICAxMzEsCisgICAgIDEzNCwgICAgNzMsICAgIDgwLCAgICA3NCwgICAxMjUsICAgMTIyLCAg
IDE1MCwgICAxMDgsICAgMTA4LCAgIDEyNCwKKyAgICAgIDUyLCAgICA1MywgICAgNzMsICAgIDc3
LCAgICA3MiwgICAgNzIsICAgIDc4LCAgICAzOSwgICAxMjIsICAgIDcxLAorICAgICAxMDgsICAg
IDg2LCAgICA4NywgICAgODMsICAgIDg1LCAgICA1NCwgICAgNTUsICAgIDg5LCAgICA5MCwgICAg
NTYsCisgICAgICA1NywgICAgNTgsICAgIDYwLCAgICA1OSwgICAgOTQsICAgIDc0LCAgICA5Niwg
ICAxNDgsICAgMTQ5LCAgICA3NiwKKyAgICAgMTQ3LCAgIDE0NiwgICAgODEsICAgIDgxLCAgIDE2
OSwgICAgNzEsICAgIDcxLCAgICA4MSwgICAgODEsICAgMTI0LAorICAgICAgNzEsICAgIDc2LCAg
IDE1NSwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNzAsICAgIDgwLCAgIDEyMywgICAgNzgsCisg
ICAgICA4MSwgICAgNzYsICAgMTUyLCAgICA3MywgICAgNzQsICAgMTI1LCAgIDE1MCwgICAgNzQs
ICAgIDcyLCAgIDEwMCwKKyAgICAgMTI0LCAgICA0NSwgICAgNDYsICAgIDk2LCAgIDEwMywgICAx
MjIsICAgMTA4LCAgIDEwOCwgICAxMTAsICAgMTEwLAorICAgICAxMTIsICAgMTEyLCAgIDExMiwg
ICAxMTIsICAgMTEzLCAgIDExMywgICAxMTcsICAgMTE4LCAgIDExOSwgICAxMjQsCisgICAgICA3
MywgICAgNzgsICAgIDgxLCAgICA3NiwgICAxNTgsICAgMTU5LCAgIDE2MCwgICAxNzAsICAgMTI0
LCAgICA4MSwKKyAgICAgMTY4LCAgIDE2MiwgICAxMjIsICAgMTIyLCAgIDEyNSwgICAgNzQsICAg
IDc0LCAgICA3OSwgICAxMjUsICAgMTQ5LAorICAgICAgNDAsICAgMTYxLCAgIDE1MywgICAxNTEs
ICAgMTYzLCAgIDE3MSwgICAgNzIsICAgMTI0LCAgIDEzNywgICAxNjYsCisgICAgIDE1NiwgICAg
NzQsICAgMTIyLCAgICA3NCwgICAgNzEsICAgMTY2LCAgIDE3MiwgICAxNzMsICAgMTU4LCAgIDE2
NSwKKyAgICAgIDk2LCAgICA3MiwgICAgNzYsICAgMTI0LCAgICA4MSwgICAgNzIsICAgIDE2LCAg
ICA4MCwgICAxNTMsICAgMTU3LAorICAgICAxNjEsICAgIDcyLCAgIDEyNCwgICAxNTcsICAgMTU4
LCAgIDE1MCwgICAgODEKK307CisKKyNkZWZpbmUgeXllcnJvawkJKHl5ZXJyc3RhdHVzID0gMCkK
KyNkZWZpbmUgeXljbGVhcmluCSh5eWNoYXIgPSBZWUVNUFRZKQorI2RlZmluZSBZWUVNUFRZCQko
LTIpCisjZGVmaW5lIFlZRU9GCQkwCisKKyNkZWZpbmUgWVlBQ0NFUFQJZ290byB5eWFjY2VwdGxh
YgorI2RlZmluZSBZWUFCT1JUCQlnb3RvIHl5YWJvcnRsYWIKKyNkZWZpbmUgWVlFUlJPUgkJZ290
byB5eWVycm9ybGFiCisKKworLyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3Iu
ICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseQorICAgdG8gZWFzZSB0aGUgdHJhbnNpdGlv
biB0byB0aGUgbmV3IG1lYW5pbmcgb2YgWVlFUlJPUiwgZm9yIEdDQy4KKyAgIE9uY2UgR0NDIHZl
cnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJzaW9uIDEsIHRoaXMgY2FuIGdvLiAgSG93ZXZlciwK
KyAgIFlZRkFJTCBhcHBlYXJzIHRvIGJlIGluIHVzZS4gIE5ldmVydGhlbGVzcywgaXQgaXMgZm9y
bWFsbHkgZGVwcmVjYXRlZAorICAgaW4gQmlzb24gMi40LjIncyBORVdTIGVudHJ5LCB3aGVyZSBh
IHBsYW4gdG8gcGhhc2UgaXQgb3V0IGlzCisgICBkaXNjdXNzZWQuICAqLworCisjZGVmaW5lIFlZ
RkFJTAkJZ290byB5eWVycmxhYgorI2lmIGRlZmluZWQgWVlGQUlMCisgIC8qIFRoaXMgaXMgaGVy
ZSB0byBzdXBwcmVzcyB3YXJuaW5ncyBmcm9tIHRoZSBHQ0MgY3BwJ3MKKyAgICAgLVd1bnVzZWQt
bWFjcm9zLiAgTm9ybWFsbHkgd2UgZG9uJ3Qgd29ycnkgYWJvdXQgdGhhdCB3YXJuaW5nLCBidXQK
KyAgICAgc29tZSB1c2VycyBkbywgYW5kIHdlIHdhbnQgdG8gbWFrZSBpdCBlYXN5IGZvciB1c2Vy
cyB0byByZW1vdmUKKyAgICAgWVlGQUlMIHVzZXMsIHdoaWNoIHdpbGwgcHJvZHVjZSB3YXJuaW5n
cyBmcm9tIEJpc29uIDIuNS4gICovCisjZW5kaWYKKworI2RlZmluZSBZWVJFQ09WRVJJTkcoKSAg
KCEheXllcnJzdGF0dXMpCisKKyNkZWZpbmUgWVlCQUNLVVAoVG9rZW4sIFZhbHVlKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCitkbyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAoeXljaGFyID09IFlZ
RU1QVFkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICB5eWNoYXIgPSAoVG9rZW4pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgeXlsdmFsID0gKFZhbHVlKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIFlZUE9QU1RBQ0sgKHl5bGVuKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB5eXN0YXRlID0gKnl5c3NwOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgZ290byB5eWJh
Y2t1cDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHl5ZXJyb3IgKCZ5eWxsb2MsIGNvbnRleHQs
IFlZXygic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIpKTsgXAorICAgICAgWVlFUlJPUjsJ
CQkJCQkJXAorICAgIH0JCQkJCQkJCVwKK3doaWxlIChZWUlEICgwKSkKKworLyogRXJyb3IgdG9r
ZW4gbnVtYmVyICovCisjZGVmaW5lIFlZVEVSUk9SCTEKKyNkZWZpbmUgWVlFUlJDT0RFCTI1Ngor
CisKKy8qIFlZTExPQ19ERUZBVUxUIC0tIFNldCBDVVJSRU5UIHRvIHNwYW4gZnJvbSBSSFNbMV0g
dG8gUkhTW05dLgorICAgSWYgTiBpcyAwLCB0aGVuIHNldCBDVVJSRU5UIHRvIHRoZSBlbXB0eSBs
b2NhdGlvbiB3aGljaCBlbmRzCisgICB0aGUgcHJldmlvdXMgc3ltYm9sOiBSSFNbMF0gKGFsd2F5
cyBkZWZpbmVkKS4gICovCisKKyNpZm5kZWYgWVlMTE9DX0RFRkFVTFQKKyMgZGVmaW5lIFlZTExP
Q19ERUZBVUxUKEN1cnJlbnQsIFJocywgTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmIChZWUlEIChOKSkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gWVlSSFNMT0MgKFJocywgMSkuZmly
c3RfbGluZTsgICAgICAgIFwKKyAgICAgICAgICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0gWVlS
SFNMT0MgKFJocywgMSkuZmlyc3RfY29sdW1uOyAgICAgIFwKKyAgICAgICAgICAoQ3VycmVudCku
bGFzdF9saW5lICAgID0gWVlSSFNMT0MgKFJocywgTikubGFzdF9saW5lOyAgICAgICAgIFwKKyAg
ICAgICAgICAoQ3VycmVudCkubGFzdF9jb2x1bW4gID0gWVlSSFNMT0MgKFJocywgTikubGFzdF9j
b2x1bW47ICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGVsc2UgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gKEN1cnJlbnQp
Lmxhc3RfbGluZSAgID0gICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFlZUkhTTE9DIChSaHMs
IDApLmxhc3RfbGluZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0gKEN1cnJlbnQpLmxhc3RfY29sdW1uID0gICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgIFlZUkhTTE9DIChSaHMsIDApLmxhc3RfY29sdW1uOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB3aGlsZSAo
WVlJRCAoMCkpCisjZW5kaWYKKworI2RlZmluZSBZWVJIU0xPQyhSaHMsIEspICgoUmhzKVtLXSkK
KworCisvKiBZWV9MT0NBVElPTl9QUklOVCAtLSBQcmludCB0aGUgbG9jYXRpb24gb24gdGhlIHN0
cmVhbS4KKyAgIFRoaXMgbWFjcm8gd2FzIG5vdCBtYW5kYXRlZCBvcmlnaW5hbGx5OiBkZWZpbmUg
b25seSBpZiB3ZSBrbm93CisgICB3ZSB3b24ndCBicmVhayB1c2VyIGNvZGU6IHdoZW4gdGhlc2Ug
YXJlIHRoZSBsb2NhdGlvbnMgd2Uga25vdy4gICovCisKKyNpZm5kZWYgWVlfTE9DQVRJT05fUFJJ
TlQKKyMgaWYgZGVmaW5lZCBZWUxUWVBFX0lTX1RSSVZJQUwgJiYgWVlMVFlQRV9JU19UUklWSUFM
CisKKy8qIFByaW50ICpZWUxPQ1Agb24gWVlPLiAgUHJpdmF0ZSwgZG8gbm90IHJlbHkgb24gaXRz
IGV4aXN0ZW5jZS4gKi8KKworX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpCisjaWYgKGRlZmlu
ZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBf
X2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHVuc2lnbmVkCit5eV9sb2Nh
dGlvbl9wcmludF8gKEZJTEUgKnl5bywgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jcCkKKyNl
bHNlCitzdGF0aWMgdW5zaWduZWQKK3l5X2xvY2F0aW9uX3ByaW50XyAoeXlvLCB5eWxvY3ApCisg
ICAgRklMRSAqeXlvOworICAgIFlZTFRZUEUgY29uc3QgKiBjb25zdCB5eWxvY3A7CisjZW5kaWYK
K3sKKyAgdW5zaWduZWQgcmVzID0gMDsKKyAgaW50IGVuZF9jb2wgPSAwICE9IHl5bG9jcC0+bGFz
dF9jb2x1bW4gPyB5eWxvY3AtPmxhc3RfY29sdW1uIC0gMSA6IDA7CisgIGlmICgwIDw9IHl5bG9j
cC0+Zmlyc3RfbGluZSkKKyAgICB7CisgICAgICByZXMgKz0gZnByaW50ZiAoeXlvLCAiJWQiLCB5
eWxvY3AtPmZpcnN0X2xpbmUpOworICAgICAgaWYgKDAgPD0geXlsb2NwLT5maXJzdF9jb2x1bW4p
CisgICAgICAgIHJlcyArPSBmcHJpbnRmICh5eW8sICIuJWQiLCB5eWxvY3AtPmZpcnN0X2NvbHVt
bik7CisgICAgfQorICBpZiAoMCA8PSB5eWxvY3AtPmxhc3RfbGluZSkKKyAgICB7CisgICAgICBp
ZiAoeXlsb2NwLT5maXJzdF9saW5lIDwgeXlsb2NwLT5sYXN0X2xpbmUpCisgICAgICAgIHsKKyAg
ICAgICAgICByZXMgKz0gZnByaW50ZiAoeXlvLCAiLSVkIiwgeXlsb2NwLT5sYXN0X2xpbmUpOwor
ICAgICAgICAgIGlmICgwIDw9IGVuZF9jb2wpCisgICAgICAgICAgICByZXMgKz0gZnByaW50ZiAo
eXlvLCAiLiVkIiwgZW5kX2NvbCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKDAgPD0gZW5k
X2NvbCAmJiB5eWxvY3AtPmZpcnN0X2NvbHVtbiA8IGVuZF9jb2wpCisgICAgICAgIHJlcyArPSBm
cHJpbnRmICh5eW8sICItJWQiLCBlbmRfY29sKTsKKyAgICB9CisgIHJldHVybiByZXM7CisgfQor
CisjICBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKSAgICAgICAgICBcCisgIHl5
X2xvY2F0aW9uX3ByaW50XyAoRmlsZSwgJihMb2MpKQorCisjIGVsc2UKKyMgIGRlZmluZSBZWV9M
T0NBVElPTl9QUklOVChGaWxlLCBMb2MpICgodm9pZCkgMCkKKyMgZW5kaWYKKyNlbmRpZgorCisK
Ky8qIFlZTEVYIC0tIGNhbGxpbmcgYHl5bGV4JyB3aXRoIHRoZSByaWdodCBhcmd1bWVudHMuICAq
LworI2lmZGVmIFlZTEVYX1BBUkFNCisjIGRlZmluZSBZWUxFWCB5eWxleCAoJnl5bHZhbCwgJnl5
bGxvYywgWVlMRVhfUEFSQU0pCisjZWxzZQorIyBkZWZpbmUgWVlMRVggeXlsZXggKCZ5eWx2YWws
ICZ5eWxsb2MpCisjZW5kaWYKKworLyogRW5hYmxlIGRlYnVnZ2luZyBpZiByZXF1ZXN0ZWQuICAq
LworI2lmIFlZREVCVUcKKworIyBpZm5kZWYgWVlGUFJJTlRGCisjICBpbmNsdWRlIDxzdGRpby5o
PiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICBkZWZpbmUgWVlGUFJJTlRG
IGZwcmludGYKKyMgZW5kaWYKKworIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCQkJXAorZG8gewkJ
CQkJCVwKKyAgaWYgKHl5ZGVidWcpCQkJCQlcCisgICAgWVlGUFJJTlRGIEFyZ3M7CQkJCVwKK30g
d2hpbGUgKFlZSUQgKDApKQorCisjIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUs
IFZhbHVlLCBMb2NhdGlvbikJCQkgIFwKK2RvIHsJCQkJCQkJCQkgIFwKKyAgaWYgKHl5ZGVidWcp
CQkJCQkJCQkgIFwKKyAgICB7CQkJCQkJCQkJICBcCisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwg
IiVzICIsIFRpdGxlKTsJCQkJCSAgXAorICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsCQkJ
CQkJICBcCisJCSAgVHlwZSwgVmFsdWUsIExvY2F0aW9uLCBjb250ZXh0KTsgXAorICAgICAgWVlG
UFJJTlRGIChzdGRlcnIsICJcbiIpOwkJCQkJCSAgXAorICAgIH0JCQkJCQkJCQkgIFwKK30gd2hp
bGUgKFlZSUQgKDApKQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8
IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKi8KKworLypBUkdTVVNFRCovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwg
ZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBk
ZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5X3N5bWJvbF92YWx1ZV9wcmludCAoRklM
RSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcCwg
WVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jYXRpb25wLCBUUGFyc2VDb250ZXh0KiBjb250ZXh0
KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0LCB5
eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCwgY29udGV4dCkKKyAgICBGSUxFICp5eW91dHB1
dDsKKyAgICBpbnQgeXl0eXBlOworICAgIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcDsK
KyAgICBZWUxUWVBFIGNvbnN0ICogY29uc3QgeXlsb2NhdGlvbnA7CisgICAgVFBhcnNlQ29udGV4
dCogY29udGV4dDsKKyNlbmRpZgoreworICBGSUxFICp5eW8gPSB5eW91dHB1dDsKKyAgWVlVU0Ug
KHl5byk7CisgIGlmICgheXl2YWx1ZXApCisgICAgcmV0dXJuOworICBZWVVTRSAoeXlsb2NhdGlv
bnApOworICBZWVVTRSAoY29udGV4dCk7CisjIGlmZGVmIFlZUFJJTlQKKyAgaWYgKHl5dHlwZSA8
IFlZTlRPS0VOUykKKyAgICBZWVBSSU5UICh5eW91dHB1dCwgeXl0b2tudW1beXl0eXBlXSwgKnl5
dmFsdWVwKTsKKyMgZWxzZQorICBZWVVTRSAoeXlvdXRwdXQpOworIyBlbmRpZgorICBZWVVTRSAo
eXl0eXBlKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBQ
cmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSovCisKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19G
VU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIp
CitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ByaW50IChGSUxFICp5eW91dHB1dCwgaW50IHl5dHlw
ZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwLCBZWUxUWVBFIGNvbnN0ICogY29uc3Qg
eXlsb2NhdGlvbnAsIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQK
K3l5X3N5bWJvbF9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25w
LCBjb250ZXh0KQorICAgIEZJTEUgKnl5b3V0cHV0OworICAgIGludCB5eXR5cGU7CisgICAgWVlT
VFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOworICAgIFlZTFRZUEUgY29uc3QgKiBjb25zdCB5
eWxvY2F0aW9ucDsKKyAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0OworI2VuZGlmCit7CisgIGlm
ICh5eXR5cGUgPCBZWU5UT0tFTlMpCisgICAgWVlGUFJJTlRGICh5eW91dHB1dCwgInRva2VuICVz
ICgiLCB5eXRuYW1lW3l5dHlwZV0pOworICBlbHNlCisgICAgWVlGUFJJTlRGICh5eW91dHB1dCwg
Im50ZXJtICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOworCisgIFlZX0xPQ0FUSU9OX1BSSU5UICh5
eW91dHB1dCwgKnl5bG9jYXRpb25wKTsKKyAgWVlGUFJJTlRGICh5eW91dHB1dCwgIjogIik7Cisg
IHl5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9j
YXRpb25wLCBjb250ZXh0KTsKKyAgWVlGUFJJTlRGICh5eW91dHB1dCwgIikiKTsKK30KKworLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0uCit8IHl5X3N0YWNrX3ByaW50IC0tIFByaW50IHRoZSBzdGF0ZSBzdGFjayBmcm9t
IGl0cyBCT1RUT00gdXAgdG8gaXRzIHwKK3wgVE9QIChpbmNsdWRlZCkuICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorYC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNp
ZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBk
ZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlf
c3RhY2tfcHJpbnQgKHl5dHlwZV9pbnQxNiAqeXlib3R0b20sIHl5dHlwZV9pbnQxNiAqeXl0b3Ap
CisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3N0YWNrX3ByaW50ICh5eWJvdHRvbSwgeXl0b3ApCisg
ICAgeXl0eXBlX2ludDE2ICp5eWJvdHRvbTsKKyAgICB5eXR5cGVfaW50MTYgKnl5dG9wOworI2Vu
ZGlmCit7CisgIFlZRlBSSU5URiAoc3RkZXJyLCAiU3RhY2sgbm93Iik7CisgIGZvciAoOyB5eWJv
dHRvbSA8PSB5eXRvcDsgeXlib3R0b20rKykKKyAgICB7CisgICAgICBpbnQgeXlib3QgPSAqeXli
b3R0b207CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsIHl5Ym90KTsKKyAgICB9Cisg
IFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKK30KKworIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQo
Qm90dG9tLCBUb3ApCQkJCVwKK2RvIHsJCQkJCQkJCVwKKyAgaWYgKHl5ZGVidWcpCQkJCQkJCVwK
KyAgICB5eV9zdGFja19wcmludCAoKEJvdHRvbSksIChUb3ApKTsJCQkJXAorfSB3aGlsZSAoWVlJ
RCAoMCkpCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0uCit8IFJlcG9ydCB0aGF0IHRoZSBZWVJVTEUgaXMgZ29pbmcgdG8gYmUgcmVkdWNlZC4g
IHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwor
CisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAg
fHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQK
K3l5X3JlZHVjZV9wcmludCAoWVlTVFlQRSAqeXl2c3AsIFlZTFRZUEUgKnl5bHNwLCBpbnQgeXly
dWxlLCBUUGFyc2VDb250ZXh0KiBjb250ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9yZWR1
Y2VfcHJpbnQgKHl5dnNwLCB5eWxzcCwgeXlydWxlLCBjb250ZXh0KQorICAgIFlZU1RZUEUgKnl5
dnNwOworICAgIFlZTFRZUEUgKnl5bHNwOworICAgIGludCB5eXJ1bGU7CisgICAgVFBhcnNlQ29u
dGV4dCogY29udGV4dDsKKyNlbmRpZgoreworICBpbnQgeXlucmhzID0geXlyMlt5eXJ1bGVdOwor
ICBpbnQgeXlpOworICB1bnNpZ25lZCBsb25nIGludCB5eWxubyA9IHl5cmxpbmVbeXlydWxlXTsK
KyAgWVlGUFJJTlRGIChzdGRlcnIsICJSZWR1Y2luZyBzdGFjayBieSBydWxlICVkIChsaW5lICVs
dSk6XG4iLAorCSAgICAgeXlydWxlIC0gMSwgeXlsbm8pOworICAvKiBUaGUgc3ltYm9scyBiZWlu
ZyByZWR1Y2VkLiAgKi8KKyAgZm9yICh5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsrKQorICAg
IHsKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsgMSk7CisgICAg
ICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwgeXlyaHNbeXlwcmhzW3l5cnVsZV0gKyB5eWldLAor
CQkgICAgICAgJih5eXZzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0pCisJCSAgICAgICAsICYoeXls
c3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQkJICAgICAgICwgY29udGV4dCk7CisgICAgICBZWUZQ
UklOVEYgKHN0ZGVyciwgIlxuIik7CisgICAgfQorfQorCisjIGRlZmluZSBZWV9SRURVQ0VfUFJJ
TlQoUnVsZSkJCVwKK2RvIHsJCQkJCVwKKyAgaWYgKHl5ZGVidWcpCQkJCVwKKyAgICB5eV9yZWR1
Y2VfcHJpbnQgKHl5dnNwLCB5eWxzcCwgUnVsZSwgY29udGV4dCk7IFwKK30gd2hpbGUgKFlZSUQg
KDApKQorCisvKiBOb256ZXJvIG1lYW5zIHByaW50IHBhcnNlIHRyYWNlLiAgSXQgaXMgbGVmdCB1
bmluaXRpYWxpemVkIHNvIHRoYXQKKyAgIG11bHRpcGxlIHBhcnNlcnMgY2FuIGNvZXhpc3QuICAq
LworaW50IHl5ZGVidWc7CisjZWxzZSAvKiAhWVlERUJVRyAqLworIyBkZWZpbmUgWVlEUFJJTlRG
KEFyZ3MpCisjIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2Nh
dGlvbikKKyMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKQorIyBkZWZpbmUgWVlf
UkVEVUNFX1BSSU5UKFJ1bGUpCisjZW5kaWYgLyogIVlZREVCVUcgKi8KKworCisvKiBZWUlOSVRE
RVBUSCAtLSBpbml0aWFsIHNpemUgb2YgdGhlIHBhcnNlcidzIHN0YWNrcy4gICovCisjaWZuZGVm
CVlZSU5JVERFUFRICisjIGRlZmluZSBZWUlOSVRERVBUSCAyMDAKKyNlbmRpZgorCisvKiBZWU1B
WERFUFRIIC0tIG1heGltdW0gc2l6ZSB0aGUgc3RhY2tzIGNhbiBncm93IHRvIChlZmZlY3RpdmUg
b25seQorICAgaWYgdGhlIGJ1aWx0LWluIHN0YWNrIGV4dGVuc2lvbiBtZXRob2QgaXMgdXNlZCku
CisKKyAgIERvIG5vdCBtYWtlIHRoaXMgdmFsdWUgdG9vIGxhcmdlOyB0aGUgcmVzdWx0cyBhcmUg
dW5kZWZpbmVkIGlmCisgICBZWVNUQUNLX0FMTE9DX01BWElNVU0gPCBZWVNUQUNLX0JZVEVTIChZ
WU1BWERFUFRIKQorICAgZXZhbHVhdGVkIHdpdGggaW5maW5pdGUtcHJlY2lzaW9uIGludGVnZXIg
YXJpdGhtZXRpYy4gICovCisKKyNpZm5kZWYgWVlNQVhERVBUSAorIyBkZWZpbmUgWVlNQVhERVBU
SCAxMDAwMAorI2VuZGlmCisKKworI2lmIFlZRVJST1JfVkVSQk9TRQorCisjIGlmbmRlZiB5eXN0
cmxlbgorIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RSSU5HX0gKKyMgICBk
ZWZpbmUgeXlzdHJsZW4gc3RybGVuCisjICBlbHNlCisvKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiBZ
WVNUUi4gICovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19f
IFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3Rh
dGljIFlZU0laRV9UCit5eXN0cmxlbiAoY29uc3QgY2hhciAqeXlzdHIpCisjZWxzZQorc3RhdGlj
IFlZU0laRV9UCit5eXN0cmxlbiAoeXlzdHIpCisgICAgY29uc3QgY2hhciAqeXlzdHI7CisjZW5k
aWYKK3sKKyAgWVlTSVpFX1QgeXlsZW47CisgIGZvciAoeXlsZW4gPSAwOyB5eXN0clt5eWxlbl07
IHl5bGVuKyspCisgICAgY29udGludWU7CisgIHJldHVybiB5eWxlbjsKK30KKyMgIGVuZGlmCisj
IGVuZGlmCisKKyMgaWZuZGVmIHl5c3RwY3B5CisjICBpZiBkZWZpbmVkIF9fR0xJQkNfXyAmJiBk
ZWZpbmVkIF9TVFJJTkdfSCAmJiBkZWZpbmVkIF9HTlVfU09VUkNFCisjICAgZGVmaW5lIHl5c3Rw
Y3B5IHN0cGNweQorIyAgZWxzZQorLyogQ29weSBZWVNSQyB0byBZWURFU1QsIHJldHVybmluZyB0
aGUgYWRkcmVzcyBvZiB0aGUgdGVybWluYXRpbmcgJ1wwJyBpbgorICAgWVlERVNULiAgKi8KKyNp
ZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBk
ZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgY2hhciAqCit5
eXN0cGNweSAoY2hhciAqeXlkZXN0LCBjb25zdCBjaGFyICp5eXNyYykKKyNlbHNlCitzdGF0aWMg
Y2hhciAqCit5eXN0cGNweSAoeXlkZXN0LCB5eXNyYykKKyAgICBjaGFyICp5eWRlc3Q7CisgICAg
Y29uc3QgY2hhciAqeXlzcmM7CisjZW5kaWYKK3sKKyAgY2hhciAqeXlkID0geXlkZXN0OworICBj
b25zdCBjaGFyICp5eXMgPSB5eXNyYzsKKworICB3aGlsZSAoKCp5eWQrKyA9ICp5eXMrKykgIT0g
J1wwJykKKyAgICBjb250aW51ZTsKKworICByZXR1cm4geXlkIC0gMTsKK30KKyMgIGVuZGlmCisj
IGVuZGlmCisKKyMgaWZuZGVmIHl5dG5hbWVycgorLyogQ29weSB0byBZWVJFUyB0aGUgY29udGVu
dHMgb2YgWVlTVFIgYWZ0ZXIgc3RyaXBwaW5nIGF3YXkgdW5uZWNlc3NhcnkKKyAgIHF1b3RlcyBh
bmQgYmFja3NsYXNoZXMsIHNvIHRoYXQgaXQncyBzdWl0YWJsZSBmb3IgeXllcnJvci4gIFRoZQor
ICAgaGV1cmlzdGljIGlzIHRoYXQgZG91YmxlLXF1b3RpbmcgaXMgdW5uZWNlc3NhcnkgdW5sZXNz
IHRoZSBzdHJpbmcKKyAgIGNvbnRhaW5zIGFuIGFwb3N0cm9waGUsIGEgY29tbWEsIG9yIGJhY2tz
bGFzaCAob3RoZXIgdGhhbgorICAgYmFja3NsYXNoLWJhY2tzbGFzaCkuICBZWVNUUiBpcyB0YWtl
biBmcm9tIHl5dG5hbWUuICBJZiBZWVJFUyBpcworICAgbnVsbCwgZG8gbm90IGNvcHk7IGluc3Rl
YWQsIHJldHVybiB0aGUgbGVuZ3RoIG9mIHdoYXQgdGhlIHJlc3VsdAorICAgd291bGQgaGF2ZSBi
ZWVuLiAgKi8KK3N0YXRpYyBZWVNJWkVfVAoreXl0bmFtZXJyIChjaGFyICp5eXJlcywgY29uc3Qg
Y2hhciAqeXlzdHIpCit7CisgIGlmICgqeXlzdHIgPT0gJyInKQorICAgIHsKKyAgICAgIFlZU0la
RV9UIHl5biA9IDA7CisgICAgICBjaGFyIGNvbnN0ICp5eXAgPSB5eXN0cjsKKworICAgICAgZm9y
ICg7OykKKwlzd2l0Y2ggKCorK3l5cCkKKwkgIHsKKwkgIGNhc2UgJ1wnJzoKKwkgIGNhc2UgJywn
OgorCSAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7CisKKwkgIGNhc2UgJ1xcJzoKKwkgICAg
aWYgKCorK3l5cCAhPSAnXFwnKQorCSAgICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKKwkg
ICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKwkgIGRlZmF1bHQ6CisJICAgIGlmICh5eXJlcykKKwkg
ICAgICB5eXJlc1t5eW5dID0gKnl5cDsKKwkgICAgeXluKys7CisJICAgIGJyZWFrOworCisJICBj
YXNlICciJzoKKwkgICAgaWYgKHl5cmVzKQorCSAgICAgIHl5cmVzW3l5bl0gPSAnXDAnOworCSAg
ICByZXR1cm4geXluOworCSAgfQorICAgIGRvX25vdF9zdHJpcF9xdW90ZXM6IDsKKyAgICB9CisK
KyAgaWYgKCEgeXlyZXMpCisgICAgcmV0dXJuIHl5c3RybGVuICh5eXN0cik7CisKKyAgcmV0dXJu
IHl5c3RwY3B5ICh5eXJlcywgeXlzdHIpIC0geXlyZXM7Cit9CisjIGVuZGlmCisKKy8qIENvcHkg
aW50byAqWVlNU0csIHdoaWNoIGlzIG9mIHNpemUgKllZTVNHX0FMTE9DLCBhbiBlcnJvciBtZXNz
YWdlCisgICBhYm91dCB0aGUgdW5leHBlY3RlZCB0b2tlbiBZWVRPS0VOIGZvciB0aGUgc3RhdGUg
c3RhY2sgd2hvc2UgdG9wIGlzCisgICBZWVNTUC4KKworICAgUmV0dXJuIDAgaWYgKllZTVNHIHdh
cyBzdWNjZXNzZnVsbHkgd3JpdHRlbi4gIFJldHVybiAxIGlmICpZWU1TRyBpcworICAgbm90IGxh
cmdlIGVub3VnaCB0byBob2xkIHRoZSBtZXNzYWdlLiAgSW4gdGhhdCBjYXNlLCBhbHNvIHNldAor
ICAgKllZTVNHX0FMTE9DIHRvIHRoZSByZXF1aXJlZCBudW1iZXIgb2YgYnl0ZXMuICBSZXR1cm4g
MiBpZiB0aGUKKyAgIHJlcXVpcmVkIG51bWJlciBvZiBieXRlcyBpcyB0b28gbGFyZ2UgdG8gc3Rv
cmUuICAqLworc3RhdGljIGludAoreXlzeW50YXhfZXJyb3IgKFlZU0laRV9UICp5eW1zZ19hbGxv
YywgY2hhciAqKnl5bXNnLAorICAgICAgICAgICAgICAgIHl5dHlwZV9pbnQxNiAqeXlzc3AsIGlu
dCB5eXRva2VuKQoreworICBZWVNJWkVfVCB5eXNpemUwID0geXl0bmFtZXJyIChZWV9OVUxMLCB5
eXRuYW1lW3l5dG9rZW5dKTsKKyAgWVlTSVpFX1QgeXlzaXplID0geXlzaXplMDsKKyAgZW51bSB7
IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0gPSA1IH07CisgIC8qIEludGVybmF0aW9uYWxp
emVkIGZvcm1hdCBzdHJpbmcuICovCisgIGNvbnN0IGNoYXIgKnl5Zm9ybWF0ID0gWVlfTlVMTDsK
KyAgLyogQXJndW1lbnRzIG9mIHl5Zm9ybWF0LiAqLworICBjaGFyIGNvbnN0ICp5eWFyZ1tZWUVS
Uk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNXTsKKyAgLyogTnVtYmVyIG9mIHJlcG9ydGVkIHRva2Vu
cyAob25lIGZvciB0aGUgInVuZXhwZWN0ZWQiLCBvbmUgcGVyCisgICAgICJleHBlY3RlZCIpLiAq
LworICBpbnQgeXljb3VudCA9IDA7CisKKyAgLyogVGhlcmUgYXJlIG1hbnkgcG9zc2liaWxpdGll
cyBoZXJlIHRvIGNvbnNpZGVyOgorICAgICAtIEFzc3VtZSBZWUZBSUwgaXMgbm90IHVzZWQuICBJ
dCdzIHRvbyBmbGF3ZWQgdG8gY29uc2lkZXIuICBTZWUKKyAgICAgICA8aHR0cDovL2xpc3RzLmdu
dS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAwOS0xMi9tc2cwMDAyNC5odG1sPgor
ICAgICAgIGZvciBkZXRhaWxzLiAgWVlFUlJPUiBpcyBmaW5lIGFzIGl0IGRvZXMgbm90IGludm9r
ZSB0aGlzCisgICAgICAgZnVuY3Rpb24uCisgICAgIC0gSWYgdGhpcyBzdGF0ZSBpcyBhIGNvbnNp
c3RlbnQgc3RhdGUgd2l0aCBhIGRlZmF1bHQgYWN0aW9uLCB0aGVuCisgICAgICAgdGhlIG9ubHkg
d2F5IHRoaXMgZnVuY3Rpb24gd2FzIGludm9rZWQgaXMgaWYgdGhlIGRlZmF1bHQgYWN0aW9uCisg
ICAgICAgaXMgYW4gZXJyb3IgYWN0aW9uLiAgSW4gdGhhdCBjYXNlLCBkb24ndCBjaGVjayBmb3Ig
ZXhwZWN0ZWQKKyAgICAgICB0b2tlbnMgYmVjYXVzZSB0aGVyZSBhcmUgbm9uZS4KKyAgICAgLSBU
aGUgb25seSB3YXkgdGhlcmUgY2FuIGJlIG5vIGxvb2thaGVhZCBwcmVzZW50IChpbiB5eWNoYXIp
IGlzIGlmCisgICAgICAgdGhpcyBzdGF0ZSBpcyBhIGNvbnNpc3RlbnQgc3RhdGUgd2l0aCBhIGRl
ZmF1bHQgYWN0aW9uLiAgVGh1cywKKyAgICAgICBkZXRlY3RpbmcgdGhlIGFic2VuY2Ugb2YgYSBs
b29rYWhlYWQgaXMgc3VmZmljaWVudCB0byBkZXRlcm1pbmUKKyAgICAgICB0aGF0IHRoZXJlIGlz
IG5vIHVuZXhwZWN0ZWQgb3IgZXhwZWN0ZWQgdG9rZW4gdG8gcmVwb3J0LiAgSW4gdGhhdAorICAg
ICAgIGNhc2UsIGp1c3QgcmVwb3J0IGEgc2ltcGxlICJzeW50YXggZXJyb3IiLgorICAgICAtIERv
bid0IGFzc3VtZSB0aGVyZSBpc24ndCBhIGxvb2thaGVhZCBqdXN0IGJlY2F1c2UgdGhpcyBzdGF0
ZSBpcyBhCisgICAgICAgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgZGVmYXVsdCBhY3Rpb24uICBU
aGVyZSBtaWdodCBoYXZlIGJlZW4gYQorICAgICAgIHByZXZpb3VzIGluY29uc2lzdGVudCBzdGF0
ZSwgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgbm9uLWRlZmF1bHQKKyAgICAgICBhY3Rpb24sIG9y
IHVzZXIgc2VtYW50aWMgYWN0aW9uIHRoYXQgbWFuaXB1bGF0ZWQgeXljaGFyLgorICAgICAtIE9m
IGNvdXJzZSwgdGhlIGV4cGVjdGVkIHRva2VuIGxpc3QgZGVwZW5kcyBvbiBzdGF0ZXMgdG8gaGF2
ZQorICAgICAgIGNvcnJlY3QgbG9va2FoZWFkIGluZm9ybWF0aW9uLCBhbmQgaXQgZGVwZW5kcyBv
biB0aGUgcGFyc2VyIG5vdAorICAgICAgIHRvIHBlcmZvcm0gZXh0cmEgcmVkdWN0aW9ucyBhZnRl
ciBmZXRjaGluZyBhIGxvb2thaGVhZCBmcm9tIHRoZQorICAgICAgIHNjYW5uZXIgYW5kIGJlZm9y
ZSBkZXRlY3RpbmcgYSBzeW50YXggZXJyb3IuICBUaHVzLCBzdGF0ZSBtZXJnaW5nCisgICAgICAg
KGZyb20gTEFMUiBvciBJRUxSKSBhbmQgZGVmYXVsdCByZWR1Y3Rpb25zIGNvcnJ1cHQgdGhlIGV4
cGVjdGVkCisgICAgICAgdG9rZW4gbGlzdC4gIEhvd2V2ZXIsIHRoZSBsaXN0IGlzIGNvcnJlY3Qg
Zm9yIGNhbm9uaWNhbCBMUiB3aXRoCisgICAgICAgb25lIGV4Y2VwdGlvbjogaXQgd2lsbCBzdGls
bCBjb250YWluIGFueSB0b2tlbiB0aGF0IHdpbGwgbm90IGJlCisgICAgICAgYWNjZXB0ZWQgZHVl
IHRvIGFuIGVycm9yIGFjdGlvbiBpbiBhIGxhdGVyIHN0YXRlLgorICAqLworICBpZiAoeXl0b2tl
biAhPSBZWUVNUFRZKQorICAgIHsKKyAgICAgIGludCB5eW4gPSB5eXBhY3RbKnl5c3NwXTsKKyAg
ICAgIHl5YXJnW3l5Y291bnQrK10gPSB5eXRuYW1lW3l5dG9rZW5dOworICAgICAgaWYgKCF5eXBh
Y3RfdmFsdWVfaXNfZGVmYXVsdCAoeXluKSkKKyAgICAgICAgeworICAgICAgICAgIC8qIFN0YXJ0
IFlZWCBhdCAtWVlOIGlmIG5lZ2F0aXZlIHRvIGF2b2lkIG5lZ2F0aXZlIGluZGV4ZXMgaW4KKyAg
ICAgICAgICAgICBZWUNIRUNLLiAgSW4gb3RoZXIgd29yZHMsIHNraXAgdGhlIGZpcnN0IC1ZWU4g
YWN0aW9ucyBmb3IKKyAgICAgICAgICAgICB0aGlzIHN0YXRlIGJlY2F1c2UgdGhleSBhcmUgZGVm
YXVsdCBhY3Rpb25zLiAgKi8KKyAgICAgICAgICBpbnQgeXl4YmVnaW4gPSB5eW4gPCAwID8gLXl5
biA6IDA7CisgICAgICAgICAgLyogU3RheSB3aXRoaW4gYm91bmRzIG9mIGJvdGggeXljaGVjayBh
bmQgeXl0bmFtZS4gICovCisgICAgICAgICAgaW50IHl5Y2hlY2tsaW0gPSBZWUxBU1QgLSB5eW4g
KyAxOworICAgICAgICAgIGludCB5eXhlbmQgPSB5eWNoZWNrbGltIDwgWVlOVE9LRU5TID8geXlj
aGVja2xpbSA6IFlZTlRPS0VOUzsKKyAgICAgICAgICBpbnQgeXl4OworCisgICAgICAgICAgZm9y
ICh5eXggPSB5eXhiZWdpbjsgeXl4IDwgeXl4ZW5kOyArK3l5eCkKKyAgICAgICAgICAgIGlmICh5
eWNoZWNrW3l5eCArIHl5bl0gPT0geXl4ICYmIHl5eCAhPSBZWVRFUlJPUgorICAgICAgICAgICAg
ICAgICYmICF5eXRhYmxlX3ZhbHVlX2lzX2Vycm9yICh5eXRhYmxlW3l5eCArIHl5bl0pKQorICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHl5Y291bnQgPT0gWVlFUlJPUl9WRVJC
T1NFX0FSR1NfTUFYSU1VTSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgeXljb3VudCA9IDE7CisgICAgICAgICAgICAgICAgICAgIHl5c2l6ZSA9IHl5c2l6ZTA7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHl5YXJnW3l5Y291bnQrK10gPSB5eXRuYW1lW3l5eF07CisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgWVlTSVpFX1QgeXlzaXplMSA9IHl5c2l6ZSArIHl5dG5hbWVy
ciAoWVlfTlVMTCwgeXl0bmFtZVt5eXhdKTsKKyAgICAgICAgICAgICAgICAgIGlmICghICh5eXNp
emUgPD0geXlzaXplMQorICAgICAgICAgICAgICAgICAgICAgICAgICYmIHl5c2l6ZTEgPD0gWVlT
VEFDS19BTExPQ19NQVhJTVVNKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDI7CisgICAg
ICAgICAgICAgICAgICB5eXNpemUgPSB5eXNpemUxOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgIHN3aXRjaCAoeXljb3VudCkKKyAgICB7
CisjIGRlZmluZSBZWUNBU0VfKE4sIFMpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGNh
c2UgTjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWZvcm1hdCA9
IFM7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBicmVhaworICAgICAgWVlDQVNFXygw
LCBZWV8oInN5bnRheCBlcnJvciIpKTsKKyAgICAgIFlZQ0FTRV8oMSwgWVlfKCJzeW50YXggZXJy
b3IsIHVuZXhwZWN0ZWQgJXMiKSk7CisgICAgICBZWUNBU0VfKDIsIFlZXygic3ludGF4IGVycm9y
LCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMiKSk7CisgICAgICBZWUNBU0VfKDMsIFlZXygi
c3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMiKSk7CisgICAg
ICBZWUNBU0VfKDQsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3Rpbmcg
JXMgb3IgJXMgb3IgJXMiKSk7CisgICAgICBZWUNBU0VfKDUsIFlZXygic3ludGF4IGVycm9yLCB1
bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMgb3IgJXMiKSk7CisjIHVuZGVm
IFlZQ0FTRV8KKyAgICB9CisKKyAgeworICAgIFlZU0laRV9UIHl5c2l6ZTEgPSB5eXNpemUgKyB5
eXN0cmxlbiAoeXlmb3JtYXQpOworICAgIGlmICghICh5eXNpemUgPD0geXlzaXplMSAmJiB5eXNp
emUxIDw9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkpCisgICAgICByZXR1cm4gMjsKKyAgICB5eXNp
emUgPSB5eXNpemUxOworICB9CisKKyAgaWYgKCp5eW1zZ19hbGxvYyA8IHl5c2l6ZSkKKyAgICB7
CisgICAgICAqeXltc2dfYWxsb2MgPSAyICogeXlzaXplOworICAgICAgaWYgKCEgKHl5c2l6ZSA8
PSAqeXltc2dfYWxsb2MKKyAgICAgICAgICAgICAmJiAqeXltc2dfYWxsb2MgPD0gWVlTVEFDS19B
TExPQ19NQVhJTVVNKSkKKyAgICAgICAgKnl5bXNnX2FsbG9jID0gWVlTVEFDS19BTExPQ19NQVhJ
TVVNOworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgIC8qIEF2b2lkIHNwcmludGYsIGFzIHRo
YXQgaW5mcmluZ2VzIG9uIHRoZSB1c2VyJ3MgbmFtZSBzcGFjZS4KKyAgICAgRG9uJ3QgaGF2ZSB1
bmRlZmluZWQgYmVoYXZpb3IgZXZlbiBpZiB0aGUgdHJhbnNsYXRpb24KKyAgICAgcHJvZHVjZWQg
YSBzdHJpbmcgd2l0aCB0aGUgd3JvbmcgbnVtYmVyIG9mICIlcyJzLiAgKi8KKyAgeworICAgIGNo
YXIgKnl5cCA9ICp5eW1zZzsKKyAgICBpbnQgeXlpID0gMDsKKyAgICB3aGlsZSAoKCp5eXAgPSAq
eXlmb3JtYXQpICE9ICdcMCcpCisgICAgICBpZiAoKnl5cCA9PSAnJScgJiYgeXlmb3JtYXRbMV0g
PT0gJ3MnICYmIHl5aSA8IHl5Y291bnQpCisgICAgICAgIHsKKyAgICAgICAgICB5eXAgKz0geXl0
bmFtZXJyICh5eXAsIHl5YXJnW3l5aSsrXSk7CisgICAgICAgICAgeXlmb3JtYXQgKz0gMjsKKyAg
ICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgeXlwKys7CisgICAgICAg
ICAgeXlmb3JtYXQrKzsKKyAgICAgICAgfQorICB9CisgIHJldHVybiAwOworfQorI2VuZGlmIC8q
IFlZRVJST1JfVkVSQk9TRSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLgorfCBSZWxlYXNlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB0byB0aGlz
IHN5bWJvbC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCisKKy8qQVJHU1VTRUQqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQg
X19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBf
TVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eWRlc3RydWN0IChjb25zdCBjaGFyICp5eW1zZywgaW50
IHl5dHlwZSwgWVlTVFlQRSAqeXl2YWx1ZXAsIFlZTFRZUEUgKnl5bG9jYXRpb25wLCBUUGFyc2VD
b250ZXh0KiBjb250ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eWRlc3RydWN0ICh5eW1zZywg
eXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAsIGNvbnRleHQpCisgICAgY29uc3QgY2hhciAq
eXltc2c7CisgICAgaW50IHl5dHlwZTsKKyAgICBZWVNUWVBFICp5eXZhbHVlcDsKKyAgICBZWUxU
WVBFICp5eWxvY2F0aW9ucDsKKyAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0OworI2VuZGlmCit7
CisgIFlZVVNFICh5eXZhbHVlcCk7CisgIFlZVVNFICh5eWxvY2F0aW9ucCk7CisgIFlZVVNFIChj
b250ZXh0KTsKKworICBpZiAoIXl5bXNnKQorICAgIHl5bXNnID0gIkRlbGV0aW5nIjsKKyAgWVlf
U1lNQk9MX1BSSU5UICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnApOworCisg
IFlZVVNFICh5eXR5cGUpOworfQorCisKKworCisvKi0tLS0tLS0tLS0uCit8IHl5cGFyc2UuICB8
CitgLS0tLS0tLS0tLSovCisKKyNpZmRlZiBZWVBBUlNFX1BBUkFNCisjaWYgKGRlZmluZWQgX19T
VERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVz
cGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQoraW50Cit5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BB
UkFNKQorI2Vsc2UKK2ludAoreXlwYXJzZSAoWVlQQVJTRV9QQVJBTSkKKyAgICB2b2lkICpZWVBB
UlNFX1BBUkFNOworI2VuZGlmCisjZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KKyNpZiAoZGVm
aW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVk
IF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitpbnQKK3l5cGFyc2UgKFRQYXJzZUNv
bnRleHQqIGNvbnRleHQpCisjZWxzZQoraW50Cit5eXBhcnNlIChjb250ZXh0KQorICAgIFRQYXJz
ZUNvbnRleHQqIGNvbnRleHQ7CisjZW5kaWYKKyNlbmRpZgoreworLyogVGhlIGxvb2thaGVhZCBz
eW1ib2wuICAqLworaW50IHl5Y2hhcjsKKworCisjaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiA0MDcg
PD0gX19HTlVDX18gKiAxMDAgKyBfX0dOVUNfTUlOT1JfXworLyogU3VwcHJlc3MgYW4gaW5jb3Jy
ZWN0IGRpYWdub3N0aWMgYWJvdXQgeXlsdmFsIGJlaW5nIHVuaW5pdGlhbGl6ZWQuICAqLworIyBk
ZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4gXAorICAgIF9QcmFnbWEg
KCJHQ0MgZGlhZ25vc3RpYyBwdXNoIikgXAorICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBp
Z25vcmVkIFwiLVd1bmluaXRpYWxpemVkXCIiKVwKKyAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0
aWMgaWdub3JlZCBcIi1XbWF5YmUtdW5pbml0aWFsaXplZFwiIikKKyMgZGVmaW5lIFlZX0lHTk9S
RV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORCBcCisgICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGlj
IHBvcCIpCisjZWxzZQorLyogRGVmYXVsdCB2YWx1ZSB1c2VkIGZvciBpbml0aWFsaXphdGlvbiwg
Zm9yIHBhY2lmeWluZyBvbGRlciBHQ0NzCisgICBvciBub24tR0NDIGNvbXBpbGVycy4gICovCitz
dGF0aWMgWVlTVFlQRSB5eXZhbF9kZWZhdWx0OworIyBkZWZpbmUgWVlfSU5JVElBTF9WQUxVRShW
YWx1ZSkgPSBWYWx1ZQorI2VuZGlmCitzdGF0aWMgWVlMVFlQRSB5eWxvY19kZWZhdWx0CisjIGlm
IGRlZmluZWQgWVlMVFlQRV9JU19UUklWSUFMICYmIFlZTFRZUEVfSVNfVFJJVklBTAorICA9IHsg
MSwgMSwgMSwgMSB9CisjIGVuZGlmCis7CisjaWZuZGVmIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJ
QUxJWkVEX0JFR0lOCisjIGRlZmluZSBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJ
TgorIyBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5ECisjZW5kaWYKKyNp
Zm5kZWYgWVlfSU5JVElBTF9WQUxVRQorIyBkZWZpbmUgWVlfSU5JVElBTF9WQUxVRShWYWx1ZSkg
LyogTm90aGluZy4gKi8KKyNlbmRpZgorCisvKiBUaGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlIGxv
b2thaGVhZCBzeW1ib2wuICAqLworWVlTVFlQRSB5eWx2YWwgWVlfSU5JVElBTF9WQUxVRSh5eXZh
bF9kZWZhdWx0KTsKKworLyogTG9jYXRpb24gZGF0YSBmb3IgdGhlIGxvb2thaGVhZCBzeW1ib2wu
ICAqLworWVlMVFlQRSB5eWxsb2MgPSB5eWxvY19kZWZhdWx0OworCisKKyAgICAvKiBOdW1iZXIg
b2Ygc3ludGF4IGVycm9ycyBzbyBmYXIuICAqLworICAgIGludCB5eW5lcnJzOworCisgICAgaW50
IHl5c3RhdGU7CisgICAgLyogTnVtYmVyIG9mIHRva2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3Ig
bWVzc2FnZXMgZW5hYmxlZC4gICovCisgICAgaW50IHl5ZXJyc3RhdHVzOworCisgICAgLyogVGhl
IHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6CisgICAgICAgYHl5c3MnOiByZWxhdGVkIHRvIHN0YXRl
cy4KKyAgICAgICBgeXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLgorICAgICAgIGB5
eWxzJzogcmVsYXRlZCB0byBsb2NhdGlvbnMuCisKKyAgICAgICBSZWZlciB0byB0aGUgc3RhY2tz
IHRocm91Z2ggc2VwYXJhdGUgcG9pbnRlcnMsIHRvIGFsbG93IHl5b3ZlcmZsb3cKKyAgICAgICB0
byByZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlLiAgKi8KKworICAgIC8qIFRoZSBzdGF0ZSBzdGFj
ay4gICovCisgICAgeXl0eXBlX2ludDE2IHl5c3NhW1lZSU5JVERFUFRIXTsKKyAgICB5eXR5cGVf
aW50MTYgKnl5c3M7CisgICAgeXl0eXBlX2ludDE2ICp5eXNzcDsKKworICAgIC8qIFRoZSBzZW1h
bnRpYyB2YWx1ZSBzdGFjay4gICovCisgICAgWVlTVFlQRSB5eXZzYVtZWUlOSVRERVBUSF07Cisg
ICAgWVlTVFlQRSAqeXl2czsKKyAgICBZWVNUWVBFICp5eXZzcDsKKworICAgIC8qIFRoZSBsb2Nh
dGlvbiBzdGFjay4gICovCisgICAgWVlMVFlQRSB5eWxzYVtZWUlOSVRERVBUSF07CisgICAgWVlM
VFlQRSAqeXlsczsKKyAgICBZWUxUWVBFICp5eWxzcDsKKworICAgIC8qIFRoZSBsb2NhdGlvbnMg
d2hlcmUgdGhlIGVycm9yIHN0YXJ0ZWQgYW5kIGVuZGVkLiAgKi8KKyAgICBZWUxUWVBFIHl5ZXJy
b3JfcmFuZ2VbM107CisKKyAgICBZWVNJWkVfVCB5eXN0YWNrc2l6ZTsKKworICBpbnQgeXluOwor
ICBpbnQgeXlyZXN1bHQ7CisgIC8qIExvb2thaGVhZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJh
bnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KKyAgaW50IHl5dG9rZW4gPSAwOworICAvKiBUaGUg
dmFyaWFibGVzIHVzZWQgdG8gcmV0dXJuIHNlbWFudGljIHZhbHVlIGFuZCBsb2NhdGlvbiBmcm9t
IHRoZQorICAgICBhY3Rpb24gcm91dGluZXMuICAqLworICBZWVNUWVBFIHl5dmFsOworICBZWUxU
WVBFIHl5bG9jOworCisjaWYgWVlFUlJPUl9WRVJCT1NFCisgIC8qIEJ1ZmZlciBmb3IgZXJyb3Ig
bWVzc2FnZXMsIGFuZCBpdHMgYWxsb2NhdGVkIHNpemUuICAqLworICBjaGFyIHl5bXNnYnVmWzEy
OF07CisgIGNoYXIgKnl5bXNnID0geXltc2didWY7CisgIFlZU0laRV9UIHl5bXNnX2FsbG9jID0g
c2l6ZW9mIHl5bXNnYnVmOworI2VuZGlmCisKKyNkZWZpbmUgWVlQT1BTVEFDSyhOKSAgICh5eXZz
cCAtPSAoTiksIHl5c3NwIC09IChOKSwgeXlsc3AgLT0gKE4pKQorCisgIC8qIFRoZSBudW1iZXIg
b2Ygc3ltYm9scyBvbiB0aGUgUkhTIG9mIHRoZSByZWR1Y2VkIHJ1bGUuCisgICAgIEtlZXAgdG8g
emVybyB3aGVuIG5vIHN5bWJvbCBzaG91bGQgYmUgcG9wcGVkLiAgKi8KKyAgaW50IHl5bGVuID0g
MDsKKworICB5eXNzcCA9IHl5c3MgPSB5eXNzYTsKKyAgeXl2c3AgPSB5eXZzID0geXl2c2E7Cisg
IHl5bHNwID0geXlscyA9IHl5bHNhOworICB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRIOworCisg
IFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YXJ0aW5nIHBhcnNlXG4iKSk7CisKKyAgeXlzdGF0ZSA9
IDA7CisgIHl5ZXJyc3RhdHVzID0gMDsKKyAgeXluZXJycyA9IDA7CisgIHl5Y2hhciA9IFlZRU1Q
VFk7IC8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCisgIHl5bHNwWzBdID0geXlsbG9j
OworICBnb3RvIHl5c2V0c3RhdGU7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eW5ld3N0YXRlIC0tIFB1c2ggYSBu
ZXcgc3RhdGUsIHdoaWNoIGlzIGZvdW5kIGluIHl5c3RhdGUuICB8CitgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyB5eW5ld3N0
YXRlOgorICAvKiBJbiBhbGwgY2FzZXMsIHdoZW4geW91IGdldCBoZXJlLCB0aGUgdmFsdWUgYW5k
IGxvY2F0aW9uIHN0YWNrcworICAgICBoYXZlIGp1c3QgYmVlbiBwdXNoZWQuICBTbyBwdXNoaW5n
IGEgc3RhdGUgaGVyZSBldmVucyB0aGUgc3RhY2tzLiAgKi8KKyAgeXlzc3ArKzsKKworIHl5c2V0
c3RhdGU6CisgICp5eXNzcCA9IHl5c3RhdGU7CisKKyAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAt
IDEgPD0geXlzc3ApCisgICAgeworICAgICAgLyogR2V0IHRoZSBjdXJyZW50IHVzZWQgc2l6ZSBv
ZiB0aGUgdGhyZWUgc3RhY2tzLCBpbiBlbGVtZW50cy4gICovCisgICAgICBZWVNJWkVfVCB5eXNp
emUgPSB5eXNzcCAtIHl5c3MgKyAxOworCisjaWZkZWYgeXlvdmVyZmxvdworICAgICAgeworCS8q
IEdpdmUgdXNlciBhIGNoYW5jZSB0byByZWFsbG9jYXRlIHRoZSBzdGFjay4gIFVzZSBjb3BpZXMg
b2YKKwkgICB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJlYWwgb25lcyBp
bnRvCisJICAgbWVtb3J5LiAgKi8KKwlZWVNUWVBFICp5eXZzMSA9IHl5dnM7CisJeXl0eXBlX2lu
dDE2ICp5eXNzMSA9IHl5c3M7CisJWVlMVFlQRSAqeXlsczEgPSB5eWxzOworCisJLyogRWFjaCBz
dGFjayBwb2ludGVyIGFkZHJlc3MgaXMgZm9sbG93ZWQgYnkgdGhlIHNpemUgb2YgdGhlCisJICAg
ZGF0YSBpbiB1c2UgaW4gdGhhdCBzdGFjaywgaW4gYnl0ZXMuICBUaGlzIHVzZWQgdG8gYmUgYQor
CSAgIGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0IHRoZSB0d28gZXh0cmEgYXJncywgYnV0IHRoYXQg
bWlnaHQKKwkgICBiZSB1bmRlZmluZWQgaWYgeXlvdmVyZmxvdyBpcyBhIG1hY3JvLiAgKi8KKwl5
eW92ZXJmbG93IChZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSwKKwkJICAgICZ5eXNzMSwgeXlzaXpl
ICogc2l6ZW9mICgqeXlzc3ApLAorCQkgICAgJnl5dnMxLCB5eXNpemUgKiBzaXplb2YgKCp5eXZz
cCksCisJCSAgICAmeXlsczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5bHNwKSwKKwkJICAgICZ5eXN0
YWNrc2l6ZSk7CisKKwl5eWxzID0geXlsczE7CisJeXlzcyA9IHl5c3MxOworCXl5dnMgPSB5eXZz
MTsKKyAgICAgIH0KKyNlbHNlIC8qIG5vIHl5b3ZlcmZsb3cgKi8KKyMgaWZuZGVmIFlZU1RBQ0tf
UkVMT0NBVEUKKyAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7CisjIGVsc2UKKyAgICAgIC8qIEV4
dGVuZCB0aGUgc3RhY2sgb3VyIG93biB3YXkuICAqLworICAgICAgaWYgKFlZTUFYREVQVEggPD0g
eXlzdGFja3NpemUpCisJZ290byB5eWV4aGF1c3RlZGxhYjsKKyAgICAgIHl5c3RhY2tzaXplICo9
IDI7CisgICAgICBpZiAoWVlNQVhERVBUSCA8IHl5c3RhY2tzaXplKQorCXl5c3RhY2tzaXplID0g
WVlNQVhERVBUSDsKKworICAgICAgeworCXl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOworCXVu
aW9uIHl5YWxsb2MgKnl5cHRyID0KKwkgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tfQUxMT0Mg
KFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7CisJaWYgKCEgeXlwdHIpCisJICBnb3RvIHl5
ZXhoYXVzdGVkbGFiOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3NfYWxsb2MsIHl5c3MpOworCVlZ
U1RBQ0tfUkVMT0NBVEUgKHl5dnNfYWxsb2MsIHl5dnMpOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5
bHNfYWxsb2MsIHl5bHMpOworIyAgdW5kZWYgWVlTVEFDS19SRUxPQ0FURQorCWlmICh5eXNzMSAh
PSB5eXNzYSkKKwkgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOworICAgICAgfQorIyBlbmRpZgorI2Vu
ZGlmIC8qIG5vIHl5b3ZlcmZsb3cgKi8KKworICAgICAgeXlzc3AgPSB5eXNzICsgeXlzaXplIC0g
MTsKKyAgICAgIHl5dnNwID0geXl2cyArIHl5c2l6ZSAtIDE7CisgICAgICB5eWxzcCA9IHl5bHMg
KyB5eXNpemUgLSAxOworCisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFjayBzaXplIGlu
Y3JlYXNlZCB0byAlbHVcbiIsCisJCSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkp
OworCisgICAgICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkKKwlZWUFCT1JU
OworICAgIH0KKworICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwg
eXlzdGF0ZSkpOworCisgIGlmICh5eXN0YXRlID09IFlZRklOQUwpCisgICAgWVlBQ0NFUFQ7CisK
KyAgZ290byB5eWJhY2t1cDsKKworLyotLS0tLS0tLS0tLS4KK3wgeXliYWNrdXAuICB8CitgLS0t
LS0tLS0tLS0qLworeXliYWNrdXA6CisKKyAgLyogRG8gYXBwcm9wcmlhdGUgcHJvY2Vzc2luZyBn
aXZlbiB0aGUgY3VycmVudCBzdGF0ZS4gIFJlYWQgYQorICAgICBsb29rYWhlYWQgdG9rZW4gaWYg
d2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworCisgIC8qIEZpcnN0
IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0IHJlZmVyZW5jZSB0byBsb29rYWhlYWQg
dG9rZW4uICAqLworICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisgIGlmICh5eXBhY3RfdmFsdWVf
aXNfZGVmYXVsdCAoeXluKSkKKyAgICBnb3RvIHl5ZGVmYXVsdDsKKworICAvKiBOb3Qga25vd24g
PT4gZ2V0IGEgbG9va2FoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLwor
CisgIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRiBvciBhIHZhbGlkIGxvb2th
aGVhZCBzeW1ib2wuICAqLworICBpZiAoeXljaGFyID09IFlZRU1QVFkpCisgICAgeworICAgICAg
WVlEUFJJTlRGICgoc3RkZXJyLCAiUmVhZGluZyBhIHRva2VuOiAiKSk7CisgICAgICB5eWNoYXIg
PSBZWUxFWDsKKyAgICB9CisKKyAgaWYgKHl5Y2hhciA8PSBZWUVPRikKKyAgICB7CisgICAgICB5
eWNoYXIgPSB5eXRva2VuID0gWVlFT0Y7CisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJOb3cg
YXQgZW5kIG9mIGlucHV0LlxuIikpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHl5dG9r
ZW4gPSBZWVRSQU5TTEFURSAoeXljaGFyKTsKKyAgICAgIFlZX1NZTUJPTF9QUklOVCAoIk5leHQg
dG9rZW4gaXMiLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKKyAgICB9CisKKyAgLyogSWYg
dGhlIHByb3BlciBhY3Rpb24gb24gc2VlaW5nIHRva2VuIFlZVE9LRU4gaXMgdG8gcmVkdWNlIG9y
IHRvCisgICAgIGRldGVjdCBhbiBlcnJvciwgdGFrZSB0aGF0IGFjdGlvbi4gICovCisgIHl5biAr
PSB5eXRva2VuOworICBpZiAoeXluIDwgMCB8fCBZWUxBU1QgPCB5eW4gfHwgeXljaGVja1t5eW5d
ICE9IHl5dG9rZW4pCisgICAgZ290byB5eWRlZmF1bHQ7CisgIHl5biA9IHl5dGFibGVbeXluXTsK
KyAgaWYgKHl5biA8PSAwKQorICAgIHsKKyAgICAgIGlmICh5eXRhYmxlX3ZhbHVlX2lzX2Vycm9y
ICh5eW4pKQorICAgICAgICBnb3RvIHl5ZXJybGFiOworICAgICAgeXluID0gLXl5bjsKKyAgICAg
IGdvdG8geXlyZWR1Y2U7CisgICAgfQorCisgIC8qIENvdW50IHRva2VucyBzaGlmdGVkIHNpbmNl
IGVycm9yOyBhZnRlciB0aHJlZSwgdHVybiBvZmYgZXJyb3IKKyAgICAgc3RhdHVzLiAgKi8KKyAg
aWYgKHl5ZXJyc3RhdHVzKQorICAgIHl5ZXJyc3RhdHVzLS07CisKKyAgLyogU2hpZnQgdGhlIGxv
b2thaGVhZCB0b2tlbi4gICovCisgIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXl0b2tl
biwgJnl5bHZhbCwgJnl5bGxvYyk7CisKKyAgLyogRGlzY2FyZCB0aGUgc2hpZnRlZCB0b2tlbi4g
ICovCisgIHl5Y2hhciA9IFlZRU1QVFk7CisKKyAgeXlzdGF0ZSA9IHl5bjsKKyAgWVlfSUdOT1JF
X01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4KKyAgKisreXl2c3AgPSB5eWx2YWw7CisgIFlZX0lH
Tk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORAorICAqKyt5eWxzcCA9IHl5bGxvYzsKKyAgZ290
byB5eW5ld3N0YXRlOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZGVmYXVsdCAtLSBkbyB0aGUgZGVmYXVsdCBh
Y3Rpb24gZm9yIHRoZSBjdXJyZW50IHN0YXRlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZGVmYXVsdDoKKyAgeXlu
ID0geXlkZWZhY3RbeXlzdGF0ZV07CisgIGlmICh5eW4gPT0gMCkKKyAgICBnb3RvIHl5ZXJybGFi
OworICBnb3RvIHl5cmVkdWNlOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0u
Cit8IHl5cmVkdWNlIC0tIERvIGEgcmVkdWN0aW9uLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKi8KK3l5cmVkdWNlOgorICAvKiB5eW4gaXMgdGhlIG51bWJlciBvZiBhIHJ1bGUg
dG8gcmVkdWNlIHdpdGguICAqLworICB5eWxlbiA9IHl5cjJbeXluXTsKKworICAvKiBJZiBZWUxF
TiBpcyBub256ZXJvLCBpbXBsZW1lbnQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGFjdGlvbjoK
KyAgICAgYCQkID0gJDEnLgorCisgICAgIE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZyBsaW5lIHNl
dHMgWVlWQUwgdG8gZ2FyYmFnZS4KKyAgICAgVGhpcyBiZWhhdmlvciBpcyB1bmRvY3VtZW50ZWQg
YW5kIEJpc29uCisgICAgIHVzZXJzIHNob3VsZCBub3QgcmVseSB1cG9uIGl0LiAgQXNzaWduaW5n
IHRvIFlZVkFMCisgICAgIHVuY29uZGl0aW9uYWxseSBtYWtlcyB0aGUgcGFyc2VyIGEgYml0IHNt
YWxsZXIsIGFuZCBpdCBhdm9pZHMgYQorICAgICBHQ0Mgd2FybmluZyB0aGF0IFlZVkFMIG1heSBi
ZSB1c2VkIHVuaW5pdGlhbGl6ZWQuICAqLworICB5eXZhbCA9IHl5dnNwWzEteXlsZW5dOworCisg
IC8qIERlZmF1bHQgbG9jYXRpb24uICAqLworICBZWUxMT0NfREVGQVVMVCAoeXlsb2MsICh5eWxz
cCAtIHl5bGVuKSwgeXlsZW4pOworICBZWV9SRURVQ0VfUFJJTlQgKHl5bik7CisgIHN3aXRjaCAo
eXluKQorICAgIHsKKyAgICAgICAgY2FzZSA0OgorCisgICAgeworICAgICAgICAvLyBUaGUgc3lt
Ym9sIHRhYmxlIHNlYXJjaCB3YXMgZG9uZSBpbiB0aGUgbGV4aWNhbCBwaGFzZQorICAgICAgICBj
b25zdCBUU3ltYm9sICpzeW1ib2wgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN5bWJvbDsKKyAg
ICAgICAgY29uc3QgVFZhcmlhYmxlICp2YXJpYWJsZSA9IDA7CisKKyAgICAgICAgaWYgKCFzeW1i
b2wpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAo
MSldKSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciIsICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3Ry
aW5nLT5jX3N0cigpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmICghc3ltYm9sLT5pc1ZhcmlhYmxlKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgInZhcmlhYmxlIGV4
cGVjdGVkIiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOworICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxjb25zdCBUVmFyaWFibGUq
PihzeW1ib2wpOworCisgICAgICAgICAgICBpZiAoY29udGV4dC0+c3ltYm9sVGFibGUuZmluZEJ1
aWx0SW4odmFyaWFibGUtPmdldE5hbWUoKSkgJiYKKyAgICAgICAgICAgICAgICAhdmFyaWFibGUt
PmdldEV4dGVuc2lvbigpLmVtcHR5KCkgJiYKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5leHRl
bnNpb25FcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgdmFyaWFibGUtPmdldEV4dGVuc2lv
bigpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXZhcmlhYmxlKQorICAg
ICAgICB7CisgICAgICAgICAgICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQpOwor
ICAgICAgICAgICAgVFZhcmlhYmxlICpmYWtlVmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCh5eXZz
cFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLCB0eXBlKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnN5
bWJvbFRhYmxlLmluc2VydCgqZmFrZVZhcmlhYmxlKTsKKyAgICAgICAgICAgIHZhcmlhYmxlID0g
ZmFrZVZhcmlhYmxlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHZhcmlhYmxlLT5nZXRUeXBl
KCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIENv
bnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSB2YXJpYWJsZS0+Z2V0Q29uc3RQb2ludGVyKCk7Cisg
ICAgICAgICAgICBUVHlwZSB0KHZhcmlhYmxlLT5nZXRUeXBlKCkpOworICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENv
bnN0YW50VW5pb24oY29uc3RBcnJheSwgdCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUt
PmdldFVuaXF1ZUlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyaWFibGUtPmdldE5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eWxzcFsoMSkgLSAoMSldKSk7
CisgICAgICAgIH0KKworICAgICAgICAvLyBkb24ndCBkZWxldGUgJDEuc3RyaW5nLCBpdCdzIHVz
ZWQgYnkgZXJyb3IgcmVjb3ZlcnksIGFuZCB0aGUgcG9vbAorICAgICAgICAvLyBwb3Agd2lsbCBy
ZWNsYWltIHRoZSBtZW1vcnkKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA1OgorCisgICAg
eworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSA2OgorCisgICAgeworICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bMV07CisgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdCgoeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLmkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlw
ZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDc6CisKKyAgICB7CisgICAgICAgIENvbnN0YW50
VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgdW5pb25B
cnJheS0+c2V0RkNvbnN0KCh5eXZzcFsoMSkgLSAoMSldLmxleCkuZik7CisgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25z
dGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUNv
bnN0KSwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA4
OgorCisgICAgeworICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bMV07CisgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdCgoeXl2c3BbKDEpIC0g
KDEpXS5sZXgpLmIpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShF
YnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDoKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTE6CisK
KyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQt
PmFkZEluZGV4RXhwcmVzc2lvbigoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5bHNwWygyKSAtICg0KV0pLCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTI6CisKKyAgICB7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEz
OgorCisgICAgeworICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmlzQXJyYXkoKSkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNw
WygzKSAtICgzKV0pLCAiY2Fubm90IGFwcGx5IGRvdCBvcGVyYXRvciB0byBhbiBhcnJheSIsICIu
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzVmVjdG9y
KCkpIHsKKyAgICAgICAgICAgIFRWZWN0b3JGaWVsZHMgZmllbGRzOworICAgICAgICAgICAgaWYg
KCEgY29udGV4dC0+cGFyc2VWZWN0b3JGaWVsZHMoKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3Ry
aW5nLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Tm9taW5h
bFNpemUoKSwgZmllbGRzLCAoeXlsc3BbKDMpIC0gKDMpXSkpKSB7CisgICAgICAgICAgICAgICAg
ZmllbGRzLm51bSA9IDE7CisgICAgICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbMF0gPSAwOwor
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsgLy8gY29uc3RhbnQgZm9sZGlu
ZyBmb3IgdmVjdG9yIGZpZWxkcworICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9IGNvbnRleHQtPmFkZENvbnN0VmVjdG9yTm9kZShmaWVsZHMsICh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDMpIC0gKDMpXSkpOwor
ICAgICAgICAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkg
eworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5nZXRQcmVjaXNpb24oKSwgRXZxQ29uc3QsIChpbnQpICgqKHl5dnNwWygzKSAtICgz
KV0ubGV4KS5zdHJpbmcpLnNpemUoKSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBUU3RyaW5nIHZlY3RvclN0cmluZyA9ICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0
cmluZzsKKyAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZFN3aXp6bGUoZmllbGRzLCAoeXlsc3BbKDMpIC0gKDMpXSkpOworICAgICAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRJbmRleChFT3BWZWN0b3JTd2l6emxlLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eWxzcFsoMikgLSAoMyldKSk7CisgICAgICAg
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKFRUeXBlKCh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRCYXNpY1R5cGUoKSwg
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFByZWNpc2lvbigp
LCBFdnFUZW1wb3JhcnksIChpbnQpIHZlY3RvclN0cmluZy5zaXplKCkpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgVE1hdHJpeEZpZWxkcyBmaWVsZHM7
CisgICAgICAgICAgICBpZiAoISBjb250ZXh0LT5wYXJzZU1hdHJpeEZpZWxkcygqKHl5dnNwWygz
KSAtICgzKV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5nZXROb21pbmFsU2l6ZSgpLCBmaWVsZHMsICh5eWxzcFsoMykgLSAoMyldKSkpIHsK
KyAgICAgICAgICAgICAgICBmaWVsZHMud2hvbGVSb3cgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBmaWVsZHMud2hvbGVDb2wgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmaWVsZHMucm93ID0g
MDsKKyAgICAgICAgICAgICAgICBmaWVsZHMuY29sID0gMDsKKyAgICAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChmaWVsZHMu
d2hvbGVSb3cgfHwgZmllbGRzLndob2xlQ29sKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1l
bnRlZCB5ZXQiLCAiLiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bMV07CisgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDApOworICAgICAg
ICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
Q29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZx
Q29uc3QpLCAoeXlsc3BbKDMpIC0gKDMpXSkpOworICAgICAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJ
bmRleERpcmVjdCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGlu
ZGV4LCAoeXlsc3BbKDIpIC0gKDMpXSkpOworICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSxFdnFUZW1wb3JhcnksICh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXROb21pbmFsU2l6ZSgpKSk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9u
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICB1bmlvbkFycmF5
LT5zZXRJQ29uc3QoZmllbGRzLmNvbCAqICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5nZXROb21pbmFsU2l6ZSgpICsgZmllbGRzLnJvdyk7CisgICAgICAgICAgICAg
ICAgVEludGVybVR5cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFu
dFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCks
ICh5eWxzcFsoMykgLSAoMyldKSk7CisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGly
ZWN0LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5
eWxzcFsoMikgLSAoMyldKSk7CisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5zZXRUeXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5nZXRCYXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldFByZWNpc2lvbigpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJh
c2ljVHlwZSgpID09IEVidFN0cnVjdCkgeworICAgICAgICAgICAgYm9vbCBmaWVsZEZvdW5kID0g
ZmFsc2U7CisgICAgICAgICAgICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpLT5m
aWVsZHMoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBpOworICAgICAgICAgICAgZm9yIChp
ID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChmaWVs
ZHNbaV0tPm5hbWUoKSA9PSAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZmllbGRGb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChm
aWVsZEZvdW5kKSB7CisgICAgICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3Qp
IHsKKyAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+YWRkQ29uc3RTdHJ1Y3QoKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgz
KV0pKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZSgqZmllbGRzW2ld
LT50eXBlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlIHRoZSBxdWFsaWZp
ZXIgb2YgdGhlIHJldHVybiB0eXBlLCBub3Qgb2YgdGhlIHN0cnVjdHVyZSBmaWVsZAorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gYXMgdGhlIHN0cnVjdHVyZSBkZWZpbml0aW9uIGlzIHNoYXJl
ZCBiZXR3ZWVuIHZhcmlvdXMgc3RydWN0dXJlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlm
aWVyKEV2cUNvbnN0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBu
ZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0
SUNvbnN0KGkpOworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgKmZpZWxkc1tp
XS0+dHlwZSgpLCAoeXlsc3BbKDMpIC0gKDMpXSkpOworICAgICAgICAgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5k
ZXgoRU9wSW5kZXhEaXJlY3RTdHJ1Y3QsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLCBpbmRleCwgKHl5bHNwWygyKSAtICgzKV0pKTsKKyAgICAgICAgICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKCpmaWVsZHNbaV0tPnR5
cGUoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICIgbm8gc3VjaCBmaWVs
ZCBpbiBzdHJ1Y3R1cmUiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7
CisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiIGZpZWxkIHNlbGVjdGlv
biByZXF1aXJlcyBzdHJ1Y3R1cmUsIHZlY3Rvciwgb3IgbWF0cml4IG9uIGxlZnQgaGFuZCBzaWRl
IiwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOworICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gZG9uJ3QgZGVsZXRlICQzLnN0cmluZywgaXQncyBmcm9tIHRoZSBw
b29sCisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTQ6CisKKyAgICB7CisgICAgICAgIGlm
IChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgIisrIiwgKHl5
dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQorICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFBvc3RJbmNyZW1lbnQsICh5
eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDIp
XSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3Io
KHl5bHNwWygyKSAtICgyKV0pLCAiKysiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBicmVhazsKKworICBjYXNlIDE1OgorCisgICAgeworICAgICAgICBpZiAoY29udGV4
dC0+bFZhbHVlRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksICItLSIsICh5eXZzcFsoMSkg
LSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQb3N0RGVjcmVtZW50LCAoeXl2c3BbKDEp
IC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgyKV0pLCBjb250
ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKCh5eWxzcFso
MikgLSAoMildKSwgIi0tIiwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAxNjoKKworICAgIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPmludGVn
ZXJFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAi
W10iKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTc6CisKKyAgICB7CisgICAg
ICAgIFRGdW5jdGlvbiogZm5DYWxsID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5mdW5jdGlv
bjsKKyAgICAgICAgVE9wZXJhdG9yIG9wID0gZm5DYWxsLT5nZXRCdWlsdEluT3AoKTsKKworICAg
ICAgICBpZiAob3AgIT0gRU9wTnVsbCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgIC8vIFRoZW4gdGhpcyBzaG91bGQgYmUgYSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgICAg
IC8vIERvbid0IGdvIHRocm91Z2ggdGhlIHN5bWJvbCB0YWJsZSBmb3IgY29uc3RydWN0b3JzLgor
ICAgICAgICAgICAgLy8gVGhlaXIgcGFyYW1ldGVycyB3aWxsIGJlIHZlcmlmaWVkIGFsZ29yaXRo
bWljYWxseS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBUVHlwZSB0eXBlKEVidFZvaWQs
IEVicFVuZGVmaW5lZCk7ICAvLyB1c2UgdGhpcyB0byBnZXQgdGhlIHR5cGUgYmFjaworICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmNvbnN0cnVjdG9yRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDEp
XSksICh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZSwgKmZuQ2FsbCwgb3AsICZ0
eXBlKSkgeworICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAgICAgLy8gSXQncyBhIGNvbnN0cnVjdG9yLCBvZiB0eXBlICd0eXBlJy4KKyAgICAgICAgICAg
ICAgICAvLworICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmFkZENvbnN0cnVjdG9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJt
Tm9kZSwgJnR5cGUsIG9wLCBmbkNhbGwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0g
MCkgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
c2V0QWdncmVnYXRlT3BlcmF0b3IoMCwgb3AsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5
cGUodHlwZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAg
Ly8gTm90IGEgY29uc3RydWN0b3IuICBGaW5kIGl0IGluIHRoZSBzeW1ib2wgdGFibGUuCisgICAg
ICAgICAgICAvLworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uKiBmbkNhbmRpZGF0ZTsKKyAg
ICAgICAgICAgIGJvb2wgYnVpbHRJbjsKKyAgICAgICAgICAgIGZuQ2FuZGlkYXRlID0gY29udGV4
dC0+ZmluZEZ1bmN0aW9uKCh5eWxzcFsoMSkgLSAoMSldKSwgZm5DYWxsLCAmYnVpbHRJbik7Cisg
ICAgICAgICAgICBpZiAoZm5DYW5kaWRhdGUpIHsKKyAgICAgICAgICAgICAgICAvLworICAgICAg
ICAgICAgICAgIC8vIEEgZGVjbGFyZWQgZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgICAgICBpZiAoYnVpbHRJbiAmJiAhZm5DYW5kaWRhdGUtPmdldEV4dGVuc2lvbigp
LmVtcHR5KCkgJiYKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JD
aGVjaygoeXlsc3BbKDEpIC0gKDEpXSksIGZuQ2FuZGlkYXRlLT5nZXRFeHRlbnNpb24oKSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBvcCA9IGZuQ2FuZGlkYXRlLT5nZXRCdWlsdEluT3AoKTsKKyAg
ICAgICAgICAgICAgICBpZiAoYnVpbHRJbiAmJiBvcCAhPSBFT3BOdWxsKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8vIEEgZnVuY3Rpb24gY2FsbCBtYXBw
ZWQgdG8gYSBidWlsdC1pbiBvcGVyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAgICAgICAgIGlmIChmbkNhbmRpZGF0ZS0+Z2V0UGFyYW1Db3VudCgpID09IDEpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBU
cmVhdCBpdCBsaWtlIGEgYnVpbHQtaW4gdW5hcnkgb3BlcmF0b3IuCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChvcCwgKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCAoeXlsc3BbKDEpIC0gKDEpXSksIGNvbnRl
eHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJidWlsdCBpbiB1bmFyeSBvcGVyYXRvciBmdW5j
dGlvbi4gIFR5cGU6ICIgPDwgc3RhdGljX2Nhc3Q8VEludGVybVR5cGVkKj4oKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJl
YW0uc3RyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCksICIgd3Jvbmcgb3Bl
cmFuZCB0eXBlIiwgIkludGVybmFsIEVycm9yIiwgZXh0cmFJbmZvLmNfc3RyKCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFlZRVJST1I7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0
QWdncmVnYXRlT3BlcmF0b3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdh
dGUsIG9wLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHJl
YWwgZnVuY3Rpb24gY2FsbAorCisgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRv
cigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSwgRU9wRnVuY3Rpb25D
YWxsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoZm5DYW5kaWRhdGUtPmdldFJldHVyblR5cGUo
KSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBob3cgd2Uga25vdyB3aGV0aGVy
IHRoZSBnaXZlbiBmdW5jdGlvbiBpcyBhIGJ1aWx0SW4gZnVuY3Rpb24gb3IgYSB1c2VyIGRlZmlu
ZWQgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgLy8gaWYgYnVpbHRJbiA9PSBmYWxzZSwg
aXQncyBhIHVzZXJEZWZpbmVkIC0+IGNvdWxkIGJlIGFuIG92ZXJsb2FkZWQgYnVpbHRJbiBmdW5j
dGlvbiBhbHNvCisgICAgICAgICAgICAgICAgICAgIC8vIGlmIGJ1aWx0SW4gPT0gdHJ1ZSwgaXQn
cyBkZWZpbml0ZWx5IGEgYnVpbHRJbiBmdW5jdGlvbiB3aXRoIEVPcE51bGwKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFidWlsdEluKQorICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRVc2VyRGVmaW5lZCgp
OworICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dEFzQWdncmVnYXRlKCktPnNldE5hbWUoZm5DYW5kaWRhdGUtPmdldE1hbmdsZWROYW1lKCkpOwor
CisgICAgICAgICAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbDsKKyAgICAgICAgICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmbkNhbmRpZGF0ZS0+Z2V0UGFyYW1Db3VudCgpOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHF1YWwgPSBmbkNhbmRpZGF0ZS0+Z2V0UGFy
YW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cXVhbCA9PSBFdnFPdXQgfHwgcXVhbCA9PSBFdnFJbk91dCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0TGluZSgpLCAiYXNzaWduIiwgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgpW2ldLT5nZXRBc1R5cGVk
KCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiQ29uc3RhbnQg
dmFsdWUgY2Fubm90IGJlIHBhc3NlZCBmb3IgJ291dCcgb3IgJ2lub3V0JyBwYXJhbWV0ZXJzLiIs
ICJFcnJvciIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShmbkNhbmRp
ZGF0ZS0+Z2V0UmV0dXJuVHlwZSgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgLy8gZXJyb3IgbWVzc2FnZSB3YXMgcHV0IG91dCBieSBQYUZpbmRGdW5jdGlvbigpCisg
ICAgICAgICAgICAgICAgLy8gUHV0IG9uIGEgZHVtbXkgbm9kZSBmb3IgZXJyb3IgcmVjb3ZlcnkK
KyAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50
VW5pb25bMV07CisgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0RkNvbnN0KDAuMGYpOwor
ICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEZsb2F0
LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgZGVsZXRlIGZuQ2FsbDsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxODoKKwor
ICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0p
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE5OgorCisgICAgeworICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXlsc3BbKDMpIC0gKDMpXSksICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVk
IiwgIiIpOworICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0pID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAyMDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0g
KDIpXS5pbnRlcm0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDIxOgorCisgICAgewor
ICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybSk7CisgICAg
fQorICAgIGJyZWFrOworCisgIGNhc2UgMjI6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRl
cm0pLmZ1bmN0aW9uID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKTsKKyAgICAg
ICAgKHl5dmFsLmludGVybSkuaW50ZXJtTm9kZSA9IDA7CisgICAgfQorICAgIGJyZWFrOworCisg
IGNhc2UgMjM6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmZ1bmN0aW9uKTsKKyAgICAgICAgKHl5dmFsLmludGVybSku
aW50ZXJtTm9kZSA9IDA7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMjQ6CisKKyAgICB7
CisgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7IDAsIG5ldyBUVHlwZSgoeXl2c3BbKDIpIC0g
KDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpKSB9OworICAgICAgICAoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5hZGRQYXJhbWV0ZXIocGFyYW0pOworICAg
ICAgICAoeXl2YWwuaW50ZXJtKS5mdW5jdGlvbiA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5m
dW5jdGlvbik7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybU5vZGUgPSAoeXl2c3BbKDIp
IC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAyNToKKworICAgIHsKKyAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRU
eXBlKCh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkp
IH07CisgICAgICAgICh5eXZzcFsoMSkgLSAoMyldLmludGVybSkuZnVuY3Rpb24tPmFkZFBhcmFt
ZXRlcihwYXJhbSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uID0gKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtKS5mdW5jdGlvbjsKKyAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJt
Tm9kZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAo
MyldLmludGVybSkuaW50ZXJtTm9kZSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNh
c2UgMjY6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAyNzoKKworICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQ29uc3RydWN0b3IKKyAgICAg
ICAgLy8KKyAgICAgICAgVE9wZXJhdG9yIG9wID0gRU9wTnVsbDsKKyAgICAgICAgaWYgKCh5eXZz
cFsoMSkgLSAoMSldLmludGVybS50eXBlKS51c2VyRGVmKSB7CisgICAgICAgICAgICBvcCA9IEVP
cENvbnN0cnVjdFN0cnVjdDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2Ug
RWJ0RmxvYXQ6CisgICAgICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50
eXBlKS5tYXRyaXgpIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoKCh5eXZzcFsoMSkgLSAo
MSldLmludGVybS50eXBlKS5zaXplKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3Ag
PSBFT3BDb25zdHJ1Y3RNYXQyOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzog
b3AgPSBFT3BDb25zdHJ1Y3RNYXQzOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
NDogb3AgPSBFT3BDb25zdHJ1Y3RNYXQ0OyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2goKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnNpemUpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSAxOiBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OyBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdFZlYzI7ICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVjdFZlYzM7ICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVjdFZlYzQ7ICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgRWJ0SW50OgorICAgICAgICAgICAgICAgIHN3aXRjaCgoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuc2l6ZSkgeworICAgICAgICAgICAgICAgIGNhc2UgMTog
b3AgPSBFT3BDb25zdHJ1Y3RJbnQ7ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOiBv
cCA9IEVPcENvbnN0cnVjdElWZWMyOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IG9w
ID0gRU9wQ29uc3RydWN0SVZlYzM7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDogb3Ag
PSBFT3BDb25zdHJ1Y3RJVmVjNDsgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRCb29sOgorICAgICAgICAgICAgICAg
IHN3aXRjaCgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuc2l6ZSkgeworICAgICAgICAg
ICAgICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RCb29sOyAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdEJWZWMyOyBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0QlZlYzM7IGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RCVmVjNDsgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob3AgPT0gRU9wTnVsbCkgeworICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgImNhbm5vdCBjb25z
dHJ1Y3QgdGhpcyB0eXBlIiwgZ2V0QmFzaWNTdHJpbmcoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LnR5cGUpLnR5cGUpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICAgICAgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5cGUgPSBFYnRGbG9h
dDsKKyAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIFRTdHJpbmcgdGVtcFN0cmluZzsKKyAgICAgICAgVFR5cGUg
dHlwZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkpOworICAgICAgICBURnVuY3Rpb24g
KmZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigmdGVtcFN0cmluZywgdHlwZSwgb3ApOworICAgICAg
ICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9IGZ1bmN0aW9uOworICAgIH0KKyAgICBicmVhazsK
KworICBjYXNlIDI4OgorCisgICAgeworICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJv
ckNoZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgKih5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5n
KSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgVFR5cGUgdHlwZShF
YnRWb2lkLCBFYnBVbmRlZmluZWQpOworICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gbmV3
IFRGdW5jdGlvbigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZywgdHlwZSk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gZnVuY3Rpb247CisgICAgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgMjk6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgIH0K
KyAgICBicmVhazsKKworICBjYXNlIDMwOgorCisgICAgeworICAgICAgICBpZiAoY29udGV4dC0+
bFZhbHVlRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDIpXSksICIrKyIsICh5eXZzcFsoMikgLSAo
MildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQcmVJbmNyZW1lbnQsICh5eXZzcFsoMikgLSAo
MildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDEpIC0gKDIpXSksIGNvbnRleHQt
PnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoKHl5bHNwWygxKSAt
ICgyKV0pLCAiKysiLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0g
KDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVh
azsKKworICBjYXNlIDMxOgorCisgICAgeworICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJy
b3JDaGVjaygoeXlsc3BbKDEpIC0gKDIpXSksICItLSIsICh5eXZzcFsoMikgLSAoMildLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFVuYXJ5TWF0aChFT3BQcmVEZWNyZW1lbnQsICh5eXZzcFsoMikgLSAoMildLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDEpIC0gKDIpXSksIGNvbnRleHQtPnN5bWJvbFRh
YmxlKTsKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7
CisgICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoKHl5bHNwWygxKSAtICgyKV0pLCAi
LS0iLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxl
dGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDMyOgorCisgICAgeworICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5v
cCAhPSBFT3BOdWxsKSB7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKCh5eXZzcFsoMSkgLSAoMild
LmludGVybSkub3AsICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAo
eXlsc3BbKDEpIC0gKDIpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgIGlm
ICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIqIGVycm9yT3AgPSAiIjsKKyAgICAgICAgICAgICAgICBzd2l0Y2goKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtKS5vcCkgeworICAgICAgICAgICAgICAgIGNhc2UgRU9wTmVnYXRp
dmU6ICAgZXJyb3JPcCA9ICItIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBFT3BMb2dp
Y2FsTm90OiBlcnJvck9wID0gIiEiOyBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udGV4dC0+dW5hcnlP
cEVycm9yKCh5eWxzcFsoMSkgLSAoMildKSwgZXJyb3JPcCwgKHl5dnNwWygyKSAtICgyKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAzMzoKKworICAgIHsgKHl5dmFs
LmludGVybSkub3AgPSBFT3BOdWxsOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAzNDoKKworICAg
IHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BOZWdhdGl2ZTsgfQorICAgIGJyZWFrOworCisgIGNh
c2UgMzU6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTG9naWNhbE5vdDsgfQorICAg
IGJyZWFrOworCisgIGNhc2UgMzY6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAzNzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTXVs
LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4
dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygy
KSAtICgzKV0pLCAiKiIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBicmVhazsKKworICBjYXNlIDM4OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChF
T3BEaXYsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3Bb
KDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBj
b250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXls
c3BbKDIpIC0gKDMpXSksICIvIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICB9Cisg
ICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMzk6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
OyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA0MDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1h
dGgoRU9wQWRkLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5
dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyld
KSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3Io
KHl5bHNwWygyKSAtICgzKV0pLCAiKyIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDQxOgorCisgICAgeworICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmlu
YXJ5TWF0aChFT3BTdWIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAt
ICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BF
cnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICItIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAg
ICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNDI6CisKKyAgICB7ICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA0MzoKKworICAgIHsgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDQ0OgorCisgICAgeworICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
QmluYXJ5TWF0aChFT3BMZXNzVGhhbiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXls
c3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5i
aW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIjwiLCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAq
dW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJh
eS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJy
YXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDIpIC0g
KDMpXSkpOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNDU6CisKKyAg
ICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuLCAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwor
ICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiPiIsICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmlu
ZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxl
dGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAg
ICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAg
ICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0
YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25z
dCksICh5eWxzcFsoMikgLSAoMyldKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSA0NjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTGVzc1RoYW5FcXVh
bCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRl
eHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFso
MikgLSAoMyldKSwgIjw9IiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29u
c3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7
CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBF
YnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygyKSAtICgzKV0pKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDQ3OgorCisgICAgeworICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5
TWF0aChFT3BHcmVhdGVyVGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5
eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQt
PmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiPj0iLCAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygz
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwor
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlv
biAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25B
cnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9u
QXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDIp
IC0gKDMpXSkpOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNDg6CisK
KyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA0OToKKwor
ICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wRXF1YWwsICh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAg
ICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAg
ICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICI9PSIsICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygp
LCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVT
dHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBD
b25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAg
ICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50
VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCks
ICh5eWxzcFsoMikgLSAoMyldKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSA1MDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTm90RXF1YWwsICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1i
b2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0g
MCkgeworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMp
XSksICIhPSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRD
b21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZp
bmVkLCBFdnFDb25zdCksICh5eWxzcFsoMikgLSAoMyldKSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSA1MToKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KKyAg
ICBicmVhazsKKworICBjYXNlIDUyOgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQorICAg
IGJyZWFrOworCisgIGNhc2UgNTM6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSA1NDoKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KKyAgICBi
cmVhazsKKworICBjYXNlIDU1OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dp
Y2FsQW5kLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNw
WygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwg
Y29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5
bHNwWygyKSAtICgzKV0pLCAiJiYiLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZh
bHNlKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJv
b2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOworICAgICAg
ICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNTY6CisKKyAgICB7ICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA1NzoKKworICAgIHsKKyAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJp
bmFyeU1hdGgoRU9wTG9naWNhbFhvciwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXls
c3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5i
aW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIl5eIiwgKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24g
KnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJy
YXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFy
cmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygyKSAt
ICgzKV0pKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDU4OgorCisg
ICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQorICAgIGJyZWFrOworCisgIGNhc2UgNTk6CisKKyAg
ICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxPciwgKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAg
ICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAg
ICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgInx8IiwgKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5n
KCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0
ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAg
IENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAg
ICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3Rh
bnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0
KSwgKHl5bHNwWygyKSAtICgzKV0pKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDYwOgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQorICAgIGJyZWFrOworCisg
IGNhc2UgNjE6CisKKyAgICB7CisgICAgICAgaWYgKGNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCh5
eWxzcFsoMikgLSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTZWxlY3Rp
b24oKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykg
LSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICg1KV0pKTsKKyAgICAgICAgaWYgKCh5eXZz
cFsoMykgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkgIT0gKHl5dnNw
Wyg1KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKSkKKyAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IDA7CisKKyAgICAgICAgaWYgKCh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0
LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoNSldKSwgIjoiLCAoeXl2c3BbKDMpIC0gKDUp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWyg1
KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwor
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWyg1KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2MjoKKworICAg
IHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDYzOgorCisgICAg
eworICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDMp
XSksICJhc3NpZ24iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkp
CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRBc3NpZ24oKHl5dnNw
WygyKSAtICgzKV0uaW50ZXJtKS5vcCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXls
c3BbKDIpIC0gKDMpXSkpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmFzc2lnbkVycm9yKCh5eWxzcFsoMikg
LSAoMyldKSwgImFzc2lnbiIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBicmVhazsKKworICBjYXNlIDY0OgorCisgICAgeyAoeXl2YWwuaW50ZXJtKS5vcCA9
IEVPcEFzc2lnbjsgfQorICAgIGJyZWFrOworCisgIGNhc2UgNjU6CisKKyAgICB7ICh5eXZhbC5p
bnRlcm0pLm9wID0gRU9wTXVsQXNzaWduOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2NjoKKwor
ICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BEaXZBc3NpZ247IH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDY3OgorCisgICAgeyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcEFkZEFzc2lnbjsgfQor
ICAgIGJyZWFrOworCisgIGNhc2UgNjg6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9w
U3ViQXNzaWduOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2OToKKworICAgIHsKKyAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNzA6CisKKyAg
ICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRDb21tYSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFso
MikgLSAoMyldKSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0g
KDMpXSksICIsIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFso
MykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICB9CisgICAgfQorICAg
IGJyZWFrOworCisgIGNhc2UgNzE6CisKKyAgICB7CisgICAgICAgIGlmIChjb250ZXh0LT5jb25z
dEVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQor
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3MjoKKworICAgIHsKKyAgICAgICAgVEZ1
bmN0aW9uICZmdW5jdGlvbiA9ICooKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5mdW5jdGlvbik7
CisgICAgICAgIAorICAgICAgICBUSW50ZXJtQWdncmVnYXRlICpwcm90b3R5cGUgPSBuZXcgVElu
dGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgcHJvdG90eXBlLT5zZXRUeXBlKGZ1bmN0aW9uLmdldFJl
dHVyblR5cGUoKSk7CisgICAgICAgIHByb3RvdHlwZS0+c2V0TmFtZShmdW5jdGlvbi5nZXROYW1l
KCkpOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbi5n
ZXRQYXJhbUNvdW50KCk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFBhcmFt
ZXRlciAmcGFyYW0gPSBmdW5jdGlvbi5nZXRQYXJhbShpKTsKKyAgICAgICAgICAgIGlmIChwYXJh
bS5uYW1lICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVFZhcmlhYmxlIHZh
cmlhYmxlKHBhcmFtLm5hbWUsICpwYXJhbS50eXBlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBwcm90b3R5cGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0
ZShwcm90b3R5cGUsIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUuZ2V0
VW5pcXVlSWQoKSwgdmFyaWFibGUuZ2V0TmFtZSgpLCB2YXJpYWJsZS5nZXRUeXBlKCksICh5eWxz
cFsoMSkgLSAoMildKSksICh5eWxzcFsoMSkgLSAoMildKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJvdG90eXBlID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUocHJvdG90eXBlLCBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICIiLCAqcGFyYW0udHlwZSwgKHl5bHNwWygxKSAtICgy
KV0pKSwgKHl5bHNwWygxKSAtICgyKV0pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgcHJvdG90eXBlLT5zZXRPcChFT3BQcm90b3R5cGUpOworICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gcHJvdG90eXBlOworCisgICAgICAgIGNvbnRleHQt
PnN5bWJvbFRhYmxlLnBvcCgpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDczOgorCisg
ICAgeworICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdh
dGUpCisgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0
ZS0+c2V0T3AoRU9wRGVjbGFyYXRpb24pOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5v
ZGUpID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGU7CisgICAgfQor
ICAgIGJyZWFrOworCisgIGNhc2UgNzQ6CisKKyAgICB7CisgICAgICAgIGlmICgoKHl5dnNwWygy
KSAtICg0KV0uaW50ZXJtLnByZWNpc2lvbikgPT0gRWJwSGlnaCkgJiYgKGNvbnRleHQtPnNoYWRl
clR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKSAmJiAhY29udGV4dC0+ZnJhZ21lbnRQcmVjaXNp
b25IaWdoKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDQpXSks
ICJwcmVjaXNpb24gaXMgbm90IHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXIiLCAiaGlnaHAi
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoIWNvbnRleHQtPnN5bWJvbFRhYmxlLnNldERlZmF1bHRQcmVjaXNpb24oICh5eXZzcFsoMykg
LSAoNCldLmludGVybS50eXBlKSwgKHl5dnNwWygyKSAtICg0KV0uaW50ZXJtLnByZWNpc2lvbikg
KSkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICg0KV0pLCAiaWxs
ZWdhbCB0eXBlIGFyZ3VtZW50IGZvciBkZWZhdWx0IHByZWNpc2lvbiBxdWFsaWZpZXIiLCBnZXRC
YXNpY1N0cmluZygoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0udHlwZSkudHlwZSkpOworICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSkgPSAwOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDc1OgorCisg
ICAgeworICAgICAgICAvLworICAgICAgICAvLyBNdWx0aXBsZSBkZWNsYXJhdGlvbnMgb2YgdGhl
IHNhbWUgZnVuY3Rpb24gYXJlIGFsbG93ZWQuCisgICAgICAgIC8vCisgICAgICAgIC8vIElmIHRo
aXMgaXMgYSBkZWZpbml0aW9uLCB0aGUgZGVmaW5pdGlvbiBwcm9kdWN0aW9uIGNvZGUgd2lsbCBj
aGVjayBmb3IgcmVkZWZpbml0aW9ucworICAgICAgICAvLyAod2UgZG9uJ3Qga25vdyBhdCB0aGlz
IHBvaW50IGlmIGl0J3MgYSBkZWZpbml0aW9uIG9yIG5vdCkuCisgICAgICAgIC8vCisgICAgICAg
IC8vIFJlZGVjbGFyYXRpb25zIGFyZSBhbGxvd2VkLiAgQnV0LCByZXR1cm4gdHlwZXMgYW5kIHBh
cmFtZXRlciBxdWFsaWZpZXJzIG11c3QgbWF0Y2guCisgICAgICAgIC8vCisgICAgICAgIFRGdW5j
dGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRh
YmxlLmZpbmQoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0TWFuZ2xlZE5h
bWUoKSkpOworICAgICAgICBpZiAocHJldkRlYykgeworICAgICAgICAgICAgaWYgKHByZXZEZWMt
PmdldFJldHVyblR5cGUoKSAhPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5n
ZXRSZXR1cm5UeXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3Bb
KDIpIC0gKDIpXSksICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0
dXJuIHR5cGUiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5U
eXBlKCkuZ2V0QmFzaWNTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBw
cmV2RGVjLT5nZXRQYXJhbUNvdW50KCk7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChwcmV2
RGVjLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSAoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSkgewor
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICJv
dmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmll
cnMiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBl
LT5nZXRRdWFsaWZpZXJTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICAvLworICAgICAgICAvLyBDaGVjayBmb3IgcHJldmlvdXNseSBkZWNsYXJlZCB2YXJp
YWJsZXMgdXNpbmcgdGhlIHNhbWUgbmFtZS4KKyAgICAgICAgLy8KKyAgICAgICAgVFN5bWJvbCAq
cHJldlN5bSA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtLmZ1bmN0aW9uKS0+Z2V0TmFtZSgpKTsKKyAgICAgICAgaWYgKHByZXZTeW0pCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmICghcHJldlN5bS0+aXNGdW5jdGlvbigpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgInJl
ZGVmaW5pdGlvbiIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldE5hbWUo
KS5jX3N0cigpLCAiZnVuY3Rpb24iKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICAvLyBJbnNlcnQgdGhlIHVubWFuZ2xlZCBuYW1lIHRvIGRldGVjdCBwb3RlbnRp
YWwgZnV0dXJlIHJlZGVmaW5pdGlvbiBhcyBhIHZhcmlhYmxlLgorICAgICAgICAgICAgY29udGV4
dC0+c3ltYm9sVGFibGUuZ2V0T3V0ZXJMZXZlbCgpLT5pbnNlcnQoKHl5dnNwWygxKSAtICgyKV0u
aW50ZXJtLmZ1bmN0aW9uKS0+Z2V0TmFtZSgpLCAqKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1
bmN0aW9uKSk7CisgICAgICAgIH0KKworICAgICAgICAvLworICAgICAgICAvLyBJZiB0aGlzIGlz
IGEgcmVkZWNsYXJhdGlvbiwgaXQgY291bGQgYWxzbyBiZSBhIGRlZmluaXRpb24sCisgICAgICAg
IC8vIGluIHdoaWNoIGNhc2UsIHdlIHdhbnQgdG8gdXNlIHRoZSB2YXJpYWJsZSBuYW1lcyBmcm9t
IHRoaXMgb25lLCBhbmQgbm90IHRoZSBvbmUgdGhhdCdzCisgICAgICAgIC8vIGJlaW5nIHJlZGVj
bGFyZWQuICBTbywgcGFzcyBiYWNrIHVwIHRoaXMgZGVjbGFyYXRpb24sIG5vdCB0aGUgb25lIGlu
IHRoZSBzeW1ib2wgdGFibGUuCisgICAgICAgIC8vCisgICAgICAgICh5eXZhbC5pbnRlcm0pLmZ1
bmN0aW9uID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKTsKKworICAgICAgICAv
LyBXZSdyZSBhdCB0aGUgaW5uZXIgc2NvcGUgbGV2ZWwgb2YgdGhlIGZ1bmN0aW9uJ3MgYXJndW1l
bnRzIGFuZCBib2R5IHN0YXRlbWVudC4KKyAgICAgICAgLy8gQWRkIHRoZSBmdW5jdGlvbiBwcm90
b3R5cGUgdG8gdGhlIHN1cnJvdW5kaW5nIHNjb3BlIGluc3RlYWQuCisgICAgICAgIGNvbnRleHQt
PnN5bWJvbFRhYmxlLmdldE91dGVyTGV2ZWwoKS0+aW5zZXJ0KCooeXl2YWwuaW50ZXJtKS5mdW5j
dGlvbik7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNzY6CisKKyAgICB7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmZ1bmN0
aW9uKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3NzoKKworICAgIHsKKyAgICAgICAg
KHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rp
b24pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDc4OgorCisgICAgeworICAgICAgICAv
LyBBZGQgdGhlIHBhcmFtZXRlcgorICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5
eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbik7CisgICAgICAgIGlmICgoeXl2c3BbKDIp
IC0gKDIpXS5pbnRlcm0pLnBhcmFtLnR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQpCisg
ICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5hZGRQYXJhbWV0
ZXIoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKS5wYXJhbSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGRlbGV0ZSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLnBhcmFtLnR5cGU7CisgICAg
fQorICAgIGJyZWFrOworCisgIGNhc2UgNzk6CisKKyAgICB7CisgICAgICAgIC8vCisgICAgICAg
IC8vIE9ubHkgZmlyc3QgcGFyYW1ldGVyIG9mIG9uZS1wYXJhbWV0ZXIgZnVuY3Rpb25zIGNhbiBi
ZSB2b2lkCisgICAgICAgIC8vIFRoZSBjaGVjayBmb3IgbmFtZWQgcGFyYW1ldGVycyBub3QgYmVp
bmcgdm9pZCBpcyBkb25lIGluIHBhcmFtZXRlcl9kZWNsYXJhdG9yCisgICAgICAgIC8vCisgICAg
ICAgIGlmICgoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pLnBhcmFtLnR5cGUtPmdldEJhc2ljVHlw
ZSgpID09IEVidFZvaWQpIHsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBUaGlzIHBh
cmFtZXRlciA+IGZpcnN0IGlzIHZvaWQKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICJjYW5ub3QgYmUgYW4gYXJndW1lbnQgdHlw
ZSBleGNlcHQgZm9yICcodm9pZCknIiwgInZvaWQiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgICAgIGRlbGV0ZSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pLnBh
cmFtLnR5cGU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBBZGQgdGhlIHBhcmFt
ZXRlcgorICAgICAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uZnVuY3Rpb24pOworICAgICAgICAgICAgKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLmZ1bmN0aW9uKS0+YWRkUGFyYW1ldGVyKCh5eXZzcFsoMykgLSAoMyldLmludGVybSkucGFy
YW0pOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgODA6CisKKyAgICB7
CisgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyICE9
IEV2cUdsb2JhbCAmJiAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyICE9
IEV2cVRlbXBvcmFyeSkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAt
ICgzKV0pLCAibm8gcXVhbGlmaWVycyBhbGxvd2VkIGZvciBmdW5jdGlvbiByZXR1cm4iLCBnZXRR
dWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcikp
OworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIC8v
IG1ha2Ugc3VyZSBhIHNhbXBsZXIgaXMgbm90IGludm9sdmVkIGFzIHdlbGwuLi4KKyAgICAgICAg
aWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgzKV0p
LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkpKQorICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworCisgICAgICAgIC8vIEFkZCB0aGUgZnVuY3Rpb24gYXMgYSBwcm90b3R5cGUg
YWZ0ZXIgcGFyc2luZyBpdCAod2UgZG8gbm90IHN1cHBvcnQgcmVjdXJzaW9uKQorICAgICAgICBU
RnVuY3Rpb24gKmZ1bmN0aW9uOworICAgICAgICBUVHlwZSB0eXBlKCh5eXZzcFsoMSkgLSAoMyld
LmludGVybS50eXBlKSk7CisgICAgICAgIGZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigoeXl2c3Bb
KDIpIC0gKDMpXS5sZXgpLnN0cmluZywgdHlwZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uZnVu
Y3Rpb24pID0gZnVuY3Rpb247CisgICAgICAgIAorICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5wdXNoKCk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgODE6CisKKyAgICB7CisgICAg
ICAgIGlmICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRWb2lkKSB7
CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICJpbGxlZ2Fs
IHVzZSBvZiB0eXBlICd2b2lkJyIsICh5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLT5jX3N0
cigpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgKih5
eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsoeXl2c3BbKDIpIC0gKDIpXS5sZXgp
LnN0cmluZywgbmV3IFRUeXBlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKSl9OworICAg
ICAgICAoeXl2YWwuaW50ZXJtKS5wYXJhbSA9IHBhcmFtOworICAgIH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDgyOgorCisgICAgeworICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGNhbiBtYWtlIGFu
IGFycmF5IG91dCBvZiB0aGlzIHR5cGUKKyAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVy
cm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0pLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlw
ZSkpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmIChjb250
ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg1KV0pLCAqKHl5dnNwWygyKSAt
ICg1KV0ubGV4KS5zdHJpbmcpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisg
ICAgICAgIGludCBzaXplOworICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVj
aygoeXlsc3BbKDMpIC0gKDUpXSksICh5eXZzcFsoNCkgLSAoNSldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLCBzaXplKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
KHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpLnNldEFycmF5KHRydWUsIHNpemUpOworCisg
ICAgICAgIFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKCh5eXZzcFsoMSkgLSAoNSldLmludGVybS50
eXBlKSk7CisgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7ICh5eXZzcFsoMikgLSAoNSldLmxl
eCkuc3RyaW5nLCB0eXBlIH07CisgICAgICAgICh5eXZhbC5pbnRlcm0pLnBhcmFtID0gcGFyYW07
CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgODM6CisKKyAgICB7CisgICAgICAgICh5eXZh
bC5pbnRlcm0pID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKTsKKyAgICAgICAgaWYgKGNvbnRl
eHQtPnBhcmFtRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDMpXSksICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS50eXBlKS5xdWFsaWZpZXIsICh5eXZzcFsoMikgLSAoMyldLmludGVybS5xdWFsaWZp
ZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJhbS50eXBlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA4NDoKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pOworICAgICAgICBp
ZiAoY29udGV4dC0+cGFyYW1ldGVyU2FtcGxlckVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgyKV0p
LCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0ucXVhbGlmaWVyKSwgKih5eXZzcFsoMikgLSAoMild
LmludGVybSkucGFyYW0udHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgyKV0pLCBF
dnFUZW1wb3JhcnksICh5eXZzcFsoMSkgLSAoMildLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwu
aW50ZXJtKS5wYXJhbS50eXBlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA4NToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmlu
dGVybSkgPSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pOworICAgICAgICBpZiAoY29udGV4dC0+
cGFyYW1FcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoMyldKSwgKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLnR5cGUpLnF1YWxpZmllciwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciks
ICh5eXZhbC5pbnRlcm0pLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDg2OgorCisgICAgeworICAgICAgICAo
eXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybSk7CisgICAgICAgIGlmIChj
b250ZXh0LT5wYXJhbWV0ZXJTYW1wbGVyRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksICh5
eXZzcFsoMSkgLSAoMildLmludGVybS5xdWFsaWZpZXIpLCAqKHl5dnNwWygyKSAtICgyKV0uaW50
ZXJtKS5wYXJhbS50eXBlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksIEV2cVRl
bXBvcmFyeSwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRl
cm0pLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgIH0K
KyAgICBicmVhazsKKworICBjYXNlIDg3OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJt
LnF1YWxpZmllcikgPSBFdnFJbjsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA4ODoKKwor
ICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5xdWFsaWZpZXIpID0gRXZxSW47CisgICAgfQor
ICAgIGJyZWFrOworCisgIGNhc2UgODk6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
cXVhbGlmaWVyKSA9IEV2cU91dDsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5MDoKKwor
ICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5xdWFsaWZpZXIpID0gRXZxSW5PdXQ7CisgICAg
fQorICAgIGJyZWFrOworCisgIGNhc2UgOTE6CisKKyAgICB7CisgICAgICAgIFRQYXJhbWV0ZXIg
cGFyYW0gPSB7IDAsIG5ldyBUVHlwZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkpIH07
CisgICAgICAgICh5eXZhbC5pbnRlcm0pLnBhcmFtID0gcGFyYW07CisgICAgfQorICAgIGJyZWFr
OworCisgIGNhc2UgOTI6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5MzoKKwor
ICAgIHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybSkudHlwZS50eXBlID09
IEVidEludmFyaWFudCAmJiAhKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zeW1ib2wpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMykgLSAoMyldKSwgInVuZGVj
bGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCAoeXl2c3BbKDMpIC0gKDMp
XS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgIH0KKworICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywg
VFR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS50eXBlKSwgKHl5bHNwWygzKSAtICgzKV0p
KTsKKyAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5pbnRlcm1O
b2RlLCBzeW1ib2wsICh5eWxzcFsoMykgLSAoMyldKSk7CisgICAgICAgIAorICAgICAgICBpZiAo
Y29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDMpXSksICh5
eXZhbC5pbnRlcm0pLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisg
ICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAo
MyldKSwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2YWwuaW50ZXJtKS50eXBl
LCBmYWxzZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgVFZh
cmlhYmxlKiB2YXJpYWJsZSA9IDA7CisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0RXJyb3JD
aGVjaygoeXlsc3BbKDMpIC0gKDMpXSksICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywg
KHl5dmFsLmludGVybSkudHlwZSwgdmFyaWFibGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICBpZiAoc3ltYm9sICYmIHZhcmlhYmxlKQorICAgICAgICAgICAgc3lt
Ym9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7CisgICAgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgOTQ6CisKKyAgICB7CisgICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZp
ZXJFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJt
KS50eXBlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBpZiAo
Y29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDUpXSksICooeXl2
c3BbKDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBl
LCB0cnVlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAoeXl2
YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoNSldLmludGVybSk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5bHNwWyg0KSAtICg1KV0pLCAoeXl2c3BbKDEp
IC0gKDUpXS5pbnRlcm0pLnR5cGUpIHx8IGNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVj
aygoeXlsc3BbKDQpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSkpCisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlLnNldEFycmF5KHRydWUpOworICAgICAg
ICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJh
eUVycm9yQ2hlY2soKHl5bHNwWyg0KSAtICg1KV0pLCAqKHl5dnNwWygzKSAtICg1KV0ubGV4KS5z
dHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSwgdmFyaWFibGUpKQorICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVh
azsKKworICBjYXNlIDk1OgorCisgICAgeworICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVh
bGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDYpXSksICh5eXZzcFsoMSkgLSAoNildLmlu
dGVybSkudHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAg
aWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg2KV0pLCAq
KHl5dnNwWygzKSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNildLmludGVybSku
dHlwZSwgdHJ1ZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAg
KHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pOworCisgICAgICAgIGlm
IChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eWxzcFsoNCkgLSAoNildKSwgKHl5dnNw
WygxKSAtICg2KV0uaW50ZXJtKS50eXBlKSB8fCBjb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9y
Q2hlY2soKHl5bHNwWyg0KSAtICg2KV0pLCAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUp
KQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIGludCBzaXplOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9y
Q2hlY2soKHl5bHNwWyg0KSAtICg2KV0pLCAoeXl2c3BbKDUpIC0gKDYpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSwgc2l6ZSkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICAgICAgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50eXBlLnNldEFycmF5KHRydWUs
IHNpemUpOworICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7CisgICAgICAgICAg
ICBpZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCh5eWxzcFsoNCkgLSAoNildKSwgKih5eXZz
cFsoMykgLSAoNildLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUs
IHZhcmlhYmxlKSkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
ICAgICBUVHlwZSB0eXBlID0gVFR5cGUoKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50eXBlKTsK
KyAgICAgICAgICAgIHR5cGUuc2V0QXJyYXlTaXplKHNpemUpOworICAgICAgICAgICAgKHl5dmFs
LmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dy
ZWdhdGUoKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlID8gdmFyaWFibGUtPmdldFVuaXF1ZUlkKCkgOiAw
LCAqKHl5dnNwWygzKSAtICg2KV0ubGV4KS5zdHJpbmcsIHR5cGUsICh5eWxzcFsoMykgLSAoNild
KSksICh5eWxzcFsoMykgLSAoNildKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSA5NjoKKworICAgIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmll
ckVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0pLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0p
LnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICh5eXZh
bC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKTsKKworICAgICAgICBUSW50ZXJt
Tm9kZSogaW50ZXJtTm9kZTsKKyAgICAgICAgaWYgKCFjb250ZXh0LT5leGVjdXRlSW5pdGlhbGl6
ZXIoKHl5bHNwWygzKSAtICg1KV0pLCAqKHl5dnNwWygzKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5
eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSwgKHl5dnNwWyg1KSAtICg1KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSksIGludGVybU5vZGUpKSB7CisgICAgICAgICAgICAvLworICAgICAgICAg
ICAgLy8gYnVpbGQgdGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgorICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgIGlmIChpbnRlcm1Ob2RlKQorICAgICAgICAoeXl2YWwuaW50ZXJtKS5p
bnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2
c3BbKDEpIC0gKDUpXS5pbnRlcm0pLmludGVybU5vZGUsIGludGVybU5vZGUsICh5eWxzcFsoNCkg
LSAoNSldKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVy
bSkuaW50ZXJtQWdncmVnYXRlID0gKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS5pbnRlcm1BZ2dy
ZWdhdGU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAwOworICAgICAg
ICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgOTc6CisKKyAgICB7CisgICAgICAgICh5
eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5tYWtlQWdncmVnYXRlKGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsIFRU
eXBlKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSksICh5eWxzcFsoMSkgLSAoMSldKSks
ICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgOTg6CisK
KyAgICB7CisgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLCBUVHlwZSgo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkpLCAoeXlsc3BbKDIpIC0gKDIpXSkpOworICAg
ICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsICh5eWxzcFsoMikgLSAoMildKSk7CisgICAgICAgIAor
ICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDIp
IC0gKDIpXSksICh5eXZhbC5pbnRlcm0pLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOworCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5
eWxzcFsoMikgLSAoMildKSwgKih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLCAoeXl2YWwu
aW50ZXJtKS50eXBlLCBmYWxzZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEp
IC0gKDIpXS5pbnRlcm0udHlwZSk7CisKKyAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7
CisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0RXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDIp
XSksICooeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZywgKHl5dmFsLmludGVybSkudHlwZSwg
dmFyaWFibGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAo
dmFyaWFibGUgJiYgc3ltYm9sKQorICAgICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+
Z2V0VW5pcXVlSWQoKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgOTk6CisKKyAgICB7
CisgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoNCldKSwgInVuc2l6ZWQgYXJy
YXkgZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0ZWQiLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0
cmluZy0+Y19zdHIoKSk7CisgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBU
SW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAs
ICooeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZywgVFR5cGUoKHl5dnNwWygxKSAtICg0KV0u
aW50ZXJtLnR5cGUpKSwgKHl5bHNwWygyKSAtICg0KV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVy
bSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUo
c3ltYm9sLCAoeXlsc3BbKDIpIC0gKDQpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtKS50eXBl
ID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpOworICAgIH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDEwMDoKKworICAgIHsKKyAgICAgICAgVFR5cGUgdHlwZSA9IFRUeXBlKCh5eXZzcFso
MSkgLSAoNSldLmludGVybS50eXBlKSk7CisgICAgICAgIGludCBzaXplOworICAgICAgICBpZiAo
Y29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDUpXSksICh5eXZzcFso
NCkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBzaXplKSkKKyAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgdHlwZS5zZXRBcnJheVNpemUoc2l6ZSk7CisgICAg
ICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1i
b2woMCwgKih5eXZzcFsoMikgLSAoNSldLmxleCkuc3RyaW5nLCB0eXBlLCAoeXlsc3BbKDIpIC0g
KDUpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsICh5eWxzcFsoMikgLSAoNSldKSk7
CisgICAgICAgIAorICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVj
aygoeXlsc3BbKDIpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSkpCisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPm5v
bkluaXRDb25zdEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg1KV0pLCAqKHl5dnNwWygyKSAtICg1
KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSwgdHJ1ZSkpCisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgKHl5dmFsLmludGVybSku
dHlwZSA9ICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKTsKKworICAgICAgICBpZiAoY29u
dGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDUpXSksICh5eXZzcFsoMSkg
LSAoNSldLmludGVybS50eXBlKSkgfHwgY29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNr
KCh5eWxzcFsoMykgLSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKSkKKyAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBpbnQgc2l6ZTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNr
KCh5eWxzcFsoMykgLSAoNSldKSwgKHl5dnNwWyg0KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksIHNpemUpKQorICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAg
ICAgICAgICAgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpLnNldEFycmF5KHRydWUsIHNp
emUpOworICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7CisgICAgICAgICAgICBp
ZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwgKih5eXZzcFso
MikgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSksIHZh
cmlhYmxlKSkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAg
ICBpZiAodmFyaWFibGUgJiYgc3ltYm9sKQorICAgICAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQo
dmFyaWFibGUtPmdldFVuaXF1ZUlkKCkpOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgMTAxOgorCisgICAgeworICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlm
aWVyRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDQpXSksICh5eXZzcFsoMSkgLSAoNCldLmludGVy
bS50eXBlKSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgKHl5
dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKTsKKworICAg
ICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKKyAgICAgICAgaWYgKCFjb250ZXh0LT5leGVj
dXRlSW5pdGlhbGl6ZXIoKHl5bHNwWygyKSAtICg0KV0pLCAqKHl5dnNwWygyKSAtICg0KV0ubGV4
KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSwgKHl5dnNwWyg0KSAtICg0
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGludGVybU5vZGUpKSB7CisgICAgICAgIC8vCisg
ICAgICAgIC8vIEJ1aWxkIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgorICAgICAgICAvLwor
ICAgICAgICAgICAgaWYoaW50ZXJtTm9kZSkKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
KS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShp
bnRlcm1Ob2RlLCAoeXlsc3BbKDMpIC0gKDQpXSkpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IDA7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAwOworICAgICAgICB9CisgICAgfQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTAyOgorCisgICAgeworICAgICAgICBWRVJURVhfT05MWSgiaW52YXJp
YW50IGRlY2xhcmF0aW9uIiwgKHl5bHNwWygxKSAtICgyKV0pKTsKKyAgICAgICAgaWYgKGNvbnRl
eHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgyKV0pLCBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCksICJpbnZhcmlhbnQgdmFyeWluZyIpKQorICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAoeXl2YWwuaW50ZXJtKS50eXBlLnNldEJhc2lj
KEVidEludmFyaWFudCwgRXZxSW52YXJpYW50VmFyeWluZ091dCwgKHl5bHNwWygyKSAtICgyKV0p
KTsKKyAgICAgICAgaWYgKCEoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN5bWJvbCkKKyAgICAgICAg
eworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgyKV0pLCAidW5kZWNs
YXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICh5eXZzcFsoMikgLSAoMild
LmxleCkuc3RyaW5nLT5jX3N0cigpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRl
ID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFRJ
bnRlcm1TeW1ib2wgKnN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwg
Kih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2YWwuaW50ZXJtKS50eXBl
KSwgKHl5bHNwWygyKSAtICgyKV0pKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVy
bUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwg
KHl5bHNwWygyKSAtICgyKV0pKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDEwMzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS50eXBlKTsKKworICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLnR5cGUpLmFycmF5KSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3Bb
KDEpIC0gKDEpXSksICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5Iik7CisgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0udHlwZSkuc2V0QXJyYXkoZmFsc2UpOworICAgICAgICB9CisgICAgfQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTA0OgorCisgICAgeworICAgICAgICBpZiAoKHl5dnNwWygyKSAtICgy
KV0uaW50ZXJtLnR5cGUpLmFycmF5KSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXls
c3BbKDIpIC0gKDIpXSksICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5Iik7Cisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2c3BbKDIpIC0g
KDIpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXkoZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIgPT0gRXZxQXR0cmli
dXRlICYmCisgICAgICAgICAgICAoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUg
PT0gRWJ0Qm9vbCB8fCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRJ
bnQpKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICJj
YW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAtICgy
KV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcikpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICB9CisgICAgICAgIGlmICgoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5
cGUpLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJt
LnR5cGUpLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0KSAmJgorICAgICAgICAgICAgKCh5eXZz
cFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidEJvb2wgfHwgKHl5dnNwWygyKSAt
ICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0SW50KSkgeworICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgyKV0pLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0
UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIp
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpOworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9ICh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS50eXBlKS5xdWFsaWZpZXI7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTA1Ogor
CisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2
cUNvbnN0LCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNl
IDEwNjoKKworICAgIHsKKyAgICAgICAgVkVSVEVYX09OTFkoImF0dHJpYnV0ZSIsICh5eWxzcFso
MSkgLSAoMSldKSk7CisgICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCh5eWxz
cFsoMSkgLSAoMSldKSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAiYXR0
cmlidXRlIikpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxQXR0cmlidXRlLCAoeXlsc3BbKDEp
IC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEwNzoKKworICAgIHsKKyAg
ICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgxKV0pLCBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ2YXJ5aW5nIikpCisgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBl
ID09IFNIX1ZFUlRFWF9TSEFERVIpCisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEJhc2ljKEVidFZvaWQsIEV2cVZhcnlpbmdPdXQsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9p
ZCwgRXZxVmFyeWluZ0luLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsK
KworICBjYXNlIDEwODoKKworICAgIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9y
Q2hlY2soKHl5bHNwWygxKSAtICgyKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCksICJpbnZhcmlhbnQgdmFyeWluZyIpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVS
KQorICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFJ
bnZhcmlhbnRWYXJ5aW5nT3V0LCAoeXlsc3BbKDEpIC0gKDIpXSkpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFy
aWFudFZhcnlpbmdJbiwgKHl5bHNwWygxKSAtICgyKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxMDk6CisKKyAgICB7CisgICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNo
ZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpLCAidW5pZm9ybSIpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cVVuaWZvcm0sICh5eWxz
cFsoMSkgLSAoMSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTEwOgorCisgICAg
eworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LnR5cGUpOworCisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLnR5cGUpLnByZWNpc2lvbiA9PSBF
YnBVbmRlZmluZWQpIHsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucHJlY2lzaW9u
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuZ2V0RGVmYXVsdFByZWNpc2lvbigoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0udHlwZSkudHlwZSk7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+cHJlY2lz
aW9uRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDEpXSksICh5eXZhbC5pbnRlcm0udHlwZSkucHJl
Y2lzaW9uLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSkpIHsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTE6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkucHJlY2lzaW9uID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnBy
ZWNpc2lvbik7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTEyOgorCisgICAgeworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnByZWNpc2lvbikgPSBFYnBIaWdoOworICAgIH0KKyAgICBicmVh
azsKKworICBjYXNlIDExMzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5wcmVjaXNp
b24pID0gRWJwTWVkaXVtOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDExNDoKKworICAg
IHsKKyAgICAgICAgKHl5dmFsLmludGVybS5wcmVjaXNpb24pID0gRWJwTG93OworICAgIH0KKyAg
ICBicmVhazsKKworICBjYXNlIDExNToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsKKyAgICB9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAxMTY6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAo
eXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSk7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPmFy
cmF5VHlwZUVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg0KV0pLCAoeXl2c3BbKDEpIC0gKDQpXS5p
bnRlcm0udHlwZSkpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIGludCBzaXplOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFy
cmF5U2l6ZUVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg0KV0pLCAoeXl2c3BbKDMpIC0gKDQpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBcnJheSh0cnVl
LCBzaXplKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDExNzoKKwor
ICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRH
bG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7
CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTE4OgorCisgICAgeworICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFz
aWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAgIGJyZWFr
OworCisgIGNhc2UgMTE5OgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jh
cnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAo
eXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEyMDoKKwor
ICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRH
bG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEJvb2wsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7
CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTIxOgorCisgICAgeworICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFz
aWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDIpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNl
IDEyMjoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEp
IC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgzKTsK
KyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjM6CisKKyAgICB7CisgICAgICAgIFRRdWFs
aWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUds
b2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNp
YyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoNCk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2Ug
MTI0OgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5bHNwWygxKSAt
ICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMik7Cisg
ICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTI1OgorCisgICAgeworICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMo
RWJ0Qm9vbCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRBZ2dyZWdhdGUoMyk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTI2
OgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5bHNwWygxKSAtICgx
KV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoNCk7CisgICAg
fQorICAgIGJyZWFrOworCisgIGNhc2UgMTI3OgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVy
IHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0
SW50LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEFnZ3JlZ2F0ZSgyKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjg6CisK
KyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0
R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOworICAgIH0KKyAg
ICBicmVhazsKKworICBjYXNlIDEyOToKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEludCwg
cXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5z
ZXRBZ2dyZWdhdGUoNCk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTMwOgorCisgICAg
eworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2Jh
bExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDIsIHRydWUpOworICAgIH0K
KyAgICBicmVhazsKKworICBjYXNlIDEzMToKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBx
dWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDog
RXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZs
b2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEFnZ3JlZ2F0ZSgzLCB0cnVlKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAx
MzI6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAt
ICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoNCwgdHJ1
ZSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTMzOgorCisgICAgeworICAgICAgICBU
UXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBF
dnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0
QmFzaWMoRWJ0U2FtcGxlcjJELCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAg
ICBicmVhazsKKworICBjYXNlIDEzNDoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNhbXBs
ZXJDdWJlLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDEzNToKKworICAgIHsKKyAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0V4dGVu
c2lvbigiR0xfT0VTX0VHTF9pbWFnZV9leHRlcm5hbCIpKSB7CisgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSksICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXJF
eHRlcm5hbE9FUyIpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9
CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyRXh0ZXJuYWxPRVMsIHF1YWwsICh5eWxzcFsoMSkg
LSAoMSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTM2OgorCisgICAgeworICAg
ICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRXh0ZW5zaW9uKCJHTF9BUkJfdGV4dHVyZV9yZWN0
YW5nbGUiKSkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0p
LCAidW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyMkRSZWN0Iik7CisgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNhbXBsZXIyRFJl
Y3QsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNh
c2UgMTM3OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLnR5cGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxp
ZmllciA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzg6CisKKyAgICB7
CisgICAgICAgIC8vCisgICAgICAgIC8vIFRoaXMgaXMgZm9yIHVzZXIgZGVmaW5lZCB0eXBlIG5h
bWVzLiAgVGhlIGxleGljYWwgcGhhc2UgbG9va2VkIHVwIHRoZQorICAgICAgICAvLyB0eXBlLgor
ICAgICAgICAvLworICAgICAgICBUVHlwZSYgc3RydWN0dXJlID0gc3RhdGljX2Nhc3Q8VFZhcmlh
YmxlKj4oKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zeW1ib2wpLT5nZXRUeXBlKCk7CisgICAgICAg
IFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/
IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5z
ZXRCYXNpYyhFYnRTdHJ1Y3QsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkudXNlckRlZiA9ICZzdHJ1Y3R1cmU7CisgICAgfQorICAgIGJyZWFr
OworCisgIGNhc2UgMTM5OgorCisgICAgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJh
dGlvbigoeXlsc3BbKDIpIC0gKDMpXSksICooeXl2c3BbKDIpIC0gKDMpXS5sZXgpLnN0cmluZykp
IGNvbnRleHQtPnJlY292ZXIoKTsgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTQwOgorCisgICAg
eworICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAo
NildKSwgKih5eXZzcFsoMikgLSAoNildLmxleCkuc3RyaW5nKSkKKyAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKKworICAgICAgICBUVHlwZSogc3RydWN0dXJlID0gbmV3IFRUeXBlKG5l
dyBUU3RydWN0dXJlKCh5eXZzcFsoMikgLSAoNildLmxleCkuc3RyaW5nLCAoeXl2c3BbKDUpIC0g
KDYpXS5pbnRlcm0uZmllbGRMaXN0KSkpOworICAgICAgICBUVmFyaWFibGUqIHVzZXJUeXBlRGVm
ID0gbmV3IFRWYXJpYWJsZSgoeXl2c3BbKDIpIC0gKDYpXS5sZXgpLnN0cmluZywgKnN0cnVjdHVy
ZSwgdHJ1ZSk7CisgICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgqdXNl
clR5cGVEZWYpKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDYp
XSksICJyZWRlZmluaXRpb24iLCAoeXl2c3BbKDIpIC0gKDYpXS5sZXgpLnN0cmluZy0+Y19zdHIo
KSwgInN0cnVjdCIpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9
CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U3RydWN0LCBFdnFUZW1w
b3JhcnksICh5eWxzcFsoMSkgLSAoNildKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSku
dXNlckRlZiA9IHN0cnVjdHVyZTsKKyAgICAgICAgY29udGV4dC0+ZXhpdFN0cnVjdERlY2xhcmF0
aW9uKCk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTQxOgorCisgICAgeyBpZiAoY29u
dGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbigoeXlsc3BbKDIpIC0gKDIpXSksICooeXl2c3Bb
KDIpIC0gKDIpXS5sZXgpLnN0cmluZykpIGNvbnRleHQtPnJlY292ZXIoKTsgfQorICAgIGJyZWFr
OworCisgIGNhc2UgMTQyOgorCisgICAgeworICAgICAgICBUVHlwZSogc3RydWN0dXJlID0gbmV3
IFRUeXBlKG5ldyBUU3RydWN0dXJlKE5ld1Bvb2xUU3RyaW5nKCIiKSwgKHl5dnNwWyg0KSAtICg1
KV0uaW50ZXJtLmZpZWxkTGlzdCkpKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgKHl5bHNwWygxKSAtICg1KV0pKTsKKyAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS51c2VyRGVmID0gc3RydWN0dXJlOworICAgICAgICBjb250
ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAxNDM6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0KSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5maWVsZExpc3QpOworICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDE0NDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5maWVsZExpc3QpID0gKHl5
dnNwWygxKSAtICgyKV0uaW50ZXJtLmZpZWxkTGlzdCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmZpZWxkTGlzdCktPnNpemUoKTsgKytp
KSB7CisgICAgICAgICAgICBURmllbGQqIGZpZWxkID0gKCooeXl2c3BbKDIpIC0gKDIpXS5pbnRl
cm0uZmllbGRMaXN0KSlbaV07CisgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8ICh5
eXZhbC5pbnRlcm0uZmllbGRMaXN0KS0+c2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgICAgICBp
ZiAoKCooeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkpW2pdLT5uYW1lKCkgPT0gZmllbGQtPm5hbWUo
KSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIp
XSksICJkdXBsaWNhdGUgZmllbGQgbmFtZSBpbiBzdHJ1Y3R1cmU6IiwgInN0cnVjdCIsIGZpZWxk
LT5uYW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLmZpZWxkTGlzdCktPnB1c2hfYmFjayhmaWVsZCk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxNDU6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
ZmllbGRMaXN0KSA9ICh5eXZzcFsoMikgLSAoMyldLmludGVybS5maWVsZExpc3QpOworCisgICAg
ICAgIGlmIChjb250ZXh0LT52b2lkRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDMpXSksICgqKHl5
dnNwWygyKSAtICgzKV0uaW50ZXJtLmZpZWxkTGlzdCkpWzBdLT5uYW1lKCksICh5eXZzcFsoMSkg
LSAoMyldLmludGVybS50eXBlKSkpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8ICh5eXZhbC5p
bnRlcm0uZmllbGRMaXN0KS0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICAvLyBDYXJlZnVsIG5vdCB0byByZXBsYWNlIGFscmVhZHkga25vd24gYXNwZWN0cyBvZiB0
eXBlLCBsaWtlIGFycmF5LW5lc3MKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBUVHlwZSog
dHlwZSA9ICgqKHl5dmFsLmludGVybS5maWVsZExpc3QpKVtpXS0+dHlwZSgpOworICAgICAgICAg
ICAgdHlwZS0+c2V0QmFzaWNUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS50eXBl
KTsKKyAgICAgICAgICAgIHR5cGUtPnNldE5vbWluYWxTaXplKCh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS50eXBlKS5zaXplKTsKKyAgICAgICAgICAgIHR5cGUtPnNldE1hdHJpeCgoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0udHlwZSkubWF0cml4KTsKKyAgICAgICAgICAgIHR5cGUtPnNldFByZWNp
c2lvbigoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucHJlY2lzaW9uKTsKKworICAgICAg
ICAgICAgLy8gZG9uJ3QgYWxsb3cgYXJyYXlzIG9mIGFycmF5cworICAgICAgICAgICAgaWYgKHR5
cGUtPmlzQXJyYXkoKSkgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5cGVF
cnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMyldKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5
cGUpKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5hcnJh
eSkKKyAgICAgICAgICAgICAgICB0eXBlLT5zZXRBcnJheVNpemUoKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLnR5cGUpLmFycmF5U2l6ZSk7CisgICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLnR5cGUpLnVzZXJEZWYpCisgICAgICAgICAgICAgICAgdHlwZS0+c2V0U3RydWN0
KCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS51c2VyRGVmLT5nZXRTdHJ1Y3QoKSk7CisK
KyAgICAgICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjaygoeXlsc3Bb
KDEpIC0gKDMpXSksICooKih5eXZhbC5pbnRlcm0uZmllbGRMaXN0KSlbaV0pKQorICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsK
KworICBjYXNlIDE0NjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5maWVsZExpc3Qp
ID0gTmV3UG9vbFRGaWVsZExpc3QoKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5maWVsZExpc3Qp
LT5wdXNoX2JhY2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmZpZWxkKSk7CisgICAgfQorICAg
IGJyZWFrOworCisgIGNhc2UgMTQ3OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmZp
ZWxkTGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uZmllbGQpKTsKKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDg6CisKKyAgICB7CisgICAgICAgIGlmIChjb250
ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgxKV0pLCAqKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5zdHJpbmcpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisg
ICAgICAgIFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGQpID0gbmV3IFRGaWVsZCh0eXBlLCAoeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLnN0cmluZyk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTQ5Ogor
CisgICAgeworICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCh5eWxzcFso
MSkgLSAoNCldKSwgKih5eXZzcFsoMSkgLSAoNCldLmxleCkuc3RyaW5nKSkKKyAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBUVHlwZSogdHlwZSA9IG5ldyBUVHlwZShF
YnRWb2lkLCBFYnBVbmRlZmluZWQpOworICAgICAgICBpbnQgc2l6ZSA9IDA7CisgICAgICAgIGlm
IChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNCldKSwgKHl5dnNw
WygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNpemUpKQorICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB0eXBlLT5zZXRBcnJheVNpemUoc2l6ZSk7CisK
KyAgICAgICAgKHl5dmFsLmludGVybS5maWVsZCkgPSBuZXcgVEZpZWxkKHR5cGUsICh5eXZzcFso
MSkgLSAoNCldLmxleCkuc3RyaW5nKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNTA6
CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNTE6
CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uaW50ZXJtTm9kZSk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDE1MjoKKworICAgIHsg
KHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1BZ2dyZWdhdGUpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNTM6CisKKyAgICB7ICh5eXZh
bC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9k
ZSk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDE1NDoKKworICAgIHsgKHl5dmFsLmludGVybS5p
bnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQorICAg
IGJyZWFrOworCisgIGNhc2UgMTU1OgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxNTY6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDE1
NzoKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSld
LmludGVybS5pbnRlcm1Ob2RlKTsgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTU4OgorCisgICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybU5vZGUpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNTk6CisKKyAgICB7ICh5eXZhbC5p
bnRlcm0uaW50ZXJtQWdncmVnYXRlKSA9IDA7IH0KKyAgICBicmVhazsKKworICBjYXNlIDE2MDoK
KworICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAxNjE6CisKKyAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOyB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxNjI6CisKKyAgICB7CisgICAgICAgIGlmICgoeXl2c3BbKDMpIC0gKDUp
XS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSAhPSAwKSB7CisgICAgICAgICAgICAoeXl2c3BbKDMp
IC0gKDUpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKS0+c2V0T3AoRU9wU2VxdWVuY2UpOworICAg
ICAgICAgICAgKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSktPnNldExp
bmUoKHl5bG9jKSk7CisgICAgICAgIH0KKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dy
ZWdhdGUpID0gKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSk7CisgICAg
fQorICAgIGJyZWFrOworCisgIGNhc2UgMTYzOgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxNjQ6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KKyAgICBicmVhazsKKworICBj
YXNlIDE2NToKKworICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxNjY6CisKKyAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOyAo
eXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVy
bU5vZGUpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNjc6CisKKyAgICB7IGNvbnRleHQtPnN5
bWJvbFRhYmxlLnB1c2goKTsgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTY4OgorCisgICAgeyBj
b250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5
eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1Ob2RlKTsgfQorICAgIGJyZWFrOworCisgIGNh
c2UgMTY5OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gMDsK
KyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNzA6CisKKyAgICB7CisgICAgICAgIGlmICgo
eXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSkgeworICAgICAgICAgICAg
KHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSktPnNldE9wKEVPcFNlcXVl
bmNlKTsKKyAgICAgICAgICAgICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1BZ2dyZWdh
dGUpLT5zZXRMaW5lKCh5eWxvYykpOworICAgICAgICB9CisgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKTsK
KyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNzE6CisKKyAgICB7CisgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdn
cmVnYXRlKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKSwgKHl5bG9jKSk7Cisg
ICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTcyOgorCisgICAgeworICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3Jl
Z2F0ZSgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSwgKHl5dnNwWygy
KSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXlsb2MpKTsKKyAgICB9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAxNzM6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOyB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNzQ6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJt
Tm9kZSkgPSBzdGF0aWNfY2FzdDxUSW50ZXJtTm9kZSo+KCh5eXZzcFsoMSkgLSAoMildLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpKTsgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTc1OgorCisgICAg
eworICAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICg1KV0p
LCAoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCisgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU2VsZWN0aW9uKCh5eXZzcFsoMykgLSAoNSldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0ubm9kZVBhaXIp
LCAoeXlsc3BbKDEpIC0gKDUpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE3NjoK
KworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTEgPSAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtTm9kZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0ubm9k
ZVBhaXIpLm5vZGUyID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybU5vZGUpOworICAg
IH0KKyAgICBicmVhazsKKworICBjYXNlIDE3NzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS5ub2RlUGFpcikubm9kZTEgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9k
ZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUyID0gMDsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxNzg6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpOworICAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldExpbmUoKSwgKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE3OToKKworICAgIHsKKyAgICAgICAgVElu
dGVybU5vZGUqIGludGVybU5vZGU7CisgICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZp
ZXJFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNCldKSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJt
LnR5cGUpKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKGNv
bnRleHQtPmJvb2xFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNCldKSwgKHl5dnNwWygxKSAtICg0
KV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAg
ICAgICBpZiAoIWNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigoeXlsc3BbKDIpIC0gKDQpXSks
ICooeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJt
LnR5cGUpLCAoeXl2c3BbKDQpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW50ZXJt
Tm9kZSkpCisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2
c3BbKDQpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAwOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisg
IGNhc2UgMTgwOgorCisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7ICsrY29udGV4
dC0+bG9vcE5lc3RpbmdMZXZlbDsgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTgxOgorCisgICAg
eworICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRMb29wKEVMb29wV2hp
bGUsIDAsICh5eXZzcFsoNCkgLSAoNildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAwLCAoeXl2
c3BbKDYpIC0gKDYpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eWxzcFsoMSkgLSAoNildKSk7Cisg
ICAgICAgIC0tY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsKKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxODI6CisKKyAgICB7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfQorICAg
IGJyZWFrOworCisgIGNhc2UgMTgzOgorCisgICAgeworICAgICAgICBpZiAoY29udGV4dC0+Ym9v
bEVycm9yQ2hlY2soKHl5bHNwWyg4KSAtICg4KV0pLCAoeXl2c3BbKDYpIC0gKDgpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRMb29wKEVMb29wRG9XaGlsZSwgMCwgKHl5dnNwWyg2KSAtICg4KV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksIDAsICh5eXZzcFsoMykgLSAoOCldLmludGVybS5pbnRlcm1Ob2RlKSwgKHl5bHNw
Wyg0KSAtICg4KV0pKTsKKyAgICAgICAgLS1jb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOworICAg
IH0KKyAgICBicmVhazsKKworICBjYXNlIDE4NDoKKworICAgIHsgY29udGV4dC0+c3ltYm9sVGFi
bGUucHVzaCgpOyArK2NvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDE4NToKKworICAgIHsKKyAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkTG9vcChFTG9vcEZvciwgKHl5dnNwWyg0KSAtICg3KV0uaW50ZXJtLmludGVybU5vZGUp
LCByZWludGVycHJldF9jYXN0PFRJbnRlcm1UeXBlZCo+KCh5eXZzcFsoNSkgLSAoNyldLmludGVy
bS5ub2RlUGFpcikubm9kZTEpLCByZWludGVycHJldF9jYXN0PFRJbnRlcm1UeXBlZCo+KCh5eXZz
cFsoNSkgLSAoNyldLmludGVybS5ub2RlUGFpcikubm9kZTIpLCAoeXl2c3BbKDcpIC0gKDcpXS5p
bnRlcm0uaW50ZXJtTm9kZSksICh5eWxzcFsoMSkgLSAoNyldKSk7CisgICAgICAgIC0tY29udGV4
dC0+bG9vcE5lc3RpbmdMZXZlbDsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxODY6CisK
KyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTg3
OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNl
IDE4ODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgfQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTg5OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSAwOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE5MDoKKworICAg
IHsKKyAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTEgPSAoeXl2c3BbKDEpIC0g
KDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5ub2Rl
UGFpcikubm9kZTIgPSAwOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE5MToKKworICAg
IHsKKyAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTEgPSAoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5ub2Rl
UGFpcikubm9kZTIgPSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsK
KyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxOTI6CisKKyAgICB7CisgICAgICAgIGlmIChj
b250ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eWxzcFsoMSkgLSAoMildKSwgImNvbnRpbnVlIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQg
aW4gbG9vcHMiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
IH0KKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCcmFuY2goRU9wQ29udGludWUsICh5eWxzcFsoMSkgLSAoMildKSk7CisgICAgfQor
ICAgIGJyZWFrOworCisgIGNhc2UgMTkzOgorCisgICAgeworICAgICAgICBpZiAoY29udGV4dC0+
bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXls
c3BbKDEpIC0gKDIpXSksICJicmVhayBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwg
IiIpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJh
bmNoKEVPcEJyZWFrLCAoeXlsc3BbKDEpIC0gKDIpXSkpOworICAgIH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDE5NDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCAoeXlsc3BbKDEpIC0g
KDIpXSkpOworICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+Z2V0QmFz
aWNUeXBlKCkgIT0gRWJ0Vm9pZCkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNw
WygxKSAtICgyKV0pLCAibm9uLXZvaWQgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSB2YWx1ZSIsICJy
ZXR1cm4iKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBicmVhazsKKworICBjYXNlIDE5NToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0
dXJuLCAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygx
KSAtICgzKV0pKTsKKyAgICAgICAgY29udGV4dC0+ZnVuY3Rpb25SZXR1cm5zVmFsdWUgPSB0cnVl
OworICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+Z2V0QmFzaWNUeXBl
KCkgPT0gRWJ0Vm9pZCkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAt
ICgzKV0pLCAidm9pZCBmdW5jdGlvbiBjYW5ub3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIik7
CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0gZWxzZSBpZiAoKihj
b250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlKSAhPSAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXlsc3BbKDEpIC0gKDMpXSksICJmdW5jdGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5
cGU6IiwgInJldHVybiIpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTk2OgorCisgICAgeworICAgICAgICBG
UkFHX09OTFkoImRpc2NhcmQiLCAoeXlsc3BbKDEpIC0gKDIpXSkpOworICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BL
aWxsLCAoeXlsc3BbKDEpIC0gKDIpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE5
NzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKKyAgICAgICAgY29udGV4dC0+dHJlZVJvb3Qg
PSAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNl
IDE5ODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS5p
bnRlcm1Ob2RlKSwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXlsb2Mp
KTsKKyAgICAgICAgY29udGV4dC0+dHJlZVJvb3QgPSAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUp
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE5OToKKworICAgIHsKKyAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1O
b2RlKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMDA6CisKKyAgICB7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50
ZXJtTm9kZSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMjAxOgorCisgICAgeworICAg
ICAgICBURnVuY3Rpb24qIGZ1bmN0aW9uID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5mdW5j
dGlvbjsKKyAgICAgICAgCisgICAgICAgIGNvbnN0IFRTeW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0
LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbihmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSk7Cisg
ICAgICAgIAorICAgICAgICBpZiAoYnVpbHRJbikKKyAgICAgICAgeworICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0pLCAiYnVpbHQtaW4gZnVuY3Rpb25zIGNhbm5v
dCBiZSByZWRlZmluZWQiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOworICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBURnVu
Y3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xU
YWJsZS5maW5kKGZ1bmN0aW9uLT5nZXRNYW5nbGVkTmFtZSgpKSk7CisgICAgICAgIC8vCisgICAg
ICAgIC8vIE5vdGU6ICAncHJldkRlYycgY291bGQgYmUgJ2Z1bmN0aW9uJyBpZiB0aGlzIGlzIHRo
ZSBmaXJzdCB0aW1lIHdlJ3ZlIHNlZW4gZnVuY3Rpb24KKyAgICAgICAgLy8gYXMgaXQgd291bGQg
aGF2ZSBqdXN0IGJlZW4gcHV0IGluIHRoZSBzeW1ib2wgdGFibGUuICBPdGhlcndpc2UsIHdlJ3Jl
IGxvb2tpbmcgdXAKKyAgICAgICAgLy8gYW4gZWFybGllciBvY2N1cmFuY2UuCisgICAgICAgIC8v
CisgICAgICAgIGlmIChwcmV2RGVjLT5pc0RlZmluZWQoKSkgeworICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgIC8vIFRoZW4gdGhpcyBmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkuCisgICAg
ICAgICAgICAvLworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0p
LCAiZnVuY3Rpb24gYWxyZWFkeSBoYXMgYSBib2R5IiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0
cigpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAg
ICBwcmV2RGVjLT5zZXREZWZpbmVkKCk7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gUmFpc2Ug
ZXJyb3IgbWVzc2FnZSBpZiBtYWluIGZ1bmN0aW9uIHRha2VzIGFueSBwYXJhbWV0ZXJzIG9yIHJl
dHVybiBhbnl0aGluZyBvdGhlciB0aGFuIHZvaWQKKyAgICAgICAgLy8KKyAgICAgICAgaWYgKGZ1
bmN0aW9uLT5nZXROYW1lKCkgPT0gIm1haW4iKSB7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb24t
PmdldFBhcmFtQ291bnQoKSA+IDApIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXlsc3BbKDEpIC0gKDEpXSksICJmdW5jdGlvbiBjYW5ub3QgdGFrZSBhbnkgcGFyYW1ldGVyKHMp
IiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZnVuY3Rpb24tPmdl
dFJldHVyblR5cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7CisgICAgICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0pLCAiIiwgZnVuY3Rpb24tPmdldFJl
dHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpLCAibWFpbiBmdW5jdGlvbiBjYW5ub3QgcmV0dXJu
IGEgdmFsdWUiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLworICAgICAgICAvLyBSZW1lbWJlciB0aGUg
cmV0dXJuIHR5cGUgZm9yIGxhdGVyIGNoZWNraW5nIGZvciBSRVRVUk4gc3RhdGVtZW50cy4KKyAg
ICAgICAgLy8KKyAgICAgICAgY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZSA9ICYocHJldkRl
Yy0+Z2V0UmV0dXJuVHlwZSgpKTsKKyAgICAgICAgY29udGV4dC0+ZnVuY3Rpb25SZXR1cm5zVmFs
dWUgPSBmYWxzZTsKKworICAgICAgICAvLworICAgICAgICAvLyBJbnNlcnQgcGFyYW1ldGVycyBp
bnRvIHRoZSBzeW1ib2wgdGFibGUuCisgICAgICAgIC8vIElmIHRoZSBwYXJhbWV0ZXIgaGFzIG5v
IG5hbWUsIGl0J3Mgbm90IGFuIGVycm9yLCBqdXN0IGRvbid0IGluc2VydCBpdAorICAgICAgICAv
LyAoY291bGQgYmUgdXNlZCBmb3IgdW51c2VkIGFyZ3MpLgorICAgICAgICAvLworICAgICAgICAv
LyBBbHNvLCBhY2N1bXVsYXRlIHRoZSBsaXN0IG9mIHBhcmFtZXRlcnMgaW50byB0aGUgSElMLCBz
byBsb3dlciBsZXZlbCBjb2RlCisgICAgICAgIC8vIGtub3dzIHdoZXJlIHRvIGZpbmQgcGFyYW1l
dGVycy4KKyAgICAgICAgLy8KKyAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSogcGFyYW1Ob2RlcyA9
IG5ldyBUSW50ZXJtQWdncmVnYXRlOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1
bmN0aW9uLT5nZXRQYXJhbUNvdW50KCk7IGkrKykgeworICAgICAgICAgICAgY29uc3QgVFBhcmFt
ZXRlciYgcGFyYW0gPSBmdW5jdGlvbi0+Z2V0UGFyYW0oaSk7CisgICAgICAgICAgICBpZiAocGFy
YW0ubmFtZSAhPSAwKSB7CisgICAgICAgICAgICAgICAgVFZhcmlhYmxlICp2YXJpYWJsZSA9IG5l
dyBUVmFyaWFibGUocGFyYW0ubmFtZSwgKnBhcmFtLnR5cGUpOworICAgICAgICAgICAgICAgIC8v
CisgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IHRoZSBwYXJhbWV0ZXJzIHdpdGggbmFtZSBpbiB0
aGUgc3ltYm9sIHRhYmxlLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgaWYg
KCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0pLCAicmVkZWZpbml0aW9u
IiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICAgICBkZWxldGUgdmFyaWFibGU7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAv
LyBBZGQgdGhlIHBhcmFtZXRlciB0byB0aGUgSElMCisgICAgICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgICAgICBwYXJhbU5vZGVzID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdh
dGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
Tm9kZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUtPmdldFVuaXF1ZUlkKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldE5hbWUoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eWxz
cFsoMSkgLSAoMSldKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIHBhcmFtTm9kZXMgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0
ZShwYXJhbU5vZGVzLCBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICIiLCAqcGFy
YW0udHlwZSwgKHl5bHNwWygxKSAtICgxKV0pKSwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdn
cmVnYXRlT3BlcmF0b3IocGFyYW1Ob2RlcywgRU9wUGFyYW1ldGVycywgKHl5bHNwWygxKSAtICgx
KV0pKTsKKyAgICAgICAgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUg
PSBwYXJhbU5vZGVzOworICAgICAgICBjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsID0gMDsKKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMDI6CisKKyAgICB7CisgICAgICAgIC8vPz8gQ2hl
Y2sgdGhhdCBhbGwgcGF0aHMgcmV0dXJuIGEgdmFsdWUgaWYgcmV0dXJuIHR5cGUgIT0gdm9pZCA/
CisgICAgICAgIC8vICAgTWF5IGJlIGJlc3QgZG9uZSBhcyBwb3N0IHByb2Nlc3MgcGhhc2Ugb24g
aW50ZXJtZWRpYXRlIGNvZGUKKyAgICAgICAgaWYgKGNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5
cGUtPmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQgJiYgISBjb250ZXh0LT5mdW5jdGlvblJldHVy
bnNWYWx1ZSkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgzKV0p
LCAiZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIGEgdmFsdWU6IiwgIiIsICh5eXZzcFsoMSkgLSAo
MyldLmludGVybSkuZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5
eXZzcFsoMSkgLSAoMyldLmludGVybSkuaW50ZXJtQWdncmVnYXRlLCAoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eWxvYykpOworICAgICAgICBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IoKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSwgRU9w
RnVuY3Rpb24sICh5eWxzcFsoMSkgLSAoMyldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtTm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNldE5hbWUoKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtKS5mdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0VHlwZSgoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0pLmZ1bmN0aW9uLT5nZXRSZXR1cm5UeXBlKCkpOworCisgICAgICAgIC8v
IHN0b3JlIHRoZSBwcmFnbWEgaW5mb3JtYXRpb24gZm9yIGRlYnVnIGFuZCBvcHRpbWl6ZSBhbmQg
b3RoZXIgdmVuZG9yIHNwZWNpZmljCisgICAgICAgIC8vIGluZm9ybWF0aW9uLiBUaGlzIGluZm9y
bWF0aW9uIGNhbiBiZSBxdWVyaWVkIGZyb20gdGhlIHBhcnNlIHRyZWUKKyAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0T3B0aW1pemUoY29udGV4
dC0+cHJhZ21hKCkub3B0aW1pemUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUp
LT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXREZWJ1Zyhjb250ZXh0LT5wcmFnbWEoKS5kZWJ1Zyk7CisK
KyAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7CisgICAgfQorICAgIGJyZWFrOwor
CisKKworICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorICAvKiBVc2VyIHNlbWFudGljIGFj
dGlvbnMgc29tZXRpbWVzIGFsdGVyIHl5Y2hhciwgYW5kIHRoYXQgcmVxdWlyZXMKKyAgICAgdGhh
dCB5eXRva2VuIGJlIHVwZGF0ZWQgd2l0aCB0aGUgbmV3IHRyYW5zbGF0aW9uLiAgV2UgdGFrZSB0
aGUKKyAgICAgYXBwcm9hY2ggb2YgdHJhbnNsYXRpbmcgaW1tZWRpYXRlbHkgYmVmb3JlIGV2ZXJ5
IHVzZSBvZiB5eXRva2VuLgorICAgICBPbmUgYWx0ZXJuYXRpdmUgaXMgdHJhbnNsYXRpbmcgaGVy
ZSBhZnRlciBldmVyeSBzZW1hbnRpYyBhY3Rpb24sCisgICAgIGJ1dCB0aGF0IHRyYW5zbGF0aW9u
IHdvdWxkIGJlIG1pc3NlZCBpZiB0aGUgc2VtYW50aWMgYWN0aW9uIGludm9rZXMKKyAgICAgWVlB
Qk9SVCwgWVlBQ0NFUFQsIG9yIFlZRVJST1IgaW1tZWRpYXRlbHkgYWZ0ZXIgYWx0ZXJpbmcgeXlj
aGFyIG9yCisgICAgIGlmIGl0IGludm9rZXMgWVlCQUNLVVAuICBJbiB0aGUgY2FzZSBvZiBZWUFC
T1JUIG9yIFlZQUNDRVBULCBhbgorICAgICBpbmNvcnJlY3QgZGVzdHJ1Y3RvciBtaWdodCB0aGVu
IGJlIGludm9rZWQgaW1tZWRpYXRlbHkuICBJbiB0aGUKKyAgICAgY2FzZSBvZiBZWUVSUk9SIG9y
IFlZQkFDS1VQLCBzdWJzZXF1ZW50IHBhcnNlciBhY3Rpb25zIG1pZ2h0IGxlYWQKKyAgICAgdG8g
YW4gaW5jb3JyZWN0IGRlc3RydWN0b3IgY2FsbCBvciB2ZXJib3NlIHN5bnRheCBlcnJvciBtZXNz
YWdlCisgICAgIGJlZm9yZSB0aGUgbG9va2FoZWFkIGlzIHRyYW5zbGF0ZWQuICAqLworICBZWV9T
WU1CT0xfUFJJTlQgKCItPiAkJCA9IiwgeXlyMVt5eW5dLCAmeXl2YWwsICZ5eWxvYyk7CisKKyAg
WVlQT1BTVEFDSyAoeXlsZW4pOworICB5eWxlbiA9IDA7CisgIFlZX1NUQUNLX1BSSU5UICh5eXNz
LCB5eXNzcCk7CisKKyAgKisreXl2c3AgPSB5eXZhbDsKKyAgKisreXlsc3AgPSB5eWxvYzsKKwor
ICAvKiBOb3cgYHNoaWZ0JyB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24uICBEZXRlcm1pbmUg
d2hhdCBzdGF0ZQorICAgICB0aGF0IGdvZXMgdG8sIGJhc2VkIG9uIHRoZSBzdGF0ZSB3ZSBwb3Bw
ZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUKKyAgICAgbnVtYmVyIHJlZHVjZWQgYnkuICAqLworCisg
IHl5biA9IHl5cjFbeXluXTsKKworICB5eXN0YXRlID0geXlwZ290b1t5eW4gLSBZWU5UT0tFTlNd
ICsgKnl5c3NwOworICBpZiAoMCA8PSB5eXN0YXRlICYmIHl5c3RhdGUgPD0gWVlMQVNUICYmIHl5
Y2hlY2tbeXlzdGF0ZV0gPT0gKnl5c3NwKQorICAgIHl5c3RhdGUgPSB5eXRhYmxlW3l5c3RhdGVd
OworICBlbHNlCisgICAgeXlzdGF0ZSA9IHl5ZGVmZ290b1t5eW4gLSBZWU5UT0tFTlNdOworCisg
IGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS4KK3wgeXllcnJsYWIgLS0gaGVyZSBvbiBkZXRlY3RpbmcgZXJyb3IgfAorYC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWVycmxhYjoKKyAgLyogTWFrZSBzdXJl
IHdlIGhhdmUgbGF0ZXN0IGxvb2thaGVhZCB0cmFuc2xhdGlvbi4gIFNlZSBjb21tZW50cyBhdAor
ICAgICB1c2VyIHNlbWFudGljIGFjdGlvbnMgZm9yIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS4gICov
CisgIHl5dG9rZW4gPSB5eWNoYXIgPT0gWVlFTVBUWSA/IFlZRU1QVFkgOiBZWVRSQU5TTEFURSAo
eXljaGFyKTsKKworICAvKiBJZiBub3QgYWxyZWFkeSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3Is
IHJlcG9ydCB0aGlzIGVycm9yLiAgKi8KKyAgaWYgKCF5eWVycnN0YXR1cykKKyAgICB7CisgICAg
ICArK3l5bmVycnM7CisjaWYgISBZWUVSUk9SX1ZFUkJPU0UKKyAgICAgIHl5ZXJyb3IgKCZ5eWxs
b2MsIGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yIikpOworI2Vsc2UKKyMgZGVmaW5lIFlZU1lO
VEFYX0VSUk9SIHl5c3ludGF4X2Vycm9yICgmeXltc2dfYWxsb2MsICZ5eW1zZywgXAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl5c3NwLCB5eXRva2VuKQorICAgICAg
eworICAgICAgICBjaGFyIGNvbnN0ICp5eW1zZ3AgPSBZWV8oInN5bnRheCBlcnJvciIpOworICAg
ICAgICBpbnQgeXlzeW50YXhfZXJyb3Jfc3RhdHVzOworICAgICAgICB5eXN5bnRheF9lcnJvcl9z
dGF0dXMgPSBZWVNZTlRBWF9FUlJPUjsKKyAgICAgICAgaWYgKHl5c3ludGF4X2Vycm9yX3N0YXR1
cyA9PSAwKQorICAgICAgICAgIHl5bXNncCA9IHl5bXNnOworICAgICAgICBlbHNlIGlmICh5eXN5
bnRheF9lcnJvcl9zdGF0dXMgPT0gMSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoeXlt
c2cgIT0geXltc2didWYpCisgICAgICAgICAgICAgIFlZU1RBQ0tfRlJFRSAoeXltc2cpOworICAg
ICAgICAgICAgeXltc2cgPSAoY2hhciAqKSBZWVNUQUNLX0FMTE9DICh5eW1zZ19hbGxvYyk7Cisg
ICAgICAgICAgICBpZiAoIXl5bXNnKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
eXltc2cgPSB5eW1zZ2J1ZjsKKyAgICAgICAgICAgICAgICB5eW1zZ19hbGxvYyA9IHNpemVvZiB5
eW1zZ2J1ZjsKKyAgICAgICAgICAgICAgICB5eXN5bnRheF9lcnJvcl9zdGF0dXMgPSAyOworICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICB5eXN5bnRheF9lcnJvcl9zdGF0dXMgPSBZWVNZTlRBWF9FUlJPUjsKKyAgICAgICAg
ICAgICAgICB5eW1zZ3AgPSB5eW1zZzsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAg
ICAgICAgeXllcnJvciAoJnl5bGxvYywgY29udGV4dCwgeXltc2dwKTsKKyAgICAgICAgaWYgKHl5
c3ludGF4X2Vycm9yX3N0YXR1cyA9PSAyKQorICAgICAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7
CisgICAgICB9CisjIHVuZGVmIFlZU1lOVEFYX0VSUk9SCisjZW5kaWYKKyAgICB9CisKKyAgeXll
cnJvcl9yYW5nZVsxXSA9IHl5bGxvYzsKKworICBpZiAoeXllcnJzdGF0dXMgPT0gMykKKyAgICB7
CisgICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9va2FoZWFkIHRv
a2VuIGFmdGVyIGFuCisJIGVycm9yLCBkaXNjYXJkIGl0LiAgKi8KKworICAgICAgaWYgKHl5Y2hh
ciA8PSBZWUVPRikKKwl7CisJICAvKiBSZXR1cm4gZmFpbHVyZSBpZiBhdCBlbmQgb2YgaW5wdXQu
ICAqLworCSAgaWYgKHl5Y2hhciA9PSBZWUVPRikKKwkgICAgWVlBQk9SVDsKKwl9CisgICAgICBl
bHNlCisJeworCSAgeXlkZXN0cnVjdCAoIkVycm9yOiBkaXNjYXJkaW5nIiwKKwkJICAgICAgeXl0
b2tlbiwgJnl5bHZhbCwgJnl5bGxvYywgY29udGV4dCk7CisJICB5eWNoYXIgPSBZWUVNUFRZOwor
CX0KKyAgICB9CisKKyAgLyogRWxzZSB3aWxsIHRyeSB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4g
YWZ0ZXIgc2hpZnRpbmcgdGhlIGVycm9yCisgICAgIHRva2VuLiAgKi8KKyAgZ290byB5eWVycmxh
YjE7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0uCit8IHl5ZXJyb3JsYWIgLS0gZXJyb3IgcmFpc2VkIGV4cGxpY2l0bHkgYnkgWVlFUlJP
Ui4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLworeXllcnJvcmxhYjoKKworICAvKiBQYWNpZnkgY29tcGlsZXJzIGxpa2UgR0NDIHdoZW4g
dGhlIHVzZXIgY29kZSBuZXZlciBpbnZva2VzCisgICAgIFlZRVJST1IgYW5kIHRoZSBsYWJlbCB5
eWVycm9ybGFiIHRoZXJlZm9yZSBuZXZlciBhcHBlYXJzIGluIHVzZXIKKyAgICAgY29kZS4gICov
CisgIGlmICgvKkNPTlNUQ09ORCovIDApCisgICAgIGdvdG8geXllcnJvcmxhYjsKKworICB5eWVy
cm9yX3JhbmdlWzFdID0geXlsc3BbMS15eWxlbl07CisgIC8qIERvIG5vdCByZWNsYWltIHRoZSBz
eW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKKyAgICAgdGhpcyBZWUVS
Uk9SLiAgKi8KKyAgWVlQT1BTVEFDSyAoeXlsZW4pOworICB5eWxlbiA9IDA7CisgIFlZX1NUQUNL
X1BSSU5UICh5eXNzLCB5eXNzcCk7CisgIHl5c3RhdGUgPSAqeXlzc3A7CisgIGdvdG8geXllcnJs
YWIxOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJsYWIxIC0tIGNvbW1vbiBjb2RlIGZvciBib3RoIHN5
bnRheCBlcnJvciBhbmQgWVlFUlJPUi4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXJybGFiMToKKyAgeXllcnJz
dGF0dXMgPSAzOwkvKiBFYWNoIHJlYWwgdG9rZW4gc2hpZnRlZCBkZWNyZW1lbnRzIHRoaXMuICAq
LworCisgIGZvciAoOzspCisgICAgeworICAgICAgeXluID0geXlwYWN0W3l5c3RhdGVdOworICAg
ICAgaWYgKCF5eXBhY3RfdmFsdWVfaXNfZGVmYXVsdCAoeXluKSkKKwl7CisJICB5eW4gKz0gWVlU
RVJST1I7CisJICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5bl0g
PT0gWVlURVJST1IpCisJICAgIHsKKwkgICAgICB5eW4gPSB5eXRhYmxlW3l5bl07CisJICAgICAg
aWYgKDAgPCB5eW4pCisJCWJyZWFrOworCSAgICB9CisJfQorCisgICAgICAvKiBQb3AgdGhlIGN1
cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0b2tlbi4gICov
CisgICAgICBpZiAoeXlzc3AgPT0geXlzcykKKwlZWUFCT1JUOworCisgICAgICB5eWVycm9yX3Jh
bmdlWzFdID0gKnl5bHNwOworICAgICAgeXlkZXN0cnVjdCAoIkVycm9yOiBwb3BwaW5nIiwKKwkJ
ICB5eXN0b3NbeXlzdGF0ZV0sIHl5dnNwLCB5eWxzcCwgY29udGV4dCk7CisgICAgICBZWVBPUFNU
QUNLICgxKTsKKyAgICAgIHl5c3RhdGUgPSAqeXlzc3A7CisgICAgICBZWV9TVEFDS19QUklOVCAo
eXlzcywgeXlzc3ApOworICAgIH0KKworICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9C
RUdJTgorICAqKyt5eXZzcCA9IHl5bHZhbDsKKyAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTEla
RURfRU5ECisKKyAgeXllcnJvcl9yYW5nZVsyXSA9IHl5bGxvYzsKKyAgLyogVXNpbmcgWVlMTE9D
IGlzIHRlbXB0aW5nLCBidXQgd291bGQgY2hhbmdlIHRoZSBsb2NhdGlvbiBvZgorICAgICB0aGUg
bG9va2FoZWFkLiAgWVlMT0MgaXMgYXZhaWxhYmxlIHRob3VnaC4gICovCisgIFlZTExPQ19ERUZB
VUxUICh5eWxvYywgeXllcnJvcl9yYW5nZSwgMik7CisgICorK3l5bHNwID0geXlsb2M7CisKKyAg
LyogU2hpZnQgdGhlIGVycm9yIHRva2VuLiAgKi8KKyAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRp
bmciLCB5eXN0b3NbeXluXSwgeXl2c3AsIHl5bHNwKTsKKworICB5eXN0YXRlID0geXluOworICBn
b3RvIHl5bmV3c3RhdGU7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLgorfCB5eWFjY2VwdGxhYiAtLSBZWUFDQ0VQVCBjb21lcyBoZXJlLiAgfAorYC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlhY2NlcHRsYWI6CisgIHl5cmVzdWx0
ID0gMDsKKyAgZ290byB5eXJldHVybjsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS4KK3wgeXlhYm9ydGxhYiAtLSBZWUFCT1JUIGNvbWVzIGhlcmUuICB8CitgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlhYm9ydGxhYjoKKyAgeXlyZXN1bHQg
PSAxOworICBnb3RvIHl5cmV0dXJuOworCisjaWYgIWRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVS
Uk9SX1ZFUkJPU0UKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS4KK3wgeXlleGhhdXN0ZWRsYWIgLS0gbWVtb3J5IGV4aGF1c3Rpb24gY29tZXMgaGVy
ZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ki8KK3l5ZXhoYXVzdGVkbGFiOgorICB5eWVycm9yICgmeXlsbG9jLCBjb250ZXh0LCBZWV8oIm1l
bW9yeSBleGhhdXN0ZWQiKSk7CisgIHl5cmVzdWx0ID0gMjsKKyAgLyogRmFsbCB0aHJvdWdoLiAg
Ki8KKyNlbmRpZgorCit5eXJldHVybjoKKyAgaWYgKHl5Y2hhciAhPSBZWUVNUFRZKQorICAgIHsK
KyAgICAgIC8qIE1ha2Ugc3VyZSB3ZSBoYXZlIGxhdGVzdCBsb29rYWhlYWQgdHJhbnNsYXRpb24u
ICBTZWUgY29tbWVudHMgYXQKKyAgICAgICAgIHVzZXIgc2VtYW50aWMgYWN0aW9ucyBmb3Igd2h5
IHRoaXMgaXMgbmVjZXNzYXJ5LiAgKi8KKyAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXlj
aGFyKTsKKyAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVhZCIs
CisgICAgICAgICAgICAgICAgICB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jLCBjb250ZXh0KTsK
KyAgICB9CisgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNo
IGFjdGlvbiB0cmlnZ2VyZWQKKyAgICAgdGhpcyBZWUFCT1JUIG9yIFlZQUNDRVBULiAgKi8KKyAg
WVlQT1BTVEFDSyAoeXlsZW4pOworICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOworICB3
aGlsZSAoeXlzc3AgIT0geXlzcykKKyAgICB7CisgICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDog
cG9wcGluZyIsCisJCSAgeXlzdG9zWyp5eXNzcF0sIHl5dnNwLCB5eWxzcCwgY29udGV4dCk7Cisg
ICAgICBZWVBPUFNUQUNLICgxKTsKKyAgICB9CisjaWZuZGVmIHl5b3ZlcmZsb3cKKyAgaWYgKHl5
c3MgIT0geXlzc2EpCisgICAgWVlTVEFDS19GUkVFICh5eXNzKTsKKyNlbmRpZgorI2lmIFlZRVJS
T1JfVkVSQk9TRQorICBpZiAoeXltc2cgIT0geXltc2didWYpCisgICAgWVlTVEFDS19GUkVFICh5
eW1zZyk7CisjZW5kaWYKKyAgLyogTWFrZSBzdXJlIFlZSUQgaXMgdXNlZC4gICovCisgIHJldHVy
biBZWUlEICh5eXJlc3VsdCk7Cit9CisKKworCisKKworaW50IGdsc2xhbmdfcGFyc2UoVFBhcnNl
Q29udGV4dCogY29udGV4dCkgeworICAgIHJldHVybiB5eXBhcnNlKGNvbnRleHQpOworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Z2xzbGFuZ190YWIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL2dsc2xhbmdfdGFiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDE0NDE5YTc2NWI5ZjI0NjVlZWQxZmRm
NDk4YzkwZmNkY2I0NWEzNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmgKQEAgLTAsMCArMSwyMjUg
QEAKKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjcuMS4gICovCisKKy8q
IEFwcGxlIE5vdGU6IEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBBcHBsZSBlbGVjdHMgdG8g
ZGlzdHJpYnV0ZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBCU0QgbGljZW5zZS4g
Ki8KKworLyogQmlzb24gaW50ZXJmYWNlIGZvciBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCisgICAK
KyAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAyMDAwLTIwMTMgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3
YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0
aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
ICAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRo
IHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv
Pi4gICovCisKKy8qIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgY3JlYXRlIGEgbGFy
Z2VyIHdvcmsgdGhhdCBjb250YWlucworICAgcGFydCBvciBhbGwgb2YgdGhlIEJpc29uIHBhcnNl
ciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKKyAgIHVuZGVyIHRlcm1zIG9mIHlv
dXIgY2hvaWNlLCBzbyBsb25nIGFzIHRoYXQgd29yayBpc24ndCBpdHNlbGYgYQorICAgcGFyc2Vy
IGdlbmVyYXRvciB1c2luZyB0aGUgc2tlbGV0b24gb3IgYSBtb2RpZmllZCB2ZXJzaW9uIHRoZXJl
b2YKKyAgIGFzIGEgcGFyc2VyIHNrZWxldG9uLiAgQWx0ZXJuYXRpdmVseSwgaWYgeW91IG1vZGlm
eSBvciByZWRpc3RyaWJ1dGUKKyAgIHRoZSBwYXJzZXIgc2tlbGV0b24gaXRzZWxmLCB5b3UgbWF5
IChhdCB5b3VyIG9wdGlvbikgcmVtb3ZlIHRoaXMKKyAgIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGlj
aCB3aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQgdGhlIHJlc3VsdGluZworICAgQmlzb24gb3V0
cHV0IGZpbGVzIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAg
IExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uLgorICAgCisgICBUaGlzIHNw
ZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
IGluCisgICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICovCisKKyNpZm5kZWYgWVlfWVlfR0xTTEFO
R19UQUJfSF9JTkNMVURFRAorIyBkZWZpbmUgWVlfWVlfR0xTTEFOR19UQUJfSF9JTkNMVURFRAor
LyogRW5hYmxpbmcgdHJhY2VzLiAgKi8KKyNpZm5kZWYgWVlERUJVRworIyBkZWZpbmUgWVlERUJV
RyAwCisjZW5kaWYKKyNpZiBZWURFQlVHCitleHRlcm4gaW50IHl5ZGVidWc7CisjZW5kaWYKKy8q
ICIlY29kZSByZXF1aXJlcyIgYmxvY2tzLiAgKi8KKworCisjZGVmaW5lIFlZTFRZUEUgVFNvdXJj
ZUxvYworI2RlZmluZSBZWUxUWVBFX0lTX0RFQ0xBUkVEIDEKKyNkZWZpbmUgU0hfTUFYX1RPS0VO
X0xFTkdUSCAyNTYgIC8vIFdlYkdMIHNwZWMuCisKKworCisKKy8qIFRva2Vucy4gICovCisjaWZu
ZGVmIFlZVE9LRU5UWVBFCisjIGRlZmluZSBZWVRPS0VOVFlQRQorICAgLyogUHV0IHRoZSB0b2tl
bnMgaW50byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdEQiBhbmQgb3RoZXIgZGVidWdnZXJz
CisgICAgICBrbm93IGFib3V0IHRoZW0uICAqLworICAgZW51bSB5eXRva2VudHlwZSB7CisgICAg
IElOVkFSSUFOVCA9IDI1OCwKKyAgICAgSElHSF9QUkVDSVNJT04gPSAyNTksCisgICAgIE1FRElV
TV9QUkVDSVNJT04gPSAyNjAsCisgICAgIExPV19QUkVDSVNJT04gPSAyNjEsCisgICAgIFBSRUNJ
U0lPTiA9IDI2MiwKKyAgICAgQVRUUklCVVRFID0gMjYzLAorICAgICBDT05TVF9RVUFMID0gMjY0
LAorICAgICBCT09MX1RZUEUgPSAyNjUsCisgICAgIEZMT0FUX1RZUEUgPSAyNjYsCisgICAgIElO
VF9UWVBFID0gMjY3LAorICAgICBCUkVBSyA9IDI2OCwKKyAgICAgQ09OVElOVUUgPSAyNjksCisg
ICAgIERPID0gMjcwLAorICAgICBFTFNFID0gMjcxLAorICAgICBGT1IgPSAyNzIsCisgICAgIElG
ID0gMjczLAorICAgICBESVNDQVJEID0gMjc0LAorICAgICBSRVRVUk4gPSAyNzUsCisgICAgIEJW
RUMyID0gMjc2LAorICAgICBCVkVDMyA9IDI3NywKKyAgICAgQlZFQzQgPSAyNzgsCisgICAgIElW
RUMyID0gMjc5LAorICAgICBJVkVDMyA9IDI4MCwKKyAgICAgSVZFQzQgPSAyODEsCisgICAgIFZF
QzIgPSAyODIsCisgICAgIFZFQzMgPSAyODMsCisgICAgIFZFQzQgPSAyODQsCisgICAgIE1BVFJJ
WDIgPSAyODUsCisgICAgIE1BVFJJWDMgPSAyODYsCisgICAgIE1BVFJJWDQgPSAyODcsCisgICAg
IElOX1FVQUwgPSAyODgsCisgICAgIE9VVF9RVUFMID0gMjg5LAorICAgICBJTk9VVF9RVUFMID0g
MjkwLAorICAgICBVTklGT1JNID0gMjkxLAorICAgICBWQVJZSU5HID0gMjkyLAorICAgICBTVFJV
Q1QgPSAyOTMsCisgICAgIFZPSURfVFlQRSA9IDI5NCwKKyAgICAgV0hJTEUgPSAyOTUsCisgICAg
IFNBTVBMRVIyRCA9IDI5NiwKKyAgICAgU0FNUExFUkNVQkUgPSAyOTcsCisgICAgIFNBTVBMRVJf
RVhURVJOQUxfT0VTID0gMjk4LAorICAgICBTQU1QTEVSMkRSRUNUID0gMjk5LAorICAgICBJREVO
VElGSUVSID0gMzAwLAorICAgICBUWVBFX05BTUUgPSAzMDEsCisgICAgIEZMT0FUQ09OU1RBTlQg
PSAzMDIsCisgICAgIElOVENPTlNUQU5UID0gMzAzLAorICAgICBCT09MQ09OU1RBTlQgPSAzMDQs
CisgICAgIExFRlRfT1AgPSAzMDUsCisgICAgIFJJR0hUX09QID0gMzA2LAorICAgICBJTkNfT1Ag
PSAzMDcsCisgICAgIERFQ19PUCA9IDMwOCwKKyAgICAgTEVfT1AgPSAzMDksCisgICAgIEdFX09Q
ID0gMzEwLAorICAgICBFUV9PUCA9IDMxMSwKKyAgICAgTkVfT1AgPSAzMTIsCisgICAgIEFORF9P
UCA9IDMxMywKKyAgICAgT1JfT1AgPSAzMTQsCisgICAgIFhPUl9PUCA9IDMxNSwKKyAgICAgTVVM
X0FTU0lHTiA9IDMxNiwKKyAgICAgRElWX0FTU0lHTiA9IDMxNywKKyAgICAgQUREX0FTU0lHTiA9
IDMxOCwKKyAgICAgTU9EX0FTU0lHTiA9IDMxOSwKKyAgICAgTEVGVF9BU1NJR04gPSAzMjAsCisg
ICAgIFJJR0hUX0FTU0lHTiA9IDMyMSwKKyAgICAgQU5EX0FTU0lHTiA9IDMyMiwKKyAgICAgWE9S
X0FTU0lHTiA9IDMyMywKKyAgICAgT1JfQVNTSUdOID0gMzI0LAorICAgICBTVUJfQVNTSUdOID0g
MzI1LAorICAgICBMRUZUX1BBUkVOID0gMzI2LAorICAgICBSSUdIVF9QQVJFTiA9IDMyNywKKyAg
ICAgTEVGVF9CUkFDS0VUID0gMzI4LAorICAgICBSSUdIVF9CUkFDS0VUID0gMzI5LAorICAgICBM
RUZUX0JSQUNFID0gMzMwLAorICAgICBSSUdIVF9CUkFDRSA9IDMzMSwKKyAgICAgRE9UID0gMzMy
LAorICAgICBDT01NQSA9IDMzMywKKyAgICAgQ09MT04gPSAzMzQsCisgICAgIEVRVUFMID0gMzM1
LAorICAgICBTRU1JQ09MT04gPSAzMzYsCisgICAgIEJBTkcgPSAzMzcsCisgICAgIERBU0ggPSAz
MzgsCisgICAgIFRJTERFID0gMzM5LAorICAgICBQTFVTID0gMzQwLAorICAgICBTVEFSID0gMzQx
LAorICAgICBTTEFTSCA9IDM0MiwKKyAgICAgUEVSQ0VOVCA9IDM0MywKKyAgICAgTEVGVF9BTkdM
RSA9IDM0NCwKKyAgICAgUklHSFRfQU5HTEUgPSAzNDUsCisgICAgIFZFUlRJQ0FMX0JBUiA9IDM0
NiwKKyAgICAgQ0FSRVQgPSAzNDcsCisgICAgIEFNUEVSU0FORCA9IDM0OCwKKyAgICAgUVVFU1RJ
T04gPSAzNDkKKyAgIH07CisjZW5kaWYKKworCisjaWYgISBkZWZpbmVkIFlZU1RZUEUgJiYgISBk
ZWZpbmVkIFlZU1RZUEVfSVNfREVDTEFSRUQKK3R5cGVkZWYgdW5pb24gWVlTVFlQRQoreworCisK
KyAgICBzdHJ1Y3QgeworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBUU3RyaW5nICpzdHJp
bmc7CisgICAgICAgICAgICBmbG9hdCBmOworICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAg
ICBib29sIGI7CisgICAgICAgIH07CisgICAgICAgIFRTeW1ib2wqIHN5bWJvbDsKKyAgICB9IGxl
eDsKKyAgICBzdHJ1Y3QgeworICAgICAgICBUT3BlcmF0b3Igb3A7CisgICAgICAgIHVuaW9uIHsK
KyAgICAgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOworICAgICAgICAgICAgVEludGVy
bU5vZGVQYWlyIG5vZGVQYWlyOworICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbnRlcm1UeXBl
ZE5vZGU7CisgICAgICAgICAgICBUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGU7Cisg
ICAgICAgIH07CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFRQdWJsaWNUeXBlIHR5cGU7
CisgICAgICAgICAgICBUUHJlY2lzaW9uIHByZWNpc2lvbjsKKyAgICAgICAgICAgIFRRdWFsaWZp
ZXIgcXVhbGlmaWVyOworICAgICAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlvbjsKKyAgICAgICAg
ICAgIFRQYXJhbWV0ZXIgcGFyYW07CisgICAgICAgICAgICBURmllbGQqIGZpZWxkOworICAgICAg
ICAgICAgVEZpZWxkTGlzdCogZmllbGRMaXN0OworICAgICAgICB9OworICAgIH0gaW50ZXJtOwor
CisKKworfSBZWVNUWVBFOworIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKKyMgZGVmaW5l
IHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KKyMg
ZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQorI2VuZGlmCisKKyNpZiAhIGRlZmluZWQgWVlM
VFlQRSAmJiAhIGRlZmluZWQgWVlMVFlQRV9JU19ERUNMQVJFRAordHlwZWRlZiBzdHJ1Y3QgWVlM
VFlQRQoreworICBpbnQgZmlyc3RfbGluZTsKKyAgaW50IGZpcnN0X2NvbHVtbjsKKyAgaW50IGxh
c3RfbGluZTsKKyAgaW50IGxhc3RfY29sdW1uOworfSBZWUxUWVBFOworIyBkZWZpbmUgeXlsdHlw
ZSBZWUxUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLworIyBkZWZpbmUg
WVlMVFlQRV9JU19ERUNMQVJFRCAxCisjIGRlZmluZSBZWUxUWVBFX0lTX1RSSVZJQUwgMQorI2Vu
ZGlmCisKKworI2lmZGVmIFlZUEFSU0VfUEFSQU0KKyNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRl
ZmluZWQgX19jcGx1c3BsdXMKK2ludCB5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKTsKKyNl
bHNlCitpbnQgeXlwYXJzZSAoKTsKKyNlbmRpZgorI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICov
CisjaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCitpbnQgeXlwYXJz
ZSAoVFBhcnNlQ29udGV4dCogY29udGV4dCk7CisjZWxzZQoraW50IHl5cGFyc2UgKCk7CisjZW5k
aWYKKyNlbmRpZiAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KKworI2VuZGlmIC8qICFZWV9ZWV9HTFNM
QU5HX1RBQl9IX0lOQ0xVREVEICAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtT3V0LmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2ludGVybU91dC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZjJmOTE4ZDc3YTc4MmY4ZTIxZWM4NTU1NDMyMGY0YWRkZjg0NGVhZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2lu
dGVybU91dC5jcHAKQEAgLTAsMCArMSw0MjQgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL2xvY2FsaW50ZXJtZWRpYXRlLmgiCisKKy8vCisvLyBU
d28gcHVycG9zZXM6CisvLyAxLiAgU2hvdyBhbiBleGFtcGxlIG9mIGhvdyB0byBpdGVyYXRlIHRy
ZWUuICBGdW5jdGlvbnMgY2FuCisvLyAgICAgYWxzbyBkaXJlY3RseSBjYWxsIFRyYXZlcnNlKCkg
b24gY2hpbGRyZW4gdGhlbXNlbHZlcyB0bworLy8gICAgIGhhdmUgZmluZXIgZ3JhaW5lZCBjb250
cm9sIG92ZXIgdGhlIHByb2Nlc3MgdGhhbiBzaG93biBoZXJlLgorLy8gICAgIFNlZSB0aGUgbGFz
dCBmdW5jdGlvbiBmb3IgaG93IHRvIGdldCBzdGFydGVkLgorLy8gMi4gIFByaW50IG91dCBhIHRl
eHQgYmFzZWQgZGVzY3JpcHRpb24gb2YgdGhlIHRyZWUuCisvLworCisvLworLy8gVXNlIHRoaXMg
Y2xhc3MgdG8gY2FycnkgYWxvbmcgZGF0YSBmcm9tIG5vZGUgdG8gbm9kZSBpbgorLy8gdGhlIHRy
YXZlcnNhbAorLy8KK2NsYXNzIFRPdXRwdXRUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZl
cnNlciB7CitwdWJsaWM6CisgICAgVE91dHB1dFRyYXZlcnNlcihUSW5mb1NpbmtCYXNlJiBpKSA6
IHNpbmsoaSkgeyB9CisgICAgVEluZm9TaW5rQmFzZSYgc2luazsKKworcHJvdGVjdGVkOgorICAg
IHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOworICAgIHZvaWQgdmlzaXRDb25zdGFu
dFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKik7CisgICAgYm9vbCB2aXNpdEJpbmFyeShWaXNp
dCB2aXNpdCwgVEludGVybUJpbmFyeSopOworICAgIGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2aXNp
dCwgVEludGVybVVuYXJ5Kik7CisgICAgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwg
VEludGVybVNlbGVjdGlvbiopOworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQs
IFRJbnRlcm1BZ2dyZWdhdGUqKTsKKyAgICBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVElu
dGVybUxvb3AqKTsKKyAgICBib29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJh
bmNoKik7Cit9OworCitUU3RyaW5nIFRUeXBlOjpnZXRDb21wbGV0ZVN0cmluZygpIGNvbnN0Cit7
CisgICAgVFN0cmluZ1N0cmVhbSBzdHJlYW07CisKKyAgICBpZiAocXVhbGlmaWVyICE9IEV2cVRl
bXBvcmFyeSAmJiBxdWFsaWZpZXIgIT0gRXZxR2xvYmFsKQorICAgICAgICBzdHJlYW0gPDwgZ2V0
UXVhbGlmaWVyU3RyaW5nKCkgPDwgIiAiIDw8IGdldFByZWNpc2lvblN0cmluZygpIDw8ICIgIjsK
KyAgICBpZiAoYXJyYXkpCisgICAgICAgIHN0cmVhbSA8PCAiYXJyYXlbIiA8PCBnZXRBcnJheVNp
emUoKSA8PCAiXSBvZiAiOworICAgIGlmIChtYXRyaXgpCisgICAgICAgIHN0cmVhbSA8PCBzdGF0
aWNfY2FzdDxpbnQ+KHNpemUpIDw8ICJYIiA8PCBzdGF0aWNfY2FzdDxpbnQ+KHNpemUpIDw8ICIg
bWF0cml4IG9mICI7CisgICAgZWxzZSBpZiAoc2l6ZSA+IDEpCisgICAgICAgIHN0cmVhbSA8PCBz
dGF0aWNfY2FzdDxpbnQ+KHNpemUpIDw8ICItY29tcG9uZW50IHZlY3RvciBvZiAiOworCisgICAg
c3RyZWFtIDw8IGdldEJhc2ljU3RyaW5nKCk7CisgICAgcmV0dXJuIHN0cmVhbS5zdHIoKTsKK30K
KworLy8KKy8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIHByaW50aW5nLCBub3QgcGFydCBvZiB0cmF2
ZXJzaW5nLgorLy8KKwordm9pZCBPdXRwdXRUcmVlVGV4dChUSW5mb1NpbmtCYXNlJiBzaW5rLCBU
SW50ZXJtTm9kZSogbm9kZSwgY29uc3QgaW50IGRlcHRoKQoreworICAgIGludCBpOworCisgICAg
c2luay5sb2NhdGlvbihub2RlLT5nZXRMaW5lKCkpOworCisgICAgZm9yIChpID0gMDsgaSA8IGRl
cHRoOyArK2kpCisgICAgICAgIHNpbmsgPDwgIiAgIjsKK30KKworLy8KKy8vIFRoZSByZXN0IG9m
IHRoZSBmaWxlIGFyZSB0aGUgdHJhdmVyc2FsIGZ1bmN0aW9ucy4gIFRoZSBsYXN0IG9uZQorLy8g
aXMgdGhlIG9uZSB0aGF0IHN0YXJ0cyB0aGUgdHJhdmVyc2FsLgorLy8KKy8vIFJldHVybiB0cnVl
IGZyb20gaW50ZXJpb3Igbm9kZXMgdG8gaGF2ZSB0aGUgZXh0ZXJuYWwgdHJhdmVyc2FsCisvLyBj
b250aW51ZSBvbiB0byBjaGlsZHJlbi4gIElmIHlvdSBwcm9jZXNzIGNoaWxkcmVuIHlvdXJzZWxm
LAorLy8gcmV0dXJuIGZhbHNlLgorLy8KKwordm9pZCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdFN5
bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQoreworICAgIE91dHB1dFRyZWVUZXh0KHNpbmssIG5v
ZGUsIGRlcHRoKTsKKworICAgIHNpbmsgPDwgIiciIDw8IG5vZGUtPmdldFN5bWJvbCgpIDw8ICIn
ICI7CisgICAgc2luayA8PCAiKCIgPDwgbm9kZS0+Z2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiKVxu
IjsKK30KKworYm9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwg
VEludGVybUJpbmFyeSogbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBzaW5rOwor
CisgICAgT3V0cHV0VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7CisKKyAgICBzd2l0Y2ggKG5v
ZGUtPmdldE9wKCkpIHsKKyAgICAgICAgY2FzZSBFT3BBc3NpZ246ICAgICAgICAgICAgICAgICAg
IG91dCA8PCAibW92ZSBzZWNvbmQgY2hpbGQgdG8gZmlyc3QgY2hpbGQiOyAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wSW5pdGlhbGl6ZTogICAgICAgICAgICAgICBvdXQgPDwgImlu
aXRpYWxpemUgZmlyc3QgY2hpbGQgd2l0aCBzZWNvbmQgY2hpbGQiOyAgIGJyZWFrOworICAgICAg
ICBjYXNlIEVPcEFkZEFzc2lnbjogICAgICAgICAgICAgICAgb3V0IDw8ICJhZGQgc2Vjb25kIGNo
aWxkIGludG8gZmlyc3QgY2hpbGQiOyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BT
dWJBc3NpZ246ICAgICAgICAgICAgICAgIG91dCA8PCAic3VidHJhY3Qgc2Vjb25kIGNoaWxkIGlu
dG8gZmlyc3QgY2hpbGQiOyAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTXVsQXNzaWduOiAg
ICAgICAgICAgICAgICBvdXQgPDwgIm11bHRpcGx5IHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNo
aWxkIjsgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWdu
OiAgb3V0IDw8ICJtYXRyaXggbXVsdCBzZWNvbmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7ICBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjogIG91dCA8PCAi
dmVjdG9yIHNjYWxlIHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ246ICBvdXQgPDwgIm1hdHJpeCBzY2Fs
ZSBzZWNvbmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7IGJyZWFrOworICAgICAgICBjYXNlIEVP
cE1hdHJpeFRpbWVzTWF0cml4QXNzaWduOiAgb3V0IDw8ICJtYXRyaXggbXVsdCBzZWNvbmQgY2hp
bGQgaW50byBmaXJzdCBjaGlsZCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcERpdkFzc2lnbjog
ICAgICAgICAgICAgICAgb3V0IDw8ICJkaXZpZGUgc2Vjb25kIGNoaWxkIGludG8gZmlyc3QgY2hp
bGQiOyAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDogICBvdXQgPDwg
ImRpcmVjdCBpbmRleCI7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wSW5kZXhJbmRpcmVjdDog
b3V0IDw8ICJpbmRpcmVjdCBpbmRleCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEluZGV4RGly
ZWN0U3RydWN0OiAgIG91dCA8PCAiZGlyZWN0IGluZGV4IGZvciBzdHJ1Y3R1cmUiOyAgIGJyZWFr
OworICAgICAgICBjYXNlIEVPcFZlY3RvclN3aXp6bGU6IG91dCA8PCAidmVjdG9yIHN3aXp6bGUi
OyBicmVhazsKKworICAgICAgICBjYXNlIEVPcEFkZDogICAgb3V0IDw8ICJhZGQiOyAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFN1YjogICAgb3V0IDw8ICJzdWJ0
cmFjdCI7ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcE11bDogICAgb3V0
IDw8ICJjb21wb25lbnQtd2lzZSBtdWx0aXBseSI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcERp
djogICAgb3V0IDw8ICJkaXZpZGUiOyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEVPcEVxdWFsOiAgICAgICAgICAgIG91dCA8PCAiQ29tcGFyZSBFcXVhbCI7ICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDogICAgICAgICBvdXQgPDwg
IkNvbXBhcmUgTm90IEVxdWFsIjsgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
TGVzc1RoYW46ICAgICAgICAgb3V0IDw8ICJDb21wYXJlIExlc3MgVGhhbiI7ICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOiAgICAgIG91dCA8PCAiQ29tcGFy
ZSBHcmVhdGVyIFRoYW4iOyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMZXNzVGhh
bkVxdWFsOiAgICBvdXQgPDwgIkNvbXBhcmUgTGVzcyBUaGFuIG9yIEVxdWFsIjsgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDogb3V0IDw8ICJDb21wYXJlIEdyZWF0
ZXIgVGhhbiBvciBFcXVhbCI7IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNT
Y2FsYXI6IG91dCA8PCAidmVjdG9yLXNjYWxlIjsgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wVmVjdG9yVGltZXNNYXRyaXg6IG91dCA8PCAidmVjdG9yLXRpbWVzLW1hdHJpeCI7ICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNWZWN0b3I6IG91dCA8PCAibWF0cml4
LXRpbWVzLXZlY3RvciI7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2Fs
YXI6IG91dCA8PCAibWF0cml4LXNjYWxlIjsgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wTWF0cml4VGltZXNNYXRyaXg6IG91dCA8PCAibWF0cml4LW11bHRpcGx5IjsgICAgICAgYnJl
YWs7CisKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6ICBvdXQgPDwgImxvZ2ljYWwtb3IiOyAg
IGJyZWFrOworICAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6IG91dCA8PCAibG9naWNhbC14b3Ii
OyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiBvdXQgPDwgImxvZ2ljYWwtYW5k
IjsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IG91dCA8PCAiPHVua25vd24gb3A+IjsKKyAgICB9
CisKKyAgICBvdXQgPDwgIiAoIiA8PCBub2RlLT5nZXRDb21wbGV0ZVN0cmluZygpIDw8ICIpIjsK
KworICAgIG91dCA8PCAiXG4iOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVE91dHB1
dFRyYXZlcnNlcjo6dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQor
eworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IHNpbms7CisKKyAgICBPdXRwdXRUcmVlVGV4dChv
dXQsIG5vZGUsIGRlcHRoKTsKKworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkgeworICAgICAg
ICBjYXNlIEVPcE5lZ2F0aXZlOiAgICAgICBvdXQgPDwgIk5lZ2F0ZSB2YWx1ZSI7ICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVjdG9yTG9naWNhbE5vdDoKKyAgICAgICAgY2FzZSBF
T3BMb2dpY2FsTm90OiAgICAgb3V0IDw8ICJOZWdhdGUgY29uZGl0aW9uYWwiOyAgIGJyZWFrOwor
CisgICAgICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDogIG91dCA8PCAiUG9zdC1JbmNyZW1lbnQi
OyAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OiAgb3V0IDw8ICJQ
b3N0LURlY3JlbWVudCI7ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFByZUluY3JlbWVu
dDogICBvdXQgPDwgIlByZS1JbmNyZW1lbnQiOyAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wUHJlRGVjcmVtZW50OiAgIG91dCA8PCAiUHJlLURlY3JlbWVudCI7ICAgICAgICBicmVhazsK
KworICAgICAgICBjYXNlIEVPcENvbnZJbnRUb0Jvb2w6ICBvdXQgPDwgIkNvbnZlcnQgaW50IHRv
IGJvb2wiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9Cb29sOm91dCA8PCAi
Q29udmVydCBmbG9hdCB0byBib29sIjticmVhazsKKyAgICAgICAgY2FzZSBFT3BDb252Qm9vbFRv
RmxvYXQ6b3V0IDw8ICJDb252ZXJ0IGJvb2wgdG8gZmxvYXQiO2JyZWFrOworICAgICAgICBjYXNl
IEVPcENvbnZJbnRUb0Zsb2F0OiBvdXQgPDwgIkNvbnZlcnQgaW50IHRvIGZsb2F0IjsgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9JbnQ6IG91dCA8PCAiQ29udmVydCBmbG9hdCB0
byBpbnQiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb252Qm9vbFRvSW50OiAgb3V0IDw8ICJD
b252ZXJ0IGJvb2wgdG8gaW50IjsgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wUmFkaWFuczog
ICAgICAgIG91dCA8PCAicmFkaWFucyI7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BEZWdyZWVzOiAgICAgICAgb3V0IDw8ICJkZWdyZWVzIjsgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEVPcFNpbjogICAgICAgICAgICBvdXQgPDwgInNpbmUiOyAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29zOiAgICAgICAgICAgIG91dCA8PCAi
Y29zaW5lIjsgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BUYW46ICAgICAg
ICAgICAgb3V0IDw8ICJ0YW5nZW50IjsgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEVPcEFzaW46ICAgICAgICAgICBvdXQgPDwgImFyYyBzaW5lIjsgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wQWNvczogICAgICAgICAgIG91dCA8PCAiYXJjIGNvc2luZSI7ICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BBdGFuOiAgICAgICAgICAgb3V0IDw8ICJh
cmMgdGFuZ2VudCI7ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wRXhwOiAgICAg
ICAgICAgIG91dCA8PCAiZXhwIjsgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BMb2c6ICAgICAgICAgICAgb3V0IDw8ICJsb2ciOyAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEVPcEV4cDI6ICAgICAgICAgICBvdXQgPDwgImV4cDIiOyAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9nMjogICAgICAgICAgIG91dCA8PCAi
bG9nMiI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BTcXJ0OiAgICAg
ICAgICAgb3V0IDw8ICJzcXJ0IjsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEVPcEludmVyc2VTcXJ0OiAgICBvdXQgPDwgImludmVyc2Ugc3FydCI7ICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgY2FzZSBFT3BBYnM6ICAgICAgICAgICAgb3V0IDw8ICJBYnNvbHV0ZSB2YWx1
ZSI7ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFNpZ246ICAgICAgICAgICBvdXQgPDwg
IlNpZ24iOyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRmxvb3I6ICAg
ICAgICAgIG91dCA8PCAiRmxvb3IiOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BDZWlsOiAgICAgICAgICAgb3V0IDw8ICJDZWlsaW5nIjsgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEVPcEZyYWN0OiAgICAgICAgICBvdXQgPDwgIkZyYWN0aW9uIjsgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BMZW5ndGg6ICAgICAgICAgb3V0IDw8
ICJsZW5ndGgiOyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcE5vcm1hbGl6
ZTogICAgICBvdXQgPDwgIm5vcm1hbGl6ZSI7ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAvLwljYXNlIEVPcERQZHg6ICAgICAgICAgICBvdXQgPDwgImRQZHgiOyAgICAgICAgICAgICAg
ICAgYnJlYWs7ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLwljYXNlIEVPcERQZHk6ICAg
ICAgICAgICBvdXQgPDwgImRQZHkiOyAgICAgICAgICAgICAgICAgYnJlYWs7ICAgCisgICAgICAg
ICAgICAvLwljYXNlIEVPcEZ3aWR0aDogICAgICAgICBvdXQgPDwgImZ3aWR0aCI7ICAgICAgICAg
ICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgIAorCisgICAgICAgIGNhc2UgRU9wQW55OiAg
ICAgICAgICAgIG91dCA8PCAiYW55IjsgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BBbGw6ICAgICAgICAgICAgb3V0IDw8ICJhbGwiOyAgICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBvdXQucHJlZml4KEVQcmVmaXhF
cnJvcik7CisgICAgICAgICAgICBvdXQgPDwgIkJhZCB1bmFyeSBvcCI7CisgICAgfQorCisgICAg
b3V0IDw8ICIgKCIgPDwgbm9kZS0+Z2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiKSI7CisKKyAgICBv
dXQgPDwgIlxuIjsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFRPdXRwdXRUcmF2ZXJz
ZXI6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQor
eworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IHNpbms7CisKKyAgICBpZiAobm9kZS0+Z2V0T3Ao
KSA9PSBFT3BOdWxsKSB7CisgICAgICAgIG91dC5wcmVmaXgoRVByZWZpeEVycm9yKTsKKyAgICAg
ICAgb3V0IDw8ICJub2RlIGlzIHN0aWxsIEVPcE51bGwhIjsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgT3V0cHV0VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7CisKKyAgICBz
d2l0Y2ggKG5vZGUtPmdldE9wKCkpIHsKKyAgICAgICAgY2FzZSBFT3BTZXF1ZW5jZTogICAgICBv
dXQgPDwgIlNlcXVlbmNlXG4iOyByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBFT3BDb21tYTog
ICAgICAgICBvdXQgPDwgIkNvbW1hXG4iOyByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBFT3BG
dW5jdGlvbjogICAgICBvdXQgPDwgIkZ1bmN0aW9uIERlZmluaXRpb246ICIgPDwgbm9kZS0+Z2V0
TmFtZSgpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BGdW5jdGlvbkNhbGw6ICBvdXQgPDwgIkZ1
bmN0aW9uIENhbGw6ICIgPDwgbm9kZS0+Z2V0TmFtZSgpOyBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BQYXJhbWV0ZXJzOiAgICBvdXQgPDwgIkZ1bmN0aW9uIFBhcmFtZXRlcnM6ICI7ICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OiBvdXQgPDwgIkNv
bnN0cnVjdCBmbG9hdCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzI6ICBv
dXQgPDwgIkNvbnN0cnVjdCB2ZWMyIjsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVj
dFZlYzM6ICBvdXQgPDwgIkNvbnN0cnVjdCB2ZWMzIjsgIGJyZWFrOworICAgICAgICBjYXNlIEVP
cENvbnN0cnVjdFZlYzQ6ICBvdXQgPDwgIkNvbnN0cnVjdCB2ZWM0IjsgIGJyZWFrOworICAgICAg
ICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6ICBvdXQgPDwgIkNvbnN0cnVjdCBib29sIjsgIGJyZWFr
OworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMyOiBvdXQgPDwgIkNvbnN0cnVjdCBidmVj
MiI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMzOiBvdXQgPDwgIkNvbnN0
cnVjdCBidmVjMyI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWM0OiBvdXQg
PDwgIkNvbnN0cnVjdCBidmVjNCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElu
dDogICBvdXQgPDwgIkNvbnN0cnVjdCBpbnQiOyAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdElWZWMyOiBvdXQgPDwgIkNvbnN0cnVjdCBpdmVjMiI7IGJyZWFrOworICAgICAgICBj
YXNlIEVPcENvbnN0cnVjdElWZWMzOiBvdXQgPDwgIkNvbnN0cnVjdCBpdmVjMyI7IGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWM0OiBvdXQgPDwgIkNvbnN0cnVjdCBpdmVjNCI7
IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6ICBvdXQgPDwgIkNvbnN0cnVj
dCBtYXQyIjsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6ICBvdXQgPDwg
IkNvbnN0cnVjdCBtYXQzIjsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6
ICBvdXQgPDwgIkNvbnN0cnVjdCBtYXQ0IjsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0
cnVjdFN0cnVjdDogIG91dCA8PCAiQ29uc3RydWN0IHN0cnVjdHVyZSI7ICBicmVhazsKKworICAg
ICAgICBjYXNlIEVPcExlc3NUaGFuOiAgICAgICAgIG91dCA8PCAiQ29tcGFyZSBMZXNzIFRoYW4i
OyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjogICAgICBv
dXQgPDwgIkNvbXBhcmUgR3JlYXRlciBUaGFuIjsgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wTGVzc1RoYW5FcXVhbDogICAgb3V0IDw8ICJDb21wYXJlIExlc3MgVGhhbiBvciBFcXVh
bCI7ICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6IG91dCA8PCAi
Q29tcGFyZSBHcmVhdGVyIFRoYW4gb3IgRXF1YWwiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BW
ZWN0b3JFcXVhbDogICAgICBvdXQgPDwgIkVxdWFsIjsgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVjdG9yTm90RXF1YWw6ICAgb3V0IDw8ICJOb3RFcXVh
bCI7ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wTW9kOiAg
ICAgICAgICAgb3V0IDw8ICJtb2QiOyAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFBv
dzogICAgICAgICAgIG91dCA8PCAicG93IjsgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
IEVPcEF0YW46ICAgICAgICAgIG91dCA8PCAiYXJjIHRhbmdlbnQiOyBicmVhazsKKworICAgICAg
ICBjYXNlIEVPcE1pbjogICAgICAgICAgIG91dCA8PCAibWluIjsgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BNYXg6ICAgICAgICAgICBvdXQgPDwgIm1heCI7ICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wQ2xhbXA6ICAgICAgICAgb3V0IDw8ICJjbGFtcCI7ICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEVPcE1peDogICAgICAgICAgIG91dCA8PCAibWl4IjsgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BTdGVwOiAgICAgICAgICBvdXQgPDwgInN0ZXAiOyAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU21vb3RoU3RlcDogICAgb3V0IDw8ICJzbW9v
dGhzdGVwIjsgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wRGlzdGFuY2U6ICAgICAgb3V0IDw8
ICJkaXN0YW5jZSI7ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcERvdDog
ICAgICAgICAgIG91dCA8PCAiZG90LXByb2R1Y3QiOyAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BDcm9zczogICAgICAgICBvdXQgPDwgImNyb3NzLXByb2R1Y3QiOyAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRmFjZUZvcndhcmQ6ICAgb3V0IDw8ICJmYWNlLWZv
cndhcmQiOyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFJlZmxlY3Q6ICAgICAg
IG91dCA8PCAicmVmbGVjdCI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BSZWZyYWN0OiAgICAgICBvdXQgPDwgInJlZnJhY3QiOyAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wTXVsOiAgICAgICAgICAgb3V0IDw8ICJjb21wb25lbnQtd2lzZSBt
dWx0aXBseSI7IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wRGVjbGFyYXRpb246ICAgb3V0IDw8
ICJEZWNsYXJhdGlvbjogIjsgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgb3V0LnByZWZpeChFUHJlZml4RXJyb3IpOworICAgICAgICAgICAgb3V0IDw8ICJCYWQgYWdn
cmVnYXRpb24gb3AiOworICAgIH0KKworICAgIGlmIChub2RlLT5nZXRPcCgpICE9IEVPcFNlcXVl
bmNlICYmIG5vZGUtPmdldE9wKCkgIT0gRU9wUGFyYW1ldGVycykKKyAgICAgICAgb3V0IDw8ICIg
KCIgPDwgbm9kZS0+Z2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiKSI7CisKKyAgICBvdXQgPDwgIlxu
IjsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0
U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBub2RlKQoreworICAgIFRJ
bmZvU2lua0Jhc2UmIG91dCA9IHNpbms7CisKKyAgICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUs
IGRlcHRoKTsKKworICAgIG91dCA8PCAiVGVzdCBjb25kaXRpb24gYW5kIHNlbGVjdCI7CisgICAg
b3V0IDw8ICIgKCIgPDwgbm9kZS0+Z2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiKVxuIjsKKworICAg
ICsrZGVwdGg7CisKKyAgICBPdXRwdXRUcmVlVGV4dChzaW5rLCBub2RlLCBkZXB0aCk7CisgICAg
b3V0IDw8ICJDb25kaXRpb25cbiI7CisgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNl
KHRoaXMpOworCisgICAgT3V0cHV0VHJlZVRleHQoc2luaywgbm9kZSwgZGVwdGgpOworICAgIGlm
IChub2RlLT5nZXRUcnVlQmxvY2soKSkgeworICAgICAgICBvdXQgPDwgInRydWUgY2FzZVxuIjsK
KyAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0gZWxz
ZQorICAgICAgICBvdXQgPDwgInRydWUgY2FzZSBpcyBudWxsXG4iOworCisgICAgaWYgKG5vZGUt
PmdldEZhbHNlQmxvY2soKSkgeworICAgICAgICBPdXRwdXRUcmVlVGV4dChzaW5rLCBub2RlLCBk
ZXB0aCk7CisgICAgICAgIG91dCA8PCAiZmFsc2UgY2FzZVxuIjsKKyAgICAgICAgbm9kZS0+Z2V0
RmFsc2VCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9CisKKyAgICAtLWRlcHRoOworCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0Q29uc3Rh
bnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNl
JiBvdXQgPSBzaW5rOworCisgICAgc2l6ZV90IHNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0T2Jq
ZWN0U2l6ZSgpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAg
ICAgICAgT3V0cHV0VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7CisgICAgICAgIHN3aXRjaCAo
bm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVtpXS5nZXRUeXBlKCkpIHsKKyAgICAgICAgICAg
IGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0VW5pb25BcnJheVBv
aW50ZXIoKVtpXS5nZXRCQ29uc3QoKSkKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJ0cnVl
IjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZmFs
c2UiOworCisgICAgICAgICAgICAgICAgb3V0IDw8ICIgKCIgPDwgImNvbnN0IGJvb2wiIDw8ICIp
IjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIlxuIjsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICAgICAgb3V0IDw8IG5vZGUt
PmdldFVuaW9uQXJyYXlQb2ludGVyKClbaV0uZ2V0RkNvbnN0KCk7CisgICAgICAgICAgICAgICAg
b3V0IDw8ICIgKGNvbnN0IGZsb2F0KVxuIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgRWJ0SW50OgorICAgICAgICAgICAgICAgIG91dCA8PCBub2RlLT5nZXRVbmlv
bkFycmF5UG9pbnRlcigpW2ldLmdldElDb25zdCgpOworICAgICAgICAgICAgICAgIG91dCA8PCAi
IChjb25zdCBpbnQpXG4iOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBvdXQubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwg
bm9kZS0+Z2V0TGluZSgpLCAiVW5rbm93biBjb25zdGFudCIpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorfQorCitib29sIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0
TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqIG5vZGUpCit7CisgICAgVEluZm9TaW5rQmFz
ZSYgb3V0ID0gc2luazsKKworICAgIE91dHB1dFRyZWVUZXh0KG91dCwgbm9kZSwgZGVwdGgpOwor
CisgICAgb3V0IDw8ICJMb29wIHdpdGggY29uZGl0aW9uICI7CisgICAgaWYgKG5vZGUtPmdldFR5
cGUoKSA9PSBFTG9vcERvV2hpbGUpCisgICAgICAgIG91dCA8PCAibm90ICI7CisgICAgb3V0IDw8
ICJ0ZXN0ZWQgZmlyc3RcbiI7CisKKyAgICArK2RlcHRoOworCisgICAgT3V0cHV0VHJlZVRleHQo
c2luaywgbm9kZSwgZGVwdGgpOworICAgIGlmIChub2RlLT5nZXRDb25kaXRpb24oKSkgeworICAg
ICAgICBvdXQgPDwgIkxvb3AgQ29uZGl0aW9uXG4iOworICAgICAgICBub2RlLT5nZXRDb25kaXRp
b24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIG91dCA8PCAiTm8gbG9v
cCBjb25kaXRpb25cbiI7CisKKyAgICBPdXRwdXRUcmVlVGV4dChzaW5rLCBub2RlLCBkZXB0aCk7
CisgICAgaWYgKG5vZGUtPmdldEJvZHkoKSkgeworICAgICAgICBvdXQgPDwgIkxvb3AgQm9keVxu
IjsKKyAgICAgICAgbm9kZS0+Z2V0Qm9keSgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgb3V0IDw8ICJObyBsb29wIGJvZHlcbiI7CisKKyAgICBpZiAobm9kZS0+Z2V0RXhw
cmVzc2lvbigpKSB7CisgICAgICAgIE91dHB1dFRyZWVUZXh0KHNpbmssIG5vZGUsIGRlcHRoKTsK
KyAgICAgICAgb3V0IDw8ICJMb29wIFRlcm1pbmFsIEV4cHJlc3Npb25cbiI7CisgICAgICAgIG5v
ZGUtPmdldEV4cHJlc3Npb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorCisgICAgLS1kZXB0
aDsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNp
dEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCogbm9kZSkKK3sKKyAgICBUSW5mb1Np
bmtCYXNlJiBvdXQgPSBzaW5rOworCisgICAgT3V0cHV0VHJlZVRleHQob3V0LCBub2RlLCBkZXB0
aCk7CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldEZsb3dPcCgpKSB7CisgICAgICAgIGNhc2UgRU9w
S2lsbDogICAgICBvdXQgPDwgIkJyYW5jaDogS2lsbCI7ICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BCcmVhazogICAgIG91dCA8PCAiQnJhbmNoOiBCcmVhayI7ICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEVPcENvbnRpbnVlOiAgb3V0IDw8ICJCcmFuY2g6IENvbnRpbnVl
IjsgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUmV0dXJuOiAgICBvdXQgPDwgIkJyYW5j
aDogUmV0dXJuIjsgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgIG91
dCA8PCAiQnJhbmNoOiBVbmtub3duIEJyYW5jaCI7IGJyZWFrOworICAgIH0KKworICAgIGlmIChu
b2RlLT5nZXRFeHByZXNzaW9uKCkpIHsKKyAgICAgICAgb3V0IDw8ICIgd2l0aCBleHByZXNzaW9u
XG4iOworICAgICAgICArK2RlcHRoOworICAgICAgICBub2RlLT5nZXRFeHByZXNzaW9uKCktPnRy
YXZlcnNlKHRoaXMpOworICAgICAgICAtLWRlcHRoOworICAgIH0gZWxzZQorICAgICAgICBvdXQg
PDwgIlxuIjsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8KKy8vIFRoaXMgZnVuY3Rpb24g
aXMgdGhlIG9uZSB0byBjYWxsIGV4dGVybmFsbHkgdG8gc3RhcnQgdGhlIHRyYXZlcnNhbC4KKy8v
IEluZGl2aWR1YWwgZnVuY3Rpb25zIGNhbiBiZSBpbml0aWFsaXplZCB0byAwIHRvIHNraXAgcHJv
Y2Vzc2luZyBvZiB0aGF0CisvLyB0eXBlIG9mIG5vZGUuICBJdCdzIGNoaWxkcmVuIHdpbGwgc3Rp
bGwgYmUgcHJvY2Vzc2VkLgorLy8KK3ZvaWQgVEludGVybWVkaWF0ZTo6b3V0cHV0VHJlZShUSW50
ZXJtTm9kZSogcm9vdCkKK3sKKyAgICBpZiAocm9vdCA9PSAwKQorICAgICAgICByZXR1cm47CisK
KyAgICBUT3V0cHV0VHJhdmVyc2VyIGl0KGluZm9TaW5rLmluZm8pOworCisgICAgcm9vdC0+dHJh
dmVyc2UoJml0KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGY5
ZmUyM2QzYjQ4ZWNiMDJlMWFhNWYxMDc2MDRiMzUxODRhZmJiOQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2ludGVybWVk
aWF0ZS5oCkBAIC0wLDAgKzEsNjM1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLworLy8gRGVm
aW5pdGlvbiBvZiB0aGUgaW4tbWVtb3J5IGhpZ2gtbGV2ZWwgaW50ZXJtZWRpYXRlIHJlcHJlc2Vu
dGF0aW9uCisvLyBvZiBzaGFkZXJzLiAgVGhpcyBpcyBhIHRyZWUgdGhhdCBwYXJzZXIgY3JlYXRl
cy4KKy8vCisvLyBOb2RlcyBpbiB0aGUgdHJlZSBhcmUgZGVmaW5lZCBhcyBhIGhpZXJhcmNoeSBv
ZiBjbGFzc2VzIGRlcml2ZWQgZnJvbSAKKy8vIFRJbnRlcm1Ob2RlLiBFYWNoIGlzIGEgbm9kZSBp
biBhIHRyZWUuICBUaGVyZSBpcyBubyBwcmVzZXQgYnJhbmNoaW5nIGZhY3RvcjsKKy8vIGVhY2gg
bm9kZSBjYW4gaGF2ZSBpdCdzIG93biB0eXBlIG9mIGxpc3Qgb2YgY2hpbGRyZW4uCisvLworCisj
aWZuZGVmIF9fSU5URVJNRURJQVRFX0gKKyNkZWZpbmUgX19JTlRFUk1FRElBVEVfSAorCisjaW5j
bHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21tb24uaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1R5cGVzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFu
dFVuaW9uLmgiCisKKy8vCisvLyBPcGVyYXRvcnMgdXNlZCBieSB0aGUgaGlnaC1sZXZlbCAocGFy
c2UgdHJlZSkgcmVwcmVzZW50YXRpb24uCisvLworZW51bSBUT3BlcmF0b3IgeworICAgIEVPcE51
bGwsICAgICAgICAgICAgLy8gaWYgaW4gYSBub2RlLCBzaG91bGQgb25seSBtZWFuIGEgbm9kZSBp
cyBzdGlsbCBiZWluZyBidWlsdAorICAgIEVPcFNlcXVlbmNlLCAgICAgICAgLy8gZGVub3RlcyBh
IGxpc3Qgb2Ygc3RhdGVtZW50cywgb3IgcGFyYW1ldGVycywgZXRjLgorICAgIEVPcEZ1bmN0aW9u
Q2FsbCwgICAgCisgICAgRU9wRnVuY3Rpb24sICAgICAgICAvLyBGb3IgZnVuY3Rpb24gZGVmaW5p
dGlvbgorICAgIEVPcFBhcmFtZXRlcnMsICAgICAgLy8gYW4gYWdncmVnYXRlIGxpc3RpbmcgdGhl
IHBhcmFtZXRlcnMgdG8gYSBmdW5jdGlvbgorCisgICAgRU9wRGVjbGFyYXRpb24sCisgICAgRU9w
UHJvdG90eXBlLAorCisgICAgLy8KKyAgICAvLyBVbmFyeSBvcGVyYXRvcnMKKyAgICAvLworCisg
ICAgRU9wTmVnYXRpdmUsCisgICAgRU9wTG9naWNhbE5vdCwKKyAgICBFT3BWZWN0b3JMb2dpY2Fs
Tm90LAorCisgICAgRU9wUG9zdEluY3JlbWVudCwKKyAgICBFT3BQb3N0RGVjcmVtZW50LAorICAg
IEVPcFByZUluY3JlbWVudCwKKyAgICBFT3BQcmVEZWNyZW1lbnQsCisKKyAgICBFT3BDb252SW50
VG9Cb29sLAorICAgIEVPcENvbnZGbG9hdFRvQm9vbCwKKyAgICBFT3BDb252Qm9vbFRvRmxvYXQs
CisgICAgRU9wQ29udkludFRvRmxvYXQsCisgICAgRU9wQ29udkZsb2F0VG9JbnQsCisgICAgRU9w
Q29udkJvb2xUb0ludCwKKworICAgIC8vCisgICAgLy8gYmluYXJ5IG9wZXJhdGlvbnMKKyAgICAv
LworCisgICAgRU9wQWRkLAorICAgIEVPcFN1YiwKKyAgICBFT3BNdWwsCisgICAgRU9wRGl2LAor
ICAgIEVPcEVxdWFsLAorICAgIEVPcE5vdEVxdWFsLAorICAgIEVPcFZlY3RvckVxdWFsLAorICAg
IEVPcFZlY3Rvck5vdEVxdWFsLAorICAgIEVPcExlc3NUaGFuLAorICAgIEVPcEdyZWF0ZXJUaGFu
LAorICAgIEVPcExlc3NUaGFuRXF1YWwsCisgICAgRU9wR3JlYXRlclRoYW5FcXVhbCwKKyAgICBF
T3BDb21tYSwKKworICAgIEVPcFZlY3RvclRpbWVzU2NhbGFyLAorICAgIEVPcFZlY3RvclRpbWVz
TWF0cml4LAorICAgIEVPcE1hdHJpeFRpbWVzVmVjdG9yLAorICAgIEVPcE1hdHJpeFRpbWVzU2Nh
bGFyLAorCisgICAgRU9wTG9naWNhbE9yLAorICAgIEVPcExvZ2ljYWxYb3IsCisgICAgRU9wTG9n
aWNhbEFuZCwKKworICAgIEVPcEluZGV4RGlyZWN0LAorICAgIEVPcEluZGV4SW5kaXJlY3QsCisg
ICAgRU9wSW5kZXhEaXJlY3RTdHJ1Y3QsCisKKyAgICBFT3BWZWN0b3JTd2l6emxlLAorCisgICAg
Ly8KKyAgICAvLyBCdWlsdC1pbiBmdW5jdGlvbnMgcG90ZW50aWFsbHkgbWFwcGVkIHRvIG9wZXJh
dG9ycworICAgIC8vCisKKyAgICBFT3BSYWRpYW5zLAorICAgIEVPcERlZ3JlZXMsCisgICAgRU9w
U2luLAorICAgIEVPcENvcywKKyAgICBFT3BUYW4sCisgICAgRU9wQXNpbiwKKyAgICBFT3BBY29z
LAorICAgIEVPcEF0YW4sCisKKyAgICBFT3BQb3csCisgICAgRU9wRXhwLAorICAgIEVPcExvZywK
KyAgICBFT3BFeHAyLAorICAgIEVPcExvZzIsCisgICAgRU9wU3FydCwKKyAgICBFT3BJbnZlcnNl
U3FydCwKKworICAgIEVPcEFicywKKyAgICBFT3BTaWduLAorICAgIEVPcEZsb29yLAorICAgIEVP
cENlaWwsCisgICAgRU9wRnJhY3QsCisgICAgRU9wTW9kLAorICAgIEVPcE1pbiwKKyAgICBFT3BN
YXgsCisgICAgRU9wQ2xhbXAsCisgICAgRU9wTWl4LAorICAgIEVPcFN0ZXAsCisgICAgRU9wU21v
b3RoU3RlcCwKKworICAgIEVPcExlbmd0aCwKKyAgICBFT3BEaXN0YW5jZSwKKyAgICBFT3BEb3Qs
CisgICAgRU9wQ3Jvc3MsCisgICAgRU9wTm9ybWFsaXplLAorICAgIEVPcEZhY2VGb3J3YXJkLAor
ICAgIEVPcFJlZmxlY3QsCisgICAgRU9wUmVmcmFjdCwKKworICAgIEVPcERGZHgsICAgICAgICAg
ICAgLy8gRnJhZ21lbnQgb25seSwgT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIGV4dGVuc2lvbgor
ICAgIEVPcERGZHksICAgICAgICAgICAgLy8gRnJhZ21lbnQgb25seSwgT0VTX3N0YW5kYXJkX2Rl
cml2YXRpdmVzIGV4dGVuc2lvbgorICAgIEVPcEZ3aWR0aCwgICAgICAgICAgLy8gRnJhZ21lbnQg
b25seSwgT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIGV4dGVuc2lvbgorCisgICAgRU9wTWF0cml4
VGltZXNNYXRyaXgsCisKKyAgICBFT3BBbnksCisgICAgRU9wQWxsLAorCisgICAgLy8KKyAgICAv
LyBCcmFuY2gKKyAgICAvLworCisgICAgRU9wS2lsbCwgICAgICAgICAgICAvLyBGcmFnbWVudCBv
bmx5CisgICAgRU9wUmV0dXJuLAorICAgIEVPcEJyZWFrLAorICAgIEVPcENvbnRpbnVlLAorCisg
ICAgLy8KKyAgICAvLyBDb25zdHJ1Y3RvcnMKKyAgICAvLworCisgICAgRU9wQ29uc3RydWN0SW50
LAorICAgIEVPcENvbnN0cnVjdEJvb2wsCisgICAgRU9wQ29uc3RydWN0RmxvYXQsCisgICAgRU9w
Q29uc3RydWN0VmVjMiwKKyAgICBFT3BDb25zdHJ1Y3RWZWMzLAorICAgIEVPcENvbnN0cnVjdFZl
YzQsCisgICAgRU9wQ29uc3RydWN0QlZlYzIsCisgICAgRU9wQ29uc3RydWN0QlZlYzMsCisgICAg
RU9wQ29uc3RydWN0QlZlYzQsCisgICAgRU9wQ29uc3RydWN0SVZlYzIsCisgICAgRU9wQ29uc3Ry
dWN0SVZlYzMsCisgICAgRU9wQ29uc3RydWN0SVZlYzQsCisgICAgRU9wQ29uc3RydWN0TWF0MiwK
KyAgICBFT3BDb25zdHJ1Y3RNYXQzLAorICAgIEVPcENvbnN0cnVjdE1hdDQsCisgICAgRU9wQ29u
c3RydWN0U3RydWN0LAorCisgICAgLy8KKyAgICAvLyBtb3ZlcworICAgIC8vCisKKyAgICBFT3BB
c3NpZ24sCisgICAgRU9wSW5pdGlhbGl6ZSwKKyAgICBFT3BBZGRBc3NpZ24sCisgICAgRU9wU3Vi
QXNzaWduLAorICAgIEVPcE11bEFzc2lnbiwKKyAgICBFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2ln
biwKKyAgICBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbiwKKyAgICBFT3BNYXRyaXhUaW1lc1Nj
YWxhckFzc2lnbiwKKyAgICBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbiwKKyAgICBFT3BEaXZB
c3NpZ24KK307CisKK2V4dGVybiBjb25zdCBjaGFyKiBnZXRPcGVyYXRvclN0cmluZyhUT3BlcmF0
b3Igb3ApOworCitjbGFzcyBUSW50ZXJtVHJhdmVyc2VyOworY2xhc3MgVEludGVybUFnZ3JlZ2F0
ZTsKK2NsYXNzIFRJbnRlcm1CaW5hcnk7CitjbGFzcyBUSW50ZXJtVW5hcnk7CitjbGFzcyBUSW50
ZXJtQ29uc3RhbnRVbmlvbjsKK2NsYXNzIFRJbnRlcm1TZWxlY3Rpb247CitjbGFzcyBUSW50ZXJt
VHlwZWQ7CitjbGFzcyBUSW50ZXJtU3ltYm9sOworY2xhc3MgVEludGVybUxvb3A7CitjbGFzcyBU
SW5mb1Npbms7CisKKy8vCisvLyBCYXNlIGNsYXNzIGZvciB0aGUgdHJlZSBub2RlcworLy8KK2Ns
YXNzIFRJbnRlcm1Ob2RlIHsKK3B1YmxpYzoKKyAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRF
KCk7CisgICAgVEludGVybU5vZGUoKSB7CisgICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyB0byBU
U291cmNlTG9jIGNvbnN0cnVjdG9yCisgICAgICAgIC8vIGFmdGVyIGdldHRpbmcgcmlkIG9mIFRQ
dWJsaWNUeXBlLgorICAgICAgICBsaW5lLmZpcnN0X2ZpbGUgPSBsaW5lLmxhc3RfZmlsZSA9IDA7
CisgICAgICAgIGxpbmUuZmlyc3RfbGluZSA9IGxpbmUubGFzdF9saW5lID0gMDsKKyAgICB9Cisg
ICAgdmlydHVhbCB+VEludGVybU5vZGUoKSB7IH0KKworICAgIGNvbnN0IFRTb3VyY2VMb2MmIGdl
dExpbmUoKSBjb25zdCB7IHJldHVybiBsaW5lOyB9CisgICAgdm9pZCBzZXRMaW5lKGNvbnN0IFRT
b3VyY2VMb2MmIGwpIHsgbGluZSA9IGw7IH0KKworICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShU
SW50ZXJtVHJhdmVyc2VyKikgPSAwOworICAgIHZpcnR1YWwgVEludGVybVR5cGVkKiBnZXRBc1R5
cGVkKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgVEludGVybUNvbnN0YW50VW5pb24qIGdl
dEFzQ29uc3RhbnRVbmlvbigpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1BZ2dy
ZWdhdGUqIGdldEFzQWdncmVnYXRlKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgVEludGVy
bUJpbmFyeSogZ2V0QXNCaW5hcnlOb2RlKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgVElu
dGVybVVuYXJ5KiBnZXRBc1VuYXJ5Tm9kZSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFRJ
bnRlcm1TZWxlY3Rpb24qIGdldEFzU2VsZWN0aW9uTm9kZSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2
aXJ0dWFsIFRJbnRlcm1TeW1ib2wqIGdldEFzU3ltYm9sTm9kZSgpIHsgcmV0dXJuIDA7IH0KKyAg
ICB2aXJ0dWFsIFRJbnRlcm1Mb29wKiBnZXRBc0xvb3BOb2RlKCkgeyByZXR1cm4gMDsgfQorCisg
ICAgLy8gUmVwbGFjZSBhIGNoaWxkIG5vZGUuIFJldHVybiB0cnVlIGlmIHxvcmlnaW5hbHwgaXMg
YSBjaGlsZAorICAgIC8vIG5vZGUgYW5kIGl0IGlzIHJlcGxhY2VkOyBvdGhlcndpc2UsIHJldHVy
biBmYWxzZS4KKyAgICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxkTm9kZSgKKyAgICAgICAgVElu
dGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFjZW1lbnQpID0gMDsKKworcHJv
dGVjdGVkOgorICAgIFRTb3VyY2VMb2MgbGluZTsKK307CisKKy8vCisvLyBUaGlzIGlzIGp1c3Qg
dG8gaGVscCB5YWNjLgorLy8KK3N0cnVjdCBUSW50ZXJtTm9kZVBhaXIgeworICAgIFRJbnRlcm1O
b2RlKiBub2RlMTsKKyAgICBUSW50ZXJtTm9kZSogbm9kZTI7Cit9OworCisvLworLy8gSW50ZXJt
ZWRpYXRlIGNsYXNzIGZvciBub2RlcyB0aGF0IGhhdmUgYSB0eXBlLgorLy8KK2NsYXNzIFRJbnRl
cm1UeXBlZCA6IHB1YmxpYyBUSW50ZXJtTm9kZSB7CitwdWJsaWM6CisgICAgVEludGVybVR5cGVk
KGNvbnN0IFRUeXBlJiB0KSA6IHR5cGUodCkgIHsgfQorICAgIHZpcnR1YWwgVEludGVybVR5cGVk
KiBnZXRBc1R5cGVkKCkgeyByZXR1cm4gdGhpczsgfQorCisgICAgdmlydHVhbCBib29sIGhhc1Np
ZGVFZmZlY3RzKCkgY29uc3QgPSAwOworCisgICAgdm9pZCBzZXRUeXBlKGNvbnN0IFRUeXBlJiB0
KSB7IHR5cGUgPSB0OyB9CisgICAgY29uc3QgVFR5cGUmIGdldFR5cGUoKSBjb25zdCB7IHJldHVy
biB0eXBlOyB9CisgICAgVFR5cGUqIGdldFR5cGVQb2ludGVyKCkgeyByZXR1cm4gJnR5cGU7IH0K
KworICAgIFRCYXNpY1R5cGUgZ2V0QmFzaWNUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRC
YXNpY1R5cGUoKTsgfQorICAgIFRRdWFsaWZpZXIgZ2V0UXVhbGlmaWVyKCkgY29uc3QgeyByZXR1
cm4gdHlwZS5nZXRRdWFsaWZpZXIoKTsgfQorICAgIFRQcmVjaXNpb24gZ2V0UHJlY2lzaW9uKCkg
Y29uc3QgeyByZXR1cm4gdHlwZS5nZXRQcmVjaXNpb24oKTsgfQorICAgIGludCBnZXROb21pbmFs
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0Tm9taW5hbFNpemUoKTsgfQorICAgIAorICAg
IGJvb2wgaXNNYXRyaXgoKSBjb25zdCB7IHJldHVybiB0eXBlLmlzTWF0cml4KCk7IH0KKyAgICBi
b29sIGlzQXJyYXkoKSAgY29uc3QgeyByZXR1cm4gdHlwZS5pc0FycmF5KCk7IH0KKyAgICBib29s
IGlzVmVjdG9yKCkgY29uc3QgeyByZXR1cm4gdHlwZS5pc1ZlY3RvcigpOyB9CisgICAgYm9vbCBp
c1NjYWxhcigpIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNTY2FsYXIoKTsgfQorICAgIGNvbnN0IGNo
YXIqIGdldEJhc2ljU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRCYXNpY1N0cmluZygp
OyB9CisgICAgY29uc3QgY2hhciogZ2V0UXVhbGlmaWVyU3RyaW5nKCkgY29uc3QgeyByZXR1cm4g
dHlwZS5nZXRRdWFsaWZpZXJTdHJpbmcoKTsgfQorICAgIFRTdHJpbmcgZ2V0Q29tcGxldGVTdHJp
bmcoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldENvbXBsZXRlU3RyaW5nKCk7IH0KKworICAgIGlu
dCB0b3RhbFJlZ2lzdGVyQ291bnQoKSBjb25zdCB7IHJldHVybiB0eXBlLnRvdGFsUmVnaXN0ZXJD
b3VudCgpOyB9CisgICAgaW50IGVsZW1lbnRSZWdpc3RlckNvdW50KCkgY29uc3QgeyByZXR1cm4g
dHlwZS5lbGVtZW50UmVnaXN0ZXJDb3VudCgpOyB9CisgICAgaW50IGdldEFycmF5U2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIHR5cGUuZ2V0QXJyYXlTaXplKCk7IH0KKworcHJvdGVjdGVkOgorICAgIFRU
eXBlIHR5cGU7Cit9OworCisvLworLy8gSGFuZGxlIGZvciwgZG8td2hpbGUsIGFuZCB3aGlsZSBs
b29wcy4KKy8vCitlbnVtIFRMb29wVHlwZSB7CisgICAgRUxvb3BGb3IsCisgICAgRUxvb3BXaGls
ZSwKKyAgICBFTG9vcERvV2hpbGUKK307CisKK2NsYXNzIFRJbnRlcm1Mb29wIDogcHVibGljIFRJ
bnRlcm1Ob2RlIHsKK3B1YmxpYzoKKyAgICBUSW50ZXJtTG9vcChUTG9vcFR5cGUgYVR5cGUsCisg
ICAgICAgICAgICAgICAgVEludGVybU5vZGUgKmFJbml0LCBUSW50ZXJtVHlwZWQqIGFDb25kLCBU
SW50ZXJtVHlwZWQqIGFFeHByLAorICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlKiBhQm9keSkg
OgorICAgICAgICAgICAgdHlwZShhVHlwZSksCisgICAgICAgICAgICBpbml0KGFJbml0KSwKKyAg
ICAgICAgICAgIGNvbmQoYUNvbmQpLAorICAgICAgICAgICAgZXhwcihhRXhwciksCisgICAgICAg
ICAgICBib2R5KGFCb2R5KSwKKyAgICAgICAgICAgIHVucm9sbEZsYWcoZmFsc2UpIHsgfQorCisg
ICAgdmlydHVhbCBUSW50ZXJtTG9vcCogZ2V0QXNMb29wTm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOworICAgIHZpcnR1
YWwgYm9vbCByZXBsYWNlQ2hpbGROb2RlKAorICAgICAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWws
IFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCk7CisKKyAgICBUTG9vcFR5cGUgZ2V0VHlwZSgpIGNv
bnN0IHsgcmV0dXJuIHR5cGU7IH0KKyAgICBUSW50ZXJtTm9kZSogZ2V0SW5pdCgpIHsgcmV0dXJu
IGluaXQ7IH0KKyAgICBUSW50ZXJtVHlwZWQqIGdldENvbmRpdGlvbigpIHsgcmV0dXJuIGNvbmQ7
IH0KKyAgICBUSW50ZXJtVHlwZWQqIGdldEV4cHJlc3Npb24oKSB7IHJldHVybiBleHByOyB9Cisg
ICAgVEludGVybU5vZGUqIGdldEJvZHkoKSB7IHJldHVybiBib2R5OyB9CisKKyAgICB2b2lkIHNl
dFVucm9sbEZsYWcoYm9vbCBmbGFnKSB7IHVucm9sbEZsYWcgPSBmbGFnOyB9CisgICAgYm9vbCBn
ZXRVbnJvbGxGbGFnKCkgeyByZXR1cm4gdW5yb2xsRmxhZzsgfQorCitwcm90ZWN0ZWQ6CisgICAg
VExvb3BUeXBlIHR5cGU7CisgICAgVEludGVybU5vZGUqIGluaXQ7ICAvLyBmb3ItbG9vcCBpbml0
aWFsaXphdGlvbgorICAgIFRJbnRlcm1UeXBlZCogY29uZDsgLy8gbG9vcCBleGl0IGNvbmRpdGlv
bgorICAgIFRJbnRlcm1UeXBlZCogZXhwcjsgLy8gZm9yLWxvb3AgZXhwcmVzc2lvbgorICAgIFRJ
bnRlcm1Ob2RlKiBib2R5OyAgLy8gbG9vcCBib2R5CisKKyAgICBib29sIHVucm9sbEZsYWc7IC8v
IFdoZXRoZXIgdGhlIGxvb3Agc2hvdWxkIGJlIHVucm9sbGVkIG9yIG5vdC4KK307CisKKy8vCisv
LyBIYW5kbGUgYnJlYWssIGNvbnRpbnVlLCByZXR1cm4sIGFuZCBraWxsLgorLy8KK2NsYXNzIFRJ
bnRlcm1CcmFuY2ggOiBwdWJsaWMgVEludGVybU5vZGUgeworcHVibGljOgorICAgIFRJbnRlcm1C
cmFuY2goVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGUpIDoKKyAgICAgICAgICAgIGZsb3dP
cChvcCksCisgICAgICAgICAgICBleHByZXNzaW9uKGUpIHsgfQorCisgICAgdmlydHVhbCB2b2lk
IHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNo
aWxkTm9kZSgKKyAgICAgICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVw
bGFjZW1lbnQpOworCisgICAgVE9wZXJhdG9yIGdldEZsb3dPcCgpIHsgcmV0dXJuIGZsb3dPcDsg
fQorICAgIFRJbnRlcm1UeXBlZCogZ2V0RXhwcmVzc2lvbigpIHsgcmV0dXJuIGV4cHJlc3Npb247
IH0KKworcHJvdGVjdGVkOgorICAgIFRPcGVyYXRvciBmbG93T3A7CisgICAgVEludGVybVR5cGVk
KiBleHByZXNzaW9uOyAgLy8gbm9uLXplcm8gZXhjZXB0IGZvciAicmV0dXJuIGV4cDsiIHN0YXRl
bWVudHMKK307CisKKy8vCisvLyBOb2RlcyB0aGF0IGNvcnJlc3BvbmQgdG8gc3ltYm9scyBvciBj
b25zdGFudHMgaW4gdGhlIHNvdXJjZSBjb2RlLgorLy8KK2NsYXNzIFRJbnRlcm1TeW1ib2wgOiBw
dWJsaWMgVEludGVybVR5cGVkIHsKK3B1YmxpYzoKKyAgICAvLyBpZiBzeW1ib2wgaXMgaW5pdGlh
bGl6ZWQgYXMgc3ltYm9sKHN5bSksIHRoZSBtZW1vcnkgY29tZXMgZnJvbSB0aGUgcG9vbGFsbG9j
YXRvciBvZiBzeW0uIElmIHN5bSBjb21lcyBmcm9tCisgICAgLy8gcGVyIHByb2Nlc3MgZ2xvYmFs
cG9vbGFsbG9jYXRvciwgdGhlbiBpdCBjYXVzZXMgaW5jcmVhc2VkIG1lbW9yeSB1c2FnZSBwZXIg
Y29tcGlsZQorICAgIC8vIGl0IGlzIGVzc2VudGlhbCB0byB1c2UgInN5bWJvbCA9IHN5bSIgdG8g
YXNzaWduIHRvIHN5bWJvbAorICAgIFRJbnRlcm1TeW1ib2woaW50IGksIGNvbnN0IFRTdHJpbmcm
IHN5bSwgY29uc3QgVFR5cGUmIHQpIDogCisgICAgICAgICAgICBUSW50ZXJtVHlwZWQodCksIGlk
KGkpICB7IHN5bWJvbCA9IHN5bTsgb3JpZ2luYWxTeW1ib2wgPSBzeW07IH0gCisKKyAgICB2aXJ0
dWFsIGJvb2wgaGFzU2lkZUVmZmVjdHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAg
aW50IGdldElkKCkgY29uc3QgeyByZXR1cm4gaWQ7IH0KKyAgICBjb25zdCBUU3RyaW5nJiBnZXRT
eW1ib2woKSBjb25zdCB7IHJldHVybiBzeW1ib2w7IH0KKworICAgIHZvaWQgc2V0SWQoaW50IG5l
d0lkKSB7IGlkID0gbmV3SWQ7IH0KKyAgICB2b2lkIHNldFN5bWJvbChjb25zdCBUU3RyaW5nJiBz
eW0pIHsgc3ltYm9sID0gc3ltOyB9CisKKyAgICBjb25zdCBUU3RyaW5nJiBnZXRPcmlnaW5hbFN5
bWJvbCgpIGNvbnN0IHsgcmV0dXJuIG9yaWdpbmFsU3ltYm9sOyB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOworICAgIHZpcnR1YWwgVEludGVybVN5bWJv
bCogZ2V0QXNTeW1ib2xOb2RlKCkgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwgYm9vbCBy
ZXBsYWNlQ2hpbGROb2RlKFRJbnRlcm1Ob2RlICosIFRJbnRlcm1Ob2RlICopIHsgcmV0dXJuIGZh
bHNlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBpbnQgaWQ7CisgICAgVFN0cmluZyBzeW1ib2w7Cisg
ICAgVFN0cmluZyBvcmlnaW5hbFN5bWJvbDsKK307CisKK2NsYXNzIFRJbnRlcm1Db25zdGFudFVu
aW9uIDogcHVibGljIFRJbnRlcm1UeXBlZCB7CitwdWJsaWM6CisgICAgVEludGVybUNvbnN0YW50
VW5pb24oQ29uc3RhbnRVbmlvbiAqdW5pb25Qb2ludGVyLCBjb25zdCBUVHlwZSYgdCkgOiBUSW50
ZXJtVHlwZWQodCksIHVuaW9uQXJyYXlQb2ludGVyKHVuaW9uUG9pbnRlcikgeyB9CisKKyAgICB2
aXJ0dWFsIGJvb2wgaGFzU2lkZUVmZmVjdHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisg
ICAgQ29uc3RhbnRVbmlvbiogZ2V0VW5pb25BcnJheVBvaW50ZXIoKSBjb25zdCB7IHJldHVybiB1
bmlvbkFycmF5UG9pbnRlcjsgfQorICAgIAorICAgIGludCBnZXRJQ29uc3Qoc2l6ZV90IGluZGV4
KSBjb25zdCB7IHJldHVybiB1bmlvbkFycmF5UG9pbnRlciA/IHVuaW9uQXJyYXlQb2ludGVyW2lu
ZGV4XS5nZXRJQ29uc3QoKSA6IDA7IH0KKyAgICBmbG9hdCBnZXRGQ29uc3Qoc2l6ZV90IGluZGV4
KSBjb25zdCB7IHJldHVybiB1bmlvbkFycmF5UG9pbnRlciA/IHVuaW9uQXJyYXlQb2ludGVyW2lu
ZGV4XS5nZXRGQ29uc3QoKSA6IDAuMGY7IH0KKyAgICBib29sIGdldEJDb25zdChzaXplX3QgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIHVuaW9uQXJyYXlQb2ludGVyID8gdW5pb25BcnJheVBvaW50ZXJb
aW5kZXhdLmdldEJDb25zdCgpIDogZmFsc2U7IH0KKworICAgIHZpcnR1YWwgVEludGVybUNvbnN0
YW50VW5pb24qIGdldEFzQ29uc3RhbnRVbmlvbigpICB7IHJldHVybiB0aGlzOyB9CisgICAgdmly
dHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKKyAgICB2aXJ0dWFsIGJvb2wg
cmVwbGFjZUNoaWxkTm9kZShUSW50ZXJtTm9kZSAqLCBUSW50ZXJtTm9kZSAqKSB7IHJldHVybiBm
YWxzZTsgfQorCisgICAgVEludGVybVR5cGVkKiBmb2xkKFRPcGVyYXRvciwgVEludGVybVR5cGVk
KiwgVEluZm9TaW5rJik7CisKK3Byb3RlY3RlZDoKKyAgICBDb25zdGFudFVuaW9uICp1bmlvbkFy
cmF5UG9pbnRlcjsKK307CisKKy8vCisvLyBJbnRlcm1lZGlhdGUgY2xhc3MgZm9yIG5vZGUgdHlw
ZXMgdGhhdCBob2xkIG9wZXJhdG9ycy4KKy8vCitjbGFzcyBUSW50ZXJtT3BlcmF0b3IgOiBwdWJs
aWMgVEludGVybVR5cGVkIHsKK3B1YmxpYzoKKyAgICBUT3BlcmF0b3IgZ2V0T3AoKSBjb25zdCB7
IHJldHVybiBvcDsgfQorICAgIHZvaWQgc2V0T3AoVE9wZXJhdG9yIG8pIHsgb3AgPSBvOyB9CisK
KyAgICBib29sIGlzQXNzaWdubWVudCgpIGNvbnN0OworICAgIGJvb2wgaXNDb25zdHJ1Y3Rvcigp
IGNvbnN0OworCisgICAgdmlydHVhbCBib29sIGhhc1NpZGVFZmZlY3RzKCkgY29uc3QgeyByZXR1
cm4gaXNBc3NpZ25tZW50KCk7IH0KKworcHJvdGVjdGVkOgorICAgIFRJbnRlcm1PcGVyYXRvcihU
T3BlcmF0b3IgbykgOiBUSW50ZXJtVHlwZWQoVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCkp
LCBvcChvKSB7fQorICAgIFRJbnRlcm1PcGVyYXRvcihUT3BlcmF0b3IgbywgY29uc3QgVFR5cGUm
IHQpIDogVEludGVybVR5cGVkKHQpLCBvcChvKSB7fQorICAgIFRPcGVyYXRvciBvcDsKK307CisK
Ky8vCisvLyBOb2RlcyBmb3IgYWxsIHRoZSBiYXNpYyBiaW5hcnkgbWF0aCBvcGVyYXRvcnMuCisv
LworY2xhc3MgVEludGVybUJpbmFyeSA6IHB1YmxpYyBUSW50ZXJtT3BlcmF0b3IgeworcHVibGlj
OgorICAgIFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yIG8pIDogVEludGVybU9wZXJhdG9yKG8pLCBh
ZGRJbmRleENsYW1wKGZhbHNlKSB7fQorCisgICAgdmlydHVhbCBUSW50ZXJtQmluYXJ5KiBnZXRB
c0JpbmFyeU5vZGUoKSB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNl
KFRJbnRlcm1UcmF2ZXJzZXIqKTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxkTm9kZSgK
KyAgICAgICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFjZW1lbnQp
OworCisgICAgdmlydHVhbCBib29sIGhhc1NpZGVFZmZlY3RzKCkgY29uc3QgeyByZXR1cm4gKGlz
QXNzaWdubWVudCgpIHx8IGxlZnQtPmhhc1NpZGVFZmZlY3RzKCkgfHwgcmlnaHQtPmhhc1NpZGVF
ZmZlY3RzKCkpOyB9CisKKyAgICB2b2lkIHNldExlZnQoVEludGVybVR5cGVkKiBuKSB7IGxlZnQg
PSBuOyB9CisgICAgdm9pZCBzZXRSaWdodChUSW50ZXJtVHlwZWQqIG4pIHsgcmlnaHQgPSBuOyB9
CisgICAgVEludGVybVR5cGVkKiBnZXRMZWZ0KCkgY29uc3QgeyByZXR1cm4gbGVmdDsgfQorICAg
IFRJbnRlcm1UeXBlZCogZ2V0UmlnaHQoKSBjb25zdCB7IHJldHVybiByaWdodDsgfQorICAgIGJv
b2wgcHJvbW90ZShUSW5mb1NpbmsmKTsKKworICAgIHZvaWQgc2V0QWRkSW5kZXhDbGFtcCgpIHsg
YWRkSW5kZXhDbGFtcCA9IHRydWU7IH0KKyAgICBib29sIGdldEFkZEluZGV4Q2xhbXAoKSB7IHJl
dHVybiBhZGRJbmRleENsYW1wOyB9CisKK3Byb3RlY3RlZDoKKyAgICBUSW50ZXJtVHlwZWQqIGxl
ZnQ7CisgICAgVEludGVybVR5cGVkKiByaWdodDsKKworICAgIC8vIElmIHNldCB0byB0cnVlLCB3
cmFwIGFueSBFT3BJbmRleEluZGlyZWN0IHdpdGggYSBjbGFtcCB0byBib3VuZHMuCisgICAgYm9v
bCBhZGRJbmRleENsYW1wOworfTsKKworLy8KKy8vIE5vZGVzIGZvciB1bmFyeSBtYXRoIG9wZXJh
dG9ycy4KKy8vCitjbGFzcyBUSW50ZXJtVW5hcnkgOiBwdWJsaWMgVEludGVybU9wZXJhdG9yIHsK
K3B1YmxpYzoKKyAgICBUSW50ZXJtVW5hcnkoVE9wZXJhdG9yIG8sIGNvbnN0IFRUeXBlJiB0KSA6
IFRJbnRlcm1PcGVyYXRvcihvLCB0KSwgb3BlcmFuZCgwKSwgdXNlRW11bGF0ZWRGdW5jdGlvbihm
YWxzZSkge30KKyAgICBUSW50ZXJtVW5hcnkoVE9wZXJhdG9yIG8pIDogVEludGVybU9wZXJhdG9y
KG8pLCBvcGVyYW5kKDApLCB1c2VFbXVsYXRlZEZ1bmN0aW9uKGZhbHNlKSB7fQorCisgICAgdmly
dHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKKyAgICB2aXJ0dWFsIFRJbnRl
cm1VbmFyeSogZ2V0QXNVbmFyeU5vZGUoKSB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCBi
b29sIHJlcGxhY2VDaGlsZE5vZGUoCisgICAgICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVElu
dGVybU5vZGUgKnJlcGxhY2VtZW50KTsKKworICAgIHZpcnR1YWwgYm9vbCBoYXNTaWRlRWZmZWN0
cygpIGNvbnN0IHsgcmV0dXJuIChpc0Fzc2lnbm1lbnQoKSB8fCBvcGVyYW5kLT5oYXNTaWRlRWZm
ZWN0cygpKTsgfQorCisgICAgdm9pZCBzZXRPcGVyYW5kKFRJbnRlcm1UeXBlZCogbykgeyBvcGVy
YW5kID0gbzsgfQorICAgIFRJbnRlcm1UeXBlZCogZ2V0T3BlcmFuZCgpIHsgcmV0dXJuIG9wZXJh
bmQ7IH0gICAgCisgICAgYm9vbCBwcm9tb3RlKFRJbmZvU2luayYpOworCisgICAgdm9pZCBzZXRV
c2VFbXVsYXRlZEZ1bmN0aW9uKCkgeyB1c2VFbXVsYXRlZEZ1bmN0aW9uID0gdHJ1ZTsgfQorICAg
IGJvb2wgZ2V0VXNlRW11bGF0ZWRGdW5jdGlvbigpIHsgcmV0dXJuIHVzZUVtdWxhdGVkRnVuY3Rp
b247IH0KKworcHJvdGVjdGVkOgorICAgIFRJbnRlcm1UeXBlZCogb3BlcmFuZDsKKworICAgIC8v
IElmIHNldCB0byB0cnVlLCByZXBsYWNlIHRoZSBidWlsdC1pbiBmdW5jdGlvbiBjYWxsIHdpdGgg
YW4gZW11bGF0ZWQgb25lCisgICAgLy8gdG8gd29yayBhcm91bmQgZHJpdmVyIGJ1Z3MuCisgICAg
Ym9vbCB1c2VFbXVsYXRlZEZ1bmN0aW9uOworfTsKKwordHlwZWRlZiBUVmVjdG9yPFRJbnRlcm1O
b2RlKj4gVEludGVybVNlcXVlbmNlOwordHlwZWRlZiBUVmVjdG9yPGludD4gVFF1YWxpZmllckxp
c3Q7CisKKy8vCisvLyBOb2RlcyB0aGF0IG9wZXJhdGUgb24gYW4gYXJiaXRyYXJ5IHNpemVkIHNl
dCBvZiBjaGlsZHJlbi4KKy8vCitjbGFzcyBUSW50ZXJtQWdncmVnYXRlIDogcHVibGljIFRJbnRl
cm1PcGVyYXRvciB7CitwdWJsaWM6CisgICAgVEludGVybUFnZ3JlZ2F0ZSgpIDogVEludGVybU9w
ZXJhdG9yKEVPcE51bGwpLCB1c2VyRGVmaW5lZChmYWxzZSksIHVzZUVtdWxhdGVkRnVuY3Rpb24o
ZmFsc2UpIHsgfQorICAgIFRJbnRlcm1BZ2dyZWdhdGUoVE9wZXJhdG9yIG8pIDogVEludGVybU9w
ZXJhdG9yKG8pLCB1c2VFbXVsYXRlZEZ1bmN0aW9uKGZhbHNlKSB7IH0KKyAgICB+VEludGVybUFn
Z3JlZ2F0ZSgpIHsgfQorCisgICAgdmlydHVhbCBUSW50ZXJtQWdncmVnYXRlKiBnZXRBc0FnZ3Jl
Z2F0ZSgpIHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVy
bVRyYXZlcnNlciopOworICAgIHZpcnR1YWwgYm9vbCByZXBsYWNlQ2hpbGROb2RlKAorICAgICAg
ICBUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCk7CisKKyAg
ICAvLyBDb25zZXJ2YXRpdmVseSBhc3N1bWUgZnVuY3Rpb24gY2FsbHMgYW5kIG90aGVyIGFnZ3Jl
Z2F0ZSBvcGVyYXRvcnMgaGF2ZSBzaWRlLWVmZmVjdHMKKyAgICB2aXJ0dWFsIGJvb2wgaGFzU2lk
ZUVmZmVjdHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBUSW50ZXJtU2VxdWVuY2Um
IGdldFNlcXVlbmNlKCkgeyByZXR1cm4gc2VxdWVuY2U7IH0KKworICAgIHZvaWQgc2V0TmFtZShj
b25zdCBUU3RyaW5nJiBuKSB7IG5hbWUgPSBuOyB9CisgICAgY29uc3QgVFN0cmluZyYgZ2V0TmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG5hbWU7IH0KKworICAgIHZvaWQgc2V0VXNlckRlZmluZWQoKSB7
IHVzZXJEZWZpbmVkID0gdHJ1ZTsgfQorICAgIGJvb2wgaXNVc2VyRGVmaW5lZCgpIGNvbnN0IHsg
cmV0dXJuIHVzZXJEZWZpbmVkOyB9CisKKyAgICB2b2lkIHNldE9wdGltaXplKGJvb2wgbykgeyBv
cHRpbWl6ZSA9IG87IH0KKyAgICBib29sIGdldE9wdGltaXplKCkgeyByZXR1cm4gb3B0aW1pemU7
IH0KKyAgICB2b2lkIHNldERlYnVnKGJvb2wgZCkgeyBkZWJ1ZyA9IGQ7IH0KKyAgICBib29sIGdl
dERlYnVnKCkgeyByZXR1cm4gZGVidWc7IH0KKworICAgIHZvaWQgc2V0VXNlRW11bGF0ZWRGdW5j
dGlvbigpIHsgdXNlRW11bGF0ZWRGdW5jdGlvbiA9IHRydWU7IH0KKyAgICBib29sIGdldFVzZUVt
dWxhdGVkRnVuY3Rpb24oKSB7IHJldHVybiB1c2VFbXVsYXRlZEZ1bmN0aW9uOyB9CisKK3Byb3Rl
Y3RlZDoKKyAgICBUSW50ZXJtQWdncmVnYXRlKGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUmKTsgLy8g
ZGlzYWxsb3cgY29weSBjb25zdHJ1Y3RvcgorICAgIFRJbnRlcm1BZ2dyZWdhdGUmIG9wZXJhdG9y
PShjb25zdCBUSW50ZXJtQWdncmVnYXRlJik7IC8vIGRpc2FsbG93IGFzc2lnbm1lbnQgb3BlcmF0
b3IKKyAgICBUSW50ZXJtU2VxdWVuY2Ugc2VxdWVuY2U7CisgICAgVFN0cmluZyBuYW1lOworICAg
IGJvb2wgdXNlckRlZmluZWQ7IC8vIHVzZWQgZm9yIHVzZXIgZGVmaW5lZCBmdW5jdGlvbiBuYW1l
cworCisgICAgYm9vbCBvcHRpbWl6ZTsKKyAgICBib29sIGRlYnVnOworCisgICAgLy8gSWYgc2V0
IHRvIHRydWUsIHJlcGxhY2UgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGNhbGwgd2l0aCBhbiBlbXVs
YXRlZCBvbmUKKyAgICAvLyB0byB3b3JrIGFyb3VuZCBkcml2ZXIgYnVncy4KKyAgICBib29sIHVz
ZUVtdWxhdGVkRnVuY3Rpb247Cit9OworCisvLworLy8gRm9yIGlmIHRlc3RzLiAgU2ltcGxpZmll
ZCBzaW5jZSB0aGVyZSBpcyBubyBzd2l0Y2ggc3RhdGVtZW50LgorLy8KK2NsYXNzIFRJbnRlcm1T
ZWxlY3Rpb24gOiBwdWJsaWMgVEludGVybVR5cGVkIHsKK3B1YmxpYzoKKyAgICBUSW50ZXJtU2Vs
ZWN0aW9uKFRJbnRlcm1UeXBlZCogY29uZCwgVEludGVybU5vZGUqIHRydWVCLCBUSW50ZXJtTm9k
ZSogZmFsc2VCKSA6CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQoVFR5cGUoRWJ0Vm9pZCwgRWJw
VW5kZWZpbmVkKSksIGNvbmRpdGlvbihjb25kKSwgdHJ1ZUJsb2NrKHRydWVCKSwgZmFsc2VCbG9j
ayhmYWxzZUIpIHt9CisgICAgVEludGVybVNlbGVjdGlvbihUSW50ZXJtVHlwZWQqIGNvbmQsIFRJ
bnRlcm1Ob2RlKiB0cnVlQiwgVEludGVybU5vZGUqIGZhbHNlQiwgY29uc3QgVFR5cGUmIHR5cGUp
IDoKKyAgICAgICAgICAgIFRJbnRlcm1UeXBlZCh0eXBlKSwgY29uZGl0aW9uKGNvbmQpLCB0cnVl
QmxvY2sodHJ1ZUIpLCBmYWxzZUJsb2NrKGZhbHNlQikge30KKworICAgIHZpcnR1YWwgdm9pZCB0
cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7CisgICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGls
ZE5vZGUoCisgICAgICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxh
Y2VtZW50KTsKKworICAgIC8vIENvbnNlcnZhdGl2ZWx5IGFzc3VtZSBzZWxlY3Rpb25zIGhhdmUg
c2lkZS1lZmZlY3RzCisgICAgdmlydHVhbCBib29sIGhhc1NpZGVFZmZlY3RzKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQorCisgICAgYm9vbCB1c2VzVGVybmFyeU9wZXJhdG9yKCkgY29uc3QgeyBy
ZXR1cm4gZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZDsgfQorICAgIFRJbnRlcm1Ob2RlKiBnZXRD
b25kaXRpb24oKSBjb25zdCB7IHJldHVybiBjb25kaXRpb247IH0KKyAgICBUSW50ZXJtTm9kZSog
Z2V0VHJ1ZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gdHJ1ZUJsb2NrOyB9CisgICAgVEludGVybU5v
ZGUqIGdldEZhbHNlQmxvY2soKSBjb25zdCB7IHJldHVybiBmYWxzZUJsb2NrOyB9CisgICAgVElu
dGVybVNlbGVjdGlvbiogZ2V0QXNTZWxlY3Rpb25Ob2RlKCkgeyByZXR1cm4gdGhpczsgfQorCitw
cm90ZWN0ZWQ6CisgICAgVEludGVybVR5cGVkKiBjb25kaXRpb247CisgICAgVEludGVybU5vZGUq
IHRydWVCbG9jazsKKyAgICBUSW50ZXJtTm9kZSogZmFsc2VCbG9jazsKK307CisKK2VudW0gVmlz
aXQKK3sKKyAgICBQcmVWaXNpdCwKKyAgICBJblZpc2l0LAorICAgIFBvc3RWaXNpdAorfTsKKwor
Ly8KKy8vIEZvciB0cmF2ZXJzaW5nIHRoZSB0cmVlLiAgVXNlciBzaG91bGQgZGVyaXZlIGZyb20g
dGhpcywgCisvLyBwdXQgdGhlaXIgdHJhdmVyc2FsIHNwZWNpZmljIGRhdGEgaW4gaXQsIGFuZCB0
aGVuIHBhc3MKKy8vIGl0IHRvIGEgVHJhdmVyc2UgbWV0aG9kLgorLy8KKy8vIFdoZW4gdXNpbmcg
dGhpcywganVzdCBmaWxsIGluIHRoZSBtZXRob2RzIGZvciBub2RlcyB5b3Ugd2FudCB2aXNpdGVk
LgorLy8gUmV0dXJuIGZhbHNlIGZyb20gYSBwcmUtdmlzaXQgdG8gc2tpcCB2aXNpdGluZyB0aGF0
IG5vZGUncyBzdWJ0cmVlLgorLy8KK2NsYXNzIFRJbnRlcm1UcmF2ZXJzZXIKK3sKK3B1YmxpYzoK
KyAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKCk7CisgICAgVEludGVybVRyYXZlcnNlcihi
b29sIHByZVZpc2l0ID0gdHJ1ZSwgYm9vbCBpblZpc2l0ID0gZmFsc2UsIGJvb2wgcG9zdFZpc2l0
ID0gZmFsc2UsIGJvb2wgcmlnaHRUb0xlZnQgPSBmYWxzZSkgOiAKKyAgICAgICAgICAgIHByZVZp
c2l0KHByZVZpc2l0KSwKKyAgICAgICAgICAgIGluVmlzaXQoaW5WaXNpdCksCisgICAgICAgICAg
ICBwb3N0VmlzaXQocG9zdFZpc2l0KSwKKyAgICAgICAgICAgIHJpZ2h0VG9MZWZ0KHJpZ2h0VG9M
ZWZ0KSwKKyAgICAgICAgICAgIGRlcHRoKDApLAorICAgICAgICAgICAgbWF4RGVwdGgoMCkge30K
KyAgICB2aXJ0dWFsIH5USW50ZXJtVHJhdmVyc2VyKCkge30KKworICAgIHZpcnR1YWwgdm9pZCB2
aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKikge30KKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDb25z
dGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKikge30KKyAgICB2aXJ0dWFsIGJvb2wgdmlz
aXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKSB7cmV0dXJuIHRydWU7fQorICAg
IHZpcnR1YWwgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqKSB7cmV0
dXJuIHRydWU7fQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwg
VEludGVybVNlbGVjdGlvbiopIHtyZXR1cm4gdHJ1ZTt9CisgICAgdmlydHVhbCBib29sIHZpc2l0
QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKikge3JldHVybiB0cnVlO30K
KyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCopIHty
ZXR1cm4gdHJ1ZTt9CisgICAgdmlydHVhbCBib29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBU
SW50ZXJtQnJhbmNoKikge3JldHVybiB0cnVlO30KKworICAgIGludCBnZXRNYXhEZXB0aCgpIGNv
bnN0IHtyZXR1cm4gbWF4RGVwdGg7fQorCisgICAgdm9pZCBpbmNyZW1lbnREZXB0aChUSW50ZXJt
Tm9kZSAqY3VycmVudCkKKyAgICB7CisgICAgICAgIGRlcHRoKys7CisgICAgICAgIG1heERlcHRo
ID0gc3RkOjptYXgobWF4RGVwdGgsIGRlcHRoKTsKKyAgICAgICAgcGF0aC5wdXNoX2JhY2soY3Vy
cmVudCk7CisgICAgfQorCisgICAgdm9pZCBkZWNyZW1lbnREZXB0aCgpCisgICAgeworICAgICAg
ICBkZXB0aC0tOworICAgICAgICBwYXRoLnBvcF9iYWNrKCk7CisgICAgfQorCisgICAgVEludGVy
bU5vZGUgKmdldFBhcmVudE5vZGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHBhdGguc2l6ZSgp
ID09IDAgPyBOVUxMIDogcGF0aC5iYWNrKCk7CisgICAgfQorCisgICAgLy8gUmV0dXJuIHRoZSBv
cmlnaW5hbCBuYW1lIGlmIGhhc2ggZnVuY3Rpb24gcG9pbnRlciBpcyBOVUxMOworICAgIC8vIG90
aGVyd2lzZSByZXR1cm4gdGhlIGhhc2hlZCBuYW1lLgorICAgIHN0YXRpYyBUU3RyaW5nIGhhc2go
Y29uc3QgVFN0cmluZyYgbmFtZSwgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24pOworCisg
ICAgY29uc3QgYm9vbCBwcmVWaXNpdDsKKyAgICBjb25zdCBib29sIGluVmlzaXQ7CisgICAgY29u
c3QgYm9vbCBwb3N0VmlzaXQ7CisgICAgY29uc3QgYm9vbCByaWdodFRvTGVmdDsKKworcHJvdGVj
dGVkOgorICAgIGludCBkZXB0aDsKKyAgICBpbnQgbWF4RGVwdGg7CisKKyAgICAvLyBBbGwgdGhl
IG5vZGVzIGZyb20gcm9vdCB0byB0aGUgY3VycmVudCBub2RlJ3MgcGFyZW50IGR1cmluZyB0cmF2
ZXJzaW5nLgorICAgIFRWZWN0b3I8VEludGVybU5vZGUgKj4gcGF0aDsKK307CisKKyNlbmRpZiAv
LyBfX0lOVEVSTUVESUFURV9ICmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9sb2NhbGludGVybWVkaWF0ZS5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvbG9jYWxpbnRlcm1lZGlhdGUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iNTgyZTAyZjVkODU0MWU3Y2IzMzcwMzRlMGU2Yzk4MmUxZWY1ZjY3Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvbG9jYWxpbnRlcm1lZGlhdGUuaApAQCAtMCwwICsxLDU3IEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaWZuZGVmIF9MT0NBTF9JTlRFUk1FRElBVEVfSU5DTFVERURfCisjZGVmaW5lIF9M
T0NBTF9JTlRFUk1FRElBVEVfSU5DTFVERURfCisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxh
bmcuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuaCIKKworc3RydWN0IFRWZWN0
b3JGaWVsZHMgeworICAgIGludCBvZmZzZXRzWzRdOworICAgIGludCBudW07Cit9OworCisvLwor
Ly8gU2V0IG9mIGhlbHBlciBmdW5jdGlvbnMgdG8gaGVscCBwYXJzZSBhbmQgYnVpbGQgdGhlIHRy
ZWUuCisvLworY2xhc3MgVEluZm9TaW5rOworY2xhc3MgVEludGVybWVkaWF0ZSB7CitwdWJsaWM6
ICAgIAorICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKKyAgICBUSW50ZXJtZWRpYXRl
KFRJbmZvU2luayYgaSkgOiBpbmZvU2luayhpKSB7IH0KKworICAgIFRJbnRlcm1TeW1ib2wqIGFk
ZFN5bWJvbChpbnQgSWQsIGNvbnN0IFRTdHJpbmcmLCBjb25zdCBUVHlwZSYsIGNvbnN0IFRTb3Vy
Y2VMb2MmKTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnZlcnNpb24oVE9wZXJhdG9yLCBjb25z
dCBUVHlwZSYsIFRJbnRlcm1UeXBlZCopOworICAgIFRJbnRlcm1UeXBlZCogYWRkQmluYXJ5TWF0
aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdodCwg
Y29uc3QgVFNvdXJjZUxvYyYsIFRTeW1ib2xUYWJsZSYpOworICAgIFRJbnRlcm1UeXBlZCogYWRk
QXNzaWduKFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBsZWZ0LCBUSW50ZXJtVHlwZWQqIHJp
Z2h0LCBjb25zdCBUU291cmNlTG9jJik7CisgICAgVEludGVybVR5cGVkKiBhZGRJbmRleChUT3Bl
cmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogYmFzZSwgVEludGVybVR5cGVkKiBpbmRleCwgY29uc3Qg
VFNvdXJjZUxvYyYpOworICAgIFRJbnRlcm1UeXBlZCogYWRkVW5hcnlNYXRoKFRPcGVyYXRvciBv
cCwgVEludGVybU5vZGUqIGNoaWxkLCBjb25zdCBUU291cmNlTG9jJiwgVFN5bWJvbFRhYmxlJik7
CisgICAgVEludGVybUFnZ3JlZ2F0ZSogZ3Jvd0FnZ3JlZ2F0ZShUSW50ZXJtTm9kZSogbGVmdCwg
VEludGVybU5vZGUqIHJpZ2h0LCBjb25zdCBUU291cmNlTG9jJik7CisgICAgVEludGVybUFnZ3Jl
Z2F0ZSogbWFrZUFnZ3JlZ2F0ZShUSW50ZXJtTm9kZSogbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYp
OworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHNldEFnZ3JlZ2F0ZU9wZXJhdG9yKFRJbnRlcm1Ob2Rl
KiwgVE9wZXJhdG9yLCBjb25zdCBUU291cmNlTG9jJik7CisgICAgVEludGVybU5vZGUqICBhZGRT
ZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtTm9kZVBhaXIgY29kZSwgY29uc3Qg
VFNvdXJjZUxvYyYpOworICAgIFRJbnRlcm1UeXBlZCogYWRkU2VsZWN0aW9uKFRJbnRlcm1UeXBl
ZCogY29uZCwgVEludGVybVR5cGVkKiB0cnVlQmxvY2ssIFRJbnRlcm1UeXBlZCogZmFsc2VCbG9j
aywgY29uc3QgVFNvdXJjZUxvYyYpOworICAgIFRJbnRlcm1UeXBlZCogYWRkQ29tbWEoVEludGVy
bVR5cGVkKiBsZWZ0LCBUSW50ZXJtVHlwZWQqIHJpZ2h0LCBjb25zdCBUU291cmNlTG9jJik7Cisg
ICAgVEludGVybUNvbnN0YW50VW5pb24qIGFkZENvbnN0YW50VW5pb24oQ29uc3RhbnRVbmlvbios
IGNvbnN0IFRUeXBlJiwgY29uc3QgVFNvdXJjZUxvYyYpOworICAgIFRJbnRlcm1UeXBlZCogcHJv
bW90ZUNvbnN0YW50VW5pb24oVEJhc2ljVHlwZSwgVEludGVybUNvbnN0YW50VW5pb24qKSA7Cisg
ICAgYm9vbCBwYXJzZUNvbnN0VHJlZShjb25zdCBUU291cmNlTG9jJiwgVEludGVybU5vZGUqLCBD
b25zdGFudFVuaW9uKiwgVE9wZXJhdG9yLCBUU3ltYm9sVGFibGUmLCBUVHlwZSwgYm9vbCBzaW5n
bGVDb25zdGFudFBhcmFtID0gZmFsc2UpOyAgICAgICAgCisgICAgVEludGVybU5vZGUqIGFkZExv
b3AoVExvb3BUeXBlLCBUSW50ZXJtTm9kZSosIFRJbnRlcm1UeXBlZCosIFRJbnRlcm1UeXBlZCos
IFRJbnRlcm1Ob2RlKiwgY29uc3QgVFNvdXJjZUxvYyYpOworICAgIFRJbnRlcm1CcmFuY2gqIGFk
ZEJyYW5jaChUT3BlcmF0b3IsIGNvbnN0IFRTb3VyY2VMb2MmKTsKKyAgICBUSW50ZXJtQnJhbmNo
KiBhZGRCcmFuY2goVE9wZXJhdG9yLCBUSW50ZXJtVHlwZWQqLCBjb25zdCBUU291cmNlTG9jJik7
CisgICAgVEludGVybVR5cGVkKiBhZGRTd2l6emxlKFRWZWN0b3JGaWVsZHMmLCBjb25zdCBUU291
cmNlTG9jJik7CisgICAgYm9vbCBwb3N0UHJvY2VzcyhUSW50ZXJtTm9kZSopOworICAgIHZvaWQg
cmVtb3ZlKFRJbnRlcm1Ob2RlKik7CisgICAgdm9pZCBvdXRwdXRUcmVlKFRJbnRlcm1Ob2RlKik7
CisKK3ByaXZhdGU6CisgICAgdm9pZCBvcGVyYXRvcj0oVEludGVybWVkaWF0ZSYpOyAvLyBwcmV2
ZW50IGFzc2lnbm1lbnRzCisKKyAgICBUSW5mb1NpbmsmIGluZm9TaW5rOworfTsKKworI2VuZGlm
IC8vIF9MT0NBTF9JTlRFUk1FRElBVEVfSU5DTFVERURfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9vc2luY2x1ZGUuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL29zaW5jbHVkZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmMzMDYzZDYyNGE4NzIxODZjNGUyN2E4MjIyNDc1YWRkMzg4YTczODEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9vc2luY2x1ZGUuaApAQCAtMCwwICsxLDY2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aWZuZGVmIF9fT1NJTkNMVURFX0gKKyNkZWZpbmUgX19PU0lOQ0xVREVfSAorCisvLworLy8gVGhp
cyBmaWxlIGNvbnRhaW5zIGNvbnRhaW5zIG9zLXNwZWNpZmljIGRhdGF0eXBlcyBhbmQKKy8vIGRl
Y2xhcmVzIGFueSBvcy1zcGVjaWZpYyBmdW5jdGlvbnMuCisvLworCisjaWYgZGVmaW5lZChfV0lO
MzIpIHx8IGRlZmluZWQoX1dJTjY0KQorI2RlZmluZSBBTkdMRV9PU19XSU4KKyNlbGlmIGRlZmlu
ZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fbGludXhfXykgfHwgXAorICAgICAgZGVmaW5lZChf
X0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX09wZW5CU0RfXykgfHwgXAorICAgICAgZGVmaW5lZChf
X05ldEJTRF9fKSB8fCBkZWZpbmVkKF9fRHJhZ29uRmx5X18pIHx8IFwKKyAgICAgIGRlZmluZWQo
X19zdW4pIHx8IGRlZmluZWQoQU5EUk9JRCkgfHwgXAorICAgICAgZGVmaW5lZChfX0dMSUJDX18p
IHx8IGRlZmluZWQoX19HTlVfXykgfHwgXAorICAgICAgZGVmaW5lZChfX1FOWF9fKQorI2RlZmlu
ZSBBTkdMRV9PU19QT1NJWAorI2Vsc2UKKyNlcnJvciBVbnN1cHBvcnRlZCBwbGF0Zm9ybS4KKyNl
bmRpZgorCisjaWYgZGVmaW5lZChBTkdMRV9PU19XSU4pCisjZGVmaW5lIFNUUklDVAorI2RlZmlu
ZSBWQ19FWFRSQUxFQU4gMQorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbGlmIGRlZmluZWQoQU5H
TEVfT1NfUE9TSVgpCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHNlbWFwaG9yZS5o
PgorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYgIC8vIEFOR0xFX09TX1dJTgorCisKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL2NvbXBpbGVyZGVidWcuaCIKKworLy8KKy8vIFRocmVh
ZCBMb2NhbCBTdG9yYWdlIE9wZXJhdGlvbnMKKy8vCisjaWYgZGVmaW5lZChBTkdMRV9PU19XSU4p
Cit0eXBlZGVmIERXT1JEIE9TX1RMU0luZGV4OworI2RlZmluZSBPU19JTlZBTElEX1RMU19JTkRF
WCAoVExTX09VVF9PRl9JTkRFWEVTKQorI2VsaWYgZGVmaW5lZChBTkdMRV9PU19QT1NJWCkKK3R5
cGVkZWYgcHRocmVhZF9rZXlfdCBPU19UTFNJbmRleDsKKyNkZWZpbmUgT1NfSU5WQUxJRF9UTFNf
SU5ERVggKHN0YXRpY19jYXN0PE9TX1RMU0luZGV4PigtMSkpCisjZW5kaWYgIC8vIEFOR0xFX09T
X1dJTgorCitPU19UTFNJbmRleCBPU19BbGxvY1RMU0luZGV4KCk7Citib29sIE9TX1NldFRMU1Zh
bHVlKE9TX1RMU0luZGV4IG5JbmRleCwgdm9pZCAqbHB2VmFsdWUpOworYm9vbCBPU19GcmVlVExT
SW5kZXgoT1NfVExTSW5kZXggbkluZGV4KTsKKworaW5saW5lIHZvaWQqIE9TX0dldFRMU1ZhbHVl
KE9TX1RMU0luZGV4IG5JbmRleCkKK3sKKyAgICBBU1NFUlQobkluZGV4ICE9IE9TX0lOVkFMSURf
VExTX0lOREVYKTsKKyNpZiBkZWZpbmVkKEFOR0xFX09TX1dJTikKKyAgICByZXR1cm4gVGxzR2V0
VmFsdWUobkluZGV4KTsKKyNlbGlmIGRlZmluZWQoQU5HTEVfT1NfUE9TSVgpCisgICAgcmV0dXJu
IHB0aHJlYWRfZ2V0c3BlY2lmaWMobkluZGV4KTsKKyNlbmRpZiAgLy8gQU5HTEVfT1NfV0lOCit9
CisKKyNlbmRpZiAvLyBfX09TSU5DTFVERV9ICmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9vc3NvdXJjZV9wb3NpeC5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9vc3NvdXJjZV9wb3Np
eC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOTBhMzc1NzQ0NDFjMDEzNDZlNzMxZWU3MjUzMjFlYjE1ZWNlMmRj
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL29zc291cmNlX3Bvc2l4LmNwcApAQCAtMCwwICsxLDY0IEBACisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisvLworLy8gVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBwb3NpeCBzcGVjaWZp
YyBmdW5jdGlvbnMKKy8vCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9vc2luY2x1ZGUu
aCIKKworI2lmICFkZWZpbmVkKEFOR0xFX09TX1BPU0lYKQorI2Vycm9yIFRyeWluZyB0byBidWls
ZCBhIHBvc2l4IHNwZWNpZmljIGZpbGUgaW4gYSBub24tcG9zaXggYnVpbGQuCisjZW5kaWYKKwor
Ly8KKy8vIFRocmVhZCBMb2NhbCBTdG9yYWdlIE9wZXJhdGlvbnMKKy8vCitPU19UTFNJbmRleCBP
U19BbGxvY1RMU0luZGV4KCkKK3sKKyAgICBwdGhyZWFkX2tleV90IHBQb29sSW5kZXg7CisKKyAg
ICAvLworICAgIC8vIENyZWF0ZSBnbG9iYWwgcG9vbCBrZXkuCisgICAgLy8KKyAgICBpZiAoKHB0
aHJlYWRfa2V5X2NyZWF0ZSgmcFBvb2xJbmRleCwgTlVMTCkpICE9IDApIHsKKyAgICAgICAgYXNz
ZXJ0KDAgJiYgIk9TX0FsbG9jVExTSW5kZXgoKTogVW5hYmxlIHRvIGFsbG9jYXRlIFRocmVhZCBM
b2NhbCBTdG9yYWdlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZWxzZSB7
CisgICAgICAgIHJldHVybiBwUG9vbEluZGV4OworICAgIH0KK30KKworCitib29sIE9TX1NldFRM
U1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCwgdm9pZCAqbHB2VmFsdWUpCit7CisgICAgaWYgKG5J
bmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiT1Nf
U2V0VExTVmFsdWUoKTogSW52YWxpZCBUTFMgSW5kZXgiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGlmIChwdGhyZWFkX3NldHNwZWNpZmljKG5JbmRleCwgbHB2VmFsdWUp
ID09IDApCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworfQorCisKK2Jvb2wgT1NfRnJlZVRMU0luZGV4KE9TX1RMU0luZGV4IG5JbmRleCkKK3sK
KyAgICBpZiAobkluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisgICAgICAgIGFzc2Vy
dCgwICYmICJPU19TZXRUTFNWYWx1ZSgpOiBJbnZhbGlkIFRMUyBJbmRleCIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBEZWxldGUgdGhlIGdsb2JhbCBw
b29sIGtleS4KKyAgICAvLworICAgIGlmIChwdGhyZWFkX2tleV9kZWxldGUobkluZGV4KSA9PSAw
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBmYWxzZTsK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL29zc291cmNlX3dpbi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9vc3NvdXJjZV93aW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJjYzU4NzFiNzFk
M2VlZmQyMTU2MTkzNjVlYWFjZDYyNTUwOGI4ODMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9vc3NvdXJjZV93aW4uY3Bw
CkBAIC0wLDAgKzEsNTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL29zaW5jbHVkZS5oIgorLy8KKy8vIFRoaXMgZmlsZSBjb250YWlucyBjb250
YWlucyB0aGUgd2luZG93J3Mgc3BlY2lmaWMgZnVuY3Rpb25zCisvLworCisjaWYgIWRlZmluZWQo
QU5HTEVfT1NfV0lOKQorI2Vycm9yIFRyeWluZyB0byBidWlsZCBhIHdpbmRvd3Mgc3BlY2lmaWMg
ZmlsZSBpbiBhIG5vbiB3aW5kb3dzIGJ1aWxkLgorI2VuZGlmCisKKworLy8KKy8vIFRocmVhZCBM
b2NhbCBTdG9yYWdlIE9wZXJhdGlvbnMKKy8vCitPU19UTFNJbmRleCBPU19BbGxvY1RMU0luZGV4
KCkKK3sKKwlEV09SRCBkd0luZGV4ID0gVGxzQWxsb2MoKTsKKwlpZiAoZHdJbmRleCA9PSBUTFNf
T1VUX09GX0lOREVYRVMpIHsKKwkJYXNzZXJ0KDAgJiYgIk9TX0FsbG9jVExTSW5kZXgoKTogVW5h
YmxlIHRvIGFsbG9jYXRlIFRocmVhZCBMb2NhbCBTdG9yYWdlIik7CisJCXJldHVybiBPU19JTlZB
TElEX1RMU19JTkRFWDsKKwl9CisKKwlyZXR1cm4gZHdJbmRleDsKK30KKworCitib29sIE9TX1Nl
dFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCwgdm9pZCAqbHB2VmFsdWUpCit7CisJaWYgKG5J
bmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworCQlhc3NlcnQoMCAmJiAiT1NfU2V0VExT
VmFsdWUoKTogSW52YWxpZCBUTFMgSW5kZXgiKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlm
IChUbHNTZXRWYWx1ZShuSW5kZXgsIGxwdlZhbHVlKSkKKwkJcmV0dXJuIHRydWU7CisJZWxzZQor
CQlyZXR1cm4gZmFsc2U7Cit9CisKKworYm9vbCBPU19GcmVlVExTSW5kZXgoT1NfVExTSW5kZXgg
bkluZGV4KQoreworCWlmIChuSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKKwkJYXNz
ZXJ0KDAgJiYgIk9TX1NldFRMU1ZhbHVlKCk6IEludmFsaWQgVExTIEluZGV4Iik7CisJCXJldHVy
biBmYWxzZTsKKwl9CisKKwlpZiAoVGxzRnJlZShuSW5kZXgpKQorCQlyZXR1cm4gdHJ1ZTsKKwll
bHNlCisJCXJldHVybiBmYWxzZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3BhcnNlQ29uc3QuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvcGFyc2VDb25zdC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYTU5ZjBiZTlkOGMwMDZmYzkyMjJjNDk4ZjA0ZTZiZTRmNjViMTU3OAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L3BhcnNlQ29uc3QuY3BwCkBAIC0wLDAgKzEsMjQ1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaCIKKworLy8KKy8vIFVz
ZSB0aGlzIGNsYXNzIHRvIGNhcnJ5IGFsb25nIGRhdGEgZnJvbSBub2RlIHRvIG5vZGUgaW4gCisv
LyB0aGUgdHJhdmVyc2FsCisvLworY2xhc3MgVENvbnN0VHJhdmVyc2VyIDogcHVibGljIFRJbnRl
cm1UcmF2ZXJzZXIgeworcHVibGljOgorICAgIFRDb25zdFRyYXZlcnNlcihDb25zdGFudFVuaW9u
KiBjVW5pb24sIGJvb2wgc2luZ2xlQ29uc3RQYXJhbSwgVE9wZXJhdG9yIGNvbnN0cnVjdFR5cGUs
IFRJbmZvU2luayYgc2luaywgVFN5bWJvbFRhYmxlJiBzeW1UYWJsZSwgVFR5cGUmIHQpCisgICAg
ICAgIDogZXJyb3IoZmFsc2UpLAorICAgICAgICAgIGluZGV4KDApLAorICAgICAgICAgIHVuaW9u
QXJyYXkoY1VuaW9uKSwKKyAgICAgICAgICB0eXBlKHQpLAorICAgICAgICAgIGNvbnN0cnVjdG9y
VHlwZShjb25zdHJ1Y3RUeXBlKSwKKyAgICAgICAgICBzaW5nbGVDb25zdGFudFBhcmFtKHNpbmds
ZUNvbnN0UGFyYW0pLAorICAgICAgICAgIGluZm9TaW5rKHNpbmspLAorICAgICAgICAgIHN5bWJv
bFRhYmxlKHN5bVRhYmxlKSwKKyAgICAgICAgICBzaXplKDApLAorICAgICAgICAgIGlzTWF0cml4
KGZhbHNlKSwKKyAgICAgICAgICBtYXRyaXhTaXplKDApIHsKKyAgICB9CisKKyAgICBib29sIGVy
cm9yOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7
CisgICAgdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qKTsKKyAg
ICBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7CisgICAgYm9v
bCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqKTsKKyAgICBib29sIHZpc2l0
U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKik7CisgICAgYm9vbCB2aXNp
dEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOworICAgIGJvb2wgdmlz
aXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCopOworICAgIGJvb2wgdmlzaXRCcmFuY2go
VmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqKTsKKworICAgIHNpemVfdCBpbmRleDsKKyAgICBD
b25zdGFudFVuaW9uICp1bmlvbkFycmF5OworICAgIFRUeXBlIHR5cGU7CisgICAgVE9wZXJhdG9y
IGNvbnN0cnVjdG9yVHlwZTsKKyAgICBib29sIHNpbmdsZUNvbnN0YW50UGFyYW07CisgICAgVElu
Zm9TaW5rJiBpbmZvU2luazsKKyAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlOworICAgIHNp
emVfdCBzaXplOyAvLyBzaXplIG9mIHRoZSBjb25zdHJ1Y3RvciAoIDQgZm9yIHZlYzQpCisgICAg
Ym9vbCBpc01hdHJpeDsKKyAgICBzaXplX3QgbWF0cml4U2l6ZTsgLy8gZGltZW5zaW9uIG9mIHRo
ZSBtYXRyaXggKG5vbWluYWwgc2l6ZSBhbmQgbm90IHRoZSBpbnN0YW5jZSBzaXplKQorfTsKKwor
Ly8KKy8vIFRoZSByZXN0IG9mIHRoZSBmaWxlIGFyZSB0aGUgdHJhdmVyc2FsIGZ1bmN0aW9ucy4g
IFRoZSBsYXN0IG9uZQorLy8gaXMgdGhlIG9uZSB0aGF0IHN0YXJ0cyB0aGUgdHJhdmVyc2FsLgor
Ly8KKy8vIFJldHVybiB0cnVlIGZyb20gaW50ZXJpb3Igbm9kZXMgdG8gaGF2ZSB0aGUgZXh0ZXJu
YWwgdHJhdmVyc2FsCisvLyBjb250aW51ZSBvbiB0byBjaGlsZHJlbi4gIElmIHlvdSBwcm9jZXNz
IGNoaWxkcmVuIHlvdXJzZWxmLAorLy8gcmV0dXJuIGZhbHNlLgorLy8KKwordm9pZCBUQ29uc3RU
cmF2ZXJzZXI6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCit7CisgICAgaW5mb1Np
bmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRMaW5lKCksICJT
eW1ib2wgTm9kZSBmb3VuZCBpbiBjb25zdGFudCBjb25zdHJ1Y3RvciIpOworICAgIHJldHVybjsK
KworfQorCitib29sIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1CaW5hcnkqIG5vZGUpCit7CisgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBub2RlLT5n
ZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCk7CisgICAgCisgICAgaWYgKHF1YWxpZmllciAhPSBFdnFD
b25zdCkgeworICAgICAgICBUU3RyaW5nIGJ1ZjsKKyAgICAgICAgYnVmLmFwcGVuZCgiJ2NvbnN0
cnVjdG9yJyA6IGFzc2lnbmluZyBub24tY29uc3RhbnQgdG8gIik7CisgICAgICAgIGJ1Zi5hcHBl
bmQodHlwZS5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNz
YWdlKEVQcmVmaXhFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCBidWYuY19zdHIoKSk7CisgICAgICAg
IGVycm9yID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAgCisgICAgfQorCisgICBpbmZv
U2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwg
IkJpbmFyeSBOb2RlIGZvdW5kIGluIGNvbnN0YW50IGNvbnN0cnVjdG9yIik7CisgICAgCisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRVbmFyeShWaXNp
dCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQoreworICAgIFRTdHJpbmcgYnVmOworICAgIGJ1
Zi5hcHBlbmQoIidjb25zdHJ1Y3RvcicgOiBhc3NpZ25pbmcgbm9uLWNvbnN0YW50IHRvICIpOwor
ICAgIGJ1Zi5hcHBlbmQodHlwZS5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICBpbmZvU2luay5p
bmZvLm1lc3NhZ2UoRVByZWZpeEVycm9yLCBub2RlLT5nZXRMaW5lKCksIGJ1Zi5jX3N0cigpKTsK
KyAgICBlcnJvciA9IHRydWU7CisgICAgcmV0dXJuIGZhbHNlOyAgCit9CisKK2Jvb2wgVENvbnN0
VHJhdmVyc2VyOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSog
bm9kZSkKK3sKKyAgICBpZiAoIW5vZGUtPmlzQ29uc3RydWN0b3IoKSAmJiBub2RlLT5nZXRPcCgp
ICE9IEVPcENvbW1hKSB7CisgICAgICAgIFRTdHJpbmcgYnVmOworICAgICAgICBidWYuYXBwZW5k
KCInY29uc3RydWN0b3InIDogYXNzaWduaW5nIG5vbi1jb25zdGFudCB0byAiKTsKKyAgICAgICAg
YnVmLmFwcGVuZCh0eXBlLmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICBpbmZvU2luay5p
bmZvLm1lc3NhZ2UoRVByZWZpeEVycm9yLCBub2RlLT5nZXRMaW5lKCksIGJ1Zi5jX3N0cigpKTsK
KyAgICAgICAgZXJyb3IgPSB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7ICAKKyAgICB9CisK
KyAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMCkgeworICAgICAgICBlcnJv
ciA9IHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIGZsYWcg
PSBub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAxICYmIG5vZGUtPmdldFNlcXVlbmNlKClb
MF0tPmdldEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisgICAgaWYgKGZsYWcpIAor
ICAgIHsKKyAgICAgICAgc2luZ2xlQ29uc3RhbnRQYXJhbSA9IHRydWU7IAorICAgICAgICBjb25z
dHJ1Y3RvclR5cGUgPSBub2RlLT5nZXRPcCgpOworICAgICAgICBzaXplID0gbm9kZS0+Z2V0VHlw
ZSgpLmdldE9iamVjdFNpemUoKTsKKworICAgICAgICBpZiAobm9kZS0+Z2V0VHlwZSgpLmlzTWF0
cml4KCkpIHsKKyAgICAgICAgICAgIGlzTWF0cml4ID0gdHJ1ZTsKKyAgICAgICAgICAgIG1hdHJp
eFNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKTsKKyAgICAgICAgfQorICAg
IH0gICAgICAgCisKKyAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3IgcCA9IG5vZGUt
PmdldFNlcXVlbmNlKCkuYmVnaW4oKTsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHAgIT0gbm9kZS0+Z2V0U2VxdWVuY2UoKS5lbmQoKTsgcCsrKSB7CisKKyAgICAgICAgaWYg
KG5vZGUtPmdldE9wKCkgPT0gRU9wQ29tbWEpCisgICAgICAgICAgICBpbmRleCA9IDA7ICAgICAg
ICAgICAKKworICAgICAgICAoKnApLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9ICAgCisgICAgaWYg
KGZsYWcpIAorICAgIHsKKyAgICAgICAgc2luZ2xlQ29uc3RhbnRQYXJhbSA9IGZhbHNlOyAgIAor
ICAgICAgICBjb25zdHJ1Y3RvclR5cGUgPSBFT3BOdWxsOworICAgICAgICBzaXplID0gMDsKKyAg
ICAgICAgaXNNYXRyaXggPSBmYWxzZTsKKyAgICAgICAgbWF0cml4U2l6ZSA9IDA7CisgICAgfQor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0U2VsZWN0
aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBub2RlKQoreworICAgIGluZm9TaW5r
LmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiU2Vs
ZWN0aW9uIE5vZGUgZm91bmQgaW4gY29uc3RhbnQgY29uc3RydWN0b3IiKTsKKyAgICBlcnJvciA9
IHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFRDb25zdFRyYXZlcnNlcjo6dmlz
aXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKQoreworICAgIGlmICgh
bm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSkKKyAgICB7CisgICAgICAgIC8vIFRoZSBjb25z
dGFudCB3YXMgbm90IGluaXRpYWxpemVkLCB0aGlzIHNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBs
b2dnZWQKKyAgICAgICAgYXNzZXJ0KGluZm9TaW5rLmluZm8uc2l6ZSgpICE9IDApOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiogbGVmdFVuaW9uQXJyYXkgPSB1
bmlvbkFycmF5OworICAgIHNpemVfdCBpbnN0YW5jZVNpemUgPSB0eXBlLmdldE9iamVjdFNpemUo
KTsKKworICAgIGlmIChpbmRleCA+PSBpbnN0YW5jZVNpemUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmICghc2luZ2xlQ29uc3RhbnRQYXJhbSkgeworICAgICAgICBzaXplX3Qgc2l6ZSA9IG5v
ZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CisgICAgCisgICAgICAgIENvbnN0YW50VW5p
b24gKnJpZ2h0VW5pb25BcnJheSA9IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICBpZiAo
aW5kZXggPj0gaW5zdGFuY2VTaXplKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIGxlZnRVbmlvbkFycmF5W2luZGV4XSA9IHJpZ2h0VW5pb25BcnJheVtpXTsKKworICAgICAg
ICAgICAgKGluZGV4KSsrOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2l6ZV90
IHRvdGFsU2l6ZSA9IGluZGV4ICsgc2l6ZTsKKyAgICAgICAgQ29uc3RhbnRVbmlvbiAqcmlnaHRV
bmlvbkFycmF5ID0gbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKyAgICAgICAgaWYgKCFp
c01hdHJpeCkgeworICAgICAgICAgICAgc2l6ZV90IGNvdW50ID0gMDsKKyAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSBpbmRleDsgaSA8IHRvdGFsU2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGkgPj0gaW5zdGFuY2VTaXplKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXSA9IHJpZ2h0VW5pb25BcnJheVtjb3Vu
dF07CisKKyAgICAgICAgICAgICAgICAoaW5kZXgpKys7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCkgPiAxKQorICAg
ICAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
eyAgLy8gZm9yIG1hdHJpeCBjb25zdHJ1Y3RvcnMKKyAgICAgICAgICAgIHNpemVfdCBjb3VudCA9
IDA7CisgICAgICAgICAgICBzaXplX3QgZWxlbWVudCA9IGluZGV4OworICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IGluZGV4OyBpIDwgdG90YWxTaXplOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICBpZiAoaSA+PSBpbnN0YW5jZVNpemUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICBpZiAoZWxlbWVudCAtIGkgPT0gMCB8fCAoaSAtIGVsZW1lbnQpICUgKG1h
dHJpeFNpemUgKyAxKSA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlb
aV0gPSByaWdodFVuaW9uQXJyYXlbY291bnRdOworICAgICAgICAgICAgICAgIGVsc2UgCisgICAg
ICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldEZDb25zdCgwLjBmKTsKKworICAg
ICAgICAgICAgICAgIChpbmRleCkrKzsKKworICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRU
eXBlKCkuZ2V0T2JqZWN0U2l6ZSgpID4gMSkKKyAgICAgICAgICAgICAgICAgICAgY291bnQrKzsg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jv
b2wgVENvbnN0VHJhdmVyc2VyOjp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKiBu
b2RlKQoreworICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwg
bm9kZS0+Z2V0TGluZSgpLCAiTG9vcCBOb2RlIGZvdW5kIGluIGNvbnN0YW50IGNvbnN0cnVjdG9y
Iik7CisgICAgZXJyb3IgPSB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUQ29u
c3RUcmF2ZXJzZXI6OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKiBub2Rl
KQoreworICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9k
ZS0+Z2V0TGluZSgpLCAiQnJhbmNoIE5vZGUgZm91bmQgaW4gY29uc3RhbnQgY29uc3RydWN0b3Ii
KTsKKyAgICBlcnJvciA9IHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLworLy8gVGhp
cyBmdW5jdGlvbiBpcyB0aGUgb25lIHRvIGNhbGwgZXh0ZXJuYWxseSB0byBzdGFydCB0aGUgdHJh
dmVyc2FsLgorLy8gSW5kaXZpZHVhbCBmdW5jdGlvbnMgY2FuIGJlIGluaXRpYWxpemVkIHRvIDAg
dG8gc2tpcCBwcm9jZXNzaW5nIG9mIHRoYXQKKy8vIHR5cGUgb2Ygbm9kZS4gIEl0J3MgY2hpbGRy
ZW4gd2lsbCBzdGlsbCBiZSBwcm9jZXNzZWQuCisvLworYm9vbCBUSW50ZXJtZWRpYXRlOjpwYXJz
ZUNvbnN0VHJlZShjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUSW50ZXJtTm9kZSogcm9vdCwgQ29u
c3RhbnRVbmlvbiogdW5pb25BcnJheSwgVE9wZXJhdG9yIGNvbnN0cnVjdG9yVHlwZSwgVFN5bWJv
bFRhYmxlJiBzeW1ib2xUYWJsZSwgVFR5cGUgdCwgYm9vbCBzaW5nbGVDb25zdGFudFBhcmFtKQor
eworICAgIGlmIChyb290ID09IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFRDb25z
dFRyYXZlcnNlciBpdCh1bmlvbkFycmF5LCBzaW5nbGVDb25zdGFudFBhcmFtLCBjb25zdHJ1Y3Rv
clR5cGUsIGluZm9TaW5rLCBzeW1ib2xUYWJsZSwgdCk7CisKKyAgICByb290LT50cmF2ZXJzZSgm
aXQpOworICAgIGlmIChpdC5lcnJvcikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZWxzZQor
ICAgICAgICByZXR1cm4gZmFsc2U7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRl
clRpbWluZy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YTlmM2Y0OWVmMzhlZDk5Y2ViNTBhNzg5NzMyYTA4MzExODY1NDlkZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWlu
Zy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcApAQCAtMCwwICsxLDEyNyBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luZm9TaW5rLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuaCIKKworUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6UmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZyhUSW5mb1NpbmtCYXNlJiBzaW5rKQorICAgIDogbVNpbmsoc2luaykKKyAg
ICAsIG1OdW1FcnJvcnMoMCkKK3sKKyAgICAvLyBTYW1wbGluZyBvcHMgZm91bmQgb25seSBpbiBm
cmFnbWVudCBzaGFkZXJzLgorICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRChzMjE7
dmYyO2YxOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFByb2ooczIxO3Zm
MztmMTsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRQcm9qKHMyMTt2ZjQ7
ZjE7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZUN1YmUoc0MxO3ZmMztmMTsi
KTsKKyAgICAvLyBTYW1wbGluZyBvcHMgZm91bmQgaW4gYm90aCB2ZXJ0ZXggYW5kIGZyYWdtZW50
IHNoYWRlcnMuCisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEKHMyMTt2ZjI7Iik7
CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUHJvaihzMjE7dmYzOyIpOworICAg
IG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFByb2ooczIxO3ZmNDsiKTsKKyAgICBtU2Ft
cGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlQ3ViZShzQzE7dmYzOyIpOworICAgIC8vIFNhbXBsaW5n
IG9wcyBwcm92aWRlZCBieSBPRVNfRUdMX2ltYWdlX2V4dGVybmFsLgorICAgIG1TYW1wbGluZ09w
cy5pbnNlcnQoInRleHR1cmUyRCgxO3ZmMjsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0
ZXh0dXJlMkRQcm9qKDE7dmYzOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUy
RFByb2ooMTt2ZjQ7Iik7CisgICAgLy8gU2FtcGxpbmcgb3BzIHByb3ZpZGVkIGJ5IEFSQl90ZXh0
dXJlX3JlY3RhbmdsZS4KKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRSZWN0KDE7
dmYyOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFJlY3RQcm9qKDE7dmYz
OyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFJlY3RQcm9qKDE7dmY0OyIp
OworfQorCisvLyBGSVhNRShtdnVqb3ZpYyk6IFdlIGRvIG5vdCBrbm93IGlmIHRoZSBleGVjdXRp
b24gdGltZSBvZiBidWlsdC1pbiBvcGVyYXRpb25zIGxpa2Ugc2luLCBwb3csIGV0Yy4KKy8vIGNh
biB2YXJ5IGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQgYXJndW1lbnRzLiBJZiBzbywg
d2Ugc2hvdWxkIHJlc3RyaWN0IHRob3NlIGFzIHdlbGwuCit2b2lkIFJlc3RyaWN0RnJhZ21lbnRT
aGFkZXJUaW1pbmc6OmVuZm9yY2VSZXN0cmljdGlvbnMoY29uc3QgVERlcGVuZGVuY3lHcmFwaCYg
Z3JhcGgpCit7CisgICAgbU51bUVycm9ycyA9IDA7CisKKyAgICAvLyBGSVhNRShtdnVqb3ZpYyk6
IFRoZSBkZXBlbmRlbmN5IGdyYXBoIGRvZXMgbm90IHN1cHBvcnQgdXNlciBkZWZpbmVkIGZ1bmN0
aW9uIGNhbGxzIHJpZ2h0IG5vdywKKyAgICAvLyBzbyB3ZSBnZW5lcmF0ZSBlcnJvcnMgZm9yIHRo
ZW0uCisgICAgdmFsaWRhdGVVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbFVzYWdlKGdyYXBoKTsKKwor
ICAgIC8vIFN0YXJ0aW5nIGZyb20gZWFjaCBzYW1wbGVyLCB0cmF2ZXJzZSB0aGUgZGVwZW5kZW5j
eSBncmFwaCBhbmQgZ2VuZXJhdGUgYW4gZXJyb3IgZWFjaCB0aW1lIHdlCisgICAgLy8gaGl0IGEg
bm9kZSB3aGVyZSBzYW1wbGVyIGRlcGVuZGVudCB2YWx1ZXMgYXJlIG5vdCBhbGxvd2VkLgorICAg
IGZvciAoVEdyYXBoU3ltYm9sVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZ3JhcGguYmVn
aW5TYW1wbGVyU3ltYm9scygpOworICAgICAgICAgaXRlciAhPSBncmFwaC5lbmRTYW1wbGVyU3lt
Ym9scygpOworICAgICAgICAgKytpdGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBoU3ltYm9sKiBz
YW1wbGVyU3ltYm9sID0gKml0ZXI7CisgICAgICAgIGNsZWFyVmlzaXRlZCgpOworICAgICAgICBz
YW1wbGVyU3ltYm9sLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZzo6dmFsaWRhdGVVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbFVzYWdl
KGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKQoreworICAgIGZvciAoVEZ1bmN0aW9uQ2Fs
bFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGdyYXBoLmJlZ2luVXNlckRlZmluZWRGdW5j
dGlvbkNhbGxzKCk7CisgICAgICAgICBpdGVyICE9IGdyYXBoLmVuZFVzZXJEZWZpbmVkRnVuY3Rp
b25DYWxscygpOworICAgICAgICAgKytpdGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBoRnVuY3Rp
b25DYWxsKiBmdW5jdGlvbkNhbGwgPSAqaXRlcjsKKyAgICAgICAgYmVnaW5FcnJvcihmdW5jdGlv
bkNhbGwtPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpKTsKKyAgICAgICAgbVNpbmsgPDwgIkEgY2Fs
bCB0byBhIHVzZXIgZGVmaW5lZCBmdW5jdGlvbiBpcyBub3QgcGVybWl0dGVkLlxuIjsKKyAgICB9
Cit9CisKK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6YmVnaW5FcnJvcihjb25z
dCBUSW50ZXJtTm9kZSogbm9kZSkKK3sKKyAgICArK21OdW1FcnJvcnM7CisgICAgbVNpbmsucHJl
Zml4KEVQcmVmaXhFcnJvcik7CisgICAgbVNpbmsubG9jYXRpb24obm9kZS0+Z2V0TGluZSgpKTsK
K30KKworYm9vbCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjppc1NhbXBsaW5nT3AoY29u
c3QgVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKSBjb25zdAoreworICAgIHJl
dHVybiAhaW50ZXJtRnVuY3Rpb25DYWxsLT5pc1VzZXJEZWZpbmVkKCkgJiYKKyAgICAgICAgICAg
bVNhbXBsaW5nT3BzLmZpbmQoaW50ZXJtRnVuY3Rpb25DYWxsLT5nZXROYW1lKCkpICE9IG1TYW1w
bGluZ09wcy5lbmQoKTsKK30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2
aXNpdEFyZ3VtZW50KFRHcmFwaEFyZ3VtZW50KiBwYXJhbWV0ZXIpCit7CisgICAgLy8gVGV4dHVy
ZSBjYWNoZSBhY2Nlc3MgdGltZSBtaWdodCBsZWFrIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi4KKyAg
ICAvLyBUaHVzLCB3ZSByZXN0cmljdCBzYW1wbGVyIGRlcGVuZGVudCB2YWx1ZXMgZnJvbSBhZmZl
Y3RpbmcgdGhlIGNvb3JkaW5hdGUgb3IgTE9EIGJpYXMgb2YgYQorICAgIC8vIHNhbXBsaW5nIG9w
ZXJhdGlvbi4KKyAgICBpZiAoaXNTYW1wbGluZ09wKHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rp
b25DYWxsKCkpKSB7CisgICAgICAgIHN3aXRjaCAocGFyYW1ldGVyLT5nZXRBcmd1bWVudE51bWJl
cigpKSB7CisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgLy8gU2Vjb25kIGFy
Z3VtZW50IChjb29yZCkKKyAgICAgICAgICAgICAgICBiZWdpbkVycm9yKHBhcmFtZXRlci0+Z2V0
SW50ZXJtRnVuY3Rpb25DYWxsKCkpOworICAgICAgICAgICAgICAgIG1TaW5rIDw8ICJBbiBleHBy
ZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1pdHRlZCB0byBiZSB0aGUi
CisgICAgICAgICAgICAgICAgICAgICAgPDwgIiBjb29yZGluYXRlIGFyZ3VtZW50IG9mIGEgc2Ft
cGxpbmcgb3BlcmF0aW9uLlxuIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgMjoKKyAgICAgICAgICAgICAgICAvLyBUaGlyZCBhcmd1bWVudCAoYmlhcykKKyAgICAg
ICAgICAgICAgICBiZWdpbkVycm9yKHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkp
OworICAgICAgICAgICAgICAgIG1TaW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBh
IHNhbXBsZXIgaXMgbm90IHBlcm1pdHRlZCB0byBiZSB0aGUiCisgICAgICAgICAgICAgICAgICAg
ICAgPDwgIiBiaWFzIGFyZ3VtZW50IG9mIGEgc2FtcGxpbmcgb3BlcmF0aW9uLlxuIjsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
Ly8gRmlyc3QgYXJndW1lbnQgKHNhbXBsZXIpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlz
aXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24pCit7CisgICAgYmVnaW5FcnJv
cihzZWxlY3Rpb24tPmdldEludGVybVNlbGVjdGlvbigpKTsKKyAgICBtU2luayA8PCAiQW4gZXhw
cmVzc2lvbiBkZXBlbmRlbnQgb24gYSBzYW1wbGVyIGlzIG5vdCBwZXJtaXR0ZWQgaW4gYSBjb25k
aXRpb25hbCBzdGF0ZW1lbnQuXG4iOworfQorCit2b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmc6OnZpc2l0TG9vcChUR3JhcGhMb29wKiBsb29wKQoreworICAgIGJlZ2luRXJyb3IobG9v
cC0+Z2V0SW50ZXJtTG9vcCgpKTsKKyAgICBtU2luayA8PCAiQW4gZXhwcmVzc2lvbiBkZXBlbmRl
bnQgb24gYSBzYW1wbGVyIGlzIG5vdCBwZXJtaXR0ZWQgaW4gYSBsb29wIGNvbmRpdGlvbi5cbiI7
Cit9CisKK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRMb2dpY2FsT3Ao
VEdyYXBoTG9naWNhbE9wKiBsb2dpY2FsT3ApCit7CisgICAgYmVnaW5FcnJvcihsb2dpY2FsT3At
PmdldEludGVybUxvZ2ljYWxPcCgpKTsKKyAgICBtU2luayA8PCAiQW4gZXhwcmVzc2lvbiBkZXBl
bmRlbnQgb24gYSBzYW1wbGVyIGlzIG5vdCBwZXJtaXR0ZWQgb24gdGhlIGxlZnQgaGFuZCBzaWRl
IG9mIGEgbG9naWNhbCAiCisgICAgICAgICAgPDwgbG9naWNhbE9wLT5nZXRPcFN0cmluZygpCisg
ICAgICAgICAgPDwgIiBvcGVyYXRvci5cbiI7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zMjNjYjYyZDhhMzg2ZTI1YWUwMDUwYWU0MmU5MTM0YzgwNTc2MThlCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdGlt
aW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaApAQCAtMCwwICsxLDQwIEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfRlJBR01FTlRfU0hB
REVSX1RJTUlOR19IXworI2RlZmluZSBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfRlJBR01FTlRf
U0hBREVSX1RJTUlOR19IXworCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisKK2NsYXNzIFRJ
bmZvU2lua0Jhc2U7CisKK2NsYXNzIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcgOiBURGVw
ZW5kZW5jeUdyYXBoVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBSZXN0cmljdEZyYWdtZW50U2hh
ZGVyVGltaW5nKFRJbmZvU2lua0Jhc2UmIHNpbmspOworICAgIHZvaWQgZW5mb3JjZVJlc3RyaWN0
aW9ucyhjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCk7CisgICAgaW50IG51bUVycm9ycygp
IGNvbnN0IHsgcmV0dXJuIG1OdW1FcnJvcnM7IH0KKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFy
Z3VtZW50KFRHcmFwaEFyZ3VtZW50KiBwYXJhbWV0ZXIpOworICAgIHZpcnR1YWwgdm9pZCB2aXNp
dFNlbGVjdGlvbihUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbik7CisgICAgdmlydHVhbCB2b2lk
IHZpc2l0TG9vcChUR3JhcGhMb29wKiBsb29wKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRMb2dp
Y2FsT3AoVEdyYXBoTG9naWNhbE9wKiBsb2dpY2FsT3ApOworCitwcml2YXRlOgorICAgIHZvaWQg
YmVnaW5FcnJvcihjb25zdCBUSW50ZXJtTm9kZSogbm9kZSk7CisgICAgdm9pZCB2YWxpZGF0ZVVz
ZXJEZWZpbmVkRnVuY3Rpb25DYWxsVXNhZ2UoY29uc3QgVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgp
OworICAgIGJvb2wgaXNTYW1wbGluZ09wKGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1
bmN0aW9uQ2FsbCkgY29uc3Q7CisKKyAgICBUSW5mb1NpbmtCYXNlJiBtU2luazsKKyAgICBpbnQg
bU51bUVycm9yczsKKworICAgIHR5cGVkZWYgc3RkOjpzZXQ8VFN0cmluZz4gU3RyaW5nU2V0Owor
ICAgIFN0cmluZ1NldCBtU2FtcGxpbmdPcHM7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX1RJ
TUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5lZTc4YzM1NDUwMTdiZGMxZThlOTk4ZjE5MTgyZjYxMzlmYzFhNmRhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcApAQCAtMCwwICsxLDE3
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5n
L1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgiCisKK3ZvaWQgUmVzdHJpY3RWZXJ0ZXhTaGFk
ZXJUaW1pbmc6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCit7CisgICAgaWYgKElz
U2FtcGxlcihub2RlLT5nZXRCYXNpY1R5cGUoKSkpIHsKKyAgICAgICAgKyttTnVtRXJyb3JzOwor
ICAgICAgICBtU2luay5tZXNzYWdlKEVQcmVmaXhFcnJvciwKKyAgICAgICAgICAgICAgICAgICAg
ICBub2RlLT5nZXRMaW5lKCksCisgICAgICAgICAgICAgICAgICAgICAgIlNhbXBsZXJzIGFyZSBu
b3QgcGVybWl0dGVkIGluIHZlcnRleCBzaGFkZXJzIik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jl
c3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi41ZjBkZDMxOTdhMjM5N2JjYjEyMzk1NTg3OWMxODQ0NTNmZDYyOGQxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgKQEAgLTAsMCArMSwzMyBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX1ZFUlRF
WF9TSEFERVJfVElNSU5HX0hfCisjZGVmaW5lIENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9WRVJU
RVhfU0hBREVSX1RJTUlOR19IXworCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKKworY2xhc3MgVEluZm9TaW5rQmFzZTsK
KworY2xhc3MgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcgOiBwdWJsaWMgVEludGVybVRyYXZl
cnNlciB7CitwdWJsaWM6CisgICAgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcoVEluZm9TaW5r
QmFzZSYgc2luaykKKyAgICAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxz
ZSkKKyAgICAgICAgLCBtU2luayhzaW5rKQorICAgICAgICAsIG1OdW1FcnJvcnMoMCkge30KKwor
ICAgIHZvaWQgZW5mb3JjZVJlc3RyaWN0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCkgeyByb290LT50
cmF2ZXJzZSh0aGlzKTsgfQorICAgIGludCBudW1FcnJvcnMoKSB7IHJldHVybiBtTnVtRXJyb3Jz
OyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOworcHJp
dmF0ZToKKyAgICBUSW5mb1NpbmtCYXNlJiBtU2luazsKKyAgICBpbnQgbU51bUVycm9yczsKK307
CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX1ZFUlRFWF9TSEFERVJfVElN
SU5HX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci91dGlsLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL3V0aWwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3N2JkY2M0OGI4NjdlNDEzZTBkZTkz
N2U0ODc0NjQ4NTRjNGRiNGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci91dGlsLmNwcApAQCAtMCwwICsxLDI4IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oIgorCisj
aW5jbHVkZSA8bGltaXRzPgorCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL251bWVy
aWNfbGV4LmgiCisKK2Jvb2wgYXRvZl9jbGFtcChjb25zdCBjaGFyICpzdHIsIGZsb2F0ICp2YWx1
ZSkKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSBwcDo6bnVtZXJpY19sZXhfZmxvYXQoc3RyLCB2YWx1
ZSk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICAqdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPGZsb2F0Pjo6bWF4KCk7CisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK2Jvb2wgYXRvaV9j
bGFtcChjb25zdCBjaGFyICpzdHIsIGludCAqdmFsdWUpCit7CisgICAgYm9vbCBzdWNjZXNzID0g
cHA6Om51bWVyaWNfbGV4X2ludChzdHIsIHZhbHVlKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAg
ICAgICp2YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7CisgICAgcmV0dXJu
IHN1Y2Nlc3M7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL3V0aWwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL3V0aWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYzY5ZjM5MDYwZDIwNTFmM2Ey
MDA2NTk1ZjMwNjAwZmVjMmU3Zjc3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oCkBAIC0wLDAgKzEsMjAgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVVRJTF9ICisjZGVmaW5lIENP
TVBJTEVSX1VUSUxfSAorCisvLyBhdG9mX2NsYW1wIGlzIGxpa2UgYXRvZiBidXQKKy8vICAgMS4g
aXQgZm9yY2VzIEMgbG9jYWxlLCBpLmUuIGZvcmNpbmcgJy4nIGFzIGRlY2ltYWwgcG9pbnQuCisv
LyAgIDIuIGl0IGNsYW1wcyB0aGUgdmFsdWUgdG8gLUZMVF9NQVggb3IgRkxUX01BWCBpZiBvdmVy
ZmxvdyBoYXBwZW5zLgorLy8gUmV0dXJuIGZhbHNlIGlmIG92ZXJmbG93IGhhcHBlbnMuCitleHRl
cm4gYm9vbCBhdG9mX2NsYW1wKGNvbnN0IGNoYXIgKnN0ciwgZmxvYXQgKnZhbHVlKTsKKworLy8g
SWYgb3ZlcmZsb3cgaGFwcGVucywgY2xhbXAgdGhlIHZhbHVlIHRvIElOVF9NSU4gb3IgSU5UX01B
WC4KKy8vIFJldHVybiBmYWxzZSBpZiBvdmVyZmxvdyBoYXBwZW5zLgorZXh0ZXJuIGJvb2wgYXRv
aV9jbGFtcChjb25zdCBjaGFyICpzdHIsIGludCAqdmFsdWUpOworCisjZW5kaWYgLy8gQ09NUElM
RVJfVVRJTF9ICmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdXRpbC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdXRpbC5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2ZTVlZWVkOTFmOGY1YTU5MmU1MzI3
M2YwOWE4NzhmNTRiODYwZWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3V0aWwuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJj
b21waWxlci91dGlsLmgiCi0KLSNpbmNsdWRlIDxsaW1pdHM+Ci0KLSNpbmNsdWRlICJjb21waWxl
ci9wcmVwcm9jZXNzb3IvbnVtZXJpY19sZXguaCIKLQotYm9vbCBhdG9mX2NsYW1wKGNvbnN0IGNo
YXIgKnN0ciwgZmxvYXQgKnZhbHVlKQotewotICAgIGJvb2wgc3VjY2VzcyA9IHBwOjpudW1lcmlj
X2xleF9mbG9hdChzdHIsIHZhbHVlKTsKLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgICp2YWx1
ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKTsKLSAgICByZXR1cm4gc3VjY2Vz
czsKLX0KLQotYm9vbCBhdG9pX2NsYW1wKGNvbnN0IGNoYXIgKnN0ciwgaW50ICp2YWx1ZSkKLXsK
LSAgICBib29sIHN1Y2Nlc3MgPSBwcDo6bnVtZXJpY19sZXhfaW50KHN0ciwgdmFsdWUpOwotICAg
IGlmICghc3VjY2VzcykKLSAgICAgICAgKnZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+
OjptYXgoKTsKLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3V0aWwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci91dGlsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRj
NjlmMzkwNjBkMjA1MWYzYTIwMDY1OTVmMzA2MDBmZWMyZTdmNzcuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3V0aWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfVVRJTF9ICi0jZGVmaW5lIENPTVBJTEVSX1VU
SUxfSAotCi0vLyBhdG9mX2NsYW1wIGlzIGxpa2UgYXRvZiBidXQKLS8vICAgMS4gaXQgZm9yY2Vz
IEMgbG9jYWxlLCBpLmUuIGZvcmNpbmcgJy4nIGFzIGRlY2ltYWwgcG9pbnQuCi0vLyAgIDIuIGl0
IGNsYW1wcyB0aGUgdmFsdWUgdG8gLUZMVF9NQVggb3IgRkxUX01BWCBpZiBvdmVyZmxvdyBoYXBw
ZW5zLgotLy8gUmV0dXJuIGZhbHNlIGlmIG92ZXJmbG93IGhhcHBlbnMuCi1leHRlcm4gYm9vbCBh
dG9mX2NsYW1wKGNvbnN0IGNoYXIgKnN0ciwgZmxvYXQgKnZhbHVlKTsKLQotLy8gSWYgb3ZlcmZs
b3cgaGFwcGVucywgY2xhbXAgdGhlIHZhbHVlIHRvIElOVF9NSU4gb3IgSU5UX01BWC4KLS8vIFJl
dHVybiBmYWxzZSBpZiBvdmVyZmxvdyBoYXBwZW5zLgotZXh0ZXJuIGJvb2wgYXRvaV9jbGFtcChj
b25zdCBjaGFyICpzdHIsIGludCAqdmFsdWUpOwotCi0jZW5kaWYgLy8gQ09NUElMRVJfVVRJTF9I
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXku
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5oCmluZGV4IDU4
YzM5NDAzMzFiMzYzZmZjMjRiZGQ0OTAxNTQ0Mzc3ZmM3MWNlNDAuLmM4MTZlNGUxYTU1YWExY2Fk
MjI3MGIzZjdmOGFkNmI2ZjMzOGUwYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJFR0wvRGlzcGxheS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJFR0wvRGlzcGxheS5oCkBAIC0xMSw4ICsxMSw2IEBACiAjaWZuZGVmIExJQkVHTF9ESVNQ
TEFZX0hfCiAjZGVmaW5lIExJQkVHTF9ESVNQTEFZX0hfCiAKLSNpbmNsdWRlICJjb21tb24vc3lz
dGVtLmgiCi0KICNpbmNsdWRlIDxzZXQ+CiAjaW5jbHVkZSA8dmVjdG9yPgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcAppbmRleCAwMWI0MDE3MTc5
MWM3ZTExZWZlMmE5YTJkMzhhZTNhZjM3MmE3ODM3Li4xMmY4ZGZkZjI1MDI0YjIxNzMyYzM4ZDFk
OWNiZDRjNjRmNjI2YzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliRUdML1N1cmZhY2UuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJF
R0wvU3VyZmFjZS5jcHAKQEAgLTMxOCw2ICszMTgsOCBAQCBib29sIFN1cmZhY2U6OmNoZWNrRm9y
T3V0T2ZEYXRlU3dhcENoYWluKCkKICAgICAgICAgc2l6ZURpcnR5ID0gZmFsc2U7CiAgICAgfQog
CisgICAgYm9vbCB3YXNEaXJ0eSA9IChtU3dhcEludGVydmFsRGlydHkgfHwgc2l6ZURpcnR5KTsK
KwogICAgIGlmIChtU3dhcEludGVydmFsRGlydHkpCiAgICAgewogICAgICAgICByZXNldFN3YXBD
aGFpbihjbGllbnRXaWR0aCwgY2xpZW50SGVpZ2h0KTsKQEAgLTMyNyw3ICszMjksNyBAQCBib29s
IFN1cmZhY2U6OmNoZWNrRm9yT3V0T2ZEYXRlU3dhcENoYWluKCkKICAgICAgICAgcmVzaXplU3dh
cENoYWluKGNsaWVudFdpZHRoLCBjbGllbnRIZWlnaHQpOwogICAgIH0KIAotICAgIGlmIChtU3dh
cEludGVydmFsRGlydHkgfHwgc2l6ZURpcnR5KQorICAgIGlmICh3YXNEaXJ0eSkKICAgICB7CiAg
ICAgICAgIGlmIChzdGF0aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihnZXRDdXJyZW50RHJhd1N1cmZh
Y2UoKSkgPT0gdGhpcykKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkVHTC9saWJFR0wuY3BwCmluZGV4IDMyMDY3MGRhMGM5NmQxOTJlNTNkOWE3Mzk2YWU0NjY5
YTM4MmY3NjIuLjBlYTQ2ZDRiMzllZmIxNzkzZDk0ZTM3ZjI4YzA4ZjZlYmQ0OGUzY2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAKQEAgLTE4NCw3
ICsxODQsNyBAQCBjb25zdCBjaGFyICpfX3N0ZGNhbGwgZWdsUXVlcnlTdHJpbmcoRUdMRGlzcGxh
eSBkcHksIEVHTGludCBuYW1lKQogICAgICAgICAgIGNhc2UgRUdMX1ZFTkRPUjoKICAgICAgICAg
ICAgIHJldHVybiBlZ2w6OnN1Y2Nlc3MoZGlzcGxheS0+Z2V0VmVuZG9yU3RyaW5nKCkpOwogICAg
ICAgICAgIGNhc2UgRUdMX1ZFUlNJT046Ci0gICAgICAgICAgICByZXR1cm4gZWdsOjpzdWNjZXNz
KCIxLjQgKEFOR0xFICIgVkVSU0lPTl9TVFJJTkcgIikiKTsKKyAgICAgICAgICAgIHJldHVybiBl
Z2w6OnN1Y2Nlc3MoIjEuNCAoQU5HTEUgIiBBTkdMRV9WRVJTSU9OX1NUUklORyAiKSIpOwogICAg
ICAgICB9CiAKICAgICAgICAgcmV0dXJuIGVnbDo6ZXJyb3IoRUdMX0JBRF9QQVJBTUVURVIsIChj
b25zdCBjaGFyKilOVUxMKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJFR0wvbGliRUdMLnJjIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9s
aWJFR0wucmMKaW5kZXggZTJjNDcyZjNiYjMzYjgyMTkzNjE2Njk2NGZjODQ4ZDNmZTVlYjAzYi4u
NTVlMWI4MzhjODc2NDFkMTlhMDQ1NTY1ZWU3MGE1NTYzY2I4YTA0MiAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wucmMKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wucmMKQEAgLTU0LDggKzU0LDggQEAgRU5E
CiAvLw0KIA0KIFZTX1ZFUlNJT05fSU5GTyBWRVJTSU9OSU5GTw0KLSBGSUxFVkVSU0lPTiBNQUpP
Ul9WRVJTSU9OLE1JTk9SX1ZFUlNJT04sQlVJTERfVkVSU0lPTixCVUlMRF9SRVZJU0lPTg0KLSBQ
Uk9EVUNUVkVSU0lPTiBNQUpPUl9WRVJTSU9OLE1JTk9SX1ZFUlNJT04sQlVJTERfVkVSU0lPTixC
VUlMRF9SRVZJU0lPTg0KKyBGSUxFVkVSU0lPTiBBTkdMRV9NQUpPUl9WRVJTSU9OLEFOR0xFX01J
Tk9SX1ZFUlNJT04sMCwwDQorIFBST0RVQ1RWRVJTSU9OIEFOR0xFX01BSk9SX1ZFUlNJT04sQU5H
TEVfTUlOT1JfVkVSU0lPTiwwLDANCiAgRklMRUZMQUdTTUFTSyAweDE3TA0KICNpZmRlZiBfREVC
VUcNCiAgRklMRUZMQUdTIDB4MUwNCkBAIC03MSwxMyArNzEsMTQgQEAgQkVHSU4KICAgICAgICAg
QkxPQ0sgIjA0MDkwNGIwIg0KICAgICAgICAgQkVHSU4NCiAgICAgICAgICAgICBWQUxVRSAiRmls
ZURlc2NyaXB0aW9uIiwgIkFOR0xFIGxpYkVHTCBEeW5hbWljIExpbmsgTGlicmFyeSINCi0gICAg
ICAgICAgICBWQUxVRSAiRmlsZVZlcnNpb24iLCBWRVJTSU9OX1NUUklORw0KKyAgICAgICAgICAg
IFZBTFVFICJGaWxlVmVyc2lvbiIsIEFOR0xFX1ZFUlNJT05fU1RSSU5HDQogICAgICAgICAgICAg
VkFMVUUgIkludGVybmFsTmFtZSIsICJsaWJFR0wiDQogICAgICAgICAgICAgVkFMVUUgIkxlZ2Fs
Q29weXJpZ2h0IiwgIkNvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiINCiAgICAgICAgICAg
ICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsICJsaWJFR0wuZGxsIg0KLSAgICAgICAgICAgIFZB
TFVFICJQcml2YXRlQnVpbGQiLCBWRVJTSU9OX1NUUklORw0KKyAgICAgICAgICAgIFZBTFVFICJQ
cml2YXRlQnVpbGQiLCBBTkdMRV9WRVJTSU9OX1NUUklORw0KICAgICAgICAgICAgIFZBTFVFICJQ
cm9kdWN0TmFtZSIsICJBTkdMRSBsaWJFR0wgRHluYW1pYyBMaW5rIExpYnJhcnkiDQotICAgICAg
ICAgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgVkVSU0lPTl9TVFJJTkcNCisgICAgICAgICAg
ICBWQUxVRSAiUHJvZHVjdFZlcnNpb24iLCBBTkdMRV9WRVJTSU9OX1NUUklORw0KKyAgICAgICAg
ICAgIFZBTFVFICJDb21tZW50cyIsICJCdWlsZCBEYXRlOiAiIEFOR0xFX0NPTU1JVF9EQVRFDQog
ICAgICAgICBFTkQNCiAgICAgRU5EDQogICAgIEJMT0NLICJWYXJGaWxlSW5mbyINCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML21haW4uY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9tYWluLmNwcAppbmRleCA0MjRlYzNmY2QxZDk4
NjM1MWJmNWVhNGJhYmJiMTE2YzBmZDFhZWU3Li44MGRjYzM0NTgwNzU2MGVmNmE0MTE3NGYxNGI3
YzlmMGQ3OGM2ZjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
RUdML21haW4uY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbWFp
bi5jcHAKQEAgLTEyLDEzICsxMiw1MCBAQAogCiBzdGF0aWMgRFdPUkQgY3VycmVudFRMUyA9IFRM
U19PVVRfT0ZfSU5ERVhFUzsKIAorbmFtZXNwYWNlIGVnbAoreworCitDdXJyZW50ICpBbGxvY2F0
ZUN1cnJlbnQoKQoreworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoZWdsOjpDdXJyZW50KilMb2Nh
bEFsbG9jKExQVFIsIHNpemVvZihlZ2w6OkN1cnJlbnQpKTsKKworICAgIGlmICghY3VycmVudCkK
KyAgICB7CisgICAgICAgIEVSUigiQ291bGQgbm90IGFsbG9jYXRlIHRocmVhZCBsb2NhbCBzdG9y
YWdlLiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBBU1NFUlQoY3VycmVu
dFRMUyAhPSBUTFNfT1VUX09GX0lOREVYRVMpOworICAgIFRsc1NldFZhbHVlKGN1cnJlbnRUTFMs
IGN1cnJlbnQpOworCisgICAgY3VycmVudC0+ZXJyb3IgPSBFR0xfU1VDQ0VTUzsKKyAgICBjdXJy
ZW50LT5BUEkgPSBFR0xfT1BFTkdMX0VTX0FQSTsKKyAgICBjdXJyZW50LT5kaXNwbGF5ID0gRUdM
X05PX0RJU1BMQVk7CisgICAgY3VycmVudC0+ZHJhd1N1cmZhY2UgPSBFR0xfTk9fU1VSRkFDRTsK
KyAgICBjdXJyZW50LT5yZWFkU3VyZmFjZSA9IEVHTF9OT19TVVJGQUNFOworCisgICAgcmV0dXJu
IGN1cnJlbnQ7Cit9CisKK3ZvaWQgRGVhbGxvY2F0ZUN1cnJlbnQoKQoreworICAgIHZvaWQgKmN1
cnJlbnQgPSBUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKworICAgIGlmIChjdXJyZW50KQorICAg
IHsKKyAgICAgICAgTG9jYWxGcmVlKChITE9DQUwpY3VycmVudCk7CisgICAgfQorfQorCit9CisK
IGV4dGVybiAiQyIgQk9PTCBXSU5BUEkgRGxsTWFpbihISU5TVEFOQ0UgaW5zdGFuY2UsIERXT1JE
IHJlYXNvbiwgTFBWT0lEIHJlc2VydmVkKQogewogICAgIHN3aXRjaCAocmVhc29uKQogICAgIHsK
ICAgICAgIGNhc2UgRExMX1BST0NFU1NfQVRUQUNIOgogICAgICAgICB7Ci0jaWYgIWRlZmluZWQo
QU5HTEVfRElTQUJMRV9UUkFDRSkKKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9UUkFDRSkKICAg
ICAgICAgICAgIEZJTEUgKmRlYnVnID0gZm9wZW4oVFJBQ0VfT1VUUFVUX0ZJTEUsICJydCIpOwog
CiAgICAgICAgICAgICBpZiAoZGVidWcpCkBAIC00MywzOSArODAsMTcgQEAgZXh0ZXJuICJDIiBC
T09MIFdJTkFQSSBEbGxNYWluKEhJTlNUQU5DRSBpbnN0YW5jZSwgRFdPUkQgcmVhc29uLCBMUFZP
SUQgcmVzZXJ2ZWQKICAgICAgICAgLy8gRmFsbCB0aHJvdWdodCB0byBpbml0aWFsaXplIGluZGV4
CiAgICAgICBjYXNlIERMTF9USFJFQURfQVRUQUNIOgogICAgICAgICB7Ci0gICAgICAgICAgICBl
Z2w6OkN1cnJlbnQgKmN1cnJlbnQgPSAoZWdsOjpDdXJyZW50KilMb2NhbEFsbG9jKExQVFIsIHNp
emVvZihlZ2w6OkN1cnJlbnQpKTsKLQotICAgICAgICAgICAgaWYgKGN1cnJlbnQpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgVGxzU2V0VmFsdWUoY3VycmVudFRMUywgY3VycmVudCk7
Ci0KLSAgICAgICAgICAgICAgICBjdXJyZW50LT5lcnJvciA9IEVHTF9TVUNDRVNTOwotICAgICAg
ICAgICAgICAgIGN1cnJlbnQtPkFQSSA9IEVHTF9PUEVOR0xfRVNfQVBJOwotICAgICAgICAgICAg
ICAgIGN1cnJlbnQtPmRpc3BsYXkgPSBFR0xfTk9fRElTUExBWTsKLSAgICAgICAgICAgICAgICBj
dXJyZW50LT5kcmF3U3VyZmFjZSA9IEVHTF9OT19TVVJGQUNFOwotICAgICAgICAgICAgICAgIGN1
cnJlbnQtPnJlYWRTdXJmYWNlID0gRUdMX05PX1NVUkZBQ0U7Ci0gICAgICAgICAgICB9CisgICAg
ICAgICAgICBlZ2w6OkFsbG9jYXRlQ3VycmVudCgpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFr
OwogICAgICAgY2FzZSBETExfVEhSRUFEX0RFVEFDSDoKICAgICAgICAgewotICAgICAgICAgICAg
dm9pZCAqY3VycmVudCA9IFRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOwotCi0gICAgICAgICAgICBp
ZiAoY3VycmVudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMb2NhbEZyZWUoKEhM
T0NBTCljdXJyZW50KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVnbDo6RGVhbGxvY2F0
ZUN1cnJlbnQoKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgRExMX1BS
T0NFU1NfREVUQUNIOgogICAgICAgICB7Ci0gICAgICAgICAgICB2b2lkICpjdXJyZW50ID0gVGxz
R2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICAgICAgICAgIGlmIChjdXJyZW50KQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIExvY2FsRnJlZSgoSExPQ0FMKWN1cnJlbnQpOwotICAg
ICAgICAgICAgfQotCisgICAgICAgICAgICBlZ2w6OkRlYWxsb2NhdGVDdXJyZW50KCk7CiAgICAg
ICAgICAgICBUbHNGcmVlKGN1cnJlbnRUTFMpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpA
QCAtODgsNzIgKzEwMyw4MiBAQCBleHRlcm4gIkMiIEJPT0wgV0lOQVBJIERsbE1haW4oSElOU1RB
TkNFIGluc3RhbmNlLCBEV09SRCByZWFzb24sIExQVk9JRCByZXNlcnZlZAogCiBuYW1lc3BhY2Ug
ZWdsCiB7Ci12b2lkIHNldEN1cnJlbnRFcnJvcihFR0xpbnQgZXJyb3IpCisKK0N1cnJlbnQgKkdl
dEN1cnJlbnREYXRhKCkKIHsKICAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dl
dFZhbHVlKGN1cnJlbnRUTFMpOwogCisgICAgLy8gQU5HTEUgaXNzdWUgNDg4OiB3aGVuIHRoZSBk
bGwgaXMgbG9hZGVkIGFmdGVyIHRocmVhZCBpbml0aWFsaXphdGlvbiwKKyAgICAvLyB0aHJlYWQg
bG9jYWwgc3RvcmFnZSAoY3VycmVudCkgbWlnaHQgbm90IGV4aXN0IHlldC4KKyAgICByZXR1cm4g
KGN1cnJlbnQgPyBjdXJyZW50IDogQWxsb2NhdGVDdXJyZW50KCkpOworfQorCit2b2lkIHNldEN1
cnJlbnRFcnJvcihFR0xpbnQgZXJyb3IpCit7CisgICAgQ3VycmVudCAqY3VycmVudCA9IEdldEN1
cnJlbnREYXRhKCk7CisKICAgICBjdXJyZW50LT5lcnJvciA9IGVycm9yOwogfQogCiBFR0xpbnQg
Z2V0Q3VycmVudEVycm9yKCkKIHsKLSAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRs
c0dldFZhbHVlKGN1cnJlbnRUTFMpOworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSBHZXRDdXJyZW50
RGF0YSgpOwogCiAgICAgcmV0dXJuIGN1cnJlbnQtPmVycm9yOwogfQogCiB2b2lkIHNldEN1cnJl
bnRBUEkoRUdMZW51bSBBUEkpCiB7Ci0gICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilU
bHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKyAgICBDdXJyZW50ICpjdXJyZW50ID0gR2V0Q3VycmVu
dERhdGEoKTsKIAogICAgIGN1cnJlbnQtPkFQSSA9IEFQSTsKIH0KIAogRUdMZW51bSBnZXRDdXJy
ZW50QVBJKCkKIHsKLSAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVl
KGN1cnJlbnRUTFMpOworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSBHZXRDdXJyZW50RGF0YSgpOwog
CiAgICAgcmV0dXJuIGN1cnJlbnQtPkFQSTsKIH0KIAogdm9pZCBzZXRDdXJyZW50RGlzcGxheShF
R0xEaXNwbGF5IGRweSkKIHsKLSAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dl
dFZhbHVlKGN1cnJlbnRUTFMpOworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSBHZXRDdXJyZW50RGF0
YSgpOwogCiAgICAgY3VycmVudC0+ZGlzcGxheSA9IGRweTsKIH0KIAogRUdMRGlzcGxheSBnZXRD
dXJyZW50RGlzcGxheSgpCiB7Ci0gICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNH
ZXRWYWx1ZShjdXJyZW50VExTKTsKKyAgICBDdXJyZW50ICpjdXJyZW50ID0gR2V0Q3VycmVudERh
dGEoKTsKIAogICAgIHJldHVybiBjdXJyZW50LT5kaXNwbGF5OwogfQogCiB2b2lkIHNldEN1cnJl
bnREcmF3U3VyZmFjZShFR0xTdXJmYWNlIHN1cmZhY2UpCiB7Ci0gICAgQ3VycmVudCAqY3VycmVu
dCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKyAgICBDdXJyZW50ICpjdXJy
ZW50ID0gR2V0Q3VycmVudERhdGEoKTsKIAogICAgIGN1cnJlbnQtPmRyYXdTdXJmYWNlID0gc3Vy
ZmFjZTsKIH0KIAogRUdMU3VyZmFjZSBnZXRDdXJyZW50RHJhd1N1cmZhY2UoKQogewotICAgIEN1
cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisgICAg
Q3VycmVudCAqY3VycmVudCA9IEdldEN1cnJlbnREYXRhKCk7CiAKICAgICByZXR1cm4gY3VycmVu
dC0+ZHJhd1N1cmZhY2U7CiB9CiAKIHZvaWQgc2V0Q3VycmVudFJlYWRTdXJmYWNlKEVHTFN1cmZh
Y2Ugc3VyZmFjZSkKIHsKLSAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZh
bHVlKGN1cnJlbnRUTFMpOworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSBHZXRDdXJyZW50RGF0YSgp
OwogCiAgICAgY3VycmVudC0+cmVhZFN1cmZhY2UgPSBzdXJmYWNlOwogfQogCiBFR0xTdXJmYWNl
IGdldEN1cnJlbnRSZWFkU3VyZmFjZSgpCiB7Ci0gICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJy
ZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKyAgICBDdXJyZW50ICpjdXJyZW50ID0gR2V0
Q3VycmVudERhdGEoKTsKIAogICAgIHJldHVybiBjdXJyZW50LT5yZWFkU3VyZmFjZTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29uc3RhbnRz
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnN0YW50cy5oCmlu
ZGV4IGQ5MDJkNDU2YjEyNjliMzVjN2JiMjJlNTI2Nzc1NWMwOTIyNWVmMzMuLjlmMjRkNjZhN2Rj
NzRjNjA3Zjk2MTc3ZjdlYjRmNWNlOTcyZmQzNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29uc3RhbnRzLmgKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db25zdGFudHMuaApAQCAtMSwzNCArMSwzNCBAQAotLy8N
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4NCi0vLw0KLQ0KLS8vIENvbnRhbnRzLmg6IERlZmluZXMgc29tZSBpbXBsZW1lbnRh
dGlvbiBzcGVjaWZpYyBhbmQgZ2wgY29uc3RhbnRzDQotDQotI2lmbmRlZiBMSUJHTEVTVjJfQ09O
U1RBTlRTX0hfDQotI2RlZmluZSBMSUJHTEVTVjJfQ09OU1RBTlRTX0hfDQotDQotbmFtZXNwYWNl
IGdsDQotew0KLQ0KLWVudW0NCi17DQotICAgIE1BWF9WRVJURVhfQVRUUklCUyA9IDE2LA0KLSAg
ICBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDE2LA0KLQ0KLSAgICAvLyBJbXBsZW1lbnRhdGlv
biB1cHBlciBsaW1pdHMsIHJlYWwgbWF4aW11bXMgZGVwZW5kIG9uIHRoZSBoYXJkd2FyZQ0KLSAg
ICBJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAxNiwNCi0g
ICAgSU1QTEVNRU5UQVRJT05fTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSBNQVhf
VEVYVFVSRV9JTUFHRV9VTklUUyArIElNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVSRV9J
TUFHRV9VTklUUywgICAgDQotDQotICAgIElNUExFTUVOVEFUSU9OX01BWF9WQVJZSU5HX1ZFQ1RP
UlMgPSAzMiwNCi0gICAgSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSUyA9IDgNCi19Ow0K
LQ0KLWNvbnN0IGZsb2F0IEFMSUFTRURfTElORV9XSURUSF9SQU5HRV9NSU4gPSAxLjBmOw0KLWNv
bnN0IGZsb2F0IEFMSUFTRURfTElORV9XSURUSF9SQU5HRV9NQVggPSAxLjBmOw0KLWNvbnN0IGZs
b2F0IEFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NSU4gPSAxLjBmOw0KLQ0KLX0NCi0NCi0jZW5k
aWYgLy8gTElCR0xFU1YyX0NPTlNUQU5UU19IXw0KKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBDb250YW50
cy5oOiBEZWZpbmVzIHNvbWUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgYW5kIGdsIGNvbnN0YW50
cworCisjaWZuZGVmIExJQkdMRVNWMl9DT05TVEFOVFNfSF8KKyNkZWZpbmUgTElCR0xFU1YyX0NP
TlNUQU5UU19IXworCituYW1lc3BhY2UgZ2wKK3sKKworZW51bQoreworICAgIE1BWF9WRVJURVhf
QVRUUklCUyA9IDE2LAorICAgIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTID0gMTYsCisKKyAgICAv
LyBJbXBsZW1lbnRhdGlvbiB1cHBlciBsaW1pdHMsIHJlYWwgbWF4aW11bXMgZGVwZW5kIG9uIHRo
ZSBoYXJkd2FyZQorICAgIElNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9V
TklUUyA9IDE2LAorICAgIElNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdF
X1VOSVRTID0gTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKyBJTVBMRU1FTlRBVElPTl9NQVhfVkVS
VEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICAgIAorCisgICAgSU1QTEVNRU5UQVRJT05fTUFYX1ZB
UllJTkdfVkVDVE9SUyA9IDMyLAorICAgIElNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlMg
PSA4Cit9OworCitjb25zdCBmbG9hdCBBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0VfTUlOID0gMS4w
ZjsKK2NvbnN0IGZsb2F0IEFMSUFTRURfTElORV9XSURUSF9SQU5HRV9NQVggPSAxLjBmOworY29u
c3QgZmxvYXQgQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01JTiA9IDEuMGY7CisKK30KKworI2Vu
ZGlmIC8vIExJQkdMRVNWMl9DT05TVEFOVFNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwCmluZGV4IGZiYTQxMDRkMWUxMTI5ZDM2ZjFm
ZTlkMTYyZTFkNWNkZmI5YmM5ZGIuLjZiYzRjNzZjM2Q0MWMyZWE2ZTA1MjE4YWNlNTRlMmY1MGFh
NjA5YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
Q29udGV4dC5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9D
b250ZXh0LmNwcApAQCAtMTc3OCw3ICsxNzc4LDcgQEAgdm9pZCBDb250ZXh0OjphcHBseVN0YXRl
KEdMZW51bSBkcmF3TW9kZSkKICAgICB7CiAgICAgICAgIG1hc2sgPSAweEZGRkZGRkZGOwogICAg
IH0KLSAgICBtUmVuZGVyZXItPnNldEJsZW5kU3RhdGUobVN0YXRlLmJsZW5kLCBtU3RhdGUuYmxl
bmRDb2xvciwgbWFzayk7CisgICAgbVJlbmRlcmVyLT5zZXRCbGVuZFN0YXRlKGZyYW1lYnVmZmVy
T2JqZWN0LCBtU3RhdGUuYmxlbmQsIG1TdGF0ZS5ibGVuZENvbG9yLCBtYXNrKTsKIAogICAgIG1S
ZW5kZXJlci0+c2V0RGVwdGhTdGVuY2lsU3RhdGUobVN0YXRlLmRlcHRoU3RlbmNpbCwgbVN0YXRl
LnN0ZW5jaWxSZWYsIG1TdGF0ZS5zdGVuY2lsQmFja1JlZiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1TdGF0ZS5yYXN0ZXJpemVyLmZyb250RmFjZSA9PSBHTF9DQ1cpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaAppbmRl
eCAwOWVlZGU5ZmY5NDIyMTJiZjVkMmY4MzMyY2RkOWVlMzM2OGJhMDNiLi4zZGM5NWUzYjk1MmRj
OGYwNmNiMjljNDMwM2FjYmNkYjgzY2VkZjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaApAQCAtNzMsNyArNzMsNyBAQCBlbnVtIFF1ZXJ5
VHlwZQogY2xhc3MgVmVydGV4QXR0cmlidXRlCiB7CiAgIHB1YmxpYzoKLSAgICBWZXJ0ZXhBdHRy
aWJ1dGUoKSA6IG1UeXBlKEdMX0ZMT0FUKSwgbVNpemUoMCksIG1Ob3JtYWxpemVkKGZhbHNlKSwg
bVN0cmlkZSgwKSwgbVBvaW50ZXIoTlVMTCksIG1BcnJheUVuYWJsZWQoZmFsc2UpLCBtRGl2aXNv
cigwKQorICAgIFZlcnRleEF0dHJpYnV0ZSgpIDogbVR5cGUoR0xfRkxPQVQpLCBtU2l6ZSg0KSwg
bU5vcm1hbGl6ZWQoZmFsc2UpLCBtU3RyaWRlKDApLCBtUG9pbnRlcihOVUxMKSwgbUFycmF5RW5h
YmxlZChmYWxzZSksIG1EaXZpc29yKDApCiAgICAgewogICAgICAgICBtQ3VycmVudFZhbHVlWzBd
ID0gMC4wZjsKICAgICAgICAgbUN1cnJlbnRWYWx1ZVsxXSA9IDAuMGY7CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcApp
bmRleCBlZTBlYzhlMDNmMWQ5MjgzMWVkNjViMjM2YTllNWVjYTEzYmRkMzE5Li4yNWVmYzQwOTcz
YjMzNzU0MDU5NzRjOTMzMTc0YmZmYTU1YjcxZWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5jcHAKQEAgLTE2Mjcs
OSArMTYyNywxOSBAQCBib29sIFByb2dyYW1CaW5hcnk6OmxvYWQoSW5mb0xvZyAmaW5mb0xvZywg
Y29uc3Qgdm9pZCAqYmluYXJ5LCBHTHNpemVpIGxlbmd0aCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAotICAgIGludCB2ZXJzaW9uID0gMDsKLSAgICBzdHJlYW0ucmVhZCgmdmVyc2lv
bik7Ci0gICAgaWYgKHZlcnNpb24gIT0gVkVSU0lPTl9EV09SRCkKKyAgICBpbnQgbWFqb3JWZXJz
aW9uID0gMDsKKyAgICBpbnQgbWlub3JWZXJzaW9uID0gMDsKKyAgICBzdHJlYW0ucmVhZCgmbWFq
b3JWZXJzaW9uKTsKKyAgICBzdHJlYW0ucmVhZCgmbWlub3JWZXJzaW9uKTsKKyAgICBpZiAobWFq
b3JWZXJzaW9uICE9IEFOR0xFX01BSk9SX1ZFUlNJT04gfHwgbWlub3JWZXJzaW9uICE9IEFOR0xF
X01JTk9SX1ZFUlNJT04pCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiSW52YWxpZCBw
cm9ncmFtIGJpbmFyeSB2ZXJzaW9uLiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgdW5zaWduZWQgY2hhciBjb21taXRTdHJpbmdbQU5HTEVfQ09NTUlUX0hBU0hfU0laRV07
CisgICAgc3RyZWFtLnJlYWQoY29tbWl0U3RyaW5nLCBBTkdMRV9DT01NSVRfSEFTSF9TSVpFKTsK
KyAgICBpZiAobWVtY21wKGNvbW1pdFN0cmluZywgQU5HTEVfQ09NTUlUX0hBU0gsIHNpemVvZih1
bnNpZ25lZCBjaGFyKSAqIEFOR0xFX0NPTU1JVF9IQVNIX1NJWkUpICE9IDApCiAgICAgewogICAg
ICAgICBpbmZvTG9nLmFwcGVuZCgiSW52YWxpZCBwcm9ncmFtIGJpbmFyeSB2ZXJzaW9uLiIpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNzk2LDcgKzE4MDYsOSBAQCBib29sIFByb2dyYW1C
aW5hcnk6OnNhdmUodm9pZCogYmluYXJ5LCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0
aCkKICAgICBCaW5hcnlPdXRwdXRTdHJlYW0gc3RyZWFtOwogCiAgICAgc3RyZWFtLndyaXRlKEdM
X1BST0dSQU1fQklOQVJZX0FOR0xFKTsKLSAgICBzdHJlYW0ud3JpdGUoVkVSU0lPTl9EV09SRCk7
CisgICAgc3RyZWFtLndyaXRlKEFOR0xFX01BSk9SX1ZFUlNJT04pOworICAgIHN0cmVhbS53cml0
ZShBTkdMRV9NSU5PUl9WRVJTSU9OKTsKKyAgICBzdHJlYW0ud3JpdGUoQU5HTEVfQ09NTUlUX0hB
U0gsIEFOR0xFX0NPTU1JVF9IQVNIX1NJWkUpOwogICAgIHN0cmVhbS53cml0ZShBTkdMRV9DT01Q
SUxFX09QVElNSVpBVElPTl9MRVZFTCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IE1BWF9WRVJURVhfQVRUUklCUzsgKytpKQpAQCAtMjU5Miw3ICsyNjA0LDkgQEAgc3RydWN0
IEF0dHJpYnV0ZVNvcnRlcgogCiAgICAgYm9vbCBvcGVyYXRvcigpKGludCBhLCBpbnQgYikKICAg
ICB7Ci0gICAgICAgIHJldHVybiBvcmlnaW5hbEluZGljZXNbYV0gPT0gLTEgPyBmYWxzZSA6IG9y
aWdpbmFsSW5kaWNlc1thXSA8IG9yaWdpbmFsSW5kaWNlc1tiXTsKKyAgICAgICAgaWYgKG9yaWdp
bmFsSW5kaWNlc1thXSA9PSAtMSkgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAob3JpZ2luYWxJ
bmRpY2VzW2JdID09IC0xKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIChvcmlnaW5hbElu
ZGljZXNbYV0gPCBvcmlnaW5hbEluZGljZXNbYl0pOwogICAgIH0KIAogICAgIGNvbnN0IGludCAo
Jm9yaWdpbmFsSW5kaWNlcylbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5oCmluZGV4IDg0OGQ0Yzk5YTcxMzg4MzBk
NmIyYmNlNzhhOTY3NTM1OTNmODljZTkuLjIwMTVhZGRkMTFkMjQ2YmFlNjJkNjE0YWQxMDcyMjc4
NDAzZmE2ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvU2hhZGVyLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9T
aGFkZXIuaApAQCAtMTgsNyArMTgsNyBAQAogI2luY2x1ZGUgPGxpc3Q+CiAjaW5jbHVkZSA8dmVj
dG9yPgogCi0jaW5jbHVkZSAiY29tcGlsZXIvVW5pZm9ybS5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvVW5pZm9ybS5oIgogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCiAK
IG5hbWVzcGFjZSByeApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9UZXh0dXJlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvVGV4dHVyZS5jcHAKaW5kZXggY2VlOWM1N2RhY2Y1MDhhZDJiNjhlNjhjOGQ3NzRiNmZmNDNl
NTQyYy4uM2RlZWNhZjExMmNiYmE1MDFlMTNmZTcwYzRhMDc2ZjMwOTlkZjE1NCAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwCkBAIC0x
NCw3ICsxNCw3IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKICNpbmNsdWRlICJsaWJH
TEVTdjIvbWF0aHV0aWwuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0JsaXQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9CbGl0LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9SZW5kZXJlci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwCmluZGV4IDFlN2NmOWQwY2ZhZWEzYmZlN2Q0MzYx
ZWQ1M2JlZjViYjU2ODZkOGYuLmEzMzQ4MWUxNWMxM2M0ZTkzZjY1ZmFjYzU3YTFkMGZkOWYyMWYw
NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGli
R0xFU3YyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xp
YkdMRVN2Mi5jcHAKQEAgLTM4NDQsOSArMzg0NCw5IEBAIGNvbnN0IEdMdWJ5dGUqIF9fc3RkY2Fs
bCBnbEdldFN0cmluZyhHTGVudW0gbmFtZSkKICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkVSOgog
ICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikoKGNvbnRleHQgIT0gTlVMTCkgPyBjb250ZXh0
LT5nZXRSZW5kZXJlclN0cmluZygpIDogIkFOR0xFIik7CiAgICAgICAgICAgY2FzZSBHTF9WRVJT
SU9OOgotICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikiT3BlbkdMIEVTIDIuMCAoQU5HTEUg
IiBWRVJTSU9OX1NUUklORyAiKSI7CisgICAgICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSJPcGVu
R0wgRVMgMi4wIChBTkdMRSAiIEFOR0xFX1ZFUlNJT05fU1RSSU5HICIpIjsKICAgICAgICAgICBj
YXNlIEdMX1NIQURJTkdfTEFOR1VBR0VfVkVSU0lPTjoKLSAgICAgICAgICAgIHJldHVybiAoR0x1
Ynl0ZSopIk9wZW5HTCBFUyBHTFNMIEVTIDEuMDAgKEFOR0xFICIgVkVSU0lPTl9TVFJJTkcgIiki
OworICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikiT3BlbkdMIEVTIEdMU0wgRVMgMS4wMCAo
QU5HTEUgIiBBTkdMRV9WRVJTSU9OX1NUUklORyAiKSI7CiAgICAgICAgICAgY2FzZSBHTF9FWFRF
TlNJT05TOgogICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikoKGNvbnRleHQgIT0gTlVMTCkg
PyBjb250ZXh0LT5nZXRFeHRlbnNpb25TdHJpbmcoKSA6ICIiKTsKICAgICAgICAgICBkZWZhdWx0
OgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJH
TEVTdjIuZGVmIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVT
djIuZGVmCmluZGV4IDJjZDhlY2UyYjIyYzRhYzEwNTVmNDkyZWE4NzM1Mjg0YTZlNTA2M2IuLmI4
MzIwYzhmMjU2M2I5ZWYxOTY2ZWYzYTQ0NWJjNThiNTAwOGJjZGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmRlZgorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5kZWYKQEAgLTE4Mywz
ICsxODMsNiBAQCBFWFBPUlRTCiAgICAgZ2xCaW5kVGV4SW1hZ2UgICAgICAgICAgICAgICAgICBA
MTU4IE5PTkFNRQogICAgIGdsQ3JlYXRlUmVuZGVyZXIgICAgICAgICAgICAgICAgQDE3NyBOT05B
TUUKICAgICBnbERlc3Ryb3lSZW5kZXJlciAgICAgICAgICAgICAgIEAxNzggTk9OQU1FCisKKyAg
ICA7IFNldHRpbmcgdXAgVFJBQ0UgbWFjcm8gY2FsbGJhY2tzCisgICAgU2V0VHJhY2VGdW5jdGlv
blBvaW50ZXJzICAgICAgICBAMTgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5yYyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvbGliR0xFU3YyLnJjCmluZGV4IGYxYjAxYjliNzk1OWViYzlmZjA1M2E1YWQ3
ZGE0MTNmZDY1YmJhNGUuLjRjYTMxZjk3MjFlNzk4MWViYzQxNmYxOWZkZTU0MjcwNDIyOWJhNGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xF
U3YyLnJjCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xF
U3YyLnJjCkBAIC01NCw4ICs1NCw4IEBAIEVORAogLy8NCiANCiBWU19WRVJTSU9OX0lORk8gVkVS
U0lPTklORk8NCi0gRklMRVZFUlNJT04gTUFKT1JfVkVSU0lPTixNSU5PUl9WRVJTSU9OLEJVSUxE
X1ZFUlNJT04sQlVJTERfUkVWSVNJT04NCi0gUFJPRFVDVFZFUlNJT04gTUFKT1JfVkVSU0lPTixN
SU5PUl9WRVJTSU9OLEJVSUxEX1ZFUlNJT04sQlVJTERfUkVWSVNJT04NCisgRklMRVZFUlNJT04g
QU5HTEVfTUFKT1JfVkVSU0lPTixBTkdMRV9NSU5PUl9WRVJTSU9OLDAsMA0KKyBQUk9EVUNUVkVS
U0lPTiBBTkdMRV9NQUpPUl9WRVJTSU9OLEFOR0xFX01JTk9SX1ZFUlNJT04sMCwwDQogIEZJTEVG
TEFHU01BU0sgMHgxN0wNCiAjaWZkZWYgX0RFQlVHDQogIEZJTEVGTEFHUyAweDFMDQpAQCAtNzEs
MTMgKzcxLDE0IEBAIEJFR0lOCiAgICAgICAgIEJMT0NLICIwNDA5MDRiMCINCiAgICAgICAgIEJF
R0lODQogICAgICAgICAgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJBTkdMRSBsaWJHTEVT
djIgRHluYW1pYyBMaW5rIExpYnJhcnkiDQotICAgICAgICAgICAgVkFMVUUgIkZpbGVWZXJzaW9u
IiwgVkVSU0lPTl9TVFJJTkcNCisgICAgICAgICAgICBWQUxVRSAiRmlsZVZlcnNpb24iLCBBTkdM
RV9WRVJTSU9OX1NUUklORw0KICAgICAgICAgICAgIFZBTFVFICJJbnRlcm5hbE5hbWUiLCAibGli
R0xFU3YyIg0KICAgICAgICAgICAgIFZBTFVFICJMZWdhbENvcHlyaWdodCIsICJDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4iDQogICAgICAgICAgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5h
bWUiLCAibGliR0xFU3YyLmRsbCINCi0gICAgICAgICAgICBWQUxVRSAiUHJpdmF0ZUJ1aWxkIiwg
VkVSU0lPTl9TVFJJTkcNCisgICAgICAgICAgICBWQUxVRSAiUHJpdmF0ZUJ1aWxkIiwgQU5HTEVf
VkVSU0lPTl9TVFJJTkcNCiAgICAgICAgICAgICBWQUxVRSAiUHJvZHVjdE5hbWUiLCAiQU5HTEUg
bGliR0xFU3YyIER5bmFtaWMgTGluayBMaWJyYXJ5Ig0KLSAgICAgICAgICAgIFZBTFVFICJQcm9k
dWN0VmVyc2lvbiIsIFZFUlNJT05fU1RSSU5HDQorICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3RW
ZXJzaW9uIiwgQU5HTEVfVkVSU0lPTl9TVFJJTkcNCisgICAgICAgICAgICBWQUxVRSAiQ29tbWVu
dHMiLCAiQnVpbGQgRGF0ZTogIiBBTkdMRV9DT01NSVRfREFURQ0KICAgICAgICAgRU5EDQogICAg
IEVORA0KICAgICBCTE9DSyAiVmFyRmlsZUluZm8iDQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmN4cHJvaiBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjeHByb2oKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDUyMDBlMTcwZTQ2YmVjNjU1ODY1NWNmMjhhYmE2ODAxNzhjZWNk
YjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmN4cHJvagorKysgL2Rl
di9udWxsCkBAIC0xLDQyNSArMCwwIEBACi3vu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5n
PSJ1dGYtOCI/Pg0KLTxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9u
PSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1
aWxkLzIwMDMiPg0KLSAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4N
Ci0gICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4NCi0gICAg
ICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4NCi0gICAgICA8UGxhdGZvcm0+
V2luMzI8L1BsYXRmb3JtPg0KLSAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KLSAgICA8UHJv
amVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4NCi0gICAgICA8Q29uZmlndXJh
dGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4NCi0gICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9y
bT4NCi0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCi0gICAgPFByb2plY3RDb25maWd1cmF0
aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPg0KLSAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVh
c2U8L0NvbmZpZ3VyYXRpb24+DQotICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4NCi0g
ICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCi0gICAgPFByb2plY3RDb25maWd1cmF0aW9uIElu
Y2x1ZGU9IlJlbGVhc2V8eDY0Ij4NCi0gICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25m
aWd1cmF0aW9uPg0KLSAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPg0KLSAgICA8L1Byb2pl
Y3RDb25maWd1cmF0aW9uPg0KLSAgPC9JdGVtR3JvdXA+DQotICA8UHJvcGVydHlHcm91cCBMYWJl
bD0iR2xvYmFscyI+DQotICAgIDxQcm9qZWN0R3VpZD57QjU4NzFBN0EtOTY4Qy00MkUzLUEzM0It
OTgxRTZGNDQ4RTc4fTwvUHJvamVjdEd1aWQ+DQotICAgIDxSb290TmFtZXNwYWNlPmxpYkdMRVN2
MjwvUm9vdE5hbWVzcGFjZT4NCi0gICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPg0KLSAg
PC9Qcm9wZXJ0eUdyb3VwPg0KLSAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1p
Y3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4NCi0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlv
bj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVs
PSJDb25maWd1cmF0aW9uIj4NCi0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5
PC9Db25maWd1cmF0aW9uVHlwZT4NCi0gICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0
ZXJTZXQ+DQotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFt
T3B0aW1pemF0aW9uPg0KLSAgPC9Qcm9wZXJ0eUdyb3VwPg0KLSAgPFByb3BlcnR5R3JvdXAgQ29u
ZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExh
YmVsPSJDb25maWd1cmF0aW9uIj4NCi0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJy
YXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCi0gICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFy
YWN0ZXJTZXQ+DQotICA8L1Byb3BlcnR5R3JvdXA+DQotICA8UHJvcGVydHlHcm91cCBDb25kaXRp
b249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9
IkNvbmZpZ3VyYXRpb24iPg0KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8
L0NvbmZpZ3VyYXRpb25UeXBlPg0KLSAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3Rl
clNldD4NCi0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1P
cHRpbWl6YXRpb24+DQotICA8L1Byb3BlcnR5R3JvdXA+DQotICA8UHJvcGVydHlHcm91cCBDb25k
aXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVs
PSJDb25maWd1cmF0aW9uIj4NCi0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5
PC9Db25maWd1cmF0aW9uVHlwZT4NCi0gICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0
ZXJTZXQ+DQotICA8L1Byb3BlcnR5R3JvdXA+DQotICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJn
ZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4NCi0gIDxJbXBvcnRHcm91cCBMYWJlbD0i
RXh0ZW5zaW9uU2V0dGluZ3MiPg0KLSAgPC9JbXBvcnRHcm91cD4NCi0gIDxJbXBvcnRHcm91cCBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzIn
IiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJv
b3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJl
eGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9w
cycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQotICA8L0ltcG9ydEdyb3VwPg0K
LSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nRGVidWd8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KLSAgICA8SW1wb3J0IFBy
b2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9w
cyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0
Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQotICA8
L0ltcG9ydEdyb3VwPg0KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlv
bil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0K
LSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0
Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jv
c29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxh
dGZvcm0iIC8+DQotICA8L0ltcG9ydEdyb3VwPg0KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3Bl
cnR5U2hlZXRzIj4NCi0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3Nv
ZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJS
b290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9Ikxv
Y2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KLSAgPC9JbXBvcnRHcm91cD4NCi0gIDxQcm9wZXJ0eUdy
b3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPg0KLSAgPFByb3BlcnR5R3JvdXA+DQotICAgIDxfUHJv
amVjdEZpbGVWZXJzaW9uPjEwLjAuNDAyMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4NCi0gICAg
PE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVn
fFdpbjMyJyI+JChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KLSAgICA8
SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8
V2luMzInIj4kKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPg0KLSAgICA8TGlua0luY3JlbWVudGFs
IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzIn
Ij50cnVlPC9MaW5rSW5jcmVtZW50YWw+DQotICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25m
aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JChTb2x1dGlvbkRpcikk
KENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KLSAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29u
ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiQoQ29uZmlndXJhdGlv
bilcPC9JbnREaXI+DQotICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1
cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+ZmFsc2U8L0xpbmtJbmNyZW1l
bnRhbD4NCi0gICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZv
cm0pJz09J0RlYnVnfHg2NCciPiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybSlcJChDb25maWd1cmF0
aW9uKVw8L091dERpcj4NCi0gICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p
fCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilc
PC9JbnREaXI+DQotICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj50cnVlPC9MaW5rSW5jcmVtZW50YWw+DQot
ICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdS
ZWxlYXNlfHg2NCciPiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8
L091dERpcj4NCi0gICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L0lu
dERpcj4NCi0gICAgPExpbmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p
fCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4NCi0g
ICAgPEluY2x1ZGVQYXRoIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nUmVsZWFzZXx4NjQnIj4kKEluY2x1ZGVQYXRoKTwvSW5jbHVkZVBhdGg+DQotICAgIDxMaWJy
YXJ5UGF0aCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVh
c2V8eDY0JyI+JChMaWJyYXJ5UGF0aCk8L0xpYnJhcnlQYXRoPg0KLSAgICA8SW5jbHVkZVBhdGgg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4k
KEluY2x1ZGVQYXRoKTwvSW5jbHVkZVBhdGg+DQotICAgIDxMaWJyYXJ5UGF0aCBDb25kaXRpb249
IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiQoTGlicmFyeVBh
dGgpPC9MaWJyYXJ5UGF0aD4NCi0gICAgPEluY2x1ZGVQYXRoIENvbmRpdGlvbj0iJyQoQ29uZmln
dXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4kKEluY2x1ZGVQYXRoKTwvSW5j
bHVkZVBhdGg+DQotICAgIDxJbmNsdWRlUGF0aCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p
fCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4kKEluY2x1ZGVQYXRoKTwvSW5jbHVkZVBh
dGg+DQotICAgIDxMaWJyYXJ5UGF0aCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JChMaWJyYXJ5UGF0aCk8L0xpYnJhcnlQYXRoPg0KLSAg
ICA8TGlicmFyeVBhdGggQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdSZWxlYXNlfFdpbjMyJyI+JChMaWJyYXJ5UGF0aCk8L0xpYnJhcnlQYXRoPg0KLSAgPC9Qcm9w
ZXJ0eUdyb3VwPg0KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1
cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPg0KLSAgICA8Q2xDb21waWxlPg0K
LSAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRk
aXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKFByb2plY3REaXIpOyQoUHJvamVjdERpcikvLi47
ICQoUHJvamVjdERpcikvLi4vLi4vaW5jbHVkZTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3Jp
ZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JE
ZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtMSUJHTEVTVjJfRVhQT1JU
UztfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7Tk9NSU5NQVg7JShQcmVwcm9jZXNzb3JEZWZpbml0
aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxNaW5pbWFsUmVidWlsZD50
cnVlPC9NaW5pbWFsUmVidWlsZD4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkVuYWJsZUZh
c3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8UnVudGltZUxpYnJhcnk+TXVs
dGlUaHJlYWRlZERlYnVnPC9SdW50aW1lTGlicmFyeT4NCi0gICAgICA8UHJlY29tcGlsZWRIZWFk
ZXI+VXNlPC9QcmVjb21waWxlZEhlYWRlcj4NCi0gICAgICA8V2FybmluZ0xldmVsPkxldmVsNDwv
V2FybmluZ0xldmVsPg0KLSAgICAgIDxUcmVhdFdhcm5pbmdBc0Vycm9yPnRydWU8L1RyZWF0V2Fy
bmluZ0FzRXJyb3I+DQotICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+RWRpdEFuZENvbnRp
bnVlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KLSAgICAgIDxEaXNhYmxlU3BlY2lmaWNXYXJu
aW5ncz40MTAwOzQxMjc7NDE4OTs0MjM5OzQyNDQ7NDI0NTs0NTEyOzQ3MDI7NDk5NjslKERpc2Fi
bGVTcGVjaWZpY1dhcm5pbmdzKTwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+DQotICAgICAgPFBy
ZWNvbXBpbGVkSGVhZGVyRmlsZT5wcmVjb21waWxlZC5oPC9QcmVjb21waWxlZEhlYWRlckZpbGU+
DQotICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPiQoRXh0ZXJuYWxDb21waWxlck9wdGlvbnMpICUo
QWRkaXRpb25hbE9wdGlvbnMpPC9BZGRpdGlvbmFsT3B0aW9ucz4NCi0gICAgPC9DbENvbXBpbGU+
DQotICAgIDxMaW5rPg0KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmQzZDkubGliO2R4
Z3VpZC5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2ll
cz4NCi0gICAgICA8TW9kdWxlRGVmaW5pdGlvbkZpbGU+bGliR0xFU3YyLmRlZjwvTW9kdWxlRGVm
aW5pdGlvbkZpbGU+DQotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5l
cmF0ZURlYnVnSW5mb3JtYXRpb24+DQotICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0
ZW0+DQotICAgICAgPERhdGFFeGVjdXRpb25QcmV2ZW50aW9uPg0KLSAgICAgIDwvRGF0YUV4ZWN1
dGlvblByZXZlbnRpb24+DQotICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg4NjwvVGFyZ2V0
TWFjaGluZT4NCi0gICAgPC9MaW5rPg0KLSAgICA8UG9zdEJ1aWxkRXZlbnQ+DQotICAgICAgPENv
bW1hbmQ+JTQwZWNobyBvbg0KLW1rZGlyICIkKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmln
dXJhdGlvbilcIg0KLWNvcHkgIiQoT3V0RGlyKWxpYkdMRVN2Mi5kbGwiICIkKFByb2plY3REaXIp
Li5cLi5cbGliXCQoQ29uZmlndXJhdGlvbilcIg0KLWNvcHkgIiQoT3V0RGlyKWxpYkdMRVN2Mi5s
aWIiICIkKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbilcIg0KLSU0MGVjaG8g
b2ZmDQotPC9Db21tYW5kPg0KLSAgICA8L1Bvc3RCdWlsZEV2ZW50Pg0KLSAgPC9JdGVtRGVmaW5p
dGlvbkdyb3VwPg0KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1
cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+DQotICAgIDxDbENvbXBpbGU+
DQotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxJ
bmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5BbnlTdWl0YWJsZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNp
b24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChQcm9qZWN0RGlyKTsk
KFByb2plY3REaXIpLy4uOyAkKFByb2plY3REaXIpLy4uLy4uL2luY2x1ZGU7JShBZGRpdGlvbmFs
SW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAg
ICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+QU5HTEVfRElTQUJMRV9UUkFDRTtXSU4zMjtOREVC
VUc7X1dJTkRPV1M7X1VTUkRMTDtMSUJHTEVTVjJfRVhQT1JUUztfQ1JUX1NFQ1VSRV9OT19ERVBS
RUNBVEU7Tk9NSU5NQVg7X1NFQ1VSRV9TQ0w9MDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwv
UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhy
ZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5Pg0KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlcj5Vc2U8L1By
ZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWw0PC9XYXJuaW5nTGV2
ZWw+DQotICAgICAgPFRyZWF0V2FybmluZ0FzRXJyb3I+dHJ1ZTwvVHJlYXRXYXJuaW5nQXNFcnJv
cj4NCi0gICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVn
SW5mb3JtYXRpb25Gb3JtYXQ+DQotICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzPjQxMDA7
NDEyNzs0MTg5OzQyMzk7NDI0NDs0MjQ1OzQ1MTI7NDcwMjs0NzE4OzQ5OTY7JShEaXNhYmxlU3Bl
Y2lmaWNXYXJuaW5ncyk8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPg0KLSAgICAgIDxQcmVjb21w
aWxlZEhlYWRlckZpbGU+cHJlY29tcGlsZWQuaDwvUHJlY29tcGlsZWRIZWFkZXJGaWxlPg0KLSAg
ICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4kKEV4dGVybmFsQ29tcGlsZXJPcHRpb25zKSAlKEFkZGl0
aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlvbnM+DQotICAgIDwvQ2xDb21waWxlPg0KLSAg
ICA8TGluaz4NCi0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5kM2Q5LmxpYjtkeGd1aWQu
bGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQot
ICAgICAgPElnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM+ZmFsc2U8L0lnbm9yZUFsbERlZmF1bHRM
aWJyYXJpZXM+DQotICAgICAgPE1vZHVsZURlZmluaXRpb25GaWxlPmxpYkdMRVN2Mi5kZWY8L01v
ZHVsZURlZmluaXRpb25GaWxlPg0KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1
ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPg0KLSAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwv
U3ViU3lzdGVtPg0KLSAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZl
cmVuY2VzPg0KLSAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZv
bGRpbmc+DQotICAgICAgPERhdGFFeGVjdXRpb25QcmV2ZW50aW9uPg0KLSAgICAgIDwvRGF0YUV4
ZWN1dGlvblByZXZlbnRpb24+DQotICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg4NjwvVGFy
Z2V0TWFjaGluZT4NCi0gICAgPC9MaW5rPg0KLSAgICA8UG9zdEJ1aWxkRXZlbnQ+DQotICAgICAg
PENvbW1hbmQ+JTQwZWNobyBvbg0KLW1rZGlyICIkKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29u
ZmlndXJhdGlvbilcIg0KLWNvcHkgIiQoT3V0RGlyKWxpYkdMRVN2Mi5kbGwiICIkKFByb2plY3RE
aXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbilcIg0KLWNvcHkgIiQoT3V0RGlyKWxpYkdMRVN2
Mi5saWIiICIkKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbilcIg0KLSU0MGVj
aG8gb2ZmDQotPC9Db21tYW5kPg0KLSAgICA8L1Bvc3RCdWlsZEV2ZW50Pg0KLSAgPC9JdGVtRGVm
aW5pdGlvbkdyb3VwPg0KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25m
aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4NCi0gICAgPE1pZGw+DQotICAg
ICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+DQotICAgIDwvTWlk
bD4NCi0gICAgPENsQ29tcGlsZT4NCi0gICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRp
bWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChQcm9qZWN0
RGlyKS8uLjsgJChQcm9qZWN0RGlyKS8uLi8uLi9pbmNsdWRlOyUoQWRkaXRpb25hbEluY2x1ZGVE
aXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXBy
b2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMO0xJQkdMRVNW
Ml9FWFBPUlRTO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWDslKFByZXByb2Nlc3Nv
ckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPE1pbmltYWxS
ZWJ1aWxkPnRydWU8L01pbmltYWxSZWJ1aWxkPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+
RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxSdW50aW1lTGli
cmFyeT5NdWx0aVRocmVhZGVkRGVidWc8L1J1bnRpbWVMaWJyYXJ5Pg0KLSAgICAgIDxQcmVjb21w
aWxlZEhlYWRlcj5Vc2U8L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDxXYXJuaW5nTGV2ZWw+
TGV2ZWw0PC9XYXJuaW5nTGV2ZWw+DQotICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzPjQx
MDA7NDEyNzs0MTg5OzQyMzk7NDI0NDs0MjQ1OzQ1MTI7NDcwMjs0NzE4OzQ5OTY7JShEaXNhYmxl
U3BlY2lmaWNXYXJuaW5ncyk8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPg0KLSAgICAgIDxEZWJ1
Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1h
dD4NCi0gICAgICA8VHJlYXRXYXJuaW5nQXNFcnJvcj50cnVlPC9UcmVhdFdhcm5pbmdBc0Vycm9y
Pg0KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlckZpbGU+cHJlY29tcGlsZWQuaDwvUHJlY29tcGls
ZWRIZWFkZXJGaWxlPg0KLSAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4kKEV4dGVybmFsQ29tcGls
ZXJPcHRpb25zKSAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlvbnM+DQotICAg
IDwvQ2xDb21waWxlPg0KLSAgICA8TGluaz4NCi0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2ll
cz5kM2Q5LmxpYjtkeGd1aWQubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9u
YWxEZXBlbmRlbmNpZXM+DQotICAgICAgPE1vZHVsZURlZmluaXRpb25GaWxlPmxpYkdMRVN2Mi5k
ZWY8L01vZHVsZURlZmluaXRpb25GaWxlPg0KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRp
b24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPg0KLSAgICAgIDxTdWJTeXN0ZW0+V2lu
ZG93czwvU3ViU3lzdGVtPg0KLSAgICAgIDxEYXRhRXhlY3V0aW9uUHJldmVudGlvbj4NCi0gICAg
ICA8L0RhdGFFeGVjdXRpb25QcmV2ZW50aW9uPg0KLSAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hp
bmVYNjQ8L1RhcmdldE1hY2hpbmU+DQotICAgIDwvTGluaz4NCi0gICAgPFBvc3RCdWlsZEV2ZW50
Pg0KLSAgICAgIDxDb21tYW5kPiU0MGVjaG8gb24NCi1ta2RpciAiJChQcm9qZWN0RGlyKS4uXC4u
XGxpYlwkKENvbmZpZ3VyYXRpb24pXCINCi1jb3B5ICIkKE91dERpcilsaWJHTEVTdjIuZGxsIiAi
JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb24pXCINCi1jb3B5ICIkKE91dERp
cilsaWJHTEVTdjIubGliIiAiJChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb24p
XCINCi0lNDBlY2hvIG9mZg0KLTwvQ29tbWFuZD4NCi0gICAgPC9Qb3N0QnVpbGRFdmVudD4NCi0g
IDwvSXRlbURlZmluaXRpb25Hcm91cD4NCi0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlv
bj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4NCi0gICAg
PE1pZGw+DQotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+
DQotICAgIDwvTWlkbD4NCi0gICAgPENsQ29tcGlsZT4NCi0gICAgICA8T3B0aW1pemF0aW9uPk1h
eFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPkFu
eVN1aXRhYmxlPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCi0gICAgICA8QWRkaXRpb25hbElu
Y2x1ZGVEaXJlY3Rvcmllcz4kKFByb2plY3REaXIpLy4uOyAkKFByb2plY3REaXIpLy4uLy4uL2lu
Y2x1ZGU7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVE
aXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVH
O19XSU5ET1dTO19VU1JETEw7TElCR0xFU1YyX0VYUE9SVFM7X0NSVF9TRUNVUkVfTk9fREVQUkVD
QVRFO05PTUlOTUFYO19TRUNVUkVfU0NMPTA7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1By
ZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVh
ZGVkPC9SdW50aW1lTGlicmFyeT4NCi0gICAgICA8UHJlY29tcGlsZWRIZWFkZXI+VXNlPC9QcmVj
b21waWxlZEhlYWRlcj4NCi0gICAgICA8V2FybmluZ0xldmVsPkxldmVsNDwvV2FybmluZ0xldmVs
Pg0KLSAgICAgIDxEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz40MTAwOzQxMjc7NDE4OTs0MjM5OzQy
NDQ7NDI0NTs0NTEyOzQ3MDI7NDcxODs0OTk2OyUoRGlzYWJsZVNwZWNpZmljV2FybmluZ3MpPC9E
aXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4NCi0gICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Q
cm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQotICAgICAgPFRyZWF0V2Fy
bmluZ0FzRXJyb3I+dHJ1ZTwvVHJlYXRXYXJuaW5nQXNFcnJvcj4NCi0gICAgICA8UHJlY29tcGls
ZWRIZWFkZXJGaWxlPnByZWNvbXBpbGVkLmg8L1ByZWNvbXBpbGVkSGVhZGVyRmlsZT4NCi0gICAg
ICA8QWRkaXRpb25hbE9wdGlvbnM+JChFeHRlcm5hbENvbXBpbGVyT3B0aW9ucykgJShBZGRpdGlv
bmFsT3B0aW9ucyk8L0FkZGl0aW9uYWxPcHRpb25zPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAg
PExpbms+DQotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+ZDNkOS5saWI7ZHhndWlkLmxp
YjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPg0KLSAg
ICAgIDxJZ25vcmVBbGxEZWZhdWx0TGlicmFyaWVzPmZhbHNlPC9JZ25vcmVBbGxEZWZhdWx0TGli
cmFyaWVzPg0KLSAgICAgIDxNb2R1bGVEZWZpbml0aW9uRmlsZT5saWJHTEVTdjIuZGVmPC9Nb2R1
bGVEZWZpbml0aW9uRmlsZT4NCi0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8
L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4NCi0gICAgICA8U3ViU3lzdGVtPldpbmRvd3M8L1N1
YlN5c3RlbT4NCi0gICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJl
bmNlcz4NCi0gICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xk
aW5nPg0KLSAgICAgIDxEYXRhRXhlY3V0aW9uUHJldmVudGlvbj4NCi0gICAgICA8L0RhdGFFeGVj
dXRpb25QcmV2ZW50aW9uPg0KLSAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYNjQ8L1Rhcmdl
dE1hY2hpbmU+DQotICAgIDwvTGluaz4NCi0gICAgPFBvc3RCdWlsZEV2ZW50Pg0KLSAgICAgIDxD
b21tYW5kPiU0MGVjaG8gb24NCi1ta2RpciAiJChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZp
Z3VyYXRpb24pXCINCi1jb3B5ICIkKE91dERpcilsaWJHTEVTdjIuZGxsIiAiJChQcm9qZWN0RGly
KS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb24pXCINCi1jb3B5ICIkKE91dERpcilsaWJHTEVTdjIu
bGliIiAiJChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb24pXCINCi0lNDBlY2hv
IG9mZg0KLTwvQ29tbWFuZD4NCi0gICAgPC9Qb3N0QnVpbGRFdmVudD4NCi0gIDwvSXRlbURlZmlu
aXRpb25Hcm91cD4NCi0gIDxJdGVtR3JvdXA+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
dGhpcmRfcGFydHlcbXVybXVyaGFzaFxNdXJtdXJIYXNoMy5jcHAiPg0KLSAgICAgIDxQcmVjb21w
aWxlZEhlYWRlciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0Rl
YnVnfFdpbjMyJyI+Tm90VXNpbmc8L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDxQcmVjb21w
aWxlZEhlYWRlciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Jl
bGVhc2V8V2luMzInIj5Ob3RVc2luZzwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAgICAgPFByZWNv
bXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n
RGVidWd8eDY0JyI+Tm90VXNpbmc8L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDxQcmVjb21w
aWxlZEhlYWRlciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Jl
bGVhc2V8eDY0JyI+Tm90VXNpbmc8L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICA8L0NsQ29tcGls
ZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJCdWZmZXIuY3BwIiAvPg0KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9IkNvbnRleHQuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGNvbW1vblxkZWJ1Zy5jcHAiPg0KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlciBDb25kaXRpb249
IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+Tm90VXNpbmc8
L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlciBDb25kaXRpb249
IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5Ob3RVc2lu
ZzwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlv
bj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+Tm90VXNpbmc8
L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlciBDb25kaXRpb249
IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+Tm90VXNpbmc8
L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxjb21tb25cZXZlbnRfdHJhY2VyLmNwcCI+DQotICAgICAgPFByZWNvbXBpbGVk
SGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8
V2luMzInIj5Ob3RVc2luZzwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAgICAgPFByZWNvbXBpbGVk
SGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFz
ZXxXaW4zMiciPk5vdFVzaW5nPC9QcmVjb21waWxlZEhlYWRlcj4NCi0gICAgICA8UHJlY29tcGls
ZWRIZWFkZXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1
Z3x4NjQnIj5Ob3RVc2luZzwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAgICAgPFByZWNvbXBpbGVk
SGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFz
ZXx4NjQnIj5Ob3RVc2luZzwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAgIDwvQ2xDb21waWxlPg0K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkZlbmNlLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSJGbG9hdDE2VG9GbG9hdDMyLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSJGcmFtZWJ1ZmZlci5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iSGFuZGxlQWxs
b2NhdG9yLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJsaWJHTEVTdjIuY3BwIiAv
Pg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Im1haW4uY3BwIiAvPg0KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9InByZWNvbXBpbGVkLmNwcCI+DQotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5D
cmVhdGU8L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlciBDb25k
aXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5D
cmVhdGU8L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlciBDb25k
aXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkNyZWF0
ZTwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlv
bj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5DcmVhdGU8
L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSJQcm9ncmFtLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJQcm9ncmFt
QmluYXJ5LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJRdWVyeS5jcHAiIC8+DQot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cY29tbW9uXFJlZkNvdW50T2JqZWN0LmNwcCIgLz4N
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJSZW5kZXJidWZmZXIuY3BwIiAvPg0KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9InJlbmRlcmVyXEJsaXQuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9InJlbmRlcmVyXEZlbmNlMTEuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
InJlbmRlcmVyXEZlbmNlOS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVy
ZXJcQnVmZmVyU3RvcmFnZS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVy
ZXJcQnVmZmVyU3RvcmFnZTExLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5k
ZXJlclxCdWZmZXJTdG9yYWdlOS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVu
ZGVyZXJcSW1hZ2UuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXElt
YWdlOS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcSW5kZXhCdWZm
ZXIuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXEluZGV4QnVmZmVy
MTEuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXEluZGV4QnVmZmVy
OS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcSW5kZXhEYXRhTWFu
YWdlci5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcSW1hZ2VTU0Uy
LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxJbWFnZTExLmNwcCIg
Lz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxJbmRleFJhbmdlQ2FjaGUuY3Bw
IiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXElucHV0TGF5b3V0Q2FjaGUu
Y3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFF1ZXJ5MTEuY3BwIiAv
Pg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFF1ZXJ5OS5jcHAiIC8+DQotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcUmVuZGVyZXIuY3BwIiAvPg0KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFJlbmRlcmVyMTEuY3BwIiAvPg0KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9InJlbmRlcmVyXHJlbmRlcmVyMTFfdXRpbHMuY3BwIiAvPg0KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFJlbmRlcmVyOS5jcHAiIC8+DQotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0icmVuZGVyZXJccmVuZGVyZXI5X3V0aWxzLmNwcCIgLz4NCi0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSJyZW5kZXJlclxSZW5kZXJUYXJnZXQxMS5jcHAiIC8+DQotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcUmVuZGVyVGFyZ2V0OS5jcHAiIC8+DQotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcUmVuZGVyU3RhdGVDYWNoZS5jcHAiIC8+DQotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcU2hhZGVyRXhlY3V0YWJsZTExLmNwcCIgLz4NCi0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxTaGFkZXJFeGVjdXRhYmxlOS5jcHAiIC8+
DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcU3dhcENoYWluMTEuY3BwIiAvPg0K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFN3YXBDaGFpbjkuY3BwIiAvPg0KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFRleHR1cmVTdG9yYWdlLmNwcCIgLz4NCi0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxUZXh0dXJlU3RvcmFnZTExLmNwcCIgLz4N
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxUZXh0dXJlU3RvcmFnZTkuY3BwIiAv
Pg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFZlcnRleEJ1ZmZlci5jcHAiIC8+
DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcVmVydGV4QnVmZmVyMTEuY3BwIiAv
Pg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFZlcnRleEJ1ZmZlcjkuY3BwIiAv
Pg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFZlcnRleERhdGFNYW5hZ2VyLmNw
cCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxWZXJ0ZXhEZWNsYXJhdGlv
bkNhY2hlLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJSZXNvdXJjZU1hbmFnZXIu
Y3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlNoYWRlci5jcHAiIC8+DQotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iVGV4dHVyZS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iVW5pZm9ybS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0idXRpbGl0aWVzLmNw
cCIgLz4NCi0gIDwvSXRlbUdyb3VwPg0KLSAgPEl0ZW1Hcm91cD4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxjb21tb25cZGVidWcuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
Llxjb21tb25cZXZlbnRfdHJhY2VyLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Y29tbW9uXHN5c3RlbS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHRoaXJkX3Bh
cnR5XG11cm11cmhhc2hcTXVybXVySGFzaDMuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlx0aGlyZF9wYXJ0eVx0cmFjZV9ldmVudFx0cmFjZV9ldmVudC5oIiAvPg0KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9ImFuZ2xldHlwZXMuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSJCaW5hcnlTdHJlYW0uaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJCdWZmZXIuaCIg
Lz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJjb25zdGFudHMuaCIgLz4NCi0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSJDb250ZXh0LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iRmVu
Y2UuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJGcmFtZWJ1ZmZlci5oIiAvPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcR0xFUzJcZ2wyLmgiIC8+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxHTEVTMlxnbDJleHQuaCIgLz4NCi0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXEdMRVMyXGdsMnBsYXRmb3JtLmgi
IC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iSGFuZGxlQWxsb2NhdG9yLmgiIC8+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0ibWFpbi5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Im1hdGh1dGlsLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icHJlY29tcGlsZWQuaCIg
Lz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJQcm9ncmFtLmgiIC8+DQotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iUHJvZ3JhbUJpbmFyeS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
IlF1ZXJ5LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cY29tbW9uXFJlZkNvdW50
T2JqZWN0LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iUmVuZGVyYnVmZmVyLmgiIC8+
DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcQmxpdC5oIiAvPg0KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEZlbmNlMTEuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSJyZW5kZXJlclxGZW5jZTkuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJy
ZW5kZXJlclxGZW5jZUltcGwuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJl
clxCdWZmZXJTdG9yYWdlLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJc
QnVmZmVyU3RvcmFnZTExLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJc
QnVmZmVyU3RvcmFnZTkuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxn
ZW5lcmF0ZW1pcC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEltYWdl
LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcSW1hZ2UxMS5oIiAvPg0K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEltYWdlOS5oIiAvPg0KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEluZGV4QnVmZmVyLmgiIC8+DQotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0icmVuZGVyZXJcSW5kZXhCdWZmZXIxMS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9InJlbmRlcmVyXEluZGV4QnVmZmVyOS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9InJlbmRlcmVyXEluZGV4RGF0YU1hbmFnZXIuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSJyZW5kZXJlclxJbmRleFJhbmdlQ2FjaGUuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSJyZW5kZXJlclxJbnB1dExheW91dENhY2hlLmgiIC8+DQotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0icmVuZGVyZXJcUXVlcnkxMS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
InJlbmRlcmVyXFF1ZXJ5SW1wbC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRl
cmVyXFF1ZXJ5OS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFJlbmRl
cmVyLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcUmVuZGVyZXIxMS5o
IiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXHJlbmRlcmVyMTFfdXRpbHMu
aCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxSZW5kZXJlcjkuaCIgLz4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxyZW5kZXJlcjlfdXRpbHMuaCIgLz4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxSZW5kZXJUYXJnZXQuaCIgLz4NCi0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxSZW5kZXJUYXJnZXQxMS5oIiAvPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFJlbmRlclRhcmdldDkuaCIgLz4NCi0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxSZW5kZXJTdGF0ZUNhY2hlLmgiIC8+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcU2hhZGVyQ2FjaGUuaCIgLz4NCi0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxTaGFkZXJFeGVjdXRhYmxlLmgiIC8+DQotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcU2hhZGVyRXhlY3V0YWJsZTExLmgiIC8+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcU2hhZGVyRXhlY3V0YWJsZTkuaCIgLz4NCi0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVkXGNsZWFyMTF2
cy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXHNoYWRlcnNcY29tcGls
ZWRcY2xlYXJtdWx0aXBsZTExcHMuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5k
ZXJlclxzaGFkZXJzXGNvbXBpbGVkXGNsZWFyc2luZ2xlMTFwcy5oIiAvPg0KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9InJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRcY29tcG9uZW50bWFza3BzLmgi
IC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xjb21waWxlZFxm
bGlweXZzLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xj
b21waWxlZFxsdW1pbmFuY2Vwcy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRl
cmVyXHNoYWRlcnNcY29tcGlsZWRccGFzc3Rocm91Z2gxMXZzLmgiIC8+DQotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xjb21waWxlZFxwYXNzdGhyb3VnaGx1bTExcHMu
aCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVk
XHBhc3N0aHJvdWdobHVtYWxwaGExMXBzLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
cmVuZGVyZXJcc2hhZGVyc1xjb21waWxlZFxwYXNzdGhyb3VnaHBzLmgiIC8+DQotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xjb21waWxlZFxwYXNzdGhyb3VnaHJnYjEx
cHMuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXGNvbXBp
bGVkXHBhc3N0aHJvdWdocmdiYTExcHMuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJy
ZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVkXHN0YW5kYXJkdnMuaCIgLz4NCi0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSJyZW5kZXJlclxTd2FwQ2hhaW4uaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSJyZW5kZXJlclxTd2FwQ2hhaW4xMS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
InJlbmRlcmVyXFN3YXBDaGFpbjkuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5k
ZXJlclxUZXh0dXJlU3RvcmFnZS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRl
cmVyXFRleHR1cmVTdG9yYWdlMTEuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5k
ZXJlclxUZXh0dXJlU3RvcmFnZTkuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5k
ZXJlclxWZXJ0ZXhCdWZmZXIuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJl
clxWZXJ0ZXhCdWZmZXIxMS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVy
XFZlcnRleEJ1ZmZlcjkuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclx2
ZXJ0ZXhjb252ZXJzaW9uLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJc
VmVydGV4RGF0YU1hbmFnZXIuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJl
clxWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
cmVzb3VyY2UuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJSZXNvdXJjZU1hbmFnZXIu
aCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJTaGFkZXIuaCIgLz4NCi0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSJUZXh0dXJlLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iVW5p
Zm9ybS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InV0aWxpdGllcy5oIiAvPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGNvbW1vblx2ZXJzaW9uLmgiIC8+DQotICA8L0l0ZW1H
cm91cD4NCi0gIDxJdGVtR3JvdXA+DQotICAgIDxOb25lIEluY2x1ZGU9ImxpYkdMRVN2Mi5kZWYi
IC8+DQotICAgIDxOb25lIEluY2x1ZGU9InJlbmRlcmVyXHNoYWRlcnNcQmxpdC5wcyIgLz4NCi0g
ICAgPE5vbmUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xCbGl0LnZzIiAvPg0KLSAgICA8Tm9u
ZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXENsZWFyMTEuaGxzbCIgLz4NCi0gICAgPE5vbmUg
SW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xnZW5lcmF0ZV9zaGFkZXJzLmJhdCIgLz4NCi0gICAg
PE5vbmUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xQYXNzdGhyb3VnaDExLmhsc2wiIC8+DQot
ICA8L0l0ZW1Hcm91cD4NCi0gIDxJdGVtR3JvdXA+DQotICAgIDxSZXNvdXJjZUNvbXBpbGUgSW5j
bHVkZT0ibGliR0xFU3YyLnJjIiAvPg0KLSAgPC9JdGVtR3JvdXA+DQotICA8SXRlbUdyb3VwPg0K
LSAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSIuLlxjb21waWxlclxwcmVwcm9jZXNzb3Jc
cHJlcHJvY2Vzc29yLnZjeHByb2oiPg0KLSAgICAgIDxQcm9qZWN0PntmYmUzMmRmMy0wZmIwLTRm
MmYtYTQyNC0yYzIxYmQ3YmMzMjV9PC9Qcm9qZWN0Pg0KLSAgICA8L1Byb2plY3RSZWZlcmVuY2U+
DQotICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Ii4uXGNvbXBpbGVyXHRyYW5zbGF0b3Iu
dmN4cHJvaiI+DQotICAgICAgPFByb2plY3Q+ezViM2E2ZGI4LTFlN2UtNDBkNy05MmI5LWRhOGFh
ZTYxOWZhZH08L1Byb2plY3Q+DQotICAgIDwvUHJvamVjdFJlZmVyZW5jZT4NCi0gIDwvSXRlbUdy
b3VwPg0KLSAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAu
dGFyZ2V0cyIgLz4NCi0gIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+DQot
ICA8L0ltcG9ydEdyb3VwPg0KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdM
RVN2Mi52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL2xpYkdMRVN2Mi52Y3hwcm9qLmZpbHRlcnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGEyMjliYWYxMjRlMWU5ZWY1MzhhMjVmMzM2YzZlZmY1M2E4ZTU1OGUuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmN4cHJvai5maWx0ZXJzCisrKyAvZGV2L251bGwK
QEAgLTEsNTI3ICswLDAgQEAKLe+7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04
Ij8+DQotPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5t
aWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPg0KLSAgPEl0ZW1Hcm91cD4NCi0g
ICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXMiPg0KLSAgICAgIDxVbmlxdWVJZGVudGlm
aWVyPns0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9PC9VbmlxdWVJZGVudGlm
aWVyPg0KLSAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0
O2FzbTthc214PC9FeHRlbnNpb25zPg0KLSAgICA8L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJbmNs
dWRlPSJIZWFkZXIgRmlsZXMiPg0KLSAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns5Mzk5NTM4MC04
OUJELTRiMDQtODhFQi02MjVGQkU1MkVCRkJ9PC9VbmlxdWVJZGVudGlmaWVyPg0KLSAgICAgIDxF
eHRlbnNpb25zPmg7aHBwO2h4eDtobTtpbmw7aW5jO3hzZDwvRXh0ZW5zaW9ucz4NCi0gICAgPC9G
aWx0ZXI+DQotICAgIDxGaWx0ZXIgSW5jbHVkZT0iVGhpcmQgUGFydHkiPg0KLSAgICAgIDxVbmlx
dWVJZGVudGlmaWVyPntkYzFkYWM0MC0zNTYzLTQxYmUtOWUyZC1jMjU4OGQ4NjcwZmJ9PC9Vbmlx
dWVJZGVudGlmaWVyPg0KLSAgICA8L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJbmNsdWRlPSJUaGly
ZCBQYXJ0eVxNdXJtdXJIYXNoIj4NCi0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57YjAwMDVkMmYt
OWI0YS00NjU5LWEyNzAtMTM4ODExMTc0ZjczfTwvVW5pcXVlSWRlbnRpZmllcj4NCi0gICAgPC9G
aWx0ZXI+DQotICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzXFJlbmRlcmVyIj4NCi0g
ICAgICA8VW5pcXVlSWRlbnRpZmllcj57NTYyZTQ2OWQtMWFiYi00NGJjLWI3ZmEtNTVlZWZiZjc1
YWNjfTwvVW5pcXVlSWRlbnRpZmllcj4NCi0gICAgPC9GaWx0ZXI+DQotICAgIDxGaWx0ZXIgSW5j
bHVkZT0iU2hhZGVycyI+DQotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezZkYzAzMDZmLTYzOTYt
NGU4MC05ZWY5LTA5YjU4YWE1M2M0ZH08L1VuaXF1ZUlkZW50aWZpZXI+DQotICAgIDwvRmlsdGVy
Pg0KLSAgICA8RmlsdGVyIEluY2x1ZGU9IlNoYWRlcnNcQ29tcGlsZWQiPg0KLSAgICAgIDxVbmlx
dWVJZGVudGlmaWVyPns2MzMyNzA1Yi0xOTk5LTQyOTItYTM4Yi1kZDQ3MzI5NzM0YWF9PC9Vbmlx
dWVJZGVudGlmaWVyPg0KLSAgICA8L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJbmNsdWRlPSJTb3Vy
Y2UgRmlsZXNcUmVuZGVyZXIiPg0KLSAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns5M2E3Njk2NC03
N2EzLTRiMjAtYTZmNS1lMTRlNzYyZDRlMTR9PC9VbmlxdWVJZGVudGlmaWVyPg0KLSAgICA8L0Zp
bHRlcj4NCi0gICAgPEZpbHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXNcUmVuZGVyZXI5Ij4NCi0g
ICAgICA8VW5pcXVlSWRlbnRpZmllcj57Mzg3N2YzNWUtODQ1Yy00ZTk1LWI5YTUtYzdkOGI5ZjMw
N2M1fTwvVW5pcXVlSWRlbnRpZmllcj4NCi0gICAgPC9GaWx0ZXI+DQotICAgIDxGaWx0ZXIgSW5j
bHVkZT0iSGVhZGVyIEZpbGVzXFJlbmRlcmVyMTEiPg0KLSAgICAgIDxVbmlxdWVJZGVudGlmaWVy
PnsyZDcwZmQ2MC02ZGVhLTQ4OWYtYWMwOS0xNjg5MGQzMjU2Njl9PC9VbmlxdWVJZGVudGlmaWVy
Pg0KLSAgICA8L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXNcUmVu
ZGVyZXI5Ij4NCi0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57NjBlMTRmMDQtMmNmMi00YTA3LWIz
ZWYtN2M2OGE4MmJhMmQ5fTwvVW5pcXVlSWRlbnRpZmllcj4NCi0gICAgPC9GaWx0ZXI+DQotICAg
IDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzXFJlbmRlcmVyMTEiPg0KLSAgICAgIDxVbmlx
dWVJZGVudGlmaWVyPns3MmRiNjFkMy1lMDgxLTRiNTgtYmM2My1hMDRhOGE3MDU4NWZ9PC9Vbmlx
dWVJZGVudGlmaWVyPg0KLSAgICA8L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJbmNsdWRlPSJUaGly
ZCBQYXJ0eVx0cmFjZV9ldmVudCI+DQotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+e2ViZmMxNjE0
LThmMGItNDhjNy1iNmJkLTI5NWJmOTFlZjg1Y308L1VuaXF1ZUlkZW50aWZpZXI+DQotICAgIDwv
RmlsdGVyPg0KLSAgPC9JdGVtR3JvdXA+DQotICA8SXRlbUdyb3VwPg0KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9IkJ1ZmZlci5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0
ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkNvbnRleHQu
Y3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29t
cGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxjb21tb25cZGVidWcuY3BwIj4NCi0g
ICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSJGZW5jZS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNl
IEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9IkZsb2F0MTZUb0Zsb2F0MzIuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwv
RmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJGcmFt
ZWJ1ZmZlci5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAg
IDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkhhbmRsZUFsbG9jYXRvci5j
cHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21w
aWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImxpYkdMRVN2Mi5jcHAiPg0KLSAgICAgIDxG
aWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Im1haW4uY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwv
RmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJQcm9n
cmFtLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9D
bENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iUHJvZ3JhbUJpbmFyeS5jcHAiPg0K
LSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlF1ZXJ5LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3Vy
Y2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cY29tbW9uXFJlZkNvdW50T2JqZWN0LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3Vy
Y2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iUmVuZGVyYnVmZmVyLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0Zp
bHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iUmVzb3Vy
Y2VNYW5hZ2VyLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0g
ICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iU2hhZGVyLmNwcCI+DQot
ICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iVGV4dHVyZS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291
cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9InV0aWxpdGllcy5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0
ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVy
XEltYWdlLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI8L0ZpbHRl
cj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJc
VGV4dHVyZVN0b3JhZ2UuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJl
cjwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJy
ZW5kZXJlclxSZW5kZXJlci5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRl
cmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHRoaXJkX3BhcnR5XG11cm11cmhhc2hcTXVybXVySGFzaDMuY3BwIj4NCi0gICAgICA8Rmls
dGVyPlRoaXJkIFBhcnR5XE11cm11ckhhc2g8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcSW5kZXhEYXRhTWFuYWdlci5jcHAiPg0K
LSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xD
b21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFZlcnRleERhdGFNYW5h
Z2VyLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI8L0ZpbHRlcj4N
Ci0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcSW1h
Z2UuY3BwIj4NCi0gICAgICA8RmlsdGVyPlJlbmRlcmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21w
aWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXEltYWdlU1NFMi5jcHAiPg0K
LSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xD
b21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFZlcnRleEJ1ZmZlci5j
cHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAg
IDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXEluZGV4QnVm
ZmVyLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI8L0ZpbHRlcj4N
Ci0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iVW5pZm9ybS5jcHAi
Pg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxl
Pg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXEJ1ZmZlclN0b3JhZ2UuY3BwIj4N
Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjwvRmlsdGVyPg0KLSAgICA8L0Ns
Q29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxCdWZmZXJTdG9yYWdl
MTEuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+
DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXEZl
bmNlMTEuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjExPC9GaWx0
ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVy
XEltYWdlMTEuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjExPC9G
aWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRl
cmVyXEluZGV4QnVmZmVyMTEuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5k
ZXJlcjExPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9InJlbmRlcmVyXFF1ZXJ5MTEuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xS
ZW5kZXJlcjExPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9InJlbmRlcmVyXFJlbmRlcmVyMTEuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBG
aWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9InJlbmRlcmVyXHJlbmRlcmVyMTFfdXRpbHMuY3BwIj4NCi0gICAgICA8Rmls
dGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFJlbmRlclRhcmdldDExLmNwcCI+DQot
ICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPg0KLSAgICA8L0Ns
Q29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxTaGFkZXJFeGVjdXRh
YmxlMTEuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjExPC9GaWx0
ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVy
XFN3YXBDaGFpbjExLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIx
MTwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJy
ZW5kZXJlclxUZXh0dXJlU3RvcmFnZTExLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmls
ZXNcUmVuZGVyZXIxMTwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSJyZW5kZXJlclxWZXJ0ZXhCdWZmZXIxMS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+
U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcQnVmZmVyU3RvcmFnZTkuY3BwIj4NCi0gICAg
ICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBp
bGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcRmVuY2U5LmNwcCI+DQotICAg
ICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xDb21w
aWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXEltYWdlOS5jcHAiPg0KLSAg
ICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPg0KLSAgICA8L0NsQ29t
cGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxJbmRleEJ1ZmZlcjkuY3Bw
Ij4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4NCi0gICAg
PC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcUXVlcnk5LmNw
cCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAg
IDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFJlbmRlcmVy
OS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPg0K
LSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxyZW5k
ZXJlcjlfdXRpbHMuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjk8
L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVu
ZGVyZXJcUmVuZGVyVGFyZ2V0OS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJl
bmRlcmVyOTwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSJyZW5kZXJlclxTaGFkZXJFeGVjdXRhYmxlOS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291
cmNlIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxTd2FwQ2hhaW45LmNwcCI+DQotICAgICAgPEZpbHRl
cj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFRleHR1cmVTdG9yYWdlOS5jcHAiPg0KLSAg
ICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPg0KLSAgICA8L0NsQ29t
cGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxWZXJ0ZXhCdWZmZXI5LmNw
cCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAg
IDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXEJsaXQuY3Bw
Ij4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4NCi0gICAg
PC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcSW5wdXRMYXlv
dXRDYWNoZS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0Zp
bHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVy
ZXJcUmVuZGVyU3RhdGVDYWNoZS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJl
bmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0icmVuZGVyZXJcVmVydGV4RGVjbGFyYXRpb25DYWNoZS5jcHAiPg0KLSAgICAgIDxGaWx0
ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSJwcmVjb21waWxlZC5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+
U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9InJlbmRlcmVyXEluZGV4UmFuZ2VDYWNoZS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+
U291cmNlIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGNvbW1vblxldmVudF90cmFjZXIuY3BwIj4NCi0gICAgICA8
RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gIDwvSXRl
bUdyb3VwPg0KLSAgPEl0ZW1Hcm91cD4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJCaW5hcnlT
dHJlYW0uaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9D
bEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iQnVmZmVyLmgiPg0KLSAgICAgIDxG
aWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9IkNvbnRleHQuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8
L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iRmVu
Y2UuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbElu
Y2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iRnJhbWVidWZmZXIuaCI+DQotICAgICAg
PEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxHTEVTMlxnbDIuaCI+DQotICAgICAgPEZp
bHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxHTEVTMlxnbDJleHQuaCI+DQotICAgICAgPEZp
bHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxHTEVTMlxnbDJwbGF0Zm9ybS5oIj4NCi0gICAg
ICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSJIYW5kbGVBbGxvY2F0b3IuaCI+DQotICAgICAgPEZpbHRlcj5I
ZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0ibWFpbi5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0K
LSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJtYXRodXRpbC5oIj4N
Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJQcm9ncmFtLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVh
ZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9IlByb2dyYW1CaW5hcnkuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0Zp
bHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iUXVlcnku
aCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1
ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cY29tbW9uXFJlZkNvdW50T2JqZWN0Lmgi
Pg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRl
Pg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlJlbmRlcmJ1ZmZlci5oIj4NCi0gICAgICA8Rmls
dGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSJyZXNvdXJjZS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwv
RmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJSZXNv
dXJjZU1hbmFnZXIuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0g
ICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iU2hhZGVyLmgiPg0KLSAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlRleHR1cmUuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIg
RmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0idXRpbGl0aWVzLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQot
ICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGNvbW1vblx2ZXJz
aW9uLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJ
bmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImFuZ2xldHlwZXMuaCI+DQotICAgICAg
PEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cdGhpcmRfcGFydHlcbXVybXVyaGFzaFxNdXJtdXJIYXNoMy5o
Ij4NCi0gICAgICA8RmlsdGVyPlRoaXJkIFBhcnR5XE11cm11ckhhc2g8L0ZpbHRlcj4NCi0gICAg
PC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iVW5pZm9ybS5oIj4NCi0gICAg
ICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVkXHBhc3N0aHJvdWdo
MTF2cy5oIj4NCi0gICAgICA8RmlsdGVyPlNoYWRlcnNcQ29tcGlsZWQ8L0ZpbHRlcj4NCi0gICAg
PC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xj
b21waWxlZFxwYXNzdGhyb3VnaHBzLmgiPg0KLSAgICAgIDxGaWx0ZXI+U2hhZGVyc1xDb21waWxl
ZDwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJy
ZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVkXHN0YW5kYXJkdnMuaCI+DQotICAgICAgPEZpbHRlcj5T
aGFkZXJzXENvbXBpbGVkPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9InJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRcY29tcG9uZW50bWFza3BzLmgi
Pg0KLSAgICAgIDxGaWx0ZXI+U2hhZGVyc1xDb21waWxlZDwvRmlsdGVyPg0KLSAgICA8L0NsSW5j
bHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVk
XGZsaXB5dnMuaCI+DQotICAgICAgPEZpbHRlcj5TaGFkZXJzXENvbXBpbGVkPC9GaWx0ZXI+DQot
ICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXHNoYWRl
cnNcY29tcGlsZWRcbHVtaW5hbmNlcHMuaCI+DQotICAgICAgPEZpbHRlcj5TaGFkZXJzXENvbXBp
bGVkPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
InJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRccGFzc3Rocm91Z2hyZ2JhMTFwcy5oIj4NCi0gICAg
ICA8RmlsdGVyPlNoYWRlcnNcQ29tcGlsZWQ8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xjb21waWxlZFxwYXNzdGhy
b3VnaHJnYjExcHMuaCI+DQotICAgICAgPEZpbHRlcj5TaGFkZXJzXENvbXBpbGVkPC9GaWx0ZXI+
DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXHNo
YWRlcnNcY29tcGlsZWRccGFzc3Rocm91Z2hsdW0xMXBzLmgiPg0KLSAgICAgIDxGaWx0ZXI+U2hh
ZGVyc1xDb21waWxlZDwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVkXHBhc3N0aHJvdWdobHVtYWxwaGEx
MXBzLmgiPg0KLSAgICAgIDxGaWx0ZXI+U2hhZGVyc1xDb21waWxlZDwvRmlsdGVyPg0KLSAgICA8
L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXGNv
bXBpbGVkXGNsZWFyMTF2cy5oIj4NCi0gICAgICA8RmlsdGVyPlNoYWRlcnNcQ29tcGlsZWQ8L0Zp
bHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVy
ZXJcc2hhZGVyc1xjb21waWxlZFxjbGVhcm11bHRpcGxlMTFwcy5oIj4NCi0gICAgICA8RmlsdGVy
PlNoYWRlcnNcQ29tcGlsZWQ8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xjb21waWxlZFxjbGVhcnNpbmdsZTExcHMu
aCI+DQotICAgICAgPEZpbHRlcj5TaGFkZXJzXENvbXBpbGVkPC9GaWx0ZXI+DQotICAgIDwvQ2xJ
bmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGNvbW1vblxzeXN0ZW0uaCI+DQot
ICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cY29tbW9uXGRlYnVnLmgiPg0KLSAgICAgIDxGaWx0
ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9InJlbmRlcmVyXEJ1ZmZlclN0b3JhZ2UuaCI+DQotICAgICAgPEZpbHRlcj5I
ZWFkZXIgRmlsZXNcUmVuZGVyZXI8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcRmVuY2VJbXBsLmgiPg0KLSAgICAgIDxGaWx0ZXI+
SGVhZGVyIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXGdlbmVyYXRlbWlwLmgiPg0KLSAgICAgIDxGaWx0
ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEltYWdlLmgiPg0KLSAgICAgIDxGaWx0ZXI+
SGVhZGVyIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEluZGV4QnVmZmVyLmgiPg0KLSAgICAgIDxGaWx0
ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEluZGV4RGF0YU1hbmFnZXIuaCI+DQotICAg
ICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1
ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcUXVlcnlJbXBsLmgiPg0KLSAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNs
dWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFJlbmRlcmVyLmgiPg0KLSAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNs
dWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFJlbmRlclRhcmdldC5oIj4N
Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjwvRmlsdGVyPg0KLSAgICA8L0Ns
SW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxTaGFkZXJFeGVjdXRh
YmxlLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQot
ICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFN3YXBD
aGFpbi5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjwvRmlsdGVyPg0K
LSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxUZXh0
dXJlU3RvcmFnZS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjwvRmls
dGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJl
clxWZXJ0ZXhCdWZmZXIuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI8
L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVu
ZGVyZXJcdmVydGV4Y29udmVyc2lvbi5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xS
ZW5kZXJlcjwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSJyZW5kZXJlclxWZXJ0ZXhEYXRhTWFuYWdlci5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRl
ciBGaWxlc1xSZW5kZXJlcjwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSJyZW5kZXJlclxCdWZmZXJTdG9yYWdlMTEuaCI+DQotICAgICAgPEZpbHRl
cj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxJbmRleEJ1ZmZlcjExLmgiPg0KLSAgICAg
IDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1
ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcUXVlcnkxMS5oIj4NCi0gICAg
ICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNs
dWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFJlbmRlcmVyMTEuaCI+DQot
ICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPg0KLSAgICA8L0Ns
SW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxSZW5kZXJUYXJnZXQx
MS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+DQot
ICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFNoYWRl
ckV4ZWN1dGFibGUxMS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjEx
PC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJl
bmRlcmVyXFN3YXBDaGFpbjExLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRl
cmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0icmVuZGVyZXJcVGV4dHVyZVN0b3JhZ2UxMS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBG
aWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9InJlbmRlcmVyXFZlcnRleEJ1ZmZlcjExLmgiPg0KLSAgICAgIDxGaWx0ZXI+
SGVhZGVyIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcQnVmZmVyU3RvcmFnZTkuaCI+DQotICAgICAg
PEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRl
Pg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEZlbmNlOS5oIj4NCi0gICAgICA8
RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+
DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcSW1hZ2U5LmgiPg0KLSAgICAgIDxG
aWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxJbmRleEJ1ZmZlcjkuaCI+DQotICAg
ICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNs
dWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFF1ZXJ5OS5oIj4NCi0gICAg
ICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1
ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcUmVuZGVyZXI5LmgiPg0KLSAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPg0KLSAgICA8L0NsSW5j
bHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxyZW5kZXJlcjlfdXRpbHMu
aCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAg
IDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFJlbmRlclRh
cmdldDkuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+
DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFNo
YWRlckV4ZWN1dGFibGU5LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVy
OTwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJy
ZW5kZXJlclxTd2FwQ2hhaW45LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRl
cmVyOTwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSJyZW5kZXJlclxUZXh0dXJlU3RvcmFnZTkuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmls
ZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9InJlbmRlcmVyXFZlcnRleEJ1ZmZlcjkuaCI+DQotICAgICAgPEZpbHRlcj5IZWFk
ZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEZlbmNlMTEuaCI+DQotICAgICAgPEZpbHRlcj5IZWFk
ZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxJbWFnZTExLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVh
ZGVyIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJccmVuZGVyZXIxMV91dGlscy5oIj4NCi0gICAgICA8
RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRl
Pg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEZlbmNlOS5oIj4NCi0gICAgICA8
RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlclxSZW5kZXJlcjk8L0ZpbHRlcj4NCi0gICAgPC9D
bEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcUXVlcnkxMS5oIj4N
Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlclxSZW5kZXJlcjExPC9GaWx0ZXI+
DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEJs
aXQuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQot
ICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFNoYWRl
ckNhY2hlLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVy
Pg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxJ
bnB1dExheW91dENhY2hlLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVy
MTE8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
cmVuZGVyZXJcUmVuZGVyU3RhdGVDYWNoZS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxl
c1xSZW5kZXJlcjExPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9InJlbmRlcmVyXFZlcnRleERlY2xhcmF0aW9uQ2FjaGUuaCI+DQotICAgICAgPEZp
bHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImNvbnN0YW50cy5oIj4NCi0gICAgICA8RmlsdGVyPkhl
YWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSJwcmVjb21waWxlZC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmls
dGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJl
clxJbmRleFJhbmdlQ2FjaGUuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVy
ZXI8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cY29tbW9uXGV2ZW50X3RyYWNlci5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwv
RmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx0
aGlyZF9wYXJ0eVx0cmFjZV9ldmVudFx0cmFjZV9ldmVudC5oIj4NCi0gICAgICA8RmlsdGVyPlRo
aXJkIFBhcnR5XHRyYWNlX2V2ZW50PC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgPC9J
dGVtR3JvdXA+DQotICA8SXRlbUdyb3VwPg0KLSAgICA8Tm9uZSBJbmNsdWRlPSJyZW5kZXJlclxz
aGFkZXJzXEJsaXQucHMiPg0KLSAgICAgIDxGaWx0ZXI+U2hhZGVyczwvRmlsdGVyPg0KLSAgICA8
L05vbmU+DQotICAgIDxOb25lIEluY2x1ZGU9InJlbmRlcmVyXHNoYWRlcnNcQmxpdC52cyI+DQot
ICAgICAgPEZpbHRlcj5TaGFkZXJzPC9GaWx0ZXI+DQotICAgIDwvTm9uZT4NCi0gICAgPE5vbmUg
SW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xnZW5lcmF0ZV9zaGFkZXJzLmJhdCI+DQotICAgICAg
PEZpbHRlcj5TaGFkZXJzPC9GaWx0ZXI+DQotICAgIDwvTm9uZT4NCi0gICAgPE5vbmUgSW5jbHVk
ZT0icmVuZGVyZXJcc2hhZGVyc1xQYXNzdGhyb3VnaDExLmhsc2wiPg0KLSAgICAgIDxGaWx0ZXI+
U2hhZGVyczwvRmlsdGVyPg0KLSAgICA8L05vbmU+DQotICAgIDxOb25lIEluY2x1ZGU9InJlbmRl
cmVyXHNoYWRlcnNcQ2xlYXIxMS5obHNsIj4NCi0gICAgICA8RmlsdGVyPlNoYWRlcnM8L0ZpbHRl
cj4NCi0gICAgPC9Ob25lPg0KLSAgICA8Tm9uZSBJbmNsdWRlPSJsaWJHTEVTdjIuZGVmIiAvPg0K
LSAgPC9JdGVtR3JvdXA+DQotICA8SXRlbUdyb3VwPg0KLSAgICA8UmVzb3VyY2VDb21waWxlIElu
Y2x1ZGU9ImxpYkdMRVN2Mi5yYyIgLz4NCi0gIDwvSXRlbUdyb3VwPg0KLTwvUHJvamVjdD4KXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL21haW4uY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9tYWluLmNwcAppbmRleCA2ZDdhMjQxMzQwZjllN2I5NDdiMzE3OTU4OWI2NTMy
ZWUxMDczYmNjLi41MGUyNTkzMzI4ZDE4OGMxMzFlZGVmZmZhYzFkNjRmNjZlN2FmZDY4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21haW4uY3BwCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5jcHAKQEAgLTEz
LDYgKzEzLDQwIEBACiAKIHN0YXRpYyBEV09SRCBjdXJyZW50VExTID0gVExTX09VVF9PRl9JTkRF
WEVTOwogCituYW1lc3BhY2UgZ2wKK3sKKworQ3VycmVudCAqQWxsb2NhdGVDdXJyZW50KCkKK3sK
KyAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKUxvY2FsQWxsb2MoTFBUUiwgc2l6ZW9m
KEN1cnJlbnQpKTsKKworICAgIGlmICghY3VycmVudCkKKyAgICB7CisgICAgICAgIEVSUigiQ291
bGQgbm90IGFsbG9jYXRlIHRocmVhZCBsb2NhbCBzdG9yYWdlLiIpOworICAgICAgICByZXR1cm4g
TlVMTDsKKyAgICB9CisKKyAgICBBU1NFUlQoY3VycmVudFRMUyAhPSBUTFNfT1VUX09GX0lOREVY
RVMpOworICAgIFRsc1NldFZhbHVlKGN1cnJlbnRUTFMsIGN1cnJlbnQpOworCisgICAgY3VycmVu
dC0+Y29udGV4dCA9IE5VTEw7CisgICAgY3VycmVudC0+ZGlzcGxheSA9IE5VTEw7CisKKyAgICBy
ZXR1cm4gY3VycmVudDsKK30KKwordm9pZCBEZWFsbG9jYXRlQ3VycmVudCgpCit7CisgICAgdm9p
ZCAqY3VycmVudCA9IFRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworCisgICAgaWYgKGN1cnJlbnQp
CisgICAgeworICAgICAgICBMb2NhbEZyZWUoKEhMT0NBTCljdXJyZW50KTsKKyAgICB9Cit9CisK
K30KKwogZXh0ZXJuICJDIiBCT09MIFdJTkFQSSBEbGxNYWluKEhJTlNUQU5DRSBpbnN0YW5jZSwg
RFdPUkQgcmVhc29uLCBMUFZPSUQgcmVzZXJ2ZWQpCiB7CiAgICAgc3dpdGNoIChyZWFzb24pCkBA
IC0yOSwzNiArNjMsMTcgQEAgZXh0ZXJuICJDIiBCT09MIFdJTkFQSSBEbGxNYWluKEhJTlNUQU5D
RSBpbnN0YW5jZSwgRFdPUkQgcmVhc29uLCBMUFZPSUQgcmVzZXJ2ZWQKICAgICAgICAgLy8gRmFs
bCB0aHJvdWdodCB0byBpbml0aWFsaXplIGluZGV4CiAgICAgICBjYXNlIERMTF9USFJFQURfQVRU
QUNIOgogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6Q3VycmVudCAqY3VycmVudCA9IChnbDo6
Q3VycmVudCopTG9jYWxBbGxvYyhMUFRSLCBzaXplb2YoZ2w6OkN1cnJlbnQpKTsKLQotICAgICAg
ICAgICAgaWYgKGN1cnJlbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVGxzU2V0
VmFsdWUoY3VycmVudFRMUywgY3VycmVudCk7Ci0KLSAgICAgICAgICAgICAgICBjdXJyZW50LT5j
b250ZXh0ID0gTlVMTDsKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5kaXNwbGF5ID0gTlVMTDsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdsOjpBbGxvY2F0ZUN1cnJlbnQoKTsKICAgICAg
ICAgfQogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgRExMX1RIUkVBRF9ERVRBQ0g6CiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHZvaWQgKmN1cnJlbnQgPSBUbHNHZXRWYWx1ZShjdXJyZW50VExT
KTsKLQotICAgICAgICAgICAgaWYgKGN1cnJlbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgTG9jYWxGcmVlKChITE9DQUwpY3VycmVudCk7Ci0gICAgICAgICAgICB9CisgICAgICAg
ICAgICBnbDo6RGVhbGxvY2F0ZUN1cnJlbnQoKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsK
ICAgICAgIGNhc2UgRExMX1BST0NFU1NfREVUQUNIOgogICAgICAgICB7Ci0gICAgICAgICAgICB2
b2lkICpjdXJyZW50ID0gVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICAgICAgICAgIGlm
IChjdXJyZW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIExvY2FsRnJlZSgoSExP
Q0FMKWN1cnJlbnQpOwotICAgICAgICAgICAgfQotCisgICAgICAgICAgICBnbDo6RGVhbGxvY2F0
ZUN1cnJlbnQoKTsKICAgICAgICAgICAgIFRsc0ZyZWUoY3VycmVudFRMUyk7CiAgICAgICAgIH0K
ICAgICAgICAgYnJlYWs7CkBAIC03MSwxMCArODYsMjAgQEAgZXh0ZXJuICJDIiBCT09MIFdJTkFQ
SSBEbGxNYWluKEhJTlNUQU5DRSBpbnN0YW5jZSwgRFdPUkQgcmVhc29uLCBMUFZPSUQgcmVzZXJ2
ZWQKIAogbmFtZXNwYWNlIGdsCiB7Ci12b2lkIG1ha2VDdXJyZW50KENvbnRleHQgKmNvbnRleHQs
IGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKQorCitDdXJyZW50
ICpHZXRDdXJyZW50RGF0YSgpCiB7CiAgICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilU
bHNHZXRWYWx1ZShjdXJyZW50VExTKTsKIAorICAgIC8vIEFOR0xFIGlzc3VlIDQ4ODogd2hlbiB0
aGUgZGxsIGlzIGxvYWRlZCBhZnRlciB0aHJlYWQgaW5pdGlhbGl6YXRpb24sCisgICAgLy8gdGhy
ZWFkIGxvY2FsIHN0b3JhZ2UgKGN1cnJlbnQpIG1pZ2h0IG5vdCBleGlzdCB5ZXQuCisgICAgcmV0
dXJuIChjdXJyZW50ID8gY3VycmVudCA6IEFsbG9jYXRlQ3VycmVudCgpKTsKK30KKwordm9pZCBt
YWtlQ3VycmVudChDb250ZXh0ICpjb250ZXh0LCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6
U3VyZmFjZSAqc3VyZmFjZSkKK3sKKyAgICBDdXJyZW50ICpjdXJyZW50ID0gR2V0Q3VycmVudERh
dGEoKTsKKwogICAgIGN1cnJlbnQtPmNvbnRleHQgPSBjb250ZXh0OwogICAgIGN1cnJlbnQtPmRp
c3BsYXkgPSBkaXNwbGF5OwogCkBAIC04Niw3ICsxMTEsNyBAQCB2b2lkIG1ha2VDdXJyZW50KENv
bnRleHQgKmNvbnRleHQsIGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpzdXJm
YWNlKQogCiBDb250ZXh0ICpnZXRDb250ZXh0KCkKIHsKLSAgICBDdXJyZW50ICpjdXJyZW50ID0g
KEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworICAgIEN1cnJlbnQgKmN1cnJlbnQg
PSBHZXRDdXJyZW50RGF0YSgpOwogCiAgICAgcmV0dXJuIGN1cnJlbnQtPmNvbnRleHQ7CiB9CkBA
IC0xMTIsNyArMTM3LDcgQEAgQ29udGV4dCAqZ2V0Tm9uTG9zdENvbnRleHQoKQogCiBlZ2w6OkRp
c3BsYXkgKmdldERpc3BsYXkoKQogewotICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCop
VGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisgICAgQ3VycmVudCAqY3VycmVudCA9IEdldEN1cnJl
bnREYXRhKCk7CiAKICAgICByZXR1cm4gY3VycmVudC0+ZGlzcGxheTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmgKaW5kZXggMTk2YWZhZWFiNjdlNzQy
Zjc5MjNkOTFkYjA1NjMxY2U5ZDkzZTBkZC4uYjQxM2YyMzIwYzE1MWZkNzIwYTNmZjM4ZGI0YWRm
NjA1MmZiYmY4NiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9tYWluLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9t
YWluLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNkZWZpbmUgTElCR0xFU1YyX01BSU5fSF8KIAogI2lu
Y2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgotI2luY2x1ZGUgImNvbW1vbi9zeXN0ZW0uaCIKIAogbmFt
ZXNwYWNlIGVnbAogewpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9tYXRodXRpbC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9tYXRodXRpbC5oCmluZGV4IGJiNDhiOTRlYWY3MWE0OWQwNTMxMmMxMzliNGU1NzcyYmJiOGEx
ZTguLmY5MDIxMzFhMzUyMjFiZjYwZjc3MjAyZDk5YWMwYjhkYTYxODEyYmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWF0aHV0aWwuaAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21hdGh1dGlsLmgKQEAgLTExLDcg
KzExLDYgQEAKIAogI2luY2x1ZGUgPGludHJpbi5oPgogCi0jaW5jbHVkZSAiY29tbW9uL3N5c3Rl
bS5oIgogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgogCiBuYW1lc3BhY2UgZ2wKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcHJlY29tcGlsZWQuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcHJlY29tcGlsZWQuaAppbmRl
eCA1OGFkMTgxODc0YjMyZmE1YzMzNGYzNjFhNDc2Njk3ZDMwNmQzMjRlLi40YjlhY2M3OTlkYzFm
MzViZDQ2Y2Q0ZThmODRhMzM1MjllNWQzZWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3ByZWNvbXBpbGVkLmgKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9wcmVjb21waWxlZC5oCkBAIC0zNSw2ICszNSw3IEBACiAj
aW5jbHVkZSA8ZDNkOS5oPgogI2luY2x1ZGUgPGQzZDExLmg+CiAjaW5jbHVkZSA8ZHhnaS5oPgor
I2luY2x1ZGUgPGR4Z2kxXzIuaD4KICNpbmNsdWRlIDxkM2Rjb21waWxlci5oPgogCiAjaWZkZWYg
X01TQ19WRVIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvQmxpdC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL0JsaXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTNj
ZTM5YzYzMjRiMDgyNDI2YzkyNmE3NWJmMDU5YTg3YTVkOWQyLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvQmxpdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1OTUgKzAsMCBA
QAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBCbGl0
LmNwcDogU3VyZmFjZSBjb3B5IHV0aWxpdHkgY2xhc3MuCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvQmxpdC5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXI5X3V0aWxzLmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlOS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9SZW5kZXJUYXJnZXQ5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRl
cmVyOS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgotI2luY2x1ZGUgImxp
YkdMRVN2Mi9SZW5kZXJidWZmZXIuaCIKLQotbmFtZXNwYWNlCi17Ci0jaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvc3RhbmRhcmR2cy5oIgotI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL2ZsaXB5dnMuaCIKLSNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHBzLmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvbHVtaW5hbmNlcHMuaCIK
LSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9jb21wb25lbnRt
YXNrcHMuaCIKLQotY29uc3QgQllURSogY29uc3QgZ19zaGFkZXJDb2RlW10gPQotewotICAgIGdf
dnMyMF9zdGFuZGFyZHZzLAotICAgIGdfdnMyMF9mbGlweXZzLAotICAgIGdfcHMyMF9wYXNzdGhy
b3VnaHBzLAotICAgIGdfcHMyMF9sdW1pbmFuY2VwcywKLSAgICBnX3BzMjBfY29tcG9uZW50bWFz
a3BzCi19OwotCi1jb25zdCBzaXplX3QgZ19zaGFkZXJTaXplW10gPQotewotICAgIHNpemVvZihn
X3ZzMjBfc3RhbmRhcmR2cyksCi0gICAgc2l6ZW9mKGdfdnMyMF9mbGlweXZzKSwKLSAgICBzaXpl
b2YoZ19wczIwX3Bhc3N0aHJvdWdocHMpLAotICAgIHNpemVvZihnX3BzMjBfbHVtaW5hbmNlcHMp
LAotICAgIHNpemVvZihnX3BzMjBfY29tcG9uZW50bWFza3BzKQotfTsKLX0KLQotbmFtZXNwYWNl
IHJ4Ci17Ci1CbGl0OjpCbGl0KHJ4OjpSZW5kZXJlcjkgKnJlbmRlcmVyKQotICA6IG1SZW5kZXJl
cihyZW5kZXJlciksIG1RdWFkVmVydGV4QnVmZmVyKE5VTEwpLCBtUXVhZFZlcnRleERlY2xhcmF0
aW9uKE5VTEwpLCBtU2F2ZWRTdGF0ZUJsb2NrKE5VTEwpLCBtU2F2ZWRSZW5kZXJUYXJnZXQoTlVM
TCksIG1TYXZlZERlcHRoU3RlbmNpbChOVUxMKQotewotICAgIGluaXRHZW9tZXRyeSgpOwotICAg
IG1lbXNldChtQ29tcGlsZWRTaGFkZXJzLCAwLCBzaXplb2YobUNvbXBpbGVkU2hhZGVycykpOwot
fQotCi1CbGl0Ojp+QmxpdCgpCi17Ci0gICAgaWYgKG1TYXZlZFN0YXRlQmxvY2spIG1TYXZlZFN0
YXRlQmxvY2stPlJlbGVhc2UoKTsKLSAgICBpZiAobVF1YWRWZXJ0ZXhCdWZmZXIpIG1RdWFkVmVy
dGV4QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgaWYgKG1RdWFkVmVydGV4RGVjbGFyYXRpb24pIG1R
dWFkVmVydGV4RGVjbGFyYXRpb24tPlJlbGVhc2UoKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgU0hBREVSX0NPVU5UOyBpKyspCi0gICAgewotICAgICAgICBpZiAobUNvbXBpbGVkU2hhZGVy
c1tpXSkKLSAgICAgICAgewotICAgICAgICAgICAgbUNvbXBpbGVkU2hhZGVyc1tpXS0+UmVsZWFz
ZSgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEJsaXQ6OmluaXRHZW9tZXRyeSgpCi17
Ci0gICAgc3RhdGljIGNvbnN0IGZsb2F0IHF1YWRbXSA9Ci0gICAgewotICAgICAgICAtMSwgLTEs
Ci0gICAgICAgIC0xLCAgMSwKLSAgICAgICAgIDEsIC0xLAotICAgICAgICAgMSwgIDEKLSAgICB9
OwotCi0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2Uo
KTsKLQotICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVWZXJ0ZXhCdWZmZXIoc2l6
ZW9mKHF1YWQpLCBEM0RVU0FHRV9XUklURU9OTFksIDAsIEQzRFBPT0xfREVGQVVMVCwgJm1RdWFk
VmVydGV4QnVmZmVyLCBOVUxMKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0
ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwotICAgIH0KLQotICAgIHZvaWQgKmxvY2tQdHIgPSBOVUxMOwotICAgIHJlc3VsdCA9
IG1RdWFkVmVydGV4QnVmZmVyLT5Mb2NrKDAsIDAsICZsb2NrUHRyLCAwKTsKLQotICAgIGlmIChG
QUlMRUQocmVzdWx0KSB8fCBsb2NrUHRyID09IE5VTEwpCi0gICAgewotICAgICAgICBBU1NFUlQo
cmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVN
T1JZKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9
Ci0KLSAgICBtZW1jcHkobG9ja1B0ciwgcXVhZCwgc2l6ZW9mKHF1YWQpKTsKLSAgICBtUXVhZFZl
cnRleEJ1ZmZlci0+VW5sb2NrKCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgRDNEVkVSVEVYRUxFTUVO
VDkgZWxlbWVudHNbXSA9Ci0gICAgewotICAgICAgICB7IDAsIDAsIEQzRERFQ0xUWVBFX0ZMT0FU
MiwgRDNEREVDTE1FVEhPRF9ERUZBVUxULCBEM0RERUNMVVNBR0VfUE9TSVRJT04sIDAgfSwKLSAg
ICAgICAgRDNEREVDTF9FTkQoKQotICAgIH07Ci0KLSAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZVZlcnRleERlY2xhcmF0aW9uKGVsZW1lbnRzLCAmbVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbik7Ci0K
LSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09
IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXRl
bXBsYXRlIDxjbGFzcyBEM0RTaGFkZXJUeXBlPgotYm9vbCBCbGl0OjpzZXRTaGFkZXIoU2hhZGVy
SWQgc291cmNlLCBjb25zdCBjaGFyICpwcm9maWxlLAotICAgICAgICAgICAgICAgICAgICAgRDNE
U2hhZGVyVHlwZSAqKHJ4OjpSZW5kZXJlcjk6OipjcmVhdGVTaGFkZXIpKGNvbnN0IERXT1JEICos
IHNpemVfdCBsZW5ndGgpLAotICAgICAgICAgICAgICAgICAgICAgSFJFU1VMVCAoV0lOQVBJIElE
aXJlY3QzRERldmljZTk6OipzZXRTaGFkZXIpKEQzRFNoYWRlclR5cGUqKSkKLXsKLSAgICBJRGly
ZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0gICAgRDNE
U2hhZGVyVHlwZSAqc2hhZGVyOwotCi0gICAgaWYgKG1Db21waWxlZFNoYWRlcnNbc291cmNlXSAh
PSBOVUxMKQotICAgIHsKLSAgICAgICAgc2hhZGVyID0gc3RhdGljX2Nhc3Q8RDNEU2hhZGVyVHlw
ZSo+KG1Db21waWxlZFNoYWRlcnNbc291cmNlXSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0g
ICAgICAgIGNvbnN0IEJZVEUqIHNoYWRlckNvZGUgPSBnX3NoYWRlckNvZGVbc291cmNlXTsKLSAg
ICAgICAgc2l6ZV90IHNoYWRlclNpemUgPSBnX3NoYWRlclNpemVbc291cmNlXTsKLQotICAgICAg
ICBzaGFkZXIgPSAobVJlbmRlcmVyLT4qY3JlYXRlU2hhZGVyKShyZWludGVycHJldF9jYXN0PGNv
bnN0IERXT1JEKj4oc2hhZGVyQ29kZSksIHNoYWRlclNpemUpOwotICAgICAgICBpZiAoIXNoYWRl
cikKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gY3JlYXRlIHNoYWRlciBm
b3IgYmxpdCBvcGVyYXRpb24iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotCi0gICAgICAgIG1Db21waWxlZFNoYWRlcnNbc291cmNlXSA9IHNoYWRlcjsKLSAgICB9Ci0K
LSAgICBIUkVTVUxUIGhyID0gKGRldmljZS0+KnNldFNoYWRlcikoc2hhZGVyKTsKLQotICAgIGlm
IChGQUlMRUQoaHIpKQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gc2V0IHNoYWRlciBm
b3IgYmxpdCBvcGVyYXRpb24iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIEJsaXQ6OnNldFZlcnRleFNoYWRlcihTaGFkZXJJZCBz
aGFkZXIpCi17Ci0gICAgcmV0dXJuIHNldFNoYWRlcjxJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5Pihz
aGFkZXIsICJ2c18yXzAiLCAmcng6OlJlbmRlcmVyOTo6Y3JlYXRlVmVydGV4U2hhZGVyLCAmSURp
cmVjdDNERGV2aWNlOTo6U2V0VmVydGV4U2hhZGVyKTsKLX0KLQotYm9vbCBCbGl0OjpzZXRQaXhl
bFNoYWRlcihTaGFkZXJJZCBzaGFkZXIpCi17Ci0gICAgcmV0dXJuIHNldFNoYWRlcjxJRGlyZWN0
M0RQaXhlbFNoYWRlcjk+KHNoYWRlciwgInBzXzJfMCIsICZyeDo6UmVuZGVyZXI5OjpjcmVhdGVQ
aXhlbFNoYWRlciwgJklEaXJlY3QzRERldmljZTk6OlNldFBpeGVsU2hhZGVyKTsKLX0KLQotUkVD
VCBCbGl0OjpnZXRTdXJmYWNlUmVjdChJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSkgY29uc3QK
LXsKLSAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKLSAgICBzdXJmYWNlLT5HZXREZXNjKCZkZXNj
KTsKLQotICAgIFJFQ1QgcmVjdDsKLSAgICByZWN0LmxlZnQgPSAwOwotICAgIHJlY3QudG9wID0g
MDsKLSAgICByZWN0LnJpZ2h0ID0gZGVzYy5XaWR0aDsKLSAgICByZWN0LmJvdHRvbSA9IGRlc2Mu
SGVpZ2h0OwotCi0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLWJvb2wgQmxpdDo6Ym94RmlsdGVyKElE
aXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0KQotewotICAg
IElEaXJlY3QzRFRleHR1cmU5ICp0ZXh0dXJlID0gY29weVN1cmZhY2VUb1RleHR1cmUoc291cmNl
LCBnZXRTdXJmYWNlUmVjdChzb3VyY2UpKTsKLSAgICBpZiAoIXRleHR1cmUpCi0gICAgewotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNl
ID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLQotICAgIHNhdmVTdGF0ZSgpOwotCi0gICAgZGV2
aWNlLT5TZXRUZXh0dXJlKDAsIHRleHR1cmUpOwotICAgIGRldmljZS0+U2V0UmVuZGVyVGFyZ2V0
KDAsIGRlc3QpOwotCi0gICAgc2V0VmVydGV4U2hhZGVyKFNIQURFUl9WU19TVEFOREFSRCk7Ci0g
ICAgc2V0UGl4ZWxTaGFkZXIoU0hBREVSX1BTX1BBU1NUSFJPVUdIKTsKLQotICAgIHNldENvbW1v
bkJsaXRTdGF0ZSgpOwotICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUlO
RklMVEVSLCBEM0RURVhGX0xJTkVBUik7Ci0gICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwg
RDNEU0FNUF9NQUdGSUxURVIsIEQzRFRFWEZfTElORUFSKTsKLQotICAgIHNldFZpZXdwb3J0KGdl
dFN1cmZhY2VSZWN0KGRlc3QpLCAwLCAwKTsKLQotICAgIHJlbmRlcigpOwotCi0gICAgdGV4dHVy
ZS0+UmVsZWFzZSgpOwotCi0gICAgcmVzdG9yZVN0YXRlKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBCbGl0Ojpjb3B5KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0
IFJFQ1QgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBHTGludCBsZXZl
bCkKLXsKLSAgICBSZW5kZXJUYXJnZXQ5ICpyZW5kZXJUYXJnZXQgPSBOVUxMOwotICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICpzb3VyY2UgPSBOVUxMOwotICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9y
YnVmZmVyID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKDApOwotCi0gICAgaWYgKGNvbG9y
YnVmZmVyKQotICAgIHsKLSAgICAgICAgcmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0OTo6bWFr
ZVJlbmRlclRhcmdldDkoY29sb3JidWZmZXItPmdldFJlbmRlclRhcmdldCgpKTsKLSAgICB9Ci0g
ICAgCi0gICAgaWYgKHJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlbmRl
clRhcmdldC0+Z2V0U3VyZmFjZSgpOwotICAgIH0KLQotICAgIGlmICghc291cmNlKQotICAgIHsK
LSAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQuIik7Ci0g
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAgIH0K
LQotICAgIFRleHR1cmVTdG9yYWdlOV8yRCAqc3RvcmFnZTkgPSBUZXh0dXJlU3RvcmFnZTlfMkQ6
Om1ha2VUZXh0dXJlU3RvcmFnZTlfMkQoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwot
ICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0U3VyZmFjZSA9IHN0b3JhZ2U5LT5nZXRTdXJmYWNl
TGV2ZWwobGV2ZWwsIHRydWUpOwotICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgIAot
ICAgIGlmIChkZXN0U3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIHJlc3VsdCA9IGNvcHkoc291cmNl
LCBzb3VyY2VSZWN0LCBkZXN0Rm9ybWF0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBkZXN0U3VyZmFjZSk7
Ci0gICAgICAgIGRlc3RTdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgc291cmNlLT5S
ZWxlYXNlKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBCbGl0Ojpjb3B5KGdsOjpG
cmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMZW51bSBk
ZXN0Rm9ybWF0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZUN1YmUgKnN0b3JhZ2UsIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKQotewotICAg
IFJlbmRlclRhcmdldDkgKnJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgSURpcmVjdDNEU3VyZmFj
ZTkgKnNvdXJjZSA9IE5VTEw7Ci0gICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBm
cmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoMCk7Ci0KLSAgICBpZiAoY29sb3JidWZmZXIpCi0g
ICAgewotICAgICAgICByZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFy
Z2V0OShjb2xvcmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOwotICAgIH0KLSAgICAKLSAgICBp
ZiAocmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVuZGVyVGFyZ2V0LT5n
ZXRTdXJmYWNlKCk7Ci0gICAgfQotCi0gICAgaWYgKCFzb3VyY2UpCi0gICAgewotICAgICAgICBF
UlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldC4iKTsKLSAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgVGV4
dHVyZVN0b3JhZ2U5X0N1YmUgKnN0b3JhZ2U5ID0gVGV4dHVyZVN0b3JhZ2U5X0N1YmU6Om1ha2VU
ZXh0dXJlU3RvcmFnZTlfQ3ViZShzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAg
SURpcmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJmYWNlID0gc3RvcmFnZTktPmdldEN1YmVNYXBTdXJm
YWNlKHRhcmdldCwgbGV2ZWwsIHRydWUpOwotICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0KLSAg
ICBpZiAoZGVzdFN1cmZhY2UpCi0gICAgewotICAgICAgICByZXN1bHQgPSBjb3B5KHNvdXJjZSwg
c291cmNlUmVjdCwgZGVzdEZvcm1hdCwgeG9mZnNldCwgeW9mZnNldCwgZGVzdFN1cmZhY2UpOwot
ICAgICAgICBkZXN0U3VyZmFjZS0+UmVsZWFzZSgpOwotICAgIH0KLQotICAgIHNvdXJjZS0+UmVs
ZWFzZSgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgQmxpdDo6Y29weShJRGlyZWN0
M0RTdXJmYWNlOSAqc291cmNlLCBjb25zdCBSRUNUICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZv
cm1hdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgSURpcmVjdDNEU3VyZmFjZTkgKmRl
c3QpCi17Ci0gICAgaWYgKCFkZXN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNl
KCk7Ci0KLSAgICBEM0RTVVJGQUNFX0RFU0Mgc291cmNlRGVzYzsKLSAgICBEM0RTVVJGQUNFX0RF
U0MgZGVzdERlc2M7Ci0gICAgc291cmNlLT5HZXREZXNjKCZzb3VyY2VEZXNjKTsKLSAgICBkZXN0
LT5HZXREZXNjKCZkZXN0RGVzYyk7Ci0KLSAgICBpZiAoc291cmNlRGVzYy5Gb3JtYXQgPT0gZGVz
dERlc2MuRm9ybWF0ICYmIGRlc3REZXNjLlVzYWdlICYgRDNEVVNBR0VfUkVOREVSVEFSR0VUICYm
Ci0gICAgICAgIGQzZDlfZ2w6OklzRm9ybWF0Q2hhbm5lbEVxdWl2YWxlbnQoZGVzdERlc2MuRm9y
bWF0LCBkZXN0Rm9ybWF0KSkgICAvLyBDYW4gdXNlIFN0cmV0Y2hSZWN0Ci0gICAgewotICAgICAg
ICBSRUNUIGRlc3RSZWN0ID0ge3hvZmZzZXQsIHlvZmZzZXQsIHhvZmZzZXQgKyAoc291cmNlUmVj
dC5yaWdodCAtIHNvdXJjZVJlY3QubGVmdCksIHlvZmZzZXQgKyAoc291cmNlUmVjdC5ib3R0b20g
LSBzb3VyY2VSZWN0LnRvcCl9OwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+U3Ry
ZXRjaFJlY3Qoc291cmNlLCAmc291cmNlUmVjdCwgZGVzdCwgJmRlc3RSZWN0LCBEM0RURVhGX1BP
SU5UKTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09
IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGZvcm1hdENvbnZlcnQoc291cmNlLCBzb3VyY2VSZWN0LCBkZXN0Rm9ybWF0LCB4
b2Zmc2V0LCB5b2Zmc2V0LCBkZXN0KTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgQmxpdDo6Zm9ybWF0Q29udmVydChJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBjb25zdCBS
RUNUICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpCi17Ci0gICAgSURpcmVjdDNEVGV4dHVy
ZTkgKnRleHR1cmUgPSBjb3B5U3VyZmFjZVRvVGV4dHVyZShzb3VyY2UsIHNvdXJjZVJlY3QpOwot
ICAgIGlmICghdGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwot
Ci0gICAgc2F2ZVN0YXRlKCk7Ci0KLSAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwgdGV4dHVyZSk7
Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgZGVzdCk7Ci0KLSAgICBzZXRWaWV3cG9y
dChzb3VyY2VSZWN0LCB4b2Zmc2V0LCB5b2Zmc2V0KTsKLQotICAgIHNldENvbW1vbkJsaXRTdGF0
ZSgpOwotICAgIGlmIChzZXRGb3JtYXRDb252ZXJ0U2hhZGVycyhkZXN0Rm9ybWF0KSkKLSAgICB7
Ci0gICAgICAgIHJlbmRlcigpOwotICAgIH0KLQotICAgIHRleHR1cmUtPlJlbGVhc2UoKTsKLQot
ICAgIHJlc3RvcmVTdGF0ZSgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQmxpdDo6
c2V0Rm9ybWF0Q29udmVydFNoYWRlcnMoR0xlbnVtIGRlc3RGb3JtYXQpCi17Ci0gICAgYm9vbCBv
a2F5ID0gc2V0VmVydGV4U2hhZGVyKFNIQURFUl9WU19TVEFOREFSRCk7Ci0KLSAgICBzd2l0Y2gg
KGRlc3RGb3JtYXQpCi0gICAgewotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAg
IGNhc2UgR0xfUkdCQToKLSAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICBjYXNlIEdMX1JH
QjoKLSAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgIG9rYXkgPSBva2F5ICYmIHNldFBpeGVs
U2hhZGVyKFNIQURFUl9QU19DT01QT05FTlRNQVNLKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAg
IGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAg
ICAgIG9rYXkgPSBva2F5ICYmIHNldFBpeGVsU2hhZGVyKFNIQURFUl9QU19MVU1JTkFOQ0UpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoIW9rYXkpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZW51bSB7IFggPSAwLCBZID0gMSwgWiA9IDIsIFcg
PSAzIH07Ci0KLSAgICAvLyBUaGUgbWVhbmluZyBvZiB0aGlzIGNvbnN0YW50IGRlcGVuZHMgb24g
dGhlIHNoYWRlciB0aGF0IHdhcyBzZWxlY3RlZC4KLSAgICAvLyBTZWUgdGhlIHNoYWRlciBhc3Nl
bWJseSBjb2RlIGFib3ZlIGZvciBkZXRhaWxzLgotICAgIGZsb2F0IHBzQ29uc3QwWzRdID0geyAw
LCAwLCAwLCAwIH07Ci0KLSAgICBzd2l0Y2ggKGRlc3RGb3JtYXQpCi0gICAgewotICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgIGNhc2UgR0xf
QkdSQV9FWFQ6Ci0gICAgICAgIHBzQ29uc3QwW1hdID0gMTsKLSAgICAgICAgcHNDb25zdDBbWl0g
PSAxOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgIHBzQ29u
c3QwW1hdID0gMTsKLSAgICAgICAgcHNDb25zdDBbV10gPSAxOwotICAgICAgICBicmVhazsKLQot
ICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgcHNDb25zdDBbWl0gPSAxOwotICAgICAgICBi
cmVhazsKLQotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgIHBzQ29uc3QwW1ldID0g
MTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAg
ICAgICBwc0NvbnN0MFtYXSA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIG1SZW5k
ZXJlci0+Z2V0RGV2aWNlKCktPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKDAsIHBzQ29uc3QwLCAx
KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1JRGlyZWN0M0RUZXh0dXJlOSAqQmxpdDo6Y29w
eVN1cmZhY2VUb1RleHR1cmUoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UsIGNvbnN0IFJFQ1Qg
JnNvdXJjZVJlY3QpCi17Ci0gICAgaWYgKCFzdXJmYWNlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IE5VTEw7Ci0gICAgfQotCi0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVy
LT5nZXREZXZpY2UoKTsKLQotICAgIEQzRFNVUkZBQ0VfREVTQyBzb3VyY2VEZXNjOwotICAgIHN1
cmZhY2UtPkdldERlc2MoJnNvdXJjZURlc2MpOwotCi0gICAgLy8gQ29weSB0aGUgcmVuZGVyIHRh
cmdldCBpbnRvIGEgdGV4dHVyZQotICAgIElEaXJlY3QzRFRleHR1cmU5ICp0ZXh0dXJlOwotICAg
IEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKHNvdXJjZVJlY3QucmlnaHQg
LSBzb3VyY2VSZWN0LmxlZnQsIHNvdXJjZVJlY3QuYm90dG9tIC0gc291cmNlUmVjdC50b3AsIDEs
IEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgc291cmNlRGVzYy5Gb3JtYXQsIEQzRFBPT0xfREVGQVVM
VCwgJnRleHR1cmUsIE5VTEwpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQg
PT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSwgKElEaXJlY3QzRFRleHR1cmU5KilOVUxMKTsKLSAgICB9Ci0KLSAgICBJRGlyZWN0M0RT
dXJmYWNlOSAqdGV4dHVyZVN1cmZhY2U7Ci0gICAgcmVzdWx0ID0gdGV4dHVyZS0+R2V0U3VyZmFj
ZUxldmVsKDAsICZ0ZXh0dXJlU3VyZmFjZSk7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0g
ICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8
IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgdGV4dHVyZS0+UmVsZWFzZSgpOwot
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIChJRGlyZWN0M0RUZXh0
dXJlOSopTlVMTCk7Ci0gICAgfQotCi0gICAgbVJlbmRlcmVyLT5lbmRTY2VuZSgpOwotICAgIHJl
c3VsdCA9IGRldmljZS0+U3RyZXRjaFJlY3Qoc3VyZmFjZSwgJnNvdXJjZVJlY3QsIHRleHR1cmVT
dXJmYWNlLCBOVUxMLCBEM0RURVhGX05PTkUpOwotCi0gICAgdGV4dHVyZVN1cmZhY2UtPlJlbGVh
c2UoKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChy
ZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1P
UlkpOwotICAgICAgICB0ZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSwgKElEaXJlY3QzRFRleHR1cmU5KilOVUxMKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdGV4dHVyZTsKLX0KLQotdm9pZCBCbGl0OjpzZXRWaWV3cG9ydChjb25zdCBS
RUNUICZzb3VyY2VSZWN0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0KQotewotICAgIElE
aXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0KLSAgICBE
M0RWSUVXUE9SVDkgdnA7Ci0gICAgdnAuWCAgICAgID0geG9mZnNldDsKLSAgICB2cC5ZICAgICAg
PSB5b2Zmc2V0OwotICAgIHZwLldpZHRoICA9IHNvdXJjZVJlY3QucmlnaHQgLSBzb3VyY2VSZWN0
LmxlZnQ7Ci0gICAgdnAuSGVpZ2h0ID0gc291cmNlUmVjdC5ib3R0b20gLSBzb3VyY2VSZWN0LnRv
cDsKLSAgICB2cC5NaW5aICAgPSAwLjBmOwotICAgIHZwLk1heFogICA9IDEuMGY7Ci0gICAgZGV2
aWNlLT5TZXRWaWV3cG9ydCgmdnApOwotCi0gICAgZmxvYXQgaGFsZlBpeGVsQWRqdXN0WzRdID0g
eyAtMS4wZi92cC5XaWR0aCwgMS4wZi92cC5IZWlnaHQsIDAsIDAgfTsKLSAgICBkZXZpY2UtPlNl
dFZlcnRleFNoYWRlckNvbnN0YW50RigwLCBoYWxmUGl4ZWxBZGp1c3QsIDEpOwotfQotCi12b2lk
IEJsaXQ6OnNldENvbW1vbkJsaXRTdGF0ZSgpCi17Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2
aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLQotICAgIGRldmljZS0+U2V0RGVwdGhTdGVu
Y2lsU3VyZmFjZShOVUxMKTsKLQotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfRklM
TE1PREUsIEQzREZJTExfU09MSUQpOwotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
QUxQSEFURVNURU5BQkxFLCBGQUxTRSk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19DVUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX0NMSVBQTEFORUVOQUJMRSwgMCk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19DT0xPUldSSVRFRU5BQkxFLCBEM0RDT0xPUldSSVRFRU5BQkxFX0FMUEhBIHwgRDNEQ09M
T1JXUklURUVOQUJMRV9CTFVFIHwgRDNEQ09MT1JXUklURUVOQUJMRV9HUkVFTiB8IEQzRENPTE9S
V1JJVEVFTkFCTEVfUkVEKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NSR0JX
UklURUVOQUJMRSwgRkFMU0UpOwotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJ
U1NPUlRFU1RFTkFCTEUsIEZBTFNFKTsKLQotICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAs
IEQzRFNBTVBfTUFHRklMVEVSLCBEM0RURVhGX1BPSU5UKTsKLSAgICBkZXZpY2UtPlNldFNhbXBs
ZXJTdGF0ZSgwLCBEM0RTQU1QX01JTkZJTFRFUiwgRDNEVEVYRl9QT0lOVCk7Ci0gICAgZGV2aWNl
LT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9TUkdCVEVYVFVSRSwgRkFMU0UpOwotICAgIGRl
dmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfQUREUkVTU1UsIEQzRFRBRERSRVNTX0NM
QU1QKTsKLSAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX0FERFJFU1NWLCBE
M0RUQUREUkVTU19DTEFNUCk7Ci0KLSAgICBSRUNUIHNjaXNzb3JSZWN0ID0gezB9OyAgIC8vIFNj
aXNzb3JpbmcgaXMgZGlzYWJsZWQgZm9yIGZsaXBwaW5nLCBidXQgd2UgbmVlZCB0aGlzIHRvIGNh
cHR1cmUgYW5kIHJlc3RvcmUgdGhlIG9sZCByZWN0YW5nbGUKLSAgICBkZXZpY2UtPlNldFNjaXNz
b3JSZWN0KCZzY2lzc29yUmVjdCk7Ci0KLSAgICBmb3IoaW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9W
RVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAgICAgICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3Vy
Y2VGcmVxKGksIDEpOwotICAgIH0KLX0KLQotdm9pZCBCbGl0OjpyZW5kZXIoKQotewotICAgIElE
aXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0KLSAgICBI
UkVTVUxUIGhyID0gZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2UoMCwgbVF1YWRWZXJ0ZXhCdWZmZXIs
IDAsIDIgKiBzaXplb2YoZmxvYXQpKTsKLSAgICBociA9IGRldmljZS0+U2V0VmVydGV4RGVjbGFy
YXRpb24obVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbik7Ci0KLSAgICBtUmVuZGVyZXItPnN0YXJ0U2Nl
bmUoKTsKLSAgICBociA9IGRldmljZS0+RHJhd1ByaW1pdGl2ZShEM0RQVF9UUklBTkdMRVNUUklQ
LCAwLCAyKTsKLX0KLQotdm9pZCBCbGl0OjpzYXZlU3RhdGUoKQotewotICAgIElEaXJlY3QzRERl
dmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0KLSAgICBIUkVTVUxUIGhy
OwotCi0gICAgZGV2aWNlLT5HZXREZXB0aFN0ZW5jaWxTdXJmYWNlKCZtU2F2ZWREZXB0aFN0ZW5j
aWwpOwotICAgIGRldmljZS0+R2V0UmVuZGVyVGFyZ2V0KDAsICZtU2F2ZWRSZW5kZXJUYXJnZXQp
OwotCi0gICAgaWYgKG1TYXZlZFN0YXRlQmxvY2sgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIGhy
ID0gZGV2aWNlLT5CZWdpblN0YXRlQmxvY2soKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRCho
cikgfHwgaHIgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgaHIgPT0gRV9PVVRPRk1FTU9S
WSk7Ci0KLSAgICAgICAgc2V0Q29tbW9uQmxpdFN0YXRlKCk7Ci0KLSAgICAgICAgc3RhdGljIGNv
bnN0IGZsb2F0IGR1bW15Q29uc3RbNF0gPSB7IDAsIDAsIDAsIDAgfTsKLQotICAgICAgICBkZXZp
Y2UtPlNldFZlcnRleFNoYWRlcihOVUxMKTsKLSAgICAgICAgZGV2aWNlLT5TZXRWZXJ0ZXhTaGFk
ZXJDb25zdGFudEYoMCwgZHVtbXlDb25zdCwgMSk7Ci0gICAgICAgIGRldmljZS0+U2V0UGl4ZWxT
aGFkZXIoTlVMTCk7Ci0gICAgICAgIGRldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYoMCwg
ZHVtbXlDb25zdCwgMSk7Ci0KLSAgICAgICAgRDNEVklFV1BPUlQ5IGR1bW15VnA7Ci0gICAgICAg
IGR1bW15VnAuWCA9IDA7Ci0gICAgICAgIGR1bW15VnAuWSA9IDA7Ci0gICAgICAgIGR1bW15VnAu
V2lkdGggPSAxOwotICAgICAgICBkdW1teVZwLkhlaWdodCA9IDE7Ci0gICAgICAgIGR1bW15VnAu
TWluWiA9IDA7Ci0gICAgICAgIGR1bW15VnAuTWF4WiA9IDE7Ci0KLSAgICAgICAgZGV2aWNlLT5T
ZXRWaWV3cG9ydCgmZHVtbXlWcCk7Ci0KLSAgICAgICAgZGV2aWNlLT5TZXRUZXh0dXJlKDAsIE5V
TEwpOwotCi0gICAgICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlKDAsIG1RdWFkVmVydGV4QnVm
ZmVyLCAwLCAwKTsKLQotICAgICAgICBkZXZpY2UtPlNldFZlcnRleERlY2xhcmF0aW9uKG1RdWFk
VmVydGV4RGVjbGFyYXRpb24pOwotCi0gICAgICAgIGhyID0gZGV2aWNlLT5FbmRTdGF0ZUJsb2Nr
KCZtU2F2ZWRTdGF0ZUJsb2NrKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikgfHwgaHIg
PT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgaHIgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAg
fQotCi0gICAgQVNTRVJUKG1TYXZlZFN0YXRlQmxvY2sgIT0gTlVMTCk7Ci0KLSAgICBpZiAobVNh
dmVkU3RhdGVCbG9jayAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgaHIgPSBtU2F2ZWRTdGF0ZUJs
b2NrLT5DYXB0dXJlKCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICB9Ci19
Ci0KLXZvaWQgQmxpdDo6cmVzdG9yZVN0YXRlKCkKLXsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpk
ZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0gICAgZGV2aWNlLT5TZXREZXB0aFN0
ZW5jaWxTdXJmYWNlKG1TYXZlZERlcHRoU3RlbmNpbCk7Ci0gICAgaWYgKG1TYXZlZERlcHRoU3Rl
bmNpbCAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgbVNhdmVkRGVwdGhTdGVuY2lsLT5SZWxlYXNl
KCk7Ci0gICAgICAgIG1TYXZlZERlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgfQotCi0gICAgZGV2
aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgbVNhdmVkUmVuZGVyVGFyZ2V0KTsKLSAgICBpZiAobVNh
dmVkUmVuZGVyVGFyZ2V0ICE9IE5VTEwpCi0gICAgewotICAgICAgICBtU2F2ZWRSZW5kZXJUYXJn
ZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgbVNhdmVkUmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICB9
Ci0KLSAgICBBU1NFUlQobVNhdmVkU3RhdGVCbG9jayAhPSBOVUxMKTsKLQotICAgIGlmIChtU2F2
ZWRTdGF0ZUJsb2NrICE9IE5VTEwpCi0gICAgewotICAgICAgICBtU2F2ZWRTdGF0ZUJsb2NrLT5B
cHBseSgpOwotICAgIH0KLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9CbGl0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0JsaXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMzcxODAyOGU2NjJkM2Q1NjFjNzZjZDBjYTZmNTJlODEzZTY3MjVjMy4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0JsaXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDk0
ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIEJsaXQuY3BwOiBTdXJmYWNlIGNvcHkg
dXRpbGl0eSBjbGFzcy4KLQotI2lmbmRlZiBMSUJHTEVTVjJfQkxJVF9IXwotI2RlZmluZSBMSUJH
TEVTVjJfQkxJVF9IXwotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLQotbmFtZXNw
YWNlIGdsCi17Ci1jbGFzcyBGcmFtZWJ1ZmZlcjsKLX0KLQotbmFtZXNwYWNlIHJ4Ci17Ci1jbGFz
cyBSZW5kZXJlcjk7Ci1jbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOwotY2xhc3MgVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlOwotCi1jbGFzcyBCbGl0Ci17Ci0gIHB1YmxpYzoKLSAg
ICBleHBsaWNpdCBCbGl0KFJlbmRlcmVyOSAqcmVuZGVyZXIpOwotICAgIH5CbGl0KCk7Ci0KLSAg
ICAvLyBDb3B5IGZyb20gc291cmNlIHN1cmZhY2UgdG8gZGVzdCBzdXJmYWNlLgotICAgIC8vIHNv
dXJjZVJlY3QsIHhvZmZzZXQsIHlvZmZzZXQgYXJlIGluIEQzRCBjb29yZGluYXRlcyAoMCwwIGlu
IHVwcGVyLWxlZnQpCi0gICAgYm9vbCBjb3B5KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIs
IGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBHTGlu
dCBsZXZlbCk7Ci0gICAgYm9vbCBjb3B5KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNv
bnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsKTsKLQotICAgIC8vIENvcHkgZnJvbSBzb3VyY2Ugc3VyZmFj
ZSB0byBkZXN0IHN1cmZhY2UuCi0gICAgLy8gc291cmNlUmVjdCwgeG9mZnNldCwgeW9mZnNldCBh
cmUgaW4gRDNEIGNvb3JkaW5hdGVzICgwLDAgaW4gdXBwZXItbGVmdCkKLSAgICAvLyBzb3VyY2Ug
aXMgaW50ZXJwcmV0ZWQgYXMgUkdCQSBhbmQgZGVzdEZvcm1hdCBzcGVjaWZpZXMgdGhlIGRlc2ly
ZWQgcmVzdWx0IGZvcm1hdC4gRm9yIGV4YW1wbGUsIGlmIGRlc3RGb3JtYXQgPSBHTF9SR0IsIHRo
ZSBhbHBoYSBjaGFubmVsIHdpbGwgYmUgZm9yY2VkIHRvIDAuCi0gICAgYm9vbCBmb3JtYXRDb252
ZXJ0KElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdM
ZW51bSBkZXN0Rm9ybWF0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBJRGlyZWN0M0RT
dXJmYWNlOSAqZGVzdCk7Ci0KLSAgICAvLyAyeDIgYm94IGZpbHRlciBzYW1wbGUgZnJvbSBzb3Vy
Y2UgdG8gZGVzdC4KLSAgICAvLyBSZXF1aXJlcyB0aGF0IHNvdXJjZSBpcyBSR0IoQSkgYW5kIGRl
c3QgaGFzIHRoZSBzYW1lIGZvcm1hdCBhcyBzb3VyY2UuCi0gICAgYm9vbCBib3hGaWx0ZXIoSURp
cmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpOwotCi0gIHBy
aXZhdGU6Ci0gICAgcng6OlJlbmRlcmVyOSAqbVJlbmRlcmVyOwotCi0gICAgSURpcmVjdDNEVmVy
dGV4QnVmZmVyOSAqbVF1YWRWZXJ0ZXhCdWZmZXI7Ci0gICAgSURpcmVjdDNEVmVydGV4RGVjbGFy
YXRpb245ICptUXVhZFZlcnRleERlY2xhcmF0aW9uOwotCi0gICAgdm9pZCBpbml0R2VvbWV0cnko
KTsKLQotICAgIGJvb2wgc2V0Rm9ybWF0Q29udmVydFNoYWRlcnMoR0xlbnVtIGRlc3RGb3JtYXQp
OwotCi0gICAgYm9vbCBjb3B5KElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGNvbnN0IFJFQ1Qg
JnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCk7Ci0gICAgSURpcmVjdDNEVGV4dHVyZTkgKmNv
cHlTdXJmYWNlVG9UZXh0dXJlKElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlLCBjb25zdCBSRUNU
ICZzb3VyY2VSZWN0KTsKLSAgICB2b2lkIHNldFZpZXdwb3J0KGNvbnN0IFJFQ1QgJnNvdXJjZVJl
Y3QsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQpOwotICAgIHZvaWQgc2V0Q29tbW9uQmxp
dFN0YXRlKCk7Ci0gICAgUkVDVCBnZXRTdXJmYWNlUmVjdChJRGlyZWN0M0RTdXJmYWNlOSAqc3Vy
ZmFjZSkgY29uc3Q7Ci0KLSAgICAvLyBUaGlzIGVudW0gaXMgdXNlZCB0byBpbmRleCBtQ29tcGls
ZWRTaGFkZXJzIGFuZCBtU2hhZGVyU291cmNlLgotICAgIGVudW0gU2hhZGVySWQKLSAgICB7Ci0g
ICAgICAgIFNIQURFUl9WU19TVEFOREFSRCwKLSAgICAgICAgU0hBREVSX1ZTX0ZMSVBZLAotICAg
ICAgICBTSEFERVJfUFNfUEFTU1RIUk9VR0gsCi0gICAgICAgIFNIQURFUl9QU19MVU1JTkFOQ0Us
Ci0gICAgICAgIFNIQURFUl9QU19DT01QT05FTlRNQVNLLAotICAgICAgICBTSEFERVJfQ09VTlQK
LSAgICB9OwotCi0gICAgLy8gVGhpcyBhY3R1YWxseSBjb250YWlucyBJRGlyZWN0M0RWZXJ0ZXhT
aGFkZXI5IG9yIElEaXJlY3QzRFBpeGVsU2hhZGVyOSBjYXN0ZWQgdG8gSVVua25vd24uCi0gICAg
SVVua25vd24gKm1Db21waWxlZFNoYWRlcnNbU0hBREVSX0NPVU5UXTsKLQotICAgIHRlbXBsYXRl
IDxjbGFzcyBEM0RTaGFkZXJUeXBlPgotICAgIGJvb2wgc2V0U2hhZGVyKFNoYWRlcklkIHNvdXJj
ZSwgY29uc3QgY2hhciAqcHJvZmlsZSwKLSAgICAgICAgICAgICAgICAgICBEM0RTaGFkZXJUeXBl
ICooUmVuZGVyZXI5OjoqY3JlYXRlU2hhZGVyKShjb25zdCBEV09SRCAqLCBzaXplX3QgbGVuZ3Ro
KSwKLSAgICAgICAgICAgICAgICAgICBIUkVTVUxUIChXSU5BUEkgSURpcmVjdDNERGV2aWNlOTo6
KnNldFNoYWRlcikoRDNEU2hhZGVyVHlwZSopKTsKLQotICAgIGJvb2wgc2V0VmVydGV4U2hhZGVy
KFNoYWRlcklkIHNoYWRlcik7Ci0gICAgYm9vbCBzZXRQaXhlbFNoYWRlcihTaGFkZXJJZCBzaGFk
ZXIpOwotICAgIHZvaWQgcmVuZGVyKCk7Ci0KLSAgICB2b2lkIHNhdmVTdGF0ZSgpOwotICAgIHZv
aWQgcmVzdG9yZVN0YXRlKCk7Ci0gICAgSURpcmVjdDNEU3RhdGVCbG9jazkgKm1TYXZlZFN0YXRl
QmxvY2s7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKm1TYXZlZFJlbmRlclRhcmdldDsKLSAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqbVNhdmVkRGVwdGhTdGVuY2lsOwotCi0gICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKEJsaXQpOwotfTsKLX0KLQotI2VuZGlmICAgLy8gTElCR0xFU1YyX0JMSVRf
SF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvQnVmZmVyU3RvcmFnZTExLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZTExLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMzY0N2Q4YTg5ODU1NGI5ODQ3N2I2ZmQ0OGVhODM3YzZkZjhiYmEzYi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UxMS5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwzNTggKzAsMCBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLQotLy8gQnVmZmVyU3RvcmFnZTExLmNwcCBEZWZpbmVzIHRoZSBCdWZmZXJT
dG9yYWdlMTEgY2xhc3MuCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3Rv
cmFnZTExLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvUmVuZGVyZXIxMS5oIgotCi1uYW1lc3BhY2UgcngKLXsKLQotQnVmZmVyU3Rv
cmFnZTExOjpCdWZmZXJTdG9yYWdlMTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIpCi17Ci0gICAgbVJl
bmRlcmVyID0gcmVuZGVyZXI7Ci0KLSAgICBtU3RhZ2luZ0J1ZmZlciA9IE5VTEw7Ci0gICAgbVN0
YWdpbmdCdWZmZXJTaXplID0gMDsKLQotICAgIG1CdWZmZXIgPSBOVUxMOwotICAgIG1CdWZmZXJT
aXplID0gMDsKLQotICAgIG1TaXplID0gMDsKLQotICAgIG1SZXNvbHZlZERhdGEgPSBOVUxMOwot
ICAgIG1SZXNvbHZlZERhdGFTaXplID0gMDsKLSAgICBtUmVzb2x2ZWREYXRhVmFsaWQgPSBmYWxz
ZTsKLQotICAgIG1SZWFkVXNhZ2VDb3VudCA9IDA7Ci0gICAgbVdyaXRlVXNhZ2VDb3VudCA9IDA7
Ci19Ci0KLUJ1ZmZlclN0b3JhZ2UxMTo6fkJ1ZmZlclN0b3JhZ2UxMSgpCi17Ci0gICAgaWYgKG1T
dGFnaW5nQnVmZmVyKQotICAgIHsKLSAgICAgICAgbVN0YWdpbmdCdWZmZXItPlJlbGVhc2UoKTsK
LSAgICAgICAgbVN0YWdpbmdCdWZmZXIgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtQnVmZmVy
KQotICAgIHsKLSAgICAgICAgbUJ1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtQnVmZmVyID0g
TlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVJlc29sdmVkRGF0YSkKLSAgICB7Ci0gICAgICAgIGZy
ZWUobVJlc29sdmVkRGF0YSk7Ci0gICAgICAgIG1SZXNvbHZlZERhdGEgPSBOVUxMOwotICAgIH0K
LX0KLQotQnVmZmVyU3RvcmFnZTExICpCdWZmZXJTdG9yYWdlMTE6Om1ha2VCdWZmZXJTdG9yYWdl
MTEoQnVmZmVyU3RvcmFnZSAqYnVmZmVyU3RvcmFnZSkKLXsKLSAgICBBU1NFUlQoSEFTX0RZTkFN
SUNfVFlQRShCdWZmZXJTdG9yYWdlMTEqLCBidWZmZXJTdG9yYWdlKSk7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PEJ1ZmZlclN0b3JhZ2UxMSo+KGJ1ZmZlclN0b3JhZ2UpOwotfQotCi12b2lkICpC
dWZmZXJTdG9yYWdlMTE6OmdldERhdGEoKQotewotICAgIGlmICghbVJlc29sdmVkRGF0YVZhbGlk
KQotICAgIHsKLSAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERl
dmljZSgpOwotICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVy
LT5nZXREZXZpY2VDb250ZXh0KCk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0OwotCi0gICAgICAg
IGlmICghbVN0YWdpbmdCdWZmZXIgfHwgbVN0YWdpbmdCdWZmZXJTaXplIDwgbUJ1ZmZlclNpemUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtU3RhZ2luZ0J1ZmZlcikKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBtU3RhZ2luZ0J1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICAg
ICAgICAgIG1TdGFnaW5nQnVmZmVyID0gTlVMTDsKLSAgICAgICAgICAgICAgICBtU3RhZ2luZ0J1
ZmZlclNpemUgPSAwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBEM0QxMV9CVUZGRVJf
REVTQyBidWZmZXJEZXNjOwotICAgICAgICAgICAgYnVmZmVyRGVzYy5CeXRlV2lkdGggPSBtU2l6
ZTsKLSAgICAgICAgICAgIGJ1ZmZlckRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9TVEFHSU5HOwot
ICAgICAgICAgICAgYnVmZmVyRGVzYy5CaW5kRmxhZ3MgPSAwOwotICAgICAgICAgICAgYnVmZmVy
RGVzYy5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfUkVBRCB8IEQzRDExX0NQVV9B
Q0NFU1NfV1JJVEU7Ci0gICAgICAgICAgICBidWZmZXJEZXNjLk1pc2NGbGFncyA9IDA7Ci0gICAg
ICAgICAgICBidWZmZXJEZXNjLlN0cnVjdHVyZUJ5dGVTdHJpZGUgPSAwOwotCi0gICAgICAgICAg
ICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmYnVmZmVyRGVzYywgTlVMTCwgJm1TdGFn
aW5nQnVmZmVyKTsKLSAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksICh2
b2lkKilOVUxMKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbVN0YWdpbmdCdWZmZXJT
aXplID0gYnVmZmVyRGVzYy5CeXRlV2lkdGg7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW1S
ZXNvbHZlZERhdGEgfHwgbVJlc29sdmVkRGF0YVNpemUgPCBtQnVmZmVyU2l6ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgZnJlZShtUmVzb2x2ZWREYXRhKTsKLSAgICAgICAgICAgIG1SZXNvbHZl
ZERhdGEgPSBtYWxsb2MobVNpemUpOwotICAgICAgICAgICAgbVJlc29sdmVkRGF0YVNpemUgPSBt
U2l6ZTsKLSAgICAgICAgfQotCi0gICAgICAgIEQzRDExX0JPWCBzcmNCb3g7Ci0gICAgICAgIHNy
Y0JveC5sZWZ0ID0gMDsKLSAgICAgICAgc3JjQm94LnJpZ2h0ID0gbVNpemU7Ci0gICAgICAgIHNy
Y0JveC50b3AgPSAwOwotICAgICAgICBzcmNCb3guYm90dG9tID0gMTsKLSAgICAgICAgc3JjQm94
LmZyb250ID0gMDsKLSAgICAgICAgc3JjQm94LmJhY2sgPSAxOwotCi0gICAgICAgIGNvbnRleHQt
PkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihtU3RhZ2luZ0J1ZmZlciwgMCwgMCwgMCwgMCwgbUJ1ZmZl
ciwgMCwgJnNyY0JveCk7Ci0KLSAgICAgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBl
ZFJlc291cmNlOwotICAgICAgICByZXN1bHQgPSBjb250ZXh0LT5NYXAobVN0YWdpbmdCdWZmZXIs
IDAsIEQzRDExX01BUF9SRUFELCAwLCAmbWFwcGVkUmVzb3VyY2UpOwotICAgICAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgKHZvaWQqKU5VTEwpOwotICAgICAgICB9Ci0KLSAgICAgICAgbWVtY3B5
KG1SZXNvbHZlZERhdGEsIG1hcHBlZFJlc291cmNlLnBEYXRhLCBtU2l6ZSk7Ci0KLSAgICAgICAg
Y29udGV4dC0+VW5tYXAobVN0YWdpbmdCdWZmZXIsIDApOwotCi0gICAgICAgIG1SZXNvbHZlZERh
dGFWYWxpZCA9IHRydWU7Ci0gICAgfQotCi0gICAgbVJlYWRVc2FnZUNvdW50ID0gMDsKLQotICAg
IHJldHVybiBtUmVzb2x2ZWREYXRhOwotfQotCi12b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6c2V0RGF0
YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNl
dCkKLXsKLSAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7
Ci0gICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNl
Q29udGV4dCgpOwotICAgIEhSRVNVTFQgcmVzdWx0OwotCi0gICAgdW5zaWduZWQgaW50IHJlcXVp
cmVkQnVmZmVyU2l6ZSA9IHNpemUgKyBvZmZzZXQ7Ci0gICAgdW5zaWduZWQgaW50IHJlcXVpcmVk
U3RhZ2luZ1NpemUgPSBzaXplOwotICAgIGJvb2wgZGlyZWN0SW5pdGlhbGl6YXRpb24gPSBvZmZz
ZXQgPT0gMCAmJiAoIW1CdWZmZXIgfHwgbUJ1ZmZlclNpemUgPCBzaXplICsgb2Zmc2V0KTsKLQot
ICAgIGlmICghZGlyZWN0SW5pdGlhbGl6YXRpb24pCi0gICAgewotICAgICAgICBpZiAoIW1TdGFn
aW5nQnVmZmVyIHx8IG1TdGFnaW5nQnVmZmVyU2l6ZSA8IHJlcXVpcmVkU3RhZ2luZ1NpemUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtU3RhZ2luZ0J1ZmZlcikKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBtU3RhZ2luZ0J1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICAgICAg
ICAgIG1TdGFnaW5nQnVmZmVyID0gTlVMTDsKLSAgICAgICAgICAgICAgICBtU3RhZ2luZ0J1ZmZl
clNpemUgPSAwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBEM0QxMV9CVUZGRVJfREVT
QyBidWZmZXJEZXNjOwotICAgICAgICAgICAgYnVmZmVyRGVzYy5CeXRlV2lkdGggPSBzaXplOwot
ICAgICAgICAgICAgYnVmZmVyRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX1NUQUdJTkc7Ci0gICAg
ICAgICAgICBidWZmZXJEZXNjLkJpbmRGbGFncyA9IDA7Ci0gICAgICAgICAgICBidWZmZXJEZXNj
LkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19SRUFEIHwgRDNEMTFfQ1BVX0FDQ0VT
U19XUklURTsKLSAgICAgICAgICAgIGJ1ZmZlckRlc2MuTWlzY0ZsYWdzID0gMDsKLSAgICAgICAg
ICAgIGJ1ZmZlckRlc2MuU3RydWN0dXJlQnl0ZVN0cmlkZSA9IDA7Ci0KLSAgICAgICAgICAgIGlm
IChkYXRhKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEQzRDExX1NVQlJFU09VUkNF
X0RBVEEgaW5pdGlhbERhdGE7Ci0gICAgICAgICAgICAgICAgaW5pdGlhbERhdGEucFN5c01lbSA9
IGRhdGE7Ci0gICAgICAgICAgICAgICAgaW5pdGlhbERhdGEuU3lzTWVtUGl0Y2ggPSBzaXplOwot
ICAgICAgICAgICAgICAgIGluaXRpYWxEYXRhLlN5c01lbVNsaWNlUGl0Y2ggPSAwOwotCi0gICAg
ICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVCdWZmZXIoJmJ1ZmZlckRlc2MsICZp
bml0aWFsRGF0YSwgJm1TdGFnaW5nQnVmZmVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZUJ1ZmZlcigmYnVmZmVyRGVzYywgTlVMTCwgJm1TdGFnaW5nQnVmZmVyKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1TdGFnaW5nQnVmZmVyU2l6ZSA9IHNpemU7Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZSBpZiAoZGF0YSkKLSAgICAgICAgewotICAgICAgICAgICAgRDNE
MTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwotICAgICAgICAgICAgcmVzdWx0
ID0gY29udGV4dC0+TWFwKG1TdGFnaW5nQnVmZmVyLCAwLCBEM0QxMV9NQVBfV1JJVEUsIDAsICZt
YXBwZWRSZXNvdXJjZSk7Ci0gICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbWVtY3B5KG1hcHBlZFJlc291cmNlLnBE
YXRhLCBkYXRhLCBzaXplKTsKLQotICAgICAgICAgICAgY29udGV4dC0+VW5tYXAobVN0YWdpbmdC
dWZmZXIsIDApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFtQnVmZmVyIHx8IG1CdWZm
ZXJTaXplIDwgc2l6ZSArIG9mZnNldCkKLSAgICB7Ci0gICAgICAgIEQzRDExX0JVRkZFUl9ERVND
IGJ1ZmZlckRlc2M7Ci0gICAgICAgIGJ1ZmZlckRlc2MuQnl0ZVdpZHRoID0gcmVxdWlyZWRCdWZm
ZXJTaXplOwotICAgICAgICBidWZmZXJEZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsK
LSAgICAgICAgYnVmZmVyRGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1ZFUlRFWF9CVUZGRVIg
fCBEM0QxMV9CSU5EX0lOREVYX0JVRkZFUjsKLSAgICAgICAgYnVmZmVyRGVzYy5DUFVBY2Nlc3NG
bGFncyA9IDA7Ci0gICAgICAgIGJ1ZmZlckRlc2MuTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgYnVm
ZmVyRGVzYy5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKLQotICAgICAgICBpZiAoZGlyZWN0SW5p
dGlhbGl6YXRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFNpbmNlIHRoZSBkYXRhIHdp
bGwgZmlsbCB0aGUgZW50aXJlIGJ1ZmZlciAoYmVpbmcgbGFyZ2VyIHRoYW4gdGhlIGluaXRpYWwg
c2l6ZSBhbmQgaGF2aW5nCi0gICAgICAgICAgICAvLyBubyBvZmZzZXQpLCB0aGUgYnVmZmVyIGNh
biBiZSBpbml0aWFsaXplZCB3aXRoIHRoZSBkYXRhIHNvIG5vIHN0YWdpbmcgYnVmZmVyIGlzIHJl
cXVpcmVkCi0KLSAgICAgICAgICAgIC8vIE5vIGxvbmdlciBuZWVkIHRoZSBvbGQgYnVmZmVyCi0g
ICAgICAgICAgICBpZiAobUJ1ZmZlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBt
QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgbUJ1ZmZlciA9IE5VTEw7Ci0gICAg
ICAgICAgICAgICAgbUJ1ZmZlclNpemUgPSAwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAoZGF0YSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBEM0QxMV9TVUJSRVNP
VVJDRV9EQVRBIGluaXRpYWxEYXRhOwotICAgICAgICAgICAgICAgIGluaXRpYWxEYXRhLnBTeXNN
ZW0gPSBkYXRhOwotICAgICAgICAgICAgICAgIGluaXRpYWxEYXRhLlN5c01lbVBpdGNoID0gc2l6
ZTsKLSAgICAgICAgICAgICAgICBpbml0aWFsRGF0YS5TeXNNZW1TbGljZVBpdGNoID0gMDsKLQot
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJEZXNj
LCAmaW5pdGlhbERhdGEsICZtQnVmZmVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZUJ1ZmZlcigmYnVmZmVyRGVzYywgTlVMTCwgJm1CdWZmZXIpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChtQnVmZmVyICYmIG9mZnNldCA+IDApCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIC8vIElmIG9mZnNldCBpcyBncmVhdGVyIHRoYW4gemVybyBhbmQg
dGhlIGJ1ZmZlciBpcyBub24tbnVsbCwgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgZGF0YSBmcm9tCi0g
ICAgICAgICAgICAvLyB0aGUgb2xkIGJ1ZmZlciB1cCB0byBvZmZzZXQKLSAgICAgICAgICAgIElE
M0QxMUJ1ZmZlciAqbmV3QnVmZmVyID0gTlVMTDsKLQotICAgICAgICAgICAgcmVzdWx0ID0gZGV2
aWNlLT5DcmVhdGVCdWZmZXIoJmJ1ZmZlckRlc2MsIE5VTEwsICZuZXdCdWZmZXIpOwotICAgICAg
ICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIEQzRDExX0JPWCBzcmNCb3g7Ci0gICAgICAgICAgICBzcmNCb3gubGVmdCA9IDA7
Ci0gICAgICAgICAgICBzcmNCb3gucmlnaHQgPSBzdGQ6Om1pbihvZmZzZXQsIG1CdWZmZXJTaXpl
KTsKLSAgICAgICAgICAgIHNyY0JveC50b3AgPSAwOwotICAgICAgICAgICAgc3JjQm94LmJvdHRv
bSA9IDE7Ci0gICAgICAgICAgICBzcmNCb3guZnJvbnQgPSAwOwotICAgICAgICAgICAgc3JjQm94
LmJhY2sgPSAxOwotCi0gICAgICAgICAgICBjb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24o
bmV3QnVmZmVyLCAwLCAwLCAwLCAwLCBtQnVmZmVyLCAwLCAmc3JjQm94KTsKLQotICAgICAgICAg
ICAgbUJ1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICAgICAgbUJ1ZmZlciA9IG5ld0J1ZmZlcjsK
LSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFNpbXBs
ZSBjYXNlLCBub3RoaW5nIG5lZWRzIHRvIGJlIGNvcGllZCBmcm9tIHRoZSBvbGQgYnVmZmVyIHRv
IHRoZSBuZXcgb25lLCBqdXN0IGNyZWF0ZQotICAgICAgICAgICAgLy8gYSBuZXcgYnVmZmVyCi0K
LSAgICAgICAgICAgIC8vIE5vIGxvbmdlciBuZWVkIHRoZSBvbGQgYnVmZmVyCi0gICAgICAgICAg
ICBpZiAobUJ1ZmZlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtQnVmZmVyLT5S
ZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgbUJ1ZmZlciA9IE5VTEw7Ci0gICAgICAgICAgICAg
ICAgbUJ1ZmZlclNpemUgPSAwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBDcmVh
dGUgYSBuZXcgYnVmZmVyIGZvciBkYXRhIHN0b3JhZ2UKLSAgICAgICAgICAgIHJlc3VsdCA9IGRl
dmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJEZXNjLCBOVUxMLCAmbUJ1ZmZlcik7Ci0gICAgICAg
ICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIHVwZGF0ZVNlcmlhbCgpOwotICAgICAgICBtQnVmZmVyU2l6ZSA9IGJ1
ZmZlckRlc2MuQnl0ZVdpZHRoOwotICAgIH0KLQotICAgIGlmICghZGlyZWN0SW5pdGlhbGl6YXRp
b24pCi0gICAgewotICAgICAgICBBU1NFUlQobVN0YWdpbmdCdWZmZXIgJiYgbVN0YWdpbmdCdWZm
ZXJTaXplID49IHJlcXVpcmVkU3RhZ2luZ1NpemUpOwotCi0gICAgICAgIC8vIERhdGEgaXMgYWxy
ZWFkeSBwdXQgaW50byB0aGUgc3RhZ2luZyBidWZmZXIsIGNvcHkgaXQgb3ZlciB0byB0aGUgZGF0
YSBidWZmZXIKLSAgICAgICAgRDNEMTFfQk9YIHNyY0JveDsKLSAgICAgICAgc3JjQm94LmxlZnQg
PSAwOwotICAgICAgICBzcmNCb3gucmlnaHQgPSBzaXplOwotICAgICAgICBzcmNCb3gudG9wID0g
MDsKLSAgICAgICAgc3JjQm94LmJvdHRvbSA9IDE7Ci0gICAgICAgIHNyY0JveC5mcm9udCA9IDA7
Ci0gICAgICAgIHNyY0JveC5iYWNrID0gMTsKLQotICAgICAgICBjb250ZXh0LT5Db3B5U3VicmVz
b3VyY2VSZWdpb24obUJ1ZmZlciwgMCwgb2Zmc2V0LCAwLCAwLCBtU3RhZ2luZ0J1ZmZlciwgMCwg
JnNyY0JveCk7Ci0gICAgfQotCi0gICAgbVNpemUgPSBzdGQ6Om1heChtU2l6ZSwgb2Zmc2V0ICsg
c2l6ZSk7Ci0KLSAgICBtV3JpdGVVc2FnZUNvdW50ID0gMDsKLQotICAgIG1SZXNvbHZlZERhdGFW
YWxpZCA9IGZhbHNlOwotfQotCi12b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6Y2xlYXIoKQotewotICAg
IG1SZXNvbHZlZERhdGFWYWxpZCA9IGZhbHNlOwotICAgIG1TaXplID0gMDsKLX0KLQotdW5zaWdu
ZWQgaW50IEJ1ZmZlclN0b3JhZ2UxMTo6Z2V0U2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1T
aXplOwotfQotCi1ib29sIEJ1ZmZlclN0b3JhZ2UxMTo6c3VwcG9ydHNEaXJlY3RCaW5kaW5nKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBCdWZmZXJTdG9yYWdlMTE6Om1h
cmtCdWZmZXJVc2FnZSgpCi17Ci0gICAgbVJlYWRVc2FnZUNvdW50Kys7Ci0gICAgbVdyaXRlVXNh
Z2VDb3VudCsrOwotCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1c2FnZUxpbWl0ID0g
NTsKLQotICAgIGlmIChtUmVhZFVzYWdlQ291bnQgPiB1c2FnZUxpbWl0ICYmIG1SZXNvbHZlZERh
dGEpCi0gICAgewotICAgICAgICBmcmVlKG1SZXNvbHZlZERhdGEpOwotICAgICAgICBtUmVzb2x2
ZWREYXRhID0gTlVMTDsKLSAgICAgICAgbVJlc29sdmVkRGF0YVNpemUgPSAwOwotICAgICAgICBt
UmVzb2x2ZWREYXRhVmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobVJlYWRVc2FnZUNv
dW50ID4gdXNhZ2VMaW1pdCAmJiBtV3JpdGVVc2FnZUNvdW50ID4gdXNhZ2VMaW1pdCAmJiBtU3Rh
Z2luZ0J1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1TdGFnaW5nQnVmZmVyLT5SZWxlYXNlKCk7Ci0g
ICAgICAgIG1TdGFnaW5nQnVmZmVyID0gTlVMTDsKLSAgICAgICAgbVN0YWdpbmdCdWZmZXJTaXpl
ID0gMDsKLSAgICB9Ci19Ci0KLUlEM0QxMUJ1ZmZlciAqQnVmZmVyU3RvcmFnZTExOjpnZXRCdWZm
ZXIoKSBjb25zdAotewotICAgIHJldHVybiBtQnVmZmVyOwotfQotCi19CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3Jh
Z2UxMS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9C
dWZmZXJTdG9yYWdlMTEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjYyMzQ4YjBj
OTM2ZmVkODNhOTA0NWNlMThlYjdhOWEyZDYyODU5Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UxMS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAs
MCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIEJ1ZmZlclN0b3JhZ2UxMS5oIERlZmluZXMgdGhlIEJ1
ZmZlclN0b3JhZ2UxMSBjbGFzcy4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfQlVGRkVS
U1RPUkFHRTExX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9CVUZGRVJTVE9SQUdFMTFf
SF8KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdlLmgiCi0KLW5h
bWVzcGFjZSByeAotewotY2xhc3MgUmVuZGVyZXIxMTsKLQotY2xhc3MgQnVmZmVyU3RvcmFnZTEx
IDogcHVibGljIEJ1ZmZlclN0b3JhZ2UKLXsKLSAgcHVibGljOgotICAgIGV4cGxpY2l0IEJ1ZmZl
clN0b3JhZ2UxMShSZW5kZXJlcjExICpyZW5kZXJlcik7Ci0gICAgdmlydHVhbCB+QnVmZmVyU3Rv
cmFnZTExKCk7Ci0KLSAgICBzdGF0aWMgQnVmZmVyU3RvcmFnZTExICptYWtlQnVmZmVyU3RvcmFn
ZTExKEJ1ZmZlclN0b3JhZ2UgKmJ1ZmZlclN0b3JhZ2UpOwotCi0gICAgdmlydHVhbCB2b2lkICpn
ZXREYXRhKCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldERhdGEoY29uc3Qgdm9pZCogZGF0YSwgdW5z
aWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBvZmZzZXQpOwotICAgIHZpcnR1YWwgdm9pZCBj
bGVhcigpOwotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFNpemUoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHNEaXJlY3RCaW5kaW5nKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2
b2lkIG1hcmtCdWZmZXJVc2FnZSgpOwotCi0gICAgSUQzRDExQnVmZmVyICpnZXRCdWZmZXIoKSBj
b25zdDsKLQotICBwcml2YXRlOgotICAgIFJlbmRlcmVyMTEgKm1SZW5kZXJlcjsKLQotICAgIElE
M0QxMUJ1ZmZlciAqbVN0YWdpbmdCdWZmZXI7Ci0gICAgdW5zaWduZWQgaW50IG1TdGFnaW5nQnVm
ZmVyU2l6ZTsKLQotICAgIElEM0QxMUJ1ZmZlciAqbUJ1ZmZlcjsKLSAgICB1bnNpZ25lZCBpbnQg
bUJ1ZmZlclNpemU7Ci0KLSAgICB1bnNpZ25lZCBpbnQgbVNpemU7Ci0KLSAgICB2b2lkICptUmVz
b2x2ZWREYXRhOwotICAgIHVuc2lnbmVkIGludCBtUmVzb2x2ZWREYXRhU2l6ZTsKLSAgICBib29s
IG1SZXNvbHZlZERhdGFWYWxpZDsKLQotICAgIHVuc2lnbmVkIGludCBtUmVhZFVzYWdlQ291bnQ7
Ci0gICAgdW5zaWduZWQgaW50IG1Xcml0ZVVzYWdlQ291bnQ7Ci19OwotCi19Ci0KLSNlbmRpZiAv
LyBMSUJHTEVTVjJfUkVOREVSRVJfQlVGRkVSU1RPUkFHRTExX0hfCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2U5
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQnVm
ZmVyU3RvcmFnZTkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjllN2E4OTIx
ZTNmM2ViMGY3ZTY5ZDNmNWI2ZjcxYzNmOTlmYTM5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZTkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAs
MCBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEz
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gQnVmZmVy
U3RvcmFnZTkuY3BwIERlZmluZXMgdGhlIEJ1ZmZlclN0b3JhZ2U5IGNsYXNzLgotCi0jaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2U5LmgiCi0jaW5jbHVkZSAiY29tbW9u
L2RlYnVnLmgiCi0KLW5hbWVzcGFjZSByeAotewotCi1CdWZmZXJTdG9yYWdlOTo6QnVmZmVyU3Rv
cmFnZTkoKQotewotICAgIG1NZW1vcnkgPSBOVUxMOwotICAgIG1BbGxvY2F0ZWRTaXplID0gMDsK
LSAgICBtU2l6ZSA9IDA7Ci19Ci0KLUJ1ZmZlclN0b3JhZ2U5Ojp+QnVmZmVyU3RvcmFnZTkoKQot
ewotICAgIGRlbGV0ZVtdIG1NZW1vcnk7Ci19Ci0KLUJ1ZmZlclN0b3JhZ2U5ICpCdWZmZXJTdG9y
YWdlOTo6bWFrZUJ1ZmZlclN0b3JhZ2U5KEJ1ZmZlclN0b3JhZ2UgKmJ1ZmZlclN0b3JhZ2UpCi17
Ci0gICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoQnVmZmVyU3RvcmFnZTkqLCBidWZmZXJTdG9y
YWdlKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEJ1ZmZlclN0b3JhZ2U5Kj4oYnVmZmVyU3Rv
cmFnZSk7Ci19Ci0KLXZvaWQgKkJ1ZmZlclN0b3JhZ2U5OjpnZXREYXRhKCkKLXsKLSAgICByZXR1
cm4gbU1lbW9yeTsKLX0KLQotdm9pZCBCdWZmZXJTdG9yYWdlOTo6c2V0RGF0YShjb25zdCB2b2lk
KiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNldCkKLXsKLSAgICBp
ZiAoIW1NZW1vcnkgfHwgb2Zmc2V0ICsgc2l6ZSA+IG1BbGxvY2F0ZWRTaXplKQotICAgIHsKLSAg
ICAgICAgdW5zaWduZWQgaW50IG5ld0FsbG9jYXRlZFNpemUgPSBvZmZzZXQgKyBzaXplOwotICAg
ICAgICB2b2lkICpuZXdNZW1vcnkgPSBuZXcgY2hhcltuZXdBbGxvY2F0ZWRTaXplXTsKLQotICAg
ICAgICBpZiAob2Zmc2V0ID4gMCAmJiBtTWVtb3J5ICYmIG1BbGxvY2F0ZWRTaXplID4gMCkKLSAg
ICAgICAgewotICAgICAgICAgICAgbWVtY3B5KG5ld01lbW9yeSwgbU1lbW9yeSwgc3RkOjptaW4o
b2Zmc2V0LCBtQWxsb2NhdGVkU2l6ZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZXRlW10g
bU1lbW9yeTsKLSAgICAgICAgbU1lbW9yeSA9IG5ld01lbW9yeTsKLSAgICAgICAgbUFsbG9jYXRl
ZFNpemUgPSBuZXdBbGxvY2F0ZWRTaXplOwotICAgIH0KLQotICAgIG1TaXplID0gc3RkOjptYXgo
bVNpemUsIG9mZnNldCArIHNpemUpOwotICAgIGlmIChkYXRhKQotICAgIHsKLSAgICAgICAgbWVt
Y3B5KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1NZW1vcnkpICsgb2Zmc2V0LCBkYXRhLCBzaXpl
KTsKLSAgICB9Ci19Ci0KLXZvaWQgQnVmZmVyU3RvcmFnZTk6OmNsZWFyKCkKLXsKLSAgICBtU2l6
ZSA9IDA7Ci19Ci0KLXVuc2lnbmVkIGludCBCdWZmZXJTdG9yYWdlOTo6Z2V0U2l6ZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1TaXplOwotfQotCi1ib29sIEJ1ZmZlclN0b3JhZ2U5OjpzdXBwb3J0
c0RpcmVjdEJpbmRpbmcoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9C
dWZmZXJTdG9yYWdlOS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9CdWZmZXJTdG9yYWdlOS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAz
ZTgwMzk2OWJjMzVkNGVhMTExZGEyMjgxZjI1YjNlMTcxZGRjMjM0Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZTkuaAorKysgL2Rldi9udWxsCkBAIC0x
LDQyICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBCdWZmZXJTdG9yYWdlOS5oIERlZmluZXMg
dGhlIEJ1ZmZlclN0b3JhZ2U5IGNsYXNzLgotCi0jaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9C
VUZGRVJTVE9SQUdFOV9IXwotI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfQlVGRkVSU1RPUkFH
RTlfSF8KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdlLmgiCi0K
LW5hbWVzcGFjZSByeAotewotCi1jbGFzcyBCdWZmZXJTdG9yYWdlOSA6IHB1YmxpYyBCdWZmZXJT
dG9yYWdlCi17Ci0gIHB1YmxpYzoKLSAgICBCdWZmZXJTdG9yYWdlOSgpOwotICAgIHZpcnR1YWwg
fkJ1ZmZlclN0b3JhZ2U5KCk7Ci0KLSAgICBzdGF0aWMgQnVmZmVyU3RvcmFnZTkgKm1ha2VCdWZm
ZXJTdG9yYWdlOShCdWZmZXJTdG9yYWdlICpidWZmZXJTdG9yYWdlKTsKLQotICAgIHZpcnR1YWwg
dm9pZCAqZ2V0RGF0YSgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhKGNvbnN0IHZvaWQqIGRh
dGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKLSAgICB2aXJ0dWFs
IHZvaWQgY2xlYXIoKTsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRTaXplKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRGlyZWN0QmluZGluZygpIGNvbnN0OwotCi0gIHBy
aXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEJ1ZmZlclN0b3JhZ2U5KTsKLQot
ICAgIHZvaWQgKm1NZW1vcnk7Ci0gICAgdW5zaWduZWQgaW50IG1BbGxvY2F0ZWRTaXplOwotCi0g
ICAgdW5zaWduZWQgaW50IG1TaXplOwotfTsKLQotfQotCi0jZW5kaWYgLy8gTElCR0xFU1YyX1JF
TkRFUkVSX0JVRkZFUlNUT1JBR0U5X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ZlbmNlMTEuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZTExLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOWQxMWM5YTBmYzgyZThjZTU2MWYwMGYxNDYwNjEwMjRiZmY0MmRj
NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ZlbmNlMTEuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMTM0ICswLDAgQEAKLSNpbmNsdWRlICJwcmVjb21waWxlZC5oIgotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLS8vIEZlbmNlMTEuY3BwOiBEZWZpbmVzIHRoZSByeDo6RmVuY2UxMSBjbGFz
cyB3aGljaCBpbXBsZW1lbnRzIHJ4OjpGZW5jZUltcGwuCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvRmVuY2UxMS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyMTEuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0K
LUZlbmNlMTE6OkZlbmNlMTEocng6OlJlbmRlcmVyMTEgKnJlbmRlcmVyKQotewotICAgIG1SZW5k
ZXJlciA9IHJlbmRlcmVyOwotICAgIG1RdWVyeSA9IE5VTEw7Ci19Ci0KLUZlbmNlMTE6On5GZW5j
ZTExKCkKLXsKLSAgICBpZiAobVF1ZXJ5KQotICAgIHsKLSAgICAgICAgbVF1ZXJ5LT5SZWxlYXNl
KCk7Ci0gICAgICAgIG1RdWVyeSA9IE5VTEw7Ci0gICAgfQotfQotCi1HTGJvb2xlYW4gRmVuY2Ux
MTo6aXNGZW5jZSgpCi17Ci0gICAgLy8gR0xfTlZfZmVuY2Ugc3BlYzoKLSAgICAvLyBBIG5hbWUg
cmV0dXJuZWQgYnkgR2VuRmVuY2VzTlYsIGJ1dCBub3QgeWV0IHNldCB2aWEgU2V0RmVuY2VOViwg
aXMgbm90IHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGZlbmNlLgotICAgIHJldHVybiBtUXVlcnkg
IT0gTlVMTDsKLX0KLQotdm9pZCBGZW5jZTExOjpzZXRGZW5jZShHTGVudW0gY29uZGl0aW9uKQot
ewotICAgIGlmICghbVF1ZXJ5KQotICAgIHsKLSAgICAgICAgRDNEMTFfUVVFUllfREVTQyBxdWVy
eURlc2M7Ci0gICAgICAgIHF1ZXJ5RGVzYy5RdWVyeSA9IEQzRDExX1FVRVJZX0VWRU5UOwotICAg
ICAgICBxdWVyeURlc2MuTWlzY0ZsYWdzID0gMDsKLQotICAgICAgICBpZiAoRkFJTEVEKG1SZW5k
ZXJlci0+Z2V0RGV2aWNlKCktPkNyZWF0ZVF1ZXJ5KCZxdWVyeURlc2MsICZtUXVlcnkpKSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpLT5F
bmQobVF1ZXJ5KTsKLQotICAgIHNldENvbmRpdGlvbihjb25kaXRpb24pOwotICAgIHNldFN0YXR1
cyhHTF9GQUxTRSk7Ci19Ci0KLUdMYm9vbGVhbiBGZW5jZTExOjp0ZXN0RmVuY2UoKQotewotICAg
IGlmIChtUXVlcnkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04sIEdMX1RSVUUpOwotICAgIH0KLQotICAgIEhSRVNVTFQgcmVzdWx0
ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCktPkdldERhdGEobVF1ZXJ5LCBOVUxMLCAw
LCAwKTsKLQotICAgIGlmIChtUmVuZGVyZXItPmlzRGV2aWNlTG9zdCgpKQotICAgIHsKLSAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX1RSVUUpOwotICAgIH0KLQot
ICAgIEFTU0VSVChyZXN1bHQgPT0gU19PSyB8fCByZXN1bHQgPT0gU19GQUxTRSk7Ci0gICAgc2V0
U3RhdHVzKHJlc3VsdCA9PSBTX09LKTsKLSAgICByZXR1cm4gZ2V0U3RhdHVzKCk7Ci19Ci0KLXZv
aWQgRmVuY2UxMTo6ZmluaXNoRmVuY2UoKQotewotICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
IH0KLQotICAgIHdoaWxlICghdGVzdEZlbmNlKCkpCi0gICAgewotICAgICAgICBTbGVlcCgwKTsK
LSAgICB9Ci19Ci0KLXZvaWQgRmVuY2UxMTo6Z2V0RmVuY2VpdihHTGVudW0gcG5hbWUsIEdMaW50
ICpwYXJhbXMpCi17Ci0gICAgaWYgKG1RdWVyeSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgc3dpdGNo
IChwbmFtZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0ZFTkNFX1NUQVRVU19OVjoKLSAgICAgICAg
ewotICAgICAgICAgICAgLy8gR0xfTlZfZmVuY2Ugc3BlYzoKLSAgICAgICAgICAgIC8vIE9uY2Ug
dGhlIHN0YXR1cyBvZiBhIGZlbmNlIGhhcyBiZWVuIGZpbmlzaGVkICh2aWEgRmluaXNoRmVuY2VO
Vikgb3IgdGVzdGVkIGFuZCB0aGUgcmV0dXJuZWQgc3RhdHVzIGlzIFRSVUUgKHZpYSBlaXRoZXIg
VGVzdEZlbmNlTlYKLSAgICAgICAgICAgIC8vIG9yIEdldEZlbmNlaXZOViBxdWVyeWluZyB0aGUg
RkVOQ0VfU1RBVFVTX05WKSwgdGhlIHN0YXR1cyByZW1haW5zIFRSVUUgdW50aWwgdGhlIG5leHQg
U2V0RmVuY2VOViBvZiB0aGUgZmVuY2UuCi0gICAgICAgICAgICBpZiAoZ2V0U3RhdHVzKCkpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcGFyYW1zWzBdID0gR0xfVFJVRTsKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEhSRVNVTFQg
cmVzdWx0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCktPkdldERhdGEobVF1ZXJ5LCBO
VUxMLCAwLCBEM0QxMV9BU1lOQ19HRVREQVRBX0RPTk9URkxVU0gpOwotCi0gICAgICAgICAgICBp
ZiAobVJlbmRlcmVyLT5pc0RldmljZUxvc3QoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBwYXJhbXNbMF0gPSBHTF9UUlVFOwotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VS
VChyZXN1bHQgPT0gU19PSyB8fCByZXN1bHQgPT0gU19GQUxTRSk7Ci0gICAgICAgICAgICBzZXRT
dGF0dXMocmVzdWx0ID09IFNfT0spOwotICAgICAgICAgICAgcGFyYW1zWzBdID0gZ2V0U3RhdHVz
KCk7Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICBjYXNlIEdMX0ZFTkNF
X0NPTkRJVElPTl9OVjoKLSAgICAgICAgcGFyYW1zWzBdID0gZ2V0Q29uZGl0aW9uKCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvRmVuY2UxMS5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZTEx
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1Mzk4YmNhMTQ5MDA2NDdiMDNkZjI3
YTEwMTkxZDkwNjkxOTExMTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9G
ZW5jZTExLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
Ly8gRmVuY2UxMS5oOiBEZWZpbmVzIHRoZSByeDo6RmVuY2UxMSBjbGFzcyB3aGljaCBpbXBsZW1l
bnRzIHJ4OjpGZW5jZUltcGwuCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0ZlbmNlMTFf
SF8KLSNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX0ZlbmNlMTFfSF8KLQotI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9GZW5jZUltcGwuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci1jbGFzcyBS
ZW5kZXJlcjExOwotCi1jbGFzcyBGZW5jZTExIDogcHVibGljIEZlbmNlSW1wbAotewotICBwdWJs
aWM6Ci0gICAgZXhwbGljaXQgRmVuY2UxMShyeDo6UmVuZGVyZXIxMSAqcmVuZGVyZXIpOwotICAg
IHZpcnR1YWwgfkZlbmNlMTEoKTsKLQotICAgIEdMYm9vbGVhbiBpc0ZlbmNlKCk7Ci0gICAgdm9p
ZCBzZXRGZW5jZShHTGVudW0gY29uZGl0aW9uKTsKLSAgICBHTGJvb2xlYW4gdGVzdEZlbmNlKCk7
Ci0gICAgdm9pZCBmaW5pc2hGZW5jZSgpOwotICAgIHZvaWQgZ2V0RmVuY2VpdihHTGVudW0gcG5h
bWUsIEdMaW50ICpwYXJhbXMpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRf
QVNTSUdOKEZlbmNlMTEpOwotCi0gICAgcng6OlJlbmRlcmVyMTEgKm1SZW5kZXJlcjsKLSAgICBJ
RDNEMTFRdWVyeSAqbVF1ZXJ5OwotfTsKLQotfQotCi0jZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRF
UkVSX0ZFTkNFMTFfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvRmVuY2U5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvRmVuY2U5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggODYwNjRkN2U1MmJhZmFlOTc1MTUwODRhODNhYmI2MjhhNGI4YjNmNC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ZlbmNlOS5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwxMzUgKzAsMCBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
Ly8gRmVuY2U5LmNwcDogRGVmaW5lcyB0aGUgcng6OkZlbmNlOSBjbGFzcy4KLQotI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZTkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9yZW5kZXJlcjlfdXRpbHMuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXI5LmgiCi0KLW5hbWVzcGFjZSByeAotewot
Ci1GZW5jZTk6OkZlbmNlOShyeDo6UmVuZGVyZXI5ICpyZW5kZXJlcikKLXsKLSAgICBtUmVuZGVy
ZXIgPSByZW5kZXJlcjsKLSAgICBtUXVlcnkgPSBOVUxMOwotfQotCi1GZW5jZTk6On5GZW5jZTko
KQotewotICAgIGlmIChtUXVlcnkpCi0gICAgewotICAgICAgICBtUmVuZGVyZXItPmZyZWVFdmVu
dFF1ZXJ5KG1RdWVyeSk7Ci0gICAgICAgIG1RdWVyeSA9IE5VTEw7Ci0gICAgfQotfQotCi1HTGJv
b2xlYW4gRmVuY2U5Ojppc0ZlbmNlKCkKLXsKLSAgICAvLyBHTF9OVl9mZW5jZSBzcGVjOgotICAg
IC8vIEEgbmFtZSByZXR1cm5lZCBieSBHZW5GZW5jZXNOViwgYnV0IG5vdCB5ZXQgc2V0IHZpYSBT
ZXRGZW5jZU5WLCBpcyBub3QgdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgZmVuY2UuCi0gICAgcmV0
dXJuIG1RdWVyeSAhPSBOVUxMOwotfQotCi12b2lkIEZlbmNlOTo6c2V0RmVuY2UoR0xlbnVtIGNv
bmRpdGlvbikKLXsKLSAgICBpZiAoIW1RdWVyeSkKLSAgICB7Ci0gICAgICAgIG1RdWVyeSA9IG1S
ZW5kZXJlci0+YWxsb2NhdGVFdmVudFF1ZXJ5KCk7Ci0gICAgICAgIGlmICghbVF1ZXJ5KQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgSFJFU1VMVCByZXN1bHQgPSBtUXVlcnktPklzc3VlKEQz
RElTU1VFX0VORCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgIHNldENv
bmRpdGlvbihjb25kaXRpb24pOwotICAgIHNldFN0YXR1cyhHTF9GQUxTRSk7Ci19Ci0KLUdMYm9v
bGVhbiBGZW5jZTk6OnRlc3RGZW5jZSgpCi17Ci0gICAgaWYgKG1RdWVyeSA9PSBOVUxMKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfVFJV
RSk7Ci0gICAgfQotCi0gICAgSFJFU1VMVCByZXN1bHQgPSBtUXVlcnktPkdldERhdGEoTlVMTCwg
MCwgRDNER0VUREFUQV9GTFVTSCk7Ci0KLSAgICBpZiAoZDNkOTo6aXNEZXZpY2VMb3N0RXJyb3Io
cmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJlci0+bm90aWZ5RGV2aWNlTG9zdCgpOwot
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX1RSVUUpOwotICAg
IH0KLQotICAgIEFTU0VSVChyZXN1bHQgPT0gU19PSyB8fCByZXN1bHQgPT0gU19GQUxTRSk7Ci0g
ICAgc2V0U3RhdHVzKHJlc3VsdCA9PSBTX09LKTsKLSAgICByZXR1cm4gZ2V0U3RhdHVzKCk7Ci19
Ci0KLXZvaWQgRmVuY2U5OjpmaW5pc2hGZW5jZSgpCi17Ci0gICAgaWYgKG1RdWVyeSA9PSBOVUxM
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgfQotCi0gICAgd2hpbGUgKCF0ZXN0RmVuY2UoKSkKLSAgICB7Ci0gICAgICAgIFNsZWVw
KDApOwotICAgIH0KLX0KLQotdm9pZCBGZW5jZTk6OmdldEZlbmNlaXYoR0xlbnVtIHBuYW1lLCBH
TGludCAqcGFyYW1zKQotewotICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIHN3
aXRjaCAocG5hbWUpCi0gICAgewotICAgICAgICBjYXNlIEdMX0ZFTkNFX1NUQVRVU19OVjoKLSAg
ICAgICAgewotICAgICAgICAgICAgLy8gR0xfTlZfZmVuY2Ugc3BlYzoKLSAgICAgICAgICAgIC8v
IE9uY2UgdGhlIHN0YXR1cyBvZiBhIGZlbmNlIGhhcyBiZWVuIGZpbmlzaGVkICh2aWEgRmluaXNo
RmVuY2VOVikgb3IgdGVzdGVkIGFuZCB0aGUgcmV0dXJuZWQgc3RhdHVzIGlzIFRSVUUgKHZpYSBl
aXRoZXIgVGVzdEZlbmNlTlYKLSAgICAgICAgICAgIC8vIG9yIEdldEZlbmNlaXZOViBxdWVyeWlu
ZyB0aGUgRkVOQ0VfU1RBVFVTX05WKSwgdGhlIHN0YXR1cyByZW1haW5zIFRSVUUgdW50aWwgdGhl
IG5leHQgU2V0RmVuY2VOViBvZiB0aGUgZmVuY2UuCi0gICAgICAgICAgICBpZiAoZ2V0U3RhdHVz
KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcGFyYW1zWzBdID0gR0xfVFJVRTsK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVF1ZXJ5LT5HZXREYXRhKE5VTEwsIDAsIDApOwot
Ci0gICAgICAgICAgICBpZiAoZDNkOTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBwYXJhbXNbMF0gPSBHTF9UUlVFOwotICAgICAgICAg
ICAgICAgIG1SZW5kZXJlci0+bm90aWZ5RGV2aWNlTG9zdCgpOwotICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIEFTU0VSVChyZXN1bHQgPT0gU19PSyB8fCByZXN1bHQgPT0gU19GQUxTRSk7Ci0gICAg
ICAgICAgICBzZXRTdGF0dXMocmVzdWx0ID09IFNfT0spOwotICAgICAgICAgICAgcGFyYW1zWzBd
ID0gZ2V0U3RhdHVzKCk7Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgR0xfRkVOQ0VfQ09ORElUSU9OX05WOgotICAgICAgICAgICAgcGFyYW1zWzBdID0gZ2V0
Q29uZGl0aW9uKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgIH0KLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZTkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvRmVuY2U5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDlmMTc2NDFlNTE5YWI0Nzg0MDdlODBjY2JmZDI1MzgwYTNkY2M4YmMuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZTkuaAorKysgL2Rldi9udWxsCkBAIC0x
LDM5ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBGZW5jZTkuaDogRGVmaW5lcyB0aGUgcng6
OkZlbmNlOSBjbGFzcyB3aGljaCBpbXBsZW1lbnRzIHJ4OjpGZW5jZUltcGwuCi0KLSNpZm5kZWYg
TElCR0xFU1YyX1JFTkRFUkVSX0ZFTkNFOV9IXwotI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJf
RkVOQ0U5X0hfCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvRmVuY2VJbXBsLmgiCi0K
LW5hbWVzcGFjZSByeAotewotY2xhc3MgUmVuZGVyZXI5OwotCi1jbGFzcyBGZW5jZTkgOiBwdWJs
aWMgRmVuY2VJbXBsCi17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBGZW5jZTkocng6OlJlbmRl
cmVyOSAqcmVuZGVyZXIpOwotICAgIHZpcnR1YWwgfkZlbmNlOSgpOwotCi0gICAgR0xib29sZWFu
IGlzRmVuY2UoKTsKLSAgICB2b2lkIHNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pOwotICAgIEdM
Ym9vbGVhbiB0ZXN0RmVuY2UoKTsKLSAgICB2b2lkIGZpbmlzaEZlbmNlKCk7Ci0gICAgdm9pZCBn
ZXRGZW5jZWl2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7Ci0KLSAgcHJpdmF0ZToKLSAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRmVuY2U5KTsKLQotICAgIHJ4OjpSZW5kZXJlcjkg
Km1SZW5kZXJlcjsKLSAgICBJRGlyZWN0M0RRdWVyeTkgKm1RdWVyeTsKLX07Ci0KLX0KLQotI2Vu
ZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9GRU5DRTlfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW1hZ2UxMS5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlMTEuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWM4OTIyZDA3M2QwYTQxYTc5MDQ2NGJmMmE4
YWY0YWMzOTQxYzI0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW1hZ2Ux
MS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NTcgKzAsMCBAQAotI2luY2x1ZGUgInByZWNvbXBp
bGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gSW1hZ2UxMS5oOiBJbXBsZW1lbnRzIHRoZSByeDo6
SW1hZ2UxMSBjbGFzcywgd2hpY2ggYWN0cyBhcyB0aGUgaW50ZXJmYWNlIHRvCi0vLyB0aGUgYWN0
dWFsIHVuZGVybHlpbmcgcmVzb3VyY2VzIG9mIGEgVGV4dHVyZQotCi0jaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL1JlbmRlcmVyMTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
SW1hZ2UxMS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZTEx
LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL1JlbmRlcmJ1ZmZlci5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L3JlbmRlcmVyMTFfdXRpbHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZ2VuZXJh
dGVtaXAuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLUltYWdlMTE6OkltYWdlMTEoKQotewotICAg
IG1TdGFnaW5nVGV4dHVyZSA9IE5VTEw7Ci0gICAgbVJlbmRlcmVyID0gTlVMTDsKLSAgICBtRFhH
SUZvcm1hdCA9IERYR0lfRk9STUFUX1VOS05PV047Ci19Ci0KLUltYWdlMTE6On5JbWFnZTExKCkK
LXsKLSAgICBpZiAobVN0YWdpbmdUZXh0dXJlKQotICAgIHsKLSAgICAgICAgbVN0YWdpbmdUZXh0
dXJlLT5SZWxlYXNlKCk7Ci0gICAgfQotfQotCi1JbWFnZTExICpJbWFnZTExOjptYWtlSW1hZ2Ux
MShJbWFnZSAqaW1nKQotewotICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKHJ4OjpJbWFnZTEx
KiwgaW1nKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHJ4OjpJbWFnZTExKj4oaW1nKTsKLX0K
LQotdm9pZCBJbWFnZTExOjpnZW5lcmF0ZU1pcG1hcChJbWFnZTExICpkZXN0LCBJbWFnZTExICpz
cmMpCi17Ci0gICAgQVNTRVJUKHNyYy0+Z2V0RFhHSUZvcm1hdCgpID09IGRlc3QtPmdldERYR0lG
b3JtYXQoKSk7Ci0gICAgQVNTRVJUKHNyYy0+Z2V0V2lkdGgoKSA9PSAxIHx8IHNyYy0+Z2V0V2lk
dGgoKSAvIDIgPT0gZGVzdC0+Z2V0V2lkdGgoKSk7Ci0gICAgQVNTRVJUKHNyYy0+Z2V0SGVpZ2h0
KCkgPT0gMSB8fCBzcmMtPmdldEhlaWdodCgpIC8gMiA9PSBkZXN0LT5nZXRIZWlnaHQoKSk7Ci0K
LSAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgZGVzdE1hcHBlZCwgc3JjTWFwcGVkOwotICAg
IGRlc3QtPm1hcChEM0QxMV9NQVBfV1JJVEUsICZkZXN0TWFwcGVkKTsKLSAgICBzcmMtPm1hcChE
M0QxMV9NQVBfUkVBRCwgJnNyY01hcHBlZCk7Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpz
b3VyY2VEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oc3JjTWFw
cGVkLnBEYXRhKTsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0YSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQgY2hhcio+KGRlc3RNYXBwZWQucERhdGEpOwotCi0gICAgaWYgKHNvdXJjZURh
dGEgJiYgZGVzdERhdGEpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHNyYy0+Z2V0RFhHSUZvcm1h
dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9S
TToKLSAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOgotICAgICAgICAg
ICAgR2VuZXJhdGVNaXA8UjhHOEI4QTg+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQo
KSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5S
b3dQaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERYR0lfRk9STUFU
X0E4X1VOT1JNOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8QTg+KHNyYy0+Z2V0V2lkdGgoKSwg
c3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0
YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBj
YXNlIERYR0lfRk9STUFUX1I4X1VOT1JNOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8Ujg+KHNy
Yy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJv
d1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDoKLSAgICAg
ICAgICAgIEdlbmVyYXRlTWlwPEEzMkIzMkczMlIzMkY+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5n
ZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVz
dE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERY
R0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVDoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPFIzMkcz
MkIzMkY+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3Jj
TWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9B
VDoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPEExNkIxNkcxNlIxNkY+KHNyYy0+Z2V0V2lkdGgo
KSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0
RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICBjYXNlIERYR0lfRk9STUFUX1I4RzhfVU5PUk06Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxS
OEc4PihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01h
cHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfRkxPQVQ6Ci0gICAgICAg
ICAgICBHZW5lcmF0ZU1pcDxSMTZGPihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCks
IHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93
UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
MTZHMTZfRkxPQVQ6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxSMTZHMTZGPihzcmMtPmdldFdp
ZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwg
ZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQ6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1p
cDxSMzJGPihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNy
Y01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQ6Ci0g
ICAgICAgICAgICBHZW5lcmF0ZU1pcDxSMzJHMzJGPihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0
SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RN
YXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotCi0gICAgICAgIGRlc3QtPnVubWFwKCk7Ci0gICAgICAgIHNyYy0+dW5tYXAoKTsKLSAgICB9
Ci0KLSAgICBkZXN0LT5tYXJrRGlydHkoKTsKLX0KLQotYm9vbCBJbWFnZTExOjppc0RpcnR5KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gKG1TdGFnaW5nVGV4dHVyZSAmJiBtRGlydHkpOwotfQotCi1i
b29sIEltYWdlMTE6OnVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3Rv
cmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBUZXh0dXJlU3RvcmFnZTExXzJEICpzdG9yYWdl
MTEgPSBUZXh0dXJlU3RvcmFnZTExXzJEOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yRChzdG9yYWdl
LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgcmV0dXJuIHN0b3JhZ2UxMS0+dXBkYXRlU3Vi
cmVzb3VyY2VMZXZlbChnZXRTdGFnaW5nVGV4dHVyZSgpLCBnZXRTdGFnaW5nU3VicmVzb3VyY2Uo
KSwgbGV2ZWwsIDAsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOwotfQotCi1ib29s
IEltYWdlMTE6OnVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9y
YWdlLCBpbnQgZmFjZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBUZXh0dXJlU3RvcmFnZTExX0N1
YmUgKnN0b3JhZ2UxMSA9IFRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdl
MTFfQ3ViZShzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgcmV0dXJuIHN0b3Jh
Z2UxMS0+dXBkYXRlU3VicmVzb3VyY2VMZXZlbChnZXRTdGFnaW5nVGV4dHVyZSgpLCBnZXRTdGFn
aW5nU3VicmVzb3VyY2UoKSwgbGV2ZWwsIGZhY2UsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQpOwotfQotCi1ib29sIEltYWdlMTE6OnJlZGVmaW5lKFJlbmRlcmVyICpyZW5kZXJlciwg
R0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBib29s
IGZvcmNlUmVsZWFzZSkKLXsKLSAgICBpZiAobVdpZHRoICE9IHdpZHRoIHx8Ci0gICAgICAgIG1I
ZWlnaHQgIT0gaGVpZ2h0IHx8Ci0gICAgICAgIG1JbnRlcm5hbEZvcm1hdCAhPSBpbnRlcm5hbGZv
cm1hdCB8fAotICAgICAgICBmb3JjZVJlbGVhc2UpCi0gICAgewotICAgICAgICBtUmVuZGVyZXIg
PSBSZW5kZXJlcjExOjptYWtlUmVuZGVyZXIxMShyZW5kZXJlcik7Ci0KLSAgICAgICAgbVdpZHRo
ID0gd2lkdGg7Ci0gICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIG1JbnRlcm5hbEZv
cm1hdCA9IGludGVybmFsZm9ybWF0OwotICAgICAgICAvLyBjb21wdXRlIHRoZSBkM2QgZm9ybWF0
IHRoYXQgd2lsbCBiZSB1c2VkCi0gICAgICAgIG1EWEdJRm9ybWF0ID0gZ2xfZDNkMTE6OkNvbnZl
cnRUZXh0dXJlRm9ybWF0KGludGVybmFsZm9ybWF0KTsKLSAgICAgICAgbUFjdHVhbEZvcm1hdCA9
IGQzZDExX2dsOjpDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KG1EWEdJRm9ybWF0KTsKLQot
ICAgICAgICBpZiAobVN0YWdpbmdUZXh0dXJlKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU3Rh
Z2luZ1RleHR1cmUtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1TdGFnaW5nVGV4dHVyZSA9IE5V
TEw7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBJbWFnZTExOjppc1JlbmRlcmFibGVGb3JtYXQo
KSBjb25zdAotewotICAgIHJldHVybiBUZXh0dXJlU3RvcmFnZTExOjpJc1RleHR1cmVGb3JtYXRS
ZW5kZXJhYmxlKG1EWEdJRm9ybWF0KTsKLX0KLQotRFhHSV9GT1JNQVQgSW1hZ2UxMTo6Z2V0RFhH
SUZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgLy8gdGhpcyBzaG91bGQgb25seSBoYXBwZW4gaWYgdGhl
IGltYWdlIGhhc24ndCBiZWVuIHJlZGVmaW5lZCBmaXJzdAotICAgIC8vIHdoaWNoIHdvdWxkIGJl
IGEgYnVnIGJ5IHRoZSBjYWxsZXIKLSAgICBBU1NFUlQobURYR0lGb3JtYXQgIT0gRFhHSV9GT1JN
QVRfVU5LTk9XTik7Ci0KLSAgICByZXR1cm4gbURYR0lGb3JtYXQ7Ci19Ci0KLS8vIFN0b3JlIHRo
ZSBwaXhlbCByZWN0YW5nbGUgZGVzaWduYXRlZCBieSB4b2Zmc2V0LHlvZmZzZXQsd2lkdGgsaGVp
Z2h0IHdpdGggcGl4ZWxzIHN0b3JlZCBhcyBmb3JtYXQvdHlwZSBhdCBpbnB1dAotLy8gaW50byB0
aGUgdGFyZ2V0IHBpeGVsIHJlY3RhbmdsZS4KLXZvaWQgSW1hZ2UxMTo6bG9hZERhdGEoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAq
aW5wdXQpCi17Ci0gICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZEltYWdlOwotICAg
IEhSRVNVTFQgcmVzdWx0ID0gbWFwKEQzRDExX01BUF9XUklURSwgJm1hcHBlZEltYWdlKTsKLSAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIoIkNvdWxkIG5vdCBtYXAg
aW1hZ2UgZm9yIGxvYWRpbmcuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAg
R0xzaXplaSBpbnB1dFBpdGNoID0gZ2w6OkNvbXB1dGVQaXRjaCh3aWR0aCwgbUludGVybmFsRm9y
bWF0LCB1bnBhY2tBbGlnbm1lbnQpOwotICAgIHNpemVfdCBwaXhlbFNpemUgPSBkM2QxMTo6Q29t
cHV0ZVBpeGVsU2l6ZUJpdHMobURYR0lGb3JtYXQpIC8gODsKLSAgICB2b2lkKiBvZmZzZXRNYXBw
ZWREYXRhID0gKHZvaWQqKSgoQllURSAqKW1hcHBlZEltYWdlLnBEYXRhICsgKHlvZmZzZXQgKiBt
YXBwZWRJbWFnZS5Sb3dQaXRjaCArIHhvZmZzZXQgKiBwaXhlbFNpemUpKTsKLQotICAgIHN3aXRj
aCAobUludGVybmFsRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfQUxQSEE4X0VYVDoKLSAg
ICAgICAgbG9hZEFscGhhRGF0YVRvTmF0aXZlKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5j
ZURhdGFUb05hdGl2ZU9yQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFw
cGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEsIGZhbHNlKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX0FMUEhBMzJGX0VYVDoKLSAgICAgICAgbG9hZEFscGhhRmxvYXRE
YXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5S
b3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0UzMkZfRVhUOgotICAgICAgICBsb2FkTHVtaW5hbmNlRmxvYXREYXRhVG9SR0JB
KHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwg
b2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9BTFBIQTE2
Rl9FWFQ6Ci0gICAgICAgIGxvYWRBbHBoYUhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWRE
YXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6Ci0g
ICAgICAgIGxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQ6Ci0g
ICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYURhdGFUb05hdGl2ZU9yQkdSQSh3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERh
dGEsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBI
QTMyRl9FWFQ6Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YVRvUkdCQSh3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNl
dE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FM
UEhBMTZGX0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YVRvUkdC
QSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gs
IG9mZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCOF9P
RVM6Ci0gICAgICAgIGxvYWRSR0JVQnl0ZURhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQjU2NToKLSAgICAgICAgbG9hZFJHQjU2NURh
dGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJv
d1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X1JHQkE4X09FUzoKLSAgICAgICAgbG9hZFJHQkFVQnl0ZURhdGFUb05hdGl2ZSh3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBl
ZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQTQ6Ci0gICAgICAgIGxv
YWRSR0JBNDQ0NERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1h
cHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX1JHQjVfQTE6Ci0gICAgICAgIGxvYWRSR0JBNTU1MURhdGFUb1JHQkEod2lk
dGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZz
ZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JHUkE4X0VYVDoK
LSAgICAgICAgbG9hZEJHUkFEYXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9SR0IzMkZfRVhUOgotICAgICAgICBsb2FkUkdCRmxvYXREYXRh
VG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQ
aXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9S
R0IxNkZfRVhUOgotICAgICAgICBsb2FkUkdCSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBl
ZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQTMyRl9FWFQ6Ci0gICAg
ICAgIGxvYWRSR0JBRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9SR0JBMTZGX0VYVDoKLSAgICAgICAgbG9hZFJHQkFIYWxmRmxv
YXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFn
ZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsgCi0gICAgfQotCi0gICAgdW5tYXAoKTsKLX0KLQotdm9pZCBJ
bWFnZTExOjpsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHZvaWQgKmlucHV0KQotewotICAgIEFTU0VSVCh4b2Zmc2V0ICUgNCA9PSAw
KTsKLSAgICBBU1NFUlQoeW9mZnNldCAlIDQgPT0gMCk7Ci0KLSAgICBEM0QxMV9NQVBQRURfU1VC
UkVTT1VSQ0UgbWFwcGVkSW1hZ2U7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBtYXAoRDNEMTFfTUFQ
X1dSSVRFLCAmbWFwcGVkSW1hZ2UpOwotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0g
ICAgICAgIEVSUigiQ291bGQgbm90IG1hcCBpbWFnZSBmb3IgbG9hZGluZy4iKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIC8vIFNpemUgY29tcHV0YXRpb24gYXNzdW1lcyBhIDR4NCBi
bG9jayBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0Ci0gICAgc2l6ZV90IGJsb2NrU2l6ZSA9IGQz
ZDExOjpDb21wdXRlQmxvY2tTaXplQml0cyhtRFhHSUZvcm1hdCkgLyA4OwotICAgIHZvaWQqIG9m
ZnNldE1hcHBlZERhdGEgPSAodm9pZCopKChCWVRFICopbWFwcGVkSW1hZ2UucERhdGEgKyAoKHlv
ZmZzZXQgLyA0KSAqIG1hcHBlZEltYWdlLlJvd1BpdGNoICsgKHhvZmZzZXQgLyA0KSAqIGJsb2Nr
U2l6ZSkpOwotCi0gICAgR0xzaXplaSBpbnB1dFNpemUgPSBnbDo6Q29tcHV0ZUNvbXByZXNzZWRT
aXplKHdpZHRoLCBoZWlnaHQsIG1JbnRlcm5hbEZvcm1hdCk7Ci0gICAgR0xzaXplaSBpbnB1dFBp
dGNoID0gZ2w6OkNvbXB1dGVDb21wcmVzc2VkUGl0Y2god2lkdGgsIG1JbnRlcm5hbEZvcm1hdCk7
Ci0gICAgaW50IHJvd3MgPSBpbnB1dFNpemUgLyBpbnB1dFBpdGNoOwotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgcm93czsgKytpKQotICAgIHsKLSAgICAgICAgbWVtY3B5KCh2b2lkKikoKEJZVEUq
KW9mZnNldE1hcHBlZERhdGEgKyBpICogbWFwcGVkSW1hZ2UuUm93UGl0Y2gpLCAodm9pZCopKChC
WVRFKilpbnB1dCArIGkgKiBpbnB1dFBpdGNoKSwgaW5wdXRQaXRjaCk7Ci0gICAgfQotCi0gICAg
dW5tYXAoKTsKLX0KLQotdm9pZCBJbWFnZTExOjpjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBn
bDo6RnJhbWVidWZmZXIgKnNvdXJjZSkKLXsKLSAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1
ZmZlciA9IHNvdXJjZS0+Z2V0UmVhZENvbG9yYnVmZmVyKCk7Ci0KLSAgICBpZiAoY29sb3JidWZm
ZXIgJiYgY29sb3JidWZmZXItPmdldEFjdHVhbEZvcm1hdCgpID09IChHTHVpbnQpbUFjdHVhbEZv
cm1hdCkKLSAgICB7Ci0gICAgICAgIC8vIE5vIGNvbnZlcnNpb24gbmVlZGVkLS0gdXNlIGNvcHli
YWNrIGZhc3RwYXRoCi0gICAgICAgIElEM0QxMVRleHR1cmUyRCAqY29sb3JCdWZmZXJUZXh0dXJl
ID0gTlVMTDsKLSAgICAgICAgdW5zaWduZWQgaW50IHN1YnJlc291cmNlSW5kZXggPSAwOwotCi0g
ICAgICAgIGlmIChtUmVuZGVyZXItPmdldFJlbmRlclRhcmdldFJlc291cmNlKGNvbG9yYnVmZmVy
LCAmc3VicmVzb3VyY2VJbmRleCwgJmNvbG9yQnVmZmVyVGV4dHVyZSkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleHR1cmVEZXNjOwotICAgICAgICAgICAg
Y29sb3JCdWZmZXJUZXh0dXJlLT5HZXREZXNjKCZ0ZXh0dXJlRGVzYyk7Ci0KLSAgICAgICAgICAg
IElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLSAgICAgICAg
ICAgIElEM0QxMURldmljZUNvbnRleHQgKmRldmljZUNvbnRleHQgPSBtUmVuZGVyZXItPmdldERl
dmljZUNvbnRleHQoKTsKLQotICAgICAgICAgICAgSUQzRDExVGV4dHVyZTJEKiBzcmNUZXggPSBO
VUxMOwotICAgICAgICAgICAgaWYgKHRleHR1cmVEZXNjLlNhbXBsZURlc2MuQ291bnQgPiAxKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHJlc29s
dmVEZXNjOwotICAgICAgICAgICAgICAgIHJlc29sdmVEZXNjLldpZHRoID0gdGV4dHVyZURlc2Mu
V2lkdGg7Ci0gICAgICAgICAgICAgICAgcmVzb2x2ZURlc2MuSGVpZ2h0ID0gdGV4dHVyZURlc2Mu
SGVpZ2h0OwotICAgICAgICAgICAgICAgIHJlc29sdmVEZXNjLk1pcExldmVscyA9IDE7Ci0gICAg
ICAgICAgICAgICAgcmVzb2x2ZURlc2MuQXJyYXlTaXplID0gMTsKLSAgICAgICAgICAgICAgICBy
ZXNvbHZlRGVzYy5Gb3JtYXQgPSB0ZXh0dXJlRGVzYy5Gb3JtYXQ7Ci0gICAgICAgICAgICAgICAg
cmVzb2x2ZURlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7Ci0gICAgICAgICAgICAgICAgcmVzb2x2
ZURlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKLSAgICAgICAgICAgICAgICByZXNvbHZlRGVz
Yy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7Ci0gICAgICAgICAgICAgICAgcmVzb2x2ZURl
c2MuQmluZEZsYWdzID0gMDsKLSAgICAgICAgICAgICAgICByZXNvbHZlRGVzYy5DUFVBY2Nlc3NG
bGFncyA9IDA7Ci0gICAgICAgICAgICAgICAgcmVzb2x2ZURlc2MuTWlzY0ZsYWdzID0gMDsKLQot
ICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQo
JnJlc29sdmVEZXNjLCBOVUxMLCAmc3JjVGV4KTsKLSAgICAgICAgICAgICAgICBpZiAoRkFJTEVE
KHJlc3VsdCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBFUlIoIkZh
aWxlZCB0byBjcmVhdGUgcmVzb2x2ZSB0ZXh0dXJlIGZvciBJbWFnZTExOjpjb3B5LCBIUkVTVUxU
OiAweCVYLiIsIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBkZXZpY2VDb250ZXh0LT5SZXNvbHZlU3VicmVz
b3VyY2Uoc3JjVGV4LCAwLCBjb2xvckJ1ZmZlclRleHR1cmUsIHN1YnJlc291cmNlSW5kZXgsIHRl
eHR1cmVEZXNjLkZvcm1hdCk7Ci0gICAgICAgICAgICAgICAgc3VicmVzb3VyY2VJbmRleCA9IDA7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgc3JjVGV4ID0gY29sb3JCdWZmZXJUZXh0dXJlOwotICAgICAgICAgICAgICAgIHNy
Y1RleC0+QWRkUmVmKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEQzRDExX0JPWCBz
cmNCb3g7Ci0gICAgICAgICAgICBzcmNCb3gubGVmdCA9IHg7Ci0gICAgICAgICAgICBzcmNCb3gu
cmlnaHQgPSB4ICsgd2lkdGg7Ci0gICAgICAgICAgICBzcmNCb3gudG9wID0geTsKLSAgICAgICAg
ICAgIHNyY0JveC5ib3R0b20gPSB5ICsgaGVpZ2h0OwotICAgICAgICAgICAgc3JjQm94LmZyb250
ID0gMDsKLSAgICAgICAgICAgIHNyY0JveC5iYWNrID0gMTsKLQotICAgICAgICAgICAgZGV2aWNl
Q29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKG1TdGFnaW5nVGV4dHVyZSwgMCwgeG9mZnNl
dCwgeW9mZnNldCwgMCwgc3JjVGV4LCBzdWJyZXNvdXJjZUluZGV4LCAmc3JjQm94KTsKLQotICAg
ICAgICAgICAgc3JjVGV4LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBjb2xvckJ1ZmZlclRleHR1
cmUtPlJlbGVhc2UoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAg
ICAvLyBUaGlzIGZvcm1hdCByZXF1aXJlcyBjb252ZXJzaW9uLCBzbyB3ZSBtdXN0IGNvcHkgdGhl
IHRleHR1cmUgdG8gc3RhZ2luZyBhbmQgbWFudWFsbHkgY29udmVydCB2aWEgcmVhZFBpeGVscwot
ICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkSW1hZ2U7Ci0gICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gbWFwKEQzRDExX01BUF9XUklURSwgJm1hcHBlZEltYWdlKTsKLQotICAg
ICAgICAvLyBkZXRlcm1pbmUgdGhlIG9mZnNldCBjb29yZGluYXRlIGludG8gdGhlIGRlc3RpbmF0
aW9uIGJ1ZmZlcgotICAgICAgICBHTHNpemVpIHJvd09mZnNldCA9IGdsOjpDb21wdXRlUGl4ZWxT
aXplKG1BY3R1YWxGb3JtYXQpICogeG9mZnNldDsKLSAgICAgICAgdm9pZCAqZGF0YU9mZnNldCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihtYXBwZWRJbWFnZS5wRGF0YSkgKyBtYXBwZWRJ
bWFnZS5Sb3dQaXRjaCAqIHlvZmZzZXQgKyByb3dPZmZzZXQ7Ci0KLSAgICAgICAgbVJlbmRlcmVy
LT5yZWFkUGl4ZWxzKHNvdXJjZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZ2w6OkV4dHJhY3RGb3Jt
YXQobUludGVybmFsRm9ybWF0KSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6
RXh0cmFjdFR5cGUobUludGVybmFsRm9ybWF0KSwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIGZhbHNl
LCA0LCBkYXRhT2Zmc2V0KTsKLQotICAgICAgICB1bm1hcCgpOwotICAgIH0KLX0KLQotSUQzRDEx
VGV4dHVyZTJEICpJbWFnZTExOjpnZXRTdGFnaW5nVGV4dHVyZSgpCi17Ci0gICAgY3JlYXRlU3Rh
Z2luZ1RleHR1cmUoKTsKLQotICAgIHJldHVybiBtU3RhZ2luZ1RleHR1cmU7Ci19Ci0KLXVuc2ln
bmVkIGludCBJbWFnZTExOjpnZXRTdGFnaW5nU3VicmVzb3VyY2UoKQotewotICAgIGNyZWF0ZVN0
YWdpbmdUZXh0dXJlKCk7Ci0KLSAgICByZXR1cm4gbVN0YWdpbmdTdWJyZXNvdXJjZTsKLX0KLQot
dm9pZCBJbWFnZTExOjpjcmVhdGVTdGFnaW5nVGV4dHVyZSgpCi17Ci0gICAgaWYgKG1TdGFnaW5n
VGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJRDNEMTFUZXh0
dXJlMkQgKm5ld1RleHR1cmUgPSBOVUxMOwotICAgIGludCBsb2RPZmZzZXQgPSAxOwotICAgIGNv
bnN0IERYR0lfRk9STUFUIGR4Z2lGb3JtYXQgPSBnZXREWEdJRm9ybWF0KCk7Ci0gICAgQVNTRVJU
KCFkM2QxMTo6SXNEZXB0aFN0ZW5jaWxGb3JtYXQoZHhnaUZvcm1hdCkpOyAvLyBXZSBzaG91bGQg
bmV2ZXIgZ2V0IGhlcmUgZm9yIGRlcHRoIHRleHR1cmVzCi0KLSAgICBpZiAobVdpZHRoICE9IDAg
JiYgbUhlaWdodCAhPSAwKQotICAgIHsKLSAgICAgICAgR0xzaXplaSB3aWR0aCA9IG1XaWR0aDsK
LSAgICAgICAgR0xzaXplaSBoZWlnaHQgPSBtSGVpZ2h0OwotCi0gICAgICAgIC8vIGFkanVzdCBz
aXplIGlmIG5lZWRlZCBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlcwotICAgICAgICBnbDo6TWFrZVZh
bGlkU2l6ZShmYWxzZSwgZDNkMTE6OklzQ29tcHJlc3NlZChkeGdpRm9ybWF0KSwgJndpZHRoLCAm
aGVpZ2h0LCAmbG9kT2Zmc2V0KTsKLSAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVu
ZGVyZXItPmdldERldmljZSgpOwotCi0gICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIGRlc2M7
Ci0gICAgICAgIGRlc2MuV2lkdGggPSB3aWR0aDsKLSAgICAgICAgZGVzYy5IZWlnaHQgPSBoZWln
aHQ7Ci0gICAgICAgIGRlc2MuTWlwTGV2ZWxzID0gbG9kT2Zmc2V0ICsgMTsKLSAgICAgICAgZGVz
Yy5BcnJheVNpemUgPSAxOwotICAgICAgICBkZXNjLkZvcm1hdCA9IGR4Z2lGb3JtYXQ7Ci0gICAg
ICAgIGRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7Ci0gICAgICAgIGRlc2MuU2FtcGxlRGVzYy5R
dWFsaXR5ID0gMDsKLSAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX1NUQUdJTkc7Ci0g
ICAgICAgIGRlc2MuQmluZEZsYWdzID0gMDsKLSAgICAgICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9
IEQzRDExX0NQVV9BQ0NFU1NfUkVBRCB8IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7Ci0gICAgICAg
IGRlc2MuTWlzY0ZsYWdzID0gMDsKLQotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+
Q3JlYXRlVGV4dHVyZTJEKCZkZXNjLCBOVUxMLCAmbmV3VGV4dHVyZSk7Ci0KLSAgICAgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09
IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICAgICAgRVJSKCJDcmVhdGluZyBpbWFnZSBmYWlsZWQu
Iik7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgbVN0YWdpbmdUZXh0dXJlID0gbmV3VGV4dHVyZTsKLSAgICBt
U3RhZ2luZ1N1YnJlc291cmNlID0gRDNEMTFDYWxjU3VicmVzb3VyY2UobG9kT2Zmc2V0LCAwLCBs
b2RPZmZzZXQgKyAxKTsKLSAgICBtRGlydHkgPSBmYWxzZTsKLX0KLQotSFJFU1VMVCBJbWFnZTEx
OjptYXAoRDNEMTFfTUFQIG1hcFR5cGUsIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSAqbWFwKQot
ewotICAgIGNyZWF0ZVN0YWdpbmdUZXh0dXJlKCk7Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9IEVf
RkFJTDsKLQotICAgIGlmIChtU3RhZ2luZ1RleHR1cmUpCi0gICAgewotICAgICAgICBJRDNEMTFE
ZXZpY2VDb250ZXh0ICpkZXZpY2VDb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0
KCk7Ci0gICAgICAgIHJlc3VsdCA9IGRldmljZUNvbnRleHQtPk1hcChtU3RhZ2luZ1RleHR1cmUs
IG1TdGFnaW5nU3VicmVzb3VyY2UsIG1hcFR5cGUsIDAsIG1hcCk7Ci0KLSAgICAgICAgLy8gdGhp
cyBjYW4gZmFpbCBpZiB0aGUgZGV2aWNlIGlzIHJlbW92ZWQgKGZyb20gVERSKQotICAgICAgICBp
ZiAoZDNkMTE6OmlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1SZW5kZXJlci0+bm90aWZ5RGV2aWNlTG9zdCgpOwotICAgICAgICB9Ci0gICAgICAgIGVs
c2UgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGlydHkg
PSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9p
ZCBJbWFnZTExOjp1bm1hcCgpCi17Ci0gICAgaWYgKG1TdGFnaW5nVGV4dHVyZSkKLSAgICB7Ci0g
ICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmRldmljZUNvbnRleHQgPSBtUmVuZGVyZXItPmdl
dERldmljZUNvbnRleHQoKTsKLSAgICAgICAgZGV2aWNlQ29udGV4dC0+VW5tYXAobVN0YWdpbmdU
ZXh0dXJlLCBtU3RhZ2luZ1N1YnJlc291cmNlKTsKLSAgICB9Ci19Ci0KLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW1hZ2UxMS5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZTEx
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExYTY0OTJkYzg2M2E5MTY0MTliNWJj
ZDE2NGNhN2Q3YmI1ZDk1ZGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9J
bWFnZTExLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
Ly8gSW1hZ2UxMS5oOiBEZWZpbmVzIHRoZSByeDo6SW1hZ2UxMSBjbGFzcywgd2hpY2ggYWN0cyBh
cyB0aGUgaW50ZXJmYWNlIHRvCi0vLyB0aGUgYWN0dWFsIHVuZGVybHlpbmcgcmVzb3VyY2VzIG9m
IGEgVGV4dHVyZQotCi0jaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9JTUFHRTExX0hfCi0jZGVm
aW5lIExJQkdMRVNWMl9SRU5ERVJFUl9JTUFHRTExX0hfCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvSW1hZ2UuaCIKLQotI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgotCi1uYW1lc3Bh
Y2UgZ2wKLXsKLWNsYXNzIEZyYW1lYnVmZmVyOwotfQotCi1uYW1lc3BhY2UgcngKLXsKLWNsYXNz
IFJlbmRlcmVyOwotY2xhc3MgUmVuZGVyZXIxMTsKLWNsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlMkQ7Ci1jbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU7Ci0KLWNsYXNzIEltYWdl
MTEgOiBwdWJsaWMgSW1hZ2UKLXsKLSAgcHVibGljOgotICAgIEltYWdlMTEoKTsKLSAgICB2aXJ0
dWFsIH5JbWFnZTExKCk7Ci0KLSAgICBzdGF0aWMgSW1hZ2UxMSAqbWFrZUltYWdlMTEoSW1hZ2Ug
KmltZyk7Ci0KLSAgICBzdGF0aWMgdm9pZCBnZW5lcmF0ZU1pcG1hcChJbWFnZTExICpkZXN0LCBJ
bWFnZTExICpzcmMpOwotCi0gICAgdmlydHVhbCBib29sIGlzRGlydHkoKSBjb25zdDsKLQotICAg
IHZpcnR1YWwgYm9vbCB1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0
b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVTdXJmYWNlKFRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgaW50IGZhY2UsIGludCBsZXZlbCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpOwotCi0gICAgdmlydHVhbCBib29sIHJlZGVmaW5lKFJlbmRlcmVyICpyZW5kZXJlciwgR0xp
bnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBib29sIGZv
cmNlUmVsZWFzZSk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJhYmxlRm9ybWF0KCkgY29u
c3Q7Ci0gICAgRFhHSV9GT1JNQVQgZ2V0RFhHSUZvcm1hdCgpIGNvbnN0OwotICAgIAotICAgIHZp
cnR1YWwgdm9pZCBsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQpOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkQ29tcHJl
c3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2
b2lkICppbnB1dCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29weShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgZ2w6OkZyYW1lYnVmZmVyICpzb3VyY2UpOwotCi0gIHByb3RlY3RlZDoKLSAgICBIUkVTVUxU
IG1hcChEM0QxMV9NQVAgbWFwVHlwZSwgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFICptYXApOwot
ICAgIHZvaWQgdW5tYXAoKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihJbWFnZTExKTsKLQotICAgIElEM0QxMVRleHR1cmUyRCAqZ2V0U3RhZ2luZ1RleHR1cmUo
KTsKLSAgICB1bnNpZ25lZCBpbnQgZ2V0U3RhZ2luZ1N1YnJlc291cmNlKCk7Ci0gICAgdm9pZCBj
cmVhdGVTdGFnaW5nVGV4dHVyZSgpOwotCi0gICAgUmVuZGVyZXIxMSAqbVJlbmRlcmVyOwotCi0g
ICAgRFhHSV9GT1JNQVQgbURYR0lGb3JtYXQ7Ci0gICAgSUQzRDExVGV4dHVyZTJEICptU3RhZ2lu
Z1RleHR1cmU7Ci0gICAgdW5zaWduZWQgaW50IG1TdGFnaW5nU3VicmVzb3VyY2U7Ci19OwotCi19
Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfSU1BR0UxMV9IXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZTkuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZTku
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2RjYzU5YjZiZDk5OTg5OWVjOGMw
ZDllMmZjMmVjYmFiMWI3YmYyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
SW1hZ2U5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDczMiArMCwwIEBACi0jaW5jbHVkZSAicHJl
Y29tcGlsZWQuaCIKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIEltYWdlOS5jcHA6IEltcGxlbWVu
dHMgdGhlIHJ4OjpJbWFnZTkgY2xhc3MsIHdoaWNoIGFjdHMgYXMgdGhlIGludGVyZmFjZSB0bwot
Ly8gdGhlIGFjdHVhbCB1bmRlcmx5aW5nIHN1cmZhY2VzIG9mIGEgVGV4dHVyZS4KLQotI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZTkuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9t
YWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCi0jaW5jbHVkZSAibGli
R0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5k
ZXJlcjkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0OS5oIgot
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZTkuaCIKLQotI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9yZW5kZXJlcjlfdXRpbHMuaCIKLSNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZ2VuZXJhdGVtaXAuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLUltYWdl
OTo6SW1hZ2U5KCkKLXsKLSAgICBtU3VyZmFjZSA9IE5VTEw7Ci0gICAgbVJlbmRlcmVyID0gTlVM
TDsKLQotICAgIG1EM0RQb29sID0gRDNEUE9PTF9TWVNURU1NRU07Ci0gICAgbUQzREZvcm1hdCA9
IEQzREZNVF9VTktOT1dOOwotfQotCi1JbWFnZTk6On5JbWFnZTkoKQotewotICAgIGlmIChtU3Vy
ZmFjZSkKLSAgICB7Ci0gICAgICAgIG1TdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgfQotfQotCi12
b2lkIEltYWdlOTo6Z2VuZXJhdGVNaXAoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJmYWNlLCBJ
RGlyZWN0M0RTdXJmYWNlOSAqc291cmNlU3VyZmFjZSkKLXsKLSAgICBEM0RTVVJGQUNFX0RFU0Mg
ZGVzdERlc2M7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXN0U3VyZmFjZS0+R2V0RGVzYygmZGVz
dERlc2MpOwotICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICBEM0RTVVJGQUNF
X0RFU0Mgc291cmNlRGVzYzsKLSAgICByZXN1bHQgPSBzb3VyY2VTdXJmYWNlLT5HZXREZXNjKCZz
b3VyY2VEZXNjKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgQVNTRVJU
KHNvdXJjZURlc2MuRm9ybWF0ID09IGRlc3REZXNjLkZvcm1hdCk7Ci0gICAgQVNTRVJUKHNvdXJj
ZURlc2MuV2lkdGggPT0gMSB8fCBzb3VyY2VEZXNjLldpZHRoIC8gMiA9PSBkZXN0RGVzYy5XaWR0
aCk7Ci0gICAgQVNTRVJUKHNvdXJjZURlc2MuSGVpZ2h0ID09IDEgfHwgc291cmNlRGVzYy5IZWln
aHQgLyAyID09IGRlc3REZXNjLkhlaWdodCk7Ci0KLSAgICBEM0RMT0NLRURfUkVDVCBzb3VyY2VM
b2NrZWQgPSB7MH07Ci0gICAgcmVzdWx0ID0gc291cmNlU3VyZmFjZS0+TG9ja1JlY3QoJnNvdXJj
ZUxvY2tlZCwgTlVMTCwgRDNETE9DS19SRUFET05MWSk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKLQotICAgIEQzRExPQ0tFRF9SRUNUIGRlc3RMb2NrZWQgPSB7MH07Ci0gICAgcmVz
dWx0ID0gZGVzdFN1cmZhY2UtPkxvY2tSZWN0KCZkZXN0TG9ja2VkLCBOVUxMLCAwKTsKLSAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291
cmNlRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KHNvdXJjZUxv
Y2tlZC5wQml0cyk7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEgPSByZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIGNoYXIqPihkZXN0TG9ja2VkLnBCaXRzKTsKLQotICAgIGlmIChzb3VyY2VE
YXRhICYmIGRlc3REYXRhKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChzb3VyY2VEZXNjLkZvcm1h
dCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgRDNERk1UX0w4OgotICAgICAgICAgICAgR2Vu
ZXJhdGVNaXA8TDg+KHNvdXJjZURlc2MuV2lkdGgsIHNvdXJjZURlc2MuSGVpZ2h0LCBzb3VyY2VE
YXRhLCBzb3VyY2VMb2NrZWQuUGl0Y2gsIGRlc3REYXRhLCBkZXN0TG9ja2VkLlBpdGNoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNERk1UX0E4TDg6Ci0gICAgICAgICAg
ICBHZW5lcmF0ZU1pcDxBOEw4Pihzb3VyY2VEZXNjLldpZHRoLCBzb3VyY2VEZXNjLkhlaWdodCwg
c291cmNlRGF0YSwgc291cmNlTG9ja2VkLlBpdGNoLCBkZXN0RGF0YSwgZGVzdExvY2tlZC5QaXRj
aCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoK
LSAgICAgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlw
PEE4UjhHOEI4Pihzb3VyY2VEZXNjLldpZHRoLCBzb3VyY2VEZXNjLkhlaWdodCwgc291cmNlRGF0
YSwgc291cmNlTG9ja2VkLlBpdGNoLCBkZXN0RGF0YSwgZGVzdExvY2tlZC5QaXRjaCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgotICAg
ICAgICAgICAgR2VuZXJhdGVNaXA8QTE2QjE2RzE2UjE2Rj4oc291cmNlRGVzYy5XaWR0aCwgc291
cmNlRGVzYy5IZWlnaHQsIHNvdXJjZURhdGEsIHNvdXJjZUxvY2tlZC5QaXRjaCwgZGVzdERhdGEs
IGRlc3RMb2NrZWQuUGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBE
M0RGTVRfQTMyQjMyRzMyUjMyRjoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPEEzMkIzMkczMlIz
MkY+KHNvdXJjZURlc2MuV2lkdGgsIHNvdXJjZURlc2MuSGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3Vy
Y2VMb2NrZWQuUGl0Y2gsIGRlc3REYXRhLCBkZXN0TG9ja2VkLlBpdGNoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBkZXN0U3VyZmFjZS0+VW5s
b2NrUmVjdCgpOwotICAgICAgICBzb3VyY2VTdXJmYWNlLT5VbmxvY2tSZWN0KCk7Ci0gICAgfQot
fQotCi1JbWFnZTkgKkltYWdlOTo6bWFrZUltYWdlOShJbWFnZSAqaW1nKQotewotICAgIEFTU0VS
VChIQVNfRFlOQU1JQ19UWVBFKHJ4OjpJbWFnZTkqLCBpbWcpKTsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8cng6OkltYWdlOSo+KGltZyk7Ci19Ci0KLXZvaWQgSW1hZ2U5OjpnZW5lcmF0ZU1pcG1h
cChJbWFnZTkgKmRlc3QsIEltYWdlOSAqc291cmNlKQotewotICAgIElEaXJlY3QzRFN1cmZhY2U5
ICpzb3VyY2VTdXJmYWNlID0gc291cmNlLT5nZXRTdXJmYWNlKCk7Ci0gICAgaWYgKHNvdXJjZVN1
cmZhY2UgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0U3VyZmFjZSA9IGRlc3QtPmdldFN1cmZh
Y2UoKTsKLSAgICBnZW5lcmF0ZU1pcChkZXN0U3VyZmFjZSwgc291cmNlU3VyZmFjZSk7Ci0KLSAg
ICBkZXN0LT5tYXJrRGlydHkoKTsKLX0KLQotdm9pZCBJbWFnZTk6OmNvcHlMb2NrYWJsZVN1cmZh
Y2VzKElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0LCBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlKQot
ewotICAgIEQzRExPQ0tFRF9SRUNUIHNvdXJjZUxvY2sgPSB7MH07Ci0gICAgRDNETE9DS0VEX1JF
Q1QgZGVzdExvY2sgPSB7MH07Ci0gICAgCi0gICAgc291cmNlLT5Mb2NrUmVjdCgmc291cmNlTG9j
aywgTlVMTCwgMCk7Ci0gICAgZGVzdC0+TG9ja1JlY3QoJmRlc3RMb2NrLCBOVUxMLCAwKTsKLSAg
ICAKLSAgICBpZiAoc291cmNlTG9jay5wQml0cyAmJiBkZXN0TG9jay5wQml0cykKLSAgICB7Ci0g
ICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOwotICAgICAgICBzb3VyY2UtPkdldERlc2MoJmRl
c2MpOwotCi0gICAgICAgIGludCByb3dzID0gZDNkOTo6SXNDb21wcmVzc2VkRm9ybWF0KGRlc2Mu
Rm9ybWF0KSA/IGRlc2MuSGVpZ2h0IC8gNCA6IGRlc2MuSGVpZ2h0OwotICAgICAgICBpbnQgYnl0
ZXMgPSBkM2Q5OjpDb21wdXRlUm93U2l6ZShkZXNjLkZvcm1hdCwgZGVzYy5XaWR0aCk7Ci0gICAg
ICAgIEFTU0VSVChieXRlcyA8PSBzb3VyY2VMb2NrLlBpdGNoICYmIGJ5dGVzIDw9IGRlc3RMb2Nr
LlBpdGNoKTsKLQotICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgcm93czsgaSsrKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBtZW1jcHkoKGNoYXIqKWRlc3RMb2NrLnBCaXRzICsgZGVzdExvY2su
UGl0Y2ggKiBpLCAoY2hhciopc291cmNlTG9jay5wQml0cyArIHNvdXJjZUxvY2suUGl0Y2ggKiBp
LCBieXRlcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBzb3VyY2UtPlVubG9ja1JlY3QoKTsKLSAg
ICAgICAgZGVzdC0+VW5sb2NrUmVjdCgpOwotICAgIH0KLSAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
Ci19Ci0KLWJvb2wgSW1hZ2U5OjpyZWRlZmluZShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTGlu
dCBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGJvb2wgZm9y
Y2VSZWxlYXNlKQotewotICAgIGlmIChtV2lkdGggIT0gd2lkdGggfHwKLSAgICAgICAgbUhlaWdo
dCAhPSBoZWlnaHQgfHwKLSAgICAgICAgbUludGVybmFsRm9ybWF0ICE9IGludGVybmFsZm9ybWF0
IHx8Ci0gICAgICAgIGZvcmNlUmVsZWFzZSkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJlciA9IFJl
bmRlcmVyOTo6bWFrZVJlbmRlcmVyOShyZW5kZXJlcik7Ci0KLSAgICAgICAgbVdpZHRoID0gd2lk
dGg7Ci0gICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9
IGludGVybmFsZm9ybWF0OwotICAgICAgICAvLyBjb21wdXRlIHRoZSBkM2QgZm9ybWF0IHRoYXQg
d2lsbCBiZSB1c2VkCi0gICAgICAgIG1EM0RGb3JtYXQgPSBtUmVuZGVyZXItPkNvbnZlcnRUZXh0
dXJlSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwotICAgICAgICBtQWN0dWFsRm9ybWF0
ID0gZDNkOV9nbDo6R2V0RXF1aXZhbGVudEZvcm1hdChtRDNERm9ybWF0KTsKLQotICAgICAgICBp
ZiAobVN1cmZhY2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1TdXJmYWNlLT5SZWxlYXNlKCk7
Ci0gICAgICAgICAgICBtU3VyZmFjZSA9IE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgSW1hZ2U5Ojpj
cmVhdGVTdXJmYWNlKCkKLXsKLSAgICBpZihtU3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBJRGlyZWN0M0RUZXh0dXJlOSAqbmV3VGV4dHVyZSA9IE5VTEw7Ci0g
ICAgSURpcmVjdDNEU3VyZmFjZTkgKm5ld1N1cmZhY2UgPSBOVUxMOwotICAgIGNvbnN0IEQzRFBP
T0wgcG9vbFRvVXNlID0gRDNEUE9PTF9TWVNURU1NRU07Ci0gICAgY29uc3QgRDNERk9STUFUIGQz
ZEZvcm1hdCA9IGdldEQzREZvcm1hdCgpOwotICAgIEFTU0VSVChkM2RGb3JtYXQgIT0gRDNERk1U
X0lOVFopOyAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgZm9yIGRlcHRoIHRleHR1cmVzCi0K
LSAgICBpZiAobVdpZHRoICE9IDAgJiYgbUhlaWdodCAhPSAwKQotICAgIHsKLSAgICAgICAgaW50
IGxldmVsVG9GZXRjaCA9IDA7Ci0gICAgICAgIEdMc2l6ZWkgcmVxdWVzdFdpZHRoID0gbVdpZHRo
OwotICAgICAgICBHTHNpemVpIHJlcXVlc3RIZWlnaHQgPSBtSGVpZ2h0OwotICAgICAgICBnbDo6
TWFrZVZhbGlkU2l6ZSh0cnVlLCBnbDo6SXNDb21wcmVzc2VkKG1JbnRlcm5hbEZvcm1hdCksICZy
ZXF1ZXN0V2lkdGgsICZyZXF1ZXN0SGVpZ2h0LCAmbGV2ZWxUb0ZldGNoKTsKLQotICAgICAgICBJ
RGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0gICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKHJlcXVlc3RXaWR0aCwg
cmVxdWVzdEhlaWdodCwgbGV2ZWxUb0ZldGNoICsgMSwgMCwgZDNkRm9ybWF0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvb2xUb1VzZSwgJm5l
d1RleHR1cmUsIE5VTEwpOwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAg
ewotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8
fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgICAgICBFUlIoIkNyZWF0aW5nIGlt
YWdlIHN1cmZhY2UgZmFpbGVkLiIpOwotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotCi0gICAgICAgIG5ld1RleHR1cmUtPkdldFN1cmZh
Y2VMZXZlbChsZXZlbFRvRmV0Y2gsICZuZXdTdXJmYWNlKTsKLSAgICAgICAgbmV3VGV4dHVyZS0+
UmVsZWFzZSgpOwotICAgIH0KLQotICAgIG1TdXJmYWNlID0gbmV3U3VyZmFjZTsKLSAgICBtRGly
dHkgPSBmYWxzZTsKLSAgICBtRDNEUG9vbCA9IHBvb2xUb1VzZTsKLX0KLQotSFJFU1VMVCBJbWFn
ZTk6OmxvY2soRDNETE9DS0VEX1JFQ1QgKmxvY2tlZFJlY3QsIGNvbnN0IFJFQ1QgKnJlY3QpCi17
Ci0gICAgY3JlYXRlU3VyZmFjZSgpOwotCi0gICAgSFJFU1VMVCByZXN1bHQgPSBEM0RFUlJfSU5W
QUxJRENBTEw7Ci0KLSAgICBpZiAobVN1cmZhY2UpCi0gICAgewotICAgICAgICByZXN1bHQgPSBt
U3VyZmFjZS0+TG9ja1JlY3QobG9ja2VkUmVjdCwgcmVjdCwgMCk7Ci0gICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAgbURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEltYWdlOTo6dW5sb2NrKCkKLXsKLSAgICBpZiAo
bVN1cmZhY2UpCi0gICAgewotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1TdXJmYWNlLT5Vbmxv
Y2tSZWN0KCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgfQotfQot
Ci1ib29sIEltYWdlOTo6aXNSZW5kZXJhYmxlRm9ybWF0KCkgY29uc3QKLXsgICAgCi0gICAgcmV0
dXJuIFRleHR1cmVTdG9yYWdlOTo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShnZXREM0RGb3Jt
YXQoKSk7Ci19Ci0KLUQzREZPUk1BVCBJbWFnZTk6OmdldEQzREZvcm1hdCgpIGNvbnN0Ci17Ci0g
ICAgLy8gdGhpcyBzaG91bGQgb25seSBoYXBwZW4gaWYgdGhlIGltYWdlIGhhc24ndCBiZWVuIHJl
ZGVmaW5lZCBmaXJzdAotICAgIC8vIHdoaWNoIHdvdWxkIGJlIGEgYnVnIGJ5IHRoZSBjYWxsZXIK
LSAgICBBU1NFUlQobUQzREZvcm1hdCAhPSBEM0RGTVRfVU5LTk9XTik7Ci0KLSAgICByZXR1cm4g
bUQzREZvcm1hdDsKLX0KLQotSURpcmVjdDNEU3VyZmFjZTkgKkltYWdlOTo6Z2V0U3VyZmFjZSgp
Ci17Ci0gICAgY3JlYXRlU3VyZmFjZSgpOwotCi0gICAgcmV0dXJuIG1TdXJmYWNlOwotfQotCi12
b2lkIEltYWdlOTo6c2V0TWFuYWdlZFN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAq
c3RvcmFnZSwgaW50IGxldmVsKQotewotICAgIFRleHR1cmVTdG9yYWdlOV8yRCAqc3RvcmFnZTkg
PSBUZXh0dXJlU3RvcmFnZTlfMkQ6Om1ha2VUZXh0dXJlU3RvcmFnZTlfMkQoc3RvcmFnZS0+Z2V0
U3RvcmFnZUluc3RhbmNlKCkpOwotICAgIHNldE1hbmFnZWRTdXJmYWNlKHN0b3JhZ2U5LT5nZXRT
dXJmYWNlTGV2ZWwobGV2ZWwsIGZhbHNlKSk7Ci19Ci0KLXZvaWQgSW1hZ2U5OjpzZXRNYW5hZ2Vk
U3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBp
bnQgbGV2ZWwpCi17Ci0gICAgVGV4dHVyZVN0b3JhZ2U5X0N1YmUgKnN0b3JhZ2U5ID0gVGV4dHVy
ZVN0b3JhZ2U5X0N1YmU6Om1ha2VUZXh0dXJlU3RvcmFnZTlfQ3ViZShzdG9yYWdlLT5nZXRTdG9y
YWdlSW5zdGFuY2UoKSk7Ci0gICAgc2V0TWFuYWdlZFN1cmZhY2Uoc3RvcmFnZTktPmdldEN1YmVN
YXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsLCBm
YWxzZSkpOwotfQotCi12b2lkIEltYWdlOTo6c2V0TWFuYWdlZFN1cmZhY2UoSURpcmVjdDNEU3Vy
ZmFjZTkgKnN1cmZhY2UpCi17Ci0gICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7Ci0gICAgc3VyZmFj
ZS0+R2V0RGVzYygmZGVzYyk7Ci0gICAgQVNTRVJUKGRlc2MuUG9vbCA9PSBEM0RQT09MX01BTkFH
RUQpOwotCi0gICAgaWYgKChHTHNpemVpKWRlc2MuV2lkdGggPT0gbVdpZHRoICYmIChHTHNpemVp
KWRlc2MuSGVpZ2h0ID09IG1IZWlnaHQpCi0gICAgewotICAgICAgICBpZiAobVN1cmZhY2UpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGNvcHlMb2NrYWJsZVN1cmZhY2VzKHN1cmZhY2UsIG1TdXJm
YWNlKTsKLSAgICAgICAgICAgIG1TdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBtU3VyZmFjZSA9IHN1cmZhY2U7Ci0gICAgICAgIG1EM0RQb29sID0gZGVzYy5Qb29sOwot
ICAgIH0KLX0KLQotYm9vbCBJbWFnZTk6OnVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBBU1NFUlQoZ2V0U3VyZmFj
ZSgpICE9IE5VTEwpOwotICAgIFRleHR1cmVTdG9yYWdlOV8yRCAqc3RvcmFnZTkgPSBUZXh0dXJl
U3RvcmFnZTlfMkQ6Om1ha2VUZXh0dXJlU3RvcmFnZTlfMkQoc3RvcmFnZS0+Z2V0U3RvcmFnZUlu
c3RhbmNlKCkpOwotICAgIHJldHVybiB1cGRhdGVTdXJmYWNlKHN0b3JhZ2U5LT5nZXRTdXJmYWNl
TGV2ZWwobGV2ZWwsIHRydWUpLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKLX0K
LQotYm9vbCBJbWFnZTk6OnVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJl
ICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBBU1NFUlQoZ2V0U3Vy
ZmFjZSgpICE9IE5VTEwpOwotICAgIFRleHR1cmVTdG9yYWdlOV9DdWJlICpzdG9yYWdlOSA9IFRl
eHR1cmVTdG9yYWdlOV9DdWJlOjptYWtlVGV4dHVyZVN0b3JhZ2U5X0N1YmUoc3RvcmFnZS0+Z2V0
U3RvcmFnZUluc3RhbmNlKCkpOwotICAgIHJldHVybiB1cGRhdGVTdXJmYWNlKHN0b3JhZ2U5LT5n
ZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBs
ZXZlbCwgdHJ1ZSksIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOwotfQotCi1ib29s
IEltYWdlOTo6dXBkYXRlU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdFN1cmZhY2UsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KQotewotICAgIGlmICghZGVzdFN1cmZhY2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2VTdXJmYWNlID0gZ2V0U3VyZmFjZSgpOwotCi0gICAg
aWYgKHNvdXJjZVN1cmZhY2UgJiYgc291cmNlU3VyZmFjZSAhPSBkZXN0U3VyZmFjZSkKLSAgICB7
Ci0gICAgICAgIFJFQ1QgcmVjdDsKLSAgICAgICAgcmVjdC5sZWZ0ID0geG9mZnNldDsKLSAgICAg
ICAgcmVjdC50b3AgPSB5b2Zmc2V0OwotICAgICAgICByZWN0LnJpZ2h0ID0geG9mZnNldCArIHdp
ZHRoOwotICAgICAgICByZWN0LmJvdHRvbSA9IHlvZmZzZXQgKyBoZWlnaHQ7Ci0KLSAgICAgICAg
UE9JTlQgcG9pbnQgPSB7cmVjdC5sZWZ0LCByZWN0LnRvcH07Ci0KLSAgICAgICAgSURpcmVjdDNE
RGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLQotICAgICAgICBpZiAo
bUQzRFBvb2wgPT0gRDNEUE9PTF9NQU5BR0VEKQotICAgICAgICB7Ci0gICAgICAgICAgICBEM0RT
VVJGQUNFX0RFU0MgZGVzYzsKLSAgICAgICAgICAgIHNvdXJjZVN1cmZhY2UtPkdldERlc2MoJmRl
c2MpOwotCi0gICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZiA9IDA7Ci0gICAgICAg
ICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNl
KGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBkZXNjLkZvcm1hdCwgRDNEUE9PTF9TWVNURU1NRU0s
ICZzdXJmLCBOVUxMKTsKLQotICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvcHlMb2NrYWJsZVN1cmZhY2VzKHN1cmYsIHNv
dXJjZVN1cmZhY2UpOwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+VXBkYXRlU3Vy
ZmFjZShzdXJmLCAmcmVjdCwgZGVzdFN1cmZhY2UsICZwb2ludCk7Ci0gICAgICAgICAgICAgICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgICAgICAgICBzdXJmLT5SZWxlYXNl
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0g
ICAgICAgICAgICAvLyBVcGRhdGVTdXJmYWNlOiBzb3VyY2UgbXVzdCBiZSBTWVNURU1NRU0sIGRl
c3QgbXVzdCBiZSBERUZBVUxUIHBvb2xzIAotICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBk
ZXZpY2UtPlVwZGF0ZVN1cmZhY2Uoc291cmNlU3VyZmFjZSwgJnJlY3QsIGRlc3RTdXJmYWNlLCAm
cG9pbnQpOwotICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGRlc3RTdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLS8vIFN0b3JlIHRoZSBwaXhlbCByZWN0YW5nbGUgZGVzaWduYXRlZCBieSB4b2Zmc2V0
LHlvZmZzZXQsd2lkdGgsaGVpZ2h0IHdpdGggcGl4ZWxzIHN0b3JlZCBhcyBmb3JtYXQvdHlwZSBh
dCBpbnB1dAotLy8gaW50byB0aGUgdGFyZ2V0IHBpeGVsIHJlY3RhbmdsZS4KLXZvaWQgSW1hZ2U5
Ojpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1l
bnQsIGNvbnN0IHZvaWQgKmlucHV0KQotewotICAgIFJFQ1QgbG9ja1JlY3QgPQotICAgIHsKLSAg
ICAgICAgeG9mZnNldCwgeW9mZnNldCwKLSAgICAgICAgeG9mZnNldCArIHdpZHRoLCB5b2Zmc2V0
ICsgaGVpZ2h0Ci0gICAgfTsKLQotICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsKLSAgICBIUkVT
VUxUIHJlc3VsdCA9IGxvY2soJmxvY2tlZCwgJmxvY2tSZWN0KTsKLSAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0KLSAgICBHTHNpemVpIGlu
cHV0UGl0Y2ggPSBnbDo6Q29tcHV0ZVBpdGNoKHdpZHRoLCBtSW50ZXJuYWxGb3JtYXQsIHVucGFj
a0FsaWdubWVudCk7Ci0KLSAgICBzd2l0Y2ggKG1JbnRlcm5hbEZvcm1hdCkKLSAgICB7Ci0gICAg
ICBjYXNlIEdMX0FMUEhBOF9FWFQ6Ci0gICAgICAgIGlmIChnbDo6c3VwcG9ydHNTU0UyKCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRBbHBoYURhdGFUb0JHUkFTU0UyKHdpZHRoLCBoZWln
aHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBsb2FkQWxwaGFEYXRh
VG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxv
Y2tlZC5wQml0cyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xV
TUlOQU5DRThfRVhUOgotICAgICAgICBsb2FkTHVtaW5hbmNlRGF0YVRvTmF0aXZlT3JCR1JBKHdp
ZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0
cywgZ2V0RDNERm9ybWF0KCkgPT0gRDNERk1UX0w4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0FMUEhBMzJGX0VYVDoKLSAgICAgICAgbG9hZEFscGhhRmxvYXREYXRhVG9SR0JBKHdp
ZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0
cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UzMkZfRVhUOgotICAg
ICAgICBsb2FkTHVtaW5hbmNlRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9BTFBIQTE2Rl9FWFQ6Ci0gICAgICAgIGxvYWRBbHBoYUhhbGZGbG9hdERh
dGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwg
bG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2
Rl9FWFQ6Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQ6Ci0gICAg
ICAgIGxvYWRMdW1pbmFuY2VBbHBoYURhdGFUb05hdGl2ZU9yQkdSQSh3aWR0aCwgaGVpZ2h0LCBp
bnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMsIGdldEQzREZvcm1h
dCgpID09IEQzREZNVF9BOEw4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlO
QU5DRV9BTFBIQTMyRl9FWFQ6Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YVRv
UkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2Nr
ZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhB
MTZGX0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YVRvUkdCQSh3
aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJp
dHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6Ci0gICAgICAgIGxv
YWRSR0JVQnl0ZURhdGFUb0JHUlgod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxv
Y2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X1JHQjU2NToKLSAgICAgICAgbG9hZFJHQjU2NURhdGFUb0JHUkEod2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX1JHQkE4X09FUzoKLSAgICAgICAgaWYgKGdsOjpzdXBwb3J0c1NT
RTIoKSkKLSAgICAgICAgewotICAgICAgICAgICAgbG9hZFJHQkFVQnl0ZURhdGFUb0JHUkFTU0Uy
KHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5w
Qml0cyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBs
b2FkUkdCQVVCeXRlRGF0YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwg
bG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9SR0JBNDoKLSAgICAgICAgbG9hZFJHQkE0NDQ0RGF0YVRvQkdSQSh3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMp
OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCNV9BMToKLSAgICAgICAgbG9hZFJH
QkE1NTUxRGF0YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2Vk
LlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkdS
QThfRVhUOgotICAgICAgICBsb2FkQkdSQURhdGFUb0JHUkEod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICAvLyBmbG9hdCB0ZXh0dXJlcyBhcmUgY29udmVydGVkIHRvIFJHQkEsIG5vdCBCR1JB
LCBhcyB0aGV5J3JlIHN0b3JlZCB0aGF0IHdheSBpbiBEM0QKLSAgICAgIGNhc2UgR0xfUkdCMzJG
X0VYVDoKLSAgICAgICAgbG9hZFJHQkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfUkdCMTZGX0VYVDoKLSAgICAgICAgbG9hZFJHQkhhbGZGbG9hdERh
dGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwg
bG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQkEzMkZfRVhU
OgotICAgICAgICBsb2FkUkdCQUZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBp
dGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfUkdCQTE2Rl9FWFQ6Ci0gICAgICAgIGxvYWRSR0JBSGFsZkZsb2F0RGF0
YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBs
b2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7IAotICAgIH0KLQotICAgIHVubG9jaygpOwotfQotCi12b2lkIEltYWdlOTo6bG9hZENvbXBy
ZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lk
ICppbnB1dCkKLXsKLSAgICBBU1NFUlQoeG9mZnNldCAlIDQgPT0gMCk7Ci0gICAgQVNTRVJUKHlv
ZmZzZXQgJSA0ID09IDApOwotCi0gICAgUkVDVCBsb2NrUmVjdCA9IHsKLSAgICAgICAgeG9mZnNl
dCwgeW9mZnNldCwKLSAgICAgICAgeG9mZnNldCArIHdpZHRoLCB5b2Zmc2V0ICsgaGVpZ2h0Ci0g
ICAgfTsKLQotICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsKLSAgICBIUkVTVUxUIHJlc3VsdCA9
IGxvY2soJmxvY2tlZCwgJmxvY2tSZWN0KTsKLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAg
ewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgR0xzaXplaSBpbnB1dFNpemUgPSBnbDo6
Q29tcHV0ZUNvbXByZXNzZWRTaXplKHdpZHRoLCBoZWlnaHQsIG1JbnRlcm5hbEZvcm1hdCk7Ci0g
ICAgR0xzaXplaSBpbnB1dFBpdGNoID0gZ2w6OkNvbXB1dGVDb21wcmVzc2VkUGl0Y2god2lkdGgs
IG1JbnRlcm5hbEZvcm1hdCk7Ci0gICAgaW50IHJvd3MgPSBpbnB1dFNpemUgLyBpbnB1dFBpdGNo
OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgKytpKQotICAgIHsKLSAgICAgICAgbWVt
Y3B5KCh2b2lkKikoKEJZVEUqKWxvY2tlZC5wQml0cyArIGkgKiBsb2NrZWQuUGl0Y2gpLCAodm9p
ZCopKChCWVRFKilpbnB1dCArIGkgKiBpbnB1dFBpdGNoKSwgaW5wdXRQaXRjaCk7Ci0gICAgfQot
Ci0gICAgdW5sb2NrKCk7Ci19Ci0KLS8vIFRoaXMgaW1wbGVtZW50cyBnbENvcHlUZXhbU3ViXUlt
YWdlMkQgZm9yIG5vbi1yZW5kZXJhYmxlIGludGVybmFsIHRleHR1cmUgZm9ybWF0cyBhbmQgaW5j
b21wbGV0ZSB0ZXh0dXJlcwotdm9pZCBJbWFnZTk6OmNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IGdsOjpGcmFtZWJ1ZmZlciAqc291cmNlKQotewotICAgIFJlbmRlclRhcmdldDkgKnJlbmRlclRh
cmdldCA9IE5VTEw7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOwotICAg
IGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigw
KTsKLQotICAgIGlmIChjb2xvcmJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIHJlbmRlclRhcmdldCA9
IFJlbmRlclRhcmdldDk6Om1ha2VSZW5kZXJUYXJnZXQ5KGNvbG9yYnVmZmVyLT5nZXRSZW5kZXJU
YXJnZXQoKSk7Ci0gICAgfQotICAgIAotICAgIGlmIChyZW5kZXJUYXJnZXQpCi0gICAgewotICAg
ICAgICBzdXJmYWNlID0gcmVuZGVyVGFyZ2V0LT5nZXRTdXJmYWNlKCk7Ci0gICAgfQotCi0gICAg
aWYgKCFzdXJmYWNlKQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhl
IHJlbmRlciB0YXJnZXQuIik7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7Ci0gICAgfQotCi0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVy
LT5nZXREZXZpY2UoKTsKLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXREYXRh
ID0gTlVMTDsKLSAgICBEM0RTVVJGQUNFX0RFU0MgZGVzY3JpcHRpb247Ci0gICAgc3VyZmFjZS0+
R2V0RGVzYygmZGVzY3JpcHRpb24pOwotICAgIAotICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVPZmZzY3JlZW5QbGFpblN1cmZhY2UoZGVzY3JpcHRpb24uV2lkdGgsIGRlc2NyaXB0
aW9uLkhlaWdodCwgZGVzY3JpcHRpb24uRm9ybWF0LCBEM0RQT09MX1NZU1RFTU1FTSwgJnJlbmRl
clRhcmdldERhdGEsIE5VTEwpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAg
ICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG1hdGNoaW5nIGRlc3RpbmF0aW9uIHN1cmZhY2Uu
Iik7Ci0gICAgICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICByZXN1bHQgPSBkZXZpY2UtPkdldFJl
bmRlclRhcmdldERhdGEoc3VyZmFjZSwgcmVuZGVyVGFyZ2V0RGF0YSk7Ci0KLSAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIoIkdldFJlbmRlclRhcmdldERhdGEgdW5l
eHBlY3RlZGx5IGZhaWxlZC4iKTsKLSAgICAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgp
OwotICAgICAgICBzdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotCi0gICAgUkVDVCBzb3VyY2VSZWN0ID0ge3gsIHks
IHggKyB3aWR0aCwgeSArIGhlaWdodH07Ci0gICAgUkVDVCBkZXN0UmVjdCA9IHt4b2Zmc2V0LCB5
b2Zmc2V0LCB4b2Zmc2V0ICsgd2lkdGgsIHlvZmZzZXQgKyBoZWlnaHR9OwotCi0gICAgRDNETE9D
S0VEX1JFQ1Qgc291cmNlTG9jayA9IHswfTsKLSAgICByZXN1bHQgPSByZW5kZXJUYXJnZXREYXRh
LT5Mb2NrUmVjdCgmc291cmNlTG9jaywgJnNvdXJjZVJlY3QsIDApOwotCi0gICAgaWYgKEZBSUxF
RChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gbG9jayB0aGUgc291cmNl
IHN1cmZhY2UgKHJlY3RhbmdsZSBtaWdodCBiZSBpbnZhbGlkKS4iKTsKLSAgICAgICAgcmVuZGVy
VGFyZ2V0RGF0YS0+UmVsZWFzZSgpOwotICAgICAgICBzdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotCi0gICAgRDNE
TE9DS0VEX1JFQ1QgZGVzdExvY2sgPSB7MH07Ci0gICAgcmVzdWx0ID0gbG9jaygmZGVzdExvY2ss
ICZkZXN0UmVjdCk7Ci0gICAgCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAg
ICAgRVJSKCJGYWlsZWQgdG8gbG9jayB0aGUgZGVzdGluYXRpb24gc3VyZmFjZSAocmVjdGFuZ2xl
IG1pZ2h0IGJlIGludmFsaWQpLiIpOwotICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5VbmxvY2tS
ZWN0KCk7Ci0gICAgICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsKLSAgICAgICAgc3Vy
ZmFjZS0+UmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgIH0KLQotICAgIGlmIChkZXN0TG9jay5wQml0cyAmJiBzb3VyY2VMb2NrLnBCaXRz
KQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciAqc291cmNlID0gKHVuc2lnbmVkIGNoYXIq
KXNvdXJjZUxvY2sucEJpdHM7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSAodW5zaWdu
ZWQgY2hhciopZGVzdExvY2sucEJpdHM7Ci0KLSAgICAgICAgc3dpdGNoIChkZXNjcmlwdGlvbi5G
b3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAgICAg
ICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgICAgICAgIHN3aXRjaChnZXREM0RGb3Jt
YXQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6
Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgICAgICAgICAgIGZv
cihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIDQgKiB3aWR0aCk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9MODoKLSAgICAgICAgICAg
ICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4XSA9IHNvdXJj
ZVt4ICogNCArIDJdOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3Qg
Kz0gZGVzdExvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BOEw4OgotICAgICAgICAgICAgICAgIGZv
cihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKiAyICsgMF0gPSBzb3Vy
Y2VbeCAqIDQgKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCAqIDIgKyAxXSA9
IHNvdXJjZVt4ICogNCArIDNdOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAg
IGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFVOUkVB
Q0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBj
YXNlIEQzREZNVF9SNUc2QjU6Ci0gICAgICAgICAgICBzd2l0Y2goZ2V0RDNERm9ybWF0KCkpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAg
ICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBz
aG9ydCByZ2IgPSAoKHVuc2lnbmVkIHNob3J0Kilzb3VyY2UpW3hdOwotICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgY2hhciByZWQgPSAocmdiICYgMHhGODAwKSA+PiA4OwotICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBncmVlbiA9IChyZ2IgJiAweDA3RTApID4+
IDM7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJsdWUgPSAocmdiICYg
MHgwMDFGKSA8PCAzOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICsgMF0gPSBibHVl
IHwgKGJsdWUgPj4gNSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKyAxXSA9IGdy
ZWVuIHwgKGdyZWVuID4+IDYpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICsgMl0g
PSByZWQgfCAocmVkID4+IDUpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICsgM10g
PSAweEZGOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgc291
cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVz
dExvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEQzREZNVF9MODoKLSAgICAgICAgICAgICAgICBmb3IoaW50IHkg
PSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZWQgPSBzb3VyY2VbeCAq
IDIgKyAxXSAmIDB4Rjg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3hdID0gcmVkIHwg
KHJlZCA+PiA1KTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
IHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAgICBkZXN0ICs9
IGRlc3RMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEM0RG
TVRfQTFSNUc1QjU6Ci0gICAgICAgICAgICBzd2l0Y2goZ2V0RDNERm9ybWF0KCkpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgICAgICAg
ICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBh
cmdiID0gKCh1bnNpZ25lZCBzaG9ydCopc291cmNlKVt4XTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGNoYXIgcmVkID0gKGFyZ2IgJiAweDdDMDApID4+IDc7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGdyZWVuID0gKGFyZ2IgJiAweDAzRTApID4+IDI7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJsdWUgPSAoYXJnYiAmIDB4
MDAxRikgPDwgMzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCArIDBdID0gYmx1ZSB8
IChibHVlID4+IDUpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICsgMV0gPSBncmVl
biB8IChncmVlbiA+PiA1KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCArIDJdID0g
cmVkIHwgKHJlZCA+PiA1KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCArIDNdID0g
MHhGRjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHNvdXJj
ZSArPSBzb3VyY2VMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RM
b2NrLlBpdGNoOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Ci0gICAgICAgICAgICAgICAgZm9yKGlu
dCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGFyZ2IgPSAoKHVu
c2lnbmVkIHNob3J0Kilzb3VyY2UpW3hdOwotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgY2hhciByZWQgPSAoYXJnYiAmIDB4N0MwMCkgPj4gNzsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGNoYXIgZ3JlZW4gPSAoYXJnYiAmIDB4MDNFMCkgPj4gMjsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYmx1ZSA9IChhcmdiICYgMHgwMDFGKSA8PCAz
OwotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBhbHBoYSA9IChzaWduZWQg
c2hvcnQpYXJnYiA+PiAxNTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCArIDBdID0g
Ymx1ZSB8IChibHVlID4+IDUpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICsgMV0g
PSBncmVlbiB8IChncmVlbiA+PiA1KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCAr
IDJdID0gcmVkIHwgKHJlZCA+PiA1KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCAr
IDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICBzb3VyY2UgKz0gc291cmNlTG9jay5QaXRjaDsKLSAgICAgICAgICAgICAgICAgICAgZGVzdCAr
PSBkZXN0TG9jay5QaXRjaDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0w4OgotICAgICAgICAgICAgICAgIGZvcihp
bnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHJlZCA9IHNvdXJj
ZVt4ICogMiArIDFdICYgMHg3QzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeF0gPSAo
cmVkIDw8IDEpIHwgKHJlZCA+PiA0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAg
ICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQThMODoKLSAgICAgICAg
ICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hh
ciByZWQgPSBzb3VyY2VbeCAqIDIgKyAxXSAmIDB4N0M7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0W3ggKiAyICsgMF0gPSAocmVkIDw8IDEpIHwgKHJlZCA+PiA0KTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3RbeCAqIDIgKyAxXSA9IChzaWduZWQgY2hhcilzb3VyY2VbeCAqIDIg
KyAxXSA+PiA3OwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAg
c291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3QgKz0g
ZGVzdExvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHVubG9j
aygpOwotICAgIHJlbmRlclRhcmdldERhdGEtPlVubG9ja1JlY3QoKTsKLQotICAgIHJlbmRlclRh
cmdldERhdGEtPlJlbGVhc2UoKTsKLSAgICBzdXJmYWNlLT5SZWxlYXNlKCk7Ci0KLSAgICBtRGly
dHkgPSB0cnVlOwotfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZTku
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW1hZ2U5
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmYmJjYTMxMjQzZDJhYzQ3ZDU3NDhk
NWExYzdmYWY3ZDVjYTgyMDYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9J
bWFnZTkuaAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLS8vIEltYWdlOS5oOiBEZWZpbmVzIHRoZSByeDo6SW1hZ2U5IGNsYXNzLCB3aGljaCBhY3Rz
IGFzIHRoZSBpbnRlcmZhY2UgdG8KLS8vIHRoZSBhY3R1YWwgdW5kZXJseWluZyBzdXJmYWNlcyBv
ZiBhIFRleHR1cmUuCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0lNQUdFOV9IXwotI2Rl
ZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfSU1BR0U5X0hfCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvSW1hZ2UuaCIKLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLQotbmFtZXNwYWNl
IGdsCi17Ci1jbGFzcyBGcmFtZWJ1ZmZlcjsKLX0KLQotbmFtZXNwYWNlIHJ4Ci17Ci1jbGFzcyBS
ZW5kZXJlcjsKLWNsYXNzIFJlbmRlcmVyOTsKLWNsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
MkQ7Ci1jbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU7Ci0KLWNsYXNzIEltYWdlOSA6
IHB1YmxpYyBJbWFnZQotewotICBwdWJsaWM6Ci0gICAgSW1hZ2U5KCk7Ci0gICAgfkltYWdlOSgp
OwotCi0gICAgc3RhdGljIEltYWdlOSAqbWFrZUltYWdlOShJbWFnZSAqaW1nKTsKLQotICAgIHN0
YXRpYyB2b2lkIGdlbmVyYXRlTWlwbWFwKEltYWdlOSAqZGVzdCwgSW1hZ2U5ICpzb3VyY2UpOwot
ICAgIHN0YXRpYyB2b2lkIGdlbmVyYXRlTWlwKElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0U3VyZmFj
ZSwgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZVN1cmZhY2UpOwotICAgIHN0YXRpYyB2b2lkIGNv
cHlMb2NrYWJsZVN1cmZhY2VzKElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0LCBJRGlyZWN0M0RTdXJm
YWNlOSAqc291cmNlKTsKLQotICAgIHZpcnR1YWwgYm9vbCByZWRlZmluZShSZW5kZXJlciAqcmVu
ZGVyZXIsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgYm9vbCBmb3JjZVJlbGVhc2UpOwotCi0gICAgdmlydHVhbCBib29sIGlzUmVuZGVyYWJsZUZv
cm1hdCgpIGNvbnN0OwotICAgIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25zdDsKLQotICAg
IHZpcnR1YWwgYm9vbCBpc0RpcnR5KCkgY29uc3Qge3JldHVybiBtU3VyZmFjZSAmJiBtRGlydHk7
fQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRTdXJmYWNlKCk7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgc2V0TWFuYWdlZFN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwg
aW50IGxldmVsKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TWFuYWdlZFN1cmZhY2UoVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsKTsKLSAgICB2
aXJ0dWFsIGJvb2wgdXBkYXRlU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9y
YWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlU3VyZmFjZShUZXh0
dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KTsKLQotICAgIHZpcnR1YWwgdm9pZCBsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgIEdM
aW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQpOwotICAgIHZpcnR1YWwgdm9p
ZCBsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCB2b2lkICppbnB1dCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29weShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgZ2w6OkZyYW1lYnVmZmVyICpzb3VyY2UpOwotCi0gIHByaXZhdGU6Ci0g
ICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEltYWdlOSk7Ci0KLSAgICB2b2lkIGNyZWF0ZVN1
cmZhY2UoKTsKLSAgICB2b2lkIHNldE1hbmFnZWRTdXJmYWNlKElEaXJlY3QzRFN1cmZhY2U5ICpz
dXJmYWNlKTsKLSAgICBib29sIHVwZGF0ZVN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3Qs
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0KTsKLQotICAgIEhSRVNVTFQgbG9jayhEM0RMT0NLRURfUkVDVCAqbG9ja2VkUmVjdCwgY29u
c3QgUkVDVCAqcmVjdCk7Ci0gICAgdm9pZCB1bmxvY2soKTsKLSAgICAKLSAgICBSZW5kZXJlcjkg
Km1SZW5kZXJlcjsKLQotICAgIEQzRFBPT0wgbUQzRFBvb2w7ICAgLy8gY2FuIG9ubHkgYmUgRDNE
UE9PTF9TWVNURU1NRU0gb3IgRDNEUE9PTF9NQU5BR0VEIHNpbmNlIGl0IG5lZWRzIHRvIGJlIGxv
Y2thYmxlLgotICAgIEQzREZPUk1BVCBtRDNERm9ybWF0OwotCi0gICAgSURpcmVjdDNEU3VyZmFj
ZTkgKm1TdXJmYWNlOwotfTsKLX0KLQotI2VuZGlmICAgLy8gTElCR0xFU1YyX1JFTkRFUkVSX0lN
QUdFOV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9JbmRleEJ1ZmZlcjExLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhCdWZmZXIxMS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDY2NjA0YzQ1NTgyNGNmNmE0YTc3NmIwNjE5ODJjNTkxOGU1Yzk2YmEuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZlcjExLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDE4MyArMCwwIEBACi0jaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCi0vLwotCi0vLyBJbmRleEJ1ZmZlcjExLmNwcDogRGVmaW5lcyB0aGUgRDNEMTEgSW5k
ZXhCdWZmZXIgaW1wbGVtZW50YXRpb24uCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
SW5kZXhCdWZmZXIxMS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlcjEx
LmgiCi0KLW5hbWVzcGFjZSByeAotewotCi1JbmRleEJ1ZmZlcjExOjpJbmRleEJ1ZmZlcjExKFJl
bmRlcmVyMTEgKmNvbnN0IHJlbmRlcmVyKSA6IG1SZW5kZXJlcihyZW5kZXJlcikKLXsKLSAgICBt
QnVmZmVyID0gTlVMTDsKLSAgICBtQnVmZmVyU2l6ZSA9IDA7Ci0gICAgbUR5bmFtaWNVc2FnZSA9
IGZhbHNlOwotfQotCi1JbmRleEJ1ZmZlcjExOjp+SW5kZXhCdWZmZXIxMSgpCi17Ci0gICAgaWYg
KG1CdWZmZXIpCi0gICAgewotICAgICAgICBtQnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1C
dWZmZXIgPSBOVUxMOwotICAgIH0KLX0KLQotYm9vbCBJbmRleEJ1ZmZlcjExOjppbml0aWFsaXpl
KHVuc2lnbmVkIGludCBidWZmZXJTaXplLCBHTGVudW0gaW5kZXhUeXBlLCBib29sIGR5bmFtaWMp
Ci17Ci0gICAgaWYgKG1CdWZmZXIpCi0gICAgewotICAgICAgICBtQnVmZmVyLT5SZWxlYXNlKCk7
Ci0gICAgICAgIG1CdWZmZXIgPSBOVUxMOwotICAgIH0KLQotICAgIHVwZGF0ZVNlcmlhbCgpOwot
Ci0gICAgaWYgKGJ1ZmZlclNpemUgPiAwKQotICAgIHsKLSAgICAgICAgSUQzRDExRGV2aWNlKiBk
eERldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0KLSAgICAgICAgRDNEMTFfQlVGRkVS
X0RFU0MgYnVmZmVyRGVzYzsKLSAgICAgICAgYnVmZmVyRGVzYy5CeXRlV2lkdGggPSBidWZmZXJT
aXplOwotICAgICAgICBidWZmZXJEZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfRFlOQU1JQzsKLSAg
ICAgICAgYnVmZmVyRGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX0lOREVYX0JVRkZFUjsKLSAg
ICAgICAgYnVmZmVyRGVzYy5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7
Ci0gICAgICAgIGJ1ZmZlckRlc2MuTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgYnVmZmVyRGVzYy5T
dHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKLQotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGR4RGV2
aWNlLT5DcmVhdGVCdWZmZXIoJmJ1ZmZlckRlc2MsIE5VTEwsICZtQnVmZmVyKTsKLSAgICAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtQnVmZmVyU2l6ZSA9IGJ1ZmZlclNpemU7Ci0gICAg
bUluZGV4VHlwZSA9IGluZGV4VHlwZTsKLSAgICBtRHluYW1pY1VzYWdlID0gZHluYW1pYzsKLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1JbmRleEJ1ZmZlcjExICpJbmRleEJ1ZmZlcjExOjptYWtl
SW5kZXhCdWZmZXIxMShJbmRleEJ1ZmZlciAqaW5kZXhCdWZmZXIpCi17Ci0gICAgQVNTRVJUKEhB
U19EWU5BTUlDX1RZUEUoSW5kZXhCdWZmZXIxMSosIGluZGV4QnVmZmVyKSk7Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PEluZGV4QnVmZmVyMTEqPihpbmRleEJ1ZmZlcik7Ci19Ci0KLWJvb2wgSW5k
ZXhCdWZmZXIxMTo6bWFwQnVmZmVyKHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBz
aXplLCB2b2lkKiogb3V0TWFwcGVkTWVtb3J5KQotewotICAgIGlmIChtQnVmZmVyKQotICAgIHsK
LSAgICAgICAgLy8gQ2hlY2sgZm9yIGludGVnZXIgb3ZlcmZsb3dzIGFuZCBvdXQtb3V0LWJvdW5k
cyBtYXAgcmVxdWVzdHMKLSAgICAgICAgaWYgKG9mZnNldCArIHNpemUgPCBvZmZzZXQgfHwgb2Zm
c2V0ICsgc2l6ZSA+IG1CdWZmZXJTaXplKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIklu
ZGV4IGJ1ZmZlciBtYXAgcmFuZ2UgaXMgbm90IGluc2lkZSB0aGUgYnVmZmVyLiIpOwotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgSUQzRDExRGV2aWNlQ29u
dGV4dCAqZHhDb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7Ci0KLSAgICAg
ICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwotICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IGR4Q29udGV4dC0+TWFwKG1CdWZmZXIsIDAsIEQzRDExX01BUF9XUklURV9O
T19PVkVSV1JJVEUsIDAsICZtYXBwZWRSZXNvdXJjZSk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJJbmRleCBidWZmZXIgbWFwIGZhaWxl
ZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLQotICAgICAgICAqb3V0TWFwcGVkTWVtb3J5ID0gcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4obWFwcGVkUmVzb3VyY2UucERhdGEpICsgb2Zmc2V0OwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgRVJSKCJJbmRleCBidWZmZXIg
bm90IGluaXRpYWxpemVkLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1i
b29sIEluZGV4QnVmZmVyMTE6OnVubWFwQnVmZmVyKCkKLXsKLSAgICBpZiAobUJ1ZmZlcikKLSAg
ICB7Ci0gICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmR4Q29udGV4dCA9IG1SZW5kZXJlci0+
Z2V0RGV2aWNlQ29udGV4dCgpOwotICAgICAgICBkeENvbnRleHQtPlVubWFwKG1CdWZmZXIsIDAp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAg
RVJSKCJJbmRleCBidWZmZXIgbm90IGluaXRpYWxpemVkLiIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotfQotCi1HTGVudW0gSW5kZXhCdWZmZXIxMTo6Z2V0SW5kZXhUeXBlKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbUluZGV4VHlwZTsKLX0KLQotdW5zaWduZWQgaW50IEluZGV4QnVm
ZmVyMTE6OmdldEJ1ZmZlclNpemUoKSBjb25zdAotewotICAgIHJldHVybiBtQnVmZmVyU2l6ZTsK
LX0KLQotYm9vbCBJbmRleEJ1ZmZlcjExOjpzZXRTaXplKHVuc2lnbmVkIGludCBidWZmZXJTaXpl
LCBHTGVudW0gaW5kZXhUeXBlKQotewotICAgIGlmIChidWZmZXJTaXplID4gbUJ1ZmZlclNpemUg
fHwgaW5kZXhUeXBlICE9IG1JbmRleFR5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gaW5pdGlh
bGl6ZShidWZmZXJTaXplLCBpbmRleFR5cGUsIG1EeW5hbWljVXNhZ2UpOwotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgSW5kZXhC
dWZmZXIxMTo6ZGlzY2FyZCgpCi17Ci0gICAgaWYgKG1CdWZmZXIpCi0gICAgewotICAgICAgICBJ
RDNEMTFEZXZpY2VDb250ZXh0ICpkeENvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRl
eHQoKTsKLQotICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7
Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZHhDb250ZXh0LT5NYXAobUJ1ZmZlciwgMCwgRDNE
MTFfTUFQX1dSSVRFX0RJU0NBUkQsIDAsICZtYXBwZWRSZXNvdXJjZSk7Ci0gICAgICAgIGlmIChG
QUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJJbmRleCBidWZmZXIg
bWFwIGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBkeENvbnRleHQtPlVubWFwKG1CdWZmZXIs
IDApOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAg
ICAgICBFUlIoIkluZGV4IGJ1ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci19Ci0KLURYR0lfRk9STUFUIEluZGV4QnVmZmVyMTE6OmdldEluZGV4
Rm9ybWF0KCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1JbmRleFR5cGUpCi0gICAgewotICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9CWVRFOiAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjE2X1VJTlQ7Ci0g
ICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOiAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMTZfVUlO
VDsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOiAgICAgcmV0dXJuIERYR0lfRk9STUFUX1Iz
Ml9VSU5UOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICByZXR1cm4gRFhHSV9GT1JN
QVRfVU5LTk9XTjsKLSAgICB9Ci19Ci0KLUlEM0QxMUJ1ZmZlciAqSW5kZXhCdWZmZXIxMTo6Z2V0
QnVmZmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUJ1ZmZlcjsKLX0KLQotfQpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhCdWZmZXIxMS5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZlcjExLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDM5YTYxOTQ2YWQ2ZWY4OTJjNGNhNjZiNjA3ZTY1OWEzNWNjMDlk
ZTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZlcjExLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gSW5kZXhC
dWZmZXIxMS5oOiBEZWZpbmVzIHRoZSBEM0QxMSBJbmRleEJ1ZmZlciBpbXBsZW1lbnRhdGlvbi4K
LQotI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfSU5ERVhCVUZGRVIxMV9IXwotI2RlZmluZSBM
SUJHTEVTVjJfUkVOREVSRVJfSU5ERVhCVUZGRVIxMV9IXwotCi0jaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL0luZGV4QnVmZmVyLmgiCi0KLW5hbWVzcGFjZSByeAotewotY2xhc3MgUmVuZGVy
ZXIxMTsKLQotY2xhc3MgSW5kZXhCdWZmZXIxMSA6IHB1YmxpYyBJbmRleEJ1ZmZlcgotewotICBw
dWJsaWM6Ci0gICAgZXhwbGljaXQgSW5kZXhCdWZmZXIxMShSZW5kZXJlcjExICpjb25zdCByZW5k
ZXJlcik7Ci0gICAgdmlydHVhbCB+SW5kZXhCdWZmZXIxMSgpOwotCi0gICAgdmlydHVhbCBib29s
IGluaXRpYWxpemUodW5zaWduZWQgaW50IGJ1ZmZlclNpemUsIEdMZW51bSBpbmRleFR5cGUsIGJv
b2wgZHluYW1pYyk7Ci0KLSAgICBzdGF0aWMgSW5kZXhCdWZmZXIxMSAqbWFrZUluZGV4QnVmZmVy
MTEoSW5kZXhCdWZmZXIgKmluZGV4QnVmZmVyKTsKLQotICAgIHZpcnR1YWwgYm9vbCBtYXBCdWZm
ZXIodW5zaWduZWQgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IHNpemUsIHZvaWQqKiBvdXRNYXBw
ZWRNZW1vcnkpOwotICAgIHZpcnR1YWwgYm9vbCB1bm1hcEJ1ZmZlcigpOwotCi0gICAgdmlydHVh
bCBHTGVudW0gZ2V0SW5kZXhUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQg
Z2V0QnVmZmVyU2l6ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBzZXRTaXplKHVuc2lnbmVk
IGludCBidWZmZXJTaXplLCBHTGVudW0gaW5kZXhUeXBlKTsKLQotICAgIHZpcnR1YWwgYm9vbCBk
aXNjYXJkKCk7Ci0KLSAgICBEWEdJX0ZPUk1BVCBnZXRJbmRleEZvcm1hdCgpIGNvbnN0OwotICAg
IElEM0QxMUJ1ZmZlciAqZ2V0QnVmZmVyKCkgY29uc3Q7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNB
TExPV19DT1BZX0FORF9BU1NJR04oSW5kZXhCdWZmZXIxMSk7Ci0KLSAgICByeDo6UmVuZGVyZXIx
MSAqY29uc3QgbVJlbmRlcmVyOwotCi0gICAgSUQzRDExQnVmZmVyICptQnVmZmVyOwotICAgIHVu
c2lnbmVkIGludCBtQnVmZmVyU2l6ZTsKLSAgICBHTGVudW0gbUluZGV4VHlwZTsKLSAgICBib29s
IG1EeW5hbWljVXNhZ2U7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJf
SU5ERVhCVUZGRVIxMV9IXwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhCdWZm
ZXI5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
SW5kZXhCdWZmZXI5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZkODNjNWRj
YTdhZjM4ZTYwOWIzNGUyOWEzODA2NmZhYWMxNmE1MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL0luZGV4QnVmZmVyOS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDcgKzAs
MCBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBJ
bmRleGZmZXI5LmNwcDogRGVmaW5lcyB0aGUgRDNEOSBJbmRleEJ1ZmZlciBpbXBsZW1lbnRhdGlv
bi4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZlcjkuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXI5LmgiCi0KLW5hbWVzcGFjZSByeAotewot
Ci1JbmRleEJ1ZmZlcjk6OkluZGV4QnVmZmVyOShSZW5kZXJlcjkgKmNvbnN0IHJlbmRlcmVyKSA6
IG1SZW5kZXJlcihyZW5kZXJlcikKLXsKLSAgICBtSW5kZXhCdWZmZXIgPSBOVUxMOwotICAgIG1C
dWZmZXJTaXplID0gMDsKLSAgICBtSW5kZXhUeXBlID0gMDsKLSAgICBtRHluYW1pYyA9IGZhbHNl
OwotfQotCi1JbmRleEJ1ZmZlcjk6On5JbmRleEJ1ZmZlcjkoKQotewotICAgIGlmIChtSW5kZXhC
dWZmZXIpCi0gICAgewotICAgICAgICBtSW5kZXhCdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAg
bUluZGV4QnVmZmVyID0gTlVMTDsKLSAgICB9Ci19Ci0KLWJvb2wgSW5kZXhCdWZmZXI5Ojppbml0
aWFsaXplKHVuc2lnbmVkIGludCBidWZmZXJTaXplLCBHTGVudW0gaW5kZXhUeXBlLCBib29sIGR5
bmFtaWMpCi17Ci0gICAgaWYgKG1JbmRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1JbmRleEJ1
ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtSW5kZXhCdWZmZXIgPSBOVUxMOwotICAgIH0KLQot
ICAgIHVwZGF0ZVNlcmlhbCgpOwotCi0gICAgaWYgKGJ1ZmZlclNpemUgPiAwKQotICAgIHsKLSAg
ICAgICAgRDNERk9STUFUIGZvcm1hdDsKLSAgICAgICAgaWYgKGluZGV4VHlwZSA9PSBHTF9VTlNJ
R05FRF9TSE9SVCB8fCBpbmRleFR5cGUgPT0gR0xfVU5TSUdORURfQllURSkKLSAgICAgICAgewot
ICAgICAgICAgICAgZm9ybWF0ID0gRDNERk1UX0lOREVYMTY7Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZSBpZiAoaW5kZXhUeXBlID09IEdMX1VOU0lHTkVEX0lOVCkKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKG1SZW5kZXJlci0+Z2V0MzJCaXRJbmRleFN1cHBvcnQoKSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBmb3JtYXQgPSBEM0RGTVRfSU5ERVgzMjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBFUlIo
IkF0dGVtcHRlZCB0byBjcmVhdGUgYSAzMi1iaXQgaW5kZXggYnVmZmVyIGJ1dCByZW5kZXJlciBk
b2VzIG5vdCBzdXBwb3J0IDMyLWJpdCBpbmRpY2VzLiIpOwotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEVSUigiSW52YWxpZCBpbmRleCB0eXBlICV1LiIsIGluZGV4VHlwZSk7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBEV09SRCB1
c2FnZUZsYWdzID0gRDNEVVNBR0VfV1JJVEVPTkxZOwotICAgICAgICBpZiAoZHluYW1pYykKLSAg
ICAgICAgewotICAgICAgICAgICAgdXNhZ2VGbGFncyB8PSBEM0RVU0FHRV9EWU5BTUlDOwotICAg
ICAgICB9Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXItPmNyZWF0ZUluZGV4
QnVmZmVyKGJ1ZmZlclNpemUsIHVzYWdlRmxhZ3MsIGZvcm1hdCwgJm1JbmRleEJ1ZmZlcik7Ci0g
ICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJG
YWlsZWQgdG8gY3JlYXRlIGFuIGluZGV4IGJ1ZmZlciBvZiBzaXplICV1LCByZXN1bHQ6IDB4JTA4
eC4iLCBtQnVmZmVyU2l6ZSwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIG1CdWZmZXJTaXplID0gYnVmZmVyU2l6ZTsKLSAgICBtSW5k
ZXhUeXBlID0gaW5kZXhUeXBlOwotICAgIG1EeW5hbWljID0gZHluYW1pYzsKLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1JbmRleEJ1ZmZlcjkgKkluZGV4QnVmZmVyOTo6bWFrZUluZGV4QnVmZmVy
OShJbmRleEJ1ZmZlciAqaW5kZXhCdWZmZXIpCi17Ci0gICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZ
UEUoSW5kZXhCdWZmZXI5KiwgaW5kZXhCdWZmZXIpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SW5kZXhCdWZmZXI5Kj4oaW5kZXhCdWZmZXIpOwotfQotCi1ib29sIEluZGV4QnVmZmVyOTo6bWFw
QnVmZmVyKHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBzaXplLCB2b2lkKiogb3V0
TWFwcGVkTWVtb3J5KQotewotICAgIGlmIChtSW5kZXhCdWZmZXIpCi0gICAgewotICAgICAgICBE
V09SRCBsb2NrRmxhZ3MgPSBtRHluYW1pYyA/IEQzRExPQ0tfTk9PVkVSV1JJVEUgOiAwOwotCi0g
ICAgICAgIHZvaWQgKm1hcFB0ciA9IE5VTEw7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUlu
ZGV4QnVmZmVyLT5Mb2NrKG9mZnNldCwgc2l6ZSwgJm1hcFB0ciwgbG9ja0ZsYWdzKTsKLSAgICAg
ICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkluZGV4
IGJ1ZmZlciBsb2NrIGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICAqb3V0TWFwcGVkTWVtb3J5
ID0gbWFwUHRyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsK
LSAgICAgICAgRVJSKCJJbmRleCBidWZmZXIgbm90IGluaXRpYWxpemVkLiIpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIEluZGV4QnVmZmVyOTo6dW5tYXBCdWZmZXIo
KQotewotICAgIGlmIChtSW5kZXhCdWZmZXIpCi0gICAgewotICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IG1JbmRleEJ1ZmZlci0+VW5sb2NrKCk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
LSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJJbmRleCBidWZmZXIgdW5sb2NrIGZhaWxlZCB3
aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsK
LSAgICAgICAgRVJSKCJJbmRleCBidWZmZXIgbm90IGluaXRpYWxpemVkLiIpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1HTGVudW0gSW5kZXhCdWZmZXI5OjpnZXRJbmRleFR5
cGUoKSBjb25zdAotewotICAgIHJldHVybiBtSW5kZXhUeXBlOwotfQotCi11bnNpZ25lZCBpbnQg
SW5kZXhCdWZmZXI5OjpnZXRCdWZmZXJTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUJ1ZmZl
clNpemU7Ci19Ci0KLWJvb2wgSW5kZXhCdWZmZXI5OjpzZXRTaXplKHVuc2lnbmVkIGludCBidWZm
ZXJTaXplLCBHTGVudW0gaW5kZXhUeXBlKQotewotICAgIGlmIChidWZmZXJTaXplID4gbUJ1ZmZl
clNpemUgfHwgaW5kZXhUeXBlICE9IG1JbmRleFR5cGUpCi0gICAgewotICAgICAgICByZXR1cm4g
aW5pdGlhbGl6ZShidWZmZXJTaXplLCBpbmRleFR5cGUsIG1EeW5hbWljKTsKLSAgICB9Ci0gICAg
ZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfQotCi1ib29sIEluZGV4
QnVmZmVyOTo6ZGlzY2FyZCgpCi17Ci0gICAgaWYgKG1JbmRleEJ1ZmZlcikKLSAgICB7Ci0gICAg
ICAgIHZvaWQgKmR1bW15OwotICAgICAgICBIUkVTVUxUIHJlc3VsdDsKLQotICAgICAgICByZXN1
bHQgPSBtSW5kZXhCdWZmZXItPkxvY2soMCwgMSwgJmR1bW15LCBEM0RMT0NLX0RJU0NBUkQpOwot
ICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigi
RGlzY2FyZCBsb2NrIGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHQgPSBtSW5kZXhC
dWZmZXItPlVubG9jaygpOwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEVSUigiRGlzY2FyZCB1bmxvY2sgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4
IiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBFUlIoIklu
ZGV4IGJ1ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci19Ci0KLUQzREZPUk1BVCBJbmRleEJ1ZmZlcjk6OmdldEluZGV4Rm9ybWF0KCkgY29uc3QK
LXsKLSAgICBzd2l0Y2ggKG1JbmRleFR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9VTlNJR05F
RF9CWVRFOiAgICByZXR1cm4gRDNERk1UX0lOREVYMTY7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVE
X1NIT1JUOiAgIHJldHVybiBEM0RGTVRfSU5ERVgxNjsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURf
SU5UOiAgICAgcmV0dXJuIEQzREZNVF9JTkRFWDMyOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsgICByZXR1cm4gRDNERk1UX1VOS05PV047Ci0gICAgfQotfQotCi1JRGlyZWN0M0RJbmRl
eEJ1ZmZlcjkgKiBJbmRleEJ1ZmZlcjk6OmdldEJ1ZmZlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1JbmRleEJ1ZmZlcjsKLX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5k
ZXhCdWZmZXI5LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL0luZGV4QnVmZmVyOS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODAxODY3
NTMyNDU1NzNiMzdhODhkOWE1ZGRhZjVjNDA3NGUwZTI3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvSW5kZXhCdWZmZXI5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCww
IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBJbmRleGZmZXI5Lmg6IERlZmluZXMgdGhlIEQz
RDkgSW5kZXhCdWZmZXIgaW1wbGVtZW50YXRpb24uCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JFTkRF
UkVSX0lOREVYQlVGRkVSOV9IXwotI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfSU5ERVhCVUZG
RVI5X0hfCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhCdWZmZXIuaCIKLQot
bmFtZXNwYWNlIHJ4Ci17Ci1jbGFzcyBSZW5kZXJlcjk7Ci0KLWNsYXNzIEluZGV4QnVmZmVyOSA6
IHB1YmxpYyBJbmRleEJ1ZmZlcgotewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgSW5kZXhCdWZm
ZXI5KFJlbmRlcmVyOSAqY29uc3QgcmVuZGVyZXIpOwotICAgIHZpcnR1YWwgfkluZGV4QnVmZmVy
OSgpOwotCi0gICAgdmlydHVhbCBib29sIGluaXRpYWxpemUodW5zaWduZWQgaW50IGJ1ZmZlclNp
emUsIEdMZW51bSBpbmRleFR5cGUsIGJvb2wgZHluYW1pYyk7Ci0KLSAgICBzdGF0aWMgSW5kZXhC
dWZmZXI5ICptYWtlSW5kZXhCdWZmZXI5KEluZGV4QnVmZmVyICppbmRleEJ1ZmZlcik7Ci0KLSAg
ICB2aXJ0dWFsIGJvb2wgbWFwQnVmZmVyKHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGlu
dCBzaXplLCB2b2lkKiogb3V0TWFwcGVkTWVtb3J5KTsKLSAgICB2aXJ0dWFsIGJvb2wgdW5tYXBC
dWZmZXIoKTsKLQotICAgIHZpcnR1YWwgR0xlbnVtIGdldEluZGV4VHlwZSgpIGNvbnN0OwotICAg
IHZpcnR1YWwgdW5zaWduZWQgaW50IGdldEJ1ZmZlclNpemUoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgc2V0U2l6ZSh1bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSwgR0xlbnVtIGluZGV4VHlwZSk7
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZGlzY2FyZCgpOwotCi0gICAgRDNERk9STUFUIGdldEluZGV4
Rm9ybWF0KCkgY29uc3Q7Ci0gICAgSURpcmVjdDNESW5kZXhCdWZmZXI5ICpnZXRCdWZmZXIoKSBj
b25zdDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihJbmRleEJ1
ZmZlcjkpOwotCi0gICAgcng6OlJlbmRlcmVyOSAqY29uc3QgbVJlbmRlcmVyOwotCi0gICAgSURp
cmVjdDNESW5kZXhCdWZmZXI5ICptSW5kZXhCdWZmZXI7Ci0gICAgdW5zaWduZWQgaW50IG1CdWZm
ZXJTaXplOwotICAgIEdMZW51bSBtSW5kZXhUeXBlOwotICAgIGJvb2wgbUR5bmFtaWM7Ci19Owot
Ci19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfSU5ERVhCVUZGRVI5X0hfCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0lu
cHV0TGF5b3V0Q2FjaGUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9JbnB1dExheW91dENhY2hlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMTU1MmYzYTMyNmVhZGE1MThiZTQzZDA4MDNkN2U2MWUxMWUwZmY5NS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0lucHV0TGF5b3V0Q2FjaGUuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMjEzICswLDAgQEAKLSNpbmNsdWRlICJwcmVjb21waWxlZC5oIgotLy8KLS8v
IENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCi0KLS8vIElucHV0TGF5b3V0Q2FjaGUuY3BwOiBEZWZpbmVzIElucHV0TGF5b3V0Q2Fj
aGUsIGEgY2xhc3MgdGhhdCBidWlsZHMgYW5kIGNhY2hlcwotLy8gRDNEMTEgaW5wdXQgbGF5b3V0
cy4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbnB1dExheW91dENhY2hlLmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlcjExLmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UxMS5oIgotI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlMTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUHJv
Z3JhbUJpbmFyeS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERhdGFNYW5hZ2VyLmgiCi0KLSNpbmNsdWRlICJ0aGly
ZF9wYXJ0eS9tdXJtdXJoYXNoL011cm11ckhhc2gzLmgiCi0KLW5hbWVzcGFjZSByeAotewotCi1j
b25zdCB1bnNpZ25lZCBpbnQgSW5wdXRMYXlvdXRDYWNoZTo6a01heElucHV0TGF5b3V0cyA9IDEw
MjQ7Ci0KLUlucHV0TGF5b3V0Q2FjaGU6OklucHV0TGF5b3V0Q2FjaGUoKSA6IG1JbnB1dExheW91
dE1hcChrTWF4SW5wdXRMYXlvdXRzLCBoYXNoSW5wdXRMYXlvdXQsIGNvbXBhcmVJbnB1dExheW91
dHMpCi17Ci0gICAgbUNvdW50ZXIgPSAwOwotICAgIG1EZXZpY2UgPSBOVUxMOwotICAgIG1EZXZp
Y2VDb250ZXh0ID0gTlVMTDsKLSAgICBtQ3VycmVudElMID0gTlVMTDsKLSAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICB7Ci0g
ICAgICAgIG1DdXJyZW50QnVmZmVyc1tpXSA9IC0xOwotICAgICAgICBtQ3VycmVudFZlcnRleFN0
cmlkZXNbaV0gPSAtMTsKLSAgICAgICAgbUN1cnJlbnRWZXJ0ZXhPZmZzZXRzW2ldID0gLTE7Ci0g
ICAgfQotfQotCi1JbnB1dExheW91dENhY2hlOjp+SW5wdXRMYXlvdXRDYWNoZSgpCi17Ci0gICAg
Y2xlYXIoKTsKLX0KLQotdm9pZCBJbnB1dExheW91dENhY2hlOjppbml0aWFsaXplKElEM0QxMURl
dmljZSAqZGV2aWNlLCBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0KQotewotICAgIGNsZWFy
KCk7Ci0gICAgbURldmljZSA9IGRldmljZTsKLSAgICBtRGV2aWNlQ29udGV4dCA9IGNvbnRleHQ7
Ci19Ci0KLXZvaWQgSW5wdXRMYXlvdXRDYWNoZTo6Y2xlYXIoKQotewotICAgIGZvciAoSW5wdXRM
YXlvdXRNYXA6Oml0ZXJhdG9yIGkgPSBtSW5wdXRMYXlvdXRNYXAuYmVnaW4oKTsgaSAhPSBtSW5w
dXRMYXlvdXRNYXAuZW5kKCk7IGkrKykKLSAgICB7Ci0gICAgICAgIGktPnNlY29uZC5pbnB1dExh
eW91dC0+UmVsZWFzZSgpOwotICAgIH0KLSAgICBtSW5wdXRMYXlvdXRNYXAuY2xlYXIoKTsKLSAg
ICBtYXJrRGlydHkoKTsKLX0KLQotdm9pZCBJbnB1dExheW91dENhY2hlOjptYXJrRGlydHkoKQot
ewotICAgIG1DdXJyZW50SUwgPSBOVUxMOwotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAgICAgICAgbUN1cnJlbnRC
dWZmZXJzW2ldID0gLTE7Ci0gICAgICAgIG1DdXJyZW50VmVydGV4U3RyaWRlc1tpXSA9IC0xOwot
ICAgICAgICBtQ3VycmVudFZlcnRleE9mZnNldHNbaV0gPSAtMTsKLSAgICB9Ci19Ci0KLUdMZW51
bSBJbnB1dExheW91dENhY2hlOjphcHBseVZlcnRleEJ1ZmZlcnMoVHJhbnNsYXRlZEF0dHJpYnV0
ZSBhdHRyaWJ1dGVzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSkKLXsKLSAgICBpbnQgc29ydGVkU2VtYW50aWNJbmRpY2VzW2dsOjpNQVhfVkVSVEVYX0FUVFJJ
QlNdOwotICAgIHByb2dyYW1CaW5hcnktPnNvcnRBdHRyaWJ1dGVzQnlMYXlvdXQoYXR0cmlidXRl
cywgc29ydGVkU2VtYW50aWNJbmRpY2VzKTsKLQotICAgIGlmICghbURldmljZSB8fCAhbURldmlj
ZUNvbnRleHQpCi0gICAgewotICAgICAgICBFUlIoIklucHV0TGF5b3V0Q2FjaGUgaXMgbm90IGlu
aXRpYWxpemVkLiIpOwotICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047Ci0gICAg
fQotCi0gICAgSW5wdXRMYXlvdXRLZXkgaWxLZXkgPSB7IDAgfTsKLQotICAgIElEM0QxMUJ1ZmZl
ciAqdmVydGV4QnVmZmVyc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSA9IHsgTlVMTCB9OwotICAg
IHVuc2lnbmVkIGludCB2ZXJ0ZXhCdWZmZXJTZXJpYWxzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNd
ID0geyAwIH07Ci0gICAgVUlOVCB2ZXJ0ZXhTdHJpZGVzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNd
ID0geyAwIH07Ci0gICAgVUlOVCB2ZXJ0ZXhPZmZzZXRzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNd
ID0geyAwIH07Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogc2VtYW50aWNOYW1lID0gIlRFWENP
T1JEIjsKLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9WRVJURVhf
QVRUUklCUzsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uYWN0aXZlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBWZXJ0ZXhCdWZmZXIxMSAqdmVydGV4QnVmZmVyID0gVmVy
dGV4QnVmZmVyMTE6Om1ha2VWZXJ0ZXhCdWZmZXIxMShhdHRyaWJ1dGVzW2ldLnZlcnRleEJ1ZmZl
cik7Ci0gICAgICAgICAgICBCdWZmZXJTdG9yYWdlMTEgKmJ1ZmZlclN0b3JhZ2UgPSBhdHRyaWJ1
dGVzW2ldLnN0b3JhZ2UgPyBCdWZmZXJTdG9yYWdlMTE6Om1ha2VCdWZmZXJTdG9yYWdlMTEoYXR0
cmlidXRlc1tpXS5zdG9yYWdlKSA6IE5VTEw7Ci0KLSAgICAgICAgICAgIEQzRDExX0lOUFVUX0NM
QVNTSUZJQ0FUSU9OIGlucHV0Q2xhc3MgPSBhdHRyaWJ1dGVzW2ldLmRpdmlzb3IgPiAwID8gRDNE
MTFfSU5QVVRfUEVSX0lOU1RBTkNFX0RBVEEgOiBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RBVEE7
Ci0KLSAgICAgICAgICAgIC8vIFJlY29yZCB0aGUgdHlwZSBvZiB0aGUgYXNzb2NpYXRlZCB2ZXJ0
ZXggc2hhZGVyIHZlY3RvciBpbiBvdXIga2V5Ci0gICAgICAgICAgICAvLyBUaGlzIHdpbGwgcHJl
dmVudCBtaXNtYXRjaGVkIHZlcnRleCBzaGFkZXJzIGZyb20gdXNpbmcgdGhlIHNhbWUgaW5wdXQg
bGF5b3V0Ci0gICAgICAgICAgICBHTGludCBhdHRyaWJ1dGVTaXplOwotICAgICAgICAgICAgcHJv
Z3JhbUJpbmFyeS0+Z2V0QWN0aXZlQXR0cmlidXRlKGlsS2V5LmVsZW1lbnRDb3VudCwgMCwgTlVM
TCwgJmF0dHJpYnV0ZVNpemUsICZpbEtleS5lbGVtZW50c1tpbEtleS5lbGVtZW50Q291bnRdLmds
c2xFbGVtZW50VHlwZSwgTlVMTCk7Ci0KLSAgICAgICAgICAgIGlsS2V5LmVsZW1lbnRzW2lsS2V5
LmVsZW1lbnRDb3VudF0uZGVzYy5TZW1hbnRpY05hbWUgPSBzZW1hbnRpY05hbWU7Ci0gICAgICAg
ICAgICBpbEtleS5lbGVtZW50c1tpbEtleS5lbGVtZW50Q291bnRdLmRlc2MuU2VtYW50aWNJbmRl
eCA9IHNvcnRlZFNlbWFudGljSW5kaWNlc1tpXTsKLSAgICAgICAgICAgIGlsS2V5LmVsZW1lbnRz
W2lsS2V5LmVsZW1lbnRDb3VudF0uZGVzYy5Gb3JtYXQgPSBhdHRyaWJ1dGVzW2ldLmF0dHJpYnV0
ZS0+bUFycmF5RW5hYmxlZCA/IHZlcnRleEJ1ZmZlci0+Z2V0RFhHSUZvcm1hdCgqYXR0cmlidXRl
c1tpXS5hdHRyaWJ1dGUpIDogRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUOwotICAgICAg
ICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5kZXNjLklucHV0U2xvdCA9
IGk7Ci0gICAgICAgICAgICBpbEtleS5lbGVtZW50c1tpbEtleS5lbGVtZW50Q291bnRdLmRlc2Mu
QWxpZ25lZEJ5dGVPZmZzZXQgPSAwOwotICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXku
ZWxlbWVudENvdW50XS5kZXNjLklucHV0U2xvdENsYXNzID0gaW5wdXRDbGFzczsKLSAgICAgICAg
ICAgIGlsS2V5LmVsZW1lbnRzW2lsS2V5LmVsZW1lbnRDb3VudF0uZGVzYy5JbnN0YW5jZURhdGFT
dGVwUmF0ZSA9IGF0dHJpYnV0ZXNbaV0uZGl2aXNvcjsKLSAgICAgICAgICAgIGlsS2V5LmVsZW1l
bnRDb3VudCsrOwotCi0gICAgICAgICAgICB2ZXJ0ZXhCdWZmZXJzW2ldID0gYnVmZmVyU3RvcmFn
ZSA/IGJ1ZmZlclN0b3JhZ2UtPmdldEJ1ZmZlcigpIDogdmVydGV4QnVmZmVyLT5nZXRCdWZmZXIo
KTsKLSAgICAgICAgICAgIHZlcnRleEJ1ZmZlclNlcmlhbHNbaV0gPSBidWZmZXJTdG9yYWdlID8g
YnVmZmVyU3RvcmFnZS0+Z2V0U2VyaWFsKCkgOiB2ZXJ0ZXhCdWZmZXItPmdldFNlcmlhbCgpOwot
ICAgICAgICAgICAgdmVydGV4U3RyaWRlc1tpXSA9IGF0dHJpYnV0ZXNbaV0uc3RyaWRlOwotICAg
ICAgICAgICAgdmVydGV4T2Zmc2V0c1tpXSA9IGF0dHJpYnV0ZXNbaV0ub2Zmc2V0OwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgSUQzRDExSW5wdXRMYXlvdXQgKmlucHV0TGF5b3V0ID0gTlVMTDsK
LQotICAgIElucHV0TGF5b3V0TWFwOjppdGVyYXRvciBpID0gbUlucHV0TGF5b3V0TWFwLmZpbmQo
aWxLZXkpOwotICAgIGlmIChpICE9IG1JbnB1dExheW91dE1hcC5lbmQoKSkKLSAgICB7Ci0gICAg
ICAgIGlucHV0TGF5b3V0ID0gaS0+c2Vjb25kLmlucHV0TGF5b3V0OwotICAgICAgICBpLT5zZWNv
bmQubGFzdFVzZWRUaW1lID0gbUNvdW50ZXIrKzsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAg
ICAgICAgU2hhZGVyRXhlY3V0YWJsZTExICpzaGFkZXIgPSBTaGFkZXJFeGVjdXRhYmxlMTE6Om1h
a2VTaGFkZXJFeGVjdXRhYmxlMTEocHJvZ3JhbUJpbmFyeS0+Z2V0VmVydGV4RXhlY3V0YWJsZSgp
KTsKLQotICAgICAgICBEM0QxMV9JTlBVVF9FTEVNRU5UX0RFU0MgZGVzY3NbZ2w6Ok1BWF9WRVJU
RVhfQVRUUklCU107Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgaWxLZXku
ZWxlbWVudENvdW50OyArK2opCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc2NzW2pdID0gaWxL
ZXkuZWxlbWVudHNbal0uZGVzYzsKLSAgICAgICAgfQotCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gbURldmljZS0+Q3JlYXRlSW5wdXRMYXlvdXQoZGVzY3MsIGlsS2V5LmVsZW1lbnRDb3VudCwg
c2hhZGVyLT5nZXRGdW5jdGlvbigpLCBzaGFkZXItPmdldExlbmd0aCgpLCAmaW5wdXRMYXlvdXQp
OwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVS
UigiRmFpbGVkIHRvIGNyYXRlIGlucHV0IGxheW91dCwgcmVzdWx0OiAweCUwOHgiLCByZXN1bHQp
OwotICAgICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKG1JbnB1dExheW91dE1hcC5zaXplKCkgPj0ga01heElucHV0TGF5b3V0cykK
LSAgICAgICAgewotICAgICAgICAgICAgVFJBQ0UoIk92ZXJmbG93ZWQgdGhlIGxpbWl0IG9mICV1
IGlucHV0IGxheW91dHMsIHJlbW92aW5nIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkICIKLSAgICAg
ICAgICAgICAgICAgICJ0byBtYWtlIHJvb20uIiwga01heElucHV0TGF5b3V0cyk7Ci0KLSAgICAg
ICAgICAgIElucHV0TGF5b3V0TWFwOjppdGVyYXRvciBsZWFzdFJlY2VudGx5VXNlZCA9IG1JbnB1
dExheW91dE1hcC5iZWdpbigpOwotICAgICAgICAgICAgZm9yIChJbnB1dExheW91dE1hcDo6aXRl
cmF0b3IgaSA9IG1JbnB1dExheW91dE1hcC5iZWdpbigpOyBpICE9IG1JbnB1dExheW91dE1hcC5l
bmQoKTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChpLT5zZWNvbmQu
bGFzdFVzZWRUaW1lIDwgbGVhc3RSZWNlbnRseVVzZWQtPnNlY29uZC5sYXN0VXNlZFRpbWUpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZCA9
IGk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGVhc3RS
ZWNlbnRseVVzZWQtPnNlY29uZC5pbnB1dExheW91dC0+UmVsZWFzZSgpOwotICAgICAgICAgICAg
bUlucHV0TGF5b3V0TWFwLmVyYXNlKGxlYXN0UmVjZW50bHlVc2VkKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIElucHV0TGF5b3V0Q291bnRlclBhaXIgaW5wdXRDb3VudGVyUGFpcjsKLSAgICAgICAg
aW5wdXRDb3VudGVyUGFpci5pbnB1dExheW91dCA9IGlucHV0TGF5b3V0OwotICAgICAgICBpbnB1
dENvdW50ZXJQYWlyLmxhc3RVc2VkVGltZSA9IG1Db3VudGVyKys7Ci0KLSAgICAgICAgbUlucHV0
TGF5b3V0TWFwLmluc2VydChzdGQ6Om1ha2VfcGFpcihpbEtleSwgaW5wdXRDb3VudGVyUGFpcikp
OwotICAgIH0KLQotICAgIGlmIChpbnB1dExheW91dCAhPSBtQ3VycmVudElMKQotICAgIHsKLSAg
ICAgICAgbURldmljZUNvbnRleHQtPklBU2V0SW5wdXRMYXlvdXQoaW5wdXRMYXlvdXQpOwotICAg
ICAgICBtQ3VycmVudElMID0gaW5wdXRMYXlvdXQ7Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAgewotICAg
ICAgICBpZiAodmVydGV4QnVmZmVyU2VyaWFsc1tpXSAhPSBtQ3VycmVudEJ1ZmZlcnNbaV0gfHwg
dmVydGV4U3RyaWRlc1tpXSAhPSBtQ3VycmVudFZlcnRleFN0cmlkZXNbaV0gfHwKLSAgICAgICAg
ICAgIHZlcnRleE9mZnNldHNbaV0gIT0gbUN1cnJlbnRWZXJ0ZXhPZmZzZXRzW2ldKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRWZXJ0ZXhCdWZmZXJzKGksIDEs
ICZ2ZXJ0ZXhCdWZmZXJzW2ldLCAmdmVydGV4U3RyaWRlc1tpXSwgJnZlcnRleE9mZnNldHNbaV0p
OwotICAgICAgICAgICAgbUN1cnJlbnRCdWZmZXJzW2ldID0gdmVydGV4QnVmZmVyU2VyaWFsc1tp
XTsKLSAgICAgICAgICAgIG1DdXJyZW50VmVydGV4U3RyaWRlc1tpXSA9IHZlcnRleFN0cmlkZXNb
aV07Ci0gICAgICAgICAgICBtQ3VycmVudFZlcnRleE9mZnNldHNbaV0gPSB2ZXJ0ZXhPZmZzZXRz
W2ldOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX05PX0VSUk9SOwotfQotCi1z
dGQ6OnNpemVfdCBJbnB1dExheW91dENhY2hlOjpoYXNoSW5wdXRMYXlvdXQoY29uc3QgSW5wdXRM
YXlvdXRLZXkgJmlucHV0TGF5b3V0KQotewotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQg
c2VlZCA9IDB4REVBREJFRUY7Ci0KLSAgICBzdGQ6OnNpemVfdCBoYXNoID0gMDsKLSAgICBNdXJt
dXJIYXNoM194ODZfMzIoaW5wdXRMYXlvdXQuYmVnaW4oKSwgaW5wdXRMYXlvdXQuZW5kKCkgLSBp
bnB1dExheW91dC5iZWdpbigpLCBzZWVkLCAmaGFzaCk7Ci0gICAgcmV0dXJuIGhhc2g7Ci19Ci0K
LWJvb2wgSW5wdXRMYXlvdXRDYWNoZTo6Y29tcGFyZUlucHV0TGF5b3V0cyhjb25zdCBJbnB1dExh
eW91dEtleSAmYSwgY29uc3QgSW5wdXRMYXlvdXRLZXkgJmIpCi17Ci0gICAgaWYgKGEuZWxlbWVu
dENvdW50ICE9IGIuZWxlbWVudENvdW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIHJldHVybiBzdGQ6OmVxdWFsKGEuYmVnaW4oKSwgYS5lbmQoKSwgYi5iZWdp
bigpKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9JbnB1dExheW91dENhY2hlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0lucHV0TGF5b3V0Q2FjaGUuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYmIxYThlZWJjZjdhNmNhOTkwY2FiOTM4MjU1OGYzMzk3ODE0
N2EwMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0lucHV0TGF5b3V0Q2Fj
aGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBJ
bnB1dExheW91dENhY2hlLmg6IERlZmluZXMgSW5wdXRMYXlvdXRDYWNoZSwgYSBjbGFzcyB0aGF0
IGJ1aWxkcyBhbmQgY2FjaGVzCi0vLyBEM0QxMSBpbnB1dCBsYXlvdXRzLgotCi0jaWZuZGVmIExJ
QkdMRVNWMl9SRU5ERVJFUl9JTlBVVExBWU9VVENBQ0hFX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9S
RU5ERVJFUl9JTlBVVExBWU9VVENBQ0hFX0hfCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29uc3Rh
bnRzLmgiCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLQotbmFtZXNwYWNlIGdsCi17
Ci1jbGFzcyBQcm9ncmFtQmluYXJ5OwotfQotCi1uYW1lc3BhY2UgcngKLXsKLXN0cnVjdCBUcmFu
c2xhdGVkQXR0cmlidXRlOwotCi1jbGFzcyBJbnB1dExheW91dENhY2hlCi17Ci0gIHB1YmxpYzoK
LSAgICBJbnB1dExheW91dENhY2hlKCk7Ci0gICAgdmlydHVhbCB+SW5wdXRMYXlvdXRDYWNoZSgp
OwotCi0gICAgdm9pZCBpbml0aWFsaXplKElEM0QxMURldmljZSAqZGV2aWNlLCBJRDNEMTFEZXZp
Y2VDb250ZXh0ICpjb250ZXh0KTsKLSAgICB2b2lkIGNsZWFyKCk7Ci0gICAgdm9pZCBtYXJrRGly
dHkoKTsKLQotICAgIEdMZW51bSBhcHBseVZlcnRleEJ1ZmZlcnMoVHJhbnNsYXRlZEF0dHJpYnV0
ZSBhdHRyaWJ1dGVzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpOwotCi0gIHByaXZh
dGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKElucHV0TGF5b3V0Q2FjaGUpOwotCi0g
ICAgc3RydWN0IElucHV0TGF5b3V0RWxlbWVudAotICAgIHsKLSAgICAgICAgRDNEMTFfSU5QVVRf
RUxFTUVOVF9ERVNDIGRlc2M7Ci0gICAgICAgIEdMZW51bSBnbHNsRWxlbWVudFR5cGU7Ci0gICAg
fTsKLQotICAgIHN0cnVjdCBJbnB1dExheW91dEtleQotICAgIHsKLSAgICAgICAgdW5zaWduZWQg
aW50IGVsZW1lbnRDb3VudDsKLSAgICAgICAgSW5wdXRMYXlvdXRFbGVtZW50IGVsZW1lbnRzW2ds
OjpNQVhfVkVSVEVYX0FUVFJJQlNdOwotCi0gICAgICAgIGNvbnN0IGNoYXIgKmJlZ2luKCkgY29u
c3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Y2hhcio+KCZlbGVtZW50Q291bnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgY2hhciAq
ZW5kKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgY2hhcio+KCZlbGVtZW50c1tlbGVtZW50Q291bnRdKTsKLSAgICAgICAgfQotICAg
IH07Ci0KLSAgICBzdHJ1Y3QgSW5wdXRMYXlvdXRDb3VudGVyUGFpcgotICAgIHsKLSAgICAgICAg
SUQzRDExSW5wdXRMYXlvdXQgKmlucHV0TGF5b3V0OwotICAgICAgICB1bnNpZ25lZCBsb25nIGxv
bmcgbGFzdFVzZWRUaW1lOwotICAgIH07Ci0KLSAgICBJRDNEMTFJbnB1dExheW91dCAqbUN1cnJl
bnRJTDsKLSAgICB1bnNpZ25lZCBpbnQgbUN1cnJlbnRCdWZmZXJzW2dsOjpNQVhfVkVSVEVYX0FU
VFJJQlNdOwotICAgIFVJTlQgbUN1cnJlbnRWZXJ0ZXhTdHJpZGVzW2dsOjpNQVhfVkVSVEVYX0FU
VFJJQlNdOwotICAgIFVJTlQgbUN1cnJlbnRWZXJ0ZXhPZmZzZXRzW2dsOjpNQVhfVkVSVEVYX0FU
VFJJQlNdOwotCi0gICAgc3RhdGljIHN0ZDo6c2l6ZV90IGhhc2hJbnB1dExheW91dChjb25zdCBJ
bnB1dExheW91dEtleSAmaW5wdXRMYXlvdXQpOwotICAgIHN0YXRpYyBib29sIGNvbXBhcmVJbnB1
dExheW91dHMoY29uc3QgSW5wdXRMYXlvdXRLZXkgJmEsIGNvbnN0IElucHV0TGF5b3V0S2V5ICZi
KTsKLQotICAgIHR5cGVkZWYgc3RkOjpzaXplX3QgKCpJbnB1dExheW91dEhhc2hGdW5jdGlvbiko
Y29uc3QgSW5wdXRMYXlvdXRLZXkgJik7Ci0gICAgdHlwZWRlZiBib29sICgqSW5wdXRMYXlvdXRF
cXVhbGl0eUZ1bmN0aW9uKShjb25zdCBJbnB1dExheW91dEtleSAmLCBjb25zdCBJbnB1dExheW91
dEtleSAmKTsKLSAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxJbnB1dExheW91dEtleSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnB1dExheW91dENvdW50ZXJQYWlyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElucHV0TGF5b3V0SGFzaEZ1bmN0aW9uLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElucHV0TGF5b3V0RXF1YWxpdHlGdW5jdGlv
bj4gSW5wdXRMYXlvdXRNYXA7Ci0gICAgSW5wdXRMYXlvdXRNYXAgbUlucHV0TGF5b3V0TWFwOwot
Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBrTWF4SW5wdXRMYXlvdXRzOwotCi0gICAg
dW5zaWduZWQgbG9uZyBsb25nIG1Db3VudGVyOwotCi0gICAgSUQzRDExRGV2aWNlICptRGV2aWNl
OwotICAgIElEM0QxMURldmljZUNvbnRleHQgKm1EZXZpY2VDb250ZXh0OwotfTsKLQotfQotCi0j
ZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX0lOUFVUTEFZT1VUQ0FDSEVfSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUXVlcnkx
MS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1F1
ZXJ5MTEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzIxMGZjOTI5MTMwMzA3
NjI4YTRjOWQxYWVlZmQ0MDFkOTIyMDQ4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvUXVlcnkxMS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotI2luY2x1
ZGUgInByZWNvbXBpbGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0v
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gUXVlcnkxMS5jcHA6IERlZmlu
ZXMgdGhlIHJ4OjpRdWVyeTExIGNsYXNzIHdoaWNoIGltcGxlbWVudHMgcng6OlF1ZXJ5SW1wbC4K
LQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9RdWVyeTExLmgiCi0jaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyMTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5o
IgotCi1uYW1lc3BhY2UgcngKLXsKLQotUXVlcnkxMTo6UXVlcnkxMShyeDo6UmVuZGVyZXIxMSAq
cmVuZGVyZXIsIEdMZW51bSB0eXBlKSA6IFF1ZXJ5SW1wbCh0eXBlKQotewotICAgIG1SZW5kZXJl
ciA9IHJlbmRlcmVyOwotICAgIG1RdWVyeSA9IE5VTEw7Ci19Ci0KLVF1ZXJ5MTE6On5RdWVyeTEx
KCkKLXsKLSAgICBpZiAobVF1ZXJ5KQotICAgIHsKLSAgICAgICAgbVF1ZXJ5LT5SZWxlYXNlKCk7
Ci0gICAgICAgIG1RdWVyeSA9IE5VTEw7Ci0gICAgfQotfQotCi12b2lkIFF1ZXJ5MTE6OmJlZ2lu
KCkKLXsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICBEM0QxMV9RVUVS
WV9ERVNDIHF1ZXJ5RGVzYzsKLSAgICAgICAgcXVlcnlEZXNjLlF1ZXJ5ID0gRDNEMTFfUVVFUllf
T0NDTFVTSU9OOwotICAgICAgICBxdWVyeURlc2MuTWlzY0ZsYWdzID0gMDsKLQotICAgICAgICBp
ZiAoRkFJTEVEKG1SZW5kZXJlci0+Z2V0RGV2aWNlKCktPkNyZWF0ZVF1ZXJ5KCZxdWVyeURlc2Ms
ICZtUXVlcnkpKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1SZW5kZXJlci0+Z2V0RGV2
aWNlQ29udGV4dCgpLT5CZWdpbihtUXVlcnkpOwotfQotCi12b2lkIFF1ZXJ5MTE6OmVuZCgpCi17
Ci0gICAgaWYgKG1RdWVyeSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgbVJlbmRlcmVyLT5nZXREZXZp
Y2VDb250ZXh0KCktPkVuZChtUXVlcnkpOwotCi0gICAgbVN0YXR1cyA9IEdMX0ZBTFNFOwotICAg
IG1SZXN1bHQgPSBHTF9GQUxTRTsKLX0KLQotR0x1aW50IFF1ZXJ5MTE6OmdldFJlc3VsdCgpCi17
Ci0gICAgaWYgKG1RdWVyeSAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgd2hpbGUgKCF0ZXN0UXVl
cnkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgU2xlZXAoMCk7Ci0gICAgICAgICAgICAvLyBl
eHBsaWNpdGx5IGNoZWNrIGZvciBkZXZpY2UgbG9zcywgc29tZSBkcml2ZXJzIHNlZW0gdG8gcmV0
dXJuIFNfRkFMU0UKLSAgICAgICAgICAgIC8vIGlmIHRoZSBkZXZpY2UgaXMgbG9zdAotICAgICAg
ICAgICAgaWYgKG1SZW5kZXJlci0+dGVzdERldmljZUxvc3QodHJ1ZSkpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAwKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBtUmVzdWx0Owot
fQotCi1HTGJvb2xlYW4gUXVlcnkxMTo6aXNSZXN1bHRBdmFpbGFibGUoKQotewotICAgIGlmICht
UXVlcnkgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHRlc3RRdWVyeSgpOwotICAgIH0KLQotICAg
IHJldHVybiBtU3RhdHVzOwotfQotCi1HTGJvb2xlYW4gUXVlcnkxMTo6dGVzdFF1ZXJ5KCkKLXsK
LSAgICBpZiAobVF1ZXJ5ICE9IE5VTEwgJiYgbVN0YXR1cyAhPSBHTF9UUlVFKQotICAgIHsKLSAg
ICAgICAgVUlOVDY0IG51bVBpeGVscyA9IDA7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVJl
bmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCktPkdldERhdGEobVF1ZXJ5LCAmbnVtUGl4ZWxzLCBz
aXplb2YoVUlOVDY0KSwgMCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gU19PSykKLSAgICAgICAg
ewotICAgICAgICAgICAgbVN0YXR1cyA9IEdMX1RSVUU7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAo
Z2V0VHlwZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1Q
TEVTX1BBU1NFRF9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VE
X0NPTlNFUlZBVElWRV9FWFQ6Ci0gICAgICAgICAgICAgICAgbVJlc3VsdCA9IChudW1QaXhlbHMg
PiAwKSA/IEdMX1RSVUUgOiBHTF9GQUxTRTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG1SZW5kZXJlci0+dGVzdERldmlj
ZUxvc3QodHJ1ZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgR0xfVFJVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbVN0
YXR1czsKLSAgICB9Ci0KLSAgICByZXR1cm4gR0xfVFJVRTsgLy8gcHJldmVudCBibG9ja2luZyB3
aGVuIHF1ZXJ5IGlzIG51bGwKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9RdWVyeTExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1F1ZXJ5MTEuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMGEwM2RlNzdjYTMyODU1ZGJjZDE5YjEzYmM0NGQ5NzgzNzk0YTY3NS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1F1ZXJ5MTEuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDQwICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBRdWVyeTExLmg6IERlZmlu
ZXMgdGhlIHJ4OjpRdWVyeTExIGNsYXNzIHdoaWNoIGltcGxlbWVudHMgcng6OlF1ZXJ5SW1wbC4K
LQotI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfUVVFUlkxMV9IXwotI2RlZmluZSBMSUJHTEVT
VjJfUkVOREVSRVJfUVVFUlkxMV9IXwotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1F1
ZXJ5SW1wbC5oIgotCi1uYW1lc3BhY2UgcngKLXsKLWNsYXNzIFJlbmRlcmVyMTE7Ci0KLWNsYXNz
IFF1ZXJ5MTEgOiBwdWJsaWMgUXVlcnlJbXBsCi17Ci0gIHB1YmxpYzoKLSAgICBRdWVyeTExKHJ4
OjpSZW5kZXJlcjExICpyZW5kZXJlciwgR0xlbnVtIHR5cGUpOwotICAgIHZpcnR1YWwgflF1ZXJ5
MTEoKTsKLQotICAgIHZvaWQgYmVnaW4oKTsKLSAgICB2b2lkIGVuZCgpOwotICAgIEdMdWludCBn
ZXRSZXN1bHQoKTsKLSAgICBHTGJvb2xlYW4gaXNSZXN1bHRBdmFpbGFibGUoKTsKLQotICBwcml2
YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihRdWVyeTExKTsKLQotICAgIEdMYm9v
bGVhbiB0ZXN0UXVlcnkoKTsKLQotICAgIHJ4OjpSZW5kZXJlcjExICptUmVuZGVyZXI7Ci0gICAg
SUQzRDExUXVlcnkgKm1RdWVyeTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5E
RVJFUl9RVUVSWTExX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL1F1ZXJ5OS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL1F1ZXJ5OS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGVmNjk0MjY3ZGQxZTE1OWMwOTUzOGJiYmNiZWE3ZmFiMDAwOWQ1YzEuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9RdWVyeTkuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTI1ICswLDAgQEAKLSNpbmNsdWRlICJwcmVjb21waWxlZC5oIgotLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0K
LS8vIFF1ZXJ5OS5jcHA6IERlZmluZXMgdGhlIHJ4OjpRdWVyeTkgY2xhc3Mgd2hpY2ggaW1wbGVt
ZW50cyByeDo6UXVlcnlJbXBsLgotCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUXVl
cnk5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvcmVuZGVyZXI5X3V0aWxzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L1JlbmRlcmVyOS5oIgotCi1uYW1lc3BhY2UgcngKLXsKLQotUXVlcnk5OjpRdWVyeTkocng6OlJl
bmRlcmVyOSAqcmVuZGVyZXIsIEdMZW51bSB0eXBlKSA6IFF1ZXJ5SW1wbCh0eXBlKQotewotICAg
IG1SZW5kZXJlciA9IHJlbmRlcmVyOwotICAgIG1RdWVyeSA9IE5VTEw7Ci19Ci0KLVF1ZXJ5OTo6
flF1ZXJ5OSgpCi17Ci0gICAgaWYgKG1RdWVyeSkKLSAgICB7Ci0gICAgICAgIG1RdWVyeS0+UmVs
ZWFzZSgpOwotICAgICAgICBtUXVlcnkgPSBOVUxMOwotICAgIH0KLX0KLQotdm9pZCBRdWVyeTk6
OmJlZ2luKCkKLXsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICBpZiAo
RkFJTEVEKG1SZW5kZXJlci0+Z2V0RGV2aWNlKCktPkNyZWF0ZVF1ZXJ5KEQzRFFVRVJZVFlQRV9P
Q0NMVVNJT04sICZtUXVlcnkpKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEhSRVNVTFQg
cmVzdWx0ID0gbVF1ZXJ5LT5Jc3N1ZShEM0RJU1NVRV9CRUdJTik7Ci0gICAgQVNTRVJUKFNVQ0NF
RURFRChyZXN1bHQpKTsKLX0KLQotdm9pZCBRdWVyeTk6OmVuZCgpCi17Ci0gICAgaWYgKG1RdWVy
eSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgfQotCi0gICAgSFJFU1VMVCByZXN1bHQgPSBtUXVlcnktPklzc3VlKEQz
RElTU1VFX0VORCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgIG1TdGF0
dXMgPSBHTF9GQUxTRTsKLSAgICBtUmVzdWx0ID0gR0xfRkFMU0U7Ci19Ci0KLUdMdWludCBRdWVy
eTk6OmdldFJlc3VsdCgpCi17Ci0gICAgaWYgKG1RdWVyeSAhPSBOVUxMKQotICAgIHsKLSAgICAg
ICAgd2hpbGUgKCF0ZXN0UXVlcnkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgU2xlZXAoMCk7
Ci0gICAgICAgICAgICAvLyBleHBsaWNpdGx5IGNoZWNrIGZvciBkZXZpY2UgbG9zcwotICAgICAg
ICAgICAgLy8gc29tZSBkcml2ZXJzIHNlZW0gdG8gcmV0dXJuIFNfRkFMU0UgZXZlbiBpZiB0aGUg
ZGV2aWNlIGlzIGxvc3QKLSAgICAgICAgICAgIC8vIGluc3RlYWQgb2YgRDNERVJSX0RFVklDRUxP
U1QgbGlrZSB0aGV5IHNob3VsZAotICAgICAgICAgICAgaWYgKG1SZW5kZXJlci0+dGVzdERldmlj
ZUxvc3QodHJ1ZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJldHVybiBtUmVzdWx0OwotfQotCi1HTGJvb2xlYW4gUXVlcnk5Ojppc1Jlc3Vs
dEF2YWlsYWJsZSgpCi17Ci0gICAgaWYgKG1RdWVyeSAhPSBOVUxMKQotICAgIHsKLSAgICAgICAg
dGVzdFF1ZXJ5KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1TdGF0dXM7Ci19Ci0KLUdMYm9vbGVh
biBRdWVyeTk6OnRlc3RRdWVyeSgpCi17Ci0gICAgaWYgKG1RdWVyeSAhPSBOVUxMICYmIG1TdGF0
dXMgIT0gR0xfVFJVRSkKLSAgICB7Ci0gICAgICAgIERXT1JEIG51bVBpeGVscyA9IDA7Ci0KLSAg
ICAgICAgSFJFU1VMVCBocmVzID0gbVF1ZXJ5LT5HZXREYXRhKCZudW1QaXhlbHMsIHNpemVvZihE
V09SRCksIEQzREdFVERBVEFfRkxVU0gpOwotICAgICAgICBpZiAoaHJlcyA9PSBTX09LKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtU3RhdHVzID0gIEdMX1RSVUU7Ci0KLSAgICAgICAgICAgIHN3
aXRjaCAoZ2V0VHlwZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0FO
WV9TQU1QTEVTX1BBU1NFRF9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNf
UEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6Ci0gICAgICAgICAgICAgICAgbVJlc3VsdCA9IChudW1Q
aXhlbHMgPiAwKSA/IEdMX1RSVUUgOiBHTF9GQUxTRTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlQoZmFsc2UpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGQzZDk6OmlzRGV2aWNl
TG9zdEVycm9yKGhyZXMpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtUmVuZGVyZXItPm5vdGlm
eURldmljZUxvc3QoKTsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSwgR0xfVFJVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbVN0YXR1czsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gR0xfVFJVRTsgLy8gcHJldmVudCBibG9ja2luZyB3aGVuIHF1ZXJ5
IGlzIG51bGwKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9RdWVyeTkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvUXVlcnk5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDQ3ZWVmODkzMzZlZjhjMzQ0YWE1MTY3YjRmNDAyMWIxMDQxYzA3MGMuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9RdWVyeTkuaAorKysgL2Rldi9udWxsCkBAIC0xLDQw
ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBRdWVyeTkuaDogRGVmaW5lcyB0aGUgcng6OlF1
ZXJ5OSBjbGFzcyB3aGljaCBpbXBsZW1lbnRzIHJ4OjpRdWVyeUltcGwuCi0KLSNpZm5kZWYgTElC
R0xFU1YyX1JFTkRFUkVSX1FVRVJZOV9IXwotI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfUVVF
Ulk5X0hfCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUXVlcnlJbXBsLmgiCi0KLW5h
bWVzcGFjZSByeAotewotY2xhc3MgUmVuZGVyZXI5OwotCi1jbGFzcyBRdWVyeTkgOiBwdWJsaWMg
UXVlcnlJbXBsCi17Ci0gIHB1YmxpYzoKLSAgICBRdWVyeTkocng6OlJlbmRlcmVyOSAqcmVuZGVy
ZXIsIEdMZW51bSB0eXBlKTsKLSAgICB2aXJ0dWFsIH5RdWVyeTkoKTsKLQotICAgIHZvaWQgYmVn
aW4oKTsKLSAgICB2b2lkIGVuZCgpOwotICAgIEdMdWludCBnZXRSZXN1bHQoKTsKLSAgICBHTGJv
b2xlYW4gaXNSZXN1bHRBdmFpbGFibGUoKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihRdWVyeTkpOwotCi0gICAgR0xib29sZWFuIHRlc3RRdWVyeSgpOwotCi0g
ICAgcng6OlJlbmRlcmVyOSAqbVJlbmRlcmVyOwotICAgIElEaXJlY3QzRFF1ZXJ5OSAqbVF1ZXJ5
OwotfTsKLQotfQotCi0jZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1FVRVJZOV9IXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9S
ZW5kZXJTdGF0ZUNhY2hlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvUmVuZGVyU3RhdGVDYWNoZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGIzMTExYWY3MmJlMGNiMmQ3MmZmYTBlY2I3YWY0NTYzN2E1ZDY5NDkuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJTdGF0ZUNhY2hlLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDQwNiArMCwwIEBACi0jaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKLS8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KLS8vCi0KLS8vIFJlbmRlclN0YXRlQ2FjaGUuY3BwOiBEZWZpbmVzIHJ4OjpSZW5k
ZXJTdGF0ZUNhY2hlLCBhIGNhY2hlIG9mIERpcmVjdDNEIHJlbmRlcgotLy8gc3RhdGUgb2JqZWN0
cy4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJTdGF0ZUNhY2hlLmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL3JlbmRlcmVyMTFfdXRpbHMuaCIKLQotI2luY2x1
ZGUgImNvbW1vbi9kZWJ1Zy5oIgotI2luY2x1ZGUgInRoaXJkX3BhcnR5L211cm11cmhhc2gvTXVy
bXVySGFzaDMuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLS8vIE1TRE4ncyBkb2N1bWVudGF0aW9u
IG9mIElEM0QxMURldmljZTo6Q3JlYXRlQmxlbmRTdGF0ZSwgSUQzRDExRGV2aWNlOjpDcmVhdGVS
YXN0ZXJpemVyU3RhdGUsCi0vLyBJRDNEMTFEZXZpY2U6OkNyZWF0ZURlcHRoU3RlbmNpbFN0YXRl
IGFuZCBJRDNEMTFEZXZpY2U6OkNyZWF0ZVNhbXBsZXJTdGF0ZSBjbGFpbXMgdGhlIG1heGltdW0K
LS8vIG51bWJlciBvZiB1bmlxdWUgc3RhdGVzIG9mIGVhY2ggdHlwZSBhbiBhcHBsaWNhdGlvbiBj
YW4gY3JlYXRlIGlzIDQwOTYKLWNvbnN0IHVuc2lnbmVkIGludCBSZW5kZXJTdGF0ZUNhY2hlOjpr
TWF4QmxlbmRTdGF0ZXMgPSA0MDk2OwotY29uc3QgdW5zaWduZWQgaW50IFJlbmRlclN0YXRlQ2Fj
aGU6OmtNYXhSYXN0ZXJpemVyU3RhdGVzID0gNDA5NjsKLWNvbnN0IHVuc2lnbmVkIGludCBSZW5k
ZXJTdGF0ZUNhY2hlOjprTWF4RGVwdGhTdGVuY2lsU3RhdGVzID0gNDA5NjsKLWNvbnN0IHVuc2ln
bmVkIGludCBSZW5kZXJTdGF0ZUNhY2hlOjprTWF4U2FtcGxlclN0YXRlcyA9IDQwOTY7Ci0KLVJl
bmRlclN0YXRlQ2FjaGU6OlJlbmRlclN0YXRlQ2FjaGUoKSA6IG1EZXZpY2UoTlVMTCksIG1Db3Vu
dGVyKDApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUJsZW5kU3Rh
dGVDYWNoZShrTWF4QmxlbmRTdGF0ZXMsIGhhc2hCbGVuZFN0YXRlLCBjb21wYXJlQmxlbmRTdGF0
ZXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJhc3Rlcml6ZXJT
dGF0ZUNhY2hlKGtNYXhSYXN0ZXJpemVyU3RhdGVzLCBoYXNoUmFzdGVyaXplclN0YXRlLCBjb21w
YXJlUmFzdGVyaXplclN0YXRlcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZShrTWF4RGVwdGhTdGVuY2lsU3RhdGVzLCBoYXNo
RGVwdGhTdGVuY2lsU3RhdGUsIGNvbXBhcmVEZXB0aFN0ZW5jaWxTdGF0ZXMpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJTdGF0ZUNhY2hlKGtNYXhTYW1w
bGVyU3RhdGVzLCBoYXNoU2FtcGxlclN0YXRlLCBjb21wYXJlU2FtcGxlclN0YXRlcykKLXsKLX0K
LQotUmVuZGVyU3RhdGVDYWNoZTo6flJlbmRlclN0YXRlQ2FjaGUoKQotewotICAgIGNsZWFyKCk7
Ci19Ci0KLXZvaWQgUmVuZGVyU3RhdGVDYWNoZTo6aW5pdGlhbGl6ZShJRDNEMTFEZXZpY2UgKmRl
dmljZSkKLXsKLSAgICBjbGVhcigpOwotICAgIG1EZXZpY2UgPSBkZXZpY2U7Ci19Ci0KLXZvaWQg
UmVuZGVyU3RhdGVDYWNoZTo6Y2xlYXIoKQotewotICAgIGZvciAoQmxlbmRTdGF0ZU1hcDo6aXRl
cmF0b3IgaSA9IG1CbGVuZFN0YXRlQ2FjaGUuYmVnaW4oKTsgaSAhPSBtQmxlbmRTdGF0ZUNhY2hl
LmVuZCgpOyBpKyspCi0gICAgewotICAgICAgICBpLT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsK
LSAgICB9Ci0gICAgbUJsZW5kU3RhdGVDYWNoZS5jbGVhcigpOwotCi0gICAgZm9yIChSYXN0ZXJp
emVyU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtUmFzdGVyaXplclN0YXRlQ2FjaGUuYmVnaW4oKTsg
aSAhPSBtUmFzdGVyaXplclN0YXRlQ2FjaGUuZW5kKCk7IGkrKykKLSAgICB7Ci0gICAgICAgIGkt
PnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOwotICAgIH0KLSAgICBtUmFzdGVyaXplclN0YXRlQ2Fj
aGUuY2xlYXIoKTsKLQotICAgIGZvciAoRGVwdGhTdGVuY2lsU3RhdGVNYXA6Oml0ZXJhdG9yIGkg
PSBtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5iZWdpbigpOyBpICE9IG1EZXB0aFN0ZW5jaWxTdGF0
ZUNhY2hlLmVuZCgpOyBpKyspCi0gICAgewotICAgICAgICBpLT5zZWNvbmQuZmlyc3QtPlJlbGVh
c2UoKTsKLSAgICB9Ci0gICAgbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuY2xlYXIoKTsKLQotICAg
IGZvciAoU2FtcGxlclN0YXRlTWFwOjppdGVyYXRvciBpID0gbVNhbXBsZXJTdGF0ZUNhY2hlLmJl
Z2luKCk7IGkgIT0gbVNhbXBsZXJTdGF0ZUNhY2hlLmVuZCgpOyBpKyspCi0gICAgewotICAgICAg
ICBpLT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKLSAgICB9Ci0gICAgbVNhbXBsZXJTdGF0ZUNh
Y2hlLmNsZWFyKCk7Ci19Ci0KLXN0ZDo6c2l6ZV90IFJlbmRlclN0YXRlQ2FjaGU6Omhhc2hCbGVu
ZFN0YXRlKGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRlKQotewotICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBpbnQgc2VlZCA9IDB4QUJDREVGOTg7Ci0KLSAgICBzdGQ6OnNpemVfdCBo
YXNoID0gMDsKLSAgICBNdXJtdXJIYXNoM194ODZfMzIoJmJsZW5kU3RhdGUsIHNpemVvZihnbDo6
QmxlbmRTdGF0ZSksIHNlZWQsICZoYXNoKTsKLSAgICByZXR1cm4gaGFzaDsKLX0KLQotYm9vbCBS
ZW5kZXJTdGF0ZUNhY2hlOjpjb21wYXJlQmxlbmRTdGF0ZXMoY29uc3QgZ2w6OkJsZW5kU3RhdGUg
JmEsIGNvbnN0IGdsOjpCbGVuZFN0YXRlICZiKQotewotICAgIHJldHVybiBtZW1jbXAoJmEsICZi
LCBzaXplb2YoZ2w6OkJsZW5kU3RhdGUpKSA9PSAwOwotfQotCi1JRDNEMTFCbGVuZFN0YXRlICpS
ZW5kZXJTdGF0ZUNhY2hlOjpnZXRCbGVuZFN0YXRlKGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVu
ZFN0YXRlKQotewotICAgIGlmICghbURldmljZSkKLSAgICB7Ci0gICAgICAgIEVSUigiUmVuZGVy
U3RhdGVDYWNoZSBpcyBub3QgaW5pdGlhbGl6ZWQuIik7Ci0gICAgICAgIHJldHVybiBOVUxMOwot
ICAgIH0KLQotICAgIEJsZW5kU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtQmxlbmRTdGF0ZUNhY2hl
LmZpbmQoYmxlbmRTdGF0ZSk7Ci0gICAgaWYgKGkgIT0gbUJsZW5kU3RhdGVDYWNoZS5lbmQoKSkK
LSAgICB7Ci0gICAgICAgIEJsZW5kU3RhdGVDb3VudGVyUGFpciAmc3RhdGUgPSBpLT5zZWNvbmQ7
Ci0gICAgICAgIHN0YXRlLnNlY29uZCA9IG1Db3VudGVyKys7Ci0gICAgICAgIHJldHVybiBzdGF0
ZS5maXJzdDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKG1CbGVuZFN0YXRl
Q2FjaGUuc2l6ZSgpID49IGtNYXhCbGVuZFN0YXRlcykKLSAgICAgICAgewotICAgICAgICAgICAg
VFJBQ0UoIk92ZXJmbG93ZWQgdGhlIGxpbWl0IG9mICV1IGJsZW5kIHN0YXRlcywgcmVtb3Zpbmcg
dGhlIGxlYXN0IHJlY2VudGx5IHVzZWQgIgotICAgICAgICAgICAgICAgICAgInRvIG1ha2Ugcm9v
bS4iLCBrTWF4QmxlbmRTdGF0ZXMpOwotCi0gICAgICAgICAgICBCbGVuZFN0YXRlTWFwOjppdGVy
YXRvciBsZWFzdFJlY2VudGx5VXNlZCA9IG1CbGVuZFN0YXRlQ2FjaGUuYmVnaW4oKTsKLSAgICAg
ICAgICAgIGZvciAoQmxlbmRTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1CbGVuZFN0YXRlQ2FjaGUu
YmVnaW4oKTsgaSAhPSBtQmxlbmRTdGF0ZUNhY2hlLmVuZCgpOyBpKyspCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgaWYgKGktPnNlY29uZC5zZWNvbmQgPCBsZWFzdFJlY2VudGx5VXNl
ZC0+c2Vjb25kLnNlY29uZCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IGxlYXN0UmVjZW50bHlVc2VkID0gaTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmZpcnN0LT5SZWxlYXNlKCk7
Ci0gICAgICAgICAgICBtQmxlbmRTdGF0ZUNhY2hlLmVyYXNlKGxlYXN0UmVjZW50bHlVc2VkKTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBibGVuZCBzdGF0ZSBhbmQgaW5z
ZXJ0IGl0IGludG8gdGhlIGNhY2hlCi0gICAgICAgIEQzRDExX0JMRU5EX0RFU0MgYmxlbmREZXNj
ID0geyAwIH07Ci0gICAgICAgIGJsZW5kRGVzYy5BbHBoYVRvQ292ZXJhZ2VFbmFibGUgPSBibGVu
ZFN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZTsKLSAgICAgICAgYmxlbmREZXNjLkluZGVwZW5k
ZW50QmxlbmRFbmFibGUgPSBGQUxTRTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IEQzRDExX1NJTVVMVEFORU9VU19SRU5ERVJfVEFSR0VUX0NPVU5UOyBpKyspCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfQkxFTkRfREVTQyAmcnRCbGVu
ZCA9IGJsZW5kRGVzYy5SZW5kZXJUYXJnZXRbaV07Ci0KLSAgICAgICAgICAgIHJ0QmxlbmQuQmxl
bmRFbmFibGUgPSBibGVuZFN0YXRlLmJsZW5kOwotICAgICAgICAgICAgaWYgKGJsZW5kU3RhdGUu
YmxlbmQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcnRCbGVuZC5TcmNCbGVuZCA9
IGdsX2QzZDExOjpDb252ZXJ0QmxlbmRGdW5jKGJsZW5kU3RhdGUuc291cmNlQmxlbmRSR0IsIGZh
bHNlKTsKLSAgICAgICAgICAgICAgICBydEJsZW5kLkRlc3RCbGVuZCA9IGdsX2QzZDExOjpDb252
ZXJ0QmxlbmRGdW5jKGJsZW5kU3RhdGUuZGVzdEJsZW5kUkdCLCBmYWxzZSk7Ci0gICAgICAgICAg
ICAgICAgcnRCbGVuZC5CbGVuZE9wID0gZ2xfZDNkMTE6OkNvbnZlcnRCbGVuZE9wKGJsZW5kU3Rh
dGUuYmxlbmRFcXVhdGlvblJHQik7Ci0KLSAgICAgICAgICAgICAgICBydEJsZW5kLlNyY0JsZW5k
QWxwaGEgPSBnbF9kM2QxMTo6Q29udmVydEJsZW5kRnVuYyhibGVuZFN0YXRlLnNvdXJjZUJsZW5k
QWxwaGEsIHRydWUpOwotICAgICAgICAgICAgICAgIHJ0QmxlbmQuRGVzdEJsZW5kQWxwaGEgPSBn
bF9kM2QxMTo6Q29udmVydEJsZW5kRnVuYyhibGVuZFN0YXRlLmRlc3RCbGVuZEFscGhhLCB0cnVl
KTsKLSAgICAgICAgICAgICAgICBydEJsZW5kLkJsZW5kT3BBbHBoYSA9IGdsX2QzZDExOjpDb252
ZXJ0QmxlbmRPcChibGVuZFN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIHJ0QmxlbmQuUmVuZGVyVGFyZ2V0V3JpdGVNYXNrID0gZ2xfZDNkMTE6
OkNvbnZlcnRDb2xvck1hc2soYmxlbmRTdGF0ZS5jb2xvck1hc2tSZWQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJsZW5kU3RhdGUuY29sb3JNYXNrR3JlZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kU3RhdGUuY29s
b3JNYXNrQmx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRTdGF0ZS5jb2xvck1hc2tBbHBoYSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBJRDNEMTFCbGVuZFN0YXRlICpkeDExQmxlbmRTdGF0ZSA9IE5V
TEw7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlQmxlbmRTdGF0ZSgm
YmxlbmREZXNjLCAmZHgxMUJsZW5kU3RhdGUpOwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkg
fHwgIWR4MTFCbGVuZFN0YXRlKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIlVuYWJsZSB0
byBjcmVhdGUgYSBJRDNEMTFCbGVuZFN0YXRlLCBIUkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7Ci0g
ICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIG1CbGVuZFN0YXRl
Q2FjaGUuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGJsZW5kU3RhdGUsIHN0ZDo6bWFrZV9wYWlyKGR4
MTFCbGVuZFN0YXRlLCBtQ291bnRlcisrKSkpOwotCi0gICAgICAgIHJldHVybiBkeDExQmxlbmRT
dGF0ZTsKLSAgICB9Ci19Ci0KLXN0ZDo6c2l6ZV90IFJlbmRlclN0YXRlQ2FjaGU6Omhhc2hSYXN0
ZXJpemVyU3RhdGUoY29uc3QgUmFzdGVyaXplclN0YXRlS2V5ICZyYXN0ZXJTdGF0ZSkKLXsKLSAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNlZWQgPSAweEFCQ0RFRjk4OwotCi0gICAgc3Rk
OjpzaXplX3QgaGFzaCA9IDA7Ci0gICAgTXVybXVySGFzaDNfeDg2XzMyKCZyYXN0ZXJTdGF0ZSwg
c2l6ZW9mKFJhc3Rlcml6ZXJTdGF0ZUtleSksIHNlZWQsICZoYXNoKTsKLSAgICByZXR1cm4gaGFz
aDsKLX0KLQotYm9vbCBSZW5kZXJTdGF0ZUNhY2hlOjpjb21wYXJlUmFzdGVyaXplclN0YXRlcyhj
b25zdCBSYXN0ZXJpemVyU3RhdGVLZXkgJmEsIGNvbnN0IFJhc3Rlcml6ZXJTdGF0ZUtleSAmYikK
LXsKLSAgICByZXR1cm4gbWVtY21wKCZhLCAmYiwgc2l6ZW9mKFJhc3Rlcml6ZXJTdGF0ZUtleSkp
ID09IDA7Ci19Ci0KLUlEM0QxMVJhc3Rlcml6ZXJTdGF0ZSAqUmVuZGVyU3RhdGVDYWNoZTo6Z2V0
UmFzdGVyaXplclN0YXRlKGNvbnN0IGdsOjpSYXN0ZXJpemVyU3RhdGUgJnJhc3RlclN0YXRlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBzY2lzc29yRW5hYmxlZCwgdW5zaWduZWQgaW50IGRlcHRoU2l6ZSkKLXsKLSAgICBp
ZiAoIW1EZXZpY2UpCi0gICAgewotICAgICAgICBFUlIoIlJlbmRlclN0YXRlQ2FjaGUgaXMgbm90
IGluaXRpYWxpemVkLiIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBSYXN0
ZXJpemVyU3RhdGVLZXkga2V5OwotICAgIGtleS5yYXN0ZXJpemVyU3RhdGUgPSByYXN0ZXJTdGF0
ZTsKLSAgICBrZXkuc2Npc3NvckVuYWJsZWQgPSBzY2lzc29yRW5hYmxlZDsKLSAgICBrZXkuZGVw
dGhTaXplID0gZGVwdGhTaXplOwotCi0gICAgUmFzdGVyaXplclN0YXRlTWFwOjppdGVyYXRvciBp
ID0gbVJhc3Rlcml6ZXJTdGF0ZUNhY2hlLmZpbmQoa2V5KTsKLSAgICBpZiAoaSAhPSBtUmFzdGVy
aXplclN0YXRlQ2FjaGUuZW5kKCkpCi0gICAgewotICAgICAgICBSYXN0ZXJpemVyU3RhdGVDb3Vu
dGVyUGFpciAmc3RhdGUgPSBpLT5zZWNvbmQ7Ci0gICAgICAgIHN0YXRlLnNlY29uZCA9IG1Db3Vu
dGVyKys7Ci0gICAgICAgIHJldHVybiBzdGF0ZS5maXJzdDsKLSAgICB9Ci0gICAgZWxzZQotICAg
IHsKLSAgICAgICAgaWYgKG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5zaXplKCkgPj0ga01heFJhc3Rl
cml6ZXJTdGF0ZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFRSQUNFKCJPdmVyZmxvd2VkIHRo
ZSBsaW1pdCBvZiAldSByYXN0ZXJpemVyIHN0YXRlcywgcmVtb3ZpbmcgdGhlIGxlYXN0IHJlY2Vu
dGx5IHVzZWQgIgotICAgICAgICAgICAgICAgICAgInRvIG1ha2Ugcm9vbS4iLCBrTWF4UmFzdGVy
aXplclN0YXRlcyk7Ci0KLSAgICAgICAgICAgIFJhc3Rlcml6ZXJTdGF0ZU1hcDo6aXRlcmF0b3Ig
bGVhc3RSZWNlbnRseVVzZWQgPSBtUmFzdGVyaXplclN0YXRlQ2FjaGUuYmVnaW4oKTsKLSAgICAg
ICAgICAgIGZvciAoUmFzdGVyaXplclN0YXRlTWFwOjppdGVyYXRvciBpID0gbVJhc3Rlcml6ZXJT
dGF0ZUNhY2hlLmJlZ2luKCk7IGkgIT0gbVJhc3Rlcml6ZXJTdGF0ZUNhY2hlLmVuZCgpOyBpKysp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGktPnNlY29uZC5zZWNvbmQgPCBs
ZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLnNlY29uZCkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkID0gaTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmZp
cnN0LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBtUmFzdGVyaXplclN0YXRlQ2FjaGUuZXJhc2Uo
bGVhc3RSZWNlbnRseVVzZWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgRDNEMTFfQ1VMTF9NT0RF
IGN1bGxNb2RlID0gZ2xfZDNkMTE6OkNvbnZlcnRDdWxsTW9kZShyYXN0ZXJTdGF0ZS5jdWxsRmFj
ZSwgcmFzdGVyU3RhdGUuY3VsbE1vZGUpOwotCi0gICAgICAgIC8vIERpc2FibGUgY3VsbGluZyBp
ZiBkcmF3aW5nIHBvaW50cwotICAgICAgICBpZiAocmFzdGVyU3RhdGUucG9pbnREcmF3TW9kZSkK
LSAgICAgICAgewotICAgICAgICAgICAgY3VsbE1vZGUgPSBEM0QxMV9DVUxMX05PTkU7Ci0gICAg
ICAgIH0KLQotICAgICAgICBEM0QxMV9SQVNURVJJWkVSX0RFU0MgcmFzdGVyRGVzYzsKLSAgICAg
ICAgcmFzdGVyRGVzYy5GaWxsTW9kZSA9IEQzRDExX0ZJTExfU09MSUQ7Ci0gICAgICAgIHJhc3Rl
ckRlc2MuQ3VsbE1vZGUgPSBjdWxsTW9kZTsKLSAgICAgICAgcmFzdGVyRGVzYy5Gcm9udENvdW50
ZXJDbG9ja3dpc2UgPSAocmFzdGVyU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVykgPyBGQUxTRTog
VFJVRTsKLSAgICAgICAgcmFzdGVyRGVzYy5EZXB0aEJpYXMgPSBsZGV4cChyYXN0ZXJTdGF0ZS5w
b2x5Z29uT2Zmc2V0VW5pdHMsIC1zdGF0aWNfY2FzdDxpbnQ+KGRlcHRoU2l6ZSkpOwotICAgICAg
ICByYXN0ZXJEZXNjLkRlcHRoQmlhc0NsYW1wID0gMC4wZjsgLy8gTVNETiBkb2N1bWVudGF0aW9u
IG9mIERlcHRoQmlhc0NsYW1wIGltcGxpZXMgYSB2YWx1ZSBvZiB6ZXJvIHdpbGwgcHJlZm9ybSBu
byBjbGFtcGluZywgbXVzdCBiZSB0ZXN0ZWQgdGhvdWdoLgotICAgICAgICByYXN0ZXJEZXNjLlNs
b3BlU2NhbGVkRGVwdGhCaWFzID0gcmFzdGVyU3RhdGUucG9seWdvbk9mZnNldEZhY3RvcjsKLSAg
ICAgICAgcmFzdGVyRGVzYy5EZXB0aENsaXBFbmFibGUgPSBUUlVFOwotICAgICAgICByYXN0ZXJE
ZXNjLlNjaXNzb3JFbmFibGUgPSBzY2lzc29yRW5hYmxlZCA/IFRSVUUgOiBGQUxTRTsKLSAgICAg
ICAgcmFzdGVyRGVzYy5NdWx0aXNhbXBsZUVuYWJsZSA9IHJhc3RlclN0YXRlLm11bHRpU2FtcGxl
OwotICAgICAgICByYXN0ZXJEZXNjLkFudGlhbGlhc2VkTGluZUVuYWJsZSA9IEZBTFNFOwotCi0g
ICAgICAgIElEM0QxMVJhc3Rlcml6ZXJTdGF0ZSAqZHgxMVJhc3Rlcml6ZXJTdGF0ZSA9IE5VTEw7
Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUmFzdGVyaXplclN0YXRl
KCZyYXN0ZXJEZXNjLCAmZHgxMVJhc3Rlcml6ZXJTdGF0ZSk7Ci0gICAgICAgIGlmIChGQUlMRUQo
cmVzdWx0KSB8fCAhZHgxMVJhc3Rlcml6ZXJTdGF0ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
RVJSKCJVbmFibGUgdG8gY3JlYXRlIGEgSUQzRDExUmFzdGVyaXplclN0YXRlLCBIUkVTVUxUOiAw
eCVYLiIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotCi0g
ICAgICAgIG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5pbnNlcnQoc3RkOjptYWtlX3BhaXIoa2V5LCBz
dGQ6Om1ha2VfcGFpcihkeDExUmFzdGVyaXplclN0YXRlLCBtQ291bnRlcisrKSkpOwotCi0gICAg
ICAgIHJldHVybiBkeDExUmFzdGVyaXplclN0YXRlOwotICAgIH0KLX0KLQotc3RkOjpzaXplX3Qg
UmVuZGVyU3RhdGVDYWNoZTo6aGFzaERlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpEZXB0aFN0
ZW5jaWxTdGF0ZSAmZHNTdGF0ZSkKLXsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNl
ZWQgPSAweEFCQ0RFRjk4OwotCi0gICAgc3RkOjpzaXplX3QgaGFzaCA9IDA7Ci0gICAgTXVybXVy
SGFzaDNfeDg2XzMyKCZkc1N0YXRlLCBzaXplb2YoZ2w6OkRlcHRoU3RlbmNpbFN0YXRlKSwgc2Vl
ZCwgJmhhc2gpOwotICAgIHJldHVybiBoYXNoOwotfQotCi1ib29sIFJlbmRlclN0YXRlQ2FjaGU6
OmNvbXBhcmVEZXB0aFN0ZW5jaWxTdGF0ZXMoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZh
LCBjb25zdCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmIpCi17Ci0gICAgcmV0dXJuIG1lbWNtcCgm
YSwgJmIsIHNpemVvZihnbDo6RGVwdGhTdGVuY2lsU3RhdGUpKSA9PSAwOwotfQotCi1JRDNEMTFE
ZXB0aFN0ZW5jaWxTdGF0ZSAqUmVuZGVyU3RhdGVDYWNoZTo6Z2V0RGVwdGhTdGVuY2lsU3RhdGUo
Y29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZkc1N0YXRlKQotewotICAgIGlmICghbURldmlj
ZSkKLSAgICB7Ci0gICAgICAgIEVSUigiUmVuZGVyU3RhdGVDYWNoZSBpcyBub3QgaW5pdGlhbGl6
ZWQuIik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIERlcHRoU3RlbmNpbFN0
YXRlTWFwOjppdGVyYXRvciBpID0gbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuZmluZChkc1N0YXRl
KTsKLSAgICBpZiAoaSAhPSBtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5lbmQoKSkKLSAgICB7Ci0g
ICAgICAgIERlcHRoU3RlbmNpbFN0YXRlQ291bnRlclBhaXIgJnN0YXRlID0gaS0+c2Vjb25kOwot
ICAgICAgICBzdGF0ZS5zZWNvbmQgPSBtQ291bnRlcisrOwotICAgICAgICByZXR1cm4gc3RhdGUu
Zmlyc3Q7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmIChtRGVwdGhTdGVuY2ls
U3RhdGVDYWNoZS5zaXplKCkgPj0ga01heERlcHRoU3RlbmNpbFN0YXRlcykKLSAgICAgICAgewot
ICAgICAgICAgICAgVFJBQ0UoIk92ZXJmbG93ZWQgdGhlIGxpbWl0IG9mICV1IGRlcHRoIHN0ZW5j
aWwgc3RhdGVzLCByZW1vdmluZyB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCAiCi0gICAgICAgICAg
ICAgICAgICAidG8gbWFrZSByb29tLiIsIGtNYXhEZXB0aFN0ZW5jaWxTdGF0ZXMpOwotCi0gICAg
ICAgICAgICBEZXB0aFN0ZW5jaWxTdGF0ZU1hcDo6aXRlcmF0b3IgbGVhc3RSZWNlbnRseVVzZWQg
PSBtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5iZWdpbigpOwotICAgICAgICAgICAgZm9yIChEZXB0
aFN0ZW5jaWxTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmJl
Z2luKCk7IGkgIT0gbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuZW5kKCk7IGkrKykKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoaS0+c2Vjb25kLnNlY29uZCA8IGxlYXN0UmVjZW50
bHlVc2VkLT5zZWNvbmQuc2Vjb25kKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgbGVhc3RSZWNlbnRseVVzZWQgPSBpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuZmlyc3QtPlJlbGVh
c2UoKTsKLSAgICAgICAgICAgIG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmVyYXNlKGxlYXN0UmVj
ZW50bHlVc2VkKTsKLSAgICAgICAgfQotCi0gICAgICAgIEQzRDExX0RFUFRIX1NURU5DSUxfREVT
QyBkc0Rlc2MgPSB7IDAgfTsKLSAgICAgICAgZHNEZXNjLkRlcHRoRW5hYmxlID0gZHNTdGF0ZS5k
ZXB0aFRlc3QgPyBUUlVFIDogRkFMU0U7Ci0gICAgICAgIGRzRGVzYy5EZXB0aFdyaXRlTWFzayA9
IGdsX2QzZDExOjpDb252ZXJ0RGVwdGhNYXNrKGRzU3RhdGUuZGVwdGhNYXNrKTsKLSAgICAgICAg
ZHNEZXNjLkRlcHRoRnVuYyA9IGdsX2QzZDExOjpDb252ZXJ0Q29tcGFyaXNvbihkc1N0YXRlLmRl
cHRoRnVuYyk7Ci0gICAgICAgIGRzRGVzYy5TdGVuY2lsRW5hYmxlID0gZHNTdGF0ZS5zdGVuY2ls
VGVzdCA/IFRSVUUgOiBGQUxTRTsKLSAgICAgICAgZHNEZXNjLlN0ZW5jaWxSZWFkTWFzayA9IGds
X2QzZDExOjpDb252ZXJ0U3RlbmNpbE1hc2soZHNTdGF0ZS5zdGVuY2lsTWFzayk7Ci0gICAgICAg
IGRzRGVzYy5TdGVuY2lsV3JpdGVNYXNrID0gZ2xfZDNkMTE6OkNvbnZlcnRTdGVuY2lsTWFzayhk
c1N0YXRlLnN0ZW5jaWxXcml0ZW1hc2spOwotICAgICAgICBkc0Rlc2MuRnJvbnRGYWNlLlN0ZW5j
aWxGYWlsT3AgPSBnbF9kM2QxMTo6Q29udmVydFN0ZW5jaWxPcChkc1N0YXRlLnN0ZW5jaWxGYWls
KTsKLSAgICAgICAgZHNEZXNjLkZyb250RmFjZS5TdGVuY2lsRGVwdGhGYWlsT3AgPSBnbF9kM2Qx
MTo6Q29udmVydFN0ZW5jaWxPcChkc1N0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsKTsKLSAgICAg
ICAgZHNEZXNjLkZyb250RmFjZS5TdGVuY2lsUGFzc09wID0gZ2xfZDNkMTE6OkNvbnZlcnRTdGVu
Y2lsT3AoZHNTdGF0ZS5zdGVuY2lsUGFzc0RlcHRoUGFzcyk7Ci0gICAgICAgIGRzRGVzYy5Gcm9u
dEZhY2UuU3RlbmNpbEZ1bmMgPSBnbF9kM2QxMTo6Q29udmVydENvbXBhcmlzb24oZHNTdGF0ZS5z
dGVuY2lsRnVuYyk7Ci0gICAgICAgIGRzRGVzYy5CYWNrRmFjZS5TdGVuY2lsRmFpbE9wID0gZ2xf
ZDNkMTE6OkNvbnZlcnRTdGVuY2lsT3AoZHNTdGF0ZS5zdGVuY2lsQmFja0ZhaWwpOwotICAgICAg
ICBkc0Rlc2MuQmFja0ZhY2UuU3RlbmNpbERlcHRoRmFpbE9wID0gZ2xfZDNkMTE6OkNvbnZlcnRT
dGVuY2lsT3AoZHNTdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwpOwotICAgICAgICBkc0Rl
c2MuQmFja0ZhY2UuU3RlbmNpbFBhc3NPcCA9IGdsX2QzZDExOjpDb252ZXJ0U3RlbmNpbE9wKGRz
U3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzKTsKLSAgICAgICAgZHNEZXNjLkJhY2tGYWNl
LlN0ZW5jaWxGdW5jID0gZ2xfZDNkMTE6OkNvbnZlcnRDb21wYXJpc29uKGRzU3RhdGUuc3RlbmNp
bEJhY2tGdW5jKTsKLQotICAgICAgICBJRDNEMTFEZXB0aFN0ZW5jaWxTdGF0ZSAqZHgxMURlcHRo
U3RlbmNpbFN0YXRlID0gTlVMTDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5D
cmVhdGVEZXB0aFN0ZW5jaWxTdGF0ZSgmZHNEZXNjLCAmZHgxMURlcHRoU3RlbmNpbFN0YXRlKTsK
LSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpIHx8ICFkeDExRGVwdGhTdGVuY2lsU3RhdGUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiVW5hYmxlIHRvIGNyZWF0ZSBhIElEM0QxMURlcHRo
U3RlbmNpbFN0YXRlLCBIUkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1
cm4gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmlu
c2VydChzdGQ6Om1ha2VfcGFpcihkc1N0YXRlLCBzdGQ6Om1ha2VfcGFpcihkeDExRGVwdGhTdGVu
Y2lsU3RhdGUsIG1Db3VudGVyKyspKSk7Ci0KLSAgICAgICAgcmV0dXJuIGR4MTFEZXB0aFN0ZW5j
aWxTdGF0ZTsKLSAgICB9Ci19Ci0KLXN0ZDo6c2l6ZV90IFJlbmRlclN0YXRlQ2FjaGU6Omhhc2hT
YW1wbGVyU3RhdGUoY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKQotewotICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2VlZCA9IDB4QUJDREVGOTg7Ci0KLSAgICBzdGQ6
OnNpemVfdCBoYXNoID0gMDsKLSAgICBNdXJtdXJIYXNoM194ODZfMzIoJnNhbXBsZXJTdGF0ZSwg
c2l6ZW9mKGdsOjpTYW1wbGVyU3RhdGUpLCBzZWVkLCAmaGFzaCk7Ci0gICAgcmV0dXJuIGhhc2g7
Ci19Ci0KLWJvb2wgUmVuZGVyU3RhdGVDYWNoZTo6Y29tcGFyZVNhbXBsZXJTdGF0ZXMoY29uc3Qg
Z2w6OlNhbXBsZXJTdGF0ZSAmYSwgY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmYikKLXsKLSAgICBy
ZXR1cm4gbWVtY21wKCZhLCAmYiwgc2l6ZW9mKGdsOjpTYW1wbGVyU3RhdGUpKSA9PSAwOwotfQot
Ci1JRDNEMTFTYW1wbGVyU3RhdGUgKlJlbmRlclN0YXRlQ2FjaGU6OmdldFNhbXBsZXJTdGF0ZShj
b25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpCi17Ci0gICAgaWYgKCFtRGV2aWNl
KQotICAgIHsKLSAgICAgICAgRVJSKCJSZW5kZXJTdGF0ZUNhY2hlIGlzIG5vdCBpbml0aWFsaXpl
ZC4iKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgU2FtcGxlclN0YXRlTWFw
OjppdGVyYXRvciBpID0gbVNhbXBsZXJTdGF0ZUNhY2hlLmZpbmQoc2FtcGxlclN0YXRlKTsKLSAg
ICBpZiAoaSAhPSBtU2FtcGxlclN0YXRlQ2FjaGUuZW5kKCkpCi0gICAgewotICAgICAgICBTYW1w
bGVyU3RhdGVDb3VudGVyUGFpciAmc3RhdGUgPSBpLT5zZWNvbmQ7Ci0gICAgICAgIHN0YXRlLnNl
Y29uZCA9IG1Db3VudGVyKys7Ci0gICAgICAgIHJldHVybiBzdGF0ZS5maXJzdDsKLSAgICB9Ci0g
ICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKG1TYW1wbGVyU3RhdGVDYWNoZS5zaXplKCkgPj0g
a01heFNhbXBsZXJTdGF0ZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFRSQUNFKCJPdmVyZmxv
d2VkIHRoZSBsaW1pdCBvZiAldSBzYW1wbGVyIHN0YXRlcywgcmVtb3ZpbmcgdGhlIGxlYXN0IHJl
Y2VudGx5IHVzZWQgIgotICAgICAgICAgICAgICAgICAgInRvIG1ha2Ugcm9vbS4iLCBrTWF4U2Ft
cGxlclN0YXRlcyk7Ci0KLSAgICAgICAgICAgIFNhbXBsZXJTdGF0ZU1hcDo6aXRlcmF0b3IgbGVh
c3RSZWNlbnRseVVzZWQgPSBtU2FtcGxlclN0YXRlQ2FjaGUuYmVnaW4oKTsKLSAgICAgICAgICAg
IGZvciAoU2FtcGxlclN0YXRlTWFwOjppdGVyYXRvciBpID0gbVNhbXBsZXJTdGF0ZUNhY2hlLmJl
Z2luKCk7IGkgIT0gbVNhbXBsZXJTdGF0ZUNhY2hlLmVuZCgpOyBpKyspCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgaWYgKGktPnNlY29uZC5zZWNvbmQgPCBsZWFzdFJlY2VudGx5VXNl
ZC0+c2Vjb25kLnNlY29uZCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IGxlYXN0UmVjZW50bHlVc2VkID0gaTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmZpcnN0LT5SZWxlYXNlKCk7
Ci0gICAgICAgICAgICBtU2FtcGxlclN0YXRlQ2FjaGUuZXJhc2UobGVhc3RSZWNlbnRseVVzZWQp
OwotICAgICAgICB9Ci0KLSAgICAgICAgRDNEMTFfU0FNUExFUl9ERVNDIHNhbXBsZXJEZXNjOwot
ICAgICAgICBzYW1wbGVyRGVzYy5GaWx0ZXIgPSBnbF9kM2QxMTo6Q29udmVydEZpbHRlcihzYW1w
bGVyU3RhdGUubWluRmlsdGVyLCBzYW1wbGVyU3RhdGUubWFnRmlsdGVyLCBzYW1wbGVyU3RhdGUu
bWF4QW5pc290cm9weSk7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkFkZHJlc3NVID0gZ2xfZDNkMTE6
OkNvbnZlcnRUZXh0dXJlV3JhcChzYW1wbGVyU3RhdGUud3JhcFMpOwotICAgICAgICBzYW1wbGVy
RGVzYy5BZGRyZXNzViA9IGdsX2QzZDExOjpDb252ZXJ0VGV4dHVyZVdyYXAoc2FtcGxlclN0YXRl
LndyYXBUKTsKLSAgICAgICAgc2FtcGxlckRlc2MuQWRkcmVzc1cgPSBEM0QxMV9URVhUVVJFX0FE
RFJFU1NfQ0xBTVA7Ci0gICAgICAgIHNhbXBsZXJEZXNjLk1pcExPREJpYXMgPSBzdGF0aWNfY2Fz
dDxmbG9hdD4oc2FtcGxlclN0YXRlLmxvZE9mZnNldCk7Ci0gICAgICAgIHNhbXBsZXJEZXNjLk1h
eEFuaXNvdHJvcHkgPSBzYW1wbGVyU3RhdGUubWF4QW5pc290cm9weTsKLSAgICAgICAgc2FtcGxl
ckRlc2MuQ29tcGFyaXNvbkZ1bmMgPSBEM0QxMV9DT01QQVJJU09OX05FVkVSOwotICAgICAgICBz
YW1wbGVyRGVzYy5Cb3JkZXJDb2xvclswXSA9IDAuMGY7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkJv
cmRlckNvbG9yWzFdID0gMC4wZjsKLSAgICAgICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbMl0g
PSAwLjBmOwotICAgICAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclszXSA9IDAuMGY7Ci0gICAg
ICAgIHNhbXBsZXJEZXNjLk1pbkxPRCA9IGdsX2QzZDExOjpDb252ZXJ0TWluTE9EKHNhbXBsZXJT
dGF0ZS5taW5GaWx0ZXIsIHNhbXBsZXJTdGF0ZS5sb2RPZmZzZXQpOwotICAgICAgICBzYW1wbGVy
RGVzYy5NYXhMT0QgPSBnbF9kM2QxMTo6Q29udmVydE1heExPRChzYW1wbGVyU3RhdGUubWluRmls
dGVyLCBzYW1wbGVyU3RhdGUubG9kT2Zmc2V0KTsKLQotICAgICAgICBJRDNEMTFTYW1wbGVyU3Rh
dGUgKmR4MTFTYW1wbGVyU3RhdGUgPSBOVUxMOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1E
ZXZpY2UtPkNyZWF0ZVNhbXBsZXJTdGF0ZSgmc2FtcGxlckRlc2MsICZkeDExU2FtcGxlclN0YXRl
KTsKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpIHx8ICFkeDExU2FtcGxlclN0YXRlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBFUlIoIlVuYWJsZSB0byBjcmVhdGUgYSBJRDNEMTFEZXB0aFN0
ZW5jaWxTdGF0ZSwgSFJFU1VMVDogMHglWC4iLCByZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJu
IE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICBtU2FtcGxlclN0YXRlQ2FjaGUuaW5zZXJ0KHN0
ZDo6bWFrZV9wYWlyKHNhbXBsZXJTdGF0ZSwgc3RkOjptYWtlX3BhaXIoZHgxMVNhbXBsZXJTdGF0
ZSwgbUNvdW50ZXIrKykpKTsKLQotICAgICAgICByZXR1cm4gZHgxMVNhbXBsZXJTdGF0ZTsKLSAg
ICB9Ci19Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclN0YXRlQ2Fj
aGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVu
ZGVyU3RhdGVDYWNoZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGI1MTExZGU0
OGYzMjg4MzE0YmQ1MjRhMDdlNDM3MDVkOWJjMzI5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvUmVuZGVyU3RhdGVDYWNoZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICsw
LDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFJlbmRlclN0YXRlQ2FjaGUuaDogRGVmaW5l
cyByeDo6UmVuZGVyU3RhdGVDYWNoZSwgYSBjYWNoZSBvZiBEaXJlY3QzRCByZW5kZXIKLS8vIHN0
YXRlIG9iamVjdHMuCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUlNUQVRFQ0FD
SEVfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUlNUQVRFQ0FDSEVfSF8KLQot
I2luY2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgiCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xl
dXRpbHMuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLWNsYXNzIFJlbmRlclN0YXRlQ2FjaGUKLXsK
LSAgcHVibGljOgotICAgIFJlbmRlclN0YXRlQ2FjaGUoKTsKLSAgICB2aXJ0dWFsIH5SZW5kZXJT
dGF0ZUNhY2hlKCk7Ci0KLSAgICB2b2lkIGluaXRpYWxpemUoSUQzRDExRGV2aWNlICpkZXZpY2Up
OwotICAgIHZvaWQgY2xlYXIoKTsKLQotICAgIC8vIEluY3JlbWVudHMgcmVmY291bnQgb24gdGhl
IHJldHVybmVkIGJsZW5kIHN0YXRlLCBSZWxlYXNlKCkgbXVzdCBiZSBjYWxsZWQuCi0gICAgSUQz
RDExQmxlbmRTdGF0ZSAqZ2V0QmxlbmRTdGF0ZShjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRT
dGF0ZSk7Ci0gICAgSUQzRDExUmFzdGVyaXplclN0YXRlICpnZXRSYXN0ZXJpemVyU3RhdGUoY29u
c3QgZ2w6OlJhc3Rlcml6ZXJTdGF0ZSAmcmFzdGVyU3RhdGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzY2lzc29yRW5hYmxlZCwgdW5zaWduZWQg
aW50IGRlcHRoU2l6ZSk7Ci0gICAgSUQzRDExRGVwdGhTdGVuY2lsU3RhdGUgKmdldERlcHRoU3Rl
bmNpbFN0YXRlKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmZHNTdGF0ZSk7Ci0gICAgSUQz
RDExU2FtcGxlclN0YXRlICpnZXRTYW1wbGVyU3RhdGUoY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAm
c2FtcGxlclN0YXRlKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihSZW5kZXJTdGF0ZUNhY2hlKTsKLQotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBtQ291bnRlcjsK
LQotICAgIC8vIEJsZW5kIHN0YXRlIGNhY2hlCi0gICAgc3RhdGljIHN0ZDo6c2l6ZV90IGhhc2hC
bGVuZFN0YXRlKGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRlKTsKLSAgICBzdGF0aWMg
Ym9vbCBjb21wYXJlQmxlbmRTdGF0ZXMoY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmEsIGNvbnN0IGds
OjpCbGVuZFN0YXRlICZiKTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGtNYXhCbGVu
ZFN0YXRlczsKLQotICAgIHR5cGVkZWYgc3RkOjpzaXplX3QgKCpCbGVuZFN0YXRlSGFzaEZ1bmN0
aW9uKShjb25zdCBnbDo6QmxlbmRTdGF0ZSAmKTsKLSAgICB0eXBlZGVmIGJvb2wgKCpCbGVuZFN0
YXRlRXF1YWxpdHlGdW5jdGlvbikoY29uc3QgZ2w6OkJsZW5kU3RhdGUgJiwgY29uc3QgZ2w6OkJs
ZW5kU3RhdGUgJik7Ci0gICAgdHlwZWRlZiBzdGQ6OnBhaXI8SUQzRDExQmxlbmRTdGF0ZSosIHVu
c2lnbmVkIGxvbmcgbG9uZz4gQmxlbmRTdGF0ZUNvdW50ZXJQYWlyOwotICAgIHR5cGVkZWYgc3Rk
Ojp1bm9yZGVyZWRfbWFwPGdsOjpCbGVuZFN0YXRlLCBCbGVuZFN0YXRlQ291bnRlclBhaXIsIEJs
ZW5kU3RhdGVIYXNoRnVuY3Rpb24sIEJsZW5kU3RhdGVFcXVhbGl0eUZ1bmN0aW9uPiBCbGVuZFN0
YXRlTWFwOwotICAgIEJsZW5kU3RhdGVNYXAgbUJsZW5kU3RhdGVDYWNoZTsKLQotICAgIC8vIFJh
c3Rlcml6ZXIgc3RhdGUgY2FjaGUKLSAgICBzdHJ1Y3QgUmFzdGVyaXplclN0YXRlS2V5Ci0gICAg
ewotICAgICAgICBnbDo6UmFzdGVyaXplclN0YXRlIHJhc3Rlcml6ZXJTdGF0ZTsKLSAgICAgICAg
Ym9vbCBzY2lzc29yRW5hYmxlZDsKLSAgICAgICAgdW5zaWduZWQgaW50IGRlcHRoU2l6ZTsKLSAg
ICB9OwotICAgIHN0YXRpYyBzdGQ6OnNpemVfdCBoYXNoUmFzdGVyaXplclN0YXRlKGNvbnN0IFJh
c3Rlcml6ZXJTdGF0ZUtleSAmcmFzdGVyU3RhdGUpOwotICAgIHN0YXRpYyBib29sIGNvbXBhcmVS
YXN0ZXJpemVyU3RhdGVzKGNvbnN0IFJhc3Rlcml6ZXJTdGF0ZUtleSAmYSwgY29uc3QgUmFzdGVy
aXplclN0YXRlS2V5ICZiKTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGtNYXhSYXN0
ZXJpemVyU3RhdGVzOwotCi0gICAgdHlwZWRlZiBzdGQ6OnNpemVfdCAoKlJhc3Rlcml6ZXJTdGF0
ZUhhc2hGdW5jdGlvbikoY29uc3QgUmFzdGVyaXplclN0YXRlS2V5ICYpOwotICAgIHR5cGVkZWYg
Ym9vbCAoKlJhc3Rlcml6ZXJTdGF0ZUVxdWFsaXR5RnVuY3Rpb24pKGNvbnN0IFJhc3Rlcml6ZXJT
dGF0ZUtleSAmLCBjb25zdCBSYXN0ZXJpemVyU3RhdGVLZXkgJik7Ci0gICAgdHlwZWRlZiBzdGQ6
OnBhaXI8SUQzRDExUmFzdGVyaXplclN0YXRlKiwgdW5zaWduZWQgbG9uZyBsb25nPiBSYXN0ZXJp
emVyU3RhdGVDb3VudGVyUGFpcjsKLSAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxSYXN0
ZXJpemVyU3RhdGVLZXksIFJhc3Rlcml6ZXJTdGF0ZUNvdW50ZXJQYWlyLCBSYXN0ZXJpemVyU3Rh
dGVIYXNoRnVuY3Rpb24sIFJhc3Rlcml6ZXJTdGF0ZUVxdWFsaXR5RnVuY3Rpb24+IFJhc3Rlcml6
ZXJTdGF0ZU1hcDsKLSAgICBSYXN0ZXJpemVyU3RhdGVNYXAgbVJhc3Rlcml6ZXJTdGF0ZUNhY2hl
OwotCi0gICAgLy8gRGVwdGggc3RlbmNpbCBzdGF0ZSBjYWNoZQotICAgIHN0YXRpYyBzdGQ6OnNp
emVfdCBoYXNoRGVwdGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZk
c1N0YXRlKTsKLSAgICBzdGF0aWMgYm9vbCBjb21wYXJlRGVwdGhTdGVuY2lsU3RhdGVzKGNvbnN0
IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmYSwgY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZi
KTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGtNYXhEZXB0aFN0ZW5jaWxTdGF0ZXM7
Ci0KLSAgICB0eXBlZGVmIHN0ZDo6c2l6ZV90ICgqRGVwdGhTdGVuY2lsU3RhdGVIYXNoRnVuY3Rp
b24pKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmKTsKLSAgICB0eXBlZGVmIGJvb2wgKCpE
ZXB0aFN0ZW5jaWxTdGF0ZUVxdWFsaXR5RnVuY3Rpb24pKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxT
dGF0ZSAmLCBjb25zdCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJik7Ci0gICAgdHlwZWRlZiBzdGQ6
OnBhaXI8SUQzRDExRGVwdGhTdGVuY2lsU3RhdGUqLCB1bnNpZ25lZCBsb25nIGxvbmc+IERlcHRo
U3RlbmNpbFN0YXRlQ291bnRlclBhaXI7Ci0gICAgdHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8
Z2w6OkRlcHRoU3RlbmNpbFN0YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERl
cHRoU3RlbmNpbFN0YXRlQ291bnRlclBhaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRGVwdGhTdGVuY2lsU3RhdGVIYXNoRnVuY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRGVwdGhTdGVuY2lsU3RhdGVFcXVhbGl0eUZ1bmN0aW9uPiBEZXB0aFN0ZW5jaWxT
dGF0ZU1hcDsKLSAgICBEZXB0aFN0ZW5jaWxTdGF0ZU1hcCBtRGVwdGhTdGVuY2lsU3RhdGVDYWNo
ZTsKLQotICAgIC8vIFNhbXBsZSBzdGF0ZSBjYWNoZQotICAgIHN0YXRpYyBzdGQ6OnNpemVfdCBo
YXNoU2FtcGxlclN0YXRlKGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSk7Ci0g
ICAgc3RhdGljIGJvb2wgY29tcGFyZVNhbXBsZXJTdGF0ZXMoY29uc3QgZ2w6OlNhbXBsZXJTdGF0
ZSAmYSwgY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmYik7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGludCBrTWF4U2FtcGxlclN0YXRlczsKLQotICAgIHR5cGVkZWYgc3RkOjpzaXplX3QgKCpT
YW1wbGVyU3RhdGVIYXNoRnVuY3Rpb24pKGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJik7Ci0gICAg
dHlwZWRlZiBib29sICgqU2FtcGxlclN0YXRlRXF1YWxpdHlGdW5jdGlvbikoY29uc3QgZ2w6OlNh
bXBsZXJTdGF0ZSAmLCBjb25zdCBnbDo6U2FtcGxlclN0YXRlICYpOwotICAgIHR5cGVkZWYgc3Rk
OjpwYWlyPElEM0QxMVNhbXBsZXJTdGF0ZSosIHVuc2lnbmVkIGxvbmcgbG9uZz4gU2FtcGxlclN0
YXRlQ291bnRlclBhaXI7Ci0gICAgdHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8Z2w6OlNhbXBs
ZXJTdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYW1wbGVyU3RhdGVDb3Vu
dGVyUGFpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYW1wbGVyU3RhdGVIYXNo
RnVuY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2FtcGxlclN0YXRlRXF1
YWxpdHlGdW5jdGlvbj4gU2FtcGxlclN0YXRlTWFwOwotICAgIFNhbXBsZXJTdGF0ZU1hcCBtU2Ft
cGxlclN0YXRlQ2FjaGU7Ci0KLSAgICBJRDNEMTFEZXZpY2UgKm1EZXZpY2U7Ci19OwotCi19Ci0K
LSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSU1RBVEVDQUNIRV9IXwpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0MTEuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQxMS5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2NjdjYzZmYTc4MWM3ODA0MzQ3ZDYwMjdkMTM5
ODVjMzhjMGZkY2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJU
YXJnZXQxMS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNTUgKzAsMCBAQAotI2luY2x1ZGUgInBy
ZWNvbXBpbGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gUmVuZGVyVGFyZ2V0MTEuY3BwOiBJbXBs
ZW1lbnRzIGEgRFgxMS1zcGVjaWZpYyB3cmFwcGVyIGZvciBJRDNEMTFWaWV3IHBvaW50ZXJzCi0v
LyByZXRhaW5lZCBieSBSZW5kZXJidWZmZXJzLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL1JlbmRlclRhcmdldDExLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRl
cmVyMTEuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9yZW5kZXJlcjExX3V0aWxz
LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLXN0
YXRpYyB1bnNpZ25lZCBpbnQgZ2V0UlRWU3VicmVzb3VyY2VJbmRleChJRDNEMTFUZXh0dXJlMkQg
KnRleHR1cmUsIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnZpZXcpCi17Ci0gICAgRDNEMTFfUkVO
REVSX1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVzYzsKLSAgICB2aWV3LT5HZXREZXNjKCZydHZEZXNj
KTsKLQotICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleERlc2M7Ci0gICAgdGV4dHVyZS0+R2V0
RGVzYygmdGV4RGVzYyk7Ci0KLSAgICB1bnNpZ25lZCBpbnQgbWlwU2xpY2UgPSAwOwotICAgIHVu
c2lnbmVkIGludCBhcnJheVNsaWNlID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgbWlwTGV2ZWxzID0g
dGV4RGVzYy5NaXBMZXZlbHM7Ci0KLSAgICBzd2l0Y2ggKHJ0dkRlc2MuVmlld0RpbWVuc2lvbikK
LSAgICB7Ci0gICAgICBjYXNlIEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTFEOgotICAgICAg
ICBtaXBTbGljZSA9IHJ0dkRlc2MuVGV4dHVyZTFELk1pcFNsaWNlOwotICAgICAgICBhcnJheVNs
aWNlID0gMDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRDNEMTFfUlRWX0RJTUVOU0lP
Tl9URVhUVVJFMURBUlJBWToKLSAgICAgICAgbWlwU2xpY2UgPSBydHZEZXNjLlRleHR1cmUxREFy
cmF5Lk1pcFNsaWNlOwotICAgICAgICBhcnJheVNsaWNlID0gcnR2RGVzYy5UZXh0dXJlMURBcnJh
eS5GaXJzdEFycmF5U2xpY2U7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEQzRDExX1JU
Vl9ESU1FTlNJT05fVEVYVFVSRTJEOgotICAgICAgICBtaXBTbGljZSA9IHJ0dkRlc2MuVGV4dHVy
ZTJELk1pcFNsaWNlOwotICAgICAgICBhcnJheVNsaWNlID0gMDsKLSAgICAgICAgYnJlYWs7Ci0K
LSAgICAgIGNhc2UgRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMkRBUlJBWToKLSAgICAgICAg
bWlwU2xpY2UgPSBydHZEZXNjLlRleHR1cmUyREFycmF5Lk1pcFNsaWNlOwotICAgICAgICBhcnJh
eVNsaWNlID0gcnR2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2U7Ci0gICAgICAg
IGJyZWFrOwotCi0gICAgICBjYXNlIEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJETVM6Ci0g
ICAgICAgIG1pcFNsaWNlID0gMDsKLSAgICAgICAgYXJyYXlTbGljZSA9IDA7Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgICBjYXNlIEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJETVNBUlJBWToK
LSAgICAgICAgbWlwU2xpY2UgPSAwOwotICAgICAgICBhcnJheVNsaWNlID0gcnR2RGVzYy5UZXh0
dXJlMkRNU0FycmF5LkZpcnN0QXJyYXlTbGljZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNh
c2UgRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFM0Q6Ci0gICAgICAgIG1pcFNsaWNlID0gcnR2
RGVzYy5UZXh0dXJlM0QuTWlwU2xpY2U7Ci0gICAgICAgIGFycmF5U2xpY2UgPSAwOwotICAgICAg
ICBicmVhazsKLQotICAgICAgY2FzZSBEM0QxMV9SVFZfRElNRU5TSU9OX1VOS05PV046Ci0gICAg
ICBjYXNlIEQzRDExX1JUVl9ESU1FTlNJT05fQlVGRkVSOgotICAgICAgICBVTklNUExFTUVOVEVE
KCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJM
RSgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gRDNEMTFDYWxjU3VicmVz
b3VyY2UobWlwU2xpY2UsIGFycmF5U2xpY2UsIG1pcExldmVscyk7Ci19Ci0KLXN0YXRpYyB1bnNp
Z25lZCBpbnQgZ2V0RFNWU3VicmVzb3VyY2VJbmRleChJRDNEMTFUZXh0dXJlMkQgKnRleHR1cmUs
IElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKnZpZXcpCi17Ci0gICAgRDNEMTFfREVQVEhfU1RFTkNJ
TF9WSUVXX0RFU0MgZHN2RGVzYzsKLSAgICB2aWV3LT5HZXREZXNjKCZkc3ZEZXNjKTsKLQotICAg
IEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleERlc2M7Ci0gICAgdGV4dHVyZS0+R2V0RGVzYygmdGV4
RGVzYyk7Ci0KLSAgICB1bnNpZ25lZCBpbnQgbWlwU2xpY2UgPSAwOwotICAgIHVuc2lnbmVkIGlu
dCBhcnJheVNsaWNlID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgbWlwTGV2ZWxzID0gdGV4RGVzYy5N
aXBMZXZlbHM7Ci0KLSAgICBzd2l0Y2ggKGRzdkRlc2MuVmlld0RpbWVuc2lvbikKLSAgICB7Ci0g
ICAgICBjYXNlIEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTFEOgotICAgICAgICBtaXBTbGlj
ZSA9IGRzdkRlc2MuVGV4dHVyZTFELk1pcFNsaWNlOwotICAgICAgICBhcnJheVNsaWNlID0gMDsK
LSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJF
MURBUlJBWToKLSAgICAgICAgbWlwU2xpY2UgPSBkc3ZEZXNjLlRleHR1cmUxREFycmF5Lk1pcFNs
aWNlOwotICAgICAgICBhcnJheVNsaWNlID0gZHN2RGVzYy5UZXh0dXJlMURBcnJheS5GaXJzdEFy
cmF5U2xpY2U7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEQzRDExX0RTVl9ESU1FTlNJ
T05fVEVYVFVSRTJEOgotICAgICAgICBtaXBTbGljZSA9IGRzdkRlc2MuVGV4dHVyZTJELk1pcFNs
aWNlOwotICAgICAgICBhcnJheVNsaWNlID0gMDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNh
c2UgRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMkRBUlJBWToKLSAgICAgICAgbWlwU2xpY2Ug
PSBkc3ZEZXNjLlRleHR1cmUyREFycmF5Lk1pcFNsaWNlOwotICAgICAgICBhcnJheVNsaWNlID0g
ZHN2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2U7Ci0gICAgICAgIGJyZWFrOwot
Ci0gICAgICBjYXNlIEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTJETVM6Ci0gICAgICAgIG1p
cFNsaWNlID0gMDsKLSAgICAgICAgYXJyYXlTbGljZSA9IDA7Ci0gICAgICAgIGJyZWFrOwotCi0g
ICAgICBjYXNlIEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTJETVNBUlJBWToKLSAgICAgICAg
bWlwU2xpY2UgPSAwOwotICAgICAgICBhcnJheVNsaWNlID0gZHN2RGVzYy5UZXh0dXJlMkRNU0Fy
cmF5LkZpcnN0QXJyYXlTbGljZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRDNEMTFf
UlRWX0RJTUVOU0lPTl9VTktOT1dOOgotICAgICAgICBVTklNUExFTUVOVEVEKCk7Ci0gICAgICAg
IGJyZWFrOwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gRDNEMTFDYWxjU3VicmVzb3VyY2UobWlwU2xp
Y2UsIGFycmF5U2xpY2UsIG1pcExldmVscyk7Ci19Ci0KLVJlbmRlclRhcmdldDExOjpSZW5kZXJU
YXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0diwg
SUQzRDExVGV4dHVyZTJEICp0ZXgsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBtUmVuZGVyZXIgPSBSZW5kZXJlcjEx
OjptYWtlUmVuZGVyZXIxMShyZW5kZXJlcik7Ci0gICAgbVRleHR1cmUgPSB0ZXg7Ci0gICAgbVJl
bmRlclRhcmdldCA9IHJ0djsKLSAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICBtU2hhZGVy
UmVzb3VyY2UgPSBzcnY7Ci0gICAgbVN1YnJlc291cmNlSW5kZXggPSAwOwotCi0gICAgaWYgKG1S
ZW5kZXJUYXJnZXQgJiYgbVRleHR1cmUpCi0gICAgewotICAgICAgICBEM0QxMV9SRU5ERVJfVEFS
R0VUX1ZJRVdfREVTQyBkZXNjOwotICAgICAgICBtUmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZkZXNj
KTsKLQotICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyB0ZXhEZXNjOwotICAgICAgICBtVGV4
dHVyZS0+R2V0RGVzYygmdGV4RGVzYyk7Ci0KLSAgICAgICAgbVN1YnJlc291cmNlSW5kZXggPSBn
ZXRSVFZTdWJyZXNvdXJjZUluZGV4KG1UZXh0dXJlLCBtUmVuZGVyVGFyZ2V0KTsKLSAgICAgICAg
bVdpZHRoID0gd2lkdGg7Ci0gICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIG1TYW1w
bGVzID0gKHRleERlc2MuU2FtcGxlRGVzYy5Db3VudCA+IDEpID8gdGV4RGVzYy5TYW1wbGVEZXNj
LkNvdW50IDogMDsKLQotICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVy
dFRleHR1cmVJbnRlcm5hbEZvcm1hdChkZXNjLkZvcm1hdCk7Ci0gICAgICAgIG1BY3R1YWxGb3Jt
YXQgPSBkM2QxMV9nbDo6Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChkZXNjLkZvcm1hdCk7
Ci0gICAgfQotfQotCi1SZW5kZXJUYXJnZXQxMTo6UmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJl
bmRlcmVyLCBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpkc3YsIElEM0QxMVRleHR1cmUyRCAqdGV4
LCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpCi17Ci0gICAgbVJlbmRlcmVyID0gUmVuZGVyZXIxMTo6bWFrZVJlbmRlcmVyMTEocmVu
ZGVyZXIpOwotICAgIG1UZXh0dXJlID0gdGV4OwotICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOwot
ICAgIG1EZXB0aFN0ZW5jaWwgPSBkc3Y7Ci0gICAgbVNoYWRlclJlc291cmNlID0gc3J2OwotICAg
IG1TdWJyZXNvdXJjZUluZGV4ID0gMDsKLQotICAgIGlmIChtRGVwdGhTdGVuY2lsICYmIG1UZXh0
dXJlKQotICAgIHsKLSAgICAgICAgRDNEMTFfREVQVEhfU1RFTkNJTF9WSUVXX0RFU0MgZGVzYzsK
LSAgICAgICAgbURlcHRoU3RlbmNpbC0+R2V0RGVzYygmZGVzYyk7Ci0KLSAgICAgICAgRDNEMTFf
VEVYVFVSRTJEX0RFU0MgdGV4RGVzYzsKLSAgICAgICAgbVRleHR1cmUtPkdldERlc2MoJnRleERl
c2MpOwotCi0gICAgICAgIG1TdWJyZXNvdXJjZUluZGV4ID0gZ2V0RFNWU3VicmVzb3VyY2VJbmRl
eChtVGV4dHVyZSwgbURlcHRoU3RlbmNpbCk7Ci0gICAgICAgIG1XaWR0aCA9IHdpZHRoOwotICAg
ICAgICBtSGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBtU2FtcGxlcyA9ICh0ZXhEZXNjLlNhbXBs
ZURlc2MuQ291bnQgPiAxKSA/IHRleERlc2MuU2FtcGxlRGVzYy5Db3VudCA6IDA7Ci0KLSAgICAg
ICAgbUludGVybmFsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3Jt
YXQoZGVzYy5Gb3JtYXQpOwotICAgICAgICBtQWN0dWFsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZl
cnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQpOwotICAgIH0KLX0KLQotUmVuZGVy
VGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcywgYm9vbCBk
ZXB0aCkKLXsKLSAgICBtUmVuZGVyZXIgPSBSZW5kZXJlcjExOjptYWtlUmVuZGVyZXIxMShyZW5k
ZXJlcik7Ci0gICAgbVRleHR1cmUgPSBOVUxMOwotICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOwot
ICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIG1TaGFkZXJSZXNvdXJjZSA9IE5VTEw7Ci0K
LSAgICBEWEdJX0ZPUk1BVCByZXF1ZXN0ZWRGb3JtYXQgPSBnbF9kM2QxMTo6Q29udmVydFJlbmRl
cmJ1ZmZlckZvcm1hdChmb3JtYXQpOwotCi0gICAgaW50IHN1cHBvcnRlZFNhbXBsZXMgPSBtUmVu
ZGVyZXItPmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKHJlcXVlc3RlZEZvcm1hdCwgc2FtcGxl
cyk7Ci0gICAgaWYgKHN1cHBvcnRlZFNhbXBsZXMgPCAwKQotICAgIHsKLSAgICAgICAgZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKQotICAgIHsKLSAgICAgICAgLy8gQ3JlYXRlIHRleHR1
cmUgcmVzb3VyY2UKLSAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgZGVzYzsKLSAgICAgICAg
ZGVzYy5XaWR0aCA9IHdpZHRoOyAKLSAgICAgICAgZGVzYy5IZWlnaHQgPSBoZWlnaHQ7Ci0gICAg
ICAgIGRlc2MuTWlwTGV2ZWxzID0gMTsKLSAgICAgICAgZGVzYy5BcnJheVNpemUgPSAxOwotICAg
ICAgICBkZXNjLkZvcm1hdCA9IHJlcXVlc3RlZEZvcm1hdDsKLSAgICAgICAgZGVzYy5TYW1wbGVE
ZXNjLkNvdW50ID0gKHN1cHBvcnRlZFNhbXBsZXMgPT0gMCkgPyAxIDogc3VwcG9ydGVkU2FtcGxl
czsKLSAgICAgICAgZGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOwotICAgICAgICBkZXNjLlVz
YWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKLSAgICAgICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9
IDA7Ci0gICAgICAgIGRlc2MuTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgZGVzYy5CaW5kRmxhZ3Mg
PSAoZGVwdGggPyBEM0QxMV9CSU5EX0RFUFRIX1NURU5DSUwgOiAoRDNEMTFfQklORF9SRU5ERVJf
VEFSR0VUIHwgRDNEMTFfQklORF9TSEFERVJfUkVTT1VSQ0UpKTsKLQotICAgICAgICBJRDNEMTFE
ZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0gICAgICAgIEhSRVNVTFQg
cmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRlc2MsIE5VTEwsICZtVGV4dHVyZSk7
Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgICAg
ICBpZiAoZGVwdGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEQzRDExX0RFUFRIX1NURU5DSUxf
VklFV19ERVNDIGRzdkRlc2M7Ci0gICAgICAgICAgICBkc3ZEZXNjLkZvcm1hdCA9IHJlcXVlc3Rl
ZEZvcm1hdDsKLSAgICAgICAgICAgIGRzdkRlc2MuVmlld0RpbWVuc2lvbiA9IChzdXBwb3J0ZWRT
YW1wbGVzID09IDApID8gRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMkQgOiBEM0QxMV9EU1Zf
RElNRU5TSU9OX1RFWFRVUkUyRE1TOwotICAgICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkQuTWlw
U2xpY2UgPSAwOwotICAgICAgICAgICAgZHN2RGVzYy5GbGFncyA9IDA7Ci0gICAgICAgICAgICBy
ZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFZpZXcobVRleHR1cmUsICZkc3ZEZXNj
LCAmbURlcHRoU3RlbmNpbCk7Ci0KLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1F
TU9SWSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgp
OwotICAgICAgICAgICAgICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICAgICAgICAgICAgICBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ewotICAgICAgICAgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVzYzsKLSAg
ICAgICAgICAgIHJ0dkRlc2MuRm9ybWF0ID0gcmVxdWVzdGVkRm9ybWF0OwotICAgICAgICAgICAg
cnR2RGVzYy5WaWV3RGltZW5zaW9uID0gKHN1cHBvcnRlZFNhbXBsZXMgPT0gMCkgPyBEM0QxMV9S
VFZfRElNRU5TSU9OX1RFWFRVUkUyRCA6IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJETVM7
Ci0gICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IDA7Ci0gICAgICAgICAg
ICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobVRleHR1cmUsICZydHZE
ZXNjLCAmbVJlbmRlclRhcmdldCk7Ci0KLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRP
Rk1FTU9SWSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtVGV4dHVyZS0+UmVsZWFz
ZSgpOwotICAgICAgICAgICAgICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICAgICAgICAgICAgICBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAg
ICAgICAgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOwotICAgICAg
ICAgICAgc3J2RGVzYy5Gb3JtYXQgPSByZXF1ZXN0ZWRGb3JtYXQ7Ci0gICAgICAgICAgICBzcnZE
ZXNjLlZpZXdEaW1lbnNpb24gPSAoc3VwcG9ydGVkU2FtcGxlcyA9PSAwKSA/IEQzRDExX1NSVl9E
SU1FTlNJT05fVEVYVFVSRTJEIDogRDNEMTFfU1JWX0RJTUVOU0lPTl9URVhUVVJFMkRNUzsKLSAg
ICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJELk1vc3REZXRhaWxlZE1pcCA9IDA7Ci0gICAgICAg
ICAgICBzcnZEZXNjLlRleHR1cmUyRC5NaXBMZXZlbHMgPSAxOwotICAgICAgICAgICAgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcobVRleHR1cmUsICZzcnZEZXNjLCAm
bVNoYWRlclJlc291cmNlKTsKLQotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVN
T1JZKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7
Ci0gICAgICAgICAgICAgICAgbVRleHR1cmUgPSBOVUxMOwotICAgICAgICAgICAgICAgIG1SZW5k
ZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0ID0gTlVM
TDsKLSAgICAgICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChyZXN1bHQpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1XaWR0aCA9IHdpZHRoOwot
ICAgIG1IZWlnaHQgPSBoZWlnaHQ7Ci0gICAgbUludGVybmFsRm9ybWF0ID0gZm9ybWF0OwotICAg
IG1TYW1wbGVzID0gc3VwcG9ydGVkU2FtcGxlczsKLSAgICBtQWN0dWFsRm9ybWF0ID0gZDNkMTFf
Z2w6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQocmVxdWVzdGVkRm9ybWF0KTsKLSAgICBt
U3VicmVzb3VyY2VJbmRleCA9IEQzRDExQ2FsY1N1YnJlc291cmNlKDAsIDAsIDEpOwotfQotCi1S
ZW5kZXJUYXJnZXQxMTo6flJlbmRlclRhcmdldDExKCkKLXsKLSAgICBpZiAobVRleHR1cmUpCi0g
ICAgewotICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICBtVGV4dHVyZSA9IE5V
TEw7Ci0gICAgfQotCi0gICAgaWYgKG1SZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICBtUmVu
ZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOwotICAg
IH0KLQotICAgIGlmIChtRGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbURlcHRoU3RlbmNp
bC0+UmVsZWFzZSgpOwotICAgICAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICB9Ci0KLSAg
ICBpZiAobVNoYWRlclJlc291cmNlKQotICAgIHsKLSAgICAgICAgbVNoYWRlclJlc291cmNlLT5S
ZWxlYXNlKCk7Ci0gICAgICAgIG1TaGFkZXJSZXNvdXJjZSA9IE5VTEw7Ci0gICAgfQotfQotCi1S
ZW5kZXJUYXJnZXQxMSAqUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShSZW5kZXJU
YXJnZXQgKnRhcmdldCkKLXsKLSAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShyeDo6UmVuZGVy
VGFyZ2V0MTEqLCB0YXJnZXQpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8cng6OlJlbmRlclRh
cmdldDExKj4odGFyZ2V0KTsKLX0KLQotSUQzRDExVGV4dHVyZTJEICpSZW5kZXJUYXJnZXQxMTo6
Z2V0VGV4dHVyZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlOwotfQotCi1JRDNEMTFS
ZW5kZXJUYXJnZXRWaWV3ICpSZW5kZXJUYXJnZXQxMTo6Z2V0UmVuZGVyVGFyZ2V0VmlldygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7Ci19Ci0KLUlEM0QxMURlcHRoU3RlbmNp
bFZpZXcgKlJlbmRlclRhcmdldDExOjpnZXREZXB0aFN0ZW5jaWxWaWV3KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbURlcHRoU3RlbmNpbDsKLX0KLQotSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpS
ZW5kZXJUYXJnZXQxMTo6Z2V0U2hhZGVyUmVzb3VyY2VWaWV3KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbVNoYWRlclJlc291cmNlOwotfQotCi11bnNpZ25lZCBpbnQgUmVuZGVyVGFyZ2V0MTE6Omdl
dFN1YnJlc291cmNlSW5kZXgoKSBjb25zdAotewotICAgIHJldHVybiBtU3VicmVzb3VyY2VJbmRl
eDsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQxMS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQxMS5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA5NzgyN2YyNjM5NzA3Mjk0Mjg0YTJjY2QzNDgxYzk3YmVkZTg5YjA3Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0MTEuaAorKysg
L2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBSZW5kZXJUYXJn
ZXQxMS5oOiBEZWZpbmVzIGEgRFgxMS1zcGVjaWZpYyB3cmFwcGVyIGZvciBJRDNEMTFWaWV3IHBv
aW50ZXJzCi0vLyByZXRhaW5lZCBieSBSZW5kZXJidWZmZXJzLgotCi0jaWZuZGVmIExJQkdMRVNW
Ml9SRU5ERVJFUl9SRU5ERVJUQVJHRVQxMV9IXwotI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJf
UkVOREVSVEFSR0VUMTFfSF8KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJU
YXJnZXQuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci1jbGFzcyBSZW5kZXJlcjsKLWNsYXNzIFJlbmRl
cmVyMTE7Ci0KLWNsYXNzIFJlbmRlclRhcmdldDExIDogcHVibGljIFJlbmRlclRhcmdldAotewot
ICBwdWJsaWM6Ci0gICAgUmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBJRDNEMTFS
ZW5kZXJUYXJnZXRWaWV3ICpydHYsIElEM0QxMVRleHR1cmUyRCAqdGV4LCBJRDNEMTFTaGFkZXJS
ZXNvdXJjZVZpZXcgKnNydiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotICAgIFJl
bmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAq
ZHN2LCBJRDNEMTFUZXh0dXJlMkQgKnRleCwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICBSZW5kZXJUYXJnZXQxMShSZW5k
ZXJlciAqcmVuZGVyZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBHTHNpemVpIHNhbXBsZXMsIGJvb2wgZGVwdGgpOwotICAgIHZpcnR1YWwgflJlbmRlclRh
cmdldDExKCk7Ci0KLSAgICBzdGF0aWMgUmVuZGVyVGFyZ2V0MTEgKm1ha2VSZW5kZXJUYXJnZXQx
MShSZW5kZXJUYXJnZXQgKnJlbmRlclRhcmdldCk7Ci0KLSAgICBJRDNEMTFUZXh0dXJlMkQgKmdl
dFRleHR1cmUoKSBjb25zdDsKLSAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpnZXRSZW5kZXJU
YXJnZXRWaWV3KCkgY29uc3Q7Ci0gICAgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZ2V0RGVwdGhT
dGVuY2lsVmlldygpIGNvbnN0OwotICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0U2hh
ZGVyUmVzb3VyY2VWaWV3KCkgY29uc3Q7Ci0KLSAgICB1bnNpZ25lZCBpbnQgZ2V0U3VicmVzb3Vy
Y2VJbmRleCgpIGNvbnN0OwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKFJlbmRlclRhcmdldDExKTsKLQotICAgIHVuc2lnbmVkIGludCBtU3VicmVzb3VyY2VJbmRl
eDsKLSAgICBJRDNEMTFUZXh0dXJlMkQgKm1UZXh0dXJlOwotICAgIElEM0QxMVJlbmRlclRhcmdl
dFZpZXcgKm1SZW5kZXJUYXJnZXQ7Ci0gICAgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqbURlcHRo
U3RlbmNpbDsKLSAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKm1TaGFkZXJSZXNvdXJjZTsK
LQotICAgIFJlbmRlcmVyMTEgKm1SZW5kZXJlcjsKLX07Ci0KLX0KLQotI2VuZGlmIExJQkdMRVNW
Ml9SRU5ERVJFUl9SRU5ERVJUQVJHRVQxMV9IXwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvUmVuZGVyVGFyZ2V0OS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldDkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBhODRjNzA5MDU5OWM5MGVjMzA3ODk2NWZjYTllMWEwNjMyM2M3OThiLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0OS5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwxMTMgKzAsMCBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCi0vLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLQotLy8gUmVuZGVyVGFyZ2V0OS5jcHA6IEltcGxlbWVudHMgYSBEM0Q5LXNwZWNpZmljIHdy
YXBwZXIgZm9yIElEaXJlY3QzRFN1cmZhY2U5Ci0vLyBwb2ludGVycyByZXRhaW5lZCBieSByZW5k
ZXJidWZmZXJzLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldDku
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXI5LmgiCi0KLSNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXI5X3V0aWxzLmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL21haW4uaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLVJlbmRlclRhcmdldDk6OlJlbmRlclRh
cmdldDkoUmVuZGVyZXIgKnJlbmRlcmVyLCBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSkKLXsK
LSAgICBtUmVuZGVyZXIgPSBSZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjkocmVuZGVyZXIpOwotICAg
IG1SZW5kZXJUYXJnZXQgPSBzdXJmYWNlOwotCi0gICAgaWYgKG1SZW5kZXJUYXJnZXQpCi0gICAg
ewotICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzY3JpcHRpb247Ci0gICAgICAgIG1SZW5kZXJU
YXJnZXQtPkdldERlc2MoJmRlc2NyaXB0aW9uKTsKLQotICAgICAgICBtV2lkdGggPSBkZXNjcmlw
dGlvbi5XaWR0aDsKLSAgICAgICAgbUhlaWdodCA9IGRlc2NyaXB0aW9uLkhlaWdodDsKLSAgICAg
ICAgCi0gICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEVxdWl2YWxlbnRGb3Jt
YXQoZGVzY3JpcHRpb24uRm9ybWF0KTsKLSAgICAgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDlfZ2w6
OkdldEVxdWl2YWxlbnRGb3JtYXQoZGVzY3JpcHRpb24uRm9ybWF0KTsKLSAgICAgICAgbVNhbXBs
ZXMgPSBkM2Q5X2dsOjpHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShkZXNjcmlwdGlvbi5N
dWx0aVNhbXBsZVR5cGUpOwotICAgIH0KLX0KLQotUmVuZGVyVGFyZ2V0OTo6UmVuZGVyVGFyZ2V0
OShSZW5kZXJlciAqcmVuZGVyZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpCi17Ci0gICAgbVJlbmRlcmVyID0gUmVuZGVyZXI5
OjptYWtlUmVuZGVyZXI5KHJlbmRlcmVyKTsKLSAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKLQot
ICAgIEQzREZPUk1BVCByZXF1ZXN0ZWRGb3JtYXQgPSBnbF9kM2Q5OjpDb252ZXJ0UmVuZGVyYnVm
ZmVyRm9ybWF0KGZvcm1hdCk7Ci0gICAgaW50IHN1cHBvcnRlZFNhbXBsZXMgPSBtUmVuZGVyZXIt
PmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKHJlcXVlc3RlZEZvcm1hdCwgc2FtcGxlcyk7Ci0K
LSAgICBpZiAoc3VwcG9ydGVkU2FtcGxlcyA9PSAtMSkKLSAgICB7Ci0gICAgICAgIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKLQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSFJF
U1VMVCByZXN1bHQgPSBEM0RFUlJfSU5WQUxJRENBTEw7Ci0gICAgCi0gICAgaWYgKHdpZHRoID4g
MCAmJiBoZWlnaHQgPiAwKQotICAgIHsKLSAgICAgICAgaWYgKHJlcXVlc3RlZEZvcm1hdCA9PSBE
M0RGTVRfRDI0UzgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IG1SZW5kZXJlci0+
Z2V0RGV2aWNlKCktPkNyZWF0ZURlcHRoU3RlbmNpbFN1cmZhY2Uod2lkdGgsIGhlaWdodCwgcmVx
dWVzdGVkRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9kM2Q5OjpHZXRNdWx0aXNhbXBsZVR5cGVG
cm9tU2FtcGxlcyhzdXBwb3J0ZWRTYW1wbGVzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgRkFMU0UsICZt
UmVuZGVyVGFyZ2V0LCBOVUxMKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJlc3VsdCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCktPkNyZWF0ZVJlbmRl
clRhcmdldCh3aWR0aCwgaGVpZ2h0LCByZXF1ZXN0ZWRGb3JtYXQsIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6
OkdldE11bHRpc2FtcGxlVHlwZUZyb21TYW1wbGVzKHN1cHBvcnRlZFNhbXBsZXMpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAsIEZBTFNFLCAmbVJlbmRlclRhcmdldCwgTlVMTCk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9G
TUVNT1JZKQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7Ci0gICAgfQotCi0gICAgbVdpZHRoID0gd2lkdGg7Ci0gICAgbUhl
aWdodCA9IGhlaWdodDsKLSAgICBtSW50ZXJuYWxGb3JtYXQgPSBmb3JtYXQ7Ci0gICAgbVNhbXBs
ZXMgPSBzdXBwb3J0ZWRTYW1wbGVzOwotICAgIG1BY3R1YWxGb3JtYXQgPSBkM2Q5X2dsOjpHZXRF
cXVpdmFsZW50Rm9ybWF0KHJlcXVlc3RlZEZvcm1hdCk7Ci19Ci0KLVJlbmRlclRhcmdldDk6On5S
ZW5kZXJUYXJnZXQ5KCkKLXsKLSAgICBpZiAobVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAg
IG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICB9Ci19Ci0KLVJlbmRlclRhcmdldDkgKlJl
bmRlclRhcmdldDk6Om1ha2VSZW5kZXJUYXJnZXQ5KFJlbmRlclRhcmdldCAqdGFyZ2V0KQotewot
ICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKHJ4OjpSZW5kZXJUYXJnZXQ5KiwgdGFyZ2V0KSk7
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHJ4OjpSZW5kZXJUYXJnZXQ5Kj4odGFyZ2V0KTsKLX0K
LQotSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlclRhcmdldDk6OmdldFN1cmZhY2UoKQotewotICAg
IC8vIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgcmVsZWFzaW5nIHRoZSByZXR1cm5lZCBzdXJm
YWNlIHJlZmVyZW5jZS4KLSAgICBpZiAobVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIG1S
ZW5kZXJUYXJnZXQtPkFkZFJlZigpOwotICAgIH0KLQotICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0
OwotfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQ5Lmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRh
cmdldDkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmFmOGFkMWM2ZDJkNjI0Mjk0
MDBmZTMzY2I4Y2RkZTcxZjdkMzI1ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL1JlbmRlclRhcmdldDkuaAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0vLwotCi0vLyBSZW5kZXJUYXJnZXQ5Lmg6IERlZmluZXMgYSBEM0Q5LXNwZWNpZmljIHdy
YXBwZXIgZm9yIElEaXJlY3QzRFN1cmZhY2U5IHBvaW50ZXJzCi0vLyByZXRhaW5lZCBieSBSZW5k
ZXJidWZmZXJzLgotCi0jaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJUQVJHRVQ5X0hf
Ci0jZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJUQVJHRVQ5X0hfCi0KLSNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0LmgiCi0KLW5hbWVzcGFjZSByeAotewot
Y2xhc3MgUmVuZGVyZXI7Ci1jbGFzcyBSZW5kZXJlcjk7Ci0KLWNsYXNzIFJlbmRlclRhcmdldDkg
OiBwdWJsaWMgUmVuZGVyVGFyZ2V0Ci17Ci0gIHB1YmxpYzoKLSAgICBSZW5kZXJUYXJnZXQ5KFJl
bmRlcmVyICpyZW5kZXJlciwgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UpOwotICAgIFJlbmRl
clRhcmdldDkoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzKTsKLSAgICB2aXJ0dWFsIH5SZW5kZXJU
YXJnZXQ5KCk7Ci0KLSAgICBzdGF0aWMgUmVuZGVyVGFyZ2V0OSAqbWFrZVJlbmRlclRhcmdldDko
UmVuZGVyVGFyZ2V0ICpyZW5kZXJUYXJnZXQpOwotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRT
dXJmYWNlKCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVu
ZGVyVGFyZ2V0OSk7Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVJlbmRlclRhcmdldDsKLQot
ICAgIFJlbmRlcmVyOSAqbVJlbmRlcmVyOwotfTsKLQotfQotCi0jZW5kaWYgLy8gTElCR0xFU1Yy
X1JFTkRFUkVSX1JFTkRFUlRBUkdFVDlfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5jcHAKaW5kZXggZTBi
M2FiY2Y4Nzk5ZWMyYzZjMDk1NjQ2NGQzZDVmOTFkODg3ZDg2YS4uNGJkNGRjZjgyNjdlNDQyZGYx
YjBhN2RjYWM4OTliNTllOTU0ZDE4MCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5jcHAKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5jcHAKQEAgLTExLDgg
KzExLDggQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgogI2luY2x1ZGUgImxpYkdMRVN2
Mi9Qcm9ncmFtLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyOS5oIgotI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9SZW5kZXJlcjExLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L2QzZDkvUmVuZGVyZXI5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1Jl
bmRlcmVyMTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAi
dGhpcmRfcGFydHkvdHJhY2VfZXZlbnQvdHJhY2VfZXZlbnQuaCIKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5o
CmluZGV4IGUxODYxZjAxZWIxZGFiOTAzMjMxOTVkMThmMGNjZTliYWMyZDMyYTAuLjcyNDRhMGEz
ZDYxMWYwOTEyODFkOTU2ODg2MzU3ZmYwYWE5Y2M4ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgKQEAg
LTExOSw3ICsxMTksNyBAQCBjbGFzcyBSZW5kZXJlcgogICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0
dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGdsOjpUZXh0dXJlICp0ZXh0dXJl
KSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0UmFzdGVyaXplclN0YXRlKGNvbnN0IGdsOjpS
YXN0ZXJpemVyU3RhdGUgJnJhc3RlclN0YXRlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldEJs
ZW5kU3RhdGUoY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xv
ciAmYmxlbmRDb2xvciwKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVi
dWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29u
c3QgZ2w6OkNvbG9yICZibGVuZENvbG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGludCBzYW1wbGVNYXNrKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldERlcHRo
U3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmZGVwdGhTdGVuY2lsU3Rh
dGUsIGludCBzdGVuY2lsUmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgc3RlbmNpbEJhY2tSZWYsIGJvb2wgZnJvbnRGYWNlQ0NXKSA9IDA7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVy
MTEuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9S
ZW5kZXJlcjExLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNiYTM1NWQ1ODIy
ZjBmYzk3ZWVkMDNkNzI4YWUwZDc3ZWQ0NmU1Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL1JlbmRlcmVyMTEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzU1MSArMCwwIEBA
Ci0jaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAx
MyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFJlbmRl
cmVyMTEuY3BwOiBJbXBsZW1lbnRzIGEgYmFjay1lbmQgc3BlY2lmaWMgY2xhc3MgZm9yIHRoZSBE
M0QxMSByZW5kZXJlci4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL3V0aWxpdGllcy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKLSNp
bmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9G
cmFtZWJ1ZmZlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIxMS5oIgotI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQxMS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9yZW5kZXJlcjExX3V0aWxzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1NoYWRl
ckV4ZWN1dGFibGUxMS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9Td2FwQ2hhaW4x
MS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZTExLmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlcjExLmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL0luZGV4QnVmZmVyMTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
QnVmZmVyU3RvcmFnZTExLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERh
dGFNYW5hZ2VyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0luZGV4RGF0YU1hbmFn
ZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0b3JhZ2UxMS5oIgot
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9RdWVyeTExLmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL0ZlbmNlMTEuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9z
aGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdoMTF2cy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTExcHMuaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYjExcHMu
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9wYXNzdGhy
b3VnaGx1bTExcHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21w
aWxlZC9wYXNzdGhyb3VnaGx1bWFscGhhMTFwcy5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvY2xlYXIxMXZzLmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJzaW5nbGUxMXBzLmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJtdWx0aXBsZTExcHMuaCIK
LQotI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiCi0KLSNpZmRlZiBfREVCVUcKLS8vIHRoaXMg
ZmxhZyBlbmFibGVzIHN1cHByZXNzaW5nIHNvbWUgc3B1cmlvdXMgd2FybmluZ3MgdGhhdCBwb3Ag
dXAgaW4gY2VydGFpbiBXZWJHTCBzYW1wbGVzCi0vLyBhbmQgY29uZm9ybWFuY2UgdGVzdHMuIHRv
IGVuYWJsZSBhbGwgd2FybmluZ3MsIHJlbW92ZSB0aGlzIGRlZmluZS4KLSNkZWZpbmUgQU5HTEVf
U1VQUFJFU1NfRDNEMTFfSEFaQVJEX1dBUk5JTkdTIDEKLSNlbmRpZgotCi1uYW1lc3BhY2UgcngK
LXsKLXN0YXRpYyBjb25zdCBEWEdJX0ZPUk1BVCBSZW5kZXJUYXJnZXRGb3JtYXRzW10gPQotICAg
IHsKLSAgICAgICAgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk0sCi0gICAgICAgIERYR0lfRk9S
TUFUX1I4RzhCOEE4X1VOT1JNCi0gICAgfTsKLQotc3RhdGljIGNvbnN0IERYR0lfRk9STUFUIERl
cHRoU3RlbmNpbEZvcm1hdHNbXSA9Ci0gICAgewotICAgICAgICBEWEdJX0ZPUk1BVF9VTktOT1dO
LAotICAgICAgICBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVCwKLSAgICAgICAgRFhHSV9G
T1JNQVRfRDE2X1VOT1JNCi0gICAgfTsKLQotZW51bQotewotICAgIE1BWF9URVhUVVJFX0lNQUdF
X1VOSVRTX1ZURl9TTTQgPSAxNgotfTsKLQotUmVuZGVyZXIxMTo6UmVuZGVyZXIxMShlZ2w6OkRp
c3BsYXkgKmRpc3BsYXksIEhEQyBoRGMpIDogUmVuZGVyZXIoZGlzcGxheSksIG1EYyhoRGMpCi17
Ci0gICAgbVZlcnRleERhdGFNYW5hZ2VyID0gTlVMTDsKLSAgICBtSW5kZXhEYXRhTWFuYWdlciA9
IE5VTEw7Ci0KLSAgICBtTGluZUxvb3BJQiA9IE5VTEw7Ci0gICAgbVRyaWFuZ2xlRmFuSUIgPSBO
VUxMOwotCi0gICAgbUNvcHlSZXNvdXJjZXNJbml0aWFsaXplZCA9IGZhbHNlOwotICAgIG1Db3B5
VkIgPSBOVUxMOwotICAgIG1Db3B5U2FtcGxlciA9IE5VTEw7Ci0gICAgbUNvcHlJTCA9IE5VTEw7
Ci0gICAgbUNvcHlWUyA9IE5VTEw7Ci0gICAgbUNvcHlSR0JBUFMgPSBOVUxMOwotICAgIG1Db3B5
UkdCUFMgPSBOVUxMOwotICAgIG1Db3B5THVtUFMgPSBOVUxMOwotICAgIG1Db3B5THVtQWxwaGFQ
UyA9IE5VTEw7Ci0KLSAgICBtQ2xlYXJSZXNvdXJjZXNJbml0aWFsaXplZCA9IGZhbHNlOwotICAg
IG1DbGVhclZCID0gTlVMTDsKLSAgICBtQ2xlYXJJTCA9IE5VTEw7Ci0gICAgbUNsZWFyVlMgPSBO
VUxMOwotICAgIG1DbGVhclNpbmdsZVBTID0gTlVMTDsKLSAgICBtQ2xlYXJNdWx0aXBsZVBTID0g
TlVMTDsKLSAgICBtQ2xlYXJTY2lzc29yUlMgPSBOVUxMOwotICAgIG1DbGVhck5vU2Npc3NvclJT
ID0gTlVMTDsKLQotICAgIG1TeW5jUXVlcnkgPSBOVUxMOwotCi0gICAgbUQzZDExTW9kdWxlID0g
TlVMTDsKLSAgICBtRHhnaU1vZHVsZSA9IE5VTEw7Ci0KLSAgICBtRGV2aWNlTG9zdCA9IGZhbHNl
OwotCi0gICAgbU1heFN1cHBvcnRlZFNhbXBsZXMgPSAwOwotCi0gICAgbURldmljZSA9IE5VTEw7
Ci0gICAgbURldmljZUNvbnRleHQgPSBOVUxMOwotICAgIG1EeGdpQWRhcHRlciA9IE5VTEw7Ci0g
ICAgbUR4Z2lGYWN0b3J5ID0gTlVMTDsKLQotICAgIG1Ecml2ZXJDb25zdGFudEJ1ZmZlclZTID0g
TlVMTDsKLSAgICBtRHJpdmVyQ29uc3RhbnRCdWZmZXJQUyA9IE5VTEw7Ci0KLSAgICBtQkdSQVRl
eHR1cmVTdXBwb3J0ID0gZmFsc2U7Ci0KLSAgICBtSXNHZW9tZXRyeVNoYWRlckFjdGl2ZSA9IGZh
bHNlOwotfQotCi1SZW5kZXJlcjExOjp+UmVuZGVyZXIxMSgpCi17Ci0gICAgcmVsZWFzZSgpOwot
fQotCi1SZW5kZXJlcjExICpSZW5kZXJlcjExOjptYWtlUmVuZGVyZXIxMShSZW5kZXJlciAqcmVu
ZGVyZXIpCi17Ci0gICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUocng6OlJlbmRlcmVyMTEqLCBy
ZW5kZXJlcikpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxyeDo6UmVuZGVyZXIxMSo+KHJlbmRl
cmVyKTsKLX0KLQotI2lmbmRlZiBfX2QzZDExXzFfaF9fCi0jZGVmaW5lIEQzRDExX01FU1NBR0Vf
SURfREVWSUNFX0RSQVdfUkVOREVSVEFSR0VUVklFV19OT1RfU0VUICgoRDNEMTFfTUVTU0FHRV9J
RCkzMTQ2MDgxKQotI2VuZGlmCi0KLUVHTGludCBSZW5kZXJlcjExOjppbml0aWFsaXplKCkKLXsK
LSAgICBpZiAoIWluaXRpYWxpemVDb21waWxlcigpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEVH
TF9OT1RfSU5JVElBTElaRUQ7Ci0gICAgfQotCi0gICAgbUR4Z2lNb2R1bGUgPSBMb2FkTGlicmFy
eShURVhUKCJkeGdpLmRsbCIpKTsKLSAgICBtRDNkMTFNb2R1bGUgPSBMb2FkTGlicmFyeShURVhU
KCJkM2QxMS5kbGwiKSk7Ci0KLSAgICBpZiAobUQzZDExTW9kdWxlID09IE5VTEwgfHwgbUR4Z2lN
b2R1bGUgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIEVSUigiQ291bGQgbm90IGxvYWQgRDNEMTEg
b3IgRFhHSSBsaWJyYXJ5IC0gYWJvcnRpbmchXG4iKTsKLSAgICAgICAgcmV0dXJuIEVHTF9OT1Rf
SU5JVElBTElaRUQ7Ci0gICAgfQotCi0gICAgLy8gY3JlYXRlIHRoZSBEM0QxMSBkZXZpY2UKLSAg
ICBBU1NFUlQobURldmljZSA9PSBOVUxMKTsKLSAgICBQRk5fRDNEMTFfQ1JFQVRFX0RFVklDRSBE
M0QxMUNyZWF0ZURldmljZSA9IChQRk5fRDNEMTFfQ1JFQVRFX0RFVklDRSlHZXRQcm9jQWRkcmVz
cyhtRDNkMTFNb2R1bGUsICJEM0QxMUNyZWF0ZURldmljZSIpOwotCi0gICAgaWYgKEQzRDExQ3Jl
YXRlRGV2aWNlID09IE5VTEwpCi0gICAgewotICAgICAgICBFUlIoIkNvdWxkIG5vdCByZXRyaWV2
ZSBEM0QxMUNyZWF0ZURldmljZSBhZGRyZXNzIC0gYWJvcnRpbmchXG4iKTsKLSAgICAgICAgcmV0
dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7Ci0gICAgfQotCi0gICAgRDNEX0ZFQVRVUkVfTEVWRUwg
ZmVhdHVyZUxldmVsc1tdID0KLSAgICB7Ci0gICAgICAgIEQzRF9GRUFUVVJFX0xFVkVMXzExXzAs
Ci0gICAgICAgIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzEsCi0gICAgICAgIEQzRF9GRUFUVVJFX0xF
VkVMXzEwXzAsCi0gICAgfTsKLQotICAgIEhSRVNVTFQgcmVzdWx0ID0gU19PSzsKLQotI2lmZGVm
IF9ERUJVRwotICAgIHJlc3VsdCA9IEQzRDExQ3JlYXRlRGV2aWNlKE5VTEwsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRDNEX0RSSVZFUl9UWVBFX0hBUkRXQVJFLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRDNEMTFfQ1JFQVRFX0RFVklDRV9ERUJVRywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmZWF0dXJlTGV2ZWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5
U2l6ZShmZWF0dXJlTGV2ZWxzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0Qx
MV9TREtfVkVSU0lPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbURldmljZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbUZlYXR1cmVMZXZlbCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmbURldmljZUNvbnRleHQpOwotCi0gICAgaWYgKCFtRGV2
aWNlIHx8IEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgY3JlYXRp
bmcgRGVidWcgRDNEMTEgZGV2aWNlIC0gZmFsbGluZyBiYWNrIHRvIHJlbGVhc2UgcnVudGltZS5c
biIpOwotICAgIH0KLQotICAgIGlmICghbURldmljZSB8fCBGQUlMRUQocmVzdWx0KSkKLSNlbmRp
ZgotICAgIHsKLSAgICAgICAgcmVzdWx0ID0gRDNEMTFDcmVhdGVEZXZpY2UoTlVMTCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEX0RSSVZFUl9UWVBFX0hBUkRXQVJFLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmZWF0dXJlTGV2ZWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJh
eVNpemUoZmVhdHVyZUxldmVscyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEQzRDExX1NES19WRVJTSU9OLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
bURldmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1GZWF0dXJlTGV2
ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtRGV2aWNlQ29udGV4dCk7
Ci0KLSAgICAgICAgaWYgKCFtRGV2aWNlIHx8IEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgRDNEMTEgZGV2aWNlIC0gYWJvcnRpbmch
XG4iKTsKLSAgICAgICAgICAgIHJldHVybiBFR0xfTk9UX0lOSVRJQUxJWkVEOyAgIC8vIENsZWFu
dXAgZG9uZSBieSBkZXN0cnVjdG9yIHRocm91Z2ggZ2xEZXN0cm95UmVuZGVyZXIKLSAgICAgICAg
fQotICAgIH0KLQotICAgIElEWEdJRGV2aWNlICpkeGdpRGV2aWNlID0gTlVMTDsKLSAgICByZXN1
bHQgPSBtRGV2aWNlLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRFhHSURldmljZSksICh2b2lk
KiopJmR4Z2lEZXZpY2UpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAg
ICAgRVJSKCJDb3VsZCBub3QgcXVlcnkgRFhHSSBkZXZpY2UgLSBhYm9ydGluZyFcbiIpOwotICAg
ICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsKLSAgICB9Ci0KLSAgICByZXN1bHQgPSBk
eGdpRGV2aWNlLT5HZXRQYXJlbnQoX191dWlkb2YoSURYR0lBZGFwdGVyKSwgKHZvaWQqKikmbUR4
Z2lBZGFwdGVyKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEVS
UigiQ291bGQgbm90IHJldHJpZXZlIERYR0kgYWRhcHRlciAtIGFib3J0aW5nIVxuIik7Ci0gICAg
ICAgIHJldHVybiBFR0xfTk9UX0lOSVRJQUxJWkVEOwotICAgIH0KLQotICAgIGR4Z2lEZXZpY2Ut
PlJlbGVhc2UoKTsKLQotICAgIG1EeGdpQWRhcHRlci0+R2V0RGVzYygmbUFkYXB0ZXJEZXNjcmlw
dGlvbik7Ci0gICAgbWVtc2V0KG1EZXNjcmlwdGlvbiwgMCwgc2l6ZW9mKG1EZXNjcmlwdGlvbikp
OwotICAgIHdjc3RvbWJzKG1EZXNjcmlwdGlvbiwgbUFkYXB0ZXJEZXNjcmlwdGlvbi5EZXNjcmlw
dGlvbiwgc2l6ZW9mKG1EZXNjcmlwdGlvbikgLSAxKTsKLQotICAgIHJlc3VsdCA9IG1EeGdpQWRh
cHRlci0+R2V0UGFyZW50KF9fdXVpZG9mKElEWEdJRmFjdG9yeSksICh2b2lkKiopJm1EeGdpRmFj
dG9yeSk7Ci0KLSAgICBpZiAoIW1EeGdpRmFjdG9yeSB8fCBGQUlMRUQocmVzdWx0KSkKLSAgICB7
Ci0gICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBEWEdJIGZhY3RvcnkgLSBhYm9ydGluZyFc
biIpOwotICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsKLSAgICB9Ci0KLSAgICAv
LyBEaXNhYmxlIHNvbWUgc3B1cmlvdXMgRDNEMTEgZGVidWcgd2FybmluZ3MgdG8gcHJldmVudCB0
aGVtIGZyb20gZmxvb2RpbmcgdGhlIG91dHB1dCBsb2cKLSNpZiBkZWZpbmVkKEFOR0xFX1NVUFBS
RVNTX0QzRDExX0hBWkFSRF9XQVJOSU5HUykgJiYgZGVmaW5lZChfREVCVUcpCi0gICAgSUQzRDEx
SW5mb1F1ZXVlICppbmZvUXVldWU7Ci0gICAgcmVzdWx0ID0gbURldmljZS0+UXVlcnlJbnRlcmZh
Y2UoX191dWlkb2YoSUQzRDExSW5mb1F1ZXVlKSwgICh2b2lkICoqKSZpbmZvUXVldWUpOwotCi0g
ICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgRDNEMTFfTUVTU0FHRV9J
RCBoaWRlTWVzc2FnZXNbXSA9Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEQzRDExX01FU1NBR0Vf
SURfREVWSUNFX0RSQVdfUkVOREVSVEFSR0VUVklFV19OT1RfU0VUCi0gICAgICAgIH07Ci0KLSAg
ICAgICAgRDNEMTFfSU5GT19RVUVVRV9GSUxURVIgZmlsdGVyID0gezB9OwotICAgICAgICBmaWx0
ZXIuRGVueUxpc3QuTnVtSURzID0gQXJyYXlTaXplKGhpZGVNZXNzYWdlcyk7Ci0gICAgICAgIGZp
bHRlci5EZW55TGlzdC5wSURMaXN0ID0gaGlkZU1lc3NhZ2VzOwotCi0gICAgICAgIGluZm9RdWV1
ZS0+QWRkU3RvcmFnZUZpbHRlckVudHJpZXMoJmZpbHRlcik7Ci0KLSAgICAgICAgaW5mb1F1ZXVl
LT5SZWxlYXNlKCk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICB1bnNpZ25lZCBpbnQgbWF4U3VwcG9y
dGVkU2FtcGxlcyA9IDA7Ci0gICAgdW5zaWduZWQgaW50IHJ0Rm9ybWF0Q291bnQgPSBBcnJheVNp
emUoUmVuZGVyVGFyZ2V0Rm9ybWF0cyk7Ci0gICAgdW5zaWduZWQgaW50IGRzRm9ybWF0Q291bnQg
PSBBcnJheVNpemUoRGVwdGhTdGVuY2lsRm9ybWF0cyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBydEZvcm1hdENvdW50ICsgZHNGb3JtYXRDb3VudDsgKytpKQotICAgIHsKLSAg
ICAgICAgRFhHSV9GT1JNQVQgZm9ybWF0ID0gKGkgPCBydEZvcm1hdENvdW50KSA/IFJlbmRlclRh
cmdldEZvcm1hdHNbaV0gOiBEZXB0aFN0ZW5jaWxGb3JtYXRzW2kgLSBydEZvcm1hdENvdW50XTsK
LSAgICAgICAgaWYgKGZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBVSU5UIGZvcm1hdFN1cHBvcnQ7Ci0gICAgICAgICAgICByZXN1bHQgPSBtRGV2
aWNlLT5DaGVja0Zvcm1hdFN1cHBvcnQoZm9ybWF0LCAmZm9ybWF0U3VwcG9ydCk7Ci0gICAgICAg
ICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkgJiYgKGZvcm1hdFN1cHBvcnQgJiBEM0QxMV9GT1JN
QVRfU1VQUE9SVF9NVUxUSVNBTVBMRV9SRU5ERVJUQVJHRVQpKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIE11bHRpc2FtcGxlU3VwcG9ydEluZm8gc3VwcG9ydEluZm87Ci0KLSAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMTsgaiA8PSBEM0QxMV9NQVhfTVVMVElT
QU1QTEVfU0FNUExFX0NPVU5UOyBqKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DaGVja011bHRpc2FtcGxlUXVhbGl0eUxldmVscyhm
b3JtYXQsIGosICZzdXBwb3J0SW5mby5xdWFsaXR5TGV2ZWxzW2ogLSAxXSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSAmJiBzdXBwb3J0SW5mby5xdWFsaXR5TGV2
ZWxzW2ogLSAxXSA+IDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1heFN1cHBvcnRlZFNhbXBsZXMgPSBzdGQ6Om1heChqLCBtYXhTdXBwb3J0ZWRTYW1w
bGVzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRJbmZv
LnF1YWxpdHlMZXZlbHNbaiAtIDFdID0gMDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG1NdWx0aXNhbXBsZVN1cHBvcnRNYXAuaW5z
ZXJ0KHN0ZDo6bWFrZV9wYWlyKGZvcm1hdCwgc3VwcG9ydEluZm8pKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLSAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9IG1heFN1cHBvcnRl
ZFNhbXBsZXM7Ci0KLSAgICBpbml0aWFsaXplRGV2aWNlKCk7Ci0KLSAgICAvLyBCR1JBIHRleHR1
cmUgc3VwcG9ydCBpcyBvcHRpb25hbCBpbiBmZWF0dXJlIGxldmVscyAxMCBhbmQgMTBfMQotICAg
IFVJTlQgZm9ybWF0U3VwcG9ydDsKLSAgICByZXN1bHQgPSBtRGV2aWNlLT5DaGVja0Zvcm1hdFN1
cHBvcnQoRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk0sICZmb3JtYXRTdXBwb3J0KTsKLSAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIoIkVycm9yIGNoZWNraW5nIEJH
UkEgZm9ybWF0IHN1cHBvcnQ6IDB4JTA4WCIsIHJlc3VsdCk7Ci0gICAgfQotICAgIGVsc2UKLSAg
ICB7Ci0gICAgICAgIGNvbnN0IGludCBmbGFncyA9IChEM0QxMV9GT1JNQVRfU1VQUE9SVF9URVhU
VVJFMkQgfCBEM0QxMV9GT1JNQVRfU1VQUE9SVF9SRU5ERVJfVEFSR0VUKTsKLSAgICAgICAgbUJH
UkFUZXh0dXJlU3VwcG9ydCA9IChmb3JtYXRTdXBwb3J0ICYgZmxhZ3MpID09IGZsYWdzOwotICAg
IH0KLQotICAgIC8vIENoZWNrIGZsb2F0aW5nIHBvaW50IHRleHR1cmUgc3VwcG9ydAotICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcmVxdWlyZWRUZXh0dXJlRmxhZ3MgPSBEM0QxMV9GT1JN
QVRfU1VQUE9SVF9URVhUVVJFMkQgfCBEM0QxMV9GT1JNQVRfU1VQUE9SVF9URVhUVVJFQ1VCRTsK
LSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHJlcXVpcmVkUmVuZGVyYWJsZUZsYWdzID0g
RDNEMTFfRk9STUFUX1NVUFBPUlRfUkVOREVSX1RBUkdFVDsKLSAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgaW50IHJlcXVpcmVkRmlsdGVyRmxhZ3MgPSBEM0QxMV9GT1JNQVRfU1VQUE9SVF9TSEFE
RVJfU0FNUExFOwotCi0gICAgRFhHSV9GT1JNQVQgZmxvYXQxNkZvcm1hdHNbXSA9Ci0gICAgewot
ICAgICAgICBEWEdJX0ZPUk1BVF9SMTZfRkxPQVQsCi0gICAgICAgIERYR0lfRk9STUFUX1IxNkcx
Nl9GTE9BVCwKLSAgICAgICAgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X0ZMT0FULAotICAgIH07
Ci0KLSAgICBEWEdJX0ZPUk1BVCBmbG9hdDMyRm9ybWF0c1tdID0KLSAgICB7Ci0gICAgICAgIERY
R0lfRk9STUFUX1IzMl9GTE9BVCwKLSAgICAgICAgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULAot
ICAgICAgICBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsCi0gICAgfTsKLQotICAgIG1G
bG9hdDE2VGV4dHVyZVN1cHBvcnQgPSB0cnVlOwotICAgIG1GbG9hdDE2RmlsdGVyU3VwcG9ydCA9
IHRydWU7Ci0gICAgbUZsb2F0MTZSZW5kZXJTdXBwb3J0ID0gdHJ1ZTsKLSAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShmbG9hdDE2Rm9ybWF0cyk7IGkrKykKLSAgICB7
Ci0gICAgICAgIGlmIChTVUNDRUVERUQobURldmljZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KGZsb2F0
MTZGb3JtYXRzW2ldLCAmZm9ybWF0U3VwcG9ydCkpKQotICAgICAgICB7Ci0gICAgICAgICAgICBt
RmxvYXQxNlRleHR1cmVTdXBwb3J0ID0gbUZsb2F0MTZUZXh0dXJlU3VwcG9ydCAmJiAoZm9ybWF0
U3VwcG9ydCAmIHJlcXVpcmVkVGV4dHVyZUZsYWdzKSA9PSByZXF1aXJlZFRleHR1cmVGbGFnczsK
LSAgICAgICAgICAgIG1GbG9hdDE2RmlsdGVyU3VwcG9ydCA9IG1GbG9hdDE2RmlsdGVyU3VwcG9y
dCAmJiAoZm9ybWF0U3VwcG9ydCAmIHJlcXVpcmVkRmlsdGVyRmxhZ3MpID09IHJlcXVpcmVkRmls
dGVyRmxhZ3M7Ci0gICAgICAgICAgICBtRmxvYXQxNlJlbmRlclN1cHBvcnQgPSBtRmxvYXQxNlJl
bmRlclN1cHBvcnQgJiYgKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZFJlbmRlcmFibGVGbGFncykg
PT0gcmVxdWlyZWRSZW5kZXJhYmxlRmxhZ3M7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtRmxvYXQxNlRleHR1cmVTdXBwb3J0ID0gZmFsc2U7Ci0gICAg
ICAgICAgICBtRmxvYXQxNlJlbmRlclN1cHBvcnQgPSBmYWxzZTsKLSAgICAgICAgICAgIG1GbG9h
dDE2RmlsdGVyU3VwcG9ydCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbUZsb2F0
MzJUZXh0dXJlU3VwcG9ydCA9IHRydWU7Ci0gICAgbUZsb2F0MzJGaWx0ZXJTdXBwb3J0ID0gdHJ1
ZTsKLSAgICBtRmxvYXQzMlJlbmRlclN1cHBvcnQgPSB0cnVlOwotICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgQXJyYXlTaXplKGZsb2F0MzJGb3JtYXRzKTsgaSsrKQotICAgIHsKLSAg
ICAgICAgaWYgKFNVQ0NFRURFRChtRGV2aWNlLT5DaGVja0Zvcm1hdFN1cHBvcnQoZmxvYXQzMkZv
cm1hdHNbaV0sICZmb3JtYXRTdXBwb3J0KSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1GbG9h
dDMyVGV4dHVyZVN1cHBvcnQgPSBtRmxvYXQzMlRleHR1cmVTdXBwb3J0ICYmIChmb3JtYXRTdXBw
b3J0ICYgcmVxdWlyZWRUZXh0dXJlRmxhZ3MpID09IHJlcXVpcmVkVGV4dHVyZUZsYWdzOwotICAg
ICAgICAgICAgbUZsb2F0MzJGaWx0ZXJTdXBwb3J0ID0gbUZsb2F0MzJGaWx0ZXJTdXBwb3J0ICYm
IChmb3JtYXRTdXBwb3J0ICYgcmVxdWlyZWRGaWx0ZXJGbGFncykgPT0gcmVxdWlyZWRGaWx0ZXJG
bGFnczsKLSAgICAgICAgICAgIG1GbG9hdDMyUmVuZGVyU3VwcG9ydCA9IG1GbG9hdDMyUmVuZGVy
U3VwcG9ydCAmJiAoZm9ybWF0U3VwcG9ydCAmIHJlcXVpcmVkUmVuZGVyYWJsZUZsYWdzKSA9PSBy
ZXF1aXJlZFJlbmRlcmFibGVGbGFnczsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQgPSBmYWxzZTsKLSAgICAgICAg
ICAgIG1GbG9hdDMyRmlsdGVyU3VwcG9ydCA9IGZhbHNlOwotICAgICAgICAgICAgbUZsb2F0MzJS
ZW5kZXJTdXBwb3J0ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBDaGVjayBj
b21wcmVzc2VkIHRleHR1cmUgc3VwcG9ydAotICAgIGNvbnN0IHVuc2lnbmVkIGludCByZXF1aXJl
ZENvbXByZXNzZWRUZXh0dXJlRmxhZ3MgPSBEM0QxMV9GT1JNQVRfU1VQUE9SVF9URVhUVVJFMkQ7
Ci0KLSAgICBpZiAoU1VDQ0VFREVEKG1EZXZpY2UtPkNoZWNrRm9ybWF0U3VwcG9ydChEWEdJX0ZP
Uk1BVF9CQzFfVU5PUk0sICZmb3JtYXRTdXBwb3J0KSkpCi0gICAgewotICAgICAgICBtRFhUMVRl
eHR1cmVTdXBwb3J0ID0gKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZENvbXByZXNzZWRUZXh0dXJl
RmxhZ3MpID09IHJlcXVpcmVkQ29tcHJlc3NlZFRleHR1cmVGbGFnczsKLSAgICB9Ci0gICAgZWxz
ZQotICAgIHsKLSAgICAgICAgbURYVDFUZXh0dXJlU3VwcG9ydCA9IGZhbHNlOwotICAgIH0KLQot
ICAgIGlmIChTVUNDRUVERUQobURldmljZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KERYR0lfRk9STUFU
X0JDM19VTk9STSwgJmZvcm1hdFN1cHBvcnQpKSkKLSAgICB7Ci0gICAgICAgIG1EWFQzVGV4dHVy
ZVN1cHBvcnQgPSAoZm9ybWF0U3VwcG9ydCAmIHJlcXVpcmVkQ29tcHJlc3NlZFRleHR1cmVGbGFn
cykgPT0gcmVxdWlyZWRDb21wcmVzc2VkVGV4dHVyZUZsYWdzOwotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgICBtRFhUM1RleHR1cmVTdXBwb3J0ID0gZmFsc2U7Ci0gICAgfQotCi0gICAg
aWYgKFNVQ0NFRURFRChtRGV2aWNlLT5DaGVja0Zvcm1hdFN1cHBvcnQoRFhHSV9GT1JNQVRfQkM1
X1VOT1JNLCAmZm9ybWF0U3VwcG9ydCkpKQotICAgIHsKLSAgICAgICAgbURYVDVUZXh0dXJlU3Vw
cG9ydCA9IChmb3JtYXRTdXBwb3J0ICYgcmVxdWlyZWRDb21wcmVzc2VkVGV4dHVyZUZsYWdzKSA9
PSByZXF1aXJlZENvbXByZXNzZWRUZXh0dXJlRmxhZ3M7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgIG1EWFQ1VGV4dHVyZVN1cHBvcnQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBD
aGVjayBkZXB0aCB0ZXh0dXJlIHN1cHBvcnQKLSAgICBEWEdJX0ZPUk1BVCBkZXB0aFRleHR1cmVG
b3JtYXRzW10gPQotICAgIHsKLSAgICAgICAgRFhHSV9GT1JNQVRfRDE2X1VOT1JNLAotICAgICAg
ICBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVCwKLSAgICB9OwotCi0gICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGludCByZXF1aXJlZERlcHRoVGV4dHVyZUZsYWdzID0gRDNEMTFfRk9STUFU
X1NVUFBPUlRfREVQVEhfU1RFTkNJTCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEMTFfRk9STUFUX1NVUFBPUlRfVEVYVFVSRTJE
OwotCi0gICAgbURlcHRoVGV4dHVyZVN1cHBvcnQgPSB0cnVlOwotICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgQXJyYXlTaXplKGRlcHRoVGV4dHVyZUZvcm1hdHMpOyBpKyspCi0gICAg
ewotICAgICAgICBpZiAoU1VDQ0VFREVEKG1EZXZpY2UtPkNoZWNrRm9ybWF0U3VwcG9ydChkZXB0
aFRleHR1cmVGb3JtYXRzW2ldLCAmZm9ybWF0U3VwcG9ydCkpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBtRGVwdGhUZXh0dXJlU3VwcG9ydCA9IG1EZXB0aFRleHR1cmVTdXBwb3J0ICYmICgoZm9y
bWF0U3VwcG9ydCAmIHJlcXVpcmVkRGVwdGhUZXh0dXJlRmxhZ3MpID09IHJlcXVpcmVkRGVwdGhU
ZXh0dXJlRmxhZ3MpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAg
ICAgICAgbURlcHRoVGV4dHVyZVN1cHBvcnQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHJldHVybiBFR0xfU1VDQ0VTUzsKLX0KLQotLy8gZG8gYW55IG9uZS10aW1lIGRldmljZSBp
bml0aWFsaXphdGlvbgotLy8gTk9URTogdGhpcyBpcyBhbHNvIG5lZWRlZCBhZnRlciBhIGRldmlj
ZSBsb3N0L3Jlc2V0Ci0vLyB0byByZXNldCB0aGUgc2NlbmUgc3RhdHVzIGFuZCBlbnN1cmUgdGhl
IGRlZmF1bHQgc3RhdGVzIGFyZSByZXNldC4KLXZvaWQgUmVuZGVyZXIxMTo6aW5pdGlhbGl6ZURl
dmljZSgpCi17Ci0gICAgbVN0YXRlQ2FjaGUuaW5pdGlhbGl6ZShtRGV2aWNlKTsKLSAgICBtSW5w
dXRMYXlvdXRDYWNoZS5pbml0aWFsaXplKG1EZXZpY2UsIG1EZXZpY2VDb250ZXh0KTsKLQotICAg
IEFTU0VSVCghbVZlcnRleERhdGFNYW5hZ2VyICYmICFtSW5kZXhEYXRhTWFuYWdlcik7Ci0gICAg
bVZlcnRleERhdGFNYW5hZ2VyID0gbmV3IFZlcnRleERhdGFNYW5hZ2VyKHRoaXMpOwotICAgIG1J
bmRleERhdGFNYW5hZ2VyID0gbmV3IEluZGV4RGF0YU1hbmFnZXIodGhpcyk7Ci0KLSAgICBtYXJr
QWxsU3RhdGVEaXJ0eSgpOwotfQotCi1pbnQgUmVuZGVyZXIxMTo6Z2VuZXJhdGVDb25maWdzKENv
bmZpZ0Rlc2MgKipjb25maWdEZXNjTGlzdCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgbnVtUmVuZGVy
Rm9ybWF0cyA9IEFycmF5U2l6ZShSZW5kZXJUYXJnZXRGb3JtYXRzKTsKLSAgICB1bnNpZ25lZCBp
bnQgbnVtRGVwdGhGb3JtYXRzID0gQXJyYXlTaXplKERlcHRoU3RlbmNpbEZvcm1hdHMpOwotICAg
ICgqY29uZmlnRGVzY0xpc3QpID0gbmV3IENvbmZpZ0Rlc2NbbnVtUmVuZGVyRm9ybWF0cyAqIG51
bURlcHRoRm9ybWF0c107Ci0gICAgaW50IG51bUNvbmZpZ3MgPSAwOwotICAgIAotICAgIGZvciAo
dW5zaWduZWQgaW50IGZvcm1hdEluZGV4ID0gMDsgZm9ybWF0SW5kZXggPCBudW1SZW5kZXJGb3Jt
YXRzOyBmb3JtYXRJbmRleCsrKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZGVw
dGhTdGVuY2lsSW5kZXggPSAwOyBkZXB0aFN0ZW5jaWxJbmRleCA8IG51bURlcHRoRm9ybWF0czsg
ZGVwdGhTdGVuY2lsSW5kZXgrKykKLSAgICAgICAgewotICAgICAgICAgICAgRFhHSV9GT1JNQVQg
cmVuZGVyVGFyZ2V0Rm9ybWF0ID0gUmVuZGVyVGFyZ2V0Rm9ybWF0c1tmb3JtYXRJbmRleF07Ci0K
LSAgICAgICAgICAgIFVJTlQgZm9ybWF0U3VwcG9ydCA9IDA7Ci0gICAgICAgICAgICBIUkVTVUxU
IHJlc3VsdCA9IG1EZXZpY2UtPkNoZWNrRm9ybWF0U3VwcG9ydChyZW5kZXJUYXJnZXRGb3JtYXQs
ICZmb3JtYXRTdXBwb3J0KTsKLQotICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpICYm
IChmb3JtYXRTdXBwb3J0ICYgRDNEMTFfRk9STUFUX1NVUFBPUlRfUkVOREVSX1RBUkdFVCkpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRFhHSV9GT1JNQVQgZGVwdGhTdGVuY2lsRm9y
bWF0ID0gRGVwdGhTdGVuY2lsRm9ybWF0c1tkZXB0aFN0ZW5jaWxJbmRleF07Ci0KLSAgICAgICAg
ICAgICAgICBib29sIGRlcHRoU3RlbmNpbEZvcm1hdE9LID0gdHJ1ZTsKLQotICAgICAgICAgICAg
ICAgIGlmIChkZXB0aFN0ZW5jaWxGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFVJTlQgZm9ybWF0U3VwcG9ydCA9IDA7
Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNoZWNrRm9ybWF0U3VwcG9y
dChkZXB0aFN0ZW5jaWxGb3JtYXQsICZmb3JtYXRTdXBwb3J0KTsKLSAgICAgICAgICAgICAgICAg
ICAgZGVwdGhTdGVuY2lsRm9ybWF0T0sgPSBTVUNDRUVERUQocmVzdWx0KSAmJiAoZm9ybWF0U3Vw
cG9ydCAmIEQzRDExX0ZPUk1BVF9TVVBQT1JUX0RFUFRIX1NURU5DSUwpOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChkZXB0aFN0ZW5jaWxGb3JtYXRPSykKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIENvbmZpZ0Rlc2MgbmV3Q29uZmlnOwot
ICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcucmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZDNkMTFf
Z2w6OkNvbnZlcnRCYWNrQnVmZmVyRm9ybWF0KHJlbmRlclRhcmdldEZvcm1hdCk7Ci0gICAgICAg
ICAgICAgICAgICAgIG5ld0NvbmZpZy5kZXB0aFN0ZW5jaWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29u
dmVydERlcHRoU3RlbmNpbEZvcm1hdChkZXB0aFN0ZW5jaWxGb3JtYXQpOwotICAgICAgICAgICAg
ICAgICAgICBuZXdDb25maWcubXVsdGlTYW1wbGUgPSAwOyAgICAgLy8gRklYTUU6IGVudW1lcmF0
ZSBtdWx0aS1zYW1wbGluZwotICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcuZmFzdENvbmZp
ZyA9IHRydWU7ICAgLy8gQXNzdW1lIGFsbCBEWDExIGZvcm1hdCBjb252ZXJzaW9ucyB0byBiZSBm
YXN0Ci0KLSAgICAgICAgICAgICAgICAgICAgKCpjb25maWdEZXNjTGlzdClbbnVtQ29uZmlncysr
XSA9IG5ld0NvbmZpZzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbnVtQ29uZmlnczsKLX0KLQotdm9pZCBSZW5kZXJlcjEx
OjpkZWxldGVDb25maWdzKENvbmZpZ0Rlc2MgKmNvbmZpZ0Rlc2NMaXN0KQotewotICAgIGRlbGV0
ZSBbXSAoY29uZmlnRGVzY0xpc3QpOwotfQotCi12b2lkIFJlbmRlcmVyMTE6OnN5bmMoYm9vbCBi
bG9jaykKLXsKLSAgICBpZiAoYmxvY2spCi0gICAgewotICAgICAgICBIUkVTVUxUIHJlc3VsdDsK
LQotICAgICAgICBpZiAoIW1TeW5jUXVlcnkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEQzRDEx
X1FVRVJZX0RFU0MgcXVlcnlEZXNjOwotICAgICAgICAgICAgcXVlcnlEZXNjLlF1ZXJ5ID0gRDNE
MTFfUVVFUllfRVZFTlQ7Ci0gICAgICAgICAgICBxdWVyeURlc2MuTWlzY0ZsYWdzID0gMDsKLQot
ICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUXVlcnkoJnF1ZXJ5RGVzYywgJm1T
eW5jUXVlcnkpOwotICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5FbmQobVN5bmNRdWVyeSk7Ci0gICAgICAg
IG1EZXZpY2VDb250ZXh0LT5GbHVzaCgpOwotCi0gICAgICAgIGRvCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJlc3VsdCA9IG1EZXZpY2VDb250ZXh0LT5HZXREYXRhKG1TeW5jUXVlcnksIE5VTEws
IDAsIEQzRDExX0FTWU5DX0dFVERBVEFfRE9OT1RGTFVTSCk7Ci0KLSAgICAgICAgICAgIC8vIEtl
ZXAgcG9sbGluZywgYnV0IGFsbG93IG90aGVyIHRocmVhZHMgdG8gZG8gc29tZXRoaW5nIHVzZWZ1
bCBmaXJzdAotICAgICAgICAgICAgU2xlZXAoMCk7Ci0KLSAgICAgICAgICAgIGlmICh0ZXN0RGV2
aWNlTG9zdCh0cnVlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgd2hpbGUgKHJlc3VsdCA9PSBTX0ZBTFNF
KTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgbURldmljZUNvbnRleHQtPkZsdXNo
KCk7Ci0gICAgfQotfQotCi1Td2FwQ2hhaW4gKlJlbmRlcmVyMTE6OmNyZWF0ZVN3YXBDaGFpbihI
V05EIHdpbmRvdywgSEFORExFIHNoYXJlSGFuZGxlLCBHTGVudW0gYmFja0J1ZmZlckZvcm1hdCwg
R0xlbnVtIGRlcHRoQnVmZmVyRm9ybWF0KQotewotICAgIHJldHVybiBuZXcgcng6OlN3YXBDaGFp
bjExKHRoaXMsIHdpbmRvdywgc2hhcmVIYW5kbGUsIGJhY2tCdWZmZXJGb3JtYXQsIGRlcHRoQnVm
ZmVyRm9ybWF0KTsKLX0KLQotdm9pZCBSZW5kZXJlcjExOjpzZXRTYW1wbGVyU3RhdGUoZ2w6OlNh
bXBsZXJUeXBlIHR5cGUsIGludCBpbmRleCwgY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmc2FtcGxl
clN0YXRlKQotewotICAgIGlmICh0eXBlID09IGdsOjpTQU1QTEVSX1BJWEVMKQotICAgIHsKLSAg
ICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5J
VFMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiUGl4ZWwgc2hhZGVyIHNhbXBsZXIgaW5k
ZXggJWkgaXMgbm90IHZhbGlkLiIsIGluZGV4KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0ZXNbaW5kZXhdIHx8
IG1lbWNtcCgmc2FtcGxlclN0YXRlLCAmbUN1clBpeGVsU2FtcGxlclN0YXRlc1tpbmRleF0sIHNp
emVvZihnbDo6U2FtcGxlclN0YXRlKSkgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgSUQz
RDExU2FtcGxlclN0YXRlICpkeFNhbXBsZXJTdGF0ZSA9IG1TdGF0ZUNhY2hlLmdldFNhbXBsZXJT
dGF0ZShzYW1wbGVyU3RhdGUpOwotCi0gICAgICAgICAgICBpZiAoIWR4U2FtcGxlclN0YXRlKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigiTlVMTCBzYW1wbGVyIHN0YXRlIHJl
dHVybmVkIGJ5IFJlbmRlclN0YXRlQ2FjaGU6OmdldFNhbXBsZXJTdGF0ZSwgc2V0dGluZyB0aGUg
ZGVmYXVsdCIKLSAgICAgICAgICAgICAgICAgICAgInNhbXBsZXIgc3RhdGUgZm9yIHBpeGVsIHNo
YWRlcnMgYXQgc2xvdCAlaS4iLCBpbmRleCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IG1EZXZpY2VDb250ZXh0LT5QU1NldFNhbXBsZXJzKGluZGV4LCAxLCAmZHhTYW1wbGVyU3RhdGUp
OwotCi0gICAgICAgICAgICBtQ3VyUGl4ZWxTYW1wbGVyU3RhdGVzW2luZGV4XSA9IHNhbXBsZXJT
dGF0ZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1Gb3JjZVNldFBpeGVsU2FtcGxlclN0YXRlc1tp
bmRleF0gPSBmYWxzZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBnbDo6U0FNUExFUl9W
RVJURVgpCi0gICAgewotICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IChpbnQpZ2V0
TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJS
KCJWZXJ0ZXggc2hhZGVyIHNhbXBsZXIgaW5kZXggJWkgaXMgbm90IHZhbGlkLiIsIGluZGV4KTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtRm9yY2VTZXRW
ZXJ0ZXhTYW1wbGVyU3RhdGVzW2luZGV4XSB8fCBtZW1jbXAoJnNhbXBsZXJTdGF0ZSwgJm1DdXJW
ZXJ0ZXhTYW1wbGVyU3RhdGVzW2luZGV4XSwgc2l6ZW9mKGdsOjpTYW1wbGVyU3RhdGUpKSAhPSAw
KQotICAgICAgICB7Ci0gICAgICAgICAgICBJRDNEMTFTYW1wbGVyU3RhdGUgKmR4U2FtcGxlclN0
YXRlID0gbVN0YXRlQ2FjaGUuZ2V0U2FtcGxlclN0YXRlKHNhbXBsZXJTdGF0ZSk7Ci0KLSAgICAg
ICAgICAgIGlmICghZHhTYW1wbGVyU3RhdGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgRVJSKCJOVUxMIHNhbXBsZXIgc3RhdGUgcmV0dXJuZWQgYnkgUmVuZGVyU3RhdGVDYWNoZTo6
Z2V0U2FtcGxlclN0YXRlLCBzZXR0aW5nIHRoZSBkZWZhdWx0IgotICAgICAgICAgICAgICAgICAg
ICAic2FtcGxlciBzdGF0ZSBmb3IgdmVydGV4IHNoYWRlcnMgYXQgc2xvdCAlaS4iLCBpbmRleCk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5WU1NldFNhbXBs
ZXJzKGluZGV4LCAxLCAmZHhTYW1wbGVyU3RhdGUpOwotCi0gICAgICAgICAgICBtQ3VyVmVydGV4
U2FtcGxlclN0YXRlc1tpbmRleF0gPSBzYW1wbGVyU3RhdGU7Ci0gICAgICAgIH0KLQotICAgICAg
ICBtRm9yY2VTZXRWZXJ0ZXhTYW1wbGVyU3RhdGVzW2luZGV4XSA9IGZhbHNlOwotICAgIH0KLSAg
ICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci19Ci0KLXZvaWQgUmVuZGVyZXIxMTo6c2V0VGV4dHVyZShn
bDo6U2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBnbDo6VGV4dHVyZSAqdGV4dHVyZSkKLXsK
LSAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnRleHR1cmVTUlYgPSBOVUxMOwotICAgIHVu
c2lnbmVkIGludCBzZXJpYWwgPSAwOwotICAgIGJvb2wgZm9yY2VTZXRUZXh0dXJlID0gZmFsc2U7
Ci0KLSAgICBpZiAodGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlICp0ZXhTdG9yYWdlID0gdGV4dHVyZS0+Z2V0TmF0aXZlVGV4dHVyZSgpOwotICAgICAgICBp
ZiAodGV4U3RvcmFnZSkKLSAgICAgICAgewotICAgICAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMSAq
c3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMTo6bWFrZVRleHR1cmVTdG9yYWdlMTEodGV4U3Rv
cmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwotICAgICAgICAgICAgdGV4dHVyZVNSViA9IHN0
b3JhZ2UxMS0+Z2V0U1JWKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB3ZSBnZXQgTlVM
TCBiYWNrIGZyb20gZ2V0U1JWIGhlcmUsIHNvbWV0aGluZyB3ZW50IHdyb25nIGluIHRoZSB0ZXh0
dXJlIGNsYXNzIGFuZCB3ZSdyZSB1bmV4cGVjdGVkbHkKLSAgICAgICAgLy8gbWlzc2luZyB0aGUg
c2hhZGVyIHJlc291cmNlIHZpZXcKLSAgICAgICAgQVNTRVJUKHRleHR1cmVTUlYgIT0gTlVMTCk7
Ci0KLSAgICAgICAgc2VyaWFsID0gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpOwotICAgICAg
ICBmb3JjZVNldFRleHR1cmUgPSB0ZXh0dXJlLT5oYXNEaXJ0eUltYWdlcygpOwotICAgIH0KLQot
ICAgIGlmICh0eXBlID09IGdsOjpTQU1QTEVSX1BJWEVMKQotICAgIHsKLSAgICAgICAgaWYgKGlu
ZGV4IDwgMCB8fCBpbmRleCA+PSBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEVSUigiUGl4ZWwgc2hhZGVyIHNhbXBsZXIgaW5kZXggJWkgaXMgbm90
IHZhbGlkLiIsIGluZGV4KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChmb3JjZVNldFRleHR1cmUgfHwgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbaW5kZXhd
ICE9IHNlcmlhbCkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZUNvbnRleHQtPlBTU2V0
U2hhZGVyUmVzb3VyY2VzKGluZGV4LCAxLCAmdGV4dHVyZVNSVik7Ci0gICAgICAgIH0KLQotICAg
ICAgICBtQ3VyUGl4ZWxUZXh0dXJlU2VyaWFsc1tpbmRleF0gPSBzZXJpYWw7Ci0gICAgfQotICAg
IGVsc2UgaWYgKHR5cGUgPT0gZ2w6OlNBTVBMRVJfVkVSVEVYKQotICAgIHsKLSAgICAgICAgaWYg
KGluZGV4IDwgMCB8fCBpbmRleCA+PSAoaW50KWdldE1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRz
KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiVmVydGV4IHNoYWRlciBzYW1wbGVyIGlu
ZGV4ICVpIGlzIG5vdCB2YWxpZC4iLCBpbmRleCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoZm9yY2VTZXRUZXh0dXJlIHx8IG1DdXJWZXJ0ZXhUZXh0dXJl
U2VyaWFsc1tpbmRleF0gIT0gc2VyaWFsKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNl
Q29udGV4dC0+VlNTZXRTaGFkZXJSZXNvdXJjZXMoaW5kZXgsIDEsICZ0ZXh0dXJlU1JWKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1tpbmRleF0gPSBzZXJp
YWw7Ci0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLX0KLQotdm9pZCBSZW5kZXJlcjEx
OjpzZXRSYXN0ZXJpemVyU3RhdGUoY29uc3QgZ2w6OlJhc3Rlcml6ZXJTdGF0ZSAmcmFzdGVyU3Rh
dGUpCi17Ci0gICAgaWYgKG1Gb3JjZVNldFJhc3RlclN0YXRlIHx8IG1lbWNtcCgmcmFzdGVyU3Rh
dGUsICZtQ3VyUmFzdGVyU3RhdGUsIHNpemVvZihnbDo6UmFzdGVyaXplclN0YXRlKSkgIT0gMCkK
LSAgICB7Ci0gICAgICAgIElEM0QxMVJhc3Rlcml6ZXJTdGF0ZSAqZHhSYXN0ZXJTdGF0ZSA9IG1T
dGF0ZUNhY2hlLmdldFJhc3Rlcml6ZXJTdGF0ZShyYXN0ZXJTdGF0ZSwgbVNjaXNzb3JFbmFibGVk
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbUN1ckRlcHRoU2l6ZSk7Ci0gICAgICAgIGlmICghZHhS
YXN0ZXJTdGF0ZSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJOVUxMIHJhc3Rlcml6ZXIg
c3RhdGUgcmV0dXJuZWQgYnkgUmVuZGVyU3RhdGVDYWNoZTo6Z2V0UmFzdGVyaXplclN0YXRlLCBz
ZXR0aW5nIHRoZSBkZWZhdWx0IgotICAgICAgICAgICAgICAgICJyYXN0ZXJpemVyIHN0YXRlLiIp
OwotICAgICAgICB9Ci0KLSAgICAgICAgbURldmljZUNvbnRleHQtPlJTU2V0U3RhdGUoZHhSYXN0
ZXJTdGF0ZSk7Ci0KLSAgICAgICAgbUN1clJhc3RlclN0YXRlID0gcmFzdGVyU3RhdGU7Ci0gICAg
fQotCi0gICAgbUZvcmNlU2V0UmFzdGVyU3RhdGUgPSBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJl
cjExOjpzZXRCbGVuZFN0YXRlKGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRlLCBjb25z
dCBnbDo6Q29sb3IgJmJsZW5kQ29sb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IHNhbXBsZU1hc2spCi17Ci0gICAgaWYgKG1Gb3JjZVNldEJsZW5kU3RhdGUg
fHwKLSAgICAgICAgbWVtY21wKCZibGVuZFN0YXRlLCAmbUN1ckJsZW5kU3RhdGUsIHNpemVvZihn
bDo6QmxlbmRTdGF0ZSkpICE9IDAgfHwKLSAgICAgICAgbWVtY21wKCZibGVuZENvbG9yLCAmbUN1
ckJsZW5kQ29sb3IsIHNpemVvZihnbDo6Q29sb3IpKSAhPSAwIHx8Ci0gICAgICAgIHNhbXBsZU1h
c2sgIT0gbUN1clNhbXBsZU1hc2spCi0gICAgewotICAgICAgICBJRDNEMTFCbGVuZFN0YXRlICpk
eEJsZW5kU3RhdGUgPSBtU3RhdGVDYWNoZS5nZXRCbGVuZFN0YXRlKGJsZW5kU3RhdGUpOwotICAg
ICAgICBpZiAoIWR4QmxlbmRTdGF0ZSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJOVUxM
IGJsZW5kIHN0YXRlIHJldHVybmVkIGJ5IFJlbmRlclN0YXRlQ2FjaGU6OmdldEJsZW5kU3RhdGUs
IHNldHRpbmcgdGhlIGRlZmF1bHQgIgotICAgICAgICAgICAgICAgICJibGVuZCBzdGF0ZS4iKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0IGJsZW5kQ29sb3JzWzRdID0gezAuMGZ9OwotICAg
ICAgICBpZiAoYmxlbmRTdGF0ZS5zb3VyY2VCbGVuZFJHQiAhPSBHTF9DT05TVEFOVF9BTFBIQSAm
JiBibGVuZFN0YXRlLnNvdXJjZUJsZW5kUkdCICE9IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBI
QSAmJgotICAgICAgICAgICAgYmxlbmRTdGF0ZS5kZXN0QmxlbmRSR0IgIT0gR0xfQ09OU1RBTlRf
QUxQSEEgJiYgYmxlbmRTdGF0ZS5kZXN0QmxlbmRSR0IgIT0gR0xfT05FX01JTlVTX0NPTlNUQU5U
X0FMUEhBKQotICAgICAgICB7Ci0gICAgICAgICAgICBibGVuZENvbG9yc1swXSA9IGJsZW5kQ29s
b3IucmVkOwotICAgICAgICAgICAgYmxlbmRDb2xvcnNbMV0gPSBibGVuZENvbG9yLmdyZWVuOwot
ICAgICAgICAgICAgYmxlbmRDb2xvcnNbMl0gPSBibGVuZENvbG9yLmJsdWU7Ci0gICAgICAgICAg
ICBibGVuZENvbG9yc1szXSA9IGJsZW5kQ29sb3IuYWxwaGE7Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBibGVuZENvbG9yc1swXSA9IGJsZW5kQ29sb3Iu
YWxwaGE7Ci0gICAgICAgICAgICBibGVuZENvbG9yc1sxXSA9IGJsZW5kQ29sb3IuYWxwaGE7Ci0g
ICAgICAgICAgICBibGVuZENvbG9yc1syXSA9IGJsZW5kQ29sb3IuYWxwaGE7Ci0gICAgICAgICAg
ICBibGVuZENvbG9yc1szXSA9IGJsZW5kQ29sb3IuYWxwaGE7Ci0gICAgICAgIH0KLQotICAgICAg
ICBtRGV2aWNlQ29udGV4dC0+T01TZXRCbGVuZFN0YXRlKGR4QmxlbmRTdGF0ZSwgYmxlbmRDb2xv
cnMsIHNhbXBsZU1hc2spOwotCi0gICAgICAgIG1DdXJCbGVuZFN0YXRlID0gYmxlbmRTdGF0ZTsK
LSAgICAgICAgbUN1ckJsZW5kQ29sb3IgPSBibGVuZENvbG9yOwotICAgICAgICBtQ3VyU2FtcGxl
TWFzayA9IHNhbXBsZU1hc2s7Ci0gICAgfQotCi0gICAgbUZvcmNlU2V0QmxlbmRTdGF0ZSA9IGZh
bHNlOwotfQotCi12b2lkIFJlbmRlcmVyMTE6OnNldERlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGds
OjpEZXB0aFN0ZW5jaWxTdGF0ZSAmZGVwdGhTdGVuY2lsU3RhdGUsIGludCBzdGVuY2lsUmVmLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RlbmNpbEJhY2tSZWYs
IGJvb2wgZnJvbnRGYWNlQ0NXKQotewotICAgIGlmIChtRm9yY2VTZXREZXB0aFN0ZW5jaWxTdGF0
ZSB8fAotICAgICAgICBtZW1jbXAoJmRlcHRoU3RlbmNpbFN0YXRlLCAmbUN1ckRlcHRoU3RlbmNp
bFN0YXRlLCBzaXplb2YoZ2w6OkRlcHRoU3RlbmNpbFN0YXRlKSkgIT0gMCB8fAotICAgICAgICBz
dGVuY2lsUmVmICE9IG1DdXJTdGVuY2lsUmVmIHx8IHN0ZW5jaWxCYWNrUmVmICE9IG1DdXJTdGVu
Y2lsQmFja1JlZikKLSAgICB7Ci0gICAgICAgIGlmIChkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2ls
V3JpdGVtYXNrICE9IGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrIHx8Ci0g
ICAgICAgICAgICBzdGVuY2lsUmVmICE9IHN0ZW5jaWxCYWNrUmVmIHx8Ci0gICAgICAgICAgICBk
ZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsTWFzayAhPSBkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2ls
QmFja01hc2spCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiU2VwYXJhdGUgZnJvbnQvYmFj
ayBzdGVuY2lsIHdyaXRlbWFza3MsIHJlZmVyZW5jZSB2YWx1ZXMsIG9yIHN0ZW5jaWwgbWFzayB2
YWx1ZXMgYXJlICIKLSAgICAgICAgICAgICAgICAiaW52YWxpZCB1bmRlciBXZWJHTC4iKTsKLSAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAg
ICB9Ci0KLSAgICAgICAgSUQzRDExRGVwdGhTdGVuY2lsU3RhdGUgKmR4RGVwdGhTdGVuY2lsU3Rh
dGUgPSBtU3RhdGVDYWNoZS5nZXREZXB0aFN0ZW5jaWxTdGF0ZShkZXB0aFN0ZW5jaWxTdGF0ZSk7
Ci0gICAgICAgIGlmICghZHhEZXB0aFN0ZW5jaWxTdGF0ZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgRVJSKCJOVUxMIGRlcHRoIHN0ZW5jaWwgc3RhdGUgcmV0dXJuZWQgYnkgUmVuZGVyU3RhdGVD
YWNoZTo6Z2V0RGVwdGhTdGVuY2lsU3RhdGUsICIKLSAgICAgICAgICAgICAgICAic2V0dGluZyB0
aGUgZGVmYXVsdCBkZXB0aCBzdGVuY2lsIHN0YXRlLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAg
bURldmljZUNvbnRleHQtPk9NU2V0RGVwdGhTdGVuY2lsU3RhdGUoZHhEZXB0aFN0ZW5jaWxTdGF0
ZSwgc3RhdGljX2Nhc3Q8VUlOVD4oc3RlbmNpbFJlZikpOwotCi0gICAgICAgIG1DdXJEZXB0aFN0
ZW5jaWxTdGF0ZSA9IGRlcHRoU3RlbmNpbFN0YXRlOwotICAgICAgICBtQ3VyU3RlbmNpbFJlZiA9
IHN0ZW5jaWxSZWY7Ci0gICAgICAgIG1DdXJTdGVuY2lsQmFja1JlZiA9IHN0ZW5jaWxCYWNrUmVm
OwotICAgIH0KLQotICAgIG1Gb3JjZVNldERlcHRoU3RlbmNpbFN0YXRlID0gZmFsc2U7Ci19Ci0K
LXZvaWQgUmVuZGVyZXIxMTo6c2V0U2Npc3NvclJlY3RhbmdsZShjb25zdCBnbDo6UmVjdGFuZ2xl
ICZzY2lzc29yLCBib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKG1Gb3JjZVNldFNjaXNzb3IgfHwg
bWVtY21wKCZzY2lzc29yLCAmbUN1clNjaXNzb3IsIHNpemVvZihnbDo6UmVjdGFuZ2xlKSkgIT0g
MCB8fAotICAgICAgICBlbmFibGVkICE9IG1TY2lzc29yRW5hYmxlZCkKLSAgICB7Ci0gICAgICAg
IGlmIChlbmFibGVkKQotICAgICAgICB7Ci0gICAgICAgICAgICBEM0QxMV9SRUNUIHJlY3Q7Ci0g
ICAgICAgICAgICByZWN0LmxlZnQgPSBzdGQ6Om1heCgwLCBzY2lzc29yLngpOwotICAgICAgICAg
ICAgcmVjdC50b3AgPSBzdGQ6Om1heCgwLCBzY2lzc29yLnkpOwotICAgICAgICAgICAgcmVjdC5y
aWdodCA9IHNjaXNzb3IueCArIHN0ZDo6bWF4KDAsIHNjaXNzb3Iud2lkdGgpOwotICAgICAgICAg
ICAgcmVjdC5ib3R0b20gPSBzY2lzc29yLnkgKyBzdGQ6Om1heCgwLCBzY2lzc29yLmhlaWdodCk7
Ci0KLSAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5SU1NldFNjaXNzb3JSZWN0cygxLCAmcmVj
dCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZW5hYmxlZCAhPSBtU2Npc3NvckVuYWJsZWQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1Gb3JjZVNldFJhc3RlclN0YXRlID0gdHJ1ZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIG1DdXJTY2lzc29yID0gc2Npc3NvcjsKLSAgICAgICAgbVNjaXNz
b3JFbmFibGVkID0gZW5hYmxlZDsKLSAgICB9Ci0KLSAgICBtRm9yY2VTZXRTY2lzc29yID0gZmFs
c2U7Ci19Ci0KLWJvb2wgUmVuZGVyZXIxMTo6c2V0Vmlld3BvcnQoY29uc3QgZ2w6OlJlY3Rhbmds
ZSAmdmlld3BvcnQsIGZsb2F0IHpOZWFyLCBmbG9hdCB6RmFyLCBHTGVudW0gZHJhd01vZGUsIEdM
ZW51bSBmcm9udEZhY2UsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlnbm9y
ZVZpZXdwb3J0KQotewotICAgIGdsOjpSZWN0YW5nbGUgYWN0dWFsVmlld3BvcnQgPSB2aWV3cG9y
dDsKLSAgICBmbG9hdCBhY3R1YWxaTmVhciA9IGdsOjpjbGFtcDAxKHpOZWFyKTsKLSAgICBmbG9h
dCBhY3R1YWxaRmFyID0gZ2w6OmNsYW1wMDEoekZhcik7Ci0gICAgaWYgKGlnbm9yZVZpZXdwb3J0
KQotICAgIHsKLSAgICAgICAgYWN0dWFsVmlld3BvcnQueCA9IDA7Ci0gICAgICAgIGFjdHVhbFZp
ZXdwb3J0LnkgPSAwOwotICAgICAgICBhY3R1YWxWaWV3cG9ydC53aWR0aCA9IG1SZW5kZXJUYXJn
ZXREZXNjLndpZHRoOwotICAgICAgICBhY3R1YWxWaWV3cG9ydC5oZWlnaHQgPSBtUmVuZGVyVGFy
Z2V0RGVzYy5oZWlnaHQ7Ci0gICAgICAgIGFjdHVhbFpOZWFyID0gMC4wZjsKLSAgICAgICAgYWN0
dWFsWkZhciA9IDEuMGY7Ci0gICAgfQotCi0gICAgLy8gR2V0IEQzRCB2aWV3cG9ydCBib3VuZHMs
IHdoaWNoIGRlcGVuZHMgb24gdGhlIGZlYXR1cmUgbGV2ZWwKLSAgICBjb25zdCBSYW5nZSYgdmll
d3BvcnRCb3VuZHMgPSBnZXRWaWV3cG9ydEJvdW5kcygpOwotCi0gICAgLy8gQ2xhbXAgd2lkdGgg
YW5kIGhlaWdodCBmaXJzdCB0byB0aGUgZ2wgbWF4aW11bSwgdGhlbiBjbGFtcCBmdXJ0aGVyIGlm
IHdlIGV4dGVuZCBwYXN0IHRoZSBEM0QgbWF4aW11bSBib3VuZHMKLSAgICBEM0QxMV9WSUVXUE9S
VCBkeFZpZXdwb3J0OwotICAgIGR4Vmlld3BvcnQuVG9wTGVmdFggPSBnbDo6Y2xhbXAoYWN0dWFs
Vmlld3BvcnQueCwgdmlld3BvcnRCb3VuZHMuc3RhcnQsIHZpZXdwb3J0Qm91bmRzLmVuZCk7Ci0g
ICAgZHhWaWV3cG9ydC5Ub3BMZWZ0WSA9IGdsOjpjbGFtcChhY3R1YWxWaWV3cG9ydC55LCB2aWV3
cG9ydEJvdW5kcy5zdGFydCwgdmlld3BvcnRCb3VuZHMuZW5kKTsKLSAgICBkeFZpZXdwb3J0Lldp
ZHRoID0gZ2w6OmNsYW1wKGFjdHVhbFZpZXdwb3J0LndpZHRoLCAwLCBnZXRNYXhWaWV3cG9ydERp
bWVuc2lvbigpKTsKLSAgICBkeFZpZXdwb3J0LkhlaWdodCA9IGdsOjpjbGFtcChhY3R1YWxWaWV3
cG9ydC5oZWlnaHQsIDAsIGdldE1heFZpZXdwb3J0RGltZW5zaW9uKCkpOwotICAgIGR4Vmlld3Bv
cnQuV2lkdGggPSBzdGQ6Om1pbigoaW50KWR4Vmlld3BvcnQuV2lkdGgsIHZpZXdwb3J0Qm91bmRz
LmVuZCAtIHN0YXRpY19jYXN0PGludD4oZHhWaWV3cG9ydC5Ub3BMZWZ0WCkpOwotICAgIGR4Vmll
d3BvcnQuSGVpZ2h0ID0gc3RkOjptaW4oKGludClkeFZpZXdwb3J0LkhlaWdodCwgdmlld3BvcnRC
b3VuZHMuZW5kIC0gc3RhdGljX2Nhc3Q8aW50PihkeFZpZXdwb3J0LlRvcExlZnRZKSk7Ci0gICAg
ZHhWaWV3cG9ydC5NaW5EZXB0aCA9IGFjdHVhbFpOZWFyOwotICAgIGR4Vmlld3BvcnQuTWF4RGVw
dGggPSBhY3R1YWxaRmFyOwotCi0gICAgaWYgKGR4Vmlld3BvcnQuV2lkdGggPD0gMCB8fCBkeFZp
ZXdwb3J0LkhlaWdodCA8PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIE5v
dGhpbmcgdG8gcmVuZGVyCi0gICAgfQotCi0gICAgYm9vbCB2aWV3cG9ydENoYW5nZWQgPSBtRm9y
Y2VTZXRWaWV3cG9ydCB8fCBtZW1jbXAoJmFjdHVhbFZpZXdwb3J0LCAmbUN1clZpZXdwb3J0LCBz
aXplb2YoZ2w6OlJlY3RhbmdsZSkpICE9IDAgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFjdHVhbFpOZWFyICE9IG1DdXJOZWFyIHx8IGFjdHVhbFpGYXIgIT0gbUN1ckZhcjsKLQotICAg
IGlmICh2aWV3cG9ydENoYW5nZWQpCi0gICAgewotICAgICAgICBtRGV2aWNlQ29udGV4dC0+UlNT
ZXRWaWV3cG9ydHMoMSwgJmR4Vmlld3BvcnQpOwotCi0gICAgICAgIG1DdXJWaWV3cG9ydCA9IGFj
dHVhbFZpZXdwb3J0OwotICAgICAgICBtQ3VyTmVhciA9IGFjdHVhbFpOZWFyOwotICAgICAgICBt
Q3VyRmFyID0gYWN0dWFsWkZhcjsKLQotICAgICAgICBtUGl4ZWxDb25zdGFudHMudmlld0Nvb3Jk
c1swXSA9IGFjdHVhbFZpZXdwb3J0LndpZHRoICAqIDAuNWY7Ci0gICAgICAgIG1QaXhlbENvbnN0
YW50cy52aWV3Q29vcmRzWzFdID0gYWN0dWFsVmlld3BvcnQuaGVpZ2h0ICogMC41ZjsKLSAgICAg
ICAgbVBpeGVsQ29uc3RhbnRzLnZpZXdDb29yZHNbMl0gPSBhY3R1YWxWaWV3cG9ydC54ICsgKGFj
dHVhbFZpZXdwb3J0LndpZHRoICAqIDAuNWYpOwotICAgICAgICBtUGl4ZWxDb25zdGFudHMudmll
d0Nvb3Jkc1szXSA9IGFjdHVhbFZpZXdwb3J0LnkgKyAoYWN0dWFsVmlld3BvcnQuaGVpZ2h0ICog
MC41Zik7Ci0KLSAgICAgICAgbVBpeGVsQ29uc3RhbnRzLmRlcHRoRnJvbnRbMF0gPSAoYWN0dWFs
WkZhciAtIGFjdHVhbFpOZWFyKSAqIDAuNWY7Ci0gICAgICAgIG1QaXhlbENvbnN0YW50cy5kZXB0
aEZyb250WzFdID0gKGFjdHVhbFpOZWFyICsgYWN0dWFsWkZhcikgKiAwLjVmOwotCi0gICAgICAg
IG1WZXJ0ZXhDb25zdGFudHMuZGVwdGhSYW5nZVswXSA9IGFjdHVhbFpOZWFyOwotICAgICAgICBt
VmVydGV4Q29uc3RhbnRzLmRlcHRoUmFuZ2VbMV0gPSBhY3R1YWxaRmFyOwotICAgICAgICBtVmVy
dGV4Q29uc3RhbnRzLmRlcHRoUmFuZ2VbMl0gPSBhY3R1YWxaRmFyIC0gYWN0dWFsWk5lYXI7Ci0K
LSAgICAgICAgbVBpeGVsQ29uc3RhbnRzLmRlcHRoUmFuZ2VbMF0gPSBhY3R1YWxaTmVhcjsKLSAg
ICAgICAgbVBpeGVsQ29uc3RhbnRzLmRlcHRoUmFuZ2VbMV0gPSBhY3R1YWxaRmFyOwotICAgICAg
ICBtUGl4ZWxDb25zdGFudHMuZGVwdGhSYW5nZVsyXSA9IGFjdHVhbFpGYXIgLSBhY3R1YWxaTmVh
cjsKLSAgICB9Ci0KLSAgICBtRm9yY2VTZXRWaWV3cG9ydCA9IGZhbHNlOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIFJlbmRlcmVyMTE6OmFwcGx5UHJpbWl0aXZlVHlwZShHTGVudW0gbW9k
ZSwgR0xzaXplaSBjb3VudCkKLXsKLSAgICBEM0QxMV9QUklNSVRJVkVfVE9QT0xPR1kgcHJpbWl0
aXZlVG9wb2xvZ3kgPSBEM0RfUFJJTUlUSVZFX1RPUE9MT0dZX1VOREVGSU5FRDsKLQotICAgIEdM
c2l6ZWkgbWluQ291bnQgPSAwOwotCi0gICAgc3dpdGNoIChtb2RlKQotICAgIHsKLSAgICAgIGNh
c2UgR0xfUE9JTlRTOiAgICAgICAgIHByaW1pdGl2ZVRvcG9sb2d5ID0gRDNEMTFfUFJJTUlUSVZF
X1RPUE9MT0dZX1BPSU5UTElTVDsgICBtaW5Db3VudCA9IDE7IGJyZWFrOwotICAgICAgY2FzZSBH
TF9MSU5FUzogICAgICAgICAgcHJpbWl0aXZlVG9wb2xvZ3kgPSBEM0RfUFJJTUlUSVZFX1RPUE9M
T0dZX0xJTkVMSVNUOyAgICAgIG1pbkNvdW50ID0gMjsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xJ
TkVfTE9PUDogICAgICBwcmltaXRpdmVUb3BvbG9neSA9IEQzRF9QUklNSVRJVkVfVE9QT0xPR1lf
TElORVNUUklQOyAgICAgbWluQ291bnQgPSAyOyBicmVhazsKLSAgICAgIGNhc2UgR0xfTElORV9T
VFJJUDogICAgIHByaW1pdGl2ZVRvcG9sb2d5ID0gRDNEX1BSSU1JVElWRV9UT1BPTE9HWV9MSU5F
U1RSSVA7ICAgICBtaW5Db3VudCA9IDI7IGJyZWFrOwotICAgICAgY2FzZSBHTF9UUklBTkdMRVM6
ICAgICAgcHJpbWl0aXZlVG9wb2xvZ3kgPSBEM0RfUFJJTUlUSVZFX1RPUE9MT0dZX1RSSUFOR0xF
TElTVDsgIG1pbkNvdW50ID0gMzsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1RSSUFOR0xFX1NUUklQ
OiBwcmltaXRpdmVUb3BvbG9neSA9IEQzRF9QUklNSVRJVkVfVE9QT0xPR1lfVFJJQU5HTEVTVFJJ
UDsgbWluQ291bnQgPSAzOyBicmVhazsKLSAgICAgICAgICAvLyBlbXVsYXRlIGZhbnMgdmlhIHJl
d3JpdGluZyBpbmRleCBidWZmZXIKLSAgICAgIGNhc2UgR0xfVFJJQU5HTEVfRkFOOiAgIHByaW1p
dGl2ZVRvcG9sb2d5ID0gRDNEX1BSSU1JVElWRV9UT1BPTE9HWV9UUklBTkdMRUxJU1Q7ICBtaW5D
b3VudCA9IDM7IGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0sIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAocHJpbWl0aXZlVG9w
b2xvZ3kgIT0gbUN1cnJlbnRQcmltaXRpdmVUb3BvbG9neSkKLSAgICB7Ci0gICAgICAgIG1EZXZp
Y2VDb250ZXh0LT5JQVNldFByaW1pdGl2ZVRvcG9sb2d5KHByaW1pdGl2ZVRvcG9sb2d5KTsKLSAg
ICAgICAgbUN1cnJlbnRQcmltaXRpdmVUb3BvbG9neSA9IHByaW1pdGl2ZVRvcG9sb2d5OwotICAg
IH0KLQotICAgIHJldHVybiBjb3VudCA+PSBtaW5Db3VudDsKLX0KLQotYm9vbCBSZW5kZXJlcjEx
OjphcHBseVJlbmRlclRhcmdldChnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyKQotewotICAg
IC8vIEdldCB0aGUgY29sb3IgcmVuZGVyIGJ1ZmZlciBhbmQgc2VyaWFsCi0gICAgLy8gQWxzbyBl
eHRyYWN0IHRoZSByZW5kZXIgdGFyZ2V0IGRpbWVuc2lvbnMgYW5kIHZpZXcKLSAgICB1bnNpZ25l
ZCBpbnQgcmVuZGVyVGFyZ2V0V2lkdGggPSAwOwotICAgIHVuc2lnbmVkIGludCByZW5kZXJUYXJn
ZXRIZWlnaHQgPSAwOwotICAgIEdMZW51bSByZW5kZXJUYXJnZXRGb3JtYXQgPSAwOwotICAgIHVu
c2lnbmVkIGludCByZW5kZXJUYXJnZXRTZXJpYWxzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJB
V19CVUZGRVJTXSA9IHswfTsKLSAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3KiBmcmFtZWJ1ZmZl
clJUVnNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlNdID0ge05VTEx9OwotICAg
IGJvb2wgbWlzc2luZ0NvbG9yUmVuZGVyVGFyZ2V0ID0gdHJ1ZTsKLQotICAgIGZvciAodW5zaWdu
ZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNobWVudCA8IGdsOjpJTVBMRU1F
TlRBVElPTl9NQVhfRFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQrKykKLSAgICB7Ci0gICAg
ICAgIGNvbnN0IEdMZW51bSBkcmF3QnVmZmVyU3RhdGUgPSBmcmFtZWJ1ZmZlci0+Z2V0RHJhd0J1
ZmZlclN0YXRlKGNvbG9yQXR0YWNobWVudCk7Ci0KLSAgICAgICAgaWYgKGZyYW1lYnVmZmVyLT5n
ZXRDb2xvcmJ1ZmZlclR5cGUoY29sb3JBdHRhY2htZW50KSAhPSBHTF9OT05FICYmIGRyYXdCdWZm
ZXJTdGF0ZSAhPSBHTF9OT05FKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyB0aGUgZHJhdyBi
dWZmZXIgbXVzdCBiZSBlaXRoZXIgIm5vbmUiLCAiYmFjayIgZm9yIHRoZSBkZWZhdWx0IGJ1ZmZl
ciBvciB0aGUgc2FtZSBpbmRleCBhcyB0aGlzIGNvbG9yIChpbiBvcmRlcikKLSAgICAgICAgICAg
IEFTU0VSVChkcmF3QnVmZmVyU3RhdGUgPT0gR0xfQkFDSyB8fCBkcmF3QnVmZmVyU3RhdGUgPT0g
KEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCArIGNvbG9yQXR0YWNobWVudCkpOwotCi0gICAgICAg
ICAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRDb2xv
cmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQpOwotCi0gICAgICAgICAgICBpZiAoIWNvbG9yYnVmZmVy
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigicmVuZGVyIHRhcmdldCBwb2lu
dGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gY2hlY2sgZm9yIHplcm8tc2l6ZWQgZGVm
YXVsdCBmcmFtZWJ1ZmZlciwgd2hpY2ggaXMgYSBzcGVjaWFsIGNhc2UuCi0gICAgICAgICAgICAv
LyBpbiB0aGlzIGNhc2Ugd2UgZG8gbm90IHdpc2ggdG8gbW9kaWZ5IGFueSBzdGF0ZSBhbmQganVz
dCBzaWxlbnRseSByZXR1cm4gZmFsc2UuCi0gICAgICAgICAgICAvLyB0aGlzIHdpbGwgbm90IHJl
cG9ydCBhbnkgZ2wgZXJyb3IgYnV0IHdpbGwgY2F1c2UgdGhlIGNhbGxpbmcgbWV0aG9kIHRvIHJl
dHVybi4KLSAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlci0+Z2V0V2lkdGgoKSA9PSAwIHx8IGNv
bG9yYnVmZmVyLT5nZXRIZWlnaHQoKSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmVuZGVyVGFy
Z2V0U2VyaWFsc1tjb2xvckF0dGFjaG1lbnRdID0gY29sb3JidWZmZXItPmdldFNlcmlhbCgpOwot
Ci0gICAgICAgICAgICAvLyBFeHRyYWN0IHRoZSByZW5kZXIgdGFyZ2V0IGRpbWVuc2lvbnMgYW5k
IHZpZXcKLSAgICAgICAgICAgIFJlbmRlclRhcmdldDExICpyZW5kZXJUYXJnZXQgPSBSZW5kZXJU
YXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGNvbG9yYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQo
KSk7Ci0gICAgICAgICAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBFUlIoInJlbmRlciB0YXJnZXQgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4i
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGZyYW1lYnVmZmVyUlRWc1tjb2xvckF0dGFjaG1lbnRdID0gcmVuZGVyVGFyZ2V0LT5n
ZXRSZW5kZXJUYXJnZXRWaWV3KCk7Ci0gICAgICAgICAgICBpZiAoIWZyYW1lYnVmZmVyUlRWc1tj
b2xvckF0dGFjaG1lbnRdKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigicmVu
ZGVyIHRhcmdldCB2aWV3IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobWlz
c2luZ0NvbG9yUmVuZGVyVGFyZ2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
bmRlclRhcmdldFdpZHRoID0gY29sb3JidWZmZXItPmdldFdpZHRoKCk7Ci0gICAgICAgICAgICAg
ICAgcmVuZGVyVGFyZ2V0SGVpZ2h0ID0gY29sb3JidWZmZXItPmdldEhlaWdodCgpOwotICAgICAg
ICAgICAgICAgIHJlbmRlclRhcmdldEZvcm1hdCA9IGNvbG9yYnVmZmVyLT5nZXRBY3R1YWxGb3Jt
YXQoKTsKLSAgICAgICAgICAgICAgICBtaXNzaW5nQ29sb3JSZW5kZXJUYXJnZXQgPSBmYWxzZTsK
LSAgICAgICAgICAgIH0KLQotI2lmZGVmIF9ERUJVRwotICAgICAgICAgICAgLy8gV29ya2Fyb3Vu
ZCBmb3IgRGVidWcgU0VUU0hBREVSUkVTT1VSQ0VTX0hBWkFSRCBEM0QxMSB3YXJuaW5ncwotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgdmVydGV4U2VyaWFsSW5kZXggPSAwOyB2ZXJ0ZXhT
ZXJpYWxJbmRleCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0Vf
VU5JVFM7IHZlcnRleFNlcmlhbEluZGV4KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGNvbG9yYnVmZmVyLT5nZXRUZXh0dXJlU2VyaWFsKCkgIT0gMCAmJiBtQ3VyVmVydGV4
VGV4dHVyZVNlcmlhbHNbdmVydGV4U2VyaWFsSW5kZXhdID09IGNvbG9yYnVmZmVyLT5nZXRUZXh0
dXJlU2VyaWFsKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzZXRU
ZXh0dXJlKGdsOjpTQU1QTEVSX1ZFUlRFWCwgdmVydGV4U2VyaWFsSW5kZXgsIE5VTEwpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgcGl4ZWxTZXJpYWxJbmRleCA9IDA7IHBpeGVsU2VyaWFsSW5kZXggPCBnbDo6TUFYX1RF
WFRVUkVfSU1BR0VfVU5JVFM7IHBpeGVsU2VyaWFsSW5kZXgrKykKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBpZiAoY29sb3JidWZmZXItPmdldFRleHR1cmVTZXJpYWwoKSAhPSAwICYm
IG1DdXJQaXhlbFRleHR1cmVTZXJpYWxzW3BpeGVsU2VyaWFsSW5kZXhdID09IGNvbG9yYnVmZmVy
LT5nZXRUZXh0dXJlU2VyaWFsKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBzZXRUZXh0dXJlKGdsOjpTQU1QTEVSX1BJWEVMLCBwaXhlbFNlcmlhbEluZGV4LCBOVUxM
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIC8vIEdldCB0aGUgZGVwdGggc3RlbmNpbCByZW5kZXIgYnVmZmVyIGFuZCBz
ZXJpYWxzCi0gICAgZ2w6OlJlbmRlcmJ1ZmZlciAqZGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICB1
bnNpZ25lZCBpbnQgZGVwdGhidWZmZXJTZXJpYWwgPSAwOwotICAgIHVuc2lnbmVkIGludCBzdGVu
Y2lsYnVmZmVyU2VyaWFsID0gMDsKLSAgICBpZiAoZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVy
VHlwZSgpICE9IEdMX05PTkUpCi0gICAgewotICAgICAgICBkZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1
ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsKLSAgICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRs
eSBudWxsLiIpOwotICAgICAgICAgICAgU2FmZVJlbGVhc2UoZnJhbWVidWZmZXJSVFZzKTsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGRlcHRoYnVmZmVy
U2VyaWFsID0gZGVwdGhTdGVuY2lsLT5nZXRTZXJpYWwoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAo
ZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKLSAgICB7Ci0g
ICAgICAgIGRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCk7Ci0g
ICAgICAgIGlmICghZGVwdGhTdGVuY2lsKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkRl
cHRoIHN0ZW5jaWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgIFNh
ZmVSZWxlYXNlKGZyYW1lYnVmZmVyUlRWcyk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLQotICAgICAgICBzdGVuY2lsYnVmZmVyU2VyaWFsID0gZGVwdGhTdGVuY2lsLT5n
ZXRTZXJpYWwoKTsKLSAgICB9Ci0KLSAgICAvLyBFeHRyYWN0IHRoZSBkZXB0aCBzdGVuY2lsIHNp
emVzIGFuZCB2aWV3Ci0gICAgdW5zaWduZWQgaW50IGRlcHRoU2l6ZSA9IDA7Ci0gICAgdW5zaWdu
ZWQgaW50IHN0ZW5jaWxTaXplID0gMDsKLSAgICBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3KiBmcmFt
ZWJ1ZmZlckRTViA9IE5VTEw7Ci0gICAgaWYgKGRlcHRoU3RlbmNpbCkKLSAgICB7Ci0gICAgICAg
IFJlbmRlclRhcmdldDExICpkZXB0aFN0ZW5jaWxSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQx
MTo6bWFrZVJlbmRlclRhcmdldDExKGRlcHRoU3RlbmNpbC0+Z2V0RGVwdGhTdGVuY2lsKCkpOwot
ICAgICAgICBpZiAoIWRlcHRoU3RlbmNpbFJlbmRlclRhcmdldCkKLSAgICAgICAgewotICAgICAg
ICAgICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7Ci0g
ICAgICAgICAgICBTYWZlUmVsZWFzZShmcmFtZWJ1ZmZlclJUVnMpOwotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgZnJhbWVidWZmZXJEU1YgPSBkZXB0aFN0
ZW5jaWxSZW5kZXJUYXJnZXQtPmdldERlcHRoU3RlbmNpbFZpZXcoKTsKLSAgICAgICAgaWYgKCFm
cmFtZWJ1ZmZlckRTVikKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJkZXB0aCBzdGVuY2ls
IHZpZXcgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgIFNhZmVSZWxl
YXNlKGZyYW1lYnVmZmVyUlRWcyk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyByZW5kZXIgYnVmZmVyLCB0aGUgd2lkdGgs
IGhlaWdodCBhbmQgZm9ybWF0IHZhbHVlcyBjb21lIGZyb20KLSAgICAgICAgLy8gdGhlIGRlcHRo
IHN0ZW5jaWwKLSAgICAgICAgaWYgKG1pc3NpbmdDb2xvclJlbmRlclRhcmdldCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmVuZGVyVGFyZ2V0V2lkdGggPSBkZXB0aFN0ZW5jaWwtPmdldFdpZHRo
KCk7Ci0gICAgICAgICAgICByZW5kZXJUYXJnZXRIZWlnaHQgPSBkZXB0aFN0ZW5jaWwtPmdldEhl
aWdodCgpOwotICAgICAgICAgICAgcmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZGVwdGhTdGVuY2lsLT5n
ZXRBY3R1YWxGb3JtYXQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGRlcHRoU2l6ZSA9IGRlcHRo
U3RlbmNpbC0+Z2V0RGVwdGhTaXplKCk7Ci0gICAgICAgIHN0ZW5jaWxTaXplID0gZGVwdGhTdGVu
Y2lsLT5nZXRTdGVuY2lsU2l6ZSgpOwotICAgIH0KLQotICAgIC8vIEFwcGx5IHRoZSByZW5kZXIg
dGFyZ2V0IGFuZCBkZXB0aCBzdGVuY2lsCi0gICAgaWYgKCFtUmVuZGVyVGFyZ2V0RGVzY0luaXRp
YWxpemVkIHx8ICFtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgfHwKLSAgICAgICAgbWVtY21wKHJl
bmRlclRhcmdldFNlcmlhbHMsIG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFscywgc2l6ZW9mKHJl
bmRlclRhcmdldFNlcmlhbHMpKSAhPSAwIHx8Ci0gICAgICAgIGRlcHRoYnVmZmVyU2VyaWFsICE9
IG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWwgfHwKLSAgICAgICAgc3RlbmNpbGJ1ZmZlclNlcmlh
bCAhPSBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwpCi0gICAgewotICAgICAgICBtRGV2aWNl
Q29udGV4dC0+T01TZXRSZW5kZXJUYXJnZXRzKGdldE1heFJlbmRlclRhcmdldHMoKSwgZnJhbWVi
dWZmZXJSVFZzLCBmcmFtZWJ1ZmZlckRTVik7Ci0KLSAgICAgICAgbVJlbmRlclRhcmdldERlc2Mu
d2lkdGggPSByZW5kZXJUYXJnZXRXaWR0aDsKLSAgICAgICAgbVJlbmRlclRhcmdldERlc2MuaGVp
Z2h0ID0gcmVuZGVyVGFyZ2V0SGVpZ2h0OwotICAgICAgICBtUmVuZGVyVGFyZ2V0RGVzYy5mb3Jt
YXQgPSByZW5kZXJUYXJnZXRGb3JtYXQ7Ci0gICAgICAgIG1Gb3JjZVNldFZpZXdwb3J0ID0gdHJ1
ZTsKLSAgICAgICAgbUZvcmNlU2V0U2Npc3NvciA9IHRydWU7Ci0KLSAgICAgICAgaWYgKCFtRGVw
dGhTdGVuY2lsSW5pdGlhbGl6ZWQgfHwgZGVwdGhTaXplICE9IG1DdXJEZXB0aFNpemUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1DdXJEZXB0aFNpemUgPSBkZXB0aFNpemU7Ci0gICAgICAgICAg
ICBtRm9yY2VTZXRSYXN0ZXJTdGF0ZSA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBtQ3Vy
U3RlbmNpbFNpemUgPSBzdGVuY2lsU2l6ZTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBy
dEluZGV4ID0gMDsgcnRJbmRleCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJT
OyBydEluZGV4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1BcHBsaWVkUmVuZGVyVGFyZ2V0
U2VyaWFsc1tydEluZGV4XSA9IHJlbmRlclRhcmdldFNlcmlhbHNbcnRJbmRleF07Ci0gICAgICAg
IH0KLSAgICAgICAgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCA9IGRlcHRoYnVmZmVyU2VyaWFs
OwotICAgICAgICBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwgPSBzdGVuY2lsYnVmZmVyU2Vy
aWFsOwotICAgICAgICBtUmVuZGVyVGFyZ2V0RGVzY0luaXRpYWxpemVkID0gdHJ1ZTsKLSAgICAg
ICAgbURlcHRoU3RlbmNpbEluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotR0xlbnVtIFJlbmRlcmVyMTE6OmFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRleEF0dHJp
YnV0ZXNbXSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQot
ewotICAgIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0cmlidXRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRS
SUJTXTsKLSAgICBHTGVudW0gZXJyID0gbVZlcnRleERhdGFNYW5hZ2VyLT5wcmVwYXJlVmVydGV4
RGF0YSh2ZXJ0ZXhBdHRyaWJ1dGVzLCBwcm9ncmFtQmluYXJ5LCBmaXJzdCwgY291bnQsIGF0dHJp
YnV0ZXMsIGluc3RhbmNlcyk7Ci0gICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1JbnB1dExheW91dENhY2hl
LmFwcGx5VmVydGV4QnVmZmVycyhhdHRyaWJ1dGVzLCBwcm9ncmFtQmluYXJ5KTsKLX0KLQotR0xl
bnVtIFJlbmRlcmVyMTE6OmFwcGx5SW5kZXhCdWZmZXIoY29uc3QgR0x2b2lkICppbmRpY2VzLCBn
bDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIEdMc2l6ZWkgY291bnQsIEdMZW51bSBtb2Rl
LCBHTGVudW0gdHlwZSwgVHJhbnNsYXRlZEluZGV4RGF0YSAqaW5kZXhJbmZvKQotewotICAgIEdM
ZW51bSBlcnIgPSBtSW5kZXhEYXRhTWFuYWdlci0+cHJlcGFyZUluZGV4RGF0YSh0eXBlLCBjb3Vu
dCwgZWxlbWVudEFycmF5QnVmZmVyLCBpbmRpY2VzLCBpbmRleEluZm8pOwotCi0gICAgaWYgKGVy
ciA9PSBHTF9OT19FUlJPUikKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleEluZm8tPnN0b3JhZ2Up
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpbmRleEluZm8tPnNlcmlhbCAhPSBtQXBwbGll
ZFN0b3JhZ2VJQlNlcmlhbCB8fCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0ICE9IG1BcHBsaWVkSUJP
ZmZzZXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQnVmZmVyU3RvcmFnZTExICpz
dG9yYWdlID0gQnVmZmVyU3RvcmFnZTExOjptYWtlQnVmZmVyU3RvcmFnZTExKGluZGV4SW5mby0+
c3RvcmFnZSk7Ci0gICAgICAgICAgICAgICAgSW5kZXhCdWZmZXIxMSogaW5kZXhCdWZmZXIgPSBJ
bmRleEJ1ZmZlcjExOjptYWtlSW5kZXhCdWZmZXIxMShpbmRleEluZm8tPmluZGV4QnVmZmVyKTsK
LQotICAgICAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldEluZGV4QnVmZmVyKHN0b3Jh
Z2UtPmdldEJ1ZmZlcigpLCBpbmRleEJ1ZmZlci0+Z2V0SW5kZXhGb3JtYXQoKSwgaW5kZXhJbmZv
LT5zdGFydE9mZnNldCk7Ci0KLSAgICAgICAgICAgICAgICBtQXBwbGllZElCU2VyaWFsID0gMDsK
LSAgICAgICAgICAgICAgICBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbCA9IHN0b3JhZ2UtPmdldFNl
cmlhbCgpOwotICAgICAgICAgICAgICAgIG1BcHBsaWVkSUJPZmZzZXQgPSBpbmRleEluZm8tPnN0
YXJ0T2Zmc2V0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGlu
ZGV4SW5mby0+c2VyaWFsICE9IG1BcHBsaWVkSUJTZXJpYWwgfHwgaW5kZXhJbmZvLT5zdGFydE9m
ZnNldCAhPSBtQXBwbGllZElCT2Zmc2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICBJbmRleEJ1
ZmZlcjExKiBpbmRleEJ1ZmZlciA9IEluZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1ZmZlcjExKGlu
ZGV4SW5mby0+aW5kZXhCdWZmZXIpOwotCi0gICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+SUFT
ZXRJbmRleEJ1ZmZlcihpbmRleEJ1ZmZlci0+Z2V0QnVmZmVyKCksIGluZGV4QnVmZmVyLT5nZXRJ
bmRleEZvcm1hdCgpLCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0KTsKLQotICAgICAgICAgICAgbUFw
cGxpZWRJQlNlcmlhbCA9IGluZGV4SW5mby0+c2VyaWFsOwotICAgICAgICAgICAgbUFwcGxpZWRT
dG9yYWdlSUJTZXJpYWwgPSAwOwotICAgICAgICAgICAgbUFwcGxpZWRJQk9mZnNldCA9IGluZGV4
SW5mby0+c3RhcnRPZmZzZXQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZXJyOwot
fQotCi12b2lkIFJlbmRlcmVyMTE6OmRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291
bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQotewotICAgIGlmIChtb2RlID09IEdMX0xJTkVfTE9PUCkK
LSAgICB7Ci0gICAgICAgIGRyYXdMaW5lTG9vcChjb3VudCwgR0xfTk9ORSwgTlVMTCwgMCwgTlVM
TCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1vZGUgPT0gR0xfVFJJQU5HTEVfRkFOKQotICAgIHsK
LSAgICAgICAgZHJhd1RyaWFuZ2xlRmFuKGNvdW50LCBHTF9OT05FLCBOVUxMLCAwLCBOVUxMLCBp
bnN0YW5jZXMpOwotICAgIH0KLSAgICBlbHNlIGlmIChpbnN0YW5jZXMgPiAwKQotICAgIHsKLSAg
ICAgICAgbURldmljZUNvbnRleHQtPkRyYXdJbnN0YW5jZWQoY291bnQsIGluc3RhbmNlcywgMCwg
MCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5EcmF3
KGNvdW50LCAwKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyZXIxMTo6ZHJhd0VsZW1lbnRzKEdM
ZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRp
Y2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRl
eERhdGEgJmluZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMpCi17Ci0gICAgaWYgKG1vZGUgPT0g
R0xfTElORV9MT09QKQotICAgIHsKLSAgICAgICAgZHJhd0xpbmVMb29wKGNvdW50LCB0eXBlLCBp
bmRpY2VzLCBpbmRleEluZm8ubWluSW5kZXgsIGVsZW1lbnRBcnJheUJ1ZmZlcik7Ci0gICAgfQot
ICAgIGVsc2UgaWYgKG1vZGUgPT0gR0xfVFJJQU5HTEVfRkFOKQotICAgIHsKLSAgICAgICAgZHJh
d1RyaWFuZ2xlRmFuKGNvdW50LCB0eXBlLCBpbmRpY2VzLCBpbmRleEluZm8ubWluSW5kZXgsIGVs
ZW1lbnRBcnJheUJ1ZmZlciwgaW5zdGFuY2VzKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoaW5zdGFu
Y2VzID4gMCkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5EcmF3SW5kZXhlZEluc3Rh
bmNlZChjb3VudCwgaW5zdGFuY2VzLCAwLCAtc3RhdGljX2Nhc3Q8aW50PihpbmRleEluZm8ubWlu
SW5kZXgpLCAwKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgbURldmljZUNvbnRl
eHQtPkRyYXdJbmRleGVkKGNvdW50LCAwLCAtc3RhdGljX2Nhc3Q8aW50PihpbmRleEluZm8ubWlu
SW5kZXgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyZXIxMTo6ZHJhd0xpbmVMb29wKEdMc2l6
ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGludCBtaW5JbmRl
eCwgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyKQotewotICAgIC8vIEdldCB0aGUgcmF3
IGluZGljZXMgZm9yIGFuIGluZGV4ZWQgZHJhdwotICAgIGlmICh0eXBlICE9IEdMX05PTkUgJiYg
ZWxlbWVudEFycmF5QnVmZmVyKQotICAgIHsKLSAgICAgICAgZ2w6OkJ1ZmZlciAqaW5kZXhCdWZm
ZXIgPSBlbGVtZW50QXJyYXlCdWZmZXI7Ci0gICAgICAgIEJ1ZmZlclN0b3JhZ2UgKnN0b3JhZ2Ug
PSBpbmRleEJ1ZmZlci0+Z2V0U3RvcmFnZSgpOwotICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSBy
ZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmRpY2VzKTsKLSAgICAgICAgaW5kaWNlcyA9IHN0
YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihzdG9yYWdlLT5nZXREYXRhKCkpICsgb2Zmc2V0Owot
ICAgIH0KLQotICAgIGlmICghbUxpbmVMb29wSUIpCi0gICAgewotICAgICAgICBtTGluZUxvb3BJ
QiA9IG5ldyBTdHJlYW1pbmdJbmRleEJ1ZmZlckludGVyZmFjZSh0aGlzKTsKLSAgICAgICAgaWYg
KCFtTGluZUxvb3BJQi0+cmVzZXJ2ZUJ1ZmZlclNwYWNlKElOSVRJQUxfSU5ERVhfQlVGRkVSX1NJ
WkUsIEdMX1VOU0lHTkVEX0lOVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlbGV0ZSBtTGlu
ZUxvb3BJQjsKLSAgICAgICAgICAgIG1MaW5lTG9vcElCID0gTlVMTDsKLQotICAgICAgICAgICAg
RVJSKCJDb3VsZCBub3QgY3JlYXRlIGEgMzItYml0IGxvb3BpbmcgaW5kZXggYnVmZmVyIGZvciBH
TF9MSU5FX0xPT1AuIik7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQ2hlY2tlZCBieSBSZW5kZXJlcjEx
OjphcHBseVByaW1pdGl2ZVR5cGUKLSAgICBBU1NFUlQoY291bnQgPj0gMCk7Ci0KLSAgICBpZiAo
c3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihjb3VudCkgKyAxID4gKHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLyBzaXplb2YodW5zaWduZWQgaW50KSkpCi0gICAgewot
ICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSAzMi1iaXQgbG9vcGluZyBpbmRleCBidWZm
ZXIgZm9yIEdMX0xJTkVfTE9PUCwgdG9vIG1hbnkgaW5kaWNlcyByZXF1aXJlZC4iKTsKLSAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICBjb25z
dCB1bnNpZ25lZCBpbnQgc3BhY2VOZWVkZWQgPSAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihj
b3VudCkgKyAxKSAqIHNpemVvZih1bnNpZ25lZCBpbnQpOwotICAgIGlmICghbUxpbmVMb29wSUIt
PnJlc2VydmVCdWZmZXJTcGFjZShzcGFjZU5lZWRlZCwgR0xfVU5TSUdORURfSU5UKSkKLSAgICB7
Ci0gICAgICAgIEVSUigiQ291bGQgbm90IHJlc2VydmUgZW5vdWdoIHNwYWNlIGluIGxvb3Bpbmcg
aW5kZXggYnVmZmVyIGZvciBHTF9MSU5FX0xPT1AuIik7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotCi0gICAgdm9pZCogbWFwcGVkTWVtb3J5ID0g
TlVMTDsKLSAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0OwotICAgIGlmICghbUxpbmVMb29wSUItPm1h
cEJ1ZmZlcihzcGFjZU5lZWRlZCwgJm1hcHBlZE1lbW9yeSwgJm9mZnNldCkpCi0gICAgewotICAg
ICAgICBFUlIoIkNvdWxkIG5vdCBtYXAgaW5kZXggYnVmZmVyIGZvciBHTF9MSU5FX0xPT1AuIik7
Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotCi0g
ICAgdW5zaWduZWQgaW50ICpkYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPiht
YXBwZWRNZW1vcnkpOwotICAgIHVuc2lnbmVkIGludCBpbmRleEJ1ZmZlck9mZnNldCA9IG9mZnNl
dDsKLQotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX05PTkU6ICAgLy8g
Tm9uLWluZGV4ZWQgZHJhdwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGRhdGFbaV0gPSBpOwotICAgICAgICB9Ci0gICAgICAg
IGRhdGFbY291bnRdID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVE
X0JZVEU6Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAg
ewotICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRp
Y2VzKVtpXTsKLSAgICAgICAgfQotICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNv
bnN0IEdMdWJ5dGUqPihpbmRpY2VzKVswXTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X1VOU0lHTkVEX1NIT1JUOgotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVz
aG9ydCo+KGluZGljZXMpW2ldOwotICAgICAgICB9Ci0gICAgICAgIGRhdGFbY291bnRdID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVswXTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8
Y29uc3QgR0x1aW50Kj4oaW5kaWNlcylbaV07Ci0gICAgICAgIH0KLSAgICAgICAgZGF0YVtjb3Vu
dF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVswXTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIGlmICghbUxp
bmVMb29wSUItPnVubWFwQnVmZmVyKCkpCi0gICAgewotICAgICAgICBFUlIoIkNvdWxkIG5vdCB1
bm1hcCBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKLSAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICBpZiAobUFwcGxpZWRJQlNl
cmlhbCAhPSBtTGluZUxvb3BJQi0+Z2V0U2VyaWFsKCkgfHwgbUFwcGxpZWRJQk9mZnNldCAhPSBp
bmRleEJ1ZmZlck9mZnNldCkKLSAgICB7Ci0gICAgICAgIEluZGV4QnVmZmVyMTEgKmluZGV4QnVm
ZmVyID0gSW5kZXhCdWZmZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEobUxpbmVMb29wSUItPmdldElu
ZGV4QnVmZmVyKCkpOwotCi0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldEluZGV4QnVmZmVy
KGluZGV4QnVmZmVyLT5nZXRCdWZmZXIoKSwgaW5kZXhCdWZmZXItPmdldEluZGV4Rm9ybWF0KCks
IGluZGV4QnVmZmVyT2Zmc2V0KTsKLSAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IG1MaW5lTG9v
cElCLT5nZXRTZXJpYWwoKTsKLSAgICAgICAgbUFwcGxpZWRTdG9yYWdlSUJTZXJpYWwgPSAwOwot
ICAgICAgICBtQXBwbGllZElCT2Zmc2V0ID0gaW5kZXhCdWZmZXJPZmZzZXQ7Ci0gICAgfQotCi0g
ICAgbURldmljZUNvbnRleHQtPkRyYXdJbmRleGVkKGNvdW50ICsgMSwgMCwgLW1pbkluZGV4KTsK
LX0KLQotdm9pZCBSZW5kZXJlcjExOjpkcmF3VHJpYW5nbGVGYW4oR0xzaXplaSBjb3VudCwgR0xl
bnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgaW50IG1pbkluZGV4LCBnbDo6QnVmZmVy
ICplbGVtZW50QXJyYXlCdWZmZXIsIGludCBpbnN0YW5jZXMpCi17Ci0gICAgLy8gR2V0IHRoZSBy
YXcgaW5kaWNlcyBmb3IgYW4gaW5kZXhlZCBkcmF3Ci0gICAgaWYgKHR5cGUgIT0gR0xfTk9ORSAm
JiBlbGVtZW50QXJyYXlCdWZmZXIpCi0gICAgewotICAgICAgICBnbDo6QnVmZmVyICppbmRleEJ1
ZmZlciA9IGVsZW1lbnRBcnJheUJ1ZmZlcjsKLSAgICAgICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFn
ZSA9IGluZGV4QnVmZmVyLT5nZXRTdG9yYWdlKCk7Ci0gICAgICAgIGludHB0cl90IG9mZnNldCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZGljZXMpOwotICAgICAgICBpbmRpY2VzID0g
c3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KHN0b3JhZ2UtPmdldERhdGEoKSkgKyBvZmZzZXQ7
Ci0gICAgfQotCi0gICAgaWYgKCFtVHJpYW5nbGVGYW5JQikKLSAgICB7Ci0gICAgICAgIG1Ucmlh
bmdsZUZhbklCID0gbmV3IFN0cmVhbWluZ0luZGV4QnVmZmVySW50ZXJmYWNlKHRoaXMpOwotICAg
ICAgICBpZiAoIW1UcmlhbmdsZUZhbklCLT5yZXNlcnZlQnVmZmVyU3BhY2UoSU5JVElBTF9JTkRF
WF9CVUZGRVJfU0laRSwgR0xfVU5TSUdORURfSU5UKSkKLSAgICAgICAgewotICAgICAgICAgICAg
ZGVsZXRlIG1UcmlhbmdsZUZhbklCOwotICAgICAgICAgICAgbVRyaWFuZ2xlRmFuSUIgPSBOVUxM
OwotCi0gICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSBzY3JhdGNoIGluZGV4IGJ1
ZmZlciBmb3IgR0xfVFJJQU5HTEVfRkFOLiIpOwotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIENoZWNrZWQg
YnkgUmVuZGVyZXIxMTo6YXBwbHlQcmltaXRpdmVUeXBlCi0gICAgQVNTRVJUKGNvdW50ID49IDMp
OwotCi0gICAgY29uc3QgdW5zaWduZWQgaW50IG51bVRyaXMgPSBjb3VudCAtIDI7Ci0KLSAgICBp
ZiAobnVtVHJpcyA+IChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpIC8g
KHNpemVvZih1bnNpZ25lZCBpbnQpICogMykpKQotICAgIHsKLSAgICAgICAgRVJSKCJDb3VsZCBu
b3QgY3JlYXRlIGEgc2NyYXRjaCBpbmRleCBidWZmZXIgZm9yIEdMX1RSSUFOR0xFX0ZBTiwgdG9v
IG1hbnkgaW5kaWNlcyByZXF1aXJlZC4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgc3BhY2VOZWVk
ZWQgPSAobnVtVHJpcyAqIDMpICogc2l6ZW9mKHVuc2lnbmVkIGludCk7Ci0gICAgaWYgKCFtVHJp
YW5nbGVGYW5JQi0+cmVzZXJ2ZUJ1ZmZlclNwYWNlKHNwYWNlTmVlZGVkLCBHTF9VTlNJR05FRF9J
TlQpKQotICAgIHsKLSAgICAgICAgRVJSKCJDb3VsZCBub3QgcmVzZXJ2ZSBlbm91Z2ggc3BhY2Ug
aW4gc2NyYXRjaCBpbmRleCBidWZmZXIgZm9yIEdMX1RSSUFOR0xFX0ZBTi4iKTsKLSAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICB2b2lkKiBt
YXBwZWRNZW1vcnkgPSBOVUxMOwotICAgIHVuc2lnbmVkIGludCBvZmZzZXQ7Ci0gICAgaWYgKCFt
VHJpYW5nbGVGYW5JQi0+bWFwQnVmZmVyKHNwYWNlTmVlZGVkLCAmbWFwcGVkTWVtb3J5LCAmb2Zm
c2V0KSkKLSAgICB7Ci0gICAgICAgIEVSUigiQ291bGQgbm90IG1hcCBzY3JhdGNoIGluZGV4IGJ1
ZmZlciBmb3IgR0xfVFJJQU5HTEVfRkFOLiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGludCAqZGF0YSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4obWFwcGVkTWVtb3J5KTsKLSAgICB1bnNpZ25lZCBp
bnQgaW5kZXhCdWZmZXJPZmZzZXQgPSBvZmZzZXQ7Ci0KLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAg
ewotICAgICAgY2FzZSBHTF9OT05FOiAgIC8vIE5vbi1pbmRleGVkIGRyYXcKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1UcmlzOyBpKyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGRhdGFbaSozICsgMF0gPSAwOwotICAgICAgICAgICAgZGF0YVtpKjMgKyAxXSA9IGkg
KyAxOwotICAgICAgICAgICAgZGF0YVtpKjMgKyAyXSA9IGkgKyAyOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IG51bVRyaXM7IGkrKykKLSAgICAgICAgewotICAgICAgICAg
ICAgZGF0YVtpKjMgKyAwXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKVsw
XTsKLSAgICAgICAgICAgIGRhdGFbaSozICsgMV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRl
Kj4oaW5kaWNlcylbaSArIDFdOwotICAgICAgICAgICAgZGF0YVtpKjMgKyAyXSA9IHN0YXRpY19j
YXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKVtpICsgMl07Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IG51bVRyaXM7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAg
ZGF0YVtpKjMgKyAwXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNlcylbMF07
Ci0gICAgICAgICAgICBkYXRhW2kqMyArIDFdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQq
PihpbmRpY2VzKVtpICsgMV07Ci0gICAgICAgICAgICBkYXRhW2kqMyArIDJdID0gc3RhdGljX2Nh
c3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVtpICsgMl07Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBudW1UcmlzOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRh
dGFbaSozICsgMF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVswXTsKLSAg
ICAgICAgICAgIGRhdGFbaSozICsgMV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRp
Y2VzKVtpICsgMV07Ci0gICAgICAgICAgICBkYXRhW2kqMyArIDJdID0gc3RhdGljX2Nhc3Q8Y29u
c3QgR0x1aW50Kj4oaW5kaWNlcylbaSArIDJdOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBpZiAoIW1Ucmlhbmds
ZUZhbklCLT51bm1hcEJ1ZmZlcigpKQotICAgIHsKLSAgICAgICAgRVJSKCJDb3VsZCBub3QgdW5t
YXAgc2NyYXRjaCBpbmRleCBidWZmZXIgZm9yIEdMX1RSSUFOR0xFX0ZBTi4iKTsKLSAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICBpZiAobUFw
cGxpZWRJQlNlcmlhbCAhPSBtVHJpYW5nbGVGYW5JQi0+Z2V0U2VyaWFsKCkgfHwgbUFwcGxpZWRJ
Qk9mZnNldCAhPSBpbmRleEJ1ZmZlck9mZnNldCkKLSAgICB7Ci0gICAgICAgIEluZGV4QnVmZmVy
MTEgKmluZGV4QnVmZmVyID0gSW5kZXhCdWZmZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEobVRyaWFu
Z2xlRmFuSUItPmdldEluZGV4QnVmZmVyKCkpOwotCi0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5J
QVNldEluZGV4QnVmZmVyKGluZGV4QnVmZmVyLT5nZXRCdWZmZXIoKSwgaW5kZXhCdWZmZXItPmdl
dEluZGV4Rm9ybWF0KCksIGluZGV4QnVmZmVyT2Zmc2V0KTsKLSAgICAgICAgbUFwcGxpZWRJQlNl
cmlhbCA9IG1UcmlhbmdsZUZhbklCLT5nZXRTZXJpYWwoKTsKLSAgICAgICAgbUFwcGxpZWRTdG9y
YWdlSUJTZXJpYWwgPSAwOwotICAgICAgICBtQXBwbGllZElCT2Zmc2V0ID0gaW5kZXhCdWZmZXJP
ZmZzZXQ7Ci0gICAgfQotCi0gICAgaWYgKGluc3RhbmNlcyA+IDApCi0gICAgewotICAgICAgICBt
RGV2aWNlQ29udGV4dC0+RHJhd0luZGV4ZWRJbnN0YW5jZWQobnVtVHJpcyAqIDMsIGluc3RhbmNl
cywgMCwgLW1pbkluZGV4LCAwKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgbURl
dmljZUNvbnRleHQtPkRyYXdJbmRleGVkKG51bVRyaXMgKiAzLCAwLCAtbWluSW5kZXgpOwotICAg
IH0KLX0KLQotdm9pZCBSZW5kZXJlcjExOjphcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkg
KnByb2dyYW1CaW5hcnkpCi17Ci0gICAgdW5zaWduZWQgaW50IHByb2dyYW1CaW5hcnlTZXJpYWwg
PSBwcm9ncmFtQmluYXJ5LT5nZXRTZXJpYWwoKTsKLSAgICBjb25zdCBib29sIHVwZGF0ZVByb2dy
YW1TdGF0ZSA9IChwcm9ncmFtQmluYXJ5U2VyaWFsICE9IG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNl
cmlhbCk7Ci0KLSAgICBpZiAodXBkYXRlUHJvZ3JhbVN0YXRlKQotICAgIHsKLSAgICAgICAgU2hh
ZGVyRXhlY3V0YWJsZSAqdmVydGV4RXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0VmVydGV4RXhlY3V0
YWJsZSgpOwotICAgICAgICBTaGFkZXJFeGVjdXRhYmxlICpwaXhlbEV4ZSA9IHByb2dyYW1CaW5h
cnktPmdldFBpeGVsRXhlY3V0YWJsZSgpOwotCi0gICAgICAgIElEM0QxMVZlcnRleFNoYWRlciAq
dmVydGV4U2hhZGVyID0gTlVMTDsKLSAgICAgICAgaWYgKHZlcnRleEV4ZSkgdmVydGV4U2hhZGVy
ID0gU2hhZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKHZlcnRleEV4ZSkt
PmdldFZlcnRleFNoYWRlcigpOwotCi0gICAgICAgIElEM0QxMVBpeGVsU2hhZGVyICpwaXhlbFNo
YWRlciA9IE5VTEw7Ci0gICAgICAgIGlmIChwaXhlbEV4ZSkgcGl4ZWxTaGFkZXIgPSBTaGFkZXJF
eGVjdXRhYmxlMTE6Om1ha2VTaGFkZXJFeGVjdXRhYmxlMTEocGl4ZWxFeGUpLT5nZXRQaXhlbFNo
YWRlcigpOwotCi0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlcihwaXhlbFNoYWRl
ciwgTlVMTCwgMCk7Ci0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5WU1NldFNoYWRlcih2ZXJ0ZXhT
aGFkZXIsIE5VTEwsIDApOwotCi0gICAgICAgIHByb2dyYW1CaW5hcnktPmRpcnR5QWxsVW5pZm9y
bXMoKTsKLQotICAgICAgICBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWwgPSBwcm9ncmFtQmlu
YXJ5U2VyaWFsOwotICAgIH0KLQotICAgIC8vIE9ubHkgdXNlIHRoZSBnZW9tZXRyeSBzaGFkZXIg
Y3VycmVudGx5IGZvciBwb2ludCBzcHJpdGUgZHJhd2luZwotICAgIGNvbnN0IGJvb2wgdXNlc0dl
b21ldHJ5U2hhZGVyID0gKHByb2dyYW1CaW5hcnktPnVzZXNHZW9tZXRyeVNoYWRlcigpICYmIG1D
dXJSYXN0ZXJTdGF0ZS5wb2ludERyYXdNb2RlKTsKLQotICAgIGlmICh1cGRhdGVQcm9ncmFtU3Rh
dGUgfHwgdXNlc0dlb21ldHJ5U2hhZGVyICE9IG1Jc0dlb21ldHJ5U2hhZGVyQWN0aXZlKQotICAg
IHsKLSAgICAgICAgaWYgKHVzZXNHZW9tZXRyeVNoYWRlcikKLSAgICAgICAgewotICAgICAgICAg
ICAgU2hhZGVyRXhlY3V0YWJsZSAqZ2VvbWV0cnlFeGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRHZW9t
ZXRyeUV4ZWN1dGFibGUoKTsKLSAgICAgICAgICAgIElEM0QxMUdlb21ldHJ5U2hhZGVyICpnZW9t
ZXRyeVNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShn
ZW9tZXRyeUV4ZSktPmdldEdlb21ldHJ5U2hhZGVyKCk7Ci0gICAgICAgICAgICBtRGV2aWNlQ29u
dGV4dC0+R1NTZXRTaGFkZXIoZ2VvbWV0cnlTaGFkZXIsIE5VTEwsIDApOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZUNvbnRleHQtPkdTU2V0
U2hhZGVyKE5VTEwsIE5VTEwsIDApOwotICAgICAgICB9Ci0KLSAgICAgICAgbUlzR2VvbWV0cnlT
aGFkZXJBY3RpdmUgPSB1c2VzR2VvbWV0cnlTaGFkZXI7Ci0gICAgfQotfQotCi12b2lkIFJlbmRl
cmVyMTE6OmFwcGx5VW5pZm9ybXMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGds
OjpVbmlmb3JtQXJyYXkgKnVuaWZvcm1BcnJheSkKLXsKLSAgICBTaGFkZXJFeGVjdXRhYmxlMTEg
KnZlcnRleEV4ZWN1dGFibGUgPSBTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VTaGFkZXJFeGVjdXRh
YmxlMTEocHJvZ3JhbUJpbmFyeS0+Z2V0VmVydGV4RXhlY3V0YWJsZSgpKTsKLSAgICBTaGFkZXJF
eGVjdXRhYmxlMTEgKnBpeGVsRXhlY3V0YWJsZSA9IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNo
YWRlckV4ZWN1dGFibGUxMShwcm9ncmFtQmluYXJ5LT5nZXRQaXhlbEV4ZWN1dGFibGUoKSk7Ci0K
LSAgICB1bnNpZ25lZCBpbnQgdG90YWxSZWdpc3RlckNvdW50VlMgPSAwOwotICAgIHVuc2lnbmVk
IGludCB0b3RhbFJlZ2lzdGVyQ291bnRQUyA9IDA7Ci0KLSAgICBib29sIHZlcnRleFVuaWZvcm1z
RGlydHkgPSBmYWxzZTsKLSAgICBib29sIHBpeGVsVW5pZm9ybXNEaXJ0eSA9IGZhbHNlOwotCi0g
ICAgZm9yIChnbDo6VW5pZm9ybUFycmF5Ojpjb25zdF9pdGVyYXRvciB1bmlmb3JtX2l0ZXJhdG9y
ID0gdW5pZm9ybUFycmF5LT5iZWdpbigpOyB1bmlmb3JtX2l0ZXJhdG9yICE9IHVuaWZvcm1BcnJh
eS0+ZW5kKCk7IHVuaWZvcm1faXRlcmF0b3IrKykKLSAgICB7Ci0gICAgICAgIGNvbnN0IGdsOjpV
bmlmb3JtICp1bmlmb3JtID0gKnVuaWZvcm1faXRlcmF0b3I7Ci0KLSAgICAgICAgaWYgKHVuaWZv
cm0tPnZzUmVnaXN0ZXJJbmRleCA+PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICB0b3RhbFJl
Z2lzdGVyQ291bnRWUyArPSB1bmlmb3JtLT5yZWdpc3RlckNvdW50OwotICAgICAgICAgICAgdmVy
dGV4VW5pZm9ybXNEaXJ0eSA9IHZlcnRleFVuaWZvcm1zRGlydHkgfHwgdW5pZm9ybS0+ZGlydHk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodW5pZm9ybS0+cHNSZWdpc3RlckluZGV4ID49IDAp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHRvdGFsUmVnaXN0ZXJDb3VudFBTICs9IHVuaWZvcm0t
PnJlZ2lzdGVyQ291bnQ7Ci0gICAgICAgICAgICBwaXhlbFVuaWZvcm1zRGlydHkgPSBwaXhlbFVu
aWZvcm1zRGlydHkgfHwgdW5pZm9ybS0+ZGlydHk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBJ
RDNEMTFCdWZmZXIgKnZlcnRleENvbnN0YW50QnVmZmVyID0gdmVydGV4RXhlY3V0YWJsZS0+Z2V0
Q29uc3RhbnRCdWZmZXIobURldmljZSwgdG90YWxSZWdpc3RlckNvdW50VlMpOwotICAgIElEM0Qx
MUJ1ZmZlciAqcGl4ZWxDb25zdGFudEJ1ZmZlciA9IHBpeGVsRXhlY3V0YWJsZS0+Z2V0Q29uc3Rh
bnRCdWZmZXIobURldmljZSwgdG90YWxSZWdpc3RlckNvdW50UFMpOwotCi0gICAgZmxvYXQgKCpt
YXBWUylbNF0gPSBOVUxMOwotICAgIGZsb2F0ICgqbWFwUFMpWzRdID0gTlVMTDsKLQotICAgIGlm
ICh0b3RhbFJlZ2lzdGVyQ291bnRWUyA+IDAgJiYgdmVydGV4VW5pZm9ybXNEaXJ0eSkKLSAgICB7
Ci0gICAgICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXAgPSB7MH07Ci0gICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gbURldmljZUNvbnRleHQtPk1hcCh2ZXJ0ZXhDb25zdGFudEJ1ZmZlciwg
MCwgRDNEMTFfTUFQX1dSSVRFX0RJU0NBUkQsIDAsICZtYXApOwotICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOwotICAgICAgICBtYXBWUyA9IChmbG9hdCgqKVs0XSltYXAucERhdGE7
Ci0gICAgfQotCi0gICAgaWYgKHRvdGFsUmVnaXN0ZXJDb3VudFBTID4gMCAmJiBwaXhlbFVuaWZv
cm1zRGlydHkpCi0gICAgewotICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwID0g
ezB9OwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2VDb250ZXh0LT5NYXAocGl4ZWxD
b25zdGFudEJ1ZmZlciwgMCwgRDNEMTFfTUFQX1dSSVRFX0RJU0NBUkQsIDAsICZtYXApOwotICAg
ICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBtYXBQUyA9IChmbG9hdCgq
KVs0XSltYXAucERhdGE7Ci0gICAgfQotCi0gICAgZm9yIChnbDo6VW5pZm9ybUFycmF5OjppdGVy
YXRvciB1bmlmb3JtX2l0ZXJhdG9yID0gdW5pZm9ybUFycmF5LT5iZWdpbigpOyB1bmlmb3JtX2l0
ZXJhdG9yICE9IHVuaWZvcm1BcnJheS0+ZW5kKCk7IHVuaWZvcm1faXRlcmF0b3IrKykKLSAgICB7
Ci0gICAgICAgIGdsOjpVbmlmb3JtICp1bmlmb3JtID0gKnVuaWZvcm1faXRlcmF0b3I7Ci0KLSAg
ICAgICAgaWYgKHVuaWZvcm0tPnR5cGUgIT0gIEdMX1NBTVBMRVJfMkQgJiYgdW5pZm9ybS0+dHlw
ZSAhPSBHTF9TQU1QTEVSX0NVQkUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh1bmlmb3Jt
LT52c1JlZ2lzdGVySW5kZXggPj0gMCAmJiBtYXBWUykKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBtZW1jcHkobWFwVlMgKyB1bmlmb3JtLT52c1JlZ2lzdGVySW5kZXgsIHVuaWZvcm0t
PmRhdGEsIHVuaWZvcm0tPnJlZ2lzdGVyQ291bnQgKiBzaXplb2YoZmxvYXRbNF0pKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleCA+PSAw
ICYmIG1hcFBTKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1lbWNweShtYXBQUyAr
IHVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleCwgdW5pZm9ybS0+ZGF0YSwgdW5pZm9ybS0+cmVnaXN0
ZXJDb3VudCAqIHNpemVvZihmbG9hdFs0XSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgdW5pZm9ybS0+ZGlydHkgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobWFwVlMp
Ci0gICAgewotICAgICAgICBtRGV2aWNlQ29udGV4dC0+VW5tYXAodmVydGV4Q29uc3RhbnRCdWZm
ZXIsIDApOwotICAgIH0KLQotICAgIGlmIChtYXBQUykKLSAgICB7Ci0gICAgICAgIG1EZXZpY2VD
b250ZXh0LT5Vbm1hcChwaXhlbENvbnN0YW50QnVmZmVyLCAwKTsKLSAgICB9Ci0KLSAgICBpZiAo
bUN1cnJlbnRWZXJ0ZXhDb25zdGFudEJ1ZmZlciAhPSB2ZXJ0ZXhDb25zdGFudEJ1ZmZlcikKLSAg
ICB7Ci0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5WU1NldENvbnN0YW50QnVmZmVycygwLCAxLCAm
dmVydGV4Q29uc3RhbnRCdWZmZXIpOwotICAgICAgICBtQ3VycmVudFZlcnRleENvbnN0YW50QnVm
ZmVyID0gdmVydGV4Q29uc3RhbnRCdWZmZXI7Ci0gICAgfQotCi0gICAgaWYgKG1DdXJyZW50UGl4
ZWxDb25zdGFudEJ1ZmZlciAhPSBwaXhlbENvbnN0YW50QnVmZmVyKQotICAgIHsKLSAgICAgICAg
bURldmljZUNvbnRleHQtPlBTU2V0Q29uc3RhbnRCdWZmZXJzKDAsIDEsICZwaXhlbENvbnN0YW50
QnVmZmVyKTsKLSAgICAgICAgbUN1cnJlbnRQaXhlbENvbnN0YW50QnVmZmVyID0gcGl4ZWxDb25z
dGFudEJ1ZmZlcjsKLSAgICB9Ci0KLSAgICAvLyBEcml2ZXIgdW5pZm9ybXMKLSAgICBpZiAoIW1E
cml2ZXJDb25zdGFudEJ1ZmZlclZTKQotICAgIHsKLSAgICAgICAgRDNEMTFfQlVGRkVSX0RFU0Mg
Y29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbiA9IHswfTsKLSAgICAgICAgY29uc3RhbnRCdWZmZXJE
ZXNjcmlwdGlvbi5CeXRlV2lkdGggPSBzaXplb2YoZHhfVmVydGV4Q29uc3RhbnRzKTsKLSAgICAg
ICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7
Ci0gICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uQmluZEZsYWdzID0gRDNEMTFfQklO
RF9DT05TVEFOVF9CVUZGRVI7Ci0gICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uQ1BV
QWNjZXNzRmxhZ3MgPSAwOwotICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLk1pc2NG
bGFncyA9IDA7Ci0gICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uU3RydWN0dXJlQnl0
ZVN0cmlkZSA9IDA7Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVC
dWZmZXIoJmNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24sIE5VTEwsICZtRHJpdmVyQ29uc3RhbnRC
dWZmZXJWUyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAg
bURldmljZUNvbnRleHQtPlZTU2V0Q29uc3RhbnRCdWZmZXJzKDEsIDEsICZtRHJpdmVyQ29uc3Rh
bnRCdWZmZXJWUyk7Ci0gICAgfQotCi0gICAgaWYgKCFtRHJpdmVyQ29uc3RhbnRCdWZmZXJQUykK
LSAgICB7Ci0gICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRp
b24gPSB7MH07Ci0gICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uQnl0ZVdpZHRoID0g
c2l6ZW9mKGR4X1BpeGVsQ29uc3RhbnRzKTsKLSAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlw
dGlvbi5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7Ci0gICAgICAgIGNvbnN0YW50QnVmZmVy
RGVzY3JpcHRpb24uQmluZEZsYWdzID0gRDNEMTFfQklORF9DT05TVEFOVF9CVUZGRVI7Ci0gICAg
ICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uQ1BVQWNjZXNzRmxhZ3MgPSAwOwotICAgICAg
ICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLk1pc2NGbGFncyA9IDA7Ci0gICAgICAgIGNvbnN0
YW50QnVmZmVyRGVzY3JpcHRpb24uU3RydWN0dXJlQnl0ZVN0cmlkZSA9IDA7Ci0KLSAgICAgICAg
SFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVCdWZmZXIoJmNvbnN0YW50QnVmZmVyRGVz
Y3JpcHRpb24sIE5VTEwsICZtRHJpdmVyQ29uc3RhbnRCdWZmZXJQUyk7Ci0gICAgICAgIEFTU0VS
VChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAgbURldmljZUNvbnRleHQtPlBTU2V0Q29u
c3RhbnRCdWZmZXJzKDEsIDEsICZtRHJpdmVyQ29uc3RhbnRCdWZmZXJQUyk7Ci0gICAgfQotCi0g
ICAgaWYgKG1lbWNtcCgmbVZlcnRleENvbnN0YW50cywgJm1BcHBsaWVkVmVydGV4Q29uc3RhbnRz
LCBzaXplb2YoZHhfVmVydGV4Q29uc3RhbnRzKSkgIT0gMCkKLSAgICB7Ci0gICAgICAgIG1EZXZp
Y2VDb250ZXh0LT5VcGRhdGVTdWJyZXNvdXJjZShtRHJpdmVyQ29uc3RhbnRCdWZmZXJWUywgMCwg
TlVMTCwgJm1WZXJ0ZXhDb25zdGFudHMsIDE2LCAwKTsKLSAgICAgICAgbWVtY3B5KCZtQXBwbGll
ZFZlcnRleENvbnN0YW50cywgJm1WZXJ0ZXhDb25zdGFudHMsIHNpemVvZihkeF9WZXJ0ZXhDb25z
dGFudHMpKTsKLSAgICB9Ci0KLSAgICBpZiAobWVtY21wKCZtUGl4ZWxDb25zdGFudHMsICZtQXBw
bGllZFBpeGVsQ29uc3RhbnRzLCBzaXplb2YoZHhfUGl4ZWxDb25zdGFudHMpKSAhPSAwKQotICAg
IHsKLSAgICAgICAgbURldmljZUNvbnRleHQtPlVwZGF0ZVN1YnJlc291cmNlKG1Ecml2ZXJDb25z
dGFudEJ1ZmZlclBTLCAwLCBOVUxMLCAmbVBpeGVsQ29uc3RhbnRzLCAxNiwgMCk7Ci0gICAgICAg
IG1lbWNweSgmbUFwcGxpZWRQaXhlbENvbnN0YW50cywgJm1QaXhlbENvbnN0YW50cywgc2l6ZW9m
KGR4X1BpeGVsQ29uc3RhbnRzKSk7Ci0gICAgfQotCi0gICAgLy8gbmVlZGVkIGZvciB0aGUgcG9p
bnQgc3ByaXRlIGdlb21ldHJ5IHNoYWRlcgotICAgIGlmIChtQ3VycmVudEdlb21ldHJ5Q29uc3Rh
bnRCdWZmZXIgIT0gbURyaXZlckNvbnN0YW50QnVmZmVyUFMpCi0gICAgewotICAgICAgICBtRGV2
aWNlQ29udGV4dC0+R1NTZXRDb25zdGFudEJ1ZmZlcnMoMCwgMSwgJm1Ecml2ZXJDb25zdGFudEJ1
ZmZlclBTKTsKLSAgICAgICAgbUN1cnJlbnRHZW9tZXRyeUNvbnN0YW50QnVmZmVyID0gbURyaXZl
ckNvbnN0YW50QnVmZmVyUFM7Ci0gICAgfQotfQotCi12b2lkIFJlbmRlcmVyMTE6OmNsZWFyKGNv
bnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBnbDo6RnJhbWVidWZmZXIgKmZy
YW1lQnVmZmVyKQotewotICAgICBib29sIGFscGhhVW5tYXNrZWQgPSAoZ2w6OkdldEFscGhhU2l6
ZShtUmVuZGVyVGFyZ2V0RGVzYy5mb3JtYXQpID09IDApIHx8IGNsZWFyUGFyYW1zLmNvbG9yTWFz
a0FscGhhOwotICAgICBib29sIG5lZWRNYXNrZWRDb2xvckNsZWFyID0gKGNsZWFyUGFyYW1zLm1h
c2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIShjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQgJiYgY2xlYXJQYXJhbXMuY29sb3JNYXNr
R3JlZW4gJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJQYXJhbXMu
Y29sb3JNYXNrQmx1ZSAmJiBhbHBoYVVubWFza2VkKTsKLQotICAgICB1bnNpZ25lZCBpbnQgc3Rl
bmNpbFVubWFza2VkID0gMHgwOwotICAgICBpZiAoZnJhbWVCdWZmZXItPmhhc1N0ZW5jaWwoKSkK
LSAgICAgewotICAgICAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxTaXplID0gZ2w6OkdldFN0ZW5j
aWxTaXplKGZyYW1lQnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldEFjdHVhbEZvcm1hdCgp
KTsKLSAgICAgICAgIHN0ZW5jaWxVbm1hc2tlZCA9ICgweDEgPDwgc3RlbmNpbFNpemUpIC0gMTsK
LSAgICAgfQotICAgICBib29sIG5lZWRNYXNrZWRTdGVuY2lsQ2xlYXIgPSAoY2xlYXJQYXJhbXMu
bWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGNsZWFyUGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2sgJiBzdGVuY2lsVW5tYXNr
ZWQpICE9IHN0ZW5jaWxVbm1hc2tlZDsKLQotICAgICBib29sIG5lZWRTY2lzc29yZWRDbGVhciA9
IG1TY2lzc29yRW5hYmxlZCAmJiAobUN1clNjaXNzb3IueCA+IDAgfHwgbUN1clNjaXNzb3IueSA+
IDAgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1DdXJTY2lzc29yLnggKyBtQ3VyU2Npc3Nvci53aWR0aCA8IG1SZW5kZXJUYXJnZXREZXNjLndp
ZHRoIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtQ3VyU2Npc3Nvci55ICsgbUN1clNjaXNzb3IuaGVpZ2h0IDwgbVJlbmRlclRhcmdldERlc2Mu
aGVpZ2h0KTsKLQotICAgICBpZiAobmVlZE1hc2tlZENvbG9yQ2xlYXIgfHwgbmVlZE1hc2tlZFN0
ZW5jaWxDbGVhciB8fCBuZWVkU2Npc3NvcmVkQ2xlYXIpCi0gICAgIHsKLSAgICAgICAgIG1hc2tl
ZENsZWFyKGNsZWFyUGFyYW1zLCBmcmFtZUJ1ZmZlci0+dXNpbmdFeHRlbmRlZERyYXdCdWZmZXJz
KCkpOwotICAgICB9Ci0gICAgIGVsc2UKLSAgICAgewotICAgICAgICAgaWYgKGNsZWFyUGFyYW1z
Lm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKQotICAgICAgICAgewotICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNobWVudCA8IGds
OjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQrKykKLSAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIGlmIChmcmFtZUJ1ZmZlci0+aXNFbmFibGVk
Q29sb3JBdHRhY2htZW50KGNvbG9yQXR0YWNobWVudCkpCi0gICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9
IGZyYW1lQnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQpOwotICAgICAgICAg
ICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlck9iamVjdCkKLSAgICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclRhcmdldDExICpyZW5kZXJUYXJnZXQg
PSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKHJlbmRlcmJ1ZmZlck9iamVjdC0+
Z2V0UmVuZGVyVGFyZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZW5kZXJU
YXJnZXQpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpm
cmFtZWJ1ZmZlclJUViA9IHJlbmRlclRhcmdldC0+Z2V0UmVuZGVyVGFyZ2V0VmlldygpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFmcmFtZWJ1ZmZlclJUVikKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUlIoInJlbmRlciB0YXJn
ZXQgdmlldyBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgY2xlYXJWYWx1ZXNbNF0gPSB7IGNsZWFyUGFyYW1z
LmNvbG9yQ2xlYXJWYWx1ZS5yZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLmdyZWVuLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNs
ZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5ibHVlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1
ZS5hbHBoYSB9OwotICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZUNvbnRleHQtPkNsZWFy
UmVuZGVyVGFyZ2V0VmlldyhmcmFtZWJ1ZmZlclJUViwgY2xlYXJWYWx1ZXMpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUIHx8
IGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9IGZyYW1lQnVm
ZmVyLT5nZXREZXB0aE9yU3RlbmNpbGJ1ZmZlcigpOwotICAgICAgICAgICAgaWYgKHJlbmRlcmJ1
ZmZlck9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBSZW5kZXJUYXJnZXQx
MSAqcmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShyZW5k
ZXJidWZmZXJPYmplY3QtPmdldERlcHRoU3RlbmNpbCgpKTsKLSAgICAgICAgICAgICAgICBpZiAo
IXJlbmRlclRhcmdldCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEVS
UigicmVuZGVyIHRhcmdldCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
SUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZnJhbWVidWZmZXJEU1YgPSByZW5kZXJUYXJnZXQtPmdl
dERlcHRoU3RlbmNpbFZpZXcoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWZyYW1lYnVmZmVyRFNW
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgRVJSKCJkZXB0aCBzdGVu
Y2lsIHZpZXcgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIFVJTlQgY2xl
YXJGbGFncyA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9E
RVBUSF9CVUZGRVJfQklUKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
Y2xlYXJGbGFncyB8PSBEM0QxMV9DTEVBUl9ERVBUSDsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjbGVhckZsYWdzIHw9IEQz
RDExX0NMRUFSX1NURU5DSUw7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ZmxvYXQgZGVwdGhDbGVhciA9IGdsOjpjbGFtcDAxKGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1
ZSk7Ci0gICAgICAgICAgICAgICAgVUlOVDggc3RlbmNpbENsZWFyID0gY2xlYXJQYXJhbXMuc3Rl
bmNpbENsZWFyVmFsdWUgJiAweDAwMDAwMEZGOwotCi0gICAgICAgICAgICAgICAgbURldmljZUNv
bnRleHQtPkNsZWFyRGVwdGhTdGVuY2lsVmlldyhmcmFtZWJ1ZmZlckRTViwgY2xlYXJGbGFncywg
ZGVwdGhDbGVhciwgc3RlbmNpbENsZWFyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLX0KLQotdm9pZCBSZW5kZXJlcjExOjptYXNrZWRDbGVhcihjb25zdCBnbDo6Q2xlYXJQYXJh
bWV0ZXJzICZjbGVhclBhcmFtcywgYm9vbCB1c2luZ0V4dGVuZGVkRHJhd0J1ZmZlcnMpCi17Ci0g
ICAgSFJFU1VMVCByZXN1bHQ7Ci0KLSAgICBpZiAoIW1DbGVhclJlc291cmNlc0luaXRpYWxpemVk
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFtQ2xlYXJWQiAmJiAhbUNsZWFyVlMgJiYgIW1DbGVh
clNpbmdsZVBTICYmICFtQ2xlYXJNdWx0aXBsZVBTICYmICFtQ2xlYXJTY2lzc29yUlMgJiYgIW1D
bGVhck5vU2Npc3NvclJTKTsKLQotICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyB2YkRlc2M7Ci0g
ICAgICAgIHZiRGVzYy5CeXRlV2lkdGggPSBzaXplb2YoZDNkMTE6OlBvc2l0aW9uRGVwdGhDb2xv
clZlcnRleCkgKiA0OwotICAgICAgICB2YkRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9EWU5BTUlD
OwotICAgICAgICB2YkRlc2MuQmluZEZsYWdzID0gRDNEMTFfQklORF9WRVJURVhfQlVGRkVSOwot
ICAgICAgICB2YkRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOwot
ICAgICAgICB2YkRlc2MuTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgdmJEZXNjLlN0cnVjdHVyZUJ5
dGVTdHJpZGUgPSAwOwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUJ1ZmZlcigm
dmJEZXNjLCBOVUxMLCAmbUNsZWFyVkIpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhclZCLCAiUmVuZGVyZXIxMSBt
YXNrZWQgY2xlYXIgdmVydGV4IGJ1ZmZlciIpOwotCi0gICAgICAgIEQzRDExX0lOUFVUX0VMRU1F
TlRfREVTQyBxdWFkTGF5b3V0W10gPQotICAgICAgICB7Ci0gICAgICAgICAgICB7ICJQT1NJVElP
TiIsIDAsIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCwgICAgMCwgIDAsIEQzRDExX0lOUFVU
X1BFUl9WRVJURVhfREFUQSwgMCB9LAotICAgICAgICAgICAgeyAiQ09MT1IiLCAgICAwLCBEWEdJ
X0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsIDAsIDEyLCBEM0QxMV9JTlBVVF9QRVJfVkVSVEVY
X0RBVEEsIDAgfSwKLSAgICAgICAgfTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVh
dGVJbnB1dExheW91dChxdWFkTGF5b3V0LCAyLCBnX1ZTX0NsZWFyLCBzaXplb2YoZ19WU19DbGVh
ciksICZtQ2xlYXJJTCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAg
ICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNsZWFySUwsICJSZW5kZXJlcjExIG1hc2tlZCBjbGVh
ciBpbnB1dCBsYXlvdXQiKTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVWZXJ0
ZXhTaGFkZXIoZ19WU19DbGVhciwgc2l6ZW9mKGdfVlNfQ2xlYXIpLCBOVUxMLCAmbUNsZWFyVlMp
OwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0
RGVidWdOYW1lKG1DbGVhclZTLCAiUmVuZGVyZXIxMSBtYXNrZWQgY2xlYXIgdmVydGV4IHNoYWRl
ciIpOwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdfUFNf
Q2xlYXJTaW5nbGUsIHNpemVvZihnX1BTX0NsZWFyU2luZ2xlKSwgTlVMTCwgJm1DbGVhclNpbmds
ZVBTKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6
OlNldERlYnVnTmFtZShtQ2xlYXJTaW5nbGVQUywgIlJlbmRlcmVyMTEgbWFza2VkIGNsZWFyIHBp
eGVsIHNoYWRlciAoMSBSVCkiKTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQ
aXhlbFNoYWRlcihnX1BTX0NsZWFyTXVsdGlwbGUsIHNpemVvZihnX1BTX0NsZWFyTXVsdGlwbGUp
LCBOVUxMLCAmbUNsZWFyTXVsdGlwbGVQUyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNsZWFyTXVsdGlwbGVQUywgIlJl
bmRlcmVyMTEgbWFza2VkIGNsZWFyIHBpeGVsIHNoYWRlciAoTVJUKSIpOwotCi0gICAgICAgIEQz
RDExX1JBU1RFUklaRVJfREVTQyByc1NjaXNzb3JEZXNjOwotICAgICAgICByc1NjaXNzb3JEZXNj
LkZpbGxNb2RlID0gRDNEMTFfRklMTF9TT0xJRDsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5DdWxs
TW9kZSA9IEQzRDExX0NVTExfTk9ORTsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5Gcm9udENvdW50
ZXJDbG9ja3dpc2UgPSBGQUxTRTsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5EZXB0aEJpYXMgPSAw
OwotICAgICAgICByc1NjaXNzb3JEZXNjLkRlcHRoQmlhc0NsYW1wID0gMC4wZjsKLSAgICAgICAg
cnNTY2lzc29yRGVzYy5TbG9wZVNjYWxlZERlcHRoQmlhcyA9IDAuMGY7Ci0gICAgICAgIHJzU2Np
c3NvckRlc2MuRGVwdGhDbGlwRW5hYmxlID0gRkFMU0U7Ci0gICAgICAgIHJzU2Npc3NvckRlc2Mu
U2Npc3NvckVuYWJsZSA9IFRSVUU7Ci0gICAgICAgIHJzU2Npc3NvckRlc2MuTXVsdGlzYW1wbGVF
bmFibGUgPSBGQUxTRTsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5BbnRpYWxpYXNlZExpbmVFbmFi
bGUgPSBGQUxTRTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVSYXN0ZXJpemVy
U3RhdGUoJnJzU2Npc3NvckRlc2MsICZtQ2xlYXJTY2lzc29yUlMpOwotICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhclNj
aXNzb3JSUywgIlJlbmRlcmVyMTEgbWFza2VkIGNsZWFyIHNjaXNzb3IgcmFzdGVyaXplciBzdGF0
ZSIpOwotCi0gICAgICAgIEQzRDExX1JBU1RFUklaRVJfREVTQyByc05vU2Npc3NvckRlc2M7Ci0g
ICAgICAgIHJzTm9TY2lzc29yRGVzYy5GaWxsTW9kZSA9IEQzRDExX0ZJTExfU09MSUQ7Ci0gICAg
ICAgIHJzTm9TY2lzc29yRGVzYy5DdWxsTW9kZSA9IEQzRDExX0NVTExfTk9ORTsKLSAgICAgICAg
cnNOb1NjaXNzb3JEZXNjLkZyb250Q291bnRlckNsb2Nrd2lzZSA9IEZBTFNFOwotICAgICAgICBy
c05vU2Npc3NvckRlc2MuRGVwdGhCaWFzID0gMDsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLkRl
cHRoQmlhc0NsYW1wID0gMC4wZjsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLlNsb3BlU2NhbGVk
RGVwdGhCaWFzID0gMC4wZjsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLkRlcHRoQ2xpcEVuYWJs
ZSA9IEZBTFNFOwotICAgICAgICByc05vU2Npc3NvckRlc2MuU2Npc3NvckVuYWJsZSA9IEZBTFNF
OwotICAgICAgICByc05vU2Npc3NvckRlc2MuTXVsdGlzYW1wbGVFbmFibGUgPSBGQUxTRTsKLSAg
ICAgICAgcnNOb1NjaXNzb3JEZXNjLkFudGlhbGlhc2VkTGluZUVuYWJsZSA9IEZBTFNFOwotCi0g
ICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVJhc3Rlcml6ZXJTdGF0ZSgmcnNOb1NjaXNz
b3JEZXNjLCAmbUNsZWFyTm9TY2lzc29yUlMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhck5vU2Npc3NvclJTLCAi
UmVuZGVyZXIxMSBtYXNrZWQgY2xlYXIgbm8gc2Npc3NvciByYXN0ZXJpemVyIHN0YXRlIik7Ci0K
LSAgICAgICAgbUNsZWFyUmVzb3VyY2VzSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KLQotICAg
IC8vIFByZXBhcmUgdGhlIGRlcHRoIHN0ZW5jaWwgc3RhdGUgdG8gd3JpdGUgZGVwdGggdmFsdWVz
IGlmIHRoZSBkZXB0aCBzaG91bGQgYmUgY2xlYXJlZAotICAgIC8vIGFuZCBzdGVuY2lsIHZhbHVl
cyBpZiB0aGUgc3RlbmNpbCBzaG91bGQgYmUgY2xlYXJlZAotICAgIGdsOjpEZXB0aFN0ZW5jaWxT
dGF0ZSBnbERTU3RhdGU7Ci0gICAgZ2xEU1N0YXRlLmRlcHRoVGVzdCA9IChjbGVhclBhcmFtcy5t
YXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCkgIT0gMDsKLSAgICBnbERTU3RhdGUuZGVwdGhGdW5j
ID0gR0xfQUxXQVlTOwotICAgIGdsRFNTdGF0ZS5kZXB0aE1hc2sgPSAoY2xlYXJQYXJhbXMubWFz
ayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpICE9IDA7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxUZXN0
ID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpICE9IDA7Ci0gICAg
Z2xEU1N0YXRlLnN0ZW5jaWxGdW5jID0gR0xfQUxXQVlTOwotICAgIGdsRFNTdGF0ZS5zdGVuY2ls
TWFzayA9IDA7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxGYWlsID0gR0xfUkVQTEFDRTsKLSAgICBn
bERTU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwgPSBHTF9SRVBMQUNFOwotICAgIGdsRFNTdGF0
ZS5zdGVuY2lsUGFzc0RlcHRoUGFzcyA9IEdMX1JFUExBQ0U7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5j
aWxXcml0ZW1hc2sgPSBjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrOwotICAgIGdsRFNTdGF0
ZS5zdGVuY2lsQmFja0Z1bmMgPSBHTF9BTFdBWVM7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxCYWNr
TWFzayA9IDA7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxCYWNrRmFpbCA9IEdMX1JFUExBQ0U7Ci0g
ICAgZ2xEU1N0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCA9IEdMX1JFUExBQ0U7Ci0gICAg
Z2xEU1N0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcyA9IEdMX1JFUExBQ0U7Ci0gICAgZ2xE
U1N0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrID0gY2xlYXJQYXJhbXMuc3RlbmNpbFdyaXRlTWFz
azsKLQotICAgIGludCBzdGVuY2lsQ2xlYXIgPSBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1
ZSAmIDB4MDAwMDAwRkY7Ci0KLSAgICBJRDNEMTFEZXB0aFN0ZW5jaWxTdGF0ZSAqZHNTdGF0ZSA9
IG1TdGF0ZUNhY2hlLmdldERlcHRoU3RlbmNpbFN0YXRlKGdsRFNTdGF0ZSk7Ci0KLSAgICAvLyBQ
cmVwYXJlIHRoZSBibGVuZCBzdGF0ZSB0byB1c2UgYSB3cml0ZSBtYXNrIGlmIHRoZSBjb2xvciBi
dWZmZXIgc2hvdWxkIGJlIGNsZWFyZWQKLSAgICBnbDo6QmxlbmRTdGF0ZSBnbEJsZW5kU3RhdGU7
Ci0gICAgZ2xCbGVuZFN0YXRlLmJsZW5kID0gZmFsc2U7Ci0gICAgZ2xCbGVuZFN0YXRlLnNvdXJj
ZUJsZW5kUkdCID0gR0xfT05FOwotICAgIGdsQmxlbmRTdGF0ZS5kZXN0QmxlbmRSR0IgPSBHTF9a
RVJPOwotICAgIGdsQmxlbmRTdGF0ZS5zb3VyY2VCbGVuZEFscGhhID0gR0xfT05FOwotICAgIGds
QmxlbmRTdGF0ZS5kZXN0QmxlbmRBbHBoYSA9IEdMX1pFUk87Ci0gICAgZ2xCbGVuZFN0YXRlLmJs
ZW5kRXF1YXRpb25SR0IgPSBHTF9GVU5DX0FERDsKLSAgICBnbEJsZW5kU3RhdGUuYmxlbmRFcXVh
dGlvbkFscGhhID0gR0xfRlVOQ19BREQ7Ci0gICAgZ2xCbGVuZFN0YXRlLmNvbG9yTWFza1JlZCA9
IChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkgPyBjbGVhclBhcmFtcy5j
b2xvck1hc2tSZWQgOiBmYWxzZTsKLSAgICBnbEJsZW5kU3RhdGUuY29sb3JNYXNrR3JlZW4gPSAo
Y2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpID8gY2xlYXJQYXJhbXMuY29s
b3JNYXNrR3JlZW4gOiBmYWxzZTsKLSAgICBnbEJsZW5kU3RhdGUuY29sb3JNYXNrQmx1ZSA9IChj
bGVhclBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkgPyBjbGVhclBhcmFtcy5jb2xv
ck1hc2tCbHVlIDogZmFsc2U7Ci0gICAgZ2xCbGVuZFN0YXRlLmNvbG9yTWFza0FscGhhID0gKGNs
ZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSA/IGNsZWFyUGFyYW1zLmNvbG9y
TWFza0FscGhhIDogZmFsc2U7Ci0gICAgZ2xCbGVuZFN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFn
ZSA9IGZhbHNlOwotICAgIGdsQmxlbmRTdGF0ZS5kaXRoZXIgPSBmYWxzZTsKLQotICAgIHN0YXRp
YyBjb25zdCBmbG9hdCBibGVuZEZhY3RvcnNbNF0gPSB7IDEuMGYsIDEuMGYsIDEuMGYsIDEuMGYg
fTsKLSAgICBzdGF0aWMgY29uc3QgVUlOVCBzYW1wbGVNYXNrID0gMHhGRkZGRkZGRjsKLQotICAg
IElEM0QxMUJsZW5kU3RhdGUgKmJsZW5kU3RhdGUgPSBtU3RhdGVDYWNoZS5nZXRCbGVuZFN0YXRl
KGdsQmxlbmRTdGF0ZSk7Ci0KLSAgICAvLyBTZXQgdGhlIHZlcnRpY2VzCi0gICAgRDNEMTFfTUFQ
UEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwotICAgIHJlc3VsdCA9IG1EZXZpY2VDb250
ZXh0LT5NYXAobUNsZWFyVkIsIDAsIEQzRDExX01BUF9XUklURV9ESVNDQVJELCAwLCAmbWFwcGVk
UmVzb3VyY2UpOwotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEVSUigi
RmFpbGVkIHRvIG1hcCBtYXNrZWQgY2xlYXIgdmVydGV4IGJ1ZmZlciwgSFJFU1VMVDogMHglWC4i
LCByZXN1bHQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZDNkMTE6OlBvc2l0aW9u
RGVwdGhDb2xvclZlcnRleCAqdmVydGljZXMgPSByZWludGVycHJldF9jYXN0PGQzZDExOjpQb3Np
dGlvbkRlcHRoQ29sb3JWZXJ0ZXgqPihtYXBwZWRSZXNvdXJjZS5wRGF0YSk7Ci0KLSAgICBmbG9h
dCBkZXB0aENsZWFyID0gZ2w6OmNsYW1wMDEoY2xlYXJQYXJhbXMuZGVwdGhDbGVhclZhbHVlKTsK
LSAgICBkM2QxMTo6U2V0UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KCZ2ZXJ0aWNlc1swXSwgLTEu
MGYsICAxLjBmLCBkZXB0aENsZWFyLCBjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUpOwotICAg
IGQzZDExOjpTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgoJnZlcnRpY2VzWzFdLCAtMS4wZiwg
LTEuMGYsIGRlcHRoQ2xlYXIsIGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZSk7Ci0gICAgZDNk
MTE6OlNldFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCgmdmVydGljZXNbMl0sICAxLjBmLCAgMS4w
ZiwgZGVwdGhDbGVhciwgY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlKTsKLSAgICBkM2QxMTo6
U2V0UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KCZ2ZXJ0aWNlc1szXSwgIDEuMGYsIC0xLjBmLCBk
ZXB0aENsZWFyLCBjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUpOwotCi0gICAgbURldmljZUNv
bnRleHQtPlVubWFwKG1DbGVhclZCLCAwKTsKLQotICAgIC8vIEFwcGx5IHN0YXRlCi0gICAgbURl
dmljZUNvbnRleHQtPk9NU2V0QmxlbmRTdGF0ZShibGVuZFN0YXRlLCBibGVuZEZhY3RvcnMsIHNh
bXBsZU1hc2spOwotICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldERlcHRoU3RlbmNpbFN0YXRlKGRz
U3RhdGUsIHN0ZW5jaWxDbGVhcik7Ci0gICAgbURldmljZUNvbnRleHQtPlJTU2V0U3RhdGUobVNj
aXNzb3JFbmFibGVkID8gbUNsZWFyU2Npc3NvclJTIDogbUNsZWFyTm9TY2lzc29yUlMpOwotCi0g
ICAgLy8gQXBwbHkgc2hhZGVycwotICAgIElEM0QxMVBpeGVsU2hhZGVyICpwaXhlbFNoYWRlciA9
IHVzaW5nRXh0ZW5kZWREcmF3QnVmZmVycyA/IG1DbGVhck11bHRpcGxlUFMgOiBtQ2xlYXJTaW5n
bGVQUzsKLQotICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldElucHV0TGF5b3V0KG1DbGVhcklMKTsK
LSAgICBtRGV2aWNlQ29udGV4dC0+VlNTZXRTaGFkZXIobUNsZWFyVlMsIE5VTEwsIDApOwotICAg
IG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlcihwaXhlbFNoYWRlciwgTlVMTCwgMCk7Ci0gICAg
bURldmljZUNvbnRleHQtPkdTU2V0U2hhZGVyKE5VTEwsIE5VTEwsIDApOwotCi0gICAgLy8gQXBw
bHkgdmVydGV4IGJ1ZmZlcgotICAgIHN0YXRpYyBVSU5UIHN0cmlkZSA9IHNpemVvZihkM2QxMTo6
UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KTsKLSAgICBzdGF0aWMgVUlOVCBzdGFydElkeCA9IDA7
Ci0gICAgbURldmljZUNvbnRleHQtPklBU2V0VmVydGV4QnVmZmVycygwLCAxLCAmbUNsZWFyVkIs
ICZzdHJpZGUsICZzdGFydElkeCk7Ci0gICAgbURldmljZUNvbnRleHQtPklBU2V0UHJpbWl0aXZl
VG9wb2xvZ3koRDNEX1BSSU1JVElWRV9UT1BPTE9HWV9UUklBTkdMRVNUUklQKTsKLQotICAgIC8v
IERyYXcgdGhlIGNsZWFyIHF1YWQKLSAgICBtRGV2aWNlQ29udGV4dC0+RHJhdyg0LCAwKTsKLQot
ICAgIC8vIENsZWFuIHVwCi0gICAgbWFya0FsbFN0YXRlRGlydHkoKTsKLX0KLQotdm9pZCBSZW5k
ZXJlcjExOjptYXJrQWxsU3RhdGVEaXJ0eSgpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgcnRJ
bmRleCA9IDA7IHJ0SW5kZXggPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSUzsg
cnRJbmRleCsrKQotICAgIHsKLSAgICAgICAgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWxzW3J0
SW5kZXhdID0gMDsKLSAgICB9Ci0gICAgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCA9IDA7Ci0g
ICAgbUFwcGxpZWRTdGVuY2lsYnVmZmVyU2VyaWFsID0gMDsKLSAgICBtRGVwdGhTdGVuY2lsSW5p
dGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBtUmVuZGVyVGFyZ2V0RGVzY0luaXRpYWxpemVkID0gZmFs
c2U7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVS
VEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IGkrKykKLSAgICB7Ci0gICAgICAgIG1Gb3JjZVNldFZl
cnRleFNhbXBsZXJTdGF0ZXNbaV0gPSB0cnVlOwotICAgICAgICBtQ3VyVmVydGV4VGV4dHVyZVNl
cmlhbHNbaV0gPSAwOwotICAgIH0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGdsOjpNQVhfVEVY
VFVSRV9JTUFHRV9VTklUUzsgaSsrKQotICAgIHsKLSAgICAgICAgbUZvcmNlU2V0UGl4ZWxTYW1w
bGVyU3RhdGVzW2ldID0gdHJ1ZTsKLSAgICAgICAgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbaV0g
PSAwOwotICAgIH0KLQotICAgIG1Gb3JjZVNldEJsZW5kU3RhdGUgPSB0cnVlOwotICAgIG1Gb3Jj
ZVNldFJhc3RlclN0YXRlID0gdHJ1ZTsKLSAgICBtRm9yY2VTZXREZXB0aFN0ZW5jaWxTdGF0ZSA9
IHRydWU7Ci0gICAgbUZvcmNlU2V0U2Npc3NvciA9IHRydWU7Ci0gICAgbUZvcmNlU2V0Vmlld3Bv
cnQgPSB0cnVlOwotCi0gICAgbUFwcGxpZWRJQlNlcmlhbCA9IDA7Ci0gICAgbUFwcGxpZWRTdG9y
YWdlSUJTZXJpYWwgPSAwOwotICAgIG1BcHBsaWVkSUJPZmZzZXQgPSAwOwotCi0gICAgbUFwcGxp
ZWRQcm9ncmFtQmluYXJ5U2VyaWFsID0gMDsKLSAgICBtZW1zZXQoJm1BcHBsaWVkVmVydGV4Q29u
c3RhbnRzLCAwLCBzaXplb2YoZHhfVmVydGV4Q29uc3RhbnRzKSk7Ci0gICAgbWVtc2V0KCZtQXBw
bGllZFBpeGVsQ29uc3RhbnRzLCAwLCBzaXplb2YoZHhfUGl4ZWxDb25zdGFudHMpKTsKLQotICAg
IG1JbnB1dExheW91dENhY2hlLm1hcmtEaXJ0eSgpOwotCi0gICAgbUN1cnJlbnRWZXJ0ZXhDb25z
dGFudEJ1ZmZlciA9IE5VTEw7Ci0gICAgbUN1cnJlbnRQaXhlbENvbnN0YW50QnVmZmVyID0gTlVM
TDsKLSAgICBtQ3VycmVudEdlb21ldHJ5Q29uc3RhbnRCdWZmZXIgPSBOVUxMOwotCi0gICAgbUN1
cnJlbnRQcmltaXRpdmVUb3BvbG9neSA9IEQzRF9QUklNSVRJVkVfVE9QT0xPR1lfVU5ERUZJTkVE
OwotfQotCi12b2lkIFJlbmRlcmVyMTE6OnJlbGVhc2VEZXZpY2VSZXNvdXJjZXMoKQotewotICAg
IG1TdGF0ZUNhY2hlLmNsZWFyKCk7Ci0gICAgbUlucHV0TGF5b3V0Q2FjaGUuY2xlYXIoKTsKLQot
ICAgIGRlbGV0ZSBtVmVydGV4RGF0YU1hbmFnZXI7Ci0gICAgbVZlcnRleERhdGFNYW5hZ2VyID0g
TlVMTDsKLQotICAgIGRlbGV0ZSBtSW5kZXhEYXRhTWFuYWdlcjsKLSAgICBtSW5kZXhEYXRhTWFu
YWdlciA9IE5VTEw7Ci0KLSAgICBkZWxldGUgbUxpbmVMb29wSUI7Ci0gICAgbUxpbmVMb29wSUIg
PSBOVUxMOwotCi0gICAgZGVsZXRlIG1UcmlhbmdsZUZhbklCOwotICAgIG1UcmlhbmdsZUZhbklC
ID0gTlVMTDsKLQotICAgIFNhZmVSZWxlYXNlKG1Db3B5VkIpOwotICAgIFNhZmVSZWxlYXNlKG1D
b3B5U2FtcGxlcik7Ci0gICAgU2FmZVJlbGVhc2UobUNvcHlJTCk7Ci0gICAgU2FmZVJlbGVhc2Uo
bUNvcHlJTCk7Ci0gICAgU2FmZVJlbGVhc2UobUNvcHlWUyk7Ci0gICAgU2FmZVJlbGVhc2UobUNv
cHlSR0JBUFMpOwotICAgIFNhZmVSZWxlYXNlKG1Db3B5UkdCUFMpOwotICAgIFNhZmVSZWxlYXNl
KG1Db3B5THVtUFMpOwotICAgIFNhZmVSZWxlYXNlKG1Db3B5THVtQWxwaGFQUyk7Ci0KLSAgICBt
Q29weVJlc291cmNlc0luaXRpYWxpemVkID0gZmFsc2U7Ci0KLSAgICBTYWZlUmVsZWFzZShtQ2xl
YXJWQik7Ci0gICAgU2FmZVJlbGVhc2UobUNsZWFySUwpOwotICAgIFNhZmVSZWxlYXNlKG1DbGVh
clZTKTsKLSAgICBTYWZlUmVsZWFzZShtQ2xlYXJTaW5nbGVQUyk7Ci0gICAgU2FmZVJlbGVhc2Uo
bUNsZWFyTXVsdGlwbGVQUyk7Ci0gICAgU2FmZVJlbGVhc2UobUNsZWFyU2Npc3NvclJTKTsKLSAg
ICBTYWZlUmVsZWFzZShtQ2xlYXJOb1NjaXNzb3JSUyk7Ci0KLSAgICBtQ2xlYXJSZXNvdXJjZXNJ
bml0aWFsaXplZCA9IGZhbHNlOwotCi0gICAgU2FmZVJlbGVhc2UobURyaXZlckNvbnN0YW50QnVm
ZmVyVlMpOwotICAgIFNhZmVSZWxlYXNlKG1Ecml2ZXJDb25zdGFudEJ1ZmZlclBTKTsKLSAgICBT
YWZlUmVsZWFzZShtU3luY1F1ZXJ5KTsKLX0KLQotdm9pZCBSZW5kZXJlcjExOjpub3RpZnlEZXZp
Y2VMb3N0KCkKLXsKLSAgICBtRGV2aWNlTG9zdCA9IHRydWU7Ci0gICAgbURpc3BsYXktPm5vdGlm
eURldmljZUxvc3QoKTsKLX0KLQotYm9vbCBSZW5kZXJlcjExOjppc0RldmljZUxvc3QoKQotewot
ICAgIHJldHVybiBtRGV2aWNlTG9zdDsKLX0KLQotLy8gc2V0IG5vdGlmeSB0byB0cnVlIHRvIGJy
b2FkY2FzdCBhIG1lc3NhZ2UgdG8gYWxsIGNvbnRleHRzIG9mIHRoZSBkZXZpY2UgbG9zcwotYm9v
bCBSZW5kZXJlcjExOjp0ZXN0RGV2aWNlTG9zdChib29sIG5vdGlmeSkKLXsKLSAgICBib29sIGlz
TG9zdCA9IGZhbHNlOwotCi0gICAgLy8gR2V0UmVtb3ZlZFJlYXNvbiBpcyB1c2VkIHRvIHRlc3Qg
aWYgdGhlIGRldmljZSBpcyByZW1vdmVkCi0gICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5H
ZXREZXZpY2VSZW1vdmVkUmVhc29uKCk7Ci0gICAgaXNMb3N0ID0gZDNkMTE6OmlzRGV2aWNlTG9z
dEVycm9yKHJlc3VsdCk7Ci0KLSAgICBpZiAoaXNMb3N0KQotICAgIHsKLSAgICAgICAgLy8gTG9n
IGVycm9yIGlmIHRoaXMgaXMgYSBuZXcgZGV2aWNlIGxvc3QgZXZlbnQKLSAgICAgICAgaWYgKG1E
ZXZpY2VMb3N0ID09IGZhbHNlKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIlRoZSBEM0Qx
MSBkZXZpY2Ugd2FzIHJlbW92ZWQ6IDB4JTA4WCIsIHJlc3VsdCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBlbnN1cmUgd2Ugbm90ZSB0aGUgZGV2aWNlIGxvc3MgLS0KLSAgICAgICAgLy8gd2Un
bGwgcHJvYmFibHkgZ2V0IHRoaXMgZG9uZSBhZ2FpbiBieSBub3RpZnlEZXZpY2VMb3N0Ci0gICAg
ICAgIC8vIGJ1dCBiZXN0IHRvIHJlbWVtYmVyIGl0IQotICAgICAgICAvLyBOb3RlIHRoYXQgd2Ug
ZG9uJ3Qgd2FudCB0byBjbGVhciB0aGUgZGV2aWNlIGxvc3Mgc3RhdHVzIGhlcmUKLSAgICAgICAg
Ly8gLS0gdGhpcyBuZWVkcyB0byBiZSBkb25lIGJ5IHJlc2V0RGV2aWNlCi0gICAgICAgIG1EZXZp
Y2VMb3N0ID0gdHJ1ZTsKLSAgICAgICAgaWYgKG5vdGlmeSkKLSAgICAgICAgewotICAgICAgICAg
ICAgbm90aWZ5RGV2aWNlTG9zdCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGlz
TG9zdDsKLX0KLQotYm9vbCBSZW5kZXJlcjExOjp0ZXN0RGV2aWNlUmVzZXR0YWJsZSgpCi17Ci0g
ICAgLy8gZGV0ZXJtaW5lIGlmIHRoZSBkZXZpY2UgaXMgcmVzZXR0YWJsZSBieSBjcmVhdGluZyBh
IGR1bW15IGRldmljZQotICAgIFBGTl9EM0QxMV9DUkVBVEVfREVWSUNFIEQzRDExQ3JlYXRlRGV2
aWNlID0gKFBGTl9EM0QxMV9DUkVBVEVfREVWSUNFKUdldFByb2NBZGRyZXNzKG1EM2QxMU1vZHVs
ZSwgIkQzRDExQ3JlYXRlRGV2aWNlIik7Ci0KLSAgICBpZiAoRDNEMTFDcmVhdGVEZXZpY2UgPT0g
TlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBEM0RfRkVB
VFVSRV9MRVZFTCBmZWF0dXJlTGV2ZWxzW10gPQotICAgIHsKLSAgICAgICAgRDNEX0ZFQVRVUkVf
TEVWRUxfMTFfMCwKLSAgICAgICAgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMSwKLSAgICAgICAgRDNE
X0ZFQVRVUkVfTEVWRUxfMTBfMCwKLSAgICB9OwotCi0gICAgSUQzRDExRGV2aWNlKiBkdW1teURl
dmljZTsKLSAgICBEM0RfRkVBVFVSRV9MRVZFTCBkdW1teUZlYXR1cmVMZXZlbDsKLSAgICBJRDNE
MTFEZXZpY2VDb250ZXh0KiBkdW1teUNvbnRleHQ7Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9IEQz
RDExQ3JlYXRlRGV2aWNlKE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBEM0RfRFJJVkVSX1RZUEVfSEFSRFdBUkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgI2lmIGRlZmluZWQoX0RFQlVHKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRDNEMTFfQ1JFQVRFX0RFVklDRV9ERUJVRywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICNlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2VuZGlmCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlTGV2ZWxzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlTaXplKGZlYXR1cmVMZXZl
bHMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEMTFfU0RLX1ZF
UlNJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZHVtbXlEZXZp
Y2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZHVtbXlGZWF0dXJl
TGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZHVtbXlDb250
ZXh0KTsKLQotICAgIGlmICghbURldmljZSB8fCBGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBkdW1teUNvbnRleHQtPlJlbGVhc2UoKTsK
LSAgICBkdW1teURldmljZS0+UmVsZWFzZSgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZv
aWQgUmVuZGVyZXIxMTo6cmVsZWFzZSgpCi17Ci0gICAgcmVsZWFzZURldmljZVJlc291cmNlcygp
OwotCi0gICAgaWYgKG1EeGdpRmFjdG9yeSkKLSAgICB7Ci0gICAgICAgIG1EeGdpRmFjdG9yeS0+
UmVsZWFzZSgpOwotICAgICAgICBtRHhnaUZhY3RvcnkgPSBOVUxMOwotICAgIH0KLQotICAgIGlm
IChtRHhnaUFkYXB0ZXIpCi0gICAgewotICAgICAgICBtRHhnaUFkYXB0ZXItPlJlbGVhc2UoKTsK
LSAgICAgICAgbUR4Z2lBZGFwdGVyID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobURldmljZUNv
bnRleHQpCi0gICAgewotICAgICAgICBtRGV2aWNlQ29udGV4dC0+Q2xlYXJTdGF0ZSgpOwotICAg
ICAgICBtRGV2aWNlQ29udGV4dC0+Rmx1c2goKTsKLSAgICAgICAgbURldmljZUNvbnRleHQtPlJl
bGVhc2UoKTsKLSAgICAgICAgbURldmljZUNvbnRleHQgPSBOVUxMOwotICAgIH0KLQotICAgIGlm
IChtRGV2aWNlKQotICAgIHsKLSAgICAgICAgbURldmljZS0+UmVsZWFzZSgpOwotICAgICAgICBt
RGV2aWNlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobUQzZDExTW9kdWxlKQotICAgIHsKLSAg
ICAgICAgRnJlZUxpYnJhcnkobUQzZDExTW9kdWxlKTsKLSAgICAgICAgbUQzZDExTW9kdWxlID0g
TlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobUR4Z2lNb2R1bGUpCi0gICAgewotICAgICAgICBGcmVl
TGlicmFyeShtRHhnaU1vZHVsZSk7Ci0gICAgICAgIG1EeGdpTW9kdWxlID0gTlVMTDsKLSAgICB9
Ci19Ci0KLWJvb2wgUmVuZGVyZXIxMTo6cmVzZXREZXZpY2UoKQotewotICAgIC8vIHJlY3JlYXRl
IGV2ZXJ5dGhpbmcKLSAgICByZWxlYXNlKCk7Ci0gICAgRUdMaW50IHJlc3VsdCA9IGluaXRpYWxp
emUoKTsKLQotICAgIGlmIChyZXN1bHQgIT0gRUdMX1NVQ0NFU1MpCi0gICAgewotICAgICAgICBF
UlIoIkNvdWxkIG5vdCByZWluaXRpYWxpemUgRDNEMTEgZGV2aWNlOiAlMDhYIiwgcmVzdWx0KTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG1EZXZpY2VMb3N0ID0gZmFsc2U7
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotRFdPUkQgUmVuZGVyZXIxMTo6Z2V0QWRhcHRlclZl
bmRvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1BZGFwdGVyRGVzY3JpcHRpb24uVmVuZG9ySWQ7
Ci19Ci0KLXN0ZDo6c3RyaW5nIFJlbmRlcmVyMTE6OmdldFJlbmRlcmVyRGVzY3JpcHRpb24oKSBj
b25zdAotewotICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSByZW5kZXJlclN0cmluZzsKLQotICAgIHJl
bmRlcmVyU3RyaW5nIDw8IG1EZXNjcmlwdGlvbjsKLSAgICByZW5kZXJlclN0cmluZyA8PCAiIERp
cmVjdDNEMTEiOwotCi0gICAgcmVuZGVyZXJTdHJpbmcgPDwgIiB2c18iIDw8IGdldE1ham9yU2hh
ZGVyTW9kZWwoKSA8PCAiXyIgPDwgZ2V0TWlub3JTaGFkZXJNb2RlbCgpOwotICAgIHJlbmRlcmVy
U3RyaW5nIDw8ICIgcHNfIiA8PCBnZXRNYWpvclNoYWRlck1vZGVsKCkgPDwgIl8iIDw8IGdldE1p
bm9yU2hhZGVyTW9kZWwoKTsKLQotICAgIHJldHVybiByZW5kZXJlclN0cmluZy5zdHIoKTsKLX0K
LQotR1VJRCBSZW5kZXJlcjExOjpnZXRBZGFwdGVySWRlbnRpZmllcigpIGNvbnN0Ci17Ci0gICAg
Ly8gVXNlIHRoZSBhZGFwdGVyIExVSUQgYXMgb3VyIGFkYXB0ZXIgSUQKLSAgICAvLyBUaGlzIG51
bWJlciBpcyBsb2NhbCB0byBhIG1hY2hpbmUgaXMgb25seSBndWFyYW50ZWVkIHRvIGJlIHVuaXF1
ZSBiZXR3ZWVuIHJlc3RhcnRzCi0gICAgTUVUQV9BU1NFUlQoc2l6ZW9mKExVSUQpIDw9IHNpemVv
ZihHVUlEKSk7Ci0gICAgR1VJRCBhZGFwdGVySWQgPSB7MH07Ci0gICAgbWVtY3B5KCZhZGFwdGVy
SWQsICZtQWRhcHRlckRlc2NyaXB0aW9uLkFkYXB0ZXJMdWlkLCBzaXplb2YoTFVJRCkpOwotICAg
IHJldHVybiBhZGFwdGVySWQ7Ci19Ci0KLWJvb2wgUmVuZGVyZXIxMTo6Z2V0QkdSQVRleHR1cmVT
dXBwb3J0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUJHUkFUZXh0dXJlU3VwcG9ydDsKLX0KLQot
Ym9vbCBSZW5kZXJlcjExOjpnZXREWFQxVGV4dHVyZVN1cHBvcnQoKQotewotICAgIHJldHVybiBt
RFhUMVRleHR1cmVTdXBwb3J0OwotfQotCi1ib29sIFJlbmRlcmVyMTE6OmdldERYVDNUZXh0dXJl
U3VwcG9ydCgpCi17Ci0gICAgcmV0dXJuIG1EWFQzVGV4dHVyZVN1cHBvcnQ7Ci19Ci0KLWJvb2wg
UmVuZGVyZXIxMTo6Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCkKLXsKLSAgICByZXR1cm4gbURYVDVU
ZXh0dXJlU3VwcG9ydDsKLX0KLQotYm9vbCBSZW5kZXJlcjExOjpnZXREZXB0aFRleHR1cmVTdXBw
b3J0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbURlcHRoVGV4dHVyZVN1cHBvcnQ7Ci19Ci0KLWJv
b2wgUmVuZGVyZXIxMTo6Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywg
Ym9vbCAqcmVuZGVyYWJsZSkKLXsKLSAgICAqcmVuZGVyYWJsZSA9IG1GbG9hdDMyUmVuZGVyU3Vw
cG9ydDsKLSAgICAqZmlsdGVyaW5nID0gbUZsb2F0MzJGaWx0ZXJTdXBwb3J0OwotICAgIHJldHVy
biBtRmxvYXQzMlRleHR1cmVTdXBwb3J0OwotfQotCi1ib29sIFJlbmRlcmVyMTE6OmdldEZsb2F0
MTZUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpCi17Ci0g
ICAgKnJlbmRlcmFibGUgPSBtRmxvYXQxNlJlbmRlclN1cHBvcnQ7Ci0gICAgKmZpbHRlcmluZyA9
IG1GbG9hdDE2RmlsdGVyU3VwcG9ydDsKLSAgICByZXR1cm4gbUZsb2F0MTZUZXh0dXJlU3VwcG9y
dDsKLX0KLQotYm9vbCBSZW5kZXJlcjExOjpnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpCi17
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlcmVyMTE6OmdldEx1bWluYW5jZUFs
cGhhVGV4dHVyZVN1cHBvcnQoKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5k
ZXJlcjExOjpnZXRUZXh0dXJlRmlsdGVyQW5pc290cm9weVN1cHBvcnQoKSBjb25zdAotewotICAg
IHJldHVybiB0cnVlOwotfQotCi1mbG9hdCBSZW5kZXJlcjExOjpnZXRUZXh0dXJlTWF4QW5pc290
cm9weSgpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQotICAgIHsKLSAgICAg
IGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDoKLSAgICAgICAgcmV0dXJuIEQzRDExX01BWF9N
QVhBTklTT1RST1BZOwotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgotICAgICAg
Y2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgotICAgICAgICByZXR1cm4gRDNEMTBfTUFYX01B
WEFOSVNPVFJPUFk7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci19Ci0KLWJvb2wgUmVuZGVyZXIxMTo6Z2V0RXZlbnRRdWVyeVN1cHBvcnQo
KQotewotICAgIHJldHVybiB0cnVlOwotfQotCi1SYW5nZSBSZW5kZXJlcjExOjpnZXRWaWV3cG9y
dEJvdW5kcygpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQotICAgIHsKLSAg
ICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDoKLSAgICAgICAgcmV0dXJuIFJhbmdlKEQz
RDExX1ZJRVdQT1JUX0JPVU5EU19NSU4sIEQzRDExX1ZJRVdQT1JUX0JPVU5EU19NQVgpOwotICAg
ICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9M
RVZFTF8xMF8wOgotICAgICAgICByZXR1cm4gUmFuZ2UoRDNEMTBfVklFV1BPUlRfQk9VTkRTX01J
TiwgRDNEMTBfVklFV1BPUlRfQk9VTkRTX01BWCk7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOwotICAgICAgICByZXR1cm4gUmFuZ2UoMCwgMCk7Ci0gICAgfQotfQotCi11bnNpZ25lZCBp
bnQgUmVuZGVyZXIxMTo6Z2V0TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdAotewot
ICAgIE1FVEFfQVNTRVJUKE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl9TTTQgPD0gZ2w6OklN
UExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7Ci0gICAgc3dpdGNo
IChtRmVhdHVyZUxldmVsKQotICAgIHsKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFf
MDoKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKLSAgICAgIGNhc2UgRDNEX0ZF
QVRVUkVfTEVWRUxfMTBfMDoKLSAgICAgICAgcmV0dXJuIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRT
X1ZURl9TTTQ7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJlcjExOjpnZXRNYXhDb21iaW5lZFRl
eHR1cmVJbWFnZVVuaXRzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2w6Ok1BWF9URVhUVVJFX0lN
QUdFX1VOSVRTICsgZ2V0TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKTsKLX0KLQotdW5zaWdu
ZWQgaW50IFJlbmRlcmVyMTE6OmdldFJlc2VydmVkVmVydGV4VW5pZm9ybVZlY3RvcnMoKSBjb25z
dAotewotICAgIHJldHVybiAwOyAgIC8vIERyaXZlciB1bmlmb3JtcyBhcmUgc3RvcmVkIGluIGEg
c2VwYXJhdGUgY29uc3RhbnQgYnVmZmVyCi19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJlcjExOjpn
ZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdAotewotICAgIHJldHVybiAw
OyAgIC8vIERyaXZlciB1bmlmb3JtcyBhcmUgc3RvcmVkIGluIGEgc2VwYXJhdGUgY29uc3RhbnQg
YnVmZmVyCi19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJlcjExOjpnZXRNYXhWZXJ0ZXhVbmlmb3Jt
VmVjdG9ycygpIGNvbnN0Ci17Ci0gICAgTUVUQV9BU1NFUlQoTUFYX1ZFUlRFWF9VTklGT1JNX1ZF
Q1RPUlNfRDNEMTEgPD0gRDNEMTBfUkVRX0NPTlNUQU5UX0JVRkZFUl9FTEVNRU5UX0NPVU5UKTsK
LSAgICBBU1NFUlQobUZlYXR1cmVMZXZlbCA+PSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wKTsKLSAg
ICByZXR1cm4gTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlNfRDNEMTE7Ci19Ci0KLXVuc2lnbmVk
IGludCBSZW5kZXJlcjExOjpnZXRNYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgY29uc3QKLXsK
LSAgICBNRVRBX0FTU0VSVChNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTX0QzRDExIDw9IEQz
RDEwX1JFUV9DT05TVEFOVF9CVUZGRVJfRUxFTUVOVF9DT1VOVCk7Ci0gICAgQVNTRVJUKG1GZWF0
dXJlTGV2ZWwgPj0gRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMCk7Ci0gICAgcmV0dXJuIE1BWF9GUkFH
TUVOVF9VTklGT1JNX1ZFQ1RPUlNfRDNEMTE7Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJlcjEx
OjpnZXRNYXhWYXJ5aW5nVmVjdG9ycygpIGNvbnN0Ci17Ci0gICAgTUVUQV9BU1NFUlQoZ2w6OklN
UExFTUVOVEFUSU9OX01BWF9WQVJZSU5HX1ZFQ1RPUlMgPT0gRDNEMTFfVlNfT1VUUFVUX1JFR0lT
VEVSX0NPVU5UKTsKLSAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCi0gICAgewotICAgICAgY2Fz
ZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgotICAgICAgICByZXR1cm4gRDNEMTFfVlNfT1VUUFVU
X1JFR0lTVEVSX0NPVU5UOwotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgotICAg
ICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgotICAgICAgICByZXR1cm4gRDNEMTBfVlNf
T1VUUFVUX1JFR0lTVEVSX0NPVU5UOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1ib29sIFJlbmRlcmVyMTE6OmdldE5vblBvd2Vy
MlRleHR1cmVTdXBwb3J0KCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCi0g
ICAgewotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgotICAgICAgY2FzZSBEM0Rf
RkVBVFVSRV9MRVZFTF8xMF8xOgotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgUmVuZGVyZXIxMTo6Z2V0T2NjbHVz
aW9uUXVlcnlTdXBwb3J0KCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCi0g
ICAgewotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgotICAgICAgY2FzZSBEM0Rf
RkVBVFVSRV9MRVZFTF8xMF8xOgotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgUmVuZGVyZXIxMTo6Z2V0SW5zdGFu
Y2luZ1N1cHBvcnQoKSBjb25zdAotewotICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKLSAgICB7
Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6Ci0gICAgICBjYXNlIEQzRF9GRUFU
VVJFX0xFVkVMXzEwXzE6Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJlcjExOjpnZXRTaGFyZUhhbmRs
ZVN1cHBvcnQoKSBjb25zdAotewotICAgIC8vIFdlIG9ubHkgY3VycmVudGx5IHN1cHBvcnQgc2hh
cmUgaGFuZGxlcyB3aXRoIEJHUkEgc3VyZmFjZXMsIGJlY2F1c2UKLSAgICAvLyBjaHJvbWUgbmVl
ZHMgQkdSQS4gT25jZSBjaHJvbWUgZml4ZXMgdGhpcywgd2Ugc2hvdWxkIGFsd2F5cyBzdXBwb3J0
IHRoZW0uCi0gICAgLy8gUElYIGRvZXNuJ3Qgc2VlbSB0byBzdXBwb3J0IHVzaW5nIHNoYXJlIGhh
bmRsZXMsIHNvIGRpc2FibGUgdGhlbS4KLSAgICByZXR1cm4gZ2V0QkdSQVRleHR1cmVTdXBwb3J0
KCkgJiYgIWdsOjpwZXJmQWN0aXZlKCk7Ci19Ci0KLWJvb2wgUmVuZGVyZXIxMTo6Z2V0RGVyaXZh
dGl2ZUluc3RydWN0aW9uU3VwcG9ydCgpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtRmVhdHVyZUxl
dmVsKQotICAgIHsKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDoKLSAgICAgIGNh
c2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxf
MTBfMDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFJlbmRlcmVyMTE6Omdl
dFBvc3RTdWJCdWZmZXJTdXBwb3J0KCkgY29uc3QKLXsKLSAgICAvLyBEM0QxMSBkb2VzIG5vdCBz
dXBwb3J0IHByZXNlbnQgd2l0aCBkaXJ0eSByZWN0YW5nbGVzIHVudGlsIEQzRDExLjEgYW5kIERY
R0kgMS4yLgotICAgIHJldHVybiBmYWxzZTsKLX0KLQotaW50IFJlbmRlcmVyMTE6OmdldE1ham9y
U2hhZGVyTW9kZWwoKSBjb25zdAotewotICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKLSAgICB7
Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6IHJldHVybiBEM0QxMV9TSEFERVJf
TUFKT1JfVkVSU0lPTjsgICAvLyA1Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6
IHJldHVybiBEM0QxMF8xX1NIQURFUl9NQUpPUl9WRVJTSU9OOyAvLyA0Ci0gICAgICBjYXNlIEQz
RF9GRUFUVVJFX0xFVkVMXzEwXzA6IHJldHVybiBEM0QxMF9TSEFERVJfTUFKT1JfVkVSU0lPTjsg
ICAvLyA0Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgICAgIHJldHVybiAwOwotICAg
IH0KLX0KLQotaW50IFJlbmRlcmVyMTE6OmdldE1pbm9yU2hhZGVyTW9kZWwoKSBjb25zdAotewot
ICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKLSAgICB7Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJF
X0xFVkVMXzExXzA6IHJldHVybiBEM0QxMV9TSEFERVJfTUlOT1JfVkVSU0lPTjsgICAvLyAwCi0g
ICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6IHJldHVybiBEM0QxMF8xX1NIQURFUl9N
SU5PUl9WRVJTSU9OOyAvLyAxCi0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6IHJl
dHVybiBEM0QxMF9TSEFERVJfTUlOT1JfVkVSU0lPTjsgICAvLyAwCi0gICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOyAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotZmxvYXQgUmVuZGVyZXIx
MTo6Z2V0TWF4UG9pbnRTaXplKCkgY29uc3QKLXsKLSAgICAvLyBjaG9vc2UgYSByZWFzb25hYmxl
IG1heGltdW0uIHdlIGVuZm9yY2UgdGhpcyBpbiB0aGUgc2hhZGVyLgotICAgIC8vIChuYjogb24g
YSBSYWRlb24gMjYwMHh0LCBEWDkgcmVwb3J0cyBhIDI1NiBtYXggcG9pbnQgc2l6ZSkKLSAgICBy
ZXR1cm4gMTAyNC4wZjsKLX0KLQotaW50IFJlbmRlcmVyMTE6OmdldE1heFZpZXdwb3J0RGltZW5z
aW9uKCkgY29uc3QKLXsKLSAgICAvLyBNYXhpbXVtIHZpZXdwb3J0IHNpemUgbXVzdCBiZSBhdCBs
ZWFzdCBhcyBsYXJnZSBhcyB0aGUgbGFyZ2VzdCByZW5kZXIgYnVmZmVyIChvciBsYXJnZXIpLgot
ICAgIC8vIEluIG91ciBjYXNlIHJldHVybiB0aGUgbWF4aW11bSB0ZXh0dXJlIHNpemUsIHdoaWNo
IGlzIHRoZSBtYXhpbXVtIHJlbmRlciBidWZmZXIgc2l6ZS4KLSAgICBNRVRBX0FTU0VSVChEM0Qx
MV9SRVFfVEVYVFVSRTJEX1VfT1JfVl9ESU1FTlNJT04gKiAyIC0gMSA8PSBEM0QxMV9WSUVXUE9S
VF9CT1VORFNfTUFYKTsKLSAgICBNRVRBX0FTU0VSVChEM0QxMF9SRVFfVEVYVFVSRTJEX1VfT1Jf
Vl9ESU1FTlNJT04gKiAyIC0gMSA8PSBEM0QxMF9WSUVXUE9SVF9CT1VORFNfTUFYKTsKLQotICAg
IHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKLSAgICB7Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xF
VkVMXzExXzA6IAotICAgICAgICByZXR1cm4gRDNEMTFfUkVRX1RFWFRVUkUyRF9VX09SX1ZfRElN
RU5TSU9OOyAgIC8vIDE2Mzg0Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6Ci0g
ICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6IAotICAgICAgICByZXR1cm4gRDNEMTBf
UkVRX1RFWFRVUkUyRF9VX09SX1ZfRElNRU5TSU9OOyAgIC8vIDgxOTIKLSAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7ICAgICAgCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotaW50
IFJlbmRlcmVyMTE6OmdldE1heFRleHR1cmVXaWR0aCgpIGNvbnN0Ci17Ci0gICAgc3dpdGNoICht
RmVhdHVyZUxldmVsKQotICAgIHsKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDog
cmV0dXJuIEQzRDExX1JFUV9URVhUVVJFMkRfVV9PUl9WX0RJTUVOU0lPTjsgICAvLyAxNjM4NAot
ICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgotICAgICAgY2FzZSBEM0RfRkVBVFVS
RV9MRVZFTF8xMF8wOiByZXR1cm4gRDNEMTBfUkVRX1RFWFRVUkUyRF9VX09SX1ZfRElNRU5TSU9O
OyAgIC8vIDgxOTIKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotfQotCi1pbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VGV4dHVyZUhlaWdodCgpIGNvbnN0
Ci17Ci0gICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQotICAgIHsKLSAgICAgIGNhc2UgRDNEX0ZF
QVRVUkVfTEVWRUxfMTFfMDogcmV0dXJuIEQzRDExX1JFUV9URVhUVVJFMkRfVV9PUl9WX0RJTUVO
U0lPTjsgICAvLyAxNjM4NAotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgotICAg
ICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOiByZXR1cm4gRDNEMTBfUkVRX1RFWFRVUkUy
RF9VX09SX1ZfRElNRU5TSU9OOyAgIC8vIDgxOTIKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1ib29sIFJlbmRlcmVyMTE6OmdldDMyQml0
SW5kZXhTdXBwb3J0KCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCi0gICAg
ewotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOiAKLSAgICAgIGNhc2UgRDNEX0ZF
QVRVUkVfTEVWRUxfMTBfMToKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDogcmV0
dXJuIEQzRDEwX1JFUV9EUkFXSU5ERVhFRF9JTkRFWF9DT1VOVF8yX1RPX0VYUCA+PSAzMjsgICAv
LyB0cnVlCi0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci19Ci0KLWludCBSZW5kZXJlcjExOjpnZXRNaW5Td2FwSW50ZXJ2YWwoKSBjb25zdAot
ewotICAgIHJldHVybiAwOwotfQotCi1pbnQgUmVuZGVyZXIxMTo6Z2V0TWF4U3dhcEludGVydmFs
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gNDsKLX0KLQotaW50IFJlbmRlcmVyMTE6OmdldE1heFN1
cHBvcnRlZFNhbXBsZXMoKSBjb25zdAotewotICAgIHJldHVybiBtTWF4U3VwcG9ydGVkU2FtcGxl
czsKLX0KLQotaW50IFJlbmRlcmVyMTE6OmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKERYR0lf
Rk9STUFUIGZvcm1hdCwgdW5zaWduZWQgaW50IHJlcXVlc3RlZCkgY29uc3QKLXsKLSAgICBpZiAo
cmVxdWVzdGVkID09IDApCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBN
dWx0aXNhbXBsZVN1cHBvcnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTXVsdGlzYW1wbGVT
dXBwb3J0TWFwLmZpbmQoZm9ybWF0KTsKLSAgICBpZiAoaXRlciAhPSBtTXVsdGlzYW1wbGVTdXBw
b3J0TWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgY29uc3QgTXVsdGlzYW1wbGVTdXBwb3J0SW5m
byYgaW5mbyA9IGl0ZXItPnNlY29uZDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IHJl
cXVlc3RlZCAtIDE7IGkgPCBEM0QxMV9NQVhfTVVMVElTQU1QTEVfU0FNUExFX0NPVU5UOyBpKysp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpbmZvLnF1YWxpdHlMZXZlbHNbaV0gPiAwKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBpICsgMTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotdW5zaWduZWQgaW50
IFJlbmRlcmVyMTE6OmdldE1heFJlbmRlclRhcmdldHMoKSBjb25zdAotewotICAgIE1FVEFfQVNT
RVJUKEQzRDExX1NJTVVMVEFORU9VU19SRU5ERVJfVEFSR0VUX0NPVU5UIDw9IGdsOjpJTVBMRU1F
TlRBVElPTl9NQVhfRFJBV19CVUZGRVJTKTsKLSAgICBNRVRBX0FTU0VSVChEM0QxMF9TSU1VTFRB
TkVPVVNfUkVOREVSX1RBUkdFVF9DT1VOVCA8PSBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0RSQVdf
QlVGRkVSUyk7Ci0KLSAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCi0gICAgewotICAgICAgY2Fz
ZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgotICAgICAgICByZXR1cm4gRDNEMTFfU0lNVUxUQU5F
T1VTX1JFTkRFUl9UQVJHRVRfQ09VTlQ7ICAvLyA4Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xF
VkVMXzEwXzE6Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6Ci0gICAgICAgIHJl
dHVybiBEM0QxMF9TSU1VTFRBTkVPVVNfUkVOREVSX1RBUkdFVF9DT1VOVDsgIC8vIDgKLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiAxOwotICAg
IH0KLX0KLQotYm9vbCBSZW5kZXJlcjExOjpjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyRCAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc291cmNlKQot
ewotICAgIGlmIChzb3VyY2UgJiYgZGVzdCkKLSAgICB7Ci0gICAgICAgIFRleHR1cmVTdG9yYWdl
MTFfMkQgKnNvdXJjZTExID0gVGV4dHVyZVN0b3JhZ2UxMV8yRDo6bWFrZVRleHR1cmVTdG9yYWdl
MTFfMkQoc291cmNlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgICAgIFRleHR1cmVTdG9y
YWdlMTFfMkQgKmRlc3QxMSA9IFRleHR1cmVTdG9yYWdlMTFfMkQ6Om1ha2VUZXh0dXJlU3RvcmFn
ZTExXzJEKGRlc3QtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKLQotICAgICAgICBtRGV2aWNlQ29u
dGV4dC0+Q29weVJlc291cmNlKGRlc3QxMS0+Z2V0QmFzZVRleHR1cmUoKSwgc291cmNlMTEtPmdl
dEJhc2VUZXh0dXJlKCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyZXIxMTo6Y29weVRvUmVuZGVyVGFyZ2V0KFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJl
ICpzb3VyY2UpCi17Ci0gICAgaWYgKHNvdXJjZSAmJiBkZXN0KQotICAgIHsKLSAgICAgICAgVGV4
dHVyZVN0b3JhZ2UxMV9DdWJlICpzb3VyY2UxMSA9IFRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6bWFr
ZVRleHR1cmVTdG9yYWdlMTFfQ3ViZShzb3VyY2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKLSAg
ICAgICAgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlICpkZXN0MTEgPSBUZXh0dXJlU3RvcmFnZTExX0N1
YmU6Om1ha2VUZXh0dXJlU3RvcmFnZTExX0N1YmUoZGVzdC0+Z2V0U3RvcmFnZUluc3RhbmNlKCkp
OwotCi0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5Db3B5UmVzb3VyY2UoZGVzdDExLT5nZXRCYXNl
VGV4dHVyZSgpLCBzb3VyY2UxMS0+Z2V0QmFzZVRleHR1cmUoKSk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJlcjExOjpj
b3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3Rhbmds
ZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTJEICpzdG9yYWdlLCBHTGludCBsZXZlbCkKLXsKLSAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xv
cmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRSZWFkQ29sb3JidWZmZXIoKTsKLSAgICBpZiAoIWNv
bG9yYnVmZmVyKQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIGNv
bG9yIGJ1ZmZlciBmcm9tIHRoZSBmcmFtZSBidWZmZXIuIik7Ci0gICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAgIH0KLQotICAgIFJlbmRlclRhcmdl
dDExICpzb3VyY2VSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdl
dDExKGNvbG9yYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSk7Ci0gICAgaWYgKCFzb3VyY2VSZW5k
ZXJUYXJnZXQpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVu
ZGVyIHRhcmdldCBmcm9tIHRoZSBmcmFtZSBidWZmZXIuIik7Ci0gICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAgIH0KLQotICAgIElEM0QxMVNoYWRl
clJlc291cmNlVmlldyAqc291cmNlID0gc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRTaGFkZXJSZXNv
dXJjZVZpZXcoKTsKLSAgICBpZiAoIXNvdXJjZSkKLSAgICB7Ci0gICAgICAgIEVSUigiRmFpbGVk
IHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0IHZpZXcgZnJvbSB0aGUgcmVuZGVyIHRhcmdl
dC4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7
Ci0gICAgfQotCi0gICAgVGV4dHVyZVN0b3JhZ2UxMV8yRCAqc3RvcmFnZTExID0gVGV4dHVyZVN0
b3JhZ2UxMV8yRDo6bWFrZVRleHR1cmVTdG9yYWdlMTFfMkQoc3RvcmFnZS0+Z2V0U3RvcmFnZUlu
c3RhbmNlKCkpOwotICAgIGlmICghc3RvcmFnZTExKQotICAgIHsKLSAgICAgICAgRVJSKCJGYWls
ZWQgdG8gcmV0cmlldmUgdGhlIHRleHR1cmUgc3RvcmFnZSBmcm9tIHRoZSBkZXN0aW5hdGlvbi4i
KTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7Ci0g
ICAgfQotCi0gICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3RSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJn
ZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKHN0b3JhZ2UxMS0+Z2V0UmVuZGVyVGFyZ2V0KGxldmVs
KSk7Ci0gICAgaWYgKCFkZXN0UmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgRVJSKCJGYWls
ZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgZGVzdGluYXRpb24gc3Rv
cmFnZS4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxz
ZSk7Ci0gICAgfQotCi0gICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZGVzdCA9IGRlc3RSZW5k
ZXJUYXJnZXQtPmdldFJlbmRlclRhcmdldFZpZXcoKTsKLSAgICBpZiAoIWRlc3QpCi0gICAgewot
ICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCB2aWV3IGZy
b20gdGhlIGRlc3RpbmF0aW9uIHJlbmRlciB0YXJnZXQuIik7Ci0gICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAgIH0KLQotICAgIGdsOjpSZWN0YW5n
bGUgZGVzdFJlY3Q7Ci0gICAgZGVzdFJlY3QueCA9IHhvZmZzZXQ7Ci0gICAgZGVzdFJlY3QueSA9
IHlvZmZzZXQ7Ci0gICAgZGVzdFJlY3Qud2lkdGggPSBzb3VyY2VSZWN0LndpZHRoOwotICAgIGRl
c3RSZWN0LmhlaWdodCA9IHNvdXJjZVJlY3QuaGVpZ2h0OwotCi0gICAgYm9vbCByZXQgPSBjb3B5
VGV4dHVyZShzb3VyY2UsIHNvdXJjZVJlY3QsIHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0V2lkdGgo
KSwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3QsIGRlc3RSZWN0LCBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBkZXN0
UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgZGVzdEZvcm1hdCk7Ci0KLSAgICByZXR1cm4gcmV0
OwotfQotCi1ib29sIFJlbmRlcmVyMTE6OmNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1l
YnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1h
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwpCi17Ci0gICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBmcmFt
ZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVyKCk7Ci0gICAgaWYgKCFjb2xvcmJ1ZmZlcikKLSAg
ICB7Ci0gICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSBjb2xvciBidWZmZXIgZnJv
bSB0aGUgZnJhbWUgYnVmZmVyLiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBSZW5kZXJUYXJnZXQxMSAqc291cmNlUmVu
ZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShjb2xvcmJ1ZmZl
ci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOwotICAgIGlmICghc291cmNlUmVuZGVyVGFyZ2V0KQotICAg
IHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQgZnJv
bSB0aGUgZnJhbWUgYnVmZmVyLiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcg
KnNvdXJjZSA9IHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0U2hhZGVyUmVzb3VyY2VWaWV3KCk7Ci0g
ICAgaWYgKCFzb3VyY2UpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0
aGUgcmVuZGVyIHRhcmdldCB2aWV3IGZyb20gdGhlIHJlbmRlciB0YXJnZXQuIik7Ci0gICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAgIH0KLQotICAg
IFRleHR1cmVTdG9yYWdlMTFfQ3ViZSAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMV9DdWJl
OjptYWtlVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKHN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgp
KTsKLSAgICBpZiAoIXN0b3JhZ2UxMSkKLSAgICB7Ci0gICAgICAgIEVSUigiRmFpbGVkIHRvIHJl
dHJpZXZlIHRoZSB0ZXh0dXJlIHN0b3JhZ2UgZnJvbSB0aGUgZGVzdGluYXRpb24uIik7Ci0gICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAgIH0KLQot
ICAgIFJlbmRlclRhcmdldDExICpkZXN0UmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1h
a2VSZW5kZXJUYXJnZXQxMShzdG9yYWdlMTEtPmdldFJlbmRlclRhcmdldCh0YXJnZXQsIGxldmVs
KSk7Ci0gICAgaWYgKCFkZXN0UmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgRVJSKCJGYWls
ZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgZGVzdGluYXRpb24gc3Rv
cmFnZS4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxz
ZSk7Ci0gICAgfQotCi0gICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZGVzdCA9IGRlc3RSZW5k
ZXJUYXJnZXQtPmdldFJlbmRlclRhcmdldFZpZXcoKTsKLSAgICBpZiAoIWRlc3QpCi0gICAgewot
ICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCB2aWV3IGZy
b20gdGhlIGRlc3RpbmF0aW9uIHJlbmRlciB0YXJnZXQuIik7Ci0gICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAgIH0KLQotICAgIGdsOjpSZWN0YW5n
bGUgZGVzdFJlY3Q7Ci0gICAgZGVzdFJlY3QueCA9IHhvZmZzZXQ7Ci0gICAgZGVzdFJlY3QueSA9
IHlvZmZzZXQ7Ci0gICAgZGVzdFJlY3Qud2lkdGggPSBzb3VyY2VSZWN0LndpZHRoOwotICAgIGRl
c3RSZWN0LmhlaWdodCA9IHNvdXJjZVJlY3QuaGVpZ2h0OwotCi0gICAgYm9vbCByZXQgPSBjb3B5
VGV4dHVyZShzb3VyY2UsIHNvdXJjZVJlY3QsIHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0V2lkdGgo
KSwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3QsIGRlc3RSZWN0LCBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBkZXN0
UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgZGVzdEZvcm1hdCk7Ci0KLSAgICByZXR1cm4gcmV0
OwotfQotCi1ib29sIFJlbmRlcmVyMTE6OmNvcHlUZXh0dXJlKElEM0QxMVNoYWRlclJlc291cmNl
VmlldyAqc291cmNlLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VBcmVhLCB1bnNpZ25lZCBp
bnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3VyY2VIZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmRlc3QsIGNvbnN0IGdsOjpS
ZWN0YW5nbGUgJmRlc3RBcmVhLCB1bnNpZ25lZCBpbnQgZGVzdFdpZHRoLCB1bnNpZ25lZCBpbnQg
ZGVzdEhlaWdodCwgR0xlbnVtIGRlc3RGb3JtYXQpCi17Ci0gICAgSFJFU1VMVCByZXN1bHQ7Ci0K
LSAgICBpZiAoIW1Db3B5UmVzb3VyY2VzSW5pdGlhbGl6ZWQpCi0gICAgewotICAgICAgICBBU1NF
UlQoIW1Db3B5VkIgJiYgIW1Db3B5U2FtcGxlciAmJiAhbUNvcHlJTCAmJiAhbUNvcHlWUyAmJiAh
bUNvcHlSR0JBUFMgJiYgIW1Db3B5UkdCUFMgJiYgIW1Db3B5THVtUFMgJiYgIW1Db3B5THVtQWxw
aGFQUyk7Ci0KLSAgICAgICAgRDNEMTFfQlVGRkVSX0RFU0MgdmJEZXNjOwotICAgICAgICB2YkRl
c2MuQnl0ZVdpZHRoID0gc2l6ZW9mKGQzZDExOjpQb3NpdGlvblRleENvb3JkVmVydGV4KSAqIDQ7
Ci0gICAgICAgIHZiRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZTkFNSUM7Ci0gICAgICAgIHZi
RGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1ZFUlRFWF9CVUZGRVI7Ci0gICAgICAgIHZiRGVz
Yy5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7Ci0gICAgICAgIHZiRGVz
Yy5NaXNjRmxhZ3MgPSAwOwotICAgICAgICB2YkRlc2MuU3RydWN0dXJlQnl0ZVN0cmlkZSA9IDA7
Ci0KLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlQnVmZmVyKCZ2YkRlc2MsIE5VTEws
ICZtQ29weVZCKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAg
ZDNkMTE6OlNldERlYnVnTmFtZShtQ29weVZCLCAiUmVuZGVyZXIxMSBjb3B5IHRleHR1cmUgdmVy
dGV4IGJ1ZmZlciIpOwotCi0gICAgICAgIEQzRDExX1NBTVBMRVJfREVTQyBzYW1wbGVyRGVzYzsK
LSAgICAgICAgc2FtcGxlckRlc2MuRmlsdGVyID0gRDNEMTFfRklMVEVSX01JTl9NQUdfTUlQX0xJ
TkVBUjsKLSAgICAgICAgc2FtcGxlckRlc2MuQWRkcmVzc1UgPSBEM0QxMV9URVhUVVJFX0FERFJF
U1NfQ0xBTVA7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkFkZHJlc3NWID0gRDNEMTFfVEVYVFVSRV9B
RERSRVNTX0NMQU1QOwotICAgICAgICBzYW1wbGVyRGVzYy5BZGRyZXNzVyA9IEQzRDExX1RFWFRV
UkVfQUREUkVTU19DTEFNUDsKLSAgICAgICAgc2FtcGxlckRlc2MuTWlwTE9EQmlhcyA9IDAuMGY7
Ci0gICAgICAgIHNhbXBsZXJEZXNjLk1heEFuaXNvdHJvcHkgPSAwOwotICAgICAgICBzYW1wbGVy
RGVzYy5Db21wYXJpc29uRnVuYyA9IEQzRDExX0NPTVBBUklTT05fTkVWRVI7Ci0gICAgICAgIHNh
bXBsZXJEZXNjLkJvcmRlckNvbG9yWzBdID0gMC4wZjsKLSAgICAgICAgc2FtcGxlckRlc2MuQm9y
ZGVyQ29sb3JbMV0gPSAwLjBmOwotICAgICAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclsyXSA9
IDAuMGY7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzNdID0gMC4wZjsKLSAgICAg
ICAgc2FtcGxlckRlc2MuTWluTE9EID0gMC4wZjsKLSAgICAgICAgc2FtcGxlckRlc2MuTWF4TE9E
ID0gMC4wZjsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVTYW1wbGVyU3RhdGUo
JnNhbXBsZXJEZXNjLCAmbUNvcHlTYW1wbGVyKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ29weVNhbXBsZXIsICJSZW5k
ZXJlcjExIGNvcHkgc2FtcGxlciIpOwotCi0gICAgICAgIEQzRDExX0lOUFVUX0VMRU1FTlRfREVT
QyBxdWFkTGF5b3V0W10gPQotICAgICAgICB7Ci0gICAgICAgICAgICB7ICJQT1NJVElPTiIsIDAs
IERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgMCwgMCwgRDNEMTFfSU5QVVRfUEVSX1ZFUlRFWF9E
QVRBLCAwIH0sCi0gICAgICAgICAgICB7ICJURVhDT09SRCIsIDAsIERYR0lfRk9STUFUX1IzMkcz
Ml9GTE9BVCwgMCwgOCwgRDNEMTFfSU5QVVRfUEVSX1ZFUlRFWF9EQVRBLCAwIH0sCi0gICAgICAg
IH07Ci0KLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlSW5wdXRMYXlvdXQocXVhZExh
eW91dCwgMiwgZ19WU19QYXNzdGhyb3VnaCwgc2l6ZW9mKGdfVlNfUGFzc3Rocm91Z2gpLCAmbUNv
cHlJTCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDEx
OjpTZXREZWJ1Z05hbWUobUNvcHlJTCwgIlJlbmRlcmVyMTEgY29weSB0ZXh0dXJlIGlucHV0IGxh
eW91dCIpOwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVZlcnRleFNoYWRlcihn
X1ZTX1Bhc3N0aHJvdWdoLCBzaXplb2YoZ19WU19QYXNzdGhyb3VnaCksIE5VTEwsICZtQ29weVZT
KTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNl
dERlYnVnTmFtZShtQ29weVZTLCAiUmVuZGVyZXIxMSBjb3B5IHRleHR1cmUgdmVydGV4IHNoYWRl
ciIpOwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdfUFNf
UGFzc3Rocm91Z2hSR0JBLCBzaXplb2YoZ19QU19QYXNzdGhyb3VnaFJHQkEpLCBOVUxMLCAmbUNv
cHlSR0JBUFMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBk
M2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5UkdCQVBTLCAiUmVuZGVyZXIxMSBjb3B5IHRleHR1cmUg
UkdCQSBwaXhlbCBzaGFkZXIiKTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQ
aXhlbFNoYWRlcihnX1BTX1Bhc3N0aHJvdWdoUkdCLCBzaXplb2YoZ19QU19QYXNzdGhyb3VnaFJH
QiksIE5VTEwsICZtQ29weVJHQlBTKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ29weVJHQlBTLCAiUmVuZGVyZXIxMSBj
b3B5IHRleHR1cmUgUkdCIHBpeGVsIHNoYWRlciIpOwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZp
Y2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdfUFNfUGFzc3Rocm91Z2hMdW0sIHNpemVvZihnX1BTX1Bh
c3N0aHJvdWdoTHVtKSwgTlVMTCwgJm1Db3B5THVtUFMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5THVtUFMsICJS
ZW5kZXJlcjExIGNvcHkgdGV4dHVyZSBsdW1pbmFuY2UgcGl4ZWwgc2hhZGVyIik7Ci0KLSAgICAg
ICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19QYXNzdGhyb3VnaEx1
bUFscGhhLCBzaXplb2YoZ19QU19QYXNzdGhyb3VnaEx1bUFscGhhKSwgTlVMTCwgJm1Db3B5THVt
QWxwaGFQUyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQz
ZDExOjpTZXREZWJ1Z05hbWUobUNvcHlMdW1BbHBoYVBTLCAiUmVuZGVyZXIxMSBjb3B5IHRleHR1
cmUgbHVtaW5hbmNlIGFscGhhIHBpeGVsIHNoYWRlciIpOwotCi0gICAgICAgIG1Db3B5UmVzb3Vy
Y2VzSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KLQotICAgIC8vIFZlcmlmeSB0aGUgc291cmNl
IGFuZCBkZXN0aW5hdGlvbiBhcmVhIHNpemVzCi0gICAgaWYgKHNvdXJjZUFyZWEueCA8IDAgfHwg
c291cmNlQXJlYS54ICsgc291cmNlQXJlYS53aWR0aCA+IHN0YXRpY19jYXN0PGludD4oc291cmNl
V2lkdGgpIHx8Ci0gICAgICAgIHNvdXJjZUFyZWEueSA8IDAgfHwgc291cmNlQXJlYS55ICsgc291
cmNlQXJlYS5oZWlnaHQgPiBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUhlaWdodCkgfHwKLSAgICAg
ICAgZGVzdEFyZWEueCA8IDAgfHwgZGVzdEFyZWEueCArIGRlc3RBcmVhLndpZHRoID4gc3RhdGlj
X2Nhc3Q8aW50PihkZXN0V2lkdGgpIHx8Ci0gICAgICAgIGRlc3RBcmVhLnkgPCAwIHx8IGRlc3RB
cmVhLnkgKyBkZXN0QXJlYS5oZWlnaHQgPiBzdGF0aWNfY2FzdDxpbnQ+KGRlc3RIZWlnaHQpKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFLCBmYWxzZSk7
Ci0gICAgfQotCi0gICAgLy8gU2V0IHZlcnRpY2VzCi0gICAgRDNEMTFfTUFQUEVEX1NVQlJFU09V
UkNFIG1hcHBlZFJlc291cmNlOwotICAgIHJlc3VsdCA9IG1EZXZpY2VDb250ZXh0LT5NYXAobUNv
cHlWQiwgMCwgRDNEMTFfTUFQX1dSSVRFX0RJU0NBUkQsIDAsICZtYXBwZWRSZXNvdXJjZSk7Ci0g
ICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gbWFw
IHZlcnRleCBidWZmZXIgZm9yIHRleHR1cmUgY29weSwgSFJFU1VMVDogMHglWC4iLCByZXN1bHQp
OwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKLSAg
ICB9Ci0KLSAgICBkM2QxMTo6UG9zaXRpb25UZXhDb29yZFZlcnRleCAqdmVydGljZXMgPSBzdGF0
aWNfY2FzdDxkM2QxMTo6UG9zaXRpb25UZXhDb29yZFZlcnRleCo+KG1hcHBlZFJlc291cmNlLnBE
YXRhKTsKLQotICAgIC8vIENyZWF0ZSBhIHF1YWQgaW4gaG9tb2dlbmVvdXMgY29vcmRpbmF0ZXMK
LSAgICBmbG9hdCB4MSA9IChkZXN0QXJlYS54IC8gZmxvYXQoZGVzdFdpZHRoKSkgKiAyLjBmIC0g
MS4wZjsKLSAgICBmbG9hdCB5MSA9ICgoZGVzdEhlaWdodCAtIGRlc3RBcmVhLnkgLSBkZXN0QXJl
YS5oZWlnaHQpIC8gZmxvYXQoZGVzdEhlaWdodCkpICogMi4wZiAtIDEuMGY7Ci0gICAgZmxvYXQg
eDIgPSAoKGRlc3RBcmVhLnggKyBkZXN0QXJlYS53aWR0aCkgLyBmbG9hdChkZXN0V2lkdGgpKSAq
IDIuMGYgLSAxLjBmOwotICAgIGZsb2F0IHkyID0gKChkZXN0SGVpZ2h0IC0gZGVzdEFyZWEueSkg
LyBmbG9hdChkZXN0SGVpZ2h0KSkgKiAyLjBmIC0gMS4wZjsKLQotICAgIGZsb2F0IHUxID0gc291
cmNlQXJlYS54IC8gZmxvYXQoc291cmNlV2lkdGgpOwotICAgIGZsb2F0IHYxID0gc291cmNlQXJl
YS55IC8gZmxvYXQoc291cmNlSGVpZ2h0KTsKLSAgICBmbG9hdCB1MiA9IChzb3VyY2VBcmVhLngg
KyBzb3VyY2VBcmVhLndpZHRoKSAvIGZsb2F0KHNvdXJjZVdpZHRoKTsKLSAgICBmbG9hdCB2MiA9
IChzb3VyY2VBcmVhLnkgKyBzb3VyY2VBcmVhLmhlaWdodCkgLyBmbG9hdChzb3VyY2VIZWlnaHQp
OwotCi0gICAgZDNkMTE6OlNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgoJnZlcnRpY2VzWzBdLCB4
MSwgeTEsIHUxLCB2Mik7Ci0gICAgZDNkMTE6OlNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgoJnZl
cnRpY2VzWzFdLCB4MSwgeTIsIHUxLCB2MSk7Ci0gICAgZDNkMTE6OlNldFBvc2l0aW9uVGV4Q29v
cmRWZXJ0ZXgoJnZlcnRpY2VzWzJdLCB4MiwgeTEsIHUyLCB2Mik7Ci0gICAgZDNkMTE6OlNldFBv
c2l0aW9uVGV4Q29vcmRWZXJ0ZXgoJnZlcnRpY2VzWzNdLCB4MiwgeTIsIHUyLCB2MSk7Ci0KLSAg
ICBtRGV2aWNlQ29udGV4dC0+VW5tYXAobUNvcHlWQiwgMCk7Ci0KLSAgICBzdGF0aWMgVUlOVCBz
dHJpZGUgPSBzaXplb2YoZDNkMTE6OlBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgpOwotICAgIHN0YXRp
YyBVSU5UIHN0YXJ0SWR4ID0gMDsKLSAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRWZXJ0ZXhCdWZm
ZXJzKDAsIDEsICZtQ29weVZCLCAmc3RyaWRlLCAmc3RhcnRJZHgpOwotCi0gICAgLy8gQXBwbHkg
c3RhdGUKLSAgICBtRGV2aWNlQ29udGV4dC0+T01TZXRCbGVuZFN0YXRlKE5VTEwsIE5VTEwsIDB4
RkZGRkZGRik7Ci0gICAgbURldmljZUNvbnRleHQtPk9NU2V0RGVwdGhTdGVuY2lsU3RhdGUoTlVM
TCwgMHhGRkZGRkZGRik7Ci0gICAgbURldmljZUNvbnRleHQtPlJTU2V0U3RhdGUoTlVMTCk7Ci0K
LSAgICAvLyBBcHBseSBzaGFkZXJzCi0gICAgbURldmljZUNvbnRleHQtPklBU2V0SW5wdXRMYXlv
dXQobUNvcHlJTCk7Ci0gICAgbURldmljZUNvbnRleHQtPklBU2V0UHJpbWl0aXZlVG9wb2xvZ3ko
RDNEX1BSSU1JVElWRV9UT1BPTE9HWV9UUklBTkdMRVNUUklQKTsKLSAgICBtRGV2aWNlQ29udGV4
dC0+VlNTZXRTaGFkZXIobUNvcHlWUywgTlVMTCwgMCk7Ci0KLSAgICBJRDNEMTFQaXhlbFNoYWRl
ciAqcHMgPSBOVUxMOwotICAgIHN3aXRjaChkZXN0Rm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2Ug
R0xfUkdCQTogICAgICAgICAgICBwcyA9IG1Db3B5UkdCQVBTOyAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX1JHQjogICAgICAgICAgICAgcHMgPSBtQ29weVJHQlBTOyAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9BTFBIQTogICAgICAgICAgIHBzID0gbUNvcHlSR0JBUFM7ICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6ICAgICAgICBwcyA9IG1Db3B5UkdCQVBTOyAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTogICAgICAgcHMgPSBtQ29weUx1bVBTOyAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6IHBzID0gbUNvcHlMdW1BbHBo
YVBTOyBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICBwcyA9IE5VTEw7ICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgbURldmljZUNvbnRleHQtPlBTU2V0U2hhZGVy
KHBzLCBOVUxMLCAwKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIoTlVMTCwgTlVM
TCwgMCk7Ci0KLSAgICAvLyBVbnNldCB0aGUgY3VycmVudGx5IGJvdW5kIHNoYWRlciByZXNvdXJj
ZSB0byBhdm9pZCBjb25mbGljdHMKLSAgICBzdGF0aWMgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3
ICpjb25zdCBudWxsU1JWID0gTlVMTDsKLSAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXJS
ZXNvdXJjZXMoMCwgMSwgJm51bGxTUlYpOwotCi0gICAgLy8gQXBwbHkgcmVuZGVyIHRhcmdldAot
ICAgIHNldE9uZVRpbWVSZW5kZXJUYXJnZXQoZGVzdCk7Ci0KLSAgICAvLyBTZXQgdGhlIHZpZXdw
b3J0Ci0gICAgRDNEMTFfVklFV1BPUlQgdmlld3BvcnQ7Ci0gICAgdmlld3BvcnQuVG9wTGVmdFgg
PSAwOwotICAgIHZpZXdwb3J0LlRvcExlZnRZID0gMDsKLSAgICB2aWV3cG9ydC5XaWR0aCA9IGRl
c3RXaWR0aDsKLSAgICB2aWV3cG9ydC5IZWlnaHQgPSBkZXN0SGVpZ2h0OwotICAgIHZpZXdwb3J0
Lk1pbkRlcHRoID0gMC4wZjsKLSAgICB2aWV3cG9ydC5NYXhEZXB0aCA9IDEuMGY7Ci0gICAgbURl
dmljZUNvbnRleHQtPlJTU2V0Vmlld3BvcnRzKDEsICZ2aWV3cG9ydCk7Ci0KLSAgICAvLyBBcHBs
eSB0ZXh0dXJlcwotICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlclJlc291cmNlcygwLCAx
LCAmc291cmNlKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTYW1wbGVycygwLCAxLCAmbUNv
cHlTYW1wbGVyKTsKLQotICAgIC8vIERyYXcgdGhlIHF1YWQKLSAgICBtRGV2aWNlQ29udGV4dC0+
RHJhdyg0LCAwKTsKLQotICAgIC8vIFVuYmluZCB0ZXh0dXJlcyBhbmQgcmVuZGVyIHRhcmdldHMg
YW5kIHZlcnRleCBidWZmZXIKLSAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXJSZXNvdXJj
ZXMoMCwgMSwgJm51bGxTUlYpOwotCi0gICAgdW5hcHBseVJlbmRlclRhcmdldHMoKTsKLQotICAg
IFVJTlQgemVybyA9IDA7Ci0gICAgSUQzRDExQnVmZmVyICpjb25zdCBudWxsQnVmZmVyID0gTlVM
TDsKLSAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRWZXJ0ZXhCdWZmZXJzKDAsIDEsICZudWxsQnVm
ZmVyLCAmemVybywgJnplcm8pOwotCi0gICAgbWFya0FsbFN0YXRlRGlydHkoKTsKLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi12b2lkIFJlbmRlcmVyMTE6OnVuYXBwbHlSZW5kZXJUYXJnZXRzKCkK
LXsKLSAgICBzZXRPbmVUaW1lUmVuZGVyVGFyZ2V0KE5VTEwpOwotfQotCi12b2lkIFJlbmRlcmVy
MTE6OnNldE9uZVRpbWVSZW5kZXJUYXJnZXQoSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqcmVuZGVy
VGFyZ2V0VmlldykKLXsKLSAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpydHZBcnJheVtnbDo6
SU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSU10gPSB7TlVMTH07Ci0KLSAgICBydHZBcnJh
eVswXSA9IHJlbmRlclRhcmdldFZpZXc7Ci0KLSAgICBtRGV2aWNlQ29udGV4dC0+T01TZXRSZW5k
ZXJUYXJnZXRzKGdldE1heFJlbmRlclRhcmdldHMoKSwgcnR2QXJyYXksIE5VTEwpOwotCi0gICAg
Ly8gRG8gbm90IHByZXNlcnZlIHRoZSBzZXJpYWwgZm9yIHRoaXMgb25lLXRpbWUtdXNlIHJlbmRl
ciB0YXJnZXQKLSAgICBmb3IgKHVuc2lnbmVkIGludCBydEluZGV4ID0gMDsgcnRJbmRleCA8IGds
OjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTOyBydEluZGV4KyspCi0gICAgewotICAg
ICAgICBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbHNbcnRJbmRleF0gPSAwOwotICAgIH0KLX0K
LQotUmVuZGVyVGFyZ2V0ICpSZW5kZXJlcjExOjpjcmVhdGVSZW5kZXJUYXJnZXQoU3dhcENoYWlu
ICpzd2FwQ2hhaW4sIGJvb2wgZGVwdGgpCi17Ci0gICAgU3dhcENoYWluMTEgKnN3YXBDaGFpbjEx
ID0gU3dhcENoYWluMTE6Om1ha2VTd2FwQ2hhaW4xMShzd2FwQ2hhaW4pOwotICAgIFJlbmRlclRh
cmdldDExICpyZW5kZXJUYXJnZXQgPSBOVUxMOwotCi0gICAgaWYgKGRlcHRoKQotICAgIHsKLSAg
ICAgICAgLy8gTm90ZTogZGVwdGggc3RlbmNpbCBtYXkgYmUgTlVMTCBmb3IgMCBzaXplZCBzdXJm
YWNlcwotICAgICAgICByZW5kZXJUYXJnZXQgPSBuZXcgUmVuZGVyVGFyZ2V0MTEodGhpcywgc3dh
cENoYWluMTEtPmdldERlcHRoU3RlbmNpbCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldERlcHRoU3RlbmNpbFRleHR1cmUoKSwgTlVM
TCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBDaGFpbjEx
LT5nZXRXaWR0aCgpLCBzd2FwQ2hhaW4xMS0+Z2V0SGVpZ2h0KCkpOwotICAgIH0KLSAgICBlbHNl
Ci0gICAgewotICAgICAgICAvLyBOb3RlOiByZW5kZXIgdGFyZ2V0IG1heSBiZSBOVUxMIGZvciAw
IHNpemVkIHN1cmZhY2VzCi0gICAgICAgIHJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQx
MSh0aGlzLCBzd2FwQ2hhaW4xMS0+Z2V0UmVuZGVyVGFyZ2V0KCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwQ2hhaW4xMS0+Z2V0T2Zmc2NyZWVuVGV4dHVy
ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhcENoYWlu
MTEtPmdldFJlbmRlclRhcmdldFNoYWRlclJlc291cmNlKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzd2FwQ2hhaW4xMS0+Z2V0V2lkdGgoKSwgc3dhcENoYWlu
MTEtPmdldEhlaWdodCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlbmRlclRhcmdldDsKLX0KLQot
UmVuZGVyVGFyZ2V0ICpSZW5kZXJlcjExOjpjcmVhdGVSZW5kZXJUYXJnZXQoaW50IHdpZHRoLCBp
bnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMsIGJvb2wgZGVwdGgpCi17
Ci0gICAgUmVuZGVyVGFyZ2V0MTEgKnJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQxMSh0
aGlzLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHNhbXBsZXMsIGRlcHRoKTsKLSAgICByZXR1cm4g
cmVuZGVyVGFyZ2V0OwotfQotCi1TaGFkZXJFeGVjdXRhYmxlICpSZW5kZXJlcjExOjpsb2FkRXhl
Y3V0YWJsZShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgcng6OlNoYWRlclR5
cGUgdHlwZSkKLXsKLSAgICBTaGFkZXJFeGVjdXRhYmxlMTEgKmV4ZWN1dGFibGUgPSBOVUxMOwot
Ci0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2Ugcng6OlNIQURFUl9WRVJURVg6
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIElEM0QxMVZlcnRleFNoYWRlciAqdnNoYWRlciA9IE5V
TEw7Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVZlcnRleFNo
YWRlcihmdW5jdGlvbiwgbGVuZ3RoLCBOVUxMLCAmdnNoYWRlcik7Ci0gICAgICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgICAgICBpZiAodnNoYWRlcikKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3IFNoYWRlckV4ZWN1dGFi
bGUxMShmdW5jdGlvbiwgbGVuZ3RoLCB2c2hhZGVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ugcng6OlNIQURFUl9QSVhFTDoKLSAgICAgICAg
ewotICAgICAgICAgICAgSUQzRDExUGl4ZWxTaGFkZXIgKnBzaGFkZXIgPSBOVUxMOwotICAgICAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihmdW5jdGlv
biwgbGVuZ3RoLCBOVUxMLCAmcHNoYWRlcik7Ci0gICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOwotCi0gICAgICAgICAgICBpZiAocHNoYWRlcikKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3IFNoYWRlckV4ZWN1dGFibGUxMShmdW5jdGlv
biwgbGVuZ3RoLCBwc2hhZGVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2Ugcng6OlNIQURFUl9HRU9NRVRSWToKLSAgICAgICAgewotICAgICAg
ICAgICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmdzaGFkZXIgPSBOVUxMOwotICAgICAgICAgICAg
SFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVHZW9tZXRyeVNoYWRlcihmdW5jdGlvbiwg
bGVuZ3RoLCBOVUxMLCAmZ3NoYWRlcik7Ci0gICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOwotCi0gICAgICAgICAgICBpZiAoZ3NoYWRlcikKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3IFNoYWRlckV4ZWN1dGFibGUxMShmdW5jdGlvbiwg
bGVuZ3RoLCBnc2hhZGVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLQotICAgIHJldHVybiBleGVjdXRhYmxlOwotfQotCi1TaGFkZXJFeGVjdXRhYmxl
ICpSZW5kZXJlcjExOjpjb21waWxlVG9FeGVjdXRhYmxlKGdsOjpJbmZvTG9nICZpbmZvTG9nLCBj
b25zdCBjaGFyICpzaGFkZXJITFNMLCByeDo6U2hhZGVyVHlwZSB0eXBlLCBEM0RXb3JrYXJvdW5k
VHlwZSB3b3JrYXJvdW5kKQotewotICAgIGNvbnN0IGNoYXIgKnByb2ZpbGUgPSBOVUxMOwotCi0g
ICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2Ugcng6OlNIQURFUl9WRVJURVg6Ci0g
ICAgICAgIHByb2ZpbGUgPSAidnNfNF8wIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIHJ4
OjpTSEFERVJfUElYRUw6Ci0gICAgICAgIHByb2ZpbGUgPSAicHNfNF8wIjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIHJ4OjpTSEFERVJfR0VPTUVUUlk6Ci0gICAgICAgIHByb2ZpbGUgPSAi
Z3NfNF8wIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNI
QUJMRSgpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBJRDNEQmxvYiAqYmlu
YXJ5ID0gKElEM0RCbG9iKiljb21waWxlVG9CaW5hcnkoaW5mb0xvZywgc2hhZGVySExTTCwgcHJv
ZmlsZSwgRDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwwLCBmYWxzZSk7Ci0gICAgaWYgKCFi
aW5hcnkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgU2hhZGVyRXhlY3V0YWJsZSAqZXhl
Y3V0YWJsZSA9IGxvYWRFeGVjdXRhYmxlKChEV09SRCAqKWJpbmFyeS0+R2V0QnVmZmVyUG9pbnRl
cigpLCBiaW5hcnktPkdldEJ1ZmZlclNpemUoKSwgdHlwZSk7Ci0gICAgYmluYXJ5LT5SZWxlYXNl
KCk7Ci0KLSAgICByZXR1cm4gZXhlY3V0YWJsZTsKLX0KLQotVmVydGV4QnVmZmVyICpSZW5kZXJl
cjExOjpjcmVhdGVWZXJ0ZXhCdWZmZXIoKQotewotICAgIHJldHVybiBuZXcgVmVydGV4QnVmZmVy
MTEodGhpcyk7Ci19Ci0KLUluZGV4QnVmZmVyICpSZW5kZXJlcjExOjpjcmVhdGVJbmRleEJ1ZmZl
cigpCi17Ci0gICAgcmV0dXJuIG5ldyBJbmRleEJ1ZmZlcjExKHRoaXMpOwotfQotCi1CdWZmZXJT
dG9yYWdlICpSZW5kZXJlcjExOjpjcmVhdGVCdWZmZXJTdG9yYWdlKCkKLXsKLSAgICByZXR1cm4g
bmV3IEJ1ZmZlclN0b3JhZ2UxMSh0aGlzKTsKLX0KLQotUXVlcnlJbXBsICpSZW5kZXJlcjExOjpj
cmVhdGVRdWVyeShHTGVudW0gdHlwZSkKLXsKLSAgICByZXR1cm4gbmV3IFF1ZXJ5MTEodGhpcywg
dHlwZSk7Ci19Ci0KLUZlbmNlSW1wbCAqUmVuZGVyZXIxMTo6Y3JlYXRlRmVuY2UoKQotewotICAg
IHJldHVybiBuZXcgRmVuY2UxMSh0aGlzKTsKLX0KLQotYm9vbCBSZW5kZXJlcjExOjpnZXRSZW5k
ZXJUYXJnZXRSZXNvdXJjZShnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciwgdW5zaWduZWQg
aW50ICpzdWJyZXNvdXJjZUluZGV4LCBJRDNEMTFUZXh0dXJlMkQgKipyZXNvdXJjZSkKLXsKLSAg
ICBBU1NFUlQoY29sb3JidWZmZXIgIT0gTlVMTCk7Ci0KLSAgICBSZW5kZXJUYXJnZXQxMSAqcmVu
ZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShjb2xvcmJ1ZmZl
ci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOwotICAgIGlmIChyZW5kZXJUYXJnZXQpCi0gICAgewotICAg
ICAgICAqc3VicmVzb3VyY2VJbmRleCA9IHJlbmRlclRhcmdldC0+Z2V0U3VicmVzb3VyY2VJbmRl
eCgpOwotCi0gICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmNvbG9yQnVmZmVyUlRWID0g
cmVuZGVyVGFyZ2V0LT5nZXRSZW5kZXJUYXJnZXRWaWV3KCk7Ci0gICAgICAgIGlmIChjb2xvckJ1
ZmZlclJUVikKLSAgICAgICAgewotICAgICAgICAgICAgSUQzRDExUmVzb3VyY2UgKnRleHR1cmVS
ZXNvdXJjZSA9IE5VTEw7Ci0gICAgICAgICAgICBjb2xvckJ1ZmZlclJUVi0+R2V0UmVzb3VyY2Uo
JnRleHR1cmVSZXNvdXJjZSk7Ci0KLSAgICAgICAgICAgIGlmICh0ZXh0dXJlUmVzb3VyY2UpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSB0ZXh0dXJlUmVz
b3VyY2UtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JRDNEMTFUZXh0dXJlMkQsICh2b2lkKiopcmVzb3Vy
Y2UpOwotICAgICAgICAgICAgICAgIHRleHR1cmVSZXNvdXJjZS0+UmVsZWFzZSgpOwotCi0gICAg
ICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEVS
UigiRmFpbGVkIHRvIGV4dHJhY3QgdGhlIElEM0QxMVRleHR1cmUyRCBmcm9tIHRoZSByZW5kZXIg
dGFyZ2V0IHJlc291cmNlLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAiSFJFU1VMVDogMHgl
WC4iLCByZXN1bHQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJlcjExOjpibGl0
UmVjdChnbDo6RnJhbWVidWZmZXIgKnJlYWRUYXJnZXQsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJl
YWRSZWN0LCBnbDo6RnJhbWVidWZmZXIgKmRyYXdUYXJnZXQsIGNvbnN0IGdsOjpSZWN0YW5nbGUg
JmRyYXdSZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJsaXRSZW5kZXJUYXJn
ZXQsIGJvb2wgYmxpdERlcHRoU3RlbmNpbCkKLXsKLSAgICBpZiAoYmxpdFJlbmRlclRhcmdldCkK
LSAgICB7Ci0gICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlYWRCdWZmZXIgPSByZWFkVGFyZ2V0
LT5nZXRSZWFkQ29sb3JidWZmZXIoKTsKLQotICAgICAgICBpZiAoIXJlYWRCdWZmZXIpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZWFkIGJ1ZmZl
ciBmcm9tIHRoZSByZWFkIGZyYW1lYnVmZmVyLiIpOwotICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZW5k
ZXJUYXJnZXQgKnJlYWRSZW5kZXJUYXJnZXQgPSByZWFkQnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQo
KTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQgPSAwOyBjb2xv
ckF0dGFjaG1lbnQgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSUzsgY29sb3JB
dHRhY2htZW50KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChkcmF3VGFyZ2V0LT5pc0Vu
YWJsZWRDb2xvckF0dGFjaG1lbnQoY29sb3JBdHRhY2htZW50KSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpkcmF3QnVmZmVyID0gZHJhd1RhcmdldC0+
Z2V0Q29sb3JidWZmZXIoY29sb3JBdHRhY2htZW50KTsKLQotICAgICAgICAgICAgICAgIGlmICgh
ZHJhd0J1ZmZlcikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEVSUigi
RmFpbGVkIHRvIHJldHJpZXZlIHRoZSBkcmF3IGJ1ZmZlciBmcm9tIHRoZSBkcmF3IGZyYW1lYnVm
ZmVyLiIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlksIGZhbHNlKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBSZW5k
ZXJUYXJnZXQgKmRyYXdSZW5kZXJUYXJnZXQgPSBkcmF3QnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQo
KTsKLQotICAgICAgICAgICAgICAgIGlmICghYmxpdFJlbmRlcmJ1ZmZlclJlY3QocmVhZFJlY3Qs
IGRyYXdSZWN0LCByZWFkUmVuZGVyVGFyZ2V0LCBkcmF3UmVuZGVyVGFyZ2V0LCBmYWxzZSkpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KGJsaXREZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZWFk
QnVmZmVyID0gcmVhZFRhcmdldC0+Z2V0RGVwdGhPclN0ZW5jaWxidWZmZXIoKTsKLSAgICAgICAg
Z2w6OlJlbmRlcmJ1ZmZlciAqZHJhd0J1ZmZlciA9IGRyYXdUYXJnZXQtPmdldERlcHRoT3JTdGVu
Y2lsYnVmZmVyKCk7Ci0KLSAgICAgICAgaWYgKCFyZWFkQnVmZmVyKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVhZCBkZXB0aC1zdGVuY2lsIGJ1
ZmZlciBmcm9tIHRoZSByZWFkIGZyYW1lYnVmZmVyLiIpOwotICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoIWRyYXdCdWZmZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIHJl
dHJpZXZlIHRoZSBkcmF3IGRlcHRoLXN0ZW5jaWwgYnVmZmVyIGZyb20gdGhlIGRyYXcgZnJhbWVi
dWZmZXIuIik7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlks
IGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlbmRlclRhcmdldCAqcmVhZFJlbmRlclRh
cmdldCA9IHJlYWRCdWZmZXItPmdldERlcHRoU3RlbmNpbCgpOwotICAgICAgICBSZW5kZXJUYXJn
ZXQgKmRyYXdSZW5kZXJUYXJnZXQgPSBkcmF3QnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsKLQot
ICAgICAgICBpZiAoIWJsaXRSZW5kZXJidWZmZXJSZWN0KHJlYWRSZWN0LCBkcmF3UmVjdCwgcmVh
ZFJlbmRlclRhcmdldCwgZHJhd1JlbmRlclRhcmdldCwgdHJ1ZSkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi12b2lkIFJlbmRlcmVyMTE6OnJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFt
ZWJ1ZmZlciwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMc2l6ZWkgb3V0cHV0UGl0Y2gsIGJvb2wgcGFja1JldmVyc2VSb3dPcmRlciwgR0xpbnQgcGFj
a0FsaWdubWVudCwgdm9pZCogcGl4ZWxzKQotewotICAgIElEM0QxMVRleHR1cmUyRCAqY29sb3JC
dWZmZXJUZXh0dXJlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBpbnQgc3VicmVzb3VyY2VJbmRleCA9
IDA7Ci0KLSAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5n
ZXRSZWFkQ29sb3JidWZmZXIoKTsKLQotICAgIGlmIChjb2xvcmJ1ZmZlciAmJiBnZXRSZW5kZXJU
YXJnZXRSZXNvdXJjZShjb2xvcmJ1ZmZlciwgJnN1YnJlc291cmNlSW5kZXgsICZjb2xvckJ1ZmZl
clRleHR1cmUpKQotICAgIHsKLSAgICAgICAgZ2w6OlJlY3RhbmdsZSBhcmVhOwotICAgICAgICBh
cmVhLnggPSB4OwotICAgICAgICBhcmVhLnkgPSB5OwotICAgICAgICBhcmVhLndpZHRoID0gd2lk
dGg7Ci0gICAgICAgIGFyZWEuaGVpZ2h0ID0gaGVpZ2h0OwotCi0gICAgICAgIHJlYWRUZXh0dXJl
RGF0YShjb2xvckJ1ZmZlclRleHR1cmUsIHN1YnJlc291cmNlSW5kZXgsIGFyZWEsIGZvcm1hdCwg
dHlwZSwgb3V0cHV0UGl0Y2gsCi0gICAgICAgICAgICAgICAgICAgICAgICBwYWNrUmV2ZXJzZVJv
d09yZGVyLCBwYWNrQWxpZ25tZW50LCBwaXhlbHMpOwotCi0gICAgICAgIGNvbG9yQnVmZmVyVGV4
dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICBjb2xvckJ1ZmZlclRleHR1cmUgPSBOVUxMOwotICAg
IH0KLX0KLQotSW1hZ2UgKlJlbmRlcmVyMTE6OmNyZWF0ZUltYWdlKCkKLXsKLSAgICByZXR1cm4g
bmV3IEltYWdlMTEoKTsKLX0KLQotdm9pZCBSZW5kZXJlcjExOjpnZW5lcmF0ZU1pcG1hcChJbWFn
ZSAqZGVzdCwgSW1hZ2UgKnNyYykKLXsKLSAgICBJbWFnZTExICpkZXN0MTEgPSBJbWFnZTExOjpt
YWtlSW1hZ2UxMShkZXN0KTsKLSAgICBJbWFnZTExICpzcmMxMSA9IEltYWdlMTE6Om1ha2VJbWFn
ZTExKHNyYyk7Ci0gICAgSW1hZ2UxMTo6Z2VuZXJhdGVNaXBtYXAoZGVzdDExLCBzcmMxMSk7Ci19
Ci0KLVRleHR1cmVTdG9yYWdlICpSZW5kZXJlcjExOjpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKFN3
YXBDaGFpbiAqc3dhcENoYWluKQotewotICAgIFN3YXBDaGFpbjExICpzd2FwQ2hhaW4xMSA9IFN3
YXBDaGFpbjExOjptYWtlU3dhcENoYWluMTEoc3dhcENoYWluKTsKLSAgICByZXR1cm4gbmV3IFRl
eHR1cmVTdG9yYWdlMTFfMkQodGhpcywgc3dhcENoYWluMTEpOwotfQotCi1UZXh0dXJlU3RvcmFn
ZSAqUmVuZGVyZXIxMTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChpbnQgbGV2ZWxzLCBHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3Jh
Z2UxMV8yRCh0aGlzLCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB1c2FnZSwgZm9yY2VSZW5kZXJh
YmxlLCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyMTE6OmNy
ZWF0ZVRleHR1cmVTdG9yYWdlQ3ViZShpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKQotewotICAgIHJl
dHVybiBuZXcgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKHRoaXMsIGxldmVscywgaW50ZXJuYWxmb3Jt
YXQsIHVzYWdlLCBmb3JjZVJlbmRlcmFibGUsIHNpemUpOwotfQotCi1zdGF0aWMgaW5saW5lIHVu
c2lnbmVkIGludCBnZXRGYXN0UGl4ZWxDb3B5U2l6ZShEWEdJX0ZPUk1BVCBzb3VyY2VGb3JtYXQs
IEdMZW51bSBkZXN0Rm9ybWF0LCBHTGVudW0gZGVzdFR5cGUpCi17Ci0gICAgaWYgKHNvdXJjZUZv
cm1hdCA9PSBEWEdJX0ZPUk1BVF9BOF9VTk9STSAmJgotICAgICAgICBkZXN0Rm9ybWF0ICAgPT0g
R0xfQUxQSEEgJiYKLSAgICAgICAgZGVzdFR5cGUgICAgID09IEdMX1VOU0lHTkVEX0JZVEUpCi0g
ICAgewotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc291cmNlRm9ybWF0
ID09IERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNICYmCi0gICAgICAgICAgICAgZGVzdEZvcm1h
dCAgID09IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICBkZXN0VHlwZSAgICAgPT0gR0xfVU5TSUdO
RURfQllURSkKLSAgICB7Ci0gICAgICAgIHJldHVybiA0OwotICAgIH0KLSAgICBlbHNlIGlmIChz
b3VyY2VGb3JtYXQgPT0gRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk0gJiYKLSAgICAgICAgICAg
ICBkZXN0Rm9ybWF0ICAgPT0gR0xfQkdSQV9FWFQgJiYKLSAgICAgICAgICAgICBkZXN0VHlwZSAg
ICAgPT0gR0xfVU5TSUdORURfQllURSkKLSAgICB7Ci0gICAgICAgIHJldHVybiA0OwotICAgIH0K
LSAgICBlbHNlIGlmIChzb3VyY2VGb3JtYXQgPT0gRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X0ZM
T0FUICYmCi0gICAgICAgICAgICAgZGVzdEZvcm1hdCAgID09IEdMX1JHQkEgJiYKLSAgICAgICAg
ICAgICBkZXN0VHlwZSAgICAgPT0gR0xfSEFMRl9GTE9BVF9PRVMpCi0gICAgewotICAgICAgICBy
ZXR1cm4gODsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc291cmNlRm9ybWF0ID09IERYR0lfRk9STUFU
X1IzMkczMkIzMl9GTE9BVCAmJgotICAgICAgICAgICAgIGRlc3RGb3JtYXQgICA9PSBHTF9SR0Ig
JiYKLSAgICAgICAgICAgICBkZXN0VHlwZSAgICAgPT0gR0xfRkxPQVQpCi0gICAgewotICAgICAg
ICByZXR1cm4gMTI7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNvdXJjZUZvcm1hdCA9PSBEWEdJX0ZP
Uk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQgJiYKLSAgICAgICAgICAgICBkZXN0Rm9ybWF0ICAgPT0g
R0xfUkdCQSAmJgotICAgICAgICAgICAgIGRlc3RUeXBlICAgICA9PSBHTF9GTE9BVCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiAxNjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVhZFBpeGVsQ29sb3IoY29u
c3QgdW5zaWduZWQgY2hhciAqZGF0YSwgRFhHSV9GT1JNQVQgZm9ybWF0LCB1bnNpZ25lZCBpbnQg
eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgeSwgaW50
IGlucHV0UGl0Y2gsIGdsOjpDb2xvciAqb3V0Q29sb3IpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQp
Ci0gICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STToKLSAgICAgICAg
ewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHJnYmEgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1bnNpZ25lZCBpbnQqPihkYXRhICsgNCAqIHggKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAg
ICAgICBvdXRDb2xvci0+cmVkID0gICAocmdiYSAmIDB4MDAwMDAwRkYpICogKDEuMGYgLyAweDAw
MDAwMEZGKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5ncmVlbiA9IChyZ2JhICYgMHgwMDAwRkYw
MCkgKiAoMS4wZiAvIDB4MDAwMEZGMDApOwotICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAg
KHJnYmEgJiAweDAwRkYwMDAwKSAqICgxLjBmIC8gMHgwMEZGMDAwMCk7Ci0gICAgICAgICAgICBv
dXRDb2xvci0+YWxwaGEgPSAocmdiYSAmIDB4RkYwMDAwMDApICogKDEuMGYgLyAweEZGMDAwMDAw
KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9B
OF9VTk9STToKLSAgICAgICAgewotICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAgMC4wZjsK
LSAgICAgICAgICAgIG91dENvbG9yLT5ncmVlbiA9IDAuMGY7Ci0gICAgICAgICAgICBvdXRDb2xv
ci0+Ymx1ZSA9ICAwLjBmOwotICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gKihkYXRhICsg
eCArIHkgKiBpbnB1dFBpdGNoKSAvIDI1NS4wZjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQ6Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgICoocmVpbnRlcnByZXRfY2FzdDxjb25zdCBm
bG9hdCo+KGRhdGEgKyAxNiAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAwKTsKLSAgICAgICAgICAg
IG91dENvbG9yLT5ncmVlbiA9ICoocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KGRhdGEg
KyAxNiAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAxKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5i
bHVlID0gICoocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KGRhdGEgKyAxNiAqIHggKyB5
ICogaW5wdXRQaXRjaCkgKyAyKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9ICoocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KGRhdGEgKyAxNiAqIHggKyB5ICogaW5wdXRQaXRj
aCkgKyAzKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SMzJHMzJCMzJfRkxPQVQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG91dENvbG9yLT5y
ZWQgPSAgICoocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KGRhdGEgKyAxMiAqIHggKyB5
ICogaW5wdXRQaXRjaCkgKyAwKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5ncmVlbiA9ICoocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KGRhdGEgKyAxMiAqIHggKyB5ICogaW5wdXRQaXRj
aCkgKyAxKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gICoocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBmbG9hdCo+KGRhdGEgKyAxMiAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAyKTsKLSAg
ICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IDEuMGY7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X0ZMT0FUOgotICAgICAg
ICB7Ci0gICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICBnbDo6ZmxvYXQxNlRvRmxvYXQzMigq
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgOCAqIHggKyB5
ICogaW5wdXRQaXRjaCkgKyAwKSk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSBnbDo6
ZmxvYXQxNlRvRmxvYXQzMigqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQq
PihkYXRhICsgOCAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAxKSk7Ci0gICAgICAgICAgICBvdXRD
b2xvci0+Ymx1ZSA9ICBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgOCAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAyKSk7
Ci0gICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgOCAqIHggKyB5ICog
aW5wdXRQaXRjaCkgKyAzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVu
c2lnbmVkIGludCBiZ3JhID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4o
ZGF0YSArIDQgKiB4ICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICAgICAgb3V0Q29sb3ItPnJl
ZCA9ICAgKGJncmEgJiAweDAwRkYwMDAwKSAqICgxLjBmIC8gMHgwMEZGMDAwMCk7Ci0gICAgICAg
ICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAoYmdyYSAmIDB4MDAwMDAwRkYpICogKDEuMGYgLyAweDAw
MDAwMEZGKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5ncmVlbiA9IChiZ3JhICYgMHgwMDAwRkYw
MCkgKiAoMS4wZiAvIDB4MDAwMEZGMDApOwotICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0g
KGJncmEgJiAweEZGMDAwMDAwKSAqICgxLjBmIC8gMHhGRjAwMDAwMCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVU5PUk06Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgICooZGF0YSArIHggKyB5ICogaW5wdXRQ
aXRjaCkgLyAyNTUuMGY7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAwLjBmOwotICAg
ICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAgMC4wZjsKLSAgICAgICAgICAgIG91dENvbG9yLT5h
bHBoYSA9IDEuMGY7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfUjhHOF9VTk9STToKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc2hv
cnQgcmcgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyAy
ICogeCArIHkgKiBpbnB1dFBpdGNoKTsKLQotICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAg
KHJnICYgMHhGRjAwKSAqICgxLjBmIC8gMHhGRjAwKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5n
cmVlbiA9IChyZyAmIDB4MDBGRikgKiAoMS4wZiAvIDB4MDBGRik7Ci0gICAgICAgICAgICBvdXRD
b2xvci0+Ymx1ZSA9ICAwLjBmOwotICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gMS4wZjsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZf
RkxPQVQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgIGdsOjpmbG9h
dDE2VG9GbG9hdDMyKCpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oZGF0
YSArIDIgKiB4ICsgeSAqIGlucHV0UGl0Y2gpKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5ncmVl
biA9IDAuMGY7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAwLjBmOwotICAgICAgICAg
ICAgb3V0Q29sb3ItPmFscGhhID0gMS4wZjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfRkxPQVQ6Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIG91dENvbG9yLT5yZWQgPSAgIGdsOjpmbG9hdDE2VG9GbG9hdDMyKCoocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyA0ICogeCArIHkgKiBpbnB1dFBpdGNo
KSArIDApKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5ncmVlbiA9IGdsOjpmbG9hdDE2VG9GbG9h
dDMyKCoocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyA0ICog
eCArIHkgKiBpbnB1dFBpdGNoKSArIDEpKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0g
IDAuMGY7Ci0gICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOwotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICBFUlIoIlJlYWRQaXhlbENv
bG9yIG5vdCBpbXBsZW1lbnRlZCBmb3IgRFhHSSBmb3JtYXQgJXUuIiwgZm9ybWF0KTsKLSAgICAg
ICAgVU5JTVBMRU1FTlRFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgdm9pZCB3cml0ZVBpeGVsQ29sb3IoY29uc3QgZ2w6OkNvbG9yICZjb2xvciwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCB4LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgeSwgaW50IG91dHB1dFBpdGNoLCB2b2lkICpv
dXREYXRhKQotewotICAgIHVuc2lnbmVkIGNoYXIqIGJ5dGVEYXRhID0gcmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4ob3V0RGF0YSk7Ci0gICAgdW5zaWduZWQgc2hvcnQqIHNob3J0RGF0
YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihvdXREYXRhKTsKLQotICAgIHN3
aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgc3dpdGNo
ICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAg
ICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAwXSA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLnJlZCAgICsgMC41Zik7Ci0gICAgICAgICAg
ICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDFdID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4oMjU1ICogY29sb3IuZ3JlZW4gKyAwLjVmKTsKLSAgICAgICAgICAgIGJ5dGVE
YXRhWzQgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMl0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyPigyNTUgKiBjb2xvci5ibHVlICArIDAuNWYpOwotICAgICAgICAgICAgYnl0ZURhdGFbNCAq
IHggKyB5ICogb3V0cHV0UGl0Y2ggKyAzXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1
NSAqIGNvbG9yLmFscGhhICsgMC41Zik7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICBFUlIoIldyaXRlUGl4ZWxDb2xvciBub3QgaW1wbGVtZW50
ZWQgZm9yIGZvcm1hdCBHTF9SR0JBIGFuZCB0eXBlIDB4JVguIiwgdHlwZSk7Ci0gICAgICAgICAg
ICBVTklNUExFTUVOVEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLQotICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgc3dpdGNoICh0eXBl
KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAg
ICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAwXSA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLmJsdWUgICsgMC41Zik7Ci0gICAgICAgICAgICBieXRl
RGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDFdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcj4oMjU1ICogY29sb3IuZ3JlZW4gKyAwLjVmKTsKLSAgICAgICAgICAgIGJ5dGVEYXRhWzQg
KiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMl0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigy
NTUgKiBjb2xvci5yZWQgICArIDAuNWYpOwotICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5
ICogb3V0cHV0UGl0Y2ggKyAzXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNv
bG9yLmFscGhhICsgMC41Zik7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhUOgotICAgICAgICAgICAgLy8gQWNjb3Jk
aW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhlICJUcmFuc2ZlciBvZiBQaXhlbCBSZWN0
YW5nbGVzIiBzZWN0aW9uCi0gICAgICAgICAgICAvLyB0aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZv
bGxvd3M6Ci0gICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5
ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAgMSAgICAwCi0gICAgICAgICAg
ICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgIC8vIHwgICAgICAgNHRo
ICAgICAgICAgfCAgICAgICAgM3JkICAgICAgICAgfCAgICAgICAgMm5kICAgICAgICB8ICAgMXN0
IGNvbXBvbmVudCAgIHwKLSAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
ICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgQkdSQV9FWFQsIEIgaXMgdGhlIGZpcnN0IGNv
bXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28gZm9ydGguCi0gICAgICAgICAgICBzaG9ydERh
dGFbeCArIHkgKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0KLSAgICAg
ICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDE1ICogY29sb3IuYWxwaGEg
KyAwLjVmKSA8PCAxMikgfAotICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBz
aG9ydD4oMTUgKiBjb2xvci5yZWQgICArIDAuNWYpIDw8ICA4KSB8Ci0gICAgICAgICAgICAgICAg
KHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigxNSAqIGNvbG9yLmdyZWVuICsgMC41ZikgPDwg
IDQpIHwKLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDE1ICog
Y29sb3IuYmx1ZSAgKyAwLjVmKSA8PCAgMCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUOgotICAgICAgICAgICAg
Ly8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhlICJUcmFuc2ZlciBvZiBQ
aXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCi0gICAgICAgICAgICAvLyB0aGlzIHR5cGUgaXMgcGFj
a2VkIGFzIGZvbGxvd3M6Ci0gICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAgIDEyICAgMTEg
ICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAgMSAgICAwCi0g
ICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgIC8vIHwg
NHRoIHwgICAgICAgICAgM3JkICAgICAgICAgICB8ICAgICAgICAgICAybmQgICAgICAgICAgfCAg
ICAgIDFzdCBjb21wb25lbnQgICAgIHwKLSAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgQkdSQV9FWFQsIEIgaXMgdGhl
IGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28gZm9ydGguCi0gICAgICAgICAg
ICBzaG9ydERhdGFbeCArIHkgKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCld
ID0KLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KCAgICAgY29s
b3IuYWxwaGEgKyAwLjVmKSA8PCAxNSkgfAotICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1
bnNpZ25lZCBzaG9ydD4oMzEgKiBjb2xvci5yZWQgICArIDAuNWYpIDw8IDEwKSB8Ci0gICAgICAg
ICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigzMSAqIGNvbG9yLmdyZWVuICsg
MC41ZikgPDwgIDUpIHwKLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hv
cnQ+KDMxICogY29sb3IuYmx1ZSAgKyAwLjVmKSA8PCAgMCk7Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBFUlIoIldyaXRlUGl4ZWxDb2xvciBu
b3QgaW1wbGVtZW50ZWQgZm9yIGZvcm1hdCBHTF9CR1JBX0VYVCBhbmQgdHlwZSAweCVYLiIsIHR5
cGUpOwotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICBz
d2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JU
XzVfNl81OgotICAgICAgICAgICAgc2hvcnREYXRhW3ggKyB5ICogb3V0cHV0UGl0Y2ggLyBzaXpl
b2YodW5zaWduZWQgc2hvcnQpXSA9Ci0gICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2ln
bmVkIHNob3J0PigzMSAqIGNvbG9yLmJsdWUgICsgMC41ZikgPDwgIDApIHwKLSAgICAgICAgICAg
ICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDYzICogY29sb3IuZ3JlZW4gKyAwLjVm
KSA8PCAgNSkgfAotICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4o
MzEgKiBjb2xvci5yZWQgICArIDAuNWYpIDw8IDExKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgYnl0ZURhdGFbMyAq
IHggKyB5ICogb3V0cHV0UGl0Y2ggKyAwXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1
NSAqIGNvbG9yLnJlZCArICAgMC41Zik7Ci0gICAgICAgICAgICBieXRlRGF0YVszICogeCArIHkg
KiBvdXRwdXRQaXRjaCArIDFdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29s
b3IuZ3JlZW4gKyAwLjVmKTsKLSAgICAgICAgICAgIGJ5dGVEYXRhWzMgKiB4ICsgeSAqIG91dHB1
dFBpdGNoICsgMl0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5ibHVl
ICsgIDAuNWYpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgRVJSKCJXcml0ZVBpeGVsQ29sb3Igbm90IGltcGxlbWVudGVkIGZvciBmb3JtYXQg
R0xfUkdCIGFuZCB0eXBlIDB4JVguIiwgdHlwZSk7Ci0gICAgICAgICAgICBVTklNUExFTUVOVEVE
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgRVJSKCJXcml0ZVBpeGVsQ29sb3Igbm90IGltcGxlbWVudGVk
IGZvciBmb3JtYXQgMHglWC4iLCBmb3JtYXQpOwotICAgICAgICBVTklNUExFTUVOVEVEKCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJlcjExOjpyZWFkVGV4dHVyZURh
dGEoSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCB1bnNpZ25lZCBpbnQgc3ViUmVzb3VyY2UsIGNv
bnN0IGdsOjpSZWN0YW5nbGUgJmFyZWEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xzaXplaSBvdXRwdXRQaXRjaCwgYm9vbCBw
YWNrUmV2ZXJzZVJvd09yZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xp
bnQgcGFja0FsaWdubWVudCwgdm9pZCAqcGl4ZWxzKQotewotICAgIEQzRDExX1RFWFRVUkUyRF9E
RVNDIHRleHR1cmVEZXNjOwotICAgIHRleHR1cmUtPkdldERlc2MoJnRleHR1cmVEZXNjKTsKLQot
ICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHN0YWdpbmdEZXNjOwotICAgIHN0YWdpbmdEZXNjLldp
ZHRoID0gYXJlYS53aWR0aDsKLSAgICBzdGFnaW5nRGVzYy5IZWlnaHQgPSBhcmVhLmhlaWdodDsK
LSAgICBzdGFnaW5nRGVzYy5NaXBMZXZlbHMgPSAxOwotICAgIHN0YWdpbmdEZXNjLkFycmF5U2l6
ZSA9IDE7Ci0gICAgc3RhZ2luZ0Rlc2MuRm9ybWF0ID0gdGV4dHVyZURlc2MuRm9ybWF0OwotICAg
IHN0YWdpbmdEZXNjLlNhbXBsZURlc2MuQ291bnQgPSAxOwotICAgIHN0YWdpbmdEZXNjLlNhbXBs
ZURlc2MuUXVhbGl0eSA9IDA7Ci0gICAgc3RhZ2luZ0Rlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9T
VEFHSU5HOwotICAgIHN0YWdpbmdEZXNjLkJpbmRGbGFncyA9IDA7Ci0gICAgc3RhZ2luZ0Rlc2Mu
Q1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUNDRVNTX1JFQUQ7Ci0gICAgc3RhZ2luZ0Rlc2Mu
TWlzY0ZsYWdzID0gMDsKLQotICAgIElEM0QxMVRleHR1cmUyRCogc3RhZ2luZ1RleCA9IE5VTEw7
Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJnN0YWdpbmdE
ZXNjLCBOVUxMLCAmc3RhZ2luZ1RleCk7Ci0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsK
LSAgICAgICAgRVJSKCJGYWlsZWQgdG8gY3JlYXRlIHN0YWdpbmcgdGV4dHVyZSBmb3IgcmVhZFBp
eGVscywgSFJFU1VMVDogMHglWC4iLCByZXN1bHQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgSUQzRDExVGV4dHVyZTJEKiBzcmNUZXggPSBOVUxMOwotICAgIGlmICh0ZXh0dXJlRGVz
Yy5TYW1wbGVEZXNjLkNvdW50ID4gMSkKLSAgICB7Ci0gICAgICAgIEQzRDExX1RFWFRVUkUyRF9E
RVNDIHJlc29sdmVEZXNjOwotICAgICAgICByZXNvbHZlRGVzYy5XaWR0aCA9IHRleHR1cmVEZXNj
LldpZHRoOwotICAgICAgICByZXNvbHZlRGVzYy5IZWlnaHQgPSB0ZXh0dXJlRGVzYy5IZWlnaHQ7
Ci0gICAgICAgIHJlc29sdmVEZXNjLk1pcExldmVscyA9IDE7Ci0gICAgICAgIHJlc29sdmVEZXNj
LkFycmF5U2l6ZSA9IDE7Ci0gICAgICAgIHJlc29sdmVEZXNjLkZvcm1hdCA9IHRleHR1cmVEZXNj
LkZvcm1hdDsKLSAgICAgICAgcmVzb2x2ZURlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7Ci0gICAg
ICAgIHJlc29sdmVEZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7Ci0gICAgICAgIHJlc29sdmVE
ZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKLSAgICAgICAgcmVzb2x2ZURlc2MuQmlu
ZEZsYWdzID0gMDsKLSAgICAgICAgcmVzb2x2ZURlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOwotICAg
ICAgICByZXNvbHZlRGVzYy5NaXNjRmxhZ3MgPSAwOwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZp
Y2UtPkNyZWF0ZVRleHR1cmUyRCgmcmVzb2x2ZURlc2MsIE5VTEwsICZzcmNUZXgpOwotICAgICAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiRmFpbGVk
IHRvIGNyZWF0ZSByZXNvbHZlIHRleHR1cmUgZm9yIHJlYWRQaXhlbHMsIEhSRVNVTFQ6IDB4JVgu
IiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHN0YWdpbmdUZXgtPlJlbGVhc2UoKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5SZXNvbHZl
U3VicmVzb3VyY2Uoc3JjVGV4LCAwLCB0ZXh0dXJlLCBzdWJSZXNvdXJjZSwgdGV4dHVyZURlc2Mu
Rm9ybWF0KTsKLSAgICAgICAgc3ViUmVzb3VyY2UgPSAwOwotICAgIH0KLSAgICBlbHNlCi0gICAg
ewotICAgICAgICBzcmNUZXggPSB0ZXh0dXJlOwotICAgICAgICBzcmNUZXgtPkFkZFJlZigpOwot
ICAgIH0KLQotICAgIEQzRDExX0JPWCBzcmNCb3g7Ci0gICAgc3JjQm94LmxlZnQgPSBhcmVhLng7
Ci0gICAgc3JjQm94LnJpZ2h0ID0gYXJlYS54ICsgYXJlYS53aWR0aDsKLSAgICBzcmNCb3gudG9w
ID0gYXJlYS55OwotICAgIHNyY0JveC5ib3R0b20gPSBhcmVhLnkgKyBhcmVhLmhlaWdodDsKLSAg
ICBzcmNCb3guZnJvbnQgPSAwOwotICAgIHNyY0JveC5iYWNrID0gMTsKLQotICAgIG1EZXZpY2VD
b250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24oc3RhZ2luZ1RleCwgMCwgMCwgMCwgMCwgc3Jj
VGV4LCBzdWJSZXNvdXJjZSwgJnNyY0JveCk7Ci0KLSAgICBzcmNUZXgtPlJlbGVhc2UoKTsKLSAg
ICBzcmNUZXggPSBOVUxMOwotCi0gICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBpbmc7
Ci0gICAgbURldmljZUNvbnRleHQtPk1hcChzdGFnaW5nVGV4LCAwLCBEM0QxMV9NQVBfUkVBRCwg
MCwgJm1hcHBpbmcpOwotCi0gICAgdW5zaWduZWQgY2hhciAqc291cmNlOwotICAgIGludCBpbnB1
dFBpdGNoOwotICAgIGlmIChwYWNrUmV2ZXJzZVJvd09yZGVyKQotICAgIHsKLSAgICAgICAgc291
cmNlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG1hcHBpbmcucERhdGEpICsgbWFwcGlu
Zy5Sb3dQaXRjaCAqIChhcmVhLmhlaWdodCAtIDEpOwotICAgICAgICBpbnB1dFBpdGNoID0gLXN0
YXRpY19jYXN0PGludD4obWFwcGluZy5Sb3dQaXRjaCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihtYXBwaW5nLnBE
YXRhKTsKLSAgICAgICAgaW5wdXRQaXRjaCA9IHN0YXRpY19jYXN0PGludD4obWFwcGluZy5Sb3dQ
aXRjaCk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaW50IGZhc3RQaXhlbFNpemUgPSBnZXRGYXN0
UGl4ZWxDb3B5U2l6ZSh0ZXh0dXJlRGVzYy5Gb3JtYXQsIGZvcm1hdCwgdHlwZSk7Ci0gICAgaWYg
KGZhc3RQaXhlbFNpemUgIT0gMCkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3Qg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxzKTsKLSAgICAgICAgZm9yIChpbnQg
aiA9IDA7IGogPCBhcmVhLmhlaWdodDsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtZW1j
cHkoZGVzdCArIGogKiBvdXRwdXRQaXRjaCwgc291cmNlICsgaiAqIGlucHV0UGl0Y2gsIGFyZWEu
d2lkdGggKiBmYXN0UGl4ZWxTaXplKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh0
ZXh0dXJlRGVzYy5Gb3JtYXQgPT0gRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk0gJiYKLSAgICAg
ICAgICAgICBmb3JtYXQgPT0gR0xfUkdCQSAmJgotICAgICAgICAgICAgIHR5cGUgPT0gR0xfVU5T
SUdORURfQllURSkKLSAgICB7Ci0gICAgICAgIC8vIEZhc3QgcGF0aCBmb3Igc3dhcHBpbmcgcmVk
IHdpdGggYmx1ZQotICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KHBpeGVscyk7Ci0KLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBhcmVh
LmhlaWdodDsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGFyZWEud2lkdGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQ
aXRjaCk7Ci0gICAgICAgICAgICAgICAgKih1bnNpZ25lZCBpbnQqKShkZXN0ICsgNCAqIGkgKyBq
ICogb3V0cHV0UGl0Y2gpID0KLSAgICAgICAgICAgICAgICAgICAgKGFyZ2IgJiAweEZGMDBGRjAw
KSB8ICAgICAgIC8vIEtlZXAgYWxwaGEgYW5kIGdyZWVuCi0gICAgICAgICAgICAgICAgICAgIChh
cmdiICYgMHgwMEZGMDAwMCkgPj4gMTYgfCAvLyBNb3ZlIHJlZCB0byBibHVlCi0gICAgICAgICAg
ICAgICAgICAgIChhcmdiICYgMHgwMDAwMDBGRikgPDwgMTY7ICAvLyBNb3ZlIGJsdWUgdG8gcmVk
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAg
ICAgZ2w6OkNvbG9yIHBpeGVsQ29sb3I7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgYXJl
YS5oZWlnaHQ7IGorKykKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBhcmVhLndpZHRoOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVhZFBp
eGVsQ29sb3Ioc291cmNlLCB0ZXh0dXJlRGVzYy5Gb3JtYXQsIGksIGosIGlucHV0UGl0Y2gsICZw
aXhlbENvbG9yKTsKLSAgICAgICAgICAgICAgICB3cml0ZVBpeGVsQ29sb3IocGl4ZWxDb2xvciwg
Zm9ybWF0LCB0eXBlLCBpLCBqLCBvdXRwdXRQaXRjaCwgcGl4ZWxzKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLQotICAgIG1EZXZpY2VDb250ZXh0LT5Vbm1hcChzdGFnaW5nVGV4
LCAwKTsKLQotICAgIHN0YWdpbmdUZXgtPlJlbGVhc2UoKTsKLSAgICBzdGFnaW5nVGV4ID0gTlVM
TDsKLX0KLQotYm9vbCBSZW5kZXJlcjExOjpibGl0UmVuZGVyYnVmZmVyUmVjdChjb25zdCBnbDo6
UmVjdGFuZ2xlICZyZWFkUmVjdCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsIFJlbmRl
clRhcmdldCAqcmVhZFJlbmRlclRhcmdldCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFJlbmRlclRhcmdldCAqZHJhd1JlbmRlclRhcmdldCwgYm9vbCB3aG9sZUJ1ZmZl
ckNvcHkpCi17Ci0gICAgQVNTRVJUKHJlYWRSZWN0LndpZHRoID09IGRyYXdSZWN0LndpZHRoICYm
IHJlYWRSZWN0LmhlaWdodCA9PSBkcmF3UmVjdC5oZWlnaHQpOwotCi0gICAgUmVuZGVyVGFyZ2V0
MTEgKmRyYXdSZW5kZXJUYXJnZXQxMSA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0
MTEoZHJhd1JlbmRlclRhcmdldCk7Ci0gICAgaWYgKCFkcmF3UmVuZGVyVGFyZ2V0KQotICAgIHsK
LSAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIGRyYXcgcmVuZGVyIHRhcmdldCBm
cm9tIHRoZSBkcmF3IGZyYW1lYnVmZmVyLiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBJRDNEMTFUZXh0dXJlMkQgKmRy
YXdUZXh0dXJlID0gZHJhd1JlbmRlclRhcmdldDExLT5nZXRUZXh0dXJlKCk7Ci0gICAgdW5zaWdu
ZWQgaW50IGRyYXdTdWJyZXNvdXJjZSA9IGRyYXdSZW5kZXJUYXJnZXQxMS0+Z2V0U3VicmVzb3Vy
Y2VJbmRleCgpOwotCi0gICAgUmVuZGVyVGFyZ2V0MTEgKnJlYWRSZW5kZXJUYXJnZXQxMSA9IFJl
bmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEocmVhZFJlbmRlclRhcmdldCk7Ci0gICAg
aWYgKCFyZWFkUmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0
cmlldmUgdGhlIHJlYWQgcmVuZGVyIHRhcmdldCBmcm9tIHRoZSByZWFkIGZyYW1lYnVmZmVyLiIp
OwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKLSAg
ICB9Ci0KLSAgICBJRDNEMTFUZXh0dXJlMkQgKnJlYWRUZXh0dXJlID0gTlVMTDsKLSAgICB1bnNp
Z25lZCBpbnQgcmVhZFN1YnJlc291cmNlID0gMDsKLSAgICBpZiAocmVhZFJlbmRlclRhcmdldC0+
Z2V0U2FtcGxlcygpID4gMCkKLSAgICB7Ci0gICAgICAgIHJlYWRUZXh0dXJlID0gcmVzb2x2ZU11
bHRpc2FtcGxlZFRleHR1cmUocmVhZFJlbmRlclRhcmdldDExLT5nZXRUZXh0dXJlKCksIHJlYWRS
ZW5kZXJUYXJnZXQxMS0+Z2V0U3VicmVzb3VyY2VJbmRleCgpKTsKLSAgICAgICAgcmVhZFN1YnJl
c291cmNlID0gMDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmVhZFRleHR1cmUg
PSByZWFkUmVuZGVyVGFyZ2V0MTEtPmdldFRleHR1cmUoKTsKLSAgICAgICAgcmVhZFRleHR1cmUt
PkFkZFJlZigpOwotICAgICAgICByZWFkU3VicmVzb3VyY2UgPSByZWFkUmVuZGVyVGFyZ2V0MTEt
PmdldFN1YnJlc291cmNlSW5kZXgoKTsKLSAgICB9Ci0KLSAgICBpZiAoIXJlYWRUZXh0dXJlKQot
ICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlYWQgcmVuZGVyIHRh
cmdldCB2aWV3IGZyb20gdGhlIHJlYWQgcmVuZGVyIHRhcmdldC4iKTsKLSAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgRDNEMTFf
Qk9YIHJlYWRCb3g7Ci0gICAgcmVhZEJveC5sZWZ0ID0gcmVhZFJlY3QueDsKLSAgICByZWFkQm94
LnJpZ2h0ID0gcmVhZFJlY3QueCArIHJlYWRSZWN0LndpZHRoOwotICAgIHJlYWRCb3gudG9wID0g
cmVhZFJlY3QueTsKLSAgICByZWFkQm94LmJvdHRvbSA9IHJlYWRSZWN0LnkgKyByZWFkUmVjdC5o
ZWlnaHQ7Ci0gICAgcmVhZEJveC5mcm9udCA9IDA7Ci0gICAgcmVhZEJveC5iYWNrID0gMTsKLQot
ICAgIC8vIEQzRDExIG5lZWRzIGRlcHRoLXN0ZW5jaWwgQ29weVN1YnJlc291cmNlUmVnaW9ucyB0
byBoYXZlIGEgTlVMTCBwU3JjQm94Ci0gICAgLy8gV2UgYWxzbyByZXF1aXJlIGNvbXBsZXRlIGZy
YW1lYnVmZmVyIGNvcGllcyBmb3IgZGVwdGgtc3RlbmNpbCBibGl0LgotICAgIEQzRDExX0JPWCAq
cFNyY0JveCA9IHdob2xlQnVmZmVyQ29weSA/IE5VTEwgOiAmcmVhZEJveDsKLQotICAgIG1EZXZp
Y2VDb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24oZHJhd1RleHR1cmUsIGRyYXdTdWJyZXNv
dXJjZSwgZHJhd1JlY3QueCwgZHJhd1JlY3QueSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlYWRUZXh0dXJlLCByZWFkU3VicmVzb3VyY2UsIHBTcmNCb3gp
OwotCi0gICAgU2FmZVJlbGVhc2UocmVhZFRleHR1cmUpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLUlEM0QxMVRleHR1cmUyRCAqUmVuZGVyZXIxMTo6cmVzb2x2ZU11bHRpc2FtcGxlZFRleHR1
cmUoSUQzRDExVGV4dHVyZTJEICpzb3VyY2UsIHVuc2lnbmVkIGludCBzdWJyZXNvdXJjZSkKLXsK
LSAgICBEM0QxMV9URVhUVVJFMkRfREVTQyB0ZXh0dXJlRGVzYzsKLSAgICBzb3VyY2UtPkdldERl
c2MoJnRleHR1cmVEZXNjKTsKLQotICAgIGlmICh0ZXh0dXJlRGVzYy5TYW1wbGVEZXNjLkNvdW50
ID4gMSkKLSAgICB7Ci0gICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHJlc29sdmVEZXNjOwot
ICAgICAgICByZXNvbHZlRGVzYy5XaWR0aCA9IHRleHR1cmVEZXNjLldpZHRoOwotICAgICAgICBy
ZXNvbHZlRGVzYy5IZWlnaHQgPSB0ZXh0dXJlRGVzYy5IZWlnaHQ7Ci0gICAgICAgIHJlc29sdmVE
ZXNjLk1pcExldmVscyA9IDE7Ci0gICAgICAgIHJlc29sdmVEZXNjLkFycmF5U2l6ZSA9IDE7Ci0g
ICAgICAgIHJlc29sdmVEZXNjLkZvcm1hdCA9IHRleHR1cmVEZXNjLkZvcm1hdDsKLSAgICAgICAg
cmVzb2x2ZURlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7Ci0gICAgICAgIHJlc29sdmVEZXNjLlNh
bXBsZURlc2MuUXVhbGl0eSA9IDA7Ci0gICAgICAgIHJlc29sdmVEZXNjLlVzYWdlID0gdGV4dHVy
ZURlc2MuVXNhZ2U7Ci0gICAgICAgIHJlc29sdmVEZXNjLkJpbmRGbGFncyA9IHRleHR1cmVEZXNj
LkJpbmRGbGFnczsKLSAgICAgICAgcmVzb2x2ZURlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOwotICAg
ICAgICByZXNvbHZlRGVzYy5NaXNjRmxhZ3MgPSAwOwotCi0gICAgICAgIElEM0QxMVRleHR1cmUy
RCAqcmVzb2x2ZVRleHR1cmUgPSBOVUxMOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZp
Y2UtPkNyZWF0ZVRleHR1cmUyRCgmcmVzb2x2ZURlc2MsIE5VTEwsICZyZXNvbHZlVGV4dHVyZSk7
Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJS
KCJGYWlsZWQgdG8gY3JlYXRlIGEgbXVsdGlzYW1wbGUgcmVzb2x2ZSB0ZXh0dXJlLCBIUkVTVUxU
OiAweCVYLiIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQot
Ci0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5SZXNvbHZlU3VicmVzb3VyY2UocmVzb2x2ZVRleHR1
cmUsIDAsIHNvdXJjZSwgc3VicmVzb3VyY2UsIHRleHR1cmVEZXNjLkZvcm1hdCk7Ci0gICAgICAg
IHJldHVybiByZXNvbHZlVGV4dHVyZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAg
c291cmNlLT5BZGRSZWYoKTsKLSAgICAgICAgcmV0dXJuIHNvdXJjZTsKLSAgICB9Ci19Ci0KLWJv
b2wgUmVuZGVyZXIxMTo6Z2V0TFVJRChMVUlEICphZGFwdGVyTHVpZCkgY29uc3QKLXsKLSAgICBh
ZGFwdGVyTHVpZC0+SGlnaFBhcnQgPSAwOwotICAgIGFkYXB0ZXJMdWlkLT5Mb3dQYXJ0ID0gMDsK
LQotICAgIGlmICghbUR4Z2lBZGFwdGVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIERYR0lfQURBUFRFUl9ERVNDIGFkYXB0ZXJEZXNjOwotICAgIGlmIChGQUlM
RUQobUR4Z2lBZGFwdGVyLT5HZXREZXNjKCZhZGFwdGVyRGVzYykpKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgICphZGFwdGVyTHVpZCA9IGFkYXB0ZXJEZXNjLkFk
YXB0ZXJMdWlkOwotICAgIHJldHVybiB0cnVlOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyMTEuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIxMS5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODZmNDg1ZjQwYzU4Yzk0MGRjOWEzZTRh
ZmM1ODI1YjRlMjllOGJmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVu
ZGVyZXIxMS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzU4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmln
aHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
LS8vCi0KLS8vIFJlbmRlcmVyMTEuaDogRGVmaW5lcyBhIGJhY2stZW5kIHNwZWNpZmljIGNsYXNz
IGZvciB0aGUgRDNEMTEgcmVuZGVyZXIuCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX1JF
TkRFUkVSMTFfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUkVSMTFfSF8KLQot
I2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL2FuZ2xl
dHlwZXMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKLQotI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9SZW5kZXJTdGF0ZUNhY2hlLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0lucHV0
TGF5b3V0Q2FjaGUuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0
LmgiCi0KLW5hbWVzcGFjZSBnbAotewotY2xhc3MgUmVuZGVyYnVmZmVyOwotfQotCi1uYW1lc3Bh
Y2UgcngKLXsKLQotY2xhc3MgVmVydGV4RGF0YU1hbmFnZXI7Ci1jbGFzcyBJbmRleERhdGFNYW5h
Z2VyOwotY2xhc3MgU3RyZWFtaW5nSW5kZXhCdWZmZXJJbnRlcmZhY2U7Ci0KLWVudW0KLXsKLSAg
ICBNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SU19EM0QxMSA9IDEwMjQsCi0gICAgTUFYX0ZSQUdN
RU5UX1VOSUZPUk1fVkVDVE9SU19EM0QxMSA9IDEwMjQKLX07Ci0KLWNsYXNzIFJlbmRlcmVyMTEg
OiBwdWJsaWMgUmVuZGVyZXIKLXsKLSAgcHVibGljOgotICAgIFJlbmRlcmVyMTEoZWdsOjpEaXNw
bGF5ICpkaXNwbGF5LCBIREMgaERjKTsKLSAgICB2aXJ0dWFsIH5SZW5kZXJlcjExKCk7Ci0KLSAg
ICBzdGF0aWMgUmVuZGVyZXIxMSAqbWFrZVJlbmRlcmVyMTEoUmVuZGVyZXIgKnJlbmRlcmVyKTsK
LQotICAgIHZpcnR1YWwgRUdMaW50IGluaXRpYWxpemUoKTsKLSAgICB2aXJ0dWFsIGJvb2wgcmVz
ZXREZXZpY2UoKTsKLQotICAgIHZpcnR1YWwgaW50IGdlbmVyYXRlQ29uZmlncyhDb25maWdEZXNj
ICoqY29uZmlnRGVzY0xpc3QpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVDb25maWdzKENvbmZp
Z0Rlc2MgKmNvbmZpZ0Rlc2NMaXN0KTsKLQotICAgIHZpcnR1YWwgdm9pZCBzeW5jKGJvb2wgYmxv
Y2spOwotCi0gICAgdmlydHVhbCBTd2FwQ2hhaW4gKmNyZWF0ZVN3YXBDaGFpbihIV05EIHdpbmRv
dywgSEFORExFIHNoYXJlSGFuZGxlLCBHTGVudW0gYmFja0J1ZmZlckZvcm1hdCwgR0xlbnVtIGRl
cHRoQnVmZmVyRm9ybWF0KTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRTYW1wbGVyU3RhdGUoZ2w6
OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRleCwgY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmc2Ft
cGxlcik7Ci0gICAgdmlydHVhbCB2b2lkIHNldFRleHR1cmUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUs
IGludCBpbmRleCwgZ2w6OlRleHR1cmUgKnRleHR1cmUpOwotCi0gICAgdmlydHVhbCB2b2lkIHNl
dFJhc3Rlcml6ZXJTdGF0ZShjb25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZyYXN0ZXJTdGF0ZSk7
Ci0gICAgdmlydHVhbCB2b2lkIHNldEJsZW5kU3RhdGUoY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJs
ZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xvciAmYmxlbmRDb2xvciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlTWFzayk7Ci0gICAgdmlydHVhbCB2b2lk
IHNldERlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmZGVwdGhT
dGVuY2lsU3RhdGUsIGludCBzdGVuY2lsUmVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgc3RlbmNpbEJhY2tSZWYsIGJvb2wgZnJvbnRGYWNlQ0NXKTsKLQotICAg
IHZpcnR1YWwgdm9pZCBzZXRTY2lzc29yUmVjdGFuZ2xlKGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNj
aXNzb3IsIGJvb2wgZW5hYmxlZCk7Ci0gICAgdmlydHVhbCBib29sIHNldFZpZXdwb3J0KGNvbnN0
IGdsOjpSZWN0YW5nbGUgJnZpZXdwb3J0LCBmbG9hdCB6TmVhciwgZmxvYXQgekZhciwgR0xlbnVt
IGRyYXdNb2RlLCBHTGVudW0gZnJvbnRGYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGlnbm9yZVZpZXdwb3J0KTsKLQotICAgIHZpcnR1YWwgYm9vbCBhcHBseVByaW1pdGl2
ZVR5cGUoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQpOwotICAgIHZpcnR1YWwgYm9vbCBhcHBs
eVJlbmRlclRhcmdldChnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKTsKLSAgICB2aXJ0dWFs
IHZvaWQgYXBwbHlTaGFkZXJzKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KTsKLSAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHlVbmlmb3JtcyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSwgZ2w6OlVuaWZvcm1BcnJheSAqdW5pZm9ybUFycmF5KTsKLSAgICB2aXJ0dWFsIEdMZW51
bSBhcHBseVZlcnRleEJ1ZmZlcihnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6
OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0ZXhBdHRyaWJ1dGVzW10sIEdMaW50IGZpcnN0LCBHTHNpemVp
IGNvdW50LCBHTHNpemVpIGluc3RhbmNlcyk7Ci0gICAgdmlydHVhbCBHTGVudW0gYXBwbHlJbmRl
eEJ1ZmZlcihjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1
ZmZlciwgR0xzaXplaSBjb3VudCwgR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVk
SW5kZXhEYXRhICppbmRleEluZm8pOwotCi0gICAgdmlydHVhbCB2b2lkIGRyYXdBcnJheXMoR0xl
bnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKLSAgICB2aXJ0dWFs
IHZvaWQgZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlw
ZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIs
IGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMp
OwotCi0gICAgdmlydHVhbCB2b2lkIGNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNs
ZWFyUGFyYW1zLCBnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKTsKLQotICAgIHZpcnR1YWwg
dm9pZCBtYXJrQWxsU3RhdGVEaXJ0eSgpOwotCi0gICAgLy8gbG9zdCBkZXZpY2UKLSAgICB2b2lk
IG5vdGlmeURldmljZUxvc3QoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNEZXZpY2VMb3N0KCk7Ci0g
ICAgdmlydHVhbCBib29sIHRlc3REZXZpY2VMb3N0KGJvb2wgbm90aWZ5KTsKLSAgICB2aXJ0dWFs
IGJvb2wgdGVzdERldmljZVJlc2V0dGFibGUoKTsKLQotICAgIC8vIFJlbmRlcmVyIGNhcGFiaWxp
dGllcwotICAgIHZpcnR1YWwgRFdPUkQgZ2V0QWRhcHRlclZlbmRvcigpIGNvbnN0OwotICAgIHZp
cnR1YWwgc3RkOjpzdHJpbmcgZ2V0UmVuZGVyZXJEZXNjcmlwdGlvbigpIGNvbnN0OwotICAgIHZp
cnR1YWwgR1VJRCBnZXRBZGFwdGVySWRlbnRpZmllcigpIGNvbnN0OwotCi0gICAgdmlydHVhbCBi
b29sIGdldEJHUkFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBnZXRE
WFQxVGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUM1RleHR1cmVTdXBw
b3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldERYVDVUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZp
cnR1YWwgYm9vbCBnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRG
bG9hdDMyVGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKTsK
LSAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmlu
ZywgYm9vbCAqcmVuZGVyYWJsZSk7Ci0gICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZVRleHR1
cmVTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1
cHBvcnQoKTsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhUZXh0dXJlSW1h
Z2VVbml0cygpIGNvbnN0OwotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heENvbWJpbmVk
VGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRS
ZXNlcnZlZFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25l
ZCBpbnQgZ2V0UmVzZXJ2ZWRGcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmFyeWluZ1ZlY3RvcnMoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwotICAgIHZp
cnR1YWwgYm9vbCBnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgZ2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0
VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBmbG9h
dCBnZXRUZXh0dXJlTWF4QW5pc290cm9weSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBnZXRT
aGFyZUhhbmRsZVN1cHBvcnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVyaXZhdGl2
ZUluc3RydWN0aW9uU3VwcG9ydCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBnZXRQb3N0U3Vi
QnVmZmVyU3VwcG9ydCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBpbnQgZ2V0TWFqb3JTaGFkZXJN
b2RlbCgpIGNvbnN0OwotICAgIHZpcnR1YWwgZmxvYXQgZ2V0TWF4UG9pbnRTaXplKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBpbnQgZ2V0TWF4Vmlld3BvcnREaW1lbnNpb24oKSBjb25zdDsKLSAgICB2
aXJ0dWFsIGludCBnZXRNYXhUZXh0dXJlV2lkdGgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBn
ZXRNYXhUZXh0dXJlSGVpZ2h0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdldDMyQml0SW5k
ZXhTdXBwb3J0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgZ2V0TWluU3dhcEludGVydmFsKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgZ2V0TWF4U3dhcEludGVydmFsKCkgY29uc3Q7Ci0KLSAg
ICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpIGNvbnN0OwotICAgIGlu
dCBnZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhEWEdJX0ZPUk1BVCBmb3JtYXQsIHVuc2lnbmVk
IGludCByZXF1ZXN0ZWQpIGNvbnN0OwotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4
UmVuZGVyVGFyZ2V0cygpIGNvbnN0OwotCi0gICAgLy8gUGl4ZWwgb3BlcmF0aW9ucwotICAgIHZp
cnR1YWwgYm9vbCBjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAq
ZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc291cmNlKTsKLSAgICB2aXJ0dWFsIGJv
b2wgY29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqZGVzdCwg
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzb3VyY2UpOwotCi0gICAgdmlydHVhbCBib29s
IGNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFu
Z2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlMkQgKnN0b3JhZ2UsIEdMaW50IGxldmVsKTsKLSAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdl
KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJj
ZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpz
dG9yYWdlLCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCk7Ci0KLSAgICBib29sIGNvcHlUZXh0
dXJlKElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc291cmNlLCBjb25zdCBnbDo6UmVjdGFuZ2xl
ICZzb3VyY2VBcmVhLCB1bnNpZ25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3Vy
Y2VIZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpk
ZXN0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkZXN0QXJlYSwgdW5zaWduZWQgaW50IGRlc3RXaWR0
aCwgdW5zaWduZWQgaW50IGRlc3RIZWlnaHQsIEdMZW51bSBkZXN0Rm9ybWF0KTsKLQotICAgIHZp
cnR1YWwgYm9vbCBibGl0UmVjdChnbDo6RnJhbWVidWZmZXIgKnJlYWRUYXJnZXQsIGNvbnN0IGds
OjpSZWN0YW5nbGUgJnJlYWRSZWN0LCBnbDo6RnJhbWVidWZmZXIgKmRyYXdUYXJnZXQsIGNvbnN0
IGdsOjpSZWN0YW5nbGUgJmRyYXdSZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERlcHRoU3RlbmNpbCk7Ci0gICAgdmlydHVhbCB2
b2lkIHJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2gs
IGJvb2wgcGFja1JldmVyc2VSb3dPcmRlciwgR0xpbnQgcGFja0FsaWdubWVudCwgdm9pZCogcGl4
ZWxzKTsKLQotICAgIC8vIFJlbmRlclRhcmdldCBjcmVhdGlvbgotICAgIHZpcnR1YWwgUmVuZGVy
VGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJnZXQoU3dhcENoYWluICpzd2FwQ2hhaW4sIGJvb2wgZGVw
dGgpOwotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJnZXQoaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMsIGJvb2wgZGVw
dGgpOwotCi0gICAgLy8gU2hhZGVyIG9wZXJhdGlvbnMKLSAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1
dGFibGUgKmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3Ro
LCByeDo6U2hhZGVyVHlwZSB0eXBlKTsKLSAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1dGFibGUgKmNv
bXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRl
ckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91bmQp
OwotCi0gICAgLy8gSW1hZ2Ugb3BlcmF0aW9ucwotICAgIHZpcnR1YWwgSW1hZ2UgKmNyZWF0ZUlt
YWdlKCk7Ci0gICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKEltYWdlICpkZXN0LCBJbWFn
ZSAqc291cmNlKTsKLSAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3Rv
cmFnZTJEKFN3YXBDaGFpbiAqc3dhcENoYWluKTsKLSAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdl
ICpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpOwotICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVT
dG9yYWdlQ3ViZShpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2Fn
ZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKTsKLQotICAgIC8vIEJ1ZmZlciBjcmVh
dGlvbgotICAgIHZpcnR1YWwgVmVydGV4QnVmZmVyICpjcmVhdGVWZXJ0ZXhCdWZmZXIoKTsKLSAg
ICB2aXJ0dWFsIEluZGV4QnVmZmVyICpjcmVhdGVJbmRleEJ1ZmZlcigpOwotICAgIHZpcnR1YWwg
QnVmZmVyU3RvcmFnZSAqY3JlYXRlQnVmZmVyU3RvcmFnZSgpOwotCi0gICAgLy8gUXVlcnkgYW5k
IEZlbmNlIGNyZWF0aW9uCi0gICAgdmlydHVhbCBRdWVyeUltcGwgKmNyZWF0ZVF1ZXJ5KEdMZW51
bSB0eXBlKTsKLSAgICB2aXJ0dWFsIEZlbmNlSW1wbCAqY3JlYXRlRmVuY2UoKTsKLQotICAgIC8v
IEQzRDExLXJlbmRlcmVyIHNwZWNpZmljIG1ldGhvZHMKLSAgICBJRDNEMTFEZXZpY2UgKmdldERl
dmljZSgpIHsgcmV0dXJuIG1EZXZpY2U7IH0KLSAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpnZXRE
ZXZpY2VDb250ZXh0KCkgeyByZXR1cm4gbURldmljZUNvbnRleHQ7IH07Ci0gICAgSURYR0lGYWN0
b3J5ICpnZXREeGdpRmFjdG9yeSgpIHsgcmV0dXJuIG1EeGdpRmFjdG9yeTsgfTsKLQotICAgIGJv
b2wgZ2V0UmVuZGVyVGFyZ2V0UmVzb3VyY2UoZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIs
IHVuc2lnbmVkIGludCAqc3VicmVzb3VyY2VJbmRleCwgSUQzRDExVGV4dHVyZTJEICoqcmVzb3Vy
Y2UpOwotICAgIHZvaWQgdW5hcHBseVJlbmRlclRhcmdldHMoKTsKLSAgICB2b2lkIHNldE9uZVRp
bWVSZW5kZXJUYXJnZXQoSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqcmVuZGVyVGFyZ2V0Vmlldyk7
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0TFVJRChMVUlEICphZGFwdGVyTHVpZCkgY29uc3Q7Ci0K
LSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyZXIxMSk7Ci0K
LSAgICB2b2lkIGRyYXdMaW5lTG9vcChHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3Qg
R0x2b2lkICppbmRpY2VzLCBpbnQgbWluSW5kZXgsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1
ZmZlcik7Ci0gICAgdm9pZCBkcmF3VHJpYW5nbGVGYW4oR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5
cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgaW50IG1pbkluZGV4LCBnbDo6QnVmZmVyICplbGVt
ZW50QXJyYXlCdWZmZXIsIGludCBpbnN0YW5jZXMpOwotCi0gICAgdm9pZCByZWFkVGV4dHVyZURh
dGEoSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCB1bnNpZ25lZCBpbnQgc3ViUmVzb3VyY2UsIGNv
bnN0IGdsOjpSZWN0YW5nbGUgJmFyZWEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgb3V0cHV0UGl0Y2gsIGJvb2wgcGFja1JldmVy
c2VSb3dPcmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBwYWNrQWxpZ25tZW50
LCB2b2lkICpwaXhlbHMpOwotCi0gICAgdm9pZCBtYXNrZWRDbGVhcihjb25zdCBnbDo6Q2xlYXJQ
YXJhbWV0ZXJzICZjbGVhclBhcmFtcywgYm9vbCB1c2luZ0V4dGVuZGVkRHJhd0J1ZmZlcnMpOwot
ICAgIHJ4OjpSYW5nZSBnZXRWaWV3cG9ydEJvdW5kcygpIGNvbnN0OwotCi0gICAgYm9vbCBibGl0
UmVuZGVyYnVmZmVyUmVjdChjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFkUmVjdCwgY29uc3QgZ2w6
OlJlY3RhbmdsZSAmZHJhd1JlY3QsIFJlbmRlclRhcmdldCAqcmVhZFJlbmRlclRhcmdldCwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJUYXJnZXQgKmRyYXdSZW5kZXJUYXJn
ZXQsIGJvb2wgd2hvbGVCdWZmZXJDb3B5KTsKLSAgICBJRDNEMTFUZXh0dXJlMkQgKnJlc29sdmVN
dWx0aXNhbXBsZWRUZXh0dXJlKElEM0QxMVRleHR1cmUyRCAqc291cmNlLCB1bnNpZ25lZCBpbnQg
c3VicmVzb3VyY2UpOwotCi0gICAgSE1PRFVMRSBtRDNkMTFNb2R1bGU7Ci0gICAgSE1PRFVMRSBt
RHhnaU1vZHVsZTsKLSAgICBIREMgbURjOwotCi0gICAgYm9vbCBtRGV2aWNlTG9zdDsKLQotICAg
IHZvaWQgaW5pdGlhbGl6ZURldmljZSgpOwotICAgIHZvaWQgcmVsZWFzZURldmljZVJlc291cmNl
cygpOwotICAgIGludCBnZXRNaW5vclNoYWRlck1vZGVsKCkgY29uc3Q7Ci0gICAgdm9pZCByZWxl
YXNlKCk7Ci0KLSAgICBSZW5kZXJTdGF0ZUNhY2hlIG1TdGF0ZUNhY2hlOwotCi0gICAgLy8gU3Vw
cG9ydCBmbGFncwotICAgIGJvb2wgbUZsb2F0MTZUZXh0dXJlU3VwcG9ydDsKLSAgICBib29sIG1G
bG9hdDE2RmlsdGVyU3VwcG9ydDsKLSAgICBib29sIG1GbG9hdDE2UmVuZGVyU3VwcG9ydDsKLQot
ICAgIGJvb2wgbUZsb2F0MzJUZXh0dXJlU3VwcG9ydDsKLSAgICBib29sIG1GbG9hdDMyRmlsdGVy
U3VwcG9ydDsKLSAgICBib29sIG1GbG9hdDMyUmVuZGVyU3VwcG9ydDsKLQotICAgIGJvb2wgbURY
VDFUZXh0dXJlU3VwcG9ydDsKLSAgICBib29sIG1EWFQzVGV4dHVyZVN1cHBvcnQ7Ci0gICAgYm9v
bCBtRFhUNVRleHR1cmVTdXBwb3J0OwotCi0gICAgYm9vbCBtRGVwdGhUZXh0dXJlU3VwcG9ydDsK
LQotICAgIC8vIE11bHRpc2FtcGxlIGZvcm1hdCBzdXBwb3J0Ci0gICAgc3RydWN0IE11bHRpc2Ft
cGxlU3VwcG9ydEluZm8KLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBxdWFsaXR5TGV2ZWxz
W0QzRDExX01BWF9NVUxUSVNBTVBMRV9TQU1QTEVfQ09VTlRdOwotICAgIH07Ci0KLSAgICB0eXBl
ZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxEWEdJX0ZPUk1BVCwgTXVsdGlzYW1wbGVTdXBwb3J0SW5m
bywgc3RkOjpoYXNoPGludD4gPiBNdWx0aXNhbXBsZVN1cHBvcnRNYXA7Ci0gICAgTXVsdGlzYW1w
bGVTdXBwb3J0TWFwIG1NdWx0aXNhbXBsZVN1cHBvcnRNYXA7Ci0KLSAgICB1bnNpZ25lZCBpbnQg
bU1heFN1cHBvcnRlZFNhbXBsZXM7Ci0KLSAgICAvLyBjdXJyZW50IHJlbmRlciB0YXJnZXQgc3Rh
dGVzCi0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsc1tnbDo6SU1Q
TEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSU107Ci0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVk
RGVwdGhidWZmZXJTZXJpYWw7Ci0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVkU3RlbmNpbGJ1ZmZl
clNlcmlhbDsKLSAgICBib29sIG1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZDsKLSAgICBib29sIG1S
ZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQ7Ci0gICAgcng6OlJlbmRlclRhcmdldDo6RGVzYyBt
UmVuZGVyVGFyZ2V0RGVzYzsKLSAgICB1bnNpZ25lZCBpbnQgbUN1ckRlcHRoU2l6ZTsKLSAgICB1
bnNpZ25lZCBpbnQgbUN1clN0ZW5jaWxTaXplOwotCi0gICAgLy8gQ3VycmVudGx5IGFwcGxpZWQg
c2FtcGxlciBzdGF0ZXMKLSAgICBib29sIG1Gb3JjZVNldFZlcnRleFNhbXBsZXJTdGF0ZXNbZ2w6
OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU107Ci0gICAgZ2w6
OlNhbXBsZXJTdGF0ZSBtQ3VyVmVydGV4U2FtcGxlclN0YXRlc1tnbDo6SU1QTEVNRU5UQVRJT05f
TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKLQotICAgIGJvb2wgbUZvcmNlU2V0UGl4
ZWxTYW1wbGVyU3RhdGVzW2dsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUU107Ci0gICAgZ2w6OlNh
bXBsZXJTdGF0ZSBtQ3VyUGl4ZWxTYW1wbGVyU3RhdGVzW2dsOjpNQVhfVEVYVFVSRV9JTUFHRV9V
TklUU107Ci0KLSAgICAvLyBDdXJyZW50bHkgYXBwbGllZCB0ZXh0dXJlcwotICAgIHVuc2lnbmVk
IGludCBtQ3VyVmVydGV4VGV4dHVyZVNlcmlhbHNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJU
RVhfVEVYVFVSRV9JTUFHRV9VTklUU107Ci0gICAgdW5zaWduZWQgaW50IG1DdXJQaXhlbFRleHR1
cmVTZXJpYWxzW2dsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUU107Ci0KLSAgICAvLyBDdXJyZW50
bHkgYXBwbGllZCBibGVuZCBzdGF0ZQotICAgIGJvb2wgbUZvcmNlU2V0QmxlbmRTdGF0ZTsKLSAg
ICBnbDo6QmxlbmRTdGF0ZSBtQ3VyQmxlbmRTdGF0ZTsKLSAgICBnbDo6Q29sb3IgbUN1ckJsZW5k
Q29sb3I7Ci0gICAgdW5zaWduZWQgaW50IG1DdXJTYW1wbGVNYXNrOwotCi0gICAgLy8gQ3VycmVu
dGx5IGFwcGxpZWQgcmFzdGVyaXplciBzdGF0ZQotICAgIGJvb2wgbUZvcmNlU2V0UmFzdGVyU3Rh
dGU7Ci0gICAgZ2w6OlJhc3Rlcml6ZXJTdGF0ZSBtQ3VyUmFzdGVyU3RhdGU7Ci0KLSAgICAvLyBD
dXJyZW50bHkgYXBwbGllZCBkZXB0aCBzdGVuY2lsIHN0YXRlCi0gICAgYm9vbCBtRm9yY2VTZXRE
ZXB0aFN0ZW5jaWxTdGF0ZTsKLSAgICBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgbUN1ckRlcHRoU3Rl
bmNpbFN0YXRlOwotICAgIGludCBtQ3VyU3RlbmNpbFJlZjsKLSAgICBpbnQgbUN1clN0ZW5jaWxC
YWNrUmVmOwotCi0gICAgLy8gQ3VycmVudGx5IGFwcGxpZWQgc2Npc3NvciByZWN0YW5nbGUKLSAg
ICBib29sIG1Gb3JjZVNldFNjaXNzb3I7Ci0gICAgYm9vbCBtU2Npc3NvckVuYWJsZWQ7Ci0gICAg
Z2w6OlJlY3RhbmdsZSBtQ3VyU2Npc3NvcjsKLQotICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIHZp
ZXdwb3J0Ci0gICAgYm9vbCBtRm9yY2VTZXRWaWV3cG9ydDsKLSAgICBnbDo6UmVjdGFuZ2xlIG1D
dXJWaWV3cG9ydDsKLSAgICBmbG9hdCBtQ3VyTmVhcjsKLSAgICBmbG9hdCBtQ3VyRmFyOwotCi0g
ICAgLy8gQ3VycmVudGx5IGFwcGxpZWQgcHJpbWl0aXZlIHRvcG9sb2d5Ci0gICAgRDNEMTFfUFJJ
TUlUSVZFX1RPUE9MT0dZIG1DdXJyZW50UHJpbWl0aXZlVG9wb2xvZ3k7Ci0KLSAgICB1bnNpZ25l
ZCBpbnQgbUFwcGxpZWRJQlNlcmlhbDsKLSAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRTdG9yYWdl
SUJTZXJpYWw7Ci0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVkSUJPZmZzZXQ7Ci0KLSAgICB1bnNp
Z25lZCBpbnQgbUFwcGxpZWRQcm9ncmFtQmluYXJ5U2VyaWFsOwotICAgIGJvb2wgbUlzR2VvbWV0
cnlTaGFkZXJBY3RpdmU7Ci0KLSAgICBkeF9WZXJ0ZXhDb25zdGFudHMgbVZlcnRleENvbnN0YW50
czsKLSAgICBkeF9WZXJ0ZXhDb25zdGFudHMgbUFwcGxpZWRWZXJ0ZXhDb25zdGFudHM7Ci0gICAg
SUQzRDExQnVmZmVyICptRHJpdmVyQ29uc3RhbnRCdWZmZXJWUzsKLSAgICBJRDNEMTFCdWZmZXIg
Km1DdXJyZW50VmVydGV4Q29uc3RhbnRCdWZmZXI7Ci0KLSAgICBkeF9QaXhlbENvbnN0YW50cyBt
UGl4ZWxDb25zdGFudHM7Ci0gICAgZHhfUGl4ZWxDb25zdGFudHMgbUFwcGxpZWRQaXhlbENvbnN0
YW50czsKLSAgICBJRDNEMTFCdWZmZXIgKm1Ecml2ZXJDb25zdGFudEJ1ZmZlclBTOwotICAgIElE
M0QxMUJ1ZmZlciAqbUN1cnJlbnRQaXhlbENvbnN0YW50QnVmZmVyOwotCi0gICAgSUQzRDExQnVm
ZmVyICptQ3VycmVudEdlb21ldHJ5Q29uc3RhbnRCdWZmZXI7Ci0KLSAgICAvLyBWZXJ0ZXgsIGlu
ZGV4IGFuZCBpbnB1dCBsYXlvdXRzCi0gICAgVmVydGV4RGF0YU1hbmFnZXIgKm1WZXJ0ZXhEYXRh
TWFuYWdlcjsKLSAgICBJbmRleERhdGFNYW5hZ2VyICptSW5kZXhEYXRhTWFuYWdlcjsKLSAgICBJ
bnB1dExheW91dENhY2hlIG1JbnB1dExheW91dENhY2hlOwotCi0gICAgU3RyZWFtaW5nSW5kZXhC
dWZmZXJJbnRlcmZhY2UgKm1MaW5lTG9vcElCOwotICAgIFN0cmVhbWluZ0luZGV4QnVmZmVySW50
ZXJmYWNlICptVHJpYW5nbGVGYW5JQjsKLQotICAgIC8vIFRleHR1cmUgY29weSByZXNvdXJjZXMK
LSAgICBib29sIG1Db3B5UmVzb3VyY2VzSW5pdGlhbGl6ZWQ7Ci0gICAgSUQzRDExQnVmZmVyICpt
Q29weVZCOwotICAgIElEM0QxMVNhbXBsZXJTdGF0ZSAqbUNvcHlTYW1wbGVyOwotICAgIElEM0Qx
MUlucHV0TGF5b3V0ICptQ29weUlMOwotICAgIElEM0QxMVZlcnRleFNoYWRlciAqbUNvcHlWUzsK
LSAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUNvcHlSR0JBUFM7Ci0gICAgSUQzRDExUGl4ZWxTaGFk
ZXIgKm1Db3B5UkdCUFM7Ci0gICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1Db3B5THVtUFM7Ci0gICAg
SUQzRDExUGl4ZWxTaGFkZXIgKm1Db3B5THVtQWxwaGFQUzsKLQotICAgIC8vIE1hc2tlZCBjbGVh
ciByZXNvdXJjZXMKLSAgICBib29sIG1DbGVhclJlc291cmNlc0luaXRpYWxpemVkOwotICAgIElE
M0QxMUJ1ZmZlciAqbUNsZWFyVkI7Ci0gICAgSUQzRDExSW5wdXRMYXlvdXQgKm1DbGVhcklMOwot
ICAgIElEM0QxMVZlcnRleFNoYWRlciAqbUNsZWFyVlM7Ci0gICAgSUQzRDExUGl4ZWxTaGFkZXIg
Km1DbGVhclNpbmdsZVBTOwotICAgIElEM0QxMVBpeGVsU2hhZGVyICptQ2xlYXJNdWx0aXBsZVBT
OwotICAgIElEM0QxMVJhc3Rlcml6ZXJTdGF0ZSAqbUNsZWFyU2Npc3NvclJTOwotICAgIElEM0Qx
MVJhc3Rlcml6ZXJTdGF0ZSAqbUNsZWFyTm9TY2lzc29yUlM7Ci0KLSAgICAvLyBTeW5jIHF1ZXJ5
Ci0gICAgSUQzRDExUXVlcnkgKm1TeW5jUXVlcnk7Ci0KLSAgICBJRDNEMTFEZXZpY2UgKm1EZXZp
Y2U7Ci0gICAgRDNEX0ZFQVRVUkVfTEVWRUwgbUZlYXR1cmVMZXZlbDsKLSAgICBJRDNEMTFEZXZp
Y2VDb250ZXh0ICptRGV2aWNlQ29udGV4dDsKLSAgICBJRFhHSUFkYXB0ZXIgKm1EeGdpQWRhcHRl
cjsKLSAgICBEWEdJX0FEQVBURVJfREVTQyBtQWRhcHRlckRlc2NyaXB0aW9uOwotICAgIGNoYXIg
bURlc2NyaXB0aW9uWzEyOF07Ci0gICAgSURYR0lGYWN0b3J5ICptRHhnaUZhY3Rvcnk7Ci0KLSAg
ICAvLyBDYWNoZWQgZGV2aWNlIGNhcHMKLSAgICBib29sIG1CR1JBVGV4dHVyZVN1cHBvcnQ7Ci19
OwotCi19Ci0jZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUkVSMTFfSF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVu
ZGVyZXI5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvUmVuZGVyZXI5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg5ZjhiZGRj
OGQ2Y2ZlYjEyOGE0MzNlZDBmN2UxNGVmZThkMzExOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL1JlbmRlcmVyOS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMjY0ICswLDAg
QEAKLSNpbmNsdWRlICJwcmVjb21waWxlZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0y
MDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gUmVu
ZGVyZXI5LmNwcDogSW1wbGVtZW50cyBhIGJhY2stZW5kIHNwZWNpZmljIGNsYXNzIGZvciB0aGUg
RDNEOSByZW5kZXJlci4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL0J1ZmZlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1JlbmRl
cmJ1ZmZlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL0luZGV4RGF0YU1hbmFnZXIuaCIKLSNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvUmVuZGVyZXI5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L3JlbmRlcmVyOV91dGlscy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJF
eGVjdXRhYmxlOS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9Td2FwQ2hhaW45Lmgi
Ci0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlOS5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZTkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvQmxpdC5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQ5
LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlcjkuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhCdWZmZXI5LmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2U5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL1F1ZXJ5OS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZTkuaCIKLQot
I2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiCi0KLSNpbmNsdWRlICJ0aGlyZF9wYXJ0eS90cmFj
ZV9ldmVudC90cmFjZV9ldmVudC5oIgotCi0vLyBDYW4gYWxzbyBiZSBlbmFibGVkIGJ5IGRlZmlu
aW5nIEZPUkNFX1JFRl9SQVNUIGluIHRoZSBwcm9qZWN0J3MgcHJlZGVmaW5lZCBtYWNyb3MKLSNk
ZWZpbmUgUkVGX1JBU1QgMAotCi0vLyBUaGUgIkRlYnVnIFRoaXMgUGl4ZWwuLi4iIGZlYXR1cmUg
aW4gUElYIG9mdGVuIGZhaWxzIHdoZW4gdXNpbmcgdGhlCi0vLyBEM0Q5RXggaW50ZXJmYWNlcy4g
IEluIG9yZGVyIHRvIGdldCBkZWJ1ZyBwaXhlbCB0byB3b3JrIG9uIGEgVmlzdGEvV2luIDcKLS8v
IG1hY2hpbmUsIGRlZmluZSAiQU5HTEVfRU5BQkxFX0QzRDlFWD0wIiBpbiB5b3VyIHByb2plY3Qg
ZmlsZS4KLSNpZiAhZGVmaW5lZChBTkdMRV9FTkFCTEVfRDNEOUVYKQotLy8gRW5hYmxlcyB1c2Ug
b2YgdGhlIElEaXJlY3QzRDlFeCBpbnRlcmZhY2UsIHdoZW4gYXZhaWxhYmxlCi0jZGVmaW5lIEFO
R0xFX0VOQUJMRV9EM0Q5RVggMQotI2VuZGlmIC8vICFkZWZpbmVkKEFOR0xFX0VOQUJMRV9EM0Q5
RVgpCi0KLW5hbWVzcGFjZSByeAotewotc3RhdGljIGNvbnN0IEQzREZPUk1BVCBSZW5kZXJUYXJn
ZXRGb3JtYXRzW10gPQotICAgIHsKLSAgICAgICAgRDNERk1UX0ExUjVHNUI1LAotICAgIC8vICBE
M0RGTVRfQTJSMTBHMTBCMTAsICAgLy8gVGhlIGNvbG9yX3JhbXAgY29uZm9ybWFuY2UgdGVzdCB1
c2VzIFJlYWRQaXhlbHMgd2l0aCBVTlNJR05FRF9CWVRFIGNhdXNpbmcgaXQgdG8gdGhpbmsgdGhh
dCByZW5kZXJpbmcgc2tpcHBlZCBhIGNvbG91ciB2YWx1ZS4KLSAgICAgICAgRDNERk1UX0E4UjhH
OEI4LAotICAgICAgICBEM0RGTVRfUjVHNkI1LAotICAgIC8vICBEM0RGTVRfWDFSNUc1QjUsICAg
ICAgLy8gSGFzIG5vIGNvbXBhdGlibGUgT3BlbkdMIEVTIHJlbmRlcmJ1ZmZlciBmb3JtYXQKLSAg
ICAgICAgRDNERk1UX1g4UjhHOEI4Ci0gICAgfTsKLQotc3RhdGljIGNvbnN0IEQzREZPUk1BVCBE
ZXB0aFN0ZW5jaWxGb3JtYXRzW10gPQotICAgIHsKLSAgICAgICAgRDNERk1UX1VOS05PV04sCi0g
ICAgLy8gIEQzREZNVF9EMTZfTE9DS0FCTEUsCi0gICAgICAgIEQzREZNVF9EMzIsCi0gICAgLy8g
IEQzREZNVF9EMTVTMSwKLSAgICAgICAgRDNERk1UX0QyNFM4LAotICAgICAgICBEM0RGTVRfRDI0
WDgsCi0gICAgLy8gIEQzREZNVF9EMjRYNFM0LAotICAgICAgICBEM0RGTVRfRDE2LAotICAgIC8v
ICBEM0RGTVRfRDMyRl9MT0NLQUJMRSwKLSAgICAvLyAgRDNERk1UX0QyNEZTOAotICAgIH07Ci0K
LWVudW0KLXsKLSAgICBNQVhfVkVSVEVYX0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOSA9IDI1NiwKLSAg
ICBNQVhfUElYRUxfQ09OU1RBTlRfVkVDVE9SU19TTTIgPSAzMiwKLSAgICBNQVhfUElYRUxfQ09O
U1RBTlRfVkVDVE9SU19TTTMgPSAyMjQsCi0gICAgTUFYX1ZBUllJTkdfVkVDVE9SU19TTTIgPSA4
LAotICAgIE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00zID0gMTAsCi0KLSAgICBNQVhfVEVYVFVSRV9J
TUFHRV9VTklUU19WVEZfU00zID0gNAotfTsKLQotUmVuZGVyZXI5OjpSZW5kZXJlcjkoZWdsOjpE
aXNwbGF5ICpkaXNwbGF5LCBIREMgaERjLCBib29sIHNvZnR3YXJlRGV2aWNlKSA6IFJlbmRlcmVy
KGRpc3BsYXkpLCBtRGMoaERjKSwgbVNvZnR3YXJlRGV2aWNlKHNvZnR3YXJlRGV2aWNlKQotewot
ICAgIG1EM2Q5TW9kdWxlID0gTlVMTDsKLQotICAgIG1EM2Q5ID0gTlVMTDsKLSAgICBtRDNkOUV4
ID0gTlVMTDsKLSAgICBtRGV2aWNlID0gTlVMTDsKLSAgICBtRGV2aWNlRXggPSBOVUxMOwotICAg
IG1EZXZpY2VXaW5kb3cgPSBOVUxMOwotICAgIG1CbGl0ID0gTlVMTDsKLQotICAgIG1BZGFwdGVy
ID0gRDNEQURBUFRFUl9ERUZBVUxUOwotCi0gICAgI2lmIFJFRl9SQVNUID09IDEgfHwgZGVmaW5l
ZChGT1JDRV9SRUZfUkFTVCkKLSAgICAgICAgbURldmljZVR5cGUgPSBEM0RERVZUWVBFX1JFRjsK
LSAgICAjZWxzZQotICAgICAgICBtRGV2aWNlVHlwZSA9IEQzRERFVlRZUEVfSEFMOwotICAgICNl
bmRpZgotCi0gICAgbURldmljZUxvc3QgPSBmYWxzZTsKLQotICAgIG1NYXhTdXBwb3J0ZWRTYW1w
bGVzID0gMDsKLQotICAgIG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgPSBOVUxMOwotCi0gICAgbVZl
cnRleERhdGFNYW5hZ2VyID0gTlVMTDsKLSAgICBtSW5kZXhEYXRhTWFuYWdlciA9IE5VTEw7Ci0g
ICAgbUxpbmVMb29wSUIgPSBOVUxMOwotCi0gICAgbU1heE51bGxDb2xvcmJ1ZmZlckxSVSA9IDA7
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fTlVMTF9DT0xPUkJVRkZFUl9DQUNIRV9FTlRS
SUVTOyBpKyspCi0gICAgewotICAgICAgICBtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0ubHJ1Q291
bnQgPSAwOwotICAgICAgICBtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0ud2lkdGggPSAwOwotICAg
ICAgICBtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0uaGVpZ2h0ID0gMDsKLSAgICAgICAgbU51bGxD
b2xvcmJ1ZmZlckNhY2hlW2ldLmJ1ZmZlciA9IE5VTEw7Ci0gICAgfQotfQotCi1SZW5kZXJlcjk6
On5SZW5kZXJlcjkoKQotewotICAgIHJlbGVhc2VEZXZpY2VSZXNvdXJjZXMoKTsKLQotICAgIGlm
IChtRGV2aWNlKQotICAgIHsKLSAgICAgICAgLy8gSWYgdGhlIGRldmljZSBpcyBsb3N0LCByZXNl
dCBpdCBmaXJzdCB0byBwcmV2ZW50IGxlYXZpbmcgdGhlIGRyaXZlciBpbiBhbiB1bnN0YWJsZSBz
dGF0ZQotICAgICAgICBpZiAodGVzdERldmljZUxvc3QoZmFsc2UpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXNldERldmljZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgbURldmljZS0+UmVs
ZWFzZSgpOwotICAgICAgICBtRGV2aWNlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobURldmlj
ZUV4KQotICAgIHsKLSAgICAgICAgbURldmljZUV4LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EZXZp
Y2VFeCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1EM2Q5KQotICAgIHsKLSAgICAgICAgbUQz
ZDktPlJlbGVhc2UoKTsKLSAgICAgICAgbUQzZDkgPSBOVUxMOwotICAgIH0KLQotICAgIGlmICht
RGV2aWNlV2luZG93KQotICAgIHsKLSAgICAgICAgRGVzdHJveVdpbmRvdyhtRGV2aWNlV2luZG93
KTsKLSAgICAgICAgbURldmljZVdpbmRvdyA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1EM2Q5
RXgpCi0gICAgewotICAgICAgICBtRDNkOUV4LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EM2Q5RXgg
PSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtRDNkOU1vZHVsZSkKLSAgICB7Ci0gICAgICAgIG1E
M2Q5TW9kdWxlID0gTlVMTDsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIW1NdWx0aVNhbXBsZVN1cHBv
cnQuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZSBbXSBtTXVsdGlTYW1wbGVTdXBwb3J0
LmJlZ2luKCktPnNlY29uZDsKLSAgICAgICAgbU11bHRpU2FtcGxlU3VwcG9ydC5lcmFzZShtTXVs
dGlTYW1wbGVTdXBwb3J0LmJlZ2luKCkpOwotICAgIH0KLX0KLQotUmVuZGVyZXI5ICpSZW5kZXJl
cjk6Om1ha2VSZW5kZXJlcjkoUmVuZGVyZXIgKnJlbmRlcmVyKQotewotICAgIEFTU0VSVChIQVNf
RFlOQU1JQ19UWVBFKHJ4OjpSZW5kZXJlcjkqLCByZW5kZXJlcikpOwotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxyeDo6UmVuZGVyZXI5Kj4ocmVuZGVyZXIpOwotfQotCi1FR0xpbnQgUmVuZGVyZXI5
Ojppbml0aWFsaXplKCkKLXsKLSAgICBpZiAoIWluaXRpYWxpemVDb21waWxlcigpKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7Ci0gICAgfQotCi0gICAgaWYgKG1T
b2Z0d2FyZURldmljZSkKLSAgICB7Ci0gICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgIkdldE1v
ZHVsZUhhbmRsZV9zd2lmdHNoYWRlciIpOwotICAgICAgICBtRDNkOU1vZHVsZSA9IEdldE1vZHVs
ZUhhbmRsZShURVhUKCJzd2lmdHNoYWRlcl9kM2Q5LmRsbCIpKTsKLSAgICB9Ci0gICAgZWxzZQot
ICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiR2V0TW9kdWxlSGFuZGxlX2QzZDki
KTsKLSAgICAgICAgbUQzZDlNb2R1bGUgPSBHZXRNb2R1bGVIYW5kbGUoVEVYVCgiZDNkOS5kbGwi
KSk7Ci0gICAgfQotCi0gICAgaWYgKG1EM2Q5TW9kdWxlID09IE5VTEwpCi0gICAgewotICAgICAg
ICBFUlIoIk5vIEQzRDkgbW9kdWxlIGZvdW5kIC0gYWJvcnRpbmchXG4iKTsKLSAgICAgICAgcmV0
dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7Ci0gICAgfQotCi0gICAgdHlwZWRlZiBIUkVTVUxUIChX
SU5BUEkgKkRpcmVjdDNEQ3JlYXRlOUV4RnVuYykoVUlOVCwgSURpcmVjdDNEOUV4KiopOwotICAg
IERpcmVjdDNEQ3JlYXRlOUV4RnVuYyBEaXJlY3QzRENyZWF0ZTlFeFB0ciA9IHJlaW50ZXJwcmV0
X2Nhc3Q8RGlyZWN0M0RDcmVhdGU5RXhGdW5jPihHZXRQcm9jQWRkcmVzcyhtRDNkOU1vZHVsZSwg
IkRpcmVjdDNEQ3JlYXRlOUV4IikpOwotCi0gICAgLy8gVXNlIERpcmVjdDNEOUV4IGlmIGF2YWls
YWJsZS4gQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIHZlcnNpb24gaXMgbGVzcwotICAgIC8vIGlu
Y2xpbmVkIHRvIHJlcG9ydCBhIGxvc3QgY29udGV4dCwgZm9yIGV4YW1wbGUgd2hlbiB0aGUgdXNl
ciBzd2l0Y2hlcwotICAgIC8vIGRlc2t0b3AuIERpcmVjdDNEOUV4IGlzIGF2YWlsYWJsZSBpbiBX
aW5kb3dzIFZpc3RhIGFuZCBsYXRlciBpZiBzdWl0YWJsZSBkcml2ZXJzIGFyZSBhdmFpbGFibGUu
Ci0gICAgaWYgKEFOR0xFX0VOQUJMRV9EM0Q5RVggJiYgRGlyZWN0M0RDcmVhdGU5RXhQdHIgJiYg
U1VDQ0VFREVEKERpcmVjdDNEQ3JlYXRlOUV4UHRyKEQzRF9TREtfVkVSU0lPTiwgJm1EM2Q5RXgp
KSkKLSAgICB7Ci0gICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgIkQzZDlFeF9RdWVyeUludGVy
ZmFjZSIpOwotICAgICAgICBBU1NFUlQobUQzZDlFeCk7Ci0gICAgICAgIG1EM2Q5RXgtPlF1ZXJ5
SW50ZXJmYWNlKElJRF9JRGlyZWN0M0Q5LCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1EM2Q5
KSk7Ci0gICAgICAgIEFTU0VSVChtRDNkOSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAg
ICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgIkRpcmVjdDNEQ3JlYXRlOSIpOwotICAgICAgICBtRDNk
OSA9IERpcmVjdDNEQ3JlYXRlOShEM0RfU0RLX1ZFUlNJT04pOwotICAgIH0KLQotICAgIGlmICgh
bUQzZDkpCi0gICAgewotICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgRDNEOSBkZXZpY2Ug
LSBhYm9ydGluZyFcbiIpOwotICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsKLSAg
ICB9Ci0KLSAgICBpZiAobURjICE9IE5VTEwpCi0gICAgewotICAgIC8vICBVTklNUExFTUVOVEVE
KCk7ICAgLy8gRklYTUU6IERldGVybWluZSB3aGljaCBhZGFwdGVyIGluZGV4IHRoZSBkZXZpY2Ug
Y29udGV4dCBjb3JyZXNwb25kcyB0bwotICAgIH0KLQotICAgIEhSRVNVTFQgcmVzdWx0OwotCi0g
ICAgLy8gR2l2ZSB1cCBvbiBnZXR0aW5nIGRldmljZSBjYXBzIGFmdGVyIGFib3V0IG9uZSBzZWNv
bmQuCi0gICAgewotICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJHZXREZXZpY2VDYXBzIik7
Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7ICsraSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmVzdWx0ID0gbUQzZDktPkdldERldmljZUNhcHMobUFkYXB0ZXIsIG1EZXZpY2VUeXBl
LCAmbURldmljZUNhcHMpOwotICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZSBpZiAocmVzdWx0ID09IEQzREVSUl9OT1RBVkFJTEFCTEUpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgU2xlZXAoMTAwKTsgICAvLyBHaXZlIHRoZSBkcml2ZXIgc29t
ZSB0aW1lIHRvIGluaXRpYWxpemUvcmVjb3ZlcgotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZSBpZiAoRkFJTEVEKHJlc3VsdCkpICAgLy8gRDNERVJSX09VVE9GVklERU9NRU1PUlksIEVf
T1VUT0ZNRU1PUlksIEQzREVSUl9JTlZBTElEREVWSUNFLCBvciBhbm90aGVyIGVycm9yIHdlIGNh
bid0IHJlY292ZXIgZnJvbQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigiZmFp
bGVkIHRvIGdldCBkZXZpY2UgY2FwcyAoMHgleClcbiIsIHJlc3VsdCk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAobURldmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJzaW9uIDwgRDNEUFNf
VkVSU0lPTigyLCAwKSkKLSAgICB7Ci0gICAgICAgIEVSUigiUmVuZGVyZXIgZG9lcyBub3Qgc3Vw
cG9ydCBQUyAyLjAuIGFib3J0aW5nIVxuIik7Ci0gICAgICAgIHJldHVybiBFR0xfTk9UX0lOSVRJ
QUxJWkVEOwotICAgIH0KLQotICAgIC8vIFdoZW4gRGlyZWN0WDkgaXMgcnVubmluZyB3aXRoIGFu
IG9sZGVyIERpcmVjdFg4IGRyaXZlciwgYSBTdHJldGNoUmVjdCBmcm9tIGEgcmVndWxhciB0ZXh0
dXJlIHRvIGEgcmVuZGVyIHRhcmdldCB0ZXh0dXJlIGlzIG5vdCBzdXBwb3J0ZWQuCi0gICAgLy8g
VGhpcyBpcyByZXF1aXJlZCBieSBUZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRlclRhcmdldC4KLSAg
ICBpZiAoKG1EZXZpY2VDYXBzLkRldkNhcHMyICYgRDNEREVWQ0FQUzJfQ0FOX1NUUkVUQ0hSRUNU
X0ZST01fVEVYVFVSRVMpID09IDApCi0gICAgewotICAgICAgICBFUlIoIlJlbmRlcmVyIGRvZXMg
bm90IHN1cHBvcnQgc3RyZXRjdHJlY3QgZnJvbSB0ZXh0dXJlcyFcbiIpOwotICAgICAgICByZXR1
cm4gRUdMX05PVF9JTklUSUFMSVpFRDsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIFRSQUNFX0VW
RU5UMCgiZ3B1IiwgIkdldEFkYXB0ZXJJZGVudGlmaWVyIik7Ci0gICAgICAgIG1EM2Q5LT5HZXRB
ZGFwdGVySWRlbnRpZmllcihtQWRhcHRlciwgMCwgJm1BZGFwdGVySWRlbnRpZmllcik7Ci0gICAg
fQotCi0gICAgLy8gQVRJIGNhcmRzIG9uIFhQIGhhdmUgcHJvYmxlbXMgd2l0aCBub24tcG93ZXIt
b2YtdHdvIHRleHR1cmVzLgotICAgIG1TdXBwb3J0c05vblBvd2VyMlRleHR1cmVzID0gIShtRGV2
aWNlQ2Fwcy5UZXh0dXJlQ2FwcyAmIEQzRFBURVhUVVJFQ0FQU19QT1cyKSAmJgotICAgICAgICAh
KG1EZXZpY2VDYXBzLlRleHR1cmVDYXBzICYgRDNEUFRFWFRVUkVDQVBTX0NVQkVNQVBfUE9XMikg
JiYKLSAgICAgICAgIShtRGV2aWNlQ2Fwcy5UZXh0dXJlQ2FwcyAmIEQzRFBURVhUVVJFQ0FQU19O
T05QT1cyQ09ORElUSU9OQUwpICYmCi0gICAgICAgICEoZ2V0Q29tcGFyYWJsZU9TVmVyc2lvbigp
IDwgdmVyc2lvbldpbmRvd3NWaXN0YSAmJiBtQWRhcHRlcklkZW50aWZpZXIuVmVuZG9ySWQgPT0g
VkVORE9SX0lEX0FNRCk7Ci0KLSAgICAvLyBNdXN0IHN1cHBvcnQgYSBtaW5pbXVtIG9mIDI6MSBh
bmlzb3Ryb3B5IGZvciBtYXggYW5pc290cm9weSB0byBiZSBjb25zaWRlcmVkIHN1cHBvcnRlZCwg
cGVyIHRoZSBzcGVjCi0gICAgbVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHkgPSAoKG1E
ZXZpY2VDYXBzLlJhc3RlckNhcHMgJiBEM0RQUkFTVEVSQ0FQU19BTklTT1RST1BZKSAmJiAobURl
dmljZUNhcHMuTWF4QW5pc290cm9weSA+PSAyKSk7Ci0KLSAgICBtTWluU3dhcEludGVydmFsID0g
NDsKLSAgICBtTWF4U3dhcEludGVydmFsID0gMDsKLQotICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVz
ZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX0lNTUVESUFURSkKLSAgICB7
Ci0gICAgICAgIG1NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dhcEludGVydmFsLCAw
KTsKLSAgICAgICAgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2YWws
IDApOwotICAgIH0KLSAgICBpZiAobURldmljZUNhcHMuUHJlc2VudGF0aW9uSW50ZXJ2YWxzICYg
RDNEUFJFU0VOVF9JTlRFUlZBTF9PTkUpCi0gICAgewotICAgICAgICBtTWluU3dhcEludGVydmFs
ID0gc3RkOjptaW4obU1pblN3YXBJbnRlcnZhbCwgMSk7Ci0gICAgICAgIG1NYXhTd2FwSW50ZXJ2
YWwgPSBzdGQ6Om1heChtTWF4U3dhcEludGVydmFsLCAxKTsKLSAgICB9Ci0gICAgaWYgKG1EZXZp
Y2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfVFdPKQot
ICAgIHsKLSAgICAgICAgbU1pblN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2
YWwsIDIpOwotICAgICAgICBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRl
cnZhbCwgMik7Ci0gICAgfQotICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZh
bHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX1RIUkVFKQotICAgIHsKLSAgICAgICAgbU1pblN3YXBJ
bnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDMpOwotICAgICAgICBtTWF4U3dh
cEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgMyk7Ci0gICAgfQotICAgIGlm
IChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFM
X0ZPVVIpCi0gICAgewotICAgICAgICBtTWluU3dhcEludGVydmFsID0gc3RkOjptaW4obU1pblN3
YXBJbnRlcnZhbCwgNCk7Ci0gICAgICAgIG1NYXhTd2FwSW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4
U3dhcEludGVydmFsLCA0KTsKLSAgICB9Ci0KLSAgICBpbnQgbWF4ID0gMDsKLSAgICB7Ci0gICAg
ICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgImdldE11bHRpU2FtcGxlU3VwcG9ydCIpOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShSZW5kZXJUYXJnZXRGb3Jt
YXRzKTsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBib29sICptdWx0aXNhbXBsZUFycmF5
ID0gbmV3IGJvb2xbRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUyArIDFdOwotICAgICAgICAgICAg
Z2V0TXVsdGlTYW1wbGVTdXBwb3J0KFJlbmRlclRhcmdldEZvcm1hdHNbaV0sIG11bHRpc2FtcGxl
QXJyYXkpOwotICAgICAgICAgICAgbU11bHRpU2FtcGxlU3VwcG9ydFtSZW5kZXJUYXJnZXRGb3Jt
YXRzW2ldXSA9IG11bHRpc2FtcGxlQXJyYXk7Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGogPSBE
M0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTOyBqID49IDA7IC0taikKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBpZiAobXVsdGlzYW1wbGVBcnJheVtqXSAmJiBqICE9IEQzRE1VTFRJU0FN
UExFX05PTk1BU0tBQkxFICYmIGogPiBtYXgpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBtYXggPSBqOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiZ2V0
TXVsdGlTYW1wbGVTdXBwb3J0MiIpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IEFycmF5U2l6ZShEZXB0aFN0ZW5jaWxGb3JtYXRzKTsgKytpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAoRGVwdGhTdGVuY2lsRm9ybWF0c1tpXSA9PSBEM0RGTVRfVU5LTk9XTikKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgYm9vbCAqbXVsdGlzYW1wbGVB
cnJheSA9IG5ldyBib29sW0QzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVMgKyAxXTsKLSAgICAgICAg
ICAgIGdldE11bHRpU2FtcGxlU3VwcG9ydChEZXB0aFN0ZW5jaWxGb3JtYXRzW2ldLCBtdWx0aXNh
bXBsZUFycmF5KTsKLSAgICAgICAgICAgIG1NdWx0aVNhbXBsZVN1cHBvcnRbRGVwdGhTdGVuY2ls
Rm9ybWF0c1tpXV0gPSBtdWx0aXNhbXBsZUFycmF5OwotCi0gICAgICAgICAgICBmb3IgKGludCBq
ID0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgaiA+PSAwOyAtLWopCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgaWYgKG11bHRpc2FtcGxlQXJyYXlbal0gJiYgaiAhPSBEM0RNVUxU
SVNBTVBMRV9OT05NQVNLQUJMRSAmJiBqID4gbWF4KQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgbWF4ID0gajsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9IG1heDsKLQot
ICAgIHN0YXRpYyBjb25zdCBUQ0hBUiB3aW5kb3dOYW1lW10gPSBURVhUKCJBbmdsZUhpZGRlbldp
bmRvdyIpOwotICAgIHN0YXRpYyBjb25zdCBUQ0hBUiBjbGFzc05hbWVbXSA9IFRFWFQoIlNUQVRJ
QyIpOwotCi0gICAgewotICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJDcmVhdGVXaW5kb3dF
eCIpOwotICAgICAgICBtRGV2aWNlV2luZG93ID0gQ3JlYXRlV2luZG93RXgoV1NfRVhfTk9BQ1RJ
VkFURSwgY2xhc3NOYW1lLCB3aW5kb3dOYW1lLCBXU19ESVNBQkxFRCB8IFdTX1BPUFVQLCAwLCAw
LCAxLCAxLCBIV05EX01FU1NBR0UsIE5VTEwsIEdldE1vZHVsZUhhbmRsZShOVUxMKSwgTlVMTCk7
Ci0gICAgfQotCi0gICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbWV0ZXJzID0g
Z2V0RGVmYXVsdFByZXNlbnRQYXJhbWV0ZXJzKCk7Ci0gICAgRFdPUkQgYmVoYXZpb3JGbGFncyA9
IEQzRENSRUFURV9GUFVfUFJFU0VSVkUgfCBEM0RDUkVBVEVfTk9XSU5ET1dDSEFOR0VTOwotCi0g
ICAgewotICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJEM2Q5X0NyZWF0ZURldmljZSIpOwot
ICAgICAgICByZXN1bHQgPSBtRDNkOS0+Q3JlYXRlRGV2aWNlKG1BZGFwdGVyLCBtRGV2aWNlVHlw
ZSwgbURldmljZVdpbmRvdywgYmVoYXZpb3JGbGFncyB8IEQzRENSRUFURV9IQVJEV0FSRV9WRVJU
RVhQUk9DRVNTSU5HIHwgRDNEQ1JFQVRFX1BVUkVERVZJQ0UsICZwcmVzZW50UGFyYW1ldGVycywg
Jm1EZXZpY2UpOwotICAgIH0KLSAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVN
T1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJfREVWSUNF
TE9TVCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBFR0xfQkFEX0FMTE9DOwotICAgIH0KLQotICAg
IGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1Iiwg
IkQzZDlfQ3JlYXRlRGV2aWNlMiIpOwotICAgICAgICByZXN1bHQgPSBtRDNkOS0+Q3JlYXRlRGV2
aWNlKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgbURldmljZVdpbmRvdywgYmVoYXZpb3JGbGFncyB8
IEQzRENSRUFURV9TT0ZUV0FSRV9WRVJURVhQUk9DRVNTSU5HLCAmcHJlc2VudFBhcmFtZXRlcnMs
ICZtRGV2aWNlKTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcmVzdWx0ID09IEQzREVSUl9OT1RBVkFJTEFCTEUgfHwg
cmVzdWx0ID09IEQzREVSUl9ERVZJQ0VMT1NUKTsKLSAgICAgICAgICAgIHJldHVybiBFR0xfQkFE
X0FMTE9DOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1EM2Q5RXgpCi0gICAgewotICAg
ICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJtRGV2aWNlX1F1ZXJ5SW50ZXJmYWNlIik7Ci0gICAg
ICAgIHJlc3VsdCA9IG1EZXZpY2UtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JRGlyZWN0M0REZXZpY2U5
RXgsICh2b2lkKiopICZtRGV2aWNlRXgpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiU2hhZGVy
Q2FjaGUgaW5pdGlhbGl6ZSIpOwotICAgICAgICBtVmVydGV4U2hhZGVyQ2FjaGUuaW5pdGlhbGl6
ZShtRGV2aWNlKTsKLSAgICAgICAgbVBpeGVsU2hhZGVyQ2FjaGUuaW5pdGlhbGl6ZShtRGV2aWNl
KTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBvY2NsdXNpb24gcXVlcnkgc3VwcG9ydAotICAgIElE
aXJlY3QzRFF1ZXJ5OSAqb2NjbHVzaW9uUXVlcnkgPSBOVUxMOwotICAgIHsKLSAgICAgICAgVFJB
Q0VfRVZFTlQwKCJncHUiLCAiZGV2aWNlX0NyZWF0ZVF1ZXJ5Iik7Ci0gICAgICAgIGlmIChTVUND
RUVERUQobURldmljZS0+Q3JlYXRlUXVlcnkoRDNEUVVFUllUWVBFX09DQ0xVU0lPTiwgJm9jY2x1
c2lvblF1ZXJ5KSkgJiYgb2NjbHVzaW9uUXVlcnkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG9j
Y2x1c2lvblF1ZXJ5LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBtT2NjbHVzaW9uUXVlcnlTdXBw
b3J0ID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1PY2NsdXNpb25RdWVyeVN1cHBvcnQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIC8vIENoZWNrIGV2ZW50IHF1ZXJ5IHN1cHBvcnQKLSAgICBJRGlyZWN0M0RRdWVyeTkgKmV2
ZW50UXVlcnkgPSBOVUxMOwotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiZGV2
aWNlX0NyZWF0ZVF1ZXJ5MiIpOwotICAgICAgICBpZiAoU1VDQ0VFREVEKG1EZXZpY2UtPkNyZWF0
ZVF1ZXJ5KEQzRFFVRVJZVFlQRV9FVkVOVCwgJmV2ZW50UXVlcnkpKSAmJiBldmVudFF1ZXJ5KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBldmVudFF1ZXJ5LT5SZWxlYXNlKCk7Ci0gICAgICAgICAg
ICBtRXZlbnRRdWVyeVN1cHBvcnQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgewotICAgICAgICAgICAgbUV2ZW50UXVlcnlTdXBwb3J0ID0gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7Ci0gICAg
bUQzZDktPkdldEFkYXB0ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnREaXNwbGF5TW9k
ZSk7Ci0KLSAgICAvLyBDaGVjayB2ZXJ0ZXggdGV4dHVyZSBzdXBwb3J0Ci0gICAgLy8gT25seSBE
aXJlY3QzRCAxMCByZWFkeSBkZXZpY2VzIHN1cHBvcnQgYWxsIHRoZSBuZWNlc3NhcnkgdmVydGV4
IHRleHR1cmUgZm9ybWF0cy4KLSAgICAvLyBXZSB0ZXN0IHRoaXMgdXNpbmcgRDNEOSBieSBjaGVj
a2luZyBzdXBwb3J0IGZvciB0aGUgUjE2RiBmb3JtYXQuCi0gICAgbVZlcnRleFRleHR1cmVTdXBw
b3J0ID0gbURldmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJzaW9uID49IEQzRFBTX1ZFUlNJT04oMywg
MCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNr
RGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZv
cm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEQzRFVTQUdFX1FVRVJZX1ZFUlRFWFRFWFRVUkUsIEQzRFJUWVBFX1RFWFRV
UkUsIEQzREZNVF9SMTZGKSk7Ci0KLSAgICAvLyBDaGVjayBkZXB0aCB0ZXh0dXJlIHN1cHBvcnQK
LSAgICAvLyB3ZSB1c2UgSU5UWiBmb3IgZGVwdGggdGV4dHVyZXMgaW4gRGlyZWN0M0Q5Ci0gICAg
Ly8gd2UgYWxzbyB3YW50IE5VTEwgdGV4dHVyZSBzdXBwb3J0IHRvIGVuc3VyZSB0aGUgd2UgY2Fu
IG1ha2UgZGVwdGgtb25seSBGQk9zCi0gICAgLy8gc2VlIGh0dHA6Ly9hcmFzLXAuaW5mby90ZXh0
cy9EM0Q5R1BVSGFja3MuaHRtbAotICAgIG1EZXB0aFRleHR1cmVTdXBwb3J0ID0gU1VDQ0VFREVE
KG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnRE
aXNwbGF5TW9kZS5Gb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFVTQUdFX0RFUFRIU1RFTkNJTCwgRDNEUlRZUEVf
VEVYVFVSRSwgRDNERk1UX0lOVFopKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VD
Q0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1
cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgRDNE
UlRZUEVfU1VSRkFDRSwgRDNERk1UX05VTEwpKTsKLQotICAgIC8vIENoZWNrIDMyIGJpdCBmbG9h
dGluZyBwb2ludCB0ZXh0dXJlIHN1cHBvcnQKLSAgICBtRmxvYXQzMkZpbHRlclN1cHBvcnQgPSBT
VUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwg
Y3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUVVFUllfRklMVEVSLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0EzMkIzMkczMlIzMkYpKSAmJgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0
ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9RVUVS
WV9GSUxURVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBEM0RSVFlQRV9DVUJFVEVYVFVSRSwgRDNERk1UX0EzMkIzMkczMlIz
MkYpKTsKLQotICAgIG1GbG9hdDMyUmVuZGVyU3VwcG9ydCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hl
Y2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUu
Rm9ybWF0LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9URVhUVVJFLCBE
M0RGTVRfQTMyQjMyRzMyUjMyRikpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VD
Q0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1
cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQz
RFJUWVBFX0NVQkVURVhUVVJFLCBEM0RGTVRfQTMyQjMyRzMyUjMyRikpOwotCi0gICAgaWYgKCFt
RmxvYXQzMkZpbHRlclN1cHBvcnQgJiYgIW1GbG9hdDMyUmVuZGVyU3VwcG9ydCkKLSAgICB7Ci0g
ICAgICAgIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2
aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1h
dCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0EzMkIzMkczMlIzMkYp
KSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5D
aGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9k
ZS5Gb3JtYXQsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX0NVQkVURVhUVVJFLCBEM0RGTVRfQTMy
QjMyRzMyUjMyRikpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBtRmxvYXQzMlRl
eHR1cmVTdXBwb3J0ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayAxNiBiaXQgZmxvYXRp
bmcgcG9pbnQgdGV4dHVyZSBzdXBwb3J0Ci0gICAgbUZsb2F0MTZGaWx0ZXJTdXBwb3J0ID0gU1VD
Q0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1
cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1FVRVJZX0ZJTFRFUiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQz
RFJUWVBFX1RFWFRVUkUsIEQzREZNVF9BMTZCMTZHMTZSMTZGKSkgJiYKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVy
LCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUVVFUllf
RklMVEVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRDNEUlRZUEVfQ1VCRVRFWFRVUkUsIEQzREZNVF9BMTZCMTZHMTZSMTZG
KSk7Ci0KLSAgICBtRmxvYXQxNlJlbmRlclN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNr
RGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZv
cm1hdCwgRDNEVVNBR0VfUkVOREVSVEFSR0VULAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfVEVYVFVSRSwgRDNE
Rk1UX0ExNkIxNkcxNlIxNkYpKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVQ0NF
RURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJy
ZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RS
VFlQRV9DVUJFVEVYVFVSRSwgRDNERk1UX0ExNkIxNkcxNlIxNkYpKTsKLQotICAgIGlmICghbUZs
b2F0MTZGaWx0ZXJTdXBwb3J0ICYmICFtRmxvYXQxNlJlbmRlclN1cHBvcnQpCi0gICAgewotICAg
ICAgICBtRmxvYXQxNlRleHR1cmVTdXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0Rldmlj
ZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQs
IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9BMTZCMTZHMTZSMTZGKSkg
JiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hl
Y2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUu
Rm9ybWF0LCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9DVUJFVEVYVFVSRSwgRDNERk1UX0ExNkIx
NkcxNlIxNkYpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgbUZsb2F0MTZUZXh0
dXJlU3VwcG9ydCA9IHRydWU7Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgRFhUIHRleHR1cmUgc3Vw
cG9ydAotICAgIG1EWFQxVGV4dHVyZVN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2
aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1h
dCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0RYVDEpKTsKLSAgICBtRFhUM1RleHR1cmVT
dXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURl
dmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsIEQzRFJUWVBFX1RFWFRVUkUs
IEQzREZNVF9EWFQzKSk7Ci0gICAgbURYVDVUZXh0dXJlU3VwcG9ydCA9IFNVQ0NFRURFRChtRDNk
OS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxh
eU1vZGUuRm9ybWF0LCAwLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfRFhUNSkpOwotCi0gICAg
Ly8gQ2hlY2sgbHVtaW5hbmNlW2FscGhhXSB0ZXh0dXJlIHN1cHBvcnQKLSAgICBtTHVtaW5hbmNl
VGV4dHVyZVN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFw
dGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVf
VEVYVFVSRSwgRDNERk1UX0w4KSk7Ci0gICAgbUx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQg
PSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlw
ZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1U
X0E4TDgpKTsKLQotICAgIGluaXRpYWxpemVEZXZpY2UoKTsKLQotICAgIHJldHVybiBFR0xfU1VD
Q0VTUzsKLX0KLQotLy8gZG8gYW55IG9uZS10aW1lIGRldmljZSBpbml0aWFsaXphdGlvbgotLy8g
Tk9URTogdGhpcyBpcyBhbHNvIG5lZWRlZCBhZnRlciBhIGRldmljZSBsb3N0L3Jlc2V0Ci0vLyB0
byByZXNldCB0aGUgc2NlbmUgc3RhdHVzIGFuZCBlbnN1cmUgdGhlIGRlZmF1bHQgc3RhdGVzIGFy
ZSByZXNldC4KLXZvaWQgUmVuZGVyZXI5Ojppbml0aWFsaXplRGV2aWNlKCkKLXsKLSAgICAvLyBQ
ZXJtYW5lbnQgbm9uLWRlZmF1bHQgc3RhdGVzCi0gICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfUE9JTlRTUFJJVEVFTkFCTEUsIFRSVUUpOwotICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX0xBU1RQSVhFTCwgRkFMU0UpOwotCi0gICAgaWYgKG1EZXZpY2VDYXBzLlBpeGVs
U2hhZGVyVmVyc2lvbiA+PSBEM0RQU19WRVJTSU9OKDMsIDApKQotICAgIHsKLSAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfUE9JTlRTSVpFX01BWCwgKERXT1JEJiltRGV2aWNl
Q2Fwcy5NYXhQb2ludFNpemUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19QT0lOVFNJWkVfTUFYLCAweDNGODAwMDAwKTsgICAv
LyAxLjBmCi0gICAgfQotCi0gICAgbWFya0FsbFN0YXRlRGlydHkoKTsKLQotICAgIG1TY2VuZVN0
YXJ0ZWQgPSBmYWxzZTsKLQotICAgIEFTU0VSVCghbUJsaXQgJiYgIW1WZXJ0ZXhEYXRhTWFuYWdl
ciAmJiAhbUluZGV4RGF0YU1hbmFnZXIpOwotICAgIG1CbGl0ID0gbmV3IEJsaXQodGhpcyk7Ci0g
ICAgbVZlcnRleERhdGFNYW5hZ2VyID0gbmV3IHJ4OjpWZXJ0ZXhEYXRhTWFuYWdlcih0aGlzKTsK
LSAgICBtSW5kZXhEYXRhTWFuYWdlciA9IG5ldyByeDo6SW5kZXhEYXRhTWFuYWdlcih0aGlzKTsK
LX0KLQotRDNEUFJFU0VOVF9QQVJBTUVURVJTIFJlbmRlcmVyOTo6Z2V0RGVmYXVsdFByZXNlbnRQ
YXJhbWV0ZXJzKCkKLXsKLSAgICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRl
cnMgPSB7MH07Ci0KLSAgICAvLyBUaGUgZGVmYXVsdCBzd2FwIGNoYWluIGlzIG5ldmVyIGFjdHVh
bGx5IHVzZWQuIFN1cmZhY2Ugd2lsbCBjcmVhdGUgYSBuZXcgc3dhcCBjaGFpbiB3aXRoIHRoZSBw
cm9wZXIgcGFyYW1ldGVycy4KLSAgICBwcmVzZW50UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVuY2ls
Rm9ybWF0ID0gRDNERk1UX1VOS05PV047Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZl
ckNvdW50ID0gMTsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyRm9ybWF0ID0gRDNE
Rk1UX1VOS05PV047Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoID0gMTsK
LSAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0ID0gMTsKLSAgICBwcmVzZW50
UGFyYW1ldGVycy5FbmFibGVBdXRvRGVwdGhTdGVuY2lsID0gRkFMU0U7Ci0gICAgcHJlc2VudFBh
cmFtZXRlcnMuRmxhZ3MgPSAwOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLmhEZXZpY2VXaW5kb3cg
PSBtRGV2aWNlV2luZG93OwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVhbGl0
eSA9IDA7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVUeXBlID0gRDNETVVMVElT
QU1QTEVfTk9ORTsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5QcmVzZW50YXRpb25JbnRlcnZhbCA9
IEQzRFBSRVNFTlRfSU5URVJWQUxfREVGQVVMVDsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5Td2Fw
RWZmZWN0ID0gRDNEU1dBUEVGRkVDVF9ESVNDQVJEOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLldp
bmRvd2VkID0gVFJVRTsKLQotICAgIHJldHVybiBwcmVzZW50UGFyYW1ldGVyczsKLX0KLQotaW50
IFJlbmRlcmVyOTo6Z2VuZXJhdGVDb25maWdzKENvbmZpZ0Rlc2MgKipjb25maWdEZXNjTGlzdCkK
LXsKLSAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7Ci0gICAgbUQzZDktPkdl
dEFkYXB0ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnREaXNwbGF5TW9kZSk7Ci0KLSAg
ICB1bnNpZ25lZCBpbnQgbnVtUmVuZGVyRm9ybWF0cyA9IEFycmF5U2l6ZShSZW5kZXJUYXJnZXRG
b3JtYXRzKTsKLSAgICB1bnNpZ25lZCBpbnQgbnVtRGVwdGhGb3JtYXRzID0gQXJyYXlTaXplKERl
cHRoU3RlbmNpbEZvcm1hdHMpOwotICAgICgqY29uZmlnRGVzY0xpc3QpID0gbmV3IENvbmZpZ0Rl
c2NbbnVtUmVuZGVyRm9ybWF0cyAqIG51bURlcHRoRm9ybWF0c107Ci0gICAgaW50IG51bUNvbmZp
Z3MgPSAwOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgZm9ybWF0SW5kZXggPSAwOyBmb3JtYXRJ
bmRleCA8IG51bVJlbmRlckZvcm1hdHM7IGZvcm1hdEluZGV4KyspCi0gICAgewotICAgICAgICBE
M0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0ID0gUmVuZGVyVGFyZ2V0Rm9ybWF0c1tmb3JtYXRJ
bmRleF07Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXZpY2VGb3Jt
YXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RV
U0FHRV9SRU5ERVJUQVJHRVQsIEQzRFJUWVBFX1NVUkZBQ0UsIHJlbmRlclRhcmdldEZvcm1hdCk7
Ci0KLSAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBkZXB0aFN0ZW5jaWxJbmRleCA9IDA7IGRlcHRoU3RlbmNpbElu
ZGV4IDwgbnVtRGVwdGhGb3JtYXRzOyBkZXB0aFN0ZW5jaWxJbmRleCsrKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIEQzREZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXQgPSBEZXB0aFN0
ZW5jaWxGb3JtYXRzW2RlcHRoU3RlbmNpbEluZGV4XTsKLSAgICAgICAgICAgICAgICBIUkVTVUxU
IHJlc3VsdCA9IEQzRF9PSzsKLQotICAgICAgICAgICAgICAgIGlmKGRlcHRoU3RlbmNpbEZvcm1h
dCAhPSBEM0RGTVRfVU5LTk9XTikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5
cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX0RFUFRIU1RFTkNJTCwgRDNE
UlRZUEVfU1VSRkFDRSwgZGVwdGhTdGVuY2lsRm9ybWF0KTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBpZihkZXB0aFN0ZW5jaWxGb3JtYXQgIT0gRDNERk1UX1VO
S05PV04pCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdCA9IG1EM2Q5LT5DaGVja0RlcHRoU3RlbmNpbE1hdGNoKG1BZGFwdGVyLCBtRGV2aWNlVHlw
ZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBkZXB0aFN0
ZW5jaWxGb3JtYXQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBDb25maWdEZXNjIG5ld0NvbmZpZzsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG5ld0NvbmZpZy5yZW5kZXJUYXJnZXRGb3JtYXQgPSBkM2Q5X2dsOjpDb252ZXJ0QmFj
a0J1ZmZlckZvcm1hdChyZW5kZXJUYXJnZXRGb3JtYXQpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgbmV3Q29uZmlnLmRlcHRoU3RlbmNpbEZvcm1hdCA9IGQzZDlfZ2w6OkNvbnZlcnREZXB0aFN0
ZW5jaWxGb3JtYXQoZGVwdGhTdGVuY2lsRm9ybWF0KTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IG5ld0NvbmZpZy5tdWx0aVNhbXBsZSA9IDA7IC8vIEZJWE1FOiBlbnVtZXJhdGUgbXVsdGktc2Ft
cGxpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5mYXN0Q29uZmlnID0gKGN1
cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQgPT0gcmVuZGVyVGFyZ2V0Rm9ybWF0KTsKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgKCpjb25maWdEZXNjTGlzdClbbnVtQ29uZmlncysrXSA9IG5ld0Nv
bmZpZzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBudW1Db25maWdzOwotfQotCi12
b2lkIFJlbmRlcmVyOTo6ZGVsZXRlQ29uZmlncyhDb25maWdEZXNjICpjb25maWdEZXNjTGlzdCkK
LXsKLSAgICBkZWxldGUgW10gKGNvbmZpZ0Rlc2NMaXN0KTsKLX0KLQotdm9pZCBSZW5kZXJlcjk6
OnN0YXJ0U2NlbmUoKQotewotICAgIGlmICghbVNjZW5lU3RhcnRlZCkKLSAgICB7Ci0gICAgICAg
IGxvbmcgcmVzdWx0ID0gbURldmljZS0+QmVnaW5TY2VuZSgpOwotICAgICAgICBpZiAoU1VDQ0VF
REVEKHJlc3VsdCkpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgZGVmZW5zaXZlIGNoZWNraW5n
IGFnYWluc3QgdGhlIGRldmljZSBiZWluZwotICAgICAgICAgICAgLy8gbG9zdCBhdCB1bmV4cGVj
dGVkIHRpbWVzLgotICAgICAgICAgICAgbVNjZW5lU3RhcnRlZCA9IHRydWU7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyZXI5OjplbmRTY2VuZSgpCi17Ci0gICAgaWYgKG1TY2Vu
ZVN0YXJ0ZWQpCi0gICAgewotICAgICAgICAvLyBFbmRTY2VuZSBjYW4gZmFpbCBpZiB0aGUgZGV2
aWNlIHdhcyBsb3N0LCBmb3IgZXhhbXBsZSBkdWUKLSAgICAgICAgLy8gdG8gYSBURFIgZHVyaW5n
IGEgZHJhdyBjYWxsLgotICAgICAgICBtRGV2aWNlLT5FbmRTY2VuZSgpOwotICAgICAgICBtU2Nl
bmVTdGFydGVkID0gZmFsc2U7Ci0gICAgfQotfQotCi12b2lkIFJlbmRlcmVyOTo6c3luYyhib29s
IGJsb2NrKQotewotICAgIEhSRVNVTFQgcmVzdWx0OwotCi0gICAgSURpcmVjdDNEUXVlcnk5KiBx
dWVyeSA9IGFsbG9jYXRlRXZlbnRRdWVyeSgpOwotICAgIGlmICghcXVlcnkpCi0gICAgewotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gcXVlcnktPklzc3VlKEQzRElTU1VF
X0VORCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgIGRvCi0gICAgewot
ICAgICAgICByZXN1bHQgPSBxdWVyeS0+R2V0RGF0YShOVUxMLCAwLCBEM0RHRVREQVRBX0ZMVVNI
KTsKLQotICAgICAgICBpZihibG9jayAmJiByZXN1bHQgPT0gU19GQUxTRSkKLSAgICAgICAgewot
ICAgICAgICAgICAgLy8gS2VlcCBwb2xsaW5nLCBidXQgYWxsb3cgb3RoZXIgdGhyZWFkcyB0byBk
byBzb21ldGhpbmcgdXNlZnVsIGZpcnN0Ci0gICAgICAgICAgICBTbGVlcCgwKTsKLSAgICAgICAg
ICAgIC8vIGV4cGxpY2l0bHkgY2hlY2sgZm9yIGRldmljZSBsb3NzCi0gICAgICAgICAgICAvLyBz
b21lIGRyaXZlcnMgc2VlbSB0byByZXR1cm4gU19GQUxTRSBldmVuIGlmIHRoZSBkZXZpY2UgaXMg
bG9zdAotICAgICAgICAgICAgLy8gaW5zdGVhZCBvZiBEM0RFUlJfREVWSUNFTE9TVCBsaWtlIHRo
ZXkgc2hvdWxkCi0gICAgICAgICAgICBpZiAodGVzdERldmljZUxvc3QoZmFsc2UpKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IEQzREVSUl9ERVZJQ0VMT1NUOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHdoaWxlKGJsb2NrICYmIHJlc3VsdCA9
PSBTX0ZBTFNFKTsKLQotICAgIGZyZWVFdmVudFF1ZXJ5KHF1ZXJ5KTsKLQotICAgIGlmIChkM2Q5
Ojppc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQotICAgIHsKLSAgICAgICAgbm90aWZ5RGV2aWNl
TG9zdCgpOwotICAgIH0KLX0KLQotU3dhcENoYWluICpSZW5kZXJlcjk6OmNyZWF0ZVN3YXBDaGFp
bihIV05EIHdpbmRvdywgSEFORExFIHNoYXJlSGFuZGxlLCBHTGVudW0gYmFja0J1ZmZlckZvcm1h
dCwgR0xlbnVtIGRlcHRoQnVmZmVyRm9ybWF0KQotewotICAgIHJldHVybiBuZXcgcng6OlN3YXBD
aGFpbjkodGhpcywgd2luZG93LCBzaGFyZUhhbmRsZSwgYmFja0J1ZmZlckZvcm1hdCwgZGVwdGhC
dWZmZXJGb3JtYXQpOwotfQotCi1JRGlyZWN0M0RRdWVyeTkqIFJlbmRlcmVyOTo6YWxsb2NhdGVF
dmVudFF1ZXJ5KCkKLXsKLSAgICBJRGlyZWN0M0RRdWVyeTkgKnF1ZXJ5ID0gTlVMTDsKLQotICAg
IGlmIChtRXZlbnRRdWVyeVBvb2wuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gbURldmljZS0+Q3JlYXRlUXVlcnkoRDNEUVVFUllUWVBFX0VWRU5ULCAmcXVlcnkpOwot
ICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAg
ewotICAgICAgICBxdWVyeSA9IG1FdmVudFF1ZXJ5UG9vbC5iYWNrKCk7Ci0gICAgICAgIG1FdmVu
dFF1ZXJ5UG9vbC5wb3BfYmFjaygpOwotICAgIH0KLQotICAgIHJldHVybiBxdWVyeTsKLX0KLQot
dm9pZCBSZW5kZXJlcjk6OmZyZWVFdmVudFF1ZXJ5KElEaXJlY3QzRFF1ZXJ5OSogcXVlcnkpCi17
Ci0gICAgaWYgKG1FdmVudFF1ZXJ5UG9vbC5zaXplKCkgPiAxMDAwKQotICAgIHsKLSAgICAgICAg
cXVlcnktPlJlbGVhc2UoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgbUV2ZW50
UXVlcnlQb29sLnB1c2hfYmFjayhxdWVyeSk7Ci0gICAgfQotfQotCi1JRGlyZWN0M0RWZXJ0ZXhT
aGFkZXI5ICpSZW5kZXJlcjk6OmNyZWF0ZVZlcnRleFNoYWRlcihjb25zdCBEV09SRCAqZnVuY3Rp
b24sIHNpemVfdCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIG1WZXJ0ZXhTaGFkZXJDYWNoZS5jcmVh
dGUoZnVuY3Rpb24sIGxlbmd0aCk7Ci19Ci0KLUlEaXJlY3QzRFBpeGVsU2hhZGVyOSAqUmVuZGVy
ZXI5OjpjcmVhdGVQaXhlbFNoYWRlcihjb25zdCBEV09SRCAqZnVuY3Rpb24sIHNpemVfdCBsZW5n
dGgpCi17Ci0gICAgcmV0dXJuIG1QaXhlbFNoYWRlckNhY2hlLmNyZWF0ZShmdW5jdGlvbiwgbGVu
Z3RoKTsKLX0KLQotSFJFU1VMVCBSZW5kZXJlcjk6OmNyZWF0ZVZlcnRleEJ1ZmZlcihVSU5UIExl
bmd0aCwgRFdPUkQgVXNhZ2UsIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKipwcFZlcnRleEJ1ZmZl
cikKLXsKLSAgICBEM0RQT09MIFBvb2wgPSBnZXRCdWZmZXJQb29sKFVzYWdlKTsKLSAgICByZXR1
cm4gbURldmljZS0+Q3JlYXRlVmVydGV4QnVmZmVyKExlbmd0aCwgVXNhZ2UsIDAsIFBvb2wsIHBw
VmVydGV4QnVmZmVyLCBOVUxMKTsKLX0KLQotVmVydGV4QnVmZmVyICpSZW5kZXJlcjk6OmNyZWF0
ZVZlcnRleEJ1ZmZlcigpCi17Ci0gICAgcmV0dXJuIG5ldyBWZXJ0ZXhCdWZmZXI5KHRoaXMpOwot
fQotCi1IUkVTVUxUIFJlbmRlcmVyOTo6Y3JlYXRlSW5kZXhCdWZmZXIoVUlOVCBMZW5ndGgsIERX
T1JEIFVzYWdlLCBEM0RGT1JNQVQgRm9ybWF0LCBJRGlyZWN0M0RJbmRleEJ1ZmZlcjkgKipwcElu
ZGV4QnVmZmVyKQotewotICAgIEQzRFBPT0wgUG9vbCA9IGdldEJ1ZmZlclBvb2woVXNhZ2UpOwot
ICAgIHJldHVybiBtRGV2aWNlLT5DcmVhdGVJbmRleEJ1ZmZlcihMZW5ndGgsIFVzYWdlLCBGb3Jt
YXQsIFBvb2wsIHBwSW5kZXhCdWZmZXIsIE5VTEwpOwotfQotCi1JbmRleEJ1ZmZlciAqUmVuZGVy
ZXI5OjpjcmVhdGVJbmRleEJ1ZmZlcigpCi17Ci0gICAgcmV0dXJuIG5ldyBJbmRleEJ1ZmZlcjko
dGhpcyk7Ci19Ci0KLUJ1ZmZlclN0b3JhZ2UgKlJlbmRlcmVyOTo6Y3JlYXRlQnVmZmVyU3RvcmFn
ZSgpCi17Ci0gICAgcmV0dXJuIG5ldyBCdWZmZXJTdG9yYWdlOSgpOwotfQotCi1RdWVyeUltcGwg
KlJlbmRlcmVyOTo6Y3JlYXRlUXVlcnkoR0xlbnVtIHR5cGUpCi17Ci0gICAgcmV0dXJuIG5ldyBR
dWVyeTkodGhpcywgdHlwZSk7Ci19Ci0KLUZlbmNlSW1wbCAqUmVuZGVyZXI5OjpjcmVhdGVGZW5j
ZSgpCi17Ci0gICAgcmV0dXJuIG5ldyBGZW5jZTkodGhpcyk7Ci19Ci0KLXZvaWQgUmVuZGVyZXI5
OjpzZXRTYW1wbGVyU3RhdGUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRleCwgY29uc3Qg
Z2w6OlNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKQotewotICAgIGJvb2wgKmZvcmNlU2V0U2Ft
cGxlcnMgPSAodHlwZSA9PSBnbDo6U0FNUExFUl9QSVhFTCkgPyBtRm9yY2VTZXRQaXhlbFNhbXBs
ZXJTdGF0ZXMgOiBtRm9yY2VTZXRWZXJ0ZXhTYW1wbGVyU3RhdGVzOwotICAgIGdsOjpTYW1wbGVy
U3RhdGUgKmFwcGxpZWRTYW1wbGVycyA9ICh0eXBlID09IGdsOjpTQU1QTEVSX1BJWEVMKSA/IG1D
dXJQaXhlbFNhbXBsZXJTdGF0ZXM6IG1DdXJWZXJ0ZXhTYW1wbGVyU3RhdGVzOwotCi0gICAgaWYg
KGZvcmNlU2V0U2FtcGxlcnNbaW5kZXhdIHx8IG1lbWNtcCgmc2FtcGxlclN0YXRlLCAmYXBwbGll
ZFNhbXBsZXJzW2luZGV4XSwgc2l6ZW9mKGdsOjpTYW1wbGVyU3RhdGUpKSAhPSAwKQotICAgIHsK
LSAgICAgICAgaW50IGQzZFNhbXBsZXJPZmZzZXQgPSAodHlwZSA9PSBnbDo6U0FNUExFUl9QSVhF
TCkgPyAwIDogRDNEVkVSVEVYVEVYVFVSRVNBTVBMRVIwOwotICAgICAgICBpbnQgZDNkU2FtcGxl
ciA9IGluZGV4ICsgZDNkU2FtcGxlck9mZnNldDsKLQotICAgICAgICBtRGV2aWNlLT5TZXRTYW1w
bGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9BRERSRVNTVSwgZ2xfZDNkOTo6Q29udmVydFRl
eHR1cmVXcmFwKHNhbXBsZXJTdGF0ZS53cmFwUykpOwotICAgICAgICBtRGV2aWNlLT5TZXRTYW1w
bGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9BRERSRVNTViwgZ2xfZDNkOTo6Q29udmVydFRl
eHR1cmVXcmFwKHNhbXBsZXJTdGF0ZS53cmFwVCkpOwotCi0gICAgICAgIG1EZXZpY2UtPlNldFNh
bXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01BR0ZJTFRFUiwgZ2xfZDNkOTo6Q29udmVy
dE1hZ0ZpbHRlcihzYW1wbGVyU3RhdGUubWFnRmlsdGVyLCBzYW1wbGVyU3RhdGUubWF4QW5pc290
cm9weSkpOwotICAgICAgICBEM0RURVhUVVJFRklMVEVSVFlQRSBkM2RNaW5GaWx0ZXIsIGQzZE1p
cEZpbHRlcjsKLSAgICAgICAgZ2xfZDNkOTo6Q29udmVydE1pbkZpbHRlcihzYW1wbGVyU3RhdGUu
bWluRmlsdGVyLCAmZDNkTWluRmlsdGVyLCAmZDNkTWlwRmlsdGVyLCBzYW1wbGVyU3RhdGUubWF4
QW5pc290cm9weSk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVy
LCBEM0RTQU1QX01JTkZJTFRFUiwgZDNkTWluRmlsdGVyKTsKLSAgICAgICAgbURldmljZS0+U2V0
U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUlQRklMVEVSLCBkM2RNaXBGaWx0ZXIp
OwotICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9N
QVhNSVBMRVZFTCwgc2FtcGxlclN0YXRlLmxvZE9mZnNldCk7Ci0gICAgICAgIGlmIChtU3VwcG9y
dHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmlj
ZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUFYQU5JU09UUk9QWSwgKERX
T1JEKXNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5KTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGZvcmNlU2V0U2FtcGxlcnNbaW5kZXhdID0gZmFsc2U7Ci0gICAgYXBwbGllZFNhbXBsZXJzW2lu
ZGV4XSA9IHNhbXBsZXJTdGF0ZTsKLX0KLQotdm9pZCBSZW5kZXJlcjk6OnNldFRleHR1cmUoZ2w6
OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRleCwgZ2w6OlRleHR1cmUgKnRleHR1cmUpCi17Ci0g
ICAgaW50IGQzZFNhbXBsZXJPZmZzZXQgPSAodHlwZSA9PSBnbDo6U0FNUExFUl9QSVhFTCkgPyAw
IDogRDNEVkVSVEVYVEVYVFVSRVNBTVBMRVIwOwotICAgIGludCBkM2RTYW1wbGVyID0gaW5kZXgg
KyBkM2RTYW1wbGVyT2Zmc2V0OwotICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZDNkVGV4dHVy
ZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgaW50IHNlcmlhbCA9IDA7Ci0gICAgYm9vbCBmb3JjZVNl
dFRleHR1cmUgPSBmYWxzZTsKLQotICAgIHVuc2lnbmVkIGludCAqYXBwbGllZFNlcmlhbHMgPSAo
dHlwZSA9PSBnbDo6U0FNUExFUl9QSVhFTCkgPyBtQ3VyUGl4ZWxUZXh0dXJlU2VyaWFscyA6IG1D
dXJWZXJ0ZXhUZXh0dXJlU2VyaWFsczsKLQotICAgIGlmICh0ZXh0dXJlKQotICAgIHsKLSAgICAg
ICAgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKnRleFN0b3JhZ2UgPSB0ZXh0dXJlLT5nZXROYXRp
dmVUZXh0dXJlKCk7Ci0gICAgICAgIGlmICh0ZXhTdG9yYWdlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBUZXh0dXJlU3RvcmFnZTkgKnN0b3JhZ2U5ID0gVGV4dHVyZVN0b3JhZ2U5OjptYWtlVGV4
dHVyZVN0b3JhZ2U5KHRleFN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKLSAgICAgICAg
ICAgIGQzZFRleHR1cmUgPSBzdG9yYWdlOS0+Z2V0QmFzZVRleHR1cmUoKTsKLSAgICAgICAgfQot
ICAgICAgICAvLyBJZiB3ZSBnZXQgTlVMTCBiYWNrIGZyb20gZ2V0QmFzZVRleHR1cmUgaGVyZSwg
c29tZXRoaW5nIHdlbnQgd3JvbmcKLSAgICAgICAgLy8gaW4gdGhlIHRleHR1cmUgY2xhc3MgYW5k
IHdlJ3JlIHVuZXhwZWN0ZWRseSBtaXNzaW5nIHRoZSBkM2QgdGV4dHVyZQotICAgICAgICBBU1NF
UlQoZDNkVGV4dHVyZSAhPSBOVUxMKTsKLQotICAgICAgICBzZXJpYWwgPSB0ZXh0dXJlLT5nZXRU
ZXh0dXJlU2VyaWFsKCk7Ci0gICAgICAgIGZvcmNlU2V0VGV4dHVyZSA9IHRleHR1cmUtPmhhc0Rp
cnR5SW1hZ2VzKCk7Ci0gICAgfQotCi0gICAgaWYgKGZvcmNlU2V0VGV4dHVyZSB8fCBhcHBsaWVk
U2VyaWFsc1tpbmRleF0gIT0gc2VyaWFsKQotICAgIHsKLSAgICAgICAgbURldmljZS0+U2V0VGV4
dHVyZShkM2RTYW1wbGVyLCBkM2RUZXh0dXJlKTsKLSAgICB9Ci0KLSAgICBhcHBsaWVkU2VyaWFs
c1tpbmRleF0gPSBzZXJpYWw7Ci19Ci0KLXZvaWQgUmVuZGVyZXI5OjpzZXRSYXN0ZXJpemVyU3Rh
dGUoY29uc3QgZ2w6OlJhc3Rlcml6ZXJTdGF0ZSAmcmFzdGVyU3RhdGUpCi17Ci0gICAgYm9vbCBy
YXN0ZXJTdGF0ZUNoYW5nZWQgPSBtRm9yY2VTZXRSYXN0ZXJTdGF0ZSB8fCBtZW1jbXAoJnJhc3Rl
clN0YXRlLCAmbUN1clJhc3RlclN0YXRlLCBzaXplb2YoZ2w6OlJhc3Rlcml6ZXJTdGF0ZSkpICE9
IDA7Ci0KLSAgICBpZiAocmFzdGVyU3RhdGVDaGFuZ2VkKQotICAgIHsKLSAgICAgICAgLy8gU2V0
IHRoZSBjdWxsIG1vZGUKLSAgICAgICAgaWYgKHJhc3RlclN0YXRlLmN1bGxGYWNlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwg
Z2xfZDNkOTo6Q29udmVydEN1bGxNb2RlKHJhc3RlclN0YXRlLmN1bGxNb2RlLCByYXN0ZXJTdGF0
ZS5mcm9udEZhY2UpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05P
TkUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJhc3RlclN0YXRlLnBvbHlnb25PZmZzZXRG
aWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobUN1ckRlcHRoU2l6ZSA+IDApCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
U0xPUEVTQ0FMRURFUFRIQklBUywgKihEV09SRCopJnJhc3RlclN0YXRlLnBvbHlnb25PZmZzZXRG
YWN0b3IpOwotCi0gICAgICAgICAgICAgICAgZmxvYXQgZGVwdGhCaWFzID0gbGRleHAocmFzdGVy
U3RhdGUucG9seWdvbk9mZnNldFVuaXRzLCAtc3RhdGljX2Nhc3Q8aW50PihtQ3VyRGVwdGhTaXpl
KSk7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVQVEhC
SUFTLCAqKERXT1JEKikmZGVwdGhCaWFzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX1NMT1BFU0NBTEVERVBUSEJJQVMsIDApOwotICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfREVQVEhCSUFTLCAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1D
dXJSYXN0ZXJTdGF0ZSA9IHJhc3RlclN0YXRlOwotICAgIH0KLQotICAgIG1Gb3JjZVNldFJhc3Rl
clN0YXRlID0gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyZXI5OjpzZXRCbGVuZFN0YXRlKGNvbnN0
IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRlLCBjb25zdCBnbDo6Q29sb3IgJmJsZW5kQ29sb3Is
IHVuc2lnbmVkIGludCBzYW1wbGVNYXNrKQotewotICAgIGJvb2wgYmxlbmRTdGF0ZUNoYW5nZWQg
PSBtRm9yY2VTZXRCbGVuZFN0YXRlIHx8IG1lbWNtcCgmYmxlbmRTdGF0ZSwgJm1DdXJCbGVuZFN0
YXRlLCBzaXplb2YoZ2w6OkJsZW5kU3RhdGUpKSAhPSAwOwotICAgIGJvb2wgYmxlbmRDb2xvckNo
YW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0YXRlIHx8IG1lbWNtcCgmYmxlbmRDb2xvciwgJm1DdXJC
bGVuZENvbG9yLCBzaXplb2YoZ2w6OkNvbG9yKSkgIT0gMDsKLSAgICBib29sIHNhbXBsZU1hc2tD
aGFuZ2VkID0gbUZvcmNlU2V0QmxlbmRTdGF0ZSB8fCBzYW1wbGVNYXNrICE9IG1DdXJTYW1wbGVN
YXNrOwotCi0gICAgaWYgKGJsZW5kU3RhdGVDaGFuZ2VkIHx8IGJsZW5kQ29sb3JDaGFuZ2VkKQot
ICAgIHsKLSAgICAgICAgaWYgKGJsZW5kU3RhdGUuYmxlbmQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIFRSVUUp
OwotCi0gICAgICAgICAgICBpZiAoYmxlbmRTdGF0ZS5zb3VyY2VCbGVuZFJHQiAhPSBHTF9DT05T
VEFOVF9BTFBIQSAmJiBibGVuZFN0YXRlLnNvdXJjZUJsZW5kUkdCICE9IEdMX09ORV9NSU5VU19D
T05TVEFOVF9BTFBIQSAmJgotICAgICAgICAgICAgICAgIGJsZW5kU3RhdGUuZGVzdEJsZW5kUkdC
ICE9IEdMX0NPTlNUQU5UX0FMUEhBICYmIGJsZW5kU3RhdGUuZGVzdEJsZW5kUkdCICE9IEdMX09O
RV9NSU5VU19DT05TVEFOVF9BTFBIQSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVOREZBQ1RPUiwgZ2xfZDNkOTo6Q29udmVy
dENvbG9yKGJsZW5kQ29sb3IpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19CTEVOREZBQ1RPUiwgRDNEQ09MT1JfUkdCQShnbDo6dW5vcm08OD4oYmxlbmRDb2xvci5hbHBo
YSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGJsZW5kQ29sb3IuYWxwaGEpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjp1bm9ybTw4PihibGVuZENvbG9yLmFscGhhKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6dW5vcm08OD4oYmxlbmRDb2xvci5hbHBoYSkpKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JDQkxFTkQsIGdsX2Qz
ZDk6OkNvbnZlcnRCbGVuZEZ1bmMoYmxlbmRTdGF0ZS5zb3VyY2VCbGVuZFJHQikpOwotICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVTVEJMRU5ELCBnbF9kM2Q5OjpD
b252ZXJ0QmxlbmRGdW5jKGJsZW5kU3RhdGUuZGVzdEJsZW5kUkdCKSk7Ci0gICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVORE9QLCBnbF9kM2Q5OjpDb252ZXJ0Qmxl
bmRPcChibGVuZFN0YXRlLmJsZW5kRXF1YXRpb25SR0IpKTsKLQotICAgICAgICAgICAgaWYgKGJs
ZW5kU3RhdGUuc291cmNlQmxlbmRSR0IgIT0gYmxlbmRTdGF0ZS5zb3VyY2VCbGVuZEFscGhhIHx8
Ci0gICAgICAgICAgICAgICAgYmxlbmRTdGF0ZS5kZXN0QmxlbmRSR0IgIT0gYmxlbmRTdGF0ZS5k
ZXN0QmxlbmRBbHBoYSB8fAotICAgICAgICAgICAgICAgIGJsZW5kU3RhdGUuYmxlbmRFcXVhdGlv
blJHQiAhPSBibGVuZFN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TRVBBUkFURUFMUEhB
QkxFTkRFTkFCTEUsIFRSVUUpOwotCi0gICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfU1JDQkxFTkRBTFBIQSwgZ2xfZDNkOTo6Q29udmVydEJsZW5kRnVuYyhibGVu
ZFN0YXRlLnNvdXJjZUJsZW5kQWxwaGEpKTsKLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19ERVNUQkxFTkRBTFBIQSwgZ2xfZDNkOTo6Q29udmVydEJsZW5kRnVu
YyhibGVuZFN0YXRlLmRlc3RCbGVuZEFscGhhKSk7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRPUEFMUEhBLCBnbF9kM2Q5OjpDb252ZXJ0QmxlbmRP
cChibGVuZFN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSkpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX1NFUEFSQVRFQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGJsZW5kU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBGSVhNRSgiU2FtcGxlIGFscGhhIHRvIGNvdmVyYWdl
IGlzIHVuaW1wbGVtZW50ZWQuIik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBTZXQgdGhlIGNv
bG9yIG1hc2sKLSAgICAgICAgYm9vbCB6ZXJvQ29sb3JNYXNrQWxsb3dlZCA9IGdldEFkYXB0ZXJW
ZW5kb3IoKSAhPSBWRU5ET1JfSURfQU1EOwotICAgICAgICAvLyBBcHBhcmVudGx5IHNvbWUgQVRJ
IGNhcmRzIGhhdmUgYSBidWcgd2hlcmUgYSBkcmF3IHdpdGggYSB6ZXJvIGNvbG9yCi0gICAgICAg
IC8vIHdyaXRlIG1hc2sgY2FuIGNhdXNlIGxhdGVyIGRyYXdzIHRvIGhhdmUgaW5jb3JyZWN0IHJl
c3VsdHMuIEluc3RlYWQsCi0gICAgICAgIC8vIHNldCBhIG5vbnplcm8gY29sb3Igd3JpdGUgbWFz
ayBidXQgbW9kaWZ5IHRoZSBibGVuZCBzdGF0ZSBzbyB0aGF0IG5vCi0gICAgICAgIC8vIGRyYXdp
bmcgaXMgZG9uZS4KLSAgICAgICAgLy8gaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZ2xlcHJv
amVjdC9pc3N1ZXMvZGV0YWlsP2lkPTE2OQotCi0gICAgICAgIERXT1JEIGNvbG9yTWFzayA9IGds
X2QzZDk6OkNvbnZlcnRDb2xvck1hc2soYmxlbmRTdGF0ZS5jb2xvck1hc2tSZWQsIGJsZW5kU3Rh
dGUuY29sb3JNYXNrR3JlZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYmxlbmRTdGF0ZS5jb2xvck1hc2tCbHVlLCBibGVuZFN0YXRlLmNvbG9y
TWFza0FscGhhKTsKLSAgICAgICAgaWYgKGNvbG9yTWFzayA9PSAwICYmICF6ZXJvQ29sb3JNYXNr
QWxsb3dlZCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gRW5hYmxlIGdyZWVuIGNoYW5uZWws
IGJ1dCBzZXQgYmxlbmRpbmcgc28gbm90aGluZyB3aWxsIGJlIGRyYXduLgotICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgRDNEQ09MT1JX
UklURUVOQUJMRV9HUkVFTik7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19BTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsKLQotICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfU1JDQkxFTkQsIEQzREJMRU5EX1pFUk8pOwotICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVTVEJMRU5ELCBEM0RCTEVORF9PTkUpOwot
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRPUCwgRDNEQkxF
TkRPUF9BREQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgY29sb3JN
YXNrKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X0RJVEhFUkVOQUJMRSwgYmxlbmRTdGF0ZS5kaXRoZXIgPyBUUlVFIDogRkFMU0UpOwotCi0gICAg
ICAgIG1DdXJCbGVuZFN0YXRlID0gYmxlbmRTdGF0ZTsKLSAgICAgICAgbUN1ckJsZW5kQ29sb3Ig
PSBibGVuZENvbG9yOwotICAgIH0KLQotICAgIGlmIChzYW1wbGVNYXNrQ2hhbmdlZCkKLSAgICB7
Ci0gICAgICAgIC8vIFNldCB0aGUgbXVsdGlzYW1wbGUgbWFzawotICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRUFOVElBTElBUywgVFJVRSk7Ci0gICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExFTUFTSywgc3RhdGljX2Nh
c3Q8RFdPUkQ+KHNhbXBsZU1hc2spKTsKLQotICAgICAgICBtQ3VyU2FtcGxlTWFzayA9IHNhbXBs
ZU1hc2s7Ci0gICAgfQotCi0gICAgbUZvcmNlU2V0QmxlbmRTdGF0ZSA9IGZhbHNlOwotfQotCi12
b2lkIFJlbmRlcmVyOTo6c2V0RGVwdGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6OkRlcHRoU3RlbmNp
bFN0YXRlICZkZXB0aFN0ZW5jaWxTdGF0ZSwgaW50IHN0ZW5jaWxSZWYsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0ZW5jaWxCYWNrUmVmLCBib29sIGZyb250RmFj
ZUNDVykKLXsKLSAgICBib29sIGRlcHRoU3RlbmNpbFN0YXRlQ2hhbmdlZCA9IG1Gb3JjZVNldERl
cHRoU3RlbmNpbFN0YXRlIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
ZW1jbXAoJmRlcHRoU3RlbmNpbFN0YXRlLCAmbUN1ckRlcHRoU3RlbmNpbFN0YXRlLCBzaXplb2Yo
Z2w6OkRlcHRoU3RlbmNpbFN0YXRlKSkgIT0gMDsKLSAgICBib29sIHN0ZW5jaWxSZWZDaGFuZ2Vk
ID0gbUZvcmNlU2V0RGVwdGhTdGVuY2lsU3RhdGUgfHwgc3RlbmNpbFJlZiAhPSBtQ3VyU3RlbmNp
bFJlZiB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVuY2lsQmFja1JlZiAhPSBt
Q3VyU3RlbmNpbEJhY2tSZWY7Ci0gICAgYm9vbCBmcm9udEZhY2VDQ1dDaGFuZ2VkID0gbUZvcmNl
U2V0RGVwdGhTdGVuY2lsU3RhdGUgfHwgZnJvbnRGYWNlQ0NXICE9IG1DdXJGcm9udEZhY2VDQ1c7
Ci0KLSAgICBpZiAoZGVwdGhTdGVuY2lsU3RhdGVDaGFuZ2VkKQotICAgIHsKLSAgICAgICAgaWYg
KGRlcHRoU3RlbmNpbFN0YXRlLmRlcHRoVGVzdCkKLSAgICAgICAgewotICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRDNEWkJfVFJVRSk7Ci0gICAgICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRlVOQywgZ2xfZDNkOTo6Q29udmVy
dENvbXBhcmlzb24oZGVwdGhTdGVuY2lsU3RhdGUuZGVwdGhGdW5jKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19aRU5BQkxFLCBEM0RaQl9GQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtQ3Vy
RGVwdGhTdGVuY2lsU3RhdGUgPSBkZXB0aFN0ZW5jaWxTdGF0ZTsKLSAgICB9Ci0KLSAgICBpZiAo
ZGVwdGhTdGVuY2lsU3RhdGVDaGFuZ2VkIHx8IHN0ZW5jaWxSZWZDaGFuZ2VkIHx8IGZyb250RmFj
ZUNDV0NoYW5nZWQpCi0gICAgewotICAgICAgICBpZiAoZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNp
bFRlc3QgJiYgbUN1clN0ZW5jaWxTaXplID4gMCkKLSAgICAgICAgewotICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgVFJVRSk7Ci0gICAgICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19UV09TSURFRFNURU5DSUxNT0RFLCBU
UlVFKTsKLQotICAgICAgICAgICAgLy8gRklYTUU6IFVuc3VwcG9ydGVkIGJ5IEQzRDkKLSAgICAg
ICAgICAgIGNvbnN0IEQzRFJFTkRFUlNUQVRFVFlQRSBEM0RSU19DQ1dfU1RFTkNJTFJFRiA9IEQz
RFJTX1NURU5DSUxSRUY7Ci0gICAgICAgICAgICBjb25zdCBEM0RSRU5ERVJTVEFURVRZUEUgRDNE
UlNfQ0NXX1NURU5DSUxNQVNLID0gRDNEUlNfU1RFTkNJTE1BU0s7Ci0gICAgICAgICAgICBjb25z
dCBEM0RSRU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxXUklURU1BU0sgPSBEM0RSU19T
VEVOQ0lMV1JJVEVNQVNLOwotICAgICAgICAgICAgaWYgKGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5j
aWxXcml0ZW1hc2sgIT0gZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgfHwK
LSAgICAgICAgICAgICAgICBzdGVuY2lsUmVmICE9IHN0ZW5jaWxCYWNrUmVmIHx8Ci0gICAgICAg
ICAgICAgICAgZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbE1hc2sgIT0gZGVwdGhTdGVuY2lsU3Rh
dGUuc3RlbmNpbEJhY2tNYXNrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigi
U2VwYXJhdGUgZnJvbnQvYmFjayBzdGVuY2lsIHdyaXRlbWFza3MsIHJlZmVyZW5jZSB2YWx1ZXMs
IG9yIHN0ZW5jaWwgbWFzayB2YWx1ZXMgYXJlIGludmFsaWQgdW5kZXIgV2ViR0wuIik7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGdldCB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBz
dGVuY2lsIHJlZgotICAgICAgICAgICAgdW5zaWduZWQgaW50IG1heFN0ZW5jaWwgPSAoMSA8PCBt
Q3VyU3RlbmNpbFNpemUpIC0gMTsKLQotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoZnJvbnRGYWNlQ0NXID8gRDNEUlNfU1RFTkNJTFdSSVRFTUFTSyA6IEQzRFJTX0NDV19TVEVO
Q0lMV1JJVEVNQVNLLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGhT
dGVuY2lsU3RhdGUuc3RlbmNpbFdyaXRlbWFzayk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShmcm9udEZhY2VDQ1cgPyBEM0RSU19TVEVOQ0lMRlVOQyA6IEQzRFJTX0NDV19T
VEVOQ0lMRlVOQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6
OkNvbnZlcnRDb21wYXJpc29uKGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxGdW5jKSk7Ci0KLSAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGZyb250RmFjZUNDVyA/IEQzRFJTX1NU
RU5DSUxSRUYgOiBEM0RSU19DQ1dfU1RFTkNJTFJFRiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChzdGVuY2lsUmVmIDwgKGludCltYXhTdGVuY2lsKSA/IHN0ZW5jaWxSZWYg
OiBtYXhTdGVuY2lsKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGZyb250
RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxNQVNLLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNp
bE1hc2spOwotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShmcm9udEZhY2VD
Q1cgPyBEM0RSU19TVEVOQ0lMRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMRkFJTCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRTdGVuY2lsT3AoZGVw
dGhTdGVuY2lsU3RhdGUuc3RlbmNpbEZhaWwpKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKGZyb250RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxaRkFJTCA6IEQzRFJTX0NDV19T
VEVOQ0lMWkZBSUwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9kM2Q5
OjpDb252ZXJ0U3RlbmNpbE9wKGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWls
KSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShmcm9udEZhY2VDQ1cgPyBE
M0RSU19TVEVOQ0lMUEFTUyA6IEQzRFJTX0NDV19TVEVOQ0lMUEFTUywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRTdGVuY2lsT3AoZGVwdGhTdGVu
Y2lsU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MpKTsKLQotICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoIWZyb250RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxXUklURU1BU0sgOiBE
M0RSU19DQ1dfU1RFTkNJTFdSSVRFTUFTSywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrKTsKLSAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKCFmcm9udEZhY2VDQ1cgPyBEM0RSU19TVEVOQ0lM
RlVOQyA6IEQzRFJTX0NDV19TVEVOQ0lMRlVOQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRDb21wYXJpc29uKGRlcHRoU3RlbmNpbFN0YXRlLnN0
ZW5jaWxCYWNrRnVuYykpOwotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZSgh
ZnJvbnRGYWNlQ0NXID8gRDNEUlNfU1RFTkNJTFJFRiA6IEQzRFJTX0NDV19TVEVOQ0lMUkVGLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0ZW5jaWxCYWNrUmVmIDwgKGlu
dCltYXhTdGVuY2lsKSA/IHN0ZW5jaWxCYWNrUmVmIDogbWF4U3RlbmNpbCk7Ci0gICAgICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZSghZnJvbnRGYWNlQ0NXID8gRDNEUlNfU1RFTkNJTE1B
U0sgOiBEM0RSU19DQ1dfU1RFTkNJTE1BU0ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsQmFja01hc2spOwotCi0gICAgICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZSghZnJvbnRGYWNlQ0NXID8gRDNEUlNfU1RFTkNJTEZB
SUwgOiBEM0RSU19DQ1dfU1RFTkNJTEZBSUwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbF9kM2Q5OjpDb252ZXJ0U3RlbmNpbE9wKGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5j
aWxCYWNrRmFpbCkpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoIWZyb250
RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxaRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMWkZBSUwsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9kM2Q5OjpDb252ZXJ0U3RlbmNp
bE9wKGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCkpOwotICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoIWZyb250RmFjZUNDVyA/IEQzRFJTX1NURU5D
SUxQQVNTIDogRDNEUlNfQ0NXX1NURU5DSUxQQVNTLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2xfZDNkOTo6Q29udmVydFN0ZW5jaWxPcChkZXB0aFN0ZW5jaWxTdGF0ZS5z
dGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxF
TkFCTEUsIEZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1pXUklURUVOQUJMRSwgZGVwdGhTdGVuY2lsU3RhdGUuZGVwdGhNYXNrID8gVFJV
RSA6IEZBTFNFKTsKLQotICAgICAgICBtQ3VyU3RlbmNpbFJlZiA9IHN0ZW5jaWxSZWY7Ci0gICAg
ICAgIG1DdXJTdGVuY2lsQmFja1JlZiA9IHN0ZW5jaWxCYWNrUmVmOwotICAgICAgICBtQ3VyRnJv
bnRGYWNlQ0NXID0gZnJvbnRGYWNlQ0NXOwotICAgIH0KLQotICAgIG1Gb3JjZVNldERlcHRoU3Rl
bmNpbFN0YXRlID0gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyZXI5OjpzZXRTY2lzc29yUmVjdGFu
Z2xlKGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNjaXNzb3IsIGJvb2wgZW5hYmxlZCkKLXsKLSAgICBi
b29sIHNjaXNzb3JDaGFuZ2VkID0gbUZvcmNlU2V0U2Npc3NvciB8fAotICAgICAgICAgICAgICAg
ICAgICAgICAgICBtZW1jbXAoJnNjaXNzb3IsICZtQ3VyU2Npc3Nvciwgc2l6ZW9mKGdsOjpSZWN0
YW5nbGUpKSAhPSAwIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQgIT0gbVNj
aXNzb3JFbmFibGVkOwotCi0gICAgaWYgKHNjaXNzb3JDaGFuZ2VkKQotICAgIHsKLSAgICAgICAg
aWYgKGVuYWJsZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJFQ1QgcmVjdDsKLSAgICAgICAg
ICAgIHJlY3QubGVmdCA9IGdsOjpjbGFtcChzY2lzc29yLngsIDAsIHN0YXRpY19jYXN0PGludD4o
bVJlbmRlclRhcmdldERlc2Mud2lkdGgpKTsKLSAgICAgICAgICAgIHJlY3QudG9wID0gZ2w6OmNs
YW1wKHNjaXNzb3IueSwgMCwgc3RhdGljX2Nhc3Q8aW50PihtUmVuZGVyVGFyZ2V0RGVzYy5oZWln
aHQpKTsKLSAgICAgICAgICAgIHJlY3QucmlnaHQgPSBnbDo6Y2xhbXAoc2Npc3Nvci54ICsgc2Np
c3Nvci53aWR0aCwgMCwgc3RhdGljX2Nhc3Q8aW50PihtUmVuZGVyVGFyZ2V0RGVzYy53aWR0aCkp
OwotICAgICAgICAgICAgcmVjdC5ib3R0b20gPSBnbDo6Y2xhbXAoc2Npc3Nvci55ICsgc2Npc3Nv
ci5oZWlnaHQsIDAsIHN0YXRpY19jYXN0PGludD4obVJlbmRlclRhcmdldERlc2MuaGVpZ2h0KSk7
Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRTY2lzc29yUmVjdCgmcmVjdCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJM
RSwgZW5hYmxlZCA/IFRSVUUgOiBGQUxTRSk7Ci0KLSAgICAgICAgbVNjaXNzb3JFbmFibGVkID0g
ZW5hYmxlZDsKLSAgICAgICAgbUN1clNjaXNzb3IgPSBzY2lzc29yOwotICAgIH0KLQotICAgIG1G
b3JjZVNldFNjaXNzb3IgPSBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJlcjk6OnNldFZpZXdwb3J0
KGNvbnN0IGdsOjpSZWN0YW5nbGUgJnZpZXdwb3J0LCBmbG9hdCB6TmVhciwgZmxvYXQgekZhciwg
R0xlbnVtIGRyYXdNb2RlLCBHTGVudW0gZnJvbnRGYWNlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgaWdub3JlVmlld3BvcnQpCi17Ci0gICAgZ2w6OlJlY3RhbmdsZSBhY3R1YWxW
aWV3cG9ydCA9IHZpZXdwb3J0OwotICAgIGZsb2F0IGFjdHVhbFpOZWFyID0gZ2w6OmNsYW1wMDEo
ek5lYXIpOwotICAgIGZsb2F0IGFjdHVhbFpGYXIgPSBnbDo6Y2xhbXAwMSh6RmFyKTsKLSAgICBp
ZiAoaWdub3JlVmlld3BvcnQpCi0gICAgewotICAgICAgICBhY3R1YWxWaWV3cG9ydC54ID0gMDsK
LSAgICAgICAgYWN0dWFsVmlld3BvcnQueSA9IDA7Ci0gICAgICAgIGFjdHVhbFZpZXdwb3J0Lndp
ZHRoID0gbVJlbmRlclRhcmdldERlc2Mud2lkdGg7Ci0gICAgICAgIGFjdHVhbFZpZXdwb3J0Lmhl
aWdodCA9IG1SZW5kZXJUYXJnZXREZXNjLmhlaWdodDsKLSAgICAgICAgYWN0dWFsWk5lYXIgPSAw
LjBmOwotICAgICAgICBhY3R1YWxaRmFyID0gMS4wZjsKLSAgICB9Ci0KLSAgICBEM0RWSUVXUE9S
VDkgZHhWaWV3cG9ydDsKLSAgICBkeFZpZXdwb3J0LlggPSBnbDo6Y2xhbXAoYWN0dWFsVmlld3Bv
cnQueCwgMCwgc3RhdGljX2Nhc3Q8aW50PihtUmVuZGVyVGFyZ2V0RGVzYy53aWR0aCkpOwotICAg
IGR4Vmlld3BvcnQuWSA9IGdsOjpjbGFtcChhY3R1YWxWaWV3cG9ydC55LCAwLCBzdGF0aWNfY2Fz
dDxpbnQ+KG1SZW5kZXJUYXJnZXREZXNjLmhlaWdodCkpOwotICAgIGR4Vmlld3BvcnQuV2lkdGgg
PSBnbDo6Y2xhbXAoYWN0dWFsVmlld3BvcnQud2lkdGgsIDAsIHN0YXRpY19jYXN0PGludD4obVJl
bmRlclRhcmdldERlc2Mud2lkdGgpIC0gc3RhdGljX2Nhc3Q8aW50PihkeFZpZXdwb3J0LlgpKTsK
LSAgICBkeFZpZXdwb3J0LkhlaWdodCA9IGdsOjpjbGFtcChhY3R1YWxWaWV3cG9ydC5oZWlnaHQs
IDAsIHN0YXRpY19jYXN0PGludD4obVJlbmRlclRhcmdldERlc2MuaGVpZ2h0KSAtIHN0YXRpY19j
YXN0PGludD4oZHhWaWV3cG9ydC5ZKSk7Ci0gICAgZHhWaWV3cG9ydC5NaW5aID0gYWN0dWFsWk5l
YXI7Ci0gICAgZHhWaWV3cG9ydC5NYXhaID0gYWN0dWFsWkZhcjsKLQotICAgIGlmIChkeFZpZXdw
b3J0LldpZHRoIDw9IDAgfHwgZHhWaWV3cG9ydC5IZWlnaHQgPD0gMCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsgICAvLyBOb3RoaW5nIHRvIHJlbmRlcgotICAgIH0KLQotICAgIGZsb2F0
IGRlcHRoRnJvbnQgPSAhZ2w6OklzVHJpYW5nbGVNb2RlKGRyYXdNb2RlKSA/IDAuMGYgOiAoZnJv
bnRGYWNlID09IEdMX0NDVyA/IDEuMGYgOiAtMS4wZik7Ci0KLSAgICBib29sIHZpZXdwb3J0Q2hh
bmdlZCA9IG1Gb3JjZVNldFZpZXdwb3J0IHx8IG1lbWNtcCgmYWN0dWFsVmlld3BvcnQsICZtQ3Vy
Vmlld3BvcnQsIHNpemVvZihnbDo6UmVjdGFuZ2xlKSkgIT0gMCB8fAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYWN0dWFsWk5lYXIgIT0gbUN1ck5lYXIgfHwgYWN0dWFsWkZhciAhPSBtQ3Vy
RmFyIHx8IG1DdXJEZXB0aEZyb250ICE9IGRlcHRoRnJvbnQ7Ci0gICAgaWYgKHZpZXdwb3J0Q2hh
bmdlZCkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2UtPlNldFZpZXdwb3J0KCZkeFZpZXdwb3J0KTsK
LQotICAgICAgICBtQ3VyVmlld3BvcnQgPSBhY3R1YWxWaWV3cG9ydDsKLSAgICAgICAgbUN1ck5l
YXIgPSBhY3R1YWxaTmVhcjsKLSAgICAgICAgbUN1ckZhciA9IGFjdHVhbFpGYXI7Ci0gICAgICAg
IG1DdXJEZXB0aEZyb250ID0gZGVwdGhGcm9udDsKLQotICAgICAgICBkeF9WZXJ0ZXhDb25zdGFu
dHMgdmMgPSB7MH07Ci0gICAgICAgIGR4X1BpeGVsQ29uc3RhbnRzIHBjID0gezB9OwotCi0gICAg
ICAgIHZjLnZpZXdBZGp1c3RbMF0gPSAoZmxvYXQpKChhY3R1YWxWaWV3cG9ydC53aWR0aCAtIChp
bnQpZHhWaWV3cG9ydC5XaWR0aCkgKyAyICogKGFjdHVhbFZpZXdwb3J0LnggLSAoaW50KWR4Vmll
d3BvcnQuWCkgLSAxKSAvIGR4Vmlld3BvcnQuV2lkdGg7Ci0gICAgICAgIHZjLnZpZXdBZGp1c3Rb
MV0gPSAoZmxvYXQpKChhY3R1YWxWaWV3cG9ydC5oZWlnaHQgLSAoaW50KWR4Vmlld3BvcnQuSGVp
Z2h0KSArIDIgKiAoYWN0dWFsVmlld3BvcnQueSAtIChpbnQpZHhWaWV3cG9ydC5ZKSAtIDEpIC8g
ZHhWaWV3cG9ydC5IZWlnaHQ7Ci0gICAgICAgIHZjLnZpZXdBZGp1c3RbMl0gPSAoZmxvYXQpYWN0
dWFsVmlld3BvcnQud2lkdGggLyBkeFZpZXdwb3J0LldpZHRoOwotICAgICAgICB2Yy52aWV3QWRq
dXN0WzNdID0gKGZsb2F0KWFjdHVhbFZpZXdwb3J0LmhlaWdodCAvIGR4Vmlld3BvcnQuSGVpZ2h0
OwotCi0gICAgICAgIHBjLnZpZXdDb29yZHNbMF0gPSBhY3R1YWxWaWV3cG9ydC53aWR0aCAgKiAw
LjVmOwotICAgICAgICBwYy52aWV3Q29vcmRzWzFdID0gYWN0dWFsVmlld3BvcnQuaGVpZ2h0ICog
MC41ZjsKLSAgICAgICAgcGMudmlld0Nvb3Jkc1syXSA9IGFjdHVhbFZpZXdwb3J0LnggKyAoYWN0
dWFsVmlld3BvcnQud2lkdGggICogMC41Zik7Ci0gICAgICAgIHBjLnZpZXdDb29yZHNbM10gPSBh
Y3R1YWxWaWV3cG9ydC55ICsgKGFjdHVhbFZpZXdwb3J0LmhlaWdodCAqIDAuNWYpOwotCi0gICAg
ICAgIHBjLmRlcHRoRnJvbnRbMF0gPSAoYWN0dWFsWkZhciAtIGFjdHVhbFpOZWFyKSAqIDAuNWY7
Ci0gICAgICAgIHBjLmRlcHRoRnJvbnRbMV0gPSAoYWN0dWFsWk5lYXIgKyBhY3R1YWxaRmFyKSAq
IDAuNWY7Ci0gICAgICAgIHBjLmRlcHRoRnJvbnRbMl0gPSBkZXB0aEZyb250OwotCi0gICAgICAg
IHZjLmRlcHRoUmFuZ2VbMF0gPSBhY3R1YWxaTmVhcjsKLSAgICAgICAgdmMuZGVwdGhSYW5nZVsx
XSA9IGFjdHVhbFpGYXI7Ci0gICAgICAgIHZjLmRlcHRoUmFuZ2VbMl0gPSBhY3R1YWxaRmFyIC0g
YWN0dWFsWk5lYXI7Ci0KLSAgICAgICAgcGMuZGVwdGhSYW5nZVswXSA9IGFjdHVhbFpOZWFyOwot
ICAgICAgICBwYy5kZXB0aFJhbmdlWzFdID0gYWN0dWFsWkZhcjsKLSAgICAgICAgcGMuZGVwdGhS
YW5nZVsyXSA9IGFjdHVhbFpGYXIgLSBhY3R1YWxaTmVhcjsKLQotICAgICAgICBpZiAobWVtY21w
KCZ2YywgJm1WZXJ0ZXhDb25zdGFudHMsIHNpemVvZihkeF9WZXJ0ZXhDb25zdGFudHMpKSAhPSAw
KQotICAgICAgICB7Ci0gICAgICAgICAgICBtVmVydGV4Q29uc3RhbnRzID0gdmM7Ci0gICAgICAg
ICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICht
ZW1jbXAoJnBjLCAmbVBpeGVsQ29uc3RhbnRzLCBzaXplb2YoZHhfUGl4ZWxDb25zdGFudHMpKSAh
PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBtUGl4ZWxDb25zdGFudHMgPSBwYzsKLSAgICAg
ICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
bUZvcmNlU2V0Vmlld3BvcnQgPSBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBS
ZW5kZXJlcjk6OmFwcGx5UHJpbWl0aXZlVHlwZShHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCkK
LXsKLSAgICBzd2l0Y2ggKG1vZGUpCi0gICAgewotICAgICAgY2FzZSBHTF9QT0lOVFM6Ci0gICAg
ICAgIG1QcmltaXRpdmVUeXBlID0gRDNEUFRfUE9JTlRMSVNUOwotICAgICAgICBtUHJpbWl0aXZl
Q291bnQgPSBjb3VudDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xJTkVTOgotICAg
ICAgICBtUHJpbWl0aXZlVHlwZSA9IEQzRFBUX0xJTkVMSVNUOwotICAgICAgICBtUHJpbWl0aXZl
Q291bnQgPSBjb3VudCAvIDI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MSU5FX0xP
T1A6Ci0gICAgICAgIG1QcmltaXRpdmVUeXBlID0gRDNEUFRfTElORVNUUklQOwotICAgICAgICBt
UHJpbWl0aXZlQ291bnQgPSBjb3VudCAtIDE7ICAgLy8gRDNEIGRvZXNuJ3Qgc3VwcG9ydCBsaW5l
IGxvb3BzLCBzbyB3ZSBkcmF3IHRoZSBsYXN0IGxpbmUgc2VwYXJhdGVseQotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfTElORV9TVFJJUDoKLSAgICAgICAgbVByaW1pdGl2ZVR5cGUgPSBE
M0RQVF9MSU5FU1RSSVA7Ci0gICAgICAgIG1QcmltaXRpdmVDb3VudCA9IGNvdW50IC0gMTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1RSSUFOR0xFUzoKLSAgICAgICAgbVByaW1pdGl2
ZVR5cGUgPSBEM0RQVF9UUklBTkdMRUxJU1Q7Ci0gICAgICAgIG1QcmltaXRpdmVDb3VudCA9IGNv
dW50IC8gMzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1RSSUFOR0xFX1NUUklQOgot
ICAgICAgICBtUHJpbWl0aXZlVHlwZSA9IEQzRFBUX1RSSUFOR0xFU1RSSVA7Ci0gICAgICAgIG1Q
cmltaXRpdmVDb3VudCA9IGNvdW50IC0gMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X1RSSUFOR0xFX0ZBTjoKLSAgICAgICAgbVByaW1pdGl2ZVR5cGUgPSBEM0RQVF9UUklBTkdMRUZB
TjsKLSAgICAgICAgbVByaW1pdGl2ZUNvdW50ID0gY291bnQgLSAyOwotICAgICAgICBicmVhazsK
LSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
LCBmYWxzZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1QcmltaXRpdmVDb3VudCA+IDA7Ci19Ci0K
LQotZ2w6OlJlbmRlcmJ1ZmZlciAqUmVuZGVyZXI5OjpnZXROdWxsQ29sb3JidWZmZXIoZ2w6OlJl
bmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIpCi17Ci0gICAgaWYgKCFkZXB0aGJ1ZmZlcikKLSAgICB7
Ci0gICAgICAgIEVSUigiVW5leHBlY3RlZCBudWxsIGRlcHRoYnVmZmVyIGZvciBkZXB0aC1vbmx5
IEZCTy4iKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgR0xzaXplaSB3aWR0
aCAgPSBkZXB0aGJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICBHTHNpemVpIGhlaWdodCA9IGRlcHRo
YnVmZmVyLT5nZXRIZWlnaHQoKTsKLQotICAgIC8vIHNlYXJjaCBjYWNoZWQgbnVsbGNvbG9yYnVm
ZmVycwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX05VTExfQ09MT1JCVUZGRVJfQ0FDSEVf
RU5UUklFUzsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKG1OdWxsQ29sb3JidWZmZXJDYWNoZVtp
XS5idWZmZXIgIT0gTlVMTCAmJgotICAgICAgICAgICAgbU51bGxDb2xvcmJ1ZmZlckNhY2hlW2ld
LndpZHRoID09IHdpZHRoICYmCi0gICAgICAgICAgICBtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0u
aGVpZ2h0ID09IGhlaWdodCkKLSAgICAgICAgewotICAgICAgICAgICAgbU51bGxDb2xvcmJ1ZmZl
ckNhY2hlW2ldLmxydUNvdW50ID0gKyttTWF4TnVsbENvbG9yYnVmZmVyTFJVOwotICAgICAgICAg
ICAgcmV0dXJuIG1OdWxsQ29sb3JidWZmZXJDYWNoZVtpXS5idWZmZXI7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBnbDo6UmVuZGVyYnVmZmVyICpudWxsYnVmZmVyID0gbmV3IGdsOjpSZW5kZXJi
dWZmZXIodGhpcywgMCwgbmV3IGdsOjpDb2xvcmJ1ZmZlcih0aGlzLCB3aWR0aCwgaGVpZ2h0LCBH
TF9OT05FLCAwKSk7Ci0KLSAgICAvLyBhZGQgbnVsbGJ1ZmZlciB0byB0aGUgY2FjaGUKLSAgICBO
dWxsQ29sb3JidWZmZXJDYWNoZUVudHJ5ICpvbGRlc3QgPSAmbU51bGxDb2xvcmJ1ZmZlckNhY2hl
WzBdOwotICAgIGZvciAoaW50IGkgPSAxOyBpIDwgTlVNX05VTExfQ09MT1JCVUZGRVJfQ0FDSEVf
RU5UUklFUzsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKG1OdWxsQ29sb3JidWZmZXJDYWNoZVtp
XS5scnVDb3VudCA8IG9sZGVzdC0+bHJ1Q291bnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG9s
ZGVzdCA9ICZtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBkZWxldGUgb2xkZXN0LT5idWZmZXI7Ci0gICAgb2xkZXN0LT5idWZmZXIgPSBudWxsYnVmZmVy
OwotICAgIG9sZGVzdC0+bHJ1Q291bnQgPSArK21NYXhOdWxsQ29sb3JidWZmZXJMUlU7Ci0gICAg
b2xkZXN0LT53aWR0aCA9IHdpZHRoOwotICAgIG9sZGVzdC0+aGVpZ2h0ID0gaGVpZ2h0OwotCi0g
ICAgcmV0dXJuIG51bGxidWZmZXI7Ci19Ci0KLWJvb2wgUmVuZGVyZXI5OjphcHBseVJlbmRlclRh
cmdldChnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyKQotewotICAgIC8vIGlmIHRoZXJlIGlz
IG5vIGNvbG9yIGF0dGFjaG1lbnQgd2UgbXVzdCBzeW50aGVzaXplIGEgTlVMTCBjb2xvcmF0dGFj
aG1lbnQKLSAgICAvLyB0byBrZWVwIHRoZSBEM0QgcnVudGltZSBoYXBweS4gIFRoaXMgc2hvdWxk
IG9ubHkgYmUgcG9zc2libGUgaWYgZGVwdGggdGV4dHVyaW5nLgotICAgIGdsOjpSZW5kZXJidWZm
ZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9IE5VTEw7Ci0gICAgaWYgKGZyYW1lYnVmZmVyLT5nZXRD
b2xvcmJ1ZmZlclR5cGUoMCkgIT0gR0xfTk9ORSkKLSAgICB7Ci0gICAgICAgIHJlbmRlcmJ1ZmZl
ck9iamVjdCA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigwKTsKLSAgICB9Ci0gICAgZWxz
ZQotICAgIHsKLSAgICAgICAgcmVuZGVyYnVmZmVyT2JqZWN0ID0gZ2V0TnVsbENvbG9yYnVmZmVy
KGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpKTsKLSAgICB9Ci0gICAgaWYgKCFyZW5kZXJi
dWZmZXJPYmplY3QpCi0gICAgewotICAgICAgICBFUlIoInVuYWJsZSB0byBsb2NhdGUgcmVuZGVy
YnVmZmVyIGZvciBGQk8uIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBi
b29sIHJlbmRlclRhcmdldENoYW5nZWQgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBpbnQgcmVuZGVy
VGFyZ2V0U2VyaWFsID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRTZXJpYWwoKTsKLSAgICBpZiAo
cmVuZGVyVGFyZ2V0U2VyaWFsICE9IG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsKQotICAgIHsK
LSAgICAgICAgLy8gQXBwbHkgdGhlIHJlbmRlciB0YXJnZXQgb24gdGhlIGRldmljZQotICAgICAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0U3VyZmFjZSA9IE5VTEw7Ci0KLSAgICAg
ICAgUmVuZGVyVGFyZ2V0ICpyZW5kZXJUYXJnZXQgPSByZW5kZXJidWZmZXJPYmplY3QtPmdldFJl
bmRlclRhcmdldCgpOwotICAgICAgICBpZiAocmVuZGVyVGFyZ2V0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZW5kZXJUYXJnZXRTdXJmYWNlID0gUmVuZGVyVGFyZ2V0OTo6bWFrZVJlbmRlclRh
cmdldDkocmVuZGVyVGFyZ2V0KS0+Z2V0U3VyZmFjZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKCFyZW5kZXJUYXJnZXRTdXJmYWNlKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoInJl
bmRlciB0YXJnZXQgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgICAvLyBDb250ZXh0IG11c3QgYmUgbG9zdAotICAgICAgICB9Ci0KLSAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIHJlbmRlclRhcmdldFN1cmZhY2UpOwotICAg
ICAgICByZW5kZXJUYXJnZXRTdXJmYWNlLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgbUFwcGxpZWRS
ZW5kZXJUYXJnZXRTZXJpYWwgPSByZW5kZXJUYXJnZXRTZXJpYWw7Ci0gICAgICAgIHJlbmRlclRh
cmdldENoYW5nZWQgPSB0cnVlOwotICAgIH0KLQotICAgIGdsOjpSZW5kZXJidWZmZXIgKmRlcHRo
U3RlbmNpbCA9IE5VTEw7Ci0gICAgdW5zaWduZWQgaW50IGRlcHRoYnVmZmVyU2VyaWFsID0gMDsK
LSAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbGJ1ZmZlclNlcmlhbCA9IDA7Ci0gICAgaWYgKGZyYW1l
YnVmZmVyLT5nZXREZXB0aGJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQotICAgIHsKLSAgICAgICAg
ZGVwdGhTdGVuY2lsID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCk7Ci0gICAgICAgIGlm
ICghZGVwdGhTdGVuY2lsKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkRlcHRoIHN0ZW5j
aWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGRlcHRoYnVmZmVyU2VyaWFsID0gZGVwdGhTdGVuY2ls
LT5nZXRTZXJpYWwoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZnJhbWVidWZmZXItPmdldFN0ZW5j
aWxidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKLSAgICB7Ci0gICAgICAgIGRlcHRoU3RlbmNpbCA9
IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCk7Ci0gICAgICAgIGlmICghZGVwdGhTdGVu
Y2lsKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkRlcHRoIHN0ZW5jaWwgcG9pbnRlciB1
bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotCi0gICAgICAgIHN0ZW5jaWxidWZmZXJTZXJpYWwgPSBkZXB0aFN0ZW5jaWwtPmdldFNlcmlh
bCgpOwotICAgIH0KLQotICAgIGlmIChkZXB0aGJ1ZmZlclNlcmlhbCAhPSBtQXBwbGllZERlcHRo
YnVmZmVyU2VyaWFsIHx8Ci0gICAgICAgIHN0ZW5jaWxidWZmZXJTZXJpYWwgIT0gbUFwcGxpZWRT
dGVuY2lsYnVmZmVyU2VyaWFsIHx8Ci0gICAgICAgICFtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQp
Ci0gICAgewotICAgICAgICB1bnNpZ25lZCBpbnQgZGVwdGhTaXplID0gMDsKLSAgICAgICAgdW5z
aWduZWQgaW50IHN0ZW5jaWxTaXplID0gMDsKLQotICAgICAgICAvLyBBcHBseSB0aGUgZGVwdGgg
c3RlbmNpbCBvbiB0aGUgZGV2aWNlCi0gICAgICAgIGlmIChkZXB0aFN0ZW5jaWwpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWxTdXJmYWNlID0g
TlVMTDsKLSAgICAgICAgICAgIFJlbmRlclRhcmdldCAqZGVwdGhTdGVuY2lsUmVuZGVyVGFyZ2V0
ID0gZGVwdGhTdGVuY2lsLT5nZXREZXB0aFN0ZW5jaWwoKTsKLQotICAgICAgICAgICAgaWYgKGRl
cHRoU3RlbmNpbFJlbmRlclRhcmdldCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBk
ZXB0aFN0ZW5jaWxTdXJmYWNlID0gUmVuZGVyVGFyZ2V0OTo6bWFrZVJlbmRlclRhcmdldDkoZGVw
dGhTdGVuY2lsUmVuZGVyVGFyZ2V0KS0+Z2V0U3VyZmFjZSgpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAoIWRlcHRoU3RlbmNpbFN1cmZhY2UpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgRVJSKCJkZXB0aCBzdGVuY2lsIHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwu
Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIENvbnRleHQgbXVzdCBiZSBs
b3N0Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1EZXZpY2UtPlNldERlcHRoU3RlbmNp
bFN1cmZhY2UoZGVwdGhTdGVuY2lsU3VyZmFjZSk7Ci0gICAgICAgICAgICBkZXB0aFN0ZW5jaWxT
dXJmYWNlLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgICAgIGRlcHRoU2l6ZSA9IGRlcHRoU3RlbmNp
bC0+Z2V0RGVwdGhTaXplKCk7Ci0gICAgICAgICAgICBzdGVuY2lsU2l6ZSA9IGRlcHRoU3RlbmNp
bC0+Z2V0U3RlbmNpbFNpemUoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1EZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UoTlVMTCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoIW1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCB8fCBkZXB0aFNp
emUgIT0gbUN1ckRlcHRoU2l6ZSkKLSAgICAgICAgewotICAgICAgICAgICAgbUN1ckRlcHRoU2l6
ZSA9IGRlcHRoU2l6ZTsKLSAgICAgICAgICAgIG1Gb3JjZVNldFJhc3RlclN0YXRlID0gdHJ1ZTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmICghbURlcHRoU3RlbmNpbEluaXRpYWxpemVkIHx8IHN0
ZW5jaWxTaXplICE9IG1DdXJTdGVuY2lsU2l6ZSkKLSAgICAgICAgewotICAgICAgICAgICAgbUN1
clN0ZW5jaWxTaXplID0gc3RlbmNpbFNpemU7Ci0gICAgICAgICAgICBtRm9yY2VTZXREZXB0aFN0
ZW5jaWxTdGF0ZSA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBtQXBwbGllZERlcHRoYnVm
ZmVyU2VyaWFsID0gZGVwdGhidWZmZXJTZXJpYWw7Ci0gICAgICAgIG1BcHBsaWVkU3RlbmNpbGJ1
ZmZlclNlcmlhbCA9IHN0ZW5jaWxidWZmZXJTZXJpYWw7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxJ
bml0aWFsaXplZCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHJlbmRlclRhcmdldENoYW5nZWQg
fHwgIW1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQpCi0gICAgewotICAgICAgICBtRm9yY2VT
ZXRTY2lzc29yID0gdHJ1ZTsKLSAgICAgICAgbUZvcmNlU2V0Vmlld3BvcnQgPSB0cnVlOwotCi0g
ICAgICAgIG1SZW5kZXJUYXJnZXREZXNjLndpZHRoID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRX
aWR0aCgpOwotICAgICAgICBtUmVuZGVyVGFyZ2V0RGVzYy5oZWlnaHQgPSByZW5kZXJidWZmZXJP
YmplY3QtPmdldEhlaWdodCgpOwotICAgICAgICBtUmVuZGVyVGFyZ2V0RGVzYy5mb3JtYXQgPSBy
ZW5kZXJidWZmZXJPYmplY3QtPmdldEFjdHVhbEZvcm1hdCgpOwotICAgICAgICBtUmVuZGVyVGFy
Z2V0RGVzY0luaXRpYWxpemVkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotR0xlbnVtIFJlbmRlcmVyOTo6YXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkg
KnByb2dyYW1CaW5hcnksIGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmlidXRlc1tdLCBH
TGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpCi17Ci0gICAgVHJh
bnNsYXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdOwotICAg
IEdMZW51bSBlcnIgPSBtVmVydGV4RGF0YU1hbmFnZXItPnByZXBhcmVWZXJ0ZXhEYXRhKHZlcnRl
eEF0dHJpYnV0ZXMsIHByb2dyYW1CaW5hcnksIGZpcnN0LCBjb3VudCwgYXR0cmlidXRlcywgaW5z
dGFuY2VzKTsKLSAgICBpZiAoZXJyICE9IEdMX05PX0VSUk9SKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGVycjsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG1WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hl
LmFwcGx5RGVjbGFyYXRpb24obURldmljZSwgYXR0cmlidXRlcywgcHJvZ3JhbUJpbmFyeSwgaW5z
dGFuY2VzLCAmbVJlcGVhdERyYXcpOwotfQotCi0vLyBBcHBsaWVzIHRoZSBpbmRpY2VzIGFuZCBl
bGVtZW50IGFycmF5IGJpbmRpbmdzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQotR0xlbnVtIFJl
bmRlcmVyOTo6YXBwbHlJbmRleEJ1ZmZlcihjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpCdWZm
ZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgR0xzaXplaSBjb3VudCwgR0xlbnVtIG1vZGUsIEdMZW51
bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pCi17Ci0gICAgR0xlbnVtIGVy
ciA9IG1JbmRleERhdGFNYW5hZ2VyLT5wcmVwYXJlSW5kZXhEYXRhKHR5cGUsIGNvdW50LCBlbGVt
ZW50QXJyYXlCdWZmZXIsIGluZGljZXMsIGluZGV4SW5mbyk7Ci0KLSAgICBpZiAoZXJyID09IEdM
X05PX0VSUk9SKQotICAgIHsKLSAgICAgICAgLy8gRGlyZWN0bHkgYmluZGluZyB0aGUgc3RvcmFn
ZSBidWZmZXIgaXMgbm90IHN1cHBvcnRlZCBmb3IgZDNkOQotICAgICAgICBBU1NFUlQoaW5kZXhJ
bmZvLT5zdG9yYWdlID09IE5VTEwpOwotCi0gICAgICAgIGlmIChpbmRleEluZm8tPnNlcmlhbCAh
PSBtQXBwbGllZElCU2VyaWFsKQotICAgICAgICB7Ci0gICAgICAgICAgICBJbmRleEJ1ZmZlcjkq
IGluZGV4QnVmZmVyID0gSW5kZXhCdWZmZXI5OjptYWtlSW5kZXhCdWZmZXI5KGluZGV4SW5mby0+
aW5kZXhCdWZmZXIpOwotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRJbmRpY2VzKGluZGV4QnVm
ZmVyLT5nZXRCdWZmZXIoKSk7Ci0gICAgICAgICAgICBtQXBwbGllZElCU2VyaWFsID0gaW5kZXhJ
bmZvLT5zZXJpYWw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZXJyOwotfQotCi12
b2lkIFJlbmRlcmVyOTo6ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xz
aXplaSBpbnN0YW5jZXMpCi17Ci0gICAgc3RhcnRTY2VuZSgpOwotICAgICAgICAKLSAgICBpZiAo
bW9kZSA9PSBHTF9MSU5FX0xPT1ApCi0gICAgewotICAgICAgICBkcmF3TGluZUxvb3AoY291bnQs
IEdMX05PTkUsIE5VTEwsIDAsIE5VTEwpOwotICAgIH0KLSAgICBlbHNlIGlmIChpbnN0YW5jZXMg
PiAwKQotICAgIHsKLSAgICAgICAgU3RhdGljSW5kZXhCdWZmZXJJbnRlcmZhY2UgKmNvdW50aW5n
SUIgPSBtSW5kZXhEYXRhTWFuYWdlci0+Z2V0Q291bnRpbmdJbmRpY2VzKGNvdW50KTsKLSAgICAg
ICAgaWYgKGNvdW50aW5nSUIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtQXBwbGllZElC
U2VyaWFsICE9IGNvdW50aW5nSUItPmdldFNlcmlhbCgpKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIEluZGV4QnVmZmVyOSAqaW5kZXhCdWZmZXIgPSBJbmRleEJ1ZmZlcjk6Om1ha2VJ
bmRleEJ1ZmZlcjkoY291bnRpbmdJQi0+Z2V0SW5kZXhCdWZmZXIoKSk7Ci0KLSAgICAgICAgICAg
ICAgICBtRGV2aWNlLT5TZXRJbmRpY2VzKGluZGV4QnVmZmVyLT5nZXRCdWZmZXIoKSk7Ci0gICAg
ICAgICAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IGNvdW50aW5nSUItPmdldFNlcmlhbCgpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1SZXBlYXRE
cmF3OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+RHJhd0lu
ZGV4ZWRQcmltaXRpdmUobVByaW1pdGl2ZVR5cGUsIDAsIDAsIGNvdW50LCAwLCBtUHJpbWl0aXZl
Q291bnQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ewotICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGEgY291bnRpbmcgaW5kZXggYnVm
ZmVyIGZvciBnbERyYXdBcnJheXNJbnN0YW5jZWQuIik7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgICAv
LyBSZWd1bGFyIGNhc2UKLSAgICB7Ci0gICAgICAgIG1EZXZpY2UtPkRyYXdQcmltaXRpdmUobVBy
aW1pdGl2ZVR5cGUsIDAsIG1QcmltaXRpdmVDb3VudCk7Ci0gICAgfQotfQotCi12b2lkIFJlbmRl
cmVyOTo6ZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlw
ZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIs
IGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbywgR0xzaXplaSAvKmluc3RhbmNl
cyovKQotewotICAgIHN0YXJ0U2NlbmUoKTsKLQotICAgIGlmIChtb2RlID09IEdMX1BPSU5UUykK
LSAgICB7Ci0gICAgICAgIGRyYXdJbmRleGVkUG9pbnRzKGNvdW50LCB0eXBlLCBpbmRpY2VzLCBl
bGVtZW50QXJyYXlCdWZmZXIpOwotICAgIH0KLSAgICBlbHNlIGlmIChtb2RlID09IEdMX0xJTkVf
TE9PUCkKLSAgICB7Ci0gICAgICAgIGRyYXdMaW5lTG9vcChjb3VudCwgdHlwZSwgaW5kaWNlcywg
aW5kZXhJbmZvLm1pbkluZGV4LCBlbGVtZW50QXJyYXlCdWZmZXIpOwotICAgIH0KLSAgICBlbHNl
Ci0gICAgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1SZXBlYXREcmF3OyBpKyspCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEdMc2l6ZWkgdmVydGV4Q291bnQgPSBpbmRleEluZm8ubWF4
SW5kZXggLSBpbmRleEluZm8ubWluSW5kZXggKyAxOwotICAgICAgICAgICAgbURldmljZS0+RHJh
d0luZGV4ZWRQcmltaXRpdmUobVByaW1pdGl2ZVR5cGUsIC0oSU5UKWluZGV4SW5mby5taW5JbmRl
eCwgaW5kZXhJbmZvLm1pbkluZGV4LCB2ZXJ0ZXhDb3VudCwgaW5kZXhJbmZvLnN0YXJ0SW5kZXgs
IG1QcmltaXRpdmVDb3VudCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyZXI5
OjpkcmF3TGluZUxvb3AoR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAq
aW5kaWNlcywgaW50IG1pbkluZGV4LCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIpCi17
Ci0gICAgLy8gR2V0IHRoZSByYXcgaW5kaWNlcyBmb3IgYW4gaW5kZXhlZCBkcmF3Ci0gICAgaWYg
KHR5cGUgIT0gR0xfTk9ORSAmJiBlbGVtZW50QXJyYXlCdWZmZXIpCi0gICAgewotICAgICAgICBn
bDo6QnVmZmVyICppbmRleEJ1ZmZlciA9IGVsZW1lbnRBcnJheUJ1ZmZlcjsKLSAgICAgICAgQnVm
ZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGluZGV4QnVmZmVyLT5nZXRTdG9yYWdlKCk7Ci0gICAgICAg
IGludHB0cl90IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZGljZXMpOwot
ICAgICAgICBpbmRpY2VzID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KHN0b3JhZ2UtPmdl
dERhdGEoKSkgKyBvZmZzZXQ7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaW50IHN0YXJ0SW5kZXgg
PSAwOwotCi0gICAgaWYgKGdldDMyQml0SW5kZXhTdXBwb3J0KCkpCi0gICAgewotICAgICAgICBp
ZiAoIW1MaW5lTG9vcElCKQotICAgICAgICB7Ci0gICAgICAgICAgICBtTGluZUxvb3BJQiA9IG5l
dyBTdHJlYW1pbmdJbmRleEJ1ZmZlckludGVyZmFjZSh0aGlzKTsKLSAgICAgICAgICAgIGlmICgh
bUxpbmVMb29wSUItPnJlc2VydmVCdWZmZXJTcGFjZShJTklUSUFMX0lOREVYX0JVRkZFUl9TSVpF
LCBHTF9VTlNJR05FRF9JTlQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRlbGV0
ZSBtTGluZUxvb3BJQjsKLSAgICAgICAgICAgICAgICBtTGluZUxvb3BJQiA9IE5VTEw7Ci0KLSAg
ICAgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSAzMi1iaXQgbG9vcGluZyBpbmRl
eCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oY291bnQpICsgMSA+IChzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpIC8gc2l6ZW9mKHVuc2lnbmVkIGludCkp
KQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSAzMi1iaXQg
bG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUCwgdG9vIG1hbnkgaW5kaWNlcyBy
ZXF1aXJlZC4iKTsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDaGVja2VkIGJ5IFJlbmRlcmVyOTo6YXBwbHlQ
cmltaXRpdmVUeXBlCi0gICAgICAgIEFTU0VSVChjb3VudCA+PSAwKTsKLQotICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgc3BhY2VOZWVkZWQgPSAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihj
b3VudCkgKyAxKSAqIHNpemVvZih1bnNpZ25lZCBpbnQpOwotICAgICAgICBpZiAoIW1MaW5lTG9v
cElCLT5yZXNlcnZlQnVmZmVyU3BhY2Uoc3BhY2VOZWVkZWQsIEdMX1VOU0lHTkVEX0lOVCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiQ291bGQgbm90IHJlc2VydmUgZW5vdWdoIHNwYWNl
IGluIGxvb3BpbmcgaW5kZXggYnVmZmVyIGZvciBHTF9MSU5FX0xPT1AuIik7Ci0gICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdm9pZCogbWFwcGVkTWVtb3J5ID0gTlVMTDsKLSAgICAgICAgdW5zaWduZWQgaW50IG9mZnNl
dCA9IDA7Ci0gICAgICAgIGlmICghbUxpbmVMb29wSUItPm1hcEJ1ZmZlcihzcGFjZU5lZWRlZCwg
Jm1hcHBlZE1lbW9yeSwgJm9mZnNldCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiQ291
bGQgbm90IG1hcCBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKLSAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBzdGFydEluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihvZmZzZXQpIC8gNDsKLSAg
ICAgICAgdW5zaWduZWQgaW50ICpkYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQq
PihtYXBwZWRNZW1vcnkpOwotCi0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgewotICAg
ICAgICAgIGNhc2UgR0xfTk9ORTogICAvLyBOb24taW5kZXhlZCBkcmF3Ci0gICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgZGF0YVtpXSA9IGk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkYXRhW2NvdW50
XSA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZ
VEU6Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5
dGUqPihpbmRpY2VzKVtpXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRhdGFbY291bnRd
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpWzBdOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKLSAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVtpXTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29u
c3QgR0x1c2hvcnQqPihpbmRpY2VzKVswXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IGNhc2UgR0xfVU5TSUdORURfSU5UOgotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0
aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVtpXTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1aW50Kj4oaW5kaWNlcylb
MF07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtTGluZUxvb3BJQi0+dW5tYXBCdWZmZXIoKSkK
LSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgdW5tYXAgaW5kZXggYnVmZmVy
IGZvciBHTF9MSU5FX0xPT1AuIik7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAg
IGlmICghbUxpbmVMb29wSUIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1MaW5lTG9vcElCID0g
bmV3IFN0cmVhbWluZ0luZGV4QnVmZmVySW50ZXJmYWNlKHRoaXMpOwotICAgICAgICAgICAgaWYg
KCFtTGluZUxvb3BJQi0+cmVzZXJ2ZUJ1ZmZlclNwYWNlKElOSVRJQUxfSU5ERVhfQlVGRkVSX1NJ
WkUsIEdMX1VOU0lHTkVEX1NIT1JUKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBk
ZWxldGUgbUxpbmVMb29wSUI7Ci0gICAgICAgICAgICAgICAgbUxpbmVMb29wSUIgPSBOVUxMOwot
Ci0gICAgICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGEgMTYtYml0IGxvb3Bpbmcg
aW5kZXggYnVmZmVyIGZvciBHTF9MSU5FX0xPT1AuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIENoZWNrZWQgYnkgUmVuZGVyZXI5OjphcHBseVByaW1pdGl2ZVR5cGUKLSAg
ICAgICAgQVNTRVJUKGNvdW50ID49IDApOwotCi0gICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNp
Z25lZCBpbnQ+KGNvdW50KSArIDEgPiAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBzaG9y
dD46Om1heCgpIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBhIDE2LWJpdCBsb29waW5nIGluZGV4IGJ1ZmZlciBm
b3IgR0xfTElORV9MT09QLCB0b28gbWFueSBpbmRpY2VzIHJlcXVpcmVkLiIpOwotICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGludCBzcGFjZU5lZWRlZCA9IChzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBpbnQ+KGNvdW50KSArIDEpICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKLSAgICAgICAgaWYg
KCFtTGluZUxvb3BJQi0+cmVzZXJ2ZUJ1ZmZlclNwYWNlKHNwYWNlTmVlZGVkLCBHTF9VTlNJR05F
RF9TSE9SVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiQ291bGQgbm90IHJlc2VydmUg
ZW5vdWdoIHNwYWNlIGluIGxvb3BpbmcgaW5kZXggYnVmZmVyIGZvciBHTF9MSU5FX0xPT1AuIik7
Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdm9pZCogbWFwcGVkTWVtb3J5ID0gTlVMTDsKLSAgICAgICAgdW5zaWdu
ZWQgaW50IG9mZnNldDsKLSAgICAgICAgaWYgKG1MaW5lTG9vcElCLT5tYXBCdWZmZXIoc3BhY2VO
ZWVkZWQsICZtYXBwZWRNZW1vcnksICZvZmZzZXQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBF
UlIoIkNvdWxkIG5vdCBtYXAgaW5kZXggYnVmZmVyIGZvciBHTF9MSU5FX0xPT1AuIik7Ci0gICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0K
LSAgICAgICAgc3RhcnRJbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4ob2Zmc2V0KSAv
IDI7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0ICpkYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNp
Z25lZCBzaG9ydCo+KG1hcHBlZE1lbW9yeSk7Ci0KLSAgICAgICAgc3dpdGNoICh0eXBlKQotICAg
ICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9OT05FOiAgIC8vIE5vbi1pbmRleGVkIGRyYXcKLSAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBkYXRhW2ldID0gaTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGRhdGFbY291bnRdID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xf
VU5TSUdORURfQllURToKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkr
KykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8
Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpW2ldOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oaW5kaWNlcylbMF07Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGlu
ZGljZXMpW2ldOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0
aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpWzBdOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6Ci0gICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZGF0
YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMpW2ldOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQq
PihpbmRpY2VzKVswXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW1MaW5lTG9vcElCLT51bm1h
cEJ1ZmZlcigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCB1bm1hcCBp
bmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKLSAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobUFw
cGxpZWRJQlNlcmlhbCAhPSBtTGluZUxvb3BJQi0+Z2V0U2VyaWFsKCkpCi0gICAgewotICAgICAg
ICBJbmRleEJ1ZmZlcjkgKmluZGV4QnVmZmVyID0gSW5kZXhCdWZmZXI5OjptYWtlSW5kZXhCdWZm
ZXI5KG1MaW5lTG9vcElCLT5nZXRJbmRleEJ1ZmZlcigpKTsKLQotICAgICAgICBtRGV2aWNlLT5T
ZXRJbmRpY2VzKGluZGV4QnVmZmVyLT5nZXRCdWZmZXIoKSk7Ci0gICAgICAgIG1BcHBsaWVkSUJT
ZXJpYWwgPSBtTGluZUxvb3BJQi0+Z2V0U2VyaWFsKCk7Ci0gICAgfQotCi0gICAgbURldmljZS0+
RHJhd0luZGV4ZWRQcmltaXRpdmUoRDNEUFRfTElORVNUUklQLCAtbWluSW5kZXgsIG1pbkluZGV4
LCBjb3VudCwgc3RhcnRJbmRleCwgY291bnQpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
LXN0YXRpYyB2b2lkIGRyYXdQb2ludHMoSURpcmVjdDNERGV2aWNlOSogZGV2aWNlLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTHZvaWQgKmluZGljZXMpCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgaW50IGluZGV4VmFsdWUgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHN0YXRpY19jYXN0PGNvbnN0IFQqPihpbmRpY2VzKVtp
XSk7Ci0gICAgICAgIGRldmljZS0+RHJhd1ByaW1pdGl2ZShEM0RQVF9QT0lOVExJU1QsIGluZGV4
VmFsdWUsIDEpOwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJlcjk6OmRyYXdJbmRleGVkUG9pbnRz
KEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpC
dWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlcikKLXsKLSAgICAvLyBEcmF3aW5nIGluZGV4IHBvaW50
IGxpc3RzIGlzIHVuc3VwcG9ydGVkIGluIGQzZDksIGZhbGwgYmFjayB0byBhIHJlZ3VsYXIgRHJh
d1ByaW1pdGl2ZSBjYWxsCi0gICAgLy8gZm9yIGVhY2ggaW5kaXZpZHVhbCBwb2ludC4gVGhpcyBj
YWxsIGlzIG5vdCBleHBlY3RlZCB0byBoYXBwZW4gb2Z0ZW4uCi0KLSAgICBpZiAoZWxlbWVudEFy
cmF5QnVmZmVyKQotICAgIHsKLSAgICAgICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGVsZW1l
bnRBcnJheUJ1ZmZlci0+Z2V0U3RvcmFnZSgpOwotICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSBy
ZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmRpY2VzKTsKLSAgICAgICAgaW5kaWNlcyA9IHN0
YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihzdG9yYWdlLT5nZXREYXRhKCkpICsgb2Zmc2V0Owot
ICAgIH0KLQotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICAgIGNhc2UgR0xfVU5TSUdO
RURfQllURTogIGRyYXdQb2ludHM8R0x1Ynl0ZT4obURldmljZSwgY291bnQsIGluZGljZXMpOyAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6IGRyYXdQb2ludHM8R0x1c2hv
cnQ+KG1EZXZpY2UsIGNvdW50LCBpbmRpY2VzKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgR0xfVU5T
SUdORURfSU5UOiAgIGRyYXdQb2ludHM8R0x1aW50PihtRGV2aWNlLCBjb3VudCwgaW5kaWNlcyk7
ICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotfQotCi12
b2lkIFJlbmRlcmVyOTo6YXBwbHlTaGFkZXJzKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5KQotewotICAgIHVuc2lnbmVkIGludCBwcm9ncmFtQmluYXJ5U2VyaWFsID0gcHJvZ3JhbUJp
bmFyeS0+Z2V0U2VyaWFsKCk7Ci0gICAgaWYgKHByb2dyYW1CaW5hcnlTZXJpYWwgIT0gbUFwcGxp
ZWRQcm9ncmFtQmluYXJ5U2VyaWFsKQotICAgIHsKLSAgICAgICAgU2hhZGVyRXhlY3V0YWJsZSAq
dmVydGV4RXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0VmVydGV4RXhlY3V0YWJsZSgpOwotICAgICAg
ICBTaGFkZXJFeGVjdXRhYmxlICpwaXhlbEV4ZSA9IHByb2dyYW1CaW5hcnktPmdldFBpeGVsRXhl
Y3V0YWJsZSgpOwotCi0gICAgICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKnZlcnRleFNoYWRl
ciA9IE5VTEw7Ci0gICAgICAgIGlmICh2ZXJ0ZXhFeGUpIHZlcnRleFNoYWRlciA9IFNoYWRlckV4
ZWN1dGFibGU5OjptYWtlU2hhZGVyRXhlY3V0YWJsZTkodmVydGV4RXhlKS0+Z2V0VmVydGV4U2hh
ZGVyKCk7Ci0KLSAgICAgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpwaXhlbFNoYWRlciA9IE5V
TEw7Ci0gICAgICAgIGlmIChwaXhlbEV4ZSkgcGl4ZWxTaGFkZXIgPSBTaGFkZXJFeGVjdXRhYmxl
OTo6bWFrZVNoYWRlckV4ZWN1dGFibGU5KHBpeGVsRXhlKS0+Z2V0UGl4ZWxTaGFkZXIoKTsKLQot
ICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlcihwaXhlbFNoYWRlcik7Ci0gICAgICAgIG1E
ZXZpY2UtPlNldFZlcnRleFNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgICAgICBwcm9ncmFtQmlu
YXJ5LT5kaXJ0eUFsbFVuaWZvcm1zKCk7Ci0gICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVl
OwotCi0gICAgICAgIG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbCA9IHByb2dyYW1CaW5hcnlT
ZXJpYWw7Ci0gICAgfQotfQotCi12b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlmb3JtcyhnbDo6UHJv
Z3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlVuaWZvcm1BcnJheSAqdW5pZm9ybUFycmF5
KQotewotICAgIGZvciAoc3RkOjp2ZWN0b3I8Z2w6OlVuaWZvcm0qPjo6Y29uc3RfaXRlcmF0b3Ig
dWIgPSB1bmlmb3JtQXJyYXktPmJlZ2luKCksIHVlID0gdW5pZm9ybUFycmF5LT5lbmQoKTsgdWIg
IT0gdWU7ICsrdWIpCi0gICAgewotICAgICAgICBnbDo6VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9
ICp1YjsKLQotICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+ZGlydHkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEdMZmxvYXQgKmYgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKLSAg
ICAgICAgICAgIEdMaW50ICppID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhOwotCi0gICAg
ICAgICAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1Q
TEVSX0NVQkU6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
Qk9PTDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfQk9PTF9WRUMzOgotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDNDoKLSAgICAg
ICAgICAgICAgICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgaSk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfRkxPQVRfVkVDMjoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgot
ICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
RkxPQVRfTUFUMjoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgotICAgICAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6Ci0gICAgICAgICAgICAgICAgYXBwbHlVbmlmb3JtbmZ2
KHRhcmdldFVuaWZvcm0sIGYpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX0lOVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDMjoKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9JTlRfVkVDMzoKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDNDoK
LSAgICAgICAgICAgICAgICBhcHBseVVuaWZvcm1uaXYodGFyZ2V0VW5pZm9ybSwgaSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGFyZ2V0VW5p
Zm9ybS0+ZGlydHkgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIERyaXZlciB1
bmlmb3JtcwotICAgIGlmIChtRHhVbmlmb3Jtc0RpcnR5KQotICAgIHsKLSAgICAgICAgbURldmlj
ZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKDAsIChmbG9hdCopJm1WZXJ0ZXhDb25zdGFudHMs
IHNpemVvZihkeF9WZXJ0ZXhDb25zdGFudHMpIC8gc2l6ZW9mKGZsb2F0WzRdKSk7Ci0gICAgICAg
IG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKDAsIChmbG9hdCopJm1QaXhlbENvbnN0
YW50cywgc2l6ZW9mKGR4X1BpeGVsQ29uc3RhbnRzKSAvIHNpemVvZihmbG9hdFs0XSkpOwotICAg
ICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gZmFsc2U7Ci0gICAgfQotfQotCi12b2lkIFJlbmRlcmVy
OTo6YXBwbHlVbmlmb3JtbmZ2KGdsOjpVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGZs
b2F0ICp2KQotewotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wc1JlZ2lzdGVySW5kZXggPj0gMCkK
LSAgICB7Ci0gICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVu
aWZvcm0tPnBzUmVnaXN0ZXJJbmRleCwgdiwgdGFyZ2V0VW5pZm9ybS0+cmVnaXN0ZXJDb3VudCk7
Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleCA+PSAwKQot
ICAgIHsKLSAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVu
aWZvcm0tPnZzUmVnaXN0ZXJJbmRleCwgdiwgdGFyZ2V0VW5pZm9ybS0+cmVnaXN0ZXJDb3VudCk7
Ci0gICAgfQotfQotCi12b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlmb3Jtbml2KGdsOjpVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGludCAqdikKLXsKLSAgICBBU1NFUlQodGFyZ2V0VW5p
Zm9ybS0+cmVnaXN0ZXJDb3VudCA8PSBNQVhfVkVSVEVYX0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOSk7
Ci0gICAgR0xmbG9hdCB2ZWN0b3JbTUFYX1ZFUlRFWF9DT05TVEFOVF9WRUNUT1JTX0QzRDldWzRd
OwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB0YXJnZXRVbmlmb3JtLT5yZWdp
c3RlckNvdW50OyBpKyspCi0gICAgewotICAgICAgICB2ZWN0b3JbaV1bMF0gPSAoR0xmbG9hdCl2
WzQgKiBpICsgMF07Ci0gICAgICAgIHZlY3RvcltpXVsxXSA9IChHTGZsb2F0KXZbNCAqIGkgKyAx
XTsKLSAgICAgICAgdmVjdG9yW2ldWzJdID0gKEdMZmxvYXQpdls0ICogaSArIDJdOwotICAgICAg
ICB2ZWN0b3JbaV1bM10gPSAoR0xmbG9hdCl2WzQgKiBpICsgM107Ci0gICAgfQotCi0gICAgYXBw
bHlVbmlmb3JtbmZ2KHRhcmdldFVuaWZvcm0sIChHTGZsb2F0Kil2ZWN0b3IpOwotfQotCi12b2lk
IFJlbmRlcmVyOTo6YXBwbHlVbmlmb3JtbmJ2KGdsOjpVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBj
b25zdCBHTGludCAqdikKLXsKLSAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cmVnaXN0ZXJDb3Vu
dCA8PSBNQVhfVkVSVEVYX0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOSk7Ci0gICAgR0xmbG9hdCB2ZWN0
b3JbTUFYX1ZFUlRFWF9DT05TVEFOVF9WRUNUT1JTX0QzRDldWzRdOwotCi0gICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCB0YXJnZXRVbmlmb3JtLT5yZWdpc3RlckNvdW50OyBpKyspCi0g
ICAgewotICAgICAgICB2ZWN0b3JbaV1bMF0gPSAodls0ICogaSArIDBdID09IEdMX0ZBTFNFKSA/
IDAuMGYgOiAxLjBmOwotICAgICAgICB2ZWN0b3JbaV1bMV0gPSAodls0ICogaSArIDFdID09IEdM
X0ZBTFNFKSA/IDAuMGYgOiAxLjBmOwotICAgICAgICB2ZWN0b3JbaV1bMl0gPSAodls0ICogaSAr
IDJdID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOwotICAgICAgICB2ZWN0b3JbaV1bM10gPSAo
dls0ICogaSArIDNdID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOwotICAgIH0KLQotICAgIGFw
cGx5VW5pZm9ybW5mdih0YXJnZXRVbmlmb3JtLCAoR0xmbG9hdCopdmVjdG9yKTsKLX0KLQotdm9p
ZCBSZW5kZXJlcjk6OmNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1z
LCBnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKQotewotICAgIEQzRENPTE9SIGNvbG9yID0g
RDNEQ09MT1JfQVJHQihnbDo6dW5vcm08OD4oY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLmFs
cGhhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNs
ZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5yZWQpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnbDo6dW5vcm08OD4oY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLmdyZWVu
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNsZWFy
UGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5ibHVlKSk7Ci0gICAgZmxvYXQgZGVwdGggPSBnbDo6Y2xh
bXAwMShjbGVhclBhcmFtcy5kZXB0aENsZWFyVmFsdWUpOwotICAgIGludCBzdGVuY2lsID0gY2xl
YXJQYXJhbXMuc3RlbmNpbENsZWFyVmFsdWUgJiAweDAwMDAwMEZGOwotCi0gICAgdW5zaWduZWQg
aW50IHN0ZW5jaWxVbm1hc2tlZCA9IDB4MDsKLSAgICBpZiAoKGNsZWFyUGFyYW1zLm1hc2sgJiBH
TF9TVEVOQ0lMX0JVRkZFUl9CSVQpICYmIGZyYW1lQnVmZmVyLT5oYXNTdGVuY2lsKCkpCi0gICAg
ewotICAgICAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbFNpemUgPSBnbDo6R2V0U3RlbmNpbFNpemUo
ZnJhbWVCdWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0QWN0dWFsRm9ybWF0KCkpOwotICAg
ICAgICBzdGVuY2lsVW5tYXNrZWQgPSAoMHgxIDw8IHN0ZW5jaWxTaXplKSAtIDE7Ci0gICAgfQot
Ci0gICAgYm9vbCBhbHBoYVVubWFza2VkID0gKGdsOjpHZXRBbHBoYVNpemUobVJlbmRlclRhcmdl
dERlc2MuZm9ybWF0KSA9PSAwKSB8fCBjbGVhclBhcmFtcy5jb2xvck1hc2tBbHBoYTsKLQotICAg
IGNvbnN0IGJvb2wgbmVlZE1hc2tlZFN0ZW5jaWxDbGVhciA9IChjbGVhclBhcmFtcy5tYXNrICYg
R0xfU1RFTkNJTF9CVUZGRVJfQklUKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrICYgc3RlbmNpbFVubWFza2Vk
KSAhPSBzdGVuY2lsVW5tYXNrZWQ7Ci0gICAgY29uc3QgYm9vbCBuZWVkTWFza2VkQ29sb3JDbGVh
ciA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkgJiYKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIShjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQg
JiYgY2xlYXJQYXJhbXMuY29sb3JNYXNrR3JlZW4gJiYKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tCbHVlICYmIGFscGhhVW5tYXNr
ZWQpOwotCi0gICAgaWYgKG5lZWRNYXNrZWRDb2xvckNsZWFyIHx8IG5lZWRNYXNrZWRTdGVuY2ls
Q2xlYXIpCi0gICAgewotICAgICAgICAvLyBTdGF0ZSB3aGljaCBpcyBhbHRlcmVkIGluIGFsbCBw
YXRocyBmcm9tIHRoaXMgcG9pbnQgdG8gdGhlIGNsZWFyIGNhbGwgaXMgc2F2ZWQuCi0gICAgICAg
IC8vIFN0YXRlIHdoaWNoIGlzIGFsdGVyZWQgaW4gb25seSBzb21lIHBhdGhzIHdpbGwgYmUgZmxh
Z2dlZCBkaXJ0eSBpbiB0aGUgY2FzZSB0aGF0Ci0gICAgICAgIC8vICB0aGF0IHBhdGggaXMgdGFr
ZW4uCi0gICAgICAgIEhSRVNVTFQgaHI7Ci0gICAgICAgIGlmIChtTWFza2VkQ2xlYXJTYXZlZFN0
YXRlID09IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGhyID0gbURldmljZS0+QmVnaW5T
dGF0ZUJsb2NrKCk7Ci0gICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBociA9PSBE
M0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsKLQotICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRFRU5BQkxFLCBGQUxTRSk7
Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRlVOQywgRDNEQ01Q
X0FMV0FZUyk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5B
QkxFLCBGQUxTRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19D
VUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElEKTsKLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0UpOwotICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgRkFMU0Up
OwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5B
QkxFLCAwKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9S
V1JJVEVFTkFCTEUsIDApOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UGl4ZWxT
aGFkZXIoTlVMTCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIoTlVMTCk7
Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRGVkYoRDNERlZGX1hZWlJIVyB8IEQzREZWRl9ESUZG
VVNFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZSgwLCBOVUxMLCAwLCAw
KTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NFUEFSQVRFQUxQ
SEFCTEVOREVOQUJMRSwgVFJVRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3Rh
Z2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOwotICAgICAgICAg
ICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9SQVJHMSwgRDNE
VEFfVEZBQ1RPUik7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgw
LCBEM0RUU1NfQUxQSEFPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOwotICAgICAgICAgICAgbURldmlj
ZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0FMUEhBQVJHMSwgRDNEVEFfVEZBQ1RP
Uik7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19URVhUVVJFRkFD
VE9SLCBjb2xvcik7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19N
VUxUSVNBTVBMRU1BU0ssIDB4RkZGRkZGRkYpOwotCi0gICAgICAgICAgICBmb3IoaW50IGkgPSAw
OyBpIDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoaSwgMSk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGhyID0gbURldmljZS0+RW5kU3RhdGVCbG9jaygmbU1hc2tlZENs
ZWFyU2F2ZWRTdGF0ZSk7Ci0gICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBociA9
PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIEFTU0VSVChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlICE9IE5VTEwpOwot
Ci0gICAgICAgIGlmIChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlICE9IE5VTEwpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGhyID0gbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZS0+Q2FwdHVyZSgpOwotICAg
ICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgICAgICB9Ci0KLSAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRFRU5BQkxFLCBGQUxTRSk7Ci0gICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pGVU5DLCBEM0RDTVBfQUxXQVlTKTsKLSAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRkFMU0UpOwotICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgRDNEQ1VMTF9OT05F
KTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfRklMTE1PREUsIEQzREZJ
TExfU09MSUQpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQVRF
U1RFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
QUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOwotCi0gICAgICAgIGlmIChjbGVhclBhcmFtcy5t
YXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRDb2xvck1hc2soY2xlYXJQYXJh
bXMuY29sb3JNYXNrUmVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tHcmVlbiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2xlYXJQYXJhbXMuY29sb3JNYXNrQmx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrQWxw
aGEpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIDApOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKHN0ZW5jaWxVbm1hc2tlZCAhPSAweDAgJiYgKGNsZWFyUGFyYW1z
Lm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBUUlVFKTsKLSAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1RXT1NJREVEU1RFTkNJTE1PREUs
IEZBTFNFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5D
SUxGVU5DLCBEM0RDTVBfQUxXQVlTKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1NURU5DSUxSRUYsIHN0ZW5jaWwpOwotICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFdSSVRFTUFTSywgY2xlYXJQYXJhbXMuc3RlbmNpbFdy
aXRlTWFzayk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVO
Q0lMRkFJTCwgRDNEU1RFTkNJTE9QX1JFUExBQ0UpOwotICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFpGQUlMLCBEM0RTVEVOQ0lMT1BfUkVQTEFDRSk7Ci0g
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMUEFTUywgRDNE
U1RFTkNJTE9QX1JFUExBQ0UpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewot
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwg
RkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXIoTlVM
TCk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlcihOVUxMKTsKLSAgICAgICAgbURl
dmljZS0+U2V0RlZGKEQzREZWRl9YWVpSSFcpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOwotICAgICAgICBtRGV2
aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JPUCwgRDNEVE9QX1NFTEVD
VEFSRzEpOwotICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1Nf
Q09MT1JBUkcxLCBEM0RUQV9URkFDVE9SKTsKLSAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0
YWdlU3RhdGUoMCwgRDNEVFNTX0FMUEhBT1AsIEQzRFRPUF9TRUxFQ1RBUkcxKTsKLSAgICAgICAg
bURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0FMUEhBQVJHMSwgRDNEVEFf
VEZBQ1RPUik7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1RFWFRVUkVG
QUNUT1IsIGNvbG9yKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfTVVM
VElTQU1QTEVNQVNLLCAweEZGRkZGRkZGKTsKLQotICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwg
Z2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2
aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKGksIDEpOwotICAgICAgICB9Ci0KLSAgICAgICAgZmxv
YXQgcXVhZFs0XVs0XTsgICAvLyBBIHF1YWRyaWxhdGVyYWwgY292ZXJpbmcgdGhlIHRhcmdldCwg
YWxpZ25lZCB0byBtYXRjaCB0aGUgZWRnZXMKLSAgICAgICAgcXVhZFswXVswXSA9IC0wLjVmOwot
ICAgICAgICBxdWFkWzBdWzFdID0gbVJlbmRlclRhcmdldERlc2MuaGVpZ2h0IC0gMC41ZjsKLSAg
ICAgICAgcXVhZFswXVsyXSA9IDAuMGY7Ci0gICAgICAgIHF1YWRbMF1bM10gPSAxLjBmOwotCi0g
ICAgICAgIHF1YWRbMV1bMF0gPSBtUmVuZGVyVGFyZ2V0RGVzYy53aWR0aCAtIDAuNWY7Ci0gICAg
ICAgIHF1YWRbMV1bMV0gPSBtUmVuZGVyVGFyZ2V0RGVzYy5oZWlnaHQgLSAwLjVmOwotICAgICAg
ICBxdWFkWzFdWzJdID0gMC4wZjsKLSAgICAgICAgcXVhZFsxXVszXSA9IDEuMGY7Ci0KLSAgICAg
ICAgcXVhZFsyXVswXSA9IC0wLjVmOwotICAgICAgICBxdWFkWzJdWzFdID0gLTAuNWY7Ci0gICAg
ICAgIHF1YWRbMl1bMl0gPSAwLjBmOwotICAgICAgICBxdWFkWzJdWzNdID0gMS4wZjsKLQotICAg
ICAgICBxdWFkWzNdWzBdID0gbVJlbmRlclRhcmdldERlc2Mud2lkdGggLSAwLjVmOwotICAgICAg
ICBxdWFkWzNdWzFdID0gLTAuNWY7Ci0gICAgICAgIHF1YWRbM11bMl0gPSAwLjBmOwotICAgICAg
ICBxdWFkWzNdWzNdID0gMS4wZjsKLQotICAgICAgICBzdGFydFNjZW5lKCk7Ci0gICAgICAgIG1E
ZXZpY2UtPkRyYXdQcmltaXRpdmVVUChEM0RQVF9UUklBTkdMRVNUUklQLCAyLCBxdWFkLCBzaXpl
b2YoZmxvYXRbNF0pKTsKLQotICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0RFUFRI
X0JVRkZFUl9CSVQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1pFTkFCTEUsIFRSVUUpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfWldSSVRFRU5BQkxFLCBUUlVFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPkNs
ZWFyKDAsIE5VTEwsIEQzRENMRUFSX1pCVUZGRVIsIGNvbG9yLCBkZXB0aCwgc3RlbmNpbCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAobU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSAhPSBOVUxMKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlLT5BcHBseSgpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKGNsZWFyUGFyYW1zLm1hc2spCi0gICAgewot
ICAgICAgICBEV09SRCBkeENsZWFyRmxhZ3MgPSAwOwotICAgICAgICBpZiAoY2xlYXJQYXJhbXMu
bWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGR4Q2xl
YXJGbGFncyB8PSBEM0RDTEVBUl9UQVJHRVQ7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNsZWFy
UGFyYW1zLm1hc2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBkeENsZWFyRmxhZ3MgfD0gRDNEQ0xFQVJfWkJVRkZFUjsKLSAgICAgICAgfQotICAgICAgICBp
ZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkKLSAgICAgICAgewot
ICAgICAgICAgICAgZHhDbGVhckZsYWdzIHw9IEQzRENMRUFSX1NURU5DSUw7Ci0gICAgICAgIH0K
LQotICAgICAgICBtRGV2aWNlLT5DbGVhcigwLCBOVUxMLCBkeENsZWFyRmxhZ3MsIGNvbG9yLCBk
ZXB0aCwgc3RlbmNpbCk7Ci0gICAgfQotfQotCi12b2lkIFJlbmRlcmVyOTo6bWFya0FsbFN0YXRl
RGlydHkoKQotewotICAgIG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsID0gMDsKLSAgICBtQXBw
bGllZERlcHRoYnVmZmVyU2VyaWFsID0gMDsKLSAgICBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJp
YWwgPSAwOwotICAgIG1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCA9IGZhbHNlOwotICAgIG1SZW5k
ZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAgIG1Gb3JjZVNldERlcHRoU3Rl
bmNpbFN0YXRlID0gdHJ1ZTsKLSAgICBtRm9yY2VTZXRSYXN0ZXJTdGF0ZSA9IHRydWU7Ci0gICAg
bUZvcmNlU2V0U2Npc3NvciA9IHRydWU7Ci0gICAgbUZvcmNlU2V0Vmlld3BvcnQgPSB0cnVlOwot
ICAgIG1Gb3JjZVNldEJsZW5kU3RhdGUgPSB0cnVlOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VO
SVRTOyBpKyspCi0gICAgewotICAgICAgICBtRm9yY2VTZXRWZXJ0ZXhTYW1wbGVyU3RhdGVzW2ld
ID0gdHJ1ZTsKLSAgICAgICAgbUN1clZlcnRleFRleHR1cmVTZXJpYWxzW2ldID0gMDsKLSAgICB9
Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1RFWFRVUkVfSU1BR0Vf
VU5JVFM7IGkrKykKLSAgICB7Ci0gICAgICAgIG1Gb3JjZVNldFBpeGVsU2FtcGxlclN0YXRlc1tp
XSA9IHRydWU7Ci0gICAgICAgIG1DdXJQaXhlbFRleHR1cmVTZXJpYWxzW2ldID0gMDsKLSAgICB9
Ci0KLSAgICBtQXBwbGllZElCU2VyaWFsID0gMDsKLSAgICBtQXBwbGllZFByb2dyYW1CaW5hcnlT
ZXJpYWwgPSAwOwotICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOwotCi0gICAgbVZlcnRleERl
Y2xhcmF0aW9uQ2FjaGUubWFya1N0YXRlRGlydHkoKTsKLX0KLQotdm9pZCBSZW5kZXJlcjk6OnJl
bGVhc2VEZXZpY2VSZXNvdXJjZXMoKQotewotICAgIHdoaWxlICghbUV2ZW50UXVlcnlQb29sLmVt
cHR5KCkpCi0gICAgewotICAgICAgICBtRXZlbnRRdWVyeVBvb2wuYmFjaygpLT5SZWxlYXNlKCk7
Ci0gICAgICAgIG1FdmVudFF1ZXJ5UG9vbC5wb3BfYmFjaygpOwotICAgIH0KLQotICAgIGlmICht
TWFza2VkQ2xlYXJTYXZlZFN0YXRlKQotICAgIHsKLSAgICAgICAgbU1hc2tlZENsZWFyU2F2ZWRT
dGF0ZS0+UmVsZWFzZSgpOwotICAgICAgICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlID0gTlVMTDsK
LSAgICB9Ci0KLSAgICBtVmVydGV4U2hhZGVyQ2FjaGUuY2xlYXIoKTsKLSAgICBtUGl4ZWxTaGFk
ZXJDYWNoZS5jbGVhcigpOwotCi0gICAgZGVsZXRlIG1CbGl0OwotICAgIG1CbGl0ID0gTlVMTDsK
LQotICAgIGRlbGV0ZSBtVmVydGV4RGF0YU1hbmFnZXI7Ci0gICAgbVZlcnRleERhdGFNYW5hZ2Vy
ID0gTlVMTDsKLQotICAgIGRlbGV0ZSBtSW5kZXhEYXRhTWFuYWdlcjsKLSAgICBtSW5kZXhEYXRh
TWFuYWdlciA9IE5VTEw7Ci0KLSAgICBkZWxldGUgbUxpbmVMb29wSUI7Ci0gICAgbUxpbmVMb29w
SUIgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fTlVMTF9DT0xPUkJVRkZF
Ul9DQUNIRV9FTlRSSUVTOyBpKyspCi0gICAgewotICAgICAgICBkZWxldGUgbU51bGxDb2xvcmJ1
ZmZlckNhY2hlW2ldLmJ1ZmZlcjsKLSAgICAgICAgbU51bGxDb2xvcmJ1ZmZlckNhY2hlW2ldLmJ1
ZmZlciA9IE5VTEw7Ci0gICAgfQotCi19Ci0KLQotdm9pZCBSZW5kZXJlcjk6Om5vdGlmeURldmlj
ZUxvc3QoKQotewotICAgIG1EZXZpY2VMb3N0ID0gdHJ1ZTsKLSAgICBtRGlzcGxheS0+bm90aWZ5
RGV2aWNlTG9zdCgpOwotfQotCi1ib29sIFJlbmRlcmVyOTo6aXNEZXZpY2VMb3N0KCkKLXsKLSAg
ICByZXR1cm4gbURldmljZUxvc3Q7Ci19Ci0KLS8vIHNldCBub3RpZnkgdG8gdHJ1ZSB0byBicm9h
ZGNhc3QgYSBtZXNzYWdlIHRvIGFsbCBjb250ZXh0cyBvZiB0aGUgZGV2aWNlIGxvc3MKLWJvb2wg
UmVuZGVyZXI5Ojp0ZXN0RGV2aWNlTG9zdChib29sIG5vdGlmeSkKLXsKLSAgICBIUkVTVUxUIHN0
YXR1cyA9IFNfT0s7Ci0KLSAgICBpZiAobURldmljZUV4KQotICAgIHsKLSAgICAgICAgc3RhdHVz
ID0gbURldmljZUV4LT5DaGVja0RldmljZVN0YXRlKE5VTEwpOwotICAgIH0KLSAgICBlbHNlIGlm
IChtRGV2aWNlKQotICAgIHsKLSAgICAgICAgc3RhdHVzID0gbURldmljZS0+VGVzdENvb3BlcmF0
aXZlTGV2ZWwoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgLy8gTm8gZGV2aWNl
IHlldCwgc28gbm8gcmVzZXQgcmVxdWlyZWQKLSAgICB9Ci0KLSAgICBib29sIGlzTG9zdCA9IEZB
SUxFRChzdGF0dXMpIHx8IGQzZDk6OmlzRGV2aWNlTG9zdEVycm9yKHN0YXR1cyk7Ci0KLSAgICBp
ZiAoaXNMb3N0KQotICAgIHsKLSAgICAgICAgLy8gZW5zdXJlIHdlIG5vdGUgdGhlIGRldmljZSBs
b3NzIC0tCi0gICAgICAgIC8vIHdlJ2xsIHByb2JhYmx5IGdldCB0aGlzIGRvbmUgYWdhaW4gYnkg
bm90aWZ5RGV2aWNlTG9zdAotICAgICAgICAvLyBidXQgYmVzdCB0byByZW1lbWJlciBpdCEKLSAg
ICAgICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IHdhbnQgdG8gY2xlYXIgdGhlIGRldmljZSBsb3Nz
IHN0YXR1cyBoZXJlCi0gICAgICAgIC8vIC0tIHRoaXMgbmVlZHMgdG8gYmUgZG9uZSBieSByZXNl
dERldmljZQotICAgICAgICBtRGV2aWNlTG9zdCA9IHRydWU7Ci0gICAgICAgIGlmIChub3RpZnkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG5vdGlmeURldmljZUxvc3QoKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiBpc0xvc3Q7Ci19Ci0KLWJvb2wgUmVuZGVyZXI5Ojp0ZXN0RGV2
aWNlUmVzZXR0YWJsZSgpCi17Ci0gICAgSFJFU1VMVCBzdGF0dXMgPSBEM0RfT0s7Ci0KLSAgICBp
ZiAobURldmljZUV4KQotICAgIHsKLSAgICAgICAgc3RhdHVzID0gbURldmljZUV4LT5DaGVja0Rl
dmljZVN0YXRlKE5VTEwpOwotICAgIH0KLSAgICBlbHNlIGlmIChtRGV2aWNlKQotICAgIHsKLSAg
ICAgICAgc3RhdHVzID0gbURldmljZS0+VGVzdENvb3BlcmF0aXZlTGV2ZWwoKTsKLSAgICB9Ci0K
LSAgICAvLyBPbiBEM0Q5RXgsIERFVklDRUxPU1QgcmVwcmVzZW50cyBhIGh1bmcgZGV2aWNlIHRo
YXQgbmVlZHMgdG8gYmUgcmVzdGFydGVkCi0gICAgLy8gREVWSUNFUkVNT1ZFRCBpbmRpY2F0ZXMg
dGhlIGRldmljZSBoYXMgYmVlbiBzdG9wcGVkIGFuZCBtdXN0IGJlIHJlY3JlYXRlZAotICAgIHN3
aXRjaCAoc3RhdHVzKQotICAgIHsKLSAgICAgIGNhc2UgRDNERVJSX0RFVklDRU5PVFJFU0VUOgot
ICAgICAgY2FzZSBEM0RFUlJfREVWSUNFSFVORzoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICBjYXNlIEQzREVSUl9ERVZJQ0VMT1NUOgotICAgICAgICByZXR1cm4gKG1EZXZpY2VFeCAhPSBO
VUxMKTsKLSAgICAgIGNhc2UgRDNERVJSX0RFVklDRVJFTU9WRUQ6Ci0gICAgICAgIFVOSU1QTEVN
RU5URUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJlcjk6OnJlc2V0RGV2aWNlKCkK
LXsKLSAgICByZWxlYXNlRGV2aWNlUmVzb3VyY2VzKCk7Ci0KLSAgICBEM0RQUkVTRU5UX1BBUkFN
RVRFUlMgcHJlc2VudFBhcmFtZXRlcnMgPSBnZXREZWZhdWx0UHJlc2VudFBhcmFtZXRlcnMoKTsK
LQotICAgIEhSRVNVTFQgcmVzdWx0ID0gRDNEX09LOwotICAgIGJvb2wgbG9zdCA9IHRlc3REZXZp
Y2VMb3N0KGZhbHNlKTsKLSAgICBpbnQgYXR0ZW1wdHMgPSAzOwotCi0gICAgd2hpbGUgKGxvc3Qg
JiYgYXR0ZW1wdHMgPiAwKQotICAgIHsKLSAgICAgICAgaWYgKG1EZXZpY2VFeCkKLSAgICAgICAg
ewotICAgICAgICAgICAgU2xlZXAoNTAwKTsgICAvLyBHaXZlIHRoZSBncmFwaGljcyBkcml2ZXIg
c29tZSBDUFUgdGltZQotICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZUV4LT5SZXNldEV4KCZw
cmVzZW50UGFyYW1ldGVycywgTlVMTCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5UZXN0Q29vcGVyYXRpdmVMZXZlbCgp
OwotICAgICAgICAgICAgd2hpbGUgKHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTE9TVCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBTbGVlcCgxMDApOyAgIC8vIEdpdmUgdGhlIGdyYXBo
aWNzIGRyaXZlciBzb21lIENQVSB0aW1lCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbURldmlj
ZS0+VGVzdENvb3BlcmF0aXZlTGV2ZWwoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTk9UUkVTRVQpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+UmVzZXQoJnByZXNlbnRQYXJhbWV0ZXJzKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGxvc3QgPSB0ZXN0RGV2aWNlTG9z
dChmYWxzZSk7Ci0gICAgICAgIGF0dGVtcHRzIC0tOwotICAgIH0KLQotICAgIGlmIChGQUlMRUQo
cmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEVSUigiUmVzZXQvUmVzZXRFeCBmYWlsZWQgbXVsdGlw
bGUgdGltZXM6IDB4JTA4WCIsIHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICAvLyByZXNldCBkZXZpY2UgZGVmYXVsdHMKLSAgICBpbml0aWFsaXplRGV2aWNlKCk7
Ci0gICAgbURldmljZUxvc3QgPSBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1EV09S
RCBSZW5kZXJlcjk6OmdldEFkYXB0ZXJWZW5kb3IoKSBjb25zdAotewotICAgIHJldHVybiBtQWRh
cHRlcklkZW50aWZpZXIuVmVuZG9ySWQ7Ci19Ci0KLXN0ZDo6c3RyaW5nIFJlbmRlcmVyOTo6Z2V0
UmVuZGVyZXJEZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgc3RkOjpvc3RyaW5nc3RyZWFtIHJl
bmRlcmVyU3RyaW5nOwotCi0gICAgcmVuZGVyZXJTdHJpbmcgPDwgbUFkYXB0ZXJJZGVudGlmaWVy
LkRlc2NyaXB0aW9uOwotICAgIGlmIChnZXRTaGFyZUhhbmRsZVN1cHBvcnQoKSkKLSAgICB7Ci0g
ICAgICAgIHJlbmRlcmVyU3RyaW5nIDw8ICIgRGlyZWN0M0Q5RXgiOwotICAgIH0KLSAgICBlbHNl
Ci0gICAgewotICAgICAgICByZW5kZXJlclN0cmluZyA8PCAiIERpcmVjdDNEOSI7Ci0gICAgfQot
Ci0gICAgcmVuZGVyZXJTdHJpbmcgPDwgIiB2c18iIDw8IEQzRFNIQURFUl9WRVJTSU9OX01BSk9S
KG1EZXZpY2VDYXBzLlZlcnRleFNoYWRlclZlcnNpb24pIDw8ICJfIiA8PCBEM0RTSEFERVJfVkVS
U0lPTl9NSU5PUihtRGV2aWNlQ2Fwcy5WZXJ0ZXhTaGFkZXJWZXJzaW9uKTsKLSAgICByZW5kZXJl
clN0cmluZyA8PCAiIHBzXyIgPDwgRDNEU0hBREVSX1ZFUlNJT05fTUFKT1IobURldmljZUNhcHMu
UGl4ZWxTaGFkZXJWZXJzaW9uKSA8PCAiXyIgPDwgRDNEU0hBREVSX1ZFUlNJT05fTUlOT1IobURl
dmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJzaW9uKTsKLQotICAgIHJldHVybiByZW5kZXJlclN0cmlu
Zy5zdHIoKTsKLX0KLQotR1VJRCBSZW5kZXJlcjk6OmdldEFkYXB0ZXJJZGVudGlmaWVyKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbUFkYXB0ZXJJZGVudGlmaWVyLkRldmljZUlkZW50aWZpZXI7Ci19
Ci0KLXZvaWQgUmVuZGVyZXI5OjpnZXRNdWx0aVNhbXBsZVN1cHBvcnQoRDNERk9STUFUIGZvcm1h
dCwgYm9vbCAqbXVsdGlTYW1wbGVBcnJheSkKLXsKLSAgICBmb3IgKGludCBtdWx0aVNhbXBsZUlu
ZGV4ID0gMDsgbXVsdGlTYW1wbGVJbmRleCA8PSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTOyBt
dWx0aVNhbXBsZUluZGV4KyspCi0gICAgewotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EM2Q5
LT5DaGVja0RldmljZU11bHRpU2FtcGxlVHlwZShtQWRhcHRlciwgbURldmljZVR5cGUsIGZvcm1h
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVFJVRSwgKEQzRE1VTFRJU0FNUExFX1RZUEUpbXVsdGlTYW1wbGVJbmRleCwgTlVMTCk7
Ci0KLSAgICAgICAgbXVsdGlTYW1wbGVBcnJheVttdWx0aVNhbXBsZUluZGV4XSA9IFNVQ0NFRURF
RChyZXN1bHQpOwotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJlcjk6OmdldEJHUkFUZXh0dXJlU3Vw
cG9ydCgpIGNvbnN0Ci17Ci0gICAgLy8gRGlyZWN0WCA5IGFsd2F5cyBzdXBwb3J0cyBCR1JBCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUmVuZGVyZXI5OjpnZXREWFQxVGV4dHVyZVN1cHBv
cnQoKQotewotICAgIHJldHVybiBtRFhUMVRleHR1cmVTdXBwb3J0OwotfQotCi1ib29sIFJlbmRl
cmVyOTo6Z2V0RFhUM1RleHR1cmVTdXBwb3J0KCkKLXsKLSAgICByZXR1cm4gbURYVDNUZXh0dXJl
U3VwcG9ydDsKLX0KLQotYm9vbCBSZW5kZXJlcjk6OmdldERYVDVUZXh0dXJlU3VwcG9ydCgpCi17
Ci0gICAgcmV0dXJuIG1EWFQ1VGV4dHVyZVN1cHBvcnQ7Ci19Ci0KLWJvb2wgUmVuZGVyZXI5Ojpn
ZXREZXB0aFRleHR1cmVTdXBwb3J0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbURlcHRoVGV4dHVy
ZVN1cHBvcnQ7Ci19Ci0KLWJvb2wgUmVuZGVyZXI5OjpnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQo
Ym9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKQotewotICAgICpmaWx0ZXJpbmcgPSBt
RmxvYXQzMkZpbHRlclN1cHBvcnQ7Ci0gICAgKnJlbmRlcmFibGUgPSBtRmxvYXQzMlJlbmRlclN1
cHBvcnQ7Ci0gICAgcmV0dXJuIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQ7Ci19Ci0KLWJvb2wgUmVu
ZGVyZXI5OjpnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpy
ZW5kZXJhYmxlKQotewotICAgICpmaWx0ZXJpbmcgPSBtRmxvYXQxNkZpbHRlclN1cHBvcnQ7Ci0g
ICAgKnJlbmRlcmFibGUgPSBtRmxvYXQxNlJlbmRlclN1cHBvcnQ7Ci0gICAgcmV0dXJuIG1GbG9h
dDE2VGV4dHVyZVN1cHBvcnQ7Ci19Ci0KLWJvb2wgUmVuZGVyZXI5OjpnZXRMdW1pbmFuY2VUZXh0
dXJlU3VwcG9ydCgpCi17Ci0gICAgcmV0dXJuIG1MdW1pbmFuY2VUZXh0dXJlU3VwcG9ydDsKLX0K
LQotYm9vbCBSZW5kZXJlcjk6OmdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKQotewot
ICAgIHJldHVybiBtTHVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydDsKLX0KLQotYm9vbCBSZW5k
ZXJlcjk6OmdldFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5U3VwcG9ydCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1TdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5OwotfQotCi1mbG9hdCBSZW5k
ZXJlcjk6OmdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkgY29uc3QKLXsKLSAgICBpZiAobVN1cHBv
cnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHkpCi0gICAgewotICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG1EZXZpY2VDYXBzLk1heEFuaXNvdHJvcHkpOwotICAgIH0KLSAgICByZXR1
cm4gMS4wZjsKLX0KLQotYm9vbCBSZW5kZXJlcjk6OmdldEV2ZW50UXVlcnlTdXBwb3J0KCkKLXsK
LSAgICByZXR1cm4gbUV2ZW50UXVlcnlTdXBwb3J0OwotfQotCi11bnNpZ25lZCBpbnQgUmVuZGVy
ZXI5OjpnZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0Ci17Ci0gICAgTUVUQV9B
U1NFUlQoTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGX1NNMyA8PSBnbDo6SU1QTEVNRU5UQVRJ
T05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKLSAgICByZXR1cm4gbVZlcnRleFRl
eHR1cmVTdXBwb3J0ID8gTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGX1NNMyA6IDA7Ci19Ci0K
LXVuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldE1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMo
KSBjb25zdAotewotICAgIHJldHVybiBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKyBnZXRN
YXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpOwotfQotCi11bnNpZ25lZCBpbnQgUmVuZGVyZXI5
OjpnZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
MjsgICAvLyBkeF9WaWV3QWRqdXN0IGFuZCBkeF9EZXB0aFJhbmdlLgotfQotCi11bnNpZ25lZCBp
bnQgUmVuZGVyZXI5OjpnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdAot
ewotICAgIHJldHVybiAzOyAgIC8vIGR4X1ZpZXdDb29yZHMsIGR4X0RlcHRoRnJvbnQgYW5kIGR4
X0RlcHRoUmFuZ2UuCi19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldE1heFZlcnRleFVu
aWZvcm1WZWN0b3JzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gTUFYX1ZFUlRFWF9DT05TVEFOVF9W
RUNUT1JTX0QzRDkgLSBnZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1WZWN0b3JzKCk7Ci19Ci0KLXVu
c2lnbmVkIGludCBSZW5kZXJlcjk6OmdldE1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25z
dAotewotICAgIGNvbnN0IGludCBtYXhQaXhlbENvbnN0YW50VmVjdG9ycyA9IChnZXRNYWpvclNo
YWRlck1vZGVsKCkgPj0gMykgPyBNQVhfUElYRUxfQ09OU1RBTlRfVkVDVE9SU19TTTMgOiBNQVhf
UElYRUxfQ09OU1RBTlRfVkVDVE9SU19TTTI7Ci0KLSAgICByZXR1cm4gbWF4UGl4ZWxDb25zdGFu
dFZlY3RvcnMgLSBnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKTsKLX0KLQotdW5z
aWduZWQgaW50IFJlbmRlcmVyOTo6Z2V0TWF4VmFyeWluZ1ZlY3RvcnMoKSBjb25zdAotewotICAg
IHJldHVybiAoZ2V0TWFqb3JTaGFkZXJNb2RlbCgpID49IDMpID8gTUFYX1ZBUllJTkdfVkVDVE9S
U19TTTMgOiBNQVhfVkFSWUlOR19WRUNUT1JTX1NNMjsKLX0KLQotYm9vbCBSZW5kZXJlcjk6Omdl
dE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRz
Tm9uUG93ZXIyVGV4dHVyZXM7Ci19Ci0KLWJvb2wgUmVuZGVyZXI5OjpnZXRPY2NsdXNpb25RdWVy
eVN1cHBvcnQoKSBjb25zdAotewotICAgIHJldHVybiBtT2NjbHVzaW9uUXVlcnlTdXBwb3J0Owot
fQotCi1ib29sIFJlbmRlcmVyOTo6Z2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdAotewotICAg
IHJldHVybiBtRGV2aWNlQ2Fwcy5QaXhlbFNoYWRlclZlcnNpb24gPj0gRDNEUFNfVkVSU0lPTigz
LCAwKTsKLX0KLQotYm9vbCBSZW5kZXJlcjk6OmdldFNoYXJlSGFuZGxlU3VwcG9ydCgpIGNvbnN0
Ci17Ci0gICAgLy8gUElYIGRvZXNuJ3Qgc2VlbSB0byBzdXBwb3J0IHVzaW5nIHNoYXJlIGhhbmRs
ZXMsIHNvIGRpc2FibGUgdGhlbS4KLSAgICByZXR1cm4gKG1EM2Q5RXggIT0gTlVMTCkgJiYgIWds
OjpwZXJmQWN0aXZlKCk7Ci19Ci0KLWJvb2wgUmVuZGVyZXI5OjpnZXREZXJpdmF0aXZlSW5zdHJ1
Y3Rpb25TdXBwb3J0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gKG1EZXZpY2VDYXBzLlBTMjBDYXBz
LkNhcHMgJiBEM0RQUzIwQ0FQU19HUkFESUVOVElOU1RSVUNUSU9OUykgIT0gMDsKLX0KLQotYm9v
bCBSZW5kZXJlcjk6OmdldFBvc3RTdWJCdWZmZXJTdXBwb3J0KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotaW50IFJlbmRlcmVyOTo6Z2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIEQzRFNIQURFUl9WRVJTSU9OX01BSk9SKG1EZXZpY2VDYXBzLlBpeGVs
U2hhZGVyVmVyc2lvbik7Ci19Ci0KLWZsb2F0IFJlbmRlcmVyOTo6Z2V0TWF4UG9pbnRTaXplKCkg
Y29uc3QKLXsKLSAgICAvLyBQb2ludCBzaXplIGNsYW1wZWQgYXQgMS4wZiBmb3IgU00yCi0gICAg
cmV0dXJuIGdldE1ham9yU2hhZGVyTW9kZWwoKSA9PSAzID8gbURldmljZUNhcHMuTWF4UG9pbnRT
aXplIDogMS4wZjsKLX0KLQotaW50IFJlbmRlcmVyOTo6Z2V0TWF4Vmlld3BvcnREaW1lbnNpb24o
KSBjb25zdAotewotICAgIGludCBtYXhUZXh0dXJlRGltZW5zaW9uID0gc3RkOjptaW4oc3RkOjpt
aW4oZ2V0TWF4VGV4dHVyZVdpZHRoKCksIGdldE1heFRleHR1cmVIZWlnaHQoKSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KWdsOjpJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9TSVpFKTsKLSAgICByZXR1cm4gbWF4VGV4dHVyZURpbWVuc2lvbjsKLX0KLQot
aW50IFJlbmRlcmVyOTo6Z2V0TWF4VGV4dHVyZVdpZHRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
KGludCltRGV2aWNlQ2Fwcy5NYXhUZXh0dXJlV2lkdGg7Ci19Ci0KLWludCBSZW5kZXJlcjk6Omdl
dE1heFRleHR1cmVIZWlnaHQoKSBjb25zdAotewotICAgIHJldHVybiAoaW50KW1EZXZpY2VDYXBz
Lk1heFRleHR1cmVIZWlnaHQ7Ci19Ci0KLWJvb2wgUmVuZGVyZXI5OjpnZXQzMkJpdEluZGV4U3Vw
cG9ydCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EZXZpY2VDYXBzLk1heFZlcnRleEluZGV4ID49
ICgxIDw8IDE2KTsKLX0KLQotRFdPUkQgUmVuZGVyZXI5OjpnZXRDYXBzRGVjbFR5cGVzKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbURldmljZUNhcHMuRGVjbFR5cGVzOwotfQotCi1pbnQgUmVuZGVy
ZXI5OjpnZXRNaW5Td2FwSW50ZXJ2YWwoKSBjb25zdAotewotICAgIHJldHVybiBtTWluU3dhcElu
dGVydmFsOwotfQotCi1pbnQgUmVuZGVyZXI5OjpnZXRNYXhTd2FwSW50ZXJ2YWwoKSBjb25zdAot
ewotICAgIHJldHVybiBtTWF4U3dhcEludGVydmFsOwotfQotCi1pbnQgUmVuZGVyZXI5OjpnZXRN
YXhTdXBwb3J0ZWRTYW1wbGVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbU1heFN1cHBvcnRlZFNh
bXBsZXM7Ci19Ci0KLWludCBSZW5kZXJlcjk6OmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKEQz
REZPUk1BVCBmb3JtYXQsIGludCByZXF1ZXN0ZWQpIGNvbnN0Ci17Ci0gICAgaWYgKHJlcXVlc3Rl
ZCA9PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlcXVlc3RlZDsKLSAgICB9Ci0KLSAgICBz
dGQ6Om1hcDxEM0RGT1JNQVQsIGJvb2wgKj46OmNvbnN0X2l0ZXJhdG9yIGl0ciA9IG1NdWx0aVNh
bXBsZVN1cHBvcnQuZmluZChmb3JtYXQpOwotICAgIGlmIChpdHIgPT0gbU11bHRpU2FtcGxlU3Vw
cG9ydC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX1VOS05PV04p
Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAg
IGZvciAoaW50IGkgPSByZXF1ZXN0ZWQ7IGkgPD0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsg
KytpKQotICAgIHsKLSAgICAgICAgaWYgKGl0ci0+c2Vjb25kW2ldICYmIGkgIT0gRDNETVVMVElT
QU1QTEVfTk9OTUFTS0FCTEUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIC0xOwotfQotCi11bnNpZ25lZCBpbnQgUmVuZGVy
ZXI5OjpnZXRNYXhSZW5kZXJUYXJnZXRzKCkgY29uc3QKLXsKLSAgICAvLyB3ZSBkbyBub3Qgc3Vw
cG9ydCBNUlQgaW4gZDNkOQotICAgIHJldHVybiAxOwotfQotCi1EM0RGT1JNQVQgUmVuZGVyZXI5
OjpDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KEdMaW50IGludGVybmFsZm9ybWF0KQotewot
ICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBHTF9ERVBUSF9D
T01QT05FTlQxNjoKLSAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOgotICAgICAg
Y2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKLSAgICAgICAgcmV0dXJuIEQzREZNVF9JTlRa
OwotICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgICAgY2Fz
ZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgcmV0dXJuIEQzREZN
VF9EWFQxOwotICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgot
ICAgICAgICByZXR1cm4gRDNERk1UX0RYVDM7Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgIHJldHVybiBEM0RGTVRfRFhUNTsKLSAgICAgIGNh
c2UgR0xfUkdCQTMyRl9FWFQ6Ci0gICAgICBjYXNlIEdMX1JHQjMyRl9FWFQ6Ci0gICAgICBjYXNl
IEdMX0FMUEhBMzJGX0VYVDoKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMzJGX0VYVDoKLSAgICAg
IGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVDoKLSAgICAgICAgcmV0dXJuIEQzREZNVF9B
MzJCMzJHMzJSMzJGOwotICAgICAgY2FzZSBHTF9SR0JBMTZGX0VYVDoKLSAgICAgIGNhc2UgR0xf
UkdCMTZGX0VYVDoKLSAgICAgIGNhc2UgR0xfQUxQSEExNkZfRVhUOgotICAgICAgY2FzZSBHTF9M
VU1JTkFOQ0UxNkZfRVhUOgotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhUOgot
ICAgICAgICByZXR1cm4gRDNERk1UX0ExNkIxNkcxNlIxNkY7Ci0gICAgICBjYXNlIEdMX0xVTUlO
QU5DRThfRVhUOgotICAgICAgICBpZiAoZ2V0THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9MODsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOF9BTFBIQThfRVhUOgotICAgICAgICBp
ZiAoZ2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gRDNERk1UX0E4TDg7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX1JHQjhfT0VTOgotICAgICAgY2FzZSBHTF9SR0I1NjU6Ci0gICAgICAgIHJldHVy
biBEM0RGTVRfWDhSOEc4Qjg7Ci0gICAgfQotCi0gICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsK
LX0KLQotYm9vbCBSZW5kZXJlcjk6OmNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZTJEICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzb3VyY2UpCi17Ci0g
ICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLQotICAgIGlmIChzb3VyY2UgJiYgZGVzdCkKLSAgICB7
Ci0gICAgICAgIFRleHR1cmVTdG9yYWdlOV8yRCAqc291cmNlOSA9IFRleHR1cmVTdG9yYWdlOV8y
RDo6bWFrZVRleHR1cmVTdG9yYWdlOV8yRChzb3VyY2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsK
LSAgICAgICAgVGV4dHVyZVN0b3JhZ2U5XzJEICpkZXN0OSA9IFRleHR1cmVTdG9yYWdlOV8yRDo6
bWFrZVRleHR1cmVTdG9yYWdlOV8yRChkZXN0LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0KLSAg
ICAgICAgaW50IGxldmVscyA9IHNvdXJjZTktPmxldmVsQ291bnQoKTsKLSAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBsZXZlbHM7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgSURpcmVj
dDNEU3VyZmFjZTkgKnNyY1N1cmYgPSBzb3VyY2U5LT5nZXRTdXJmYWNlTGV2ZWwoaSwgZmFsc2Up
OwotICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRzdFN1cmYgPSBkZXN0OS0+Z2V0U3Vy
ZmFjZUxldmVsKGksIGZhbHNlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmVzdWx0ID0g
Y29weVRvUmVuZGVyVGFyZ2V0KGRzdFN1cmYsIHNyY1N1cmYsIHNvdXJjZTktPmlzTWFuYWdlZCgp
KTsKLQotICAgICAgICAgICAgaWYgKHNyY1N1cmYpIHNyY1N1cmYtPlJlbGVhc2UoKTsKLSAgICAg
ICAgICAgIGlmIChkc3RTdXJmKSBkc3RTdXJmLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgICAgIGlm
ICghcmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgUmVuZGVyZXI5Ojpjb3B5VG9SZW5k
ZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpkZXN0LCBUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZUN1YmUgKnNvdXJjZSkKLXsKLSAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotCi0g
ICAgaWYgKHNvdXJjZSAmJiBkZXN0KQotICAgIHsKLSAgICAgICAgVGV4dHVyZVN0b3JhZ2U5X0N1
YmUgKnNvdXJjZTkgPSBUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlOV9D
dWJlKHNvdXJjZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwotICAgICAgICBUZXh0dXJlU3RvcmFn
ZTlfQ3ViZSAqZGVzdDkgPSBUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdl
OV9DdWJlKGRlc3QtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKLSAgICAgICAgaW50IGxldmVscyA9
IHNvdXJjZTktPmxldmVsQ291bnQoKTsKLSAgICAgICAgZm9yIChpbnQgZiA9IDA7IGYgPCA2OyBm
KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGV2ZWxzOyBp
KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnNy
Y1N1cmYgPSBzb3VyY2U5LT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1ggKyBmLCBpLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKmRzdFN1cmYgPSBkZXN0OS0+Z2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9YICsgZiwgaSwgdHJ1ZSk7Ci0KLSAgICAgICAgICAgICAgICByZXN1bHQgPSBj
b3B5VG9SZW5kZXJUYXJnZXQoZHN0U3VyZiwgc3JjU3VyZiwgc291cmNlOS0+aXNNYW5hZ2VkKCkp
OwotCi0gICAgICAgICAgICAgICAgaWYgKHNyY1N1cmYpIHNyY1N1cmYtPlJlbGVhc2UoKTsKLSAg
ICAgICAgICAgICAgICBpZiAoZHN0U3VyZikgZHN0U3VyZi0+UmVsZWFzZSgpOwotCi0gICAgICAg
ICAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLUQzRFBPT0wgUmVuZGVyZXI5OjpnZXRCdWZmZXJQb29sKERXT1JEIHVzYWdlKSBjb25zdAot
ewotICAgIGlmIChtRDNkOUV4ICE9IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gRDNEUE9P
TF9ERUZBVUxUOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAoISh1c2FnZSAm
IEQzRFVTQUdFX0RZTkFNSUMpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRDNEUE9P
TF9NQU5BR0VEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIEQzRFBPT0xfREVGQVVM
VDsKLX0KLQotYm9vbCBSZW5kZXJlcjk6OmNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1l
YnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1h
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpCi17Ci0g
ICAgUkVDVCByZWN0OwotICAgIHJlY3QubGVmdCA9IHNvdXJjZVJlY3QueDsKLSAgICByZWN0LnRv
cCA9IHNvdXJjZVJlY3QueTsKLSAgICByZWN0LnJpZ2h0ID0gc291cmNlUmVjdC54ICsgc291cmNl
UmVjdC53aWR0aDsKLSAgICByZWN0LmJvdHRvbSA9IHNvdXJjZVJlY3QueSArIHNvdXJjZVJlY3Qu
aGVpZ2h0OwotCi0gICAgcmV0dXJuIG1CbGl0LT5jb3B5KGZyYW1lYnVmZmVyLCByZWN0LCBkZXN0
Rm9ybWF0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBzdG9yYWdlLCBsZXZlbCk7Ci19Ci0KLWJvb2wgUmVu
ZGVyZXI5Ojpjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6
OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpCi17Ci0g
ICAgUkVDVCByZWN0OwotICAgIHJlY3QubGVmdCA9IHNvdXJjZVJlY3QueDsKLSAgICByZWN0LnRv
cCA9IHNvdXJjZVJlY3QueTsKLSAgICByZWN0LnJpZ2h0ID0gc291cmNlUmVjdC54ICsgc291cmNl
UmVjdC53aWR0aDsKLSAgICByZWN0LmJvdHRvbSA9IHNvdXJjZVJlY3QueSArIHNvdXJjZVJlY3Qu
aGVpZ2h0OwotCi0gICAgcmV0dXJuIG1CbGl0LT5jb3B5KGZyYW1lYnVmZmVyLCByZWN0LCBkZXN0
Rm9ybWF0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBzdG9yYWdlLCB0YXJnZXQsIGxldmVsKTsKLX0KLQot
Ym9vbCBSZW5kZXJlcjk6OmJsaXRSZWN0KGdsOjpGcmFtZWJ1ZmZlciAqcmVhZEZyYW1lYnVmZmVy
LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFkUmVjdCwgZ2w6OkZyYW1lYnVmZmVyICpkcmF3RnJh
bWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRyYXdSZWN0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0RGVwdGhTdGVuY2lsKQot
ewotICAgIGVuZFNjZW5lKCk7Ci0KLSAgICBpZiAoYmxpdFJlbmRlclRhcmdldCkKLSAgICB7Ci0g
ICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlYWRCdWZmZXIgPSByZWFkRnJhbWVidWZmZXItPmdl
dENvbG9yYnVmZmVyKDApOwotICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpkcmF3QnVmZmVyID0g
ZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigwKTsKLSAgICAgICAgUmVuZGVyVGFyZ2V0
OSAqcmVhZFJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgICAgIFJlbmRlclRhcmdldDkgKmRyYXdS
ZW5kZXJUYXJnZXQgPSBOVUxMOwotICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSogcmVhZFN1cmZh
Y2UgPSBOVUxMOwotICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSogZHJhd1N1cmZhY2UgPSBOVUxM
OwotCi0gICAgICAgIGlmIChyZWFkQnVmZmVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZWFk
UmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0OTo6bWFrZVJlbmRlclRhcmdldDkocmVhZEJ1ZmZl
ci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChkcmF3QnVmZmVy
KQotICAgICAgICB7Ci0gICAgICAgICAgICBkcmF3UmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0
OTo6bWFrZVJlbmRlclRhcmdldDkoZHJhd0J1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKHJlYWRSZW5kZXJUYXJnZXQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJlYWRTdXJmYWNlID0gcmVhZFJlbmRlclRhcmdldC0+Z2V0U3VyZmFjZSgpOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChkcmF3UmVuZGVyVGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBkcmF3U3VyZmFjZSA9IGRyYXdSZW5kZXJUYXJnZXQtPmdldFN1cmZhY2UoKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmICghcmVhZFN1cmZhY2UgfHwgIWRyYXdTdXJmYWNlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdl
dC4iKTsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFs
c2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgUkVDVCBzcmNSZWN0OwotICAgICAgICBzcmNSZWN0
LmxlZnQgPSByZWFkUmVjdC54OwotICAgICAgICBzcmNSZWN0LnJpZ2h0ID0gcmVhZFJlY3QueCAr
IHJlYWRSZWN0LndpZHRoOwotICAgICAgICBzcmNSZWN0LnRvcCA9IHJlYWRSZWN0Lnk7Ci0gICAg
ICAgIHNyY1JlY3QuYm90dG9tID0gcmVhZFJlY3QueSArIHJlYWRSZWN0LmhlaWdodDsKLQotICAg
ICAgICBSRUNUIGRzdFJlY3Q7Ci0gICAgICAgIGRzdFJlY3QubGVmdCA9IGRyYXdSZWN0Lng7Ci0g
ICAgICAgIGRzdFJlY3QucmlnaHQgPSBkcmF3UmVjdC54ICsgZHJhd1JlY3Qud2lkdGg7Ci0gICAg
ICAgIGRzdFJlY3QudG9wID0gZHJhd1JlY3QueTsKLSAgICAgICAgZHN0UmVjdC5ib3R0b20gPSBk
cmF3UmVjdC55ICsgZHJhd1JlY3QuaGVpZ2h0OwotCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
bURldmljZS0+U3RyZXRjaFJlY3QocmVhZFN1cmZhY2UsICZzcmNSZWN0LCBkcmF3U3VyZmFjZSwg
JmRzdFJlY3QsIEQzRFRFWEZfTk9ORSk7Ci0KLSAgICAgICAgcmVhZFN1cmZhY2UtPlJlbGVhc2Uo
KTsKLSAgICAgICAgZHJhd1N1cmZhY2UtPlJlbGVhc2UoKTsKLQotICAgICAgICBpZiAoRkFJTEVE
KHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiQmxpdEZyYW1lYnVmZmVyQU5H
TEUgZmFpbGVkOiBTdHJldGNoUmVjdCByZXR1cm5lZCAleC4iLCByZXN1bHQpOwotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGJsaXREZXB0aFN0
ZW5jaWwpCi0gICAgewotICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZWFkQnVmZmVyID0gcmVh
ZEZyYW1lYnVmZmVyLT5nZXREZXB0aE9yU3RlbmNpbGJ1ZmZlcigpOwotICAgICAgICBnbDo6UmVu
ZGVyYnVmZmVyICpkcmF3QnVmZmVyID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aE9yU3RlbmNp
bGJ1ZmZlcigpOwotICAgICAgICBSZW5kZXJUYXJnZXQ5ICpyZWFkRGVwdGhTdGVuY2lsID0gTlVM
TDsKLSAgICAgICAgUmVuZGVyVGFyZ2V0OSAqZHJhd0RlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAg
ICAgIElEaXJlY3QzRFN1cmZhY2U5KiByZWFkU3VyZmFjZSA9IE5VTEw7Ci0gICAgICAgIElEaXJl
Y3QzRFN1cmZhY2U5KiBkcmF3U3VyZmFjZSA9IE5VTEw7Ci0KLSAgICAgICAgaWYgKHJlYWRCdWZm
ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlYWREZXB0aFN0ZW5jaWwgPSBSZW5kZXJUYXJn
ZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShyZWFkQnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKGRyYXdCdWZmZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGRyYXdEZXB0aFN0ZW5jaWwgPSBSZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShkcmF3
QnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVh
ZERlcHRoU3RlbmNpbCkKLSAgICAgICAgewotICAgICAgICAgICAgcmVhZFN1cmZhY2UgPSByZWFk
RGVwdGhTdGVuY2lsLT5nZXRTdXJmYWNlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGRyYXdE
ZXB0aFN0ZW5jaWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRyYXdTdXJmYWNlID0gZHJhd0Rl
cHRoU3RlbmNpbC0+Z2V0U3VyZmFjZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFyZWFk
U3VyZmFjZSB8fCAhZHJhd1N1cmZhY2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiRmFp
bGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOwotICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPlN0cmV0Y2hSZWN0KHJlYWRTdXJmYWNlLCBOVUxM
LCBkcmF3U3VyZmFjZSwgTlVMTCwgRDNEVEVYRl9OT05FKTsKLQotICAgICAgICByZWFkU3VyZmFj
ZS0+UmVsZWFzZSgpOwotICAgICAgICBkcmF3U3VyZmFjZS0+UmVsZWFzZSgpOwotCi0gICAgICAg
IGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJCbGl0RnJh
bWVidWZmZXJBTkdMRSBmYWlsZWQ6IFN0cmV0Y2hSZWN0IHJldHVybmVkICV4LiIsIHJlc3VsdCk7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdm9pZCBSZW5kZXJlcjk6OnJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVy
ICpmcmFtZWJ1ZmZlciwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2gsIGJvb2wgcGFja1JldmVyc2VSb3dPcmRlciwgR0xp
bnQgcGFja0FsaWdubWVudCwgdm9pZCogcGl4ZWxzKQotewotICAgIFJlbmRlclRhcmdldDkgKnJl
bmRlclRhcmdldCA9IE5VTEw7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxM
OwotICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gZnJhbWVidWZmZXItPmdldENv
bG9yYnVmZmVyKDApOwotCi0gICAgaWYgKGNvbG9yYnVmZmVyKQotICAgIHsKLSAgICAgICAgcmVu
ZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0OTo6bWFrZVJlbmRlclRhcmdldDkoY29sb3JidWZmZXIt
PmdldFJlbmRlclRhcmdldCgpKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHJlbmRlclRhcmdldCkK
LSAgICB7Ci0gICAgICAgIHN1cmZhY2UgPSByZW5kZXJUYXJnZXQtPmdldFN1cmZhY2UoKTsKLSAg
ICB9Ci0KLSAgICBpZiAoIXN1cmZhY2UpCi0gICAgewotICAgICAgICAvLyBjb250ZXh0IG11c3Qg
YmUgbG9zdAotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgRDNEU1VSRkFDRV9ERVNDIGRl
c2M7Ci0gICAgc3VyZmFjZS0+R2V0RGVzYygmZGVzYyk7Ci0KLSAgICBpZiAoZGVzYy5NdWx0aVNh
bXBsZVR5cGUgIT0gRDNETVVMVElTQU1QTEVfTk9ORSkKLSAgICB7Ci0gICAgICAgIFVOSU1QTEVN
RU5URUQoKTsgICAvLyBGSVhNRTogUmVxdWlyZXMgcmVzb2x2ZSB1c2luZyBTdHJldGNoUmVjdCBp
bnRvIG5vbi1tdWx0aXNhbXBsZWQgcmVuZGVyIHRhcmdldAotICAgICAgICBzdXJmYWNlLT5SZWxl
YXNlKCk7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
fQotCi0gICAgSFJFU1VMVCByZXN1bHQ7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnN5c3RlbVN1
cmZhY2UgPSBOVUxMOwotICAgIGJvb2wgZGlyZWN0VG9QaXhlbHMgPSAhcGFja1JldmVyc2VSb3dP
cmRlciAmJiBwYWNrQWxpZ25tZW50IDw9IDQgJiYgZ2V0U2hhcmVIYW5kbGVTdXBwb3J0KCkgJiYK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9PSAwICYmIHkgPT0gMCAmJiBVSU5UKHdpZHRo
KSA9PSBkZXNjLldpZHRoICYmIFVJTlQoaGVpZ2h0KSA9PSBkZXNjLkhlaWdodCAmJgotICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQThSOEc4QjggJiYgZm9y
bWF0ID09IEdMX0JHUkFfRVhUICYmIHR5cGUgPT0gR0xfVU5TSUdORURfQllURTsKLSAgICBpZiAo
ZGlyZWN0VG9QaXhlbHMpCi0gICAgewotICAgICAgICAvLyBVc2UgdGhlIHBpeGVscyBwdHIgYXMg
YSBzaGFyZWQgaGFuZGxlIHRvIHdyaXRlIGRpcmVjdGx5IGludG8gY2xpZW50J3MgbWVtb3J5Ci0g
ICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZU9mZnNjcmVlblBsYWluU3VyZmFjZShkZXNj
LldpZHRoLCBkZXNjLkhlaWdodCwgZGVzYy5Gb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RQT09MX1NZU1RFTU1FTSwgJnN5c3Rl
bVN1cmZhY2UsICZwaXhlbHMpOwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIC8vIFRyeSBhZ2FpbiB3aXRob3V0IHRoZSBzaGFyZWQgaGFuZGxlCi0g
ICAgICAgICAgICBkaXJlY3RUb1BpeGVscyA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgaWYgKCFkaXJlY3RUb1BpeGVscykKLSAgICB7Ci0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2Ut
PkNyZWF0ZU9mZnNjcmVlblBsYWluU3VyZmFjZShkZXNjLldpZHRoLCBkZXNjLkhlaWdodCwgZGVz
Yy5Gb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBEM0RQT09MX1NZU1RFTU1FTSwgJnN5c3RlbVN1cmZhY2UsIE5VTEwpOwotICAgICAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1
bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkp
OwotICAgICAgICAgICAgc3VyZmFjZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlc3Vs
dCA9IG1EZXZpY2UtPkdldFJlbmRlclRhcmdldERhdGEoc3VyZmFjZSwgc3lzdGVtU3VyZmFjZSk7
Ci0gICAgc3VyZmFjZS0+UmVsZWFzZSgpOwotICAgIHN1cmZhY2UgPSBOVUxMOwotCi0gICAgaWYg
KEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgp
OwotCi0gICAgICAgIC8vIEl0IHR1cm5zIG91dCB0aGF0IEQzRCB3aWxsIHNvbWV0aW1lcyBwcm9k
dWNlIG1vcmUgZXJyb3IKLSAgICAgICAgLy8gY29kZXMgdGhhbiB0aG9zZSBkb2N1bWVudGVkLgot
ICAgICAgICBpZiAoZDNkOTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICAgICAgewot
ICAgICAgICAgICAgbm90aWZ5RGV2aWNlTG9zdCgpOwotICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAg
IHsKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLQotICAgIH0KLQotICAgIGlmIChkaXJlY3RUb1BpeGVscykKLSAgICB7Ci0gICAgICAg
IHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IFJFQ1QgcmVjdDsKLSAgICByZWN0LmxlZnQgPSBnbDo6Y2xhbXAoeCwgMEwsIHN0YXRpY19jYXN0
PExPTkc+KGRlc2MuV2lkdGgpKTsKLSAgICByZWN0LnRvcCA9IGdsOjpjbGFtcCh5LCAwTCwgc3Rh
dGljX2Nhc3Q8TE9ORz4oZGVzYy5IZWlnaHQpKTsKLSAgICByZWN0LnJpZ2h0ID0gZ2w6OmNsYW1w
KHggKyB3aWR0aCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KGRlc2MuV2lkdGgpKTsKLSAgICByZWN0
LmJvdHRvbSA9IGdsOjpjbGFtcCh5ICsgaGVpZ2h0LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVz
Yy5IZWlnaHQpKTsKLQotICAgIEQzRExPQ0tFRF9SRUNUIGxvY2s7Ci0gICAgcmVzdWx0ID0gc3lz
dGVtU3VyZmFjZS0+TG9ja1JlY3QoJmxvY2ssICZyZWN0LCBEM0RMT0NLX1JFQURPTkxZKTsKLQot
ICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsKLQotICAgICAgICByZXR1cm47ICAgLy8g
Tm8gc2Vuc2libGUgZXJyb3IgdG8gZ2VuZXJhdGUKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBjaGFy
ICpkZXN0ID0gKHVuc2lnbmVkIGNoYXIqKXBpeGVsczsKLSAgICB1bnNpZ25lZCBzaG9ydCAqZGVz
dDE2ID0gKHVuc2lnbmVkIHNob3J0KilwaXhlbHM7Ci0KLSAgICB1bnNpZ25lZCBjaGFyICpzb3Vy
Y2U7Ci0gICAgaW50IGlucHV0UGl0Y2g7Ci0gICAgaWYgKHBhY2tSZXZlcnNlUm93T3JkZXIpCi0g
ICAgewotICAgICAgICBzb3VyY2UgPSAoKHVuc2lnbmVkIGNoYXIqKWxvY2sucEJpdHMpICsgbG9j
ay5QaXRjaCAqIChyZWN0LmJvdHRvbSAtIHJlY3QudG9wIC0gMSk7Ci0gICAgICAgIGlucHV0UGl0
Y2ggPSAtbG9jay5QaXRjaDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgc291cmNl
ID0gKHVuc2lnbmVkIGNoYXIqKWxvY2sucEJpdHM7Ci0gICAgICAgIGlucHV0UGl0Y2ggPSBsb2Nr
LlBpdGNoOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGludCBmYXN0UGl4ZWxTaXplID0gMDsKLQot
ICAgIGlmIChkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQThSOEc4QjggJiYKLSAgICAgICAgZm9ybWF0
ID09IEdMX0JHUkFfRVhUICYmCi0gICAgICAgIHR5cGUgPT0gR0xfVU5TSUdORURfQllURSkKLSAg
ICB7Ci0gICAgICAgIGZhc3RQaXhlbFNpemUgPSA0OwotICAgIH0KLSAgICBlbHNlIGlmICgoZGVz
Yy5Gb3JtYXQgPT0gRDNERk1UX0E0UjRHNEI0ICYmCi0gICAgICAgICAgICAgZm9ybWF0ID09IEdM
X0JHUkFfRVhUICYmCi0gICAgICAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9TSE9SVF80XzRf
NF80X1JFVl9FWFQpIHx8Ci0gICAgICAgICAgICAgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BMVI1
RzVCNSAmJgotICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9CR1JBX0VYVCAmJgotICAgICAgICAg
ICAgIHR5cGUgPT0gR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUKSkKLSAgICB7Ci0g
ICAgICAgIGZhc3RQaXhlbFNpemUgPSAyOwotICAgIH0KLSAgICBlbHNlIGlmIChkZXNjLkZvcm1h
dCA9PSBEM0RGTVRfQTE2QjE2RzE2UjE2RiAmJgotICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9S
R0JBICYmCi0gICAgICAgICAgICAgdHlwZSA9PSBHTF9IQUxGX0ZMT0FUX09FUykKLSAgICB7Ci0g
ICAgICAgIGZhc3RQaXhlbFNpemUgPSA4OwotICAgIH0KLSAgICBlbHNlIGlmIChkZXNjLkZvcm1h
dCA9PSBEM0RGTVRfQTMyQjMyRzMyUjMyRiAmJgotICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9S
R0JBICYmCi0gICAgICAgICAgICAgdHlwZSA9PSBHTF9GTE9BVCkKLSAgICB7Ci0gICAgICAgIGZh
c3RQaXhlbFNpemUgPSAxNjsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBqID0gMDsgaiA8IHJlY3Qu
Ym90dG9tIC0gcmVjdC50b3A7IGorKykKLSAgICB7Ci0gICAgICAgIGlmIChmYXN0UGl4ZWxTaXpl
ICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEZhc3QgcGF0aCBmb3IgZm9ybWF0cyB3
aGljaCByZXF1aXJlIG5vIHRyYW5zbGF0aW9uOgotICAgICAgICAgICAgLy8gRDNERk1UX0E4UjhH
OEI4IHRvIEJHUkEvVU5TSUdORURfQllURQotICAgICAgICAgICAgLy8gRDNERk1UX0E0UjRHNEI0
IHRvIEJHUkEvVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhUCi0gICAgICAgICAgICAvLyBE
M0RGTVRfQTFSNUc1QjUgdG8gQkdSQS9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQKLSAg
ICAgICAgICAgIC8vIEQzREZNVF9BMTZCMTZHMTZSMTZGIHRvIFJHQkEvSEFMRl9GTE9BVF9PRVMK
LSAgICAgICAgICAgIC8vIEQzREZNVF9BMzJCMzJHMzJSMzJGIHRvIFJHQkEvRkxPQVQKLSAgICAg
ICAgICAgIC8vIAotICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGJ1ZmZlcnMgd2l0aCBubyBhbHBo
YSBnbyB0aHJvdWdoIHRoZSBzbG93IHBhdGggYmVsb3cuCi0gICAgICAgICAgICBtZW1jcHkoZGVz
dCArIGogKiBvdXRwdXRQaXRjaCwKLSAgICAgICAgICAgICAgICAgICBzb3VyY2UgKyBqICogaW5w
dXRQaXRjaCwKLSAgICAgICAgICAgICAgICAgICAocmVjdC5yaWdodCAtIHJlY3QubGVmdCkgKiBm
YXN0UGl4ZWxTaXplKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAg
IGVsc2UgaWYgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BOFI4RzhCOCAmJgotICAgICAgICAgICAg
ICAgICBmb3JtYXQgPT0gR0xfUkdCQSAmJgotICAgICAgICAgICAgICAgICB0eXBlID09IEdMX1VO
U0lHTkVEX0JZVEUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEZhc3QgcGF0aCBmb3Igc3dh
cHBpbmcgcmVkIHdpdGggYmx1ZQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0
LnJpZ2h0IC0gcmVjdC5sZWZ0OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IGFyZ2IgPSAqKHVuc2lnbmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAq
IGlucHV0UGl0Y2gpOwotICAgICAgICAgICAgICAgICoodW5zaWduZWQgaW50KikoZGVzdCArIDQg
KiBpICsgaiAqIG91dHB1dFBpdGNoKSA9Ci0gICAgICAgICAgICAgICAgICAgIChhcmdiICYgMHhG
RjAwRkYwMCkgfCAgICAgICAvLyBLZWVwIGFscGhhIGFuZCBncmVlbgotICAgICAgICAgICAgICAg
ICAgICAoYXJnYiAmIDB4MDBGRjAwMDApID4+IDE2IHwgLy8gTW92ZSByZWQgdG8gYmx1ZQotICAg
ICAgICAgICAgICAgICAgICAoYXJnYiAmIDB4MDAwMDAwRkYpIDw8IDE2OyAgLy8gTW92ZSBibHVl
IHRvIHJlZAotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0K
LQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3QucmlnaHQgLSByZWN0LmxlZnQ7IGkr
KykKLSAgICAgICAgewotICAgICAgICAgICAgZmxvYXQgcjsKLSAgICAgICAgICAgIGZsb2F0IGc7
Ci0gICAgICAgICAgICBmbG9hdCBiOwotICAgICAgICAgICAgZmxvYXQgYTsKLQotICAgICAgICAg
ICAgc3dpdGNoIChkZXNjLkZvcm1hdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2Fz
ZSBEM0RGTVRfUjVHNkI1OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgc2hvcnQgcmdiID0gKih1bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDIgKiBpICsg
aiAqIGlucHV0UGl0Y2gpOwotCi0gICAgICAgICAgICAgICAgICAgIGEgPSAxLjBmOwotICAgICAg
ICAgICAgICAgICAgICBiID0gKHJnYiAmIDB4MDAxRikgKiAoMS4wZiAvIDB4MDAxRik7Ci0gICAg
ICAgICAgICAgICAgICAgIGcgPSAocmdiICYgMHgwN0UwKSAqICgxLjBmIC8gMHgwN0UwKTsKLSAg
ICAgICAgICAgICAgICAgICAgciA9IChyZ2IgJiAweEY4MDApICogKDEuMGYgLyAweEY4MDApOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBEM0RGTVRfQTFSNUc1QjU6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBzaG9ydCBhcmdiID0gKih1bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDIg
KiBpICsgaiAqIGlucHV0UGl0Y2gpOwotCi0gICAgICAgICAgICAgICAgICAgIGEgPSAoYXJnYiAm
IDB4ODAwMCkgPyAxLjBmIDogMC4wZjsKLSAgICAgICAgICAgICAgICAgICAgYiA9IChhcmdiICYg
MHgwMDFGKSAqICgxLjBmIC8gMHgwMDFGKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IChhcmdi
ICYgMHgwM0UwKSAqICgxLjBmIC8gMHgwM0UwKTsKLSAgICAgICAgICAgICAgICAgICAgciA9IChh
cmdiICYgMHg3QzAwKSAqICgxLjBmIC8gMHg3QzAwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4Ogot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFyZ2Ig
PSAqKHVuc2lnbmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOwotCi0g
ICAgICAgICAgICAgICAgICAgIGEgPSAoYXJnYiAmIDB4RkYwMDAwMDApICogKDEuMGYgLyAweEZG
MDAwMDAwKTsKLSAgICAgICAgICAgICAgICAgICAgYiA9IChhcmdiICYgMHgwMDAwMDBGRikgKiAo
MS4wZiAvIDB4MDAwMDAwRkYpOwotICAgICAgICAgICAgICAgICAgICBnID0gKGFyZ2IgJiAweDAw
MDBGRjAwKSAqICgxLjBmIC8gMHgwMDAwRkYwMCk7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAo
YXJnYiAmIDB4MDBGRjAwMDApICogKDEuMGYgLyAweDAwRkYwMDAwKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX1g4
UjhHOEI4OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
aW50IHhyZ2IgPSAqKHVuc2lnbmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0
Y2gpOwotCi0gICAgICAgICAgICAgICAgICAgIGEgPSAxLjBmOwotICAgICAgICAgICAgICAgICAg
ICBiID0gKHhyZ2IgJiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBGRik7Ci0gICAgICAg
ICAgICAgICAgICAgIGcgPSAoeHJnYiAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAweDAwMDBGRjAw
KTsKLSAgICAgICAgICAgICAgICAgICAgciA9ICh4cmdiICYgMHgwMEZGMDAwMCkgKiAoMS4wZiAv
IDB4MDBGRjAwMDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTJSMTBHMTBCMTA6Ci0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50
Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgYSA9IChhcmdiICYgMHhDMDAwMDAwMCkgKiAoMS4wZiAvIDB4QzAwMDAwMDApOwotICAgICAg
ICAgICAgICAgICAgICBiID0gKGFyZ2IgJiAweDAwMDAwM0ZGKSAqICgxLjBmIC8gMHgwMDAwMDNG
Rik7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDAwRkZDMDApICogKDEuMGYg
LyAweDAwMEZGQzAwKTsKLSAgICAgICAgICAgICAgICAgICAgciA9IChhcmdiICYgMHgzRkYwMDAw
MCkgKiAoMS4wZiAvIDB4M0ZGMDAwMDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0IGZvcm1hdHMgaW4g
RDNEIGFyZSBzdG9yZWQgcmdiYSwgcmF0aGVyIHRoYW4gdGhlIG90aGVyIHdheSByb3VuZAotICAg
ICAgICAgICAgICAgICAgICByID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICogaW5w
dXRQaXRjaCkgKyAwKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9ICooKGZsb2F0Kikoc291cmNl
ICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgIGIg
PSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDIpOwotICAg
ICAgICAgICAgICAgICAgICBhID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICogaW5w
dXRQaXRjaCkgKyAzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAvLyBmbG9hdCBmb3JtYXRzIGluIEQzRCBhcmUgc3Rv
cmVkIHJnYmEsIHJhdGhlciB0aGFuIHRoZSBvdGhlciB3YXkgcm91bmQKLSAgICAgICAgICAgICAg
ICAgICAgciA9IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCooKHVuc2lnbmVkIHNob3J0Kikoc291cmNl
ICsgOCAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAwKSk7Ci0gICAgICAgICAgICAgICAgICAgIGcg
PSBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKCh1bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDggKiBp
ICsgaiAqIGlucHV0UGl0Y2gpICsgMSkpOwotICAgICAgICAgICAgICAgICAgICBiID0gZ2w6OmZs
b2F0MTZUb0Zsb2F0MzIoKigodW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyA4ICogaSArIGogKiBp
bnB1dFBpdGNoKSArIDIpKTsKLSAgICAgICAgICAgICAgICAgICAgYSA9IGdsOjpmbG9hdDE2VG9G
bG9hdDMyKCooKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsgOCAqIGkgKyBqICogaW5wdXRQaXRj
aCkgKyAzKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAv
LyBGSVhNRQotICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgICAg
IHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICog
b3V0cHV0UGl0Y2ggKyAwXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiByICsgMC41Zik7Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAxXSA9ICh1bnNp
Z25lZCBjaGFyKSgyNTUgKiBnICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAq
IGkgKyBqICogb3V0cHV0UGl0Y2ggKyAyXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBiICsgMC41
Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAz
XSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBhICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfQkdSQV9FWFQ6Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAg
ICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDBdID0gKHVuc2lnbmVk
IGNoYXIpKDI1NSAqIGIgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSAr
IGogKiBvdXRwdXRQaXRjaCArIDFdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGcgKyAwLjVmKTsK
LSAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDJdID0g
KHVuc2lnbmVkIGNoYXIpKDI1NSAqIHIgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgZGVz
dFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDNdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGEg
KyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBj
YXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVDoKLSAgICAgICAgICAgICAgICAg
ICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhlICJUcmFuc2ZlciBv
ZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMg
dHlwZSBpcyBwYWNrZWQgYXMgZm9sbG93czoKLSAgICAgICAgICAgICAgICAgICAgLy8gICAxNSAg
IDE0ICAgMTMgICAxMiAgIDExICAgMTAgICAgOSAgICA4ICAgIDcgICAgNiAgICA1ICAgIDQgICAg
MyAgICAyICAgIDEgICAgMAotICAgICAgICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLSAgICAgICAgICAgICAgICAgICAgLy8gfCAgICAgICA0dGggICAgICAgICB8ICAg
ICAgICAzcmQgICAgICAgICB8ICAgICAgICAybmQgICAgICAgIHwgICAxc3QgY29tcG9uZW50ICAg
fAotICAgICAgICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAg
ICAgICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgQkdSQV9FWFQsIEIgaXMgdGhlIGZpcnN0
IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28gZm9ydGguCi0gICAgICAgICAgICAgICAg
ICAgIGRlc3QxNltpICsgaiAqIG91dHB1dFBpdGNoIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KV0g
PQotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUgKiBhICsgMC41
ZikgPDwgMTIpfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUg
KiByICsgMC41ZikgPDwgOCkgfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBz
aG9ydCkoMTUgKiBnICsgMC41ZikgPDwgNCkgfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1
bnNpZ25lZCBzaG9ydCkoMTUgKiBiICsgMC41ZikgPDwgMCk7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF8xXzVfNV81
X1JFVl9FWFQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgZGVza3Rv
cCBHTCBzcGVjIGluIHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVjdGFuZ2xlcyIgc2VjdGlvbgot
ICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6Ci0g
ICAgICAgICAgICAgICAgICAgIC8vICAgMTUgICAxNCAgIDEzICAgMTIgICAxMSAgIDEwICAgIDkg
ICAgOCAgICA3ICAgIDYgICAgNSAgICA0ICAgIDMgICAgMiAgICAxICAgIDAKLSAgICAgICAgICAg
ICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAg
IC8vIHwgNHRoIHwgICAgICAgICAgM3JkICAgICAgICAgICB8ICAgICAgICAgICAybmQgICAgICAg
ICAgfCAgICAgIDFzdCBjb21wb25lbnQgICAgIHwKLSAgICAgICAgICAgICAgICAgICAgLy8gIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSBjYXNl
IG9mIEJHUkFfRVhULCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQsIEcgdGhlIHNlY29uZCwgYW5k
IHNvIGZvcnRoLgotICAgICAgICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRwdXRQaXRj
aCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0KLSAgICAgICAgICAgICAgICAgICAgICAgICgo
dW5zaWduZWQgc2hvcnQpKCAgICAgYSArIDAuNWYpIDw8IDE1KSB8Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIHIgKyAwLjVmKSA8PCAxMCkgfAotICAgICAg
ICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiBnICsgMC41ZikgPDwgNSkg
fAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiBiICsgMC41
ZikgPDwgMCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgICAgICAgIHN3
aXRjaCAodHlwZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgICAgICAgICAgICAgICAgICBkZXN0MTZbaSArIGog
KiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0gCi0gICAgICAgICAgICAg
ICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIGIgKyAwLjVmKSA8PCAwKSB8Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSg2MyAqIGcgKyAwLjVmKSA8PCA1
KSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIHIgKyAw
LjVmKSA8PCAxMSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgICAgICAgICBkZXN0WzMgKiBp
ICsgaiAqIG91dHB1dFBpdGNoICsgMF0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogciArIDAuNWYp
OwotICAgICAgICAgICAgICAgICAgICBkZXN0WzMgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMV0g
PSAodW5zaWduZWQgY2hhcikoMjU1ICogZyArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBk
ZXN0WzMgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMl0gPSAodW5zaWduZWQgY2hhcikoMjU1ICog
YiArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3lzdGVtU3VyZmFjZS0+VW5sb2NrUmVj
dCgpOwotCi0gICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOwotfQotCi1SZW5kZXJUYXJnZXQg
KlJlbmRlcmVyOTo6Y3JlYXRlUmVuZGVyVGFyZ2V0KFN3YXBDaGFpbiAqc3dhcENoYWluLCBib29s
IGRlcHRoKQotewotICAgIFN3YXBDaGFpbjkgKnN3YXBDaGFpbjkgPSBTd2FwQ2hhaW45OjptYWtl
U3dhcENoYWluOShzd2FwQ2hhaW4pOwotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0g
TlVMTDsKLSAgICBpZiAoZGVwdGgpCi0gICAgewotICAgICAgICBzdXJmYWNlID0gc3dhcENoYWlu
OS0+Z2V0RGVwdGhTdGVuY2lsKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHN1
cmZhY2UgPSBzd2FwQ2hhaW45LT5nZXRSZW5kZXJUYXJnZXQoKTsKLSAgICB9Ci0KLSAgICBSZW5k
ZXJUYXJnZXQ5ICpyZW5kZXJUYXJnZXQgPSBuZXcgUmVuZGVyVGFyZ2V0OSh0aGlzLCBzdXJmYWNl
KTsKLQotICAgIHJldHVybiByZW5kZXJUYXJnZXQ7Ci19Ci0KLVJlbmRlclRhcmdldCAqUmVuZGVy
ZXI5OjpjcmVhdGVSZW5kZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBHTHNpemVpIHNhbXBsZXMsIGJvb2wgZGVwdGgpCi17Ci0gICAgUmVuZGVyVGFyZ2V0OSAq
cmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldDkodGhpcywgd2lkdGgsIGhlaWdodCwgZm9y
bWF0LCBzYW1wbGVzKTsKLSAgICByZXR1cm4gcmVuZGVyVGFyZ2V0OwotfQotCi1TaGFkZXJFeGVj
dXRhYmxlICpSZW5kZXJlcjk6OmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBz
aXplX3QgbGVuZ3RoLCByeDo6U2hhZGVyVHlwZSB0eXBlKQotewotICAgIFNoYWRlckV4ZWN1dGFi
bGU5ICpleGVjdXRhYmxlID0gTlVMTDsKLQotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAg
ICBjYXNlIHJ4OjpTSEFERVJfVkVSVEVYOgotICAgICAgICB7Ci0gICAgICAgICAgICBJRGlyZWN0
M0RWZXJ0ZXhTaGFkZXI5ICp2c2hhZGVyID0gY3JlYXRlVmVydGV4U2hhZGVyKChEV09SRCopZnVu
Y3Rpb24sIGxlbmd0aCk7Ci0gICAgICAgICAgICBpZiAodnNoYWRlcikKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3IFNoYWRlckV4ZWN1dGFibGU5KGZ1bmN0
aW9uLCBsZW5ndGgsIHZzaGFkZXIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSByeDo6U0hBREVSX1BJWEVMOgotICAgICAgICB7Ci0gICAgICAg
ICAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKnBzaGFkZXIgPSBjcmVhdGVQaXhlbFNoYWRlcigo
RFdPUkQqKWZ1bmN0aW9uLCBsZW5ndGgpOwotICAgICAgICAgICAgaWYgKHBzaGFkZXIpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IG5ldyBTaGFkZXJFeGVjdXRh
YmxlOShmdW5jdGlvbiwgbGVuZ3RoLCBwc2hhZGVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBleGVjdXRhYmxlOwotfQotCi1T
aGFkZXJFeGVjdXRhYmxlICpSZW5kZXJlcjk6OmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9M
b2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUs
IEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91bmQpCi17Ci0gICAgY29uc3QgY2hhciAqcHJvZmls
ZSA9IE5VTEw7Ci0KLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSByeDo6U0hB
REVSX1ZFUlRFWDoKLSAgICAgICAgcHJvZmlsZSA9IGdldE1ham9yU2hhZGVyTW9kZWwoKSA+PSAz
ID8gInZzXzNfMCIgOiAidnNfMl8wIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIHJ4OjpT
SEFERVJfUElYRUw6Ci0gICAgICAgIHByb2ZpbGUgPSBnZXRNYWpvclNoYWRlck1vZGVsKCkgPj0g
MyA/ICJwc18zXzAiIDogInBzXzJfMCI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0g
ICAgLy8gQU5HTEUgaXNzdWUgNDg2OgotICAgIC8vIFdvcmstYXJvdW5kIGEgRDNEOSBjb21waWxl
ciBidWcgdGhhdCBwcmVzZW50cyBpdHNlbGYgd2hlbiB1c2luZyBjb25kaXRpb25hbCBkaXNjYXJk
LCBieSBkaXNhYmxpbmcgb3B0aW1pemF0aW9uCi0gICAgVUlOVCBvcHRpbWl6YXRpb25GbGFncyA9
ICh3b3JrYXJvdW5kID09IEFOR0xFX0QzRF9XT1JLQVJPVU5EX1NNM19PUFRJTUlaRVIgPyBEM0RD
T01QSUxFX1NLSVBfT1BUSU1JWkFUSU9OIDogQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVW
RUwpOwotCi0gICAgSUQzREJsb2IgKmJpbmFyeSA9IChJRDNEQmxvYiopY29tcGlsZVRvQmluYXJ5
KGluZm9Mb2csIHNoYWRlckhMU0wsIHByb2ZpbGUsIG9wdGltaXphdGlvbkZsYWdzLCB0cnVlKTsK
LSAgICBpZiAoIWJpbmFyeSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBTaGFkZXJFeGVj
dXRhYmxlICpleGVjdXRhYmxlID0gbG9hZEV4ZWN1dGFibGUoYmluYXJ5LT5HZXRCdWZmZXJQb2lu
dGVyKCksIGJpbmFyeS0+R2V0QnVmZmVyU2l6ZSgpLCB0eXBlKTsKLSAgICBiaW5hcnktPlJlbGVh
c2UoKTsKLQotICAgIHJldHVybiBleGVjdXRhYmxlOwotfQotCi1ib29sIFJlbmRlcmVyOTo6Ym94
RmlsdGVyKElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0
KQotewotICAgIHJldHVybiBtQmxpdC0+Ym94RmlsdGVyKHNvdXJjZSwgZGVzdCk7Ci19Ci0KLUQz
RFBPT0wgUmVuZGVyZXI5OjpnZXRUZXh0dXJlUG9vbChEV09SRCB1c2FnZSkgY29uc3QKLXsKLSAg
ICBpZiAobUQzZDlFeCAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEQzRFBPT0xfREVG
QVVMVDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKCEodXNhZ2UgJiAoRDNE
VVNBR0VfREVQVEhTVEVOQ0lMIHwgRDNEVVNBR0VfUkVOREVSVEFSR0VUKSkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBEM0RQT09MX01BTkFHRUQ7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gRDNEUE9PTF9ERUZBVUxUOwotfQotCi1ib29sIFJlbmRlcmVyOTo6Y29weVRv
UmVuZGVyVGFyZ2V0KElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0LCBJRGlyZWN0M0RTdXJmYWNlOSAq
c291cmNlLCBib29sIGZyb21NYW5hZ2VkKQotewotICAgIGlmIChzb3VyY2UgJiYgZGVzdCkKLSAg
ICB7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gRDNERVJSX09VVE9GVklERU9NRU1PUlk7Ci0K
LSAgICAgICAgaWYgKGZyb21NYW5hZ2VkKQotICAgICAgICB7Ci0gICAgICAgICAgICBEM0RTVVJG
QUNFX0RFU0MgZGVzYzsKLSAgICAgICAgICAgIHNvdXJjZS0+R2V0RGVzYygmZGVzYyk7Ci0KLSAg
ICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmID0gMDsKLSAgICAgICAgICAgIHJlc3Vs
dCA9IG1EZXZpY2UtPkNyZWF0ZU9mZnNjcmVlblBsYWluU3VyZmFjZShkZXNjLldpZHRoLCBkZXNj
LkhlaWdodCwgZGVzYy5Gb3JtYXQsIEQzRFBPT0xfU1lTVEVNTUVNLCAmc3VyZiwgTlVMTCk7Ci0K
LSAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBJbWFnZTk6OmNvcHlMb2NrYWJsZVN1cmZhY2VzKHN1cmYsIHNvdXJjZSk7Ci0g
ICAgICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+VXBkYXRlU3VyZmFjZShzdXJmLCBOVUxM
LCBkZXN0LCBOVUxMKTsKLSAgICAgICAgICAgICAgICBzdXJmLT5SZWxlYXNlKCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBl
bmRTY2VuZSgpOwotICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+U3RyZXRjaFJlY3Qoc291
cmNlLCBOVUxMLCBkZXN0LCBOVUxMLCBEM0RURVhGX05PTkUpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVz
dWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZ
KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi1JbWFnZSAqUmVuZGVyZXI5OjpjcmVhdGVJbWFnZSgpCi17Ci0gICAg
cmV0dXJuIG5ldyBJbWFnZTkoKTsKLX0KLQotdm9pZCBSZW5kZXJlcjk6OmdlbmVyYXRlTWlwbWFw
KEltYWdlICpkZXN0LCBJbWFnZSAqc3JjKQotewotICAgIEltYWdlOSAqc3JjOSA9IEltYWdlOTo6
bWFrZUltYWdlOShzcmMpOwotICAgIEltYWdlOSAqZHN0OSA9IEltYWdlOTo6bWFrZUltYWdlOShk
ZXN0KTsKLSAgICBJbWFnZTk6OmdlbmVyYXRlTWlwbWFwKGRzdDksIHNyYzkpOwotfQotCi1UZXh0
dXJlU3RvcmFnZSAqUmVuZGVyZXI5OjpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKFN3YXBDaGFpbiAq
c3dhcENoYWluKQotewotICAgIFN3YXBDaGFpbjkgKnN3YXBDaGFpbjkgPSBTd2FwQ2hhaW45Ojpt
YWtlU3dhcENoYWluOShzd2FwQ2hhaW4pOwotICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2U5
XzJEKHRoaXMsIHN3YXBDaGFpbjkpOwotfQotCi1UZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXI5Ojpj
cmVhdGVUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQpCi17Ci0gICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTlfMkQodGhpcywgbGV2
ZWxzLCBpbnRlcm5hbGZvcm1hdCwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSwgd2lkdGgsIGhlaWdo
dCk7Ci19Ci0KLVRleHR1cmVTdG9yYWdlICpSZW5kZXJlcjk6OmNyZWF0ZVRleHR1cmVTdG9yYWdl
Q3ViZShpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9v
bCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKQotewotICAgIHJldHVybiBuZXcgVGV4dHVyZVN0
b3JhZ2U5X0N1YmUodGhpcywgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgdXNhZ2UsIGZvcmNlUmVu
ZGVyYWJsZSwgc2l6ZSk7Ci19Ci0KLWJvb2wgUmVuZGVyZXI5OjpnZXRMVUlEKExVSUQgKmFkYXB0
ZXJMdWlkKSBjb25zdAotewotICAgIGFkYXB0ZXJMdWlkLT5IaWdoUGFydCA9IDA7Ci0gICAgYWRh
cHRlckx1aWQtPkxvd1BhcnQgPSAwOwotCi0gICAgaWYgKG1EM2Q5RXgpCi0gICAgewotICAgICAg
ICBtRDNkOUV4LT5HZXRBZGFwdGVyTFVJRChtQWRhcHRlciwgYWRhcHRlckx1aWQpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVu
ZGVyZXI5LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L1JlbmRlcmVyOS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmMyZGMxZDUzZTRj
MDM4NGU4Y2JmOTA1MDJiMDNmMDYxNzI4MTgyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvUmVuZGVyZXI5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNTAgKzAsMCBAQAotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgotLy8KLQotLy8gUmVuZGVyZXI5Lmg6IERlZmluZXMgYSBiYWNrLWVuZCBzcGVj
aWZpYyBjbGFzcyBmb3IgdGhlIEQzRDkgcmVuZGVyZXIuCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JF
TkRFUkVSX1JFTkRFUkVSOV9IXwotI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSRVI5
X0hfCi0KLSNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgotI2luY2x1ZGUgImxpYkdMRVN2
Mi9tYXRodXRpbC5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJDYWNoZS5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmgi
Ci0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCi0jaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldC5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLWNsYXNz
IFJlbmRlcmJ1ZmZlcjsKLX0KLQotbmFtZXNwYWNlIHJ4Ci17Ci1jbGFzcyBWZXJ0ZXhEYXRhTWFu
YWdlcjsKLWNsYXNzIEluZGV4RGF0YU1hbmFnZXI7Ci1jbGFzcyBTdHJlYW1pbmdJbmRleEJ1ZmZl
ckludGVyZmFjZTsKLXN0cnVjdCBUcmFuc2xhdGVkQXR0cmlidXRlOwotCi1jbGFzcyBSZW5kZXJl
cjkgOiBwdWJsaWMgUmVuZGVyZXIKLXsKLSAgcHVibGljOgotICAgIFJlbmRlcmVyOShlZ2w6OkRp
c3BsYXkgKmRpc3BsYXksIEhEQyBoRGMsIGJvb2wgc29mdHdhcmVEZXZpY2UpOwotICAgIHZpcnR1
YWwgflJlbmRlcmVyOSgpOwotCi0gICAgc3RhdGljIFJlbmRlcmVyOSAqbWFrZVJlbmRlcmVyOShS
ZW5kZXJlciAqcmVuZGVyZXIpOwotCi0gICAgdmlydHVhbCBFR0xpbnQgaW5pdGlhbGl6ZSgpOwot
ICAgIHZpcnR1YWwgYm9vbCByZXNldERldmljZSgpOwotCi0gICAgdmlydHVhbCBpbnQgZ2VuZXJh
dGVDb25maWdzKENvbmZpZ0Rlc2MgKipjb25maWdEZXNjTGlzdCk7Ci0gICAgdmlydHVhbCB2b2lk
IGRlbGV0ZUNvbmZpZ3MoQ29uZmlnRGVzYyAqY29uZmlnRGVzY0xpc3QpOwotCi0gICAgdm9pZCBz
dGFydFNjZW5lKCk7Ci0gICAgdm9pZCBlbmRTY2VuZSgpOwotCi0gICAgdmlydHVhbCB2b2lkIHN5
bmMoYm9vbCBibG9jayk7Ci0KLSAgICB2aXJ0dWFsIFN3YXBDaGFpbiAqY3JlYXRlU3dhcENoYWlu
KEhXTkQgd2luZG93LCBIQU5ETEUgc2hhcmVIYW5kbGUsIEdMZW51bSBiYWNrQnVmZmVyRm9ybWF0
LCBHTGVudW0gZGVwdGhCdWZmZXJGb3JtYXQpOwotCi0gICAgSURpcmVjdDNEUXVlcnk5KiBhbGxv
Y2F0ZUV2ZW50UXVlcnkoKTsKLSAgICB2b2lkIGZyZWVFdmVudFF1ZXJ5KElEaXJlY3QzRFF1ZXJ5
OSogcXVlcnkpOwotCi0gICAgLy8gcmVzb3VyY2UgY3JlYXRpb24KLSAgICBJRGlyZWN0M0RWZXJ0
ZXhTaGFkZXI5ICpjcmVhdGVWZXJ0ZXhTaGFkZXIoY29uc3QgRFdPUkQgKmZ1bmN0aW9uLCBzaXpl
X3QgbGVuZ3RoKTsKLSAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKmNyZWF0ZVBpeGVsU2hhZGVy
KGNvbnN0IERXT1JEICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCk7Ci0gICAgSFJFU1VMVCBjcmVh
dGVWZXJ0ZXhCdWZmZXIoVUlOVCBMZW5ndGgsIERXT1JEIFVzYWdlLCBJRGlyZWN0M0RWZXJ0ZXhC
dWZmZXI5ICoqcHBWZXJ0ZXhCdWZmZXIpOwotICAgIEhSRVNVTFQgY3JlYXRlSW5kZXhCdWZmZXIo
VUlOVCBMZW5ndGgsIERXT1JEIFVzYWdlLCBEM0RGT1JNQVQgRm9ybWF0LCBJRGlyZWN0M0RJbmRl
eEJ1ZmZlcjkgKipwcEluZGV4QnVmZmVyKTsKLSNpZiAwCi0gICAgdm9pZCAqY3JlYXRlVGV4dHVy
ZTJEKCk7Ci0gICAgdm9pZCAqY3JlYXRlVGV4dHVyZUN1YmUoKTsKLSAgICB2b2lkICpjcmVhdGVR
dWVyeSgpOwotICAgIHZvaWQgKmNyZWF0ZUluZGV4QnVmZmVyKCk7Ci0gICAgdm9pZCAqY3JlYXRl
VmVydGV4YnVmZmVyKCk7Ci0KLSAgICAvLyBzdGF0ZSBzZXR1cAotICAgIHZvaWQgYXBwbHlTaGFk
ZXJzKCk7Ci0gICAgdm9pZCBhcHBseUNvbnN0YW50cygpOwotI2VuZGlmCi0gICAgdmlydHVhbCB2
b2lkIHNldFNhbXBsZXJTdGF0ZShnbDo6U2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBjb25z
dCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dHVy
ZShnbDo6U2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBnbDo6VGV4dHVyZSAqdGV4dHVyZSk7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmFzdGVyaXplclN0YXRlKGNvbnN0IGdsOjpSYXN0ZXJp
emVyU3RhdGUgJnJhc3RlclN0YXRlKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0ZShj
b25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNvbG9yICZibGVuZENv
bG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVN
YXNrKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RGVwdGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6OkRl
cHRoU3RlbmNpbFN0YXRlICZkZXB0aFN0ZW5jaWxTdGF0ZSwgaW50IHN0ZW5jaWxSZWYsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGVuY2lsQmFja1JlZiwgYm9v
bCBmcm9udEZhY2VDQ1cpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldFNjaXNzb3JSZWN0YW5nbGUo
Y29uc3QgZ2w6OlJlY3RhbmdsZSAmc2Npc3NvciwgYm9vbCBlbmFibGVkKTsKLSAgICB2aXJ0dWFs
IGJvb2wgc2V0Vmlld3BvcnQoY29uc3QgZ2w6OlJlY3RhbmdsZSAmdmlld3BvcnQsIGZsb2F0IHpO
ZWFyLCBmbG9hdCB6RmFyLCBHTGVudW0gZHJhd01vZGUsIEdMZW51bSBmcm9udEZhY2UsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaWdub3JlVmlld3BvcnQpOwotCi0gICAgdmly
dHVhbCBib29sIGFwcGx5UmVuZGVyVGFyZ2V0KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIp
OwotICAgIHZpcnR1YWwgdm9pZCBhcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dy
YW1CaW5hcnkpOwotICAgIHZpcnR1YWwgdm9pZCBhcHBseVVuaWZvcm1zKGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5LCBnbDo6VW5pZm9ybUFycmF5ICp1bmlmb3JtQXJyYXkpOwotICAg
IHZpcnR1YWwgYm9vbCBhcHBseVByaW1pdGl2ZVR5cGUoR0xlbnVtIHByaW1pdGl2ZVR5cGUsIEdM
c2l6ZWkgZWxlbWVudENvdW50KTsKLSAgICB2aXJ0dWFsIEdMZW51bSBhcHBseVZlcnRleEJ1ZmZl
cihnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlZlcnRleEF0dHJpYnV0ZSB2
ZXJ0ZXhBdHRyaWJ1dGVzW10sIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGlu
c3RhbmNlcyk7Ci0gICAgdmlydHVhbCBHTGVudW0gYXBwbHlJbmRleEJ1ZmZlcihjb25zdCBHTHZv
aWQgKmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgR0xzaXplaSBjb3Vu
dCwgR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleElu
Zm8pOwotCi0gICAgdmlydHVhbCB2b2lkIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkg
Y291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsZW1lbnRz
KEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICpp
bmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJ
bmRleERhdGEgJmluZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMpOwotCi0gICAgdmlydHVhbCB2
b2lkIGNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBnbDo6RnJh
bWVidWZmZXIgKmZyYW1lQnVmZmVyKTsKLQotICAgIHZpcnR1YWwgdm9pZCBtYXJrQWxsU3RhdGVE
aXJ0eSgpOwotCi0gICAgLy8gbG9zdCBkZXZpY2UKLSAgICB2b2lkIG5vdGlmeURldmljZUxvc3Qo
KTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNEZXZpY2VMb3N0KCk7Ci0gICAgdmlydHVhbCBib29sIHRl
c3REZXZpY2VMb3N0KGJvb2wgbm90aWZ5KTsKLSAgICB2aXJ0dWFsIGJvb2wgdGVzdERldmljZVJl
c2V0dGFibGUoKTsKLQotICAgIC8vIFJlbmRlcmVyIGNhcGFiaWxpdGllcwotICAgIElEaXJlY3Qz
RERldmljZTkgKmdldERldmljZSgpIHsgcmV0dXJuIG1EZXZpY2U7IH0KLSAgICB2aXJ0dWFsIERX
T1JEIGdldEFkYXB0ZXJWZW5kb3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIGdl
dFJlbmRlcmVyRGVzY3JpcHRpb24oKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdVSUQgZ2V0QWRhcHRl
cklkZW50aWZpZXIoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgYm9vbCBnZXRCR1JBVGV4dHVyZVN1
cHBvcnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUMVRleHR1cmVTdXBwb3J0KCk7
Ci0gICAgdmlydHVhbCBib29sIGdldERYVDNUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1YWwg
Ym9vbCBnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RXZlbnRR
dWVyeVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0
KGJvb2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSk7Ci0gICAgdmlydHVhbCBib29sIGdl
dEZsb2F0MTZUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUp
OwotICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZp
cnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgdmlydHVh
bCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVzZXJ2ZWRWZXJ0ZXhVbmlmb3Jt
VmVjdG9ycygpIGNvbnN0OwotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlc2VydmVkRnJh
Z21lbnRVbmlmb3JtVmVjdG9ycygpIGNvbnN0OwotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdl
dE1heFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBp
bnQgZ2V0TWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycygpIGNvbnN0OwotICAgIHZpcnR1YWwgdW5z
aWduZWQgaW50IGdldE1heFZhcnlpbmdWZWN0b3JzKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29s
IGdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdl
dERlcHRoVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T2NjbHVz
aW9uUXVlcnlTdXBwb3J0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdldEluc3RhbmNpbmdT
dXBwb3J0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdldFRleHR1cmVGaWx0ZXJBbmlzb3Ry
b3B5U3VwcG9ydCgpIGNvbnN0OwotICAgIHZpcnR1YWwgZmxvYXQgZ2V0VGV4dHVyZU1heEFuaXNv
dHJvcHkoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0U2hhcmVIYW5kbGVTdXBwb3J0KCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdldERlcml2YXRpdmVJbnN0cnVjdGlvblN1cHBvcnQo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0UG9zdFN1YkJ1ZmZlclN1cHBvcnQoKSBjb25z
dDsKLQotICAgIHZpcnR1YWwgaW50IGdldE1ham9yU2hhZGVyTW9kZWwoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIGZsb2F0IGdldE1heFBvaW50U2l6ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGdl
dE1heFZpZXdwb3J0RGltZW5zaW9uKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4
dHVyZVdpZHRoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZUhlaWdodCgp
IGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBnZXQzMkJpdEluZGV4U3VwcG9ydCgpIGNvbnN0Owot
ICAgIERXT1JEIGdldENhcHNEZWNsVHlwZXMoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBnZXRN
aW5Td2FwSW50ZXJ2YWwoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBnZXRNYXhTd2FwSW50ZXJ2
YWwoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRNYXhTdXBwb3J0ZWRTYW1wbGVz
KCkgY29uc3Q7Ci0gICAgaW50IGdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKEQzREZPUk1BVCBm
b3JtYXQsIGludCByZXF1ZXN0ZWQpIGNvbnN0OwotICAgIAotICAgIHZpcnR1YWwgdW5zaWduZWQg
aW50IGdldE1heFJlbmRlclRhcmdldHMoKSBjb25zdDsKLQotICAgIEQzREZPUk1BVCBDb252ZXJ0
VGV4dHVyZUludGVybmFsRm9ybWF0KEdMaW50IGludGVybmFsZm9ybWF0KTsKLQotICAgIC8vIFBp
eGVsIG9wZXJhdGlvbnMKLSAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVyVGFyZ2V0KFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlMkQgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnNv
dXJjZSk7Ci0gICAgdmlydHVhbCBib29sIGNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZUN1YmUgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc291cmNl
KTsKLQotICAgIHZpcnR1YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1
ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBHTGludCBsZXZlbCk7Ci0gICAg
dmlydHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25z
dCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwp
OwotCi0gICAgdmlydHVhbCBib29sIGJsaXRSZWN0KGdsOjpGcmFtZWJ1ZmZlciAqcmVhZFRhcmdl
dCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGdsOjpGcmFtZWJ1ZmZlciAqZHJhd1Rh
cmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0RGVwdGhTdGVuY2lsKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVhZFBpeGVscyhnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBv
dXRwdXRQaXRjaCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLCBHTGludCBwYWNrQWxpZ25tZW50
LCB2b2lkKiBwaXhlbHMpOwotCi0gICAgLy8gUmVuZGVyVGFyZ2V0IGNyZWF0aW9uCi0gICAgdmly
dHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRlclRhcmdldChTd2FwQ2hhaW4gKnN3YXBDaGFp
biwgYm9vbCBkZXB0aCk7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRlclRh
cmdldChpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxl
cywgYm9vbCBkZXB0aCk7Ci0KLSAgICAvLyBTaGFkZXIgb3BlcmF0aW9ucwotICAgIHZpcnR1YWwg
U2hhZGVyRXhlY3V0YWJsZSAqbG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNp
emVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUpOwotICAgIHZpcnR1YWwgU2hhZGVyRXhl
Y3V0YWJsZSAqY29tcGlsZVRvRXhlY3V0YWJsZShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3Qg
Y2hhciAqc2hhZGVySExTTCwgcng6OlNoYWRlclR5cGUgdHlwZSwgRDNEV29ya2Fyb3VuZFR5cGUg
d29ya2Fyb3VuZCk7Ci0KLSAgICAvLyBJbWFnZSBvcGVyYXRpb25zCi0gICAgdmlydHVhbCBJbWFn
ZSAqY3JlYXRlSW1hZ2UoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoSW1hZ2Ug
KmRlc3QsIEltYWdlICpzb3VyY2UpOwotICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0
ZVRleHR1cmVTdG9yYWdlMkQoU3dhcENoYWluICpzd2FwQ2hhaW4pOwotICAgIHZpcnR1YWwgVGV4
dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywgR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3Jl
YXRlVGV4dHVyZVN0b3JhZ2VDdWJlKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpOwotCi0gICAgLy8g
QnVmZmVyIGNyZWF0aW9uCi0gICAgdmlydHVhbCBWZXJ0ZXhCdWZmZXIgKmNyZWF0ZVZlcnRleEJ1
ZmZlcigpOwotICAgIHZpcnR1YWwgSW5kZXhCdWZmZXIgKmNyZWF0ZUluZGV4QnVmZmVyKCk7Ci0g
ICAgdmlydHVhbCBCdWZmZXJTdG9yYWdlICpjcmVhdGVCdWZmZXJTdG9yYWdlKCk7Ci0KLSAgICAv
LyBRdWVyeSBhbmQgRmVuY2UgY3JlYXRpb24KLSAgICB2aXJ0dWFsIFF1ZXJ5SW1wbCAqY3JlYXRl
UXVlcnkoR0xlbnVtIHR5cGUpOwotICAgIHZpcnR1YWwgRmVuY2VJbXBsICpjcmVhdGVGZW5jZSgp
OwotCi0gICAgLy8gRDNEOS1yZW5kZXJlciBzcGVjaWZpYyBtZXRob2RzCi0gICAgYm9vbCBib3hG
aWx0ZXIoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3Qp
OwotCi0gICAgRDNEUE9PTCBnZXRUZXh0dXJlUG9vbChEV09SRCB1c2FnZSkgY29uc3Q7Ci0KLSAg
ICB2aXJ0dWFsIGJvb2wgZ2V0TFVJRChMVUlEICphZGFwdGVyTHVpZCkgY29uc3Q7Ci0KLSAgcHJp
dmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyZXI5KTsKLQotICAgIHZv
aWQgYXBwbHlVbmlmb3JtbmZ2KGdsOjpVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGZs
b2F0ICp2KTsKLSAgICB2b2lkIGFwcGx5VW5pZm9ybW5pdihnbDo6VW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSwgY29uc3QgR0xpbnQgKnYpOwotICAgIHZvaWQgYXBwbHlVbmlmb3JtbmJ2KGdsOjpVbmlm
b3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGludCAqdik7Ci0KLSAgICB2b2lkIGRyYXdMaW5l
TG9vcChHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBp
bnQgbWluSW5kZXgsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlcik7Ci0gICAgdm9pZCBk
cmF3SW5kZXhlZFBvaW50cyhHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lk
ICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIpOwotCi0gICAgdm9pZCBn
ZXRNdWx0aVNhbXBsZVN1cHBvcnQoRDNERk9STUFUIGZvcm1hdCwgYm9vbCAqbXVsdGlTYW1wbGVB
cnJheSk7Ci0gICAgYm9vbCBjb3B5VG9SZW5kZXJUYXJnZXQoSURpcmVjdDNEU3VyZmFjZTkgKmRl
c3QsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGJvb2wgZnJvbU1hbmFnZWQpOwotICAgIGds
OjpSZW5kZXJidWZmZXIgKmdldE51bGxDb2xvcmJ1ZmZlcihnbDo6UmVuZGVyYnVmZmVyICpkZXB0
aGJ1ZmZlcik7Ci0KLSAgICBEM0RQT09MIGdldEJ1ZmZlclBvb2woRFdPUkQgdXNhZ2UpIGNvbnN0
OwotCi0gICAgSE1PRFVMRSBtRDNkOU1vZHVsZTsKLSAgICBIREMgbURjOwotCi0gICAgdm9pZCBp
bml0aWFsaXplRGV2aWNlKCk7Ci0gICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIGdldERlZmF1bHRQ
cmVzZW50UGFyYW1ldGVycygpOwotICAgIHZvaWQgcmVsZWFzZURldmljZVJlc291cmNlcygpOwot
Ci0gICAgVUlOVCBtQWRhcHRlcjsKLSAgICBEM0RERVZUWVBFIG1EZXZpY2VUeXBlOwotICAgIGJv
b2wgbVNvZnR3YXJlRGV2aWNlOyAgIC8vIEZJWE1FOiBEZXByZWNhdGUKLSAgICBJRGlyZWN0M0Q5
ICptRDNkOTsgIC8vIEFsd2F5cyB2YWxpZCBhZnRlciBzdWNjZXNzZnVsIGluaXRpYWxpemF0aW9u
LgotICAgIElEaXJlY3QzRDlFeCAqbUQzZDlFeDsgIC8vIE1pZ2h0IGJlIG51bGwgaWYgRDNEOUV4
IGlzIG5vdCBzdXBwb3J0ZWQuCi0gICAgSURpcmVjdDNERGV2aWNlOSAqbURldmljZTsKLSAgICBJ
RGlyZWN0M0REZXZpY2U5RXggKm1EZXZpY2VFeDsgIC8vIE1pZ2h0IGJlIG51bGwgaWYgRDNEOUV4
IGlzIG5vdCBzdXBwb3J0ZWQuCi0KLSAgICBCbGl0ICptQmxpdDsKLQotICAgIEhXTkQgbURldmlj
ZVdpbmRvdzsKLQotICAgIGJvb2wgbURldmljZUxvc3Q7Ci0gICAgRDNEQ0FQUzkgbURldmljZUNh
cHM7Ci0gICAgRDNEQURBUFRFUl9JREVOVElGSUVSOSBtQWRhcHRlcklkZW50aWZpZXI7Ci0KLSAg
ICBEM0RQUklNSVRJVkVUWVBFIG1QcmltaXRpdmVUeXBlOwotICAgIGludCBtUHJpbWl0aXZlQ291
bnQ7Ci0gICAgR0xzaXplaSBtUmVwZWF0RHJhdzsKLQotICAgIGJvb2wgbVNjZW5lU3RhcnRlZDsK
LSAgICBib29sIG1TdXBwb3J0c05vblBvd2VyMlRleHR1cmVzOwotICAgIGJvb2wgbVN1cHBvcnRz
VGV4dHVyZUZpbHRlckFuaXNvdHJvcHk7Ci0gICAgaW50IG1NaW5Td2FwSW50ZXJ2YWw7Ci0gICAg
aW50IG1NYXhTd2FwSW50ZXJ2YWw7Ci0KLSAgICBib29sIG1PY2NsdXNpb25RdWVyeVN1cHBvcnQ7
Ci0gICAgYm9vbCBtRXZlbnRRdWVyeVN1cHBvcnQ7Ci0gICAgYm9vbCBtVmVydGV4VGV4dHVyZVN1
cHBvcnQ7Ci0KLSAgICBib29sIG1EZXB0aFRleHR1cmVTdXBwb3J0OwotCi0gICAgYm9vbCBtRmxv
YXQzMlRleHR1cmVTdXBwb3J0OwotICAgIGJvb2wgbUZsb2F0MzJGaWx0ZXJTdXBwb3J0OwotICAg
IGJvb2wgbUZsb2F0MzJSZW5kZXJTdXBwb3J0OwotCi0gICAgYm9vbCBtRmxvYXQxNlRleHR1cmVT
dXBwb3J0OwotICAgIGJvb2wgbUZsb2F0MTZGaWx0ZXJTdXBwb3J0OwotICAgIGJvb2wgbUZsb2F0
MTZSZW5kZXJTdXBwb3J0OwotCi0gICAgYm9vbCBtRFhUMVRleHR1cmVTdXBwb3J0OwotICAgIGJv
b2wgbURYVDNUZXh0dXJlU3VwcG9ydDsKLSAgICBib29sIG1EWFQ1VGV4dHVyZVN1cHBvcnQ7Ci0K
LSAgICBib29sIG1MdW1pbmFuY2VUZXh0dXJlU3VwcG9ydDsKLSAgICBib29sIG1MdW1pbmFuY2VB
bHBoYVRleHR1cmVTdXBwb3J0OwotCi0gICAgc3RkOjptYXA8RDNERk9STUFULCBib29sICo+IG1N
dWx0aVNhbXBsZVN1cHBvcnQ7Ci0gICAgR0xzaXplaSBtTWF4U3VwcG9ydGVkU2FtcGxlczsKLQot
ICAgIC8vIGN1cnJlbnQgcmVuZGVyIHRhcmdldCBzdGF0ZXMKLSAgICB1bnNpZ25lZCBpbnQgbUFw
cGxpZWRSZW5kZXJUYXJnZXRTZXJpYWw7Ci0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVkRGVwdGhi
dWZmZXJTZXJpYWw7Ci0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlh
bDsKLSAgICBib29sIG1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZDsKLSAgICBib29sIG1SZW5kZXJU
YXJnZXREZXNjSW5pdGlhbGl6ZWQ7Ci0gICAgcng6OlJlbmRlclRhcmdldDo6RGVzYyBtUmVuZGVy
VGFyZ2V0RGVzYzsKLSAgICB1bnNpZ25lZCBpbnQgbUN1clN0ZW5jaWxTaXplOwotICAgIHVuc2ln
bmVkIGludCBtQ3VyRGVwdGhTaXplOwotCi0gICAgSURpcmVjdDNEU3RhdGVCbG9jazkgKm1NYXNr
ZWRDbGVhclNhdmVkU3RhdGU7Ci0KLSAgICAvLyBwcmV2aW91c2x5IHNldCByZW5kZXIgc3RhdGVz
Ci0gICAgYm9vbCBtRm9yY2VTZXREZXB0aFN0ZW5jaWxTdGF0ZTsKLSAgICBnbDo6RGVwdGhTdGVu
Y2lsU3RhdGUgbUN1ckRlcHRoU3RlbmNpbFN0YXRlOwotICAgIGludCBtQ3VyU3RlbmNpbFJlZjsK
LSAgICBpbnQgbUN1clN0ZW5jaWxCYWNrUmVmOwotICAgIGJvb2wgbUN1ckZyb250RmFjZUNDVzsK
LQotICAgIGJvb2wgbUZvcmNlU2V0UmFzdGVyU3RhdGU7Ci0gICAgZ2w6OlJhc3Rlcml6ZXJTdGF0
ZSBtQ3VyUmFzdGVyU3RhdGU7Ci0KLSAgICBib29sIG1Gb3JjZVNldFNjaXNzb3I7Ci0gICAgZ2w6
OlJlY3RhbmdsZSBtQ3VyU2Npc3NvcjsKLSAgICBib29sIG1TY2lzc29yRW5hYmxlZDsKLQotICAg
IGJvb2wgbUZvcmNlU2V0Vmlld3BvcnQ7Ci0gICAgZ2w6OlJlY3RhbmdsZSBtQ3VyVmlld3BvcnQ7
Ci0gICAgZmxvYXQgbUN1ck5lYXI7Ci0gICAgZmxvYXQgbUN1ckZhcjsKLSAgICBmbG9hdCBtQ3Vy
RGVwdGhGcm9udDsKLQotICAgIGJvb2wgbUZvcmNlU2V0QmxlbmRTdGF0ZTsKLSAgICBnbDo6Qmxl
bmRTdGF0ZSBtQ3VyQmxlbmRTdGF0ZTsKLSAgICBnbDo6Q29sb3IgbUN1ckJsZW5kQ29sb3I7Ci0g
ICAgR0x1aW50IG1DdXJTYW1wbGVNYXNrOwotCi0gICAgLy8gQ3VycmVudGx5IGFwcGxpZWQgc2Ft
cGxlciBzdGF0ZXMKLSAgICBib29sIG1Gb3JjZVNldFZlcnRleFNhbXBsZXJTdGF0ZXNbZ2w6OklN
UExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU107Ci0gICAgZ2w6OlNh
bXBsZXJTdGF0ZSBtQ3VyVmVydGV4U2FtcGxlclN0YXRlc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFY
X1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKLQotICAgIGJvb2wgbUZvcmNlU2V0UGl4ZWxT
YW1wbGVyU3RhdGVzW2dsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUU107Ci0gICAgZ2w6OlNhbXBs
ZXJTdGF0ZSBtQ3VyUGl4ZWxTYW1wbGVyU3RhdGVzW2dsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklU
U107Ci0KLSAgICAvLyBDdXJyZW50bHkgYXBwbGllZCB0ZXh0dXJlcwotICAgIHVuc2lnbmVkIGlu
dCBtQ3VyVmVydGV4VGV4dHVyZVNlcmlhbHNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhf
VEVYVFVSRV9JTUFHRV9VTklUU107Ci0gICAgdW5zaWduZWQgaW50IG1DdXJQaXhlbFRleHR1cmVT
ZXJpYWxzW2dsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUU107Ci0KLSAgICB1bnNpZ25lZCBpbnQg
bUFwcGxpZWRJQlNlcmlhbDsKLSAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRQcm9ncmFtQmluYXJ5
U2VyaWFsOwotICAgIAotICAgIHJ4OjpkeF9WZXJ0ZXhDb25zdGFudHMgbVZlcnRleENvbnN0YW50
czsKLSAgICByeDo6ZHhfUGl4ZWxDb25zdGFudHMgbVBpeGVsQ29uc3RhbnRzOwotICAgIGJvb2wg
bUR4VW5pZm9ybXNEaXJ0eTsKLQotICAgIC8vIEEgcG9vbCBvZiBldmVudCBxdWVyaWVzIHRoYXQg
YXJlIGN1cnJlbnRseSB1bnVzZWQuCi0gICAgc3RkOjp2ZWN0b3I8SURpcmVjdDNEUXVlcnk5Kj4g
bUV2ZW50UXVlcnlQb29sOwotICAgIFZlcnRleFNoYWRlckNhY2hlIG1WZXJ0ZXhTaGFkZXJDYWNo
ZTsKLSAgICBQaXhlbFNoYWRlckNhY2hlIG1QaXhlbFNoYWRlckNhY2hlOwotCi0gICAgVmVydGV4
RGF0YU1hbmFnZXIgKm1WZXJ0ZXhEYXRhTWFuYWdlcjsKLSAgICBWZXJ0ZXhEZWNsYXJhdGlvbkNh
Y2hlIG1WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOwotCi0gICAgSW5kZXhEYXRhTWFuYWdlciAqbUlu
ZGV4RGF0YU1hbmFnZXI7Ci0gICAgU3RyZWFtaW5nSW5kZXhCdWZmZXJJbnRlcmZhY2UgKm1MaW5l
TG9vcElCOwotCi0gICAgZW51bSB7IE5VTV9OVUxMX0NPTE9SQlVGRkVSX0NBQ0hFX0VOVFJJRVMg
PSAxMiB9OwotICAgIHN0cnVjdCBOdWxsQ29sb3JidWZmZXJDYWNoZUVudHJ5Ci0gICAgewotICAg
ICAgICBVSU5UIGxydUNvdW50OwotICAgICAgICBpbnQgd2lkdGg7Ci0gICAgICAgIGludCBoZWln
aHQ7Ci0gICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmJ1ZmZlcjsKLSAgICB9IG1OdWxsQ29sb3Ji
dWZmZXJDYWNoZVtOVU1fTlVMTF9DT0xPUkJVRkZFUl9DQUNIRV9FTlRSSUVTXTsKLSAgICBVSU5U
IG1NYXhOdWxsQ29sb3JidWZmZXJMUlU7Ci0KLX07Ci0KLX0KLSNlbmRpZiAvLyBMSUJHTEVTVjJf
UkVOREVSRVJfUkVOREVSRVI5X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckV4ZWN1dGFibGUxMS5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckV4ZWN1dGFibGUx
MS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxZWI1NjAzMzQ4M2ZmYjA5MDIy
OTBlNTk2ODZkZDRjMGQ4YjIwYzIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9TaGFkZXJFeGVjdXRhYmxlMTEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAK
LSNpbmNsdWRlICJwcmVjb21waWxlZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEz
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gU2hhZGVy
RXhlY3V0YWJsZTExLmNwcDogSW1wbGVtZW50cyBhIEQzRDExLXNwZWNpZmljIGNsYXNzIHRvIGNv
bnRhaW4gc2hhZGVyCi0vLyBleGVjdXRhYmxlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuCi0KLSNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvU2hhZGVyRXhlY3V0YWJsZTExLmgiCi0KLSNpbmNs
dWRlICJjb21tb24vZGVidWcuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLVNoYWRlckV4ZWN1dGFi
bGUxMTo6U2hhZGVyRXhlY3V0YWJsZTExKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVu
Z3RoLCBJRDNEMTFQaXhlbFNoYWRlciAqZXhlY3V0YWJsZSkKLSAgICA6IFNoYWRlckV4ZWN1dGFi
bGUoZnVuY3Rpb24sIGxlbmd0aCkKLXsKLSAgICBtUGl4ZWxFeGVjdXRhYmxlID0gZXhlY3V0YWJs
ZTsKLSAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgbUdlb21ldHJ5RXhlY3V0YWJs
ZSA9IE5VTEw7Ci0KLSAgICBtQ29uc3RhbnRCdWZmZXIgPSBOVUxMOwotfQotCi1TaGFkZXJFeGVj
dXRhYmxlMTE6OlNoYWRlckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90
IGxlbmd0aCwgSUQzRDExVmVydGV4U2hhZGVyICpleGVjdXRhYmxlKQotICAgIDogU2hhZGVyRXhl
Y3V0YWJsZShmdW5jdGlvbiwgbGVuZ3RoKQotewotICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gZXhl
Y3V0YWJsZTsKLSAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKLSAgICBtR2VvbWV0cnlFeGVj
dXRhYmxlID0gTlVMTDsKLQotICAgIG1Db25zdGFudEJ1ZmZlciA9IE5VTEw7Ci19Ci0KLVNoYWRl
ckV4ZWN1dGFibGUxMTo6U2hhZGVyRXhlY3V0YWJsZTExKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBz
aXplX3QgbGVuZ3RoLCBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZXhlY3V0YWJsZSkKLSAgICA6IFNo
YWRlckV4ZWN1dGFibGUoZnVuY3Rpb24sIGxlbmd0aCkKLXsKLSAgICBtR2VvbWV0cnlFeGVjdXRh
YmxlID0gZXhlY3V0YWJsZTsKLSAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgbVBp
eGVsRXhlY3V0YWJsZSA9IE5VTEw7Ci0KLSAgICBtQ29uc3RhbnRCdWZmZXIgPSBOVUxMOwotfQot
Ci1TaGFkZXJFeGVjdXRhYmxlMTE6On5TaGFkZXJFeGVjdXRhYmxlMTEoKQotewotICAgIGlmICht
VmVydGV4RXhlY3V0YWJsZSkKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlLT5SZWxl
YXNlKCk7Ci0gICAgfQotICAgIGlmIChtUGl4ZWxFeGVjdXRhYmxlKQotICAgIHsKLSAgICAgICAg
bVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFzZSgpOwotICAgIH0KLSAgICBpZiAobUdlb21ldHJ5RXhl
Y3V0YWJsZSkKLSAgICB7Ci0gICAgICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUtPlJlbGVhc2UoKTsK
LSAgICB9Ci0gICAgCi0gICAgaWYgKG1Db25zdGFudEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1D
b25zdGFudEJ1ZmZlci0+UmVsZWFzZSgpOwotICAgIH0KLX0KLQotU2hhZGVyRXhlY3V0YWJsZTEx
ICpTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VTaGFkZXJFeGVjdXRhYmxlMTEoU2hhZGVyRXhlY3V0
YWJsZSAqZXhlY3V0YWJsZSkKLXsKLSAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShTaGFkZXJF
eGVjdXRhYmxlMTEqLCBleGVjdXRhYmxlKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFNoYWRl
ckV4ZWN1dGFibGUxMSo+KGV4ZWN1dGFibGUpOwotfQotCi1JRDNEMTFWZXJ0ZXhTaGFkZXIgKlNo
YWRlckV4ZWN1dGFibGUxMTo6Z2V0VmVydGV4U2hhZGVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bVZlcnRleEV4ZWN1dGFibGU7Ci19Ci0KLUlEM0QxMVBpeGVsU2hhZGVyICpTaGFkZXJFeGVjdXRh
YmxlMTE6OmdldFBpeGVsU2hhZGVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVBpeGVsRXhlY3V0
YWJsZTsKLX0KLQotSUQzRDExR2VvbWV0cnlTaGFkZXIgKlNoYWRlckV4ZWN1dGFibGUxMTo6Z2V0
R2VvbWV0cnlTaGFkZXIoKSBjb25zdAotewotICAgIHJldHVybiBtR2VvbWV0cnlFeGVjdXRhYmxl
OwotfQotCi1JRDNEMTFCdWZmZXIgKlNoYWRlckV4ZWN1dGFibGUxMTo6Z2V0Q29uc3RhbnRCdWZm
ZXIoSUQzRDExRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGludCByZWdpc3RlckNvdW50KQotewot
ICAgIGlmICghbUNvbnN0YW50QnVmZmVyICYmIHJlZ2lzdGVyQ291bnQgPiAwKQotICAgIHsKLSAg
ICAgICAgRDNEMTFfQlVGRkVSX0RFU0MgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbiA9IHswfTsK
LSAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5CeXRlV2lkdGggPSByZWdpc3RlckNv
dW50ICogc2l6ZW9mKGZsb2F0WzRdKTsKLSAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlv
bi5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZTkFNSUM7Ci0gICAgICAgIGNvbnN0YW50QnVmZmVyRGVz
Y3JpcHRpb24uQmluZEZsYWdzID0gRDNEMTFfQklORF9DT05TVEFOVF9CVUZGRVI7Ci0gICAgICAg
IGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uQ1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUND
RVNTX1dSSVRFOwotICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLk1pc2NGbGFncyA9
IDA7Ci0gICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uU3RydWN0dXJlQnl0ZVN0cmlk
ZSA9IDA7Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUJ1ZmZlcigm
Y29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbiwgTlVMTCwgJm1Db25zdGFudEJ1ZmZlcik7Ci0gICAg
ICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1Db25z
dGFudEJ1ZmZlcjsKLX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvU2hhZGVy
RXhlY3V0YWJsZTExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL1NoYWRlckV4ZWN1dGFibGUxMS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBjNmVjMWNmN2QyY2RhZWJhNDRkNGE1Yjg1NTc5ZDE4Mjk3YTQxZmFkLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvU2hhZGVyRXhlY3V0YWJsZTExLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw0NyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBTaGFkZXJFeGVjdXRh
YmxlMTEuaDogRGVmaW5lcyBhIEQzRDExLXNwZWNpZmljIGNsYXNzIHRvIGNvbnRhaW4gc2hhZGVy
Ci0vLyBleGVjdXRhYmxlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuCi0KLSNpZm5kZWYgTElCR0xF
U1YyX1JFTkRFUkVSX1NIQURFUkVYRUNVVEFCTEUxMV9IXwotI2RlZmluZSBMSUJHTEVTVjJfUkVO
REVSRVJfU0hBREVSRVhFQ1VUQUJMRTExX0hfCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvU2hhZGVyRXhlY3V0YWJsZS5oIgotCi1uYW1lc3BhY2UgcngKLXsKLQotY2xhc3MgU2hhZGVy
RXhlY3V0YWJsZTExIDogcHVibGljIFNoYWRlckV4ZWN1dGFibGUKLXsKLSAgcHVibGljOgotICAg
IFNoYWRlckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwg
SUQzRDExUGl4ZWxTaGFkZXIgKmV4ZWN1dGFibGUpOwotICAgIFNoYWRlckV4ZWN1dGFibGUxMShj
b25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSUQzRDExVmVydGV4U2hhZGVyICpl
eGVjdXRhYmxlKTsKLSAgICBTaGFkZXJFeGVjdXRhYmxlMTEoY29uc3Qgdm9pZCAqZnVuY3Rpb24s
IHNpemVfdCBsZW5ndGgsIElEM0QxMUdlb21ldHJ5U2hhZGVyICpleGVjdXRhYmxlKTsKLQotICAg
IHZpcnR1YWwgflNoYWRlckV4ZWN1dGFibGUxMSgpOwotCi0gICAgc3RhdGljIFNoYWRlckV4ZWN1
dGFibGUxMSAqbWFrZVNoYWRlckV4ZWN1dGFibGUxMShTaGFkZXJFeGVjdXRhYmxlICpleGVjdXRh
YmxlKTsKLQotICAgIElEM0QxMVBpeGVsU2hhZGVyICpnZXRQaXhlbFNoYWRlcigpIGNvbnN0Owot
ICAgIElEM0QxMVZlcnRleFNoYWRlciAqZ2V0VmVydGV4U2hhZGVyKCkgY29uc3Q7Ci0gICAgSUQz
RDExR2VvbWV0cnlTaGFkZXIgKmdldEdlb21ldHJ5U2hhZGVyKCkgY29uc3Q7Ci0KLSAgICBJRDNE
MTFCdWZmZXIgKmdldENvbnN0YW50QnVmZmVyKElEM0QxMURldmljZSAqZGV2aWNlLCB1bnNpZ25l
ZCBpbnQgcmVnaXN0ZXJDb3VudCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oU2hhZGVyRXhlY3V0YWJsZTExKTsKLQotICAgIElEM0QxMVBpeGVsU2hhZGVyICpt
UGl4ZWxFeGVjdXRhYmxlOwotICAgIElEM0QxMVZlcnRleFNoYWRlciAqbVZlcnRleEV4ZWN1dGFi
bGU7Ci0gICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKm1HZW9tZXRyeUV4ZWN1dGFibGU7Ci0KLSAg
ICBJRDNEMTFCdWZmZXIgKm1Db25zdGFudEJ1ZmZlcjsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIExJ
QkdMRVNWMl9SRU5ERVJFUl9TSEFERVJFWEVDVVRBQkxFMTFfSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvU2hhZGVyRXhlY3V0YWJs
ZTkuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9T
aGFkZXJFeGVjdXRhYmxlOS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4ODY4
YTNmYmYzOGE1M2ZmNDlhODc1OTE2OGVlOTJlNDU3MGE5ODEuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlOS5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw2MCArMCwwIEBACi0jaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLS8vIFNoYWRlckV4ZWN1dGFibGU5LmNwcDogSW1wbGVtZW50cyBhIEQzRDktc3BlY2lmaWMg
Y2xhc3MgdG8gY29udGFpbiBzaGFkZXIKLS8vIGV4ZWN1dGFibGUgaW1wbGVtZW50YXRpb24gZGV0
YWlscy4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlOS5o
IgotCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0KLW5hbWVzcGFjZSByeAotewotCi1TaGFk
ZXJFeGVjdXRhYmxlOTo6U2hhZGVyRXhlY3V0YWJsZTkoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNp
emVfdCBsZW5ndGgsIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqZXhlY3V0YWJsZSkKLSAgICA6IFNo
YWRlckV4ZWN1dGFibGUoZnVuY3Rpb24sIGxlbmd0aCkKLXsKLSAgICBtUGl4ZWxFeGVjdXRhYmxl
ID0gZXhlY3V0YWJsZTsKLSAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7Ci19Ci0KLVNoYWRl
ckV4ZWN1dGFibGU5OjpTaGFkZXJFeGVjdXRhYmxlOShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6
ZV90IGxlbmd0aCwgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqZXhlY3V0YWJsZSkKLSAgICA6IFNo
YWRlckV4ZWN1dGFibGUoZnVuY3Rpb24sIGxlbmd0aCkKLXsKLSAgICBtVmVydGV4RXhlY3V0YWJs
ZSA9IGV4ZWN1dGFibGU7Ci0gICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7Ci19Ci0KLVNoYWRl
ckV4ZWN1dGFibGU5Ojp+U2hhZGVyRXhlY3V0YWJsZTkoKQotewotICAgIGlmIChtVmVydGV4RXhl
Y3V0YWJsZSkKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlLT5SZWxlYXNlKCk7Ci0g
ICAgfQotICAgIGlmIChtUGl4ZWxFeGVjdXRhYmxlKQotICAgIHsKLSAgICAgICAgbVBpeGVsRXhl
Y3V0YWJsZS0+UmVsZWFzZSgpOwotICAgIH0KLX0KLQotU2hhZGVyRXhlY3V0YWJsZTkgKlNoYWRl
ckV4ZWN1dGFibGU5OjptYWtlU2hhZGVyRXhlY3V0YWJsZTkoU2hhZGVyRXhlY3V0YWJsZSAqZXhl
Y3V0YWJsZSkKLXsKLSAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShTaGFkZXJFeGVjdXRhYmxl
OSosIGV4ZWN1dGFibGUpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2hhZGVyRXhlY3V0YWJs
ZTkqPihleGVjdXRhYmxlKTsKLX0KLQotSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqU2hhZGVyRXhl
Y3V0YWJsZTk6OmdldFZlcnRleFNoYWRlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1WZXJ0ZXhF
eGVjdXRhYmxlOwotfQotCi1JRGlyZWN0M0RQaXhlbFNoYWRlcjkgKlNoYWRlckV4ZWN1dGFibGU5
OjpnZXRQaXhlbFNoYWRlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1QaXhlbEV4ZWN1dGFibGU7
Ci19Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckV4ZWN1dGFibGU5
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1NoYWRl
ckV4ZWN1dGFibGU5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhMWU2YzI4NDRh
OThiYTQyNjhmMGRkZjJiNDk0YTM2ZDI3NmM1YmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlOS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAs
MCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gU2hhZGVyRXhlY3V0YWJsZTkuaDogRGVmaW5l
cyBhIEQzRDktc3BlY2lmaWMgY2xhc3MgdG8gY29udGFpbiBzaGFkZXIKLS8vIGV4ZWN1dGFibGUg
aW1wbGVtZW50YXRpb24gZGV0YWlscy4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfU0hB
REVSRVhFQ1VUQUJMRTlfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1NIQURFUkVYRUNV
VEFCTEU5X0hfCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvU2hhZGVyRXhlY3V0YWJs
ZS5oIgotCi1uYW1lc3BhY2UgcngKLXsKLQotY2xhc3MgU2hhZGVyRXhlY3V0YWJsZTkgOiBwdWJs
aWMgU2hhZGVyRXhlY3V0YWJsZQotewotICBwdWJsaWM6Ci0gICAgU2hhZGVyRXhlY3V0YWJsZTko
Y29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIElEaXJlY3QzRFBpeGVsU2hhZGVy
OSAqZXhlY3V0YWJsZSk7Ci0gICAgU2hhZGVyRXhlY3V0YWJsZTkoY29uc3Qgdm9pZCAqZnVuY3Rp
b24sIHNpemVfdCBsZW5ndGgsIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKmV4ZWN1dGFibGUpOwot
ICAgIHZpcnR1YWwgflNoYWRlckV4ZWN1dGFibGU5KCk7Ci0KLSAgICBzdGF0aWMgU2hhZGVyRXhl
Y3V0YWJsZTkgKm1ha2VTaGFkZXJFeGVjdXRhYmxlOShTaGFkZXJFeGVjdXRhYmxlICpleGVjdXRh
YmxlKTsKLQotICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqZ2V0UGl4ZWxTaGFkZXIoKSBjb25z
dDsKLSAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICpnZXRWZXJ0ZXhTaGFkZXIoKSBjb25zdDsK
LQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTaGFkZXJFeGVjdXRh
YmxlOSk7Ci0KLSAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKm1QaXhlbEV4ZWN1dGFibGU7Ci0g
ICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqbVZlcnRleEV4ZWN1dGFibGU7Ci19OwotCi19Ci0K
LSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfU0hBREVSRVhFQ1VUQUJMRTlfSF8KXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1N3YXBDaGFpbjExLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvU3dhcENoYWluMTEuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjJjZmU0MzBkZGQ5YWFlYmRjMWM5YjM2YjRjNWVjMWZk
MzczZmQ1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvU3dhcENoYWluMTEu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzc1ICswLDAgQEAKLSNpbmNsdWRlICJwcmVjb21waWxl
ZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gU3dhcENoYWluMTEuY3BwOiBJbXBsZW1lbnRz
IGEgYmFjay1lbmQgc3BlY2lmaWMgY2xhc3MgZm9yIHRoZSBEM0QxMSBzd2FwIGNoYWluLgotCi0j
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1N3YXBDaGFpbjExLmgiCi0KLSNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXIxMV91dGlscy5oIgotI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9SZW5kZXJlcjExLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL3No
YWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2gxMXZzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhMTFwcy5oIgotCi1uYW1lc3Bh
Y2UgcngKLXsKLQotU3dhcENoYWluMTE6OlN3YXBDaGFpbjExKFJlbmRlcmVyMTEgKnJlbmRlcmVy
LCBIV05EIHdpbmRvdywgSEFORExFIHNoYXJlSGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMZW51bSBiYWNrQnVmZmVyRm9ybWF0LCBHTGVudW0gZGVwdGhCdWZmZXJGb3JtYXQpCi0g
ICAgOiBtUmVuZGVyZXIocmVuZGVyZXIpLCBTd2FwQ2hhaW4od2luZG93LCBzaGFyZUhhbmRsZSwg
YmFja0J1ZmZlckZvcm1hdCwgZGVwdGhCdWZmZXJGb3JtYXQpCi17Ci0gICAgbVN3YXBDaGFpbiA9
IE5VTEw7Ci0gICAgbUJhY2tCdWZmZXJUZXh0dXJlID0gTlVMTDsKLSAgICBtQmFja0J1ZmZlclJU
VmlldyA9IE5VTEw7Ci0gICAgbU9mZnNjcmVlblRleHR1cmUgPSBOVUxMOwotICAgIG1PZmZzY3Jl
ZW5SVFZpZXcgPSBOVUxMOwotICAgIG1PZmZzY3JlZW5TUlZpZXcgPSBOVUxMOwotICAgIG1EZXB0
aFN0ZW5jaWxUZXh0dXJlID0gTlVMTDsKLSAgICBtRGVwdGhTdGVuY2lsRFNWaWV3ID0gTlVMTDsK
LSAgICBtUXVhZFZCID0gTlVMTDsKLSAgICBtUGFzc1Rocm91Z2hTYW1wbGVyID0gTlVMTDsKLSAg
ICBtUGFzc1Rocm91Z2hJTCA9IE5VTEw7Ci0gICAgbVBhc3NUaHJvdWdoVlMgPSBOVUxMOwotICAg
IG1QYXNzVGhyb3VnaFBTID0gTlVMTDsKLSAgICBtV2lkdGggPSAtMTsKLSAgICBtSGVpZ2h0ID0g
LTE7Ci0gICAgbVN3YXBJbnRlcnZhbCA9IDA7Ci0gICAgbUFwcENyZWF0ZWRTaGFyZUhhbmRsZSA9
IG1TaGFyZUhhbmRsZSAhPSBOVUxMOwotICAgIG1QYXNzVGhyb3VnaFJlc291cmNlc0luaXQgPSBm
YWxzZTsKLX0KLQotU3dhcENoYWluMTE6On5Td2FwQ2hhaW4xMSgpCi17Ci0gICAgcmVsZWFzZSgp
OwotfQotCi12b2lkIFN3YXBDaGFpbjExOjpyZWxlYXNlKCkKLXsKLSAgICBpZiAobVN3YXBDaGFp
bikKLSAgICB7Ci0gICAgICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsKLSAgICAgICAgbVN3YXBD
aGFpbiA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1CYWNrQnVmZmVyVGV4dHVyZSkKLSAgICB7
Ci0gICAgICAgIG1CYWNrQnVmZmVyVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICBtQmFja0J1
ZmZlclRleHR1cmUgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtQmFja0J1ZmZlclJUVmlldykK
LSAgICB7Ci0gICAgICAgIG1CYWNrQnVmZmVyUlRWaWV3LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1C
YWNrQnVmZmVyUlRWaWV3ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobU9mZnNjcmVlblRleHR1
cmUpCi0gICAgewotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAg
ICBtT2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1PZmZzY3JlZW5S
VFZpZXcpCi0gICAgewotICAgICAgICBtT2Zmc2NyZWVuUlRWaWV3LT5SZWxlYXNlKCk7Ci0gICAg
ICAgIG1PZmZzY3JlZW5SVFZpZXcgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtT2Zmc2NyZWVu
U1JWaWV3KQotICAgIHsKLSAgICAgICAgbU9mZnNjcmVlblNSVmlldy0+UmVsZWFzZSgpOwotICAg
ICAgICBtT2Zmc2NyZWVuU1JWaWV3ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobURlcHRoU3Rl
bmNpbFRleHR1cmUpCi0gICAgewotICAgICAgICBtRGVwdGhTdGVuY2lsVGV4dHVyZS0+UmVsZWFz
ZSgpOwotICAgICAgICBtRGVwdGhTdGVuY2lsVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQotCi0gICAg
aWYgKG1EZXB0aFN0ZW5jaWxEU1ZpZXcpCi0gICAgewotICAgICAgICBtRGVwdGhTdGVuY2lsRFNW
aWV3LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxEU1ZpZXcgPSBOVUxMOwotICAg
IH0KLQotICAgIGlmIChtUXVhZFZCKQotICAgIHsKLSAgICAgICAgbVF1YWRWQi0+UmVsZWFzZSgp
OwotICAgICAgICBtUXVhZFZCID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVBhc3NUaHJvdWdo
U2FtcGxlcikKLSAgICB7Ci0gICAgICAgIG1QYXNzVGhyb3VnaFNhbXBsZXItPlJlbGVhc2UoKTsK
LSAgICAgICAgbVBhc3NUaHJvdWdoU2FtcGxlciA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1Q
YXNzVGhyb3VnaElMKQotICAgIHsKLSAgICAgICAgbVBhc3NUaHJvdWdoSUwtPlJlbGVhc2UoKTsK
LSAgICAgICAgbVBhc3NUaHJvdWdoSUwgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtUGFzc1Ro
cm91Z2hWUykKLSAgICB7Ci0gICAgICAgIG1QYXNzVGhyb3VnaFZTLT5SZWxlYXNlKCk7Ci0gICAg
ICAgIG1QYXNzVGhyb3VnaFZTID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVBhc3NUaHJvdWdo
UFMpCi0gICAgewotICAgICAgICBtUGFzc1Rocm91Z2hQUy0+UmVsZWFzZSgpOwotICAgICAgICBt
UGFzc1Rocm91Z2hQUyA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKCFtQXBwQ3JlYXRlZFNoYXJl
SGFuZGxlKQotICAgIHsKLSAgICAgICAgbVNoYXJlSGFuZGxlID0gTlVMTDsKLSAgICB9Ci19Ci0K
LXZvaWQgU3dhcENoYWluMTE6OnJlbGVhc2VPZmZzY3JlZW5UZXh0dXJlKCkKLXsKLSAgICBpZiAo
bU9mZnNjcmVlblRleHR1cmUpCi0gICAgewotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+UmVs
ZWFzZSgpOwotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQotCi0gICAg
aWYgKG1PZmZzY3JlZW5SVFZpZXcpCi0gICAgewotICAgICAgICBtT2Zmc2NyZWVuUlRWaWV3LT5S
ZWxlYXNlKCk7Ci0gICAgICAgIG1PZmZzY3JlZW5SVFZpZXcgPSBOVUxMOwotICAgIH0KLQotICAg
IGlmIChtT2Zmc2NyZWVuU1JWaWV3KQotICAgIHsKLSAgICAgICAgbU9mZnNjcmVlblNSVmlldy0+
UmVsZWFzZSgpOwotICAgICAgICBtT2Zmc2NyZWVuU1JWaWV3ID0gTlVMTDsKLSAgICB9Ci0KLSAg
ICBpZiAobURlcHRoU3RlbmNpbFRleHR1cmUpCi0gICAgewotICAgICAgICBtRGVwdGhTdGVuY2ls
VGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICBtRGVwdGhTdGVuY2lsVGV4dHVyZSA9IE5VTEw7
Ci0gICAgfQotCi0gICAgaWYgKG1EZXB0aFN0ZW5jaWxEU1ZpZXcpCi0gICAgewotICAgICAgICBt
RGVwdGhTdGVuY2lsRFNWaWV3LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxEU1Zp
ZXcgPSBOVUxMOwotICAgIH0KLX0KLQotRUdMaW50IFN3YXBDaGFpbjExOjpyZXNldE9mZnNjcmVl
blRleHR1cmUoaW50IGJhY2tidWZmZXJXaWR0aCwgaW50IGJhY2tidWZmZXJIZWlnaHQpCi17Ci0g
ICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0gICAg
QVNTRVJUKGRldmljZSAhPSBOVUxMKTsKLQotICAgIC8vIEQzRDExIGRvZXMgbm90IGFsbG93IHpl
cm8gc2l6ZSB0ZXh0dXJlcwotICAgIEFTU0VSVChiYWNrYnVmZmVyV2lkdGggPj0gMSk7Ci0gICAg
QVNTRVJUKGJhY2tidWZmZXJIZWlnaHQgPj0gMSk7Ci0KLSAgICAvLyBQcmVzZXJ2ZSB0aGUgcmVu
ZGVyIHRhcmdldCBjb250ZW50Ci0gICAgSUQzRDExVGV4dHVyZTJEICpwcmV2aW91c09mZnNjcmVl
blRleHR1cmUgPSBtT2Zmc2NyZWVuVGV4dHVyZTsKLSAgICBpZiAocHJldmlvdXNPZmZzY3JlZW5U
ZXh0dXJlKQotICAgIHsKLSAgICAgICAgcHJldmlvdXNPZmZzY3JlZW5UZXh0dXJlLT5BZGRSZWYo
KTsKLSAgICB9Ci0gICAgY29uc3QgaW50IHByZXZpb3VzV2lkdGggPSBtV2lkdGg7Ci0gICAgY29u
c3QgaW50IHByZXZpb3VzSGVpZ2h0ID0gbUhlaWdodDsKLQotICAgIHJlbGVhc2VPZmZzY3JlZW5U
ZXh0dXJlKCk7Ci0KLSAgICAvLyBJZiB0aGUgYXBwIHBhc3NlZCBpbiBhIHNoYXJlIGhhbmRsZSwg
b3BlbiB0aGUgcmVzb3VyY2UKLSAgICAvLyBTZWUgRUdMX0FOR0xFX2QzZF9zaGFyZV9oYW5kbGVf
Y2xpZW50X2J1ZmZlcgotICAgIGlmIChtQXBwQ3JlYXRlZFNoYXJlSGFuZGxlKQotICAgIHsKLSAg
ICAgICAgSUQzRDExUmVzb3VyY2UgKnRlbXBSZXNvdXJjZTExOwotICAgICAgICBIUkVTVUxUIHJl
c3VsdCA9IGRldmljZS0+T3BlblNoYXJlZFJlc291cmNlKG1TaGFyZUhhbmRsZSwgX191dWlkb2Yo
SUQzRDExUmVzb3VyY2UpLCAodm9pZCoqKSZ0ZW1wUmVzb3VyY2UxMSk7Ci0KLSAgICAgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBv
cGVuIHRoZSBzd2FwIGNoYWluIHBidWZmZXIgc2hhcmUgaGFuZGxlOiAlMDhsWCIsIHJlc3VsdCk7
Ci0gICAgICAgICAgICByZWxlYXNlKCk7Ci0gICAgICAgICAgICByZXR1cm4gRUdMX0JBRF9QQVJB
TUVURVI7Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHQgPSB0ZW1wUmVzb3VyY2UxMS0+UXVl
cnlJbnRlcmZhY2UoX191dWlkb2YoSUQzRDExVGV4dHVyZTJEKSwgKHZvaWQqKikmbU9mZnNjcmVl
blRleHR1cmUpOwotICAgICAgICB0ZW1wUmVzb3VyY2UxMS0+UmVsZWFzZSgpOwotCi0gICAgICAg
IGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJGYWlsZWQg
dG8gcXVlcnkgdGV4dHVyZTJkIGludGVyZmFjZSBpbiBwYnVmZmVyIHNoYXJlIGhhbmRsZTogJTA4
bFgiLCByZXN1bHQpOwotICAgICAgICAgICAgcmVsZWFzZSgpOwotICAgICAgICAgICAgcmV0dXJu
IEVHTF9CQURfUEFSQU1FVEVSOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVmFsaWRhdGUgb2Zm
c2NyZWVuIHRleHR1cmUgcGFyYW1ldGVycwotICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBv
ZmZzY3JlZW5UZXh0dXJlRGVzYyA9IHswfTsKLSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUtPkdl
dERlc2MoJm9mZnNjcmVlblRleHR1cmVEZXNjKTsKLQotICAgICAgICBpZiAob2Zmc2NyZWVuVGV4
dHVyZURlc2MuV2lkdGggIT0gKFVJTlQpYmFja2J1ZmZlcldpZHRoCi0gICAgICAgICAgICB8fCBv
ZmZzY3JlZW5UZXh0dXJlRGVzYy5IZWlnaHQgIT0gKFVJTlQpYmFja2J1ZmZlckhlaWdodAotICAg
ICAgICAgICAgfHwgb2Zmc2NyZWVuVGV4dHVyZURlc2MuRm9ybWF0ICE9IGdsX2QzZDExOjpDb252
ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0KQotICAgICAgICAgICAgfHwg
b2Zmc2NyZWVuVGV4dHVyZURlc2MuTWlwTGV2ZWxzICE9IDEKLSAgICAgICAgICAgIHx8IG9mZnNj
cmVlblRleHR1cmVEZXNjLkFycmF5U2l6ZSAhPSAxKQotICAgICAgICB7Ci0gICAgICAgICAgICBF
UlIoIkludmFsaWQgdGV4dHVyZSBwYXJhbWV0ZXJzIGluIHRoZSBzaGFyZWQgb2Zmc2NyZWVuIHRl
eHR1cmUgcGJ1ZmZlciIpOwotICAgICAgICAgICAgcmVsZWFzZSgpOwotICAgICAgICAgICAgcmV0
dXJuIEVHTF9CQURfUEFSQU1FVEVSOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgIGNvbnN0IGJvb2wgdXNlU2hhcmVkUmVzb3VyY2UgPSAhbVdpbmRvdyAmJiBtUmVu
ZGVyZXItPmdldFNoYXJlSGFuZGxlU3VwcG9ydCgpOwotCi0gICAgICAgIEQzRDExX1RFWFRVUkUy
RF9ERVNDIG9mZnNjcmVlblRleHR1cmVEZXNjID0gezB9OwotICAgICAgICBvZmZzY3JlZW5UZXh0
dXJlRGVzYy5XaWR0aCA9IGJhY2tidWZmZXJXaWR0aDsKLSAgICAgICAgb2Zmc2NyZWVuVGV4dHVy
ZURlc2MuSGVpZ2h0ID0gYmFja2J1ZmZlckhlaWdodDsKLSAgICAgICAgb2Zmc2NyZWVuVGV4dHVy
ZURlc2MuRm9ybWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobUJhY2tC
dWZmZXJGb3JtYXQpOwotICAgICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5NaXBMZXZlbHMgPSAx
OwotICAgICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5BcnJheVNpemUgPSAxOwotICAgICAgICBv
ZmZzY3JlZW5UZXh0dXJlRGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gMTsKLSAgICAgICAgb2Zmc2Ny
ZWVuVGV4dHVyZURlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKLSAgICAgICAgb2Zmc2NyZWVu
VGV4dHVyZURlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOwotICAgICAgICBvZmZzY3Jl
ZW5UZXh0dXJlRGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1JFTkRFUl9UQVJHRVQgfCBEM0Qx
MV9CSU5EX1NIQURFUl9SRVNPVVJDRTsKLSAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuQ1BV
QWNjZXNzRmxhZ3MgPSAwOwotICAgICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5NaXNjRmxhZ3Mg
PSB1c2VTaGFyZWRSZXNvdXJjZSA/IEQzRDExX1JFU09VUkNFX01JU0NfU0hBUkVEIDogMDsKLQot
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZvZmZzY3Jl
ZW5UZXh0dXJlRGVzYywgTlVMTCwgJm1PZmZzY3JlZW5UZXh0dXJlKTsKLQotICAgICAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNy
ZWF0ZSBvZmZzY3JlZW4gdGV4dHVyZTogJTA4bFgiLCByZXN1bHQpOwotICAgICAgICAgICAgcmVs
ZWFzZSgpOwotCi0gICAgICAgICAgICBpZiAoZDNkMTE6OmlzRGV2aWNlTG9zdEVycm9yKHJlc3Vs
dCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEVHTF9DT05URVhUX0xP
U1Q7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIEVHTF9CQURfQUxMT0M7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1PZmZzY3JlZW5UZXh0dXJlLCAiT2Zm
c2NyZWVuIHRleHR1cmUiKTsKLQotICAgICAgICAvLyBFR0xfQU5HTEVfc3VyZmFjZV9kM2RfdGV4
dHVyZV8yZF9zaGFyZV9oYW5kbGUgcmVxdWlyZXMgdGhhdCB3ZSBzdG9yZSBhIHNoYXJlIGhhbmRs
ZSBmb3IgdGhlIGNsaWVudAotICAgICAgICBpZiAodXNlU2hhcmVkUmVzb3VyY2UpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIElEWEdJUmVzb3VyY2UgKm9mZnNjcmVlblRleHR1cmVSZXNvdXJjZSA9
IE5VTEw7Ci0gICAgICAgICAgICByZXN1bHQgPSBtT2Zmc2NyZWVuVGV4dHVyZS0+UXVlcnlJbnRl
cmZhY2UoX191dWlkb2YoSURYR0lSZXNvdXJjZSksICh2b2lkKiopJm9mZnNjcmVlblRleHR1cmVS
ZXNvdXJjZSk7Ci0KLSAgICAgICAgICAgIC8vIEZhbGwgYmFjayB0byBubyBzaGFyZSBoYW5kbGUg
b24gZmFpbHVyZQotICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIEVSUigiQ291bGQgbm90IHF1ZXJ5IG9mZnNjcmVlbiB0ZXh0dXJl
IHJlc291cmNlOiAlMDhsWCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gb2Zmc2NyZWVuVGV4
dHVyZVJlc291cmNlLT5HZXRTaGFyZWRIYW5kbGUoJm1TaGFyZUhhbmRsZSk7Ci0gICAgICAgICAg
ICAgICAgb2Zmc2NyZWVuVGV4dHVyZVJlc291cmNlLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBtU2hhcmVIYW5kbGUgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBFUlIoIkNv
dWxkIG5vdCBnZXQgb2Zmc2NyZWVuIHRleHR1cmUgc2hhcmVkIGhhbmRsZTogJTA4bFgiLCByZXN1
bHQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LSAgICAgICAgCi0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdl
dFZpZXcobU9mZnNjcmVlblRleHR1cmUsIE5VTEwsICZtT2Zmc2NyZWVuUlRWaWV3KTsKLQotICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgZDNkMTE6OlNldERlYnVnTmFtZShtT2Zm
c2NyZWVuUlRWaWV3LCAiT2Zmc2NyZWVuIHJlbmRlciB0YXJnZXQiKTsKLQotICAgIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KG1PZmZzY3JlZW5UZXh0dXJlLCBOVUxM
LCAmbU9mZnNjcmVlblNSVmlldyk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAg
ICBkM2QxMTo6U2V0RGVidWdOYW1lKG1PZmZzY3JlZW5TUlZpZXcsICJPZmZzY3JlZW4gc2hhZGVy
IHJlc291cmNlIik7Ci0KLSAgICBpZiAobURlcHRoQnVmZmVyRm9ybWF0ICE9IEdMX05PTkUpCi0g
ICAgewotICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXB0aFN0ZW5jaWxEZXNjID0gezB9
OwotICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLldpZHRoID0gYmFja2J1ZmZlcldpZHRoOwotICAg
ICAgICBkZXB0aFN0ZW5jaWxEZXNjLkhlaWdodCA9IGJhY2tidWZmZXJIZWlnaHQ7Ci0gICAgICAg
IGRlcHRoU3RlbmNpbERlc2MuRm9ybWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRSZW5kZXJidWZmZXJG
b3JtYXQobURlcHRoQnVmZmVyRm9ybWF0KTsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5NaXBM
ZXZlbHMgPSAxOwotICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLkFycmF5U2l6ZSA9IDE7Ci0gICAg
ICAgIGRlcHRoU3RlbmNpbERlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7Ci0gICAgICAgIGRlcHRo
U3RlbmNpbERlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKLSAgICAgICAgZGVwdGhTdGVuY2ls
RGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7Ci0gICAgICAgIGRlcHRoU3RlbmNpbERl
c2MuQmluZEZsYWdzID0gRDNEMTFfQklORF9ERVBUSF9TVEVOQ0lMOwotICAgICAgICBkZXB0aFN0
ZW5jaWxEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5N
aXNjRmxhZ3MgPSAwOwotCi0gICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJE
KCZkZXB0aFN0ZW5jaWxEZXNjLCBOVUxMLCAmbURlcHRoU3RlbmNpbFRleHR1cmUpOwotICAgICAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiQ291bGQg
bm90IGNyZWF0ZSBkZXB0aHN0ZW5jaWwgc3VyZmFjZSBmb3IgbmV3IHN3YXAgY2hhaW46IDB4JTA4
WCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZWxlYXNlKCk7Ci0KLSAgICAgICAgICAgIGlmIChk
M2QxMTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gRUdMX0NPTlRFWFRfTE9TVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gRUdMX0JBRF9B
TExPQzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBkM2QxMTo6U2V0RGVidWdO
YW1lKG1EZXB0aFN0ZW5jaWxUZXh0dXJlLCAiRGVwdGggc3RlbmNpbCB0ZXh0dXJlIik7Ci0KLSAg
ICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxWaWV3KG1EZXB0aFN0ZW5j
aWxUZXh0dXJlLCBOVUxMLCAmbURlcHRoU3RlbmNpbERTVmlldyk7Ci0gICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobURlcHRoU3Rl
bmNpbERTVmlldywgIkRlcHRoIHN0ZW5jaWwgdmlldyIpOwotICAgIH0KLQotICAgIG1XaWR0aCA9
IGJhY2tidWZmZXJXaWR0aDsKLSAgICBtSGVpZ2h0ID0gYmFja2J1ZmZlckhlaWdodDsKLQotICAg
IGlmIChwcmV2aW91c09mZnNjcmVlblRleHR1cmUgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIEQz
RDExX0JPWCBzb3VyY2VCb3ggPSB7MH07Ci0gICAgICAgIHNvdXJjZUJveC5sZWZ0ID0gMDsKLSAg
ICAgICAgc291cmNlQm94LnJpZ2h0ID0gc3RkOjptaW4ocHJldmlvdXNXaWR0aCwgbVdpZHRoKTsK
LSAgICAgICAgc291cmNlQm94LnRvcCA9IHN0ZDo6bWF4KHByZXZpb3VzSGVpZ2h0IC0gbUhlaWdo
dCwgMCk7Ci0gICAgICAgIHNvdXJjZUJveC5ib3R0b20gPSBwcmV2aW91c0hlaWdodDsKLSAgICAg
ICAgc291cmNlQm94LmZyb250ID0gMDsKLSAgICAgICAgc291cmNlQm94LmJhY2sgPSAxOwotCi0g
ICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmRldmljZUNvbnRleHQgPSBtUmVuZGVyZXItPmdl
dERldmljZUNvbnRleHQoKTsKLSAgICAgICAgY29uc3QgaW50IHlvZmZzZXQgPSBzdGQ6Om1heCht
SGVpZ2h0IC0gcHJldmlvdXNIZWlnaHQsIDApOwotICAgICAgICBkZXZpY2VDb250ZXh0LT5Db3B5
U3VicmVzb3VyY2VSZWdpb24obU9mZnNjcmVlblRleHR1cmUsIDAsIDAsIHlvZmZzZXQsIDAsIHBy
ZXZpb3VzT2Zmc2NyZWVuVGV4dHVyZSwgMCwgJnNvdXJjZUJveCk7Ci0KLSAgICAgICAgcHJldmlv
dXNPZmZzY3JlZW5UZXh0dXJlLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgaWYgKG1Td2FwQ2hhaW4p
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHN3YXBSZWN0KDAsIDAsIG1XaWR0aCwgbUhlaWdodCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gRUdMX1NVQ0NFU1M7Ci19Ci0KLUVHTGlu
dCBTd2FwQ2hhaW4xMTo6cmVzaXplKEVHTGludCBiYWNrYnVmZmVyV2lkdGgsIEVHTGludCBiYWNr
YnVmZmVySGVpZ2h0KQotewotICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5n
ZXREZXZpY2UoKTsKLQotICAgIGlmIChkZXZpY2UgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBFR0xfQkFEX0FDQ0VTUzsKLSAgICB9Ci0KLSAgICAvLyBDYW4gb25seSBjYWxsIHJlc2l6
ZSBpZiB3ZSBoYXZlIGFscmVhZHkgY3JlYXRlZCBvdXIgc3dhcCBidWZmZXIgYW5kIHJlc291cmNl
cwotICAgIEFTU0VSVChtU3dhcENoYWluICYmIG1CYWNrQnVmZmVyVGV4dHVyZSAmJiBtQmFja0J1
ZmZlclJUVmlldyk7Ci0KLSAgICBpZiAobUJhY2tCdWZmZXJUZXh0dXJlKQotICAgIHsKLSAgICAg
ICAgbUJhY2tCdWZmZXJUZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1CYWNrQnVmZmVyVGV4
dHVyZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1CYWNrQnVmZmVyUlRWaWV3KQotICAgIHsK
LSAgICAgICAgbUJhY2tCdWZmZXJSVFZpZXctPlJlbGVhc2UoKTsKLSAgICAgICAgbUJhY2tCdWZm
ZXJSVFZpZXcgPSBOVUxMOwotICAgIH0KLQotICAgIC8vIFJlc2l6ZSBzd2FwIGNoYWluCi0gICAg
RFhHSV9GT1JNQVQgYmFja2J1ZmZlckRYR0lGb3JtYXQgPSBnbF9kM2QxMTo6Q29udmVydFJlbmRl
cmJ1ZmZlckZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCk7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBt
U3dhcENoYWluLT5SZXNpemVCdWZmZXJzKDIsIGJhY2tidWZmZXJXaWR0aCwgYmFja2J1ZmZlckhl
aWdodCwgYmFja2J1ZmZlckRYR0lGb3JtYXQsIDApOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQp
KQotICAgIHsKLSAgICAgICAgRVJSKCJFcnJvciByZXNpemluZyBzd2FwIGNoYWluIGJ1ZmZlcnM6
IDB4JTA4WCIsIHJlc3VsdCk7Ci0gICAgICAgIHJlbGVhc2UoKTsKLQotICAgICAgICBpZiAoZDNk
MTE6OmlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBFR0xfQ09OVEVYVF9MT1NUOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIEVHTF9CQURfQUxMT0M7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXN1bHQgPSBtU3dhcENoYWluLT5HZXRCdWZmZXIoMCwgX191dWlkb2YoSUQzRDExVGV4
dHVyZTJEKSwgKExQVk9JRCopJm1CYWNrQnVmZmVyVGV4dHVyZSk7Ci0gICAgQVNTRVJUKFNVQ0NF
RURFRChyZXN1bHQpKTsKLSAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAgewotICAgICAg
ICBkM2QxMTo6U2V0RGVidWdOYW1lKG1CYWNrQnVmZmVyVGV4dHVyZSwgIkJhY2sgYnVmZmVyIHRl
eHR1cmUiKTsKLSAgICB9Ci0KLSAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdl
dFZpZXcobUJhY2tCdWZmZXJUZXh0dXJlLCBOVUxMLCAmbUJhY2tCdWZmZXJSVFZpZXcpOwotICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQot
ICAgIHsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQmFja0J1ZmZlclJUVmlldywgIkJh
Y2sgYnVmZmVyIHJlbmRlciB0YXJnZXQiKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzZXRPZmZz
Y3JlZW5UZXh0dXJlKGJhY2tidWZmZXJXaWR0aCwgYmFja2J1ZmZlckhlaWdodCk7Ci19Ci0KLUVH
TGludCBTd2FwQ2hhaW4xMTo6cmVzZXQoaW50IGJhY2tidWZmZXJXaWR0aCwgaW50IGJhY2tidWZm
ZXJIZWlnaHQsIEVHTGludCBzd2FwSW50ZXJ2YWwpCi17Ci0gICAgSUQzRDExRGV2aWNlICpkZXZp
Y2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0gICAgaWYgKGRldmljZSA9PSBOVUxMKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEVHTF9CQURfQUNDRVNTOwotICAgIH0KLQotICAgIC8vIFJl
bGVhc2Ugc3BlY2lmaWMgcmVzb3VyY2VzIHRvIGZyZWUgdXAgbWVtb3J5IGZvciB0aGUgbmV3IHJl
bmRlciB0YXJnZXQsIHdoaWxlIHRoZQotICAgIC8vIG9sZCByZW5kZXIgdGFyZ2V0IHN0aWxsIGV4
aXN0cyBmb3IgdGhlIHB1cnBvc2Ugb2YgcHJlc2VydmluZyBpdHMgY29udGVudHMuCi0gICAgaWYg
KG1Td2FwQ2hhaW4pCi0gICAgewotICAgICAgICBtU3dhcENoYWluLT5SZWxlYXNlKCk7Ci0gICAg
ICAgIG1Td2FwQ2hhaW4gPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtQmFja0J1ZmZlclRleHR1
cmUpCi0gICAgewotICAgICAgICBtQmFja0J1ZmZlclRleHR1cmUtPlJlbGVhc2UoKTsKLSAgICAg
ICAgbUJhY2tCdWZmZXJUZXh0dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobUJhY2tCdWZm
ZXJSVFZpZXcpCi0gICAgewotICAgICAgICBtQmFja0J1ZmZlclJUVmlldy0+UmVsZWFzZSgpOwot
ICAgICAgICBtQmFja0J1ZmZlclJUVmlldyA9IE5VTEw7Ci0gICAgfQotCi0gICAgbVN3YXBJbnRl
cnZhbCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oc3dhcEludGVydmFsKTsKLSAgICBpZiAo
bVN3YXBJbnRlcnZhbCA+IDQpCi0gICAgewotICAgICAgICAvLyBJRFhHSVN3YXBDaGFpbjo6UHJl
c2VudCBkb2N1bWVudGF0aW9uIHN0YXRlcyB0aGF0IHZhbGlkIHN5bmMgaW50ZXJ2YWxzIGFyZSBp
biB0aGUgWzAsNF0gcmFuZ2UKLSAgICAgICAgcmV0dXJuIEVHTF9CQURfUEFSQU1FVEVSOwotICAg
IH0KLQotICAgIC8vIEVHTCBhbGxvd3MgY3JlYXRpbmcgYSBzdXJmYWNlIHdpdGggMHgwIGRpbWVu
c2lvbiwgaG93ZXZlciwgRFhHSSBkb2VzIG5vdCBsaWtlIDB4MCBzd2FwY2hhaW5zCi0gICAgaWYg
KGJhY2tidWZmZXJXaWR0aCA8IDEgfHwgYmFja2J1ZmZlckhlaWdodCA8IDEpCi0gICAgewotICAg
ICAgICByZWxlYXNlT2Zmc2NyZWVuVGV4dHVyZSgpOwotICAgICAgICByZXR1cm4gRUdMX1NVQ0NF
U1M7Ci0gICAgfQotCi0gICAgaWYgKG1XaW5kb3cpCi0gICAgewotICAgICAgICBJRFhHSUZhY3Rv
cnkgKmZhY3RvcnkgPSBtUmVuZGVyZXItPmdldER4Z2lGYWN0b3J5KCk7Ci0KLSAgICAgICAgRFhH
SV9TV0FQX0NIQUlOX0RFU0Mgc3dhcENoYWluRGVzYyA9IHswfTsKLSAgICAgICAgc3dhcENoYWlu
RGVzYy5CdWZmZXJDb3VudCA9IDI7Ci0gICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyRGVzYy5G
b3JtYXQgPSBnbF9kM2QxMTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtQmFja0J1ZmZlckZv
cm1hdCk7Ci0gICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyRGVzYy5XaWR0aCA9IGJhY2tidWZm
ZXJXaWR0aDsKLSAgICAgICAgc3dhcENoYWluRGVzYy5CdWZmZXJEZXNjLkhlaWdodCA9IGJhY2ti
dWZmZXJIZWlnaHQ7Ci0gICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyRGVzYy5TY2FsaW5nID0g
RFhHSV9NT0RFX1NDQUxJTkdfVU5TUEVDSUZJRUQ7Ci0gICAgICAgIHN3YXBDaGFpbkRlc2MuQnVm
ZmVyRGVzYy5TY2FubGluZU9yZGVyaW5nID0gRFhHSV9NT0RFX1NDQU5MSU5FX09SREVSX1VOU1BF
Q0lGSUVEOwotICAgICAgICBzd2FwQ2hhaW5EZXNjLkJ1ZmZlckRlc2MuUmVmcmVzaFJhdGUuTnVt
ZXJhdG9yID0gMDsKLSAgICAgICAgc3dhcENoYWluRGVzYy5CdWZmZXJEZXNjLlJlZnJlc2hSYXRl
LkRlbm9taW5hdG9yID0gMTsKLSAgICAgICAgc3dhcENoYWluRGVzYy5CdWZmZXJVc2FnZSA9IERY
R0lfVVNBR0VfUkVOREVSX1RBUkdFVF9PVVRQVVQ7Ci0gICAgICAgIHN3YXBDaGFpbkRlc2MuRmxh
Z3MgPSAwOwotICAgICAgICBzd2FwQ2hhaW5EZXNjLk91dHB1dFdpbmRvdyA9IG1XaW5kb3c7Ci0g
ICAgICAgIHN3YXBDaGFpbkRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7Ci0gICAgICAgIHN3YXBD
aGFpbkRlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKLSAgICAgICAgc3dhcENoYWluRGVzYy5X
aW5kb3dlZCA9IFRSVUU7Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBmYWN0b3J5LT5DcmVh
dGVTd2FwQ2hhaW4oZGV2aWNlLCAmc3dhcENoYWluRGVzYywgJm1Td2FwQ2hhaW4pOwotCi0gICAg
ICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJDb3Vs
ZCBub3QgY3JlYXRlIGFkZGl0aW9uYWwgc3dhcCBjaGFpbnMgb3Igb2Zmc2NyZWVuIHN1cmZhY2Vz
OiAlMDhsWCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZWxlYXNlKCk7Ci0KLSAgICAgICAgICAg
IGlmIChkM2QxMTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gRUdMX0NPTlRFWFRfTE9TVDsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBjYW5u
b3QgY3JlYXRlIGEgc3dhcCBjaGFpbiBmb3IgYW4gSFdORCB0aGF0IGlzIG93bmVkIGJ5IGEgZGlm
ZmVyZW50IHByb2Nlc3Mgb24gc29tZSB2ZXJzaW9ucyBvZgotICAgICAgICAgICAgICAgIC8vIHdp
bmRvd3MKLSAgICAgICAgICAgICAgICBEV09SRCBjdXJyZW50UHJvY2Vzc0lkID0gR2V0Q3VycmVu
dFByb2Nlc3NJZCgpOwotICAgICAgICAgICAgICAgIERXT1JEIHduZFByb2Nlc3NJZDsKLSAgICAg
ICAgICAgICAgICBHZXRXaW5kb3dUaHJlYWRQcm9jZXNzSWQobVdpbmRvdywgJnduZFByb2Nlc3NJ
ZCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY3VycmVudFByb2Nlc3NJZCAhPSB3bmRQcm9jZXNz
SWQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBFUlIoIkNvdWxkIG5v
dCBjcmVhdGUgc3dhcCBjaGFpbiwgd2luZG93IG93bmVkIGJ5IGRpZmZlcmVudCBwcm9jZXNzIik7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBFR0xfQkFEX05BVElWRV9XSU5ET1c7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBFR0xfQkFEX0FMTE9DOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJlc3VsdCA9IG1Td2FwQ2hh
aW4tPkdldEJ1ZmZlcigwLCBfX3V1aWRvZihJRDNEMTFUZXh0dXJlMkQpLCAoTFBWT0lEKikmbUJh
Y2tCdWZmZXJUZXh0dXJlKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAg
ICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQmFja0J1ZmZlclRleHR1cmUsICJCYWNrIGJ1ZmZl
ciB0ZXh0dXJlIik7Ci0KLSAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJn
ZXRWaWV3KG1CYWNrQnVmZmVyVGV4dHVyZSwgTlVMTCwgJm1CYWNrQnVmZmVyUlRWaWV3KTsKLSAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVn
TmFtZShtQmFja0J1ZmZlclJUVmlldywgIkJhY2sgYnVmZmVyIHJlbmRlciB0YXJnZXQiKTsKLSAg
ICB9Ci0KLSAgICAvLyBJZiB3ZSBhcmUgcmVzaXppbmcgdGhlIHN3YXAgY2hhaW4sIHdlIGRvbid0
IHdpc2ggdG8gcmVjcmVhdGUgYWxsIHRoZSBzdGF0aWMgcmVzb3VyY2VzCi0gICAgaWYgKCFtUGFz
c1Rocm91Z2hSZXNvdXJjZXNJbml0KQotICAgIHsKLSAgICAgICAgbVBhc3NUaHJvdWdoUmVzb3Vy
Y2VzSW5pdCA9IHRydWU7Ci0gICAgICAgIGluaXRQYXNzVGhyb3VnaFJlc291cmNlcygpOwotICAg
IH0KLQotICAgIHJldHVybiByZXNldE9mZnNjcmVlblRleHR1cmUoYmFja2J1ZmZlcldpZHRoLCBi
YWNrYnVmZmVySGVpZ2h0KTsKLX0KLQotdm9pZCBTd2FwQ2hhaW4xMTo6aW5pdFBhc3NUaHJvdWdo
UmVzb3VyY2VzKCkKLXsKLSAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0
RGV2aWNlKCk7Ci0KLSAgICBBU1NFUlQoZGV2aWNlICE9IE5VTEwpOwotCi0gICAgLy8gTWFrZSBz
dXJlIG91ciByZXNvdXJjZXMgYXJlIGFsbCBub3QgYWxsb2NhdGVkLCB3aGVuIHdlIGNyZWF0ZQot
ICAgIEFTU0VSVChtUXVhZFZCID09IE5VTEwgJiYgbVBhc3NUaHJvdWdoU2FtcGxlciA9PSBOVUxM
KTsKLSAgICBBU1NFUlQobVBhc3NUaHJvdWdoSUwgPT0gTlVMTCAmJiBtUGFzc1Rocm91Z2hWUyA9
PSBOVUxMICYmIG1QYXNzVGhyb3VnaFBTID09IE5VTEwpOwotCi0gICAgRDNEMTFfQlVGRkVSX0RF
U0MgdmJEZXNjOwotICAgIHZiRGVzYy5CeXRlV2lkdGggPSBzaXplb2YoZDNkMTE6OlBvc2l0aW9u
VGV4Q29vcmRWZXJ0ZXgpICogNDsKLSAgICB2YkRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9EWU5B
TUlDOwotICAgIHZiRGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1ZFUlRFWF9CVUZGRVI7Ci0g
ICAgdmJEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsKLSAgICB2
YkRlc2MuTWlzY0ZsYWdzID0gMDsKLSAgICB2YkRlc2MuU3RydWN0dXJlQnl0ZVN0cmlkZSA9IDA7
Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZ2YkRlc2MsIE5V
TEwsICZtUXVhZFZCKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIGQzZDEx
OjpTZXREZWJ1Z05hbWUobVF1YWRWQiwgIlN3YXAgY2hhaW4gcXVhZCB2ZXJ0ZXggYnVmZmVyIik7
Ci0KLSAgICBEM0QxMV9TQU1QTEVSX0RFU0Mgc2FtcGxlckRlc2M7Ci0gICAgc2FtcGxlckRlc2Mu
RmlsdGVyID0gRDNEMTFfRklMVEVSX01JTl9NQUdfTUlQX1BPSU5UOwotICAgIHNhbXBsZXJEZXNj
LkFkZHJlc3NVID0gRDNEMTFfVEVYVFVSRV9BRERSRVNTX0NMQU1QOwotICAgIHNhbXBsZXJEZXNj
LkFkZHJlc3NWID0gRDNEMTFfVEVYVFVSRV9BRERSRVNTX0NMQU1QOwotICAgIHNhbXBsZXJEZXNj
LkFkZHJlc3NXID0gRDNEMTFfVEVYVFVSRV9BRERSRVNTX0NMQU1QOwotICAgIHNhbXBsZXJEZXNj
Lk1pcExPREJpYXMgPSAwLjBmOwotICAgIHNhbXBsZXJEZXNjLk1heEFuaXNvdHJvcHkgPSAwOwot
ICAgIHNhbXBsZXJEZXNjLkNvbXBhcmlzb25GdW5jID0gRDNEMTFfQ09NUEFSSVNPTl9ORVZFUjsK
LSAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclswXSA9IDAuMGY7Ci0gICAgc2FtcGxlckRlc2Mu
Qm9yZGVyQ29sb3JbMV0gPSAwLjBmOwotICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzJdID0g
MC4wZjsKLSAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclszXSA9IDAuMGY7Ci0gICAgc2FtcGxl
ckRlc2MuTWluTE9EID0gMDsKLSAgICBzYW1wbGVyRGVzYy5NYXhMT0QgPSBEM0QxMV9GTE9BVDMy
X01BWDsKLQotICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2FtcGxlclN0YXRlKCZzYW1wbGVy
RGVzYywgJm1QYXNzVGhyb3VnaFNhbXBsZXIpOwotICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7Ci0gICAgZDNkMTE6OlNldERlYnVnTmFtZShtUGFzc1Rocm91Z2hTYW1wbGVyLCAiU3dhcCBj
aGFpbiBwYXNzIHRocm91Z2ggc2FtcGxlciIpOwotCi0gICAgRDNEMTFfSU5QVVRfRUxFTUVOVF9E
RVNDIHF1YWRMYXlvdXRbXSA9Ci0gICAgewotICAgICAgICB7ICJQT1NJVElPTiIsIDAsIERYR0lf
Rk9STUFUX1IzMkczMl9GTE9BVCwgMCwgMCwgRDNEMTFfSU5QVVRfUEVSX1ZFUlRFWF9EQVRBLCAw
IH0sCi0gICAgICAgIHsgIlRFWENPT1JEIiwgMCwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCAw
LCA4LCBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAgfSwKLSAgICB9OwotCi0gICAgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVJbnB1dExheW91dChxdWFkTGF5b3V0LCAyLCBnX1ZTX1Bhc3N0
aHJvdWdoLCBzaXplb2YoZ19WU19QYXNzdGhyb3VnaCksICZtUGFzc1Rocm91Z2hJTCk7Ci0gICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1QYXNz
VGhyb3VnaElMLCAiU3dhcCBjaGFpbiBwYXNzIHRocm91Z2ggbGF5b3V0Iik7Ci0KLSAgICByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZVZlcnRleFNoYWRlcihnX1ZTX1Bhc3N0aHJvdWdoLCBzaXplb2Yo
Z19WU19QYXNzdGhyb3VnaCksIE5VTEwsICZtUGFzc1Rocm91Z2hWUyk7Ci0gICAgQVNTRVJUKFNV
Q0NFRURFRChyZXN1bHQpKTsKLSAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1QYXNzVGhyb3VnaFZT
LCAiU3dhcCBjaGFpbiBwYXNzIHRocm91Z2ggdmVydGV4IHNoYWRlciIpOwotCi0gICAgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihnX1BTX1Bhc3N0aHJvdWdoUkdCQSwgc2l6ZW9m
KGdfUFNfUGFzc3Rocm91Z2hSR0JBKSwgTlVMTCwgJm1QYXNzVGhyb3VnaFBTKTsKLSAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobVBhc3NUaHJv
dWdoUFMsICJTd2FwIGNoYWluIHBhc3MgdGhyb3VnaCBwaXhlbCBzaGFkZXIiKTsKLX0KLQotLy8g
cGFyYW1ldGVycyBzaG91bGQgYmUgdmFsaWRhdGVkL2NsYW1wZWQgYnkgY2FsbGVyCi1FR0xpbnQg
U3dhcENoYWluMTE6OnN3YXBSZWN0KEVHTGludCB4LCBFR0xpbnQgeSwgRUdMaW50IHdpZHRoLCBF
R0xpbnQgaGVpZ2h0KQotewotICAgIGlmICghbVN3YXBDaGFpbikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBFR0xfU1VDQ0VTUzsKLSAgICB9Ci0KLSAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1S
ZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0gICAgSUQzRDExRGV2aWNlQ29udGV4dCAqZGV2aWNlQ29u
dGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotCi0gICAgLy8gU2V0IHZlcnRp
Y2VzCi0gICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwotICAgIEhS
RVNVTFQgcmVzdWx0ID0gZGV2aWNlQ29udGV4dC0+TWFwKG1RdWFkVkIsIDAsIEQzRDExX01BUF9X
UklURV9ESVNDQVJELCAwLCAmbWFwcGVkUmVzb3VyY2UpOwotICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBFR0xfQkFEX0FDQ0VTUzsKLSAgICB9Ci0KLSAgICBk
M2QxMTo6UG9zaXRpb25UZXhDb29yZFZlcnRleCAqdmVydGljZXMgPSBzdGF0aWNfY2FzdDxkM2Qx
MTo6UG9zaXRpb25UZXhDb29yZFZlcnRleCo+KG1hcHBlZFJlc291cmNlLnBEYXRhKTsKLQotICAg
IC8vIENyZWF0ZSBhIHF1YWQgaW4gaG9tb2dlbmVvdXMgY29vcmRpbmF0ZXMKLSAgICBmbG9hdCB4
MSA9ICh4IC8gZmxvYXQobVdpZHRoKSkgKiAyLjBmIC0gMS4wZjsKLSAgICBmbG9hdCB5MSA9ICh5
IC8gZmxvYXQobUhlaWdodCkpICogMi4wZiAtIDEuMGY7Ci0gICAgZmxvYXQgeDIgPSAoKHggKyB3
aWR0aCkgLyBmbG9hdChtV2lkdGgpKSAqIDIuMGYgLSAxLjBmOwotICAgIGZsb2F0IHkyID0gKCh5
ICsgaGVpZ2h0KSAvIGZsb2F0KG1IZWlnaHQpKSAqIDIuMGYgLSAxLjBmOwotCi0gICAgZmxvYXQg
dTEgPSB4IC8gZmxvYXQobVdpZHRoKTsKLSAgICBmbG9hdCB2MSA9IHkgLyBmbG9hdChtSGVpZ2h0
KTsKLSAgICBmbG9hdCB1MiA9ICh4ICsgd2lkdGgpIC8gZmxvYXQobVdpZHRoKTsKLSAgICBmbG9h
dCB2MiA9ICh5ICsgaGVpZ2h0KSAvIGZsb2F0KG1IZWlnaHQpOwotCi0gICAgZDNkMTE6OlNldFBv
c2l0aW9uVGV4Q29vcmRWZXJ0ZXgoJnZlcnRpY2VzWzBdLCB4MSwgeTEsIHUxLCB2MSk7Ci0gICAg
ZDNkMTE6OlNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgoJnZlcnRpY2VzWzFdLCB4MSwgeTIsIHUx
LCB2Mik7Ci0gICAgZDNkMTE6OlNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgoJnZlcnRpY2VzWzJd
LCB4MiwgeTEsIHUyLCB2MSk7Ci0gICAgZDNkMTE6OlNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgo
JnZlcnRpY2VzWzNdLCB4MiwgeTIsIHUyLCB2Mik7Ci0KLSAgICBkZXZpY2VDb250ZXh0LT5Vbm1h
cChtUXVhZFZCLCAwKTsKLQotICAgIHN0YXRpYyBVSU5UIHN0cmlkZSA9IHNpemVvZihkM2QxMTo6
UG9zaXRpb25UZXhDb29yZFZlcnRleCk7Ci0gICAgc3RhdGljIFVJTlQgc3RhcnRJZHggPSAwOwot
ICAgIGRldmljZUNvbnRleHQtPklBU2V0VmVydGV4QnVmZmVycygwLCAxLCAmbVF1YWRWQiwgJnN0
cmlkZSwgJnN0YXJ0SWR4KTsKLQotICAgIC8vIEFwcGx5IHN0YXRlCi0gICAgZGV2aWNlQ29udGV4
dC0+T01TZXREZXB0aFN0ZW5jaWxTdGF0ZShOVUxMLCAweEZGRkZGRkZGKTsKLQotICAgIHN0YXRp
YyBjb25zdCBmbG9hdCBibGVuZEZhY3Rvcls0XSA9IHsgMS4wZiwgMS4wZiwgMS4wZiwgMS4wZiB9
OwotICAgIGRldmljZUNvbnRleHQtPk9NU2V0QmxlbmRTdGF0ZShOVUxMLCBibGVuZEZhY3Rvciwg
MHhGRkZGRkZGKTsKLQotICAgIGRldmljZUNvbnRleHQtPlJTU2V0U3RhdGUoTlVMTCk7Ci0KLSAg
ICAvLyBBcHBseSBzaGFkZXJzCi0gICAgZGV2aWNlQ29udGV4dC0+SUFTZXRJbnB1dExheW91dCht
UGFzc1Rocm91Z2hJTCk7Ci0gICAgZGV2aWNlQ29udGV4dC0+SUFTZXRQcmltaXRpdmVUb3BvbG9n
eShEM0RfUFJJTUlUSVZFX1RPUE9MT0dZX1RSSUFOR0xFU1RSSVApOwotICAgIGRldmljZUNvbnRl
eHQtPlZTU2V0U2hhZGVyKG1QYXNzVGhyb3VnaFZTLCBOVUxMLCAwKTsKLSAgICBkZXZpY2VDb250
ZXh0LT5QU1NldFNoYWRlcihtUGFzc1Rocm91Z2hQUywgTlVMTCwgMCk7Ci0gICAgZGV2aWNlQ29u
dGV4dC0+R1NTZXRTaGFkZXIoTlVMTCwgTlVMTCwgMCk7Ci0KLSAgICAvLyBBcHBseSByZW5kZXIg
dGFyZ2V0cwotICAgIG1SZW5kZXJlci0+c2V0T25lVGltZVJlbmRlclRhcmdldChtQmFja0J1ZmZl
clJUVmlldyk7Ci0KLSAgICAvLyBTZXQgdGhlIHZpZXdwb3J0Ci0gICAgRDNEMTFfVklFV1BPUlQg
dmlld3BvcnQ7Ci0gICAgdmlld3BvcnQuVG9wTGVmdFggPSAwOwotICAgIHZpZXdwb3J0LlRvcExl
ZnRZID0gMDsKLSAgICB2aWV3cG9ydC5XaWR0aCA9IG1XaWR0aDsKLSAgICB2aWV3cG9ydC5IZWln
aHQgPSBtSGVpZ2h0OwotICAgIHZpZXdwb3J0Lk1pbkRlcHRoID0gMC4wZjsKLSAgICB2aWV3cG9y
dC5NYXhEZXB0aCA9IDEuMGY7Ci0gICAgZGV2aWNlQ29udGV4dC0+UlNTZXRWaWV3cG9ydHMoMSwg
JnZpZXdwb3J0KTsKLQotICAgIC8vIEFwcGx5IHRleHR1cmVzCi0gICAgZGV2aWNlQ29udGV4dC0+
UFNTZXRTaGFkZXJSZXNvdXJjZXMoMCwgMSwgJm1PZmZzY3JlZW5TUlZpZXcpOwotICAgIGRldmlj
ZUNvbnRleHQtPlBTU2V0U2FtcGxlcnMoMCwgMSwgJm1QYXNzVGhyb3VnaFNhbXBsZXIpOwotCi0g
ICAgLy8gRHJhdwotICAgIGRldmljZUNvbnRleHQtPkRyYXcoNCwgMCk7Ci0KLSNpZiBBTkdMRV9G
T1JDRV9WU1lOQ19PRkYKLSAgICByZXN1bHQgPSBtU3dhcENoYWluLT5QcmVzZW50KDAsIDApOwot
I2Vsc2UKLSAgICByZXN1bHQgPSBtU3dhcENoYWluLT5QcmVzZW50KG1Td2FwSW50ZXJ2YWwsIDAp
OwotI2VuZGlmCi0KLSAgICBpZiAocmVzdWx0ID09IERYR0lfRVJST1JfREVWSUNFX1JFTU9WRUQp
Ci0gICAgewotICAgICAgICBIUkVTVUxUIHJlbW92ZWRSZWFzb24gPSBkZXZpY2UtPkdldERldmlj
ZVJlbW92ZWRSZWFzb24oKTsKLSAgICAgICAgRVJSKCJQcmVzZW50IGZhaWxlZDogdGhlIEQzRDEx
IGRldmljZSB3YXMgcmVtb3ZlZDogMHglMDhYIiwgcmVtb3ZlZFJlYXNvbik7Ci0gICAgICAgIHJl
dHVybiBFR0xfQ09OVEVYVF9MT1NUOwotICAgIH0KLSAgICBlbHNlIGlmIChyZXN1bHQgPT0gRFhH
SV9FUlJPUl9ERVZJQ0VfUkVTRVQpCi0gICAgewotICAgICAgICBFUlIoIlByZXNlbnQgZmFpbGVk
OiB0aGUgRDNEMTEgZGV2aWNlIHdhcyByZXNldCBmcm9tIGEgYmFkIGNvbW1hbmQuIik7Ci0gICAg
ICAgIHJldHVybiBFR0xfQ09OVEVYVF9MT1NUOwotICAgIH0KLSAgICBlbHNlIGlmIChGQUlMRUQo
cmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEVSUigiUHJlc2VudCBmYWlsZWQgd2l0aCBlcnJvciBj
b2RlIDB4JTA4WCIsIHJlc3VsdCk7Ci0gICAgfQotCi0gICAgLy8gVW5iaW5kCi0gICAgc3RhdGlj
IElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqY29uc3QgbnVsbFNSViA9IE5VTEw7Ci0gICAgZGV2
aWNlQ29udGV4dC0+UFNTZXRTaGFkZXJSZXNvdXJjZXMoMCwgMSwgJm51bGxTUlYpOwotCi0gICAg
bVJlbmRlcmVyLT51bmFwcGx5UmVuZGVyVGFyZ2V0cygpOwotICAgIG1SZW5kZXJlci0+bWFya0Fs
bFN0YXRlRGlydHkoKTsKLQotICAgIHJldHVybiBFR0xfU1VDQ0VTUzsKLX0KLQotLy8gSW5jcmVt
ZW50cyByZWZjb3VudCBvbiB0ZXh0dXJlLgotLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSBy
ZXR1cm5lZCB0ZXh0dXJlCi1JRDNEMTFUZXh0dXJlMkQgKlN3YXBDaGFpbjExOjpnZXRPZmZzY3Jl
ZW5UZXh0dXJlKCkKLXsKLSAgICBpZiAobU9mZnNjcmVlblRleHR1cmUpCi0gICAgewotICAgICAg
ICBtT2Zmc2NyZWVuVGV4dHVyZS0+QWRkUmVmKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1PZmZz
Y3JlZW5UZXh0dXJlOwotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHZpZXcuCi0vLyBj
YWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHZpZXcKLUlEM0QxMVJlbmRlclRhcmdl
dFZpZXcgKlN3YXBDaGFpbjExOjpnZXRSZW5kZXJUYXJnZXQoKQotewotICAgIGlmIChtT2Zmc2Ny
ZWVuUlRWaWV3KQotICAgIHsKLSAgICAgICAgbU9mZnNjcmVlblJUVmlldy0+QWRkUmVmKCk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIG1PZmZzY3JlZW5SVFZpZXc7Ci19Ci0KLS8vIEluY3JlbWVudHMg
cmVmY291bnQgb24gdmlldy4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQg
dmlldwotSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpTd2FwQ2hhaW4xMTo6Z2V0UmVuZGVyVGFy
Z2V0U2hhZGVyUmVzb3VyY2UoKQotewotICAgIGlmIChtT2Zmc2NyZWVuU1JWaWV3KQotICAgIHsK
LSAgICAgICAgbU9mZnNjcmVlblNSVmlldy0+QWRkUmVmKCk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IG1PZmZzY3JlZW5TUlZpZXc7Ci19Ci0KLS8vIEluY3JlbWVudHMgcmVmY291bnQgb24gdmlldy4K
LS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgdmlldwotSUQzRDExRGVwdGhT
dGVuY2lsVmlldyAqU3dhcENoYWluMTE6OmdldERlcHRoU3RlbmNpbCgpCi17Ci0gICAgaWYgKG1E
ZXB0aFN0ZW5jaWxEU1ZpZXcpCi0gICAgewotICAgICAgICBtRGVwdGhTdGVuY2lsRFNWaWV3LT5B
ZGRSZWYoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbURlcHRoU3RlbmNpbERTVmlldzsKLX0KLQot
SUQzRDExVGV4dHVyZTJEICpTd2FwQ2hhaW4xMTo6Z2V0RGVwdGhTdGVuY2lsVGV4dHVyZSgpCi17
Ci0gICAgaWYgKG1EZXB0aFN0ZW5jaWxUZXh0dXJlKQotICAgIHsKLSAgICAgICAgbURlcHRoU3Rl
bmNpbFRleHR1cmUtPkFkZFJlZigpOwotICAgIH0KLQotICAgIHJldHVybiBtRGVwdGhTdGVuY2ls
VGV4dHVyZTsKLX0KLQotU3dhcENoYWluMTEgKlN3YXBDaGFpbjExOjptYWtlU3dhcENoYWluMTEo
U3dhcENoYWluICpzd2FwQ2hhaW4pCi17Ci0gICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUocng6
OlN3YXBDaGFpbjExKiwgc3dhcENoYWluKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHJ4OjpT
d2FwQ2hhaW4xMSo+KHN3YXBDaGFpbik7Ci19Ci0KLXZvaWQgU3dhcENoYWluMTE6OnJlY3JlYXRl
KCkKLXsKLSAgICAvLyBwb3NzaWJseSBzaG91bGQgdXNlIHRoaXMgbWV0aG9kIGluc3RlYWQgb2Yg
cmVzZXQKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9Td2FwQ2hhaW4xMS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9Td2FwQ2hhaW4xMS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA4MDAxMDQ2MDJlMzViMGJjYmExMTAzOWExNmViZmM2MTExNjFlZjYxLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvU3dhcENoYWluMTEuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDc4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBTd2FwQ2hhaW4xMS5oOiBE
ZWZpbmVzIGEgYmFjay1lbmQgc3BlY2lmaWMgY2xhc3MgZm9yIHRoZSBEM0QxMSBzd2FwIGNoYWlu
LgotCi0jaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9TV0FQQ0hBSU4xMV9IXwotI2RlZmluZSBM
SUJHTEVTVjJfUkVOREVSRVJfU1dBUENIQUlOMTFfSF8KLQotI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1N3YXBDaGFpbi5oIgotCi1u
YW1lc3BhY2UgcngKLXsKLWNsYXNzIFJlbmRlcmVyMTE7Ci0KLWNsYXNzIFN3YXBDaGFpbjExIDog
cHVibGljIFN3YXBDaGFpbgotewotICBwdWJsaWM6Ci0gICAgU3dhcENoYWluMTEoUmVuZGVyZXIx
MSAqcmVuZGVyZXIsIEhXTkQgd2luZG93LCBIQU5ETEUgc2hhcmVIYW5kbGUsCi0gICAgICAgICAg
ICAgICAgR0xlbnVtIGJhY2tCdWZmZXJGb3JtYXQsIEdMZW51bSBkZXB0aEJ1ZmZlckZvcm1hdCk7
Ci0gICAgdmlydHVhbCB+U3dhcENoYWluMTEoKTsKLQotICAgIEVHTGludCByZXNpemUoRUdMaW50
IGJhY2tidWZmZXJXaWR0aCwgRUdMaW50IGJhY2tidWZmZXJIZWlnaHQpOwotICAgIHZpcnR1YWwg
RUdMaW50IHJlc2V0KEVHTGludCBiYWNrYnVmZmVyV2lkdGgsIEVHTGludCBiYWNrYnVmZmVySGVp
Z2h0LCBFR0xpbnQgc3dhcEludGVydmFsKTsKLSAgICB2aXJ0dWFsIEVHTGludCBzd2FwUmVjdChF
R0xpbnQgeCwgRUdMaW50IHksIEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCk7Ci0gICAgdmly
dHVhbCB2b2lkIHJlY3JlYXRlKCk7Ci0KLSAgICB2aXJ0dWFsIElEM0QxMVRleHR1cmUyRCAqZ2V0
T2Zmc2NyZWVuVGV4dHVyZSgpOwotICAgIHZpcnR1YWwgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAq
Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0gICAgdmlydHVhbCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcg
KmdldFJlbmRlclRhcmdldFNoYWRlclJlc291cmNlKCk7Ci0KLSAgICB2aXJ0dWFsIElEM0QxMVRl
eHR1cmUyRCAqZ2V0RGVwdGhTdGVuY2lsVGV4dHVyZSgpOwotICAgIHZpcnR1YWwgSUQzRDExRGVw
dGhTdGVuY2lsVmlldyAqZ2V0RGVwdGhTdGVuY2lsKCk7Ci0KLSAgICBFR0xpbnQgZ2V0V2lkdGgo
KSBjb25zdCB7IHJldHVybiBtV2lkdGg7IH0KLSAgICBFR0xpbnQgZ2V0SGVpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbUhlaWdodDsgfQotCi0gICAgc3RhdGljIFN3YXBDaGFpbjExICptYWtlU3dhcENo
YWluMTEoU3dhcENoYWluICpzd2FwQ2hhaW4pOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1df
Q09QWV9BTkRfQVNTSUdOKFN3YXBDaGFpbjExKTsKLQotICAgIHZvaWQgcmVsZWFzZSgpOwotICAg
IHZvaWQgaW5pdFBhc3NUaHJvdWdoUmVzb3VyY2VzKCk7Ci0gICAgdm9pZCByZWxlYXNlT2Zmc2Ny
ZWVuVGV4dHVyZSgpOwotICAgIEVHTGludCByZXNldE9mZnNjcmVlblRleHR1cmUoaW50IGJhY2ti
dWZmZXJXaWR0aCwgaW50IGJhY2tidWZmZXJIZWlnaHQpOwotCi0gICAgUmVuZGVyZXIxMSAqbVJl
bmRlcmVyOwotICAgIEVHTGludCBtSGVpZ2h0OwotICAgIEVHTGludCBtV2lkdGg7Ci0gICAgYm9v
bCBtQXBwQ3JlYXRlZFNoYXJlSGFuZGxlOwotICAgIHVuc2lnbmVkIGludCBtU3dhcEludGVydmFs
OwotICAgIGJvb2wgbVBhc3NUaHJvdWdoUmVzb3VyY2VzSW5pdDsKLQotICAgIElEWEdJU3dhcENo
YWluICptU3dhcENoYWluOwotCi0gICAgSUQzRDExVGV4dHVyZTJEICptQmFja0J1ZmZlclRleHR1
cmU7Ci0gICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqbUJhY2tCdWZmZXJSVFZpZXc7Ci0KLSAg
ICBJRDNEMTFUZXh0dXJlMkQgKm1PZmZzY3JlZW5UZXh0dXJlOwotICAgIElEM0QxMVJlbmRlclRh
cmdldFZpZXcgKm1PZmZzY3JlZW5SVFZpZXc7Ci0gICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3
ICptT2Zmc2NyZWVuU1JWaWV3OwotCi0gICAgSUQzRDExVGV4dHVyZTJEICptRGVwdGhTdGVuY2ls
VGV4dHVyZTsKLSAgICBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICptRGVwdGhTdGVuY2lsRFNWaWV3
OwotCi0gICAgSUQzRDExQnVmZmVyICptUXVhZFZCOwotICAgIElEM0QxMVNhbXBsZXJTdGF0ZSAq
bVBhc3NUaHJvdWdoU2FtcGxlcjsKLSAgICBJRDNEMTFJbnB1dExheW91dCAqbVBhc3NUaHJvdWdo
SUw7Ci0gICAgSUQzRDExVmVydGV4U2hhZGVyICptUGFzc1Rocm91Z2hWUzsKLSAgICBJRDNEMTFQ
aXhlbFNoYWRlciAqbVBhc3NUaHJvdWdoUFM7Ci19OwotCi19Ci0jZW5kaWYgLy8gTElCR0xFU1Yy
X1JFTkRFUkVSX1NXQVBDSEFJTjExX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1N3YXBDaGFpbjkuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9Td2FwQ2hhaW45LmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzU3Y2UxY2IwMzViNjAzZWY2MWM0OTE2MWMzOWQwNDAx
MGZjNDAxMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1N3YXBDaGFpbjku
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDM4ICswLDAgQEAKLSNpbmNsdWRlICJwcmVjb21waWxl
ZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gU3dhcENoYWluOS5jcHA6IEltcGxlbWVudHMg
YSBiYWNrLWVuZCBzcGVjaWZpYyBjbGFzcyBmb3IgdGhlIEQzRDkgc3dhcCBjaGFpbi4KLQotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9Td2FwQ2hhaW45LmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL3JlbmRlcmVyOV91dGlscy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9SZW5kZXJlcjkuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLVN3YXBDaGFpbjk6OlN3YXBD
aGFpbjkoUmVuZGVyZXI5ICpyZW5kZXJlciwgSFdORCB3aW5kb3csIEhBTkRMRSBzaGFyZUhhbmRs
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGJhY2tCdWZmZXJGb3JtYXQsIEdMZW51
bSBkZXB0aEJ1ZmZlckZvcm1hdCkKLSAgICA6IG1SZW5kZXJlcihyZW5kZXJlciksIFN3YXBDaGFp
bih3aW5kb3csIHNoYXJlSGFuZGxlLCBiYWNrQnVmZmVyRm9ybWF0LCBkZXB0aEJ1ZmZlckZvcm1h
dCkKLXsKLSAgICBtU3dhcENoYWluID0gTlVMTDsKLSAgICBtQmFja0J1ZmZlciA9IE5VTEw7Ci0g
ICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgbVJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAg
bU9mZnNjcmVlblRleHR1cmUgPSBOVUxMOwotICAgIG1XaWR0aCA9IC0xOwotICAgIG1IZWlnaHQg
PSAtMTsKLSAgICBtU3dhcEludGVydmFsID0gLTE7Ci19Ci0KLVN3YXBDaGFpbjk6On5Td2FwQ2hh
aW45KCkKLXsKLSAgICByZWxlYXNlKCk7Ci19Ci0KLXZvaWQgU3dhcENoYWluOTo6cmVsZWFzZSgp
Ci17Ci0gICAgaWYgKG1Td2FwQ2hhaW4pCi0gICAgewotICAgICAgICBtU3dhcENoYWluLT5SZWxl
YXNlKCk7Ci0gICAgICAgIG1Td2FwQ2hhaW4gPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtQmFj
a0J1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1CYWNrQnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAg
IG1CYWNrQnVmZmVyID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobURlcHRoU3RlbmNpbCkKLSAg
ICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKLSAgICAgICAgbURlcHRoU3Rl
bmNpbCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1SZW5kZXJUYXJnZXQpCi0gICAgewotICAg
ICAgICBtUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXQgPSBO
VUxMOwotICAgIH0KLQotICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkKLSAgICB7Ci0gICAgICAg
IG1PZmZzY3JlZW5UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1PZmZzY3JlZW5UZXh0dXJl
ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVdpbmRvdykKLSAgICAgICAgbVNoYXJlSGFuZGxl
ID0gTlVMTDsKLX0KLQotc3RhdGljIERXT1JEIGNvbnZlcnRJbnRlcnZhbChFR0xpbnQgaW50ZXJ2
YWwpCi17Ci0jaWYgQU5HTEVfRk9SQ0VfVlNZTkNfT0ZGCi0gICAgcmV0dXJuIEQzRFBSRVNFTlRf
SU5URVJWQUxfSU1NRURJQVRFOwotI2Vsc2UKLSAgICBzd2l0Y2goaW50ZXJ2YWwpCi0gICAgewot
ICAgICAgY2FzZSAwOiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9JTU1FRElBVEU7Ci0gICAg
ICBjYXNlIDE6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX09ORTsKLSAgICAgIGNhc2UgMjog
cmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfVFdPOwotICAgICAgY2FzZSAzOiByZXR1cm4gRDNE
UFJFU0VOVF9JTlRFUlZBTF9USFJFRTsKLSAgICAgIGNhc2UgNDogcmV0dXJuIEQzRFBSRVNFTlRf
SU5URVJWQUxfRk9VUjsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfREVGQVVMVDsKLSNlbmRpZgotfQotCi1FR0xp
bnQgU3dhcENoYWluOTo6cmVzaXplKGludCBiYWNrYnVmZmVyV2lkdGgsIGludCBiYWNrYnVmZmVy
SGVpZ2h0KQotewotICAgIC8vIEQzRDkgZG9lcyBub3Qgc3VwcG9ydCByZXNpemluZyBzd2FwIGNo
YWlucyB3aXRob3V0IHJlY3JlYXRpbmcgdGhlbQotICAgIHJldHVybiByZXNldChiYWNrYnVmZmVy
V2lkdGgsIGJhY2tidWZmZXJIZWlnaHQsIG1Td2FwSW50ZXJ2YWwpOwotfQotCi1FR0xpbnQgU3dh
cENoYWluOTo6cmVzZXQoaW50IGJhY2tidWZmZXJXaWR0aCwgaW50IGJhY2tidWZmZXJIZWlnaHQs
IEVHTGludCBzd2FwSW50ZXJ2YWwpCi17Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0g
bVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLQotICAgIGlmIChkZXZpY2UgPT0gTlVMTCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBFR0xfQkFEX0FDQ0VTUzsKLSAgICB9Ci0KLSAgICAvLyBFdmljdCBh
bGwgbm9uLXJlbmRlciB0YXJnZXQgdGV4dHVyZXMgdG8gc3lzdGVtIG1lbW9yeSBhbmQgcmVsZWFz
ZSBhbGwgcmVzb3VyY2VzCi0gICAgLy8gYmVmb3JlIHJlYWxsb2NhdGluZyB0aGVtIHRvIGZyZWUg
dXAgYXMgbXVjaCB2aWRlbyBtZW1vcnkgYXMgcG9zc2libGUuCi0gICAgZGV2aWNlLT5FdmljdE1h
bmFnZWRSZXNvdXJjZXMoKTsKLQotICAgIEhSRVNVTFQgcmVzdWx0OwotCi0gICAgLy8gUmVsZWFz
ZSBzcGVjaWZpYyByZXNvdXJjZXMgdG8gZnJlZSB1cCBtZW1vcnkgZm9yIHRoZSBuZXcgcmVuZGVy
IHRhcmdldCwgd2hpbGUgdGhlCi0gICAgLy8gb2xkIHJlbmRlciB0YXJnZXQgc3RpbGwgZXhpc3Rz
IGZvciB0aGUgcHVycG9zZSBvZiBwcmVzZXJ2aW5nIGl0cyBjb250ZW50cy4KLSAgICBpZiAobVN3
YXBDaGFpbikKLSAgICB7Ci0gICAgICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsKLSAgICAgICAg
bVN3YXBDaGFpbiA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1CYWNrQnVmZmVyKQotICAgIHsK
LSAgICAgICAgbUJhY2tCdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJhY2tCdWZmZXIgPSBO
VUxMOwotICAgIH0KLQotICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkKLSAgICB7Ci0gICAgICAg
IG1PZmZzY3JlZW5UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1PZmZzY3JlZW5UZXh0dXJl
ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobURlcHRoU3RlbmNpbCkKLSAgICB7Ci0gICAgICAg
IG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKLSAgICAgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7
Ci0gICAgfQotCi0gICAgSEFORExFICpwU2hhcmVIYW5kbGUgPSBOVUxMOwotICAgIGlmICghbVdp
bmRvdyAmJiBtUmVuZGVyZXItPmdldFNoYXJlSGFuZGxlU3VwcG9ydCgpKQotICAgIHsKLSAgICAg
ICAgcFNoYXJlSGFuZGxlID0gJm1TaGFyZUhhbmRsZTsKLSAgICB9Ci0KLSAgICByZXN1bHQgPSBk
ZXZpY2UtPkNyZWF0ZVRleHR1cmUoYmFja2J1ZmZlcldpZHRoLCBiYWNrYnVmZmVySGVpZ2h0LCAx
LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsX2QzZDk6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQp
LCBEM0RQT09MX0RFRkFVTFQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZt
T2Zmc2NyZWVuVGV4dHVyZSwgcFNoYXJlSGFuZGxlKTsKLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
Ci0gICAgewotICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgb2Zmc2NyZWVuIHRleHR1cmU6
ICUwOGxYIiwgcmVzdWx0KTsKLSAgICAgICAgcmVsZWFzZSgpOwotCi0gICAgICAgIGlmIChkM2Q5
Ojppc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gRUdMX0NPTlRFWFRfTE9TVDsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBFR0xfQkFEX0FMTE9DOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgSURpcmVjdDNEU3VyZmFjZTkgKm9sZFJlbmRlclRhcmdldCA9IG1SZW5kZXJUYXJnZXQ7Ci0K
LSAgICByZXN1bHQgPSBtT2Zmc2NyZWVuVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKDAsICZtUmVu
ZGVyVGFyZ2V0KTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgaWYgKG9s
ZFJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIFJFQ1QgcmVjdCA9Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIDAsIDAsCi0gICAgICAgICAgICBtV2lkdGgsIG1IZWlnaHQKLSAgICAgICAgfTsK
LQotICAgICAgICBpZiAocmVjdC5yaWdodCA+IHN0YXRpY19jYXN0PExPTkc+KGJhY2tidWZmZXJX
aWR0aCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlY3QucmlnaHQgPSBiYWNrYnVmZmVyV2lk
dGg7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVjdC5ib3R0b20gPiBzdGF0aWNfY2FzdDxM
T05HPihiYWNrYnVmZmVySGVpZ2h0KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmVjdC5ib3R0
b20gPSBiYWNrYnVmZmVySGVpZ2h0OwotICAgICAgICB9Ci0KLSAgICAgICAgbVJlbmRlcmVyLT5l
bmRTY2VuZSgpOwotCi0gICAgICAgIHJlc3VsdCA9IGRldmljZS0+U3RyZXRjaFJlY3Qob2xkUmVu
ZGVyVGFyZ2V0LCAmcmVjdCwgbVJlbmRlclRhcmdldCwgJnJlY3QsIEQzRFRFWEZfTk9ORSk7Ci0g
ICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAgb2xkUmVuZGVyVGFy
Z2V0LT5SZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgaWYgKG1XaW5kb3cpCi0gICAgewotICAgICAg
ICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRlcnMgPSB7MH07Ci0gICAgICAg
IHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQgPSBnbF9kM2Q5OjpDb252
ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1EZXB0aEJ1ZmZlckZvcm1hdCk7Ci0gICAgICAgIHByZXNl
bnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJDb3VudCA9IDE7Ci0gICAgICAgIHByZXNlbnRQYXJhbWV0
ZXJzLkJhY2tCdWZmZXJGb3JtYXQgPSBnbF9kM2Q5OjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0
KG1CYWNrQnVmZmVyRm9ybWF0KTsKLSAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuRW5hYmxlQXV0
b0RlcHRoU3RlbmNpbCA9IEZBTFNFOwotICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5GbGFncyA9
IDA7Ci0gICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLmhEZXZpY2VXaW5kb3cgPSBtV2luZG93Owot
ICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVF1YWxpdHkgPSAwOyAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBVbmltcGxlbWVudGVkCi0gICAgICAgIHByZXNlbnRQYXJhbWV0
ZXJzLk11bHRpU2FtcGxlVHlwZSA9IEQzRE1VTFRJU0FNUExFX05PTkU7ICAgLy8gRklYTUU6IFVu
aW1wbGVtZW50ZWQKLSAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuUHJlc2VudGF0aW9uSW50ZXJ2
YWwgPSBjb252ZXJ0SW50ZXJ2YWwoc3dhcEludGVydmFsKTsKLSAgICAgICAgcHJlc2VudFBhcmFt
ZXRlcnMuU3dhcEVmZmVjdCA9IEQzRFNXQVBFRkZFQ1RfRElTQ0FSRDsKLSAgICAgICAgcHJlc2Vu
dFBhcmFtZXRlcnMuV2luZG93ZWQgPSBUUlVFOwotICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5C
YWNrQnVmZmVyV2lkdGggPSBiYWNrYnVmZmVyV2lkdGg7Ci0gICAgICAgIHByZXNlbnRQYXJhbWV0
ZXJzLkJhY2tCdWZmZXJIZWlnaHQgPSBiYWNrYnVmZmVySGVpZ2h0OwotCi0gICAgICAgIC8vIGh0
dHA6Ly9jcmJ1Zy5jb20vMTQwMjM5Ci0gICAgICAgIC8vIGh0dHA6Ly9jcmJ1Zy5jb20vMTQzNDM0
Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIFNvbWUgQU1EL0ludGVsIHN3aXRjaGFibGUgc3lzdGVt
cyAvIGRyaXZlcnMgYXBwZWFyIHRvIHJvdW5kIHN3YXAgY2hhaW4gc3VyZmFjZXMgdG8gYSBtdWx0
aXBsZSBvZiA2NCBwaXhlbHMgaW4gd2lkdGgKLSAgICAgICAgLy8gd2hlbiB1c2luZyB0aGUgaW50
ZWdyYXRlZCBJbnRlbC4gVGhpcyByb3VuZHMgdGhlIHdpZHRoIHVwIHJhdGhlciB0aGFuIGRvd24u
Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIFNvbWUgbm9uLXN3aXRjaGFibGUgQU1EIEdQVXMgLyBk
cml2ZXJzIGRvIG5vdCByZXNwZWN0IHRoZSBzb3VyY2UgcmVjdGFuZ2xlIHRvIFByZXNlbnQuIFRo
ZXJlZm9yZSwgd2hlbiB0aGUgdmVuZG9yIElECi0gICAgICAgIC8vIGlzIG5vdCBJbnRlbCwgdGhl
IGJhY2sgYnVmZmVyIHdpZHRoIG11c3QgYmUgZXhhY3RseSB0aGUgc2FtZSB3aWR0aCBhcyB0aGUg
d2luZG93IG9yIGhvcml6b250YWwgc2NhbGluZyB3aWxsIG9jY3VyLgotICAgICAgICBpZiAobVJl
bmRlcmVyLT5nZXRBZGFwdGVyVmVuZG9yKCkgPT0gVkVORE9SX0lEX0lOVEVMKQotICAgICAgICB7
Ci0gICAgICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGggPSAocHJlc2Vu
dFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoICsgNjMpIC8gNjQgKiA2NDsKLSAgICAgICAgfQot
Ci0gICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQWRkaXRpb25hbFN3YXBDaGFpbigmcHJl
c2VudFBhcmFtZXRlcnMsICZtU3dhcENoYWluKTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9G
VklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcmVzdWx0ID09IEQzREVS
Ul9JTlZBTElEQ0FMTCB8fCByZXN1bHQgPT0gRDNERVJSX0RFVklDRUxPU1QpOwotCi0gICAgICAg
ICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYWRkaXRpb25hbCBzd2FwIGNoYWlucyBvciBvZmZz
Y3JlZW4gc3VyZmFjZXM6ICUwOGxYIiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJlbGVhc2UoKTsK
LQotICAgICAgICAgICAgaWYgKGQzZDk6OmlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEVHTF9DT05URVhUX0xPU1Q7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIEVHTF9CQURfQUxMT0M7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXN1bHQgPSBtU3dhcENoYWluLT5HZXRCYWNrQnVmZmVyKDAsIEQzREJBQ0tCVUZGRVJf
VFlQRV9NT05PLCAmbUJhY2tCdWZmZXIpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOwotICAgICAgICBJbnZhbGlkYXRlUmVjdChtV2luZG93LCBOVUxMLCBGQUxTRSk7Ci0gICAg
fQotCi0gICAgaWYgKG1EZXB0aEJ1ZmZlckZvcm1hdCAhPSBHTF9OT05FKQotICAgIHsKLSAgICAg
ICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxTdXJmYWNlKGJhY2tidWZmZXJX
aWR0aCwgYmFja2J1ZmZlckhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobURl
cHRoQnVmZmVyRm9ybWF0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEQzRE1VTFRJU0FNUExFX05PTkUsIDAsIEZBTFNFLCAmbURlcHRoU3RlbmNp
bCwgTlVMTCk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3Vs
dCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJfSU5WQUxJRENBTEwpOwotCi0g
ICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgZGVwdGhzdGVuY2lsIHN1cmZhY2UgZm9y
IG5ldyBzd2FwIGNoYWluOiAweCUwOFgiLCByZXN1bHQpOwotICAgICAgICAgICAgcmVsZWFzZSgp
OwotCi0gICAgICAgICAgICBpZiAoZDNkOTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gRUdMX0NPTlRFWFRfTE9TVDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gRUdMX0JBRF9BTExPQzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIG1XaWR0aCA9IGJhY2tidWZmZXJXaWR0aDsKLSAgICBtSGVpZ2h0ID0gYmFja2J1
ZmZlckhlaWdodDsKLSAgICBtU3dhcEludGVydmFsID0gc3dhcEludGVydmFsOwotCi0gICAgcmV0
dXJuIEVHTF9TVUNDRVNTOwotfQotCi0vLyBwYXJhbWV0ZXJzIHNob3VsZCBiZSB2YWxpZGF0ZWQv
Y2xhbXBlZCBieSBjYWxsZXIKLUVHTGludCBTd2FwQ2hhaW45Ojpzd2FwUmVjdChFR0xpbnQgeCwg
RUdMaW50IHksIEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCkKLXsKLSAgICBpZiAoIW1Td2Fw
Q2hhaW4pCi0gICAgewotICAgICAgICByZXR1cm4gRUdMX1NVQ0NFU1M7Ci0gICAgfQotCi0gICAg
SURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLQotICAg
IC8vIERpc2FibGUgYWxsIHBpcGVsaW5lIG9wZXJhdGlvbnMKLSAgICBkZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX1pFTkFCTEUsIEQzRFpCX0ZBTFNFKTsKLSAgICBkZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElEKTsKLSAgICBkZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0UpOwotICAgIGRldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOwotICAgIGRldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQzRENVTExfTk9ORSk7Ci0gICAgZGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBGQUxTRSk7Ci0gICAgZGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOwotICAgIGRldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgRDNEQ09MT1JXUklURUVOQUJM
RV9BTFBIQSB8IEQzRENPTE9SV1JJVEVFTkFCTEVfQkxVRSB8IEQzRENPTE9SV1JJVEVFTkFCTEVf
R1JFRU4gfCBEM0RDT0xPUldSSVRFRU5BQkxFX1JFRCk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19TUkdCV1JJVEVFTkFCTEUsIEZBTFNFKTsKLSAgICBkZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX1NDSVNTT1JURVNURU5BQkxFLCBGQUxTRSk7Ci0gICAgZGV2aWNlLT5TZXRQ
aXhlbFNoYWRlcihOVUxMKTsKLSAgICBkZXZpY2UtPlNldFZlcnRleFNoYWRlcihOVUxMKTsKLQot
ICAgIGRldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIG1CYWNrQnVmZmVyKTsKLSAgICBkZXZpY2Ut
PlNldERlcHRoU3RlbmNpbFN1cmZhY2UoTlVMTCk7Ci0KLSAgICBkZXZpY2UtPlNldFRleHR1cmUo
MCwgbU9mZnNjcmVlblRleHR1cmUpOwotICAgIGRldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUo
MCwgRDNEVFNTX0NPTE9ST1AsIEQzRFRPUF9TRUxFQ1RBUkcxKTsKLSAgICBkZXZpY2UtPlNldFRl
eHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUkFSRzEsIEQzRFRBX1RFWFRVUkUpOwotICAg
IGRldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMSwgRDNEVFNTX0NPTE9ST1AsIEQzRFRPUF9E
SVNBQkxFKTsKLSAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01BR0ZJTFRF
UiwgRDNEVEVYRl9QT0lOVCk7Ci0gICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FN
UF9NSU5GSUxURVIsIEQzRFRFWEZfUE9JTlQpOwotICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRl
KDAsIEQzRFNBTVBfQUREUkVTU1UsIEQzRFRBRERSRVNTX0NMQU1QKTsKLSAgICBkZXZpY2UtPlNl
dFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX0FERFJFU1NWLCBEM0RUQUREUkVTU19DTEFNUCk7Ci0g
ICAgZGV2aWNlLT5TZXRGVkYoRDNERlZGX1hZWlJIVyB8IEQzREZWRl9URVgxKTsKLQotICAgIEQz
RFZJRVdQT1JUOSB2aWV3cG9ydCA9IHswLCAwLCBtV2lkdGgsIG1IZWlnaHQsIDAuMGYsIDEuMGZ9
OwotICAgIGRldmljZS0+U2V0Vmlld3BvcnQoJnZpZXdwb3J0KTsKLQotICAgIGZsb2F0IHgxID0g
eCAtIDAuNWY7Ci0gICAgZmxvYXQgeTEgPSAobUhlaWdodCAtIHkgLSBoZWlnaHQpIC0gMC41ZjsK
LSAgICBmbG9hdCB4MiA9ICh4ICsgd2lkdGgpIC0gMC41ZjsKLSAgICBmbG9hdCB5MiA9IChtSGVp
Z2h0IC0geSkgLSAwLjVmOwotCi0gICAgZmxvYXQgdTEgPSB4IC8gZmxvYXQobVdpZHRoKTsKLSAg
ICBmbG9hdCB2MSA9IHkgLyBmbG9hdChtSGVpZ2h0KTsKLSAgICBmbG9hdCB1MiA9ICh4ICsgd2lk
dGgpIC8gZmxvYXQobVdpZHRoKTsKLSAgICBmbG9hdCB2MiA9ICh5ICsgaGVpZ2h0KSAvIGZsb2F0
KG1IZWlnaHQpOwotCi0gICAgZmxvYXQgcXVhZFs0XVs2XSA9IHt7eDEsIHkxLCAwLjBmLCAxLjBm
LCB1MSwgdjJ9LAotICAgICAgICAgICAgICAgICAgICAgICAge3gyLCB5MSwgMC4wZiwgMS4wZiwg
dTIsIHYyfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHt4MiwgeTIsIDAuMGYsIDEuMGYsIHUy
LCB2MX0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7eDEsIHkyLCAwLjBmLCAxLjBmLCB1MSwg
djF9fTsgICAvLyB4LCB5LCB6LCByaHcsIHUsIHYKLQotICAgIG1SZW5kZXJlci0+c3RhcnRTY2Vu
ZSgpOwotICAgIGRldmljZS0+RHJhd1ByaW1pdGl2ZVVQKEQzRFBUX1RSSUFOR0xFRkFOLCAyLCBx
dWFkLCA2ICogc2l6ZW9mKGZsb2F0KSk7Ci0gICAgbVJlbmRlcmVyLT5lbmRTY2VuZSgpOwotCi0g
ICAgZGV2aWNlLT5TZXRUZXh0dXJlKDAsIE5VTEwpOwotCi0gICAgUkVDVCByZWN0ID0KLSAgICB7
Ci0gICAgICAgIHgsIG1IZWlnaHQgLSB5IC0gaGVpZ2h0LAotICAgICAgICB4ICsgd2lkdGgsIG1I
ZWlnaHQgLSB5Ci0gICAgfTsKLQotICAgIEhSRVNVTFQgcmVzdWx0ID0gbVN3YXBDaGFpbi0+UHJl
c2VudCgmcmVjdCwgJnJlY3QsIE5VTEwsIE5VTEwsIDApOwotCi0gICAgbVJlbmRlcmVyLT5tYXJr
QWxsU3RhdGVEaXJ0eSgpOwotCi0gICAgaWYgKGQzZDk6OmlzRGV2aWNlTG9zdEVycm9yKHJlc3Vs
dCkpCi0gICAgewotICAgICAgICByZXR1cm4gRUdMX0NPTlRFWFRfTE9TVDsKLSAgICB9Ci0KLSAg
ICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09V
VE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJfRFJJVkVSSU5URVJOQUxFUlJPUikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBFR0xfQkFEX0FMTE9DOwotICAgIH0KLQotICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7Ci0KLSAgICByZXR1cm4gRUdMX1NVQ0NFU1M7Ci19Ci0KLS8vIEluY3Jl
bWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUg
cmV0dXJuZWQgc3VyZmFjZQotSURpcmVjdDNEU3VyZmFjZTkgKlN3YXBDaGFpbjk6OmdldFJlbmRl
clRhcmdldCgpCi17Ci0gICAgaWYgKG1SZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICBtUmVu
ZGVyVGFyZ2V0LT5BZGRSZWYoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbVJlbmRlclRhcmdldDsK
LX0KLQotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgotLy8gY2FsbGVyIG11c3Qg
UmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCi1JRGlyZWN0M0RTdXJmYWNlOSAqU3dhcENo
YWluOTo6Z2V0RGVwdGhTdGVuY2lsKCkKLXsKLSAgICBpZiAobURlcHRoU3RlbmNpbCkKLSAgICB7
Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwtPkFkZFJlZigpOwotICAgIH0KLQotICAgIHJldHVybiBt
RGVwdGhTdGVuY2lsOwotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHRleHR1cmUuCi0v
LyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHRleHR1cmUKLUlEaXJlY3QzRFRl
eHR1cmU5ICpTd2FwQ2hhaW45OjpnZXRPZmZzY3JlZW5UZXh0dXJlKCkKLXsKLSAgICBpZiAobU9m
ZnNjcmVlblRleHR1cmUpCi0gICAgewotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+QWRkUmVm
KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1PZmZzY3JlZW5UZXh0dXJlOwotfQotCi1Td2FwQ2hh
aW45ICpTd2FwQ2hhaW45OjptYWtlU3dhcENoYWluOShTd2FwQ2hhaW4gKnN3YXBDaGFpbikKLXsK
LSAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShyeDo6U3dhcENoYWluOSosIHN3YXBDaGFpbikp
OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxyeDo6U3dhcENoYWluOSo+KHN3YXBDaGFpbik7Ci19
Ci0KLXZvaWQgU3dhcENoYWluOTo6cmVjcmVhdGUoKQotewotICAgIGlmICghbVN3YXBDaGFpbikK
LSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJRGlyZWN0M0REZXZpY2U5ICpk
ZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotICAgIGlmIChkZXZpY2UgPT0gTlVMTCkK
LSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBEM0RQUkVTRU5UX1BBUkFNRVRF
UlMgcHJlc2VudFBhcmFtZXRlcnM7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBtU3dhcENoYWluLT5H
ZXRQcmVzZW50UGFyYW1ldGVycygmcHJlc2VudFBhcmFtZXRlcnMpOwotICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7Ci0KLSAgICBJRGlyZWN0M0RTd2FwQ2hhaW45KiBuZXdTd2FwQ2hhaW4g
PSBOVUxMOwotICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQWRkaXRpb25hbFN3YXBDaGFpbigm
cHJlc2VudFBhcmFtZXRlcnMsICZuZXdTd2FwQ2hhaW4pOwotICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtU3dhcENoYWluLT5SZWxl
YXNlKCk7Ci0gICAgbVN3YXBDaGFpbiA9IG5ld1N3YXBDaGFpbjsKLQotICAgIG1CYWNrQnVmZmVy
LT5SZWxlYXNlKCk7Ci0gICAgcmVzdWx0ID0gbVN3YXBDaGFpbi0+R2V0QmFja0J1ZmZlcigwLCBE
M0RCQUNLQlVGRkVSX1RZUEVfTU9OTywgJm1CYWNrQnVmZmVyKTsKLSAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1N3YXBDaGFpbjkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvU3dhcENoYWluOS5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAxNmE2MmJkODZmNmE2NWI3ZGQ4YjdiZDQyMjA3NjQxNGY0OTBkNDVl
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvU3dhcENoYWluOS5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFN3YXBDaGFpbjku
aDogRGVmaW5lcyBhIGJhY2stZW5kIHNwZWNpZmljIGNsYXNzIGZvciB0aGUgRDNEOSBzd2FwIGNo
YWluLgotCi0jaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9TV0FQQ0hBSU45X0hfCi0jZGVmaW5l
IExJQkdMRVNWMl9SRU5ERVJFUl9TV0FQQ0hBSU45X0hfCi0KLSNpbmNsdWRlICJjb21tb24vYW5n
bGV1dGlscy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9Td2FwQ2hhaW4uaCIKLQot
bmFtZXNwYWNlIHJ4Ci17Ci1jbGFzcyBSZW5kZXJlcjk7Ci0KLWNsYXNzIFN3YXBDaGFpbjkgOiBw
dWJsaWMgU3dhcENoYWluCi17Ci0gIHB1YmxpYzoKLSAgICBTd2FwQ2hhaW45KFJlbmRlcmVyOSAq
cmVuZGVyZXIsIEhXTkQgd2luZG93LCBIQU5ETEUgc2hhcmVIYW5kbGUsCi0gICAgICAgICAgICAg
ICBHTGVudW0gYmFja0J1ZmZlckZvcm1hdCwgR0xlbnVtIGRlcHRoQnVmZmVyRm9ybWF0KTsKLSAg
ICB2aXJ0dWFsIH5Td2FwQ2hhaW45KCk7Ci0KLSAgICBFR0xpbnQgcmVzaXplKEVHTGludCBiYWNr
YnVmZmVyV2lkdGgsIEVHTGludCBiYWNrYnVmZmVySGVpZ2h0KTsKLSAgICB2aXJ0dWFsIEVHTGlu
dCByZXNldChFR0xpbnQgYmFja2J1ZmZlcldpZHRoLCBFR0xpbnQgYmFja2J1ZmZlckhlaWdodCwg
RUdMaW50IHN3YXBJbnRlcnZhbCk7Ci0gICAgdmlydHVhbCBFR0xpbnQgc3dhcFJlY3QoRUdMaW50
IHgsIEVHTGludCB5LCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQpOwotICAgIHZpcnR1YWwg
dm9pZCByZWNyZWF0ZSgpOwotCi0gICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVu
ZGVyVGFyZ2V0KCk7Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhTdGVu
Y2lsKCk7Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RUZXh0dXJlOSAqZ2V0T2Zmc2NyZWVuVGV4dHVy
ZSgpOwotCi0gICAgc3RhdGljIFN3YXBDaGFpbjkgKm1ha2VTd2FwQ2hhaW45KFN3YXBDaGFpbiAq
c3dhcENoYWluKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihT
d2FwQ2hhaW45KTsKLQotICAgIHZvaWQgcmVsZWFzZSgpOwotCi0gICAgUmVuZGVyZXI5ICptUmVu
ZGVyZXI7Ci0gICAgRUdMaW50IG1IZWlnaHQ7Ci0gICAgRUdMaW50IG1XaWR0aDsKLSAgICBFR0xp
bnQgbVN3YXBJbnRlcnZhbDsKLQotICAgIElEaXJlY3QzRFN3YXBDaGFpbjkgKm1Td2FwQ2hhaW47
Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKm1CYWNrQnVmZmVyOwotICAgIElEaXJlY3QzRFN1cmZh
Y2U5ICptUmVuZGVyVGFyZ2V0OwotICAgIElEaXJlY3QzRFN1cmZhY2U5ICptRGVwdGhTdGVuY2ls
OwotICAgIElEaXJlY3QzRFRleHR1cmU5KiBtT2Zmc2NyZWVuVGV4dHVyZTsKLX07Ci0KLX0KLSNl
bmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfU1dBUENIQUlOOV9IXwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFn
ZTExLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
VGV4dHVyZVN0b3JhZ2UxMS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxNTE1
ZWQ3Njk2MjQ5NTk4ZTUzMzQzNDk2MGEzMjIxYWI0ZjIzNTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZTExLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDY2NyArMCwwIEBACi0jaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0v
LyBUZXh0dXJlU3RvcmFnZTExLmNwcDogSW1wbGVtZW50cyB0aGUgYWJzdHJhY3Qgcng6OlRleHR1
cmVTdG9yYWdlMTEgY2xhc3MgYW5kIGl0cyBjb25jcmV0ZSBkZXJpdmVkCi0vLyBjbGFzc2VzIFRl
eHR1cmVTdG9yYWdlMTFfMkQgYW5kIFRleHR1cmVTdG9yYWdlMTFfQ3ViZSwgd2hpY2ggYWN0IGFz
IHRoZSBpbnRlcmZhY2UgdG8gdGhlIEQzRDExIHRleHR1cmUuCi0KLSNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvVGV4dHVyZVN0b3JhZ2UxMS5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL1JlbmRlcmVyMTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVy
VGFyZ2V0MTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvU3dhcENoYWluMTEuaCIK
LSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXIxMV91dGlscy5oIgotCi0jaW5j
bHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgi
Ci0KLW5hbWVzcGFjZSByeAotewotCi1UZXh0dXJlU3RvcmFnZTExOjpUZXh0dXJlU3RvcmFnZTEx
KFJlbmRlcmVyICpyZW5kZXJlciwgVUlOVCBiaW5kRmxhZ3MpCi0gICAgOiBtQmluZEZsYWdzKGJp
bmRGbGFncyksCi0gICAgICBtTG9kT2Zmc2V0KDApLAotICAgICAgbU1pcExldmVscygwKSwKLSAg
ICAgIG1UZXh0dXJlKE5VTEwpLAotICAgICAgbVRleHR1cmVGb3JtYXQoRFhHSV9GT1JNQVRfVU5L
Tk9XTiksCi0gICAgICBtU2hhZGVyUmVzb3VyY2VGb3JtYXQoRFhHSV9GT1JNQVRfVU5LTk9XTiks
Ci0gICAgICBtUmVuZGVyVGFyZ2V0Rm9ybWF0KERYR0lfRk9STUFUX1VOS05PV04pLAotICAgICAg
bURlcHRoU3RlbmNpbEZvcm1hdChEWEdJX0ZPUk1BVF9VTktOT1dOKSwKLSAgICAgIG1TUlYoTlVM
TCksCi0gICAgICBtVGV4dHVyZVdpZHRoKDApLAotICAgICAgbVRleHR1cmVIZWlnaHQoMCkKLXsK
LSAgICBtUmVuZGVyZXIgPSBSZW5kZXJlcjExOjptYWtlUmVuZGVyZXIxMShyZW5kZXJlcik7Ci19
Ci0KLVRleHR1cmVTdG9yYWdlMTE6On5UZXh0dXJlU3RvcmFnZTExKCkKLXsKLX0KLQotVGV4dHVy
ZVN0b3JhZ2UxMSAqVGV4dHVyZVN0b3JhZ2UxMTo6bWFrZVRleHR1cmVTdG9yYWdlMTEoVGV4dHVy
ZVN0b3JhZ2UgKnN0b3JhZ2UpCi17Ci0gICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoVGV4dHVy
ZVN0b3JhZ2UxMSosIHN0b3JhZ2UpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZVN0
b3JhZ2UxMSo+KHN0b3JhZ2UpOwotfQotCi1EV09SRCBUZXh0dXJlU3RvcmFnZTExOjpHZXRUZXh0
dXJlQmluZEZsYWdzKERYR0lfRk9STUFUIGZvcm1hdCwgR0xlbnVtIGdsdXNhZ2UsIGJvb2wgZm9y
Y2VSZW5kZXJhYmxlKQotewotICAgIFVJTlQgYmluZEZsYWdzID0gRDNEMTFfQklORF9TSEFERVJf
UkVTT1VSQ0U7Ci0gICAgCi0gICAgaWYgKGQzZDExOjpJc0RlcHRoU3RlbmNpbEZvcm1hdChmb3Jt
YXQpKQotICAgIHsKLSAgICAgICAgYmluZEZsYWdzIHw9IEQzRDExX0JJTkRfREVQVEhfU1RFTkNJ
TDsKLSAgICB9Ci0gICAgZWxzZSBpZihmb3JjZVJlbmRlcmFibGUgfHwgKFRleHR1cmVTdG9yYWdl
MTE6OklzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoZm9ybWF0KSAmJiAoZ2x1c2FnZSA9PSBHTF9G
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKSkpCi0gICAgewotICAgICAgICBiaW5kRmxhZ3Mg
fD0gRDNEMTFfQklORF9SRU5ERVJfVEFSR0VUOwotICAgIH0KLSAgICByZXR1cm4gYmluZEZsYWdz
OwotfQotCi1ib29sIFRleHR1cmVTdG9yYWdlMTE6OklzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUo
RFhHSV9GT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaChmb3JtYXQpCi0gICAgewotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
QThfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDoKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X0ZMT0FUOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9COEc4UjhBOF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVU5PUk06
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1IxNl9GTE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X0ZMT0FUOgotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk06IAotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzNfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVDogLy8gbm90
IHJlbmRlcmFibGUgb24gYWxsIGRldmljZXMKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLX0KLQotVUlOVCBUZXh0dXJlU3RvcmFnZTExOjpnZXRCaW5kRmxhZ3MoKSBjb25zdAot
ewotICAgIHJldHVybiBtQmluZEZsYWdzOwotfQotCi1JRDNEMTFUZXh0dXJlMkQgKlRleHR1cmVT
dG9yYWdlMTE6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRleHR1cmU7
Ci19Ci0KLWludCBUZXh0dXJlU3RvcmFnZTExOjpnZXRMb2RPZmZzZXQoKSBjb25zdAotewotICAg
IHJldHVybiBtTG9kT2Zmc2V0OwotfQotCi1ib29sIFRleHR1cmVTdG9yYWdlMTE6OmlzUmVuZGVy
VGFyZ2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gKG1CaW5kRmxhZ3MgJiAoRDNEMTFfQklORF9S
RU5ERVJfVEFSR0VUIHwgRDNEMTFfQklORF9ERVBUSF9TVEVOQ0lMKSkgIT0gMDsKLX0KLSAgICAK
LWJvb2wgVGV4dHVyZVN0b3JhZ2UxMTo6aXNNYW5hZ2VkKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLWludCBUZXh0dXJlU3RvcmFnZTExOjpsZXZlbENvdW50KCkKLXsKLSAgICBp
bnQgbGV2ZWxzID0gMDsKLSAgICBpZiAoZ2V0QmFzZVRleHR1cmUoKSkKLSAgICB7Ci0gICAgICAg
IGxldmVscyA9IG1NaXBMZXZlbHMgLSBnZXRMb2RPZmZzZXQoKTsKLSAgICB9Ci0gICAgcmV0dXJu
IGxldmVsczsKLX0KLQotVUlOVCBUZXh0dXJlU3RvcmFnZTExOjpnZXRTdWJyZXNvdXJjZUluZGV4
KGludCBsZXZlbCwgaW50IGZhY2VJbmRleCkKLXsKLSAgICBVSU5UIGluZGV4ID0gMDsKLSAgICBp
ZiAoZ2V0QmFzZVRleHR1cmUoKSkKLSAgICB7Ci0gICAgICAgIGluZGV4ID0gRDNEMTFDYWxjU3Vi
cmVzb3VyY2UobGV2ZWwsIGZhY2VJbmRleCwgbU1pcExldmVscyk7Ci0gICAgfQotICAgIHJldHVy
biBpbmRleDsKLX0KLQotYm9vbCBUZXh0dXJlU3RvcmFnZTExOjp1cGRhdGVTdWJyZXNvdXJjZUxl
dmVsKElEM0QxMVRleHR1cmUyRCAqc3JjVGV4dHVyZSwgdW5zaWduZWQgaW50IHNvdXJjZVN1YnJl
c291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBsZXZlbCwgaW50IGZhY2UsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKHNyY1RleHR1cmUpCi0gICAgewotICAgICAgICAvLyBS
b3VuZCB1cCB0aGUgd2lkdGggYW5kIGhlaWdodCB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiBk
aW1lbnNpb24gYWxpZ25tZW50Ci0gICAgICAgIHVuc2lnbmVkIGludCBkaW1lbnNpb25BbGlnbm1l
bnQgPSBkM2QxMTo6R2V0VGV4dHVyZUZvcm1hdERpbWVuc2lvbkFsaWdubWVudChtVGV4dHVyZUZv
cm1hdCk7Ci0gICAgICAgIHdpZHRoID0gd2lkdGggKyBkaW1lbnNpb25BbGlnbm1lbnQgLSAxIC0g
KHdpZHRoIC0gMSkgJSBkaW1lbnNpb25BbGlnbm1lbnQ7Ci0gICAgICAgIGhlaWdodCA9IGhlaWdo
dCArIGRpbWVuc2lvbkFsaWdubWVudCAtIDEgLSAoaGVpZ2h0IC0gMSkgJSBkaW1lbnNpb25BbGln
bm1lbnQ7Ci0KLSAgICAgICAgRDNEMTFfQk9YIHNyY0JveDsKLSAgICAgICAgc3JjQm94LmxlZnQg
PSB4b2Zmc2V0OwotICAgICAgICBzcmNCb3gudG9wID0geW9mZnNldDsKLSAgICAgICAgc3JjQm94
LnJpZ2h0ID0geG9mZnNldCArIHdpZHRoOwotICAgICAgICBzcmNCb3guYm90dG9tID0geW9mZnNl
dCArIGhlaWdodDsKLSAgICAgICAgc3JjQm94LmZyb250ID0gMDsKLSAgICAgICAgc3JjQm94LmJh
Y2sgPSAxOwotCi0gICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQgPSBtUmVuZGVy
ZXItPmdldERldmljZUNvbnRleHQoKTsKLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChnZXRCYXNl
VGV4dHVyZSgpKTsKLSAgICAgICAgY29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKGdldEJh
c2VUZXh0dXJlKCksIGdldFN1YnJlc291cmNlSW5kZXgobGV2ZWwgKyBtTG9kT2Zmc2V0LCBmYWNl
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvZmZzZXQsIHlvZmZz
ZXQsIDAsIHNyY1RleHR1cmUsIHNvdXJjZVN1YnJlc291cmNlLCAmc3JjQm94KTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFRleHR1
cmVTdG9yYWdlMTE6OmdlbmVyYXRlTWlwbWFwTGF5ZXIoUmVuZGVyVGFyZ2V0MTEgKnNvdXJjZSwg
UmVuZGVyVGFyZ2V0MTEgKmRlc3QpCi17Ci0gICAgaWYgKHNvdXJjZSAmJiBkZXN0KQotICAgIHsK
LSAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzb3VyY2VTUlYgPSBzb3VyY2UtPmdl
dFNoYWRlclJlc291cmNlVmlldygpOwotICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpk
ZXN0UlRWID0gZGVzdC0+Z2V0UmVuZGVyVGFyZ2V0VmlldygpOwotCi0gICAgICAgIGlmIChzb3Vy
Y2VTUlYgJiYgZGVzdFJUVikKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlJlY3RhbmdsZSBz
b3VyY2VBcmVhOwotICAgICAgICAgICAgc291cmNlQXJlYS54ID0gMDsKLSAgICAgICAgICAgIHNv
dXJjZUFyZWEueSA9IDA7Ci0gICAgICAgICAgICBzb3VyY2VBcmVhLndpZHRoID0gc291cmNlLT5n
ZXRXaWR0aCgpOwotICAgICAgICAgICAgc291cmNlQXJlYS5oZWlnaHQgPSBzb3VyY2UtPmdldEhl
aWdodCgpOwotCi0gICAgICAgICAgICBnbDo6UmVjdGFuZ2xlIGRlc3RBcmVhOwotICAgICAgICAg
ICAgZGVzdEFyZWEueCA9IDA7Ci0gICAgICAgICAgICBkZXN0QXJlYS55ID0gMDsKLSAgICAgICAg
ICAgIGRlc3RBcmVhLndpZHRoID0gZGVzdC0+Z2V0V2lkdGgoKTsKLSAgICAgICAgICAgIGRlc3RB
cmVhLmhlaWdodCA9IGRlc3QtPmdldEhlaWdodCgpOwotCi0gICAgICAgICAgICBtUmVuZGVyZXIt
PmNvcHlUZXh0dXJlKHNvdXJjZVNSViwgc291cmNlQXJlYSwgc291cmNlLT5nZXRXaWR0aCgpLCBz
b3VyY2UtPmdldEhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZXN0UlRWLCBkZXN0QXJlYSwgZGVzdC0+Z2V0V2lkdGgoKSwgZGVzdC0+Z2V0SGVpZ2h0KCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHQkEpOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi1UZXh0dXJlU3RvcmFnZTExXzJEOjpUZXh0dXJlU3RvcmFnZTExXzJEKFJlbmRl
cmVyICpyZW5kZXJlciwgU3dhcENoYWluMTEgKnN3YXBjaGFpbikKLSAgICA6IFRleHR1cmVTdG9y
YWdlMTEocmVuZGVyZXIsIEQzRDExX0JJTkRfUkVOREVSX1RBUkdFVCB8IEQzRDExX0JJTkRfU0hB
REVSX1JFU09VUkNFKQotewotICAgIG1UZXh0dXJlID0gc3dhcGNoYWluLT5nZXRPZmZzY3JlZW5U
ZXh0dXJlKCk7Ci0gICAgbVNSViA9IHN3YXBjaGFpbi0+Z2V0UmVuZGVyVGFyZ2V0U2hhZGVyUmVz
b3VyY2UoKTsKLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVO
VEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQotICAgIHsKLSAgICAgICAgbVJlbmRlclRh
cmdldFtpXSA9IE5VTEw7Ci0gICAgfQotCi0gICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4RGVz
YzsKLSAgICBtVGV4dHVyZS0+R2V0RGVzYygmdGV4RGVzYyk7Ci0gICAgbU1pcExldmVscyA9IHRl
eERlc2MuTWlwTGV2ZWxzOwotICAgIG1UZXh0dXJlRm9ybWF0ID0gdGV4RGVzYy5Gb3JtYXQ7Ci0g
ICAgbVRleHR1cmVXaWR0aCA9IHRleERlc2MuV2lkdGg7Ci0gICAgbVRleHR1cmVIZWlnaHQgPSB0
ZXhEZXNjLkhlaWdodDsKLQotICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2
RGVzYzsKLSAgICBtU1JWLT5HZXREZXNjKCZzcnZEZXNjKTsKLSAgICBtU2hhZGVyUmVzb3VyY2VG
b3JtYXQgPSBzcnZEZXNjLkZvcm1hdDsKLQotICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcqIG9m
ZnNjcmVlblJUViA9IHN3YXBjaGFpbi0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0gICAgRDNEMTFfUkVO
REVSX1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVzYzsKLSAgICBvZmZzY3JlZW5SVFYtPkdldERlc2Mo
JnJ0dkRlc2MpOwotICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBydHZEZXNjLkZvcm1hdDsKLSAg
ICBvZmZzY3JlZW5SVFYtPlJlbGVhc2UoKTsKLQotICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBE
WEdJX0ZPUk1BVF9VTktOT1dOOwotfQotCi1UZXh0dXJlU3RvcmFnZTExXzJEOjpUZXh0dXJlU3Rv
cmFnZTExXzJEKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCkKLSAgICA6IFRleHR1cmVTdG9yYWdlMTEocmVuZGVyZXIsIEdldFRl
eHR1cmVCaW5kRmxhZ3MoZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlRm9ybWF0KGludGVybmFsZm9y
bWF0KSwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSkpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCi0g
ICAgewotICAgICAgICBtUmVuZGVyVGFyZ2V0W2ldID0gTlVMTDsKLSAgICB9Ci0KLSAgICBEWEdJ
X0ZPUk1BVCBjb252ZXJ0ZWRGb3JtYXQgPSBnbF9kM2QxMTo6Q29udmVydFRleHR1cmVGb3JtYXQo
aW50ZXJuYWxmb3JtYXQpOwotICAgIGlmIChkM2QxMTo6SXNEZXB0aFN0ZW5jaWxGb3JtYXQoY29u
dmVydGVkRm9ybWF0KSkKLSAgICB7Ci0gICAgICAgIG1UZXh0dXJlRm9ybWF0ID0gZDNkMTE6Okdl
dERlcHRoVGV4dHVyZUZvcm1hdChjb252ZXJ0ZWRGb3JtYXQpOwotICAgICAgICBtU2hhZGVyUmVz
b3VyY2VGb3JtYXQgPSBkM2QxMTo6R2V0RGVwdGhTaGFkZXJSZXNvdXJjZUZvcm1hdChjb252ZXJ0
ZWRGb3JtYXQpOwotICAgICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0ID0gY29udmVydGVkRm9ybWF0
OwotICAgICAgICBtUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5LTk9XTjsKLSAg
ICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgbVRleHR1cmVGb3JtYXQgPSBjb252ZXJ0ZWRG
b3JtYXQ7Ci0gICAgICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsK
LSAgICAgICAgbURlcHRoU3RlbmNpbEZvcm1hdCA9IERYR0lfRk9STUFUX1VOS05PV047Ci0gICAg
ICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBjb252ZXJ0ZWRGb3JtYXQ7Ci0gICAgfQotCi0gICAg
Ly8gaWYgdGhlIHdpZHRoIG9yIGhlaWdodCBpcyBub3QgcG9zaXRpdmUgdGhpcyBzaG91bGQgYmUg
dHJlYXRlZCBhcyBhbiBpbmNvbXBsZXRlIHRleHR1cmUKLSAgICAvLyB3ZSBoYW5kbGUgdGhhdCBo
ZXJlIGJ5IHNraXBwaW5nIHRoZSBkM2QgdGV4dHVyZSBjcmVhdGlvbgotICAgIGlmICh3aWR0aCA+
IDAgJiYgaGVpZ2h0ID4gMCkKLSAgICB7Ci0gICAgICAgIC8vIGFkanVzdCBzaXplIGlmIG5lZWRl
ZCBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlcwotICAgICAgICBnbDo6TWFrZVZhbGlkU2l6ZShmYWxz
ZSwgZ2w6OklzQ29tcHJlc3NlZChpbnRlcm5hbGZvcm1hdCksICZ3aWR0aCwgJmhlaWdodCwgJm1M
b2RPZmZzZXQpOwotCi0gICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5n
ZXREZXZpY2UoKTsKLQotICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXNjOwotICAgICAg
ICBkZXNjLldpZHRoID0gd2lkdGg7ICAgICAgLy8gQ29tcHJlc3NlZCB0ZXh0dXJlIHNpemUgY29u
c3RyYWludHM/Ci0gICAgICAgIGRlc2MuSGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBkZXNjLk1p
cExldmVscyA9IChsZXZlbHMgPiAwKSA/IGxldmVscyArIG1Mb2RPZmZzZXQgOiAwOwotICAgICAg
ICBkZXNjLkFycmF5U2l6ZSA9IDE7Ci0gICAgICAgIGRlc2MuRm9ybWF0ID0gbVRleHR1cmVGb3Jt
YXQ7Ci0gICAgICAgIGRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7Ci0gICAgICAgIGRlc2MuU2Ft
cGxlRGVzYy5RdWFsaXR5ID0gMDsKLSAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RF
RkFVTFQ7Ci0gICAgICAgIGRlc2MuQmluZEZsYWdzID0gZ2V0QmluZEZsYWdzKCk7Ci0gICAgICAg
IGRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOwotICAgICAgICBkZXNjLk1pc2NGbGFncyA9IDA7Ci0K
LSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVzYywg
TlVMTCwgJm1UZXh0dXJlKTsKLQotICAgICAgICAvLyB0aGlzIGNhbiBoYXBwZW4gZnJvbSB3aW5k
b3dzIFREUgotICAgICAgICBpZiAoZDNkMTE6OmlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1SZW5kZXJlci0+bm90aWZ5RGV2aWNlTG9zdCgpOwotICAg
ICAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0gICAgICAg
IGVsc2UgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQo
cmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICAgICAgRVJSKCJDcmVhdGluZyBpbWFn
ZSBmYWlsZWQuIik7Ci0gICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtVGV4dHVyZS0+
R2V0RGVzYygmZGVzYyk7Ci0gICAgICAgICAgICBtTWlwTGV2ZWxzID0gZGVzYy5NaXBMZXZlbHM7
Ci0gICAgICAgICAgICBtVGV4dHVyZVdpZHRoID0gZGVzYy5XaWR0aDsKLSAgICAgICAgICAgIG1U
ZXh0dXJlSGVpZ2h0ID0gZGVzYy5IZWlnaHQ7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVRleHR1
cmVTdG9yYWdlMTFfMkQ6On5UZXh0dXJlU3RvcmFnZTExXzJEKCkKLXsKLSAgICBpZiAobVRleHR1
cmUpCi0gICAgewotICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICBtVGV4dHVy
ZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1TUlYpCi0gICAgewotICAgICAgICBtU1JWLT5S
ZWxlYXNlKCk7Ci0gICAgICAgIG1TUlYgPSBOVUxMOwotICAgIH0KLQotICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsg
aSsrKQotICAgIHsKLSAgICAgICAgZGVsZXRlIG1SZW5kZXJUYXJnZXRbaV07Ci0gICAgICAgIG1S
ZW5kZXJUYXJnZXRbaV0gPSBOVUxMOwotICAgIH0KLX0KLQotVGV4dHVyZVN0b3JhZ2UxMV8yRCAq
VGV4dHVyZVN0b3JhZ2UxMV8yRDo6bWFrZVRleHR1cmVTdG9yYWdlMTFfMkQoVGV4dHVyZVN0b3Jh
Z2UgKnN0b3JhZ2UpCi17Ci0gICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoVGV4dHVyZVN0b3Jh
Z2UxMV8yRCosIHN0b3JhZ2UpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZVN0b3Jh
Z2UxMV8yRCo+KHN0b3JhZ2UpOwotfQotCi1SZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlMTFf
MkQ6OmdldFJlbmRlclRhcmdldChpbnQgbGV2ZWwpCi17Ci0gICAgaWYgKGxldmVsID49IDAgJiYg
bGV2ZWwgPCBzdGF0aWNfY2FzdDxpbnQ+KG1NaXBMZXZlbHMpKQotICAgIHsKLSAgICAgICAgaWYg
KCFtUmVuZGVyVGFyZ2V0W2xldmVsXSkKLSAgICAgICAgewotICAgICAgICAgICAgSUQzRDExRGV2
aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotICAgICAgICAgICAgSFJFU1VM
VCByZXN1bHQ7Ci0KLSAgICAgICAgICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mg
c3J2RGVzYzsKLSAgICAgICAgICAgIHNydkRlc2MuRm9ybWF0ID0gbVNoYWRlclJlc291cmNlRm9y
bWF0OwotICAgICAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfU1JWX0RJTUVO
U0lPTl9URVhUVVJFMkQ7Ci0gICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyRC5Nb3N0RGV0YWls
ZWRNaXAgPSBsZXZlbDsKLSAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJELk1pcExldmVscyA9
IDE7Ci0KLSAgICAgICAgICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2OwotICAgICAg
ICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcobVRleHR1cmUs
ICZzcnZEZXNjLCAmc3J2KTsKLQotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVN
T1JZKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgICAg
ICAgICAgaWYgKG1SZW5kZXJUYXJnZXRGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVT
QyBydHZEZXNjOwotICAgICAgICAgICAgICAgIHJ0dkRlc2MuRm9ybWF0ID0gbVJlbmRlclRhcmdl
dEZvcm1hdDsKLSAgICAgICAgICAgICAgICBydHZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9S
VFZfRElNRU5TSU9OX1RFWFRVUkUyRDsKLSAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUy
RC5NaXBTbGljZSA9IGxldmVsOwotCi0gICAgICAgICAgICAgICAgSUQzRDExUmVuZGVyVGFyZ2V0
VmlldyAqcnR2OwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVy
VGFyZ2V0VmlldyhtVGV4dHVyZSwgJnJ0dkRlc2MsICZydHYpOwotCi0gICAgICAgICAgICAgICAg
aWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgc3J2LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVM
TCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOwotCi0gICAgICAgICAgICAgICAgLy8gUmVuZGVyVGFyZ2V0MTEgZXhwZWN0cyB0
byBiZSB0aGUgb3duZXIgb2YgdGhlIHJlc291cmNlcyBpdCBpcyBnaXZlbiBidXQgVGV4dHVyZVN0
b3JhZ2UxMQotICAgICAgICAgICAgICAgIC8vIGFsc28gbmVlZHMgdG8ga2VlcCBhIHJlZmVyZW5j
ZSB0byB0aGUgdGV4dHVyZS4KLSAgICAgICAgICAgICAgICBtVGV4dHVyZS0+QWRkUmVmKCk7Ci0K
LSAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2xldmVsXSA9IG5ldyBSZW5kZXJUYXJnZXQx
MShtUmVuZGVyZXIsIHJ0diwgbVRleHR1cmUsIHNydiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVyZVdpZHRo
ID4+IGxldmVsLCAxVSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjptYXgobVRleHR1cmVIZWlnaHQgPj4gbGV2ZWwsIDFVKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtRGVwdGhTdGVuY2lsRm9ybWF0
ICE9IERYR0lfRk9STUFUX1VOS05PV04pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
RDNEMTFfREVQVEhfU1RFTkNJTF9WSUVXX0RFU0MgZHN2RGVzYzsKLSAgICAgICAgICAgICAgICBk
c3ZEZXNjLkZvcm1hdCA9IG1EZXB0aFN0ZW5jaWxGb3JtYXQ7Ci0gICAgICAgICAgICAgICAgZHN2
RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMkQ7Ci0gICAg
ICAgICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkQuTWlwU2xpY2UgPSBsZXZlbDsKLSAgICAgICAg
ICAgICAgICBkc3ZEZXNjLkZsYWdzID0gMDsKLQotICAgICAgICAgICAgICAgIElEM0QxMURlcHRo
U3RlbmNpbFZpZXcgKmRzdjsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZURlcHRoU3RlbmNpbFZpZXcobVRleHR1cmUsICZkc3ZEZXNjLCAmZHN2KTsKLQotICAgICAgICAg
ICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHNydi0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PFJlbmRlclRhcmdl
dCo+KE5VTEwpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgQVNTRVJUKFNV
Q0NFRURFRChyZXN1bHQpKTsKLQotICAgICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdldDExIGV4
cGVjdHMgdG8gYmUgdGhlIG93bmVyIG9mIHRoZSByZXNvdXJjZXMgaXQgaXMgZ2l2ZW4gYnV0IFRl
eHR1cmVTdG9yYWdlMTEKLSAgICAgICAgICAgICAgICAvLyBhbHNvIG5lZWRzIHRvIGtlZXAgYSBy
ZWZlcmVuY2UgdG8gdGhlIHRleHR1cmUuCi0gICAgICAgICAgICAgICAgbVRleHR1cmUtPkFkZFJl
ZigpOwotCi0gICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldFtsZXZlbF0gPSBuZXcgUmVuZGVy
VGFyZ2V0MTEobVJlbmRlcmVyLCBkc3YsIG1UZXh0dXJlLCBzcnYsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobVRleHR1
cmVXaWR0aCA+PiBsZXZlbCwgMVUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1UZXh0dXJlSGVpZ2h0ID4+IGxldmVs
LCAxVSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICByZXR1cm4gbVJlbmRlclRhcmdldFtsZXZlbF07Ci0gICAgfQotICAgIGVsc2UK
LSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLX0KLQotSUQzRDExU2hhZGVyUmVz
b3VyY2VWaWV3ICpUZXh0dXJlU3RvcmFnZTExXzJEOjpnZXRTUlYoKQotewotICAgIGlmICghbVNS
VikKLSAgICB7Ci0gICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXRE
ZXZpY2UoKTsKLQotICAgICAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIHNydkRl
c2M7Ci0gICAgICAgIHNydkRlc2MuRm9ybWF0ID0gbVNoYWRlclJlc291cmNlRm9ybWF0OwotICAg
ICAgICBzcnZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUy
RDsKLSAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkQuTWlwTGV2ZWxzID0gKG1NaXBMZXZlbHMgPT0g
MCA/IC0xIDogbU1pcExldmVscyk7Ci0gICAgICAgIHNydkRlc2MuVGV4dHVyZTJELk1vc3REZXRh
aWxlZE1pcCA9IDA7Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNo
YWRlclJlc291cmNlVmlldyhtVGV4dHVyZSwgJnNydkRlc2MsICZtU1JWKTsKLQotICAgICAgICBp
ZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8SUQzRDExU2hhZGVyUmVz
b3VyY2VWaWV3Kj4oTlVMTCkpOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQo
cmVzdWx0KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1TUlY7Ci19Ci0KLXZvaWQgVGV4dHVyZVN0
b3JhZ2UxMV8yRDo6Z2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKQotewotICAgIFJlbmRlclRhcmdl
dDExICpzb3VyY2UgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRl
clRhcmdldChsZXZlbCAtIDEpKTsKLSAgICBSZW5kZXJUYXJnZXQxMSAqZGVzdCA9IFJlbmRlclRh
cmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFyZ2V0KGxldmVsKSk7Ci0KLSAg
ICBnZW5lcmF0ZU1pcG1hcExheWVyKHNvdXJjZSwgZGVzdCk7Ci19Ci0KLVRleHR1cmVTdG9yYWdl
MTFfQ3ViZTo6VGV4dHVyZVN0b3JhZ2UxMV9DdWJlKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxl
dmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5k
ZXJhYmxlLCBpbnQgc2l6ZSkKLSAgICA6IFRleHR1cmVTdG9yYWdlMTEocmVuZGVyZXIsIEdldFRl
eHR1cmVCaW5kRmxhZ3MoZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlRm9ybWF0KGludGVybmFsZm9y
bWF0KSwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSkpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCA2OyBpKyspCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0g
MDsgaiA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGorKykKLSAgICAg
ICAgewotICAgICAgICAgICAgbVJlbmRlclRhcmdldFtpXVtqXSA9IE5VTEw7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBEWEdJX0ZPUk1BVCBjb252ZXJ0ZWRGb3JtYXQgPSBnbF9kM2QxMTo6Q29u
dmVydFRleHR1cmVGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwotICAgIGlmIChkM2QxMTo6SXNEZXB0
aFN0ZW5jaWxGb3JtYXQoY29udmVydGVkRm9ybWF0KSkKLSAgICB7Ci0gICAgICAgIG1UZXh0dXJl
Rm9ybWF0ID0gZDNkMTE6OkdldERlcHRoVGV4dHVyZUZvcm1hdChjb252ZXJ0ZWRGb3JtYXQpOwot
ICAgICAgICBtU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBkM2QxMTo6R2V0RGVwdGhTaGFkZXJSZXNv
dXJjZUZvcm1hdChjb252ZXJ0ZWRGb3JtYXQpOwotICAgICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0
ID0gY29udmVydGVkRm9ybWF0OwotICAgICAgICBtUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gRFhHSV9G
T1JNQVRfVU5LTk9XTjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgbVRleHR1cmVG
b3JtYXQgPSBjb252ZXJ0ZWRGb3JtYXQ7Ci0gICAgICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9
IGNvbnZlcnRlZEZvcm1hdDsKLSAgICAgICAgbURlcHRoU3RlbmNpbEZvcm1hdCA9IERYR0lfRk9S
TUFUX1VOS05PV047Ci0gICAgICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBjb252ZXJ0ZWRGb3Jt
YXQ7Ci0gICAgfQotCi0gICAgLy8gaWYgdGhlIHNpemUgaXMgbm90IHBvc2l0aXZlIHRoaXMgc2hv
dWxkIGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJlCi0gICAgLy8gd2UgaGFuZGxl
IHRoYXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRpb24KLSAgICBpZiAo
c2l6ZSA+IDApCi0gICAgewotICAgICAgICAvLyBhZGp1c3Qgc2l6ZSBpZiBuZWVkZWQgZm9yIGNv
bXByZXNzZWQgdGV4dHVyZXMKLSAgICAgICAgaW50IGhlaWdodCA9IHNpemU7Ci0gICAgICAgIGds
OjpNYWtlVmFsaWRTaXplKGZhbHNlLCBnbDo6SXNDb21wcmVzc2VkKGludGVybmFsZm9ybWF0KSwg
JnNpemUsICZoZWlnaHQsICZtTG9kT2Zmc2V0KTsKLQotICAgICAgICBJRDNEMTFEZXZpY2UgKmRl
dmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0KLSAgICAgICAgRDNEMTFfVEVYVFVSRTJE
X0RFU0MgZGVzYzsKLSAgICAgICAgZGVzYy5XaWR0aCA9IHNpemU7Ci0gICAgICAgIGRlc2MuSGVp
Z2h0ID0gc2l6ZTsKLSAgICAgICAgZGVzYy5NaXBMZXZlbHMgPSAobGV2ZWxzID4gMCkgPyBsZXZl
bHMgKyBtTG9kT2Zmc2V0IDogMDsKLSAgICAgICAgZGVzYy5BcnJheVNpemUgPSA2OwotICAgICAg
ICBkZXNjLkZvcm1hdCA9IG1UZXh0dXJlRm9ybWF0OwotICAgICAgICBkZXNjLlNhbXBsZURlc2Mu
Q291bnQgPSAxOwotICAgICAgICBkZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7Ci0gICAgICAg
IGRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOwotICAgICAgICBkZXNjLkJpbmRGbGFn
cyA9IGdldEJpbmRGbGFncygpOwotICAgICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKLSAg
ICAgICAgZGVzYy5NaXNjRmxhZ3MgPSBEM0QxMV9SRVNPVVJDRV9NSVNDX1RFWFRVUkVDVUJFOwot
Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRlc2Ms
IE5VTEwsICZtVGV4dHVyZSk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAg
ICAgICAgRVJSKCJDcmVhdGluZyBpbWFnZSBmYWlsZWQuIik7Ci0gICAgICAgICAgICBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7
Ci0gICAgICAgICAgICBtVGV4dHVyZS0+R2V0RGVzYygmZGVzYyk7Ci0gICAgICAgICAgICBtTWlw
TGV2ZWxzID0gZGVzYy5NaXBMZXZlbHM7Ci0gICAgICAgICAgICBtVGV4dHVyZVdpZHRoID0gZGVz
Yy5XaWR0aDsKLSAgICAgICAgICAgIG1UZXh0dXJlSGVpZ2h0ID0gZGVzYy5IZWlnaHQ7Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLVRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6flRleHR1cmVTdG9yYWdl
MTFfQ3ViZSgpCi17Ci0gICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbVRleHR1cmUt
PlJlbGVhc2UoKTsKLSAgICAgICAgbVRleHR1cmUgPSBOVUxMOwotICAgIH0KLQotICAgIGlmICht
U1JWKQotICAgIHsKLSAgICAgICAgbVNSVi0+UmVsZWFzZSgpOwotICAgICAgICBtU1JWID0gTlVM
TDsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IDY7IGkrKykKLSAg
ICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgZ2w6OklNUExFTUVOVEFU
SU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZWxl
dGUgbVJlbmRlclRhcmdldFtpXVtqXTsKLSAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbaV1bal0g
PSBOVUxMOwotICAgICAgICB9Ci0gICAgfQotfQotCi1UZXh0dXJlU3RvcmFnZTExX0N1YmUgKlRl
eHR1cmVTdG9yYWdlMTFfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlMTFfQ3ViZShUZXh0dXJlU3Rv
cmFnZSAqc3RvcmFnZSkKLXsKLSAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShUZXh0dXJlU3Rv
cmFnZTExX0N1YmUqLCBzdG9yYWdlKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmVT
dG9yYWdlMTFfQ3ViZSo+KHN0b3JhZ2UpOwotfQotCi1SZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9y
YWdlMTFfQ3ViZTo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwp
Ci17Ci0gICAgdW5zaWduZWQgaW50IGZhY2VJZHggPSBnbDo6VGV4dHVyZUN1YmVNYXA6OmZhY2VJ
bmRleChmYWNlVGFyZ2V0KTsKLSAgICBpZiAobGV2ZWwgPj0gMCAmJiBsZXZlbCA8IHN0YXRpY19j
YXN0PGludD4obU1pcExldmVscykpCi0gICAgewotICAgICAgICBpZiAoIW1SZW5kZXJUYXJnZXRb
ZmFjZUlkeF1bbGV2ZWxdKQotICAgICAgICB7Ci0gICAgICAgICAgICBJRDNEMTFEZXZpY2UgKmRl
dmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3Vs
dDsKLQotICAgICAgICAgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNj
OwotICAgICAgICAgICAgc3J2RGVzYy5Gb3JtYXQgPSBtU2hhZGVyUmVzb3VyY2VGb3JtYXQ7Ci0g
ICAgICAgICAgICBzcnZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RF
WFRVUkUyREFSUkFZOyAvLyBXaWxsIGJlIHVzZWQgd2l0aCBUZXh0dXJlMkQgc2FtcGxlciwgbm90
IFRleHR1cmVDdWJlCi0gICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5Lk1vc3REZXRh
aWxlZE1pcCA9IGxldmVsOwotICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBM
ZXZlbHMgPSAxOwotICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5
U2xpY2UgPSBmYWNlSWR4OwotICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5BcnJh
eVNpemUgPSAxOwotCi0gICAgICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydjsK
LSAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KG1U
ZXh0dXJlLCAmc3J2RGVzYywgJnNydik7Ci0KLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9P
VVRPRk1FTU9SWSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PFJlbmRlclRhcmdldCo+KE5VTEwpKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0K
LSAgICAgICAgICAgIGlmIChtUmVuZGVyVGFyZ2V0Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05P
V04pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9W
SUVXX0RFU0MgcnR2RGVzYzsKLSAgICAgICAgICAgICAgICBydHZEZXNjLkZvcm1hdCA9IG1SZW5k
ZXJUYXJnZXRGb3JtYXQ7Ci0gICAgICAgICAgICAgICAgcnR2RGVzYy5WaWV3RGltZW5zaW9uID0g
RDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMkRBUlJBWTsKLSAgICAgICAgICAgICAgICBydHZE
ZXNjLlRleHR1cmUyREFycmF5Lk1pcFNsaWNlID0gbGV2ZWw7Ci0gICAgICAgICAgICAgICAgcnR2
RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSBmYWNlSWR4OwotICAgICAgICAg
ICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0gMTsKLQotICAgICAgICAg
ICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0djsKLSAgICAgICAgICAgICAgICByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobVRleHR1cmUsICZydHZEZXNjLCAm
cnR2KTsKLQotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHNydi0+UmVsZWFzZSgpOwotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRp
Y19jYXN0PFJlbmRlclRhcmdldCo+KE5VTEwpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgICAgICAgICAgICAgIC8v
IFJlbmRlclRhcmdldDExIGV4cGVjdHMgdG8gYmUgdGhlIG93bmVyIG9mIHRoZSByZXNvdXJjZXMg
aXQgaXMgZ2l2ZW4gYnV0IFRleHR1cmVTdG9yYWdlMTEKLSAgICAgICAgICAgICAgICAvLyBhbHNv
IG5lZWRzIHRvIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIHRleHR1cmUuCi0gICAgICAgICAgICAg
ICAgbVRleHR1cmUtPkFkZFJlZigpOwotCi0gICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldFtm
YWNlSWR4XVtsZXZlbF0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJlbmRlcmVyLCBydHYsIG1UZXh0
dXJlLCBzcnYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobVRleHR1cmVXaWR0aCA+PiBsZXZlbCwgMVUp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6bWF4KG1UZXh0dXJlSGVpZ2h0ID4+IGxldmVsLCAxVSkpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobURlcHRoU3RlbmNpbEZvcm1hdCAhPSBE
WEdJX0ZPUk1BVF9VTktOT1dOKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEQzRDEx
X0RFUFRIX1NURU5DSUxfVklFV19ERVNDIGRzdkRlc2M7Ci0gICAgICAgICAgICAgICAgZHN2RGVz
Yy5Gb3JtYXQgPSBtUmVuZGVyVGFyZ2V0Rm9ybWF0OwotICAgICAgICAgICAgICAgIGRzdkRlc2Mu
Vmlld0RpbWVuc2lvbiA9IEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTJEQVJSQVk7Ci0gICAg
ICAgICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBTbGljZSA9IGxldmVsOwotICAg
ICAgICAgICAgICAgIGRzdkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RBcnJheVNsaWNlID0gZmFj
ZUlkeDsKLSAgICAgICAgICAgICAgICBkc3ZEZXNjLlRleHR1cmUyREFycmF5LkFycmF5U2l6ZSA9
IDE7Ci0KLSAgICAgICAgICAgICAgICBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpkc3Y7Ci0gICAg
ICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxWaWV3KG1UZXh0
dXJlLCAmZHN2RGVzYywgJmRzdik7Ci0KLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVf
T1VUT0ZNRU1PUlkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzcnYt
PlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihOVUxMKSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAg
ICAgICAgICAgICAgICAvLyBSZW5kZXJUYXJnZXQxMSBleHBlY3RzIHRvIGJlIHRoZSBvd25lciBv
ZiB0aGUgcmVzb3VyY2VzIGl0IGlzIGdpdmVuIGJ1dCBUZXh0dXJlU3RvcmFnZTExCi0gICAgICAg
ICAgICAgICAgLy8gYWxzbyBuZWVkcyB0byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0dXJl
LgotICAgICAgICAgICAgICAgIG1UZXh0dXJlLT5BZGRSZWYoKTsKLQotICAgICAgICAgICAgICAg
IG1SZW5kZXJUYXJnZXRbZmFjZUlkeF1bbGV2ZWxdID0gbmV3IFJlbmRlclRhcmdldDExKG1SZW5k
ZXJlciwgZHN2LCBtVGV4dHVyZSwgc3J2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1UZXh0dXJlV2lk
dGggPj4gbGV2ZWwsIDFVKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVyZUhlaWdodCA+PiBs
ZXZlbCwgMVUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgcmV0dXJuIG1SZW5kZXJUYXJnZXRbZmFjZUlkeF1bbGV2ZWxdOwotICAg
IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci19Ci0KLUlE
M0QxMVNoYWRlclJlc291cmNlVmlldyAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXRTUlYoKQot
ewotICAgIGlmICghbVNSVikKLSAgICB7Ci0gICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0g
bVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLQotICAgICAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0Vf
VklFV19ERVNDIHNydkRlc2M7Ci0gICAgICAgIHNydkRlc2MuRm9ybWF0ID0gbVNoYWRlclJlc291
cmNlRm9ybWF0OwotICAgICAgICBzcnZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElN
RU5TSU9OX1RFWFRVUkVDVUJFOwotICAgICAgICBzcnZEZXNjLlRleHR1cmVDdWJlLk1pcExldmVs
cyA9IChtTWlwTGV2ZWxzID09IDAgPyAtMSA6IG1NaXBMZXZlbHMpOwotICAgICAgICBzcnZEZXNj
LlRleHR1cmVDdWJlLk1vc3REZXRhaWxlZE1pcCA9IDA7Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyhtVGV4dHVyZSwgJnNydkRlc2Ms
ICZtU1JWKTsKLQotICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGlj
X2Nhc3Q8SUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3Kj4oTlVMTCkpOwotICAgICAgICB9Ci0gICAg
ICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1TUlY7
Ci19Ci0KLXZvaWQgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZW5lcmF0ZU1pcG1hcChpbnQgZmFj
ZSwgaW50IGxldmVsKQotewotICAgIFJlbmRlclRhcmdldDExICpzb3VyY2UgPSBSZW5kZXJUYXJn
ZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRlclRhcmdldChHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCAtIDEpKTsKLSAgICBSZW5kZXJUYXJnZXQxMSAq
ZGVzdCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFyZ2V0
KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsKSk7Ci0KLSAgICBn
ZW5lcmF0ZU1pcG1hcExheWVyKHNvdXJjZSwgZGVzdCk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0b3Jh
Z2UxMS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9U
ZXh0dXJlU3RvcmFnZTExLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjNWRlZDA1
Yjg4OTc2OTdkMzkzNmQwNTA5N2RmNGRlOThiNzliY2QuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZTExLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAg
KzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRleHR1cmVTdG9yYWdlMTEuaDogRGVmaW5lcyB0
aGUgYWJzdHJhY3Qgcng6OlRleHR1cmVTdG9yYWdlMTEgY2xhc3MgYW5kIGl0cyBjb25jcmV0ZSBk
ZXJpdmVkCi0vLyBjbGFzc2VzIFRleHR1cmVTdG9yYWdlMTFfMkQgYW5kIFRleHR1cmVTdG9yYWdl
MTFfQ3ViZSwgd2hpY2ggYWN0IGFzIHRoZSBpbnRlcmZhY2UgdG8gdGhlIEQzRDExIHRleHR1cmUu
Ci0KLSNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX1RFWFRVUkVTVE9SQUdFMTFfSF8KLSNkZWZp
bmUgTElCR0xFU1YyX1JFTkRFUkVSX1RFWFRVUkVTVE9SQUdFMTFfSF8KLQotI2luY2x1ZGUgImxp
YkdMRVN2Mi9UZXh0dXJlLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVT
dG9yYWdlLmgiCi0KLW5hbWVzcGFjZSByeAotewotY2xhc3MgUmVuZGVyVGFyZ2V0OwotY2xhc3Mg
UmVuZGVyVGFyZ2V0MTE7Ci1jbGFzcyBSZW5kZXJlcjsKLWNsYXNzIFJlbmRlcmVyMTE7Ci1jbGFz
cyBTd2FwQ2hhaW4xMTsKLQotY2xhc3MgVGV4dHVyZVN0b3JhZ2UxMSA6IHB1YmxpYyBUZXh0dXJl
U3RvcmFnZQotewotICBwdWJsaWM6Ci0gICAgVGV4dHVyZVN0b3JhZ2UxMShSZW5kZXJlciAqcmVu
ZGVyZXIsIFVJTlQgYmluZEZsYWdzKTsKLSAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTExKCk7
Ci0KLSAgICBzdGF0aWMgVGV4dHVyZVN0b3JhZ2UxMSAqbWFrZVRleHR1cmVTdG9yYWdlMTEoVGV4
dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpOwotCi0gICAgc3RhdGljIERXT1JEIEdldFRleHR1cmVCaW5k
RmxhZ3MoRFhHSV9GT1JNQVQgZDNkZm10LCBHTGVudW0gZ2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRl
cmFibGUpOwotICAgIHN0YXRpYyBib29sIElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoRFhHSV9G
T1JNQVQgZm9ybWF0KTsKLQotICAgIFVJTlQgZ2V0QmluZEZsYWdzKCkgY29uc3Q7Ci0KLSAgICB2
aXJ0dWFsIElEM0QxMVRleHR1cmUyRCAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0U1JWKCkgPSAwOwotICAgIHZpcnR1YWwg
UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoKSB7IHJldHVybiBnZXRSZW5kZXJUYXJnZXQo
MCk7IH0KLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KGludCBsZXZl
bCkgeyByZXR1cm4gTlVMTDsgfQotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJU
YXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQpIHsgcmV0dXJuIGdldFJlbmRlclRhcmdldChmYWNlVGFy
Z2V0LCAwKTsgfQotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xl
bnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkgeyByZXR1cm4gTlVMTDsgfQotCi0gICAgdmlydHVh
bCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCkge307Ci0gICAgdmlydHVhbCB2b2lkIGdl
bmVyYXRlTWlwbWFwKGludCBmYWNlLCBpbnQgbGV2ZWwpIHt9OwotCi0gICAgdmlydHVhbCBpbnQg
Z2V0TG9kT2Zmc2V0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzUmVuZGVyVGFyZ2V0KCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzTWFuYWdlZCgpIGNvbnN0OwotICAgIHZpcnR1YWwg
aW50IGxldmVsQ291bnQoKTsKLSAgICBVSU5UIGdldFN1YnJlc291cmNlSW5kZXgoaW50IGxldmVs
LCBpbnQgZmFjZVRhcmdldCk7Ci0KLSAgICBib29sIHVwZGF0ZVN1YnJlc291cmNlTGV2ZWwoSUQz
RDExVGV4dHVyZTJEICp0ZXh0dXJlLCB1bnNpZ25lZCBpbnQgc291cmNlU3VicmVzb3VyY2UsIGlu
dCBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZhY2VUYXJnZXQs
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0KTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBnZW5lcmF0ZU1pcG1hcExheWVyKFJlbmRl
clRhcmdldDExICpzb3VyY2UsIFJlbmRlclRhcmdldDExICpkZXN0KTsKLQotICAgIFJlbmRlcmVy
MTEgKm1SZW5kZXJlcjsKLSAgICBpbnQgbUxvZE9mZnNldDsKLSAgICB1bnNpZ25lZCBpbnQgbU1p
cExldmVsczsKLQotICAgIElEM0QxMVRleHR1cmUyRCAqbVRleHR1cmU7Ci0gICAgRFhHSV9GT1JN
QVQgbVRleHR1cmVGb3JtYXQ7Ci0gICAgRFhHSV9GT1JNQVQgbVNoYWRlclJlc291cmNlRm9ybWF0
OwotICAgIERYR0lfRk9STUFUIG1SZW5kZXJUYXJnZXRGb3JtYXQ7Ci0gICAgRFhHSV9GT1JNQVQg
bURlcHRoU3RlbmNpbEZvcm1hdDsKLSAgICB1bnNpZ25lZCBpbnQgbVRleHR1cmVXaWR0aDsKLSAg
ICB1bnNpZ25lZCBpbnQgbVRleHR1cmVIZWlnaHQ7Ci0KLSAgICBJRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKm1TUlY7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04o
VGV4dHVyZVN0b3JhZ2UxMSk7Ci0KLSAgICBjb25zdCBVSU5UIG1CaW5kRmxhZ3M7Ci19OwotCi1j
bGFzcyBUZXh0dXJlU3RvcmFnZTExXzJEIDogcHVibGljIFRleHR1cmVTdG9yYWdlMTEKLXsKLSAg
cHVibGljOgotICAgIFRleHR1cmVTdG9yYWdlMTFfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBTd2Fw
Q2hhaW4xMSAqc3dhcGNoYWluKTsKLSAgICBUZXh0dXJlU3RvcmFnZTExXzJEKFJlbmRlcmVyICpy
ZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2Us
IGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0g
ICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2UxMV8yRCgpOwotCi0gICAgc3RhdGljIFRleHR1cmVT
dG9yYWdlMTFfMkQgKm1ha2VUZXh0dXJlU3RvcmFnZTExXzJEKFRleHR1cmVTdG9yYWdlICpzdG9y
YWdlKTsKLQotICAgIHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpnZXRTUlYoKTsK
LSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KGludCBsZXZlbCk7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKTsKLQotICBwcml2YXRl
OgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZTExXzJEKTsKLQot
ICAgIFJlbmRlclRhcmdldDExICptUmVuZGVyVGFyZ2V0W2dsOjpJTVBMRU1FTlRBVElPTl9NQVhf
VEVYVFVSRV9MRVZFTFNdOwotfTsKLQotY2xhc3MgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlIDogcHVi
bGljIFRleHR1cmVTdG9yYWdlMTEKLXsKLSAgcHVibGljOgotICAgIFRleHR1cmVTdG9yYWdlMTFf
Q3ViZShSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpOwotICAgIHZp
cnR1YWwgflRleHR1cmVTdG9yYWdlMTFfQ3ViZSgpOwotCi0gICAgc3RhdGljIFRleHR1cmVTdG9y
YWdlMTFfQ3ViZSAqbWFrZVRleHR1cmVTdG9yYWdlMTFfQ3ViZShUZXh0dXJlU3RvcmFnZSAqc3Rv
cmFnZSk7Ci0KLSAgICB2aXJ0dWFsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0U1JWKCk7
Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVudW0gZmFjZVRh
cmdldCwgaW50IGxldmVsKTsKLQotICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQg
ZmFjZSwgaW50IGxldmVsKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihUZXh0dXJlU3RvcmFnZTExX0N1YmUpOwotCi0gICAgUmVuZGVyVGFyZ2V0MTEgKm1SZW5k
ZXJUYXJnZXRbNl1bZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107Ci19Owot
Ci19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfVEVYVFVSRVNUT1JBR0UxMV9IXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9UZXh0dXJlU3RvcmFnZTkuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZTkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA4YWE3NGE3Y2JhMWI0MzcwOGUzMGEzYWY5ZTc1YTcxMGI5Nzg2NGE2Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0b3JhZ2U5LmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDMyOCArMCwwIEBACi0jaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKLS8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0vLwotCi0vLyBUZXh0dXJlU3RvcmFnZTkuY3BwOiBJbXBsZW1lbnRzIHRoZSBhYnN0cmFj
dCByeDo6VGV4dHVyZVN0b3JhZ2U5IGNsYXNzIGFuZCBpdHMgY29uY3JldGUgZGVyaXZlZAotLy8g
Y2xhc3NlcyBUZXh0dXJlU3RvcmFnZTlfMkQgYW5kIFRleHR1cmVTdG9yYWdlOV9DdWJlLCB3aGlj
aCBhY3QgYXMgdGhlIGludGVyZmFjZSB0byB0aGUKLS8vIEQzRDkgdGV4dHVyZS4KLQotI2luY2x1
ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRl
cmVyOS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZTkuaCIK
LSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvU3dhcENoYWluOS5oIgotI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQ5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL3JlbmRlcmVyOV91dGlscy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgi
Ci0KLW5hbWVzcGFjZSByeAotewotVGV4dHVyZVN0b3JhZ2U5OjpUZXh0dXJlU3RvcmFnZTkoUmVu
ZGVyZXIgKnJlbmRlcmVyLCBEV09SRCB1c2FnZSkKLSAgICA6IG1Mb2RPZmZzZXQoMCksCi0gICAg
ICBtUmVuZGVyZXIoUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5KHJlbmRlcmVyKSksCi0gICAgICBt
RDNEVXNhZ2UodXNhZ2UpLAotICAgICAgbUQzRFBvb2wobVJlbmRlcmVyLT5nZXRUZXh0dXJlUG9v
bCh1c2FnZSkpCi17Ci19Ci0KLVRleHR1cmVTdG9yYWdlOTo6flRleHR1cmVTdG9yYWdlOSgpCi17
Ci19Ci0KLVRleHR1cmVTdG9yYWdlOSAqVGV4dHVyZVN0b3JhZ2U5OjptYWtlVGV4dHVyZVN0b3Jh
Z2U5KFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKQotewotICAgIEFTU0VSVChIQVNfRFlOQU1JQ19U
WVBFKFRleHR1cmVTdG9yYWdlOSosIHN0b3JhZ2UpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
VGV4dHVyZVN0b3JhZ2U5Kj4oc3RvcmFnZSk7Ci19Ci0KLURXT1JEIFRleHR1cmVTdG9yYWdlOTo6
R2V0VGV4dHVyZVVzYWdlKEQzREZPUk1BVCBkM2RmbXQsIEdMZW51bSBnbHVzYWdlLCBib29sIGZv
cmNlUmVuZGVyYWJsZSkKLXsKLSAgICBEV09SRCBkM2R1c2FnZSA9IDA7Ci0KLSAgICBpZiAoZDNk
Zm10ID09IEQzREZNVF9JTlRaKQotICAgIHsKLSAgICAgICAgZDNkdXNhZ2UgfD0gRDNEVVNBR0Vf
REVQVEhTVEVOQ0lMOwotICAgIH0KLSAgICBlbHNlIGlmKGZvcmNlUmVuZGVyYWJsZSB8fCAoVGV4
dHVyZVN0b3JhZ2U5OjpJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGQzZGZtdCkgJiYgKGdsdXNh
Z2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSkpKQotICAgIHsKLSAgICAgICAg
ZDNkdXNhZ2UgfD0gRDNEVVNBR0VfUkVOREVSVEFSR0VUOwotICAgIH0KLSAgICByZXR1cm4gZDNk
dXNhZ2U7Ci19Ci0KLWJvb2wgVGV4dHVyZVN0b3JhZ2U5OjpJc1RleHR1cmVGb3JtYXRSZW5kZXJh
YmxlKEQzREZPUk1BVCBmb3JtYXQpCi17Ci0gICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfSU5UWikK
LSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBzd2l0Y2goZm9ybWF0KQot
ICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0w4OgotICAgICAgY2FzZSBEM0RGTVRfQThMODoKLSAg
ICAgIGNhc2UgRDNERk1UX0RYVDE6Ci0gICAgICBjYXNlIEQzREZNVF9EWFQzOgotICAgICAgY2Fz
ZSBEM0RGTVRfRFhUNToKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgY2FzZSBEM0RGTVRf
QThSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAgICAgIGNhc2UgRDNERk1U
X0ExNkIxNkcxNlIxNkY6Ci0gICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFRleHR1cmVTdG9yYWdlOTo6aXNS
ZW5kZXJUYXJnZXQoKSBjb25zdAotewotICAgIHJldHVybiAobUQzRFVzYWdlICYgKEQzRFVTQUdF
X1JFTkRFUlRBUkdFVCB8IEQzRFVTQUdFX0RFUFRIU1RFTkNJTCkpICE9IDA7Ci19Ci0KLWJvb2wg
VGV4dHVyZVN0b3JhZ2U5Ojppc01hbmFnZWQoKSBjb25zdAotewotICAgIHJldHVybiAobUQzRFBv
b2wgPT0gRDNEUE9PTF9NQU5BR0VEKTsKLX0KLQotRDNEUE9PTCBUZXh0dXJlU3RvcmFnZTk6Omdl
dFBvb2woKSBjb25zdAotewotICAgIHJldHVybiBtRDNEUG9vbDsKLX0KLQotRFdPUkQgVGV4dHVy
ZVN0b3JhZ2U5OjpnZXRVc2FnZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EM0RVc2FnZTsKLX0K
LQotaW50IFRleHR1cmVTdG9yYWdlOTo6Z2V0TG9kT2Zmc2V0KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbUxvZE9mZnNldDsKLX0KLQotaW50IFRleHR1cmVTdG9yYWdlOTo6bGV2ZWxDb3VudCgpCi17
Ci0gICAgcmV0dXJuIGdldEJhc2VUZXh0dXJlKCkgPyBnZXRCYXNlVGV4dHVyZSgpLT5HZXRMZXZl
bENvdW50KCkgLSBnZXRMb2RPZmZzZXQoKSA6IDA7Ci19Ci0KLVRleHR1cmVTdG9yYWdlOV8yRDo6
VGV4dHVyZVN0b3JhZ2U5XzJEKFJlbmRlcmVyICpyZW5kZXJlciwgU3dhcENoYWluOSAqc3dhcGNo
YWluKSA6IFRleHR1cmVTdG9yYWdlOShyZW5kZXJlciwgRDNEVVNBR0VfUkVOREVSVEFSR0VUKQot
ewotICAgIElEaXJlY3QzRFRleHR1cmU5ICpzdXJmYWNlVGV4dHVyZSA9IHN3YXBjaGFpbi0+Z2V0
T2Zmc2NyZWVuVGV4dHVyZSgpOwotICAgIG1UZXh0dXJlID0gc3VyZmFjZVRleHR1cmU7Ci0gICAg
bVJlbmRlclRhcmdldCA9IE5VTEw7Ci0KLSAgICBpbml0aWFsaXplUmVuZGVyVGFyZ2V0KCk7Ci19
Ci0KLVRleHR1cmVTdG9yYWdlOV8yRDo6VGV4dHVyZVN0b3JhZ2U5XzJEKFJlbmRlcmVyICpyZW5k
ZXJlciwgaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJv
b2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLSAgICA6
IFRleHR1cmVTdG9yYWdlOShyZW5kZXJlciwgR2V0VGV4dHVyZVVzYWdlKFJlbmRlcmVyOTo6bWFr
ZVJlbmRlcmVyOShyZW5kZXJlciktPkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoaW50ZXJu
YWxmb3JtYXQpLCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlKSkKLXsKLSAgICBtVGV4dHVyZSA9IE5V
TEw7Ci0gICAgbVJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgLy8gaWYgdGhlIHdpZHRoIG9yIGhl
aWdodCBpcyBub3QgcG9zaXRpdmUgdGhpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBs
ZXRlIHRleHR1cmUKLSAgICAvLyB3ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBk
M2QgdGV4dHVyZSBjcmVhdGlvbgotICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkKLSAg
ICB7Ci0gICAgICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2
aWNlKCk7Ci0gICAgICAgIGdsOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBnbDo6SXNDb21wcmVzc2Vk
KGludGVybmFsZm9ybWF0KSwgJndpZHRoLCAmaGVpZ2h0LCAmbUxvZE9mZnNldCk7Ci0gICAgICAg
IEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKHdpZHRoLCBoZWlnaHQsIGxl
dmVscyA/IGxldmVscyArIG1Mb2RPZmZzZXQgOiAwLCBnZXRVc2FnZSgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUmVuZGVyZXItPkNvbnZlcnRUZXh0
dXJlSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQpLCBnZXRQb29sKCksICZtVGV4dHVyZSwg
TlVMTCk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGluaXRpYWxpemVSZW5kZXJUYXJnZXQoKTsKLX0K
LQotVGV4dHVyZVN0b3JhZ2U5XzJEOjp+VGV4dHVyZVN0b3JhZ2U5XzJEKCkKLXsKLSAgICBpZiAo
bVRleHR1cmUpCi0gICAgewotICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgIH0KLQot
ICAgIGRlbGV0ZSBtUmVuZGVyVGFyZ2V0OwotfQotCi1UZXh0dXJlU3RvcmFnZTlfMkQgKlRleHR1
cmVTdG9yYWdlOV8yRDo6bWFrZVRleHR1cmVTdG9yYWdlOV8yRChUZXh0dXJlU3RvcmFnZSAqc3Rv
cmFnZSkKLXsKLSAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShUZXh0dXJlU3RvcmFnZTlfMkQq
LCBzdG9yYWdlKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmVTdG9yYWdlOV8yRCo+
KHN0b3JhZ2UpOwotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCi0vLyBj
YWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKLUlEaXJlY3QzRFN1cmZh
Y2U5ICpUZXh0dXJlU3RvcmFnZTlfMkQ6OmdldFN1cmZhY2VMZXZlbChpbnQgbGV2ZWwsIGJvb2wg
ZGlydHkpCi17Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOwotCi0gICAg
aWYgKG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVGV4dHVyZS0+
R2V0U3VyZmFjZUxldmVsKGxldmVsICsgbUxvZE9mZnNldCwgJnN1cmZhY2UpOwotICAgICAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgIC8vIFdpdGggbWFuYWdlZCB0ZXh0
dXJlcyB0aGUgZHJpdmVyIG5lZWRzIHRvIGJlIGluZm9ybWVkIG9mIHVwZGF0ZXMgdG8gdGhlIGxv
d2VyIG1pcG1hcCBsZXZlbHMKLSAgICAgICAgaWYgKGxldmVsICsgbUxvZE9mZnNldCAhPSAwICYm
IGlzTWFuYWdlZCgpICYmIGRpcnR5KQotICAgICAgICB7Ci0gICAgICAgICAgICBtVGV4dHVyZS0+
QWRkRGlydHlSZWN0KE5VTEwpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHN1cmZh
Y2U7Ci19Ci0KLVJlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2U5XzJEOjpnZXRSZW5kZXJUYXJn
ZXQoKQotewotICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OwotfQotCi12b2lkIFRleHR1cmVTdG9y
YWdlOV8yRDo6Z2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKQotewotICAgIElEaXJlY3QzRFN1cmZh
Y2U5ICp1cHBlciA9IGdldFN1cmZhY2VMZXZlbChsZXZlbCAtIDEsIGZhbHNlKTsKLSAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqbG93ZXIgPSBnZXRTdXJmYWNlTGV2ZWwobGV2ZWwsIHRydWUpOwotCi0g
ICAgaWYgKHVwcGVyICE9IE5VTEwgJiYgbG93ZXIgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIG1S
ZW5kZXJlci0+Ym94RmlsdGVyKHVwcGVyLCBsb3dlcik7Ci0gICAgfQotCi0gICAgaWYgKHVwcGVy
ICE9IE5VTEwpIHVwcGVyLT5SZWxlYXNlKCk7Ci0gICAgaWYgKGxvd2VyICE9IE5VTEwpIGxvd2Vy
LT5SZWxlYXNlKCk7Ci19Ci0KLUlEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVyZVN0b3JhZ2U5
XzJEOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlOwotfQot
Ci12b2lkIFRleHR1cmVTdG9yYWdlOV8yRDo6aW5pdGlhbGl6ZVJlbmRlclRhcmdldCgpCi17Ci0g
ICAgQVNTRVJUKG1SZW5kZXJUYXJnZXQgPT0gTlVMTCk7Ci0KLSAgICBpZiAobVRleHR1cmUgIT0g
TlVMTCAmJiBpc1JlbmRlclRhcmdldCgpKQotICAgIHsKLSAgICAgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKnN1cmZhY2UgPSBnZXRTdXJmYWNlTGV2ZWwoMCwgZmFsc2UpOwotCi0gICAgICAgIG1SZW5k
ZXJUYXJnZXQgPSBuZXcgUmVuZGVyVGFyZ2V0OShtUmVuZGVyZXIsIHN1cmZhY2UpOwotICAgIH0K
LX0KLQotVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OlRleHR1cmVTdG9yYWdlOV9DdWJlKFJlbmRlcmVy
ICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNh
Z2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBpbnQgc2l6ZSkKLSAgICA6IFRleHR1cmVTdG9yYWdl
OShyZW5kZXJlciwgR2V0VGV4dHVyZVVzYWdlKFJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShyZW5k
ZXJlciktPkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQpLCB1c2Fn
ZSwgZm9yY2VSZW5kZXJhYmxlKSkKLXsKLSAgICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCA2OyArK2kpCi0gICAgewotICAgICAgICBtUmVuZGVyVGFyZ2V0W2ldID0g
TlVMTDsKLSAgICB9Ci0KLSAgICAvLyBpZiB0aGUgc2l6ZSBpcyBub3QgcG9zaXRpdmUgdGhpcyBz
aG91bGQgYmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBsZXRlIHRleHR1cmUKLSAgICAvLyB3ZSBoYW5k
bGUgdGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBkM2QgdGV4dHVyZSBjcmVhdGlvbgotICAgIGlm
IChzaXplID4gMCkKLSAgICB7Ci0gICAgICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1S
ZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0gICAgICAgIGludCBoZWlnaHQgPSBzaXplOwotICAgICAg
ICBnbDo6TWFrZVZhbGlkU2l6ZShmYWxzZSwgZ2w6OklzQ29tcHJlc3NlZChpbnRlcm5hbGZvcm1h
dCksICZzaXplLCAmaGVpZ2h0LCAmbUxvZE9mZnNldCk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVDdWJlVGV4dHVyZShzaXplLCBsZXZlbHMgPyBsZXZlbHMgKyBtTG9k
T2Zmc2V0IDogMCwgZ2V0VXNhZ2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1SZW5kZXJlci0+Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1h
dChpbnRlcm5hbGZvcm1hdCksIGdldFBvb2woKSwgJm1UZXh0dXJlLCBOVUxMKTsKLQotICAgICAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1
bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkp
OwotICAgICAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaW5pdGlhbGl6ZVJlbmRlclRhcmdldCgpOwotfQotCi1UZXh0dXJlU3RvcmFn
ZTlfQ3ViZTo6flRleHR1cmVTdG9yYWdlOV9DdWJlKCkKLXsKLSAgICBpZiAobVRleHR1cmUpCi0g
ICAgewotICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgIH0KLQotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgNjsgKytpKQotICAgIHsKLSAgICAgICAgZGVsZXRlIG1SZW5kZXJUYXJnZXRb
aV07Ci0gICAgfQotfQotCi1UZXh0dXJlU3RvcmFnZTlfQ3ViZSAqVGV4dHVyZVN0b3JhZ2U5X0N1
YmU6Om1ha2VUZXh0dXJlU3RvcmFnZTlfQ3ViZShUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSkKLXsK
LSAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShUZXh0dXJlU3RvcmFnZTlfQ3ViZSosIHN0b3Jh
Z2UpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZVN0b3JhZ2U5X0N1YmUqPihzdG9y
YWdlKTsKLX0KLQotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgotLy8gY2FsbGVy
IG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCi1JRGlyZWN0M0RTdXJmYWNlOSAq
VGV4dHVyZVN0b3JhZ2U5X0N1YmU6OmdldEN1YmVNYXBTdXJmYWNlKEdMZW51bSBmYWNlVGFyZ2V0
LCBpbnQgbGV2ZWwsIGJvb2wgZGlydHkpCi17Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZh
Y2UgPSBOVUxMOwotCi0gICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAgRDNEQ1VCRU1B
UF9GQUNFUyBmYWNlID0gZ2xfZDNkOTo6Q29udmVydEN1YmVGYWNlKGZhY2VUYXJnZXQpOwotICAg
ICAgICBIUkVTVUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRDdWJlTWFwU3VyZmFjZShmYWNlLCBs
ZXZlbCArIG1Mb2RPZmZzZXQsICZzdXJmYWNlKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKLQotICAgICAgICAvLyBXaXRoIG1hbmFnZWQgdGV4dHVyZXMgdGhlIGRyaXZlciBu
ZWVkcyB0byBiZSBpbmZvcm1lZCBvZiB1cGRhdGVzIHRvIHRoZSBsb3dlciBtaXBtYXAgbGV2ZWxz
Ci0gICAgICAgIGlmIChsZXZlbCAhPSAwICYmIGlzTWFuYWdlZCgpICYmIGRpcnR5KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBtVGV4dHVyZS0+QWRkRGlydHlSZWN0KGZhY2UsIE5VTEwpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHN1cmZhY2U7Ci19Ci0KLVJlbmRlclRhcmdldCAq
VGV4dHVyZVN0b3JhZ2U5X0N1YmU6OmdldFJlbmRlclRhcmdldChHTGVudW0gZmFjZVRhcmdldCkK
LXsKLSAgICByZXR1cm4gbVJlbmRlclRhcmdldFtnbDo6VGV4dHVyZUN1YmVNYXA6OmZhY2VJbmRl
eChmYWNlVGFyZ2V0KV07Ci19Ci0KLXZvaWQgVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OmdlbmVyYXRl
TWlwbWFwKGludCBmYWNlLCBpbnQgbGV2ZWwpCi17Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnVw
cGVyID0gZ2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsg
ZmFjZSwgbGV2ZWwgLSAxLCBmYWxzZSk7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmxvd2VyID0g
Z2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZSwg
bGV2ZWwsIHRydWUpOwotCi0gICAgaWYgKHVwcGVyICE9IE5VTEwgJiYgbG93ZXIgIT0gTlVMTCkK
LSAgICB7Ci0gICAgICAgIG1SZW5kZXJlci0+Ym94RmlsdGVyKHVwcGVyLCBsb3dlcik7Ci0gICAg
fQotCi0gICAgaWYgKHVwcGVyICE9IE5VTEwpIHVwcGVyLT5SZWxlYXNlKCk7Ci0gICAgaWYgKGxv
d2VyICE9IE5VTEwpIGxvd2VyLT5SZWxlYXNlKCk7Ci19Ci0KLUlEaXJlY3QzREJhc2VUZXh0dXJl
OSAqVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbVRleHR1cmU7Ci19Ci0KLXZvaWQgVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OmluaXRpYWxp
emVSZW5kZXJUYXJnZXQoKQotewotICAgIGlmIChtVGV4dHVyZSAhPSBOVUxMICYmIGlzUmVuZGVy
VGFyZ2V0KCkpCi0gICAgewotICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IE5V
TEw7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyArK2kpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVChtUmVuZGVyVGFyZ2V0W2ldID09IE5VTEwpOwotCi0gICAgICAgICAg
ICBzdXJmYWNlID0gZ2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9YICsgaSwgMCwgZmFsc2UpOwotCi0gICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2ldID0gbmV3
IFJlbmRlclRhcmdldDkobVJlbmRlcmVyLCBzdXJmYWNlKTsKLSAgICAgICAgfQotICAgIH0KLX0K
LQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0b3JhZ2U5LmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9y
YWdlOS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmY1NTFhMTMxNWRhNDUzNzEz
ZmExOTZkNzcyOGY3MjU3ZTJiZDg2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvVGV4dHVyZVN0b3JhZ2U5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLS8vIFRleHR1cmVTdG9yYWdlOS5oOiBEZWZpbmVzIHRoZSBhYnN0cmFjdCBy
eDo6VGV4dHVyZVN0b3JhZ2U5IGNsYXNzIGFuZCBpdHMgY29uY3JldGUgZGVyaXZlZAotLy8gY2xh
c3NlcyBUZXh0dXJlU3RvcmFnZTlfMkQgYW5kIFRleHR1cmVTdG9yYWdlOV9DdWJlLCB3aGljaCBh
Y3QgYXMgdGhlIGludGVyZmFjZSB0byB0aGUKLS8vIEQzRDkgdGV4dHVyZS4KLQotI2lmbmRlZiBM
SUJHTEVTVjJfUkVOREVSRVJfVEVYVFVSRVNUT1JBR0U5X0hfCi0jZGVmaW5lIExJQkdMRVNWMl9S
RU5ERVJFUl9URVhUVVJFU1RPUkFHRTlfSF8KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9UZXh0dXJlU3RvcmFnZS5oIgotI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgotCi1uYW1lc3Bh
Y2UgcngKLXsKLWNsYXNzIFJlbmRlcmVyOTsKLWNsYXNzIFN3YXBDaGFpbjk7Ci1jbGFzcyBSZW5k
ZXJUYXJnZXQ7Ci1jbGFzcyBSZW5kZXJUYXJnZXQ5OwotY2xhc3MgQmxpdDsKLQotY2xhc3MgVGV4
dHVyZVN0b3JhZ2U5IDogcHVibGljIFRleHR1cmVTdG9yYWdlCi17Ci0gIHB1YmxpYzoKLSAgICBU
ZXh0dXJlU3RvcmFnZTkoUmVuZGVyZXIgKnJlbmRlcmVyLCBEV09SRCB1c2FnZSk7Ci0gICAgdmly
dHVhbCB+VGV4dHVyZVN0b3JhZ2U5KCk7Ci0KLSAgICBzdGF0aWMgVGV4dHVyZVN0b3JhZ2U5ICpt
YWtlVGV4dHVyZVN0b3JhZ2U5KFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKTsKLQotICAgIHN0YXRp
YyBEV09SRCBHZXRUZXh0dXJlVXNhZ2UoRDNERk9STUFUIGQzZGZtdCwgR0xlbnVtIGdsdXNhZ2Us
IGJvb2wgZm9yY2VSZW5kZXJhYmxlKTsKLSAgICBzdGF0aWMgYm9vbCBJc1RleHR1cmVGb3JtYXRS
ZW5kZXJhYmxlKEQzREZPUk1BVCBmb3JtYXQpOwotCi0gICAgRDNEUE9PTCBnZXRQb29sKCkgY29u
c3Q7Ci0gICAgRFdPUkQgZ2V0VXNhZ2UoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgSURpcmVjdDNE
QmFzZVRleHR1cmU5ICpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFJl
bmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KCkgeyByZXR1cm4gTlVMTDsgfQotICAgIHZpcnR1
YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQpIHsgcmV0
dXJuIE5VTEw7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKSB7
fTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCkg
e307Ci0KLSAgICB2aXJ0dWFsIGludCBnZXRMb2RPZmZzZXQoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgaXNSZW5kZXJUYXJnZXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNNYW5hZ2Vk
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgbGV2ZWxDb3VudCgpOwotCi0gIHByb3RlY3RlZDoK
LSAgICBpbnQgbUxvZE9mZnNldDsKLSAgICBSZW5kZXJlcjkgKm1SZW5kZXJlcjsKLQotICBwcml2
YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZTkpOwotCi0g
ICAgY29uc3QgRFdPUkQgbUQzRFVzYWdlOwotICAgIGNvbnN0IEQzRFBPT0wgbUQzRFBvb2w7Ci19
OwotCi1jbGFzcyBUZXh0dXJlU3RvcmFnZTlfMkQgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2U5Ci17
Ci0gIHB1YmxpYzoKLSAgICBUZXh0dXJlU3RvcmFnZTlfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBT
d2FwQ2hhaW45ICpzd2FwY2hhaW4pOwotICAgIFRleHR1cmVTdG9yYWdlOV8yRChSZW5kZXJlciAq
cmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdl
LCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwot
ICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlOV8yRCgpOwotCi0gICAgc3RhdGljIFRleHR1cmVT
dG9yYWdlOV8yRCAqbWFrZVRleHR1cmVTdG9yYWdlOV8yRChUZXh0dXJlU3RvcmFnZSAqc3RvcmFn
ZSk7Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0U3VyZmFjZUxldmVsKGludCBsZXZlbCwg
Ym9vbCBkaXJ0eSk7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgp
OwotICAgIHZpcnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRCYXNlVGV4dHVyZSgpIGNv
bnN0OwotICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpOwotCi0gIHBy
aXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlOV8yRCk7
Ci0KLSAgICB2b2lkIGluaXRpYWxpemVSZW5kZXJUYXJnZXQoKTsKLQotICAgIElEaXJlY3QzRFRl
eHR1cmU5ICptVGV4dHVyZTsKLSAgICBSZW5kZXJUYXJnZXQ5ICptUmVuZGVyVGFyZ2V0OwotfTsK
LQotY2xhc3MgVGV4dHVyZVN0b3JhZ2U5X0N1YmUgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2U5Ci17
Ci0gIHB1YmxpYzoKLSAgICBUZXh0dXJlU3RvcmFnZTlfQ3ViZShSZW5kZXJlciAqcmVuZGVyZXIs
IGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZv
cmNlUmVuZGVyYWJsZSwgaW50IHNpemUpOwotICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlOV9D
dWJlKCk7Ci0KLSAgICBzdGF0aWMgVGV4dHVyZVN0b3JhZ2U5X0N1YmUgKm1ha2VUZXh0dXJlU3Rv
cmFnZTlfQ3ViZShUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSk7Ci0KLSAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqZ2V0Q3ViZU1hcFN1cmZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCwgYm9v
bCBkaXJ0eSk7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVu
dW0gZmFjZVRhcmdldCk7Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJh
c2VUZXh0dXJlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBm
YWNlLCBpbnQgbGV2ZWwpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKFRleHR1cmVTdG9yYWdlOV9DdWJlKTsKLQotICAgIHZvaWQgaW5pdGlhbGl6ZVJlbmRlclRh
cmdldCgpOwotCi0gICAgSURpcmVjdDNEQ3ViZVRleHR1cmU5ICptVGV4dHVyZTsKLSAgICBSZW5k
ZXJUYXJnZXQ5ICptUmVuZGVyVGFyZ2V0WzZdOwotfTsKLQotfQotCi0jZW5kaWYgLy8gTElCR0xF
U1YyX1JFTkRFUkVSX1RFWFRVUkVTVE9SQUdFOV9IXwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlcjExLmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4QnVm
ZmVyMTEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjFkYTgwYzNkN2U5Zjc3
YmYyNmIxMzE1NDg5Zjg5YjI2YWNiMmQ0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvVmVydGV4QnVmZmVyMTEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDQwICswLDAgQEAK
LSNpbmNsdWRlICJwcmVjb21waWxlZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFZlcnRleEJ1ZmZl
cjExLmNwcDogRGVmaW5lcyB0aGUgRDNEMTEgVmVydGV4QnVmZmVyIGltcGxlbWVudGF0aW9uLgot
Ci0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlcjExLmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaCIKLQotI2luY2x1ZGUgImxpYkdM
RVN2Mi9CdWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIxMS5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCi0KLW5hbWVzcGFjZSByeAotewotCi1W
ZXJ0ZXhCdWZmZXIxMTo6VmVydGV4QnVmZmVyMTEocng6OlJlbmRlcmVyMTEgKmNvbnN0IHJlbmRl
cmVyKSA6IG1SZW5kZXJlcihyZW5kZXJlcikKLXsKLSAgICBtQnVmZmVyID0gTlVMTDsKLSAgICBt
QnVmZmVyU2l6ZSA9IDA7Ci0gICAgbUR5bmFtaWNVc2FnZSA9IGZhbHNlOwotfQotCi1WZXJ0ZXhC
dWZmZXIxMTo6flZlcnRleEJ1ZmZlcjExKCkKLXsKLSAgICBpZiAobUJ1ZmZlcikKLSAgICB7Ci0g
ICAgICAgIG1CdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJ1ZmZlciA9IE5VTEw7Ci0gICAg
fQotfQotCi1ib29sIFZlcnRleEJ1ZmZlcjExOjppbml0aWFsaXplKHVuc2lnbmVkIGludCBzaXpl
LCBib29sIGR5bmFtaWNVc2FnZSkKLXsKLSAgICBpZiAobUJ1ZmZlcikKLSAgICB7Ci0gICAgICAg
IG1CdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJ1ZmZlciA9IE5VTEw7Ci0gICAgfQotCi0g
ICAgdXBkYXRlU2VyaWFsKCk7Ci0KLSAgICBpZiAoc2l6ZSA+IDApCi0gICAgewotICAgICAgICBJ
RDNEMTFEZXZpY2UqIGR4RGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLQotICAgICAg
ICBEM0QxMV9CVUZGRVJfREVTQyBidWZmZXJEZXNjOwotICAgICAgICBidWZmZXJEZXNjLkJ5dGVX
aWR0aCA9IHNpemU7Ci0gICAgICAgIGJ1ZmZlckRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9EWU5B
TUlDOwotICAgICAgICBidWZmZXJEZXNjLkJpbmRGbGFncyA9IEQzRDExX0JJTkRfVkVSVEVYX0JV
RkZFUjsKLSAgICAgICAgYnVmZmVyRGVzYy5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NF
U1NfV1JJVEU7Ci0gICAgICAgIGJ1ZmZlckRlc2MuTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgYnVm
ZmVyRGVzYy5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKLQotICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IGR4RGV2aWNlLT5DcmVhdGVCdWZmZXIoJmJ1ZmZlckRlc2MsIE5VTEwsICZtQnVmZmVyKTsK
LSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtQnVmZmVyU2l6ZSA9IHNpemU7Ci0g
ICAgbUR5bmFtaWNVc2FnZSA9IGR5bmFtaWNVc2FnZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
VmVydGV4QnVmZmVyMTEgKlZlcnRleEJ1ZmZlcjExOjptYWtlVmVydGV4QnVmZmVyMTEoVmVydGV4
QnVmZmVyICp2ZXRleEJ1ZmZlcikKLXsKLSAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShWZXJ0
ZXhCdWZmZXIxMSosIHZldGV4QnVmZmVyKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFZlcnRl
eEJ1ZmZlcjExKj4odmV0ZXhCdWZmZXIpOwotfQotCi1ib29sIFZlcnRleEJ1ZmZlcjExOjpzdG9y
ZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTGlu
dCBzdGFydCwgR0xzaXplaSBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlcywgdW5zaWduZWQgaW50IG9mZnNldCkKLXsKLSAg
ICBpZiAobUJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlciA9IGF0dHJp
Yi5tQm91bmRCdWZmZXIuZ2V0KCk7Ci0KLSAgICAgICAgaW50IGlucHV0U3RyaWRlID0gYXR0cmli
LnN0cmlkZSgpOwotICAgICAgICBjb25zdCBWZXJ0ZXhDb252ZXJ0ZXIgJmNvbnZlcnRlciA9IGdl
dFZlcnRleENvbnZlcnNpb24oYXR0cmliKTsKLQotICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0
ICpkeENvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKLQotICAgICAgICBE
M0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7Ci0gICAgICAgIEhSRVNVTFQg
cmVzdWx0ID0gZHhDb250ZXh0LT5NYXAobUJ1ZmZlciwgMCwgRDNEMTFfTUFQX1dSSVRFX05PX09W
RVJXUklURSwgMCwgJm1hcHBlZFJlc291cmNlKTsKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQp
KQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIlZlcnRleCBidWZmZXIgbWFwIGZhaWxlZCB3
aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLQotICAgICAgICBjaGFyKiBvdXRwdXQgPSByZWludGVycHJldF9jYXN0PGNoYXIq
PihtYXBwZWRSZXNvdXJjZS5wRGF0YSkgKyBvZmZzZXQ7Ci0KLSAgICAgICAgY29uc3QgY2hhciAq
aW5wdXQgPSBOVUxMOwotICAgICAgICBpZiAoYnVmZmVyKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBCdWZmZXJTdG9yYWdlICpzdG9yYWdlID0gYnVmZmVyLT5nZXRTdG9yYWdlKCk7Ci0gICAgICAg
ICAgICBpbnB1dCA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihzdG9yYWdlLT5nZXREYXRhKCkp
ICsgc3RhdGljX2Nhc3Q8aW50PihhdHRyaWIubU9mZnNldCk7Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dCA9IHN0YXRpY19jYXN0PGNvbnN0IGNo
YXIqPihhdHRyaWIubVBvaW50ZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGluc3RhbmNl
cyA9PSAwIHx8IGF0dHJpYi5tRGl2aXNvciA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
bnB1dCArPSBpbnB1dFN0cmlkZSAqIHN0YXJ0OwotICAgICAgICB9Ci0KLSAgICAgICAgY29udmVy
dGVyLmNvbnZlcnNpb25GdW5jKGlucHV0LCBpbnB1dFN0cmlkZSwgY291bnQsIG91dHB1dCk7Ci0K
LSAgICAgICAgZHhDb250ZXh0LT5Vbm1hcChtQnVmZmVyLCAwKTsKLQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgRVJSKCJWZXJ0ZXggYnVmZmVy
IG5vdCBpbml0aWFsaXplZC4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQot
Ym9vbCBWZXJ0ZXhCdWZmZXIxMTo6c3RvcmVSYXdEYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2ln
bmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQotewotICAgIGlmIChtQnVmZmVyKQot
ICAgIHsKLSAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqZHhDb250ZXh0ID0gbVJlbmRlcmVy
LT5nZXREZXZpY2VDb250ZXh0KCk7Ci0KLSAgICAgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNF
IG1hcHBlZFJlc291cmNlOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGR4Q29udGV4dC0+TWFw
KG1CdWZmZXIsIDAsIEQzRDExX01BUF9XUklURV9OT19PVkVSV1JJVEUsIDAsICZtYXBwZWRSZXNv
dXJjZSk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAg
ICAgRVJSKCJWZXJ0ZXggYnVmZmVyIG1hcCBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgiLCByZXN1
bHQpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgY2hh
ciogYnVmZmVyRGF0YSA9IHN0YXRpY19jYXN0PGNoYXIqPihtYXBwZWRSZXNvdXJjZS5wRGF0YSk7
Ci0gICAgICAgIG1lbWNweShidWZmZXJEYXRhICsgb2Zmc2V0LCBkYXRhLCBzaXplKTsKLQotICAg
ICAgICBkeENvbnRleHQtPlVubWFwKG1CdWZmZXIsIDApOwotCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBFUlIoIlZlcnRleCBidWZmZXIgbm90
IGluaXRpYWxpemVkLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29s
IFZlcnRleEJ1ZmZlcjExOjpnZXRTcGFjZVJlcXVpcmVkKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1
dGUgJmF0dHJpYiwgR0xzaXplaSBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCAqb3V0U3BhY2VSZXF1aXJl
ZCkgY29uc3QKLXsKLSAgICB1bnNpZ25lZCBpbnQgZWxlbWVudFNpemUgPSBnZXRWZXJ0ZXhDb252
ZXJzaW9uKGF0dHJpYikub3V0cHV0RWxlbWVudFNpemU7Ci0KLSAgICB1bnNpZ25lZCBpbnQgZWxl
bWVudENvdW50ID0gMDsKLSAgICBpZiAoaW5zdGFuY2VzID09IDAgfHwgYXR0cmliLm1EaXZpc29y
ID09IDApCi0gICAgewotICAgICAgICBlbGVtZW50Q291bnQgPSBjb3VudDsKLSAgICB9Ci0gICAg
ZWxzZQotICAgIHsKLSAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oaW5zdGFu
Y2VzKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLSAoYXR0cmli
Lm1EaXZpc29yIC0gMSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFJvdW5kIHVwCi0gICAg
ICAgICAgICBlbGVtZW50Q291bnQgPSAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihpbnN0YW5j
ZXMpICsgKGF0dHJpYi5tRGl2aXNvciAtIDEpKSAvIGF0dHJpYi5tRGl2aXNvcjsKLSAgICAgICAg
fQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVsZW1lbnRDb3VudCA9IGlu
c3RhbmNlcyAvIGF0dHJpYi5tRGl2aXNvcjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChl
bGVtZW50U2l6ZSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpIC8g
ZWxlbWVudENvdW50KQotICAgIHsKLSAgICAgICAgaWYgKG91dFNwYWNlUmVxdWlyZWQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgICpvdXRTcGFjZVJlcXVpcmVkID0gZWxlbWVudFNpemUgKiBlbGVt
ZW50Q291bnQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVs
c2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgVmVydGV4
QnVmZmVyMTE6OnJlcXVpcmVzQ29udmVyc2lvbihjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZh
dHRyaWIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFnZXRWZXJ0ZXhDb252ZXJzaW9uKGF0dHJpYiku
aWRlbnRpdHk7Ci19Ci0KLXVuc2lnbmVkIGludCBWZXJ0ZXhCdWZmZXIxMTo6Z2V0QnVmZmVyU2l6
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1CdWZmZXJTaXplOwotfQotCi1ib29sIFZlcnRleEJ1
ZmZlcjExOjpzZXRCdWZmZXJTaXplKHVuc2lnbmVkIGludCBzaXplKQotewotICAgIGlmIChzaXpl
ID4gbUJ1ZmZlclNpemUpCi0gICAgewotICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZShzaXplLCBt
RHluYW1pY1VzYWdlKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotfQotCi1ib29sIFZlcnRleEJ1ZmZlcjExOjpkaXNjYXJkKCkKLXsKLSAgICBp
ZiAobUJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmR4Q29udGV4
dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotCi0gICAgICAgIEQzRDExX01BUFBF
RF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJjZTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBk
eENvbnRleHQtPk1hcChtQnVmZmVyLCAwLCBEM0QxMV9NQVBfV1JJVEVfRElTQ0FSRCwgMCwgJm1h
cHBlZFJlc291cmNlKTsKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBFUlIoIlZlcnRleCBidWZmZXIgbWFwIGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4
eCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAg
ICAgICBkeENvbnRleHQtPlVubWFwKG1CdWZmZXIsIDApOwotCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBFUlIoIlZlcnRleCBidWZmZXIgbm90
IGluaXRpYWxpemVkLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi11bnNp
Z25lZCBpbnQgVmVydGV4QnVmZmVyMTE6OmdldFZlcnRleFNpemUoY29uc3QgZ2w6OlZlcnRleEF0
dHJpYnV0ZSAmYXR0cmliKSBjb25zdAotewotICAgIHJldHVybiBnZXRWZXJ0ZXhDb252ZXJzaW9u
KGF0dHJpYikub3V0cHV0RWxlbWVudFNpemU7Ci19Ci0KLURYR0lfRk9STUFUIFZlcnRleEJ1ZmZl
cjExOjpnZXREWEdJRm9ybWF0KGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29u
c3QKLXsKLSAgICByZXR1cm4gZ2V0VmVydGV4Q29udmVyc2lvbihhdHRyaWIpLmR4Z2lGb3JtYXQ7
Ci19Ci0KLUlEM0QxMUJ1ZmZlciAqVmVydGV4QnVmZmVyMTE6OmdldEJ1ZmZlcigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1CdWZmZXI7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB1bnNpZ25l
ZCBpbnQgY29tcG9uZW50Q291bnQsIGJvb2wgd2lkZW4sIGJvb2wgbm9ybWFsaXplZD4KLXN0YXRp
YyB2b2lkIGNvcHlWZXJ0ZXhEYXRhKGNvbnN0IHZvaWQgKmlucHV0LCB1bnNpZ25lZCBpbnQgc3Ry
aWRlLCB1bnNpZ25lZCBpbnQgY291bnQsIHZvaWQgKm91dHB1dCkKLXsKLSAgICB1bnNpZ25lZCBp
bnQgYXR0cmliU2l6ZSA9IHNpemVvZihUKSAqIGNvbXBvbmVudENvdW50OwotCi0gICAgaWYgKGF0
dHJpYlNpemUgPT0gc3RyaWRlICYmICF3aWRlbikKLSAgICB7Ci0gICAgICAgIG1lbWNweShvdXRw
dXQsIGlucHV0LCBjb3VudCAqIGF0dHJpYlNpemUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewot
ICAgICAgICB1bnNpZ25lZCBpbnQgb3V0cHV0U3RyaWRlID0gd2lkZW4gPyA0IDogY29tcG9uZW50
Q291bnQ7Ci0gICAgICAgIFQgZGVmYXVsdFZhbCA9IG5vcm1hbGl6ZWQgPyBzdGQ6Om51bWVyaWNf
bGltaXRzPFQ+OjptYXgoKSA6IFQoMSk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBUICpvZmZz
ZXRJbnB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgY2hhcio+KGlucHV0KSArIGkgKiBzdHJpZGUpOwotICAgICAgICAgICAgVCAqb2Zmc2V0T3V0
cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxUKj4ob3V0cHV0KSArIGkgKiBvdXRwdXRTdHJpZGU7Ci0K
LSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgY29tcG9uZW50Q291bnQ7
IGorKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSBv
ZmZzZXRJbnB1dFtqXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHdpZGVuKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG9mZnNldE91dHB1dFszXSA9IGRlZmF1bHRW
YWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXRlbXBsYXRlIDx1bnNp
Z25lZCBpbnQgY29tcG9uZW50Q291bnQ+Ci1zdGF0aWMgdm9pZCBjb3B5Rml4ZWRWZXJ0ZXhEYXRh
KGNvbnN0IHZvaWQqIGlucHV0LCB1bnNpZ25lZCBpbnQgc3RyaWRlLCB1bnNpZ25lZCBpbnQgY291
bnQsIHZvaWQqIG91dHB1dCkKLXsKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgZGl2aXNvciA9IDEu
MGYgLyAoMSA8PCAxNik7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50
OyBpKyspCi0gICAgewotICAgICAgICBjb25zdCBHTGZpeGVkKiBvZmZzZXRJbnB1dCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgR0xmaXhlZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+
KGlucHV0KSArIHN0cmlkZSAqIGkpOwotICAgICAgICBmbG9hdCogb2Zmc2V0T3V0cHV0ID0gcmVp
bnRlcnByZXRfY2FzdDxmbG9hdCo+KG91dHB1dCkgKyBpICogY29tcG9uZW50Q291bnQ7Ci0KLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBjb21wb25lbnRDb3VudDsgaisrKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSBzdGF0aWNfY2FzdDxmbG9h
dD4ob2Zmc2V0SW5wdXRbal0pICogZGl2aXNvcjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdGVt
cGxhdGUgPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGludCBjb21wb25lbnRDb3VudCwgYm9vbCBub3Jt
YWxpemVkPgotc3RhdGljIHZvaWQgY29weVRvRmxvYXRWZXJ0ZXhEYXRhKGNvbnN0IHZvaWQqIGlu
cHV0LCB1bnNpZ25lZCBpbnQgc3RyaWRlLCB1bnNpZ25lZCBpbnQgY291bnQsIHZvaWQqIG91dHB1
dCkKLXsKLSAgICB0eXBlZGVmIHN0ZDo6bnVtZXJpY19saW1pdHM8VD4gTkw7Ci0KLSAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICBjb25z
dCBUICpvZmZzZXRJbnB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgY2hhcio+KGlucHV0KSArIHN0cmlkZSAqIGkpOwotICAgICAgICBmbG9hdCAq
b2Zmc2V0T3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KG91dHB1dCkgKyBpICogY29t
cG9uZW50Q291bnQ7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBjb21w
b25lbnRDb3VudDsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobm9ybWFsaXplZCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoTkw6OmlzX3NpZ25lZCkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGRpdmlzb3IgPSAx
LjBmIC8gKDIgKiBzdGF0aWNfY2FzdDxmbG9hdD4oTkw6Om1heCgpKSArIDEpOwotICAgICAgICAg
ICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSAoMiAqIHN0YXRpY19jYXN0PGZsb2F0PihvZmZz
ZXRJbnB1dFtqXSkgKyAxKSAqIGRpdmlzb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG9mZnNl
dE91dHB1dFtqXSA9ICBzdGF0aWNfY2FzdDxmbG9hdD4ob2Zmc2V0SW5wdXRbal0pIC8gTkw6Om1h
eCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSAgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG9mZnNldElucHV0W2pdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLX0KLQotY29uc3QgVmVydGV4QnVmZmVyMTE6OlZlcnRleENvbnZlcnRlciBWZXJ0ZXhC
dWZmZXIxMTo6bVBvc3NpYmxlVHJhbnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVT
XVsyXVs0XSA9Ci17Ci0gICAgeyAvLyBHTF9CWVRFCi0gICAgICAgIHsgLy8gdW5ub3JtYWxpemVk
Ci0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xieXRlLCAxLCBmYWxzZT4s
IGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNvcHlU
b0Zsb2F0VmVydGV4RGF0YTxHTGJ5dGUsIDIsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1Iz
MkczMl9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdM
Ynl0ZSwgMywgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAxMiB9
LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMYnl0ZSwgNCwgZmFsc2U+
LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAgICAgICB9
LAotICAgICAgICB7IC8vIG5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRh
PEdMYnl0ZSwgMSwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SOF9TTk9STSwgMSB9
LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xieXRlLCAyLCBmYWxzZSwgdHJ1ZT4s
IHRydWUsIERYR0lfRk9STUFUX1I4RzhfU05PUk0sIDIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlW
ZXJ0ZXhEYXRhPEdMYnl0ZSwgMywgdHJ1ZSwgdHJ1ZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SOEc4
QjhBOF9TTk9STSwgNCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xieXRlLCA0
LCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1I4RzhCOEE4X1NOT1JNLCA0IH0sCi0g
ICAgICAgIH0sCi0gICAgfSwKLSAgICB7IC8vIEdMX1VOU0lHTkVEX0JZVEUKLSAgICAgICAgeyAv
LyB1bm5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVi
eXRlLCAxLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAg
ICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVieXRlLCAyLCBmYWxzZT4sIGZhbHNl
LCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zs
b2F0VmVydGV4RGF0YTxHTHVieXRlLCAzLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJH
MzJCMzJfRkxPQVQsIDEyIH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8
R0x1Ynl0ZSwgNCwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FU
LCAxNiB9LAotICAgICAgICB9LAotICAgICAgICB7IC8vIG5vcm1hbGl6ZWQKLSAgICAgICAgICAg
IHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDEsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9G
T1JNQVRfUjhfVU5PUk0sIDEgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdWJ5
dGUsIDIsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjhHOF9VTk9STSwgMiB9LAot
ICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1Ynl0ZSwgMywgdHJ1ZSwgdHJ1ZT4sIGZh
bHNlLCBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSwgNCB9LAotICAgICAgICAgICAgeyAmY29w
eVZlcnRleERhdGE8R0x1Ynl0ZSwgNCwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9S
OEc4QjhBOF9VTk9STSwgNCB9LAotICAgICAgICB9LAotICAgIH0sCi0gICAgeyAvLyBHTF9TSE9S
VAotICAgICAgICB7IC8vIHVubm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRW
ZXJ0ZXhEYXRhPEdMc2hvcnQsIDEsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMl9GTE9B
VCwgNCB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMc2hvcnQsIDIs
IGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAotICAgICAgICAg
ICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMc2hvcnQsIDMsIGZhbHNlPiwgZmFsc2UsIERY
R0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zs
b2F0VmVydGV4RGF0YTxHTHNob3J0LCA0LCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJH
MzJCMzJBMzJfRkxPQVQsIDE2IH0sCi0gICAgICAgIH0sCi0gICAgICAgIHsgLy8gbm9ybWFsaXpl
ZAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xzaG9ydCwgMSwgZmFsc2UsIHRydWU+
LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMTZfU05PUk0sIDIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlW
ZXJ0ZXhEYXRhPEdMc2hvcnQsIDIsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjE2
RzE2X1NOT1JNLCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHNob3J0LCAz
LCB0cnVlLCB0cnVlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9TTk9STSwgOCB9
LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xzaG9ydCwgNCwgZmFsc2UsIHRydWU+
LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfU05PUk0sIDggfSwKLSAgICAgICAgfSwK
LSAgICB9LAotICAgIHsgLy8gR0xfVU5TSUdORURfU0hPUlQKLSAgICAgICAgeyAvLyB1bm5vcm1h
bGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVzaG9ydCwgMSwg
ZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyX0ZMT0FULCA0IH0sCi0gICAgICAgICAgICB7
ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0x1c2hvcnQsIDIsIGZhbHNlPiwgZmFsc2UsIERYR0lf
Rk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0
ZXhEYXRhPEdMdXNob3J0LCAzLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJf
RkxPQVQsIDEyIH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0x1c2hv
cnQsIDQsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCwgMTYg
fSwKLSAgICAgICAgfSwKLSAgICAgICAgeyAvLyBub3JtYWxpemVkCi0gICAgICAgICAgICB7ICZj
b3B5VmVydGV4RGF0YTxHTHVzaG9ydCwgMSwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1B
VF9SMTZfVU5PUk0sIDIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdXNob3J0
LCAyLCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1IxNkcxNl9VTk9STSwgNCB9LAot
ICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1c2hvcnQsIDMsIHRydWUsIHRydWU+LCBm
YWxzZSwgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1VOT1JNLCA4IH0sCi0gICAgICAgICAgICB7
ICZjb3B5VmVydGV4RGF0YTxHTHVzaG9ydCwgNCwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZP
Uk1BVF9SMTZHMTZCMTZBMTZfVU5PUk0sIDggfSwKLSAgICAgICAgfSwKLSAgICB9LAotICAgIHsg
Ly8gR0xfRklYRUQKLSAgICAgICAgeyAvLyB1bm5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNv
cHlGaXhlZFZlcnRleERhdGE8MT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwK
LSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8Mj4sIGZhbHNlLCBEWEdJX0ZPUk1B
VF9SMzJHMzJfRkxPQVQsIDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8
Mz4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0sCi0gICAgICAgICAg
ICB7ICZjb3B5Rml4ZWRWZXJ0ZXhEYXRhPDQ+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMy
QTMyX0ZMT0FULCAxNiB9LAotICAgICAgICB9LAotICAgICAgICB7IC8vIG5vcm1hbGl6ZWQKLSAg
ICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8MT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9S
MzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8Mj4sIGZh
bHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlG
aXhlZFZlcnRleERhdGE8Mz4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEy
IH0sCi0gICAgICAgICAgICB7ICZjb3B5Rml4ZWRWZXJ0ZXhEYXRhPDQ+LCBmYWxzZSwgRFhHSV9G
T1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAgICAgICB9LAotICAgIH0sCi0gICAg
eyAvLyBHTF9GTE9BVAotICAgICAgICB7IC8vIHVubm9ybWFsaXplZAotICAgICAgICAgICAgeyAm
Y29weVZlcnRleERhdGE8R0xmbG9hdCwgMSwgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JN
QVRfUjMyX0ZMT0FULCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0
LCAyLCBmYWxzZSwgZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwK
LSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDMsIGZhbHNlLCBmYWxzZT4s
IHRydWUsIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsg
JmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDQsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lfRk9S
TUFUX1IzMkczMkIzMkEzMl9GTE9BVCwgMTYgfSwKLSAgICAgICAgfSwKLSAgICAgICAgeyAvLyBu
b3JtYWxpemVkCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCAxLCBmYWxz
ZSwgZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAg
IHsgJmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDIsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lf
Rk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8
R0xmbG9hdCwgMywgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZM
T0FULCAxMiB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xmbG9hdCwgNCwgZmFs
c2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAot
ICAgICAgICB9LAotICAgIH0sCi19OwotCi1jb25zdCBWZXJ0ZXhCdWZmZXIxMTo6VmVydGV4Q29u
dmVydGVyICZWZXJ0ZXhCdWZmZXIxMTo6Z2V0VmVydGV4Q29udmVyc2lvbihjb25zdCBnbDo6VmVy
dGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpCi17Ci0gICAgdW5zaWduZWQgaW50IHR5cGVJbmRleCA9
IDA7Ci0gICAgc3dpdGNoIChhdHRyaWJ1dGUubVR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9C
WVRFOiAgICAgICAgICAgICB0eXBlSW5kZXggPSAwOyBicmVhazsKLSAgICAgIGNhc2UgR0xfVU5T
SUdORURfQllURTogICAgdHlwZUluZGV4ID0gMTsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NIT1JU
OiAgICAgICAgICAgIHR5cGVJbmRleCA9IDI7IGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlNJR05F
RF9TSE9SVDogICB0eXBlSW5kZXggPSAzOyBicmVhazsKLSAgICAgIGNhc2UgR0xfRklYRUQ6ICAg
ICAgICAgICAgdHlwZUluZGV4ID0gNDsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUOiAgICAg
ICAgICAgIHR5cGVJbmRleCA9IDU7IGJyZWFrOwotICAgICAgZGVmYXVsdDogICAgICAgICAgICAg
ICAgICBVTlJFQUNIQUJMRSgpOyBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gbVBvc3NpYmxl
VHJhbnNsYXRpb25zW3R5cGVJbmRleF1bYXR0cmlidXRlLm1Ob3JtYWxpemVkID8gMSA6IDBdW2F0
dHJpYnV0ZS5tU2l6ZSAtIDFdOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlcjExLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlcjExLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjZWI0MjZlODJkNDJiNTU2NjZjNTc5YzNm
ZWUxZmUyYWI3YmE4MDEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0
ZXhCdWZmZXIxMS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLy8KLS8vIENvcHly
aWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLS8vIFZlcnRleEJ1ZmZlcjExLmg6IERlZmluZXMgdGhlIEQzRDExIFZlcnRleEJ1ZmZlciBp
bXBsZW1lbnRhdGlvbi4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfVkVSVEVYQlVGRkVS
MTFfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1ZFUlRFWEJVRkZFUjExX0hfCi0KLSNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4QnVmZmVyLmgiCi0KLW5hbWVzcGFjZSBy
eAotewotY2xhc3MgUmVuZGVyZXIxMTsKLQotY2xhc3MgVmVydGV4QnVmZmVyMTEgOiBwdWJsaWMg
VmVydGV4QnVmZmVyCi17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBWZXJ0ZXhCdWZmZXIxMShy
eDo6UmVuZGVyZXIxMSAqY29uc3QgcmVuZGVyZXIpOwotICAgIHZpcnR1YWwgflZlcnRleEJ1ZmZl
cjExKCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgc2l6ZSwg
Ym9vbCBkeW5hbWljVXNhZ2UpOwotCi0gICAgc3RhdGljIFZlcnRleEJ1ZmZlcjExICptYWtlVmVy
dGV4QnVmZmVyMTEoVmVydGV4QnVmZmVyICp2ZXRleEJ1ZmZlcik7Ci0KLSAgICB2aXJ0dWFsIGJv
b2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJp
YiwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldCk7Ci0g
ICAgdmlydHVhbCBib29sIHN0b3JlUmF3RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBp
bnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNldCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0U3Bh
Y2VSZXF1aXJlZChjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdMc2l6ZWkgY291
bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGludCAqb3V0U3BhY2VSZXF1aXJlZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJv
b2wgcmVxdWlyZXNDb252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikg
Y29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRCdWZmZXJTaXplKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBib29sIHNldEJ1ZmZlclNpemUodW5zaWduZWQgaW50IHNpemUpOwotICAg
IHZpcnR1YWwgYm9vbCBkaXNjYXJkKCk7Ci0KLSAgICB1bnNpZ25lZCBpbnQgZ2V0VmVydGV4U2l6
ZShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0OwotICAgIERYR0lfRk9S
TUFUIGdldERYR0lGb3JtYXQoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25z
dDsKLQotICAgIElEM0QxMUJ1ZmZlciAqZ2V0QnVmZmVyKCkgY29uc3Q7Ci0KLSAgcHJpdmF0ZToK
LSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVmVydGV4QnVmZmVyMTEpOwotCi0gICAgcng6
OlJlbmRlcmVyMTEgKmNvbnN0IG1SZW5kZXJlcjsKLQotICAgIElEM0QxMUJ1ZmZlciAqbUJ1ZmZl
cjsKLSAgICB1bnNpZ25lZCBpbnQgbUJ1ZmZlclNpemU7Ci0gICAgYm9vbCBtRHluYW1pY1VzYWdl
OwotCi0gICAgdHlwZWRlZiB2b2lkICgqVmVydGV4Q29udmVyc2lvbkZ1bmN0aW9uKShjb25zdCB2
b2lkICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB2b2lkICopOwotICAgIHN0cnVjdCBW
ZXJ0ZXhDb252ZXJ0ZXIKLSAgICB7Ci0gICAgICAgIFZlcnRleENvbnZlcnNpb25GdW5jdGlvbiBj
b252ZXJzaW9uRnVuYzsKLSAgICAgICAgYm9vbCBpZGVudGl0eTsKLSAgICAgICAgRFhHSV9GT1JN
QVQgZHhnaUZvcm1hdDsKLSAgICAgICAgdW5zaWduZWQgaW50IG91dHB1dEVsZW1lbnRTaXplOwot
ICAgIH07Ci0KLSAgICBlbnVtIHsgTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVMgPSA2IH07Ci0K
LSAgICAvLyBUaGlzIHRhYmxlIGlzIHVzZWQgdG8gZ2VuZXJhdGUgbUF0dHJpYnV0ZVR5cGVzLgot
ICAgIHN0YXRpYyBjb25zdCBWZXJ0ZXhDb252ZXJ0ZXIgbVBvc3NpYmxlVHJhbnNsYXRpb25zW05V
TV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsgLy8gW0dMIHR5cGVzIGFzIGVudW1lcmF0
ZWQgYnkgdHlwZUluZGV4KCldW25vcm1hbGl6ZWRdW3NpemUgLSAxXQotCi0gICAgc3RhdGljIGNv
bnN0IFZlcnRleENvbnZlcnRlciAmZ2V0VmVydGV4Q29udmVyc2lvbihjb25zdCBnbDo6VmVydGV4
QXR0cmlidXRlICZhdHRyaWJ1dGUpOwotfTsKLQotfQotCi0jZW5kaWYgLy8gTElCR0xFU1YyX1JF
TkRFUkVSX1ZFUlRFWEJVRkZFUjExX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlcjkuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXI5LmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE3OTJiOTdmMjU0YTZiNGY4MDdhOTE5YmY2
ODdiYWRiMmQzNmMzOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRl
eEJ1ZmZlcjkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTMwICswLDAgQEAKLSNpbmNsdWRlICJw
cmVjb21waWxlZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0v
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVmVydGV4QnVmZmVyOS5jcHA6
IERlZmluZXMgdGhlIEQzRDkgVmVydGV4QnVmZmVyIGltcGxlbWVudGF0aW9uLgotCi0jaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlcjkuaCIKLSNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvdmVydGV4Y29udmVyc2lvbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9CdWZmZXJTdG9yYWdlLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKLSNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXI5LmgiCi0KLSNpbmNsdWRlICJsaWJH
TEVTdjIvQnVmZmVyLmgiCi0KLW5hbWVzcGFjZSByeAotewotCi1ib29sIFZlcnRleEJ1ZmZlcjk6
Om1UcmFuc2xhdGlvbnNJbml0aWFsaXplZCA9IGZhbHNlOwotVmVydGV4QnVmZmVyOTo6Rm9ybWF0
Q29udmVydGVyIFZlcnRleEJ1ZmZlcjk6Om1Gb3JtYXRDb252ZXJ0ZXJzW05VTV9HTF9WRVJURVhf
QVRUUklCX1RZUEVTXVsyXVs0XTsKLQotVmVydGV4QnVmZmVyOTo6VmVydGV4QnVmZmVyOShyeDo6
UmVuZGVyZXI5ICpjb25zdCByZW5kZXJlcikgOiBtUmVuZGVyZXIocmVuZGVyZXIpCi17Ci0gICAg
bVZlcnRleEJ1ZmZlciA9IE5VTEw7Ci0gICAgbUJ1ZmZlclNpemUgPSAwOwotICAgIG1EeW5hbWlj
VXNhZ2UgPSBmYWxzZTsKLQotICAgIGlmICghbVRyYW5zbGF0aW9uc0luaXRpYWxpemVkKQotICAg
IHsKLSAgICAgICAgaW5pdGlhbGl6ZVRyYW5zbGF0aW9ucyhyZW5kZXJlci0+Z2V0Q2Fwc0RlY2xU
eXBlcygpKTsKLSAgICAgICAgbVRyYW5zbGF0aW9uc0luaXRpYWxpemVkID0gdHJ1ZTsKLSAgICB9
Ci19Ci0KLVZlcnRleEJ1ZmZlcjk6On5WZXJ0ZXhCdWZmZXI5KCkKLXsKLSAgICBpZiAobVZlcnRl
eEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhCdWZmZXItPlJlbGVhc2UoKTsKLSAgICAg
ICAgbVZlcnRleEJ1ZmZlciA9IE5VTEw7Ci0gICAgfQotfQotCi1ib29sIFZlcnRleEJ1ZmZlcjk6
OmluaXRpYWxpemUodW5zaWduZWQgaW50IHNpemUsIGJvb2wgZHluYW1pY1VzYWdlKQotewotICAg
IGlmIChtVmVydGV4QnVmZmVyKQotICAgIHsKLSAgICAgICAgbVZlcnRleEJ1ZmZlci0+UmVsZWFz
ZSgpOwotICAgICAgICBtVmVydGV4QnVmZmVyID0gTlVMTDsKLSAgICB9Ci0KLSAgICB1cGRhdGVT
ZXJpYWwoKTsKLQotICAgIGlmIChzaXplID4gMCkKLSAgICB7Ci0gICAgICAgIERXT1JEIGZsYWdz
ID0gRDNEVVNBR0VfV1JJVEVPTkxZOwotICAgICAgICBpZiAoZHluYW1pY1VzYWdlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBmbGFncyB8PSBEM0RVU0FHRV9EWU5BTUlDOwotICAgICAgICB9Ci0K
LSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXItPmNyZWF0ZVZlcnRleEJ1ZmZlcihz
aXplLCBmbGFncywgJm1WZXJ0ZXhCdWZmZXIpOwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcg
YSB2ZXJ0ZXggYnVmZmVyIG9mIHNpemUgJWx1LiIsIHNpemUpOwotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbUJ1ZmZlclNpemUgPSBzaXplOwotICAg
IG1EeW5hbWljVXNhZ2UgPSBkeW5hbWljVXNhZ2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVZl
cnRleEJ1ZmZlcjkgKlZlcnRleEJ1ZmZlcjk6Om1ha2VWZXJ0ZXhCdWZmZXI5KFZlcnRleEJ1ZmZl
ciAqdmVydGV4QnVmZmVyKQotewotICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKFZlcnRleEJ1
ZmZlcjkqLCB2ZXJ0ZXhCdWZmZXIpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VmVydGV4QnVm
ZmVyOSo+KHZlcnRleEJ1ZmZlcik7Ci19Ci0KLWJvb2wgVmVydGV4QnVmZmVyOTo6c3RvcmVWZXJ0
ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xpbnQgc3Rh
cnQsIEdMc2l6ZWkgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTHNpemVpIGluc3RhbmNlcywgdW5zaWduZWQgaW50IG9mZnNldCkKLXsKLSAgICBp
ZiAobVZlcnRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlciA9IGF0
dHJpYi5tQm91bmRCdWZmZXIuZ2V0KCk7Ci0KLSAgICAgICAgaW50IGlucHV0U3RyaWRlID0gYXR0
cmliLnN0cmlkZSgpOwotICAgICAgICBpbnQgZWxlbWVudFNpemUgPSBhdHRyaWIudHlwZVNpemUo
KTsKLSAgICAgICAgY29uc3QgRm9ybWF0Q29udmVydGVyICZjb252ZXJ0ZXIgPSBmb3JtYXRDb252
ZXJ0ZXIoYXR0cmliKTsKLQotICAgICAgICBEV09SRCBsb2NrRmxhZ3MgPSBtRHluYW1pY1VzYWdl
ID8gRDNETE9DS19OT09WRVJXUklURSA6IDA7Ci0KLSAgICAgICAgdm9pZCAqbWFwUHRyID0gTlVM
TDsKLQotICAgICAgICB1bnNpZ25lZCBpbnQgbWFwU2l6ZTsKLSAgICAgICAgaWYgKCFzcGFjZVJl
cXVpcmVkKGF0dHJpYiwgY291bnQsIGluc3RhbmNlcywgJm1hcFNpemUpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBIUkVTVUxUIHJl
c3VsdCA9IG1WZXJ0ZXhCdWZmZXItPkxvY2sob2Zmc2V0LCBtYXBTaXplLCAmbWFwUHRyLCBsb2Nr
RmxhZ3MpOwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAg
ICAgICAgRVJSKCJMb2NrIGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBjaGFyICpp
bnB1dCA9IE5VTEw7Ci0gICAgICAgIGlmIChidWZmZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEJ1ZmZlclN0b3JhZ2UgKnN0b3JhZ2UgPSBidWZmZXItPmdldFN0b3JhZ2UoKTsKLSAgICAgICAg
ICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHN0b3JhZ2UtPmdldERhdGEoKSkg
KyBzdGF0aWNfY2FzdDxpbnQ+KGF0dHJpYi5tT2Zmc2V0KTsKLSAgICAgICAgfQotICAgICAgICBl
bHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hh
cio+KGF0dHJpYi5tUG9pbnRlcik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaW5zdGFuY2Vz
ID09IDAgfHwgYXR0cmliLm1EaXZpc29yID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlu
cHV0ICs9IGlucHV0U3RyaWRlICogc3RhcnQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY29u
dmVydGVyLmlkZW50aXR5ICYmIGlucHV0U3RyaWRlID09IGVsZW1lbnRTaXplKQotICAgICAgICB7
Ci0gICAgICAgICAgICBtZW1jcHkobWFwUHRyLCBpbnB1dCwgY291bnQgKiBpbnB1dFN0cmlkZSk7
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0
ZXIuY29udmVydEFycmF5KGlucHV0LCBpbnB1dFN0cmlkZSwgY291bnQsIG1hcFB0cik7Ci0gICAg
ICAgIH0KLQotICAgICAgICBtVmVydGV4QnVmZmVyLT5VbmxvY2soKTsKLQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgRVJSKCJWZXJ0ZXggYnVm
ZmVyIG5vdCBpbml0aWFsaXplZC4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0K
LQotYm9vbCBWZXJ0ZXhCdWZmZXI5OjpzdG9yZVJhd0RhdGEoY29uc3Qgdm9pZCogZGF0YSwgdW5z
aWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBvZmZzZXQpCi17Ci0gICAgaWYgKG1WZXJ0ZXhC
dWZmZXIpCi0gICAgewotICAgICAgICBEV09SRCBsb2NrRmxhZ3MgPSBtRHluYW1pY1VzYWdlID8g
RDNETE9DS19OT09WRVJXUklURSA6IDA7Ci0KLSAgICAgICAgdm9pZCAqbWFwUHRyID0gTlVMTDsK
LSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVmVydGV4QnVmZmVyLT5Mb2NrKG9mZnNldCwgc2l6
ZSwgJm1hcFB0ciwgbG9ja0ZsYWdzKTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiTG9jayBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgi
LCByZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgbWVtY3B5KG1hcFB0ciwgZGF0YSwgc2l6ZSk7Ci0KLSAgICAgICAgbVZlcnRleEJ1ZmZlci0+
VW5sb2NrKCk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgIEVSUigiVmVydGV4IGJ1ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgVmVydGV4QnVmZmVyOTo6Z2V0U3BhY2VS
ZXF1aXJlZChjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdMc2l6ZWkgY291bnQs
IEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGludCAqb3V0U3BhY2VSZXF1aXJlZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3Bh
Y2VSZXF1aXJlZChhdHRyaWIsIGNvdW50LCBpbnN0YW5jZXMsIG91dFNwYWNlUmVxdWlyZWQpOwot
fQotCi1ib29sIFZlcnRleEJ1ZmZlcjk6OnJlcXVpcmVzQ29udmVyc2lvbihjb25zdCBnbDo6VmVy
dGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFmb3JtYXRDb252ZXJ0
ZXIoYXR0cmliKS5pZGVudGl0eTsKLX0KLQotdW5zaWduZWQgaW50IFZlcnRleEJ1ZmZlcjk6Omdl
dFZlcnRleFNpemUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdAotewot
ICAgIHVuc2lnbmVkIGludCBzcGFjZVJlcXVpcmVkOwotICAgIHJldHVybiBnZXRTcGFjZVJlcXVp
cmVkKGF0dHJpYiwgMSwgMCwgJnNwYWNlUmVxdWlyZWQpID8gc3BhY2VSZXF1aXJlZCA6IDA7Ci19
Ci0KLUQzRERFQ0xUWVBFIFZlcnRleEJ1ZmZlcjk6OmdldERlY2xUeXBlKGNvbnN0IGdsOjpWZXJ0
ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QKLXsKLSAgICByZXR1cm4gZm9ybWF0Q29udmVydGVy
KGF0dHJpYikuZDNkRGVjbFR5cGU7Ci19Ci0KLXVuc2lnbmVkIGludCBWZXJ0ZXhCdWZmZXI5Ojpn
ZXRCdWZmZXJTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUJ1ZmZlclNpemU7Ci19Ci0KLWJv
b2wgVmVydGV4QnVmZmVyOTo6c2V0QnVmZmVyU2l6ZSh1bnNpZ25lZCBpbnQgc2l6ZSkKLXsKLSAg
ICBpZiAoc2l6ZSA+IG1CdWZmZXJTaXplKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGluaXRpYWxp
emUoc2l6ZSwgbUR5bmFtaWNVc2FnZSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBWZXJ0ZXhCdWZmZXI5OjpkaXNjYXJkKCkK
LXsKLSAgICBpZiAobVZlcnRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIHZvaWQgKmR1bW15Owot
ICAgICAgICBIUkVTVUxUIHJlc3VsdDsKLQotICAgICAgICByZXN1bHQgPSBtVmVydGV4QnVmZmVy
LT5Mb2NrKDAsIDEsICZkdW1teSwgRDNETE9DS19ESVNDQVJEKTsKLSAgICAgICAgaWYgKEZBSUxF
RChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkRpc2NhcmQgbG9jayBmYWls
ZWQgd2l0aCBlcnJvciAweCUwOHgiLCByZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0KLSAgICAgICAgcmVzdWx0ID0gbVZlcnRleEJ1ZmZlci0+VW5sb2NrKCk7
Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJS
KCJEaXNjYXJkIHVubG9jayBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgiLCByZXN1bHQpOwotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIEVSUigiVmVydGV4IGJ1ZmZlciBub3Qg
aW5pdGlhbGl6ZWQuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLUlEaXJl
Y3QzRFZlcnRleEJ1ZmZlcjkgKiBWZXJ0ZXhCdWZmZXI5OjpnZXRCdWZmZXIoKSBjb25zdAotewot
ICAgIHJldHVybiBtVmVydGV4QnVmZmVyOwotfQotCi0vLyBNYXBwaW5nIGZyb20gT3BlbkdMLUVT
IHZlcnRleCBhdHRyaWIgdHlwZSB0byBEM0QgZGVjbCB0eXBlOgotLy8KLS8vIEJZVEUgICAgICAg
ICAgICAgICAgIFNIT1JUIChDYXN0KQotLy8gQllURS1ub3JtICAgICAgICAgICAgRkxPQVQgKE5v
cm1hbGl6ZSkgKGNhbid0IGJlIGV4YWN0bHkgcmVwcmVzZW50ZWQgYXMgU0hPUlQtbm9ybSkKLS8v
IFVOU0lHTkVEX0JZVEUgICAgICAgIFVCWVRFNCAoSWRlbnRpdHkpIG9yIFNIT1JUIChDYXN0KQot
Ly8gVU5TSUdORURfQllURS1ub3JtICAgVUJZVEU0TiAoSWRlbnRpdHkpIG9yIEZMT0FUIChOb3Jt
YWxpemUpCi0vLyBTSE9SVCAgICAgICAgICAgICAgICBTSE9SVCAoSWRlbnRpdHkpCi0vLyBTSE9S
VC1ub3JtICAgICAgICAgICBTSE9SVC1ub3JtIChJZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1hbGl6
ZSkKLS8vIFVOU0lHTkVEX1NIT1JUICAgICAgIEZMT0FUIChDYXN0KQotLy8gVU5TSUdORURfU0hP
UlQtbm9ybSAgVVNIT1JULW5vcm0gKElkZW50aXR5KSBvciBGTE9BVCAoTm9ybWFsaXplKQotLy8g
RklYRUQgKG5vdCBpbiBXZWJHTCkgRkxPQVQgKEZpeGVkVG9GbG9hdCkKLS8vIEZMT0FUICAgICAg
ICAgICAgICAgIEZMT0FUIChJZGVudGl0eSkKLQotLy8gR0xUb0NUeXBlIG1hcHMgZnJvbSBHTCB0
eXBlIChhcyBHTGVudW0pIHRvIHRoZSBDIHR5cGVkZWYuCi10ZW1wbGF0ZSA8R0xlbnVtIEdMVHlw
ZT4gc3RydWN0IEdMVG9DVHlwZSB7IH07Ci0KLXRlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8
R0xfQllURT4gICAgICAgICAgIHsgdHlwZWRlZiBHTGJ5dGUgdHlwZTsgICAgICB9OwotdGVtcGxh
dGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9VTlNJR05FRF9CWVRFPiAgeyB0eXBlZGVmIEdMdWJ5
dGUgdHlwZTsgICAgIH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX1NIT1JUPiAg
ICAgICAgICB7IHR5cGVkZWYgR0xzaG9ydCB0eXBlOyAgICAgfTsKLXRlbXBsYXRlIDw+IHN0cnVj
dCBHTFRvQ1R5cGU8R0xfVU5TSUdORURfU0hPUlQ+IHsgdHlwZWRlZiBHTHVzaG9ydCB0eXBlOyAg
ICB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9GSVhFRD4gICAgICAgICAgeyB0
eXBlZGVmIEdMdWludCB0eXBlOyAgICAgIH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBl
PEdMX0ZMT0FUPiAgICAgICAgICB7IHR5cGVkZWYgR0xmbG9hdCB0eXBlOyAgICAgfTsKLQotLy8g
VGhpcyBkaWZmZXJzIGZyb20gRDNEREVDTFRZUEUgaW4gdGhhdCBpdCBpcyB1bnNpemVkLiAoU2l6
ZSBleHBhbnNpb24gaXMgYXBwbGllZCBsYXN0LikKLWVudW0gRDNEVmVydGV4VHlwZQotewotICAg
IEQzRFZUX0ZMT0FULAotICAgIEQzRFZUX1NIT1JULAotICAgIEQzRFZUX1NIT1JUX05PUk0sCi0g
ICAgRDNEVlRfVUJZVEUsCi0gICAgRDNEVlRfVUJZVEVfTk9STSwKLSAgICBEM0RWVF9VU0hPUlRf
Tk9STQotfTsKLQotLy8gRDNEVG9DVHlwZSBtYXBzIGZyb20gRDNEIHZlcnRleCB0eXBlIChhcyBl
bnVtIEQzRFZlcnRleFR5cGUpIHRvIHRoZSBjb3JyZXNwb25kaW5nIEMgdHlwZS4KLXRlbXBsYXRl
IDx1bnNpZ25lZCBpbnQgRDNEVHlwZT4gc3RydWN0IEQzRFRvQ1R5cGUgeyB9OwotCi10ZW1wbGF0
ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9GTE9BVD4geyB0eXBlZGVmIGZsb2F0IHR5cGU7
IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9TSE9SVD4geyB0eXBlZGVm
IHNob3J0IHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9TSE9S
VF9OT1JNPiB7IHR5cGVkZWYgc2hvcnQgdHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBEM0RU
b0NUeXBlPEQzRFZUX1VCWVRFPiB7IHR5cGVkZWYgdW5zaWduZWQgY2hhciB0eXBlOyB9OwotdGVt
cGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfVUJZVEVfTk9STT4geyB0eXBlZGVmIHVu
c2lnbmVkIGNoYXIgdHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZU
X1VTSE9SVF9OT1JNPiB7IHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdHlwZTsgfTsKLQotLy8gRW5j
b2RlIHRoZSB0eXBlL3NpemUgY29tYmluYXRpb25zIHRoYXQgRDNEIHBlcm1pdHMuIEZvciBlYWNo
IHR5cGUvc2l6ZSBpdCBleHBhbmRzIHRvIGEgd2lkZW5lciB0aGF0IHdpbGwgcHJvdmlkZSB0aGUg
YXBwcm9wcmlhdGUgZmluYWwgc2l6ZS4KLXRlbXBsYXRlIDx1bnNpZ25lZCBpbnQgdHlwZSwgaW50
IHNpemU+IHN0cnVjdCBXaWRlblJ1bGUgeyB9OwotCi10ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVj
dCBXaWRlblJ1bGU8RDNEVlRfRkxPQVQsIHNpemU+ICAgICAgICAgIDogTm9XaWRlbjxzaXplPiB7
IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfU0hPUlQsIHNp
emU+ICAgICAgICAgIDogV2lkZW5Ub0V2ZW48c2l6ZT4geyB9OwotdGVtcGxhdGUgPGludCBzaXpl
PiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1NIT1JUX05PUk0sIHNpemU+ICAgICA6IFdpZGVuVG9F
dmVuPHNpemU+IHsgfTsKLXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RW
VF9VQllURSwgc2l6ZT4gICAgICAgICAgOiBXaWRlblRvRm91cjxzaXplPiB7IH07Ci10ZW1wbGF0
ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfVUJZVEVfTk9STSwgc2l6ZT4gICAg
IDogV2lkZW5Ub0ZvdXI8c2l6ZT4geyB9OwotdGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lk
ZW5SdWxlPEQzRFZUX1VTSE9SVF9OT1JNLCBzaXplPiAgICA6IFdpZGVuVG9FdmVuPHNpemU+IHsg
fTsKLQotLy8gVmVydGV4VHlwZUZsYWdzIGVuY29kZXMgdGhlIEQzRENBUFM5OjpEZWNsVHlwZSBm
bGFnIGFuZCB2ZXJ0ZXggZGVjbGFyYXRpb24gZmxhZyBmb3IgZWFjaCBEM0QgdmVydGV4IHR5cGUg
JiBzaXplIGNvbWJpbmF0aW9uLgotdGVtcGxhdGUgPHVuc2lnbmVkIGludCBkM2R0eXBlLCBpbnQg
c2l6ZT4gc3RydWN0IFZlcnRleFR5cGVGbGFncyB7IH07Ci0KLXRlbXBsYXRlIDx1bnNpZ25lZCBp
bnQgX2NhcGZsYWcsIHVuc2lnbmVkIGludCBfZGVjbGZsYWc+Ci1zdHJ1Y3QgVmVydGV4VHlwZUZs
YWdzSGVscGVyCi17Ci0gICAgZW51bSB7IGNhcGZsYWcgPSBfY2FwZmxhZyB9OwotICAgIGVudW0g
eyBkZWNsZmxhZyA9IF9kZWNsZmxhZyB9OwotfTsKLQotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRl
eFR5cGVGbGFnczxEM0RWVF9GTE9BVCwgMT4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNE
REVDTFRZUEVfRkxPQVQxPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdz
PEQzRFZUX0ZMT0FULCAyPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9G
TE9BVDI+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfRkxP
QVQsIDM+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FUMz4geyB9
OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwgND4gOiBW
ZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQ0PiB7IH07Ci10ZW1wbGF0
ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JULCAyPiA6IFZlcnRleFR5cGVG
bGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9TSE9SVDI+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVj
dCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlQsIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVy
PDAsIEQzRERFQ0xUWVBFX1NIT1JUND4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5
cGVGbGFnczxEM0RWVF9TSE9SVF9OT1JNLCAyPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0RE
VENBUFNfU0hPUlQyTiwgRDNEREVDTFRZUEVfU0hPUlQyTj4geyB9OwotdGVtcGxhdGUgPD4gc3Ry
dWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVF9OT1JNLCA0PiA6IFZlcnRleFR5cGVGbGFn
c0hlbHBlcjxEM0REVENBUFNfU0hPUlQ0TiwgRDNEREVDTFRZUEVfU0hPUlQ0Tj4geyB9OwotdGVt
cGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9VQllURSwgND4gOiBWZXJ0ZXhU
eXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VCWVRFNCwgRDNEREVDTFRZUEVfVUJZVEU0PiB7IH07
Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1VCWVRFX05PUk0sIDQ+
IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VQllURTROLCBEM0RERUNMVFlQRV9V
QllURTROPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1VT
SE9SVF9OT1JNLCAyPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfVVNIT1JUMk4s
IEQzRERFQ0xUWVBFX1VTSE9SVDJOPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlw
ZUZsYWdzPEQzRFZUX1VTSE9SVF9OT1JNLCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0RE
VENBUFNfVVNIT1JUNE4sIEQzRERFQ0xUWVBFX1VTSE9SVDROPiB7IH07Ci0KLQotLy8gVmVydGV4
VHlwZU1hcHBpbmcgbWFwcyBHTCB0eXBlICYgbm9ybWFsaXplZCBmbGFnIHRvIHByZWZlcnJlZCBh
bmQgZmFsbGJhY2sgRDNEIHZlcnRleCB0eXBlcyAoYXMgRDNEVmVydGV4VHlwZSBlbnVtcykuCi10
ZW1wbGF0ZSA8R0xlbnVtIEdMdHlwZSwgYm9vbCBub3JtYWxpemVkPiBzdHJ1Y3QgVmVydGV4VHlw
ZU1hcHBpbmcgeyB9OwotCi10ZW1wbGF0ZSA8RDNEVmVydGV4VHlwZSBQcmVmZXJyZWQsIEQzRFZl
cnRleFR5cGUgRmFsbGJhY2sgPSBQcmVmZXJyZWQ+Ci1zdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmdC
YXNlCi17Ci0gICAgZW51bSB7IHByZWZlcnJlZCA9IFByZWZlcnJlZCB9OwotICAgIGVudW0geyBm
YWxsYmFjayA9IEZhbGxiYWNrIH07Ci19OwotCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlw
ZU1hcHBpbmc8R0xfQllURSwgZmFsc2U+ICAgICAgICAgICAgICAgICAgICAgICAgOiBWZXJ0ZXhU
eXBlTWFwcGluZ0Jhc2U8RDNEVlRfU0hPUlQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8v
IENhc3QKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9CWVRFLCB0cnVl
PiAgICAgICAgICAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9G
TE9BVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9ybWFsaXplCi10ZW1wbGF0ZSA8
PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdORURfQllURSwgZmFsc2U+ICAgICAg
ICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfVUJZVEUsIEQzRFZUX0ZMT0FU
PiB7IH07ICAgICAgICAgIC8vIElkZW50aXR5LCBDYXN0Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVy
dGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdORURfQllURSwgdHJ1ZT4gICAgICAgICAgICAgICAgOiBW
ZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfVUJZVEVfTk9STSwgRDNEVlRfRkxPQVQ+IHsgfTsg
ICAgIC8vIElkZW50aXR5LCBOb3JtYWxpemUKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBl
TWFwcGluZzxHTF9TSE9SVCwgZmFsc2U+ICAgICAgICAgICAgICAgICAgICAgICA6IFZlcnRleFR5
cGVNYXBwaW5nQmFzZTxEM0RWVF9TSE9SVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8g
SWRlbnRpdHkKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9TSE9SVCwg
dHJ1ZT4gICAgICAgICAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RW
VF9TSE9SVF9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAgICAgLy8gQ2FzdCwgTm9ybWFsaXplCi10
ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdORURfU0hPUlQsIGZh
bHNlPiAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxPQVQ+IHsg
fTsgICAgICAgICAgICAgICAgICAgICAgIC8vIENhc3QKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0
ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9TSE9SVCwgdHJ1ZT4gICAgICAgICAgICAgICA6IFZl
cnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9VU0hPUlRfTk9STSwgRDNEVlRfRkxPQVQ+IHsgfTsg
ICAgLy8gQ2FzdCwgTm9ybWFsaXplCi10ZW1wbGF0ZSA8Ym9vbCBub3JtYWxpemVkPiBzdHJ1Y3Qg
VmVydGV4VHlwZU1hcHBpbmc8R0xfRklYRUQsIG5vcm1hbGl6ZWQ+ICAgOiBWZXJ0ZXhUeXBlTWFw
cGluZ0Jhc2U8RDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpeGVk
VG9GbG9hdAotdGVtcGxhdGUgPGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IFZlcnRleFR5cGVNYXBw
aW5nPEdMX0ZMT0FULCBub3JtYWxpemVkPiAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZU
X0ZMT0FUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBJZGVudGl0eQotCi0KLS8vIEdp
dmVuIGEgR0wgdHlwZSAmIG5vcm0gZmxhZyBhbmQgYSBEM0QgdHlwZSwgQ29udmVyc2lvblJ1bGUg
cHJvdmlkZXMgdGhlIHR5cGUgY29udmVyc2lvbiBydWxlIChDYXN0LCBOb3JtYWxpemUsIElkZW50
aXR5LCBGaXhlZFRvRmxvYXQpLgotLy8gVGhlIGNvbnZlcnNpb24gcnVsZXMgdGhlbXNlbHZlcyBh
cmUgZGVmaW5lZCBpbiB2ZXJ0ZXhjb252ZXJzaW9uLmguCi0KLS8vIEFsbW9zdCBhbGwgY2FzZXMg
YXJlIGNvdmVyZWQgYnkgQ2FzdCAoaW5jbHVkaW5nIHRob3NlIHRoYXQgYXJlIGFjdHVhbGx5IElk
ZW50aXR5IHNpbmNlIENhc3Q8VCxUPiBrbm93cyBpdCdzIGFuIGlkZW50aXR5IG1hcHBpbmcpLgot
dGVtcGxhdGUgPEdMZW51bSBmcm9tVHlwZSwgYm9vbCBub3JtYWxpemVkLCB1bnNpZ25lZCBpbnQg
dG9UeXBlPgotc3RydWN0IENvbnZlcnNpb25SdWxlIDogQ2FzdDx0eXBlbmFtZSBHTFRvQ1R5cGU8
ZnJvbVR5cGU+Ojp0eXBlLCB0eXBlbmFtZSBEM0RUb0NUeXBlPHRvVHlwZT46OnR5cGU+IHsgfTsK
LQotLy8gQWxsIGNvbnZlcnNpb25zIGZyb20gbm9ybWFsaXplZCB0eXBlcyB0byBmbG9hdCB1c2Ug
dGhlIE5vcm1hbGl6ZSBvcGVyYXRvci4KLXRlbXBsYXRlIDxHTGVudW0gZnJvbVR5cGU+IHN0cnVj
dCBDb252ZXJzaW9uUnVsZTxmcm9tVHlwZSwgdHJ1ZSwgRDNEVlRfRkxPQVQ+IDogTm9ybWFsaXpl
PHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5cGU+IHsgfTsKLQotLy8gVXNlIGEgZnVs
bCBzcGVjaWFsaXphdGlvbiBmb3IgdGhpcyBzbyB0aGF0IGl0IHByZWZlcmVudGlhbGx5IG1hdGNo
ZXMgYWhlYWQgb2YgdGhlIGdlbmVyaWMgbm9ybWFsaXplLXRvLWZsb2F0IHJ1bGVzLgotdGVtcGxh
dGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCB0cnVlLCBEM0RWVF9GTE9BVD4g
IDogRml4ZWRUb0Zsb2F0PEdMaW50LCAxNj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IENvbnZl
cnNpb25SdWxlPEdMX0ZJWEVELCBmYWxzZSwgRDNEVlRfRkxPQVQ+IDogRml4ZWRUb0Zsb2F0PEdM
aW50LCAxNj4geyB9OwotCi0vLyBBIDItc3RhZ2UgY29uc3RydWN0aW9uIGlzIHVzZWQgZm9yIERl
ZmF1bHRWZXJ0ZXhWYWx1ZXMgYmVjYXVzZSBmbG9hdCBtdXN0IHVzZSBTaW1wbGVEZWZhdWx0VmFs
dWVzIChpLmUuIDAvMSkKLS8vIHdoZXRoZXIgaXQgaXMgbm9ybWFsaXplZCBvciBub3QuCi10ZW1w
bGF0ZSA8Y2xhc3MgVCwgYm9vbCBub3JtYWxpemVkPiBzdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVl
c1N0YWdlMiB7IH07Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgRGVmYXVsdFZlcnRleFZh
bHVlc1N0YWdlMjxULCB0cnVlPiAgOiBOb3JtYWxpemVkRGVmYXVsdFZhbHVlczxUPiB7IH07Ci10
ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFnZTI8VCwgZmFs
c2U+IDogU2ltcGxlRGVmYXVsdFZhbHVlczxUPiB7IH07Ci0KLS8vIFdvcmsgb3V0IHRoZSBkZWZh
dWx0IHZhbHVlIHJ1bGUgZm9yIGEgRDNEIHR5cGUgKGV4cHJlc3NlZCBhcyB0aGUgQyB0eXBlKSBh
bmQKLXRlbXBsYXRlIDxjbGFzcyBULCBib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBEZWZhdWx0VmVy
dGV4VmFsdWVzIDogRGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMjxULCBub3JtYWxpemVkPiB7IH07
Ci10ZW1wbGF0ZSA8Ym9vbCBub3JtYWxpemVkPiBzdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlczxm
bG9hdCwgbm9ybWFsaXplZD4gOiBTaW1wbGVEZWZhdWx0VmFsdWVzPGZsb2F0PiB7IH07Ci0KLS8v
IFBvbGljeSBydWxlcyBmb3IgdXNlIHdpdGggQ29udmVydGVyLCB0byBjaG9vc2Ugd2hldGhlciB0
byB1c2UgdGhlIHByZWZlcnJlZCBvciBmYWxsYmFjayBjb252ZXJzaW9uLgotLy8gVGhlIGZhbGxi
YWNrIGNvbnZlcnNpb24gcHJvZHVjZXMgYW4gb3V0cHV0IHRoYXQgYWxsIEQzRDkgZGV2aWNlcyBt
dXN0IHN1cHBvcnQuCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IFVzZVByZWZlcnJlZCB7IGVu
dW0geyB0eXBlID0gVDo6cHJlZmVycmVkIH07IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0
IFVzZUZhbGxiYWNrIHsgZW51bSB7IHR5cGUgPSBUOjpmYWxsYmFjayB9OyB9OwotCi0vLyBDb252
ZXJ0ZXIgdGllcyBpdCBhbGwgdG9nZXRoZXIuIEdpdmVuIGFuIE9wZW5HTCB0eXBlL25vcm0vc2l6
ZSBhbmQgY2hvaWNlIG9mIHByZWZlcnJlZC9mYWxsYmFjayBjb252ZXJzaW9uLAotLy8gaXQgcHJv
dmlkZXMgYWxsIHRoZSBtZW1iZXJzIG9mIHRoZSBhcHByb3ByaWF0ZSBWZXJ0ZXhEYXRhQ29udmVy
dGVyLCB0aGUgRDNEQ0FQUzk6OkRlY2xUeXBlcyBmbGFnIGluIGNhcCBmbGFnCi0vLyBhbmQgdGhl
IEQzRERFQ0xUWVBFIG1lbWJlciBuZWVkZWQgZm9yIHRoZSB2ZXJ0ZXggZGVjbGFyYXRpb24gaW4g
ZGVjbGZsYWcuCi10ZW1wbGF0ZSA8R0xlbnVtIGZyb21UeXBlLCBib29sIG5vcm1hbGl6ZWQsIGlu
dCBzaXplLCB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgUHJlZmVyZW5jZVJ1bGU+Ci1zdHJ1Y3Qg
Q29udmVydGVyCi0gICAgOiBWZXJ0ZXhEYXRhQ29udmVydGVyPHR5cGVuYW1lIEdMVG9DVHlwZTxm
cm9tVHlwZT46OnR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFdpZGVuUnVsZTxQcmVm
ZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6ZWQ+ID46OnR5
cGUsIHNpemU+LAotICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJzaW9uUnVsZTxmcm9t
VHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXpl
ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlZmVyZW5jZVJ1
bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBlPiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdFZlcnRleFZhbHVlczx0eXBlbmFtZSBEM0RU
b0NUeXBlPFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBlTWFwcGluZzxmcm9tVHlwZSwgbm9ybWFs
aXplZD4gPjo6dHlwZT46OnR5cGUsIG5vcm1hbGl6ZWQgPiA+Ci17Ci1wcml2YXRlOgotICAgIGVu
dW0geyBkM2R0eXBlID0gUHJlZmVyZW5jZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBl
LCBub3JtYWxpemVkPiA+Ojp0eXBlIH07Ci0gICAgZW51bSB7IGQzZHNpemUgPSBXaWRlblJ1bGU8
ZDNkdHlwZSwgc2l6ZT46OmZpbmFsV2lkdGggfTsKLQotcHVibGljOgotICAgIGVudW0geyBjYXBm
bGFnID0gVmVydGV4VHlwZUZsYWdzPGQzZHR5cGUsIGQzZHNpemU+OjpjYXBmbGFnIH07Ci0gICAg
ZW51bSB7IGRlY2xmbGFnID0gVmVydGV4VHlwZUZsYWdzPGQzZHR5cGUsIGQzZHNpemU+OjpkZWNs
ZmxhZyB9OwotfTsKLQotLy8gSW5pdGlhbGl6ZSBhIFRyYW5zbGF0aW9uSW5mbwotI2RlZmluZSBU
UkFOU0xBVElPTih0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6aWRlbnRpdHksICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6
ZSwgcHJlZmVycmVkPjo6ZmluYWxTaXplLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6Y29udmVydEFycmF5
LCAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBzdGF0aWNfY2FzdDxEM0RERUNMVFlQ
RT4oQ29udmVydGVyPHR5cGUsIG5vcm0sIHNpemUsIHByZWZlcnJlZD46OmRlY2xmbGFnKSAgXAot
ICAgIH0KLQotI2RlZmluZSBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgbm9y
bSwgc2l6ZSkgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwg
VXNlUHJlZmVycmVkPjo6Y2FwZmxhZywgXAotICAgICAgICBUUkFOU0xBVElPTih0eXBlLCBub3Jt
LCBzaXplLCBVc2VQcmVmZXJyZWQpLCAgICAgICAgXAotICAgICAgICBUUkFOU0xBVElPTih0eXBl
LCBub3JtLCBzaXplLCBVc2VGYWxsYmFjaykgICAgICAgICAgXAotICAgIH0KLQotI2RlZmluZSBU
UkFOU0xBVElPTlNfRk9SX1RZUEUodHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxz
ZSwgMSksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMiksIFRS
QU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMyksIFRSQU5TTEFUSU9O
X0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgNCkgfSwgXAotICAgICAgICB7IFRSQU5T
TEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCB0cnVlLCAxKSwgVFJBTlNMQVRJT05fRk9S
X1RZUEVfTk9STV9TSVpFKHR5cGUsIHRydWUsIDIpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JN
X1NJWkUodHlwZSwgdHJ1ZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBl
LCB0cnVlLCA0KSB9LCAgICAgXAotICAgIH0KLQotI2RlZmluZSBUUkFOU0xBVElPTlNfRk9SX1RZ
UEVfTk9fTk9STSh0eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB7IFRS
QU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMSksIFRSQU5TTEFUSU9O
X0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBF
X05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0la
RSh0eXBlLCBmYWxzZSwgNCkgfSwgXAotICAgICAgICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05P
Uk1fU0laRSh0eXBlLCBmYWxzZSwgMSksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0
eXBlLCBmYWxzZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxz
ZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgNCkgfSwg
XAotICAgIH0KLQotY29uc3QgVmVydGV4QnVmZmVyOTo6VHJhbnNsYXRpb25EZXNjcmlwdGlvbiBW
ZXJ0ZXhCdWZmZXI5OjptUG9zc2libGVUcmFuc2xhdGlvbnNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJf
VFlQRVNdWzJdWzRdID0gLy8gW0dMIHR5cGVzIGFzIGVudW1lcmF0ZWQgYnkgdHlwZUluZGV4KCld
W25vcm1hbGl6ZWRdW3NpemUtMV0KLXsKLSAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xfQllU
RSksCi0gICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKEdMX1VOU0lHTkVEX0JZVEUpLAotICAgIFRS
QU5TTEFUSU9OU19GT1JfVFlQRShHTF9TSE9SVCksCi0gICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBF
KEdMX1VOU0lHTkVEX1NIT1JUKSwKLSAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEVfTk9fTk9STShH
TF9GSVhFRCksCi0gICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFX05PX05PUk0oR0xfRkxPQVQpCi19
OwotCi12b2lkIFZlcnRleEJ1ZmZlcjk6OmluaXRpYWxpemVUcmFuc2xhdGlvbnMoRFdPUkQgZGVj
bFR5cGVzKQotewotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgTlVNX0dMX1ZFUlRF
WF9BVFRSSUJfVFlQRVM7IGkrKykKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGog
PSAwOyBqIDwgMjsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBrID0gMDsgayA8IDQ7IGsrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAo
bVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2tdLmNhcHNGbGFnID09IDAgfHwgKGRlY2xUeXBl
cyAmIG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tpXVtqXVtrXS5jYXBzRmxhZykgIT0gMCkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1Gb3JtYXRDb252ZXJ0ZXJzW2ldW2pd
W2tdID0gbVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2tdLnByZWZlcnJlZENvbnZlcnNpb247
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIG1Gb3JtYXRDb252ZXJ0ZXJzW2ldW2pdW2tdID0gbVBv
c3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2tdLmZhbGxiYWNrQ29udmVyc2lvbjsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXVuc2lnbmVk
IGludCBWZXJ0ZXhCdWZmZXI5Ojp0eXBlSW5kZXgoR0xlbnVtIHR5cGUpCi17Ci0gICAgc3dpdGNo
ICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfQllURTogcmV0dXJuIDA7Ci0gICAgICBjYXNl
IEdMX1VOU0lHTkVEX0JZVEU6IHJldHVybiAxOwotICAgICAgY2FzZSBHTF9TSE9SVDogcmV0dXJu
IDI7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOiByZXR1cm4gMzsKLSAgICAgIGNhc2Ug
R0xfRklYRUQ6IHJldHVybiA0OwotICAgICAgY2FzZSBHTF9GTE9BVDogcmV0dXJuIDU7Ci0KLSAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiA1OwotICAgIH0KLX0KLQotY29uc3Qg
VmVydGV4QnVmZmVyOTo6Rm9ybWF0Q29udmVydGVyICZWZXJ0ZXhCdWZmZXI5Ojpmb3JtYXRDb252
ZXJ0ZXIoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlKQotewotICAgIHJldHVy
biBtRm9ybWF0Q29udmVydGVyc1t0eXBlSW5kZXgoYXR0cmlidXRlLm1UeXBlKV1bYXR0cmlidXRl
Lm1Ob3JtYWxpemVkXVthdHRyaWJ1dGUubVNpemUgLSAxXTsKLX0KLQotYm9vbCBWZXJ0ZXhCdWZm
ZXI5OjpzcGFjZVJlcXVpcmVkKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgc3Rk
OjpzaXplX3QgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqb3V0U3BhY2VSZXF1aXJlZCkKLXsKLSAgICB1bnNp
Z25lZCBpbnQgZWxlbWVudFNpemUgPSBmb3JtYXRDb252ZXJ0ZXIoYXR0cmliKS5vdXRwdXRFbGVt
ZW50U2l6ZTsKLQotICAgIGlmIChhdHRyaWIubUFycmF5RW5hYmxlZCkKLSAgICB7Ci0gICAgICAg
IHVuc2lnbmVkIGludCBlbGVtZW50Q291bnQgPSAwOwotICAgICAgICBpZiAoaW5zdGFuY2VzID09
IDAgfHwgYXR0cmliLm1EaXZpc29yID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVsZW1l
bnRDb3VudCA9IGNvdW50OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oaW5zdGFuY2VzKSA8IHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLSAoYXR0cmliLm1EaXZpc29yIC0g
MSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gUm91bmQgdXAKLSAgICAgICAg
ICAgICAgICBlbGVtZW50Q291bnQgPSAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihpbnN0YW5j
ZXMpICsgKGF0dHJpYi5tRGl2aXNvciAtIDEpKSAvIGF0dHJpYi5tRGl2aXNvcjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBl
bGVtZW50Q291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGluc3RhbmNlcykgLyBhdHRy
aWIubURpdmlzb3I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZWxl
bWVudFNpemUgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSAvIGVs
ZW1lbnRDb3VudCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG91dFNwYWNlUmVxdWlyZWQp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKm91dFNwYWNlUmVxdWlyZWQgPSBlbGVt
ZW50U2l6ZSAqIGVsZW1lbnRDb3VudDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAg
IGNvbnN0IHVuc2lnbmVkIGludCBlbGVtZW50U2l6ZSA9IDQ7Ci0gICAgICAgIGlmIChvdXRTcGFj
ZVJlcXVpcmVkKQotICAgICAgICB7Ci0gICAgICAgICAgICAqb3V0U3BhY2VSZXF1aXJlZCA9IGVs
ZW1lbnRTaXplICogNDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19
Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvVmVydGV4QnVmZmVyOS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXI5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDJmODgxMTdiZGEyNTBlYzkxMTcwNjdiOGE2OGE4NDRkNjQwZTMwYjIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXI5LmgKKysrIC9kZXYvbnVs
bApAQCAtMSw5MSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBWZXJ0ZXhCdWZmZXI5
Lmg6IERlZmluZXMgdGhlIEQzRDkgVmVydGV4QnVmZmVyIGltcGxlbWVudGF0aW9uLgotCi0jaWZu
ZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9WRVJURVhCVUZGRVI5X0hfCi0jZGVmaW5lIExJQkdMRVNW
Ml9SRU5ERVJFUl9WRVJURVhCVUZGRVI5X0hfCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvVmVydGV4QnVmZmVyLmgiCi0KLW5hbWVzcGFjZSByeAotewotY2xhc3MgUmVuZGVyZXI5Owot
Ci1jbGFzcyBWZXJ0ZXhCdWZmZXI5IDogcHVibGljIFZlcnRleEJ1ZmZlcgotewotICBwdWJsaWM6
Ci0gICAgZXhwbGljaXQgVmVydGV4QnVmZmVyOShyeDo6UmVuZGVyZXI5ICpjb25zdCByZW5kZXJl
cik7Ci0gICAgdmlydHVhbCB+VmVydGV4QnVmZmVyOSgpOwotCi0gICAgdmlydHVhbCBib29sIGlu
aXRpYWxpemUodW5zaWduZWQgaW50IHNpemUsIGJvb2wgZHluYW1pY1VzYWdlKTsKLQotICAgIHN0
YXRpYyBWZXJ0ZXhCdWZmZXI5ICptYWtlVmVydGV4QnVmZmVyOShWZXJ0ZXhCdWZmZXIgKnZlcnRl
eEJ1ZmZlcik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0
IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQs
IEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW50IG9mZnNldCk7Ci0gICAgdmlydHVhbCBib29sIHN0b3JlUmF3RGF0YShj
b25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNldCk7
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0U3BhY2VSZXF1aXJlZChjb25zdCBnbDo6VmVydGV4QXR0
cmlidXRlICZhdHRyaWIsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25l
ZCBpbnQgKm91dFNwYWNlUmVxdWlyZWQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIHJlcXVp
cmVzQ29udmVyc2lvbihjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0Owot
Ci0gICAgdW5zaWduZWQgaW50IGdldFZlcnRleFNpemUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0
ZSAmYXR0cmliKSBjb25zdDsKLSAgICBEM0RERUNMVFlQRSBnZXREZWNsVHlwZShjb25zdCBnbDo6
VmVydGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0OwotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBp
bnQgZ2V0QnVmZmVyU2l6ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBzZXRCdWZmZXJTaXpl
KHVuc2lnbmVkIGludCBzaXplKTsKLSAgICB2aXJ0dWFsIGJvb2wgZGlzY2FyZCgpOwotCi0gICAg
SURpcmVjdDNEVmVydGV4QnVmZmVyOSAqZ2V0QnVmZmVyKCkgY29uc3Q7Ci0KLSAgcHJpdmF0ZToK
LSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVmVydGV4QnVmZmVyOSk7Ci0KLSAgICByeDo6
UmVuZGVyZXI5ICpjb25zdCBtUmVuZGVyZXI7Ci0KLSAgICBJRGlyZWN0M0RWZXJ0ZXhCdWZmZXI5
ICptVmVydGV4QnVmZmVyOwotICAgIHVuc2lnbmVkIGludCBtQnVmZmVyU2l6ZTsKLSAgICBib29s
IG1EeW5hbWljVXNhZ2U7Ci0KLSAgICAvLyBBdHRyaWJ1dGUgZm9ybWF0IGNvbnZlcnNpb24KLSAg
ICBlbnVtIHsgTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVMgPSA2IH07Ci0KLSAgICBzdHJ1Y3Qg
Rm9ybWF0Q29udmVydGVyCi0gICAgewotICAgICAgICBib29sIGlkZW50aXR5OwotICAgICAgICBz
dGQ6OnNpemVfdCBvdXRwdXRFbGVtZW50U2l6ZTsKLSAgICAgICAgdm9pZCAoKmNvbnZlcnRBcnJh
eSkoY29uc3Qgdm9pZCAqaW4sIHN0ZDo6c2l6ZV90IHN0cmlkZSwgc3RkOjpzaXplX3Qgbiwgdm9p
ZCAqb3V0KTsKLSAgICAgICAgRDNEREVDTFRZUEUgZDNkRGVjbFR5cGU7Ci0gICAgfTsKLQotICAg
IHN0YXRpYyBib29sIG1UcmFuc2xhdGlvbnNJbml0aWFsaXplZDsKLSAgICBzdGF0aWMgdm9pZCBp
bml0aWFsaXplVHJhbnNsYXRpb25zKERXT1JEIGRlY2xUeXBlcyk7Ci0KLSAgICAvLyBbR0wgdHlw
ZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXplZF1bc2l6ZSAtIDFdCi0g
ICAgc3RhdGljIEZvcm1hdENvbnZlcnRlciBtRm9ybWF0Q29udmVydGVyc1tOVU1fR0xfVkVSVEVY
X0FUVFJJQl9UWVBFU11bMl1bNF07Ci0KLSAgICBzdHJ1Y3QgVHJhbnNsYXRpb25EZXNjcmlwdGlv
bgotICAgIHsKLSAgICAgICAgRFdPUkQgY2Fwc0ZsYWc7Ci0gICAgICAgIEZvcm1hdENvbnZlcnRl
ciBwcmVmZXJyZWRDb252ZXJzaW9uOwotICAgICAgICBGb3JtYXRDb252ZXJ0ZXIgZmFsbGJhY2tD
b252ZXJzaW9uOwotICAgIH07Ci0KLSAgICAvLyBUaGlzIHRhYmxlIGlzIHVzZWQgdG8gZ2VuZXJh
dGUgbUZvcm1hdENvbnZlcnRlcnMuCi0gICAgLy8gW0dMIHR5cGVzIGFzIGVudW1lcmF0ZWQgYnkg
dHlwZUluZGV4KCldW25vcm1hbGl6ZWRdW3NpemUgLSAxXQotICAgIHN0YXRpYyBjb25zdCBUcmFu
c2xhdGlvbkRlc2NyaXB0aW9uIG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tOVU1fR0xfVkVSVEVYX0FU
VFJJQl9UWVBFU11bMl1bNF07Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IHR5cGVJbmRleChH
TGVudW0gdHlwZSk7Ci0gICAgc3RhdGljIGNvbnN0IEZvcm1hdENvbnZlcnRlciAmZm9ybWF0Q29u
dmVydGVyKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSk7Ci0KLSAgICBzdGF0
aWMgYm9vbCBzcGFjZVJlcXVpcmVkKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwg
c3RkOjpzaXplX3QgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTcGFjZVJlcXVpcmVkKTsKLX07Ci0KLX0KLQot
I2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9WRVJURVhCVUZGRVI5X0hfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERl
Y2xhcmF0aW9uQ2FjaGUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOWI4M2E2NDc2ZWJjYzZiYjhkNjE1NWRlNTZiYjI2MDM2MzFkOWRmNy4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERlY2xhcmF0aW9uQ2FjaGUu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjE3ICswLDAgQEAKLSNpbmNsdWRlICJwcmVjb21waWxl
ZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFZlcnRleERlY2xhcmF0aW9uQ2FjaGUuY3BwOiBJbXBs
ZW1lbnRzIGEgaGVscGVyIGNsYXNzIHRvIGNvbnN0cnVjdCBhbmQgY2FjaGUgdmVydGV4IGRlY2xh
cmF0aW9ucy4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL0NvbnRleHQuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVmVy
dGV4QnVmZmVyOS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhEZWNsYXJh
dGlvbkNhY2hlLmgiCi0KLW5hbWVzcGFjZSByeAotewotCi1WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hl
OjpWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKCkgOiBtTWF4THJ1KDApCi17Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUzsgaSsrKQotICAgIHsKLSAg
ICAgICAgbVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlvbiA9IE5VTEw7Ci0gICAg
ICAgIG1WZXJ0ZXhEZWNsQ2FjaGVbaV0ubHJ1Q291bnQgPSAwOwotICAgIH0KLQotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAgICAg
ICAgbUFwcGxpZWRWQnNbaV0uc2VyaWFsID0gMDsKLSAgICB9Ci0KLSAgICBtTGFzdFNldFZEZWNs
ID0gTlVMTDsKLSAgICBtSW5zdGFuY2luZ0VuYWJsZWQgPSB0cnVlOwotfQotCi1WZXJ0ZXhEZWNs
YXJhdGlvbkNhY2hlOjp+VmVydGV4RGVjbGFyYXRpb25DYWNoZSgpCi17Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUzsgaSsrKQotICAgIHsKLSAg
ICAgICAgaWYgKG1WZXJ0ZXhEZWNsQ2FjaGVbaV0udmVydGV4RGVjbGFyYXRpb24pCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1WZXJ0ZXhEZWNsQ2FjaGVbaV0udmVydGV4RGVjbGFyYXRpb24tPlJl
bGVhc2UoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotR0xlbnVtIFZlcnRleERlY2xhcmF0aW9u
Q2FjaGU6OmFwcGx5RGVjbGFyYXRpb24oSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBUcmFuc2xh
dGVkQXR0cmlidXRlIGF0dHJpYnV0ZXNbXSwgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5h
cnksIEdMc2l6ZWkgaW5zdGFuY2VzLCBHTHNpemVpICpyZXBlYXREcmF3KQotewotICAgICpyZXBl
YXREcmF3ID0gMTsKLQotICAgIGludCBpbmRleGVkQXR0cmlidXRlID0gZ2w6Ok1BWF9WRVJURVhf
QVRUUklCUzsKLSAgICBpbnQgaW5zdGFuY2VkQXR0cmlidXRlID0gZ2w6Ok1BWF9WRVJURVhfQVRU
UklCUzsKLQotICAgIGlmIChpbnN0YW5jZXMgPiAwKQotICAgIHsKLSAgICAgICAgLy8gRmluZCBh
biBpbmRleGVkIGF0dHJpYnV0ZSB0byBiZSBtYXBwZWQgdG8gRDNEIHN0cmVhbSAwCi0gICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5hY3RpdmUpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgaWYgKGluZGV4ZWRBdHRyaWJ1dGUgPT0gZ2w6Ok1BWF9WRVJURVhf
QVRUUklCUyAmJiBhdHRyaWJ1dGVzW2ldLmRpdmlzb3IgPT0gMCkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIGluZGV4ZWRBdHRyaWJ1dGUgPSBpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChpbnN0YW5jZWRBdHRyaWJ1dGUgPT0gZ2w6
Ok1BWF9WRVJURVhfQVRUUklCUyAmJiBhdHRyaWJ1dGVzW2ldLmRpdmlzb3IgIT0gMCkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlZEF0dHJpYnV0ZSA9IGk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChpbmRleGVkQXR0cmlidXRl
ICE9IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMgJiYgaW5zdGFuY2VkQXR0cmlidXRlICE9IGdsOjpN
QVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgIC8vIEZvdW5k
IGJvdGggYW4gaW5kZXhlZCBhbmQgaW5zdGFuY2VkIGF0dHJpYnV0ZQotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGluZGV4ZWRBdHRyaWJ1dGUgPT0gZ2w6Ok1BWF9WRVJU
RVhfQVRUUklCUykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BF
UkFUSU9OOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgRDNEVkVSVEVYRUxFTUVOVDkgZWxlbWVu
dHNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCUyArIDFdOwotICAgIEQzRFZFUlRFWEVMRU1FTlQ5ICpl
bGVtZW50ID0gJmVsZW1lbnRzWzBdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBnbDo6TUFY
X1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAgewotICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5h
Y3RpdmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIERpcmVjdGx5IGJpbmRpbmcgdGhlIHN0
b3JhZ2UgYnVmZmVyIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGQzZDkKLSAgICAgICAgICAgIEFTU0VS
VChhdHRyaWJ1dGVzW2ldLnN0b3JhZ2UgPT0gTlVMTCk7Ci0KLSAgICAgICAgICAgIGludCBzdHJl
YW0gPSBpOwotCi0gICAgICAgICAgICBpZiAoaW5zdGFuY2VzID4gMCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAvLyBEdWUgdG8gYSBidWcgb24gQVRJIGNhcmRzIHdlIGNhbid0IGVu
YWJsZSBpbnN0YW5jaW5nIHdoZW4gbm9uZSBvZiB0aGUgYXR0cmlidXRlcyBhcmUgaW5zdGFuY2Vk
LgotICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZWRBdHRyaWJ1dGUgPT0gZ2w6Ok1BWF9WRVJU
RVhfQVRUUklCUykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICpyZXBl
YXREcmF3ID0gaW5zdGFuY2VzOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSBpbmRl
eGVkQXR0cmlidXRlKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBzdHJlYW0gPSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGkgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgc3RyZWFtID0gaW5kZXhlZEF0dHJpYnV0ZTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgIFVJTlQgZnJlcXVlbmN5ID0gMTsKLSAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmRpdmlz
b3IgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
ZnJlcXVlbmN5ID0gRDNEU1RSRUFNU09VUkNFX0lOREVYRUREQVRBIHwgaW5zdGFuY2VzOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZnJlcXVlbmN5ID0gRDNEU1RSRUFN
U09VUkNFX0lOU1RBTkNFREFUQSB8IGF0dHJpYnV0ZXNbaV0uZGl2aXNvcjsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgZGV2
aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKHN0cmVhbSwgZnJlcXVlbmN5KTsKLSAgICAgICAgICAg
ICAgICAgICAgbUluc3RhbmNpbmdFbmFibGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFZlcnRleEJ1ZmZlcjkgKnZlcnRleEJ1ZmZlciA9
IFZlcnRleEJ1ZmZlcjk6Om1ha2VWZXJ0ZXhCdWZmZXI5KGF0dHJpYnV0ZXNbaV0udmVydGV4QnVm
ZmVyKTsKLQotICAgICAgICAgICAgaWYgKG1BcHBsaWVkVkJzW3N0cmVhbV0uc2VyaWFsICE9IGF0
dHJpYnV0ZXNbaV0uc2VyaWFsIHx8Ci0gICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNbc3RyZWFt
XS5zdHJpZGUgIT0gYXR0cmlidXRlc1tpXS5zdHJpZGUgfHwKLSAgICAgICAgICAgICAgICBtQXBw
bGllZFZCc1tzdHJlYW1dLm9mZnNldCAhPSBhdHRyaWJ1dGVzW2ldLm9mZnNldCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZShzdHJlYW0sIHZl
cnRleEJ1ZmZlci0+Z2V0QnVmZmVyKCksIGF0dHJpYnV0ZXNbaV0ub2Zmc2V0LCBhdHRyaWJ1dGVz
W2ldLnN0cmlkZSk7Ci0gICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5zZXJpYWwg
PSBhdHRyaWJ1dGVzW2ldLnNlcmlhbDsKLSAgICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJl
YW1dLnN0cmlkZSA9IGF0dHJpYnV0ZXNbaV0uc3RyaWRlOwotICAgICAgICAgICAgICAgIG1BcHBs
aWVkVkJzW3N0cmVhbV0ub2Zmc2V0ID0gYXR0cmlidXRlc1tpXS5vZmZzZXQ7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGVsZW1lbnQtPlN0cmVhbSA9IHN0cmVhbTsKLSAgICAgICAgICAg
IGVsZW1lbnQtPk9mZnNldCA9IDA7Ci0gICAgICAgICAgICBlbGVtZW50LT5UeXBlID0gYXR0cmli
dXRlc1tpXS5hdHRyaWJ1dGUtPm1BcnJheUVuYWJsZWQgPyB2ZXJ0ZXhCdWZmZXItPmdldERlY2xU
eXBlKCphdHRyaWJ1dGVzW2ldLmF0dHJpYnV0ZSkgOiBEM0RERUNMVFlQRV9GTE9BVDQ7Ci0gICAg
ICAgICAgICBlbGVtZW50LT5NZXRob2QgPSBEM0RERUNMTUVUSE9EX0RFRkFVTFQ7Ci0gICAgICAg
ICAgICBlbGVtZW50LT5Vc2FnZSA9IEQzRERFQ0xVU0FHRV9URVhDT09SRDsKLSAgICAgICAgICAg
IGVsZW1lbnQtPlVzYWdlSW5kZXggPSBwcm9ncmFtQmluYXJ5LT5nZXRTZW1hbnRpY0luZGV4KGkp
OwotICAgICAgICAgICAgZWxlbWVudCsrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGlu
c3RhbmNlcyA9PSAwIHx8IGluc3RhbmNlZEF0dHJpYnV0ZSA9PSBnbDo6TUFYX1ZFUlRFWF9BVFRS
SUJTKQotICAgIHsKLSAgICAgICAgaWYgKG1JbnN0YW5jaW5nRW5hYmxlZCkKLSAgICAgICAgewot
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBp
KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3Vy
Y2VGcmVxKGksIDEpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtSW5zdGFuY2luZ0Vu
YWJsZWQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBEM0RW
RVJURVhFTEVNRU5UOSBlbmQgPSBEM0RERUNMX0VORCgpOwotICAgICooZWxlbWVudCsrKSA9IGVu
ZDsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJ
RVM7IGkrKykKLSAgICB7Ci0gICAgICAgIFZlcnRleERlY2xDYWNoZUVudHJ5ICplbnRyeSA9ICZt
VmVydGV4RGVjbENhY2hlW2ldOwotICAgICAgICBpZiAobWVtY21wKGVudHJ5LT5jYWNoZWRFbGVt
ZW50cywgZWxlbWVudHMsIChlbGVtZW50IC0gZWxlbWVudHMpICogc2l6ZW9mKEQzRFZFUlRFWEVM
RU1FTlQ5KSkgPT0gMCAmJiBlbnRyeS0+dmVydGV4RGVjbGFyYXRpb24pCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGVudHJ5LT5scnVDb3VudCA9ICsrbU1heExydTsKLSAgICAgICAgICAgIGlmKGVu
dHJ5LT52ZXJ0ZXhEZWNsYXJhdGlvbiAhPSBtTGFzdFNldFZEZWNsKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGRldmljZS0+U2V0VmVydGV4RGVjbGFyYXRpb24oZW50cnktPnZlcnRl
eERlY2xhcmF0aW9uKTsKLSAgICAgICAgICAgICAgICBtTGFzdFNldFZEZWNsID0gZW50cnktPnZl
cnRleERlY2xhcmF0aW9uOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gR0xf
Tk9fRVJST1I7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBWZXJ0ZXhEZWNsQ2FjaGVFbnRyeSAq
bGFzdENhY2hlID0gbVZlcnRleERlY2xDYWNoZTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
TlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmICht
VmVydGV4RGVjbENhY2hlW2ldLmxydUNvdW50IDwgbGFzdENhY2hlLT5scnVDb3VudCkKLSAgICAg
ICAgewotICAgICAgICAgICAgbGFzdENhY2hlID0gJm1WZXJ0ZXhEZWNsQ2FjaGVbaV07Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbiAhPSBO
VUxMKQotICAgIHsKLSAgICAgICAgbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbi0+UmVsZWFz
ZSgpOwotICAgICAgICBsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uID0gTlVMTDsKLSAgICAg
ICAgLy8gbUxhc3RTZXRWRGVjbCBpcyBzZXQgdG8gdGhlIHJlcGxhY2VtZW50LCBzbyB3ZSBkb24n
dCBoYXZlIHRvIHdvcnJ5Ci0gICAgICAgIC8vIGFib3V0IGl0LgotICAgIH0KLQotICAgIG1lbWNw
eShsYXN0Q2FjaGUtPmNhY2hlZEVsZW1lbnRzLCBlbGVtZW50cywgKGVsZW1lbnQgLSBlbGVtZW50
cykgKiBzaXplb2YoRDNEVkVSVEVYRUxFTUVOVDkpKTsKLSAgICBkZXZpY2UtPkNyZWF0ZVZlcnRl
eERlY2xhcmF0aW9uKGVsZW1lbnRzLCAmbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbik7Ci0g
ICAgZGV2aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbihsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0
aW9uKTsKLSAgICBtTGFzdFNldFZEZWNsID0gbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbjsK
LSAgICBsYXN0Q2FjaGUtPmxydUNvdW50ID0gKyttTWF4THJ1OwotCi0gICAgcmV0dXJuIEdMX05P
X0VSUk9SOwotfQotCi12b2lkIFZlcnRleERlY2xhcmF0aW9uQ2FjaGU6Om1hcmtTdGF0ZURpcnR5
KCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGkr
KykKLSAgICB7Ci0gICAgICAgIG1BcHBsaWVkVkJzW2ldLnNlcmlhbCA9IDA7Ci0gICAgfQotCi0g
ICAgbUxhc3RTZXRWRGVjbCA9IE5VTEw7Ci0gICAgbUluc3RhbmNpbmdFbmFibGVkID0gdHJ1ZTsg
ICAvLyBGb3JjZXMgaXQgdG8gYmUgZGlzYWJsZWQgd2hlbiBub3QgdXNlZAotfQotCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1Zl
cnRleERlY2xhcmF0aW9uQ2FjaGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvVmVydGV4RGVjbGFyYXRpb25DYWNoZS5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAzZmMwMjRhOWJhYjQ4YjE5YzA2YWI5NzU3MGU4YjVkNTQ4NzEzMTg3Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGVjbGFyYXRpb25DYWNo
ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykg
MjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFZl
cnRleERlY2xhcmF0aW9uQ2FjaGUuaDogRGVmaW5lcyBhIGhlbHBlciBjbGFzcyB0byBjb25zdHJ1
Y3QgYW5kIGNhY2hlIHZlcnRleCBkZWNsYXJhdGlvbnMuCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JF
TkRFUkVSX1ZFUlRFWERFQ0xBUkFUSU9OQ0FDSEVfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1JFTkRF
UkVSX1ZFUlRFWERFQ0xBUkFUSU9OQ0FDSEVfSF8KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9WZXJ0ZXhEYXRhTWFuYWdlci5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLWNsYXNzIFZlcnRl
eERhdGFNYW5hZ2VyOwotfQotCi1uYW1lc3BhY2UgcngKLXsKLQotY2xhc3MgVmVydGV4RGVjbGFy
YXRpb25DYWNoZQotewotICBwdWJsaWM6Ci0gICAgVmVydGV4RGVjbGFyYXRpb25DYWNoZSgpOwot
ICAgIH5WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKCk7Ci0KLSAgICBHTGVudW0gYXBwbHlEZWNsYXJh
dGlvbihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0cmli
dXRlc1tdLCBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgR0xzaXplaSBpbnN0YW5j
ZXMsIEdMc2l6ZWkgKnJlcGVhdERyYXcpOwotCi0gICAgdm9pZCBtYXJrU3RhdGVEaXJ0eSgpOwot
Ci0gIHByaXZhdGU6Ci0gICAgVUlOVCBtTWF4THJ1OwotCi0gICAgZW51bSB7IE5VTV9WRVJURVhf
REVDTF9DQUNIRV9FTlRSSUVTID0gMzIgfTsKLQotICAgIHN0cnVjdCBWQkRhdGEKLSAgICB7Ci0g
ICAgICAgIHVuc2lnbmVkIGludCBzZXJpYWw7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzdHJpZGU7
Ci0gICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQ7Ci0gICAgfTsKLQotICAgIFZCRGF0YSBtQXBw
bGllZFZCc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKLSAgICBJRGlyZWN0M0RWZXJ0ZXhEZWNs
YXJhdGlvbjkgKm1MYXN0U2V0VkRlY2w7Ci0gICAgYm9vbCBtSW5zdGFuY2luZ0VuYWJsZWQ7Ci0K
LSAgICBzdHJ1Y3QgVmVydGV4RGVjbENhY2hlRW50cnkKLSAgICB7Ci0gICAgICAgIEQzRFZFUlRF
WEVMRU1FTlQ5IGNhY2hlZEVsZW1lbnRzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlMgKyAxXTsKLSAg
ICAgICAgVUlOVCBscnVDb3VudDsKLSAgICAgICAgSURpcmVjdDNEVmVydGV4RGVjbGFyYXRpb245
ICp2ZXJ0ZXhEZWNsYXJhdGlvbjsKLSAgICB9IG1WZXJ0ZXhEZWNsQ2FjaGVbTlVNX1ZFUlRFWF9E
RUNMX0NBQ0hFX0VOVFJJRVNdOwotfTsKLQotfQotCi0jZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRF
UkVSX1ZFUlRFWERFQ0xBUkFUSU9OQ0FDSEVfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvQnVmZmVyU3RvcmFnZTExLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
QnVmZmVyU3RvcmFnZTExLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMWQ1YjhiODg2OGVjYjhmOGU3ZjYyNjFk
MGUyOTFjMGQ1MWZjNWI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9CdWZmZXJTdG9yYWdlMTEuY3BwCkBAIC0w
LDAgKzEsMzY2IEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisv
LyBCdWZmZXJTdG9yYWdlMTEuY3BwIERlZmluZXMgdGhlIEJ1ZmZlclN0b3JhZ2UxMSBjbGFzcy4K
KworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9CdWZmZXJTdG9yYWdlMTEuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9SZW5kZXJlcjExLmgiCisKK25hbWVzcGFjZSByeAoreworCitCdWZmZXJTdG9yYWdl
MTE6OkJ1ZmZlclN0b3JhZ2UxMShSZW5kZXJlcjExICpyZW5kZXJlcikKK3sKKyAgICBtUmVuZGVy
ZXIgPSByZW5kZXJlcjsKKworICAgIG1TdGFnaW5nQnVmZmVyID0gTlVMTDsKKyAgICBtU3RhZ2lu
Z0J1ZmZlclNpemUgPSAwOworCisgICAgbVNpemUgPSAwOworCisgICAgbVJlc29sdmVkRGF0YSA9
IE5VTEw7CisgICAgbVJlc29sdmVkRGF0YVNpemUgPSAwOworICAgIG1SZXNvbHZlZERhdGFWYWxp
ZCA9IGZhbHNlOworCisgICAgbVJlYWRVc2FnZUNvdW50ID0gMDsKKyAgICBtV3JpdGVVc2FnZUNv
dW50ID0gMDsKK30KKworQnVmZmVyU3RvcmFnZTExOjp+QnVmZmVyU3RvcmFnZTExKCkKK3sKKyAg
ICBTYWZlUmVsZWFzZShtU3RhZ2luZ0J1ZmZlcik7CisKKyAgICBpZiAobVJlc29sdmVkRGF0YSkK
KyAgICB7CisgICAgICAgIGZyZWUobVJlc29sdmVkRGF0YSk7CisgICAgICAgIG1SZXNvbHZlZERh
dGEgPSBOVUxMOworICAgIH0KKworICAgIGZvciAoYXV0byBpdCA9IG1EaXJlY3RCdWZmZXJzLmJl
Z2luKCk7IGl0ICE9IG1EaXJlY3RCdWZmZXJzLmVuZCgpOyBpdCsrKQorICAgIHsKKyAgICAgICAg
U2FmZURlbGV0ZShpdC0+c2Vjb25kKTsKKyAgICB9Cit9CisKK0J1ZmZlclN0b3JhZ2UxMSAqQnVm
ZmVyU3RvcmFnZTExOjptYWtlQnVmZmVyU3RvcmFnZTExKEJ1ZmZlclN0b3JhZ2UgKmJ1ZmZlclN0
b3JhZ2UpCit7CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoQnVmZmVyU3RvcmFnZTExKiwg
YnVmZmVyU3RvcmFnZSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxCdWZmZXJTdG9yYWdlMTEq
PihidWZmZXJTdG9yYWdlKTsKK30KKwordm9pZCAqQnVmZmVyU3RvcmFnZTExOjpnZXREYXRhKCkK
K3sKKyAgICBBU1NFUlQobVN0YWdpbmdCdWZmZXIpOworCisgICAgaWYgKCFtUmVzb2x2ZWREYXRh
VmFsaWQpCisgICAgeworICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+
Z2V0RGV2aWNlKCk7CisgICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQgPSBtUmVu
ZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQ7CisKKyAg
ICAgICAgaWYgKCFtUmVzb2x2ZWREYXRhIHx8IG1SZXNvbHZlZERhdGFTaXplIDwgbVN0YWdpbmdC
dWZmZXJTaXplKQorICAgICAgICB7CisgICAgICAgICAgICBmcmVlKG1SZXNvbHZlZERhdGEpOwor
ICAgICAgICAgICAgbVJlc29sdmVkRGF0YSA9IG1hbGxvYyhtU2l6ZSk7CisgICAgICAgICAgICBt
UmVzb2x2ZWREYXRhU2l6ZSA9IG1TaXplOworICAgICAgICB9CisKKyAgICAgICAgRDNEMTFfTUFQ
UEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOworICAgICAgICByZXN1bHQgPSBjb250ZXh0
LT5NYXAobVN0YWdpbmdCdWZmZXIsIDAsIEQzRDExX01BUF9SRUFELCAwLCAmbWFwcGVkUmVzb3Vy
Y2UpOworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgKHZvaWQqKU5VTEwpOworICAgICAg
ICB9CisKKyAgICAgICAgbWVtY3B5KG1SZXNvbHZlZERhdGEsIG1hcHBlZFJlc291cmNlLnBEYXRh
LCBtU2l6ZSk7CisKKyAgICAgICAgY29udGV4dC0+VW5tYXAobVN0YWdpbmdCdWZmZXIsIDApOwor
CisgICAgICAgIG1SZXNvbHZlZERhdGFWYWxpZCA9IHRydWU7CisgICAgfQorCisgICAgbVJlYWRV
c2FnZUNvdW50ID0gMDsKKworICAgIHJldHVybiBtUmVzb2x2ZWREYXRhOworfQorCit2b2lkIEJ1
ZmZlclN0b3JhZ2UxMTo6c2V0RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6
ZSwgdW5zaWduZWQgaW50IG9mZnNldCkKK3sKKyAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1S
ZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9
IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworICAgIEhSRVNVTFQgcmVzdWx0OworCisg
ICAgY29uc3QgdW5zaWduZWQgaW50IHJlcXVpcmVkU3RhZ2luZ0J1ZmZlclNpemUgPSBzaXplICsg
b2Zmc2V0OworICAgIGNvbnN0IGJvb2wgY3JlYXRlU3RhZ2luZ0J1ZmZlciA9ICFtU3RhZ2luZ0J1
ZmZlciB8fCBtU3RhZ2luZ0J1ZmZlclNpemUgPCByZXF1aXJlZFN0YWdpbmdCdWZmZXJTaXplOwor
CisgICAgaWYgKGNyZWF0ZVN0YWdpbmdCdWZmZXIpCisgICAgeworICAgICAgICBEM0QxMV9CVUZG
RVJfREVTQyBidWZmZXJEZXNjOworICAgICAgICBidWZmZXJEZXNjLkJ5dGVXaWR0aCA9IHJlcXVp
cmVkU3RhZ2luZ0J1ZmZlclNpemU7CisgICAgICAgIGJ1ZmZlckRlc2MuVXNhZ2UgPSBEM0QxMV9V
U0FHRV9TVEFHSU5HOworICAgICAgICBidWZmZXJEZXNjLkJpbmRGbGFncyA9IDA7CisgICAgICAg
IGJ1ZmZlckRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUNDRVNTX1JFQUQgfCBEM0Qx
MV9DUFVfQUNDRVNTX1dSSVRFOworICAgICAgICBidWZmZXJEZXNjLk1pc2NGbGFncyA9IDA7Cisg
ICAgICAgIGJ1ZmZlckRlc2MuU3RydWN0dXJlQnl0ZVN0cmlkZSA9IDA7CisKKyAgICAgICAgSFJF
U1VMVCByZXN1bHQ7CisgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5n
ZXREZXZpY2UoKTsKKyAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IG1SZW5k
ZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworICAgICAgICBJRDNEMTFCdWZmZXIgKm5ld1N0YWdp
bmdCdWZmZXI7CisKKyAgICAgICAgaWYgKGRhdGEgJiYgb2Zmc2V0ID09IDApCisgICAgICAgIHsK
KyAgICAgICAgICAgIEQzRDExX1NVQlJFU09VUkNFX0RBVEEgaW5pdGlhbERhdGE7CisgICAgICAg
ICAgICBpbml0aWFsRGF0YS5wU3lzTWVtID0gZGF0YTsKKyAgICAgICAgICAgIGluaXRpYWxEYXRh
LlN5c01lbVBpdGNoID0gcmVxdWlyZWRTdGFnaW5nQnVmZmVyU2l6ZTsKKyAgICAgICAgICAgIGlu
aXRpYWxEYXRhLlN5c01lbVNsaWNlUGl0Y2ggPSAwOworCisgICAgICAgICAgICByZXN1bHQgPSBk
ZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmYnVmZmVyRGVzYywgJmluaXRpYWxEYXRhLCAmbmV3U3RhZ2lu
Z0J1ZmZlcik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmYnVmZmVyRGVzYywgTlVMTCwgJm5ld1N0
YWdpbmdCdWZmZXIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQor
ICAgICAgICB7CisgICAgICAgICAgICBtU3RhZ2luZ0J1ZmZlclNpemUgPSAwOworICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorCisgICAg
ICAgIG1TdGFnaW5nQnVmZmVyU2l6ZSA9IHJlcXVpcmVkU3RhZ2luZ0J1ZmZlclNpemU7CisKKyAg
ICAgICAgaWYgKG1TdGFnaW5nQnVmZmVyICYmIG9mZnNldCA+IDApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIC8vIElmIG9mZnNldCBpcyBncmVhdGVyIHRoYW4gemVybyBhbmQgdGhlIGJ1ZmZlciBp
cyBub24tbnVsbCwgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgZGF0YSBmcm9tCisgICAgICAgICAgICAv
LyB0aGUgb2xkIGJ1ZmZlciB1cCB0byBvZmZzZXQKKyAgICAgICAgICAgIEQzRDExX0JPWCBzcmNC
b3g7CisgICAgICAgICAgICBzcmNCb3gubGVmdCA9IDA7CisgICAgICAgICAgICBzcmNCb3gucmln
aHQgPSBzdGQ6Om1pbihvZmZzZXQsIHJlcXVpcmVkU3RhZ2luZ0J1ZmZlclNpemUpOworICAgICAg
ICAgICAgc3JjQm94LnRvcCA9IDA7CisgICAgICAgICAgICBzcmNCb3guYm90dG9tID0gMTsKKyAg
ICAgICAgICAgIHNyY0JveC5mcm9udCA9IDA7CisgICAgICAgICAgICBzcmNCb3guYmFjayA9IDE7
CisKKyAgICAgICAgICAgIGNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihuZXdTdGFnaW5n
QnVmZmVyLCAwLCAwLCAwLCAwLCBtU3RhZ2luZ0J1ZmZlciwgMCwgJnNyY0JveCk7CisgICAgICAg
IH0KKworICAgICAgICBTYWZlUmVsZWFzZShtU3RhZ2luZ0J1ZmZlcik7CisgICAgICAgIG1TdGFn
aW5nQnVmZmVyID0gbmV3U3RhZ2luZ0J1ZmZlcjsKKyAgICB9CisKKyAgICBpZiAoZGF0YSAmJiAo
b2Zmc2V0ICE9IDAgfHwgIWNyZWF0ZVN0YWdpbmdCdWZmZXIpKQorICAgIHsKKyAgICAgICAgRDNE
MTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOworICAgICAgICByZXN1bHQgPSBj
b250ZXh0LT5NYXAobVN0YWdpbmdCdWZmZXIsIDAsIEQzRDExX01BUF9XUklURSwgMCwgJm1hcHBl
ZFJlc291cmNlKTsKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisK
KyAgICAgICAgdW5zaWduZWQgY2hhciAqb2Zmc2V0QnVmZmVyUG9pbnRlciA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dW5zaWduZWQgY2hhciAqPihtYXBwZWRSZXNvdXJjZS5wRGF0YSkgKyBvZmZzZXQ7Cisg
ICAgICAgIG1lbWNweShvZmZzZXRCdWZmZXJQb2ludGVyLCBkYXRhLCBzaXplKTsKKworICAgICAg
ICBjb250ZXh0LT5Vbm1hcChtU3RhZ2luZ0J1ZmZlciwgMCk7CisgICAgfQorCisgICAgZm9yIChh
dXRvIGl0ID0gbURpcmVjdEJ1ZmZlcnMuYmVnaW4oKTsgaXQgIT0gbURpcmVjdEJ1ZmZlcnMuZW5k
KCk7IGl0KyspCisgICAgeworICAgICAgICBpdC0+c2Vjb25kLT5tYXJrRGlydHkoKTsKKyAgICB9
CisKKyAgICBtU2l6ZSA9IHN0ZDo6bWF4KG1TaXplLCByZXF1aXJlZFN0YWdpbmdCdWZmZXJTaXpl
KTsKKyAgICBtV3JpdGVVc2FnZUNvdW50ID0gMDsKKworICAgIG1SZXNvbHZlZERhdGFWYWxpZCA9
IGZhbHNlOworfQorCit2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6Y29weURhdGEoQnVmZmVyU3RvcmFn
ZSogc291cmNlU3RvcmFnZSwgdW5zaWduZWQgaW50IHNpemUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZU9mZnNldCwgdW5zaWduZWQgaW50IGRlc3RP
ZmZzZXQpCit7CisgICAgQnVmZmVyU3RvcmFnZTExKiBzb3VyY2UgPSBtYWtlQnVmZmVyU3RvcmFn
ZTExKHNvdXJjZVN0b3JhZ2UpOworICAgIGlmIChzb3VyY2UpCisgICAgeworICAgICAgICBJRDNE
MTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7
CisKKyAgICAgICAgRDNEMTFfQk9YIHNyY0JveDsKKyAgICAgICAgc3JjQm94LmxlZnQgPSBzb3Vy
Y2VPZmZzZXQ7CisgICAgICAgIHNyY0JveC5yaWdodCA9IHNvdXJjZU9mZnNldCArIHNpemU7Cisg
ICAgICAgIHNyY0JveC50b3AgPSAwOworICAgICAgICBzcmNCb3guYm90dG9tID0gMTsKKyAgICAg
ICAgc3JjQm94LmZyb250ID0gMDsKKyAgICAgICAgc3JjQm94LmJhY2sgPSAxOworCisgICAgICAg
IEFTU0VSVChtU3RhZ2luZ0J1ZmZlciAmJiBzb3VyY2UtPm1TdGFnaW5nQnVmZmVyKTsKKyAgICAg
ICAgY29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKG1TdGFnaW5nQnVmZmVyLCAwLCBkZXN0
T2Zmc2V0LCAwLCAwLCBzb3VyY2UtPm1TdGFnaW5nQnVmZmVyLCAwLCAmc3JjQm94KTsKKyAgICB9
Cit9CisKK3ZvaWQgQnVmZmVyU3RvcmFnZTExOjpjbGVhcigpCit7CisgICAgbVJlc29sdmVkRGF0
YVZhbGlkID0gZmFsc2U7CisgICAgbVNpemUgPSAwOworfQorCit1bnNpZ25lZCBpbnQgQnVmZmVy
U3RvcmFnZTExOjpnZXRTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVNpemU7Cit9CisKK2Jv
b2wgQnVmZmVyU3RvcmFnZTExOjpzdXBwb3J0c0RpcmVjdEJpbmRpbmcoKSBjb25zdAoreworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6bWFya0J1ZmZlclVzYWdl
KCkKK3sKKyAgICBtUmVhZFVzYWdlQ291bnQrKzsKKyAgICBtV3JpdGVVc2FnZUNvdW50Kys7CisK
KyAgICBjb25zdCB1bnNpZ25lZCBpbnQgdXNhZ2VMaW1pdCA9IDU7CisKKyAgICBpZiAobVJlYWRV
c2FnZUNvdW50ID4gdXNhZ2VMaW1pdCAmJiBtUmVzb2x2ZWREYXRhKQorICAgIHsKKyAgICAgICAg
ZnJlZShtUmVzb2x2ZWREYXRhKTsKKyAgICAgICAgbVJlc29sdmVkRGF0YSA9IE5VTEw7CisgICAg
ICAgIG1SZXNvbHZlZERhdGFTaXplID0gMDsKKyAgICAgICAgbVJlc29sdmVkRGF0YVZhbGlkID0g
ZmFsc2U7CisgICAgfQorfQorCitJRDNEMTFCdWZmZXIgKkJ1ZmZlclN0b3JhZ2UxMTo6Z2V0QnVm
ZmVyKEJ1ZmZlclVzYWdlIHVzYWdlKQoreworICAgIG1hcmtCdWZmZXJVc2FnZSgpOworCisgICAg
RGlyZWN0QnVmZmVyU3RvcmFnZTExICpkaXJlY3RCdWZmZXIgPSBOVUxMOworCisgICAgYXV0byBk
aXJlY3RCdWZmZXJJdCA9IG1EaXJlY3RCdWZmZXJzLmZpbmQodXNhZ2UpOworICAgIGlmIChkaXJl
Y3RCdWZmZXJJdCAhPSBtRGlyZWN0QnVmZmVycy5lbmQoKSkKKyAgICB7CisgICAgICAgIGRpcmVj
dEJ1ZmZlciA9IGRpcmVjdEJ1ZmZlckl0LT5zZWNvbmQ7CisgICAgfQorCisgICAgaWYgKGRpcmVj
dEJ1ZmZlcikKKyAgICB7CisgICAgICAgIGlmIChkaXJlY3RCdWZmZXItPmlzRGlydHkoKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgLy8gaWYgdXBkYXRlRnJvbVN0YWdpbmdCdWZmZXIgcmV0dXJu
cyB0cnVlLCB0aGUgRDNEIGJ1ZmZlciBoYXMgYmVlbiByZWNyZWF0ZWQKKyAgICAgICAgICAgIC8v
IGFuZCB3ZSBzaG91bGQgdXBkYXRlIG91ciBzZXJpYWwKKyAgICAgICAgICAgIGlmIChkaXJlY3RC
dWZmZXItPnVwZGF0ZUZyb21TdGFnaW5nQnVmZmVyKG1TdGFnaW5nQnVmZmVyLCBtU2l6ZSwgMCkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdXBkYXRlU2VyaWFsKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gYnVm
ZmVyIGlzIG5vdCBhbGxvY2F0ZWQsIGNyZWF0ZSBpdAorICAgICAgICBkaXJlY3RCdWZmZXIgPSBu
ZXcgRGlyZWN0QnVmZmVyU3RvcmFnZTExKG1SZW5kZXJlciwgdXNhZ2UpOworICAgICAgICBkaXJl
Y3RCdWZmZXItPnVwZGF0ZUZyb21TdGFnaW5nQnVmZmVyKG1TdGFnaW5nQnVmZmVyLCBtU2l6ZSwg
MCk7CisKKyAgICAgICAgbURpcmVjdEJ1ZmZlcnMuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKHVzYWdl
LCBkaXJlY3RCdWZmZXIpKTsKKyAgICAgICAgdXBkYXRlU2VyaWFsKCk7CisgICAgfQorCisgICAg
cmV0dXJuIGRpcmVjdEJ1ZmZlci0+Z2V0RDNEQnVmZmVyKCk7Cit9CisKK0RpcmVjdEJ1ZmZlclN0
b3JhZ2UxMTo6RGlyZWN0QnVmZmVyU3RvcmFnZTExKFJlbmRlcmVyMTEgKnJlbmRlcmVyLCBCdWZm
ZXJVc2FnZSB1c2FnZSkKKyAgICA6IG1SZW5kZXJlcihyZW5kZXJlciksCisgICAgICBtVXNhZ2Uo
dXNhZ2UpLAorICAgICAgbURpcmVjdEJ1ZmZlcihOVUxMKSwKKyAgICAgIG1CdWZmZXJTaXplKDAp
LAorICAgICAgbURpcnR5KGZhbHNlKQoreworfQorCitEaXJlY3RCdWZmZXJTdG9yYWdlMTE6On5E
aXJlY3RCdWZmZXJTdG9yYWdlMTEoKQoreworICAgIFNhZmVSZWxlYXNlKG1EaXJlY3RCdWZmZXIp
OworfQorCitCdWZmZXJVc2FnZSBEaXJlY3RCdWZmZXJTdG9yYWdlMTE6OmdldFVzYWdlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbVVzYWdlOworfQorCisvLyBSZXR1cm5zIHRydWUgaWYgaXQgcmVj
cmVhdGVzIHRoZSBkaXJlY3QgYnVmZmVyCitib29sIERpcmVjdEJ1ZmZlclN0b3JhZ2UxMTo6dXBk
YXRlRnJvbVN0YWdpbmdCdWZmZXIoSUQzRDExQnVmZmVyICpzdGFnaW5nQnVmZmVyLCBzaXplX3Qg
c2l6ZSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5k
ZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IG1S
ZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworCisgICAgLy8gdW51c2VkIGZvciBub3cKKyAg
ICBBU1NFUlQob2Zmc2V0ID09IDApOworCisgICAgdW5zaWduZWQgaW50IHJlcXVpcmVkQnVmZmVy
U2l6ZSA9IHNpemUgKyBvZmZzZXQ7CisgICAgYm9vbCBjcmVhdGVCdWZmZXIgPSAhbURpcmVjdEJ1
ZmZlciB8fCBtQnVmZmVyU2l6ZSA8IHJlcXVpcmVkQnVmZmVyU2l6ZTsKKworICAgIC8vIChSZSlp
bml0aWFsaXplIEQzRCBidWZmZXIgaWYgbmVlZGVkCisgICAgaWYgKGNyZWF0ZUJ1ZmZlcikKKyAg
ICB7CisgICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIGJ1ZmZlckRlc2M7CisgICAgICAgIGZpbGxC
dWZmZXJEZXNjKCZidWZmZXJEZXNjLCBtUmVuZGVyZXIsIG1Vc2FnZSwgcmVxdWlyZWRCdWZmZXJT
aXplKTsKKworICAgICAgICBJRDNEMTFCdWZmZXIgKm5ld0J1ZmZlcjsKKyAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmYnVmZmVyRGVzYywgTlVMTCwgJm5ld0J1
ZmZlcik7CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIE5vIGxvbmdlciBuZWVkIHRoZSBvbGQgYnVmZmVyCisgICAgICAgIFNh
ZmVSZWxlYXNlKG1EaXJlY3RCdWZmZXIpOworICAgICAgICBtRGlyZWN0QnVmZmVyID0gbmV3QnVm
ZmVyOworCisgICAgICAgIG1CdWZmZXJTaXplID0gYnVmZmVyRGVzYy5CeXRlV2lkdGg7CisgICAg
fQorCisgICAgLy8gQ29weSBkYXRhIHZpYSBzdGFnaW5nIGJ1ZmZlcgorICAgIEQzRDExX0JPWCBz
cmNCb3g7CisgICAgc3JjQm94LmxlZnQgPSAwOworICAgIHNyY0JveC5yaWdodCA9IHNpemU7Cisg
ICAgc3JjQm94LnRvcCA9IDA7CisgICAgc3JjQm94LmJvdHRvbSA9IDE7CisgICAgc3JjQm94LmZy
b250ID0gMDsKKyAgICBzcmNCb3guYmFjayA9IDE7CisKKyAgICBjb250ZXh0LT5Db3B5U3VicmVz
b3VyY2VSZWdpb24obURpcmVjdEJ1ZmZlciwgMCwgb2Zmc2V0LCAwLCAwLCBzdGFnaW5nQnVmZmVy
LCAwLCAmc3JjQm94KTsKKworICAgIG1EaXJ0eSA9IGZhbHNlOworCisgICAgcmV0dXJuIGNyZWF0
ZUJ1ZmZlcjsKK30KKwordm9pZCBEaXJlY3RCdWZmZXJTdG9yYWdlMTE6OmZpbGxCdWZmZXJEZXNj
KEQzRDExX0JVRkZFUl9ERVNDKiBidWZmZXJEZXNjLCBSZW5kZXJlciAqcmVuZGVyZXIsIEJ1ZmZl
clVzYWdlIHVzYWdlLCB1bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSkKK3sKKyAgICBidWZmZXJEZXNj
LT5CeXRlV2lkdGggPSBidWZmZXJTaXplOworICAgIGJ1ZmZlckRlc2MtPk1pc2NGbGFncyA9IDA7
CisgICAgYnVmZmVyRGVzYy0+U3RydWN0dXJlQnl0ZVN0cmlkZSA9IDA7CisKKyAgICBzd2l0Y2gg
KHVzYWdlKQorICAgIHsKKyAgICAgIGNhc2UgQlVGRkVSX1VTQUdFX1ZFUlRFWDoKKyAgICAgICAg
YnVmZmVyRGVzYy0+VXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBidWZmZXJE
ZXNjLT5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1ZFUlRFWF9CVUZGRVI7CisgICAgICAgIGJ1ZmZl
ckRlc2MtPkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2Ug
QlVGRkVSX1VTQUdFX0lOREVYOgorICAgICAgICBidWZmZXJEZXNjLT5Vc2FnZSA9IEQzRDExX1VT
QUdFX0RFRkFVTFQ7CisgICAgICAgIGJ1ZmZlckRlc2MtPkJpbmRGbGFncyA9IEQzRDExX0JJTkRf
SU5ERVhfQlVGRkVSOworICAgICAgICBidWZmZXJEZXNjLT5DUFVBY2Nlc3NGbGFncyA9IDA7Cisg
ICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICB9Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkMTEvQnVmZmVyU3RvcmFnZTExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0J1ZmZlclN0b3JhZ2UxMS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmE2YWZhZmUxYjQ0N2U3N2ExZDJhNmUyNjU5NWZjNzYyMmQ2MDZkYjIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL0J1ZmZlclN0b3JhZ2UxMS5oCkBAIC0wLDAgKzEsOTIgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisvLyBCdWZmZXJTdG9yYWdlMTEuaCBEZWZpbmVzIHRoZSBCdWZmZXJTdG9yYWdlMTEgY2xh
c3MuCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0JVRkZFUlNUT1JBR0UxMV9IXworI2Rl
ZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfQlVGRkVSU1RPUkFHRTExX0hfCisKKyNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5oIgorCituYW1lc3BhY2UgcngKK3sKK2Ns
YXNzIFJlbmRlcmVyOworY2xhc3MgUmVuZGVyZXIxMTsKK2NsYXNzIERpcmVjdEJ1ZmZlclN0b3Jh
Z2UxMTsKKworZW51bSBCdWZmZXJVc2FnZQoreworICAgIEJVRkZFUl9VU0FHRV9WRVJURVgsCisg
ICAgQlVGRkVSX1VTQUdFX0lOREVYLAorfTsKKworY2xhc3MgQnVmZmVyU3RvcmFnZTExIDogcHVi
bGljIEJ1ZmZlclN0b3JhZ2UKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IEJ1ZmZlclN0b3Jh
Z2UxMShSZW5kZXJlcjExICpyZW5kZXJlcik7CisgICAgdmlydHVhbCB+QnVmZmVyU3RvcmFnZTEx
KCk7CisKKyAgICBzdGF0aWMgQnVmZmVyU3RvcmFnZTExICptYWtlQnVmZmVyU3RvcmFnZTExKEJ1
ZmZlclN0b3JhZ2UgKmJ1ZmZlclN0b3JhZ2UpOworCisgICAgdmlydHVhbCB2b2lkICpnZXREYXRh
KCk7CisgICAgdmlydHVhbCB2b2lkIHNldERhdGEoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQg
aW50IHNpemUsIHVuc2lnbmVkIGludCBvZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCBjb3B5RGF0
YShCdWZmZXJTdG9yYWdlKiBzb3VyY2VTdG9yYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZU9mZnNldCwgdW5zaWduZWQg
aW50IGRlc3RPZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpOworICAgIHZpcnR1YWwg
dW5zaWduZWQgaW50IGdldFNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNE
aXJlY3RCaW5kaW5nKCkgY29uc3Q7CisKKyAgICBJRDNEMTFCdWZmZXIgKmdldEJ1ZmZlcihCdWZm
ZXJVc2FnZSB1c2FnZSk7CisKKyAgcHJpdmF0ZToKKyAgICBSZW5kZXJlcjExICptUmVuZGVyZXI7
CisKKyAgICBJRDNEMTFCdWZmZXIgKm1TdGFnaW5nQnVmZmVyOworICAgIHVuc2lnbmVkIGludCBt
U3RhZ2luZ0J1ZmZlclNpemU7CisKKyAgICBzdGQ6Om1hcDxCdWZmZXJVc2FnZSwgRGlyZWN0QnVm
ZmVyU3RvcmFnZTExKj4gbURpcmVjdEJ1ZmZlcnM7CisKKyAgICB1bnNpZ25lZCBpbnQgbVNpemU7
CisKKyAgICB2b2lkICptUmVzb2x2ZWREYXRhOworICAgIHVuc2lnbmVkIGludCBtUmVzb2x2ZWRE
YXRhU2l6ZTsKKyAgICBib29sIG1SZXNvbHZlZERhdGFWYWxpZDsKKworICAgIHVuc2lnbmVkIGlu
dCBtUmVhZFVzYWdlQ291bnQ7CisgICAgdW5zaWduZWQgaW50IG1Xcml0ZVVzYWdlQ291bnQ7CisK
KyAgICB2b2lkIG1hcmtCdWZmZXJVc2FnZSgpOworfTsKKworLy8gRWFjaCBpbnN0YW5jZSBvZiBC
dWZmZXJTdG9yYWdlRDNEQnVmZmVyMTEgaXMgc3BlY2lhbGl6ZWQgZm9yIGEgY2xhc3Mgb2YgRDNE
IGJpbmRpbmcgcG9pbnRzCisvLyAtIHZlcnRleCBidWZmZXJzCisvLyAtIGluZGV4IGJ1ZmZlcnMK
K2NsYXNzIERpcmVjdEJ1ZmZlclN0b3JhZ2UxMQoreworICBwdWJsaWM6CisgICAgRGlyZWN0QnVm
ZmVyU3RvcmFnZTExKFJlbmRlcmVyMTEgKnJlbmRlcmVyLCBCdWZmZXJVc2FnZSB1c2FnZSk7Cisg
ICAgfkRpcmVjdEJ1ZmZlclN0b3JhZ2UxMSgpOworCisgICAgQnVmZmVyVXNhZ2UgZ2V0VXNhZ2Uo
KSBjb25zdDsKKyAgICBib29sIHVwZGF0ZUZyb21TdGFnaW5nQnVmZmVyKElEM0QxMUJ1ZmZlciAq
c3RhZ2luZ0J1ZmZlciwgc2l6ZV90IHNpemUsIHNpemVfdCBvZmZzZXQpOworCisgICAgSUQzRDEx
QnVmZmVyICpnZXREM0RCdWZmZXIoKSB7IHJldHVybiBtRGlyZWN0QnVmZmVyOyB9CisgICAgYm9v
bCBpc0RpcnR5KCkgY29uc3QgeyByZXR1cm4gbURpcnR5OyB9CisgICAgdm9pZCBtYXJrRGlydHko
KSB7IG1EaXJ0eSA9IHRydWU7IH0KKworICBwcml2YXRlOgorICAgIFJlbmRlcmVyMTEgKm1SZW5k
ZXJlcjsKKyAgICBjb25zdCBCdWZmZXJVc2FnZSBtVXNhZ2U7CisgICAgSUQzRDExQnVmZmVyICpt
RGlyZWN0QnVmZmVyOworICAgIHNpemVfdCBtQnVmZmVyU2l6ZTsKKyAgICBib29sIG1EaXJ0eTsK
KworICAgIHN0YXRpYyB2b2lkIGZpbGxCdWZmZXJEZXNjKEQzRDExX0JVRkZFUl9ERVNDKiBidWZm
ZXJEZXNjLCBSZW5kZXJlciAqcmVuZGVyZXIsIEJ1ZmZlclVzYWdlIHVzYWdlLCB1bnNpZ25lZCBp
bnQgYnVmZmVyU2l6ZSk7Cit9OworCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJf
QlVGRkVSU1RPUkFHRTExX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ZlbmNlMTEuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9GZW5jZTExLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4yYTdkNGQ0M2VmM2E3ZWRlOTVmZGZmZTRhNDRjNDIxNDljNTlmOTYyCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9GZW5jZTExLmNwcApAQCAtMCwwICsxLDEzNCBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVk
LmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworLy8gRmVuY2UxMS5jcHA6IERlZmluZXMgdGhlIHJ4OjpGZW5j
ZTExIGNsYXNzIHdoaWNoIGltcGxlbWVudHMgcng6OkZlbmNlSW1wbC4KKworI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9GZW5jZTExLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL21h
aW4uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyZXIxMS5oIgor
CituYW1lc3BhY2UgcngKK3sKKworRmVuY2UxMTo6RmVuY2UxMShyeDo6UmVuZGVyZXIxMSAqcmVu
ZGVyZXIpCit7CisgICAgbVJlbmRlcmVyID0gcmVuZGVyZXI7CisgICAgbVF1ZXJ5ID0gTlVMTDsK
K30KKworRmVuY2UxMTo6fkZlbmNlMTEoKQoreworICAgIGlmIChtUXVlcnkpCisgICAgeworICAg
ICAgICBtUXVlcnktPlJlbGVhc2UoKTsKKyAgICAgICAgbVF1ZXJ5ID0gTlVMTDsKKyAgICB9Cit9
CisKK0dMYm9vbGVhbiBGZW5jZTExOjppc0ZlbmNlKCkKK3sKKyAgICAvLyBHTF9OVl9mZW5jZSBz
cGVjOgorICAgIC8vIEEgbmFtZSByZXR1cm5lZCBieSBHZW5GZW5jZXNOViwgYnV0IG5vdCB5ZXQg
c2V0IHZpYSBTZXRGZW5jZU5WLCBpcyBub3QgdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgZmVuY2Uu
CisgICAgcmV0dXJuIG1RdWVyeSAhPSBOVUxMOworfQorCit2b2lkIEZlbmNlMTE6OnNldEZlbmNl
KEdMZW51bSBjb25kaXRpb24pCit7CisgICAgaWYgKCFtUXVlcnkpCisgICAgeworICAgICAgICBE
M0QxMV9RVUVSWV9ERVNDIHF1ZXJ5RGVzYzsKKyAgICAgICAgcXVlcnlEZXNjLlF1ZXJ5ID0gRDNE
MTFfUVVFUllfRVZFTlQ7CisgICAgICAgIHF1ZXJ5RGVzYy5NaXNjRmxhZ3MgPSAwOworCisgICAg
ICAgIGlmIChGQUlMRUQobVJlbmRlcmVyLT5nZXREZXZpY2UoKS0+Q3JlYXRlUXVlcnkoJnF1ZXJ5
RGVzYywgJm1RdWVyeSkpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgfQorCisgICAgbVJlbmRlcmVyLT5n
ZXREZXZpY2VDb250ZXh0KCktPkVuZChtUXVlcnkpOworCisgICAgc2V0Q29uZGl0aW9uKGNvbmRp
dGlvbik7CisgICAgc2V0U3RhdHVzKEdMX0ZBTFNFKTsKK30KKworR0xib29sZWFuIEZlbmNlMTE6
OnRlc3RGZW5jZSgpCit7CisgICAgaWYgKG1RdWVyeSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfVFJVRSk7CisgICAgfQor
CisgICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKS0+R2V0
RGF0YShtUXVlcnksIE5VTEwsIDAsIDApOworCisgICAgaWYgKG1SZW5kZXJlci0+aXNEZXZpY2VM
b3N0KCkpCisgICAgeworICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
R0xfVFJVRSk7CisgICAgfQorCisgICAgQVNTRVJUKHJlc3VsdCA9PSBTX09LIHx8IHJlc3VsdCA9
PSBTX0ZBTFNFKTsKKyAgICBzZXRTdGF0dXMocmVzdWx0ID09IFNfT0spOworICAgIHJldHVybiBn
ZXRTdGF0dXMoKTsKK30KKwordm9pZCBGZW5jZTExOjpmaW5pc2hGZW5jZSgpCit7CisgICAgaWYg
KG1RdWVyeSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgfQorCisgICAgd2hpbGUgKCF0ZXN0RmVuY2UoKSkKKyAgICB7
CisgICAgICAgIFNsZWVwKDApOworICAgIH0KK30KKwordm9pZCBGZW5jZTExOjpnZXRGZW5jZWl2
KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcykKK3sKKyAgICBpZiAobVF1ZXJ5ID09IE5VTEwp
CisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICB9CisKKyAgICBzd2l0Y2ggKHBuYW1lKQorICAgIHsKKyAgICAgIGNhc2UgR0xfRkVOQ0Vf
U1RBVFVTX05WOgorICAgICAgICB7CisgICAgICAgICAgICAvLyBHTF9OVl9mZW5jZSBzcGVjOgor
ICAgICAgICAgICAgLy8gT25jZSB0aGUgc3RhdHVzIG9mIGEgZmVuY2UgaGFzIGJlZW4gZmluaXNo
ZWQgKHZpYSBGaW5pc2hGZW5jZU5WKSBvciB0ZXN0ZWQgYW5kIHRoZSByZXR1cm5lZCBzdGF0dXMg
aXMgVFJVRSAodmlhIGVpdGhlciBUZXN0RmVuY2VOVgorICAgICAgICAgICAgLy8gb3IgR2V0RmVu
Y2Vpdk5WIHF1ZXJ5aW5nIHRoZSBGRU5DRV9TVEFUVVNfTlYpLCB0aGUgc3RhdHVzIHJlbWFpbnMg
VFJVRSB1bnRpbCB0aGUgbmV4dCBTZXRGZW5jZU5WIG9mIHRoZSBmZW5jZS4KKyAgICAgICAgICAg
IGlmIChnZXRTdGF0dXMoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYXJhbXNb
MF0gPSBHTF9UUlVFOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQo
KS0+R2V0RGF0YShtUXVlcnksIE5VTEwsIDAsIEQzRDExX0FTWU5DX0dFVERBVEFfRE9OT1RGTFVT
SCk7CisKKyAgICAgICAgICAgIGlmIChtUmVuZGVyZXItPmlzRGV2aWNlTG9zdCgpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9IEdMX1RSVUU7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBTX09LIHx8IHJlc3VsdCA9PSBTX0ZBTFNF
KTsKKyAgICAgICAgICAgIHNldFN0YXR1cyhyZXN1bHQgPT0gU19PSyk7CisgICAgICAgICAgICBw
YXJhbXNbMF0gPSBnZXRTdGF0dXMoKTsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgIGNhc2UgR0xfRkVOQ0VfQ09ORElUSU9OX05WOgorICAgICAgICBwYXJhbXNbMF0gPSBn
ZXRDb25kaXRpb24oKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
K30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9GZW5jZTExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ZlbmNlMTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNTM5OGJjYTE0
OTAwNjQ3YjAzZGYyN2ExMDE5MWQ5MDY5MTkxMTEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9GZW5jZTExLmgK
QEAgLTAsMCArMSwzOSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIEZlbmNlMTEuaDogRGVmaW5lcyB0
aGUgcng6OkZlbmNlMTEgY2xhc3Mgd2hpY2ggaW1wbGVtZW50cyByeDo6RmVuY2VJbXBsLgorCisj
aWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9GZW5jZTExX0hfCisjZGVmaW5lIExJQkdMRVNWMl9S
RU5ERVJFUl9GZW5jZTExX0hfCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvRmVuY2VJ
bXBsLmgiCisKK25hbWVzcGFjZSByeAoreworY2xhc3MgUmVuZGVyZXIxMTsKKworY2xhc3MgRmVu
Y2UxMSA6IHB1YmxpYyBGZW5jZUltcGwKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IEZlbmNl
MTEocng6OlJlbmRlcmVyMTEgKnJlbmRlcmVyKTsKKyAgICB2aXJ0dWFsIH5GZW5jZTExKCk7CisK
KyAgICBHTGJvb2xlYW4gaXNGZW5jZSgpOworICAgIHZvaWQgc2V0RmVuY2UoR0xlbnVtIGNvbmRp
dGlvbik7CisgICAgR0xib29sZWFuIHRlc3RGZW5jZSgpOworICAgIHZvaWQgZmluaXNoRmVuY2Uo
KTsKKyAgICB2b2lkIGdldEZlbmNlaXYoR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKTsKKwor
ICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihGZW5jZTExKTsKKworICAg
IHJ4OjpSZW5kZXJlcjExICptUmVuZGVyZXI7CisgICAgSUQzRDExUXVlcnkgKm1RdWVyeTsKK307
CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9GRU5DRTExX0hfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L0ltYWdlMTEuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9JbWFnZTExLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYjA3YjlkMTgyOGE4YjMxNmNlOGRl
YjM0YTU2NGQzNDljYjNiOGRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbWFnZTExLmNwcApAQCAtMCwwICsx
LDQ5NSBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gSW1h
Z2UxMS5oOiBJbXBsZW1lbnRzIHRoZSByeDo6SW1hZ2UxMSBjbGFzcywgd2hpY2ggYWN0cyBhcyB0
aGUgaW50ZXJmYWNlIHRvCisvLyB0aGUgYWN0dWFsIHVuZGVybHlpbmcgcmVzb3VyY2VzIG9mIGEg
VGV4dHVyZQorCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW1hZ2UxMS5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9UZXh0dXJlU3RvcmFnZTExLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1
ZmZlci5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRl
cmVyMTFfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZ2VuZXJhdGVtaXAu
aCIKKworbmFtZXNwYWNlIHJ4Cit7CisKK0ltYWdlMTE6OkltYWdlMTEoKQoreworICAgIG1TdGFn
aW5nVGV4dHVyZSA9IE5VTEw7CisgICAgbVJlbmRlcmVyID0gTlVMTDsKKyAgICBtRFhHSUZvcm1h
dCA9IERYR0lfRk9STUFUX1VOS05PV047Cit9CisKK0ltYWdlMTE6On5JbWFnZTExKCkKK3sKKyAg
ICBpZiAobVN0YWdpbmdUZXh0dXJlKQorICAgIHsKKyAgICAgICAgbVN0YWdpbmdUZXh0dXJlLT5S
ZWxlYXNlKCk7CisgICAgfQorfQorCitJbWFnZTExICpJbWFnZTExOjptYWtlSW1hZ2UxMShJbWFn
ZSAqaW1nKQoreworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKHJ4OjpJbWFnZTExKiwgaW1n
KSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHJ4OjpJbWFnZTExKj4oaW1nKTsKK30KKwordm9p
ZCBJbWFnZTExOjpnZW5lcmF0ZU1pcG1hcChJbWFnZTExICpkZXN0LCBJbWFnZTExICpzcmMpCit7
CisgICAgQVNTRVJUKHNyYy0+Z2V0RFhHSUZvcm1hdCgpID09IGRlc3QtPmdldERYR0lGb3JtYXQo
KSk7CisgICAgQVNTRVJUKHNyYy0+Z2V0V2lkdGgoKSA9PSAxIHx8IHNyYy0+Z2V0V2lkdGgoKSAv
IDIgPT0gZGVzdC0+Z2V0V2lkdGgoKSk7CisgICAgQVNTRVJUKHNyYy0+Z2V0SGVpZ2h0KCkgPT0g
MSB8fCBzcmMtPmdldEhlaWdodCgpIC8gMiA9PSBkZXN0LT5nZXRIZWlnaHQoKSk7CisKKyAgICBE
M0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgZGVzdE1hcHBlZCwgc3JjTWFwcGVkOworICAgIGRlc3Qt
Pm1hcChEM0QxMV9NQVBfV1JJVEUsICZkZXN0TWFwcGVkKTsKKyAgICBzcmMtPm1hcChEM0QxMV9N
QVBfUkVBRCwgJnNyY01hcHBlZCk7CisKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2VE
YXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oc3JjTWFwcGVkLnBE
YXRhKTsKKyAgICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5z
aWduZWQgY2hhcio+KGRlc3RNYXBwZWQucERhdGEpOworCisgICAgaWYgKHNvdXJjZURhdGEgJiYg
ZGVzdERhdGEpCisgICAgeworICAgICAgICBzd2l0Y2ggKHNyYy0+Z2V0RFhHSUZvcm1hdCgpKQor
ICAgICAgICB7CisgICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STToKKyAg
ICAgICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOgorICAgICAgICAgICAgR2Vu
ZXJhdGVNaXA8UjhHOEI4QTg+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291
cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRj
aCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX0E4X1VO
T1JNOgorICAgICAgICAgICAgR2VuZXJhdGVNaXA8QTg+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5n
ZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVz
dE1hcHBlZC5Sb3dQaXRjaCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIERY
R0lfRk9STUFUX1I4X1VOT1JNOgorICAgICAgICAgICAgR2VuZXJhdGVNaXA8Ujg+KHNyYy0+Z2V0
V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNo
LCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDoKKyAgICAgICAgICAg
IEdlbmVyYXRlTWlwPEEzMkIzMkczMlIzMkY+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWln
aHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBl
ZC5Sb3dQaXRjaCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIERYR0lfRk9S
TUFUX1IzMkczMkIzMl9GTE9BVDoKKyAgICAgICAgICAgIEdlbmVyYXRlTWlwPFIzMkczMkIzMkY+
KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVk
LlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9BVDoKKyAg
ICAgICAgICAgIEdlbmVyYXRlTWlwPEExNkIxNkcxNlIxNkY+KHNyYy0+Z2V0V2lkdGgoKSwgc3Jj
LT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwg
ZGVzdE1hcHBlZC5Sb3dQaXRjaCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNl
IERYR0lfRk9STUFUX1I4RzhfVU5PUk06CisgICAgICAgICAgICBHZW5lcmF0ZU1pcDxSOEc4Pihz
cmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5S
b3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfRkxPQVQ6CisgICAgICAgICAgICBH
ZW5lcmF0ZU1pcDxSMTZGPihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJj
ZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZf
RkxPQVQ6CisgICAgICAgICAgICBHZW5lcmF0ZU1pcDxSMTZHMTZGPihzcmMtPmdldFdpZHRoKCks
IHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERh
dGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQ6CisgICAgICAgICAgICBHZW5lcmF0ZU1pcDxSMzJG
PihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBl
ZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQ6CisgICAgICAg
ICAgICBHZW5lcmF0ZU1pcDxSMzJHMzJGPihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0
KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQu
Um93UGl0Y2gpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIGRlc3QtPnVubWFwKCk7CisgICAgICAgIHNyYy0+dW5tYXAoKTsKKyAgICB9CisKKyAg
ICBkZXN0LT5tYXJrRGlydHkoKTsKK30KKworc3RhdGljIGJvb2wgRm9ybWF0UmVxdWlyZXNJbml0
aWFsaXphdGlvbihEWEdJX0ZPUk1BVCBkeGdpRm9ybWF0LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQp
Cit7CisgICAgcmV0dXJuIChkeGdpRm9ybWF0ID09IERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JN
ICYmIGdsOjpHZXRBbHBoYVNpemUoaW50ZXJuYWxGb3JtYXQpID09IDApIHx8CisgICAgICAgICAg
IChkeGdpRm9ybWF0ID09IERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCAmJiBnbDo6R2V0
QWxwaGFTaXplKGludGVybmFsRm9ybWF0KSA9PSAwKTsKK30KKworYm9vbCBJbWFnZTExOjppc0Rp
cnR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKChtU3RhZ2luZ1RleHR1cmUgfHwgRm9ybWF0UmVx
dWlyZXNJbml0aWFsaXphdGlvbihtRFhHSUZvcm1hdCwgbUludGVybmFsRm9ybWF0KSkgJiYgbURp
cnR5KTsKK30KKworYm9vbCBJbWFnZTExOjp1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlMkQgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgVGV4dHVyZVN0b3JhZ2Ux
MV8yRCAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMV8yRDo6bWFrZVRleHR1cmVTdG9yYWdl
MTFfMkQoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAgIHJldHVybiBzdG9yYWdl
MTEtPnVwZGF0ZVN1YnJlc291cmNlTGV2ZWwoZ2V0U3RhZ2luZ1RleHR1cmUoKSwgZ2V0U3RhZ2lu
Z1N1YnJlc291cmNlKCksIGxldmVsLCAwLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0
KTsKK30KKworYm9vbCBJbWFnZTExOjp1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlQ3ViZSAqc3RvcmFnZSwgaW50IGZhY2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgVGV4dHVy
ZVN0b3JhZ2UxMV9DdWJlICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFnZTExX0N1YmU6Om1ha2VU
ZXh0dXJlU3RvcmFnZTExX0N1YmUoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAg
IHJldHVybiBzdG9yYWdlMTEtPnVwZGF0ZVN1YnJlc291cmNlTGV2ZWwoZ2V0U3RhZ2luZ1RleHR1
cmUoKSwgZ2V0U3RhZ2luZ1N1YnJlc291cmNlKCksIGxldmVsLCBmYWNlLCB4b2Zmc2V0LCB5b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0KTsKK30KKworYm9vbCBJbWFnZTExOjpyZWRlZmluZShSZW5kZXJl
ciAqcmVuZGVyZXIsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgYm9vbCBmb3JjZVJlbGVhc2UpCit7CisgICAgaWYgKG1XaWR0aCAhPSB3aWR0aCB8
fAorICAgICAgICBtSGVpZ2h0ICE9IGhlaWdodCB8fAorICAgICAgICBtSW50ZXJuYWxGb3JtYXQg
IT0gaW50ZXJuYWxmb3JtYXQgfHwKKyAgICAgICAgZm9yY2VSZWxlYXNlKQorICAgIHsKKyAgICAg
ICAgbVJlbmRlcmVyID0gUmVuZGVyZXIxMTo6bWFrZVJlbmRlcmVyMTEocmVuZGVyZXIpOworCisg
ICAgICAgIG1XaWR0aCA9IHdpZHRoOworICAgICAgICBtSGVpZ2h0ID0gaGVpZ2h0OworICAgICAg
ICBtSW50ZXJuYWxGb3JtYXQgPSBpbnRlcm5hbGZvcm1hdDsKKyAgICAgICAgLy8gY29tcHV0ZSB0
aGUgZDNkIGZvcm1hdCB0aGF0IHdpbGwgYmUgdXNlZAorICAgICAgICBtRFhHSUZvcm1hdCA9IGds
X2QzZDExOjpDb252ZXJ0VGV4dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1hdCk7CisgICAgICAgIG1B
Y3R1YWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChtRFhH
SUZvcm1hdCk7CisKKyAgICAgICAgaWYgKG1TdGFnaW5nVGV4dHVyZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgbVN0YWdpbmdUZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICBtU3RhZ2lu
Z1RleHR1cmUgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSW1hZ2UxMTo6aXNSZW5k
ZXJhYmxlRm9ybWF0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gVGV4dHVyZVN0b3JhZ2UxMTo6SXNU
ZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShtRFhHSUZvcm1hdCk7Cit9CisKK0RYR0lfRk9STUFUIElt
YWdlMTE6OmdldERYR0lGb3JtYXQoKSBjb25zdAoreworICAgIC8vIHRoaXMgc2hvdWxkIG9ubHkg
aGFwcGVuIGlmIHRoZSBpbWFnZSBoYXNuJ3QgYmVlbiByZWRlZmluZWQgZmlyc3QKKyAgICAvLyB3
aGljaCB3b3VsZCBiZSBhIGJ1ZyBieSB0aGUgY2FsbGVyCisgICAgQVNTRVJUKG1EWEdJRm9ybWF0
ICE9IERYR0lfRk9STUFUX1VOS05PV04pOworCisgICAgcmV0dXJuIG1EWEdJRm9ybWF0OworfQor
CisvLyBTdG9yZSB0aGUgcGl4ZWwgcmVjdGFuZ2xlIGRlc2lnbmF0ZWQgYnkgeG9mZnNldCx5b2Zm
c2V0LHdpZHRoLGhlaWdodCB3aXRoIHBpeGVscyBzdG9yZWQgYXMgZm9ybWF0L3R5cGUgYXQgaW5w
dXQKKy8vIGludG8gdGhlIHRhcmdldCBwaXhlbCByZWN0YW5nbGUuCit2b2lkIEltYWdlMTE6Omxv
YWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQs
IGNvbnN0IHZvaWQgKmlucHV0KQoreworICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBw
ZWRJbWFnZTsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IG1hcChEM0QxMV9NQVBfV1JJVEUsICZtYXBw
ZWRJbWFnZSk7CisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJD
b3VsZCBub3QgbWFwIGltYWdlIGZvciBsb2FkaW5nLiIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IGdsOjpDb21wdXRlUGl0Y2god2lkdGgs
IG1JbnRlcm5hbEZvcm1hdCwgdW5wYWNrQWxpZ25tZW50KTsKKyAgICBzaXplX3QgcGl4ZWxTaXpl
ID0gZDNkMTE6OkNvbXB1dGVQaXhlbFNpemVCaXRzKG1EWEdJRm9ybWF0KSAvIDg7CisgICAgdm9p
ZCogb2Zmc2V0TWFwcGVkRGF0YSA9ICh2b2lkKikoKEJZVEUgKiltYXBwZWRJbWFnZS5wRGF0YSAr
ICh5b2Zmc2V0ICogbWFwcGVkSW1hZ2UuUm93UGl0Y2ggKyB4b2Zmc2V0ICogcGl4ZWxTaXplKSk7
CisKKyAgICBzd2l0Y2ggKG1JbnRlcm5hbEZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEdMX0FM
UEhBOF9FWFQ6CisgICAgICAgIGxvYWRBbHBoYURhdGFUb05hdGl2ZSh3aWR0aCwgaGVpZ2h0LCBp
bnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEp
OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOF9FWFQ6CisgICAgICAg
IGxvYWRMdW1pbmFuY2VEYXRhVG9OYXRpdmVPckJHUkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhLCBmYWxzZSk7
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9BTFBIQTMyRl9FWFQ6CisgICAgICAgIGxv
YWRBbHBoYUZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwg
bWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOworICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMzJGX0VYVDoKKyAgICAgICAgbG9hZEx1bWluYW5jZUZs
b2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1h
Z2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOworICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfQUxQSEExNkZfRVhUOgorICAgICAgICBsb2FkQWxwaGFIYWxmRmxvYXREYXRhVG9SR0JB
KHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwg
b2Zmc2V0TWFwcGVkRGF0YSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MVU1JTkFO
Q0UxNkZfRVhUOgorICAgICAgICBsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNl
dE1hcHBlZERhdGEpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOF9B
TFBIQThfRVhUOgorICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFEYXRhVG9OYXRpdmVPckJHUkEo
d2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBv
ZmZzZXRNYXBwZWREYXRhLCBmYWxzZSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9M
VU1JTkFOQ0VfQUxQSEEzMkZfRVhUOgorICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERh
dGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJv
d1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6CisgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYUhhbGZG
bG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZElt
YWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX1JHQjhfT0VTOgorICAgICAgICBsb2FkUkdCVUJ5dGVEYXRhVG9SR0JBKHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFw
cGVkRGF0YSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9SR0I1NjU6CisgICAgICAg
IGxvYWRSR0I1NjVEYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBt
YXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6CisgICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhVG9OYXRp
dmUod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNo
LCBvZmZzZXRNYXBwZWREYXRhKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JHQkE0
OgorICAgICAgICBsb2FkUkdCQTQ0NDREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9SR0I1X0ExOgorICAgICAgICBsb2FkUkdCQTU1NTFE
YXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5S
b3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9CR1JBOF9FWFQ6CisgICAgICAgIGxvYWRCR1JBRGF0YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBp
bnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEp
OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUkdCMzJGX0VYVDoKKyAgICAgICAgbG9h
ZFJHQkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFw
cGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOworICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfUkdCMTZGX0VYVDoKKyAgICAgICAgbG9hZFJHQkhhbGZGbG9hdERhdGFUb1JH
QkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNo
LCBvZmZzZXRNYXBwZWREYXRhKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JHQkEz
MkZfRVhUOgorICAgICAgICBsb2FkUkdCQUZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBp
bnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEp
OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUkdCQTE2Rl9FWFQ6CisgICAgICAgIGxv
YWRSR0JBSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1
dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOworICAgICAgICBicmVh
azsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IAorICAgIH0KKworICAgIHVubWFwKCk7
Cit9CisKK3ZvaWQgSW1hZ2UxMTo6bG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dCkKK3sKKyAgICBBU1NFUlQoeG9m
ZnNldCAlIDQgPT0gMCk7CisgICAgQVNTRVJUKHlvZmZzZXQgJSA0ID09IDApOworCisgICAgRDNE
MTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZEltYWdlOworICAgIEhSRVNVTFQgcmVzdWx0ID0g
bWFwKEQzRDExX01BUF9XUklURSwgJm1hcHBlZEltYWdlKTsKKyAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCisgICAgeworICAgICAgICBFUlIoIkNvdWxkIG5vdCBtYXAgaW1hZ2UgZm9yIGxvYWRpbmcu
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBTaXplIGNvbXB1dGF0aW9uIGFz
c3VtZXMgYSA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdAorICAgIHNpemVfdCBi
bG9ja1NpemUgPSBkM2QxMTo6Q29tcHV0ZUJsb2NrU2l6ZUJpdHMobURYR0lGb3JtYXQpIC8gODsK
KyAgICB2b2lkKiBvZmZzZXRNYXBwZWREYXRhID0gKHZvaWQqKSgoQllURSAqKW1hcHBlZEltYWdl
LnBEYXRhICsgKCh5b2Zmc2V0IC8gNCkgKiBtYXBwZWRJbWFnZS5Sb3dQaXRjaCArICh4b2Zmc2V0
IC8gNCkgKiBibG9ja1NpemUpKTsKKworICAgIEdMc2l6ZWkgaW5wdXRTaXplID0gZ2w6OkNvbXB1
dGVDb21wcmVzc2VkU2l6ZSh3aWR0aCwgaGVpZ2h0LCBtSW50ZXJuYWxGb3JtYXQpOworICAgIEdM
c2l6ZWkgaW5wdXRQaXRjaCA9IGdsOjpDb21wdXRlQ29tcHJlc3NlZFBpdGNoKHdpZHRoLCBtSW50
ZXJuYWxGb3JtYXQpOworICAgIGludCByb3dzID0gaW5wdXRTaXplIC8gaW5wdXRQaXRjaDsKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7ICsraSkKKyAgICB7CisgICAgICAgIG1lbWNweSgo
dm9pZCopKChCWVRFKilvZmZzZXRNYXBwZWREYXRhICsgaSAqIG1hcHBlZEltYWdlLlJvd1BpdGNo
KSwgKHZvaWQqKSgoQllURSopaW5wdXQgKyBpICogaW5wdXRQaXRjaCksIGlucHV0UGl0Y2gpOwor
ICAgIH0KKworICAgIHVubWFwKCk7Cit9CisKK3ZvaWQgSW1hZ2UxMTo6Y29weShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgZ2w6OkZyYW1lYnVmZmVyICpzb3VyY2UpCit7CisgICAgZ2w6OlJlbmRlcmJ1
ZmZlciAqY29sb3JidWZmZXIgPSBzb3VyY2UtPmdldFJlYWRDb2xvcmJ1ZmZlcigpOworCisgICAg
aWYgKGNvbG9yYnVmZmVyICYmIGNvbG9yYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKSA9PSAoR0x1
aW50KW1BY3R1YWxGb3JtYXQpCisgICAgeworICAgICAgICAvLyBObyBjb252ZXJzaW9uIG5lZWRl
ZC0tIHVzZSBjb3B5YmFjayBmYXN0cGF0aAorICAgICAgICBJRDNEMTFUZXh0dXJlMkQgKmNvbG9y
QnVmZmVyVGV4dHVyZSA9IE5VTEw7CisgICAgICAgIHVuc2lnbmVkIGludCBzdWJyZXNvdXJjZUlu
ZGV4ID0gMDsKKworICAgICAgICBpZiAobVJlbmRlcmVyLT5nZXRSZW5kZXJUYXJnZXRSZXNvdXJj
ZShjb2xvcmJ1ZmZlciwgJnN1YnJlc291cmNlSW5kZXgsICZjb2xvckJ1ZmZlclRleHR1cmUpKQor
ICAgICAgICB7CisgICAgICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyB0ZXh0dXJlRGVzYzsK
KyAgICAgICAgICAgIGNvbG9yQnVmZmVyVGV4dHVyZS0+R2V0RGVzYygmdGV4dHVyZURlc2MpOwor
CisgICAgICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNl
KCk7CisgICAgICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpkZXZpY2VDb250ZXh0ID0gbVJl
bmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisKKyAgICAgICAgICAgIElEM0QxMVRleHR1cmUy
RCogc3JjVGV4ID0gTlVMTDsKKyAgICAgICAgICAgIGlmICh0ZXh0dXJlRGVzYy5TYW1wbGVEZXNj
LkNvdW50ID4gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEM0QxMV9URVhUVVJF
MkRfREVTQyByZXNvbHZlRGVzYzsKKyAgICAgICAgICAgICAgICByZXNvbHZlRGVzYy5XaWR0aCA9
IHRleHR1cmVEZXNjLldpZHRoOworICAgICAgICAgICAgICAgIHJlc29sdmVEZXNjLkhlaWdodCA9
IHRleHR1cmVEZXNjLkhlaWdodDsKKyAgICAgICAgICAgICAgICByZXNvbHZlRGVzYy5NaXBMZXZl
bHMgPSAxOworICAgICAgICAgICAgICAgIHJlc29sdmVEZXNjLkFycmF5U2l6ZSA9IDE7CisgICAg
ICAgICAgICAgICAgcmVzb2x2ZURlc2MuRm9ybWF0ID0gdGV4dHVyZURlc2MuRm9ybWF0OworICAg
ICAgICAgICAgICAgIHJlc29sdmVEZXNjLlNhbXBsZURlc2MuQ291bnQgPSAxOworICAgICAgICAg
ICAgICAgIHJlc29sdmVEZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7CisgICAgICAgICAgICAg
ICAgcmVzb2x2ZURlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICAgICAg
ICAgIHJlc29sdmVEZXNjLkJpbmRGbGFncyA9IDA7CisgICAgICAgICAgICAgICAgcmVzb2x2ZURl
c2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOworICAgICAgICAgICAgICAgIHJlc29sdmVEZXNjLk1pc2NG
bGFncyA9IDA7CisKKyAgICAgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3Jl
YXRlVGV4dHVyZTJEKCZyZXNvbHZlRGVzYywgTlVMTCwgJnNyY1RleCk7CisgICAgICAgICAgICAg
ICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgRVJSKCJGYWlsZWQgdG8gY3JlYXRlIHJlc29sdmUgdGV4dHVyZSBmb3IgSW1hZ2UxMTo6
Y29weSwgSFJFU1VMVDogMHglWC4iLCByZXN1bHQpOworICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZGV2aWNlQ29udGV4dC0+
UmVzb2x2ZVN1YnJlc291cmNlKHNyY1RleCwgMCwgY29sb3JCdWZmZXJUZXh0dXJlLCBzdWJyZXNv
dXJjZUluZGV4LCB0ZXh0dXJlRGVzYy5Gb3JtYXQpOworICAgICAgICAgICAgICAgIHN1YnJlc291
cmNlSW5kZXggPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHNyY1RleCA9IGNvbG9yQnVmZmVyVGV4dHVyZTsKKyAgICAg
ICAgICAgICAgICBzcmNUZXgtPkFkZFJlZigpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBEM0QxMV9CT1ggc3JjQm94OworICAgICAgICAgICAgc3JjQm94LmxlZnQgPSB4OworICAgICAg
ICAgICAgc3JjQm94LnJpZ2h0ID0geCArIHdpZHRoOworICAgICAgICAgICAgc3JjQm94LnRvcCA9
IHk7CisgICAgICAgICAgICBzcmNCb3guYm90dG9tID0geSArIGhlaWdodDsKKyAgICAgICAgICAg
IHNyY0JveC5mcm9udCA9IDA7CisgICAgICAgICAgICBzcmNCb3guYmFjayA9IDE7CisKKyAgICAg
ICAgICAgIGRldmljZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihtU3RhZ2luZ1RleHR1
cmUsIDAsIHhvZmZzZXQsIHlvZmZzZXQsIDAsIHNyY1RleCwgc3VicmVzb3VyY2VJbmRleCwgJnNy
Y0JveCk7CisKKyAgICAgICAgICAgIHNyY1RleC0+UmVsZWFzZSgpOworICAgICAgICAgICAgY29s
b3JCdWZmZXJUZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgLy8gVGhpcyBmb3JtYXQgcmVxdWlyZXMgY29udmVyc2lvbiwgc28gd2Ug
bXVzdCBjb3B5IHRoZSB0ZXh0dXJlIHRvIHN0YWdpbmcgYW5kIG1hbnVhbGx5IGNvbnZlcnQgdmlh
IHJlYWRQaXhlbHMKKyAgICAgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZEltYWdl
OworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1hcChEM0QxMV9NQVBfV1JJVEUsICZtYXBwZWRJ
bWFnZSk7CisKKyAgICAgICAgLy8gZGV0ZXJtaW5lIHRoZSBvZmZzZXQgY29vcmRpbmF0ZSBpbnRv
IHRoZSBkZXN0aW5hdGlvbiBidWZmZXIKKyAgICAgICAgR0xzaXplaSByb3dPZmZzZXQgPSBnbDo6
Q29tcHV0ZVBpeGVsU2l6ZShtQWN0dWFsRm9ybWF0KSAqIHhvZmZzZXQ7CisgICAgICAgIHZvaWQg
KmRhdGFPZmZzZXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4obWFwcGVkSW1hZ2UucERh
dGEpICsgbWFwcGVkSW1hZ2UuUm93UGl0Y2ggKiB5b2Zmc2V0ICsgcm93T2Zmc2V0OworCisgICAg
ICAgIG1SZW5kZXJlci0+cmVhZFBpeGVscyhzb3VyY2UsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGds
OjpFeHRyYWN0Rm9ybWF0KG1JbnRlcm5hbEZvcm1hdCksIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2w6OkV4dHJhY3RUeXBlKG1JbnRlcm5hbEZvcm1hdCksIG1hcHBlZEltYWdlLlJv
d1BpdGNoLCBmYWxzZSwgNCwgZGF0YU9mZnNldCk7CisKKyAgICAgICAgdW5tYXAoKTsKKyAgICB9
Cit9CisKK0lEM0QxMVRleHR1cmUyRCAqSW1hZ2UxMTo6Z2V0U3RhZ2luZ1RleHR1cmUoKQorewor
ICAgIGNyZWF0ZVN0YWdpbmdUZXh0dXJlKCk7CisKKyAgICByZXR1cm4gbVN0YWdpbmdUZXh0dXJl
OworfQorCit1bnNpZ25lZCBpbnQgSW1hZ2UxMTo6Z2V0U3RhZ2luZ1N1YnJlc291cmNlKCkKK3sK
KyAgICBjcmVhdGVTdGFnaW5nVGV4dHVyZSgpOworCisgICAgcmV0dXJuIG1TdGFnaW5nU3VicmVz
b3VyY2U7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgTj4KK3N0YXRpYyB2b2lk
IHNldERlZmF1bHREYXRhKElEM0QxMURldmljZUNvbnRleHQgKmRldmljZUNvbnRleHQsIElEM0Qx
MVRleHR1cmUyRCAqdGV4dHVyZSwgVUlOVCBzdWJyZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBjb25zdCBUICgmZGVmYXVs
dERhdGEpW05dKQoreworICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXA7CisgICAgZGV2
aWNlQ29udGV4dC0+TWFwKHRleHR1cmUsIHN1YnJlc291cmNlLCBEM0QxMV9NQVBfV1JJVEUsIDAs
ICZtYXApOworCisgICAgdW5zaWduZWQgY2hhciogcHRyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNp
Z25lZCBjaGFyKj4obWFwLnBEYXRhKTsKKyAgICBzaXplX3QgcGl4ZWxTaXplID0gc2l6ZW9mKFQp
ICogTjsKKworICAgIGZvciAoR0xzaXplaSB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQorICAgIHsK
KyAgICAgICAgZm9yIChHTHNpemVpIHggPSAwOyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgewor
ICAgICAgICAgICAgbWVtY3B5KHB0ciArICh5ICogbWFwLlJvd1BpdGNoKSArICh4ICogcGl4ZWxT
aXplKSwgZGVmYXVsdERhdGEsIHBpeGVsU2l6ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBk
ZXZpY2VDb250ZXh0LT5Vbm1hcCh0ZXh0dXJlLCBzdWJyZXNvdXJjZSk7Cit9CisKK3ZvaWQgSW1h
Z2UxMTo6Y3JlYXRlU3RhZ2luZ1RleHR1cmUoKQoreworICAgIGlmIChtU3RhZ2luZ1RleHR1cmUp
CisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSUQzRDExVGV4dHVyZTJEICpu
ZXdUZXh0dXJlID0gTlVMTDsKKyAgICBpbnQgbG9kT2Zmc2V0ID0gMTsKKyAgICBjb25zdCBEWEdJ
X0ZPUk1BVCBkeGdpRm9ybWF0ID0gZ2V0RFhHSUZvcm1hdCgpOworICAgIEFTU0VSVCghZDNkMTE6
OklzRGVwdGhTdGVuY2lsRm9ybWF0KGR4Z2lGb3JtYXQpKTsgLy8gV2Ugc2hvdWxkIG5ldmVyIGdl
dCBoZXJlIGZvciBkZXB0aCB0ZXh0dXJlcworCisgICAgaWYgKG1XaWR0aCAhPSAwICYmIG1IZWln
aHQgIT0gMCkKKyAgICB7CisgICAgICAgIEdMc2l6ZWkgd2lkdGggPSBtV2lkdGg7CisgICAgICAg
IEdMc2l6ZWkgaGVpZ2h0ID0gbUhlaWdodDsKKworICAgICAgICAvLyBhZGp1c3Qgc2l6ZSBpZiBu
ZWVkZWQgZm9yIGNvbXByZXNzZWQgdGV4dHVyZXMKKyAgICAgICAgZ2w6Ok1ha2VWYWxpZFNpemUo
ZmFsc2UsIGQzZDExOjpJc0NvbXByZXNzZWQoZHhnaUZvcm1hdCksICZ3aWR0aCwgJmhlaWdodCwg
JmxvZE9mZnNldCk7CisgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5n
ZXREZXZpY2UoKTsKKworICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXNjOworICAgICAg
ICBkZXNjLldpZHRoID0gd2lkdGg7CisgICAgICAgIGRlc2MuSGVpZ2h0ID0gaGVpZ2h0OworICAg
ICAgICBkZXNjLk1pcExldmVscyA9IGxvZE9mZnNldCArIDE7CisgICAgICAgIGRlc2MuQXJyYXlT
aXplID0gMTsKKyAgICAgICAgZGVzYy5Gb3JtYXQgPSBkeGdpRm9ybWF0OworICAgICAgICBkZXNj
LlNhbXBsZURlc2MuQ291bnQgPSAxOworICAgICAgICBkZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9
IDA7CisgICAgICAgIGRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9TVEFHSU5HOworICAgICAgICBk
ZXNjLkJpbmRGbGFncyA9IDA7CisgICAgICAgIGRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9D
UFVfQUNDRVNTX1JFQUQgfCBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOworICAgICAgICBkZXNjLk1p
c2NGbGFncyA9IDA7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRl
eHR1cmUyRCgmZGVzYywgTlVMTCwgJm5ld1RleHR1cmUpOworCisgICAgICAgIGlmIChGQUlMRUQo
cmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBFX09VVE9G
TUVNT1JZKTsKKyAgICAgICAgICAgIEVSUigiQ3JlYXRpbmcgaW1hZ2UgZmFpbGVkLiIpOworICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIG1TdGFnaW5nVGV4dHVyZSA9IG5ld1RleHR1cmU7CisgICAgbVN0YWdpbmdT
dWJyZXNvdXJjZSA9IEQzRDExQ2FsY1N1YnJlc291cmNlKGxvZE9mZnNldCwgMCwgbG9kT2Zmc2V0
ICsgMSk7CisgICAgbURpcnR5ID0gZmFsc2U7CisKKyAgICBpZiAobURYR0lGb3JtYXQgPT0gRFhH
SV9GT1JNQVRfUjhHOEI4QThfVU5PUk0gJiYgZ2w6OkdldEFscGhhU2l6ZShtSW50ZXJuYWxGb3Jt
YXQpID09IDApCisgICAgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGRlZmF1bHRQaXhlbFs0XSA9
IHsgMCwgMCwgMCwgMjU1IH07CisgICAgICAgIHNldERlZmF1bHREYXRhKG1SZW5kZXJlci0+Z2V0
RGV2aWNlQ29udGV4dCgpLCBtU3RhZ2luZ1RleHR1cmUsIG1TdGFnaW5nU3VicmVzb3VyY2UsIG1X
aWR0aCwgbUhlaWdodCwgZGVmYXVsdFBpeGVsKTsKKyAgICB9CisgICAgZWxzZSBpZiAobURYR0lG
b3JtYXQgPT0gRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUICYmIGdsOjpHZXRBbHBoYVNp
emUobUludGVybmFsRm9ybWF0KSA9PSAwKQorICAgIHsKKyAgICAgICAgZmxvYXQgZGVmYXVsdFBp
eGVsWzRdID0geyAwLjBmLCAwLjBmLCAwLjBmLCAxLjBmIH07CisgICAgICAgIHNldERlZmF1bHRE
YXRhKG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpLCBtU3RhZ2luZ1RleHR1cmUsIG1TdGFn
aW5nU3VicmVzb3VyY2UsIG1XaWR0aCwgbUhlaWdodCwgZGVmYXVsdFBpeGVsKTsKKyAgICB9Cit9
CisKK0hSRVNVTFQgSW1hZ2UxMTo6bWFwKEQzRDExX01BUCBtYXBUeXBlLCBEM0QxMV9NQVBQRURf
U1VCUkVTT1VSQ0UgKm1hcCkKK3sKKyAgICBjcmVhdGVTdGFnaW5nVGV4dHVyZSgpOworCisgICAg
SFJFU1VMVCByZXN1bHQgPSBFX0ZBSUw7CisKKyAgICBpZiAobVN0YWdpbmdUZXh0dXJlKQorICAg
IHsKKyAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqZGV2aWNlQ29udGV4dCA9IG1SZW5kZXJl
ci0+Z2V0RGV2aWNlQ29udGV4dCgpOworICAgICAgICByZXN1bHQgPSBkZXZpY2VDb250ZXh0LT5N
YXAobVN0YWdpbmdUZXh0dXJlLCBtU3RhZ2luZ1N1YnJlc291cmNlLCBtYXBUeXBlLCAwLCBtYXAp
OworCisgICAgICAgIC8vIHRoaXMgY2FuIGZhaWwgaWYgdGhlIGRldmljZSBpcyByZW1vdmVkIChm
cm9tIFREUikKKyAgICAgICAgaWYgKGQzZDExOjppc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQor
ICAgICAgICB7CisgICAgICAgICAgICBtUmVuZGVyZXItPm5vdGlmeURldmljZUxvc3QoKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAgICAgICAgewor
ICAgICAgICAgICAgbURpcnR5ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgSW1hZ2UxMTo6dW5tYXAoKQoreworICAgIGlmIChtU3RhZ2lu
Z1RleHR1cmUpCisgICAgeworICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpkZXZpY2VDb250
ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisgICAgICAgIGRldmljZUNvbnRl
eHQtPlVubWFwKG1TdGFnaW5nVGV4dHVyZSwgbVN0YWdpbmdTdWJyZXNvdXJjZSk7CisgICAgfQor
fQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL0ltYWdlMTEuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW1hZ2UxMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjExYTY0OTJkYzg2
M2E5MTY0MTliNWJjZDE2NGNhN2Q3YmI1ZDk1ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ltYWdlMTEuaApA
QCAtMCwwICsxLDc2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gSW1hZ2UxMS5oOiBEZWZpbmVzIHRo
ZSByeDo6SW1hZ2UxMSBjbGFzcywgd2hpY2ggYWN0cyBhcyB0aGUgaW50ZXJmYWNlIHRvCisvLyB0
aGUgYWN0dWFsIHVuZGVybHlpbmcgcmVzb3VyY2VzIG9mIGEgVGV4dHVyZQorCisjaWZuZGVmIExJ
QkdMRVNWMl9SRU5ERVJFUl9JTUFHRTExX0hfCisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9J
TUFHRTExX0hfCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvSW1hZ2UuaCIKKworI2lu
Y2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCituYW1lc3BhY2UgZ2wKK3sKK2NsYXNzIEZyYW1lYnVm
ZmVyOworfQorCituYW1lc3BhY2UgcngKK3sKK2NsYXNzIFJlbmRlcmVyOworY2xhc3MgUmVuZGVy
ZXIxMTsKK2NsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ7CitjbGFzcyBUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZUN1YmU7CisKK2NsYXNzIEltYWdlMTEgOiBwdWJsaWMgSW1hZ2UKK3sKKyAg
cHVibGljOgorICAgIEltYWdlMTEoKTsKKyAgICB2aXJ0dWFsIH5JbWFnZTExKCk7CisKKyAgICBz
dGF0aWMgSW1hZ2UxMSAqbWFrZUltYWdlMTEoSW1hZ2UgKmltZyk7CisKKyAgICBzdGF0aWMgdm9p
ZCBnZW5lcmF0ZU1pcG1hcChJbWFnZTExICpkZXN0LCBJbWFnZTExICpzcmMpOworCisgICAgdmly
dHVhbCBib29sIGlzRGlydHkoKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVTdXJm
YWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwor
ICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3Vi
ZSAqc3RvcmFnZSwgaW50IGZhY2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCisgICAgdmlydHVhbCBib29s
IHJlZGVmaW5lKFJlbmRlcmVyICpyZW5kZXJlciwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBib29sIGZvcmNlUmVsZWFzZSk7CisKKyAgICB2aXJ0
dWFsIGJvb2wgaXNSZW5kZXJhYmxlRm9ybWF0KCkgY29uc3Q7CisgICAgRFhHSV9GT1JNQVQgZ2V0
RFhHSUZvcm1hdCgpIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgdm9pZCBsb2FkRGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
KyAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5w
dXQpOworICAgIHZpcnR1YWwgdm9pZCBsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgY29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGlu
dCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgZ2w6OkZyYW1lYnVmZmVyICpzb3Vy
Y2UpOworCisgIHByb3RlY3RlZDoKKyAgICBIUkVTVUxUIG1hcChEM0QxMV9NQVAgbWFwVHlwZSwg
RDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFICptYXApOworICAgIHZvaWQgdW5tYXAoKTsKKworICBw
cml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihJbWFnZTExKTsKKworICAgIElE
M0QxMVRleHR1cmUyRCAqZ2V0U3RhZ2luZ1RleHR1cmUoKTsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0
U3RhZ2luZ1N1YnJlc291cmNlKCk7CisgICAgdm9pZCBjcmVhdGVTdGFnaW5nVGV4dHVyZSgpOwor
CisgICAgUmVuZGVyZXIxMSAqbVJlbmRlcmVyOworCisgICAgRFhHSV9GT1JNQVQgbURYR0lGb3Jt
YXQ7CisgICAgSUQzRDExVGV4dHVyZTJEICptU3RhZ2luZ1RleHR1cmU7CisgICAgdW5zaWduZWQg
aW50IG1TdGFnaW5nU3VicmVzb3VyY2U7Cit9OworCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJf
UkVOREVSRVJfSU1BR0UxMV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbmRleEJ1ZmZlcjExLmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5kZXhCdWZmZXIx
MS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNDRmOTk3NmQ0M2QxZGI0Y2E0MDAyZDQ3NWI5ZjYxNTQ0YmZjMzIw
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkMTEvSW5kZXhCdWZmZXIxMS5jcHAKQEAgLTAsMCArMSwxODMgQEAKKyNp
bmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIEluZGV4QnVmZmVyMTEu
Y3BwOiBEZWZpbmVzIHRoZSBEM0QxMSBJbmRleEJ1ZmZlciBpbXBsZW1lbnRhdGlvbi4KKworI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbmRleEJ1ZmZlcjExLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKKworbmFtZXNwYWNlIHJ4
Cit7CisKK0luZGV4QnVmZmVyMTE6OkluZGV4QnVmZmVyMTEoUmVuZGVyZXIxMSAqY29uc3QgcmVu
ZGVyZXIpIDogbVJlbmRlcmVyKHJlbmRlcmVyKQoreworICAgIG1CdWZmZXIgPSBOVUxMOworICAg
IG1CdWZmZXJTaXplID0gMDsKKyAgICBtRHluYW1pY1VzYWdlID0gZmFsc2U7Cit9CisKK0luZGV4
QnVmZmVyMTE6On5JbmRleEJ1ZmZlcjExKCkKK3sKKyAgICBpZiAobUJ1ZmZlcikKKyAgICB7Cisg
ICAgICAgIG1CdWZmZXItPlJlbGVhc2UoKTsKKyAgICAgICAgbUJ1ZmZlciA9IE5VTEw7CisgICAg
fQorfQorCitib29sIEluZGV4QnVmZmVyMTE6OmluaXRpYWxpemUodW5zaWduZWQgaW50IGJ1ZmZl
clNpemUsIEdMZW51bSBpbmRleFR5cGUsIGJvb2wgZHluYW1pYykKK3sKKyAgICBpZiAobUJ1ZmZl
cikKKyAgICB7CisgICAgICAgIG1CdWZmZXItPlJlbGVhc2UoKTsKKyAgICAgICAgbUJ1ZmZlciA9
IE5VTEw7CisgICAgfQorCisgICAgdXBkYXRlU2VyaWFsKCk7CisKKyAgICBpZiAoYnVmZmVyU2l6
ZSA+IDApCisgICAgeworICAgICAgICBJRDNEMTFEZXZpY2UqIGR4RGV2aWNlID0gbVJlbmRlcmVy
LT5nZXREZXZpY2UoKTsKKworICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyBidWZmZXJEZXNjOwor
ICAgICAgICBidWZmZXJEZXNjLkJ5dGVXaWR0aCA9IGJ1ZmZlclNpemU7CisgICAgICAgIGJ1ZmZl
ckRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9EWU5BTUlDOworICAgICAgICBidWZmZXJEZXNjLkJp
bmRGbGFncyA9IEQzRDExX0JJTkRfSU5ERVhfQlVGRkVSOworICAgICAgICBidWZmZXJEZXNjLkNQ
VUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsKKyAgICAgICAgYnVmZmVyRGVz
Yy5NaXNjRmxhZ3MgPSAwOworICAgICAgICBidWZmZXJEZXNjLlN0cnVjdHVyZUJ5dGVTdHJpZGUg
PSAwOworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZHhEZXZpY2UtPkNyZWF0ZUJ1ZmZlcigm
YnVmZmVyRGVzYywgTlVMTCwgJm1CdWZmZXIpOworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIG1CdWZmZXJTaXplID0gYnVmZmVyU2l6ZTsKKyAgICBtSW5kZXhUeXBlID0gaW5kZXhU
eXBlOworICAgIG1EeW5hbWljVXNhZ2UgPSBkeW5hbWljOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK0luZGV4QnVmZmVyMTEgKkluZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1ZmZlcjExKEluZGV4
QnVmZmVyICppbmRleEJ1ZmZlcikKK3sKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShJbmRl
eEJ1ZmZlcjExKiwgaW5kZXhCdWZmZXIpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW5kZXhC
dWZmZXIxMSo+KGluZGV4QnVmZmVyKTsKK30KKworYm9vbCBJbmRleEJ1ZmZlcjExOjptYXBCdWZm
ZXIodW5zaWduZWQgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IHNpemUsIHZvaWQqKiBvdXRNYXBw
ZWRNZW1vcnkpCit7CisgICAgaWYgKG1CdWZmZXIpCisgICAgeworICAgICAgICAvLyBDaGVjayBm
b3IgaW50ZWdlciBvdmVyZmxvd3MgYW5kIG91dC1vdXQtYm91bmRzIG1hcCByZXF1ZXN0cworICAg
ICAgICBpZiAob2Zmc2V0ICsgc2l6ZSA8IG9mZnNldCB8fCBvZmZzZXQgKyBzaXplID4gbUJ1ZmZl
clNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiSW5kZXggYnVmZmVyIG1hcCByYW5n
ZSBpcyBub3QgaW5zaWRlIHRoZSBidWZmZXIuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKworICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpkeENvbnRleHQgPSBt
UmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKKworICAgICAgICBEM0QxMV9NQVBQRURfU1VC
UkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZHhDb250
ZXh0LT5NYXAobUJ1ZmZlciwgMCwgRDNEMTFfTUFQX1dSSVRFX05PX09WRVJXUklURSwgMCwgJm1h
cHBlZFJlc291cmNlKTsKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBFUlIoIkluZGV4IGJ1ZmZlciBtYXAgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4
IiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAg
ICAgICpvdXRNYXBwZWRNZW1vcnkgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihtYXBwZWRSZXNv
dXJjZS5wRGF0YSkgKyBvZmZzZXQ7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBFUlIoIkluZGV4IGJ1ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSW5kZXhCdWZmZXIxMTo6
dW5tYXBCdWZmZXIoKQoreworICAgIGlmIChtQnVmZmVyKQorICAgIHsKKyAgICAgICAgSUQzRDEx
RGV2aWNlQ29udGV4dCAqZHhDb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7
CisgICAgICAgIGR4Q29udGV4dC0+VW5tYXAobUJ1ZmZlciwgMCk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBFUlIoIkluZGV4IGJ1ZmZlciBu
b3QgaW5pdGlhbGl6ZWQuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK0dM
ZW51bSBJbmRleEJ1ZmZlcjExOjpnZXRJbmRleFR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBt
SW5kZXhUeXBlOworfQorCit1bnNpZ25lZCBpbnQgSW5kZXhCdWZmZXIxMTo6Z2V0QnVmZmVyU2l6
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1CdWZmZXJTaXplOworfQorCitib29sIEluZGV4QnVm
ZmVyMTE6OnNldFNpemUodW5zaWduZWQgaW50IGJ1ZmZlclNpemUsIEdMZW51bSBpbmRleFR5cGUp
Cit7CisgICAgaWYgKGJ1ZmZlclNpemUgPiBtQnVmZmVyU2l6ZSB8fCBpbmRleFR5cGUgIT0gbUlu
ZGV4VHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbml0aWFsaXplKGJ1ZmZlclNpemUsIGlu
ZGV4VHlwZSwgbUR5bmFtaWNVc2FnZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KK30KKworYm9vbCBJbmRleEJ1ZmZlcjExOjpkaXNjYXJkKCkK
K3sKKyAgICBpZiAobUJ1ZmZlcikKKyAgICB7CisgICAgICAgIElEM0QxMURldmljZUNvbnRleHQg
KmR4Q29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworCisgICAgICAgIEQz
RDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJjZTsKKyAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBkeENvbnRleHQtPk1hcChtQnVmZmVyLCAwLCBEM0QxMV9NQVBfV1JJVEVfRElTQ0FS
RCwgMCwgJm1hcHBlZFJlc291cmNlKTsKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAg
ICAgICB7CisgICAgICAgICAgICBFUlIoIkluZGV4IGJ1ZmZlciBtYXAgZmFpbGVkIHdpdGggZXJy
b3IgMHglMDh4IiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorCisgICAgICAgIGR4Q29udGV4dC0+VW5tYXAobUJ1ZmZlciwgMCk7CisKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEVSUigiSW5kZXggYnVm
ZmVyIG5vdCBpbml0aWFsaXplZC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30K
KworRFhHSV9GT1JNQVQgSW5kZXhCdWZmZXIxMTo6Z2V0SW5kZXhGb3JtYXQoKSBjb25zdAorewor
ICAgIHN3aXRjaCAobUluZGV4VHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZ
VEU6ICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMTZfVUlOVDsKKyAgICAgIGNhc2UgR0xfVU5TSUdO
RURfU0hPUlQ6ICAgcmV0dXJuIERYR0lfRk9STUFUX1IxNl9VSU5UOworICAgICAgY2FzZSBHTF9V
TlNJR05FRF9JTlQ6ICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjMyX1VJTlQ7CisgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOyAgIHJldHVybiBEWEdJX0ZPUk1BVF9VTktOT1dOOworICAgIH0K
K30KKworSUQzRDExQnVmZmVyICpJbmRleEJ1ZmZlcjExOjpnZXRCdWZmZXIoKSBjb25zdAorewor
ICAgIHJldHVybiBtQnVmZmVyOworfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9JbmRleEJ1ZmZlcjExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL0luZGV4QnVmZmVyMTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zOWE2MTk0
NmFkNmVmODkyYzRjYTY2YjYwN2U2NTlhMzVjYzA5ZGU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbmRleEJ1
ZmZlcjExLmgKQEAgLTAsMCArMSw1MyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIEluZGV4QnVmZmVy
MTEuaDogRGVmaW5lcyB0aGUgRDNEMTEgSW5kZXhCdWZmZXIgaW1wbGVtZW50YXRpb24uCisKKyNp
Zm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0lOREVYQlVGRkVSMTFfSF8KKyNkZWZpbmUgTElCR0xF
U1YyX1JFTkRFUkVSX0lOREVYQlVGRkVSMTFfSF8KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9JbmRleEJ1ZmZlci5oIgorCituYW1lc3BhY2UgcngKK3sKK2NsYXNzIFJlbmRlcmVyMTE7
CisKK2NsYXNzIEluZGV4QnVmZmVyMTEgOiBwdWJsaWMgSW5kZXhCdWZmZXIKK3sKKyAgcHVibGlj
OgorICAgIGV4cGxpY2l0IEluZGV4QnVmZmVyMTEoUmVuZGVyZXIxMSAqY29uc3QgcmVuZGVyZXIp
OworICAgIHZpcnR1YWwgfkluZGV4QnVmZmVyMTEoKTsKKworICAgIHZpcnR1YWwgYm9vbCBpbml0
aWFsaXplKHVuc2lnbmVkIGludCBidWZmZXJTaXplLCBHTGVudW0gaW5kZXhUeXBlLCBib29sIGR5
bmFtaWMpOworCisgICAgc3RhdGljIEluZGV4QnVmZmVyMTEgKm1ha2VJbmRleEJ1ZmZlcjExKElu
ZGV4QnVmZmVyICppbmRleEJ1ZmZlcik7CisKKyAgICB2aXJ0dWFsIGJvb2wgbWFwQnVmZmVyKHVu
c2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBzaXplLCB2b2lkKiogb3V0TWFwcGVkTWVt
b3J5KTsKKyAgICB2aXJ0dWFsIGJvb2wgdW5tYXBCdWZmZXIoKTsKKworICAgIHZpcnR1YWwgR0xl
bnVtIGdldEluZGV4VHlwZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldEJ1
ZmZlclNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0U2l6ZSh1bnNpZ25lZCBpbnQg
YnVmZmVyU2l6ZSwgR0xlbnVtIGluZGV4VHlwZSk7CisKKyAgICB2aXJ0dWFsIGJvb2wgZGlzY2Fy
ZCgpOworCisgICAgRFhHSV9GT1JNQVQgZ2V0SW5kZXhGb3JtYXQoKSBjb25zdDsKKyAgICBJRDNE
MTFCdWZmZXIgKmdldEJ1ZmZlcigpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1df
Q09QWV9BTkRfQVNTSUdOKEluZGV4QnVmZmVyMTEpOworCisgICAgcng6OlJlbmRlcmVyMTEgKmNv
bnN0IG1SZW5kZXJlcjsKKworICAgIElEM0QxMUJ1ZmZlciAqbUJ1ZmZlcjsKKyAgICB1bnNpZ25l
ZCBpbnQgbUJ1ZmZlclNpemU7CisgICAgR0xlbnVtIG1JbmRleFR5cGU7CisgICAgYm9vbCBtRHlu
YW1pY1VzYWdlOworfTsKKworfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX0lOREVY
QlVGRkVSMTFfSF8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5
b3V0Q2FjaGUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9JbnB1dExheW91dENhY2hlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNDE4ZTg5NDJjODg1
ZGI3Y2YyMmYxNjY3MWU4YmFlYjMwYTBlMjU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbnB1dExheW91dENh
Y2hlLmNwcApAQCAtMCwwICsxLDIxMyBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworLy8gSW5wdXRMYXlvdXRDYWNoZS5jcHA6IERlZmluZXMgSW5wdXRMYXlvdXRD
YWNoZSwgYSBjbGFzcyB0aGF0IGJ1aWxkcyBhbmQgY2FjaGVzCisvLyBEM0QxMSBpbnB1dCBsYXlv
dXRzLgorCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2Fj
aGUuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVydGV4QnVmZmVyMTEu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvQnVmZmVyU3RvcmFnZTExLmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1dGFibGUxMS5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGF0YU1h
bmFnZXIuaCIKKworI2luY2x1ZGUgInRoaXJkX3BhcnR5L211cm11cmhhc2gvTXVybXVySGFzaDMu
aCIKKworbmFtZXNwYWNlIHJ4Cit7CisKK2NvbnN0IHVuc2lnbmVkIGludCBJbnB1dExheW91dENh
Y2hlOjprTWF4SW5wdXRMYXlvdXRzID0gMTAyNDsKKworSW5wdXRMYXlvdXRDYWNoZTo6SW5wdXRM
YXlvdXRDYWNoZSgpIDogbUlucHV0TGF5b3V0TWFwKGtNYXhJbnB1dExheW91dHMsIGhhc2hJbnB1
dExheW91dCwgY29tcGFyZUlucHV0TGF5b3V0cykKK3sKKyAgICBtQ291bnRlciA9IDA7CisgICAg
bURldmljZSA9IE5VTEw7CisgICAgbURldmljZUNvbnRleHQgPSBOVUxMOworICAgIG1DdXJyZW50
SUwgPSBOVUxMOworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9WRVJU
RVhfQVRUUklCUzsgaSsrKQorICAgIHsKKyAgICAgICAgbUN1cnJlbnRCdWZmZXJzW2ldID0gLTE7
CisgICAgICAgIG1DdXJyZW50VmVydGV4U3RyaWRlc1tpXSA9IC0xOworICAgICAgICBtQ3VycmVu
dFZlcnRleE9mZnNldHNbaV0gPSAtMTsKKyAgICB9Cit9CisKK0lucHV0TGF5b3V0Q2FjaGU6On5J
bnB1dExheW91dENhY2hlKCkKK3sKKyAgICBjbGVhcigpOworfQorCit2b2lkIElucHV0TGF5b3V0
Q2FjaGU6OmluaXRpYWxpemUoSUQzRDExRGV2aWNlICpkZXZpY2UsIElEM0QxMURldmljZUNvbnRl
eHQgKmNvbnRleHQpCit7CisgICAgY2xlYXIoKTsKKyAgICBtRGV2aWNlID0gZGV2aWNlOworICAg
IG1EZXZpY2VDb250ZXh0ID0gY29udGV4dDsKK30KKwordm9pZCBJbnB1dExheW91dENhY2hlOjpj
bGVhcigpCit7CisgICAgZm9yIChJbnB1dExheW91dE1hcDo6aXRlcmF0b3IgaSA9IG1JbnB1dExh
eW91dE1hcC5iZWdpbigpOyBpICE9IG1JbnB1dExheW91dE1hcC5lbmQoKTsgaSsrKQorICAgIHsK
KyAgICAgICAgaS0+c2Vjb25kLmlucHV0TGF5b3V0LT5SZWxlYXNlKCk7CisgICAgfQorICAgIG1J
bnB1dExheW91dE1hcC5jbGVhcigpOworICAgIG1hcmtEaXJ0eSgpOworfQorCit2b2lkIElucHV0
TGF5b3V0Q2FjaGU6Om1hcmtEaXJ0eSgpCit7CisgICAgbUN1cnJlbnRJTCA9IE5VTEw7CisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKysp
CisgICAgeworICAgICAgICBtQ3VycmVudEJ1ZmZlcnNbaV0gPSAtMTsKKyAgICAgICAgbUN1cnJl
bnRWZXJ0ZXhTdHJpZGVzW2ldID0gLTE7CisgICAgICAgIG1DdXJyZW50VmVydGV4T2Zmc2V0c1tp
XSA9IC0xOworICAgIH0KK30KKworR0xlbnVtIElucHV0TGF5b3V0Q2FjaGU6OmFwcGx5VmVydGV4
QnVmZmVycyhUcmFuc2xhdGVkQXR0cmlidXRlIGF0dHJpYnV0ZXNbZ2w6Ok1BWF9WRVJURVhfQVRU
UklCU10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KQoreworICAgIGludCBzb3J0ZWRTZW1hbnRpY0lu
ZGljZXNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107CisgICAgcHJvZ3JhbUJpbmFyeS0+c29ydEF0
dHJpYnV0ZXNCeUxheW91dChhdHRyaWJ1dGVzLCBzb3J0ZWRTZW1hbnRpY0luZGljZXMpOworCisg
ICAgaWYgKCFtRGV2aWNlIHx8ICFtRGV2aWNlQ29udGV4dCkKKyAgICB7CisgICAgICAgIEVSUigi
SW5wdXRMYXlvdXRDYWNoZSBpcyBub3QgaW5pdGlhbGl6ZWQuIik7CisgICAgICAgIHJldHVybiBH
TF9JTlZBTElEX09QRVJBVElPTjsKKyAgICB9CisKKyAgICBJbnB1dExheW91dEtleSBpbEtleSA9
IHsgMCB9OworCisgICAgSUQzRDExQnVmZmVyICp2ZXJ0ZXhCdWZmZXJzW2dsOjpNQVhfVkVSVEVY
X0FUVFJJQlNdID0geyBOVUxMIH07CisgICAgdW5zaWduZWQgaW50IHZlcnRleEJ1ZmZlclNlcmlh
bHNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10gPSB7IDAgfTsKKyAgICBVSU5UIHZlcnRleFN0cmlk
ZXNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10gPSB7IDAgfTsKKyAgICBVSU5UIHZlcnRleE9mZnNl
dHNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10gPSB7IDAgfTsKKworICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBzZW1hbnRpY05hbWUgPSAiVEVYQ09PUkQiOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgeworICAgICAgICBp
ZiAoYXR0cmlidXRlc1tpXS5hY3RpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcnRleEJ1
ZmZlcjExICp2ZXJ0ZXhCdWZmZXIgPSBWZXJ0ZXhCdWZmZXIxMTo6bWFrZVZlcnRleEJ1ZmZlcjEx
KGF0dHJpYnV0ZXNbaV0udmVydGV4QnVmZmVyKTsKKyAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2Ux
MSAqYnVmZmVyU3RvcmFnZSA9IGF0dHJpYnV0ZXNbaV0uc3RvcmFnZSA/IEJ1ZmZlclN0b3JhZ2Ux
MTo6bWFrZUJ1ZmZlclN0b3JhZ2UxMShhdHRyaWJ1dGVzW2ldLnN0b3JhZ2UpIDogTlVMTDsKKwor
ICAgICAgICAgICAgRDNEMTFfSU5QVVRfQ0xBU1NJRklDQVRJT04gaW5wdXRDbGFzcyA9IGF0dHJp
YnV0ZXNbaV0uZGl2aXNvciA+IDAgPyBEM0QxMV9JTlBVVF9QRVJfSU5TVEFOQ0VfREFUQSA6IEQz
RDExX0lOUFVUX1BFUl9WRVJURVhfREFUQTsKKworICAgICAgICAgICAgLy8gUmVjb3JkIHRoZSB0
eXBlIG9mIHRoZSBhc3NvY2lhdGVkIHZlcnRleCBzaGFkZXIgdmVjdG9yIGluIG91ciBrZXkKKyAg
ICAgICAgICAgIC8vIFRoaXMgd2lsbCBwcmV2ZW50IG1pc21hdGNoZWQgdmVydGV4IHNoYWRlcnMg
ZnJvbSB1c2luZyB0aGUgc2FtZSBpbnB1dCBsYXlvdXQKKyAgICAgICAgICAgIEdMaW50IGF0dHJp
YnV0ZVNpemU7CisgICAgICAgICAgICBwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVBdHRyaWJ1dGUo
aWxLZXkuZWxlbWVudENvdW50LCAwLCBOVUxMLCAmYXR0cmlidXRlU2l6ZSwgJmlsS2V5LmVsZW1l
bnRzW2lsS2V5LmVsZW1lbnRDb3VudF0uZ2xzbEVsZW1lbnRUeXBlLCBOVUxMKTsKKworICAgICAg
ICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5kZXNjLlNlbWFudGljTmFt
ZSA9IHNlbWFudGljTmFtZTsKKyAgICAgICAgICAgIGlsS2V5LmVsZW1lbnRzW2lsS2V5LmVsZW1l
bnRDb3VudF0uZGVzYy5TZW1hbnRpY0luZGV4ID0gc29ydGVkU2VtYW50aWNJbmRpY2VzW2ldOwor
ICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5kZXNjLkZvcm1h
dCA9IGF0dHJpYnV0ZXNbaV0uYXR0cmlidXRlLT5tQXJyYXlFbmFibGVkID8gdmVydGV4QnVmZmVy
LT5nZXREWEdJRm9ybWF0KCphdHRyaWJ1dGVzW2ldLmF0dHJpYnV0ZSkgOiBEWEdJX0ZPUk1BVF9S
MzJHMzJCMzJBMzJfRkxPQVQ7CisgICAgICAgICAgICBpbEtleS5lbGVtZW50c1tpbEtleS5lbGVt
ZW50Q291bnRdLmRlc2MuSW5wdXRTbG90ID0gaTsKKyAgICAgICAgICAgIGlsS2V5LmVsZW1lbnRz
W2lsS2V5LmVsZW1lbnRDb3VudF0uZGVzYy5BbGlnbmVkQnl0ZU9mZnNldCA9IDA7CisgICAgICAg
ICAgICBpbEtleS5lbGVtZW50c1tpbEtleS5lbGVtZW50Q291bnRdLmRlc2MuSW5wdXRTbG90Q2xh
c3MgPSBpbnB1dENsYXNzOworICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVu
dENvdW50XS5kZXNjLkluc3RhbmNlRGF0YVN0ZXBSYXRlID0gYXR0cmlidXRlc1tpXS5kaXZpc29y
OworICAgICAgICAgICAgaWxLZXkuZWxlbWVudENvdW50Kys7CisKKyAgICAgICAgICAgIHZlcnRl
eEJ1ZmZlcnNbaV0gPSBidWZmZXJTdG9yYWdlID8gYnVmZmVyU3RvcmFnZS0+Z2V0QnVmZmVyKEJV
RkZFUl9VU0FHRV9WRVJURVgpIDogdmVydGV4QnVmZmVyLT5nZXRCdWZmZXIoKTsKKyAgICAgICAg
ICAgIHZlcnRleEJ1ZmZlclNlcmlhbHNbaV0gPSBidWZmZXJTdG9yYWdlID8gYnVmZmVyU3RvcmFn
ZS0+Z2V0U2VyaWFsKCkgOiB2ZXJ0ZXhCdWZmZXItPmdldFNlcmlhbCgpOworICAgICAgICAgICAg
dmVydGV4U3RyaWRlc1tpXSA9IGF0dHJpYnV0ZXNbaV0uc3RyaWRlOworICAgICAgICAgICAgdmVy
dGV4T2Zmc2V0c1tpXSA9IGF0dHJpYnV0ZXNbaV0ub2Zmc2V0OworICAgICAgICB9CisgICAgfQor
CisgICAgSUQzRDExSW5wdXRMYXlvdXQgKmlucHV0TGF5b3V0ID0gTlVMTDsKKworICAgIElucHV0
TGF5b3V0TWFwOjppdGVyYXRvciBpID0gbUlucHV0TGF5b3V0TWFwLmZpbmQoaWxLZXkpOworICAg
IGlmIChpICE9IG1JbnB1dExheW91dE1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIGlucHV0TGF5
b3V0ID0gaS0+c2Vjb25kLmlucHV0TGF5b3V0OworICAgICAgICBpLT5zZWNvbmQubGFzdFVzZWRU
aW1lID0gbUNvdW50ZXIrKzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgU2hhZGVy
RXhlY3V0YWJsZTExICpzaGFkZXIgPSBTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VTaGFkZXJFeGVj
dXRhYmxlMTEocHJvZ3JhbUJpbmFyeS0+Z2V0VmVydGV4RXhlY3V0YWJsZSgpKTsKKworICAgICAg
ICBEM0QxMV9JTlBVVF9FTEVNRU5UX0RFU0MgZGVzY3NbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107
CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgaWxLZXkuZWxlbWVudENvdW50
OyArK2opCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlc2NzW2pdID0gaWxLZXkuZWxlbWVudHNb
al0uZGVzYzsKKyAgICAgICAgfQorCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+
Q3JlYXRlSW5wdXRMYXlvdXQoZGVzY3MsIGlsS2V5LmVsZW1lbnRDb3VudCwgc2hhZGVyLT5nZXRG
dW5jdGlvbigpLCBzaGFkZXItPmdldExlbmd0aCgpLCAmaW5wdXRMYXlvdXQpOworICAgICAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiRmFpbGVkIHRv
IGNyYXRlIGlucHV0IGxheW91dCwgcmVzdWx0OiAweCUwOHgiLCByZXN1bHQpOworICAgICAgICAg
ICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KG1JbnB1dExheW91dE1hcC5zaXplKCkgPj0ga01heElucHV0TGF5b3V0cykKKyAgICAgICAgewor
ICAgICAgICAgICAgVFJBQ0UoIk92ZXJmbG93ZWQgdGhlIGxpbWl0IG9mICV1IGlucHV0IGxheW91
dHMsIHJlbW92aW5nIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkICIKKyAgICAgICAgICAgICAgICAg
ICJ0byBtYWtlIHJvb20uIiwga01heElucHV0TGF5b3V0cyk7CisKKyAgICAgICAgICAgIElucHV0
TGF5b3V0TWFwOjppdGVyYXRvciBsZWFzdFJlY2VudGx5VXNlZCA9IG1JbnB1dExheW91dE1hcC5i
ZWdpbigpOworICAgICAgICAgICAgZm9yIChJbnB1dExheW91dE1hcDo6aXRlcmF0b3IgaSA9IG1J
bnB1dExheW91dE1hcC5iZWdpbigpOyBpICE9IG1JbnB1dExheW91dE1hcC5lbmQoKTsgaSsrKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChpLT5zZWNvbmQubGFzdFVzZWRUaW1l
IDwgbGVhc3RSZWNlbnRseVVzZWQtPnNlY29uZC5sYXN0VXNlZFRpbWUpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZCA9IGk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQt
PnNlY29uZC5pbnB1dExheW91dC0+UmVsZWFzZSgpOworICAgICAgICAgICAgbUlucHV0TGF5b3V0
TWFwLmVyYXNlKGxlYXN0UmVjZW50bHlVc2VkKTsKKyAgICAgICAgfQorCisgICAgICAgIElucHV0
TGF5b3V0Q291bnRlclBhaXIgaW5wdXRDb3VudGVyUGFpcjsKKyAgICAgICAgaW5wdXRDb3VudGVy
UGFpci5pbnB1dExheW91dCA9IGlucHV0TGF5b3V0OworICAgICAgICBpbnB1dENvdW50ZXJQYWly
Lmxhc3RVc2VkVGltZSA9IG1Db3VudGVyKys7CisKKyAgICAgICAgbUlucHV0TGF5b3V0TWFwLmlu
c2VydChzdGQ6Om1ha2VfcGFpcihpbEtleSwgaW5wdXRDb3VudGVyUGFpcikpOworICAgIH0KKwor
ICAgIGlmIChpbnB1dExheW91dCAhPSBtQ3VycmVudElMKQorICAgIHsKKyAgICAgICAgbURldmlj
ZUNvbnRleHQtPklBU2V0SW5wdXRMYXlvdXQoaW5wdXRMYXlvdXQpOworICAgICAgICBtQ3VycmVu
dElMID0gaW5wdXRMYXlvdXQ7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgeworICAgICAgICBpZiAodmVy
dGV4QnVmZmVyU2VyaWFsc1tpXSAhPSBtQ3VycmVudEJ1ZmZlcnNbaV0gfHwgdmVydGV4U3RyaWRl
c1tpXSAhPSBtQ3VycmVudFZlcnRleFN0cmlkZXNbaV0gfHwKKyAgICAgICAgICAgIHZlcnRleE9m
ZnNldHNbaV0gIT0gbUN1cnJlbnRWZXJ0ZXhPZmZzZXRzW2ldKQorICAgICAgICB7CisgICAgICAg
ICAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRWZXJ0ZXhCdWZmZXJzKGksIDEsICZ2ZXJ0ZXhCdWZm
ZXJzW2ldLCAmdmVydGV4U3RyaWRlc1tpXSwgJnZlcnRleE9mZnNldHNbaV0pOworICAgICAgICAg
ICAgbUN1cnJlbnRCdWZmZXJzW2ldID0gdmVydGV4QnVmZmVyU2VyaWFsc1tpXTsKKyAgICAgICAg
ICAgIG1DdXJyZW50VmVydGV4U3RyaWRlc1tpXSA9IHZlcnRleFN0cmlkZXNbaV07CisgICAgICAg
ICAgICBtQ3VycmVudFZlcnRleE9mZnNldHNbaV0gPSB2ZXJ0ZXhPZmZzZXRzW2ldOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIEdMX05PX0VSUk9SOworfQorCitzdGQ6OnNpemVfdCBJ
bnB1dExheW91dENhY2hlOjpoYXNoSW5wdXRMYXlvdXQoY29uc3QgSW5wdXRMYXlvdXRLZXkgJmlu
cHV0TGF5b3V0KQoreworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2VlZCA9IDB4REVB
REJFRUY7CisKKyAgICBzdGQ6OnNpemVfdCBoYXNoID0gMDsKKyAgICBNdXJtdXJIYXNoM194ODZf
MzIoaW5wdXRMYXlvdXQuYmVnaW4oKSwgaW5wdXRMYXlvdXQuZW5kKCkgLSBpbnB1dExheW91dC5i
ZWdpbigpLCBzZWVkLCAmaGFzaCk7CisgICAgcmV0dXJuIGhhc2g7Cit9CisKK2Jvb2wgSW5wdXRM
YXlvdXRDYWNoZTo6Y29tcGFyZUlucHV0TGF5b3V0cyhjb25zdCBJbnB1dExheW91dEtleSAmYSwg
Y29uc3QgSW5wdXRMYXlvdXRLZXkgJmIpCit7CisgICAgaWYgKGEuZWxlbWVudENvdW50ICE9IGIu
ZWxlbWVudENvdW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHJldHVybiBzdGQ6OmVxdWFsKGEuYmVnaW4oKSwgYS5lbmQoKSwgYi5iZWdpbigpKTsKK30KKwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9JbnB1dExheW91dENhY2hlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iYjFhOGVlYmNmN2E2Y2E5OTBjYWI5MzgyNTU4ZjMzOTc4MTQ3YTAwCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9JbnB1dExheW91dENhY2hlLmgKQEAgLTAsMCArMSw5NSBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
IElucHV0TGF5b3V0Q2FjaGUuaDogRGVmaW5lcyBJbnB1dExheW91dENhY2hlLCBhIGNsYXNzIHRo
YXQgYnVpbGRzIGFuZCBjYWNoZXMKKy8vIEQzRDExIGlucHV0IGxheW91dHMuCisKKyNpZm5kZWYg
TElCR0xFU1YyX1JFTkRFUkVSX0lOUFVUTEFZT1VUQ0FDSEVfSF8KKyNkZWZpbmUgTElCR0xFU1Yy
X1JFTkRFUkVSX0lOUFVUTEFZT1VUQ0FDSEVfSF8KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9Db25z
dGFudHMuaCIKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorCituYW1lc3BhY2UgZ2wK
K3sKK2NsYXNzIFByb2dyYW1CaW5hcnk7Cit9CisKK25hbWVzcGFjZSByeAoreworc3RydWN0IFRy
YW5zbGF0ZWRBdHRyaWJ1dGU7CisKK2NsYXNzIElucHV0TGF5b3V0Q2FjaGUKK3sKKyAgcHVibGlj
OgorICAgIElucHV0TGF5b3V0Q2FjaGUoKTsKKyAgICB2aXJ0dWFsIH5JbnB1dExheW91dENhY2hl
KCk7CisKKyAgICB2b2lkIGluaXRpYWxpemUoSUQzRDExRGV2aWNlICpkZXZpY2UsIElEM0QxMURl
dmljZUNvbnRleHQgKmNvbnRleHQpOworICAgIHZvaWQgY2xlYXIoKTsKKyAgICB2b2lkIG1hcmtE
aXJ0eSgpOworCisgICAgR0xlbnVtIGFwcGx5VmVydGV4QnVmZmVycyhUcmFuc2xhdGVkQXR0cmli
dXRlIGF0dHJpYnV0ZXNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSk7CisKKyAgcHJp
dmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oSW5wdXRMYXlvdXRDYWNoZSk7CisK
KyAgICBzdHJ1Y3QgSW5wdXRMYXlvdXRFbGVtZW50CisgICAgeworICAgICAgICBEM0QxMV9JTlBV
VF9FTEVNRU5UX0RFU0MgZGVzYzsKKyAgICAgICAgR0xlbnVtIGdsc2xFbGVtZW50VHlwZTsKKyAg
ICB9OworCisgICAgc3RydWN0IElucHV0TGF5b3V0S2V5CisgICAgeworICAgICAgICB1bnNpZ25l
ZCBpbnQgZWxlbWVudENvdW50OworICAgICAgICBJbnB1dExheW91dEVsZW1lbnQgZWxlbWVudHNb
Z2w6Ok1BWF9WRVJURVhfQVRUUklCU107CisKKyAgICAgICAgY29uc3QgY2hhciAqYmVnaW4oKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKj4oJmVsZW1lbnRDb3VudCk7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBjaGFy
ICplbmQoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyKj4oJmVsZW1lbnRzW2VsZW1lbnRDb3VudF0pOworICAgICAgICB9Cisg
ICAgfTsKKworICAgIHN0cnVjdCBJbnB1dExheW91dENvdW50ZXJQYWlyCisgICAgeworICAgICAg
ICBJRDNEMTFJbnB1dExheW91dCAqaW5wdXRMYXlvdXQ7CisgICAgICAgIHVuc2lnbmVkIGxvbmcg
bG9uZyBsYXN0VXNlZFRpbWU7CisgICAgfTsKKworICAgIElEM0QxMUlucHV0TGF5b3V0ICptQ3Vy
cmVudElMOworICAgIHVuc2lnbmVkIGludCBtQ3VycmVudEJ1ZmZlcnNbZ2w6Ok1BWF9WRVJURVhf
QVRUUklCU107CisgICAgVUlOVCBtQ3VycmVudFZlcnRleFN0cmlkZXNbZ2w6Ok1BWF9WRVJURVhf
QVRUUklCU107CisgICAgVUlOVCBtQ3VycmVudFZlcnRleE9mZnNldHNbZ2w6Ok1BWF9WRVJURVhf
QVRUUklCU107CisKKyAgICBzdGF0aWMgc3RkOjpzaXplX3QgaGFzaElucHV0TGF5b3V0KGNvbnN0
IElucHV0TGF5b3V0S2V5ICZpbnB1dExheW91dCk7CisgICAgc3RhdGljIGJvb2wgY29tcGFyZUlu
cHV0TGF5b3V0cyhjb25zdCBJbnB1dExheW91dEtleSAmYSwgY29uc3QgSW5wdXRMYXlvdXRLZXkg
JmIpOworCisgICAgdHlwZWRlZiBzdGQ6OnNpemVfdCAoKklucHV0TGF5b3V0SGFzaEZ1bmN0aW9u
KShjb25zdCBJbnB1dExheW91dEtleSAmKTsKKyAgICB0eXBlZGVmIGJvb2wgKCpJbnB1dExheW91
dEVxdWFsaXR5RnVuY3Rpb24pKGNvbnN0IElucHV0TGF5b3V0S2V5ICYsIGNvbnN0IElucHV0TGF5
b3V0S2V5ICYpOworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPElucHV0TGF5b3V0S2V5
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElucHV0TGF5b3V0Q291bnRlclBhaXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXRMYXlvdXRIYXNoRnVuY3Rpb24s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXRMYXlvdXRFcXVhbGl0eUZ1bmN0
aW9uPiBJbnB1dExheW91dE1hcDsKKyAgICBJbnB1dExheW91dE1hcCBtSW5wdXRMYXlvdXRNYXA7
CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGtNYXhJbnB1dExheW91dHM7CisKKyAg
ICB1bnNpZ25lZCBsb25nIGxvbmcgbUNvdW50ZXI7CisKKyAgICBJRDNEMTFEZXZpY2UgKm1EZXZp
Y2U7CisgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqbURldmljZUNvbnRleHQ7Cit9OworCit9CisK
KyNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfSU5QVVRMQVlPVVRDQUNIRV9IXwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9RdWVyeTExLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvUXVlcnkxMS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjRjMDMzMGExZTJjMmE0NzkxNGMz
NzlmYzczNTkxOTE1NzQyYTIzMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUXVlcnkxMS5jcHAKQEAgLTAsMCAr
MSwxMjIgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFF1
ZXJ5MTEuY3BwOiBEZWZpbmVzIHRoZSByeDo6UXVlcnkxMSBjbGFzcyB3aGljaCBpbXBsZW1lbnRz
IHJ4OjpRdWVyeUltcGwuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUXVl
cnkxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKKworbmFtZXNwYWNlIHJ4Cit7CisKK1F1ZXJ5
MTE6OlF1ZXJ5MTEocng6OlJlbmRlcmVyMTEgKnJlbmRlcmVyLCBHTGVudW0gdHlwZSkgOiBRdWVy
eUltcGwodHlwZSkKK3sKKyAgICBtUmVuZGVyZXIgPSByZW5kZXJlcjsKKyAgICBtUXVlcnkgPSBO
VUxMOworfQorCitRdWVyeTExOjp+UXVlcnkxMSgpCit7CisgICAgaWYgKG1RdWVyeSkKKyAgICB7
CisgICAgICAgIG1RdWVyeS0+UmVsZWFzZSgpOworICAgICAgICBtUXVlcnkgPSBOVUxMOworICAg
IH0KK30KKwordm9pZCBRdWVyeTExOjpiZWdpbigpCit7CisgICAgaWYgKG1RdWVyeSA9PSBOVUxM
KQorICAgIHsKKyAgICAgICAgRDNEMTFfUVVFUllfREVTQyBxdWVyeURlc2M7CisgICAgICAgIHF1
ZXJ5RGVzYy5RdWVyeSA9IEQzRDExX1FVRVJZX09DQ0xVU0lPTjsKKyAgICAgICAgcXVlcnlEZXNj
Lk1pc2NGbGFncyA9IDA7CisKKyAgICAgICAgaWYgKEZBSUxFRChtUmVuZGVyZXItPmdldERldmlj
ZSgpLT5DcmVhdGVRdWVyeSgmcXVlcnlEZXNjLCAmbVF1ZXJ5KSkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKS0+QmVnaW4obVF1ZXJ5KTsK
K30KKwordm9pZCBRdWVyeTExOjplbmQoKQoreworICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
IH0KKworICAgIG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpLT5FbmQobVF1ZXJ5KTsKKwor
ICAgIG1TdGF0dXMgPSBHTF9GQUxTRTsKKyAgICBtUmVzdWx0ID0gR0xfRkFMU0U7Cit9CisKK0dM
dWludCBRdWVyeTExOjpnZXRSZXN1bHQoKQoreworICAgIGlmIChtUXVlcnkgIT0gTlVMTCkKKyAg
ICB7CisgICAgICAgIHdoaWxlICghdGVzdFF1ZXJ5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IFNsZWVwKDApOworICAgICAgICAgICAgLy8gZXhwbGljaXRseSBjaGVjayBmb3IgZGV2aWNlIGxv
c3MsIHNvbWUgZHJpdmVycyBzZWVtIHRvIHJldHVybiBTX0ZBTFNFCisgICAgICAgICAgICAvLyBp
ZiB0aGUgZGV2aWNlIGlzIGxvc3QKKyAgICAgICAgICAgIGlmIChtUmVuZGVyZXItPnRlc3REZXZp
Y2VMb3N0KHRydWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gbVJlc3VsdDsKK30KKworR0xib29sZWFuIFF1ZXJ5MTE6OmlzUmVz
dWx0QXZhaWxhYmxlKCkKK3sKKyAgICBpZiAobVF1ZXJ5ICE9IE5VTEwpCisgICAgeworICAgICAg
ICB0ZXN0UXVlcnkoKTsKKyAgICB9CisKKyAgICByZXR1cm4gbVN0YXR1czsKK30KKworR0xib29s
ZWFuIFF1ZXJ5MTE6OnRlc3RRdWVyeSgpCit7CisgICAgaWYgKG1RdWVyeSAhPSBOVUxMICYmIG1T
dGF0dXMgIT0gR0xfVFJVRSkKKyAgICB7CisgICAgICAgIFVJTlQ2NCBudW1QaXhlbHMgPSAwOwor
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpLT5H
ZXREYXRhKG1RdWVyeSwgJm51bVBpeGVscywgc2l6ZW9mKFVJTlQ2NCksIDApOworICAgICAgICBp
ZiAocmVzdWx0ID09IFNfT0spCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TdGF0dXMgPSBHTF9U
UlVFOworCisgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOgorICAgICAgICAgICAg
ICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOgorICAgICAgICAg
ICAgICAgIG1SZXN1bHQgPSAobnVtUGl4ZWxzID4gMCkgPyBHTF9UUlVFIDogR0xfRkFMU0U7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBl
bHNlIGlmIChtUmVuZGVyZXItPnRlc3REZXZpY2VMb3N0KHRydWUpKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX1RSVUUpOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1TdGF0dXM7CisgICAgfQorCisgICAgcmV0dXJuIEdM
X1RSVUU7IC8vIHByZXZlbnQgYmxvY2tpbmcgd2hlbiBxdWVyeSBpcyBudWxsCit9CisKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkMTEvUXVlcnkxMS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9RdWVyeTExLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGEwM2RlNzdjYTMyODU1ZGJjZDE5
YjEzYmM0NGQ5NzgzNzk0YTY3NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUXVlcnkxMS5oCkBAIC0wLDAgKzEs
NDAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBRdWVyeTExLmg6IERlZmluZXMgdGhlIHJ4OjpRdWVy
eTExIGNsYXNzIHdoaWNoIGltcGxlbWVudHMgcng6OlF1ZXJ5SW1wbC4KKworI2lmbmRlZiBMSUJH
TEVTVjJfUkVOREVSRVJfUVVFUlkxMV9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfUVVF
UlkxMV9IXworCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1F1ZXJ5SW1wbC5oIgorCitu
YW1lc3BhY2UgcngKK3sKK2NsYXNzIFJlbmRlcmVyMTE7CisKK2NsYXNzIFF1ZXJ5MTEgOiBwdWJs
aWMgUXVlcnlJbXBsCit7CisgIHB1YmxpYzoKKyAgICBRdWVyeTExKHJ4OjpSZW5kZXJlcjExICpy
ZW5kZXJlciwgR0xlbnVtIHR5cGUpOworICAgIHZpcnR1YWwgflF1ZXJ5MTEoKTsKKworICAgIHZv
aWQgYmVnaW4oKTsKKyAgICB2b2lkIGVuZCgpOworICAgIEdMdWludCBnZXRSZXN1bHQoKTsKKyAg
ICBHTGJvb2xlYW4gaXNSZXN1bHRBdmFpbGFibGUoKTsKKworICBwcml2YXRlOgorICAgIERJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihRdWVyeTExKTsKKworICAgIEdMYm9vbGVhbiB0ZXN0UXVlcnko
KTsKKworICAgIHJ4OjpSZW5kZXJlcjExICptUmVuZGVyZXI7CisgICAgSUQzRDExUXVlcnkgKm1R
dWVyeTsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9RVUVSWTExX0hf
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL1JlbmRlclN0YXRlQ2FjaGUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wMDQ3ZTA0ZTgxODBhZjlmMWMyYzMxNDBhN2IwMzJiMzJlYTI1MDAxCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmNwcApAQCAtMCwwICsxLDQzOCBAQAorI2luY2x1ZGUgInBy
ZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBSZW5kZXJTdGF0ZUNhY2hlLmNw
cDogRGVmaW5lcyByeDo6UmVuZGVyU3RhdGVDYWNoZSwgYSBjYWNoZSBvZiBEaXJlY3QzRCByZW5k
ZXIKKy8vIHN0YXRlIG9iamVjdHMuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvUmVuZGVyU3RhdGVDYWNoZS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9yZW5kZXJlcjExX3V0aWxzLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2luY2x1ZGUgInRo
aXJkX3BhcnR5L211cm11cmhhc2gvTXVybXVySGFzaDMuaCIKKworbmFtZXNwYWNlIHJ4Cit7CisK
Ky8vIE1TRE4ncyBkb2N1bWVudGF0aW9uIG9mIElEM0QxMURldmljZTo6Q3JlYXRlQmxlbmRTdGF0
ZSwgSUQzRDExRGV2aWNlOjpDcmVhdGVSYXN0ZXJpemVyU3RhdGUsCisvLyBJRDNEMTFEZXZpY2U6
OkNyZWF0ZURlcHRoU3RlbmNpbFN0YXRlIGFuZCBJRDNEMTFEZXZpY2U6OkNyZWF0ZVNhbXBsZXJT
dGF0ZSBjbGFpbXMgdGhlIG1heGltdW0KKy8vIG51bWJlciBvZiB1bmlxdWUgc3RhdGVzIG9mIGVh
Y2ggdHlwZSBhbiBhcHBsaWNhdGlvbiBjYW4gY3JlYXRlIGlzIDQwOTYKK2NvbnN0IHVuc2lnbmVk
IGludCBSZW5kZXJTdGF0ZUNhY2hlOjprTWF4QmxlbmRTdGF0ZXMgPSA0MDk2OworY29uc3QgdW5z
aWduZWQgaW50IFJlbmRlclN0YXRlQ2FjaGU6OmtNYXhSYXN0ZXJpemVyU3RhdGVzID0gNDA5NjsK
K2NvbnN0IHVuc2lnbmVkIGludCBSZW5kZXJTdGF0ZUNhY2hlOjprTWF4RGVwdGhTdGVuY2lsU3Rh
dGVzID0gNDA5NjsKK2NvbnN0IHVuc2lnbmVkIGludCBSZW5kZXJTdGF0ZUNhY2hlOjprTWF4U2Ft
cGxlclN0YXRlcyA9IDQwOTY7CisKK1JlbmRlclN0YXRlQ2FjaGU6OlJlbmRlclN0YXRlQ2FjaGUo
KSA6IG1EZXZpY2UoTlVMTCksIG1Db3VudGVyKDApLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbUJsZW5kU3RhdGVDYWNoZShrTWF4QmxlbmRTdGF0ZXMsIGhhc2hCbGVu
ZFN0YXRlLCBjb21wYXJlQmxlbmRTdGF0ZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbVJhc3Rlcml6ZXJTdGF0ZUNhY2hlKGtNYXhSYXN0ZXJpemVyU3RhdGVzLCBo
YXNoUmFzdGVyaXplclN0YXRlLCBjb21wYXJlUmFzdGVyaXplclN0YXRlcyksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZShrTWF4
RGVwdGhTdGVuY2lsU3RhdGVzLCBoYXNoRGVwdGhTdGVuY2lsU3RhdGUsIGNvbXBhcmVEZXB0aFN0
ZW5jaWxTdGF0ZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNh
bXBsZXJTdGF0ZUNhY2hlKGtNYXhTYW1wbGVyU3RhdGVzLCBoYXNoU2FtcGxlclN0YXRlLCBjb21w
YXJlU2FtcGxlclN0YXRlcykKK3sKK30KKworUmVuZGVyU3RhdGVDYWNoZTo6flJlbmRlclN0YXRl
Q2FjaGUoKQoreworICAgIGNsZWFyKCk7Cit9CisKK3ZvaWQgUmVuZGVyU3RhdGVDYWNoZTo6aW5p
dGlhbGl6ZShJRDNEMTFEZXZpY2UgKmRldmljZSkKK3sKKyAgICBjbGVhcigpOworICAgIG1EZXZp
Y2UgPSBkZXZpY2U7Cit9CisKK3ZvaWQgUmVuZGVyU3RhdGVDYWNoZTo6Y2xlYXIoKQoreworICAg
IGZvciAoQmxlbmRTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1CbGVuZFN0YXRlQ2FjaGUuYmVnaW4o
KTsgaSAhPSBtQmxlbmRTdGF0ZUNhY2hlLmVuZCgpOyBpKyspCisgICAgeworICAgICAgICBpLT5z
ZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKKyAgICB9CisgICAgbUJsZW5kU3RhdGVDYWNoZS5jbGVh
cigpOworCisgICAgZm9yIChSYXN0ZXJpemVyU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtUmFzdGVy
aXplclN0YXRlQ2FjaGUuYmVnaW4oKTsgaSAhPSBtUmFzdGVyaXplclN0YXRlQ2FjaGUuZW5kKCk7
IGkrKykKKyAgICB7CisgICAgICAgIGktPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOworICAgIH0K
KyAgICBtUmFzdGVyaXplclN0YXRlQ2FjaGUuY2xlYXIoKTsKKworICAgIGZvciAoRGVwdGhTdGVu
Y2lsU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5iZWdpbigp
OyBpICE9IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmVuZCgpOyBpKyspCisgICAgeworICAgICAg
ICBpLT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKKyAgICB9CisgICAgbURlcHRoU3RlbmNpbFN0
YXRlQ2FjaGUuY2xlYXIoKTsKKworICAgIGZvciAoU2FtcGxlclN0YXRlTWFwOjppdGVyYXRvciBp
ID0gbVNhbXBsZXJTdGF0ZUNhY2hlLmJlZ2luKCk7IGkgIT0gbVNhbXBsZXJTdGF0ZUNhY2hlLmVu
ZCgpOyBpKyspCisgICAgeworICAgICAgICBpLT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKKyAg
ICB9CisgICAgbVNhbXBsZXJTdGF0ZUNhY2hlLmNsZWFyKCk7Cit9CisKK3N0ZDo6c2l6ZV90IFJl
bmRlclN0YXRlQ2FjaGU6Omhhc2hCbGVuZFN0YXRlKGNvbnN0IEJsZW5kU3RhdGVLZXkgJmJsZW5k
U3RhdGUpCit7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZWVkID0gMHhBQkNERUY5
ODsKKworICAgIHN0ZDo6c2l6ZV90IGhhc2ggPSAwOworICAgIE11cm11ckhhc2gzX3g4Nl8zMigm
YmxlbmRTdGF0ZSwgc2l6ZW9mKEJsZW5kU3RhdGVLZXkpLCBzZWVkLCAmaGFzaCk7CisgICAgcmV0
dXJuIGhhc2g7Cit9CisKK2Jvb2wgUmVuZGVyU3RhdGVDYWNoZTo6Y29tcGFyZUJsZW5kU3RhdGVz
KGNvbnN0IEJsZW5kU3RhdGVLZXkgJmEsIGNvbnN0IEJsZW5kU3RhdGVLZXkgJmIpCit7CisgICAg
cmV0dXJuIG1lbWNtcCgmYSwgJmIsIHNpemVvZihnbDo6QmxlbmRTdGF0ZSkpID09IDA7Cit9CisK
K0lEM0QxMUJsZW5kU3RhdGUgKlJlbmRlclN0YXRlQ2FjaGU6OmdldEJsZW5kU3RhdGUoZ2w6OkZy
YW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUp
Cit7CisgICAgaWYgKCFtRGV2aWNlKQorICAgIHsKKyAgICAgICAgRVJSKCJSZW5kZXJTdGF0ZUNh
Y2hlIGlzIG5vdCBpbml0aWFsaXplZC4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQor
CisgICAgYm9vbCBtcnQgPSBmYWxzZTsKKworICAgIEJsZW5kU3RhdGVLZXkga2V5ID0geyAwIH07
CisgICAga2V5LmJsZW5kU3RhdGUgPSBibGVuZFN0YXRlOworICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgRDNEMTFfU0lNVUxUQU5FT1VTX1JFTkRFUl9UQVJHRVRfQ09VTlQ7IGkrKykK
KyAgICB7CisgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlckJ1ZmZlciA9IGZyYW1lYnVm
ZmVyLT5nZXRDb2xvcmJ1ZmZlcihpKTsKKyAgICAgICAgaWYgKHJlbmRlckJ1ZmZlcikKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKGkgPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG1ydCA9IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEdMZW51bSBpbnRl
cm5hbEZvcm1hdCA9IHJlbmRlckJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICAgICAg
ICAgIGtleS5ydENoYW5uZWxzW2ldWzBdID0gZ2w6OkdldFJlZFNpemUoaW50ZXJuYWxGb3JtYXQp
ID4gMDsKKyAgICAgICAgICAgIGtleS5ydENoYW5uZWxzW2ldWzFdID0gZ2w6OkdldEdyZWVuU2l6
ZShpbnRlcm5hbEZvcm1hdCkgPiAwOworICAgICAgICAgICAga2V5LnJ0Q2hhbm5lbHNbaV1bMl0g
PSBnbDo6R2V0Qmx1ZVNpemUoaW50ZXJuYWxGb3JtYXQpID4gMDs7CisgICAgICAgICAgICBrZXku
cnRDaGFubmVsc1tpXVszXSA9IGdsOjpHZXRBbHBoYVNpemUoaW50ZXJuYWxGb3JtYXQpID4gMDsK
KyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGtleS5ydENo
YW5uZWxzW2ldWzBdID0gZmFsc2U7CisgICAgICAgICAgICBrZXkucnRDaGFubmVsc1tpXVsxXSA9
IGZhbHNlOworICAgICAgICAgICAga2V5LnJ0Q2hhbm5lbHNbaV1bMl0gPSBmYWxzZTsKKyAgICAg
ICAgICAgIGtleS5ydENoYW5uZWxzW2ldWzNdID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBCbGVuZFN0YXRlTWFwOjppdGVyYXRvciBpID0gbUJsZW5kU3RhdGVDYWNoZS5maW5kKGtl
eSk7CisgICAgaWYgKGkgIT0gbUJsZW5kU3RhdGVDYWNoZS5lbmQoKSkKKyAgICB7CisgICAgICAg
IEJsZW5kU3RhdGVDb3VudGVyUGFpciAmc3RhdGUgPSBpLT5zZWNvbmQ7CisgICAgICAgIHN0YXRl
LnNlY29uZCA9IG1Db3VudGVyKys7CisgICAgICAgIHJldHVybiBzdGF0ZS5maXJzdDsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKG1CbGVuZFN0YXRlQ2FjaGUuc2l6ZSgpID49
IGtNYXhCbGVuZFN0YXRlcykKKyAgICAgICAgeworICAgICAgICAgICAgVFJBQ0UoIk92ZXJmbG93
ZWQgdGhlIGxpbWl0IG9mICV1IGJsZW5kIHN0YXRlcywgcmVtb3ZpbmcgdGhlIGxlYXN0IHJlY2Vu
dGx5IHVzZWQgIgorICAgICAgICAgICAgICAgICAgInRvIG1ha2Ugcm9vbS4iLCBrTWF4QmxlbmRT
dGF0ZXMpOworCisgICAgICAgICAgICBCbGVuZFN0YXRlTWFwOjppdGVyYXRvciBsZWFzdFJlY2Vu
dGx5VXNlZCA9IG1CbGVuZFN0YXRlQ2FjaGUuYmVnaW4oKTsKKyAgICAgICAgICAgIGZvciAoQmxl
bmRTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1CbGVuZFN0YXRlQ2FjaGUuYmVnaW4oKTsgaSAhPSBt
QmxlbmRTdGF0ZUNhY2hlLmVuZCgpOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgaWYgKGktPnNlY29uZC5zZWNvbmQgPCBsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLnNlY29u
ZCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGxlYXN0UmVjZW50bHlV
c2VkID0gaTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBs
ZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmZpcnN0LT5SZWxlYXNlKCk7CisgICAgICAgICAgICBt
QmxlbmRTdGF0ZUNhY2hlLmVyYXNlKGxlYXN0UmVjZW50bHlVc2VkKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIENyZWF0ZSBhIG5ldyBibGVuZCBzdGF0ZSBhbmQgaW5zZXJ0IGl0IGludG8gdGhl
IGNhY2hlCisgICAgICAgIEQzRDExX0JMRU5EX0RFU0MgYmxlbmREZXNjID0geyAwIH07CisgICAg
ICAgIGJsZW5kRGVzYy5BbHBoYVRvQ292ZXJhZ2VFbmFibGUgPSBibGVuZFN0YXRlLnNhbXBsZUFs
cGhhVG9Db3ZlcmFnZTsKKyAgICAgICAgYmxlbmREZXNjLkluZGVwZW5kZW50QmxlbmRFbmFibGUg
PSBtcnQgPyBUUlVFIDogRkFMU0U7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBEM0QxMV9TSU1VTFRBTkVPVVNfUkVOREVSX1RBUkdFVF9DT1VOVDsgaSsrKQorICAgICAg
ICB7CisgICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX0JMRU5EX0RFU0MgJnJ0QmxlbmQg
PSBibGVuZERlc2MuUmVuZGVyVGFyZ2V0W2ldOworCisgICAgICAgICAgICBydEJsZW5kLkJsZW5k
RW5hYmxlID0gYmxlbmRTdGF0ZS5ibGVuZDsKKyAgICAgICAgICAgIGlmIChibGVuZFN0YXRlLmJs
ZW5kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJ0QmxlbmQuU3JjQmxlbmQgPSBn
bF9kM2QxMTo6Q29udmVydEJsZW5kRnVuYyhibGVuZFN0YXRlLnNvdXJjZUJsZW5kUkdCLCBmYWxz
ZSk7CisgICAgICAgICAgICAgICAgcnRCbGVuZC5EZXN0QmxlbmQgPSBnbF9kM2QxMTo6Q29udmVy
dEJsZW5kRnVuYyhibGVuZFN0YXRlLmRlc3RCbGVuZFJHQiwgZmFsc2UpOworICAgICAgICAgICAg
ICAgIHJ0QmxlbmQuQmxlbmRPcCA9IGdsX2QzZDExOjpDb252ZXJ0QmxlbmRPcChibGVuZFN0YXRl
LmJsZW5kRXF1YXRpb25SR0IpOworCisgICAgICAgICAgICAgICAgcnRCbGVuZC5TcmNCbGVuZEFs
cGhhID0gZ2xfZDNkMTE6OkNvbnZlcnRCbGVuZEZ1bmMoYmxlbmRTdGF0ZS5zb3VyY2VCbGVuZEFs
cGhhLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBydEJsZW5kLkRlc3RCbGVuZEFscGhhID0gZ2xf
ZDNkMTE6OkNvbnZlcnRCbGVuZEZ1bmMoYmxlbmRTdGF0ZS5kZXN0QmxlbmRBbHBoYSwgdHJ1ZSk7
CisgICAgICAgICAgICAgICAgcnRCbGVuZC5CbGVuZE9wQWxwaGEgPSBnbF9kM2QxMTo6Q29udmVy
dEJsZW5kT3AoYmxlbmRTdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBydEJsZW5kLlJlbmRlclRhcmdldFdyaXRlTWFzayA9IGdsX2QzZDExOjpD
b252ZXJ0Q29sb3JNYXNrKGtleS5ydENoYW5uZWxzW2ldWzBdICYmIGJsZW5kU3RhdGUuY29sb3JN
YXNrUmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBrZXkucnRDaGFubmVsc1tpXVsxXSAmJiBibGVuZFN0YXRl
LmNvbG9yTWFza0dyZWVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkucnRDaGFubmVsc1tpXVsyXSAmJiBi
bGVuZFN0YXRlLmNvbG9yTWFza0JsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleS5ydENoYW5uZWxzW2ld
WzNdICYmIGJsZW5kU3RhdGUuY29sb3JNYXNrQWxwaGEpOworICAgICAgICB9CisKKyAgICAgICAg
SUQzRDExQmxlbmRTdGF0ZSAqZHgxMUJsZW5kU3RhdGUgPSBOVUxMOworICAgICAgICBIUkVTVUxU
IHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUJsZW5kU3RhdGUoJmJsZW5kRGVzYywgJmR4MTFCbGVu
ZFN0YXRlKTsKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpIHx8ICFkeDExQmxlbmRTdGF0ZSkK
KyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJVbmFibGUgdG8gY3JlYXRlIGEgSUQzRDExQmxl
bmRTdGF0ZSwgSFJFU1VMVDogMHglWC4iLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIE5V
TEw7CisgICAgICAgIH0KKworICAgICAgICBtQmxlbmRTdGF0ZUNhY2hlLmluc2VydChzdGQ6Om1h
a2VfcGFpcihrZXksIHN0ZDo6bWFrZV9wYWlyKGR4MTFCbGVuZFN0YXRlLCBtQ291bnRlcisrKSkp
OworCisgICAgICAgIHJldHVybiBkeDExQmxlbmRTdGF0ZTsKKyAgICB9Cit9CisKK3N0ZDo6c2l6
ZV90IFJlbmRlclN0YXRlQ2FjaGU6Omhhc2hSYXN0ZXJpemVyU3RhdGUoY29uc3QgUmFzdGVyaXpl
clN0YXRlS2V5ICZyYXN0ZXJTdGF0ZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50
IHNlZWQgPSAweEFCQ0RFRjk4OworCisgICAgc3RkOjpzaXplX3QgaGFzaCA9IDA7CisgICAgTXVy
bXVySGFzaDNfeDg2XzMyKCZyYXN0ZXJTdGF0ZSwgc2l6ZW9mKFJhc3Rlcml6ZXJTdGF0ZUtleSks
IHNlZWQsICZoYXNoKTsKKyAgICByZXR1cm4gaGFzaDsKK30KKworYm9vbCBSZW5kZXJTdGF0ZUNh
Y2hlOjpjb21wYXJlUmFzdGVyaXplclN0YXRlcyhjb25zdCBSYXN0ZXJpemVyU3RhdGVLZXkgJmEs
IGNvbnN0IFJhc3Rlcml6ZXJTdGF0ZUtleSAmYikKK3sKKyAgICByZXR1cm4gbWVtY21wKCZhLCAm
Yiwgc2l6ZW9mKFJhc3Rlcml6ZXJTdGF0ZUtleSkpID09IDA7Cit9CisKK0lEM0QxMVJhc3Rlcml6
ZXJTdGF0ZSAqUmVuZGVyU3RhdGVDYWNoZTo6Z2V0UmFzdGVyaXplclN0YXRlKGNvbnN0IGdsOjpS
YXN0ZXJpemVyU3RhdGUgJnJhc3RlclN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzY2lzc29yRW5hYmxlZCwgdW5z
aWduZWQgaW50IGRlcHRoU2l6ZSkKK3sKKyAgICBpZiAoIW1EZXZpY2UpCisgICAgeworICAgICAg
ICBFUlIoIlJlbmRlclN0YXRlQ2FjaGUgaXMgbm90IGluaXRpYWxpemVkLiIpOworICAgICAgICBy
ZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBSYXN0ZXJpemVyU3RhdGVLZXkga2V5OworICAgIGtl
eS5yYXN0ZXJpemVyU3RhdGUgPSByYXN0ZXJTdGF0ZTsKKyAgICBrZXkuc2Npc3NvckVuYWJsZWQg
PSBzY2lzc29yRW5hYmxlZDsKKyAgICBrZXkuZGVwdGhTaXplID0gZGVwdGhTaXplOworCisgICAg
UmFzdGVyaXplclN0YXRlTWFwOjppdGVyYXRvciBpID0gbVJhc3Rlcml6ZXJTdGF0ZUNhY2hlLmZp
bmQoa2V5KTsKKyAgICBpZiAoaSAhPSBtUmFzdGVyaXplclN0YXRlQ2FjaGUuZW5kKCkpCisgICAg
eworICAgICAgICBSYXN0ZXJpemVyU3RhdGVDb3VudGVyUGFpciAmc3RhdGUgPSBpLT5zZWNvbmQ7
CisgICAgICAgIHN0YXRlLnNlY29uZCA9IG1Db3VudGVyKys7CisgICAgICAgIHJldHVybiBzdGF0
ZS5maXJzdDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKG1SYXN0ZXJpemVy
U3RhdGVDYWNoZS5zaXplKCkgPj0ga01heFJhc3Rlcml6ZXJTdGF0ZXMpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIFRSQUNFKCJPdmVyZmxvd2VkIHRoZSBsaW1pdCBvZiAldSByYXN0ZXJpemVyIHN0
YXRlcywgcmVtb3ZpbmcgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWQgIgorICAgICAgICAgICAgICAg
ICAgInRvIG1ha2Ugcm9vbS4iLCBrTWF4UmFzdGVyaXplclN0YXRlcyk7CisKKyAgICAgICAgICAg
IFJhc3Rlcml6ZXJTdGF0ZU1hcDo6aXRlcmF0b3IgbGVhc3RSZWNlbnRseVVzZWQgPSBtUmFzdGVy
aXplclN0YXRlQ2FjaGUuYmVnaW4oKTsKKyAgICAgICAgICAgIGZvciAoUmFzdGVyaXplclN0YXRl
TWFwOjppdGVyYXRvciBpID0gbVJhc3Rlcml6ZXJTdGF0ZUNhY2hlLmJlZ2luKCk7IGkgIT0gbVJh
c3Rlcml6ZXJTdGF0ZUNhY2hlLmVuZCgpOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgaWYgKGktPnNlY29uZC5zZWNvbmQgPCBsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLnNl
Y29uZCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGxlYXN0UmVjZW50
bHlVc2VkID0gaTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmZpcnN0LT5SZWxlYXNlKCk7CisgICAgICAgICAg
ICBtUmFzdGVyaXplclN0YXRlQ2FjaGUuZXJhc2UobGVhc3RSZWNlbnRseVVzZWQpOworICAgICAg
ICB9CisKKyAgICAgICAgRDNEMTFfQ1VMTF9NT0RFIGN1bGxNb2RlID0gZ2xfZDNkMTE6OkNvbnZl
cnRDdWxsTW9kZShyYXN0ZXJTdGF0ZS5jdWxsRmFjZSwgcmFzdGVyU3RhdGUuY3VsbE1vZGUpOwor
CisgICAgICAgIC8vIERpc2FibGUgY3VsbGluZyBpZiBkcmF3aW5nIHBvaW50cworICAgICAgICBp
ZiAocmFzdGVyU3RhdGUucG9pbnREcmF3TW9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgY3Vs
bE1vZGUgPSBEM0QxMV9DVUxMX05PTkU7CisgICAgICAgIH0KKworICAgICAgICBEM0QxMV9SQVNU
RVJJWkVSX0RFU0MgcmFzdGVyRGVzYzsKKyAgICAgICAgcmFzdGVyRGVzYy5GaWxsTW9kZSA9IEQz
RDExX0ZJTExfU09MSUQ7CisgICAgICAgIHJhc3RlckRlc2MuQ3VsbE1vZGUgPSBjdWxsTW9kZTsK
KyAgICAgICAgcmFzdGVyRGVzYy5Gcm9udENvdW50ZXJDbG9ja3dpc2UgPSAocmFzdGVyU3RhdGUu
ZnJvbnRGYWNlID09IEdMX0NDVykgPyBGQUxTRTogVFJVRTsKKyAgICAgICAgcmFzdGVyRGVzYy5E
ZXB0aEJpYXMgPSBsZGV4cChyYXN0ZXJTdGF0ZS5wb2x5Z29uT2Zmc2V0VW5pdHMsIC1zdGF0aWNf
Y2FzdDxpbnQ+KGRlcHRoU2l6ZSkpOworICAgICAgICByYXN0ZXJEZXNjLkRlcHRoQmlhc0NsYW1w
ID0gMC4wZjsgLy8gTVNETiBkb2N1bWVudGF0aW9uIG9mIERlcHRoQmlhc0NsYW1wIGltcGxpZXMg
YSB2YWx1ZSBvZiB6ZXJvIHdpbGwgcHJlZm9ybSBubyBjbGFtcGluZywgbXVzdCBiZSB0ZXN0ZWQg
dGhvdWdoLgorICAgICAgICByYXN0ZXJEZXNjLlNsb3BlU2NhbGVkRGVwdGhCaWFzID0gcmFzdGVy
U3RhdGUucG9seWdvbk9mZnNldEZhY3RvcjsKKyAgICAgICAgcmFzdGVyRGVzYy5EZXB0aENsaXBF
bmFibGUgPSBUUlVFOworICAgICAgICByYXN0ZXJEZXNjLlNjaXNzb3JFbmFibGUgPSBzY2lzc29y
RW5hYmxlZCA/IFRSVUUgOiBGQUxTRTsKKyAgICAgICAgcmFzdGVyRGVzYy5NdWx0aXNhbXBsZUVu
YWJsZSA9IHJhc3RlclN0YXRlLm11bHRpU2FtcGxlOworICAgICAgICByYXN0ZXJEZXNjLkFudGlh
bGlhc2VkTGluZUVuYWJsZSA9IEZBTFNFOworCisgICAgICAgIElEM0QxMVJhc3Rlcml6ZXJTdGF0
ZSAqZHgxMVJhc3Rlcml6ZXJTdGF0ZSA9IE5VTEw7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
bURldmljZS0+Q3JlYXRlUmFzdGVyaXplclN0YXRlKCZyYXN0ZXJEZXNjLCAmZHgxMVJhc3Rlcml6
ZXJTdGF0ZSk7CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSB8fCAhZHgxMVJhc3Rlcml6ZXJT
dGF0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJVbmFibGUgdG8gY3JlYXRlIGEgSUQz
RDExUmFzdGVyaXplclN0YXRlLCBIUkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7CisgICAgICAgICAg
ICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIG1SYXN0ZXJpemVyU3RhdGVDYWNo
ZS5pbnNlcnQoc3RkOjptYWtlX3BhaXIoa2V5LCBzdGQ6Om1ha2VfcGFpcihkeDExUmFzdGVyaXpl
clN0YXRlLCBtQ291bnRlcisrKSkpOworCisgICAgICAgIHJldHVybiBkeDExUmFzdGVyaXplclN0
YXRlOworICAgIH0KK30KKworc3RkOjpzaXplX3QgUmVuZGVyU3RhdGVDYWNoZTo6aGFzaERlcHRo
U3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmZHNTdGF0ZSkKK3sKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNlZWQgPSAweEFCQ0RFRjk4OworCisgICAgc3Rk
OjpzaXplX3QgaGFzaCA9IDA7CisgICAgTXVybXVySGFzaDNfeDg2XzMyKCZkc1N0YXRlLCBzaXpl
b2YoZ2w6OkRlcHRoU3RlbmNpbFN0YXRlKSwgc2VlZCwgJmhhc2gpOworICAgIHJldHVybiBoYXNo
OworfQorCitib29sIFJlbmRlclN0YXRlQ2FjaGU6OmNvbXBhcmVEZXB0aFN0ZW5jaWxTdGF0ZXMo
Y29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZhLCBjb25zdCBnbDo6RGVwdGhTdGVuY2lsU3Rh
dGUgJmIpCit7CisgICAgcmV0dXJuIG1lbWNtcCgmYSwgJmIsIHNpemVvZihnbDo6RGVwdGhTdGVu
Y2lsU3RhdGUpKSA9PSAwOworfQorCitJRDNEMTFEZXB0aFN0ZW5jaWxTdGF0ZSAqUmVuZGVyU3Rh
dGVDYWNoZTo6Z2V0RGVwdGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRl
ICZkc1N0YXRlKQoreworICAgIGlmICghbURldmljZSkKKyAgICB7CisgICAgICAgIEVSUigiUmVu
ZGVyU3RhdGVDYWNoZSBpcyBub3QgaW5pdGlhbGl6ZWQuIik7CisgICAgICAgIHJldHVybiBOVUxM
OworICAgIH0KKworICAgIERlcHRoU3RlbmNpbFN0YXRlTWFwOjppdGVyYXRvciBpID0gbURlcHRo
U3RlbmNpbFN0YXRlQ2FjaGUuZmluZChkc1N0YXRlKTsKKyAgICBpZiAoaSAhPSBtRGVwdGhTdGVu
Y2lsU3RhdGVDYWNoZS5lbmQoKSkKKyAgICB7CisgICAgICAgIERlcHRoU3RlbmNpbFN0YXRlQ291
bnRlclBhaXIgJnN0YXRlID0gaS0+c2Vjb25kOworICAgICAgICBzdGF0ZS5zZWNvbmQgPSBtQ291
bnRlcisrOworICAgICAgICByZXR1cm4gc3RhdGUuZmlyc3Q7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIGlmIChtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5zaXplKCkgPj0ga01heERl
cHRoU3RlbmNpbFN0YXRlcykKKyAgICAgICAgeworICAgICAgICAgICAgVFJBQ0UoIk92ZXJmbG93
ZWQgdGhlIGxpbWl0IG9mICV1IGRlcHRoIHN0ZW5jaWwgc3RhdGVzLCByZW1vdmluZyB0aGUgbGVh
c3QgcmVjZW50bHkgdXNlZCAiCisgICAgICAgICAgICAgICAgICAidG8gbWFrZSByb29tLiIsIGtN
YXhEZXB0aFN0ZW5jaWxTdGF0ZXMpOworCisgICAgICAgICAgICBEZXB0aFN0ZW5jaWxTdGF0ZU1h
cDo6aXRlcmF0b3IgbGVhc3RSZWNlbnRseVVzZWQgPSBtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5i
ZWdpbigpOworICAgICAgICAgICAgZm9yIChEZXB0aFN0ZW5jaWxTdGF0ZU1hcDo6aXRlcmF0b3Ig
aSA9IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmJlZ2luKCk7IGkgIT0gbURlcHRoU3RlbmNpbFN0
YXRlQ2FjaGUuZW5kKCk7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAo
aS0+c2Vjb25kLnNlY29uZCA8IGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuc2Vjb25kKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQgPSBp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxlYXN0UmVj
ZW50bHlVc2VkLT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1EZXB0aFN0
ZW5jaWxTdGF0ZUNhY2hlLmVyYXNlKGxlYXN0UmVjZW50bHlVc2VkKTsKKyAgICAgICAgfQorCisg
ICAgICAgIEQzRDExX0RFUFRIX1NURU5DSUxfREVTQyBkc0Rlc2MgPSB7IDAgfTsKKyAgICAgICAg
ZHNEZXNjLkRlcHRoRW5hYmxlID0gZHNTdGF0ZS5kZXB0aFRlc3QgPyBUUlVFIDogRkFMU0U7Cisg
ICAgICAgIGRzRGVzYy5EZXB0aFdyaXRlTWFzayA9IGdsX2QzZDExOjpDb252ZXJ0RGVwdGhNYXNr
KGRzU3RhdGUuZGVwdGhNYXNrKTsKKyAgICAgICAgZHNEZXNjLkRlcHRoRnVuYyA9IGdsX2QzZDEx
OjpDb252ZXJ0Q29tcGFyaXNvbihkc1N0YXRlLmRlcHRoRnVuYyk7CisgICAgICAgIGRzRGVzYy5T
dGVuY2lsRW5hYmxlID0gZHNTdGF0ZS5zdGVuY2lsVGVzdCA/IFRSVUUgOiBGQUxTRTsKKyAgICAg
ICAgZHNEZXNjLlN0ZW5jaWxSZWFkTWFzayA9IGdsX2QzZDExOjpDb252ZXJ0U3RlbmNpbE1hc2so
ZHNTdGF0ZS5zdGVuY2lsTWFzayk7CisgICAgICAgIGRzRGVzYy5TdGVuY2lsV3JpdGVNYXNrID0g
Z2xfZDNkMTE6OkNvbnZlcnRTdGVuY2lsTWFzayhkc1N0YXRlLnN0ZW5jaWxXcml0ZW1hc2spOwor
ICAgICAgICBkc0Rlc2MuRnJvbnRGYWNlLlN0ZW5jaWxGYWlsT3AgPSBnbF9kM2QxMTo6Q29udmVy
dFN0ZW5jaWxPcChkc1N0YXRlLnN0ZW5jaWxGYWlsKTsKKyAgICAgICAgZHNEZXNjLkZyb250RmFj
ZS5TdGVuY2lsRGVwdGhGYWlsT3AgPSBnbF9kM2QxMTo6Q29udmVydFN0ZW5jaWxPcChkc1N0YXRl
LnN0ZW5jaWxQYXNzRGVwdGhGYWlsKTsKKyAgICAgICAgZHNEZXNjLkZyb250RmFjZS5TdGVuY2ls
UGFzc09wID0gZ2xfZDNkMTE6OkNvbnZlcnRTdGVuY2lsT3AoZHNTdGF0ZS5zdGVuY2lsUGFzc0Rl
cHRoUGFzcyk7CisgICAgICAgIGRzRGVzYy5Gcm9udEZhY2UuU3RlbmNpbEZ1bmMgPSBnbF9kM2Qx
MTo6Q29udmVydENvbXBhcmlzb24oZHNTdGF0ZS5zdGVuY2lsRnVuYyk7CisgICAgICAgIGRzRGVz
Yy5CYWNrRmFjZS5TdGVuY2lsRmFpbE9wID0gZ2xfZDNkMTE6OkNvbnZlcnRTdGVuY2lsT3AoZHNT
dGF0ZS5zdGVuY2lsQmFja0ZhaWwpOworICAgICAgICBkc0Rlc2MuQmFja0ZhY2UuU3RlbmNpbERl
cHRoRmFpbE9wID0gZ2xfZDNkMTE6OkNvbnZlcnRTdGVuY2lsT3AoZHNTdGF0ZS5zdGVuY2lsQmFj
a1Bhc3NEZXB0aEZhaWwpOworICAgICAgICBkc0Rlc2MuQmFja0ZhY2UuU3RlbmNpbFBhc3NPcCA9
IGdsX2QzZDExOjpDb252ZXJ0U3RlbmNpbE9wKGRzU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQ
YXNzKTsKKyAgICAgICAgZHNEZXNjLkJhY2tGYWNlLlN0ZW5jaWxGdW5jID0gZ2xfZDNkMTE6OkNv
bnZlcnRDb21wYXJpc29uKGRzU3RhdGUuc3RlbmNpbEJhY2tGdW5jKTsKKworICAgICAgICBJRDNE
MTFEZXB0aFN0ZW5jaWxTdGF0ZSAqZHgxMURlcHRoU3RlbmNpbFN0YXRlID0gTlVMTDsKKyAgICAg
ICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxTdGF0ZSgmZHNE
ZXNjLCAmZHgxMURlcHRoU3RlbmNpbFN0YXRlKTsKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQp
IHx8ICFkeDExRGVwdGhTdGVuY2lsU3RhdGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigi
VW5hYmxlIHRvIGNyZWF0ZSBhIElEM0QxMURlcHRoU3RlbmNpbFN0YXRlLCBIUkVTVUxUOiAweCVY
LiIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAg
ICAgIG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmluc2VydChzdGQ6Om1ha2VfcGFpcihkc1N0YXRl
LCBzdGQ6Om1ha2VfcGFpcihkeDExRGVwdGhTdGVuY2lsU3RhdGUsIG1Db3VudGVyKyspKSk7CisK
KyAgICAgICAgcmV0dXJuIGR4MTFEZXB0aFN0ZW5jaWxTdGF0ZTsKKyAgICB9Cit9CisKK3N0ZDo6
c2l6ZV90IFJlbmRlclN0YXRlQ2FjaGU6Omhhc2hTYW1wbGVyU3RhdGUoY29uc3QgZ2w6OlNhbXBs
ZXJTdGF0ZSAmc2FtcGxlclN0YXRlKQoreworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQg
c2VlZCA9IDB4QUJDREVGOTg7CisKKyAgICBzdGQ6OnNpemVfdCBoYXNoID0gMDsKKyAgICBNdXJt
dXJIYXNoM194ODZfMzIoJnNhbXBsZXJTdGF0ZSwgc2l6ZW9mKGdsOjpTYW1wbGVyU3RhdGUpLCBz
ZWVkLCAmaGFzaCk7CisgICAgcmV0dXJuIGhhc2g7Cit9CisKK2Jvb2wgUmVuZGVyU3RhdGVDYWNo
ZTo6Y29tcGFyZVNhbXBsZXJTdGF0ZXMoY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmYSwgY29uc3Qg
Z2w6OlNhbXBsZXJTdGF0ZSAmYikKK3sKKyAgICByZXR1cm4gbWVtY21wKCZhLCAmYiwgc2l6ZW9m
KGdsOjpTYW1wbGVyU3RhdGUpKSA9PSAwOworfQorCitJRDNEMTFTYW1wbGVyU3RhdGUgKlJlbmRl
clN0YXRlQ2FjaGU6OmdldFNhbXBsZXJTdGF0ZShjb25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1w
bGVyU3RhdGUpCit7CisgICAgaWYgKCFtRGV2aWNlKQorICAgIHsKKyAgICAgICAgRVJSKCJSZW5k
ZXJTdGF0ZUNhY2hlIGlzIG5vdCBpbml0aWFsaXplZC4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7
CisgICAgfQorCisgICAgU2FtcGxlclN0YXRlTWFwOjppdGVyYXRvciBpID0gbVNhbXBsZXJTdGF0
ZUNhY2hlLmZpbmQoc2FtcGxlclN0YXRlKTsKKyAgICBpZiAoaSAhPSBtU2FtcGxlclN0YXRlQ2Fj
aGUuZW5kKCkpCisgICAgeworICAgICAgICBTYW1wbGVyU3RhdGVDb3VudGVyUGFpciAmc3RhdGUg
PSBpLT5zZWNvbmQ7CisgICAgICAgIHN0YXRlLnNlY29uZCA9IG1Db3VudGVyKys7CisgICAgICAg
IHJldHVybiBzdGF0ZS5maXJzdDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYg
KG1TYW1wbGVyU3RhdGVDYWNoZS5zaXplKCkgPj0ga01heFNhbXBsZXJTdGF0ZXMpCisgICAgICAg
IHsKKyAgICAgICAgICAgIFRSQUNFKCJPdmVyZmxvd2VkIHRoZSBsaW1pdCBvZiAldSBzYW1wbGVy
IHN0YXRlcywgcmVtb3ZpbmcgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWQgIgorICAgICAgICAgICAg
ICAgICAgInRvIG1ha2Ugcm9vbS4iLCBrTWF4U2FtcGxlclN0YXRlcyk7CisKKyAgICAgICAgICAg
IFNhbXBsZXJTdGF0ZU1hcDo6aXRlcmF0b3IgbGVhc3RSZWNlbnRseVVzZWQgPSBtU2FtcGxlclN0
YXRlQ2FjaGUuYmVnaW4oKTsKKyAgICAgICAgICAgIGZvciAoU2FtcGxlclN0YXRlTWFwOjppdGVy
YXRvciBpID0gbVNhbXBsZXJTdGF0ZUNhY2hlLmJlZ2luKCk7IGkgIT0gbVNhbXBsZXJTdGF0ZUNh
Y2hlLmVuZCgpOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGktPnNl
Y29uZC5zZWNvbmQgPCBsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLnNlY29uZCkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkID0gaTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsZWFzdFJlY2VudGx5
VXNlZC0+c2Vjb25kLmZpcnN0LT5SZWxlYXNlKCk7CisgICAgICAgICAgICBtU2FtcGxlclN0YXRl
Q2FjaGUuZXJhc2UobGVhc3RSZWNlbnRseVVzZWQpOworICAgICAgICB9CisKKyAgICAgICAgRDNE
MTFfU0FNUExFUl9ERVNDIHNhbXBsZXJEZXNjOworICAgICAgICBzYW1wbGVyRGVzYy5GaWx0ZXIg
PSBnbF9kM2QxMTo6Q29udmVydEZpbHRlcihzYW1wbGVyU3RhdGUubWluRmlsdGVyLCBzYW1wbGVy
U3RhdGUubWFnRmlsdGVyLCBzYW1wbGVyU3RhdGUubWF4QW5pc290cm9weSk7CisgICAgICAgIHNh
bXBsZXJEZXNjLkFkZHJlc3NVID0gZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlV3JhcChzYW1wbGVy
U3RhdGUud3JhcFMpOworICAgICAgICBzYW1wbGVyRGVzYy5BZGRyZXNzViA9IGdsX2QzZDExOjpD
b252ZXJ0VGV4dHVyZVdyYXAoc2FtcGxlclN0YXRlLndyYXBUKTsKKyAgICAgICAgc2FtcGxlckRl
c2MuQWRkcmVzc1cgPSBEM0QxMV9URVhUVVJFX0FERFJFU1NfQ0xBTVA7CisgICAgICAgIHNhbXBs
ZXJEZXNjLk1pcExPREJpYXMgPSBzdGF0aWNfY2FzdDxmbG9hdD4oc2FtcGxlclN0YXRlLmxvZE9m
ZnNldCk7CisgICAgICAgIHNhbXBsZXJEZXNjLk1heEFuaXNvdHJvcHkgPSBzYW1wbGVyU3RhdGUu
bWF4QW5pc290cm9weTsKKyAgICAgICAgc2FtcGxlckRlc2MuQ29tcGFyaXNvbkZ1bmMgPSBEM0Qx
MV9DT01QQVJJU09OX05FVkVSOworICAgICAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclswXSA9
IDAuMGY7CisgICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzFdID0gMC4wZjsKKyAgICAg
ICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbMl0gPSAwLjBmOworICAgICAgICBzYW1wbGVyRGVz
Yy5Cb3JkZXJDb2xvclszXSA9IDAuMGY7CisgICAgICAgIHNhbXBsZXJEZXNjLk1pbkxPRCA9IGds
X2QzZDExOjpDb252ZXJ0TWluTE9EKHNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIsIHNhbXBsZXJTdGF0
ZS5sb2RPZmZzZXQpOworICAgICAgICBzYW1wbGVyRGVzYy5NYXhMT0QgPSBnbF9kM2QxMTo6Q29u
dmVydE1heExPRChzYW1wbGVyU3RhdGUubWluRmlsdGVyLCBzYW1wbGVyU3RhdGUubG9kT2Zmc2V0
KTsKKworICAgICAgICBJRDNEMTFTYW1wbGVyU3RhdGUgKmR4MTFTYW1wbGVyU3RhdGUgPSBOVUxM
OworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVNhbXBsZXJTdGF0ZSgm
c2FtcGxlckRlc2MsICZkeDExU2FtcGxlclN0YXRlKTsKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1
bHQpIHx8ICFkeDExU2FtcGxlclN0YXRlKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIlVu
YWJsZSB0byBjcmVhdGUgYSBJRDNEMTFEZXB0aFN0ZW5jaWxTdGF0ZSwgSFJFU1VMVDogMHglWC4i
LCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAg
ICBtU2FtcGxlclN0YXRlQ2FjaGUuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKHNhbXBsZXJTdGF0ZSwg
c3RkOjptYWtlX3BhaXIoZHgxMVNhbXBsZXJTdGF0ZSwgbUNvdW50ZXIrKykpKTsKKworICAgICAg
ICByZXR1cm4gZHgxMVNhbXBsZXJTdGF0ZTsKKyAgICB9Cit9CisKK30KXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclN0YXRlQ2FjaGUuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyU3RhdGVDYWNoZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmI0Yjg3MWE0YmQ4NTcxMTRhYjhhNzBjMGM3NTg5NWQwZTIxMDgzNjkKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL1JlbmRlclN0YXRlQ2FjaGUuaApAQCAtMCwwICsxLDExMSBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworLy8gUmVuZGVyU3RhdGVDYWNoZS5oOiBEZWZpbmVzIHJ4OjpSZW5kZXJT
dGF0ZUNhY2hlLCBhIGNhY2hlIG9mIERpcmVjdDNEIHJlbmRlcgorLy8gc3RhdGUgb2JqZWN0cy4K
KworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSU1RBVEVDQUNIRV9IXworI2RlZmlu
ZSBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSU1RBVEVDQUNIRV9IXworCisjaW5jbHVkZSAibGli
R0xFU3YyL2FuZ2xldHlwZXMuaCIKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorCitu
YW1lc3BhY2UgZ2wKK3sKK2NsYXNzIEZyYW1lYnVmZmVyOworfQorCituYW1lc3BhY2UgcngKK3sK
KworY2xhc3MgUmVuZGVyU3RhdGVDYWNoZQoreworICBwdWJsaWM6CisgICAgUmVuZGVyU3RhdGVD
YWNoZSgpOworICAgIHZpcnR1YWwgflJlbmRlclN0YXRlQ2FjaGUoKTsKKworICAgIHZvaWQgaW5p
dGlhbGl6ZShJRDNEMTFEZXZpY2UgKmRldmljZSk7CisgICAgdm9pZCBjbGVhcigpOworCisgICAg
Ly8gSW5jcmVtZW50cyByZWZjb3VudCBvbiB0aGUgcmV0dXJuZWQgYmxlbmQgc3RhdGUsIFJlbGVh
c2UoKSBtdXN0IGJlIGNhbGxlZC4KKyAgICBJRDNEMTFCbGVuZFN0YXRlICpnZXRCbGVuZFN0YXRl
KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVu
ZFN0YXRlKTsKKyAgICBJRDNEMTFSYXN0ZXJpemVyU3RhdGUgKmdldFJhc3Rlcml6ZXJTdGF0ZShj
b25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZyYXN0ZXJTdGF0ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNjaXNzb3JFbmFibGVkLCB1bnNpZ25l
ZCBpbnQgZGVwdGhTaXplKTsKKyAgICBJRDNEMTFEZXB0aFN0ZW5jaWxTdGF0ZSAqZ2V0RGVwdGhT
dGVuY2lsU3RhdGUoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZkc1N0YXRlKTsKKyAgICBJ
RDNEMTFTYW1wbGVyU3RhdGUgKmdldFNhbXBsZXJTdGF0ZShjb25zdCBnbDo6U2FtcGxlclN0YXRl
ICZzYW1wbGVyU3RhdGUpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKFJlbmRlclN0YXRlQ2FjaGUpOworCisgICAgdW5zaWduZWQgbG9uZyBsb25nIG1Db3VudGVy
OworCisgICAgLy8gQmxlbmQgc3RhdGUgY2FjaGUKKyAgICBzdHJ1Y3QgQmxlbmRTdGF0ZUtleQor
ICAgIHsKKyAgICAgICAgZ2w6OkJsZW5kU3RhdGUgYmxlbmRTdGF0ZTsKKyAgICAgICAgYm9vbCBy
dENoYW5uZWxzW0QzRDExX1NJTVVMVEFORU9VU19SRU5ERVJfVEFSR0VUX0NPVU5UXVs0XTsKKyAg
ICB9OworICAgIHN0YXRpYyBzdGQ6OnNpemVfdCBoYXNoQmxlbmRTdGF0ZShjb25zdCBCbGVuZFN0
YXRlS2V5ICZibGVuZFN0YXRlKTsKKyAgICBzdGF0aWMgYm9vbCBjb21wYXJlQmxlbmRTdGF0ZXMo
Y29uc3QgQmxlbmRTdGF0ZUtleSAmYSwgY29uc3QgQmxlbmRTdGF0ZUtleSAmYik7CisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIGludCBrTWF4QmxlbmRTdGF0ZXM7CisKKyAgICB0eXBlZGVmIHN0
ZDo6c2l6ZV90ICgqQmxlbmRTdGF0ZUhhc2hGdW5jdGlvbikoY29uc3QgQmxlbmRTdGF0ZUtleSAm
KTsKKyAgICB0eXBlZGVmIGJvb2wgKCpCbGVuZFN0YXRlRXF1YWxpdHlGdW5jdGlvbikoY29uc3Qg
QmxlbmRTdGF0ZUtleSAmLCBjb25zdCBCbGVuZFN0YXRlS2V5ICYpOworICAgIHR5cGVkZWYgc3Rk
OjpwYWlyPElEM0QxMUJsZW5kU3RhdGUqLCB1bnNpZ25lZCBsb25nIGxvbmc+IEJsZW5kU3RhdGVD
b3VudGVyUGFpcjsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxCbGVuZFN0YXRlS2V5
LCBCbGVuZFN0YXRlQ291bnRlclBhaXIsIEJsZW5kU3RhdGVIYXNoRnVuY3Rpb24sIEJsZW5kU3Rh
dGVFcXVhbGl0eUZ1bmN0aW9uPiBCbGVuZFN0YXRlTWFwOworICAgIEJsZW5kU3RhdGVNYXAgbUJs
ZW5kU3RhdGVDYWNoZTsKKworICAgIC8vIFJhc3Rlcml6ZXIgc3RhdGUgY2FjaGUKKyAgICBzdHJ1
Y3QgUmFzdGVyaXplclN0YXRlS2V5CisgICAgeworICAgICAgICBnbDo6UmFzdGVyaXplclN0YXRl
IHJhc3Rlcml6ZXJTdGF0ZTsKKyAgICAgICAgYm9vbCBzY2lzc29yRW5hYmxlZDsKKyAgICAgICAg
dW5zaWduZWQgaW50IGRlcHRoU2l6ZTsKKyAgICB9OworICAgIHN0YXRpYyBzdGQ6OnNpemVfdCBo
YXNoUmFzdGVyaXplclN0YXRlKGNvbnN0IFJhc3Rlcml6ZXJTdGF0ZUtleSAmcmFzdGVyU3RhdGUp
OworICAgIHN0YXRpYyBib29sIGNvbXBhcmVSYXN0ZXJpemVyU3RhdGVzKGNvbnN0IFJhc3Rlcml6
ZXJTdGF0ZUtleSAmYSwgY29uc3QgUmFzdGVyaXplclN0YXRlS2V5ICZiKTsKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgaW50IGtNYXhSYXN0ZXJpemVyU3RhdGVzOworCisgICAgdHlwZWRlZiBz
dGQ6OnNpemVfdCAoKlJhc3Rlcml6ZXJTdGF0ZUhhc2hGdW5jdGlvbikoY29uc3QgUmFzdGVyaXpl
clN0YXRlS2V5ICYpOworICAgIHR5cGVkZWYgYm9vbCAoKlJhc3Rlcml6ZXJTdGF0ZUVxdWFsaXR5
RnVuY3Rpb24pKGNvbnN0IFJhc3Rlcml6ZXJTdGF0ZUtleSAmLCBjb25zdCBSYXN0ZXJpemVyU3Rh
dGVLZXkgJik7CisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8SUQzRDExUmFzdGVyaXplclN0YXRlKiwg
dW5zaWduZWQgbG9uZyBsb25nPiBSYXN0ZXJpemVyU3RhdGVDb3VudGVyUGFpcjsKKyAgICB0eXBl
ZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxSYXN0ZXJpemVyU3RhdGVLZXksIFJhc3Rlcml6ZXJTdGF0
ZUNvdW50ZXJQYWlyLCBSYXN0ZXJpemVyU3RhdGVIYXNoRnVuY3Rpb24sIFJhc3Rlcml6ZXJTdGF0
ZUVxdWFsaXR5RnVuY3Rpb24+IFJhc3Rlcml6ZXJTdGF0ZU1hcDsKKyAgICBSYXN0ZXJpemVyU3Rh
dGVNYXAgbVJhc3Rlcml6ZXJTdGF0ZUNhY2hlOworCisgICAgLy8gRGVwdGggc3RlbmNpbCBzdGF0
ZSBjYWNoZQorICAgIHN0YXRpYyBzdGQ6OnNpemVfdCBoYXNoRGVwdGhTdGVuY2lsU3RhdGUoY29u
c3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZkc1N0YXRlKTsKKyAgICBzdGF0aWMgYm9vbCBjb21w
YXJlRGVwdGhTdGVuY2lsU3RhdGVzKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmYSwgY29u
c3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZiKTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
aW50IGtNYXhEZXB0aFN0ZW5jaWxTdGF0ZXM7CisKKyAgICB0eXBlZGVmIHN0ZDo6c2l6ZV90ICgq
RGVwdGhTdGVuY2lsU3RhdGVIYXNoRnVuY3Rpb24pKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0
ZSAmKTsKKyAgICB0eXBlZGVmIGJvb2wgKCpEZXB0aFN0ZW5jaWxTdGF0ZUVxdWFsaXR5RnVuY3Rp
b24pKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmLCBjb25zdCBnbDo6RGVwdGhTdGVuY2ls
U3RhdGUgJik7CisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8SUQzRDExRGVwdGhTdGVuY2lsU3RhdGUq
LCB1bnNpZ25lZCBsb25nIGxvbmc+IERlcHRoU3RlbmNpbFN0YXRlQ291bnRlclBhaXI7CisgICAg
dHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8Z2w6OkRlcHRoU3RlbmNpbFN0YXRlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIERlcHRoU3RlbmNpbFN0YXRlQ291bnRlclBhaXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwdGhTdGVuY2lsU3RhdGVIYXNoRnVuY3Rp
b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwdGhTdGVuY2lsU3RhdGVFcXVh
bGl0eUZ1bmN0aW9uPiBEZXB0aFN0ZW5jaWxTdGF0ZU1hcDsKKyAgICBEZXB0aFN0ZW5jaWxTdGF0
ZU1hcCBtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZTsKKworICAgIC8vIFNhbXBsZSBzdGF0ZSBjYWNo
ZQorICAgIHN0YXRpYyBzdGQ6OnNpemVfdCBoYXNoU2FtcGxlclN0YXRlKGNvbnN0IGdsOjpTYW1w
bGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSk7CisgICAgc3RhdGljIGJvb2wgY29tcGFyZVNhbXBsZXJT
dGF0ZXMoY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmYSwgY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAm
Yik7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBrTWF4U2FtcGxlclN0YXRlczsKKwor
ICAgIHR5cGVkZWYgc3RkOjpzaXplX3QgKCpTYW1wbGVyU3RhdGVIYXNoRnVuY3Rpb24pKGNvbnN0
IGdsOjpTYW1wbGVyU3RhdGUgJik7CisgICAgdHlwZWRlZiBib29sICgqU2FtcGxlclN0YXRlRXF1
YWxpdHlGdW5jdGlvbikoY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmLCBjb25zdCBnbDo6U2FtcGxl
clN0YXRlICYpOworICAgIHR5cGVkZWYgc3RkOjpwYWlyPElEM0QxMVNhbXBsZXJTdGF0ZSosIHVu
c2lnbmVkIGxvbmcgbG9uZz4gU2FtcGxlclN0YXRlQ291bnRlclBhaXI7CisgICAgdHlwZWRlZiBz
dGQ6OnVub3JkZXJlZF9tYXA8Z2w6OlNhbXBsZXJTdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTYW1wbGVyU3RhdGVDb3VudGVyUGFpciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTYW1wbGVyU3RhdGVIYXNoRnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU2FtcGxlclN0YXRlRXF1YWxpdHlGdW5jdGlvbj4gU2FtcGxlclN0YXRlTWFw
OworICAgIFNhbXBsZXJTdGF0ZU1hcCBtU2FtcGxlclN0YXRlQ2FjaGU7CisKKyAgICBJRDNEMTFE
ZXZpY2UgKm1EZXZpY2U7Cit9OworCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJf
UkVOREVSU1RBVEVDQUNIRV9IXwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
UmVuZGVyVGFyZ2V0MTEuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJUYXJnZXQxMS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzcwNzA5N2Fh
NDU0NDk4YTA2MDA0ZWQ4NTU4MmVhOTNhOThjNjVlZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFy
Z2V0MTEuY3BwCkBAIC0wLDAgKzEsMzU1IEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisvLyBSZW5kZXJUYXJnZXQxMS5jcHA6IEltcGxlbWVudHMgYSBEWDExLXNw
ZWNpZmljIHdyYXBwZXIgZm9yIElEM0QxMVZpZXcgcG9pbnRlcnMKKy8vIHJldGFpbmVkIGJ5IFJl
bmRlcmJ1ZmZlcnMuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVy
VGFyZ2V0MTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyZXIx
MS5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRp
bHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgorCituYW1lc3BhY2UgcngKK3sKKwor
c3RhdGljIHVuc2lnbmVkIGludCBnZXRSVFZTdWJyZXNvdXJjZUluZGV4KElEM0QxMVRleHR1cmUy
RCAqdGV4dHVyZSwgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqdmlldykKK3sKKyAgICBEM0QxMV9S
RU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOworICAgIHZpZXctPkdldERlc2MoJnJ0dkRl
c2MpOworCisgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4RGVzYzsKKyAgICB0ZXh0dXJlLT5H
ZXREZXNjKCZ0ZXhEZXNjKTsKKworICAgIHVuc2lnbmVkIGludCBtaXBTbGljZSA9IDA7CisgICAg
dW5zaWduZWQgaW50IGFycmF5U2xpY2UgPSAwOworICAgIHVuc2lnbmVkIGludCBtaXBMZXZlbHMg
PSB0ZXhEZXNjLk1pcExldmVsczsKKworICAgIHN3aXRjaCAocnR2RGVzYy5WaWV3RGltZW5zaW9u
KQorICAgIHsKKyAgICAgIGNhc2UgRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMUQ6CisgICAg
ICAgIG1pcFNsaWNlID0gcnR2RGVzYy5UZXh0dXJlMUQuTWlwU2xpY2U7CisgICAgICAgIGFycmF5
U2xpY2UgPSAwOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBEM0QxMV9SVFZfRElNRU5T
SU9OX1RFWFRVUkUxREFSUkFZOgorICAgICAgICBtaXBTbGljZSA9IHJ0dkRlc2MuVGV4dHVyZTFE
QXJyYXkuTWlwU2xpY2U7CisgICAgICAgIGFycmF5U2xpY2UgPSBydHZEZXNjLlRleHR1cmUxREFy
cmF5LkZpcnN0QXJyYXlTbGljZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRDNEMTFf
UlRWX0RJTUVOU0lPTl9URVhUVVJFMkQ6CisgICAgICAgIG1pcFNsaWNlID0gcnR2RGVzYy5UZXh0
dXJlMkQuTWlwU2xpY2U7CisgICAgICAgIGFycmF5U2xpY2UgPSAwOworICAgICAgICBicmVhazsK
KworICAgICAgY2FzZSBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyREFSUkFZOgorICAgICAg
ICBtaXBTbGljZSA9IHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlwU2xpY2U7CisgICAgICAgIGFy
cmF5U2xpY2UgPSBydHZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMkRNUzoK
KyAgICAgICAgbWlwU2xpY2UgPSAwOworICAgICAgICBhcnJheVNsaWNlID0gMDsKKyAgICAgICAg
YnJlYWs7CisKKyAgICAgIGNhc2UgRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMkRNU0FSUkFZ
OgorICAgICAgICBtaXBTbGljZSA9IDA7CisgICAgICAgIGFycmF5U2xpY2UgPSBydHZEZXNjLlRl
eHR1cmUyRE1TQXJyYXkuRmlyc3RBcnJheVNsaWNlOworICAgICAgICBicmVhazsKKworICAgICAg
Y2FzZSBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUzRDoKKyAgICAgICAgbWlwU2xpY2UgPSBy
dHZEZXNjLlRleHR1cmUzRC5NaXBTbGljZTsKKyAgICAgICAgYXJyYXlTbGljZSA9IDA7CisgICAg
ICAgIGJyZWFrOworCisgICAgICBjYXNlIEQzRDExX1JUVl9ESU1FTlNJT05fVU5LTk9XTjoKKyAg
ICAgIGNhc2UgRDNEMTFfUlRWX0RJTUVOU0lPTl9CVUZGRVI6CisgICAgICAgIFVOSU1QTEVNRU5U
RUQoKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBEM0QxMUNhbGNTdWJy
ZXNvdXJjZShtaXBTbGljZSwgYXJyYXlTbGljZSwgbWlwTGV2ZWxzKTsKK30KKworc3RhdGljIHVu
c2lnbmVkIGludCBnZXREU1ZTdWJyZXNvdXJjZUluZGV4KElEM0QxMVRleHR1cmUyRCAqdGV4dHVy
ZSwgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqdmlldykKK3sKKyAgICBEM0QxMV9ERVBUSF9TVEVO
Q0lMX1ZJRVdfREVTQyBkc3ZEZXNjOworICAgIHZpZXctPkdldERlc2MoJmRzdkRlc2MpOworCisg
ICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4RGVzYzsKKyAgICB0ZXh0dXJlLT5HZXREZXNjKCZ0
ZXhEZXNjKTsKKworICAgIHVuc2lnbmVkIGludCBtaXBTbGljZSA9IDA7CisgICAgdW5zaWduZWQg
aW50IGFycmF5U2xpY2UgPSAwOworICAgIHVuc2lnbmVkIGludCBtaXBMZXZlbHMgPSB0ZXhEZXNj
Lk1pcExldmVsczsKKworICAgIHN3aXRjaCAoZHN2RGVzYy5WaWV3RGltZW5zaW9uKQorICAgIHsK
KyAgICAgIGNhc2UgRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMUQ6CisgICAgICAgIG1pcFNs
aWNlID0gZHN2RGVzYy5UZXh0dXJlMUQuTWlwU2xpY2U7CisgICAgICAgIGFycmF5U2xpY2UgPSAw
OworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBEM0QxMV9EU1ZfRElNRU5TSU9OX1RFWFRV
UkUxREFSUkFZOgorICAgICAgICBtaXBTbGljZSA9IGRzdkRlc2MuVGV4dHVyZTFEQXJyYXkuTWlw
U2xpY2U7CisgICAgICAgIGFycmF5U2xpY2UgPSBkc3ZEZXNjLlRleHR1cmUxREFycmF5LkZpcnN0
QXJyYXlTbGljZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRDNEMTFfRFNWX0RJTUVO
U0lPTl9URVhUVVJFMkQ6CisgICAgICAgIG1pcFNsaWNlID0gZHN2RGVzYy5UZXh0dXJlMkQuTWlw
U2xpY2U7CisgICAgICAgIGFycmF5U2xpY2UgPSAwOworICAgICAgICBicmVhazsKKworICAgICAg
Y2FzZSBEM0QxMV9EU1ZfRElNRU5TSU9OX1RFWFRVUkUyREFSUkFZOgorICAgICAgICBtaXBTbGlj
ZSA9IGRzdkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlwU2xpY2U7CisgICAgICAgIGFycmF5U2xpY2Ug
PSBkc3ZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZTsKKyAgICAgICAgYnJlYWs7
CisKKyAgICAgIGNhc2UgRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMkRNUzoKKyAgICAgICAg
bWlwU2xpY2UgPSAwOworICAgICAgICBhcnJheVNsaWNlID0gMDsKKyAgICAgICAgYnJlYWs7CisK
KyAgICAgIGNhc2UgRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMkRNU0FSUkFZOgorICAgICAg
ICBtaXBTbGljZSA9IDA7CisgICAgICAgIGFycmF5U2xpY2UgPSBkc3ZEZXNjLlRleHR1cmUyRE1T
QXJyYXkuRmlyc3RBcnJheVNsaWNlOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBEM0Qx
MV9SVFZfRElNRU5TSU9OX1VOS05PV046CisgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBEM0QxMUNhbGNTdWJyZXNvdXJjZShtaXBT
bGljZSwgYXJyYXlTbGljZSwgbWlwTGV2ZWxzKTsKK30KKworUmVuZGVyVGFyZ2V0MTE6OlJlbmRl
clRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqcnR2
LCBJRDNEMTFUZXh0dXJlMkQgKnRleCwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIG1SZW5kZXJlciA9IFJlbmRlcmVy
MTE6Om1ha2VSZW5kZXJlcjExKHJlbmRlcmVyKTsKKyAgICBtVGV4dHVyZSA9IHRleDsKKyAgICBt
UmVuZGVyVGFyZ2V0ID0gcnR2OworICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOworICAgIG1TaGFk
ZXJSZXNvdXJjZSA9IHNydjsKKyAgICBtU3VicmVzb3VyY2VJbmRleCA9IDA7CisKKyAgICBpZiAo
bVJlbmRlclRhcmdldCAmJiBtVGV4dHVyZSkKKyAgICB7CisgICAgICAgIEQzRDExX1JFTkRFUl9U
QVJHRVRfVklFV19ERVNDIGRlc2M7CisgICAgICAgIG1SZW5kZXJUYXJnZXQtPkdldERlc2MoJmRl
c2MpOworCisgICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleERlc2M7CisgICAgICAgIG1U
ZXh0dXJlLT5HZXREZXNjKCZ0ZXhEZXNjKTsKKworICAgICAgICBtU3VicmVzb3VyY2VJbmRleCA9
IGdldFJUVlN1YnJlc291cmNlSW5kZXgobVRleHR1cmUsIG1SZW5kZXJUYXJnZXQpOworICAgICAg
ICBtV2lkdGggPSB3aWR0aDsKKyAgICAgICAgbUhlaWdodCA9IGhlaWdodDsKKyAgICAgICAgbVNh
bXBsZXMgPSAodGV4RGVzYy5TYW1wbGVEZXNjLkNvdW50ID4gMSkgPyB0ZXhEZXNjLlNhbXBsZURl
c2MuQ291bnQgOiAwOworCisgICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGQzZDExX2dsOjpDb252
ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGRlc2MuRm9ybWF0KTsKKyAgICAgICAgbUFjdHVhbEZv
cm1hdCA9IGQzZDExX2dsOjpDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGRlc2MuRm9ybWF0
KTsKKyAgICB9Cit9CisKK1JlbmRlclRhcmdldDExOjpSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAq
cmVuZGVyZXIsIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKmRzdiwgSUQzRDExVGV4dHVyZTJEICp0
ZXgsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCkKK3sKKyAgICBtUmVuZGVyZXIgPSBSZW5kZXJlcjExOjptYWtlUmVuZGVyZXIxMShy
ZW5kZXJlcik7CisgICAgbVRleHR1cmUgPSB0ZXg7CisgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7
CisgICAgbURlcHRoU3RlbmNpbCA9IGRzdjsKKyAgICBtU2hhZGVyUmVzb3VyY2UgPSBzcnY7Cisg
ICAgbVN1YnJlc291cmNlSW5kZXggPSAwOworCisgICAgaWYgKG1EZXB0aFN0ZW5jaWwgJiYgbVRl
eHR1cmUpCisgICAgeworICAgICAgICBEM0QxMV9ERVBUSF9TVEVOQ0lMX1ZJRVdfREVTQyBkZXNj
OworICAgICAgICBtRGVwdGhTdGVuY2lsLT5HZXREZXNjKCZkZXNjKTsKKworICAgICAgICBEM0Qx
MV9URVhUVVJFMkRfREVTQyB0ZXhEZXNjOworICAgICAgICBtVGV4dHVyZS0+R2V0RGVzYygmdGV4
RGVzYyk7CisKKyAgICAgICAgbVN1YnJlc291cmNlSW5kZXggPSBnZXREU1ZTdWJyZXNvdXJjZUlu
ZGV4KG1UZXh0dXJlLCBtRGVwdGhTdGVuY2lsKTsKKyAgICAgICAgbVdpZHRoID0gd2lkdGg7Cisg
ICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIG1TYW1wbGVzID0gKHRleERlc2MuU2Ft
cGxlRGVzYy5Db3VudCA+IDEpID8gdGV4RGVzYy5TYW1wbGVEZXNjLkNvdW50IDogMDsKKworICAg
ICAgICBtSW50ZXJuYWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVydFRleHR1cmVJbnRlcm5hbEZv
cm1hdChkZXNjLkZvcm1hdCk7CisgICAgICAgIG1BY3R1YWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29u
dmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChkZXNjLkZvcm1hdCk7CisgICAgfQorfQorCitSZW5k
ZXJUYXJnZXQxMTo6UmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzLCBib29s
IGRlcHRoKQoreworICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKHJl
bmRlcmVyKTsKKyAgICBtVGV4dHVyZSA9IE5VTEw7CisgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7
CisgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7CisgICAgbVNoYWRlclJlc291cmNlID0gTlVMTDsK
KworICAgIERYR0lfRk9STUFUIHJlcXVlc3RlZEZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0UmVu
ZGVyYnVmZmVyRm9ybWF0KGZvcm1hdCk7CisKKyAgICBpbnQgc3VwcG9ydGVkU2FtcGxlcyA9IG1S
ZW5kZXJlci0+Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMocmVxdWVzdGVkRm9ybWF0LCBzYW1w
bGVzKTsKKyAgICBpZiAoc3VwcG9ydGVkU2FtcGxlcyA8IDApCisgICAgeworICAgICAgICBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApCisgICAgeworICAgICAgICAvLyBDcmVhdGUgdGV4
dHVyZSByZXNvdXJjZQorICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXNjOworICAgICAg
ICBkZXNjLldpZHRoID0gd2lkdGg7IAorICAgICAgICBkZXNjLkhlaWdodCA9IGhlaWdodDsKKyAg
ICAgICAgZGVzYy5NaXBMZXZlbHMgPSAxOworICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IDE7Cisg
ICAgICAgIGRlc2MuRm9ybWF0ID0gcmVxdWVzdGVkRm9ybWF0OworICAgICAgICBkZXNjLlNhbXBs
ZURlc2MuQ291bnQgPSAoc3VwcG9ydGVkU2FtcGxlcyA9PSAwKSA/IDEgOiBzdXBwb3J0ZWRTYW1w
bGVzOworICAgICAgICBkZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7CisgICAgICAgIGRlc2Mu
VXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdz
ID0gMDsKKyAgICAgICAgZGVzYy5NaXNjRmxhZ3MgPSAwOworICAgICAgICBkZXNjLkJpbmRGbGFn
cyA9IChkZXB0aCA/IEQzRDExX0JJTkRfREVQVEhfU1RFTkNJTCA6IChEM0QxMV9CSU5EX1JFTkRF
Ul9UQVJHRVQgfCBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRSkpOworCisgICAgICAgIElEM0Qx
MURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJm1UZXh0dXJl
KTsKKworICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAg
ICAgIGlmIChkZXB0aCkKKyAgICAgICAgeworICAgICAgICAgICAgRDNEMTFfREVQVEhfU1RFTkNJ
TF9WSUVXX0RFU0MgZHN2RGVzYzsKKyAgICAgICAgICAgIGRzdkRlc2MuRm9ybWF0ID0gcmVxdWVz
dGVkRm9ybWF0OworICAgICAgICAgICAgZHN2RGVzYy5WaWV3RGltZW5zaW9uID0gKHN1cHBvcnRl
ZFNhbXBsZXMgPT0gMCkgPyBEM0QxMV9EU1ZfRElNRU5TSU9OX1RFWFRVUkUyRCA6IEQzRDExX0RT
Vl9ESU1FTlNJT05fVEVYVFVSRTJETVM7CisgICAgICAgICAgICBkc3ZEZXNjLlRleHR1cmUyRC5N
aXBTbGljZSA9IDA7CisgICAgICAgICAgICBkc3ZEZXNjLkZsYWdzID0gMDsKKyAgICAgICAgICAg
IHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsVmlldyhtVGV4dHVyZSwgJmRzdkRl
c2MsICZtRGVwdGhTdGVuY2lsKTsKKworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9G
TUVNT1JZKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNl
KCk7CisgICAgICAgICAgICAgICAgbVRleHR1cmUgPSBOVUxMOworICAgICAgICAgICAgICAgIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFT
U0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg
ICB7CisgICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOwor
ICAgICAgICAgICAgcnR2RGVzYy5Gb3JtYXQgPSByZXF1ZXN0ZWRGb3JtYXQ7CisgICAgICAgICAg
ICBydHZEZXNjLlZpZXdEaW1lbnNpb24gPSAoc3VwcG9ydGVkU2FtcGxlcyA9PSAwKSA/IEQzRDEx
X1JUVl9ESU1FTlNJT05fVEVYVFVSRTJEIDogRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMkRN
UzsKKyAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJELk1pcFNsaWNlID0gMDsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0VmlldyhtVGV4dHVyZSwgJnJ0
dkRlc2MsICZtUmVuZGVyVGFyZ2V0KTsKKworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09V
VE9GTUVNT1JZKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1UZXh0dXJlLT5SZWxl
YXNlKCk7CisgICAgICAgICAgICAgICAgbVRleHR1cmUgPSBOVUxMOworICAgICAgICAgICAgICAg
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisg
ICAgICAgICAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7CisgICAg
ICAgICAgICBzcnZEZXNjLkZvcm1hdCA9IHJlcXVlc3RlZEZvcm1hdDsKKyAgICAgICAgICAgIHNy
dkRlc2MuVmlld0RpbWVuc2lvbiA9IChzdXBwb3J0ZWRTYW1wbGVzID09IDApID8gRDNEMTFfU1JW
X0RJTUVOU0lPTl9URVhUVVJFMkQgOiBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyRE1TOwor
ICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkQuTW9zdERldGFpbGVkTWlwID0gMDsKKyAgICAg
ICAgICAgIHNydkRlc2MuVGV4dHVyZTJELk1pcExldmVscyA9IDE7CisgICAgICAgICAgICByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyhtVGV4dHVyZSwgJnNydkRlc2Ms
ICZtU2hhZGVyUmVzb3VyY2UpOworCisgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZN
RU1PUlkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVRleHR1cmUtPlJlbGVhc2Uo
KTsKKyAgICAgICAgICAgICAgICBtVGV4dHVyZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgbVJl
bmRlclRhcmdldC0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXQgPSBO
VUxMOworICAgICAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOworICAgICAgICB9CisgICAgfQorCisgICAgbVdpZHRoID0gd2lkdGg7
CisgICAgbUhlaWdodCA9IGhlaWdodDsKKyAgICBtSW50ZXJuYWxGb3JtYXQgPSBmb3JtYXQ7Cisg
ICAgbVNhbXBsZXMgPSBzdXBwb3J0ZWRTYW1wbGVzOworICAgIG1BY3R1YWxGb3JtYXQgPSBkM2Qx
MV9nbDo6Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChyZXF1ZXN0ZWRGb3JtYXQpOworICAg
IG1TdWJyZXNvdXJjZUluZGV4ID0gRDNEMTFDYWxjU3VicmVzb3VyY2UoMCwgMCwgMSk7Cit9CisK
K1JlbmRlclRhcmdldDExOjp+UmVuZGVyVGFyZ2V0MTEoKQoreworICAgIGlmIChtVGV4dHVyZSkK
KyAgICB7CisgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgIG1UZXh0dXJlID0g
TlVMTDsKKyAgICB9CisKKyAgICBpZiAobVJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIG1S
ZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKKyAgICAgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7Cisg
ICAgfQorCisgICAgaWYgKG1EZXB0aFN0ZW5jaWwpCisgICAgeworICAgICAgICBtRGVwdGhTdGVu
Y2lsLT5SZWxlYXNlKCk7CisgICAgICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOworICAgIH0KKwor
ICAgIGlmIChtU2hhZGVyUmVzb3VyY2UpCisgICAgeworICAgICAgICBtU2hhZGVyUmVzb3VyY2Ut
PlJlbGVhc2UoKTsKKyAgICAgICAgbVNoYWRlclJlc291cmNlID0gTlVMTDsKKyAgICB9Cit9CisK
K1JlbmRlclRhcmdldDExICpSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKFJlbmRl
clRhcmdldCAqdGFyZ2V0KQoreworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKHJ4OjpSZW5k
ZXJUYXJnZXQxMSosIHRhcmdldCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxyeDo6UmVuZGVy
VGFyZ2V0MTEqPih0YXJnZXQpOworfQorCitJRDNEMTFUZXh0dXJlMkQgKlJlbmRlclRhcmdldDEx
OjpnZXRUZXh0dXJlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmU7Cit9CisKK0lEM0Qx
MVJlbmRlclRhcmdldFZpZXcgKlJlbmRlclRhcmdldDExOjpnZXRSZW5kZXJUYXJnZXRWaWV3KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbVJlbmRlclRhcmdldDsKK30KKworSUQzRDExRGVwdGhTdGVu
Y2lsVmlldyAqUmVuZGVyVGFyZ2V0MTE6OmdldERlcHRoU3RlbmNpbFZpZXcoKSBjb25zdAorewor
ICAgIHJldHVybiBtRGVwdGhTdGVuY2lsOworfQorCitJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcg
KlJlbmRlclRhcmdldDExOjpnZXRTaGFkZXJSZXNvdXJjZVZpZXcoKSBjb25zdAoreworICAgIHJl
dHVybiBtU2hhZGVyUmVzb3VyY2U7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJUYXJnZXQxMTo6
Z2V0U3VicmVzb3VyY2VJbmRleCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdWJyZXNvdXJjZUlu
ZGV4OworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclRhcmdldDExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclRhcmdldDExLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOTc4MjdmMjYzOTcwNzI5NDI4NGEyY2NkMzQ4MWM5N2JlZGU4OWIwNwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkMTEvUmVuZGVyVGFyZ2V0MTEuaApAQCAtMCwwICsxLDUxIEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworLy8gUmVuZGVyVGFyZ2V0MTEuaDogRGVmaW5lcyBhIERYMTEtc3BlY2lmaWMgd3JhcHBlciBm
b3IgSUQzRDExVmlldyBwb2ludGVycworLy8gcmV0YWluZWQgYnkgUmVuZGVyYnVmZmVycy4KKwor
I2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSVEFSR0VUMTFfSF8KKyNkZWZpbmUgTElC
R0xFU1YyX1JFTkRFUkVSX1JFTkRFUlRBUkdFVDExX0hfCisKKyNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvUmVuZGVyVGFyZ2V0LmgiCisKK25hbWVzcGFjZSByeAoreworY2xhc3MgUmVuZGVy
ZXI7CitjbGFzcyBSZW5kZXJlcjExOworCitjbGFzcyBSZW5kZXJUYXJnZXQxMSA6IHB1YmxpYyBS
ZW5kZXJUYXJnZXQKK3sKKyAgcHVibGljOgorICAgIFJlbmRlclRhcmdldDExKFJlbmRlcmVyICpy
ZW5kZXJlciwgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqcnR2LCBJRDNEMTFUZXh0dXJlMkQgKnRl
eCwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0KTsKKyAgICBSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIElEM0QxMURl
cHRoU3RlbmNpbFZpZXcgKmRzdiwgSUQzRDExVGV4dHVyZTJEICp0ZXgsIElEM0QxMVNoYWRlclJl
c291cmNlVmlldyAqc3J2LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAgUmVu
ZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzLCBib29sIGRlcHRoKTsKKyAgICB2
aXJ0dWFsIH5SZW5kZXJUYXJnZXQxMSgpOworCisgICAgc3RhdGljIFJlbmRlclRhcmdldDExICpt
YWtlUmVuZGVyVGFyZ2V0MTEoUmVuZGVyVGFyZ2V0ICpyZW5kZXJUYXJnZXQpOworCisgICAgSUQz
RDExVGV4dHVyZTJEICpnZXRUZXh0dXJlKCkgY29uc3Q7CisgICAgSUQzRDExUmVuZGVyVGFyZ2V0
VmlldyAqZ2V0UmVuZGVyVGFyZ2V0VmlldygpIGNvbnN0OworICAgIElEM0QxMURlcHRoU3RlbmNp
bFZpZXcgKmdldERlcHRoU3RlbmNpbFZpZXcoKSBjb25zdDsKKyAgICBJRDNEMTFTaGFkZXJSZXNv
dXJjZVZpZXcgKmdldFNoYWRlclJlc291cmNlVmlldygpIGNvbnN0OworCisgICAgdW5zaWduZWQg
aW50IGdldFN1YnJlc291cmNlSW5kZXgoKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJUYXJnZXQxMSk7CisKKyAgICB1bnNpZ25lZCBpbnQg
bVN1YnJlc291cmNlSW5kZXg7CisgICAgSUQzRDExVGV4dHVyZTJEICptVGV4dHVyZTsKKyAgICBJ
RDNEMTFSZW5kZXJUYXJnZXRWaWV3ICptUmVuZGVyVGFyZ2V0OworICAgIElEM0QxMURlcHRoU3Rl
bmNpbFZpZXcgKm1EZXB0aFN0ZW5jaWw7CisgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpt
U2hhZGVyUmVzb3VyY2U7CisKKyAgICBSZW5kZXJlcjExICptUmVuZGVyZXI7Cit9OworCit9CisK
KyNlbmRpZiBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSVEFSR0VUMTFfSF8KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43MjJmMGM1YTQ1NTNkODA1MzBhZDdlZDliOGI1NzQ1ODU1ZTVlMjAwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9SZW5kZXJlcjExLmNwcApAQCAtMCwwICsxLDM2MjMgQEAKKyNpbmNsdWRlICJwcmVj
b21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUmVuZGVyZXIxMS5jcHA6IEltcGxl
bWVudHMgYSBiYWNrLWVuZCBzcGVjaWZpYyBjbGFzcyBmb3IgdGhlIEQzRDExIHJlbmRlcmVyLgor
CisjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0
aWVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9Qcm9ncmFtQmluYXJ5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL1JlbmRlclRhcmdldDExLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDExL3JlbmRlcmVyMTFfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvU2hhZGVyRXhlY3V0YWJsZTExLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDExL1N3YXBDaGFpbjExLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0lt
YWdlMTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVydGV4QnVmZmVy
MTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5kZXhCdWZmZXIxMS5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9CdWZmZXJTdG9yYWdlMTEuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGF0YU1hbmFnZXIuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhEYXRhTWFuYWdlci5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9UZXh0dXJlU3RvcmFnZTExLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL1F1ZXJ5MTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvRmVuY2UxMS5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2gxMXZzLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhMTFwcy5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bh
c3N0aHJvdWdocmdiMTFwcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9z
aGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdobHVtMTFwcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdobHVtYWxwaGExMXBz
LmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxl
ZC9jbGVhcjExdnMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVy
cy9jb21waWxlZC9jbGVhcnNpbmdsZTExcHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcm11bHRpcGxlMTFwcy5oIgorCisjaW5jbHVk
ZSAibGliRUdML0Rpc3BsYXkuaCIKKworLy8gRW5hYmxlIEFOR0xFX1NLSVBfRFhHSV8xXzJfQ0hF
Q0sgaWYgdGhlcmUgaXMgbm90IGEgcG9zc2liaWxpdHkgb2YgdXNpbmcgY3Jvc3MtcHJvY2Vzcwor
Ly8gSFdORHMgb3IgdGhlIFdpbmRvd3MgNyBQbGF0Zm9ybSBVcGRhdGUgKEtCMjY3MDgzOCkgaXMg
ZXhwZWN0ZWQgdG8gYmUgaW5zdGFsbGVkLgorI2lmbmRlZiBBTkdMRV9TS0lQX0RYR0lfMV8yX0NI
RUNLCisjZGVmaW5lIEFOR0xFX1NLSVBfRFhHSV8xXzJfQ0hFQ0sgMAorI2VuZGlmCisKKyNpZmRl
ZiBfREVCVUcKKy8vIHRoaXMgZmxhZyBlbmFibGVzIHN1cHByZXNzaW5nIHNvbWUgc3B1cmlvdXMg
d2FybmluZ3MgdGhhdCBwb3AgdXAgaW4gY2VydGFpbiBXZWJHTCBzYW1wbGVzCisvLyBhbmQgY29u
Zm9ybWFuY2UgdGVzdHMuIHRvIGVuYWJsZSBhbGwgd2FybmluZ3MsIHJlbW92ZSB0aGlzIGRlZmlu
ZS4KKyNkZWZpbmUgQU5HTEVfU1VQUFJFU1NfRDNEMTFfSEFaQVJEX1dBUk5JTkdTIDEKKyNlbmRp
ZgorCituYW1lc3BhY2UgcngKK3sKK3N0YXRpYyBjb25zdCBEWEdJX0ZPUk1BVCBSZW5kZXJUYXJn
ZXRGb3JtYXRzW10gPQorICAgIHsKKyAgICAgICAgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk0s
CisgICAgICAgIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNCisgICAgfTsKKworc3RhdGljIGNv
bnN0IERYR0lfRk9STUFUIERlcHRoU3RlbmNpbEZvcm1hdHNbXSA9CisgICAgeworICAgICAgICBE
WEdJX0ZPUk1BVF9VTktOT1dOLAorICAgICAgICBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlO
VCwKKyAgICAgICAgRFhHSV9GT1JNQVRfRDE2X1VOT1JNCisgICAgfTsKKworZW51bQoreworICAg
IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl9TTTQgPSAxNgorfTsKKworUmVuZGVyZXIxMTo6
UmVuZGVyZXIxMShlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIEhEQyBoRGMpIDogUmVuZGVyZXIoZGlz
cGxheSksIG1EYyhoRGMpCit7CisgICAgbVZlcnRleERhdGFNYW5hZ2VyID0gTlVMTDsKKyAgICBt
SW5kZXhEYXRhTWFuYWdlciA9IE5VTEw7CisKKyAgICBtTGluZUxvb3BJQiA9IE5VTEw7CisgICAg
bVRyaWFuZ2xlRmFuSUIgPSBOVUxMOworCisgICAgbUNvcHlSZXNvdXJjZXNJbml0aWFsaXplZCA9
IGZhbHNlOworICAgIG1Db3B5VkIgPSBOVUxMOworICAgIG1Db3B5U2FtcGxlciA9IE5VTEw7Cisg
ICAgbUNvcHlJTCA9IE5VTEw7CisgICAgbUNvcHlWUyA9IE5VTEw7CisgICAgbUNvcHlSR0JBUFMg
PSBOVUxMOworICAgIG1Db3B5UkdCUFMgPSBOVUxMOworICAgIG1Db3B5THVtUFMgPSBOVUxMOwor
ICAgIG1Db3B5THVtQWxwaGFQUyA9IE5VTEw7CisKKyAgICBtQ2xlYXJSZXNvdXJjZXNJbml0aWFs
aXplZCA9IGZhbHNlOworICAgIG1DbGVhclZCID0gTlVMTDsKKyAgICBtQ2xlYXJJTCA9IE5VTEw7
CisgICAgbUNsZWFyVlMgPSBOVUxMOworICAgIG1DbGVhclNpbmdsZVBTID0gTlVMTDsKKyAgICBt
Q2xlYXJNdWx0aXBsZVBTID0gTlVMTDsKKyAgICBtQ2xlYXJTY2lzc29yUlMgPSBOVUxMOworICAg
IG1DbGVhck5vU2Npc3NvclJTID0gTlVMTDsKKworICAgIG1TeW5jUXVlcnkgPSBOVUxMOworCisg
ICAgbUQzZDExTW9kdWxlID0gTlVMTDsKKyAgICBtRHhnaU1vZHVsZSA9IE5VTEw7CisKKyAgICBt
RGV2aWNlTG9zdCA9IGZhbHNlOworCisgICAgbU1heFN1cHBvcnRlZFNhbXBsZXMgPSAwOworCisg
ICAgbURldmljZSA9IE5VTEw7CisgICAgbURldmljZUNvbnRleHQgPSBOVUxMOworICAgIG1EeGdp
QWRhcHRlciA9IE5VTEw7CisgICAgbUR4Z2lGYWN0b3J5ID0gTlVMTDsKKworICAgIG1Ecml2ZXJD
b25zdGFudEJ1ZmZlclZTID0gTlVMTDsKKyAgICBtRHJpdmVyQ29uc3RhbnRCdWZmZXJQUyA9IE5V
TEw7CisKKyAgICBtQkdSQVRleHR1cmVTdXBwb3J0ID0gZmFsc2U7CisKKyAgICBtSXNHZW9tZXRy
eVNoYWRlckFjdGl2ZSA9IGZhbHNlOworfQorCitSZW5kZXJlcjExOjp+UmVuZGVyZXIxMSgpCit7
CisgICAgcmVsZWFzZSgpOworfQorCitSZW5kZXJlcjExICpSZW5kZXJlcjExOjptYWtlUmVuZGVy
ZXIxMShSZW5kZXJlciAqcmVuZGVyZXIpCit7CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUo
cng6OlJlbmRlcmVyMTEqLCByZW5kZXJlcikpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxyeDo6
UmVuZGVyZXIxMSo+KHJlbmRlcmVyKTsKK30KKworI2lmbmRlZiBfX2QzZDExXzFfaF9fCisjZGVm
aW5lIEQzRDExX01FU1NBR0VfSURfREVWSUNFX0RSQVdfUkVOREVSVEFSR0VUVklFV19OT1RfU0VU
ICgoRDNEMTFfTUVTU0FHRV9JRCkzMTQ2MDgxKQorI2VuZGlmCisKK0VHTGludCBSZW5kZXJlcjEx
Ojppbml0aWFsaXplKCkKK3sKKyAgICBpZiAoIWluaXRpYWxpemVDb21waWxlcigpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7CisgICAgfQorCisgICAgbUR4Z2lN
b2R1bGUgPSBMb2FkTGlicmFyeShURVhUKCJkeGdpLmRsbCIpKTsKKyAgICBtRDNkMTFNb2R1bGUg
PSBMb2FkTGlicmFyeShURVhUKCJkM2QxMS5kbGwiKSk7CisKKyAgICBpZiAobUQzZDExTW9kdWxl
ID09IE5VTEwgfHwgbUR4Z2lNb2R1bGUgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIEVSUigiQ291
bGQgbm90IGxvYWQgRDNEMTEgb3IgRFhHSSBsaWJyYXJ5IC0gYWJvcnRpbmchXG4iKTsKKyAgICAg
ICAgcmV0dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7CisgICAgfQorCisgICAgLy8gY3JlYXRlIHRo
ZSBEM0QxMSBkZXZpY2UKKyAgICBBU1NFUlQobURldmljZSA9PSBOVUxMKTsKKyAgICBQRk5fRDNE
MTFfQ1JFQVRFX0RFVklDRSBEM0QxMUNyZWF0ZURldmljZSA9IChQRk5fRDNEMTFfQ1JFQVRFX0RF
VklDRSlHZXRQcm9jQWRkcmVzcyhtRDNkMTFNb2R1bGUsICJEM0QxMUNyZWF0ZURldmljZSIpOwor
CisgICAgaWYgKEQzRDExQ3JlYXRlRGV2aWNlID09IE5VTEwpCisgICAgeworICAgICAgICBFUlIo
IkNvdWxkIG5vdCByZXRyaWV2ZSBEM0QxMUNyZWF0ZURldmljZSBhZGRyZXNzIC0gYWJvcnRpbmch
XG4iKTsKKyAgICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7CisgICAgfQorCisgICAg
RDNEX0ZFQVRVUkVfTEVWRUwgZmVhdHVyZUxldmVsc1tdID0KKyAgICB7CisgICAgICAgIEQzRF9G
RUFUVVJFX0xFVkVMXzExXzAsCisgICAgICAgIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzEsCisgICAg
ICAgIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzAsCisgICAgfTsKKworICAgIEhSRVNVTFQgcmVzdWx0
ID0gU19PSzsKKworI2lmZGVmIF9ERUJVRworICAgIHJlc3VsdCA9IEQzRDExQ3JlYXRlRGV2aWNl
KE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEX0RSSVZFUl9UWVBFX0hB
UkRXQVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRDNEMTFfQ1JFQVRFX0RFVklDRV9ERUJVRywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlTGV2ZWxzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFycmF5U2l6ZShmZWF0dXJlTGV2ZWxzKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBEM0QxMV9TREtfVkVSU0lPTiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmbURldmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbUZlYXR1
cmVMZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbURldmljZUNvbnRleHQp
OworCisgICAgaWYgKCFtRGV2aWNlIHx8IEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAg
RVJSKCJGYWlsZWQgY3JlYXRpbmcgRGVidWcgRDNEMTEgZGV2aWNlIC0gZmFsbGluZyBiYWNrIHRv
IHJlbGVhc2UgcnVudGltZS5cbiIpOworICAgIH0KKworICAgIGlmICghbURldmljZSB8fCBGQUlM
RUQocmVzdWx0KSkKKyNlbmRpZgorICAgIHsKKyAgICAgICAgcmVzdWx0ID0gRDNEMTFDcmVhdGVE
ZXZpY2UoTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEX0RSSVZF
Ul9UWVBFX0hBUkRXQVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmZWF0dXJlTGV2ZWxzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBcnJheVNpemUoZmVhdHVyZUxldmVscyksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEQzRDExX1NES19WRVJTSU9OLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmbURldmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJm1GZWF0dXJlTGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZtRGV2aWNlQ29udGV4dCk7CisKKyAgICAgICAgaWYgKCFtRGV2aWNlIHx8IEZBSUxFRChyZXN1
bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgRDNEMTEg
ZGV2aWNlIC0gYWJvcnRpbmchXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBFR0xfTk9UX0lOSVRJ
QUxJWkVEOyAgIC8vIENsZWFudXAgZG9uZSBieSBkZXN0cnVjdG9yIHRocm91Z2ggZ2xEZXN0cm95
UmVuZGVyZXIKKyAgICAgICAgfQorICAgIH0KKworI2lmICFBTkdMRV9TS0lQX0RYR0lfMV8yX0NI
RUNLCisgICAgLy8gSW4gb3JkZXIgdG8gY3JlYXRlIGEgc3dhcCBjaGFpbiBmb3IgYW4gSFdORCBv
d25lZCBieSBhbm90aGVyIHByb2Nlc3MsIERYR0kgMS4yIGlzIHJlcXVpcmVkLgorICAgIC8vIFRo
ZSBlYXNpZXN0IHdheSB0byBjaGVjayBpcyB0byBxdWVyeSBmb3IgYSBJRFhHSURldmljZTIuCisg
ICAgYm9vbCByZXF1aXJlRFhHSTFfMiA9IGZhbHNlOworICAgIEhXTkQgaHduZCA9IFdpbmRvd0Zy
b21EQyhtRGMpOworICAgIGlmIChod25kKQorICAgIHsKKyAgICAgICAgRFdPUkQgY3VycmVudFBy
b2Nlc3NJZCA9IEdldEN1cnJlbnRQcm9jZXNzSWQoKTsKKyAgICAgICAgRFdPUkQgd25kUHJvY2Vz
c0lkOworICAgICAgICBHZXRXaW5kb3dUaHJlYWRQcm9jZXNzSWQoaHduZCwgJnduZFByb2Nlc3NJ
ZCk7CisgICAgICAgIHJlcXVpcmVEWEdJMV8yID0gKGN1cnJlbnRQcm9jZXNzSWQgIT0gd25kUHJv
Y2Vzc0lkKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmVxdWlyZURYR0kxXzIg
PSB0cnVlOworICAgIH0KKworICAgIGlmIChyZXF1aXJlRFhHSTFfMikKKyAgICB7CisgICAgICAg
IElEWEdJRGV2aWNlMiAqZHhnaURldmljZTIgPSBOVUxMOworICAgICAgICByZXN1bHQgPSBtRGV2
aWNlLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRFhHSURldmljZTIpLCAodm9pZCoqKSZkeGdp
RGV2aWNlMik7CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAg
ICAgICAgRVJSKCJEWEdJIDEuMiByZXF1aXJlZCB0byBwcmVzZW50IHRvIEhXTkRzIG93bmVkIGJ5
IGFub3RoZXIgcHJvY2Vzcy5cbiIpOworICAgICAgICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElB
TElaRUQ7CisgICAgICAgIH0KKyAgICAgICAgU2FmZVJlbGVhc2UoZHhnaURldmljZTIpOworICAg
IH0KKyNlbmRpZgorCisgICAgSURYR0lEZXZpY2UgKmR4Z2lEZXZpY2UgPSBOVUxMOworICAgIHJl
c3VsdCA9IG1EZXZpY2UtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEWEdJRGV2aWNlKSwgKHZv
aWQqKikmZHhnaURldmljZSk7CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAg
ICAgICBFUlIoIkNvdWxkIG5vdCBxdWVyeSBEWEdJIGRldmljZSAtIGFib3J0aW5nIVxuIik7Cisg
ICAgICAgIHJldHVybiBFR0xfTk9UX0lOSVRJQUxJWkVEOworICAgIH0KKworICAgIHJlc3VsdCA9
IGR4Z2lEZXZpY2UtPkdldFBhcmVudChfX3V1aWRvZihJRFhHSUFkYXB0ZXIpLCAodm9pZCoqKSZt
RHhnaUFkYXB0ZXIpOworCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAg
RVJSKCJDb3VsZCBub3QgcmV0cmlldmUgRFhHSSBhZGFwdGVyIC0gYWJvcnRpbmchXG4iKTsKKyAg
ICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7CisgICAgfQorCisgICAgZHhnaURldmlj
ZS0+UmVsZWFzZSgpOworCisgICAgbUR4Z2lBZGFwdGVyLT5HZXREZXNjKCZtQWRhcHRlckRlc2Ny
aXB0aW9uKTsKKyAgICBtZW1zZXQobURlc2NyaXB0aW9uLCAwLCBzaXplb2YobURlc2NyaXB0aW9u
KSk7CisgICAgd2NzdG9tYnMobURlc2NyaXB0aW9uLCBtQWRhcHRlckRlc2NyaXB0aW9uLkRlc2Ny
aXB0aW9uLCBzaXplb2YobURlc2NyaXB0aW9uKSAtIDEpOworCisgICAgcmVzdWx0ID0gbUR4Z2lB
ZGFwdGVyLT5HZXRQYXJlbnQoX191dWlkb2YoSURYR0lGYWN0b3J5KSwgKHZvaWQqKikmbUR4Z2lG
YWN0b3J5KTsKKworICAgIGlmICghbUR4Z2lGYWN0b3J5IHx8IEZBSUxFRChyZXN1bHQpKQorICAg
IHsKKyAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIERYR0kgZmFjdG9yeSAtIGFib3J0aW5n
IVxuIik7CisgICAgICAgIHJldHVybiBFR0xfTk9UX0lOSVRJQUxJWkVEOworICAgIH0KKworICAg
IC8vIERpc2FibGUgc29tZSBzcHVyaW91cyBEM0QxMSBkZWJ1ZyB3YXJuaW5ncyB0byBwcmV2ZW50
IHRoZW0gZnJvbSBmbG9vZGluZyB0aGUgb3V0cHV0IGxvZworI2lmIGRlZmluZWQoQU5HTEVfU1VQ
UFJFU1NfRDNEMTFfSEFaQVJEX1dBUk5JTkdTKSAmJiBkZWZpbmVkKF9ERUJVRykKKyAgICBJRDNE
MTFJbmZvUXVldWUgKmluZm9RdWV1ZTsKKyAgICByZXN1bHQgPSBtRGV2aWNlLT5RdWVyeUludGVy
ZmFjZShfX3V1aWRvZihJRDNEMTFJbmZvUXVldWUpLCAgKHZvaWQgKiopJmluZm9RdWV1ZSk7CisK
KyAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBEM0QxMV9NRVNTQUdF
X0lEIGhpZGVNZXNzYWdlc1tdID0KKyAgICAgICAgeworICAgICAgICAgICAgRDNEMTFfTUVTU0FH
RV9JRF9ERVZJQ0VfRFJBV19SRU5ERVJUQVJHRVRWSUVXX05PVF9TRVQKKyAgICAgICAgfTsKKwor
ICAgICAgICBEM0QxMV9JTkZPX1FVRVVFX0ZJTFRFUiBmaWx0ZXIgPSB7MH07CisgICAgICAgIGZp
bHRlci5EZW55TGlzdC5OdW1JRHMgPSBBcnJheVNpemUoaGlkZU1lc3NhZ2VzKTsKKyAgICAgICAg
ZmlsdGVyLkRlbnlMaXN0LnBJRExpc3QgPSBoaWRlTWVzc2FnZXM7CisKKyAgICAgICAgaW5mb1F1
ZXVlLT5BZGRTdG9yYWdlRmlsdGVyRW50cmllcygmZmlsdGVyKTsKKworICAgICAgICBpbmZvUXVl
dWUtPlJlbGVhc2UoKTsKKyAgICB9CisjZW5kaWYKKworICAgIHVuc2lnbmVkIGludCBtYXhTdXBw
b3J0ZWRTYW1wbGVzID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgcnRGb3JtYXRDb3VudCA9IEFycmF5
U2l6ZShSZW5kZXJUYXJnZXRGb3JtYXRzKTsKKyAgICB1bnNpZ25lZCBpbnQgZHNGb3JtYXRDb3Vu
dCA9IEFycmF5U2l6ZShEZXB0aFN0ZW5jaWxGb3JtYXRzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IHJ0Rm9ybWF0Q291bnQgKyBkc0Zvcm1hdENvdW50OyArK2kpCisgICAgewor
ICAgICAgICBEWEdJX0ZPUk1BVCBmb3JtYXQgPSAoaSA8IHJ0Rm9ybWF0Q291bnQpID8gUmVuZGVy
VGFyZ2V0Rm9ybWF0c1tpXSA6IERlcHRoU3RlbmNpbEZvcm1hdHNbaSAtIHJ0Rm9ybWF0Q291bnRd
OworICAgICAgICBpZiAoZm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCisgICAgICAgIHsK
KyAgICAgICAgICAgIFVJTlQgZm9ybWF0U3VwcG9ydDsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1E
ZXZpY2UtPkNoZWNrRm9ybWF0U3VwcG9ydChmb3JtYXQsICZmb3JtYXRTdXBwb3J0KTsKKyAgICAg
ICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSAmJiAoZm9ybWF0U3VwcG9ydCAmIEQzRDExX0ZP
Uk1BVF9TVVBQT1JUX01VTFRJU0FNUExFX1JFTkRFUlRBUkdFVCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgTXVsdGlzYW1wbGVTdXBwb3J0SW5mbyBzdXBwb3J0SW5mbzsKKworICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAxOyBqIDw9IEQzRDExX01BWF9NVUxU
SVNBTVBMRV9TQU1QTEVfQ09VTlQ7IGorKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNoZWNrTXVsdGlzYW1wbGVRdWFsaXR5TGV2ZWxz
KGZvcm1hdCwgaiwgJnN1cHBvcnRJbmZvLnF1YWxpdHlMZXZlbHNbaiAtIDFdKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpICYmIHN1cHBvcnRJbmZvLnF1YWxpdHlM
ZXZlbHNbaiAtIDFdID4gMCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgbWF4U3VwcG9ydGVkU2FtcGxlcyA9IHN0ZDo6bWF4KGosIG1heFN1cHBvcnRlZFNh
bXBsZXMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydElu
Zm8ucXVhbGl0eUxldmVsc1tqIC0gMV0gPSAwOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbU11bHRpc2FtcGxlU3VwcG9ydE1hcC5p
bnNlcnQoc3RkOjptYWtlX3BhaXIoZm9ybWF0LCBzdXBwb3J0SW5mbykpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIG1NYXhTdXBwb3J0ZWRTYW1wbGVzID0gbWF4U3VwcG9y
dGVkU2FtcGxlczsKKworICAgIGluaXRpYWxpemVEZXZpY2UoKTsKKworICAgIC8vIEJHUkEgdGV4
dHVyZSBzdXBwb3J0IGlzIG9wdGlvbmFsIGluIGZlYXR1cmUgbGV2ZWxzIDEwIGFuZCAxMF8xCisg
ICAgVUlOVCBmb3JtYXRTdXBwb3J0OworICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNoZWNrRm9ybWF0
U3VwcG9ydChEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STSwgJmZvcm1hdFN1cHBvcnQpOworICAg
IGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEVSUigiRXJyb3IgY2hlY2tpbmcg
QkdSQSBmb3JtYXQgc3VwcG9ydDogMHglMDhYIiwgcmVzdWx0KTsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgY29uc3QgaW50IGZsYWdzID0gKEQzRDExX0ZPUk1BVF9TVVBQT1JUX1RF
WFRVUkUyRCB8IEQzRDExX0ZPUk1BVF9TVVBQT1JUX1JFTkRFUl9UQVJHRVQpOworICAgICAgICBt
QkdSQVRleHR1cmVTdXBwb3J0ID0gKGZvcm1hdFN1cHBvcnQgJiBmbGFncykgPT0gZmxhZ3M7Cisg
ICAgfQorCisgICAgLy8gQ2hlY2sgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZSBzdXBwb3J0CisgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCByZXF1aXJlZFRleHR1cmVGbGFncyA9IEQzRDExX0ZP
Uk1BVF9TVVBQT1JUX1RFWFRVUkUyRCB8IEQzRDExX0ZPUk1BVF9TVVBQT1JUX1RFWFRVUkVDVUJF
OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcmVxdWlyZWRSZW5kZXJhYmxlRmxhZ3Mg
PSBEM0QxMV9GT1JNQVRfU1VQUE9SVF9SRU5ERVJfVEFSR0VUOworICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBpbnQgcmVxdWlyZWRGaWx0ZXJGbGFncyA9IEQzRDExX0ZPUk1BVF9TVVBQT1JUX1NI
QURFUl9TQU1QTEU7CisKKyAgICBEWEdJX0ZPUk1BVCBmbG9hdDE2Rm9ybWF0c1tdID0KKyAgICB7
CisgICAgICAgIERYR0lfRk9STUFUX1IxNl9GTE9BVCwKKyAgICAgICAgRFhHSV9GT1JNQVRfUjE2
RzE2X0ZMT0FULAorICAgICAgICBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQsCisgICAg
fTsKKworICAgIERYR0lfRk9STUFUIGZsb2F0MzJGb3JtYXRzW10gPQorICAgIHsKKyAgICAgICAg
RFhHSV9GT1JNQVRfUjMyX0ZMT0FULAorICAgICAgICBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQs
CisgICAgICAgIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCwKKyAgICB9OworCisgICAg
bUZsb2F0MTZUZXh0dXJlU3VwcG9ydCA9IHRydWU7CisgICAgbUZsb2F0MTZGaWx0ZXJTdXBwb3J0
ID0gdHJ1ZTsKKyAgICBtRmxvYXQxNlJlbmRlclN1cHBvcnQgPSB0cnVlOworICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgQXJyYXlTaXplKGZsb2F0MTZGb3JtYXRzKTsgaSsrKQorICAg
IHsKKyAgICAgICAgaWYgKFNVQ0NFRURFRChtRGV2aWNlLT5DaGVja0Zvcm1hdFN1cHBvcnQoZmxv
YXQxNkZvcm1hdHNbaV0sICZmb3JtYXRTdXBwb3J0KSkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1GbG9hdDE2VGV4dHVyZVN1cHBvcnQgPSBtRmxvYXQxNlRleHR1cmVTdXBwb3J0ICYmIChmb3Jt
YXRTdXBwb3J0ICYgcmVxdWlyZWRUZXh0dXJlRmxhZ3MpID09IHJlcXVpcmVkVGV4dHVyZUZsYWdz
OworICAgICAgICAgICAgbUZsb2F0MTZGaWx0ZXJTdXBwb3J0ID0gbUZsb2F0MTZGaWx0ZXJTdXBw
b3J0ICYmIChmb3JtYXRTdXBwb3J0ICYgcmVxdWlyZWRGaWx0ZXJGbGFncykgPT0gcmVxdWlyZWRG
aWx0ZXJGbGFnczsKKyAgICAgICAgICAgIG1GbG9hdDE2UmVuZGVyU3VwcG9ydCA9IG1GbG9hdDE2
UmVuZGVyU3VwcG9ydCAmJiAoZm9ybWF0U3VwcG9ydCAmIHJlcXVpcmVkUmVuZGVyYWJsZUZsYWdz
KSA9PSByZXF1aXJlZFJlbmRlcmFibGVGbGFnczsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1GbG9hdDE2VGV4dHVyZVN1cHBvcnQgPSBmYWxzZTsKKyAg
ICAgICAgICAgIG1GbG9hdDE2UmVuZGVyU3VwcG9ydCA9IGZhbHNlOworICAgICAgICAgICAgbUZs
b2F0MTZGaWx0ZXJTdXBwb3J0ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtRmxv
YXQzMlRleHR1cmVTdXBwb3J0ID0gdHJ1ZTsKKyAgICBtRmxvYXQzMkZpbHRlclN1cHBvcnQgPSB0
cnVlOworICAgIG1GbG9hdDMyUmVuZGVyU3VwcG9ydCA9IHRydWU7CisgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUoZmxvYXQzMkZvcm1hdHMpOyBpKyspCisgICAgewor
ICAgICAgICBpZiAoU1VDQ0VFREVEKG1EZXZpY2UtPkNoZWNrRm9ybWF0U3VwcG9ydChmbG9hdDMy
Rm9ybWF0c1tpXSwgJmZvcm1hdFN1cHBvcnQpKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUZs
b2F0MzJUZXh0dXJlU3VwcG9ydCA9IG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQgJiYgKGZvcm1hdFN1
cHBvcnQgJiByZXF1aXJlZFRleHR1cmVGbGFncykgPT0gcmVxdWlyZWRUZXh0dXJlRmxhZ3M7Cisg
ICAgICAgICAgICBtRmxvYXQzMkZpbHRlclN1cHBvcnQgPSBtRmxvYXQzMkZpbHRlclN1cHBvcnQg
JiYgKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZEZpbHRlckZsYWdzKSA9PSByZXF1aXJlZEZpbHRl
ckZsYWdzOworICAgICAgICAgICAgbUZsb2F0MzJSZW5kZXJTdXBwb3J0ID0gbUZsb2F0MzJSZW5k
ZXJTdXBwb3J0ICYmIChmb3JtYXRTdXBwb3J0ICYgcmVxdWlyZWRSZW5kZXJhYmxlRmxhZ3MpID09
IHJlcXVpcmVkUmVuZGVyYWJsZUZsYWdzOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgbUZsb2F0MzJUZXh0dXJlU3VwcG9ydCA9IGZhbHNlOworICAgICAg
ICAgICAgbUZsb2F0MzJGaWx0ZXJTdXBwb3J0ID0gZmFsc2U7CisgICAgICAgICAgICBtRmxvYXQz
MlJlbmRlclN1cHBvcnQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIENoZWNr
IGNvbXByZXNzZWQgdGV4dHVyZSBzdXBwb3J0CisgICAgY29uc3QgdW5zaWduZWQgaW50IHJlcXVp
cmVkQ29tcHJlc3NlZFRleHR1cmVGbGFncyA9IEQzRDExX0ZPUk1BVF9TVVBQT1JUX1RFWFRVUkUy
RDsKKworICAgIGlmIChTVUNDRUVERUQobURldmljZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KERYR0lf
Rk9STUFUX0JDMV9VTk9STSwgJmZvcm1hdFN1cHBvcnQpKSkKKyAgICB7CisgICAgICAgIG1EWFQx
VGV4dHVyZVN1cHBvcnQgPSAoZm9ybWF0U3VwcG9ydCAmIHJlcXVpcmVkQ29tcHJlc3NlZFRleHR1
cmVGbGFncykgPT0gcmVxdWlyZWRDb21wcmVzc2VkVGV4dHVyZUZsYWdzOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBtRFhUMVRleHR1cmVTdXBwb3J0ID0gZmFsc2U7CisgICAgfQor
CisgICAgaWYgKFNVQ0NFRURFRChtRGV2aWNlLT5DaGVja0Zvcm1hdFN1cHBvcnQoRFhHSV9GT1JN
QVRfQkMzX1VOT1JNLCAmZm9ybWF0U3VwcG9ydCkpKQorICAgIHsKKyAgICAgICAgbURYVDNUZXh0
dXJlU3VwcG9ydCA9IChmb3JtYXRTdXBwb3J0ICYgcmVxdWlyZWRDb21wcmVzc2VkVGV4dHVyZUZs
YWdzKSA9PSByZXF1aXJlZENvbXByZXNzZWRUZXh0dXJlRmxhZ3M7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIG1EWFQzVGV4dHVyZVN1cHBvcnQgPSBmYWxzZTsKKyAgICB9CisKKyAg
ICBpZiAoU1VDQ0VFREVEKG1EZXZpY2UtPkNoZWNrRm9ybWF0U3VwcG9ydChEWEdJX0ZPUk1BVF9C
QzVfVU5PUk0sICZmb3JtYXRTdXBwb3J0KSkpCisgICAgeworICAgICAgICBtRFhUNVRleHR1cmVT
dXBwb3J0ID0gKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZENvbXByZXNzZWRUZXh0dXJlRmxhZ3Mp
ID09IHJlcXVpcmVkQ29tcHJlc3NlZFRleHR1cmVGbGFnczsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgbURYVDVUZXh0dXJlU3VwcG9ydCA9IGZhbHNlOworICAgIH0KKworICAgIC8v
IENoZWNrIGRlcHRoIHRleHR1cmUgc3VwcG9ydAorICAgIERYR0lfRk9STUFUIGRlcHRoVGV4dHVy
ZUZvcm1hdHNbXSA9CisgICAgeworICAgICAgICBEWEdJX0ZPUk1BVF9EMTZfVU5PUk0sCisgICAg
ICAgIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5ULAorICAgIH07CisKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgaW50IHJlcXVpcmVkRGVwdGhUZXh0dXJlRmxhZ3MgPSBEM0QxMV9GT1JN
QVRfU1VQUE9SVF9ERVBUSF9TVEVOQ0lMIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0QxMV9GT1JNQVRfU1VQUE9SVF9URVhUVVJF
MkQ7CisKKyAgICBtRGVwdGhUZXh0dXJlU3VwcG9ydCA9IHRydWU7CisgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUoZGVwdGhUZXh0dXJlRm9ybWF0cyk7IGkrKykKKyAg
ICB7CisgICAgICAgIGlmIChTVUNDRUVERUQobURldmljZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KGRl
cHRoVGV4dHVyZUZvcm1hdHNbaV0sICZmb3JtYXRTdXBwb3J0KSkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1EZXB0aFRleHR1cmVTdXBwb3J0ID0gbURlcHRoVGV4dHVyZVN1cHBvcnQgJiYgKChm
b3JtYXRTdXBwb3J0ICYgcmVxdWlyZWREZXB0aFRleHR1cmVGbGFncykgPT0gcmVxdWlyZWREZXB0
aFRleHR1cmVGbGFncyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgICBtRGVwdGhUZXh0dXJlU3VwcG9ydCA9IGZhbHNlOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIEVHTF9TVUNDRVNTOworfQorCisvLyBkbyBhbnkgb25lLXRpbWUgZGV2aWNl
IGluaXRpYWxpemF0aW9uCisvLyBOT1RFOiB0aGlzIGlzIGFsc28gbmVlZGVkIGFmdGVyIGEgZGV2
aWNlIGxvc3QvcmVzZXQKKy8vIHRvIHJlc2V0IHRoZSBzY2VuZSBzdGF0dXMgYW5kIGVuc3VyZSB0
aGUgZGVmYXVsdCBzdGF0ZXMgYXJlIHJlc2V0Lgordm9pZCBSZW5kZXJlcjExOjppbml0aWFsaXpl
RGV2aWNlKCkKK3sKKyAgICBtU3RhdGVDYWNoZS5pbml0aWFsaXplKG1EZXZpY2UpOworICAgIG1J
bnB1dExheW91dENhY2hlLmluaXRpYWxpemUobURldmljZSwgbURldmljZUNvbnRleHQpOworCisg
ICAgQVNTRVJUKCFtVmVydGV4RGF0YU1hbmFnZXIgJiYgIW1JbmRleERhdGFNYW5hZ2VyKTsKKyAg
ICBtVmVydGV4RGF0YU1hbmFnZXIgPSBuZXcgVmVydGV4RGF0YU1hbmFnZXIodGhpcyk7CisgICAg
bUluZGV4RGF0YU1hbmFnZXIgPSBuZXcgSW5kZXhEYXRhTWFuYWdlcih0aGlzKTsKKworICAgIG1h
cmtBbGxTdGF0ZURpcnR5KCk7Cit9CisKK2ludCBSZW5kZXJlcjExOjpnZW5lcmF0ZUNvbmZpZ3Mo
Q29uZmlnRGVzYyAqKmNvbmZpZ0Rlc2NMaXN0KQoreworICAgIHVuc2lnbmVkIGludCBudW1SZW5k
ZXJGb3JtYXRzID0gQXJyYXlTaXplKFJlbmRlclRhcmdldEZvcm1hdHMpOworICAgIHVuc2lnbmVk
IGludCBudW1EZXB0aEZvcm1hdHMgPSBBcnJheVNpemUoRGVwdGhTdGVuY2lsRm9ybWF0cyk7Cisg
ICAgKCpjb25maWdEZXNjTGlzdCkgPSBuZXcgQ29uZmlnRGVzY1tudW1SZW5kZXJGb3JtYXRzICog
bnVtRGVwdGhGb3JtYXRzXTsKKyAgICBpbnQgbnVtQ29uZmlncyA9IDA7CisgICAgCisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgZm9ybWF0SW5kZXggPSAwOyBmb3JtYXRJbmRleCA8IG51bVJlbmRlckZv
cm1hdHM7IGZvcm1hdEluZGV4KyspCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBk
ZXB0aFN0ZW5jaWxJbmRleCA9IDA7IGRlcHRoU3RlbmNpbEluZGV4IDwgbnVtRGVwdGhGb3JtYXRz
OyBkZXB0aFN0ZW5jaWxJbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBEWEdJX0ZPUk1B
VCByZW5kZXJUYXJnZXRGb3JtYXQgPSBSZW5kZXJUYXJnZXRGb3JtYXRzW2Zvcm1hdEluZGV4XTsK
KworICAgICAgICAgICAgVUlOVCBmb3JtYXRTdXBwb3J0ID0gMDsKKyAgICAgICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gbURldmljZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KHJlbmRlclRhcmdldEZvcm1h
dCwgJmZvcm1hdFN1cHBvcnQpOworCisgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkg
JiYgKGZvcm1hdFN1cHBvcnQgJiBEM0QxMV9GT1JNQVRfU1VQUE9SVF9SRU5ERVJfVEFSR0VUKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEWEdJX0ZPUk1BVCBkZXB0aFN0ZW5jaWxG
b3JtYXQgPSBEZXB0aFN0ZW5jaWxGb3JtYXRzW2RlcHRoU3RlbmNpbEluZGV4XTsKKworICAgICAg
ICAgICAgICAgIGJvb2wgZGVwdGhTdGVuY2lsRm9ybWF0T0sgPSB0cnVlOworCisgICAgICAgICAg
ICAgICAgaWYgKGRlcHRoU3RlbmNpbEZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVUlOVCBmb3JtYXRTdXBwb3J0ID0g
MDsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q2hlY2tGb3JtYXRTdXBw
b3J0KGRlcHRoU3RlbmNpbEZvcm1hdCwgJmZvcm1hdFN1cHBvcnQpOworICAgICAgICAgICAgICAg
ICAgICBkZXB0aFN0ZW5jaWxGb3JtYXRPSyA9IFNVQ0NFRURFRChyZXN1bHQpICYmIChmb3JtYXRT
dXBwb3J0ICYgRDNEMTFfRk9STUFUX1NVUFBPUlRfREVQVEhfU1RFTkNJTCk7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGRlcHRoU3RlbmNpbEZvcm1hdE9LKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQ29uZmlnRGVzYyBuZXdDb25maWc7
CisgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5yZW5kZXJUYXJnZXRGb3JtYXQgPSBkM2Qx
MV9nbDo6Q29udmVydEJhY2tCdWZmZXJGb3JtYXQocmVuZGVyVGFyZ2V0Rm9ybWF0KTsKKyAgICAg
ICAgICAgICAgICAgICAgbmV3Q29uZmlnLmRlcHRoU3RlbmNpbEZvcm1hdCA9IGQzZDExX2dsOjpD
b252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KGRlcHRoU3RlbmNpbEZvcm1hdCk7CisgICAgICAgICAg
ICAgICAgICAgIG5ld0NvbmZpZy5tdWx0aVNhbXBsZSA9IDA7ICAgICAvLyBGSVhNRTogZW51bWVy
YXRlIG11bHRpLXNhbXBsaW5nCisgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5mYXN0Q29u
ZmlnID0gdHJ1ZTsgICAvLyBBc3N1bWUgYWxsIERYMTEgZm9ybWF0IGNvbnZlcnNpb25zIHRvIGJl
IGZhc3QKKworICAgICAgICAgICAgICAgICAgICAoKmNvbmZpZ0Rlc2NMaXN0KVtudW1Db25maWdz
KytdID0gbmV3Q29uZmlnOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiBudW1Db25maWdzOworfQorCit2b2lkIFJlbmRlcmVy
MTE6OmRlbGV0ZUNvbmZpZ3MoQ29uZmlnRGVzYyAqY29uZmlnRGVzY0xpc3QpCit7CisgICAgZGVs
ZXRlIFtdIChjb25maWdEZXNjTGlzdCk7Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6c3luYyhib29s
IGJsb2NrKQoreworICAgIGlmIChibG9jaykKKyAgICB7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0
OworCisgICAgICAgIGlmICghbVN5bmNRdWVyeSkKKyAgICAgICAgeworICAgICAgICAgICAgRDNE
MTFfUVVFUllfREVTQyBxdWVyeURlc2M7CisgICAgICAgICAgICBxdWVyeURlc2MuUXVlcnkgPSBE
M0QxMV9RVUVSWV9FVkVOVDsKKyAgICAgICAgICAgIHF1ZXJ5RGVzYy5NaXNjRmxhZ3MgPSAwOwor
CisgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVRdWVyeSgmcXVlcnlEZXNjLCAm
bVN5bmNRdWVyeSk7CisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAg
ICAgICB9CisKKyAgICAgICAgbURldmljZUNvbnRleHQtPkVuZChtU3luY1F1ZXJ5KTsKKyAgICAg
ICAgbURldmljZUNvbnRleHQtPkZsdXNoKCk7CisKKyAgICAgICAgZG8KKyAgICAgICAgeworICAg
ICAgICAgICAgcmVzdWx0ID0gbURldmljZUNvbnRleHQtPkdldERhdGEobVN5bmNRdWVyeSwgTlVM
TCwgMCwgRDNEMTFfQVNZTkNfR0VUREFUQV9ET05PVEZMVVNIKTsKKworICAgICAgICAgICAgLy8g
S2VlcCBwb2xsaW5nLCBidXQgYWxsb3cgb3RoZXIgdGhyZWFkcyB0byBkbyBzb21ldGhpbmcgdXNl
ZnVsIGZpcnN0CisgICAgICAgICAgICBTbGVlcCgwKTsKKworICAgICAgICAgICAgaWYgKHRlc3RE
ZXZpY2VMb3N0KHRydWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB3aGlsZSAocmVzdWx0ID09IFNfRkFM
U0UpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRGV2aWNlQ29udGV4dC0+Rmx1
c2goKTsKKyAgICB9Cit9CisKK1N3YXBDaGFpbiAqUmVuZGVyZXIxMTo6Y3JlYXRlU3dhcENoYWlu
KEhXTkQgd2luZG93LCBIQU5ETEUgc2hhcmVIYW5kbGUsIEdMZW51bSBiYWNrQnVmZmVyRm9ybWF0
LCBHTGVudW0gZGVwdGhCdWZmZXJGb3JtYXQpCit7CisgICAgcmV0dXJuIG5ldyByeDo6U3dhcENo
YWluMTEodGhpcywgd2luZG93LCBzaGFyZUhhbmRsZSwgYmFja0J1ZmZlckZvcm1hdCwgZGVwdGhC
dWZmZXJGb3JtYXQpOworfQorCit2b2lkIFJlbmRlcmVyMTE6OnNldFNhbXBsZXJTdGF0ZShnbDo6
U2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBjb25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1w
bGVyU3RhdGUpCit7CisgICAgaWYgKHR5cGUgPT0gZ2w6OlNBTVBMRVJfUElYRUwpCisgICAgewor
ICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9V
TklUUykKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJQaXhlbCBzaGFkZXIgc2FtcGxlciBp
bmRleCAlaSBpcyBub3QgdmFsaWQuIiwgaW5kZXgpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKG1Gb3JjZVNldFBpeGVsU2FtcGxlclN0YXRlc1tpbmRleF0g
fHwgbWVtY21wKCZzYW1wbGVyU3RhdGUsICZtQ3VyUGl4ZWxTYW1wbGVyU3RhdGVzW2luZGV4XSwg
c2l6ZW9mKGdsOjpTYW1wbGVyU3RhdGUpKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBJ
RDNEMTFTYW1wbGVyU3RhdGUgKmR4U2FtcGxlclN0YXRlID0gbVN0YXRlQ2FjaGUuZ2V0U2FtcGxl
clN0YXRlKHNhbXBsZXJTdGF0ZSk7CisKKyAgICAgICAgICAgIGlmICghZHhTYW1wbGVyU3RhdGUp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRVJSKCJOVUxMIHNhbXBsZXIgc3RhdGUg
cmV0dXJuZWQgYnkgUmVuZGVyU3RhdGVDYWNoZTo6Z2V0U2FtcGxlclN0YXRlLCBzZXR0aW5nIHRo
ZSBkZWZhdWx0IgorICAgICAgICAgICAgICAgICAgICAic2FtcGxlciBzdGF0ZSBmb3IgcGl4ZWwg
c2hhZGVycyBhdCBzbG90ICVpLiIsIGluZGV4KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgbURldmljZUNvbnRleHQtPlBTU2V0U2FtcGxlcnMoaW5kZXgsIDEsICZkeFNhbXBsZXJTdGF0
ZSk7CisKKyAgICAgICAgICAgIG1DdXJQaXhlbFNhbXBsZXJTdGF0ZXNbaW5kZXhdID0gc2FtcGxl
clN0YXRlOworICAgICAgICB9CisKKyAgICAgICAgbUZvcmNlU2V0UGl4ZWxTYW1wbGVyU3RhdGVz
W2luZGV4XSA9IGZhbHNlOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlID09IGdsOjpTQU1QTEVS
X1ZFUlRFWCkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gKGludCln
ZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpKQorICAgICAgICB7CisgICAgICAgICAgICBF
UlIoIlZlcnRleCBzaGFkZXIgc2FtcGxlciBpbmRleCAlaSBpcyBub3QgdmFsaWQuIiwgaW5kZXgp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Gb3JjZVNl
dFZlcnRleFNhbXBsZXJTdGF0ZXNbaW5kZXhdIHx8IG1lbWNtcCgmc2FtcGxlclN0YXRlLCAmbUN1
clZlcnRleFNhbXBsZXJTdGF0ZXNbaW5kZXhdLCBzaXplb2YoZ2w6OlNhbXBsZXJTdGF0ZSkpICE9
IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIElEM0QxMVNhbXBsZXJTdGF0ZSAqZHhTYW1wbGVy
U3RhdGUgPSBtU3RhdGVDYWNoZS5nZXRTYW1wbGVyU3RhdGUoc2FtcGxlclN0YXRlKTsKKworICAg
ICAgICAgICAgaWYgKCFkeFNhbXBsZXJTdGF0ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBFUlIoIk5VTEwgc2FtcGxlciBzdGF0ZSByZXR1cm5lZCBieSBSZW5kZXJTdGF0ZUNhY2hl
OjpnZXRTYW1wbGVyU3RhdGUsIHNldHRpbmcgdGhlIGRlZmF1bHQiCisgICAgICAgICAgICAgICAg
ICAgICJzYW1wbGVyIHN0YXRlIGZvciB2ZXJ0ZXggc2hhZGVycyBhdCBzbG90ICVpLiIsIGluZGV4
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbURldmljZUNvbnRleHQtPlZTU2V0U2Ft
cGxlcnMoaW5kZXgsIDEsICZkeFNhbXBsZXJTdGF0ZSk7CisKKyAgICAgICAgICAgIG1DdXJWZXJ0
ZXhTYW1wbGVyU3RhdGVzW2luZGV4XSA9IHNhbXBsZXJTdGF0ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIG1Gb3JjZVNldFZlcnRleFNhbXBsZXJTdGF0ZXNbaW5kZXhdID0gZmFsc2U7CisgICAgfQor
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKK30KKwordm9pZCBSZW5kZXJlcjExOjpzZXRUZXh0dXJl
KGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGdsOjpUZXh0dXJlICp0ZXh0dXJlKQor
eworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqdGV4dHVyZVNSViA9IE5VTEw7CisgICAg
dW5zaWduZWQgaW50IHNlcmlhbCA9IDA7CisgICAgYm9vbCBmb3JjZVNldFRleHR1cmUgPSBmYWxz
ZTsKKworICAgIGlmICh0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UgKnRleFN0b3JhZ2UgPSB0ZXh0dXJlLT5nZXROYXRpdmVUZXh0dXJlKCk7CisgICAgICAg
IGlmICh0ZXhTdG9yYWdlKQorICAgICAgICB7CisgICAgICAgICAgICBUZXh0dXJlU3RvcmFnZTEx
ICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFnZTExOjptYWtlVGV4dHVyZVN0b3JhZ2UxMSh0ZXhT
dG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CisgICAgICAgICAgICB0ZXh0dXJlU1JWID0g
c3RvcmFnZTExLT5nZXRTUlYoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHdlIGdldCBO
VUxMIGJhY2sgZnJvbSBnZXRTUlYgaGVyZSwgc29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gdGhlIHRl
eHR1cmUgY2xhc3MgYW5kIHdlJ3JlIHVuZXhwZWN0ZWRseQorICAgICAgICAvLyBtaXNzaW5nIHRo
ZSBzaGFkZXIgcmVzb3VyY2UgdmlldworICAgICAgICBBU1NFUlQodGV4dHVyZVNSViAhPSBOVUxM
KTsKKworICAgICAgICBzZXJpYWwgPSB0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCk7CisgICAg
ICAgIGZvcmNlU2V0VGV4dHVyZSA9IHRleHR1cmUtPmhhc0RpcnR5SW1hZ2VzKCk7CisgICAgfQor
CisgICAgaWYgKHR5cGUgPT0gZ2w6OlNBTVBMRVJfUElYRUwpCisgICAgeworICAgICAgICBpZiAo
aW5kZXggPCAwIHx8IGluZGV4ID49IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKKyAgICAg
ICAgeworICAgICAgICAgICAgRVJSKCJQaXhlbCBzaGFkZXIgc2FtcGxlciBpbmRleCAlaSBpcyBu
b3QgdmFsaWQuIiwgaW5kZXgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGZvcmNlU2V0VGV4dHVyZSB8fCBtQ3VyUGl4ZWxUZXh0dXJlU2VyaWFsc1tpbmRl
eF0gIT0gc2VyaWFsKQorICAgICAgICB7CisgICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+UFNT
ZXRTaGFkZXJSZXNvdXJjZXMoaW5kZXgsIDEsICZ0ZXh0dXJlU1JWKTsKKyAgICAgICAgfQorCisg
ICAgICAgIG1DdXJQaXhlbFRleHR1cmVTZXJpYWxzW2luZGV4XSA9IHNlcmlhbDsKKyAgICB9Cisg
ICAgZWxzZSBpZiAodHlwZSA9PSBnbDo6U0FNUExFUl9WRVJURVgpCisgICAgeworICAgICAgICBp
ZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IChpbnQpZ2V0TWF4VmVydGV4VGV4dHVyZUltYWdlVW5p
dHMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJWZXJ0ZXggc2hhZGVyIHNhbXBsZXIg
aW5kZXggJWkgaXMgbm90IHZhbGlkLiIsIGluZGV4KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChmb3JjZVNldFRleHR1cmUgfHwgbUN1clZlcnRleFRleHR1
cmVTZXJpYWxzW2luZGV4XSAhPSBzZXJpYWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZp
Y2VDb250ZXh0LT5WU1NldFNoYWRlclJlc291cmNlcyhpbmRleCwgMSwgJnRleHR1cmVTUlYpOwor
ICAgICAgICB9CisKKyAgICAgICAgbUN1clZlcnRleFRleHR1cmVTZXJpYWxzW2luZGV4XSA9IHNl
cmlhbDsKKyAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworfQorCit2b2lkIFJlbmRlcmVy
MTE6OnNldFJhc3Rlcml6ZXJTdGF0ZShjb25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZyYXN0ZXJT
dGF0ZSkKK3sKKyAgICBpZiAobUZvcmNlU2V0UmFzdGVyU3RhdGUgfHwgbWVtY21wKCZyYXN0ZXJT
dGF0ZSwgJm1DdXJSYXN0ZXJTdGF0ZSwgc2l6ZW9mKGdsOjpSYXN0ZXJpemVyU3RhdGUpKSAhPSAw
KQorICAgIHsKKyAgICAgICAgSUQzRDExUmFzdGVyaXplclN0YXRlICpkeFJhc3RlclN0YXRlID0g
bVN0YXRlQ2FjaGUuZ2V0UmFzdGVyaXplclN0YXRlKHJhc3RlclN0YXRlLCBtU2Npc3NvckVuYWJs
ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtQ3VyRGVwdGhTaXplKTsKKyAgICAgICAgaWYgKCFk
eFJhc3RlclN0YXRlKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIk5VTEwgcmFzdGVyaXpl
ciBzdGF0ZSByZXR1cm5lZCBieSBSZW5kZXJTdGF0ZUNhY2hlOjpnZXRSYXN0ZXJpemVyU3RhdGUs
IHNldHRpbmcgdGhlIGRlZmF1bHQiCisgICAgICAgICAgICAgICAgInJhc3Rlcml6ZXIgc3RhdGUu
Iik7CisgICAgICAgIH0KKworICAgICAgICBtRGV2aWNlQ29udGV4dC0+UlNTZXRTdGF0ZShkeFJh
c3RlclN0YXRlKTsKKworICAgICAgICBtQ3VyUmFzdGVyU3RhdGUgPSByYXN0ZXJTdGF0ZTsKKyAg
ICB9CisKKyAgICBtRm9yY2VTZXRSYXN0ZXJTdGF0ZSA9IGZhbHNlOworfQorCit2b2lkIFJlbmRl
cmVyMTE6OnNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3Qg
Z2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xvciAmYmxlbmRDb2xvciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlTWFzaykK
K3sKKyAgICBpZiAobUZvcmNlU2V0QmxlbmRTdGF0ZSB8fAorICAgICAgICBtZW1jbXAoJmJsZW5k
U3RhdGUsICZtQ3VyQmxlbmRTdGF0ZSwgc2l6ZW9mKGdsOjpCbGVuZFN0YXRlKSkgIT0gMCB8fAor
ICAgICAgICBtZW1jbXAoJmJsZW5kQ29sb3IsICZtQ3VyQmxlbmRDb2xvciwgc2l6ZW9mKGdsOjpD
b2xvcikpICE9IDAgfHwKKyAgICAgICAgc2FtcGxlTWFzayAhPSBtQ3VyU2FtcGxlTWFzaykKKyAg
ICB7CisgICAgICAgIElEM0QxMUJsZW5kU3RhdGUgKmR4QmxlbmRTdGF0ZSA9IG1TdGF0ZUNhY2hl
LmdldEJsZW5kU3RhdGUoZnJhbWVidWZmZXIsIGJsZW5kU3RhdGUpOworICAgICAgICBpZiAoIWR4
QmxlbmRTdGF0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJOVUxMIGJsZW5kIHN0YXRl
IHJldHVybmVkIGJ5IFJlbmRlclN0YXRlQ2FjaGU6OmdldEJsZW5kU3RhdGUsIHNldHRpbmcgdGhl
IGRlZmF1bHQgIgorICAgICAgICAgICAgICAgICJibGVuZCBzdGF0ZS4iKTsKKyAgICAgICAgfQor
CisgICAgICAgIGZsb2F0IGJsZW5kQ29sb3JzWzRdID0gezAuMGZ9OworICAgICAgICBpZiAoYmxl
bmRTdGF0ZS5zb3VyY2VCbGVuZFJHQiAhPSBHTF9DT05TVEFOVF9BTFBIQSAmJiBibGVuZFN0YXRl
LnNvdXJjZUJsZW5kUkdCICE9IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSAmJgorICAgICAg
ICAgICAgYmxlbmRTdGF0ZS5kZXN0QmxlbmRSR0IgIT0gR0xfQ09OU1RBTlRfQUxQSEEgJiYgYmxl
bmRTdGF0ZS5kZXN0QmxlbmRSR0IgIT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBKQorICAg
ICAgICB7CisgICAgICAgICAgICBibGVuZENvbG9yc1swXSA9IGJsZW5kQ29sb3IucmVkOworICAg
ICAgICAgICAgYmxlbmRDb2xvcnNbMV0gPSBibGVuZENvbG9yLmdyZWVuOworICAgICAgICAgICAg
YmxlbmRDb2xvcnNbMl0gPSBibGVuZENvbG9yLmJsdWU7CisgICAgICAgICAgICBibGVuZENvbG9y
c1szXSA9IGJsZW5kQ29sb3IuYWxwaGE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg
ICB7CisgICAgICAgICAgICBibGVuZENvbG9yc1swXSA9IGJsZW5kQ29sb3IuYWxwaGE7CisgICAg
ICAgICAgICBibGVuZENvbG9yc1sxXSA9IGJsZW5kQ29sb3IuYWxwaGE7CisgICAgICAgICAgICBi
bGVuZENvbG9yc1syXSA9IGJsZW5kQ29sb3IuYWxwaGE7CisgICAgICAgICAgICBibGVuZENvbG9y
c1szXSA9IGJsZW5kQ29sb3IuYWxwaGE7CisgICAgICAgIH0KKworICAgICAgICBtRGV2aWNlQ29u
dGV4dC0+T01TZXRCbGVuZFN0YXRlKGR4QmxlbmRTdGF0ZSwgYmxlbmRDb2xvcnMsIHNhbXBsZU1h
c2spOworCisgICAgICAgIG1DdXJCbGVuZFN0YXRlID0gYmxlbmRTdGF0ZTsKKyAgICAgICAgbUN1
ckJsZW5kQ29sb3IgPSBibGVuZENvbG9yOworICAgICAgICBtQ3VyU2FtcGxlTWFzayA9IHNhbXBs
ZU1hc2s7CisgICAgfQorCisgICAgbUZvcmNlU2V0QmxlbmRTdGF0ZSA9IGZhbHNlOworfQorCit2
b2lkIFJlbmRlcmVyMTE6OnNldERlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpEZXB0aFN0ZW5j
aWxTdGF0ZSAmZGVwdGhTdGVuY2lsU3RhdGUsIGludCBzdGVuY2lsUmVmLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RlbmNpbEJhY2tSZWYsIGJvb2wgZnJvbnRG
YWNlQ0NXKQoreworICAgIGlmIChtRm9yY2VTZXREZXB0aFN0ZW5jaWxTdGF0ZSB8fAorICAgICAg
ICBtZW1jbXAoJmRlcHRoU3RlbmNpbFN0YXRlLCAmbUN1ckRlcHRoU3RlbmNpbFN0YXRlLCBzaXpl
b2YoZ2w6OkRlcHRoU3RlbmNpbFN0YXRlKSkgIT0gMCB8fAorICAgICAgICBzdGVuY2lsUmVmICE9
IG1DdXJTdGVuY2lsUmVmIHx8IHN0ZW5jaWxCYWNrUmVmICE9IG1DdXJTdGVuY2lsQmFja1JlZikK
KyAgICB7CisgICAgICAgIGlmIChkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsV3JpdGVtYXNrICE9
IGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrIHx8CisgICAgICAgICAgICBz
dGVuY2lsUmVmICE9IHN0ZW5jaWxCYWNrUmVmIHx8CisgICAgICAgICAgICBkZXB0aFN0ZW5jaWxT
dGF0ZS5zdGVuY2lsTWFzayAhPSBkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsQmFja01hc2spCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiU2VwYXJhdGUgZnJvbnQvYmFjayBzdGVuY2lsIHdy
aXRlbWFza3MsIHJlZmVyZW5jZSB2YWx1ZXMsIG9yIHN0ZW5jaWwgbWFzayB2YWx1ZXMgYXJlICIK
KyAgICAgICAgICAgICAgICAiaW52YWxpZCB1bmRlciBXZWJHTC4iKTsKKyAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICB9CisKKyAgICAg
ICAgSUQzRDExRGVwdGhTdGVuY2lsU3RhdGUgKmR4RGVwdGhTdGVuY2lsU3RhdGUgPSBtU3RhdGVD
YWNoZS5nZXREZXB0aFN0ZW5jaWxTdGF0ZShkZXB0aFN0ZW5jaWxTdGF0ZSk7CisgICAgICAgIGlm
ICghZHhEZXB0aFN0ZW5jaWxTdGF0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJOVUxM
IGRlcHRoIHN0ZW5jaWwgc3RhdGUgcmV0dXJuZWQgYnkgUmVuZGVyU3RhdGVDYWNoZTo6Z2V0RGVw
dGhTdGVuY2lsU3RhdGUsICIKKyAgICAgICAgICAgICAgICAic2V0dGluZyB0aGUgZGVmYXVsdCBk
ZXB0aCBzdGVuY2lsIHN0YXRlLiIpOworICAgICAgICB9CisKKyAgICAgICAgbURldmljZUNvbnRl
eHQtPk9NU2V0RGVwdGhTdGVuY2lsU3RhdGUoZHhEZXB0aFN0ZW5jaWxTdGF0ZSwgc3RhdGljX2Nh
c3Q8VUlOVD4oc3RlbmNpbFJlZikpOworCisgICAgICAgIG1DdXJEZXB0aFN0ZW5jaWxTdGF0ZSA9
IGRlcHRoU3RlbmNpbFN0YXRlOworICAgICAgICBtQ3VyU3RlbmNpbFJlZiA9IHN0ZW5jaWxSZWY7
CisgICAgICAgIG1DdXJTdGVuY2lsQmFja1JlZiA9IHN0ZW5jaWxCYWNrUmVmOworICAgIH0KKwor
ICAgIG1Gb3JjZVNldERlcHRoU3RlbmNpbFN0YXRlID0gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVy
ZXIxMTo6c2V0U2Npc3NvclJlY3RhbmdsZShjb25zdCBnbDo6UmVjdGFuZ2xlICZzY2lzc29yLCBi
b29sIGVuYWJsZWQpCit7CisgICAgaWYgKG1Gb3JjZVNldFNjaXNzb3IgfHwgbWVtY21wKCZzY2lz
c29yLCAmbUN1clNjaXNzb3IsIHNpemVvZihnbDo6UmVjdGFuZ2xlKSkgIT0gMCB8fAorICAgICAg
ICBlbmFibGVkICE9IG1TY2lzc29yRW5hYmxlZCkKKyAgICB7CisgICAgICAgIGlmIChlbmFibGVk
KQorICAgICAgICB7CisgICAgICAgICAgICBEM0QxMV9SRUNUIHJlY3Q7CisgICAgICAgICAgICBy
ZWN0LmxlZnQgPSBzdGQ6Om1heCgwLCBzY2lzc29yLngpOworICAgICAgICAgICAgcmVjdC50b3Ag
PSBzdGQ6Om1heCgwLCBzY2lzc29yLnkpOworICAgICAgICAgICAgcmVjdC5yaWdodCA9IHNjaXNz
b3IueCArIHN0ZDo6bWF4KDAsIHNjaXNzb3Iud2lkdGgpOworICAgICAgICAgICAgcmVjdC5ib3R0
b20gPSBzY2lzc29yLnkgKyBzdGQ6Om1heCgwLCBzY2lzc29yLmhlaWdodCk7CisKKyAgICAgICAg
ICAgIG1EZXZpY2VDb250ZXh0LT5SU1NldFNjaXNzb3JSZWN0cygxLCAmcmVjdCk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoZW5hYmxlZCAhPSBtU2Npc3NvckVuYWJsZWQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1Gb3JjZVNldFJhc3RlclN0YXRlID0gdHJ1ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIG1DdXJTY2lzc29yID0gc2Npc3NvcjsKKyAgICAgICAgbVNjaXNzb3JFbmFibGVkID0g
ZW5hYmxlZDsKKyAgICB9CisKKyAgICBtRm9yY2VTZXRTY2lzc29yID0gZmFsc2U7Cit9CisKK2Jv
b2wgUmVuZGVyZXIxMTo6c2V0Vmlld3BvcnQoY29uc3QgZ2w6OlJlY3RhbmdsZSAmdmlld3BvcnQs
IGZsb2F0IHpOZWFyLCBmbG9hdCB6RmFyLCBHTGVudW0gZHJhd01vZGUsIEdMZW51bSBmcm9udEZh
Y2UsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlnbm9yZVZpZXdwb3J0KQor
eworICAgIGdsOjpSZWN0YW5nbGUgYWN0dWFsVmlld3BvcnQgPSB2aWV3cG9ydDsKKyAgICBmbG9h
dCBhY3R1YWxaTmVhciA9IGdsOjpjbGFtcDAxKHpOZWFyKTsKKyAgICBmbG9hdCBhY3R1YWxaRmFy
ID0gZ2w6OmNsYW1wMDEoekZhcik7CisgICAgaWYgKGlnbm9yZVZpZXdwb3J0KQorICAgIHsKKyAg
ICAgICAgYWN0dWFsVmlld3BvcnQueCA9IDA7CisgICAgICAgIGFjdHVhbFZpZXdwb3J0LnkgPSAw
OworICAgICAgICBhY3R1YWxWaWV3cG9ydC53aWR0aCA9IG1SZW5kZXJUYXJnZXREZXNjLndpZHRo
OworICAgICAgICBhY3R1YWxWaWV3cG9ydC5oZWlnaHQgPSBtUmVuZGVyVGFyZ2V0RGVzYy5oZWln
aHQ7CisgICAgICAgIGFjdHVhbFpOZWFyID0gMC4wZjsKKyAgICAgICAgYWN0dWFsWkZhciA9IDEu
MGY7CisgICAgfQorCisgICAgLy8gR2V0IEQzRCB2aWV3cG9ydCBib3VuZHMsIHdoaWNoIGRlcGVu
ZHMgb24gdGhlIGZlYXR1cmUgbGV2ZWwKKyAgICBjb25zdCBSYW5nZSYgdmlld3BvcnRCb3VuZHMg
PSBnZXRWaWV3cG9ydEJvdW5kcygpOworCisgICAgLy8gQ2xhbXAgd2lkdGggYW5kIGhlaWdodCBm
aXJzdCB0byB0aGUgZ2wgbWF4aW11bSwgdGhlbiBjbGFtcCBmdXJ0aGVyIGlmIHdlIGV4dGVuZCBw
YXN0IHRoZSBEM0QgbWF4aW11bSBib3VuZHMKKyAgICBEM0QxMV9WSUVXUE9SVCBkeFZpZXdwb3J0
OworICAgIGR4Vmlld3BvcnQuVG9wTGVmdFggPSBnbDo6Y2xhbXAoYWN0dWFsVmlld3BvcnQueCwg
dmlld3BvcnRCb3VuZHMuc3RhcnQsIHZpZXdwb3J0Qm91bmRzLmVuZCk7CisgICAgZHhWaWV3cG9y
dC5Ub3BMZWZ0WSA9IGdsOjpjbGFtcChhY3R1YWxWaWV3cG9ydC55LCB2aWV3cG9ydEJvdW5kcy5z
dGFydCwgdmlld3BvcnRCb3VuZHMuZW5kKTsKKyAgICBkeFZpZXdwb3J0LldpZHRoID0gZ2w6OmNs
YW1wKGFjdHVhbFZpZXdwb3J0LndpZHRoLCAwLCBnZXRNYXhWaWV3cG9ydERpbWVuc2lvbigpKTsK
KyAgICBkeFZpZXdwb3J0LkhlaWdodCA9IGdsOjpjbGFtcChhY3R1YWxWaWV3cG9ydC5oZWlnaHQs
IDAsIGdldE1heFZpZXdwb3J0RGltZW5zaW9uKCkpOworICAgIGR4Vmlld3BvcnQuV2lkdGggPSBz
dGQ6Om1pbigoaW50KWR4Vmlld3BvcnQuV2lkdGgsIHZpZXdwb3J0Qm91bmRzLmVuZCAtIHN0YXRp
Y19jYXN0PGludD4oZHhWaWV3cG9ydC5Ub3BMZWZ0WCkpOworICAgIGR4Vmlld3BvcnQuSGVpZ2h0
ID0gc3RkOjptaW4oKGludClkeFZpZXdwb3J0LkhlaWdodCwgdmlld3BvcnRCb3VuZHMuZW5kIC0g
c3RhdGljX2Nhc3Q8aW50PihkeFZpZXdwb3J0LlRvcExlZnRZKSk7CisgICAgZHhWaWV3cG9ydC5N
aW5EZXB0aCA9IGFjdHVhbFpOZWFyOworICAgIGR4Vmlld3BvcnQuTWF4RGVwdGggPSBhY3R1YWxa
RmFyOworCisgICAgaWYgKGR4Vmlld3BvcnQuV2lkdGggPD0gMCB8fCBkeFZpZXdwb3J0LkhlaWdo
dCA8PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIE5vdGhpbmcgdG8gcmVu
ZGVyCisgICAgfQorCisgICAgYm9vbCB2aWV3cG9ydENoYW5nZWQgPSBtRm9yY2VTZXRWaWV3cG9y
dCB8fCBtZW1jbXAoJmFjdHVhbFZpZXdwb3J0LCAmbUN1clZpZXdwb3J0LCBzaXplb2YoZ2w6OlJl
Y3RhbmdsZSkpICE9IDAgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbFpOZWFy
ICE9IG1DdXJOZWFyIHx8IGFjdHVhbFpGYXIgIT0gbUN1ckZhcjsKKworICAgIGlmICh2aWV3cG9y
dENoYW5nZWQpCisgICAgeworICAgICAgICBtRGV2aWNlQ29udGV4dC0+UlNTZXRWaWV3cG9ydHMo
MSwgJmR4Vmlld3BvcnQpOworCisgICAgICAgIG1DdXJWaWV3cG9ydCA9IGFjdHVhbFZpZXdwb3J0
OworICAgICAgICBtQ3VyTmVhciA9IGFjdHVhbFpOZWFyOworICAgICAgICBtQ3VyRmFyID0gYWN0
dWFsWkZhcjsKKworICAgICAgICBtUGl4ZWxDb25zdGFudHMudmlld0Nvb3Jkc1swXSA9IGFjdHVh
bFZpZXdwb3J0LndpZHRoICAqIDAuNWY7CisgICAgICAgIG1QaXhlbENvbnN0YW50cy52aWV3Q29v
cmRzWzFdID0gYWN0dWFsVmlld3BvcnQuaGVpZ2h0ICogMC41ZjsKKyAgICAgICAgbVBpeGVsQ29u
c3RhbnRzLnZpZXdDb29yZHNbMl0gPSBhY3R1YWxWaWV3cG9ydC54ICsgKGFjdHVhbFZpZXdwb3J0
LndpZHRoICAqIDAuNWYpOworICAgICAgICBtUGl4ZWxDb25zdGFudHMudmlld0Nvb3Jkc1szXSA9
IGFjdHVhbFZpZXdwb3J0LnkgKyAoYWN0dWFsVmlld3BvcnQuaGVpZ2h0ICogMC41Zik7CisKKyAg
ICAgICAgbVBpeGVsQ29uc3RhbnRzLmRlcHRoRnJvbnRbMF0gPSAoYWN0dWFsWkZhciAtIGFjdHVh
bFpOZWFyKSAqIDAuNWY7CisgICAgICAgIG1QaXhlbENvbnN0YW50cy5kZXB0aEZyb250WzFdID0g
KGFjdHVhbFpOZWFyICsgYWN0dWFsWkZhcikgKiAwLjVmOworCisgICAgICAgIG1WZXJ0ZXhDb25z
dGFudHMuZGVwdGhSYW5nZVswXSA9IGFjdHVhbFpOZWFyOworICAgICAgICBtVmVydGV4Q29uc3Rh
bnRzLmRlcHRoUmFuZ2VbMV0gPSBhY3R1YWxaRmFyOworICAgICAgICBtVmVydGV4Q29uc3RhbnRz
LmRlcHRoUmFuZ2VbMl0gPSBhY3R1YWxaRmFyIC0gYWN0dWFsWk5lYXI7CisKKyAgICAgICAgbVBp
eGVsQ29uc3RhbnRzLmRlcHRoUmFuZ2VbMF0gPSBhY3R1YWxaTmVhcjsKKyAgICAgICAgbVBpeGVs
Q29uc3RhbnRzLmRlcHRoUmFuZ2VbMV0gPSBhY3R1YWxaRmFyOworICAgICAgICBtUGl4ZWxDb25z
dGFudHMuZGVwdGhSYW5nZVsyXSA9IGFjdHVhbFpGYXIgLSBhY3R1YWxaTmVhcjsKKyAgICB9CisK
KyAgICBtRm9yY2VTZXRWaWV3cG9ydCA9IGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIFJlbmRlcmVyMTE6OmFwcGx5UHJpbWl0aXZlVHlwZShHTGVudW0gbW9kZSwgR0xzaXplaSBj
b3VudCkKK3sKKyAgICBEM0QxMV9QUklNSVRJVkVfVE9QT0xPR1kgcHJpbWl0aXZlVG9wb2xvZ3kg
PSBEM0RfUFJJTUlUSVZFX1RPUE9MT0dZX1VOREVGSU5FRDsKKworICAgIEdMc2l6ZWkgbWluQ291
bnQgPSAwOworCisgICAgc3dpdGNoIChtb2RlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfUE9JTlRT
OiAgICAgICAgIHByaW1pdGl2ZVRvcG9sb2d5ID0gRDNEMTFfUFJJTUlUSVZFX1RPUE9MT0dZX1BP
SU5UTElTVDsgICBtaW5Db3VudCA9IDE7IGJyZWFrOworICAgICAgY2FzZSBHTF9MSU5FUzogICAg
ICAgICAgcHJpbWl0aXZlVG9wb2xvZ3kgPSBEM0RfUFJJTUlUSVZFX1RPUE9MT0dZX0xJTkVMSVNU
OyAgICAgIG1pbkNvdW50ID0gMjsgYnJlYWs7CisgICAgICBjYXNlIEdMX0xJTkVfTE9PUDogICAg
ICBwcmltaXRpdmVUb3BvbG9neSA9IEQzRF9QUklNSVRJVkVfVE9QT0xPR1lfTElORVNUUklQOyAg
ICAgbWluQ291bnQgPSAyOyBicmVhazsKKyAgICAgIGNhc2UgR0xfTElORV9TVFJJUDogICAgIHBy
aW1pdGl2ZVRvcG9sb2d5ID0gRDNEX1BSSU1JVElWRV9UT1BPTE9HWV9MSU5FU1RSSVA7ICAgICBt
aW5Db3VudCA9IDI7IGJyZWFrOworICAgICAgY2FzZSBHTF9UUklBTkdMRVM6ICAgICAgcHJpbWl0
aXZlVG9wb2xvZ3kgPSBEM0RfUFJJTUlUSVZFX1RPUE9MT0dZX1RSSUFOR0xFTElTVDsgIG1pbkNv
dW50ID0gMzsgYnJlYWs7CisgICAgICBjYXNlIEdMX1RSSUFOR0xFX1NUUklQOiBwcmltaXRpdmVU
b3BvbG9neSA9IEQzRF9QUklNSVRJVkVfVE9QT0xPR1lfVFJJQU5HTEVTVFJJUDsgbWluQ291bnQg
PSAzOyBicmVhazsKKyAgICAgICAgICAvLyBlbXVsYXRlIGZhbnMgdmlhIHJld3JpdGluZyBpbmRl
eCBidWZmZXIKKyAgICAgIGNhc2UgR0xfVFJJQU5HTEVfRkFOOiAgIHByaW1pdGl2ZVRvcG9sb2d5
ID0gRDNEX1BSSU1JVElWRV9UT1BPTE9HWV9UUklBTkdMRUxJU1Q7ICBtaW5Db3VudCA9IDM7IGJy
ZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0sIGZhbHNlKTsKKyAgICB9CisKKyAgICBpZiAocHJpbWl0aXZlVG9wb2xvZ3kgIT0gbUN1
cnJlbnRQcmltaXRpdmVUb3BvbG9neSkKKyAgICB7CisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5J
QVNldFByaW1pdGl2ZVRvcG9sb2d5KHByaW1pdGl2ZVRvcG9sb2d5KTsKKyAgICAgICAgbUN1cnJl
bnRQcmltaXRpdmVUb3BvbG9neSA9IHByaW1pdGl2ZVRvcG9sb2d5OworICAgIH0KKworICAgIHJl
dHVybiBjb3VudCA+PSBtaW5Db3VudDsKK30KKworYm9vbCBSZW5kZXJlcjExOjphcHBseVJlbmRl
clRhcmdldChnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyKQoreworICAgIC8vIEdldCB0aGUg
Y29sb3IgcmVuZGVyIGJ1ZmZlciBhbmQgc2VyaWFsCisgICAgLy8gQWxzbyBleHRyYWN0IHRoZSBy
ZW5kZXIgdGFyZ2V0IGRpbWVuc2lvbnMgYW5kIHZpZXcKKyAgICB1bnNpZ25lZCBpbnQgcmVuZGVy
VGFyZ2V0V2lkdGggPSAwOworICAgIHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRIZWlnaHQgPSAw
OworICAgIEdMZW51bSByZW5kZXJUYXJnZXRGb3JtYXQgPSAwOworICAgIHVuc2lnbmVkIGludCBy
ZW5kZXJUYXJnZXRTZXJpYWxzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTXSA9
IHswfTsKKyAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3KiBmcmFtZWJ1ZmZlclJUVnNbZ2w6OklN
UExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlNdID0ge05VTEx9OworICAgIGJvb2wgbWlzc2lu
Z0NvbG9yUmVuZGVyVGFyZ2V0ID0gdHJ1ZTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGNvbG9y
QXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNobWVudCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhf
RFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQrKykKKyAgICB7CisgICAgICAgIGNvbnN0IEdM
ZW51bSBkcmF3QnVmZmVyU3RhdGUgPSBmcmFtZWJ1ZmZlci0+Z2V0RHJhd0J1ZmZlclN0YXRlKGNv
bG9yQXR0YWNobWVudCk7CisKKyAgICAgICAgaWYgKGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZl
clR5cGUoY29sb3JBdHRhY2htZW50KSAhPSBHTF9OT05FICYmIGRyYXdCdWZmZXJTdGF0ZSAhPSBH
TF9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICAvLyB0aGUgZHJhdyBidWZmZXIgbXVzdCBi
ZSBlaXRoZXIgIm5vbmUiLCAiYmFjayIgZm9yIHRoZSBkZWZhdWx0IGJ1ZmZlciBvciB0aGUgc2Ft
ZSBpbmRleCBhcyB0aGlzIGNvbG9yIChpbiBvcmRlcikKKyAgICAgICAgICAgIEFTU0VSVChkcmF3
QnVmZmVyU3RhdGUgPT0gR0xfQkFDSyB8fCBkcmF3QnVmZmVyU3RhdGUgPT0gKEdMX0NPTE9SX0FU
VEFDSE1FTlQwX0VYVCArIGNvbG9yQXR0YWNobWVudCkpOworCisgICAgICAgICAgICBnbDo6UmVu
ZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcihjb2xv
ckF0dGFjaG1lbnQpOworCisgICAgICAgICAgICBpZiAoIWNvbG9yYnVmZmVyKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIEVSUigicmVuZGVyIHRhcmdldCBwb2ludGVyIHVuZXhwZWN0
ZWRseSBudWxsLiIpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gY2hlY2sgZm9yIHplcm8tc2l6ZWQgZGVmYXVsdCBmcmFtZWJ1
ZmZlciwgd2hpY2ggaXMgYSBzcGVjaWFsIGNhc2UuCisgICAgICAgICAgICAvLyBpbiB0aGlzIGNh
c2Ugd2UgZG8gbm90IHdpc2ggdG8gbW9kaWZ5IGFueSBzdGF0ZSBhbmQganVzdCBzaWxlbnRseSBy
ZXR1cm4gZmFsc2UuCisgICAgICAgICAgICAvLyB0aGlzIHdpbGwgbm90IHJlcG9ydCBhbnkgZ2wg
ZXJyb3IgYnV0IHdpbGwgY2F1c2UgdGhlIGNhbGxpbmcgbWV0aG9kIHRvIHJldHVybi4KKyAgICAg
ICAgICAgIGlmIChjb2xvcmJ1ZmZlci0+Z2V0V2lkdGgoKSA9PSAwIHx8IGNvbG9yYnVmZmVyLT5n
ZXRIZWlnaHQoKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVuZGVyVGFyZ2V0U2VyaWFsc1tj
b2xvckF0dGFjaG1lbnRdID0gY29sb3JidWZmZXItPmdldFNlcmlhbCgpOworCisgICAgICAgICAg
ICAvLyBFeHRyYWN0IHRoZSByZW5kZXIgdGFyZ2V0IGRpbWVuc2lvbnMgYW5kIHZpZXcKKyAgICAg
ICAgICAgIFJlbmRlclRhcmdldDExICpyZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFr
ZVJlbmRlclRhcmdldDExKGNvbG9yYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSk7CisgICAgICAg
ICAgICBpZiAoIXJlbmRlclRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBF
UlIoInJlbmRlciB0YXJnZXQgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZyYW1l
YnVmZmVyUlRWc1tjb2xvckF0dGFjaG1lbnRdID0gcmVuZGVyVGFyZ2V0LT5nZXRSZW5kZXJUYXJn
ZXRWaWV3KCk7CisgICAgICAgICAgICBpZiAoIWZyYW1lYnVmZmVyUlRWc1tjb2xvckF0dGFjaG1l
bnRdKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEVSUigicmVuZGVyIHRhcmdldCB2
aWV3IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobWlzc2luZ0NvbG9yUmVu
ZGVyVGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlbmRlclRhcmdldFdp
ZHRoID0gY29sb3JidWZmZXItPmdldFdpZHRoKCk7CisgICAgICAgICAgICAgICAgcmVuZGVyVGFy
Z2V0SGVpZ2h0ID0gY29sb3JidWZmZXItPmdldEhlaWdodCgpOworICAgICAgICAgICAgICAgIHJl
bmRlclRhcmdldEZvcm1hdCA9IGNvbG9yYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKTsKKyAgICAg
ICAgICAgICAgICBtaXNzaW5nQ29sb3JSZW5kZXJUYXJnZXQgPSBmYWxzZTsKKyAgICAgICAgICAg
IH0KKworI2lmZGVmIF9ERUJVRworICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgRGVidWcg
U0VUU0hBREVSUkVTT1VSQ0VTX0hBWkFSRCBEM0QxMSB3YXJuaW5ncworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgdmVydGV4U2VyaWFsSW5kZXggPSAwOyB2ZXJ0ZXhTZXJpYWxJbmRleCA8
IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IHZlcnRl
eFNlcmlhbEluZGV4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbG9y
YnVmZmVyLT5nZXRUZXh0dXJlU2VyaWFsKCkgIT0gMCAmJiBtQ3VyVmVydGV4VGV4dHVyZVNlcmlh
bHNbdmVydGV4U2VyaWFsSW5kZXhdID09IGNvbG9yYnVmZmVyLT5nZXRUZXh0dXJlU2VyaWFsKCkp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzZXRUZXh0dXJlKGdsOjpT
QU1QTEVSX1ZFUlRFWCwgdmVydGV4U2VyaWFsSW5kZXgsIE5VTEwpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgcGl4ZWxT
ZXJpYWxJbmRleCA9IDA7IHBpeGVsU2VyaWFsSW5kZXggPCBnbDo6TUFYX1RFWFRVUkVfSU1BR0Vf
VU5JVFM7IHBpeGVsU2VyaWFsSW5kZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAoY29sb3JidWZmZXItPmdldFRleHR1cmVTZXJpYWwoKSAhPSAwICYmIG1DdXJQaXhlbFRl
eHR1cmVTZXJpYWxzW3BpeGVsU2VyaWFsSW5kZXhdID09IGNvbG9yYnVmZmVyLT5nZXRUZXh0dXJl
U2VyaWFsKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzZXRUZXh0
dXJlKGdsOjpTQU1QTEVSX1BJWEVMLCBwaXhlbFNlcmlhbEluZGV4LCBOVUxMKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIEdldCB0aGUgZGVwdGggc3RlbmNpbCByZW5kZXIgYnVmZmVyIGFuZCBzZXJpYWxzCisgICAg
Z2w6OlJlbmRlcmJ1ZmZlciAqZGVwdGhTdGVuY2lsID0gTlVMTDsKKyAgICB1bnNpZ25lZCBpbnQg
ZGVwdGhidWZmZXJTZXJpYWwgPSAwOworICAgIHVuc2lnbmVkIGludCBzdGVuY2lsYnVmZmVyU2Vy
aWFsID0gMDsKKyAgICBpZiAoZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyVHlwZSgpICE9IEdM
X05PTkUpCisgICAgeworICAgICAgICBkZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVw
dGhidWZmZXIoKTsKKyAgICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwor
ICAgICAgICAgICAgU2FmZVJlbGVhc2UoZnJhbWVidWZmZXJSVFZzKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGRlcHRoYnVmZmVyU2VyaWFsID0gZGVw
dGhTdGVuY2lsLT5nZXRTZXJpYWwoKTsKKyAgICB9CisgICAgZWxzZSBpZiAoZnJhbWVidWZmZXIt
PmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKKyAgICB7CisgICAgICAgIGRlcHRo
U3RlbmNpbCA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCk7CisgICAgICAgIGlmICgh
ZGVwdGhTdGVuY2lsKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkRlcHRoIHN0ZW5jaWwg
cG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKGZy
YW1lYnVmZmVyUlRWcyk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKwor
ICAgICAgICBzdGVuY2lsYnVmZmVyU2VyaWFsID0gZGVwdGhTdGVuY2lsLT5nZXRTZXJpYWwoKTsK
KyAgICB9CisKKyAgICAvLyBFeHRyYWN0IHRoZSBkZXB0aCBzdGVuY2lsIHNpemVzIGFuZCB2aWV3
CisgICAgdW5zaWduZWQgaW50IGRlcHRoU2l6ZSA9IDA7CisgICAgdW5zaWduZWQgaW50IHN0ZW5j
aWxTaXplID0gMDsKKyAgICBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3KiBmcmFtZWJ1ZmZlckRTViA9
IE5VTEw7CisgICAgaWYgKGRlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIFJlbmRlclRhcmdl
dDExICpkZXB0aFN0ZW5jaWxSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRl
clRhcmdldDExKGRlcHRoU3RlbmNpbC0+Z2V0RGVwdGhTdGVuY2lsKCkpOworICAgICAgICBpZiAo
IWRlcHRoU3RlbmNpbFJlbmRlclRhcmdldCkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJy
ZW5kZXIgdGFyZ2V0IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7CisgICAgICAgICAgICBT
YWZlUmVsZWFzZShmcmFtZWJ1ZmZlclJUVnMpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgZnJhbWVidWZmZXJEU1YgPSBkZXB0aFN0ZW5jaWxSZW5kZXJU
YXJnZXQtPmdldERlcHRoU3RlbmNpbFZpZXcoKTsKKyAgICAgICAgaWYgKCFmcmFtZWJ1ZmZlckRT
VikKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJkZXB0aCBzdGVuY2lsIHZpZXcgcG9pbnRl
ciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKGZyYW1lYnVm
ZmVyUlRWcyk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBJZiB0aGVyZSBpcyBubyByZW5kZXIgYnVmZmVyLCB0aGUgd2lkdGgsIGhlaWdodCBhbmQg
Zm9ybWF0IHZhbHVlcyBjb21lIGZyb20KKyAgICAgICAgLy8gdGhlIGRlcHRoIHN0ZW5jaWwKKyAg
ICAgICAgaWYgKG1pc3NpbmdDb2xvclJlbmRlclRhcmdldCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmVuZGVyVGFyZ2V0V2lkdGggPSBkZXB0aFN0ZW5jaWwtPmdldFdpZHRoKCk7CisgICAgICAg
ICAgICByZW5kZXJUYXJnZXRIZWlnaHQgPSBkZXB0aFN0ZW5jaWwtPmdldEhlaWdodCgpOworICAg
ICAgICAgICAgcmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZGVwdGhTdGVuY2lsLT5nZXRBY3R1YWxGb3Jt
YXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGRlcHRoU2l6ZSA9IGRlcHRoU3RlbmNpbC0+Z2V0
RGVwdGhTaXplKCk7CisgICAgICAgIHN0ZW5jaWxTaXplID0gZGVwdGhTdGVuY2lsLT5nZXRTdGVu
Y2lsU2l6ZSgpOworICAgIH0KKworICAgIC8vIEFwcGx5IHRoZSByZW5kZXIgdGFyZ2V0IGFuZCBk
ZXB0aCBzdGVuY2lsCisgICAgaWYgKCFtUmVuZGVyVGFyZ2V0RGVzY0luaXRpYWxpemVkIHx8ICFt
RGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgfHwKKyAgICAgICAgbWVtY21wKHJlbmRlclRhcmdldFNl
cmlhbHMsIG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFscywgc2l6ZW9mKHJlbmRlclRhcmdldFNl
cmlhbHMpKSAhPSAwIHx8CisgICAgICAgIGRlcHRoYnVmZmVyU2VyaWFsICE9IG1BcHBsaWVkRGVw
dGhidWZmZXJTZXJpYWwgfHwKKyAgICAgICAgc3RlbmNpbGJ1ZmZlclNlcmlhbCAhPSBtQXBwbGll
ZFN0ZW5jaWxidWZmZXJTZXJpYWwpCisgICAgeworICAgICAgICBtRGV2aWNlQ29udGV4dC0+T01T
ZXRSZW5kZXJUYXJnZXRzKGdldE1heFJlbmRlclRhcmdldHMoKSwgZnJhbWVidWZmZXJSVFZzLCBm
cmFtZWJ1ZmZlckRTVik7CisKKyAgICAgICAgbVJlbmRlclRhcmdldERlc2Mud2lkdGggPSByZW5k
ZXJUYXJnZXRXaWR0aDsKKyAgICAgICAgbVJlbmRlclRhcmdldERlc2MuaGVpZ2h0ID0gcmVuZGVy
VGFyZ2V0SGVpZ2h0OworICAgICAgICBtUmVuZGVyVGFyZ2V0RGVzYy5mb3JtYXQgPSByZW5kZXJU
YXJnZXRGb3JtYXQ7CisgICAgICAgIG1Gb3JjZVNldFZpZXdwb3J0ID0gdHJ1ZTsKKyAgICAgICAg
bUZvcmNlU2V0U2Npc3NvciA9IHRydWU7CisKKyAgICAgICAgaWYgKCFtRGVwdGhTdGVuY2lsSW5p
dGlhbGl6ZWQgfHwgZGVwdGhTaXplICE9IG1DdXJEZXB0aFNpemUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1DdXJEZXB0aFNpemUgPSBkZXB0aFNpemU7CisgICAgICAgICAgICBtRm9yY2VTZXRS
YXN0ZXJTdGF0ZSA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBtQ3VyU3RlbmNpbFNpemUg
PSBzdGVuY2lsU2l6ZTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBydEluZGV4ID0gMDsg
cnRJbmRleCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTOyBydEluZGV4Kysp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsc1tydElu
ZGV4XSA9IHJlbmRlclRhcmdldFNlcmlhbHNbcnRJbmRleF07CisgICAgICAgIH0KKyAgICAgICAg
bUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCA9IGRlcHRoYnVmZmVyU2VyaWFsOworICAgICAgICBt
QXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwgPSBzdGVuY2lsYnVmZmVyU2VyaWFsOworICAgICAg
ICBtUmVuZGVyVGFyZ2V0RGVzY0luaXRpYWxpemVkID0gdHJ1ZTsKKyAgICAgICAgbURlcHRoU3Rl
bmNpbEluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
R0xlbnVtIFJlbmRlcmVyMTE6OmFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5LCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0ZXNbXSwgR0xp
bnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQoreworICAgIFRyYW5z
bGF0ZWRBdHRyaWJ1dGUgYXR0cmlidXRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICBH
TGVudW0gZXJyID0gbVZlcnRleERhdGFNYW5hZ2VyLT5wcmVwYXJlVmVydGV4RGF0YSh2ZXJ0ZXhB
dHRyaWJ1dGVzLCBwcm9ncmFtQmluYXJ5LCBmaXJzdCwgY291bnQsIGF0dHJpYnV0ZXMsIGluc3Rh
bmNlcyk7CisgICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKKyAgICB7CisgICAgICAgIHJldHVy
biBlcnI7CisgICAgfQorCisgICAgcmV0dXJuIG1JbnB1dExheW91dENhY2hlLmFwcGx5VmVydGV4
QnVmZmVycyhhdHRyaWJ1dGVzLCBwcm9ncmFtQmluYXJ5KTsKK30KKworR0xlbnVtIFJlbmRlcmVy
MTE6OmFwcGx5SW5kZXhCdWZmZXIoY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICpl
bGVtZW50QXJyYXlCdWZmZXIsIEdMc2l6ZWkgY291bnQsIEdMZW51bSBtb2RlLCBHTGVudW0gdHlw
ZSwgVHJhbnNsYXRlZEluZGV4RGF0YSAqaW5kZXhJbmZvKQoreworICAgIEdMZW51bSBlcnIgPSBt
SW5kZXhEYXRhTWFuYWdlci0+cHJlcGFyZUluZGV4RGF0YSh0eXBlLCBjb3VudCwgZWxlbWVudEFy
cmF5QnVmZmVyLCBpbmRpY2VzLCBpbmRleEluZm8pOworCisgICAgaWYgKGVyciA9PSBHTF9OT19F
UlJPUikKKyAgICB7CisgICAgICAgIGlmIChpbmRleEluZm8tPnN0b3JhZ2UpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChpbmRleEluZm8tPnNlcmlhbCAhPSBtQXBwbGllZFN0b3JhZ2VJQlNl
cmlhbCB8fCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0ICE9IG1BcHBsaWVkSUJPZmZzZXQpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgQnVmZmVyU3RvcmFnZTExICpzdG9yYWdlID0gQnVm
ZmVyU3RvcmFnZTExOjptYWtlQnVmZmVyU3RvcmFnZTExKGluZGV4SW5mby0+c3RvcmFnZSk7Cisg
ICAgICAgICAgICAgICAgSW5kZXhCdWZmZXIxMSogaW5kZXhCdWZmZXIgPSBJbmRleEJ1ZmZlcjEx
OjptYWtlSW5kZXhCdWZmZXIxMShpbmRleEluZm8tPmluZGV4QnVmZmVyKTsKKworICAgICAgICAg
ICAgICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldEluZGV4QnVmZmVyKHN0b3JhZ2UtPmdldEJ1ZmZl
cihCVUZGRVJfVVNBR0VfSU5ERVgpLCBpbmRleEJ1ZmZlci0+Z2V0SW5kZXhGb3JtYXQoKSwgaW5k
ZXhJbmZvLT5zdGFydE9mZnNldCk7CisKKyAgICAgICAgICAgICAgICBtQXBwbGllZElCU2VyaWFs
ID0gMDsKKyAgICAgICAgICAgICAgICBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbCA9IHN0b3JhZ2Ut
PmdldFNlcmlhbCgpOworICAgICAgICAgICAgICAgIG1BcHBsaWVkSUJPZmZzZXQgPSBpbmRleElu
Zm8tPnN0YXJ0T2Zmc2V0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKGluZGV4SW5mby0+c2VyaWFsICE9IG1BcHBsaWVkSUJTZXJpYWwgfHwgaW5kZXhJbmZvLT5z
dGFydE9mZnNldCAhPSBtQXBwbGllZElCT2Zmc2V0KQorICAgICAgICB7CisgICAgICAgICAgICBJ
bmRleEJ1ZmZlcjExKiBpbmRleEJ1ZmZlciA9IEluZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1ZmZl
cjExKGluZGV4SW5mby0+aW5kZXhCdWZmZXIpOworCisgICAgICAgICAgICBtRGV2aWNlQ29udGV4
dC0+SUFTZXRJbmRleEJ1ZmZlcihpbmRleEJ1ZmZlci0+Z2V0QnVmZmVyKCksIGluZGV4QnVmZmVy
LT5nZXRJbmRleEZvcm1hdCgpLCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0KTsKKworICAgICAgICAg
ICAgbUFwcGxpZWRJQlNlcmlhbCA9IGluZGV4SW5mby0+c2VyaWFsOworICAgICAgICAgICAgbUFw
cGxpZWRTdG9yYWdlSUJTZXJpYWwgPSAwOworICAgICAgICAgICAgbUFwcGxpZWRJQk9mZnNldCA9
IGluZGV4SW5mby0+c3RhcnRPZmZzZXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
ZXJyOworfQorCit2b2lkIFJlbmRlcmVyMTE6OmRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6
ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQoreworICAgIGlmIChtb2RlID09IEdMX0xJTkVf
TE9PUCkKKyAgICB7CisgICAgICAgIGRyYXdMaW5lTG9vcChjb3VudCwgR0xfTk9ORSwgTlVMTCwg
MCwgTlVMTCk7CisgICAgfQorICAgIGVsc2UgaWYgKG1vZGUgPT0gR0xfVFJJQU5HTEVfRkFOKQor
ICAgIHsKKyAgICAgICAgZHJhd1RyaWFuZ2xlRmFuKGNvdW50LCBHTF9OT05FLCBOVUxMLCAwLCBO
VUxMLCBpbnN0YW5jZXMpOworICAgIH0KKyAgICBlbHNlIGlmIChpbnN0YW5jZXMgPiAwKQorICAg
IHsKKyAgICAgICAgbURldmljZUNvbnRleHQtPkRyYXdJbnN0YW5jZWQoY291bnQsIGluc3RhbmNl
cywgMCwgMCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1EZXZpY2VDb250ZXh0
LT5EcmF3KGNvdW50LCAwKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6ZHJhd0VsZW1l
bnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lk
ICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0
ZWRJbmRleERhdGEgJmluZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMpCit7CisgICAgaWYgKG1v
ZGUgPT0gR0xfTElORV9MT09QKQorICAgIHsKKyAgICAgICAgZHJhd0xpbmVMb29wKGNvdW50LCB0
eXBlLCBpbmRpY2VzLCBpbmRleEluZm8ubWluSW5kZXgsIGVsZW1lbnRBcnJheUJ1ZmZlcik7Cisg
ICAgfQorICAgIGVsc2UgaWYgKG1vZGUgPT0gR0xfVFJJQU5HTEVfRkFOKQorICAgIHsKKyAgICAg
ICAgZHJhd1RyaWFuZ2xlRmFuKGNvdW50LCB0eXBlLCBpbmRpY2VzLCBpbmRleEluZm8ubWluSW5k
ZXgsIGVsZW1lbnRBcnJheUJ1ZmZlciwgaW5zdGFuY2VzKTsKKyAgICB9CisgICAgZWxzZSBpZiAo
aW5zdGFuY2VzID4gMCkKKyAgICB7CisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5EcmF3SW5kZXhl
ZEluc3RhbmNlZChjb3VudCwgaW5zdGFuY2VzLCAwLCAtc3RhdGljX2Nhc3Q8aW50PihpbmRleElu
Zm8ubWluSW5kZXgpLCAwKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbURldmlj
ZUNvbnRleHQtPkRyYXdJbmRleGVkKGNvdW50LCAwLCAtc3RhdGljX2Nhc3Q8aW50PihpbmRleElu
Zm8ubWluSW5kZXgpKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6ZHJhd0xpbmVMb29w
KEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGludCBt
aW5JbmRleCwgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyKQoreworICAgIC8vIEdldCB0
aGUgcmF3IGluZGljZXMgZm9yIGFuIGluZGV4ZWQgZHJhdworICAgIGlmICh0eXBlICE9IEdMX05P
TkUgJiYgZWxlbWVudEFycmF5QnVmZmVyKQorICAgIHsKKyAgICAgICAgZ2w6OkJ1ZmZlciAqaW5k
ZXhCdWZmZXIgPSBlbGVtZW50QXJyYXlCdWZmZXI7CisgICAgICAgIEJ1ZmZlclN0b3JhZ2UgKnN0
b3JhZ2UgPSBpbmRleEJ1ZmZlci0+Z2V0U3RvcmFnZSgpOworICAgICAgICBpbnRwdHJfdCBvZmZz
ZXQgPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmRpY2VzKTsKKyAgICAgICAgaW5kaWNl
cyA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihzdG9yYWdlLT5nZXREYXRhKCkpICsgb2Zm
c2V0OworICAgIH0KKworICAgIGlmICghbUxpbmVMb29wSUIpCisgICAgeworICAgICAgICBtTGlu
ZUxvb3BJQiA9IG5ldyBTdHJlYW1pbmdJbmRleEJ1ZmZlckludGVyZmFjZSh0aGlzKTsKKyAgICAg
ICAgaWYgKCFtTGluZUxvb3BJQi0+cmVzZXJ2ZUJ1ZmZlclNwYWNlKElOSVRJQUxfSU5ERVhfQlVG
RkVSX1NJWkUsIEdMX1VOU0lHTkVEX0lOVCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlbGV0
ZSBtTGluZUxvb3BJQjsKKyAgICAgICAgICAgIG1MaW5lTG9vcElCID0gTlVMTDsKKworICAgICAg
ICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGEgMzItYml0IGxvb3BpbmcgaW5kZXggYnVmZmVy
IGZvciBHTF9MSU5FX0xPT1AuIik7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ2hlY2tlZCBieSBSZW5k
ZXJlcjExOjphcHBseVByaW1pdGl2ZVR5cGUKKyAgICBBU1NFUlQoY291bnQgPj0gMCk7CisKKyAg
ICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihjb3VudCkgKyAxID4gKHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLyBzaXplb2YodW5zaWduZWQgaW50KSkpCisg
ICAgeworICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSAzMi1iaXQgbG9vcGluZyBpbmRl
eCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUCwgdG9vIG1hbnkgaW5kaWNlcyByZXF1aXJlZC4iKTsK
KyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisKKyAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgc3BhY2VOZWVkZWQgPSAoc3RhdGljX2Nhc3Q8dW5zaWduZWQg
aW50Pihjb3VudCkgKyAxKSAqIHNpemVvZih1bnNpZ25lZCBpbnQpOworICAgIGlmICghbUxpbmVM
b29wSUItPnJlc2VydmVCdWZmZXJTcGFjZShzcGFjZU5lZWRlZCwgR0xfVU5TSUdORURfSU5UKSkK
KyAgICB7CisgICAgICAgIEVSUigiQ291bGQgbm90IHJlc2VydmUgZW5vdWdoIHNwYWNlIGluIGxv
b3BpbmcgaW5kZXggYnVmZmVyIGZvciBHTF9MSU5FX0xPT1AuIik7CisgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorCisgICAgdm9pZCogbWFwcGVkTWVt
b3J5ID0gTlVMTDsKKyAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0OworICAgIGlmICghbUxpbmVMb29w
SUItPm1hcEJ1ZmZlcihzcGFjZU5lZWRlZCwgJm1hcHBlZE1lbW9yeSwgJm9mZnNldCkpCisgICAg
eworICAgICAgICBFUlIoIkNvdWxkIG5vdCBtYXAgaW5kZXggYnVmZmVyIGZvciBHTF9MSU5FX0xP
T1AuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAg
fQorCisgICAgdW5zaWduZWQgaW50ICpkYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBp
bnQqPihtYXBwZWRNZW1vcnkpOworICAgIHVuc2lnbmVkIGludCBpbmRleEJ1ZmZlck9mZnNldCA9
IG9mZnNldDsKKworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX05PTkU6
ICAgLy8gTm9uLWluZGV4ZWQgZHJhdworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGRhdGFbaV0gPSBpOworICAgICAgICB9Cisg
ICAgICAgIGRhdGFbY291bnRdID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0JZVEU6CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAg
ICAgICAgeworICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUq
PihpbmRpY2VzKVtpXTsKKyAgICAgICAgfQorICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19j
YXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKVswXTsKKyAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX1VOU0lHTkVEX1NIT1JUOgorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25z
dCBHTHVzaG9ydCo+KGluZGljZXMpW2ldOworICAgICAgICB9CisgICAgICAgIGRhdGFbY291bnRd
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVswXTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgR0x1aW50Kj4oaW5kaWNlcylbaV07CisgICAgICAgIH0KKyAgICAgICAgZGF0
YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVswXTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIGlm
ICghbUxpbmVMb29wSUItPnVubWFwQnVmZmVyKCkpCisgICAgeworICAgICAgICBFUlIoIkNvdWxk
IG5vdCB1bm1hcCBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKKyAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisKKyAgICBpZiAobUFwcGxp
ZWRJQlNlcmlhbCAhPSBtTGluZUxvb3BJQi0+Z2V0U2VyaWFsKCkgfHwgbUFwcGxpZWRJQk9mZnNl
dCAhPSBpbmRleEJ1ZmZlck9mZnNldCkKKyAgICB7CisgICAgICAgIEluZGV4QnVmZmVyMTEgKmlu
ZGV4QnVmZmVyID0gSW5kZXhCdWZmZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEobUxpbmVMb29wSUIt
PmdldEluZGV4QnVmZmVyKCkpOworCisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldEluZGV4
QnVmZmVyKGluZGV4QnVmZmVyLT5nZXRCdWZmZXIoKSwgaW5kZXhCdWZmZXItPmdldEluZGV4Rm9y
bWF0KCksIGluZGV4QnVmZmVyT2Zmc2V0KTsKKyAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IG1M
aW5lTG9vcElCLT5nZXRTZXJpYWwoKTsKKyAgICAgICAgbUFwcGxpZWRTdG9yYWdlSUJTZXJpYWwg
PSAwOworICAgICAgICBtQXBwbGllZElCT2Zmc2V0ID0gaW5kZXhCdWZmZXJPZmZzZXQ7CisgICAg
fQorCisgICAgbURldmljZUNvbnRleHQtPkRyYXdJbmRleGVkKGNvdW50ICsgMSwgMCwgLW1pbklu
ZGV4KTsKK30KKwordm9pZCBSZW5kZXJlcjExOjpkcmF3VHJpYW5nbGVGYW4oR0xzaXplaSBjb3Vu
dCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgaW50IG1pbkluZGV4LCBnbDo6
QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGludCBpbnN0YW5jZXMpCit7CisgICAgLy8gR2V0
IHRoZSByYXcgaW5kaWNlcyBmb3IgYW4gaW5kZXhlZCBkcmF3CisgICAgaWYgKHR5cGUgIT0gR0xf
Tk9ORSAmJiBlbGVtZW50QXJyYXlCdWZmZXIpCisgICAgeworICAgICAgICBnbDo6QnVmZmVyICpp
bmRleEJ1ZmZlciA9IGVsZW1lbnRBcnJheUJ1ZmZlcjsKKyAgICAgICAgQnVmZmVyU3RvcmFnZSAq
c3RvcmFnZSA9IGluZGV4QnVmZmVyLT5nZXRTdG9yYWdlKCk7CisgICAgICAgIGludHB0cl90IG9m
ZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZGljZXMpOworICAgICAgICBpbmRp
Y2VzID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KHN0b3JhZ2UtPmdldERhdGEoKSkgKyBv
ZmZzZXQ7CisgICAgfQorCisgICAgaWYgKCFtVHJpYW5nbGVGYW5JQikKKyAgICB7CisgICAgICAg
IG1UcmlhbmdsZUZhbklCID0gbmV3IFN0cmVhbWluZ0luZGV4QnVmZmVySW50ZXJmYWNlKHRoaXMp
OworICAgICAgICBpZiAoIW1UcmlhbmdsZUZhbklCLT5yZXNlcnZlQnVmZmVyU3BhY2UoSU5JVElB
TF9JTkRFWF9CVUZGRVJfU0laRSwgR0xfVU5TSUdORURfSU5UKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgZGVsZXRlIG1UcmlhbmdsZUZhbklCOworICAgICAgICAgICAgbVRyaWFuZ2xlRmFuSUIg
PSBOVUxMOworCisgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSBzY3JhdGNoIGlu
ZGV4IGJ1ZmZlciBmb3IgR0xfVFJJQU5HTEVfRkFOLiIpOworICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIENo
ZWNrZWQgYnkgUmVuZGVyZXIxMTo6YXBwbHlQcmltaXRpdmVUeXBlCisgICAgQVNTRVJUKGNvdW50
ID49IDMpOworCisgICAgY29uc3QgdW5zaWduZWQgaW50IG51bVRyaXMgPSBjb3VudCAtIDI7CisK
KyAgICBpZiAobnVtVHJpcyA+IChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1h
eCgpIC8gKHNpemVvZih1bnNpZ25lZCBpbnQpICogMykpKQorICAgIHsKKyAgICAgICAgRVJSKCJD
b3VsZCBub3QgY3JlYXRlIGEgc2NyYXRjaCBpbmRleCBidWZmZXIgZm9yIEdMX1RSSUFOR0xFX0ZB
TiwgdG9vIG1hbnkgaW5kaWNlcyByZXF1aXJlZC4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgc3Bh
Y2VOZWVkZWQgPSAobnVtVHJpcyAqIDMpICogc2l6ZW9mKHVuc2lnbmVkIGludCk7CisgICAgaWYg
KCFtVHJpYW5nbGVGYW5JQi0+cmVzZXJ2ZUJ1ZmZlclNwYWNlKHNwYWNlTmVlZGVkLCBHTF9VTlNJ
R05FRF9JTlQpKQorICAgIHsKKyAgICAgICAgRVJSKCJDb3VsZCBub3QgcmVzZXJ2ZSBlbm91Z2gg
c3BhY2UgaW4gc2NyYXRjaCBpbmRleCBidWZmZXIgZm9yIEdMX1RSSUFOR0xFX0ZBTi4iKTsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisKKyAgICB2
b2lkKiBtYXBwZWRNZW1vcnkgPSBOVUxMOworICAgIHVuc2lnbmVkIGludCBvZmZzZXQ7CisgICAg
aWYgKCFtVHJpYW5nbGVGYW5JQi0+bWFwQnVmZmVyKHNwYWNlTmVlZGVkLCAmbWFwcGVkTWVtb3J5
LCAmb2Zmc2V0KSkKKyAgICB7CisgICAgICAgIEVSUigiQ291bGQgbm90IG1hcCBzY3JhdGNoIGlu
ZGV4IGJ1ZmZlciBmb3IgR0xfVFJJQU5HTEVfRkFOLiIpOworICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KKworICAgIHVuc2lnbmVkIGludCAqZGF0YSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4obWFwcGVkTWVtb3J5KTsKKyAgICB1bnNp
Z25lZCBpbnQgaW5kZXhCdWZmZXJPZmZzZXQgPSBvZmZzZXQ7CisKKyAgICBzd2l0Y2ggKHR5cGUp
CisgICAgeworICAgICAgY2FzZSBHTF9OT05FOiAgIC8vIE5vbi1pbmRleGVkIGRyYXcKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1UcmlzOyBpKyspCisgICAgICAgIHsK
KyAgICAgICAgICAgIGRhdGFbaSozICsgMF0gPSAwOworICAgICAgICAgICAgZGF0YVtpKjMgKyAx
XSA9IGkgKyAxOworICAgICAgICAgICAgZGF0YVtpKjMgKyAyXSA9IGkgKyAyOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVRyaXM7IGkrKykKKyAgICAgICAgeworICAg
ICAgICAgICAgZGF0YVtpKjMgKyAwXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRp
Y2VzKVswXTsKKyAgICAgICAgICAgIGRhdGFbaSozICsgMV0gPSBzdGF0aWNfY2FzdDxjb25zdCBH
THVieXRlKj4oaW5kaWNlcylbaSArIDFdOworICAgICAgICAgICAgZGF0YVtpKjMgKyAyXSA9IHN0
YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKVtpICsgMl07CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgorICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVRyaXM7IGkrKykKKyAgICAgICAgeworICAgICAg
ICAgICAgZGF0YVtpKjMgKyAwXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNl
cylbMF07CisgICAgICAgICAgICBkYXRhW2kqMyArIDFdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1
c2hvcnQqPihpbmRpY2VzKVtpICsgMV07CisgICAgICAgICAgICBkYXRhW2kqMyArIDJdID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVtpICsgMl07CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1UcmlzOyBpKyspCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGRhdGFbaSozICsgMF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVsw
XTsKKyAgICAgICAgICAgIGRhdGFbaSozICsgMV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQq
PihpbmRpY2VzKVtpICsgMV07CisgICAgICAgICAgICBkYXRhW2kqMyArIDJdID0gc3RhdGljX2Nh
c3Q8Y29uc3QgR0x1aW50Kj4oaW5kaWNlcylbaSArIDJdOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICBpZiAoIW1U
cmlhbmdsZUZhbklCLT51bm1hcEJ1ZmZlcigpKQorICAgIHsKKyAgICAgICAgRVJSKCJDb3VsZCBu
b3QgdW5tYXAgc2NyYXRjaCBpbmRleCBidWZmZXIgZm9yIEdMX1RSSUFOR0xFX0ZBTi4iKTsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisKKyAgICBp
ZiAobUFwcGxpZWRJQlNlcmlhbCAhPSBtVHJpYW5nbGVGYW5JQi0+Z2V0U2VyaWFsKCkgfHwgbUFw
cGxpZWRJQk9mZnNldCAhPSBpbmRleEJ1ZmZlck9mZnNldCkKKyAgICB7CisgICAgICAgIEluZGV4
QnVmZmVyMTEgKmluZGV4QnVmZmVyID0gSW5kZXhCdWZmZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEo
bVRyaWFuZ2xlRmFuSUItPmdldEluZGV4QnVmZmVyKCkpOworCisgICAgICAgIG1EZXZpY2VDb250
ZXh0LT5JQVNldEluZGV4QnVmZmVyKGluZGV4QnVmZmVyLT5nZXRCdWZmZXIoKSwgaW5kZXhCdWZm
ZXItPmdldEluZGV4Rm9ybWF0KCksIGluZGV4QnVmZmVyT2Zmc2V0KTsKKyAgICAgICAgbUFwcGxp
ZWRJQlNlcmlhbCA9IG1UcmlhbmdsZUZhbklCLT5nZXRTZXJpYWwoKTsKKyAgICAgICAgbUFwcGxp
ZWRTdG9yYWdlSUJTZXJpYWwgPSAwOworICAgICAgICBtQXBwbGllZElCT2Zmc2V0ID0gaW5kZXhC
dWZmZXJPZmZzZXQ7CisgICAgfQorCisgICAgaWYgKGluc3RhbmNlcyA+IDApCisgICAgeworICAg
ICAgICBtRGV2aWNlQ29udGV4dC0+RHJhd0luZGV4ZWRJbnN0YW5jZWQobnVtVHJpcyAqIDMsIGlu
c3RhbmNlcywgMCwgLW1pbkluZGV4LCAwKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgbURldmljZUNvbnRleHQtPkRyYXdJbmRleGVkKG51bVRyaXMgKiAzLCAwLCAtbWluSW5kZXgp
OworICAgIH0KK30KKwordm9pZCBSZW5kZXJlcjExOjphcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1C
aW5hcnkgKnByb2dyYW1CaW5hcnkpCit7CisgICAgdW5zaWduZWQgaW50IHByb2dyYW1CaW5hcnlT
ZXJpYWwgPSBwcm9ncmFtQmluYXJ5LT5nZXRTZXJpYWwoKTsKKyAgICBjb25zdCBib29sIHVwZGF0
ZVByb2dyYW1TdGF0ZSA9IChwcm9ncmFtQmluYXJ5U2VyaWFsICE9IG1BcHBsaWVkUHJvZ3JhbUJp
bmFyeVNlcmlhbCk7CisKKyAgICBpZiAodXBkYXRlUHJvZ3JhbVN0YXRlKQorICAgIHsKKyAgICAg
ICAgU2hhZGVyRXhlY3V0YWJsZSAqdmVydGV4RXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0VmVydGV4
RXhlY3V0YWJsZSgpOworICAgICAgICBTaGFkZXJFeGVjdXRhYmxlICpwaXhlbEV4ZSA9IHByb2dy
YW1CaW5hcnktPmdldFBpeGVsRXhlY3V0YWJsZSgpOworCisgICAgICAgIElEM0QxMVZlcnRleFNo
YWRlciAqdmVydGV4U2hhZGVyID0gTlVMTDsKKyAgICAgICAgaWYgKHZlcnRleEV4ZSkgdmVydGV4
U2hhZGVyID0gU2hhZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKHZlcnRl
eEV4ZSktPmdldFZlcnRleFNoYWRlcigpOworCisgICAgICAgIElEM0QxMVBpeGVsU2hhZGVyICpw
aXhlbFNoYWRlciA9IE5VTEw7CisgICAgICAgIGlmIChwaXhlbEV4ZSkgcGl4ZWxTaGFkZXIgPSBT
aGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VTaGFkZXJFeGVjdXRhYmxlMTEocGl4ZWxFeGUpLT5nZXRQ
aXhlbFNoYWRlcigpOworCisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlcihwaXhl
bFNoYWRlciwgTlVMTCwgMCk7CisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5WU1NldFNoYWRlcih2
ZXJ0ZXhTaGFkZXIsIE5VTEwsIDApOworCisgICAgICAgIHByb2dyYW1CaW5hcnktPmRpcnR5QWxs
VW5pZm9ybXMoKTsKKworICAgICAgICBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWwgPSBwcm9n
cmFtQmluYXJ5U2VyaWFsOworICAgIH0KKworICAgIC8vIE9ubHkgdXNlIHRoZSBnZW9tZXRyeSBz
aGFkZXIgY3VycmVudGx5IGZvciBwb2ludCBzcHJpdGUgZHJhd2luZworICAgIGNvbnN0IGJvb2wg
dXNlc0dlb21ldHJ5U2hhZGVyID0gKHByb2dyYW1CaW5hcnktPnVzZXNHZW9tZXRyeVNoYWRlcigp
ICYmIG1DdXJSYXN0ZXJTdGF0ZS5wb2ludERyYXdNb2RlKTsKKworICAgIGlmICh1cGRhdGVQcm9n
cmFtU3RhdGUgfHwgdXNlc0dlb21ldHJ5U2hhZGVyICE9IG1Jc0dlb21ldHJ5U2hhZGVyQWN0aXZl
KQorICAgIHsKKyAgICAgICAgaWYgKHVzZXNHZW9tZXRyeVNoYWRlcikKKyAgICAgICAgeworICAg
ICAgICAgICAgU2hhZGVyRXhlY3V0YWJsZSAqZ2VvbWV0cnlFeGUgPSBwcm9ncmFtQmluYXJ5LT5n
ZXRHZW9tZXRyeUV4ZWN1dGFibGUoKTsKKyAgICAgICAgICAgIElEM0QxMUdlb21ldHJ5U2hhZGVy
ICpnZW9tZXRyeVNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFi
bGUxMShnZW9tZXRyeUV4ZSktPmdldEdlb21ldHJ5U2hhZGVyKCk7CisgICAgICAgICAgICBtRGV2
aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIoZ2VvbWV0cnlTaGFkZXIsIE5VTEwsIDApOworICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbURldmljZUNvbnRleHQt
PkdTU2V0U2hhZGVyKE5VTEwsIE5VTEwsIDApOworICAgICAgICB9CisKKyAgICAgICAgbUlzR2Vv
bWV0cnlTaGFkZXJBY3RpdmUgPSB1c2VzR2VvbWV0cnlTaGFkZXI7CisgICAgfQorfQorCit2b2lk
IFJlbmRlcmVyMTE6OmFwcGx5VW5pZm9ybXMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5h
cnksIGdsOjpVbmlmb3JtQXJyYXkgKnVuaWZvcm1BcnJheSkKK3sKKyAgICBTaGFkZXJFeGVjdXRh
YmxlMTEgKnZlcnRleEV4ZWN1dGFibGUgPSBTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VTaGFkZXJF
eGVjdXRhYmxlMTEocHJvZ3JhbUJpbmFyeS0+Z2V0VmVydGV4RXhlY3V0YWJsZSgpKTsKKyAgICBT
aGFkZXJFeGVjdXRhYmxlMTEgKnBpeGVsRXhlY3V0YWJsZSA9IFNoYWRlckV4ZWN1dGFibGUxMTo6
bWFrZVNoYWRlckV4ZWN1dGFibGUxMShwcm9ncmFtQmluYXJ5LT5nZXRQaXhlbEV4ZWN1dGFibGUo
KSk7CisKKyAgICB1bnNpZ25lZCBpbnQgdG90YWxSZWdpc3RlckNvdW50VlMgPSAwOworICAgIHVu
c2lnbmVkIGludCB0b3RhbFJlZ2lzdGVyQ291bnRQUyA9IDA7CisKKyAgICBib29sIHZlcnRleFVu
aWZvcm1zRGlydHkgPSBmYWxzZTsKKyAgICBib29sIHBpeGVsVW5pZm9ybXNEaXJ0eSA9IGZhbHNl
OworCisgICAgZm9yIChnbDo6VW5pZm9ybUFycmF5Ojpjb25zdF9pdGVyYXRvciB1bmlmb3JtX2l0
ZXJhdG9yID0gdW5pZm9ybUFycmF5LT5iZWdpbigpOyB1bmlmb3JtX2l0ZXJhdG9yICE9IHVuaWZv
cm1BcnJheS0+ZW5kKCk7IHVuaWZvcm1faXRlcmF0b3IrKykKKyAgICB7CisgICAgICAgIGNvbnN0
IGdsOjpVbmlmb3JtICp1bmlmb3JtID0gKnVuaWZvcm1faXRlcmF0b3I7CisKKyAgICAgICAgaWYg
KHVuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleCA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgICB0
b3RhbFJlZ2lzdGVyQ291bnRWUyArPSB1bmlmb3JtLT5yZWdpc3RlckNvdW50OworICAgICAgICAg
ICAgdmVydGV4VW5pZm9ybXNEaXJ0eSA9IHZlcnRleFVuaWZvcm1zRGlydHkgfHwgdW5pZm9ybS0+
ZGlydHk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodW5pZm9ybS0+cHNSZWdpc3RlckluZGV4
ID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHRvdGFsUmVnaXN0ZXJDb3VudFBTICs9IHVu
aWZvcm0tPnJlZ2lzdGVyQ291bnQ7CisgICAgICAgICAgICBwaXhlbFVuaWZvcm1zRGlydHkgPSBw
aXhlbFVuaWZvcm1zRGlydHkgfHwgdW5pZm9ybS0+ZGlydHk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBJRDNEMTFCdWZmZXIgKnZlcnRleENvbnN0YW50QnVmZmVyID0gdmVydGV4RXhlY3V0YWJs
ZS0+Z2V0Q29uc3RhbnRCdWZmZXIobURldmljZSwgdG90YWxSZWdpc3RlckNvdW50VlMpOworICAg
IElEM0QxMUJ1ZmZlciAqcGl4ZWxDb25zdGFudEJ1ZmZlciA9IHBpeGVsRXhlY3V0YWJsZS0+Z2V0
Q29uc3RhbnRCdWZmZXIobURldmljZSwgdG90YWxSZWdpc3RlckNvdW50UFMpOworCisgICAgZmxv
YXQgKCptYXBWUylbNF0gPSBOVUxMOworICAgIGZsb2F0ICgqbWFwUFMpWzRdID0gTlVMTDsKKwor
ICAgIGlmICh0b3RhbFJlZ2lzdGVyQ291bnRWUyA+IDAgJiYgdmVydGV4VW5pZm9ybXNEaXJ0eSkK
KyAgICB7CisgICAgICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXAgPSB7MH07CisgICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZUNvbnRleHQtPk1hcCh2ZXJ0ZXhDb25zdGFudEJ1
ZmZlciwgMCwgRDNEMTFfTUFQX1dSSVRFX0RJU0NBUkQsIDAsICZtYXApOworICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICBtYXBWUyA9IChmbG9hdCgqKVs0XSltYXAu
cERhdGE7CisgICAgfQorCisgICAgaWYgKHRvdGFsUmVnaXN0ZXJDb3VudFBTID4gMCAmJiBwaXhl
bFVuaWZvcm1zRGlydHkpCisgICAgeworICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0Ug
bWFwID0gezB9OworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2VDb250ZXh0LT5NYXAo
cGl4ZWxDb25zdGFudEJ1ZmZlciwgMCwgRDNEMTFfTUFQX1dSSVRFX0RJU0NBUkQsIDAsICZtYXAp
OworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICBtYXBQUyA9IChm
bG9hdCgqKVs0XSltYXAucERhdGE7CisgICAgfQorCisgICAgZm9yIChnbDo6VW5pZm9ybUFycmF5
OjppdGVyYXRvciB1bmlmb3JtX2l0ZXJhdG9yID0gdW5pZm9ybUFycmF5LT5iZWdpbigpOyB1bmlm
b3JtX2l0ZXJhdG9yICE9IHVuaWZvcm1BcnJheS0+ZW5kKCk7IHVuaWZvcm1faXRlcmF0b3IrKykK
KyAgICB7CisgICAgICAgIGdsOjpVbmlmb3JtICp1bmlmb3JtID0gKnVuaWZvcm1faXRlcmF0b3I7
CisKKyAgICAgICAgaWYgKHVuaWZvcm0tPnR5cGUgIT0gIEdMX1NBTVBMRVJfMkQgJiYgdW5pZm9y
bS0+dHlwZSAhPSBHTF9TQU1QTEVSX0NVQkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh1
bmlmb3JtLT52c1JlZ2lzdGVySW5kZXggPj0gMCAmJiBtYXBWUykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBtZW1jcHkobWFwVlMgKyB1bmlmb3JtLT52c1JlZ2lzdGVySW5kZXgsIHVu
aWZvcm0tPmRhdGEsIHVuaWZvcm0tPnJlZ2lzdGVyQ291bnQgKiBzaXplb2YoZmxvYXRbNF0pKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRl
eCA+PSAwICYmIG1hcFBTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1lbWNweSht
YXBQUyArIHVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleCwgdW5pZm9ybS0+ZGF0YSwgdW5pZm9ybS0+
cmVnaXN0ZXJDb3VudCAqIHNpemVvZihmbG9hdFs0XSkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgdW5pZm9ybS0+ZGlydHkgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
bWFwVlMpCisgICAgeworICAgICAgICBtRGV2aWNlQ29udGV4dC0+VW5tYXAodmVydGV4Q29uc3Rh
bnRCdWZmZXIsIDApOworICAgIH0KKworICAgIGlmIChtYXBQUykKKyAgICB7CisgICAgICAgIG1E
ZXZpY2VDb250ZXh0LT5Vbm1hcChwaXhlbENvbnN0YW50QnVmZmVyLCAwKTsKKyAgICB9CisKKyAg
ICBpZiAobUN1cnJlbnRWZXJ0ZXhDb25zdGFudEJ1ZmZlciAhPSB2ZXJ0ZXhDb25zdGFudEJ1ZmZl
cikKKyAgICB7CisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5WU1NldENvbnN0YW50QnVmZmVycygw
LCAxLCAmdmVydGV4Q29uc3RhbnRCdWZmZXIpOworICAgICAgICBtQ3VycmVudFZlcnRleENvbnN0
YW50QnVmZmVyID0gdmVydGV4Q29uc3RhbnRCdWZmZXI7CisgICAgfQorCisgICAgaWYgKG1DdXJy
ZW50UGl4ZWxDb25zdGFudEJ1ZmZlciAhPSBwaXhlbENvbnN0YW50QnVmZmVyKQorICAgIHsKKyAg
ICAgICAgbURldmljZUNvbnRleHQtPlBTU2V0Q29uc3RhbnRCdWZmZXJzKDAsIDEsICZwaXhlbENv
bnN0YW50QnVmZmVyKTsKKyAgICAgICAgbUN1cnJlbnRQaXhlbENvbnN0YW50QnVmZmVyID0gcGl4
ZWxDb25zdGFudEJ1ZmZlcjsKKyAgICB9CisKKyAgICAvLyBEcml2ZXIgdW5pZm9ybXMKKyAgICBp
ZiAoIW1Ecml2ZXJDb25zdGFudEJ1ZmZlclZTKQorICAgIHsKKyAgICAgICAgRDNEMTFfQlVGRkVS
X0RFU0MgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbiA9IHswfTsKKyAgICAgICAgY29uc3RhbnRC
dWZmZXJEZXNjcmlwdGlvbi5CeXRlV2lkdGggPSBzaXplb2YoZHhfVmVydGV4Q29uc3RhbnRzKTsK
KyAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5Vc2FnZSA9IEQzRDExX1VTQUdFX0RF
RkFVTFQ7CisgICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uQmluZEZsYWdzID0gRDNE
MTFfQklORF9DT05TVEFOVF9CVUZGRVI7CisgICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRp
b24uQ1BVQWNjZXNzRmxhZ3MgPSAwOworICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9u
Lk1pc2NGbGFncyA9IDA7CisgICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uU3RydWN0
dXJlQnl0ZVN0cmlkZSA9IDA7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5D
cmVhdGVCdWZmZXIoJmNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24sIE5VTEwsICZtRHJpdmVyQ29u
c3RhbnRCdWZmZXJWUyk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAg
ICAgICAgbURldmljZUNvbnRleHQtPlZTU2V0Q29uc3RhbnRCdWZmZXJzKDEsIDEsICZtRHJpdmVy
Q29uc3RhbnRCdWZmZXJWUyk7CisgICAgfQorCisgICAgaWYgKCFtRHJpdmVyQ29uc3RhbnRCdWZm
ZXJQUykKKyAgICB7CisgICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIGNvbnN0YW50QnVmZmVyRGVz
Y3JpcHRpb24gPSB7MH07CisgICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uQnl0ZVdp
ZHRoID0gc2l6ZW9mKGR4X1BpeGVsQ29uc3RhbnRzKTsKKyAgICAgICAgY29uc3RhbnRCdWZmZXJE
ZXNjcmlwdGlvbi5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7CisgICAgICAgIGNvbnN0YW50
QnVmZmVyRGVzY3JpcHRpb24uQmluZEZsYWdzID0gRDNEMTFfQklORF9DT05TVEFOVF9CVUZGRVI7
CisgICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uQ1BVQWNjZXNzRmxhZ3MgPSAwOwor
ICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLk1pc2NGbGFncyA9IDA7CisgICAgICAg
IGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uU3RydWN0dXJlQnl0ZVN0cmlkZSA9IDA7CisKKyAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVCdWZmZXIoJmNvbnN0YW50QnVm
ZmVyRGVzY3JpcHRpb24sIE5VTEwsICZtRHJpdmVyQ29uc3RhbnRCdWZmZXJQUyk7CisgICAgICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgbURldmljZUNvbnRleHQtPlBT
U2V0Q29uc3RhbnRCdWZmZXJzKDEsIDEsICZtRHJpdmVyQ29uc3RhbnRCdWZmZXJQUyk7CisgICAg
fQorCisgICAgaWYgKG1lbWNtcCgmbVZlcnRleENvbnN0YW50cywgJm1BcHBsaWVkVmVydGV4Q29u
c3RhbnRzLCBzaXplb2YoZHhfVmVydGV4Q29uc3RhbnRzKSkgIT0gMCkKKyAgICB7CisgICAgICAg
IG1EZXZpY2VDb250ZXh0LT5VcGRhdGVTdWJyZXNvdXJjZShtRHJpdmVyQ29uc3RhbnRCdWZmZXJW
UywgMCwgTlVMTCwgJm1WZXJ0ZXhDb25zdGFudHMsIDE2LCAwKTsKKyAgICAgICAgbWVtY3B5KCZt
QXBwbGllZFZlcnRleENvbnN0YW50cywgJm1WZXJ0ZXhDb25zdGFudHMsIHNpemVvZihkeF9WZXJ0
ZXhDb25zdGFudHMpKTsKKyAgICB9CisKKyAgICBpZiAobWVtY21wKCZtUGl4ZWxDb25zdGFudHMs
ICZtQXBwbGllZFBpeGVsQ29uc3RhbnRzLCBzaXplb2YoZHhfUGl4ZWxDb25zdGFudHMpKSAhPSAw
KQorICAgIHsKKyAgICAgICAgbURldmljZUNvbnRleHQtPlVwZGF0ZVN1YnJlc291cmNlKG1Ecml2
ZXJDb25zdGFudEJ1ZmZlclBTLCAwLCBOVUxMLCAmbVBpeGVsQ29uc3RhbnRzLCAxNiwgMCk7Cisg
ICAgICAgIG1lbWNweSgmbUFwcGxpZWRQaXhlbENvbnN0YW50cywgJm1QaXhlbENvbnN0YW50cywg
c2l6ZW9mKGR4X1BpeGVsQ29uc3RhbnRzKSk7CisgICAgfQorCisgICAgLy8gbmVlZGVkIGZvciB0
aGUgcG9pbnQgc3ByaXRlIGdlb21ldHJ5IHNoYWRlcgorICAgIGlmIChtQ3VycmVudEdlb21ldHJ5
Q29uc3RhbnRCdWZmZXIgIT0gbURyaXZlckNvbnN0YW50QnVmZmVyUFMpCisgICAgeworICAgICAg
ICBtRGV2aWNlQ29udGV4dC0+R1NTZXRDb25zdGFudEJ1ZmZlcnMoMCwgMSwgJm1Ecml2ZXJDb25z
dGFudEJ1ZmZlclBTKTsKKyAgICAgICAgbUN1cnJlbnRHZW9tZXRyeUNvbnN0YW50QnVmZmVyID0g
bURyaXZlckNvbnN0YW50QnVmZmVyUFM7CisgICAgfQorfQorCit2b2lkIFJlbmRlcmVyMTE6OmNs
ZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBnbDo6RnJhbWVidWZm
ZXIgKmZyYW1lQnVmZmVyKQoreworICAgICBnbDo6UmVuZGVyYnVmZmVyICpmaXJzdFJlbmRlcmJ1
ZmZlciA9IGZyYW1lQnVmZmVyLT5nZXRGaXJzdENvbG9yYnVmZmVyKCk7CisgICAgIEdMZW51bSBp
bnRlcm5hbEZvcm1hdCA9IGZpcnN0UmVuZGVyYnVmZmVyID8gZmlyc3RSZW5kZXJidWZmZXItPmdl
dEludGVybmFsRm9ybWF0KCkgOiBHTF9OT05FOworCisgICAgIGJvb2wgbmVlZE1hc2tlZENvbG9y
Q2xlYXIgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpICYmCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCFjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQg
JiYgZ2w6OkdldFJlZFNpemUoaW50ZXJuYWxGb3JtYXQpID4gMCkgfHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoIWNsZWFyUGFyYW1zLmNvbG9yTWFza0dyZWVuICYmIGdsOjpH
ZXRHcmVlblNpemUoaW50ZXJuYWxGb3JtYXQpID4gMCkgfHwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoIWNsZWFyUGFyYW1zLmNvbG9yTWFza0JsdWUgJiYgZ2w6OkdldEJsdWVT
aXplKGludGVybmFsRm9ybWF0KSA+IDApIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKCFjbGVhclBhcmFtcy5jb2xvck1hc2tBbHBoYSAmJiBnbDo6R2V0QWxwaGFTaXplKGlu
dGVybmFsRm9ybWF0KSA+IDApKTsKKworICAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbFVubWFza2Vk
ID0gMHgwOworICAgICBpZiAoZnJhbWVCdWZmZXItPmhhc1N0ZW5jaWwoKSkKKyAgICAgeworICAg
ICAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxTaXplID0gZ2w6OkdldFN0ZW5jaWxTaXplKGZyYW1l
QnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldEFjdHVhbEZvcm1hdCgpKTsKKyAgICAgICAg
IHN0ZW5jaWxVbm1hc2tlZCA9ICgweDEgPDwgc3RlbmNpbFNpemUpIC0gMTsKKyAgICAgfQorICAg
ICBib29sIG5lZWRNYXNrZWRTdGVuY2lsQ2xlYXIgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX1NU
RU5DSUxfQlVGRkVSX0JJVCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGNsZWFyUGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2sgJiBzdGVuY2lsVW5tYXNrZWQpICE9IHN0ZW5j
aWxVbm1hc2tlZDsKKworICAgICBib29sIG5lZWRTY2lzc29yZWRDbGVhciA9IG1TY2lzc29yRW5h
YmxlZCAmJiAobUN1clNjaXNzb3IueCA+IDAgfHwgbUN1clNjaXNzb3IueSA+IDAgfHwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1DdXJTY2lzc29y
LnggKyBtQ3VyU2Npc3Nvci53aWR0aCA8IG1SZW5kZXJUYXJnZXREZXNjLndpZHRoIHx8CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ3VyU2Npc3Nv
ci55ICsgbUN1clNjaXNzb3IuaGVpZ2h0IDwgbVJlbmRlclRhcmdldERlc2MuaGVpZ2h0KTsKKwor
ICAgICBpZiAobmVlZE1hc2tlZENvbG9yQ2xlYXIgfHwgbmVlZE1hc2tlZFN0ZW5jaWxDbGVhciB8
fCBuZWVkU2Npc3NvcmVkQ2xlYXIpCisgICAgIHsKKyAgICAgICAgIG1hc2tlZENsZWFyKGNsZWFy
UGFyYW1zLCBmcmFtZUJ1ZmZlcik7CisgICAgIH0KKyAgICAgZWxzZQorICAgICB7CisgICAgICAg
ICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpCisgICAgICAgICB7
CisgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gMDsgY29s
b3JBdHRhY2htZW50IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IGNvbG9y
QXR0YWNobWVudCsrKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgaWYgKGZyYW1l
QnVmZmVyLT5pc0VuYWJsZWRDb2xvckF0dGFjaG1lbnQoY29sb3JBdHRhY2htZW50KSkKKyAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVu
ZGVyYnVmZmVyT2JqZWN0ID0gZnJhbWVCdWZmZXItPmdldENvbG9yYnVmZmVyKGNvbG9yQXR0YWNo
bWVudCk7CisgICAgICAgICAgICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyT2JqZWN0KQorICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyVGFyZ2V0
MTEgKnJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEocmVu
ZGVyYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIXJlbmRlclRhcmdldCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBFUlIoInJlbmRlciB0YXJnZXQgcG9pbnRlciB1bmV4cGVj
dGVkbHkgbnVsbC4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIElEM0QxMVJl
bmRlclRhcmdldFZpZXcgKmZyYW1lYnVmZmVyUlRWID0gcmVuZGVyVGFyZ2V0LT5nZXRSZW5kZXJU
YXJnZXRWaWV3KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZyYW1lYnVmZmVyUlRW
KQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEVSUigicmVuZGVyIHRhcmdldCB2aWV3IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0ID0gcmVuZGVyYnVm
ZmVyT2JqZWN0LT5nZXRJbnRlcm5hbEZvcm1hdCgpOworCisgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBmbG9hdCBjbGVhclZhbHVlc1s0XSA9IHsgKGdsOjpHZXRSZWRTaXplKGZvcm1hdCkg
PiAwKSAgID8gY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLnJlZCAgIDogMC4wZiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2w6Okdl
dEdyZWVuU2l6ZShmb3JtYXQpID4gMCkgPyBjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUuZ3Jl
ZW4gOiAwLjBmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChnbDo6R2V0Qmx1ZVNpemUoZm9ybWF0KSA+IDApICA/IGNsZWFyUGFyYW1zLmNv
bG9yQ2xlYXJWYWx1ZS5ibHVlICA6IDAuMGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdsOjpHZXRBbHBoYVNpemUoZm9ybWF0KSA+IDAp
ID8gY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLmFscGhhIDogMS4wZiB9OworICAgICAgICAg
ICAgICAgICAgICAgICAgbURldmljZUNvbnRleHQtPkNsZWFyUmVuZGVyVGFyZ2V0VmlldyhmcmFt
ZWJ1ZmZlclJUViwgY2xlYXJWYWx1ZXMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNsZWFy
UGFyYW1zLm1hc2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUIHx8IGNsZWFyUGFyYW1zLm1hc2sgJiBH
TF9TVEVOQ0lMX0JVRkZFUl9CSVQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpSZW5kZXJi
dWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9IGZyYW1lQnVmZmVyLT5nZXREZXB0aE9yU3RlbmNp
bGJ1ZmZlcigpOworICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlck9iamVjdCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBSZW5kZXJUYXJnZXQxMSAqcmVuZGVyVGFyZ2V0ID0gUmVu
ZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShyZW5kZXJidWZmZXJPYmplY3QtPmdldERl
cHRoU3RlbmNpbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlbmRlclRhcmdldCkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEVSUigicmVuZGVyIHRhcmdldCBwb2lu
dGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgSUQzRDExRGVwdGhTdGVuY2lsVmll
dyAqZnJhbWVidWZmZXJEU1YgPSByZW5kZXJUYXJnZXQtPmdldERlcHRoU3RlbmNpbFZpZXcoKTsK
KyAgICAgICAgICAgICAgICBpZiAoIWZyYW1lYnVmZmVyRFNWKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgRVJSKCJkZXB0aCBzdGVuY2lsIHZpZXcgcG9pbnRlciB1bmV4
cGVjdGVkbHkgbnVsbC4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIFVJTlQgY2xlYXJGbGFncyA9IDA7CisgICAgICAg
ICAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2xlYXJGbGFncyB8PSBEM0QxMV9D
TEVBUl9ERVBUSDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGNsZWFy
UGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBjbGVhckZsYWdzIHw9IEQzRDExX0NMRUFSX1NURU5DSUw7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZmxvYXQgZGVwdGhDbGVhciA9IGds
OjpjbGFtcDAxKGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSk7CisgICAgICAgICAgICAgICAg
VUlOVDggc3RlbmNpbENsZWFyID0gY2xlYXJQYXJhbXMuc3RlbmNpbENsZWFyVmFsdWUgJiAweDAw
MDAwMEZGOworCisgICAgICAgICAgICAgICAgbURldmljZUNvbnRleHQtPkNsZWFyRGVwdGhTdGVu
Y2lsVmlldyhmcmFtZWJ1ZmZlckRTViwgY2xlYXJGbGFncywgZGVwdGhDbGVhciwgc3RlbmNpbENs
ZWFyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBSZW5kZXJl
cjExOjptYXNrZWRDbGVhcihjb25zdCBnbDo6Q2xlYXJQYXJhbWV0ZXJzICZjbGVhclBhcmFtcywg
Z2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcikKK3sKKyAgICBIUkVTVUxUIHJlc3VsdDsKKwor
ICAgIGlmICghbUNsZWFyUmVzb3VyY2VzSW5pdGlhbGl6ZWQpCisgICAgeworICAgICAgICBBU1NF
UlQoIW1DbGVhclZCICYmICFtQ2xlYXJWUyAmJiAhbUNsZWFyU2luZ2xlUFMgJiYgIW1DbGVhck11
bHRpcGxlUFMgJiYgIW1DbGVhclNjaXNzb3JSUyAmJiAhbUNsZWFyTm9TY2lzc29yUlMpOworCisg
ICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIHZiRGVzYzsKKyAgICAgICAgdmJEZXNjLkJ5dGVXaWR0
aCA9IHNpemVvZihkM2QxMTo6UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KSAqIDQ7CisgICAgICAg
IHZiRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZTkFNSUM7CisgICAgICAgIHZiRGVzYy5CaW5k
RmxhZ3MgPSBEM0QxMV9CSU5EX1ZFUlRFWF9CVUZGRVI7CisgICAgICAgIHZiRGVzYy5DUFVBY2Nl
c3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7CisgICAgICAgIHZiRGVzYy5NaXNjRmxh
Z3MgPSAwOworICAgICAgICB2YkRlc2MuU3RydWN0dXJlQnl0ZVN0cmlkZSA9IDA7CisKKyAgICAg
ICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlQnVmZmVyKCZ2YkRlc2MsIE5VTEwsICZtQ2xlYXJW
Qik7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIGQzZDExOjpT
ZXREZWJ1Z05hbWUobUNsZWFyVkIsICJSZW5kZXJlcjExIG1hc2tlZCBjbGVhciB2ZXJ0ZXggYnVm
ZmVyIik7CisKKyAgICAgICAgRDNEMTFfSU5QVVRfRUxFTUVOVF9ERVNDIHF1YWRMYXlvdXRbXSA9
CisgICAgICAgIHsKKyAgICAgICAgICAgIHsgIlBPU0lUSU9OIiwgMCwgRFhHSV9GT1JNQVRfUjMy
RzMyQjMyX0ZMT0FULCAgICAwLCAgMCwgRDNEMTFfSU5QVVRfUEVSX1ZFUlRFWF9EQVRBLCAwIH0s
CisgICAgICAgICAgICB7ICJDT0xPUiIsICAgIDAsIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9G
TE9BVCwgMCwgMTIsIEQzRDExX0lOUFVUX1BFUl9WRVJURVhfREFUQSwgMCB9LAorICAgICAgICB9
OworCisgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUlucHV0TGF5b3V0KHF1YWRMYXlv
dXQsIDIsIGdfVlNfQ2xlYXIsIHNpemVvZihnX1ZTX0NsZWFyKSwgJm1DbGVhcklMKTsKKyAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgZDNkMTE6OlNldERlYnVnTmFt
ZShtQ2xlYXJJTCwgIlJlbmRlcmVyMTEgbWFza2VkIGNsZWFyIGlucHV0IGxheW91dCIpOworCisg
ICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVZlcnRleFNoYWRlcihnX1ZTX0NsZWFyLCBz
aXplb2YoZ19WU19DbGVhciksIE5VTEwsICZtQ2xlYXJWUyk7CisgICAgICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7CisgICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNsZWFyVlMsICJS
ZW5kZXJlcjExIG1hc2tlZCBjbGVhciB2ZXJ0ZXggc2hhZGVyIik7CisKKyAgICAgICAgcmVzdWx0
ID0gbURldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19DbGVhclNpbmdsZSwgc2l6ZW9mKGdf
UFNfQ2xlYXJTaW5nbGUpLCBOVUxMLCAmbUNsZWFyU2luZ2xlUFMpOworICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhclNp
bmdsZVBTLCAiUmVuZGVyZXIxMSBtYXNrZWQgY2xlYXIgcGl4ZWwgc2hhZGVyICgxIFJUKSIpOwor
CisgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdfUFNfQ2xlYXJN
dWx0aXBsZSwgc2l6ZW9mKGdfUFNfQ2xlYXJNdWx0aXBsZSksIE5VTEwsICZtQ2xlYXJNdWx0aXBs
ZVBTKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgZDNkMTE6
OlNldERlYnVnTmFtZShtQ2xlYXJNdWx0aXBsZVBTLCAiUmVuZGVyZXIxMSBtYXNrZWQgY2xlYXIg
cGl4ZWwgc2hhZGVyIChNUlQpIik7CisKKyAgICAgICAgRDNEMTFfUkFTVEVSSVpFUl9ERVNDIHJz
U2Npc3NvckRlc2M7CisgICAgICAgIHJzU2Npc3NvckRlc2MuRmlsbE1vZGUgPSBEM0QxMV9GSUxM
X1NPTElEOworICAgICAgICByc1NjaXNzb3JEZXNjLkN1bGxNb2RlID0gRDNEMTFfQ1VMTF9OT05F
OworICAgICAgICByc1NjaXNzb3JEZXNjLkZyb250Q291bnRlckNsb2Nrd2lzZSA9IEZBTFNFOwor
ICAgICAgICByc1NjaXNzb3JEZXNjLkRlcHRoQmlhcyA9IDA7CisgICAgICAgIHJzU2Npc3NvckRl
c2MuRGVwdGhCaWFzQ2xhbXAgPSAwLjBmOworICAgICAgICByc1NjaXNzb3JEZXNjLlNsb3BlU2Nh
bGVkRGVwdGhCaWFzID0gMC4wZjsKKyAgICAgICAgcnNTY2lzc29yRGVzYy5EZXB0aENsaXBFbmFi
bGUgPSBGQUxTRTsKKyAgICAgICAgcnNTY2lzc29yRGVzYy5TY2lzc29yRW5hYmxlID0gVFJVRTsK
KyAgICAgICAgcnNTY2lzc29yRGVzYy5NdWx0aXNhbXBsZUVuYWJsZSA9IEZBTFNFOworICAgICAg
ICByc1NjaXNzb3JEZXNjLkFudGlhbGlhc2VkTGluZUVuYWJsZSA9IEZBTFNFOworCisgICAgICAg
IHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVJhc3Rlcml6ZXJTdGF0ZSgmcnNTY2lzc29yRGVzYywg
Jm1DbGVhclNjaXNzb3JSUyk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Cisg
ICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNsZWFyU2Npc3NvclJTLCAiUmVuZGVyZXIxMSBt
YXNrZWQgY2xlYXIgc2Npc3NvciByYXN0ZXJpemVyIHN0YXRlIik7CisKKyAgICAgICAgRDNEMTFf
UkFTVEVSSVpFUl9ERVNDIHJzTm9TY2lzc29yRGVzYzsKKyAgICAgICAgcnNOb1NjaXNzb3JEZXNj
LkZpbGxNb2RlID0gRDNEMTFfRklMTF9TT0xJRDsKKyAgICAgICAgcnNOb1NjaXNzb3JEZXNjLkN1
bGxNb2RlID0gRDNEMTFfQ1VMTF9OT05FOworICAgICAgICByc05vU2Npc3NvckRlc2MuRnJvbnRD
b3VudGVyQ2xvY2t3aXNlID0gRkFMU0U7CisgICAgICAgIHJzTm9TY2lzc29yRGVzYy5EZXB0aEJp
YXMgPSAwOworICAgICAgICByc05vU2Npc3NvckRlc2MuRGVwdGhCaWFzQ2xhbXAgPSAwLjBmOwor
ICAgICAgICByc05vU2Npc3NvckRlc2MuU2xvcGVTY2FsZWREZXB0aEJpYXMgPSAwLjBmOworICAg
ICAgICByc05vU2Npc3NvckRlc2MuRGVwdGhDbGlwRW5hYmxlID0gRkFMU0U7CisgICAgICAgIHJz
Tm9TY2lzc29yRGVzYy5TY2lzc29yRW5hYmxlID0gRkFMU0U7CisgICAgICAgIHJzTm9TY2lzc29y
RGVzYy5NdWx0aXNhbXBsZUVuYWJsZSA9IEZBTFNFOworICAgICAgICByc05vU2Npc3NvckRlc2Mu
QW50aWFsaWFzZWRMaW5lRW5hYmxlID0gRkFMU0U7CisKKyAgICAgICAgcmVzdWx0ID0gbURldmlj
ZS0+Q3JlYXRlUmFzdGVyaXplclN0YXRlKCZyc05vU2Npc3NvckRlc2MsICZtQ2xlYXJOb1NjaXNz
b3JSUyk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIGQzZDEx
OjpTZXREZWJ1Z05hbWUobUNsZWFyTm9TY2lzc29yUlMsICJSZW5kZXJlcjExIG1hc2tlZCBjbGVh
ciBubyBzY2lzc29yIHJhc3Rlcml6ZXIgc3RhdGUiKTsKKworICAgICAgICBtQ2xlYXJSZXNvdXJj
ZXNJbml0aWFsaXplZCA9IHRydWU7CisgICAgfQorCisgICAgLy8gUHJlcGFyZSB0aGUgZGVwdGgg
c3RlbmNpbCBzdGF0ZSB0byB3cml0ZSBkZXB0aCB2YWx1ZXMgaWYgdGhlIGRlcHRoIHNob3VsZCBi
ZSBjbGVhcmVkCisgICAgLy8gYW5kIHN0ZW5jaWwgdmFsdWVzIGlmIHRoZSBzdGVuY2lsIHNob3Vs
ZCBiZSBjbGVhcmVkCisgICAgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlIGdsRFNTdGF0ZTsKKyAgICBn
bERTU3RhdGUuZGVwdGhUZXN0ID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9ERVBUSF9CVUZGRVJf
QklUKSAhPSAwOworICAgIGdsRFNTdGF0ZS5kZXB0aEZ1bmMgPSBHTF9BTFdBWVM7CisgICAgZ2xE
U1N0YXRlLmRlcHRoTWFzayA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJ
VCkgIT0gMDsKKyAgICBnbERTU3RhdGUuc3RlbmNpbFRlc3QgPSAoY2xlYXJQYXJhbXMubWFzayAm
IEdMX1NURU5DSUxfQlVGRkVSX0JJVCkgIT0gMDsKKyAgICBnbERTU3RhdGUuc3RlbmNpbEZ1bmMg
PSBHTF9BTFdBWVM7CisgICAgZ2xEU1N0YXRlLnN0ZW5jaWxNYXNrID0gMDsKKyAgICBnbERTU3Rh
dGUuc3RlbmNpbEZhaWwgPSBHTF9SRVBMQUNFOworICAgIGdsRFNTdGF0ZS5zdGVuY2lsUGFzc0Rl
cHRoRmFpbCA9IEdMX1JFUExBQ0U7CisgICAgZ2xEU1N0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNz
ID0gR0xfUkVQTEFDRTsKKyAgICBnbERTU3RhdGUuc3RlbmNpbFdyaXRlbWFzayA9IGNsZWFyUGFy
YW1zLnN0ZW5jaWxXcml0ZU1hc2s7CisgICAgZ2xEU1N0YXRlLnN0ZW5jaWxCYWNrRnVuYyA9IEdM
X0FMV0FZUzsKKyAgICBnbERTU3RhdGUuc3RlbmNpbEJhY2tNYXNrID0gMDsKKyAgICBnbERTU3Rh
dGUuc3RlbmNpbEJhY2tGYWlsID0gR0xfUkVQTEFDRTsKKyAgICBnbERTU3RhdGUuc3RlbmNpbEJh
Y2tQYXNzRGVwdGhGYWlsID0gR0xfUkVQTEFDRTsKKyAgICBnbERTU3RhdGUuc3RlbmNpbEJhY2tQ
YXNzRGVwdGhQYXNzID0gR0xfUkVQTEFDRTsKKyAgICBnbERTU3RhdGUuc3RlbmNpbEJhY2tXcml0
ZW1hc2sgPSBjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrOworCisgICAgaW50IHN0ZW5jaWxD
bGVhciA9IGNsZWFyUGFyYW1zLnN0ZW5jaWxDbGVhclZhbHVlICYgMHgwMDAwMDBGRjsKKworICAg
IElEM0QxMURlcHRoU3RlbmNpbFN0YXRlICpkc1N0YXRlID0gbVN0YXRlQ2FjaGUuZ2V0RGVwdGhT
dGVuY2lsU3RhdGUoZ2xEU1N0YXRlKTsKKworICAgIC8vIFByZXBhcmUgdGhlIGJsZW5kIHN0YXRl
IHRvIHVzZSBhIHdyaXRlIG1hc2sgaWYgdGhlIGNvbG9yIGJ1ZmZlciBzaG91bGQgYmUgY2xlYXJl
ZAorICAgIGdsOjpCbGVuZFN0YXRlIGdsQmxlbmRTdGF0ZTsKKyAgICBnbEJsZW5kU3RhdGUuYmxl
bmQgPSBmYWxzZTsKKyAgICBnbEJsZW5kU3RhdGUuc291cmNlQmxlbmRSR0IgPSBHTF9PTkU7Cisg
ICAgZ2xCbGVuZFN0YXRlLmRlc3RCbGVuZFJHQiA9IEdMX1pFUk87CisgICAgZ2xCbGVuZFN0YXRl
LnNvdXJjZUJsZW5kQWxwaGEgPSBHTF9PTkU7CisgICAgZ2xCbGVuZFN0YXRlLmRlc3RCbGVuZEFs
cGhhID0gR0xfWkVSTzsKKyAgICBnbEJsZW5kU3RhdGUuYmxlbmRFcXVhdGlvblJHQiA9IEdMX0ZV
TkNfQUREOworICAgIGdsQmxlbmRTdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEgPSBHTF9GVU5DX0FE
RDsKKyAgICBnbEJsZW5kU3RhdGUuY29sb3JNYXNrUmVkID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBH
TF9DT0xPUl9CVUZGRVJfQklUKSA/IGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCA6IGZhbHNlOwor
ICAgIGdsQmxlbmRTdGF0ZS5jb2xvck1hc2tHcmVlbiA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xf
Q09MT1JfQlVGRkVSX0JJVCkgPyBjbGVhclBhcmFtcy5jb2xvck1hc2tHcmVlbiA6IGZhbHNlOwor
ICAgIGdsQmxlbmRTdGF0ZS5jb2xvck1hc2tCbHVlID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9D
T0xPUl9CVUZGRVJfQklUKSA/IGNsZWFyUGFyYW1zLmNvbG9yTWFza0JsdWUgOiBmYWxzZTsKKyAg
ICBnbEJsZW5kU3RhdGUuY29sb3JNYXNrQWxwaGEgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NP
TE9SX0JVRkZFUl9CSVQpID8gY2xlYXJQYXJhbXMuY29sb3JNYXNrQWxwaGEgOiBmYWxzZTsKKyAg
ICBnbEJsZW5kU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlID0gZmFsc2U7CisgICAgZ2xCbGVu
ZFN0YXRlLmRpdGhlciA9IGZhbHNlOworCisgICAgc3RhdGljIGNvbnN0IGZsb2F0IGJsZW5kRmFj
dG9yc1s0XSA9IHsgMS4wZiwgMS4wZiwgMS4wZiwgMS4wZiB9OworICAgIHN0YXRpYyBjb25zdCBV
SU5UIHNhbXBsZU1hc2sgPSAweEZGRkZGRkZGOworCisgICAgSUQzRDExQmxlbmRTdGF0ZSAqYmxl
bmRTdGF0ZSA9IG1TdGF0ZUNhY2hlLmdldEJsZW5kU3RhdGUoZnJhbWVCdWZmZXIsIGdsQmxlbmRT
dGF0ZSk7CisKKyAgICAvLyBTZXQgdGhlIHZlcnRpY2VzCisgICAgRDNEMTFfTUFQUEVEX1NVQlJF
U09VUkNFIG1hcHBlZFJlc291cmNlOworICAgIHJlc3VsdCA9IG1EZXZpY2VDb250ZXh0LT5NYXAo
bUNsZWFyVkIsIDAsIEQzRDExX01BUF9XUklURV9ESVNDQVJELCAwLCAmbWFwcGVkUmVzb3VyY2Up
OworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRv
IG1hcCBtYXNrZWQgY2xlYXIgdmVydGV4IGJ1ZmZlciwgSFJFU1VMVDogMHglWC4iLCByZXN1bHQp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZDNkMTE6OlBvc2l0aW9uRGVwdGhDb2xv
clZlcnRleCAqdmVydGljZXMgPSByZWludGVycHJldF9jYXN0PGQzZDExOjpQb3NpdGlvbkRlcHRo
Q29sb3JWZXJ0ZXgqPihtYXBwZWRSZXNvdXJjZS5wRGF0YSk7CisKKyAgICBmbG9hdCBkZXB0aENs
ZWFyID0gZ2w6OmNsYW1wMDEoY2xlYXJQYXJhbXMuZGVwdGhDbGVhclZhbHVlKTsKKyAgICBkM2Qx
MTo6U2V0UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KCZ2ZXJ0aWNlc1swXSwgLTEuMGYsICAxLjBm
LCBkZXB0aENsZWFyLCBjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUpOworICAgIGQzZDExOjpT
ZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgoJnZlcnRpY2VzWzFdLCAtMS4wZiwgLTEuMGYsIGRl
cHRoQ2xlYXIsIGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZSk7CisgICAgZDNkMTE6OlNldFBv
c2l0aW9uRGVwdGhDb2xvclZlcnRleCgmdmVydGljZXNbMl0sICAxLjBmLCAgMS4wZiwgZGVwdGhD
bGVhciwgY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlKTsKKyAgICBkM2QxMTo6U2V0UG9zaXRp
b25EZXB0aENvbG9yVmVydGV4KCZ2ZXJ0aWNlc1szXSwgIDEuMGYsIC0xLjBmLCBkZXB0aENsZWFy
LCBjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUpOworCisgICAgbURldmljZUNvbnRleHQtPlVu
bWFwKG1DbGVhclZCLCAwKTsKKworICAgIC8vIEFwcGx5IHN0YXRlCisgICAgbURldmljZUNvbnRl
eHQtPk9NU2V0QmxlbmRTdGF0ZShibGVuZFN0YXRlLCBibGVuZEZhY3RvcnMsIHNhbXBsZU1hc2sp
OworICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldERlcHRoU3RlbmNpbFN0YXRlKGRzU3RhdGUsIHN0
ZW5jaWxDbGVhcik7CisgICAgbURldmljZUNvbnRleHQtPlJTU2V0U3RhdGUobVNjaXNzb3JFbmFi
bGVkID8gbUNsZWFyU2Npc3NvclJTIDogbUNsZWFyTm9TY2lzc29yUlMpOworCisgICAgLy8gQXBw
bHkgc2hhZGVycworICAgIElEM0QxMVBpeGVsU2hhZGVyICpwaXhlbFNoYWRlciA9IGZyYW1lQnVm
ZmVyLT51c2luZ0V4dGVuZGVkRHJhd0J1ZmZlcnMoKSA/IG1DbGVhck11bHRpcGxlUFMgOiBtQ2xl
YXJTaW5nbGVQUzsKKworICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldElucHV0TGF5b3V0KG1DbGVh
cklMKTsKKyAgICBtRGV2aWNlQ29udGV4dC0+VlNTZXRTaGFkZXIobUNsZWFyVlMsIE5VTEwsIDAp
OworICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlcihwaXhlbFNoYWRlciwgTlVMTCwgMCk7
CisgICAgbURldmljZUNvbnRleHQtPkdTU2V0U2hhZGVyKE5VTEwsIE5VTEwsIDApOworCisgICAg
Ly8gQXBwbHkgdmVydGV4IGJ1ZmZlcgorICAgIHN0YXRpYyBVSU5UIHN0cmlkZSA9IHNpemVvZihk
M2QxMTo6UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KTsKKyAgICBzdGF0aWMgVUlOVCBzdGFydElk
eCA9IDA7CisgICAgbURldmljZUNvbnRleHQtPklBU2V0VmVydGV4QnVmZmVycygwLCAxLCAmbUNs
ZWFyVkIsICZzdHJpZGUsICZzdGFydElkeCk7CisgICAgbURldmljZUNvbnRleHQtPklBU2V0UHJp
bWl0aXZlVG9wb2xvZ3koRDNEX1BSSU1JVElWRV9UT1BPTE9HWV9UUklBTkdMRVNUUklQKTsKKwor
ICAgIC8vIERyYXcgdGhlIGNsZWFyIHF1YWQKKyAgICBtRGV2aWNlQ29udGV4dC0+RHJhdyg0LCAw
KTsKKworICAgIC8vIENsZWFuIHVwCisgICAgbWFya0FsbFN0YXRlRGlydHkoKTsKK30KKwordm9p
ZCBSZW5kZXJlcjExOjptYXJrQWxsU3RhdGVEaXJ0eSgpCit7CisgICAgZm9yICh1bnNpZ25lZCBp
bnQgcnRJbmRleCA9IDA7IHJ0SW5kZXggPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVG
RkVSUzsgcnRJbmRleCsrKQorICAgIHsKKyAgICAgICAgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJp
YWxzW3J0SW5kZXhdID0gMDsKKyAgICB9CisgICAgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCA9
IDA7CisgICAgbUFwcGxpZWRTdGVuY2lsYnVmZmVyU2VyaWFsID0gMDsKKyAgICBtRGVwdGhTdGVu
Y2lsSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBtUmVuZGVyVGFyZ2V0RGVzY0luaXRpYWxpemVk
ID0gZmFsc2U7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9N
QVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IGkrKykKKyAgICB7CisgICAgICAgIG1Gb3Jj
ZVNldFZlcnRleFNhbXBsZXJTdGF0ZXNbaV0gPSB0cnVlOworICAgICAgICBtQ3VyVmVydGV4VGV4
dHVyZVNlcmlhbHNbaV0gPSAwOworICAgIH0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGdsOjpN
QVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgaSsrKQorICAgIHsKKyAgICAgICAgbUZvcmNlU2V0UGl4
ZWxTYW1wbGVyU3RhdGVzW2ldID0gdHJ1ZTsKKyAgICAgICAgbUN1clBpeGVsVGV4dHVyZVNlcmlh
bHNbaV0gPSAwOworICAgIH0KKworICAgIG1Gb3JjZVNldEJsZW5kU3RhdGUgPSB0cnVlOworICAg
IG1Gb3JjZVNldFJhc3RlclN0YXRlID0gdHJ1ZTsKKyAgICBtRm9yY2VTZXREZXB0aFN0ZW5jaWxT
dGF0ZSA9IHRydWU7CisgICAgbUZvcmNlU2V0U2Npc3NvciA9IHRydWU7CisgICAgbUZvcmNlU2V0
Vmlld3BvcnQgPSB0cnVlOworCisgICAgbUFwcGxpZWRJQlNlcmlhbCA9IDA7CisgICAgbUFwcGxp
ZWRTdG9yYWdlSUJTZXJpYWwgPSAwOworICAgIG1BcHBsaWVkSUJPZmZzZXQgPSAwOworCisgICAg
bUFwcGxpZWRQcm9ncmFtQmluYXJ5U2VyaWFsID0gMDsKKyAgICBtZW1zZXQoJm1BcHBsaWVkVmVy
dGV4Q29uc3RhbnRzLCAwLCBzaXplb2YoZHhfVmVydGV4Q29uc3RhbnRzKSk7CisgICAgbWVtc2V0
KCZtQXBwbGllZFBpeGVsQ29uc3RhbnRzLCAwLCBzaXplb2YoZHhfUGl4ZWxDb25zdGFudHMpKTsK
KworICAgIG1JbnB1dExheW91dENhY2hlLm1hcmtEaXJ0eSgpOworCisgICAgbUN1cnJlbnRWZXJ0
ZXhDb25zdGFudEJ1ZmZlciA9IE5VTEw7CisgICAgbUN1cnJlbnRQaXhlbENvbnN0YW50QnVmZmVy
ID0gTlVMTDsKKyAgICBtQ3VycmVudEdlb21ldHJ5Q29uc3RhbnRCdWZmZXIgPSBOVUxMOworCisg
ICAgbUN1cnJlbnRQcmltaXRpdmVUb3BvbG9neSA9IEQzRF9QUklNSVRJVkVfVE9QT0xPR1lfVU5E
RUZJTkVEOworfQorCit2b2lkIFJlbmRlcmVyMTE6OnJlbGVhc2VEZXZpY2VSZXNvdXJjZXMoKQor
eworICAgIG1TdGF0ZUNhY2hlLmNsZWFyKCk7CisgICAgbUlucHV0TGF5b3V0Q2FjaGUuY2xlYXIo
KTsKKworICAgIGRlbGV0ZSBtVmVydGV4RGF0YU1hbmFnZXI7CisgICAgbVZlcnRleERhdGFNYW5h
Z2VyID0gTlVMTDsKKworICAgIGRlbGV0ZSBtSW5kZXhEYXRhTWFuYWdlcjsKKyAgICBtSW5kZXhE
YXRhTWFuYWdlciA9IE5VTEw7CisKKyAgICBkZWxldGUgbUxpbmVMb29wSUI7CisgICAgbUxpbmVM
b29wSUIgPSBOVUxMOworCisgICAgZGVsZXRlIG1UcmlhbmdsZUZhbklCOworICAgIG1Ucmlhbmds
ZUZhbklCID0gTlVMTDsKKworICAgIFNhZmVSZWxlYXNlKG1Db3B5VkIpOworICAgIFNhZmVSZWxl
YXNlKG1Db3B5U2FtcGxlcik7CisgICAgU2FmZVJlbGVhc2UobUNvcHlJTCk7CisgICAgU2FmZVJl
bGVhc2UobUNvcHlJTCk7CisgICAgU2FmZVJlbGVhc2UobUNvcHlWUyk7CisgICAgU2FmZVJlbGVh
c2UobUNvcHlSR0JBUFMpOworICAgIFNhZmVSZWxlYXNlKG1Db3B5UkdCUFMpOworICAgIFNhZmVS
ZWxlYXNlKG1Db3B5THVtUFMpOworICAgIFNhZmVSZWxlYXNlKG1Db3B5THVtQWxwaGFQUyk7CisK
KyAgICBtQ29weVJlc291cmNlc0luaXRpYWxpemVkID0gZmFsc2U7CisKKyAgICBTYWZlUmVsZWFz
ZShtQ2xlYXJWQik7CisgICAgU2FmZVJlbGVhc2UobUNsZWFySUwpOworICAgIFNhZmVSZWxlYXNl
KG1DbGVhclZTKTsKKyAgICBTYWZlUmVsZWFzZShtQ2xlYXJTaW5nbGVQUyk7CisgICAgU2FmZVJl
bGVhc2UobUNsZWFyTXVsdGlwbGVQUyk7CisgICAgU2FmZVJlbGVhc2UobUNsZWFyU2Npc3NvclJT
KTsKKyAgICBTYWZlUmVsZWFzZShtQ2xlYXJOb1NjaXNzb3JSUyk7CisKKyAgICBtQ2xlYXJSZXNv
dXJjZXNJbml0aWFsaXplZCA9IGZhbHNlOworCisgICAgU2FmZVJlbGVhc2UobURyaXZlckNvbnN0
YW50QnVmZmVyVlMpOworICAgIFNhZmVSZWxlYXNlKG1Ecml2ZXJDb25zdGFudEJ1ZmZlclBTKTsK
KyAgICBTYWZlUmVsZWFzZShtU3luY1F1ZXJ5KTsKK30KKwordm9pZCBSZW5kZXJlcjExOjpub3Rp
ZnlEZXZpY2VMb3N0KCkKK3sKKyAgICBtRGV2aWNlTG9zdCA9IHRydWU7CisgICAgbURpc3BsYXkt
Pm5vdGlmeURldmljZUxvc3QoKTsKK30KKworYm9vbCBSZW5kZXJlcjExOjppc0RldmljZUxvc3Qo
KQoreworICAgIHJldHVybiBtRGV2aWNlTG9zdDsKK30KKworLy8gc2V0IG5vdGlmeSB0byB0cnVl
IHRvIGJyb2FkY2FzdCBhIG1lc3NhZ2UgdG8gYWxsIGNvbnRleHRzIG9mIHRoZSBkZXZpY2UgbG9z
cworYm9vbCBSZW5kZXJlcjExOjp0ZXN0RGV2aWNlTG9zdChib29sIG5vdGlmeSkKK3sKKyAgICBi
b29sIGlzTG9zdCA9IGZhbHNlOworCisgICAgLy8gR2V0UmVtb3ZlZFJlYXNvbiBpcyB1c2VkIHRv
IHRlc3QgaWYgdGhlIGRldmljZSBpcyByZW1vdmVkCisgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2
aWNlLT5HZXREZXZpY2VSZW1vdmVkUmVhc29uKCk7CisgICAgaXNMb3N0ID0gZDNkMTE6OmlzRGV2
aWNlTG9zdEVycm9yKHJlc3VsdCk7CisKKyAgICBpZiAoaXNMb3N0KQorICAgIHsKKyAgICAgICAg
Ly8gTG9nIGVycm9yIGlmIHRoaXMgaXMgYSBuZXcgZGV2aWNlIGxvc3QgZXZlbnQKKyAgICAgICAg
aWYgKG1EZXZpY2VMb3N0ID09IGZhbHNlKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIlRo
ZSBEM0QxMSBkZXZpY2Ugd2FzIHJlbW92ZWQ6IDB4JTA4WCIsIHJlc3VsdCk7CisgICAgICAgIH0K
KworICAgICAgICAvLyBlbnN1cmUgd2Ugbm90ZSB0aGUgZGV2aWNlIGxvc3MgLS0KKyAgICAgICAg
Ly8gd2UnbGwgcHJvYmFibHkgZ2V0IHRoaXMgZG9uZSBhZ2FpbiBieSBub3RpZnlEZXZpY2VMb3N0
CisgICAgICAgIC8vIGJ1dCBiZXN0IHRvIHJlbWVtYmVyIGl0IQorICAgICAgICAvLyBOb3RlIHRo
YXQgd2UgZG9uJ3Qgd2FudCB0byBjbGVhciB0aGUgZGV2aWNlIGxvc3Mgc3RhdHVzIGhlcmUKKyAg
ICAgICAgLy8gLS0gdGhpcyBuZWVkcyB0byBiZSBkb25lIGJ5IHJlc2V0RGV2aWNlCisgICAgICAg
IG1EZXZpY2VMb3N0ID0gdHJ1ZTsKKyAgICAgICAgaWYgKG5vdGlmeSkKKyAgICAgICAgeworICAg
ICAgICAgICAgbm90aWZ5RGV2aWNlTG9zdCgpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIGlzTG9zdDsKK30KKworYm9vbCBSZW5kZXJlcjExOjp0ZXN0RGV2aWNlUmVzZXR0YWJsZSgp
Cit7CisgICAgLy8gZGV0ZXJtaW5lIGlmIHRoZSBkZXZpY2UgaXMgcmVzZXR0YWJsZSBieSBjcmVh
dGluZyBhIGR1bW15IGRldmljZQorICAgIFBGTl9EM0QxMV9DUkVBVEVfREVWSUNFIEQzRDExQ3Jl
YXRlRGV2aWNlID0gKFBGTl9EM0QxMV9DUkVBVEVfREVWSUNFKUdldFByb2NBZGRyZXNzKG1EM2Qx
MU1vZHVsZSwgIkQzRDExQ3JlYXRlRGV2aWNlIik7CisKKyAgICBpZiAoRDNEMTFDcmVhdGVEZXZp
Y2UgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBE
M0RfRkVBVFVSRV9MRVZFTCBmZWF0dXJlTGV2ZWxzW10gPQorICAgIHsKKyAgICAgICAgRDNEX0ZF
QVRVUkVfTEVWRUxfMTFfMCwKKyAgICAgICAgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMSwKKyAgICAg
ICAgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMCwKKyAgICB9OworCisgICAgSUQzRDExRGV2aWNlKiBk
dW1teURldmljZTsKKyAgICBEM0RfRkVBVFVSRV9MRVZFTCBkdW1teUZlYXR1cmVMZXZlbDsKKyAg
ICBJRDNEMTFEZXZpY2VDb250ZXh0KiBkdW1teUNvbnRleHQ7CisKKyAgICBIUkVTVUxUIHJlc3Vs
dCA9IEQzRDExQ3JlYXRlRGV2aWNlKE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBEM0RfRFJJVkVSX1RZUEVfSEFSRFdBUkUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgI2lmIGRlZmluZWQoX0RFQlVHKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRDNEMTFfQ1JFQVRFX0RFVklDRV9ERUJVRywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2Vu
ZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlTGV2ZWxz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlTaXplKGZlYXR1
cmVMZXZlbHMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEMTFf
U0RLX1ZFUlNJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZHVt
bXlEZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZHVtbXlG
ZWF0dXJlTGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZHVt
bXlDb250ZXh0KTsKKworICAgIGlmICghbURldmljZSB8fCBGQUlMRUQocmVzdWx0KSkKKyAgICB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBkdW1teUNvbnRleHQtPlJlbGVh
c2UoKTsKKyAgICBkdW1teURldmljZS0+UmVsZWFzZSgpOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgUmVuZGVyZXIxMTo6cmVsZWFzZSgpCit7CisgICAgcmVsZWFzZURldmljZVJlc291
cmNlcygpOworCisgICAgaWYgKG1EeGdpRmFjdG9yeSkKKyAgICB7CisgICAgICAgIG1EeGdpRmFj
dG9yeS0+UmVsZWFzZSgpOworICAgICAgICBtRHhnaUZhY3RvcnkgPSBOVUxMOworICAgIH0KKwor
ICAgIGlmIChtRHhnaUFkYXB0ZXIpCisgICAgeworICAgICAgICBtRHhnaUFkYXB0ZXItPlJlbGVh
c2UoKTsKKyAgICAgICAgbUR4Z2lBZGFwdGVyID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAobURl
dmljZUNvbnRleHQpCisgICAgeworICAgICAgICBtRGV2aWNlQ29udGV4dC0+Q2xlYXJTdGF0ZSgp
OworICAgICAgICBtRGV2aWNlQ29udGV4dC0+Rmx1c2goKTsKKyAgICAgICAgbURldmljZUNvbnRl
eHQtPlJlbGVhc2UoKTsKKyAgICAgICAgbURldmljZUNvbnRleHQgPSBOVUxMOworICAgIH0KKwor
ICAgIGlmIChtRGV2aWNlKQorICAgIHsKKyAgICAgICAgbURldmljZS0+UmVsZWFzZSgpOworICAg
ICAgICBtRGV2aWNlID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAobUQzZDExTW9kdWxlKQorICAg
IHsKKyAgICAgICAgRnJlZUxpYnJhcnkobUQzZDExTW9kdWxlKTsKKyAgICAgICAgbUQzZDExTW9k
dWxlID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAobUR4Z2lNb2R1bGUpCisgICAgeworICAgICAg
ICBGcmVlTGlicmFyeShtRHhnaU1vZHVsZSk7CisgICAgICAgIG1EeGdpTW9kdWxlID0gTlVMTDsK
KyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6cmVzZXREZXZpY2UoKQoreworICAgIC8vIHJl
Y3JlYXRlIGV2ZXJ5dGhpbmcKKyAgICByZWxlYXNlKCk7CisgICAgRUdMaW50IHJlc3VsdCA9IGlu
aXRpYWxpemUoKTsKKworICAgIGlmIChyZXN1bHQgIT0gRUdMX1NVQ0NFU1MpCisgICAgeworICAg
ICAgICBFUlIoIkNvdWxkIG5vdCByZWluaXRpYWxpemUgRDNEMTEgZGV2aWNlOiAlMDhYIiwgcmVz
dWx0KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1EZXZpY2VMb3N0ID0g
ZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRFdPUkQgUmVuZGVyZXIxMTo6Z2V0QWRh
cHRlclZlbmRvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1BZGFwdGVyRGVzY3JpcHRpb24uVmVu
ZG9ySWQ7Cit9CisKK3N0ZDo6c3RyaW5nIFJlbmRlcmVyMTE6OmdldFJlbmRlcmVyRGVzY3JpcHRp
b24oKSBjb25zdAoreworICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSByZW5kZXJlclN0cmluZzsKKwor
ICAgIHJlbmRlcmVyU3RyaW5nIDw8IG1EZXNjcmlwdGlvbjsKKyAgICByZW5kZXJlclN0cmluZyA8
PCAiIERpcmVjdDNEMTEiOworCisgICAgcmVuZGVyZXJTdHJpbmcgPDwgIiB2c18iIDw8IGdldE1h
am9yU2hhZGVyTW9kZWwoKSA8PCAiXyIgPDwgZ2V0TWlub3JTaGFkZXJNb2RlbCgpOworICAgIHJl
bmRlcmVyU3RyaW5nIDw8ICIgcHNfIiA8PCBnZXRNYWpvclNoYWRlck1vZGVsKCkgPDwgIl8iIDw8
IGdldE1pbm9yU2hhZGVyTW9kZWwoKTsKKworICAgIHJldHVybiByZW5kZXJlclN0cmluZy5zdHIo
KTsKK30KKworR1VJRCBSZW5kZXJlcjExOjpnZXRBZGFwdGVySWRlbnRpZmllcigpIGNvbnN0Cit7
CisgICAgLy8gVXNlIHRoZSBhZGFwdGVyIExVSUQgYXMgb3VyIGFkYXB0ZXIgSUQKKyAgICAvLyBU
aGlzIG51bWJlciBpcyBsb2NhbCB0byBhIG1hY2hpbmUgaXMgb25seSBndWFyYW50ZWVkIHRvIGJl
IHVuaXF1ZSBiZXR3ZWVuIHJlc3RhcnRzCisgICAgTUVUQV9BU1NFUlQoc2l6ZW9mKExVSUQpIDw9
IHNpemVvZihHVUlEKSk7CisgICAgR1VJRCBhZGFwdGVySWQgPSB7MH07CisgICAgbWVtY3B5KCZh
ZGFwdGVySWQsICZtQWRhcHRlckRlc2NyaXB0aW9uLkFkYXB0ZXJMdWlkLCBzaXplb2YoTFVJRCkp
OworICAgIHJldHVybiBhZGFwdGVySWQ7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0QkdSQVRl
eHR1cmVTdXBwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUJHUkFUZXh0dXJlU3VwcG9ydDsK
K30KKworYm9vbCBSZW5kZXJlcjExOjpnZXREWFQxVGV4dHVyZVN1cHBvcnQoKQoreworICAgIHJl
dHVybiBtRFhUMVRleHR1cmVTdXBwb3J0OworfQorCitib29sIFJlbmRlcmVyMTE6OmdldERYVDNU
ZXh0dXJlU3VwcG9ydCgpCit7CisgICAgcmV0dXJuIG1EWFQzVGV4dHVyZVN1cHBvcnQ7Cit9CisK
K2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCkKK3sKKyAgICByZXR1cm4g
bURYVDVUZXh0dXJlU3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjExOjpnZXREZXB0aFRleHR1
cmVTdXBwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbURlcHRoVGV4dHVyZVN1cHBvcnQ7Cit9
CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRl
cmluZywgYm9vbCAqcmVuZGVyYWJsZSkKK3sKKyAgICAqcmVuZGVyYWJsZSA9IG1GbG9hdDMyUmVu
ZGVyU3VwcG9ydDsKKyAgICAqZmlsdGVyaW5nID0gbUZsb2F0MzJGaWx0ZXJTdXBwb3J0OworICAg
IHJldHVybiBtRmxvYXQzMlRleHR1cmVTdXBwb3J0OworfQorCitib29sIFJlbmRlcmVyMTE6Omdl
dEZsb2F0MTZUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUp
Cit7CisgICAgKnJlbmRlcmFibGUgPSBtRmxvYXQxNlJlbmRlclN1cHBvcnQ7CisgICAgKmZpbHRl
cmluZyA9IG1GbG9hdDE2RmlsdGVyU3VwcG9ydDsKKyAgICByZXR1cm4gbUZsb2F0MTZUZXh0dXJl
U3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjExOjpnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9y
dCgpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlcmVyMTE6OmdldEx1bWlu
YW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBSZW5kZXJlcjExOjpnZXRUZXh0dXJlRmlsdGVyQW5pc290cm9weVN1cHBvcnQoKSBjb25zdAor
eworICAgIHJldHVybiB0cnVlOworfQorCitmbG9hdCBSZW5kZXJlcjExOjpnZXRUZXh0dXJlTWF4
QW5pc290cm9weSgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsK
KyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDoKKyAgICAgICAgcmV0dXJuIEQzRDEx
X01BWF9NQVhBTklTT1RST1BZOworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgor
ICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgorICAgICAgICByZXR1cm4gRDNEMTBf
TUFYX01BWEFOSVNPVFJPUFk7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RXZlbnRRdWVyeVN1
cHBvcnQoKQoreworICAgIHJldHVybiB0cnVlOworfQorCitSYW5nZSBSZW5kZXJlcjExOjpnZXRW
aWV3cG9ydEJvdW5kcygpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAg
IHsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDoKKyAgICAgICAgcmV0dXJuIFJh
bmdlKEQzRDExX1ZJRVdQT1JUX0JPVU5EU19NSU4sIEQzRDExX1ZJRVdQT1JUX0JPVU5EU19NQVgp
OworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgorICAgICAgY2FzZSBEM0RfRkVB
VFVSRV9MRVZFTF8xMF8wOgorICAgICAgICByZXR1cm4gUmFuZ2UoRDNEMTBfVklFV1BPUlRfQk9V
TkRTX01JTiwgRDNEMTBfVklFV1BPUlRfQk9VTkRTX01BWCk7CisgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgICAgICByZXR1cm4gUmFuZ2UoMCwgMCk7CisgICAgfQorfQorCit1bnNp
Z25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSBjb25z
dAoreworICAgIE1FVEFfQVNTRVJUKE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl9TTTQgPD0g
Z2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7CisgICAg
c3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVW
RUxfMTFfMDoKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAgICAgIGNhc2Ug
RDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAgICAgICAgcmV0dXJuIE1BWF9URVhUVVJFX0lNQUdF
X1VOSVRTX1ZURl9TTTQ7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjExOjpnZXRNYXhDb21i
aW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ2w6Ok1BWF9URVhU
VVJFX0lNQUdFX1VOSVRTICsgZ2V0TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKTsKK30KKwor
dW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldFJlc2VydmVkVmVydGV4VW5pZm9ybVZlY3RvcnMo
KSBjb25zdAoreworICAgIHJldHVybiAwOyAgIC8vIERyaXZlciB1bmlmb3JtcyBhcmUgc3RvcmVk
IGluIGEgc2VwYXJhdGUgY29uc3RhbnQgYnVmZmVyCit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJl
cjExOjpnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdAoreworICAgIHJl
dHVybiAwOyAgIC8vIERyaXZlciB1bmlmb3JtcyBhcmUgc3RvcmVkIGluIGEgc2VwYXJhdGUgY29u
c3RhbnQgYnVmZmVyCit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjExOjpnZXRNYXhWZXJ0ZXhV
bmlmb3JtVmVjdG9ycygpIGNvbnN0Cit7CisgICAgTUVUQV9BU1NFUlQoTUFYX1ZFUlRFWF9VTklG
T1JNX1ZFQ1RPUlNfRDNEMTEgPD0gRDNEMTBfUkVRX0NPTlNUQU5UX0JVRkZFUl9FTEVNRU5UX0NP
VU5UKTsKKyAgICBBU1NFUlQobUZlYXR1cmVMZXZlbCA+PSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8w
KTsKKyAgICByZXR1cm4gTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlNfRDNEMTE7Cit9CisKK3Vu
c2lnbmVkIGludCBSZW5kZXJlcjExOjpnZXRNYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgY29u
c3QKK3sKKyAgICBNRVRBX0FTU0VSVChNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTX0QzRDEx
IDw9IEQzRDEwX1JFUV9DT05TVEFOVF9CVUZGRVJfRUxFTUVOVF9DT1VOVCk7CisgICAgQVNTRVJU
KG1GZWF0dXJlTGV2ZWwgPj0gRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMCk7CisgICAgcmV0dXJuIE1B
WF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlNfRDNEMTE7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5k
ZXJlcjExOjpnZXRNYXhWYXJ5aW5nVmVjdG9ycygpIGNvbnN0Cit7CisgICAgTUVUQV9BU1NFUlQo
Z2w6OklNUExFTUVOVEFUSU9OX01BWF9WQVJZSU5HX1ZFQ1RPUlMgPT0gRDNEMTFfVlNfT1VUUFVU
X1JFR0lTVEVSX0NPVU5UKTsKKyAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCisgICAgeworICAg
ICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgorICAgICAgICByZXR1cm4gRDNEMTFfVlNf
T1VUUFVUX1JFR0lTVEVSX0NPVU5UOworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8x
OgorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgorICAgICAgICByZXR1cm4gRDNE
MTBfVlNfT1VUUFVUX1JFR0lTVEVSX0NPVU5UOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitib29sIFJlbmRlcmVyMTE6OmdldE5v
blBvd2VyMlRleHR1cmVTdXBwb3J0KCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2
ZWwpCisgICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgorICAgICAgY2Fz
ZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8x
MF8wOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0
T2NjbHVzaW9uUXVlcnlTdXBwb3J0KCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2
ZWwpCisgICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgorICAgICAgY2Fz
ZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8x
MF8wOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0
SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdAoreworICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkK
KyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6CisgICAgICBjYXNlIEQz
RF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6
CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBSZW5kZXJlcjExOjpnZXRTaGFy
ZUhhbmRsZVN1cHBvcnQoKSBjb25zdAoreworICAgIC8vIFdlIG9ubHkgY3VycmVudGx5IHN1cHBv
cnQgc2hhcmUgaGFuZGxlcyB3aXRoIEJHUkEgc3VyZmFjZXMsIGJlY2F1c2UKKyAgICAvLyBjaHJv
bWUgbmVlZHMgQkdSQS4gT25jZSBjaHJvbWUgZml4ZXMgdGhpcywgd2Ugc2hvdWxkIGFsd2F5cyBz
dXBwb3J0IHRoZW0uCisgICAgLy8gUElYIGRvZXNuJ3Qgc2VlbSB0byBzdXBwb3J0IHVzaW5nIHNo
YXJlIGhhbmRsZXMsIHNvIGRpc2FibGUgdGhlbS4KKyAgICByZXR1cm4gZ2V0QkdSQVRleHR1cmVT
dXBwb3J0KCkgJiYgIWdsOjpwZXJmQWN0aXZlKCk7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0
RGVyaXZhdGl2ZUluc3RydWN0aW9uU3VwcG9ydCgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtRmVh
dHVyZUxldmVsKQorICAgIHsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDoKKyAg
ICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVf
TEVWRUxfMTBfMDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFJlbmRlcmVy
MTE6OmdldFBvc3RTdWJCdWZmZXJTdXBwb3J0KCkgY29uc3QKK3sKKyAgICAvLyBEM0QxMSBkb2Vz
IG5vdCBzdXBwb3J0IHByZXNlbnQgd2l0aCBkaXJ0eSByZWN0YW5nbGVzIHVudGlsIEQzRDExLjEg
YW5kIERYR0kgMS4yLgorICAgIHJldHVybiBmYWxzZTsKK30KKworaW50IFJlbmRlcmVyMTE6Omdl
dE1ham9yU2hhZGVyTW9kZWwoKSBjb25zdAoreworICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkK
KyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6IHJldHVybiBEM0QxMV9T
SEFERVJfTUFKT1JfVkVSU0lPTjsgICAvLyA1CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVM
XzEwXzE6IHJldHVybiBEM0QxMF8xX1NIQURFUl9NQUpPUl9WRVJTSU9OOyAvLyA0CisgICAgICBj
YXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6IHJldHVybiBEM0QxMF9TSEFERVJfTUFKT1JfVkVS
U0lPTjsgICAvLyA0CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgICAgIHJldHVybiAw
OworICAgIH0KK30KKworaW50IFJlbmRlcmVyMTE6OmdldE1pbm9yU2hhZGVyTW9kZWwoKSBjb25z
dAoreworICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9G
RUFUVVJFX0xFVkVMXzExXzA6IHJldHVybiBEM0QxMV9TSEFERVJfTUlOT1JfVkVSU0lPTjsgICAv
LyAwCisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6IHJldHVybiBEM0QxMF8xX1NI
QURFUl9NSU5PUl9WRVJTSU9OOyAvLyAxCisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEw
XzA6IHJldHVybiBEM0QxMF9TSEFERVJfTUlOT1JfVkVSU0lPTjsgICAvLyAwCisgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOyAgICAgIHJldHVybiAwOworICAgIH0KK30KKworZmxvYXQgUmVu
ZGVyZXIxMTo6Z2V0TWF4UG9pbnRTaXplKCkgY29uc3QKK3sKKyAgICAvLyBjaG9vc2UgYSByZWFz
b25hYmxlIG1heGltdW0uIHdlIGVuZm9yY2UgdGhpcyBpbiB0aGUgc2hhZGVyLgorICAgIC8vIChu
Yjogb24gYSBSYWRlb24gMjYwMHh0LCBEWDkgcmVwb3J0cyBhIDI1NiBtYXggcG9pbnQgc2l6ZSkK
KyAgICByZXR1cm4gMTAyNC4wZjsKK30KKworaW50IFJlbmRlcmVyMTE6OmdldE1heFZpZXdwb3J0
RGltZW5zaW9uKCkgY29uc3QKK3sKKyAgICAvLyBNYXhpbXVtIHZpZXdwb3J0IHNpemUgbXVzdCBi
ZSBhdCBsZWFzdCBhcyBsYXJnZSBhcyB0aGUgbGFyZ2VzdCByZW5kZXIgYnVmZmVyIChvciBsYXJn
ZXIpLgorICAgIC8vIEluIG91ciBjYXNlIHJldHVybiB0aGUgbWF4aW11bSB0ZXh0dXJlIHNpemUs
IHdoaWNoIGlzIHRoZSBtYXhpbXVtIHJlbmRlciBidWZmZXIgc2l6ZS4KKyAgICBNRVRBX0FTU0VS
VChEM0QxMV9SRVFfVEVYVFVSRTJEX1VfT1JfVl9ESU1FTlNJT04gKiAyIC0gMSA8PSBEM0QxMV9W
SUVXUE9SVF9CT1VORFNfTUFYKTsKKyAgICBNRVRBX0FTU0VSVChEM0QxMF9SRVFfVEVYVFVSRTJE
X1VfT1JfVl9ESU1FTlNJT04gKiAyIC0gMSA8PSBEM0QxMF9WSUVXUE9SVF9CT1VORFNfTUFYKTsK
KworICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFU
VVJFX0xFVkVMXzExXzA6IAorICAgICAgICByZXR1cm4gRDNEMTFfUkVRX1RFWFRVUkUyRF9VX09S
X1ZfRElNRU5TSU9OOyAgIC8vIDE2Mzg0CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEw
XzE6CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6IAorICAgICAgICByZXR1cm4g
RDNEMTBfUkVRX1RFWFRVUkUyRF9VX09SX1ZfRElNRU5TSU9OOyAgIC8vIDgxOTIKKyAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgCisgICAgICAgIHJldHVybiAwOworICAgIH0KK30K
KworaW50IFJlbmRlcmVyMTE6OmdldE1heFRleHR1cmVXaWR0aCgpIGNvbnN0Cit7CisgICAgc3dp
dGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxf
MTFfMDogcmV0dXJuIEQzRDExX1JFUV9URVhUVVJFMkRfVV9PUl9WX0RJTUVOU0lPTjsgICAvLyAx
NjM4NAorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgorICAgICAgY2FzZSBEM0Rf
RkVBVFVSRV9MRVZFTF8xMF8wOiByZXR1cm4gRDNEMTBfUkVRX1RFWFRVUkUyRF9VX09SX1ZfRElN
RU5TSU9OOyAgIC8vIDgxOTIKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgcmV0
dXJuIDA7CisgICAgfQorfQorCitpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VGV4dHVyZUhlaWdodCgp
IGNvbnN0Cit7CisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsKKyAgICAgIGNhc2Ug
RDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDogcmV0dXJuIEQzRDExX1JFUV9URVhUVVJFMkRfVV9PUl9W
X0RJTUVOU0lPTjsgICAvLyAxNjM4NAorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8x
OgorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOiByZXR1cm4gRDNEMTBfUkVRX1RF
WFRVUkUyRF9VX09SX1ZfRElNRU5TSU9OOyAgIC8vIDgxOTIKKyAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7ICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitib29sIFJlbmRlcmVyMTE6Omdl
dDMyQml0SW5kZXhTdXBwb3J0KCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwp
CisgICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOiAKKyAgICAgIGNhc2Ug
RDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBf
MDogcmV0dXJuIEQzRDEwX1JFUV9EUkFXSU5ERVhFRF9JTkRFWF9DT1VOVF8yX1RPX0VYUCA+PSAz
MjsgICAvLyB0cnVlCisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9Cit9CisKK2ludCBSZW5kZXJlcjExOjpnZXRNaW5Td2FwSW50ZXJ2YWwoKSBj
b25zdAoreworICAgIHJldHVybiAwOworfQorCitpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4U3dhcElu
dGVydmFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gNDsKK30KKworaW50IFJlbmRlcmVyMTE6Omdl
dE1heFN1cHBvcnRlZFNhbXBsZXMoKSBjb25zdAoreworICAgIHJldHVybiBtTWF4U3VwcG9ydGVk
U2FtcGxlczsKK30KKworaW50IFJlbmRlcmVyMTE6OmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVz
KERYR0lfRk9STUFUIGZvcm1hdCwgdW5zaWduZWQgaW50IHJlcXVlc3RlZCkgY29uc3QKK3sKKyAg
ICBpZiAocmVxdWVzdGVkID09IDApCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisK
KyAgICBNdWx0aXNhbXBsZVN1cHBvcnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTXVsdGlz
YW1wbGVTdXBwb3J0TWFwLmZpbmQoZm9ybWF0KTsKKyAgICBpZiAoaXRlciAhPSBtTXVsdGlzYW1w
bGVTdXBwb3J0TWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgY29uc3QgTXVsdGlzYW1wbGVTdXBw
b3J0SW5mbyYgaW5mbyA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IHJlcXVlc3RlZCAtIDE7IGkgPCBEM0QxMV9NQVhfTVVMVElTQU1QTEVfU0FNUExFX0NPVU5U
OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbmZvLnF1YWxpdHlMZXZlbHNbaV0g
PiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBpICsgMTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKwordW5zaWdu
ZWQgaW50IFJlbmRlcmVyMTE6OmdldE1heFJlbmRlclRhcmdldHMoKSBjb25zdAoreworICAgIE1F
VEFfQVNTRVJUKEQzRDExX1NJTVVMVEFORU9VU19SRU5ERVJfVEFSR0VUX0NPVU5UIDw9IGdsOjpJ
TVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTKTsKKyAgICBNRVRBX0FTU0VSVChEM0QxMF9T
SU1VTFRBTkVPVVNfUkVOREVSX1RBUkdFVF9DT1VOVCA8PSBnbDo6SU1QTEVNRU5UQVRJT05fTUFY
X0RSQVdfQlVGRkVSUyk7CisKKyAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCisgICAgeworICAg
ICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgorICAgICAgICByZXR1cm4gRDNEMTFfU0lN
VUxUQU5FT1VTX1JFTkRFUl9UQVJHRVRfQ09VTlQ7ICAvLyA4CisgICAgICBjYXNlIEQzRF9GRUFU
VVJFX0xFVkVMXzEwXzE6CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6CisgICAg
ICAgIC8vIEZlYXR1cmUgbGV2ZWwgMTAuMCBhbmQgMTAuMSBjYXJkcyBwZXJmb3JtIHZlcnkgcG9v
cmx5IHdoZW4gdGhlIHBpeGVsIHNoYWRlcgorICAgICAgICAvLyBvdXRwdXRzIHRvIG11bHRpcGxl
IFJUcyB0aGF0IGFyZSBub3QgYm91bmQuCisgICAgICAgIC8vIFRPRE86IFJlbW92ZSBwaXhlbCBz
aGFkZXIgb3V0cHV0cyBmb3IgcmVuZGVyIHRhcmdldHMgdGhhdCBhcmUgbm90IGJvdW5kLgorICAg
ICAgICByZXR1cm4gMTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgIHJldHVybiAxOworICAgIH0KK30KKworYm9vbCBSZW5kZXJlcjExOjpjb3B5VG9SZW5k
ZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyRCAqc291cmNlKQoreworICAgIGlmIChzb3VyY2UgJiYgZGVzdCkKKyAgICB7Cisg
ICAgICAgIFRleHR1cmVTdG9yYWdlMTFfMkQgKnNvdXJjZTExID0gVGV4dHVyZVN0b3JhZ2UxMV8y
RDo6bWFrZVRleHR1cmVTdG9yYWdlMTFfMkQoc291cmNlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7
CisgICAgICAgIFRleHR1cmVTdG9yYWdlMTFfMkQgKmRlc3QxMSA9IFRleHR1cmVTdG9yYWdlMTFf
MkQ6Om1ha2VUZXh0dXJlU3RvcmFnZTExXzJEKGRlc3QtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsK
KworICAgICAgICBtRGV2aWNlQ29udGV4dC0+Q29weVJlc291cmNlKGRlc3QxMS0+Z2V0QmFzZVRl
eHR1cmUoKSwgc291cmNlMTEtPmdldEJhc2VUZXh0dXJlKCkpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Y29w
eVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqZGVzdCwgVGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzb3VyY2UpCit7CisgICAgaWYgKHNvdXJjZSAmJiBkZXN0
KQorICAgIHsKKyAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlICpzb3VyY2UxMSA9IFRleHR1
cmVTdG9yYWdlMTFfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlMTFfQ3ViZShzb3VyY2UtPmdldFN0
b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlICpkZXN0MTEg
PSBUZXh0dXJlU3RvcmFnZTExX0N1YmU6Om1ha2VUZXh0dXJlU3RvcmFnZTExX0N1YmUoZGVzdC0+
Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworCisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5Db3B5UmVz
b3VyY2UoZGVzdDExLT5nZXRCYXNlVGV4dHVyZSgpLCBzb3VyY2UxMS0+Z2V0QmFzZVRleHR1cmUo
KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBSZW5kZXJlcjExOjpjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZl
ciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBHTGludCBsZXZlbCkKK3sKKyAgICBn
bDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRSZWFkQ29sb3Ji
dWZmZXIoKTsKKyAgICBpZiAoIWNvbG9yYnVmZmVyKQorICAgIHsKKyAgICAgICAgRVJSKCJGYWls
ZWQgdG8gcmV0cmlldmUgdGhlIGNvbG9yIGJ1ZmZlciBmcm9tIHRoZSBmcmFtZSBidWZmZXIuIik7
CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOworICAg
IH0KKworICAgIFJlbmRlclRhcmdldDExICpzb3VyY2VSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJn
ZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGNvbG9yYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSk7
CisgICAgaWYgKCFzb3VyY2VSZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBFUlIoIkZhaWxl
ZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCBmcm9tIHRoZSBmcmFtZSBidWZmZXIuIik7
CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOworICAg
IH0KKworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc291cmNlID0gc291cmNlUmVuZGVy
VGFyZ2V0LT5nZXRTaGFkZXJSZXNvdXJjZVZpZXcoKTsKKyAgICBpZiAoIXNvdXJjZSkKKyAgICB7
CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0IHZpZXcg
ZnJvbSB0aGUgcmVuZGVyIHRhcmdldC4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisgICAgVGV4dHVyZVN0b3JhZ2UxMV8yRCAq
c3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMV8yRDo6bWFrZVRleHR1cmVTdG9yYWdlMTFfMkQo
c3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAgIGlmICghc3RvcmFnZTExKQorICAg
IHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHRleHR1cmUgc3RvcmFnZSBm
cm9tIHRoZSBkZXN0aW5hdGlvbi4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisgICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3RSZW5k
ZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKHN0b3JhZ2UxMS0+
Z2V0UmVuZGVyVGFyZ2V0KGxldmVsKSk7CisgICAgaWYgKCFkZXN0UmVuZGVyVGFyZ2V0KQorICAg
IHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQgZnJv
bSB0aGUgZGVzdGluYXRpb24gc3RvcmFnZS4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisgICAgSUQzRDExUmVuZGVyVGFyZ2V0
VmlldyAqZGVzdCA9IGRlc3RSZW5kZXJUYXJnZXQtPmdldFJlbmRlclRhcmdldFZpZXcoKTsKKyAg
ICBpZiAoIWRlc3QpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUg
cmVuZGVyIHRhcmdldCB2aWV3IGZyb20gdGhlIGRlc3RpbmF0aW9uIHJlbmRlciB0YXJnZXQuIik7
CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOworICAg
IH0KKworICAgIGdsOjpSZWN0YW5nbGUgZGVzdFJlY3Q7CisgICAgZGVzdFJlY3QueCA9IHhvZmZz
ZXQ7CisgICAgZGVzdFJlY3QueSA9IHlvZmZzZXQ7CisgICAgZGVzdFJlY3Qud2lkdGggPSBzb3Vy
Y2VSZWN0LndpZHRoOworICAgIGRlc3RSZWN0LmhlaWdodCA9IHNvdXJjZVJlY3QuaGVpZ2h0Owor
CisgICAgYm9vbCByZXQgPSBjb3B5VGV4dHVyZShzb3VyY2UsIHNvdXJjZVJlY3QsIHNvdXJjZVJl
bmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QsIGRlc3RSZWN0LCBkZXN0UmVuZGVyVGFy
Z2V0LT5nZXRXaWR0aCgpLCBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgZGVzdEZvcm1h
dCk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitib29sIFJlbmRlcmVyMTE6OmNvcHlJbWFnZShn
bDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VS
ZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3Rv
cmFnZSwgR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpCit7CisgICAgZ2w6OlJlbmRlcmJ1ZmZl
ciAqY29sb3JidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVyKCk7CisgICAg
aWYgKCFjb2xvcmJ1ZmZlcikKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZl
IHRoZSBjb2xvciBidWZmZXIgZnJvbSB0aGUgZnJhbWUgYnVmZmVyLiIpOworICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CisKKyAgICBSZW5k
ZXJUYXJnZXQxMSAqc291cmNlUmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5k
ZXJUYXJnZXQxMShjb2xvcmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOworICAgIGlmICghc291
cmNlUmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUg
dGhlIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgZnJhbWUgYnVmZmVyLiIpOworICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CisKKyAgICBJRDNE
MTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNvdXJjZSA9IHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0U2hh
ZGVyUmVzb3VyY2VWaWV3KCk7CisgICAgaWYgKCFzb3VyY2UpCisgICAgeworICAgICAgICBFUlIo
IkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCB2aWV3IGZyb20gdGhlIHJlbmRl
ciB0YXJnZXQuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
ZmFsc2UpOworICAgIH0KKworICAgIFRleHR1cmVTdG9yYWdlMTFfQ3ViZSAqc3RvcmFnZTExID0g
VGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKHN0b3JhZ2Ut
PmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICBpZiAoIXN0b3JhZ2UxMSkKKyAgICB7CisgICAg
ICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSB0ZXh0dXJlIHN0b3JhZ2UgZnJvbSB0aGUg
ZGVzdGluYXRpb24uIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSwgZmFsc2UpOworICAgIH0KKworICAgIFJlbmRlclRhcmdldDExICpkZXN0UmVuZGVyVGFyZ2V0
ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShzdG9yYWdlMTEtPmdldFJlbmRl
clRhcmdldCh0YXJnZXQsIGxldmVsKSk7CisgICAgaWYgKCFkZXN0UmVuZGVyVGFyZ2V0KQorICAg
IHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQgZnJv
bSB0aGUgZGVzdGluYXRpb24gc3RvcmFnZS4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisgICAgSUQzRDExUmVuZGVyVGFyZ2V0
VmlldyAqZGVzdCA9IGRlc3RSZW5kZXJUYXJnZXQtPmdldFJlbmRlclRhcmdldFZpZXcoKTsKKyAg
ICBpZiAoIWRlc3QpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUg
cmVuZGVyIHRhcmdldCB2aWV3IGZyb20gdGhlIGRlc3RpbmF0aW9uIHJlbmRlciB0YXJnZXQuIik7
CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOworICAg
IH0KKworICAgIGdsOjpSZWN0YW5nbGUgZGVzdFJlY3Q7CisgICAgZGVzdFJlY3QueCA9IHhvZmZz
ZXQ7CisgICAgZGVzdFJlY3QueSA9IHlvZmZzZXQ7CisgICAgZGVzdFJlY3Qud2lkdGggPSBzb3Vy
Y2VSZWN0LndpZHRoOworICAgIGRlc3RSZWN0LmhlaWdodCA9IHNvdXJjZVJlY3QuaGVpZ2h0Owor
CisgICAgYm9vbCByZXQgPSBjb3B5VGV4dHVyZShzb3VyY2UsIHNvdXJjZVJlY3QsIHNvdXJjZVJl
bmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QsIGRlc3RSZWN0LCBkZXN0UmVuZGVyVGFy
Z2V0LT5nZXRXaWR0aCgpLCBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgZGVzdEZvcm1h
dCk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitib29sIFJlbmRlcmVyMTE6OmNvcHlUZXh0dXJl
KElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc291cmNlLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZz
b3VyY2VBcmVhLCB1bnNpZ25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3VyY2VI
ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZp
ZXcgKmRlc3QsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRlc3RBcmVhLCB1bnNpZ25lZCBpbnQgZGVz
dFdpZHRoLCB1bnNpZ25lZCBpbnQgZGVzdEhlaWdodCwgR0xlbnVtIGRlc3RGb3JtYXQpCit7Cisg
ICAgSFJFU1VMVCByZXN1bHQ7CisKKyAgICBpZiAoIW1Db3B5UmVzb3VyY2VzSW5pdGlhbGl6ZWQp
CisgICAgeworICAgICAgICBBU1NFUlQoIW1Db3B5VkIgJiYgIW1Db3B5U2FtcGxlciAmJiAhbUNv
cHlJTCAmJiAhbUNvcHlWUyAmJiAhbUNvcHlSR0JBUFMgJiYgIW1Db3B5UkdCUFMgJiYgIW1Db3B5
THVtUFMgJiYgIW1Db3B5THVtQWxwaGFQUyk7CisKKyAgICAgICAgRDNEMTFfQlVGRkVSX0RFU0Mg
dmJEZXNjOworICAgICAgICB2YkRlc2MuQnl0ZVdpZHRoID0gc2l6ZW9mKGQzZDExOjpQb3NpdGlv
blRleENvb3JkVmVydGV4KSAqIDQ7CisgICAgICAgIHZiRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdF
X0RZTkFNSUM7CisgICAgICAgIHZiRGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1ZFUlRFWF9C
VUZGRVI7CisgICAgICAgIHZiRGVzYy5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1Nf
V1JJVEU7CisgICAgICAgIHZiRGVzYy5NaXNjRmxhZ3MgPSAwOworICAgICAgICB2YkRlc2MuU3Ry
dWN0dXJlQnl0ZVN0cmlkZSA9IDA7CisKKyAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRl
QnVmZmVyKCZ2YkRlc2MsIE5VTEwsICZtQ29weVZCKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURF
RChyZXN1bHQpKTsKKyAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ29weVZCLCAiUmVuZGVy
ZXIxMSBjb3B5IHRleHR1cmUgdmVydGV4IGJ1ZmZlciIpOworCisgICAgICAgIEQzRDExX1NBTVBM
RVJfREVTQyBzYW1wbGVyRGVzYzsKKyAgICAgICAgc2FtcGxlckRlc2MuRmlsdGVyID0gRDNEMTFf
RklMVEVSX01JTl9NQUdfTUlQX0xJTkVBUjsKKyAgICAgICAgc2FtcGxlckRlc2MuQWRkcmVzc1Ug
PSBEM0QxMV9URVhUVVJFX0FERFJFU1NfQ0xBTVA7CisgICAgICAgIHNhbXBsZXJEZXNjLkFkZHJl
c3NWID0gRDNEMTFfVEVYVFVSRV9BRERSRVNTX0NMQU1QOworICAgICAgICBzYW1wbGVyRGVzYy5B
ZGRyZXNzVyA9IEQzRDExX1RFWFRVUkVfQUREUkVTU19DTEFNUDsKKyAgICAgICAgc2FtcGxlckRl
c2MuTWlwTE9EQmlhcyA9IDAuMGY7CisgICAgICAgIHNhbXBsZXJEZXNjLk1heEFuaXNvdHJvcHkg
PSAwOworICAgICAgICBzYW1wbGVyRGVzYy5Db21wYXJpc29uRnVuYyA9IEQzRDExX0NPTVBBUklT
T05fTkVWRVI7CisgICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzBdID0gMC4wZjsKKyAg
ICAgICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbMV0gPSAwLjBmOworICAgICAgICBzYW1wbGVy
RGVzYy5Cb3JkZXJDb2xvclsyXSA9IDAuMGY7CisgICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNv
bG9yWzNdID0gMC4wZjsKKyAgICAgICAgc2FtcGxlckRlc2MuTWluTE9EID0gMC4wZjsKKyAgICAg
ICAgc2FtcGxlckRlc2MuTWF4TE9EID0gMC4wZjsKKworICAgICAgICByZXN1bHQgPSBtRGV2aWNl
LT5DcmVhdGVTYW1wbGVyU3RhdGUoJnNhbXBsZXJEZXNjLCAmbUNvcHlTYW1wbGVyKTsKKyAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgZDNkMTE6OlNldERlYnVnTmFt
ZShtQ29weVNhbXBsZXIsICJSZW5kZXJlcjExIGNvcHkgc2FtcGxlciIpOworCisgICAgICAgIEQz
RDExX0lOUFVUX0VMRU1FTlRfREVTQyBxdWFkTGF5b3V0W10gPQorICAgICAgICB7CisgICAgICAg
ICAgICB7ICJQT1NJVElPTiIsIDAsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgMCwgMCwgRDNE
MTFfSU5QVVRfUEVSX1ZFUlRFWF9EQVRBLCAwIH0sCisgICAgICAgICAgICB7ICJURVhDT09SRCIs
IDAsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgMCwgOCwgRDNEMTFfSU5QVVRfUEVSX1ZFUlRF
WF9EQVRBLCAwIH0sCisgICAgICAgIH07CisKKyAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3Jl
YXRlSW5wdXRMYXlvdXQocXVhZExheW91dCwgMiwgZ19WU19QYXNzdGhyb3VnaCwgc2l6ZW9mKGdf
VlNfUGFzc3Rocm91Z2gpLCAmbUNvcHlJTCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CisgICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNvcHlJTCwgIlJlbmRlcmVyMTEg
Y29weSB0ZXh0dXJlIGlucHV0IGxheW91dCIpOworCisgICAgICAgIHJlc3VsdCA9IG1EZXZpY2Ut
PkNyZWF0ZVZlcnRleFNoYWRlcihnX1ZTX1Bhc3N0aHJvdWdoLCBzaXplb2YoZ19WU19QYXNzdGhy
b3VnaCksIE5VTEwsICZtQ29weVZTKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKKyAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ29weVZTLCAiUmVuZGVyZXIxMSBjb3B5
IHRleHR1cmUgdmVydGV4IHNoYWRlciIpOworCisgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNy
ZWF0ZVBpeGVsU2hhZGVyKGdfUFNfUGFzc3Rocm91Z2hSR0JBLCBzaXplb2YoZ19QU19QYXNzdGhy
b3VnaFJHQkEpLCBOVUxMLCAmbUNvcHlSR0JBUFMpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOworICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5UkdCQVBTLCAiUmVu
ZGVyZXIxMSBjb3B5IHRleHR1cmUgUkdCQSBwaXhlbCBzaGFkZXIiKTsKKworICAgICAgICByZXN1
bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihnX1BTX1Bhc3N0aHJvdWdoUkdCLCBzaXpl
b2YoZ19QU19QYXNzdGhyb3VnaFJHQiksIE5VTEwsICZtQ29weVJHQlBTKTsKKyAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ29w
eVJHQlBTLCAiUmVuZGVyZXIxMSBjb3B5IHRleHR1cmUgUkdCIHBpeGVsIHNoYWRlciIpOworCisg
ICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdfUFNfUGFzc3Rocm91
Z2hMdW0sIHNpemVvZihnX1BTX1Bhc3N0aHJvdWdoTHVtKSwgTlVMTCwgJm1Db3B5THVtUFMpOwor
ICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICBkM2QxMTo6U2V0RGVi
dWdOYW1lKG1Db3B5THVtUFMsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSBsdW1pbmFuY2UgcGl4
ZWwgc2hhZGVyIik7CisKKyAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUGl4ZWxTaGFk
ZXIoZ19QU19QYXNzdGhyb3VnaEx1bUFscGhhLCBzaXplb2YoZ19QU19QYXNzdGhyb3VnaEx1bUFs
cGhhKSwgTlVMTCwgJm1Db3B5THVtQWxwaGFQUyk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQo
cmVzdWx0KSk7CisgICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNvcHlMdW1BbHBoYVBTLCAi
UmVuZGVyZXIxMSBjb3B5IHRleHR1cmUgbHVtaW5hbmNlIGFscGhhIHBpeGVsIHNoYWRlciIpOwor
CisgICAgICAgIG1Db3B5UmVzb3VyY2VzSW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIH0KKworICAg
IC8vIFZlcmlmeSB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmVhIHNpemVzCisgICAgaWYg
KHNvdXJjZUFyZWEueCA8IDAgfHwgc291cmNlQXJlYS54ICsgc291cmNlQXJlYS53aWR0aCA+IHN0
YXRpY19jYXN0PGludD4oc291cmNlV2lkdGgpIHx8CisgICAgICAgIHNvdXJjZUFyZWEueSA8IDAg
fHwgc291cmNlQXJlYS55ICsgc291cmNlQXJlYS5oZWlnaHQgPiBzdGF0aWNfY2FzdDxpbnQ+KHNv
dXJjZUhlaWdodCkgfHwKKyAgICAgICAgZGVzdEFyZWEueCA8IDAgfHwgZGVzdEFyZWEueCArIGRl
c3RBcmVhLndpZHRoID4gc3RhdGljX2Nhc3Q8aW50PihkZXN0V2lkdGgpIHx8CisgICAgICAgIGRl
c3RBcmVhLnkgPCAwIHx8IGRlc3RBcmVhLnkgKyBkZXN0QXJlYS5oZWlnaHQgPiBzdGF0aWNfY2Fz
dDxpbnQ+KGRlc3RIZWlnaHQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFLCBmYWxzZSk7CisgICAgfQorCisgICAgLy8gU2V0IHZlcnRpY2VzCisgICAg
RDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOworICAgIHJlc3VsdCA9IG1E
ZXZpY2VDb250ZXh0LT5NYXAobUNvcHlWQiwgMCwgRDNEMTFfTUFQX1dSSVRFX0RJU0NBUkQsIDAs
ICZtYXBwZWRSZXNvdXJjZSk7CisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAg
ICAgRVJSKCJGYWlsZWQgdG8gbWFwIHZlcnRleCBidWZmZXIgZm9yIHRleHR1cmUgY29weSwgSFJF
U1VMVDogMHglWC4iLCByZXN1bHQpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CisKKyAgICBkM2QxMTo6UG9zaXRpb25UZXhDb29yZFZl
cnRleCAqdmVydGljZXMgPSBzdGF0aWNfY2FzdDxkM2QxMTo6UG9zaXRpb25UZXhDb29yZFZlcnRl
eCo+KG1hcHBlZFJlc291cmNlLnBEYXRhKTsKKworICAgIC8vIENyZWF0ZSBhIHF1YWQgaW4gaG9t
b2dlbmVvdXMgY29vcmRpbmF0ZXMKKyAgICBmbG9hdCB4MSA9IChkZXN0QXJlYS54IC8gZmxvYXQo
ZGVzdFdpZHRoKSkgKiAyLjBmIC0gMS4wZjsKKyAgICBmbG9hdCB5MSA9ICgoZGVzdEhlaWdodCAt
IGRlc3RBcmVhLnkgLSBkZXN0QXJlYS5oZWlnaHQpIC8gZmxvYXQoZGVzdEhlaWdodCkpICogMi4w
ZiAtIDEuMGY7CisgICAgZmxvYXQgeDIgPSAoKGRlc3RBcmVhLnggKyBkZXN0QXJlYS53aWR0aCkg
LyBmbG9hdChkZXN0V2lkdGgpKSAqIDIuMGYgLSAxLjBmOworICAgIGZsb2F0IHkyID0gKChkZXN0
SGVpZ2h0IC0gZGVzdEFyZWEueSkgLyBmbG9hdChkZXN0SGVpZ2h0KSkgKiAyLjBmIC0gMS4wZjsK
KworICAgIGZsb2F0IHUxID0gc291cmNlQXJlYS54IC8gZmxvYXQoc291cmNlV2lkdGgpOworICAg
IGZsb2F0IHYxID0gc291cmNlQXJlYS55IC8gZmxvYXQoc291cmNlSGVpZ2h0KTsKKyAgICBmbG9h
dCB1MiA9IChzb3VyY2VBcmVhLnggKyBzb3VyY2VBcmVhLndpZHRoKSAvIGZsb2F0KHNvdXJjZVdp
ZHRoKTsKKyAgICBmbG9hdCB2MiA9IChzb3VyY2VBcmVhLnkgKyBzb3VyY2VBcmVhLmhlaWdodCkg
LyBmbG9hdChzb3VyY2VIZWlnaHQpOworCisgICAgZDNkMTE6OlNldFBvc2l0aW9uVGV4Q29vcmRW
ZXJ0ZXgoJnZlcnRpY2VzWzBdLCB4MSwgeTEsIHUxLCB2Mik7CisgICAgZDNkMTE6OlNldFBvc2l0
aW9uVGV4Q29vcmRWZXJ0ZXgoJnZlcnRpY2VzWzFdLCB4MSwgeTIsIHUxLCB2MSk7CisgICAgZDNk
MTE6OlNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgoJnZlcnRpY2VzWzJdLCB4MiwgeTEsIHUyLCB2
Mik7CisgICAgZDNkMTE6OlNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgoJnZlcnRpY2VzWzNdLCB4
MiwgeTIsIHUyLCB2MSk7CisKKyAgICBtRGV2aWNlQ29udGV4dC0+VW5tYXAobUNvcHlWQiwgMCk7
CisKKyAgICBzdGF0aWMgVUlOVCBzdHJpZGUgPSBzaXplb2YoZDNkMTE6OlBvc2l0aW9uVGV4Q29v
cmRWZXJ0ZXgpOworICAgIHN0YXRpYyBVSU5UIHN0YXJ0SWR4ID0gMDsKKyAgICBtRGV2aWNlQ29u
dGV4dC0+SUFTZXRWZXJ0ZXhCdWZmZXJzKDAsIDEsICZtQ29weVZCLCAmc3RyaWRlLCAmc3RhcnRJ
ZHgpOworCisgICAgLy8gQXBwbHkgc3RhdGUKKyAgICBtRGV2aWNlQ29udGV4dC0+T01TZXRCbGVu
ZFN0YXRlKE5VTEwsIE5VTEwsIDB4RkZGRkZGRik7CisgICAgbURldmljZUNvbnRleHQtPk9NU2V0
RGVwdGhTdGVuY2lsU3RhdGUoTlVMTCwgMHhGRkZGRkZGRik7CisgICAgbURldmljZUNvbnRleHQt
PlJTU2V0U3RhdGUoTlVMTCk7CisKKyAgICAvLyBBcHBseSBzaGFkZXJzCisgICAgbURldmljZUNv
bnRleHQtPklBU2V0SW5wdXRMYXlvdXQobUNvcHlJTCk7CisgICAgbURldmljZUNvbnRleHQtPklB
U2V0UHJpbWl0aXZlVG9wb2xvZ3koRDNEX1BSSU1JVElWRV9UT1BPTE9HWV9UUklBTkdMRVNUUklQ
KTsKKyAgICBtRGV2aWNlQ29udGV4dC0+VlNTZXRTaGFkZXIobUNvcHlWUywgTlVMTCwgMCk7CisK
KyAgICBJRDNEMTFQaXhlbFNoYWRlciAqcHMgPSBOVUxMOworICAgIHN3aXRjaChkZXN0Rm9ybWF0
KQorICAgIHsKKyAgICAgIGNhc2UgR0xfUkdCQTogICAgICAgICAgICBwcyA9IG1Db3B5UkdCQVBT
OyAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JHQjogICAgICAgICAgICAgcHMgPSBtQ29weVJH
QlBTOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9BTFBIQTogICAgICAgICAgIHBzID0gbUNv
cHlSR0JBUFM7ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6ICAgICAgICBwcyA9
IG1Db3B5UkdCQVBTOyAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRTogICAgICAg
cHMgPSBtQ29weUx1bVBTOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQ
SEE6IHBzID0gbUNvcHlMdW1BbHBoYVBTOyBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7ICBwcyA9IE5VTEw7ICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbURldmlj
ZUNvbnRleHQtPlBTU2V0U2hhZGVyKHBzLCBOVUxMLCAwKTsKKyAgICBtRGV2aWNlQ29udGV4dC0+
R1NTZXRTaGFkZXIoTlVMTCwgTlVMTCwgMCk7CisKKyAgICAvLyBVbnNldCB0aGUgY3VycmVudGx5
IGJvdW5kIHNoYWRlciByZXNvdXJjZSB0byBhdm9pZCBjb25mbGljdHMKKyAgICBzdGF0aWMgSUQz
RDExU2hhZGVyUmVzb3VyY2VWaWV3ICpjb25zdCBudWxsU1JWID0gTlVMTDsKKyAgICBtRGV2aWNl
Q29udGV4dC0+UFNTZXRTaGFkZXJSZXNvdXJjZXMoMCwgMSwgJm51bGxTUlYpOworCisgICAgLy8g
QXBwbHkgcmVuZGVyIHRhcmdldAorICAgIHNldE9uZVRpbWVSZW5kZXJUYXJnZXQoZGVzdCk7CisK
KyAgICAvLyBTZXQgdGhlIHZpZXdwb3J0CisgICAgRDNEMTFfVklFV1BPUlQgdmlld3BvcnQ7Cisg
ICAgdmlld3BvcnQuVG9wTGVmdFggPSAwOworICAgIHZpZXdwb3J0LlRvcExlZnRZID0gMDsKKyAg
ICB2aWV3cG9ydC5XaWR0aCA9IGRlc3RXaWR0aDsKKyAgICB2aWV3cG9ydC5IZWlnaHQgPSBkZXN0
SGVpZ2h0OworICAgIHZpZXdwb3J0Lk1pbkRlcHRoID0gMC4wZjsKKyAgICB2aWV3cG9ydC5NYXhE
ZXB0aCA9IDEuMGY7CisgICAgbURldmljZUNvbnRleHQtPlJTU2V0Vmlld3BvcnRzKDEsICZ2aWV3
cG9ydCk7CisKKyAgICAvLyBBcHBseSB0ZXh0dXJlcworICAgIG1EZXZpY2VDb250ZXh0LT5QU1Nl
dFNoYWRlclJlc291cmNlcygwLCAxLCAmc291cmNlKTsKKyAgICBtRGV2aWNlQ29udGV4dC0+UFNT
ZXRTYW1wbGVycygwLCAxLCAmbUNvcHlTYW1wbGVyKTsKKworICAgIC8vIERyYXcgdGhlIHF1YWQK
KyAgICBtRGV2aWNlQ29udGV4dC0+RHJhdyg0LCAwKTsKKworICAgIC8vIFVuYmluZCB0ZXh0dXJl
cyBhbmQgcmVuZGVyIHRhcmdldHMgYW5kIHZlcnRleCBidWZmZXIKKyAgICBtRGV2aWNlQ29udGV4
dC0+UFNTZXRTaGFkZXJSZXNvdXJjZXMoMCwgMSwgJm51bGxTUlYpOworCisgICAgdW5hcHBseVJl
bmRlclRhcmdldHMoKTsKKworICAgIFVJTlQgemVybyA9IDA7CisgICAgSUQzRDExQnVmZmVyICpj
b25zdCBudWxsQnVmZmVyID0gTlVMTDsKKyAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRWZXJ0ZXhC
dWZmZXJzKDAsIDEsICZudWxsQnVmZmVyLCAmemVybywgJnplcm8pOworCisgICAgbWFya0FsbFN0
YXRlRGlydHkoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFJlbmRlcmVyMTE6OnVu
YXBwbHlSZW5kZXJUYXJnZXRzKCkKK3sKKyAgICBzZXRPbmVUaW1lUmVuZGVyVGFyZ2V0KE5VTEwp
OworfQorCit2b2lkIFJlbmRlcmVyMTE6OnNldE9uZVRpbWVSZW5kZXJUYXJnZXQoSUQzRDExUmVu
ZGVyVGFyZ2V0VmlldyAqcmVuZGVyVGFyZ2V0VmlldykKK3sKKyAgICBJRDNEMTFSZW5kZXJUYXJn
ZXRWaWV3ICpydHZBcnJheVtnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSU10gPSB7
TlVMTH07CisKKyAgICBydHZBcnJheVswXSA9IHJlbmRlclRhcmdldFZpZXc7CisKKyAgICBtRGV2
aWNlQ29udGV4dC0+T01TZXRSZW5kZXJUYXJnZXRzKGdldE1heFJlbmRlclRhcmdldHMoKSwgcnR2
QXJyYXksIE5VTEwpOworCisgICAgLy8gRG8gbm90IHByZXNlcnZlIHRoZSBzZXJpYWwgZm9yIHRo
aXMgb25lLXRpbWUtdXNlIHJlbmRlciB0YXJnZXQKKyAgICBmb3IgKHVuc2lnbmVkIGludCBydElu
ZGV4ID0gMDsgcnRJbmRleCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTOyBy
dEluZGV4KyspCisgICAgeworICAgICAgICBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbHNbcnRJ
bmRleF0gPSAwOworICAgIH0KK30KKworUmVuZGVyVGFyZ2V0ICpSZW5kZXJlcjExOjpjcmVhdGVS
ZW5kZXJUYXJnZXQoU3dhcENoYWluICpzd2FwQ2hhaW4sIGJvb2wgZGVwdGgpCit7CisgICAgU3dh
cENoYWluMTEgKnN3YXBDaGFpbjExID0gU3dhcENoYWluMTE6Om1ha2VTd2FwQ2hhaW4xMShzd2Fw
Q2hhaW4pOworICAgIFJlbmRlclRhcmdldDExICpyZW5kZXJUYXJnZXQgPSBOVUxMOworCisgICAg
aWYgKGRlcHRoKQorICAgIHsKKyAgICAgICAgLy8gTm90ZTogZGVwdGggc3RlbmNpbCBtYXkgYmUg
TlVMTCBmb3IgMCBzaXplZCBzdXJmYWNlcworICAgICAgICByZW5kZXJUYXJnZXQgPSBuZXcgUmVu
ZGVyVGFyZ2V0MTEodGhpcywgc3dhcENoYWluMTEtPmdldERlcHRoU3RlbmNpbCgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldERlcHRo
U3RlbmNpbFRleHR1cmUoKSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN3YXBDaGFpbjExLT5nZXRXaWR0aCgpLCBzd2FwQ2hhaW4xMS0+Z2V0SGVpZ2h0
KCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBOb3RlOiByZW5kZXIgdGFy
Z2V0IG1heSBiZSBOVUxMIGZvciAwIHNpemVkIHN1cmZhY2VzCisgICAgICAgIHJlbmRlclRhcmdl
dCA9IG5ldyBSZW5kZXJUYXJnZXQxMSh0aGlzLCBzd2FwQ2hhaW4xMS0+Z2V0UmVuZGVyVGFyZ2V0
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwQ2hhaW4x
MS0+Z2V0T2Zmc2NyZWVuVGV4dHVyZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldFJlbmRlclRhcmdldFNoYWRlclJlc291cmNlKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwQ2hhaW4xMS0+
Z2V0V2lkdGgoKSwgc3dhcENoYWluMTEtPmdldEhlaWdodCgpKTsKKyAgICB9CisgICAgcmV0dXJu
IHJlbmRlclRhcmdldDsKK30KKworUmVuZGVyVGFyZ2V0ICpSZW5kZXJlcjExOjpjcmVhdGVSZW5k
ZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNh
bXBsZXMsIGJvb2wgZGVwdGgpCit7CisgICAgUmVuZGVyVGFyZ2V0MTEgKnJlbmRlclRhcmdldCA9
IG5ldyBSZW5kZXJUYXJnZXQxMSh0aGlzLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHNhbXBsZXMs
IGRlcHRoKTsKKyAgICByZXR1cm4gcmVuZGVyVGFyZ2V0OworfQorCitTaGFkZXJFeGVjdXRhYmxl
ICpSZW5kZXJlcjExOjpsb2FkRXhlY3V0YWJsZShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90
IGxlbmd0aCwgcng6OlNoYWRlclR5cGUgdHlwZSkKK3sKKyAgICBTaGFkZXJFeGVjdXRhYmxlMTEg
KmV4ZWN1dGFibGUgPSBOVUxMOworCisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNh
c2Ugcng6OlNIQURFUl9WRVJURVg6CisgICAgICAgIHsKKyAgICAgICAgICAgIElEM0QxMVZlcnRl
eFNoYWRlciAqdnNoYWRlciA9IE5VTEw7CisgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1E
ZXZpY2UtPkNyZWF0ZVZlcnRleFNoYWRlcihmdW5jdGlvbiwgbGVuZ3RoLCBOVUxMLCAmdnNoYWRl
cik7CisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAg
ICBpZiAodnNoYWRlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxl
ID0gbmV3IFNoYWRlckV4ZWN1dGFibGUxMShmdW5jdGlvbiwgbGVuZ3RoLCB2c2hhZGVyKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ugcng6OlNI
QURFUl9QSVhFTDoKKyAgICAgICAgeworICAgICAgICAgICAgSUQzRDExUGl4ZWxTaGFkZXIgKnBz
aGFkZXIgPSBOVUxMOworICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVh
dGVQaXhlbFNoYWRlcihmdW5jdGlvbiwgbGVuZ3RoLCBOVUxMLCAmcHNoYWRlcik7CisgICAgICAg
ICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAgICBpZiAocHNoYWRl
cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3IFNoYWRl
ckV4ZWN1dGFibGUxMShmdW5jdGlvbiwgbGVuZ3RoLCBwc2hhZGVyKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ugcng6OlNIQURFUl9HRU9NRVRS
WToKKyAgICAgICAgeworICAgICAgICAgICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmdzaGFkZXIg
PSBOVUxMOworICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVHZW9t
ZXRyeVNoYWRlcihmdW5jdGlvbiwgbGVuZ3RoLCBOVUxMLCAmZ3NoYWRlcik7CisgICAgICAgICAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAgICBpZiAoZ3NoYWRlcikK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3IFNoYWRlckV4
ZWN1dGFibGUxMShmdW5jdGlvbiwgbGVuZ3RoLCBnc2hhZGVyKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBleGVjdXRhYmxlOwor
fQorCitTaGFkZXJFeGVjdXRhYmxlICpSZW5kZXJlcjExOjpjb21waWxlVG9FeGVjdXRhYmxlKGds
OjpJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpzaGFkZXJITFNMLCByeDo6U2hhZGVyVHlw
ZSB0eXBlLCBEM0RXb3JrYXJvdW5kVHlwZSB3b3JrYXJvdW5kKQoreworICAgIGNvbnN0IGNoYXIg
KnByb2ZpbGUgPSBOVUxMOworCisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2Ug
cng6OlNIQURFUl9WRVJURVg6CisgICAgICAgIHByb2ZpbGUgPSAidnNfNF8wIjsKKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIHJ4OjpTSEFERVJfUElYRUw6CisgICAgICAgIHByb2ZpbGUgPSAi
cHNfNF8wIjsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIHJ4OjpTSEFERVJfR0VPTUVUUlk6
CisgICAgICAgIHByb2ZpbGUgPSAiZ3NfNF8wIjsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZh
dWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9
CisKKyAgICBJRDNEQmxvYiAqYmluYXJ5ID0gKElEM0RCbG9iKiljb21waWxlVG9CaW5hcnkoaW5m
b0xvZywgc2hhZGVySExTTCwgcHJvZmlsZSwgRDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUww
LCBmYWxzZSk7CisgICAgaWYgKCFiaW5hcnkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAg
U2hhZGVyRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9IGxvYWRFeGVjdXRhYmxlKChEV09SRCAqKWJp
bmFyeS0+R2V0QnVmZmVyUG9pbnRlcigpLCBiaW5hcnktPkdldEJ1ZmZlclNpemUoKSwgdHlwZSk7
CisgICAgYmluYXJ5LT5SZWxlYXNlKCk7CisKKyAgICByZXR1cm4gZXhlY3V0YWJsZTsKK30KKwor
VmVydGV4QnVmZmVyICpSZW5kZXJlcjExOjpjcmVhdGVWZXJ0ZXhCdWZmZXIoKQoreworICAgIHJl
dHVybiBuZXcgVmVydGV4QnVmZmVyMTEodGhpcyk7Cit9CisKK0luZGV4QnVmZmVyICpSZW5kZXJl
cjExOjpjcmVhdGVJbmRleEJ1ZmZlcigpCit7CisgICAgcmV0dXJuIG5ldyBJbmRleEJ1ZmZlcjEx
KHRoaXMpOworfQorCitCdWZmZXJTdG9yYWdlICpSZW5kZXJlcjExOjpjcmVhdGVCdWZmZXJTdG9y
YWdlKCkKK3sKKyAgICByZXR1cm4gbmV3IEJ1ZmZlclN0b3JhZ2UxMSh0aGlzKTsKK30KKworUXVl
cnlJbXBsICpSZW5kZXJlcjExOjpjcmVhdGVRdWVyeShHTGVudW0gdHlwZSkKK3sKKyAgICByZXR1
cm4gbmV3IFF1ZXJ5MTEodGhpcywgdHlwZSk7Cit9CisKK0ZlbmNlSW1wbCAqUmVuZGVyZXIxMTo6
Y3JlYXRlRmVuY2UoKQoreworICAgIHJldHVybiBuZXcgRmVuY2UxMSh0aGlzKTsKK30KKworYm9v
bCBSZW5kZXJlcjExOjpnZXRSZW5kZXJUYXJnZXRSZXNvdXJjZShnbDo6UmVuZGVyYnVmZmVyICpj
b2xvcmJ1ZmZlciwgdW5zaWduZWQgaW50ICpzdWJyZXNvdXJjZUluZGV4LCBJRDNEMTFUZXh0dXJl
MkQgKipyZXNvdXJjZSkKK3sKKyAgICBBU1NFUlQoY29sb3JidWZmZXIgIT0gTlVMTCk7CisKKyAg
ICBSZW5kZXJUYXJnZXQxMSAqcmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5k
ZXJUYXJnZXQxMShjb2xvcmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOworICAgIGlmIChyZW5k
ZXJUYXJnZXQpCisgICAgeworICAgICAgICAqc3VicmVzb3VyY2VJbmRleCA9IHJlbmRlclRhcmdl
dC0+Z2V0U3VicmVzb3VyY2VJbmRleCgpOworCisgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZp
ZXcgKmNvbG9yQnVmZmVyUlRWID0gcmVuZGVyVGFyZ2V0LT5nZXRSZW5kZXJUYXJnZXRWaWV3KCk7
CisgICAgICAgIGlmIChjb2xvckJ1ZmZlclJUVikKKyAgICAgICAgeworICAgICAgICAgICAgSUQz
RDExUmVzb3VyY2UgKnRleHR1cmVSZXNvdXJjZSA9IE5VTEw7CisgICAgICAgICAgICBjb2xvckJ1
ZmZlclJUVi0+R2V0UmVzb3VyY2UoJnRleHR1cmVSZXNvdXJjZSk7CisKKyAgICAgICAgICAgIGlm
ICh0ZXh0dXJlUmVzb3VyY2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSB0ZXh0dXJlUmVzb3VyY2UtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JRDNEMTFUZXh0
dXJlMkQsICh2b2lkKiopcmVzb3VyY2UpOworICAgICAgICAgICAgICAgIHRleHR1cmVSZXNvdXJj
ZS0+UmVsZWFzZSgpOworCisgICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIGV4dHJhY3QgdGhlIElEM0QxMVRleHR1
cmUyRCBmcm9tIHRoZSByZW5kZXIgdGFyZ2V0IHJlc291cmNlLCAiCisgICAgICAgICAgICAgICAg
ICAgICAgICAiSFJFU1VMVDogMHglWC4iLCByZXN1bHQpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBSZW5kZXJlcjExOjpibGl0UmVjdChnbDo6RnJhbWVidWZmZXIgKnJlYWRUYXJnZXQsIGNv
bnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRSZWN0LCBnbDo6RnJhbWVidWZmZXIgKmRyYXdUYXJnZXQs
IGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRyYXdSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERlcHRoU3RlbmNpbCkKK3sKKyAgICBp
ZiAoYmxpdFJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJl
YWRCdWZmZXIgPSByZWFkVGFyZ2V0LT5nZXRSZWFkQ29sb3JidWZmZXIoKTsKKworICAgICAgICBp
ZiAoIXJlYWRCdWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIHJl
dHJpZXZlIHRoZSByZWFkIGJ1ZmZlciBmcm9tIHRoZSByZWFkIGZyYW1lYnVmZmVyLiIpOworICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAg
ICAgIH0KKworICAgICAgICBSZW5kZXJUYXJnZXQgKnJlYWRSZW5kZXJUYXJnZXQgPSByZWFkQnVm
ZmVyLT5nZXRSZW5kZXJUYXJnZXQoKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBjb2xv
ckF0dGFjaG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFY
X0RSQVdfQlVGRkVSUzsgY29sb3JBdHRhY2htZW50KyspCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChkcmF3VGFyZ2V0LT5pc0VuYWJsZWRDb2xvckF0dGFjaG1lbnQoY29sb3JBdHRhY2htZW50
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpkcmF3
QnVmZmVyID0gZHJhd1RhcmdldC0+Z2V0Q29sb3JidWZmZXIoY29sb3JBdHRhY2htZW50KTsKKwor
ICAgICAgICAgICAgICAgIGlmICghZHJhd0J1ZmZlcikKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSBkcmF3IGJ1ZmZlciBm
cm9tIHRoZSBkcmF3IGZyYW1lYnVmZmVyLiIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBSZW5kZXJUYXJnZXQgKmRyYXdSZW5kZXJUYXJnZXQgPSBkcmF3QnVm
ZmVyLT5nZXRSZW5kZXJUYXJnZXQoKTsKKworICAgICAgICAgICAgICAgIGlmICghYmxpdFJlbmRl
cmJ1ZmZlclJlY3QocmVhZFJlY3QsIGRyYXdSZWN0LCByZWFkUmVuZGVyVGFyZ2V0LCBkcmF3UmVu
ZGVyVGFyZ2V0LCBmYWxzZSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKGJsaXREZXB0aFN0ZW5jaWwpCisgICAgeworICAgICAgICBn
bDo6UmVuZGVyYnVmZmVyICpyZWFkQnVmZmVyID0gcmVhZFRhcmdldC0+Z2V0RGVwdGhPclN0ZW5j
aWxidWZmZXIoKTsKKyAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqZHJhd0J1ZmZlciA9IGRyYXdU
YXJnZXQtPmdldERlcHRoT3JTdGVuY2lsYnVmZmVyKCk7CisKKyAgICAgICAgaWYgKCFyZWFkQnVm
ZmVyKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUg
cmVhZCBkZXB0aC1zdGVuY2lsIGJ1ZmZlciBmcm9tIHRoZSByZWFkIGZyYW1lYnVmZmVyLiIpOwor
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoIWRyYXdCdWZmZXIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSBkcmF3IGRlcHRoLXN0ZW5jaWwgYnVmZmVy
IGZyb20gdGhlIGRyYXcgZnJhbWVidWZmZXIuIik7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlbmRl
clRhcmdldCAqcmVhZFJlbmRlclRhcmdldCA9IHJlYWRCdWZmZXItPmdldERlcHRoU3RlbmNpbCgp
OworICAgICAgICBSZW5kZXJUYXJnZXQgKmRyYXdSZW5kZXJUYXJnZXQgPSBkcmF3QnVmZmVyLT5n
ZXREZXB0aFN0ZW5jaWwoKTsKKworICAgICAgICBpZiAoIWJsaXRSZW5kZXJidWZmZXJSZWN0KHJl
YWRSZWN0LCBkcmF3UmVjdCwgcmVhZFJlbmRlclRhcmdldCwgZHJhd1JlbmRlclRhcmdldCwgdHJ1
ZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFJlbmRlcmVyMTE6OnJlYWRQaXhlbHMo
Z2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2gsIGJvb2wgcGFja1JldmVy
c2VSb3dPcmRlciwgR0xpbnQgcGFja0FsaWdubWVudCwgdm9pZCogcGl4ZWxzKQoreworICAgIElE
M0QxMVRleHR1cmUyRCAqY29sb3JCdWZmZXJUZXh0dXJlID0gTlVMTDsKKyAgICB1bnNpZ25lZCBp
bnQgc3VicmVzb3VyY2VJbmRleCA9IDA7CisKKyAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1
ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRSZWFkQ29sb3JidWZmZXIoKTsKKworICAgIGlmIChjb2xv
cmJ1ZmZlciAmJiBnZXRSZW5kZXJUYXJnZXRSZXNvdXJjZShjb2xvcmJ1ZmZlciwgJnN1YnJlc291
cmNlSW5kZXgsICZjb2xvckJ1ZmZlclRleHR1cmUpKQorICAgIHsKKyAgICAgICAgZ2w6OlJlY3Rh
bmdsZSBhcmVhOworICAgICAgICBhcmVhLnggPSB4OworICAgICAgICBhcmVhLnkgPSB5OworICAg
ICAgICBhcmVhLndpZHRoID0gd2lkdGg7CisgICAgICAgIGFyZWEuaGVpZ2h0ID0gaGVpZ2h0Owor
CisgICAgICAgIHJlYWRUZXh0dXJlRGF0YShjb2xvckJ1ZmZlclRleHR1cmUsIHN1YnJlc291cmNl
SW5kZXgsIGFyZWEsIGNvbG9yYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKSwgZm9ybWF0LCB0eXBl
LCBvdXRwdXRQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tSZXZlcnNlUm93T3Jk
ZXIsIHBhY2tBbGlnbm1lbnQsIHBpeGVscyk7CisKKyAgICAgICAgY29sb3JCdWZmZXJUZXh0dXJl
LT5SZWxlYXNlKCk7CisgICAgICAgIGNvbG9yQnVmZmVyVGV4dHVyZSA9IE5VTEw7CisgICAgfQor
fQorCitJbWFnZSAqUmVuZGVyZXIxMTo6Y3JlYXRlSW1hZ2UoKQoreworICAgIHJldHVybiBuZXcg
SW1hZ2UxMSgpOworfQorCit2b2lkIFJlbmRlcmVyMTE6OmdlbmVyYXRlTWlwbWFwKEltYWdlICpk
ZXN0LCBJbWFnZSAqc3JjKQoreworICAgIEltYWdlMTEgKmRlc3QxMSA9IEltYWdlMTE6Om1ha2VJ
bWFnZTExKGRlc3QpOworICAgIEltYWdlMTEgKnNyYzExID0gSW1hZ2UxMTo6bWFrZUltYWdlMTEo
c3JjKTsKKyAgICBJbWFnZTExOjpnZW5lcmF0ZU1pcG1hcChkZXN0MTEsIHNyYzExKTsKK30KKwor
VGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyMTE6OmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoU3dhcENo
YWluICpzd2FwQ2hhaW4pCit7CisgICAgU3dhcENoYWluMTEgKnN3YXBDaGFpbjExID0gU3dhcENo
YWluMTE6Om1ha2VTd2FwQ2hhaW4xMShzd2FwQ2hhaW4pOworICAgIHJldHVybiBuZXcgVGV4dHVy
ZVN0b3JhZ2UxMV8yRCh0aGlzLCBzd2FwQ2hhaW4xMSk7Cit9CisKK1RleHR1cmVTdG9yYWdlICpS
ZW5kZXJlcjExOjpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEdMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTEx
XzJEKHRoaXMsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHVzYWdlLCBmb3JjZVJlbmRlcmFibGUs
IHdpZHRoLCBoZWlnaHQpOworfQorCitUZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXIxMTo6Y3JlYXRl
VGV4dHVyZVN0b3JhZ2VDdWJlKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xl
bnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpCit7CisgICAgcmV0dXJu
IG5ldyBUZXh0dXJlU3RvcmFnZTExX0N1YmUodGhpcywgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwg
dXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWdu
ZWQgaW50IGdldEZhc3RQaXhlbENvcHlTaXplKERYR0lfRk9STUFUIHNvdXJjZUZvcm1hdCwgR0xl
bnVtIHNvdXJjZUdMRm9ybWF0LCBHTGVudW0gZGVzdEZvcm1hdCwgR0xlbnVtIGRlc3RUeXBlKQor
eworICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gRFhHSV9GT1JNQVRfQThfVU5PUk0gJiYKKyAgICAg
ICAgZGVzdEZvcm1hdCAgID09IEdMX0FMUEhBICYmCisgICAgICAgIGRlc3RUeXBlICAgICA9PSBH
TF9VTlNJR05FRF9CWVRFKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGVs
c2UgaWYgKHNvdXJjZUZvcm1hdCAgID09IERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNICYmCisg
ICAgICAgICAgICAgc291cmNlR0xGb3JtYXQgPT0gR0xfUkdCQThfT0VTICYmCisgICAgICAgICAg
ICAgZGVzdEZvcm1hdCAgICAgPT0gR0xfUkdCQSAmJgorICAgICAgICAgICAgIGRlc3RUeXBlICAg
ICAgID09IEdMX1VOU0lHTkVEX0JZVEUpCisgICAgeworICAgICAgICByZXR1cm4gNDsKKyAgICB9
CisgICAgZWxzZSBpZiAoc291cmNlRm9ybWF0ID09IERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JN
ICYmCisgICAgICAgICAgICAgZGVzdEZvcm1hdCAgID09IEdMX0JHUkFfRVhUICYmCisgICAgICAg
ICAgICAgZGVzdFR5cGUgICAgID09IEdMX1VOU0lHTkVEX0JZVEUpCisgICAgeworICAgICAgICBy
ZXR1cm4gNDsKKyAgICB9CisgICAgZWxzZSBpZiAoc291cmNlRm9ybWF0ICAgPT0gRFhHSV9GT1JN
QVRfUjE2RzE2QjE2QTE2X0ZMT0FUICYmCisgICAgICAgICAgICAgc291cmNlR0xGb3JtYXQgPT0g
R0xfUkdCQTE2Rl9FWFQgJiYKKyAgICAgICAgICAgICBkZXN0Rm9ybWF0ICAgICA9PSBHTF9SR0JB
ICYmCisgICAgICAgICAgICAgZGVzdFR5cGUgICAgICAgPT0gR0xfSEFMRl9GTE9BVF9PRVMpCisg
ICAgeworICAgICAgICByZXR1cm4gODsKKyAgICB9CisgICAgZWxzZSBpZiAoc291cmNlRm9ybWF0
ID09IERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCAmJgorICAgICAgICAgICAgIGRlc3RGb3Jt
YXQgICA9PSBHTF9SR0IgJiYKKyAgICAgICAgICAgICBkZXN0VHlwZSAgICAgPT0gR0xfRkxPQVQp
CisgICAgeworICAgICAgICByZXR1cm4gMTI7CisgICAgfQorICAgIGVsc2UgaWYgKHNvdXJjZUZv
cm1hdCAgID09IERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCAmJgorICAgICAgICAgICAg
IHNvdXJjZUdMRm9ybWF0ID09IEdMX1JHQkEzMkZfRVhUICYmCisgICAgICAgICAgICAgZGVzdEZv
cm1hdCAgICAgPT0gR0xfUkdCQSAmJgorICAgICAgICAgICAgIGRlc3RUeXBlICAgICAgID09IEdM
X0ZMT0FUKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDE2OworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWFk
UGl4ZWxDb2xvcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBEWEdJX0ZPUk1BVCBmb3JtYXQs
IEdMZW51bSBnbEZvcm1hdCwgdW5zaWduZWQgaW50IHgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50IHksIGludCBpbnB1dFBpdGNoLCBnbDo6Q29sb3IgKm91
dENvbG9yKQoreworICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjhHOEI4QThfVU5PUk06CisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCByZ2JhID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4oZGF0YSArIDQg
KiB4ICsgeSAqIGlucHV0UGl0Y2gpOworICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAgKHJn
YmEgJiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBGRik7CisgICAgICAgICAgICBvdXRD
b2xvci0+Z3JlZW4gPSAocmdiYSAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAweDAwMDBGRjAwKTsK
KyAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gIChyZ2JhICYgMHgwMEZGMDAwMCkgKiAoMS4w
ZiAvIDB4MDBGRjAwMDApOworCisgICAgICAgICAgICBpZiAoZ2w6OkdldEFscGhhU2l6ZShnbEZv
cm1hdCkgPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dENvbG9yLT5hbHBo
YSA9IChyZ2JhICYgMHhGRjAwMDAwMCkgKiAoMS4wZiAvIDB4RkYwMDAwMDApOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91
dENvbG9yLT5hbHBoYSA9IDEuMGY7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQThfVU5PUk06CisgICAgICAgIHsKKyAg
ICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgIDAuMGY7CisgICAgICAgICAgICBvdXRDb2xvci0+
Z3JlZW4gPSAwLjBmOworICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAgMC4wZjsKKyAgICAg
ICAgICAgIG91dENvbG9yLT5hbHBoYSA9ICooZGF0YSArIHggKyB5ICogaW5wdXRQaXRjaCkgLyAy
NTUuMGY7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjMyRzMyQjMyQTMyX0ZMT0FUOgorICAgICAgICB7CisgICAgICAgICAgICBvdXRDb2xvci0+
cmVkID0gICAqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhICsgMTYgKiB4ICsg
eSAqIGlucHV0UGl0Y2gpICsgMCk7CisgICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAqKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhICsgMTYgKiB4ICsgeSAqIGlucHV0UGl0
Y2gpICsgMSk7CisgICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAqKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgZmxvYXQqPihkYXRhICsgMTYgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMik7CisK
KyAgICAgICAgICAgIGlmIChnbDo6R2V0QWxwaGFTaXplKGdsRm9ybWF0KSA+IDApCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gKihyZWludGVycHJldF9j
YXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDE2ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDMpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG91dENvbG9yLT5hbHBoYSA9IDEuMGY7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FU
OgorICAgICAgICB7CisgICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICAqKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhICsgMTIgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMCk7
CisgICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
ZmxvYXQqPihkYXRhICsgMTIgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMSk7CisgICAgICAgICAg
ICBvdXRDb2xvci0+Ymx1ZSA9ICAqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRh
ICsgMTIgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMik7CisgICAgICAgICAgICBvdXRDb2xvci0+
YWxwaGEgPSAxLjBmOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIERY
R0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9BVDoKKyAgICAgICAgeworICAgICAgICAgICAgb3V0
Q29sb3ItPnJlZCA9ICAgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKihyZWludGVycHJldF9jYXN0PGNv
bnN0IHVuc2lnbmVkIHNob3J0Kj4oZGF0YSArIDggKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMCkp
OworICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKihy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oZGF0YSArIDggKiB4ICsgeSAq
IGlucHV0UGl0Y2gpICsgMSkpOworICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAgZ2w6OmZs
b2F0MTZUb0Zsb2F0MzIoKihyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4o
ZGF0YSArIDggKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMikpOworCisgICAgICAgICAgICBpZiAo
Z2w6OkdldEFscGhhU2l6ZShnbEZvcm1hdCkgPiAwKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG91dENvbG9yLT5hbHBoYSA9IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCoocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyA4ICogeCArIHkgKiBpbnB1dFBp
dGNoKSArIDMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIERYR0lfRk9STUFUX0I4
RzhSOEE4X1VOT1JNOgorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmdyYSA9
ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KGRhdGEgKyA0ICogeCArIHkg
KiBpbnB1dFBpdGNoKTsKKyAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgIChiZ3JhICYgMHgw
MEZGMDAwMCkgKiAoMS4wZiAvIDB4MDBGRjAwMDApOworICAgICAgICAgICAgb3V0Q29sb3ItPmJs
dWUgPSAgKGJncmEgJiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBGRik7CisgICAgICAg
ICAgICBvdXRDb2xvci0+Z3JlZW4gPSAoYmdyYSAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAweDAw
MDBGRjAwKTsKKyAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IChiZ3JhICYgMHhGRjAwMDAw
MCkgKiAoMS4wZiAvIDB4RkYwMDAwMDApOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisg
ICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1VOT1JNOgorICAgICAgICB7CisgICAgICAgICAgICBv
dXRDb2xvci0+cmVkID0gICAqKGRhdGEgKyB4ICsgeSAqIGlucHV0UGl0Y2gpIC8gMjU1LjBmOwor
ICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gMC4wZjsKKyAgICAgICAgICAgIG91dENvbG9y
LT5ibHVlID0gIDAuMGY7CisgICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfVU5P
Uk06CisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnID0gKnJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgMiAqIHggKyB5ICogaW5wdXRQ
aXRjaCk7CisKKyAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgIChyZyAmIDB4RkYwMCkgKiAo
MS4wZiAvIDB4RkYwMCk7CisgICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAocmcgJiAweDAw
RkYpICogKDEuMGYgLyAweDAwRkYpOworICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAgMC4w
ZjsKKyAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IDEuMGY7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X0ZMT0FUOgorICAgICAgICB7
CisgICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyAyICogeCArIHkgKiBp
bnB1dFBpdGNoKSk7CisgICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAwLjBmOworICAgICAg
ICAgICAgb3V0Q29sb3ItPmJsdWUgPSAgMC4wZjsKKyAgICAgICAgICAgIG91dENvbG9yLT5hbHBo
YSA9IDEuMGY7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjE2RzE2X0ZMT0FUOgorICAgICAgICB7CisgICAgICAgICAgICBvdXRDb2xvci0+cmVk
ID0gICBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgc2hvcnQqPihkYXRhICsgNCAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAwKSk7CisgICAgICAg
ICAgICBvdXRDb2xvci0+Z3JlZW4gPSBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgNCAqIHggKyB5ICogaW5wdXRQaXRj
aCkgKyAxKSk7CisgICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAwLjBmOworICAgICAgICAg
ICAgb3V0Q29sb3ItPmFscGhhID0gMS4wZjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKwor
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgRVJSKCJSZWFkUGl4ZWxDb2xvciBub3QgaW1wbGVtZW50
ZWQgZm9yIERYR0kgZm9ybWF0ICV1LiIsIGZvcm1hdCk7CisgICAgICAgIFVOSU1QTEVNRU5URUQo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVQ
aXhlbENvbG9yKGNvbnN0IGdsOjpDb2xvciAmY29sb3IsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCB1bnNpZ25lZCBpbnQgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IHksIGludCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0RGF0YSkKK3sKKyAgICB1
bnNpZ25lZCBjaGFyKiBieXRlRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+
KG91dERhdGEpOworICAgIHVuc2lnbmVkIHNob3J0KiBzaG9ydERhdGEgPSByZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIHNob3J0Kj4ob3V0RGF0YSk7CisKKyAgICBzd2l0Y2ggKGZvcm1hdCkKKyAg
ICB7CisgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAg
eworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAgIGJ5dGVEYXRh
WzQgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
PigyNTUgKiBjb2xvci5yZWQgICArIDAuNWYpOworICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHgg
KyB5ICogb3V0cHV0UGl0Y2ggKyAxXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAq
IGNvbG9yLmdyZWVuICsgMC41Zik7CisgICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBv
dXRwdXRQaXRjaCArIDJdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3Iu
Ymx1ZSAgKyAwLjVmKTsKKyAgICAgICAgICAgIGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1dFBp
dGNoICsgM10gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5hbHBoYSAr
IDAuNWYpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgRVJSKCJXcml0ZVBpeGVsQ29sb3Igbm90IGltcGxlbWVudGVkIGZvciBmb3JtYXQgR0xf
UkdCQSBhbmQgdHlwZSAweCVYLiIsIHR5cGUpOworICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAg
IGNhc2UgR0xfQkdSQV9FWFQ6CisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgeworICAg
ICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAgIGJ5dGVEYXRhWzQgKiB4
ICsgeSAqIG91dHB1dFBpdGNoICsgMF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUg
KiBjb2xvci5ibHVlICArIDAuNWYpOworICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICog
b3V0cHV0UGl0Y2ggKyAxXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9y
LmdyZWVuICsgMC41Zik7CisgICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQ
aXRjaCArIDJdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IucmVkICAg
KyAwLjVmKTsKKyAgICAgICAgICAgIGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsg
M10gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5hbHBoYSArIDAuNWYp
OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JU
XzRfNF80XzRfUkVWX0VYVDoKKyAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgZGVza3Rv
cCBHTCBzcGVjIGluIHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVjdGFuZ2xlcyIgc2VjdGlvbgor
ICAgICAgICAgICAgLy8gdGhpcyB0eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOgorICAgICAgICAg
ICAgLy8gICAxNSAgIDE0ICAgMTMgICAxMiAgIDExICAgMTAgICAgOSAgICA4ICAgIDcgICAgNiAg
ICA1ICAgIDQgICAgMyAgICAyICAgIDEgICAgMAorICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisgICAgICAgICAgICAvLyB8ICAgICAgIDR0aCAgICAgICAgIHwgICAgICAg
IDNyZCAgICAgICAgIHwgICAgICAgIDJuZCAgICAgICAgfCAgIDFzdCBjb21wb25lbnQgICB8Cisg
ICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgIC8vIGlu
IHRoZSBjYXNlIG9mIEJHUkFfRVhULCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQsIEcgdGhlIHNl
Y29uZCwgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgc2hvcnREYXRhW3ggKyB5ICogb3V0cHV0
UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9CisgICAgICAgICAgICAgICAgKHN0YXRp
Y19jYXN0PHVuc2lnbmVkIHNob3J0PigxNSAqIGNvbG9yLmFscGhhICsgMC41ZikgPDwgMTIpIHwK
KyAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDE1ICogY29sb3Iu
cmVkICAgKyAwLjVmKSA8PCAgOCkgfAorICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNp
Z25lZCBzaG9ydD4oMTUgKiBjb2xvci5ncmVlbiArIDAuNWYpIDw8ICA0KSB8CisgICAgICAgICAg
ICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigxNSAqIGNvbG9yLmJsdWUgICsgMC41
ZikgPDwgIDApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVDoKKyAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0
aGUgZGVza3RvcCBHTCBzcGVjIGluIHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVjdGFuZ2xlcyIg
c2VjdGlvbgorICAgICAgICAgICAgLy8gdGhpcyB0eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOgor
ICAgICAgICAgICAgLy8gICAxNSAgIDE0ICAgMTMgICAxMiAgIDExICAgMTAgICAgOSAgICA4ICAg
IDcgICAgNiAgICA1ICAgIDQgICAgMyAgICAyICAgIDEgICAgMAorICAgICAgICAgICAgLy8gIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAvLyB8IDR0aCB8ICAgICAgICAgIDNy
ZCAgICAgICAgICAgfCAgICAgICAgICAgMm5kICAgICAgICAgIHwgICAgICAxc3QgY29tcG9uZW50
ICAgICB8CisgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAg
ICAgIC8vIGluIHRoZSBjYXNlIG9mIEJHUkFfRVhULCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQs
IEcgdGhlIHNlY29uZCwgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgc2hvcnREYXRhW3ggKyB5
ICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9CisgICAgICAgICAgICAg
ICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PiggICAgIGNvbG9yLmFscGhhICsgMC41Zikg
PDwgMTUpIHwKKyAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDMx
ICogY29sb3IucmVkICAgKyAwLjVmKSA8PCAxMCkgfAorICAgICAgICAgICAgICAgIChzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBzaG9ydD4oMzEgKiBjb2xvci5ncmVlbiArIDAuNWYpIDw8ICA1KSB8Cisg
ICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigzMSAqIGNvbG9yLmJs
dWUgICsgMC41ZikgPDwgIDApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgRVJSKCJXcml0ZVBpeGVsQ29sb3Igbm90IGltcGxlbWVudGVkIGZv
ciBmb3JtYXQgR0xfQkdSQV9FWFQgYW5kIHR5cGUgMHglWC4iLCB0eXBlKTsKKyAgICAgICAgICAg
IFVOSU1QTEVNRU5URUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworCisgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgICAgc3dpdGNoICh0eXBlKQorICAg
ICAgICB7CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICAgICAg
ICAgIHNob3J0RGF0YVt4ICsgeSAqIG91dHB1dFBpdGNoIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0
KV0gPQorICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMzEgKiBj
b2xvci5ibHVlICArIDAuNWYpIDw8ICAwKSB8CisgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0
PHVuc2lnbmVkIHNob3J0Pig2MyAqIGNvbG9yLmdyZWVuICsgMC41ZikgPDwgIDUpIHwKKyAgICAg
ICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDMxICogY29sb3IucmVkICAg
KyAwLjVmKSA8PCAxMSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgR0xf
VU5TSUdORURfQllURToKKyAgICAgICAgICAgIGJ5dGVEYXRhWzMgKiB4ICsgeSAqIG91dHB1dFBp
dGNoICsgMF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5yZWQgKyAg
IDAuNWYpOworICAgICAgICAgICAgYnl0ZURhdGFbMyAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAx
XSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLmdyZWVuICsgMC41Zik7
CisgICAgICAgICAgICBieXRlRGF0YVszICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDJdID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuYmx1ZSArICAwLjVmKTsKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEVSUigiV3Jp
dGVQaXhlbENvbG9yIG5vdCBpbXBsZW1lbnRlZCBmb3IgZm9ybWF0IEdMX1JHQiBhbmQgdHlwZSAw
eCVYLiIsIHR5cGUpOworICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAg
ICAgIEVSUigiV3JpdGVQaXhlbENvbG9yIG5vdCBpbXBsZW1lbnRlZCBmb3IgZm9ybWF0IDB4JVgu
IiwgZm9ybWF0KTsKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6cmVhZFRleHR1cmVEYXRhKElEM0QxMVRleHR1cmUy
RCAqdGV4dHVyZSwgdW5zaWduZWQgaW50IHN1YlJlc291cmNlLCBjb25zdCBnbDo6UmVjdGFuZ2xl
ICZhcmVhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHNvdXJjZUZv
cm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgb3V0cHV0UGl0Y2gsIGJv
b2wgcGFja1JldmVyc2VSb3dPcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMaW50IHBhY2tBbGlnbm1lbnQsIHZvaWQgKnBpeGVscykKK3sKKyAgICBEM0QxMV9URVhUVVJF
MkRfREVTQyB0ZXh0dXJlRGVzYzsKKyAgICB0ZXh0dXJlLT5HZXREZXNjKCZ0ZXh0dXJlRGVzYyk7
CisKKyAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBzdGFnaW5nRGVzYzsKKyAgICBzdGFnaW5nRGVz
Yy5XaWR0aCA9IGFyZWEud2lkdGg7CisgICAgc3RhZ2luZ0Rlc2MuSGVpZ2h0ID0gYXJlYS5oZWln
aHQ7CisgICAgc3RhZ2luZ0Rlc2MuTWlwTGV2ZWxzID0gMTsKKyAgICBzdGFnaW5nRGVzYy5BcnJh
eVNpemUgPSAxOworICAgIHN0YWdpbmdEZXNjLkZvcm1hdCA9IHRleHR1cmVEZXNjLkZvcm1hdDsK
KyAgICBzdGFnaW5nRGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gMTsKKyAgICBzdGFnaW5nRGVzYy5T
YW1wbGVEZXNjLlF1YWxpdHkgPSAwOworICAgIHN0YWdpbmdEZXNjLlVzYWdlID0gRDNEMTFfVVNB
R0VfU1RBR0lORzsKKyAgICBzdGFnaW5nRGVzYy5CaW5kRmxhZ3MgPSAwOworICAgIHN0YWdpbmdE
ZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19SRUFEOworICAgIHN0YWdpbmdE
ZXNjLk1pc2NGbGFncyA9IDA7CisKKyAgICBJRDNEMTFUZXh0dXJlMkQqIHN0YWdpbmdUZXggPSBO
VUxMOworICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZzdGFn
aW5nRGVzYywgTlVMTCwgJnN0YWdpbmdUZXgpOworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAg
ICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIGNyZWF0ZSBzdGFnaW5nIHRleHR1cmUgZm9yIHJl
YWRQaXhlbHMsIEhSRVNVTFQ6IDB4JVguIiwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIElEM0QxMVRleHR1cmUyRCogc3JjVGV4ID0gTlVMTDsKKyAgICBpZiAodGV4dHVy
ZURlc2MuU2FtcGxlRGVzYy5Db3VudCA+IDEpCisgICAgeworICAgICAgICBEM0QxMV9URVhUVVJF
MkRfREVTQyByZXNvbHZlRGVzYzsKKyAgICAgICAgcmVzb2x2ZURlc2MuV2lkdGggPSB0ZXh0dXJl
RGVzYy5XaWR0aDsKKyAgICAgICAgcmVzb2x2ZURlc2MuSGVpZ2h0ID0gdGV4dHVyZURlc2MuSGVp
Z2h0OworICAgICAgICByZXNvbHZlRGVzYy5NaXBMZXZlbHMgPSAxOworICAgICAgICByZXNvbHZl
RGVzYy5BcnJheVNpemUgPSAxOworICAgICAgICByZXNvbHZlRGVzYy5Gb3JtYXQgPSB0ZXh0dXJl
RGVzYy5Gb3JtYXQ7CisgICAgICAgIHJlc29sdmVEZXNjLlNhbXBsZURlc2MuQ291bnQgPSAxOwor
ICAgICAgICByZXNvbHZlRGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOworICAgICAgICByZXNv
bHZlRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7CisgICAgICAgIHJlc29sdmVEZXNj
LkJpbmRGbGFncyA9IDA7CisgICAgICAgIHJlc29sdmVEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsK
KyAgICAgICAgcmVzb2x2ZURlc2MuTWlzY0ZsYWdzID0gMDsKKworICAgICAgICByZXN1bHQgPSBt
RGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJnJlc29sdmVEZXNjLCBOVUxMLCAmc3JjVGV4KTsKKyAg
ICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkZh
aWxlZCB0byBjcmVhdGUgcmVzb2x2ZSB0ZXh0dXJlIGZvciByZWFkUGl4ZWxzLCBIUkVTVUxUOiAw
eCVYLiIsIHJlc3VsdCk7CisgICAgICAgICAgICBzdGFnaW5nVGV4LT5SZWxlYXNlKCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtRGV2aWNlQ29udGV4dC0+UmVz
b2x2ZVN1YnJlc291cmNlKHNyY1RleCwgMCwgdGV4dHVyZSwgc3ViUmVzb3VyY2UsIHRleHR1cmVE
ZXNjLkZvcm1hdCk7CisgICAgICAgIHN1YlJlc291cmNlID0gMDsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgc3JjVGV4ID0gdGV4dHVyZTsKKyAgICAgICAgc3JjVGV4LT5BZGRSZWYo
KTsKKyAgICB9CisKKyAgICBEM0QxMV9CT1ggc3JjQm94OworICAgIHNyY0JveC5sZWZ0ID0gYXJl
YS54OworICAgIHNyY0JveC5yaWdodCA9IGFyZWEueCArIGFyZWEud2lkdGg7CisgICAgc3JjQm94
LnRvcCA9IGFyZWEueTsKKyAgICBzcmNCb3guYm90dG9tID0gYXJlYS55ICsgYXJlYS5oZWlnaHQ7
CisgICAgc3JjQm94LmZyb250ID0gMDsKKyAgICBzcmNCb3guYmFjayA9IDE7CisKKyAgICBtRGV2
aWNlQ29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKHN0YWdpbmdUZXgsIDAsIDAsIDAsIDAs
IHNyY1RleCwgc3ViUmVzb3VyY2UsICZzcmNCb3gpOworCisgICAgc3JjVGV4LT5SZWxlYXNlKCk7
CisgICAgc3JjVGV4ID0gTlVMTDsKKworICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBw
aW5nOworICAgIG1EZXZpY2VDb250ZXh0LT5NYXAoc3RhZ2luZ1RleCwgMCwgRDNEMTFfTUFQX1JF
QUQsIDAsICZtYXBwaW5nKTsKKworICAgIHVuc2lnbmVkIGNoYXIgKnNvdXJjZTsKKyAgICBpbnQg
aW5wdXRQaXRjaDsKKyAgICBpZiAocGFja1JldmVyc2VSb3dPcmRlcikKKyAgICB7CisgICAgICAg
IHNvdXJjZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihtYXBwaW5nLnBEYXRhKSArIG1h
cHBpbmcuUm93UGl0Y2ggKiAoYXJlYS5oZWlnaHQgLSAxKTsKKyAgICAgICAgaW5wdXRQaXRjaCA9
IC1zdGF0aWNfY2FzdDxpbnQ+KG1hcHBpbmcuUm93UGl0Y2gpOworICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4obWFwcGlu
Zy5wRGF0YSk7CisgICAgICAgIGlucHV0UGl0Y2ggPSBzdGF0aWNfY2FzdDxpbnQ+KG1hcHBpbmcu
Um93UGl0Y2gpOworICAgIH0KKworICAgIHVuc2lnbmVkIGludCBmYXN0UGl4ZWxTaXplID0gZ2V0
RmFzdFBpeGVsQ29weVNpemUodGV4dHVyZURlc2MuRm9ybWF0LCBzb3VyY2VGb3JtYXQsIGZvcm1h
dCwgdHlwZSk7CisgICAgaWYgKGZhc3RQaXhlbFNpemUgIT0gMCkKKyAgICB7CisgICAgICAgIHVu
c2lnbmVkIGNoYXIgKmRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxzKTsK
KyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBhcmVhLmhlaWdodDsgaisrKQorICAgICAgICB7
CisgICAgICAgICAgICBtZW1jcHkoZGVzdCArIGogKiBvdXRwdXRQaXRjaCwgc291cmNlICsgaiAq
IGlucHV0UGl0Y2gsIGFyZWEud2lkdGggKiBmYXN0UGl4ZWxTaXplKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBlbHNlIGlmICh0ZXh0dXJlRGVzYy5Gb3JtYXQgPT0gRFhHSV9GT1JNQVRfQjhHOFI4
QThfVU5PUk0gJiYKKyAgICAgICAgICAgICBmb3JtYXQgPT0gR0xfUkdCQSAmJgorICAgICAgICAg
ICAgIHR5cGUgPT0gR0xfVU5TSUdORURfQllURSkKKyAgICB7CisgICAgICAgIC8vIEZhc3QgcGF0
aCBmb3Igc3dhcHBpbmcgcmVkIHdpdGggYmx1ZQorICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHBpeGVscyk7CisKKyAgICAgICAgZm9yIChp
bnQgaiA9IDA7IGogPCBhcmVhLmhlaWdodDsgaisrKQorICAgICAgICB7CisgICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGFyZWEud2lkdGg7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsg
NCAqIGkgKyBqICogaW5wdXRQaXRjaCk7CisgICAgICAgICAgICAgICAgKih1bnNpZ25lZCBpbnQq
KShkZXN0ICsgNCAqIGkgKyBqICogb3V0cHV0UGl0Y2gpID0KKyAgICAgICAgICAgICAgICAgICAg
KGFyZ2IgJiAweEZGMDBGRjAwKSB8ICAgICAgIC8vIEtlZXAgYWxwaGEgYW5kIGdyZWVuCisgICAg
ICAgICAgICAgICAgICAgIChhcmdiICYgMHgwMEZGMDAwMCkgPj4gMTYgfCAvLyBNb3ZlIHJlZCB0
byBibHVlCisgICAgICAgICAgICAgICAgICAgIChhcmdiICYgMHgwMDAwMDBGRikgPDwgMTY7ICAv
LyBNb3ZlIGJsdWUgdG8gcmVkCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgZ2w6OkNvbG9yIHBpeGVsQ29sb3I7CisgICAgICAgIGZvciAo
aW50IGogPSAwOyBqIDwgYXJlYS5oZWlnaHQ7IGorKykKKyAgICAgICAgeworICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBhcmVhLndpZHRoOyBpKyspCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmVhZFBpeGVsQ29sb3Ioc291cmNlLCB0ZXh0dXJlRGVzYy5Gb3JtYXQsIHNv
dXJjZUZvcm1hdCwgaSwgaiwgaW5wdXRQaXRjaCwgJnBpeGVsQ29sb3IpOworICAgICAgICAgICAg
ICAgIHdyaXRlUGl4ZWxDb2xvcihwaXhlbENvbG9yLCBmb3JtYXQsIHR5cGUsIGksIGosIG91dHB1
dFBpdGNoLCBwaXhlbHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
bURldmljZUNvbnRleHQtPlVubWFwKHN0YWdpbmdUZXgsIDApOworCisgICAgc3RhZ2luZ1RleC0+
UmVsZWFzZSgpOworICAgIHN0YWdpbmdUZXggPSBOVUxMOworfQorCitib29sIFJlbmRlcmVyMTE6
OmJsaXRSZW5kZXJidWZmZXJSZWN0KGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRSZWN0LCBjb25z
dCBnbDo6UmVjdGFuZ2xlICZkcmF3UmVjdCwgUmVuZGVyVGFyZ2V0ICpyZWFkUmVuZGVyVGFyZ2V0
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyVGFyZ2V0ICpk
cmF3UmVuZGVyVGFyZ2V0LCBib29sIHdob2xlQnVmZmVyQ29weSkKK3sKKyAgICBBU1NFUlQocmVh
ZFJlY3Qud2lkdGggPT0gZHJhd1JlY3Qud2lkdGggJiYgcmVhZFJlY3QuaGVpZ2h0ID09IGRyYXdS
ZWN0LmhlaWdodCk7CisKKyAgICBSZW5kZXJUYXJnZXQxMSAqZHJhd1JlbmRlclRhcmdldDExID0g
UmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShkcmF3UmVuZGVyVGFyZ2V0KTsKKyAg
ICBpZiAoIWRyYXdSZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byBy
ZXRyaWV2ZSB0aGUgZHJhdyByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGRyYXcgZnJhbWVidWZmZXIu
Iik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwor
ICAgIH0KKworICAgIElEM0QxMVRleHR1cmUyRCAqZHJhd1RleHR1cmUgPSBkcmF3UmVuZGVyVGFy
Z2V0MTEtPmdldFRleHR1cmUoKTsKKyAgICB1bnNpZ25lZCBpbnQgZHJhd1N1YnJlc291cmNlID0g
ZHJhd1JlbmRlclRhcmdldDExLT5nZXRTdWJyZXNvdXJjZUluZGV4KCk7CisKKyAgICBSZW5kZXJU
YXJnZXQxMSAqcmVhZFJlbmRlclRhcmdldDExID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJU
YXJnZXQxMShyZWFkUmVuZGVyVGFyZ2V0KTsKKyAgICBpZiAoIXJlYWRSZW5kZXJUYXJnZXQpCisg
ICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVhZCByZW5kZXIgdGFy
Z2V0IGZyb20gdGhlIHJlYWQgZnJhbWVidWZmZXIuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgIH0KKworICAgIElEM0QxMVRleHR1cmUy
RCAqcmVhZFRleHR1cmUgPSBOVUxMOworICAgIHVuc2lnbmVkIGludCByZWFkU3VicmVzb3VyY2Ug
PSAwOworICAgIGlmIChyZWFkUmVuZGVyVGFyZ2V0LT5nZXRTYW1wbGVzKCkgPiAwKQorICAgIHsK
KyAgICAgICAgcmVhZFRleHR1cmUgPSByZXNvbHZlTXVsdGlzYW1wbGVkVGV4dHVyZShyZWFkUmVu
ZGVyVGFyZ2V0MTEtPmdldFRleHR1cmUoKSwgcmVhZFJlbmRlclRhcmdldDExLT5nZXRTdWJyZXNv
dXJjZUluZGV4KCkpOworICAgICAgICByZWFkU3VicmVzb3VyY2UgPSAwOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICByZWFkVGV4dHVyZSA9IHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0
VGV4dHVyZSgpOworICAgICAgICByZWFkVGV4dHVyZS0+QWRkUmVmKCk7CisgICAgICAgIHJlYWRT
dWJyZXNvdXJjZSA9IHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0U3VicmVzb3VyY2VJbmRleCgpOwor
ICAgIH0KKworICAgIGlmICghcmVhZFRleHR1cmUpCisgICAgeworICAgICAgICBFUlIoIkZhaWxl
ZCB0byByZXRyaWV2ZSB0aGUgcmVhZCByZW5kZXIgdGFyZ2V0IHZpZXcgZnJvbSB0aGUgcmVhZCBy
ZW5kZXIgdGFyZ2V0LiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlksIGZhbHNlKTsKKyAgICB9CisKKyAgICBEM0QxMV9CT1ggcmVhZEJveDsKKyAgICByZWFkQm94
LmxlZnQgPSByZWFkUmVjdC54OworICAgIHJlYWRCb3gucmlnaHQgPSByZWFkUmVjdC54ICsgcmVh
ZFJlY3Qud2lkdGg7CisgICAgcmVhZEJveC50b3AgPSByZWFkUmVjdC55OworICAgIHJlYWRCb3gu
Ym90dG9tID0gcmVhZFJlY3QueSArIHJlYWRSZWN0LmhlaWdodDsKKyAgICByZWFkQm94LmZyb250
ID0gMDsKKyAgICByZWFkQm94LmJhY2sgPSAxOworCisgICAgLy8gRDNEMTEgbmVlZHMgZGVwdGgt
c3RlbmNpbCBDb3B5U3VicmVzb3VyY2VSZWdpb25zIHRvIGhhdmUgYSBOVUxMIHBTcmNCb3gKKyAg
ICAvLyBXZSBhbHNvIHJlcXVpcmUgY29tcGxldGUgZnJhbWVidWZmZXIgY29waWVzIGZvciBkZXB0
aC1zdGVuY2lsIGJsaXQuCisgICAgRDNEMTFfQk9YICpwU3JjQm94ID0gd2hvbGVCdWZmZXJDb3B5
ID8gTlVMTCA6ICZyZWFkQm94OworCisgICAgbURldmljZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJj
ZVJlZ2lvbihkcmF3VGV4dHVyZSwgZHJhd1N1YnJlc291cmNlLCBkcmF3UmVjdC54LCBkcmF3UmVj
dC55LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZFRl
eHR1cmUsIHJlYWRTdWJyZXNvdXJjZSwgcFNyY0JveCk7CisKKyAgICBTYWZlUmVsZWFzZShyZWFk
VGV4dHVyZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworSUQzRDExVGV4dHVyZTJEICpSZW5k
ZXJlcjExOjpyZXNvbHZlTXVsdGlzYW1wbGVkVGV4dHVyZShJRDNEMTFUZXh0dXJlMkQgKnNvdXJj
ZSwgdW5zaWduZWQgaW50IHN1YnJlc291cmNlKQoreworICAgIEQzRDExX1RFWFRVUkUyRF9ERVND
IHRleHR1cmVEZXNjOworICAgIHNvdXJjZS0+R2V0RGVzYygmdGV4dHVyZURlc2MpOworCisgICAg
aWYgKHRleHR1cmVEZXNjLlNhbXBsZURlc2MuQ291bnQgPiAxKQorICAgIHsKKyAgICAgICAgRDNE
MTFfVEVYVFVSRTJEX0RFU0MgcmVzb2x2ZURlc2M7CisgICAgICAgIHJlc29sdmVEZXNjLldpZHRo
ID0gdGV4dHVyZURlc2MuV2lkdGg7CisgICAgICAgIHJlc29sdmVEZXNjLkhlaWdodCA9IHRleHR1
cmVEZXNjLkhlaWdodDsKKyAgICAgICAgcmVzb2x2ZURlc2MuTWlwTGV2ZWxzID0gMTsKKyAgICAg
ICAgcmVzb2x2ZURlc2MuQXJyYXlTaXplID0gMTsKKyAgICAgICAgcmVzb2x2ZURlc2MuRm9ybWF0
ID0gdGV4dHVyZURlc2MuRm9ybWF0OworICAgICAgICByZXNvbHZlRGVzYy5TYW1wbGVEZXNjLkNv
dW50ID0gMTsKKyAgICAgICAgcmVzb2x2ZURlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKKyAg
ICAgICAgcmVzb2x2ZURlc2MuVXNhZ2UgPSB0ZXh0dXJlRGVzYy5Vc2FnZTsKKyAgICAgICAgcmVz
b2x2ZURlc2MuQmluZEZsYWdzID0gdGV4dHVyZURlc2MuQmluZEZsYWdzOworICAgICAgICByZXNv
bHZlRGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7CisgICAgICAgIHJlc29sdmVEZXNjLk1pc2NGbGFn
cyA9IDA7CisKKyAgICAgICAgSUQzRDExVGV4dHVyZTJEICpyZXNvbHZlVGV4dHVyZSA9IE5VTEw7
CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZyZXNv
bHZlRGVzYywgTlVMTCwgJnJlc29sdmVUZXh0dXJlKTsKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1
bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBjcmVhdGUgYSBtdWx0
aXNhbXBsZSByZXNvbHZlIHRleHR1cmUsIEhSRVNVTFQ6IDB4JVguIiwgcmVzdWx0KTsKKyAgICAg
ICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgbURldmljZUNvbnRleHQt
PlJlc29sdmVTdWJyZXNvdXJjZShyZXNvbHZlVGV4dHVyZSwgMCwgc291cmNlLCBzdWJyZXNvdXJj
ZSwgdGV4dHVyZURlc2MuRm9ybWF0KTsKKyAgICAgICAgcmV0dXJuIHJlc29sdmVUZXh0dXJlOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzb3VyY2UtPkFkZFJlZigpOworICAgICAg
ICByZXR1cm4gc291cmNlOworICAgIH0KK30KKworYm9vbCBSZW5kZXJlcjExOjpnZXRMVUlEKExV
SUQgKmFkYXB0ZXJMdWlkKSBjb25zdAoreworICAgIGFkYXB0ZXJMdWlkLT5IaWdoUGFydCA9IDA7
CisgICAgYWRhcHRlckx1aWQtPkxvd1BhcnQgPSAwOworCisgICAgaWYgKCFtRHhnaUFkYXB0ZXIp
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgRFhHSV9BREFQVEVS
X0RFU0MgYWRhcHRlckRlc2M7CisgICAgaWYgKEZBSUxFRChtRHhnaUFkYXB0ZXItPkdldERlc2Mo
JmFkYXB0ZXJEZXNjKSkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgKmFkYXB0ZXJMdWlkID0gYWRhcHRlckRlc2MuQWRhcHRlckx1aWQ7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyZXIxMS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MWI2NzYwYjkxNzkyOTVjNGNkN2UxMmJkODk1ZDkzODMyODM4Y2JkOAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
UmVuZGVyZXIxMS5oCkBAIC0wLDAgKzEsMzU4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEy
LTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBS
ZW5kZXJlcjExLmg6IERlZmluZXMgYSBiYWNrLWVuZCBzcGVjaWZpYyBjbGFzcyBmb3IgdGhlIEQz
RDExIHJlbmRlcmVyLgorCisjaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjExX0hf
CisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjExX0hfCisKKyNpbmNsdWRlICJj
b21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvUmVuZGVyZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVu
ZGVyU3RhdGVDYWNoZS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbnB1
dExheW91dENhY2hlLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdl
dC5oIgorCituYW1lc3BhY2UgZ2wKK3sKK2NsYXNzIFJlbmRlcmJ1ZmZlcjsKK30KKworbmFtZXNw
YWNlIHJ4Cit7CisKK2NsYXNzIFZlcnRleERhdGFNYW5hZ2VyOworY2xhc3MgSW5kZXhEYXRhTWFu
YWdlcjsKK2NsYXNzIFN0cmVhbWluZ0luZGV4QnVmZmVySW50ZXJmYWNlOworCitlbnVtCit7Cisg
ICAgTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlNfRDNEMTEgPSAxMDI0LAorICAgIE1BWF9GUkFH
TUVOVF9VTklGT1JNX1ZFQ1RPUlNfRDNEMTEgPSAxMDI0Cit9OworCitjbGFzcyBSZW5kZXJlcjEx
IDogcHVibGljIFJlbmRlcmVyCit7CisgIHB1YmxpYzoKKyAgICBSZW5kZXJlcjExKGVnbDo6RGlz
cGxheSAqZGlzcGxheSwgSERDIGhEYyk7CisgICAgdmlydHVhbCB+UmVuZGVyZXIxMSgpOworCisg
ICAgc3RhdGljIFJlbmRlcmVyMTEgKm1ha2VSZW5kZXJlcjExKFJlbmRlcmVyICpyZW5kZXJlcik7
CisKKyAgICB2aXJ0dWFsIEVHTGludCBpbml0aWFsaXplKCk7CisgICAgdmlydHVhbCBib29sIHJl
c2V0RGV2aWNlKCk7CisKKyAgICB2aXJ0dWFsIGludCBnZW5lcmF0ZUNvbmZpZ3MoQ29uZmlnRGVz
YyAqKmNvbmZpZ0Rlc2NMaXN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQ29uZmlncyhDb25m
aWdEZXNjICpjb25maWdEZXNjTGlzdCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3luYyhib29sIGJs
b2NrKTsKKworICAgIHZpcnR1YWwgU3dhcENoYWluICpjcmVhdGVTd2FwQ2hhaW4oSFdORCB3aW5k
b3csIEhBTkRMRSBzaGFyZUhhbmRsZSwgR0xlbnVtIGJhY2tCdWZmZXJGb3JtYXQsIEdMZW51bSBk
ZXB0aEJ1ZmZlckZvcm1hdCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2FtcGxlclN0YXRlKGds
OjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNh
bXBsZXIpOworICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBl
LCBpbnQgaW5kZXgsIGdsOjpUZXh0dXJlICp0ZXh0dXJlKTsKKworICAgIHZpcnR1YWwgdm9pZCBz
ZXRSYXN0ZXJpemVyU3RhdGUoY29uc3QgZ2w6OlJhc3Rlcml6ZXJTdGF0ZSAmcmFzdGVyU3RhdGUp
OworICAgIHZpcnR1YWwgdm9pZCBzZXRCbGVuZFN0YXRlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIsIGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRlLCBjb25zdCBnbDo6Q29sb3Ig
JmJsZW5kQ29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
IHNhbXBsZU1hc2spOworICAgIHZpcnR1YWwgdm9pZCBzZXREZXB0aFN0ZW5jaWxTdGF0ZShjb25z
dCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmRlcHRoU3RlbmNpbFN0YXRlLCBpbnQgc3RlbmNpbFJl
ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0ZW5jaWxCYWNr
UmVmLCBib29sIGZyb250RmFjZUNDVyk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Npc3NvclJl
Y3RhbmdsZShjb25zdCBnbDo6UmVjdGFuZ2xlICZzY2lzc29yLCBib29sIGVuYWJsZWQpOworICAg
IHZpcnR1YWwgYm9vbCBzZXRWaWV3cG9ydChjb25zdCBnbDo6UmVjdGFuZ2xlICZ2aWV3cG9ydCwg
ZmxvYXQgek5lYXIsIGZsb2F0IHpGYXIsIEdMZW51bSBkcmF3TW9kZSwgR0xlbnVtIGZyb250RmFj
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpZ25vcmVWaWV3cG9ydCk7CisK
KyAgICB2aXJ0dWFsIGJvb2wgYXBwbHlQcmltaXRpdmVUeXBlKEdMZW51bSBtb2RlLCBHTHNpemVp
IGNvdW50KTsKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZW5kZXJUYXJnZXQoZ2w6OkZyYW1lYnVm
ZmVyICpmcmFtZUJ1ZmZlcik7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5U2hhZGVycyhnbDo6UHJv
Z3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSk7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5VW5pZm9y
bXMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGdsOjpVbmlmb3JtQXJyYXkgKnVu
aWZvcm1BcnJheSk7CisgICAgdmlydHVhbCBHTGVudW0gYXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0
cmlidXRlc1tdLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMp
OworICAgIHZpcnR1YWwgR0xlbnVtIGFwcGx5SW5kZXhCdWZmZXIoY29uc3QgR0x2b2lkICppbmRp
Y2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIEdMc2l6ZWkgY291bnQsIEdMZW51
bSBtb2RlLCBHTGVudW0gdHlwZSwgVHJhbnNsYXRlZEluZGV4RGF0YSAqaW5kZXhJbmZvKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBH
THNpemVpIGluc3RhbmNlcyk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdFbGVtZW50cyhHTGVudW0g
bW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywg
Z2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyLCBjb25zdCBUcmFuc2xhdGVkSW5kZXhEYXRh
ICZpbmRleEluZm8sIEdMc2l6ZWkgaW5zdGFuY2VzKTsKKworICAgIHZpcnR1YWwgdm9pZCBjbGVh
cihjb25zdCBnbDo6Q2xlYXJQYXJhbWV0ZXJzICZjbGVhclBhcmFtcywgZ2w6OkZyYW1lYnVmZmVy
ICpmcmFtZUJ1ZmZlcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0FsbFN0YXRlRGlydHkoKTsK
KworICAgIC8vIGxvc3QgZGV2aWNlCisgICAgdm9pZCBub3RpZnlEZXZpY2VMb3N0KCk7CisgICAg
dmlydHVhbCBib29sIGlzRGV2aWNlTG9zdCgpOworICAgIHZpcnR1YWwgYm9vbCB0ZXN0RGV2aWNl
TG9zdChib29sIG5vdGlmeSk7CisgICAgdmlydHVhbCBib29sIHRlc3REZXZpY2VSZXNldHRhYmxl
KCk7CisKKyAgICAvLyBSZW5kZXJlciBjYXBhYmlsaXRpZXMKKyAgICB2aXJ0dWFsIERXT1JEIGdl
dEFkYXB0ZXJWZW5kb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIGdldFJlbmRl
cmVyRGVzY3JpcHRpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdVSUQgZ2V0QWRhcHRlcklkZW50
aWZpZXIoKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBnZXRCR1JBVGV4dHVyZVN1cHBvcnQo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUMVRleHR1cmVTdXBwb3J0KCk7CisgICAg
dmlydHVhbCBib29sIGdldERYVDNUZXh0dXJlU3VwcG9ydCgpOworICAgIHZpcnR1YWwgYm9vbCBn
ZXREWFQ1VGV4dHVyZVN1cHBvcnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RXZlbnRRdWVyeVN1
cHBvcnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJvb2wg
KmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSk7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0
MTZUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpOworICAg
IHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpOworICAgIHZpcnR1YWwg
Ym9vbCBnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCk7CisgICAgdmlydHVhbCB1bnNp
Z25lZCBpbnQgZ2V0TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHVuc2lnbmVkIGludCBnZXRNYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3Q7
CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVzZXJ2ZWRWZXJ0ZXhVbmlmb3JtVmVjdG9y
cygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlc2VydmVkRnJhZ21lbnRV
bmlmb3JtVmVjdG9ycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFZl
cnRleFVuaWZvcm1WZWN0b3JzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0
TWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQg
aW50IGdldE1heFZhcnlpbmdWZWN0b3JzKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldE5v
blBvd2VyMlRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldERlcHRo
VGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T2NjbHVzaW9uUXVl
cnlTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEluc3RhbmNpbmdTdXBwb3J0
KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5U3Vw
cG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgZ2V0VGV4dHVyZU1heEFuaXNvdHJvcHko
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0U2hhcmVIYW5kbGVTdXBwb3J0KCkgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIGdldERlcml2YXRpdmVJbnN0cnVjdGlvblN1cHBvcnQoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0UG9zdFN1YkJ1ZmZlclN1cHBvcnQoKSBjb25zdDsKKwor
ICAgIHZpcnR1YWwgaW50IGdldE1ham9yU2hhZGVyTW9kZWwoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGZsb2F0IGdldE1heFBvaW50U2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldE1heFZp
ZXdwb3J0RGltZW5zaW9uKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZVdp
ZHRoKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZUhlaWdodCgpIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCBnZXQzMkJpdEluZGV4U3VwcG9ydCgpIGNvbnN0OworICAgIHZp
cnR1YWwgaW50IGdldE1pblN3YXBJbnRlcnZhbCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdl
dE1heFN3YXBJbnRlcnZhbCgpIGNvbnN0OworCisgICAgdmlydHVhbCBHTHNpemVpIGdldE1heFN1
cHBvcnRlZFNhbXBsZXMoKSBjb25zdDsKKyAgICBpbnQgZ2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBs
ZXMoRFhHSV9GT1JNQVQgZm9ybWF0LCB1bnNpZ25lZCBpbnQgcmVxdWVzdGVkKSBjb25zdDsKKwor
ICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFJlbmRlclRhcmdldHMoKSBjb25zdDsKKwor
ICAgIC8vIFBpeGVsIG9wZXJhdGlvbnMKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVyVGFy
Z2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlMkQgKnNvdXJjZSk7CisgICAgdmlydHVhbCBib29sIGNvcHlUb1JlbmRlclRhcmdldChUZXh0
dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3Vi
ZSAqc291cmNlKTsKKworICAgIHZpcnR1YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVy
ICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRl
c3RGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBHTGludCBsZXZl
bCk7CisgICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVm
ZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgR0xlbnVtIHRhcmdldCwgR0xp
bnQgbGV2ZWwpOworCisgICAgYm9vbCBjb3B5VGV4dHVyZShJRDNEMTFTaGFkZXJSZXNvdXJjZVZp
ZXcgKnNvdXJjZSwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlQXJlYSwgdW5zaWduZWQgaW50
IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LAorICAgICAgICAgICAgICAg
ICAgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZGVzdCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAm
ZGVzdEFyZWEsIHVuc2lnbmVkIGludCBkZXN0V2lkdGgsIHVuc2lnbmVkIGludCBkZXN0SGVpZ2h0
LCBHTGVudW0gZGVzdEZvcm1hdCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgYmxpdFJlY3QoZ2w6OkZy
YW1lYnVmZmVyICpyZWFkVGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFkUmVjdCwgZ2w6
OkZyYW1lYnVmZmVyICpkcmF3VGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkcmF3UmVjdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0LCBib29sIGJs
aXREZXB0aFN0ZW5jaWwpOworICAgIHZpcnR1YWwgdm9pZCByZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1
ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTHNpemVpIG91dHB1dFBpdGNoLCBib29sIHBhY2tSZXZlcnNlUm93T3JkZXIs
IEdMaW50IHBhY2tBbGlnbm1lbnQsIHZvaWQqIHBpeGVscyk7CisKKyAgICAvLyBSZW5kZXJUYXJn
ZXQgY3JlYXRpb24KKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqY3JlYXRlUmVuZGVyVGFyZ2V0
KFN3YXBDaGFpbiAqc3dhcENoYWluLCBib29sIGRlcHRoKTsKKyAgICB2aXJ0dWFsIFJlbmRlclRh
cmdldCAqY3JlYXRlUmVuZGVyVGFyZ2V0KGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xlbnVtIGZv
cm1hdCwgR0xzaXplaSBzYW1wbGVzLCBib29sIGRlcHRoKTsKKworICAgIC8vIFNoYWRlciBvcGVy
YXRpb25zCisgICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpsb2FkRXhlY3V0YWJsZShjb25z
dCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgcng6OlNoYWRlclR5cGUgdHlwZSk7Cisg
ICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpjb21waWxlVG9FeGVjdXRhYmxlKGdsOjpJbmZv
TG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpzaGFkZXJITFNMLCByeDo6U2hhZGVyVHlwZSB0eXBl
LCBEM0RXb3JrYXJvdW5kVHlwZSB3b3JrYXJvdW5kKTsKKworICAgIC8vIEltYWdlIG9wZXJhdGlv
bnMKKyAgICB2aXJ0dWFsIEltYWdlICpjcmVhdGVJbWFnZSgpOworICAgIHZpcnR1YWwgdm9pZCBn
ZW5lcmF0ZU1pcG1hcChJbWFnZSAqZGVzdCwgSW1hZ2UgKnNvdXJjZSk7CisgICAgdmlydHVhbCBU
ZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChTd2FwQ2hhaW4gKnN3YXBDaGFp
bik7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChp
bnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3Jj
ZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0dWFs
IFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUoaW50IGxldmVscywgR0xl
bnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBp
bnQgc2l6ZSk7CisKKyAgICAvLyBCdWZmZXIgY3JlYXRpb24KKyAgICB2aXJ0dWFsIFZlcnRleEJ1
ZmZlciAqY3JlYXRlVmVydGV4QnVmZmVyKCk7CisgICAgdmlydHVhbCBJbmRleEJ1ZmZlciAqY3Jl
YXRlSW5kZXhCdWZmZXIoKTsKKyAgICB2aXJ0dWFsIEJ1ZmZlclN0b3JhZ2UgKmNyZWF0ZUJ1ZmZl
clN0b3JhZ2UoKTsKKworICAgIC8vIFF1ZXJ5IGFuZCBGZW5jZSBjcmVhdGlvbgorICAgIHZpcnR1
YWwgUXVlcnlJbXBsICpjcmVhdGVRdWVyeShHTGVudW0gdHlwZSk7CisgICAgdmlydHVhbCBGZW5j
ZUltcGwgKmNyZWF0ZUZlbmNlKCk7CisKKyAgICAvLyBEM0QxMS1yZW5kZXJlciBzcGVjaWZpYyBt
ZXRob2RzCisgICAgSUQzRDExRGV2aWNlICpnZXREZXZpY2UoKSB7IHJldHVybiBtRGV2aWNlOyB9
CisgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqZ2V0RGV2aWNlQ29udGV4dCgpIHsgcmV0dXJuIG1E
ZXZpY2VDb250ZXh0OyB9OworICAgIElEWEdJRmFjdG9yeSAqZ2V0RHhnaUZhY3RvcnkoKSB7IHJl
dHVybiBtRHhnaUZhY3Rvcnk7IH07CisKKyAgICBib29sIGdldFJlbmRlclRhcmdldFJlc291cmNl
KGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyLCB1bnNpZ25lZCBpbnQgKnN1YnJlc291cmNl
SW5kZXgsIElEM0QxMVRleHR1cmUyRCAqKnJlc291cmNlKTsKKyAgICB2b2lkIHVuYXBwbHlSZW5k
ZXJUYXJnZXRzKCk7CisgICAgdm9pZCBzZXRPbmVUaW1lUmVuZGVyVGFyZ2V0KElEM0QxMVJlbmRl
clRhcmdldFZpZXcgKnJlbmRlclRhcmdldFZpZXcpOworCisgICAgdmlydHVhbCBib29sIGdldExV
SUQoTFVJRCAqYWRhcHRlckx1aWQpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1df
Q09QWV9BTkRfQVNTSUdOKFJlbmRlcmVyMTEpOworCisgICAgdm9pZCBkcmF3TGluZUxvb3AoR0xz
aXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgaW50IG1pbklu
ZGV4LCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIpOworICAgIHZvaWQgZHJhd1RyaWFu
Z2xlRmFuKEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMs
IGludCBtaW5JbmRleCwgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyLCBpbnQgaW5zdGFu
Y2VzKTsKKworICAgIHZvaWQgcmVhZFRleHR1cmVEYXRhKElEM0QxMVRleHR1cmUyRCAqdGV4dHVy
ZSwgdW5zaWduZWQgaW50IHN1YlJlc291cmNlLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZhcmVhLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBzb3VyY2VGb3JtYXQsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBHTHNpemVpIG91dHB1dFBpdGNoLCBib29sIHBhY2tSZXZlcnNlUm93
T3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgcGFja0FsaWdubWVudCwgdm9p
ZCAqcGl4ZWxzKTsKKworICAgIHZvaWQgbWFza2VkQ2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyYW1l
dGVycyAmY2xlYXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpOworICAgIHJ4
OjpSYW5nZSBnZXRWaWV3cG9ydEJvdW5kcygpIGNvbnN0OworCisgICAgYm9vbCBibGl0UmVuZGVy
YnVmZmVyUmVjdChjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFkUmVjdCwgY29uc3QgZ2w6OlJlY3Rh
bmdsZSAmZHJhd1JlY3QsIFJlbmRlclRhcmdldCAqcmVhZFJlbmRlclRhcmdldCwgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJUYXJnZXQgKmRyYXdSZW5kZXJUYXJnZXQsIGJv
b2wgd2hvbGVCdWZmZXJDb3B5KTsKKyAgICBJRDNEMTFUZXh0dXJlMkQgKnJlc29sdmVNdWx0aXNh
bXBsZWRUZXh0dXJlKElEM0QxMVRleHR1cmUyRCAqc291cmNlLCB1bnNpZ25lZCBpbnQgc3VicmVz
b3VyY2UpOworCisgICAgSE1PRFVMRSBtRDNkMTFNb2R1bGU7CisgICAgSE1PRFVMRSBtRHhnaU1v
ZHVsZTsKKyAgICBIREMgbURjOworCisgICAgYm9vbCBtRGV2aWNlTG9zdDsKKworICAgIHZvaWQg
aW5pdGlhbGl6ZURldmljZSgpOworICAgIHZvaWQgcmVsZWFzZURldmljZVJlc291cmNlcygpOwor
ICAgIGludCBnZXRNaW5vclNoYWRlck1vZGVsKCkgY29uc3Q7CisgICAgdm9pZCByZWxlYXNlKCk7
CisKKyAgICBSZW5kZXJTdGF0ZUNhY2hlIG1TdGF0ZUNhY2hlOworCisgICAgLy8gU3VwcG9ydCBm
bGFncworICAgIGJvb2wgbUZsb2F0MTZUZXh0dXJlU3VwcG9ydDsKKyAgICBib29sIG1GbG9hdDE2
RmlsdGVyU3VwcG9ydDsKKyAgICBib29sIG1GbG9hdDE2UmVuZGVyU3VwcG9ydDsKKworICAgIGJv
b2wgbUZsb2F0MzJUZXh0dXJlU3VwcG9ydDsKKyAgICBib29sIG1GbG9hdDMyRmlsdGVyU3VwcG9y
dDsKKyAgICBib29sIG1GbG9hdDMyUmVuZGVyU3VwcG9ydDsKKworICAgIGJvb2wgbURYVDFUZXh0
dXJlU3VwcG9ydDsKKyAgICBib29sIG1EWFQzVGV4dHVyZVN1cHBvcnQ7CisgICAgYm9vbCBtRFhU
NVRleHR1cmVTdXBwb3J0OworCisgICAgYm9vbCBtRGVwdGhUZXh0dXJlU3VwcG9ydDsKKworICAg
IC8vIE11bHRpc2FtcGxlIGZvcm1hdCBzdXBwb3J0CisgICAgc3RydWN0IE11bHRpc2FtcGxlU3Vw
cG9ydEluZm8KKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBxdWFsaXR5TGV2ZWxzW0QzRDEx
X01BWF9NVUxUSVNBTVBMRV9TQU1QTEVfQ09VTlRdOworICAgIH07CisKKyAgICB0eXBlZGVmIHN0
ZDo6dW5vcmRlcmVkX21hcDxEWEdJX0ZPUk1BVCwgTXVsdGlzYW1wbGVTdXBwb3J0SW5mbywgc3Rk
OjpoYXNoPGludD4gPiBNdWx0aXNhbXBsZVN1cHBvcnRNYXA7CisgICAgTXVsdGlzYW1wbGVTdXBw
b3J0TWFwIG1NdWx0aXNhbXBsZVN1cHBvcnRNYXA7CisKKyAgICB1bnNpZ25lZCBpbnQgbU1heFN1
cHBvcnRlZFNhbXBsZXM7CisKKyAgICAvLyBjdXJyZW50IHJlbmRlciB0YXJnZXQgc3RhdGVzCisg
ICAgdW5zaWduZWQgaW50IG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsc1tnbDo6SU1QTEVNRU5U
QVRJT05fTUFYX0RSQVdfQlVGRkVSU107CisgICAgdW5zaWduZWQgaW50IG1BcHBsaWVkRGVwdGhi
dWZmZXJTZXJpYWw7CisgICAgdW5zaWduZWQgaW50IG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlh
bDsKKyAgICBib29sIG1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZDsKKyAgICBib29sIG1SZW5kZXJU
YXJnZXREZXNjSW5pdGlhbGl6ZWQ7CisgICAgcng6OlJlbmRlclRhcmdldDo6RGVzYyBtUmVuZGVy
VGFyZ2V0RGVzYzsKKyAgICB1bnNpZ25lZCBpbnQgbUN1ckRlcHRoU2l6ZTsKKyAgICB1bnNpZ25l
ZCBpbnQgbUN1clN0ZW5jaWxTaXplOworCisgICAgLy8gQ3VycmVudGx5IGFwcGxpZWQgc2FtcGxl
ciBzdGF0ZXMKKyAgICBib29sIG1Gb3JjZVNldFZlcnRleFNhbXBsZXJTdGF0ZXNbZ2w6OklNUExF
TUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU107CisgICAgZ2w6OlNhbXBs
ZXJTdGF0ZSBtQ3VyVmVydGV4U2FtcGxlclN0YXRlc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZF
UlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKKworICAgIGJvb2wgbUZvcmNlU2V0UGl4ZWxTYW1w
bGVyU3RhdGVzW2dsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUU107CisgICAgZ2w6OlNhbXBsZXJT
dGF0ZSBtQ3VyUGl4ZWxTYW1wbGVyU3RhdGVzW2dsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUU107
CisKKyAgICAvLyBDdXJyZW50bHkgYXBwbGllZCB0ZXh0dXJlcworICAgIHVuc2lnbmVkIGludCBt
Q3VyVmVydGV4VGV4dHVyZVNlcmlhbHNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVY
VFVSRV9JTUFHRV9VTklUU107CisgICAgdW5zaWduZWQgaW50IG1DdXJQaXhlbFRleHR1cmVTZXJp
YWxzW2dsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUU107CisKKyAgICAvLyBDdXJyZW50bHkgYXBw
bGllZCBibGVuZCBzdGF0ZQorICAgIGJvb2wgbUZvcmNlU2V0QmxlbmRTdGF0ZTsKKyAgICBnbDo6
QmxlbmRTdGF0ZSBtQ3VyQmxlbmRTdGF0ZTsKKyAgICBnbDo6Q29sb3IgbUN1ckJsZW5kQ29sb3I7
CisgICAgdW5zaWduZWQgaW50IG1DdXJTYW1wbGVNYXNrOworCisgICAgLy8gQ3VycmVudGx5IGFw
cGxpZWQgcmFzdGVyaXplciBzdGF0ZQorICAgIGJvb2wgbUZvcmNlU2V0UmFzdGVyU3RhdGU7Cisg
ICAgZ2w6OlJhc3Rlcml6ZXJTdGF0ZSBtQ3VyUmFzdGVyU3RhdGU7CisKKyAgICAvLyBDdXJyZW50
bHkgYXBwbGllZCBkZXB0aCBzdGVuY2lsIHN0YXRlCisgICAgYm9vbCBtRm9yY2VTZXREZXB0aFN0
ZW5jaWxTdGF0ZTsKKyAgICBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgbUN1ckRlcHRoU3RlbmNpbFN0
YXRlOworICAgIGludCBtQ3VyU3RlbmNpbFJlZjsKKyAgICBpbnQgbUN1clN0ZW5jaWxCYWNrUmVm
OworCisgICAgLy8gQ3VycmVudGx5IGFwcGxpZWQgc2Npc3NvciByZWN0YW5nbGUKKyAgICBib29s
IG1Gb3JjZVNldFNjaXNzb3I7CisgICAgYm9vbCBtU2Npc3NvckVuYWJsZWQ7CisgICAgZ2w6OlJl
Y3RhbmdsZSBtQ3VyU2Npc3NvcjsKKworICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIHZpZXdwb3J0
CisgICAgYm9vbCBtRm9yY2VTZXRWaWV3cG9ydDsKKyAgICBnbDo6UmVjdGFuZ2xlIG1DdXJWaWV3
cG9ydDsKKyAgICBmbG9hdCBtQ3VyTmVhcjsKKyAgICBmbG9hdCBtQ3VyRmFyOworCisgICAgLy8g
Q3VycmVudGx5IGFwcGxpZWQgcHJpbWl0aXZlIHRvcG9sb2d5CisgICAgRDNEMTFfUFJJTUlUSVZF
X1RPUE9MT0dZIG1DdXJyZW50UHJpbWl0aXZlVG9wb2xvZ3k7CisKKyAgICB1bnNpZ25lZCBpbnQg
bUFwcGxpZWRJQlNlcmlhbDsKKyAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRTdG9yYWdlSUJTZXJp
YWw7CisgICAgdW5zaWduZWQgaW50IG1BcHBsaWVkSUJPZmZzZXQ7CisKKyAgICB1bnNpZ25lZCBp
bnQgbUFwcGxpZWRQcm9ncmFtQmluYXJ5U2VyaWFsOworICAgIGJvb2wgbUlzR2VvbWV0cnlTaGFk
ZXJBY3RpdmU7CisKKyAgICBkeF9WZXJ0ZXhDb25zdGFudHMgbVZlcnRleENvbnN0YW50czsKKyAg
ICBkeF9WZXJ0ZXhDb25zdGFudHMgbUFwcGxpZWRWZXJ0ZXhDb25zdGFudHM7CisgICAgSUQzRDEx
QnVmZmVyICptRHJpdmVyQ29uc3RhbnRCdWZmZXJWUzsKKyAgICBJRDNEMTFCdWZmZXIgKm1DdXJy
ZW50VmVydGV4Q29uc3RhbnRCdWZmZXI7CisKKyAgICBkeF9QaXhlbENvbnN0YW50cyBtUGl4ZWxD
b25zdGFudHM7CisgICAgZHhfUGl4ZWxDb25zdGFudHMgbUFwcGxpZWRQaXhlbENvbnN0YW50czsK
KyAgICBJRDNEMTFCdWZmZXIgKm1Ecml2ZXJDb25zdGFudEJ1ZmZlclBTOworICAgIElEM0QxMUJ1
ZmZlciAqbUN1cnJlbnRQaXhlbENvbnN0YW50QnVmZmVyOworCisgICAgSUQzRDExQnVmZmVyICpt
Q3VycmVudEdlb21ldHJ5Q29uc3RhbnRCdWZmZXI7CisKKyAgICAvLyBWZXJ0ZXgsIGluZGV4IGFu
ZCBpbnB1dCBsYXlvdXRzCisgICAgVmVydGV4RGF0YU1hbmFnZXIgKm1WZXJ0ZXhEYXRhTWFuYWdl
cjsKKyAgICBJbmRleERhdGFNYW5hZ2VyICptSW5kZXhEYXRhTWFuYWdlcjsKKyAgICBJbnB1dExh
eW91dENhY2hlIG1JbnB1dExheW91dENhY2hlOworCisgICAgU3RyZWFtaW5nSW5kZXhCdWZmZXJJ
bnRlcmZhY2UgKm1MaW5lTG9vcElCOworICAgIFN0cmVhbWluZ0luZGV4QnVmZmVySW50ZXJmYWNl
ICptVHJpYW5nbGVGYW5JQjsKKworICAgIC8vIFRleHR1cmUgY29weSByZXNvdXJjZXMKKyAgICBi
b29sIG1Db3B5UmVzb3VyY2VzSW5pdGlhbGl6ZWQ7CisgICAgSUQzRDExQnVmZmVyICptQ29weVZC
OworICAgIElEM0QxMVNhbXBsZXJTdGF0ZSAqbUNvcHlTYW1wbGVyOworICAgIElEM0QxMUlucHV0
TGF5b3V0ICptQ29weUlMOworICAgIElEM0QxMVZlcnRleFNoYWRlciAqbUNvcHlWUzsKKyAgICBJ
RDNEMTFQaXhlbFNoYWRlciAqbUNvcHlSR0JBUFM7CisgICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1D
b3B5UkdCUFM7CisgICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1Db3B5THVtUFM7CisgICAgSUQzRDEx
UGl4ZWxTaGFkZXIgKm1Db3B5THVtQWxwaGFQUzsKKworICAgIC8vIE1hc2tlZCBjbGVhciByZXNv
dXJjZXMKKyAgICBib29sIG1DbGVhclJlc291cmNlc0luaXRpYWxpemVkOworICAgIElEM0QxMUJ1
ZmZlciAqbUNsZWFyVkI7CisgICAgSUQzRDExSW5wdXRMYXlvdXQgKm1DbGVhcklMOworICAgIElE
M0QxMVZlcnRleFNoYWRlciAqbUNsZWFyVlM7CisgICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1DbGVh
clNpbmdsZVBTOworICAgIElEM0QxMVBpeGVsU2hhZGVyICptQ2xlYXJNdWx0aXBsZVBTOworICAg
IElEM0QxMVJhc3Rlcml6ZXJTdGF0ZSAqbUNsZWFyU2Npc3NvclJTOworICAgIElEM0QxMVJhc3Rl
cml6ZXJTdGF0ZSAqbUNsZWFyTm9TY2lzc29yUlM7CisKKyAgICAvLyBTeW5jIHF1ZXJ5CisgICAg
SUQzRDExUXVlcnkgKm1TeW5jUXVlcnk7CisKKyAgICBJRDNEMTFEZXZpY2UgKm1EZXZpY2U7Cisg
ICAgRDNEX0ZFQVRVUkVfTEVWRUwgbUZlYXR1cmVMZXZlbDsKKyAgICBJRDNEMTFEZXZpY2VDb250
ZXh0ICptRGV2aWNlQ29udGV4dDsKKyAgICBJRFhHSUFkYXB0ZXIgKm1EeGdpQWRhcHRlcjsKKyAg
ICBEWEdJX0FEQVBURVJfREVTQyBtQWRhcHRlckRlc2NyaXB0aW9uOworICAgIGNoYXIgbURlc2Ny
aXB0aW9uWzEyOF07CisgICAgSURYR0lGYWN0b3J5ICptRHhnaUZhY3Rvcnk7CisKKyAgICAvLyBD
YWNoZWQgZGV2aWNlIGNhcHMKKyAgICBib29sIG1CR1JBVGV4dHVyZVN1cHBvcnQ7Cit9OworCit9
CisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUkVSMTFfSF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU2hh
ZGVyRXhlY3V0YWJsZTExLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkMTEvU2hhZGVyRXhlY3V0YWJsZTExLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZTQ1
NWUzYWY1ZTNiMzVmMDA4ZjAxOTA4MWRhYTZlMjcwN2YyMDZkCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFk
ZXJFeGVjdXRhYmxlMTEuY3BwCkBAIC0wLDAgKzEsMTA5IEBACisjaW5jbHVkZSAicHJlY29tcGls
ZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFNoYWRlckV4ZWN1dGFibGUxMS5jcHA6IElt
cGxlbWVudHMgYSBEM0QxMS1zcGVjaWZpYyBjbGFzcyB0byBjb250YWluIHNoYWRlcgorLy8gZXhl
Y3V0YWJsZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgorCisjaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1dGFibGUxMS5oIgorCisjaW5jbHVkZSAiY29tbW9uL2Rl
YnVnLmgiCisKK25hbWVzcGFjZSByeAoreworCitTaGFkZXJFeGVjdXRhYmxlMTE6OlNoYWRlckV4
ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSUQzRDExUGl4
ZWxTaGFkZXIgKmV4ZWN1dGFibGUpCisgICAgOiBTaGFkZXJFeGVjdXRhYmxlKGZ1bmN0aW9uLCBs
ZW5ndGgpCit7CisgICAgbVBpeGVsRXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7CisgICAgbVZlcnRl
eEV4ZWN1dGFibGUgPSBOVUxMOworICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBOVUxMOworCisg
ICAgbUNvbnN0YW50QnVmZmVyID0gTlVMTDsKK30KKworU2hhZGVyRXhlY3V0YWJsZTExOjpTaGFk
ZXJFeGVjdXRhYmxlMTEoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIElEM0Qx
MVZlcnRleFNoYWRlciAqZXhlY3V0YWJsZSkKKyAgICA6IFNoYWRlckV4ZWN1dGFibGUoZnVuY3Rp
b24sIGxlbmd0aCkKK3sKKyAgICBtVmVydGV4RXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7CisgICAg
bVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7CisgICAgbUdlb21ldHJ5RXhlY3V0YWJsZSA9IE5VTEw7
CisKKyAgICBtQ29uc3RhbnRCdWZmZXIgPSBOVUxMOworfQorCitTaGFkZXJFeGVjdXRhYmxlMTE6
OlNoYWRlckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwg
SUQzRDExR2VvbWV0cnlTaGFkZXIgKmV4ZWN1dGFibGUpCisgICAgOiBTaGFkZXJFeGVjdXRhYmxl
KGZ1bmN0aW9uLCBsZW5ndGgpCit7CisgICAgbUdlb21ldHJ5RXhlY3V0YWJsZSA9IGV4ZWN1dGFi
bGU7CisgICAgbVZlcnRleEV4ZWN1dGFibGUgPSBOVUxMOworICAgIG1QaXhlbEV4ZWN1dGFibGUg
PSBOVUxMOworCisgICAgbUNvbnN0YW50QnVmZmVyID0gTlVMTDsKK30KKworU2hhZGVyRXhlY3V0
YWJsZTExOjp+U2hhZGVyRXhlY3V0YWJsZTExKCkKK3sKKyAgICBpZiAobVZlcnRleEV4ZWN1dGFi
bGUpCisgICAgeworICAgICAgICBtVmVydGV4RXhlY3V0YWJsZS0+UmVsZWFzZSgpOworICAgIH0K
KyAgICBpZiAobVBpeGVsRXhlY3V0YWJsZSkKKyAgICB7CisgICAgICAgIG1QaXhlbEV4ZWN1dGFi
bGUtPlJlbGVhc2UoKTsKKyAgICB9CisgICAgaWYgKG1HZW9tZXRyeUV4ZWN1dGFibGUpCisgICAg
eworICAgICAgICBtR2VvbWV0cnlFeGVjdXRhYmxlLT5SZWxlYXNlKCk7CisgICAgfQorICAgIAor
ICAgIGlmIChtQ29uc3RhbnRCdWZmZXIpCisgICAgeworICAgICAgICBtQ29uc3RhbnRCdWZmZXIt
PlJlbGVhc2UoKTsKKyAgICB9Cit9CisKK1NoYWRlckV4ZWN1dGFibGUxMSAqU2hhZGVyRXhlY3V0
YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKFNoYWRlckV4ZWN1dGFibGUgKmV4ZWN1dGFi
bGUpCit7CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoU2hhZGVyRXhlY3V0YWJsZTExKiwg
ZXhlY3V0YWJsZSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxTaGFkZXJFeGVjdXRhYmxlMTEq
PihleGVjdXRhYmxlKTsKK30KKworSUQzRDExVmVydGV4U2hhZGVyICpTaGFkZXJFeGVjdXRhYmxl
MTE6OmdldFZlcnRleFNoYWRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1WZXJ0ZXhFeGVjdXRh
YmxlOworfQorCitJRDNEMTFQaXhlbFNoYWRlciAqU2hhZGVyRXhlY3V0YWJsZTExOjpnZXRQaXhl
bFNoYWRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1QaXhlbEV4ZWN1dGFibGU7Cit9CisKK0lE
M0QxMUdlb21ldHJ5U2hhZGVyICpTaGFkZXJFeGVjdXRhYmxlMTE6OmdldEdlb21ldHJ5U2hhZGVy
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUdlb21ldHJ5RXhlY3V0YWJsZTsKK30KKworSUQzRDEx
QnVmZmVyICpTaGFkZXJFeGVjdXRhYmxlMTE6OmdldENvbnN0YW50QnVmZmVyKElEM0QxMURldmlj
ZSAqZGV2aWNlLCB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJDb3VudCkKK3sKKyAgICBpZiAoIW1Db25z
dGFudEJ1ZmZlciAmJiByZWdpc3RlckNvdW50ID4gMCkKKyAgICB7CisgICAgICAgIEQzRDExX0JV
RkZFUl9ERVNDIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24gPSB7MH07CisgICAgICAgIGNvbnN0
YW50QnVmZmVyRGVzY3JpcHRpb24uQnl0ZVdpZHRoID0gcmVnaXN0ZXJDb3VudCAqIHNpemVvZihm
bG9hdFs0XSk7CisgICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uVXNhZ2UgPSBEM0Qx
MV9VU0FHRV9EWU5BTUlDOworICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLkJpbmRG
bGFncyA9IEQzRDExX0JJTkRfQ09OU1RBTlRfQlVGRkVSOworICAgICAgICBjb25zdGFudEJ1ZmZl
ckRlc2NyaXB0aW9uLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsKKyAg
ICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5NaXNjRmxhZ3MgPSAwOworICAgICAgICBj
b25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLlN0cnVjdHVyZUJ5dGVTdHJpZGUgPSAwOworCisgICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVCdWZmZXIoJmNvbnN0YW50QnVmZmVy
RGVzY3JpcHRpb24sIE5VTEwsICZtQ29uc3RhbnRCdWZmZXIpOworICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOworICAgIH0KKworICAgIHJldHVybiBtQ29uc3RhbnRCdWZmZXI7Cit9
CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1dGFi
bGUxMS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNmVjMWNmN2QyY2RhZWJhNDRk
NGE1Yjg1NTc5ZDE4Mjk3YTQxZmFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEu
aApAQCAtMCwwICsxLDQ3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBTaGFkZXJFeGVjdXRh
YmxlMTEuaDogRGVmaW5lcyBhIEQzRDExLXNwZWNpZmljIGNsYXNzIHRvIGNvbnRhaW4gc2hhZGVy
CisvLyBleGVjdXRhYmxlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuCisKKyNpZm5kZWYgTElCR0xF
U1YyX1JFTkRFUkVSX1NIQURFUkVYRUNVVEFCTEUxMV9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVO
REVSRVJfU0hBREVSRVhFQ1VUQUJMRTExX0hfCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvU2hhZGVyRXhlY3V0YWJsZS5oIgorCituYW1lc3BhY2UgcngKK3sKKworY2xhc3MgU2hhZGVy
RXhlY3V0YWJsZTExIDogcHVibGljIFNoYWRlckV4ZWN1dGFibGUKK3sKKyAgcHVibGljOgorICAg
IFNoYWRlckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwg
SUQzRDExUGl4ZWxTaGFkZXIgKmV4ZWN1dGFibGUpOworICAgIFNoYWRlckV4ZWN1dGFibGUxMShj
b25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSUQzRDExVmVydGV4U2hhZGVyICpl
eGVjdXRhYmxlKTsKKyAgICBTaGFkZXJFeGVjdXRhYmxlMTEoY29uc3Qgdm9pZCAqZnVuY3Rpb24s
IHNpemVfdCBsZW5ndGgsIElEM0QxMUdlb21ldHJ5U2hhZGVyICpleGVjdXRhYmxlKTsKKworICAg
IHZpcnR1YWwgflNoYWRlckV4ZWN1dGFibGUxMSgpOworCisgICAgc3RhdGljIFNoYWRlckV4ZWN1
dGFibGUxMSAqbWFrZVNoYWRlckV4ZWN1dGFibGUxMShTaGFkZXJFeGVjdXRhYmxlICpleGVjdXRh
YmxlKTsKKworICAgIElEM0QxMVBpeGVsU2hhZGVyICpnZXRQaXhlbFNoYWRlcigpIGNvbnN0Owor
ICAgIElEM0QxMVZlcnRleFNoYWRlciAqZ2V0VmVydGV4U2hhZGVyKCkgY29uc3Q7CisgICAgSUQz
RDExR2VvbWV0cnlTaGFkZXIgKmdldEdlb21ldHJ5U2hhZGVyKCkgY29uc3Q7CisKKyAgICBJRDNE
MTFCdWZmZXIgKmdldENvbnN0YW50QnVmZmVyKElEM0QxMURldmljZSAqZGV2aWNlLCB1bnNpZ25l
ZCBpbnQgcmVnaXN0ZXJDb3VudCk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oU2hhZGVyRXhlY3V0YWJsZTExKTsKKworICAgIElEM0QxMVBpeGVsU2hhZGVyICpt
UGl4ZWxFeGVjdXRhYmxlOworICAgIElEM0QxMVZlcnRleFNoYWRlciAqbVZlcnRleEV4ZWN1dGFi
bGU7CisgICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKm1HZW9tZXRyeUV4ZWN1dGFibGU7CisKKyAg
ICBJRDNEMTFCdWZmZXIgKm1Db25zdGFudEJ1ZmZlcjsKK307CisKK30KKworI2VuZGlmIC8vIExJ
QkdMRVNWMl9SRU5ERVJFUl9TSEFERVJFWEVDVVRBQkxFMTFfSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dhcENoYWlu
MTEuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9Td2FwQ2hhaW4xMS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjY5ZDQ1MTY2OGZkMDAwNmM0NjJmOGE1
ZTBjYzAxNDZmNzA4YWZiMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dhcENoYWluMTEuY3BwCkBAIC0wLDAg
KzEsNjU3IEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
Ky8vIFN3YXBDaGFpbjExLmNwcDogSW1wbGVtZW50cyBhIGJhY2stZW5kIHNwZWNpZmljIGNsYXNz
IGZvciB0aGUgRDNEMTEgc3dhcCBjaGFpbi4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9Td2FwQ2hhaW4xMS5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDExL3JlbmRlcmVyMTFfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvUmVuZGVyZXIxMS5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3No
YWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2gxMXZzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhMTFwcy5oIgorCitu
YW1lc3BhY2UgcngKK3sKKworU3dhcENoYWluMTE6OlN3YXBDaGFpbjExKFJlbmRlcmVyMTEgKnJl
bmRlcmVyLCBIV05EIHdpbmRvdywgSEFORExFIHNoYXJlSGFuZGxlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMZW51bSBiYWNrQnVmZmVyRm9ybWF0LCBHTGVudW0gZGVwdGhCdWZmZXJGb3Jt
YXQpCisgICAgOiBtUmVuZGVyZXIocmVuZGVyZXIpLCBTd2FwQ2hhaW4od2luZG93LCBzaGFyZUhh
bmRsZSwgYmFja0J1ZmZlckZvcm1hdCwgZGVwdGhCdWZmZXJGb3JtYXQpCit7CisgICAgbVN3YXBD
aGFpbiA9IE5VTEw7CisgICAgbUJhY2tCdWZmZXJUZXh0dXJlID0gTlVMTDsKKyAgICBtQmFja0J1
ZmZlclJUVmlldyA9IE5VTEw7CisgICAgbU9mZnNjcmVlblRleHR1cmUgPSBOVUxMOworICAgIG1P
ZmZzY3JlZW5SVFZpZXcgPSBOVUxMOworICAgIG1PZmZzY3JlZW5TUlZpZXcgPSBOVUxMOworICAg
IG1EZXB0aFN0ZW5jaWxUZXh0dXJlID0gTlVMTDsKKyAgICBtRGVwdGhTdGVuY2lsRFNWaWV3ID0g
TlVMTDsKKyAgICBtUXVhZFZCID0gTlVMTDsKKyAgICBtUGFzc1Rocm91Z2hTYW1wbGVyID0gTlVM
TDsKKyAgICBtUGFzc1Rocm91Z2hJTCA9IE5VTEw7CisgICAgbVBhc3NUaHJvdWdoVlMgPSBOVUxM
OworICAgIG1QYXNzVGhyb3VnaFBTID0gTlVMTDsKKyAgICBtV2lkdGggPSAtMTsKKyAgICBtSGVp
Z2h0ID0gLTE7CisgICAgbVN3YXBJbnRlcnZhbCA9IDA7CisgICAgbUFwcENyZWF0ZWRTaGFyZUhh
bmRsZSA9IG1TaGFyZUhhbmRsZSAhPSBOVUxMOworICAgIG1QYXNzVGhyb3VnaFJlc291cmNlc0lu
aXQgPSBmYWxzZTsKK30KKworU3dhcENoYWluMTE6On5Td2FwQ2hhaW4xMSgpCit7CisgICAgcmVs
ZWFzZSgpOworfQorCit2b2lkIFN3YXBDaGFpbjExOjpyZWxlYXNlKCkKK3sKKyAgICBTYWZlUmVs
ZWFzZShtU3dhcENoYWluKTsKKyAgICBTYWZlUmVsZWFzZShtQmFja0J1ZmZlclRleHR1cmUpOwor
ICAgIFNhZmVSZWxlYXNlKG1CYWNrQnVmZmVyUlRWaWV3KTsKKyAgICBTYWZlUmVsZWFzZShtT2Zm
c2NyZWVuVGV4dHVyZSk7CisgICAgU2FmZVJlbGVhc2UobU9mZnNjcmVlblJUVmlldyk7CisgICAg
U2FmZVJlbGVhc2UobU9mZnNjcmVlblNSVmlldyk7CisgICAgU2FmZVJlbGVhc2UobURlcHRoU3Rl
bmNpbFRleHR1cmUpOworICAgIFNhZmVSZWxlYXNlKG1EZXB0aFN0ZW5jaWxEU1ZpZXcpOworICAg
IFNhZmVSZWxlYXNlKG1RdWFkVkIpOworICAgIFNhZmVSZWxlYXNlKG1QYXNzVGhyb3VnaFNhbXBs
ZXIpOworICAgIFNhZmVSZWxlYXNlKG1QYXNzVGhyb3VnaElMKTsKKyAgICBTYWZlUmVsZWFzZSht
UGFzc1Rocm91Z2hWUyk7CisgICAgU2FmZVJlbGVhc2UobVBhc3NUaHJvdWdoUFMpOworCisgICAg
aWYgKCFtQXBwQ3JlYXRlZFNoYXJlSGFuZGxlKQorICAgIHsKKyAgICAgICAgbVNoYXJlSGFuZGxl
ID0gTlVMTDsKKyAgICB9Cit9CisKK3ZvaWQgU3dhcENoYWluMTE6OnJlbGVhc2VPZmZzY3JlZW5U
ZXh0dXJlKCkKK3sKKyAgICBTYWZlUmVsZWFzZShtT2Zmc2NyZWVuVGV4dHVyZSk7CisgICAgU2Fm
ZVJlbGVhc2UobU9mZnNjcmVlblJUVmlldyk7CisgICAgU2FmZVJlbGVhc2UobU9mZnNjcmVlblNS
Vmlldyk7CisgICAgU2FmZVJlbGVhc2UobURlcHRoU3RlbmNpbFRleHR1cmUpOworICAgIFNhZmVS
ZWxlYXNlKG1EZXB0aFN0ZW5jaWxEU1ZpZXcpOworfQorCitFR0xpbnQgU3dhcENoYWluMTE6OnJl
c2V0T2Zmc2NyZWVuVGV4dHVyZShpbnQgYmFja2J1ZmZlcldpZHRoLCBpbnQgYmFja2J1ZmZlckhl
aWdodCkKK3sKKyAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNl
KCk7CisKKyAgICBBU1NFUlQoZGV2aWNlICE9IE5VTEwpOworCisgICAgLy8gRDNEMTEgZG9lcyBu
b3QgYWxsb3cgemVybyBzaXplIHRleHR1cmVzCisgICAgQVNTRVJUKGJhY2tidWZmZXJXaWR0aCA+
PSAxKTsKKyAgICBBU1NFUlQoYmFja2J1ZmZlckhlaWdodCA+PSAxKTsKKworICAgIC8vIFByZXNl
cnZlIHRoZSByZW5kZXIgdGFyZ2V0IGNvbnRlbnQKKyAgICBJRDNEMTFUZXh0dXJlMkQgKnByZXZp
b3VzT2Zmc2NyZWVuVGV4dHVyZSA9IG1PZmZzY3JlZW5UZXh0dXJlOworICAgIGlmIChwcmV2aW91
c09mZnNjcmVlblRleHR1cmUpCisgICAgeworICAgICAgICBwcmV2aW91c09mZnNjcmVlblRleHR1
cmUtPkFkZFJlZigpOworICAgIH0KKyAgICBjb25zdCBpbnQgcHJldmlvdXNXaWR0aCA9IG1XaWR0
aDsKKyAgICBjb25zdCBpbnQgcHJldmlvdXNIZWlnaHQgPSBtSGVpZ2h0OworCisgICAgcmVsZWFz
ZU9mZnNjcmVlblRleHR1cmUoKTsKKworICAgIC8vIElmIHRoZSBhcHAgcGFzc2VkIGluIGEgc2hh
cmUgaGFuZGxlLCBvcGVuIHRoZSByZXNvdXJjZQorICAgIC8vIFNlZSBFR0xfQU5HTEVfZDNkX3No
YXJlX2hhbmRsZV9jbGllbnRfYnVmZmVyCisgICAgaWYgKG1BcHBDcmVhdGVkU2hhcmVIYW5kbGUp
CisgICAgeworICAgICAgICBJRDNEMTFSZXNvdXJjZSAqdGVtcFJlc291cmNlMTE7CisgICAgICAg
IEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5PcGVuU2hhcmVkUmVzb3VyY2UobVNoYXJlSGFuZGxl
LCBfX3V1aWRvZihJRDNEMTFSZXNvdXJjZSksICh2b2lkKiopJnRlbXBSZXNvdXJjZTExKTsKKwor
ICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigi
RmFpbGVkIHRvIG9wZW4gdGhlIHN3YXAgY2hhaW4gcGJ1ZmZlciBzaGFyZSBoYW5kbGU6ICUwOGxY
IiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJlbGVhc2UoKTsKKyAgICAgICAgICAgIHJldHVybiBF
R0xfQkFEX1BBUkFNRVRFUjsKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdCA9IHRlbXBSZXNv
dXJjZTExLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRDNEMTFUZXh0dXJlMkQpLCAodm9pZCoq
KSZtT2Zmc2NyZWVuVGV4dHVyZSk7CisgICAgICAgIHRlbXBSZXNvdXJjZTExLT5SZWxlYXNlKCk7
CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBF
UlIoIkZhaWxlZCB0byBxdWVyeSB0ZXh0dXJlMmQgaW50ZXJmYWNlIGluIHBidWZmZXIgc2hhcmUg
aGFuZGxlOiAlMDhsWCIsIHJlc3VsdCk7CisgICAgICAgICAgICByZWxlYXNlKCk7CisgICAgICAg
ICAgICByZXR1cm4gRUdMX0JBRF9QQVJBTUVURVI7CisgICAgICAgIH0KKworICAgICAgICAvLyBW
YWxpZGF0ZSBvZmZzY3JlZW4gdGV4dHVyZSBwYXJhbWV0ZXJzCisgICAgICAgIEQzRDExX1RFWFRV
UkUyRF9ERVNDIG9mZnNjcmVlblRleHR1cmVEZXNjID0gezB9OworICAgICAgICBtT2Zmc2NyZWVu
VGV4dHVyZS0+R2V0RGVzYygmb2Zmc2NyZWVuVGV4dHVyZURlc2MpOworCisgICAgICAgIGlmIChv
ZmZzY3JlZW5UZXh0dXJlRGVzYy5XaWR0aCAhPSAoVUlOVCliYWNrYnVmZmVyV2lkdGgKKyAgICAg
ICAgICAgIHx8IG9mZnNjcmVlblRleHR1cmVEZXNjLkhlaWdodCAhPSAoVUlOVCliYWNrYnVmZmVy
SGVpZ2h0CisgICAgICAgICAgICB8fCBvZmZzY3JlZW5UZXh0dXJlRGVzYy5Gb3JtYXQgIT0gZ2xf
ZDNkMTE6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQpCisgICAg
ICAgICAgICB8fCBvZmZzY3JlZW5UZXh0dXJlRGVzYy5NaXBMZXZlbHMgIT0gMQorICAgICAgICAg
ICAgfHwgb2Zmc2NyZWVuVGV4dHVyZURlc2MuQXJyYXlTaXplICE9IDEpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEVSUigiSW52YWxpZCB0ZXh0dXJlIHBhcmFtZXRlcnMgaW4gdGhlIHNoYXJlZCBv
ZmZzY3JlZW4gdGV4dHVyZSBwYnVmZmVyIik7CisgICAgICAgICAgICByZWxlYXNlKCk7CisgICAg
ICAgICAgICByZXR1cm4gRUdMX0JBRF9QQVJBTUVURVI7CisgICAgICAgIH0KKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgY29uc3QgYm9vbCB1c2VTaGFyZWRSZXNvdXJjZSA9ICFtV2lu
ZG93ICYmIG1SZW5kZXJlci0+Z2V0U2hhcmVIYW5kbGVTdXBwb3J0KCk7CisKKyAgICAgICAgRDNE
MTFfVEVYVFVSRTJEX0RFU0Mgb2Zmc2NyZWVuVGV4dHVyZURlc2MgPSB7MH07CisgICAgICAgIG9m
ZnNjcmVlblRleHR1cmVEZXNjLldpZHRoID0gYmFja2J1ZmZlcldpZHRoOworICAgICAgICBvZmZz
Y3JlZW5UZXh0dXJlRGVzYy5IZWlnaHQgPSBiYWNrYnVmZmVySGVpZ2h0OworICAgICAgICBvZmZz
Y3JlZW5UZXh0dXJlRGVzYy5Gb3JtYXQgPSBnbF9kM2QxMTo6Q29udmVydFJlbmRlcmJ1ZmZlckZv
cm1hdChtQmFja0J1ZmZlckZvcm1hdCk7CisgICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLk1p
cExldmVscyA9IDE7CisgICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLkFycmF5U2l6ZSA9IDE7
CisgICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLlNhbXBsZURlc2MuQ291bnQgPSAxOworICAg
ICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOworICAgICAg
ICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7CisgICAg
ICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLkJpbmRGbGFncyA9IEQzRDExX0JJTkRfUkVOREVSX1RB
UkdFVCB8IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFOworICAgICAgICBvZmZzY3JlZW5UZXh0
dXJlRGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7CisgICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNj
Lk1pc2NGbGFncyA9IHVzZVNoYXJlZFJlc291cmNlID8gRDNEMTFfUkVTT1VSQ0VfTUlTQ19TSEFS
RUQgOiAwOworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJl
MkQoJm9mZnNjcmVlblRleHR1cmVEZXNjLCBOVUxMLCAmbU9mZnNjcmVlblRleHR1cmUpOworCisg
ICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJD
b3VsZCBub3QgY3JlYXRlIG9mZnNjcmVlbiB0ZXh0dXJlOiAlMDhsWCIsIHJlc3VsdCk7CisgICAg
ICAgICAgICByZWxlYXNlKCk7CisKKyAgICAgICAgICAgIGlmIChkM2QxMTo6aXNEZXZpY2VMb3N0
RXJyb3IocmVzdWx0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRUdM
X0NPTlRFWFRfTE9TVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRUdMX0JBRF9BTExPQzsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobU9mZnNjcmVlblRl
eHR1cmUsICJPZmZzY3JlZW4gdGV4dHVyZSIpOworCisgICAgICAgIC8vIEVHTF9BTkdMRV9zdXJm
YWNlX2QzZF90ZXh0dXJlXzJkX3NoYXJlX2hhbmRsZSByZXF1aXJlcyB0aGF0IHdlIHN0b3JlIGEg
c2hhcmUgaGFuZGxlIGZvciB0aGUgY2xpZW50CisgICAgICAgIGlmICh1c2VTaGFyZWRSZXNvdXJj
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgSURYR0lSZXNvdXJjZSAqb2Zmc2NyZWVuVGV4dHVy
ZVJlc291cmNlID0gTlVMTDsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1PZmZzY3JlZW5UZXh0dXJl
LT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRFhHSVJlc291cmNlKSwgKHZvaWQqKikmb2Zmc2Ny
ZWVuVGV4dHVyZVJlc291cmNlKTsKKworICAgICAgICAgICAgLy8gRmFsbCBiYWNrIHRvIG5vIHNo
YXJlIGhhbmRsZSBvbiBmYWlsdXJlCisgICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgcXVlcnkgb2Zmc2Ny
ZWVuIHRleHR1cmUgcmVzb3VyY2U6ICUwOGxYIiwgcmVzdWx0KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBv
ZmZzY3JlZW5UZXh0dXJlUmVzb3VyY2UtPkdldFNoYXJlZEhhbmRsZSgmbVNoYXJlSGFuZGxlKTsK
KyAgICAgICAgICAgICAgICBvZmZzY3JlZW5UZXh0dXJlUmVzb3VyY2UtPlJlbGVhc2UoKTsKKwor
ICAgICAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIG1TaGFyZUhhbmRsZSA9IE5VTEw7CisgICAgICAgICAgICAgICAg
ICAgIEVSUigiQ291bGQgbm90IGdldCBvZmZzY3JlZW4gdGV4dHVyZSBzaGFyZWQgaGFuZGxlOiAl
MDhsWCIsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgICAgICAKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRl
UmVuZGVyVGFyZ2V0VmlldyhtT2Zmc2NyZWVuVGV4dHVyZSwgTlVMTCwgJm1PZmZzY3JlZW5SVFZp
ZXcpOworCisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICBkM2QxMTo6U2V0RGVi
dWdOYW1lKG1PZmZzY3JlZW5SVFZpZXcsICJPZmZzY3JlZW4gcmVuZGVyIHRhcmdldCIpOworCisg
ICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcobU9mZnNjcmVlblRl
eHR1cmUsIE5VTEwsICZtT2Zmc2NyZWVuU1JWaWV3KTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOworICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobU9mZnNjcmVlblNSVmlldywgIk9mZnNj
cmVlbiBzaGFkZXIgcmVzb3VyY2UiKTsKKworICAgIGlmIChtRGVwdGhCdWZmZXJGb3JtYXQgIT0g
R0xfTk9ORSkKKyAgICB7CisgICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIGRlcHRoU3RlbmNp
bERlc2MgPSB7MH07CisgICAgICAgIGRlcHRoU3RlbmNpbERlc2MuV2lkdGggPSBiYWNrYnVmZmVy
V2lkdGg7CisgICAgICAgIGRlcHRoU3RlbmNpbERlc2MuSGVpZ2h0ID0gYmFja2J1ZmZlckhlaWdo
dDsKKyAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5Gb3JtYXQgPSBnbF9kM2QxMTo6Q29udmVydFJl
bmRlcmJ1ZmZlckZvcm1hdChtRGVwdGhCdWZmZXJGb3JtYXQpOworICAgICAgICBkZXB0aFN0ZW5j
aWxEZXNjLk1pcExldmVscyA9IDE7CisgICAgICAgIGRlcHRoU3RlbmNpbERlc2MuQXJyYXlTaXpl
ID0gMTsKKyAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gMTsKKyAg
ICAgICAgZGVwdGhTdGVuY2lsRGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOworICAgICAgICBk
ZXB0aFN0ZW5jaWxEZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKKyAgICAgICAgZGVw
dGhTdGVuY2lsRGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX0RFUFRIX1NURU5DSUw7CisgICAg
ICAgIGRlcHRoU3RlbmNpbERlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOworICAgICAgICBkZXB0aFN0
ZW5jaWxEZXNjLk1pc2NGbGFncyA9IDA7CisKKyAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVh
dGVUZXh0dXJlMkQoJmRlcHRoU3RlbmNpbERlc2MsIE5VTEwsICZtRGVwdGhTdGVuY2lsVGV4dHVy
ZSk7CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAg
RVJSKCJDb3VsZCBub3QgY3JlYXRlIGRlcHRoc3RlbmNpbCBzdXJmYWNlIGZvciBuZXcgc3dhcCBj
aGFpbjogMHglMDhYIiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJlbGVhc2UoKTsKKworICAgICAg
ICAgICAgaWYgKGQzZDExOjppc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBFR0xfQ09OVEVYVF9MT1NUOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBFR0xfQkFEX0FMTE9DOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGQzZDEx
OjpTZXREZWJ1Z05hbWUobURlcHRoU3RlbmNpbFRleHR1cmUsICJEZXB0aCBzdGVuY2lsIHRleHR1
cmUiKTsKKworICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFZpZXco
bURlcHRoU3RlbmNpbFRleHR1cmUsIE5VTEwsICZtRGVwdGhTdGVuY2lsRFNWaWV3KTsKKyAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgZDNkMTE6OlNldERlYnVnTmFt
ZShtRGVwdGhTdGVuY2lsRFNWaWV3LCAiRGVwdGggc3RlbmNpbCB2aWV3Iik7CisgICAgfQorCisg
ICAgbVdpZHRoID0gYmFja2J1ZmZlcldpZHRoOworICAgIG1IZWlnaHQgPSBiYWNrYnVmZmVySGVp
Z2h0OworCisgICAgaWYgKHByZXZpb3VzT2Zmc2NyZWVuVGV4dHVyZSAhPSBOVUxMKQorICAgIHsK
KyAgICAgICAgRDNEMTFfQk9YIHNvdXJjZUJveCA9IHswfTsKKyAgICAgICAgc291cmNlQm94Lmxl
ZnQgPSAwOworICAgICAgICBzb3VyY2VCb3gucmlnaHQgPSBzdGQ6Om1pbihwcmV2aW91c1dpZHRo
LCBtV2lkdGgpOworICAgICAgICBzb3VyY2VCb3gudG9wID0gc3RkOjptYXgocHJldmlvdXNIZWln
aHQgLSBtSGVpZ2h0LCAwKTsKKyAgICAgICAgc291cmNlQm94LmJvdHRvbSA9IHByZXZpb3VzSGVp
Z2h0OworICAgICAgICBzb3VyY2VCb3guZnJvbnQgPSAwOworICAgICAgICBzb3VyY2VCb3guYmFj
ayA9IDE7CisKKyAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqZGV2aWNlQ29udGV4dCA9IG1S
ZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworICAgICAgICBjb25zdCBpbnQgeW9mZnNldCA9
IHN0ZDo6bWF4KG1IZWlnaHQgLSBwcmV2aW91c0hlaWdodCwgMCk7CisgICAgICAgIGRldmljZUNv
bnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihtT2Zmc2NyZWVuVGV4dHVyZSwgMCwgMCwgeW9m
ZnNldCwgMCwgcHJldmlvdXNPZmZzY3JlZW5UZXh0dXJlLCAwLCAmc291cmNlQm94KTsKKworICAg
ICAgICBwcmV2aW91c09mZnNjcmVlblRleHR1cmUtPlJlbGVhc2UoKTsKKworICAgICAgICBpZiAo
bVN3YXBDaGFpbikKKyAgICAgICAgeworICAgICAgICAgICAgc3dhcFJlY3QoMCwgMCwgbVdpZHRo
LCBtSGVpZ2h0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBFR0xfU1VDQ0VTUzsK
K30KKworRUdMaW50IFN3YXBDaGFpbjExOjpyZXNpemUoRUdMaW50IGJhY2tidWZmZXJXaWR0aCwg
RUdMaW50IGJhY2tidWZmZXJIZWlnaHQpCit7CisgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBt
UmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgaWYgKGRldmljZSA9PSBOVUxMKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEVHTF9CQURfQUNDRVNTOworICAgIH0KKworICAgIC8vIEVHTCBhbGxv
d3MgY3JlYXRpbmcgYSBzdXJmYWNlIHdpdGggMHgwIGRpbWVuc2lvbiwgaG93ZXZlciwgRFhHSSBk
b2VzIG5vdCBsaWtlIDB4MCBzd2FwY2hhaW5zCisgICAgaWYgKGJhY2tidWZmZXJXaWR0aCA8IDEg
fHwgYmFja2J1ZmZlckhlaWdodCA8IDEpCisgICAgeworICAgICAgICByZXR1cm4gRUdMX1NVQ0NF
U1M7CisgICAgfQorCisgICAgLy8gQ2FuIG9ubHkgY2FsbCByZXNpemUgaWYgd2UgaGF2ZSBhbHJl
YWR5IGNyZWF0ZWQgb3VyIHN3YXAgYnVmZmVyIGFuZCByZXNvdXJjZXMKKyAgICBBU1NFUlQobVN3
YXBDaGFpbiAmJiBtQmFja0J1ZmZlclRleHR1cmUgJiYgbUJhY2tCdWZmZXJSVFZpZXcpOworCisg
ICAgU2FmZVJlbGVhc2UobUJhY2tCdWZmZXJUZXh0dXJlKTsKKyAgICBTYWZlUmVsZWFzZShtQmFj
a0J1ZmZlclJUVmlldyk7CisKKyAgICAvLyBSZXNpemUgc3dhcCBjaGFpbgorICAgIERYR0lfRk9S
TUFUIGJhY2tidWZmZXJEWEdJRm9ybWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRSZW5kZXJidWZmZXJG
b3JtYXQobUJhY2tCdWZmZXJGb3JtYXQpOworICAgIEhSRVNVTFQgcmVzdWx0ID0gbVN3YXBDaGFp
bi0+UmVzaXplQnVmZmVycygyLCBiYWNrYnVmZmVyV2lkdGgsIGJhY2tidWZmZXJIZWlnaHQsIGJh
Y2tidWZmZXJEWEdJRm9ybWF0LCAwKTsKKworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7
CisgICAgICAgIEVSUigiRXJyb3IgcmVzaXppbmcgc3dhcCBjaGFpbiBidWZmZXJzOiAweCUwOFgi
LCByZXN1bHQpOworICAgICAgICByZWxlYXNlKCk7CisKKyAgICAgICAgaWYgKGQzZDExOjppc0Rl
dmljZUxvc3RFcnJvcihyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRUdM
X0NPTlRFWFRfTE9TVDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBFR0xfQkFEX0FMTE9DOworICAgICAgICB9CisgICAgfQorCisgICAgcmVz
dWx0ID0gbVN3YXBDaGFpbi0+R2V0QnVmZmVyKDAsIF9fdXVpZG9mKElEM0QxMVRleHR1cmUyRCks
IChMUFZPSUQqKSZtQmFja0J1ZmZlclRleHR1cmUpOworICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CisgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgZDNkMTE6
OlNldERlYnVnTmFtZShtQmFja0J1ZmZlclRleHR1cmUsICJCYWNrIGJ1ZmZlciB0ZXh0dXJlIik7
CisgICAgfQorCisgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1C
YWNrQnVmZmVyVGV4dHVyZSwgTlVMTCwgJm1CYWNrQnVmZmVyUlRWaWV3KTsKKyAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOworICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAgICB7Cisg
ICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUJhY2tCdWZmZXJSVFZpZXcsICJCYWNrIGJ1ZmZl
ciByZW5kZXIgdGFyZ2V0Iik7CisgICAgfQorCisgICAgcmV0dXJuIHJlc2V0T2Zmc2NyZWVuVGV4
dHVyZShiYWNrYnVmZmVyV2lkdGgsIGJhY2tidWZmZXJIZWlnaHQpOworfQorCitFR0xpbnQgU3dh
cENoYWluMTE6OnJlc2V0KGludCBiYWNrYnVmZmVyV2lkdGgsIGludCBiYWNrYnVmZmVySGVpZ2h0
LCBFR0xpbnQgc3dhcEludGVydmFsKQoreworICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJl
bmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgIGlmIChkZXZpY2UgPT0gTlVMTCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBFR0xfQkFEX0FDQ0VTUzsKKyAgICB9CisKKyAgICAvLyBSZWxlYXNlIHNw
ZWNpZmljIHJlc291cmNlcyB0byBmcmVlIHVwIG1lbW9yeSBmb3IgdGhlIG5ldyByZW5kZXIgdGFy
Z2V0LCB3aGlsZSB0aGUKKyAgICAvLyBvbGQgcmVuZGVyIHRhcmdldCBzdGlsbCBleGlzdHMgZm9y
IHRoZSBwdXJwb3NlIG9mIHByZXNlcnZpbmcgaXRzIGNvbnRlbnRzLgorICAgIFNhZmVSZWxlYXNl
KG1Td2FwQ2hhaW4pOworICAgIFNhZmVSZWxlYXNlKG1CYWNrQnVmZmVyVGV4dHVyZSk7CisgICAg
U2FmZVJlbGVhc2UobUJhY2tCdWZmZXJSVFZpZXcpOworCisgICAgbVN3YXBJbnRlcnZhbCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGludD4oc3dhcEludGVydmFsKTsKKyAgICBpZiAobVN3YXBJbnRl
cnZhbCA+IDQpCisgICAgeworICAgICAgICAvLyBJRFhHSVN3YXBDaGFpbjo6UHJlc2VudCBkb2N1
bWVudGF0aW9uIHN0YXRlcyB0aGF0IHZhbGlkIHN5bmMgaW50ZXJ2YWxzIGFyZSBpbiB0aGUgWzAs
NF0gcmFuZ2UKKyAgICAgICAgcmV0dXJuIEVHTF9CQURfUEFSQU1FVEVSOworICAgIH0KKworICAg
IC8vIEVHTCBhbGxvd3MgY3JlYXRpbmcgYSBzdXJmYWNlIHdpdGggMHgwIGRpbWVuc2lvbiwgaG93
ZXZlciwgRFhHSSBkb2VzIG5vdCBsaWtlIDB4MCBzd2FwY2hhaW5zCisgICAgaWYgKGJhY2tidWZm
ZXJXaWR0aCA8IDEgfHwgYmFja2J1ZmZlckhlaWdodCA8IDEpCisgICAgeworICAgICAgICByZWxl
YXNlT2Zmc2NyZWVuVGV4dHVyZSgpOworICAgICAgICByZXR1cm4gRUdMX1NVQ0NFU1M7CisgICAg
fQorCisgICAgaWYgKG1XaW5kb3cpCisgICAgeworICAgICAgICBJRFhHSUZhY3RvcnkgKmZhY3Rv
cnkgPSBtUmVuZGVyZXItPmdldER4Z2lGYWN0b3J5KCk7CisKKyAgICAgICAgRFhHSV9TV0FQX0NI
QUlOX0RFU0Mgc3dhcENoYWluRGVzYyA9IHswfTsKKyAgICAgICAgc3dhcENoYWluRGVzYy5CdWZm
ZXJDb3VudCA9IDI7CisgICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyRGVzYy5Gb3JtYXQgPSBn
bF9kM2QxMTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCk7Cisg
ICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyRGVzYy5XaWR0aCA9IGJhY2tidWZmZXJXaWR0aDsK
KyAgICAgICAgc3dhcENoYWluRGVzYy5CdWZmZXJEZXNjLkhlaWdodCA9IGJhY2tidWZmZXJIZWln
aHQ7CisgICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyRGVzYy5TY2FsaW5nID0gRFhHSV9NT0RF
X1NDQUxJTkdfVU5TUEVDSUZJRUQ7CisgICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyRGVzYy5T
Y2FubGluZU9yZGVyaW5nID0gRFhHSV9NT0RFX1NDQU5MSU5FX09SREVSX1VOU1BFQ0lGSUVEOwor
ICAgICAgICBzd2FwQ2hhaW5EZXNjLkJ1ZmZlckRlc2MuUmVmcmVzaFJhdGUuTnVtZXJhdG9yID0g
MDsKKyAgICAgICAgc3dhcENoYWluRGVzYy5CdWZmZXJEZXNjLlJlZnJlc2hSYXRlLkRlbm9taW5h
dG9yID0gMTsKKyAgICAgICAgc3dhcENoYWluRGVzYy5CdWZmZXJVc2FnZSA9IERYR0lfVVNBR0Vf
UkVOREVSX1RBUkdFVF9PVVRQVVQ7CisgICAgICAgIHN3YXBDaGFpbkRlc2MuRmxhZ3MgPSAwOwor
ICAgICAgICBzd2FwQ2hhaW5EZXNjLk91dHB1dFdpbmRvdyA9IG1XaW5kb3c7CisgICAgICAgIHN3
YXBDaGFpbkRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAgIHN3YXBDaGFpbkRlc2Mu
U2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKKyAgICAgICAgc3dhcENoYWluRGVzYy5XaW5kb3dlZCA9
IFRSVUU7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBmYWN0b3J5LT5DcmVhdGVTd2FwQ2hh
aW4oZGV2aWNlLCAmc3dhcENoYWluRGVzYywgJm1Td2FwQ2hhaW4pOworCisgICAgICAgIGlmIChG
QUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3Jl
YXRlIGFkZGl0aW9uYWwgc3dhcCBjaGFpbnMgb3Igb2Zmc2NyZWVuIHN1cmZhY2VzOiAlMDhsWCIs
IHJlc3VsdCk7CisgICAgICAgICAgICByZWxlYXNlKCk7CisKKyAgICAgICAgICAgIGlmIChkM2Qx
MTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gRUdMX0NPTlRFWFRfTE9TVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRUdMX0JBRF9BTExP
QzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdCA9IG1Td2FwQ2hh
aW4tPkdldEJ1ZmZlcigwLCBfX3V1aWRvZihJRDNEMTFUZXh0dXJlMkQpLCAoTFBWT0lEKikmbUJh
Y2tCdWZmZXJUZXh0dXJlKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAg
ICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQmFja0J1ZmZlclRleHR1cmUsICJCYWNrIGJ1ZmZl
ciB0ZXh0dXJlIik7CisKKyAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJn
ZXRWaWV3KG1CYWNrQnVmZmVyVGV4dHVyZSwgTlVMTCwgJm1CYWNrQnVmZmVyUlRWaWV3KTsKKyAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgZDNkMTE6OlNldERlYnVn
TmFtZShtQmFja0J1ZmZlclJUVmlldywgIkJhY2sgYnVmZmVyIHJlbmRlciB0YXJnZXQiKTsKKyAg
ICB9CisKKyAgICAvLyBJZiB3ZSBhcmUgcmVzaXppbmcgdGhlIHN3YXAgY2hhaW4sIHdlIGRvbid0
IHdpc2ggdG8gcmVjcmVhdGUgYWxsIHRoZSBzdGF0aWMgcmVzb3VyY2VzCisgICAgaWYgKCFtUGFz
c1Rocm91Z2hSZXNvdXJjZXNJbml0KQorICAgIHsKKyAgICAgICAgbVBhc3NUaHJvdWdoUmVzb3Vy
Y2VzSW5pdCA9IHRydWU7CisgICAgICAgIGluaXRQYXNzVGhyb3VnaFJlc291cmNlcygpOworICAg
IH0KKworICAgIHJldHVybiByZXNldE9mZnNjcmVlblRleHR1cmUoYmFja2J1ZmZlcldpZHRoLCBi
YWNrYnVmZmVySGVpZ2h0KTsKK30KKwordm9pZCBTd2FwQ2hhaW4xMTo6aW5pdFBhc3NUaHJvdWdo
UmVzb3VyY2VzKCkKK3sKKyAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0
RGV2aWNlKCk7CisKKyAgICBBU1NFUlQoZGV2aWNlICE9IE5VTEwpOworCisgICAgLy8gTWFrZSBz
dXJlIG91ciByZXNvdXJjZXMgYXJlIGFsbCBub3QgYWxsb2NhdGVkLCB3aGVuIHdlIGNyZWF0ZQor
ICAgIEFTU0VSVChtUXVhZFZCID09IE5VTEwgJiYgbVBhc3NUaHJvdWdoU2FtcGxlciA9PSBOVUxM
KTsKKyAgICBBU1NFUlQobVBhc3NUaHJvdWdoSUwgPT0gTlVMTCAmJiBtUGFzc1Rocm91Z2hWUyA9
PSBOVUxMICYmIG1QYXNzVGhyb3VnaFBTID09IE5VTEwpOworCisgICAgRDNEMTFfQlVGRkVSX0RF
U0MgdmJEZXNjOworICAgIHZiRGVzYy5CeXRlV2lkdGggPSBzaXplb2YoZDNkMTE6OlBvc2l0aW9u
VGV4Q29vcmRWZXJ0ZXgpICogNDsKKyAgICB2YkRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9EWU5B
TUlDOworICAgIHZiRGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1ZFUlRFWF9CVUZGRVI7Cisg
ICAgdmJEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsKKyAgICB2
YkRlc2MuTWlzY0ZsYWdzID0gMDsKKyAgICB2YkRlc2MuU3RydWN0dXJlQnl0ZVN0cmlkZSA9IDA7
CisKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZ2YkRlc2MsIE5V
TEwsICZtUXVhZFZCKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgIGQzZDEx
OjpTZXREZWJ1Z05hbWUobVF1YWRWQiwgIlN3YXAgY2hhaW4gcXVhZCB2ZXJ0ZXggYnVmZmVyIik7
CisKKyAgICBEM0QxMV9TQU1QTEVSX0RFU0Mgc2FtcGxlckRlc2M7CisgICAgc2FtcGxlckRlc2Mu
RmlsdGVyID0gRDNEMTFfRklMVEVSX01JTl9NQUdfTUlQX1BPSU5UOworICAgIHNhbXBsZXJEZXNj
LkFkZHJlc3NVID0gRDNEMTFfVEVYVFVSRV9BRERSRVNTX0NMQU1QOworICAgIHNhbXBsZXJEZXNj
LkFkZHJlc3NWID0gRDNEMTFfVEVYVFVSRV9BRERSRVNTX0NMQU1QOworICAgIHNhbXBsZXJEZXNj
LkFkZHJlc3NXID0gRDNEMTFfVEVYVFVSRV9BRERSRVNTX0NMQU1QOworICAgIHNhbXBsZXJEZXNj
Lk1pcExPREJpYXMgPSAwLjBmOworICAgIHNhbXBsZXJEZXNjLk1heEFuaXNvdHJvcHkgPSAwOwor
ICAgIHNhbXBsZXJEZXNjLkNvbXBhcmlzb25GdW5jID0gRDNEMTFfQ09NUEFSSVNPTl9ORVZFUjsK
KyAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclswXSA9IDAuMGY7CisgICAgc2FtcGxlckRlc2Mu
Qm9yZGVyQ29sb3JbMV0gPSAwLjBmOworICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzJdID0g
MC4wZjsKKyAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclszXSA9IDAuMGY7CisgICAgc2FtcGxl
ckRlc2MuTWluTE9EID0gMDsKKyAgICBzYW1wbGVyRGVzYy5NYXhMT0QgPSBEM0QxMV9GTE9BVDMy
X01BWDsKKworICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2FtcGxlclN0YXRlKCZzYW1wbGVy
RGVzYywgJm1QYXNzVGhyb3VnaFNhbXBsZXIpOworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7CisgICAgZDNkMTE6OlNldERlYnVnTmFtZShtUGFzc1Rocm91Z2hTYW1wbGVyLCAiU3dhcCBj
aGFpbiBwYXNzIHRocm91Z2ggc2FtcGxlciIpOworCisgICAgRDNEMTFfSU5QVVRfRUxFTUVOVF9E
RVNDIHF1YWRMYXlvdXRbXSA9CisgICAgeworICAgICAgICB7ICJQT1NJVElPTiIsIDAsIERYR0lf
Rk9STUFUX1IzMkczMl9GTE9BVCwgMCwgMCwgRDNEMTFfSU5QVVRfUEVSX1ZFUlRFWF9EQVRBLCAw
IH0sCisgICAgICAgIHsgIlRFWENPT1JEIiwgMCwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCAw
LCA4LCBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAgfSwKKyAgICB9OworCisgICAgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVJbnB1dExheW91dChxdWFkTGF5b3V0LCAyLCBnX1ZTX1Bhc3N0
aHJvdWdoLCBzaXplb2YoZ19WU19QYXNzdGhyb3VnaCksICZtUGFzc1Rocm91Z2hJTCk7CisgICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1QYXNz
VGhyb3VnaElMLCAiU3dhcCBjaGFpbiBwYXNzIHRocm91Z2ggbGF5b3V0Iik7CisKKyAgICByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZVZlcnRleFNoYWRlcihnX1ZTX1Bhc3N0aHJvdWdoLCBzaXplb2Yo
Z19WU19QYXNzdGhyb3VnaCksIE5VTEwsICZtUGFzc1Rocm91Z2hWUyk7CisgICAgQVNTRVJUKFNV
Q0NFRURFRChyZXN1bHQpKTsKKyAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1QYXNzVGhyb3VnaFZT
LCAiU3dhcCBjaGFpbiBwYXNzIHRocm91Z2ggdmVydGV4IHNoYWRlciIpOworCisgICAgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihnX1BTX1Bhc3N0aHJvdWdoUkdCQSwgc2l6ZW9m
KGdfUFNfUGFzc3Rocm91Z2hSR0JBKSwgTlVMTCwgJm1QYXNzVGhyb3VnaFBTKTsKKyAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobVBhc3NUaHJv
dWdoUFMsICJTd2FwIGNoYWluIHBhc3MgdGhyb3VnaCBwaXhlbCBzaGFkZXIiKTsKK30KKworLy8g
cGFyYW1ldGVycyBzaG91bGQgYmUgdmFsaWRhdGVkL2NsYW1wZWQgYnkgY2FsbGVyCitFR0xpbnQg
U3dhcENoYWluMTE6OnN3YXBSZWN0KEVHTGludCB4LCBFR0xpbnQgeSwgRUdMaW50IHdpZHRoLCBF
R0xpbnQgaGVpZ2h0KQoreworICAgIGlmICghbVN3YXBDaGFpbikKKyAgICB7CisgICAgICAgIHJl
dHVybiBFR0xfU1VDQ0VTUzsKKyAgICB9CisKKyAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1S
ZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqZGV2aWNlQ29u
dGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworCisgICAgLy8gU2V0IHZlcnRp
Y2VzCisgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOworICAgIEhS
RVNVTFQgcmVzdWx0ID0gZGV2aWNlQ29udGV4dC0+TWFwKG1RdWFkVkIsIDAsIEQzRDExX01BUF9X
UklURV9ESVNDQVJELCAwLCAmbWFwcGVkUmVzb3VyY2UpOworICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBFR0xfQkFEX0FDQ0VTUzsKKyAgICB9CisKKyAgICBk
M2QxMTo6UG9zaXRpb25UZXhDb29yZFZlcnRleCAqdmVydGljZXMgPSBzdGF0aWNfY2FzdDxkM2Qx
MTo6UG9zaXRpb25UZXhDb29yZFZlcnRleCo+KG1hcHBlZFJlc291cmNlLnBEYXRhKTsKKworICAg
IC8vIENyZWF0ZSBhIHF1YWQgaW4gaG9tb2dlbmVvdXMgY29vcmRpbmF0ZXMKKyAgICBmbG9hdCB4
MSA9ICh4IC8gZmxvYXQobVdpZHRoKSkgKiAyLjBmIC0gMS4wZjsKKyAgICBmbG9hdCB5MSA9ICh5
IC8gZmxvYXQobUhlaWdodCkpICogMi4wZiAtIDEuMGY7CisgICAgZmxvYXQgeDIgPSAoKHggKyB3
aWR0aCkgLyBmbG9hdChtV2lkdGgpKSAqIDIuMGYgLSAxLjBmOworICAgIGZsb2F0IHkyID0gKCh5
ICsgaGVpZ2h0KSAvIGZsb2F0KG1IZWlnaHQpKSAqIDIuMGYgLSAxLjBmOworCisgICAgZmxvYXQg
dTEgPSB4IC8gZmxvYXQobVdpZHRoKTsKKyAgICBmbG9hdCB2MSA9IHkgLyBmbG9hdChtSGVpZ2h0
KTsKKyAgICBmbG9hdCB1MiA9ICh4ICsgd2lkdGgpIC8gZmxvYXQobVdpZHRoKTsKKyAgICBmbG9h
dCB2MiA9ICh5ICsgaGVpZ2h0KSAvIGZsb2F0KG1IZWlnaHQpOworCisgICAgZDNkMTE6OlNldFBv
c2l0aW9uVGV4Q29vcmRWZXJ0ZXgoJnZlcnRpY2VzWzBdLCB4MSwgeTEsIHUxLCB2MSk7CisgICAg
ZDNkMTE6OlNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgoJnZlcnRpY2VzWzFdLCB4MSwgeTIsIHUx
LCB2Mik7CisgICAgZDNkMTE6OlNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgoJnZlcnRpY2VzWzJd
LCB4MiwgeTEsIHUyLCB2MSk7CisgICAgZDNkMTE6OlNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgo
JnZlcnRpY2VzWzNdLCB4MiwgeTIsIHUyLCB2Mik7CisKKyAgICBkZXZpY2VDb250ZXh0LT5Vbm1h
cChtUXVhZFZCLCAwKTsKKworICAgIHN0YXRpYyBVSU5UIHN0cmlkZSA9IHNpemVvZihkM2QxMTo6
UG9zaXRpb25UZXhDb29yZFZlcnRleCk7CisgICAgc3RhdGljIFVJTlQgc3RhcnRJZHggPSAwOwor
ICAgIGRldmljZUNvbnRleHQtPklBU2V0VmVydGV4QnVmZmVycygwLCAxLCAmbVF1YWRWQiwgJnN0
cmlkZSwgJnN0YXJ0SWR4KTsKKworICAgIC8vIEFwcGx5IHN0YXRlCisgICAgZGV2aWNlQ29udGV4
dC0+T01TZXREZXB0aFN0ZW5jaWxTdGF0ZShOVUxMLCAweEZGRkZGRkZGKTsKKworICAgIHN0YXRp
YyBjb25zdCBmbG9hdCBibGVuZEZhY3Rvcls0XSA9IHsgMS4wZiwgMS4wZiwgMS4wZiwgMS4wZiB9
OworICAgIGRldmljZUNvbnRleHQtPk9NU2V0QmxlbmRTdGF0ZShOVUxMLCBibGVuZEZhY3Rvciwg
MHhGRkZGRkZGKTsKKworICAgIGRldmljZUNvbnRleHQtPlJTU2V0U3RhdGUoTlVMTCk7CisKKyAg
ICAvLyBBcHBseSBzaGFkZXJzCisgICAgZGV2aWNlQ29udGV4dC0+SUFTZXRJbnB1dExheW91dCht
UGFzc1Rocm91Z2hJTCk7CisgICAgZGV2aWNlQ29udGV4dC0+SUFTZXRQcmltaXRpdmVUb3BvbG9n
eShEM0RfUFJJTUlUSVZFX1RPUE9MT0dZX1RSSUFOR0xFU1RSSVApOworICAgIGRldmljZUNvbnRl
eHQtPlZTU2V0U2hhZGVyKG1QYXNzVGhyb3VnaFZTLCBOVUxMLCAwKTsKKyAgICBkZXZpY2VDb250
ZXh0LT5QU1NldFNoYWRlcihtUGFzc1Rocm91Z2hQUywgTlVMTCwgMCk7CisgICAgZGV2aWNlQ29u
dGV4dC0+R1NTZXRTaGFkZXIoTlVMTCwgTlVMTCwgMCk7CisKKyAgICAvLyBBcHBseSByZW5kZXIg
dGFyZ2V0cworICAgIG1SZW5kZXJlci0+c2V0T25lVGltZVJlbmRlclRhcmdldChtQmFja0J1ZmZl
clJUVmlldyk7CisKKyAgICAvLyBTZXQgdGhlIHZpZXdwb3J0CisgICAgRDNEMTFfVklFV1BPUlQg
dmlld3BvcnQ7CisgICAgdmlld3BvcnQuVG9wTGVmdFggPSAwOworICAgIHZpZXdwb3J0LlRvcExl
ZnRZID0gMDsKKyAgICB2aWV3cG9ydC5XaWR0aCA9IG1XaWR0aDsKKyAgICB2aWV3cG9ydC5IZWln
aHQgPSBtSGVpZ2h0OworICAgIHZpZXdwb3J0Lk1pbkRlcHRoID0gMC4wZjsKKyAgICB2aWV3cG9y
dC5NYXhEZXB0aCA9IDEuMGY7CisgICAgZGV2aWNlQ29udGV4dC0+UlNTZXRWaWV3cG9ydHMoMSwg
JnZpZXdwb3J0KTsKKworICAgIC8vIEFwcGx5IHRleHR1cmVzCisgICAgZGV2aWNlQ29udGV4dC0+
UFNTZXRTaGFkZXJSZXNvdXJjZXMoMCwgMSwgJm1PZmZzY3JlZW5TUlZpZXcpOworICAgIGRldmlj
ZUNvbnRleHQtPlBTU2V0U2FtcGxlcnMoMCwgMSwgJm1QYXNzVGhyb3VnaFNhbXBsZXIpOworCisg
ICAgLy8gRHJhdworICAgIGRldmljZUNvbnRleHQtPkRyYXcoNCwgMCk7CisKKyNpZiBBTkdMRV9G
T1JDRV9WU1lOQ19PRkYKKyAgICByZXN1bHQgPSBtU3dhcENoYWluLT5QcmVzZW50KDAsIDApOwor
I2Vsc2UKKyAgICByZXN1bHQgPSBtU3dhcENoYWluLT5QcmVzZW50KG1Td2FwSW50ZXJ2YWwsIDAp
OworI2VuZGlmCisKKyAgICBpZiAocmVzdWx0ID09IERYR0lfRVJST1JfREVWSUNFX1JFTU9WRUQp
CisgICAgeworICAgICAgICBIUkVTVUxUIHJlbW92ZWRSZWFzb24gPSBkZXZpY2UtPkdldERldmlj
ZVJlbW92ZWRSZWFzb24oKTsKKyAgICAgICAgRVJSKCJQcmVzZW50IGZhaWxlZDogdGhlIEQzRDEx
IGRldmljZSB3YXMgcmVtb3ZlZDogMHglMDhYIiwgcmVtb3ZlZFJlYXNvbik7CisgICAgICAgIHJl
dHVybiBFR0xfQ09OVEVYVF9MT1NUOworICAgIH0KKyAgICBlbHNlIGlmIChyZXN1bHQgPT0gRFhH
SV9FUlJPUl9ERVZJQ0VfUkVTRVQpCisgICAgeworICAgICAgICBFUlIoIlByZXNlbnQgZmFpbGVk
OiB0aGUgRDNEMTEgZGV2aWNlIHdhcyByZXNldCBmcm9tIGEgYmFkIGNvbW1hbmQuIik7CisgICAg
ICAgIHJldHVybiBFR0xfQ09OVEVYVF9MT1NUOworICAgIH0KKyAgICBlbHNlIGlmIChGQUlMRUQo
cmVzdWx0KSkKKyAgICB7CisgICAgICAgIEVSUigiUHJlc2VudCBmYWlsZWQgd2l0aCBlcnJvciBj
b2RlIDB4JTA4WCIsIHJlc3VsdCk7CisgICAgfQorCisgICAgLy8gVW5iaW5kCisgICAgc3RhdGlj
IElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqY29uc3QgbnVsbFNSViA9IE5VTEw7CisgICAgZGV2
aWNlQ29udGV4dC0+UFNTZXRTaGFkZXJSZXNvdXJjZXMoMCwgMSwgJm51bGxTUlYpOworCisgICAg
bVJlbmRlcmVyLT51bmFwcGx5UmVuZGVyVGFyZ2V0cygpOworICAgIG1SZW5kZXJlci0+bWFya0Fs
bFN0YXRlRGlydHkoKTsKKworICAgIHJldHVybiBFR0xfU1VDQ0VTUzsKK30KKworLy8gSW5jcmVt
ZW50cyByZWZjb3VudCBvbiB0ZXh0dXJlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSBy
ZXR1cm5lZCB0ZXh0dXJlCitJRDNEMTFUZXh0dXJlMkQgKlN3YXBDaGFpbjExOjpnZXRPZmZzY3Jl
ZW5UZXh0dXJlKCkKK3sKKyAgICBpZiAobU9mZnNjcmVlblRleHR1cmUpCisgICAgeworICAgICAg
ICBtT2Zmc2NyZWVuVGV4dHVyZS0+QWRkUmVmKCk7CisgICAgfQorCisgICAgcmV0dXJuIG1PZmZz
Y3JlZW5UZXh0dXJlOworfQorCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHZpZXcuCisvLyBj
YWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHZpZXcKK0lEM0QxMVJlbmRlclRhcmdl
dFZpZXcgKlN3YXBDaGFpbjExOjpnZXRSZW5kZXJUYXJnZXQoKQoreworICAgIGlmIChtT2Zmc2Ny
ZWVuUlRWaWV3KQorICAgIHsKKyAgICAgICAgbU9mZnNjcmVlblJUVmlldy0+QWRkUmVmKCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIG1PZmZzY3JlZW5SVFZpZXc7Cit9CisKKy8vIEluY3JlbWVudHMg
cmVmY291bnQgb24gdmlldy4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQg
dmlldworSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpTd2FwQ2hhaW4xMTo6Z2V0UmVuZGVyVGFy
Z2V0U2hhZGVyUmVzb3VyY2UoKQoreworICAgIGlmIChtT2Zmc2NyZWVuU1JWaWV3KQorICAgIHsK
KyAgICAgICAgbU9mZnNjcmVlblNSVmlldy0+QWRkUmVmKCk7CisgICAgfQorCisgICAgcmV0dXJu
IG1PZmZzY3JlZW5TUlZpZXc7Cit9CisKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gdmlldy4K
Ky8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgdmlldworSUQzRDExRGVwdGhT
dGVuY2lsVmlldyAqU3dhcENoYWluMTE6OmdldERlcHRoU3RlbmNpbCgpCit7CisgICAgaWYgKG1E
ZXB0aFN0ZW5jaWxEU1ZpZXcpCisgICAgeworICAgICAgICBtRGVwdGhTdGVuY2lsRFNWaWV3LT5B
ZGRSZWYoKTsKKyAgICB9CisKKyAgICByZXR1cm4gbURlcHRoU3RlbmNpbERTVmlldzsKK30KKwor
SUQzRDExVGV4dHVyZTJEICpTd2FwQ2hhaW4xMTo6Z2V0RGVwdGhTdGVuY2lsVGV4dHVyZSgpCit7
CisgICAgaWYgKG1EZXB0aFN0ZW5jaWxUZXh0dXJlKQorICAgIHsKKyAgICAgICAgbURlcHRoU3Rl
bmNpbFRleHR1cmUtPkFkZFJlZigpOworICAgIH0KKworICAgIHJldHVybiBtRGVwdGhTdGVuY2ls
VGV4dHVyZTsKK30KKworU3dhcENoYWluMTEgKlN3YXBDaGFpbjExOjptYWtlU3dhcENoYWluMTEo
U3dhcENoYWluICpzd2FwQ2hhaW4pCit7CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUocng6
OlN3YXBDaGFpbjExKiwgc3dhcENoYWluKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHJ4OjpT
d2FwQ2hhaW4xMSo+KHN3YXBDaGFpbik7Cit9CisKK3ZvaWQgU3dhcENoYWluMTE6OnJlY3JlYXRl
KCkKK3sKKyAgICAvLyBwb3NzaWJseSBzaG91bGQgdXNlIHRoaXMgbWV0aG9kIGluc3RlYWQgb2Yg
cmVzZXQKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9Td2FwQ2hhaW4xMS5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9Td2FwQ2hhaW4xMS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjgwMDEwNDYwMmUzNWIwYmNiYTExMDM5YTE2ZWJmYzYxMTE2MWVmNjEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDExL1N3YXBDaGFpbjExLmgKQEAgLTAsMCArMSw3OCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFN3
YXBDaGFpbjExLmg6IERlZmluZXMgYSBiYWNrLWVuZCBzcGVjaWZpYyBjbGFzcyBmb3IgdGhlIEQz
RDExIHN3YXAgY2hhaW4uCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX1NXQVBDSEFJTjEx
X0hfCisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9TV0FQQ0hBSU4xMV9IXworCisjaW5jbHVk
ZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvU3dh
cENoYWluLmgiCisKK25hbWVzcGFjZSByeAoreworY2xhc3MgUmVuZGVyZXIxMTsKKworY2xhc3Mg
U3dhcENoYWluMTEgOiBwdWJsaWMgU3dhcENoYWluCit7CisgIHB1YmxpYzoKKyAgICBTd2FwQ2hh
aW4xMShSZW5kZXJlcjExICpyZW5kZXJlciwgSFdORCB3aW5kb3csIEhBTkRMRSBzaGFyZUhhbmRs
ZSwKKyAgICAgICAgICAgICAgICBHTGVudW0gYmFja0J1ZmZlckZvcm1hdCwgR0xlbnVtIGRlcHRo
QnVmZmVyRm9ybWF0KTsKKyAgICB2aXJ0dWFsIH5Td2FwQ2hhaW4xMSgpOworCisgICAgRUdMaW50
IHJlc2l6ZShFR0xpbnQgYmFja2J1ZmZlcldpZHRoLCBFR0xpbnQgYmFja2J1ZmZlckhlaWdodCk7
CisgICAgdmlydHVhbCBFR0xpbnQgcmVzZXQoRUdMaW50IGJhY2tidWZmZXJXaWR0aCwgRUdMaW50
IGJhY2tidWZmZXJIZWlnaHQsIEVHTGludCBzd2FwSW50ZXJ2YWwpOworICAgIHZpcnR1YWwgRUdM
aW50IHN3YXBSZWN0KEVHTGludCB4LCBFR0xpbnQgeSwgRUdMaW50IHdpZHRoLCBFR0xpbnQgaGVp
Z2h0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjcmVhdGUoKTsKKworICAgIHZpcnR1YWwgSUQzRDEx
VGV4dHVyZTJEICpnZXRPZmZzY3JlZW5UZXh0dXJlKCk7CisgICAgdmlydHVhbCBJRDNEMTFSZW5k
ZXJUYXJnZXRWaWV3ICpnZXRSZW5kZXJUYXJnZXQoKTsKKyAgICB2aXJ0dWFsIElEM0QxMVNoYWRl
clJlc291cmNlVmlldyAqZ2V0UmVuZGVyVGFyZ2V0U2hhZGVyUmVzb3VyY2UoKTsKKworICAgIHZp
cnR1YWwgSUQzRDExVGV4dHVyZTJEICpnZXREZXB0aFN0ZW5jaWxUZXh0dXJlKCk7CisgICAgdmly
dHVhbCBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpnZXREZXB0aFN0ZW5jaWwoKTsKKworICAgIEVH
TGludCBnZXRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1XaWR0aDsgfQorICAgIEVHTGludCBnZXRI
ZWlnaHQoKSBjb25zdCB7IHJldHVybiBtSGVpZ2h0OyB9CisKKyAgICBzdGF0aWMgU3dhcENoYWlu
MTEgKm1ha2VTd2FwQ2hhaW4xMShTd2FwQ2hhaW4gKnN3YXBDaGFpbik7CisKKyAgcHJpdmF0ZToK
KyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU3dhcENoYWluMTEpOworCisgICAgdm9pZCBy
ZWxlYXNlKCk7CisgICAgdm9pZCBpbml0UGFzc1Rocm91Z2hSZXNvdXJjZXMoKTsKKyAgICB2b2lk
IHJlbGVhc2VPZmZzY3JlZW5UZXh0dXJlKCk7CisgICAgRUdMaW50IHJlc2V0T2Zmc2NyZWVuVGV4
dHVyZShpbnQgYmFja2J1ZmZlcldpZHRoLCBpbnQgYmFja2J1ZmZlckhlaWdodCk7CisKKyAgICBS
ZW5kZXJlcjExICptUmVuZGVyZXI7CisgICAgRUdMaW50IG1IZWlnaHQ7CisgICAgRUdMaW50IG1X
aWR0aDsKKyAgICBib29sIG1BcHBDcmVhdGVkU2hhcmVIYW5kbGU7CisgICAgdW5zaWduZWQgaW50
IG1Td2FwSW50ZXJ2YWw7CisgICAgYm9vbCBtUGFzc1Rocm91Z2hSZXNvdXJjZXNJbml0OworCisg
ICAgSURYR0lTd2FwQ2hhaW4gKm1Td2FwQ2hhaW47CisKKyAgICBJRDNEMTFUZXh0dXJlMkQgKm1C
YWNrQnVmZmVyVGV4dHVyZTsKKyAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICptQmFja0J1ZmZl
clJUVmlldzsKKworICAgIElEM0QxMVRleHR1cmUyRCAqbU9mZnNjcmVlblRleHR1cmU7CisgICAg
SUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqbU9mZnNjcmVlblJUVmlldzsKKyAgICBJRDNEMTFTaGFk
ZXJSZXNvdXJjZVZpZXcgKm1PZmZzY3JlZW5TUlZpZXc7CisKKyAgICBJRDNEMTFUZXh0dXJlMkQg
Km1EZXB0aFN0ZW5jaWxUZXh0dXJlOworICAgIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKm1EZXB0
aFN0ZW5jaWxEU1ZpZXc7CisKKyAgICBJRDNEMTFCdWZmZXIgKm1RdWFkVkI7CisgICAgSUQzRDEx
U2FtcGxlclN0YXRlICptUGFzc1Rocm91Z2hTYW1wbGVyOworICAgIElEM0QxMUlucHV0TGF5b3V0
ICptUGFzc1Rocm91Z2hJTDsKKyAgICBJRDNEMTFWZXJ0ZXhTaGFkZXIgKm1QYXNzVGhyb3VnaFZT
OworICAgIElEM0QxMVBpeGVsU2hhZGVyICptUGFzc1Rocm91Z2hQUzsKK307CisKK30KKyNlbmRp
ZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfU1dBUENIQUlOMTFfSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVGV4dHVyZVN0
b3JhZ2UxMS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL1RleHR1cmVTdG9yYWdlMTEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVmNmVhMjEyZDVhMDYw
MTc5Nzk4YThjZDBmODAyNzRhOTVjNmI0OWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1RleHR1cmVTdG9yYWdl
MTEuY3BwCkBAIC0wLDAgKzEsNjY3IEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisvLyBUZXh0dXJlU3RvcmFnZTExLmNwcDogSW1wbGVtZW50cyB0aGUgYWJzdHJh
Y3Qgcng6OlRleHR1cmVTdG9yYWdlMTEgY2xhc3MgYW5kIGl0cyBjb25jcmV0ZSBkZXJpdmVkCisv
LyBjbGFzc2VzIFRleHR1cmVTdG9yYWdlMTFfMkQgYW5kIFRleHR1cmVTdG9yYWdlMTFfQ3ViZSwg
d2hpY2ggYWN0IGFzIHRoZSBpbnRlcmZhY2UgdG8gdGhlIEQzRDExIHRleHR1cmUuCisKKyNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVGV4dHVyZVN0b3JhZ2UxMS5oIgorCisjaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFyZ2V0MTEuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dhcENoYWluMTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oIgorCisjaW5jbHVkZSAibGliR0xFU3Yy
L3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisKK25hbWVzcGFjZSBy
eAoreworCitUZXh0dXJlU3RvcmFnZTExOjpUZXh0dXJlU3RvcmFnZTExKFJlbmRlcmVyICpyZW5k
ZXJlciwgVUlOVCBiaW5kRmxhZ3MpCisgICAgOiBtQmluZEZsYWdzKGJpbmRGbGFncyksCisgICAg
ICBtTG9kT2Zmc2V0KDApLAorICAgICAgbU1pcExldmVscygwKSwKKyAgICAgIG1UZXh0dXJlKE5V
TEwpLAorICAgICAgbVRleHR1cmVGb3JtYXQoRFhHSV9GT1JNQVRfVU5LTk9XTiksCisgICAgICBt
U2hhZGVyUmVzb3VyY2VGb3JtYXQoRFhHSV9GT1JNQVRfVU5LTk9XTiksCisgICAgICBtUmVuZGVy
VGFyZ2V0Rm9ybWF0KERYR0lfRk9STUFUX1VOS05PV04pLAorICAgICAgbURlcHRoU3RlbmNpbEZv
cm1hdChEWEdJX0ZPUk1BVF9VTktOT1dOKSwKKyAgICAgIG1TUlYoTlVMTCksCisgICAgICBtVGV4
dHVyZVdpZHRoKDApLAorICAgICAgbVRleHR1cmVIZWlnaHQoMCkKK3sKKyAgICBtUmVuZGVyZXIg
PSBSZW5kZXJlcjExOjptYWtlUmVuZGVyZXIxMShyZW5kZXJlcik7Cit9CisKK1RleHR1cmVTdG9y
YWdlMTE6On5UZXh0dXJlU3RvcmFnZTExKCkKK3sKK30KKworVGV4dHVyZVN0b3JhZ2UxMSAqVGV4
dHVyZVN0b3JhZ2UxMTo6bWFrZVRleHR1cmVTdG9yYWdlMTEoVGV4dHVyZVN0b3JhZ2UgKnN0b3Jh
Z2UpCit7CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoVGV4dHVyZVN0b3JhZ2UxMSosIHN0
b3JhZ2UpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZVN0b3JhZ2UxMSo+KHN0b3Jh
Z2UpOworfQorCitEV09SRCBUZXh0dXJlU3RvcmFnZTExOjpHZXRUZXh0dXJlQmluZEZsYWdzKERY
R0lfRk9STUFUIGZvcm1hdCwgR0xlbnVtIGdsdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlKQor
eworICAgIFVJTlQgYmluZEZsYWdzID0gRDNEMTFfQklORF9TSEFERVJfUkVTT1VSQ0U7CisgICAg
CisgICAgaWYgKGQzZDExOjpJc0RlcHRoU3RlbmNpbEZvcm1hdChmb3JtYXQpKQorICAgIHsKKyAg
ICAgICAgYmluZEZsYWdzIHw9IEQzRDExX0JJTkRfREVQVEhfU1RFTkNJTDsKKyAgICB9CisgICAg
ZWxzZSBpZihmb3JjZVJlbmRlcmFibGUgfHwgKFRleHR1cmVTdG9yYWdlMTE6OklzVGV4dHVyZUZv
cm1hdFJlbmRlcmFibGUoZm9ybWF0KSAmJiAoZ2x1c2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRB
Q0hNRU5UX0FOR0xFKSkpCisgICAgeworICAgICAgICBiaW5kRmxhZ3MgfD0gRDNEMTFfQklORF9S
RU5ERVJfVEFSR0VUOworICAgIH0KKyAgICByZXR1cm4gYmluZEZsYWdzOworfQorCitib29sIFRl
eHR1cmVTdG9yYWdlMTE6OklzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoRFhHSV9GT1JNQVQgZm9y
bWF0KQoreworICAgIHN3aXRjaChmb3JtYXQpCisgICAgeworICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9SOEc4QjhBOF9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQThfVU5PUk06CisgICAg
ICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDoKKyAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjE2RzE2QjE2QTE2X0ZMT0FUOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhB
OF9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVU5PUk06CisgICAgICBjYXNlIERY
R0lfRk9STUFUX1I4RzhfVU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IxNl9GTE9BVDoK
KyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X0ZMT0FUOgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzJfVU5PUk06IAorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk06CisgICAg
ICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVDogLy8gbm90IHJlbmRlcmFibGUgb24g
YWxsIGRldmljZXMKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworVUlO
VCBUZXh0dXJlU3RvcmFnZTExOjpnZXRCaW5kRmxhZ3MoKSBjb25zdAoreworICAgIHJldHVybiBt
QmluZEZsYWdzOworfQorCitJRDNEMTFUZXh0dXJlMkQgKlRleHR1cmVTdG9yYWdlMTE6OmdldEJh
c2VUZXh0dXJlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmU7Cit9CisKK2ludCBUZXh0
dXJlU3RvcmFnZTExOjpnZXRMb2RPZmZzZXQoKSBjb25zdAoreworICAgIHJldHVybiBtTG9kT2Zm
c2V0OworfQorCitib29sIFRleHR1cmVTdG9yYWdlMTE6OmlzUmVuZGVyVGFyZ2V0KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gKG1CaW5kRmxhZ3MgJiAoRDNEMTFfQklORF9SRU5ERVJfVEFSR0VUIHwg
RDNEMTFfQklORF9ERVBUSF9TVEVOQ0lMKSkgIT0gMDsKK30KKyAgICAKK2Jvb2wgVGV4dHVyZVN0
b3JhZ2UxMTo6aXNNYW5hZ2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lu
dCBUZXh0dXJlU3RvcmFnZTExOjpsZXZlbENvdW50KCkKK3sKKyAgICBpbnQgbGV2ZWxzID0gMDsK
KyAgICBpZiAoZ2V0QmFzZVRleHR1cmUoKSkKKyAgICB7CisgICAgICAgIGxldmVscyA9IG1NaXBM
ZXZlbHMgLSBnZXRMb2RPZmZzZXQoKTsKKyAgICB9CisgICAgcmV0dXJuIGxldmVsczsKK30KKwor
VUlOVCBUZXh0dXJlU3RvcmFnZTExOjpnZXRTdWJyZXNvdXJjZUluZGV4KGludCBsZXZlbCwgaW50
IGZhY2VJbmRleCkKK3sKKyAgICBVSU5UIGluZGV4ID0gMDsKKyAgICBpZiAoZ2V0QmFzZVRleHR1
cmUoKSkKKyAgICB7CisgICAgICAgIGluZGV4ID0gRDNEMTFDYWxjU3VicmVzb3VyY2UobGV2ZWws
IGZhY2VJbmRleCwgbU1pcExldmVscyk7CisgICAgfQorICAgIHJldHVybiBpbmRleDsKK30KKwor
Ym9vbCBUZXh0dXJlU3RvcmFnZTExOjp1cGRhdGVTdWJyZXNvdXJjZUxldmVsKElEM0QxMVRleHR1
cmUyRCAqc3JjVGV4dHVyZSwgdW5zaWduZWQgaW50IHNvdXJjZVN1YnJlc291cmNlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZXZlbCwgaW50IGZh
Y2UsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7
CisgICAgaWYgKHNyY1RleHR1cmUpCisgICAgeworICAgICAgICAvLyBSb3VuZCB1cCB0aGUgd2lk
dGggYW5kIGhlaWdodCB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiBkaW1lbnNpb24gYWxpZ25t
ZW50CisgICAgICAgIHVuc2lnbmVkIGludCBkaW1lbnNpb25BbGlnbm1lbnQgPSBkM2QxMTo6R2V0
VGV4dHVyZUZvcm1hdERpbWVuc2lvbkFsaWdubWVudChtVGV4dHVyZUZvcm1hdCk7CisgICAgICAg
IHdpZHRoID0gd2lkdGggKyBkaW1lbnNpb25BbGlnbm1lbnQgLSAxIC0gKHdpZHRoIC0gMSkgJSBk
aW1lbnNpb25BbGlnbm1lbnQ7CisgICAgICAgIGhlaWdodCA9IGhlaWdodCArIGRpbWVuc2lvbkFs
aWdubWVudCAtIDEgLSAoaGVpZ2h0IC0gMSkgJSBkaW1lbnNpb25BbGlnbm1lbnQ7CisKKyAgICAg
ICAgRDNEMTFfQk9YIHNyY0JveDsKKyAgICAgICAgc3JjQm94LmxlZnQgPSB4b2Zmc2V0OworICAg
ICAgICBzcmNCb3gudG9wID0geW9mZnNldDsKKyAgICAgICAgc3JjQm94LnJpZ2h0ID0geG9mZnNl
dCArIHdpZHRoOworICAgICAgICBzcmNCb3guYm90dG9tID0geW9mZnNldCArIGhlaWdodDsKKyAg
ICAgICAgc3JjQm94LmZyb250ID0gMDsKKyAgICAgICAgc3JjQm94LmJhY2sgPSAxOworCisgICAg
ICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNv
bnRleHQoKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChnZXRCYXNlVGV4dHVyZSgpKTsKKyAg
ICAgICAgY29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKGdldEJhc2VUZXh0dXJlKCksIGdl
dFN1YnJlc291cmNlSW5kZXgobGV2ZWwgKyBtTG9kT2Zmc2V0LCBmYWNlKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIDAsIHNyY1RleHR1
cmUsIHNvdXJjZVN1YnJlc291cmNlLCAmc3JjQm94KTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFRleHR1cmVTdG9yYWdlMTE6Omdl
bmVyYXRlTWlwbWFwTGF5ZXIoUmVuZGVyVGFyZ2V0MTEgKnNvdXJjZSwgUmVuZGVyVGFyZ2V0MTEg
KmRlc3QpCit7CisgICAgaWYgKHNvdXJjZSAmJiBkZXN0KQorICAgIHsKKyAgICAgICAgSUQzRDEx
U2hhZGVyUmVzb3VyY2VWaWV3ICpzb3VyY2VTUlYgPSBzb3VyY2UtPmdldFNoYWRlclJlc291cmNl
VmlldygpOworICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpkZXN0UlRWID0gZGVzdC0+
Z2V0UmVuZGVyVGFyZ2V0VmlldygpOworCisgICAgICAgIGlmIChzb3VyY2VTUlYgJiYgZGVzdFJU
VikKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlJlY3RhbmdsZSBzb3VyY2VBcmVhOworICAg
ICAgICAgICAgc291cmNlQXJlYS54ID0gMDsKKyAgICAgICAgICAgIHNvdXJjZUFyZWEueSA9IDA7
CisgICAgICAgICAgICBzb3VyY2VBcmVhLndpZHRoID0gc291cmNlLT5nZXRXaWR0aCgpOworICAg
ICAgICAgICAgc291cmNlQXJlYS5oZWlnaHQgPSBzb3VyY2UtPmdldEhlaWdodCgpOworCisgICAg
ICAgICAgICBnbDo6UmVjdGFuZ2xlIGRlc3RBcmVhOworICAgICAgICAgICAgZGVzdEFyZWEueCA9
IDA7CisgICAgICAgICAgICBkZXN0QXJlYS55ID0gMDsKKyAgICAgICAgICAgIGRlc3RBcmVhLndp
ZHRoID0gZGVzdC0+Z2V0V2lkdGgoKTsKKyAgICAgICAgICAgIGRlc3RBcmVhLmhlaWdodCA9IGRl
c3QtPmdldEhlaWdodCgpOworCisgICAgICAgICAgICBtUmVuZGVyZXItPmNvcHlUZXh0dXJlKHNv
dXJjZVNSViwgc291cmNlQXJlYSwgc291cmNlLT5nZXRXaWR0aCgpLCBzb3VyY2UtPmdldEhlaWdo
dCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0UlRWLCBkZXN0QXJl
YSwgZGVzdC0+Z2V0V2lkdGgoKSwgZGVzdC0+Z2V0SGVpZ2h0KCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMX1JHQkEpOworICAgICAgICB9CisgICAgfQorfQorCitUZXh0
dXJlU3RvcmFnZTExXzJEOjpUZXh0dXJlU3RvcmFnZTExXzJEKFJlbmRlcmVyICpyZW5kZXJlciwg
U3dhcENoYWluMTEgKnN3YXBjaGFpbikKKyAgICA6IFRleHR1cmVTdG9yYWdlMTEocmVuZGVyZXIs
IEQzRDExX0JJTkRfUkVOREVSX1RBUkdFVCB8IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFKQor
eworICAgIG1UZXh0dXJlID0gc3dhcGNoYWluLT5nZXRPZmZzY3JlZW5UZXh0dXJlKCk7CisgICAg
bVNSViA9IHN3YXBjaGFpbi0+Z2V0UmVuZGVyVGFyZ2V0U2hhZGVyUmVzb3VyY2UoKTsKKworICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhU
VVJFX0xFVkVMUzsgaSsrKQorICAgIHsKKyAgICAgICAgbVJlbmRlclRhcmdldFtpXSA9IE5VTEw7
CisgICAgfQorCisgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4RGVzYzsKKyAgICBtVGV4dHVy
ZS0+R2V0RGVzYygmdGV4RGVzYyk7CisgICAgbU1pcExldmVscyA9IHRleERlc2MuTWlwTGV2ZWxz
OworICAgIG1UZXh0dXJlRm9ybWF0ID0gdGV4RGVzYy5Gb3JtYXQ7CisgICAgbVRleHR1cmVXaWR0
aCA9IHRleERlc2MuV2lkdGg7CisgICAgbVRleHR1cmVIZWlnaHQgPSB0ZXhEZXNjLkhlaWdodDsK
KworICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKKyAgICBtU1JW
LT5HZXREZXNjKCZzcnZEZXNjKTsKKyAgICBtU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBzcnZEZXNj
LkZvcm1hdDsKKworICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcqIG9mZnNjcmVlblJUViA9IHN3
YXBjaGFpbi0+Z2V0UmVuZGVyVGFyZ2V0KCk7CisgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9WSUVX
X0RFU0MgcnR2RGVzYzsKKyAgICBvZmZzY3JlZW5SVFYtPkdldERlc2MoJnJ0dkRlc2MpOworICAg
IG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBydHZEZXNjLkZvcm1hdDsKKyAgICBvZmZzY3JlZW5SVFYt
PlJlbGVhc2UoKTsKKworICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBEWEdJX0ZPUk1BVF9VTktO
T1dOOworfQorCitUZXh0dXJlU3RvcmFnZTExXzJEOjpUZXh0dXJlU3RvcmFnZTExXzJEKFJlbmRl
cmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0g
dXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCkKKyAgICA6IFRleHR1cmVTdG9yYWdlMTEocmVuZGVyZXIsIEdldFRleHR1cmVCaW5kRmxhZ3Mo
Z2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlRm9ybWF0KGludGVybmFsZm9ybWF0KSwgdXNhZ2UsIGZv
cmNlUmVuZGVyYWJsZSkpCit7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6
SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCisgICAgeworICAgICAgICBt
UmVuZGVyVGFyZ2V0W2ldID0gTlVMTDsKKyAgICB9CisKKyAgICBEWEdJX0ZPUk1BVCBjb252ZXJ0
ZWRGb3JtYXQgPSBnbF9kM2QxMTo6Q29udmVydFRleHR1cmVGb3JtYXQoaW50ZXJuYWxmb3JtYXQp
OworICAgIGlmIChkM2QxMTo6SXNEZXB0aFN0ZW5jaWxGb3JtYXQoY29udmVydGVkRm9ybWF0KSkK
KyAgICB7CisgICAgICAgIG1UZXh0dXJlRm9ybWF0ID0gZDNkMTE6OkdldERlcHRoVGV4dHVyZUZv
cm1hdChjb252ZXJ0ZWRGb3JtYXQpOworICAgICAgICBtU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBk
M2QxMTo6R2V0RGVwdGhTaGFkZXJSZXNvdXJjZUZvcm1hdChjb252ZXJ0ZWRGb3JtYXQpOworICAg
ICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0ID0gY29udmVydGVkRm9ybWF0OworICAgICAgICBtUmVu
ZGVyVGFyZ2V0Rm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5LTk9XTjsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgbVRleHR1cmVGb3JtYXQgPSBjb252ZXJ0ZWRGb3JtYXQ7CisgICAgICAg
IG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKKyAgICAgICAgbURlcHRo
U3RlbmNpbEZvcm1hdCA9IERYR0lfRk9STUFUX1VOS05PV047CisgICAgICAgIG1SZW5kZXJUYXJn
ZXRGb3JtYXQgPSBjb252ZXJ0ZWRGb3JtYXQ7CisgICAgfQorCisgICAgLy8gaWYgdGhlIHdpZHRo
IG9yIGhlaWdodCBpcyBub3QgcG9zaXRpdmUgdGhpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBp
bmNvbXBsZXRlIHRleHR1cmUKKyAgICAvLyB3ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBwaW5n
IHRoZSBkM2QgdGV4dHVyZSBjcmVhdGlvbgorICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4g
MCkKKyAgICB7CisgICAgICAgIC8vIGFkanVzdCBzaXplIGlmIG5lZWRlZCBmb3IgY29tcHJlc3Nl
ZCB0ZXh0dXJlcworICAgICAgICBnbDo6TWFrZVZhbGlkU2l6ZShmYWxzZSwgZ2w6OklzQ29tcHJl
c3NlZChpbnRlcm5hbGZvcm1hdCksICZ3aWR0aCwgJmhlaWdodCwgJm1Mb2RPZmZzZXQpOworCisg
ICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKwor
ICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXNjOworICAgICAgICBkZXNjLldpZHRoID0g
d2lkdGg7ICAgICAgLy8gQ29tcHJlc3NlZCB0ZXh0dXJlIHNpemUgY29uc3RyYWludHM/CisgICAg
ICAgIGRlc2MuSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICBkZXNjLk1pcExldmVscyA9IChsZXZl
bHMgPiAwKSA/IGxldmVscyArIG1Mb2RPZmZzZXQgOiAwOworICAgICAgICBkZXNjLkFycmF5U2l6
ZSA9IDE7CisgICAgICAgIGRlc2MuRm9ybWF0ID0gbVRleHR1cmVGb3JtYXQ7CisgICAgICAgIGRl
c2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5RdWFsaXR5
ID0gMDsKKyAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7CisgICAgICAg
IGRlc2MuQmluZEZsYWdzID0gZ2V0QmluZEZsYWdzKCk7CisgICAgICAgIGRlc2MuQ1BVQWNjZXNz
RmxhZ3MgPSAwOworICAgICAgICBkZXNjLk1pc2NGbGFncyA9IDA7CisKKyAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJm1UZXh0dXJl
KTsKKworICAgICAgICAvLyB0aGlzIGNhbiBoYXBwZW4gZnJvbSB3aW5kb3dzIFREUgorICAgICAg
ICBpZiAoZDNkMTE6OmlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1SZW5kZXJlci0+bm90aWZ5RGV2aWNlTG9zdCgpOworICAgICAgICAgICAgZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKEZBSUxF
RChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpOworICAgICAgICAgICAgRVJSKCJDcmVhdGluZyBpbWFnZSBmYWlsZWQuIik7Cisg
ICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtVGV4dHVyZS0+R2V0RGVzYygmZGVzYyk7
CisgICAgICAgICAgICBtTWlwTGV2ZWxzID0gZGVzYy5NaXBMZXZlbHM7CisgICAgICAgICAgICBt
VGV4dHVyZVdpZHRoID0gZGVzYy5XaWR0aDsKKyAgICAgICAgICAgIG1UZXh0dXJlSGVpZ2h0ID0g
ZGVzYy5IZWlnaHQ7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1RleHR1cmVTdG9yYWdlMTFfMkQ6
On5UZXh0dXJlU3RvcmFnZTExXzJEKCkKK3sKKyAgICBpZiAobVRleHR1cmUpCisgICAgeworICAg
ICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOworICAgICAgICBtVGV4dHVyZSA9IE5VTEw7CisgICAg
fQorCisgICAgaWYgKG1TUlYpCisgICAgeworICAgICAgICBtU1JWLT5SZWxlYXNlKCk7CisgICAg
ICAgIG1TUlYgPSBOVUxMOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQorICAgIHsKKyAg
ICAgICAgZGVsZXRlIG1SZW5kZXJUYXJnZXRbaV07CisgICAgICAgIG1SZW5kZXJUYXJnZXRbaV0g
PSBOVUxMOworICAgIH0KK30KKworVGV4dHVyZVN0b3JhZ2UxMV8yRCAqVGV4dHVyZVN0b3JhZ2Ux
MV8yRDo6bWFrZVRleHR1cmVTdG9yYWdlMTFfMkQoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpCit7
CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoVGV4dHVyZVN0b3JhZ2UxMV8yRCosIHN0b3Jh
Z2UpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZVN0b3JhZ2UxMV8yRCo+KHN0b3Jh
Z2UpOworfQorCitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlMTFfMkQ6OmdldFJlbmRlclRh
cmdldChpbnQgbGV2ZWwpCit7CisgICAgaWYgKGxldmVsID49IDAgJiYgbGV2ZWwgPCBzdGF0aWNf
Y2FzdDxpbnQ+KG1NaXBMZXZlbHMpKQorICAgIHsKKyAgICAgICAgaWYgKCFtUmVuZGVyVGFyZ2V0
W2xldmVsXSkKKyAgICAgICAgeworICAgICAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBt
UmVuZGVyZXItPmdldERldmljZSgpOworICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQ7CisKKyAg
ICAgICAgICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKKyAgICAg
ICAgICAgIHNydkRlc2MuRm9ybWF0ID0gbVNoYWRlclJlc291cmNlRm9ybWF0OworICAgICAgICAg
ICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfU1JWX0RJTUVOU0lPTl9URVhUVVJFMkQ7
CisgICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyRC5Nb3N0RGV0YWlsZWRNaXAgPSBsZXZlbDsK
KyAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJELk1pcExldmVscyA9IDE7CisKKyAgICAgICAg
ICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2OworICAgICAgICAgICAgcmVzdWx0ID0g
ZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcobVRleHR1cmUsICZzcnZEZXNjLCAmc3J2
KTsKKworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
c3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICAgICAgaWYgKG1SZW5k
ZXJUYXJnZXRGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOworICAg
ICAgICAgICAgICAgIHJ0dkRlc2MuRm9ybWF0ID0gbVJlbmRlclRhcmdldEZvcm1hdDsKKyAgICAg
ICAgICAgICAgICBydHZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9SVFZfRElNRU5TSU9OX1RF
WFRVUkUyRDsKKyAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IGxl
dmVsOworCisgICAgICAgICAgICAgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqcnR2OworICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0VmlldyhtVGV4
dHVyZSwgJnJ0dkRlc2MsICZydHYpOworCisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBF
X09VVE9GTUVNT1JZKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3J2
LT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisg
ICAgICAgICAgICAgICAgLy8gUmVuZGVyVGFyZ2V0MTEgZXhwZWN0cyB0byBiZSB0aGUgb3duZXIg
b2YgdGhlIHJlc291cmNlcyBpdCBpcyBnaXZlbiBidXQgVGV4dHVyZVN0b3JhZ2UxMQorICAgICAg
ICAgICAgICAgIC8vIGFsc28gbmVlZHMgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgdGV4dHVy
ZS4KKyAgICAgICAgICAgICAgICBtVGV4dHVyZS0+QWRkUmVmKCk7CisKKyAgICAgICAgICAgICAg
ICBtUmVuZGVyVGFyZ2V0W2xldmVsXSA9IG5ldyBSZW5kZXJUYXJnZXQxMShtUmVuZGVyZXIsIHJ0
diwgbVRleHR1cmUsIHNydiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVyZVdpZHRoID4+IGxldmVsLCAxVSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RkOjptYXgobVRleHR1cmVIZWlnaHQgPj4gbGV2ZWwsIDFVKSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIGlmIChtRGVwdGhTdGVuY2lsRm9ybWF0ICE9IERYR0lfRk9STUFU
X1VOS05PV04pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRDNEMTFfREVQVEhfU1RF
TkNJTF9WSUVXX0RFU0MgZHN2RGVzYzsKKyAgICAgICAgICAgICAgICBkc3ZEZXNjLkZvcm1hdCA9
IG1EZXB0aFN0ZW5jaWxGb3JtYXQ7CisgICAgICAgICAgICAgICAgZHN2RGVzYy5WaWV3RGltZW5z
aW9uID0gRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMkQ7CisgICAgICAgICAgICAgICAgZHN2
RGVzYy5UZXh0dXJlMkQuTWlwU2xpY2UgPSBsZXZlbDsKKyAgICAgICAgICAgICAgICBkc3ZEZXNj
LkZsYWdzID0gMDsKKworICAgICAgICAgICAgICAgIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKmRz
djsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFZp
ZXcobVRleHR1cmUsICZkc3ZEZXNjLCAmZHN2KTsKKworICAgICAgICAgICAgICAgIGlmIChyZXN1
bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHNydi0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PFJlbmRlclRhcmdldCo+KE5VTEwpKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKKworICAgICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdldDExIGV4cGVjdHMgdG8gYmUgdGhl
IG93bmVyIG9mIHRoZSByZXNvdXJjZXMgaXQgaXMgZ2l2ZW4gYnV0IFRleHR1cmVTdG9yYWdlMTEK
KyAgICAgICAgICAgICAgICAvLyBhbHNvIG5lZWRzIHRvIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhl
IHRleHR1cmUuCisgICAgICAgICAgICAgICAgbVRleHR1cmUtPkFkZFJlZigpOworCisgICAgICAg
ICAgICAgICAgbVJlbmRlclRhcmdldFtsZXZlbF0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJlbmRl
cmVyLCBkc3YsIG1UZXh0dXJlLCBzcnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobVRleHR1cmVXaWR0aCA+PiBsZXZl
bCwgMVUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6bWF4KG1UZXh0dXJlSGVpZ2h0ID4+IGxldmVsLCAxVSkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gbVJlbmRlclRhcmdldFtsZXZlbF07CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IHJldHVybiBOVUxMOworICAgIH0KK30KKworSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0
dXJlU3RvcmFnZTExXzJEOjpnZXRTUlYoKQoreworICAgIGlmICghbVNSVikKKyAgICB7CisgICAg
ICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAg
ICAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7CisgICAgICAgIHNy
dkRlc2MuRm9ybWF0ID0gbVNoYWRlclJlc291cmNlRm9ybWF0OworICAgICAgICBzcnZEZXNjLlZp
ZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyRDsKKyAgICAgICAgc3J2
RGVzYy5UZXh0dXJlMkQuTWlwTGV2ZWxzID0gKG1NaXBMZXZlbHMgPT0gMCA/IC0xIDogbU1pcExl
dmVscyk7CisgICAgICAgIHNydkRlc2MuVGV4dHVyZTJELk1vc3REZXRhaWxlZE1pcCA9IDA7CisK
KyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmll
dyhtVGV4dHVyZSwgJnNydkRlc2MsICZtU1JWKTsKKworICAgICAgICBpZiAocmVzdWx0ID09IEVf
T1VUT0ZNRU1PUlkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8SUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3Kj4oTlVM
TCkpOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAg
fQorCisgICAgcmV0dXJuIG1TUlY7Cit9CisKK3ZvaWQgVGV4dHVyZVN0b3JhZ2UxMV8yRDo6Z2Vu
ZXJhdGVNaXBtYXAoaW50IGxldmVsKQoreworICAgIFJlbmRlclRhcmdldDExICpzb3VyY2UgPSBS
ZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRlclRhcmdldChsZXZlbCAt
IDEpKTsKKyAgICBSZW5kZXJUYXJnZXQxMSAqZGVzdCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVu
ZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFyZ2V0KGxldmVsKSk7CisKKyAgICBnZW5lcmF0ZU1pcG1h
cExheWVyKHNvdXJjZSwgZGVzdCk7Cit9CisKK1RleHR1cmVTdG9yYWdlMTFfQ3ViZTo6VGV4dHVy
ZVN0b3JhZ2UxMV9DdWJlKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBpbnQgc2l6
ZSkKKyAgICA6IFRleHR1cmVTdG9yYWdlMTEocmVuZGVyZXIsIEdldFRleHR1cmVCaW5kRmxhZ3Mo
Z2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlRm9ybWF0KGludGVybmFsZm9ybWF0KSwgdXNhZ2UsIGZv
cmNlUmVuZGVyYWJsZSkpCit7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCA2OyBp
KyspCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IGdsOjpJTVBM
RU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGorKykKKyAgICAgICAgeworICAgICAgICAg
ICAgbVJlbmRlclRhcmdldFtpXVtqXSA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBE
WEdJX0ZPUk1BVCBjb252ZXJ0ZWRGb3JtYXQgPSBnbF9kM2QxMTo6Q29udmVydFRleHR1cmVGb3Jt
YXQoaW50ZXJuYWxmb3JtYXQpOworICAgIGlmIChkM2QxMTo6SXNEZXB0aFN0ZW5jaWxGb3JtYXQo
Y29udmVydGVkRm9ybWF0KSkKKyAgICB7CisgICAgICAgIG1UZXh0dXJlRm9ybWF0ID0gZDNkMTE6
OkdldERlcHRoVGV4dHVyZUZvcm1hdChjb252ZXJ0ZWRGb3JtYXQpOworICAgICAgICBtU2hhZGVy
UmVzb3VyY2VGb3JtYXQgPSBkM2QxMTo6R2V0RGVwdGhTaGFkZXJSZXNvdXJjZUZvcm1hdChjb252
ZXJ0ZWRGb3JtYXQpOworICAgICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0ID0gY29udmVydGVkRm9y
bWF0OworICAgICAgICBtUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5LTk9XTjsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbVRleHR1cmVGb3JtYXQgPSBjb252ZXJ0
ZWRGb3JtYXQ7CisgICAgICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IGNvbnZlcnRlZEZvcm1h
dDsKKyAgICAgICAgbURlcHRoU3RlbmNpbEZvcm1hdCA9IERYR0lfRk9STUFUX1VOS05PV047Cisg
ICAgICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBjb252ZXJ0ZWRGb3JtYXQ7CisgICAgfQorCisg
ICAgLy8gaWYgdGhlIHNpemUgaXMgbm90IHBvc2l0aXZlIHRoaXMgc2hvdWxkIGJlIHRyZWF0ZWQg
YXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJlCisgICAgLy8gd2UgaGFuZGxlIHRoYXQgaGVyZSBieSBz
a2lwcGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRpb24KKyAgICBpZiAoc2l6ZSA+IDApCisgICAg
eworICAgICAgICAvLyBhZGp1c3Qgc2l6ZSBpZiBuZWVkZWQgZm9yIGNvbXByZXNzZWQgdGV4dHVy
ZXMKKyAgICAgICAgaW50IGhlaWdodCA9IHNpemU7CisgICAgICAgIGdsOjpNYWtlVmFsaWRTaXpl
KGZhbHNlLCBnbDo6SXNDb21wcmVzc2VkKGludGVybmFsZm9ybWF0KSwgJnNpemUsICZoZWlnaHQs
ICZtTG9kT2Zmc2V0KTsKKworICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJl
ci0+Z2V0RGV2aWNlKCk7CisKKyAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgZGVzYzsKKyAg
ICAgICAgZGVzYy5XaWR0aCA9IHNpemU7CisgICAgICAgIGRlc2MuSGVpZ2h0ID0gc2l6ZTsKKyAg
ICAgICAgZGVzYy5NaXBMZXZlbHMgPSAobGV2ZWxzID4gMCkgPyBsZXZlbHMgKyBtTG9kT2Zmc2V0
IDogMDsKKyAgICAgICAgZGVzYy5BcnJheVNpemUgPSA2OworICAgICAgICBkZXNjLkZvcm1hdCA9
IG1UZXh0dXJlRm9ybWF0OworICAgICAgICBkZXNjLlNhbXBsZURlc2MuQ291bnQgPSAxOworICAg
ICAgICBkZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7CisgICAgICAgIGRlc2MuVXNhZ2UgPSBE
M0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBkZXNjLkJpbmRGbGFncyA9IGdldEJpbmRGbGFn
cygpOworICAgICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAgICAgICAgZGVzYy5NaXNj
RmxhZ3MgPSBEM0QxMV9SRVNPVVJDRV9NSVNDX1RFWFRVUkVDVUJFOworCisgICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRlc2MsIE5VTEwsICZtVGV4dHVy
ZSk7CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAg
ICBBU1NFUlQocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgRVJSKCJDcmVh
dGluZyBpbWFnZSBmYWlsZWQuIik7CisgICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBt
VGV4dHVyZS0+R2V0RGVzYygmZGVzYyk7CisgICAgICAgICAgICBtTWlwTGV2ZWxzID0gZGVzYy5N
aXBMZXZlbHM7CisgICAgICAgICAgICBtVGV4dHVyZVdpZHRoID0gZGVzYy5XaWR0aDsKKyAgICAg
ICAgICAgIG1UZXh0dXJlSGVpZ2h0ID0gZGVzYy5IZWlnaHQ7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK1RleHR1cmVTdG9yYWdlMTFfQ3ViZTo6flRleHR1cmVTdG9yYWdlMTFfQ3ViZSgpCit7Cisg
ICAgaWYgKG1UZXh0dXJlKQorICAgIHsKKyAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKKyAg
ICAgICAgbVRleHR1cmUgPSBOVUxMOworICAgIH0KKworICAgIGlmIChtU1JWKQorICAgIHsKKyAg
ICAgICAgbVNSVi0+UmVsZWFzZSgpOworICAgICAgICBtU1JWID0gTlVMTDsKKyAgICB9CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IDY7IGkrKykKKyAgICB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJF
X0xFVkVMUzsgaisrKQorICAgICAgICB7CisgICAgICAgICAgICBkZWxldGUgbVJlbmRlclRhcmdl
dFtpXVtqXTsKKyAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbaV1bal0gPSBOVUxMOworICAgICAg
ICB9CisgICAgfQorfQorCitUZXh0dXJlU3RvcmFnZTExX0N1YmUgKlRleHR1cmVTdG9yYWdlMTFf
Q3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlMTFfQ3ViZShUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSkK
K3sKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShUZXh0dXJlU3RvcmFnZTExX0N1YmUqLCBz
dG9yYWdlKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmVTdG9yYWdlMTFfQ3ViZSo+
KHN0b3JhZ2UpOworfQorCitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6Z2V0
UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpCit7CisgICAgdW5zaWdu
ZWQgaW50IGZhY2VJZHggPSBnbDo6VGV4dHVyZUN1YmVNYXA6OmZhY2VJbmRleChmYWNlVGFyZ2V0
KTsKKyAgICBpZiAobGV2ZWwgPj0gMCAmJiBsZXZlbCA8IHN0YXRpY19jYXN0PGludD4obU1pcExl
dmVscykpCisgICAgeworICAgICAgICBpZiAoIW1SZW5kZXJUYXJnZXRbZmFjZUlkeF1bbGV2ZWxd
KQorICAgICAgICB7CisgICAgICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJl
ci0+Z2V0RGV2aWNlKCk7CisgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdDsKKworICAgICAgICAg
ICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOworICAgICAgICAgICAg
c3J2RGVzYy5Gb3JtYXQgPSBtU2hhZGVyUmVzb3VyY2VGb3JtYXQ7CisgICAgICAgICAgICBzcnZE
ZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyREFSUkFZOyAv
LyBXaWxsIGJlIHVzZWQgd2l0aCBUZXh0dXJlMkQgc2FtcGxlciwgbm90IFRleHR1cmVDdWJlCisg
ICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5Lk1vc3REZXRhaWxlZE1pcCA9IGxldmVs
OworICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBMZXZlbHMgPSAxOworICAg
ICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSBmYWNlSWR4
OworICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5BcnJheVNpemUgPSAxOworCisg
ICAgICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydjsKKyAgICAgICAgICAgIHJl
c3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KG1UZXh0dXJlLCAmc3J2RGVz
YywgJnNydik7CisKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlksIHN0YXRpY19jYXN0PFJlbmRlclRhcmdldCo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgICAgIGlm
IChtUmVuZGVyVGFyZ2V0Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVz
YzsKKyAgICAgICAgICAgICAgICBydHZEZXNjLkZvcm1hdCA9IG1SZW5kZXJUYXJnZXRGb3JtYXQ7
CisgICAgICAgICAgICAgICAgcnR2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfUlRWX0RJTUVO
U0lPTl9URVhUVVJFMkRBUlJBWTsKKyAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFy
cmF5Lk1pcFNsaWNlID0gbGV2ZWw7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlMkRB
cnJheS5GaXJzdEFycmF5U2xpY2UgPSBmYWNlSWR4OworICAgICAgICAgICAgICAgIHJ0dkRlc2Mu
VGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0gMTsKKworICAgICAgICAgICAgICAgIElEM0QxMVJl
bmRlclRhcmdldFZpZXcgKnJ0djsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZVJlbmRlclRhcmdldFZpZXcobVRleHR1cmUsICZydHZEZXNjLCAmcnR2KTsKKworICAgICAg
ICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHNydi0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PFJlbmRlclRh
cmdldCo+KE5VTEwpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdldDEx
IGV4cGVjdHMgdG8gYmUgdGhlIG93bmVyIG9mIHRoZSByZXNvdXJjZXMgaXQgaXMgZ2l2ZW4gYnV0
IFRleHR1cmVTdG9yYWdlMTEKKyAgICAgICAgICAgICAgICAvLyBhbHNvIG5lZWRzIHRvIGtlZXAg
YSByZWZlcmVuY2UgdG8gdGhlIHRleHR1cmUuCisgICAgICAgICAgICAgICAgbVRleHR1cmUtPkFk
ZFJlZigpOworCisgICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldFtmYWNlSWR4XVtsZXZlbF0g
PSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJlbmRlcmVyLCBydHYsIG1UZXh0dXJlLCBzcnYsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RkOjptYXgobVRleHR1cmVXaWR0aCA+PiBsZXZlbCwgMVUpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ZDo6bWF4KG1UZXh0dXJlSGVpZ2h0ID4+IGxldmVsLCAxVSkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZSBpZiAobURlcHRoU3RlbmNpbEZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktO
T1dOKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEQzRDExX0RFUFRIX1NURU5DSUxf
VklFV19ERVNDIGRzdkRlc2M7CisgICAgICAgICAgICAgICAgZHN2RGVzYy5Gb3JtYXQgPSBtUmVu
ZGVyVGFyZ2V0Rm9ybWF0OworICAgICAgICAgICAgICAgIGRzdkRlc2MuVmlld0RpbWVuc2lvbiA9
IEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTJEQVJSQVk7CisgICAgICAgICAgICAgICAgZHN2
RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBTbGljZSA9IGxldmVsOworICAgICAgICAgICAgICAgIGRz
dkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RBcnJheVNsaWNlID0gZmFjZUlkeDsKKyAgICAgICAg
ICAgICAgICBkc3ZEZXNjLlRleHR1cmUyREFycmF5LkFycmF5U2l6ZSA9IDE7CisKKyAgICAgICAg
ICAgICAgICBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpkc3Y7CisgICAgICAgICAgICAgICAgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxWaWV3KG1UZXh0dXJlLCAmZHN2RGVzYywg
JmRzdik7CisKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzcnYtPlJlbGVhc2UoKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0
aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihOVUxMKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgICAgICAgICAv
LyBSZW5kZXJUYXJnZXQxMSBleHBlY3RzIHRvIGJlIHRoZSBvd25lciBvZiB0aGUgcmVzb3VyY2Vz
IGl0IGlzIGdpdmVuIGJ1dCBUZXh0dXJlU3RvcmFnZTExCisgICAgICAgICAgICAgICAgLy8gYWxz
byBuZWVkcyB0byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0dXJlLgorICAgICAgICAgICAg
ICAgIG1UZXh0dXJlLT5BZGRSZWYoKTsKKworICAgICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRb
ZmFjZUlkeF1bbGV2ZWxdID0gbmV3IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwgZHN2LCBtVGV4
dHVyZSwgc3J2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1UZXh0dXJlV2lkdGggPj4gbGV2ZWwsIDFV
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVyZUhlaWdodCA+PiBsZXZlbCwgMVUpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIG1SZW5kZXJUYXJnZXRbZmFjZUlkeF1bbGV2ZWxdOworICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK0lEM0QxMVNoYWRlclJlc291
cmNlVmlldyAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXRTUlYoKQoreworICAgIGlmICghbVNS
VikKKyAgICB7CisgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXRE
ZXZpY2UoKTsKKworICAgICAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIHNydkRl
c2M7CisgICAgICAgIHNydkRlc2MuRm9ybWF0ID0gbVNoYWRlclJlc291cmNlRm9ybWF0OworICAg
ICAgICBzcnZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkVD
VUJFOworICAgICAgICBzcnZEZXNjLlRleHR1cmVDdWJlLk1pcExldmVscyA9IChtTWlwTGV2ZWxz
ID09IDAgPyAtMSA6IG1NaXBMZXZlbHMpOworICAgICAgICBzcnZEZXNjLlRleHR1cmVDdWJlLk1v
c3REZXRhaWxlZE1pcCA9IDA7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZVNoYWRlclJlc291cmNlVmlldyhtVGV4dHVyZSwgJnNydkRlc2MsICZtU1JWKTsKKworICAg
ICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8SUQzRDExU2hh
ZGVyUmVzb3VyY2VWaWV3Kj4oTlVMTCkpOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7CisgICAgfQorCisgICAgcmV0dXJuIG1TUlY7Cit9CisKK3ZvaWQgVGV4
dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZW5lcmF0ZU1pcG1hcChpbnQgZmFjZSwgaW50IGxldmVsKQor
eworICAgIFJlbmRlclRhcmdldDExICpzb3VyY2UgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRl
clRhcmdldDExKGdldFJlbmRlclRhcmdldChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gg
KyBmYWNlLCBsZXZlbCAtIDEpKTsKKyAgICBSZW5kZXJUYXJnZXQxMSAqZGVzdCA9IFJlbmRlclRh
cmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFyZ2V0KEdMX1RFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsKSk7CisKKyAgICBnZW5lcmF0ZU1pcG1hcExh
eWVyKHNvdXJjZSwgZGVzdCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVGV4dHVyZVN0b3JhZ2UxMS5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9UZXh0
dXJlU3RvcmFnZTExLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2M1ZGVkMDViODg5NzY5N2QzOTM2ZDA1MDk3ZGY0
ZGU5OGI3OWJjZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVGV4dHVyZVN0b3JhZ2UxMS5oCkBAIC0wLDAgKzEs
MTIwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVGV4dHVyZVN0b3JhZ2UxMS5oOiBEZWZpbmVzIHRo
ZSBhYnN0cmFjdCByeDo6VGV4dHVyZVN0b3JhZ2UxMSBjbGFzcyBhbmQgaXRzIGNvbmNyZXRlIGRl
cml2ZWQKKy8vIGNsYXNzZXMgVGV4dHVyZVN0b3JhZ2UxMV8yRCBhbmQgVGV4dHVyZVN0b3JhZ2Ux
MV9DdWJlLCB3aGljaCBhY3QgYXMgdGhlIGludGVyZmFjZSB0byB0aGUgRDNEMTEgdGV4dHVyZS4K
KworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfVEVYVFVSRVNUT1JBR0UxMV9IXworI2RlZmlu
ZSBMSUJHTEVTVjJfUkVOREVSRVJfVEVYVFVSRVNUT1JBR0UxMV9IXworCisjaW5jbHVkZSAibGli
R0xFU3YyL1RleHR1cmUuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0
b3JhZ2UuaCIKKworbmFtZXNwYWNlIHJ4Cit7CitjbGFzcyBSZW5kZXJUYXJnZXQ7CitjbGFzcyBS
ZW5kZXJUYXJnZXQxMTsKK2NsYXNzIFJlbmRlcmVyOworY2xhc3MgUmVuZGVyZXIxMTsKK2NsYXNz
IFN3YXBDaGFpbjExOworCitjbGFzcyBUZXh0dXJlU3RvcmFnZTExIDogcHVibGljIFRleHR1cmVT
dG9yYWdlCit7CisgIHB1YmxpYzoKKyAgICBUZXh0dXJlU3RvcmFnZTExKFJlbmRlcmVyICpyZW5k
ZXJlciwgVUlOVCBiaW5kRmxhZ3MpOworICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlMTEoKTsK
KworICAgIHN0YXRpYyBUZXh0dXJlU3RvcmFnZTExICptYWtlVGV4dHVyZVN0b3JhZ2UxMShUZXh0
dXJlU3RvcmFnZSAqc3RvcmFnZSk7CisKKyAgICBzdGF0aWMgRFdPUkQgR2V0VGV4dHVyZUJpbmRG
bGFncyhEWEdJX0ZPUk1BVCBkM2RmbXQsIEdMZW51bSBnbHVzYWdlLCBib29sIGZvcmNlUmVuZGVy
YWJsZSk7CisgICAgc3RhdGljIGJvb2wgSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEWEdJX0ZP
Uk1BVCBmb3JtYXQpOworCisgICAgVUlOVCBnZXRCaW5kRmxhZ3MoKSBjb25zdDsKKworICAgIHZp
cnR1YWwgSUQzRDExVGV4dHVyZTJEICpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0OworICAgIHZpcnR1
YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpnZXRTUlYoKSA9IDA7CisgICAgdmlydHVhbCBS
ZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpIHsgcmV0dXJuIGdldFJlbmRlclRhcmdldCgw
KTsgfQorICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoaW50IGxldmVs
KSB7IHJldHVybiBOVUxMOyB9CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRh
cmdldChHTGVudW0gZmFjZVRhcmdldCkgeyByZXR1cm4gZ2V0UmVuZGVyVGFyZ2V0KGZhY2VUYXJn
ZXQsIDApOyB9CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVu
dW0gZmFjZVRhcmdldCwgaW50IGxldmVsKSB7IHJldHVybiBOVUxMOyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2Vu
ZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCkge307CisKKyAgICB2aXJ0dWFsIGludCBn
ZXRMb2RPZmZzZXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJUYXJnZXQoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNNYW5hZ2VkKCkgY29uc3Q7CisgICAgdmlydHVhbCBp
bnQgbGV2ZWxDb3VudCgpOworICAgIFVJTlQgZ2V0U3VicmVzb3VyY2VJbmRleChpbnQgbGV2ZWws
IGludCBmYWNlVGFyZ2V0KTsKKworICAgIGJvb2wgdXBkYXRlU3VicmVzb3VyY2VMZXZlbChJRDNE
MTFUZXh0dXJlMkQgKnRleHR1cmUsIHVuc2lnbmVkIGludCBzb3VyY2VTdWJyZXNvdXJjZSwgaW50
IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmFjZVRhcmdldCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpOworCisgIHByb3RlY3RlZDoKKyAgICB2b2lkIGdlbmVyYXRlTWlwbWFwTGF5ZXIoUmVuZGVy
VGFyZ2V0MTEgKnNvdXJjZSwgUmVuZGVyVGFyZ2V0MTEgKmRlc3QpOworCisgICAgUmVuZGVyZXIx
MSAqbVJlbmRlcmVyOworICAgIGludCBtTG9kT2Zmc2V0OworICAgIHVuc2lnbmVkIGludCBtTWlw
TGV2ZWxzOworCisgICAgSUQzRDExVGV4dHVyZTJEICptVGV4dHVyZTsKKyAgICBEWEdJX0ZPUk1B
VCBtVGV4dHVyZUZvcm1hdDsKKyAgICBEWEdJX0ZPUk1BVCBtU2hhZGVyUmVzb3VyY2VGb3JtYXQ7
CisgICAgRFhHSV9GT1JNQVQgbVJlbmRlclRhcmdldEZvcm1hdDsKKyAgICBEWEdJX0ZPUk1BVCBt
RGVwdGhTdGVuY2lsRm9ybWF0OworICAgIHVuc2lnbmVkIGludCBtVGV4dHVyZVdpZHRoOworICAg
IHVuc2lnbmVkIGludCBtVGV4dHVyZUhlaWdodDsKKworICAgIElEM0QxMVNoYWRlclJlc291cmNl
VmlldyAqbVNSVjsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihU
ZXh0dXJlU3RvcmFnZTExKTsKKworICAgIGNvbnN0IFVJTlQgbUJpbmRGbGFnczsKK307CisKK2Ns
YXNzIFRleHR1cmVTdG9yYWdlMTFfMkQgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UxMQoreworICBw
dWJsaWM6CisgICAgVGV4dHVyZVN0b3JhZ2UxMV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBD
aGFpbjExICpzd2FwY2hhaW4pOworICAgIFRleHR1cmVTdG9yYWdlMTFfMkQoUmVuZGVyZXIgKnJl
bmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwg
Ym9vbCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAg
ICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTExXzJEKCk7CisKKyAgICBzdGF0aWMgVGV4dHVyZVN0
b3JhZ2UxMV8yRCAqbWFrZVRleHR1cmVTdG9yYWdlMTFfMkQoVGV4dHVyZVN0b3JhZ2UgKnN0b3Jh
Z2UpOworCisgICAgdmlydHVhbCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmdldFNSVigpOwor
ICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoaW50IGxldmVsKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpOworCisgIHByaXZhdGU6
CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlMTFfMkQpOworCisg
ICAgUmVuZGVyVGFyZ2V0MTEgKm1SZW5kZXJUYXJnZXRbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9U
RVhUVVJFX0xFVkVMU107Cit9OworCitjbGFzcyBUZXh0dXJlU3RvcmFnZTExX0N1YmUgOiBwdWJs
aWMgVGV4dHVyZVN0b3JhZ2UxMQoreworICBwdWJsaWM6CisgICAgVGV4dHVyZVN0b3JhZ2UxMV9D
dWJlKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBpbnQgc2l6ZSk7CisgICAgdmly
dHVhbCB+VGV4dHVyZVN0b3JhZ2UxMV9DdWJlKCk7CisKKyAgICBzdGF0aWMgVGV4dHVyZVN0b3Jh
Z2UxMV9DdWJlICptYWtlVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKFRleHR1cmVTdG9yYWdlICpzdG9y
YWdlKTsKKworICAgIHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpnZXRTUlYoKTsK
KyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFy
Z2V0LCBpbnQgbGV2ZWwpOworCisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBm
YWNlLCBpbnQgbGV2ZWwpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKFRleHR1cmVTdG9yYWdlMTFfQ3ViZSk7CisKKyAgICBSZW5kZXJUYXJnZXQxMSAqbVJlbmRl
clRhcmdldFs2XVtnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKK307CisK
K30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9URVhUVVJFU1RPUkFHRTExX0hfCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL1ZlcnRleEJ1ZmZlcjExLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVydGV4QnVmZmVyMTEuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZm
OWI0MTgxZjEyYWNjN2M4ZTg1OGI2MDRkODMzMmYxNWNhNDY2MjEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1Zl
cnRleEJ1ZmZlcjExLmNwcApAQCAtMCwwICsxLDQ0MCBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVk
LmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworLy8gVmVydGV4QnVmZmVyMTEuY3BwOiBEZWZpbmVzIHRoZSBE
M0QxMSBWZXJ0ZXhCdWZmZXIgaW1wbGVtZW50YXRpb24uCisKKyNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvVmVydGV4QnVmZmVyMTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvQnVmZmVyU3RvcmFnZS5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgor
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKworbmFtZXNwYWNlIHJ4Cit7CisKK1ZlcnRleEJ1ZmZl
cjExOjpWZXJ0ZXhCdWZmZXIxMShyeDo6UmVuZGVyZXIxMSAqY29uc3QgcmVuZGVyZXIpIDogbVJl
bmRlcmVyKHJlbmRlcmVyKQoreworICAgIG1CdWZmZXIgPSBOVUxMOworICAgIG1CdWZmZXJTaXpl
ID0gMDsKKyAgICBtRHluYW1pY1VzYWdlID0gZmFsc2U7Cit9CisKK1ZlcnRleEJ1ZmZlcjExOjp+
VmVydGV4QnVmZmVyMTEoKQoreworICAgIGlmIChtQnVmZmVyKQorICAgIHsKKyAgICAgICAgbUJ1
ZmZlci0+UmVsZWFzZSgpOworICAgICAgICBtQnVmZmVyID0gTlVMTDsKKyAgICB9Cit9CisKK2Jv
b2wgVmVydGV4QnVmZmVyMTE6OmluaXRpYWxpemUodW5zaWduZWQgaW50IHNpemUsIGJvb2wgZHlu
YW1pY1VzYWdlKQoreworICAgIGlmIChtQnVmZmVyKQorICAgIHsKKyAgICAgICAgbUJ1ZmZlci0+
UmVsZWFzZSgpOworICAgICAgICBtQnVmZmVyID0gTlVMTDsKKyAgICB9CisKKyAgICB1cGRhdGVT
ZXJpYWwoKTsKKworICAgIGlmIChzaXplID4gMCkKKyAgICB7CisgICAgICAgIElEM0QxMURldmlj
ZSogZHhEZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgIEQzRDExX0JV
RkZFUl9ERVNDIGJ1ZmZlckRlc2M7CisgICAgICAgIGJ1ZmZlckRlc2MuQnl0ZVdpZHRoID0gc2l6
ZTsKKyAgICAgICAgYnVmZmVyRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZTkFNSUM7CisgICAg
ICAgIGJ1ZmZlckRlc2MuQmluZEZsYWdzID0gRDNEMTFfQklORF9WRVJURVhfQlVGRkVSOworICAg
ICAgICBidWZmZXJEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsK
KyAgICAgICAgYnVmZmVyRGVzYy5NaXNjRmxhZ3MgPSAwOworICAgICAgICBidWZmZXJEZXNjLlN0
cnVjdHVyZUJ5dGVTdHJpZGUgPSAwOworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZHhEZXZp
Y2UtPkNyZWF0ZUJ1ZmZlcigmYnVmZmVyRGVzYywgTlVMTCwgJm1CdWZmZXIpOworICAgICAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIG1CdWZmZXJTaXplID0gc2l6ZTsKKyAgICBtRHluYW1p
Y1VzYWdlID0gZHluYW1pY1VzYWdlOworICAgIHJldHVybiB0cnVlOworfQorCitWZXJ0ZXhCdWZm
ZXIxMSAqVmVydGV4QnVmZmVyMTE6Om1ha2VWZXJ0ZXhCdWZmZXIxMShWZXJ0ZXhCdWZmZXIgKnZl
dGV4QnVmZmVyKQoreworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKFZlcnRleEJ1ZmZlcjEx
KiwgdmV0ZXhCdWZmZXIpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VmVydGV4QnVmZmVyMTEq
Pih2ZXRleEJ1ZmZlcik7Cit9CisKK2Jvb2wgVmVydGV4QnVmZmVyMTE6OnN0b3JlVmVydGV4QXR0
cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdMaW50IHN0YXJ0LCBH
THNpemVpIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworICAgIGlmIChtQnVm
ZmVyKQorICAgIHsKKyAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gYXR0cmliLm1Cb3VuZEJ1
ZmZlci5nZXQoKTsKKworICAgICAgICBpbnQgaW5wdXRTdHJpZGUgPSBhdHRyaWIuc3RyaWRlKCk7
CisgICAgICAgIGNvbnN0IFZlcnRleENvbnZlcnRlciAmY29udmVydGVyID0gZ2V0VmVydGV4Q29u
dmVyc2lvbihhdHRyaWIpOworCisgICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmR4Q29udGV4
dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworCisgICAgICAgIEQzRDExX01BUFBF
RF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJjZTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBk
eENvbnRleHQtPk1hcChtQnVmZmVyLCAwLCBEM0QxMV9NQVBfV1JJVEVfTk9fT1ZFUldSSVRFLCAw
LCAmbWFwcGVkUmVzb3VyY2UpOworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIEVSUigiVmVydGV4IGJ1ZmZlciBtYXAgZmFpbGVkIHdpdGggZXJyb3Ig
MHglMDh4IiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
CisgICAgICAgIGNoYXIqIG91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1hcHBlZFJl
c291cmNlLnBEYXRhKSArIG9mZnNldDsKKworICAgICAgICBjb25zdCBjaGFyICppbnB1dCA9IE5V
TEw7CisgICAgICAgIGlmIChidWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIEJ1ZmZlclN0
b3JhZ2UgKnN0b3JhZ2UgPSBidWZmZXItPmdldFN0b3JhZ2UoKTsKKyAgICAgICAgICAgIGlucHV0
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHN0b3JhZ2UtPmdldERhdGEoKSkgKyBzdGF0aWNf
Y2FzdDxpbnQ+KGF0dHJpYi5tT2Zmc2V0KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGF0dHJp
Yi5tUG9pbnRlcik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaW5zdGFuY2VzID09IDAgfHwg
YXR0cmliLm1EaXZpc29yID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlucHV0ICs9IGlu
cHV0U3RyaWRlICogc3RhcnQ7CisgICAgICAgIH0KKworICAgICAgICBjb252ZXJ0ZXIuY29udmVy
c2lvbkZ1bmMoaW5wdXQsIGlucHV0U3RyaWRlLCBjb3VudCwgb3V0cHV0KTsKKworICAgICAgICBk
eENvbnRleHQtPlVubWFwKG1CdWZmZXIsIDApOworCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBFUlIoIlZlcnRleCBidWZmZXIgbm90IGluaXRp
YWxpemVkLiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFZlcnRl
eEJ1ZmZlcjExOjpzdG9yZVJhd0RhdGEoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgaW50IHNp
emUsIHVuc2lnbmVkIGludCBvZmZzZXQpCit7CisgICAgaWYgKG1CdWZmZXIpCisgICAgeworICAg
ICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpkeENvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmlj
ZUNvbnRleHQoKTsKKworICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVz
b3VyY2U7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZHhDb250ZXh0LT5NYXAobUJ1ZmZlciwg
MCwgRDNEMTFfTUFQX1dSSVRFX05PX09WRVJXUklURSwgMCwgJm1hcHBlZFJlc291cmNlKTsKKyAg
ICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIlZl
cnRleCBidWZmZXIgbWFwIGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBjaGFyKiBidWZmZXJE
YXRhID0gc3RhdGljX2Nhc3Q8Y2hhcio+KG1hcHBlZFJlc291cmNlLnBEYXRhKTsKKyAgICAgICAg
bWVtY3B5KGJ1ZmZlckRhdGEgKyBvZmZzZXQsIGRhdGEsIHNpemUpOworCisgICAgICAgIGR4Q29u
dGV4dC0+VW5tYXAobUJ1ZmZlciwgMCk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIEVSUigiVmVydGV4IGJ1ZmZlciBub3QgaW5pdGlhbGl6
ZWQuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgVmVydGV4QnVm
ZmVyMTE6OmdldFNwYWNlUmVxdWlyZWQoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmli
LCBHTHNpemVpIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
THNpemVpIGluc3RhbmNlcywgdW5zaWduZWQgaW50ICpvdXRTcGFjZVJlcXVpcmVkKSBjb25zdAor
eworICAgIHVuc2lnbmVkIGludCBlbGVtZW50U2l6ZSA9IGdldFZlcnRleENvbnZlcnNpb24oYXR0
cmliKS5vdXRwdXRFbGVtZW50U2l6ZTsKKworICAgIHVuc2lnbmVkIGludCBlbGVtZW50Q291bnQg
PSAwOworICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBhdHRyaWIubURpdmlzb3IgPT0gMCkKKyAg
ICB7CisgICAgICAgIGVsZW1lbnRDb3VudCA9IGNvdW50OworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihpbnN0YW5jZXMpIDwgc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSAtIChhdHRyaWIubURpdmlzb3Ig
LSAxKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gUm91bmQgdXAKKyAgICAgICAgICAgIGVs
ZW1lbnRDb3VudCA9IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGluc3RhbmNlcykgKyAoYXR0
cmliLm1EaXZpc29yIC0gMSkpIC8gYXR0cmliLm1EaXZpc29yOworICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZWxlbWVudENvdW50ID0gaW5zdGFuY2VzIC8g
YXR0cmliLm1EaXZpc29yOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGVsZW1lbnRTaXpl
IDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLyBlbGVtZW50Q291
bnQpCisgICAgeworICAgICAgICBpZiAob3V0U3BhY2VSZXF1aXJlZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgKm91dFNwYWNlUmVxdWlyZWQgPSBlbGVtZW50U2l6ZSAqIGVsZW1lbnRDb3VudDsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6
cmVxdWlyZXNDb252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29u
c3QKK3sKKyAgICByZXR1cm4gIWdldFZlcnRleENvbnZlcnNpb24oYXR0cmliKS5pZGVudGl0eTsK
K30KKwordW5zaWduZWQgaW50IFZlcnRleEJ1ZmZlcjExOjpnZXRCdWZmZXJTaXplKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbUJ1ZmZlclNpemU7Cit9CisKK2Jvb2wgVmVydGV4QnVmZmVyMTE6OnNl
dEJ1ZmZlclNpemUodW5zaWduZWQgaW50IHNpemUpCit7CisgICAgaWYgKHNpemUgPiBtQnVmZmVy
U2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbml0aWFsaXplKHNpemUsIG1EeW5hbWljVXNh
Z2UpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
Cit9CisKK2Jvb2wgVmVydGV4QnVmZmVyMTE6OmRpc2NhcmQoKQoreworICAgIGlmIChtQnVmZmVy
KQorICAgIHsKKyAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqZHhDb250ZXh0ID0gbVJlbmRl
cmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisKKyAgICAgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09V
UkNFIG1hcHBlZFJlc291cmNlOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGR4Q29udGV4dC0+
TWFwKG1CdWZmZXIsIDAsIEQzRDExX01BUF9XUklURV9ESVNDQVJELCAwLCAmbWFwcGVkUmVzb3Vy
Y2UpOworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IEVSUigiVmVydGV4IGJ1ZmZlciBtYXAgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGR4Q29u
dGV4dC0+VW5tYXAobUJ1ZmZlciwgMCk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIEVSUigiVmVydGV4IGJ1ZmZlciBub3QgaW5pdGlhbGl6
ZWQuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludCBW
ZXJ0ZXhCdWZmZXIxMTo6Z2V0VmVydGV4U2l6ZShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZh
dHRyaWIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdldFZlcnRleENvbnZlcnNpb24oYXR0cmliKS5v
dXRwdXRFbGVtZW50U2l6ZTsKK30KKworRFhHSV9GT1JNQVQgVmVydGV4QnVmZmVyMTE6OmdldERY
R0lGb3JtYXQoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdAoreworICAg
IHJldHVybiBnZXRWZXJ0ZXhDb252ZXJzaW9uKGF0dHJpYikuZHhnaUZvcm1hdDsKK30KKworSUQz
RDExQnVmZmVyICpWZXJ0ZXhCdWZmZXIxMTo6Z2V0QnVmZmVyKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbUJ1ZmZlcjsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGludCBjb21w
b25lbnRDb3VudCwgYm9vbCB3aWRlbiwgYm9vbCBub3JtYWxpemVkPgorc3RhdGljIHZvaWQgY29w
eVZlcnRleERhdGEoY29uc3Qgdm9pZCAqaW5wdXQsIHVuc2lnbmVkIGludCBzdHJpZGUsIHVuc2ln
bmVkIGludCBjb3VudCwgdm9pZCAqb3V0cHV0KQoreworICAgIHVuc2lnbmVkIGludCBhdHRyaWJT
aXplID0gc2l6ZW9mKFQpICogY29tcG9uZW50Q291bnQ7CisKKyAgICBpZiAoYXR0cmliU2l6ZSA9
PSBzdHJpZGUgJiYgIXdpZGVuKQorICAgIHsKKyAgICAgICAgbWVtY3B5KG91dHB1dCwgaW5wdXQs
IGNvdW50ICogYXR0cmliU2l6ZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHVu
c2lnbmVkIGludCBvdXRwdXRTdHJpZGUgPSB3aWRlbiA/IDQgOiBjb21wb25lbnRDb3VudDsKKyAg
ICAgICAgVCBkZWZhdWx0VmFsID0gbm9ybWFsaXplZCA/IHN0ZDo6bnVtZXJpY19saW1pdHM8VD46
Om1heCgpIDogVCgxKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNv
dW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFQgKm9mZnNldElucHV0ID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4o
aW5wdXQpICsgaSAqIHN0cmlkZSk7CisgICAgICAgICAgICBUICpvZmZzZXRPdXRwdXQgPSByZWlu
dGVycHJldF9jYXN0PFQqPihvdXRwdXQpICsgaSAqIG91dHB1dFN0cmlkZTsKKworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBjb21wb25lbnRDb3VudDsgaisrKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG9mZnNldE91dHB1dFtqXSA9IG9mZnNldElucHV0
W2pdOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAod2lkZW4pCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgb2Zmc2V0T3V0cHV0WzNdID0gZGVmYXVsdFZhbDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordGVtcGxhdGUgPHVuc2lnbmVkIGludCBj
b21wb25lbnRDb3VudD4KK3N0YXRpYyB2b2lkIGNvcHlGaXhlZFZlcnRleERhdGEoY29uc3Qgdm9p
ZCogaW5wdXQsIHVuc2lnbmVkIGludCBzdHJpZGUsIHVuc2lnbmVkIGludCBjb3VudCwgdm9pZCog
b3V0cHV0KQoreworICAgIHN0YXRpYyBjb25zdCBmbG9hdCBkaXZpc29yID0gMS4wZiAvICgxIDw8
IDE2KTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAg
ICB7CisgICAgICAgIGNvbnN0IEdMZml4ZWQqIG9mZnNldElucHV0ID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBHTGZpeGVkKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaW5wdXQpICsg
c3RyaWRlICogaSk7CisgICAgICAgIGZsb2F0KiBvZmZzZXRPdXRwdXQgPSByZWludGVycHJldF9j
YXN0PGZsb2F0Kj4ob3V0cHV0KSArIGkgKiBjb21wb25lbnRDb3VudDsKKworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBqID0gMDsgaiA8IGNvbXBvbmVudENvdW50OyBqKyspCisgICAgICAgIHsK
KyAgICAgICAgICAgIG9mZnNldE91dHB1dFtqXSA9IHN0YXRpY19jYXN0PGZsb2F0PihvZmZzZXRJ
bnB1dFtqXSkgKiBkaXZpc29yOworICAgICAgICB9CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgdW5zaWduZWQgaW50IGNvbXBvbmVudENvdW50LCBib29sIG5vcm1hbGl6ZWQ+Citz
dGF0aWMgdm9pZCBjb3B5VG9GbG9hdFZlcnRleERhdGEoY29uc3Qgdm9pZCogaW5wdXQsIHVuc2ln
bmVkIGludCBzdHJpZGUsIHVuc2lnbmVkIGludCBjb3VudCwgdm9pZCogb3V0cHV0KQoreworICAg
IHR5cGVkZWYgc3RkOjpudW1lcmljX2xpbWl0czxUPiBOTDsKKworICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIGNvbnN0IFQgKm9mZnNl
dElucHV0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4ocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKj4oaW5wdXQpICsgc3RyaWRlICogaSk7CisgICAgICAgIGZsb2F0ICpvZmZzZXRPdXRw
dXQgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4ob3V0cHV0KSArIGkgKiBjb21wb25lbnRDb3Vu
dDsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IGNvbXBvbmVudENvdW50
OyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChub3JtYWxpemVkKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGlmIChOTDo6aXNfc2lnbmVkKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgZGl2aXNvciA9IDEuMGYgLyAoMiAq
IHN0YXRpY19jYXN0PGZsb2F0PihOTDo6bWF4KCkpICsgMSk7CisgICAgICAgICAgICAgICAgICAg
IG9mZnNldE91dHB1dFtqXSA9ICgyICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KG9mZnNldElucHV0W2pd
KSArIDEpICogZGl2aXNvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0T3V0cHV0W2pd
ID0gIHN0YXRpY19jYXN0PGZsb2F0PihvZmZzZXRJbnB1dFtqXSkgLyBOTDo6bWF4KCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG9mZnNldE91dHB1dFtqXSA9ICBzdGF0aWNfY2FzdDxmbG9h
dD4ob2Zmc2V0SW5wdXRbal0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQor
Citjb25zdCBWZXJ0ZXhCdWZmZXIxMTo6VmVydGV4Q29udmVydGVyIFZlcnRleEJ1ZmZlcjExOjpt
UG9zc2libGVUcmFuc2xhdGlvbnNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVNdWzJdWzRdID0K
K3sKKyAgICB7IC8vIEdMX0JZVEUKKyAgICAgICAgeyAvLyB1bm5vcm1hbGl6ZWQKKyAgICAgICAg
ICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTGJ5dGUsIDEsIGZhbHNlPiwgZmFsc2UsIERY
R0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9LAorICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0
ZXhEYXRhPEdMYnl0ZSwgMiwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FU
LCA4IH0sCisgICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xieXRlLCAzLCBm
YWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0sCisgICAgICAg
ICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xieXRlLCA0LCBmYWxzZT4sIGZhbHNlLCBE
WEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsIDE2IH0sCisgICAgICAgIH0sCisgICAgICAg
IHsgLy8gbm9ybWFsaXplZAorICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xieXRlLCAx
LCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1I4X1NOT1JNLCAxIH0sCisgICAgICAg
ICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGJ5dGUsIDIsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhH
SV9GT1JNQVRfUjhHOF9TTk9STSwgMiB9LAorICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8
R0xieXRlLCAzLCB0cnVlLCB0cnVlPiwgZmFsc2UsIERYR0lfRk9STUFUX1I4RzhCOEE4X1NOT1JN
LCA0IH0sCisgICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGJ5dGUsIDQsIGZhbHNlLCB0
cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjhHOEI4QThfU05PUk0sIDQgfSwKKyAgICAgICAgfSwK
KyAgICB9LAorICAgIHsgLy8gR0xfVU5TSUdORURfQllURQorICAgICAgICB7IC8vIHVubm9ybWFs
aXplZAorICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDEsIGZh
bHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9LAorICAgICAgICAgICAgeyAm
Y29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDIsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9S
TUFUX1IzMkczMl9GTE9BVCwgOCB9LAorICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhE
YXRhPEdMdWJ5dGUsIDMsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9B
VCwgMTIgfSwKKyAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVieXRlLCA0
LCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsIDE2IH0sCisg
ICAgICAgIH0sCisgICAgICAgIHsgLy8gbm9ybWFsaXplZAorICAgICAgICAgICAgeyAmY29weVZl
cnRleERhdGE8R0x1Ynl0ZSwgMSwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SOF9V
Tk9STSwgMSB9LAorICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1Ynl0ZSwgMiwgZmFs
c2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNLCAyIH0sCisgICAgICAgICAg
ICB7ICZjb3B5VmVydGV4RGF0YTxHTHVieXRlLCAzLCB0cnVlLCB0cnVlPiwgZmFsc2UsIERYR0lf
Rk9STUFUX1I4RzhCOEE4X1VOT1JNLCA0IH0sCisgICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0
YTxHTHVieXRlLCA0LCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1I4RzhCOEE4X1VO
T1JNLCA0IH0sCisgICAgICAgIH0sCisgICAgfSwKKyAgICB7IC8vIEdMX1NIT1JUCisgICAgICAg
IHsgLy8gdW5ub3JtYWxpemVkCisgICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8
R0xzaG9ydCwgMSwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyX0ZMT0FULCA0IH0sCisg
ICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xzaG9ydCwgMiwgZmFsc2U+LCBm
YWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCA4IH0sCisgICAgICAgICAgICB7ICZjb3B5
VG9GbG9hdFZlcnRleERhdGE8R0xzaG9ydCwgMywgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRf
UjMyRzMyQjMyX0ZMT0FULCAxMiB9LAorICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhE
YXRhPEdMc2hvcnQsIDQsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9G
TE9BVCwgMTYgfSwKKyAgICAgICAgfSwKKyAgICAgICAgeyAvLyBub3JtYWxpemVkCisgICAgICAg
ICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHNob3J0LCAxLCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERY
R0lfRk9STUFUX1IxNl9TTk9STSwgMiB9LAorICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8
R0xzaG9ydCwgMiwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMTZHMTZfU05PUk0s
IDQgfSwKKyAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMc2hvcnQsIDMsIHRydWUsIHRy
dWU+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1NOT1JNLCA4IH0sCisgICAgICAg
ICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHNob3J0LCA0LCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERY
R0lfRk9STUFUX1IxNkcxNkIxNkExNl9TTk9STSwgOCB9LAorICAgICAgICB9LAorICAgIH0sCisg
ICAgeyAvLyBHTF9VTlNJR05FRF9TSE9SVAorICAgICAgICB7IC8vIHVubm9ybWFsaXplZAorICAg
ICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMdXNob3J0LCAxLCBmYWxzZT4sIGZh
bHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKKyAgICAgICAgICAgIHsgJmNvcHlUb0Zs
b2F0VmVydGV4RGF0YTxHTHVzaG9ydCwgMiwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMy
RzMyX0ZMT0FULCA4IH0sCisgICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0x1
c2hvcnQsIDMsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCwgMTIg
fSwKKyAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVzaG9ydCwgNCwgZmFs
c2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAorICAgICAg
ICB9LAorICAgICAgICB7IC8vIG5vcm1hbGl6ZWQKKyAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhE
YXRhPEdMdXNob3J0LCAxLCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1IxNl9VTk9S
TSwgMiB9LAorICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1c2hvcnQsIDIsIGZhbHNl
LCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjE2RzE2X1VOT1JNLCA0IH0sCisgICAgICAgICAg
ICB7ICZjb3B5VmVydGV4RGF0YTxHTHVzaG9ydCwgMywgdHJ1ZSwgdHJ1ZT4sIGZhbHNlLCBEWEdJ
X0ZPUk1BVF9SMTZHMTZCMTZBMTZfVU5PUk0sIDggfSwKKyAgICAgICAgICAgIHsgJmNvcHlWZXJ0
ZXhEYXRhPEdMdXNob3J0LCA0LCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1IxNkcx
NkIxNkExNl9VTk9STSwgOCB9LAorICAgICAgICB9LAorICAgIH0sCisgICAgeyAvLyBHTF9GSVhF
RAorICAgICAgICB7IC8vIHVubm9ybWFsaXplZAorICAgICAgICAgICAgeyAmY29weUZpeGVkVmVy
dGV4RGF0YTwxPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9LAorICAgICAgICAg
ICAgeyAmY29weUZpeGVkVmVydGV4RGF0YTwyPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMl9G
TE9BVCwgOCB9LAorICAgICAgICAgICAgeyAmY29weUZpeGVkVmVydGV4RGF0YTwzPiwgZmFsc2Us
IERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKKyAgICAgICAgICAgIHsgJmNvcHlG
aXhlZFZlcnRleERhdGE8ND4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQs
IDE2IH0sCisgICAgICAgIH0sCisgICAgICAgIHsgLy8gbm9ybWFsaXplZAorICAgICAgICAgICAg
eyAmY29weUZpeGVkVmVydGV4RGF0YTwxPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMl9GTE9BVCwg
NCB9LAorICAgICAgICAgICAgeyAmY29weUZpeGVkVmVydGV4RGF0YTwyPiwgZmFsc2UsIERYR0lf
Rk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAorICAgICAgICAgICAgeyAmY29weUZpeGVkVmVydGV4
RGF0YTwzPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKKyAgICAg
ICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8ND4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJH
MzJCMzJBMzJfRkxPQVQsIDE2IH0sCisgICAgICAgIH0sCisgICAgfSwKKyAgICB7IC8vIEdMX0ZM
T0FUCisgICAgICAgIHsgLy8gdW5ub3JtYWxpemVkCisgICAgICAgICAgICB7ICZjb3B5VmVydGV4
RGF0YTxHTGZsb2F0LCAxLCBmYWxzZSwgZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJfRkxP
QVQsIDQgfSwKKyAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDIsIGZhbHNl
LCBmYWxzZT4sIHRydWUsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAorICAgICAgICAg
ICAgeyAmY29weVZlcnRleERhdGE8R0xmbG9hdCwgMywgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhH
SV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAxMiB9LAorICAgICAgICAgICAgeyAmY29weVZlcnRl
eERhdGE8R0xmbG9hdCwgNCwgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMyRzMy
QjMyQTMyX0ZMT0FULCAxNiB9LAorICAgICAgICB9LAorICAgICAgICB7IC8vIG5vcm1hbGl6ZWQK
KyAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDEsIGZhbHNlLCBmYWxzZT4s
IHRydWUsIERYR0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9LAorICAgICAgICAgICAgeyAmY29weVZl
cnRleERhdGE8R0xmbG9hdCwgMiwgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMy
RzMyX0ZMT0FULCA4IH0sCisgICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCAz
LCBmYWxzZSwgZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0s
CisgICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCA0LCBmYWxzZSwgZmFsc2U+
LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsIDE2IH0sCisgICAgICAgIH0s
CisgICAgfSwKK307CisKK2NvbnN0IFZlcnRleEJ1ZmZlcjExOjpWZXJ0ZXhDb252ZXJ0ZXIgJlZl
cnRleEJ1ZmZlcjExOjpnZXRWZXJ0ZXhDb252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1
dGUgJmF0dHJpYnV0ZSkKK3sKKyAgICB1bnNpZ25lZCBpbnQgdHlwZUluZGV4ID0gMDsKKyAgICBz
d2l0Y2ggKGF0dHJpYnV0ZS5tVHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0JZVEU6ICAgICAg
ICAgICAgIHR5cGVJbmRleCA9IDA7IGJyZWFrOworICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRF
OiAgICB0eXBlSW5kZXggPSAxOyBicmVhazsKKyAgICAgIGNhc2UgR0xfU0hPUlQ6ICAgICAgICAg
ICAgdHlwZUluZGV4ID0gMjsgYnJlYWs7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOiAg
IHR5cGVJbmRleCA9IDM7IGJyZWFrOworICAgICAgY2FzZSBHTF9GSVhFRDogICAgICAgICAgICB0
eXBlSW5kZXggPSA0OyBicmVhazsKKyAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgICAgICAgdHlw
ZUluZGV4ID0gNTsgYnJlYWs7CisgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgIFVOUkVB
Q0hBQkxFKCk7IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBtUG9zc2libGVUcmFuc2xhdGlv
bnNbdHlwZUluZGV4XVthdHRyaWJ1dGUubU5vcm1hbGl6ZWQgPyAxIDogMF1bYXR0cmlidXRlLm1T
aXplIC0gMV07Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVydGV4QnVmZmVyMTEuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVydGV4QnVmZmVyMTEu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5lY2ViNDI2ZTgyZDQyYjU1NjY2YzU3OWMzZmVlMWZlMmFiN2JhODAxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9WZXJ0ZXhCdWZmZXIxMS5oCkBAIC0wLDAgKzEsNzQgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisvLyBWZXJ0ZXhCdWZmZXIxMS5oOiBEZWZpbmVzIHRoZSBEM0QxMSBWZXJ0ZXhCdWZm
ZXIgaW1wbGVtZW50YXRpb24uCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX1ZFUlRFWEJV
RkZFUjExX0hfCisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9WRVJURVhCVUZGRVIxMV9IXwor
CisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlci5oIgorCituYW1lc3Bh
Y2UgcngKK3sKK2NsYXNzIFJlbmRlcmVyMTE7CisKK2NsYXNzIFZlcnRleEJ1ZmZlcjExIDogcHVi
bGljIFZlcnRleEJ1ZmZlcgoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgVmVydGV4QnVmZmVy
MTEocng6OlJlbmRlcmVyMTEgKmNvbnN0IHJlbmRlcmVyKTsKKyAgICB2aXJ0dWFsIH5WZXJ0ZXhC
dWZmZXIxMSgpOworCisgICAgdmlydHVhbCBib29sIGluaXRpYWxpemUodW5zaWduZWQgaW50IHNp
emUsIGJvb2wgZHluYW1pY1VzYWdlKTsKKworICAgIHN0YXRpYyBWZXJ0ZXhCdWZmZXIxMSAqbWFr
ZVZlcnRleEJ1ZmZlcjExKFZlcnRleEJ1ZmZlciAqdmV0ZXhCdWZmZXIpOworCisgICAgdmlydHVh
bCBib29sIHN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZh
dHRyaWIsIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQp
OworICAgIHZpcnR1YWwgYm9vbCBzdG9yZVJhd0RhdGEoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWdu
ZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBvZmZzZXQpOworCisgICAgdmlydHVhbCBib29sIGdl
dFNwYWNlUmVxdWlyZWQoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTHNpemVp
IGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgKm91dFNwYWNlUmVxdWlyZWQpIGNvbnN0OworCisgICAgdmlydHVh
bCBib29sIHJlcXVpcmVzQ29udmVyc2lvbihjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRy
aWIpIGNvbnN0OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0QnVmZmVyU2l6ZSgpIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBzZXRCdWZmZXJTaXplKHVuc2lnbmVkIGludCBzaXplKTsK
KyAgICB2aXJ0dWFsIGJvb2wgZGlzY2FyZCgpOworCisgICAgdW5zaWduZWQgaW50IGdldFZlcnRl
eFNpemUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdDsKKyAgICBEWEdJ
X0ZPUk1BVCBnZXREWEdJRm9ybWF0KGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikg
Y29uc3Q7CisKKyAgICBJRDNEMTFCdWZmZXIgKmdldEJ1ZmZlcigpIGNvbnN0OworCisgIHByaXZh
dGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFZlcnRleEJ1ZmZlcjExKTsKKworICAg
IHJ4OjpSZW5kZXJlcjExICpjb25zdCBtUmVuZGVyZXI7CisKKyAgICBJRDNEMTFCdWZmZXIgKm1C
dWZmZXI7CisgICAgdW5zaWduZWQgaW50IG1CdWZmZXJTaXplOworICAgIGJvb2wgbUR5bmFtaWNV
c2FnZTsKKworICAgIHR5cGVkZWYgdm9pZCAoKlZlcnRleENvbnZlcnNpb25GdW5jdGlvbikoY29u
c3Qgdm9pZCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgdm9pZCAqKTsKKyAgICBzdHJ1
Y3QgVmVydGV4Q29udmVydGVyCisgICAgeworICAgICAgICBWZXJ0ZXhDb252ZXJzaW9uRnVuY3Rp
b24gY29udmVyc2lvbkZ1bmM7CisgICAgICAgIGJvb2wgaWRlbnRpdHk7CisgICAgICAgIERYR0lf
Rk9STUFUIGR4Z2lGb3JtYXQ7CisgICAgICAgIHVuc2lnbmVkIGludCBvdXRwdXRFbGVtZW50U2l6
ZTsKKyAgICB9OworCisgICAgZW51bSB7IE5VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTID0gNiB9
OworCisgICAgLy8gVGhpcyB0YWJsZSBpcyB1c2VkIHRvIGdlbmVyYXRlIG1BdHRyaWJ1dGVUeXBl
cy4KKyAgICBzdGF0aWMgY29uc3QgVmVydGV4Q29udmVydGVyIG1Qb3NzaWJsZVRyYW5zbGF0aW9u
c1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFU11bMl1bNF07IC8vIFtHTCB0eXBlcyBhcyBlbnVt
ZXJhdGVkIGJ5IHR5cGVJbmRleCgpXVtub3JtYWxpemVkXVtzaXplIC0gMV0KKworICAgIHN0YXRp
YyBjb25zdCBWZXJ0ZXhDb252ZXJ0ZXIgJmdldFZlcnRleENvbnZlcnNpb24oY29uc3QgZ2w6OlZl
cnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlKTsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNW
Ml9SRU5ERVJFUl9WRVJURVhCVUZGRVIxMV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
cmVuZGVyZXIxMV91dGlscy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmYwNjAyNGZiNWFhMTEyOGFkNWQxZjBl
OWQyMzQxZTc4ZGEwYWE5NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5jcHAKQEAg
LTAsMCArMSw2ODggQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
Ky8vIHJlbmRlcmVyMTFfdXRpbHMuY3BwOiBDb252ZXJzaW9uIGZ1bmN0aW9ucyBhbmQgb3RoZXIg
dXRpbGl0eSByb3V0aW5lcworLy8gc3BlY2lmaWMgdG8gdGhlIEQzRDExIHJlbmRlcmVyLgorCisj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaCIKKwor
I2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCituYW1lc3BhY2UgZ2xfZDNkMTEKK3sKKworRDNE
MTFfQkxFTkQgQ29udmVydEJsZW5kRnVuYyhHTGVudW0gZ2xCbGVuZCwgYm9vbCBpc0FscGhhKQor
eworICAgIEQzRDExX0JMRU5EIGQzZEJsZW5kID0gRDNEMTFfQkxFTkRfWkVSTzsKKworICAgIHN3
aXRjaCAoZ2xCbGVuZCkKKyAgICB7CisgICAgICBjYXNlIEdMX1pFUk86ICAgICAgICAgICAgICAg
ICAgICAgZDNkQmxlbmQgPSBEM0QxMV9CTEVORF9aRVJPOyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfT05FOiAgICAgICAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzRDEx
X0JMRU5EX09ORTsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TUkNfQ09M
T1I6ICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gKGlzQWxwaGEgPyBEM0QxMV9CTEVORF9TUkNf
QUxQSEEgOiBEM0QxMV9CTEVORF9TUkNfQ09MT1IpOyAgICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX09ORV9NSU5VU19TUkNfQ09MT1I6ICAgICAgZDNkQmxlbmQgPSAoaXNBbHBoYSA/IEQz
RDExX0JMRU5EX0lOVl9TUkNfQUxQSEEgOiBEM0QxMV9CTEVORF9JTlZfU1JDX0NPTE9SKTsgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfRFNUX0NPTE9SOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9
IChpc0FscGhhID8gRDNEMTFfQkxFTkRfREVTVF9BTFBIQSA6IEQzRDExX0JMRU5EX0RFU1RfQ09M
T1IpOyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0NPTE9SOiAg
ICAgIGQzZEJsZW5kID0gKGlzQWxwaGEgPyBEM0QxMV9CTEVORF9JTlZfREVTVF9BTFBIQSA6IEQz
RDExX0JMRU5EX0lOVl9ERVNUX0NPTE9SKTsgYnJlYWs7CisgICAgICBjYXNlIEdMX1NSQ19BTFBI
QTogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0QxMV9CTEVORF9TUkNfQUxQSEE7ICAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19BTFBIQTogICAgICBkM2RC
bGVuZCA9IEQzRDExX0JMRU5EX0lOVl9TUkNfQUxQSEE7ICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9EU1RfQUxQSEE6ICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gRDNEMTFfQkxFTkRfREVT
VF9BTFBIQTsgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQUxQ
SEE6ICAgICAgZDNkQmxlbmQgPSBEM0QxMV9CTEVORF9JTlZfREVTVF9BTFBIQTsgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfQ09OU1RBTlRfQ09MT1I6ICAgICAgICAgICBkM2RCbGVuZCA9IEQz
RDExX0JMRU5EX0JMRU5EX0ZBQ1RPUjsgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9PTkVf
TUlOVVNfQ09OU1RBTlRfQ09MT1I6IGQzZEJsZW5kID0gRDNEMTFfQkxFTkRfSU5WX0JMRU5EX0ZB
Q1RPUjsgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0NPTlNUQU5UX0FMUEhBOiAgICAgICAgICAg
ZDNkQmxlbmQgPSBEM0QxMV9CTEVORF9CTEVORF9GQUNUT1I7ICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBOiBkM2RCbGVuZCA9IEQzRDExX0JMRU5E
X0lOVl9CTEVORF9GQUNUT1I7ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TUkNfQUxQSEFfU0FU
VVJBVEU6ICAgICAgIGQzZEJsZW5kID0gRDNEMTFfQkxFTkRfU1JDX0FMUEhBX1NBVDsgICAgICAg
YnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVy
biBkM2RCbGVuZDsKK30KKworRDNEMTFfQkxFTkRfT1AgQ29udmVydEJsZW5kT3AoR0xlbnVtIGds
QmxlbmRPcCkKK3sKKyAgICBEM0QxMV9CTEVORF9PUCBkM2RCbGVuZE9wID0gRDNEMTFfQkxFTkRf
T1BfQUREOworCisgICAgc3dpdGNoIChnbEJsZW5kT3ApCisgICAgeworICAgICAgY2FzZSBHTF9G
VU5DX0FERDogICAgICAgICAgICAgIGQzZEJsZW5kT3AgPSBEM0QxMV9CTEVORF9PUF9BREQ7ICAg
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRlVOQ19TVUJUUkFDVDogICAgICAgICBkM2RC
bGVuZE9wID0gRDNEMTFfQkxFTkRfT1BfU1VCVFJBQ1Q7ICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX0ZVTkNfUkVWRVJTRV9TVUJUUkFDVDogZDNkQmxlbmRPcCA9IEQzRDExX0JMRU5EX09QX1JF
Vl9TVUJUUkFDVDsgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9
CisKKyAgICByZXR1cm4gZDNkQmxlbmRPcDsKK30KKworVUlOVDggQ29udmVydENvbG9yTWFzayhi
b29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKQoreworICAgIFVJTlQ4
IG1hc2sgPSAwOworICAgIGlmIChyZWQpCisgICAgeworICAgICAgICBtYXNrIHw9IEQzRDExX0NP
TE9SX1dSSVRFX0VOQUJMRV9SRUQ7CisgICAgfQorICAgIGlmIChncmVlbikKKyAgICB7CisgICAg
ICAgIG1hc2sgfD0gRDNEMTFfQ09MT1JfV1JJVEVfRU5BQkxFX0dSRUVOOworICAgIH0KKyAgICBp
ZiAoYmx1ZSkKKyAgICB7CisgICAgICAgIG1hc2sgfD0gRDNEMTFfQ09MT1JfV1JJVEVfRU5BQkxF
X0JMVUU7CisgICAgfQorICAgIGlmIChhbHBoYSkKKyAgICB7CisgICAgICAgIG1hc2sgfD0gRDNE
MTFfQ09MT1JfV1JJVEVfRU5BQkxFX0FMUEhBOworICAgIH0KKyAgICByZXR1cm4gbWFzazsKK30K
KworRDNEMTFfQ1VMTF9NT0RFIENvbnZlcnRDdWxsTW9kZShib29sIGN1bGxFbmFibGVkLCBHTGVu
dW0gY3VsbE1vZGUpCit7CisgICAgRDNEMTFfQ1VMTF9NT0RFIGN1bGwgPSBEM0QxMV9DVUxMX05P
TkU7CisKKyAgICBpZiAoY3VsbEVuYWJsZWQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGN1bGxN
b2RlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9GUk9OVDogICAgICAgICAgICBjdWxs
ID0gRDNEMTFfQ1VMTF9GUk9OVDsgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9CQUNLOiAg
ICAgICAgICAgICBjdWxsID0gRDNEMTFfQ1VMTF9CQUNLOyAgICAgYnJlYWs7CisgICAgICAgICAg
Y2FzZSBHTF9GUk9OVF9BTkRfQkFDSzogICBjdWxsID0gRDNEMTFfQ1VMTF9OT05FOyAgICAgYnJl
YWs7CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICBjdWxsID0gRDNEMTFfQ1VMTF9OT05FOworICAgIH0K
KworICAgIHJldHVybiBjdWxsOworfQorCitEM0QxMV9DT01QQVJJU09OX0ZVTkMgQ29udmVydENv
bXBhcmlzb24oR0xlbnVtIGNvbXBhcmlzb24pCit7CisgICAgRDNEMTFfQ09NUEFSSVNPTl9GVU5D
IGQzZENvbXAgPSBEM0QxMV9DT01QQVJJU09OX05FVkVSOworICAgIHN3aXRjaCAoY29tcGFyaXNv
bikKKyAgICB7CisgICAgICBjYXNlIEdMX05FVkVSOiAgICBkM2RDb21wID0gRDNEMTFfQ09NUEFS
SVNPTl9ORVZFUjsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9BTFdBWVM6ICAgZDNk
Q29tcCA9IEQzRDExX0NPTVBBUklTT05fQUxXQVlTOyAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfTEVTUzogICAgIGQzZENvbXAgPSBEM0QxMV9DT01QQVJJU09OX0xFU1M7ICAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xFUVVBTDogICBkM2RDb21wID0gRDNEMTFfQ09NUEFS
SVNPTl9MRVNTX0VRVUFMOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9FUVVBTDogICAgZDNk
Q29tcCA9IEQzRDExX0NPTVBBUklTT05fRVFVQUw7ICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfR1JFQVRFUjogIGQzZENvbXAgPSBEM0QxMV9DT01QQVJJU09OX0dSRUFURVI7ICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0dFUVVBTDogICBkM2RDb21wID0gRDNEMTFfQ09NUEFS
SVNPTl9HUkVBVEVSX0VRVUFMOyAgIGJyZWFrOworICAgICAgY2FzZSBHTF9OT1RFUVVBTDogZDNk
Q29tcCA9IEQzRDExX0NPTVBBUklTT05fTk9UX0VRVUFMOyAgICAgICBicmVhazsKKyAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIGQzZENvbXA7Cit9CisK
K0QzRDExX0RFUFRIX1dSSVRFX01BU0sgQ29udmVydERlcHRoTWFzayhib29sIGRlcHRoV3JpdGVF
bmFibGVkKQoreworICAgIHJldHVybiBkZXB0aFdyaXRlRW5hYmxlZCA/IEQzRDExX0RFUFRIX1dS
SVRFX01BU0tfQUxMIDogRDNEMTFfREVQVEhfV1JJVEVfTUFTS19aRVJPOworfQorCitVSU5UOCBD
b252ZXJ0U3RlbmNpbE1hc2soR0x1aW50IHN0ZW5jaWxtYXNrKQoreworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxVSU5UOD4oc3RlbmNpbG1hc2spOworfQorCitEM0QxMV9TVEVOQ0lMX09QIENvbnZl
cnRTdGVuY2lsT3AoR0xlbnVtIHN0ZW5jaWxPcCkKK3sKKyAgICBEM0QxMV9TVEVOQ0lMX09QIGQz
ZFN0ZW5jaWxPcCA9IEQzRDExX1NURU5DSUxfT1BfS0VFUDsKKworICAgIHN3aXRjaCAoc3RlbmNp
bE9wKQorICAgIHsKKyAgICAgIGNhc2UgR0xfWkVSTzogICAgICBkM2RTdGVuY2lsT3AgPSBEM0Qx
MV9TVEVOQ0lMX09QX1pFUk87ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0tFRVA6ICAgICAg
ZDNkU3RlbmNpbE9wID0gRDNEMTFfU1RFTkNJTF9PUF9LRUVQOyAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9SRVBMQUNFOiAgIGQzZFN0ZW5jaWxPcCA9IEQzRDExX1NURU5DSUxfT1BfUkVQTEFD
RTsgICBicmVhazsKKyAgICAgIGNhc2UgR0xfSU5DUjogICAgICBkM2RTdGVuY2lsT3AgPSBEM0Qx
MV9TVEVOQ0lMX09QX0lOQ1JfU0FUOyAgYnJlYWs7CisgICAgICBjYXNlIEdMX0RFQ1I6ICAgICAg
ZDNkU3RlbmNpbE9wID0gRDNEMTFfU1RFTkNJTF9PUF9ERUNSX1NBVDsgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9JTlZFUlQ6ICAgIGQzZFN0ZW5jaWxPcCA9IEQzRDExX1NURU5DSUxfT1BfSU5WRVJU
OyAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfSU5DUl9XUkFQOiBkM2RTdGVuY2lsT3AgPSBEM0Qx
MV9TVEVOQ0lMX09QX0lOQ1I7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0RFQ1JfV1JBUDog
ZDNkU3RlbmNpbE9wID0gRDNEMTFfU1RFTkNJTF9PUF9ERUNSOyAgICAgIGJyZWFrOworICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZDNkU3RlbmNpbE9w
OworfQorCitEM0QxMV9GSUxURVIgQ29udmVydEZpbHRlcihHTGVudW0gbWluRmlsdGVyLCBHTGVu
dW0gbWFnRmlsdGVyLCBmbG9hdCBtYXhBbmlzb3Ryb3B5KQoreworICAgIGlmIChtYXhBbmlzb3Ry
b3B5ID4gMS4wZikKKyAgICB7CisgICAgICAgIHJldHVybiBEM0QxMV9FTkNPREVfQU5JU09UUk9Q
SUNfRklMVEVSKGZhbHNlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgRDNEMTFf
RklMVEVSX1RZUEUgZHhNaW4gPSBEM0QxMV9GSUxURVJfVFlQRV9QT0lOVDsKKyAgICAgICAgRDNE
MTFfRklMVEVSX1RZUEUgZHhNaXAgPSBEM0QxMV9GSUxURVJfVFlQRV9QT0lOVDsKKyAgICAgICAg
c3dpdGNoIChtaW5GaWx0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX05FQVJFU1Q6
ICAgICAgICAgICAgICAgIGR4TWluID0gRDNEMTFfRklMVEVSX1RZUEVfUE9JTlQ7ICBkeE1pcCA9
IEQzRDExX0ZJTFRFUl9UWVBFX1BPSU5UOyAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9MSU5F
QVI6ICAgICAgICAgICAgICAgICBkeE1pbiA9IEQzRDExX0ZJTFRFUl9UWVBFX0xJTkVBUjsgZHhN
aXAgPSBEM0QxMV9GSUxURVJfVFlQRV9QT0lOVDsgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xf
TkVBUkVTVF9NSVBNQVBfTkVBUkVTVDogZHhNaW4gPSBEM0QxMV9GSUxURVJfVFlQRV9QT0lOVDsg
IGR4TWlwID0gRDNEMTFfRklMVEVSX1RZUEVfUE9JTlQ7ICBicmVhazsKKyAgICAgICAgICBjYXNl
IEdMX0xJTkVBUl9NSVBNQVBfTkVBUkVTVDogIGR4TWluID0gRDNEMTFfRklMVEVSX1RZUEVfTElO
RUFSOyBkeE1pcCA9IEQzRDExX0ZJTFRFUl9UWVBFX1BPSU5UOyAgYnJlYWs7CisgICAgICAgICAg
Y2FzZSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI6ICBkeE1pbiA9IEQzRDExX0ZJTFRFUl9UWVBF
X1BPSU5UOyAgZHhNaXAgPSBEM0QxMV9GSUxURVJfVFlQRV9MSU5FQVI7IGJyZWFrOworICAgICAg
ICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9MSU5FQVI6ICAgZHhNaW4gPSBEM0QxMV9GSUxURVJf
VFlQRV9MSU5FQVI7IGR4TWlwID0gRDNEMTFfRklMVEVSX1RZUEVfTElORUFSOyBicmVhazsKKyAg
ICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgIH0KKworICAgICAgICBEM0QxMV9GSUxURVJfVFlQRSBkeE1hZyA9IEQzRDExX0ZJTFRF
Ul9UWVBFX1BPSU5UOworICAgICAgICBzd2l0Y2ggKG1hZ0ZpbHRlcikKKyAgICAgICAgeworICAg
ICAgICAgIGNhc2UgR0xfTkVBUkVTVDogZHhNYWcgPSBEM0QxMV9GSUxURVJfVFlQRV9QT0lOVDsg
IGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfTElORUFSOiAgZHhNYWcgPSBEM0QxMV9GSUxURVJf
VFlQRV9MSU5FQVI7IGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBEM0QxMV9FTkNPREVfQkFTSUNfRklM
VEVSKGR4TWluLCBkeE1hZywgZHhNaXAsIGZhbHNlKTsKKyAgICB9Cit9CisKK0QzRDExX1RFWFRV
UkVfQUREUkVTU19NT0RFIENvbnZlcnRUZXh0dXJlV3JhcChHTGVudW0gd3JhcCkKK3sKKyAgICBz
d2l0Y2ggKHdyYXApCisgICAgeworICAgICAgY2FzZSBHTF9SRVBFQVQ6ICAgICAgICAgIHJldHVy
biBEM0QxMV9URVhUVVJFX0FERFJFU1NfV1JBUDsKKyAgICAgIGNhc2UgR0xfQ0xBTVBfVE9fRURH
RTogICByZXR1cm4gRDNEMTFfVEVYVFVSRV9BRERSRVNTX0NMQU1QOworICAgICAgY2FzZSBHTF9N
SVJST1JFRF9SRVBFQVQ6IHJldHVybiBEM0QxMV9URVhUVVJFX0FERFJFU1NfTUlSUk9SOworICAg
ICAgZGVmYXVsdDogICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAg
cmV0dXJuIEQzRDExX1RFWFRVUkVfQUREUkVTU19XUkFQOworfQorCitGTE9BVCBDb252ZXJ0TWlu
TE9EKEdMZW51bSBtaW5GaWx0ZXIsIHVuc2lnbmVkIGludCBsb2RPZmZzZXQpCit7CisgICAgcmV0
dXJuIChtaW5GaWx0ZXIgPT0gR0xfTkVBUkVTVCB8fCBtaW5GaWx0ZXIgPT0gR0xfTElORUFSKSA/
IHN0YXRpY19jYXN0PGZsb2F0Pihsb2RPZmZzZXQpIDogLUZMVF9NQVg7Cit9CisKK0ZMT0FUIENv
bnZlcnRNYXhMT0QoR0xlbnVtIG1pbkZpbHRlciwgdW5zaWduZWQgaW50IGxvZE9mZnNldCkKK3sK
KyAgICByZXR1cm4gKG1pbkZpbHRlciA9PSBHTF9ORUFSRVNUIHx8IG1pbkZpbHRlciA9PSBHTF9M
SU5FQVIpID8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGxvZE9mZnNldCkgOiBGTFRfTUFYOworfQorCit9
CisKK25hbWVzcGFjZSBkM2QxMV9nbAoreworCitHTGVudW0gQ29udmVydEJhY2tCdWZmZXJGb3Jt
YXQoRFhHSV9GT1JNQVQgZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsKKyAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk06IHJldHVybiBHTF9SR0JBOF9PRVM7
CisgICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOiByZXR1cm4gR0xfQkdSQThf
RVhUOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gR0xfUkdCQThfT0VTOworfQorCitHTGVudW0gQ29udmVydERlcHRoU3RlbmNpbEZv
cm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpCisgICAgewor
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9VTktOT1dOOiByZXR1cm4gR0xfTk9ORTsKKyAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfRDE2X1VOT1JNOiByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UMTY7Cisg
ICAgICBjYXNlIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOiByZXR1cm4gR0xfREVQVEgy
NF9TVEVOQ0lMOF9PRVM7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOwor
ICAgIH0KKworICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKK30KKworR0xlbnVt
IENvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KQoreworICAgIHN3
aXRjaCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5P
Uk06CisgICAgICAgIHJldHVybiBHTF9CR1JBOF9FWFQ7CisgICAgICBjYXNlIERYR0lfRk9STUFU
X1I4RzhCOEE4X1VOT1JNOgorICAgICAgICByZXR1cm4gR0xfUkdCQThfT0VTOworICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9EMTZfVU5PUk06CisgICAgICAgIHJldHVybiBHTF9ERVBUSF9DT01QT05F
TlQxNjsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ6CisgICAgICAg
IHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIEdMX1JHQkE4X09FUzsKK30KKwor
R0xlbnVtIENvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KQor
eworICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhH
OEI4QThfVU5PUk06CisgICAgICAgIHJldHVybiBHTF9SR0JBOF9PRVM7CisgICAgICBjYXNlIERY
R0lfRk9STUFUX0E4X1VOT1JNOgorICAgICAgICByZXR1cm4gR0xfQUxQSEE4X0VYVDsKKyAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNOgorICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUMV9FWFQ7CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STToK
KyAgICAgICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU7CisgICAg
ICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STToKKyAgICAgICAgcmV0dXJuIEdMX0NPTVBSRVNT
RURfUkdCQV9TM1RDX0RYVDVfQU5HTEU7CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIz
MkEzMl9GTE9BVDoKKyAgICAgICAgcmV0dXJuIEdMX1JHQkEzMkZfRVhUOworICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQ6CisgICAgICAgIHJldHVybiBHTF9SR0IzMkZfRVhU
OworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6CisgICAgICAgIHJl
dHVybiBHTF9SR0JBMTZGX0VYVDsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5P
Uk06CisgICAgICAgIHJldHVybiBHTF9CR1JBOF9FWFQ7CisgICAgICBjYXNlIERYR0lfRk9STUFU
X1I4X1VOT1JNOgorICAgICAgICByZXR1cm4gR0xfUjhfRVhUOworICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SOEc4X1VOT1JNOgorICAgICAgICByZXR1cm4gR0xfUkc4X0VYVDsKKyAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjE2X0ZMT0FUOgorICAgICAgICByZXR1cm4gR0xfUjE2Rl9FWFQ7CisgICAg
ICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9GTE9BVDoKKyAgICAgICAgcmV0dXJuIEdMX1JHMTZG
X0VYVDsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDE2X1VOT1JNOgorICAgICAgICByZXR1cm4g
R0xfREVQVEhfQ09NUE9ORU5UMTY7CisgICAgICBjYXNlIERYR0lfRk9STUFUX0QyNF9VTk9STV9T
OF9VSU5UOgorICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7CisgICAgICBj
YXNlIERYR0lfRk9STUFUX1VOS05PV046CisgICAgICAgIHJldHVybiBHTF9OT05FOworICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xf
UkdCQThfT0VTOworfQorCit9CisKK25hbWVzcGFjZSBnbF9kM2QxMQoreworCitEWEdJX0ZPUk1B
VCBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdMZW51bSBmb3JtYXQpCit7CisgICAgc3dpdGNo
IChmb3JtYXQpCisgICAgeworICAgICAgY2FzZSBHTF9SR0JBNDoKKyAgICAgIGNhc2UgR0xfUkdC
NV9BMToKKyAgICAgIGNhc2UgR0xfUkdCQThfT0VTOgorICAgICAgY2FzZSBHTF9SR0I1NjU6Cisg
ICAgICBjYXNlIEdMX1JHQjhfT0VTOgorICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjhHOEI4
QThfVU5PUk07CisgICAgICBjYXNlIEdMX0JHUkE4X0VYVDoKKyAgICAgICAgcmV0dXJuIERYR0lf
Rk9STUFUX0I4RzhSOEE4X1VOT1JNOworICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoK
KyAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0QxNl9VTk9STTsKKyAgICAgIGNhc2UgR0xfU1RF
TkNJTF9JTkRFWDg6CisgICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgorICAgICAg
ICByZXR1cm4gRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ7CisgICAgICBkZWZhdWx0Ogor
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBEWEdJX0ZPUk1BVF9S
OEc4QjhBOF9VTk9STTsKK30KKworRFhHSV9GT1JNQVQgQ29udmVydFRleHR1cmVGb3JtYXQoR0xl
bnVtIGludGVybmFsZm9ybWF0KQoreworICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCisgICAg
eworICAgICAgY2FzZSBHTF9SR0I1NjU6CisgICAgICBjYXNlIEdMX1JHQkE0OgorICAgICAgY2Fz
ZSBHTF9SR0I1X0ExOgorICAgICAgY2FzZSBHTF9SR0I4X09FUzoKKyAgICAgIGNhc2UgR0xfUkdC
QThfT0VTOgorICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0VYVDoKKyAgICAgIGNhc2UgR0xfTFVN
SU5BTkNFOF9BTFBIQThfRVhUOgorICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjhHOEI4QThf
VU5PUk07CisgICAgICBjYXNlIEdMX0FMUEhBOF9FWFQ6CisgICAgICAgIHJldHVybiBEWEdJX0ZP
Uk1BVF9BOF9VTk9STTsKKyAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VY
VDoKKyAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6CisgICAgICAg
IHJldHVybiBEWEdJX0ZPUk1BVF9CQzFfVU5PUk07CisgICAgICBjYXNlIEdMX0NPTVBSRVNTRURf
UkdCQV9TM1RDX0RYVDNfQU5HTEU6CisgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9CQzJfVU5P
Uk07CisgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6CisgICAg
ICAgIHJldHVybiBEWEdJX0ZPUk1BVF9CQzNfVU5PUk07CisgICAgICBjYXNlIEdMX1JHQkEzMkZf
RVhUOgorICAgICAgY2FzZSBHTF9BTFBIQTMyRl9FWFQ6CisgICAgICBjYXNlIEdMX0xVTUlOQU5D
RV9BTFBIQTMyRl9FWFQ6CisgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJf
RkxPQVQ7CisgICAgICBjYXNlIEdMX1JHQjMyRl9FWFQ6CisgICAgICBjYXNlIEdMX0xVTUlOQU5D
RTMyRl9FWFQ6CisgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQ7
CisgICAgICBjYXNlIEdMX1JHQkExNkZfRVhUOgorICAgICAgY2FzZSBHTF9BTFBIQTE2Rl9FWFQ6
CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6CisgICAgICBjYXNlIEdMX1JH
QjE2Rl9FWFQ6CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6CisgICAgICAgIHJldHVy
biBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ7CisgICAgICBjYXNlIEdMX0JHUkE4X0VY
VDoKKyAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOworICAgICAgY2Fz
ZSBHTF9SOF9FWFQ6CisgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SOF9VTk9STTsKKyAgICAg
IGNhc2UgR0xfUkc4X0VYVDoKKyAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1I4RzhfVU5PUk07
CisgICAgICBjYXNlIEdMX1IxNkZfRVhUOgorICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjE2
X0ZMT0FUOworICAgICAgY2FzZSBHTF9SRzE2Rl9FWFQ6CisgICAgICAgIHJldHVybiBEWEdJX0ZP
Uk1BVF9SMTZHMTZfRkxPQVQ7CisgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgorICAg
ICAgICByZXR1cm4gRFhHSV9GT1JNQVRfRDE2X1VOT1JNOworICAgICAgY2FzZSBHTF9ERVBUSF9D
T01QT05FTlQzMl9PRVM6CisgICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgorICAg
ICAgICByZXR1cm4gRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ7CisgICAgICBjYXNlIEdM
X05PTkU6CisgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9VTktOT1dOOworICAgICAgZGVmYXVs
dDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gRFhHSV9GT1JN
QVRfUjhHOEI4QThfVU5PUk07Cit9CisKK30KKworbmFtZXNwYWNlIGQzZDExCit7CisKK3ZvaWQg
U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleChQb3NpdGlvblRleENvb3JkVmVydGV4KiB2ZXJ0ZXgs
IGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHUsIGZsb2F0IHYpCit7CisgICAgdmVydGV4LT54ID0g
eDsKKyAgICB2ZXJ0ZXgtPnkgPSB5OworICAgIHZlcnRleC0+dSA9IHU7CisgICAgdmVydGV4LT52
ID0gdjsKK30KKwordm9pZCBTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgoUG9zaXRpb25EZXB0
aENvbG9yVmVydGV4KiB2ZXJ0ZXgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6Q29sb3IgJmNvbG9yKQoreworICAg
IHZlcnRleC0+eCA9IHg7CisgICAgdmVydGV4LT55ID0geTsKKyAgICB2ZXJ0ZXgtPnogPSB6Owor
ICAgIHZlcnRleC0+ciA9IGNvbG9yLnJlZDsKKyAgICB2ZXJ0ZXgtPmcgPSBjb2xvci5ncmVlbjsK
KyAgICB2ZXJ0ZXgtPmIgPSBjb2xvci5ibHVlOworICAgIHZlcnRleC0+YSA9IGNvbG9yLmFscGhh
OworfQorCitzaXplX3QgQ29tcHV0ZVBpeGVsU2l6ZUJpdHMoRFhHSV9GT1JNQVQgZm9ybWF0KQor
eworICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjFf
VU5PUk06CisgICAgICAgIHJldHVybiAxOworCisgICAgICBjYXNlIERYR0lfRk9STUFUX0E4X1VO
T1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOF9TSU5UOgorICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SOF9TTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVFlQRUxFU1M6CisgICAg
ICBjYXNlIERYR0lfRk9STUFUX1I4X1VJTlQ6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1VO
T1JNOgorICAgICAgICByZXR1cm4gODsKKworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CNUc1UjVB
MV9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjVHNlI1X1VOT1JNOgorICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9EMTZfVU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IxNl9GTE9B
VDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X1NJTlQ6CisgICAgICBjYXNlIERYR0lfRk9S
TUFUX1IxNl9TTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X1RZUEVMRVNTOgorICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfVUlOVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2
X1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1NJTlQ6CisgICAgICBjYXNlIERY
R0lfRk9STUFUX1I4RzhfU05PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfVFlQRUxF
U1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfVUlOVDoKKyAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjhHOF9VTk9STToKKyAgICAgICAgcmV0dXJuIDE2OworCisgICAgICBjYXNlIERYR0lf
Rk9STUFUX0I4RzhSOFg4X1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhY
OF9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4WDhfVU5PUk1fU1JHQjoKKyAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ6CisgICAgICBjYXNlIERYR0lf
Rk9STUFUX0QzMl9GTE9BVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FUX1M4WDI0
X1VJTlQ6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0c4UjhfRzhCOF9VTk9STToKKyAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfUjEwRzEwQjEwX1hSX0JJQVNfQTJfVU5PUk06CisgICAgICBjYXNlIERY
R0lfRk9STUFUX1IxMEcxMEIxMEEyX1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
MTBHMTBCMTBBMl9VSU5UOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTBHMTBCMTBBMl9VTk9S
TToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjExRzExQjEwX0ZMT0FUOgorICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9SMTZHMTZfRkxPQVQ6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9T
SU5UOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfU05PUk06CisgICAgICBjYXNlIERY
R0lfRk9STUFUX1IxNkcxNl9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2
X1VJTlQ6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9VTk9STToKKyAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjI0X1VOT1JNX1g4X1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9SMjRHOF9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyX0ZMT0FUOgorICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJfRkxPQVRfWDhYMjRfVFlQRUxFU1M6CisgICAgICBjYXNl
IERYR0lfRk9STUFUX1IzMl9TSU5UOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJfVFlQRUxF
U1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMl9VSU5UOgorICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SOEc4X0I4RzhfVU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1NJ
TlQ6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1NOT1JNOgorICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9SOEc4QjhBOF9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhH
OEI4QThfVUlOVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk06CisgICAg
ICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNX1NSR0I6CisgICAgICBjYXNlIERYR0lf
Rk9STUFUX0I4RzhSOEE4X1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhB
OF9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk1fU1JHQjoKKyAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjlHOUI5RTVfU0hBUkVERVhQOgorICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9YMjRfVFlQRUxFU1NfRzhfVUlOVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfWDMy
X1RZUEVMRVNTX0c4WDI0X1VJTlQ6CisgICAgICAgIHJldHVybiAzMjsKKworICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1Ix
NkcxNkIxNkExNl9TSU5UOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfU05P
Uk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9UWVBFTEVTUzoKKyAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1VJTlQ6CisgICAgICBjYXNlIERYR0lfRk9S
TUFUX1IxNkcxNkIxNkExNl9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyX0ZM
T0FUOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJfU0lOVDoKKyAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfUjMyRzMyX1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJf
VUlOVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzhYMjRfVFlQRUxFU1M6CisgICAgICAg
IHJldHVybiA2NDsKKworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQ6Cisg
ICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9TSU5UOgorICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SMzJHMzJCMzJfVFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIz
Ml9VSU5UOgorICAgICAgICByZXR1cm4gOTY7CisKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMy
RzMyQjMyQTMyX0ZMT0FUOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfU0lO
VDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX1RZUEVMRVNTOgorICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfVUlOVDoKKyAgICAgICAgcmV0dXJuIDEyODsK
KworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDMV9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNX1NSR0I6
CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9TTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkM0X1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVU5PUk06CisgICAg
ICAgIHJldHVybiA0OworCisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9UWVBFTEVTUzoKKyAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzJfVU5PUk1fU1JHQjoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1RZUEVMRVNTOgorICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JD
M19VTk9STV9TUkdCOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfU05PUk06CisgICAgICBj
YXNlIERYR0lfRk9STUFUX0JDNV9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1
X1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1NGMTY6CisgICAgICBjYXNlIERY
R0lfRk9STUFUX0JDNkhfVFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVUYx
NjoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9CQzdfVU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9STV9TUkdC
OgorICAgICAgICByZXR1cm4gODsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorfQorCitzaXplX3QgQ29tcHV0ZUJsb2NrU2l6ZUJpdHMoRFhHSV9GT1JNQVQgZm9y
bWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkMxX1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk06CisgICAg
ICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9STV9TUkdCOgorICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9CQzRfU05PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9UWVBFTEVTUzoKKyAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkM0X1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJf
VFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STToKKyAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkMyX1VOT1JNX1NSR0I6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19U
WVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNOgorICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9CQzNfVU5PUk1fU1JHQjoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1NO
T1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfVFlQRUxFU1M6CisgICAgICBjYXNlIERY
R0lfRk9STUFUX0JDNV9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9TRjE2Ogor
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzZIX1VGMTY6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19UWVBFTEVTUzoKKyAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzdfVU5PUk1fU1JHQjoKKyAgICAgICAgcmV0dXJuIENvbXB1dGVQaXhlbFNpemVCaXRzKGZvcm1h
dCkgKiAxNjsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KK30KKworYm9vbCBJc0NvbXByZXNzZWQoRFhHSV9GT1JNQVQgZm9y
bWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkMxX1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk06CisgICAg
ICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9STV9TUkdCOgorICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9CQzRfU05PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9UWVBFTEVTUzoKKyAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkM0X1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJf
VFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STToKKyAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkMyX1VOT1JNX1NSR0I6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19U
WVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNOgorICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9CQzNfVU5PUk1fU1JHQjoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1NO
T1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfVFlQRUxFU1M6CisgICAgICBjYXNlIERY
R0lfRk9STUFUX0JDNV9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9TRjE2Ogor
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzZIX1VGMTY6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19UWVBFTEVTUzoKKyAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzdfVU5PUk1fU1JHQjoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICBjYXNlIERYR0lfRk9S
TUFUX1VOS05PV046CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3Vu
c2lnbmVkIGludCBHZXRUZXh0dXJlRm9ybWF0RGltZW5zaW9uQWxpZ25tZW50KERYR0lfRk9STUFU
IGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDMV9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNOgor
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk1fU1JHQjoKKyAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfQkM0X1NOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVFlQRUxFU1M6Cisg
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
QkMyX1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk06CisgICAgICBj
YXNlIERYR0lfRk9STUFUX0JDMl9VTk9STV9TUkdCOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzNfVFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STToKKyAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNX1NSR0I6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JD
NV9TTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1RZUEVMRVNTOgorICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzVfVU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfU0Yx
NjoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkM2SF9VRjE2OgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVFlQRUxFU1M6
CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkM3X1VOT1JNX1NSR0I6CisgICAgICAgIHJldHVybiA0OworICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9VTktOT1dOOgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMTsK
KyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAxOworICAgIH0KK30KKworYm9vbCBJc0Rl
cHRoU3RlbmNpbEZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3Jt
YXQpCisgICAgeworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVRfUzhYMjRfVUlOVDoK
KyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FUOgorICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9EMjRfVU5PUk1fUzhfVUlOVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDE2X1VOT1JNOgor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKK0RYR0lfRk9STUFUIEdldERlcHRoVGV4dHVyZUZvcm1hdChEWEdJX0ZP
Uk1BVCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpCisgICAgeworICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9EMzJfRkxPQVRfUzhYMjRfVUlOVDogcmV0dXJuIERYR0lfRk9STUFUX1IzMkc4
WDI0X1RZUEVMRVNTOworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVQ6ICAgICAgICAg
ICAgcmV0dXJuIERYR0lfRk9STUFUX1IzMl9UWVBFTEVTUzsKKyAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfRDI0X1VOT1JNX1M4X1VJTlQ6ICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMjRHOF9UWVBFTEVT
UzsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDE2X1VOT1JNOiAgICAgICAgICAgIHJldHVybiBE
WEdJX0ZPUk1BVF9SMTZfVFlQRUxFU1M7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAg
ICAgICAgICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfVU5LTk9XTjsKKyAgICB9Cit9CisKK0RY
R0lfRk9STUFUIEdldERlcHRoU2hhZGVyUmVzb3VyY2VGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0
KQoreworICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
RDMyX0ZMT0FUX1M4WDI0X1VJTlQ6IHJldHVybiBEWEdJX0ZPUk1BVF9SMzJfRkxPQVRfWDhYMjRf
VFlQRUxFU1M7CisgICAgICBjYXNlIERYR0lfRk9STUFUX0QzMl9GTE9BVDogICAgICAgICAgICBy
ZXR1cm4gRFhHSV9GT1JNQVRfUjMyX1VJTlQ7CisgICAgICBjYXNlIERYR0lfRk9STUFUX0QyNF9V
Tk9STV9TOF9VSU5UOiAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjI0X1VOT1JNX1g4X1RZUEVMRVNT
OworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZfVU5PUk06ICAgICAgICAgICAgcmV0dXJuIERY
R0lfRk9STUFUX1IxNl9VTk9STTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAg
ICAgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9VTktOT1dOOworICAgIH0KK30KKworSFJFU1VM
VCBTZXREZWJ1Z05hbWUoSUQzRDExRGV2aWNlQ2hpbGQgKnJlc291cmNlLCBjb25zdCBjaGFyICpu
YW1lKQoreworI2lmIGRlZmluZWQoX0RFQlVHKQorICAgIHJldHVybiByZXNvdXJjZS0+U2V0UHJp
dmF0ZURhdGEoV0tQRElEX0QzRERlYnVnT2JqZWN0TmFtZSwgc3RybGVuKG5hbWUpLCBuYW1lKTsK
KyNlbHNlCisgICAgcmV0dXJuIFNfT0s7CisjZW5kaWYKK30KKworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJl
cjExX3V0aWxzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYmM0OGMxYTEzNWE1ZDg4
YTg5YmQ1Njg1NjlmZDZlOWRkNjc3M2VlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxz
LmgKQEAgLTAsMCArMSw5NSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIHJlbmRlcmVyMTFfdXRpbHMu
aDogQ29udmVyc2lvbiBmdW5jdGlvbnMgYW5kIG90aGVyIHV0aWxpdHkgcm91dGluZXMKKy8vIHNw
ZWNpZmljIHRvIHRoZSBEM0QxMSByZW5kZXJlci4KKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVS
RVJfUkVOREVSRVIxMV9VVElMU19ICisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJF
UjExX1VUSUxTX0gKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgiCisKK25hbWVz
cGFjZSBnbF9kM2QxMQoreworCitEM0QxMV9CTEVORCBDb252ZXJ0QmxlbmRGdW5jKEdMZW51bSBn
bEJsZW5kLCBib29sIGlzQWxwaGEpOworRDNEMTFfQkxFTkRfT1AgQ29udmVydEJsZW5kT3AoR0xl
bnVtIGdsQmxlbmRPcCk7CitVSU5UOCBDb252ZXJ0Q29sb3JNYXNrKGJvb2wgbWFza1JlZCwgYm9v
bCBtYXNrR3JlZW4sIGJvb2wgbWFza0JsdWUsIGJvb2wgbWFza0FscGhhKTsKKworRDNEMTFfQ1VM
TF9NT0RFIENvbnZlcnRDdWxsTW9kZShib29sIGN1bGxFbmFibGVkLCBHTGVudW0gY3VsbE1vZGUp
OworCitEM0QxMV9DT01QQVJJU09OX0ZVTkMgQ29udmVydENvbXBhcmlzb24oR0xlbnVtIGNvbXBh
cmlzb24pOworRDNEMTFfREVQVEhfV1JJVEVfTUFTSyBDb252ZXJ0RGVwdGhNYXNrKGJvb2wgZGVw
dGhXcml0ZUVuYWJsZWQpOworVUlOVDggQ29udmVydFN0ZW5jaWxNYXNrKEdMdWludCBzdGVuY2ls
bWFzayk7CitEM0QxMV9TVEVOQ0lMX09QIENvbnZlcnRTdGVuY2lsT3AoR0xlbnVtIHN0ZW5jaWxP
cCk7CisKK0QzRDExX0ZJTFRFUiBDb252ZXJ0RmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIsIEdMZW51
bSBtYWdGaWx0ZXIsIGZsb2F0IG1heEFuaXNvdHJvcHkpOworRDNEMTFfVEVYVFVSRV9BRERSRVNT
X01PREUgQ29udmVydFRleHR1cmVXcmFwKEdMZW51bSB3cmFwKTsKK0ZMT0FUIENvbnZlcnRNaW5M
T0QoR0xlbnVtIG1pbkZpbHRlciwgdW5zaWduZWQgaW50IGxvZE9mZnNldCk7CitGTE9BVCBDb252
ZXJ0TWF4TE9EKEdMZW51bSBtaW5GaWx0ZXIsIHVuc2lnbmVkIGludCBsb2RPZmZzZXQpOworCitE
WEdJX0ZPUk1BVCBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdMZW51bSBmb3JtYXQpOworRFhH
SV9GT1JNQVQgQ29udmVydFRleHR1cmVGb3JtYXQoR0xlbnVtIGZvcm1hdCk7Cit9CisKK25hbWVz
cGFjZSBkM2QxMV9nbAoreworCitHTGVudW0gQ29udmVydEJhY2tCdWZmZXJGb3JtYXQoRFhHSV9G
T1JNQVQgZm9ybWF0KTsKK0dMZW51bSBDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9S
TUFUIGZvcm1hdCk7CitHTGVudW0gQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChEWEdJX0ZPUk1B
VCBmb3JtYXQpOworR0xlbnVtIENvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoRFhHSV9GT1JN
QVQgZm9ybWF0KTsKKworfQorCituYW1lc3BhY2UgZDNkMTEKK3sKKworc3RydWN0IFBvc2l0aW9u
VGV4Q29vcmRWZXJ0ZXgKK3sKKyAgICBmbG9hdCB4LCB5OworICAgIGZsb2F0IHUsIHY7Cit9Owor
dm9pZCBTZXRQb3NpdGlvblRleENvb3JkVmVydGV4KFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgqIHZl
cnRleCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgdSwgZmxvYXQgdik7CisKK3N0cnVjdCBQb3Np
dGlvbkRlcHRoQ29sb3JWZXJ0ZXgKK3sKKyAgICBmbG9hdCB4LCB5LCB6OworICAgIGZsb2F0IHIs
IGcsIGIsIGE7Cit9Owordm9pZCBTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgoUG9zaXRpb25E
ZXB0aENvbG9yVmVydGV4KiB2ZXJ0ZXgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6Q29sb3IgJmNvbG9yKTsKKwor
c2l6ZV90IENvbXB1dGVQaXhlbFNpemVCaXRzKERYR0lfRk9STUFUIGZvcm1hdCk7CitzaXplX3Qg
Q29tcHV0ZUJsb2NrU2l6ZUJpdHMoRFhHSV9GT1JNQVQgZm9ybWF0KTsKKworYm9vbCBJc0NvbXBy
ZXNzZWQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKK3Vuc2lnbmVkIGludCBHZXRUZXh0dXJlRm9ybWF0
RGltZW5zaW9uQWxpZ25tZW50KERYR0lfRk9STUFUIGZvcm1hdCk7CisKK2Jvb2wgSXNEZXB0aFN0
ZW5jaWxGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKK0RYR0lfRk9STUFUIEdldERlcHRoVGV4
dHVyZUZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpOworRFhHSV9GT1JNQVQgR2V0RGVwdGhTaGFk
ZXJSZXNvdXJjZUZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpOworCitIUkVTVUxUIFNldERlYnVn
TmFtZShJRDNEMTFEZXZpY2VDaGlsZCAqcmVzb3VyY2UsIGNvbnN0IGNoYXIgKm5hbWUpOworCitp
bmxpbmUgYm9vbCBpc0RldmljZUxvc3RFcnJvcihIUkVTVUxUIGVycm9yQ29kZSkKK3sKKyAgICBz
d2l0Y2ggKGVycm9yQ29kZSkKKyAgICB7CisgICAgICBjYXNlIERYR0lfRVJST1JfREVWSUNFX0hV
Tkc6CisgICAgICBjYXNlIERYR0lfRVJST1JfREVWSUNFX1JFTU9WRUQ6CisgICAgICBjYXNlIERY
R0lfRVJST1JfREVWSUNFX1JFU0VUOgorICAgICAgY2FzZSBEWEdJX0VSUk9SX0RSSVZFUl9JTlRF
Uk5BTF9FUlJPUjoKKyAgICAgIGNhc2UgRFhHSV9FUlJPUl9OT1RfQ1VSUkVOVExZX0FWQUlMQUJM
RToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorfQorCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfUkVO
REVSRVIxMV9VVElMU19ICmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvQ2xlYXIxMS5obHNsIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL0NsZWFy
MTEuaGxzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4wNDJhYzY5OWI2NmEyMjM5YWRiZjUyNTFmYWFmM2IzZTRjM2Zl
YzVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL0NsZWFyMTEuaGxzbApAQCAtMCwwICsxLDM4IEBA
Cit2b2lkIFZTX0NsZWFyKCBpbiBmbG9hdDMgIGluUG9zaXRpb24gOiAgICBQT1NJVElPTiwgIGlu
IGZsb2F0NCAgaW5Db2xvciA6IENPTE9SLAorICAgICAgICAgICAgICBvdXQgZmxvYXQ0IG91dFBv
c2l0aW9uIDogU1ZfUE9TSVRJT04sIG91dCBmbG9hdDQgb3V0Q29sb3IgOiBDT0xPUikKK3sKKyAg
ICBvdXRQb3NpdGlvbiA9IGZsb2F0NChpblBvc2l0aW9uLCAxLjBmKTsKKyAgICBvdXRDb2xvciA9
IGluQ29sb3I7Cit9CisKKy8vIEFzc3VtZSB3ZSBhcmUgaW4gU000Kywgd2hpY2ggaGFzIDggY29s
b3Igb3V0cHV0cworc3RydWN0IFBTX091dHB1dE11bHRpcGxlCit7CisJZmxvYXQ0IGNvbG9yMCA6
IFNWX1RBUkdFVDA7CisJZmxvYXQ0IGNvbG9yMSA6IFNWX1RBUkdFVDE7CisJZmxvYXQ0IGNvbG9y
MiA6IFNWX1RBUkdFVDI7CisJZmxvYXQ0IGNvbG9yMyA6IFNWX1RBUkdFVDM7CisJZmxvYXQ0IGNv
bG9yNCA6IFNWX1RBUkdFVDQ7CisJZmxvYXQ0IGNvbG9yNSA6IFNWX1RBUkdFVDU7CisJZmxvYXQ0
IGNvbG9yNiA6IFNWX1RBUkdFVDY7CisJZmxvYXQ0IGNvbG9yNyA6IFNWX1RBUkdFVDc7Cit9Owor
CitQU19PdXRwdXRNdWx0aXBsZSBQU19DbGVhck11bHRpcGxlKGluIGZsb2F0NCBpblBvc2l0aW9u
IDogU1ZfUE9TSVRJT04sIGluIGZsb2F0NCBpbkNvbG9yIDogQ09MT1IpCit7CisJUFNfT3V0cHV0
TXVsdGlwbGUgb3V0Q29sb3I7CisJb3V0Q29sb3IuY29sb3IwID0gaW5Db2xvcjsKKwlvdXRDb2xv
ci5jb2xvcjEgPSBpbkNvbG9yOworCW91dENvbG9yLmNvbG9yMiA9IGluQ29sb3I7CisJb3V0Q29s
b3IuY29sb3IzID0gaW5Db2xvcjsKKwlvdXRDb2xvci5jb2xvcjQgPSBpbkNvbG9yOworCW91dENv
bG9yLmNvbG9yNSA9IGluQ29sb3I7CisJb3V0Q29sb3IuY29sb3I2ID0gaW5Db2xvcjsKKwlvdXRD
b2xvci5jb2xvcjcgPSBpbkNvbG9yOworCXJldHVybiBvdXRDb2xvcjsKK30KKworZmxvYXQ0IFBT
X0NsZWFyU2luZ2xlKGluIGZsb2F0NCBpblBvc2l0aW9uIDogU1ZfUG9zaXRpb24sIGluIGZsb2F0
NCBpbkNvbG9yIDogQ09MT1IpIDogU1ZfVGFyZ2V0MAoreworCXJldHVybiBpbkNvbG9yOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9zaGFkZXJzL1Bhc3N0aHJvdWdoMTEuaGxzbCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9QYXNzdGhyb3VnaDExLmhs
c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDNiNzgwMWVmYzFmZWY2ZTIzOTE4MDA2N2RkMDIzNjk5ODU1YjlhMwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvc2hhZGVycy9QYXNzdGhyb3VnaDExLmhsc2wKQEAgLTAsMCArMSwyOSBA
QAorVGV4dHVyZTJEIFRleHR1cmUgOiByZWdpc3Rlcih0MCk7CitTYW1wbGVyU3RhdGUgU2FtcGxl
ciA6IHJlZ2lzdGVyKHMwKTsKKwordm9pZCBWU19QYXNzdGhyb3VnaCggaW4gZmxvYXQyICBpblBv
c2l0aW9uIDogICAgUE9TSVRJT04sICBpbiBmbG9hdDIgIGluVGV4Q29vcmQgOiBURVhDT09SRDAs
CisgICAgICAgICAgICAgICAgICAgIG91dCBmbG9hdDQgb3V0UG9zaXRpb24gOiBTVl9QT1NJVElP
Tiwgb3V0IGZsb2F0MiBvdXRUZXhDb29yZCA6IFRFWENPT1JEMCkKK3sKKyAgICBvdXRQb3NpdGlv
biA9IGZsb2F0NChpblBvc2l0aW9uLCAwLjBmLCAxLjBmKTsKKyAgICBvdXRUZXhDb29yZCA9IGlu
VGV4Q29vcmQ7Cit9CisKK2Zsb2F0NCBQU19QYXNzdGhyb3VnaFJHQkEoaW4gZmxvYXQ0IGluUG9z
aXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDApIDog
U1ZfVEFSR0VUMAoreworICAgIHJldHVybiBUZXh0dXJlLlNhbXBsZShTYW1wbGVyLCBpblRleENv
b3JkKS5yZ2JhOworfQorCitmbG9hdDQgUFNfUGFzc3Rocm91Z2hSR0IoaW4gZmxvYXQ0IGluUG9z
aXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDApIDog
U1ZfVEFSR0VUMAoreworICAgIHJldHVybiBmbG9hdDQoVGV4dHVyZS5TYW1wbGUoU2FtcGxlciwg
aW5UZXhDb29yZCkucmdiLCAxLjBmKTsKK30KKworZmxvYXQ0IFBTX1Bhc3N0aHJvdWdoTHVtKGlu
IGZsb2F0NCBpblBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDog
VEVYQ09PUkQwKSA6IFNWX1RBUkdFVDAKK3sKKyAgICByZXR1cm4gZmxvYXQ0KFRleHR1cmUuU2Ft
cGxlKFNhbXBsZXIsIGluVGV4Q29vcmQpLnJyciwgMS4wZik7Cit9CisKK2Zsb2F0NCBQU19QYXNz
dGhyb3VnaEx1bUFscGhhKGluIGZsb2F0NCBpblBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIGluIGZs
b2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNWX1RBUkdFVDAKK3sKKyAgICByZXR1cm4g
VGV4dHVyZS5TYW1wbGUoU2FtcGxlciwgaW5UZXhDb29yZCkucnJyYTsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hh
ZGVycy9jb21waWxlZC9jbGVhcjExdnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcjExdnMuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42YmM3NDMxMjZlZDA2YzhmNjc1OGUxMGU1ZDE3NzIwMTQ5NWM5NmRiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyMTF2cy5oCkBAIC0wLDAgKzEsMTMxIEBACisj
aWYgMA0KKy8vDQorLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29t
cGlsZXIgOS4zMC45MjAwLjE2Mzg0DQorLy8NCisvLw0KKy8vLw0KKy8vDQorLy8gSW5wdXQgc2ln
bmF0dXJlOg0KKy8vDQorLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lz
dGVyIFN5c1ZhbHVlICBGb3JtYXQgICBVc2VkDQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0t
LS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tDQorLy8gUE9TSVRJT04g
ICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAwICAgICBOT05FICAgZmxvYXQgICB4eXog
DQorLy8gQ09MT1IgICAgICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAxICAgICBOT05F
ICAgZmxvYXQgICB4eXp3DQorLy8NCisvLw0KKy8vIE91dHB1dCBzaWduYXR1cmU6DQorLy8NCisv
LyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZv
cm1hdCAgIFVzZWQNCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0t
LS0gLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0NCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAg
MCAgIHh5encgICAgICAgIDAgICAgICBQT1MgICBmbG9hdCAgIHh5encNCisvLyBDT0xPUiAgICAg
ICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDEgICAgIE5PTkUgICBmbG9hdCAgIHh5encN
CisvLw0KK3ZzXzRfMA0KK2RjbF9pbnB1dCB2MC54eXoNCitkY2xfaW5wdXQgdjEueHl6dw0KK2Rj
bF9vdXRwdXRfc2l2IG8wLnh5encsIHBvc2l0aW9uDQorZGNsX291dHB1dCBvMS54eXp3DQorbW92
IG8wLnh5eiwgdjAueHl6eA0KK21vdiBvMC53LCBsKDEuMDAwMDAwKQ0KK21vdiBvMS54eXp3LCB2
MS54eXp3DQorcmV0IA0KKy8vIEFwcHJveGltYXRlbHkgNCBpbnN0cnVjdGlvbiBzbG90cyB1c2Vk
DQorI2VuZGlmDQorDQorY29uc3QgQllURSBnX1ZTX0NsZWFyW10gPQ0KK3sNCisgICAgIDY4LCAg
ODgsICA2NiwgIDY3LCAgOTcsICAgNSwgDQorICAgICAxMywgMTYzLCAxNjAsIDI1NCwgIDk1LCAx
MjcsIA0KKyAgICAgMzAsIDE5NCwgMTIxLCAxNDQsIDIzNiwgMTg1LCANCisgICAgIDU5LCAgMjks
ICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgICA0OCwgICAyLCAgIDAsICAgMCwgICA1LCAgIDAs
IA0KKyAgICAgIDAsICAgMCwgIDUyLCAgIDAsICAgMCwgICAwLCANCisgICAgMTQwLCAgIDAsICAg
MCwgICAwLCAyMjAsICAgMCwgDQorICAgICAgMCwgICAwLCAgNDgsICAgMSwgICAwLCAgIDAsIA0K
KyAgICAxODAsICAgMSwgICAwLCAgIDAsICA4MiwgIDY4LCANCisgICAgIDY5LCAgNzAsICA4MCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgIDI4LCAgIDAsICAgMCwgICAw
LCAgIDAsICAgNCwgDQorICAgIDI1NCwgMjU1LCAgIDAsICAgMSwgICAwLCAgIDAsIA0KKyAgICAg
MjgsICAgMCwgICAwLCAgIDAsICA3NywgMTA1LCANCisgICAgIDk5LCAxMTQsIDExMSwgMTE1LCAx
MTEsIDEwMiwgDQorICAgIDExNiwgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsIA0KKyAgICAgNzIs
ICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCANCisgICAgMTA0LCAgOTcsIDEwMCwgMTAxLCAxMTQs
ICAzMiwgDQorICAgICA2NywgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIA0KKyAgICAxMDEsIDEx
NCwgIDMyLCAgNTcsICA0NiwgIDUxLCANCisgICAgIDQ4LCAgNDYsICA1NywgIDUwLCAgNDgsICA0
OCwgDQorICAgICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsIA0KKyAgICAgIDAsIDE3MSwg
IDczLCAgODMsICA3MSwgIDc4LCANCisgICAgIDcyLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgNTYsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQor
ICAgICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICA3LCAg
IDcsICAgMCwgICAwLCANCisgICAgIDY1LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDMsICAgMCwgICAwLCAgIDAs
ICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAxNSwgIDE1LCAgIDAsICAgMCwgDQorICAgICA4
MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsIA0KKyAgICAgNzksICA3OCwgICAwLCAgNjcsICA3
OSwgIDc2LCANCisgICAgIDc5LCAgODIsICAgMCwgMTcxLCAgNzksICA4MywgDQorICAgICA3MSwg
IDc4LCAgNzYsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDIsICAgMCwgICAwLCAgIDAsICAgOCwg
ICAwLCANCisgICAgICAwLCAgIDAsICA1NiwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAw
LCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgMTUsICAgMCwgDQorICAgICAgMCwgICAwLCAg
NjgsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAN
CisgICAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAs
ICAgMCwgIDE1LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDgzLCAgODYsICA5NSwgIDgwLCANCisg
ICAgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgDQorICAgICA3OCwgICAwLCAgNjcsICA3
OSwgIDc2LCAgNzksIA0KKyAgICAgODIsICAgMCwgMTcxLCAxNzEsICA4MywgIDcyLCANCisgICAg
IDY4LCAgODIsIDEyNCwgICAwLCAgIDAsICAgMCwgDQorICAgICA2NCwgICAwLCAgIDEsICAgMCwg
IDMxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDk1LCAgIDAsICAgMCwgICAzLCANCisgICAgMTE0
LCAgMTYsICAxNiwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgOTUsICAgMCwgICAw
LCAgIDMsIA0KKyAgICAyNDIsICAxNiwgIDE2LCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAg
IDAsIDEwMywgICAwLCAgIDAsICAgNCwgDQorICAgIDI0MiwgIDMyLCAgMTYsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCisgICAgMTAxLCAgIDAs
ICAgMCwgICAzLCAyNDIsICAzMiwgDQorICAgICAxNiwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgNTQsICAgMCwgICAwLCAgIDUsIDExNCwgIDMyLCANCisgICAgIDE2LCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQorICAgICA3MCwgIDE4LCAgMTYsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgIDU0LCAgIDAsICAgMCwgICA1LCANCisgICAgMTMwLCAgMzIsICAxNiwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDEsICA2NCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgMTI4LCAgNjMsICA1NCwgICAwLCANCisgICAgICAwLCAgIDUsIDI0MiwgIDMy
LCAgMTYsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDcwLCAgMzAsIA0KKyAgICAg
MTYsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCisgICAgIDYyLCAgIDAsICAgMCwgICAxLCAg
ODMsICA4NCwgDQorICAgICA2NSwgIDg0LCAxMTYsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDQs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQor
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgNCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCisgICAgICAwLCAgIDANCit9Ow0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9j
bGVhcm11bHRpcGxlMTFwcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFybXVsdGlwbGUxMXBzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZTRiNDQ1YWMzZjZhNzFlNGM1ZTIxYWRjNGJhZTlhZmRiOTI4MzllNgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcm11bHRpcGxlMTFwcy5oCkBAIC0wLDAgKzEs
MTk2IEBACisjaWYgMA0KKy8vDQorLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBT
aGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0DQorLy8NCisvLw0KKy8vLw0KKy8vDQorLy8g
SW5wdXQgc2lnbmF0dXJlOg0KKy8vDQorLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBN
YXNrIFJlZ2lzdGVyIFN5c1ZhbHVlICBGb3JtYXQgICBVc2VkDQorLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tDQorLy8g
U1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICAgZmxv
YXQgICAgICAgDQorLy8gQ09MT1IgICAgICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAx
ICAgICBOT05FICAgZmxvYXQgICB4eXp3DQorLy8NCisvLw0KKy8vIE91dHB1dCBzaWduYXR1cmU6
DQorLy8NCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lz
VmFsdWUgIEZvcm1hdCAgIFVzZWQNCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0t
LS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0NCisvLyBTVl9UQVJHRVQgICAgICAg
ICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICBmbG9hdCAgIHh5encNCisvLyBT
Vl9UQVJHRVQgICAgICAgICAgICAgICAgMSAgIHh5encgICAgICAgIDEgICBUQVJHRVQgICBmbG9h
dCAgIHh5encNCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMiAgIHh5encgICAgICAgIDIg
ICBUQVJHRVQgICBmbG9hdCAgIHh5encNCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMyAg
IHh5encgICAgICAgIDMgICBUQVJHRVQgICBmbG9hdCAgIHh5encNCisvLyBTVl9UQVJHRVQgICAg
ICAgICAgICAgICAgNCAgIHh5encgICAgICAgIDQgICBUQVJHRVQgICBmbG9hdCAgIHh5encNCisv
LyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgNSAgIHh5encgICAgICAgIDUgICBUQVJHRVQgICBm
bG9hdCAgIHh5encNCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgNiAgIHh5encgICAgICAg
IDYgICBUQVJHRVQgICBmbG9hdCAgIHh5encNCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAg
NyAgIHh5encgICAgICAgIDcgICBUQVJHRVQgICBmbG9hdCAgIHh5encNCisvLw0KK3BzXzRfMA0K
K2RjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHl6dw0KK2RjbF9vdXRwdXQgbzAueHl6dw0KK2RjbF9v
dXRwdXQgbzEueHl6dw0KK2RjbF9vdXRwdXQgbzIueHl6dw0KK2RjbF9vdXRwdXQgbzMueHl6dw0K
K2RjbF9vdXRwdXQgbzQueHl6dw0KK2RjbF9vdXRwdXQgbzUueHl6dw0KK2RjbF9vdXRwdXQgbzYu
eHl6dw0KK2RjbF9vdXRwdXQgbzcueHl6dw0KK21vdiBvMC54eXp3LCB2MS54eXp3DQorbW92IG8x
Lnh5encsIHYxLnh5encNCittb3YgbzIueHl6dywgdjEueHl6dw0KK21vdiBvMy54eXp3LCB2MS54
eXp3DQorbW92IG80Lnh5encsIHYxLnh5encNCittb3YgbzUueHl6dywgdjEueHl6dw0KK21vdiBv
Ni54eXp3LCB2MS54eXp3DQorbW92IG83Lnh5encsIHYxLnh5encNCityZXQgDQorLy8gQXBwcm94
aW1hdGVseSA5IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCisjZW5kaWYNCisNCitjb25zdCBCWVRF
IGdfUFNfQ2xlYXJNdWx0aXBsZVtdID0NCit7DQorICAgICA2OCwgIDg4LCAgNjYsICA2NywgIDky
LCAgNTQsIA0KKyAgICAxMjAsIDEwNSwgMTY2LCAxOTYsIDEzMiwgMTU4LCANCisgICAgMjA5LCAg
MzMsIDE4NSwgMTIyLCAgIDgsIDE4OSwgDQorICAgIDE0NSwgMTE0LCAgIDEsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgODgsICAgMywgICAwLCAgIDAsICAgNSwgICAwLCANCisgICAgICAwLCAgIDAs
ICA1MiwgICAwLCAgIDAsICAgMCwgDQorICAgIDE0MCwgICAwLCAgIDAsICAgMCwgMjI0LCAgIDAs
IA0KKyAgICAgIDAsICAgMCwgMTg4LCAgIDEsICAgMCwgICAwLCANCisgICAgMjIwLCAgIDIsICAg
MCwgICAwLCAgODIsICA2OCwgDQorICAgICA2OSwgIDcwLCAgODAsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAyOCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsIA0KKyAg
ICAyNTUsIDI1NSwgICAwLCAgIDEsICAgMCwgICAwLCANCisgICAgIDI4LCAgIDAsICAgMCwgICAw
LCAgNzcsIDEwNSwgDQorICAgICA5OSwgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIA0KKyAgICAx
MTYsICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCANCisgICAgIDcyLCAgNzYsICA4MywgIDc2LCAg
MzIsICA4MywgDQorICAgIDEwNCwgIDk3LCAxMDAsIDEwMSwgMTE0LCAgMzIsIA0KKyAgICAgNjcs
IDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCANCisgICAgMTAxLCAxMTQsICAzMiwgIDU3LCAgNDYs
ICA1MSwgDQorICAgICA0OCwgIDQ2LCAgNTcsICA1MCwgIDQ4LCAgNDgsIA0KKyAgICAgNDYsICA0
OSwgIDU0LCAgNTEsICA1NiwgIDUyLCANCisgICAgICAwLCAxNzEsICA3MywgIDgzLCAgNzEsICA3
OCwgDQorICAgICA3NiwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsIA0KKyAgICAgIDAsICAgMCwg
ICA4LCAgIDAsICAgMCwgICAwLCANCisgICAgIDU2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDMsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQor
ICAgICA2OCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQorICAg
ICAgMCwgICAwLCAgMTUsICAxNSwgICAwLCAgIDAsIA0KKyAgICAgODMsICA4NiwgIDk1LCAgODAs
ICA3OSwgIDgzLCANCisgICAgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAgMCwgDQorICAgICA2
NywgIDc5LCAgNzYsICA3OSwgIDgyLCAgIDAsIA0KKyAgICAxNzEsIDE3MSwgIDc5LCAgODMsICA3
MSwgIDc4LCANCisgICAgMjEyLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgDQorICAgICAgMCwg
ICAwLCAgIDgsICAgMCwgICAwLCAgIDAsIA0KKyAgICAyMDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMywgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDE1LCAgIDAsICAgMCwgICAw
LCANCisgICAgMjAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAN
CisgICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQorICAgIDIwMCwgICAwLCAgIDAs
ICAgMCwgICAyLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisg
ICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgDQorICAgICAgMCwgICAwLCAgMTUsICAg
MCwgICAwLCAgIDAsIA0KKyAgICAyMDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCANCisgICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMywgICAwLCAgIDAsICAgMCwg
ICAzLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDE1LCAgIDAsICAgMCwgICAwLCANCisgICAgMjAw
LCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAgIDMsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCANCisgICAgICAwLCAg
IDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQorICAgIDIwMCwgICAwLCAgIDAsICAgMCwgICA1LCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAzLCAgIDAs
ICAgMCwgICAwLCAgIDUsICAgMCwgDQorICAgICAgMCwgICAwLCAgMTUsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAyMDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCANCisgICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMywgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgIDE1LCAgIDAsICAgMCwgICAwLCANCisgICAgMjAwLCAgIDAsICAgMCwg
ICAwLCAgIDcsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDMsICAgMCwgICAwLCAgIDAsICAgNywgICAwLCANCisgICAgICAwLCAgIDAsICAxNSwgICAw
LCAgIDAsICAgMCwgDQorICAgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsIA0KKyAgICAg
NzEsICA2OSwgIDg0LCAgIDAsIDE3MSwgMTcxLCANCisgICAgIDgzLCAgNzIsICA2OCwgIDgyLCAg
MjQsICAgMSwgDQorICAgICAgMCwgICAwLCAgNjQsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgNzAs
ICAgMCwgICAwLCAgIDAsICA5OCwgIDE2LCANCisgICAgICAwLCAgIDMsIDI0MiwgIDE2LCAgMTYs
ICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgMTAxLCAgIDAsIA0KKyAgICAgIDAsICAg
MywgMjQyLCAgMzIsICAxNiwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAxMDEsICAg
MCwgDQorICAgICAgMCwgICAzLCAyNDIsICAzMiwgIDE2LCAgIDAsIA0KKyAgICAgIDEsICAgMCwg
ICAwLCAgIDAsIDEwMSwgICAwLCANCisgICAgICAwLCAgIDMsIDI0MiwgIDMyLCAgMTYsICAgMCwg
DQorICAgICAgMiwgICAwLCAgIDAsICAgMCwgMTAxLCAgIDAsIA0KKyAgICAgIDAsICAgMywgMjQy
LCAgMzIsICAxNiwgICAwLCANCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAxMDEsICAgMCwgDQor
ICAgICAgMCwgICAzLCAyNDIsICAzMiwgIDE2LCAgIDAsIA0KKyAgICAgIDQsICAgMCwgICAwLCAg
IDAsIDEwMSwgICAwLCANCisgICAgICAwLCAgIDMsIDI0MiwgIDMyLCAgMTYsICAgMCwgDQorICAg
ICAgNSwgICAwLCAgIDAsICAgMCwgMTAxLCAgIDAsIA0KKyAgICAgIDAsICAgMywgMjQyLCAgMzIs
ICAxNiwgICAwLCANCisgICAgICA2LCAgIDAsICAgMCwgICAwLCAxMDEsICAgMCwgDQorICAgICAg
MCwgICAzLCAyNDIsICAzMiwgIDE2LCAgIDAsIA0KKyAgICAgIDcsICAgMCwgICAwLCAgIDAsICA1
NCwgICAwLCANCisgICAgICAwLCAgIDUsIDI0MiwgIDMyLCAgMTYsICAgMCwgDQorICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgIDcwLCAgMzAsIA0KKyAgICAgMTYsICAgMCwgICAxLCAgIDAsICAgMCwg
ICAwLCANCisgICAgIDU0LCAgIDAsICAgMCwgICA1LCAyNDIsICAzMiwgDQorICAgICAxNiwgICAw
LCAgIDEsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgNzAsICAzMCwgIDE2LCAgIDAsICAgMSwgICAw
LCANCisgICAgICAwLCAgIDAsICA1NCwgICAwLCAgIDAsICAgNSwgDQorICAgIDI0MiwgIDMyLCAg
MTYsICAgMCwgICAyLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDcwLCAgMzAsICAxNiwgICAwLCAN
CisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgNTQsICAgMCwgDQorICAgICAgMCwgICA1LCAyNDIs
ICAzMiwgIDE2LCAgIDAsIA0KKyAgICAgIDMsICAgMCwgICAwLCAgIDAsICA3MCwgIDMwLCANCisg
ICAgIDE2LCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgICA1NCwgICAwLCAgIDAsICAg
NSwgMjQyLCAgMzIsIA0KKyAgICAgMTYsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCANCisgICAg
IDcwLCAgMzAsICAxNiwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAwLCAgNTQsICAgMCwg
ICAwLCAgIDUsIA0KKyAgICAyNDIsICAzMiwgIDE2LCAgIDAsICAgNSwgICAwLCANCisgICAgICAw
LCAgIDAsICA3MCwgIDMwLCAgMTYsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDU0
LCAgIDAsIA0KKyAgICAgIDAsICAgNSwgMjQyLCAgMzIsICAxNiwgICAwLCANCisgICAgICA2LCAg
IDAsICAgMCwgICAwLCAgNzAsICAzMCwgDQorICAgICAxNiwgICAwLCAgIDEsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgNTQsICAgMCwgICAwLCAgIDUsIDI0MiwgIDMyLCANCisgICAgIDE2LCAgIDAs
ICAgNywgICAwLCAgIDAsICAgMCwgDQorICAgICA3MCwgIDMwLCAgMTYsICAgMCwgICAxLCAgIDAs
IA0KKyAgICAgIDAsICAgMCwgIDYyLCAgIDAsICAgMCwgICAxLCANCisgICAgIDgzLCAgODQsICA2
NSwgIDg0LCAxMTYsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDksICAgMCwgICAwLCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgOSwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAxLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDksICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAw
LCAgIDANCit9Ow0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcnNpbmdsZTExcHMuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hh
ZGVycy9jb21waWxlZC9jbGVhcnNpbmdsZTExcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44N2NiMDg3Yzc1MDUy
NjJjODA3YjNmNGE1MTcxYTFkODBlNjIxZjVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBp
bGVkL2NsZWFyc2luZ2xlMTFwcy5oCkBAIC0wLDAgKzEsMTEwIEBACisjaWYgMA0KKy8vDQorLy8g
R2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAw
LjE2Mzg0DQorLy8NCisvLw0KKy8vLw0KKy8vDQorLy8gSW5wdXQgc2lnbmF0dXJlOg0KKy8vDQor
Ly8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlICBG
b3JtYXQgICBVc2VkDQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0t
LS0tIC0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tDQorLy8gU1ZfUG9zaXRpb24gICAgICAgICAgICAg
IDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICAgZmxvYXQgICAgICAgDQorLy8gQ09MT1IgICAg
ICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAxICAgICBOT05FICAgZmxvYXQgICB4eXp3
DQorLy8NCisvLw0KKy8vIE91dHB1dCBzaWduYXR1cmU6DQorLy8NCisvLyBOYW1lICAgICAgICAg
ICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAgIFVzZWQNCisv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0t
LS0tLSAtLS0tLS0NCisvLyBTVl9UYXJnZXQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAg
IDAgICBUQVJHRVQgICBmbG9hdCAgIHh5encNCisvLw0KK3BzXzRfMA0KK2RjbF9pbnB1dF9wcyBs
aW5lYXIgdjEueHl6dw0KK2RjbF9vdXRwdXQgbzAueHl6dw0KK21vdiBvMC54eXp3LCB2MS54eXp3
DQorcmV0IA0KKy8vIEFwcHJveGltYXRlbHkgMiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQorI2Vu
ZGlmDQorDQorY29uc3QgQllURSBnX1BTX0NsZWFyU2luZ2xlW10gPQ0KK3sNCisgICAgIDY4LCAg
ODgsICA2NiwgIDY3LCAgMTMsIDE1MiwgDQorICAgICAzMiwgIDQ5LCAyMjIsIDIzNiwgIDkyLCAg
MjAsIA0KKyAgICAxODgsICA3MSwgIDg4LCAgNDYsIDE2MywgMjQxLCANCisgICAgMTg4LCAyMzgs
ICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgIDIwOCwgICAxLCAgIDAsICAgMCwgICA1LCAgIDAs
IA0KKyAgICAgIDAsICAgMCwgIDUyLCAgIDAsICAgMCwgICAwLCANCisgICAgMTQwLCAgIDAsICAg
MCwgICAwLCAyMjQsICAgMCwgDQorICAgICAgMCwgICAwLCAgMjAsICAgMSwgICAwLCAgIDAsIA0K
KyAgICAgODQsICAgMSwgICAwLCAgIDAsICA4MiwgIDY4LCANCisgICAgIDY5LCAgNzAsICA4MCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgIDI4LCAgIDAsICAgMCwgICAw
LCAgIDAsICAgNCwgDQorICAgIDI1NSwgMjU1LCAgIDAsICAgMSwgICAwLCAgIDAsIA0KKyAgICAg
MjgsICAgMCwgICAwLCAgIDAsICA3NywgMTA1LCANCisgICAgIDk5LCAxMTQsIDExMSwgMTE1LCAx
MTEsIDEwMiwgDQorICAgIDExNiwgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsIA0KKyAgICAgNzIs
ICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCANCisgICAgMTA0LCAgOTcsIDEwMCwgMTAxLCAxMTQs
ICAzMiwgDQorICAgICA2NywgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIA0KKyAgICAxMDEsIDEx
NCwgIDMyLCAgNTcsICA0NiwgIDUxLCANCisgICAgIDQ4LCAgNDYsICA1NywgIDUwLCAgNDgsICA0
OCwgDQorICAgICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsIA0KKyAgICAgIDAsIDE3MSwg
IDczLCAgODMsICA3MSwgIDc4LCANCisgICAgIDc2LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgNTYsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQor
ICAgICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDE1LCAg
IDAsICAgMCwgICAwLCANCisgICAgIDY4LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDMsICAgMCwgICAwLCAgIDAs
ICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAxNSwgIDE1LCAgIDAsICAgMCwgDQorICAgICA4
MywgIDg2LCAgOTUsICA4MCwgMTExLCAxMTUsIA0KKyAgICAxMDUsIDExNiwgMTA1LCAxMTEsIDEx
MCwgICAwLCANCisgICAgIDY3LCAgNzksICA3NiwgIDc5LCAgODIsICAgMCwgDQorICAgIDE3MSwg
MTcxLCAgNzksICA4MywgIDcxLCAgNzgsIA0KKyAgICAgNDQsICAgMCwgICAwLCAgIDAsICAgMSwg
ICAwLCANCisgICAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgDQorICAgICAzMiwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCANCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAg
MTUsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgODMsICA4NiwgIDk1LCAgODQsICA5NywgMTE0LCAN
CisgICAgMTAzLCAxMDEsIDExNiwgICAwLCAxNzEsIDE3MSwgDQorICAgICA4MywgIDcyLCAgNjgs
ICA4MiwgIDU2LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDY0LCAgIDAsICAgMCwgICAwLCANCisg
ICAgIDE0LCAgIDAsICAgMCwgICAwLCAgOTgsICAxNiwgDQorICAgICAgMCwgICAzLCAyNDIsICAx
NiwgIDE2LCAgIDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsIDEwMSwgICAwLCANCisgICAg
ICAwLCAgIDMsIDI0MiwgIDMyLCAgMTYsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwg
IDU0LCAgIDAsIA0KKyAgICAgIDAsICAgNSwgMjQyLCAgMzIsICAxNiwgICAwLCANCisgICAgICAw
LCAgIDAsICAgMCwgICAwLCAgNzAsICAzMCwgDQorICAgICAxNiwgICAwLCAgIDEsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAgNjIsICAgMCwgICAwLCAgIDEsICA4MywgIDg0LCANCisgICAgIDY1LCAg
ODQsIDExNiwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAyLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsIA0KKyAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MA0KK307DQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdoMTF2cy5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJz
L2NvbXBpbGVkL3Bhc3N0aHJvdWdoMTF2cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmMzk1MjE2ZTk5MjBmY2Nh
MDMyYjFlYWM4NTNlODVhYjhiMWI2NjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQv
cGFzc3Rocm91Z2gxMXZzLmgKQEAgLTAsMCArMSwxMzQgQEAKKyNpZiAwDQorLy8NCisvLyBHZW5l
cmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYz
ODQNCisvLw0KKy8vDQorLy8vDQorLy8NCisvLyBJbnB1dCBzaWduYXR1cmU6DQorLy8NCisvLyBO
YW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1h
dCAgIFVzZWQNCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0g
LS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0NCisvLyBQT1NJVElPTiAgICAgICAgICAgICAgICAgMCAg
IHh5ICAgICAgICAgIDAgICAgIE5PTkUgICBmbG9hdCAgIHh5ICANCisvLyBURVhDT09SRCAgICAg
ICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgICBmbG9hdCAgIHh5ICANCisv
Lw0KKy8vDQorLy8gT3V0cHV0IHNpZ25hdHVyZToNCisvLw0KKy8vIE5hbWUgICAgICAgICAgICAg
ICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KKy8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0t
IC0tLS0tLQ0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAg
ICAgIFBPUyAgIGZsb2F0ICAgeHl6dw0KKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAg
eHkgICAgICAgICAgMSAgICAgTk9ORSAgIGZsb2F0ICAgeHkgIA0KKy8vDQordnNfNF8wDQorZGNs
X2lucHV0IHYwLnh5DQorZGNsX2lucHV0IHYxLnh5DQorZGNsX291dHB1dF9zaXYgbzAueHl6dywg
cG9zaXRpb24NCitkY2xfb3V0cHV0IG8xLnh5DQorbW92IG8wLnh5LCB2MC54eXh4DQorbW92IG8w
Lnp3LCBsKDAsMCwwLDEuMDAwMDAwKQ0KK21vdiBvMS54eSwgdjEueHl4eA0KK3JldCANCisvLyBB
cHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KKyNlbmRpZg0KKw0KK2NvbnN0
IEJZVEUgZ19WU19QYXNzdGhyb3VnaFtdID0NCit7DQorICAgICA2OCwgIDg4LCAgNjYsICA2Nywg
MTk3LCAyMTQsIA0KKyAgICAxODQsICA4NSwgMjQwLCAgOTQsICA3MSwgIDQ4LCANCisgICAgMTY1
LCAgMzQsIDE0MiwgMjMzLCAgIDAsIDEzNSwgDQorICAgIDE5MywgMTc4LCAgIDEsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAgNjgsICAgMiwgICAwLCAgIDAsICAgNSwgICAwLCANCisgICAgICAwLCAg
IDAsICA1MiwgICAwLCAgIDAsICAgMCwgDQorICAgIDE0MCwgICAwLCAgIDAsICAgMCwgMjI0LCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgIDU2LCAgIDEsICAgMCwgICAwLCANCisgICAgMjAwLCAgIDEs
ICAgMCwgICAwLCAgODIsICA2OCwgDQorICAgICA2OSwgIDcwLCAgODAsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQorICAgICAyOCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsIA0K
KyAgICAyNTQsIDI1NSwgICAwLCAgIDEsICAgMCwgICAwLCANCisgICAgIDI4LCAgIDAsICAgMCwg
ICAwLCAgNzcsIDEwNSwgDQorICAgICA5OSwgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIA0KKyAg
ICAxMTYsICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCANCisgICAgIDcyLCAgNzYsICA4MywgIDc2
LCAgMzIsICA4MywgDQorICAgIDEwNCwgIDk3LCAxMDAsIDEwMSwgMTE0LCAgMzIsIA0KKyAgICAg
NjcsIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCANCisgICAgMTAxLCAxMTQsICAzMiwgIDU3LCAg
NDYsICA1MSwgDQorICAgICA0OCwgIDQ2LCAgNTcsICA1MCwgIDQ4LCAgNDgsIA0KKyAgICAgNDYs
ICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCANCisgICAgICAwLCAxNzEsICA3MywgIDgzLCAgNzEs
ICA3OCwgDQorICAgICA3NiwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICA4LCAgIDAsICAgMCwgICAwLCANCisgICAgIDU2LCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDMsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMywgICAzLCAgIDAsICAgMCwg
DQorICAgICA2NSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQor
ICAgICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsIA0KKyAgICAgODAsICA3OSwgIDgzLCAg
NzMsICA4NCwgIDczLCANCisgICAgIDc5LCAgNzgsICAgMCwgIDg0LCAgNjksICA4OCwgDQorICAg
ICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgIDAsIA0KKyAgICAxNzEsIDE3MSwgIDc5LCAgODMs
ICA3MSwgIDc4LCANCisgICAgIDgwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgDQorICAgICAg
MCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgNTYsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMywg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDE1LCAgIDAsICAgMCwg
ICAwLCANCisgICAgIDY4LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAw
LCANCisgICAgICAwLCAgIDAsICAgMywgIDEyLCAgIDAsICAgMCwgDQorICAgICA4MywgIDg2LCAg
OTUsICA4MCwgIDc5LCAgODMsIA0KKyAgICAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgICAwLCAN
CisgICAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgDQorICAgICA4MiwgIDY4LCAgIDAs
IDE3MSwgMTcxLCAxNzEsIA0KKyAgICAgODMsICA3MiwgIDY4LCAgODIsIDEzNiwgICAwLCANCisg
ICAgICAwLCAgIDAsICA2NCwgICAwLCAgIDEsICAgMCwgDQorICAgICAzNCwgICAwLCAgIDAsICAg
MCwgIDk1LCAgIDAsIA0KKyAgICAgIDAsICAgMywgIDUwLCAgMTYsICAxNiwgICAwLCANCisgICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgOTUsICAgMCwgDQorICAgICAgMCwgICAzLCAgNTAsICAxNiwg
IDE2LCAgIDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsIDEwMywgICAwLCANCisgICAgICAw
LCAgIDQsIDI0MiwgIDMyLCAgMTYsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAx
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgMTAxLCAgIDAsICAgMCwgICAzLCANCisgICAgIDUwLCAg
MzIsICAxNiwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAwLCAgNTQsICAgMCwgICAwLCAg
IDUsIA0KKyAgICAgNTAsICAzMiwgIDE2LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAs
ICA3MCwgIDE2LCAgMTYsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDU0LCAgIDAs
IA0KKyAgICAgIDAsICAgOCwgMTk0LCAgMzIsICAxNiwgICAwLCANCisgICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDIsICA2NCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwg
ICAwLCAxMjgsICA2MywgDQorICAgICA1NCwgICAwLCAgIDAsICAgNSwgIDUwLCAgMzIsIA0KKyAg
ICAgMTYsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCisgICAgIDcwLCAgMTYsICAxNiwgICAw
LCAgIDEsICAgMCwgDQorICAgICAgMCwgICAwLCAgNjIsICAgMCwgICAwLCAgIDEsIA0KKyAgICAg
ODMsICA4NCwgIDY1LCAgODQsIDExNiwgICAwLCANCisgICAgICAwLCAgIDAsICAgNCwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDEsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQor
ICAgICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAg
MCwgICAwLCAgIDAsICAgMA0KK307DQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJv
dWdobHVtMTFwcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdobHVtMTFwcy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmNmMDdiNGEzY2JkODk2NWQxOGNiNDhkMDE4ZTQxMmQ4NDI0MjA4OTUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hsdW0xMXBzLmgKQEAgLTAsMCArMSwxNTIg
QEAKKyNpZiAwDQorLy8NCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRl
ciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQNCisvLw0KKy8vDQorLy8vDQorLy8gUmVzb3VyY2Ug
QmluZGluZ3M6DQorLy8NCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCisvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0t
LS0tLS0NCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAg
IE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCisvLyBUZXh0dXJlICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDJkICAgIDAgICAgICAgIDENCisv
Lw0KKy8vDQorLy8NCisvLyBJbnB1dCBzaWduYXR1cmU6DQorLy8NCisvLyBOYW1lICAgICAgICAg
ICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAgIFVzZWQNCisv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0t
LS0tLSAtLS0tLS0NCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAg
IDAgICAgICBQT1MgICBmbG9hdCAgICAgICANCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAg
MCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgICBmbG9hdCAgIHh5ICANCisvLw0KKy8vDQorLy8g
T3V0cHV0IHNpZ25hdHVyZToNCisvLw0KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAg
TWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KKy8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0tLQ0KKy8v
IFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIGZs
b2F0ICAgeHl6dw0KKy8vDQorcHNfNF8wDQorZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0K
K2RjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KK2Rj
bF9pbnB1dF9wcyBsaW5lYXIgdjEueHkNCitkY2xfb3V0cHV0IG8wLnh5encNCitkY2xfdGVtcHMg
MQ0KK3NhbXBsZSByMC54eXp3LCB2MS54eXh4LCB0MC54eXp3LCBzMA0KK21vdiBvMC54eXosIHIw
Lnh4eHgNCittb3YgbzAudywgbCgxLjAwMDAwMCkNCityZXQgDQorLy8gQXBwcm94aW1hdGVseSA0
IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCisjZW5kaWYNCisNCitjb25zdCBCWVRFIGdfUFNfUGFz
c3Rocm91Z2hMdW1bXSA9DQorew0KKyAgICAgNjgsICA4OCwgIDY2LCAgNjcsIDI0NCwgICA5LCAN
CisgICAgMjEzLCAxNDcsICAxOSwgMjQ5LCAgNzAsIDExMSwgDQorICAgIDE1NywgIDkyLCAyNDMs
IDE2MCwgIDQwLCAxNDQsIA0KKyAgICAyMzgsIDIyMSwgICAxLCAgIDAsICAgMCwgICAwLCANCisg
ICAgMTI4LCAgIDIsICAgMCwgICAwLCAgIDUsICAgMCwgDQorICAgICAgMCwgICAwLCAgNTIsICAg
MCwgICAwLCAgIDAsIA0KKyAgICAyMjAsICAgMCwgICAwLCAgIDAsICA1MiwgICAxLCANCisgICAg
ICAwLCAgIDAsIDEwNCwgICAxLCAgIDAsICAgMCwgDQorICAgICAgNCwgICAyLCAgIDAsICAgMCwg
IDgyLCAgNjgsIA0KKyAgICAgNjksICA3MCwgMTYwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAgMjgsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCANCisgICAgMjU1LCAy
NTUsICAgMCwgICAxLCAgIDAsICAgMCwgDQorICAgIDEwOCwgICAwLCAgIDAsICAgMCwgIDkyLCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAg
MSwgICAwLCAgIDAsICAgMCwgDQorICAgIDEwMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCANCisgICAgICA0LCAgIDAsICAgMCwg
ICAwLCAyNTUsIDI1NSwgDQorICAgIDI1NSwgMjU1LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDEsICAgMCwgICAwLCAgIDAsICAxMywgICAwLCANCisgICAgICAwLCAgIDAsICA4MywgIDk3
LCAxMDksIDExMiwgDQorICAgIDEwOCwgMTAxLCAxMTQsICAgMCwgIDg0LCAxMDEsIA0KKyAgICAx
MjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgICAwLCANCisgICAgIDc3LCAxMDUsICA5OSwgMTE0LCAx
MTEsIDExNSwgDQorICAgIDExMSwgMTAyLCAxMTYsICAzMiwgIDQwLCAgODIsIA0KKyAgICAgNDEs
ICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCANCisgICAgIDMyLCAgODMsIDEwNCwgIDk3LCAxMDAs
IDEwMSwgDQorICAgIDExNCwgIDMyLCAgNjcsIDExMSwgMTA5LCAxMTIsIA0KKyAgICAxMDUsIDEw
OCwgMTAxLCAxMTQsICAzMiwgIDU3LCANCisgICAgIDQ2LCAgNTEsICA0OCwgIDQ2LCAgNTcsICA1
MCwgDQorICAgICA0OCwgIDQ4LCAgNDYsICA0OSwgIDU0LCAgNTEsIA0KKyAgICAgNTYsICA1Miwg
ICAwLCAxNzEsICA3MywgIDgzLCANCisgICAgIDcxLCAgNzgsICA4MCwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDU2
LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQor
ICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAxNSwgICAwLCANCisgICAgICAwLCAgIDAsICA2OCwgICAwLCAgIDAsICAgMCwgDQorICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAzLCAgIDAs
ICAgMCwgICAwLCANCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgDQorICAgICAg
MCwgICAwLCAgODMsICA4NiwgIDk1LCAgODAsIA0KKyAgICAgNzksICA4MywgIDczLCAgODQsICA3
MywgIDc5LCANCisgICAgIDc4LCAgIDAsICA4NCwgIDY5LCAgODgsICA2NywgDQorICAgICA3OSwg
IDc5LCAgODIsICA2OCwgICAwLCAxNzEsIA0KKyAgICAxNzEsIDE3MSwgIDc5LCAgODMsICA3MSwg
IDc4LCANCisgICAgIDQ0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAw
LCAgIDgsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgMzIsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMywgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDE1LCAgIDAsICAgMCwgICAwLCAN
CisgICAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgDQorICAgICA3MSwgIDY5LCAgODQs
ICAgMCwgMTcxLCAxNzEsIA0KKyAgICAgODMsICA3MiwgIDY4LCAgODIsIDE0OCwgICAwLCANCisg
ICAgICAwLCAgIDAsICA2NCwgICAwLCAgIDAsICAgMCwgDQorICAgICAzNywgICAwLCAgIDAsICAg
MCwgIDkwLCAgIDAsIA0KKyAgICAgIDAsICAgMywgICAwLCAgOTYsICAxNiwgICAwLCANCisgICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgODgsICAyNCwgDQorICAgICAgMCwgICA0LCAgIDAsIDExMiwg
IDE2LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICA4NSwgIDg1LCANCisgICAgICAw
LCAgIDAsICA5OCwgIDE2LCAgIDAsICAgMywgDQorICAgICA1MCwgIDE2LCAgMTYsICAgMCwgICAx
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgMTAxLCAgIDAsICAgMCwgICAzLCANCisgICAgMjQyLCAg
MzIsICAxNiwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAxMDQsICAgMCwgICAwLCAg
IDIsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICA2OSwgICAwLCANCisgICAgICAwLCAgIDks
IDI0MiwgICAwLCAgMTYsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDcwLCAgMTYs
IA0KKyAgICAgMTYsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCisgICAgIDcwLCAxMjYsICAx
NiwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICA5NiwgIDE2LCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgICAwLCAgIDAsICA1NCwgICAwLCANCisgICAgICAwLCAgIDUsIDExNCwg
IDMyLCAgMTYsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsIA0KKyAg
ICAgMTYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgIDU0LCAgIDAsICAgMCwgICA1
LCAxMzAsICAzMiwgDQorICAgICAxNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
IDEsICA2NCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgMTI4LCAgNjMsICA2MiwgICAwLCAg
IDAsICAgMSwgDQorICAgICA4MywgIDg0LCAgNjUsICA4NCwgMTE2LCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCANCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQor
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwDQorfTsNCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMv
Y29tcGlsZWQvcGFzc3Rocm91Z2hsdW1hbHBoYTExcHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhy
b3VnaGx1bWFscGhhMTFwcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1NWQ2MGViM2IyMjZkZDBlN2RhZTQ4YmVk
NTU0NDdhOThmYjEzNDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91
Z2hsdW1hbHBoYTExcHMuaApAQCAtMCwwICsxLDE0OCBAQAorI2lmIDANCisvLw0KKy8vIEdlbmVy
YXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4
NA0KKy8vDQorLy8NCisvLy8NCisvLyBSZXNvdXJjZSBCaW5kaW5nczoNCisvLw0KKy8vIE5hbWUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0g
U2xvdCBFbGVtZW50cw0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0t
LS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KKy8vIFNhbXBsZXIgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAg
ICAgMQ0KKy8vIFRleHR1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9h
dDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQ0KKy8vDQorLy8NCisvLw0KKy8vIElucHV0IHNp
Z25hdHVyZToNCisvLw0KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdp
c3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0t
LS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0tLQ0KKy8vIFNWX1BPU0lU
SU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgIGZsb2F0ICAgICAg
IA0KKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9O
RSAgIGZsb2F0ICAgeHkgIA0KKy8vDQorLy8NCisvLyBPdXRwdXQgc2lnbmF0dXJlOg0KKy8vDQor
Ly8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlICBG
b3JtYXQgICBVc2VkDQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0t
LS0tIC0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tDQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAg
IDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgZmxvYXQgICB4eXp3DQorLy8NCitwc180XzAN
CitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQorZGNsX3Jlc291cmNlX3RleHR1cmUyZCAo
ZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQorZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQ0K
K2RjbF9vdXRwdXQgbzAueHl6dw0KK2RjbF90ZW1wcyAxDQorc2FtcGxlIHIwLnh5encsIHYxLnh5
eHgsIHQwLnh5encsIHMwDQorbW92IG8wLnh5encsIHIwLnh4eHcNCityZXQgDQorLy8gQXBwcm94
aW1hdGVseSAzIGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCisjZW5kaWYNCisNCitjb25zdCBCWVRF
IGdfUFNfUGFzc3Rocm91Z2hMdW1BbHBoYVtdID0NCit7DQorICAgICA2OCwgIDg4LCAgNjYsICA2
NywgMTg1LCAgMTQsIA0KKyAgICAgODQsIDIyMywgMTkyLCAgNDIsICAxNiwgMTMzLCANCisgICAg
IDQ2LCAxMDAsICA5NSwgMjIxLCAxODMsICA5NywgDQorICAgIDE5MiwgIDIzLCAgIDEsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAxMDgsICAgMiwgICAwLCAgIDAsICAgNSwgICAwLCANCisgICAgICAw
LCAgIDAsICA1MiwgICAwLCAgIDAsICAgMCwgDQorICAgIDIyMCwgICAwLCAgIDAsICAgMCwgIDUy
LCAgIDEsIA0KKyAgICAgIDAsICAgMCwgMTA0LCAgIDEsICAgMCwgICAwLCANCisgICAgMjQwLCAg
IDEsICAgMCwgICAwLCAgODIsICA2OCwgDQorICAgICA2OSwgIDcwLCAxNjAsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAs
ICAgMiwgICAwLCAgIDAsICAgMCwgDQorICAgICAyOCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQs
IA0KKyAgICAyNTUsIDI1NSwgICAwLCAgIDEsICAgMCwgICAwLCANCisgICAgMTA4LCAgIDAsICAg
MCwgICAwLCAgOTIsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCisgICAgMTAwLCAgIDAsICAgMCwgICAw
LCAgIDIsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
IDQsICAgMCwgICAwLCAgIDAsIDI1NSwgMjU1LCANCisgICAgMjU1LCAyNTUsICAgMCwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDEzLCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgIDgzLCAgOTcsIDEwOSwgMTEyLCANCisgICAgMTA4LCAxMDEsIDExNCwgICAwLCAgODQs
IDEwMSwgDQorICAgIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCAgIDAsIA0KKyAgICAgNzcsIDEw
NSwgIDk5LCAxMTQsIDExMSwgMTE1LCANCisgICAgMTExLCAxMDIsIDExNiwgIDMyLCAgNDAsICA4
MiwgDQorICAgICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsIA0KKyAgICAgMzIsICA4Mywg
MTA0LCAgOTcsIDEwMCwgMTAxLCANCisgICAgMTE0LCAgMzIsICA2NywgMTExLCAxMDksIDExMiwg
DQorICAgIDEwNSwgMTA4LCAxMDEsIDExNCwgIDMyLCAgNTcsIA0KKyAgICAgNDYsICA1MSwgIDQ4
LCAgNDYsICA1NywgIDUwLCANCisgICAgIDQ4LCAgNDgsICA0NiwgIDQ5LCAgNTQsICA1MSwgDQor
ICAgICA1NiwgIDUyLCAgIDAsIDE3MSwgIDczLCAgODMsIA0KKyAgICAgNzEsICA3OCwgIDgwLCAg
IDAsICAgMCwgICAwLCANCisgICAgICAyLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgDQorICAg
ICAgMCwgICAwLCAgNTYsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgDQorICAgICAg
MCwgICAwLCAgIDAsICAgMCwgIDE1LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDY4LCAgIDAsICAg
MCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwg
ICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMywg
ICAzLCANCisgICAgICAwLCAgIDAsICA4MywgIDg2LCAgOTUsICA4MCwgDQorICAgICA3OSwgIDgz
LCAgNzMsICA4NCwgIDczLCAgNzksIA0KKyAgICAgNzgsICAgMCwgIDg0LCAgNjksICA4OCwgIDY3
LCANCisgICAgIDc5LCAgNzksICA4MiwgIDY4LCAgIDAsIDE3MSwgDQorICAgIDE3MSwgMTcxLCAg
NzksICA4MywgIDcxLCAgNzgsIA0KKyAgICAgNDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAN
CisgICAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgDQorICAgICAzMiwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisg
ICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgMTUsICAg
MCwgICAwLCAgIDAsIA0KKyAgICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCANCisgICAg
IDcxLCAgNjksICA4NCwgICAwLCAxNzEsIDE3MSwgDQorICAgICA4MywgIDcyLCAgNjgsICA4Miwg
MTI4LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDY0LCAgIDAsICAgMCwgICAwLCANCisgICAgIDMy
LCAgIDAsICAgMCwgICAwLCAgOTAsICAgMCwgDQorICAgICAgMCwgICAzLCAgIDAsICA5NiwgIDE2
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICA4OCwgIDI0LCANCisgICAgICAwLCAg
IDQsICAgMCwgMTEyLCAgMTYsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDg1LCAg
ODUsIA0KKyAgICAgIDAsICAgMCwgIDk4LCAgMTYsICAgMCwgICAzLCANCisgICAgIDUwLCAgMTYs
ICAxNiwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAwLCAxMDEsICAgMCwgICAwLCAgIDMs
IA0KKyAgICAyNDIsICAzMiwgIDE2LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsIDEw
NCwgICAwLCAgIDAsICAgMiwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDY5LCAgIDAsIA0K
KyAgICAgIDAsICAgOSwgMjQyLCAgIDAsICAxNiwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgNzAsICAxNiwgDQorICAgICAxNiwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgNzAsIDEyNiwgIDE2LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgIDk2
LCAgMTYsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDU0LCAgIDAsIA0KKyAgICAg
IDAsICAgNSwgMjQyLCAgMzIsICAxNiwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDYsICAxMiwgDQorICAgICAxNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgNjIs
ICAgMCwgICAwLCAgIDEsICA4MywgIDg0LCANCisgICAgIDY1LCAgODQsIDExNiwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQor
ICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMA0KK307DQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9z
aGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiMTFwcy5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0
aHJvdWdocmdiMTFwcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU4NmNiY2Y2YjgyY2ZkOTY1ODYwMThkZTE5OTc5
OTczODYxODc3MzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hy
Z2IxMXBzLmgKQEAgLTAsMCArMSwxNTIgQEAKKyNpZiAwDQorLy8NCisvLyBHZW5lcmF0ZWQgYnkg
TWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQNCisvLw0K
Ky8vDQorLy8vDQorLy8gUmVzb3VyY2UgQmluZGluZ3M6DQorLy8NCisvLyBOYW1lICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxl
bWVudHMNCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0t
LS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCisvLyBTYW1wbGVyICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCisv
LyBUZXh0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAg
ICAgIDJkICAgIDAgICAgICAgIDENCisvLw0KKy8vDQorLy8NCisvLyBJbnB1dCBzaWduYXR1cmU6
DQorLy8NCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lz
VmFsdWUgIEZvcm1hdCAgIFVzZWQNCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0t
LS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0NCisvLyBTVl9QT1NJVElPTiAgICAg
ICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgICBmbG9hdCAgICAgICANCisvLyBU
RVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgICBmbG9h
dCAgIHh5ICANCisvLw0KKy8vDQorLy8gT3V0cHV0IHNpZ25hdHVyZToNCisvLw0KKy8vIE5hbWUg
ICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAg
VXNlZA0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0t
LS0tLSAtLS0tLS0tIC0tLS0tLQ0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6
dyAgICAgICAgMCAgIFRBUkdFVCAgIGZsb2F0ICAgeHl6dw0KKy8vDQorcHNfNF8wDQorZGNsX3Nh
bXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZs
b2F0LGZsb2F0LGZsb2F0KSB0MA0KK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkNCitkY2xfb3V0
cHV0IG8wLnh5encNCitkY2xfdGVtcHMgMQ0KK3NhbXBsZSByMC54eXp3LCB2MS54eXh4LCB0MC54
eXp3LCBzMA0KK21vdiBvMC54eXosIHIwLnh5engNCittb3YgbzAudywgbCgxLjAwMDAwMCkNCity
ZXQgDQorLy8gQXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCisjZW5kaWYN
CisNCitjb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSR0JbXSA9DQorew0KKyAgICAgNjgsICA4
OCwgIDY2LCAgNjcsIDEyNSwgMTg2LCANCisgICAgMjUwLCAyNDIsIDExMywgMjU1LCAgNTksIDIz
OSwgDQorICAgIDExOSwgMTU4LCAyMzcsICA3OCwgMjIwLCAgNDMsIA0KKyAgICAxNjAsICA0Niwg
ICAxLCAgIDAsICAgMCwgICAwLCANCisgICAgMTI4LCAgIDIsICAgMCwgICAwLCAgIDUsICAgMCwg
DQorICAgICAgMCwgICAwLCAgNTIsICAgMCwgICAwLCAgIDAsIA0KKyAgICAyMjAsICAgMCwgICAw
LCAgIDAsICA1MiwgICAxLCANCisgICAgICAwLCAgIDAsIDEwNCwgICAxLCAgIDAsICAgMCwgDQor
ICAgICAgNCwgICAyLCAgIDAsICAgMCwgIDgyLCAgNjgsIA0KKyAgICAgNjksICA3MCwgMTYwLCAg
IDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAg
ICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgMjgsICAgMCwgICAwLCAgIDAs
ICAgMCwgICA0LCANCisgICAgMjU1LCAyNTUsICAgMCwgICAxLCAgIDAsICAgMCwgDQorICAgIDEw
OCwgICAwLCAgIDAsICAgMCwgIDkyLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAzLCAgIDAsICAg
MCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwg
ICAwLCANCisgICAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgIDEwMCwgICAw
LCAgIDAsICAgMCwgICAyLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAw
LCANCisgICAgICA0LCAgIDAsICAgMCwgICAwLCAyNTUsIDI1NSwgDQorICAgIDI1NSwgMjU1LCAg
IDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICAxMywgICAwLCAN
CisgICAgICAwLCAgIDAsICA4MywgIDk3LCAxMDksIDExMiwgDQorICAgIDEwOCwgMTAxLCAxMTQs
ICAgMCwgIDg0LCAxMDEsIA0KKyAgICAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgICAwLCANCisg
ICAgIDc3LCAxMDUsICA5OSwgMTE0LCAxMTEsIDExNSwgDQorICAgIDExMSwgMTAyLCAxMTYsICAz
MiwgIDQwLCAgODIsIA0KKyAgICAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCANCisgICAg
IDMyLCAgODMsIDEwNCwgIDk3LCAxMDAsIDEwMSwgDQorICAgIDExNCwgIDMyLCAgNjcsIDExMSwg
MTA5LCAxMTIsIA0KKyAgICAxMDUsIDEwOCwgMTAxLCAxMTQsICAzMiwgIDU3LCANCisgICAgIDQ2
LCAgNTEsICA0OCwgIDQ2LCAgNTcsICA1MCwgDQorICAgICA0OCwgIDQ4LCAgNDYsICA0OSwgIDU0
LCAgNTEsIA0KKyAgICAgNTYsICA1MiwgICAwLCAxNzEsICA3MywgIDgzLCANCisgICAgIDcxLCAg
NzgsICA4MCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgIDU2LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAxNSwgICAwLCANCisgICAgICAwLCAgIDAsICA2
OCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCANCisgICAgICAxLCAgIDAsICAgMCwg
ICAwLCAgIDMsICAgMywgDQorICAgICAgMCwgICAwLCAgODMsICA4NiwgIDk1LCAgODAsIA0KKyAg
ICAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCANCisgICAgIDc4LCAgIDAsICA4NCwgIDY5
LCAgODgsICA2NywgDQorICAgICA3OSwgIDc5LCAgODIsICA2OCwgICAwLCAxNzEsIA0KKyAgICAx
NzEsIDE3MSwgIDc5LCAgODMsICA3MSwgIDc4LCANCisgICAgIDQ0LCAgIDAsICAgMCwgICAwLCAg
IDEsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgMzIs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgIDE1LCAgIDAsICAgMCwgICAwLCANCisgICAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4
MiwgDQorICAgICA3MSwgIDY5LCAgODQsICAgMCwgMTcxLCAxNzEsIA0KKyAgICAgODMsICA3Miwg
IDY4LCAgODIsIDE0OCwgICAwLCANCisgICAgICAwLCAgIDAsICA2NCwgICAwLCAgIDAsICAgMCwg
DQorICAgICAzNywgICAwLCAgIDAsICAgMCwgIDkwLCAgIDAsIA0KKyAgICAgIDAsICAgMywgICAw
LCAgOTYsICAxNiwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgODgsICAyNCwgDQor
ICAgICAgMCwgICA0LCAgIDAsIDExMiwgIDE2LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAg
IDAsICA4NSwgIDg1LCANCisgICAgICAwLCAgIDAsICA5OCwgIDE2LCAgIDAsICAgMywgDQorICAg
ICA1MCwgIDE2LCAgMTYsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgMTAxLCAgIDAs
ICAgMCwgICAzLCANCisgICAgMjQyLCAgMzIsICAxNiwgICAwLCAgIDAsICAgMCwgDQorICAgICAg
MCwgICAwLCAxMDQsICAgMCwgICAwLCAgIDIsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICA2
OSwgICAwLCANCisgICAgICAwLCAgIDksIDI0MiwgICAwLCAgMTYsICAgMCwgDQorICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgIDcwLCAgMTYsIA0KKyAgICAgMTYsICAgMCwgICAxLCAgIDAsICAgMCwg
ICAwLCANCisgICAgIDcwLCAxMjYsICAxNiwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAw
LCAgIDAsICA5NiwgIDE2LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICA1NCwgICAw
LCANCisgICAgICAwLCAgIDUsIDExNCwgIDMyLCAgMTYsICAgMCwgDQorICAgICAgMCwgICAwLCAg
IDAsICAgMCwgIDcwLCAgIDIsIA0KKyAgICAgMTYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAN
CisgICAgIDU0LCAgIDAsICAgMCwgICA1LCAxMzAsICAzMiwgDQorICAgICAxNiwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDEsICA2NCwgICAwLCAgIDAsICAgMCwgICAwLCANCisg
ICAgMTI4LCAgNjMsICA2MiwgICAwLCAgIDAsICAgMSwgDQorICAgICA4MywgIDg0LCAgNjUsICA4
NCwgMTE2LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCANCisgICAg
ICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDIsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAzLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAw
DQorfTsNCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhMTFwcy5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFk
ZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTExcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kN2QyYTI1YWJh
MDk2YzNmYWEzN2RmMjFlYjUzYzk4NDM4ZDA0YmEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2Nv
bXBpbGVkL3Bhc3N0aHJvdWdocmdiYTExcHMuaApAQCAtMCwwICsxLDE0MSBAQAorI2lmIDANCisv
Lw0KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDku
MzAuOTIwMC4xNjM4NA0KKy8vDQorLy8NCisvLy8NCisvLyBSZXNvdXJjZSBCaW5kaW5nczoNCisv
Lw0KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQg
ICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KKy8vIFNh
bXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAg
TkEgICAgMCAgICAgICAgMQ0KKy8vIFRleHR1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlICBmbG9hdDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQ0KKy8vDQorLy8NCisvLw0K
Ky8vIElucHV0IHNpZ25hdHVyZToNCisvLw0KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4
ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KKy8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0tLQ0K
Ky8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAg
IGZsb2F0ICAgICAgIA0KKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAg
ICAgMSAgICAgTk9ORSAgIGZsb2F0ICAgeHkgIA0KKy8vDQorLy8NCisvLyBPdXRwdXQgc2lnbmF0
dXJlOg0KKy8vDQorLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVy
IFN5c1ZhbHVlICBGb3JtYXQgICBVc2VkDQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0g
LS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tDQorLy8gU1ZfVEFSR0VUICAg
ICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgZmxvYXQgICB4eXp3DQor
Ly8NCitwc180XzANCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQorZGNsX3Jlc291cmNl
X3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQorZGNsX2lucHV0X3BzIGxp
bmVhciB2MS54eQ0KK2RjbF9vdXRwdXQgbzAueHl6dw0KK3NhbXBsZSBvMC54eXp3LCB2MS54eXh4
LCB0MC54eXp3LCBzMA0KK3JldCANCisvLyBBcHByb3hpbWF0ZWx5IDIgaW5zdHJ1Y3Rpb24gc2xv
dHMgdXNlZA0KKyNlbmRpZg0KKw0KK2NvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaFJHQkFbXSA9
DQorew0KKyAgICAgNjgsICA4OCwgIDY2LCAgNjcsIDE1MSwgMTUyLCANCisgICAgICA4LCAxMDIs
IDE3NCwgMTM1LCAgNzYsICA1NywgDQorICAgIDEwMCwgMTQ2LCAgNTksICA3NCwgMjA1LCAgMzUs
IA0KKyAgICAyMDYsICAyMSwgICAxLCAgIDAsICAgMCwgICAwLCANCisgICAgIDgwLCAgIDIsICAg
MCwgICAwLCAgIDUsICAgMCwgDQorICAgICAgMCwgICAwLCAgNTIsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAyMjAsICAgMCwgICAwLCAgIDAsICA1MiwgICAxLCANCisgICAgICAwLCAgIDAsIDEwNCwg
ICAxLCAgIDAsICAgMCwgDQorICAgIDIxMiwgICAxLCAgIDAsICAgMCwgIDgyLCAgNjgsIA0KKyAg
ICAgNjksICA3MCwgMTYwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
MjgsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCANCisgICAgMjU1LCAyNTUsICAgMCwgICAxLCAg
IDAsICAgMCwgDQorICAgIDEwOCwgICAwLCAgIDAsICAgMCwgIDkyLCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAg
MCwgDQorICAgIDEwMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsIA0KKyAgICAgIDAsICAgMCwg
ICA1LCAgIDAsICAgMCwgICAwLCANCisgICAgICA0LCAgIDAsICAgMCwgICAwLCAyNTUsIDI1NSwg
DQorICAgIDI1NSwgMjU1LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDEsICAgMCwgICAw
LCAgIDAsICAxMywgICAwLCANCisgICAgICAwLCAgIDAsICA4MywgIDk3LCAxMDksIDExMiwgDQor
ICAgIDEwOCwgMTAxLCAxMTQsICAgMCwgIDg0LCAxMDEsIA0KKyAgICAxMjAsIDExNiwgMTE3LCAx
MTQsIDEwMSwgICAwLCANCisgICAgIDc3LCAxMDUsICA5OSwgMTE0LCAxMTEsIDExNSwgDQorICAg
IDExMSwgMTAyLCAxMTYsICAzMiwgIDQwLCAgODIsIA0KKyAgICAgNDEsICAzMiwgIDcyLCAgNzYs
ICA4MywgIDc2LCANCisgICAgIDMyLCAgODMsIDEwNCwgIDk3LCAxMDAsIDEwMSwgDQorICAgIDEx
NCwgIDMyLCAgNjcsIDExMSwgMTA5LCAxMTIsIA0KKyAgICAxMDUsIDEwOCwgMTAxLCAxMTQsICAz
MiwgIDU3LCANCisgICAgIDQ2LCAgNTEsICA0OCwgIDQ2LCAgNTcsICA1MCwgDQorICAgICA0OCwg
IDQ4LCAgNDYsICA0OSwgIDU0LCAgNTEsIA0KKyAgICAgNTYsICA1MiwgICAwLCAxNzEsICA3Mywg
IDgzLCANCisgICAgIDcxLCAgNzgsICA4MCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMiwgICAw
LCAgIDAsICAgMCwgICA4LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDU2LCAgIDAsICAgMCwgICAw
LCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAwLCAg
IDMsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAxNSwgICAwLCAN
CisgICAgICAwLCAgIDAsICA2OCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCANCisg
ICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgDQorICAgICAgMCwgICAwLCAgODMsICA4
NiwgIDk1LCAgODAsIA0KKyAgICAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCANCisgICAg
IDc4LCAgIDAsICA4NCwgIDY5LCAgODgsICA2NywgDQorICAgICA3OSwgIDc5LCAgODIsICA2OCwg
ICAwLCAxNzEsIA0KKyAgICAxNzEsIDE3MSwgIDc5LCAgODMsICA3MSwgIDc4LCANCisgICAgIDQ0
LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDgsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAgMzIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgIDE1LCAgIDAsICAgMCwgICAwLCANCisgICAgIDgzLCAgODYs
ICA5NSwgIDg0LCAgNjUsICA4MiwgDQorICAgICA3MSwgIDY5LCAgODQsICAgMCwgMTcxLCAxNzEs
IA0KKyAgICAgODMsICA3MiwgIDY4LCAgODIsIDEwMCwgICAwLCANCisgICAgICAwLCAgIDAsICA2
NCwgICAwLCAgIDAsICAgMCwgDQorICAgICAyNSwgICAwLCAgIDAsICAgMCwgIDkwLCAgIDAsIA0K
KyAgICAgIDAsICAgMywgICAwLCAgOTYsICAxNiwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgODgsICAyNCwgDQorICAgICAgMCwgICA0LCAgIDAsIDExMiwgIDE2LCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICA4NSwgIDg1LCANCisgICAgICAwLCAgIDAsICA5OCwgIDE2
LCAgIDAsICAgMywgDQorICAgICA1MCwgIDE2LCAgMTYsICAgMCwgICAxLCAgIDAsIA0KKyAgICAg
IDAsICAgMCwgMTAxLCAgIDAsICAgMCwgICAzLCANCisgICAgMjQyLCAgMzIsICAxNiwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgNjksICAgMCwgICAwLCAgIDksIA0KKyAgICAyNDIs
ICAzMiwgIDE2LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICA3MCwgIDE2LCAgMTYs
ICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDcwLCAxMjYsIA0KKyAgICAgMTYsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgOTYsICAxNiwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwLCAgNjIsICAgMCwgICAwLCAgIDEsIA0KKyAgICAgODMsICA4NCwg
IDY1LCAgODQsIDExNiwgICAwLCANCisgICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAy
LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQor
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQorICAgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMSwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAg
IDAsICAgMA0KK307DQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2dlbmVyYXRlX3NoYWRlcnMuYmF0IGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJz
L2dlbmVyYXRlX3NoYWRlcnMuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIzNTdkNGVmNTg3M2YxNzZmYjBmOTE2
YTY0Zjk1MzYyOWE2NTNhNjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVy
cy5iYXQKQEAgLTAsMCArMSwxOCBAQAorQEVDSE8gT0ZGDQorUkVNDQorUkVNIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0K
K1JFTSBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlDQorUkVNIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQorUkVN
DQorDQorUEFUSCAlUEFUSCU7JVByb2dyYW1GaWxlcyh4ODYpJVxXaW5kb3dzIEtpdHNcOC4wXGJp
blx4ODY7JURYU0RLX0RJUiVcVXRpbGl0aWVzXGJpblx4ODYNCisNCitmeGMgL0UgVlNfUGFzc3Ro
cm91Z2ggL1QgdnNfNF8wIC9GaCBjb21waWxlZC9wYXNzdGhyb3VnaDExdnMuaCBQYXNzdGhyb3Vn
aDExLmhsc2wNCitmeGMgL0UgUFNfUGFzc3Rocm91Z2hSR0JBIC9UIHBzXzRfMCAvRmggY29tcGls
ZWQvcGFzc3Rocm91Z2hyZ2JhMTFwcy5oIFBhc3N0aHJvdWdoMTEuaGxzbA0KK2Z4YyAvRSBQU19Q
YXNzdGhyb3VnaFJHQiAvVCBwc180XzAgL0ZoIGNvbXBpbGVkL3Bhc3N0aHJvdWdocmdiMTFwcy5o
IFBhc3N0aHJvdWdoMTEuaGxzbA0KK2Z4YyAvRSBQU19QYXNzdGhyb3VnaEx1bSAvVCBwc180XzAg
L0ZoIGNvbXBpbGVkL3Bhc3N0aHJvdWdobHVtMTFwcy5oIFBhc3N0aHJvdWdoMTEuaGxzbA0KK2Z4
YyAvRSBQU19QYXNzdGhyb3VnaEx1bUFscGhhIC9UIHBzXzRfMCAvRmggY29tcGlsZWQvcGFzc3Ro
cm91Z2hsdW1hbHBoYTExcHMuaCBQYXNzdGhyb3VnaDExLmhsc2wNCisNCitmeGMgL0UgVlNfQ2xl
YXIgL1QgdnNfNF8wIC9GaCBjb21waWxlZC9jbGVhcjExdnMuaCBDbGVhcjExLmhsc2wNCitmeGMg
L0UgUFNfQ2xlYXJTaW5nbGUgL1QgcHNfNF8wIC9GaCBjb21waWxlZC9jbGVhcnNpbmdsZTExcHMu
aCBDbGVhcjExLmhsc2wNCitmeGMgL0UgUFNfQ2xlYXJNdWx0aXBsZSAvVCBwc180XzAgL0ZoIGNv
bXBpbGVkL2NsZWFybXVsdGlwbGUxMXBzLmggQ2xlYXIxMS5obHNsDQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0JsaXQuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0Js
aXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmQ3M2RmNjQxOGRkZWIxZmQ2NWU1Y2U3OTAxZGM4MDIwNmQyODg1
YjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvQmxpdC5jcHAKQEAgLTAsMCArMSw1OTUgQEAKKyNpbmNsdWRlICJw
cmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gQmxpdC5jcHA6IFN1cmZhY2Ug
Y29weSB1dGlsaXR5IGNsYXNzLgorCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
QmxpdC5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9yZW5kZXJlcjlfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9UZXh0dXJlU3RvcmFnZTkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9SZW5kZXJUYXJnZXQ5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L2QzZDkvUmVuZGVyZXI5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgorCituYW1lc3BhY2UKK3sKKyNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3N0YW5kYXJkdnMu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2Zs
aXB5dnMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBp
bGVkL3Bhc3N0aHJvdWdocHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9z
aGFkZXJzL2NvbXBpbGVkL2x1bWluYW5jZXBzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9jb21wb25lbnRtYXNrcHMuaCIKKworY29uc3QgQllU
RSogY29uc3QgZ19zaGFkZXJDb2RlW10gPQoreworICAgIGdfdnMyMF9zdGFuZGFyZHZzLAorICAg
IGdfdnMyMF9mbGlweXZzLAorICAgIGdfcHMyMF9wYXNzdGhyb3VnaHBzLAorICAgIGdfcHMyMF9s
dW1pbmFuY2VwcywKKyAgICBnX3BzMjBfY29tcG9uZW50bWFza3BzCit9OworCitjb25zdCBzaXpl
X3QgZ19zaGFkZXJTaXplW10gPQoreworICAgIHNpemVvZihnX3ZzMjBfc3RhbmRhcmR2cyksCisg
ICAgc2l6ZW9mKGdfdnMyMF9mbGlweXZzKSwKKyAgICBzaXplb2YoZ19wczIwX3Bhc3N0aHJvdWdo
cHMpLAorICAgIHNpemVvZihnX3BzMjBfbHVtaW5hbmNlcHMpLAorICAgIHNpemVvZihnX3BzMjBf
Y29tcG9uZW50bWFza3BzKQorfTsKK30KKworbmFtZXNwYWNlIHJ4Cit7CitCbGl0OjpCbGl0KHJ4
OjpSZW5kZXJlcjkgKnJlbmRlcmVyKQorICA6IG1SZW5kZXJlcihyZW5kZXJlciksIG1RdWFkVmVy
dGV4QnVmZmVyKE5VTEwpLCBtUXVhZFZlcnRleERlY2xhcmF0aW9uKE5VTEwpLCBtU2F2ZWRTdGF0
ZUJsb2NrKE5VTEwpLCBtU2F2ZWRSZW5kZXJUYXJnZXQoTlVMTCksIG1TYXZlZERlcHRoU3RlbmNp
bChOVUxMKQoreworICAgIGluaXRHZW9tZXRyeSgpOworICAgIG1lbXNldChtQ29tcGlsZWRTaGFk
ZXJzLCAwLCBzaXplb2YobUNvbXBpbGVkU2hhZGVycykpOworfQorCitCbGl0Ojp+QmxpdCgpCit7
CisgICAgaWYgKG1TYXZlZFN0YXRlQmxvY2spIG1TYXZlZFN0YXRlQmxvY2stPlJlbGVhc2UoKTsK
KyAgICBpZiAobVF1YWRWZXJ0ZXhCdWZmZXIpIG1RdWFkVmVydGV4QnVmZmVyLT5SZWxlYXNlKCk7
CisgICAgaWYgKG1RdWFkVmVydGV4RGVjbGFyYXRpb24pIG1RdWFkVmVydGV4RGVjbGFyYXRpb24t
PlJlbGVhc2UoKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU0hBREVSX0NPVU5UOyBpKysp
CisgICAgeworICAgICAgICBpZiAobUNvbXBpbGVkU2hhZGVyc1tpXSkKKyAgICAgICAgeworICAg
ICAgICAgICAgbUNvbXBpbGVkU2hhZGVyc1tpXS0+UmVsZWFzZSgpOworICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIEJsaXQ6OmluaXRHZW9tZXRyeSgpCit7CisgICAgc3RhdGljIGNvbnN0IGZs
b2F0IHF1YWRbXSA9CisgICAgeworICAgICAgICAtMSwgLTEsCisgICAgICAgIC0xLCAgMSwKKyAg
ICAgICAgIDEsIC0xLAorICAgICAgICAgMSwgIDEKKyAgICB9OworCisgICAgSURpcmVjdDNERGV2
aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgIEhSRVNVTFQgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVWZXJ0ZXhCdWZmZXIoc2l6ZW9mKHF1YWQpLCBEM0RVU0FHRV9X
UklURU9OTFksIDAsIEQzRFBPT0xfREVGQVVMVCwgJm1RdWFkVmVydGV4QnVmZmVyLCBOVUxMKTsK
KworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEFTU0VSVChyZXN1bHQg
PT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwor
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KKworICAg
IHZvaWQgKmxvY2tQdHIgPSBOVUxMOworICAgIHJlc3VsdCA9IG1RdWFkVmVydGV4QnVmZmVyLT5M
b2NrKDAsIDAsICZsb2NrUHRyLCAwKTsKKworICAgIGlmIChGQUlMRUQocmVzdWx0KSB8fCBsb2Nr
UHRyID09IE5VTEwpCisgICAgeworICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRP
RlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisKKyAgICBtZW1jcHkobG9ja1B0
ciwgcXVhZCwgc2l6ZW9mKHF1YWQpKTsKKyAgICBtUXVhZFZlcnRleEJ1ZmZlci0+VW5sb2NrKCk7
CisKKyAgICBzdGF0aWMgY29uc3QgRDNEVkVSVEVYRUxFTUVOVDkgZWxlbWVudHNbXSA9CisgICAg
eworICAgICAgICB7IDAsIDAsIEQzRERFQ0xUWVBFX0ZMT0FUMiwgRDNEREVDTE1FVEhPRF9ERUZB
VUxULCBEM0RERUNMVVNBR0VfUE9TSVRJT04sIDAgfSwKKyAgICAgICAgRDNEREVDTF9FTkQoKQor
ICAgIH07CisKKyAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVZlcnRleERlY2xhcmF0aW9uKGVs
ZW1lbnRzLCAmbVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbik7CisKKyAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCisgICAgeworICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVN
T1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBEM0RTaGFk
ZXJUeXBlPgorYm9vbCBCbGl0OjpzZXRTaGFkZXIoU2hhZGVySWQgc291cmNlLCBjb25zdCBjaGFy
ICpwcm9maWxlLAorICAgICAgICAgICAgICAgICAgICAgRDNEU2hhZGVyVHlwZSAqKHJ4OjpSZW5k
ZXJlcjk6OipjcmVhdGVTaGFkZXIpKGNvbnN0IERXT1JEICosIHNpemVfdCBsZW5ndGgpLAorICAg
ICAgICAgICAgICAgICAgICAgSFJFU1VMVCAoV0lOQVBJIElEaXJlY3QzRERldmljZTk6OipzZXRT
aGFkZXIpKEQzRFNoYWRlclR5cGUqKSkKK3sKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2Ug
PSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgRDNEU2hhZGVyVHlwZSAqc2hhZGVyOwor
CisgICAgaWYgKG1Db21waWxlZFNoYWRlcnNbc291cmNlXSAhPSBOVUxMKQorICAgIHsKKyAgICAg
ICAgc2hhZGVyID0gc3RhdGljX2Nhc3Q8RDNEU2hhZGVyVHlwZSo+KG1Db21waWxlZFNoYWRlcnNb
c291cmNlXSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNvbnN0IEJZVEUqIHNo
YWRlckNvZGUgPSBnX3NoYWRlckNvZGVbc291cmNlXTsKKyAgICAgICAgc2l6ZV90IHNoYWRlclNp
emUgPSBnX3NoYWRlclNpemVbc291cmNlXTsKKworICAgICAgICBzaGFkZXIgPSAobVJlbmRlcmVy
LT4qY3JlYXRlU2hhZGVyKShyZWludGVycHJldF9jYXN0PGNvbnN0IERXT1JEKj4oc2hhZGVyQ29k
ZSksIHNoYWRlclNpemUpOworICAgICAgICBpZiAoIXNoYWRlcikKKyAgICAgICAgeworICAgICAg
ICAgICAgRVJSKCJGYWlsZWQgdG8gY3JlYXRlIHNoYWRlciBmb3IgYmxpdCBvcGVyYXRpb24iKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIG1Db21waWxl
ZFNoYWRlcnNbc291cmNlXSA9IHNoYWRlcjsKKyAgICB9CisKKyAgICBIUkVTVUxUIGhyID0gKGRl
dmljZS0+KnNldFNoYWRlcikoc2hhZGVyKTsKKworICAgIGlmIChGQUlMRUQoaHIpKQorICAgIHsK
KyAgICAgICAgRVJSKCJGYWlsZWQgdG8gc2V0IHNoYWRlciBmb3IgYmxpdCBvcGVyYXRpb24iKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIEJsaXQ6OnNldFZlcnRleFNoYWRlcihTaGFkZXJJZCBzaGFkZXIpCit7CisgICAgcmV0dXJu
IHNldFNoYWRlcjxJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5PihzaGFkZXIsICJ2c18yXzAiLCAmcng6
OlJlbmRlcmVyOTo6Y3JlYXRlVmVydGV4U2hhZGVyLCAmSURpcmVjdDNERGV2aWNlOTo6U2V0VmVy
dGV4U2hhZGVyKTsKK30KKworYm9vbCBCbGl0OjpzZXRQaXhlbFNoYWRlcihTaGFkZXJJZCBzaGFk
ZXIpCit7CisgICAgcmV0dXJuIHNldFNoYWRlcjxJRGlyZWN0M0RQaXhlbFNoYWRlcjk+KHNoYWRl
ciwgInBzXzJfMCIsICZyeDo6UmVuZGVyZXI5OjpjcmVhdGVQaXhlbFNoYWRlciwgJklEaXJlY3Qz
RERldmljZTk6OlNldFBpeGVsU2hhZGVyKTsKK30KKworUkVDVCBCbGl0OjpnZXRTdXJmYWNlUmVj
dChJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSkgY29uc3QKK3sKKyAgICBEM0RTVVJGQUNFX0RF
U0MgZGVzYzsKKyAgICBzdXJmYWNlLT5HZXREZXNjKCZkZXNjKTsKKworICAgIFJFQ1QgcmVjdDsK
KyAgICByZWN0LmxlZnQgPSAwOworICAgIHJlY3QudG9wID0gMDsKKyAgICByZWN0LnJpZ2h0ID0g
ZGVzYy5XaWR0aDsKKyAgICByZWN0LmJvdHRvbSA9IGRlc2MuSGVpZ2h0OworCisgICAgcmV0dXJu
IHJlY3Q7Cit9CisKK2Jvb2wgQmxpdDo6Ym94RmlsdGVyKElEaXJlY3QzRFN1cmZhY2U5ICpzb3Vy
Y2UsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0KQoreworICAgIElEaXJlY3QzRFRleHR1cmU5ICp0
ZXh0dXJlID0gY29weVN1cmZhY2VUb1RleHR1cmUoc291cmNlLCBnZXRTdXJmYWNlUmVjdChzb3Vy
Y2UpKTsKKyAgICBpZiAoIXRleHR1cmUpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZp
Y2UoKTsKKworICAgIHNhdmVTdGF0ZSgpOworCisgICAgZGV2aWNlLT5TZXRUZXh0dXJlKDAsIHRl
eHR1cmUpOworICAgIGRldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIGRlc3QpOworCisgICAgc2V0
VmVydGV4U2hhZGVyKFNIQURFUl9WU19TVEFOREFSRCk7CisgICAgc2V0UGl4ZWxTaGFkZXIoU0hB
REVSX1BTX1BBU1NUSFJPVUdIKTsKKworICAgIHNldENvbW1vbkJsaXRTdGF0ZSgpOworICAgIGRl
dmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUlORklMVEVSLCBEM0RURVhGX0xJTkVB
Uik7CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NQUdGSUxURVIsIEQz
RFRFWEZfTElORUFSKTsKKworICAgIHNldFZpZXdwb3J0KGdldFN1cmZhY2VSZWN0KGRlc3QpLCAw
LCAwKTsKKworICAgIHJlbmRlcigpOworCisgICAgdGV4dHVyZS0+UmVsZWFzZSgpOworCisgICAg
cmVzdG9yZVN0YXRlKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBCbGl0Ojpjb3B5
KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdM
ZW51bSBkZXN0Rm9ybWF0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBHTGludCBsZXZlbCkKK3sKKyAgICBSZW5kZXJUYXJn
ZXQ5ICpyZW5kZXJUYXJnZXQgPSBOVUxMOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2Ug
PSBOVUxMOworICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gZnJhbWVidWZmZXIt
PmdldENvbG9yYnVmZmVyKDApOworCisgICAgaWYgKGNvbG9yYnVmZmVyKQorICAgIHsKKyAgICAg
ICAgcmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0OTo6bWFrZVJlbmRlclRhcmdldDkoY29sb3Ji
dWZmZXItPmdldFJlbmRlclRhcmdldCgpKTsKKyAgICB9CisgICAgCisgICAgaWYgKHJlbmRlclRh
cmdldCkKKyAgICB7CisgICAgICAgIHNvdXJjZSA9IHJlbmRlclRhcmdldC0+Z2V0U3VyZmFjZSgp
OworICAgIH0KKworICAgIGlmICghc291cmNlKQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQg
dG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgIH0KKworICAgIFRleHR1cmVTdG9yYWdl
OV8yRCAqc3RvcmFnZTkgPSBUZXh0dXJlU3RvcmFnZTlfMkQ6Om1ha2VUZXh0dXJlU3RvcmFnZTlf
MkQoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAgIElEaXJlY3QzRFN1cmZhY2U5
ICpkZXN0U3VyZmFjZSA9IHN0b3JhZ2U5LT5nZXRTdXJmYWNlTGV2ZWwobGV2ZWwsIHRydWUpOwor
ICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIAorICAgIGlmIChkZXN0U3VyZmFjZSkK
KyAgICB7CisgICAgICAgIHJlc3VsdCA9IGNvcHkoc291cmNlLCBzb3VyY2VSZWN0LCBkZXN0Rm9y
bWF0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBkZXN0U3VyZmFjZSk7CisgICAgICAgIGRlc3RTdXJmYWNl
LT5SZWxlYXNlKCk7CisgICAgfQorCisgICAgc291cmNlLT5SZWxlYXNlKCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworYm9vbCBCbGl0Ojpjb3B5KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZm
ZXIsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2Us
IEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKQoreworICAgIFJlbmRlclRhcmdldDkgKnJlbmRl
clRhcmdldCA9IE5VTEw7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSA9IE5VTEw7Cisg
ICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3Ji
dWZmZXIoMCk7CisKKyAgICBpZiAoY29sb3JidWZmZXIpCisgICAgeworICAgICAgICByZW5kZXJU
YXJnZXQgPSBSZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShjb2xvcmJ1ZmZlci0+Z2V0
UmVuZGVyVGFyZ2V0KCkpOworICAgIH0KKyAgICAKKyAgICBpZiAocmVuZGVyVGFyZ2V0KQorICAg
IHsKKyAgICAgICAgc291cmNlID0gcmVuZGVyVGFyZ2V0LT5nZXRTdXJmYWNlKCk7CisgICAgfQor
CisgICAgaWYgKCFzb3VyY2UpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2
ZSB0aGUgcmVuZGVyIHRhcmdldC4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisgICAgVGV4dHVyZVN0b3JhZ2U5X0N1YmUgKnN0
b3JhZ2U5ID0gVGV4dHVyZVN0b3JhZ2U5X0N1YmU6Om1ha2VUZXh0dXJlU3RvcmFnZTlfQ3ViZShz
dG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRl
c3RTdXJmYWNlID0gc3RvcmFnZTktPmdldEN1YmVNYXBTdXJmYWNlKHRhcmdldCwgbGV2ZWwsIHRy
dWUpOworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisKKyAgICBpZiAoZGVzdFN1cmZhY2UpCisg
ICAgeworICAgICAgICByZXN1bHQgPSBjb3B5KHNvdXJjZSwgc291cmNlUmVjdCwgZGVzdEZvcm1h
dCwgeG9mZnNldCwgeW9mZnNldCwgZGVzdFN1cmZhY2UpOworICAgICAgICBkZXN0U3VyZmFjZS0+
UmVsZWFzZSgpOworICAgIH0KKworICAgIHNvdXJjZS0+UmVsZWFzZSgpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK2Jvb2wgQmxpdDo6Y29weShJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBj
b25zdCBSRUNUICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpCit7CisgICAgaWYgKCFkZXN0
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIElEaXJlY3QzRERl
dmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICBEM0RTVVJGQUNF
X0RFU0Mgc291cmNlRGVzYzsKKyAgICBEM0RTVVJGQUNFX0RFU0MgZGVzdERlc2M7CisgICAgc291
cmNlLT5HZXREZXNjKCZzb3VyY2VEZXNjKTsKKyAgICBkZXN0LT5HZXREZXNjKCZkZXN0RGVzYyk7
CisKKyAgICBpZiAoc291cmNlRGVzYy5Gb3JtYXQgPT0gZGVzdERlc2MuRm9ybWF0ICYmIGRlc3RE
ZXNjLlVzYWdlICYgRDNEVVNBR0VfUkVOREVSVEFSR0VUICYmCisgICAgICAgIGQzZDlfZ2w6Oklz
Rm9ybWF0Q2hhbm5lbEVxdWl2YWxlbnQoZGVzdERlc2MuRm9ybWF0LCBkZXN0Rm9ybWF0KSkgICAv
LyBDYW4gdXNlIFN0cmV0Y2hSZWN0CisgICAgeworICAgICAgICBSRUNUIGRlc3RSZWN0ID0ge3hv
ZmZzZXQsIHlvZmZzZXQsIHhvZmZzZXQgKyAoc291cmNlUmVjdC5yaWdodCAtIHNvdXJjZVJlY3Qu
bGVmdCksIHlvZmZzZXQgKyAoc291cmNlUmVjdC5ib3R0b20gLSBzb3VyY2VSZWN0LnRvcCl9Owor
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+U3RyZXRjaFJlY3Qoc291cmNlLCAmc291
cmNlUmVjdCwgZGVzdCwgJmRlc3RSZWN0LCBEM0RURVhGX1BPSU5UKTsKKworICAgICAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0g
RDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZvcm1hdENvbnZl
cnQoc291cmNlLCBzb3VyY2VSZWN0LCBkZXN0Rm9ybWF0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBkZXN0
KTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQmxpdDo6Zm9ybWF0Q29udmVy
dChJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBjb25zdCBSRUNUICZzb3VyY2VSZWN0LCBHTGVu
dW0gZGVzdEZvcm1hdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgSURpcmVjdDNEU3Vy
ZmFjZTkgKmRlc3QpCit7CisgICAgSURpcmVjdDNEVGV4dHVyZTkgKnRleHR1cmUgPSBjb3B5U3Vy
ZmFjZVRvVGV4dHVyZShzb3VyY2UsIHNvdXJjZVJlY3QpOworICAgIGlmICghdGV4dHVyZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBJRGlyZWN0M0REZXZpY2U5
ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgc2F2ZVN0YXRlKCk7CisK
KyAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwgdGV4dHVyZSk7CisgICAgZGV2aWNlLT5TZXRSZW5k
ZXJUYXJnZXQoMCwgZGVzdCk7CisKKyAgICBzZXRWaWV3cG9ydChzb3VyY2VSZWN0LCB4b2Zmc2V0
LCB5b2Zmc2V0KTsKKworICAgIHNldENvbW1vbkJsaXRTdGF0ZSgpOworICAgIGlmIChzZXRGb3Jt
YXRDb252ZXJ0U2hhZGVycyhkZXN0Rm9ybWF0KSkKKyAgICB7CisgICAgICAgIHJlbmRlcigpOwor
ICAgIH0KKworICAgIHRleHR1cmUtPlJlbGVhc2UoKTsKKworICAgIHJlc3RvcmVTdGF0ZSgpOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQmxpdDo6c2V0Rm9ybWF0Q29udmVydFNoYWRl
cnMoR0xlbnVtIGRlc3RGb3JtYXQpCit7CisgICAgYm9vbCBva2F5ID0gc2V0VmVydGV4U2hhZGVy
KFNIQURFUl9WU19TVEFOREFSRCk7CisKKyAgICBzd2l0Y2ggKGRlc3RGb3JtYXQpCisgICAgewor
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgIGNhc2UgR0xfUkdCQToKKyAgICAg
IGNhc2UgR0xfQkdSQV9FWFQ6CisgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgIGNhc2UgR0xfQUxQ
SEE6CisgICAgICAgIG9rYXkgPSBva2F5ICYmIHNldFBpeGVsU2hhZGVyKFNIQURFUl9QU19DT01Q
T05FTlRNQVNLKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgor
ICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgIG9rYXkgPSBva2F5ICYmIHNl
dFBpeGVsU2hhZGVyKFNIQURFUl9QU19MVU1JTkFOQ0UpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBpZiAoIW9rYXkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgZW51bSB7IFggPSAwLCBZID0gMSwgWiA9IDIsIFcgPSAzIH07CisKKyAgICAvLyBUaGUg
bWVhbmluZyBvZiB0aGlzIGNvbnN0YW50IGRlcGVuZHMgb24gdGhlIHNoYWRlciB0aGF0IHdhcyBz
ZWxlY3RlZC4KKyAgICAvLyBTZWUgdGhlIHNoYWRlciBhc3NlbWJseSBjb2RlIGFib3ZlIGZvciBk
ZXRhaWxzLgorICAgIGZsb2F0IHBzQ29uc3QwWzRdID0geyAwLCAwLCAwLCAwIH07CisKKyAgICBz
d2l0Y2ggKGRlc3RGb3JtYXQpCisgICAgeworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
KyAgICAgIGNhc2UgR0xfUkdCQToKKyAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6CisgICAgICAgIHBz
Q29uc3QwW1hdID0gMTsKKyAgICAgICAgcHNDb25zdDBbWl0gPSAxOworICAgICAgICBicmVhazsK
KworICAgICAgY2FzZSBHTF9SR0I6CisgICAgICAgIHBzQ29uc3QwW1hdID0gMTsKKyAgICAgICAg
cHNDb25zdDBbV10gPSAxOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBHTF9BTFBIQToK
KyAgICAgICAgcHNDb25zdDBbWl0gPSAxOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0U6CisgICAgICAgIHBzQ29uc3QwW1ldID0gMTsKKyAgICAgICAgYnJlYWs7CisK
KyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgorICAgICAgICBwc0NvbnN0MFtYXSA9IDE7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1SZW5kZXJlci0+Z2V0RGV2aWNlKCktPlNl
dFBpeGVsU2hhZGVyQ29uc3RhbnRGKDAsIHBzQ29uc3QwLCAxKTsKKworICAgIHJldHVybiB0cnVl
OworfQorCitJRGlyZWN0M0RUZXh0dXJlOSAqQmxpdDo6Y29weVN1cmZhY2VUb1RleHR1cmUoSURp
cmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QpCit7CisgICAg
aWYgKCFzdXJmYWNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAg
SURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAg
IEQzRFNVUkZBQ0VfREVTQyBzb3VyY2VEZXNjOworICAgIHN1cmZhY2UtPkdldERlc2MoJnNvdXJj
ZURlc2MpOworCisgICAgLy8gQ29weSB0aGUgcmVuZGVyIHRhcmdldCBpbnRvIGEgdGV4dHVyZQor
ICAgIElEaXJlY3QzRFRleHR1cmU5ICp0ZXh0dXJlOworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2
aWNlLT5DcmVhdGVUZXh0dXJlKHNvdXJjZVJlY3QucmlnaHQgLSBzb3VyY2VSZWN0LmxlZnQsIHNv
dXJjZVJlY3QuYm90dG9tIC0gc291cmNlUmVjdC50b3AsIDEsIEQzRFVTQUdFX1JFTkRFUlRBUkdF
VCwgc291cmNlRGVzYy5Gb3JtYXQsIEQzRFBPT0xfREVGQVVMVCwgJnRleHR1cmUsIE5VTEwpOwor
CisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJlc3VsdCA9
PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Cisg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgKElEaXJlY3QzRFRleHR1
cmU5KilOVUxMKTsKKyAgICB9CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqdGV4dHVyZVN1cmZh
Y2U7CisgICAgcmVzdWx0ID0gdGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKDAsICZ0ZXh0dXJlU3Vy
ZmFjZSk7CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBBU1NFUlQo
cmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVN
T1JZKTsKKyAgICAgICAgdGV4dHVyZS0+UmVsZWFzZSgpOworICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlksIChJRGlyZWN0M0RUZXh0dXJlOSopTlVMTCk7CisgICAgfQor
CisgICAgbVJlbmRlcmVyLT5lbmRTY2VuZSgpOworICAgIHJlc3VsdCA9IGRldmljZS0+U3RyZXRj
aFJlY3Qoc3VyZmFjZSwgJnNvdXJjZVJlY3QsIHRleHR1cmVTdXJmYWNlLCBOVUxMLCBEM0RURVhG
X05PTkUpOworCisgICAgdGV4dHVyZVN1cmZhY2UtPlJlbGVhc2UoKTsKKworICAgIGlmIChGQUlM
RUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9G
VklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICB0ZXh0dXJl
LT5SZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
KElEaXJlY3QzRFRleHR1cmU5KilOVUxMKTsKKyAgICB9CisKKyAgICByZXR1cm4gdGV4dHVyZTsK
K30KKwordm9pZCBCbGl0OjpzZXRWaWV3cG9ydChjb25zdCBSRUNUICZzb3VyY2VSZWN0LCBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0KQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRldmlj
ZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICBEM0RWSUVXUE9SVDkgdnA7CisgICAg
dnAuWCAgICAgID0geG9mZnNldDsKKyAgICB2cC5ZICAgICAgPSB5b2Zmc2V0OworICAgIHZwLldp
ZHRoICA9IHNvdXJjZVJlY3QucmlnaHQgLSBzb3VyY2VSZWN0LmxlZnQ7CisgICAgdnAuSGVpZ2h0
ID0gc291cmNlUmVjdC5ib3R0b20gLSBzb3VyY2VSZWN0LnRvcDsKKyAgICB2cC5NaW5aICAgPSAw
LjBmOworICAgIHZwLk1heFogICA9IDEuMGY7CisgICAgZGV2aWNlLT5TZXRWaWV3cG9ydCgmdnAp
OworCisgICAgZmxvYXQgaGFsZlBpeGVsQWRqdXN0WzRdID0geyAtMS4wZi92cC5XaWR0aCwgMS4w
Zi92cC5IZWlnaHQsIDAsIDAgfTsKKyAgICBkZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50
RigwLCBoYWxmUGl4ZWxBZGp1c3QsIDEpOworfQorCit2b2lkIEJsaXQ6OnNldENvbW1vbkJsaXRT
dGF0ZSgpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXRE
ZXZpY2UoKTsKKworICAgIGRldmljZS0+U2V0RGVwdGhTdGVuY2lsU3VyZmFjZShOVUxMKTsKKwor
ICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfRklMTE1PREUsIEQzREZJTExfU09MSUQp
OworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFURVNURU5BQkxFLCBGQUxT
RSk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBG
QUxTRSk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgRDNEQ1VM
TF9OT05FKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NMSVBQTEFORUVOQUJM
RSwgMCk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxF
LCBEM0RDT0xPUldSSVRFRU5BQkxFX0FMUEhBIHwgRDNEQ09MT1JXUklURUVOQUJMRV9CTFVFIHwg
RDNEQ09MT1JXUklURUVOQUJMRV9HUkVFTiB8IEQzRENPTE9SV1JJVEVFTkFCTEVfUkVEKTsKKyAg
ICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NSR0JXUklURUVOQUJMRSwgRkFMU0UpOwor
ICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NPUlRFU1RFTkFCTEUsIEZBTFNF
KTsKKworICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUFHRklMVEVSLCBE
M0RURVhGX1BPSU5UKTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01J
TkZJTFRFUiwgRDNEVEVYRl9QT0lOVCk7CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwg
RDNEU0FNUF9TUkdCVEVYVFVSRSwgRkFMU0UpOworICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRl
KDAsIEQzRFNBTVBfQUREUkVTU1UsIEQzRFRBRERSRVNTX0NMQU1QKTsKKyAgICBkZXZpY2UtPlNl
dFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX0FERFJFU1NWLCBEM0RUQUREUkVTU19DTEFNUCk7CisK
KyAgICBSRUNUIHNjaXNzb3JSZWN0ID0gezB9OyAgIC8vIFNjaXNzb3JpbmcgaXMgZGlzYWJsZWQg
Zm9yIGZsaXBwaW5nLCBidXQgd2UgbmVlZCB0aGlzIHRvIGNhcHR1cmUgYW5kIHJlc3RvcmUgdGhl
IG9sZCByZWN0YW5nbGUKKyAgICBkZXZpY2UtPlNldFNjaXNzb3JSZWN0KCZzY2lzc29yUmVjdCk7
CisKKyAgICBmb3IoaW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQor
ICAgIHsKKyAgICAgICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKGksIDEpOworICAgIH0K
K30KKwordm9pZCBCbGl0OjpyZW5kZXIoKQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRldmlj
ZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICBIUkVTVUxUIGhyID0gZGV2aWNlLT5T
ZXRTdHJlYW1Tb3VyY2UoMCwgbVF1YWRWZXJ0ZXhCdWZmZXIsIDAsIDIgKiBzaXplb2YoZmxvYXQp
KTsKKyAgICBociA9IGRldmljZS0+U2V0VmVydGV4RGVjbGFyYXRpb24obVF1YWRWZXJ0ZXhEZWNs
YXJhdGlvbik7CisKKyAgICBtUmVuZGVyZXItPnN0YXJ0U2NlbmUoKTsKKyAgICBociA9IGRldmlj
ZS0+RHJhd1ByaW1pdGl2ZShEM0RQVF9UUklBTkdMRVNUUklQLCAwLCAyKTsKK30KKwordm9pZCBC
bGl0OjpzYXZlU3RhdGUoKQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5k
ZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICBIUkVTVUxUIGhyOworCisgICAgZGV2aWNlLT5HZXRE
ZXB0aFN0ZW5jaWxTdXJmYWNlKCZtU2F2ZWREZXB0aFN0ZW5jaWwpOworICAgIGRldmljZS0+R2V0
UmVuZGVyVGFyZ2V0KDAsICZtU2F2ZWRSZW5kZXJUYXJnZXQpOworCisgICAgaWYgKG1TYXZlZFN0
YXRlQmxvY2sgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIGhyID0gZGV2aWNlLT5CZWdpblN0YXRl
QmxvY2soKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikgfHwgaHIgPT0gRDNERVJSX09V
VE9GVklERU9NRU1PUlkgfHwgaHIgPT0gRV9PVVRPRk1FTU9SWSk7CisKKyAgICAgICAgc2V0Q29t
bW9uQmxpdFN0YXRlKCk7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0IGR1bW15Q29uc3Rb
NF0gPSB7IDAsIDAsIDAsIDAgfTsKKworICAgICAgICBkZXZpY2UtPlNldFZlcnRleFNoYWRlcihO
VUxMKTsKKyAgICAgICAgZGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYoMCwgZHVtbXlD
b25zdCwgMSk7CisgICAgICAgIGRldmljZS0+U2V0UGl4ZWxTaGFkZXIoTlVMTCk7CisgICAgICAg
IGRldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYoMCwgZHVtbXlDb25zdCwgMSk7CisKKyAg
ICAgICAgRDNEVklFV1BPUlQ5IGR1bW15VnA7CisgICAgICAgIGR1bW15VnAuWCA9IDA7CisgICAg
ICAgIGR1bW15VnAuWSA9IDA7CisgICAgICAgIGR1bW15VnAuV2lkdGggPSAxOworICAgICAgICBk
dW1teVZwLkhlaWdodCA9IDE7CisgICAgICAgIGR1bW15VnAuTWluWiA9IDA7CisgICAgICAgIGR1
bW15VnAuTWF4WiA9IDE7CisKKyAgICAgICAgZGV2aWNlLT5TZXRWaWV3cG9ydCgmZHVtbXlWcCk7
CisKKyAgICAgICAgZGV2aWNlLT5TZXRUZXh0dXJlKDAsIE5VTEwpOworCisgICAgICAgIGRldmlj
ZS0+U2V0U3RyZWFtU291cmNlKDAsIG1RdWFkVmVydGV4QnVmZmVyLCAwLCAwKTsKKworICAgICAg
ICBkZXZpY2UtPlNldFZlcnRleERlY2xhcmF0aW9uKG1RdWFkVmVydGV4RGVjbGFyYXRpb24pOwor
CisgICAgICAgIGhyID0gZGV2aWNlLT5FbmRTdGF0ZUJsb2NrKCZtU2F2ZWRTdGF0ZUJsb2NrKTsK
KyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikgfHwgaHIgPT0gRDNERVJSX09VVE9GVklERU9N
RU1PUlkgfHwgaHIgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgfQorCisgICAgQVNTRVJUKG1TYXZl
ZFN0YXRlQmxvY2sgIT0gTlVMTCk7CisKKyAgICBpZiAobVNhdmVkU3RhdGVCbG9jayAhPSBOVUxM
KQorICAgIHsKKyAgICAgICAgaHIgPSBtU2F2ZWRTdGF0ZUJsb2NrLT5DYXB0dXJlKCk7CisgICAg
ICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICB9Cit9CisKK3ZvaWQgQmxpdDo6cmVzdG9y
ZVN0YXRlKCkKK3sKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdl
dERldmljZSgpOworCisgICAgZGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKG1TYXZlZERl
cHRoU3RlbmNpbCk7CisgICAgaWYgKG1TYXZlZERlcHRoU3RlbmNpbCAhPSBOVUxMKQorICAgIHsK
KyAgICAgICAgbVNhdmVkRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CisgICAgICAgIG1TYXZlZERl
cHRoU3RlbmNpbCA9IE5VTEw7CisgICAgfQorCisgICAgZGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQo
MCwgbVNhdmVkUmVuZGVyVGFyZ2V0KTsKKyAgICBpZiAobVNhdmVkUmVuZGVyVGFyZ2V0ICE9IE5V
TEwpCisgICAgeworICAgICAgICBtU2F2ZWRSZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKKyAgICAg
ICAgbVNhdmVkUmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICB9CisKKyAgICBBU1NFUlQobVNhdmVk
U3RhdGVCbG9jayAhPSBOVUxMKTsKKworICAgIGlmIChtU2F2ZWRTdGF0ZUJsb2NrICE9IE5VTEwp
CisgICAgeworICAgICAgICBtU2F2ZWRTdGF0ZUJsb2NrLT5BcHBseSgpOworICAgIH0KK30KKwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L0JsaXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9CbGl0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzcxODAyOGU2NjJkM2Q1NjFjNzZjZDBj
YTZmNTJlODEzZTY3MjVjMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CbGl0LmgKQEAgLTAsMCArMSw5NCBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworLy8gQmxpdC5jcHA6IFN1cmZhY2UgY29weSB1dGlsaXR5IGNs
YXNzLgorCisjaWZuZGVmIExJQkdMRVNWMl9CTElUX0hfCisjZGVmaW5lIExJQkdMRVNWMl9CTElU
X0hfCisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorCituYW1lc3BhY2UgZ2wKK3sK
K2NsYXNzIEZyYW1lYnVmZmVyOworfQorCituYW1lc3BhY2UgcngKK3sKK2NsYXNzIFJlbmRlcmVy
OTsKK2NsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ7CitjbGFzcyBUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZUN1YmU7CisKK2NsYXNzIEJsaXQKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0
IEJsaXQoUmVuZGVyZXI5ICpyZW5kZXJlcik7CisgICAgfkJsaXQoKTsKKworICAgIC8vIENvcHkg
ZnJvbSBzb3VyY2Ugc3VyZmFjZSB0byBkZXN0IHN1cmZhY2UuCisgICAgLy8gc291cmNlUmVjdCwg
eG9mZnNldCwgeW9mZnNldCBhcmUgaW4gRDNEIGNvb3JkaW5hdGVzICgwLDAgaW4gdXBwZXItbGVm
dCkKKyAgICBib29sIGNvcHkoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgUkVD
VCAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIEdMaW50IGxldmVsKTsK
KyAgICBib29sIGNvcHkoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgUkVDVCAm
c291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwpOworCisgICAgLy8gQ29weSBmcm9tIHNvdXJjZSBzdXJmYWNlIHRvIGRlc3Qg
c3VyZmFjZS4KKyAgICAvLyBzb3VyY2VSZWN0LCB4b2Zmc2V0LCB5b2Zmc2V0IGFyZSBpbiBEM0Qg
Y29vcmRpbmF0ZXMgKDAsMCBpbiB1cHBlci1sZWZ0KQorICAgIC8vIHNvdXJjZSBpcyBpbnRlcnBy
ZXRlZCBhcyBSR0JBIGFuZCBkZXN0Rm9ybWF0IHNwZWNpZmllcyB0aGUgZGVzaXJlZCByZXN1bHQg
Zm9ybWF0LiBGb3IgZXhhbXBsZSwgaWYgZGVzdEZvcm1hdCA9IEdMX1JHQiwgdGhlIGFscGhhIGNo
YW5uZWwgd2lsbCBiZSBmb3JjZWQgdG8gMC4KKyAgICBib29sIGZvcm1hdENvbnZlcnQoSURpcmVj
dDNEU3VyZmFjZTkgKnNvdXJjZSwgY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RG
b3JtYXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIElEaXJlY3QzRFN1cmZhY2U5ICpk
ZXN0KTsKKworICAgIC8vIDJ4MiBib3ggZmlsdGVyIHNhbXBsZSBmcm9tIHNvdXJjZSB0byBkZXN0
LgorICAgIC8vIFJlcXVpcmVzIHRoYXQgc291cmNlIGlzIFJHQihBKSBhbmQgZGVzdCBoYXMgdGhl
IHNhbWUgZm9ybWF0IGFzIHNvdXJjZS4KKyAgICBib29sIGJveEZpbHRlcihJRGlyZWN0M0RTdXJm
YWNlOSAqc291cmNlLCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCk7CisKKyAgcHJpdmF0ZToKKyAg
ICByeDo6UmVuZGVyZXI5ICptUmVuZGVyZXI7CisKKyAgICBJRGlyZWN0M0RWZXJ0ZXhCdWZmZXI5
ICptUXVhZFZlcnRleEJ1ZmZlcjsKKyAgICBJRGlyZWN0M0RWZXJ0ZXhEZWNsYXJhdGlvbjkgKm1R
dWFkVmVydGV4RGVjbGFyYXRpb247CisKKyAgICB2b2lkIGluaXRHZW9tZXRyeSgpOworCisgICAg
Ym9vbCBzZXRGb3JtYXRDb252ZXJ0U2hhZGVycyhHTGVudW0gZGVzdEZvcm1hdCk7CisKKyAgICBi
b29sIGNvcHkoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgY29uc3QgUkVDVCAmc291cmNlUmVj
dCwgR0xlbnVtIGRlc3RGb3JtYXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIElEaXJl
Y3QzRFN1cmZhY2U5ICpkZXN0KTsKKyAgICBJRGlyZWN0M0RUZXh0dXJlOSAqY29weVN1cmZhY2VU
b1RleHR1cmUoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UsIGNvbnN0IFJFQ1QgJnNvdXJjZVJl
Y3QpOworICAgIHZvaWQgc2V0Vmlld3BvcnQoY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCk7CisgICAgdm9pZCBzZXRDb21tb25CbGl0U3RhdGUoKTsK
KyAgICBSRUNUIGdldFN1cmZhY2VSZWN0KElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlKSBjb25z
dDsKKworICAgIC8vIFRoaXMgZW51bSBpcyB1c2VkIHRvIGluZGV4IG1Db21waWxlZFNoYWRlcnMg
YW5kIG1TaGFkZXJTb3VyY2UuCisgICAgZW51bSBTaGFkZXJJZAorICAgIHsKKyAgICAgICAgU0hB
REVSX1ZTX1NUQU5EQVJELAorICAgICAgICBTSEFERVJfVlNfRkxJUFksCisgICAgICAgIFNIQURF
Ul9QU19QQVNTVEhST1VHSCwKKyAgICAgICAgU0hBREVSX1BTX0xVTUlOQU5DRSwKKyAgICAgICAg
U0hBREVSX1BTX0NPTVBPTkVOVE1BU0ssCisgICAgICAgIFNIQURFUl9DT1VOVAorICAgIH07CisK
KyAgICAvLyBUaGlzIGFjdHVhbGx5IGNvbnRhaW5zIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgb3Ig
SURpcmVjdDNEUGl4ZWxTaGFkZXI5IGNhc3RlZCB0byBJVW5rbm93bi4KKyAgICBJVW5rbm93biAq
bUNvbXBpbGVkU2hhZGVyc1tTSEFERVJfQ09VTlRdOworCisgICAgdGVtcGxhdGUgPGNsYXNzIEQz
RFNoYWRlclR5cGU+CisgICAgYm9vbCBzZXRTaGFkZXIoU2hhZGVySWQgc291cmNlLCBjb25zdCBj
aGFyICpwcm9maWxlLAorICAgICAgICAgICAgICAgICAgIEQzRFNoYWRlclR5cGUgKihSZW5kZXJl
cjk6OipjcmVhdGVTaGFkZXIpKGNvbnN0IERXT1JEICosIHNpemVfdCBsZW5ndGgpLAorICAgICAg
ICAgICAgICAgICAgIEhSRVNVTFQgKFdJTkFQSSBJRGlyZWN0M0REZXZpY2U5Ojoqc2V0U2hhZGVy
KShEM0RTaGFkZXJUeXBlKikpOworCisgICAgYm9vbCBzZXRWZXJ0ZXhTaGFkZXIoU2hhZGVySWQg
c2hhZGVyKTsKKyAgICBib29sIHNldFBpeGVsU2hhZGVyKFNoYWRlcklkIHNoYWRlcik7CisgICAg
dm9pZCByZW5kZXIoKTsKKworICAgIHZvaWQgc2F2ZVN0YXRlKCk7CisgICAgdm9pZCByZXN0b3Jl
U3RhdGUoKTsKKyAgICBJRGlyZWN0M0RTdGF0ZUJsb2NrOSAqbVNhdmVkU3RhdGVCbG9jazsKKyAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqbVNhdmVkUmVuZGVyVGFyZ2V0OworICAgIElEaXJlY3QzRFN1
cmZhY2U5ICptU2F2ZWREZXB0aFN0ZW5jaWw7CisKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oQmxpdCk7Cit9OworfQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfQkxJVF9IXwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L0J1ZmZlclN0b3JhZ2U5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9CdWZmZXJTdG9yYWdlOS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWZkYzEyNDZm
MTc0MzZkN2Y0YzRjY2YzZTU0OTYwNjUyMDg5MzU5MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CdWZmZXJTdG9y
YWdlOS5jcHAKQEAgLTAsMCArMSw3OCBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworLy8gQnVmZmVyU3RvcmFnZTkuY3BwIERlZmluZXMgdGhlIEJ1ZmZlclN0b3Jh
Z2U5IGNsYXNzLgorCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvQnVmZmVyU3Rv
cmFnZTkuaCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKworbmFtZXNwYWNlIHJ4Cit7CisK
K0J1ZmZlclN0b3JhZ2U5OjpCdWZmZXJTdG9yYWdlOSgpCit7CisgICAgbU1lbW9yeSA9IE5VTEw7
CisgICAgbUFsbG9jYXRlZFNpemUgPSAwOworICAgIG1TaXplID0gMDsKK30KKworQnVmZmVyU3Rv
cmFnZTk6On5CdWZmZXJTdG9yYWdlOSgpCit7CisgICAgZGVsZXRlW10gbU1lbW9yeTsKK30KKwor
QnVmZmVyU3RvcmFnZTkgKkJ1ZmZlclN0b3JhZ2U5OjptYWtlQnVmZmVyU3RvcmFnZTkoQnVmZmVy
U3RvcmFnZSAqYnVmZmVyU3RvcmFnZSkKK3sKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShC
dWZmZXJTdG9yYWdlOSosIGJ1ZmZlclN0b3JhZ2UpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
QnVmZmVyU3RvcmFnZTkqPihidWZmZXJTdG9yYWdlKTsKK30KKwordm9pZCAqQnVmZmVyU3RvcmFn
ZTk6OmdldERhdGEoKQoreworICAgIHJldHVybiBtTWVtb3J5OworfQorCit2b2lkIEJ1ZmZlclN0
b3JhZ2U5OjpzZXREYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNp
Z25lZCBpbnQgb2Zmc2V0KQoreworICAgIGlmICghbU1lbW9yeSB8fCBvZmZzZXQgKyBzaXplID4g
bUFsbG9jYXRlZFNpemUpCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgbmV3QWxsb2NhdGVk
U2l6ZSA9IG9mZnNldCArIHNpemU7CisgICAgICAgIHZvaWQgKm5ld01lbW9yeSA9IG5ldyBjaGFy
W25ld0FsbG9jYXRlZFNpemVdOworCisgICAgICAgIGlmIChvZmZzZXQgPiAwICYmIG1NZW1vcnkg
JiYgbUFsbG9jYXRlZFNpemUgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBtZW1jcHkobmV3
TWVtb3J5LCBtTWVtb3J5LCBzdGQ6Om1pbihvZmZzZXQsIG1BbGxvY2F0ZWRTaXplKSk7CisgICAg
ICAgIH0KKworICAgICAgICBkZWxldGVbXSBtTWVtb3J5OworICAgICAgICBtTWVtb3J5ID0gbmV3
TWVtb3J5OworICAgICAgICBtQWxsb2NhdGVkU2l6ZSA9IG5ld0FsbG9jYXRlZFNpemU7CisgICAg
fQorCisgICAgbVNpemUgPSBzdGQ6Om1heChtU2l6ZSwgb2Zmc2V0ICsgc2l6ZSk7CisgICAgaWYg
KGRhdGEpCisgICAgeworICAgICAgICBtZW1jcHkocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obU1l
bW9yeSkgKyBvZmZzZXQsIGRhdGEsIHNpemUpOworICAgIH0KK30KKwordm9pZCBCdWZmZXJTdG9y
YWdlOTo6Y2xlYXIoKQoreworICAgIG1TaXplID0gMDsKK30KKwordW5zaWduZWQgaW50IEJ1ZmZl
clN0b3JhZ2U5OjpnZXRTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVNpemU7Cit9CisKK2Jv
b2wgQnVmZmVyU3RvcmFnZTk6OnN1cHBvcnRzRGlyZWN0QmluZGluZygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvQnVmZmVyU3RvcmFnZTkuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CdWZmZXJTdG9yYWdl
OS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjNlODAzOTY5YmMzNWQ0ZWExMTFkYTIyODFmMjViM2UxNzFkZGMyMzQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDkvQnVmZmVyU3RvcmFnZTkuaApAQCAtMCwwICsxLDQyIEBACisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworLy8gQnVmZmVyU3RvcmFnZTkuaCBEZWZpbmVzIHRoZSBCdWZmZXJTdG9yYWdlOSBj
bGFzcy4KKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfQlVGRkVSU1RPUkFHRTlfSF8KKyNk
ZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX0JVRkZFUlNUT1JBR0U5X0hfCisKKyNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5oIgorCituYW1lc3BhY2UgcngKK3sKKwor
Y2xhc3MgQnVmZmVyU3RvcmFnZTkgOiBwdWJsaWMgQnVmZmVyU3RvcmFnZQoreworICBwdWJsaWM6
CisgICAgQnVmZmVyU3RvcmFnZTkoKTsKKyAgICB2aXJ0dWFsIH5CdWZmZXJTdG9yYWdlOSgpOwor
CisgICAgc3RhdGljIEJ1ZmZlclN0b3JhZ2U5ICptYWtlQnVmZmVyU3RvcmFnZTkoQnVmZmVyU3Rv
cmFnZSAqYnVmZmVyU3RvcmFnZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgKmdldERhdGEoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6
ZSwgdW5zaWduZWQgaW50IG9mZnNldCk7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyKCk7CisgICAg
dmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBz
dXBwb3J0c0RpcmVjdEJpbmRpbmcoKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9X
X0NPUFlfQU5EX0FTU0lHTihCdWZmZXJTdG9yYWdlOSk7CisKKyAgICB2b2lkICptTWVtb3J5Owor
ICAgIHVuc2lnbmVkIGludCBtQWxsb2NhdGVkU2l6ZTsKKworICAgIHVuc2lnbmVkIGludCBtU2l6
ZTsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9CVUZGRVJTVE9SQUdF
OV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L0ZlbmNlOS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvRmVuY2U5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MzljMzdiNGU0Mzk5
Y2I0ZmZkODc5ZjQ3ZjE1MWZjMGNiYWMzMDhjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ZlbmNlOS5jcHAKQEAg
LTAsMCArMSwxMzUgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
Ky8vIEZlbmNlOS5jcHA6IERlZmluZXMgdGhlIHJ4OjpGZW5jZTkgY2xhc3MuCisKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9GZW5jZTkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIv
bWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGls
cy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oIgorCitu
YW1lc3BhY2UgcngKK3sKKworRmVuY2U5OjpGZW5jZTkocng6OlJlbmRlcmVyOSAqcmVuZGVyZXIp
Cit7CisgICAgbVJlbmRlcmVyID0gcmVuZGVyZXI7CisgICAgbVF1ZXJ5ID0gTlVMTDsKK30KKwor
RmVuY2U5Ojp+RmVuY2U5KCkKK3sKKyAgICBpZiAobVF1ZXJ5KQorICAgIHsKKyAgICAgICAgbVJl
bmRlcmVyLT5mcmVlRXZlbnRRdWVyeShtUXVlcnkpOworICAgICAgICBtUXVlcnkgPSBOVUxMOwor
ICAgIH0KK30KKworR0xib29sZWFuIEZlbmNlOTo6aXNGZW5jZSgpCit7CisgICAgLy8gR0xfTlZf
ZmVuY2Ugc3BlYzoKKyAgICAvLyBBIG5hbWUgcmV0dXJuZWQgYnkgR2VuRmVuY2VzTlYsIGJ1dCBu
b3QgeWV0IHNldCB2aWEgU2V0RmVuY2VOViwgaXMgbm90IHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5n
IGZlbmNlLgorICAgIHJldHVybiBtUXVlcnkgIT0gTlVMTDsKK30KKwordm9pZCBGZW5jZTk6OnNl
dEZlbmNlKEdMZW51bSBjb25kaXRpb24pCit7CisgICAgaWYgKCFtUXVlcnkpCisgICAgeworICAg
ICAgICBtUXVlcnkgPSBtUmVuZGVyZXItPmFsbG9jYXRlRXZlbnRRdWVyeSgpOworICAgICAgICBp
ZiAoIW1RdWVyeSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEhSRVNVTFQgcmVzdWx0ID0g
bVF1ZXJ5LT5Jc3N1ZShEM0RJU1NVRV9FTkQpOworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7CisKKyAgICBzZXRDb25kaXRpb24oY29uZGl0aW9uKTsKKyAgICBzZXRTdGF0dXMoR0xfRkFM
U0UpOworfQorCitHTGJvb2xlYW4gRmVuY2U5Ojp0ZXN0RmVuY2UoKQoreworICAgIGlmIChtUXVl
cnkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04sIEdMX1RSVUUpOworICAgIH0KKworICAgIEhSRVNVTFQgcmVzdWx0ID0gbVF1ZXJ5
LT5HZXREYXRhKE5VTEwsIDAsIEQzREdFVERBVEFfRkxVU0gpOworCisgICAgaWYgKGQzZDk6Omlz
RGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCisgICAgeworICAgICAgICBtUmVuZGVyZXItPm5vdGlm
eURldmljZUxvc3QoKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
LCBHTF9UUlVFKTsKKyAgICB9CisKKyAgICBBU1NFUlQocmVzdWx0ID09IFNfT0sgfHwgcmVzdWx0
ID09IFNfRkFMU0UpOworICAgIHNldFN0YXR1cyhyZXN1bHQgPT0gU19PSyk7CisgICAgcmV0dXJu
IGdldFN0YXR1cygpOworfQorCit2b2lkIEZlbmNlOTo6ZmluaXNoRmVuY2UoKQoreworICAgIGlm
IChtUXVlcnkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgIH0KKworICAgIHdoaWxlICghdGVzdEZlbmNlKCkpCisgICAg
eworICAgICAgICBTbGVlcCgwKTsKKyAgICB9Cit9CisKK3ZvaWQgRmVuY2U5OjpnZXRGZW5jZWl2
KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcykKK3sKKyAgICBpZiAobVF1ZXJ5ID09IE5VTEwp
CisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICB9CisKKyAgICBzd2l0Y2ggKHBuYW1lKQorICAgIHsKKyAgICAgICAgY2FzZSBHTF9GRU5D
RV9TVEFUVVNfTlY6CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEdMX05WX2ZlbmNlIHNwZWM6
CisgICAgICAgICAgICAvLyBPbmNlIHRoZSBzdGF0dXMgb2YgYSBmZW5jZSBoYXMgYmVlbiBmaW5p
c2hlZCAodmlhIEZpbmlzaEZlbmNlTlYpIG9yIHRlc3RlZCBhbmQgdGhlIHJldHVybmVkIHN0YXR1
cyBpcyBUUlVFICh2aWEgZWl0aGVyIFRlc3RGZW5jZU5WCisgICAgICAgICAgICAvLyBvciBHZXRG
ZW5jZWl2TlYgcXVlcnlpbmcgdGhlIEZFTkNFX1NUQVRVU19OViksIHRoZSBzdGF0dXMgcmVtYWlu
cyBUUlVFIHVudGlsIHRoZSBuZXh0IFNldEZlbmNlTlYgb2YgdGhlIGZlbmNlLgorICAgICAgICAg
ICAgaWYgKGdldFN0YXR1cygpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBhcmFt
c1swXSA9IEdMX1RSVUU7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1RdWVyeS0+R2V0RGF0
YShOVUxMLCAwLCAwKTsKKworICAgICAgICAgICAgaWYgKGQzZDk6OmlzRGV2aWNlTG9zdEVycm9y
KHJlc3VsdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGFyYW1zWzBdID0gR0xf
VFJVRTsKKyAgICAgICAgICAgICAgICBtUmVuZGVyZXItPm5vdGlmeURldmljZUxvc3QoKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IFNfT0sgfHwgcmVzdWx0ID09
IFNfRkFMU0UpOworICAgICAgICAgICAgc2V0U3RhdHVzKHJlc3VsdCA9PSBTX09LKTsKKyAgICAg
ICAgICAgIHBhcmFtc1swXSA9IGdldFN0YXR1cygpOworCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIEdMX0ZFTkNFX0NPTkRJVElPTl9OVjoKKyAgICAgICAgICAg
IHBhcmFtc1swXSA9IGdldENvbmRpdGlvbigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9GZW5jZTkuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9GZW5jZTku
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45ZjE3NjQxZTUxOWFiNDc4NDA3ZTgwY2NiZmQyNTM4MGEzZGNjOGJjCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L0ZlbmNlOS5oCkBAIC0wLDAgKzEsMzkgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisv
LyBGZW5jZTkuaDogRGVmaW5lcyB0aGUgcng6OkZlbmNlOSBjbGFzcyB3aGljaCBpbXBsZW1lbnRz
IHJ4OjpGZW5jZUltcGwuCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0ZFTkNFOV9IXwor
I2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfRkVOQ0U5X0hfCisKKyNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvRmVuY2VJbXBsLmgiCisKK25hbWVzcGFjZSByeAoreworY2xhc3MgUmVuZGVy
ZXI5OworCitjbGFzcyBGZW5jZTkgOiBwdWJsaWMgRmVuY2VJbXBsCit7CisgIHB1YmxpYzoKKyAg
ICBleHBsaWNpdCBGZW5jZTkocng6OlJlbmRlcmVyOSAqcmVuZGVyZXIpOworICAgIHZpcnR1YWwg
fkZlbmNlOSgpOworCisgICAgR0xib29sZWFuIGlzRmVuY2UoKTsKKyAgICB2b2lkIHNldEZlbmNl
KEdMZW51bSBjb25kaXRpb24pOworICAgIEdMYm9vbGVhbiB0ZXN0RmVuY2UoKTsKKyAgICB2b2lk
IGZpbmlzaEZlbmNlKCk7CisgICAgdm9pZCBnZXRGZW5jZWl2KEdMZW51bSBwbmFtZSwgR0xpbnQg
KnBhcmFtcyk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRmVu
Y2U5KTsKKworICAgIHJ4OjpSZW5kZXJlcjkgKm1SZW5kZXJlcjsKKyAgICBJRGlyZWN0M0RRdWVy
eTkgKm1RdWVyeTsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9GRU5D
RTlfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9JbWFnZTkuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ltYWdlOS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODUxMTk0NjM2ZDBi
MzE5NmY5YTI2NGFhYWZmMmEyMTc1N2E4OTljMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbWFnZTkuY3BwCkBA
IC0wLDAgKzEsNzMyIEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKy8vIEltYWdlOS5jcHA6IEltcGxlbWVudHMgdGhlIHJ4OjpJbWFnZTkgY2xhc3MsIHdo
aWNoIGFjdHMgYXMgdGhlIGludGVyZmFjZSB0bworLy8gdGhlIGFjdHVhbCB1bmRlcmx5aW5nIHN1
cmZhY2VzIG9mIGEgVGV4dHVyZS4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L0ltYWdlOS5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvRnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1RleHR1cmVTdG9yYWdlOS5oIgorCisjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL2dlbmVyYXRlbWlwLmgiCisKK25hbWVzcGFjZSByeAoreworCitJbWFnZTk6
OkltYWdlOSgpCit7CisgICAgbVN1cmZhY2UgPSBOVUxMOworICAgIG1SZW5kZXJlciA9IE5VTEw7
CisKKyAgICBtRDNEUG9vbCA9IEQzRFBPT0xfU1lTVEVNTUVNOworICAgIG1EM0RGb3JtYXQgPSBE
M0RGTVRfVU5LTk9XTjsKK30KKworSW1hZ2U5Ojp+SW1hZ2U5KCkKK3sKKyAgICBpZiAobVN1cmZh
Y2UpCisgICAgeworICAgICAgICBtU3VyZmFjZS0+UmVsZWFzZSgpOworICAgIH0KK30KKwordm9p
ZCBJbWFnZTk6OmdlbmVyYXRlTWlwKElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0U3VyZmFjZSwgSURp
cmVjdDNEU3VyZmFjZTkgKnNvdXJjZVN1cmZhY2UpCit7CisgICAgRDNEU1VSRkFDRV9ERVNDIGRl
c3REZXNjOworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGVzdFN1cmZhY2UtPkdldERlc2MoJmRlc3RE
ZXNjKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgRDNEU1VSRkFDRV9E
RVNDIHNvdXJjZURlc2M7CisgICAgcmVzdWx0ID0gc291cmNlU3VyZmFjZS0+R2V0RGVzYygmc291
cmNlRGVzYyk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIEFTU0VSVChz
b3VyY2VEZXNjLkZvcm1hdCA9PSBkZXN0RGVzYy5Gb3JtYXQpOworICAgIEFTU0VSVChzb3VyY2VE
ZXNjLldpZHRoID09IDEgfHwgc291cmNlRGVzYy5XaWR0aCAvIDIgPT0gZGVzdERlc2MuV2lkdGgp
OworICAgIEFTU0VSVChzb3VyY2VEZXNjLkhlaWdodCA9PSAxIHx8IHNvdXJjZURlc2MuSGVpZ2h0
IC8gMiA9PSBkZXN0RGVzYy5IZWlnaHQpOworCisgICAgRDNETE9DS0VEX1JFQ1Qgc291cmNlTG9j
a2VkID0gezB9OworICAgIHJlc3VsdCA9IHNvdXJjZVN1cmZhY2UtPkxvY2tSZWN0KCZzb3VyY2VM
b2NrZWQsIE5VTEwsIEQzRExPQ0tfUkVBRE9OTFkpOworICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CisKKyAgICBEM0RMT0NLRURfUkVDVCBkZXN0TG9ja2VkID0gezB9OworICAgIHJlc3Vs
dCA9IGRlc3RTdXJmYWNlLT5Mb2NrUmVjdCgmZGVzdExvY2tlZCwgTlVMTCwgMCk7CisgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJj
ZURhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihzb3VyY2VMb2Nr
ZWQucEJpdHMpOworICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhID0gcmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4oZGVzdExvY2tlZC5wQml0cyk7CisKKyAgICBpZiAoc291cmNlRGF0
YSAmJiBkZXN0RGF0YSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc291cmNlRGVzYy5Gb3JtYXQp
CisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEQzREZNVF9MODoKKyAgICAgICAgICAgIEdlbmVy
YXRlTWlwPEw4Pihzb3VyY2VEZXNjLldpZHRoLCBzb3VyY2VEZXNjLkhlaWdodCwgc291cmNlRGF0
YSwgc291cmNlTG9ja2VkLlBpdGNoLCBkZXN0RGF0YSwgZGVzdExvY2tlZC5QaXRjaCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEQzREZNVF9BOEw4OgorICAgICAgICAgICAg
R2VuZXJhdGVNaXA8QThMOD4oc291cmNlRGVzYy5XaWR0aCwgc291cmNlRGVzYy5IZWlnaHQsIHNv
dXJjZURhdGEsIHNvdXJjZUxvY2tlZC5QaXRjaCwgZGVzdERhdGEsIGRlc3RMb2NrZWQuUGl0Y2gp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Cisg
ICAgICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6CisgICAgICAgICAgICBHZW5lcmF0ZU1pcDxB
OFI4RzhCOD4oc291cmNlRGVzYy5XaWR0aCwgc291cmNlRGVzYy5IZWlnaHQsIHNvdXJjZURhdGEs
IHNvdXJjZUxvY2tlZC5QaXRjaCwgZGVzdERhdGEsIGRlc3RMb2NrZWQuUGl0Y2gpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKKyAgICAg
ICAgICAgIEdlbmVyYXRlTWlwPEExNkIxNkcxNlIxNkY+KHNvdXJjZURlc2MuV2lkdGgsIHNvdXJj
ZURlc2MuSGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3VyY2VMb2NrZWQuUGl0Y2gsIGRlc3REYXRhLCBk
ZXN0TG9ja2VkLlBpdGNoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRDNE
Rk1UX0EzMkIzMkczMlIzMkY6CisgICAgICAgICAgICBHZW5lcmF0ZU1pcDxBMzJCMzJHMzJSMzJG
Pihzb3VyY2VEZXNjLldpZHRoLCBzb3VyY2VEZXNjLkhlaWdodCwgc291cmNlRGF0YSwgc291cmNl
TG9ja2VkLlBpdGNoLCBkZXN0RGF0YSwgZGVzdExvY2tlZC5QaXRjaCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVzdFN1cmZhY2UtPlVubG9j
a1JlY3QoKTsKKyAgICAgICAgc291cmNlU3VyZmFjZS0+VW5sb2NrUmVjdCgpOworICAgIH0KK30K
KworSW1hZ2U5ICpJbWFnZTk6Om1ha2VJbWFnZTkoSW1hZ2UgKmltZykKK3sKKyAgICBBU1NFUlQo
SEFTX0RZTkFNSUNfVFlQRShyeDo6SW1hZ2U5KiwgaW1nKSk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PHJ4OjpJbWFnZTkqPihpbWcpOworfQorCit2b2lkIEltYWdlOTo6Z2VuZXJhdGVNaXBtYXAo
SW1hZ2U5ICpkZXN0LCBJbWFnZTkgKnNvdXJjZSkKK3sKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAq
c291cmNlU3VyZmFjZSA9IHNvdXJjZS0+Z2V0U3VyZmFjZSgpOworICAgIGlmIChzb3VyY2VTdXJm
YWNlID09IE5VTEwpCisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdFN1cmZhY2UgPSBkZXN0LT5nZXRTdXJmYWNl
KCk7CisgICAgZ2VuZXJhdGVNaXAoZGVzdFN1cmZhY2UsIHNvdXJjZVN1cmZhY2UpOworCisgICAg
ZGVzdC0+bWFya0RpcnR5KCk7Cit9CisKK3ZvaWQgSW1hZ2U5Ojpjb3B5TG9ja2FibGVTdXJmYWNl
cyhJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSkKK3sK
KyAgICBEM0RMT0NLRURfUkVDVCBzb3VyY2VMb2NrID0gezB9OworICAgIEQzRExPQ0tFRF9SRUNU
IGRlc3RMb2NrID0gezB9OworICAgIAorICAgIHNvdXJjZS0+TG9ja1JlY3QoJnNvdXJjZUxvY2ss
IE5VTEwsIDApOworICAgIGRlc3QtPkxvY2tSZWN0KCZkZXN0TG9jaywgTlVMTCwgMCk7CisgICAg
CisgICAgaWYgKHNvdXJjZUxvY2sucEJpdHMgJiYgZGVzdExvY2sucEJpdHMpCisgICAgeworICAg
ICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKKyAgICAgICAgc291cmNlLT5HZXREZXNjKCZkZXNj
KTsKKworICAgICAgICBpbnQgcm93cyA9IGQzZDk6OklzQ29tcHJlc3NlZEZvcm1hdChkZXNjLkZv
cm1hdCkgPyBkZXNjLkhlaWdodCAvIDQgOiBkZXNjLkhlaWdodDsKKyAgICAgICAgaW50IGJ5dGVz
ID0gZDNkOTo6Q29tcHV0ZVJvd1NpemUoZGVzYy5Gb3JtYXQsIGRlc2MuV2lkdGgpOworICAgICAg
ICBBU1NFUlQoYnl0ZXMgPD0gc291cmNlTG9jay5QaXRjaCAmJiBieXRlcyA8PSBkZXN0TG9jay5Q
aXRjaCk7CisKKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHJvd3M7IGkrKykKKyAgICAgICAg
eworICAgICAgICAgICAgbWVtY3B5KChjaGFyKilkZXN0TG9jay5wQml0cyArIGRlc3RMb2NrLlBp
dGNoICogaSwgKGNoYXIqKXNvdXJjZUxvY2sucEJpdHMgKyBzb3VyY2VMb2NrLlBpdGNoICogaSwg
Ynl0ZXMpOworICAgICAgICB9CisKKyAgICAgICAgc291cmNlLT5VbmxvY2tSZWN0KCk7CisgICAg
ICAgIGRlc3QtPlVubG9ja1JlY3QoKTsKKyAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwor
fQorCitib29sIEltYWdlOTo6cmVkZWZpbmUocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0xpbnQg
aW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBib29sIGZvcmNl
UmVsZWFzZSkKK3sKKyAgICBpZiAobVdpZHRoICE9IHdpZHRoIHx8CisgICAgICAgIG1IZWlnaHQg
IT0gaGVpZ2h0IHx8CisgICAgICAgIG1JbnRlcm5hbEZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCB8
fAorICAgICAgICBmb3JjZVJlbGVhc2UpCisgICAgeworICAgICAgICBtUmVuZGVyZXIgPSBSZW5k
ZXJlcjk6Om1ha2VSZW5kZXJlcjkocmVuZGVyZXIpOworCisgICAgICAgIG1XaWR0aCA9IHdpZHRo
OworICAgICAgICBtSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBp
bnRlcm5hbGZvcm1hdDsKKyAgICAgICAgLy8gY29tcHV0ZSB0aGUgZDNkIGZvcm1hdCB0aGF0IHdp
bGwgYmUgdXNlZAorICAgICAgICBtRDNERm9ybWF0ID0gbVJlbmRlcmVyLT5Db252ZXJ0VGV4dHVy
ZUludGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0KTsKKyAgICAgICAgbUFjdHVhbEZvcm1hdCA9
IGQzZDlfZ2w6OkdldEVxdWl2YWxlbnRGb3JtYXQobUQzREZvcm1hdCk7CisKKyAgICAgICAgaWYg
KG1TdXJmYWNlKQorICAgICAgICB7CisgICAgICAgICAgICBtU3VyZmFjZS0+UmVsZWFzZSgpOwor
ICAgICAgICAgICAgbVN1cmZhY2UgPSBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEltYWdlOTo6Y3Jl
YXRlU3VyZmFjZSgpCit7CisgICAgaWYobVN1cmZhY2UpCisgICAgeworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgSURpcmVjdDNEVGV4dHVyZTkgKm5ld1RleHR1cmUgPSBOVUxMOworICAg
IElEaXJlY3QzRFN1cmZhY2U5ICpuZXdTdXJmYWNlID0gTlVMTDsKKyAgICBjb25zdCBEM0RQT09M
IHBvb2xUb1VzZSA9IEQzRFBPT0xfU1lTVEVNTUVNOworICAgIGNvbnN0IEQzREZPUk1BVCBkM2RG
b3JtYXQgPSBnZXREM0RGb3JtYXQoKTsKKyAgICBBU1NFUlQoZDNkRm9ybWF0ICE9IEQzREZNVF9J
TlRaKTsgLy8gV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlIGZvciBkZXB0aCB0ZXh0dXJlcworCisg
ICAgaWYgKG1XaWR0aCAhPSAwICYmIG1IZWlnaHQgIT0gMCkKKyAgICB7CisgICAgICAgIGludCBs
ZXZlbFRvRmV0Y2ggPSAwOworICAgICAgICBHTHNpemVpIHJlcXVlc3RXaWR0aCA9IG1XaWR0aDsK
KyAgICAgICAgR0xzaXplaSByZXF1ZXN0SGVpZ2h0ID0gbUhlaWdodDsKKyAgICAgICAgZ2w6Ok1h
a2VWYWxpZFNpemUodHJ1ZSwgZ2w6OklzQ29tcHJlc3NlZChtSW50ZXJuYWxGb3JtYXQpLCAmcmVx
dWVzdFdpZHRoLCAmcmVxdWVzdEhlaWdodCwgJmxldmVsVG9GZXRjaCk7CisKKyAgICAgICAgSURp
cmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZShyZXF1ZXN0V2lkdGgsIHJl
cXVlc3RIZWlnaHQsIGxldmVsVG9GZXRjaCArIDEsIDAsIGQzZEZvcm1hdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb29sVG9Vc2UsICZuZXdU
ZXh0dXJlLCBOVUxMKTsKKworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwg
cmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgRVJSKCJDcmVhdGluZyBpbWFn
ZSBzdXJmYWNlIGZhaWxlZC4iKTsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgICAgIH0KKworICAgICAgICBuZXdUZXh0dXJlLT5HZXRTdXJmYWNl
TGV2ZWwobGV2ZWxUb0ZldGNoLCAmbmV3U3VyZmFjZSk7CisgICAgICAgIG5ld1RleHR1cmUtPlJl
bGVhc2UoKTsKKyAgICB9CisKKyAgICBtU3VyZmFjZSA9IG5ld1N1cmZhY2U7CisgICAgbURpcnR5
ID0gZmFsc2U7CisgICAgbUQzRFBvb2wgPSBwb29sVG9Vc2U7Cit9CisKK0hSRVNVTFQgSW1hZ2U5
Ojpsb2NrKEQzRExPQ0tFRF9SRUNUICpsb2NrZWRSZWN0LCBjb25zdCBSRUNUICpyZWN0KQorewor
ICAgIGNyZWF0ZVN1cmZhY2UoKTsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gRDNERVJSX0lOVkFM
SURDQUxMOworCisgICAgaWYgKG1TdXJmYWNlKQorICAgIHsKKyAgICAgICAgcmVzdWx0ID0gbVN1
cmZhY2UtPkxvY2tSZWN0KGxvY2tlZFJlY3QsIHJlY3QsIDApOworICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOworCisgICAgICAgIG1EaXJ0eSA9IHRydWU7CisgICAgfQorCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBJbWFnZTk6OnVubG9jaygpCit7CisgICAgaWYgKG1T
dXJmYWNlKQorICAgIHsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtU3VyZmFjZS0+VW5sb2Nr
UmVjdCgpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgIH0KK30KKwor
Ym9vbCBJbWFnZTk6OmlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0Cit7ICAgIAorICAgIHJldHVy
biBUZXh0dXJlU3RvcmFnZTk6OklzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoZ2V0RDNERm9ybWF0
KCkpOworfQorCitEM0RGT1JNQVQgSW1hZ2U5OjpnZXREM0RGb3JtYXQoKSBjb25zdAoreworICAg
IC8vIHRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIHRoZSBpbWFnZSBoYXNuJ3QgYmVlbiByZWRl
ZmluZWQgZmlyc3QKKyAgICAvLyB3aGljaCB3b3VsZCBiZSBhIGJ1ZyBieSB0aGUgY2FsbGVyCisg
ICAgQVNTRVJUKG1EM0RGb3JtYXQgIT0gRDNERk1UX1VOS05PV04pOworCisgICAgcmV0dXJuIG1E
M0RGb3JtYXQ7Cit9CisKK0lEaXJlY3QzRFN1cmZhY2U5ICpJbWFnZTk6OmdldFN1cmZhY2UoKQor
eworICAgIGNyZWF0ZVN1cmZhY2UoKTsKKworICAgIHJldHVybiBtU3VyZmFjZTsKK30KKwordm9p
ZCBJbWFnZTk6OnNldE1hbmFnZWRTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0
b3JhZ2UsIGludCBsZXZlbCkKK3sKKyAgICBUZXh0dXJlU3RvcmFnZTlfMkQgKnN0b3JhZ2U5ID0g
VGV4dHVyZVN0b3JhZ2U5XzJEOjptYWtlVGV4dHVyZVN0b3JhZ2U5XzJEKHN0b3JhZ2UtPmdldFN0
b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICBzZXRNYW5hZ2VkU3VyZmFjZShzdG9yYWdlOS0+Z2V0U3Vy
ZmFjZUxldmVsKGxldmVsLCBmYWxzZSkpOworfQorCit2b2lkIEltYWdlOTo6c2V0TWFuYWdlZFN1
cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50
IGxldmVsKQoreworICAgIFRleHR1cmVTdG9yYWdlOV9DdWJlICpzdG9yYWdlOSA9IFRleHR1cmVT
dG9yYWdlOV9DdWJlOjptYWtlVGV4dHVyZVN0b3JhZ2U5X0N1YmUoc3RvcmFnZS0+Z2V0U3RvcmFn
ZUluc3RhbmNlKCkpOworICAgIHNldE1hbmFnZWRTdXJmYWNlKHN0b3JhZ2U5LT5nZXRDdWJlTWFw
U3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCwgZmFs
c2UpKTsKK30KKwordm9pZCBJbWFnZTk6OnNldE1hbmFnZWRTdXJmYWNlKElEaXJlY3QzRFN1cmZh
Y2U5ICpzdXJmYWNlKQoreworICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOworICAgIHN1cmZhY2Ut
PkdldERlc2MoJmRlc2MpOworICAgIEFTU0VSVChkZXNjLlBvb2wgPT0gRDNEUE9PTF9NQU5BR0VE
KTsKKworICAgIGlmICgoR0xzaXplaSlkZXNjLldpZHRoID09IG1XaWR0aCAmJiAoR0xzaXplaSlk
ZXNjLkhlaWdodCA9PSBtSGVpZ2h0KQorICAgIHsKKyAgICAgICAgaWYgKG1TdXJmYWNlKQorICAg
ICAgICB7CisgICAgICAgICAgICBjb3B5TG9ja2FibGVTdXJmYWNlcyhzdXJmYWNlLCBtU3VyZmFj
ZSk7CisgICAgICAgICAgICBtU3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICB9CisKKyAgICAg
ICAgbVN1cmZhY2UgPSBzdXJmYWNlOworICAgICAgICBtRDNEUG9vbCA9IGRlc2MuUG9vbDsKKyAg
ICB9Cit9CisKK2Jvb2wgSW1hZ2U5Ojp1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlMkQgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgQVNTRVJUKGdldFN1cmZhY2Uo
KSAhPSBOVUxMKTsKKyAgICBUZXh0dXJlU3RvcmFnZTlfMkQgKnN0b3JhZ2U5ID0gVGV4dHVyZVN0
b3JhZ2U5XzJEOjptYWtlVGV4dHVyZVN0b3JhZ2U5XzJEKHN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0
YW5jZSgpKTsKKyAgICByZXR1cm4gdXBkYXRlU3VyZmFjZShzdG9yYWdlOS0+Z2V0U3VyZmFjZUxl
dmVsKGxldmVsLCB0cnVlKSwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7Cit9CisK
K2Jvb2wgSW1hZ2U5Ojp1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAq
c3RvcmFnZSwgaW50IGZhY2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgQVNTRVJUKGdldFN1cmZh
Y2UoKSAhPSBOVUxMKTsKKyAgICBUZXh0dXJlU3RvcmFnZTlfQ3ViZSAqc3RvcmFnZTkgPSBUZXh0
dXJlU3RvcmFnZTlfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlOV9DdWJlKHN0b3JhZ2UtPmdldFN0
b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICByZXR1cm4gdXBkYXRlU3VyZmFjZShzdG9yYWdlOS0+Z2V0
Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZSwgbGV2
ZWwsIHRydWUpLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKK30KKworYm9vbCBJ
bWFnZTk6OnVwZGF0ZVN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJmYWNlLCBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkK
K3sKKyAgICBpZiAoIWRlc3RTdXJmYWNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqc291cmNlU3VyZmFjZSA9IGdldFN1cmZhY2UoKTsKKworICAgIGlm
IChzb3VyY2VTdXJmYWNlICYmIHNvdXJjZVN1cmZhY2UgIT0gZGVzdFN1cmZhY2UpCisgICAgewor
ICAgICAgICBSRUNUIHJlY3Q7CisgICAgICAgIHJlY3QubGVmdCA9IHhvZmZzZXQ7CisgICAgICAg
IHJlY3QudG9wID0geW9mZnNldDsKKyAgICAgICAgcmVjdC5yaWdodCA9IHhvZmZzZXQgKyB3aWR0
aDsKKyAgICAgICAgcmVjdC5ib3R0b20gPSB5b2Zmc2V0ICsgaGVpZ2h0OworCisgICAgICAgIFBP
SU5UIHBvaW50ID0ge3JlY3QubGVmdCwgcmVjdC50b3B9OworCisgICAgICAgIElEaXJlY3QzRERl
dmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICAgICAgaWYgKG1E
M0RQb29sID09IEQzRFBPT0xfTUFOQUdFRCkKKyAgICAgICAgeworICAgICAgICAgICAgRDNEU1VS
RkFDRV9ERVNDIGRlc2M7CisgICAgICAgICAgICBzb3VyY2VTdXJmYWNlLT5HZXREZXNjKCZkZXNj
KTsKKworICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmYgPSAwOworICAgICAgICAg
ICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZU9mZnNjcmVlblBsYWluU3VyZmFjZShk
ZXNjLldpZHRoLCBkZXNjLkhlaWdodCwgZGVzYy5Gb3JtYXQsIEQzRFBPT0xfU1lTVEVNTUVNLCAm
c3VyZiwgTlVMTCk7CisKKyAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb3B5TG9ja2FibGVTdXJmYWNlcyhzdXJmLCBzb3Vy
Y2VTdXJmYWNlKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPlVwZGF0ZVN1cmZh
Y2Uoc3VyZiwgJnJlY3QsIGRlc3RTdXJmYWNlLCAmcG9pbnQpOworICAgICAgICAgICAgICAgIEFT
U0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgICAgICAgICAgc3VyZi0+UmVsZWFzZSgp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAg
ICAgICAgICAgLy8gVXBkYXRlU3VyZmFjZTogc291cmNlIG11c3QgYmUgU1lTVEVNTUVNLCBkZXN0
IG11c3QgYmUgREVGQVVMVCBwb29scyAKKyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2
aWNlLT5VcGRhdGVTdXJmYWNlKHNvdXJjZVN1cmZhY2UsICZyZWN0LCBkZXN0U3VyZmFjZSwgJnBv
aW50KTsKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBkZXN0U3VyZmFjZS0+UmVsZWFzZSgpOworICAgIHJldHVybiB0cnVlOwor
fQorCisvLyBTdG9yZSB0aGUgcGl4ZWwgcmVjdGFuZ2xlIGRlc2lnbmF0ZWQgYnkgeG9mZnNldCx5
b2Zmc2V0LHdpZHRoLGhlaWdodCB3aXRoIHBpeGVscyBzdG9yZWQgYXMgZm9ybWF0L3R5cGUgYXQg
aW5wdXQKKy8vIGludG8gdGhlIHRhcmdldCBwaXhlbCByZWN0YW5nbGUuCit2b2lkIEltYWdlOTo6
bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICppbnB1dCkKK3sKKyAgICBSRUNUIGxvY2tSZWN0ID0KKyAgICB7CisgICAg
ICAgIHhvZmZzZXQsIHlvZmZzZXQsCisgICAgICAgIHhvZmZzZXQgKyB3aWR0aCwgeW9mZnNldCAr
IGhlaWdodAorICAgIH07CisKKyAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7CisgICAgSFJFU1VM
VCByZXN1bHQgPSBsb2NrKCZsb2NrZWQsICZsb2NrUmVjdCk7CisgICAgaWYgKEZBSUxFRChyZXN1
bHQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworCisgICAgR0xzaXplaSBpbnB1
dFBpdGNoID0gZ2w6OkNvbXB1dGVQaXRjaCh3aWR0aCwgbUludGVybmFsRm9ybWF0LCB1bnBhY2tB
bGlnbm1lbnQpOworCisgICAgc3dpdGNoIChtSW50ZXJuYWxGb3JtYXQpCisgICAgeworICAgICAg
Y2FzZSBHTF9BTFBIQThfRVhUOgorICAgICAgICBpZiAoZ2w6OnN1cHBvcnRzU1NFMigpKQorICAg
ICAgICB7CisgICAgICAgICAgICBsb2FkQWxwaGFEYXRhVG9CR1JBU1NFMih3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbG9hZEFscGhhRGF0YVRv
QkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2Nr
ZWQucEJpdHMpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MVU1J
TkFOQ0U4X0VYVDoKKyAgICAgICAgbG9hZEx1bWluYW5jZURhdGFUb05hdGl2ZU9yQkdSQSh3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMs
IGdldEQzREZvcm1hdCgpID09IEQzREZNVF9MOCk7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9BTFBIQTMyRl9FWFQ6CisgICAgICAgIGxvYWRBbHBoYUZsb2F0RGF0YVRvUkdCQSh3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMp
OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMzJGX0VYVDoKKyAgICAg
ICAgbG9hZEx1bWluYW5jZUZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNo
LCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOworICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfQUxQSEExNkZfRVhUOgorICAgICAgICBsb2FkQWxwaGFIYWxmRmxvYXREYXRh
VG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxv
Y2tlZC5wQml0cyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UxNkZf
RVhUOgorICAgICAgICBsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOworICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOF9BTFBIQThfRVhUOgorICAgICAg
ICBsb2FkTHVtaW5hbmNlQWxwaGFEYXRhVG9OYXRpdmVPckJHUkEod2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzLCBnZXREM0RGb3JtYXQo
KSA9PSBEM0RGTVRfQThMOCk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MVU1JTkFO
Q0VfQUxQSEEzMkZfRVhUOgorICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGFUb1JH
QkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2Vk
LnBCaXRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2
Rl9FWFQ6CisgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGFUb1JHQkEod2lk
dGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRz
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JHQjhfT0VTOgorICAgICAgICBsb2Fk
UkdCVUJ5dGVEYXRhVG9CR1JYKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2Nr
ZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9S
R0I1NjU6CisgICAgICAgIGxvYWRSR0I1NjVEYXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6CisgICAgICAgIGlmIChnbDo6c3VwcG9ydHNTU0Uy
KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhVG9CR1JBU1NFMih3
aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJp
dHMpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbG9h
ZFJHQkFVQnl0ZURhdGFUb0JHUkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxv
Y2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfUkdCQTQ6CisgICAgICAgIGxvYWRSR0JBNDQ0NERhdGFUb0JHUkEod2lkdGgs
IGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JHQjVfQTE6CisgICAgICAgIGxvYWRSR0JB
NTU1MURhdGFUb0JHUkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5Q
aXRjaCwgbG9ja2VkLnBCaXRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JHUkE4
X0VYVDoKKyAgICAgICAgbG9hZEJHUkFEYXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAgIGJyZWFrOwor
ICAgICAgLy8gZmxvYXQgdGV4dHVyZXMgYXJlIGNvbnZlcnRlZCB0byBSR0JBLCBub3QgQkdSQSwg
YXMgdGhleSdyZSBzdG9yZWQgdGhhdCB3YXkgaW4gRDNECisgICAgICBjYXNlIEdMX1JHQjMyRl9F
WFQ6CisgICAgICAgIGxvYWRSR0JGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX1JHQjE2Rl9FWFQ6CisgICAgICAgIGxvYWRSR0JIYWxmRmxvYXREYXRh
VG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxv
Y2tlZC5wQml0cyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9SR0JBMzJGX0VYVDoK
KyAgICAgICAgbG9hZFJHQkFGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX1JHQkExNkZfRVhUOgorICAgICAgICBsb2FkUkdCQUhhbGZGbG9hdERhdGFU
b1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9j
a2VkLnBCaXRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OyAKKyAgICB9CisKKyAgICB1bmxvY2soKTsKK30KKwordm9pZCBJbWFnZTk6OmxvYWRDb21wcmVz
c2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAq
aW5wdXQpCit7CisgICAgQVNTRVJUKHhvZmZzZXQgJSA0ID09IDApOworICAgIEFTU0VSVCh5b2Zm
c2V0ICUgNCA9PSAwKTsKKworICAgIFJFQ1QgbG9ja1JlY3QgPSB7CisgICAgICAgIHhvZmZzZXQs
IHlvZmZzZXQsCisgICAgICAgIHhvZmZzZXQgKyB3aWR0aCwgeW9mZnNldCArIGhlaWdodAorICAg
IH07CisKKyAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7CisgICAgSFJFU1VMVCByZXN1bHQgPSBs
b2NrKCZsb2NrZWQsICZsb2NrUmVjdCk7CisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdMc2l6ZWkgaW5wdXRTaXplID0gZ2w6OkNv
bXB1dGVDb21wcmVzc2VkU2l6ZSh3aWR0aCwgaGVpZ2h0LCBtSW50ZXJuYWxGb3JtYXQpOworICAg
IEdMc2l6ZWkgaW5wdXRQaXRjaCA9IGdsOjpDb21wdXRlQ29tcHJlc3NlZFBpdGNoKHdpZHRoLCBt
SW50ZXJuYWxGb3JtYXQpOworICAgIGludCByb3dzID0gaW5wdXRTaXplIC8gaW5wdXRQaXRjaDsK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7ICsraSkKKyAgICB7CisgICAgICAgIG1lbWNw
eSgodm9pZCopKChCWVRFKilsb2NrZWQucEJpdHMgKyBpICogbG9ja2VkLlBpdGNoKSwgKHZvaWQq
KSgoQllURSopaW5wdXQgKyBpICogaW5wdXRQaXRjaCksIGlucHV0UGl0Y2gpOworICAgIH0KKwor
ICAgIHVubG9jaygpOworfQorCisvLyBUaGlzIGltcGxlbWVudHMgZ2xDb3B5VGV4W1N1Yl1JbWFn
ZTJEIGZvciBub24tcmVuZGVyYWJsZSBpbnRlcm5hbCB0ZXh0dXJlIGZvcm1hdHMgYW5kIGluY29t
cGxldGUgdGV4dHVyZXMKK3ZvaWQgSW1hZ2U5Ojpjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBn
bDo6RnJhbWVidWZmZXIgKnNvdXJjZSkKK3sKKyAgICBSZW5kZXJUYXJnZXQ5ICpyZW5kZXJUYXJn
ZXQgPSBOVUxMOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gTlVMTDsKKyAgICBn
bDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoMCk7
CisKKyAgICBpZiAoY29sb3JidWZmZXIpCisgICAgeworICAgICAgICByZW5kZXJUYXJnZXQgPSBS
ZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShjb2xvcmJ1ZmZlci0+Z2V0UmVuZGVyVGFy
Z2V0KCkpOworICAgIH0KKyAgICAKKyAgICBpZiAocmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAg
ICAgc3VyZmFjZSA9IHJlbmRlclRhcmdldC0+Z2V0U3VyZmFjZSgpOworICAgIH0KKworICAgIGlm
ICghc3VyZmFjZSkKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSBy
ZW5kZXIgdGFyZ2V0LiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgIH0KKworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+
Z2V0RGV2aWNlKCk7CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0RGF0YSA9
IE5VTEw7CisgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2NyaXB0aW9uOworICAgIHN1cmZhY2UtPkdl
dERlc2MoJmRlc2NyaXB0aW9uKTsKKyAgICAKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+
Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRlc2NyaXB0aW9uLldpZHRoLCBkZXNjcmlwdGlv
bi5IZWlnaHQsIGRlc2NyaXB0aW9uLkZvcm1hdCwgRDNEUE9PTF9TWVNURU1NRU0sICZyZW5kZXJU
YXJnZXREYXRhLCBOVUxMKTsKKworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAg
ICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBtYXRjaGluZyBkZXN0aW5hdGlvbiBzdXJmYWNlLiIp
OworICAgICAgICBzdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorCisgICAgcmVzdWx0ID0gZGV2aWNlLT5HZXRSZW5k
ZXJUYXJnZXREYXRhKHN1cmZhY2UsIHJlbmRlclRhcmdldERhdGEpOworCisgICAgaWYgKEZBSUxF
RChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJHZXRSZW5kZXJUYXJnZXREYXRhIHVuZXhw
ZWN0ZWRseSBmYWlsZWQuIik7CisgICAgICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsK
KyAgICAgICAgc3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KKworICAgIFJFQ1Qgc291cmNlUmVjdCA9IHt4LCB5LCB4
ICsgd2lkdGgsIHkgKyBoZWlnaHR9OworICAgIFJFQ1QgZGVzdFJlY3QgPSB7eG9mZnNldCwgeW9m
ZnNldCwgeG9mZnNldCArIHdpZHRoLCB5b2Zmc2V0ICsgaGVpZ2h0fTsKKworICAgIEQzRExPQ0tF
RF9SRUNUIHNvdXJjZUxvY2sgPSB7MH07CisgICAgcmVzdWx0ID0gcmVuZGVyVGFyZ2V0RGF0YS0+
TG9ja1JlY3QoJnNvdXJjZUxvY2ssICZzb3VyY2VSZWN0LCAwKTsKKworICAgIGlmIChGQUlMRUQo
cmVzdWx0KSkKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIGxvY2sgdGhlIHNvdXJjZSBz
dXJmYWNlIChyZWN0YW5nbGUgbWlnaHQgYmUgaW52YWxpZCkuIik7CisgICAgICAgIHJlbmRlclRh
cmdldERhdGEtPlJlbGVhc2UoKTsKKyAgICAgICAgc3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KKworICAgIEQzRExP
Q0tFRF9SRUNUIGRlc3RMb2NrID0gezB9OworICAgIHJlc3VsdCA9IGxvY2soJmRlc3RMb2NrLCAm
ZGVzdFJlY3QpOworICAgIAorICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAg
IEVSUigiRmFpbGVkIHRvIGxvY2sgdGhlIGRlc3RpbmF0aW9uIHN1cmZhY2UgKHJlY3RhbmdsZSBt
aWdodCBiZSBpbnZhbGlkKS4iKTsKKyAgICAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+VW5sb2NrUmVj
dCgpOworICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7CisgICAgICAgIHN1cmZh
Y2UtPlJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICB9CisKKyAgICBpZiAoZGVzdExvY2sucEJpdHMgJiYgc291cmNlTG9jay5wQml0cykK
KyAgICB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9ICh1bnNpZ25lZCBjaGFyKilz
b3VyY2VMb2NrLnBCaXRzOworICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gKHVuc2lnbmVk
IGNoYXIqKWRlc3RMb2NrLnBCaXRzOworCisgICAgICAgIHN3aXRjaCAoZGVzY3JpcHRpb24uRm9y
bWF0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6CisgICAgICAg
ICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6CisgICAgICAgICAgICBzd2l0Y2goZ2V0RDNERm9ybWF0
KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4Ogor
ICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKKyAgICAgICAgICAgICAgICBmb3Io
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCA0ICogd2lkdGgpOworCisgICAgICAgICAg
ICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOworICAgICAgICAgICAgICAgICAg
ICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfTDg6CisgICAgICAgICAgICAg
ICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeF0gPSBzb3VyY2Vb
eCAqIDQgKyAyXTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
IHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOworICAgICAgICAgICAgICAgICAgICBkZXN0ICs9
IGRlc3RMb2NrLlBpdGNoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQThMODoKKyAgICAgICAgICAgICAgICBmb3Io
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICogMiArIDBdID0gc291cmNl
W3ggKiA0ICsgMl07CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKiAyICsgMV0gPSBz
b3VyY2VbeCAqIDQgKyAzXTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOworICAgICAgICAgICAgICAgICAgICBk
ZXN0ICs9IGRlc3RMb2NrLlBpdGNoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNI
QUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2Fz
ZSBEM0RGTVRfUjVHNkI1OgorICAgICAgICAgICAgc3dpdGNoKGdldEQzREZvcm1hdCgpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKKyAgICAgICAg
ICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hv
cnQgcmdiID0gKCh1bnNpZ25lZCBzaG9ydCopc291cmNlKVt4XTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGNoYXIgcmVkID0gKHJnYiAmIDB4RjgwMCkgPj4gODsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZ3JlZW4gPSAocmdiICYgMHgwN0UwKSA+PiAz
OworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBibHVlID0gKHJnYiAmIDB4
MDAxRikgPDwgMzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCArIDBdID0gYmx1ZSB8
IChibHVlID4+IDUpOworICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICsgMV0gPSBncmVl
biB8IChncmVlbiA+PiA2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCArIDJdID0g
cmVkIHwgKHJlZCA+PiA1KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCArIDNdID0g
MHhGRjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHNvdXJj
ZSArPSBzb3VyY2VMb2NrLlBpdGNoOworICAgICAgICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RM
b2NrLlBpdGNoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBEM0RGTVRfTDg6CisgICAgICAgICAgICAgICAgZm9yKGludCB5ID0g
MDsgeSA8IGhlaWdodDsgeSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVkID0gc291cmNlW3ggKiAy
ICsgMV0gJiAweEY4OworICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4XSA9IHJlZCB8IChy
ZWQgPj4gNSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBz
b3VyY2UgKz0gc291cmNlTG9jay5QaXRjaDsKKyAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBk
ZXN0TG9jay5QaXRjaDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRDNERk1U
X0ExUjVHNUI1OgorICAgICAgICAgICAgc3dpdGNoKGdldEQzREZvcm1hdCgpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKKyAgICAgICAgICAgICAg
ICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYXJn
YiA9ICgodW5zaWduZWQgc2hvcnQqKXNvdXJjZSlbeF07CisgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBjaGFyIHJlZCA9IChhcmdiICYgMHg3QzAwKSA+PiA3OworICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgY2hhciBncmVlbiA9IChhcmdiICYgMHgwM0UwKSA+PiAyOwor
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBibHVlID0gKGFyZ2IgJiAweDAw
MUYpIDw8IDM7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKyAwXSA9IGJsdWUgfCAo
Ymx1ZSA+PiA1KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCArIDFdID0gZ3JlZW4g
fCAoZ3JlZW4gPj4gNSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKyAyXSA9IHJl
ZCB8IChyZWQgPj4gNSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKyAzXSA9IDB4
RkY7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBzb3VyY2Ug
Kz0gc291cmNlTG9jay5QaXRjaDsKKyAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9j
ay5QaXRjaDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgorICAgICAgICAgICAgICAgIGZvcihpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhcmdiID0gKCh1bnNp
Z25lZCBzaG9ydCopc291cmNlKVt4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIgcmVkID0gKGFyZ2IgJiAweDdDMDApID4+IDc7CisgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBjaGFyIGdyZWVuID0gKGFyZ2IgJiAweDAzRTApID4+IDI7CisgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJsdWUgPSAoYXJnYiAmIDB4MDAxRikgPDwgMzsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWxwaGEgPSAoc2lnbmVkIHNo
b3J0KWFyZ2IgPj4gMTU7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKyAwXSA9IGJs
dWUgfCAoYmx1ZSA+PiA1KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCArIDFdID0g
Z3JlZW4gfCAoZ3JlZW4gPj4gNSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKyAy
XSA9IHJlZCB8IChyZWQgPj4gNSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKyAz
XSA9IGFscGhhOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
c291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7CisgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0g
ZGVzdExvY2suUGl0Y2g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEQzREZNVF9MODoKKyAgICAgICAgICAgICAgICBmb3IoaW50
IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZWQgPSBzb3VyY2Vb
eCAqIDIgKyAxXSAmIDB4N0M7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3hdID0gKHJl
ZCA8PCAxKSB8IChyZWQgPj4gNCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5QaXRjaDsKKyAgICAgICAgICAgICAgICAg
ICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4TDg6CisgICAgICAgICAg
ICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIg
cmVkID0gc291cmNlW3ggKiAyICsgMV0gJiAweDdDOworICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzdFt4ICogMiArIDBdID0gKHJlZCA8PCAxKSB8IChyZWQgPj4gNCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBkZXN0W3ggKiAyICsgMV0gPSAoc2lnbmVkIGNoYXIpc291cmNlW3ggKiAyICsg
MV0gPj4gNzsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHNv
dXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOworICAgICAgICAgICAgICAgICAgICBkZXN0ICs9IGRl
c3RMb2NrLlBpdGNoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1bmxvY2so
KTsKKyAgICByZW5kZXJUYXJnZXREYXRhLT5VbmxvY2tSZWN0KCk7CisKKyAgICByZW5kZXJUYXJn
ZXREYXRhLT5SZWxlYXNlKCk7CisgICAgc3VyZmFjZS0+UmVsZWFzZSgpOworCisgICAgbURpcnR5
ID0gdHJ1ZTsKK30KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbWFn
ZTkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
OS9JbWFnZTkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZmJiY2EzMTI0M2QyYWM0N2Q1NzQ4ZDVhMWM3ZmFmN2Q1
Y2E4MjA2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ltYWdlOS5oCkBAIC0wLDAgKzEsNzkgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKy8vIEltYWdlOS5oOiBEZWZpbmVzIHRoZSByeDo6SW1hZ2U5IGNsYXNzLCB3
aGljaCBhY3RzIGFzIHRoZSBpbnRlcmZhY2UgdG8KKy8vIHRoZSBhY3R1YWwgdW5kZXJseWluZyBz
dXJmYWNlcyBvZiBhIFRleHR1cmUuCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0lNQUdF
OV9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfSU1BR0U5X0hfCisKKyNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvSW1hZ2UuaCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKwor
bmFtZXNwYWNlIGdsCit7CitjbGFzcyBGcmFtZWJ1ZmZlcjsKK30KKworbmFtZXNwYWNlIHJ4Cit7
CitjbGFzcyBSZW5kZXJlcjsKK2NsYXNzIFJlbmRlcmVyOTsKK2NsYXNzIFRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlMkQ7CitjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU7CisKK2NsYXNz
IEltYWdlOSA6IHB1YmxpYyBJbWFnZQoreworICBwdWJsaWM6CisgICAgSW1hZ2U5KCk7CisgICAg
fkltYWdlOSgpOworCisgICAgc3RhdGljIEltYWdlOSAqbWFrZUltYWdlOShJbWFnZSAqaW1nKTsK
KworICAgIHN0YXRpYyB2b2lkIGdlbmVyYXRlTWlwbWFwKEltYWdlOSAqZGVzdCwgSW1hZ2U5ICpz
b3VyY2UpOworICAgIHN0YXRpYyB2b2lkIGdlbmVyYXRlTWlwKElEaXJlY3QzRFN1cmZhY2U5ICpk
ZXN0U3VyZmFjZSwgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZVN1cmZhY2UpOworICAgIHN0YXRp
YyB2b2lkIGNvcHlMb2NrYWJsZVN1cmZhY2VzKElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0LCBJRGly
ZWN0M0RTdXJmYWNlOSAqc291cmNlKTsKKworICAgIHZpcnR1YWwgYm9vbCByZWRlZmluZShSZW5k
ZXJlciAqcmVuZGVyZXIsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgYm9vbCBmb3JjZVJlbGVhc2UpOworCisgICAgdmlydHVhbCBib29sIGlzUmVu
ZGVyYWJsZUZvcm1hdCgpIGNvbnN0OworICAgIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25z
dDsKKworICAgIHZpcnR1YWwgYm9vbCBpc0RpcnR5KCkgY29uc3Qge3JldHVybiBtU3VyZmFjZSAm
JiBtRGlydHk7fQorICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRTdXJmYWNlKCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0TWFuYWdlZFN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAq
c3RvcmFnZSwgaW50IGxldmVsKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWFuYWdlZFN1cmZhY2Uo
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVs
KTsKKyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlU3Vy
ZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0KTsKKworICAgIHZpcnR1YWwgdm9pZCBsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAg
ICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQpOworICAgIHZp
cnR1YWwgdm9pZCBsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgY29w
eShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgZ2w6OkZyYW1lYnVmZmVyICpzb3VyY2UpOworCisgIHBy
aXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEltYWdlOSk7CisKKyAgICB2b2lk
IGNyZWF0ZVN1cmZhY2UoKTsKKyAgICB2b2lkIHNldE1hbmFnZWRTdXJmYWNlKElEaXJlY3QzRFN1
cmZhY2U5ICpzdXJmYWNlKTsKKyAgICBib29sIHVwZGF0ZVN1cmZhY2UoSURpcmVjdDNEU3VyZmFj
ZTkgKmRlc3QsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KTsKKworICAgIEhSRVNVTFQgbG9jayhEM0RMT0NLRURfUkVDVCAqbG9ja2Vk
UmVjdCwgY29uc3QgUkVDVCAqcmVjdCk7CisgICAgdm9pZCB1bmxvY2soKTsKKyAgICAKKyAgICBS
ZW5kZXJlcjkgKm1SZW5kZXJlcjsKKworICAgIEQzRFBPT0wgbUQzRFBvb2w7ICAgLy8gY2FuIG9u
bHkgYmUgRDNEUE9PTF9TWVNURU1NRU0gb3IgRDNEUE9PTF9NQU5BR0VEIHNpbmNlIGl0IG5lZWRz
IHRvIGJlIGxvY2thYmxlLgorICAgIEQzREZPUk1BVCBtRDNERm9ybWF0OworCisgICAgSURpcmVj
dDNEU3VyZmFjZTkgKm1TdXJmYWNlOworfTsKK30KKworI2VuZGlmICAgLy8gTElCR0xFU1YyX1JF
TkRFUkVSX0lNQUdFOV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0luZGV4QnVmZmVyOS5jcHAgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW5kZXhCdWZmZXI5LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43Y2I1ZDEzYTE4Yjc0ODAwYzBjYTQzZjc4YmQ4MTVlOTQ5OTlkNDFiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L0luZGV4QnVmZmVyOS5jcHAKQEAgLTAsMCArMSwyMDcgQEAKKyNpbmNsdWRlICJw
cmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gSW5kZXhmZmVyOS5jcHA6IERl
ZmluZXMgdGhlIEQzRDkgSW5kZXhCdWZmZXIgaW1wbGVtZW50YXRpb24uCisKKyNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbmRleEJ1ZmZlcjkuaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaCIKKworbmFtZXNwYWNlIHJ4Cit7CisKK0luZGV4
QnVmZmVyOTo6SW5kZXhCdWZmZXI5KFJlbmRlcmVyOSAqY29uc3QgcmVuZGVyZXIpIDogbVJlbmRl
cmVyKHJlbmRlcmVyKQoreworICAgIG1JbmRleEJ1ZmZlciA9IE5VTEw7CisgICAgbUJ1ZmZlclNp
emUgPSAwOworICAgIG1JbmRleFR5cGUgPSAwOworICAgIG1EeW5hbWljID0gZmFsc2U7Cit9CisK
K0luZGV4QnVmZmVyOTo6fkluZGV4QnVmZmVyOSgpCit7CisgICAgaWYgKG1JbmRleEJ1ZmZlcikK
KyAgICB7CisgICAgICAgIG1JbmRleEJ1ZmZlci0+UmVsZWFzZSgpOworICAgICAgICBtSW5kZXhC
dWZmZXIgPSBOVUxMOworICAgIH0KK30KKworYm9vbCBJbmRleEJ1ZmZlcjk6OmluaXRpYWxpemUo
dW5zaWduZWQgaW50IGJ1ZmZlclNpemUsIEdMZW51bSBpbmRleFR5cGUsIGJvb2wgZHluYW1pYykK
K3sKKyAgICBpZiAobUluZGV4QnVmZmVyKQorICAgIHsKKyAgICAgICAgbUluZGV4QnVmZmVyLT5S
ZWxlYXNlKCk7CisgICAgICAgIG1JbmRleEJ1ZmZlciA9IE5VTEw7CisgICAgfQorCisgICAgdXBk
YXRlU2VyaWFsKCk7CisKKyAgICBpZiAoYnVmZmVyU2l6ZSA+IDApCisgICAgeworICAgICAgICBE
M0RGT1JNQVQgZm9ybWF0OworICAgICAgICBpZiAoaW5kZXhUeXBlID09IEdMX1VOU0lHTkVEX1NI
T1JUIHx8IGluZGV4VHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQorICAgICAgICB7CisgICAgICAg
ICAgICBmb3JtYXQgPSBEM0RGTVRfSU5ERVgxNjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm
IChpbmRleFR5cGUgPT0gR0xfVU5TSUdORURfSU5UKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAobVJlbmRlcmVyLT5nZXQzMkJpdEluZGV4U3VwcG9ydCgpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGZvcm1hdCA9IEQzREZNVF9JTkRFWDMyOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEVSUigiQXR0ZW1w
dGVkIHRvIGNyZWF0ZSBhIDMyLWJpdCBpbmRleCBidWZmZXIgYnV0IHJlbmRlcmVyIGRvZXMgbm90
IHN1cHBvcnQgMzItYml0IGluZGljZXMuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAg
ICAgICAgICAgRVJSKCJJbnZhbGlkIGluZGV4IHR5cGUgJXUuIiwgaW5kZXhUeXBlKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIERXT1JEIHVzYWdlRmxh
Z3MgPSBEM0RVU0FHRV9XUklURU9OTFk7CisgICAgICAgIGlmIChkeW5hbWljKQorICAgICAgICB7
CisgICAgICAgICAgICB1c2FnZUZsYWdzIHw9IEQzRFVTQUdFX0RZTkFNSUM7CisgICAgICAgIH0K
KworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1SZW5kZXJlci0+Y3JlYXRlSW5kZXhCdWZmZXIo
YnVmZmVyU2l6ZSwgdXNhZ2VGbGFncywgZm9ybWF0LCAmbUluZGV4QnVmZmVyKTsKKyAgICAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkZhaWxlZCB0
byBjcmVhdGUgYW4gaW5kZXggYnVmZmVyIG9mIHNpemUgJXUsIHJlc3VsdDogMHglMDh4LiIsIG1C
dWZmZXJTaXplLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorCisgICAgbUJ1ZmZlclNpemUgPSBidWZmZXJTaXplOworICAgIG1JbmRleFR5cGUg
PSBpbmRleFR5cGU7CisgICAgbUR5bmFtaWMgPSBkeW5hbWljOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK0luZGV4QnVmZmVyOSAqSW5kZXhCdWZmZXI5OjptYWtlSW5kZXhCdWZmZXI5KEluZGV4
QnVmZmVyICppbmRleEJ1ZmZlcikKK3sKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShJbmRl
eEJ1ZmZlcjkqLCBpbmRleEJ1ZmZlcikpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbmRleEJ1
ZmZlcjkqPihpbmRleEJ1ZmZlcik7Cit9CisKK2Jvb2wgSW5kZXhCdWZmZXI5OjptYXBCdWZmZXIo
dW5zaWduZWQgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IHNpemUsIHZvaWQqKiBvdXRNYXBwZWRN
ZW1vcnkpCit7CisgICAgaWYgKG1JbmRleEJ1ZmZlcikKKyAgICB7CisgICAgICAgIERXT1JEIGxv
Y2tGbGFncyA9IG1EeW5hbWljID8gRDNETE9DS19OT09WRVJXUklURSA6IDA7CisKKyAgICAgICAg
dm9pZCAqbWFwUHRyID0gTlVMTDsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtSW5kZXhCdWZm
ZXItPkxvY2sob2Zmc2V0LCBzaXplLCAmbWFwUHRyLCBsb2NrRmxhZ3MpOworICAgICAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiSW5kZXggYnVmZmVy
IGxvY2sgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgICpvdXRNYXBwZWRNZW1vcnkgPSBtYXBQ
dHI7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICBFUlIoIkluZGV4IGJ1ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSW5kZXhCdWZmZXI5Ojp1bm1hcEJ1ZmZlcigpCit7Cisg
ICAgaWYgKG1JbmRleEJ1ZmZlcikKKyAgICB7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUlu
ZGV4QnVmZmVyLT5VbmxvY2soKTsKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAg
ICB7CisgICAgICAgICAgICBFUlIoIkluZGV4IGJ1ZmZlciB1bmxvY2sgZmFpbGVkIHdpdGggZXJy
b3IgMHglMDh4IiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICBFUlIoIkluZGV4IGJ1ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9Cit9CisKK0dMZW51bSBJbmRleEJ1ZmZlcjk6OmdldEluZGV4VHlwZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1JbmRleFR5cGU7Cit9CisKK3Vuc2lnbmVkIGludCBJbmRleEJ1
ZmZlcjk6OmdldEJ1ZmZlclNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtQnVmZmVyU2l6ZTsK
K30KKworYm9vbCBJbmRleEJ1ZmZlcjk6OnNldFNpemUodW5zaWduZWQgaW50IGJ1ZmZlclNpemUs
IEdMZW51bSBpbmRleFR5cGUpCit7CisgICAgaWYgKGJ1ZmZlclNpemUgPiBtQnVmZmVyU2l6ZSB8
fCBpbmRleFR5cGUgIT0gbUluZGV4VHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbml0aWFs
aXplKGJ1ZmZlclNpemUsIGluZGV4VHlwZSwgbUR5bmFtaWMpOworICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgSW5kZXhCdWZmZXI5
OjpkaXNjYXJkKCkKK3sKKyAgICBpZiAobUluZGV4QnVmZmVyKQorICAgIHsKKyAgICAgICAgdm9p
ZCAqZHVtbXk7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0OworCisgICAgICAgIHJlc3VsdCA9IG1J
bmRleEJ1ZmZlci0+TG9jaygwLCAxLCAmZHVtbXksIEQzRExPQ0tfRElTQ0FSRCk7CisgICAgICAg
IGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJEaXNjYXJk
IGxvY2sgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdCA9IG1JbmRleEJ1ZmZlci0+
VW5sb2NrKCk7CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAg
ICAgICAgRVJSKCJEaXNjYXJkIHVubG9jayBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgiLCByZXN1
bHQpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEVSUigiSW5kZXggYnVm
ZmVyIG5vdCBpbml0aWFsaXplZC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30K
KworRDNERk9STUFUIEluZGV4QnVmZmVyOTo6Z2V0SW5kZXhGb3JtYXQoKSBjb25zdAoreworICAg
IHN3aXRjaCAobUluZGV4VHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6
ICAgIHJldHVybiBEM0RGTVRfSU5ERVgxNjsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6
ICAgcmV0dXJuIEQzREZNVF9JTkRFWDE2OworICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6ICAg
ICByZXR1cm4gRDNERk1UX0lOREVYMzI7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAg
IHJldHVybiBEM0RGTVRfVU5LTk9XTjsKKyAgICB9Cit9CisKK0lEaXJlY3QzREluZGV4QnVmZmVy
OSAqIEluZGV4QnVmZmVyOTo6Z2V0QnVmZmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUluZGV4
QnVmZmVyOworfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0luZGV4
QnVmZmVyOS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2Q5L0luZGV4QnVmZmVyOS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4MDE4Njc1MzI0NTU3M2IzN2E4OGQ5
YTVkZGFmNWM0MDc0ZTBlMjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW5kZXhCdWZmZXI5LmgKQEAgLTAsMCAr
MSw1MyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gSW5kZXhmZmVyOS5oOiBEZWZpbmVzIHRo
ZSBEM0Q5IEluZGV4QnVmZmVyIGltcGxlbWVudGF0aW9uLgorCisjaWZuZGVmIExJQkdMRVNWMl9S
RU5ERVJFUl9JTkRFWEJVRkZFUjlfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX0lOREVY
QlVGRkVSOV9IXworCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0luZGV4QnVmZmVyLmgi
CisKK25hbWVzcGFjZSByeAoreworY2xhc3MgUmVuZGVyZXI5OworCitjbGFzcyBJbmRleEJ1ZmZl
cjkgOiBwdWJsaWMgSW5kZXhCdWZmZXIKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IEluZGV4
QnVmZmVyOShSZW5kZXJlcjkgKmNvbnN0IHJlbmRlcmVyKTsKKyAgICB2aXJ0dWFsIH5JbmRleEJ1
ZmZlcjkoKTsKKworICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplKHVuc2lnbmVkIGludCBidWZm
ZXJTaXplLCBHTGVudW0gaW5kZXhUeXBlLCBib29sIGR5bmFtaWMpOworCisgICAgc3RhdGljIElu
ZGV4QnVmZmVyOSAqbWFrZUluZGV4QnVmZmVyOShJbmRleEJ1ZmZlciAqaW5kZXhCdWZmZXIpOwor
CisgICAgdmlydHVhbCBib29sIG1hcEJ1ZmZlcih1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25l
ZCBpbnQgc2l6ZSwgdm9pZCoqIG91dE1hcHBlZE1lbW9yeSk7CisgICAgdmlydHVhbCBib29sIHVu
bWFwQnVmZmVyKCk7CisKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRJbmRleFR5cGUoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRCdWZmZXJTaXplKCkgY29uc3Q7CisgICAgdmly
dHVhbCBib29sIHNldFNpemUodW5zaWduZWQgaW50IGJ1ZmZlclNpemUsIEdMZW51bSBpbmRleFR5
cGUpOworCisgICAgdmlydHVhbCBib29sIGRpc2NhcmQoKTsKKworICAgIEQzREZPUk1BVCBnZXRJ
bmRleEZvcm1hdCgpIGNvbnN0OworICAgIElEaXJlY3QzREluZGV4QnVmZmVyOSAqZ2V0QnVmZmVy
KCkgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oSW5k
ZXhCdWZmZXI5KTsKKworICAgIHJ4OjpSZW5kZXJlcjkgKmNvbnN0IG1SZW5kZXJlcjsKKworICAg
IElEaXJlY3QzREluZGV4QnVmZmVyOSAqbUluZGV4QnVmZmVyOworICAgIHVuc2lnbmVkIGludCBt
QnVmZmVyU2l6ZTsKKyAgICBHTGVudW0gbUluZGV4VHlwZTsKKyAgICBib29sIG1EeW5hbWljOwor
fTsKKworfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX0lOREVYQlVGRkVSOV9IXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2Q5L1F1ZXJ5OS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDkvUXVlcnk5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43Mjc4MWNiYzM5ZDI1ZDE0ZjQz
MjJkYTM1MzA3NDk1MjFlMWM4NDdiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1F1ZXJ5OS5jcHAKQEAgLTAsMCAr
MSwxMjUgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFF1
ZXJ5OS5jcHA6IERlZmluZXMgdGhlIHJ4OjpRdWVyeTkgY2xhc3Mgd2hpY2ggaW1wbGVtZW50cyBy
eDo6UXVlcnlJbXBsLgorCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9RdWVy
eTkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L1JlbmRlcmVyOS5oIgorCituYW1lc3BhY2UgcngKK3sKKworUXVlcnk5OjpRdWVy
eTkocng6OlJlbmRlcmVyOSAqcmVuZGVyZXIsIEdMZW51bSB0eXBlKSA6IFF1ZXJ5SW1wbCh0eXBl
KQoreworICAgIG1SZW5kZXJlciA9IHJlbmRlcmVyOworICAgIG1RdWVyeSA9IE5VTEw7Cit9CisK
K1F1ZXJ5OTo6flF1ZXJ5OSgpCit7CisgICAgaWYgKG1RdWVyeSkKKyAgICB7CisgICAgICAgIG1R
dWVyeS0+UmVsZWFzZSgpOworICAgICAgICBtUXVlcnkgPSBOVUxMOworICAgIH0KK30KKwordm9p
ZCBRdWVyeTk6OmJlZ2luKCkKK3sKKyAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCisgICAgeworICAg
ICAgICBpZiAoRkFJTEVEKG1SZW5kZXJlci0+Z2V0RGV2aWNlKCktPkNyZWF0ZVF1ZXJ5KEQzRFFV
RVJZVFlQRV9PQ0NMVVNJT04sICZtUXVlcnkpKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IEhSRVNVTFQgcmVzdWx0ID0gbVF1ZXJ5LT5Jc3N1ZShEM0RJU1NVRV9CRUdJTik7CisgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKK30KKwordm9pZCBRdWVyeTk6OmVuZCgpCit7CisgICAg
aWYgKG1RdWVyeSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgfQorCisgICAgSFJFU1VMVCByZXN1bHQgPSBtUXVlcnkt
Pklzc3VlKEQzRElTU1VFX0VORCk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKwor
ICAgIG1TdGF0dXMgPSBHTF9GQUxTRTsKKyAgICBtUmVzdWx0ID0gR0xfRkFMU0U7Cit9CisKK0dM
dWludCBRdWVyeTk6OmdldFJlc3VsdCgpCit7CisgICAgaWYgKG1RdWVyeSAhPSBOVUxMKQorICAg
IHsKKyAgICAgICAgd2hpbGUgKCF0ZXN0UXVlcnkoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
U2xlZXAoMCk7CisgICAgICAgICAgICAvLyBleHBsaWNpdGx5IGNoZWNrIGZvciBkZXZpY2UgbG9z
cworICAgICAgICAgICAgLy8gc29tZSBkcml2ZXJzIHNlZW0gdG8gcmV0dXJuIFNfRkFMU0UgZXZl
biBpZiB0aGUgZGV2aWNlIGlzIGxvc3QKKyAgICAgICAgICAgIC8vIGluc3RlYWQgb2YgRDNERVJS
X0RFVklDRUxPU1QgbGlrZSB0aGV5IHNob3VsZAorICAgICAgICAgICAgaWYgKG1SZW5kZXJlci0+
dGVzdERldmljZUxvc3QodHJ1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiBtUmVzdWx0OworfQorCitHTGJvb2xlYW4gUXVlcnk5
Ojppc1Jlc3VsdEF2YWlsYWJsZSgpCit7CisgICAgaWYgKG1RdWVyeSAhPSBOVUxMKQorICAgIHsK
KyAgICAgICAgdGVzdFF1ZXJ5KCk7CisgICAgfQorCisgICAgcmV0dXJuIG1TdGF0dXM7Cit9CisK
K0dMYm9vbGVhbiBRdWVyeTk6OnRlc3RRdWVyeSgpCit7CisgICAgaWYgKG1RdWVyeSAhPSBOVUxM
ICYmIG1TdGF0dXMgIT0gR0xfVFJVRSkKKyAgICB7CisgICAgICAgIERXT1JEIG51bVBpeGVscyA9
IDA7CisKKyAgICAgICAgSFJFU1VMVCBocmVzID0gbVF1ZXJ5LT5HZXREYXRhKCZudW1QaXhlbHMs
IHNpemVvZihEV09SRCksIEQzREdFVERBVEFfRkxVU0gpOworICAgICAgICBpZiAoaHJlcyA9PSBT
X09LKQorICAgICAgICB7CisgICAgICAgICAgICBtU3RhdHVzID0gIEdMX1RSVUU7CisKKyAgICAg
ICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBj
YXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfQU5Z
X1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6CisgICAgICAgICAgICAgICAgbVJlc3Vs
dCA9IChudW1QaXhlbHMgPiAwKSA/IEdMX1RSVUUgOiBHTF9GQUxTRTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlQo
ZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGQzZDk6
OmlzRGV2aWNlTG9zdEVycm9yKGhyZXMpKQorICAgICAgICB7CisgICAgICAgICAgICBtUmVuZGVy
ZXItPm5vdGlmeURldmljZUxvc3QoKTsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgR0xfVFJVRSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbVN0
YXR1czsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfVFJVRTsgLy8gcHJldmVudCBibG9ja2luZyB3
aGVuIHF1ZXJ5IGlzIG51bGwKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1F1ZXJ5OS5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1F1ZXJ5OS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjQ3ZWVmODkzMzZlZjhjMzQ0YWE1MTY3YjRmNDAyMWIxMDQxYzA3MGMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDkvUXVlcnk5LmgKQEAgLTAsMCArMSw0MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFF1ZXJ5OS5o
OiBEZWZpbmVzIHRoZSByeDo6UXVlcnk5IGNsYXNzIHdoaWNoIGltcGxlbWVudHMgcng6OlF1ZXJ5
SW1wbC4KKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfUVVFUlk5X0hfCisjZGVmaW5lIExJ
QkdMRVNWMl9SRU5ERVJFUl9RVUVSWTlfSF8KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9RdWVyeUltcGwuaCIKKworbmFtZXNwYWNlIHJ4Cit7CitjbGFzcyBSZW5kZXJlcjk7CisKK2Ns
YXNzIFF1ZXJ5OSA6IHB1YmxpYyBRdWVyeUltcGwKK3sKKyAgcHVibGljOgorICAgIFF1ZXJ5OShy
eDo6UmVuZGVyZXI5ICpyZW5kZXJlciwgR0xlbnVtIHR5cGUpOworICAgIHZpcnR1YWwgflF1ZXJ5
OSgpOworCisgICAgdm9pZCBiZWdpbigpOworICAgIHZvaWQgZW5kKCk7CisgICAgR0x1aW50IGdl
dFJlc3VsdCgpOworICAgIEdMYm9vbGVhbiBpc1Jlc3VsdEF2YWlsYWJsZSgpOworCisgIHByaXZh
dGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFF1ZXJ5OSk7CisKKyAgICBHTGJvb2xl
YW4gdGVzdFF1ZXJ5KCk7CisKKyAgICByeDo6UmVuZGVyZXI5ICptUmVuZGVyZXI7CisgICAgSURp
cmVjdDNEUXVlcnk5ICptUXVlcnk7Cit9OworCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfUkVO
REVSRVJfUVVFUlk5X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5jcHAgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMDkwNDMxZGI5OTg3MzkwYzUwMTJjYmZmNjEzMGY4YTg5MjM4MTZkOQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9SZW5kZXJUYXJnZXQ5LmNwcApAQCAtMCwwICsxLDExMyBAQAorI2luY2x1ZGUg
InByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUmVuZGVyVGFyZ2V0OS5jcHA6IElt
cGxlbWVudHMgYSBEM0Q5LXNwZWNpZmljIHdyYXBwZXIgZm9yIElEaXJlY3QzRFN1cmZhY2U5Cisv
LyBwb2ludGVycyByZXRhaW5lZCBieSByZW5kZXJidWZmZXJzLgorCisjaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKKwor
bmFtZXNwYWNlIHJ4Cit7CisKK1JlbmRlclRhcmdldDk6OlJlbmRlclRhcmdldDkoUmVuZGVyZXIg
KnJlbmRlcmVyLCBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSkKK3sKKyAgICBtUmVuZGVyZXIg
PSBSZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjkocmVuZGVyZXIpOworICAgIG1SZW5kZXJUYXJnZXQg
PSBzdXJmYWNlOworCisgICAgaWYgKG1SZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBEM0RT
VVJGQUNFX0RFU0MgZGVzY3JpcHRpb247CisgICAgICAgIG1SZW5kZXJUYXJnZXQtPkdldERlc2Mo
JmRlc2NyaXB0aW9uKTsKKworICAgICAgICBtV2lkdGggPSBkZXNjcmlwdGlvbi5XaWR0aDsKKyAg
ICAgICAgbUhlaWdodCA9IGRlc2NyaXB0aW9uLkhlaWdodDsKKyAgICAgICAgCisgICAgICAgIG1J
bnRlcm5hbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEVxdWl2YWxlbnRGb3JtYXQoZGVzY3JpcHRpb24u
Rm9ybWF0KTsKKyAgICAgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEVxdWl2YWxlbnRG
b3JtYXQoZGVzY3JpcHRpb24uRm9ybWF0KTsKKyAgICAgICAgbVNhbXBsZXMgPSBkM2Q5X2dsOjpH
ZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShkZXNjcmlwdGlvbi5NdWx0aVNhbXBsZVR5cGUp
OworICAgIH0KK30KKworUmVuZGVyVGFyZ2V0OTo6UmVuZGVyVGFyZ2V0OShSZW5kZXJlciAqcmVu
ZGVyZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNp
emVpIHNhbXBsZXMpCit7CisgICAgbVJlbmRlcmVyID0gUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5
KHJlbmRlcmVyKTsKKyAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKKworICAgIEQzREZPUk1BVCBy
ZXF1ZXN0ZWRGb3JtYXQgPSBnbF9kM2Q5OjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KGZvcm1h
dCk7CisgICAgaW50IHN1cHBvcnRlZFNhbXBsZXMgPSBtUmVuZGVyZXItPmdldE5lYXJlc3RTdXBw
b3J0ZWRTYW1wbGVzKHJlcXVlc3RlZEZvcm1hdCwgc2FtcGxlcyk7CisKKyAgICBpZiAoc3VwcG9y
dGVkU2FtcGxlcyA9PSAtMSkKKyAgICB7CisgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSFJFU1VMVCByZXN1bHQgPSBE
M0RFUlJfSU5WQUxJRENBTEw7CisgICAgCisgICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAw
KQorICAgIHsKKyAgICAgICAgaWYgKHJlcXVlc3RlZEZvcm1hdCA9PSBEM0RGTVRfRDI0UzgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCktPkNy
ZWF0ZURlcHRoU3RlbmNpbFN1cmZhY2Uod2lkdGgsIGhlaWdodCwgcmVxdWVzdGVkRm9ybWF0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnbF9kM2Q5OjpHZXRNdWx0aXNhbXBsZVR5cGVGcm9tU2FtcGxlcyhzdXBw
b3J0ZWRTYW1wbGVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgRkFMU0UsICZtUmVuZGVyVGFyZ2V0LCBO
VUxMKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
c3VsdCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCktPkNyZWF0ZVJlbmRlclRhcmdldCh3aWR0aCwg
aGVpZ2h0LCByZXF1ZXN0ZWRGb3JtYXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkdldE11bHRpc2FtcGxl
VHlwZUZyb21TYW1wbGVzKHN1cHBvcnRlZFNhbXBsZXMpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEZBTFNFLCAmbVJl
bmRlclRhcmdldCwgTlVMTCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVzdWx0ID09IEQz
REVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAg
ICB7CisgICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7CisgICAgfQorCisgICAgbVdpZHRoID0gd2lkdGg7CisgICAgbUhlaWdodCA9IGhlaWdodDsK
KyAgICBtSW50ZXJuYWxGb3JtYXQgPSBmb3JtYXQ7CisgICAgbVNhbXBsZXMgPSBzdXBwb3J0ZWRT
YW1wbGVzOworICAgIG1BY3R1YWxGb3JtYXQgPSBkM2Q5X2dsOjpHZXRFcXVpdmFsZW50Rm9ybWF0
KHJlcXVlc3RlZEZvcm1hdCk7Cit9CisKK1JlbmRlclRhcmdldDk6On5SZW5kZXJUYXJnZXQ5KCkK
K3sKKyAgICBpZiAobVJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIG1SZW5kZXJUYXJnZXQt
PlJlbGVhc2UoKTsKKyAgICB9Cit9CisKK1JlbmRlclRhcmdldDkgKlJlbmRlclRhcmdldDk6Om1h
a2VSZW5kZXJUYXJnZXQ5KFJlbmRlclRhcmdldCAqdGFyZ2V0KQoreworICAgIEFTU0VSVChIQVNf
RFlOQU1JQ19UWVBFKHJ4OjpSZW5kZXJUYXJnZXQ5KiwgdGFyZ2V0KSk7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHJ4OjpSZW5kZXJUYXJnZXQ5Kj4odGFyZ2V0KTsKK30KKworSURpcmVjdDNEU3Vy
ZmFjZTkgKlJlbmRlclRhcmdldDk6OmdldFN1cmZhY2UoKQoreworICAgIC8vIENhbGxlciBpcyBy
ZXNwb25zaWJsZSBmb3IgcmVsZWFzaW5nIHRoZSByZXR1cm5lZCBzdXJmYWNlIHJlZmVyZW5jZS4K
KyAgICBpZiAobVJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIG1SZW5kZXJUYXJnZXQtPkFk
ZFJlZigpOworICAgIH0KKworICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OworfQorCit9ClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlclRhcmdldDkuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJUYXJnZXQ5
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZmFmOGFkMWM2ZDJkNjI0Mjk0MDBmZTMzY2I4Y2RkZTcxZjdkMzI1ZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9SZW5kZXJUYXJnZXQ5LmgKQEAgLTAsMCArMSw0MCBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKy8vIFJlbmRlclRhcmdldDkuaDogRGVmaW5lcyBhIEQzRDktc3BlY2lmaWMgd3JhcHBl
ciBmb3IgSURpcmVjdDNEU3VyZmFjZTkgcG9pbnRlcnMKKy8vIHJldGFpbmVkIGJ5IFJlbmRlcmJ1
ZmZlcnMuCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUlRBUkdFVDlfSF8KKyNk
ZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUlRBUkdFVDlfSF8KKworI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQuaCIKKworbmFtZXNwYWNlIHJ4Cit7CitjbGFz
cyBSZW5kZXJlcjsKK2NsYXNzIFJlbmRlcmVyOTsKKworY2xhc3MgUmVuZGVyVGFyZ2V0OSA6IHB1
YmxpYyBSZW5kZXJUYXJnZXQKK3sKKyAgcHVibGljOgorICAgIFJlbmRlclRhcmdldDkoUmVuZGVy
ZXIgKnJlbmRlcmVyLCBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSk7CisgICAgUmVuZGVyVGFy
Z2V0OShSZW5kZXJlciAqcmVuZGVyZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpOworICAgIHZpcnR1YWwgflJlbmRlclRhcmdl
dDkoKTsKKworICAgIHN0YXRpYyBSZW5kZXJUYXJnZXQ5ICptYWtlUmVuZGVyVGFyZ2V0OShSZW5k
ZXJUYXJnZXQgKnJlbmRlclRhcmdldCk7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFN1cmZh
Y2UoKTsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJU
YXJnZXQ5KTsKKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICptUmVuZGVyVGFyZ2V0OworCisgICAg
UmVuZGVyZXI5ICptUmVuZGVyZXI7Cit9OworCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfUkVO
REVSRVJfUkVOREVSVEFSR0VUOV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi45N2ExMGQ2NGJmNzY2NjAxYzhjOGIzZDAxOTk0MmUyNzMzYmMyODkxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L1JlbmRlcmVyOS5jcHAKQEAgLTAsMCArMSwzMjg3IEBACisjaW5jbHVkZSAicHJl
Y29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFJlbmRlcmVyOS5jcHA6IEltcGxl
bWVudHMgYSBiYWNrLWVuZCBzcGVjaWZpYyBjbGFzcyBmb3IgdGhlIEQzRDkgcmVuZGVyZXIuCisK
KyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9G
cmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9JbmRleERhdGFNYW5hZ2VyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDkvUmVuZGVyZXI5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVy
ZXI5X3V0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU2hhZGVyRXhl
Y3V0YWJsZTkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9Td2FwQ2hhaW45
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5Lmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW1hZ2U5LmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvQmxpdC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L1JlbmRlclRhcmdldDkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9WZXJ0ZXhCdWZmZXI5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
SW5kZXhCdWZmZXI5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvQnVmZmVy
U3RvcmFnZTkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9RdWVyeTkuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9GZW5jZTkuaCIKKworI2luY2x1ZGUg
ImxpYkVHTC9EaXNwbGF5LmgiCisKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS90cmFjZV9ldmVudC90
cmFjZV9ldmVudC5oIgorCisvLyBDYW4gYWxzbyBiZSBlbmFibGVkIGJ5IGRlZmluaW5nIEZPUkNF
X1JFRl9SQVNUIGluIHRoZSBwcm9qZWN0J3MgcHJlZGVmaW5lZCBtYWNyb3MKKyNkZWZpbmUgUkVG
X1JBU1QgMAorCisvLyBUaGUgIkRlYnVnIFRoaXMgUGl4ZWwuLi4iIGZlYXR1cmUgaW4gUElYIG9m
dGVuIGZhaWxzIHdoZW4gdXNpbmcgdGhlCisvLyBEM0Q5RXggaW50ZXJmYWNlcy4gIEluIG9yZGVy
IHRvIGdldCBkZWJ1ZyBwaXhlbCB0byB3b3JrIG9uIGEgVmlzdGEvV2luIDcKKy8vIG1hY2hpbmUs
IGRlZmluZSAiQU5HTEVfRU5BQkxFX0QzRDlFWD0wIiBpbiB5b3VyIHByb2plY3QgZmlsZS4KKyNp
ZiAhZGVmaW5lZChBTkdMRV9FTkFCTEVfRDNEOUVYKQorLy8gRW5hYmxlcyB1c2Ugb2YgdGhlIElE
aXJlY3QzRDlFeCBpbnRlcmZhY2UsIHdoZW4gYXZhaWxhYmxlCisjZGVmaW5lIEFOR0xFX0VOQUJM
RV9EM0Q5RVggMQorI2VuZGlmIC8vICFkZWZpbmVkKEFOR0xFX0VOQUJMRV9EM0Q5RVgpCisKK25h
bWVzcGFjZSByeAoreworc3RhdGljIGNvbnN0IEQzREZPUk1BVCBSZW5kZXJUYXJnZXRGb3JtYXRz
W10gPQorICAgIHsKKyAgICAgICAgRDNERk1UX0ExUjVHNUI1LAorICAgIC8vICBEM0RGTVRfQTJS
MTBHMTBCMTAsICAgLy8gVGhlIGNvbG9yX3JhbXAgY29uZm9ybWFuY2UgdGVzdCB1c2VzIFJlYWRQ
aXhlbHMgd2l0aCBVTlNJR05FRF9CWVRFIGNhdXNpbmcgaXQgdG8gdGhpbmsgdGhhdCByZW5kZXJp
bmcgc2tpcHBlZCBhIGNvbG91ciB2YWx1ZS4KKyAgICAgICAgRDNERk1UX0E4UjhHOEI4LAorICAg
ICAgICBEM0RGTVRfUjVHNkI1LAorICAgIC8vICBEM0RGTVRfWDFSNUc1QjUsICAgICAgLy8gSGFz
IG5vIGNvbXBhdGlibGUgT3BlbkdMIEVTIHJlbmRlcmJ1ZmZlciBmb3JtYXQKKyAgICAgICAgRDNE
Rk1UX1g4UjhHOEI4CisgICAgfTsKKworc3RhdGljIGNvbnN0IEQzREZPUk1BVCBEZXB0aFN0ZW5j
aWxGb3JtYXRzW10gPQorICAgIHsKKyAgICAgICAgRDNERk1UX1VOS05PV04sCisgICAgLy8gIEQz
REZNVF9EMTZfTE9DS0FCTEUsCisgICAgICAgIEQzREZNVF9EMzIsCisgICAgLy8gIEQzREZNVF9E
MTVTMSwKKyAgICAgICAgRDNERk1UX0QyNFM4LAorICAgICAgICBEM0RGTVRfRDI0WDgsCisgICAg
Ly8gIEQzREZNVF9EMjRYNFM0LAorICAgICAgICBEM0RGTVRfRDE2LAorICAgIC8vICBEM0RGTVRf
RDMyRl9MT0NLQUJMRSwKKyAgICAvLyAgRDNERk1UX0QyNEZTOAorICAgIH07CisKK2VudW0KK3sK
KyAgICBNQVhfVkVSVEVYX0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOSA9IDI1NiwKKyAgICBNQVhfUElY
RUxfQ09OU1RBTlRfVkVDVE9SU19TTTIgPSAzMiwKKyAgICBNQVhfUElYRUxfQ09OU1RBTlRfVkVD
VE9SU19TTTMgPSAyMjQsCisgICAgTUFYX1ZBUllJTkdfVkVDVE9SU19TTTIgPSA4LAorICAgIE1B
WF9WQVJZSU5HX1ZFQ1RPUlNfU00zID0gMTAsCisKKyAgICBNQVhfVEVYVFVSRV9JTUFHRV9VTklU
U19WVEZfU00zID0gNAorfTsKKworUmVuZGVyZXI5OjpSZW5kZXJlcjkoZWdsOjpEaXNwbGF5ICpk
aXNwbGF5LCBIREMgaERjLCBib29sIHNvZnR3YXJlRGV2aWNlKSA6IFJlbmRlcmVyKGRpc3BsYXkp
LCBtRGMoaERjKSwgbVNvZnR3YXJlRGV2aWNlKHNvZnR3YXJlRGV2aWNlKQoreworICAgIG1EM2Q5
TW9kdWxlID0gTlVMTDsKKworICAgIG1EM2Q5ID0gTlVMTDsKKyAgICBtRDNkOUV4ID0gTlVMTDsK
KyAgICBtRGV2aWNlID0gTlVMTDsKKyAgICBtRGV2aWNlRXggPSBOVUxMOworICAgIG1EZXZpY2VX
aW5kb3cgPSBOVUxMOworICAgIG1CbGl0ID0gTlVMTDsKKworICAgIG1BZGFwdGVyID0gRDNEQURB
UFRFUl9ERUZBVUxUOworCisgICAgI2lmIFJFRl9SQVNUID09IDEgfHwgZGVmaW5lZChGT1JDRV9S
RUZfUkFTVCkKKyAgICAgICAgbURldmljZVR5cGUgPSBEM0RERVZUWVBFX1JFRjsKKyAgICAjZWxz
ZQorICAgICAgICBtRGV2aWNlVHlwZSA9IEQzRERFVlRZUEVfSEFMOworICAgICNlbmRpZgorCisg
ICAgbURldmljZUxvc3QgPSBmYWxzZTsKKworICAgIG1NYXhTdXBwb3J0ZWRTYW1wbGVzID0gMDsK
KworICAgIG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgPSBOVUxMOworCisgICAgbVZlcnRleERhdGFN
YW5hZ2VyID0gTlVMTDsKKyAgICBtSW5kZXhEYXRhTWFuYWdlciA9IE5VTEw7CisgICAgbUxpbmVM
b29wSUIgPSBOVUxMOworCisgICAgbU1heE51bGxDb2xvcmJ1ZmZlckxSVSA9IDA7CisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBOVU1fTlVMTF9DT0xPUkJVRkZFUl9DQUNIRV9FTlRSSUVTOyBpKysp
CisgICAgeworICAgICAgICBtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0ubHJ1Q291bnQgPSAwOwor
ICAgICAgICBtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0ud2lkdGggPSAwOworICAgICAgICBtTnVs
bENvbG9yYnVmZmVyQ2FjaGVbaV0uaGVpZ2h0ID0gMDsKKyAgICAgICAgbU51bGxDb2xvcmJ1ZmZl
ckNhY2hlW2ldLmJ1ZmZlciA9IE5VTEw7CisgICAgfQorfQorCitSZW5kZXJlcjk6On5SZW5kZXJl
cjkoKQoreworICAgIGlmIChtRGV2aWNlKQorICAgIHsKKyAgICAgICAgLy8gSWYgdGhlIGRldmlj
ZSBpcyBsb3N0LCByZXNldCBpdCBmaXJzdCB0byBwcmV2ZW50IGxlYXZpbmcgdGhlIGRyaXZlciBp
biBhbiB1bnN0YWJsZSBzdGF0ZQorICAgICAgICBpZiAodGVzdERldmljZUxvc3QoZmFsc2UpKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXNldERldmljZSgpOworICAgICAgICB9CisgICAgfQor
CisgICAgZGVpbml0aWFsaXplKCk7Cit9CisKK3ZvaWQgUmVuZGVyZXI5OjpkZWluaXRpYWxpemUo
KQoreworICAgIHJlbGVhc2VEZXZpY2VSZXNvdXJjZXMoKTsKKworICAgIFNhZmVSZWxlYXNlKG1E
ZXZpY2UpOworICAgIFNhZmVSZWxlYXNlKG1EZXZpY2VFeCk7CisgICAgU2FmZVJlbGVhc2UobUQz
ZDkpOworICAgIFNhZmVSZWxlYXNlKG1EM2Q5RXgpOworCisgICAgaWYgKG1EZXZpY2VXaW5kb3cp
CisgICAgeworICAgICAgICBEZXN0cm95V2luZG93KG1EZXZpY2VXaW5kb3cpOworICAgICAgICBt
RGV2aWNlV2luZG93ID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAobUQzZDlNb2R1bGUpCisgICAg
eworICAgICAgICBtRDNkOU1vZHVsZSA9IE5VTEw7CisgICAgfQorCisgICAgd2hpbGUgKCFtTXVs
dGlTYW1wbGVTdXBwb3J0LmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxldGUgW10gbU11bHRp
U2FtcGxlU3VwcG9ydC5iZWdpbigpLT5zZWNvbmQ7CisgICAgICAgIG1NdWx0aVNhbXBsZVN1cHBv
cnQuZXJhc2UobU11bHRpU2FtcGxlU3VwcG9ydC5iZWdpbigpKTsKKyAgICB9Cit9CisKK1JlbmRl
cmVyOSAqUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5KFJlbmRlcmVyICpyZW5kZXJlcikKK3sKKyAg
ICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShyeDo6UmVuZGVyZXI5KiwgcmVuZGVyZXIpKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8cng6OlJlbmRlcmVyOSo+KHJlbmRlcmVyKTsKK30KKworRUdM
aW50IFJlbmRlcmVyOTo6aW5pdGlhbGl6ZSgpCit7CisgICAgaWYgKCFpbml0aWFsaXplQ29tcGls
ZXIoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBFR0xfTk9UX0lOSVRJQUxJWkVEOworICAgIH0K
KworICAgIGlmIChtU29mdHdhcmVEZXZpY2UpCisgICAgeworICAgICAgICBUUkFDRV9FVkVOVDAo
ImdwdSIsICJHZXRNb2R1bGVIYW5kbGVfc3dpZnRzaGFkZXIiKTsKKyAgICAgICAgbUQzZDlNb2R1
bGUgPSBHZXRNb2R1bGVIYW5kbGUoVEVYVCgic3dpZnRzaGFkZXJfZDNkOS5kbGwiKSk7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgIkdldE1vZHVs
ZUhhbmRsZV9kM2Q5Iik7CisgICAgICAgIG1EM2Q5TW9kdWxlID0gR2V0TW9kdWxlSGFuZGxlKFRF
WFQoImQzZDkuZGxsIikpOworICAgIH0KKworICAgIGlmIChtRDNkOU1vZHVsZSA9PSBOVUxMKQor
ICAgIHsKKyAgICAgICAgRVJSKCJObyBEM0Q5IG1vZHVsZSBmb3VuZCAtIGFib3J0aW5nIVxuIik7
CisgICAgICAgIHJldHVybiBFR0xfTk9UX0lOSVRJQUxJWkVEOworICAgIH0KKworICAgIHR5cGVk
ZWYgSFJFU1VMVCAoV0lOQVBJICpEaXJlY3QzRENyZWF0ZTlFeEZ1bmMpKFVJTlQsIElEaXJlY3Qz
RDlFeCoqKTsKKyAgICBEaXJlY3QzRENyZWF0ZTlFeEZ1bmMgRGlyZWN0M0RDcmVhdGU5RXhQdHIg
PSByZWludGVycHJldF9jYXN0PERpcmVjdDNEQ3JlYXRlOUV4RnVuYz4oR2V0UHJvY0FkZHJlc3Mo
bUQzZDlNb2R1bGUsICJEaXJlY3QzRENyZWF0ZTlFeCIpKTsKKworICAgIC8vIFVzZSBEaXJlY3Qz
RDlFeCBpZiBhdmFpbGFibGUuIEFtb25nIG90aGVyIHRoaW5ncywgdGhpcyB2ZXJzaW9uIGlzIGxl
c3MKKyAgICAvLyBpbmNsaW5lZCB0byByZXBvcnQgYSBsb3N0IGNvbnRleHQsIGZvciBleGFtcGxl
IHdoZW4gdGhlIHVzZXIgc3dpdGNoZXMKKyAgICAvLyBkZXNrdG9wLiBEaXJlY3QzRDlFeCBpcyBh
dmFpbGFibGUgaW4gV2luZG93cyBWaXN0YSBhbmQgbGF0ZXIgaWYgc3VpdGFibGUgZHJpdmVycyBh
cmUgYXZhaWxhYmxlLgorICAgIGlmIChBTkdMRV9FTkFCTEVfRDNEOUVYICYmIERpcmVjdDNEQ3Jl
YXRlOUV4UHRyICYmIFNVQ0NFRURFRChEaXJlY3QzRENyZWF0ZTlFeFB0cihEM0RfU0RLX1ZFUlNJ
T04sICZtRDNkOUV4KSkpCisgICAgeworICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJEM2Q5
RXhfUXVlcnlJbnRlcmZhY2UiKTsKKyAgICAgICAgQVNTRVJUKG1EM2Q5RXgpOworICAgICAgICBt
RDNkOUV4LT5RdWVyeUludGVyZmFjZShJSURfSURpcmVjdDNEOSwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKio+KCZtRDNkOSkpOworICAgICAgICBBU1NFUlQobUQzZDkpOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJEaXJlY3QzRENyZWF0ZTkiKTsK
KyAgICAgICAgbUQzZDkgPSBEaXJlY3QzRENyZWF0ZTkoRDNEX1NES19WRVJTSU9OKTsKKyAgICB9
CisKKyAgICBpZiAoIW1EM2Q5KQorICAgIHsKKyAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRl
IEQzRDkgZGV2aWNlIC0gYWJvcnRpbmchXG4iKTsKKyAgICAgICAgcmV0dXJuIEVHTF9OT1RfSU5J
VElBTElaRUQ7CisgICAgfQorCisgICAgaWYgKG1EYyAhPSBOVUxMKQorICAgIHsKKyAgICAvLyAg
VU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FOiBEZXRlcm1pbmUgd2hpY2ggYWRhcHRlciBpbmRl
eCB0aGUgZGV2aWNlIGNvbnRleHQgY29ycmVzcG9uZHMgdG8KKyAgICB9CisKKyAgICBIUkVTVUxU
IHJlc3VsdDsKKworICAgIC8vIEdpdmUgdXAgb24gZ2V0dGluZyBkZXZpY2UgY2FwcyBhZnRlciBh
Ym91dCBvbmUgc2Vjb25kLgorICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiR2V0
RGV2aWNlQ2FwcyIpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyArK2kpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1EM2Q5LT5HZXREZXZpY2VDYXBzKG1BZGFwdGVy
LCBtRGV2aWNlVHlwZSwgJm1EZXZpY2VDYXBzKTsKKyAgICAgICAgICAgIGlmIChTVUNDRUVERUQo
cmVzdWx0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdCA9PSBEM0RFUlJfTk9UQVZBSUxBQkxF
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFNsZWVwKDEwMCk7ICAgLy8gR2l2ZSB0
aGUgZHJpdmVyIHNvbWUgdGltZSB0byBpbml0aWFsaXplL3JlY292ZXIKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgaWYgKEZBSUxFRChyZXN1bHQpKSAgIC8vIEQzREVSUl9PVVRPRlZJ
REVPTUVNT1JZLCBFX09VVE9GTUVNT1JZLCBEM0RFUlJfSU5WQUxJRERFVklDRSwgb3IgYW5vdGhl
ciBlcnJvciB3ZSBjYW4ndCByZWNvdmVyIGZyb20KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBFUlIoImZhaWxlZCB0byBnZXQgZGV2aWNlIGNhcHMgKDB4JXgpXG4iLCByZXN1bHQpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBFR0xfTk9UX0lOSVRJQUxJWkVEOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVyVmVy
c2lvbiA8IEQzRFBTX1ZFUlNJT04oMiwgMCkpCisgICAgeworICAgICAgICBFUlIoIlJlbmRlcmVy
IGRvZXMgbm90IHN1cHBvcnQgUFMgMi4wLiBhYm9ydGluZyFcbiIpOworICAgICAgICByZXR1cm4g
RUdMX05PVF9JTklUSUFMSVpFRDsKKyAgICB9CisKKyAgICAvLyBXaGVuIERpcmVjdFg5IGlzIHJ1
bm5pbmcgd2l0aCBhbiBvbGRlciBEaXJlY3RYOCBkcml2ZXIsIGEgU3RyZXRjaFJlY3QgZnJvbSBh
IHJlZ3VsYXIgdGV4dHVyZSB0byBhIHJlbmRlciB0YXJnZXQgdGV4dHVyZSBpcyBub3Qgc3VwcG9y
dGVkLgorICAgIC8vIFRoaXMgaXMgcmVxdWlyZWQgYnkgVGV4dHVyZTJEOjpjb252ZXJ0VG9SZW5k
ZXJUYXJnZXQuCisgICAgaWYgKChtRGV2aWNlQ2Fwcy5EZXZDYXBzMiAmIEQzRERFVkNBUFMyX0NB
Tl9TVFJFVENIUkVDVF9GUk9NX1RFWFRVUkVTKSA9PSAwKQorICAgIHsKKyAgICAgICAgRVJSKCJS
ZW5kZXJlciBkb2VzIG5vdCBzdXBwb3J0IHN0cmV0Y3RyZWN0IGZyb20gdGV4dHVyZXMhXG4iKTsK
KyAgICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7CisgICAgfQorCisgICAgeworICAg
ICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJHZXRBZGFwdGVySWRlbnRpZmllciIpOworICAgICAg
ICBtRDNkOS0+R2V0QWRhcHRlcklkZW50aWZpZXIobUFkYXB0ZXIsIDAsICZtQWRhcHRlcklkZW50
aWZpZXIpOworICAgIH0KKworICAgIC8vIEFUSSBjYXJkcyBvbiBYUCBoYXZlIHByb2JsZW1zIHdp
dGggbm9uLXBvd2VyLW9mLXR3byB0ZXh0dXJlcy4KKyAgICBtU3VwcG9ydHNOb25Qb3dlcjJUZXh0
dXJlcyA9ICEobURldmljZUNhcHMuVGV4dHVyZUNhcHMgJiBEM0RQVEVYVFVSRUNBUFNfUE9XMikg
JiYKKyAgICAgICAgIShtRGV2aWNlQ2Fwcy5UZXh0dXJlQ2FwcyAmIEQzRFBURVhUVVJFQ0FQU19D
VUJFTUFQX1BPVzIpICYmCisgICAgICAgICEobURldmljZUNhcHMuVGV4dHVyZUNhcHMgJiBEM0RQ
VEVYVFVSRUNBUFNfTk9OUE9XMkNPTkRJVElPTkFMKSAmJgorICAgICAgICAhKGdldENvbXBhcmFi
bGVPU1ZlcnNpb24oKSA8IHZlcnNpb25XaW5kb3dzVmlzdGEgJiYgbUFkYXB0ZXJJZGVudGlmaWVy
LlZlbmRvcklkID09IFZFTkRPUl9JRF9BTUQpOworCisgICAgLy8gTXVzdCBzdXBwb3J0IGEgbWlu
aW11bSBvZiAyOjEgYW5pc290cm9weSBmb3IgbWF4IGFuaXNvdHJvcHkgdG8gYmUgY29uc2lkZXJl
ZCBzdXBwb3J0ZWQsIHBlciB0aGUgc3BlYworICAgIG1TdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlz
b3Ryb3B5ID0gKChtRGV2aWNlQ2Fwcy5SYXN0ZXJDYXBzICYgRDNEUFJBU1RFUkNBUFNfQU5JU09U
Uk9QWSkgJiYgKG1EZXZpY2VDYXBzLk1heEFuaXNvdHJvcHkgPj0gMikpOworCisgICAgbU1pblN3
YXBJbnRlcnZhbCA9IDQ7CisgICAgbU1heFN3YXBJbnRlcnZhbCA9IDA7CisKKyAgICBpZiAobURl
dmljZUNhcHMuUHJlc2VudGF0aW9uSW50ZXJ2YWxzICYgRDNEUFJFU0VOVF9JTlRFUlZBTF9JTU1F
RElBVEUpCisgICAgeworICAgICAgICBtTWluU3dhcEludGVydmFsID0gc3RkOjptaW4obU1pblN3
YXBJbnRlcnZhbCwgMCk7CisgICAgICAgIG1NYXhTd2FwSW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4
U3dhcEludGVydmFsLCAwKTsKKyAgICB9CisgICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlv
bkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfT05FKQorICAgIHsKKyAgICAgICAgbU1p
blN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDEpOworICAgICAgICBt
TWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgMSk7CisgICAgfQor
ICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVTRU5UX0lO
VEVSVkFMX1RXTykKKyAgICB7CisgICAgICAgIG1NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbiht
TWluU3dhcEludGVydmFsLCAyKTsKKyAgICAgICAgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4
KG1NYXhTd2FwSW50ZXJ2YWwsIDIpOworICAgIH0KKyAgICBpZiAobURldmljZUNhcHMuUHJlc2Vu
dGF0aW9uSW50ZXJ2YWxzICYgRDNEUFJFU0VOVF9JTlRFUlZBTF9USFJFRSkKKyAgICB7CisgICAg
ICAgIG1NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dhcEludGVydmFsLCAzKTsKKyAg
ICAgICAgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2YWwsIDMpOwor
ICAgIH0KKyAgICBpZiAobURldmljZUNhcHMuUHJlc2VudGF0aW9uSW50ZXJ2YWxzICYgRDNEUFJF
U0VOVF9JTlRFUlZBTF9GT1VSKQorICAgIHsKKyAgICAgICAgbU1pblN3YXBJbnRlcnZhbCA9IHN0
ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDQpOworICAgICAgICBtTWF4U3dhcEludGVydmFsID0g
c3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgNCk7CisgICAgfQorCisgICAgaW50IG1heCA9IDA7
CisgICAgeworICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJnZXRNdWx0aVNhbXBsZVN1cHBv
cnQiKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUoUmVu
ZGVyVGFyZ2V0Rm9ybWF0cyk7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgYm9vbCAqbXVs
dGlzYW1wbGVBcnJheSA9IG5ldyBib29sW0QzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVMgKyAxXTsK
KyAgICAgICAgICAgIGdldE11bHRpU2FtcGxlU3VwcG9ydChSZW5kZXJUYXJnZXRGb3JtYXRzW2ld
LCBtdWx0aXNhbXBsZUFycmF5KTsKKyAgICAgICAgICAgIG1NdWx0aVNhbXBsZVN1cHBvcnRbUmVu
ZGVyVGFyZ2V0Rm9ybWF0c1tpXV0gPSBtdWx0aXNhbXBsZUFycmF5OworCisgICAgICAgICAgICBm
b3IgKGludCBqID0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgaiA+PSAwOyAtLWopCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG11bHRpc2FtcGxlQXJyYXlbal0gJiYgaiAh
PSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSAmJiBqID4gbWF4KQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgbWF4ID0gajsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5U
MCgiZ3B1IiwgImdldE11bHRpU2FtcGxlU3VwcG9ydDIiKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUoRGVwdGhTdGVuY2lsRm9ybWF0cyk7ICsraSkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKERlcHRoU3RlbmNpbEZvcm1hdHNbaV0gPT0gRDNERk1U
X1VOS05PV04pCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGJvb2wg
Km11bHRpc2FtcGxlQXJyYXkgPSBuZXcgYm9vbFtEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTICsg
MV07CisgICAgICAgICAgICBnZXRNdWx0aVNhbXBsZVN1cHBvcnQoRGVwdGhTdGVuY2lsRm9ybWF0
c1tpXSwgbXVsdGlzYW1wbGVBcnJheSk7CisgICAgICAgICAgICBtTXVsdGlTYW1wbGVTdXBwb3J0
W0RlcHRoU3RlbmNpbEZvcm1hdHNbaV1dID0gbXVsdGlzYW1wbGVBcnJheTsKKworICAgICAgICAg
ICAgZm9yIChpbnQgaiA9IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7IGogPj0gMDsgLS1qKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChtdWx0aXNhbXBsZUFycmF5W2pdICYm
IGogIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUgJiYgaiA+IG1heCkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1heCA9IGo7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgbU1heFN1cHBvcnRlZFNhbXBs
ZXMgPSBtYXg7CisKKyAgICBzdGF0aWMgY29uc3QgVENIQVIgd2luZG93TmFtZVtdID0gVEVYVCgi
QW5nbGVIaWRkZW5XaW5kb3ciKTsKKyAgICBzdGF0aWMgY29uc3QgVENIQVIgY2xhc3NOYW1lW10g
PSBURVhUKCJTVEFUSUMiKTsKKworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAi
Q3JlYXRlV2luZG93RXgiKTsKKyAgICAgICAgbURldmljZVdpbmRvdyA9IENyZWF0ZVdpbmRvd0V4
KFdTX0VYX05PQUNUSVZBVEUsIGNsYXNzTmFtZSwgd2luZG93TmFtZSwgV1NfRElTQUJMRUQgfCBX
U19QT1BVUCwgMCwgMCwgMSwgMSwgSFdORF9NRVNTQUdFLCBOVUxMLCBHZXRNb2R1bGVIYW5kbGUo
TlVMTCksIE5VTEwpOworICAgIH0KKworICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50
UGFyYW1ldGVycyA9IGdldERlZmF1bHRQcmVzZW50UGFyYW1ldGVycygpOworICAgIERXT1JEIGJl
aGF2aW9yRmxhZ3MgPSBEM0RDUkVBVEVfRlBVX1BSRVNFUlZFIHwgRDNEQ1JFQVRFX05PV0lORE9X
Q0hBTkdFUzsKKworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiRDNkOV9DcmVh
dGVEZXZpY2UiKTsKKyAgICAgICAgcmVzdWx0ID0gbUQzZDktPkNyZWF0ZURldmljZShtQWRhcHRl
ciwgbURldmljZVR5cGUsIG1EZXZpY2VXaW5kb3csIGJlaGF2aW9yRmxhZ3MgfCBEM0RDUkVBVEVf
SEFSRFdBUkVfVkVSVEVYUFJPQ0VTU0lORyB8IEQzRENSRUFURV9QVVJFREVWSUNFLCAmcHJlc2Vu
dFBhcmFtZXRlcnMsICZtRGV2aWNlKTsKKyAgICB9CisgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJf
T1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0g
RDNERVJSX0RFVklDRUxPU1QpCisgICAgeworICAgICAgICByZXR1cm4gRUdMX0JBRF9BTExPQzsK
KyAgICB9CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBUUkFDRV9F
VkVOVDAoImdwdSIsICJEM2Q5X0NyZWF0ZURldmljZTIiKTsKKyAgICAgICAgcmVzdWx0ID0gbUQz
ZDktPkNyZWF0ZURldmljZShtQWRhcHRlciwgbURldmljZVR5cGUsIG1EZXZpY2VXaW5kb3csIGJl
aGF2aW9yRmxhZ3MgfCBEM0RDUkVBVEVfU09GVFdBUkVfVkVSVEVYUFJPQ0VTU0lORywgJnByZXNl
bnRQYXJhbWV0ZXJzLCAmbURldmljZSk7CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQor
ICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVP
TUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJfTk9U
QVZBSUxBQkxFIHx8IHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTE9TVCk7CisgICAgICAgICAgICBy
ZXR1cm4gRUdMX0JBRF9BTExPQzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtRDNkOUV4
KQorICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAibURldmljZV9RdWVyeUludGVy
ZmFjZSIpOworICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5RdWVyeUludGVyZmFjZShJSURfSURp
cmVjdDNERGV2aWNlOUV4LCAodm9pZCoqKSAmbURldmljZUV4KTsKKyAgICAgICAgQVNTRVJUKFNV
Q0NFRURFRChyZXN1bHQpKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5UMCgi
Z3B1IiwgIlNoYWRlckNhY2hlIGluaXRpYWxpemUiKTsKKyAgICAgICAgbVZlcnRleFNoYWRlckNh
Y2hlLmluaXRpYWxpemUobURldmljZSk7CisgICAgICAgIG1QaXhlbFNoYWRlckNhY2hlLmluaXRp
YWxpemUobURldmljZSk7CisgICAgfQorCisgICAgLy8gQ2hlY2sgb2NjbHVzaW9uIHF1ZXJ5IHN1
cHBvcnQKKyAgICBJRGlyZWN0M0RRdWVyeTkgKm9jY2x1c2lvblF1ZXJ5ID0gTlVMTDsKKyAgICB7
CisgICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgImRldmljZV9DcmVhdGVRdWVyeSIpOworICAg
ICAgICBpZiAoU1VDQ0VFREVEKG1EZXZpY2UtPkNyZWF0ZVF1ZXJ5KEQzRFFVRVJZVFlQRV9PQ0NM
VVNJT04sICZvY2NsdXNpb25RdWVyeSkpICYmIG9jY2x1c2lvblF1ZXJ5KQorICAgICAgICB7Cisg
ICAgICAgICAgICBvY2NsdXNpb25RdWVyeS0+UmVsZWFzZSgpOworICAgICAgICAgICAgbU9jY2x1
c2lvblF1ZXJ5U3VwcG9ydCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg
ICB7CisgICAgICAgICAgICBtT2NjbHVzaW9uUXVlcnlTdXBwb3J0ID0gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBDaGVjayBldmVudCBxdWVyeSBzdXBwb3J0CisgICAgSURpcmVj
dDNEUXVlcnk5ICpldmVudFF1ZXJ5ID0gTlVMTDsKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5U
MCgiZ3B1IiwgImRldmljZV9DcmVhdGVRdWVyeTIiKTsKKyAgICAgICAgaWYgKFNVQ0NFRURFRCht
RGV2aWNlLT5DcmVhdGVRdWVyeShEM0RRVUVSWVRZUEVfRVZFTlQsICZldmVudFF1ZXJ5KSkgJiYg
ZXZlbnRRdWVyeSkKKyAgICAgICAgeworICAgICAgICAgICAgZXZlbnRRdWVyeS0+UmVsZWFzZSgp
OworICAgICAgICAgICAgbUV2ZW50UXVlcnlTdXBwb3J0ID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FdmVudFF1ZXJ5U3VwcG9ydCA9IGZh
bHNlOworICAgICAgICB9CisgICAgfQorCisgICAgRDNERElTUExBWU1PREUgY3VycmVudERpc3Bs
YXlNb2RlOworICAgIG1EM2Q5LT5HZXRBZGFwdGVyRGlzcGxheU1vZGUobUFkYXB0ZXIsICZjdXJy
ZW50RGlzcGxheU1vZGUpOworCisgICAgLy8gQ2hlY2sgdmVydGV4IHRleHR1cmUgc3VwcG9ydAor
ICAgIC8vIE9ubHkgRGlyZWN0M0QgMTAgcmVhZHkgZGV2aWNlcyBzdXBwb3J0IGFsbCB0aGUgbmVj
ZXNzYXJ5IHZlcnRleCB0ZXh0dXJlIGZvcm1hdHMuCisgICAgLy8gV2UgdGVzdCB0aGlzIHVzaW5n
IEQzRDkgYnkgY2hlY2tpbmcgc3VwcG9ydCBmb3IgdGhlIFIxNkYgZm9ybWF0LgorICAgIG1WZXJ0
ZXhUZXh0dXJlU3VwcG9ydCA9IG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVyVmVyc2lvbiA+PSBEM0RQ
U19WRVJTSU9OKDMsIDApICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VDQ0VFREVE
KG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnRE
aXNwbGF5TW9kZS5Gb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RVU0FHRV9RVUVSWV9WRVJURVhURVhUVVJFLCBE
M0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfUjE2RikpOworCisgICAgLy8gQ2hlY2sgZGVwdGggdGV4
dHVyZSBzdXBwb3J0CisgICAgLy8gd2UgdXNlIElOVFogZm9yIGRlcHRoIHRleHR1cmVzIGluIERp
cmVjdDNEOQorICAgIC8vIHdlIGFsc28gd2FudCBOVUxMIHRleHR1cmUgc3VwcG9ydCB0byBlbnN1
cmUgdGhlIHdlIGNhbiBtYWtlIGRlcHRoLW9ubHkgRkJPcworICAgIC8vIHNlZSBodHRwOi8vYXJh
cy1wLmluZm8vdGV4dHMvRDNEOUdQVUhhY2tzLmh0bWwKKyAgICBtRGVwdGhUZXh0dXJlU3VwcG9y
dCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VU
eXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RVU0FHRV9ERVBUSFNURU5D
SUwsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9JTlRaKSkgJiYKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1E
ZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RVU0FHRV9SRU5E
RVJUQVJHRVQsIEQzRFJUWVBFX1NVUkZBQ0UsIEQzREZNVF9OVUxMKSk7CisKKyAgICAvLyBDaGVj
ayAzMiBiaXQgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZSBzdXBwb3J0CisgICAgbUZsb2F0MzJGaWx0
ZXJTdXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwg
bURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1FVRVJZX0ZJ
TFRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9BMzJCMzJHMzJSMzJGKSkgJiYK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNl
Rm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwg
RDNEVVNBR0VfUVVFUllfRklMVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfQ1VCRVRFWFRVUkUsIEQzREZN
VF9BMzJCMzJHMzJSMzJGKSk7CisKKyAgICBtRmxvYXQzMlJlbmRlclN1cHBvcnQgPSBTVUNDRUVE
RUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVu
dERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUkVOREVSVEFSR0VULAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZ
UEVfVEVYVFVSRSwgRDNERk1UX0EzMkIzMkczMlIzMkYpKSAmJgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1E
ZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9SRU5ERVJUQVJH
RVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBEM0RSVFlQRV9DVUJFVEVYVFVSRSwgRDNERk1UX0EzMkIzMkczMlIzMkYpKTsK
KworICAgIGlmICghbUZsb2F0MzJGaWx0ZXJTdXBwb3J0ICYmICFtRmxvYXQzMlJlbmRlclN1cHBv
cnQpCisgICAgeworICAgICAgICBtRmxvYXQzMlRleHR1cmVTdXBwb3J0ID0gU1VDQ0VFREVEKG1E
M2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNw
bGF5TW9kZS5Gb3JtYXQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9B
MzJCMzJHMzJSMzJGKSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVQ0NF
RURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJy
ZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9DVUJFVEVYVFVS
RSwgRDNERk1UX0EzMkIzMkczMlIzMkYpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgbUZsb2F0MzJUZXh0dXJlU3VwcG9ydCA9IHRydWU7CisgICAgfQorCisgICAgLy8gQ2hlY2sg
MTYgYml0IGZsb2F0aW5nIHBvaW50IHRleHR1cmUgc3VwcG9ydAorICAgIG1GbG9hdDE2RmlsdGVy
U3VwcG9ydCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1E
ZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9RVUVSWV9GSUxU
RVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfQTE2QjE2RzE2UjE2RikpICYmCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZv
cm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQz
RFVTQUdFX1FVRVJZX0ZJTFRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX0NVQkVURVhUVVJFLCBEM0RGTVRf
QTE2QjE2RzE2UjE2RikpOworCisgICAgbUZsb2F0MTZSZW5kZXJTdXBwb3J0ID0gU1VDQ0VFREVE
KG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnRE
aXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBF
X1RFWFRVUkUsIEQzREZNVF9BMTZCMTZHMTZSMTZGKSkgJiYKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2
aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUkVOREVSVEFSR0VU
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRDNEUlRZUEVfQ1VCRVRFWFRVUkUsIEQzREZNVF9BMTZCMTZHMTZSMTZGKSk7CisK
KyAgICBpZiAoIW1GbG9hdDE2RmlsdGVyU3VwcG9ydCAmJiAhbUZsb2F0MTZSZW5kZXJTdXBwb3J0
KQorICAgIHsKKyAgICAgICAgbUZsb2F0MTZUZXh0dXJlU3VwcG9ydCA9IFNVQ0NFRURFRChtRDNk
OS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxh
eU1vZGUuRm9ybWF0LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfQTE2
QjE2RzE2UjE2RikpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUNDRUVE
RUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVu
dERpc3BsYXlNb2RlLkZvcm1hdCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfQ1VCRVRFWFRVUkUs
IEQzREZNVF9BMTZCMTZHMTZSMTZGKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IG1GbG9hdDE2VGV4dHVyZVN1cHBvcnQgPSB0cnVlOworICAgIH0KKworICAgIC8vIENoZWNrIERY
VCB0ZXh0dXJlIHN1cHBvcnQKKyAgICBtRFhUMVRleHR1cmVTdXBwb3J0ID0gU1VDQ0VFREVEKG1E
M2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNw
bGF5TW9kZS5Gb3JtYXQsIDAsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9EWFQxKSk7CisgICAg
bURYVDNUZXh0dXJlU3VwcG9ydCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQo
bUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLCBEM0RS
VFlQRV9URVhUVVJFLCBEM0RGTVRfRFhUMykpOworICAgIG1EWFQ1VGV4dHVyZVN1cHBvcnQgPSBT
VUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwg
Y3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0RY
VDUpKTsKKworICAgIC8vIENoZWNrIGx1bWluYW5jZVthbHBoYV0gdGV4dHVyZSBzdXBwb3J0Cisg
ICAgbUx1bWluYW5jZVRleHR1cmVTdXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0Rldmlj
ZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQs
IDAsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9MOCkpOworICAgIG1MdW1pbmFuY2VBbHBoYVRl
eHR1cmVTdXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRl
ciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsIEQzRFJUWVBFX1RF
WFRVUkUsIEQzREZNVF9BOEw4KSk7CisKKyAgICBpbml0aWFsaXplRGV2aWNlKCk7CisKKyAgICBy
ZXR1cm4gRUdMX1NVQ0NFU1M7Cit9CisKKy8vIGRvIGFueSBvbmUtdGltZSBkZXZpY2UgaW5pdGlh
bGl6YXRpb24KKy8vIE5PVEU6IHRoaXMgaXMgYWxzbyBuZWVkZWQgYWZ0ZXIgYSBkZXZpY2UgbG9z
dC9yZXNldAorLy8gdG8gcmVzZXQgdGhlIHNjZW5lIHN0YXR1cyBhbmQgZW5zdXJlIHRoZSBkZWZh
dWx0IHN0YXRlcyBhcmUgcmVzZXQuCit2b2lkIFJlbmRlcmVyOTo6aW5pdGlhbGl6ZURldmljZSgp
Cit7CisgICAgLy8gUGVybWFuZW50IG5vbi1kZWZhdWx0IHN0YXRlcworICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX1BPSU5UU1BSSVRFRU5BQkxFLCBUUlVFKTsKKyAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19MQVNUUElYRUwsIEZBTFNFKTsKKworICAgIGlmIChtRGV2
aWNlQ2Fwcy5QaXhlbFNoYWRlclZlcnNpb24gPj0gRDNEUFNfVkVSU0lPTigzLCAwKSkKKyAgICB7
CisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1BPSU5UU0laRV9NQVgsIChE
V09SRCYpbURldmljZUNhcHMuTWF4UG9pbnRTaXplKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfUE9JTlRTSVpFX01BWCwgMHgz
RjgwMDAwMCk7ICAgLy8gMS4wZgorICAgIH0KKworICAgIG1hcmtBbGxTdGF0ZURpcnR5KCk7CisK
KyAgICBtU2NlbmVTdGFydGVkID0gZmFsc2U7CisKKyAgICBBU1NFUlQoIW1CbGl0ICYmICFtVmVy
dGV4RGF0YU1hbmFnZXIgJiYgIW1JbmRleERhdGFNYW5hZ2VyKTsKKyAgICBtQmxpdCA9IG5ldyBC
bGl0KHRoaXMpOworICAgIG1WZXJ0ZXhEYXRhTWFuYWdlciA9IG5ldyByeDo6VmVydGV4RGF0YU1h
bmFnZXIodGhpcyk7CisgICAgbUluZGV4RGF0YU1hbmFnZXIgPSBuZXcgcng6OkluZGV4RGF0YU1h
bmFnZXIodGhpcyk7Cit9CisKK0QzRFBSRVNFTlRfUEFSQU1FVEVSUyBSZW5kZXJlcjk6OmdldERl
ZmF1bHRQcmVzZW50UGFyYW1ldGVycygpCit7CisgICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIHBy
ZXNlbnRQYXJhbWV0ZXJzID0gezB9OworCisgICAgLy8gVGhlIGRlZmF1bHQgc3dhcCBjaGFpbiBp
cyBuZXZlciBhY3R1YWxseSB1c2VkLiBTdXJmYWNlIHdpbGwgY3JlYXRlIGEgbmV3IHN3YXAgY2hh
aW4gd2l0aCB0aGUgcHJvcGVyIHBhcmFtZXRlcnMuCisgICAgcHJlc2VudFBhcmFtZXRlcnMuQXV0
b0RlcHRoU3RlbmNpbEZvcm1hdCA9IEQzREZNVF9VTktOT1dOOworICAgIHByZXNlbnRQYXJhbWV0
ZXJzLkJhY2tCdWZmZXJDb3VudCA9IDE7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZl
ckZvcm1hdCA9IEQzREZNVF9VTktOT1dOOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZm
ZXJXaWR0aCA9IDE7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCA9IDE7
CisgICAgcHJlc2VudFBhcmFtZXRlcnMuRW5hYmxlQXV0b0RlcHRoU3RlbmNpbCA9IEZBTFNFOwor
ICAgIHByZXNlbnRQYXJhbWV0ZXJzLkZsYWdzID0gMDsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5o
RGV2aWNlV2luZG93ID0gbURldmljZVdpbmRvdzsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0
aVNhbXBsZVF1YWxpdHkgPSAwOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlVHlw
ZSA9IEQzRE1VTFRJU0FNUExFX05PTkU7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuUHJlc2VudGF0
aW9uSW50ZXJ2YWwgPSBEM0RQUkVTRU5UX0lOVEVSVkFMX0RFRkFVTFQ7CisgICAgcHJlc2VudFBh
cmFtZXRlcnMuU3dhcEVmZmVjdCA9IEQzRFNXQVBFRkZFQ1RfRElTQ0FSRDsKKyAgICBwcmVzZW50
UGFyYW1ldGVycy5XaW5kb3dlZCA9IFRSVUU7CisKKyAgICByZXR1cm4gcHJlc2VudFBhcmFtZXRl
cnM7Cit9CisKK2ludCBSZW5kZXJlcjk6OmdlbmVyYXRlQ29uZmlncyhDb25maWdEZXNjICoqY29u
ZmlnRGVzY0xpc3QpCit7CisgICAgRDNERElTUExBWU1PREUgY3VycmVudERpc3BsYXlNb2RlOwor
ICAgIG1EM2Q5LT5HZXRBZGFwdGVyRGlzcGxheU1vZGUobUFkYXB0ZXIsICZjdXJyZW50RGlzcGxh
eU1vZGUpOworCisgICAgdW5zaWduZWQgaW50IG51bVJlbmRlckZvcm1hdHMgPSBBcnJheVNpemUo
UmVuZGVyVGFyZ2V0Rm9ybWF0cyk7CisgICAgdW5zaWduZWQgaW50IG51bURlcHRoRm9ybWF0cyA9
IEFycmF5U2l6ZShEZXB0aFN0ZW5jaWxGb3JtYXRzKTsKKyAgICAoKmNvbmZpZ0Rlc2NMaXN0KSA9
IG5ldyBDb25maWdEZXNjW251bVJlbmRlckZvcm1hdHMgKiBudW1EZXB0aEZvcm1hdHNdOworICAg
IGludCBudW1Db25maWdzID0gMDsKKworICAgIGZvciAodW5zaWduZWQgaW50IGZvcm1hdEluZGV4
ID0gMDsgZm9ybWF0SW5kZXggPCBudW1SZW5kZXJGb3JtYXRzOyBmb3JtYXRJbmRleCsrKQorICAg
IHsKKyAgICAgICAgRDNERk9STUFUIHJlbmRlclRhcmdldEZvcm1hdCA9IFJlbmRlclRhcmdldEZv
cm1hdHNbZm9ybWF0SW5kZXhdOworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQzZDktPkNo
ZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2Rl
LkZvcm1hdCwgRDNEVVNBR0VfUkVOREVSVEFSR0VULCBEM0RSVFlQRV9TVVJGQUNFLCByZW5kZXJU
YXJnZXRGb3JtYXQpOworCisgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAgICAgICAg
eworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZGVwdGhTdGVuY2lsSW5kZXggPSAwOyBk
ZXB0aFN0ZW5jaWxJbmRleCA8IG51bURlcHRoRm9ybWF0czsgZGVwdGhTdGVuY2lsSW5kZXgrKykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEM0RGT1JNQVQgZGVwdGhTdGVuY2lsRm9y
bWF0ID0gRGVwdGhTdGVuY2lsRm9ybWF0c1tkZXB0aFN0ZW5jaWxJbmRleF07CisgICAgICAgICAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBEM0RfT0s7CisKKyAgICAgICAgICAgICAgICBpZihkZXB0
aFN0ZW5jaWxGb3JtYXQgIT0gRDNERk1UX1VOS05PV04pCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0
ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9ERVBU
SFNURU5DSUwsIEQzRFJUWVBFX1NVUkZBQ0UsIGRlcHRoU3RlbmNpbEZvcm1hdCk7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoZGVwdGhTdGVuY2lsRm9ybWF0
ICE9IEQzREZNVF9VTktOT1dOKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXB0aFN0ZW5jaWxNYXRjaChtQWRhcHRl
ciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIHJlbmRlclRhcmdldEZv
cm1hdCwgZGVwdGhTdGVuY2lsRm9ybWF0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlnRGVzYyBuZXdDb25maWc7CisgICAg
ICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcucmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZDNkOV9n
bDo6Q29udmVydEJhY2tCdWZmZXJGb3JtYXQocmVuZGVyVGFyZ2V0Rm9ybWF0KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5kZXB0aFN0ZW5jaWxGb3JtYXQgPSBkM2Q5X2dsOjpD
b252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KGRlcHRoU3RlbmNpbEZvcm1hdCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBuZXdDb25maWcubXVsdGlTYW1wbGUgPSAwOyAvLyBGSVhNRTogZW51bWVy
YXRlIG11bHRpLXNhbXBsaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcuZmFz
dENvbmZpZyA9IChjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0ID09IHJlbmRlclRhcmdldEZvcm1h
dCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICgqY29uZmlnRGVzY0xpc3QpW251bUNvbmZp
Z3MrK10gPSBuZXdDb25maWc7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbnVtQ29u
ZmlnczsKK30KKwordm9pZCBSZW5kZXJlcjk6OmRlbGV0ZUNvbmZpZ3MoQ29uZmlnRGVzYyAqY29u
ZmlnRGVzY0xpc3QpCit7CisgICAgZGVsZXRlIFtdIChjb25maWdEZXNjTGlzdCk7Cit9CisKK3Zv
aWQgUmVuZGVyZXI5OjpzdGFydFNjZW5lKCkKK3sKKyAgICBpZiAoIW1TY2VuZVN0YXJ0ZWQpCisg
ICAgeworICAgICAgICBsb25nIHJlc3VsdCA9IG1EZXZpY2UtPkJlZ2luU2NlbmUoKTsKKyAgICAg
ICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIGRlZmVu
c2l2ZSBjaGVja2luZyBhZ2FpbnN0IHRoZSBkZXZpY2UgYmVpbmcKKyAgICAgICAgICAgIC8vIGxv
c3QgYXQgdW5leHBlY3RlZCB0aW1lcy4KKyAgICAgICAgICAgIG1TY2VuZVN0YXJ0ZWQgPSB0cnVl
OworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFJlbmRlcmVyOTo6ZW5kU2NlbmUoKQorewor
ICAgIGlmIChtU2NlbmVTdGFydGVkKQorICAgIHsKKyAgICAgICAgLy8gRW5kU2NlbmUgY2FuIGZh
aWwgaWYgdGhlIGRldmljZSB3YXMgbG9zdCwgZm9yIGV4YW1wbGUgZHVlCisgICAgICAgIC8vIHRv
IGEgVERSIGR1cmluZyBhIGRyYXcgY2FsbC4KKyAgICAgICAgbURldmljZS0+RW5kU2NlbmUoKTsK
KyAgICAgICAgbVNjZW5lU3RhcnRlZCA9IGZhbHNlOworICAgIH0KK30KKwordm9pZCBSZW5kZXJl
cjk6OnN5bmMoYm9vbCBibG9jaykKK3sKKyAgICBIUkVTVUxUIHJlc3VsdDsKKworICAgIElEaXJl
Y3QzRFF1ZXJ5OSogcXVlcnkgPSBhbGxvY2F0ZUV2ZW50UXVlcnkoKTsKKyAgICBpZiAoIXF1ZXJ5
KQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHJlc3VsdCA9IHF1ZXJ5LT5J
c3N1ZShEM0RJU1NVRV9FTkQpOworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAg
ICBkbworICAgIHsKKyAgICAgICAgcmVzdWx0ID0gcXVlcnktPkdldERhdGEoTlVMTCwgMCwgRDNE
R0VUREFUQV9GTFVTSCk7CisKKyAgICAgICAgaWYoYmxvY2sgJiYgcmVzdWx0ID09IFNfRkFMU0Up
CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEtlZXAgcG9sbGluZywgYnV0IGFsbG93IG90aGVy
IHRocmVhZHMgdG8gZG8gc29tZXRoaW5nIHVzZWZ1bCBmaXJzdAorICAgICAgICAgICAgU2xlZXAo
MCk7CisgICAgICAgICAgICAvLyBleHBsaWNpdGx5IGNoZWNrIGZvciBkZXZpY2UgbG9zcworICAg
ICAgICAgICAgLy8gc29tZSBkcml2ZXJzIHNlZW0gdG8gcmV0dXJuIFNfRkFMU0UgZXZlbiBpZiB0
aGUgZGV2aWNlIGlzIGxvc3QKKyAgICAgICAgICAgIC8vIGluc3RlYWQgb2YgRDNERVJSX0RFVklD
RUxPU1QgbGlrZSB0aGV5IHNob3VsZAorICAgICAgICAgICAgaWYgKHRlc3REZXZpY2VMb3N0KGZh
bHNlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBEM0RFUlJfREVW
SUNFTE9TVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICB3aGlsZShibG9j
ayAmJiByZXN1bHQgPT0gU19GQUxTRSk7CisKKyAgICBmcmVlRXZlbnRRdWVyeShxdWVyeSk7CisK
KyAgICBpZiAoZDNkOTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKKyAgICB7CisgICAgICAg
IG5vdGlmeURldmljZUxvc3QoKTsKKyAgICB9Cit9CisKK1N3YXBDaGFpbiAqUmVuZGVyZXI5Ojpj
cmVhdGVTd2FwQ2hhaW4oSFdORCB3aW5kb3csIEhBTkRMRSBzaGFyZUhhbmRsZSwgR0xlbnVtIGJh
Y2tCdWZmZXJGb3JtYXQsIEdMZW51bSBkZXB0aEJ1ZmZlckZvcm1hdCkKK3sKKyAgICByZXR1cm4g
bmV3IHJ4OjpTd2FwQ2hhaW45KHRoaXMsIHdpbmRvdywgc2hhcmVIYW5kbGUsIGJhY2tCdWZmZXJG
b3JtYXQsIGRlcHRoQnVmZmVyRm9ybWF0KTsKK30KKworSURpcmVjdDNEUXVlcnk5KiBSZW5kZXJl
cjk6OmFsbG9jYXRlRXZlbnRRdWVyeSgpCit7CisgICAgSURpcmVjdDNEUXVlcnk5ICpxdWVyeSA9
IE5VTEw7CisKKyAgICBpZiAobUV2ZW50UXVlcnlQb29sLmVtcHR5KCkpCisgICAgeworICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVF1ZXJ5KEQzRFFVRVJZVFlQRV9FVkVO
VCwgJnF1ZXJ5KTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgcXVlcnkgPSBtRXZlbnRRdWVyeVBvb2wuYmFjaygpOwor
ICAgICAgICBtRXZlbnRRdWVyeVBvb2wucG9wX2JhY2soKTsKKyAgICB9CisKKyAgICByZXR1cm4g
cXVlcnk7Cit9CisKK3ZvaWQgUmVuZGVyZXI5OjpmcmVlRXZlbnRRdWVyeShJRGlyZWN0M0RRdWVy
eTkqIHF1ZXJ5KQoreworICAgIGlmIChtRXZlbnRRdWVyeVBvb2wuc2l6ZSgpID4gMTAwMCkKKyAg
ICB7CisgICAgICAgIHF1ZXJ5LT5SZWxlYXNlKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIG1FdmVudFF1ZXJ5UG9vbC5wdXNoX2JhY2socXVlcnkpOworICAgIH0KK30KKworSURp
cmVjdDNEVmVydGV4U2hhZGVyOSAqUmVuZGVyZXI5OjpjcmVhdGVWZXJ0ZXhTaGFkZXIoY29uc3Qg
RFdPUkQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoKQoreworICAgIHJldHVybiBtVmVydGV4U2hh
ZGVyQ2FjaGUuY3JlYXRlKGZ1bmN0aW9uLCBsZW5ndGgpOworfQorCitJRGlyZWN0M0RQaXhlbFNo
YWRlcjkgKlJlbmRlcmVyOTo6Y3JlYXRlUGl4ZWxTaGFkZXIoY29uc3QgRFdPUkQgKmZ1bmN0aW9u
LCBzaXplX3QgbGVuZ3RoKQoreworICAgIHJldHVybiBtUGl4ZWxTaGFkZXJDYWNoZS5jcmVhdGUo
ZnVuY3Rpb24sIGxlbmd0aCk7Cit9CisKK0hSRVNVTFQgUmVuZGVyZXI5OjpjcmVhdGVWZXJ0ZXhC
dWZmZXIoVUlOVCBMZW5ndGgsIERXT1JEIFVzYWdlLCBJRGlyZWN0M0RWZXJ0ZXhCdWZmZXI5ICoq
cHBWZXJ0ZXhCdWZmZXIpCit7CisgICAgRDNEUE9PTCBQb29sID0gZ2V0QnVmZmVyUG9vbChVc2Fn
ZSk7CisgICAgcmV0dXJuIG1EZXZpY2UtPkNyZWF0ZVZlcnRleEJ1ZmZlcihMZW5ndGgsIFVzYWdl
LCAwLCBQb29sLCBwcFZlcnRleEJ1ZmZlciwgTlVMTCk7Cit9CisKK1ZlcnRleEJ1ZmZlciAqUmVu
ZGVyZXI5OjpjcmVhdGVWZXJ0ZXhCdWZmZXIoKQoreworICAgIHJldHVybiBuZXcgVmVydGV4QnVm
ZmVyOSh0aGlzKTsKK30KKworSFJFU1VMVCBSZW5kZXJlcjk6OmNyZWF0ZUluZGV4QnVmZmVyKFVJ
TlQgTGVuZ3RoLCBEV09SRCBVc2FnZSwgRDNERk9STUFUIEZvcm1hdCwgSURpcmVjdDNESW5kZXhC
dWZmZXI5ICoqcHBJbmRleEJ1ZmZlcikKK3sKKyAgICBEM0RQT09MIFBvb2wgPSBnZXRCdWZmZXJQ
b29sKFVzYWdlKTsKKyAgICByZXR1cm4gbURldmljZS0+Q3JlYXRlSW5kZXhCdWZmZXIoTGVuZ3Ro
LCBVc2FnZSwgRm9ybWF0LCBQb29sLCBwcEluZGV4QnVmZmVyLCBOVUxMKTsKK30KKworSW5kZXhC
dWZmZXIgKlJlbmRlcmVyOTo6Y3JlYXRlSW5kZXhCdWZmZXIoKQoreworICAgIHJldHVybiBuZXcg
SW5kZXhCdWZmZXI5KHRoaXMpOworfQorCitCdWZmZXJTdG9yYWdlICpSZW5kZXJlcjk6OmNyZWF0
ZUJ1ZmZlclN0b3JhZ2UoKQoreworICAgIHJldHVybiBuZXcgQnVmZmVyU3RvcmFnZTkoKTsKK30K
KworUXVlcnlJbXBsICpSZW5kZXJlcjk6OmNyZWF0ZVF1ZXJ5KEdMZW51bSB0eXBlKQoreworICAg
IHJldHVybiBuZXcgUXVlcnk5KHRoaXMsIHR5cGUpOworfQorCitGZW5jZUltcGwgKlJlbmRlcmVy
OTo6Y3JlYXRlRmVuY2UoKQoreworICAgIHJldHVybiBuZXcgRmVuY2U5KHRoaXMpOworfQorCit2
b2lkIFJlbmRlcmVyOTo6c2V0U2FtcGxlclN0YXRlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQg
aW5kZXgsIGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkKK3sKKyAgICBib29s
ICpmb3JjZVNldFNhbXBsZXJzID0gKHR5cGUgPT0gZ2w6OlNBTVBMRVJfUElYRUwpID8gbUZvcmNl
U2V0UGl4ZWxTYW1wbGVyU3RhdGVzIDogbUZvcmNlU2V0VmVydGV4U2FtcGxlclN0YXRlczsKKyAg
ICBnbDo6U2FtcGxlclN0YXRlICphcHBsaWVkU2FtcGxlcnMgPSAodHlwZSA9PSBnbDo6U0FNUExF
Ul9QSVhFTCkgPyBtQ3VyUGl4ZWxTYW1wbGVyU3RhdGVzOiBtQ3VyVmVydGV4U2FtcGxlclN0YXRl
czsKKworICAgIGlmIChmb3JjZVNldFNhbXBsZXJzW2luZGV4XSB8fCBtZW1jbXAoJnNhbXBsZXJT
dGF0ZSwgJmFwcGxpZWRTYW1wbGVyc1tpbmRleF0sIHNpemVvZihnbDo6U2FtcGxlclN0YXRlKSkg
IT0gMCkKKyAgICB7CisgICAgICAgIGludCBkM2RTYW1wbGVyT2Zmc2V0ID0gKHR5cGUgPT0gZ2w6
OlNBTVBMRVJfUElYRUwpID8gMCA6IEQzRFZFUlRFWFRFWFRVUkVTQU1QTEVSMDsKKyAgICAgICAg
aW50IGQzZFNhbXBsZXIgPSBpbmRleCArIGQzZFNhbXBsZXJPZmZzZXQ7CisKKyAgICAgICAgbURl
dmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfQUREUkVTU1UsIGdsX2Qz
ZDk6OkNvbnZlcnRUZXh0dXJlV3JhcChzYW1wbGVyU3RhdGUud3JhcFMpKTsKKyAgICAgICAgbURl
dmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfQUREUkVTU1YsIGdsX2Qz
ZDk6OkNvbnZlcnRUZXh0dXJlV3JhcChzYW1wbGVyU3RhdGUud3JhcFQpKTsKKworICAgICAgICBt
RGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9NQUdGSUxURVIsIGds
X2QzZDk6OkNvbnZlcnRNYWdGaWx0ZXIoc2FtcGxlclN0YXRlLm1hZ0ZpbHRlciwgc2FtcGxlclN0
YXRlLm1heEFuaXNvdHJvcHkpKTsKKyAgICAgICAgRDNEVEVYVFVSRUZJTFRFUlRZUEUgZDNkTWlu
RmlsdGVyLCBkM2RNaXBGaWx0ZXI7CisgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRNaW5GaWx0ZXIo
c2FtcGxlclN0YXRlLm1pbkZpbHRlciwgJmQzZE1pbkZpbHRlciwgJmQzZE1pcEZpbHRlciwgc2Ft
cGxlclN0YXRlLm1heEFuaXNvdHJvcHkpOworICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3Rh
dGUoZDNkU2FtcGxlciwgRDNEU0FNUF9NSU5GSUxURVIsIGQzZE1pbkZpbHRlcik7CisgICAgICAg
IG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01JUEZJTFRFUiwg
ZDNkTWlwRmlsdGVyKTsKKyAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBs
ZXIsIEQzRFNBTVBfTUFYTUlQTEVWRUwsIHNhbXBsZXJTdGF0ZS5sb2RPZmZzZXQpOworICAgICAg
ICBpZiAobVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01BWEFO
SVNPVFJPUFksIChEV09SRClzYW1wbGVyU3RhdGUubWF4QW5pc290cm9weSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBmb3JjZVNldFNhbXBsZXJzW2luZGV4XSA9IGZhbHNlOworICAgIGFwcGxp
ZWRTYW1wbGVyc1tpbmRleF0gPSBzYW1wbGVyU3RhdGU7Cit9CisKK3ZvaWQgUmVuZGVyZXI5Ojpz
ZXRUZXh0dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGdsOjpUZXh0dXJlICp0
ZXh0dXJlKQoreworICAgIGludCBkM2RTYW1wbGVyT2Zmc2V0ID0gKHR5cGUgPT0gZ2w6OlNBTVBM
RVJfUElYRUwpID8gMCA6IEQzRFZFUlRFWFRFWFRVUkVTQU1QTEVSMDsKKyAgICBpbnQgZDNkU2Ft
cGxlciA9IGluZGV4ICsgZDNkU2FtcGxlck9mZnNldDsKKyAgICBJRGlyZWN0M0RCYXNlVGV4dHVy
ZTkgKmQzZFRleHR1cmUgPSBOVUxMOworICAgIHVuc2lnbmVkIGludCBzZXJpYWwgPSAwOworICAg
IGJvb2wgZm9yY2VTZXRUZXh0dXJlID0gZmFsc2U7CisKKyAgICB1bnNpZ25lZCBpbnQgKmFwcGxp
ZWRTZXJpYWxzID0gKHR5cGUgPT0gZ2w6OlNBTVBMRVJfUElYRUwpID8gbUN1clBpeGVsVGV4dHVy
ZVNlcmlhbHMgOiBtQ3VyVmVydGV4VGV4dHVyZVNlcmlhbHM7CisKKyAgICBpZiAodGV4dHVyZSkK
KyAgICB7CisgICAgICAgIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlICp0ZXhTdG9yYWdlID0gdGV4
dHVyZS0+Z2V0TmF0aXZlVGV4dHVyZSgpOworICAgICAgICBpZiAodGV4U3RvcmFnZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgVGV4dHVyZVN0b3JhZ2U5ICpzdG9yYWdlOSA9IFRleHR1cmVTdG9y
YWdlOTo6bWFrZVRleHR1cmVTdG9yYWdlOSh0ZXhTdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2Uo
KSk7CisgICAgICAgICAgICBkM2RUZXh0dXJlID0gc3RvcmFnZTktPmdldEJhc2VUZXh0dXJlKCk7
CisgICAgICAgIH0KKyAgICAgICAgLy8gSWYgd2UgZ2V0IE5VTEwgYmFjayBmcm9tIGdldEJhc2VU
ZXh0dXJlIGhlcmUsIHNvbWV0aGluZyB3ZW50IHdyb25nCisgICAgICAgIC8vIGluIHRoZSB0ZXh0
dXJlIGNsYXNzIGFuZCB3ZSdyZSB1bmV4cGVjdGVkbHkgbWlzc2luZyB0aGUgZDNkIHRleHR1cmUK
KyAgICAgICAgQVNTRVJUKGQzZFRleHR1cmUgIT0gTlVMTCk7CisKKyAgICAgICAgc2VyaWFsID0g
dGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpOworICAgICAgICBmb3JjZVNldFRleHR1cmUgPSB0
ZXh0dXJlLT5oYXNEaXJ0eUltYWdlcygpOworICAgIH0KKworICAgIGlmIChmb3JjZVNldFRleHR1
cmUgfHwgYXBwbGllZFNlcmlhbHNbaW5kZXhdICE9IHNlcmlhbCkKKyAgICB7CisgICAgICAgIG1E
ZXZpY2UtPlNldFRleHR1cmUoZDNkU2FtcGxlciwgZDNkVGV4dHVyZSk7CisgICAgfQorCisgICAg
YXBwbGllZFNlcmlhbHNbaW5kZXhdID0gc2VyaWFsOworfQorCit2b2lkIFJlbmRlcmVyOTo6c2V0
UmFzdGVyaXplclN0YXRlKGNvbnN0IGdsOjpSYXN0ZXJpemVyU3RhdGUgJnJhc3RlclN0YXRlKQor
eworICAgIGJvb2wgcmFzdGVyU3RhdGVDaGFuZ2VkID0gbUZvcmNlU2V0UmFzdGVyU3RhdGUgfHwg
bWVtY21wKCZyYXN0ZXJTdGF0ZSwgJm1DdXJSYXN0ZXJTdGF0ZSwgc2l6ZW9mKGdsOjpSYXN0ZXJp
emVyU3RhdGUpKSAhPSAwOworCisgICAgaWYgKHJhc3RlclN0YXRlQ2hhbmdlZCkKKyAgICB7Cisg
ICAgICAgIC8vIFNldCB0aGUgY3VsbCBtb2RlCisgICAgICAgIGlmIChyYXN0ZXJTdGF0ZS5jdWxs
RmFjZSkKKyAgICAgICAgeworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfQ1VMTE1PREUsIGdsX2QzZDk6OkNvbnZlcnRDdWxsTW9kZShyYXN0ZXJTdGF0ZS5jdWxsTW9k
ZSwgcmFzdGVyU3RhdGUuZnJvbnRGYWNlKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9E
RSwgRDNEQ1VMTF9OT05FKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyYXN0ZXJTdGF0ZS5w
b2x5Z29uT2Zmc2V0RmlsbCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1DdXJEZXB0aFNp
emUgPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX1NMT1BFU0NBTEVERVBUSEJJQVMsICooRFdPUkQqKSZyYXN0ZXJTdGF0ZS5w
b2x5Z29uT2Zmc2V0RmFjdG9yKTsKKworICAgICAgICAgICAgICAgIGZsb2F0IGRlcHRoQmlhcyA9
IGxkZXhwKHJhc3RlclN0YXRlLnBvbHlnb25PZmZzZXRVbml0cywgLXN0YXRpY19jYXN0PGludD4o
bUN1ckRlcHRoU2l6ZSkpOworICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX0RFUFRIQklBUywgKihEV09SRCopJmRlcHRoQmlhcyk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19TTE9QRVNDQUxFREVQVEhCSUFTLCAwKTsKKyAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RFUFRIQklBUywgMCk7CisgICAgICAgIH0K
KworICAgICAgICBtQ3VyUmFzdGVyU3RhdGUgPSByYXN0ZXJTdGF0ZTsKKyAgICB9CisKKyAgICBt
Rm9yY2VTZXRSYXN0ZXJTdGF0ZSA9IGZhbHNlOworfQorCit2b2lkIFJlbmRlcmVyOTo6c2V0Qmxl
bmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0
ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNvbG9yICZibGVuZENvbG9yLCB1bnNpZ25lZCBpbnQg
c2FtcGxlTWFzaykKK3sKKyAgICBib29sIGJsZW5kU3RhdGVDaGFuZ2VkID0gbUZvcmNlU2V0Qmxl
bmRTdGF0ZSB8fCBtZW1jbXAoJmJsZW5kU3RhdGUsICZtQ3VyQmxlbmRTdGF0ZSwgc2l6ZW9mKGds
OjpCbGVuZFN0YXRlKSkgIT0gMDsKKyAgICBib29sIGJsZW5kQ29sb3JDaGFuZ2VkID0gbUZvcmNl
U2V0QmxlbmRTdGF0ZSB8fCBtZW1jbXAoJmJsZW5kQ29sb3IsICZtQ3VyQmxlbmRDb2xvciwgc2l6
ZW9mKGdsOjpDb2xvcikpICE9IDA7CisgICAgYm9vbCBzYW1wbGVNYXNrQ2hhbmdlZCA9IG1Gb3Jj
ZVNldEJsZW5kU3RhdGUgfHwgc2FtcGxlTWFzayAhPSBtQ3VyU2FtcGxlTWFzazsKKworICAgIGlm
IChibGVuZFN0YXRlQ2hhbmdlZCB8fCBibGVuZENvbG9yQ2hhbmdlZCkKKyAgICB7CisgICAgICAg
IGlmIChibGVuZFN0YXRlLmJsZW5kKQorICAgICAgICB7CisgICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsKKworICAgICAgICAg
ICAgaWYgKGJsZW5kU3RhdGUuc291cmNlQmxlbmRSR0IgIT0gR0xfQ09OU1RBTlRfQUxQSEEgJiYg
YmxlbmRTdGF0ZS5zb3VyY2VCbGVuZFJHQiAhPSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEg
JiYKKyAgICAgICAgICAgICAgICBibGVuZFN0YXRlLmRlc3RCbGVuZFJHQiAhPSBHTF9DT05TVEFO
VF9BTFBIQSAmJiBibGVuZFN0YXRlLmRlc3RCbGVuZFJHQiAhPSBHTF9PTkVfTUlOVVNfQ09OU1RB
TlRfQUxQSEEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfQkxFTkRGQUNUT1IsIGdsX2QzZDk6OkNvbnZlcnRDb2xvcihibGVuZENv
bG9yKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRGQUNUT1Is
IEQzRENPTE9SX1JHQkEoZ2w6OnVub3JtPDg+KGJsZW5kQ29sb3IuYWxwaGEpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsOjp1bm9ybTw4PihibGVuZENvbG9yLmFscGhhKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bDo6dW5vcm08OD4oYmxlbmRDb2xvci5hbHBoYSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3Jt
PDg+KGJsZW5kQ29sb3IuYWxwaGEpKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NSQ0JMRU5ELCBnbF9kM2Q5OjpDb252ZXJ0Qmxl
bmRGdW5jKGJsZW5kU3RhdGUuc291cmNlQmxlbmRSR0IpKTsKKyAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX0RFU1RCTEVORCwgZ2xfZDNkOTo6Q29udmVydEJsZW5kRnVu
YyhibGVuZFN0YXRlLmRlc3RCbGVuZFJHQikpOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfQkxFTkRPUCwgZ2xfZDNkOTo6Q29udmVydEJsZW5kT3AoYmxlbmRTdGF0
ZS5ibGVuZEVxdWF0aW9uUkdCKSk7CisKKyAgICAgICAgICAgIGlmIChibGVuZFN0YXRlLnNvdXJj
ZUJsZW5kUkdCICE9IGJsZW5kU3RhdGUuc291cmNlQmxlbmRBbHBoYSB8fAorICAgICAgICAgICAg
ICAgIGJsZW5kU3RhdGUuZGVzdEJsZW5kUkdCICE9IGJsZW5kU3RhdGUuZGVzdEJsZW5kQWxwaGEg
fHwKKyAgICAgICAgICAgICAgICBibGVuZFN0YXRlLmJsZW5kRXF1YXRpb25SR0IgIT0gYmxlbmRT
dGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5BQkxFLCBU
UlVFKTsKKworICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NS
Q0JMRU5EQUxQSEEsIGdsX2QzZDk6OkNvbnZlcnRCbGVuZEZ1bmMoYmxlbmRTdGF0ZS5zb3VyY2VC
bGVuZEFscGhhKSk7CisgICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfREVTVEJMRU5EQUxQSEEsIGdsX2QzZDk6OkNvbnZlcnRCbGVuZEZ1bmMoYmxlbmRTdGF0ZS5k
ZXN0QmxlbmRBbHBoYSkpOworICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX0JMRU5ET1BBTFBIQSwgZ2xfZDNkOTo6Q29udmVydEJsZW5kT3AoYmxlbmRTdGF0ZS5i
bGVuZEVxdWF0aW9uQWxwaGEpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChibGVuZFN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgRklYTUUoIlNhbXBsZSBhbHBoYSB0byBjb3ZlcmFnZSBpcyB1bmltcGxlbWVu
dGVkLiIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2V0IHRoZSBjb2xvciBtYXNrCisgICAg
ICAgIGJvb2wgemVyb0NvbG9yTWFza0FsbG93ZWQgPSBnZXRBZGFwdGVyVmVuZG9yKCkgIT0gVkVO
RE9SX0lEX0FNRDsKKyAgICAgICAgLy8gQXBwYXJlbnRseSBzb21lIEFUSSBjYXJkcyBoYXZlIGEg
YnVnIHdoZXJlIGEgZHJhdyB3aXRoIGEgemVybyBjb2xvcgorICAgICAgICAvLyB3cml0ZSBtYXNr
IGNhbiBjYXVzZSBsYXRlciBkcmF3cyB0byBoYXZlIGluY29ycmVjdCByZXN1bHRzLiBJbnN0ZWFk
LAorICAgICAgICAvLyBzZXQgYSBub256ZXJvIGNvbG9yIHdyaXRlIG1hc2sgYnV0IG1vZGlmeSB0
aGUgYmxlbmQgc3RhdGUgc28gdGhhdCBubworICAgICAgICAvLyBkcmF3aW5nIGlzIGRvbmUuCisg
ICAgICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmdsZXByb2plY3QvaXNzdWVzL2Rl
dGFpbD9pZD0xNjkKKworICAgICAgICBEV09SRCBjb2xvck1hc2sgPSBnbF9kM2Q5OjpDb252ZXJ0
Q29sb3JNYXNrKGJsZW5kU3RhdGUuY29sb3JNYXNrUmVkLCBibGVuZFN0YXRlLmNvbG9yTWFza0dy
ZWVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJsZW5kU3RhdGUuY29sb3JNYXNrQmx1ZSwgYmxlbmRTdGF0ZS5jb2xvck1hc2tBbHBoYSk7Cisg
ICAgICAgIGlmIChjb2xvck1hc2sgPT0gMCAmJiAhemVyb0NvbG9yTWFza0FsbG93ZWQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIC8vIEVuYWJsZSBncmVlbiBjaGFubmVsLCBidXQgc2V0IGJsZW5k
aW5nIHNvIG5vdGhpbmcgd2lsbCBiZSBkcmF3bi4KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIEQzRENPTE9SV1JJVEVFTkFCTEVfR1JF
RU4pOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVO
REVOQUJMRSwgVFJVRSk7CisKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX1NSQ0JMRU5ELCBEM0RCTEVORF9aRVJPKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0RFU1RCTEVORCwgRDNEQkxFTkRfT05FKTsKKyAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JMRU5ET1AsIEQzREJMRU5ET1BfQUREKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIGNvbG9yTWFzayk7CisgICAgICAg
IH0KKworICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ESVRIRVJFTkFCTEUs
IGJsZW5kU3RhdGUuZGl0aGVyID8gVFJVRSA6IEZBTFNFKTsKKworICAgICAgICBtQ3VyQmxlbmRT
dGF0ZSA9IGJsZW5kU3RhdGU7CisgICAgICAgIG1DdXJCbGVuZENvbG9yID0gYmxlbmRDb2xvcjsK
KyAgICB9CisKKyAgICBpZiAoc2FtcGxlTWFza0NoYW5nZWQpCisgICAgeworICAgICAgICAvLyBT
ZXQgdGhlIG11bHRpc2FtcGxlIG1hc2sKKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfTVVMVElTQU1QTEVBTlRJQUxJQVMsIFRSVUUpOworICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRU1BU0ssIHN0YXRpY19jYXN0PERXT1JEPihzYW1w
bGVNYXNrKSk7CisKKyAgICAgICAgbUN1clNhbXBsZU1hc2sgPSBzYW1wbGVNYXNrOworICAgIH0K
KworICAgIG1Gb3JjZVNldEJsZW5kU3RhdGUgPSBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJlcjk6
OnNldERlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmZGVwdGhT
dGVuY2lsU3RhdGUsIGludCBzdGVuY2lsUmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBzdGVuY2lsQmFja1JlZiwgYm9vbCBmcm9udEZhY2VDQ1cpCit7CisgICAg
Ym9vbCBkZXB0aFN0ZW5jaWxTdGF0ZUNoYW5nZWQgPSBtRm9yY2VTZXREZXB0aFN0ZW5jaWxTdGF0
ZSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtY21wKCZkZXB0aFN0
ZW5jaWxTdGF0ZSwgJm1DdXJEZXB0aFN0ZW5jaWxTdGF0ZSwgc2l6ZW9mKGdsOjpEZXB0aFN0ZW5j
aWxTdGF0ZSkpICE9IDA7CisgICAgYm9vbCBzdGVuY2lsUmVmQ2hhbmdlZCA9IG1Gb3JjZVNldERl
cHRoU3RlbmNpbFN0YXRlIHx8IHN0ZW5jaWxSZWYgIT0gbUN1clN0ZW5jaWxSZWYgfHwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RlbmNpbEJhY2tSZWYgIT0gbUN1clN0ZW5jaWxCYWNr
UmVmOworICAgIGJvb2wgZnJvbnRGYWNlQ0NXQ2hhbmdlZCA9IG1Gb3JjZVNldERlcHRoU3RlbmNp
bFN0YXRlIHx8IGZyb250RmFjZUNDVyAhPSBtQ3VyRnJvbnRGYWNlQ0NXOworCisgICAgaWYgKGRl
cHRoU3RlbmNpbFN0YXRlQ2hhbmdlZCkKKyAgICB7CisgICAgICAgIGlmIChkZXB0aFN0ZW5jaWxT
dGF0ZS5kZXB0aFRlc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX1pFTkFCTEUsIEQzRFpCX1RSVUUpOworICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkZVTkMsIGdsX2QzZDk6OkNvbnZlcnRDb21wYXJpc29uKGRl
cHRoU3RlbmNpbFN0YXRlLmRlcHRoRnVuYykpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJM
RSwgRDNEWkJfRkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAgbUN1ckRlcHRoU3RlbmNpbFN0
YXRlID0gZGVwdGhTdGVuY2lsU3RhdGU7CisgICAgfQorCisgICAgaWYgKGRlcHRoU3RlbmNpbFN0
YXRlQ2hhbmdlZCB8fCBzdGVuY2lsUmVmQ2hhbmdlZCB8fCBmcm9udEZhY2VDQ1dDaGFuZ2VkKQor
ICAgIHsKKyAgICAgICAgaWYgKGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxUZXN0ICYmIG1DdXJT
dGVuY2lsU2l6ZSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIFRSVUUpOworICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfVFdPU0lERURTVEVOQ0lMTU9ERSwgVFJVRSk7CisKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiBVbnN1cHBvcnRlZCBieSBEM0Q5CisgICAgICAgICAgICBjb25zdCBE
M0RSRU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxSRUYgPSBEM0RSU19TVEVOQ0lMUkVG
OworICAgICAgICAgICAgY29uc3QgRDNEUkVOREVSU1RBVEVUWVBFIEQzRFJTX0NDV19TVEVOQ0lM
TUFTSyA9IEQzRFJTX1NURU5DSUxNQVNLOworICAgICAgICAgICAgY29uc3QgRDNEUkVOREVSU1RB
VEVUWVBFIEQzRFJTX0NDV19TVEVOQ0lMV1JJVEVNQVNLID0gRDNEUlNfU1RFTkNJTFdSSVRFTUFT
SzsKKyAgICAgICAgICAgIGlmIChkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsV3JpdGVtYXNrICE9
IGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrIHx8CisgICAgICAgICAgICAg
ICAgc3RlbmNpbFJlZiAhPSBzdGVuY2lsQmFja1JlZiB8fAorICAgICAgICAgICAgICAgIGRlcHRo
U3RlbmNpbFN0YXRlLnN0ZW5jaWxNYXNrICE9IGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxCYWNr
TWFzaykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBFUlIoIlNlcGFyYXRlIGZyb250
L2JhY2sgc3RlbmNpbCB3cml0ZW1hc2tzLCByZWZlcmVuY2UgdmFsdWVzLCBvciBzdGVuY2lsIG1h
c2sgdmFsdWVzIGFyZSBpbnZhbGlkIHVuZGVyIFdlYkdMLiIpOworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBnZXQgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgc3RlbmNpbCByZWYKKyAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBtYXhTdGVuY2lsID0gKDEgPDwgbUN1clN0ZW5jaWxTaXpl
KSAtIDE7CisKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGZyb250RmFjZUND
VyA/IEQzRFJTX1NURU5DSUxXUklURU1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTFdSSVRFTUFTSywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoU3RlbmNpbFN0YXRlLnN0
ZW5jaWxXcml0ZW1hc2spOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoZnJv
bnRGYWNlQ0NXID8gRDNEUlNfU1RFTkNJTEZVTkMgOiBEM0RSU19DQ1dfU1RFTkNJTEZVTkMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9kM2Q5OjpDb252ZXJ0Q29tcGFy
aXNvbihkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsRnVuYykpOworCisgICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShmcm9udEZhY2VDQ1cgPyBEM0RSU19TVEVOQ0lMUkVGIDogRDNE
UlNfQ0NXX1NURU5DSUxSRUYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
c3RlbmNpbFJlZiA8IChpbnQpbWF4U3RlbmNpbCkgPyBzdGVuY2lsUmVmIDogbWF4U3RlbmNpbCk7
CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShmcm9udEZhY2VDQ1cgPyBEM0RS
U19TVEVOQ0lMTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMTUFTSywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxNYXNrKTsKKworICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoZnJvbnRGYWNlQ0NXID8gRDNEUlNfU1RF
TkNJTEZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTEZBSUwsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnbF9kM2Q5OjpDb252ZXJ0U3RlbmNpbE9wKGRlcHRoU3RlbmNpbFN0YXRl
LnN0ZW5jaWxGYWlsKSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShmcm9u
dEZhY2VDQ1cgPyBEM0RSU19TVEVOQ0lMWkZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTFpGQUlMLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6Q29udmVydFN0ZW5j
aWxPcChkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbCkpOworICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoZnJvbnRGYWNlQ0NXID8gRDNEUlNfU1RFTkNJTFBB
U1MgOiBEM0RSU19DQ1dfU1RFTkNJTFBBU1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbF9kM2Q5OjpDb252ZXJ0U3RlbmNpbE9wKGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5j
aWxQYXNzRGVwdGhQYXNzKSk7CisKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KCFmcm9udEZhY2VDQ1cgPyBEM0RSU19TVEVOQ0lMV1JJVEVNQVNLIDogRDNEUlNfQ0NXX1NURU5D
SUxXUklURU1BU0ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aFN0
ZW5jaWxTdGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzayk7CisgICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZSghZnJvbnRGYWNlQ0NXID8gRDNEUlNfU1RFTkNJTEZVTkMgOiBEM0RSU19D
Q1dfU1RFTkNJTEZVTkMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9k
M2Q5OjpDb252ZXJ0Q29tcGFyaXNvbihkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsQmFja0Z1bmMp
KTsKKworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoIWZyb250RmFjZUNDVyA/
IEQzRFJTX1NURU5DSUxSRUYgOiBEM0RSU19DQ1dfU1RFTkNJTFJFRiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChzdGVuY2lsQmFja1JlZiA8IChpbnQpbWF4U3RlbmNpbCkg
PyBzdGVuY2lsQmFja1JlZiA6IG1heFN0ZW5jaWwpOworICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoIWZyb250RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxNQVNLIDogRDNEUlNfQ0NX
X1NURU5DSUxNQVNLLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGhT
dGVuY2lsU3RhdGUuc3RlbmNpbEJhY2tNYXNrKTsKKworICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoIWZyb250RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxGQUlMIDogRDNEUlNfQ0NX
X1NURU5DSUxGQUlMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNk
OTo6Q29udmVydFN0ZW5jaWxPcChkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsQmFja0ZhaWwpKTsK
KyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKCFmcm9udEZhY2VDQ1cgPyBEM0RS
U19TVEVOQ0lMWkZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTFpGQUlMLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6Q29udmVydFN0ZW5jaWxPcChkZXB0aFN0ZW5j
aWxTdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwpKTsKKyAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKCFmcm9udEZhY2VDQ1cgPyBEM0RSU19TVEVOQ0lMUEFTUyA6IEQzRFJT
X0NDV19TVEVOQ0lMUEFTUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGds
X2QzZDk6OkNvbnZlcnRTdGVuY2lsT3AoZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbEJhY2tQYXNz
RGVwdGhQYXNzKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBGQUxTRSk7
CisgICAgICAgIH0KKworICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJ
VEVFTkFCTEUsIGRlcHRoU3RlbmNpbFN0YXRlLmRlcHRoTWFzayA/IFRSVUUgOiBGQUxTRSk7CisK
KyAgICAgICAgbUN1clN0ZW5jaWxSZWYgPSBzdGVuY2lsUmVmOworICAgICAgICBtQ3VyU3RlbmNp
bEJhY2tSZWYgPSBzdGVuY2lsQmFja1JlZjsKKyAgICAgICAgbUN1ckZyb250RmFjZUNDVyA9IGZy
b250RmFjZUNDVzsKKyAgICB9CisKKyAgICBtRm9yY2VTZXREZXB0aFN0ZW5jaWxTdGF0ZSA9IGZh
bHNlOworfQorCit2b2lkIFJlbmRlcmVyOTo6c2V0U2Npc3NvclJlY3RhbmdsZShjb25zdCBnbDo6
UmVjdGFuZ2xlICZzY2lzc29yLCBib29sIGVuYWJsZWQpCit7CisgICAgYm9vbCBzY2lzc29yQ2hh
bmdlZCA9IG1Gb3JjZVNldFNjaXNzb3IgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWVt
Y21wKCZzY2lzc29yLCAmbUN1clNjaXNzb3IsIHNpemVvZihnbDo6UmVjdGFuZ2xlKSkgIT0gMCB8
fAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkICE9IG1TY2lzc29yRW5hYmxlZDsK
KworICAgIGlmIChzY2lzc29yQ2hhbmdlZCkKKyAgICB7CisgICAgICAgIGlmIChlbmFibGVkKQor
ICAgICAgICB7CisgICAgICAgICAgICBSRUNUIHJlY3Q7CisgICAgICAgICAgICByZWN0LmxlZnQg
PSBnbDo6Y2xhbXAoc2Npc3Nvci54LCAwLCBzdGF0aWNfY2FzdDxpbnQ+KG1SZW5kZXJUYXJnZXRE
ZXNjLndpZHRoKSk7CisgICAgICAgICAgICByZWN0LnRvcCA9IGdsOjpjbGFtcChzY2lzc29yLnks
IDAsIHN0YXRpY19jYXN0PGludD4obVJlbmRlclRhcmdldERlc2MuaGVpZ2h0KSk7CisgICAgICAg
ICAgICByZWN0LnJpZ2h0ID0gZ2w6OmNsYW1wKHNjaXNzb3IueCArIHNjaXNzb3Iud2lkdGgsIDAs
IHN0YXRpY19jYXN0PGludD4obVJlbmRlclRhcmdldERlc2Mud2lkdGgpKTsKKyAgICAgICAgICAg
IHJlY3QuYm90dG9tID0gZ2w6OmNsYW1wKHNjaXNzb3IueSArIHNjaXNzb3IuaGVpZ2h0LCAwLCBz
dGF0aWNfY2FzdDxpbnQ+KG1SZW5kZXJUYXJnZXREZXNjLmhlaWdodCkpOworICAgICAgICAgICAg
bURldmljZS0+U2V0U2Npc3NvclJlY3QoJnJlY3QpOworICAgICAgICB9CisKKyAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NPUlRFU1RFTkFCTEUsIGVuYWJsZWQgPyBU
UlVFIDogRkFMU0UpOworCisgICAgICAgIG1TY2lzc29yRW5hYmxlZCA9IGVuYWJsZWQ7CisgICAg
ICAgIG1DdXJTY2lzc29yID0gc2Npc3NvcjsKKyAgICB9CisKKyAgICBtRm9yY2VTZXRTY2lzc29y
ID0gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyZXI5OjpzZXRWaWV3cG9ydChjb25zdCBnbDo6UmVj
dGFuZ2xlICZ2aWV3cG9ydCwgZmxvYXQgek5lYXIsIGZsb2F0IHpGYXIsIEdMZW51bSBkcmF3TW9k
ZSwgR0xlbnVtIGZyb250RmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGln
bm9yZVZpZXdwb3J0KQoreworICAgIGdsOjpSZWN0YW5nbGUgYWN0dWFsVmlld3BvcnQgPSB2aWV3
cG9ydDsKKyAgICBmbG9hdCBhY3R1YWxaTmVhciA9IGdsOjpjbGFtcDAxKHpOZWFyKTsKKyAgICBm
bG9hdCBhY3R1YWxaRmFyID0gZ2w6OmNsYW1wMDEoekZhcik7CisgICAgaWYgKGlnbm9yZVZpZXdw
b3J0KQorICAgIHsKKyAgICAgICAgYWN0dWFsVmlld3BvcnQueCA9IDA7CisgICAgICAgIGFjdHVh
bFZpZXdwb3J0LnkgPSAwOworICAgICAgICBhY3R1YWxWaWV3cG9ydC53aWR0aCA9IG1SZW5kZXJU
YXJnZXREZXNjLndpZHRoOworICAgICAgICBhY3R1YWxWaWV3cG9ydC5oZWlnaHQgPSBtUmVuZGVy
VGFyZ2V0RGVzYy5oZWlnaHQ7CisgICAgICAgIGFjdHVhbFpOZWFyID0gMC4wZjsKKyAgICAgICAg
YWN0dWFsWkZhciA9IDEuMGY7CisgICAgfQorCisgICAgRDNEVklFV1BPUlQ5IGR4Vmlld3BvcnQ7
CisgICAgZHhWaWV3cG9ydC5YID0gZ2w6OmNsYW1wKGFjdHVhbFZpZXdwb3J0LngsIDAsIHN0YXRp
Y19jYXN0PGludD4obVJlbmRlclRhcmdldERlc2Mud2lkdGgpKTsKKyAgICBkeFZpZXdwb3J0Llkg
PSBnbDo6Y2xhbXAoYWN0dWFsVmlld3BvcnQueSwgMCwgc3RhdGljX2Nhc3Q8aW50PihtUmVuZGVy
VGFyZ2V0RGVzYy5oZWlnaHQpKTsKKyAgICBkeFZpZXdwb3J0LldpZHRoID0gZ2w6OmNsYW1wKGFj
dHVhbFZpZXdwb3J0LndpZHRoLCAwLCBzdGF0aWNfY2FzdDxpbnQ+KG1SZW5kZXJUYXJnZXREZXNj
LndpZHRoKSAtIHN0YXRpY19jYXN0PGludD4oZHhWaWV3cG9ydC5YKSk7CisgICAgZHhWaWV3cG9y
dC5IZWlnaHQgPSBnbDo6Y2xhbXAoYWN0dWFsVmlld3BvcnQuaGVpZ2h0LCAwLCBzdGF0aWNfY2Fz
dDxpbnQ+KG1SZW5kZXJUYXJnZXREZXNjLmhlaWdodCkgLSBzdGF0aWNfY2FzdDxpbnQ+KGR4Vmll
d3BvcnQuWSkpOworICAgIGR4Vmlld3BvcnQuTWluWiA9IGFjdHVhbFpOZWFyOworICAgIGR4Vmll
d3BvcnQuTWF4WiA9IGFjdHVhbFpGYXI7CisKKyAgICBpZiAoZHhWaWV3cG9ydC5XaWR0aCA8PSAw
IHx8IGR4Vmlld3BvcnQuSGVpZ2h0IDw9IDApCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
ICAgLy8gTm90aGluZyB0byByZW5kZXIKKyAgICB9CisKKyAgICBmbG9hdCBkZXB0aEZyb250ID0g
IWdsOjpJc1RyaWFuZ2xlTW9kZShkcmF3TW9kZSkgPyAwLjBmIDogKGZyb250RmFjZSA9PSBHTF9D
Q1cgPyAxLjBmIDogLTEuMGYpOworCisgICAgYm9vbCB2aWV3cG9ydENoYW5nZWQgPSBtRm9yY2VT
ZXRWaWV3cG9ydCB8fCBtZW1jbXAoJmFjdHVhbFZpZXdwb3J0LCAmbUN1clZpZXdwb3J0LCBzaXpl
b2YoZ2w6OlJlY3RhbmdsZSkpICE9IDAgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFj
dHVhbFpOZWFyICE9IG1DdXJOZWFyIHx8IGFjdHVhbFpGYXIgIT0gbUN1ckZhciB8fCBtQ3VyRGVw
dGhGcm9udCAhPSBkZXB0aEZyb250OworICAgIGlmICh2aWV3cG9ydENoYW5nZWQpCisgICAgewor
ICAgICAgICBtRGV2aWNlLT5TZXRWaWV3cG9ydCgmZHhWaWV3cG9ydCk7CisKKyAgICAgICAgbUN1
clZpZXdwb3J0ID0gYWN0dWFsVmlld3BvcnQ7CisgICAgICAgIG1DdXJOZWFyID0gYWN0dWFsWk5l
YXI7CisgICAgICAgIG1DdXJGYXIgPSBhY3R1YWxaRmFyOworICAgICAgICBtQ3VyRGVwdGhGcm9u
dCA9IGRlcHRoRnJvbnQ7CisKKyAgICAgICAgZHhfVmVydGV4Q29uc3RhbnRzIHZjID0gezB9Owor
ICAgICAgICBkeF9QaXhlbENvbnN0YW50cyBwYyA9IHswfTsKKworICAgICAgICB2Yy52aWV3QWRq
dXN0WzBdID0gKGZsb2F0KSgoYWN0dWFsVmlld3BvcnQud2lkdGggLSAoaW50KWR4Vmlld3BvcnQu
V2lkdGgpICsgMiAqIChhY3R1YWxWaWV3cG9ydC54IC0gKGludClkeFZpZXdwb3J0LlgpIC0gMSkg
LyBkeFZpZXdwb3J0LldpZHRoOworICAgICAgICB2Yy52aWV3QWRqdXN0WzFdID0gKGZsb2F0KSgo
YWN0dWFsVmlld3BvcnQuaGVpZ2h0IC0gKGludClkeFZpZXdwb3J0LkhlaWdodCkgKyAyICogKGFj
dHVhbFZpZXdwb3J0LnkgLSAoaW50KWR4Vmlld3BvcnQuWSkgLSAxKSAvIGR4Vmlld3BvcnQuSGVp
Z2h0OworICAgICAgICB2Yy52aWV3QWRqdXN0WzJdID0gKGZsb2F0KWFjdHVhbFZpZXdwb3J0Lndp
ZHRoIC8gZHhWaWV3cG9ydC5XaWR0aDsKKyAgICAgICAgdmMudmlld0FkanVzdFszXSA9IChmbG9h
dClhY3R1YWxWaWV3cG9ydC5oZWlnaHQgLyBkeFZpZXdwb3J0LkhlaWdodDsKKworICAgICAgICBw
Yy52aWV3Q29vcmRzWzBdID0gYWN0dWFsVmlld3BvcnQud2lkdGggICogMC41ZjsKKyAgICAgICAg
cGMudmlld0Nvb3Jkc1sxXSA9IGFjdHVhbFZpZXdwb3J0LmhlaWdodCAqIDAuNWY7CisgICAgICAg
IHBjLnZpZXdDb29yZHNbMl0gPSBhY3R1YWxWaWV3cG9ydC54ICsgKGFjdHVhbFZpZXdwb3J0Lndp
ZHRoICAqIDAuNWYpOworICAgICAgICBwYy52aWV3Q29vcmRzWzNdID0gYWN0dWFsVmlld3BvcnQu
eSArIChhY3R1YWxWaWV3cG9ydC5oZWlnaHQgKiAwLjVmKTsKKworICAgICAgICBwYy5kZXB0aEZy
b250WzBdID0gKGFjdHVhbFpGYXIgLSBhY3R1YWxaTmVhcikgKiAwLjVmOworICAgICAgICBwYy5k
ZXB0aEZyb250WzFdID0gKGFjdHVhbFpOZWFyICsgYWN0dWFsWkZhcikgKiAwLjVmOworICAgICAg
ICBwYy5kZXB0aEZyb250WzJdID0gZGVwdGhGcm9udDsKKworICAgICAgICB2Yy5kZXB0aFJhbmdl
WzBdID0gYWN0dWFsWk5lYXI7CisgICAgICAgIHZjLmRlcHRoUmFuZ2VbMV0gPSBhY3R1YWxaRmFy
OworICAgICAgICB2Yy5kZXB0aFJhbmdlWzJdID0gYWN0dWFsWkZhciAtIGFjdHVhbFpOZWFyOwor
CisgICAgICAgIHBjLmRlcHRoUmFuZ2VbMF0gPSBhY3R1YWxaTmVhcjsKKyAgICAgICAgcGMuZGVw
dGhSYW5nZVsxXSA9IGFjdHVhbFpGYXI7CisgICAgICAgIHBjLmRlcHRoUmFuZ2VbMl0gPSBhY3R1
YWxaRmFyIC0gYWN0dWFsWk5lYXI7CisKKyAgICAgICAgaWYgKG1lbWNtcCgmdmMsICZtVmVydGV4
Q29uc3RhbnRzLCBzaXplb2YoZHhfVmVydGV4Q29uc3RhbnRzKSkgIT0gMCkKKyAgICAgICAgewor
ICAgICAgICAgICAgbVZlcnRleENvbnN0YW50cyA9IHZjOworICAgICAgICAgICAgbUR4VW5pZm9y
bXNEaXJ0eSA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAobWVtY21wKCZwYywgJm1Q
aXhlbENvbnN0YW50cywgc2l6ZW9mKGR4X1BpeGVsQ29uc3RhbnRzKSkgIT0gMCkKKyAgICAgICAg
eworICAgICAgICAgICAgbVBpeGVsQ29uc3RhbnRzID0gcGM7CisgICAgICAgICAgICBtRHhVbmlm
b3Jtc0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1Gb3JjZVNldFZpZXdw
b3J0ID0gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVuZGVyZXI5OjphcHBs
eVByaW1pdGl2ZVR5cGUoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQpCit7CisgICAgc3dpdGNo
IChtb2RlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfUE9JTlRTOgorICAgICAgICBtUHJpbWl0aXZl
VHlwZSA9IEQzRFBUX1BPSU5UTElTVDsKKyAgICAgICAgbVByaW1pdGl2ZUNvdW50ID0gY291bnQ7
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MSU5FUzoKKyAgICAgICAgbVByaW1pdGl2
ZVR5cGUgPSBEM0RQVF9MSU5FTElTVDsKKyAgICAgICAgbVByaW1pdGl2ZUNvdW50ID0gY291bnQg
LyAyOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTElORV9MT09QOgorICAgICAgICBt
UHJpbWl0aXZlVHlwZSA9IEQzRFBUX0xJTkVTVFJJUDsKKyAgICAgICAgbVByaW1pdGl2ZUNvdW50
ID0gY291bnQgLSAxOyAgIC8vIEQzRCBkb2Vzbid0IHN1cHBvcnQgbGluZSBsb29wcywgc28gd2Ug
ZHJhdyB0aGUgbGFzdCBsaW5lIHNlcGFyYXRlbHkKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX0xJTkVfU1RSSVA6CisgICAgICAgIG1QcmltaXRpdmVUeXBlID0gRDNEUFRfTElORVNUUklQ
OworICAgICAgICBtUHJpbWl0aXZlQ291bnQgPSBjb3VudCAtIDE7CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9UUklBTkdMRVM6CisgICAgICAgIG1QcmltaXRpdmVUeXBlID0gRDNEUFRf
VFJJQU5HTEVMSVNUOworICAgICAgICBtUHJpbWl0aXZlQ291bnQgPSBjb3VudCAvIDM7CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9UUklBTkdMRV9TVFJJUDoKKyAgICAgICAgbVByaW1p
dGl2ZVR5cGUgPSBEM0RQVF9UUklBTkdMRVNUUklQOworICAgICAgICBtUHJpbWl0aXZlQ291bnQg
PSBjb3VudCAtIDI7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9UUklBTkdMRV9GQU46
CisgICAgICAgIG1QcmltaXRpdmVUeXBlID0gRDNEUFRfVFJJQU5HTEVGQU47CisgICAgICAgIG1Q
cmltaXRpdmVDb3VudCA9IGNvdW50IC0gMjsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgZmFsc2UpOworICAg
IH0KKworICAgIHJldHVybiBtUHJpbWl0aXZlQ291bnQgPiAwOworfQorCisKK2dsOjpSZW5kZXJi
dWZmZXIgKlJlbmRlcmVyOTo6Z2V0TnVsbENvbG9yYnVmZmVyKGdsOjpSZW5kZXJidWZmZXIgKmRl
cHRoYnVmZmVyKQoreworICAgIGlmICghZGVwdGhidWZmZXIpCisgICAgeworICAgICAgICBFUlIo
IlVuZXhwZWN0ZWQgbnVsbCBkZXB0aGJ1ZmZlciBmb3IgZGVwdGgtb25seSBGQk8uIik7CisgICAg
ICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIEdMc2l6ZWkgd2lkdGggID0gZGVwdGhidWZm
ZXItPmdldFdpZHRoKCk7CisgICAgR0xzaXplaSBoZWlnaHQgPSBkZXB0aGJ1ZmZlci0+Z2V0SGVp
Z2h0KCk7CisKKyAgICAvLyBzZWFyY2ggY2FjaGVkIG51bGxjb2xvcmJ1ZmZlcnMKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IE5VTV9OVUxMX0NPTE9SQlVGRkVSX0NBQ0hFX0VOVFJJRVM7IGkrKykK
KyAgICB7CisgICAgICAgIGlmIChtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0uYnVmZmVyICE9IE5V
TEwgJiYKKyAgICAgICAgICAgIG1OdWxsQ29sb3JidWZmZXJDYWNoZVtpXS53aWR0aCA9PSB3aWR0
aCAmJgorICAgICAgICAgICAgbU51bGxDb2xvcmJ1ZmZlckNhY2hlW2ldLmhlaWdodCA9PSBoZWln
aHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1OdWxsQ29sb3JidWZmZXJDYWNoZVtpXS5scnVD
b3VudCA9ICsrbU1heE51bGxDb2xvcmJ1ZmZlckxSVTsKKyAgICAgICAgICAgIHJldHVybiBtTnVs
bENvbG9yYnVmZmVyQ2FjaGVbaV0uYnVmZmVyOworICAgICAgICB9CisgICAgfQorCisgICAgZ2w6
OlJlbmRlcmJ1ZmZlciAqbnVsbGJ1ZmZlciA9IG5ldyBnbDo6UmVuZGVyYnVmZmVyKHRoaXMsIDAs
IG5ldyBnbDo6Q29sb3JidWZmZXIodGhpcywgd2lkdGgsIGhlaWdodCwgR0xfTk9ORSwgMCkpOwor
CisgICAgLy8gYWRkIG51bGxidWZmZXIgdG8gdGhlIGNhY2hlCisgICAgTnVsbENvbG9yYnVmZmVy
Q2FjaGVFbnRyeSAqb2xkZXN0ID0gJm1OdWxsQ29sb3JidWZmZXJDYWNoZVswXTsKKyAgICBmb3Ig
KGludCBpID0gMTsgaSA8IE5VTV9OVUxMX0NPTE9SQlVGRkVSX0NBQ0hFX0VOVFJJRVM7IGkrKykK
KyAgICB7CisgICAgICAgIGlmIChtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0ubHJ1Q291bnQgPCBv
bGRlc3QtPmxydUNvdW50KQorICAgICAgICB7CisgICAgICAgICAgICBvbGRlc3QgPSAmbU51bGxD
b2xvcmJ1ZmZlckNhY2hlW2ldOworICAgICAgICB9CisgICAgfQorCisgICAgZGVsZXRlIG9sZGVz
dC0+YnVmZmVyOworICAgIG9sZGVzdC0+YnVmZmVyID0gbnVsbGJ1ZmZlcjsKKyAgICBvbGRlc3Qt
PmxydUNvdW50ID0gKyttTWF4TnVsbENvbG9yYnVmZmVyTFJVOworICAgIG9sZGVzdC0+d2lkdGgg
PSB3aWR0aDsKKyAgICBvbGRlc3QtPmhlaWdodCA9IGhlaWdodDsKKworICAgIHJldHVybiBudWxs
YnVmZmVyOworfQorCitib29sIFJlbmRlcmVyOTo6YXBwbHlSZW5kZXJUYXJnZXQoZ2w6OkZyYW1l
YnVmZmVyICpmcmFtZWJ1ZmZlcikKK3sKKyAgICAvLyBpZiB0aGVyZSBpcyBubyBjb2xvciBhdHRh
Y2htZW50IHdlIG11c3Qgc3ludGhlc2l6ZSBhIE5VTEwgY29sb3JhdHRhY2htZW50CisgICAgLy8g
dG8ga2VlcCB0aGUgRDNEIHJ1bnRpbWUgaGFwcHkuICBUaGlzIHNob3VsZCBvbmx5IGJlIHBvc3Np
YmxlIGlmIGRlcHRoIHRleHR1cmluZy4KKyAgICBnbDo6UmVuZGVyYnVmZmVyICpyZW5kZXJidWZm
ZXJPYmplY3QgPSBOVUxMOworICAgIGlmIChmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJUeXBl
KDApICE9IEdMX05PTkUpCisgICAgeworICAgICAgICByZW5kZXJidWZmZXJPYmplY3QgPSBmcmFt
ZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoMCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIHJlbmRlcmJ1ZmZlck9iamVjdCA9IGdldE51bGxDb2xvcmJ1ZmZlcihmcmFtZWJ1ZmZlci0+
Z2V0RGVwdGhidWZmZXIoKSk7CisgICAgfQorICAgIGlmICghcmVuZGVyYnVmZmVyT2JqZWN0KQor
ICAgIHsKKyAgICAgICAgRVJSKCJ1bmFibGUgdG8gbG9jYXRlIHJlbmRlcmJ1ZmZlciBmb3IgRkJP
LiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCByZW5kZXJUYXJn
ZXRDaGFuZ2VkID0gZmFsc2U7CisgICAgdW5zaWduZWQgaW50IHJlbmRlclRhcmdldFNlcmlhbCA9
IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0U2VyaWFsKCk7CisgICAgaWYgKHJlbmRlclRhcmdldFNl
cmlhbCAhPSBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbCkKKyAgICB7CisgICAgICAgIC8vIEFw
cGx5IHRoZSByZW5kZXIgdGFyZ2V0IG9uIHRoZSBkZXZpY2UKKyAgICAgICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKnJlbmRlclRhcmdldFN1cmZhY2UgPSBOVUxMOworCisgICAgICAgIFJlbmRlclRhcmdl
dCAqcmVuZGVyVGFyZ2V0ID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKTsK
KyAgICAgICAgaWYgKHJlbmRlclRhcmdldCkKKyAgICAgICAgeworICAgICAgICAgICAgcmVuZGVy
VGFyZ2V0U3VyZmFjZSA9IFJlbmRlclRhcmdldDk6Om1ha2VSZW5kZXJUYXJnZXQ5KHJlbmRlclRh
cmdldCktPmdldFN1cmZhY2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghcmVuZGVyVGFy
Z2V0U3VyZmFjZSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHBv
aW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAg
Ly8gQ29udGV4dCBtdXN0IGJlIGxvc3QKKyAgICAgICAgfQorCisgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclRhcmdldCgwLCByZW5kZXJUYXJnZXRTdXJmYWNlKTsKKyAgICAgICAgcmVuZGVyVGFy
Z2V0U3VyZmFjZS0+UmVsZWFzZSgpOworCisgICAgICAgIG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2Vy
aWFsID0gcmVuZGVyVGFyZ2V0U2VyaWFsOworICAgICAgICByZW5kZXJUYXJnZXRDaGFuZ2VkID0g
dHJ1ZTsKKyAgICB9CisKKyAgICBnbDo6UmVuZGVyYnVmZmVyICpkZXB0aFN0ZW5jaWwgPSBOVUxM
OworICAgIHVuc2lnbmVkIGludCBkZXB0aGJ1ZmZlclNlcmlhbCA9IDA7CisgICAgdW5zaWduZWQg
aW50IHN0ZW5jaWxidWZmZXJTZXJpYWwgPSAwOworICAgIGlmIChmcmFtZWJ1ZmZlci0+Z2V0RGVw
dGhidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKKyAgICB7CisgICAgICAgIGRlcHRoU3RlbmNpbCA9
IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOworICAgICAgICBpZiAoIWRlcHRoU3RlbmNp
bCkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJEZXB0aCBzdGVuY2lsIHBvaW50ZXIgdW5l
eHBlY3RlZGx5IG51bGwuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KworICAgICAgICBkZXB0aGJ1ZmZlclNlcmlhbCA9IGRlcHRoU3RlbmNpbC0+Z2V0U2VyaWFsKCk7
CisgICAgfQorICAgIGVsc2UgaWYgKGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgp
ICE9IEdMX05PTkUpCisgICAgeworICAgICAgICBkZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZlci0+
Z2V0U3RlbmNpbGJ1ZmZlcigpOworICAgICAgICBpZiAoIWRlcHRoU3RlbmNpbCkKKyAgICAgICAg
eworICAgICAgICAgICAgRVJSKCJEZXB0aCBzdGVuY2lsIHBvaW50ZXIgdW5leHBlY3RlZGx5IG51
bGwuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBz
dGVuY2lsYnVmZmVyU2VyaWFsID0gZGVwdGhTdGVuY2lsLT5nZXRTZXJpYWwoKTsKKyAgICB9CisK
KyAgICBpZiAoZGVwdGhidWZmZXJTZXJpYWwgIT0gbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCB8
fAorICAgICAgICBzdGVuY2lsYnVmZmVyU2VyaWFsICE9IG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNl
cmlhbCB8fAorICAgICAgICAhbURlcHRoU3RlbmNpbEluaXRpYWxpemVkKQorICAgIHsKKyAgICAg
ICAgdW5zaWduZWQgaW50IGRlcHRoU2l6ZSA9IDA7CisgICAgICAgIHVuc2lnbmVkIGludCBzdGVu
Y2lsU2l6ZSA9IDA7CisKKyAgICAgICAgLy8gQXBwbHkgdGhlIGRlcHRoIHN0ZW5jaWwgb24gdGhl
IGRldmljZQorICAgICAgICBpZiAoZGVwdGhTdGVuY2lsKQorICAgICAgICB7CisgICAgICAgICAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsU3VyZmFjZSA9IE5VTEw7CisgICAgICAg
ICAgICBSZW5kZXJUYXJnZXQgKmRlcHRoU3RlbmNpbFJlbmRlclRhcmdldCA9IGRlcHRoU3RlbmNp
bC0+Z2V0RGVwdGhTdGVuY2lsKCk7CisKKyAgICAgICAgICAgIGlmIChkZXB0aFN0ZW5jaWxSZW5k
ZXJUYXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGVwdGhTdGVuY2lsU3Vy
ZmFjZSA9IFJlbmRlclRhcmdldDk6Om1ha2VSZW5kZXJUYXJnZXQ5KGRlcHRoU3RlbmNpbFJlbmRl
clRhcmdldCktPmdldFN1cmZhY2UoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KCFkZXB0aFN0ZW5jaWxTdXJmYWNlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEVS
UigiZGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBDb250ZXh0IG11c3QgYmUgbG9zdAorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBtRGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKGRlcHRo
U3RlbmNpbFN1cmZhY2UpOworICAgICAgICAgICAgZGVwdGhTdGVuY2lsU3VyZmFjZS0+UmVsZWFz
ZSgpOworCisgICAgICAgICAgICBkZXB0aFNpemUgPSBkZXB0aFN0ZW5jaWwtPmdldERlcHRoU2l6
ZSgpOworICAgICAgICAgICAgc3RlbmNpbFNpemUgPSBkZXB0aFN0ZW5jaWwtPmdldFN0ZW5jaWxT
aXplKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBt
RGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKE5VTEwpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKCFtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgfHwgZGVwdGhTaXplICE9IG1DdXJEZXB0
aFNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1DdXJEZXB0aFNpemUgPSBkZXB0aFNpemU7
CisgICAgICAgICAgICBtRm9yY2VTZXRSYXN0ZXJTdGF0ZSA9IHRydWU7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoIW1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCB8fCBzdGVuY2lsU2l6ZSAhPSBt
Q3VyU3RlbmNpbFNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1DdXJTdGVuY2lsU2l6ZSA9
IHN0ZW5jaWxTaXplOworICAgICAgICAgICAgbUZvcmNlU2V0RGVwdGhTdGVuY2lsU3RhdGUgPSB0
cnVlOworICAgICAgICB9CisKKyAgICAgICAgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCA9IGRl
cHRoYnVmZmVyU2VyaWFsOworICAgICAgICBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwgPSBz
dGVuY2lsYnVmZmVyU2VyaWFsOworICAgICAgICBtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgPSB0
cnVlOworICAgIH0KKworICAgIGlmIChyZW5kZXJUYXJnZXRDaGFuZ2VkIHx8ICFtUmVuZGVyVGFy
Z2V0RGVzY0luaXRpYWxpemVkKQorICAgIHsKKyAgICAgICAgbUZvcmNlU2V0U2Npc3NvciA9IHRy
dWU7CisgICAgICAgIG1Gb3JjZVNldFZpZXdwb3J0ID0gdHJ1ZTsKKworICAgICAgICBtUmVuZGVy
VGFyZ2V0RGVzYy53aWR0aCA9IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0V2lkdGgoKTsKKyAgICAg
ICAgbVJlbmRlclRhcmdldERlc2MuaGVpZ2h0ID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRIZWln
aHQoKTsKKyAgICAgICAgbVJlbmRlclRhcmdldERlc2MuZm9ybWF0ID0gcmVuZGVyYnVmZmVyT2Jq
ZWN0LT5nZXRBY3R1YWxGb3JtYXQoKTsKKyAgICAgICAgbVJlbmRlclRhcmdldERlc2NJbml0aWFs
aXplZCA9IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0dMZW51bSBSZW5k
ZXJlcjk6OmFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5
LCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0ZXNbXSwgR0xpbnQgZmlyc3QsIEdM
c2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQoreworICAgIFRyYW5zbGF0ZWRBdHRyaWJ1
dGUgYXR0cmlidXRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICBHTGVudW0gZXJyID0g
bVZlcnRleERhdGFNYW5hZ2VyLT5wcmVwYXJlVmVydGV4RGF0YSh2ZXJ0ZXhBdHRyaWJ1dGVzLCBw
cm9ncmFtQmluYXJ5LCBmaXJzdCwgY291bnQsIGF0dHJpYnV0ZXMsIGluc3RhbmNlcyk7CisgICAg
aWYgKGVyciAhPSBHTF9OT19FUlJPUikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnI7CisgICAg
fQorICAgIAorICAgIHJldHVybiBtVmVydGV4RGVjbGFyYXRpb25DYWNoZS5hcHBseURlY2xhcmF0
aW9uKG1EZXZpY2UsIGF0dHJpYnV0ZXMsIHByb2dyYW1CaW5hcnksIGluc3RhbmNlcywgJm1SZXBl
YXREcmF3KTsKK30KKworLy8gQXBwbGllcyB0aGUgaW5kaWNlcyBhbmQgZWxlbWVudCBhcnJheSBi
aW5kaW5ncyB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKK0dMZW51bSBSZW5kZXJlcjk6OmFwcGx5
SW5kZXhCdWZmZXIoY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJy
YXlCdWZmZXIsIEdMc2l6ZWkgY291bnQsIEdMZW51bSBtb2RlLCBHTGVudW0gdHlwZSwgVHJhbnNs
YXRlZEluZGV4RGF0YSAqaW5kZXhJbmZvKQoreworICAgIEdMZW51bSBlcnIgPSBtSW5kZXhEYXRh
TWFuYWdlci0+cHJlcGFyZUluZGV4RGF0YSh0eXBlLCBjb3VudCwgZWxlbWVudEFycmF5QnVmZmVy
LCBpbmRpY2VzLCBpbmRleEluZm8pOworCisgICAgaWYgKGVyciA9PSBHTF9OT19FUlJPUikKKyAg
ICB7CisgICAgICAgIC8vIERpcmVjdGx5IGJpbmRpbmcgdGhlIHN0b3JhZ2UgYnVmZmVyIGlzIG5v
dCBzdXBwb3J0ZWQgZm9yIGQzZDkKKyAgICAgICAgQVNTRVJUKGluZGV4SW5mby0+c3RvcmFnZSA9
PSBOVUxMKTsKKworICAgICAgICBpZiAoaW5kZXhJbmZvLT5zZXJpYWwgIT0gbUFwcGxpZWRJQlNl
cmlhbCkKKyAgICAgICAgeworICAgICAgICAgICAgSW5kZXhCdWZmZXI5KiBpbmRleEJ1ZmZlciA9
IEluZGV4QnVmZmVyOTo6bWFrZUluZGV4QnVmZmVyOShpbmRleEluZm8tPmluZGV4QnVmZmVyKTsK
KworICAgICAgICAgICAgbURldmljZS0+U2V0SW5kaWNlcyhpbmRleEJ1ZmZlci0+Z2V0QnVmZmVy
KCkpOworICAgICAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IGluZGV4SW5mby0+c2VyaWFsOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGVycjsKK30KKwordm9pZCBSZW5kZXJlcjk6
OmRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2Vz
KQoreworICAgIHN0YXJ0U2NlbmUoKTsKKyAgICAgICAgCisgICAgaWYgKG1vZGUgPT0gR0xfTElO
RV9MT09QKQorICAgIHsKKyAgICAgICAgZHJhd0xpbmVMb29wKGNvdW50LCBHTF9OT05FLCBOVUxM
LCAwLCBOVUxMKTsKKyAgICB9CisgICAgZWxzZSBpZiAoaW5zdGFuY2VzID4gMCkKKyAgICB7Cisg
ICAgICAgIFN0YXRpY0luZGV4QnVmZmVySW50ZXJmYWNlICpjb3VudGluZ0lCID0gbUluZGV4RGF0
YU1hbmFnZXItPmdldENvdW50aW5nSW5kaWNlcyhjb3VudCk7CisgICAgICAgIGlmIChjb3VudGlu
Z0lCKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobUFwcGxpZWRJQlNlcmlhbCAhPSBjb3Vu
dGluZ0lCLT5nZXRTZXJpYWwoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBJbmRl
eEJ1ZmZlcjkgKmluZGV4QnVmZmVyID0gSW5kZXhCdWZmZXI5OjptYWtlSW5kZXhCdWZmZXI5KGNv
dW50aW5nSUItPmdldEluZGV4QnVmZmVyKCkpOworCisgICAgICAgICAgICAgICAgbURldmljZS0+
U2V0SW5kaWNlcyhpbmRleEJ1ZmZlci0+Z2V0QnVmZmVyKCkpOworICAgICAgICAgICAgICAgIG1B
cHBsaWVkSUJTZXJpYWwgPSBjb3VudGluZ0lCLT5nZXRTZXJpYWwoKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtUmVwZWF0RHJhdzsgaSsrKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EZXZpY2UtPkRyYXdJbmRleGVkUHJpbWl0aXZl
KG1QcmltaXRpdmVUeXBlLCAwLCAwLCBjb3VudCwgMCwgbVByaW1pdGl2ZUNvdW50KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IEVSUigiQ291bGQgbm90IGNyZWF0ZSBhIGNvdW50aW5nIGluZGV4IGJ1ZmZlciBmb3IgZ2xEcmF3
QXJyYXlzSW5zdGFuY2VkLiIpOworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlICAgLy8gUmVndWxhciBjYXNl
CisgICAgeworICAgICAgICBtRGV2aWNlLT5EcmF3UHJpbWl0aXZlKG1QcmltaXRpdmVUeXBlLCAw
LCBtUHJpbWl0aXZlQ291bnQpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJlcjk6OmRyYXdFbGVt
ZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9p
ZCAqaW5kaWNlcywgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyLCBjb25zdCBUcmFuc2xh
dGVkSW5kZXhEYXRhICZpbmRleEluZm8sIEdMc2l6ZWkgLyppbnN0YW5jZXMqLykKK3sKKyAgICBz
dGFydFNjZW5lKCk7CisKKyAgICBpZiAobW9kZSA9PSBHTF9QT0lOVFMpCisgICAgeworICAgICAg
ICBkcmF3SW5kZXhlZFBvaW50cyhjb3VudCwgdHlwZSwgaW5kaWNlcywgaW5kZXhJbmZvLm1pbklu
ZGV4LCBlbGVtZW50QXJyYXlCdWZmZXIpOworICAgIH0KKyAgICBlbHNlIGlmIChtb2RlID09IEdM
X0xJTkVfTE9PUCkKKyAgICB7CisgICAgICAgIGRyYXdMaW5lTG9vcChjb3VudCwgdHlwZSwgaW5k
aWNlcywgaW5kZXhJbmZvLm1pbkluZGV4LCBlbGVtZW50QXJyYXlCdWZmZXIpOworICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1SZXBlYXREcmF3OyBp
KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMc2l6ZWkgdmVydGV4Q291bnQgPSBpbmRleElu
Zm8ubWF4SW5kZXggLSBpbmRleEluZm8ubWluSW5kZXggKyAxOworICAgICAgICAgICAgbURldmlj
ZS0+RHJhd0luZGV4ZWRQcmltaXRpdmUobVByaW1pdGl2ZVR5cGUsIC0oSU5UKWluZGV4SW5mby5t
aW5JbmRleCwgaW5kZXhJbmZvLm1pbkluZGV4LCB2ZXJ0ZXhDb3VudCwgaW5kZXhJbmZvLnN0YXJ0
SW5kZXgsIG1QcmltaXRpdmVDb3VudCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgUmVu
ZGVyZXI5OjpkcmF3TGluZUxvb3AoR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdM
dm9pZCAqaW5kaWNlcywgaW50IG1pbkluZGV4LCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZm
ZXIpCit7CisgICAgLy8gR2V0IHRoZSByYXcgaW5kaWNlcyBmb3IgYW4gaW5kZXhlZCBkcmF3Cisg
ICAgaWYgKHR5cGUgIT0gR0xfTk9ORSAmJiBlbGVtZW50QXJyYXlCdWZmZXIpCisgICAgeworICAg
ICAgICBnbDo6QnVmZmVyICppbmRleEJ1ZmZlciA9IGVsZW1lbnRBcnJheUJ1ZmZlcjsKKyAgICAg
ICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGluZGV4QnVmZmVyLT5nZXRTdG9yYWdlKCk7Cisg
ICAgICAgIGludHB0cl90IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZGlj
ZXMpOworICAgICAgICBpbmRpY2VzID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KHN0b3Jh
Z2UtPmdldERhdGEoKSkgKyBvZmZzZXQ7CisgICAgfQorCisgICAgdW5zaWduZWQgaW50IHN0YXJ0
SW5kZXggPSAwOworCisgICAgaWYgKGdldDMyQml0SW5kZXhTdXBwb3J0KCkpCisgICAgeworICAg
ICAgICBpZiAoIW1MaW5lTG9vcElCKQorICAgICAgICB7CisgICAgICAgICAgICBtTGluZUxvb3BJ
QiA9IG5ldyBTdHJlYW1pbmdJbmRleEJ1ZmZlckludGVyZmFjZSh0aGlzKTsKKyAgICAgICAgICAg
IGlmICghbUxpbmVMb29wSUItPnJlc2VydmVCdWZmZXJTcGFjZShJTklUSUFMX0lOREVYX0JVRkZF
Ul9TSVpFLCBHTF9VTlNJR05FRF9JTlQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGRlbGV0ZSBtTGluZUxvb3BJQjsKKyAgICAgICAgICAgICAgICBtTGluZUxvb3BJQiA9IE5VTEw7
CisKKyAgICAgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSAzMi1iaXQgbG9vcGlu
ZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oY291bnQpICsgMSA+IChz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpIC8gc2l6ZW9mKHVuc2lnbmVk
IGludCkpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSAz
Mi1iaXQgbG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUCwgdG9vIG1hbnkgaW5k
aWNlcyByZXF1aXJlZC4iKTsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBDaGVja2VkIGJ5IFJlbmRlcmVyOTo6
YXBwbHlQcmltaXRpdmVUeXBlCisgICAgICAgIEFTU0VSVChjb3VudCA+PSAwKTsKKworICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgc3BhY2VOZWVkZWQgPSAoc3RhdGljX2Nhc3Q8dW5zaWduZWQg
aW50Pihjb3VudCkgKyAxKSAqIHNpemVvZih1bnNpZ25lZCBpbnQpOworICAgICAgICBpZiAoIW1M
aW5lTG9vcElCLT5yZXNlcnZlQnVmZmVyU3BhY2Uoc3BhY2VOZWVkZWQsIEdMX1VOU0lHTkVEX0lO
VCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiQ291bGQgbm90IHJlc2VydmUgZW5vdWdo
IHNwYWNlIGluIGxvb3BpbmcgaW5kZXggYnVmZmVyIGZvciBHTF9MSU5FX0xPT1AuIik7CisgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisK
KyAgICAgICAgdm9pZCogbWFwcGVkTWVtb3J5ID0gTlVMTDsKKyAgICAgICAgdW5zaWduZWQgaW50
IG9mZnNldCA9IDA7CisgICAgICAgIGlmICghbUxpbmVMb29wSUItPm1hcEJ1ZmZlcihzcGFjZU5l
ZWRlZCwgJm1hcHBlZE1lbW9yeSwgJm9mZnNldCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVS
UigiQ291bGQgbm90IG1hcCBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKKyAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKwor
ICAgICAgICBzdGFydEluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihvZmZzZXQpIC8g
NDsKKyAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZCBpbnQqPihtYXBwZWRNZW1vcnkpOworCisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAg
eworICAgICAgICAgIGNhc2UgR0xfTk9ORTogICAvLyBOb24taW5kZXhlZCBkcmF3CisgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgZGF0YVtpXSA9IGk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkYXRh
W2NvdW50XSA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX0JZVEU6CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0
IEdMdWJ5dGUqPihpbmRpY2VzKVtpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRhdGFb
Y291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpWzBdOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKKyAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2Vz
KVtpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nh
c3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVswXTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRhdGFbaV0g
PSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVtpXTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1aW50Kj4oaW5k
aWNlcylbMF07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtTGluZUxvb3BJQi0+dW5tYXBCdWZm
ZXIoKSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgdW5tYXAgaW5kZXgg
YnVmZmVyIGZvciBHTF9MSU5FX0xPT1AuIik7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIGlmICghbUxpbmVMb29wSUIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1MaW5lTG9v
cElCID0gbmV3IFN0cmVhbWluZ0luZGV4QnVmZmVySW50ZXJmYWNlKHRoaXMpOworICAgICAgICAg
ICAgaWYgKCFtTGluZUxvb3BJQi0+cmVzZXJ2ZUJ1ZmZlclNwYWNlKElOSVRJQUxfSU5ERVhfQlVG
RkVSX1NJWkUsIEdMX1VOU0lHTkVEX1NIT1JUKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBkZWxldGUgbUxpbmVMb29wSUI7CisgICAgICAgICAgICAgICAgbUxpbmVMb29wSUIgPSBO
VUxMOworCisgICAgICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGEgMTYtYml0IGxv
b3BpbmcgaW5kZXggYnVmZmVyIGZvciBHTF9MSU5FX0xPT1AuIik7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIC8vIENoZWNrZWQgYnkgUmVuZGVyZXI5OjphcHBseVByaW1pdGl2ZVR5
cGUKKyAgICAgICAgQVNTRVJUKGNvdW50ID49IDApOworCisgICAgICAgIGlmIChzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBpbnQ+KGNvdW50KSArIDEgPiAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZCBzaG9ydD46Om1heCgpIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBhIDE2LWJpdCBsb29waW5nIGluZGV4IGJ1
ZmZlciBmb3IgR0xfTElORV9MT09QLCB0b28gbWFueSBpbmRpY2VzIHJlcXVpcmVkLiIpOworICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQor
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBzcGFjZU5lZWRlZCA9IChzdGF0aWNfY2FzdDx1
bnNpZ25lZCBpbnQ+KGNvdW50KSArIDEpICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKKyAgICAg
ICAgaWYgKCFtTGluZUxvb3BJQi0+cmVzZXJ2ZUJ1ZmZlclNwYWNlKHNwYWNlTmVlZGVkLCBHTF9V
TlNJR05FRF9TSE9SVCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiQ291bGQgbm90IHJl
c2VydmUgZW5vdWdoIHNwYWNlIGluIGxvb3BpbmcgaW5kZXggYnVmZmVyIGZvciBHTF9MSU5FX0xP
T1AuIik7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCogbWFwcGVkTWVtb3J5ID0gTlVMTDsKKyAgICAgICAg
dW5zaWduZWQgaW50IG9mZnNldDsKKyAgICAgICAgaWYgKG1MaW5lTG9vcElCLT5tYXBCdWZmZXIo
c3BhY2VOZWVkZWQsICZtYXBwZWRNZW1vcnksICZvZmZzZXQpKQorICAgICAgICB7CisgICAgICAg
ICAgICBFUlIoIkNvdWxkIG5vdCBtYXAgaW5kZXggYnVmZmVyIGZvciBHTF9MSU5FX0xPT1AuIik7
CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAg
ICB9CisKKyAgICAgICAgc3RhcnRJbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4ob2Zm
c2V0KSAvIDI7CisgICAgICAgIHVuc2lnbmVkIHNob3J0ICpkYXRhID0gcmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZCBzaG9ydCo+KG1hcHBlZE1lbW9yeSk7CisKKyAgICAgICAgc3dpdGNoICh0eXBl
KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9OT05FOiAgIC8vIE5vbi1pbmRleGVkIGRy
YXcKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBkYXRhW2ldID0gaTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGRhdGFbY291bnRdID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNh
c2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291
bnQ7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpW2ldOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oaW5kaWNlcylb
MF07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JU
OgorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9y
dCo+KGluZGljZXMpW2ldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGF0YVtjb3VudF0g
PSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpWzBdOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMpW2ldOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBH
THVpbnQqPihpbmRpY2VzKVswXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1MaW5lTG9vcElC
LT51bm1hcEJ1ZmZlcigpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCB1
bm1hcCBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKKyAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAobUFwcGxpZWRJQlNlcmlhbCAhPSBtTGluZUxvb3BJQi0+Z2V0U2VyaWFsKCkpCisgICAgewor
ICAgICAgICBJbmRleEJ1ZmZlcjkgKmluZGV4QnVmZmVyID0gSW5kZXhCdWZmZXI5OjptYWtlSW5k
ZXhCdWZmZXI5KG1MaW5lTG9vcElCLT5nZXRJbmRleEJ1ZmZlcigpKTsKKworICAgICAgICBtRGV2
aWNlLT5TZXRJbmRpY2VzKGluZGV4QnVmZmVyLT5nZXRCdWZmZXIoKSk7CisgICAgICAgIG1BcHBs
aWVkSUJTZXJpYWwgPSBtTGluZUxvb3BJQi0+Z2V0U2VyaWFsKCk7CisgICAgfQorCisgICAgbURl
dmljZS0+RHJhd0luZGV4ZWRQcmltaXRpdmUoRDNEUFRfTElORVNUUklQLCAtbWluSW5kZXgsIG1p
bkluZGV4LCBjb3VudCwgc3RhcnRJbmRleCwgY291bnQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KK3N0YXRpYyB2b2lkIGRyYXdQb2ludHMoSURpcmVjdDNERGV2aWNlOSogZGV2aWNlLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGludCBtaW5JbmRleCkKK3sKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB1bnNpZ25l
ZCBpbnQgaW5kZXhWYWx1ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oc3RhdGljX2Nhc3Q8
Y29uc3QgVCo+KGluZGljZXMpW2ldKSAtIG1pbkluZGV4OworICAgICAgICBkZXZpY2UtPkRyYXdQ
cmltaXRpdmUoRDNEUFRfUE9JTlRMSVNULCBpbmRleFZhbHVlLCAxKTsKKyAgICB9Cit9CisKK3Zv
aWQgUmVuZGVyZXI5OjpkcmF3SW5kZXhlZFBvaW50cyhHTHNpemVpIGNvdW50LCBHTGVudW0gdHlw
ZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBpbnQgbWluSW5kZXgsIGdsOjpCdWZmZXIgKmVsZW1l
bnRBcnJheUJ1ZmZlcikKK3sKKyAgICAvLyBEcmF3aW5nIGluZGV4IHBvaW50IGxpc3RzIGlzIHVu
c3VwcG9ydGVkIGluIGQzZDksIGZhbGwgYmFjayB0byBhIHJlZ3VsYXIgRHJhd1ByaW1pdGl2ZSBj
YWxsCisgICAgLy8gZm9yIGVhY2ggaW5kaXZpZHVhbCBwb2ludC4gVGhpcyBjYWxsIGlzIG5vdCBl
eHBlY3RlZCB0byBoYXBwZW4gb2Z0ZW4uCisKKyAgICBpZiAoZWxlbWVudEFycmF5QnVmZmVyKQor
ICAgIHsKKyAgICAgICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGVsZW1lbnRBcnJheUJ1ZmZl
ci0+Z2V0U3RvcmFnZSgpOworICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSByZWludGVycHJldF9j
YXN0PGludHB0cl90PihpbmRpY2VzKTsKKyAgICAgICAgaW5kaWNlcyA9IHN0YXRpY19jYXN0PGNv
bnN0IEdMdWJ5dGUqPihzdG9yYWdlLT5nZXREYXRhKCkpICsgb2Zmc2V0OworICAgIH0KKworICAg
IHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURTogIGRy
YXdQb2ludHM8R0x1Ynl0ZT4obURldmljZSwgY291bnQsIGluZGljZXMsIG1pbkluZGV4KTsgIGJy
ZWFrOworICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOiBkcmF3UG9pbnRzPEdMdXNob3J0
PihtRGV2aWNlLCBjb3VudCwgaW5kaWNlcywgbWluSW5kZXgpOyBicmVhazsKKyAgICAgICAgY2Fz
ZSBHTF9VTlNJR05FRF9JTlQ6ICAgZHJhd1BvaW50czxHTHVpbnQ+KG1EZXZpY2UsIGNvdW50LCBp
bmRpY2VzLCBtaW5JbmRleCk7ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlcmVyOTo6YXBwbHlTaGFkZXJzKGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5KQoreworICAgIHVuc2lnbmVkIGludCBwcm9ncmFtQmluYXJ5
U2VyaWFsID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2VyaWFsKCk7CisgICAgaWYgKHByb2dyYW1CaW5h
cnlTZXJpYWwgIT0gbUFwcGxpZWRQcm9ncmFtQmluYXJ5U2VyaWFsKQorICAgIHsKKyAgICAgICAg
U2hhZGVyRXhlY3V0YWJsZSAqdmVydGV4RXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0VmVydGV4RXhl
Y3V0YWJsZSgpOworICAgICAgICBTaGFkZXJFeGVjdXRhYmxlICpwaXhlbEV4ZSA9IHByb2dyYW1C
aW5hcnktPmdldFBpeGVsRXhlY3V0YWJsZSgpOworCisgICAgICAgIElEaXJlY3QzRFZlcnRleFNo
YWRlcjkgKnZlcnRleFNoYWRlciA9IE5VTEw7CisgICAgICAgIGlmICh2ZXJ0ZXhFeGUpIHZlcnRl
eFNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGU5OjptYWtlU2hhZGVyRXhlY3V0YWJsZTkodmVydGV4
RXhlKS0+Z2V0VmVydGV4U2hhZGVyKCk7CisKKyAgICAgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5
ICpwaXhlbFNoYWRlciA9IE5VTEw7CisgICAgICAgIGlmIChwaXhlbEV4ZSkgcGl4ZWxTaGFkZXIg
PSBTaGFkZXJFeGVjdXRhYmxlOTo6bWFrZVNoYWRlckV4ZWN1dGFibGU5KHBpeGVsRXhlKS0+Z2V0
UGl4ZWxTaGFkZXIoKTsKKworICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlcihwaXhlbFNo
YWRlcik7CisgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwor
ICAgICAgICBwcm9ncmFtQmluYXJ5LT5kaXJ0eUFsbFVuaWZvcm1zKCk7CisgICAgICAgIG1EeFVu
aWZvcm1zRGlydHkgPSB0cnVlOworCisgICAgICAgIG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlh
bCA9IHByb2dyYW1CaW5hcnlTZXJpYWw7CisgICAgfQorfQorCit2b2lkIFJlbmRlcmVyOTo6YXBw
bHlVbmlmb3JtcyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlVuaWZvcm1B
cnJheSAqdW5pZm9ybUFycmF5KQoreworICAgIGZvciAoc3RkOjp2ZWN0b3I8Z2w6OlVuaWZvcm0q
Pjo6Y29uc3RfaXRlcmF0b3IgdWIgPSB1bmlmb3JtQXJyYXktPmJlZ2luKCksIHVlID0gdW5pZm9y
bUFycmF5LT5lbmQoKTsgdWIgIT0gdWU7ICsrdWIpCisgICAgeworICAgICAgICBnbDo6VW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSA9ICp1YjsKKworICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+ZGly
dHkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMZmxvYXQgKmYgPSAoR0xmbG9hdCopdGFyZ2V0
VW5pZm9ybS0+ZGF0YTsKKyAgICAgICAgICAgIEdMaW50ICppID0gKEdMaW50Kil0YXJnZXRVbmlm
b3JtLT5kYXRhOworCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkU6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfQk9PTDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6
CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOgorICAgICAgICAgICAgICBjYXNlIEdM
X0JPT0xfVkVDNDoKKyAgICAgICAgICAgICAgICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9y
bSwgaSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxP
QVQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9WRUMzOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6CisgICAg
ICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9B
VF9NQVQzOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6CisgICAgICAgICAgICAg
ICAgYXBwbHlVbmlmb3JtbmZ2KHRhcmdldFVuaWZvcm0sIGYpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9J
TlRfVkVDMjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDMzoKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9JTlRfVkVDNDoKKyAgICAgICAgICAgICAgICBhcHBseVVuaWZvcm1uaXYodGFyZ2V0
VW5pZm9ybSwgaSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIERyaXZlciB1bmlmb3JtcworICAgIGlmIChtRHhVbmlmb3Jtc0RpcnR5KQorICAg
IHsKKyAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKDAsIChmbG9hdCop
Jm1WZXJ0ZXhDb25zdGFudHMsIHNpemVvZihkeF9WZXJ0ZXhDb25zdGFudHMpIC8gc2l6ZW9mKGZs
b2F0WzRdKSk7CisgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKDAsIChm
bG9hdCopJm1QaXhlbENvbnN0YW50cywgc2l6ZW9mKGR4X1BpeGVsQ29uc3RhbnRzKSAvIHNpemVv
ZihmbG9hdFs0XSkpOworICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gZmFsc2U7CisgICAgfQor
fQorCit2b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlmb3JtbmZ2KGdsOjpVbmlmb3JtICp0YXJnZXRV
bmlmb3JtLCBjb25zdCBHTGZsb2F0ICp2KQoreworICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wc1Jl
Z2lzdGVySW5kZXggPj0gMCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVy
Q29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleCwgdiwgdGFyZ2V0VW5pZm9y
bS0+cmVnaXN0ZXJDb3VudCk7CisgICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzUmVn
aXN0ZXJJbmRleCA+PSAwKQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVy
Q29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleCwgdiwgdGFyZ2V0VW5pZm9y
bS0+cmVnaXN0ZXJDb3VudCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlm
b3Jtbml2KGdsOjpVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGludCAqdikKK3sKKyAg
ICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cmVnaXN0ZXJDb3VudCA8PSBNQVhfVkVSVEVYX0NPTlNU
QU5UX1ZFQ1RPUlNfRDNEOSk7CisgICAgR0xmbG9hdCB2ZWN0b3JbTUFYX1ZFUlRFWF9DT05TVEFO
VF9WRUNUT1JTX0QzRDldWzRdOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB0
YXJnZXRVbmlmb3JtLT5yZWdpc3RlckNvdW50OyBpKyspCisgICAgeworICAgICAgICB2ZWN0b3Jb
aV1bMF0gPSAoR0xmbG9hdCl2WzQgKiBpICsgMF07CisgICAgICAgIHZlY3RvcltpXVsxXSA9IChH
TGZsb2F0KXZbNCAqIGkgKyAxXTsKKyAgICAgICAgdmVjdG9yW2ldWzJdID0gKEdMZmxvYXQpdls0
ICogaSArIDJdOworICAgICAgICB2ZWN0b3JbaV1bM10gPSAoR0xmbG9hdCl2WzQgKiBpICsgM107
CisgICAgfQorCisgICAgYXBwbHlVbmlmb3JtbmZ2KHRhcmdldFVuaWZvcm0sIChHTGZsb2F0Kil2
ZWN0b3IpOworfQorCit2b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlmb3JtbmJ2KGdsOjpVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGludCAqdikKK3sKKyAgICBBU1NFUlQodGFyZ2V0VW5p
Zm9ybS0+cmVnaXN0ZXJDb3VudCA8PSBNQVhfVkVSVEVYX0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOSk7
CisgICAgR0xmbG9hdCB2ZWN0b3JbTUFYX1ZFUlRFWF9DT05TVEFOVF9WRUNUT1JTX0QzRDldWzRd
OworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB0YXJnZXRVbmlmb3JtLT5yZWdp
c3RlckNvdW50OyBpKyspCisgICAgeworICAgICAgICB2ZWN0b3JbaV1bMF0gPSAodls0ICogaSAr
IDBdID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOworICAgICAgICB2ZWN0b3JbaV1bMV0gPSAo
dls0ICogaSArIDFdID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOworICAgICAgICB2ZWN0b3Jb
aV1bMl0gPSAodls0ICogaSArIDJdID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOworICAgICAg
ICB2ZWN0b3JbaV1bM10gPSAodls0ICogaSArIDNdID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBm
OworICAgIH0KKworICAgIGFwcGx5VW5pZm9ybW5mdih0YXJnZXRVbmlmb3JtLCAoR0xmbG9hdCop
dmVjdG9yKTsKK30KKwordm9pZCBSZW5kZXJlcjk6OmNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFt
ZXRlcnMgJmNsZWFyUGFyYW1zLCBnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKQoreworICAg
IEQzRENPTE9SIGNvbG9yID0gRDNEQ09MT1JfQVJHQihnbDo6dW5vcm08OD4oY2xlYXJQYXJhbXMu
Y29sb3JDbGVhclZhbHVlLmFscGhhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2w6OnVub3JtPDg+KGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5yZWQpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oY2xlYXJQYXJhbXMuY29s
b3JDbGVhclZhbHVlLmdyZWVuKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2w6OnVub3JtPDg+KGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5ibHVlKSk7CisgICAgZmxv
YXQgZGVwdGggPSBnbDo6Y2xhbXAwMShjbGVhclBhcmFtcy5kZXB0aENsZWFyVmFsdWUpOworICAg
IGludCBzdGVuY2lsID0gY2xlYXJQYXJhbXMuc3RlbmNpbENsZWFyVmFsdWUgJiAweDAwMDAwMEZG
OworCisgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxVbm1hc2tlZCA9IDB4MDsKKyAgICBpZiAoKGNs
ZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpICYmIGZyYW1lQnVmZmVyLT5o
YXNTdGVuY2lsKCkpCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbFNpemUgPSBn
bDo6R2V0U3RlbmNpbFNpemUoZnJhbWVCdWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0QWN0
dWFsRm9ybWF0KCkpOworICAgICAgICBzdGVuY2lsVW5tYXNrZWQgPSAoMHgxIDw8IHN0ZW5jaWxT
aXplKSAtIDE7CisgICAgfQorCisgICAgYm9vbCBhbHBoYVVubWFza2VkID0gKGdsOjpHZXRBbHBo
YVNpemUobVJlbmRlclRhcmdldERlc2MuZm9ybWF0KSA9PSAwKSB8fCBjbGVhclBhcmFtcy5jb2xv
ck1hc2tBbHBoYTsKKworICAgIGNvbnN0IGJvb2wgbmVlZE1hc2tlZFN0ZW5jaWxDbGVhciA9IChj
bGVhclBhcmFtcy5tYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKSAmJgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNr
ICYgc3RlbmNpbFVubWFza2VkKSAhPSBzdGVuY2lsVW5tYXNrZWQ7CisgICAgY29uc3QgYm9vbCBu
ZWVkTWFza2VkQ29sb3JDbGVhciA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVGRkVS
X0JJVCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIShjbGVhclBh
cmFtcy5jb2xvck1hc2tSZWQgJiYgY2xlYXJQYXJhbXMuY29sb3JNYXNrR3JlZW4gJiYKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tC
bHVlICYmIGFscGhhVW5tYXNrZWQpOworCisgICAgaWYgKG5lZWRNYXNrZWRDb2xvckNsZWFyIHx8
IG5lZWRNYXNrZWRTdGVuY2lsQ2xlYXIpCisgICAgeworICAgICAgICAvLyBTdGF0ZSB3aGljaCBp
cyBhbHRlcmVkIGluIGFsbCBwYXRocyBmcm9tIHRoaXMgcG9pbnQgdG8gdGhlIGNsZWFyIGNhbGwg
aXMgc2F2ZWQuCisgICAgICAgIC8vIFN0YXRlIHdoaWNoIGlzIGFsdGVyZWQgaW4gb25seSBzb21l
IHBhdGhzIHdpbGwgYmUgZmxhZ2dlZCBkaXJ0eSBpbiB0aGUgY2FzZSB0aGF0CisgICAgICAgIC8v
ICB0aGF0IHBhdGggaXMgdGFrZW4uCisgICAgICAgIEhSRVNVTFQgaHI7CisgICAgICAgIGlmICht
TWFza2VkQ2xlYXJTYXZlZFN0YXRlID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGhy
ID0gbURldmljZS0+QmVnaW5TdGF0ZUJsb2NrKCk7CisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VF
REVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9G
TUVNT1JZKTsKKworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldS
SVRFRU5BQkxFLCBGQUxTRSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19aRlVOQywgRDNEQ01QX0FMV0FZUyk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBGQUxTRSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsKKyAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElEKTsKKyAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwg
RkFMU0UpOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFC
TEVOREVOQUJMRSwgRkFMU0UpOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIDApOworICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOworICAgICAgICAgICAg
bURldmljZS0+U2V0UGl4ZWxTaGFkZXIoTlVMTCk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRW
ZXJ0ZXhTaGFkZXIoTlVMTCk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRGVkYoRDNERlZGX1hZ
WlJIVyB8IEQzREZWRl9ESUZGVVNFKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNv
dXJjZSgwLCBOVUxMLCAwLCAwKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX1NFUEFSQVRFQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7CisgICAgICAgICAgICBtRGV2
aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JPUCwgRDNEVE9QX1NFTEVD
VEFSRzEpOworICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNE
VFNTX0NPTE9SQVJHMSwgRDNEVEFfVEZBQ1RPUik7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRU
ZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQUxQSEFPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOwor
ICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0FMUEhB
QVJHMSwgRDNEVEFfVEZBQ1RPUik7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19URVhUVVJFRkFDVE9SLCBjb2xvcik7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRU1BU0ssIDB4RkZGRkZGRkYpOworCisgICAgICAg
ICAgICBmb3IoaW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEo
aSwgMSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGhyID0gbURldmljZS0+RW5kU3Rh
dGVCbG9jaygmbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSk7CisgICAgICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09V
VE9GTUVNT1JZKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChtTWFza2VkQ2xlYXJTYXZl
ZFN0YXRlICE9IE5VTEwpOworCisgICAgICAgIGlmIChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlICE9
IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGhyID0gbU1hc2tlZENsZWFyU2F2ZWRTdGF0
ZS0+Q2FwdHVyZSgpOworICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworICAgICAg
ICB9CisKKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRFRU5BQkxF
LCBGQUxTRSk7CisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pGVU5DLCBE
M0RDTVBfQUxXQVlTKTsKKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVO
QUJMRSwgRkFMU0UpOworICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxM
TU9ERSwgRDNEQ1VMTF9OT05FKTsKKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfRklMTE1PREUsIEQzREZJTExfU09MSUQpOworICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOworICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOworCisgICAgICAg
IGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkKKyAgICAgICAgewor
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJM
RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRD
b2xvck1hc2soY2xlYXJQYXJhbXMuY29sb3JNYXNrUmVkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhclBhcmFtcy5jb2xv
ck1hc2tHcmVlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrQmx1ZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJQ
YXJhbXMuY29sb3JNYXNrQWxwaGEpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVF
TkFCTEUsIDApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0ZW5jaWxVbm1hc2tlZCAhPSAw
eDAgJiYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpKQorICAgICAg
ICB7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5B
QkxFLCBUUlVFKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1RX
T1NJREVEU1RFTkNJTE1PREUsIEZBTFNFKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX1NURU5DSUxGVU5DLCBEM0RDTVBfQUxXQVlTKTsKKyAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxSRUYsIHN0ZW5jaWwpOworICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFdSSVRFTUFTSywgY2xl
YXJQYXJhbXMuc3RlbmNpbFdyaXRlTWFzayk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19TVEVOQ0lMRkFJTCwgRDNEU1RFTkNJTE9QX1JFUExBQ0UpOworICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFpGQUlMLCBEM0RTVEVO
Q0lMT1BfUkVQTEFDRSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19TVEVOQ0lMUEFTUywgRDNEU1RFTkNJTE9QX1JFUExBQ0UpOworICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAgbURldmljZS0+
U2V0UGl4ZWxTaGFkZXIoTlVMTCk7CisgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlcihO
VUxMKTsKKyAgICAgICAgbURldmljZS0+U2V0RlZGKEQzREZWRl9YWVpSSFcpOworICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUsIFRS
VUUpOworICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09M
T1JPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOworICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3Rh
Z2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JBUkcxLCBEM0RUQV9URkFDVE9SKTsKKyAgICAgICAgbURl
dmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0FMUEhBT1AsIEQzRFRPUF9TRUxF
Q1RBUkcxKTsKKyAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNT
X0FMUEhBQVJHMSwgRDNEVEFfVEZBQ1RPUik7CisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1RFWFRVUkVGQUNUT1IsIGNvbG9yKTsKKyAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfTVVMVElTQU1QTEVNQVNLLCAweEZGRkZGRkZGKTsKKworICAgICAgICBm
b3IoaW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgICAgICB7
CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKGksIDEpOworICAgICAg
ICB9CisKKyAgICAgICAgZmxvYXQgcXVhZFs0XVs0XTsgICAvLyBBIHF1YWRyaWxhdGVyYWwgY292
ZXJpbmcgdGhlIHRhcmdldCwgYWxpZ25lZCB0byBtYXRjaCB0aGUgZWRnZXMKKyAgICAgICAgcXVh
ZFswXVswXSA9IC0wLjVmOworICAgICAgICBxdWFkWzBdWzFdID0gbVJlbmRlclRhcmdldERlc2Mu
aGVpZ2h0IC0gMC41ZjsKKyAgICAgICAgcXVhZFswXVsyXSA9IDAuMGY7CisgICAgICAgIHF1YWRb
MF1bM10gPSAxLjBmOworCisgICAgICAgIHF1YWRbMV1bMF0gPSBtUmVuZGVyVGFyZ2V0RGVzYy53
aWR0aCAtIDAuNWY7CisgICAgICAgIHF1YWRbMV1bMV0gPSBtUmVuZGVyVGFyZ2V0RGVzYy5oZWln
aHQgLSAwLjVmOworICAgICAgICBxdWFkWzFdWzJdID0gMC4wZjsKKyAgICAgICAgcXVhZFsxXVsz
XSA9IDEuMGY7CisKKyAgICAgICAgcXVhZFsyXVswXSA9IC0wLjVmOworICAgICAgICBxdWFkWzJd
WzFdID0gLTAuNWY7CisgICAgICAgIHF1YWRbMl1bMl0gPSAwLjBmOworICAgICAgICBxdWFkWzJd
WzNdID0gMS4wZjsKKworICAgICAgICBxdWFkWzNdWzBdID0gbVJlbmRlclRhcmdldERlc2Mud2lk
dGggLSAwLjVmOworICAgICAgICBxdWFkWzNdWzFdID0gLTAuNWY7CisgICAgICAgIHF1YWRbM11b
Ml0gPSAwLjBmOworICAgICAgICBxdWFkWzNdWzNdID0gMS4wZjsKKworICAgICAgICBzdGFydFNj
ZW5lKCk7CisgICAgICAgIG1EZXZpY2UtPkRyYXdQcmltaXRpdmVVUChEM0RQVF9UUklBTkdMRVNU
UklQLCAyLCBxdWFkLCBzaXplb2YoZmxvYXRbNF0pKTsKKworICAgICAgICBpZiAoY2xlYXJQYXJh
bXMubWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIFRSVUUpOworICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRFRU5BQkxFLCBUUlVFKTsKKyAgICAg
ICAgICAgIG1EZXZpY2UtPkNsZWFyKDAsIE5VTEwsIEQzRENMRUFSX1pCVUZGRVIsIGNvbG9yLCBk
ZXB0aCwgc3RlbmNpbCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobU1hc2tlZENsZWFyU2F2
ZWRTdGF0ZSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBtTWFza2VkQ2xlYXJTYXZl
ZFN0YXRlLT5BcHBseSgpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGNsZWFyUGFy
YW1zLm1hc2spCisgICAgeworICAgICAgICBEV09SRCBkeENsZWFyRmxhZ3MgPSAwOworICAgICAg
ICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGR4Q2xlYXJGbGFncyB8PSBEM0RDTEVBUl9UQVJHRVQ7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUKQorICAg
ICAgICB7CisgICAgICAgICAgICBkeENsZWFyRmxhZ3MgfD0gRDNEQ0xFQVJfWkJVRkZFUjsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX1NURU5DSUxfQlVGRkVS
X0JJVCkKKyAgICAgICAgeworICAgICAgICAgICAgZHhDbGVhckZsYWdzIHw9IEQzRENMRUFSX1NU
RU5DSUw7CisgICAgICAgIH0KKworICAgICAgICBtRGV2aWNlLT5DbGVhcigwLCBOVUxMLCBkeENs
ZWFyRmxhZ3MsIGNvbG9yLCBkZXB0aCwgc3RlbmNpbCk7CisgICAgfQorfQorCit2b2lkIFJlbmRl
cmVyOTo6bWFya0FsbFN0YXRlRGlydHkoKQoreworICAgIG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2Vy
aWFsID0gMDsKKyAgICBtQXBwbGllZERlcHRoYnVmZmVyU2VyaWFsID0gMDsKKyAgICBtQXBwbGll
ZFN0ZW5jaWxidWZmZXJTZXJpYWwgPSAwOworICAgIG1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCA9
IGZhbHNlOworICAgIG1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworICAg
IG1Gb3JjZVNldERlcHRoU3RlbmNpbFN0YXRlID0gdHJ1ZTsKKyAgICBtRm9yY2VTZXRSYXN0ZXJT
dGF0ZSA9IHRydWU7CisgICAgbUZvcmNlU2V0U2Npc3NvciA9IHRydWU7CisgICAgbUZvcmNlU2V0
Vmlld3BvcnQgPSB0cnVlOworICAgIG1Gb3JjZVNldEJsZW5kU3RhdGUgPSB0cnVlOworCisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRF
WF9URVhUVVJFX0lNQUdFX1VOSVRTOyBpKyspCisgICAgeworICAgICAgICBtRm9yY2VTZXRWZXJ0
ZXhTYW1wbGVyU3RhdGVzW2ldID0gdHJ1ZTsKKyAgICAgICAgbUN1clZlcnRleFRleHR1cmVTZXJp
YWxzW2ldID0gMDsKKyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6
TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IGkrKykKKyAgICB7CisgICAgICAgIG1Gb3JjZVNldFBp
eGVsU2FtcGxlclN0YXRlc1tpXSA9IHRydWU7CisgICAgICAgIG1DdXJQaXhlbFRleHR1cmVTZXJp
YWxzW2ldID0gMDsKKyAgICB9CisKKyAgICBtQXBwbGllZElCU2VyaWFsID0gMDsKKyAgICBtQXBw
bGllZFByb2dyYW1CaW5hcnlTZXJpYWwgPSAwOworICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVl
OworCisgICAgbVZlcnRleERlY2xhcmF0aW9uQ2FjaGUubWFya1N0YXRlRGlydHkoKTsKK30KKwor
dm9pZCBSZW5kZXJlcjk6OnJlbGVhc2VEZXZpY2VSZXNvdXJjZXMoKQoreworICAgIHdoaWxlICgh
bUV2ZW50UXVlcnlQb29sLmVtcHR5KCkpCisgICAgeworICAgICAgICBtRXZlbnRRdWVyeVBvb2wu
YmFjaygpLT5SZWxlYXNlKCk7CisgICAgICAgIG1FdmVudFF1ZXJ5UG9vbC5wb3BfYmFjaygpOwor
ICAgIH0KKworICAgIFNhZmVSZWxlYXNlKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUpOworCisgICAg
bVZlcnRleFNoYWRlckNhY2hlLmNsZWFyKCk7CisgICAgbVBpeGVsU2hhZGVyQ2FjaGUuY2xlYXIo
KTsKKworICAgIFNhZmVEZWxldGUobUJsaXQpOworICAgIFNhZmVEZWxldGUobVZlcnRleERhdGFN
YW5hZ2VyKTsKKyAgICBTYWZlRGVsZXRlKG1JbmRleERhdGFNYW5hZ2VyKTsKKyAgICBTYWZlRGVs
ZXRlKG1MaW5lTG9vcElCKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX05VTExfQ09M
T1JCVUZGRVJfQ0FDSEVfRU5UUklFUzsgaSsrKQorICAgIHsKKyAgICAgICAgU2FmZURlbGV0ZSht
TnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0uYnVmZmVyKTsKKyAgICB9CisKK30KKworCit2b2lkIFJl
bmRlcmVyOTo6bm90aWZ5RGV2aWNlTG9zdCgpCit7CisgICAgbURldmljZUxvc3QgPSB0cnVlOwor
ICAgIG1EaXNwbGF5LT5ub3RpZnlEZXZpY2VMb3N0KCk7Cit9CisKK2Jvb2wgUmVuZGVyZXI5Ojpp
c0RldmljZUxvc3QoKQoreworICAgIHJldHVybiBtRGV2aWNlTG9zdDsKK30KKworLy8gc2V0IG5v
dGlmeSB0byB0cnVlIHRvIGJyb2FkY2FzdCBhIG1lc3NhZ2UgdG8gYWxsIGNvbnRleHRzIG9mIHRo
ZSBkZXZpY2UgbG9zcworYm9vbCBSZW5kZXJlcjk6OnRlc3REZXZpY2VMb3N0KGJvb2wgbm90aWZ5
KQoreworICAgIEhSRVNVTFQgc3RhdHVzID0gZ2V0RGV2aWNlU3RhdHVzQ29kZSgpOworICAgIGJv
b2wgaXNMb3N0ID0gRkFJTEVEKHN0YXR1cyk7CisKKyAgICBpZiAoaXNMb3N0KQorICAgIHsKKyAg
ICAgICAgLy8gZW5zdXJlIHdlIG5vdGUgdGhlIGRldmljZSBsb3NzIC0tCisgICAgICAgIC8vIHdl
J2xsIHByb2JhYmx5IGdldCB0aGlzIGRvbmUgYWdhaW4gYnkgbm90aWZ5RGV2aWNlTG9zdAorICAg
ICAgICAvLyBidXQgYmVzdCB0byByZW1lbWJlciBpdCEKKyAgICAgICAgLy8gTm90ZSB0aGF0IHdl
IGRvbid0IHdhbnQgdG8gY2xlYXIgdGhlIGRldmljZSBsb3NzIHN0YXR1cyBoZXJlCisgICAgICAg
IC8vIC0tIHRoaXMgbmVlZHMgdG8gYmUgZG9uZSBieSByZXNldERldmljZQorICAgICAgICBtRGV2
aWNlTG9zdCA9IHRydWU7CisgICAgICAgIGlmIChub3RpZnkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG5vdGlmeURldmljZUxvc3QoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBp
c0xvc3Q7Cit9CisKK0hSRVNVTFQgUmVuZGVyZXI5OjpnZXREZXZpY2VTdGF0dXNDb2RlKCkKK3sK
KyAgICBIUkVTVUxUIHN0YXR1cyA9IEQzRF9PSzsKKworICAgIGlmIChtRGV2aWNlRXgpCisgICAg
eworICAgICAgICBzdGF0dXMgPSBtRGV2aWNlRXgtPkNoZWNrRGV2aWNlU3RhdGUoTlVMTCk7Cisg
ICAgfQorICAgIGVsc2UgaWYgKG1EZXZpY2UpCisgICAgeworICAgICAgICBzdGF0dXMgPSBtRGV2
aWNlLT5UZXN0Q29vcGVyYXRpdmVMZXZlbCgpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7
Cit9CisKK2Jvb2wgUmVuZGVyZXI5Ojp0ZXN0RGV2aWNlUmVzZXR0YWJsZSgpCit7CisgICAgLy8g
T24gRDNEOUV4LCBERVZJQ0VMT1NUIHJlcHJlc2VudHMgYSBodW5nIGRldmljZSB0aGF0IG5lZWRz
IHRvIGJlIHJlc3RhcnRlZAorICAgIC8vIERFVklDRVJFTU9WRUQgaW5kaWNhdGVzIHRoZSBkZXZp
Y2UgaGFzIGJlZW4gc3RvcHBlZCBhbmQgbXVzdCBiZSByZWNyZWF0ZWQKKyAgICBzd2l0Y2ggKGdl
dERldmljZVN0YXR1c0NvZGUoKSkKKyAgICB7CisgICAgICBjYXNlIEQzREVSUl9ERVZJQ0VOT1RS
RVNFVDoKKyAgICAgIGNhc2UgRDNERVJSX0RFVklDRUhVTkc6CisgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgY2FzZSBEM0RFUlJfREVWSUNFTE9TVDoKKyAgICAgICAgcmV0dXJuIChtRGV2aWNl
RXggIT0gTlVMTCk7CisgICAgICBjYXNlIEQzREVSUl9ERVZJQ0VSRU1PVkVEOgorICAgICAgICBB
U1NFUlQobURldmljZUV4ICE9IE5VTEwpOworICAgICAgICByZXR1cm4gaXNSZW1vdmVkRGV2aWNl
UmVzZXR0YWJsZSgpOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KK30KKworYm9vbCBSZW5kZXJlcjk6OnJlc2V0RGV2aWNlKCkKK3sKKyAgICByZWxlYXNlRGV2
aWNlUmVzb3VyY2VzKCk7CisKKyAgICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFt
ZXRlcnMgPSBnZXREZWZhdWx0UHJlc2VudFBhcmFtZXRlcnMoKTsKKworICAgIEhSRVNVTFQgcmVz
dWx0ID0gRDNEX09LOworICAgIGJvb2wgbG9zdCA9IHRlc3REZXZpY2VMb3N0KGZhbHNlKTsKKyAg
ICBib29sIHJlbW92ZWREZXZpY2UgPSAoZ2V0RGV2aWNlU3RhdHVzQ29kZSgpID09IEQzREVSUl9E
RVZJQ0VSRU1PVkVEKTsKKworICAgIC8vIERldmljZSBSZW1vdmVkIGlzIGEgZmVhdHVyZSB3aGlj
aCBpcyBvbmx5IHByZXNlbnQgd2l0aCBEM0Q5RXgKKyAgICBBU1NFUlQobURldmljZUV4ICE9IE5V
TEwgfHwgIXJlbW92ZWREZXZpY2UpOworCisgICAgZm9yIChpbnQgYXR0ZW1wdHMgPSAzOyBsb3N0
ICYmIGF0dGVtcHRzID4gMDsgYXR0ZW1wdHMtLSkKKyAgICB7CisgICAgICAgIGlmIChyZW1vdmVk
RGV2aWNlKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBEZXZpY2UgcmVtb3ZlZCwgd2hpY2gg
bWF5IHRyaWdnZXIgb24gZHJpdmVyIHJlaW5zdGFsbGF0aW9uLAorICAgICAgICAgICAgLy8gbWF5
IGNhdXNlIGEgbG9uZ2VyIHdhaXQgb3RoZXIgcmVzZXQgYXR0ZW1wdHMgYmVmb3JlIHRoZQorICAg
ICAgICAgICAgLy8gc3lzdGVtIGlzIHJlYWR5IHRvIGhhbmRsZSBjcmVhdGluZyBhIG5ldyBkZXZp
Y2UuCisgICAgICAgICAgICBTbGVlcCg4MDApOworICAgICAgICAgICAgbG9zdCA9ICFyZXNldFJl
bW92ZWREZXZpY2UoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtRGV2aWNlRXgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIFNsZWVwKDUwMCk7ICAgLy8gR2l2ZSB0aGUgZ3JhcGhpY3Mg
ZHJpdmVyIHNvbWUgQ1BVIHRpbWUKKyAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2VFeC0+UmVz
ZXRFeCgmcHJlc2VudFBhcmFtZXRlcnMsIE5VTEwpOworICAgICAgICAgICAgbG9zdCA9IHRlc3RE
ZXZpY2VMb3N0KGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPlRlc3RDb29wZXJhdGl2ZUxldmVsKCk7CisgICAg
ICAgICAgICB3aGlsZSAocmVzdWx0ID09IEQzREVSUl9ERVZJQ0VMT1NUKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIFNsZWVwKDEwMCk7ICAgLy8gR2l2ZSB0aGUgZ3JhcGhpY3MgZHJp
dmVyIHNvbWUgQ1BVIHRpbWUKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5UZXN0
Q29vcGVyYXRpdmVMZXZlbCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocmVz
dWx0ID09IEQzREVSUl9ERVZJQ0VOT1RSRVNFVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXN1bHQgPSBtRGV2aWNlLT5SZXNldCgmcHJlc2VudFBhcmFtZXRlcnMpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgbG9zdCA9IHRlc3REZXZpY2VMb3N0KGZhbHNlKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEVS
UigiUmVzZXQvUmVzZXRFeCBmYWlsZWQgbXVsdGlwbGUgdGltZXM6IDB4JTA4WCIsIHJlc3VsdCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAocmVtb3ZlZERldmljZSAm
JiBsb3N0KQorICAgIHsKKyAgICAgICAgRVJSKCJEZXZpY2UgbG9zdCByZXNldCBmYWlsZWQgbXVs
dGlwbGUgdGltZXMiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIElm
IHRoZSBkZXZpY2Ugd2FzIHJlbW92ZWQsIHdlIGFscmVhZHkgZmluaXNoZWQgcmUtaW5pdGlhbGl6
YXRpb24gaW4gcmVzZXRSZW1vdmVkRGV2aWNlCisgICAgaWYgKCFyZW1vdmVkRGV2aWNlKQorICAg
IHsKKyAgICAgICAgLy8gcmVzZXQgZGV2aWNlIGRlZmF1bHRzCisgICAgICAgIGluaXRpYWxpemVE
ZXZpY2UoKTsKKyAgICB9CisKKyAgICBtRGV2aWNlTG9zdCA9IGZhbHNlOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgUmVuZGVyZXI5Ojppc1JlbW92ZWREZXZpY2VSZXNldHRhYmxlKCkg
Y29uc3QKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKworI2lmZGVmIEFOR0xFX0VOQUJM
RV9EM0Q5RVgKKyAgICBJRGlyZWN0M0Q5RXggKmQzZDlFeCA9IE5VTEw7CisgICAgdHlwZWRlZiBI
UkVTVUxUIChXSU5BUEkgKkRpcmVjdDNEQ3JlYXRlOUV4RnVuYykoVUlOVCwgSURpcmVjdDNEOUV4
KiopOworICAgIERpcmVjdDNEQ3JlYXRlOUV4RnVuYyBEaXJlY3QzRENyZWF0ZTlFeFB0ciA9IHJl
aW50ZXJwcmV0X2Nhc3Q8RGlyZWN0M0RDcmVhdGU5RXhGdW5jPihHZXRQcm9jQWRkcmVzcyhtRDNk
OU1vZHVsZSwgIkRpcmVjdDNEQ3JlYXRlOUV4IikpOworCisgICAgaWYgKERpcmVjdDNEQ3JlYXRl
OUV4UHRyICYmIFNVQ0NFRURFRChEaXJlY3QzRENyZWF0ZTlFeFB0cihEM0RfU0RLX1ZFUlNJT04s
ICZkM2Q5RXgpKSkKKyAgICB7CisgICAgICAgIEQzRENBUFM5IGRldmljZUNhcHM7CisgICAgICAg
IEhSRVNVTFQgcmVzdWx0ID0gZDNkOUV4LT5HZXREZXZpY2VDYXBzKG1BZGFwdGVyLCBtRGV2aWNl
VHlwZSwgJmRldmljZUNhcHMpOworICAgICAgICBzdWNjZXNzID0gU1VDQ0VFREVEKHJlc3VsdCk7
CisgICAgfQorCisgICAgU2FmZVJlbGVhc2UoZDNkOUV4KTsKKyNlbHNlCisgICAgQVNTRVJUKFVO
UkVBQ0hBQkxFKCkpOworI2VuZGlmCisKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKworYm9vbCBS
ZW5kZXJlcjk6OnJlc2V0UmVtb3ZlZERldmljZSgpCit7CisgICAgLy8gRnJvbSBodHRwOi8vbXNk
bi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2JiMTcyNTU0KHY9
dnMuODUpLmFzcHg6CisgICAgLy8gVGhlIGhhcmR3YXJlIGFkYXB0ZXIgaGFzIGJlZW4gcmVtb3Zl
ZC4gQXBwbGljYXRpb24gbXVzdCBkZXN0cm95IHRoZSBkZXZpY2UsIGRvIGVudW1lcmF0aW9uIG9m
CisgICAgLy8gYWRhcHRlcnMgYW5kIGNyZWF0ZSBhbm90aGVyIERpcmVjdDNEIGRldmljZS4gSWYg
YXBwbGljYXRpb24gY29udGludWVzIHJlbmRlcmluZyB3aXRob3V0CisgICAgLy8gY2FsbGluZyBS
ZXNldCwgdGhlIHJlbmRlcmluZyBjYWxscyB3aWxsIHN1Y2NlZWQuIEFwcGxpZXMgdG8gRGlyZWN0
M0QgOUV4IG9ubHkuCisgICAgZGVpbml0aWFsaXplKCk7CisgICAgcmV0dXJuIChpbml0aWFsaXpl
KCkgPT0gRUdMX1NVQ0NFU1MpOworfQorCitEV09SRCBSZW5kZXJlcjk6OmdldEFkYXB0ZXJWZW5k
b3IoKSBjb25zdAoreworICAgIHJldHVybiBtQWRhcHRlcklkZW50aWZpZXIuVmVuZG9ySWQ7Cit9
CisKK3N0ZDo6c3RyaW5nIFJlbmRlcmVyOTo6Z2V0UmVuZGVyZXJEZXNjcmlwdGlvbigpIGNvbnN0
Cit7CisgICAgc3RkOjpvc3RyaW5nc3RyZWFtIHJlbmRlcmVyU3RyaW5nOworCisgICAgcmVuZGVy
ZXJTdHJpbmcgPDwgbUFkYXB0ZXJJZGVudGlmaWVyLkRlc2NyaXB0aW9uOworICAgIGlmIChnZXRT
aGFyZUhhbmRsZVN1cHBvcnQoKSkKKyAgICB7CisgICAgICAgIHJlbmRlcmVyU3RyaW5nIDw8ICIg
RGlyZWN0M0Q5RXgiOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZW5kZXJlclN0
cmluZyA8PCAiIERpcmVjdDNEOSI7CisgICAgfQorCisgICAgcmVuZGVyZXJTdHJpbmcgPDwgIiB2
c18iIDw8IEQzRFNIQURFUl9WRVJTSU9OX01BSk9SKG1EZXZpY2VDYXBzLlZlcnRleFNoYWRlclZl
cnNpb24pIDw8ICJfIiA8PCBEM0RTSEFERVJfVkVSU0lPTl9NSU5PUihtRGV2aWNlQ2Fwcy5WZXJ0
ZXhTaGFkZXJWZXJzaW9uKTsKKyAgICByZW5kZXJlclN0cmluZyA8PCAiIHBzXyIgPDwgRDNEU0hB
REVSX1ZFUlNJT05fTUFKT1IobURldmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJzaW9uKSA8PCAiXyIg
PDwgRDNEU0hBREVSX1ZFUlNJT05fTUlOT1IobURldmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJzaW9u
KTsKKworICAgIHJldHVybiByZW5kZXJlclN0cmluZy5zdHIoKTsKK30KKworR1VJRCBSZW5kZXJl
cjk6OmdldEFkYXB0ZXJJZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUFkYXB0ZXJJ
ZGVudGlmaWVyLkRldmljZUlkZW50aWZpZXI7Cit9CisKK3ZvaWQgUmVuZGVyZXI5OjpnZXRNdWx0
aVNhbXBsZVN1cHBvcnQoRDNERk9STUFUIGZvcm1hdCwgYm9vbCAqbXVsdGlTYW1wbGVBcnJheSkK
K3sKKyAgICBmb3IgKGludCBtdWx0aVNhbXBsZUluZGV4ID0gMDsgbXVsdGlTYW1wbGVJbmRleCA8
PSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTOyBtdWx0aVNhbXBsZUluZGV4KyspCisgICAgewor
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EM2Q5LT5DaGVja0RldmljZU11bHRpU2FtcGxlVHlw
ZShtQWRhcHRlciwgbURldmljZVR5cGUsIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSwgKEQzRE1VTFRJU0FNUExF
X1RZUEUpbXVsdGlTYW1wbGVJbmRleCwgTlVMTCk7CisKKyAgICAgICAgbXVsdGlTYW1wbGVBcnJh
eVttdWx0aVNhbXBsZUluZGV4XSA9IFNVQ0NFRURFRChyZXN1bHQpOworICAgIH0KK30KKworYm9v
bCBSZW5kZXJlcjk6OmdldEJHUkFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0Cit7CisgICAgLy8gRGly
ZWN0WCA5IGFsd2F5cyBzdXBwb3J0cyBCR1JBCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
UmVuZGVyZXI5OjpnZXREWFQxVGV4dHVyZVN1cHBvcnQoKQoreworICAgIHJldHVybiBtRFhUMVRl
eHR1cmVTdXBwb3J0OworfQorCitib29sIFJlbmRlcmVyOTo6Z2V0RFhUM1RleHR1cmVTdXBwb3J0
KCkKK3sKKyAgICByZXR1cm4gbURYVDNUZXh0dXJlU3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJl
cjk6OmdldERYVDVUZXh0dXJlU3VwcG9ydCgpCit7CisgICAgcmV0dXJuIG1EWFQ1VGV4dHVyZVN1
cHBvcnQ7Cit9CisKK2Jvb2wgUmVuZGVyZXI5OjpnZXREZXB0aFRleHR1cmVTdXBwb3J0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbURlcHRoVGV4dHVyZVN1cHBvcnQ7Cit9CisKK2Jvb2wgUmVuZGVy
ZXI5OjpnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5k
ZXJhYmxlKQoreworICAgICpmaWx0ZXJpbmcgPSBtRmxvYXQzMkZpbHRlclN1cHBvcnQ7CisgICAg
KnJlbmRlcmFibGUgPSBtRmxvYXQzMlJlbmRlclN1cHBvcnQ7CisgICAgcmV0dXJuIG1GbG9hdDMy
VGV4dHVyZVN1cHBvcnQ7Cit9CisKK2Jvb2wgUmVuZGVyZXI5OjpnZXRGbG9hdDE2VGV4dHVyZVN1
cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKQoreworICAgICpmaWx0ZXJp
bmcgPSBtRmxvYXQxNkZpbHRlclN1cHBvcnQ7CisgICAgKnJlbmRlcmFibGUgPSBtRmxvYXQxNlJl
bmRlclN1cHBvcnQ7CisgICAgcmV0dXJuIG1GbG9hdDE2VGV4dHVyZVN1cHBvcnQ7Cit9CisKK2Jv
b2wgUmVuZGVyZXI5OjpnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpCit7CisgICAgcmV0dXJu
IG1MdW1pbmFuY2VUZXh0dXJlU3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldEx1bWlu
YW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKQoreworICAgIHJldHVybiBtTHVtaW5hbmNlQWxwaGFU
ZXh0dXJlU3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldFRleHR1cmVGaWx0ZXJBbmlz
b3Ryb3B5U3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdXBwb3J0c1RleHR1cmVGaWx0
ZXJBbmlzb3Ryb3B5OworfQorCitmbG9hdCBSZW5kZXJlcjk6OmdldFRleHR1cmVNYXhBbmlzb3Ry
b3B5KCkgY29uc3QKK3sKKyAgICBpZiAobVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHkp
CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1EZXZpY2VDYXBzLk1h
eEFuaXNvdHJvcHkpOworICAgIH0KKyAgICByZXR1cm4gMS4wZjsKK30KKworYm9vbCBSZW5kZXJl
cjk6OmdldEV2ZW50UXVlcnlTdXBwb3J0KCkKK3sKKyAgICByZXR1cm4gbUV2ZW50UXVlcnlTdXBw
b3J0OworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRNYXhWZXJ0ZXhUZXh0dXJlSW1h
Z2VVbml0cygpIGNvbnN0Cit7CisgICAgTUVUQV9BU1NFUlQoTUFYX1RFWFRVUkVfSU1BR0VfVU5J
VFNfVlRGX1NNMyA8PSBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdF
X1VOSVRTKTsKKyAgICByZXR1cm4gbVZlcnRleFRleHR1cmVTdXBwb3J0ID8gTUFYX1RFWFRVUkVf
SU1BR0VfVU5JVFNfVlRGX1NNMyA6IDA7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjk6Omdl
dE1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdAoreworICAgIHJldHVybiBnbDo6
TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKyBnZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygp
OworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1W
ZWN0b3JzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMjsgICAvLyBkeF9WaWV3QWRqdXN0IGFuZCBk
eF9EZXB0aFJhbmdlLgorfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRSZXNlcnZlZEZy
YWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdAoreworICAgIHJldHVybiAzOyAgIC8vIGR4X1Zp
ZXdDb29yZHMsIGR4X0RlcHRoRnJvbnQgYW5kIGR4X0RlcHRoUmFuZ2UuCit9CisKK3Vuc2lnbmVk
IGludCBSZW5kZXJlcjk6OmdldE1heFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gTUFYX1ZFUlRFWF9DT05TVEFOVF9WRUNUT1JTX0QzRDkgLSBnZXRSZXNlcnZlZFZl
cnRleFVuaWZvcm1WZWN0b3JzKCk7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldE1h
eEZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdAoreworICAgIGNvbnN0IGludCBtYXhQaXhl
bENvbnN0YW50VmVjdG9ycyA9IChnZXRNYWpvclNoYWRlck1vZGVsKCkgPj0gMykgPyBNQVhfUElY
RUxfQ09OU1RBTlRfVkVDVE9SU19TTTMgOiBNQVhfUElYRUxfQ09OU1RBTlRfVkVDVE9SU19TTTI7
CisKKyAgICByZXR1cm4gbWF4UGl4ZWxDb25zdGFudFZlY3RvcnMgLSBnZXRSZXNlcnZlZEZyYWdt
ZW50VW5pZm9ybVZlY3RvcnMoKTsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyOTo6Z2V0TWF4
VmFyeWluZ1ZlY3RvcnMoKSBjb25zdAoreworICAgIHJldHVybiAoZ2V0TWFqb3JTaGFkZXJNb2Rl
bCgpID49IDMpID8gTUFYX1ZBUllJTkdfVkVDVE9SU19TTTMgOiBNQVhfVkFSWUlOR19WRUNUT1JT
X1NNMjsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbVN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZXM7Cit9CisKK2Jv
b2wgUmVuZGVyZXI5OjpnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKSBjb25zdAoreworICAgIHJl
dHVybiBtT2NjbHVzaW9uUXVlcnlTdXBwb3J0OworfQorCitib29sIFJlbmRlcmVyOTo6Z2V0SW5z
dGFuY2luZ1N1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiBtRGV2aWNlQ2Fwcy5QaXhlbFNo
YWRlclZlcnNpb24gPj0gRDNEUFNfVkVSU0lPTigzLCAwKTsKK30KKworYm9vbCBSZW5kZXJlcjk6
OmdldFNoYXJlSGFuZGxlU3VwcG9ydCgpIGNvbnN0Cit7CisgICAgLy8gUElYIGRvZXNuJ3Qgc2Vl
bSB0byBzdXBwb3J0IHVzaW5nIHNoYXJlIGhhbmRsZXMsIHNvIGRpc2FibGUgdGhlbS4KKyAgICBy
ZXR1cm4gKG1EM2Q5RXggIT0gTlVMTCkgJiYgIWdsOjpwZXJmQWN0aXZlKCk7Cit9CisKK2Jvb2wg
UmVuZGVyZXI5OjpnZXREZXJpdmF0aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gKG1EZXZpY2VDYXBzLlBTMjBDYXBzLkNhcHMgJiBEM0RQUzIwQ0FQU19HUkFESUVO
VElOU1RSVUNUSU9OUykgIT0gMDsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldFBvc3RTdWJCdWZm
ZXJTdXBwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW50IFJlbmRlcmVy
OTo6Z2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEQzRFNIQURFUl9W
RVJTSU9OX01BSk9SKG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVyVmVyc2lvbik7Cit9CisKK2Zsb2F0
IFJlbmRlcmVyOTo6Z2V0TWF4UG9pbnRTaXplKCkgY29uc3QKK3sKKyAgICAvLyBQb2ludCBzaXpl
IGNsYW1wZWQgYXQgMS4wZiBmb3IgU00yCisgICAgcmV0dXJuIGdldE1ham9yU2hhZGVyTW9kZWwo
KSA9PSAzID8gbURldmljZUNhcHMuTWF4UG9pbnRTaXplIDogMS4wZjsKK30KKworaW50IFJlbmRl
cmVyOTo6Z2V0TWF4Vmlld3BvcnREaW1lbnNpb24oKSBjb25zdAoreworICAgIGludCBtYXhUZXh0
dXJlRGltZW5zaW9uID0gc3RkOjptaW4oc3RkOjptaW4oZ2V0TWF4VGV4dHVyZVdpZHRoKCksIGdl
dE1heFRleHR1cmVIZWlnaHQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoaW50KWdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9TSVpFKTsKKyAgICByZXR1
cm4gbWF4VGV4dHVyZURpbWVuc2lvbjsKK30KKworaW50IFJlbmRlcmVyOTo6Z2V0TWF4VGV4dHVy
ZVdpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKGludCltRGV2aWNlQ2Fwcy5NYXhUZXh0dXJl
V2lkdGg7Cit9CisKK2ludCBSZW5kZXJlcjk6OmdldE1heFRleHR1cmVIZWlnaHQoKSBjb25zdAor
eworICAgIHJldHVybiAoaW50KW1EZXZpY2VDYXBzLk1heFRleHR1cmVIZWlnaHQ7Cit9CisKK2Jv
b2wgUmVuZGVyZXI5OjpnZXQzMkJpdEluZGV4U3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1EZXZpY2VDYXBzLk1heFZlcnRleEluZGV4ID49ICgxIDw8IDE2KTsKK30KKworRFdPUkQgUmVu
ZGVyZXI5OjpnZXRDYXBzRGVjbFR5cGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbURldmljZUNh
cHMuRGVjbFR5cGVzOworfQorCitpbnQgUmVuZGVyZXI5OjpnZXRNaW5Td2FwSW50ZXJ2YWwoKSBj
b25zdAoreworICAgIHJldHVybiBtTWluU3dhcEludGVydmFsOworfQorCitpbnQgUmVuZGVyZXI5
OjpnZXRNYXhTd2FwSW50ZXJ2YWwoKSBjb25zdAoreworICAgIHJldHVybiBtTWF4U3dhcEludGVy
dmFsOworfQorCitpbnQgUmVuZGVyZXI5OjpnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbU1heFN1cHBvcnRlZFNhbXBsZXM7Cit9CisKK2ludCBSZW5kZXJlcjk6
OmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKEQzREZPUk1BVCBmb3JtYXQsIGludCByZXF1ZXN0
ZWQpIGNvbnN0Cit7CisgICAgaWYgKHJlcXVlc3RlZCA9PSAwKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHJlcXVlc3RlZDsKKyAgICB9CisKKyAgICBzdGQ6Om1hcDxEM0RGT1JNQVQsIGJvb2wgKj46
OmNvbnN0X2l0ZXJhdG9yIGl0ciA9IG1NdWx0aVNhbXBsZVN1cHBvcnQuZmluZChmb3JtYXQpOwor
ICAgIGlmIChpdHIgPT0gbU11bHRpU2FtcGxlU3VwcG9ydC5lbmQoKSkKKyAgICB7CisgICAgICAg
IGlmIChmb3JtYXQgPT0gRDNERk1UX1VOS05PV04pCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGZvciAoaW50IGkgPSByZXF1ZXN0ZWQ7IGkg
PD0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgKytpKQorICAgIHsKKyAgICAgICAgaWYgKGl0
ci0+c2Vjb25kW2ldICYmIGkgIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IC0xOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRNYXhSZW5kZXJUYXJnZXRzKCkg
Y29uc3QKK3sKKyAgICAvLyB3ZSBkbyBub3Qgc3VwcG9ydCBNUlQgaW4gZDNkOQorICAgIHJldHVy
biAxOworfQorCitEM0RGT1JNQVQgUmVuZGVyZXI5OjpDb252ZXJ0VGV4dHVyZUludGVybmFsRm9y
bWF0KEdMaW50IGludGVybmFsZm9ybWF0KQoreworICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQp
CisgICAgeworICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKKyAgICAgIGNhc2UgR0xf
REVQVEhfQ09NUE9ORU5UMzJfT0VTOgorICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09F
UzoKKyAgICAgICAgcmV0dXJuIEQzREZNVF9JTlRaOworICAgICAgY2FzZSBHTF9DT01QUkVTU0VE
X1JHQl9TM1RDX0RYVDFfRVhUOgorICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQxX0VYVDoKKyAgICAgICAgcmV0dXJuIEQzREZNVF9EWFQxOworICAgICAgY2FzZSBHTF9DT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgorICAgICAgICByZXR1cm4gRDNERk1UX0RYVDM7
CisgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6CisgICAgICAg
IHJldHVybiBEM0RGTVRfRFhUNTsKKyAgICAgIGNhc2UgR0xfUkdCQTMyRl9FWFQ6CisgICAgICBj
YXNlIEdMX1JHQjMyRl9FWFQ6CisgICAgICBjYXNlIEdMX0FMUEhBMzJGX0VYVDoKKyAgICAgIGNh
c2UgR0xfTFVNSU5BTkNFMzJGX0VYVDoKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMzJG
X0VYVDoKKyAgICAgICAgcmV0dXJuIEQzREZNVF9BMzJCMzJHMzJSMzJGOworICAgICAgY2FzZSBH
TF9SR0JBMTZGX0VYVDoKKyAgICAgIGNhc2UgR0xfUkdCMTZGX0VYVDoKKyAgICAgIGNhc2UgR0xf
QUxQSEExNkZfRVhUOgorICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UxNkZfRVhUOgorICAgICAgY2Fz
ZSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhUOgorICAgICAgICByZXR1cm4gRDNERk1UX0ExNkIx
NkcxNlIxNkY7CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRThfRVhUOgorICAgICAgICBpZiAoZ2V0
THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IEQzREZNVF9MODsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTFVN
SU5BTkNFOF9BTFBIQThfRVhUOgorICAgICAgICBpZiAoZ2V0THVtaW5hbmNlQWxwaGFUZXh0dXJl
U3VwcG9ydCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRDNERk1UX0E4TDg7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JHQjhfT0VTOgorICAgICAg
Y2FzZSBHTF9SR0I1NjU6CisgICAgICAgIHJldHVybiBEM0RGTVRfWDhSOEc4Qjg7CisgICAgfQor
CisgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKK30KKworYm9vbCBSZW5kZXJlcjk6OmNvcHlU
b1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpkZXN0LCBUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTJEICpzb3VyY2UpCit7CisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKwor
ICAgIGlmIChzb3VyY2UgJiYgZGVzdCkKKyAgICB7CisgICAgICAgIFRleHR1cmVTdG9yYWdlOV8y
RCAqc291cmNlOSA9IFRleHR1cmVTdG9yYWdlOV8yRDo6bWFrZVRleHR1cmVTdG9yYWdlOV8yRChz
b3VyY2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICAgICAgVGV4dHVyZVN0b3JhZ2U5XzJE
ICpkZXN0OSA9IFRleHR1cmVTdG9yYWdlOV8yRDo6bWFrZVRleHR1cmVTdG9yYWdlOV8yRChkZXN0
LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CisKKyAgICAgICAgaW50IGxldmVscyA9IHNvdXJjZTkt
PmxldmVsQ291bnQoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZXZlbHM7ICsraSkK
KyAgICAgICAgeworICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnNyY1N1cmYgPSBzb3Vy
Y2U5LT5nZXRTdXJmYWNlTGV2ZWwoaSwgZmFsc2UpOworICAgICAgICAgICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKmRzdFN1cmYgPSBkZXN0OS0+Z2V0U3VyZmFjZUxldmVsKGksIGZhbHNlKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgcmVzdWx0ID0gY29weVRvUmVuZGVyVGFyZ2V0KGRzdFN1cmYs
IHNyY1N1cmYsIHNvdXJjZTktPmlzTWFuYWdlZCgpKTsKKworICAgICAgICAgICAgaWYgKHNyY1N1
cmYpIHNyY1N1cmYtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIGlmIChkc3RTdXJmKSBkc3RTdXJm
LT5SZWxlYXNlKCk7CisKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK2Jvb2wgUmVuZGVyZXI5Ojpjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2VDdWJlICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnNvdXJjZSkKK3sK
KyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworCisgICAgaWYgKHNvdXJjZSAmJiBkZXN0KQorICAg
IHsKKyAgICAgICAgVGV4dHVyZVN0b3JhZ2U5X0N1YmUgKnNvdXJjZTkgPSBUZXh0dXJlU3RvcmFn
ZTlfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlOV9DdWJlKHNvdXJjZS0+Z2V0U3RvcmFnZUluc3Rh
bmNlKCkpOworICAgICAgICBUZXh0dXJlU3RvcmFnZTlfQ3ViZSAqZGVzdDkgPSBUZXh0dXJlU3Rv
cmFnZTlfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlOV9DdWJlKGRlc3QtPmdldFN0b3JhZ2VJbnN0
YW5jZSgpKTsKKyAgICAgICAgaW50IGxldmVscyA9IHNvdXJjZTktPmxldmVsQ291bnQoKTsKKyAg
ICAgICAgZm9yIChpbnQgZiA9IDA7IGYgPCA2OyBmKyspCisgICAgICAgIHsKKyAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbGV2ZWxzOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnNyY1N1cmYgPSBzb3VyY2U5LT5nZXRDdWJlTWFw
U3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmLCBpLCBmYWxzZSk7Cisg
ICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRzdFN1cmYgPSBkZXN0OS0+Z2V0Q3Vi
ZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZiwgaSwgdHJ1ZSk7
CisKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBjb3B5VG9SZW5kZXJUYXJnZXQoZHN0U3VyZiwg
c3JjU3VyZiwgc291cmNlOS0+aXNNYW5hZ2VkKCkpOworCisgICAgICAgICAgICAgICAgaWYgKHNy
Y1N1cmYpIHNyY1N1cmYtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICBpZiAoZHN0U3VyZikg
ZHN0U3VyZi0+UmVsZWFzZSgpOworCisgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0QzRFBPT0wgUmVuZGVyZXI5OjpnZXRC
dWZmZXJQb29sKERXT1JEIHVzYWdlKSBjb25zdAoreworICAgIGlmIChtRDNkOUV4ICE9IE5VTEwp
CisgICAgeworICAgICAgICByZXR1cm4gRDNEUE9PTF9ERUZBVUxUOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBpZiAoISh1c2FnZSAmIEQzRFVTQUdFX0RZTkFNSUMpKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gRDNEUE9PTF9NQU5BR0VEOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIEQzRFBPT0xfREVGQVVMVDsKK30KKworYm9vbCBSZW5kZXJlcjk6OmNv
cHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xl
ICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2Uy
RCAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpCit7CisgICAgUkVDVCByZWN0OworICAgIHJlY3QubGVm
dCA9IHNvdXJjZVJlY3QueDsKKyAgICByZWN0LnRvcCA9IHNvdXJjZVJlY3QueTsKKyAgICByZWN0
LnJpZ2h0ID0gc291cmNlUmVjdC54ICsgc291cmNlUmVjdC53aWR0aDsKKyAgICByZWN0LmJvdHRv
bSA9IHNvdXJjZVJlY3QueSArIHNvdXJjZVJlY3QuaGVpZ2h0OworCisgICAgcmV0dXJuIG1CbGl0
LT5jb3B5KGZyYW1lYnVmZmVyLCByZWN0LCBkZXN0Rm9ybWF0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBz
dG9yYWdlLCBsZXZlbCk7Cit9CisKK2Jvb2wgUmVuZGVyZXI5Ojpjb3B5SW1hZ2UoZ2w6OkZyYW1l
YnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xl
bnVtIGRlc3RGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpCit7CisgICAgUkVDVCByZWN0OworICAgIHJlY3QubGVm
dCA9IHNvdXJjZVJlY3QueDsKKyAgICByZWN0LnRvcCA9IHNvdXJjZVJlY3QueTsKKyAgICByZWN0
LnJpZ2h0ID0gc291cmNlUmVjdC54ICsgc291cmNlUmVjdC53aWR0aDsKKyAgICByZWN0LmJvdHRv
bSA9IHNvdXJjZVJlY3QueSArIHNvdXJjZVJlY3QuaGVpZ2h0OworCisgICAgcmV0dXJuIG1CbGl0
LT5jb3B5KGZyYW1lYnVmZmVyLCByZWN0LCBkZXN0Rm9ybWF0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBz
dG9yYWdlLCB0YXJnZXQsIGxldmVsKTsKK30KKworYm9vbCBSZW5kZXJlcjk6OmJsaXRSZWN0KGds
OjpGcmFtZWJ1ZmZlciAqcmVhZEZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFk
UmVjdCwgZ2w6OkZyYW1lYnVmZmVyICpkcmF3RnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5n
bGUgJmRyYXdSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYmxpdFJlbmRlclRh
cmdldCwgYm9vbCBibGl0RGVwdGhTdGVuY2lsKQoreworICAgIGVuZFNjZW5lKCk7CisKKyAgICBp
ZiAoYmxpdFJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJl
YWRCdWZmZXIgPSByZWFkRnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKDApOworICAgICAgICBn
bDo6UmVuZGVyYnVmZmVyICpkcmF3QnVmZmVyID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1
ZmZlcigwKTsKKyAgICAgICAgUmVuZGVyVGFyZ2V0OSAqcmVhZFJlbmRlclRhcmdldCA9IE5VTEw7
CisgICAgICAgIFJlbmRlclRhcmdldDkgKmRyYXdSZW5kZXJUYXJnZXQgPSBOVUxMOworICAgICAg
ICBJRGlyZWN0M0RTdXJmYWNlOSogcmVhZFN1cmZhY2UgPSBOVUxMOworICAgICAgICBJRGlyZWN0
M0RTdXJmYWNlOSogZHJhd1N1cmZhY2UgPSBOVUxMOworCisgICAgICAgIGlmIChyZWFkQnVmZmVy
KQorICAgICAgICB7CisgICAgICAgICAgICByZWFkUmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0
OTo6bWFrZVJlbmRlclRhcmdldDkocmVhZEJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOworICAg
ICAgICB9CisgICAgICAgIGlmIChkcmF3QnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICBk
cmF3UmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0OTo6bWFrZVJlbmRlclRhcmdldDkoZHJhd0J1
ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJlYWRS
ZW5kZXJUYXJnZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlYWRTdXJmYWNlID0gcmVhZFJl
bmRlclRhcmdldC0+Z2V0U3VyZmFjZSgpOworICAgICAgICB9CisgICAgICAgIGlmIChkcmF3UmVu
ZGVyVGFyZ2V0KQorICAgICAgICB7CisgICAgICAgICAgICBkcmF3U3VyZmFjZSA9IGRyYXdSZW5k
ZXJUYXJnZXQtPmdldFN1cmZhY2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghcmVhZFN1
cmZhY2UgfHwgIWRyYXdTdXJmYWNlKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkZhaWxl
ZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldC4iKTsKKyAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAg
UkVDVCBzcmNSZWN0OworICAgICAgICBzcmNSZWN0LmxlZnQgPSByZWFkUmVjdC54OworICAgICAg
ICBzcmNSZWN0LnJpZ2h0ID0gcmVhZFJlY3QueCArIHJlYWRSZWN0LndpZHRoOworICAgICAgICBz
cmNSZWN0LnRvcCA9IHJlYWRSZWN0Lnk7CisgICAgICAgIHNyY1JlY3QuYm90dG9tID0gcmVhZFJl
Y3QueSArIHJlYWRSZWN0LmhlaWdodDsKKworICAgICAgICBSRUNUIGRzdFJlY3Q7CisgICAgICAg
IGRzdFJlY3QubGVmdCA9IGRyYXdSZWN0Lng7CisgICAgICAgIGRzdFJlY3QucmlnaHQgPSBkcmF3
UmVjdC54ICsgZHJhd1JlY3Qud2lkdGg7CisgICAgICAgIGRzdFJlY3QudG9wID0gZHJhd1JlY3Qu
eTsKKyAgICAgICAgZHN0UmVjdC5ib3R0b20gPSBkcmF3UmVjdC55ICsgZHJhd1JlY3QuaGVpZ2h0
OworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+U3RyZXRjaFJlY3QocmVhZFN1
cmZhY2UsICZzcmNSZWN0LCBkcmF3U3VyZmFjZSwgJmRzdFJlY3QsIEQzRFRFWEZfTk9ORSk7CisK
KyAgICAgICAgcmVhZFN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgZHJhd1N1cmZhY2UtPlJl
bGVhc2UoKTsKKworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEVSUigiQmxpdEZyYW1lYnVmZmVyQU5HTEUgZmFpbGVkOiBTdHJldGNoUmVjdCByZXR1
cm5lZCAleC4iLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorCisgICAgaWYgKGJsaXREZXB0aFN0ZW5jaWwpCisgICAgeworICAgICAgICBnbDo6
UmVuZGVyYnVmZmVyICpyZWFkQnVmZmVyID0gcmVhZEZyYW1lYnVmZmVyLT5nZXREZXB0aE9yU3Rl
bmNpbGJ1ZmZlcigpOworICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpkcmF3QnVmZmVyID0gZHJh
d0ZyYW1lYnVmZmVyLT5nZXREZXB0aE9yU3RlbmNpbGJ1ZmZlcigpOworICAgICAgICBSZW5kZXJU
YXJnZXQ5ICpyZWFkRGVwdGhTdGVuY2lsID0gTlVMTDsKKyAgICAgICAgUmVuZGVyVGFyZ2V0OSAq
ZHJhd0RlcHRoU3RlbmNpbCA9IE5VTEw7CisgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5KiByZWFk
U3VyZmFjZSA9IE5VTEw7CisgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5KiBkcmF3U3VyZmFjZSA9
IE5VTEw7CisKKyAgICAgICAgaWYgKHJlYWRCdWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJlYWREZXB0aFN0ZW5jaWwgPSBSZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShyZWFk
QnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRyYXdC
dWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRyYXdEZXB0aFN0ZW5jaWwgPSBSZW5kZXJU
YXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShkcmF3QnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKSk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVhZERlcHRoU3RlbmNpbCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmVhZFN1cmZhY2UgPSByZWFkRGVwdGhTdGVuY2lsLT5nZXRTdXJmYWNlKCk7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRyYXdEZXB0aFN0ZW5jaWwpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGRyYXdTdXJmYWNlID0gZHJhd0RlcHRoU3RlbmNpbC0+Z2V0U3VyZmFjZSgpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCFyZWFkU3VyZmFjZSB8fCAhZHJhd1N1cmZhY2UpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIg
dGFyZ2V0LiIpOworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
LCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2Ut
PlN0cmV0Y2hSZWN0KHJlYWRTdXJmYWNlLCBOVUxMLCBkcmF3U3VyZmFjZSwgTlVMTCwgRDNEVEVY
Rl9OT05FKTsKKworICAgICAgICByZWFkU3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICBkcmF3
U3VyZmFjZS0+UmVsZWFzZSgpOworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAg
ICAgeworICAgICAgICAgICAgRVJSKCJCbGl0RnJhbWVidWZmZXJBTkdMRSBmYWlsZWQ6IFN0cmV0
Y2hSZWN0IHJldHVybmVkICV4LiIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJl
cjk6OnJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2gs
IGJvb2wgcGFja1JldmVyc2VSb3dPcmRlciwgR0xpbnQgcGFja0FsaWdubWVudCwgdm9pZCogcGl4
ZWxzKQoreworICAgIFJlbmRlclRhcmdldDkgKnJlbmRlclRhcmdldCA9IE5VTEw7CisgICAgSURp
cmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOworICAgIGdsOjpSZW5kZXJidWZmZXIgKmNv
bG9yYnVmZmVyID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKDApOworCisgICAgaWYgKGNv
bG9yYnVmZmVyKQorICAgIHsKKyAgICAgICAgcmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0OTo6
bWFrZVJlbmRlclRhcmdldDkoY29sb3JidWZmZXItPmdldFJlbmRlclRhcmdldCgpKTsKKyAgICB9
CisgICAgCisgICAgaWYgKHJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIHN1cmZhY2UgPSBy
ZW5kZXJUYXJnZXQtPmdldFN1cmZhY2UoKTsKKyAgICB9CisKKyAgICBpZiAoIXN1cmZhY2UpCisg
ICAgeworICAgICAgICAvLyBjb250ZXh0IG11c3QgYmUgbG9zdAorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7CisgICAgc3VyZmFjZS0+R2V0RGVzYygm
ZGVzYyk7CisKKyAgICBpZiAoZGVzYy5NdWx0aVNhbXBsZVR5cGUgIT0gRDNETVVMVElTQU1QTEVf
Tk9ORSkKKyAgICB7CisgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRTogUmVxdWly
ZXMgcmVzb2x2ZSB1c2luZyBTdHJldGNoUmVjdCBpbnRvIG5vbi1tdWx0aXNhbXBsZWQgcmVuZGVy
IHRhcmdldAorICAgICAgICBzdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorCisgICAgSFJFU1VMVCByZXN1bHQ7Cisg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKnN5c3RlbVN1cmZhY2UgPSBOVUxMOworICAgIGJvb2wgZGly
ZWN0VG9QaXhlbHMgPSAhcGFja1JldmVyc2VSb3dPcmRlciAmJiBwYWNrQWxpZ25tZW50IDw9IDQg
JiYgZ2V0U2hhcmVIYW5kbGVTdXBwb3J0KCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
eCA9PSAwICYmIHkgPT0gMCAmJiBVSU5UKHdpZHRoKSA9PSBkZXNjLldpZHRoICYmIFVJTlQoaGVp
Z2h0KSA9PSBkZXNjLkhlaWdodCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjLkZv
cm1hdCA9PSBEM0RGTVRfQThSOEc4QjggJiYgZm9ybWF0ID09IEdMX0JHUkFfRVhUICYmIHR5cGUg
PT0gR0xfVU5TSUdORURfQllURTsKKyAgICBpZiAoZGlyZWN0VG9QaXhlbHMpCisgICAgeworICAg
ICAgICAvLyBVc2UgdGhlIHBpeGVscyBwdHIgYXMgYSBzaGFyZWQgaGFuZGxlIHRvIHdyaXRlIGRp
cmVjdGx5IGludG8gY2xpZW50J3MgbWVtb3J5CisgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNy
ZWF0ZU9mZnNjcmVlblBsYWluU3VyZmFjZShkZXNjLldpZHRoLCBkZXNjLkhlaWdodCwgZGVzYy5G
b3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBEM0RQT09MX1NZU1RFTU1FTSwgJnN5c3RlbVN1cmZhY2UsICZwaXhlbHMpOworICAgICAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRyeSBhZ2Fp
biB3aXRob3V0IHRoZSBzaGFyZWQgaGFuZGxlCisgICAgICAgICAgICBkaXJlY3RUb1BpeGVscyA9
IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFkaXJlY3RUb1BpeGVscykKKyAg
ICB7CisgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZU9mZnNjcmVlblBsYWluU3VyZmFj
ZShkZXNjLldpZHRoLCBkZXNjLkhlaWdodCwgZGVzYy5Gb3JtYXQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RQT09MX1NZU1RFTU1FTSwg
JnN5c3RlbVN1cmZhY2UsIE5VTEwpOworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1P
UlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgc3VyZmFjZS0+UmVs
ZWFzZSgpOworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJlc3VsdCA9IG1EZXZpY2UtPkdldFJlbmRlclRhcmdl
dERhdGEoc3VyZmFjZSwgc3lzdGVtU3VyZmFjZSk7CisgICAgc3VyZmFjZS0+UmVsZWFzZSgpOwor
ICAgIHN1cmZhY2UgPSBOVUxMOworCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAg
ICAgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOworCisgICAgICAgIC8vIEl0IHR1cm5zIG91
dCB0aGF0IEQzRCB3aWxsIHNvbWV0aW1lcyBwcm9kdWNlIG1vcmUgZXJyb3IKKyAgICAgICAgLy8g
Y29kZXMgdGhhbiB0aG9zZSBkb2N1bWVudGVkLgorICAgICAgICBpZiAoZDNkOTo6aXNEZXZpY2VM
b3N0RXJyb3IocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgbm90aWZ5RGV2aWNlTG9z
dCgpOworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgIH0KKworICAgIGlmIChk
aXJlY3RUb1BpeGVscykKKyAgICB7CisgICAgICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFQ1QgcmVjdDsKKyAgICByZWN0LmxlZnQg
PSBnbDo6Y2xhbXAoeCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KGRlc2MuV2lkdGgpKTsKKyAgICBy
ZWN0LnRvcCA9IGdsOjpjbGFtcCh5LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVzYy5IZWlnaHQp
KTsKKyAgICByZWN0LnJpZ2h0ID0gZ2w6OmNsYW1wKHggKyB3aWR0aCwgMEwsIHN0YXRpY19jYXN0
PExPTkc+KGRlc2MuV2lkdGgpKTsKKyAgICByZWN0LmJvdHRvbSA9IGdsOjpjbGFtcCh5ICsgaGVp
Z2h0LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVzYy5IZWlnaHQpKTsKKworICAgIEQzRExPQ0tF
RF9SRUNUIGxvY2s7CisgICAgcmVzdWx0ID0gc3lzdGVtU3VyZmFjZS0+TG9ja1JlY3QoJmxvY2ss
ICZyZWN0LCBEM0RMT0NLX1JFQURPTkxZKTsKKworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAg
ICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVh
c2UoKTsKKworICAgICAgICByZXR1cm47ICAgLy8gTm8gc2Vuc2libGUgZXJyb3IgdG8gZ2VuZXJh
dGUKKyAgICB9CisKKyAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gKHVuc2lnbmVkIGNoYXIqKXBp
eGVsczsKKyAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdDE2ID0gKHVuc2lnbmVkIHNob3J0KilwaXhl
bHM7CisKKyAgICB1bnNpZ25lZCBjaGFyICpzb3VyY2U7CisgICAgaW50IGlucHV0UGl0Y2g7Cisg
ICAgaWYgKHBhY2tSZXZlcnNlUm93T3JkZXIpCisgICAgeworICAgICAgICBzb3VyY2UgPSAoKHVu
c2lnbmVkIGNoYXIqKWxvY2sucEJpdHMpICsgbG9jay5QaXRjaCAqIChyZWN0LmJvdHRvbSAtIHJl
Y3QudG9wIC0gMSk7CisgICAgICAgIGlucHV0UGl0Y2ggPSAtbG9jay5QaXRjaDsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgc291cmNlID0gKHVuc2lnbmVkIGNoYXIqKWxvY2sucEJp
dHM7CisgICAgICAgIGlucHV0UGl0Y2ggPSBsb2NrLlBpdGNoOworICAgIH0KKworICAgIHVuc2ln
bmVkIGludCBmYXN0UGl4ZWxTaXplID0gMDsKKworICAgIGlmIChkZXNjLkZvcm1hdCA9PSBEM0RG
TVRfQThSOEc4QjggJiYKKyAgICAgICAgZm9ybWF0ID09IEdMX0JHUkFfRVhUICYmCisgICAgICAg
IHR5cGUgPT0gR0xfVU5TSUdORURfQllURSkKKyAgICB7CisgICAgICAgIGZhc3RQaXhlbFNpemUg
PSA0OworICAgIH0KKyAgICBlbHNlIGlmICgoZGVzYy5Gb3JtYXQgPT0gRDNERk1UX0E0UjRHNEI0
ICYmCisgICAgICAgICAgICAgZm9ybWF0ID09IEdMX0JHUkFfRVhUICYmCisgICAgICAgICAgICAg
dHlwZSA9PSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQpIHx8CisgICAgICAgICAg
ICAgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BMVI1RzVCNSAmJgorICAgICAgICAgICAgIGZvcm1h
dCA9PSBHTF9CR1JBX0VYVCAmJgorICAgICAgICAgICAgIHR5cGUgPT0gR0xfVU5TSUdORURfU0hP
UlRfMV81XzVfNV9SRVZfRVhUKSkKKyAgICB7CisgICAgICAgIGZhc3RQaXhlbFNpemUgPSAyOwor
ICAgIH0KKyAgICBlbHNlIGlmIChkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQTE2QjE2RzE2UjE2RiAm
JgorICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9SR0JBICYmCisgICAgICAgICAgICAgdHlwZSA9
PSBHTF9IQUxGX0ZMT0FUX09FUykKKyAgICB7CisgICAgICAgIGZhc3RQaXhlbFNpemUgPSA4Owor
ICAgIH0KKyAgICBlbHNlIGlmIChkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQTMyQjMyRzMyUjMyRiAm
JgorICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9SR0JBICYmCisgICAgICAgICAgICAgdHlwZSA9
PSBHTF9GTE9BVCkKKyAgICB7CisgICAgICAgIGZhc3RQaXhlbFNpemUgPSAxNjsKKyAgICB9CisK
KyAgICBmb3IgKGludCBqID0gMDsgaiA8IHJlY3QuYm90dG9tIC0gcmVjdC50b3A7IGorKykKKyAg
ICB7CisgICAgICAgIGlmIChmYXN0UGl4ZWxTaXplICE9IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIC8vIEZhc3QgcGF0aCBmb3IgZm9ybWF0cyB3aGljaCByZXF1aXJlIG5vIHRyYW5zbGF0aW9u
OgorICAgICAgICAgICAgLy8gRDNERk1UX0E4UjhHOEI4IHRvIEJHUkEvVU5TSUdORURfQllURQor
ICAgICAgICAgICAgLy8gRDNERk1UX0E0UjRHNEI0IHRvIEJHUkEvVU5TSUdORURfU0hPUlRfNF80
XzRfNF9SRVZfRVhUCisgICAgICAgICAgICAvLyBEM0RGTVRfQTFSNUc1QjUgdG8gQkdSQS9VTlNJ
R05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQKKyAgICAgICAgICAgIC8vIEQzREZNVF9BMTZCMTZH
MTZSMTZGIHRvIFJHQkEvSEFMRl9GTE9BVF9PRVMKKyAgICAgICAgICAgIC8vIEQzREZNVF9BMzJC
MzJHMzJSMzJGIHRvIFJHQkEvRkxPQVQKKyAgICAgICAgICAgIC8vIAorICAgICAgICAgICAgLy8g
Tm90ZSB0aGF0IGJ1ZmZlcnMgd2l0aCBubyBhbHBoYSBnbyB0aHJvdWdoIHRoZSBzbG93IHBhdGgg
YmVsb3cuCisgICAgICAgICAgICBtZW1jcHkoZGVzdCArIGogKiBvdXRwdXRQaXRjaCwKKyAgICAg
ICAgICAgICAgICAgICBzb3VyY2UgKyBqICogaW5wdXRQaXRjaCwKKyAgICAgICAgICAgICAgICAg
ICAocmVjdC5yaWdodCAtIHJlY3QubGVmdCkgKiBmYXN0UGl4ZWxTaXplKTsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGRlc2MuRm9ybWF0ID09IEQz
REZNVF9BOFI4RzhCOCAmJgorICAgICAgICAgICAgICAgICBmb3JtYXQgPT0gR0xfUkdCQSAmJgor
ICAgICAgICAgICAgICAgICB0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIC8vIEZhc3QgcGF0aCBmb3Igc3dhcHBpbmcgcmVkIHdpdGggYmx1ZQorICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OyBpKyspCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFyZ2IgPSAqKHVuc2ln
bmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOworICAgICAgICAgICAg
ICAgICoodW5zaWduZWQgaW50KikoZGVzdCArIDQgKiBpICsgaiAqIG91dHB1dFBpdGNoKSA9Cisg
ICAgICAgICAgICAgICAgICAgIChhcmdiICYgMHhGRjAwRkYwMCkgfCAgICAgICAvLyBLZWVwIGFs
cGhhIGFuZCBncmVlbgorICAgICAgICAgICAgICAgICAgICAoYXJnYiAmIDB4MDBGRjAwMDApID4+
IDE2IHwgLy8gTW92ZSByZWQgdG8gYmx1ZQorICAgICAgICAgICAgICAgICAgICAoYXJnYiAmIDB4
MDAwMDAwRkYpIDw8IDE2OyAgLy8gTW92ZSBibHVlIHRvIHJlZAorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHJlY3QucmlnaHQgLSByZWN0LmxlZnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAg
ZmxvYXQgcjsKKyAgICAgICAgICAgIGZsb2F0IGc7CisgICAgICAgICAgICBmbG9hdCBiOworICAg
ICAgICAgICAgZmxvYXQgYTsKKworICAgICAgICAgICAgc3dpdGNoIChkZXNjLkZvcm1hdCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiID0gKih1bnNp
Z25lZCBzaG9ydCopKHNvdXJjZSArIDIgKiBpICsgaiAqIGlucHV0UGl0Y2gpOworCisgICAgICAg
ICAgICAgICAgICAgIGEgPSAxLjBmOworICAgICAgICAgICAgICAgICAgICBiID0gKHJnYiAmIDB4
MDAxRikgKiAoMS4wZiAvIDB4MDAxRik7CisgICAgICAgICAgICAgICAgICAgIGcgPSAocmdiICYg
MHgwN0UwKSAqICgxLjBmIC8gMHgwN0UwKTsKKyAgICAgICAgICAgICAgICAgICAgciA9IChyZ2Ig
JiAweEY4MDApICogKDEuMGYgLyAweEY4MDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6CisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhcmdiID0g
Kih1bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDIgKiBpICsgaiAqIGlucHV0UGl0Y2gpOworCisg
ICAgICAgICAgICAgICAgICAgIGEgPSAoYXJnYiAmIDB4ODAwMCkgPyAxLjBmIDogMC4wZjsKKyAg
ICAgICAgICAgICAgICAgICAgYiA9IChhcmdiICYgMHgwMDFGKSAqICgxLjBmIC8gMHgwMDFGKTsK
KyAgICAgICAgICAgICAgICAgICAgZyA9IChhcmdiICYgMHgwM0UwKSAqICgxLjBmIC8gMHgwM0Uw
KTsKKyAgICAgICAgICAgICAgICAgICAgciA9IChhcmdiICYgMHg3QzAwKSAqICgxLjBmIC8gMHg3
QzAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50IGFyZ2IgPSAqKHVuc2lnbmVkIGludCopKHNvdXJjZSAr
IDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOworCisgICAgICAgICAgICAgICAgICAgIGEgPSAoYXJn
YiAmIDB4RkYwMDAwMDApICogKDEuMGYgLyAweEZGMDAwMDAwKTsKKyAgICAgICAgICAgICAgICAg
ICAgYiA9IChhcmdiICYgMHgwMDAwMDBGRikgKiAoMS4wZiAvIDB4MDAwMDAwRkYpOworICAgICAg
ICAgICAgICAgICAgICBnID0gKGFyZ2IgJiAweDAwMDBGRjAwKSAqICgxLjBmIC8gMHgwMDAwRkYw
MCk7CisgICAgICAgICAgICAgICAgICAgIHIgPSAoYXJnYiAmIDB4MDBGRjAwMDApICogKDEuMGYg
LyAweDAwRkYwMDAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHhyZ2IgPSAqKHVuc2lnbmVkIGludCop
KHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOworCisgICAgICAgICAgICAgICAgICAg
IGEgPSAxLjBmOworICAgICAgICAgICAgICAgICAgICBiID0gKHhyZ2IgJiAweDAwMDAwMEZGKSAq
ICgxLjBmIC8gMHgwMDAwMDBGRik7CisgICAgICAgICAgICAgICAgICAgIGcgPSAoeHJnYiAmIDB4
MDAwMEZGMDApICogKDEuMGYgLyAweDAwMDBGRjAwKTsKKyAgICAgICAgICAgICAgICAgICAgciA9
ICh4cmdiICYgMHgwMEZGMDAwMCkgKiAoMS4wZiAvIDB4MDBGRjAwMDApOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRf
QTJSMTBHMTBCMTA6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5w
dXRQaXRjaCk7CisKKyAgICAgICAgICAgICAgICAgICAgYSA9IChhcmdiICYgMHhDMDAwMDAwMCkg
KiAoMS4wZiAvIDB4QzAwMDAwMDApOworICAgICAgICAgICAgICAgICAgICBiID0gKGFyZ2IgJiAw
eDAwMDAwM0ZGKSAqICgxLjBmIC8gMHgwMDAwMDNGRik7CisgICAgICAgICAgICAgICAgICAgIGcg
PSAoYXJnYiAmIDB4MDAwRkZDMDApICogKDEuMGYgLyAweDAwMEZGQzAwKTsKKyAgICAgICAgICAg
ICAgICAgICAgciA9IChhcmdiICYgMHgzRkYwMDAwMCkgKiAoMS4wZiAvIDB4M0ZGMDAwMDApOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIGZsb2F0IGZvcm1hdHMgaW4gRDNEIGFyZSBzdG9yZWQgcmdiYSwgcmF0aGVy
IHRoYW4gdGhlIG90aGVyIHdheSByb3VuZAorICAgICAgICAgICAgICAgICAgICByID0gKigoZmxv
YXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAwKTsKKyAgICAgICAgICAg
ICAgICAgICAgZyA9ICooKGZsb2F0Kikoc291cmNlICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gp
ICsgMSk7CisgICAgICAgICAgICAgICAgICAgIGIgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICog
aSArIGogKiBpbnB1dFBpdGNoKSArIDIpOworICAgICAgICAgICAgICAgICAgICBhID0gKigoZmxv
YXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAzKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRDNERk1U
X0ExNkIxNkcxNlIxNkY6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAv
LyBmbG9hdCBmb3JtYXRzIGluIEQzRCBhcmUgc3RvcmVkIHJnYmEsIHJhdGhlciB0aGFuIHRoZSBv
dGhlciB3YXkgcm91bmQKKyAgICAgICAgICAgICAgICAgICAgciA9IGdsOjpmbG9hdDE2VG9GbG9h
dDMyKCooKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsgOCAqIGkgKyBqICogaW5wdXRQaXRjaCkg
KyAwKSk7CisgICAgICAgICAgICAgICAgICAgIGcgPSBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKCh1
bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDggKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMSkpOwor
ICAgICAgICAgICAgICAgICAgICBiID0gZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKigodW5zaWduZWQg
c2hvcnQqKShzb3VyY2UgKyA4ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDIpKTsKKyAgICAgICAg
ICAgICAgICAgICAgYSA9IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCooKHVuc2lnbmVkIHNob3J0Kiko
c291cmNlICsgOCAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAzKSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorICAgICAgICAgICAgICAgIFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9SR0JBOgorICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAg
ICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAwXSA9ICh1bnNpZ25l
ZCBjaGFyKSgyNTUgKiByICsgMC41Zik7CisgICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkg
KyBqICogb3V0cHV0UGl0Y2ggKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBnICsgMC41Zik7
CisgICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAyXSA9
ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBiICsgMC41Zik7CisgICAgICAgICAgICAgICAgICAgIGRl
c3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAzXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBh
ICsgMC41Zik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6CisgICAgICAgICAgICAg
ICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNh
c2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGog
KiBvdXRwdXRQaXRjaCArIDBdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGIgKyAwLjVmKTsKKyAg
ICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDFdID0gKHVu
c2lnbmVkIGNoYXIpKDI1NSAqIGcgKyAwLjVmKTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0
ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDJdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIHIgKyAw
LjVmKTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCAr
IDNdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGEgKyAwLjVmKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80
XzRfUkVWX0VYVDoKKyAgICAgICAgICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNr
dG9wIEdMIHNwZWMgaW4gdGhlICJUcmFuc2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9u
CisgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgdHlwZSBpcyBwYWNrZWQgYXMgZm9sbG93czoK
KyAgICAgICAgICAgICAgICAgICAgLy8gICAxNSAgIDE0ICAgMTMgICAxMiAgIDExICAgMTAgICAg
OSAgICA4ICAgIDcgICAgNiAgICA1ICAgIDQgICAgMyAgICAyICAgIDEgICAgMAorICAgICAgICAg
ICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAg
ICAgLy8gfCAgICAgICA0dGggICAgICAgICB8ICAgICAgICAzcmQgICAgICAgICB8ICAgICAgICAy
bmQgICAgICAgIHwgICAxc3QgY29tcG9uZW50ICAgfAorICAgICAgICAgICAgICAgICAgICAvLyAg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIGNh
c2Ugb2YgQkdSQV9FWFQsIEIgaXMgdGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBh
bmQgc28gZm9ydGguCisgICAgICAgICAgICAgICAgICAgIGRlc3QxNltpICsgaiAqIG91dHB1dFBp
dGNoIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KV0gPQorICAgICAgICAgICAgICAgICAgICAgICAg
KCh1bnNpZ25lZCBzaG9ydCkoMTUgKiBhICsgMC41ZikgPDwgMTIpfAorICAgICAgICAgICAgICAg
ICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUgKiByICsgMC41ZikgPDwgOCkgfAorICAgICAg
ICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUgKiBnICsgMC41ZikgPDwgNCkg
fAorICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUgKiBiICsgMC41
ZikgPDwgMCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQ6CisgICAgICAgICAgICAgICAg
ICAgIC8vIEFjY29yZGluZyB0byB0aGUgZGVza3RvcCBHTCBzcGVjIGluIHRoZSAiVHJhbnNmZXIg
b2YgUGl4ZWwgUmVjdGFuZ2xlcyIgc2VjdGlvbgorICAgICAgICAgICAgICAgICAgICAvLyB0aGlz
IHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIC8vICAgMTUg
ICAxNCAgIDEzICAgMTIgICAxMSAgIDEwICAgIDkgICAgOCAgICA3ICAgIDYgICAgNSAgICA0ICAg
IDMgICAgMiAgICAxICAgIDAKKyAgICAgICAgICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgIC8vIHwgNHRoIHwgICAgICAgICAgM3JkICAg
ICAgICAgICB8ICAgICAgICAgICAybmQgICAgICAgICAgfCAgICAgIDFzdCBjb21wb25lbnQgICAg
IHwKKyAgICAgICAgICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAg
ICAgICAgICAgICAgICAgIC8vIGluIHRoZSBjYXNlIG9mIEJHUkFfRVhULCBCIGlzIHRoZSBmaXJz
dCBjb21wb25lbnQsIEcgdGhlIHNlY29uZCwgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgICAg
ICAgICBkZXN0MTZbaSArIGogKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCld
ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKCAgICAgYSArIDAu
NWYpIDw8IDE1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgz
MSAqIHIgKyAwLjVmKSA8PCAxMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25l
ZCBzaG9ydCkoMzEgKiBnICsgMC41ZikgPDwgNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAg
KCh1bnNpZ25lZCBzaG9ydCkoMzEgKiBiICsgMC41ZikgPDwgMCk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfUkdCOgorICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OgorICAg
ICAgICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNp
Z25lZCBzaG9ydCldID0gCisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0
KSgzMSAqIGIgKyAwLjVmKSA8PCAwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2ln
bmVkIHNob3J0KSg2MyAqIGcgKyAwLjVmKSA8PCA1KSB8CisgICAgICAgICAgICAgICAgICAgICAg
ICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIHIgKyAwLjVmKSA8PCAxMSk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgor
ICAgICAgICAgICAgICAgICAgICBkZXN0WzMgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMF0gPSAo
dW5zaWduZWQgY2hhcikoMjU1ICogciArIDAuNWYpOworICAgICAgICAgICAgICAgICAgICBkZXN0
WzMgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMV0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogZyAr
IDAuNWYpOworICAgICAgICAgICAgICAgICAgICBkZXN0WzMgKiBpICsgaiAqIG91dHB1dFBpdGNo
ICsgMl0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYiArIDAuNWYpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgc3lzdGVtU3VyZmFjZS0+VW5sb2NrUmVjdCgpOworCisgICAgc3lzdGVtU3VyZmFjZS0+
UmVsZWFzZSgpOworfQorCitSZW5kZXJUYXJnZXQgKlJlbmRlcmVyOTo6Y3JlYXRlUmVuZGVyVGFy
Z2V0KFN3YXBDaGFpbiAqc3dhcENoYWluLCBib29sIGRlcHRoKQoreworICAgIFN3YXBDaGFpbjkg
KnN3YXBDaGFpbjkgPSBTd2FwQ2hhaW45OjptYWtlU3dhcENoYWluOShzd2FwQ2hhaW4pOworICAg
IElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gTlVMTDsKKyAgICBpZiAoZGVwdGgpCisgICAg
eworICAgICAgICBzdXJmYWNlID0gc3dhcENoYWluOS0+Z2V0RGVwdGhTdGVuY2lsKCk7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHN1cmZhY2UgPSBzd2FwQ2hhaW45LT5nZXRSZW5k
ZXJUYXJnZXQoKTsKKyAgICB9CisKKyAgICBSZW5kZXJUYXJnZXQ5ICpyZW5kZXJUYXJnZXQgPSBu
ZXcgUmVuZGVyVGFyZ2V0OSh0aGlzLCBzdXJmYWNlKTsKKworICAgIHJldHVybiByZW5kZXJUYXJn
ZXQ7Cit9CisKK1JlbmRlclRhcmdldCAqUmVuZGVyZXI5OjpjcmVhdGVSZW5kZXJUYXJnZXQoaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMsIGJvb2wg
ZGVwdGgpCit7CisgICAgUmVuZGVyVGFyZ2V0OSAqcmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRh
cmdldDkodGhpcywgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBzYW1wbGVzKTsKKyAgICByZXR1cm4g
cmVuZGVyVGFyZ2V0OworfQorCitTaGFkZXJFeGVjdXRhYmxlICpSZW5kZXJlcjk6OmxvYWRFeGVj
dXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCByeDo6U2hhZGVyVHlw
ZSB0eXBlKQoreworICAgIFNoYWRlckV4ZWN1dGFibGU5ICpleGVjdXRhYmxlID0gTlVMTDsKKwor
ICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIHJ4OjpTSEFERVJfVkVSVEVYOgor
ICAgICAgICB7CisgICAgICAgICAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICp2c2hhZGVyID0g
Y3JlYXRlVmVydGV4U2hhZGVyKChEV09SRCopZnVuY3Rpb24sIGxlbmd0aCk7CisgICAgICAgICAg
ICBpZiAodnNoYWRlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxl
ID0gbmV3IFNoYWRlckV4ZWN1dGFibGU5KGZ1bmN0aW9uLCBsZW5ndGgsIHZzaGFkZXIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSByeDo6U0hB
REVSX1BJWEVMOgorICAgICAgICB7CisgICAgICAgICAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkg
KnBzaGFkZXIgPSBjcmVhdGVQaXhlbFNoYWRlcigoRFdPUkQqKWZ1bmN0aW9uLCBsZW5ndGgpOwor
ICAgICAgICAgICAgaWYgKHBzaGFkZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ZXhlY3V0YWJsZSA9IG5ldyBTaGFkZXJFeGVjdXRhYmxlOShmdW5jdGlvbiwgbGVuZ3RoLCBwc2hh
ZGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRl
ZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIHJldHVybiBleGVjdXRhYmxlOworfQorCitTaGFkZXJFeGVjdXRhYmxlICpSZW5kZXJlcjk6
OmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNo
YWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91
bmQpCit7CisgICAgY29uc3QgY2hhciAqcHJvZmlsZSA9IE5VTEw7CisKKyAgICBzd2l0Y2ggKHR5
cGUpCisgICAgeworICAgICAgY2FzZSByeDo6U0hBREVSX1ZFUlRFWDoKKyAgICAgICAgcHJvZmls
ZSA9IGdldE1ham9yU2hhZGVyTW9kZWwoKSA+PSAzID8gInZzXzNfMCIgOiAidnNfMl8wIjsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIHJ4OjpTSEFERVJfUElYRUw6CisgICAgICAgIHByb2Zp
bGUgPSBnZXRNYWpvclNoYWRlck1vZGVsKCkgPj0gMyA/ICJwc18zXzAiIDogInBzXzJfMCI7Cisg
ICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLy8gQU5HTEUgaXNzdWUgNDg2OgorICAg
IC8vIFdvcmstYXJvdW5kIGEgRDNEOSBjb21waWxlciBidWcgdGhhdCBwcmVzZW50cyBpdHNlbGYg
d2hlbiB1c2luZyBjb25kaXRpb25hbCBkaXNjYXJkLCBieSBkaXNhYmxpbmcgb3B0aW1pemF0aW9u
CisgICAgVUlOVCBvcHRpbWl6YXRpb25GbGFncyA9ICh3b3JrYXJvdW5kID09IEFOR0xFX0QzRF9X
T1JLQVJPVU5EX1NNM19PUFRJTUlaRVIgPyBEM0RDT01QSUxFX1NLSVBfT1BUSU1JWkFUSU9OIDog
QU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwpOworCisgICAgSUQzREJsb2IgKmJpbmFy
eSA9IChJRDNEQmxvYiopY29tcGlsZVRvQmluYXJ5KGluZm9Mb2csIHNoYWRlckhMU0wsIHByb2Zp
bGUsIG9wdGltaXphdGlvbkZsYWdzLCB0cnVlKTsKKyAgICBpZiAoIWJpbmFyeSkKKyAgICAgICAg
cmV0dXJuIE5VTEw7CisKKyAgICBTaGFkZXJFeGVjdXRhYmxlICpleGVjdXRhYmxlID0gbG9hZEV4
ZWN1dGFibGUoYmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksIGJpbmFyeS0+R2V0QnVmZmVyU2l6
ZSgpLCB0eXBlKTsKKyAgICBiaW5hcnktPlJlbGVhc2UoKTsKKworICAgIHJldHVybiBleGVjdXRh
YmxlOworfQorCitib29sIFJlbmRlcmVyOTo6Ym94RmlsdGVyKElEaXJlY3QzRFN1cmZhY2U5ICpz
b3VyY2UsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0KQoreworICAgIHJldHVybiBtQmxpdC0+Ym94
RmlsdGVyKHNvdXJjZSwgZGVzdCk7Cit9CisKK0QzRFBPT0wgUmVuZGVyZXI5OjpnZXRUZXh0dXJl
UG9vbChEV09SRCB1c2FnZSkgY29uc3QKK3sKKyAgICBpZiAobUQzZDlFeCAhPSBOVUxMKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEQzRFBPT0xfREVGQVVMVDsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgaWYgKCEodXNhZ2UgJiAoRDNEVVNBR0VfREVQVEhTVEVOQ0lMIHwgRDNEVVNB
R0VfUkVOREVSVEFSR0VUKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBEM0RQT09M
X01BTkFHRUQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gRDNEUE9PTF9ERUZBVUxU
OworfQorCitib29sIFJlbmRlcmVyOTo6Y29weVRvUmVuZGVyVGFyZ2V0KElEaXJlY3QzRFN1cmZh
Y2U5ICpkZXN0LCBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBib29sIGZyb21NYW5hZ2VkKQor
eworICAgIGlmIChzb3VyY2UgJiYgZGVzdCkKKyAgICB7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gRDNERVJSX09VVE9GVklERU9NRU1PUlk7CisKKyAgICAgICAgaWYgKGZyb21NYW5hZ2VkKQor
ICAgICAgICB7CisgICAgICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKKyAgICAgICAgICAg
IHNvdXJjZS0+R2V0RGVzYygmZGVzYyk7CisKKyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5
ICpzdXJmID0gMDsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZU9mZnNjcmVl
blBsYWluU3VyZmFjZShkZXNjLldpZHRoLCBkZXNjLkhlaWdodCwgZGVzYy5Gb3JtYXQsIEQzRFBP
T0xfU1lTVEVNTUVNLCAmc3VyZiwgTlVMTCk7CisKKyAgICAgICAgICAgIGlmIChTVUNDRUVERUQo
cmVzdWx0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBJbWFnZTk6OmNvcHlMb2Nr
YWJsZVN1cmZhY2VzKHN1cmYsIHNvdXJjZSk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbURl
dmljZS0+VXBkYXRlU3VyZmFjZShzdXJmLCBOVUxMLCBkZXN0LCBOVUxMKTsKKyAgICAgICAgICAg
ICAgICBzdXJmLT5SZWxlYXNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBlbmRTY2VuZSgpOworICAgICAgICAgICAgcmVz
dWx0ID0gbURldmljZS0+U3RyZXRjaFJlY3Qoc291cmNlLCBOVUxMLCBkZXN0LCBOVUxMLCBEM0RU
RVhGX05PTkUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAg
ICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVN
T1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitJbWFnZSAqUmVu
ZGVyZXI5OjpjcmVhdGVJbWFnZSgpCit7CisgICAgcmV0dXJuIG5ldyBJbWFnZTkoKTsKK30KKwor
dm9pZCBSZW5kZXJlcjk6OmdlbmVyYXRlTWlwbWFwKEltYWdlICpkZXN0LCBJbWFnZSAqc3JjKQor
eworICAgIEltYWdlOSAqc3JjOSA9IEltYWdlOTo6bWFrZUltYWdlOShzcmMpOworICAgIEltYWdl
OSAqZHN0OSA9IEltYWdlOTo6bWFrZUltYWdlOShkZXN0KTsKKyAgICBJbWFnZTk6OmdlbmVyYXRl
TWlwbWFwKGRzdDksIHNyYzkpOworfQorCitUZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXI5OjpjcmVh
dGVUZXh0dXJlU3RvcmFnZTJEKFN3YXBDaGFpbiAqc3dhcENoYWluKQoreworICAgIFN3YXBDaGFp
bjkgKnN3YXBDaGFpbjkgPSBTd2FwQ2hhaW45OjptYWtlU3dhcENoYWluOShzd2FwQ2hhaW4pOwor
ICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2U5XzJEKHRoaXMsIHN3YXBDaGFpbjkpOworfQor
CitUZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXI5OjpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKGludCBs
ZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVu
ZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgcmV0dXJuIG5l
dyBUZXh0dXJlU3RvcmFnZTlfMkQodGhpcywgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgdXNhZ2Us
IGZvcmNlUmVuZGVyYWJsZSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK1RleHR1cmVTdG9yYWdlICpS
ZW5kZXJlcjk6OmNyZWF0ZVRleHR1cmVTdG9yYWdlQ3ViZShpbnQgbGV2ZWxzLCBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXpl
KQoreworICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2U5X0N1YmUodGhpcywgbGV2ZWxzLCBp
bnRlcm5hbGZvcm1hdCwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSwgc2l6ZSk7Cit9CisKK2Jvb2wg
UmVuZGVyZXI5OjpnZXRMVUlEKExVSUQgKmFkYXB0ZXJMdWlkKSBjb25zdAoreworICAgIGFkYXB0
ZXJMdWlkLT5IaWdoUGFydCA9IDA7CisgICAgYWRhcHRlckx1aWQtPkxvd1BhcnQgPSAwOworCisg
ICAgaWYgKG1EM2Q5RXgpCisgICAgeworICAgICAgICBtRDNkOUV4LT5HZXRBZGFwdGVyTFVJRCht
QWRhcHRlciwgYWRhcHRlckx1aWQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yNGZkMmJkZDg0YWVmODRkMzJkZjFhZjcyNTRlZDI3OTM1OTU4NzQyCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2Q5L1JlbmRlcmVyOS5oCkBAIC0wLDAgKzEsMzU2IEBACisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisvLyBSZW5kZXJlcjkuaDogRGVmaW5lcyBhIGJhY2stZW5kIHNwZWNpZmljIGNsYXNzIGZvciB0
aGUgRDNEOSByZW5kZXJlci4KKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSRVI5
X0hfCisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjlfSF8KKworI2luY2x1ZGUg
ImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckNhY2hlLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4RGVjbGFyYXRpb25DYWNoZS5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9SZW5kZXJUYXJnZXQuaCIKKworbmFtZXNwYWNlIGdsCit7CitjbGFzcyBSZW5kZXJidWZm
ZXI7Cit9CisKK25hbWVzcGFjZSByeAoreworY2xhc3MgVmVydGV4RGF0YU1hbmFnZXI7CitjbGFz
cyBJbmRleERhdGFNYW5hZ2VyOworY2xhc3MgU3RyZWFtaW5nSW5kZXhCdWZmZXJJbnRlcmZhY2U7
CitzdHJ1Y3QgVHJhbnNsYXRlZEF0dHJpYnV0ZTsKKworY2xhc3MgUmVuZGVyZXI5IDogcHVibGlj
IFJlbmRlcmVyCit7CisgIHB1YmxpYzoKKyAgICBSZW5kZXJlcjkoZWdsOjpEaXNwbGF5ICpkaXNw
bGF5LCBIREMgaERjLCBib29sIHNvZnR3YXJlRGV2aWNlKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJl
cjkoKTsKKworICAgIHN0YXRpYyBSZW5kZXJlcjkgKm1ha2VSZW5kZXJlcjkoUmVuZGVyZXIgKnJl
bmRlcmVyKTsKKworICAgIHZpcnR1YWwgRUdMaW50IGluaXRpYWxpemUoKTsKKyAgICB2aXJ0dWFs
IGJvb2wgcmVzZXREZXZpY2UoKTsKKworICAgIHZpcnR1YWwgaW50IGdlbmVyYXRlQ29uZmlncyhD
b25maWdEZXNjICoqY29uZmlnRGVzY0xpc3QpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVDb25m
aWdzKENvbmZpZ0Rlc2MgKmNvbmZpZ0Rlc2NMaXN0KTsKKworICAgIHZvaWQgc3RhcnRTY2VuZSgp
OworICAgIHZvaWQgZW5kU2NlbmUoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzeW5jKGJvb2wgYmxv
Y2spOworCisgICAgdmlydHVhbCBTd2FwQ2hhaW4gKmNyZWF0ZVN3YXBDaGFpbihIV05EIHdpbmRv
dywgSEFORExFIHNoYXJlSGFuZGxlLCBHTGVudW0gYmFja0J1ZmZlckZvcm1hdCwgR0xlbnVtIGRl
cHRoQnVmZmVyRm9ybWF0KTsKKworICAgIElEaXJlY3QzRFF1ZXJ5OSogYWxsb2NhdGVFdmVudFF1
ZXJ5KCk7CisgICAgdm9pZCBmcmVlRXZlbnRRdWVyeShJRGlyZWN0M0RRdWVyeTkqIHF1ZXJ5KTsK
KworICAgIC8vIHJlc291cmNlIGNyZWF0aW9uCisgICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAq
Y3JlYXRlVmVydGV4U2hhZGVyKGNvbnN0IERXT1JEICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCk7
CisgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpjcmVhdGVQaXhlbFNoYWRlcihjb25zdCBEV09S
RCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgpOworICAgIEhSRVNVTFQgY3JlYXRlVmVydGV4QnVm
ZmVyKFVJTlQgTGVuZ3RoLCBEV09SRCBVc2FnZSwgSURpcmVjdDNEVmVydGV4QnVmZmVyOSAqKnBw
VmVydGV4QnVmZmVyKTsKKyAgICBIUkVTVUxUIGNyZWF0ZUluZGV4QnVmZmVyKFVJTlQgTGVuZ3Ro
LCBEV09SRCBVc2FnZSwgRDNERk9STUFUIEZvcm1hdCwgSURpcmVjdDNESW5kZXhCdWZmZXI5ICoq
cHBJbmRleEJ1ZmZlcik7CisjaWYgMAorICAgIHZvaWQgKmNyZWF0ZVRleHR1cmUyRCgpOworICAg
IHZvaWQgKmNyZWF0ZVRleHR1cmVDdWJlKCk7CisgICAgdm9pZCAqY3JlYXRlUXVlcnkoKTsKKyAg
ICB2b2lkICpjcmVhdGVJbmRleEJ1ZmZlcigpOworICAgIHZvaWQgKmNyZWF0ZVZlcnRleGJ1ZmZl
cigpOworCisgICAgLy8gc3RhdGUgc2V0dXAKKyAgICB2b2lkIGFwcGx5U2hhZGVycygpOworICAg
IHZvaWQgYXBwbHlDb25zdGFudHMoKTsKKyNlbmRpZgorICAgIHZpcnR1YWwgdm9pZCBzZXRTYW1w
bGVyU3RhdGUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRleCwgY29uc3QgZ2w6OlNhbXBs
ZXJTdGF0ZSAmc2FtcGxlcik7CisgICAgdmlydHVhbCB2b2lkIHNldFRleHR1cmUoZ2w6OlNhbXBs
ZXJUeXBlIHR5cGUsIGludCBpbmRleCwgZ2w6OlRleHR1cmUgKnRleHR1cmUpOworCisgICAgdmly
dHVhbCB2b2lkIHNldFJhc3Rlcml6ZXJTdGF0ZShjb25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZy
YXN0ZXJTdGF0ZSk7CisgICAgdmlydHVhbCB2b2lkIHNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVm
ZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0
IGdsOjpDb2xvciAmYmxlbmRDb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgc2FtcGxlTWFzayk7CisgICAgdmlydHVhbCB2b2lkIHNldERlcHRoU3RlbmNp
bFN0YXRlKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmZGVwdGhTdGVuY2lsU3RhdGUsIGlu
dCBzdGVuY2lsUmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
c3RlbmNpbEJhY2tSZWYsIGJvb2wgZnJvbnRGYWNlQ0NXKTsKKworICAgIHZpcnR1YWwgdm9pZCBz
ZXRTY2lzc29yUmVjdGFuZ2xlKGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNjaXNzb3IsIGJvb2wgZW5h
YmxlZCk7CisgICAgdmlydHVhbCBib29sIHNldFZpZXdwb3J0KGNvbnN0IGdsOjpSZWN0YW5nbGUg
JnZpZXdwb3J0LCBmbG9hdCB6TmVhciwgZmxvYXQgekZhciwgR0xlbnVtIGRyYXdNb2RlLCBHTGVu
dW0gZnJvbnRGYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlnbm9yZVZp
ZXdwb3J0KTsKKworICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlbmRlclRhcmdldChnbDo6RnJhbWVi
dWZmZXIgKmZyYW1lQnVmZmVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTaGFkZXJzKGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlVbmlm
b3JtcyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlVuaWZvcm1BcnJheSAq
dW5pZm9ybUFycmF5KTsKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHlQcmltaXRpdmVUeXBlKEdMZW51
bSBwcmltaXRpdmVUeXBlLCBHTHNpemVpIGVsZW1lbnRDb3VudCk7CisgICAgdmlydHVhbCBHTGVu
dW0gYXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGds
OjpWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmlidXRlc1tdLCBHTGludCBmaXJzdCwgR0xzaXpl
aSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpOworICAgIHZpcnR1YWwgR0xlbnVtIGFwcGx5SW5k
ZXhCdWZmZXIoY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlC
dWZmZXIsIEdMc2l6ZWkgY291bnQsIEdMZW51bSBtb2RlLCBHTGVudW0gdHlwZSwgVHJhbnNsYXRl
ZEluZGV4RGF0YSAqaW5kZXhJbmZvKTsKKworICAgIHZpcnR1YWwgdm9pZCBkcmF3QXJyYXlzKEdM
ZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcyk7CisgICAgdmlydHVh
bCB2b2lkIGRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5
cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVy
LCBjb25zdCBUcmFuc2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8sIEdMc2l6ZWkgaW5zdGFuY2Vz
KTsKKworICAgIHZpcnR1YWwgdm9pZCBjbGVhcihjb25zdCBnbDo6Q2xlYXJQYXJhbWV0ZXJzICZj
bGVhclBhcmFtcywgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcik7CisKKyAgICB2aXJ0dWFs
IHZvaWQgbWFya0FsbFN0YXRlRGlydHkoKTsKKworICAgIC8vIGxvc3QgZGV2aWNlCisgICAgdm9p
ZCBub3RpZnlEZXZpY2VMb3N0KCk7CisgICAgdmlydHVhbCBib29sIGlzRGV2aWNlTG9zdCgpOwor
ICAgIHZpcnR1YWwgYm9vbCB0ZXN0RGV2aWNlTG9zdChib29sIG5vdGlmeSk7CisgICAgdmlydHVh
bCBib29sIHRlc3REZXZpY2VSZXNldHRhYmxlKCk7CisKKyAgICAvLyBSZW5kZXJlciBjYXBhYmls
aXRpZXMKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpnZXREZXZpY2UoKSB7IHJldHVybiBtRGV2aWNl
OyB9CisgICAgdmlydHVhbCBEV09SRCBnZXRBZGFwdGVyVmVuZG9yKCkgY29uc3Q7CisgICAgdmly
dHVhbCBzdGQ6OnN0cmluZyBnZXRSZW5kZXJlckRlc2NyaXB0aW9uKCkgY29uc3Q7CisgICAgdmly
dHVhbCBHVUlEIGdldEFkYXB0ZXJJZGVudGlmaWVyKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJv
b2wgZ2V0QkdSQVRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldERY
VDFUZXh0dXJlU3VwcG9ydCgpOworICAgIHZpcnR1YWwgYm9vbCBnZXREWFQzVGV4dHVyZVN1cHBv
cnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUNVRleHR1cmVTdXBwb3J0KCk7CisgICAgdmly
dHVhbCBib29sIGdldEV2ZW50UXVlcnlTdXBwb3J0KCk7CisgICAgdmlydHVhbCBib29sIGdldEZs
b2F0MzJUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpOwor
ICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5n
LCBib29sICpyZW5kZXJhYmxlKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0THVtaW5hbmNlVGV4dHVy
ZVN1cHBvcnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3Vw
cG9ydCgpOworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFZlcnRleFRleHR1cmVJbWFn
ZVVuaXRzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4Q29tYmluZWRU
ZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJl
c2VydmVkVmVydGV4VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVk
IGludCBnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycygpIGNvbnN0OworICAg
IHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWYXJ5aW5nVmVjdG9ycygpIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCBnZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBnZXREZXB0aFRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmly
dHVhbCBib29sIGdldE9jY2x1c2lvblF1ZXJ5U3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwg
Ym9vbCBnZXRJbnN0YW5jaW5nU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRU
ZXh0dXJlRmlsdGVyQW5pc290cm9weVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGZsb2F0
IGdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldFNo
YXJlSGFuZGxlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXREZXJpdmF0aXZl
SW5zdHJ1Y3Rpb25TdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldFBvc3RTdWJC
dWZmZXJTdXBwb3J0KCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGludCBnZXRNYWpvclNoYWRlck1v
ZGVsKCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBnZXRNYXhQb2ludFNpemUoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGludCBnZXRNYXhWaWV3cG9ydERpbWVuc2lvbigpIGNvbnN0OworICAgIHZp
cnR1YWwgaW50IGdldE1heFRleHR1cmVXaWR0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdl
dE1heFRleHR1cmVIZWlnaHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0MzJCaXRJbmRl
eFN1cHBvcnQoKSBjb25zdDsKKyAgICBEV09SRCBnZXRDYXBzRGVjbFR5cGVzKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBpbnQgZ2V0TWluU3dhcEludGVydmFsKCkgY29uc3Q7CisgICAgdmlydHVhbCBp
bnQgZ2V0TWF4U3dhcEludGVydmFsKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0
TWF4U3VwcG9ydGVkU2FtcGxlcygpIGNvbnN0OworICAgIGludCBnZXROZWFyZXN0U3VwcG9ydGVk
U2FtcGxlcyhEM0RGT1JNQVQgZm9ybWF0LCBpbnQgcmVxdWVzdGVkKSBjb25zdDsKKyAgICAKKyAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhSZW5kZXJUYXJnZXRzKCkgY29uc3Q7CisKKyAg
ICBEM0RGT1JNQVQgQ29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChHTGludCBpbnRlcm5hbGZv
cm1hdCk7CisKKyAgICAvLyBQaXhlbCBvcGVyYXRpb25zCisgICAgdmlydHVhbCBib29sIGNvcHlU
b1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpkZXN0LCBUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTJEICpzb3VyY2UpOworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9SZW5kZXJU
YXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpkZXN0LCBUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZUN1YmUgKnNvdXJjZSk7CisKKyAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdlKGdsOjpG
cmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3Qs
IEdMZW51bSBkZXN0Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwg
R0xpbnQgbGV2ZWwpOworICAgIHZpcnR1YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVy
ICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRl
c3RGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsKTsKKworICAgIHZpcnR1YWwgYm9vbCBibGl0UmVjdChnbDo6RnJh
bWVidWZmZXIgKnJlYWRUYXJnZXQsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRSZWN0LCBnbDo6
RnJhbWVidWZmZXIgKmRyYXdUYXJnZXQsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRyYXdSZWN0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wgYmxp
dERlcHRoU3RlbmNpbCk7CisgICAgdmlydHVhbCB2b2lkIHJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVm
ZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2gsIGJvb2wgcGFja1JldmVyc2VSb3dPcmRlciwg
R0xpbnQgcGFja0FsaWdubWVudCwgdm9pZCogcGl4ZWxzKTsKKworICAgIC8vIFJlbmRlclRhcmdl
dCBjcmVhdGlvbgorICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJnZXQo
U3dhcENoYWluICpzd2FwQ2hhaW4sIGJvb2wgZGVwdGgpOworICAgIHZpcnR1YWwgUmVuZGVyVGFy
Z2V0ICpjcmVhdGVSZW5kZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBHTHNpemVpIHNhbXBsZXMsIGJvb2wgZGVwdGgpOworCisgICAgLy8gU2hhZGVyIG9wZXJh
dGlvbnMKKyAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1dGFibGUgKmxvYWRFeGVjdXRhYmxlKGNvbnN0
IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCByeDo6U2hhZGVyVHlwZSB0eXBlKTsKKyAg
ICB2aXJ0dWFsIFNoYWRlckV4ZWN1dGFibGUgKmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9M
b2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUs
IEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91bmQpOworCisgICAgLy8gSW1hZ2Ugb3BlcmF0aW9u
cworICAgIHZpcnR1YWwgSW1hZ2UgKmNyZWF0ZUltYWdlKCk7CisgICAgdmlydHVhbCB2b2lkIGdl
bmVyYXRlTWlwbWFwKEltYWdlICpkZXN0LCBJbWFnZSAqc291cmNlKTsKKyAgICB2aXJ0dWFsIFRl
eHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKFN3YXBDaGFpbiAqc3dhcENoYWlu
KTsKKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKGlu
dCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNl
UmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAgIHZpcnR1YWwg
VGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlQ3ViZShpbnQgbGV2ZWxzLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIGlu
dCBzaXplKTsKKworICAgIC8vIEJ1ZmZlciBjcmVhdGlvbgorICAgIHZpcnR1YWwgVmVydGV4QnVm
ZmVyICpjcmVhdGVWZXJ0ZXhCdWZmZXIoKTsKKyAgICB2aXJ0dWFsIEluZGV4QnVmZmVyICpjcmVh
dGVJbmRleEJ1ZmZlcigpOworICAgIHZpcnR1YWwgQnVmZmVyU3RvcmFnZSAqY3JlYXRlQnVmZmVy
U3RvcmFnZSgpOworCisgICAgLy8gUXVlcnkgYW5kIEZlbmNlIGNyZWF0aW9uCisgICAgdmlydHVh
bCBRdWVyeUltcGwgKmNyZWF0ZVF1ZXJ5KEdMZW51bSB0eXBlKTsKKyAgICB2aXJ0dWFsIEZlbmNl
SW1wbCAqY3JlYXRlRmVuY2UoKTsKKworICAgIC8vIEQzRDktcmVuZGVyZXIgc3BlY2lmaWMgbWV0
aG9kcworICAgIGJvb2wgYm94RmlsdGVyKElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIElEaXJl
Y3QzRFN1cmZhY2U5ICpkZXN0KTsKKworICAgIEQzRFBPT0wgZ2V0VGV4dHVyZVBvb2woRFdPUkQg
dXNhZ2UpIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIGdldExVSUQoTFVJRCAqYWRhcHRlckx1
aWQpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJl
bmRlcmVyOSk7CisKKyAgICB2b2lkIGRlaW5pdGlhbGl6ZSgpOworCisgICAgdm9pZCBhcHBseVVu
aWZvcm1uZnYoZ2w6OlVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMZmxvYXQgKnYpOwor
ICAgIHZvaWQgYXBwbHlVbmlmb3Jtbml2KGdsOjpVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25z
dCBHTGludCAqdik7CisgICAgdm9pZCBhcHBseVVuaWZvcm1uYnYoZ2w6OlVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0sIGNvbnN0IEdMaW50ICp2KTsKKworICAgIHZvaWQgZHJhd0xpbmVMb29wKEdMc2l6
ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGludCBtaW5JbmRl
eCwgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyKTsKKyAgICB2b2lkIGRyYXdJbmRleGVk
UG9pbnRzKEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMs
IGludCBtaW5JbmRleCwgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyKTsKKworICAgIHZv
aWQgZ2V0TXVsdGlTYW1wbGVTdXBwb3J0KEQzREZPUk1BVCBmb3JtYXQsIGJvb2wgKm11bHRpU2Ft
cGxlQXJyYXkpOworICAgIGJvb2wgY29weVRvUmVuZGVyVGFyZ2V0KElEaXJlY3QzRFN1cmZhY2U5
ICpkZXN0LCBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBib29sIGZyb21NYW5hZ2VkKTsKKyAg
ICBnbDo6UmVuZGVyYnVmZmVyICpnZXROdWxsQ29sb3JidWZmZXIoZ2w6OlJlbmRlcmJ1ZmZlciAq
ZGVwdGhidWZmZXIpOworCisgICAgRDNEUE9PTCBnZXRCdWZmZXJQb29sKERXT1JEIHVzYWdlKSBj
b25zdDsKKworICAgIEhNT0RVTEUgbUQzZDlNb2R1bGU7CisgICAgSERDIG1EYzsKKworICAgIHZv
aWQgaW5pdGlhbGl6ZURldmljZSgpOworICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBnZXREZWZh
dWx0UHJlc2VudFBhcmFtZXRlcnMoKTsKKyAgICB2b2lkIHJlbGVhc2VEZXZpY2VSZXNvdXJjZXMo
KTsKKworICAgIEhSRVNVTFQgZ2V0RGV2aWNlU3RhdHVzQ29kZSgpOworICAgIGJvb2wgaXNSZW1v
dmVkRGV2aWNlUmVzZXR0YWJsZSgpIGNvbnN0OworICAgIGJvb2wgcmVzZXRSZW1vdmVkRGV2aWNl
KCk7CisKKyAgICBVSU5UIG1BZGFwdGVyOworICAgIEQzRERFVlRZUEUgbURldmljZVR5cGU7Cisg
ICAgYm9vbCBtU29mdHdhcmVEZXZpY2U7ICAgLy8gRklYTUU6IERlcHJlY2F0ZQorICAgIElEaXJl
Y3QzRDkgKm1EM2Q5OyAgLy8gQWx3YXlzIHZhbGlkIGFmdGVyIHN1Y2Nlc3NmdWwgaW5pdGlhbGl6
YXRpb24uCisgICAgSURpcmVjdDNEOUV4ICptRDNkOUV4OyAgLy8gTWlnaHQgYmUgbnVsbCBpZiBE
M0Q5RXggaXMgbm90IHN1cHBvcnRlZC4KKyAgICBJRGlyZWN0M0REZXZpY2U5ICptRGV2aWNlOwor
ICAgIElEaXJlY3QzRERldmljZTlFeCAqbURldmljZUV4OyAgLy8gTWlnaHQgYmUgbnVsbCBpZiBE
M0Q5RXggaXMgbm90IHN1cHBvcnRlZC4KKworICAgIEJsaXQgKm1CbGl0OworCisgICAgSFdORCBt
RGV2aWNlV2luZG93OworCisgICAgYm9vbCBtRGV2aWNlTG9zdDsKKyAgICBEM0RDQVBTOSBtRGV2
aWNlQ2FwczsKKyAgICBEM0RBREFQVEVSX0lERU5USUZJRVI5IG1BZGFwdGVySWRlbnRpZmllcjsK
KworICAgIEQzRFBSSU1JVElWRVRZUEUgbVByaW1pdGl2ZVR5cGU7CisgICAgaW50IG1QcmltaXRp
dmVDb3VudDsKKyAgICBHTHNpemVpIG1SZXBlYXREcmF3OworCisgICAgYm9vbCBtU2NlbmVTdGFy
dGVkOworICAgIGJvb2wgbVN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZXM7CisgICAgYm9vbCBtU3Vw
cG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weTsKKyAgICBpbnQgbU1pblN3YXBJbnRlcnZhbDsK
KyAgICBpbnQgbU1heFN3YXBJbnRlcnZhbDsKKworICAgIGJvb2wgbU9jY2x1c2lvblF1ZXJ5U3Vw
cG9ydDsKKyAgICBib29sIG1FdmVudFF1ZXJ5U3VwcG9ydDsKKyAgICBib29sIG1WZXJ0ZXhUZXh0
dXJlU3VwcG9ydDsKKworICAgIGJvb2wgbURlcHRoVGV4dHVyZVN1cHBvcnQ7CisKKyAgICBib29s
IG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQ7CisgICAgYm9vbCBtRmxvYXQzMkZpbHRlclN1cHBvcnQ7
CisgICAgYm9vbCBtRmxvYXQzMlJlbmRlclN1cHBvcnQ7CisKKyAgICBib29sIG1GbG9hdDE2VGV4
dHVyZVN1cHBvcnQ7CisgICAgYm9vbCBtRmxvYXQxNkZpbHRlclN1cHBvcnQ7CisgICAgYm9vbCBt
RmxvYXQxNlJlbmRlclN1cHBvcnQ7CisKKyAgICBib29sIG1EWFQxVGV4dHVyZVN1cHBvcnQ7Cisg
ICAgYm9vbCBtRFhUM1RleHR1cmVTdXBwb3J0OworICAgIGJvb2wgbURYVDVUZXh0dXJlU3VwcG9y
dDsKKworICAgIGJvb2wgbUx1bWluYW5jZVRleHR1cmVTdXBwb3J0OworICAgIGJvb2wgbUx1bWlu
YW5jZUFscGhhVGV4dHVyZVN1cHBvcnQ7CisKKyAgICBzdGQ6Om1hcDxEM0RGT1JNQVQsIGJvb2wg
Kj4gbU11bHRpU2FtcGxlU3VwcG9ydDsKKyAgICBHTHNpemVpIG1NYXhTdXBwb3J0ZWRTYW1wbGVz
OworCisgICAgLy8gY3VycmVudCByZW5kZXIgdGFyZ2V0IHN0YXRlcworICAgIHVuc2lnbmVkIGlu
dCBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbDsKKyAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRE
ZXB0aGJ1ZmZlclNlcmlhbDsKKyAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRTdGVuY2lsYnVmZmVy
U2VyaWFsOworICAgIGJvb2wgbURlcHRoU3RlbmNpbEluaXRpYWxpemVkOworICAgIGJvb2wgbVJl
bmRlclRhcmdldERlc2NJbml0aWFsaXplZDsKKyAgICByeDo6UmVuZGVyVGFyZ2V0OjpEZXNjIG1S
ZW5kZXJUYXJnZXREZXNjOworICAgIHVuc2lnbmVkIGludCBtQ3VyU3RlbmNpbFNpemU7CisgICAg
dW5zaWduZWQgaW50IG1DdXJEZXB0aFNpemU7CisKKyAgICBJRGlyZWN0M0RTdGF0ZUJsb2NrOSAq
bU1hc2tlZENsZWFyU2F2ZWRTdGF0ZTsKKworICAgIC8vIHByZXZpb3VzbHkgc2V0IHJlbmRlciBz
dGF0ZXMKKyAgICBib29sIG1Gb3JjZVNldERlcHRoU3RlbmNpbFN0YXRlOworICAgIGdsOjpEZXB0
aFN0ZW5jaWxTdGF0ZSBtQ3VyRGVwdGhTdGVuY2lsU3RhdGU7CisgICAgaW50IG1DdXJTdGVuY2ls
UmVmOworICAgIGludCBtQ3VyU3RlbmNpbEJhY2tSZWY7CisgICAgYm9vbCBtQ3VyRnJvbnRGYWNl
Q0NXOworCisgICAgYm9vbCBtRm9yY2VTZXRSYXN0ZXJTdGF0ZTsKKyAgICBnbDo6UmFzdGVyaXpl
clN0YXRlIG1DdXJSYXN0ZXJTdGF0ZTsKKworICAgIGJvb2wgbUZvcmNlU2V0U2Npc3NvcjsKKyAg
ICBnbDo6UmVjdGFuZ2xlIG1DdXJTY2lzc29yOworICAgIGJvb2wgbVNjaXNzb3JFbmFibGVkOwor
CisgICAgYm9vbCBtRm9yY2VTZXRWaWV3cG9ydDsKKyAgICBnbDo6UmVjdGFuZ2xlIG1DdXJWaWV3
cG9ydDsKKyAgICBmbG9hdCBtQ3VyTmVhcjsKKyAgICBmbG9hdCBtQ3VyRmFyOworICAgIGZsb2F0
IG1DdXJEZXB0aEZyb250OworCisgICAgYm9vbCBtRm9yY2VTZXRCbGVuZFN0YXRlOworICAgIGds
OjpCbGVuZFN0YXRlIG1DdXJCbGVuZFN0YXRlOworICAgIGdsOjpDb2xvciBtQ3VyQmxlbmRDb2xv
cjsKKyAgICBHTHVpbnQgbUN1clNhbXBsZU1hc2s7CisKKyAgICAvLyBDdXJyZW50bHkgYXBwbGll
ZCBzYW1wbGVyIHN0YXRlcworICAgIGJvb2wgbUZvcmNlU2V0VmVydGV4U2FtcGxlclN0YXRlc1tn
bDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKKyAgICBn
bDo6U2FtcGxlclN0YXRlIG1DdXJWZXJ0ZXhTYW1wbGVyU3RhdGVzW2dsOjpJTVBMRU1FTlRBVElP
Tl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOworCisgICAgYm9vbCBtRm9yY2VTZXRQ
aXhlbFNhbXBsZXJTdGF0ZXNbZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKKyAgICBnbDo6
U2FtcGxlclN0YXRlIG1DdXJQaXhlbFNhbXBsZXJTdGF0ZXNbZ2w6Ok1BWF9URVhUVVJFX0lNQUdF
X1VOSVRTXTsKKworICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIHRleHR1cmVzCisgICAgdW5zaWdu
ZWQgaW50IG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZF
UlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKKyAgICB1bnNpZ25lZCBpbnQgbUN1clBpeGVsVGV4
dHVyZVNlcmlhbHNbZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKKworICAgIHVuc2lnbmVk
IGludCBtQXBwbGllZElCU2VyaWFsOworICAgIHVuc2lnbmVkIGludCBtQXBwbGllZFByb2dyYW1C
aW5hcnlTZXJpYWw7CisgICAgCisgICAgcng6OmR4X1ZlcnRleENvbnN0YW50cyBtVmVydGV4Q29u
c3RhbnRzOworICAgIHJ4OjpkeF9QaXhlbENvbnN0YW50cyBtUGl4ZWxDb25zdGFudHM7CisgICAg
Ym9vbCBtRHhVbmlmb3Jtc0RpcnR5OworCisgICAgLy8gQSBwb29sIG9mIGV2ZW50IHF1ZXJpZXMg
dGhhdCBhcmUgY3VycmVudGx5IHVudXNlZC4KKyAgICBzdGQ6OnZlY3RvcjxJRGlyZWN0M0RRdWVy
eTkqPiBtRXZlbnRRdWVyeVBvb2w7CisgICAgVmVydGV4U2hhZGVyQ2FjaGUgbVZlcnRleFNoYWRl
ckNhY2hlOworICAgIFBpeGVsU2hhZGVyQ2FjaGUgbVBpeGVsU2hhZGVyQ2FjaGU7CisKKyAgICBW
ZXJ0ZXhEYXRhTWFuYWdlciAqbVZlcnRleERhdGFNYW5hZ2VyOworICAgIFZlcnRleERlY2xhcmF0
aW9uQ2FjaGUgbVZlcnRleERlY2xhcmF0aW9uQ2FjaGU7CisKKyAgICBJbmRleERhdGFNYW5hZ2Vy
ICptSW5kZXhEYXRhTWFuYWdlcjsKKyAgICBTdHJlYW1pbmdJbmRleEJ1ZmZlckludGVyZmFjZSAq
bUxpbmVMb29wSUI7CisKKyAgICBlbnVtIHsgTlVNX05VTExfQ09MT1JCVUZGRVJfQ0FDSEVfRU5U
UklFUyA9IDEyIH07CisgICAgc3RydWN0IE51bGxDb2xvcmJ1ZmZlckNhY2hlRW50cnkKKyAgICB7
CisgICAgICAgIFVJTlQgbHJ1Q291bnQ7CisgICAgICAgIGludCB3aWR0aDsKKyAgICAgICAgaW50
IGhlaWdodDsKKyAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqYnVmZmVyOworICAgIH0gbU51bGxD
b2xvcmJ1ZmZlckNhY2hlW05VTV9OVUxMX0NPTE9SQlVGRkVSX0NBQ0hFX0VOVFJJRVNdOworICAg
IFVJTlQgbU1heE51bGxDb2xvcmJ1ZmZlckxSVTsKKworfTsKKworfQorI2VuZGlmIC8vIExJQkdM
RVNWMl9SRU5ERVJFUl9SRU5ERVJFUjlfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9TaGFkZXJFeGVjdXRhYmxlOS5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU2hh
ZGVyRXhlY3V0YWJsZTkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVkZWNmOTY2NGRlNzAxMDBiMmFmZTU0ZDU3
NGFlOWM4YThhMWYyMzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU2hhZGVyRXhlY3V0YWJsZTkuY3BwCkBAIC0w
LDAgKzEsNjAgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworLy8gU2hhZGVyRXhlY3V0YWJsZTkuY3BwOiBJbXBsZW1lbnRzIGEgRDNEOS1zcGVjaWZpYyBj
bGFzcyB0byBjb250YWluIHNoYWRlcgorLy8gZXhlY3V0YWJsZSBpbXBsZW1lbnRhdGlvbiBkZXRh
aWxzLgorCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU2hhZGVyRXhlY3V0YWJs
ZTkuaCIKKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCituYW1lc3BhY2UgcngKK3sKKwor
U2hhZGVyRXhlY3V0YWJsZTk6OlNoYWRlckV4ZWN1dGFibGU5KGNvbnN0IHZvaWQgKmZ1bmN0aW9u
LCBzaXplX3QgbGVuZ3RoLCBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKmV4ZWN1dGFibGUpCisgICAg
OiBTaGFkZXJFeGVjdXRhYmxlKGZ1bmN0aW9uLCBsZW5ndGgpCit7CisgICAgbVBpeGVsRXhlY3V0
YWJsZSA9IGV4ZWN1dGFibGU7CisgICAgbVZlcnRleEV4ZWN1dGFibGUgPSBOVUxMOworfQorCitT
aGFkZXJFeGVjdXRhYmxlOTo6U2hhZGVyRXhlY3V0YWJsZTkoY29uc3Qgdm9pZCAqZnVuY3Rpb24s
IHNpemVfdCBsZW5ndGgsIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKmV4ZWN1dGFibGUpCisgICAg
OiBTaGFkZXJFeGVjdXRhYmxlKGZ1bmN0aW9uLCBsZW5ndGgpCit7CisgICAgbVZlcnRleEV4ZWN1
dGFibGUgPSBleGVjdXRhYmxlOworICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOworfQorCitT
aGFkZXJFeGVjdXRhYmxlOTo6flNoYWRlckV4ZWN1dGFibGU5KCkKK3sKKyAgICBpZiAobVZlcnRl
eEV4ZWN1dGFibGUpCisgICAgeworICAgICAgICBtVmVydGV4RXhlY3V0YWJsZS0+UmVsZWFzZSgp
OworICAgIH0KKyAgICBpZiAobVBpeGVsRXhlY3V0YWJsZSkKKyAgICB7CisgICAgICAgIG1QaXhl
bEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKKyAgICB9Cit9CisKK1NoYWRlckV4ZWN1dGFibGU5ICpT
aGFkZXJFeGVjdXRhYmxlOTo6bWFrZVNoYWRlckV4ZWN1dGFibGU5KFNoYWRlckV4ZWN1dGFibGUg
KmV4ZWN1dGFibGUpCit7CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoU2hhZGVyRXhlY3V0
YWJsZTkqLCBleGVjdXRhYmxlKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNoYWRlckV4ZWN1
dGFibGU5Kj4oZXhlY3V0YWJsZSk7Cit9CisKK0lEaXJlY3QzRFZlcnRleFNoYWRlcjkgKlNoYWRl
ckV4ZWN1dGFibGU5OjpnZXRWZXJ0ZXhTaGFkZXIoKSBjb25zdAoreworICAgIHJldHVybiBtVmVy
dGV4RXhlY3V0YWJsZTsKK30KKworSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpTaGFkZXJFeGVjdXRh
YmxlOTo6Z2V0UGl4ZWxTaGFkZXIoKSBjb25zdAoreworICAgIHJldHVybiBtUGl4ZWxFeGVjdXRh
YmxlOworfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1NoYWRlckV4
ZWN1dGFibGU5LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvU2hhZGVyRXhlY3V0YWJsZTkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYTFlNmMyODQ0YTk4YmE0
MjY4ZjBkZGYyYjQ5NGEzNmQyNzZjNWJmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1NoYWRlckV4ZWN1dGFibGU5
LmgKQEAgLTAsMCArMSwzOSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gU2hhZGVyRXhlY3V0
YWJsZTkuaDogRGVmaW5lcyBhIEQzRDktc3BlY2lmaWMgY2xhc3MgdG8gY29udGFpbiBzaGFkZXIK
Ky8vIGV4ZWN1dGFibGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4KKworI2lmbmRlZiBMSUJHTEVT
VjJfUkVOREVSRVJfU0hBREVSRVhFQ1VUQUJMRTlfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRF
UkVSX1NIQURFUkVYRUNVVEFCTEU5X0hfCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
U2hhZGVyRXhlY3V0YWJsZS5oIgorCituYW1lc3BhY2UgcngKK3sKKworY2xhc3MgU2hhZGVyRXhl
Y3V0YWJsZTkgOiBwdWJsaWMgU2hhZGVyRXhlY3V0YWJsZQoreworICBwdWJsaWM6CisgICAgU2hh
ZGVyRXhlY3V0YWJsZTkoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIElEaXJl
Y3QzRFBpeGVsU2hhZGVyOSAqZXhlY3V0YWJsZSk7CisgICAgU2hhZGVyRXhlY3V0YWJsZTkoY29u
c3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIElEaXJlY3QzRFZlcnRleFNoYWRlcjkg
KmV4ZWN1dGFibGUpOworICAgIHZpcnR1YWwgflNoYWRlckV4ZWN1dGFibGU5KCk7CisKKyAgICBz
dGF0aWMgU2hhZGVyRXhlY3V0YWJsZTkgKm1ha2VTaGFkZXJFeGVjdXRhYmxlOShTaGFkZXJFeGVj
dXRhYmxlICpleGVjdXRhYmxlKTsKKworICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqZ2V0UGl4
ZWxTaGFkZXIoKSBjb25zdDsKKyAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICpnZXRWZXJ0ZXhT
aGFkZXIoKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihTaGFkZXJFeGVjdXRhYmxlOSk7CisKKyAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKm1QaXhl
bEV4ZWN1dGFibGU7CisgICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqbVZlcnRleEV4ZWN1dGFi
bGU7Cit9OworCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfU0hBREVSRVhFQ1VU
QUJMRTlfSF8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU3dhcENoYWluOS5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
U3dhcENoYWluOS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGQ4ODk1ZDE4ZDZhMWRmN2RhZTVhNDA1YTUxZWMy
ZDJhZGYwNzA1YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9Td2FwQ2hhaW45LmNwcApAQCAtMCwwICsxLDQ0NSBA
QAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIw
MTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBTd2Fw
Q2hhaW45LmNwcDogSW1wbGVtZW50cyBhIGJhY2stZW5kIHNwZWNpZmljIGNsYXNzIGZvciB0aGUg
RDNEOSBzd2FwIGNoYWluLgorCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU3dh
cENoYWluOS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91
dGlscy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oIgor
CituYW1lc3BhY2UgcngKK3sKKworU3dhcENoYWluOTo6U3dhcENoYWluOShSZW5kZXJlcjkgKnJl
bmRlcmVyLCBIV05EIHdpbmRvdywgSEFORExFIHNoYXJlSGFuZGxlLAorICAgICAgICAgICAgICAg
ICAgICAgICBHTGVudW0gYmFja0J1ZmZlckZvcm1hdCwgR0xlbnVtIGRlcHRoQnVmZmVyRm9ybWF0
KQorICAgIDogbVJlbmRlcmVyKHJlbmRlcmVyKSwgU3dhcENoYWluKHdpbmRvdywgc2hhcmVIYW5k
bGUsIGJhY2tCdWZmZXJGb3JtYXQsIGRlcHRoQnVmZmVyRm9ybWF0KQoreworICAgIG1Td2FwQ2hh
aW4gPSBOVUxMOworICAgIG1CYWNrQnVmZmVyID0gTlVMTDsKKyAgICBtRGVwdGhTdGVuY2lsID0g
TlVMTDsKKyAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICBtT2Zmc2NyZWVuVGV4dHVyZSA9
IE5VTEw7CisgICAgbVdpZHRoID0gLTE7CisgICAgbUhlaWdodCA9IC0xOworICAgIG1Td2FwSW50
ZXJ2YWwgPSAtMTsKK30KKworU3dhcENoYWluOTo6flN3YXBDaGFpbjkoKQoreworICAgIHJlbGVh
c2UoKTsKK30KKwordm9pZCBTd2FwQ2hhaW45OjpyZWxlYXNlKCkKK3sKKyAgICBpZiAobVN3YXBD
aGFpbikKKyAgICB7CisgICAgICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsKKyAgICAgICAgbVN3
YXBDaGFpbiA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKG1CYWNrQnVmZmVyKQorICAgIHsKKyAg
ICAgICAgbUJhY2tCdWZmZXItPlJlbGVhc2UoKTsKKyAgICAgICAgbUJhY2tCdWZmZXIgPSBOVUxM
OworICAgIH0KKworICAgIGlmIChtRGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgbURlcHRo
U3RlbmNpbC0+UmVsZWFzZSgpOworICAgICAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKKyAgICB9
CisKKyAgICBpZiAobVJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIG1SZW5kZXJUYXJnZXQt
PlJlbGVhc2UoKTsKKyAgICAgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7CisgICAgfQorCisgICAg
aWYgKG1PZmZzY3JlZW5UZXh0dXJlKQorICAgIHsKKyAgICAgICAgbU9mZnNjcmVlblRleHR1cmUt
PlJlbGVhc2UoKTsKKyAgICAgICAgbU9mZnNjcmVlblRleHR1cmUgPSBOVUxMOworICAgIH0KKwor
ICAgIGlmIChtV2luZG93KQorICAgICAgICBtU2hhcmVIYW5kbGUgPSBOVUxMOworfQorCitzdGF0
aWMgRFdPUkQgY29udmVydEludGVydmFsKEVHTGludCBpbnRlcnZhbCkKK3sKKyNpZiBBTkdMRV9G
T1JDRV9WU1lOQ19PRkYKKyAgICByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9JTU1FRElBVEU7
CisjZWxzZQorICAgIHN3aXRjaChpbnRlcnZhbCkKKyAgICB7CisgICAgICBjYXNlIDA6IHJldHVy
biBEM0RQUkVTRU5UX0lOVEVSVkFMX0lNTUVESUFURTsKKyAgICAgIGNhc2UgMTogcmV0dXJuIEQz
RFBSRVNFTlRfSU5URVJWQUxfT05FOworICAgICAgY2FzZSAyOiByZXR1cm4gRDNEUFJFU0VOVF9J
TlRFUlZBTF9UV087CisgICAgICBjYXNlIDM6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX1RI
UkVFOworICAgICAgY2FzZSA0OiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9GT1VSOworICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gRDNEUFJFU0VO
VF9JTlRFUlZBTF9ERUZBVUxUOworI2VuZGlmCit9CisKK0VHTGludCBTd2FwQ2hhaW45OjpyZXNp
emUoaW50IGJhY2tidWZmZXJXaWR0aCwgaW50IGJhY2tidWZmZXJIZWlnaHQpCit7CisgICAgLy8g
RDNEOSBkb2VzIG5vdCBzdXBwb3J0IHJlc2l6aW5nIHN3YXAgY2hhaW5zIHdpdGhvdXQgcmVjcmVh
dGluZyB0aGVtCisgICAgcmV0dXJuIHJlc2V0KGJhY2tidWZmZXJXaWR0aCwgYmFja2J1ZmZlckhl
aWdodCwgbVN3YXBJbnRlcnZhbCk7Cit9CisKK0VHTGludCBTd2FwQ2hhaW45OjpyZXNldChpbnQg
YmFja2J1ZmZlcldpZHRoLCBpbnQgYmFja2J1ZmZlckhlaWdodCwgRUdMaW50IHN3YXBJbnRlcnZh
bCkKK3sKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmlj
ZSgpOworCisgICAgaWYgKGRldmljZSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEVH
TF9CQURfQUNDRVNTOworICAgIH0KKworICAgIC8vIEV2aWN0IGFsbCBub24tcmVuZGVyIHRhcmdl
dCB0ZXh0dXJlcyB0byBzeXN0ZW0gbWVtb3J5IGFuZCByZWxlYXNlIGFsbCByZXNvdXJjZXMKKyAg
ICAvLyBiZWZvcmUgcmVhbGxvY2F0aW5nIHRoZW0gdG8gZnJlZSB1cCBhcyBtdWNoIHZpZGVvIG1l
bW9yeSBhcyBwb3NzaWJsZS4KKyAgICBkZXZpY2UtPkV2aWN0TWFuYWdlZFJlc291cmNlcygpOwor
CisgICAgSFJFU1VMVCByZXN1bHQ7CisKKyAgICAvLyBSZWxlYXNlIHNwZWNpZmljIHJlc291cmNl
cyB0byBmcmVlIHVwIG1lbW9yeSBmb3IgdGhlIG5ldyByZW5kZXIgdGFyZ2V0LCB3aGlsZSB0aGUK
KyAgICAvLyBvbGQgcmVuZGVyIHRhcmdldCBzdGlsbCBleGlzdHMgZm9yIHRoZSBwdXJwb3NlIG9m
IHByZXNlcnZpbmcgaXRzIGNvbnRlbnRzLgorICAgIGlmIChtU3dhcENoYWluKQorICAgIHsKKyAg
ICAgICAgbVN3YXBDaGFpbi0+UmVsZWFzZSgpOworICAgICAgICBtU3dhcENoYWluID0gTlVMTDsK
KyAgICB9CisKKyAgICBpZiAobUJhY2tCdWZmZXIpCisgICAgeworICAgICAgICBtQmFja0J1ZmZl
ci0+UmVsZWFzZSgpOworICAgICAgICBtQmFja0J1ZmZlciA9IE5VTEw7CisgICAgfQorCisgICAg
aWYgKG1PZmZzY3JlZW5UZXh0dXJlKQorICAgIHsKKyAgICAgICAgbU9mZnNjcmVlblRleHR1cmUt
PlJlbGVhc2UoKTsKKyAgICAgICAgbU9mZnNjcmVlblRleHR1cmUgPSBOVUxMOworICAgIH0KKwor
ICAgIGlmIChtRGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgbURlcHRoU3RlbmNpbC0+UmVs
ZWFzZSgpOworICAgICAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKKyAgICB9CisKKyAgICBIQU5E
TEUgKnBTaGFyZUhhbmRsZSA9IE5VTEw7CisgICAgaWYgKCFtV2luZG93ICYmIG1SZW5kZXJlci0+
Z2V0U2hhcmVIYW5kbGVTdXBwb3J0KCkpCisgICAgeworICAgICAgICBwU2hhcmVIYW5kbGUgPSAm
bVNoYXJlSGFuZGxlOworICAgIH0KKworICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVy
ZShiYWNrYnVmZmVyV2lkdGgsIGJhY2tidWZmZXJIZWlnaHQsIDEsIEQzRFVTQUdFX1JFTkRFUlRB
UkdFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6Q29udmVy
dFJlbmRlcmJ1ZmZlckZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCksIEQzRFBPT0xfREVGQVVMVCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1PZmZzY3JlZW5UZXh0dXJlLCBw
U2hhcmVIYW5kbGUpOworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEVS
UigiQ291bGQgbm90IGNyZWF0ZSBvZmZzY3JlZW4gdGV4dHVyZTogJTA4bFgiLCByZXN1bHQpOwor
ICAgICAgICByZWxlYXNlKCk7CisKKyAgICAgICAgaWYgKGQzZDk6OmlzRGV2aWNlTG9zdEVycm9y
KHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBFR0xfQ09OVEVYVF9MT1NU
OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IEVHTF9CQURfQUxMT0M7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqb2xkUmVuZGVyVGFyZ2V0ID0gbVJlbmRlclRhcmdldDsKKworICAgIHJlc3VsdCA9IG1PZmZz
Y3JlZW5UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoMCwgJm1SZW5kZXJUYXJnZXQpOworICAgIEFT
U0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICBpZiAob2xkUmVuZGVyVGFyZ2V0KQorICAg
IHsKKyAgICAgICAgUkVDVCByZWN0ID0KKyAgICAgICAgeworICAgICAgICAgICAgMCwgMCwKKyAg
ICAgICAgICAgIG1XaWR0aCwgbUhlaWdodAorICAgICAgICB9OworCisgICAgICAgIGlmIChyZWN0
LnJpZ2h0ID4gc3RhdGljX2Nhc3Q8TE9ORz4oYmFja2J1ZmZlcldpZHRoKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmVjdC5yaWdodCA9IGJhY2tidWZmZXJXaWR0aDsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChyZWN0LmJvdHRvbSA+IHN0YXRpY19jYXN0PExPTkc+KGJhY2tidWZmZXJIZWln
aHQpKQorICAgICAgICB7CisgICAgICAgICAgICByZWN0LmJvdHRvbSA9IGJhY2tidWZmZXJIZWln
aHQ7CisgICAgICAgIH0KKworICAgICAgICBtUmVuZGVyZXItPmVuZFNjZW5lKCk7CisKKyAgICAg
ICAgcmVzdWx0ID0gZGV2aWNlLT5TdHJldGNoUmVjdChvbGRSZW5kZXJUYXJnZXQsICZyZWN0LCBt
UmVuZGVyVGFyZ2V0LCAmcmVjdCwgRDNEVEVYRl9OT05FKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChyZXN1bHQpKTsKKworICAgICAgICBvbGRSZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKKyAg
ICB9CisKKyAgICBpZiAobVdpbmRvdykKKyAgICB7CisgICAgICAgIEQzRFBSRVNFTlRfUEFSQU1F
VEVSUyBwcmVzZW50UGFyYW1ldGVycyA9IHswfTsKKyAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMu
QXV0b0RlcHRoU3RlbmNpbEZvcm1hdCA9IGdsX2QzZDk6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3Jt
YXQobURlcHRoQnVmZmVyRm9ybWF0KTsKKyAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1
ZmZlckNvdW50ID0gMTsKKyAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1h
dCA9IGdsX2QzZDk6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQp
OworICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5FbmFibGVBdXRvRGVwdGhTdGVuY2lsID0gRkFM
U0U7CisgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkZsYWdzID0gMDsKKyAgICAgICAgcHJlc2Vu
dFBhcmFtZXRlcnMuaERldmljZVdpbmRvdyA9IG1XaW5kb3c7CisgICAgICAgIHByZXNlbnRQYXJh
bWV0ZXJzLk11bHRpU2FtcGxlUXVhbGl0eSA9IDA7ICAgICAgICAgICAgICAgICAgLy8gRklYTUU6
IFVuaW1wbGVtZW50ZWQKKyAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVUeXBl
ID0gRDNETVVMVElTQU1QTEVfTk9ORTsgICAvLyBGSVhNRTogVW5pbXBsZW1lbnRlZAorICAgICAg
ICBwcmVzZW50UGFyYW1ldGVycy5QcmVzZW50YXRpb25JbnRlcnZhbCA9IGNvbnZlcnRJbnRlcnZh
bChzd2FwSW50ZXJ2YWwpOworICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5Td2FwRWZmZWN0ID0g
RDNEU1dBUEVGRkVDVF9ESVNDQVJEOworICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5XaW5kb3dl
ZCA9IFRSVUU7CisgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCA9IGJh
Y2tidWZmZXJXaWR0aDsKKyAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdo
dCA9IGJhY2tidWZmZXJIZWlnaHQ7CisKKyAgICAgICAgLy8gaHR0cDovL2NyYnVnLmNvbS8xNDAy
MzkKKyAgICAgICAgLy8gaHR0cDovL2NyYnVnLmNvbS8xNDM0MzQKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gU29tZSBBTUQvSW50ZWwgc3dpdGNoYWJsZSBzeXN0ZW1zIC8gZHJpdmVycyBhcHBlYXIg
dG8gcm91bmQgc3dhcCBjaGFpbiBzdXJmYWNlcyB0byBhIG11bHRpcGxlIG9mIDY0IHBpeGVscyBp
biB3aWR0aAorICAgICAgICAvLyB3aGVuIHVzaW5nIHRoZSBpbnRlZ3JhdGVkIEludGVsLiBUaGlz
IHJvdW5kcyB0aGUgd2lkdGggdXAgcmF0aGVyIHRoYW4gZG93bi4KKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gU29tZSBub24tc3dpdGNoYWJsZSBBTUQgR1BVcyAvIGRyaXZlcnMgZG8gbm90IHJlc3Bl
Y3QgdGhlIHNvdXJjZSByZWN0YW5nbGUgdG8gUHJlc2VudC4gVGhlcmVmb3JlLCB3aGVuIHRoZSB2
ZW5kb3IgSUQKKyAgICAgICAgLy8gaXMgbm90IEludGVsLCB0aGUgYmFjayBidWZmZXIgd2lkdGgg
bXVzdCBiZSBleGFjdGx5IHRoZSBzYW1lIHdpZHRoIGFzIHRoZSB3aW5kb3cgb3IgaG9yaXpvbnRh
bCBzY2FsaW5nIHdpbGwgb2NjdXIuCisgICAgICAgIGlmIChtUmVuZGVyZXItPmdldEFkYXB0ZXJW
ZW5kb3IoKSA9PSBWRU5ET1JfSURfSU5URUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByZXNl
bnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCA9IChwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVm
ZmVyV2lkdGggKyA2MykgLyA2NCAqIDY0OworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0ID0g
ZGV2aWNlLT5DcmVhdGVBZGRpdGlvbmFsU3dhcENoYWluKCZwcmVzZW50UGFyYW1ldGVycywgJm1T
d2FwQ2hhaW4pOworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAg
ICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1
bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0lOVkFMSURDQUxMIHx8IHJl
c3VsdCA9PSBEM0RFUlJfREVWSUNFTE9TVCk7CisKKyAgICAgICAgICAgIEVSUigiQ291bGQgbm90
IGNyZWF0ZSBhZGRpdGlvbmFsIHN3YXAgY2hhaW5zIG9yIG9mZnNjcmVlbiBzdXJmYWNlczogJTA4
bFgiLCByZXN1bHQpOworICAgICAgICAgICAgcmVsZWFzZSgpOworCisgICAgICAgICAgICBpZiAo
ZDNkOTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gRUdMX0NPTlRFWFRfTE9TVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRUdMX0JBRF9B
TExPQzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdCA9IG1Td2Fw
Q2hhaW4tPkdldEJhY2tCdWZmZXIoMCwgRDNEQkFDS0JVRkZFUl9UWVBFX01PTk8sICZtQmFja0J1
ZmZlcik7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIEludmFs
aWRhdGVSZWN0KG1XaW5kb3csIE5VTEwsIEZBTFNFKTsKKyAgICB9CisKKyAgICBpZiAobURlcHRo
QnVmZmVyRm9ybWF0ICE9IEdMX05PTkUpCisgICAgeworICAgICAgICByZXN1bHQgPSBkZXZpY2Ut
PkNyZWF0ZURlcHRoU3RlbmNpbFN1cmZhY2UoYmFja2J1ZmZlcldpZHRoLCBiYWNrYnVmZmVySGVp
Z2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2xfZDNkOTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtRGVwdGhCdWZmZXJGb3JtYXQpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNETVVM
VElTQU1QTEVfTk9ORSwgMCwgRkFMU0UsICZtRGVwdGhTdGVuY2lsLCBOVUxMKTsKKworICAgICAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1
bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkg
fHwgcmVzdWx0ID09IEQzREVSUl9JTlZBTElEQ0FMTCk7CisKKyAgICAgICAgICAgIEVSUigiQ291
bGQgbm90IGNyZWF0ZSBkZXB0aHN0ZW5jaWwgc3VyZmFjZSBmb3IgbmV3IHN3YXAgY2hhaW46IDB4
JTA4WCIsIHJlc3VsdCk7CisgICAgICAgICAgICByZWxlYXNlKCk7CisKKyAgICAgICAgICAgIGlm
IChkM2Q5Ojppc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBFR0xfQ09OVEVYVF9MT1NUOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBFR0xfQkFE
X0FMTE9DOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgbVdpZHRoID0g
YmFja2J1ZmZlcldpZHRoOworICAgIG1IZWlnaHQgPSBiYWNrYnVmZmVySGVpZ2h0OworICAgIG1T
d2FwSW50ZXJ2YWwgPSBzd2FwSW50ZXJ2YWw7CisKKyAgICByZXR1cm4gRUdMX1NVQ0NFU1M7Cit9
CisKKy8vIHBhcmFtZXRlcnMgc2hvdWxkIGJlIHZhbGlkYXRlZC9jbGFtcGVkIGJ5IGNhbGxlcgor
RUdMaW50IFN3YXBDaGFpbjk6OnN3YXBSZWN0KEVHTGludCB4LCBFR0xpbnQgeSwgRUdMaW50IHdp
ZHRoLCBFR0xpbnQgaGVpZ2h0KQoreworICAgIGlmICghbVN3YXBDaGFpbikKKyAgICB7CisgICAg
ICAgIHJldHVybiBFR0xfU1VDQ0VTUzsKKyAgICB9CisKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpk
ZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgLy8gRGlzYWJsZSBhbGwgcGlw
ZWxpbmUgb3BlcmF0aW9ucworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJM
RSwgRDNEWkJfRkFMU0UpOworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfRklMTE1P
REUsIEQzREZJTExfU09MSUQpOworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQ
SEFURVNURU5BQkxFLCBGQUxTRSk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19B
TFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19DVUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX1NURU5DSUxFTkFCTEUsIEZBTFNFKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX0NMSVBQTEFORUVOQUJMRSwgMCk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19DT0xPUldSSVRFRU5BQkxFLCBEM0RDT0xPUldSSVRFRU5BQkxFX0FMUEhBIHwgRDNEQ09MT1JX
UklURUVOQUJMRV9CTFVFIHwgRDNEQ09MT1JXUklURUVOQUJMRV9HUkVFTiB8IEQzRENPTE9SV1JJ
VEVFTkFCTEVfUkVEKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NSR0JXUklU
RUVOQUJMRSwgRkFMU0UpOworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NP
UlRFU1RFTkFCTEUsIEZBTFNFKTsKKyAgICBkZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5VTEwpOwor
ICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOworCisgICAgZGV2aWNlLT5TZXRSZW5k
ZXJUYXJnZXQoMCwgbUJhY2tCdWZmZXIpOworICAgIGRldmljZS0+U2V0RGVwdGhTdGVuY2lsU3Vy
ZmFjZShOVUxMKTsKKworICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCBtT2Zmc2NyZWVuVGV4dHVy
ZSk7CisgICAgZGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JPUCwg
RDNEVE9QX1NFTEVDVEFSRzEpOworICAgIGRldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwg
RDNEVFNTX0NPTE9SQVJHMSwgRDNEVEFfVEVYVFVSRSk7CisgICAgZGV2aWNlLT5TZXRUZXh0dXJl
U3RhZ2VTdGF0ZSgxLCBEM0RUU1NfQ09MT1JPUCwgRDNEVE9QX0RJU0FCTEUpOworICAgIGRldmlj
ZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUFHRklMVEVSLCBEM0RURVhGX1BPSU5UKTsK
KyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01JTkZJTFRFUiwgRDNEVEVY
Rl9QT0lOVCk7CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9BRERSRVNT
VSwgRDNEVEFERFJFU1NfQ0xBTVApOworICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQz
RFNBTVBfQUREUkVTU1YsIEQzRFRBRERSRVNTX0NMQU1QKTsKKyAgICBkZXZpY2UtPlNldEZWRihE
M0RGVkZfWFlaUkhXIHwgRDNERlZGX1RFWDEpOworCisgICAgZm9yIChVSU5UIHN0cmVhbUluZGV4
ID0gMDsgc3RyZWFtSW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBzdHJlYW1JbmRleCsr
KQorICAgIHsKKyAgICAgICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKHN0cmVhbUluZGV4
LCAxKTsKKyAgICB9CisKKyAgICBEM0RWSUVXUE9SVDkgdmlld3BvcnQgPSB7MCwgMCwgbVdpZHRo
LCBtSGVpZ2h0LCAwLjBmLCAxLjBmfTsKKyAgICBkZXZpY2UtPlNldFZpZXdwb3J0KCZ2aWV3cG9y
dCk7CisKKyAgICBmbG9hdCB4MSA9IHggLSAwLjVmOworICAgIGZsb2F0IHkxID0gKG1IZWlnaHQg
LSB5IC0gaGVpZ2h0KSAtIDAuNWY7CisgICAgZmxvYXQgeDIgPSAoeCArIHdpZHRoKSAtIDAuNWY7
CisgICAgZmxvYXQgeTIgPSAobUhlaWdodCAtIHkpIC0gMC41ZjsKKworICAgIGZsb2F0IHUxID0g
eCAvIGZsb2F0KG1XaWR0aCk7CisgICAgZmxvYXQgdjEgPSB5IC8gZmxvYXQobUhlaWdodCk7Cisg
ICAgZmxvYXQgdTIgPSAoeCArIHdpZHRoKSAvIGZsb2F0KG1XaWR0aCk7CisgICAgZmxvYXQgdjIg
PSAoeSArIGhlaWdodCkgLyBmbG9hdChtSGVpZ2h0KTsKKworICAgIGZsb2F0IHF1YWRbNF1bNl0g
PSB7e3gxLCB5MSwgMC4wZiwgMS4wZiwgdTEsIHYyfSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHt4MiwgeTEsIDAuMGYsIDEuMGYsIHUyLCB2Mn0sCisgICAgICAgICAgICAgICAgICAgICAgICB7
eDIsIHkyLCAwLjBmLCAxLjBmLCB1MiwgdjF9LAorICAgICAgICAgICAgICAgICAgICAgICAge3gx
LCB5MiwgMC4wZiwgMS4wZiwgdTEsIHYxfX07ICAgLy8geCwgeSwgeiwgcmh3LCB1LCB2CisKKyAg
ICBtUmVuZGVyZXItPnN0YXJ0U2NlbmUoKTsKKyAgICBkZXZpY2UtPkRyYXdQcmltaXRpdmVVUChE
M0RQVF9UUklBTkdMRUZBTiwgMiwgcXVhZCwgNiAqIHNpemVvZihmbG9hdCkpOworICAgIG1SZW5k
ZXJlci0+ZW5kU2NlbmUoKTsKKworICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCBOVUxMKTsKKwor
ICAgIFJFQ1QgcmVjdCA9CisgICAgeworICAgICAgICB4LCBtSGVpZ2h0IC0geSAtIGhlaWdodCwK
KyAgICAgICAgeCArIHdpZHRoLCBtSGVpZ2h0IC0geQorICAgIH07CisKKyAgICBIUkVTVUxUIHJl
c3VsdCA9IG1Td2FwQ2hhaW4tPlByZXNlbnQoJnJlY3QsICZyZWN0LCBOVUxMLCBOVUxMLCAwKTsK
KworICAgIG1SZW5kZXJlci0+bWFya0FsbFN0YXRlRGlydHkoKTsKKworICAgIGlmIChyZXN1bHQg
PT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwg
cmVzdWx0ID09IEQzREVSUl9EUklWRVJJTlRFUk5BTEVSUk9SKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEVHTF9CQURfQUxMT0M7CisgICAgfQorCisgICAgLy8gaHR0cDovL2NyYnVnLmNvbS8zMTMy
MTAKKyAgICAvLyBJZiBvdXIgc3dhcCBmYWlsZWQsIHRyaWdnZXIgYSBkZXZpY2UgbG9zdCBldmVu
dC4gUmVzZXR0aW5nIHdpbGwgd29yayBhcm91bmQgYW4gQU1ELXNwZWNpZmljCisgICAgLy8gZGV2
aWNlIHJlbW92ZWQgYnVnIHdpdGggbG9zdCBjb250ZXh0cyB3aGVuIHJlaW5zdGFsbGluZyBkcml2
ZXJzLgorICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIG1SZW5kZXJlci0+
bm90aWZ5RGV2aWNlTG9zdCgpOworICAgICAgICByZXR1cm4gRUdMX0NPTlRFWFRfTE9TVDsKKyAg
ICB9CisKKyAgICByZXR1cm4gRUdMX1NVQ0NFU1M7Cit9CisKKy8vIEluY3JlbWVudHMgcmVmY291
bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3Vy
ZmFjZQorSURpcmVjdDNEU3VyZmFjZTkgKlN3YXBDaGFpbjk6OmdldFJlbmRlclRhcmdldCgpCit7
CisgICAgaWYgKG1SZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBtUmVuZGVyVGFyZ2V0LT5B
ZGRSZWYoKTsKKyAgICB9CisKKyAgICByZXR1cm4gbVJlbmRlclRhcmdldDsKK30KKworLy8gSW5j
cmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRo
ZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJmYWNlOSAqU3dhcENoYWluOTo6Z2V0RGVw
dGhTdGVuY2lsKCkKK3sKKyAgICBpZiAobURlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIG1E
ZXB0aFN0ZW5jaWwtPkFkZFJlZigpOworICAgIH0KKworICAgIHJldHVybiBtRGVwdGhTdGVuY2ls
OworfQorCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHRleHR1cmUuCisvLyBjYWxsZXIgbXVz
dCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHRleHR1cmUKK0lEaXJlY3QzRFRleHR1cmU5ICpTd2Fw
Q2hhaW45OjpnZXRPZmZzY3JlZW5UZXh0dXJlKCkKK3sKKyAgICBpZiAobU9mZnNjcmVlblRleHR1
cmUpCisgICAgeworICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+QWRkUmVmKCk7CisgICAgfQor
CisgICAgcmV0dXJuIG1PZmZzY3JlZW5UZXh0dXJlOworfQorCitTd2FwQ2hhaW45ICpTd2FwQ2hh
aW45OjptYWtlU3dhcENoYWluOShTd2FwQ2hhaW4gKnN3YXBDaGFpbikKK3sKKyAgICBBU1NFUlQo
SEFTX0RZTkFNSUNfVFlQRShyeDo6U3dhcENoYWluOSosIHN3YXBDaGFpbikpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxyeDo6U3dhcENoYWluOSo+KHN3YXBDaGFpbik7Cit9CisKK3ZvaWQgU3dh
cENoYWluOTo6cmVjcmVhdGUoKQoreworICAgIGlmICghbVN3YXBDaGFpbikKKyAgICB7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVu
ZGVyZXItPmdldERldmljZSgpOworICAgIGlmIChkZXZpY2UgPT0gTlVMTCkKKyAgICB7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBh
cmFtZXRlcnM7CisgICAgSFJFU1VMVCByZXN1bHQgPSBtU3dhcENoYWluLT5HZXRQcmVzZW50UGFy
YW1ldGVycygmcHJlc2VudFBhcmFtZXRlcnMpOworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7CisKKyAgICBJRGlyZWN0M0RTd2FwQ2hhaW45KiBuZXdTd2FwQ2hhaW4gPSBOVUxMOworICAg
IHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQWRkaXRpb25hbFN3YXBDaGFpbigmcHJlc2VudFBhcmFt
ZXRlcnMsICZuZXdTd2FwQ2hhaW4pOworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtU3dhcENoYWluLT5SZWxlYXNlKCk7CisgICAg
bVN3YXBDaGFpbiA9IG5ld1N3YXBDaGFpbjsKKworICAgIG1CYWNrQnVmZmVyLT5SZWxlYXNlKCk7
CisgICAgcmVzdWx0ID0gbVN3YXBDaGFpbi0+R2V0QmFja0J1ZmZlcigwLCBEM0RCQUNLQlVGRkVS
X1RZUEVfTU9OTywgJm1CYWNrQnVmZmVyKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkp
OworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvU3dhcENoYWluOS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1N3YXBDaGFpbjkuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNmE2
MmJkODZmNmE2NWI3ZGQ4YjdiZDQyMjA3NjQxNGY0OTBkNDVlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1N3YXBD
aGFpbjkuaApAQCAtMCwwICsxLDU1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gU3dhcENoYWluOS5o
OiBEZWZpbmVzIGEgYmFjay1lbmQgc3BlY2lmaWMgY2xhc3MgZm9yIHRoZSBEM0Q5IHN3YXAgY2hh
aW4uCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX1NXQVBDSEFJTjlfSF8KKyNkZWZpbmUg
TElCR0xFU1YyX1JFTkRFUkVSX1NXQVBDSEFJTjlfSF8KKworI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1N3YXBDaGFpbi5oIgorCitu
YW1lc3BhY2UgcngKK3sKK2NsYXNzIFJlbmRlcmVyOTsKKworY2xhc3MgU3dhcENoYWluOSA6IHB1
YmxpYyBTd2FwQ2hhaW4KK3sKKyAgcHVibGljOgorICAgIFN3YXBDaGFpbjkoUmVuZGVyZXI5ICpy
ZW5kZXJlciwgSFdORCB3aW5kb3csIEhBTkRMRSBzaGFyZUhhbmRsZSwKKyAgICAgICAgICAgICAg
IEdMZW51bSBiYWNrQnVmZmVyRm9ybWF0LCBHTGVudW0gZGVwdGhCdWZmZXJGb3JtYXQpOworICAg
IHZpcnR1YWwgflN3YXBDaGFpbjkoKTsKKworICAgIEVHTGludCByZXNpemUoRUdMaW50IGJhY2ti
dWZmZXJXaWR0aCwgRUdMaW50IGJhY2tidWZmZXJIZWlnaHQpOworICAgIHZpcnR1YWwgRUdMaW50
IHJlc2V0KEVHTGludCBiYWNrYnVmZmVyV2lkdGgsIEVHTGludCBiYWNrYnVmZmVySGVpZ2h0LCBF
R0xpbnQgc3dhcEludGVydmFsKTsKKyAgICB2aXJ0dWFsIEVHTGludCBzd2FwUmVjdChFR0xpbnQg
eCwgRUdMaW50IHksIEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCk7CisgICAgdmlydHVhbCB2
b2lkIHJlY3JlYXRlKCk7CisKKyAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5k
ZXJUYXJnZXQoKTsKKyAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5j
aWwoKTsKKyAgICB2aXJ0dWFsIElEaXJlY3QzRFRleHR1cmU5ICpnZXRPZmZzY3JlZW5UZXh0dXJl
KCk7CisKKyAgICBzdGF0aWMgU3dhcENoYWluOSAqbWFrZVN3YXBDaGFpbjkoU3dhcENoYWluICpz
d2FwQ2hhaW4pOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFN3
YXBDaGFpbjkpOworCisgICAgdm9pZCByZWxlYXNlKCk7CisKKyAgICBSZW5kZXJlcjkgKm1SZW5k
ZXJlcjsKKyAgICBFR0xpbnQgbUhlaWdodDsKKyAgICBFR0xpbnQgbVdpZHRoOworICAgIEVHTGlu
dCBtU3dhcEludGVydmFsOworCisgICAgSURpcmVjdDNEU3dhcENoYWluOSAqbVN3YXBDaGFpbjsK
KyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbUJhY2tCdWZmZXI7CisgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKm1SZW5kZXJUYXJnZXQ7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1EZXB0aFN0ZW5jaWw7
CisgICAgSURpcmVjdDNEVGV4dHVyZTkqIG1PZmZzY3JlZW5UZXh0dXJlOworfTsKKworfQorI2Vu
ZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9TV0FQQ0hBSU45X0hfCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0
b3JhZ2U5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9UZXh0dXJlU3RvcmFnZTkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0ODZhOWE1YmY3Mzc2ZGNi
MWZmY2Q0ODVmNmZmOTFmNWY0MTM0OGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5LmNw
cApAQCAtMCwwICsxLDMyOCBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworLy8gVGV4dHVyZVN0b3JhZ2U5LmNwcDogSW1wbGVtZW50cyB0aGUgYWJzdHJhY3Qgcng6
OlRleHR1cmVTdG9yYWdlOSBjbGFzcyBhbmQgaXRzIGNvbmNyZXRlIGRlcml2ZWQKKy8vIGNsYXNz
ZXMgVGV4dHVyZVN0b3JhZ2U5XzJEIGFuZCBUZXh0dXJlU3RvcmFnZTlfQ3ViZSwgd2hpY2ggYWN0
IGFzIHRoZSBpbnRlcmZhY2UgdG8gdGhlCisvLyBEM0Q5IHRleHR1cmUuCisKKyNpbmNsdWRlICJs
aWJHTEVTdjIvbWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRl
cmVyOS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1RleHR1cmVTdG9yYWdl
OS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1N3YXBDaGFpbjkuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJUYXJnZXQ5LmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL1RleHR1cmUuaCIKKworbmFtZXNwYWNlIHJ4Cit7CitUZXh0dXJlU3RvcmFnZTk6
OlRleHR1cmVTdG9yYWdlOShSZW5kZXJlciAqcmVuZGVyZXIsIERXT1JEIHVzYWdlKQorICAgIDog
bUxvZE9mZnNldCgwKSwKKyAgICAgIG1SZW5kZXJlcihSZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjko
cmVuZGVyZXIpKSwKKyAgICAgIG1EM0RVc2FnZSh1c2FnZSksCisgICAgICBtRDNEUG9vbChtUmVu
ZGVyZXItPmdldFRleHR1cmVQb29sKHVzYWdlKSkKK3sKK30KKworVGV4dHVyZVN0b3JhZ2U5Ojp+
VGV4dHVyZVN0b3JhZ2U5KCkKK3sKK30KKworVGV4dHVyZVN0b3JhZ2U5ICpUZXh0dXJlU3RvcmFn
ZTk6Om1ha2VUZXh0dXJlU3RvcmFnZTkoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpCit7CisgICAg
QVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoVGV4dHVyZVN0b3JhZ2U5Kiwgc3RvcmFnZSkpOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlU3RvcmFnZTkqPihzdG9yYWdlKTsKK30KKworRFdP
UkQgVGV4dHVyZVN0b3JhZ2U5OjpHZXRUZXh0dXJlVXNhZ2UoRDNERk9STUFUIGQzZGZtdCwgR0xl
bnVtIGdsdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlKQoreworICAgIERXT1JEIGQzZHVzYWdl
ID0gMDsKKworICAgIGlmIChkM2RmbXQgPT0gRDNERk1UX0lOVFopCisgICAgeworICAgICAgICBk
M2R1c2FnZSB8PSBEM0RVU0FHRV9ERVBUSFNURU5DSUw7CisgICAgfQorICAgIGVsc2UgaWYoZm9y
Y2VSZW5kZXJhYmxlIHx8IChUZXh0dXJlU3RvcmFnZTk6OklzVGV4dHVyZUZvcm1hdFJlbmRlcmFi
bGUoZDNkZm10KSAmJiAoZ2x1c2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xF
KSkpCisgICAgeworICAgICAgICBkM2R1c2FnZSB8PSBEM0RVU0FHRV9SRU5ERVJUQVJHRVQ7Cisg
ICAgfQorICAgIHJldHVybiBkM2R1c2FnZTsKK30KKworYm9vbCBUZXh0dXJlU3RvcmFnZTk6Oklz
VGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoRDNERk9STUFUIGZvcm1hdCkKK3sKKyAgICBpZiAoZm9y
bWF0ID09IEQzREZNVF9JTlRaKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIHN3aXRjaChmb3JtYXQpCisgICAgeworICAgICAgY2FzZSBEM0RGTVRfTDg6CisgICAgICBj
YXNlIEQzREZNVF9BOEw4OgorICAgICAgY2FzZSBEM0RGTVRfRFhUMToKKyAgICAgIGNhc2UgRDNE
Rk1UX0RYVDM6CisgICAgICBjYXNlIEQzREZNVF9EWFQ1OgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKKyAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4
OgorICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKKyAgICAgIGNhc2UgRDNERk1UX0Ez
MkIzMkczMlIzMkY6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
VGV4dHVyZVN0b3JhZ2U5Ojppc1JlbmRlclRhcmdldCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICht
RDNEVXNhZ2UgJiAoRDNEVVNBR0VfUkVOREVSVEFSR0VUIHwgRDNEVVNBR0VfREVQVEhTVEVOQ0lM
KSkgIT0gMDsKK30KKworYm9vbCBUZXh0dXJlU3RvcmFnZTk6OmlzTWFuYWdlZCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIChtRDNEUG9vbCA9PSBEM0RQT09MX01BTkFHRUQpOworfQorCitEM0RQT09M
IFRleHR1cmVTdG9yYWdlOTo6Z2V0UG9vbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EM0RQb29s
OworfQorCitEV09SRCBUZXh0dXJlU3RvcmFnZTk6OmdldFVzYWdlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbUQzRFVzYWdlOworfQorCitpbnQgVGV4dHVyZVN0b3JhZ2U5OjpnZXRMb2RPZmZzZXQo
KSBjb25zdAoreworICAgIHJldHVybiBtTG9kT2Zmc2V0OworfQorCitpbnQgVGV4dHVyZVN0b3Jh
Z2U5OjpsZXZlbENvdW50KCkKK3sKKyAgICByZXR1cm4gZ2V0QmFzZVRleHR1cmUoKSA/IGdldEJh
c2VUZXh0dXJlKCktPkdldExldmVsQ291bnQoKSAtIGdldExvZE9mZnNldCgpIDogMDsKK30KKwor
VGV4dHVyZVN0b3JhZ2U5XzJEOjpUZXh0dXJlU3RvcmFnZTlfMkQoUmVuZGVyZXIgKnJlbmRlcmVy
LCBTd2FwQ2hhaW45ICpzd2FwY2hhaW4pIDogVGV4dHVyZVN0b3JhZ2U5KHJlbmRlcmVyLCBEM0RV
U0FHRV9SRU5ERVJUQVJHRVQpCit7CisgICAgSURpcmVjdDNEVGV4dHVyZTkgKnN1cmZhY2VUZXh0
dXJlID0gc3dhcGNoYWluLT5nZXRPZmZzY3JlZW5UZXh0dXJlKCk7CisgICAgbVRleHR1cmUgPSBz
dXJmYWNlVGV4dHVyZTsKKyAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKKworICAgIGluaXRpYWxp
emVSZW5kZXJUYXJnZXQoKTsKK30KKworVGV4dHVyZVN0b3JhZ2U5XzJEOjpUZXh0dXJlU3RvcmFn
ZTlfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KQorICAgIDogVGV4dHVyZVN0b3JhZ2U5KHJlbmRlcmVyLCBHZXRUZXh0dXJl
VXNhZ2UoUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5KHJlbmRlcmVyKS0+Q29udmVydFRleHR1cmVJ
bnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCksIHVzYWdlLCBmb3JjZVJlbmRlcmFibGUpKQor
eworICAgIG1UZXh0dXJlID0gTlVMTDsKKyAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICAv
LyBpZiB0aGUgd2lkdGggb3IgaGVpZ2h0IGlzIG5vdCBwb3NpdGl2ZSB0aGlzIHNob3VsZCBiZSB0
cmVhdGVkIGFzIGFuIGluY29tcGxldGUgdGV4dHVyZQorICAgIC8vIHdlIGhhbmRsZSB0aGF0IGhl
cmUgYnkgc2tpcHBpbmcgdGhlIGQzZCB0ZXh0dXJlIGNyZWF0aW9uCisgICAgaWYgKHdpZHRoID4g
MCAmJiBoZWlnaHQgPiAwKQorICAgIHsKKyAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNl
ID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICAgICAgZ2w6Ok1ha2VWYWxpZFNpemUoZmFs
c2UsIGdsOjpJc0NvbXByZXNzZWQoaW50ZXJuYWxmb3JtYXQpLCAmd2lkdGgsICZoZWlnaHQsICZt
TG9kT2Zmc2V0KTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1
cmUod2lkdGgsIGhlaWdodCwgbGV2ZWxzID8gbGV2ZWxzICsgbUxvZE9mZnNldCA6IDAsIGdldFVz
YWdlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1S
ZW5kZXJlci0+Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCksIGdl
dFBvb2woKSwgJm1UZXh0dXJlLCBOVUxMKTsKKworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgfQorCisgICAgaW5pdGlhbGl6
ZVJlbmRlclRhcmdldCgpOworfQorCitUZXh0dXJlU3RvcmFnZTlfMkQ6On5UZXh0dXJlU3RvcmFn
ZTlfMkQoKQoreworICAgIGlmIChtVGV4dHVyZSkKKyAgICB7CisgICAgICAgIG1UZXh0dXJlLT5S
ZWxlYXNlKCk7CisgICAgfQorCisgICAgZGVsZXRlIG1SZW5kZXJUYXJnZXQ7Cit9CisKK1RleHR1
cmVTdG9yYWdlOV8yRCAqVGV4dHVyZVN0b3JhZ2U5XzJEOjptYWtlVGV4dHVyZVN0b3JhZ2U5XzJE
KFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKQoreworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBF
KFRleHR1cmVTdG9yYWdlOV8yRCosIHN0b3JhZ2UpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
VGV4dHVyZVN0b3JhZ2U5XzJEKj4oc3RvcmFnZSk7Cit9CisKKy8vIEluY3JlbWVudHMgcmVmY291
bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3Vy
ZmFjZQorSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVTdG9yYWdlOV8yRDo6Z2V0U3VyZmFjZUxl
dmVsKGludCBsZXZlbCwgYm9vbCBkaXJ0eSkKK3sKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3Vy
ZmFjZSA9IE5VTEw7CisKKyAgICBpZiAobVRleHR1cmUpCisgICAgeworICAgICAgICBIUkVTVUxU
IHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWwgKyBtTG9kT2Zmc2V0LCAm
c3VyZmFjZSk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAg
Ly8gV2l0aCBtYW5hZ2VkIHRleHR1cmVzIHRoZSBkcml2ZXIgbmVlZHMgdG8gYmUgaW5mb3JtZWQg
b2YgdXBkYXRlcyB0byB0aGUgbG93ZXIgbWlwbWFwIGxldmVscworICAgICAgICBpZiAobGV2ZWwg
KyBtTG9kT2Zmc2V0ICE9IDAgJiYgaXNNYW5hZ2VkKCkgJiYgZGlydHkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1UZXh0dXJlLT5BZGREaXJ0eVJlY3QoTlVMTCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gc3VyZmFjZTsKK30KKworUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFn
ZTlfMkQ6OmdldFJlbmRlclRhcmdldCgpCit7CisgICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7Cit9
CisKK3ZvaWQgVGV4dHVyZVN0b3JhZ2U5XzJEOjpnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpCit7
CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnVwcGVyID0gZ2V0U3VyZmFjZUxldmVsKGxldmVsIC0g
MSwgZmFsc2UpOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpsb3dlciA9IGdldFN1cmZhY2VMZXZl
bChsZXZlbCwgdHJ1ZSk7CisKKyAgICBpZiAodXBwZXIgIT0gTlVMTCAmJiBsb3dlciAhPSBOVUxM
KQorICAgIHsKKyAgICAgICAgbVJlbmRlcmVyLT5ib3hGaWx0ZXIodXBwZXIsIGxvd2VyKTsKKyAg
ICB9CisKKyAgICBpZiAodXBwZXIgIT0gTlVMTCkgdXBwZXItPlJlbGVhc2UoKTsKKyAgICBpZiAo
bG93ZXIgIT0gTlVMTCkgbG93ZXItPlJlbGVhc2UoKTsKK30KKworSURpcmVjdDNEQmFzZVRleHR1
cmU5ICpUZXh0dXJlU3RvcmFnZTlfMkQ6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbVRleHR1cmU7Cit9CisKK3ZvaWQgVGV4dHVyZVN0b3JhZ2U5XzJEOjppbml0aWFsaXpl
UmVuZGVyVGFyZ2V0KCkKK3sKKyAgICBBU1NFUlQobVJlbmRlclRhcmdldCA9PSBOVUxMKTsKKwor
ICAgIGlmIChtVGV4dHVyZSAhPSBOVUxMICYmIGlzUmVuZGVyVGFyZ2V0KCkpCisgICAgeworICAg
ICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IGdldFN1cmZhY2VMZXZlbCgwLCBmYWxz
ZSk7CisKKyAgICAgICAgbVJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQ5KG1SZW5kZXJl
ciwgc3VyZmFjZSk7CisgICAgfQorfQorCitUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6VGV4dHVyZVN0
b3JhZ2U5X0N1YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKQor
ICAgIDogVGV4dHVyZVN0b3JhZ2U5KHJlbmRlcmVyLCBHZXRUZXh0dXJlVXNhZ2UoUmVuZGVyZXI5
OjptYWtlUmVuZGVyZXI5KHJlbmRlcmVyKS0+Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChp
bnRlcm5hbGZvcm1hdCksIHVzYWdlLCBmb3JjZVJlbmRlcmFibGUpKQoreworICAgIG1UZXh0dXJl
ID0gTlVMTDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7ICsraSkKKyAgICB7CisgICAgICAg
IG1SZW5kZXJUYXJnZXRbaV0gPSBOVUxMOworICAgIH0KKworICAgIC8vIGlmIHRoZSBzaXplIGlz
IG5vdCBwb3NpdGl2ZSB0aGlzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGluY29tcGxldGUgdGV4
dHVyZQorICAgIC8vIHdlIGhhbmRsZSB0aGF0IGhlcmUgYnkgc2tpcHBpbmcgdGhlIGQzZCB0ZXh0
dXJlIGNyZWF0aW9uCisgICAgaWYgKHNpemUgPiAwKQorICAgIHsKKyAgICAgICAgSURpcmVjdDNE
RGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICAgICAgaW50IGhl
aWdodCA9IHNpemU7CisgICAgICAgIGdsOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBnbDo6SXNDb21w
cmVzc2VkKGludGVybmFsZm9ybWF0KSwgJnNpemUsICZoZWlnaHQsICZtTG9kT2Zmc2V0KTsKKyAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUN1YmVUZXh0dXJlKHNpemUsIGxl
dmVscyA/IGxldmVscyArIG1Mb2RPZmZzZXQgOiAwLCBnZXRVc2FnZSgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJlbmRlcmVyLT5Db252ZXJ0
VGV4dHVyZUludGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0KSwgZ2V0UG9vbCgpLCAmbVRleHR1
cmUsIE5VTEwpOworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAg
ICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1
bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbml0aWFsaXplUmVuZGVyVGFyZ2V0KCk7
Cit9CisKK1RleHR1cmVTdG9yYWdlOV9DdWJlOjp+VGV4dHVyZVN0b3JhZ2U5X0N1YmUoKQorewor
ICAgIGlmIChtVGV4dHVyZSkKKyAgICB7CisgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Cisg
ICAgfQorCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyArK2kpCisgICAgeworICAgICAgICBk
ZWxldGUgbVJlbmRlclRhcmdldFtpXTsKKyAgICB9Cit9CisKK1RleHR1cmVTdG9yYWdlOV9DdWJl
ICpUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlOV9DdWJlKFRleHR1cmVT
dG9yYWdlICpzdG9yYWdlKQoreworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKFRleHR1cmVT
dG9yYWdlOV9DdWJlKiwgc3RvcmFnZSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJl
U3RvcmFnZTlfQ3ViZSo+KHN0b3JhZ2UpOworfQorCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9u
IHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UK
K0lEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6Z2V0Q3ViZU1hcFN1cmZh
Y2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCwgYm9vbCBkaXJ0eSkKK3sKKyAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IE5VTEw7CisKKyAgICBpZiAobVRleHR1cmUpCisgICAg
eworICAgICAgICBEM0RDVUJFTUFQX0ZBQ0VTIGZhY2UgPSBnbF9kM2Q5OjpDb252ZXJ0Q3ViZUZh
Y2UoZmFjZVRhcmdldCk7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVRleHR1cmUtPkdldEN1
YmVNYXBTdXJmYWNlKGZhY2UsIGxldmVsICsgbUxvZE9mZnNldCwgJnN1cmZhY2UpOworICAgICAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgIC8vIFdpdGggbWFuYWdlZCB0
ZXh0dXJlcyB0aGUgZHJpdmVyIG5lZWRzIHRvIGJlIGluZm9ybWVkIG9mIHVwZGF0ZXMgdG8gdGhl
IGxvd2VyIG1pcG1hcCBsZXZlbHMKKyAgICAgICAgaWYgKGxldmVsICE9IDAgJiYgaXNNYW5hZ2Vk
KCkgJiYgZGlydHkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1UZXh0dXJlLT5BZGREaXJ0eVJl
Y3QoZmFjZSwgTlVMTCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3VyZmFjZTsK
K30KKworUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6Z2V0UmVuZGVyVGFyZ2V0
KEdMZW51bSBmYWNlVGFyZ2V0KQoreworICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0W2dsOjpUZXh0
dXJlQ3ViZU1hcDo6ZmFjZUluZGV4KGZhY2VUYXJnZXQpXTsKK30KKwordm9pZCBUZXh0dXJlU3Rv
cmFnZTlfQ3ViZTo6Z2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCkKK3sKKyAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqdXBwZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCAtIDEsIGZhbHNlKTsKKyAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqbG93ZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCwgdHJ1ZSk7CisKKyAgICBpZiAodXBwZXIgIT0gTlVM
TCAmJiBsb3dlciAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbVJlbmRlcmVyLT5ib3hGaWx0ZXIo
dXBwZXIsIGxvd2VyKTsKKyAgICB9CisKKyAgICBpZiAodXBwZXIgIT0gTlVMTCkgdXBwZXItPlJl
bGVhc2UoKTsKKyAgICBpZiAobG93ZXIgIT0gTlVMTCkgbG93ZXItPlJlbGVhc2UoKTsKK30KKwor
SURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6Z2V0QmFzZVRleHR1
cmUoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTsKK30KKwordm9pZCBUZXh0dXJlU3Rv
cmFnZTlfQ3ViZTo6aW5pdGlhbGl6ZVJlbmRlclRhcmdldCgpCit7CisgICAgaWYgKG1UZXh0dXJl
ICE9IE5VTEwgJiYgaXNSZW5kZXJUYXJnZXQoKSkKKyAgICB7CisgICAgICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpzdXJmYWNlID0gTlVMTDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7
ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1SZW5kZXJUYXJnZXRbaV0gPT0g
TlVMTCk7CisKKyAgICAgICAgICAgIHN1cmZhY2UgPSBnZXRDdWJlTWFwU3VyZmFjZShHTF9URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBpLCAwLCBmYWxzZSk7CisKKyAgICAgICAgICAgIG1S
ZW5kZXJUYXJnZXRbaV0gPSBuZXcgUmVuZGVyVGFyZ2V0OShtUmVuZGVyZXIsIHN1cmZhY2UpOwor
ICAgICAgICB9CisgICAgfQorfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L1RleHR1cmVTdG9yYWdlOS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L1RleHR1cmVTdG9yYWdlOS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg2ZjU1MWEx
MzE1ZGE0NTM3MTNmYTE5NmQ3NzI4ZjcyNTdlMmJkODYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0
b3JhZ2U5LmgKQEAgLTAsMCArMSwxMDkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUZXh0dXJlU3Rv
cmFnZTkuaDogRGVmaW5lcyB0aGUgYWJzdHJhY3Qgcng6OlRleHR1cmVTdG9yYWdlOSBjbGFzcyBh
bmQgaXRzIGNvbmNyZXRlIGRlcml2ZWQKKy8vIGNsYXNzZXMgVGV4dHVyZVN0b3JhZ2U5XzJEIGFu
ZCBUZXh0dXJlU3RvcmFnZTlfQ3ViZSwgd2hpY2ggYWN0IGFzIHRoZSBpbnRlcmZhY2UgdG8gdGhl
CisvLyBEM0Q5IHRleHR1cmUuCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX1RFWFRVUkVT
VE9SQUdFOV9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfVEVYVFVSRVNUT1JBR0U5X0hf
CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0b3JhZ2UuaCIKKyNpbmNs
dWRlICJjb21tb24vZGVidWcuaCIKKworbmFtZXNwYWNlIHJ4Cit7CitjbGFzcyBSZW5kZXJlcjk7
CitjbGFzcyBTd2FwQ2hhaW45OworY2xhc3MgUmVuZGVyVGFyZ2V0OworY2xhc3MgUmVuZGVyVGFy
Z2V0OTsKK2NsYXNzIEJsaXQ7CisKK2NsYXNzIFRleHR1cmVTdG9yYWdlOSA6IHB1YmxpYyBUZXh0
dXJlU3RvcmFnZQoreworICBwdWJsaWM6CisgICAgVGV4dHVyZVN0b3JhZ2U5KFJlbmRlcmVyICpy
ZW5kZXJlciwgRFdPUkQgdXNhZ2UpOworICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlOSgpOwor
CisgICAgc3RhdGljIFRleHR1cmVTdG9yYWdlOSAqbWFrZVRleHR1cmVTdG9yYWdlOShUZXh0dXJl
U3RvcmFnZSAqc3RvcmFnZSk7CisKKyAgICBzdGF0aWMgRFdPUkQgR2V0VGV4dHVyZVVzYWdlKEQz
REZPUk1BVCBkM2RmbXQsIEdMZW51bSBnbHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSk7Cisg
ICAgc3RhdGljIGJvb2wgSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEM0RGT1JNQVQgZm9ybWF0
KTsKKworICAgIEQzRFBPT0wgZ2V0UG9vbCgpIGNvbnN0OworICAgIERXT1JEIGdldFVzYWdlKCkg
Y29uc3Q7CisKKyAgICB2aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1
cmUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdl
dCgpIHsgcmV0dXJuIE5VTEw7IH0KKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVy
VGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0KSB7IHJldHVybiBOVUxMOyB9CisgICAgdmlydHVhbCB2
b2lkIGdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCkge307CisgICAgdmlydHVhbCB2b2lkIGdlbmVy
YXRlTWlwbWFwKGludCBmYWNlLCBpbnQgbGV2ZWwpIHt9OworCisgICAgdmlydHVhbCBpbnQgZ2V0
TG9kT2Zmc2V0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzUmVuZGVyVGFyZ2V0KCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIGlzTWFuYWdlZCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50
IGxldmVsQ291bnQoKTsKKworICBwcm90ZWN0ZWQ6CisgICAgaW50IG1Mb2RPZmZzZXQ7CisgICAg
UmVuZGVyZXI5ICptUmVuZGVyZXI7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oVGV4dHVyZVN0b3JhZ2U5KTsKKworICAgIGNvbnN0IERXT1JEIG1EM0RVc2FnZTsK
KyAgICBjb25zdCBEM0RQT09MIG1EM0RQb29sOworfTsKKworY2xhc3MgVGV4dHVyZVN0b3JhZ2U5
XzJEIDogcHVibGljIFRleHR1cmVTdG9yYWdlOQoreworICBwdWJsaWM6CisgICAgVGV4dHVyZVN0
b3JhZ2U5XzJEKFJlbmRlcmVyICpyZW5kZXJlciwgU3dhcENoYWluOSAqc3dhcGNoYWluKTsKKyAg
ICBUZXh0dXJlU3RvcmFnZTlfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFn
ZTlfMkQoKTsKKworICAgIHN0YXRpYyBUZXh0dXJlU3RvcmFnZTlfMkQgKm1ha2VUZXh0dXJlU3Rv
cmFnZTlfMkQoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpOworCisgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKmdldFN1cmZhY2VMZXZlbChpbnQgbGV2ZWwsIGJvb2wgZGlydHkpOworICAgIHZpcnR1YWwg
UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoKTsKKyAgICB2aXJ0dWFsIElEaXJlY3QzREJh
c2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2Vu
ZXJhdGVNaXBtYXAoaW50IGxldmVsKTsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZTlfMkQpOworCisgICAgdm9pZCBpbml0aWFsaXplUmVu
ZGVyVGFyZ2V0KCk7CisKKyAgICBJRGlyZWN0M0RUZXh0dXJlOSAqbVRleHR1cmU7CisgICAgUmVu
ZGVyVGFyZ2V0OSAqbVJlbmRlclRhcmdldDsKK307CisKK2NsYXNzIFRleHR1cmVTdG9yYWdlOV9D
dWJlIDogcHVibGljIFRleHR1cmVTdG9yYWdlOQoreworICBwdWJsaWM6CisgICAgVGV4dHVyZVN0
b3JhZ2U5X0N1YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKTsK
KyAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTlfQ3ViZSgpOworCisgICAgc3RhdGljIFRleHR1
cmVTdG9yYWdlOV9DdWJlICptYWtlVGV4dHVyZVN0b3JhZ2U5X0N1YmUoVGV4dHVyZVN0b3JhZ2Ug
KnN0b3JhZ2UpOworCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldEN1YmVNYXBTdXJmYWNlKEdM
ZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwsIGJvb2wgZGlydHkpOworICAgIHZpcnR1YWwgUmVu
ZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQpOworICAgIHZpcnR1
YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgZmFjZSwgaW50IGxldmVsKTsKKworICBwcml2
YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZTlfQ3ViZSk7
CisKKyAgICB2b2lkIGluaXRpYWxpemVSZW5kZXJUYXJnZXQoKTsKKworICAgIElEaXJlY3QzREN1
YmVUZXh0dXJlOSAqbVRleHR1cmU7CisgICAgUmVuZGVyVGFyZ2V0OSAqbVJlbmRlclRhcmdldFs2
XTsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9URVhUVVJFU1RPUkFH
RTlfSF8KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleEJ1ZmZlcjkuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleEJ1ZmZlcjkuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjU3ZjViY2QyNTZhY2ViNzI1NzVhZmY5YTE5OGNjOWQwZjdkMjc2MzAKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDkvVmVydGV4QnVmZmVyOS5jcHAKQEAgLTAsMCArMSw1MzAgQEAKKyNpbmNsdWRlICJwcmVjb21w
aWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVmVydGV4QnVmZmVyOS5jcHA6IERlZmlu
ZXMgdGhlIEQzRDkgVmVydGV4QnVmZmVyIGltcGxlbWVudGF0aW9uLgorCisjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4QnVmZmVyOS5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L3ZlcnRleGNvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0Lmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmgiCisKKyNpbmNs
dWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCisKK25hbWVzcGFjZSByeAoreworCitib29sIFZlcnRl
eEJ1ZmZlcjk6Om1UcmFuc2xhdGlvbnNJbml0aWFsaXplZCA9IGZhbHNlOworVmVydGV4QnVmZmVy
OTo6Rm9ybWF0Q29udmVydGVyIFZlcnRleEJ1ZmZlcjk6Om1Gb3JtYXRDb252ZXJ0ZXJzW05VTV9H
TF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsKKworVmVydGV4QnVmZmVyOTo6VmVydGV4QnVm
ZmVyOShyeDo6UmVuZGVyZXI5ICpjb25zdCByZW5kZXJlcikgOiBtUmVuZGVyZXIocmVuZGVyZXIp
Cit7CisgICAgbVZlcnRleEJ1ZmZlciA9IE5VTEw7CisgICAgbUJ1ZmZlclNpemUgPSAwOworICAg
IG1EeW5hbWljVXNhZ2UgPSBmYWxzZTsKKworICAgIGlmICghbVRyYW5zbGF0aW9uc0luaXRpYWxp
emVkKQorICAgIHsKKyAgICAgICAgaW5pdGlhbGl6ZVRyYW5zbGF0aW9ucyhyZW5kZXJlci0+Z2V0
Q2Fwc0RlY2xUeXBlcygpKTsKKyAgICAgICAgbVRyYW5zbGF0aW9uc0luaXRpYWxpemVkID0gdHJ1
ZTsKKyAgICB9Cit9CisKK1ZlcnRleEJ1ZmZlcjk6On5WZXJ0ZXhCdWZmZXI5KCkKK3sKKyAgICBp
ZiAobVZlcnRleEJ1ZmZlcikKKyAgICB7CisgICAgICAgIG1WZXJ0ZXhCdWZmZXItPlJlbGVhc2Uo
KTsKKyAgICAgICAgbVZlcnRleEJ1ZmZlciA9IE5VTEw7CisgICAgfQorfQorCitib29sIFZlcnRl
eEJ1ZmZlcjk6OmluaXRpYWxpemUodW5zaWduZWQgaW50IHNpemUsIGJvb2wgZHluYW1pY1VzYWdl
KQoreworICAgIGlmIChtVmVydGV4QnVmZmVyKQorICAgIHsKKyAgICAgICAgbVZlcnRleEJ1ZmZl
ci0+UmVsZWFzZSgpOworICAgICAgICBtVmVydGV4QnVmZmVyID0gTlVMTDsKKyAgICB9CisKKyAg
ICB1cGRhdGVTZXJpYWwoKTsKKworICAgIGlmIChzaXplID4gMCkKKyAgICB7CisgICAgICAgIERX
T1JEIGZsYWdzID0gRDNEVVNBR0VfV1JJVEVPTkxZOworICAgICAgICBpZiAoZHluYW1pY1VzYWdl
KQorICAgICAgICB7CisgICAgICAgICAgICBmbGFncyB8PSBEM0RVU0FHRV9EWU5BTUlDOworICAg
ICAgICB9CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXItPmNyZWF0ZVZlcnRl
eEJ1ZmZlcihzaXplLCBmbGFncywgJm1WZXJ0ZXhCdWZmZXIpOworCisgICAgICAgIGlmIChGQUlM
RUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJPdXQgb2YgbWVtb3J5IGFs
bG9jYXRpbmcgYSB2ZXJ0ZXggYnVmZmVyIG9mIHNpemUgJWx1LiIsIHNpemUpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgbUJ1ZmZlclNpemUgPSBz
aXplOworICAgIG1EeW5hbWljVXNhZ2UgPSBkeW5hbWljVXNhZ2U7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK1ZlcnRleEJ1ZmZlcjkgKlZlcnRleEJ1ZmZlcjk6Om1ha2VWZXJ0ZXhCdWZmZXI5KFZl
cnRleEJ1ZmZlciAqdmVydGV4QnVmZmVyKQoreworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBF
KFZlcnRleEJ1ZmZlcjkqLCB2ZXJ0ZXhCdWZmZXIpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
VmVydGV4QnVmZmVyOSo+KHZlcnRleEJ1ZmZlcik7Cit9CisKK2Jvb2wgVmVydGV4QnVmZmVyOTo6
c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwg
R0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlcywgdW5zaWduZWQgaW50IG9mZnNldCkK
K3sKKyAgICBpZiAobVZlcnRleEJ1ZmZlcikKKyAgICB7CisgICAgICAgIGdsOjpCdWZmZXIgKmJ1
ZmZlciA9IGF0dHJpYi5tQm91bmRCdWZmZXIuZ2V0KCk7CisKKyAgICAgICAgaW50IGlucHV0U3Ry
aWRlID0gYXR0cmliLnN0cmlkZSgpOworICAgICAgICBpbnQgZWxlbWVudFNpemUgPSBhdHRyaWIu
dHlwZVNpemUoKTsKKyAgICAgICAgY29uc3QgRm9ybWF0Q29udmVydGVyICZjb252ZXJ0ZXIgPSBm
b3JtYXRDb252ZXJ0ZXIoYXR0cmliKTsKKworICAgICAgICBEV09SRCBsb2NrRmxhZ3MgPSBtRHlu
YW1pY1VzYWdlID8gRDNETE9DS19OT09WRVJXUklURSA6IDA7CisKKyAgICAgICAgdm9pZCAqbWFw
UHRyID0gTlVMTDsKKworICAgICAgICB1bnNpZ25lZCBpbnQgbWFwU2l6ZTsKKyAgICAgICAgaWYg
KCFzcGFjZVJlcXVpcmVkKGF0dHJpYiwgY291bnQsIGluc3RhbmNlcywgJm1hcFNpemUpKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IG1WZXJ0ZXhCdWZmZXItPkxvY2sob2Zmc2V0LCBtYXBTaXplLCAmbWFw
UHRyLCBsb2NrRmxhZ3MpOworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAg
eworICAgICAgICAgICAgRVJSKCJMb2NrIGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3Vs
dCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBjb25z
dCBjaGFyICppbnB1dCA9IE5VTEw7CisgICAgICAgIGlmIChidWZmZXIpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEJ1ZmZlclN0b3JhZ2UgKnN0b3JhZ2UgPSBidWZmZXItPmdldFN0b3JhZ2UoKTsK
KyAgICAgICAgICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHN0b3JhZ2UtPmdl
dERhdGEoKSkgKyBzdGF0aWNfY2FzdDxpbnQ+KGF0dHJpYi5tT2Zmc2V0KTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8
Y29uc3QgY2hhcio+KGF0dHJpYi5tUG9pbnRlcik7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
aW5zdGFuY2VzID09IDAgfHwgYXR0cmliLm1EaXZpc29yID09IDApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlucHV0ICs9IGlucHV0U3RyaWRlICogc3RhcnQ7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoY29udmVydGVyLmlkZW50aXR5ICYmIGlucHV0U3RyaWRlID09IGVsZW1lbnRTaXplKQor
ICAgICAgICB7CisgICAgICAgICAgICBtZW1jcHkobWFwUHRyLCBpbnB1dCwgY291bnQgKiBpbnB1
dFN0cmlkZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICBjb252ZXJ0ZXIuY29udmVydEFycmF5KGlucHV0LCBpbnB1dFN0cmlkZSwgY291bnQsIG1hcFB0
cik7CisgICAgICAgIH0KKworICAgICAgICBtVmVydGV4QnVmZmVyLT5VbmxvY2soKTsKKworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgRVJSKCJW
ZXJ0ZXggYnVmZmVyIG5vdCBpbml0aWFsaXplZC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KK30KKworYm9vbCBWZXJ0ZXhCdWZmZXI5OjpzdG9yZVJhd0RhdGEoY29uc3Qgdm9pZCog
ZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBvZmZzZXQpCit7CisgICAgaWYg
KG1WZXJ0ZXhCdWZmZXIpCisgICAgeworICAgICAgICBEV09SRCBsb2NrRmxhZ3MgPSBtRHluYW1p
Y1VzYWdlID8gRDNETE9DS19OT09WRVJXUklURSA6IDA7CisKKyAgICAgICAgdm9pZCAqbWFwUHRy
ID0gTlVMTDsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVmVydGV4QnVmZmVyLT5Mb2NrKG9m
ZnNldCwgc2l6ZSwgJm1hcFB0ciwgbG9ja0ZsYWdzKTsKKworICAgICAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiTG9jayBmYWlsZWQgd2l0aCBlcnJv
ciAweCUwOHgiLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisKKyAgICAgICAgbWVtY3B5KG1hcFB0ciwgZGF0YSwgc2l6ZSk7CisKKyAgICAgICAgbVZlcnRl
eEJ1ZmZlci0+VW5sb2NrKCk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIEVSUigiVmVydGV4IGJ1ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgVmVydGV4QnVmZmVyOTo6
Z2V0U3BhY2VSZXF1aXJlZChjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdMc2l6
ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCAqb3V0U3BhY2VSZXF1aXJlZCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gc3BhY2VSZXF1aXJlZChhdHRyaWIsIGNvdW50LCBpbnN0YW5jZXMsIG91dFNwYWNlUmVx
dWlyZWQpOworfQorCitib29sIFZlcnRleEJ1ZmZlcjk6OnJlcXVpcmVzQ29udmVyc2lvbihjb25z
dCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0Cit7CisgICAgcmV0dXJuICFmb3Jt
YXRDb252ZXJ0ZXIoYXR0cmliKS5pZGVudGl0eTsKK30KKwordW5zaWduZWQgaW50IFZlcnRleEJ1
ZmZlcjk6OmdldFZlcnRleFNpemUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBj
b25zdAoreworICAgIHVuc2lnbmVkIGludCBzcGFjZVJlcXVpcmVkOworICAgIHJldHVybiBnZXRT
cGFjZVJlcXVpcmVkKGF0dHJpYiwgMSwgMCwgJnNwYWNlUmVxdWlyZWQpID8gc3BhY2VSZXF1aXJl
ZCA6IDA7Cit9CisKK0QzRERFQ0xUWVBFIFZlcnRleEJ1ZmZlcjk6OmdldERlY2xUeXBlKGNvbnN0
IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QKK3sKKyAgICByZXR1cm4gZm9ybWF0
Q29udmVydGVyKGF0dHJpYikuZDNkRGVjbFR5cGU7Cit9CisKK3Vuc2lnbmVkIGludCBWZXJ0ZXhC
dWZmZXI5OjpnZXRCdWZmZXJTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUJ1ZmZlclNpemU7
Cit9CisKK2Jvb2wgVmVydGV4QnVmZmVyOTo6c2V0QnVmZmVyU2l6ZSh1bnNpZ25lZCBpbnQgc2l6
ZSkKK3sKKyAgICBpZiAoc2l6ZSA+IG1CdWZmZXJTaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGluaXRpYWxpemUoc2l6ZSwgbUR5bmFtaWNVc2FnZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKworYm9vbCBWZXJ0ZXhCdWZmZXI5Ojpk
aXNjYXJkKCkKK3sKKyAgICBpZiAobVZlcnRleEJ1ZmZlcikKKyAgICB7CisgICAgICAgIHZvaWQg
KmR1bW15OworICAgICAgICBIUkVTVUxUIHJlc3VsdDsKKworICAgICAgICByZXN1bHQgPSBtVmVy
dGV4QnVmZmVyLT5Mb2NrKDAsIDEsICZkdW1teSwgRDNETE9DS19ESVNDQVJEKTsKKyAgICAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkRpc2NhcmQg
bG9jayBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgiLCByZXN1bHQpOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0ID0gbVZlcnRleEJ1ZmZlci0+
VW5sb2NrKCk7CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAg
ICAgICAgRVJSKCJEaXNjYXJkIHVubG9jayBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgiLCByZXN1
bHQpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEVSUigiVmVydGV4IGJ1
ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
CisKK0lEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKiBWZXJ0ZXhCdWZmZXI5OjpnZXRCdWZmZXIoKSBj
b25zdAoreworICAgIHJldHVybiBtVmVydGV4QnVmZmVyOworfQorCisvLyBNYXBwaW5nIGZyb20g
T3BlbkdMLUVTIHZlcnRleCBhdHRyaWIgdHlwZSB0byBEM0QgZGVjbCB0eXBlOgorLy8KKy8vIEJZ
VEUgICAgICAgICAgICAgICAgIFNIT1JUIChDYXN0KQorLy8gQllURS1ub3JtICAgICAgICAgICAg
RkxPQVQgKE5vcm1hbGl6ZSkgKGNhbid0IGJlIGV4YWN0bHkgcmVwcmVzZW50ZWQgYXMgU0hPUlQt
bm9ybSkKKy8vIFVOU0lHTkVEX0JZVEUgICAgICAgIFVCWVRFNCAoSWRlbnRpdHkpIG9yIFNIT1JU
IChDYXN0KQorLy8gVU5TSUdORURfQllURS1ub3JtICAgVUJZVEU0TiAoSWRlbnRpdHkpIG9yIEZM
T0FUIChOb3JtYWxpemUpCisvLyBTSE9SVCAgICAgICAgICAgICAgICBTSE9SVCAoSWRlbnRpdHkp
CisvLyBTSE9SVC1ub3JtICAgICAgICAgICBTSE9SVC1ub3JtIChJZGVudGl0eSkgb3IgRkxPQVQg
KE5vcm1hbGl6ZSkKKy8vIFVOU0lHTkVEX1NIT1JUICAgICAgIEZMT0FUIChDYXN0KQorLy8gVU5T
SUdORURfU0hPUlQtbm9ybSAgVVNIT1JULW5vcm0gKElkZW50aXR5KSBvciBGTE9BVCAoTm9ybWFs
aXplKQorLy8gRklYRUQgKG5vdCBpbiBXZWJHTCkgRkxPQVQgKEZpeGVkVG9GbG9hdCkKKy8vIEZM
T0FUICAgICAgICAgICAgICAgIEZMT0FUIChJZGVudGl0eSkKKworLy8gR0xUb0NUeXBlIG1hcHMg
ZnJvbSBHTCB0eXBlIChhcyBHTGVudW0pIHRvIHRoZSBDIHR5cGVkZWYuCit0ZW1wbGF0ZSA8R0xl
bnVtIEdMVHlwZT4gc3RydWN0IEdMVG9DVHlwZSB7IH07CisKK3RlbXBsYXRlIDw+IHN0cnVjdCBH
TFRvQ1R5cGU8R0xfQllURT4gICAgICAgICAgIHsgdHlwZWRlZiBHTGJ5dGUgdHlwZTsgICAgICB9
OwordGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9VTlNJR05FRF9CWVRFPiAgeyB0eXBl
ZGVmIEdMdWJ5dGUgdHlwZTsgICAgIH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdM
X1NIT1JUPiAgICAgICAgICB7IHR5cGVkZWYgR0xzaG9ydCB0eXBlOyAgICAgfTsKK3RlbXBsYXRl
IDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfVU5TSUdORURfU0hPUlQ+IHsgdHlwZWRlZiBHTHVzaG9y
dCB0eXBlOyAgICB9OwordGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9GSVhFRD4gICAg
ICAgICAgeyB0eXBlZGVmIEdMdWludCB0eXBlOyAgICAgIH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
R0xUb0NUeXBlPEdMX0ZMT0FUPiAgICAgICAgICB7IHR5cGVkZWYgR0xmbG9hdCB0eXBlOyAgICAg
fTsKKworLy8gVGhpcyBkaWZmZXJzIGZyb20gRDNEREVDTFRZUEUgaW4gdGhhdCBpdCBpcyB1bnNp
emVkLiAoU2l6ZSBleHBhbnNpb24gaXMgYXBwbGllZCBsYXN0LikKK2VudW0gRDNEVmVydGV4VHlw
ZQoreworICAgIEQzRFZUX0ZMT0FULAorICAgIEQzRFZUX1NIT1JULAorICAgIEQzRFZUX1NIT1JU
X05PUk0sCisgICAgRDNEVlRfVUJZVEUsCisgICAgRDNEVlRfVUJZVEVfTk9STSwKKyAgICBEM0RW
VF9VU0hPUlRfTk9STQorfTsKKworLy8gRDNEVG9DVHlwZSBtYXBzIGZyb20gRDNEIHZlcnRleCB0
eXBlIChhcyBlbnVtIEQzRFZlcnRleFR5cGUpIHRvIHRoZSBjb3JyZXNwb25kaW5nIEMgdHlwZS4K
K3RlbXBsYXRlIDx1bnNpZ25lZCBpbnQgRDNEVHlwZT4gc3RydWN0IEQzRFRvQ1R5cGUgeyB9Owor
Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9GTE9BVD4geyB0eXBlZGVmIGZs
b2F0IHR5cGU7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9TSE9SVD4g
eyB0eXBlZGVmIHNob3J0IHR5cGU7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxE
M0RWVF9TSE9SVF9OT1JNPiB7IHR5cGVkZWYgc2hvcnQgdHlwZTsgfTsKK3RlbXBsYXRlIDw+IHN0
cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1VCWVRFPiB7IHR5cGVkZWYgdW5zaWduZWQgY2hhciB0eXBl
OyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfVUJZVEVfTk9STT4geyB0
eXBlZGVmIHVuc2lnbmVkIGNoYXIgdHlwZTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NU
eXBlPEQzRFZUX1VTSE9SVF9OT1JNPiB7IHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdHlwZTsgfTsK
KworLy8gRW5jb2RlIHRoZSB0eXBlL3NpemUgY29tYmluYXRpb25zIHRoYXQgRDNEIHBlcm1pdHMu
IEZvciBlYWNoIHR5cGUvc2l6ZSBpdCBleHBhbmRzIHRvIGEgd2lkZW5lciB0aGF0IHdpbGwgcHJv
dmlkZSB0aGUgYXBwcm9wcmlhdGUgZmluYWwgc2l6ZS4KK3RlbXBsYXRlIDx1bnNpZ25lZCBpbnQg
dHlwZSwgaW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGUgeyB9OworCit0ZW1wbGF0ZSA8aW50IHNp
emU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfRkxPQVQsIHNpemU+ICAgICAgICAgIDogTm9XaWRl
bjxzaXplPiB7IH07Cit0ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRf
U0hPUlQsIHNpemU+ICAgICAgICAgIDogV2lkZW5Ub0V2ZW48c2l6ZT4geyB9OwordGVtcGxhdGUg
PGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1NIT1JUX05PUk0sIHNpemU+ICAgICA6
IFdpZGVuVG9FdmVuPHNpemU+IHsgfTsKK3RlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVu
UnVsZTxEM0RWVF9VQllURSwgc2l6ZT4gICAgICAgICAgOiBXaWRlblRvRm91cjxzaXplPiB7IH07
Cit0ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfVUJZVEVfTk9STSwg
c2l6ZT4gICAgIDogV2lkZW5Ub0ZvdXI8c2l6ZT4geyB9OwordGVtcGxhdGUgPGludCBzaXplPiBz
dHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1VTSE9SVF9OT1JNLCBzaXplPiAgICA6IFdpZGVuVG9FdmVu
PHNpemU+IHsgfTsKKworLy8gVmVydGV4VHlwZUZsYWdzIGVuY29kZXMgdGhlIEQzRENBUFM5OjpE
ZWNsVHlwZSBmbGFnIGFuZCB2ZXJ0ZXggZGVjbGFyYXRpb24gZmxhZyBmb3IgZWFjaCBEM0QgdmVy
dGV4IHR5cGUgJiBzaXplIGNvbWJpbmF0aW9uLgordGVtcGxhdGUgPHVuc2lnbmVkIGludCBkM2R0
eXBlLCBpbnQgc2l6ZT4gc3RydWN0IFZlcnRleFR5cGVGbGFncyB7IH07CisKK3RlbXBsYXRlIDx1
bnNpZ25lZCBpbnQgX2NhcGZsYWcsIHVuc2lnbmVkIGludCBfZGVjbGZsYWc+CitzdHJ1Y3QgVmVy
dGV4VHlwZUZsYWdzSGVscGVyCit7CisgICAgZW51bSB7IGNhcGZsYWcgPSBfY2FwZmxhZyB9Owor
ICAgIGVudW0geyBkZWNsZmxhZyA9IF9kZWNsZmxhZyB9OworfTsKKwordGVtcGxhdGUgPD4gc3Ry
dWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwgMT4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxw
ZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQxPiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4
VHlwZUZsYWdzPEQzRFZUX0ZMT0FULCAyPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RE
RUNMVFlQRV9GTE9BVDI+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8
RDNEVlRfRkxPQVQsIDM+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZM
T0FUMz4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9B
VCwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQ0PiB7IH07
Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JULCAyPiA6IFZl
cnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9TSE9SVDI+IHsgfTsKK3RlbXBsYXRl
IDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlQsIDQ+IDogVmVydGV4VHlwZUZs
YWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX1NIT1JUND4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0
IFZlcnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVF9OT1JNLCAyPiA6IFZlcnRleFR5cGVGbGFnc0hl
bHBlcjxEM0REVENBUFNfU0hPUlQyTiwgRDNEREVDTFRZUEVfU0hPUlQyTj4geyB9OwordGVtcGxh
dGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVF9OT1JNLCA0PiA6IFZlcnRl
eFR5cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfU0hPUlQ0TiwgRDNEREVDTFRZUEVfU0hPUlQ0Tj4g
eyB9OwordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9VQllURSwgND4g
OiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VCWVRFNCwgRDNEREVDTFRZUEVfVUJZ
VEU0PiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1VCWVRF
X05PUk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VQllURTROLCBEM0RE
RUNMVFlQRV9VQllURTROPiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdz
PEQzRFZUX1VTSE9SVF9OT1JNLCAyPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENBUFNf
VVNIT1JUMk4sIEQzRERFQ0xUWVBFX1VTSE9SVDJOPiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
VmVydGV4VHlwZUZsYWdzPEQzRFZUX1VTSE9SVF9OT1JNLCA0PiA6IFZlcnRleFR5cGVGbGFnc0hl
bHBlcjxEM0REVENBUFNfVVNIT1JUNE4sIEQzRERFQ0xUWVBFX1VTSE9SVDROPiB7IH07CisKKwor
Ly8gVmVydGV4VHlwZU1hcHBpbmcgbWFwcyBHTCB0eXBlICYgbm9ybWFsaXplZCBmbGFnIHRvIHBy
ZWZlcnJlZCBhbmQgZmFsbGJhY2sgRDNEIHZlcnRleCB0eXBlcyAoYXMgRDNEVmVydGV4VHlwZSBl
bnVtcykuCit0ZW1wbGF0ZSA8R0xlbnVtIEdMdHlwZSwgYm9vbCBub3JtYWxpemVkPiBzdHJ1Y3Qg
VmVydGV4VHlwZU1hcHBpbmcgeyB9OworCit0ZW1wbGF0ZSA8RDNEVmVydGV4VHlwZSBQcmVmZXJy
ZWQsIEQzRFZlcnRleFR5cGUgRmFsbGJhY2sgPSBQcmVmZXJyZWQ+CitzdHJ1Y3QgVmVydGV4VHlw
ZU1hcHBpbmdCYXNlCit7CisgICAgZW51bSB7IHByZWZlcnJlZCA9IFByZWZlcnJlZCB9OworICAg
IGVudW0geyBmYWxsYmFjayA9IEZhbGxiYWNrIH07Cit9OworCit0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
VmVydGV4VHlwZU1hcHBpbmc8R0xfQllURSwgZmFsc2U+ICAgICAgICAgICAgICAgICAgICAgICAg
OiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfU0hPUlQ+IHsgfTsgICAgICAgICAgICAgICAg
ICAgICAgIC8vIENhc3QKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9C
WVRFLCB0cnVlPiAgICAgICAgICAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFz
ZTxEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9ybWFsaXplCit0
ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdORURfQllURSwgZmFs
c2U+ICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfVUJZVEUsIEQz
RFZUX0ZMT0FUPiB7IH07ICAgICAgICAgIC8vIElkZW50aXR5LCBDYXN0Cit0ZW1wbGF0ZSA8PiBz
dHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdORURfQllURSwgdHJ1ZT4gICAgICAgICAg
ICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfVUJZVEVfTk9STSwgRDNEVlRfRkxP
QVQ+IHsgfTsgICAgIC8vIElkZW50aXR5LCBOb3JtYWxpemUKK3RlbXBsYXRlIDw+IHN0cnVjdCBW
ZXJ0ZXhUeXBlTWFwcGluZzxHTF9TSE9SVCwgZmFsc2U+ICAgICAgICAgICAgICAgICAgICAgICA6
IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9TSE9SVD4geyB9OyAgICAgICAgICAgICAgICAg
ICAgICAgLy8gSWRlbnRpdHkKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxH
TF9TSE9SVCwgdHJ1ZT4gICAgICAgICAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5n
QmFzZTxEM0RWVF9TSE9SVF9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAgICAgLy8gQ2FzdCwgTm9y
bWFsaXplCit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdORURf
U0hPUlQsIGZhbHNlPiAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRf
RkxPQVQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8vIENhc3QKK3RlbXBsYXRlIDw+IHN0
cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9TSE9SVCwgdHJ1ZT4gICAgICAgICAg
ICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9VU0hPUlRfTk9STSwgRDNEVlRfRkxP
QVQ+IHsgfTsgICAgLy8gQ2FzdCwgTm9ybWFsaXplCit0ZW1wbGF0ZSA8Ym9vbCBub3JtYWxpemVk
PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfRklYRUQsIG5vcm1hbGl6ZWQ+ICAgOiBWZXJ0
ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAg
IC8vIEZpeGVkVG9GbG9hdAordGVtcGxhdGUgPGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IFZlcnRl
eFR5cGVNYXBwaW5nPEdMX0ZMT0FULCBub3JtYWxpemVkPiAgIDogVmVydGV4VHlwZU1hcHBpbmdC
YXNlPEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBJZGVudGl0eQor
CisKKy8vIEdpdmVuIGEgR0wgdHlwZSAmIG5vcm0gZmxhZyBhbmQgYSBEM0QgdHlwZSwgQ29udmVy
c2lvblJ1bGUgcHJvdmlkZXMgdGhlIHR5cGUgY29udmVyc2lvbiBydWxlIChDYXN0LCBOb3JtYWxp
emUsIElkZW50aXR5LCBGaXhlZFRvRmxvYXQpLgorLy8gVGhlIGNvbnZlcnNpb24gcnVsZXMgdGhl
bXNlbHZlcyBhcmUgZGVmaW5lZCBpbiB2ZXJ0ZXhjb252ZXJzaW9uLmguCisKKy8vIEFsbW9zdCBh
bGwgY2FzZXMgYXJlIGNvdmVyZWQgYnkgQ2FzdCAoaW5jbHVkaW5nIHRob3NlIHRoYXQgYXJlIGFj
dHVhbGx5IElkZW50aXR5IHNpbmNlIENhc3Q8VCxUPiBrbm93cyBpdCdzIGFuIGlkZW50aXR5IG1h
cHBpbmcpLgordGVtcGxhdGUgPEdMZW51bSBmcm9tVHlwZSwgYm9vbCBub3JtYWxpemVkLCB1bnNp
Z25lZCBpbnQgdG9UeXBlPgorc3RydWN0IENvbnZlcnNpb25SdWxlIDogQ2FzdDx0eXBlbmFtZSBH
TFRvQ1R5cGU8ZnJvbVR5cGU+Ojp0eXBlLCB0eXBlbmFtZSBEM0RUb0NUeXBlPHRvVHlwZT46OnR5
cGU+IHsgfTsKKworLy8gQWxsIGNvbnZlcnNpb25zIGZyb20gbm9ybWFsaXplZCB0eXBlcyB0byBm
bG9hdCB1c2UgdGhlIE5vcm1hbGl6ZSBvcGVyYXRvci4KK3RlbXBsYXRlIDxHTGVudW0gZnJvbVR5
cGU+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxmcm9tVHlwZSwgdHJ1ZSwgRDNEVlRfRkxPQVQ+IDog
Tm9ybWFsaXplPHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5cGU+IHsgfTsKKworLy8g
VXNlIGEgZnVsbCBzcGVjaWFsaXphdGlvbiBmb3IgdGhpcyBzbyB0aGF0IGl0IHByZWZlcmVudGlh
bGx5IG1hdGNoZXMgYWhlYWQgb2YgdGhlIGdlbmVyaWMgbm9ybWFsaXplLXRvLWZsb2F0IHJ1bGVz
LgordGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCB0cnVlLCBEM0RW
VF9GTE9BVD4gIDogRml4ZWRUb0Zsb2F0PEdMaW50LCAxNj4geyB9OwordGVtcGxhdGUgPD4gc3Ry
dWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCBmYWxzZSwgRDNEVlRfRkxPQVQ+IDogRml4ZWRU
b0Zsb2F0PEdMaW50LCAxNj4geyB9OworCisvLyBBIDItc3RhZ2UgY29uc3RydWN0aW9uIGlzIHVz
ZWQgZm9yIERlZmF1bHRWZXJ0ZXhWYWx1ZXMgYmVjYXVzZSBmbG9hdCBtdXN0IHVzZSBTaW1wbGVE
ZWZhdWx0VmFsdWVzIChpLmUuIDAvMSkKKy8vIHdoZXRoZXIgaXQgaXMgbm9ybWFsaXplZCBvciBu
b3QuCit0ZW1wbGF0ZSA8Y2xhc3MgVCwgYm9vbCBub3JtYWxpemVkPiBzdHJ1Y3QgRGVmYXVsdFZl
cnRleFZhbHVlc1N0YWdlMiB7IH07CisKK3RlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgRGVmYXVs
dFZlcnRleFZhbHVlc1N0YWdlMjxULCB0cnVlPiAgOiBOb3JtYWxpemVkRGVmYXVsdFZhbHVlczxU
PiB7IH07Cit0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFn
ZTI8VCwgZmFsc2U+IDogU2ltcGxlRGVmYXVsdFZhbHVlczxUPiB7IH07CisKKy8vIFdvcmsgb3V0
IHRoZSBkZWZhdWx0IHZhbHVlIHJ1bGUgZm9yIGEgRDNEIHR5cGUgKGV4cHJlc3NlZCBhcyB0aGUg
QyB0eXBlKSBhbmQKK3RlbXBsYXRlIDxjbGFzcyBULCBib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBE
ZWZhdWx0VmVydGV4VmFsdWVzIDogRGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMjxULCBub3JtYWxp
emVkPiB7IH07Cit0ZW1wbGF0ZSA8Ym9vbCBub3JtYWxpemVkPiBzdHJ1Y3QgRGVmYXVsdFZlcnRl
eFZhbHVlczxmbG9hdCwgbm9ybWFsaXplZD4gOiBTaW1wbGVEZWZhdWx0VmFsdWVzPGZsb2F0PiB7
IH07CisKKy8vIFBvbGljeSBydWxlcyBmb3IgdXNlIHdpdGggQ29udmVydGVyLCB0byBjaG9vc2Ug
d2hldGhlciB0byB1c2UgdGhlIHByZWZlcnJlZCBvciBmYWxsYmFjayBjb252ZXJzaW9uLgorLy8g
VGhlIGZhbGxiYWNrIGNvbnZlcnNpb24gcHJvZHVjZXMgYW4gb3V0cHV0IHRoYXQgYWxsIEQzRDkg
ZGV2aWNlcyBtdXN0IHN1cHBvcnQuCit0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IFVzZVByZWZl
cnJlZCB7IGVudW0geyB0eXBlID0gVDo6cHJlZmVycmVkIH07IH07Cit0ZW1wbGF0ZSA8Y2xhc3Mg
VD4gc3RydWN0IFVzZUZhbGxiYWNrIHsgZW51bSB7IHR5cGUgPSBUOjpmYWxsYmFjayB9OyB9Owor
CisvLyBDb252ZXJ0ZXIgdGllcyBpdCBhbGwgdG9nZXRoZXIuIEdpdmVuIGFuIE9wZW5HTCB0eXBl
L25vcm0vc2l6ZSBhbmQgY2hvaWNlIG9mIHByZWZlcnJlZC9mYWxsYmFjayBjb252ZXJzaW9uLAor
Ly8gaXQgcHJvdmlkZXMgYWxsIHRoZSBtZW1iZXJzIG9mIHRoZSBhcHByb3ByaWF0ZSBWZXJ0ZXhE
YXRhQ29udmVydGVyLCB0aGUgRDNEQ0FQUzk6OkRlY2xUeXBlcyBmbGFnIGluIGNhcCBmbGFnCisv
LyBhbmQgdGhlIEQzRERFQ0xUWVBFIG1lbWJlciBuZWVkZWQgZm9yIHRoZSB2ZXJ0ZXggZGVjbGFy
YXRpb24gaW4gZGVjbGZsYWcuCit0ZW1wbGF0ZSA8R0xlbnVtIGZyb21UeXBlLCBib29sIG5vcm1h
bGl6ZWQsIGludCBzaXplLCB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgUHJlZmVyZW5jZVJ1bGU+
CitzdHJ1Y3QgQ29udmVydGVyCisgICAgOiBWZXJ0ZXhEYXRhQ29udmVydGVyPHR5cGVuYW1lIEdM
VG9DVHlwZTxmcm9tVHlwZT46OnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZGVu
UnVsZTxQcmVmZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6
ZWQ+ID46OnR5cGUsIHNpemU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJzaW9u
UnVsZTxmcm9tVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9ybWFsaXplZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJl
ZmVyZW5jZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0
eXBlPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdFZlcnRleFZhbHVlczx0eXBl
bmFtZSBEM0RUb0NUeXBlPFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBlTWFwcGluZzxmcm9tVHlw
ZSwgbm9ybWFsaXplZD4gPjo6dHlwZT46OnR5cGUsIG5vcm1hbGl6ZWQgPiA+Cit7Citwcml2YXRl
OgorICAgIGVudW0geyBkM2R0eXBlID0gUHJlZmVyZW5jZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5n
PGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBlIH07CisgICAgZW51bSB7IGQzZHNpemUgPSBX
aWRlblJ1bGU8ZDNkdHlwZSwgc2l6ZT46OmZpbmFsV2lkdGggfTsKKworcHVibGljOgorICAgIGVu
dW0geyBjYXBmbGFnID0gVmVydGV4VHlwZUZsYWdzPGQzZHR5cGUsIGQzZHNpemU+OjpjYXBmbGFn
IH07CisgICAgZW51bSB7IGRlY2xmbGFnID0gVmVydGV4VHlwZUZsYWdzPGQzZHR5cGUsIGQzZHNp
emU+OjpkZWNsZmxhZyB9OworfTsKKworLy8gSW5pdGlhbGl6ZSBhIFRyYW5zbGF0aW9uSW5mbwor
I2RlZmluZSBUUkFOU0xBVElPTih0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6aWRlbnRp
dHksICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBDb252ZXJ0ZXI8dHlwZSwg
bm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6ZmluYWxTaXplLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6Y29u
dmVydEFycmF5LCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBzdGF0aWNfY2FzdDxE
M0RERUNMVFlQRT4oQ29udmVydGVyPHR5cGUsIG5vcm0sIHNpemUsIHByZWZlcnJlZD46OmRlY2xm
bGFnKSAgXAorICAgIH0KKworI2RlZmluZSBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUo
dHlwZSwgbm9ybSwgc2l6ZSkgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9y
bSwgc2l6ZSwgVXNlUHJlZmVycmVkPjo6Y2FwZmxhZywgXAorICAgICAgICBUUkFOU0xBVElPTih0
eXBlLCBub3JtLCBzaXplLCBVc2VQcmVmZXJyZWQpLCAgICAgICAgXAorICAgICAgICBUUkFOU0xB
VElPTih0eXBlLCBub3JtLCBzaXplLCBVc2VGYWxsYmFjaykgICAgICAgICAgXAorICAgIH0KKwor
I2RlZmluZSBUUkFOU0xBVElPTlNfRk9SX1RZUEUodHlwZSkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0
eXBlLCBmYWxzZSwgMSksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxz
ZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMyksIFRS
QU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgNCkgfSwgXAorICAgICAg
ICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCB0cnVlLCAxKSwgVFJBTlNM
QVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRydWUsIDIpLCBUUkFOU0xBVElPTl9GT1Jf
VFlQRV9OT1JNX1NJWkUodHlwZSwgdHJ1ZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1f
U0laRSh0eXBlLCB0cnVlLCA0KSB9LCAgICAgXAorICAgIH0KKworI2RlZmluZSBUUkFOU0xBVElP
TlNfRk9SX1RZUEVfTk9fTk9STSh0eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMSksIFRS
QU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMiksIFRSQU5TTEFUSU9O
X0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBF
X05PUk1fU0laRSh0eXBlLCBmYWxzZSwgNCkgfSwgXAorICAgICAgICB7IFRSQU5TTEFUSU9OX0ZP
Ul9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMSksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05P
Uk1fU0laRSh0eXBlLCBmYWxzZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0
eXBlLCBmYWxzZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxz
ZSwgNCkgfSwgXAorICAgIH0KKworY29uc3QgVmVydGV4QnVmZmVyOTo6VHJhbnNsYXRpb25EZXNj
cmlwdGlvbiBWZXJ0ZXhCdWZmZXI5OjptUG9zc2libGVUcmFuc2xhdGlvbnNbTlVNX0dMX1ZFUlRF
WF9BVFRSSUJfVFlQRVNdWzJdWzRdID0gLy8gW0dMIHR5cGVzIGFzIGVudW1lcmF0ZWQgYnkgdHlw
ZUluZGV4KCldW25vcm1hbGl6ZWRdW3NpemUtMV0KK3sKKyAgICBUUkFOU0xBVElPTlNfRk9SX1RZ
UEUoR0xfQllURSksCisgICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKEdMX1VOU0lHTkVEX0JZVEUp
LAorICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9TSE9SVCksCisgICAgVFJBTlNMQVRJT05T
X0ZPUl9UWVBFKEdMX1VOU0lHTkVEX1NIT1JUKSwKKyAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEVf
Tk9fTk9STShHTF9GSVhFRCksCisgICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFX05PX05PUk0oR0xf
RkxPQVQpCit9OworCit2b2lkIFZlcnRleEJ1ZmZlcjk6OmluaXRpYWxpemVUcmFuc2xhdGlvbnMo
RFdPUkQgZGVjbFR5cGVzKQoreworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgTlVN
X0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVM7IGkrKykKKyAgICB7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGogPSAwOyBqIDwgMjsgaisrKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBrID0gMDsgayA8IDQ7IGsrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBpZiAobVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2tdLmNhcHNGbGFnID09IDAgfHwg
KGRlY2xUeXBlcyAmIG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tpXVtqXVtrXS5jYXBzRmxhZykgIT0g
MCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1Gb3JtYXRDb252ZXJ0
ZXJzW2ldW2pdW2tdID0gbVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2tdLnByZWZlcnJlZENv
bnZlcnNpb247CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1Gb3JtYXRDb252ZXJ0ZXJzW2ldW2pd
W2tdID0gbVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2tdLmZhbGxiYWNrQ29udmVyc2lvbjsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3Vuc2lnbmVkIGludCBWZXJ0ZXhCdWZmZXI5Ojp0eXBlSW5kZXgoR0xlbnVtIHR5cGUpCit7Cisg
ICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfQllURTogcmV0dXJuIDA7Cisg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6IHJldHVybiAxOworICAgICAgY2FzZSBHTF9TSE9S
VDogcmV0dXJuIDI7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOiByZXR1cm4gMzsKKyAg
ICAgIGNhc2UgR0xfRklYRUQ6IHJldHVybiA0OworICAgICAgY2FzZSBHTF9GTE9BVDogcmV0dXJu
IDU7CisKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiA1OworICAgIH0KK30K
KworY29uc3QgVmVydGV4QnVmZmVyOTo6Rm9ybWF0Q29udmVydGVyICZWZXJ0ZXhCdWZmZXI5Ojpm
b3JtYXRDb252ZXJ0ZXIoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlKQorewor
ICAgIHJldHVybiBtRm9ybWF0Q29udmVydGVyc1t0eXBlSW5kZXgoYXR0cmlidXRlLm1UeXBlKV1b
YXR0cmlidXRlLm1Ob3JtYWxpemVkXVthdHRyaWJ1dGUubVNpemUgLSAxXTsKK30KKworYm9vbCBW
ZXJ0ZXhCdWZmZXI5OjpzcGFjZVJlcXVpcmVkKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0
dHJpYiwgc3RkOjpzaXplX3QgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqb3V0U3BhY2VSZXF1aXJlZCkKK3sK
KyAgICB1bnNpZ25lZCBpbnQgZWxlbWVudFNpemUgPSBmb3JtYXRDb252ZXJ0ZXIoYXR0cmliKS5v
dXRwdXRFbGVtZW50U2l6ZTsKKworICAgIGlmIChhdHRyaWIubUFycmF5RW5hYmxlZCkKKyAgICB7
CisgICAgICAgIHVuc2lnbmVkIGludCBlbGVtZW50Q291bnQgPSAwOworICAgICAgICBpZiAoaW5z
dGFuY2VzID09IDAgfHwgYXR0cmliLm1EaXZpc29yID09IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGVsZW1lbnRDb3VudCA9IGNvdW50OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oaW5zdGFuY2Vz
KSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLSAoYXR0cmliLm1E
aXZpc29yIC0gMSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gUm91bmQgdXAK
KyAgICAgICAgICAgICAgICBlbGVtZW50Q291bnQgPSAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50
PihpbnN0YW5jZXMpICsgKGF0dHJpYi5tRGl2aXNvciAtIDEpKSAvIGF0dHJpYi5tRGl2aXNvcjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBlbGVtZW50Q291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGluc3RhbmNl
cykgLyBhdHRyaWIubURpdmlzb3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoZWxlbWVudFNpemUgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+Ojpt
YXgoKSAvIGVsZW1lbnRDb3VudCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG91dFNwYWNl
UmVxdWlyZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKm91dFNwYWNlUmVxdWly
ZWQgPSBlbGVtZW50U2l6ZSAqIGVsZW1lbnRDb3VudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBlbGVtZW50U2l6ZSA9IDQ7CisgICAgICAgIGlm
IChvdXRTcGFjZVJlcXVpcmVkKQorICAgICAgICB7CisgICAgICAgICAgICAqb3V0U3BhY2VSZXF1
aXJlZCA9IGVsZW1lbnRTaXplICogNDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4QnVmZmVyOS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjJmODgxMTdiZGEyNTBlYzkxMTcwNjdiOGE2OGE4NDRkNjQwZTMwYjIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDkvVmVydGV4QnVmZmVyOS5oCkBAIC0wLDAgKzEsOTEgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKy8vIFZlcnRleEJ1ZmZlcjkuaDogRGVmaW5lcyB0aGUgRDNEOSBWZXJ0ZXhCdWZmZXIgaW1w
bGVtZW50YXRpb24uCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX1ZFUlRFWEJVRkZFUjlf
SF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1ZFUlRFWEJVRkZFUjlfSF8KKworI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXIuaCIKKworbmFtZXNwYWNlIHJ4Cit7
CitjbGFzcyBSZW5kZXJlcjk7CisKK2NsYXNzIFZlcnRleEJ1ZmZlcjkgOiBwdWJsaWMgVmVydGV4
QnVmZmVyCit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBWZXJ0ZXhCdWZmZXI5KHJ4OjpSZW5k
ZXJlcjkgKmNvbnN0IHJlbmRlcmVyKTsKKyAgICB2aXJ0dWFsIH5WZXJ0ZXhCdWZmZXI5KCk7CisK
KyAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgc2l6ZSwgYm9vbCBkeW5h
bWljVXNhZ2UpOworCisgICAgc3RhdGljIFZlcnRleEJ1ZmZlcjkgKm1ha2VWZXJ0ZXhCdWZmZXI5
KFZlcnRleEJ1ZmZlciAqdmVydGV4QnVmZmVyKTsKKworICAgIHZpcnR1YWwgYm9vbCBzdG9yZVZl
cnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTGludCBz
dGFydCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKKyAgICB2aXJ0dWFs
IGJvb2wgc3RvcmVSYXdEYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1
bnNpZ25lZCBpbnQgb2Zmc2V0KTsKKworICAgIHZpcnR1YWwgYm9vbCBnZXRTcGFjZVJlcXVpcmVk
KGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xzaXplaSBjb3VudCwgR0xzaXpl
aSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCAqb3V0U3BhY2VSZXF1aXJlZCkgY29uc3Q7CisKKyAg
ICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNDb252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1
dGUgJmF0dHJpYikgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBpbnQgZ2V0VmVydGV4U2l6ZShjb25z
dCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0OworICAgIEQzRERFQ0xUWVBFIGdl
dERlY2xUeXBlKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3Q7CisKKyAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRCdWZmZXJTaXplKCkgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIHNldEJ1ZmZlclNpemUodW5zaWduZWQgaW50IHNpemUpOworICAgIHZpcnR1YWwgYm9v
bCBkaXNjYXJkKCk7CisKKyAgICBJRGlyZWN0M0RWZXJ0ZXhCdWZmZXI5ICpnZXRCdWZmZXIoKSBj
b25zdDsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihWZXJ0ZXhC
dWZmZXI5KTsKKworICAgIHJ4OjpSZW5kZXJlcjkgKmNvbnN0IG1SZW5kZXJlcjsKKworICAgIElE
aXJlY3QzRFZlcnRleEJ1ZmZlcjkgKm1WZXJ0ZXhCdWZmZXI7CisgICAgdW5zaWduZWQgaW50IG1C
dWZmZXJTaXplOworICAgIGJvb2wgbUR5bmFtaWNVc2FnZTsKKworICAgIC8vIEF0dHJpYnV0ZSBm
b3JtYXQgY29udmVyc2lvbgorICAgIGVudW0geyBOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFUyA9
IDYgfTsKKworICAgIHN0cnVjdCBGb3JtYXRDb252ZXJ0ZXIKKyAgICB7CisgICAgICAgIGJvb2wg
aWRlbnRpdHk7CisgICAgICAgIHN0ZDo6c2l6ZV90IG91dHB1dEVsZW1lbnRTaXplOworICAgICAg
ICB2b2lkICgqY29udmVydEFycmF5KShjb25zdCB2b2lkICppbiwgc3RkOjpzaXplX3Qgc3RyaWRl
LCBzdGQ6OnNpemVfdCBuLCB2b2lkICpvdXQpOworICAgICAgICBEM0RERUNMVFlQRSBkM2REZWNs
VHlwZTsKKyAgICB9OworCisgICAgc3RhdGljIGJvb2wgbVRyYW5zbGF0aW9uc0luaXRpYWxpemVk
OworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVUcmFuc2xhdGlvbnMoRFdPUkQgZGVjbFR5cGVz
KTsKKworICAgIC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRleCgpXVtub3Jt
YWxpemVkXVtzaXplIC0gMV0KKyAgICBzdGF0aWMgRm9ybWF0Q29udmVydGVyIG1Gb3JtYXRDb252
ZXJ0ZXJzW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsKKworICAgIHN0cnVjdCBU
cmFuc2xhdGlvbkRlc2NyaXB0aW9uCisgICAgeworICAgICAgICBEV09SRCBjYXBzRmxhZzsKKyAg
ICAgICAgRm9ybWF0Q29udmVydGVyIHByZWZlcnJlZENvbnZlcnNpb247CisgICAgICAgIEZvcm1h
dENvbnZlcnRlciBmYWxsYmFja0NvbnZlcnNpb247CisgICAgfTsKKworICAgIC8vIFRoaXMgdGFi
bGUgaXMgdXNlZCB0byBnZW5lcmF0ZSBtRm9ybWF0Q29udmVydGVycy4KKyAgICAvLyBbR0wgdHlw
ZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXplZF1bc2l6ZSAtIDFdCisg
ICAgc3RhdGljIGNvbnN0IFRyYW5zbGF0aW9uRGVzY3JpcHRpb24gbVBvc3NpYmxlVHJhbnNsYXRp
b25zW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsKKworICAgIHN0YXRpYyB1bnNp
Z25lZCBpbnQgdHlwZUluZGV4KEdMZW51bSB0eXBlKTsKKyAgICBzdGF0aWMgY29uc3QgRm9ybWF0
Q29udmVydGVyICZmb3JtYXRDb252ZXJ0ZXIoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0
cmlidXRlKTsKKworICAgIHN0YXRpYyBib29sIHNwYWNlUmVxdWlyZWQoY29uc3QgZ2w6OlZlcnRl
eEF0dHJpYnV0ZSAmYXR0cmliLCBzdGQ6OnNpemVfdCBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm91dFNwYWNlUmVx
dWlyZWQpOworfTsKKworfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1ZFUlRFWEJV
RkZFUjlfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhEZWNsYXJhdGlv
bkNhY2hlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNWM4YTE0MjMyMTFmODM1ODY5M2Y5ZjY5ODI0NjM4MWJk
MjQ4ZTZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleERlY2xhcmF0aW9uQ2FjaGUuY3BwCkBAIC0wLDAg
KzEsMjE3IEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBW
ZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmNwcDogSW1wbGVtZW50cyBhIGhlbHBlciBjbGFzcyB0byBj
b25zdHJ1Y3QgYW5kIGNhY2hlIHZlcnRleCBkZWNsYXJhdGlvbnMuCisKKyNpbmNsdWRlICJsaWJH
TEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4QnVmZmVyOS5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleERlY2xhcmF0aW9uQ2FjaGUuaCIKKwor
bmFtZXNwYWNlIHJ4Cit7CisKK1ZlcnRleERlY2xhcmF0aW9uQ2FjaGU6OlZlcnRleERlY2xhcmF0
aW9uQ2FjaGUoKSA6IG1NYXhMcnUoMCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9W
RVJURVhfREVDTF9DQUNIRV9FTlRSSUVTOyBpKyspCisgICAgeworICAgICAgICBtVmVydGV4RGVj
bENhY2hlW2ldLnZlcnRleERlY2xhcmF0aW9uID0gTlVMTDsKKyAgICAgICAgbVZlcnRleERlY2xD
YWNoZVtpXS5scnVDb3VudCA9IDA7CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBn
bDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgeworICAgICAgICBtQXBwbGllZFZCc1tp
XS5zZXJpYWwgPSAwOworICAgIH0KKworICAgIG1MYXN0U2V0VkRlY2wgPSBOVUxMOworICAgIG1J
bnN0YW5jaW5nRW5hYmxlZCA9IHRydWU7Cit9CisKK1ZlcnRleERlY2xhcmF0aW9uQ2FjaGU6On5W
ZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9W
RVJURVhfREVDTF9DQUNIRV9FTlRSSUVTOyBpKyspCisgICAgeworICAgICAgICBpZiAobVZlcnRl
eERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAg
bVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlvbi0+UmVsZWFzZSgpOworICAgICAg
ICB9CisgICAgfQorfQorCitHTGVudW0gVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6YXBwbHlEZWNs
YXJhdGlvbihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0
cmlidXRlc1tdLCBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgR0xzaXplaSBpbnN0
YW5jZXMsIEdMc2l6ZWkgKnJlcGVhdERyYXcpCit7CisgICAgKnJlcGVhdERyYXcgPSAxOworCisg
ICAgaW50IGluZGV4ZWRBdHRyaWJ1dGUgPSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOworICAgIGlu
dCBpbnN0YW5jZWRBdHRyaWJ1dGUgPSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOworCisgICAgaWYg
KGluc3RhbmNlcyA+IDApCisgICAgeworICAgICAgICAvLyBGaW5kIGFuIGluZGV4ZWQgYXR0cmli
dXRlIHRvIGJlIG1hcHBlZCB0byBEM0Qgc3RyZWFtIDAKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChhdHRyaWJ1dGVzW2ldLmFjdGl2ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAoaW5kZXhlZEF0dHJpYnV0ZSA9PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTICYmIGF0dHJp
YnV0ZXNbaV0uZGl2aXNvciA9PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgaW5kZXhlZEF0dHJpYnV0ZSA9IGk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKGluc3RhbmNlZEF0dHJpYnV0ZSA9PSBnbDo6TUFYX1ZFUlRFWF9BVFRS
SUJTICYmIGF0dHJpYnV0ZXNbaV0uZGl2aXNvciAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgaW5zdGFuY2VkQXR0cmlidXRlID0gaTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgaWYgKGluZGV4ZWRBdHRyaWJ1dGUgIT0gZ2w6Ok1BWF9WRVJU
RVhfQVRUUklCUyAmJiBpbnN0YW5jZWRBdHRyaWJ1dGUgIT0gZ2w6Ok1BWF9WRVJURVhfQVRUUklC
UykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgLy8gRm91bmQgYm90aCBhbiBpbmRleGVk
IGFuZCBpbnN0YW5jZWQgYXR0cmlidXRlCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoaW5kZXhlZEF0dHJpYnV0ZSA9PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBEM0RWRVJURVhFTEVNRU5UOSBlbGVtZW50c1tnbDo6TUFYX1ZFUlRF
WF9BVFRSSUJTICsgMV07CisgICAgRDNEVkVSVEVYRUxFTUVOVDkgKmVsZW1lbnQgPSAmZWxlbWVu
dHNbMF07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7
IGkrKykKKyAgICB7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmFjdGl2ZSkKKyAgICAgICAg
eworICAgICAgICAgICAgLy8gRGlyZWN0bHkgYmluZGluZyB0aGUgc3RvcmFnZSBidWZmZXIgaXMg
bm90IHN1cHBvcnRlZCBmb3IgZDNkOQorICAgICAgICAgICAgQVNTRVJUKGF0dHJpYnV0ZXNbaV0u
c3RvcmFnZSA9PSBOVUxMKTsKKworICAgICAgICAgICAgaW50IHN0cmVhbSA9IGk7CisKKyAgICAg
ICAgICAgIGlmIChpbnN0YW5jZXMgPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IC8vIER1ZSB0byBhIGJ1ZyBvbiBBVEkgY2FyZHMgd2UgY2FuJ3QgZW5hYmxlIGluc3RhbmNpbmcg
d2hlbiBub25lIG9mIHRoZSBhdHRyaWJ1dGVzIGFyZSBpbnN0YW5jZWQuCisgICAgICAgICAgICAg
ICAgaWYgKGluc3RhbmNlZEF0dHJpYnV0ZSA9PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKnJlcGVhdERyYXcgPSBpbnN0YW5j
ZXM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpID09IGluZGV4ZWRBdHRyaWJ1dGUpCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9IDA7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaSA9
PSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJl
YW0gPSBpbmRleGVkQXR0cmlidXRlOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgVUlOVCBmcmVxdWVuY3kgPSAxOworICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uZGl2aXNvciA9PSAwKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmcmVxdWVuY3kgPSBEM0RT
VFJFQU1TT1VSQ0VfSU5ERVhFRERBVEEgfCBpbnN0YW5jZXM7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBmcmVxdWVuY3kgPSBEM0RTVFJFQU1TT1VSQ0VfSU5TVEFOQ0VE
QVRBIHwgYXR0cmlidXRlc1tpXS5kaXZpc29yOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNv
dXJjZUZyZXEoc3RyZWFtLCBmcmVxdWVuY3kpOworICAgICAgICAgICAgICAgICAgICBtSW5zdGFu
Y2luZ0VuYWJsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgVmVydGV4QnVmZmVyOSAqdmVydGV4QnVmZmVyID0gVmVydGV4QnVmZmVyOTo6
bWFrZVZlcnRleEJ1ZmZlcjkoYXR0cmlidXRlc1tpXS52ZXJ0ZXhCdWZmZXIpOworCisgICAgICAg
ICAgICBpZiAobUFwcGxpZWRWQnNbc3RyZWFtXS5zZXJpYWwgIT0gYXR0cmlidXRlc1tpXS5zZXJp
YWwgfHwKKyAgICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJlYW1dLnN0cmlkZSAhPSBhdHRy
aWJ1dGVzW2ldLnN0cmlkZSB8fAorICAgICAgICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVhbV0u
b2Zmc2V0ICE9IGF0dHJpYnV0ZXNbaV0ub2Zmc2V0KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlKHN0cmVhbSwgdmVydGV4QnVmZmVyLT5nZXRC
dWZmZXIoKSwgYXR0cmlidXRlc1tpXS5vZmZzZXQsIGF0dHJpYnV0ZXNbaV0uc3RyaWRlKTsKKyAg
ICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJlYW1dLnNlcmlhbCA9IGF0dHJpYnV0ZXNbaV0u
c2VyaWFsOworICAgICAgICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVhbV0uc3RyaWRlID0gYXR0
cmlidXRlc1tpXS5zdHJpZGU7CisgICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5v
ZmZzZXQgPSBhdHRyaWJ1dGVzW2ldLm9mZnNldDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgZWxlbWVudC0+U3RyZWFtID0gc3RyZWFtOworICAgICAgICAgICAgZWxlbWVudC0+T2Zmc2V0
ID0gMDsKKyAgICAgICAgICAgIGVsZW1lbnQtPlR5cGUgPSBhdHRyaWJ1dGVzW2ldLmF0dHJpYnV0
ZS0+bUFycmF5RW5hYmxlZCA/IHZlcnRleEJ1ZmZlci0+Z2V0RGVjbFR5cGUoKmF0dHJpYnV0ZXNb
aV0uYXR0cmlidXRlKSA6IEQzRERFQ0xUWVBFX0ZMT0FUNDsKKyAgICAgICAgICAgIGVsZW1lbnQt
Pk1ldGhvZCA9IEQzRERFQ0xNRVRIT0RfREVGQVVMVDsKKyAgICAgICAgICAgIGVsZW1lbnQtPlVz
YWdlID0gRDNEREVDTFVTQUdFX1RFWENPT1JEOworICAgICAgICAgICAgZWxlbWVudC0+VXNhZ2VJ
bmRleCA9IHByb2dyYW1CaW5hcnktPmdldFNlbWFudGljSW5kZXgoaSk7CisgICAgICAgICAgICBl
bGVtZW50Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaW5zdGFuY2VzID09IDAgfHwg
aW5zdGFuY2VkQXR0cmlidXRlID09IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgeworICAg
ICAgICBpZiAobUluc3RhbmNpbmdFbmFibGVkKQorICAgICAgICB7CisgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoaSwgMSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1JbnN0YW5jaW5nRW5hYmxlZCA9IGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IEQzRFZFUlRFWEVMRU1FTlQ5IGVu
ZCA9IEQzRERFQ0xfRU5EKCk7CisgICAgKihlbGVtZW50KyspID0gZW5kOworCisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUzsgaSsrKQorICAgIHsK
KyAgICAgICAgVmVydGV4RGVjbENhY2hlRW50cnkgKmVudHJ5ID0gJm1WZXJ0ZXhEZWNsQ2FjaGVb
aV07CisgICAgICAgIGlmIChtZW1jbXAoZW50cnktPmNhY2hlZEVsZW1lbnRzLCBlbGVtZW50cywg
KGVsZW1lbnQgLSBlbGVtZW50cykgKiBzaXplb2YoRDNEVkVSVEVYRUxFTUVOVDkpKSA9PSAwICYm
IGVudHJ5LT52ZXJ0ZXhEZWNsYXJhdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgZW50cnkt
PmxydUNvdW50ID0gKyttTWF4THJ1OworICAgICAgICAgICAgaWYoZW50cnktPnZlcnRleERlY2xh
cmF0aW9uICE9IG1MYXN0U2V0VkRlY2wpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ZGV2aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbihlbnRyeS0+dmVydGV4RGVjbGFyYXRpb24pOwor
ICAgICAgICAgICAgICAgIG1MYXN0U2V0VkRlY2wgPSBlbnRyeS0+dmVydGV4RGVjbGFyYXRpb247
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBHTF9OT19FUlJPUjsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIFZlcnRleERlY2xDYWNoZUVudHJ5ICpsYXN0Q2FjaGUgPSBtVmVy
dGV4RGVjbENhY2hlOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xf
Q0FDSEVfRU5UUklFUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1WZXJ0ZXhEZWNsQ2FjaGVb
aV0ubHJ1Q291bnQgPCBsYXN0Q2FjaGUtPmxydUNvdW50KQorICAgICAgICB7CisgICAgICAgICAg
ICBsYXN0Q2FjaGUgPSAmbVZlcnRleERlY2xDYWNoZVtpXTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmIChsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uICE9IE5VTEwpCisgICAgeworICAg
ICAgICBsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uLT5SZWxlYXNlKCk7CisgICAgICAgIGxh
c3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24gPSBOVUxMOworICAgICAgICAvLyBtTGFzdFNldFZE
ZWNsIGlzIHNldCB0byB0aGUgcmVwbGFjZW1lbnQsIHNvIHdlIGRvbid0IGhhdmUgdG8gd29ycnkK
KyAgICAgICAgLy8gYWJvdXQgaXQuCisgICAgfQorCisgICAgbWVtY3B5KGxhc3RDYWNoZS0+Y2Fj
aGVkRWxlbWVudHMsIGVsZW1lbnRzLCAoZWxlbWVudCAtIGVsZW1lbnRzKSAqIHNpemVvZihEM0RW
RVJURVhFTEVNRU5UOSkpOworICAgIGRldmljZS0+Q3JlYXRlVmVydGV4RGVjbGFyYXRpb24oZWxl
bWVudHMsICZsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uKTsKKyAgICBkZXZpY2UtPlNldFZl
cnRleERlY2xhcmF0aW9uKGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24pOworICAgIG1MYXN0
U2V0VkRlY2wgPSBsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uOworICAgIGxhc3RDYWNoZS0+
bHJ1Q291bnQgPSArK21NYXhMcnU7CisKKyAgICByZXR1cm4gR0xfTk9fRVJST1I7Cit9CisKK3Zv
aWQgVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6bWFya1N0YXRlRGlydHkoKQoreworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgIHsKKyAgICAg
ICAgbUFwcGxpZWRWQnNbaV0uc2VyaWFsID0gMDsKKyAgICB9CisKKyAgICBtTGFzdFNldFZEZWNs
ID0gTlVMTDsKKyAgICBtSW5zdGFuY2luZ0VuYWJsZWQgPSB0cnVlOyAgIC8vIEZvcmNlcyBpdCB0
byBiZSBkaXNhYmxlZCB3aGVuIG5vdCB1c2VkCit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhEZWNsYXJh
dGlvbkNhY2hlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvVmVydGV4RGVjbGFyYXRpb25DYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNmYzAyNGE5YmFi
NDhiMTljMDZhYjk3NTcwZThiNWQ1NDg3MTMxODcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4RGVjbGFy
YXRpb25DYWNoZS5oCkBAIC0wLDAgKzEsNTggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBWZXJ0ZXhE
ZWNsYXJhdGlvbkNhY2hlLmg6IERlZmluZXMgYSBoZWxwZXIgY2xhc3MgdG8gY29uc3RydWN0IGFu
ZCBjYWNoZSB2ZXJ0ZXggZGVjbGFyYXRpb25zLgorCisjaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJF
Ul9WRVJURVhERUNMQVJBVElPTkNBQ0hFX0hfCisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9W
RVJURVhERUNMQVJBVElPTkNBQ0hFX0hfCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
VmVydGV4RGF0YU1hbmFnZXIuaCIKKworbmFtZXNwYWNlIGdsCit7CitjbGFzcyBWZXJ0ZXhEYXRh
TWFuYWdlcjsKK30KKworbmFtZXNwYWNlIHJ4Cit7CisKK2NsYXNzIFZlcnRleERlY2xhcmF0aW9u
Q2FjaGUKK3sKKyAgcHVibGljOgorICAgIFZlcnRleERlY2xhcmF0aW9uQ2FjaGUoKTsKKyAgICB+
VmVydGV4RGVjbGFyYXRpb25DYWNoZSgpOworCisgICAgR0xlbnVtIGFwcGx5RGVjbGFyYXRpb24o
SURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBUcmFuc2xhdGVkQXR0cmlidXRlIGF0dHJpYnV0ZXNb
XSwgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIEdMc2l6ZWkgaW5zdGFuY2VzLCBH
THNpemVpICpyZXBlYXREcmF3KTsKKworICAgIHZvaWQgbWFya1N0YXRlRGlydHkoKTsKKworICBw
cml2YXRlOgorICAgIFVJTlQgbU1heExydTsKKworICAgIGVudW0geyBOVU1fVkVSVEVYX0RFQ0xf
Q0FDSEVfRU5UUklFUyA9IDMyIH07CisKKyAgICBzdHJ1Y3QgVkJEYXRhCisgICAgeworICAgICAg
ICB1bnNpZ25lZCBpbnQgc2VyaWFsOworICAgICAgICB1bnNpZ25lZCBpbnQgc3RyaWRlOworICAg
ICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0OworICAgIH07CisKKyAgICBWQkRhdGEgbUFwcGxpZWRW
QnNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107CisgICAgSURpcmVjdDNEVmVydGV4RGVjbGFyYXRp
b245ICptTGFzdFNldFZEZWNsOworICAgIGJvb2wgbUluc3RhbmNpbmdFbmFibGVkOworCisgICAg
c3RydWN0IFZlcnRleERlY2xDYWNoZUVudHJ5CisgICAgeworICAgICAgICBEM0RWRVJURVhFTEVN
RU5UOSBjYWNoZWRFbGVtZW50c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTICsgMV07CisgICAgICAg
IFVJTlQgbHJ1Q291bnQ7CisgICAgICAgIElEaXJlY3QzRFZlcnRleERlY2xhcmF0aW9uOSAqdmVy
dGV4RGVjbGFyYXRpb247CisgICAgfSBtVmVydGV4RGVjbENhY2hlW05VTV9WRVJURVhfREVDTF9D
QUNIRV9FTlRSSUVTXTsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9W
RVJURVhERUNMQVJBVElPTkNBQ0hFX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmNwcCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5kZXJl
cjlfdXRpbHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI3ZjJmZmIxZDlhM2NjM2ZkYWNkZjQzN2MzNWJlNGQ1
OGM3YTgyMTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmNwcApAQCAtMCwwICsxLDUw
MCBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBy
ZW5kZXJlcjlfdXRpbHMuY3BwOiBDb252ZXJzaW9uIGZ1bmN0aW9ucyBhbmQgb3RoZXIgdXRpbGl0
eSByb3V0aW5lcworLy8gc3BlY2lmaWMgdG8gdGhlIEQzRDkgcmVuZGVyZXIuCisKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5kZXJlcjlfdXRpbHMuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorCisj
aW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKK25hbWVzcGFjZSBnbF9kM2Q5Cit7CisKK0QzRENN
UEZVTkMgQ29udmVydENvbXBhcmlzb24oR0xlbnVtIGNvbXBhcmlzb24pCit7CisgICAgRDNEQ01Q
RlVOQyBkM2RDb21wID0gRDNEQ01QX0FMV0FZUzsKKyAgICBzd2l0Y2ggKGNvbXBhcmlzb24pCisg
ICAgeworICAgICAgY2FzZSBHTF9ORVZFUjogICAgZDNkQ29tcCA9IEQzRENNUF9ORVZFUjsgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9BTFdBWVM6ICAgZDNkQ29tcCA9IEQzRENNUF9BTFdB
WVM7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MRVNTOiAgICAgZDNkQ29tcCA9IEQzRENN
UF9MRVNTOyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MRVFVQUw6ICAgZDNkQ29tcCA9
IEQzRENNUF9MRVNTRVFVQUw7ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9FUVVBTDogICAgZDNk
Q29tcCA9IEQzRENNUF9FUVVBTDsgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9HUkVBVEVS
OiAgZDNkQ29tcCA9IEQzRENNUF9HUkVBVEVSOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9H
RVFVQUw6ICAgZDNkQ29tcCA9IEQzRENNUF9HUkVBVEVSRVFVQUw7IGJyZWFrOworICAgICAgY2Fz
ZSBHTF9OT1RFUVVBTDogZDNkQ29tcCA9IEQzRENNUF9OT1RFUVVBTDsgICAgIGJyZWFrOworICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZDNkQ29tcDsK
K30KKworRDNEQ09MT1IgQ29udmVydENvbG9yKGdsOjpDb2xvciBjb2xvcikKK3sKKyAgICByZXR1
cm4gRDNEQ09MT1JfUkdCQShnbDo6dW5vcm08OD4oY29sb3IucmVkKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBnbDo6dW5vcm08OD4oY29sb3IuZ3JlZW4pLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsOjp1bm9ybTw4Pihjb2xvci5ibHVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBnbDo6dW5vcm08OD4oY29sb3IuYWxwaGEpKTsKK30KKworRDNEQkxFTkQgQ29udmVydEJsZW5k
RnVuYyhHTGVudW0gYmxlbmQpCit7CisgICAgRDNEQkxFTkQgZDNkQmxlbmQgPSBEM0RCTEVORF9a
RVJPOworCisgICAgc3dpdGNoIChibGVuZCkKKyAgICB7CisgICAgICBjYXNlIEdMX1pFUk86ICAg
ICAgICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9aRVJPOyAgICAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX09ORTogICAgICAgICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBE
M0RCTEVORF9PTkU7ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NSQ19DT0xPUjog
ICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9TUkNDT0xPUjsgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQ09MT1I6ICAgICAgZDNkQmxlbmQgPSBEM0RC
TEVORF9JTlZTUkNDT0xPUjsgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0RTVF9DT0xPUjogICAg
ICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9ERVNUQ09MT1I7ICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQ09MT1I6ICAgICAgZDNkQmxlbmQgPSBEM0RCTEVO
RF9JTlZERVNUQ09MT1I7ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NSQ19BTFBIQTogICAgICAg
ICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9TUkNBTFBIQTsgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQUxQSEE6ICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9J
TlZTUkNBTFBIQTsgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0RTVF9BTFBIQTogICAgICAgICAg
ICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9ERVNUQUxQSEE7ICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX09ORV9NSU5VU19EU1RfQUxQSEE6ICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZE
RVNUQUxQSEE7ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0NPTlNUQU5UX0NPTE9SOiAgICAgICAg
ICAgZDNkQmxlbmQgPSBEM0RCTEVORF9CTEVOREZBQ1RPUjsgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUjogZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZCTEVO
REZBQ1RPUjsgYnJlYWs7CisgICAgICBjYXNlIEdMX0NPTlNUQU5UX0FMUEhBOiAgICAgICAgICAg
ZDNkQmxlbmQgPSBEM0RCTEVORF9CTEVOREZBQ1RPUjsgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X09ORV9NSU5VU19DT05TVEFOVF9BTFBIQTogZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZCTEVOREZB
Q1RPUjsgYnJlYWs7CisgICAgICBjYXNlIEdMX1NSQ19BTFBIQV9TQVRVUkFURTogICAgICAgZDNk
QmxlbmQgPSBEM0RCTEVORF9TUkNBTFBIQVNBVDsgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBkM2RCbGVuZDsKK30KKworRDNEQkxF
TkRPUCBDb252ZXJ0QmxlbmRPcChHTGVudW0gYmxlbmRPcCkKK3sKKyAgICBEM0RCTEVORE9QIGQz
ZEJsZW5kT3AgPSBEM0RCTEVORE9QX0FERDsKKworICAgIHN3aXRjaCAoYmxlbmRPcCkKKyAgICB7
CisgICAgICBjYXNlIEdMX0ZVTkNfQUREOiAgICAgICAgICAgICAgZDNkQmxlbmRPcCA9IEQzREJM
RU5ET1BfQUREOyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GVU5DX1NVQlRSQUNUOiAg
ICAgICAgIGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX1NVQlRSQUNUOyAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUOiBkM2RCbGVuZE9wID0gRDNEQkxFTkRPUF9S
RVZTVUJUUkFDVDsgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0K
KworICAgIHJldHVybiBkM2RCbGVuZE9wOworfQorCitEM0RTVEVOQ0lMT1AgQ29udmVydFN0ZW5j
aWxPcChHTGVudW0gc3RlbmNpbE9wKQoreworICAgIEQzRFNURU5DSUxPUCBkM2RTdGVuY2lsT3Ag
PSBEM0RTVEVOQ0lMT1BfS0VFUDsKKworICAgIHN3aXRjaCAoc3RlbmNpbE9wKQorICAgIHsKKyAg
ICAgIGNhc2UgR0xfWkVSTzogICAgICBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfWkVSTzsg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0tFRVA6ICAgICAgZDNkU3RlbmNpbE9wID0gRDNEU1RF
TkNJTE9QX0tFRVA7ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9SRVBMQUNFOiAgIGQzZFN0ZW5j
aWxPcCA9IEQzRFNURU5DSUxPUF9SRVBMQUNFOyBicmVhazsKKyAgICAgIGNhc2UgR0xfSU5DUjog
ICAgICBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfSU5DUlNBVDsgYnJlYWs7CisgICAgICBj
YXNlIEdMX0RFQ1I6ICAgICAgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0RFQ1JTQVQ7IGJy
ZWFrOworICAgICAgY2FzZSBHTF9JTlZFUlQ6ICAgIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxP
UF9JTlZFUlQ7ICBicmVhazsKKyAgICAgIGNhc2UgR0xfSU5DUl9XUkFQOiBkM2RTdGVuY2lsT3Ag
PSBEM0RTVEVOQ0lMT1BfSU5DUjsgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0RFQ1JfV1JBUDog
ZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0RFQ1I7ICAgIGJyZWFrOworICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZDNkU3RlbmNpbE9wOworfQor
CitEM0RURVhUVVJFQUREUkVTUyBDb252ZXJ0VGV4dHVyZVdyYXAoR0xlbnVtIHdyYXApCit7Cisg
ICAgRDNEVEVYVFVSRUFERFJFU1MgZDNkV3JhcCA9IEQzRFRBRERSRVNTX1dSQVA7CisKKyAgICBz
d2l0Y2ggKHdyYXApCisgICAgeworICAgICAgY2FzZSBHTF9SRVBFQVQ6ICAgICAgICAgICAgZDNk
V3JhcCA9IEQzRFRBRERSRVNTX1dSQVA7ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0NMQU1QX1RP
X0VER0U6ICAgICBkM2RXcmFwID0gRDNEVEFERFJFU1NfQ0xBTVA7ICBicmVhazsKKyAgICAgIGNh
c2UgR0xfTUlSUk9SRURfUkVQRUFUOiAgIGQzZFdyYXAgPSBEM0RUQUREUkVTU19NSVJST1I7IGJy
ZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
ZDNkV3JhcDsKK30KKworRDNEQ1VMTCBDb252ZXJ0Q3VsbE1vZGUoR0xlbnVtIGN1bGxGYWNlLCBH
TGVudW0gZnJvbnRGYWNlKQoreworICAgIEQzRENVTEwgY3VsbCA9IEQzRENVTExfQ0NXOworICAg
IHN3aXRjaCAoY3VsbEZhY2UpCisgICAgeworICAgICAgY2FzZSBHTF9GUk9OVDoKKyAgICAgICAg
Y3VsbCA9IChmcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEQ1VMTF9DVyA6IEQzRENVTExfQ0NXKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JBQ0s6CisgICAgICAgIGN1bGwgPSAoZnJv
bnRGYWNlID09IEdMX0NDVyA/IEQzRENVTExfQ0NXIDogRDNEQ1VMTF9DVyk7CisgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9GUk9OVF9BTkRfQkFDSzoKKyAgICAgICAgY3VsbCA9IEQzRENV
TExfTk9ORTsgLy8gY3VsbGluZyB3aWxsIGJlIGhhbmRsZWQgZHVyaW5nIGRyYXcKKyAgICAgICAg
YnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVy
biBjdWxsOworfQorCitEM0RDVUJFTUFQX0ZBQ0VTIENvbnZlcnRDdWJlRmFjZShHTGVudW0gY3Vi
ZUZhY2UpCit7CisgICAgRDNEQ1VCRU1BUF9GQUNFUyBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX1BP
U0lUSVZFX1g7CisKKyAgICBzd2l0Y2ggKGN1YmVGYWNlKQorICAgIHsKKyAgICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgICAgICBmYWNlID0gRDNEQ1VCRU1BUF9G
QUNFX1BPU0lUSVZFX1g7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1g6CisgICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfTkVHQVRJ
VkVfWDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWToKKyAgICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9QT1NJVElWRV9ZOworICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgor
ICAgICAgICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX05FR0FUSVZFX1k7CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgICAgIGZh
Y2UgPSBEM0RDVUJFTUFQX0ZBQ0VfUE9TSVRJVkVfWjsKKyAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAgICAgICAgZmFjZSA9IEQzRENV
QkVNQVBfRkFDRV9ORUdBVElWRV9aOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIGZhY2U7Cit9CisKK0RXT1JEIENvbnZl
cnRDb2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSkK
K3sKKyAgICByZXR1cm4gKHJlZCAgID8gRDNEQ09MT1JXUklURUVOQUJMRV9SRUQgICA6IDApIHwK
KyAgICAgICAgICAgKGdyZWVuID8gRDNEQ09MT1JXUklURUVOQUJMRV9HUkVFTiA6IDApIHwKKyAg
ICAgICAgICAgKGJsdWUgID8gRDNEQ09MT1JXUklURUVOQUJMRV9CTFVFICA6IDApIHwKKyAgICAg
ICAgICAgKGFscGhhID8gRDNEQ09MT1JXUklURUVOQUJMRV9BTFBIQSA6IDApOworfQorCitEM0RU
RVhUVVJFRklMVEVSVFlQRSBDb252ZXJ0TWFnRmlsdGVyKEdMZW51bSBtYWdGaWx0ZXIsIGZsb2F0
IG1heEFuaXNvdHJvcHkpCit7CisgICAgaWYgKG1heEFuaXNvdHJvcHkgPiAxLjBmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEQzRFRFWEZfQU5JU09UUk9QSUM7CisgICAgfQorCisgICAgRDNEVEVY
VFVSRUZJTFRFUlRZUEUgZDNkTWFnRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKKyAgICBzd2l0Y2gg
KG1hZ0ZpbHRlcikKKyAgICB7CisgICAgICBjYXNlIEdMX05FQVJFU1Q6IGQzZE1hZ0ZpbHRlciA9
IEQzRFRFWEZfUE9JTlQ7ICBicmVhazsKKyAgICAgIGNhc2UgR0xfTElORUFSOiAgZDNkTWFnRmls
dGVyID0gRDNEVEVYRl9MSU5FQVI7IGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICB9CisKKyAgICByZXR1cm4gZDNkTWFnRmlsdGVyOworfQorCit2b2lkIENvbnZlcnRN
aW5GaWx0ZXIoR0xlbnVtIG1pbkZpbHRlciwgRDNEVEVYVFVSRUZJTFRFUlRZUEUgKmQzZE1pbkZp
bHRlciwgRDNEVEVYVFVSRUZJTFRFUlRZUEUgKmQzZE1pcEZpbHRlciwgZmxvYXQgbWF4QW5pc290
cm9weSkKK3sKKyAgICBzd2l0Y2ggKG1pbkZpbHRlcikKKyAgICB7CisgICAgICBjYXNlIEdMX05F
QVJFU1Q6CisgICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX1BPSU5UOworICAgICAgICAq
ZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9OT05FOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfTElORUFSOgorICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9MSU5FQVI7CisgICAg
ICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX05PTkU7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOgorICAgICAgICAqZDNkTWluRmlsdGVyID0g
RDNEVEVYRl9QT0lOVDsKKyAgICAgICAgKmQzZE1pcEZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1Q6CisgICAg
ICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX0xJTkVBUjsKKyAgICAgICAgKmQzZE1pcEZpbHRl
ciA9IEQzRFRFWEZfUE9JTlQ7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9ORUFSRVNU
X01JUE1BUF9MSU5FQVI6CisgICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX1BPSU5UOwor
ICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9MSU5FQVI7CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUjoKKyAgICAgICAgKmQzZE1pbkZpbHRl
ciA9IEQzRFRFWEZfTElORUFSOworICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9MSU5F
QVI7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgKmQzZE1pbkZpbHRl
ciA9IEQzRFRFWEZfUE9JTlQ7CisgICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX05PTkU7
CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgaWYgKG1heEFuaXNvdHJvcHkg
PiAxLjBmKQorICAgIHsKKyAgICAgICAgKmQzZE1pbkZpbHRlciA9IEQzRFRFWEZfQU5JU09UUk9Q
SUM7CisgICAgfQorfQorCitEM0RGT1JNQVQgQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChHTGVu
dW0gZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgR0xf
Tk9ORTogICAgICAgICAgICAgICAgIHJldHVybiBEM0RGTVRfTlVMTDsKKyAgICAgIGNhc2UgR0xf
UkdCQTQ6CisgICAgICBjYXNlIEdMX1JHQjVfQTE6CisgICAgICBjYXNlIEdMX1JHQkE4X09FUzog
ICAgICAgICAgICByZXR1cm4gRDNERk1UX0E4UjhHOEI4OworICAgICAgY2FzZSBHTF9SR0I1NjU6
ICAgICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9SNUc2QjU7CisgICAgICBjYXNlIEdMX1JHQjhf
T0VTOiAgICAgICAgICAgICByZXR1cm4gRDNERk1UX1g4UjhHOEI4OworICAgICAgY2FzZSBHTF9E
RVBUSF9DT01QT05FTlQxNjoKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRFWDg6ICAgICAgIAor
ICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzogcmV0dXJuIEQzREZNVF9EMjRTODsK
KyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgIHJldHVybiBEM0RGTVRfQThSOEc4
Qjg7CisgICAgfQorfQorCitEM0RNVUxUSVNBTVBMRV9UWVBFIEdldE11bHRpc2FtcGxlVHlwZUZy
b21TYW1wbGVzKEdMc2l6ZWkgc2FtcGxlcykKK3sKKyAgICBpZiAoc2FtcGxlcyA8PSAxKQorICAg
ICAgICByZXR1cm4gRDNETVVMVElTQU1QTEVfTk9ORTsKKyAgICBlbHNlCisgICAgICAgIHJldHVy
biAoRDNETVVMVElTQU1QTEVfVFlQRSlzYW1wbGVzOworfQorCit9CisKK25hbWVzcGFjZSBkM2Q5
X2dsCit7CisKK3Vuc2lnbmVkIGludCBHZXRTdGVuY2lsU2l6ZShEM0RGT1JNQVQgc3RlbmNpbEZv
cm1hdCkKK3sKKyAgICBpZiAoc3RlbmNpbEZvcm1hdCA9PSBEM0RGTVRfSU5UWikKKyAgICB7Cisg
ICAgICAgIHJldHVybiA4OworICAgIH0KKyAgICBzd2l0Y2goc3RlbmNpbEZvcm1hdCkKKyAgICB7
CisgICAgICBjYXNlIEQzREZNVF9EMjRGUzg6CisgICAgICBjYXNlIEQzREZNVF9EMjRTODoKKyAg
ICAgICAgcmV0dXJuIDg7CisgICAgICBjYXNlIEQzREZNVF9EMjRYNFM0OgorICAgICAgICByZXR1
cm4gNDsKKyAgICAgIGNhc2UgRDNERk1UX0QxNVMxOgorICAgICAgICByZXR1cm4gMTsKKyAgICAg
IGNhc2UgRDNERk1UX0QxNl9MT0NLQUJMRToKKyAgICAgIGNhc2UgRDNERk1UX0QzMjoKKyAgICAg
IGNhc2UgRDNERk1UX0QyNFg4OgorICAgICAgY2FzZSBEM0RGTVRfRDMyRl9MT0NLQUJMRToKKyAg
ICAgIGNhc2UgRDNERk1UX0QxNjoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgLy9jYXNlIEQzREZN
VF9EMzJfTE9DS0FCTEU6ICByZXR1cm4gMDsgICAvLyBEaXJlY3RYIDlFeCBvbmx5CisgICAgLy9j
YXNlIEQzREZNVF9TOF9MT0NLQUJMRTogICByZXR1cm4gODsgICAvLyBEaXJlY3RYIDlFeCBvbmx5
CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3Vuc2lnbmVk
IGludCBHZXRBbHBoYVNpemUoRDNERk9STUFUIGNvbG9yRm9ybWF0KQoreworICAgIHN3aXRjaCAo
Y29sb3JGb3JtYXQpCisgICAgeworICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKKyAg
ICAgICAgcmV0dXJuIDE2OworICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKKyAgICAg
ICAgcmV0dXJuIDMyOworICAgICAgY2FzZSBEM0RGTVRfQTJSMTBHMTBCMTA6CisgICAgICAgIHJl
dHVybiAyOworICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6CisgICAgICAgIHJldHVybiA4Owor
ICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6CisgICAgICAgIHJldHVybiAxOworICAgICAgY2Fz
ZSBEM0RGTVRfWDhSOEc4Qjg6CisgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6CisgICAgICAgIHJl
dHVybiAwOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitH
THNpemVpIEdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKEQzRE1VTFRJU0FNUExFX1RZUEUg
dHlwZSkKK3sKKyAgICBpZiAodHlwZSA9PSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gdHlwZTsKK30KKworYm9v
bCBJc0Zvcm1hdENoYW5uZWxFcXVpdmFsZW50KEQzREZPUk1BVCBkM2Rmb3JtYXQsIEdMZW51bSBm
b3JtYXQpCit7CisgICAgc3dpdGNoIChkM2Rmb3JtYXQpCisgICAgeworICAgICAgY2FzZSBEM0RG
TVRfTDg6CisgICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX0xVTUlOQU5DRSk7CisgICAgICBj
YXNlIEQzREZNVF9BOEw4OgorICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9MVU1JTkFOQ0Vf
QUxQSEEpOworICAgICAgY2FzZSBEM0RGTVRfRFhUMToKKyAgICAgICAgcmV0dXJuIChmb3JtYXQg
PT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQgfHwgZm9ybWF0ID09IEdMX0NPTVBS
RVNTRURfUkdCX1MzVENfRFhUMV9FWFQpOworICAgICAgY2FzZSBEM0RGTVRfRFhUMzoKKyAgICAg
ICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRSk7
CisgICAgICBjYXNlIEQzREZNVF9EWFQ1OgorICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9D
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFKTsKKyAgICAgIGNhc2UgRDNERk1UX0E4UjhH
OEI4OgorICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKKyAgICAgIGNhc2UgRDNERk1U
X0EzMkIzMkczMlIzMkY6CisgICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX1JHQkEgfHwgZm9y
bWF0ID09IEdMX0JHUkFfRVhUKTsKKyAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgorICAgICAg
ICByZXR1cm4gKGZvcm1hdCA9PSBHTF9SR0IpOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgaWYg
KGQzZGZvcm1hdCA9PSBEM0RGTVRfSU5UWiAmJiBnbDo6SXNEZXB0aFRleHR1cmUoZm9ybWF0KSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
fQorCitHTGVudW0gQ29udmVydEJhY2tCdWZmZXJGb3JtYXQoRDNERk9STUFUIGZvcm1hdCkKK3sK
KyAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEQzREZNVF9BNFI0RzRCNDog
cmV0dXJuIEdMX1JHQkE0OworICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6IHJldHVybiBHTF9S
R0JBOF9PRVM7CisgICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNTogcmV0dXJuIEdMX1JHQjVfQTE7
CisgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6ICAgcmV0dXJuIEdMX1JHQjU2NTsKKyAgICAgIGNh
c2UgRDNERk1UX1g4UjhHOEI4OiByZXR1cm4gR0xfUkdCOF9PRVM7CisgICAgICBkZWZhdWx0Ogor
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBHTF9SR0JBNDsKK30K
KworR0xlbnVtIENvbnZlcnREZXB0aFN0ZW5jaWxGb3JtYXQoRDNERk9STUFUIGZvcm1hdCkKK3sK
KyAgICBpZiAoZm9ybWF0ID09IEQzREZNVF9JTlRaKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdM
X0RFUFRIMjRfU1RFTkNJTDhfT0VTOworICAgIH0KKyAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICB7
CisgICAgICBjYXNlIEQzREZNVF9EMTY6CisgICAgICBjYXNlIEQzREZNVF9EMjRYODoKKyAgICAg
ICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2OworICAgICAgY2FzZSBEM0RGTVRfRDI0Uzg6
CisgICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKKyAgICAgIGNhc2UgRDNE
Rk1UX1VOS05PV046CisgICAgICAgIHJldHVybiBHTF9OT05FOworICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVO
Q0lMOF9PRVM7Cit9CisKK0dMZW51bSBDb252ZXJ0UmVuZGVyVGFyZ2V0Rm9ybWF0KEQzREZPUk1B
VCBmb3JtYXQpCit7CisgICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfSU5UWikKKyAgICB7CisgICAg
ICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKKyAgICB9CisgICAgCisgICAgc3dp
dGNoIChmb3JtYXQpCisgICAgeworICAgICAgY2FzZSBEM0RGTVRfQTRSNEc0QjQ6IHJldHVybiBH
TF9SR0JBNDsKKyAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OiByZXR1cm4gR0xfUkdCQThfT0VT
OworICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6IHJldHVybiBHTF9SR0I1X0ExOworICAgICAg
Y2FzZSBEM0RGTVRfUjVHNkI1OiAgIHJldHVybiBHTF9SR0I1NjU7CisgICAgICBjYXNlIEQzREZN
VF9YOFI4RzhCODogcmV0dXJuIEdMX1JHQjhfT0VTOworICAgICAgY2FzZSBEM0RGTVRfRDE2Ogor
ICAgICAgY2FzZSBEM0RGTVRfRDI0WDg6CisgICAgICAgIHJldHVybiBHTF9ERVBUSF9DT01QT05F
TlQxNjsKKyAgICAgIGNhc2UgRDNERk1UX0QyNFM4OgorICAgICAgICByZXR1cm4gR0xfREVQVEgy
NF9TVEVOQ0lMOF9PRVM7CisgICAgICBjYXNlIEQzREZNVF9VTktOT1dOOgorICAgICAgICByZXR1
cm4gR0xfTk9ORTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAg
fQorCisgICAgcmV0dXJuIEdMX1JHQkE0OworfQorCitHTGVudW0gR2V0RXF1aXZhbGVudEZvcm1h
dChEM0RGT1JNQVQgZm9ybWF0KQoreworICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lOVFopCisg
ICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKKyAgICBpZiAoZm9ybWF0ID09
IEQzREZNVF9OVUxMKQorICAgICAgICByZXR1cm4gR0xfTk9ORTsKKworICAgIHN3aXRjaCAoZm9y
bWF0KQorICAgIHsKKyAgICAgIGNhc2UgRDNERk1UX0E0UjRHNEI0OiAgICAgICAgICAgICByZXR1
cm4gR0xfUkdCQTQ7CisgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODogICAgICAgICAgICAgcmV0
dXJuIEdMX1JHQkE4X09FUzsKKyAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OiAgICAgICAgICAg
ICByZXR1cm4gR0xfUkdCNV9BMTsKKyAgICAgIGNhc2UgRDNERk1UX1I1RzZCNTogICAgICAgICAg
ICAgICByZXR1cm4gR0xfUkdCNTY1OworICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6ICAgICAg
ICAgICAgIHJldHVybiBHTF9SR0I4X09FUzsKKyAgICAgIGNhc2UgRDNERk1UX0QxNjogICAgICAg
ICAgICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UMTY7CisgICAgICBjYXNlIEQzREZN
VF9EMjRTODogICAgICAgICAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwor
ICAgICAgY2FzZSBEM0RGTVRfVU5LTk9XTjogICAgICAgICAgICAgIHJldHVybiBHTF9OT05FOwor
ICAgICAgY2FzZSBEM0RGTVRfRFhUMTogICAgICAgICAgICAgICAgIHJldHVybiBHTF9DT01QUkVT
U0VEX1JHQkFfUzNUQ19EWFQxX0VYVDsKKyAgICAgIGNhc2UgRDNERk1UX0RYVDM6ICAgICAgICAg
ICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRTsKKyAgICAg
IGNhc2UgRDNERk1UX0RYVDU6ICAgICAgICAgICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NFRF9S
R0JBX1MzVENfRFhUNV9BTkdMRTsKKyAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6ICAg
ICAgICByZXR1cm4gR0xfUkdCQTMyRl9FWFQ7CisgICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZS
MTZGOiAgICAgICAgcmV0dXJuIEdMX1JHQkExNkZfRVhUOworICAgICAgY2FzZSBEM0RGTVRfTDg6
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9MVU1JTkFOQ0U4X0VYVDsKKyAgICAgIGNhc2Ug
RDNERk1UX0E4TDg6ICAgICAgICAgICAgICAgICByZXR1cm4gR0xfTFVNSU5BTkNFOF9BTFBIQThf
RVhUOworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
IHJldHVybiBHTF9OT05FOworICAgIH0KK30KKworfQorCituYW1lc3BhY2UgZDNkOQoreworCiti
b29sIElzQ29tcHJlc3NlZEZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCkKK3sKKyAgICBz
d2l0Y2goc3VyZmFjZUZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEQzREZNVF9EWFQxOgorICAg
ICAgY2FzZSBEM0RGTVRfRFhUMjoKKyAgICAgIGNhc2UgRDNERk1UX0RYVDM6CisgICAgICBjYXNl
IEQzREZNVF9EWFQ0OgorICAgICAgY2FzZSBEM0RGTVRfRFhUNToKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitz
aXplX3QgQ29tcHV0ZVJvd1NpemUoRDNERk9STUFUIGZvcm1hdCwgdW5zaWduZWQgaW50IHdpZHRo
KQoreworICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lOVFopCisgICAgeworICAgICAgICByZXR1
cm4gNCAqIHdpZHRoOworICAgIH0KKyAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICB7CisgICAgICBj
YXNlIEQzREZNVF9MODoKKyAgICAgICAgICByZXR1cm4gMSAqIHdpZHRoOworICAgICAgY2FzZSBE
M0RGTVRfQThMODoKKyAgICAgICAgICByZXR1cm4gMiAqIHdpZHRoOworICAgICAgY2FzZSBEM0RG
TVRfWDhSOEc4Qjg6CisgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKKyAgICAgICAgcmV0dXJu
IDQgKiB3aWR0aDsKKyAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6CisgICAgICAgIHJl
dHVybiA4ICogd2lkdGg7CisgICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgorICAgICAg
ICByZXR1cm4gMTYgKiB3aWR0aDsKKyAgICAgIGNhc2UgRDNERk1UX0RYVDE6CisgICAgICAgIHJl
dHVybiA4ICogKCh3aWR0aCArIDMpIC8gNCk7CisgICAgICBjYXNlIEQzREZNVF9EWFQzOgorICAg
ICAgY2FzZSBEM0RGTVRfRFhUNToKKyAgICAgICAgcmV0dXJuIDE2ICogKCh3aWR0aCArIDMpIC8g
NCk7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5kZXJlcjlfdXRpbHMuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5kZXJlcjlfdXRp
bHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iZjZjZGYxZWE2NTY2ZjkxMGE5NmVlMjUxMTRiN2M0OGVjODM5NDVl
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5oCkBAIC0wLDAgKzEsNzQgQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKy8vIHJlbmRlcmVyOV91dGlscy5oOiBDb252ZXJzaW9uIGZ1bmN0aW9u
cyBhbmQgb3RoZXIgdXRpbGl0eSByb3V0aW5lcyAKKy8vIHNwZWNpZmljIHRvIHRoZSBEM0Q5IHJl
bmRlcmVyCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUkVSOV9VVElMU19ICisj
ZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjlfVVRJTFNfSAorCisjaW5jbHVkZSAi
bGliR0xFU3YyL3V0aWxpdGllcy5oIgorCitjb25zdCBEM0RGT1JNQVQgRDNERk1UX0lOVFogPSAo
KEQzREZPUk1BVCkoTUFLRUZPVVJDQygnSScsJ04nLCdUJywnWicpKSk7Citjb25zdCBEM0RGT1JN
QVQgRDNERk1UX05VTEwgPSAoKEQzREZPUk1BVCkoTUFLRUZPVVJDQygnTicsJ1UnLCdMJywnTCcp
KSk7CisKK25hbWVzcGFjZSBnbF9kM2Q5Cit7CisKK0QzRENNUEZVTkMgQ29udmVydENvbXBhcmlz
b24oR0xlbnVtIGNvbXBhcmlzb24pOworRDNEQ09MT1IgQ29udmVydENvbG9yKGdsOjpDb2xvciBj
b2xvcik7CitEM0RCTEVORCBDb252ZXJ0QmxlbmRGdW5jKEdMZW51bSBibGVuZCk7CitEM0RCTEVO
RE9QIENvbnZlcnRCbGVuZE9wKEdMZW51bSBibGVuZE9wKTsKK0QzRFNURU5DSUxPUCBDb252ZXJ0
U3RlbmNpbE9wKEdMZW51bSBzdGVuY2lsT3ApOworRDNEVEVYVFVSRUFERFJFU1MgQ29udmVydFRl
eHR1cmVXcmFwKEdMZW51bSB3cmFwKTsKK0QzRENVTEwgQ29udmVydEN1bGxNb2RlKEdMZW51bSBj
dWxsRmFjZSwgR0xlbnVtIGZyb250RmFjZSk7CitEM0RDVUJFTUFQX0ZBQ0VTIENvbnZlcnRDdWJl
RmFjZShHTGVudW0gY3ViZUZhY2UpOworRFdPUkQgQ29udmVydENvbG9yTWFzayhib29sIHJlZCwg
Ym9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKTsKK0QzRFRFWFRVUkVGSUxURVJUWVBF
IENvbnZlcnRNYWdGaWx0ZXIoR0xlbnVtIG1hZ0ZpbHRlciwgZmxvYXQgbWF4QW5pc290cm9weSk7
Cit2b2lkIENvbnZlcnRNaW5GaWx0ZXIoR0xlbnVtIG1pbkZpbHRlciwgRDNEVEVYVFVSRUZJTFRF
UlRZUEUgKmQzZE1pbkZpbHRlciwgRDNEVEVYVFVSRUZJTFRFUlRZUEUgKmQzZE1pcEZpbHRlciwg
ZmxvYXQgbWF4QW5pc290cm9weSk7CitEM0RGT1JNQVQgQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1h
dChHTGVudW0gZm9ybWF0KTsKK0QzRE1VTFRJU0FNUExFX1RZUEUgR2V0TXVsdGlzYW1wbGVUeXBl
RnJvbVNhbXBsZXMoR0xzaXplaSBzYW1wbGVzKTsKKworfQorCituYW1lc3BhY2UgZDNkOV9nbAor
eworCitHTHVpbnQgR2V0QWxwaGFTaXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCk7CitHTHVpbnQg
R2V0U3RlbmNpbFNpemUoRDNERk9STUFUIHN0ZW5jaWxGb3JtYXQpOworCitHTHNpemVpIEdldFNh
bXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKEQzRE1VTFRJU0FNUExFX1RZUEUgdHlwZSk7CisKK2Jv
b2wgSXNGb3JtYXRDaGFubmVsRXF1aXZhbGVudChEM0RGT1JNQVQgZDNkZm9ybWF0LCBHTGVudW0g
Zm9ybWF0KTsKK0dMZW51bSBDb252ZXJ0QmFja0J1ZmZlckZvcm1hdChEM0RGT1JNQVQgZm9ybWF0
KTsKK0dMZW51bSBDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpOwor
R0xlbnVtIENvbnZlcnRSZW5kZXJUYXJnZXRGb3JtYXQoRDNERk9STUFUIGZvcm1hdCk7CitHTGVu
dW0gR2V0RXF1aXZhbGVudEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KTsKKworfQorCituYW1lc3Bh
Y2UgZDNkOQoreworYm9vbCBJc0NvbXByZXNzZWRGb3JtYXQoRDNERk9STUFUIGZvcm1hdCk7Citz
aXplX3QgQ29tcHV0ZVJvd1NpemUoRDNERk9STUFUIGZvcm1hdCwgdW5zaWduZWQgaW50IHdpZHRo
KTsKKworaW5saW5lIGJvb2wgaXNEZXZpY2VMb3N0RXJyb3IoSFJFU1VMVCBlcnJvckNvZGUpCit7
CisgICAgc3dpdGNoIChlcnJvckNvZGUpCisgICAgeworICAgICAgY2FzZSBEM0RFUlJfRFJJVkVS
SU5URVJOQUxFUlJPUjoKKyAgICAgIGNhc2UgRDNERVJSX0RFVklDRUxPU1Q6CisgICAgICBjYXNl
IEQzREVSUl9ERVZJQ0VIVU5HOgorICAgICAgY2FzZSBEM0RFUlJfREVWSUNFUkVNT1ZFRDoKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorfQorCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSRVI5
X1VUSUxTX0gKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL0JsaXQucHMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9CbGl0LnBzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmRjYjNiZDBlNzZiYTkyYTI4ZTc3Njg4OGM2MjkwNGMwYzNmMDVmM2MKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
c2hhZGVycy9CbGl0LnBzCkBAIC0wLDAgKzEsMzkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCitzYW1wbGVy
MkQgdGV4IDogczA7CisKK3VuaWZvcm0gZmxvYXQ0IG1vZGUgOiBjMDsKKworLy8gUGFzc3Rocm91
Z2ggUGl4ZWwgU2hhZGVyCisvLyBPdXRwdXRzIHRleHR1cmUgMCBzYW1wbGVkIGF0IHRleGNvb3Jk
IDAuCitmbG9hdDQgcGFzc3Rocm91Z2hwcyhmbG9hdDQgdGV4Y29vcmQgOiBURVhDT09SRDApIDog
Q09MT1IKK3sKKwlyZXR1cm4gdGV4MkQodGV4LCB0ZXhjb29yZC54eSk7Cit9OworCisvLyBMdW1p
bmFuY2UgQ29udmVyc2lvbiBQaXhlbCBTaGFkZXIKKy8vIE91dHB1dHMgc2FtcGxlKHRleDAsIHRj
MCkucnJyYS4KKy8vIEZvciBMQSBvdXRwdXQgKHBhc3MgQSkgc2V0IEMwLlggPSAxLCBDMC5ZID0g
MC4KKy8vIEZvciBMIG91dHB1dCAoQSA9IDEpIHNldCBDMC5YID0gMCwgQzAuWSA9IDEuCitmbG9h
dDQgbHVtaW5hbmNlcHMoZmxvYXQ0IHRleGNvb3JkIDogVEVYQ09PUkQwKSA6IENPTE9SCit7CisJ
ZmxvYXQ0IHRtcCA9IHRleDJEKHRleCwgdGV4Y29vcmQueHkpOworCXRtcC53ID0gdG1wLncgKiBt
b2RlLnggKyBtb2RlLnk7CisJcmV0dXJuIHRtcC54eHh3OworfTsKKworLy8gUkdCL0EgQ29tcG9u
ZW50IE1hc2sgUGl4ZWwgU2hhZGVyCisvLyBPdXRwdXRzIHNhbXBsZSh0ZXgwLCB0YzApIHdpdGgg
b3B0aW9ucyB0byBmb3JjZSBSR0IgPSAwIGFuZC9vciBBID0gMS4KKy8vIFRvIGZvcmNlIFJHQiA9
IDAsIHNldCBDMC5YID0gMCwgb3RoZXJ3aXNlIEMwLlggPSAxLgorLy8gVG8gZm9yY2UgQSA9IDEs
IHNldCBDMC5aID0gMCwgQzAuVyA9IDEsIG90aGVyd2lzZSBDMC5aID0gMSwgQzAuVyA9IDAuCitm
bG9hdDQgY29tcG9uZW50bWFza3BzKGZsb2F0NCB0ZXhjb29yZCA6IFRFWENPT1JEMCkgOiBDT0xP
UgoreworCWZsb2F0NCB0bXAgPSB0ZXgyRCh0ZXgsIHRleGNvb3JkLnh5KTsKKwl0bXAueHl6ID0g
dG1wLnh5eiAqIG1vZGUueDsKKwl0bXAudyA9IHRtcC53ICogbW9kZS56ICsgbW9kZS53OworCXJl
dHVybiB0bXA7Cit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvQmxpdC52cyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL0JsaXQudnMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uM2EzNjk4MGI5MzViNTBmYTlhZTBiNmIwZjRhNTBlMzkzOWQwZDUxMQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9zaGFkZXJzL0JsaXQudnMKQEAgLTAsMCArMSw0MyBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK3N0
cnVjdCBWU19PVVRQVVQKK3sKKyAgICBmbG9hdDQgcG9zaXRpb24gOiBQT1NJVElPTjsKKyAgICBm
bG9hdDQgdGV4Y29vcmQgOiBURVhDT09SRDA7Cit9OworCit1bmlmb3JtIGZsb2F0NCBoYWxmUGl4
ZWxTaXplIDogYzA7CisKKy8vIFN0YW5kYXJkIFZlcnRleCBTaGFkZXIKKy8vIElucHV0IDAgaXMg
dGhlIGhvbW9nZW5vdXMgcG9zaXRpb24uCisvLyBPdXRwdXRzIHRoZSBob21vZ2Vub3VzIHBvc2l0
aW9uIGFzLWlzLgorLy8gT3V0cHV0cyBhIHRleCBjb29yZCB3aXRoICgwLDApIGluIHRoZSB1cHBl
ci1sZWZ0IGNvcm5lciBvZiB0aGUgc2NyZWVuIGFuZCAoMSwxKSBpbiB0aGUgYm90dG9tIHJpZ2h0
LgorLy8gQzAuWCBtdXN0IGJlIG5lZ2F0aXZlIGhhbGYtcGl4ZWwgd2lkdGgsIEMwLlkgbXVzdCBi
ZSBoYWxmLXBpeGVsIGhlaWdodC4gQzAuWlcgbXVzdCBiZSAwLgorVlNfT1VUUFVUIHN0YW5kYXJk
dnMoaW4gZmxvYXQ0IHBvc2l0aW9uIDogUE9TSVRJT04pCit7CisgICAgVlNfT1VUUFVUIE91dDsK
KworICAgIE91dC5wb3NpdGlvbiA9IHBvc2l0aW9uICsgaGFsZlBpeGVsU2l6ZTsKKyAgICBPdXQu
dGV4Y29vcmQgPSBwb3NpdGlvbiAqIGZsb2F0NCgwLjUsIC0wLjUsIDEuMCwgMS4wKSArIGZsb2F0
NCgwLjUsIDAuNSwgMCwgMCk7CisKKyAgICByZXR1cm4gT3V0OworfTsKKworLy8gRmxpcCBZIFZl
cnRleCBTaGFkZXIKKy8vIElucHV0IDAgaXMgdGhlIGhvbW9nZW5vdXMgcG9zaXRpb24uCisvLyBP
dXRwdXRzIHRoZSBob21vZ2Vub3VzIHBvc2l0aW9uIGFzLWlzLgorLy8gT3V0cHV0cyBhIHRleCBj
b29yZCB3aXRoICgwLDEpIGluIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgc2NyZWVuIGFu
ZCAoMSwwKSBpbiB0aGUgYm90dG9tIHJpZ2h0LgorLy8gQzAuWFkgbXVzdCBiZSB0aGUgaGFsZi1w
aXhlbCB3aWR0aCBhbmQgaGVpZ2h0LiBDMC5aVyBtdXN0IGJlIDAuCitWU19PVVRQVVQgZmxpcHl2
cyhpbiBmbG9hdDQgcG9zaXRpb24gOiBQT1NJVElPTikKK3sKKyAgICBWU19PVVRQVVQgT3V0Owor
CisgICAgT3V0LnBvc2l0aW9uID0gcG9zaXRpb24gKyBoYWxmUGl4ZWxTaXplOworICAgIE91dC50
ZXhjb29yZCA9IHBvc2l0aW9uICogZmxvYXQ0KDAuNSwgMC41LCAxLjAsIDEuMCkgKyBmbG9hdDQo
MC41LCAwLjUsIDAsIDApOworCisgICAgcmV0dXJuIE91dDsKK307CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9j
b21waWxlZC9jb21wb25lbnRtYXNrcHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2NvbXBvbmVudG1hc2twcy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjhmMjg0N2I4ZTdkMzVmMTU3Y2ExYThkMjgxODNjNWViN2M0ZDI2ZWUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9jb21wb25lbnRtYXNrcHMuaApAQCAtMCwwICsx
LDc5IEBACisjaWYgMA0KKy8vDQorLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBT
aGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0DQorLy8NCisvLy8NCisvLyBQYXJhbWV0ZXJz
Og0KKy8vDQorLy8gICBmbG9hdDQgbW9kZTsNCisvLyAgIHNhbXBsZXIyRCB0ZXg7DQorLy8NCisv
Lw0KKy8vIFJlZ2lzdGVyczoNCisvLw0KKy8vICAgTmFtZSAgICAgICAgIFJlZyAgIFNpemUNCisv
LyAgIC0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tDQorLy8gICBtb2RlICAgICAgICAgYzAgICAgICAg
MQ0KKy8vICAgdGV4ICAgICAgICAgIHMwICAgICAgIDENCisvLw0KKw0KKyAgICBwc18yXzANCisg
ICAgZGNsIHQwLnh5DQorICAgIGRjbF8yZCBzMA0KKyAgICB0ZXhsZCByMCwgdDAsIHMwDQorICAg
IG11bCByMS54eXosIHIwLCBjMC54DQorICAgIG1hZCByMS53LCByMC53LCBjMC56LCBjMC53DQor
ICAgIG1vdiBvQzAsIHIxDQorDQorLy8gYXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3Rz
IHVzZWQgKDEgdGV4dHVyZSwgMyBhcml0aG1ldGljKQ0KKyNlbmRpZg0KKw0KK2NvbnN0IEJZVEUg
Z19wczIwX2NvbXBvbmVudG1hc2twc1tdID0NCit7DQorICAgICAgMCwgICAyLCAyNTUsIDI1NSwg
MjU0LCAyNTUsIA0KKyAgICAgNDQsICAgMCwgIDY3LCAgODQsICA2NSwgIDY2LCANCisgICAgIDI4
LCAgIDAsICAgMCwgICAwLCAxMTksICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU1
LCAyNTUsIA0KKyAgICAgIDIsICAgMCwgICAwLCAgIDAsICAyOCwgICAwLCANCisgICAgICAwLCAg
IDAsICAgMCwgICAxLCAgIDAsICAgMCwgDQorICAgIDExMiwgICAwLCAgIDAsICAgMCwgIDY4LCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCANCisgICAgICAxLCAgIDAs
ICAgMCwgICAwLCAgNzYsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgOTIsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCANCisgICAgICAwLCAgIDAsICAg
MSwgICAwLCAgIDAsICAgMCwgDQorICAgICA5NiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgMTA5LCAxMTEsIDEwMCwgMTAxLCANCisgICAgICAwLCAxNzEsIDE3MSwg
MTcxLCAgIDEsICAgMCwgDQorICAgICAgMywgICAwLCAgIDEsICAgMCwgICA0LCAgIDAsIA0KKyAg
ICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsIDExNiwgMTAx
LCAxMjAsICAgMCwgDQorICAgICAgNCwgICAwLCAgMTIsICAgMCwgICAxLCAgIDAsIA0KKyAgICAg
IDEsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAx
MTIsIDExNSwgDQorICAgICA5NSwgIDUwLCAgOTUsICA0OCwgICAwLCAgNzcsIA0KKyAgICAxMDUs
ICA5OSwgMTE0LCAxMTEsIDExNSwgMTExLCANCisgICAgMTAyLCAxMTYsICAzMiwgIDQwLCAgODIs
ICA0MSwgDQorICAgICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsIA0KKyAgICAgODMsIDEw
NCwgIDk3LCAxMDAsIDEwMSwgMTE0LCANCisgICAgIDMyLCAgNjcsIDExMSwgMTA5LCAxMTIsIDEw
NSwgDQorICAgIDEwOCwgMTAxLCAxMTQsICAzMiwgIDU3LCAgNDYsIA0KKyAgICAgNTEsICA0OCwg
IDQ2LCAgNTcsICA1MCwgIDQ4LCANCisgICAgIDQ4LCAgNDYsICA0OSwgIDU0LCAgNTEsICA1Niwg
DQorICAgICA1MiwgICAwLCAxNzEsIDE3MSwgIDMxLCAgIDAsIA0KKyAgICAgIDAsICAgMiwgICAw
LCAgIDAsICAgMCwgMTI4LCANCisgICAgICAwLCAgIDAsICAgMywgMTc2LCAgMzEsICAgMCwgDQor
ICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAxNDQsIA0KKyAgICAgIDAsICAgOCwgIDE1LCAx
NjAsICA2NiwgICAwLCANCisgICAgICAwLCAgIDMsICAgMCwgICAwLCAgMTUsIDEyOCwgDQorICAg
ICAgMCwgICAwLCAyMjgsIDE3NiwgICAwLCAgIDgsIA0KKyAgICAyMjgsIDE2MCwgICA1LCAgIDAs
ICAgMCwgICAzLCANCisgICAgICAxLCAgIDAsICAgNywgMTI4LCAgIDAsICAgMCwgDQorICAgIDIy
OCwgMTI4LCAgIDAsICAgMCwgICAwLCAxNjAsIA0KKyAgICAgIDQsICAgMCwgICAwLCAgIDQsICAg
MSwgICAwLCANCisgICAgICA4LCAxMjgsICAgMCwgICAwLCAyNTUsIDEyOCwgDQorICAgICAgMCwg
ICAwLCAxNzAsIDE2MCwgICAwLCAgIDAsIA0KKyAgICAyNTUsIDE2MCwgICAxLCAgIDAsICAgMCwg
ICAyLCANCisgICAgICAwLCAgIDgsICAxNSwgMTI4LCAgIDEsICAgMCwgDQorICAgIDIyOCwgMTI4
LCAyNTUsIDI1NSwgICAwLCAgIDANCit9Ow0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2ZsaXB5
dnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
OS9zaGFkZXJzL2NvbXBpbGVkL2ZsaXB5dnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMjU3NmVkNjc0MmYyZTJm
NWVmM2ZiMTRhYjBkODNjNjk2YjU3M2QyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQv
ZmxpcHl2cy5oCkBAIC0wLDAgKzEsNjcgQEAKKyNpZiAwDQorLy8NCisvLyBHZW5lcmF0ZWQgYnkg
TWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQNCisvLw0K
Ky8vLw0KKy8vIFBhcmFtZXRlcnM6DQorLy8NCisvLyAgIGZsb2F0NCBoYWxmUGl4ZWxTaXplOw0K
Ky8vDQorLy8NCisvLyBSZWdpc3RlcnM6DQorLy8NCisvLyAgIE5hbWUgICAgICAgICAgUmVnICAg
U2l6ZQ0KKy8vICAgLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tDQorLy8gICBoYWxmUGl4ZWxTaXpl
IGMwICAgICAgIDENCisvLw0KKw0KKyAgICB2c18yXzANCisgICAgZGVmIGMxLCAwLjUsIDEsIDAs
IDANCisgICAgZGNsX3Bvc2l0aW9uIHYwDQorICAgIGFkZCBvUG9zLCB2MCwgYzANCisgICAgbWFk
IG9UMCwgdjAsIGMxLnh4eXksIGMxLnh4enoNCisNCisvLyBhcHByb3hpbWF0ZWx5IDIgaW5zdHJ1
Y3Rpb24gc2xvdHMgdXNlZA0KKyNlbmRpZg0KKw0KK2NvbnN0IEJZVEUgZ192czIwX2ZsaXB5dnNb
XSA9DQorew0KKyAgICAgIDAsICAgMiwgMjU0LCAyNTUsIDI1NCwgMjU1LCANCisgICAgIDM2LCAg
IDAsICA2NywgIDg0LCAgNjUsICA2NiwgDQorICAgICAyOCwgICAwLCAgIDAsICAgMCwgIDg3LCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDIsIDI1NCwgMjU1LCANCisgICAgICAxLCAgIDAs
ICAgMCwgICAwLCAgMjgsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAs
IA0KKyAgICAgODAsICAgMCwgICAwLCAgIDAsICA0OCwgICAwLCANCisgICAgICAwLCAgIDAsICAg
MiwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDY0LCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgMTA0LCAgOTcsIDEwOCwg
MTAyLCAgODAsIDEwNSwgDQorICAgIDEyMCwgMTAxLCAxMDgsICA4MywgMTA1LCAxMjIsIA0KKyAg
ICAxMDEsICAgMCwgMTcxLCAxNzEsICAgMSwgICAwLCANCisgICAgICAzLCAgIDAsICAgMSwgICAw
LCAgIDQsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
IDAsICAgMCwgMTE4LCAxMTUsICA5NSwgIDUwLCANCisgICAgIDk1LCAgNDgsICAgMCwgIDc3LCAx
MDUsICA5OSwgDQorICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIA0KKyAgICAgMzIs
ICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCANCisgICAgIDc2LCAgODMsICA3NiwgIDMyLCAgODMs
IDEwNCwgDQorICAgICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCAgNjcsIA0KKyAgICAxMTEsIDEw
OSwgMTEyLCAxMDUsIDEwOCwgMTAxLCANCisgICAgMTE0LCAgMzIsICA1NywgIDQ2LCAgNTEsICA0
OCwgDQorICAgICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4LCAgNDYsIA0KKyAgICAgNDksICA1NCwg
IDUxLCAgNTYsICA1MiwgICAwLCANCisgICAgMTcxLCAxNzEsICA4MSwgICAwLCAgIDAsICAgNSwg
DQorICAgICAgMSwgICAwLCAgMTUsIDE2MCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICA2MywgICAw
LCAgIDAsIDEyOCwgIDYzLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQor
ICAgICAgMCwgICAwLCAgMzEsICAgMCwgICAwLCAgIDIsIA0KKyAgICAgIDAsICAgMCwgICAwLCAx
MjgsICAgMCwgICAwLCANCisgICAgIDE1LCAxNDQsICAgMiwgICAwLCAgIDAsICAgMywgDQorICAg
ICAgMCwgICAwLCAgMTUsIDE5MiwgICAwLCAgIDAsIA0KKyAgICAyMjgsIDE0NCwgICAwLCAgIDAs
IDIyOCwgMTYwLCANCisgICAgICA0LCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgDQorICAgICAx
NSwgMjI0LCAgIDAsICAgMCwgMjI4LCAxNDQsIA0KKyAgICAgIDEsICAgMCwgIDgwLCAxNjAsICAg
MSwgICAwLCANCisgICAgMTYwLCAxNjAsIDI1NSwgMjU1LCAgIDAsICAgMA0KK307DQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L3NoYWRlcnMvY29tcGlsZWQvbHVtaW5hbmNlcHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2x1bWluYW5jZXBz
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMzAzMTNiMDg2MGVjZmUwMjY3N2RkYjNmMDAwOTE1MWY3OGEzYmZiMgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2x1bWluYW5jZXBzLmgKQEAgLTAsMCArMSw3
OSBAQAorI2lmIDANCisvLw0KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hh
ZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NA0KKy8vDQorLy8vDQorLy8gUGFyYW1ldGVyczoN
CisvLw0KKy8vICAgZmxvYXQ0IG1vZGU7DQorLy8gICBzYW1wbGVyMkQgdGV4Ow0KKy8vDQorLy8N
CisvLyBSZWdpc3RlcnM6DQorLy8NCisvLyAgIE5hbWUgICAgICAgICBSZWcgICBTaXplDQorLy8g
ICAtLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQ0KKy8vICAgbW9kZSAgICAgICAgIGMwICAgICAgIDEN
CisvLyAgIHRleCAgICAgICAgICBzMCAgICAgICAxDQorLy8NCisNCisgICAgcHNfMl8wDQorICAg
IGRjbCB0MC54eQ0KKyAgICBkY2xfMmQgczANCisgICAgdGV4bGQgcjAsIHQwLCBzMA0KKyAgICBt
YWQgcjEudywgcjAudywgYzAueCwgYzAueQ0KKyAgICBtb3YgcjEueHl6LCByMC54DQorICAgIG1v
diBvQzAsIHIxDQorDQorLy8gYXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQg
KDEgdGV4dHVyZSwgMyBhcml0aG1ldGljKQ0KKyNlbmRpZg0KKw0KK2NvbnN0IEJZVEUgZ19wczIw
X2x1bWluYW5jZXBzW10gPQ0KK3sNCisgICAgICAwLCAgIDIsIDI1NSwgMjU1LCAyNTQsIDI1NSwg
DQorICAgICA0NCwgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIA0KKyAgICAgMjgsICAgMCwgICAw
LCAgIDAsIDExOSwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTUsIDI1NSwgDQor
ICAgICAgMiwgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAg
IDEsICAgMCwgICAwLCANCisgICAgMTEyLCAgIDAsICAgMCwgICAwLCAgNjgsICAgMCwgDQorICAg
ICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAs
ICA3NiwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICA5
MiwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAxLCAgIDAsICAg
MCwgICAwLCANCisgICAgIDk2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwg
ICAwLCAxMDksIDExMSwgMTAwLCAxMDEsIA0KKyAgICAgIDAsIDE3MSwgMTcxLCAxNzEsICAgMSwg
ICAwLCANCisgICAgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgDQorICAgICAgMSwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgMTE2LCAxMDEsIDEyMCwgICAw
LCANCisgICAgICA0LCAgIDAsICAxMiwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMSwgICAwLCAg
IDEsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsIDExMiwgMTE1LCAN
CisgICAgIDk1LCAgNTAsICA5NSwgIDQ4LCAgIDAsICA3NywgDQorICAgIDEwNSwgIDk5LCAxMTQs
IDExMSwgMTE1LCAxMTEsIA0KKyAgICAxMDIsIDExNiwgIDMyLCAgNDAsICA4MiwgIDQxLCANCisg
ICAgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgDQorICAgICA4MywgMTA0LCAgOTcsIDEw
MCwgMTAxLCAxMTQsIA0KKyAgICAgMzIsICA2NywgMTExLCAxMDksIDExMiwgMTA1LCANCisgICAg
MTA4LCAxMDEsIDExNCwgIDMyLCAgNTcsICA0NiwgDQorICAgICA1MSwgIDQ4LCAgNDYsICA1Nywg
IDUwLCAgNDgsIA0KKyAgICAgNDgsICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCANCisgICAgIDUy
LCAgIDAsIDE3MSwgMTcxLCAgMzEsICAgMCwgDQorICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAw
LCAxMjgsIA0KKyAgICAgIDAsICAgMCwgICAzLCAxNzYsICAzMSwgICAwLCANCisgICAgICAwLCAg
IDIsICAgMCwgICAwLCAgIDAsIDE0NCwgDQorICAgICAgMCwgICA4LCAgMTUsIDE2MCwgIDY2LCAg
IDAsIA0KKyAgICAgIDAsICAgMywgICAwLCAgIDAsICAxNSwgMTI4LCANCisgICAgICAwLCAgIDAs
IDIyOCwgMTc2LCAgIDAsICAgOCwgDQorICAgIDIyOCwgMTYwLCAgIDQsICAgMCwgICAwLCAgIDQs
IA0KKyAgICAgIDEsICAgMCwgICA4LCAxMjgsICAgMCwgICAwLCANCisgICAgMjU1LCAxMjgsICAg
MCwgICAwLCAgIDAsIDE2MCwgDQorICAgICAgMCwgICAwLCAgODUsIDE2MCwgICAxLCAgIDAsIA0K
KyAgICAgIDAsICAgMiwgICAxLCAgIDAsICAgNywgMTI4LCANCisgICAgICAwLCAgIDAsICAgMCwg
MTI4LCAgIDEsICAgMCwgDQorICAgICAgMCwgICAyLCAgIDAsICAgOCwgIDE1LCAxMjgsIA0KKyAg
ICAgIDEsICAgMCwgMjI4LCAxMjgsIDI1NSwgMjU1LCANCisgICAgICAwLCAgIDANCit9Ow0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0
aHJvdWdocHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMGEyYzdkNDgyYjMzYmU4NjY3NDk1NDc1NWEzOTk1ODVj
OGFiZWE4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hwcy5oCkBA
IC0wLDAgKzEsNjIgQEAKKyNpZiAwDQorLy8NCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChS
KSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQNCisvLw0KKy8vLw0KKy8vIFBh
cmFtZXRlcnM6DQorLy8NCisvLyAgIHNhbXBsZXIyRCB0ZXg7DQorLy8NCisvLw0KKy8vIFJlZ2lz
dGVyczoNCisvLw0KKy8vICAgTmFtZSAgICAgICAgIFJlZyAgIFNpemUNCisvLyAgIC0tLS0tLS0t
LS0tLSAtLS0tLSAtLS0tDQorLy8gICB0ZXggICAgICAgICAgczAgICAgICAgMQ0KKy8vDQorDQor
ICAgIHBzXzJfMA0KKyAgICBkY2wgdDAueHkNCisgICAgZGNsXzJkIHMwDQorICAgIHRleGxkIHIw
LCB0MCwgczANCisgICAgbW92IG9DMCwgcjANCisNCisvLyBhcHByb3hpbWF0ZWx5IDIgaW5zdHJ1
Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCAxIGFyaXRobWV0aWMpDQorI2VuZGlmDQorDQor
Y29uc3QgQllURSBnX3BzMjBfcGFzc3Rocm91Z2hwc1tdID0NCit7DQorICAgICAgMCwgICAyLCAy
NTUsIDI1NSwgMjU0LCAyNTUsIA0KKyAgICAgMzMsICAgMCwgIDY3LCAgODQsICA2NSwgIDY2LCAN
CisgICAgIDI4LCAgIDAsICAgMCwgICAwLCAgNzUsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAs
ICAgMiwgMjU1LCAyNTUsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICAyOCwgICAwLCANCisg
ICAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgDQorICAgICA2OCwgICAwLCAgIDAsICAg
MCwgIDQ4LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCANCisgICAg
ICAxLCAgIDAsICAgMCwgICAwLCAgNTIsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAxMTYsIDEwMSwgMTIwLCAgIDAsICAgNCwgICAwLCANCisgICAgIDEy
LCAgIDAsICAgMSwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgMTEyLCAxMTUsICA5NSwgIDUwLCANCisgICAgIDk1LCAg
NDgsICAgMCwgIDc3LCAxMDUsICA5OSwgDQorICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAx
MTYsIA0KKyAgICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCANCisgICAgIDc2LCAgODMs
ICA3NiwgIDMyLCAgODMsIDEwNCwgDQorICAgICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCAgNjcs
IA0KKyAgICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCANCisgICAgMTE0LCAgMzIsICA1
NywgIDQ2LCAgNTEsICA0OCwgDQorICAgICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4LCAgNDYsIA0K
KyAgICAgNDksICA1NCwgIDUxLCAgNTYsICA1MiwgICAwLCANCisgICAgMTcxLCAxNzEsICAzMSwg
ICAwLCAgIDAsICAgMiwgDQorICAgICAgMCwgICAwLCAgIDAsIDEyOCwgICAwLCAgIDAsIA0KKyAg
ICAgIDMsIDE3NiwgIDMxLCAgIDAsICAgMCwgICAyLCANCisgICAgICAwLCAgIDAsICAgMCwgMTQ0
LCAgIDAsICAgOCwgDQorICAgICAxNSwgMTYwLCAgNjYsICAgMCwgICAwLCAgIDMsIA0KKyAgICAg
IDAsICAgMCwgIDE1LCAxMjgsICAgMCwgICAwLCANCisgICAgMjI4LCAxNzYsICAgMCwgICA4LCAy
MjgsIDE2MCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDgsIA0KKyAgICAgMTUs
IDEyOCwgICAwLCAgIDAsIDIyOCwgMTI4LCANCisgICAgMjU1LCAyNTUsICAgMCwgICAwDQorfTsN
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9zdGFuZGFyZHZzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9zdGFu
ZGFyZHZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMjZiODk1OTVjYmI1NWNjMzJjM2I4MzczZDc4MTFjMDlmMGFm
NDk2MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3N0YW5kYXJkdnMuaApAQCAtMCww
ICsxLDY3IEBACisjaWYgMA0KKy8vDQorLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExT
TCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0DQorLy8NCisvLy8NCisvLyBQYXJhbWV0
ZXJzOg0KKy8vDQorLy8gICBmbG9hdDQgaGFsZlBpeGVsU2l6ZTsNCisvLw0KKy8vDQorLy8gUmVn
aXN0ZXJzOg0KKy8vDQorLy8gICBOYW1lICAgICAgICAgIFJlZyAgIFNpemUNCisvLyAgIC0tLS0t
LS0tLS0tLS0gLS0tLS0gLS0tLQ0KKy8vICAgaGFsZlBpeGVsU2l6ZSBjMCAgICAgICAxDQorLy8N
CisNCisgICAgdnNfMl8wDQorICAgIGRlZiBjMSwgMC41LCAtMC41LCAxLCAwDQorICAgIGRjbF9w
b3NpdGlvbiB2MA0KKyAgICBhZGQgb1BvcywgdjAsIGMwDQorICAgIG1hZCBvVDAsIHYwLCBjMS54
eXp6LCBjMS54eHd3DQorDQorLy8gYXBwcm94aW1hdGVseSAyIGluc3RydWN0aW9uIHNsb3RzIHVz
ZWQNCisjZW5kaWYNCisNCitjb25zdCBCWVRFIGdfdnMyMF9zdGFuZGFyZHZzW10gPQ0KK3sNCisg
ICAgICAwLCAgIDIsIDI1NCwgMjU1LCAyNTQsIDI1NSwgDQorICAgICAzNiwgICAwLCAgNjcsICA4
NCwgIDY1LCAgNjYsIA0KKyAgICAgMjgsICAgMCwgICAwLCAgIDAsICA4NywgICAwLCANCisgICAg
ICAwLCAgIDAsICAgMCwgICAyLCAyNTQsIDI1NSwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwg
IDI4LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCANCisgICAgIDgw
LCAgIDAsICAgMCwgICAwLCAgNDgsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICA2NCwgICAwLCANCisgICAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgIDEwNCwgIDk3LCAxMDgsIDEwMiwgIDgwLCAx
MDUsIA0KKyAgICAxMjAsIDEwMSwgMTA4LCAgODMsIDEwNSwgMTIyLCANCisgICAgMTAxLCAgIDAs
IDE3MSwgMTcxLCAgIDEsICAgMCwgDQorICAgICAgMywgICAwLCAgIDEsICAgMCwgICA0LCAgIDAs
IA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsIDEx
OCwgMTE1LCAgOTUsICA1MCwgDQorICAgICA5NSwgIDQ4LCAgIDAsICA3NywgMTA1LCAgOTksIA0K
KyAgICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCANCisgICAgIDMyLCAgNDAsICA4Miwg
IDQxLCAgMzIsICA3MiwgDQorICAgICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAxMDQsIA0KKyAg
ICAgOTcsIDEwMCwgMTAxLCAxMTQsICAzMiwgIDY3LCANCisgICAgMTExLCAxMDksIDExMiwgMTA1
LCAxMDgsIDEwMSwgDQorICAgIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCAgNDgsIA0KKyAgICAg
NDYsICA1NywgIDUwLCAgNDgsICA0OCwgIDQ2LCANCisgICAgIDQ5LCAgNTQsICA1MSwgIDU2LCAg
NTIsICAgMCwgDQorICAgIDE3MSwgMTcxLCAgODEsICAgMCwgICAwLCAgIDUsIA0KKyAgICAgIDEs
ICAgMCwgIDE1LCAxNjAsICAgMCwgICAwLCANCisgICAgICAwLCAgNjMsICAgMCwgICAwLCAgIDAs
IDE5MSwgDQorICAgICAgMCwgICAwLCAxMjgsICA2MywgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgIDMxLCAgIDAsICAgMCwgICAyLCANCisgICAgICAwLCAgIDAsICAgMCwgMTI4LCAgIDAsICAg
MCwgDQorICAgICAxNSwgMTQ0LCAgIDIsICAgMCwgICAwLCAgIDMsIA0KKyAgICAgIDAsICAgMCwg
IDE1LCAxOTIsICAgMCwgICAwLCANCisgICAgMjI4LCAxNDQsICAgMCwgICAwLCAyMjgsIDE2MCwg
DQorICAgICAgNCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsIA0KKyAgICAgMTUsIDIyNCwgICAw
LCAgIDAsIDIyOCwgMTQ0LCANCisgICAgICAxLCAgIDAsIDE2NCwgMTYwLCAgIDEsICAgMCwgDQor
ICAgIDI0MCwgMTYwLCAyNTUsIDI1NSwgICAwLCAgIDANCit9Ow0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2dl
bmVyYXRlX3NoYWRlcnMuYmF0IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVycy5iYXQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZWExMjU5MTQ4OTM2ZTY5ZWQ2YzAzZjRiOTczNWVjMzg1YzI3MjY2YQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9z
aGFkZXJzL2dlbmVyYXRlX3NoYWRlcnMuYmF0CkBAIC0wLDAgKzEsMTQgQEAKK0BFQ0hPIE9GRg0K
K1JFTQ0KK1JFTSBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4NCitSRU0gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KK1JFTSBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLg0KK1JFTQ0KKw0KK1BBVEggJVBBVEglOyVQcm9ncmFtRmlsZXMoeDg2
KSVcV2luZG93cyBLaXRzXDguMFxiaW5ceDg2OyVEWFNES19ESVIlXFV0aWxpdGllc1xiaW5ceDg2
DQorDQorZnhjIC9FIHN0YW5kYXJkdnMgL1QgdnNfMl8wIC9GaCBjb21waWxlZC9zdGFuZGFyZHZz
LmggQmxpdC52cw0KK2Z4YyAvRSBmbGlweXZzIC9UIHZzXzJfMCAvRmggY29tcGlsZWQvZmxpcHl2
cy5oIEJsaXQudnMNCitmeGMgL0UgcGFzc3Rocm91Z2hwcyAvVCBwc18yXzAgL0ZoIGNvbXBpbGVk
L3Bhc3N0aHJvdWdocHMuaCBCbGl0LnBzDQorZnhjIC9FIGx1bWluYW5jZXBzIC9UIHBzXzJfMCAv
RmggY29tcGlsZWQvbHVtaW5hbmNlcHMuaCBCbGl0LnBzDQorZnhjIC9FIGNvbXBvbmVudG1hc2tw
cyAvVCBwc18yXzAgL0ZoIGNvbXBpbGVkL2NvbXBvbmVudG1hc2twcy5oIEJsaXQucHMNCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDkvdmVydGV4Y29udmVyc2lvbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L3ZlcnRleGNvbnZlcnNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41OTBiOWQ0
OGEzODZmZmMxNzI1NzFkYTQ0ZDliZTIwZDEwMjkwMTljCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3ZlcnRleGNv
bnZlcnNpb24uaApAQCAtMCwwICsxLDIwMyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gdmVy
dGV4Y29udmVyc2lvbi5oOiBBIGxpYnJhcnkgb2YgdmVydGV4IGNvbnZlcnNpb24gY2xhc3NlcyB0
aGF0IGNhbiBiZSB1c2VkIHRvIGJ1aWxkCisvLyB0aGUgRm9ybWF0Q29udmVydGVyIG9iamVjdHMg
dXNlZCBieSB0aGUgYnVmZmVyIGNvbnZlcnNpb24gc3lzdGVtLgorCisjaWZuZGVmIExJQkdMRVNW
Ml9WRVJURVhDT05WRVJTSU9OX0hfCisjZGVmaW5lIExJQkdMRVNWMl9WRVJURVhDT05WRVJTSU9O
X0hfCisKK25hbWVzcGFjZSByeAoreworCisvLyBDb252ZXJzaW9uIHR5cGVzOgorLy8gc3RhdGlj
IGNvbnN0IGJvb2wgaWRlbnRpdHk6IHRydWUgaWYgdGhpcyBpcyBhbiBpZGVudGl0eSB0cmFuc2Zv
cm0sIGZhbHNlIG90aGVyd2lzZQorLy8gc3RhdGljIFUgY29udmVydChUKTogY29udmVydCBhIHNp
bmdsZSBlbGVtZW50IGZyb20gdGhlIGlucHV0IHR5cGUgdG8gdGhlIG91dHB1dCB0eXBlCisvLyB0
eXBlZGVmIC4uLiBPdXRwdXRUeXBlOiB0aGUgdHlwZSBwcm9kdWNlZCBieSB0aGlzIGNvbnZlcnNp
b24KKwordGVtcGxhdGUgPGNsYXNzIFQ+CitzdHJ1Y3QgSWRlbnRpdHkKK3sKKyAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpZGVudGl0eSA9IHRydWU7CisKKyAgICB0eXBlZGVmIFQgT3V0cHV0VHlwZTsK
KworICAgIHN0YXRpYyBUIGNvbnZlcnQoVCB4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHg7Cisg
ICAgfQorfTsKKwordGVtcGxhdGUgPGNsYXNzIEZyb21ULCBjbGFzcyBUb1Q+CitzdHJ1Y3QgQ2Fz
dAoreworICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0gZmFsc2U7CisKKyAgICB0eXBl
ZGVmIFRvVCBPdXRwdXRUeXBlOworCisgICAgc3RhdGljIFRvVCBjb252ZXJ0KEZyb21UIHgpCisg
ICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VG9UPih4KTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZSA8Y2xhc3MgVD4KK3N0cnVjdCBDYXN0PFQsIFQ+Cit7CisgICAgc3RhdGljIGNvbnN0
IGJvb2wgaWRlbnRpdHkgPSB0cnVlOworCisgICAgdHlwZWRlZiBUIE91dHB1dFR5cGU7CisKKyAg
ICBzdGF0aWMgVCBjb252ZXJ0KFQgeCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUPih4KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK3N0cnVjdCBOb3JtYWxp
emUKK3sKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9IGZhbHNlOworCisgICAgdHlw
ZWRlZiBmbG9hdCBPdXRwdXRUeXBlOworCisgICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoVCB4KQor
ICAgIHsKKyAgICAgICAgdHlwZWRlZiBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+IE5MOworICAgICAg
ICBmbG9hdCBmID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHgpOworCisgICAgICAgIGlmIChOTDo6aXNf
c2lnbmVkKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBjb25zdCBmbG9hdCA9PiBWQzIwMDgg
Y29tcHV0ZXMgaXQgYXQgY29tcGlsZSB0aW1lCisgICAgICAgICAgICAvLyBzdGF0aWMgY29uc3Qg
ZmxvYXQgPT4gVkMyMDA4IGNvbXB1dGVzIGl0IHRoZSBmaXJzdCB0aW1lIHdlIGdldCBoZXJlLCBz
dG9yZXMgaXQgdG8gbWVtb3J5IHdpdGggc3RhdGljIGd1YXJkIGFuZCBhbGwgdGhhdC4KKyAgICAg
ICAgICAgIGNvbnN0IGZsb2F0IGRpdmlzb3IgPSAxLjBmLygyKnN0YXRpY19jYXN0PGZsb2F0PihO
TDo6bWF4KCkpKzEpOworICAgICAgICAgICAgcmV0dXJuICgyKmYrMSkqZGl2aXNvcjsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmL05MOjpt
YXgoKTsKKyAgICAgICAgfQorICAgIH0KK307CisKK3RlbXBsYXRlIDxjbGFzcyBGcm9tVHlwZSwg
c3RkOjpzaXplX3QgU2NhbGVCaXRzPgorc3RydWN0IEZpeGVkVG9GbG9hdAoreworICAgIHN0YXRp
YyBjb25zdCBib29sIGlkZW50aXR5ID0gZmFsc2U7CisKKyAgICB0eXBlZGVmIGZsb2F0IE91dHB1
dFR5cGU7CisKKyAgICBzdGF0aWMgZmxvYXQgY29udmVydChGcm9tVHlwZSB4KQorICAgIHsKKyAg
ICAgICAgY29uc3QgZmxvYXQgZGl2aXNvciA9IDEuMGYgLyBzdGF0aWNfY2FzdDxmbG9hdD4oc3Rh
dGljX2Nhc3Q8RnJvbVR5cGU+KDEpIDw8IFNjYWxlQml0cyk7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxmbG9hdD4oeCkgKiBkaXZpc29yOworICAgIH0KK307CisKKy8vIFdpZGVuIHR5cGVz
OgorLy8gc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpbml0aWFsV2lkdGg6IG51bWJlciBvZiBj
b21wb25lbnRzIGJlZm9yZSBjb252ZXJzaW9uCisvLyBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50
IGZpbmFsV2lkdGg6IG51bWJlciBvZiBjb21wb25lbnRzIGFmdGVyIGNvbnZlcnNpb24KKworLy8g
RmxvYXQgaXMgc3VwcG9ydGVkIGF0IGFueSBzaXplLgordGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+
CitzdHJ1Y3QgTm9XaWRlbgoreworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBpbml0aWFs
V2lkdGggPSBOOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5hbFdpZHRoID0gTjsK
K307CisKKy8vIFNIT1JULCBub3JtLVNIT1JULCBub3JtLVVOU0lHTkVEX1NIT1JUIGFyZSBzdXBw
b3J0ZWQgYnV0IG9ubHkgd2l0aCAyIG9yIDQgY29tcG9uZW50cwordGVtcGxhdGUgPHN0ZDo6c2l6
ZV90IE4+CitzdHJ1Y3QgV2lkZW5Ub0V2ZW4KK3sKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzaXpl
X3QgaW5pdGlhbFdpZHRoID0gTjsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgZmluYWxX
aWR0aCA9IE4rKE4mMSk7Cit9OworCit0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTj4KK3N0cnVjdCBX
aWRlblRvRm91cgoreworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBpbml0aWFsV2lkdGgg
PSBOOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5hbFdpZHRoID0gNDsKK307CisK
Ky8vIE1vc3QgdHlwZXMgaGF2ZSAwIGFuZCAxIHRoYXQgYXJlIGp1c3QgdGhhdC4KK3RlbXBsYXRl
IDxjbGFzcyBUPgorc3RydWN0IFNpbXBsZURlZmF1bHRWYWx1ZXMKK3sKKyAgICBzdGF0aWMgVCB6
ZXJvKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oMCk7IH0KKyAgICBzdGF0aWMgVCBvbmUoKSB7
IHJldHVybiBzdGF0aWNfY2FzdDxUPigxKTsgfQorfTsKKworLy8gQnV0IG5vcm1hbGlzZWQgdHlw
ZXMgb25seSBzdG9yZSBbMCwxXSBvciBbLTEsMV0gc28gMS4wIGlzIHJlcHJlc2VudGVkIGJ5IHRo
ZSBtYXggdmFsdWUuCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK3N0cnVjdCBOb3JtYWxpemVkRGVmYXVs
dFZhbHVlcworeworICAgIHN0YXRpYyBUIHplcm8oKSB7IHJldHVybiBzdGF0aWNfY2FzdDxUPigw
KTsgfQorICAgIHN0YXRpYyBUIG9uZSgpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8VD46
Om1heCgpOyB9Cit9OworCisvLyBDb252ZXJ0ZXI6CisvLyBzdGF0aWMgY29uc3QgYm9vbCBpZGVu
dGl0eTogdHJ1ZSBpZiB0aGlzIGlzIGFuIGlkZW50aXR5IHRyYW5zZm9ybSAod2l0aCBubyB3aWRl
bmluZykKKy8vIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5hbFNpemU6IG51bWJlciBvZiBi
eXRlcyBwZXIgb3V0cHV0IHZlcnRleAorLy8gc3RhdGljIHZvaWQgY29udmVydEFycmF5KGNvbnN0
IHZvaWQgKmluLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90IG4sIHZvaWQgKm91dCk6
IGNvbnZlcnQgYW4gYXJyYXkgb2YgdmVydGljZXMuIElucHV0IG1heSBiZSBzdHJpZGVkLCBidXQg
b3V0cHV0IHdpbGwgYmUgdW5zdHJpZGVkLgorCit0ZW1wbGF0ZSA8Y2xhc3MgSW5ULCBjbGFzcyBX
aWRlblJ1bGUsIGNsYXNzIENvbnZlcnRlciwgY2xhc3MgRGVmYXVsdFZhbHVlUnVsZSA9IFNpbXBs
ZURlZmF1bHRWYWx1ZXM8SW5UPiA+CitzdHJ1Y3QgVmVydGV4RGF0YUNvbnZlcnRlcgoreworICAg
IHR5cGVkZWYgdHlwZW5hbWUgQ29udmVydGVyOjpPdXRwdXRUeXBlIE91dHB1dFR5cGU7CisgICAg
dHlwZWRlZiBJblQgSW5wdXRUeXBlOworCisgICAgc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHkg
PSAoV2lkZW5SdWxlOjppbml0aWFsV2lkdGggPT0gV2lkZW5SdWxlOjpmaW5hbFdpZHRoKSAmJiBD
b252ZXJ0ZXI6OmlkZW50aXR5OworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5hbFNp
emUgPSBXaWRlblJ1bGU6OmZpbmFsV2lkdGggKiBzaXplb2YoT3V0cHV0VHlwZSk7CisKKyAgICBz
dGF0aWMgdm9pZCBjb252ZXJ0QXJyYXkoY29uc3QgSW5wdXRUeXBlICppbiwgc3RkOjpzaXplX3Qg
c3RyaWRlLCBzdGQ6OnNpemVfdCBuLCBPdXRwdXRUeXBlICpvdXQpCisgICAgeworICAgICAgICBm
b3IgKHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgICB7CisgICAgICAgICAg
ICBjb25zdCBJbnB1dFR5cGUgKmVpbiA9IHBvaW50ZXJBZGRCeXRlcyhpbiwgaSAqIHN0cmlkZSk7
CisKKyAgICAgICAgICAgIGNvcHlDb21wb25lbnQob3V0LCBlaW4sIDAsIHN0YXRpY19jYXN0PE91
dHB1dFR5cGU+KERlZmF1bHRWYWx1ZVJ1bGU6Onplcm8oKSkpOworICAgICAgICAgICAgY29weUNv
bXBvbmVudChvdXQsIGVpbiwgMSwgc3RhdGljX2Nhc3Q8T3V0cHV0VHlwZT4oRGVmYXVsdFZhbHVl
UnVsZTo6emVybygpKSk7CisgICAgICAgICAgICBjb3B5Q29tcG9uZW50KG91dCwgZWluLCAyLCBz
dGF0aWNfY2FzdDxPdXRwdXRUeXBlPihEZWZhdWx0VmFsdWVSdWxlOjp6ZXJvKCkpKTsKKyAgICAg
ICAgICAgIGNvcHlDb21wb25lbnQob3V0LCBlaW4sIDMsIHN0YXRpY19jYXN0PE91dHB1dFR5cGU+
KERlZmF1bHRWYWx1ZVJ1bGU6Om9uZSgpKSk7CisKKyAgICAgICAgICAgIG91dCArPSBXaWRlblJ1
bGU6OmZpbmFsV2lkdGg7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBjb252
ZXJ0QXJyYXkoY29uc3Qgdm9pZCAqaW4sIHN0ZDo6c2l6ZV90IHN0cmlkZSwgc3RkOjpzaXplX3Qg
biwgdm9pZCAqb3V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRBcnJheShzdGF0aWNf
Y2FzdDxjb25zdCBJbnB1dFR5cGUqPihpbiksIHN0cmlkZSwgbiwgc3RhdGljX2Nhc3Q8T3V0cHV0
VHlwZSo+KG91dCkpOworICAgIH0KKworICBwcml2YXRlOgorICAgIC8vIEFkdmFuY2UgdGhlIGdp
dmVuIHBvaW50ZXIgYnkgYSBudW1iZXIgb2YgYnl0ZXMgKG5vdCBwb2ludGVkLXRvIGVsZW1lbnRz
KS4KKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KKyAgICBzdGF0aWMgVCAqcG9pbnRlckFkZEJ5dGVz
KFQgKmJhc2VQdHIsIHN0ZDo6c2l6ZV90IG51bUJ5dGVzKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8VCAqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYmFzZVB0
cikgKyBudW1CeXRlcyk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgY29weUNvbXBvbmVudChP
dXRwdXRUeXBlICpvdXQsIGNvbnN0IElucHV0VHlwZSAqaW4sIHN0ZDo6c2l6ZV90IGVsZW1lbnRp
bmRleCwgT3V0cHV0VHlwZSBkZWZhdWx0dmFsdWUpCisgICAgeworICAgICAgICBpZiAoV2lkZW5S
dWxlOjpmaW5hbFdpZHRoID4gZWxlbWVudGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoV2lkZW5SdWxlOjppbml0aWFsV2lkdGggPiBlbGVtZW50aW5kZXgpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgb3V0W2VsZW1lbnRpbmRleF0gPSBDb252ZXJ0ZXI6OmNvbnZlcnQo
aW5bZWxlbWVudGluZGV4XSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0W2VsZW1lbnRpbmRleF0gPSBkZWZhdWx0dmFs
dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9OworCit9CisKKyNlbmRpZiAg
IC8vIExJQkdMRVNWMl9WRVJURVhDT05WRVJTSU9OX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3JlbmRlcmVyMTFfdXRpbHMuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9yZW5kZXJl
cjExX3V0aWxzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM4MDBkYTI1OGNl
NTkzOTczNTQ3OGQ1ZWE4N2ZkMTM3Y2I4YTA4MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL3JlbmRlcmVyMTFfdXRpbHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjg4ICsw
LDAgQEAKLSNpbmNsdWRlICJwcmVjb21waWxlZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAx
MiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIHJlbmRl
cmVyMTFfdXRpbHMuY3BwOiBDb252ZXJzaW9uIGZ1bmN0aW9ucyBhbmQgb3RoZXIgdXRpbGl0eSBy
b3V0aW5lcwotLy8gc3BlY2lmaWMgdG8gdGhlIEQzRDExIHJlbmRlcmVyLgotCi0jaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL3JlbmRlcmVyMTFfdXRpbHMuaCIKLQotI2luY2x1ZGUgImNvbW1v
bi9kZWJ1Zy5oIgotCi1uYW1lc3BhY2UgZ2xfZDNkMTEKLXsKLQotRDNEMTFfQkxFTkQgQ29udmVy
dEJsZW5kRnVuYyhHTGVudW0gZ2xCbGVuZCwgYm9vbCBpc0FscGhhKQotewotICAgIEQzRDExX0JM
RU5EIGQzZEJsZW5kID0gRDNEMTFfQkxFTkRfWkVSTzsKLQotICAgIHN3aXRjaCAoZ2xCbGVuZCkK
LSAgICB7Ci0gICAgICBjYXNlIEdMX1pFUk86ICAgICAgICAgICAgICAgICAgICAgZDNkQmxlbmQg
PSBEM0QxMV9CTEVORF9aRVJPOyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
T05FOiAgICAgICAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzRDExX0JMRU5EX09ORTsgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TUkNfQ09MT1I6ICAgICAgICAgICAg
ICAgIGQzZEJsZW5kID0gKGlzQWxwaGEgPyBEM0QxMV9CTEVORF9TUkNfQUxQSEEgOiBEM0QxMV9C
TEVORF9TUkNfQ09MT1IpOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX09ORV9NSU5V
U19TUkNfQ09MT1I6ICAgICAgZDNkQmxlbmQgPSAoaXNBbHBoYSA/IEQzRDExX0JMRU5EX0lOVl9T
UkNfQUxQSEEgOiBEM0QxMV9CTEVORF9JTlZfU1JDX0NPTE9SKTsgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfRFNUX0NPTE9SOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IChpc0FscGhhID8gRDNE
MTFfQkxFTkRfREVTVF9BTFBIQSA6IEQzRDExX0JMRU5EX0RFU1RfQ09MT1IpOyAgICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0NPTE9SOiAgICAgIGQzZEJsZW5kID0g
KGlzQWxwaGEgPyBEM0QxMV9CTEVORF9JTlZfREVTVF9BTFBIQSA6IEQzRDExX0JMRU5EX0lOVl9E
RVNUX0NPTE9SKTsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NSQ19BTFBIQTogICAgICAgICAgICAg
ICAgZDNkQmxlbmQgPSBEM0QxMV9CTEVORF9TUkNfQUxQSEE7ICAgICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19BTFBIQTogICAgICBkM2RCbGVuZCA9IEQzRDExX0JM
RU5EX0lOVl9TUkNfQUxQSEE7ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9EU1RfQUxQSEE6
ICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gRDNEMTFfQkxFTkRfREVTVF9BTFBIQTsgICAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQUxQSEE6ICAgICAgZDNkQmxl
bmQgPSBEM0QxMV9CTEVORF9JTlZfREVTVF9BTFBIQTsgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfQ09OU1RBTlRfQ09MT1I6ICAgICAgICAgICBkM2RCbGVuZCA9IEQzRDExX0JMRU5EX0JMRU5E
X0ZBQ1RPUjsgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRf
Q09MT1I6IGQzZEJsZW5kID0gRDNEMTFfQkxFTkRfSU5WX0JMRU5EX0ZBQ1RPUjsgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0NPTlNUQU5UX0FMUEhBOiAgICAgICAgICAgZDNkQmxlbmQgPSBEM0Qx
MV9CTEVORF9CTEVORF9GQUNUT1I7ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfT05FX01J
TlVTX0NPTlNUQU5UX0FMUEhBOiBkM2RCbGVuZCA9IEQzRDExX0JMRU5EX0lOVl9CTEVORF9GQUNU
T1I7ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TUkNfQUxQSEFfU0FUVVJBVEU6ICAgICAgIGQz
ZEJsZW5kID0gRDNEMTFfQkxFTkRfU1JDX0FMUEhBX1NBVDsgICAgICAgYnJlYWs7Ci0gICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBkM2RCbGVuZDsKLX0K
LQotRDNEMTFfQkxFTkRfT1AgQ29udmVydEJsZW5kT3AoR0xlbnVtIGdsQmxlbmRPcCkKLXsKLSAg
ICBEM0QxMV9CTEVORF9PUCBkM2RCbGVuZE9wID0gRDNEMTFfQkxFTkRfT1BfQUREOwotCi0gICAg
c3dpdGNoIChnbEJsZW5kT3ApCi0gICAgewotICAgICAgY2FzZSBHTF9GVU5DX0FERDogICAgICAg
ICAgICAgIGQzZEJsZW5kT3AgPSBEM0QxMV9CTEVORF9PUF9BREQ7ICAgICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfRlVOQ19TVUJUUkFDVDogICAgICAgICBkM2RCbGVuZE9wID0gRDNEMTFf
QkxFTkRfT1BfU1VCVFJBQ1Q7ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZVTkNfUkVWRVJT
RV9TVUJUUkFDVDogZDNkQmxlbmRPcCA9IEQzRDExX0JMRU5EX09QX1JFVl9TVUJUUkFDVDsgIGJy
ZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
ZDNkQmxlbmRPcDsKLX0KLQotVUlOVDggQ29udmVydENvbG9yTWFzayhib29sIHJlZCwgYm9vbCBn
cmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKQotewotICAgIFVJTlQ4IG1hc2sgPSAwOwotICAg
IGlmIChyZWQpCi0gICAgewotICAgICAgICBtYXNrIHw9IEQzRDExX0NPTE9SX1dSSVRFX0VOQUJM
RV9SRUQ7Ci0gICAgfQotICAgIGlmIChncmVlbikKLSAgICB7Ci0gICAgICAgIG1hc2sgfD0gRDNE
MTFfQ09MT1JfV1JJVEVfRU5BQkxFX0dSRUVOOwotICAgIH0KLSAgICBpZiAoYmx1ZSkKLSAgICB7
Ci0gICAgICAgIG1hc2sgfD0gRDNEMTFfQ09MT1JfV1JJVEVfRU5BQkxFX0JMVUU7Ci0gICAgfQot
ICAgIGlmIChhbHBoYSkKLSAgICB7Ci0gICAgICAgIG1hc2sgfD0gRDNEMTFfQ09MT1JfV1JJVEVf
RU5BQkxFX0FMUEhBOwotICAgIH0KLSAgICByZXR1cm4gbWFzazsKLX0KLQotRDNEMTFfQ1VMTF9N
T0RFIENvbnZlcnRDdWxsTW9kZShib29sIGN1bGxFbmFibGVkLCBHTGVudW0gY3VsbE1vZGUpCi17
Ci0gICAgRDNEMTFfQ1VMTF9NT0RFIGN1bGwgPSBEM0QxMV9DVUxMX05PTkU7Ci0KLSAgICBpZiAo
Y3VsbEVuYWJsZWQpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGN1bGxNb2RlKQotICAgICAgICB7
Ci0gICAgICAgICAgY2FzZSBHTF9GUk9OVDogICAgICAgICAgICBjdWxsID0gRDNEMTFfQ1VMTF9G
Uk9OVDsgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9CQUNLOiAgICAgICAgICAgICBjdWxs
ID0gRDNEMTFfQ1VMTF9CQUNLOyAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GUk9OVF9B
TkRfQkFDSzogICBjdWxsID0gRDNEMTFfQ1VMTF9OT05FOyAgICAgYnJlYWs7Ci0gICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAg
ewotICAgICAgICBjdWxsID0gRDNEMTFfQ1VMTF9OT05FOwotICAgIH0KLQotICAgIHJldHVybiBj
dWxsOwotfQotCi1EM0QxMV9DT01QQVJJU09OX0ZVTkMgQ29udmVydENvbXBhcmlzb24oR0xlbnVt
IGNvbXBhcmlzb24pCi17Ci0gICAgRDNEMTFfQ09NUEFSSVNPTl9GVU5DIGQzZENvbXAgPSBEM0Qx
MV9DT01QQVJJU09OX05FVkVSOwotICAgIHN3aXRjaCAoY29tcGFyaXNvbikKLSAgICB7Ci0gICAg
ICBjYXNlIEdMX05FVkVSOiAgICBkM2RDb21wID0gRDNEMTFfQ09NUEFSSVNPTl9ORVZFUjsgICAg
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9BTFdBWVM6ICAgZDNkQ29tcCA9IEQzRDExX0NP
TVBBUklTT05fQUxXQVlTOyAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTEVTUzogICAg
IGQzZENvbXAgPSBEM0QxMV9DT01QQVJJU09OX0xFU1M7ICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0xFUVVBTDogICBkM2RDb21wID0gRDNEMTFfQ09NUEFSSVNPTl9MRVNTX0VRVUFM
OyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9FUVVBTDogICAgZDNkQ29tcCA9IEQzRDExX0NP
TVBBUklTT05fRVFVQUw7ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfR1JFQVRFUjog
IGQzZENvbXAgPSBEM0QxMV9DT01QQVJJU09OX0dSRUFURVI7ICAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0dFUVVBTDogICBkM2RDb21wID0gRDNEMTFfQ09NUEFSSVNPTl9HUkVBVEVSX0VR
VUFMOyAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9OT1RFUVVBTDogZDNkQ29tcCA9IEQzRDExX0NP
TVBBUklTT05fTk9UX0VRVUFMOyAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGQzZENvbXA7Ci19Ci0KLUQzRDExX0RFUFRIX1dS
SVRFX01BU0sgQ29udmVydERlcHRoTWFzayhib29sIGRlcHRoV3JpdGVFbmFibGVkKQotewotICAg
IHJldHVybiBkZXB0aFdyaXRlRW5hYmxlZCA/IEQzRDExX0RFUFRIX1dSSVRFX01BU0tfQUxMIDog
RDNEMTFfREVQVEhfV1JJVEVfTUFTS19aRVJPOwotfQotCi1VSU5UOCBDb252ZXJ0U3RlbmNpbE1h
c2soR0x1aW50IHN0ZW5jaWxtYXNrKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxVSU5UOD4o
c3RlbmNpbG1hc2spOwotfQotCi1EM0QxMV9TVEVOQ0lMX09QIENvbnZlcnRTdGVuY2lsT3AoR0xl
bnVtIHN0ZW5jaWxPcCkKLXsKLSAgICBEM0QxMV9TVEVOQ0lMX09QIGQzZFN0ZW5jaWxPcCA9IEQz
RDExX1NURU5DSUxfT1BfS0VFUDsKLQotICAgIHN3aXRjaCAoc3RlbmNpbE9wKQotICAgIHsKLSAg
ICAgIGNhc2UgR0xfWkVSTzogICAgICBkM2RTdGVuY2lsT3AgPSBEM0QxMV9TVEVOQ0lMX09QX1pF
Uk87ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0tFRVA6ICAgICAgZDNkU3RlbmNpbE9wID0g
RDNEMTFfU1RFTkNJTF9PUF9LRUVQOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SRVBMQUNF
OiAgIGQzZFN0ZW5jaWxPcCA9IEQzRDExX1NURU5DSUxfT1BfUkVQTEFDRTsgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfSU5DUjogICAgICBkM2RTdGVuY2lsT3AgPSBEM0QxMV9TVEVOQ0lMX09QX0lO
Q1JfU0FUOyAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RFQ1I6ICAgICAgZDNkU3RlbmNpbE9wID0g
RDNEMTFfU1RFTkNJTF9PUF9ERUNSX1NBVDsgIGJyZWFrOwotICAgICAgY2FzZSBHTF9JTlZFUlQ6
ICAgIGQzZFN0ZW5jaWxPcCA9IEQzRDExX1NURU5DSUxfT1BfSU5WRVJUOyAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfSU5DUl9XUkFQOiBkM2RTdGVuY2lsT3AgPSBEM0QxMV9TVEVOQ0lMX09QX0lO
Q1I7ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RFQ1JfV1JBUDogZDNkU3RlbmNpbE9wID0g
RDNEMTFfU1RFTkNJTF9PUF9ERUNSOyAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZDNkU3RlbmNpbE9wOwotfQotCi1EM0QxMV9G
SUxURVIgQ29udmVydEZpbHRlcihHTGVudW0gbWluRmlsdGVyLCBHTGVudW0gbWFnRmlsdGVyLCBm
bG9hdCBtYXhBbmlzb3Ryb3B5KQotewotICAgIGlmIChtYXhBbmlzb3Ryb3B5ID4gMS4wZikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBEM0QxMV9FTkNPREVfQU5JU09UUk9QSUNfRklMVEVSKGZhbHNl
KTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgRDNEMTFfRklMVEVSX1RZUEUgZHhN
aW4gPSBEM0QxMV9GSUxURVJfVFlQRV9QT0lOVDsKLSAgICAgICAgRDNEMTFfRklMVEVSX1RZUEUg
ZHhNaXAgPSBEM0QxMV9GSUxURVJfVFlQRV9QT0lOVDsKLSAgICAgICAgc3dpdGNoIChtaW5GaWx0
ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX05FQVJFU1Q6ICAgICAgICAgICAgICAg
IGR4TWluID0gRDNEMTFfRklMVEVSX1RZUEVfUE9JTlQ7ICBkeE1pcCA9IEQzRDExX0ZJTFRFUl9U
WVBFX1BPSU5UOyAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9MSU5FQVI6ICAgICAgICAgICAg
ICAgICBkeE1pbiA9IEQzRDExX0ZJTFRFUl9UWVBFX0xJTkVBUjsgZHhNaXAgPSBEM0QxMV9GSUxU
RVJfVFlQRV9QT0lOVDsgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBf
TkVBUkVTVDogZHhNaW4gPSBEM0QxMV9GSUxURVJfVFlQRV9QT0lOVDsgIGR4TWlwID0gRDNEMTFf
RklMVEVSX1RZUEVfUE9JTlQ7ICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0xJTkVBUl9NSVBN
QVBfTkVBUkVTVDogIGR4TWluID0gRDNEMTFfRklMVEVSX1RZUEVfTElORUFSOyBkeE1pcCA9IEQz
RDExX0ZJTFRFUl9UWVBFX1BPSU5UOyAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9ORUFSRVNU
X01JUE1BUF9MSU5FQVI6ICBkeE1pbiA9IEQzRDExX0ZJTFRFUl9UWVBFX1BPSU5UOyAgZHhNaXAg
PSBEM0QxMV9GSUxURVJfVFlQRV9MSU5FQVI7IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfTElO
RUFSX01JUE1BUF9MSU5FQVI6ICAgZHhNaW4gPSBEM0QxMV9GSUxURVJfVFlQRV9MSU5FQVI7IGR4
TWlwID0gRDNEMTFfRklMVEVSX1RZUEVfTElORUFSOyBicmVhazsKLSAgICAgICAgICBkZWZhdWx0
OiAgICAgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBEM0QxMV9GSUxURVJfVFlQRSBkeE1hZyA9IEQzRDExX0ZJTFRFUl9UWVBFX1BPSU5UOwot
ICAgICAgICBzd2l0Y2ggKG1hZ0ZpbHRlcikKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xf
TkVBUkVTVDogZHhNYWcgPSBEM0QxMV9GSUxURVJfVFlQRV9QT0lOVDsgIGJyZWFrOwotICAgICAg
ICAgIGNhc2UgR0xfTElORUFSOiAgZHhNYWcgPSBEM0QxMV9GSUxURVJfVFlQRV9MSU5FQVI7IGJy
ZWFrOwotICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHJldHVybiBEM0QxMV9FTkNPREVfQkFTSUNfRklMVEVSKGR4TWluLCBkeE1h
ZywgZHhNaXAsIGZhbHNlKTsKLSAgICB9Ci19Ci0KLUQzRDExX1RFWFRVUkVfQUREUkVTU19NT0RF
IENvbnZlcnRUZXh0dXJlV3JhcChHTGVudW0gd3JhcCkKLXsKLSAgICBzd2l0Y2ggKHdyYXApCi0g
ICAgewotICAgICAgY2FzZSBHTF9SRVBFQVQ6ICAgICAgICAgIHJldHVybiBEM0QxMV9URVhUVVJF
X0FERFJFU1NfV1JBUDsKLSAgICAgIGNhc2UgR0xfQ0xBTVBfVE9fRURHRTogICByZXR1cm4gRDNE
MTFfVEVYVFVSRV9BRERSRVNTX0NMQU1QOwotICAgICAgY2FzZSBHTF9NSVJST1JFRF9SRVBFQVQ6
IHJldHVybiBEM0QxMV9URVhUVVJFX0FERFJFU1NfTUlSUk9SOwotICAgICAgZGVmYXVsdDogICAg
ICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEQzRDExX1RF
WFRVUkVfQUREUkVTU19XUkFQOwotfQotCi1GTE9BVCBDb252ZXJ0TWluTE9EKEdMZW51bSBtaW5G
aWx0ZXIsIHVuc2lnbmVkIGludCBsb2RPZmZzZXQpCi17Ci0gICAgcmV0dXJuIChtaW5GaWx0ZXIg
PT0gR0xfTkVBUkVTVCB8fCBtaW5GaWx0ZXIgPT0gR0xfTElORUFSKSA/IHN0YXRpY19jYXN0PGZs
b2F0Pihsb2RPZmZzZXQpIDogLUZMVF9NQVg7Ci19Ci0KLUZMT0FUIENvbnZlcnRNYXhMT0QoR0xl
bnVtIG1pbkZpbHRlciwgdW5zaWduZWQgaW50IGxvZE9mZnNldCkKLXsKLSAgICByZXR1cm4gKG1p
bkZpbHRlciA9PSBHTF9ORUFSRVNUIHx8IG1pbkZpbHRlciA9PSBHTF9MSU5FQVIpID8gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGxvZE9mZnNldCkgOiBGTFRfTUFYOwotfQotCi19Ci0KLW5hbWVzcGFjZSBk
M2QxMV9nbAotewotCi1HTGVudW0gQ29udmVydEJhY2tCdWZmZXJGb3JtYXQoRFhHSV9GT1JNQVQg
Zm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjhHOEI4QThfVU5PUk06IHJldHVybiBHTF9SR0JBOF9PRVM7Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOiByZXR1cm4gR0xfQkdSQThfRVhUOwotICAgICAgZGVm
YXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gR0xfUkdC
QThfT0VTOwotfQotCi1HTGVudW0gQ29udmVydERlcHRoU3RlbmNpbEZvcm1hdChEWEdJX0ZPUk1B
VCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9VTktOT1dOOiByZXR1cm4gR0xfTk9ORTsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
RDE2X1VOT1JNOiByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UMTY7Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOiByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7
Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJl
dHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLX0KLQotR0xlbnVtIENvbnZlcnRSZW5kZXJi
dWZmZXJGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQot
ICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06Ci0gICAgICAgIHJl
dHVybiBHTF9CR1JBOF9FWFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JN
OgotICAgICAgICByZXR1cm4gR0xfUkdCQThfT0VTOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9E
MTZfVU5PUk06Ci0gICAgICAgIHJldHVybiBHTF9ERVBUSF9DT01QT05FTlQxNjsKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ6Ci0gICAgICAgIHJldHVybiBHTF9ERVBU
SDI0X1NURU5DSUw4X09FUzsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX1JHQkE4X09FUzsKLX0KLQotR0xlbnVtIENvbnZlcnRU
ZXh0dXJlSW50ZXJuYWxGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAo
Zm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk06Ci0g
ICAgICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0E4X1VO
T1JNOgotICAgICAgICByZXR1cm4gR0xfQUxQSEE4X0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkMxX1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
MV9FWFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STToKLSAgICAgICAgcmV0dXJu
IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU7Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0JDM19VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RY
VDVfQU5HTEU7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDoKLSAg
ICAgICAgcmV0dXJuIEdMX1JHQkEzMkZfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJH
MzJCMzJfRkxPQVQ6Ci0gICAgICAgIHJldHVybiBHTF9SR0IzMkZfRVhUOwotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6Ci0gICAgICAgIHJldHVybiBHTF9SR0JBMTZG
X0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06Ci0gICAgICAgIHJl
dHVybiBHTF9CR1JBOF9FWFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1VOT1JNOgotICAg
ICAgICByZXR1cm4gR0xfUjhfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JN
OgotICAgICAgICByZXR1cm4gR0xfUkc4X0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2
X0ZMT0FUOgotICAgICAgICByZXR1cm4gR0xfUjE2Rl9FWFQ7Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1IxNkcxNl9GTE9BVDoKLSAgICAgICAgcmV0dXJuIEdMX1JHMTZGX0VYVDsKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfRDE2X1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9O
RU5UMTY7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOgotICAgICAg
ICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X1VOS05PV046Ci0gICAgICAgIHJldHVybiBHTF9OT05FOwotICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gR0xfUkdCQThfT0VTOwotfQot
Ci19Ci0KLW5hbWVzcGFjZSBnbF9kM2QxMQotewotCi1EWEdJX0ZPUk1BVCBDb252ZXJ0UmVuZGVy
YnVmZmVyRm9ybWF0KEdMZW51bSBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAg
ewotICAgICAgY2FzZSBHTF9SR0JBNDoKLSAgICAgIGNhc2UgR0xfUkdCNV9BMToKLSAgICAgIGNh
c2UgR0xfUkdCQThfT0VTOgotICAgICAgY2FzZSBHTF9SR0I1NjU6Ci0gICAgICBjYXNlIEdMX1JH
QjhfT0VTOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk07Ci0gICAg
ICBjYXNlIEdMX0JHUkE4X0VYVDoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0I4RzhSOEE4
X1VOT1JNOwotICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgICAgcmV0dXJu
IERYR0lfRk9STUFUX0QxNl9VTk9STTsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRFWDg6Ci0g
ICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgotICAgICAgICByZXR1cm4gRFhHSV9G
T1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNI
QUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STTsK
LX0KLQotRFhHSV9GT1JNQVQgQ29udmVydFRleHR1cmVGb3JtYXQoR0xlbnVtIGludGVybmFsZm9y
bWF0KQotewotICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBH
TF9SR0I1NjU6Ci0gICAgICBjYXNlIEdMX1JHQkE0OgotICAgICAgY2FzZSBHTF9SR0I1X0ExOgot
ICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgIGNhc2UgR0xfUkdCQThfT0VTOgotICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0U4X0VYVDoKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOF9BTFBIQThf
RVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk07Ci0gICAgICBj
YXNlIEdMX0FMUEhBOF9FWFQ6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9BOF9VTk9STTsK
LSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICAgIGNhc2Ug
R0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZP
Uk1BVF9CQzFfVU5PUk07Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNf
QU5HTEU6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9CQzJfVU5PUk07Ci0gICAgICBjYXNl
IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgIHJldHVybiBEWEdJ
X0ZPUk1BVF9CQzNfVU5PUk07Ci0gICAgICBjYXNlIEdMX1JHQkEzMkZfRVhUOgotICAgICAgY2Fz
ZSBHTF9BTFBIQTMyRl9FWFQ6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQ6
Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQ7Ci0gICAgICBj
YXNlIEdMX1JHQjMyRl9FWFQ6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTMyRl9FWFQ6Ci0gICAg
ICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQ7Ci0gICAgICBjYXNlIEdM
X1JHQkExNkZfRVhUOgotICAgICAgY2FzZSBHTF9BTFBIQTE2Rl9FWFQ6Ci0gICAgICBjYXNlIEdM
X0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6Ci0gICAgICBjYXNlIEdMX1JHQjE2Rl9FWFQ6Ci0gICAg
ICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9S
MTZHMTZCMTZBMTZfRkxPQVQ7Ci0gICAgICBjYXNlIEdMX0JHUkE4X0VYVDoKLSAgICAgICAgcmV0
dXJuIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOwotICAgICAgY2FzZSBHTF9SOF9FWFQ6Ci0g
ICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SOF9VTk9STTsKLSAgICAgIGNhc2UgR0xfUkc4X0VY
VDoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1I4RzhfVU5PUk07Ci0gICAgICBjYXNlIEdM
X1IxNkZfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjE2X0ZMT0FUOwotICAgICAg
Y2FzZSBHTF9SRzE2Rl9FWFQ6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMTZHMTZfRkxP
QVQ7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgICByZXR1cm4gRFhH
SV9GT1JNQVRfRDE2X1VOT1JNOwotICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVM6
Ci0gICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgotICAgICAgICByZXR1cm4gRFhH
SV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ7Ci0gICAgICBjYXNlIEdMX05PTkU6Ci0gICAgICAg
IHJldHVybiBEWEdJX0ZPUk1BVF9VTktOT1dOOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5S
RUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5P
Uk07Ci19Ci0KLX0KLQotbmFtZXNwYWNlIGQzZDExCi17Ci0KLXZvaWQgU2V0UG9zaXRpb25UZXhD
b29yZFZlcnRleChQb3NpdGlvblRleENvb3JkVmVydGV4KiB2ZXJ0ZXgsIGZsb2F0IHgsIGZsb2F0
IHksIGZsb2F0IHUsIGZsb2F0IHYpCi17Ci0gICAgdmVydGV4LT54ID0geDsKLSAgICB2ZXJ0ZXgt
PnkgPSB5OwotICAgIHZlcnRleC0+dSA9IHU7Ci0gICAgdmVydGV4LT52ID0gdjsKLX0KLQotdm9p
ZCBTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgoUG9zaXRpb25EZXB0aENvbG9yVmVydGV4KiB2
ZXJ0ZXgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBnbDo6Q29sb3IgJmNvbG9yKQotewotICAgIHZlcnRleC0+eCA9IHg7
Ci0gICAgdmVydGV4LT55ID0geTsKLSAgICB2ZXJ0ZXgtPnogPSB6OwotICAgIHZlcnRleC0+ciA9
IGNvbG9yLnJlZDsKLSAgICB2ZXJ0ZXgtPmcgPSBjb2xvci5ncmVlbjsKLSAgICB2ZXJ0ZXgtPmIg
PSBjb2xvci5ibHVlOwotICAgIHZlcnRleC0+YSA9IGNvbG9yLmFscGhhOwotfQotCi1zaXplX3Qg
Q29tcHV0ZVBpeGVsU2l6ZUJpdHMoRFhHSV9GT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAo
Zm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjFfVU5PUk06Ci0gICAgICAg
IHJldHVybiAxOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX0E4X1VOT1JNOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9SOF9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOF9TTk9STToK
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1I4X1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1VOT1JNOgotICAgICAgICBy
ZXR1cm4gODsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CNUc1UjVBMV9VTk9STToKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQjVHNlI1X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9E
MTZfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNl9GTE9BVDoKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjE2X1NJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNl9TTk9STToK
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SMTZfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X1VOT1JNOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1NJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4Rzhf
U05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfVFlQRUxFU1M6Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX1I4RzhfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9VTk9S
TToKLSAgICAgICAgcmV0dXJuIDE2OwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOFg4
X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhYOF9VTk9STToKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4WDhfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QzMl9GTE9B
VDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FUX1M4WDI0X1VJTlQ6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0c4UjhfRzhCOF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjEwRzEwQjEwX1hSX0JJQVNfQTJfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxMEcx
MEIxMEEyX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTBHMTBCMTBBMl9VSU5U
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTBHMTBCMTBBMl9VTk9STToKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjExRzExQjEwX0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZH
MTZfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9TSU5UOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9SMTZHMTZfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcx
Nl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X1VJTlQ6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX1IxNkcxNl9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjI0
X1VOT1JNX1g4X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMjRHOF9UWVBFTEVT
UzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyX0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SMzJfRkxPQVRfWDhYMjRfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1Iz
Ml9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJfVFlQRUxFU1M6Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX1IzMl9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X0I4Rzhf
VU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1NJTlQ6Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX1I4RzhCOEE4X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4
QjhBOF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVUlOVDoKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1I4RzhCOEE4X1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOEE4
X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STToKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjlHOUI5RTVfU0hBUkVERVhQOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9YMjRfVFlQ
RUxFU1NfRzhfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfWDMyX1RZUEVMRVNTX0c4WDI0
X1VJTlQ6Ci0gICAgICAgIHJldHVybiAzMjsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZH
MTZCMTZBMTZfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9TSU5U
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfU05PUk06Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjE2RzE2QjE2QTE2X1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkEx
Nl9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FUOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9SMzJHMzJfU0lOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMy
X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJfVUlOVDoKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfUjMyRzhYMjRfVFlQRUxFU1M6Ci0gICAgICAgIHJldHVybiA2NDsKLQot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX1IzMkczMkIzMl9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJf
VFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9VSU5UOgotICAgICAg
ICByZXR1cm4gOTY7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FU
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfU0lOVDoKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9SMzJHMzJCMzJBMzJfVUlOVDoKLSAgICAgICAgcmV0dXJuIDEyODsKLQotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9CQzFfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9S
TToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDNF9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1RZUEVMRVNT
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVU5PUk06Ci0gICAgICAgIHJldHVybiA0Owot
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfQkMyX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk1fU1JHQjoK
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzNfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STV9TUkdCOgot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0JDNV9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1VOT1JNOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1NGMTY6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhf
VFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVUYxNjoKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkM3X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5P
Uk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9STV9TUkdCOgotICAgICAgICByZXR1
cm4gODsKLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1z
aXplX3QgQ29tcHV0ZUJsb2NrU2l6ZUJpdHMoRFhHSV9GT1JNQVQgZm9ybWF0KQotewotICAgIHN3
aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1RZUEVMRVNT
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0JDMV9VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfU05PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkM0X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVFlQRUxFU1M6Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMy
X1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19UWVBFTEVTUzoKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNf
VU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1NOT1JNOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzVfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9V
Tk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9TRjE2OgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9CQzZIX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1VGMTY6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfQkM3X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk1fU1JHQjoK
LSAgICAgICAgcmV0dXJuIENvbXB1dGVQaXhlbFNpemVCaXRzKGZvcm1hdCkgKiAxNjsKLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLX0KLQotYm9vbCBJc0NvbXByZXNzZWQoRFhHSV9GT1JNQVQgZm9ybWF0KQotewotICAgIHN3
aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1RZUEVMRVNT
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0JDMV9VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfU05PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkM0X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVFlQRUxFU1M6Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMy
X1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19UWVBFTEVTUzoKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNf
VU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1NOT1JNOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzVfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9V
Tk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9TRjE2OgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9CQzZIX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1VGMTY6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfQkM3X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk1fU1JHQjoK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1VOS05PV046Ci0g
ICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLXVuc2lnbmVkIGludCBHZXRU
ZXh0dXJlRm9ybWF0RGltZW5zaW9uQWxpZ25tZW50KERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAg
ICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9UWVBF
TEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9CQzFfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1NOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDNF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1RZUEVMRVNTOgot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0JDMl9VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVFlQRUxFU1M6Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
QkMzX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9TTk9STToKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkM1X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzVfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfU0YxNjoKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkM2SF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9V
RjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDN19VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1VOT1JNX1NS
R0I6Ci0gICAgICAgIHJldHVybiA0OwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9VTktOT1dOOgot
ICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gMTsKLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLX0KLQotYm9vbCBJc0RlcHRoU3RlbmNpbEZvcm1h
dChEWEdJX0ZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVRfUzhYMjRfVUlOVDoKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfRDMyX0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhf
VUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDE2X1VOT1JNOgotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0K
LURYR0lfRk9STUFUIEdldERlcHRoVGV4dHVyZUZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpCi17
Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJf
RkxPQVRfUzhYMjRfVUlOVDogcmV0dXJuIERYR0lfRk9STUFUX1IzMkc4WDI0X1RZUEVMRVNTOwot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVQ6ICAgICAgICAgICAgcmV0dXJuIERYR0lf
Rk9STUFUX1IzMl9UWVBFTEVTUzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4
X1VJTlQ6ICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMjRHOF9UWVBFTEVTUzsKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfRDE2X1VOT1JNOiAgICAgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMTZf
VFlQRUxFU1M7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgICAgICAgICAgICAgICBy
ZXR1cm4gRFhHSV9GT1JNQVRfVU5LTk9XTjsKLSAgICB9Ci19Ci0KLURYR0lfRk9STUFUIEdldERl
cHRoU2hhZGVyUmVzb3VyY2VGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRj
aCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FUX1M4WDI0
X1VJTlQ6IHJldHVybiBEWEdJX0ZPUk1BVF9SMzJfRkxPQVRfWDhYMjRfVFlQRUxFU1M7Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX0QzMl9GTE9BVDogICAgICAgICAgICByZXR1cm4gRFhHSV9GT1JN
QVRfUjMyX1VJTlQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOiAg
ICByZXR1cm4gRFhHSV9GT1JNQVRfUjI0X1VOT1JNX1g4X1RZUEVMRVNTOwotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9EMTZfVU5PUk06ICAgICAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1IxNl9V
Tk9STTsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgICAgICAgICAgIHJldHVy
biBEWEdJX0ZPUk1BVF9VTktOT1dOOwotICAgIH0KLX0KLQotSFJFU1VMVCBTZXREZWJ1Z05hbWUo
SUQzRDExRGV2aWNlQ2hpbGQgKnJlc291cmNlLCBjb25zdCBjaGFyICpuYW1lKQotewotI2lmIGRl
ZmluZWQoX0RFQlVHKQotICAgIHJldHVybiByZXNvdXJjZS0+U2V0UHJpdmF0ZURhdGEoV0tQRElE
X0QzRERlYnVnT2JqZWN0TmFtZSwgc3RybGVuKG5hbWUpLCBuYW1lKTsKLSNlbHNlCi0gICAgcmV0
dXJuIFNfT0s7Ci0jZW5kaWYKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9yZW5kZXJlcjExX3V0aWxzLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3JlbmRlcmVyMTFfdXRpbHMu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJjNDhjMWExMzVhNWQ4OGE4OWJkNTY4
NTY5ZmQ2ZTlkZDY3NzNlZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3Jl
bmRlcmVyMTFfdXRpbHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
Ci0vLwotCi0vLyByZW5kZXJlcjExX3V0aWxzLmg6IENvbnZlcnNpb24gZnVuY3Rpb25zIGFuZCBv
dGhlciB1dGlsaXR5IHJvdXRpbmVzCi0vLyBzcGVjaWZpYyB0byB0aGUgRDNEMTEgcmVuZGVyZXIu
Ci0KLSNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUkVSMTFfVVRJTFNfSAotI2RlZmlu
ZSBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSRVIxMV9VVElMU19ICi0KLSNpbmNsdWRlICJsaWJH
TEVTdjIvYW5nbGV0eXBlcy5oIgotCi1uYW1lc3BhY2UgZ2xfZDNkMTEKLXsKLQotRDNEMTFfQkxF
TkQgQ29udmVydEJsZW5kRnVuYyhHTGVudW0gZ2xCbGVuZCwgYm9vbCBpc0FscGhhKTsKLUQzRDEx
X0JMRU5EX09QIENvbnZlcnRCbGVuZE9wKEdMZW51bSBnbEJsZW5kT3ApOwotVUlOVDggQ29udmVy
dENvbG9yTWFzayhib29sIG1hc2tSZWQsIGJvb2wgbWFza0dyZWVuLCBib29sIG1hc2tCbHVlLCBi
b29sIG1hc2tBbHBoYSk7Ci0KLUQzRDExX0NVTExfTU9ERSBDb252ZXJ0Q3VsbE1vZGUoYm9vbCBj
dWxsRW5hYmxlZCwgR0xlbnVtIGN1bGxNb2RlKTsKLQotRDNEMTFfQ09NUEFSSVNPTl9GVU5DIENv
bnZlcnRDb21wYXJpc29uKEdMZW51bSBjb21wYXJpc29uKTsKLUQzRDExX0RFUFRIX1dSSVRFX01B
U0sgQ29udmVydERlcHRoTWFzayhib29sIGRlcHRoV3JpdGVFbmFibGVkKTsKLVVJTlQ4IENvbnZl
cnRTdGVuY2lsTWFzayhHTHVpbnQgc3RlbmNpbG1hc2spOwotRDNEMTFfU1RFTkNJTF9PUCBDb252
ZXJ0U3RlbmNpbE9wKEdMZW51bSBzdGVuY2lsT3ApOwotCi1EM0QxMV9GSUxURVIgQ29udmVydEZp
bHRlcihHTGVudW0gbWluRmlsdGVyLCBHTGVudW0gbWFnRmlsdGVyLCBmbG9hdCBtYXhBbmlzb3Ry
b3B5KTsKLUQzRDExX1RFWFRVUkVfQUREUkVTU19NT0RFIENvbnZlcnRUZXh0dXJlV3JhcChHTGVu
dW0gd3JhcCk7Ci1GTE9BVCBDb252ZXJ0TWluTE9EKEdMZW51bSBtaW5GaWx0ZXIsIHVuc2lnbmVk
IGludCBsb2RPZmZzZXQpOwotRkxPQVQgQ29udmVydE1heExPRChHTGVudW0gbWluRmlsdGVyLCB1
bnNpZ25lZCBpbnQgbG9kT2Zmc2V0KTsKLQotRFhHSV9GT1JNQVQgQ29udmVydFJlbmRlcmJ1ZmZl
ckZvcm1hdChHTGVudW0gZm9ybWF0KTsKLURYR0lfRk9STUFUIENvbnZlcnRUZXh0dXJlRm9ybWF0
KEdMZW51bSBmb3JtYXQpOwotfQotCi1uYW1lc3BhY2UgZDNkMTFfZ2wKLXsKLQotR0xlbnVtIENv
bnZlcnRCYWNrQnVmZmVyRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCk7Ci1HTGVudW0gQ29udmVy
dERlcHRoU3RlbmNpbEZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpOwotR0xlbnVtIENvbnZlcnRS
ZW5kZXJidWZmZXJGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLUdMZW51bSBDb252ZXJ0VGV4
dHVyZUludGVybmFsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCk7Ci0KLX0KLQotbmFtZXNwYWNl
IGQzZDExCi17Ci0KLXN0cnVjdCBQb3NpdGlvblRleENvb3JkVmVydGV4Ci17Ci0gICAgZmxvYXQg
eCwgeTsKLSAgICBmbG9hdCB1LCB2OwotfTsKLXZvaWQgU2V0UG9zaXRpb25UZXhDb29yZFZlcnRl
eChQb3NpdGlvblRleENvb3JkVmVydGV4KiB2ZXJ0ZXgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0
IHUsIGZsb2F0IHYpOwotCi1zdHJ1Y3QgUG9zaXRpb25EZXB0aENvbG9yVmVydGV4Ci17Ci0gICAg
ZmxvYXQgeCwgeSwgejsKLSAgICBmbG9hdCByLCBnLCBiLCBhOwotfTsKLXZvaWQgU2V0UG9zaXRp
b25EZXB0aENvbG9yVmVydGV4KFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCogdmVydGV4LCBmbG9h
dCB4LCBmbG9hdCB5LCBmbG9hdCB6LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZ2w6OkNvbG9yICZjb2xvcik7Ci0KLXNpemVfdCBDb21wdXRlUGl4ZWxTaXplQml0cyhE
WEdJX0ZPUk1BVCBmb3JtYXQpOwotc2l6ZV90IENvbXB1dGVCbG9ja1NpemVCaXRzKERYR0lfRk9S
TUFUIGZvcm1hdCk7Ci0KLWJvb2wgSXNDb21wcmVzc2VkKERYR0lfRk9STUFUIGZvcm1hdCk7Ci11
bnNpZ25lZCBpbnQgR2V0VGV4dHVyZUZvcm1hdERpbWVuc2lvbkFsaWdubWVudChEWEdJX0ZPUk1B
VCBmb3JtYXQpOwotCi1ib29sIElzRGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1h
dCk7Ci1EWEdJX0ZPUk1BVCBHZXREZXB0aFRleHR1cmVGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0
KTsKLURYR0lfRk9STUFUIEdldERlcHRoU2hhZGVyUmVzb3VyY2VGb3JtYXQoRFhHSV9GT1JNQVQg
Zm9ybWF0KTsKLQotSFJFU1VMVCBTZXREZWJ1Z05hbWUoSUQzRDExRGV2aWNlQ2hpbGQgKnJlc291
cmNlLCBjb25zdCBjaGFyICpuYW1lKTsKLQotaW5saW5lIGJvb2wgaXNEZXZpY2VMb3N0RXJyb3Io
SFJFU1VMVCBlcnJvckNvZGUpCi17Ci0gICAgc3dpdGNoIChlcnJvckNvZGUpCi0gICAgewotICAg
ICAgY2FzZSBEWEdJX0VSUk9SX0RFVklDRV9IVU5HOgotICAgICAgY2FzZSBEWEdJX0VSUk9SX0RF
VklDRV9SRU1PVkVEOgotICAgICAgY2FzZSBEWEdJX0VSUk9SX0RFVklDRV9SRVNFVDoKLSAgICAg
IGNhc2UgRFhHSV9FUlJPUl9EUklWRVJfSU5URVJOQUxfRVJST1I6Ci0gICAgICBjYXNlIERYR0lf
RVJST1JfTk9UX0NVUlJFTlRMWV9BVkFJTEFCTEU6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotfQotCi0jZW5k
aWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUkVSMTFfVVRJTFNfSApkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9yZW5kZXJlcjlf
dXRpbHMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9yZW5kZXJlcjlfdXRpbHMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTc1
ZDQ2NWUzY2Y4MDVmODY4YWI2Y2UyNzkzODBkZTJlOWIxYWI3Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXI5X3V0aWxzLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDUwMCArMCwwIEBACi0jaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLS8vIHJlbmRlcmVyOV91dGlscy5jcHA6IENvbnZlcnNpb24gZnVuY3Rpb25zIGFuZCBvdGhl
ciB1dGlsaXR5IHJvdXRpbmVzCi0vLyBzcGVjaWZpYyB0byB0aGUgRDNEOSByZW5kZXJlci4KLQot
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9yZW5kZXJlcjlfdXRpbHMuaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgot
Ci0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0KLW5hbWVzcGFjZSBnbF9kM2Q5Ci17Ci0KLUQz
RENNUEZVTkMgQ29udmVydENvbXBhcmlzb24oR0xlbnVtIGNvbXBhcmlzb24pCi17Ci0gICAgRDNE
Q01QRlVOQyBkM2RDb21wID0gRDNEQ01QX0FMV0FZUzsKLSAgICBzd2l0Y2ggKGNvbXBhcmlzb24p
Ci0gICAgewotICAgICAgY2FzZSBHTF9ORVZFUjogICAgZDNkQ29tcCA9IEQzRENNUF9ORVZFUjsg
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9BTFdBWVM6ICAgZDNkQ29tcCA9IEQzRENNUF9B
TFdBWVM7ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MRVNTOiAgICAgZDNkQ29tcCA9IEQz
RENNUF9MRVNTOyAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MRVFVQUw6ICAgZDNkQ29t
cCA9IEQzRENNUF9MRVNTRVFVQUw7ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9FUVVBTDogICAg
ZDNkQ29tcCA9IEQzRENNUF9FUVVBTDsgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9HUkVB
VEVSOiAgZDNkQ29tcCA9IEQzRENNUF9HUkVBVEVSOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9HRVFVQUw6ICAgZDNkQ29tcCA9IEQzRENNUF9HUkVBVEVSRVFVQUw7IGJyZWFrOwotICAgICAg
Y2FzZSBHTF9OT1RFUVVBTDogZDNkQ29tcCA9IEQzRENNUF9OT1RFUVVBTDsgICAgIGJyZWFrOwot
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZDNkQ29t
cDsKLX0KLQotRDNEQ09MT1IgQ29udmVydENvbG9yKGdsOjpDb2xvciBjb2xvcikKLXsKLSAgICBy
ZXR1cm4gRDNEQ09MT1JfUkdCQShnbDo6dW5vcm08OD4oY29sb3IucmVkKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oY29sb3IuZ3JlZW4pLAotICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsOjp1bm9ybTw4Pihjb2xvci5ibHVlKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6dW5vcm08OD4oY29sb3IuYWxwaGEpKTsKLX0KLQotRDNEQkxFTkQgQ29udmVydEJs
ZW5kRnVuYyhHTGVudW0gYmxlbmQpCi17Ci0gICAgRDNEQkxFTkQgZDNkQmxlbmQgPSBEM0RCTEVO
RF9aRVJPOwotCi0gICAgc3dpdGNoIChibGVuZCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1pFUk86
ICAgICAgICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9aRVJPOyAgICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX09ORTogICAgICAgICAgICAgICAgICAgICAgZDNkQmxlbmQg
PSBEM0RCTEVORF9PTkU7ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NSQ19DT0xP
UjogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9TUkNDT0xPUjsgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQ09MT1I6ICAgICAgZDNkQmxlbmQgPSBE
M0RCTEVORF9JTlZTUkNDT0xPUjsgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RTVF9DT0xPUjog
ICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9ERVNUQ09MT1I7ICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQ09MT1I6ICAgICAgZDNkQmxlbmQgPSBEM0RC
TEVORF9JTlZERVNUQ09MT1I7ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NSQ19BTFBIQTogICAg
ICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9TUkNBTFBIQTsgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQUxQSEE6ICAgICAgZDNkQmxlbmQgPSBEM0RCTEVO
RF9JTlZTUkNBTFBIQTsgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RTVF9BTFBIQTogICAgICAg
ICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9ERVNUQUxQSEE7ICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQUxQSEE6ICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9J
TlZERVNUQUxQSEE7ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0NPTlNUQU5UX0NPTE9SOiAgICAg
ICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9CTEVOREZBQ1RPUjsgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUjogZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZC
TEVOREZBQ1RPUjsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0NPTlNUQU5UX0FMUEhBOiAgICAgICAg
ICAgZDNkQmxlbmQgPSBEM0RCTEVORF9CTEVOREZBQ1RPUjsgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQTogZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZCTEVO
REZBQ1RPUjsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NSQ19BTFBIQV9TQVRVUkFURTogICAgICAg
ZDNkQmxlbmQgPSBEM0RCTEVORF9TUkNBTFBIQVNBVDsgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBkM2RCbGVuZDsKLX0KLQotRDNE
QkxFTkRPUCBDb252ZXJ0QmxlbmRPcChHTGVudW0gYmxlbmRPcCkKLXsKLSAgICBEM0RCTEVORE9Q
IGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX0FERDsKLQotICAgIHN3aXRjaCAoYmxlbmRPcCkKLSAg
ICB7Ci0gICAgICBjYXNlIEdMX0ZVTkNfQUREOiAgICAgICAgICAgICAgZDNkQmxlbmRPcCA9IEQz
REJMRU5ET1BfQUREOyAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GVU5DX1NVQlRSQUNU
OiAgICAgICAgIGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX1NVQlRSQUNUOyAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUOiBkM2RCbGVuZE9wID0gRDNEQkxFTkRP
UF9SRVZTVUJUUkFDVDsgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAg
IH0KLQotICAgIHJldHVybiBkM2RCbGVuZE9wOwotfQotCi1EM0RTVEVOQ0lMT1AgQ29udmVydFN0
ZW5jaWxPcChHTGVudW0gc3RlbmNpbE9wKQotewotICAgIEQzRFNURU5DSUxPUCBkM2RTdGVuY2ls
T3AgPSBEM0RTVEVOQ0lMT1BfS0VFUDsKLQotICAgIHN3aXRjaCAoc3RlbmNpbE9wKQotICAgIHsK
LSAgICAgIGNhc2UgR0xfWkVSTzogICAgICBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfWkVS
TzsgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0tFRVA6ICAgICAgZDNkU3RlbmNpbE9wID0gRDNE
U1RFTkNJTE9QX0tFRVA7ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SRVBMQUNFOiAgIGQzZFN0
ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9SRVBMQUNFOyBicmVhazsKLSAgICAgIGNhc2UgR0xfSU5D
UjogICAgICBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfSU5DUlNBVDsgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0RFQ1I6ICAgICAgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0RFQ1JTQVQ7
IGJyZWFrOwotICAgICAgY2FzZSBHTF9JTlZFUlQ6ICAgIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5D
SUxPUF9JTlZFUlQ7ICBicmVhazsKLSAgICAgIGNhc2UgR0xfSU5DUl9XUkFQOiBkM2RTdGVuY2ls
T3AgPSBEM0RTVEVOQ0lMT1BfSU5DUjsgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RFQ1JfV1JB
UDogZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0RFQ1I7ICAgIGJyZWFrOwotICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZDNkU3RlbmNpbE9wOwot
fQotCi1EM0RURVhUVVJFQUREUkVTUyBDb252ZXJ0VGV4dHVyZVdyYXAoR0xlbnVtIHdyYXApCi17
Ci0gICAgRDNEVEVYVFVSRUFERFJFU1MgZDNkV3JhcCA9IEQzRFRBRERSRVNTX1dSQVA7Ci0KLSAg
ICBzd2l0Y2ggKHdyYXApCi0gICAgewotICAgICAgY2FzZSBHTF9SRVBFQVQ6ICAgICAgICAgICAg
ZDNkV3JhcCA9IEQzRFRBRERSRVNTX1dSQVA7ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0NMQU1Q
X1RPX0VER0U6ICAgICBkM2RXcmFwID0gRDNEVEFERFJFU1NfQ0xBTVA7ICBicmVhazsKLSAgICAg
IGNhc2UgR0xfTUlSUk9SRURfUkVQRUFUOiAgIGQzZFdyYXAgPSBEM0RUQUREUkVTU19NSVJST1I7
IGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gZDNkV3JhcDsKLX0KLQotRDNEQ1VMTCBDb252ZXJ0Q3VsbE1vZGUoR0xlbnVtIGN1bGxGYWNl
LCBHTGVudW0gZnJvbnRGYWNlKQotewotICAgIEQzRENVTEwgY3VsbCA9IEQzRENVTExfQ0NXOwot
ICAgIHN3aXRjaCAoY3VsbEZhY2UpCi0gICAgewotICAgICAgY2FzZSBHTF9GUk9OVDoKLSAgICAg
ICAgY3VsbCA9IChmcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEQ1VMTF9DVyA6IEQzRENVTExfQ0NX
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JBQ0s6Ci0gICAgICAgIGN1bGwgPSAo
ZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRENVTExfQ0NXIDogRDNEQ1VMTF9DVyk7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9GUk9OVF9BTkRfQkFDSzoKLSAgICAgICAgY3VsbCA9IEQz
RENVTExfTk9ORTsgLy8gY3VsbGluZyB3aWxsIGJlIGhhbmRsZWQgZHVyaW5nIGRyYXcKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJl
dHVybiBjdWxsOwotfQotCi1EM0RDVUJFTUFQX0ZBQ0VTIENvbnZlcnRDdWJlRmFjZShHTGVudW0g
Y3ViZUZhY2UpCi17Ci0gICAgRDNEQ1VCRU1BUF9GQUNFUyBmYWNlID0gRDNEQ1VCRU1BUF9GQUNF
X1BPU0lUSVZFX1g7Ci0KLSAgICBzd2l0Y2ggKGN1YmVGYWNlKQotICAgIHsKLSAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgICAgICBmYWNlID0gRDNEQ1VCRU1B
UF9GQUNFX1BPU0lUSVZFX1g7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfTkVH
QVRJVkVfWDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWToKLSAgICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9QT1NJVElWRV9ZOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9Z
OgotICAgICAgICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX05FR0FUSVZFX1k7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAgICAg
IGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfUE9TSVRJVkVfWjsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgZmFjZSA9IEQz
RENVQkVNQVBfRkFDRV9ORUdBVElWRV9aOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhY2U7Ci19Ci0KLURXT1JEIENv
bnZlcnRDb2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBhbHBo
YSkKLXsKLSAgICByZXR1cm4gKHJlZCAgID8gRDNEQ09MT1JXUklURUVOQUJMRV9SRUQgICA6IDAp
IHwKLSAgICAgICAgICAgKGdyZWVuID8gRDNEQ09MT1JXUklURUVOQUJMRV9HUkVFTiA6IDApIHwK
LSAgICAgICAgICAgKGJsdWUgID8gRDNEQ09MT1JXUklURUVOQUJMRV9CTFVFICA6IDApIHwKLSAg
ICAgICAgICAgKGFscGhhID8gRDNEQ09MT1JXUklURUVOQUJMRV9BTFBIQSA6IDApOwotfQotCi1E
M0RURVhUVVJFRklMVEVSVFlQRSBDb252ZXJ0TWFnRmlsdGVyKEdMZW51bSBtYWdGaWx0ZXIsIGZs
b2F0IG1heEFuaXNvdHJvcHkpCi17Ci0gICAgaWYgKG1heEFuaXNvdHJvcHkgPiAxLjBmKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEQzRFRFWEZfQU5JU09UUk9QSUM7Ci0gICAgfQotCi0gICAgRDNE
VEVYVFVSRUZJTFRFUlRZUEUgZDNkTWFnRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKLSAgICBzd2l0
Y2ggKG1hZ0ZpbHRlcikKLSAgICB7Ci0gICAgICBjYXNlIEdMX05FQVJFU1Q6IGQzZE1hZ0ZpbHRl
ciA9IEQzRFRFWEZfUE9JTlQ7ICBicmVhazsKLSAgICAgIGNhc2UgR0xfTElORUFSOiAgZDNkTWFn
RmlsdGVyID0gRDNEVEVYRl9MSU5FQVI7IGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZDNkTWFnRmlsdGVyOwotfQotCi12b2lkIENvbnZl
cnRNaW5GaWx0ZXIoR0xlbnVtIG1pbkZpbHRlciwgRDNEVEVYVFVSRUZJTFRFUlRZUEUgKmQzZE1p
bkZpbHRlciwgRDNEVEVYVFVSRUZJTFRFUlRZUEUgKmQzZE1pcEZpbHRlciwgZmxvYXQgbWF4QW5p
c290cm9weSkKLXsKLSAgICBzd2l0Y2ggKG1pbkZpbHRlcikKLSAgICB7Ci0gICAgICBjYXNlIEdM
X05FQVJFU1Q6Ci0gICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX1BPSU5UOwotICAgICAg
ICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9OT05FOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfTElORUFSOgotICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9MSU5FQVI7Ci0g
ICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX05PTkU7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOgotICAgICAgICAqZDNkTWluRmlsdGVy
ID0gRDNEVEVYRl9QT0lOVDsKLSAgICAgICAgKmQzZE1pcEZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1Q6Ci0g
ICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX0xJTkVBUjsKLSAgICAgICAgKmQzZE1pcEZp
bHRlciA9IEQzRFRFWEZfUE9JTlQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9ORUFS
RVNUX01JUE1BUF9MSU5FQVI6Ci0gICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX1BPSU5U
OwotICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9MSU5FQVI7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUjoKLSAgICAgICAgKmQzZE1pbkZp
bHRlciA9IEQzRFRFWEZfTElORUFSOwotICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9M
SU5FQVI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgKmQzZE1pbkZp
bHRlciA9IEQzRFRFWEZfUE9JTlQ7Ci0gICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX05P
TkU7Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgaWYgKG1heEFuaXNvdHJv
cHkgPiAxLjBmKQotICAgIHsKLSAgICAgICAgKmQzZE1pbkZpbHRlciA9IEQzRFRFWEZfQU5JU09U
Uk9QSUM7Ci0gICAgfQotfQotCi1EM0RGT1JNQVQgQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChH
TGVudW0gZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2Ug
R0xfTk9ORTogICAgICAgICAgICAgICAgIHJldHVybiBEM0RGTVRfTlVMTDsKLSAgICAgIGNhc2Ug
R0xfUkdCQTQ6Ci0gICAgICBjYXNlIEdMX1JHQjVfQTE6Ci0gICAgICBjYXNlIEdMX1JHQkE4X09F
UzogICAgICAgICAgICByZXR1cm4gRDNERk1UX0E4UjhHOEI4OwotICAgICAgY2FzZSBHTF9SR0I1
NjU6ICAgICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9SNUc2QjU7Ci0gICAgICBjYXNlIEdMX1JH
QjhfT0VTOiAgICAgICAgICAgICByZXR1cm4gRDNERk1UX1g4UjhHOEI4OwotICAgICAgY2FzZSBH
TF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRFWDg6ICAgICAg
IAotICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzogcmV0dXJuIEQzREZNVF9EMjRT
ODsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgIHJldHVybiBEM0RGTVRfQThS
OEc4Qjg7Ci0gICAgfQotfQotCi1EM0RNVUxUSVNBTVBMRV9UWVBFIEdldE11bHRpc2FtcGxlVHlw
ZUZyb21TYW1wbGVzKEdMc2l6ZWkgc2FtcGxlcykKLXsKLSAgICBpZiAoc2FtcGxlcyA8PSAxKQot
ICAgICAgICByZXR1cm4gRDNETVVMVElTQU1QTEVfTk9ORTsKLSAgICBlbHNlCi0gICAgICAgIHJl
dHVybiAoRDNETVVMVElTQU1QTEVfVFlQRSlzYW1wbGVzOwotfQotCi19Ci0KLW5hbWVzcGFjZSBk
M2Q5X2dsCi17Ci0KLXVuc2lnbmVkIGludCBHZXRTdGVuY2lsU2l6ZShEM0RGT1JNQVQgc3RlbmNp
bEZvcm1hdCkKLXsKLSAgICBpZiAoc3RlbmNpbEZvcm1hdCA9PSBEM0RGTVRfSU5UWikKLSAgICB7
Ci0gICAgICAgIHJldHVybiA4OwotICAgIH0KLSAgICBzd2l0Y2goc3RlbmNpbEZvcm1hdCkKLSAg
ICB7Ci0gICAgICBjYXNlIEQzREZNVF9EMjRGUzg6Ci0gICAgICBjYXNlIEQzREZNVF9EMjRTODoK
LSAgICAgICAgcmV0dXJuIDg7Ci0gICAgICBjYXNlIEQzREZNVF9EMjRYNFM0OgotICAgICAgICBy
ZXR1cm4gNDsKLSAgICAgIGNhc2UgRDNERk1UX0QxNVMxOgotICAgICAgICByZXR1cm4gMTsKLSAg
ICAgIGNhc2UgRDNERk1UX0QxNl9MT0NLQUJMRToKLSAgICAgIGNhc2UgRDNERk1UX0QzMjoKLSAg
ICAgIGNhc2UgRDNERk1UX0QyNFg4OgotICAgICAgY2FzZSBEM0RGTVRfRDMyRl9MT0NLQUJMRToK
LSAgICAgIGNhc2UgRDNERk1UX0QxNjoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgLy9jYXNlIEQz
REZNVF9EMzJfTE9DS0FCTEU6ICByZXR1cm4gMDsgICAvLyBEaXJlY3RYIDlFeCBvbmx5Ci0gICAg
Ly9jYXNlIEQzREZNVF9TOF9MT0NLQUJMRTogICByZXR1cm4gODsgICAvLyBEaXJlY3RYIDlFeCBv
bmx5Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLXVuc2ln
bmVkIGludCBHZXRBbHBoYVNpemUoRDNERk9STUFUIGNvbG9yRm9ybWF0KQotewotICAgIHN3aXRj
aCAoY29sb3JGb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoK
LSAgICAgICAgcmV0dXJuIDE2OwotICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKLSAg
ICAgICAgcmV0dXJuIDMyOwotICAgICAgY2FzZSBEM0RGTVRfQTJSMTBHMTBCMTA6Ci0gICAgICAg
IHJldHVybiAyOwotICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Ci0gICAgICAgIHJldHVybiA4
OwotICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6Ci0gICAgICAgIHJldHVybiAxOwotICAgICAg
Y2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9SNUc2QjU6Ci0gICAgICAg
IHJldHVybiAwOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQot
Ci1HTHNpemVpIEdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKEQzRE1VTFRJU0FNUExFX1RZ
UEUgdHlwZSkKLXsKLSAgICBpZiAodHlwZSA9PSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gdHlwZTsKLX0KLQot
Ym9vbCBJc0Zvcm1hdENoYW5uZWxFcXVpdmFsZW50KEQzREZPUk1BVCBkM2Rmb3JtYXQsIEdMZW51
bSBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChkM2Rmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBE
M0RGTVRfTDg6Ci0gICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX0xVTUlOQU5DRSk7Ci0gICAg
ICBjYXNlIEQzREZNVF9BOEw4OgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9MVU1JTkFO
Q0VfQUxQSEEpOwotICAgICAgY2FzZSBEM0RGTVRfRFhUMToKLSAgICAgICAgcmV0dXJuIChmb3Jt
YXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQgfHwgZm9ybWF0ID09IEdMX0NP
TVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQpOwotICAgICAgY2FzZSBEM0RGTVRfRFhUMzoKLSAg
ICAgICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdM
RSk7Ci0gICAgICBjYXNlIEQzREZNVF9EWFQ1OgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBH
TF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFKTsKLSAgICAgIGNhc2UgRDNERk1UX0E4
UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKLSAgICAgIGNhc2UgRDNE
Rk1UX0EzMkIzMkczMlIzMkY6Ci0gICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX1JHQkEgfHwg
Zm9ybWF0ID09IEdMX0JHUkFfRVhUKTsKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAg
ICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9SR0IpOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAg
aWYgKGQzZGZvcm1hdCA9PSBEM0RGTVRfSU5UWiAmJiBnbDo6SXNEZXB0aFRleHR1cmUoZm9ybWF0
KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotfQotCi1HTGVudW0gQ29udmVydEJhY2tCdWZmZXJGb3JtYXQoRDNERk9STUFUIGZvcm1hdCkK
LXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9BNFI0RzRC
NDogcmV0dXJuIEdMX1JHQkE0OwotICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6IHJldHVybiBH
TF9SR0JBOF9PRVM7Ci0gICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNTogcmV0dXJuIEdMX1JHQjVf
QTE7Ci0gICAgICBjYXNlIEQzREZNVF9SNUc2QjU6ICAgcmV0dXJuIEdMX1JHQjU2NTsKLSAgICAg
IGNhc2UgRDNERk1UX1g4UjhHOEI4OiByZXR1cm4gR0xfUkdCOF9PRVM7Ci0gICAgICBkZWZhdWx0
OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBHTF9SR0JBNDsK
LX0KLQotR0xlbnVtIENvbnZlcnREZXB0aFN0ZW5jaWxGb3JtYXQoRDNERk9STUFUIGZvcm1hdCkK
LXsKLSAgICBpZiAoZm9ybWF0ID09IEQzREZNVF9JTlRaKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotICAgIH0KLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAg
ICB7Ci0gICAgICBjYXNlIEQzREZNVF9EMTY6Ci0gICAgICBjYXNlIEQzREZNVF9EMjRYODoKLSAg
ICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2OwotICAgICAgY2FzZSBEM0RGTVRfRDI0
Uzg6Ci0gICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLSAgICAgIGNhc2Ug
RDNERk1UX1VOS05PV046Ci0gICAgICAgIHJldHVybiBHTF9OT05FOwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gR0xfREVQVEgyNF9T
VEVOQ0lMOF9PRVM7Ci19Ci0KLUdMZW51bSBDb252ZXJ0UmVuZGVyVGFyZ2V0Rm9ybWF0KEQzREZP
Uk1BVCBmb3JtYXQpCi17Ci0gICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfSU5UWikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLSAgICB9Ci0gICAgCi0gICAg
c3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfQTRSNEc0QjQ6IHJldHVy
biBHTF9SR0JBNDsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OiByZXR1cm4gR0xfUkdCQThf
T0VTOwotICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6IHJldHVybiBHTF9SR0I1X0ExOwotICAg
ICAgY2FzZSBEM0RGTVRfUjVHNkI1OiAgIHJldHVybiBHTF9SR0I1NjU7Ci0gICAgICBjYXNlIEQz
REZNVF9YOFI4RzhCODogcmV0dXJuIEdMX1JHQjhfT0VTOwotICAgICAgY2FzZSBEM0RGTVRfRDE2
OgotICAgICAgY2FzZSBEM0RGTVRfRDI0WDg6Ci0gICAgICAgIHJldHVybiBHTF9ERVBUSF9DT01Q
T05FTlQxNjsKLSAgICAgIGNhc2UgRDNERk1UX0QyNFM4OgotICAgICAgICByZXR1cm4gR0xfREVQ
VEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgICBjYXNlIEQzREZNVF9VTktOT1dOOgotICAgICAgICBy
ZXR1cm4gR0xfTk9ORTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIEdMX1JHQkE0OwotfQotCi1HTGVudW0gR2V0RXF1aXZhbGVudEZv
cm1hdChEM0RGT1JNQVQgZm9ybWF0KQotewotICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lOVFop
Ci0gICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLSAgICBpZiAoZm9ybWF0
ID09IEQzREZNVF9OVUxMKQotICAgICAgICByZXR1cm4gR0xfTk9ORTsKLQotICAgIHN3aXRjaCAo
Zm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0E0UjRHNEI0OiAgICAgICAgICAgICBy
ZXR1cm4gR0xfUkdCQTQ7Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODogICAgICAgICAgICAg
cmV0dXJuIEdMX1JHQkE4X09FUzsKLSAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OiAgICAgICAg
ICAgICByZXR1cm4gR0xfUkdCNV9BMTsKLSAgICAgIGNhc2UgRDNERk1UX1I1RzZCNTogICAgICAg
ICAgICAgICByZXR1cm4gR0xfUkdCNTY1OwotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6ICAg
ICAgICAgICAgIHJldHVybiBHTF9SR0I4X09FUzsKLSAgICAgIGNhc2UgRDNERk1UX0QxNjogICAg
ICAgICAgICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UMTY7Ci0gICAgICBjYXNlIEQz
REZNVF9EMjRTODogICAgICAgICAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VT
OwotICAgICAgY2FzZSBEM0RGTVRfVU5LTk9XTjogICAgICAgICAgICAgIHJldHVybiBHTF9OT05F
OwotICAgICAgY2FzZSBEM0RGTVRfRFhUMTogICAgICAgICAgICAgICAgIHJldHVybiBHTF9DT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDsKLSAgICAgIGNhc2UgRDNERk1UX0RYVDM6ICAgICAg
ICAgICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRTsKLSAg
ICAgIGNhc2UgRDNERk1UX0RYVDU6ICAgICAgICAgICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUNV9BTkdMRTsKLSAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6
ICAgICAgICByZXR1cm4gR0xfUkdCQTMyRl9FWFQ7Ci0gICAgICBjYXNlIEQzREZNVF9BMTZCMTZH
MTZSMTZGOiAgICAgICAgcmV0dXJuIEdMX1JHQkExNkZfRVhUOwotICAgICAgY2FzZSBEM0RGTVRf
TDg6ICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9MVU1JTkFOQ0U4X0VYVDsKLSAgICAgIGNh
c2UgRDNERk1UX0E4TDg6ICAgICAgICAgICAgICAgICByZXR1cm4gR0xfTFVNSU5BTkNFOF9BTFBI
QThfRVhUOwotICAgICAgZGVmYXVsdDogICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAg
ICAgIHJldHVybiBHTF9OT05FOwotICAgIH0KLX0KLQotfQotCi1uYW1lc3BhY2UgZDNkOQotewot
Ci1ib29sIElzQ29tcHJlc3NlZEZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCkKLXsKLSAg
ICBzd2l0Y2goc3VyZmFjZUZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9EWFQxOgot
ICAgICAgY2FzZSBEM0RGTVRfRFhUMjoKLSAgICAgIGNhc2UgRDNERk1UX0RYVDM6Ci0gICAgICBj
YXNlIEQzREZNVF9EWFQ0OgotICAgICAgY2FzZSBEM0RGTVRfRFhUNToKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQot
Ci1zaXplX3QgQ29tcHV0ZVJvd1NpemUoRDNERk9STUFUIGZvcm1hdCwgdW5zaWduZWQgaW50IHdp
ZHRoKQotewotICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lOVFopCi0gICAgewotICAgICAgICBy
ZXR1cm4gNCAqIHdpZHRoOwotICAgIH0KLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAg
ICBjYXNlIEQzREZNVF9MODoKLSAgICAgICAgICByZXR1cm4gMSAqIHdpZHRoOwotICAgICAgY2Fz
ZSBEM0RGTVRfQThMODoKLSAgICAgICAgICByZXR1cm4gMiAqIHdpZHRoOwotICAgICAgY2FzZSBE
M0RGTVRfWDhSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgICAgcmV0
dXJuIDQgKiB3aWR0aDsKLSAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAgICAg
IHJldHVybiA4ICogd2lkdGg7Ci0gICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgotICAg
ICAgICByZXR1cm4gMTYgKiB3aWR0aDsKLSAgICAgIGNhc2UgRDNERk1UX0RYVDE6Ci0gICAgICAg
IHJldHVybiA4ICogKCh3aWR0aCArIDMpIC8gNCk7Ci0gICAgICBjYXNlIEQzREZNVF9EWFQzOgot
ICAgICAgY2FzZSBEM0RGTVRfRFhUNToKLSAgICAgICAgcmV0dXJuIDE2ICogKCh3aWR0aCArIDMp
IC8gNCk7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXI5X3V0aWxzLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3JlbmRlcmVyOV91dGlscy5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjZjZGYxZWE2NTY2ZjkxMGE5NmVlMjUxMTRi
N2M0OGVjODM5NDVlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVy
ZXI5X3V0aWxzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
Ci0vLwotCi0vLyByZW5kZXJlcjlfdXRpbHMuaDogQ29udmVyc2lvbiBmdW5jdGlvbnMgYW5kIG90
aGVyIHV0aWxpdHkgcm91dGluZXMgCi0vLyBzcGVjaWZpYyB0byB0aGUgRDNEOSByZW5kZXJlcgot
Ci0jaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjlfVVRJTFNfSAotI2RlZmluZSBM
SUJHTEVTVjJfUkVOREVSRVJfUkVOREVSRVI5X1VUSUxTX0gKLQotI2luY2x1ZGUgImxpYkdMRVN2
Mi91dGlsaXRpZXMuaCIKLQotY29uc3QgRDNERk9STUFUIEQzREZNVF9JTlRaID0gKChEM0RGT1JN
QVQpKE1BS0VGT1VSQ0MoJ0knLCdOJywnVCcsJ1onKSkpOwotY29uc3QgRDNERk9STUFUIEQzREZN
VF9OVUxMID0gKChEM0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ04nLCdVJywnTCcsJ0wnKSkpOwotCi1u
YW1lc3BhY2UgZ2xfZDNkOQotewotCi1EM0RDTVBGVU5DIENvbnZlcnRDb21wYXJpc29uKEdMZW51
bSBjb21wYXJpc29uKTsKLUQzRENPTE9SIENvbnZlcnRDb2xvcihnbDo6Q29sb3IgY29sb3IpOwot
RDNEQkxFTkQgQ29udmVydEJsZW5kRnVuYyhHTGVudW0gYmxlbmQpOwotRDNEQkxFTkRPUCBDb252
ZXJ0QmxlbmRPcChHTGVudW0gYmxlbmRPcCk7Ci1EM0RTVEVOQ0lMT1AgQ29udmVydFN0ZW5jaWxP
cChHTGVudW0gc3RlbmNpbE9wKTsKLUQzRFRFWFRVUkVBRERSRVNTIENvbnZlcnRUZXh0dXJlV3Jh
cChHTGVudW0gd3JhcCk7Ci1EM0RDVUxMIENvbnZlcnRDdWxsTW9kZShHTGVudW0gY3VsbEZhY2Us
IEdMZW51bSBmcm9udEZhY2UpOwotRDNEQ1VCRU1BUF9GQUNFUyBDb252ZXJ0Q3ViZUZhY2UoR0xl
bnVtIGN1YmVGYWNlKTsKLURXT1JEIENvbnZlcnRDb2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3Jl
ZW4sIGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSk7Ci1EM0RURVhUVVJFRklMVEVSVFlQRSBDb252ZXJ0
TWFnRmlsdGVyKEdMZW51bSBtYWdGaWx0ZXIsIGZsb2F0IG1heEFuaXNvdHJvcHkpOwotdm9pZCBD
b252ZXJ0TWluRmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIsIEQzRFRFWFRVUkVGSUxURVJUWVBFICpk
M2RNaW5GaWx0ZXIsIEQzRFRFWFRVUkVGSUxURVJUWVBFICpkM2RNaXBGaWx0ZXIsIGZsb2F0IG1h
eEFuaXNvdHJvcHkpOwotRDNERk9STUFUIENvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoR0xlbnVt
IGZvcm1hdCk7Ci1EM0RNVUxUSVNBTVBMRV9UWVBFIEdldE11bHRpc2FtcGxlVHlwZUZyb21TYW1w
bGVzKEdMc2l6ZWkgc2FtcGxlcyk7Ci0KLX0KLQotbmFtZXNwYWNlIGQzZDlfZ2wKLXsKLQotR0x1
aW50IEdldEFscGhhU2l6ZShEM0RGT1JNQVQgY29sb3JGb3JtYXQpOwotR0x1aW50IEdldFN0ZW5j
aWxTaXplKEQzREZPUk1BVCBzdGVuY2lsRm9ybWF0KTsKLQotR0xzaXplaSBHZXRTYW1wbGVzRnJv
bU11bHRpc2FtcGxlVHlwZShEM0RNVUxUSVNBTVBMRV9UWVBFIHR5cGUpOwotCi1ib29sIElzRm9y
bWF0Q2hhbm5lbEVxdWl2YWxlbnQoRDNERk9STUFUIGQzZGZvcm1hdCwgR0xlbnVtIGZvcm1hdCk7
Ci1HTGVudW0gQ29udmVydEJhY2tCdWZmZXJGb3JtYXQoRDNERk9STUFUIGZvcm1hdCk7Ci1HTGVu
dW0gQ29udmVydERlcHRoU3RlbmNpbEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KTsKLUdMZW51bSBD
b252ZXJ0UmVuZGVyVGFyZ2V0Rm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpOwotR0xlbnVtIEdldEVx
dWl2YWxlbnRGb3JtYXQoRDNERk9STUFUIGZvcm1hdCk7Ci0KLX0KLQotbmFtZXNwYWNlIGQzZDkK
LXsKLWJvb2wgSXNDb21wcmVzc2VkRm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpOwotc2l6ZV90IENv
bXB1dGVSb3dTaXplKEQzREZPUk1BVCBmb3JtYXQsIHVuc2lnbmVkIGludCB3aWR0aCk7Ci0KLWlu
bGluZSBib29sIGlzRGV2aWNlTG9zdEVycm9yKEhSRVNVTFQgZXJyb3JDb2RlKQotewotICAgIHN3
aXRjaCAoZXJyb3JDb2RlKQotICAgIHsKLSAgICAgIGNhc2UgRDNERVJSX0RSSVZFUklOVEVSTkFM
RVJST1I6Ci0gICAgICBjYXNlIEQzREVSUl9ERVZJQ0VMT1NUOgotICAgICAgY2FzZSBEM0RFUlJf
REVWSUNFSFVORzoKLSAgICAgIGNhc2UgRDNERVJSX0RFVklDRVJFTU9WRUQ6Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LX0KLQotfQotCi0jZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUkVSOV9VVElMU19I
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL3NoYWRlcnMvQmxpdC5wcyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvc2hhZGVycy9CbGl0LnBzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBkY2IzYmQwZTc2YmE5MmEyOGU3NzY4ODhjNjI5MDRjMGMzZjA1ZjNjLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9CbGl0LnBzCisrKyAvZGV2L251bGwKQEAg
LTEsMzkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLXNhbXBsZXIyRCB0ZXggOiBzMDsKLQotdW5p
Zm9ybSBmbG9hdDQgbW9kZSA6IGMwOwotCi0vLyBQYXNzdGhyb3VnaCBQaXhlbCBTaGFkZXIKLS8v
IE91dHB1dHMgdGV4dHVyZSAwIHNhbXBsZWQgYXQgdGV4Y29vcmQgMC4KLWZsb2F0NCBwYXNzdGhy
b3VnaHBzKGZsb2F0NCB0ZXhjb29yZCA6IFRFWENPT1JEMCkgOiBDT0xPUgotewotCXJldHVybiB0
ZXgyRCh0ZXgsIHRleGNvb3JkLnh5KTsKLX07Ci0KLS8vIEx1bWluYW5jZSBDb252ZXJzaW9uIFBp
eGVsIFNoYWRlcgotLy8gT3V0cHV0cyBzYW1wbGUodGV4MCwgdGMwKS5ycnJhLgotLy8gRm9yIExB
IG91dHB1dCAocGFzcyBBKSBzZXQgQzAuWCA9IDEsIEMwLlkgPSAwLgotLy8gRm9yIEwgb3V0cHV0
IChBID0gMSkgc2V0IEMwLlggPSAwLCBDMC5ZID0gMS4KLWZsb2F0NCBsdW1pbmFuY2VwcyhmbG9h
dDQgdGV4Y29vcmQgOiBURVhDT09SRDApIDogQ09MT1IKLXsKLQlmbG9hdDQgdG1wID0gdGV4MkQo
dGV4LCB0ZXhjb29yZC54eSk7Ci0JdG1wLncgPSB0bXAudyAqIG1vZGUueCArIG1vZGUueTsKLQly
ZXR1cm4gdG1wLnh4eHc7Ci19OwotCi0vLyBSR0IvQSBDb21wb25lbnQgTWFzayBQaXhlbCBTaGFk
ZXIKLS8vIE91dHB1dHMgc2FtcGxlKHRleDAsIHRjMCkgd2l0aCBvcHRpb25zIHRvIGZvcmNlIFJH
QiA9IDAgYW5kL29yIEEgPSAxLgotLy8gVG8gZm9yY2UgUkdCID0gMCwgc2V0IEMwLlggPSAwLCBv
dGhlcndpc2UgQzAuWCA9IDEuCi0vLyBUbyBmb3JjZSBBID0gMSwgc2V0IEMwLlogPSAwLCBDMC5X
ID0gMSwgb3RoZXJ3aXNlIEMwLlogPSAxLCBDMC5XID0gMC4KLWZsb2F0NCBjb21wb25lbnRtYXNr
cHMoZmxvYXQ0IHRleGNvb3JkIDogVEVYQ09PUkQwKSA6IENPTE9SCi17Ci0JZmxvYXQ0IHRtcCA9
IHRleDJEKHRleCwgdGV4Y29vcmQueHkpOwotCXRtcC54eXogPSB0bXAueHl6ICogbW9kZS54Owot
CXRtcC53ID0gdG1wLncgKiBtb2RlLnogKyBtb2RlLnc7Ci0JcmV0dXJuIHRtcDsKLX07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3No
YWRlcnMvQmxpdC52cyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvc2hhZGVycy9CbGl0LnZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTM2
OTgwYjkzNWI1MGZhOWFlMGI2YjBmNGE1MGUzOTM5ZDBkNTExLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9CbGl0LnZzCisrKyAvZGV2L251bGwKQEAgLTEsNDMg
KzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLXN0cnVjdCBWU19PVVRQVVQKLXsKLSAgICBmbG9hdDQg
cG9zaXRpb24gOiBQT1NJVElPTjsKLSAgICBmbG9hdDQgdGV4Y29vcmQgOiBURVhDT09SRDA7Ci19
OwotCi11bmlmb3JtIGZsb2F0NCBoYWxmUGl4ZWxTaXplIDogYzA7Ci0KLS8vIFN0YW5kYXJkIFZl
cnRleCBTaGFkZXIKLS8vIElucHV0IDAgaXMgdGhlIGhvbW9nZW5vdXMgcG9zaXRpb24uCi0vLyBP
dXRwdXRzIHRoZSBob21vZ2Vub3VzIHBvc2l0aW9uIGFzLWlzLgotLy8gT3V0cHV0cyBhIHRleCBj
b29yZCB3aXRoICgwLDApIGluIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgc2NyZWVuIGFu
ZCAoMSwxKSBpbiB0aGUgYm90dG9tIHJpZ2h0LgotLy8gQzAuWCBtdXN0IGJlIG5lZ2F0aXZlIGhh
bGYtcGl4ZWwgd2lkdGgsIEMwLlkgbXVzdCBiZSBoYWxmLXBpeGVsIGhlaWdodC4gQzAuWlcgbXVz
dCBiZSAwLgotVlNfT1VUUFVUIHN0YW5kYXJkdnMoaW4gZmxvYXQ0IHBvc2l0aW9uIDogUE9TSVRJ
T04pCi17Ci0gICAgVlNfT1VUUFVUIE91dDsKLQotICAgIE91dC5wb3NpdGlvbiA9IHBvc2l0aW9u
ICsgaGFsZlBpeGVsU2l6ZTsKLSAgICBPdXQudGV4Y29vcmQgPSBwb3NpdGlvbiAqIGZsb2F0NCgw
LjUsIC0wLjUsIDEuMCwgMS4wKSArIGZsb2F0NCgwLjUsIDAuNSwgMCwgMCk7Ci0KLSAgICByZXR1
cm4gT3V0OwotfTsKLQotLy8gRmxpcCBZIFZlcnRleCBTaGFkZXIKLS8vIElucHV0IDAgaXMgdGhl
IGhvbW9nZW5vdXMgcG9zaXRpb24uCi0vLyBPdXRwdXRzIHRoZSBob21vZ2Vub3VzIHBvc2l0aW9u
IGFzLWlzLgotLy8gT3V0cHV0cyBhIHRleCBjb29yZCB3aXRoICgwLDEpIGluIHRoZSB1cHBlci1s
ZWZ0IGNvcm5lciBvZiB0aGUgc2NyZWVuIGFuZCAoMSwwKSBpbiB0aGUgYm90dG9tIHJpZ2h0Lgot
Ly8gQzAuWFkgbXVzdCBiZSB0aGUgaGFsZi1waXhlbCB3aWR0aCBhbmQgaGVpZ2h0LiBDMC5aVyBt
dXN0IGJlIDAuCi1WU19PVVRQVVQgZmxpcHl2cyhpbiBmbG9hdDQgcG9zaXRpb24gOiBQT1NJVElP
TikKLXsKLSAgICBWU19PVVRQVVQgT3V0OwotCi0gICAgT3V0LnBvc2l0aW9uID0gcG9zaXRpb24g
KyBoYWxmUGl4ZWxTaXplOwotICAgIE91dC50ZXhjb29yZCA9IHBvc2l0aW9uICogZmxvYXQ0KDAu
NSwgMC41LCAxLjAsIDEuMCkgKyBmbG9hdDQoMC41LCAwLjUsIDAsIDApOwotCi0gICAgcmV0dXJu
IE91dDsKLX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL3NoYWRlcnMvQ2xlYXIxMS5obHNsIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL0NsZWFyMTEuaGxzbApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDQyYWM2OTliNjZhMjIzOWFkYmY1MjUxZmFhZjNiM2U0YzNm
ZWM1Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvQ2xlYXIx
MS5obHNsCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotdm9pZCBWU19DbGVhciggaW4g
ZmxvYXQzICBpblBvc2l0aW9uIDogICAgUE9TSVRJT04sICBpbiBmbG9hdDQgIGluQ29sb3IgOiBD
T0xPUiwKLSAgICAgICAgICAgICAgb3V0IGZsb2F0NCBvdXRQb3NpdGlvbiA6IFNWX1BPU0lUSU9O
LCBvdXQgZmxvYXQ0IG91dENvbG9yIDogQ09MT1IpCi17Ci0gICAgb3V0UG9zaXRpb24gPSBmbG9h
dDQoaW5Qb3NpdGlvbiwgMS4wZik7Ci0gICAgb3V0Q29sb3IgPSBpbkNvbG9yOwotfQotCi0vLyBB
c3N1bWUgd2UgYXJlIGluIFNNNCssIHdoaWNoIGhhcyA4IGNvbG9yIG91dHB1dHMKLXN0cnVjdCBQ
U19PdXRwdXRNdWx0aXBsZQotewotCWZsb2F0NCBjb2xvcjAgOiBTVl9UQVJHRVQwOwotCWZsb2F0
NCBjb2xvcjEgOiBTVl9UQVJHRVQxOwotCWZsb2F0NCBjb2xvcjIgOiBTVl9UQVJHRVQyOwotCWZs
b2F0NCBjb2xvcjMgOiBTVl9UQVJHRVQzOwotCWZsb2F0NCBjb2xvcjQgOiBTVl9UQVJHRVQ0Owot
CWZsb2F0NCBjb2xvcjUgOiBTVl9UQVJHRVQ1OwotCWZsb2F0NCBjb2xvcjYgOiBTVl9UQVJHRVQ2
OwotCWZsb2F0NCBjb2xvcjcgOiBTVl9UQVJHRVQ3OwotfTsKLQotUFNfT3V0cHV0TXVsdGlwbGUg
UFNfQ2xlYXJNdWx0aXBsZShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBm
bG9hdDQgaW5Db2xvciA6IENPTE9SKQotewotCVBTX091dHB1dE11bHRpcGxlIG91dENvbG9yOwot
CW91dENvbG9yLmNvbG9yMCA9IGluQ29sb3I7Ci0Jb3V0Q29sb3IuY29sb3IxID0gaW5Db2xvcjsK
LQlvdXRDb2xvci5jb2xvcjIgPSBpbkNvbG9yOwotCW91dENvbG9yLmNvbG9yMyA9IGluQ29sb3I7
Ci0Jb3V0Q29sb3IuY29sb3I0ID0gaW5Db2xvcjsKLQlvdXRDb2xvci5jb2xvcjUgPSBpbkNvbG9y
OwotCW91dENvbG9yLmNvbG9yNiA9IGluQ29sb3I7Ci0Jb3V0Q29sb3IuY29sb3I3ID0gaW5Db2xv
cjsKLQlyZXR1cm4gb3V0Q29sb3I7Ci19Ci0KLWZsb2F0NCBQU19DbGVhclNpbmdsZShpbiBmbG9h
dDQgaW5Qb3NpdGlvbiA6IFNWX1Bvc2l0aW9uLCBpbiBmbG9hdDQgaW5Db2xvciA6IENPTE9SKSA6
IFNWX1RhcmdldDAKLXsKLQlyZXR1cm4gaW5Db2xvcjsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9QYXNzdGhyb3Vn
aDExLmhsc2wgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L3NoYWRlcnMvUGFzc3Rocm91Z2gxMS5obHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA0M2I3ODAxZWZjMWZlZjZlMjM5MTgwMDY3ZGQwMjM2OTk4NTViOWEzLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9QYXNzdGhyb3VnaDExLmhsc2wKKysrIC9k
ZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi1UZXh0dXJlMkQgVGV4dHVyZSA6IHJlZ2lzdGVyKHQw
KTsKLVNhbXBsZXJTdGF0ZSBTYW1wbGVyIDogcmVnaXN0ZXIoczApOwotCi12b2lkIFZTX1Bhc3N0
aHJvdWdoKCBpbiBmbG9hdDIgIGluUG9zaXRpb24gOiAgICBQT1NJVElPTiwgIGluIGZsb2F0MiAg
aW5UZXhDb29yZCA6IFRFWENPT1JEMCwKLSAgICAgICAgICAgICAgICAgICAgb3V0IGZsb2F0NCBv
dXRQb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBvdXQgZmxvYXQyIG91dFRleENvb3JkIDogVEVYQ09P
UkQwKQotewotICAgIG91dFBvc2l0aW9uID0gZmxvYXQ0KGluUG9zaXRpb24sIDAuMGYsIDEuMGYp
OwotICAgIG91dFRleENvb3JkID0gaW5UZXhDb29yZDsKLX0KLQotZmxvYXQ0IFBTX1Bhc3N0aHJv
dWdoUkdCQShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5U
ZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCi17Ci0gICAgcmV0dXJuIFRleHR1cmUu
U2FtcGxlKFNhbXBsZXIsIGluVGV4Q29vcmQpLnJnYmE7Ci19Ci0KLWZsb2F0NCBQU19QYXNzdGhy
b3VnaFJHQihpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5U
ZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCi17Ci0gICAgcmV0dXJuIGZsb2F0NChU
ZXh0dXJlLlNhbXBsZShTYW1wbGVyLCBpblRleENvb3JkKS5yZ2IsIDEuMGYpOwotfQotCi1mbG9h
dDQgUFNfUGFzc3Rocm91Z2hMdW0oaW4gZmxvYXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwg
aW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDApIDogU1ZfVEFSR0VUMAotewotICAgIHJl
dHVybiBmbG9hdDQoVGV4dHVyZS5TYW1wbGUoU2FtcGxlciwgaW5UZXhDb29yZCkucnJyLCAxLjBm
KTsKLX0KLQotZmxvYXQ0IFBTX1Bhc3N0aHJvdWdoTHVtQWxwaGEoaW4gZmxvYXQ0IGluUG9zaXRp
b24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDApIDogU1Zf
VEFSR0VUMAotewotICAgIHJldHVybiBUZXh0dXJlLlNhbXBsZShTYW1wbGVyLCBpblRleENvb3Jk
KS5ycnJhOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyMTF2cy5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL2NsZWFy
MTF2cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YmM3NDMxMjZlZDA2YzhmNjc1
OGUxMGU1ZDE3NzIwMTQ5NWM5NmRiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvc2hhZGVycy9jb21waWxlZC9jbGVhcjExdnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzMSAr
MCwwIEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBT
aGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0DQotLy8NCi0vLw0KLS8vLw0KLS8vDQotLy8g
SW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBN
YXNrIFJlZ2lzdGVyIFN5c1ZhbHVlICBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tDQotLy8g
UE9TSVRJT04gICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAwICAgICBOT05FICAgZmxv
YXQgICB4eXogDQotLy8gQ09MT1IgICAgICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAx
ICAgICBOT05FICAgZmxvYXQgICB4eXp3DQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6
DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lz
VmFsdWUgIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0t
LS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAg
ICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgICBmbG9hdCAgIHh5encNCi0vLyBD
T0xPUiAgICAgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDEgICAgIE5PTkUgICBmbG9h
dCAgIHh5encNCi0vLw0KLXZzXzRfMA0KLWRjbF9pbnB1dCB2MC54eXoNCi1kY2xfaW5wdXQgdjEu
eHl6dw0KLWRjbF9vdXRwdXRfc2l2IG8wLnh5encsIHBvc2l0aW9uDQotZGNsX291dHB1dCBvMS54
eXp3DQotbW92IG8wLnh5eiwgdjAueHl6eA0KLW1vdiBvMC53LCBsKDEuMDAwMDAwKQ0KLW1vdiBv
MS54eXp3LCB2MS54eXp3DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgNCBpbnN0cnVjdGlvbiBz
bG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1ZTX0NsZWFyW10gPQ0KLXsNCi0g
ICAgIDY4LCAgODgsICA2NiwgIDY3LCAgOTcsICAgNSwgDQotICAgICAxMywgMTYzLCAxNjAsIDI1
NCwgIDk1LCAxMjcsIA0KLSAgICAgMzAsIDE5NCwgMTIxLCAxNDQsIDIzNiwgMTg1LCANCi0gICAg
IDU5LCAgMjksICAgMSwgICAwLCAgIDAsICAgMCwgDQotICAgICA0OCwgICAyLCAgIDAsICAgMCwg
ICA1LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDUyLCAgIDAsICAgMCwgICAwLCANCi0gICAgMTQw
LCAgIDAsICAgMCwgICAwLCAyMjAsICAgMCwgDQotICAgICAgMCwgICAwLCAgNDgsICAgMSwgICAw
LCAgIDAsIA0KLSAgICAxODAsICAgMSwgICAwLCAgIDAsICA4MiwgIDY4LCANCi0gICAgIDY5LCAg
NzAsICA4MCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgIDI4LCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgNCwgDQotICAgIDI1NCwgMjU1LCAgIDAsICAgMSwgICAwLCAgIDAs
IA0KLSAgICAgMjgsICAgMCwgICAwLCAgIDAsICA3NywgMTA1LCANCi0gICAgIDk5LCAxMTQsIDEx
MSwgMTE1LCAxMTEsIDEwMiwgDQotICAgIDExNiwgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsIA0K
LSAgICAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCANCi0gICAgMTA0LCAgOTcsIDEwMCwg
MTAxLCAxMTQsICAzMiwgDQotICAgICA2NywgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIA0KLSAg
ICAxMDEsIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCANCi0gICAgIDQ4LCAgNDYsICA1NywgIDUw
LCAgNDgsICA0OCwgDQotICAgICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsIA0KLSAgICAg
IDAsIDE3MSwgIDczLCAgODMsICA3MSwgIDc4LCANCi0gICAgIDcyLCAgIDAsICAgMCwgICAwLCAg
IDIsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgNTYs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQotICAgICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgICA3LCAgIDcsICAgMCwgICAwLCANCi0gICAgIDY1LCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDMsICAgMCwg
ICAwLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICAxNSwgIDE1LCAgIDAsICAgMCwg
DQotICAgICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsIA0KLSAgICAgNzksICA3OCwgICAw
LCAgNjcsICA3OSwgIDc2LCANCi0gICAgIDc5LCAgODIsICAgMCwgMTcxLCAgNzksICA4MywgDQot
ICAgICA3MSwgIDc4LCAgNzYsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDIsICAgMCwgICAwLCAg
IDAsICAgOCwgICAwLCANCi0gICAgICAwLCAgIDAsICA1NiwgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAzLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgMTUsICAgMCwgDQotICAgICAg
MCwgICAwLCAgNjgsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgDQotICAgICAgMSwg
ICAwLCAgIDAsICAgMCwgIDE1LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDgzLCAgODYsICA5NSwg
IDgwLCANCi0gICAgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgDQotICAgICA3OCwgICAw
LCAgNjcsICA3OSwgIDc2LCAgNzksIA0KLSAgICAgODIsICAgMCwgMTcxLCAxNzEsICA4MywgIDcy
LCANCi0gICAgIDY4LCAgODIsIDEyNCwgICAwLCAgIDAsICAgMCwgDQotICAgICA2NCwgICAwLCAg
IDEsICAgMCwgIDMxLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDk1LCAgIDAsICAgMCwgICAzLCAN
Ci0gICAgMTE0LCAgMTYsICAxNiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgOTUs
ICAgMCwgICAwLCAgIDMsIA0KLSAgICAyNDIsICAxNiwgIDE2LCAgIDAsICAgMSwgICAwLCANCi0g
ICAgICAwLCAgIDAsIDEwMywgICAwLCAgIDAsICAgNCwgDQotICAgIDI0MiwgIDMyLCAgMTYsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAg
MTAxLCAgIDAsICAgMCwgICAzLCAyNDIsICAzMiwgDQotICAgICAxNiwgICAwLCAgIDEsICAgMCwg
ICAwLCAgIDAsIA0KLSAgICAgNTQsICAgMCwgICAwLCAgIDUsIDExNCwgIDMyLCANCi0gICAgIDE2
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICA3MCwgIDE4LCAgMTYsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDU0LCAgIDAsICAgMCwgICA1LCANCi0gICAgMTMwLCAg
MzIsICAxNiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDEsICA2NCwgICAwLCAg
IDAsIA0KLSAgICAgIDAsICAgMCwgMTI4LCAgNjMsICA1NCwgICAwLCANCi0gICAgICAwLCAgIDUs
IDI0MiwgIDMyLCAgMTYsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDcwLCAgMzAs
IA0KLSAgICAgMTYsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAgIDYyLCAgIDAsICAg
MCwgICAxLCAgODMsICA4NCwgDQotICAgICA2NSwgIDg0LCAxMTYsICAgMCwgICAwLCAgIDAsIA0K
LSAgICAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQotICAgICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDEsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgNCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDANCi19Ow0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxl
ZC9jbGVhcm11bHRpcGxlMTFwcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL2NsZWFybXVsdGlwbGUxMXBzLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0YjQ0NWFjM2Y2YTcxZTRjNWUyMWFkYzRiYWU5YWZk
YjkyODM5ZTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2Nv
bXBpbGVkL2NsZWFybXVsdGlwbGUxMXBzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOTYgKzAsMCBA
QAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVy
IENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NA0KLS8vDQotLy8NCi0vLy8NCi0vLw0KLS8vIElucHV0
IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBS
ZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
IC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BP
U0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgIGZsb2F0ICAg
ICAgIA0KLS8vIENPTE9SICAgICAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMSAgICAg
Tk9ORSAgIGZsb2F0ICAgeHl6dw0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8v
DQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVl
ICBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0t
LS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAg
ICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgZmxvYXQgICB4eXp3DQotLy8gU1ZfVEFS
R0VUICAgICAgICAgICAgICAgIDEgICB4eXp3ICAgICAgICAxICAgVEFSR0VUICAgZmxvYXQgICB4
eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDIgICB4eXp3ICAgICAgICAyICAgVEFS
R0VUICAgZmxvYXQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDMgICB4eXp3
ICAgICAgICAzICAgVEFSR0VUICAgZmxvYXQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAg
ICAgICAgIDQgICB4eXp3ICAgICAgICA0ICAgVEFSR0VUICAgZmxvYXQgICB4eXp3DQotLy8gU1Zf
VEFSR0VUICAgICAgICAgICAgICAgIDUgICB4eXp3ICAgICAgICA1ICAgVEFSR0VUICAgZmxvYXQg
ICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDYgICB4eXp3ICAgICAgICA2ICAg
VEFSR0VUICAgZmxvYXQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDcgICB4
eXp3ICAgICAgICA3ICAgVEFSR0VUICAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xf
aW5wdXRfcHMgbGluZWFyIHYxLnh5encNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfb3V0cHV0
IG8xLnh5encNCi1kY2xfb3V0cHV0IG8yLnh5encNCi1kY2xfb3V0cHV0IG8zLnh5encNCi1kY2xf
b3V0cHV0IG80Lnh5encNCi1kY2xfb3V0cHV0IG81Lnh5encNCi1kY2xfb3V0cHV0IG82Lnh5encN
Ci1kY2xfb3V0cHV0IG83Lnh5encNCi1tb3YgbzAueHl6dywgdjEueHl6dw0KLW1vdiBvMS54eXp3
LCB2MS54eXp3DQotbW92IG8yLnh5encsIHYxLnh5encNCi1tb3YgbzMueHl6dywgdjEueHl6dw0K
LW1vdiBvNC54eXp3LCB2MS54eXp3DQotbW92IG81Lnh5encsIHYxLnh5encNCi1tb3YgbzYueHl6
dywgdjEueHl6dw0KLW1vdiBvNy54eXp3LCB2MS54eXp3DQotcmV0IA0KLS8vIEFwcHJveGltYXRl
bHkgOSBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BT
X0NsZWFyTXVsdGlwbGVbXSA9DQotew0KLSAgICAgNjgsICA4OCwgIDY2LCAgNjcsICA5MiwgIDU0
LCANCi0gICAgMTIwLCAxMDUsIDE2NiwgMTk2LCAxMzIsIDE1OCwgDQotICAgIDIwOSwgIDMzLCAx
ODUsIDEyMiwgICA4LCAxODksIA0KLSAgICAxNDUsIDExNCwgICAxLCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgIDg4LCAgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgDQotICAgICAgMCwgICAwLCAgNTIs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAxNDAsICAgMCwgICAwLCAgIDAsIDIyNCwgICAwLCANCi0g
ICAgICAwLCAgIDAsIDE4OCwgICAxLCAgIDAsICAgMCwgDQotICAgIDIyMCwgICAyLCAgIDAsICAg
MCwgIDgyLCAgNjgsIA0KLSAgICAgNjksICA3MCwgIDgwLCAgIDAsICAgMCwgICAwLCANCi0gICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KLSAgICAgMjgsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCANCi0gICAgMjU1
LCAyNTUsICAgMCwgICAxLCAgIDAsICAgMCwgDQotICAgICAyOCwgICAwLCAgIDAsICAgMCwgIDc3
LCAxMDUsIA0KLSAgICAgOTksIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCANCi0gICAgMTE2LCAg
MzIsICA0MCwgIDgyLCAgNDEsICAzMiwgDQotICAgICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAg
ODMsIA0KLSAgICAxMDQsICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCANCi0gICAgIDY3LCAxMTEs
IDEwOSwgMTEyLCAxMDUsIDEwOCwgDQotICAgIDEwMSwgMTE0LCAgMzIsICA1NywgIDQ2LCAgNTEs
IA0KLSAgICAgNDgsICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4LCANCi0gICAgIDQ2LCAgNDksICA1
NCwgIDUxLCAgNTYsICA1MiwgDQotICAgICAgMCwgMTcxLCAgNzMsICA4MywgIDcxLCAgNzgsIA0K
LSAgICAgNzYsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgOCwg
ICAwLCAgIDAsICAgMCwgDQotICAgICA1NiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAzLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgMTUsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
NjgsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQotICAgICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgIDE1LCAgMTUsICAgMCwgICAwLCANCi0gICAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzks
ICA4MywgDQotICAgICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgIDAsIA0KLSAgICAgNjcsICA3
OSwgIDc2LCAgNzksICA4MiwgICAwLCANCi0gICAgMTcxLCAxNzEsICA3OSwgIDgzLCAgNzEsICA3
OCwgDQotICAgIDIxMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
ICA4LCAgIDAsICAgMCwgICAwLCANCi0gICAgMjAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDMsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQot
ICAgIDIwMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCi0gICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgMTUsICAgMCwgICAwLCAgIDAsIA0KLSAgICAyMDAsICAgMCwgICAwLCAgIDAs
ICAgMiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDE1LCAgIDAsICAg
MCwgICAwLCANCi0gICAgMjAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgDQotICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDMsICAgMCwgICAwLCAgIDAsICAgMywg
ICAwLCANCi0gICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQotICAgIDIwMCwgICAw
LCAgIDAsICAgMCwgICA0LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCANCi0gICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgDQotICAgICAgMCwgICAwLCAg
MTUsICAgMCwgICAwLCAgIDAsIA0KLSAgICAyMDAsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAN
Ci0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMywgICAwLCAgIDAs
ICAgMCwgICA1LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDE1LCAgIDAsICAgMCwgICAwLCANCi0g
ICAgMjAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAgIDMsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCANCi0gICAg
ICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQotICAgIDIwMCwgICAwLCAgIDAsICAgMCwg
ICA3LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAz
LCAgIDAsICAgMCwgICAwLCAgIDcsICAgMCwgDQotICAgICAgMCwgICAwLCAgMTUsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCANCi0gICAgIDcxLCAg
NjksICA4NCwgICAwLCAxNzEsIDE3MSwgDQotICAgICA4MywgIDcyLCAgNjgsICA4MiwgIDI0LCAg
IDEsIA0KLSAgICAgIDAsICAgMCwgIDY0LCAgIDAsICAgMCwgICAwLCANCi0gICAgIDcwLCAgIDAs
ICAgMCwgICAwLCAgOTgsICAxNiwgDQotICAgICAgMCwgICAzLCAyNDIsICAxNiwgIDE2LCAgIDAs
IA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsIDEwMSwgICAwLCANCi0gICAgICAwLCAgIDMsIDI0
MiwgIDMyLCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgMTAxLCAgIDAsIA0K
LSAgICAgIDAsICAgMywgMjQyLCAgMzIsICAxNiwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwg
ICAwLCAxMDEsICAgMCwgDQotICAgICAgMCwgICAzLCAyNDIsICAzMiwgIDE2LCAgIDAsIA0KLSAg
ICAgIDIsICAgMCwgICAwLCAgIDAsIDEwMSwgICAwLCANCi0gICAgICAwLCAgIDMsIDI0MiwgIDMy
LCAgMTYsICAgMCwgDQotICAgICAgMywgICAwLCAgIDAsICAgMCwgMTAxLCAgIDAsIA0KLSAgICAg
IDAsICAgMywgMjQyLCAgMzIsICAxNiwgICAwLCANCi0gICAgICA0LCAgIDAsICAgMCwgICAwLCAx
MDEsICAgMCwgDQotICAgICAgMCwgICAzLCAyNDIsICAzMiwgIDE2LCAgIDAsIA0KLSAgICAgIDUs
ICAgMCwgICAwLCAgIDAsIDEwMSwgICAwLCANCi0gICAgICAwLCAgIDMsIDI0MiwgIDMyLCAgMTYs
ICAgMCwgDQotICAgICAgNiwgICAwLCAgIDAsICAgMCwgMTAxLCAgIDAsIA0KLSAgICAgIDAsICAg
MywgMjQyLCAgMzIsICAxNiwgICAwLCANCi0gICAgICA3LCAgIDAsICAgMCwgICAwLCAgNTQsICAg
MCwgDQotICAgICAgMCwgICA1LCAyNDIsICAzMiwgIDE2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICA3MCwgIDMwLCANCi0gICAgIDE2LCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwg
DQotICAgICA1NCwgICAwLCAgIDAsICAgNSwgMjQyLCAgMzIsIA0KLSAgICAgMTYsICAgMCwgICAx
LCAgIDAsICAgMCwgICAwLCANCi0gICAgIDcwLCAgMzAsICAxNiwgICAwLCAgIDEsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgNTQsICAgMCwgICAwLCAgIDUsIA0KLSAgICAyNDIsICAzMiwgIDE2LCAg
IDAsICAgMiwgICAwLCANCi0gICAgICAwLCAgIDAsICA3MCwgIDMwLCAgMTYsICAgMCwgDQotICAg
ICAgMSwgICAwLCAgIDAsICAgMCwgIDU0LCAgIDAsIA0KLSAgICAgIDAsICAgNSwgMjQyLCAgMzIs
ICAxNiwgICAwLCANCi0gICAgICAzLCAgIDAsICAgMCwgICAwLCAgNzAsICAzMCwgDQotICAgICAx
NiwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgNTQsICAgMCwgICAwLCAgIDUsIDI0
MiwgIDMyLCANCi0gICAgIDE2LCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgDQotICAgICA3MCwg
IDMwLCAgMTYsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDU0LCAgIDAsICAgMCwg
ICA1LCANCi0gICAgMjQyLCAgMzIsICAxNiwgICAwLCAgIDUsICAgMCwgDQotICAgICAgMCwgICAw
LCAgNzAsICAzMCwgIDE2LCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICA1NCwgICAw
LCANCi0gICAgICAwLCAgIDUsIDI0MiwgIDMyLCAgMTYsICAgMCwgDQotICAgICAgNiwgICAwLCAg
IDAsICAgMCwgIDcwLCAgMzAsIA0KLSAgICAgMTYsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgIDU0LCAgIDAsICAgMCwgICA1LCAyNDIsICAzMiwgDQotICAgICAxNiwgICAwLCAgIDcs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAgNzAsICAzMCwgIDE2LCAgIDAsICAgMSwgICAwLCANCi0g
ICAgICAwLCAgIDAsICA2MiwgICAwLCAgIDAsICAgMSwgDQotICAgICA4MywgIDg0LCAgNjUsICA4
NCwgMTE2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICA5LCAgIDAsICAgMCwgICAwLCANCi0gICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDksICAgMCwg
ICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICA5LCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAw
DQotfTsNCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJzaW5nbGUxMXBzLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvY2xl
YXJzaW5nbGUxMXBzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3Y2IwODdjNzUw
NTI2MmM4MDdiM2Y0YTUxNzFhMWQ4MGU2MjFmNWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyc2luZ2xlMTFwcy5oCisrKyAvZGV2L251
bGwKQEAgLTEsMTEwICswLDAgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9z
b2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQNCi0vLw0KLS8vDQot
Ly8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAg
ICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAgIFVzZWQNCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0t
LSAtLS0tLS0NCi0vLyBTVl9Qb3NpdGlvbiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAg
ICAgICBQT1MgICBmbG9hdCAgICAgICANCi0vLyBDT0xPUiAgICAgICAgICAgICAgICAgICAgMCAg
IHh5encgICAgICAgIDEgICAgIE5PTkUgICBmbG9hdCAgIHh5encNCi0vLw0KLS8vDQotLy8gT3V0
cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFz
ayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0tLQ0KLS8vIFNW
X1RhcmdldCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIGZsb2F0
ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eXp3DQotZGNs
X291dHB1dCBvMC54eXp3DQotbW92IG8wLnh5encsIHYxLnh5encNCi1yZXQgDQotLy8gQXBwcm94
aW1hdGVseSAyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRF
IGdfUFNfQ2xlYXJTaW5nbGVbXSA9DQotew0KLSAgICAgNjgsICA4OCwgIDY2LCAgNjcsICAxMywg
MTUyLCANCi0gICAgIDMyLCAgNDksIDIyMiwgMjM2LCAgOTIsICAyMCwgDQotICAgIDE4OCwgIDcx
LCAgODgsICA0NiwgMTYzLCAyNDEsIA0KLSAgICAxODgsIDIzOCwgICAxLCAgIDAsICAgMCwgICAw
LCANCi0gICAgMjA4LCAgIDEsICAgMCwgICAwLCAgIDUsICAgMCwgDQotICAgICAgMCwgICAwLCAg
NTIsICAgMCwgICAwLCAgIDAsIA0KLSAgICAxNDAsICAgMCwgICAwLCAgIDAsIDIyNCwgICAwLCAN
Ci0gICAgICAwLCAgIDAsICAyMCwgICAxLCAgIDAsICAgMCwgDQotICAgICA4NCwgICAxLCAgIDAs
ICAgMCwgIDgyLCAgNjgsIA0KLSAgICAgNjksICA3MCwgIDgwLCAgIDAsICAgMCwgICAwLCANCi0g
ICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAgMjgsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCANCi0gICAg
MjU1LCAyNTUsICAgMCwgICAxLCAgIDAsICAgMCwgDQotICAgICAyOCwgICAwLCAgIDAsICAgMCwg
IDc3LCAxMDUsIA0KLSAgICAgOTksIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCANCi0gICAgMTE2
LCAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgDQotICAgICA3MiwgIDc2LCAgODMsICA3NiwgIDMy
LCAgODMsIA0KLSAgICAxMDQsICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCANCi0gICAgIDY3LCAx
MTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgDQotICAgIDEwMSwgMTE0LCAgMzIsICA1NywgIDQ2LCAg
NTEsIA0KLSAgICAgNDgsICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4LCANCi0gICAgIDQ2LCAgNDks
ICA1NCwgIDUxLCAgNTYsICA1MiwgDQotICAgICAgMCwgMTcxLCAgNzMsICA4MywgIDcxLCAgNzgs
IA0KLSAgICAgNzYsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCANCi0gICAgICAwLCAgIDAsICAg
OCwgICAwLCAgIDAsICAgMCwgDQotICAgICA1NiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAzLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgMTUsICAgMCwgICAwLCAgIDAsIA0KLSAg
ICAgNjgsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQotICAgICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KLSAgICAg
IDAsICAgMCwgIDE1LCAgMTUsICAgMCwgICAwLCANCi0gICAgIDgzLCAgODYsICA5NSwgIDgwLCAx
MTEsIDExNSwgDQotICAgIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCAgIDAsIA0KLSAgICAgNjcs
ICA3OSwgIDc2LCAgNzksICA4MiwgICAwLCANCi0gICAgMTcxLCAxNzEsICA3OSwgIDgzLCAgNzEs
ICA3OCwgDQotICAgICA0NCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgICA4LCAgIDAsICAgMCwgICAwLCANCi0gICAgIDMyLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDMsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwg
DQotICAgICA4MywgIDg2LCAgOTUsICA4NCwgIDk3LCAxMTQsIA0KLSAgICAxMDMsIDEwMSwgMTE2
LCAgIDAsIDE3MSwgMTcxLCANCi0gICAgIDgzLCAgNzIsICA2OCwgIDgyLCAgNTYsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgNjQsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgMTQsICAgMCwgICAwLCAg
IDAsICA5OCwgIDE2LCANCi0gICAgICAwLCAgIDMsIDI0MiwgIDE2LCAgMTYsICAgMCwgDQotICAg
ICAgMSwgICAwLCAgIDAsICAgMCwgMTAxLCAgIDAsIA0KLSAgICAgIDAsICAgMywgMjQyLCAgMzIs
ICAxNiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgNTQsICAgMCwgDQotICAgICAg
MCwgICA1LCAyNDIsICAzMiwgIDE2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICA3
MCwgIDMwLCANCi0gICAgIDE2LCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQotICAgICA2Miwg
ICAwLCAgIDAsICAgMSwgIDgzLCAgODQsIA0KLSAgICAgNjUsICA4NCwgMTE2LCAgIDAsICAgMCwg
ICAwLCANCi0gICAgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAg
IDAsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0g
ICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwDQotfTsNCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMv
Y29tcGlsZWQvY29tcG9uZW50bWFza3BzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvY29tcG9uZW50bWFza3BzLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmMjg0N2I4ZTdkMzVmMTU3Y2ExYThkMjgxODNj
NWViN2M0ZDI2ZWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJz
L2NvbXBpbGVkL2NvbXBvbmVudG1hc2twcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBA
QAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVy
IENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NA0KLS8vDQotLy8vDQotLy8gUGFyYW1ldGVyczoNCi0v
Lw0KLS8vICAgZmxvYXQ0IG1vZGU7DQotLy8gICBzYW1wbGVyMkQgdGV4Ow0KLS8vDQotLy8NCi0v
LyBSZWdpc3RlcnM6DQotLy8NCi0vLyAgIE5hbWUgICAgICAgICBSZWcgICBTaXplDQotLy8gICAt
LS0tLS0tLS0tLS0gLS0tLS0gLS0tLQ0KLS8vICAgbW9kZSAgICAgICAgIGMwICAgICAgIDENCi0v
LyAgIHRleCAgICAgICAgICBzMCAgICAgICAxDQotLy8NCi0NCi0gICAgcHNfMl8wDQotICAgIGRj
bCB0MC54eQ0KLSAgICBkY2xfMmQgczANCi0gICAgdGV4bGQgcjAsIHQwLCBzMA0KLSAgICBtdWwg
cjEueHl6LCByMCwgYzAueA0KLSAgICBtYWQgcjEudywgcjAudywgYzAueiwgYzAudw0KLSAgICBt
b3Ygb0MwLCByMQ0KLQ0KLS8vIGFwcHJveGltYXRlbHkgNCBpbnN0cnVjdGlvbiBzbG90cyB1c2Vk
ICgxIHRleHR1cmUsIDMgYXJpdGhtZXRpYykNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfcHMy
MF9jb21wb25lbnRtYXNrcHNbXSA9DQotew0KLSAgICAgIDAsICAgMiwgMjU1LCAyNTUsIDI1NCwg
MjU1LCANCi0gICAgIDQ0LCAgIDAsICA2NywgIDg0LCAgNjUsICA2NiwgDQotICAgICAyOCwgICAw
LCAgIDAsICAgMCwgMTE5LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDIsIDI1NSwgMjU1
LCANCi0gICAgICAyLCAgIDAsICAgMCwgICAwLCAgMjgsICAgMCwgDQotICAgICAgMCwgICAwLCAg
IDAsICAgMSwgICAwLCAgIDAsIA0KLSAgICAxMTIsICAgMCwgICAwLCAgIDAsICA2OCwgICAwLCAN
Ci0gICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAs
ICAgMCwgIDc2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0g
ICAgIDkyLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDEsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAgOTYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAg
ICAwLCAgIDAsIDEwOSwgMTExLCAxMDAsIDEwMSwgDQotICAgICAgMCwgMTcxLCAxNzEsIDE3MSwg
ICAxLCAgIDAsIA0KLSAgICAgIDMsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCANCi0gICAgICAx
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAxMTYsIDEwMSwgMTIw
LCAgIDAsIA0KLSAgICAgIDQsICAgMCwgIDEyLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAxLCAg
IDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgMTEyLCAx
MTUsIA0KLSAgICAgOTUsICA1MCwgIDk1LCAgNDgsICAgMCwgIDc3LCANCi0gICAgMTA1LCAgOTks
IDExNCwgMTExLCAxMTUsIDExMSwgDQotICAgIDEwMiwgMTE2LCAgMzIsICA0MCwgIDgyLCAgNDEs
IA0KLSAgICAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCANCi0gICAgIDgzLCAxMDQsICA5
NywgMTAwLCAxMDEsIDExNCwgDQotICAgICAzMiwgIDY3LCAxMTEsIDEwOSwgMTEyLCAxMDUsIA0K
LSAgICAxMDgsIDEwMSwgMTE0LCAgMzIsICA1NywgIDQ2LCANCi0gICAgIDUxLCAgNDgsICA0Niwg
IDU3LCAgNTAsICA0OCwgDQotICAgICA0OCwgIDQ2LCAgNDksICA1NCwgIDUxLCAgNTYsIA0KLSAg
ICAgNTIsICAgMCwgMTcxLCAxNzEsICAzMSwgICAwLCANCi0gICAgICAwLCAgIDIsICAgMCwgICAw
LCAgIDAsIDEyOCwgDQotICAgICAgMCwgICAwLCAgIDMsIDE3NiwgIDMxLCAgIDAsIA0KLSAgICAg
IDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTQ0LCANCi0gICAgICAwLCAgIDgsICAxNSwgMTYwLCAg
NjYsICAgMCwgDQotICAgICAgMCwgICAzLCAgIDAsICAgMCwgIDE1LCAxMjgsIA0KLSAgICAgIDAs
ICAgMCwgMjI4LCAxNzYsICAgMCwgICA4LCANCi0gICAgMjI4LCAxNjAsICAgNSwgICAwLCAgIDAs
ICAgMywgDQotICAgICAgMSwgICAwLCAgIDcsIDEyOCwgICAwLCAgIDAsIA0KLSAgICAyMjgsIDEy
OCwgICAwLCAgIDAsICAgMCwgMTYwLCANCi0gICAgICA0LCAgIDAsICAgMCwgICA0LCAgIDEsICAg
MCwgDQotICAgICAgOCwgMTI4LCAgIDAsICAgMCwgMjU1LCAxMjgsIA0KLSAgICAgIDAsICAgMCwg
MTcwLCAxNjAsICAgMCwgICAwLCANCi0gICAgMjU1LCAxNjAsICAgMSwgICAwLCAgIDAsICAgMiwg
DQotICAgICAgMCwgICA4LCAgMTUsIDEyOCwgICAxLCAgIDAsIA0KLSAgICAyMjgsIDEyOCwgMjU1
LCAyNTUsICAgMCwgICAwDQotfTsNCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvZmxpcHl2cy5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBp
bGVkL2ZsaXB5dnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI1NzZlZDY3NDJm
MmUyZjVlZjNmYjE0YWIwZDgzYzY5NmI1NzNkMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvZmxpcHl2cy5oCisrKyAvZGV2L251bGwKQEAgLTEs
NjcgKzAsMCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhM
U0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NA0KLS8vDQotLy8vDQotLy8gUGFyYW1l
dGVyczoNCi0vLw0KLS8vICAgZmxvYXQ0IGhhbGZQaXhlbFNpemU7DQotLy8NCi0vLw0KLS8vIFJl
Z2lzdGVyczoNCi0vLw0KLS8vICAgTmFtZSAgICAgICAgICBSZWcgICBTaXplDQotLy8gICAtLS0t
LS0tLS0tLS0tIC0tLS0tIC0tLS0NCi0vLyAgIGhhbGZQaXhlbFNpemUgYzAgICAgICAgMQ0KLS8v
DQotDQotICAgIHZzXzJfMA0KLSAgICBkZWYgYzEsIDAuNSwgMSwgMCwgMA0KLSAgICBkY2xfcG9z
aXRpb24gdjANCi0gICAgYWRkIG9Qb3MsIHYwLCBjMA0KLSAgICBtYWQgb1QwLCB2MCwgYzEueHh5
eSwgYzEueHh6eg0KLQ0KLS8vIGFwcHJveGltYXRlbHkgMiBpbnN0cnVjdGlvbiBzbG90cyB1c2Vk
DQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX3ZzMjBfZmxpcHl2c1tdID0NCi17DQotICAgICAg
MCwgICAyLCAyNTQsIDI1NSwgMjU0LCAyNTUsIA0KLSAgICAgMzYsICAgMCwgIDY3LCAgODQsICA2
NSwgIDY2LCANCi0gICAgIDI4LCAgIDAsICAgMCwgICAwLCAgODcsICAgMCwgDQotICAgICAgMCwg
ICAwLCAgIDAsICAgMiwgMjU0LCAyNTUsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAyOCwg
ICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgDQotICAgICA4MCwgICAw
LCAgIDAsICAgMCwgIDQ4LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAw
LCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgNjQsICAgMCwgDQotICAgICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAxMDQsICA5NywgMTA4LCAxMDIsICA4MCwgMTA1LCAN
Ci0gICAgMTIwLCAxMDEsIDEwOCwgIDgzLCAxMDUsIDEyMiwgDQotICAgIDEwMSwgICAwLCAxNzEs
IDE3MSwgICAxLCAgIDAsIA0KLSAgICAgIDMsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCANCi0g
ICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAxMTgsIDEx
NSwgIDk1LCAgNTAsIA0KLSAgICAgOTUsICA0OCwgICAwLCAgNzcsIDEwNSwgIDk5LCANCi0gICAg
MTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgDQotICAgICAzMiwgIDQwLCAgODIsICA0MSwg
IDMyLCAgNzIsIA0KLSAgICAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgMTA0LCANCi0gICAgIDk3
LCAxMDAsIDEwMSwgMTE0LCAgMzIsICA2NywgDQotICAgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4
LCAxMDEsIA0KLSAgICAxMTQsICAzMiwgIDU3LCAgNDYsICA1MSwgIDQ4LCANCi0gICAgIDQ2LCAg
NTcsICA1MCwgIDQ4LCAgNDgsICA0NiwgDQotICAgICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCAg
IDAsIA0KLSAgICAxNzEsIDE3MSwgIDgxLCAgIDAsICAgMCwgICA1LCANCi0gICAgICAxLCAgIDAs
ICAxNSwgMTYwLCAgIDAsICAgMCwgDQotICAgICAgMCwgIDYzLCAgIDAsICAgMCwgMTI4LCAgNjMs
IA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAz
MSwgICAwLCAgIDAsICAgMiwgDQotICAgICAgMCwgICAwLCAgIDAsIDEyOCwgICAwLCAgIDAsIA0K
LSAgICAgMTUsIDE0NCwgICAyLCAgIDAsICAgMCwgICAzLCANCi0gICAgICAwLCAgIDAsICAxNSwg
MTkyLCAgIDAsICAgMCwgDQotICAgIDIyOCwgMTQ0LCAgIDAsICAgMCwgMjI4LCAxNjAsIA0KLSAg
ICAgIDQsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCANCi0gICAgIDE1LCAyMjQsICAgMCwgICAw
LCAyMjgsIDE0NCwgDQotICAgICAgMSwgICAwLCAgODAsIDE2MCwgICAxLCAgIDAsIA0KLSAgICAx
NjAsIDE2MCwgMjU1LCAyNTUsICAgMCwgICAwDQotfTsNCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvbHVt
aW5hbmNlcHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvc2hhZGVycy9jb21waWxlZC9sdW1pbmFuY2Vwcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAzMDMxM2IwODYwZWNmZTAyNjc3ZGRiM2YwMDA5MTUxZjc4YTNiZmIyLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9sdW1pbmFuY2Vw
cy5oCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVy
YXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4
NA0KLS8vDQotLy8vDQotLy8gUGFyYW1ldGVyczoNCi0vLw0KLS8vICAgZmxvYXQ0IG1vZGU7DQot
Ly8gICBzYW1wbGVyMkQgdGV4Ow0KLS8vDQotLy8NCi0vLyBSZWdpc3RlcnM6DQotLy8NCi0vLyAg
IE5hbWUgICAgICAgICBSZWcgICBTaXplDQotLy8gICAtLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQ0K
LS8vICAgbW9kZSAgICAgICAgIGMwICAgICAgIDENCi0vLyAgIHRleCAgICAgICAgICBzMCAgICAg
ICAxDQotLy8NCi0NCi0gICAgcHNfMl8wDQotICAgIGRjbCB0MC54eQ0KLSAgICBkY2xfMmQgczAN
Ci0gICAgdGV4bGQgcjAsIHQwLCBzMA0KLSAgICBtYWQgcjEudywgcjAudywgYzAueCwgYzAueQ0K
LSAgICBtb3YgcjEueHl6LCByMC54DQotICAgIG1vdiBvQzAsIHIxDQotDQotLy8gYXBwcm94aW1h
dGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVyZSwgMyBhcml0aG1ldGljKQ0K
LSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19wczIwX2x1bWluYW5jZXBzW10gPQ0KLXsNCi0gICAg
ICAwLCAgIDIsIDI1NSwgMjU1LCAyNTQsIDI1NSwgDQotICAgICA0NCwgICAwLCAgNjcsICA4NCwg
IDY1LCAgNjYsIA0KLSAgICAgMjgsICAgMCwgICAwLCAgIDAsIDExOSwgICAwLCANCi0gICAgICAw
LCAgIDAsICAgMCwgICAyLCAyNTUsIDI1NSwgDQotICAgICAgMiwgICAwLCAgIDAsICAgMCwgIDI4
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCANCi0gICAgMTEyLCAg
IDAsICAgMCwgICAwLCAgNjgsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAg
IDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICA3NiwgICAwLCANCi0gICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICA5MiwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAgIDk2LCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAxMDksIDExMSwgMTAwLCAxMDEsIA0K
LSAgICAgIDAsIDE3MSwgMTcxLCAxNzEsICAgMSwgICAwLCANCi0gICAgICAzLCAgIDAsICAgMSwg
ICAwLCAgIDQsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgMTE2LCAxMDEsIDEyMCwgICAwLCANCi0gICAgICA0LCAgIDAsICAxMiwgICAw
LCAgIDEsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
IDAsICAgMCwgICAwLCAgIDAsIDExMiwgMTE1LCANCi0gICAgIDk1LCAgNTAsICA5NSwgIDQ4LCAg
IDAsICA3NywgDQotICAgIDEwNSwgIDk5LCAxMTQsIDExMSwgMTE1LCAxMTEsIA0KLSAgICAxMDIs
IDExNiwgIDMyLCAgNDAsICA4MiwgIDQxLCANCi0gICAgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYs
ICAzMiwgDQotICAgICA4MywgMTA0LCAgOTcsIDEwMCwgMTAxLCAxMTQsIA0KLSAgICAgMzIsICA2
NywgMTExLCAxMDksIDExMiwgMTA1LCANCi0gICAgMTA4LCAxMDEsIDExNCwgIDMyLCAgNTcsICA0
NiwgDQotICAgICA1MSwgIDQ4LCAgNDYsICA1NywgIDUwLCAgNDgsIA0KLSAgICAgNDgsICA0Niwg
IDQ5LCAgNTQsICA1MSwgIDU2LCANCi0gICAgIDUyLCAgIDAsIDE3MSwgMTcxLCAgMzEsICAgMCwg
DQotICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAxMjgsIA0KLSAgICAgIDAsICAgMCwgICAz
LCAxNzYsICAzMSwgICAwLCANCi0gICAgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIDE0NCwgDQot
ICAgICAgMCwgICA4LCAgMTUsIDE2MCwgIDY2LCAgIDAsIA0KLSAgICAgIDAsICAgMywgICAwLCAg
IDAsICAxNSwgMTI4LCANCi0gICAgICAwLCAgIDAsIDIyOCwgMTc2LCAgIDAsICAgOCwgDQotICAg
IDIyOCwgMTYwLCAgIDQsICAgMCwgICAwLCAgIDQsIA0KLSAgICAgIDEsICAgMCwgICA4LCAxMjgs
ICAgMCwgICAwLCANCi0gICAgMjU1LCAxMjgsICAgMCwgICAwLCAgIDAsIDE2MCwgDQotICAgICAg
MCwgICAwLCAgODUsIDE2MCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAgMiwgICAxLCAgIDAsICAg
NywgMTI4LCANCi0gICAgICAwLCAgIDAsICAgMCwgMTI4LCAgIDEsICAgMCwgDQotICAgICAgMCwg
ICAyLCAgIDAsICAgOCwgIDE1LCAxMjgsIA0KLSAgICAgIDEsICAgMCwgMjI4LCAxMjgsIDI1NSwg
MjU1LCANCi0gICAgICAwLCAgIDANCi19Ow0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3Vn
aDExdnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
c2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaDExdnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYmYzOTUyMTZlOTkyMGZjY2EwMzJiMWVhYzg1M2U4NWFiOGIxYjY2MC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91
Z2gxMXZzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotI2lmIDANCi0vLw0KLS8v
IEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIw
MC4xNjM4NA0KLS8vDQotLy8NCi0vLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0K
LS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAg
Rm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0t
LS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0tLQ0KLS8vIFBPU0lUSU9OICAgICAgICAgICAgICAg
ICAwICAgeHkgICAgICAgICAgMCAgICAgTk9ORSAgIGZsb2F0ICAgeHkgIA0KLS8vIFRFWENPT1JE
ICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgIGZsb2F0ICAgeHkg
IA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAg
ICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlICBGb3JtYXQgICBVc2VkDQot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0t
LS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAg
ICAwICAgICAgUE9TICAgZmxvYXQgICB4eXp3DQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAg
IDAgICB4eSAgICAgICAgICAxICAgICBOT05FICAgZmxvYXQgICB4eSAgDQotLy8NCi12c180XzAN
Ci1kY2xfaW5wdXQgdjAueHkNCi1kY2xfaW5wdXQgdjEueHkNCi1kY2xfb3V0cHV0X3NpdiBvMC54
eXp3LCBwb3NpdGlvbg0KLWRjbF9vdXRwdXQgbzEueHkNCi1tb3YgbzAueHksIHYwLnh5eHgNCi1t
b3YgbzAuencsIGwoMCwwLDAsMS4wMDAwMDApDQotbW92IG8xLnh5LCB2MS54eXh4DQotcmV0IA0K
LS8vIEFwcHJveGltYXRlbHkgNCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQot
Y29uc3QgQllURSBnX1ZTX1Bhc3N0aHJvdWdoW10gPQ0KLXsNCi0gICAgIDY4LCAgODgsICA2Niwg
IDY3LCAxOTcsIDIxNCwgDQotICAgIDE4NCwgIDg1LCAyNDAsICA5NCwgIDcxLCAgNDgsIA0KLSAg
ICAxNjUsICAzNCwgMTQyLCAyMzMsICAgMCwgMTM1LCANCi0gICAgMTkzLCAxNzgsICAgMSwgICAw
LCAgIDAsICAgMCwgDQotICAgICA2OCwgICAyLCAgIDAsICAgMCwgICA1LCAgIDAsIA0KLSAgICAg
IDAsICAgMCwgIDUyLCAgIDAsICAgMCwgICAwLCANCi0gICAgMTQwLCAgIDAsICAgMCwgICAwLCAy
MjQsICAgMCwgDQotICAgICAgMCwgICAwLCAgNTYsICAgMSwgICAwLCAgIDAsIA0KLSAgICAyMDAs
ICAgMSwgICAwLCAgIDAsICA4MiwgIDY4LCANCi0gICAgIDY5LCAgNzAsICA4MCwgICAwLCAgIDAs
ICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgIDI4LCAgIDAsICAgMCwgICAwLCAgIDAsICAg
NCwgDQotICAgIDI1NCwgMjU1LCAgIDAsICAgMSwgICAwLCAgIDAsIA0KLSAgICAgMjgsICAgMCwg
ICAwLCAgIDAsICA3NywgMTA1LCANCi0gICAgIDk5LCAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwg
DQotICAgIDExNiwgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsIA0KLSAgICAgNzIsICA3NiwgIDgz
LCAgNzYsICAzMiwgIDgzLCANCi0gICAgMTA0LCAgOTcsIDEwMCwgMTAxLCAxMTQsICAzMiwgDQot
ICAgICA2NywgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIA0KLSAgICAxMDEsIDExNCwgIDMyLCAg
NTcsICA0NiwgIDUxLCANCi0gICAgIDQ4LCAgNDYsICA1NywgIDUwLCAgNDgsICA0OCwgDQotICAg
ICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsIA0KLSAgICAgIDAsIDE3MSwgIDczLCAgODMs
ICA3MSwgIDc4LCANCi0gICAgIDc2LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgNTYsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMywg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAzLCAgIDMsICAgMCwg
ICAwLCANCi0gICAgIDY1LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAw
LCANCi0gICAgICAwLCAgIDAsICAgMywgICAzLCAgIDAsICAgMCwgDQotICAgICA4MCwgIDc5LCAg
ODMsICA3MywgIDg0LCAgNzMsIA0KLSAgICAgNzksICA3OCwgICAwLCAgODQsICA2OSwgIDg4LCAN
Ci0gICAgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAgMCwgDQotICAgIDE3MSwgMTcxLCAgNzks
ICA4MywgIDcxLCAgNzgsIA0KLSAgICAgODAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCANCi0g
ICAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgDQotICAgICA1NiwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAg
ICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgMTUsICAgMCwg
ICAwLCAgIDAsIA0KLSAgICAgNjgsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMywgICAwLCAgIDAsICAgMCwgICAx
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAzLCAgMTIsICAgMCwgICAwLCANCi0gICAgIDgzLCAg
ODYsICA5NSwgIDgwLCAgNzksICA4MywgDQotICAgICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAg
IDAsIA0KLSAgICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCANCi0gICAgIDgyLCAgNjgs
ICAgMCwgMTcxLCAxNzEsIDE3MSwgDQotICAgICA4MywgIDcyLCAgNjgsICA4MiwgMTM2LCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgIDY0LCAgIDAsICAgMSwgICAwLCANCi0gICAgIDM0LCAgIDAsICAg
MCwgICAwLCAgOTUsICAgMCwgDQotICAgICAgMCwgICAzLCAgNTAsICAxNiwgIDE2LCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgICAwLCAgIDAsICA5NSwgICAwLCANCi0gICAgICAwLCAgIDMsICA1MCwg
IDE2LCAgMTYsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgMTAzLCAgIDAsIA0KLSAg
ICAgIDAsICAgNCwgMjQyLCAgMzIsICAxNiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDEsICAgMCwgDQotICAgICAgMCwgICAwLCAxMDEsICAgMCwgICAwLCAgIDMsIA0KLSAgICAg
NTAsICAzMiwgIDE2LCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICA1NCwgICAwLCAg
IDAsICAgNSwgDQotICAgICA1MCwgIDMyLCAgMTYsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgIDcwLCAgMTYsICAxNiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgNTQs
ICAgMCwgDQotICAgICAgMCwgICA4LCAxOTQsICAzMiwgIDE2LCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMiwgIDY0LCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
ICAwLCAgIDAsIDEyOCwgIDYzLCANCi0gICAgIDU0LCAgIDAsICAgMCwgICA1LCAgNTAsICAzMiwg
DQotICAgICAxNiwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgNzAsICAxNiwgIDE2
LCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICA2MiwgICAwLCAgIDAsICAgMSwgDQot
ICAgICA4MywgIDg0LCAgNjUsICA4NCwgMTE2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICA0LCAg
IDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCANCi0gICAgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0g
ICAgICAwLCAgIDAsICAgMCwgICAwDQotfTsNCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91
Z2hsdW0xMXBzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hsdW0xMXBzLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGNmMDdiNGEzY2JkODk2NWQxOGNiNDhkMDE4ZTQxMmQ4NDI0MjA4OTUu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL3Bh
c3N0aHJvdWdobHVtMTFwcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLSNpZiAw
DQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxl
ciA5LjMwLjkyMDAuMTYzODQNCi0vLw0KLS8vDQotLy8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6
DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9y
bWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0v
LyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAg
ICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDJkICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQot
Ly8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJ
bmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLSAtLS0t
LS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQ
T1MgICBmbG9hdCAgICAgICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAg
ICAgICAgIDEgICAgIE5PTkUgICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNp
Z25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdp
c3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0t
LS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdF
VCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIGZsb2F0ICAgeHl6
dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNv
dXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9w
cyBsaW5lYXIgdjEueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLXNhbXBs
ZSByMC54eXp3LCB2MS54eXh4LCB0MC54eXp3LCBzMA0KLW1vdiBvMC54eXosIHIwLnh4eHgNCi1t
b3YgbzAudywgbCgxLjAwMDAwMCkNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA0IGluc3RydWN0
aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hM
dW1bXSA9DQotew0KLSAgICAgNjgsICA4OCwgIDY2LCAgNjcsIDI0NCwgICA5LCANCi0gICAgMjEz
LCAxNDcsICAxOSwgMjQ5LCAgNzAsIDExMSwgDQotICAgIDE1NywgIDkyLCAyNDMsIDE2MCwgIDQw
LCAxNDQsIA0KLSAgICAyMzgsIDIyMSwgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAgMTI4LCAg
IDIsICAgMCwgICAwLCAgIDUsICAgMCwgDQotICAgICAgMCwgICAwLCAgNTIsICAgMCwgICAwLCAg
IDAsIA0KLSAgICAyMjAsICAgMCwgICAwLCAgIDAsICA1MiwgICAxLCANCi0gICAgICAwLCAgIDAs
IDEwNCwgICAxLCAgIDAsICAgMCwgDQotICAgICAgNCwgICAyLCAgIDAsICAgMCwgIDgyLCAgNjgs
IA0KLSAgICAgNjksICA3MCwgMTYwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIA0K
LSAgICAgMjgsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCANCi0gICAgMjU1LCAyNTUsICAgMCwg
ICAxLCAgIDAsICAgMCwgDQotICAgIDEwOCwgICAwLCAgIDAsICAgMCwgIDkyLCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMSwgICAwLCAg
IDAsICAgMCwgDQotICAgIDEwMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCANCi0gICAgICA0LCAgIDAsICAgMCwgICAwLCAyNTUs
IDI1NSwgDQotICAgIDI1NSwgMjU1LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDEsICAg
MCwgICAwLCAgIDAsICAxMywgICAwLCANCi0gICAgICAwLCAgIDAsICA4MywgIDk3LCAxMDksIDEx
MiwgDQotICAgIDEwOCwgMTAxLCAxMTQsICAgMCwgIDg0LCAxMDEsIA0KLSAgICAxMjAsIDExNiwg
MTE3LCAxMTQsIDEwMSwgICAwLCANCi0gICAgIDc3LCAxMDUsICA5OSwgMTE0LCAxMTEsIDExNSwg
DQotICAgIDExMSwgMTAyLCAxMTYsICAzMiwgIDQwLCAgODIsIA0KLSAgICAgNDEsICAzMiwgIDcy
LCAgNzYsICA4MywgIDc2LCANCi0gICAgIDMyLCAgODMsIDEwNCwgIDk3LCAxMDAsIDEwMSwgDQot
ICAgIDExNCwgIDMyLCAgNjcsIDExMSwgMTA5LCAxMTIsIA0KLSAgICAxMDUsIDEwOCwgMTAxLCAx
MTQsICAzMiwgIDU3LCANCi0gICAgIDQ2LCAgNTEsICA0OCwgIDQ2LCAgNTcsICA1MCwgDQotICAg
ICA0OCwgIDQ4LCAgNDYsICA0OSwgIDU0LCAgNTEsIA0KLSAgICAgNTYsICA1MiwgICAwLCAxNzEs
ICA3MywgIDgzLCANCi0gICAgIDcxLCAgNzgsICA4MCwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDU2LCAgIDAsICAg
MCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQotICAgICAgMCwg
ICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAxNSwg
ICAwLCANCi0gICAgICAwLCAgIDAsICA2OCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAw
LCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgDQotICAgICAgMCwgICAwLCAg
ODMsICA4NiwgIDk1LCAgODAsIA0KLSAgICAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAN
Ci0gICAgIDc4LCAgIDAsICA4NCwgIDY5LCAgODgsICA2NywgDQotICAgICA3OSwgIDc5LCAgODIs
ICA2OCwgICAwLCAxNzEsIA0KLSAgICAxNzEsIDE3MSwgIDc5LCAgODMsICA3MSwgIDc4LCANCi0g
ICAgIDQ0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDgsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAgMzIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMywgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDE1LCAgIDAsICAgMCwgICAwLCANCi0gICAgIDgz
LCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgDQotICAgICA3MSwgIDY5LCAgODQsICAgMCwgMTcx
LCAxNzEsIA0KLSAgICAgODMsICA3MiwgIDY4LCAgODIsIDE0OCwgICAwLCANCi0gICAgICAwLCAg
IDAsICA2NCwgICAwLCAgIDAsICAgMCwgDQotICAgICAzNywgICAwLCAgIDAsICAgMCwgIDkwLCAg
IDAsIA0KLSAgICAgIDAsICAgMywgICAwLCAgOTYsICAxNiwgICAwLCANCi0gICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgODgsICAyNCwgDQotICAgICAgMCwgICA0LCAgIDAsIDExMiwgIDE2LCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICA4NSwgIDg1LCANCi0gICAgICAwLCAgIDAsICA5
OCwgIDE2LCAgIDAsICAgMywgDQotICAgICA1MCwgIDE2LCAgMTYsICAgMCwgICAxLCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgMTAxLCAgIDAsICAgMCwgICAzLCANCi0gICAgMjQyLCAgMzIsICAxNiwg
ICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAxMDQsICAgMCwgICAwLCAgIDIsIA0KLSAg
ICAgIDEsICAgMCwgICAwLCAgIDAsICA2OSwgICAwLCANCi0gICAgICAwLCAgIDksIDI0MiwgICAw
LCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDcwLCAgMTYsIA0KLSAgICAg
MTYsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAgIDcwLCAxMjYsICAxNiwgICAwLCAg
IDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICA5NiwgIDE2LCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICA1NCwgICAwLCANCi0gICAgICAwLCAgIDUsIDExNCwgIDMyLCAgMTYs
ICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsIA0KLSAgICAgMTYsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgIDU0LCAgIDAsICAgMCwgICA1LCAxMzAsICAz
MiwgDQotICAgICAxNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDEsICA2NCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgMTI4LCAgNjMsICA2MiwgICAwLCAgIDAsICAgMSwg
DQotICAgICA4MywgIDg0LCAgNjUsICA4NCwgMTE2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICA0
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MSwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCANCi0gICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgICAwLCAgIDAsICAgMCwgICAwDQotfTsNCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Ro
cm91Z2hsdW1hbHBoYTExcHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaGx1bWFscGhhMTFwcy5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTVkNjBlYjNiMjI2ZGQwZTdkYWU0OGJlZDU1
NDQ3YTk4ZmIxMzQxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVy
cy9jb21waWxlZC9wYXNzdGhyb3VnaGx1bWFscGhhMTFwcy5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTQ4ICswLDAgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBI
TFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQNCi0vLw0KLS8vDQotLy8vDQotLy8g
UmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0t
IC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Ft
cGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDJkICAgIDAgICAg
ICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1l
ICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAg
IFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0t
LS0tLS0gLS0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5
encgICAgICAgIDAgICAgICBQT1MgICBmbG9hdCAgICAgICANCi0vLyBURVhDT09SRCAgICAgICAg
ICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgICBmbG9hdCAgIHh5ICANCi0vLw0K
LS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAg
IEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0t
LS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRB
UkdFVCAgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVf
ZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0
KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1k
Y2xfdGVtcHMgMQ0KLXNhbXBsZSByMC54eXp3LCB2MS54eXh4LCB0MC54eXp3LCBzMA0KLW1vdiBv
MC54eXp3LCByMC54eHh3DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgMyBpbnN0cnVjdGlvbiBz
bG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX1Bhc3N0aHJvdWdoTHVtQWxw
aGFbXSA9DQotew0KLSAgICAgNjgsICA4OCwgIDY2LCAgNjcsIDE4NSwgIDE0LCANCi0gICAgIDg0
LCAyMjMsIDE5MiwgIDQyLCAgMTYsIDEzMywgDQotICAgICA0NiwgMTAwLCAgOTUsIDIyMSwgMTgz
LCAgOTcsIA0KLSAgICAxOTIsICAyMywgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAgMTA4LCAg
IDIsICAgMCwgICAwLCAgIDUsICAgMCwgDQotICAgICAgMCwgICAwLCAgNTIsICAgMCwgICAwLCAg
IDAsIA0KLSAgICAyMjAsICAgMCwgICAwLCAgIDAsICA1MiwgICAxLCANCi0gICAgICAwLCAgIDAs
IDEwNCwgICAxLCAgIDAsICAgMCwgDQotICAgIDI0MCwgICAxLCAgIDAsICAgMCwgIDgyLCAgNjgs
IA0KLSAgICAgNjksICA3MCwgMTYwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIA0K
LSAgICAgMjgsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCANCi0gICAgMjU1LCAyNTUsICAgMCwg
ICAxLCAgIDAsICAgMCwgDQotICAgIDEwOCwgICAwLCAgIDAsICAgMCwgIDkyLCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMSwgICAwLCAg
IDAsICAgMCwgDQotICAgIDEwMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCANCi0gICAgICA0LCAgIDAsICAgMCwgICAwLCAyNTUs
IDI1NSwgDQotICAgIDI1NSwgMjU1LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDEsICAg
MCwgICAwLCAgIDAsICAxMywgICAwLCANCi0gICAgICAwLCAgIDAsICA4MywgIDk3LCAxMDksIDEx
MiwgDQotICAgIDEwOCwgMTAxLCAxMTQsICAgMCwgIDg0LCAxMDEsIA0KLSAgICAxMjAsIDExNiwg
MTE3LCAxMTQsIDEwMSwgICAwLCANCi0gICAgIDc3LCAxMDUsICA5OSwgMTE0LCAxMTEsIDExNSwg
DQotICAgIDExMSwgMTAyLCAxMTYsICAzMiwgIDQwLCAgODIsIA0KLSAgICAgNDEsICAzMiwgIDcy
LCAgNzYsICA4MywgIDc2LCANCi0gICAgIDMyLCAgODMsIDEwNCwgIDk3LCAxMDAsIDEwMSwgDQot
ICAgIDExNCwgIDMyLCAgNjcsIDExMSwgMTA5LCAxMTIsIA0KLSAgICAxMDUsIDEwOCwgMTAxLCAx
MTQsICAzMiwgIDU3LCANCi0gICAgIDQ2LCAgNTEsICA0OCwgIDQ2LCAgNTcsICA1MCwgDQotICAg
ICA0OCwgIDQ4LCAgNDYsICA0OSwgIDU0LCAgNTEsIA0KLSAgICAgNTYsICA1MiwgICAwLCAxNzEs
ICA3MywgIDgzLCANCi0gICAgIDcxLCAgNzgsICA4MCwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDU2LCAgIDAsICAg
MCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQotICAgICAgMCwg
ICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAxNSwg
ICAwLCANCi0gICAgICAwLCAgIDAsICA2OCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAw
LCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgDQotICAgICAgMCwgICAwLCAg
ODMsICA4NiwgIDk1LCAgODAsIA0KLSAgICAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAN
Ci0gICAgIDc4LCAgIDAsICA4NCwgIDY5LCAgODgsICA2NywgDQotICAgICA3OSwgIDc5LCAgODIs
ICA2OCwgICAwLCAxNzEsIA0KLSAgICAxNzEsIDE3MSwgIDc5LCAgODMsICA3MSwgIDc4LCANCi0g
ICAgIDQ0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDgsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAgMzIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMywgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDE1LCAgIDAsICAgMCwgICAwLCANCi0gICAgIDgz
LCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgDQotICAgICA3MSwgIDY5LCAgODQsICAgMCwgMTcx
LCAxNzEsIA0KLSAgICAgODMsICA3MiwgIDY4LCAgODIsIDEyOCwgICAwLCANCi0gICAgICAwLCAg
IDAsICA2NCwgICAwLCAgIDAsICAgMCwgDQotICAgICAzMiwgICAwLCAgIDAsICAgMCwgIDkwLCAg
IDAsIA0KLSAgICAgIDAsICAgMywgICAwLCAgOTYsICAxNiwgICAwLCANCi0gICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgODgsICAyNCwgDQotICAgICAgMCwgICA0LCAgIDAsIDExMiwgIDE2LCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICA4NSwgIDg1LCANCi0gICAgICAwLCAgIDAsICA5
OCwgIDE2LCAgIDAsICAgMywgDQotICAgICA1MCwgIDE2LCAgMTYsICAgMCwgICAxLCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgMTAxLCAgIDAsICAgMCwgICAzLCANCi0gICAgMjQyLCAgMzIsICAxNiwg
ICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAxMDQsICAgMCwgICAwLCAgIDIsIA0KLSAg
ICAgIDEsICAgMCwgICAwLCAgIDAsICA2OSwgICAwLCANCi0gICAgICAwLCAgIDksIDI0MiwgICAw
LCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDcwLCAgMTYsIA0KLSAgICAg
MTYsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAgIDcwLCAxMjYsICAxNiwgICAwLCAg
IDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICA5NiwgIDE2LCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICA1NCwgICAwLCANCi0gICAgICAwLCAgIDUsIDI0MiwgIDMyLCAgMTYs
ICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgMTIsIA0KLSAgICAgMTYsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgIDYyLCAgIDAsICAgMCwgICAxLCAgODMsICA4
NCwgDQotICAgICA2NSwgIDg0LCAxMTYsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDMsICAgMCwg
ICAwLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAxLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCANCi0gICAgICAwLCAgIDANCi19Ow0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHBz
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRl
cnMvY29tcGlsZWQvcGFzc3Rocm91Z2hwcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBjMGEyYzdkNDgyYjMzYmU4NjY3NDk1NDc1NWEzOTk1ODVjOGFiZWE4Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHBzLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVk
IGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0DQot
Ly8NCi0vLy8NCi0vLyBQYXJhbWV0ZXJzOg0KLS8vDQotLy8gICBzYW1wbGVyMkQgdGV4Ow0KLS8v
DQotLy8NCi0vLyBSZWdpc3RlcnM6DQotLy8NCi0vLyAgIE5hbWUgICAgICAgICBSZWcgICBTaXpl
DQotLy8gICAtLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQ0KLS8vICAgdGV4ICAgICAgICAgIHMwICAg
ICAgIDENCi0vLw0KLQ0KLSAgICBwc18yXzANCi0gICAgZGNsIHQwLnh5DQotICAgIGRjbF8yZCBz
MA0KLSAgICB0ZXhsZCByMCwgdDAsIHMwDQotICAgIG1vdiBvQzAsIHIwDQotDQotLy8gYXBwcm94
aW1hdGVseSAyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVyZSwgMSBhcml0aG1ldGlj
KQ0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19wczIwX3Bhc3N0aHJvdWdocHNbXSA9DQotew0K
LSAgICAgIDAsICAgMiwgMjU1LCAyNTUsIDI1NCwgMjU1LCANCi0gICAgIDMzLCAgIDAsICA2Nywg
IDg0LCAgNjUsICA2NiwgDQotICAgICAyOCwgICAwLCAgIDAsICAgMCwgIDc1LCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgICAwLCAgIDIsIDI1NSwgMjU1LCANCi0gICAgICAxLCAgIDAsICAgMCwgICAw
LCAgMjgsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsIA0KLSAgICAg
NjgsICAgMCwgICAwLCAgIDAsICA0OCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMywgICAwLCAg
IDAsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDUyLCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgMTE2LCAxMDEsIDEyMCwgICAwLCAgIDQs
ICAgMCwgDQotICAgICAxMiwgICAwLCAgIDEsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDEsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsIDExMiwgMTE1LCAgOTUsICA1
MCwgDQotICAgICA5NSwgIDQ4LCAgIDAsICA3NywgMTA1LCAgOTksIA0KLSAgICAxMTQsIDExMSwg
MTE1LCAxMTEsIDEwMiwgMTE2LCANCi0gICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3Miwg
DQotICAgICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAxMDQsIA0KLSAgICAgOTcsIDEwMCwgMTAx
LCAxMTQsICAzMiwgIDY3LCANCi0gICAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgDQot
ICAgIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCAgNDgsIA0KLSAgICAgNDYsICA1NywgIDUwLCAg
NDgsICA0OCwgIDQ2LCANCi0gICAgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAgMCwgDQotICAg
IDE3MSwgMTcxLCAgMzEsICAgMCwgICAwLCAgIDIsIA0KLSAgICAgIDAsICAgMCwgICAwLCAxMjgs
ICAgMCwgICAwLCANCi0gICAgICAzLCAxNzYsICAzMSwgICAwLCAgIDAsICAgMiwgDQotICAgICAg
MCwgICAwLCAgIDAsIDE0NCwgICAwLCAgIDgsIA0KLSAgICAgMTUsIDE2MCwgIDY2LCAgIDAsICAg
MCwgICAzLCANCi0gICAgICAwLCAgIDAsICAxNSwgMTI4LCAgIDAsICAgMCwgDQotICAgIDIyOCwg
MTc2LCAgIDAsICAgOCwgMjI4LCAxNjAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDIsICAgMCwg
ICA4LCANCi0gICAgIDE1LCAxMjgsICAgMCwgICAwLCAyMjgsIDEyOCwgDQotICAgIDI1NSwgMjU1
LCAgIDAsICAgMA0KLX07DQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiMTFwcy5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJz
L2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiMTFwcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA1ODZjYmNmNmI4MmNmZDk2NTg2MDE4ZGUxOTk3OTk3Mzg2MTg3NzM5Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJn
YjExcHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1MiArMCwwIEBACi0jaWYgMA0KLS8vDQotLy8g
R2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAw
LjE2Mzg0DQotLy8NCi0vLw0KLS8vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8g
TmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAg
IERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0t
LS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAw
ICAgICAgICAxDQotLy8gVGV4dHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUg
IGZsb2F0NCAgICAgICAgICAyZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5w
dXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNr
IFJlZ2lzdGVyIFN5c1ZhbHVlICBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tDQotLy8gU1Zf
UE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICAgZmxvYXQg
ICAgICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAg
ICBOT05FICAgZmxvYXQgICB4eSAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQot
Ly8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFs
dWUgIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0g
LS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAg
ICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICBmbG9hdCAgIHh5encNCi0vLw0KLXBz
XzRfMA0KLWRjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQNCi1kY2xfcmVzb3VyY2VfdGV4dHVy
ZTJkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYx
Lnh5DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi1zYW1wbGUgcjAueHl6dywg
djEueHl4eCwgdDAueHl6dywgczANCi1tb3YgbzAueHl6LCByMC54eXp4DQotbW92IG8wLncsIGwo
MS4wMDAwMDApDQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgNCBpbnN0cnVjdGlvbiBzbG90cyB1
c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX1Bhc3N0aHJvdWdoUkdCW10gPQ0KLXsN
Ci0gICAgIDY4LCAgODgsICA2NiwgIDY3LCAxMjUsIDE4NiwgDQotICAgIDI1MCwgMjQyLCAxMTMs
IDI1NSwgIDU5LCAyMzksIA0KLSAgICAxMTksIDE1OCwgMjM3LCAgNzgsIDIyMCwgIDQzLCANCi0g
ICAgMTYwLCAgNDYsICAgMSwgICAwLCAgIDAsICAgMCwgDQotICAgIDEyOCwgICAyLCAgIDAsICAg
MCwgICA1LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDUyLCAgIDAsICAgMCwgICAwLCANCi0gICAg
MjIwLCAgIDAsICAgMCwgICAwLCAgNTIsICAgMSwgDQotICAgICAgMCwgICAwLCAxMDQsICAgMSwg
ICAwLCAgIDAsIA0KLSAgICAgIDQsICAgMiwgICAwLCAgIDAsICA4MiwgIDY4LCANCi0gICAgIDY5
LCAgNzAsIDE2MCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCANCi0gICAgIDI4LCAg
IDAsICAgMCwgICAwLCAgIDAsICAgNCwgDQotICAgIDI1NSwgMjU1LCAgIDAsICAgMSwgICAwLCAg
IDAsIA0KLSAgICAxMDgsICAgMCwgICAwLCAgIDAsICA5MiwgICAwLCANCi0gICAgICAwLCAgIDAs
ICAgMywgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDEsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0K
LSAgICAxMDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgNSwg
ICAwLCAgIDAsICAgMCwgDQotICAgICAgNCwgICAwLCAgIDAsICAgMCwgMjU1LCAyNTUsIA0KLSAg
ICAyNTUsIDI1NSwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAw
LCAgMTMsICAgMCwgDQotICAgICAgMCwgICAwLCAgODMsICA5NywgMTA5LCAxMTIsIA0KLSAgICAx
MDgsIDEwMSwgMTE0LCAgIDAsICA4NCwgMTAxLCANCi0gICAgMTIwLCAxMTYsIDExNywgMTE0LCAx
MDEsICAgMCwgDQotICAgICA3NywgMTA1LCAgOTksIDExNCwgMTExLCAxMTUsIA0KLSAgICAxMTEs
IDEwMiwgMTE2LCAgMzIsICA0MCwgIDgyLCANCi0gICAgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMs
ICA3NiwgDQotICAgICAzMiwgIDgzLCAxMDQsICA5NywgMTAwLCAxMDEsIA0KLSAgICAxMTQsICAz
MiwgIDY3LCAxMTEsIDEwOSwgMTEyLCANCi0gICAgMTA1LCAxMDgsIDEwMSwgMTE0LCAgMzIsICA1
NywgDQotICAgICA0NiwgIDUxLCAgNDgsICA0NiwgIDU3LCAgNTAsIA0KLSAgICAgNDgsICA0OCwg
IDQ2LCAgNDksICA1NCwgIDUxLCANCi0gICAgIDU2LCAgNTIsICAgMCwgMTcxLCAgNzMsICA4Mywg
DQotICAgICA3MSwgIDc4LCAgODAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDIsICAgMCwgICAw
LCAgIDAsICAgOCwgICAwLCANCi0gICAgICAwLCAgIDAsICA1NiwgICAwLCAgIDAsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAzLCAg
IDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgMTUsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgNjgsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsIA0KLSAgICAgIDAsICAgMCwgIDgzLCAgODYsICA5
NSwgIDgwLCANCi0gICAgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgDQotICAgICA3OCwg
ICAwLCAgODQsICA2OSwgIDg4LCAgNjcsIA0KLSAgICAgNzksICA3OSwgIDgyLCAgNjgsICAgMCwg
MTcxLCANCi0gICAgMTcxLCAxNzEsICA3OSwgIDgzLCAgNzEsICA3OCwgDQotICAgICA0NCwgICAw
LCAgIDAsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAw
LCANCi0gICAgIDMyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQotICAgICA4MywgIDg2LCAgOTUs
ICA4NCwgIDY1LCAgODIsIA0KLSAgICAgNzEsICA2OSwgIDg0LCAgIDAsIDE3MSwgMTcxLCANCi0g
ICAgIDgzLCAgNzIsICA2OCwgIDgyLCAxNDgsICAgMCwgDQotICAgICAgMCwgICAwLCAgNjQsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAgMzcsICAgMCwgICAwLCAgIDAsICA5MCwgICAwLCANCi0gICAg
ICAwLCAgIDMsICAgMCwgIDk2LCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwg
IDg4LCAgMjQsIA0KLSAgICAgIDAsICAgNCwgICAwLCAxMTIsICAxNiwgICAwLCANCi0gICAgICAw
LCAgIDAsICAgMCwgICAwLCAgODUsICA4NSwgDQotICAgICAgMCwgICAwLCAgOTgsICAxNiwgICAw
LCAgIDMsIA0KLSAgICAgNTAsICAxNiwgIDE2LCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAg
IDAsIDEwMSwgICAwLCAgIDAsICAgMywgDQotICAgIDI0MiwgIDMyLCAgMTYsICAgMCwgICAwLCAg
IDAsIA0KLSAgICAgIDAsICAgMCwgMTA0LCAgIDAsICAgMCwgICAyLCANCi0gICAgICAxLCAgIDAs
ICAgMCwgICAwLCAgNjksICAgMCwgDQotICAgICAgMCwgICA5LCAyNDIsICAgMCwgIDE2LCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICA3MCwgIDE2LCANCi0gICAgIDE2LCAgIDAsICAg
MSwgICAwLCAgIDAsICAgMCwgDQotICAgICA3MCwgMTI2LCAgMTYsICAgMCwgICAwLCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgICAwLCAgOTYsICAxNiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgNTQsICAgMCwgDQotICAgICAgMCwgICA1LCAxMTQsICAzMiwgIDE2LCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICA3MCwgICAyLCANCi0gICAgIDE2LCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQotICAgICA1NCwgICAwLCAgIDAsICAgNSwgMTMwLCAgMzIsIA0KLSAgICAg
MTYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAxLCAgNjQsICAgMCwgICAwLCAg
IDAsICAgMCwgDQotICAgIDEyOCwgIDYzLCAgNjIsICAgMCwgICAwLCAgIDEsIA0KLSAgICAgODMs
ICA4NCwgIDY1LCAgODQsIDExNiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgNCwgICAwLCAgIDAs
ICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgICAyLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDEsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwg
ICAwLCAgIDAsICAgMA0KLX07DQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTEx
cHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hh
ZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmExMXBzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGQ3ZDJhMjVhYmEwOTZjM2ZhYTM3ZGYyMWViNTNjOTg0MzhkMDRiYTMuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJv
dWdocmdiYTExcHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0jaWYgMA0KLS8v
DQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4z
MC45MjAwLjE2Mzg0DQotLy8NCi0vLw0KLS8vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8v
DQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAg
ICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2Ft
cGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBO
QSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl
eHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQot
Ly8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXgg
ICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlICBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tDQot
Ly8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICAg
ZmxvYXQgICAgICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAg
ICAxICAgICBOT05FICAgZmxvYXQgICB4eSAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1
cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIg
U3lzVmFsdWUgIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAt
LS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAg
ICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICBmbG9hdCAgIHh5encNCi0v
Lw0KLXBzXzRfMA0KLWRjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQNCi1kY2xfcmVzb3VyY2Vf
dGV4dHVyZTJkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHMgbGlu
ZWFyIHYxLnh5DQotZGNsX291dHB1dCBvMC54eXp3DQotc2FtcGxlIG8wLnh5encsIHYxLnh5eHgs
IHQwLnh5encsIHMwDQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgMiBpbnN0cnVjdGlvbiBzbG90
cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX1Bhc3N0aHJvdWdoUkdCQVtdID0N
Ci17DQotICAgICA2OCwgIDg4LCAgNjYsICA2NywgMTUxLCAxNTIsIA0KLSAgICAgIDgsIDEwMiwg
MTc0LCAxMzUsICA3NiwgIDU3LCANCi0gICAgMTAwLCAxNDYsICA1OSwgIDc0LCAyMDUsICAzNSwg
DQotICAgIDIwNiwgIDIxLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgODAsICAgMiwgICAw
LCAgIDAsICAgNSwgICAwLCANCi0gICAgICAwLCAgIDAsICA1MiwgICAwLCAgIDAsICAgMCwgDQot
ICAgIDIyMCwgICAwLCAgIDAsICAgMCwgIDUyLCAgIDEsIA0KLSAgICAgIDAsICAgMCwgMTA0LCAg
IDEsICAgMCwgICAwLCANCi0gICAgMjEyLCAgIDEsICAgMCwgICAwLCAgODIsICA2OCwgDQotICAg
ICA2OSwgIDcwLCAxNjAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgDQotICAgICAy
OCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsIA0KLSAgICAyNTUsIDI1NSwgICAwLCAgIDEsICAg
MCwgICAwLCANCi0gICAgMTA4LCAgIDAsICAgMCwgICAwLCAgOTIsICAgMCwgDQotICAgICAgMCwg
ICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAw
LCANCi0gICAgMTAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgDQotICAgICAgMCwgICAwLCAg
IDUsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDQsICAgMCwgICAwLCAgIDAsIDI1NSwgMjU1LCAN
Ci0gICAgMjU1LCAyNTUsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAs
ICAgMCwgIDEzLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDgzLCAgOTcsIDEwOSwgMTEyLCANCi0g
ICAgMTA4LCAxMDEsIDExNCwgICAwLCAgODQsIDEwMSwgDQotICAgIDEyMCwgMTE2LCAxMTcsIDEx
NCwgMTAxLCAgIDAsIA0KLSAgICAgNzcsIDEwNSwgIDk5LCAxMTQsIDExMSwgMTE1LCANCi0gICAg
MTExLCAxMDIsIDExNiwgIDMyLCAgNDAsICA4MiwgDQotICAgICA0MSwgIDMyLCAgNzIsICA3Niwg
IDgzLCAgNzYsIA0KLSAgICAgMzIsICA4MywgMTA0LCAgOTcsIDEwMCwgMTAxLCANCi0gICAgMTE0
LCAgMzIsICA2NywgMTExLCAxMDksIDExMiwgDQotICAgIDEwNSwgMTA4LCAxMDEsIDExNCwgIDMy
LCAgNTcsIA0KLSAgICAgNDYsICA1MSwgIDQ4LCAgNDYsICA1NywgIDUwLCANCi0gICAgIDQ4LCAg
NDgsICA0NiwgIDQ5LCAgNTQsICA1MSwgDQotICAgICA1NiwgIDUyLCAgIDAsIDE3MSwgIDczLCAg
ODMsIA0KLSAgICAgNzEsICA3OCwgIDgwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAyLCAgIDAs
ICAgMCwgICAwLCAgIDgsICAgMCwgDQotICAgICAgMCwgICAwLCAgNTYsICAgMCwgICAwLCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICAg
MywgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDE1LCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgIDY4LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KLSAg
ICAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLCANCi0gICAgICAwLCAgIDAsICA4MywgIDg2
LCAgOTUsICA4MCwgDQotICAgICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksIA0KLSAgICAg
NzgsICAgMCwgIDg0LCAgNjksICA4OCwgIDY3LCANCi0gICAgIDc5LCAgNzksICA4MiwgIDY4LCAg
IDAsIDE3MSwgDQotICAgIDE3MSwgMTcxLCAgNzksICA4MywgIDcxLCAgNzgsIA0KLSAgICAgNDQs
ICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAs
ICAgMCwgDQotICAgICAzMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQotICAgICAgMCwgICAwLCAgMTUsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgODMsICA4Niwg
IDk1LCAgODQsICA2NSwgIDgyLCANCi0gICAgIDcxLCAgNjksICA4NCwgICAwLCAxNzEsIDE3MSwg
DQotICAgICA4MywgIDcyLCAgNjgsICA4MiwgMTAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDY0
LCAgIDAsICAgMCwgICAwLCANCi0gICAgIDI1LCAgIDAsICAgMCwgICAwLCAgOTAsICAgMCwgDQot
ICAgICAgMCwgICAzLCAgIDAsICA5NiwgIDE2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAg
IDAsICA4OCwgIDI0LCANCi0gICAgICAwLCAgIDQsICAgMCwgMTEyLCAgMTYsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgIDg1LCAgODUsIA0KLSAgICAgIDAsICAgMCwgIDk4LCAgMTYs
ICAgMCwgICAzLCANCi0gICAgIDUwLCAgMTYsICAxNiwgICAwLCAgIDEsICAgMCwgDQotICAgICAg
MCwgICAwLCAxMDEsICAgMCwgICAwLCAgIDMsIA0KLSAgICAyNDIsICAzMiwgIDE2LCAgIDAsICAg
MCwgICAwLCANCi0gICAgICAwLCAgIDAsICA2OSwgICAwLCAgIDAsICAgOSwgDQotICAgIDI0Miwg
IDMyLCAgMTYsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDcwLCAgMTYsICAxNiwg
ICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgNzAsIDEyNiwgDQotICAgICAxNiwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICA5NiwgIDE2LCAgIDAsICAgMCwgICAw
LCANCi0gICAgICAwLCAgIDAsICA2MiwgICAwLCAgIDAsICAgMSwgDQotICAgICA4MywgIDg0LCAg
NjUsICA4NCwgMTE2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDIs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0g
ICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAxLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAg
MCwgICAwDQotfTsNCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvc3RhbmRhcmR2cy5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL3N0
YW5kYXJkdnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZiODk1OTVjYmI1NWNj
MzJjM2I4MzczZDc4MTFjMDlmMGFmNDk2MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvc3RhbmRhcmR2cy5oCisrKyAvZGV2L251bGwKQEAgLTEs
NjcgKzAsMCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhM
U0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NA0KLS8vDQotLy8vDQotLy8gUGFyYW1l
dGVyczoNCi0vLw0KLS8vICAgZmxvYXQ0IGhhbGZQaXhlbFNpemU7DQotLy8NCi0vLw0KLS8vIFJl
Z2lzdGVyczoNCi0vLw0KLS8vICAgTmFtZSAgICAgICAgICBSZWcgICBTaXplDQotLy8gICAtLS0t
LS0tLS0tLS0tIC0tLS0tIC0tLS0NCi0vLyAgIGhhbGZQaXhlbFNpemUgYzAgICAgICAgMQ0KLS8v
DQotDQotICAgIHZzXzJfMA0KLSAgICBkZWYgYzEsIDAuNSwgLTAuNSwgMSwgMA0KLSAgICBkY2xf
cG9zaXRpb24gdjANCi0gICAgYWRkIG9Qb3MsIHYwLCBjMA0KLSAgICBtYWQgb1QwLCB2MCwgYzEu
eHl6eiwgYzEueHh3dw0KLQ0KLS8vIGFwcHJveGltYXRlbHkgMiBpbnN0cnVjdGlvbiBzbG90cyB1
c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX3ZzMjBfc3RhbmRhcmR2c1tdID0NCi17DQot
ICAgICAgMCwgICAyLCAyNTQsIDI1NSwgMjU0LCAyNTUsIA0KLSAgICAgMzYsICAgMCwgIDY3LCAg
ODQsICA2NSwgIDY2LCANCi0gICAgIDI4LCAgIDAsICAgMCwgICAwLCAgODcsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgIDAsICAgMiwgMjU0LCAyNTUsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAs
ICAyOCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgDQotICAgICA4
MCwgICAwLCAgIDAsICAgMCwgIDQ4LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAyLCAgIDAsICAg
MCwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgNjQsICAgMCwgDQotICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAxMDQsICA5NywgMTA4LCAxMDIsICA4MCwg
MTA1LCANCi0gICAgMTIwLCAxMDEsIDEwOCwgIDgzLCAxMDUsIDEyMiwgDQotICAgIDEwMSwgICAw
LCAxNzEsIDE3MSwgICAxLCAgIDAsIA0KLSAgICAgIDMsICAgMCwgICAxLCAgIDAsICAgNCwgICAw
LCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAx
MTgsIDExNSwgIDk1LCAgNTAsIA0KLSAgICAgOTUsICA0OCwgICAwLCAgNzcsIDEwNSwgIDk5LCAN
Ci0gICAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgDQotICAgICAzMiwgIDQwLCAgODIs
ICA0MSwgIDMyLCAgNzIsIA0KLSAgICAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgMTA0LCANCi0g
ICAgIDk3LCAxMDAsIDEwMSwgMTE0LCAgMzIsICA2NywgDQotICAgIDExMSwgMTA5LCAxMTIsIDEw
NSwgMTA4LCAxMDEsIA0KLSAgICAxMTQsICAzMiwgIDU3LCAgNDYsICA1MSwgIDQ4LCANCi0gICAg
IDQ2LCAgNTcsICA1MCwgIDQ4LCAgNDgsICA0NiwgDQotICAgICA0OSwgIDU0LCAgNTEsICA1Niwg
IDUyLCAgIDAsIA0KLSAgICAxNzEsIDE3MSwgIDgxLCAgIDAsICAgMCwgICA1LCANCi0gICAgICAx
LCAgIDAsICAxNSwgMTYwLCAgIDAsICAgMCwgDQotICAgICAgMCwgIDYzLCAgIDAsICAgMCwgICAw
LCAxOTEsIA0KLSAgICAgIDAsICAgMCwgMTI4LCAgNjMsICAgMCwgICAwLCANCi0gICAgICAwLCAg
IDAsICAzMSwgICAwLCAgIDAsICAgMiwgDQotICAgICAgMCwgICAwLCAgIDAsIDEyOCwgICAwLCAg
IDAsIA0KLSAgICAgMTUsIDE0NCwgICAyLCAgIDAsICAgMCwgICAzLCANCi0gICAgICAwLCAgIDAs
ICAxNSwgMTkyLCAgIDAsICAgMCwgDQotICAgIDIyOCwgMTQ0LCAgIDAsICAgMCwgMjI4LCAxNjAs
IA0KLSAgICAgIDQsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCANCi0gICAgIDE1LCAyMjQsICAg
MCwgICAwLCAyMjgsIDE0NCwgDQotICAgICAgMSwgICAwLCAxNjQsIDE2MCwgICAxLCAgIDAsIA0K
LSAgICAyNDAsIDE2MCwgMjU1LCAyNTUsICAgMCwgICAwDQotfTsNCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvZ2VuZXJh
dGVfc2hhZGVycy5iYXQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVycy5iYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDkxZTI5OGU4M2Y0MzAzMDJmNjVhYTMzNjI0MTVhNzAzYjBlZmI5MzMuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2dlbmVyYXRlX3NoYWRlcnMu
YmF0CisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotQEVDSE8gT0ZGDQotUkVNDQotUkVN
IENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLg0KLVJFTSBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotUkVNIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuDQotUkVNDQotDQotUEFUSCAlUEFUSCU7JVByb2dyYW1GaWxlcyh4ODYpJVxXaW5kb3dz
IEtpdHNcOC4wXGJpblx4ODY7JURYU0RLX0RJUiVcVXRpbGl0aWVzXGJpblx4ODYNCi0NCi1meGMg
L0Ugc3RhbmRhcmR2cyAvVCB2c18yXzAgL0ZoIGNvbXBpbGVkL3N0YW5kYXJkdnMuaCBCbGl0LnZz
DQotZnhjIC9FIGZsaXB5dnMgL1QgdnNfMl8wIC9GaCBjb21waWxlZC9mbGlweXZzLmggQmxpdC52
cw0KLWZ4YyAvRSBwYXNzdGhyb3VnaHBzIC9UIHBzXzJfMCAvRmggY29tcGlsZWQvcGFzc3Rocm91
Z2hwcy5oIEJsaXQucHMNCi1meGMgL0UgbHVtaW5hbmNlcHMgL1QgcHNfMl8wIC9GaCBjb21waWxl
ZC9sdW1pbmFuY2Vwcy5oIEJsaXQucHMNCi1meGMgL0UgY29tcG9uZW50bWFza3BzIC9UIHBzXzJf
MCAvRmggY29tcGlsZWQvY29tcG9uZW50bWFza3BzLmggQmxpdC5wcw0KLQ0KLWZ4YyAvRSBWU19Q
YXNzdGhyb3VnaCAvVCB2c180XzAgL0ZoIGNvbXBpbGVkL3Bhc3N0aHJvdWdoMTF2cy5oIFBhc3N0
aHJvdWdoMTEuaGxzbA0KLWZ4YyAvRSBQU19QYXNzdGhyb3VnaFJHQkEgL1QgcHNfNF8wIC9GaCBj
b21waWxlZC9wYXNzdGhyb3VnaHJnYmExMXBzLmggUGFzc3Rocm91Z2gxMS5obHNsDQotZnhjIC9F
IFBTX1Bhc3N0aHJvdWdoUkdCIC9UIHBzXzRfMCAvRmggY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2Ix
MXBzLmggUGFzc3Rocm91Z2gxMS5obHNsDQotZnhjIC9FIFBTX1Bhc3N0aHJvdWdoTHVtIC9UIHBz
XzRfMCAvRmggY29tcGlsZWQvcGFzc3Rocm91Z2hsdW0xMXBzLmggUGFzc3Rocm91Z2gxMS5obHNs
DQotZnhjIC9FIFBTX1Bhc3N0aHJvdWdoTHVtQWxwaGEgL1QgcHNfNF8wIC9GaCBjb21waWxlZC9w
YXNzdGhyb3VnaGx1bWFscGhhMTFwcy5oIFBhc3N0aHJvdWdoMTEuaGxzbA0KLQ0KLWZ4YyAvRSBW
U19DbGVhciAvVCB2c180XzAgL0ZoIGNvbXBpbGVkL2NsZWFyMTF2cy5oIENsZWFyMTEuaGxzbA0K
LWZ4YyAvRSBQU19DbGVhclNpbmdsZSAvVCBwc180XzAgL0ZoIGNvbXBpbGVkL2NsZWFyc2luZ2xl
MTFwcy5oIENsZWFyMTEuaGxzbA0KLWZ4YyAvRSBQU19DbGVhck11bHRpcGxlIC9UIHBzXzRfMCAv
RmggY29tcGlsZWQvY2xlYXJtdWx0aXBsZTExcHMuaCBDbGVhcjExLmhsc2wNCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3ZlcnRleGNv
bnZlcnNpb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvdmVydGV4Y29udmVyc2lvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTBi
OWQ0OGEzODZmZmMxNzI1NzFkYTQ0ZDliZTIwZDEwMjkwMTljLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvdmVydGV4Y29udmVyc2lvbi5oCisrKyAvZGV2L251bGwKQEAgLTEs
MjAzICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIHZlcnRleGNvbnZlcnNpb24uaDog
QSBsaWJyYXJ5IG9mIHZlcnRleCBjb252ZXJzaW9uIGNsYXNzZXMgdGhhdCBjYW4gYmUgdXNlZCB0
byBidWlsZAotLy8gdGhlIEZvcm1hdENvbnZlcnRlciBvYmplY3RzIHVzZWQgYnkgdGhlIGJ1ZmZl
ciBjb252ZXJzaW9uIHN5c3RlbS4KLQotI2lmbmRlZiBMSUJHTEVTVjJfVkVSVEVYQ09OVkVSU0lP
Tl9IXwotI2RlZmluZSBMSUJHTEVTVjJfVkVSVEVYQ09OVkVSU0lPTl9IXwotCi1uYW1lc3BhY2Ug
cngKLXsKLQotLy8gQ29udmVyc2lvbiB0eXBlczoKLS8vIHN0YXRpYyBjb25zdCBib29sIGlkZW50
aXR5OiB0cnVlIGlmIHRoaXMgaXMgYW4gaWRlbnRpdHkgdHJhbnNmb3JtLCBmYWxzZSBvdGhlcndp
c2UKLS8vIHN0YXRpYyBVIGNvbnZlcnQoVCk6IGNvbnZlcnQgYSBzaW5nbGUgZWxlbWVudCBmcm9t
IHRoZSBpbnB1dCB0eXBlIHRvIHRoZSBvdXRwdXQgdHlwZQotLy8gdHlwZWRlZiAuLi4gT3V0cHV0
VHlwZTogdGhlIHR5cGUgcHJvZHVjZWQgYnkgdGhpcyBjb252ZXJzaW9uCi0KLXRlbXBsYXRlIDxj
bGFzcyBUPgotc3RydWN0IElkZW50aXR5Ci17Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRp
dHkgPSB0cnVlOwotCi0gICAgdHlwZWRlZiBUIE91dHB1dFR5cGU7Ci0KLSAgICBzdGF0aWMgVCBj
b252ZXJ0KFQgeCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB4OwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlIDxjbGFzcyBGcm9tVCwgY2xhc3MgVG9UPgotc3RydWN0IENhc3QKLXsKLSAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpZGVudGl0eSA9IGZhbHNlOwotCi0gICAgdHlwZWRlZiBUb1QgT3V0cHV0VHlw
ZTsKLQotICAgIHN0YXRpYyBUb1QgY29udmVydChGcm9tVCB4KQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFRvVD4oeCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+
Ci1zdHJ1Y3QgQ2FzdDxULCBUPgotewotICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0g
dHJ1ZTsKLQotICAgIHR5cGVkZWYgVCBPdXRwdXRUeXBlOwotCi0gICAgc3RhdGljIFQgY29udmVy
dChUIHgpCi0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oeCk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgTm9ybWFsaXplCi17Ci0gICAgc3RhdGlj
IGNvbnN0IGJvb2wgaWRlbnRpdHkgPSBmYWxzZTsKLQotICAgIHR5cGVkZWYgZmxvYXQgT3V0cHV0
VHlwZTsKLQotICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0KFQgeCkKLSAgICB7Ci0gICAgICAgIHR5
cGVkZWYgc3RkOjpudW1lcmljX2xpbWl0czxUPiBOTDsKLSAgICAgICAgZmxvYXQgZiA9IHN0YXRp
Y19jYXN0PGZsb2F0Pih4KTsKLQotICAgICAgICBpZiAoTkw6OmlzX3NpZ25lZCkKLSAgICAgICAg
ewotICAgICAgICAgICAgLy8gY29uc3QgZmxvYXQgPT4gVkMyMDA4IGNvbXB1dGVzIGl0IGF0IGNv
bXBpbGUgdGltZQotICAgICAgICAgICAgLy8gc3RhdGljIGNvbnN0IGZsb2F0ID0+IFZDMjAwOCBj
b21wdXRlcyBpdCB0aGUgZmlyc3QgdGltZSB3ZSBnZXQgaGVyZSwgc3RvcmVzIGl0IHRvIG1lbW9y
eSB3aXRoIHN0YXRpYyBndWFyZCBhbmQgYWxsIHRoYXQuCi0gICAgICAgICAgICBjb25zdCBmbG9h
dCBkaXZpc29yID0gMS4wZi8oMipzdGF0aWNfY2FzdDxmbG9hdD4oTkw6Om1heCgpKSsxKTsKLSAg
ICAgICAgICAgIHJldHVybiAoMipmKzEpKmRpdmlzb3I7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZi9OTDo6bWF4KCk7Ci0gICAgICAgIH0K
LSAgICB9Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgRnJvbVR5cGUsIHN0ZDo6c2l6ZV90IFNjYWxl
Qml0cz4KLXN0cnVjdCBGaXhlZFRvRmxvYXQKLXsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpZGVu
dGl0eSA9IGZhbHNlOwotCi0gICAgdHlwZWRlZiBmbG9hdCBPdXRwdXRUeXBlOwotCi0gICAgc3Rh
dGljIGZsb2F0IGNvbnZlcnQoRnJvbVR5cGUgeCkKLSAgICB7Ci0gICAgICAgIGNvbnN0IGZsb2F0
IGRpdmlzb3IgPSAxLjBmIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0YXRpY19jYXN0PEZyb21UeXBl
PigxKSA8PCBTY2FsZUJpdHMpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHgp
ICogZGl2aXNvcjsKLSAgICB9Ci19OwotCi0vLyBXaWRlbiB0eXBlczoKLS8vIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBpbnQgaW5pdGlhbFdpZHRoOiBudW1iZXIgb2YgY29tcG9uZW50cyBiZWZvcmUg
Y29udmVyc2lvbgotLy8gc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBmaW5hbFdpZHRoOiBudW1i
ZXIgb2YgY29tcG9uZW50cyBhZnRlciBjb252ZXJzaW9uCi0KLS8vIEZsb2F0IGlzIHN1cHBvcnRl
ZCBhdCBhbnkgc2l6ZS4KLXRlbXBsYXRlIDxzdGQ6OnNpemVfdCBOPgotc3RydWN0IE5vV2lkZW4K
LXsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgaW5pdGlhbFdpZHRoID0gTjsKLSAgICBz
dGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgZmluYWxXaWR0aCA9IE47Ci19OwotCi0vLyBTSE9SVCwg
bm9ybS1TSE9SVCwgbm9ybS1VTlNJR05FRF9TSE9SVCBhcmUgc3VwcG9ydGVkIGJ1dCBvbmx5IHdp
dGggMiBvciA0IGNvbXBvbmVudHMKLXRlbXBsYXRlIDxzdGQ6OnNpemVfdCBOPgotc3RydWN0IFdp
ZGVuVG9FdmVuCi17Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IGluaXRpYWxXaWR0aCA9
IE47Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IGZpbmFsV2lkdGggPSBOKyhOJjEpOwot
fTsKLQotdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+Ci1zdHJ1Y3QgV2lkZW5Ub0ZvdXIKLXsKLSAg
ICBzdGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgaW5pdGlhbFdpZHRoID0gTjsKLSAgICBzdGF0aWMg
Y29uc3Qgc3RkOjpzaXplX3QgZmluYWxXaWR0aCA9IDQ7Ci19OwotCi0vLyBNb3N0IHR5cGVzIGhh
dmUgMCBhbmQgMSB0aGF0IGFyZSBqdXN0IHRoYXQuCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVj
dCBTaW1wbGVEZWZhdWx0VmFsdWVzCi17Ci0gICAgc3RhdGljIFQgemVybygpIHsgcmV0dXJuIHN0
YXRpY19jYXN0PFQ+KDApOyB9Ci0gICAgc3RhdGljIFQgb25lKCkgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8VD4oMSk7IH0KLX07Ci0KLS8vIEJ1dCBub3JtYWxpc2VkIHR5cGVzIG9ubHkgc3RvcmUgWzAs
MV0gb3IgWy0xLDFdIHNvIDEuMCBpcyByZXByZXNlbnRlZCBieSB0aGUgbWF4IHZhbHVlLgotdGVt
cGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgTm9ybWFsaXplZERlZmF1bHRWYWx1ZXMKLXsKLSAgICBz
dGF0aWMgVCB6ZXJvKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oMCk7IH0KLSAgICBzdGF0aWMg
VCBvbmUoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKTsgfQotfTsKLQot
Ly8gQ29udmVydGVyOgotLy8gc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHk6IHRydWUgaWYgdGhp
cyBpcyBhbiBpZGVudGl0eSB0cmFuc2Zvcm0gKHdpdGggbm8gd2lkZW5pbmcpCi0vLyBzdGF0aWMg
Y29uc3Qgc3RkOjpzaXplX3QgZmluYWxTaXplOiBudW1iZXIgb2YgYnl0ZXMgcGVyIG91dHB1dCB2
ZXJ0ZXgKLS8vIHN0YXRpYyB2b2lkIGNvbnZlcnRBcnJheShjb25zdCB2b2lkICppbiwgc3RkOjpz
aXplX3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBuLCB2b2lkICpvdXQpOiBjb252ZXJ0IGFuIGFycmF5
IG9mIHZlcnRpY2VzLiBJbnB1dCBtYXkgYmUgc3RyaWRlZCwgYnV0IG91dHB1dCB3aWxsIGJlIHVu
c3RyaWRlZC4KLQotdGVtcGxhdGUgPGNsYXNzIEluVCwgY2xhc3MgV2lkZW5SdWxlLCBjbGFzcyBD
b252ZXJ0ZXIsIGNsYXNzIERlZmF1bHRWYWx1ZVJ1bGUgPSBTaW1wbGVEZWZhdWx0VmFsdWVzPElu
VD4gPgotc3RydWN0IFZlcnRleERhdGFDb252ZXJ0ZXIKLXsKLSAgICB0eXBlZGVmIHR5cGVuYW1l
IENvbnZlcnRlcjo6T3V0cHV0VHlwZSBPdXRwdXRUeXBlOwotICAgIHR5cGVkZWYgSW5UIElucHV0
VHlwZTsKLQotICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0gKFdpZGVuUnVsZTo6aW5p
dGlhbFdpZHRoID09IFdpZGVuUnVsZTo6ZmluYWxXaWR0aCkgJiYgQ29udmVydGVyOjppZGVudGl0
eTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgZmluYWxTaXplID0gV2lkZW5SdWxlOjpm
aW5hbFdpZHRoICogc2l6ZW9mKE91dHB1dFR5cGUpOwotCi0gICAgc3RhdGljIHZvaWQgY29udmVy
dEFycmF5KGNvbnN0IElucHV0VHlwZSAqaW4sIHN0ZDo6c2l6ZV90IHN0cmlkZSwgc3RkOjpzaXpl
X3QgbiwgT3V0cHV0VHlwZSAqb3V0KQotICAgIHsKLSAgICAgICAgZm9yIChzdGQ6OnNpemVfdCBp
ID0gMDsgaSA8IG47IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgSW5wdXRUeXBl
ICplaW4gPSBwb2ludGVyQWRkQnl0ZXMoaW4sIGkgKiBzdHJpZGUpOwotCi0gICAgICAgICAgICBj
b3B5Q29tcG9uZW50KG91dCwgZWluLCAwLCBzdGF0aWNfY2FzdDxPdXRwdXRUeXBlPihEZWZhdWx0
VmFsdWVSdWxlOjp6ZXJvKCkpKTsKLSAgICAgICAgICAgIGNvcHlDb21wb25lbnQob3V0LCBlaW4s
IDEsIHN0YXRpY19jYXN0PE91dHB1dFR5cGU+KERlZmF1bHRWYWx1ZVJ1bGU6Onplcm8oKSkpOwot
ICAgICAgICAgICAgY29weUNvbXBvbmVudChvdXQsIGVpbiwgMiwgc3RhdGljX2Nhc3Q8T3V0cHV0
VHlwZT4oRGVmYXVsdFZhbHVlUnVsZTo6emVybygpKSk7Ci0gICAgICAgICAgICBjb3B5Q29tcG9u
ZW50KG91dCwgZWluLCAzLCBzdGF0aWNfY2FzdDxPdXRwdXRUeXBlPihEZWZhdWx0VmFsdWVSdWxl
OjpvbmUoKSkpOwotCi0gICAgICAgICAgICBvdXQgKz0gV2lkZW5SdWxlOjpmaW5hbFdpZHRoOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgY29udmVydEFycmF5KGNvbnN0IHZv
aWQgKmluLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90IG4sIHZvaWQgKm91dCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0QXJyYXkoc3RhdGljX2Nhc3Q8Y29uc3QgSW5wdXRU
eXBlKj4oaW4pLCBzdHJpZGUsIG4sIHN0YXRpY19jYXN0PE91dHB1dFR5cGUqPihvdXQpKTsKLSAg
ICB9Ci0KLSAgcHJpdmF0ZToKLSAgICAvLyBBZHZhbmNlIHRoZSBnaXZlbiBwb2ludGVyIGJ5IGEg
bnVtYmVyIG9mIGJ5dGVzIChub3QgcG9pbnRlZC10byBlbGVtZW50cykuCi0gICAgdGVtcGxhdGUg
PGNsYXNzIFQ+Ci0gICAgc3RhdGljIFQgKnBvaW50ZXJBZGRCeXRlcyhUICpiYXNlUHRyLCBzdGQ6
OnNpemVfdCBudW1CeXRlcykKLSAgICB7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PFQgKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGJhc2VQdHIpICsgbnVtQnl0ZXMpOwot
ICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGNvcHlDb21wb25lbnQoT3V0cHV0VHlwZSAqb3V0LCBj
b25zdCBJbnB1dFR5cGUgKmluLCBzdGQ6OnNpemVfdCBlbGVtZW50aW5kZXgsIE91dHB1dFR5cGUg
ZGVmYXVsdHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFdpZGVuUnVsZTo6ZmluYWxXaWR0aCA+
IGVsZW1lbnRpbmRleCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKFdpZGVuUnVsZTo6aW5p
dGlhbFdpZHRoID4gZWxlbWVudGluZGV4KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IG91dFtlbGVtZW50aW5kZXhdID0gQ29udmVydGVyOjpjb252ZXJ0KGluW2VsZW1lbnRpbmRleF0p
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dFtlbGVtZW50aW5kZXhdID0gZGVmYXVsdHZhbHVlOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotfTsKLQotfQotCi0jZW5kaWYgICAvLyBMSUJHTEVTVjJfVkVS
VEVYQ09OVkVSU0lPTl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L3RoaXJkX3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5o
CmluZGV4IDBkNGUxYTM3NGNhODE4MjIyMTI4YmFhZGM5ODdiNWQ4ZDIwMWE4NDMuLmY3MjVmNTVi
NTc0YmQ2YWQ4OGI0MGVlZDdmOTRiNThkZjIzMjU2ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0eS9jb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIu
aAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvY29tcGlsZXIv
QXJyYXlCb3VuZHNDbGFtcGVyLmgKQEAgLTI4LDggKzI4LDggQEAKIAogI2luY2x1ZGUgIkdMU0xB
TkcvU2hhZGVyTGFuZy5oIgogCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKLSNpbmNs
dWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL0luZm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlh
dGUuaCIKIAogY2xhc3MgQXJyYXlCb3VuZHNDbGFtcGVyIHsKIHB1YmxpYzoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0eS9tdXJtdXJoYXNoL011cm11
ckhhc2gzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0eS9tdXJt
dXJoYXNoL011cm11ckhhc2gzLmNwcAppbmRleCBmMTFmYjIzMzJmMWYxNTA5MjNmYjBjNGZiNjUx
ZGU3OTEzZTg3ODI2Li5kZDg2MjkyNjQ5ZWM1MmQ4NGFlNDcyYTFiZTdjZWFjYTU1MjgwYTQ0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvbXVybXVy
aGFzaC9NdXJtdXJIYXNoMy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3Ro
aXJkX3BhcnR5L211cm11cmhhc2gvTXVybXVySGFzaDMuY3BwCkBAIC0xNiwyMCArMTYsMjAgQEAK
IAogI2lmIGRlZmluZWQoX01TQ19WRVIpCiAKLSNkZWZpbmUgRk9SQ0VfSU5MSU5FICAgIF9fZm9y
Y2VpbmxpbmUKKyNkZWZpbmUgRk9SQ0VfSU5MSU5FCV9fZm9yY2VpbmxpbmUKIAogI2luY2x1ZGUg
PHN0ZGxpYi5oPgogCi0jZGVmaW5lIFJPVEwzMih4LHkpICAgIF9yb3RsKHgseSkKLSNkZWZpbmUg
Uk9UTDY0KHgseSkgICAgX3JvdGw2NCh4LHkpCisjZGVmaW5lIFJPVEwzMih4LHkpCV9yb3RsKHgs
eSkKKyNkZWZpbmUgUk9UTDY0KHgseSkJX3JvdGw2NCh4LHkpCiAKICNkZWZpbmUgQklHX0NPTlNU
QU5UKHgpICh4KQogCiAvLyBPdGhlciBjb21waWxlcnMKIAotI2Vsc2UgICAgLy8gZGVmaW5lZChf
TVNDX1ZFUikKKyNlbHNlCS8vIGRlZmluZWQoX01TQ19WRVIpCiAKLSNkZWZpbmUgICAgRk9SQ0Vf
SU5MSU5FIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQorI2RlZmluZQlGT1JDRV9JTkxJ
TkUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCiAKIGlubGluZSB1aW50MzJfdCByb3Rs
MzIgKCB1aW50MzJfdCB4LCBpbnQ4X3QgciApCiB7CkBAIC00MSw4ICs0MSw4IEBAIGlubGluZSB1
aW50NjRfdCByb3RsNjQgKCB1aW50NjRfdCB4LCBpbnQ4X3QgciApCiAgIHJldHVybiAoeCA8PCBy
KSB8ICh4ID4+ICg2NCAtIHIpKTsKIH0KIAotI2RlZmluZSAgICBST1RMMzIoeCx5KSAgICByb3Rs
MzIoeCx5KQotI2RlZmluZSBST1RMNjQoeCx5KSAgICByb3RsNjQoeCx5KQorI2RlZmluZQlST1RM
MzIoeCx5KQlyb3RsMzIoeCx5KQorI2RlZmluZSBST1RMNjQoeCx5KQlyb3RsNjQoeCx5KQogCiAj
ZGVmaW5lIEJJR19DT05TVEFOVCh4KSAoeCMjTExVKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJtdXJIYXNoMy5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L211cm11cmhhc2gvTXVybXVy
SGFzaDMuaAppbmRleCA3NWNkNGJhNTgxNTRhOTViN2YxNGFhODVhNmUzMjJkZDJmNTRkMzM0Li5j
MDhmNGYyNTg1MmMwNzZlMzczMThjMmE5MzM1NzYxNmI1Yjk0YjM2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJtdXJIYXNo
My5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0eS9tdXJtdXJo
YXNoL011cm11ckhhc2gzLmgKQEAgLTE4LDcgKzE4LDcgQEAgdHlwZWRlZiB1bnNpZ25lZCBfX2lu
dDY0IHVpbnQ2NF90OwogCiAvLyBPdGhlciBjb21waWxlcnMKIAotI2Vsc2UgICAgLy8gZGVmaW5l
ZChfTVNDX1ZFUikKKyNlbHNlCS8vIGRlZmluZWQoX01TQ19WRVIpCiAKICNpbmNsdWRlIDxzdGRp
bnQuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAxN2YxMzQxMWQ3MjY0MThhYmQ0ZDc4NzJk
YjhmZTIwN2M3NzA3ZTJkLi5kNGZjZjgwNDE2OTQ1NmU1ZmVlNDZhNjhjNzYwNWVhZmVmNjg1NzJj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMjg1MCw1MiArMjg1MCw1MyBAQCBpZiAoV1RGX1VT
RV8zRF9HUkFQSElDUykKICAgICAgICAgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L2ds
c2xhbmcuY3BwCiAgICAgICAgICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9nbHNsYW5n
X3RhYi5jcHAKIAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FO
R0xFL3NyYy9jb21waWxlci9Db2RlR2VuLmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3RDYWxsRGVwdGguY3BwCi0gICAgICAgICR7VEhJUkRQ
QVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmNwcAotICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuY3Bw
Ci0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVI
YW5kbGVyLmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
Rm9yTG9vcFVucm9sbC5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL0luZm9TaW5rLmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvSW5pdGlhbGl6ZS5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL0luaXRpYWxpemVEbGwuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplR0xQb3NpdGlvbi5jcHAKLSAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQu
Y3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1U
cmF2ZXJzZS5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L0ludGVybWVkaWF0ZS5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElS
fS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0RVNTTC5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuY3BwCi0gICAgICAgICR7VEhJUkRQ
QVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5jcHAKLSAgICAgICAg
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuY3BwCi0gICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUNvbnRleHQuY3Bw
Ci0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2Mu
Y3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9RdWFsaWZp
ZXJBbGl2ZS5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L1JlbW92ZVRyZWUuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci9TZWFyY2hTeW1ib2wuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci9TaGFkZXJMYW5nLmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5jcHAKLSAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcAotICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwCi0g
ICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENp
cmN1aXQuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9V
bmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9Vbmlmb3JtLmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAKLSAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5jcHAKLSAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlUGFja2VyLmNwcAotICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuY3Bw
Ci0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5jcHAK
LSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5j
cHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3BhcnNlQ29u
c3QuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci91dGls
LmNwcAotCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcAotICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5j
eUdyYXBoT3V0cHV0LmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29t
cGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwCisgICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0J1aWx0SW5GdW5jdGlv
bkVtdWxhdG9yLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5jcHAKKyAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0Q2FsbERlcHRoLmNw
cAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9EZXRlY3REaXNjb250aW51aXR5LmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5jcHAKKyAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFuZGxl
ci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvRm9yTG9vcFVucm9sbC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuY3BwCisgICAgICAgICR7VEhJUkRQQVJU
WV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemUuY3BwCisgICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRp
YWxpemVWYXJpYWJsZXMuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVEbGwuY3BwCisgICAgICAgICR7VEhJUkRQQVJU
WV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVQYXJzZUNvbnRl
eHQuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0ludGVybVRyYXZlcnNlLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1lZGlhdGUuY3BwCisgICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL01hcExvbmdWYXJpYWJs
ZU5hbWVzLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9PdXRwdXRFU1NMLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMLmNwcAorICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMQmFzZS5j
cHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvT3V0cHV0SExTTC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmNwcAorICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Qb29sQWxsb2MuY3BwCisgICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1F1YWxpZmll
ckFsaXZlLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9SZW1vdmVUcmVlLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZXdyaXRlRWxzZUJsb2Nrcy5jcHAKKyAgICAgICAg
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU2VhcmNoU3lt
Ym9sLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9TaGFkZXJMYW5nLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJsZS5jcHAKKyAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckVTU0wuY3Bw
CisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JHTFNMLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9ySExTTC5jcHAKKyAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0
LmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1VuaWZvcm0uY3BwCisgICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRh
dGlvbnMuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVQYWNrZXIuY3BwCisgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZlcnNpb25HTFNM
LmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9kZWJ1Zy5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvaW50ZXJtT3V0LmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9wYXJzZUNvbnN0LmNwcAorICAgICAgICAke1RI
SVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci91dGlsLmNwcAorCisg
ICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2Rl
cGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRl
ci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcAorICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZS5jcHAKIAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpYWdub3N0aWNzQmFzZS5jcHAKICAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVI
YW5kbGVyQmFzZS5jcHAKQEAgLTI5MDksOCArMjkxMCw4IEBAIGlmIChXVEZfVVNFXzNEX0dSQVBI
SUNTKQogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL1Rva2VuLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5jcHAKIAotICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1p
bmcuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90aW1p
bmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdEZyYWdtZW50
U2hhZGVyVGltaW5nLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCiAK
ICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL3RoaXJkX3BhcnR5L2NvbXBpbGVy
L0FycmF5Qm91bmRzQ2xhbXBlci5jcHAKICAgICApCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225002</attachid>
            <date>2014-02-23 07:58:59 -0800</date>
            <delta_ts>2014-02-23 14:39:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-129232-20140224025838.patch</filename>
            <type>text/plain</type>
            <size>3889728</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY0NTUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggZTJhMTVkZjMzNmQ4ODRkNWQ3MDdiZjI4NDBiMWNlY2YxODUzOWVkYS4uMjUyNzZhYjQyNTgx
MzUyOTVkMGIxZDY1ZGUxZmQ3MGY0M2FkNTYzMyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE2IEBACisyMDE0LTAyLTIzICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxl
LmNvbT4KKworICAgICAgICBVcGRhdGUgQU5HTEUgdG8gODM2YmQyMTc2ZTU2MDdiMTQ4NDZjZjFm
YmM1OTMyZGJjOTEzMThmNAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTI5MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgSSBhbHNvIHJlYXBwbGllZCBzb21lIG9mIG91ciBjaGFuZ2VzIGJlbG93LCBpbmNs
dWRpbmcgZGlzYWJsaW5nIHRoZSBjbGFuZworICAgICAgICBkZXByZWNhdGlvbiB3YXJuaW5ncyBp
biBzb21lIGZpbGVzLCBhZGRpbmcgdGhlIEFwcGxlIG5vdGUgYWJvdXQgbGljZW5zZQorICAgICAg
ICBhbmQgZGVmaW5pbmcgWVlfTk9fSU5QVVQuCisKKyAgICAgICAgSHVnZSBsaXN0IG9mIHNvdXJj
ZSBjaGFuZ2VzIG9taXR0ZWQuCisKIDIwMTMtMTItMTggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8
Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEZpeCBtYWtlIGRpc3Rj
aGVjay4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCA1NWRjMDU2ZjAzYTRkOTA5MzhjN2YyOWQzMThhZjQzZWU1ZDNi
ZTQ1Li5iYzlkZDM5MTMzODY0MmE3NjczM2RiZDc0NjNhNjUzMjkxYTNmNWE2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTQgQEAKKzIwMTQtMDItMjMgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUu
Y29tPgorCisgICAgICAgIFVwZGF0ZSBBTkdMRSB0byA4MzZiZDIxNzZlNTYwN2IxNDg0NmNmMWZi
YzU5MzJkYmM5MTMxOGY0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMjkyMzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBOZXcgZmlsZXMgYWRkZWQgdG8gQ01ha2VMaXN0cyBmb3IgRUZMLgorCisgICAgICAg
ICogQ01ha2VMaXN0cy50eHQ6CisKIDIwMTQtMDItMjIgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBw
bGUuY29tPgogCiAgICAgICAgIExldHRlcnByZXNzIGVmZmVjdCBkaXNhYmxlZCBmb3Igc3ludGhl
dGljIGl0YWxpYwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUucGxp
c3QgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS5wbGlzdAppbmRleCA3MWY1YWI3NWM3
MDU1ZWE1YThlM2Q0ZDEwNzgxNjBmMzM3ODJmMmMyLi5lZjI5NGI5Y2RhNzQ3NjdiODUzZTYzNGVl
MmVlNWIyNjdhZWMxMzU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdM
RS5wbGlzdAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS5wbGlzdApAQCAtNiwx
MyArNiwxMyBAQAogCQk8a2V5Pk9wZW5Tb3VyY2VQcm9qZWN0PC9rZXk+CiAJCTxzdHJpbmc+QU5H
TEU8L3N0cmluZz4KIAkJPGtleT5PcGVuU291cmNlVmVyc2lvbjwva2V5PgotCQk8c3RyaW5nPnIx
NjQxPC9zdHJpbmc+CisJCTxzdHJpbmc+ODM2YmQyMTc2ZTU2MDdiMTQ4NDZjZjFmYmM1OTMyZGJj
OTEzMThmNDwvc3RyaW5nPgogCQk8a2V5Pk9wZW5Tb3VyY2VXZWJzaXRlVVJMPC9rZXk+CiAJCTxz
dHJpbmc+aHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZ2xlcHJvamVjdC88L3N0cmluZz4KIAkJ
PGtleT5PcGVuU291cmNlU0NNPC9rZXk+Ci0JCTxzdHJpbmc+Z2l0IGNsb25lIGh0dHBzOi8vY29k
ZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0LyAmJiBjZCBhbmdsZXByb2plY3QgJiYgZ2l0IGNo
ZWNrb3V0IGE2MGUwODA1NzIxZjYyYzI4YTU1ZmFmMmRmNzQ0NzJjYzVmYzkxZmM8L3N0cmluZz4K
KwkJPHN0cmluZz5naXQgY2xvbmUgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmdsZXByb2pl
Y3QvICYmIGNkIGFuZ2xlcHJvamVjdCAmJiBnaXQgY2hlY2tvdXQgODM2YmQyMTc2ZTU2MDdiMTQ4
NDZjZjFmYmM1OTMyZGJjOTEzMThmNDwvc3RyaW5nPgogCQk8a2V5Pk9wZW5Tb3VyY2VJbXBvcnRE
YXRlPC9rZXk+Ci0JCTxzdHJpbmc+MjAxMy0xMS0wNzwvc3RyaW5nPgorCQk8c3RyaW5nPjIwMTQt
MDItMTg8L3N0cmluZz4KIAkJPGtleT5PcGVuU291cmNlTGljZW5zZTwva2V5PgogCQk8c3RyaW5n
PkJTRDwvc3RyaW5nPgogCQk8a2V5Pk9wZW5Tb3VyY2VMaWNlbnNlRmlsZTwva2V5PgpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUudmN4cHJvai9saWJHTEVTdjIudmN4
cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnZjeHByb2ovbGliR0xFU3YyLnZj
eHByb2oKaW5kZXggOWM4OTgzMDE5ZjNmNTEyMzgwOTJiNGYwNzlhY2M2NWQzZTY5OTU2ZS4uOGQx
MmQyOTI5NWRmZDBmY2UyN2Q0YmFmNWVmZDY5Mzg5MjY3NjQzZiAxMDA3NTUKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvQU5HTEUudmN4cHJvai9saWJHTEVTdjIudmN4cHJvagorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS52Y3hwcm9qL2xpYkdMRVN2Mi52Y3hwcm9qCkBA
IC0yMDcsNDAgKzIwNyw0MCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbW1v
blxSZWZDb3VudE9iamVjdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNc
bGliR0xFU3YyXFJlbmRlcmJ1ZmZlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEJsaXQuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxGZW5jZTExLmNwcCIgLz4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcRmVuY2U5LmNwcCIgLz4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFc
RmVuY2UxMS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXGQzZDlcRmVuY2U5LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcQnVmZmVyU3RvcmFnZS5jcHAiIC8+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEJ1ZmZlclN0b3JhZ2UxMS5j
cHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVy
XEJ1ZmZlclN0b3JhZ2U5LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xs
aWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcQnVmZmVyU3RvcmFnZTExLmNwcCIgLz4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxCdWZmZXJTdG9y
YWdlOS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJl
bmRlcmVyXEltYWdlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJH
TEVTdjJccmVuZGVyZXJcSW1hZ2U5LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxJbWFnZTkuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxJbmRleEJ1ZmZlci5jcHAiIC8+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEluZGV4
QnVmZmVyMTEuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2
MlxyZW5kZXJlclxJbmRleEJ1ZmZlcjkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxJbmRleEJ1ZmZlcjExLmNwcCIgLz4KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxJbmRl
eEJ1ZmZlcjkuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2
MlxyZW5kZXJlclxJbmRleERhdGFNYW5hZ2VyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcSW1hZ2VTU0UyLmNwcCIgLz4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcSW1hZ2UxMS5jcHAiIC8+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDEx
XEltYWdlMTEuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2
MlxyZW5kZXJlclxJbnB1dExheW91dENhY2hlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUXVlcnkxMS5jcHAiIC8+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFF1ZXJ5OS5jcHAiIC8+Cisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFF1
ZXJ5MTEuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2Mlxy
ZW5kZXJlclxkM2Q5XFF1ZXJ5OS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxz
cmNcbGliR0xFU3YyXHJlbmRlcmVyXFJlbmRlcmVyLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUmVuZGVyZXIxMS5jcHAiIC8+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXHJlbmRlcmVyMTFf
dXRpbHMuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2Mlxy
ZW5kZXJlclxSZW5kZXJlcjkuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Jj
XGxpYkdMRVN2MlxyZW5kZXJlclxyZW5kZXJlcjlfdXRpbHMuY3BwIiAvPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxSZW5kZXJUYXJnZXQxMS5jcHAi
IC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQz
ZDExXFJlbmRlcmVyMTEuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxp
YkdMRVN2MlxyZW5kZXJlclxkM2QxMVxyZW5kZXJlcjExX3V0aWxzLmNwcCIgLz4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxSZW5kZXJlcjku
Y3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJl
clxkM2Q5XHJlbmRlcmVyOV91dGlscy5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFJlbmRlclRhcmdldDExLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUmVuZGVyVGFy
Z2V0OS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJl
bmRlcmVyXFJlbmRlclN0YXRlQ2FjaGUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxTaGFkZXJFeGVjdXRhYmxlMTEuY3BwIiAvPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxTaGFkZXJFeGVj
dXRhYmxlOS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXFN3YXBDaGFpbjExLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcU3dhcENoYWluOS5jcHAiIC8+CisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFNoYWRlckV4ZWN1dGFi
bGUxMS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJl
bmRlcmVyXGQzZDlcU2hhZGVyRXhlY3V0YWJsZTkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxTd2FwQ2hhaW4xMS5jcHAiIC8+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlc
U3dhcENoYWluOS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xF
U3YyXHJlbmRlcmVyXFRleHR1cmVTdG9yYWdlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcVGV4dHVyZVN0b3JhZ2UxMS5jcHAiIC8+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFRleHR1cmVT
dG9yYWdlOS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXGQzZDExXFRleHR1cmVTdG9yYWdlMTEuY3BwIiAvPgorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XFRleHR1cmVTdG9yYWdlOS5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVy
XFZlcnRleEJ1ZmZlci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGli
R0xFU3YyXHJlbmRlcmVyXFZlcnRleEJ1ZmZlcjExLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcVmVydGV4QnVmZmVyOS5jcHAiIC8+Cisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFZl
cnRleEJ1ZmZlcjExLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJH
TEVTdjJccmVuZGVyZXJcZDNkOVxWZXJ0ZXhCdWZmZXI5LmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcVmVydGV4RGF0YU1hbmFnZXIuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxW
ZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHNyY1xsaWJHTEVTdjJcUmVzb3VyY2VNYW5hZ2VyLmNwcCIgLz4KQEAgLTI3NSwzNyArMjc1LDM3
IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tbW9uXFJlZkNvdW50T2JqZWN0
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXFJlbmRlcmJ1
ZmZlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5k
ZXJlclxCbGl0LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXEZlbmNlMTEuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xs
aWJHTEVTdjJccmVuZGVyZXJcRmVuY2U5LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXEZlbmNlMTEuaCIgLz4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxGZW5jZTkuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcRmVuY2VJ
bXBsLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRl
cmVyXEJ1ZmZlclN0b3JhZ2UuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xs
aWJHTEVTdjJccmVuZGVyZXJcQnVmZmVyU3RvcmFnZTExLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEJ1ZmZlclN0b3JhZ2U5LmgiIC8+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXEJ1
ZmZlclN0b3JhZ2UxMS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdM
RVN2MlxyZW5kZXJlclxkM2Q5XEJ1ZmZlclN0b3JhZ2U5LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGdlbmVyYXRlbWlwLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEltYWdlLmgiIC8+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEltYWdl
MTEuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVy
ZXJcSW1hZ2U5LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXGQzZDExXEltYWdlMTEuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxJbWFnZTkuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcSW5kZXhCdWZmZXIuaCIgLz4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcSW5kZXhCdWZm
ZXIxMS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5k
ZXJlclxJbmRleEJ1ZmZlcjkuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xs
aWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcSW5kZXhCdWZmZXIxMS5oIiAvPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XEluZGV4QnVmZmVyOS5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxJ
bmRleERhdGFNYW5hZ2VyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGli
R0xFU3YyXHJlbmRlcmVyXElucHV0TGF5b3V0Q2FjaGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUXVlcnkxMS5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxRdWVyeTExLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFF1
ZXJ5SW1wbC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2Mlxy
ZW5kZXJlclxRdWVyeTkuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJH
TEVTdjJccmVuZGVyZXJcZDNkOVxRdWVyeTkuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUmVuZGVyZXIuaCIgLz4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUmVuZGVyZXIxMS5oIiAvPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxyZW5kZXJlcjEx
X3V0aWxzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJl
bmRlcmVyXFJlbmRlcmVyOS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxp
YkdMRVN2MlxyZW5kZXJlclxyZW5kZXJlcjlfdXRpbHMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcUmVuZGVyZXIxMS5oIiAvPgor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxy
ZW5kZXJlcjExX3V0aWxzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGli
R0xFU3YyXHJlbmRlcmVyXGQzZDlcUmVuZGVyZXI5LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlccmVuZGVyZXI5X3V0aWxzLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFJlbmRl
clRhcmdldC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2Mlxy
ZW5kZXJlclxSZW5kZXJUYXJnZXQxMS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
c3JjXGxpYkdMRVN2MlxyZW5kZXJlclxSZW5kZXJUYXJnZXQ5LmgiIC8+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFJlbmRlclRhcmdldDEx
LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVy
XGQzZDlcUmVuZGVyVGFyZ2V0OS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGxpYkdMRVN2MlxyZW5kZXJlclxSZW5kZXJTdGF0ZUNhY2hlLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFNoYWRlckNhY2hlLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFNoYWRlckV4
ZWN1dGFibGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJc
cmVuZGVyZXJcU2hhZGVyRXhlY3V0YWJsZTExLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFNoYWRlckV4ZWN1dGFibGU5LmgiIC8+CisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFNoYWRl
ckV4ZWN1dGFibGUxMS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdM
RVN2MlxyZW5kZXJlclxkM2Q5XFNoYWRlckV4ZWN1dGFibGU5LmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRcY2xl
YXIxMXZzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJl
bmRlcmVyXHNoYWRlcnNcY29tcGlsZWRcY2xlYXJtdWx0aXBsZTExcHMuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcc2hhZGVyc1xjb21waWxl
ZFxjbGVhcnNpbmdsZTExcHMuaCIgLz4KQEAgLTMyMCwxNSArMzIwLDE1IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRc
cGFzc3Rocm91Z2hyZ2JhMTFwcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGxpYkdMRVN2MlxyZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVkXHN0YW5kYXJkdnMuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcU3dhcENoYWlu
LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVy
XFN3YXBDaGFpbjExLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xF
U3YyXHJlbmRlcmVyXFN3YXBDaGFpbjkuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcU3dhcENoYWluMTEuaCIgLz4KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxTd2FwQ2hhaW45
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVy
XFRleHR1cmVTdG9yYWdlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGli
R0xFU3YyXHJlbmRlcmVyXFRleHR1cmVTdG9yYWdlMTEuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcVGV4dHVyZVN0b3JhZ2U5LmgiIC8+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFRl
eHR1cmVTdG9yYWdlMTEuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJH
TEVTdjJccmVuZGVyZXJcZDNkOVxUZXh0dXJlU3RvcmFnZTkuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcVmVydGV4QnVmZmVyLmgiIC8+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFZlcnRleEJ1
ZmZlcjExLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJl
bmRlcmVyXFZlcnRleEJ1ZmZlcjkuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNy
Y1xsaWJHTEVTdjJccmVuZGVyZXJcdmVydGV4Y29udmVyc2lvbi5oIiAvPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxWZXJ0ZXhCdWZmZXIx
MS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJl
clxkM2Q5XFZlcnRleEJ1ZmZlcjkuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNy
Y1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVx2ZXJ0ZXhjb252ZXJzaW9uLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFZlcnRleERhdGFNYW5h
Z2VyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRl
cmVyXFZlcnRleERlY2xhcmF0aW9uQ2FjaGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHNyY1xsaWJHTEVTdjJccmVzb3VyY2UuaCIgLz4KQEAgLTM0MSwxMSArMzQxLDExIEBACiAg
IDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgogICAgIDxOb25lIEluY2x1ZGU9Ii4uXHNyY1xs
aWJHTEVTdjJcbGliR0xFU3YyLmRlZiIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxzcmNcbGli
R0xFU3YyXHJlbmRlcmVyXHNoYWRlcnNcQmxpdC5wcyIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXHNoYWRlcnNcQmxpdC52cyIgLz4KLSAgICA8Tm9uZSBJ
bmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXHNoYWRlcnNcQ2xlYXIxMS5obHNsIiAv
PgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcc2hhZGVyc1xn
ZW5lcmF0ZV9zaGFkZXJzLmJhdCIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xF
U3YyXHJlbmRlcmVyXHNoYWRlcnNcUGFzc3Rocm91Z2gxMS5obHNsIiAvPgorICAgIDxOb25lIElu
Y2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxzaGFkZXJzXEJsaXQucHMiIC8+
CisgICAgPE5vbmUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XHNoYWRl
cnNcQmxpdC52cyIgLz4KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRl
cmVyXGQzZDExXHNoYWRlcnNcQ2xlYXIxMS5obHNsIiAvPgorICAgIDxOb25lIEluY2x1ZGU9Ii4u
XHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxzaGFkZXJzXGdlbmVyYXRlX3NoYWRlcnMuYmF0
IiAvPgorICAgIDxOb25lIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFc
c2hhZGVyc1xQYXNzdGhyb3VnaDExLmhsc2wiIC8+CiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdy
b3VwPgogICAgIDxSZXNvdXJjZUNvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxsaWJH
TEVTdjIucmMiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS52
Y3hwcm9qL2xpYkdMRVN2Mi52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9BTkdMRS52Y3hwcm9qL2xpYkdMRVN2Mi52Y3hwcm9qLmZpbHRlcnMKaW5kZXggZGZjMDZmMWNi
ZDhhZjJkOGZiNTQ3MmVhZjhjZmNlNDA0ZDA1MGRmOS4uYTk2NDk2NjEwNjk4YTljMTJlMTcyZDZi
NTgwMzNlMWViZWQ4YmJmYSAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5H
TEUudmN4cHJvai9saWJHTEVTdjIudmN4cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL0FOR0xFLnZjeHByb2ovbGliR0xFU3YyLnZjeHByb2ouZmlsdGVycwpAQCAtMTI4
LDg4ICsxMjgsODggQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJc
cmVuZGVyZXJcQnVmZmVyU3RvcmFnZS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNc
UmVuZGVyZXI8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcQnVmZmVyU3RvcmFnZTExLmNwcCI+CisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXEJ1ZmZl
clN0b3JhZ2UxMS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwv
RmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Jj
XGxpYkdMRVN2MlxyZW5kZXJlclxGZW5jZTExLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXEZlbmNlMTEuY3BwIj4KICAgICAgIDxG
aWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcSW1hZ2Ux
MS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJl
clxkM2QxMVxJbWFnZTExLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJl
cjExPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEluZGV4QnVmZmVyMTEuY3BwIj4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcSW5kZXhCdWZmZXIx
MS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgog
ICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2
MlxyZW5kZXJlclxRdWVyeTExLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNc
bGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFF1ZXJ5MTEuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291
cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUmVuZGVyZXIxMS5jcHAi
PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Qx
MVxSZW5kZXJlcjExLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjEx
PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxz
cmNcbGliR0xFU3YyXHJlbmRlcmVyXHJlbmRlcmVyMTFfdXRpbHMuY3BwIj4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFccmVuZGVyZXIxMV91
dGlscy5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVy
PgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdM
RVN2MlxyZW5kZXJlclxSZW5kZXJUYXJnZXQxMS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxSZW5kZXJUYXJnZXQxMS5jcHAiPgog
ICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgogICAgIDwvQ2xD
b21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJl
clxTaGFkZXJFeGVjdXRhYmxlMTEuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNy
Y1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcU2hhZGVyRXhlY3V0YWJsZTExLmNwcCI+CiAgICAg
ICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBp
bGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFN3
YXBDaGFpbjExLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXGQzZDExXFN3YXBDaGFpbjExLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBG
aWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFRleHR1cmVTdG9yYWdlMTEuY3Bw
Ij4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNk
MTFcVGV4dHVyZVN0b3JhZ2UxMS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVu
ZGVyZXIxMTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxWZXJ0ZXhCdWZmZXIxMS5jcHAiPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxWZXJ0ZXhC
dWZmZXIxMS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwvRmls
dGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxp
YkdMRVN2MlxyZW5kZXJlclxCdWZmZXJTdG9yYWdlOS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XEJ1ZmZlclN0b3JhZ2U5LmNwcCI+
CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8L0Ns
Q29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVy
ZXJcRmVuY2U5LmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXGQzZDlcRmVuY2U5LmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xS
ZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcSW1hZ2U5LmNwcCI+CisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcSW1hZ2U5LmNwcCI+CiAg
ICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJc
SW5kZXhCdWZmZXI5LmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xF
U3YyXHJlbmRlcmVyXGQzZDlcSW5kZXhCdWZmZXI5LmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJj
ZSBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUXVlcnk5LmNwcCI+CisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcUXVlcnk5
LmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAg
ICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJc
cmVuZGVyZXJcUmVuZGVyZXI5LmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNc
bGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcUmVuZGVyZXI5LmNwcCI+CiAgICAgICA8RmlsdGVyPlNv
dXJjZSBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJccmVuZGVyZXI5X3V0aWxz
LmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVy
XGQzZDlccmVuZGVyZXI5X3V0aWxzLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xS
ZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUmVuZGVyVGFyZ2V0OS5jcHAiPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XFJlbmRlclRh
cmdldDkuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVy
PgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdM
RVN2MlxyZW5kZXJlclxTaGFkZXJFeGVjdXRhYmxlOS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XFNoYWRlckV4ZWN1dGFibGU5LmNw
cCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8
L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVu
ZGVyZXJcU3dhcENoYWluOS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxp
YkdMRVN2MlxyZW5kZXJlclxkM2Q5XFN3YXBDaGFpbjkuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291
cmNlIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxUZXh0dXJlU3RvcmFnZTku
Y3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJc
ZDNkOVxUZXh0dXJlU3RvcmFnZTkuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJl
bmRlcmVyOTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxWZXJ0ZXhCdWZmZXI5LmNwcCI+CisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcVmVydGV4QnVm
ZmVyOS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+
CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xF
U3YyXHJlbmRlcmVyXEJsaXQuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xs
aWJHTEVTdjJccmVuZGVyZXJcZDNkOVxCbGl0LmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBG
aWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcSW5wdXRMYXlvdXRDYWNoZS5jcHAi
PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Qx
MVxJbnB1dExheW91dENhY2hlLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5k
ZXJlcjExPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFJlbmRlclN0YXRlQ2FjaGUuY3BwIj4KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcUmVuZGVy
U3RhdGVDYWNoZS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwv
RmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Jj
XGxpYkdMRVN2MlxyZW5kZXJlclxWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmNwcCI+CisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcVmVydGV4RGVj
bGFyYXRpb25DYWNoZS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI5
PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxz
cmNcbGliR0xFU3YyXHByZWNvbXBpbGVkLmNwcCI+CkBAIC0zOTEsOTQgKzM5MSw5NCBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxWZXJ0ZXhEYXRh
TWFuYWdlci5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+
CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xF
U3YyXHJlbmRlcmVyXEJ1ZmZlclN0b3JhZ2UxMS5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcQnVmZmVyU3RvcmFnZTExLmgiPgogICAg
ICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgogICAgIDwvQ2xJbmNs
dWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxJ
bmRleEJ1ZmZlcjExLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2
MlxyZW5kZXJlclxkM2QxMVxJbmRleEJ1ZmZlcjExLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIg
RmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxRdWVyeTExLmgiPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxRdWVyeTEx
LmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgogICAg
IDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2Mlxy
ZW5kZXJlclxSZW5kZXJlcjExLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxp
YkdMRVN2MlxyZW5kZXJlclxkM2QxMVxSZW5kZXJlcjExLmgiPgogICAgICAgPEZpbHRlcj5IZWFk
ZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxSZW5kZXJUYXJnZXQxMS5o
Ij4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNk
MTFcUmVuZGVyVGFyZ2V0MTEuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJl
cjExPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFNoYWRlckV4ZWN1dGFibGUxMS5oIj4KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcU2hhZGVyRXhl
Y3V0YWJsZTExLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmls
dGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxp
YkdMRVN2MlxyZW5kZXJlclxTd2FwQ2hhaW4xMS5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcU3dhcENoYWluMTEuaCI+CiAgICAgICA8
RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFRleHR1
cmVTdG9yYWdlMTEuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXGQzZDExXFRleHR1cmVTdG9yYWdlMTEuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRl
ciBGaWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFZlcnRleEJ1ZmZlcjExLmgi
PgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Qx
MVxWZXJ0ZXhCdWZmZXIxMS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVy
MTE8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcQnVmZmVyU3RvcmFnZTkuaCI+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcQnVmZmVyU3RvcmFnZTku
aCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8
L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVu
ZGVyZXJcRmVuY2U5LmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2
MlxyZW5kZXJlclxkM2Q5XEZlbmNlOS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJl
bmRlcmVyOTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxJbWFnZTkuaCI+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcSW1hZ2U5LmgiPgogICAgICAg
PEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEluZGV4
QnVmZmVyOS5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVu
ZGVyZXJcZDNkOVxJbmRleEJ1ZmZlcjkuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xS
ZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUXVlcnk5LmgiPgorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XFF1ZXJ5OS5oIj4KICAgICAg
IDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRl
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxSZW5k
ZXJlcjkuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRl
cmVyXGQzZDlcUmVuZGVyZXI5LmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVy
ZXI5PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXHJlbmRlcmVyOV91dGlscy5oIj4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxyZW5kZXJlcjlfdXRp
bHMuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAg
ICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJc
cmVuZGVyZXJcUmVuZGVyVGFyZ2V0OS5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNy
Y1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxSZW5kZXJUYXJnZXQ5LmgiPgogICAgICAgPEZpbHRl
cj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFNoYWRlckV4ZWN1
dGFibGU5LmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5k
ZXJlclxkM2Q5XFNoYWRlckV4ZWN1dGFibGU5LmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmls
ZXNcUmVuZGVyZXI5PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFN3YXBDaGFpbjkuaCI+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcU3dhcENoYWlu
OS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPgogICAg
IDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2Mlxy
ZW5kZXJlclxUZXh0dXJlU3RvcmFnZTkuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxz
cmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcVGV4dHVyZVN0b3JhZ2U5LmgiPgogICAgICAgPEZp
bHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFZlcnRleEJ1
ZmZlcjkuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRl
cmVyXGQzZDlcVmVydGV4QnVmZmVyOS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJl
bmRlcmVyOTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxGZW5jZTExLmgiPgorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxGZW5jZTExLmgiPgogICAg
ICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgogICAgIDwvQ2xJbmNs
dWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxJ
bWFnZTExLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5k
ZXJlclxkM2QxMVxJbWFnZTExLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVy
ZXIxMTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxyZW5kZXJlcjExX3V0aWxzLmgiPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxyZW5kZXJlcjEx
X3V0aWxzLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVy
PgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdM
RVN2MlxyZW5kZXJlclxGZW5jZTkuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNc
bGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcRmVuY2U5LmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIg
RmlsZXNcUmVuZGVyZXJcUmVuZGVyZXI5PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFF1ZXJ5MTEuaCI+
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDEx
XFF1ZXJ5MTEuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlclxSZW5kZXJl
cjExPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEJsaXQuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcQmxpdC5oIj4KICAgICAgIDxGaWx0ZXI+
SGVhZGVyIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxTaGFkZXJDYWNoZS5o
Ij4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNk
OVxTaGFkZXJDYWNoZS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyOTwv
RmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGxpYkdMRVN2MlxyZW5kZXJlclxJbnB1dExheW91dENhY2hlLmgiPgorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxJbnB1dExheW91dENhY2hl
LmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgogICAg
IDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2Mlxy
ZW5kZXJlclxSZW5kZXJTdGF0ZUNhY2hlLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
c3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxSZW5kZXJTdGF0ZUNhY2hlLmgiPgogICAgICAg
PEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRl
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxWZXJ0
ZXhEZWNsYXJhdGlvbkNhY2hlLmgiPgpAQCAtNTA3LDEwICs1MDcsMTAgQEAKICAgICA8Tm9uZSBJ
bmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXHNoYWRlcnNcZ2VuZXJhdGVfc2hhZGVy
cy5iYXQiPgogICAgICAgPEZpbHRlcj5TaGFkZXJzPC9GaWx0ZXI+CiAgICAgPC9Ob25lPgotICAg
IDxOb25lIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcc2hhZGVyc1xQYXNzdGhy
b3VnaDExLmhsc2wiPgorICAgIDxOb25lIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVy
ZXJcZDNkMTFcc2hhZGVyc1xQYXNzdGhyb3VnaDExLmhsc2wiPgogICAgICAgPEZpbHRlcj5TaGFk
ZXJzPC9GaWx0ZXI+CiAgICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXHNyY1xsaWJH
TEVTdjJccmVuZGVyZXJcc2hhZGVyc1xDbGVhcjExLmhsc2wiPgorICAgIDxOb25lIEluY2x1ZGU9
Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcc2hhZGVyc1xDbGVhcjExLmhsc2wiPgog
ICAgICAgPEZpbHRlcj5TaGFkZXJzPC9GaWx0ZXI+CiAgICAgPC9Ob25lPgogICAgIDxOb25lIElu
Y2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJcbGliR0xFU3YyLmRlZiIgLz4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnZjeHByb2ovdHJhbnNsYXRvcl9jb21tb24udmN4
cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnZjeHByb2ovdHJhbnNsYXRvcl9j
b21tb24udmN4cHJvagppbmRleCA3M2YzZDI5NzgwMzM4MWE5MGI4MDRhYmFiMjQ4Njg2NDU1YzEx
YzczLi5mZGZiNDk2YmVkNGYzOWZiZWU4YjIwMzFiZDEzOWUzOTUzMzMyY2E5IDEwMDc1NQotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS52Y3hwcm9qL3RyYW5zbGF0b3JfY29tbW9u
LnZjeHByb2oKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUudmN4cHJvai90cmFu
c2xhdG9yX2NvbW1vbi52Y3hwcm9qCkBAIC0xMzksOTYgKzEzOSw5OCBAQAogICA8L0ltcG9ydEdy
b3VwPgogICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KICAgPEl0ZW1Hcm91
cD4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxCdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGls
ZXJcQ29kZUdlbi5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGls
ZXJcQ29tcGlsZXIuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBp
bGVyXGRlYnVnLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxl
clxEZXRlY3RDYWxsRGVwdGguY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXERpYWdub3N0aWNzLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHNyY1xjb21waWxlclxEaXJlY3RpdmVIYW5kbGVyLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHNyY1xjb21waWxlclxGb3JMb29wVW5yb2xsLmNwcCIgLz4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxJbmZvU2luay5jcHAiIC8+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcSW5pdGlhbGl6ZS5jcHAiIC8+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcSW5pdGlhbGl6ZURsbC5jcHAiIC8+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcSW5pdGlhbGl6ZUdMUG9zaXRp
b24uY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXEluaXRp
YWxpemVQYXJzZUNvbnRleHQuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXEludGVybWVkaWF0ZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxzcmNcY29tcGlsZXJcaW50ZXJtT3V0LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHNyY1xjb21waWxlclxJbnRlcm1UcmF2ZXJzZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwIiAvPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXG9zc291cmNlX3dpbi5jcHAiIC8+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJccGFyc2VDb25zdC5jcHAi
IC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcUGFyc2VDb250ZXh0
LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxQb29sQWxs
b2MuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFF1YWxp
ZmllckFsaXZlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxl
clxSZW1vdmVUcmVlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclxTaGFkZXJMYW5nLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclxTeW1ib2xUYWJsZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxz
cmNcY29tcGlsZXJcVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcCIgLz4KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx1dGlsLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHNyY1xjb21waWxlclxWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCIgLz4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxWYXJpYWJsZUluZm8uY3BwIiAvPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFZhcmlhYmxlUGFja2VyLmNw
cCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxnbHNsYW5nX2xl
eC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZ2xzbGFu
Z190YWIuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXGRl
cGdyYXBoXERlcGVuZGVuY3lHcmFwaC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxzcmNcY29tcGlsZXJcZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAiIC8+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZGVwZ3JhcGhcRGVwZW5kZW5j
eUdyYXBoT3V0cHV0LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclxkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAiIC8+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdGltaW5nXFJlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmcuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVy
XHRpbWluZ1xSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAiIC8+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcVmVyc2lvbkdMU0wuY3BwIiAvPgorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3IuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVy
XHRyYW5zbGF0b3JcQ29kZUdlbi5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxz
cmNcY29tcGlsZXJcdHJhbnNsYXRvclxDb21waWxlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxkZWJ1Zy5jcHAiIC8+CisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxEZXRlY3RDYWxsRGVw
dGguY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5z
bGF0b3JcRGlhZ25vc3RpY3MuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXHRyYW5zbGF0b3JcRGlyZWN0aXZlSGFuZGxlci5jcHAiIC8+CisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxGb3JMb29wVW5yb2xsLmNw
cCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9y
XEluZm9TaW5rLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxl
clx0cmFuc2xhdG9yXEluaXRpYWxpemUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSW5pdGlhbGl6ZVZhcmlhYmxlcy5jcHAiIC8+Cisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxJbml0aWFs
aXplRGxsLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0
cmFuc2xhdG9yXEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSW50ZXJtZWRpYXRlLmNwcCIgLz4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGludGVy
bU91dC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJh
bnNsYXRvclxJbnRlcm1UcmF2ZXJzZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAiIC8+Cisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxvc3NvdXJj
ZV93aW4uY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRy
YW5zbGF0b3JccGFyc2VDb25zdC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxz
cmNcY29tcGlsZXJcdHJhbnNsYXRvclxQYXJzZUNvbnRleHQuY3BwIiAvPgorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcUG9vbEFsbG9jLmNwcCIgLz4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFF1YWxp
ZmllckFsaXZlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxl
clx0cmFuc2xhdG9yXFJlbW92ZVRyZWUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcUmV3cml0ZUVsc2VCbG9ja3MuY3BwIiAvPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcU2hhZGVyTGFu
Zy5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNs
YXRvclxTeW1ib2xUYWJsZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNc
Y29tcGlsZXJcdHJhbnNsYXRvclxVbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwIiAvPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcdXRpbC5jcHAiIC8+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxWYWxp
ZGF0ZUxpbWl0YXRpb25zLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclx0cmFuc2xhdG9yXFZhcmlhYmxlSW5mby5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxWYXJpYWJsZVBhY2tlci5jcHAiIC8+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxnbHNs
YW5nX2xleC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJc
dHJhbnNsYXRvclxnbHNsYW5nX3RhYi5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGguY3BwIiAv
PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcZGVw
Z3JhcGhcRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGhP
dXRwdXQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRy
YW5zbGF0b3JcZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwIiAvPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcdGltaW5nXFJlc3Ry
aWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcdGltaW5nXFJlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFu
c2xhdG9yXFZlcnNpb25HTFNMLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNy
Y1x0aGlyZF9wYXJ0eVxjb21waWxlclxBcnJheUJvdW5kc0NsYW1wZXIuY3BwIiAvPgogICA8L0l0
ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KLSAgICA8Q3VzdG9tQnVpbGQgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXGdsc2xhbmcubCI+CisgICAgPEN1c3RvbUJ1aWxkIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclx0cmFuc2xhdG9yXGdsc2xhbmcubCI+CiAgICAgPC9DdXN0b21CdWlsZD4KLSAgICA8
Q3VzdG9tQnVpbGQgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXGdsc2xhbmcueSI+CisgICAgPEN1
c3RvbUJ1aWxkIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGdsc2xhbmcueSI+
CiAgICAgPC9DdXN0b21CdWlsZD4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcQmFzZVR5cGVzLmgiIC8+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxDb21tb24u
aCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxDb25zdGFudFVu
aW9uLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZGVidWcu
aCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxEZXRlY3RDYWxs
RGVwdGguaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxEaWFn
bm9zdGljcy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXERp
cmVjdGl2ZUhhbmRsZXIuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclxGb3JMb29wVW5yb2xsLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNc
Y29tcGlsZXJcSGFzaE5hbWVzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNc
Y29tcGlsZXJcSW5mb1NpbmsuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclxJbml0aWFsaXplLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNc
Y29tcGlsZXJcSW5pdGlhbGl6ZURsbC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
c3JjXGNvbXBpbGVyXEluaXRpYWxpemVHbG9iYWxzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxzcmNcY29tcGlsZXJcSW5pdGlhbGl6ZUdMUG9zaXRpb24uaCIgLz4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxJbml0aWFsaXplUGFyc2VDb250ZXh0Lmgi
IC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcaW50ZXJtZWRpYXRl
LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcbG9jYWxpbnRl
cm1lZGlhdGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxN
YXBMb25nVmFyaWFibGVOYW1lcy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXE1NYXAuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclxvc2luY2x1ZGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclxQYXJzZUNvbnRleHQuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclxQb29sQWxsb2MuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclxRdWFsaWZpZXJBbGl2ZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
c3JjXGNvbXBpbGVyXFJlbW92ZVRyZWUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHNyY1xjb21waWxlclxSZW5hbWVGdW5jdGlvbi5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcQmFzZVR5cGVzLmgiIC8+CisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxCdWlsdEluRnVuY3Rpb25F
bXVsYXRvci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRy
YW5zbGF0b3JcQ29tbW9uLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29t
cGlsZXJcdHJhbnNsYXRvclxDb25zdGFudFVuaW9uLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxkZWJ1Zy5oIiAvPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcRGV0ZWN0Q2FsbERlcHRoLmgi
IC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxE
aWFnbm9zdGljcy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVy
XHRyYW5zbGF0b3JcRGlyZWN0aXZlSGFuZGxlci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcRm9yTG9vcFVucm9sbC5oIiAvPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSGFzaE5hbWVzLmgi
IC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxJ
bmZvU2luay5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRy
YW5zbGF0b3JcSW5pdGlhbGl6ZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXHRyYW5zbGF0b3JcSW5pdGlhbGl6ZVZhcmlhYmxlcy5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSW5pdGlhbGl6ZURsbC5o
IiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3Jc
SW5pdGlhbGl6ZUdsb2JhbHMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclx0cmFuc2xhdG9yXEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCIgLz4KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGludGVybWVkaWF0ZS5o
IiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3Jc
bG9jYWxpbnRlcm1lZGlhdGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclx0cmFuc2xhdG9yXE1hcExvbmdWYXJpYWJsZU5hbWVzLmgiIC8+CisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxNTWFwLmgiIC8+CisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxvc2luY2x1ZGUu
aCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9y
XFBhcnNlQ29udGV4dC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBp
bGVyXHRyYW5zbGF0b3JcUG9vbEFsbG9jLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxRdWFsaWZpZXJBbGl2ZS5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcUmVtb3ZlVHJlZS5oIiAv
PgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcUmVu
YW1lRnVuY3Rpb24uaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxl
clx0cmFuc2xhdG9yXFJld3JpdGVFbHNlQmxvY2tzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxpbmNsdWRlXEdMU0xBTkdcU2hhZGVyTGFuZy5oIiAvPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFNoSGFuZGxlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcU3ltYm9sVGFibGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxUeXBlcy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cc3JjXGNvbXBpbGVyXFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5oIiAvPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHV0aWwuaCIgLz4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxWYWxpZGF0ZUxpbWl0YXRpb25zLmgiIC8+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcVmFyaWFibGVJbmZvLmgiIC8+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcVmFyaWFibGVQYWNrZXIu
aCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxnbHNsYW5nX3Rh
Yi5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRpbWluZ1xS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxzcmNcY29tcGlsZXJcdGltaW5nXFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgiIC8+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZGVwZ3JhcGhcRGVwZW5k
ZW5jeUdyYXBoLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJc
ZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cc3JjXGNvbXBpbGVyXGRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaE91dHB1dC5oIiAv
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFZlcnNpb25HTFNMLmgi
IC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxT
aEhhbmRsZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRy
YW5zbGF0b3JcU3ltYm9sVGFibGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNy
Y1xjb21waWxlclx0cmFuc2xhdG9yXFR5cGVzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxVbmZvbGRTaG9ydENpcmN1aXRBU1QuaCIgLz4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXHV0aWwu
aCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9y
XFZhbGlkYXRlTGltaXRhdGlvbnMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNy
Y1xjb21waWxlclx0cmFuc2xhdG9yXFZhcmlhYmxlSW5mby5oIiAvPgorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcVmFyaWFibGVQYWNrZXIuaCIgLz4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGdsc2xh
bmdfdGFiLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJh
bnNsYXRvclx0aW1pbmdcUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIiAvPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcdGltaW5nXFJlc3Ry
aWN0VmVydGV4U2hhZGVyVGltaW5nLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxz
cmNcY29tcGlsZXJcdHJhbnNsYXRvclxkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGguaCIgLz4KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGRlcGdyYXBo
XERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaE91dHB1dC5o
IiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3Jc
VmVyc2lvbkdMU0wuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1x0aGlyZF9w
YXJ0eVxjb21waWxlclxBcnJheUJvdW5kc0NsYW1wZXIuaCIgLz4KICAgPC9JdGVtR3JvdXA+CiAg
IDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMi
IC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS52Y3hwcm9qL3Ry
YW5zbGF0b3JfY29tbW9uLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L0FOR0xFLnZjeHByb2ovdHJhbnNsYXRvcl9jb21tb24udmN4cHJvai5maWx0ZXJzCmluZGV4IDk4
ZDc3N2UzYmNkODZhZGQ2YWFiMDBjYWVlZTFjYjk4MDg3MDkyN2YuLmQ1Mjg1Y2YxNGUzYzI2YjRh
NzM5YWZmYWMwYmEzNjY5YzVlOTQ0ZDQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL0FOR0xFLnZjeHByb2ovdHJhbnNsYXRvcl9jb21tb24udmN4cHJvai5maWx0ZXJzCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnZjeHByb2ovdHJhbnNsYXRvcl9jb21tb24u
dmN4cHJvai5maWx0ZXJzCkBAIC0yOSwyNjMgKzI5LDI2MyBAQAogICAgIDwvRmlsdGVyPgogICA8
L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNy
Y1xjb21waWxlclxnbHNsYW5nX2xleC5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
c3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcZ2xzbGFuZ19sZXguY3BwIj4KICAgICAgIDxGaWx0ZXI+
U291cmNlIEZpbGVzXGdlbmVyYXRlZDwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXGdsc2xhbmdfdGFiLmNwcCI+CisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxnbHNsYW5nX3Rh
Yi5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcZ2VuZXJhdGVkPC9GaWx0ZXI+CiAg
ICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJc
ZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGguY3BwIj4K
ICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGRlcGdyYXBoPC9GaWx0ZXI+CiAgICAgPC9DbENv
bXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZGVwZ3JhcGhc
RGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
c3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5j
cHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcZGVwZ3JhcGg8L0ZpbHRlcj4KICAgICA8
L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxkZXBn
cmFwaFxEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaE91dHB1
dC5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcZGVwZ3JhcGg8L0ZpbHRlcj4KICAg
ICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxk
ZXBncmFwaFxEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBo
VHJhdmVyc2UuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGRlcGdyYXBoPC9GaWx0
ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29t
cGlsZXJcdGltaW5nXFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIj4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXHRpbWluZ1xSZXN0cmlj
dEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0
aW1pbmc8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHNyY1xjb21waWxlclx0aW1pbmdcUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIj4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXHRpbWlu
Z1xSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2Ug
RmlsZXNcdGltaW5nPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxzcmNcdGhpcmRfcGFydHlcY29tcGlsZXJcQXJyYXlCb3VuZHNDbGFtcGVyLmNw
cCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxl
PgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFZhcmlhYmxlUGFja2Vy
LmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRv
clxWYXJpYWJsZVBhY2tlci5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRl
cj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclxCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3Bw
Ij4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcQ29tcGlsZXIuY3BwIj4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXENvbXBp
bGVyLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xD
b21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXGRlYnVnLmNw
cCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxk
ZWJ1Zy5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0Ns
Q29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxEZXRlY3RD
YWxsRGVwdGguY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0
cmFuc2xhdG9yXERldGVjdENhbGxEZXB0aC5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmls
ZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHNyY1xjb21waWxlclxEaWFnbm9zdGljcy5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcRGlhZ25vc3RpY3MuY3BwIj4KICAgICAgIDxGaWx0
ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcRGlyZWN0aXZlSGFuZGxlci5jcHAiPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcRGlyZWN0aXZlSGFu
ZGxlci5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0Ns
Q29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxGb3JMb29w
VW5yb2xsLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJh
bnNsYXRvclxGb3JMb29wVW5yb2xsLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwv
RmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXEluZm9TaW5rLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNc
Y29tcGlsZXJcdHJhbnNsYXRvclxJbmZvU2luay5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2Ug
RmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHNyY1xjb21waWxlclxJbml0aWFsaXplLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxJbml0aWFsaXplLmNwcCI+CiAgICAgICA8Rmls
dGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXEluaXRpYWxpemVEbGwuY3BwIj4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXEluaXRpYWxpemVWYXJp
YWJsZXMuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9D
bENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcSW5pdGlh
bGl6ZVBhcnNlQ29udGV4dC5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNv
bXBpbGVyXHRyYW5zbGF0b3JcSW5pdGlhbGl6ZURsbC5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3Vy
Y2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHNyY1xjb21waWxlclxJbnRlcm1lZGlhdGUuY3BwIj4KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXEluaXRpYWxpemVQYXJzZUNvbnRleHQu
Y3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBp
bGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcaW50ZXJtT3V0LmNw
cCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxJ
bnRlcm1lZGlhdGUuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAg
ICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJc
SW50ZXJtVHJhdmVyc2UuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclx0cmFuc2xhdG9yXGludGVybU91dC5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmls
ZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHNyY1xjb21waWxlclxNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAiPgorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSW50ZXJtVHJhdmVyc2UuY3BwIj4K
ICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcb3Nzb3VyY2Vfd2luLmNwcCI+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxNYXBM
b25nVmFyaWFibGVOYW1lcy5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRl
cj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclxwYXJzZUNvbnN0LmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29t
cGlsZXJcdHJhbnNsYXRvclxvc3NvdXJjZV93aW4uY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNl
IEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxzcmNcY29tcGlsZXJcUG9vbEFsbG9jLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxwYXJzZUNvbnN0LmNwcCI+CiAgICAgICA8Rmls
dGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFF1YWxpZmllckFsaXZlLmNwcCI+CisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxQb29sQWxsb2MuY3Bw
Ij4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcUmVtb3ZlVHJlZS5jcHAi
PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcUXVh
bGlmaWVyQWxpdmUuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAg
ICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJc
U2hhZGVyTGFuZy5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVy
XHRyYW5zbGF0b3JcUmVtb3ZlVHJlZS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8
L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNy
Y1xjb21waWxlclxTeW1ib2xUYWJsZS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
c3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcU2hhZGVyTGFuZy5jcHAiPgogICAgICAgPEZpbHRlcj5T
b3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHNyY1xjb21waWxlclx1dGlsLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxTeW1ib2xUYWJsZS5jcHAiPgogICAgICAgPEZp
bHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCI+Cisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclx1dGlsLmNw
cCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxl
PgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFZhcmlhYmxlSW5mby5j
cHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3Jc
VmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0Zp
bHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclxJbml0aWFsaXplR0xQb3NpdGlvbi5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcVmFyaWFibGVJbmZvLmNwcCI+CiAgICAgICA8
RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFBhcnNlQ29udGV4dC5jcHAiPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcUGFyc2VDb250ZXh0
LmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21w
aWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFZlcnNpb25HTFNM
LmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRv
clxWZXJzaW9uR0xTTC5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4K
ICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxl
clxDb2RlR2VuLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJc
dHJhbnNsYXRvclxDb2RlR2VuLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmls
dGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNv
bXBpbGVyXFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcCI+
CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgog
ICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHNyY1xjb21waWxlclxnbHNsYW5nX3RhYi5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGdsc2xhbmdfdGFiLmgiPgogICAgICAgPEZpbHRlcj5I
ZWFkZXIgRmlsZXNcZ2VuZXJhdGVkPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdGltaW5nXFJlc3RyaWN0RnJhZ21lbnRT
aGFkZXJUaW1pbmcuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJc
dHJhbnNsYXRvclx0aW1pbmdcUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIj4KICAgICAg
IDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRpbWluZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRpbWluZ1xSZXN0cmljdFZl
cnRleFNoYWRlclRpbWluZy5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclx0cmFuc2xhdG9yXHRpbWluZ1xSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIj4KICAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRpbWluZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRl
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXGRlcGdyYXBoXERlcGVu
ZGVuY3lHcmFwaC5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0
cmFuc2xhdG9yXGRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaC5oIj4KICAgICAgIDxGaWx0ZXI+SGVh
ZGVyIEZpbGVzXGRlcGdyYXBoPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoQnVp
bGRlci5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xh
dG9yXGRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCI+CiAgICAgICA8RmlsdGVyPkhl
YWRlciBGaWxlc1xkZXBncmFwaDwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXGRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaE91
dHB1dC5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xh
dG9yXGRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaE91dHB1dC5oIj4KICAgICAgIDxGaWx0ZXI+SGVh
ZGVyIEZpbGVzXGRlcGdyYXBoPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxzcmNcdGhpcmRfcGFydHlcY29tcGlsZXJcQXJyYXlCb3VuZHNDbGFt
cGVyLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxWYXJpYWJsZVBh
Y2tlci5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xh
dG9yXFZhcmlhYmxlUGFja2VyLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRl
cj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclxWYXJpYWJsZUluZm8uaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29t
cGlsZXJcdHJhbnNsYXRvclxWYXJpYWJsZUluZm8uaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBG
aWxlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cc3JjXGNvbXBpbGVyXFZhbGlkYXRlTGltaXRhdGlvbnMuaCI+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxWYWxpZGF0ZUxpbWl0YXRpb25zLmgi
PgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx1dGlsLmgiPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcdXRpbC5oIj4KICAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcVHlwZXMuaCI+CisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxUeXBlcy5oIj4KICAgICAg
IDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcU3ltYm9sVGFibGUuaCI+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxTeW1ib2xUYWJsZS5o
Ij4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcU2hIYW5kbGUuaCI+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxTaEhhbmRs
ZS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1
ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbmNsdWRlXEdMU0xBTkdcU2hhZGVyTGFu
Zy5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1
ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcUmVuYW1lRnVuY3Rp
b24uaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRv
clxSZW5hbWVGdW5jdGlvbi5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+
CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGls
ZXJcUmVtb3ZlVHJlZS5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxl
clx0cmFuc2xhdG9yXFJlbW92ZVRyZWUuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwv
RmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXFF1YWxpZmllckFsaXZlLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
c3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcUXVhbGlmaWVyQWxpdmUuaCI+CiAgICAgICA8RmlsdGVy
PkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFBvb2xBbGxvYy5oIj4KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFBvb2xBbGxvYy5oIj4KICAgICAgIDxG
aWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcb3NpbmNsdWRlLmgiPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3Jcb3NpbmNsdWRlLmgiPgogICAg
ICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxNTWFwLmgiPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcTU1hcC5oIj4KICAgICAgIDxG
aWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCI+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxNYXBMb25n
VmFyaWFibGVOYW1lcy5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAg
ICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJc
bG9jYWxpbnRlcm1lZGlhdGUuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29t
cGlsZXJcdHJhbnNsYXRvclxsb2NhbGludGVybWVkaWF0ZS5oIj4KICAgICAgIDxGaWx0ZXI+SGVh
ZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxzcmNcY29tcGlsZXJcaW50ZXJtZWRpYXRlLmgiPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcaW50ZXJtZWRpYXRlLmgiPgogICAgICAg
PEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxJbml0aWFsaXplUGFyc2VDb250ZXh0Lmgi
PgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSW5p
dGlhbGl6ZVBhcnNlQ29udGV4dC5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0
ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29t
cGlsZXJcSW5pdGlhbGl6ZUdsb2JhbHMuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxz
cmNcY29tcGlsZXJcdHJhbnNsYXRvclxJbml0aWFsaXplR2xvYmFscy5oIj4KICAgICAgIDxGaWx0
ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcSW5pdGlhbGl6ZURsbC5oIj4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXEluaXRpYWxpemVEbGwuaCI+
CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXEluaXRpYWxpemUuaCI+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxJbml0aWFs
aXplLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxJbmZvU2luay5o
Ij4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXElu
aXRpYWxpemVWYXJpYWJsZXMuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVy
PgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBp
bGVyXEhhc2hOYW1lcy5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxl
clx0cmFuc2xhdG9yXEluZm9TaW5rLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0Zp
bHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclxGb3JMb29wVW5yb2xsLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXHRyYW5zbGF0b3JcSGFzaE5hbWVzLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIg
RmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHNyY1xjb21waWxlclxEaXJlY3RpdmVIYW5kbGVyLmgiPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcRm9yTG9vcFVucm9sbC5oIj4KICAgICAg
IDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcRGlhZ25vc3RpY3MuaCI+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxEaXJlY3RpdmVIYW5k
bGVyLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxEZXRlY3RDYWxs
RGVwdGguaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNs
YXRvclxEaWFnbm9zdGljcy5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+
CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGls
ZXJcZGVidWcuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJh
bnNsYXRvclxEZXRlY3RDYWxsRGVwdGguaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwv
RmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXENvbnN0YW50VW5pb24uaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxz
cmNcY29tcGlsZXJcdHJhbnNsYXRvclxkZWJ1Zy5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZp
bGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzcmNcY29tcGlsZXJcQ29tbW9uLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXHRyYW5zbGF0b3JcQ29uc3RhbnRVbmlvbi5oIj4KICAgICAgIDxGaWx0ZXI+SGVh
ZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxzcmNcY29tcGlsZXJcQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCI+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxDb21tb24uaCI+CiAg
ICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXEJhc2VUeXBlcy5oIj4KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXEJ1aWx0SW5GdW5j
dGlvbkVtdWxhdG9yLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAg
ICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxJ
bml0aWFsaXplR0xQb3NpdGlvbi5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclx0cmFuc2xhdG9yXEJhc2VUeXBlcy5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZp
bGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzcmNcY29tcGlsZXJcUGFyc2VDb250ZXh0LmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcUGFyc2VDb250ZXh0LmgiPgogICAgICAgPEZpbHRl
cj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxWZXJzaW9uR0xTTC5oIj4KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFZlcnNpb25HTFNMLmgiPgogICAg
ICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxVbmZvbGRTaG9ydENpcmN1aXRBU1Qu
aCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxV
bmZvbGRTaG9ydENpcmN1aXRBU1QuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmls
dGVyPgogICAgIDwvQ2xJbmNsdWRlPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KLSAg
ICA8Q3VzdG9tQnVpbGQgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXGdsc2xhbmcubCI+CisgICAg
PEN1c3RvbUJ1aWxkIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGdsc2xhbmcu
bCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ3VzdG9tQnVp
bGQ+Ci0gICAgPEN1c3RvbUJ1aWxkIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxnbHNsYW5nLnki
PgorICAgIDxDdXN0b21CdWlsZCBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxn
bHNsYW5nLnkiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0N1
c3RvbUJ1aWxkPgogICA8L0l0ZW1Hcm91cD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGMxMmQ2NzlkNWZk
NzlmOTExZTcxNGZjYzIzMzhmYWY3NTVmNjAwYzYuLjhlMTA1NzY2MWYwNmI1YWEzYzQwMDBhMWI5
YTM5ZjY1YWUxMjg1MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xF
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
QU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjEsNjEgKzIxLDEyMSBAQAogLyog
RW5kIFBCWEFnZ3JlZ2F0ZVRhcmdldCBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEJ1aWxkRmls
ZSBzZWN0aW9uICovCisJCTMxMDEyRTEyMThCOTdCOUIwMDM5MDYyRiAvKiBCYXNlVHlwZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREEwMThC
OTdCOUIwMDM5MDYyRiAvKiBCYXNlVHlwZXMuaCAqLzsgfTsKKwkJMzEwMTJFMTMxOEI5N0I5QjAw
MzkwNjJGIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREExMThCOTdCOUIwMDM5MDYyRiAvKiBC
dWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgKi87IH07CisJCTMxMDEyRTE0MThCOTdCOUIwMDM5
MDYyRiAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQTIxOEI5N0I5QjAwMzkwNjJGIC8qIEJ1aWx0
SW5GdW5jdGlvbkVtdWxhdG9yLmggKi87IH07CisJCTMxMDEyRTE1MThCOTdCOUIwMDM5MDYyRiAv
KiBDb2RlR2VuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMxMDEyREEzMThCOTdCOUIwMDM5MDYyRiAvKiBDb2RlR2VuLmNwcCAqLzsgfTsKKwkJMzEw
MTJFMTYxOEI5N0I5QjAwMzkwNjJGIC8qIENvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQTQxOEI5N0I5QjAwMzkwNjJGIC8qIENvbW1v
bi5oICovOyB9OworCQkzMTAxMkUxNzE4Qjk3QjlCMDAzOTA2MkYgLyogQ29tcGlsZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQTUxOEI5
N0I5QjAwMzkwNjJGIC8qIENvbXBpbGVyLmNwcCAqLzsgfTsKKwkJMzEwMTJFMUExOEI5N0I5QjAw
MzkwNjJGIC8qIENvbnN0YW50VW5pb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxMDEyREE4MThCOTdCOUIwMDM5MDYyRiAvKiBDb25zdGFudFVuaW9u
LmggKi87IH07CisJCTMxMDEyRTFCMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGgu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJE
QUExOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi87IH07CisJCTMxMDEy
RTFDMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGguaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREFCMThCOTdCOUIwMDM5MDYyRiAv
KiBEZXBlbmRlbmN5R3JhcGguaCAqLzsgfTsKKwkJMzEwMTJFMUQxOEI5N0I5QjAwMzkwNjJGIC8q
IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQUMxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lH
cmFwaEJ1aWxkZXIuY3BwICovOyB9OworCQkzMTAxMkUxRTE4Qjk3QjlCMDAzOTA2MkYgLyogRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzEwMTJEQUQxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXIuaCAqLzsgfTsKKwkJMzEwMTJFMUYxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lH
cmFwaE91dHB1dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMTAxMkRBRTE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNw
cCAqLzsgfTsKKwkJMzEwMTJFMjAxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaE91
dHB1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEw
MTJEQUYxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovOyB9Owor
CQkzMTAxMkUyMTE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQjAx
OEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAqLzsgfTsKKwkJ
MzEwMTJFMjIxOEI5N0I5QjAwMzkwNjJGIC8qIERldGVjdENhbGxEZXB0aC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRCMTE4Qjk3QjlCMDAz
OTA2MkYgLyogRGV0ZWN0Q2FsbERlcHRoLmNwcCAqLzsgfTsKKwkJMzEwMTJFMjMxOEI5N0I5QjAw
MzkwNjJGIC8qIERldGVjdENhbGxEZXB0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQjIxOEI5N0I5QjAwMzkwNjJGIC8qIERldGVjdENhbGxE
ZXB0aC5oICovOyB9OworCQkzMTAxMkUyNDE4Qjk3QjlCMDAzOTA2MkYgLyogRGV0ZWN0RGlzY29u
dGludWl0eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzMTAxMkRCMzE4Qjk3QjlCMDAzOTA2MkYgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgKi87
IH07CisJCTMxMDEyRTI1MThCOTdCOUIwMDM5MDYyRiAvKiBEZXRlY3REaXNjb250aW51aXR5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRCNDE4
Qjk3QjlCMDAzOTA2MkYgLyogRGV0ZWN0RGlzY29udGludWl0eS5oICovOyB9OworCQkzMTAxMkUy
NjE4Qjk3QjlCMDAzOTA2MkYgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQjUxOEI5N0I5QjAwMzkwNjJGIC8qIERp
YWdub3N0aWNzLmNwcCAqLzsgfTsKKwkJMzEwMTJFMjcxOEI5N0I5QjAwMzkwNjJGIC8qIERpYWdu
b3N0aWNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
MTAxMkRCNjE4Qjk3QjlCMDAzOTA2MkYgLyogRGlhZ25vc3RpY3MuaCAqLzsgfTsKKwkJMzEwMTJF
MjgxOEI5N0I5QjAwMzkwNjJGIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQjcxOEI5N0I5QjAwMzkwNjJG
IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovOyB9OworCQkzMTAxMkUyOTE4Qjk3QjlCMDAzOTA2
MkYgLyogRGlyZWN0aXZlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzEwMTJEQjgxOEI5N0I5QjAwMzkwNjJGIC8qIERpcmVjdGl2ZUhhbmRs
ZXIuaCAqLzsgfTsKKwkJMzEwMTJFMkExOEI5N0I5QjAwMzkwNjJGIC8qIEV4dGVuc2lvbkJlaGF2
aW9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAx
MkRCOTE4Qjk3QjlCMDAzOTA2MkYgLyogRXh0ZW5zaW9uQmVoYXZpb3IuaCAqLzsgfTsKKwkJMzEw
MTJFMkIxOEI5N0I5QjAwMzkwNjJGIC8qIEZvckxvb3BVbnJvbGwuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQkExOEI5N0I5QjAwMzkwNjJG
IC8qIEZvckxvb3BVbnJvbGwuY3BwICovOyB9OworCQkzMTAxMkUyQzE4Qjk3QjlCMDAzOTA2MkYg
LyogRm9yTG9vcFVucm9sbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzEwMTJEQkIxOEI5N0I5QjAwMzkwNjJGIC8qIEZvckxvb3BVbnJvbGwuaCAqLzsg
fTsKKwkJMzEwMTJFMkQxOEI5N0I5QjAwMzkwNjJGIC8qIGdsc2xhbmcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREJEMThCOTdCOUIwMDM5MDYy
RiAvKiBnbHNsYW5nLmggKi87IH07CisJCTMxMDEyRTMwMThCOTdCOUIwMDM5MDYyRiAvKiBnbHNs
YW5nX2xleC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzMTAxMkRDMDE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZ19sZXguY3BwICovOyB9OworCQkz
MTAxMkUzMTE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZ190YWIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQzExOEI5N0I5QjAwMzkwNjJG
IC8qIGdsc2xhbmdfdGFiLmNwcCAqLzsgfTsKKwkJMzEwMTJFMzIxOEI5N0I5QjAwMzkwNjJGIC8q
IGdsc2xhbmdfdGFiLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMTAxMkRDMjE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZ190YWIuaCAqLzsgfTsKKwkJ
MzEwMTJFMzMxOEI5N0I5QjAwMzkwNjJGIC8qIEhhc2hOYW1lcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQzMxOEI5N0I5QjAwMzkwNjJGIC8q
IEhhc2hOYW1lcy5oICovOyB9OworCQkzMTAxMkUzNDE4Qjk3QjlCMDAzOTA2MkYgLyogSW5mb1Np
bmsuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEw
MTJEQzQxOEI5N0I5QjAwMzkwNjJGIC8qIEluZm9TaW5rLmNwcCAqLzsgfTsKKwkJMzEwMTJFMzUx
OEI5N0I5QjAwMzkwNjJGIC8qIEluZm9TaW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRDNTE4Qjk3QjlCMDAzOTA2MkYgLyogSW5mb1Npbmsu
aCAqLzsgfTsKKwkJMzEwMTJFMzYxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQzYxOEI5
N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemUuY3BwICovOyB9OworCQkzMTAxMkUzNzE4Qjk3QjlC
MDAzOTA2MkYgLyogSW5pdGlhbGl6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzEwMTJEQzcxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemUuaCAq
LzsgfTsKKwkJMzEwMTJFMzgxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVEbGwuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQzgxOEI5
N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVEbGwuY3BwICovOyB9OworCQkzMTAxMkUzOTE4Qjk3
QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZURsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQzkxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxp
emVEbGwuaCAqLzsgfTsKKwkJMzEwMTJFM0ExOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVH
bG9iYWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
MTAxMkRDQTE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLzsgfTsKKwkJ
MzEwMTJFM0IxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQ0IxOEI5
N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwICovOyB9OworCQkzMTAx
MkUzQzE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQ0MxOEI5N0I5QjAw
MzkwNjJGIC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCAqLzsgfTsKKwkJMzEwMTJFM0QxOEI5
N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVWYXJpYWJsZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQ0QxOEI5N0I5QjAwMzkwNjJGIC8q
IEluaXRpYWxpemVWYXJpYWJsZXMuY3BwICovOyB9OworCQkzMTAxMkUzRTE4Qjk3QjlCMDAzOTA2
MkYgLyogSW5pdGlhbGl6ZVZhcmlhYmxlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQ0UxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVW
YXJpYWJsZXMuaCAqLzsgfTsKKwkJMzEwMTJFM0YxOEI5N0I5QjAwMzkwNjJGIC8qIEludGVybWVk
aWF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
MTAxMkRDRjE4Qjk3QjlCMDAzOTA2MkYgLyogSW50ZXJtZWRpYXRlLmNwcCAqLzsgfTsKKwkJMzEw
MTJFNDAxOEI5N0I5QjAwMzkwNjJGIC8qIGludGVybWVkaWF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERDAxOEI5N0I5QjAwMzkwNjJGIC8q
IGludGVybWVkaWF0ZS5oICovOyB9OworCQkzMTAxMkU0MTE4Qjk3QjlCMDAzOTA2MkYgLyogaW50
ZXJtT3V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDMxMDEyREQxMThCOTdCOUIwMDM5MDYyRiAvKiBpbnRlcm1PdXQuY3BwICovOyB9OworCQkzMTAx
MkU0MjE4Qjk3QjlCMDAzOTA2MkYgLyogSW50ZXJtVHJhdmVyc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERDIxOEI5N0I5QjAwMzkwNjJG
IC8qIEludGVybVRyYXZlcnNlLmNwcCAqLzsgfTsKKwkJMzEwMTJFNDMxOEI5N0I5QjAwMzkwNjJG
IC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMTAxMkREMzE4Qjk3QjlCMDAzOTA2MkYgLyogbG9jYWxpbnRlcm1lZGlh
dGUuaCAqLzsgfTsKKwkJMzEwMTJFNDQxOEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJpYWJs
ZU5hbWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDMxMDEyREQ0MThCOTdCOUIwMDM5MDYyRiAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi87
IH07CisJCTMxMDEyRTQ1MThCOTdCOUIwMDM5MDYyRiAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERDUx
OEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmggKi87IH07CisJCTMxMDEy
RTQ2MThCOTdCOUIwMDM5MDYyRiAvKiBNTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRENjE4Qjk3QjlCMDAzOTA2MkYgLyogTU1hcC5oICov
OyB9OworCQkzMTAxMkU0NzE4Qjk3QjlCMDAzOTA2MkYgLyogTm9kZVNlYXJjaC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERDcxOEI5N0I5QjAw
MzkwNjJGIC8qIE5vZGVTZWFyY2guaCAqLzsgfTsKKwkJMzEwMTJFNDgxOEI5N0I5QjAwMzkwNjJG
IC8qIG9zaW5jbHVkZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzEwMTJERDgxOEI5N0I5QjAwMzkwNjJGIC8qIG9zaW5jbHVkZS5oICovOyB9OworCQkz
MTAxMkU0OTE4Qjk3QjlCMDAzOTA2MkYgLyogb3Nzb3VyY2VfcG9zaXguY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERDkxOEI5N0I5QjAwMzkw
NjJGIC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLzsgfTsKKwkJMzEwMTJFNEIxOEI5N0I5QjAwMzkw
NjJGIC8qIE91dHB1dEVTU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzEwMTJEREIxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEVTU0wuY3BwICov
OyB9OworCQkzMTAxMkU0QzE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0RVNTTC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEREMxOEI5N0I5QjAw
MzkwNjJGIC8qIE91dHB1dEVTU0wuaCAqLzsgfTsKKwkJMzEwMTJFNEQxOEI5N0I5QjAwMzkwNjJG
IC8qIE91dHB1dEdMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzEwMTJEREQxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEdMU0wuY3BwICovOyB9
OworCQkzMTAxMkU0RTE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0R0xTTC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEREUxOEI5N0I5QjAwMzkw
NjJGIC8qIE91dHB1dEdMU0wuaCAqLzsgfTsKKwkJMzEwMTJFNEYxOEI5N0I5QjAwMzkwNjJGIC8q
IE91dHB1dEdMU0xCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDMxMDEyRERGMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRHTFNMQmFzZS5jcHAg
Ki87IH07CisJCTMxMDEyRTUwMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRHTFNMQmFzZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERTAxOEI5
N0I5QjAwMzkwNjJGIC8qIE91dHB1dEdMU0xCYXNlLmggKi87IH07CisJCTMxMDEyRTUxMThCOTdC
OUIwMDM5MDYyRiAvKiBPdXRwdXRITFNMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREUxMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRITFNM
LmNwcCAqLzsgfTsKKwkJMzEwMTJFNTIxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEhMU0wuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREUyMThC
OTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRITFNMLmggKi87IH07CisJCTMxMDEyRTUzMThCOTdCOUIw
MDM5MDYyRiAvKiBwYXJzZUNvbnN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxMDEyREUzMThCOTdCOUIwMDM5MDYyRiAvKiBwYXJzZUNvbnN0LmNw
cCAqLzsgfTsKKwkJMzEwMTJFNTQxOEI5N0I5QjAwMzkwNjJGIC8qIFBhcnNlQ29udGV4dC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRFNDE4
Qjk3QjlCMDAzOTA2MkYgLyogUGFyc2VDb250ZXh0LmNwcCAqLzsgfTsKKwkJMzEwMTJFNTUxOEI5
N0I5QjAwMzkwNjJGIC8qIFBhcnNlQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERTUxOEI5N0I5QjAwMzkwNjJGIC8qIFBhcnNlQ29u
dGV4dC5oICovOyB9OworCQkzMTAxMkU1NjE4Qjk3QjlCMDAzOTA2MkYgLyogUG9vbEFsbG9jLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREU2
MThCOTdCOUIwMDM5MDYyRiAvKiBQb29sQWxsb2MuY3BwICovOyB9OworCQkzMTAxMkU1NzE4Qjk3
QjlCMDAzOTA2MkYgLyogUG9vbEFsbG9jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRFNzE4Qjk3QjlCMDAzOTA2MkYgLyogUG9vbEFsbG9jLmgg
Ki87IH07CisJCTMxMDEyRTU4MThCOTdCOUIwMDM5MDYyRiAvKiBQcmFnbWEuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREU4MThCOTdCOUIwMDM5
MDYyRiAvKiBQcmFnbWEuaCAqLzsgfTsKKwkJMzEwMTJFNTkxOEI5N0I5QjAwMzkwNjJGIC8qIFF1
YWxpZmllckFsaXZlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMxMDEyREU5MThCOTdCOUIwMDM5MDYyRiAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi87
IH07CisJCTMxMDEyRTVBMThCOTdCOUIwMDM5MDYyRiAvKiBRdWFsaWZpZXJBbGl2ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERUExOEI5N0I5
QjAwMzkwNjJGIC8qIFF1YWxpZmllckFsaXZlLmggKi87IH07CisJCTMxMDEyRTVCMThCOTdCOUIw
MDM5MDYyRiAvKiBSZW1vdmVUcmVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxMDEyREVCMThCOTdCOUIwMDM5MDYyRiAvKiBSZW1vdmVUcmVlLmNw
cCAqLzsgfTsKKwkJMzEwMTJFNUMxOEI5N0I5QjAwMzkwNjJGIC8qIFJlbW92ZVRyZWUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREVDMThCOTdC
OUIwMDM5MDYyRiAvKiBSZW1vdmVUcmVlLmggKi87IH07CisJCTMxMDEyRTVEMThCOTdCOUIwMDM5
MDYyRiAvKiBSZW5hbWVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzEwMTJERUQxOEI5N0I5QjAwMzkwNjJGIC8qIFJlbmFtZUZ1bmN0aW9u
LmggKi87IH07CisJCTMxMDEyRTVFMThCOTdCOUIwMDM5MDYyRiAvKiBSZXdyaXRlRWxzZUJsb2Nr
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAx
MkRFRTE4Qjk3QjlCMDAzOTA2MkYgLyogUmV3cml0ZUVsc2VCbG9ja3MuY3BwICovOyB9OworCQkz
MTAxMkU1RjE4Qjk3QjlCMDAzOTA2MkYgLyogUmV3cml0ZUVsc2VCbG9ja3MuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREVGMThCOTdCOUIwMDM5
MDYyRiAvKiBSZXdyaXRlRWxzZUJsb2Nrcy5oICovOyB9OworCQkzMTAxMkU2MDE4Qjk3QjlCMDAz
OTA2MkYgLyogU2VhcmNoU3ltYm9sLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxMDEyREYwMThCOTdCOUIwMDM5MDYyRiAvKiBTZWFyY2hTeW1ib2wu
Y3BwICovOyB9OworCQkzMTAxMkU2MTE4Qjk3QjlCMDAzOTA2MkYgLyogU2VhcmNoU3ltYm9sLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRGMTE4
Qjk3QjlCMDAzOTA2MkYgLyogU2VhcmNoU3ltYm9sLmggKi87IH07CisJCTMxMDEyRTYyMThCOTdC
OUIwMDM5MDYyRiAvKiBTaGFkZXJMYW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREYyMThCOTdCOUIwMDM5MDYyRiAvKiBTaGFkZXJMYW5n
LmNwcCAqLzsgfTsKKwkJMzEwMTJFNjMxOEI5N0I5QjAwMzkwNjJGIC8qIFNoSGFuZGxlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRGMzE4Qjk3
QjlCMDAzOTA2MkYgLyogU2hIYW5kbGUuaCAqLzsgfTsKKwkJMzEwMTJFNjQxOEI5N0I5QjAwMzkw
NjJGIC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDMxMDEyREY0MThCOTdCOUIwMDM5MDYyRiAvKiBTeW1ib2xUYWJsZS5jcHAg
Ki87IH07CisJCTMxMDEyRTY1MThCOTdCOUIwMDM5MDYyRiAvKiBTeW1ib2xUYWJsZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERjUxOEI5N0I5
QjAwMzkwNjJGIC8qIFN5bWJvbFRhYmxlLmggKi87IH07CisJCTMxMDEyRTY2MThCOTdCOUIwMDM5
MDYyRiAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREY3MThCOTdCOUIwMDM5MDYyRiAv
KiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKKwkJMzEwMTJFNjcxOEI5
N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREY4MThCOTdCOUIwMDM5
MDYyRiAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggKi87IH07CisJCTMxMDEyRTY4
MThCOTdCOUIwMDM5MDYyRiAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRGOTE4Qjk3QjlC
MDAzOTA2MkYgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovOyB9OworCQkzMTAx
MkU2OTE4Qjk3QjlCMDAzOTA2MkYgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREZBMThCOTdC
OUIwMDM5MDYyRiAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovOyB9OworCQkzMTAx
MkU2QTE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckVTU0wuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERkIxOEI5N0I5QjAwMzkwNjJG
IC8qIFRyYW5zbGF0b3JFU1NMLmNwcCAqLzsgfTsKKwkJMzEwMTJFNkIxOEI5N0I5QjAwMzkwNjJG
IC8qIFRyYW5zbGF0b3JFU1NMLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzMTAxMkRGQzE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckVTU0wuaCAq
LzsgfTsKKwkJMzEwMTJFNkMxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JHTFNMLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREZEMThC
OTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi87IH07CisJCTMxMDEyRTZEMThC
OTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9yR0xTTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERkUxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5z
bGF0b3JHTFNMLmggKi87IH07CisJCTMxMDEyRTZFMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xh
dG9ySExTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzMTAxMkRGRjE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckhMU0wuY3BwICovOyB9Owor
CQkzMTAxMkU2RjE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckhMU0wuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTAwMThCOTdCOUIwMDM5
MDYyRiAvKiBUcmFuc2xhdG9ySExTTC5oICovOyB9OworCQkzMTAxMkU3MDE4Qjk3QjlCMDAzOTA2
MkYgLyogVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMxMDEyRTAxMThCOTdCOUIwMDM5MDYyRiAvKiBUeXBlcy5oICovOyB9OworCQkzMTAxMkU3
MTE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTAyMThCOTdCOUIwMDM5MDYy
RiAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwICovOyB9OworCQkzMTAxMkU3MjE4Qjk3QjlCMDAz
OTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwMzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hv
cnRDaXJjdWl0LmggKi87IH07CisJCTMxMDEyRTczMThCOTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRT
aG9ydENpcmN1aXRBU1QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzEwMTJFMDQxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFT
VC5jcHAgKi87IH07CisJCTMxMDEyRTc0MThCOTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENp
cmN1aXRBU1QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDMxMDEyRTA1MThCOTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuaCAqLzsg
fTsKKwkJMzEwMTJFNzUxOEI5N0I5QjAwMzkwNjJGIC8qIFVuaWZvcm0uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJFMDYxOEI5N0I5QjAwMzkw
NjJGIC8qIFVuaWZvcm0uY3BwICovOyB9OworCQkzMTAxMkU3NjE4Qjk3QjlCMDAzOTA2MkYgLyog
VW5pZm9ybS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzEwMTJFMDcxOEI5N0I5QjAwMzkwNjJGIC8qIFVuaWZvcm0uaCAqLzsgfTsKKwkJMzEwMTJFNzcx
OEI5N0I5QjAwMzkwNjJGIC8qIHV0aWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzEwMTJFMDgxOEI5N0I5QjAwMzkwNjJGIC8qIHV0aWwuY3BwICov
OyB9OworCQkzMTAxMkU3ODE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJFMDkxOEI5N0I5QjAwMzkwNjJG
IC8qIHV0aWwuaCAqLzsgfTsKKwkJMzEwMTJFNzkxOEI5N0I5QjAwMzkwNjJGIC8qIFZhbGlkYXRl
TGltaXRhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzEwMTJFMEExOEI5N0I5QjAwMzkwNjJGIC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuY3Bw
ICovOyB9OworCQkzMTAxMkU3QTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9u
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJF
MEIxOEI5N0I5QjAwMzkwNjJGIC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuaCAqLzsgfTsKKwkJMzEw
MTJFN0IxOEI5N0I5QjAwMzkwNjJGIC8qIFZhcmlhYmxlSW5mby5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwQzE4Qjk3QjlCMDAzOTA2MkYg
LyogVmFyaWFibGVJbmZvLmNwcCAqLzsgfTsKKwkJMzEwMTJFN0MxOEI5N0I5QjAwMzkwNjJGIC8q
IFZhcmlhYmxlSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzEwMTJFMEQxOEI5N0I5QjAwMzkwNjJGIC8qIFZhcmlhYmxlSW5mby5oICovOyB9Owor
CQkzMTAxMkU3RDE4Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFibGVQYWNrZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJFMEUxOEI5N0I5QjAw
MzkwNjJGIC8qIFZhcmlhYmxlUGFja2VyLmNwcCAqLzsgfTsKKwkJMzEwMTJFN0UxOEI5N0I5QjAw
MzkwNjJGIC8qIFZhcmlhYmxlUGFja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwRjE4Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFibGVQYWNr
ZXIuaCAqLzsgfTsKKwkJMzEwMTJFN0YxOEI5N0I5QjAwMzkwNjJGIC8qIFZlcnNpb25HTFNMLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTEw
MThCOTdCOUIwMDM5MDYyRiAvKiBWZXJzaW9uR0xTTC5jcHAgKi87IH07CisJCTMxMDEyRTgwMThC
OTdCOUIwMDM5MDYyRiAvKiBWZXJzaW9uR0xTTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJFMTExOEI5N0I5QjAwMzkwNjJGIC8qIFZlcnNpb25H
TFNMLmggKi87IH07CisJCTMxMDEyRTgzMThCOTdDODYwMDM5MDYyRiAvKiBjb21waWxlcmRlYnVn
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEy
RTgxMThCOTdDODYwMDM5MDYyRiAvKiBjb21waWxlcmRlYnVnLmNwcCAqLzsgfTsKKwkJMzEwMTJF
ODQxOEI5N0M4NjAwMzkwNjJGIC8qIGNvbXBpbGVyZGVidWcuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTgyMThCOTdDODYwMDM5MDYyRiAvKiBj
b21waWxlcmRlYnVnLmggKi87IH07CiAJCTMxMkJEQjBDMTVGRUNBQzkwMDk3RUJDNyAvKiBBTkdM
RS5wbGlzdCBpbiBDb3B5RmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzEyQkRCMDkxNUZFQzkxRTAwOTdFQkM3IC8qIEFOR0xFLnBsaXN0ICovOyB9OwogCQkzMTJCREIw
RTE1RkVDQUU1MDA5N0VCQzcgLyogQU5HTEUudHh0IGluIENvcHlGaWxlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTJCREIwQTE1RkVDQTNBMDA5N0VCQzcgLyogQU5HTEUu
dHh0ICovOyB9OwogCQk0OTk1MUMwMzE0QjdBQUIzMDA2MEU5NkUgLyogbGVuZ3RoX2xpbWl0cy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk5NTFDMDIx
NEI3QUFCMzAwNjBFOTZFIC8qIGxlbmd0aF9saW1pdHMuaCAqLzsgfTsKLQkJNDk5NTFDMDkxNEI3
QUFEODAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5OTUxQzA1MTRCN0FBRDcwMDYwRTk2
RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgKi87IH07Ci0JCTQ5OTUxQzBBMTRCN0FB
RDgwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk5NTFDMDYxNEI3QUFEODAwNjBFOTZFIC8q
IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggKi87IH07Ci0JCTVDQjEzRkQ0MTc5REIzRkQwMDFG
ODUxRCAvKiBEZXRlY3RDYWxsRGVwdGguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNUNCMTNGRDIxNzlEQjNGRDAwMUY4NTFEIC8qIERldGVjdENhbGxE
ZXB0aC5jcHAgKi87IH07Ci0JCTVDQjEzRkQ1MTc5REIzRkQwMDFGODUxRCAvKiBEZXRlY3RDYWxs
RGVwdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVD
QjEzRkQzMTc5REIzRkQwMDFGODUxRCAvKiBEZXRlY3RDYWxsRGVwdGguaCAqLzsgfTsKLQkJNzIz
MDlBNEQxODNDMjU5MzAwMzcwQjkzIC8qIENvZGVHZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI2NTA5MzAxODNBQTIxMzAwRDI4QjQ4IC8qIENv
ZGVHZW4uY3BwICovOyB9OwotCQk3MjMwOUE0RTE4M0MyNTlDMDAzNzBCOTMgLyogVW5mb2xkU2hv
cnRDaXJjdWl0QVNULmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyNjUwOTM2MTgzQUEzQzYwMEQyOEI0OCAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1Qu
Y3BwICovOyB9OwotCQk3MjMwOUE0RjE4M0MyNTlFMDAzNzBCOTMgLyogVW5mb2xkU2hvcnRDaXJj
dWl0QVNULmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
MjY1MDkzNzE4M0FBM0M2MDBEMjhCNDggLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmggKi87IH07
Ci0JCTcyMzA5QTUwMTgzQzI1QTEwMDM3MEI5MyAvKiBQYXJzZUNvbnRleHQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI2NTA5MzQxODNBQTNCMjAw
RDI4QjQ4IC8qIFBhcnNlQ29udGV4dC5jcHAgKi87IH07Ci0JCTcyMzA5QTUxMTgzQzI1QTUwMDM3
MEI5MyAvKiBQYXJzZUNvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDcyNjUwOTM1MTgzQUEzQjIwMEQyOEI0OCAvKiBQYXJzZUNvbnRleHQuaCAq
LzsgfTsKLQkJNzIzMDlBNTIxODNDMjVBNzAwMzcwQjkzIC8qIE5vZGVTZWFyY2guaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNjUwOTMzMTgzQUEyODkw
MEQyOEI0OCAvKiBOb2RlU2VhcmNoLmggKi87IH07Ci0JCTcyMzA5QTUzMTgzQzI1QUEwMDM3MEI5
MyAvKiBJbml0aWFsaXplR0xQb3NpdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MjY1MDkzMTE4M0FBMjQ2MDBEMjhCNDggLyogSW5pdGlhbGl6
ZUdMUG9zaXRpb24uY3BwICovOyB9OwotCQk3MjMwOUE1NDE4M0MyNUFEMDAzNzBCOTMgLyogSW5p
dGlhbGl6ZUdMUG9zaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcyNjUwOTMyMTgzQUEyNDYwMEQyOEI0OCAvKiBJbml0aWFsaXplR0xQb3NpdGlv
bi5oICovOyB9OwogCQk3MjMwOUE1NjE4M0MyN0RFMDAzNzBCOTMgLyogVG9rZW5pemVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzA5QTU1MTgz
QzI3REIwMDM3MEI5MyAvKiBUb2tlbml6ZXIuY3BwICovOyB9OwogCQk3MjMwOUE1ODE4M0MyN0Yz
MDAzNzBCOTMgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjMwOUE1NzE4M0MyN0YxMDAzNzBCOTMgLyogRXhwcmVz
c2lvblBhcnNlci5jcHAgKi87IH07Ci0JCTcyMzA5QTVDMTgzQzI4NTMwMDM3MEI5MyAvKiBnbHNs
YW5nX2xleC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MjMwOUE1OTE4M0MyODRFMDAzNzBCOTMgLyogZ2xzbGFuZ19sZXguY3BwICovOyB9OwotCQk3
MjMwOUE1RDE4M0MyODUzMDAzNzBCOTMgLyogZ2xzbGFuZ190YWIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzMDlBNUExODNDMjg0RTAwMzcwQjkz
IC8qIGdsc2xhbmdfdGFiLmNwcCAqLzsgfTsKLQkJNzIzMDlBNUUxODNDMjg1MzAwMzcwQjkzIC8q
IGdsc2xhbmdfdGFiLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MjMwOUE1QjE4M0MyODRFMDAzNzBCOTMgLyogZ2xzbGFuZ190YWIuaCAqLzsgfTsKLQkJ
NzIzMDlBNjExODNDMkE3NDAwMzcwQjkzIC8qIFRyYW5zbGF0b3JITFNMLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzA5QTVGMTgzQzJBNjQwMDM3
MEI5MyAvKiBUcmFuc2xhdG9ySExTTC5jcHAgKi87IH07Ci0JCTcyMzA5QTYyMTgzQzJBNzQwMDM3
MEI5MyAvKiBUcmFuc2xhdG9ySExTTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzIzMDlBNjAxODNDMkE2NDAwMzcwQjkzIC8qIFRyYW5zbGF0b3JITFNM
LmggKi87IH07Ci0JCTcyMzA5QTY1MTgzQzJBRTUwMDM3MEI5MyAvKiBPdXRwdXRITFNMLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzA5QTYzMTgz
QzJBRTUwMDM3MEI5MyAvKiBPdXRwdXRITFNMLmNwcCAqLzsgfTsKLQkJNzIzMDlBNjYxODNDMkFF
NTAwMzcwQjkzIC8qIE91dHB1dEhMU0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyMzA5QTY0MTgzQzJBRTUwMDM3MEI5MyAvKiBPdXRwdXRITFNMLmgg
Ki87IH07Ci0JCTcyMzA5QTZEMTgzQzJCRTgwMDM3MEI5MyAvKiBEZXRlY3REaXNjb250aW51aXR5
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzA5
QTY3MTgzQzJCRTgwMDM3MEI5MyAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCAqLzsgfTsKLQkJ
NzIzMDlBNkUxODNDMkJFODAwMzcwQjkzIC8qIERldGVjdERpc2NvbnRpbnVpdHkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzA5QTY4MTgzQzJCRTgw
MDM3MEI5MyAvKiBEZXRlY3REaXNjb250aW51aXR5LmggKi87IH07Ci0JCTcyMzA5QTZGMTgzQzJC
RTgwMDM3MEI5MyAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzMDlBNjkxODNDMkJFODAwMzcwQjkzIC8qIFVu
Zm9sZFNob3J0Q2lyY3VpdC5jcHAgKi87IH07Ci0JCTcyMzA5QTcwMTgzQzJCRTgwMDM3MEI5MyAv
KiBVbmZvbGRTaG9ydENpcmN1aXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDcyMzA5QTZBMTgzQzJCRTgwMDM3MEI5MyAvKiBVbmZvbGRTaG9ydENpcmN1
aXQuaCAqLzsgfTsKLQkJNzIzMDlBNzExODNDMkJFODAwMzcwQjkzIC8qIFVuaWZvcm0uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzMDlBNkIxODND
MkJFODAwMzcwQjkzIC8qIFVuaWZvcm0uY3BwICovOyB9OwotCQk3MjMwOUE3MjE4M0MyQkU4MDAz
NzBCOTMgLyogVW5pZm9ybS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzIzMDlBNkMxODNDMkJFODAwMzcwQjkzIC8qIFVuaWZvcm0uaCAqLzsgfTsKLQkJ
OTBEOUIxMDIxMkUxMURDQjAwMkQ0MjU1IC8qIENvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwRDlCMEY5MTJFMTFEQ0IwMDJENDI1NSAv
KiBDb21waWxlci5jcHAgKi87IH07Ci0JCTkwRDlCMTAzMTJFMTFEQ0IwMDJENDI1NSAvKiBFeHRl
bnNpb25CZWhhdmlvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTBEOUIwRkExMkUxMURDQjAwMkQ0MjU1IC8qIEV4dGVuc2lvbkJlaGF2aW9yLmggKi87
IH07Ci0JCTkwRDlCMTA3MTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MEQ5QjBGRTEyRTExRENCMDAyRDQy
NTUgLyogZ2xzbGFuZy5oICovOyB9OwotCQk5MEQ5QjEwOTEyRTExRENCMDAyRDQyNTUgLyogU2Vh
cmNoU3ltYm9sLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkwRDlCMTAwMTJFMTFEQ0IwMDJENDI1NSAvKiBTZWFyY2hTeW1ib2wuY3BwICovOyB9Owot
CQk5MEQ5QjEwQTEyRTExRENCMDAyRDQyNTUgLyogU2VhcmNoU3ltYm9sLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MEQ5QjEwMTEyRTExRENCMDAyRDQy
NTUgLyogU2VhcmNoU3ltYm9sLmggKi87IH07Ci0JCTkwRDlCMTEzMTJFMTFERDYwMDJENDI1NSAv
KiB1dGlsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkwRDlCMTBCMTJFMTFERDYwMDJENDI1NSAvKiB1dGlsLmNwcCAqLzsgfTsKLQkJOTBEOUIxMTQx
MkUxMURENjAwMkQ0MjU1IC8qIHV0aWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkwRDlCMTBDMTJFMTFERDYwMDJENDI1NSAvKiB1dGlsLmggKi87IH07
Ci0JCTkwRDlCMTE1MTJFMTFERDYwMDJENDI1NSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwRDlCMTBEMTJF
MTFERDYwMDJENDI1NSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLzsgfTsKLQkJOTBEOUIx
MTYxMkUxMURENjAwMkQ0MjU1IC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwRDlCMTBFMTJFMTFERDYwMDJENDI1
NSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmggKi87IH07Ci0JCTkwRDlCMTE3MTJFMTFERDYwMDJE
NDI1NSAvKiBWYXJpYWJsZUluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTBEOUIxMEYxMkUxMURENjAwMkQ0MjU1IC8qIFZhcmlhYmxlSW5mby5j
cHAgKi87IH07Ci0JCTkwRDlCMTE4MTJFMTFERDYwMDJENDI1NSAvKiBWYXJpYWJsZUluZm8uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwRDlCMTEwMTJF
MTFERDYwMDJENDI1NSAvKiBWYXJpYWJsZUluZm8uaCAqLzsgfTsKLQkJOTBEOUIxMTkxMkUxMURE
NjAwMkQ0MjU1IC8qIFZlcnNpb25HTFNMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkwRDlCMTExMTJFMTFERDYwMDJENDI1NSAvKiBWZXJzaW9uR0xT
TC5jcHAgKi87IH07Ci0JCTkwRDlCMTFBMTJFMTFERDYwMDJENDI1NSAvKiBWZXJzaW9uR0xTTC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTBEOUIxMTIx
MkUxMURENjAwMkQ0MjU1IC8qIFZlcnNpb25HTFNMLmggKi87IH07CiAJCUEwOEMzQ0RDMTZENkNC
NjEwMDNGMEI4MyAvKiBBcnJheUJvdW5kc0NsYW1wZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTA4QzNDREExNkQ2Q0I2MTAwM0YwQjgzIC8qIEFy
cmF5Qm91bmRzQ2xhbXBlci5jcHAgKi87IH07CiAJCUEwOEMzQ0REMTZENkNCNjEwMDNGMEI4MyAv
KiBBcnJheUJvdW5kc0NsYW1wZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEwOEMzQ0RCMTZENkNCNjEwMDNGMEI4MyAvKiBBcnJheUJvdW5kc0NsYW1w
ZXIuaCAqLzsgfTsKLQkJQTBBQUJFMkMxM0FGRTgxMDAwRjJFQkQxIC8qIEZvckxvb3BVbnJvbGwu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTBBQUJF
MkExM0FGRTgxMDAwRjJFQkQxIC8qIEZvckxvb3BVbnJvbGwuY3BwICovOyB9OwotCQlBMEFBQkUy
RDEzQUZFODEwMDBGMkVCRDEgLyogRm9yTG9vcFVucm9sbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTBBQUJFMkIxM0FGRTgxMDAwRjJFQkQxIC8qIEZv
ckxvb3BVbnJvbGwuaCAqLzsgfTsKLQkJQTBBQUJFMzAxM0FGRTgzMDAwRjJFQkQxIC8qIE1hcExv
bmdWYXJpYWJsZU5hbWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEEwQUFCRTJFMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25nVmFyaWFibGVOYW1l
cy5jcHAgKi87IH07Ci0JCUEwQUFCRTMxMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25nVmFyaWFi
bGVOYW1lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTBBQUJFMkYxM0FGRTgzMDAwRjJFQkQxIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmggKi87IH07
Ci0JCUEwQUFCRTM0MTNBRkU4NDcwMEYyRUJEMSAvKiBPdXRwdXRHTFNMQmFzZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkUzMjEzQUZFODQ3
MDBGMkVCRDEgLyogT3V0cHV0R0xTTEJhc2UuY3BwICovOyB9OwotCQlBMEFBQkUzNTEzQUZFODQ3
MDBGMkVCRDEgLyogT3V0cHV0R0xTTEJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFCRTMzMTNBRkU4NDcwMEYyRUJEMSAvKiBPdXRwdXRHTFNM
QmFzZS5oICovOyB9OwotCQlBMEFBQkU0NDEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkU0
MjEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5jcHAgKi87IH07Ci0JCUEwQUFCRTQ1MTNB
RkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkU0MzEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNT
TC5oICovOyB9OwotCQlBMEFBQkU0ODEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTBBQUJF
NDYxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCAqLzsgfTsKLQkJQTBBQUJF
NDkxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkU0NzEzQUZFOTYxMDBGMkVCRDEgLyog
VHJhbnNsYXRvckVTU0wuaCAqLzsgfTsKIAkJQTI2NEY4QUMxNjk3NERFRDAwNkZBQTVBIC8qIERp
YWdub3N0aWNzQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBMjY0Rjg5MzE2OTc0REVEMDA2RkFBNUEgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCAq
LzsgfTsKIAkJQTI2NEY4QUQxNjk3NERFRDAwNkZBQTVBIC8qIERpYWdub3N0aWNzQmFzZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4OTQxNjk3
NERFRDAwNkZBQTVBIC8qIERpYWdub3N0aWNzQmFzZS5oICovOyB9OwogCQlBMjY0RjhBRTE2OTc0
REVEMDA2RkFBNUEgLyogRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4OTUxNjk3NERFRDAwNkZBQTVBIC8q
IERpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcCAqLzsgfTsKQEAgLTk5LDQ0ICsxNTksNyBAQAogCQlB
MjY0RjhDMTE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4QTgxNjk3NERFRDAwNkZBQTVBIC8qIFRv
a2VuLmNwcCAqLzsgfTsKIAkJQTI2NEY4QzIxNjk3NERFRDAwNkZBQTVBIC8qIFRva2VuLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhBOTE2OTc0
REVEMDA2RkFBNUEgLyogVG9rZW4uaCAqLzsgfTsKIAkJQTI2NEY4QzQxNjk3NERFRDAwNkZBQTVB
IC8qIFRva2VuaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTI2NEY4QUIxNjk3NERFRDAwNkZBQTVBIC8qIFRva2VuaXplci5oICovOyB9OwotCQlB
MjY0RjhDODE2OTc0RTJBMDA2RkFBNUEgLyogSGFzaE5hbWVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhDNTE2OTc0RTJBMDA2RkFBNUEgLyog
SGFzaE5hbWVzLmggKi87IH07Ci0JCUEyNjRGOEM5MTY5NzRFMkEwMDZGQUE1QSAvKiBWYXJpYWJs
ZVBhY2tlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMjY0RjhDNjE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuY3BwICovOyB9Owot
CQlBMjY0RjhDQTE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGOEM3MTY5NzRFMkEwMDZG
QUE1QSAvKiBWYXJpYWJsZVBhY2tlci5oICovOyB9OwogCQlBMjY0RjhDRDE2OTc2MkFBMDA2RkFB
NUEgLyoga2hycGxhdGZvcm0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEEyNjRGOENDMTY5NzYyQUEwMDZGQUE1QSAvKiBraHJwbGF0Zm9ybS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKLQkJQTI2NTY3QkIxNTlD
MjFCMTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0IwMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9z
dGljcy5jcHAgKi87IH07Ci0JCUEyNjU2N0JDMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGlj
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3
QjExNTlDMjFCMTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmggKi87IH07Ci0JCUEyNjU2N0JEMTU5
QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0IyMTU5QzIxQjEwMDM5ODUzOSAvKiBE
aXJlY3RpdmVIYW5kbGVyLmNwcCAqLzsgfTsKLQkJQTI2NTY3QkUxNTlDMjFCMTAwMzk4NTM5IC8q
IERpcmVjdGl2ZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEEyNjU2N0IzMTU5QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmgg
Ki87IH07Ci0JCUEyNjU2N0JGMTU5QzIxQjEwMDM5ODUzOSAvKiBJbml0aWFsaXplUGFyc2VDb250
ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
NjU2N0I0MTU5QzIxQjEwMDM5ODUzOSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLzsg
fTsKLQkJQTI2NTY3QzAxNTlDMjFCMTAwMzk4NTM5IC8qIFByYWdtYS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjUxNTlDMjFCMTAwMzk4NTM5
IC8qIFByYWdtYS5oICovOyB9OwotCQlBMjY1NjdDMTE1OUMyMUIxMDAzOTg1MzkgLyogUmVuYW1l
RnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyNjU2N0I2MTU5QzIxQjEwMDM5ODUzOSAvKiBSZW5hbWVGdW5jdGlvbi5oICovOyB9OwotCQlB
MjY1NjgzOTE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODJEMTU5QzIzRTEwMDM5
ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovOyB9OwotCQlBMjY1NjgzQTE1OUMyM0UxMDAz
OTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgyRTE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdy
YXBoLmggKi87IH07Ci0JCUEyNjU2ODNCMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEEyNjU2ODJGMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNw
cCAqLzsgfTsKLQkJQTI2NTY4M0MxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
NjU2ODMwMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi87IH07
Ci0JCUEyNjU2ODNEMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzEx
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi87IH07Ci0JCUEy
NjU2ODNFMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODMyMTU5QzIzRTEw
MDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCAqLzsgfTsKLQkJQTI2NTY4M0YxNTlD
MjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODMzMTU5QzIzRTEwMDM5ODUz
OSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi87IH07Ci0JCUEyNjU2ODQwMTU5QzIz
RTEwMDM5ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODM1MTU5QzIzRTEwMDM5
ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKLQkJQTI2NTY4
NDExNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODM2MTU5QzIz
RTEwMDM5ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggKi87IH07Ci0JCUEy
NjU2ODQyMTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzNzE1
OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovOyB9Owot
CQlBMjY1Njg0MzE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODM4
MTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovOyB9Owot
CQlGQjM5RDI3NTEyMDBGMzVBMDAwODhFNjkgLyogZGVidWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMjYxMjAwRjM1QTAwMDg4RTY5IC8q
IGRlYnVnLmNwcCAqLzsgfTsKLQkJRkIzOUQyNzkxMjAwRjM1QTAwMDg4RTY5IC8qIEluZm9TaW5r
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlE
MjJBMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgKi87IH07Ci0JCUZCMzlEMjdCMTIw
MEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjJDMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFs
aXplLmNwcCAqLzsgfTsKLQkJRkIzOUQyN0QxMjAwRjM1QTAwMDg4RTY5IC8qIEluaXRpYWxpemVE
bGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIz
OUQyMkUxMjAwRjM1QTAwMDg4RTY5IC8qIEluaXRpYWxpemVEbGwuY3BwICovOyB9OwotCQlGQjM5
RDI4MTEyMDBGMzVBMDAwODhFNjkgLyogSW50ZXJtZWRpYXRlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjMyMTIwMEYzNUEwMDA4OEU2OSAv
KiBJbnRlcm1lZGlhdGUuY3BwICovOyB9OwotCQlGQjM5RDI4MzEyMDBGMzVBMDAwODhFNjkgLyog
aW50ZXJtT3V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZCMzlEMjM0MTIwMEYzNUEwMDA4OEU2OSAvKiBpbnRlcm1PdXQuY3BwICovOyB9OwotCQlG
QjM5RDI4NDEyMDBGMzVBMDAwODhFNjkgLyogSW50ZXJtVHJhdmVyc2UuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMzUxMjAwRjM1QTAwMDg4
RTY5IC8qIEludGVybVRyYXZlcnNlLmNwcCAqLzsgfTsKLQkJRkIzOUQyODgxMjAwRjM1QTAwMDg4
RTY5IC8qIG9zc291cmNlX3Bvc2l4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZCMzlEMjM5MTIwMEYzNUEwMDA4OEU2OSAvKiBvc3NvdXJjZV9wb3Np
eC5jcHAgKi87IH07Ci0JCUZCMzlEMjhBMTIwMEYzNUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjNC
MTIwMEYzNUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmNwcCAqLzsgfTsKLQkJRkIzOUQyOEUxMjAw
RjM1QTAwMDg4RTY5IC8qIHBhcnNlQ29uc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyM0YxMjAwRjM1QTAwMDg4RTY5IC8qIHBhcnNlQ29u
c3QuY3BwICovOyB9OwotCQlGQjM5RDI5MTEyMDBGMzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjQy
MTIwMEYzNUEwMDA4OEU2OSAvKiBQb29sQWxsb2MuY3BwICovOyB9OwotCQlGQjM5RDJBNDEyMDBG
MzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNTYxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxp
ZmllckFsaXZlLmNwcCAqLzsgfTsKLQkJRkIzOUQyQTYxMjAwRjM1QTAwMDg4RTY5IC8qIFJlbW92
ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkIzOUQyNTgxMjAwRjM1QTAwMDg4RTY5IC8qIFJlbW92ZVRyZWUuY3BwICovOyB9OwotCQlGQjM5
RDJBODEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFuZy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI1QTEyMDBGMzVBMDAwODhFNjkgLyog
U2hhZGVyTGFuZy5jcHAgKi87IH07Ci0JCUZCMzlEMkFBMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1i
b2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGQjM5RDI1QzEyMDBGMzVBMDAwODhFNjkgLyogU3ltYm9sVGFibGUuY3BwICovOyB9OwotCQlG
QjM5RDJBQzEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNjgxMjAwRjM1QTAwMDg4
RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLzsgfTsKIAkJRkIzOUQ3NkUxMjAxMTBGQzAwMDg4
RTY5IC8qIFNoYWRlckxhbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZCMzlEMkJGMTIwMEYzRTYwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogLyogRW5kIFBCWEJ1aWxk
RmlsZSBzZWN0aW9uICovCiAKQEAgLTE3NCw2NSArMTk3LDEyNSBAQAogLyogRW5kIFBCWENvcHlG
aWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNl
Y3Rpb24gKi8KKwkJMzEwMTJEQTAxOEI5N0I5QjAwMzkwNjJGIC8qIEJhc2VUeXBlcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYXNlVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQTExOEI5N0I5QjAwMzkwNjJGIC8qIEJ1aWx0SW5GdW5jdGlv
bkVtdWxhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJ1aWx0
SW5GdW5jdGlvbkVtdWxhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEw
MTJEQTIxOEI5N0I5QjAwMzkwNjJGIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREEzMThCOTdCOUIwMDM5MDYyRiAvKiBD
b2RlR2VuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVHZW4u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRBNDE4Qjk3QjlCMDAzOTA2
MkYgLyogQ29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbW1vbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRBNTE4Qjk3QjlCMDAzOTA2MkYg
LyogQ29tcGlsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29t
cGlsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRBODE4Qjk3QjlC
MDAzOTA2MkYgLyogQ29uc3RhbnRVbmlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDb25zdGFudFVuaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEy
REFBMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQUIxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lH
cmFwaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGgu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQUMxOEI5N0I5QjAwMzkwNjJG
IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTMxMDEyREFEMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhC
dWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQUUxOEI5N0I5
QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRBRjE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5j
eUdyYXBoT3V0cHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVu
Y3lHcmFwaE91dHB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRCMDE4
Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRCMTE4Qjk3QjlCMDAzOTA2MkYgLyog
RGV0ZWN0Q2FsbERlcHRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERldGVjdENhbGxEZXB0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEy
REIyMThCOTdCOUIwMDM5MDYyRiAvKiBEZXRlY3RDYWxsRGVwdGguaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRGV0ZWN0Q2FsbERlcHRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTMxMDEyREIzMThCOTdCOUIwMDM5MDYyRiAvKiBEZXRlY3REaXNjb250aW51aXR5
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERldGVjdERpc2NvbnRp
bnVpdHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRCNDE4Qjk3QjlC
MDAzOTA2MkYgLyogRGV0ZWN0RGlzY29udGludWl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEZXRlY3REaXNjb250aW51aXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTMxMDEyREI1MThCOTdCOUIwMDM5MDYyRiAvKiBEaWFnbm9zdGljcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaWFnbm9zdGljcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREI2MThCOTdCOUIwMDM5MDYyRiAvKiBEaWFnbm9z
dGljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRCNzE4Qjk3QjlCMDAzOTA2MkYgLyog
RGlyZWN0aXZlSGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBEaXJlY3RpdmVIYW5kbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEw
MTJEQjgxOEI5N0I5QjAwMzkwNjJGIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkzMTAxMkRCOTE4Qjk3QjlCMDAzOTA2MkYgLyogRXh0ZW5zaW9uQmVoYXZp
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uQmVoYXZpb3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQkExOEI5N0I5QjAwMzkwNjJG
IC8qIEZvckxvb3BVbnJvbGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRm9yTG9vcFVucm9sbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEy
REJCMThCOTdCOUIwMDM5MDYyRiAvKiBGb3JMb29wVW5yb2xsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZvckxvb3BVbnJvbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMzEwMTJEQkQxOEI5N0I5QjAwMzkwNjJGIC8qIGdsc2xhbmcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gZ2xzbGFuZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkzMTAxMkRDMDE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZ19sZXguY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gZ2xzbGFuZ19sZXguY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRDMTE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZ190
YWIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gZ2xzbGFuZ190YWIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRDMjE4Qjk3QjlCMDAzOTA2
MkYgLyogZ2xzbGFuZ190YWIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZ2xz
bGFuZ190YWIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQzMxOEI5N0I5
QjAwMzkwNjJGIC8qIEhhc2hOYW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBIYXNoTmFtZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQzQxOEI5
N0I5QjAwMzkwNjJGIC8qIEluZm9TaW5rLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEluZm9TaW5rLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEw
MTJEQzUxOEI5N0I5QjAwMzkwNjJGIC8qIEluZm9TaW5rLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEluZm9TaW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMx
MDEyREM2MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkzMTAxMkRDNzE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTMxMDEyREM4MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplRGxs
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemVEbGwu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRDOTE4Qjk3QjlCMDAzOTA2
MkYgLyogSW5pdGlhbGl6ZURsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bml0aWFsaXplRGxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyRENBMThC
OTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplR2xvYmFscy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbml0aWFsaXplR2xvYmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkzMTAxMkRDQjE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbml0aWFsaXplUGFy
c2VDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQ0MxOEI5
N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkzMTAxMkRDRDE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZVZh
cmlhYmxlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbml0aWFs
aXplVmFyaWFibGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQ0Ux
OEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVWYXJpYWJsZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZVZhcmlhYmxlcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkzMTAxMkRDRjE4Qjk3QjlCMDAzOTA2MkYgLyogSW50ZXJtZWRpYXRlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVybWVkaWF0ZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREQwMThCOTdCOUIwMDM5MDYyRiAv
KiBpbnRlcm1lZGlhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gaW50ZXJt
ZWRpYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREQxMThCOTdCOUIw
MDM5MDYyRiAvKiBpbnRlcm1PdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gaW50ZXJtT3V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJE
RDIxOEI5N0I5QjAwMzkwNjJGIC8qIEludGVybVRyYXZlcnNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVybVRyYXZlcnNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMzEwMTJERDMxOEI5N0I5QjAwMzkwNjJGIC8qIGxvY2FsaW50ZXJtZWRp
YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGxvY2FsaW50ZXJtZWRpYXRl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREQ0MThCOTdCOUIwMDM5MDYy
RiAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTMxMDEyREQ1MThCOTdCOUIwMDM5MDYyRiAvKiBNYXBMb25nVmFyaWFibGVOYW1l
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXBMb25nVmFyaWFibGVOYW1l
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRENjE4Qjk3QjlCMDAzOTA2
MkYgLyogTU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNTWFwLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREQ3MThCOTdCOUIwMDM5MDYyRiAvKiBO
b2RlU2VhcmNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vZGVTZWFyY2gu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERDgxOEI5N0I5QjAwMzkwNjJG
IC8qIG9zaW5jbHVkZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBvc2luY2x1
ZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERDkxOEI5N0I5QjAwMzkw
NjJGIC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IG9zc291cmNlX3Bvc2l4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MzEwMTJEREIxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEVTU0wuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3V0cHV0RVNTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTMxMDEyRERDMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRFU1NMLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE91dHB1dEVTU0wuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEREQxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEdMU0wu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3V0cHV0R0xTTC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyRERFMThCOTdCOUIwMDM5MDYyRiAv
KiBPdXRwdXRHTFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE91dHB1dEdM
U0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEREYxOEI5N0I5QjAwMzkw
NjJGIC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IE91dHB1dEdMU0xCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MzEwMTJERTAxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEdMU0xCYXNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE91dHB1dEdMU0xCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTMxMDEyREUxMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRITFNMLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE91dHB1dEhMU0wuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRFMjE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0
cHV0SExTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPdXRwdXRITFNMLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREUzMThCOTdCOUIwMDM5MDYyRiAv
KiBwYXJzZUNvbnN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHBh
cnNlQ29uc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRFNDE4Qjk3
QjlCMDAzOTA2MkYgLyogUGFyc2VDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFBhcnNlQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTMxMDEyREU1MThCOTdCOUIwMDM5MDYyRiAvKiBQYXJzZUNvbnRleHQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2VDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTMxMDEyREU2MThCOTdCOUIwMDM5MDYyRiAvKiBQb29sQWxsb2MuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9vbEFsbG9jLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERTcxOEI5N0I5QjAwMzkwNjJGIC8qIFBvb2xB
bGxvYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb29sQWxsb2MuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERTgxOEI5N0I5QjAwMzkwNjJGIC8qIFBy
YWdtYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmFnbWEuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERTkxOEI5N0I5QjAwMzkwNjJGIC8qIFF1YWxp
ZmllckFsaXZlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxp
ZmllckFsaXZlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERUExOEI5
N0I5QjAwMzkwNjJGIC8qIFF1YWxpZmllckFsaXZlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFF1YWxpZmllckFsaXZlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTMxMDEyREVCMThCOTdCOUIwMDM5MDYyRiAvKiBSZW1vdmVUcmVlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW92ZVRyZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkzMTAxMkRFQzE4Qjk3QjlCMDAzOTA2MkYgLyogUmVtb3ZlVHJlZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdmVUcmVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREVEMThCOTdCOUIwMDM5MDYyRiAvKiBSZW5hbWVGdW5j
dGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5hbWVGdW5jdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRFRTE4Qjk3QjlCMDAzOTA2MkYg
LyogUmV3cml0ZUVsc2VCbG9ja3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUmV3cml0ZUVsc2VCbG9ja3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkzMTAxMkRFRjE4Qjk3QjlCMDAzOTA2MkYgLyogUmV3cml0ZUVsc2VCbG9ja3MuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmV3cml0ZUVsc2VCbG9ja3MuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERjAxOEI5N0I5QjAwMzkwNjJGIC8qIFNlYXJjaFN5
bWJvbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZWFyY2hTeW1i
b2wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRGMTE4Qjk3QjlCMDAz
OTA2MkYgLyogU2VhcmNoU3ltYm9sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNlYXJjaFN5bWJvbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRGMjE4
Qjk3QjlCMDAzOTA2MkYgLyogU2hhZGVyTGFuZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTaGFkZXJMYW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMzEwMTJERjMxOEI5N0I5QjAwMzkwNjJGIC8qIFNoSGFuZGxlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNoSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTMxMDEyREY0MThCOTdCOUIwMDM5MDYyRiAvKiBTeW1ib2xUYWJsZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTeW1ib2xUYWJsZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREY1MThCOTdCOUIwMDM5MDYyRiAvKiBTeW1ib2xUYWJs
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeW1ib2xUYWJsZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRGNzE4Qjk3QjlCMDAzOTA2MkYgLyogUmVz
dHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERjgxOEI5N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0RnJh
Z21lbnRTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVz
dHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkzMTAxMkRGOTE4Qjk3QjlCMDAzOTA2MkYgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhT
aGFkZXJUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRGQTE4
Qjk3QjlCMDAzOTA2MkYgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERkIxOEI5N0I5QjAwMzkwNjJGIC8qIFRy
YW5zbGF0b3JFU1NMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRy
YW5zbGF0b3JFU1NMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERkMx
OEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JFU1NMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JFU1NMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTMxMDEyREZEMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdG9yR0xTTC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREZFMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFu
c2xhdG9yR0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xhdG9y
R0xTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRGRjE4Qjk3QjlCMDAz
OTA2MkYgLyogVHJhbnNsYXRvckhMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVHJhbnNsYXRvckhMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkzMTAxMkUwMDE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckhMU0wuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMzEwMTJFMDExOEI5N0I5QjAwMzkwNjJGIC8qIFR5cGVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTMxMDEyRTAyMThCOTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2hvcnRDaXJj
dWl0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJFMDMxOEI5N0I5QjAw
MzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBVbmZvbGRTaG9ydENpcmN1aXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMzEwMTJFMDQxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTaG9ydENpcmN1aXRB
U1QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkUwNTE4Qjk3QjlCMDAz
OTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkzMTAxMkUwNjE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmlmb3JtLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMzEwMTJFMDcxOEI5N0I5QjAwMzkwNjJGIC8qIFVuaWZvcm0uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5pZm9ybS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkzMTAxMkUwODE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSB1dGlsLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMzEwMTJFMDkxOEI5N0I5QjAwMzkwNjJGIC8qIHV0aWwuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gdXRpbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkzMTAxMkUwQTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYWxpZGF0ZUxpbWl0YXRp
b25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJFMEIxOEI5N0I5QjAw
MzkwNjJGIC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVmFsaWRhdGVMaW1pdGF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkzMTAxMkUwQzE4Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFibGVJbmZvLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZhcmlhYmxlSW5mby5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyRTBEMThCOTdCOUIwMDM5MDYyRiAvKiBWYXJpYWJs
ZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFibGVJbmZvLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyRTBFMThCOTdCOUIwMDM5MDYyRiAv
KiBWYXJpYWJsZVBhY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBWYXJpYWJsZVBhY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEy
RTBGMThCOTdCOUIwMDM5MDYyRiAvKiBWYXJpYWJsZVBhY2tlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBWYXJpYWJsZVBhY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkzMTAxMkUxMDE4Qjk3QjlCMDAzOTA2MkYgLyogVmVyc2lvbkdMU0wuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmVyc2lvbkdMU0wuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkUxMTE4Qjk3QjlCMDAzOTA2MkYgLyogVmVyc2lv
bkdMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmVyc2lvbkdMU0wuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJFODExOEI5N0M4NjAwMzkwNjJGIC8q
IGNvbXBpbGVyZGVidWcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Y29tcGlsZXJkZWJ1Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyRTgy
MThCOTdDODYwMDM5MDYyRiAvKiBjb21waWxlcmRlYnVnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IGNvbXBpbGVyZGVidWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzEyQkRCMDkxNUZFQzkxRTAwOTdFQkM3IC8qIEFOR0xFLnBsaXN0ICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC5wbGlzdC54bWw7IHBhdGggPSBBTkdMRS5wbGlzdDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMzEyQkRCMEExNUZFQ0EzQTAwOTdFQkM3IC8qIEFOR0xFLnR4dCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBBTkdMRS50eHQ7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0M0Ez
RTE1MTJFQ0Y2Q0MwMDA0RjlENyAvKiBpT1MueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29u
ZmlnOyBwYXRoID0gaU9TLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
OTk1MUMwMjE0QjdBQUIzMDA2MEU5NkUgLyogbGVuZ3RoX2xpbWl0cy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBsZW5ndGhfbGltaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTQ5OTUxQzA1MTRCN0FBRDcwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVs
YXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCdWlsdEluRnVu
Y3Rpb25FbXVsYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5OTUxQzA2
MTRCN0FBRDgwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk1Q0IxM0ZEMjE3OURCM0ZEMDAxRjg1MUQgLyogRGV0ZWN0
Q2FsbERlcHRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERldGVj
dENhbGxEZXB0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVDQjEzRkQzMTc5
REIzRkQwMDFGODUxRCAvKiBEZXRlY3RDYWxsRGVwdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRGV0ZWN0Q2FsbERlcHRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTVEN0M1OUM1MTIwOEM2OEIwMDFDODczRSAvKiBBTkdMRS54Y2NvbmZpZyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQueGNjb25maWc7IHBhdGggPSBBTkdMRS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNUQ3QzU5QzYxMjA4QzY4QjAwMUM4NzNFIC8qIEJhc2UueGNjb25maWcgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gQmFzZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNUQ3QzU5QzcxMjA4QzY4QjAwMUM4NzNFIC8qIERlYnVnUmVsZWFz
ZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBEZWJ1Z1JlbGVhc2Uu
eGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMzA5QTU1MTgzQzI3REIw
MDM3MEI5MyAvKiBUb2tlbml6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVG9rZW5pemVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIzMDlBNTcxODNDMjdGMTAwMzcwQjkz
IC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhwcmVzc2lvblBh
cnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcyMzA5QTU5MTgzQzI4NEUw
MDM3MEI5MyAvKiBnbHNsYW5nX2xleC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBnbHNsYW5nX2xl
eC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcyMzA5QTVBMTgzQzI4NEUwMDM3
MEI5MyAvKiBnbHNsYW5nX3RhYi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBnbHNsYW5nX3RhYi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcyMzA5QTVCMTgzQzI4NEUwMDM3MEI5
MyAvKiBnbHNsYW5nX3RhYi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBnbHNsYW5nX3RhYi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk3MjMwOUE1RjE4M0MyQTY0MDAzNzBCOTMgLyogVHJhbnNs
YXRvckhMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3MjMwOUE2MDE4M0MyQTY0MDAzNzBCOTMgLyogVHJh
bnNsYXRvckhMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzIzMDlBNjMxODNDMkFFNTAwMzcwQjkzIC8qIE91dHB1dEhM
U0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3V0cHV0SExTTC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcyMzA5QTY0MTgzQzJBRTUwMDM3MEI5
MyAvKiBPdXRwdXRITFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE91dHB1
dEhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzIzMDlBNjcxODNDMkJFODAw
MzcwQjkzIC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRGV0ZWN0RGlzY29udGludWl0eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTcyMzA5QTY4MTgzQzJCRTgwMDM3MEI5MyAvKiBEZXRlY3REaXNjb250aW51
aXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdERpc2NvbnRpbnVp
dHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzIzMDlBNjkxODNDMkJFODAwMzcw
QjkzIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBVbmZvbGRTaG9ydENpcmN1aXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk3MjMwOUE2QTE4M0MyQkU4MDAzNzBCOTMgLyogVW5mb2xkU2hvcnRDaXJjdWl0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3MjMwOUE2QjE4M0MyQkU4MDAzNzBCOTMgLyog
VW5pZm9ybS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmlmb3Jt
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzIzMDlBNkMxODNDMkJFODAwMzcw
QjkzIC8qIFVuaWZvcm0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5pZm9y
bS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3MjY1MDkzMDE4M0FBMjEzMDBEMjhC
NDggLyogQ29kZUdlbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2RlR2VuLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzI2NTA5MzExODNBQTI0NjAwRDI4QjQ4IC8qIEluaXRp
YWxpemVHTFBvc2l0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemVHTFBvc2l0
aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzI2NTA5MzIxODNBQTI0NjAw
RDI4QjQ4IC8qIEluaXRpYWxpemVHTFBvc2l0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRpYWxp
emVHTFBvc2l0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcyNjUwOTMzMTgz
QUEyODkwMEQyOEI0OCAvKiBOb2RlU2VhcmNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vZGVTZWFyY2gu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzI2NTA5MzQxODNBQTNCMjAwRDI4QjQ4
IC8qIFBhcnNlQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJzZUNvbnRleHQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3MjY1MDkzNTE4M0FBM0IyMDBEMjhCNDgg
LyogUGFyc2VDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlQ29udGV4dC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk3MjY1MDkzNjE4M0FBM0M2MDBEMjhCNDggLyogVW5mb2xk
U2hvcnRDaXJjdWl0QVNULmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3Vp
dEFTVC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcyNjUwOTM3MTgzQUEzQzYw
MEQyOEI0OCAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5mb2xk
U2hvcnRDaXJjdWl0QVNULmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkwRDlCMEY5
MTJFMTFEQ0IwMDJENDI1NSAvKiBDb21waWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBDb21waWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHVzZXNU
YWJzID0gMDsgfTsKLQkJOTBEOUIwRkExMkUxMURDQjAwMkQ0MjU1IC8qIEV4dGVuc2lvbkJlaGF2
aW9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4dGVuc2lvbkJlaGF2aW9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkwRDlCMEZFMTJFMTFEQ0IwMDJENDI1
NSAvKiBnbHNsYW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGdsc2xhbmcu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTBEOUIxMDAxMkUxMURDQjAwMkQ0MjU1
IC8qIFNlYXJjaFN5bWJvbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTZWFyY2hTeW1ib2wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5MEQ5QjEw
MTEyRTExRENCMDAyRDQyNTUgLyogU2VhcmNoU3ltYm9sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNlYXJjaFN5bWJvbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk5MEQ5QjEwQjEyRTExREQ2MDAyRDQyNTUgLyogdXRpbC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSB1dGlsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJOTBEOUIxMEMxMkUxMURENjAwMkQ0MjU1IC8qIHV0aWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gdXRpbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5MEQ5
QjEwRDEyRTExREQ2MDAyRDQyNTUgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTBEOUIxMEUxMkUxMURENjAwMkQ0MjU1IC8qIFZh
bGlkYXRlTGltaXRhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFs
aWRhdGVMaW1pdGF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5MEQ5QjEw
RjEyRTExREQ2MDAyRDQyNTUgLyogVmFyaWFibGVJbmZvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFZhcmlhYmxlSW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTkwRDlCMTEwMTJFMTFERDYwMDJENDI1NSAvKiBWYXJpYWJsZUluZm8uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFibGVJbmZvLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTkwRDlCMTExMTJFMTFERDYwMDJENDI1NSAvKiBWZXJzaW9uR0xT
TC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWZXJzaW9uR0xTTC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkwRDlCMTEyMTJFMTFERDYwMDJENDI1
NSAvKiBWZXJzaW9uR0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWZXJz
aW9uR0xTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMDhDM0NEQTE2RDZDQjYx
MDAzRjBCODMgLyogQXJyYXlCb3VuZHNDbGFtcGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEFycmF5Qm91bmRzQ2xhbXBlci5jcHA7IHBhdGggPSBzcmMvdGhpcmRf
cGFydHkvY29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTA4QzNDREIxNkQ2Q0I2MTAwM0YwQjgzIC8qIEFycmF5Qm91bmRzQ2xhbXBl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBcnJheUJvdW5kc0NsYW1wZXIu
aDsgcGF0aCA9IHNyYy90aGlyZF9wYXJ0eS9jb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTBBQUJFMkExM0FGRTgxMDAwRjJFQkQxIC8q
IEZvckxvb3BVbnJvbGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Rm9yTG9vcFVucm9sbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEwQUFCRTJC
MTNBRkU4MTAwMEYyRUJEMSAvKiBGb3JMb29wVW5yb2xsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZvckxvb3BVbnJvbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQTBBQUJFMkUxM0FGRTgzMDAwRjJFQkQxIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcExvbmdWYXJpYWJsZU5hbWVz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTBBQUJFMkYxM0FGRTgzMDAwRjJF
QkQxIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1hcExvbmdWYXJpYWJsZU5hbWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUEwQUFCRTMyMTNBRkU4NDcwMEYyRUJEMSAvKiBPdXRwdXRHTFNMQmFzZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPdXRwdXRHTFNMQmFzZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEwQUFCRTMzMTNBRkU4NDcwMEYyRUJEMSAvKiBPdXRw
dXRHTFNMQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPdXRwdXRHTFNM
QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMEFBQkU0MjEzQUZFOTQ1MDBG
MkVCRDEgLyogT3V0cHV0RVNTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBPdXRwdXRFU1NMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTBBQUJF
NDMxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gT3V0cHV0RVNTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlB
MEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckVTU0wuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlBMEFBQkU0NzEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRv
ckVTU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckVTU0wu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTI2NEY4OTMxNjk3NERFRDAwNkZBQTVB
IC8qIERpYWdub3N0aWNzQmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBEaWFnbm9zdGljc0Jhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
MjY0Rjg5NDE2OTc0REVEMDA2RkFBNUEgLyogRGlhZ25vc3RpY3NCYXNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpYWdub3N0aWNzQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBMjY0Rjg5NTE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0aXZlSGFuZGxl
ckJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZl
SGFuZGxlckJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU2LDY3ICsz
MzksOCBAQAogCQlBMjY0RjhBODE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVG9rZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBMjY0RjhBOTE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTI2NEY4QUIxNjk3NERFRDAwNkZBQTVBIC8qIFRva2VuaXplci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUb2tlbml6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQTI2NEY4QzUxNjk3NEUyQTAwNkZBQTVBIC8qIEhhc2hOYW1lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoTmFtZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQTI2NEY4QzYxNjk3NEUyQTAwNkZBQTVBIC8qIFZhcmlhYmxlUGFja2Vy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZhcmlhYmxlUGFja2Vy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NEY4QzcxNjk3NEUyQTAwNkZB
QTVBIC8qIFZhcmlhYmxlUGFja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFZhcmlhYmxlUGFja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEyNjRGOEND
MTY5NzYyQUEwMDZGQUE1QSAvKiBraHJwbGF0Zm9ybS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBraHJwbGF0Zm9ybS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlB
MjY1NjdCMDE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlhZ25vc3RpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlBMjY1NjdCMTE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlhZ25vc3RpY3MuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY3QjIxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2
ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0
aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0IzMTU5
QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQTI2NTY3QjQxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZVBhcnNl
Q29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0I1MTU5QzIx
QjEwMDM5ODUzOSAvKiBQcmFnbWEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UHJhZ21hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0I2MTU5QzIxQjEw
MDM5ODUzOSAvKiBSZW5hbWVGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZW5hbWVGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1
NjgyRDE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2ODJFMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5
R3JhcGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBo
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2ODJGMTU5QzIzRTEwMDM5ODUz
OSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlBMjY1NjgzMDE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBo
QnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2ODMxMTU5QzIz
RTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY4MzIxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVu
Y3lHcmFwaE91dHB1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXBlbmRl
bmN5R3JhcGhPdXRwdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY4MzMx
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY4MzUxNTlDMjNFMTAwMzk4NTM5IC8q
IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2ODM2MTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmlj
dEZyYWdtZW50U2hhZGVyVGltaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQTI2NTY4MzcxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY4
MzgxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMEQxMTIwMEYwRTMwMDA4OEU2OSAv
KiBsaWJBTkdMRS5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5
cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBsaWJBTkdMRS5hOyBz
b3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQlGQjM5RDIyMTEyMDBGMzVBMDAw
ODhFNjkgLyogQmFzZVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGlj
aXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBC
YXNlVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyMjQxMjAwRjM1
QTAwMDg4RTY5IC8qIENvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxp
Y2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0g
Q29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjI1MTIwMEYzNUEw
MDA4OEU2OSAvKiBDb25zdGFudFVuaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBh
dGggPSBDb25zdGFudFVuaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlE
MjI2MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBkZWJ1Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZC
MzlEMjI3MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBkZWJ1Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDIy
QTEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1NpbmsuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW5mb1NpbmsuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlGQjM5RDIyQjEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1NpbmsuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVu
Y29kaW5nID0gNDsgcGF0aCA9IEluZm9TaW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUZCMzlEMjJDMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlGQjM5RDIyRDEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gSW5pdGlhbGl6ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDIyRTEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlh
bGl6ZURsbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbml0aWFs
aXplRGxsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyMkYxMjAwRjM1
QTAwMDg4RTY5IC8qIEluaXRpYWxpemVEbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsg
cGF0aCA9IEluaXRpYWxpemVEbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIz
OUQyMzAxMjAwRjM1QTAwMDg4RTY5IC8qIEluaXRpYWxpemVHbG9iYWxzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZp
bGVFbmNvZGluZyA9IDQ7IHBhdGggPSBJbml0aWFsaXplR2xvYmFscy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlGQjM5RDIzMTEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZVBh
cnNlQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gSW5pdGlhbGl6
ZVBhcnNlQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDIzMjEy
MDBGMzVBMDAwODhFNjkgLyogSW50ZXJtZWRpYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEludGVybWVkaWF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUZCMzlEMjMzMTIwMEYzNUEwMDA4OEU2OSAvKiBpbnRlcm1lZGlhdGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
aDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IGludGVybWVkaWF0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlGQjM5RDIzNDEyMDBGMzVBMDAwODhFNjkgLyogaW50ZXJtT3V0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGludGVybU91dC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjM1MTIwMEYzNUEwMDA4OEU2OSAvKiBJ
bnRlcm1UcmF2ZXJzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
bnRlcm1UcmF2ZXJzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjM2
MTIwMEYzNUEwMDA4OEU2OSAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5j
b2RpbmcgPSA0OyBwYXRoID0gbG9jYWxpbnRlcm1lZGlhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJRkIzOUQyMzcxMjAwRjM1QTAwMDg4RTY5IC8qIE1NYXAuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsg
ZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IE1NYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQyMzgxMjAwRjM1QTAwMDg4RTY5IC8qIG9zaW5jbHVkZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBvc2luY2x1ZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQyMzkxMjAwRjM1QTAwMDg4RTY5IC8qIG9zc291cmNlX3Bvc2l4LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IG9zc291cmNlX3Bvc2l4LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyM0ExMjAwRjM1QTAwMDg4RTY5IC8q
IG9zc291cmNlX3dpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBv
c3NvdXJjZV93aW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDIzQjEy
MDBGMzVBMDAwODhFNjkgLyogT3V0cHV0R0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBPdXRwdXRHTFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJRkIzOUQyM0MxMjAwRjM1QTAwMDg4RTY5IC8qIE91dHB1dEdMU0wuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmls
ZUVuY29kaW5nID0gNDsgcGF0aCA9IE91dHB1dEdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQyM0YxMjAwRjM1QTAwMDg4RTY5IC8qIHBhcnNlQ29uc3QuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gcGFyc2VDb25zdC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjQyMTIwMEYzNUEwMDA4OEU2OSAvKiBQb29sQWxs
b2MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9vbEFsbG9jLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyNDMxMjAwRjM1QTAwMDg4RTY5
IC8qIFBvb2xBbGxvYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0Rmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gUG9vbEFs
bG9jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjU2MTIwMEYzNUEwMDA4
OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBRdWFsaWZpZXJBbGl2ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZCMzlEMjU3MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBm
aWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gUXVhbGlmaWVyQWxpdmUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJRkIzOUQyNTgxMjAwRjM1QTAwMDg4RTY5IC8qIFJlbW92ZVRyZWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3ZlVHJlZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjU5MTIwMEYzNUEwMDA4OEU2OSAvKiBS
ZW1vdmVUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBSZW1vdmVUcmVl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjVBMTIwMEYzNUEwMDA4OEU2
OSAvKiBTaGFkZXJMYW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNoYWRlckxhbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI1QjEy
MDBGMzVBMDAwODhFNjkgLyogU2hIYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsg
cGF0aCA9IFNoSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjVD
MTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTeW1ib2xUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUZCMzlEMjVEMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5o
OyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gU3ltYm9sVGFibGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJRkIzOUQyNjgxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNM
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5zbGF0b3JHTFNM
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyNjkxMjAwRjM1QTAwMDg4
RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGgg
PSBUcmFuc2xhdG9yR0xTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI2
QzEyMDBGMzVBMDAwODhFNjkgLyogVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsg
cGF0aCA9IFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMkJGMTIw
MEYzRTYwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7
IHBhdGggPSBTaGFkZXJMYW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAvKiBFbmQg
UEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAKQEAgLTMzMSw2ICszNTUsMTM3IEBACiAvKiBF
bmQgUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhHcm91
cCBzZWN0aW9uICovCisJCTMxMDEyRDlGMThCOTdCOUIwMDM5MDYyRiAvKiB0cmFuc2xhdG9yICov
ID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkzMTAxMkRBOTE4
Qjk3QjlCMDAzOTA2MkYgLyogZGVwZ3JhcGggKi8sCisJCQkJMzEwMTJERjYxOEI5N0I5QjAwMzkw
NjJGIC8qIHRpbWluZyAqLywKKwkJCQkzMTAxMkRBMDE4Qjk3QjlCMDAzOTA2MkYgLyogQmFzZVR5
cGVzLmggKi8sCisJCQkJMzEwMTJEQTExOEI5N0I5QjAwMzkwNjJGIC8qIEJ1aWx0SW5GdW5jdGlv
bkVtdWxhdG9yLmNwcCAqLywKKwkJCQkzMTAxMkRBMjE4Qjk3QjlCMDAzOTA2MkYgLyogQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0b3IuaCAqLywKKwkJCQkzMTAxMkRBMzE4Qjk3QjlCMDAzOTA2MkYgLyog
Q29kZUdlbi5jcHAgKi8sCisJCQkJMzEwMTJEQTQxOEI5N0I5QjAwMzkwNjJGIC8qIENvbW1vbi5o
ICovLAorCQkJCTMxMDEyRTgxMThCOTdDODYwMDM5MDYyRiAvKiBjb21waWxlcmRlYnVnLmNwcCAq
LywKKwkJCQkzMTAxMkU4MjE4Qjk3Qzg2MDAzOTA2MkYgLyogY29tcGlsZXJkZWJ1Zy5oICovLAor
CQkJCTMxMDEyREE1MThCOTdCOUIwMDM5MDYyRiAvKiBDb21waWxlci5jcHAgKi8sCisJCQkJMzEw
MTJEQTgxOEI5N0I5QjAwMzkwNjJGIC8qIENvbnN0YW50VW5pb24uaCAqLywKKwkJCQkzMTAxMkRC
MTE4Qjk3QjlCMDAzOTA2MkYgLyogRGV0ZWN0Q2FsbERlcHRoLmNwcCAqLywKKwkJCQkzMTAxMkRC
MjE4Qjk3QjlCMDAzOTA2MkYgLyogRGV0ZWN0Q2FsbERlcHRoLmggKi8sCisJCQkJMzEwMTJEQjMx
OEI5N0I5QjAwMzkwNjJGIC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwICovLAorCQkJCTMxMDEy
REI0MThCOTdCOUIwMDM5MDYyRiAvKiBEZXRlY3REaXNjb250aW51aXR5LmggKi8sCisJCQkJMzEw
MTJEQjUxOEI5N0I5QjAwMzkwNjJGIC8qIERpYWdub3N0aWNzLmNwcCAqLywKKwkJCQkzMTAxMkRC
NjE4Qjk3QjlCMDAzOTA2MkYgLyogRGlhZ25vc3RpY3MuaCAqLywKKwkJCQkzMTAxMkRCNzE4Qjk3
QjlCMDAzOTA2MkYgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8sCisJCQkJMzEwMTJEQjgxOEI5
N0I5QjAwMzkwNjJGIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKKwkJCQkzMTAxMkRCOTE4Qjk3
QjlCMDAzOTA2MkYgLyogRXh0ZW5zaW9uQmVoYXZpb3IuaCAqLywKKwkJCQkzMTAxMkRCQTE4Qjk3
QjlCMDAzOTA2MkYgLyogRm9yTG9vcFVucm9sbC5jcHAgKi8sCisJCQkJMzEwMTJEQkIxOEI5N0I5
QjAwMzkwNjJGIC8qIEZvckxvb3BVbnJvbGwuaCAqLywKKwkJCQkzMTAxMkRCRDE4Qjk3QjlCMDAz
OTA2MkYgLyogZ2xzbGFuZy5oICovLAorCQkJCTMxMDEyREMwMThCOTdCOUIwMDM5MDYyRiAvKiBn
bHNsYW5nX2xleC5jcHAgKi8sCisJCQkJMzEwMTJEQzExOEI5N0I5QjAwMzkwNjJGIC8qIGdsc2xh
bmdfdGFiLmNwcCAqLywKKwkJCQkzMTAxMkRDMjE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZ190
YWIuaCAqLywKKwkJCQkzMTAxMkRDMzE4Qjk3QjlCMDAzOTA2MkYgLyogSGFzaE5hbWVzLmggKi8s
CisJCQkJMzEwMTJEQzQxOEI5N0I5QjAwMzkwNjJGIC8qIEluZm9TaW5rLmNwcCAqLywKKwkJCQkz
MTAxMkRDNTE4Qjk3QjlCMDAzOTA2MkYgLyogSW5mb1NpbmsuaCAqLywKKwkJCQkzMTAxMkRDNjE4
Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZS5jcHAgKi8sCisJCQkJMzEwMTJEQzcxOEI5N0I5
QjAwMzkwNjJGIC8qIEluaXRpYWxpemUuaCAqLywKKwkJCQkzMTAxMkRDODE4Qjk3QjlCMDAzOTA2
MkYgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi8sCisJCQkJMzEwMTJEQzkxOEI5N0I5QjAwMzkwNjJG
IC8qIEluaXRpYWxpemVEbGwuaCAqLywKKwkJCQkzMTAxMkRDQTE4Qjk3QjlCMDAzOTA2MkYgLyog
SW5pdGlhbGl6ZUdsb2JhbHMuaCAqLywKKwkJCQkzMTAxMkRDQjE4Qjk3QjlCMDAzOTA2MkYgLyog
SW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgKi8sCisJCQkJMzEwMTJEQ0MxOEI5N0I5QjAwMzkw
NjJGIC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCAqLywKKwkJCQkzMTAxMkRDRDE4Qjk3QjlC
MDAzOTA2MkYgLyogSW5pdGlhbGl6ZVZhcmlhYmxlcy5jcHAgKi8sCisJCQkJMzEwMTJEQ0UxOEI5
N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVWYXJpYWJsZXMuaCAqLywKKwkJCQkzMTAxMkRDRjE4
Qjk3QjlCMDAzOTA2MkYgLyogSW50ZXJtZWRpYXRlLmNwcCAqLywKKwkJCQkzMTAxMkREMDE4Qjk3
QjlCMDAzOTA2MkYgLyogaW50ZXJtZWRpYXRlLmggKi8sCisJCQkJMzEwMTJERDExOEI5N0I5QjAw
MzkwNjJGIC8qIGludGVybU91dC5jcHAgKi8sCisJCQkJMzEwMTJERDIxOEI5N0I5QjAwMzkwNjJG
IC8qIEludGVybVRyYXZlcnNlLmNwcCAqLywKKwkJCQkzMTAxMkREMzE4Qjk3QjlCMDAzOTA2MkYg
LyogbG9jYWxpbnRlcm1lZGlhdGUuaCAqLywKKwkJCQkzMTAxMkRENDE4Qjk3QjlCMDAzOTA2MkYg
LyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwICovLAorCQkJCTMxMDEyREQ1MThCOTdCOUIwMDM5
MDYyRiAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5oICovLAorCQkJCTMxMDEyREQ2MThCOTdCOUIw
MDM5MDYyRiAvKiBNTWFwLmggKi8sCisJCQkJMzEwMTJERDcxOEI5N0I5QjAwMzkwNjJGIC8qIE5v
ZGVTZWFyY2guaCAqLywKKwkJCQkzMTAxMkREODE4Qjk3QjlCMDAzOTA2MkYgLyogb3NpbmNsdWRl
LmggKi8sCisJCQkJMzEwMTJERDkxOEI5N0I5QjAwMzkwNjJGIC8qIG9zc291cmNlX3Bvc2l4LmNw
cCAqLywKKwkJCQkzMTAxMkREQjE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0RVNTTC5jcHAgKi8s
CisJCQkJMzEwMTJEREMxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEVTU0wuaCAqLywKKwkJCQkz
MTAxMkRERDE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0R0xTTC5jcHAgKi8sCisJCQkJMzEwMTJE
REUxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEdMU0wuaCAqLywKKwkJCQkzMTAxMkRERjE4Qjk3
QjlCMDAzOTA2MkYgLyogT3V0cHV0R0xTTEJhc2UuY3BwICovLAorCQkJCTMxMDEyREUwMThCOTdC
OUIwMDM5MDYyRiAvKiBPdXRwdXRHTFNMQmFzZS5oICovLAorCQkJCTMxMDEyREUxMThCOTdCOUIw
MDM5MDYyRiAvKiBPdXRwdXRITFNMLmNwcCAqLywKKwkJCQkzMTAxMkRFMjE4Qjk3QjlCMDAzOTA2
MkYgLyogT3V0cHV0SExTTC5oICovLAorCQkJCTMxMDEyREUzMThCOTdCOUIwMDM5MDYyRiAvKiBw
YXJzZUNvbnN0LmNwcCAqLywKKwkJCQkzMTAxMkRFNDE4Qjk3QjlCMDAzOTA2MkYgLyogUGFyc2VD
b250ZXh0LmNwcCAqLywKKwkJCQkzMTAxMkRFNTE4Qjk3QjlCMDAzOTA2MkYgLyogUGFyc2VDb250
ZXh0LmggKi8sCisJCQkJMzEwMTJERTYxOEI5N0I5QjAwMzkwNjJGIC8qIFBvb2xBbGxvYy5jcHAg
Ki8sCisJCQkJMzEwMTJERTcxOEI5N0I5QjAwMzkwNjJGIC8qIFBvb2xBbGxvYy5oICovLAorCQkJ
CTMxMDEyREU4MThCOTdCOUIwMDM5MDYyRiAvKiBQcmFnbWEuaCAqLywKKwkJCQkzMTAxMkRFOTE4
Qjk3QjlCMDAzOTA2MkYgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovLAorCQkJCTMxMDEyREVBMThC
OTdCOUIwMDM5MDYyRiAvKiBRdWFsaWZpZXJBbGl2ZS5oICovLAorCQkJCTMxMDEyREVCMThCOTdC
OUIwMDM5MDYyRiAvKiBSZW1vdmVUcmVlLmNwcCAqLywKKwkJCQkzMTAxMkRFQzE4Qjk3QjlCMDAz
OTA2MkYgLyogUmVtb3ZlVHJlZS5oICovLAorCQkJCTMxMDEyREVEMThCOTdCOUIwMDM5MDYyRiAv
KiBSZW5hbWVGdW5jdGlvbi5oICovLAorCQkJCTMxMDEyREVFMThCOTdCOUIwMDM5MDYyRiAvKiBS
ZXdyaXRlRWxzZUJsb2Nrcy5jcHAgKi8sCisJCQkJMzEwMTJERUYxOEI5N0I5QjAwMzkwNjJGIC8q
IFJld3JpdGVFbHNlQmxvY2tzLmggKi8sCisJCQkJMzEwMTJERjAxOEI5N0I5QjAwMzkwNjJGIC8q
IFNlYXJjaFN5bWJvbC5jcHAgKi8sCisJCQkJMzEwMTJERjExOEI5N0I5QjAwMzkwNjJGIC8qIFNl
YXJjaFN5bWJvbC5oICovLAorCQkJCTMxMDEyREYyMThCOTdCOUIwMDM5MDYyRiAvKiBTaGFkZXJM
YW5nLmNwcCAqLywKKwkJCQkzMTAxMkRGMzE4Qjk3QjlCMDAzOTA2MkYgLyogU2hIYW5kbGUuaCAq
LywKKwkJCQkzMTAxMkRGNDE4Qjk3QjlCMDAzOTA2MkYgLyogU3ltYm9sVGFibGUuY3BwICovLAor
CQkJCTMxMDEyREY1MThCOTdCOUIwMDM5MDYyRiAvKiBTeW1ib2xUYWJsZS5oICovLAorCQkJCTMx
MDEyREZCMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi8sCisJCQkJMzEw
MTJERkMxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JFU1NMLmggKi8sCisJCQkJMzEwMTJE
RkQxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLywKKwkJCQkzMTAxMkRG
RTE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckdMU0wuaCAqLywKKwkJCQkzMTAxMkRGRjE4
Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckhMU0wuY3BwICovLAorCQkJCTMxMDEyRTAwMThC
OTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9ySExTTC5oICovLAorCQkJCTMxMDEyRTAxMThCOTdC
OUIwMDM5MDYyRiAvKiBUeXBlcy5oICovLAorCQkJCTMxMDEyRTAyMThCOTdCOUIwMDM5MDYyRiAv
KiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwICovLAorCQkJCTMxMDEyRTAzMThCOTdCOUIwMDM5MDYy
RiAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCAqLywKKwkJCQkzMTAxMkUwNDE4Qjk3QjlCMDAzOTA2
MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcCAqLywKKwkJCQkzMTAxMkUwNTE4Qjk3QjlC
MDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmggKi8sCisJCQkJMzEwMTJFMDYxOEI5
N0I5QjAwMzkwNjJGIC8qIFVuaWZvcm0uY3BwICovLAorCQkJCTMxMDEyRTA3MThCOTdCOUIwMDM5
MDYyRiAvKiBVbmlmb3JtLmggKi8sCisJCQkJMzEwMTJFMDgxOEI5N0I5QjAwMzkwNjJGIC8qIHV0
aWwuY3BwICovLAorCQkJCTMxMDEyRTA5MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmggKi8sCisJ
CQkJMzEwMTJFMEExOEI5N0I5QjAwMzkwNjJGIC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwICov
LAorCQkJCTMxMDEyRTBCMThCOTdCOUIwMDM5MDYyRiAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmgg
Ki8sCisJCQkJMzEwMTJFMEMxOEI5N0I5QjAwMzkwNjJGIC8qIFZhcmlhYmxlSW5mby5jcHAgKi8s
CisJCQkJMzEwMTJFMEQxOEI5N0I5QjAwMzkwNjJGIC8qIFZhcmlhYmxlSW5mby5oICovLAorCQkJ
CTMxMDEyRTBFMThCOTdCOUIwMDM5MDYyRiAvKiBWYXJpYWJsZVBhY2tlci5jcHAgKi8sCisJCQkJ
MzEwMTJFMEYxOEI5N0I5QjAwMzkwNjJGIC8qIFZhcmlhYmxlUGFja2VyLmggKi8sCisJCQkJMzEw
MTJFMTAxOEI5N0I5QjAwMzkwNjJGIC8qIFZlcnNpb25HTFNMLmNwcCAqLywKKwkJCQkzMTAxMkUx
MTE4Qjk3QjlCMDAzOTA2MkYgLyogVmVyc2lvbkdMU0wuaCAqLywKKwkJCSk7CisJCQlwYXRoID0g
dHJhbnNsYXRvcjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTMxMDEyREE5
MThCOTdCOUIwMDM5MDYyRiAvKiBkZXBncmFwaCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOwor
CQkJY2hpbGRyZW4gPSAoCisJCQkJMzEwMTJEQUExOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVu
Y3lHcmFwaC5jcHAgKi8sCisJCQkJMzEwMTJEQUIxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVu
Y3lHcmFwaC5oICovLAorCQkJCTMxMDEyREFDMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5
R3JhcGhCdWlsZGVyLmNwcCAqLywKKwkJCQkzMTAxMkRBRDE4Qjk3QjlCMDAzOTA2MkYgLyogRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5oICovLAorCQkJCTMxMDEyREFFMThCOTdCOUIwMDM5MDYyRiAv
KiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwICovLAorCQkJCTMxMDEyREFGMThCOTdCOUIwMDM5
MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCAqLywKKwkJCQkzMTAxMkRCMDE4Qjk3QjlC
MDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICovLAorCQkJKTsKKwkJCXBh
dGggPSBkZXBncmFwaDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTMxMDEy
REY2MThCOTdCOUIwMDM5MDYyRiAvKiB0aW1pbmcgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCTMxMDEyREY3MThCOTdCOUIwMDM5MDYyRiAvKiBSZXN0cmlj
dEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCAqLywKKwkJCQkzMTAxMkRGODE4Qjk3QjlCMDAzOTA2
MkYgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oICovLAorCQkJCTMxMDEyREY5MThC
OTdCOUIwMDM5MDYyRiAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgKi8sCisJCQkJ
MzEwMTJERkExOEI5N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgg
Ki8sCisJCQkpOworCQkJcGF0aCA9IHRpbWluZzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CisJCX07CiAJCTMxMkJEQjA3MTVGRUM4RTYwMDk3RUJDNyAvKiBtaXNjICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTM3NywzMSArNTMyLDYgQEAKIAkJCXBh
dGggPSBpbmNsdWRlL0tIUjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCUEy
NjU2ODJDMTU5QzIzRTEwMDM5ODUzOSAvKiBkZXBncmFwaCAqLyA9IHsKLQkJCWlzYSA9IFBCWEdy
b3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJQTI2NTY4MkQxNTlDMjNFMTAwMzk4NTM5IC8qIERl
cGVuZGVuY3lHcmFwaC5jcHAgKi8sCi0JCQkJQTI2NTY4MkUxNTlDMjNFMTAwMzk4NTM5IC8qIERl
cGVuZGVuY3lHcmFwaC5oICovLAotCQkJCUEyNjU2ODJGMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBl
bmRlbmN5R3JhcGhCdWlsZGVyLmNwcCAqLywKLQkJCQlBMjY1NjgzMDE1OUMyM0UxMDAzOTg1Mzkg
LyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oICovLAotCQkJCUEyNjU2ODMxMTU5QzIzRTEwMDM5
ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwICovLAotCQkJCUEyNjU2ODMyMTU5QzIz
RTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCAqLywKLQkJCQlBMjY1NjgzMzE1
OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICovLAotCQkJKTsK
LQkJCXBhdGggPSBkZXBncmFwaDsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0J
CUEyNjU2ODM0MTU5QzIzRTEwMDM5ODUzOSAvKiB0aW1pbmcgKi8gPSB7Ci0JCQlpc2EgPSBQQlhH
cm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCUEyNjU2ODM1MTU5QzIzRTEwMDM5ODUzOSAvKiBS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCAqLywKLQkJCQlBMjY1NjgzNjE1OUMyM0Ux
MDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oICovLAotCQkJCUEyNjU2
ODM3MTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgKi8s
Ci0JCQkJQTI2NTY4MzgxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmggKi8sCi0JCQkpOwotCQkJcGF0aCA9IHRpbWluZzsKLQkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7Ci0JCX07CiAJCUEyOUIxNUU5MTY5NzhCN0QwMDExMUQ5NyAvKiBpbmNsdWRlICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTQ0MiwxMDUgKzU3Miw4
IEBACiAJCUZCMzlEMjIwMTIwMEYzNUEwMDA4OEU2OSAvKiBjb21waWxlciAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQTI2NTY4MkMxNTlDMjNFMTAwMzk4
NTM5IC8qIGRlcGdyYXBoICovLAorCQkJCTMxMDEyRDlGMThCOTdCOUIwMDM5MDYyRiAvKiB0cmFu
c2xhdG9yICovLAogCQkJCUZCMzlEMjQ0MTIwMEYzNUEwMDA4OEU2OSAvKiBwcmVwcm9jZXNzb3Ig
Ki8sCi0JCQkJQTI2NTY4MzQxNTlDMjNFMTAwMzk4NTM5IC8qIHRpbWluZyAqLywKLQkJCQlGQjM5
RDIyMTEyMDBGMzVBMDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8sCi0JCQkJNDk5NTFDMDUxNEI3
QUFENzAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCAqLywKLQkJCQk3MjY1
MDkzNjE4M0FBM0M2MDBEMjhCNDggLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcCAqLywKLQkJ
CQk3MjY1MDkzNzE4M0FBM0M2MDBEMjhCNDggLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmggKi8s
Ci0JCQkJNzI2NTA5MzQxODNBQTNCMjAwRDI4QjQ4IC8qIFBhcnNlQ29udGV4dC5jcHAgKi8sCi0J
CQkJNzIzMDlBNjcxODNDMkJFODAwMzcwQjkzIC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwICov
LAotCQkJCTcyMzA5QTY4MTgzQzJCRTgwMDM3MEI5MyAvKiBEZXRlY3REaXNjb250aW51aXR5Lmgg
Ki8sCi0JCQkJNzIzMDlBNjkxODNDMkJFODAwMzcwQjkzIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5j
cHAgKi8sCi0JCQkJNzIzMDlBNkExODNDMkJFODAwMzcwQjkzIC8qIFVuZm9sZFNob3J0Q2lyY3Vp
dC5oICovLAotCQkJCTcyMzA5QTZCMTgzQzJCRTgwMDM3MEI5MyAvKiBVbmlmb3JtLmNwcCAqLywK
LQkJCQk3MjMwOUE2QzE4M0MyQkU4MDAzNzBCOTMgLyogVW5pZm9ybS5oICovLAotCQkJCTcyNjUw
OTM1MTgzQUEzQjIwMEQyOEI0OCAvKiBQYXJzZUNvbnRleHQuaCAqLywKLQkJCQk3MjY1MDkzMzE4
M0FBMjg5MDBEMjhCNDggLyogTm9kZVNlYXJjaC5oICovLAotCQkJCTcyNjUwOTMxMTgzQUEyNDYw
MEQyOEI0OCAvKiBJbml0aWFsaXplR0xQb3NpdGlvbi5jcHAgKi8sCi0JCQkJNzI2NTA5MzIxODNB
QTI0NjAwRDI4QjQ4IC8qIEluaXRpYWxpemVHTFBvc2l0aW9uLmggKi8sCi0JCQkJNDk5NTFDMDYx
NEI3QUFEODAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggKi8sCi0JCQkJNzI2
NTA5MzAxODNBQTIxMzAwRDI4QjQ4IC8qIENvZGVHZW4uY3BwICovLAotCQkJCUZCMzlEMjI0MTIw
MEYzNUEwMDA4OEU2OSAvKiBDb21tb24uaCAqLywKLQkJCQk5MEQ5QjBGOTEyRTExRENCMDAyRDQy
NTUgLyogQ29tcGlsZXIuY3BwICovLAotCQkJCUZCMzlEMjI1MTIwMEYzNUEwMDA4OEU2OSAvKiBD
b25zdGFudFVuaW9uLmggKi8sCi0JCQkJRkIzOUQyMjYxMjAwRjM1QTAwMDg4RTY5IC8qIGRlYnVn
LmNwcCAqLywKLQkJCQlGQjM5RDIyNzEyMDBGMzVBMDAwODhFNjkgLyogZGVidWcuaCAqLywKLQkJ
CQk1Q0IxM0ZEMzE3OURCM0ZEMDAxRjg1MUQgLyogRGV0ZWN0Q2FsbERlcHRoLmggKi8sCi0JCQkJ
NUNCMTNGRDIxNzlEQjNGRDAwMUY4NTFEIC8qIERldGVjdENhbGxEZXB0aC5jcHAgKi8sCi0JCQkJ
QTI2NTY3QjAxNTlDMjFCMTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmNwcCAqLywKLQkJCQlBMjY1
NjdCMTE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCAqLywKLQkJCQlBMjY1NjdCMjE1
OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8sCi0JCQkJQTI2NTY3QjMx
NTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKLQkJCQk5MEQ5QjBGQTEy
RTExRENCMDAyRDQyNTUgLyogRXh0ZW5zaW9uQmVoYXZpb3IuaCAqLywKLQkJCQlBMEFBQkUyQTEz
QUZFODEwMDBGMkVCRDEgLyogRm9yTG9vcFVucm9sbC5jcHAgKi8sCi0JCQkJQTBBQUJFMkIxM0FG
RTgxMDAwRjJFQkQxIC8qIEZvckxvb3BVbnJvbGwuaCAqLywKLQkJCQk5MEQ5QjBGRTEyRTExRENC
MDAyRDQyNTUgLyogZ2xzbGFuZy5oICovLAotCQkJCTcyMzA5QTU5MTgzQzI4NEUwMDM3MEI5MyAv
KiBnbHNsYW5nX2xleC5jcHAgKi8sCi0JCQkJNzIzMDlBNUExODNDMjg0RTAwMzcwQjkzIC8qIGds
c2xhbmdfdGFiLmNwcCAqLywKLQkJCQk3MjMwOUE1QjE4M0MyODRFMDAzNzBCOTMgLyogZ2xzbGFu
Z190YWIuaCAqLywKLQkJCQlBMjY0RjhDNTE2OTc0RTJBMDA2RkFBNUEgLyogSGFzaE5hbWVzLmgg
Ki8sCi0JCQkJRkIzOUQyMkExMjAwRjM1QTAwMDg4RTY5IC8qIEluZm9TaW5rLmNwcCAqLywKLQkJ
CQlGQjM5RDIyQjEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1NpbmsuaCAqLywKLQkJCQlGQjM5RDIy
QzEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZS5jcHAgKi8sCi0JCQkJRkIzOUQyMkQxMjAw
RjM1QTAwMDg4RTY5IC8qIEluaXRpYWxpemUuaCAqLywKLQkJCQlGQjM5RDIyRTEyMDBGMzVBMDAw
ODhFNjkgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi8sCi0JCQkJRkIzOUQyMkYxMjAwRjM1QTAwMDg4
RTY5IC8qIEluaXRpYWxpemVEbGwuaCAqLywKLQkJCQlGQjM5RDIzMDEyMDBGMzVBMDAwODhFNjkg
LyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLywKLQkJCQlBMjY1NjdCNDE1OUMyMUIxMDAzOTg1Mzkg
LyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgKi8sCi0JCQkJRkIzOUQyMzExMjAwRjM1QTAw
MDg4RTY5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCAqLywKLQkJCQlGQjM5RDIzMjEyMDBG
MzVBMDAwODhFNjkgLyogSW50ZXJtZWRpYXRlLmNwcCAqLywKLQkJCQlGQjM5RDIzMzEyMDBGMzVB
MDAwODhFNjkgLyogaW50ZXJtZWRpYXRlLmggKi8sCi0JCQkJRkIzOUQyMzQxMjAwRjM1QTAwMDg4
RTY5IC8qIGludGVybU91dC5jcHAgKi8sCi0JCQkJRkIzOUQyMzUxMjAwRjM1QTAwMDg4RTY5IC8q
IEludGVybVRyYXZlcnNlLmNwcCAqLywKLQkJCQlGQjM5RDIzNjEyMDBGMzVBMDAwODhFNjkgLyog
bG9jYWxpbnRlcm1lZGlhdGUuaCAqLywKLQkJCQlBMEFBQkUyRTEzQUZFODMwMDBGMkVCRDEgLyog
TWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwICovLAotCQkJCUEwQUFCRTJGMTNBRkU4MzAwMEYyRUJE
MSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5oICovLAotCQkJCUZCMzlEMjM3MTIwMEYzNUEwMDA4
OEU2OSAvKiBNTWFwLmggKi8sCi0JCQkJRkIzOUQyMzgxMjAwRjM1QTAwMDg4RTY5IC8qIG9zaW5j
bHVkZS5oICovLAotCQkJCUZCMzlEMjM5MTIwMEYzNUEwMDA4OEU2OSAvKiBvc3NvdXJjZV9wb3Np
eC5jcHAgKi8sCi0JCQkJRkIzOUQyM0ExMjAwRjM1QTAwMDg4RTY5IC8qIG9zc291cmNlX3dpbi5j
cHAgKi8sCi0JCQkJQTBBQUJFNDIxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuY3BwICov
LAotCQkJCUEwQUFCRTQzMTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmggKi8sCi0JCQkJ
RkIzOUQyM0IxMjAwRjM1QTAwMDg4RTY5IC8qIE91dHB1dEdMU0wuY3BwICovLAotCQkJCUZCMzlE
MjNDMTIwMEYzNUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmggKi8sCi0JCQkJQTBBQUJFMzIxM0FG
RTg0NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLywKLQkJCQlBMEFBQkUzMzEzQUZF
ODQ3MDBGMkVCRDEgLyogT3V0cHV0R0xTTEJhc2UuaCAqLywKLQkJCQk3MjMwOUE2MzE4M0MyQUU1
MDAzNzBCOTMgLyogT3V0cHV0SExTTC5jcHAgKi8sCi0JCQkJNzIzMDlBNjQxODNDMkFFNTAwMzcw
QjkzIC8qIE91dHB1dEhMU0wuaCAqLywKLQkJCQlGQjM5RDIzRjEyMDBGMzVBMDAwODhFNjkgLyog
cGFyc2VDb25zdC5jcHAgKi8sCi0JCQkJRkIzOUQyNDIxMjAwRjM1QTAwMDg4RTY5IC8qIFBvb2xB
bGxvYy5jcHAgKi8sCi0JCQkJRkIzOUQyNDMxMjAwRjM1QTAwMDg4RTY5IC8qIFBvb2xBbGxvYy5o
ICovLAotCQkJCUEyNjU2N0I1MTU5QzIxQjEwMDM5ODUzOSAvKiBQcmFnbWEuaCAqLywKLQkJCQlG
QjM5RDI1NjEyMDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovLAotCQkJCUZC
MzlEMjU3MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5oICovLAotCQkJCUZCMzlE
MjU4MTIwMEYzNUEwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNwcCAqLywKLQkJCQlGQjM5RDI1OTEy
MDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5oICovLAotCQkJCUEyNjU2N0I2MTU5QzIxQjEw
MDM5ODUzOSAvKiBSZW5hbWVGdW5jdGlvbi5oICovLAotCQkJCTkwRDlCMTAwMTJFMTFEQ0IwMDJE
NDI1NSAvKiBTZWFyY2hTeW1ib2wuY3BwICovLAotCQkJCTkwRDlCMTAxMTJFMTFEQ0IwMDJENDI1
NSAvKiBTZWFyY2hTeW1ib2wuaCAqLywKLQkJCQlGQjM5RDI1QTEyMDBGMzVBMDAwODhFNjkgLyog
U2hhZGVyTGFuZy5jcHAgKi8sCi0JCQkJRkIzOUQyNUIxMjAwRjM1QTAwMDg4RTY5IC8qIFNoSGFu
ZGxlLmggKi8sCi0JCQkJRkIzOUQyNUMxMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNw
cCAqLywKLQkJCQlGQjM5RDI1RDEyMDBGMzVBMDAwODhFNjkgLyogU3ltYm9sVGFibGUuaCAqLywK
LQkJCQlBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovLAot
CQkJCUEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovLAotCQkJ
CUZCMzlEMjY4MTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8sCi0JCQkJ
RkIzOUQyNjkxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8sCi0JCQkJNzIz
MDlBNUYxODNDMkE2NDAwMzcwQjkzIC8qIFRyYW5zbGF0b3JITFNMLmNwcCAqLywKLQkJCQk3MjMw
OUE2MDE4M0MyQTY0MDAzNzBCOTMgLyogVHJhbnNsYXRvckhMU0wuaCAqLywKLQkJCQlGQjM5RDI2
QzEyMDBGMzVBMDAwODhFNjkgLyogVHlwZXMuaCAqLywKLQkJCQk5MEQ5QjEwQjEyRTExREQ2MDAy
RDQyNTUgLyogdXRpbC5jcHAgKi8sCi0JCQkJOTBEOUIxMEMxMkUxMURENjAwMkQ0MjU1IC8qIHV0
aWwuaCAqLywKLQkJCQk5MEQ5QjEwRDEyRTExREQ2MDAyRDQyNTUgLyogVmFsaWRhdGVMaW1pdGF0
aW9ucy5jcHAgKi8sCi0JCQkJOTBEOUIxMEUxMkUxMURENjAwMkQ0MjU1IC8qIFZhbGlkYXRlTGlt
aXRhdGlvbnMuaCAqLywKLQkJCQk5MEQ5QjEwRjEyRTExREQ2MDAyRDQyNTUgLyogVmFyaWFibGVJ
bmZvLmNwcCAqLywKLQkJCQk5MEQ5QjExMDEyRTExREQ2MDAyRDQyNTUgLyogVmFyaWFibGVJbmZv
LmggKi8sCi0JCQkJQTI2NEY4QzYxNjk3NEUyQTAwNkZBQTVBIC8qIFZhcmlhYmxlUGFja2VyLmNw
cCAqLywKLQkJCQlBMjY0RjhDNzE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuaCAq
LywKLQkJCQk5MEQ5QjExMTEyRTExREQ2MDAyRDQyNTUgLyogVmVyc2lvbkdMU0wuY3BwICovLAot
CQkJCTkwRDlCMTEyMTJFMTFERDYwMDJENDI1NSAvKiBWZXJzaW9uR0xTTC5oICovLAogCQkJKTsK
IAkJCW5hbWUgPSBjb21waWxlcjsKIAkJCXBhdGggPSBzcmMvY29tcGlsZXI7CkBAIC01NDksMTQg
KzU4MiwxMyBAQAogCQlGQjM5RDI0NDEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzc29yICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk3MjMwOUE1NzE4
M0MyN0YxMDAzNzBCOTMgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi8sCi0JCQkJNzIzMDlBNTUx
ODNDMjdEQjAwMzcwQjkzIC8qIFRva2VuaXplci5jcHAgKi8sCiAJCQkJQTI2NEY4OTMxNjk3NERF
RDAwNkZBQTVBIC8qIERpYWdub3N0aWNzQmFzZS5jcHAgKi8sCiAJCQkJQTI2NEY4OTQxNjk3NERF
RDAwNkZBQTVBIC8qIERpYWdub3N0aWNzQmFzZS5oICovLAogCQkJCUEyNjRGODk1MTY5NzRERUQw
MDZGQUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAgKi8sCiAJCQkJQTI2NEY4OTYxNjk3
NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNlLmggKi8sCiAJCQkJQTI2NEY4OTcx
Njk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi8sCiAJCQkJQTI2NEY4OTgx
Njk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZVBhcnNlci5oICovLAorCQkJCTcyMzA5QTU3MTgz
QzI3RjEwMDM3MEI5MyAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCAqLywKIAkJCQlBMjY0Rjg5QTE2
OTc0REVEMDA2RkFBNUEgLyogRXhwcmVzc2lvblBhcnNlci5oICovLAogCQkJCUEyNjRGODlCMTY5
NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5jcHAgKi8sCiAJCQkJQTI2NEY4OUMxNjk3NERFRDAwNkZB
QTVBIC8qIElucHV0LmggKi8sCkBAIC01NzQsNiArNjA2LDcgQEAKIAkJCQlBMjY0RjhBNzE2OTc0
REVEMDA2RkFBNUEgLyogU291cmNlTG9jYXRpb24uaCAqLywKIAkJCQlBMjY0RjhBODE2OTc0REVE
MDA2RkFBNUEgLyogVG9rZW4uY3BwICovLAogCQkJCUEyNjRGOEE5MTY5NzRERUQwMDZGQUE1QSAv
KiBUb2tlbi5oICovLAorCQkJCTcyMzA5QTU1MTgzQzI3REIwMDM3MEI5MyAvKiBUb2tlbml6ZXIu
Y3BwICovLAogCQkJCUEyNjRGOEFCMTY5NzRERUQwMDZGQUE1QSAvKiBUb2tlbml6ZXIuaCAqLywK
IAkJCSk7CiAJCQlwYXRoID0gcHJlcHJvY2Vzc29yOwpAQCAtNTk1LDU5ICs2MjgsODEgQEAKIAkJ
CWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4
MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTMxMDEyRTNDMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0
aWFsaXplUGFyc2VDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMDhDM0NERDE2RDZDQjYx
MDAzRjBCODMgLyogQXJyYXlCb3VuZHNDbGFtcGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OTk1
MUMwQTE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCBpbiBIZWFk
ZXJzICovLAotCQkJCUEyNjU2ODNBMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGgu
aCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2ODNDMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRl
bmN5R3JhcGhCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQlBMjY1NjgzRTE1OUMyM0UxMDAz
OTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggaW4gSGVhZGVycyAqLywKLQkJCQlBMjY1
NjdCQzE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTMxMDEyRTNFMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplVmFyaWFibGVzLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkzMTAxMkUxNDE4Qjk3QjlCMDAzOTA2MkYgLyogQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTU1MThCOTdCOUIwMDM5MDYyRiAv
KiBQYXJzZUNvbnRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTJDMThCOTdCOUIwMDM5
MDYyRiAvKiBGb3JMb29wVW5yb2xsLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkU2RDE4Qjk3
QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckdMU0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEy
RTQ2MThCOTdCOUIwMDM5MDYyRiAvKiBNTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkU2
QjE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckVTU0wuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTMxMDEyRTE2MThCOTdCOUIwMDM5MDYyRiAvKiBDb21tb24uaCBpbiBIZWFkZXJzICovLAorCQkJ
CTMxMDEyRTIwMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTMxMDEyRTdDMThCOTdCOUIwMDM5MDYyRiAvKiBWYXJpYWJsZUluZm8u
aCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTYxMThCOTdCOUIwMDM5MDYyRiAvKiBTZWFyY2hT
eW1ib2wuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTQ3MThCOTdCOUIwMDM5MDYyRiAvKiBO
b2RlU2VhcmNoLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhBRDE2OTc0REVEMDA2RkFBNUEg
LyogRGlhZ25vc3RpY3NCYXNlLmggaW4gSGVhZGVycyAqLywKLQkJCQlBMjY1NjdCRTE1OUMyMUIx
MDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJF
NEMxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEVTU0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTMx
MDEyRTVGMThCOTdCOUIwMDM5MDYyRiAvKiBSZXdyaXRlRWxzZUJsb2Nrcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTI2NEY4QUYxNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNl
LmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkU3RTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFi
bGVQYWNrZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTUwMThCOTdCOUIwMDM5MDYyRiAv
KiBPdXRwdXRHTFNMQmFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNDAxOEI5N0I5QjAw
MzkwNjJGIC8qIGludGVybWVkaWF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFMjUxOEI5
N0I5QjAwMzkwNjJGIC8qIERldGVjdERpc2NvbnRpbnVpdHkuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTMxMDEyRTVEMThCOTdCOUIwMDM5MDYyRiAvKiBSZW5hbWVGdW5jdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMzEwMTJFM0ExOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVHbG9iYWxzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkU0NTE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTgwMThCOTdCOUIwMDM5MDYy
RiAvKiBWZXJzaW9uR0xTTC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFMjcxOEI5N0I5QjAw
MzkwNjJGIC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkUzMjE4Qjk3
QjlCMDAzOTA2MkYgLyogZ2xzbGFuZ190YWIuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEIx
MTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTMxMDEyRTU4MThCOTdCOUIwMDM5MDYyRiAvKiBQcmFnbWEuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTMxMDEyRTY1MThCOTdCOUIwMDM5MDYyRiAvKiBTeW1ib2xUYWJsZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMzEwMTJFNzQxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNzIxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNo
b3J0Q2lyY3VpdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4QjMxNjk3NERFRDAwNkZBQTVB
IC8qIEV4cHJlc3Npb25QYXJzZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTcyMzA5QTRGMTgzQzI1
OUUwMDM3MEI5MyAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTkwRDlCMTAzMTJFMTFEQ0IwMDJENDI1NSAvKiBFeHRlbnNpb25CZWhhdmlvci5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJNzIzMDlBNUUxODNDMjg1MzAwMzcwQjkzIC8qIGdsc2xhbmdfdGFiLmggaW4g
SGVhZGVycyAqLywKLQkJCQk3MjMwOUE3MjE4M0MyQkU4MDAzNzBCOTMgLyogVW5pZm9ybS5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJNzIzMDlBNjYxODNDMkFFNTAwMzcwQjkzIC8qIE91dHB1dEhMU0wu
aCBpbiBIZWFkZXJzICovLAotCQkJCUEwQUFCRTJEMTNBRkU4MTAwMEYyRUJEMSAvKiBGb3JMb29w
VW5yb2xsLmggaW4gSGVhZGVycyAqLywKLQkJCQk5MEQ5QjEwNzEyRTExRENCMDAyRDQyNTUgLyog
Z2xzbGFuZy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2NEY4QzgxNjk3NEUyQTAwNkZBQTVBIC8q
IEhhc2hOYW1lcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNzIzMDlBNjIxODNDMkE3NDAwMzcwQjkz
IC8qIFRyYW5zbGF0b3JITFNMLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkU1QzE4Qjk3QjlC
MDAzOTA2MkYgLyogUmVtb3ZlVHJlZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNDgxOEI5
N0I5QjAwMzkwNjJGIC8qIG9zaW5jbHVkZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFMzUx
OEI5N0I5QjAwMzkwNjJGIC8qIEluZm9TaW5rLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkUx
QzE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkzMTAxMkU2MzE4Qjk3QjlCMDAzOTA2MkYgLyogU2hIYW5kbGUuaCBpbiBIZWFkZXJzICovLAor
CQkJCTMxMDEyRTcwMThCOTdCOUIwMDM5MDYyRiAvKiBUeXBlcy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMzEwMTJFNjcxOEI5N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1p
bmcuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTQzMThCOTdCOUIwMDM5MDYyRiAvKiBsb2Nh
bGludGVybWVkaWF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNzgxOEI5N0I5QjAwMzkw
NjJGIC8qIHV0aWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEI1MTY5NzRERUQwMDZGQUE1
QSAvKiBJbnB1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4Q0QxNjk3NjJBQTAwNkZBQTVB
IC8qIGtocnBsYXRmb3JtLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTk1MUMwMzE0QjdBQUIzMDA2
MEU5NkUgLyogbGVuZ3RoX2xpbWl0cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNzYxOEI5
N0I5QjAwMzkwNjJGIC8qIFVuaWZvcm0uaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTIzMThC
OTdCOUIwMDM5MDYyRiAvKiBEZXRlY3RDYWxsRGVwdGguaCBpbiBIZWFkZXJzICovLAorCQkJCTMx
MDEyRTM5MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplRGxsLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBMjY0RjhCNzE2OTc0REVEMDA2RkFBNUEgLyogTGV4ZXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCTMxMDEyRTg0MThCOTdDODYwMDM5MDYyRiAvKiBjb21waWxlcmRlYnVnLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBMjY0RjhCOTE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm8uaCBpbiBIZWFkZXJz
ICovLAorCQkJCTMxMDEyRTVBMThCOTdCOUIwMDM5MDYyRiAvKiBRdWFsaWZpZXJBbGl2ZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNTcxOEI5N0I5QjAwMzkwNjJGIC8qIFBvb2xBbGxvYy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFMzcxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxp
emUuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTUyMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRw
dXRITFNMLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkUxQTE4Qjk3QjlCMDAzOTA2MkYgLyog
Q29uc3RhbnRVbmlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4QkIxNjk3NERFRDAwNkZB
QTVBIC8qIE1hY3JvRXhwYW5kZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTcyMzA5QTU0MTgzQzI1
QUQwMDM3MEI5MyAvKiBJbml0aWFsaXplR0xQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
QTBBQUJFMzExM0FGRTgzMDAwRjJFQkQxIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkzMTAxMkUyRDE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTI2NEY4QkMxNjk3NERFRDAwNkZBQTVBIC8qIG51bWVyaWNfbGV4Lmgg
aW4gSGVhZGVycyAqLywKLQkJCQlBMEFBQkU0NTEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNT
TC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNzIzMDlBNzAxODNDMkJFODAwMzcwQjkzIC8qIFVuZm9s
ZFNob3J0Q2lyY3VpdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTBBQUJFMzUxM0FGRTg0NzAwRjJF
QkQxIC8qIE91dHB1dEdMU0xCYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkU2OTE4Qjk3
QjlCMDAzOTA2MkYgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICov
LAogCQkJCUEyNjRGOEJEMTY5NzRERUQwMDZGQUE1QSAvKiBwcF91dGlscy5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJQTI2NTY3QzAxNTlDMjFCMTAwMzk4NTM5IC8qIFByYWdtYS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMzEwMTJFMkExOEI5N0I5QjAwMzkwNjJGIC8qIEV4dGVuc2lvbkJlaGF2aW9yLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkU2RjE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRv
ckhMU0wuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEJGMTY5NzRERUQwMDZGQUE1QSAvKiBQ
cmVwcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2N0MxMTU5QzIxQjEwMDM5ODUz
OSAvKiBSZW5hbWVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNzIzMDlBNTIxODNDMjVB
NzAwMzcwQjkzIC8qIE5vZGVTZWFyY2guaCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2ODQxMTU5
QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggaW4gSGVhZGVy
cyAqLywKLQkJCQk3MjMwOUE2RTE4M0MyQkU4MDAzNzBCOTMgLyogRGV0ZWN0RGlzY29udGludWl0
eS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2NTY4NDMxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3Ry
aWN0VmVydGV4U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLywKLQkJCQk5MEQ5QjEwQTEyRTEx
RENCMDAyRDQyNTUgLyogU2VhcmNoU3ltYm9sLmggaW4gSGVhZGVycyAqLywKIAkJCQlGQjM5RDc2
RTEyMDExMEZDMDAwODhFNjkgLyogU2hhZGVyTGFuZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2
NEY4QzAxNjk3NERFRDAwNkZBQTVBIC8qIFNvdXJjZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywK
KwkJCQkzMTAxMkU0RTE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0R0xTTC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMzEwMTJFMUUxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTdBMThCOTdCOUIwMDM5MDYyRiAvKiBWYWxp
ZGF0ZUxpbWl0YXRpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkUzMzE4Qjk3QjlCMDAz
OTA2MkYgLyogSGFzaE5hbWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhDMjE2OTc0REVE
MDA2RkFBNUEgLyogVG9rZW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTI5MThCOTdCOUIw
MDM5MDYyRiAvKiBEaXJlY3RpdmVIYW5kbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkUx
MjE4Qjk3QjlCMDAzOTA2MkYgLyogQmFzZVR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0
RjhDNDE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW5pemVyLmggaW4gSGVhZGVycyAqLywKLQkJCQlB
MEFBQkU0OTEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuaCBpbiBIZWFkZXJzICov
LAotCQkJCTkwRDlCMTE0MTJFMTFERDYwMDJENDI1NSAvKiB1dGlsLmggaW4gSGVhZGVycyAqLywK
LQkJCQk5MEQ5QjExNjEyRTExREQ2MDAyRDQyNTUgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJNzIzMDlBNTExODNDMjVBNTAwMzcwQjkzIC8qIFBhcnNlQ29udGV4
dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTBEOUIxMTgxMkUxMURENjAwMkQ0MjU1IC8qIFZhcmlh
YmxlSW5mby5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2NEY4Q0ExNjk3NEUyQTAwNkZBQTVBIC8q
IFZhcmlhYmxlUGFja2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQk5MEQ5QjExQTEyRTExREQ2MDAy
RDQyNTUgLyogVmVyc2lvbkdMU0wuaCBpbiBIZWFkZXJzICovLAotCQkJCTVDQjEzRkQ1MTc5REIz
RkQwMDFGODUxRCAvKiBEZXRlY3RDYWxsRGVwdGguaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNzIzLDY4
ICs3NzgsNjkgQEAKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rp
b25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTMxMDEyRTI2MThCOTdCOUIw
MDM5MDYyRiAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkUzRDE4
Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZVZhcmlhYmxlcy5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkzMTAxMkU3RjE4Qjk3QjlCMDAzOTA2MkYgLyogVmVyc2lvbkdMU0wuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTA4QzNDREMxNkQ2Q0I2MTAwM0YwQjgzIC8qIEFycmF5Qm91bmRzQ2xhbXBl
ci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OTk1MUMwOTE0QjdBQUQ4MDA2MEU5NkUgLyogQnVp
bHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNzIzMDlBNUQxODND
Mjg1MzAwMzcwQjkzIC8qIGdsc2xhbmdfdGFiLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTkwRDlC
MTAyMTJFMTFEQ0IwMDJENDI1NSAvKiBDb21waWxlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlG
QjM5RDI3NTEyMDBGMzVBMDAwODhFNjkgLyogZGVidWcuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
QTI2NTY4MzkxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlBMjY1NjgzQjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVp
bGRlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjY1NjgzRDE1OUMyM0UxMDAzOTg1MzkgLyog
RGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyNjU2ODNGMTU5
QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQlBMjY1NjdCQjE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNzIzMDlBNTYxODNDMjdERTAwMzcwQjkzIC8qIFRva2VuaXplci5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQk3MjMwOUE1MDE4M0MyNUExMDAzNzBCOTMgLyogUGFyc2VDb250
ZXh0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTcyMzA5QTcxMTgzQzJCRTgwMDM3MEI5MyAvKiBV
bmlmb3JtLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTZDMThCOTdCOUIwMDM5MDYyRiAv
KiBUcmFuc2xhdG9yR0xTTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMjY0RjhBQzE2OTc0REVE
MDA2RkFBNUEgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyNjU2
N0JEMTU5QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTMxMDEyRTE1MThCOTdCOUIwMDM5MDYyRiAvKiBDb2RlR2VuLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTMxMDEyRTNGMThCOTdCOUIwMDM5MDYyRiAvKiBJbnRlcm1lZGlhdGUuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFM0IxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVQ
YXJzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFMzExOEI5N0I5QjAwMzkw
NjJGIC8qIGdsc2xhbmdfdGFiLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTIxMThCOTdC
OUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkzMTAxMkU1RTE4Qjk3QjlCMDAzOTA2MkYgLyogUmV3cml0ZUVsc2VCbG9ja3MuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFNTQxOEI5N0I5QjAwMzkwNjJGIC8qIFBhcnNlQ29udGV4
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMjY0RjhBRTE2OTc0REVEMDA2RkFBNUEgLyogRGly
ZWN0aXZlSGFuZGxlckJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFNzUxOEI5N0I5
QjAwMzkwNjJGIC8qIFVuaWZvcm0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFNEQxOEI5
N0I5QjAwMzkwNjJGIC8qIE91dHB1dEdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJF
MzAxOEI5N0I5QjAwMzkwNjJGIC8qIGdsc2xhbmdfbGV4LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTMxMDEyRTQxMThCOTdCOUIwMDM5MDYyRiAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMzEwMTJFNkUxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JITFNMLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUEyNjRGOEIwMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVQYXJz
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTBBQUJFMkMxM0FGRTgxMDAwRjJFQkQxIC8qIEZv
ckxvb3BVbnJvbGwuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIzOUQyNzkxMjAwRjM1QTAwMDg4
RTY5IC8qIEluZm9TaW5rLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTcyMzA5QTYxMTgzQzJBNzQw
MDM3MEI5MyAvKiBUcmFuc2xhdG9ySExTTC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI3
QjEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlG
QjM5RDI3RDEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkzMTAxMkU0OTE4Qjk3QjlCMDAzOTA2MkYgLyogb3Nzb3VyY2VfcG9zaXguY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFNDIxOEI5N0I5QjAwMzkwNjJGIC8qIEludGVybVRyYXZl
cnNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTYwMThCOTdCOUIwMDM5MDYyRiAvKiBT
ZWFyY2hTeW1ib2wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzIzMDlBNTgxODNDMjdGMzAwMzcw
QjkzIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTI2NTY3QkYx
NTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMzEwMTJFMjgxOEI5N0I5QjAwMzkwNjJGIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFNTkxOEI5N0I5QjAwMzkwNjJGIC8qIFF1YWxpZmll
ckFsaXZlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTcxMThCOTdCOUIwMDM5MDYyRiAv
KiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFNjQxOEI5
N0I5QjAwMzkwNjJGIC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEyNjRG
OEI0MTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5
RDI4MTEyMDBGMzVBMDAwODhFNjkgLyogSW50ZXJtZWRpYXRlLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCUZCMzlEMjgzMTIwMEYzNUEwMDA4OEU2OSAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJRkIzOUQyODQxMjAwRjM1QTAwMDg4RTY5IC8qIEludGVybVRyYXZlcnNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUEyNjRGOEI2MTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkU2MjE4Qjk3QjlCMDAzOTA2MkYgLyogU2hhZGVyTGFu
Zy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkUzODE4Qjk3QjlCMDAzOTA2MkYgLyogSW5p
dGlhbGl6ZURsbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMjY0RjhCODE2OTc0REVEMDA2RkFB
NUEgLyogTWFjcm8uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFNUIxOEI5N0I5QjAwMzkw
NjJGIC8qIFJlbW92ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NEY4QkExNjk3NERF
RDAwNkZBQTVBIC8qIE1hY3JvRXhwYW5kZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTBBQUJF
MzAxM0FGRTgzMDAwRjJFQkQxIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCUZCMzlEMjg4MTIwMEYzNUEwMDA4OEU2OSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQlBMEFBQkU0NDEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNT
TC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI4QTEyMDBGMzVBMDAwODhFNjkgLyogT3V0
cHV0R0xTTC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMEFBQkUzNDEzQUZFODQ3MDBGMkVCRDEg
LyogT3V0cHV0R0xTTEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIzOUQyOEUxMjAwRjM1
QTAwMDg4RTY5IC8qIHBhcnNlQ29uc3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNzIzMDlBNjUx
ODNDMkFFNTAwMzcwQjkzIC8qIE91dHB1dEhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIz
OUQyOTExMjAwRjM1QTAwMDg4RTY5IC8qIFBvb2xBbGxvYy5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQk3MjMwOUE1MzE4M0MyNUFBMDAzNzBCOTMgLyogSW5pdGlhbGl6ZUdMUG9zaXRpb24uY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJNzIzMDlBNkQxODNDMkJFODAwMzcwQjkzIC8qIERldGVjdERpc2Nv
bnRpbnVpdHkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNzIzMDlBNkYxODNDMkJFODAwMzcwQjkz
IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk3MjMwOUE1QzE4
M0MyODUzMDAzNzBCOTMgLyogZ2xzbGFuZ19sZXguY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEw
MTJFNzMxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkzMTAxMkUyNDE4Qjk3QjlCMDAzOTA2MkYgLyogRGV0ZWN0RGlzY29udGlu
dWl0eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkU2ODE4Qjk3QjlCMDAzOTA2MkYgLyog
UmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJF
MTMxOEI5N0I5QjAwMzkwNjJGIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTMxMDEyRTM0MThCOTdCOUIwMDM5MDYyRiAvKiBJbmZvU2luay5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkzMTAxMkU1MzE4Qjk3QjlCMDAzOTA2MkYgLyogcGFyc2VDb25zdC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkU0NDE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9u
Z1ZhcmlhYmxlTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFNTYxOEI5N0I5QjAw
MzkwNjJGIC8qIFBvb2xBbGxvYy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkU2NjE4Qjk3
QjlCMDAzOTA2MkYgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkzMTAxMkU3OTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9u
cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkU4MzE4Qjk3Qzg2MDAzOTA2MkYgLyogY29t
cGlsZXJkZWJ1Zy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkU3NzE4Qjk3QjlCMDAzOTA2
MkYgLyogdXRpbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkU1MTE4Qjk3QjlCMDAzOTA2
MkYgLyogT3V0cHV0SExTTC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkUzNjE4Qjk3QjlC
MDAzOTA2MkYgLyogSW5pdGlhbGl6ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkU3QjE4
Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFibGVJbmZvLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMx
MDEyRTFEMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTMxMDEyRTdEMThCOTdCOUIwMDM5MDYyRiAvKiBWYXJpYWJsZVBhY2tl
ci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkUxRjE4Qjk3QjlCMDAzOTA2MkYgLyogRGVw
ZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTRCMThCOTdC
OUIwMDM5MDYyRiAvKiBPdXRwdXRFU1NMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEyNjRGOEJF
MTY5NzRERUQwMDZGQUE1QSAvKiBQcmVwcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
NzIzMDlBNEQxODNDMjU5MzAwMzcwQjkzIC8qIENvZGVHZW4uY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJRkIzOUQyQTQxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCUZCMzlEMkE2MTIwMEYzNUEwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNwcCBp
biBTb3VyY2VzICovLAotCQkJCUEyNjU2ODQwMTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyNjU2ODQyMTU5QzIz
RTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQk5MEQ5QjEwOTEyRTExRENCMDAyRDQyNTUgLyogU2VhcmNoU3ltYm9sLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCUZCMzlEMkE4MTIwMEYzNUEwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlEMkFBMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xU
YWJsZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkUyQjE4Qjk3QjlCMDAzOTA2MkYgLyog
Rm9yTG9vcFVucm9sbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkUyMjE4Qjk3QjlCMDAz
OTA2MkYgLyogRGV0ZWN0Q2FsbERlcHRoLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTE3
MThCOTdCOUIwMDM5MDYyRiAvKiBDb21waWxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAx
MkU2QTE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckVTU0wuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMzEwMTJFNEYxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEdMU0xCYXNlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTMxMDEyRTFCMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3Jh
cGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NEY4QzExNjk3NERFRDAwNkZBQTVBIC8qIFRv
a2VuLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEwQUFCRTQ4MTNBRkU5NjEwMEYyRUJEMSAvKiBU
cmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDJBQzEyMDBGMzVBMDAw
ODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOTBEOUIxMTMx
MkUxMURENjAwMkQ0MjU1IC8qIHV0aWwuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOTBEOUIxMTUx
MkUxMURENjAwMkQ0MjU1IC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJOTBEOUIxMTcxMkUxMURENjAwMkQ0MjU1IC8qIFZhcmlhYmxlSW5mby5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQlBMjY0RjhDOTE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOTBEOUIxMTkxMkUxMURENjAwMkQ0MjU1IC8qIFZlcnNp
b25HTFNMLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTVDQjEzRkQ0MTc5REIzRkQwMDFGODUxRCAv
KiBEZXRlY3RDYWxsRGVwdGguY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNzIzMDlBNEUxODNDMjU5
QzAwMzcwQjkzIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0dOVW1ha2VmaWxlLmFtIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvR05VbWFrZWZpbGUuYW0KaW5kZXggNGMxNGFjMTc1MWU3MmQ4OTlj
OTUzYjJlZWU5ZmU1OTdjM2E0MWIxNi4uMjllNWMwMmFlMWQ4ODZjYzY4ZjA5N2JhMzA3MDM4MmEx
NWMyYWMxZiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvR05VbWFrZWZpbGUu
YW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvR05VbWFrZWZpbGUuYW0KQEAgLTMwLDcx
ICszMCwxMTEgQEAgbGliQU5HTEVfbGFfU09VUkNFUyA9IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9pbmNsdWRlL0tIUi9raHJwbGF0Zm9ybS5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0Jhc2VUeXBlcy5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCBcCi0JU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW4uY3BwIFwKLQlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tbW9uLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9Db25zdGFudFVuaW9uLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9kZWJ1Zy5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9kZWJ1Zy5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggXAot
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5
R3JhcGguY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3Jh
cGgvRGVwZW5kZW5jeUdyYXBoLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIFwKLQlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0Lmgg
XAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZS5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9EZXRlY3RDYWxsRGVwdGguY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvRGV0ZWN0Q2FsbERlcHRoLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9EaWFnbm9zdGljcy5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9EaWFnbm9zdGljcy5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmNwcCBcCi0JU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaCBcCi0JU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmggXAotCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Gb3JMb29wVW5yb2xsLmNwcCBcCi0J
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJvbGwuaCBcCi0J
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcuaCBcCi0JU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0hhc2hOYW1lcy5oIFwKLQlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5mb1NpbmsuY3BwIFwKLQlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5mb1NpbmsuaCBcCi0JU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplR2xvYmFscy5oIFwKLQlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZUdMUG9zaXRpb24uY3BwIFwKLQlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZUdMUG9zaXRpb24uaCBc
Ci0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuaCBcCi0J
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRl
eHQuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6
ZVBhcnNlQ29udGV4dC5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
SW50ZXJtZWRpYXRlLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L2ludGVybWVkaWF0ZS5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
aW50ZXJtT3V0LmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0lu
dGVybVRyYXZlcnNlLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L2xvY2FsaW50ZXJtZWRpYXRlLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvTU1hcC5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvTm9kZVNlYXJjaC5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvb3NpbmNsdWRlLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9vc3NvdXJjZV9wb3NpeC5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9PdXRwdXRFU1NMLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL091dHB1dEVTU0wuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL091dHB1dEdMU0xCYXNlLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL091dHB1dEdMU0xCYXNlLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9PdXRwdXRHTFNMLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL091dHB1dEdMU0wuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL091dHB1dEhMU0wuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvT3V0cHV0SExTTC5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cGFyc2VDb25zdC5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Q
YXJzZUNvbnRleHQuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
UGFyc2VDb250ZXh0LmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Q
b29sQWxsb2MuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUG9v
bEFsbG9jLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QcmFnbWEu
aCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQmFz
ZVR5cGVzLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCBcCisJ
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29kZUdlbi5j
cHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Nv
bW1vbi5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9Db21waWxlci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvY29tcGlsZXJkZWJ1Zy5jcHAgXAorCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2NvbXBpbGVyZGVidWcuaCBcCisJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCBcCisJ
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgv
RGVwZW5kZW5jeUdyYXBoLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmggXAorCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lH
cmFwaE91dHB1dC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIFwKKwlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZS5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0RldGVjdENhbGxEZXB0aC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RldGVjdENhbGxEZXB0aC5oIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5jcHAg
XAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RpYWdu
b3N0aWNzLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL0RpcmVjdGl2ZUhhbmRsZXIuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmggXAorCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RldGVjdERpc2NvbnRpbnVpdHkuY3Bw
IFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EZXRl
Y3REaXNjb250aW51aXR5LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0V4dGVuc2lvbkJlaGF2aW9yLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwuY3BwIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Gb3JMb29wVW5yb2xsLmgg
XAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xh
bmcuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
SGFzaE5hbWVzLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0luZm9TaW5rLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZS5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemUuaCBcCisJU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZURsbC5jcHAg
XAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRp
YWxpemVEbGwuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvSW5pdGlhbGl6ZUdsb2JhbHMuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgXAorCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVQYXJz
ZUNvbnRleHQuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvSW5pdGlhbGl6ZVZhcmlhYmxlcy5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVWYXJpYWJsZXMuaCBcCisJU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtZWRpYXRlLmNw
cCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvaW50
ZXJtZWRpYXRlLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL2ludGVybU91dC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL0ludGVybVRyYXZlcnNlLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvbG9jYWxpbnRlcm1lZGlhdGUuaCBcCisJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTWFwTG9uZ1Zhcmlh
YmxlTmFtZXMuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9NTWFwLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL05vZGVTZWFyY2guaCBcCisJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Ivb3NpbmNsdWRlLmggXAorCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL29zc291cmNlX3Bvc2l4
LmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
T3V0cHV0RVNTTC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL091dHB1dEVTU0wuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMQmFzZS5oIFwKKwlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMLmNw
cCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0
cHV0R0xTTC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9PdXRwdXRITFNMLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvT3V0cHV0SExTTC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9wYXJzZUNvbnN0LmNwcCBcCisJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmNwcCBcCisJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0
LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Bv
b2xBbGxvYy5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1Bvb2xBbGxvYy5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9QcmFnbWEuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvUXVhbGlmaWVyQWxpdmUuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9RdWFsaWZpZXJBbGl2ZS5oIFwKKwlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZW1vdmVUcmVlLmNw
cCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUmVt
b3ZlVHJlZS5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9SZW5hbWVGdW5jdGlvbi5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9SZXdyaXRlRWxzZUJsb2Nrcy5jcHAgXAorCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Jld3JpdGVFbHNlQmxvY2tzLmggXAor
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1NlYXJjaFN5
bWJvbC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1NlYXJjaFN5bWJvbC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9TaGFkZXJMYW5nLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU2hIYW5kbGUuaCBcCisJU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuY3BwIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJsZS5oIFwK
KwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcv
UmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVy
VGltaW5nLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgXAorCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdFZlcnRl
eFNoYWRlclRpbWluZy5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yRVNTTC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JFU1NMLmggXAorCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JHTFNMLmNwcCBc
CisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvckdMU0wuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvckhMU0wuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9ySExTTC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oIFwKKwlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXRBU1Qu
Y3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9V
bmZvbGRTaG9ydENpcmN1aXRBU1QuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBcCisJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0Lmgg
XAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1VuaWZv
cm0uY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9Vbmlmb3JtLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL3V0aWwuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci91dGlsLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUxpbWl0YXRpb25zLmggXAor
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxl
SW5mby5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1ZhcmlhYmxlSW5mby5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9WYXJpYWJsZVBhY2tlci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlUGFja2VyLmggXAorCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZlcnNpb25HTFNMLmNwcCBc
CisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmVyc2lv
bkdMU0wuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9EaWFnbm9zdGljc0Jhc2UuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpYWdub3N0aWNzQmFzZS5oIFwKIAlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNl
LmNwcCBcCkBAIC0xMjEsNDMgKzE2MSw1IEBAIGxpYkFOR0xFX2xhX1NPVVJDRVMgPSBcCiAJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbi5oIFwK
IAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2Vu
aXplci5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvVG9rZW5pemVyLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9RdWFsaWZpZXJBbGl2ZS5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9RdWFsaWZpZXJBbGl2ZS5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvUmVtb3ZlVHJlZS5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9SZW1vdmVUcmVlLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9SZW5hbWVGdW5jdGlvbi5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvU2VhcmNoU3ltYm9sLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1NlYXJjaFN5bWJvbC5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvU2hhZGVyTGFuZy5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9TaEhhbmRsZS5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3lt
Ym9sVGFibGUuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3lt
Ym9sVGFibGUuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWlu
Zy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgg
XAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RW
ZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggXAotCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5jcHAgXAotCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5oIFwKLQlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3BwIFwKLQlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuaCBcCi0JU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcCBcCi0J
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmggXAot
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UeXBlcy5oIFwKLQlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcCBc
Ci0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3Vp
dEFTVC5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hv
cnRDaXJjdWl0LmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Vu
Zm9sZFNob3J0Q2lyY3VpdC5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvVW5pZm9ybS5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9V
bmlmb3JtLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci91dGlsLmNw
cCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3V0aWwuaCBcCi0JU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3Bw
IFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0
aW9ucy5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVJ
bmZvLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxl
SW5mby5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVQ
YWNrZXIuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFi
bGVQYWNrZXIuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZlcnNp
b25HTFNMLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZlcnNp
b25HTFNMLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0eS9jb21w
aWxlci9BcnJheUJvdW5kc0NsYW1wZXIuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvdGhpcmRfcGFydHkvY29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmgKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCmluZGV4
IDQwZDJkMjY0MDQ4MTM3MGVkOWI2MDMwYjAyZjg1NjAzYTU5ODYzZjIuLjJlMWRjZjMwMWVkMjhm
YjM0ZDM5NGJkMTFkZDgyZTUzNzk2OWNjNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaApAQCAtMTg0LDggKzE4NCw4IEBA
IHR5cGVkZWYgZW51bSB7CiAgIC8vIFRoaXMgZmxhZyBsaW1pdHMgdGhlIGRlcHRoIG9mIHRoZSBj
YWxsIHN0YWNrLgogICBTSF9MSU1JVF9DQUxMX1NUQUNLX0RFUFRIID0gMHg0MDAwLAogCi0gIC8v
IFRoaXMgZmxhZyBpbml0aWFsaXplcyBnbF9Qb3NpdGlvbiB0byB2ZWM0KDAuMCwgMC4wLCAwLjAs
IDEuMCkgYXQKLSAgLy8gdGhlIGJlZ2lubmluZyBvZiB0aGUgdmVydGV4IHNoYWRlciwgYW5kIGhh
cyBubyBlZmZlY3QgaW4gdGhlCisgIC8vIFRoaXMgZmxhZyBpbml0aWFsaXplcyBnbF9Qb3NpdGlv
biB0byB2ZWM0KDAsMCwwLDApIGF0IHRoZQorICAvLyBiZWdpbm5pbmcgb2YgdGhlIHZlcnRleCBz
aGFkZXIncyBtYWluKCksIGFuZCBoYXMgbm8gZWZmZWN0IGluIHRoZQogICAvLyBmcmFnbWVudCBz
aGFkZXIuIEl0IGlzIGludGVuZGVkIGFzIGEgd29ya2Fyb3VuZCBmb3IgZHJpdmVycyB3aGljaAog
ICAvLyBpbmNvcnJlY3RseSBmYWlsIHRvIGxpbmsgcHJvZ3JhbXMgaWYgZ2xfUG9zaXRpb24gaXMg
bm90IHdyaXR0ZW4uCiAgIFNIX0lOSVRfR0xfUE9TSVRJT04gPSAweDgwMDAsCkBAIC0xOTYsNiAr
MTk2LDEyIEBAIHR5cGVkZWYgZW51bSB7CiAgIC8vIFRoaXMgaXMgdG8gd29yayBhcm91bmQgYSBN
YWNPU1ggZHJpdmVyIGJ1ZyB0aGF0IHxifCBpcyBleGVjdXRlZAogICAvLyBpbmRlcGVuZGVudCBv
ZiB8YXwncyB2YWx1ZS4KICAgU0hfVU5GT0xEX1NIT1JUX0NJUkNVSVQgPSAweDEwMDAwLAorCisg
IC8vIFRoaXMgZmxhZyBpbml0aWFsaXplcyB2YXJ5aW5ncyB3aXRob3V0IHN0YXRpYyB1c2UgaW4g
dmVydGV4IHNoYWRlcgorICAvLyBhdCB0aGUgYmVnaW5uaW5nIG9mIG1haW4oKSwgYW5kIGhhcyBu
byBlZmZlY3RzIGluIHRoZSBmcmFnbWVudCBzaGFkZXIuCisgIC8vIEl0IGlzIGludGVuZGVkIGFz
IGEgd29ya2Fyb3VuZCBmb3IgZHJpdmVycyB3aGljaCBpbmNvcnJlY3RseSBvcHRpbWl6ZQorICAv
LyBvdXQgc3VjaCB2YXJ5aW5ncyBhbmQgY2F1c2UgYSBsaW5rIGZhaWx1cmUuCisgIFNIX0lOSVRf
VkFSWUlOR1NfV0lUSE9VVF9TVEFUSUNfVVNFID0gMHgyMDAwMCwKIH0gU2hDb21waWxlT3B0aW9u
czsKIAogLy8gRGVmaW5lcyBhbHRlcm5hdGUgc3RyYXRlZ2llcyBmb3IgaW1wbGVtZW50aW5nIGFy
cmF5IGluZGV4IGNsYW1waW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
aW5jbHVkZS9LSFIva2hycGxhdGZvcm0uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1
ZGUvS0hSL2tocnBsYXRmb3JtLmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9SZWZDb3VudE9iamVj
dC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1JlZkNvdW50T2JqZWN0
LmNwcAppbmRleCAwMzY0YWRmMmNkNTUxNTg3MDQyNWIwMGRhY2RkOTg3OGZkOWFmODQ1Li5jMWVm
OTBjZGNjYzI2MDk1ZmZlNTE4MzAzMTZhMTgyZGYxMjZmZTc2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1JlZkNvdW50T2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1JlZkNvdW50T2JqZWN0LmNwcApAQCAtMSw0
ICsxLDMgQEAKLSNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KIC8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tbW9uL2FuZ2xldXRpbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21t
b24vYW5nbGV1dGlscy5oCmluZGV4IDk3NjE1NjdmYjI3NDk3NWY0NGM1NDE5MGIxMTc0OWVjMzcx
MTZkYzYuLjc3MjNmMGZiNzI3MjM2MjE5OGM0MjAyMTQ1NGUyNmIzMGJhNTI3ZjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCkBAIC00Miw2
ICs0MiwyMCBAQCB2b2lkIFNhZmVSZWxlYXNlKFQmIHJlc291cmNlKQogICAgIH0KIH0KIAordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+Cit2b2lkIFNhZmVEZWxldGUoVComIHJlc291cmNlKQoreworICAg
IGRlbGV0ZSByZXNvdXJjZTsKKyAgICByZXNvdXJjZSA9IE5VTEw7Cit9CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPgordm9pZCBTYWZlRGVsZXRlQXJyYXkoVComIHJlc291cmNlKQoreworICAgIGRl
bGV0ZVtdIHJlc291cmNlOworICAgIHJlc291cmNlID0gTlVMTDsKK30KKwogI2lmIGRlZmluZWQo
X01TQ19WRVIpCiAjZGVmaW5lIHNucHJpbnRmIF9zbnByaW50ZgogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuY3BwCmluZGV4IDIzMzM3NDA1ZWQxNmNh
OWZkMDVkZDc4MjI5NDJkZjVmMzA2NTUwODUuLjA1ZDNkYzYyYWQ0OTYxMDAwMTI1OWI5YjhiYTZl
MzFkYzk5YTA3MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21t
b24vZGVidWcuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVi
dWcuY3BwCkBAIC03LDE3ICs3LDIzIEBACiAvLyBkZWJ1Zy5jcHA6IERlYnVnZ2luZyB1dGlsaXRp
ZXMuCiAKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLSNpbmNsdWRlICJjb21tb24vc3lzdGVt
LmgiCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9QRVJG
KQogI2luY2x1ZGUgPGQzZDkuaD4KKyNlbmRpZgogCiBuYW1lc3BhY2UgZ2wKIHsKLQorI2lmIGRl
ZmluZWQoQU5HTEVfRU5BQkxFX1BFUkYpCiB0eXBlZGVmIHZvaWQgKFdJTkFQSSAqUGVyZk91dHB1
dEZ1bmN0aW9uKShEM0RDT0xPUiwgTFBDV1NUUik7CisjZWxzZQordHlwZWRlZiB2b2lkICgqUGVy
Zk91dHB1dEZ1bmN0aW9uKSh1bnNpZ25lZCBpbnQsIGNvbnN0IHdjaGFyX3QqKTsKKyNlbmRpZgog
CiBzdGF0aWMgdm9pZCBvdXRwdXQoYm9vbCB0cmFjZUZpbGVEZWJ1Z09ubHksIFBlcmZPdXRwdXRG
dW5jdGlvbiBwZXJmRnVuYywgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhcmFyZykKIHsK
LSNpZiAhZGVmaW5lZChBTkdMRV9ESVNBQkxFX1BFUkYpCisjaWYgZGVmaW5lZChBTkdMRV9FTkFC
TEVfUEVSRikKICAgICBpZiAocGVyZkFjdGl2ZSgpKQogICAgIHsKICAgICAgICAgY2hhciBtZXNz
YWdlWzMyNzY4XTsKQEAgLTM3LDE1ICs0MywxNSBAQCBzdGF0aWMgdm9pZCBvdXRwdXQoYm9vbCB0
cmFjZUZpbGVEZWJ1Z09ubHksIFBlcmZPdXRwdXRGdW5jdGlvbiBwZXJmRnVuYywgY29uc3QgYwog
CiAgICAgICAgIHBlcmZGdW5jKDAsIHdpZGVNZXNzYWdlKTsKICAgICB9Ci0jZW5kaWYKKyNlbmRp
ZiAvLyBBTkdMRV9FTkFCTEVfUEVSRgogCi0jaWYgIWRlZmluZWQoQU5HTEVfRElTQUJMRV9UUkFD
RSkKKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9UUkFDRSkKICNpZiBkZWZpbmVkKE5ERUJVRykK
ICAgICBpZiAodHJhY2VGaWxlRGVidWdPbmx5KQogICAgIHsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSNlbmRpZgorI2VuZGlmIC8vIE5ERUJVRwogCiAgICAgRklMRSogZmlsZSA9IGZvcGVuKFRS
QUNFX09VVFBVVF9GSUxFLCAiYSIpOwogICAgIGlmIChmaWxlKQpAQCAtNTMsNTAgKzU5LDUwIEBA
IHN0YXRpYyB2b2lkIG91dHB1dChib29sIHRyYWNlRmlsZURlYnVnT25seSwgUGVyZk91dHB1dEZ1
bmN0aW9uIHBlcmZGdW5jLCBjb25zdCBjCiAgICAgICAgIHZmcHJpbnRmKGZpbGUsIGZvcm1hdCwg
dmFyYXJnKTsKICAgICAgICAgZmNsb3NlKGZpbGUpOwogICAgIH0KLSNlbmRpZgorI2VuZGlmIC8v
IEFOR0xFX0VOQUJMRV9UUkFDRQogfQogCiB2b2lkIHRyYWNlKGJvb2wgdHJhY2VGaWxlRGVidWdP
bmx5LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIHsKICAgICB2YV9saXN0IHZhcmFyZzsKICAg
ICB2YV9zdGFydCh2YXJhcmcsIGZvcm1hdCk7Ci0jaWYgZGVmaW5lZChBTkdMRV9ESVNBQkxFX1BF
UkYpCi0gICAgb3V0cHV0KHRyYWNlRmlsZURlYnVnT25seSwgTlVMTCwgZm9ybWF0LCB2YXJhcmcp
OwotI2Vsc2UKKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9QRVJGKQogICAgIG91dHB1dCh0cmFj
ZUZpbGVEZWJ1Z09ubHksIEQzRFBFUkZfU2V0TWFya2VyLCBmb3JtYXQsIHZhcmFyZyk7CisjZWxz
ZQorICAgIG91dHB1dCh0cmFjZUZpbGVEZWJ1Z09ubHksIE5VTEwsIGZvcm1hdCwgdmFyYXJnKTsK
ICNlbmRpZgogICAgIHZhX2VuZCh2YXJhcmcpOwogfQogCiBib29sIHBlcmZBY3RpdmUoKQogewot
I2lmIGRlZmluZWQoQU5HTEVfRElTQUJMRV9QRVJGKQotICAgIHJldHVybiBmYWxzZTsKLSNlbHNl
CisjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfUEVSRikKICAgICBzdGF0aWMgYm9vbCBhY3RpdmUg
PSBEM0RQRVJGX0dldFN0YXR1cygpICE9IDA7CiAgICAgcmV0dXJuIGFjdGl2ZTsKKyNlbHNlCisg
ICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiB9CiAKIFNjb3BlZFBlcmZFdmVudEhlbHBlcjo6U2Nv
cGVkUGVyZkV2ZW50SGVscGVyKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKQogewotI2lmICFkZWZp
bmVkKEFOR0xFX0RJU0FCTEVfUEVSRikKLSNpZiBkZWZpbmVkKEFOR0xFX0RJU0FCTEVfVFJBQ0Up
CisjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfUEVSRikKKyNpZiAhZGVmaW5lZChBTkdMRV9FTkFC
TEVfVFJBQ0UpCiAgICAgaWYgKCFwZXJmQWN0aXZlKCkpCiAgICAgewogICAgICAgICByZXR1cm47
CiAgICAgfQotI2VuZGlmCisjZW5kaWYgLy8gIUFOR0xFX0VOQUJMRV9UUkFDRQogICAgIHZhX2xp
c3QgdmFyYXJnOwogICAgIHZhX3N0YXJ0KHZhcmFyZywgZm9ybWF0KTsKICAgICBvdXRwdXQodHJ1
ZSwgcmVpbnRlcnByZXRfY2FzdDxQZXJmT3V0cHV0RnVuY3Rpb24+KEQzRFBFUkZfQmVnaW5FdmVu
dCksIGZvcm1hdCwgdmFyYXJnKTsKICAgICB2YV9lbmQodmFyYXJnKTsKLSNlbmRpZgorI2VuZGlm
IC8vIEFOR0xFX0VOQUJMRV9QRVJGCiB9CiAKIFNjb3BlZFBlcmZFdmVudEhlbHBlcjo6flNjb3Bl
ZFBlcmZFdmVudEhlbHBlcigpCiB7Ci0jaWYgIWRlZmluZWQoQU5HTEVfRElTQUJMRV9QRVJGKQor
I2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX1BFUkYpCiAgICAgaWYgKHBlcmZBY3RpdmUoKSkKICAg
ICB7CiAgICAgICAgIEQzRFBFUkZfRW5kRXZlbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21tb24vZGVidWcuaAppbmRleCAwNjBiNzI3MmViM2MwMTIxNzUwN2VjMDQ3NjYwYjFm
MWRlMzZlNzg1Li43OTM4NDM4OTVjMGIwOTc4NmJmNTg0MWU0MzIxYTVjYjBkYjNlMjgxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmgKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5oCkBAIC0zOSwzMyArMzks
MzUgQEAgbmFtZXNwYWNlIGdsCiB9CiAKIC8vIEEgbWFjcm8gdG8gb3V0cHV0IGEgdHJhY2Ugb2Yg
YSBmdW5jdGlvbiBjYWxsIGFuZCBpdHMgYXJndW1lbnRzIHRvIHRoZSBkZWJ1Z2dpbmcgbG9nCi0j
aWYgZGVmaW5lZChBTkdMRV9ESVNBQkxFX1RSQUNFKSAmJiBkZWZpbmVkKEFOR0xFX0RJU0FCTEVf
UEVSRikKLSNkZWZpbmUgVFJBQ0UobWVzc2FnZSwgLi4uKSAodm9pZCgwKSkKLSNlbHNlCisjaWYg
ZGVmaW5lZChBTkdMRV9FTkFCTEVfVFJBQ0UpIHx8IGRlZmluZWQoQU5HTEVfRU5BQkxFX1BFUkYp
CiAjZGVmaW5lIFRSQUNFKG1lc3NhZ2UsIC4uLikgZ2w6OnRyYWNlKHRydWUsICJ0cmFjZTogJXMo
JWQpOiAiIG1lc3NhZ2UgIlxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgIyNfX1ZBX0FSR1Nf
XykKKyNlbHNlCisjZGVmaW5lIFRSQUNFKG1lc3NhZ2UsIC4uLikgKHZvaWQoMCkpCiAjZW5kaWYK
IAogLy8gQSBtYWNybyB0byBvdXRwdXQgYSBmdW5jdGlvbiBjYWxsIGFuZCBpdHMgYXJndW1lbnRz
IHRvIHRoZSBkZWJ1Z2dpbmcgbG9nLCB0byBkZW5vdGUgYW4gaXRlbSBpbiBuZWVkIG9mIGZpeGlu
Zy4KLSNpZiBkZWZpbmVkKEFOR0xFX0RJU0FCTEVfVFJBQ0UpICYmIGRlZmluZWQoQU5HTEVfRElT
QUJMRV9QRVJGKQotI2RlZmluZSBGSVhNRShtZXNzYWdlLCAuLi4pICh2b2lkKDApKQotI2Vsc2UK
KyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9UUkFDRSkgfHwgZGVmaW5lZChBTkdMRV9FTkFCTEVf
UEVSRikKICNkZWZpbmUgRklYTUUobWVzc2FnZSwgLi4uKSBnbDo6dHJhY2UoZmFsc2UsICJmaXht
ZTogJXMoJWQpOiAiIG1lc3NhZ2UgIlxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgIyNfX1ZB
X0FSR1NfXykKKyNlbHNlCisjZGVmaW5lIEZJWE1FKG1lc3NhZ2UsIC4uLikgKHZvaWQoMCkpCiAj
ZW5kaWYKIAogLy8gQSBtYWNybyB0byBvdXRwdXQgYSBmdW5jdGlvbiBjYWxsIGFuZCBpdHMgYXJn
dW1lbnRzIHRvIHRoZSBkZWJ1Z2dpbmcgbG9nLCBpbiBjYXNlIG9mIGVycm9yLgotI2lmIGRlZmlu
ZWQoQU5HTEVfRElTQUJMRV9UUkFDRSkgJiYgZGVmaW5lZChBTkdMRV9ESVNBQkxFX1BFUkYpCi0j
ZGVmaW5lIEVSUihtZXNzYWdlLCAuLi4pICh2b2lkKDApKQotI2Vsc2UKKyNpZiBkZWZpbmVkKEFO
R0xFX0VOQUJMRV9UUkFDRSkgfHwgZGVmaW5lZChBTkdMRV9FTkFCTEVfUEVSRikKICNkZWZpbmUg
RVJSKG1lc3NhZ2UsIC4uLikgZ2w6OnRyYWNlKGZhbHNlLCAiZXJyOiAlcyglZCk6ICIgbWVzc2Fn
ZSAiXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCAjI19fVkFfQVJHU19fKQorI2Vsc2UKKyNk
ZWZpbmUgRVJSKG1lc3NhZ2UsIC4uLikgKHZvaWQoMCkpCiAjZW5kaWYKIAogLy8gQSBtYWNybyB0
byBsb2cgYSBwZXJmb3JtYW5jZSBldmVudCBhcm91bmQgYSBzY29wZS4KLSNpZiBkZWZpbmVkKEFO
R0xFX0RJU0FCTEVfVFJBQ0UpICYmIGRlZmluZWQoQU5HTEVfRElTQUJMRV9QRVJGKQotI2RlZmlu
ZSBFVkVOVChtZXNzYWdlLCAuLi4pICh2b2lkKDApKQotI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikK
KyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9UUkFDRSkgfHwgZGVmaW5lZChBTkdMRV9FTkFCTEVf
UEVSRikKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQogI2RlZmluZSBFVkVOVChtZXNzYWdlLCAuLi4p
IGdsOjpTY29wZWRQZXJmRXZlbnRIZWxwZXIgc2NvcGVkUGVyZkV2ZW50SGVscGVyICMjIF9fTElO
RV9fKF9fRlVOQ1RJT05fXyBtZXNzYWdlICJcbiIsIF9fVkFfQVJHU19fKTsKICNlbHNlCiAjZGVm
aW5lIEVWRU5UKG1lc3NhZ2UsIC4uLikgZ2w6OlNjb3BlZFBlcmZFdmVudEhlbHBlciBzY29wZWRQ
ZXJmRXZlbnRIZWxwZXIobWVzc2FnZSAiXG4iLCAjI19fVkFfQVJHU19fKTsKKyNlbmRpZiAvLyBf
TVNDX1ZFUgorI2Vsc2UKKyNkZWZpbmUgRVZFTlQobWVzc2FnZSwgLi4uKSAodm9pZCgwKSkKICNl
bmRpZgogCiAvLyBBIG1hY3JvIGFzc2VydGluZyBhIGNvbmRpdGlvbiBhbmQgb3V0cHV0dGluZyBm
YWlsdXJlcyB0byB0aGUgZGVidWcgbG9nCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tbW9uL2V2ZW50X3RyYWNlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tbW9uL2V2ZW50X3RyYWNlci5jcHAKaW5kZXggOTZjYmIwMTA2MTRjZTk2YzdmNTBh
YjZmMDNhY2NiYmZmMjVhNTM5Yy4uMTQyMzczZDEzZjI0OGI3MDRhYzQ4ZjcwZTFiZjU2ZDZjM2U4
MDAwZSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9ldmVu
dF90cmFjZXIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZXZl
bnRfdHJhY2VyLmNwcApAQCAtMTQsNyArMTQsNyBAQCBBZGRUcmFjZUV2ZW50RnVuYyBnX2FkZFRy
YWNlRXZlbnQ7CiAKIGV4dGVybiAiQyIgewogCi12b2lkIF9fc3RkY2FsbCBTZXRUcmFjZUZ1bmN0
aW9uUG9pbnRlcnMoR2V0Q2F0ZWdvcnlFbmFibGVkRmxhZ0Z1bmMgZ2V0Q2F0ZWdvcnlFbmFibGVk
RmxhZywKK3ZvaWQgVFJBQ0VfRU5UUlkgU2V0VHJhY2VGdW5jdGlvblBvaW50ZXJzKEdldENhdGVn
b3J5RW5hYmxlZEZsYWdGdW5jIGdldENhdGVnb3J5RW5hYmxlZEZsYWcsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkVHJhY2VFdmVudEZ1bmMgYWRkVHJhY2VFdmVu
dCkKIHsKICAgICBnbDo6Z19nZXRDYXRlZ29yeUVuYWJsZWRGbGFnID0gZ2V0Q2F0ZWdvcnlFbmFi
bGVkRmxhZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24v
ZXZlbnRfdHJhY2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2V2ZW50
X3RyYWNlci5oCmluZGV4IGFlMzk3ZTdkYjk5YWFiZTQzYThhZTVkZTcwOWM1Y2Y5ZWNkMmFmMTgu
LjE0YjdiMjk4ZmQ4NDdjZGJhNTIxNmMyNDNkYTc1YWJiMzkzMTA1NWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZXZlbnRfdHJhY2VyLmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9ldmVudF90cmFjZXIuaApAQCAtNSw2ICs1
LDE0IEBACiAjaWZuZGVmIENPTU1PTl9FVkVOVF9UUkFDRVJfSF8KICNkZWZpbmUgQ09NTU9OX0VW
RU5UX1RSQUNFUl9IXwogCisjaWYgIWRlZmluZWQoVFJBQ0VfRU5UUlkpCisjaWYgZGVmaW5lZChf
V0lOMzIpCisjZGVmaW5lIFRSQUNFX0VOVFJZIF9fc3RkY2FsbAorI2Vsc2UKKyNkZWZpbmUgVFJB
Q0VfRU5UUlkKKyNlbmRpZiAvLyAvLyBfV0lOMzIKKyNlbmRpZiAvL1RSQUNFX0VOVFJZCisKIGV4
dGVybiAiQyIgewogCiB0eXBlZGVmIGNvbnN0IHVuc2lnbmVkIGNoYXIqICgqR2V0Q2F0ZWdvcnlF
bmFibGVkRmxhZ0Z1bmMpKGNvbnN0IGNoYXIqIG5hbWUpOwpAQCAtMTQsOCArMjIsOCBAQCB0eXBl
ZGVmIHZvaWQgKCpBZGRUcmFjZUV2ZW50RnVuYykoY2hhciBwaGFzZSwgY29uc3QgdW5zaWduZWQg
Y2hhciogY2F0ZWdvcnlHcm91cAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGNoYXIgZmxhZ3MpOwogCiAvLyBleHRlcm4gIkMiIHNvIHRoYXQgaXQgaGFzIGEgcmVh
c29uYWJsZSBuYW1lIGZvciBHZXRQcm9jQWRkcmVzcy4KLXZvaWQgX19zdGRjYWxsIFNldFRyYWNl
RnVuY3Rpb25Qb2ludGVycyhHZXRDYXRlZ29yeUVuYWJsZWRGbGFnRnVuYyBnZXRfY2F0ZWdvcnlf
ZW5hYmxlZF9mbGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFk
ZFRyYWNlRXZlbnRGdW5jIGFkZF90cmFjZV9ldmVudF9mdW5jKTsKK3ZvaWQgVFJBQ0VfRU5UUlkg
U2V0VHJhY2VGdW5jdGlvblBvaW50ZXJzKEdldENhdGVnb3J5RW5hYmxlZEZsYWdGdW5jIGdldF9j
YXRlZ29yeV9lbmFibGVkX2ZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBZGRUcmFjZUV2ZW50RnVuYyBhZGRfdHJhY2VfZXZlbnRfZnVuYyk7CiAKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3ZlcnNpb24uaAppbmRleCA5ZjIy
MWYzYWNjMWYyYWUzOTBlNzZjODMyZDkyNTAxZDNhYTg3NDdiLi5mNmFlMTlmNTQxYzI2MTExYmJk
ZTZmMzEzNzg4YjliYmRmOGY0YTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tbW9uL3ZlcnNpb24uaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tbW9uL3ZlcnNpb24uaApAQCAtMSwxMiArMSwxMiBAQAotI2RlZmluZSBNQUpPUl9WRVJTSU9O
IDEKLSNkZWZpbmUgTUlOT1JfVkVSU0lPTiAyCi0jZGVmaW5lIEJVSUxEX1ZFUlNJT04gMAotI2Rl
ZmluZSBCVUlMRF9SRVZJU0lPTiAyNDUwCisjaW5jbHVkZSAiY29tbWl0LmgiCiAKLSNkZWZpbmUg
U1RSSU5HSUZZKHgpICN4Ci0jZGVmaW5lIE1BQ1JPX1NUUklOR0lGWSh4KSBTVFJJTkdJRlkoeCkK
KyNkZWZpbmUgQU5HTEVfTUFKT1JfVkVSU0lPTiAxCisjZGVmaW5lIEFOR0xFX01JTk9SX1ZFUlNJ
T04gMwogCi0jZGVmaW5lIFJFVklTSU9OX1NUUklORyBNQUNST19TVFJJTkdJRlkoQlVJTERfUkVW
SVNJT04pCi0jZGVmaW5lIFZFUlNJT05fU1RSSU5HIE1BQ1JPX1NUUklOR0lGWShNQUpPUl9WRVJT
SU9OKSAiLiIgTUFDUk9fU1RSSU5HSUZZKE1JTk9SX1ZFUlNJT04pICIuIiBNQUNST19TVFJJTkdJ
RlkoQlVJTERfVkVSU0lPTikgIi4iIE1BQ1JPX1NUUklOR0lGWShCVUlMRF9SRVZJU0lPTikKKyNk
ZWZpbmUgQU5HTEVfU1RSSU5HSUZZKHgpICAgICAgICN4CisjZGVmaW5lIEFOR0xFX01BQ1JPX1NU
UklOR0lGWSh4KSBBTkdMRV9TVFJJTkdJRlkoeCkKIAotI2RlZmluZSBWRVJTSU9OX0RXT1JEICgo
TUFKT1JfVkVSU0lPTiA8PCAyNCkgfCAoTUlOT1JfVkVSU0lPTiA8PCAxNikgfCBCVUlMRF9SRVZJ
U0lPTikKKyNkZWZpbmUgQU5HTEVfVkVSU0lPTl9TVFJJTkcgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICBBTkdMRV9NQUNST19TVFJJTkdJRlkoQU5HTEVfTUFKT1JfVkVSU0lPTikgIi4iIFwK
KyAgICBBTkdMRV9NQUNST19TVFJJTkdJRlkoQU5HTEVfTUlOT1JfVkVSU0lPTikgIi4iIFwKKyAg
ICBBTkdMRV9DT01NSVRfSEFTSApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyLzY0Yml0LWxleGVyLXNhZmV0eS5wYXRjaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci82NGJpdC1sZXhlci1zYWZldHkucGF0Y2gKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDdhZjkxZjU3NjUzNDMzN2FmZjZmZjdkNmRmNDdhYmNkZmM2YzZk
MWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyLzY0Yml0LWxleGVyLXNhZmV0eS5wYXRjaAor
KysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi0tLS0gYS9zcmMvY29tcGlsZXIvZ2xzbGFu
Z19sZXguY3BwCi0rKysgYi9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwCi1AQCAtNjgsNiAr
NjgsNyBAQCB0eXBlZGVmIGludDE2X3QgZmxleF9pbnQxNl90OwotIHR5cGVkZWYgdWludDE2X3Qg
ZmxleF91aW50MTZfdDsKLSB0eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90OwotIHR5cGVkZWYg
dWludDMyX3QgZmxleF91aW50MzJfdDsKLSt0eXBlZGVmIHVpbnQ2NF90IGZsZXhfdWludDY0X3Q7
Ci0gI2Vsc2UKLSB0eXBlZGVmIHNpZ25lZCBjaGFyIGZsZXhfaW50OF90OwotIHR5cGVkZWYgc2hv
cnQgaW50IGZsZXhfaW50MTZfdDsKLUBAIC0xOTEsNiArMTkyLDExIEBAIHR5cGVkZWYgdm9pZCog
eXlzY2FuX3Q7Ci0gdHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RB
VEU7Ci0gI2VuZGlmCi0gCi0rI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAotKyNkZWZpbmUg
WVlfVFlQRURFRl9ZWV9TSVpFX1QKLSt0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7Ci0rI2VuZGlm
Ci0rCi0gI2RlZmluZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU4gMAotICNkZWZpbmUgRU9CX0FDVF9F
TkRfT0ZfRklMRSAxCi0gI2RlZmluZSBFT0JfQUNUX0xBU1RfTUFUQ0ggMgotQEAgLTIwNCw3ICsy
MTAsNyBAQCB0eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFURTsK
LSAgICAgICovCi0gICAgICNkZWZpbmUgIFlZX0xFU1NfTElORU5PKG4pIFwKLSAgICAgICAgICAg
ICBkbyB7IFwKLS0gICAgICAgICAgICAgICAgaW50IHl5bDtcCi0rICAgICAgICAgICAgICAgIHl5
X3NpemVfdCB5eWw7XAotICAgICAgICAgICAgICAgICBmb3IgKCB5eWwgPSBuOyB5eWwgPCB5eWxl
bmc7ICsreXlsIClcCi0gICAgICAgICAgICAgICAgICAgICBpZiAoIHl5dGV4dFt5eWxdID09ICdc
bicgKVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAtLXl5bGluZW5vO1wKLUBAIC0yMjYsMTEg
KzIzMiw2IEBAIHR5cGVkZWYgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRF
OwotIAotICNkZWZpbmUgdW5wdXQoYykgeXl1bnB1dCggYywgeXlnLT55eXRleHRfcHRyICwgeXlz
Y2FubmVyICkKLSAKLS0jaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCi0tI2RlZmluZSBZWV9U
WVBFREVGX1lZX1NJWkVfVAotLXR5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKLS0jZW5kaWYKLS0K
LSAjaWZuZGVmIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKLSAjZGVmaW5lIFlZX1NUUlVDVF9Z
WV9CVUZGRVJfU1RBVEUKLSBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlCi1AQCAtMjQ4LDcgKzI0OSw3
IEBAIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUKLSAJLyogTnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVh
ZCBpbnRvIHl5X2NoX2J1Ziwgbm90IGluY2x1ZGluZyBFT0IKLSAJICogY2hhcmFjdGVycy4KLSAJ
ICovCi0tCWludCB5eV9uX2NoYXJzOwotKwl5eV9zaXplX3QgeXlfbl9jaGFyczsKLSAKLSAJLyog
V2hldGhlciB3ZSAib3duIiB0aGUgYnVmZmVyIC0gaS5lLiwgd2Uga25vdyB3ZSBjcmVhdGVkIGl0
LAotIAkgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hvdWxkIGZyZWUo
KSBpdCB0bwotQEAgLTMyNyw3ICszMjgsNyBAQCBzdGF0aWMgdm9pZCB5eV9pbml0X2J1ZmZlciAo
WVlfQlVGRkVSX1NUQVRFIGIsRklMRSAqZmlsZSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gCi0g
WVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnVmZmVyIChjaGFyICpiYXNlLHl5X3NpemVfdCBzaXpl
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSBZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9zdHJpbmcg
KHl5Y29uc3QgY2hhciAqeXlfc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLS1ZWV9CVUZGRVJf
U1RBVEUgeXlfc2Nhbl9ieXRlcyAoeXljb25zdCBjaGFyICpieXRlcyxpbnQgbGVuICx5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKLStZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAoeXljb25zdCBj
aGFyICpieXRlcyx5eV9zaXplX3QgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAKLSB2b2lk
ICp5eWFsbG9jICh5eV9zaXplX3QgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotIHZvaWQgKnl5cmVh
bGxvYyAodm9pZCAqLHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci1AQCAtMzc4LDcg
KzM3OSw3IEBAIHN0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIgbXNnW10g
LHl5c2Nhbl90IHl5c2Nhbm5lciApOwotICAqLwotICNkZWZpbmUgWVlfRE9fQkVGT1JFX0FDVElP
TiBcCi0gCXl5Zy0+eXl0ZXh0X3B0ciA9IHl5X2JwOyBcCi0tCXl5bGVuZyA9IChzaXplX3QpICh5
eV9jcCAtIHl5X2JwKTsgXAotKwl5eWxlbmcgPSAoeXlfc2l6ZV90KSAoeXlfY3AgLSB5eV9icCk7
IFwKLSAJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlfY3A7IFwKLSAJKnl5X2NwID0gJ1wwJzsgXAot
IAl5eWctPnl5X2NfYnVmX3AgPSB5eV9jcDsKLUBAIC0xMDM1LDggKzEwMzYsOCBAQCBzdHJ1Y3Qg
eXlndXRzX3QKLSAgICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja19tYXg7IC8qKjwgY2FwYWNpdHkg
b2Ygc3RhY2suICovCi0gICAgIFlZX0JVRkZFUl9TVEFURSAqIHl5X2J1ZmZlcl9zdGFjazsgLyoq
PCBTdGFjayBhcyBhbiBhcnJheS4gKi8KLSAgICAgY2hhciB5eV9ob2xkX2NoYXI7Ci0tICAgIGlu
dCB5eV9uX2NoYXJzOwotLSAgICBpbnQgeXlsZW5nX3I7Ci0rICAgIHl5X3NpemVfdCB5eV9uX2No
YXJzOwotKyAgICB5eV9zaXplX3QgeXlsZW5nX3I7Ci0gICAgIGNoYXIgKnl5X2NfYnVmX3A7Ci0g
ICAgIGludCB5eV9pbml0OwotICAgICBpbnQgeXlfc3RhcnQ7Ci1AQCAtMTA4OSw3ICsxMDkwLDcg
QEAgRklMRSAqeXlnZXRfb3V0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAKLSB2b2lkIHl5c2V0
X291dCAgKEZJTEUgKiBvdXRfc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAKLS1pbnQgeXln
ZXRfbGVuZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0reXlfc2l6ZV90IHl5Z2V0X2xlbmcgKHl5
c2Nhbl90IHl5c2Nhbm5lciApOwotIAotIGNoYXIgKnl5Z2V0X3RleHQgKHl5c2Nhbl90IHl5c2Nh
bm5lciApOwotIAotQEAgLTExNTgsNyArMTE1OSw3IEBAIHN0YXRpYyBpbnQgaW5wdXQgKHl5c2Nh
bl90IHl5c2Nhbm5lciApOwotIAlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNf
aW50ZXJhY3RpdmUgKSBcCi0gCQl7IFwKLSAJCWludCBjID0gJyonOyBcCi0tCQlpbnQgbjsgXAot
KwkJeXlfc2l6ZV90IG47IFwKLSAJCWZvciAoIG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAotIAkJ
CSAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsrbiApIFwKLSAJ
CQlidWZbbl0gPSAoY2hhcikgYzsgXAotQEAgLTEzMTcsNyArMTMxOCw3IEBAIHl5X2ZpbmRfYWN0
aW9uOgotIAotIAkJaWYgKCB5eV9hY3QgIT0gWVlfRU5EX09GX0JVRkZFUiAmJiB5eV9ydWxlX2Nh
bl9tYXRjaF9lb2xbeXlfYWN0XSApCi0gCQkJewotLQkJCWludCB5eWw7Ci0rCQkJeXlfc2l6ZV90
IHl5bDsKLSAJCQlmb3IgKCB5eWwgPSAwOyB5eWwgPCB5eWxlbmc7ICsreXlsICkKLSAJCQkJaWYg
KCB5eXRleHRbeXlsXSA9PSAnXG4nICkKLSAJCQkJCSAgIAotQEAgLTIyMDMsNyArMjIwNCw3IEBA
IHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCi0gCi0g
CWVsc2UKLSAJCXsKLS0JCQlpbnQgbnVtX3RvX3JlYWQgPQotKwkJCXl5X3NpemVfdCBudW1fdG9f
cmVhZCA9Ci0gCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtIG51bWJl
cl90b19tb3ZlIC0gMTsKLSAKLSAJCXdoaWxlICggbnVtX3RvX3JlYWQgPD0gMCApCi1AQCAtMjIx
Nyw3ICsyMjE4LDcgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5
c2Nhbm5lcikKLSAKLSAJCQlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQotIAkJCQl7Ci0tCQkJ
CWludCBuZXdfc2l6ZSA9IGItPnl5X2J1Zl9zaXplICogMjsKLSsJCQkJeXlfc2l6ZV90IG5ld19z
aXplID0gYi0+eXlfYnVmX3NpemUgKiAyOwotIAotIAkJCQlpZiAoIG5ld19zaXplIDw9IDAgKQot
IAkJCQkJYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVmX3NpemUgLyA4OwotQEAgLTIyNDgsNyAr
MjI0OSw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCi0gCi0gCQkvKiBSZWFkIGluIG1vcmUgZGF0YS4gKi8KLSAJCVlZX0lOUFVUKCAoJllZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90b19tb3ZlXSksCi0tCQkJeXln
LT55eV9uX2NoYXJzLCAoc2l6ZV90KSBudW1fdG9fcmVhZCApOwotKwkJCXl5Zy0+eXlfbl9jaGFy
cywgbnVtX3RvX3JlYWQgKTsKLSAKLSAJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9j
aGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKLSAJCX0KLUBAIC0yMzczLDcgKzIzNzQsNyBAQCBzdGF0
aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQotIAotIAkJZWxz
ZQotIAkJCXsgLyogbmVlZCBtb3JlIGlucHV0ICovCi0tCQkJaW50IG9mZnNldCA9IHl5Zy0+eXlf
Y19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cjsKLSsJCQl5eV9zaXplX3Qgb2Zmc2V0ID0geXlnLT55
eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyOwotIAkJCSsreXlnLT55eV9jX2J1Zl9wOwotIAot
IAkJCXN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQotQEAgLTI2NjAs
NyArMjY2MSw3IEBAIHZvaWQgeXlwb3BfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIp
Ci0gICovCi0gc3RhdGljIHZvaWQgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNj
YW5uZXIpCi0gewotLQlpbnQgbnVtX3RvX2FsbG9jOwotKwl5eV9zaXplX3QgbnVtX3RvX2FsbG9j
OwotICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7Ci0gCi0gCWlmICgheXlnLT55eV9idWZmZXJfc3RhY2spIHsKLUBAIC0yNzU4LDEyICsyNzU5
LDExIEBAIFlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICogeXlz
dHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi0gICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5l
ciBvYmplY3QuCi0gICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBv
YmplY3QuCi0gICovCi0tWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNo
YXIgKiB5eWJ5dGVzLCBpbnQgIF95eWJ5dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLStZ
WV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIHl5
X3NpemVfdCAgX3l5Ynl0ZXNfbGVuICwgeXlzY2FuX3QgeXlzY2FubmVyKQotIHsKLSAJWVlfQlVG
RkVSX1NUQVRFIGI7Ci0gCWNoYXIgKmJ1ZjsKLS0JeXlfc2l6ZV90IG47Ci0tCWludCBpOwotKwl5
eV9zaXplX3QgbiwgaTsKLSAgICAgCi0gCS8qIEdldCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBp
bmNsdWRpbmcgc3BhY2UgZm9yIHRyYWlsaW5nIEVPQidzLiAqLwotIAluID0gX3l5Ynl0ZXNfbGVu
ICsgMjsKLUBAIC0yOTEzLDcgKzI5MTMsNyBAQCBGSUxFICp5eWdldF9vdXQgICh5eXNjYW5fdCB5
eXNjYW5uZXIpCi0gLyoqIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50IHRva2VuLgotICAq
IEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICAqLwotLWludCB5eWdldF9s
ZW5nICAoeXlzY2FuX3QgeXlzY2FubmVyKQotK3l5X3NpemVfdCB5eWdldF9sZW5nICAoeXlzY2Fu
X3QgeXlzY2FubmVyKQotIHsKLSAgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOwotICAgICByZXR1cm4geXlsZW5nOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Jhc2VUeXBlcy5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Jhc2VUeXBlcy5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAxNjMxZjRmNzc5ZmE3ZWZhNzkzYmQ2M2FhYTIxY2M1ZmM5MThkZmYwLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CYXNlVHlwZXMuaAorKysgL2Rldi9udWxsCkBAIC0x
LDE0OCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIF9CQVNJQ1RZUEVTX0lO
Q0xVREVEXwotI2RlZmluZSBfQkFTSUNUWVBFU19JTkNMVURFRF8KLQotLy8KLS8vIFByZWNpc2lv
biBxdWFsaWZpZXJzCi0vLwotZW51bSBUUHJlY2lzaW9uCi17Ci0gICAgLy8gVGhlc2UgbmVlZCB0
byBiZSBrZXB0IHNvcnRlZAotICAgIEVicFVuZGVmaW5lZCwKLSAgICBFYnBMb3csCi0gICAgRWJw
TWVkaXVtLAotICAgIEVicEhpZ2gKLX07Ci0KLWlubGluZSBjb25zdCBjaGFyKiBnZXRQcmVjaXNp
b25TdHJpbmcoVFByZWNpc2lvbiBwKQotewotICAgIHN3aXRjaChwKQotICAgIHsKLSAgICBjYXNl
IEVicEhpZ2g6CQlyZXR1cm4gImhpZ2hwIjsJCWJyZWFrOwotICAgIGNhc2UgRWJwTWVkaXVtOgkJ
cmV0dXJuICJtZWRpdW1wIjsJYnJlYWs7Ci0gICAgY2FzZSBFYnBMb3c6CQlyZXR1cm4gImxvd3Ai
OwkJYnJlYWs7Ci0gICAgZGVmYXVsdDoJCQlyZXR1cm4gIm1lZGl1bXAiOyAgIGJyZWFrOyAgIC8v
IFNhZmVzdCBmYWxsYmFjawotICAgIH0KLX0KLQotLy8KLS8vIEJhc2ljIHR5cGUuICBBcnJheXMs
IHZlY3RvcnMsIGV0Yy4sIGFyZSBvcnRob2dvbmFsIHRvIHRoaXMuCi0vLwotZW51bSBUQmFzaWNU
eXBlCi17Ci0gICAgRWJ0Vm9pZCwKLSAgICBFYnRGbG9hdCwKLSAgICBFYnRJbnQsCi0gICAgRWJ0
Qm9vbCwKLSAgICBFYnRHdWFyZFNhbXBsZXJCZWdpbiwgIC8vIG5vbiB0eXBlOiAgc2VlIGltcGxl
bWVudGF0aW9uIG9mIElzU2FtcGxlcigpCi0gICAgRWJ0U2FtcGxlcjJELAotICAgIEVidFNhbXBs
ZXJDdWJlLAotICAgIEVidFNhbXBsZXJFeHRlcm5hbE9FUywgIC8vIE9ubHkgdmFsaWQgaWYgT0VT
X0VHTF9pbWFnZV9leHRlcm5hbCBleGlzdHMuCi0gICAgRWJ0U2FtcGxlcjJEUmVjdCwgICAgICAg
Ly8gT25seSB2YWxpZCBpZiBHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUgZXhpc3RzLgotICAgIEVi
dEd1YXJkU2FtcGxlckVuZCwgICAgLy8gbm9uIHR5cGU6ICBzZWUgaW1wbGVtZW50YXRpb24gb2Yg
SXNTYW1wbGVyKCkKLSAgICBFYnRTdHJ1Y3QsCi0gICAgRWJ0QWRkcmVzcywgICAgICAgICAgICAv
LyBzaG91bGQgYmUgZGVwcmVjYXRlZD8/Ci0gICAgRWJ0SW52YXJpYW50ICAgICAgICAgIC8vIHVz
ZWQgYXMgYSB0eXBlIHdoZW4gcXVhbGlmeWluZyBhIHByZXZpb3VzbHkgZGVjbGFyZWQgdmFyaWFi
bGUgYXMgYmVpbmcgaW52YXJpYW50Ci19OwotCi1pbmxpbmUgY29uc3QgY2hhciogZ2V0QmFzaWNT
dHJpbmcoVEJhc2ljVHlwZSB0KQotewotICAgIHN3aXRjaCAodCkKLSAgICB7Ci0gICAgY2FzZSBF
YnRWb2lkOiAgICAgICAgICAgICAgcmV0dXJuICJ2b2lkIjsgICAgICAgICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRWJ0RmxvYXQ6ICAgICAgICAgICAgIHJldHVybiAiZmxvYXQiOyAgICAgICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEVidEludDogICAgICAgICAgICAgICByZXR1cm4gImludCI7ICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRCb29sOiAgICAgICAgICAgICAgcmV0dXJu
ICJib29sIjsgICAgICAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAg
ICAgIHJldHVybiAic2FtcGxlcjJEIjsgICAgICAgICBicmVhazsKLSAgICBjYXNlIEVidFNhbXBs
ZXJDdWJlOiAgICAgICByZXR1cm4gInNhbXBsZXJDdWJlIjsgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6IHJldHVybiAic2FtcGxlckV4dGVybmFsT0VTIjsgYnJl
YWs7Ci0gICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OiAgICAgcmV0dXJuICJzYW1wbGVyMkRSZWN0
IjsgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0U3RydWN0OiAgICAgICAgICAgIHJldHVybiAic3Ry
dWN0dXJlIjsgICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gInVua25vd24gdHlwZSI7Ci0gICAgfQotfQotCi1pbmxpbmUgYm9vbCBJc1NhbXBsZXIo
VEJhc2ljVHlwZSB0eXBlKQotewotICAgIHJldHVybiB0eXBlID4gRWJ0R3VhcmRTYW1wbGVyQmVn
aW4gJiYgdHlwZSA8IEVidEd1YXJkU2FtcGxlckVuZDsKLX0KLQotLy8KLS8vIFF1YWxpZmllcnMg
YW5kIGJ1aWx0LWlucy4gIFRoZXNlIGFyZSBtYWlubHkgdXNlZCB0byBzZWUgd2hhdCBjYW4gYmUg
cmVhZAotLy8gb3Igd3JpdHRlbiwgYW5kIGJ5IHRoZSBtYWNoaW5lIGRlcGVuZGVudCB0cmFuc2xh
dG9yIHRvIGtub3cgd2hpY2ggcmVnaXN0ZXJzCi0vLyB0byBhbGxvY2F0ZSB2YXJpYWJsZXMgaW4u
ICBTaW5jZSBidWlsdC1pbnMgdGVuZCB0byBnbyB0byBkaWZmZXJlbnQgcmVnaXN0ZXJzCi0vLyB0
aGFuIHZhcnlpbmcgb3IgdW5pZm9ybSwgaXQgbWFrZXMgc2Vuc2UgdGhleSBhcmUgcGVlcnMsIG5v
dCBzdWItY2xhc3Nlcy4KLS8vCi1lbnVtIFRRdWFsaWZpZXIKLXsKLSAgICBFdnFUZW1wb3Jhcnks
ICAgICAvLyBGb3IgdGVtcG9yYXJpZXMgKHdpdGhpbiBhIGZ1bmN0aW9uKSwgcmVhZC93cml0ZQot
ICAgIEV2cUdsb2JhbCwgICAgICAgIC8vIEZvciBnbG9iYWxzIHJlYWQvd3JpdGUKLSAgICBFdnFD
b25zdCwgICAgICAgICAvLyBVc2VyIGRlZmluZWQgY29uc3RhbnRzIGFuZCBub24tb3V0cHV0IHBh
cmFtZXRlcnMgaW4gZnVuY3Rpb25zCi0gICAgRXZxQXR0cmlidXRlLCAgICAgLy8gUmVhZG9ubHkK
LSAgICBFdnFWYXJ5aW5nSW4sICAgICAvLyByZWFkb25seSwgZnJhZ21lbnQgc2hhZGVycyBvbmx5
Ci0gICAgRXZxVmFyeWluZ091dCwgICAgLy8gdmVydGV4IHNoYWRlcnMgb25seSAgcmVhZC93cml0
ZQotICAgIEV2cUludmFyaWFudFZhcnlpbmdJbiwgICAgIC8vIHJlYWRvbmx5LCBmcmFnbWVudCBz
aGFkZXJzIG9ubHkKLSAgICBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCAgICAvLyB2ZXJ0ZXggc2hh
ZGVycyBvbmx5ICByZWFkL3dyaXRlCi0gICAgRXZxVW5pZm9ybSwgICAgICAgLy8gUmVhZG9ubHks
IHZlcnRleCBhbmQgZnJhZ21lbnQKLQotICAgIC8vIHBhcmFtZXRlcnMKLSAgICBFdnFJbiwKLSAg
ICBFdnFPdXQsCi0gICAgRXZxSW5PdXQsCi0gICAgRXZxQ29uc3RSZWFkT25seSwKLQotICAgIC8v
IGJ1aWx0LWlucyB3cml0dGVuIGJ5IHZlcnRleCBzaGFkZXIKLSAgICBFdnFQb3NpdGlvbiwKLSAg
ICBFdnFQb2ludFNpemUsCi0KLSAgICAvLyBidWlsdC1pbnMgcmVhZCBieSBmcmFnbWVudCBzaGFk
ZXIKLSAgICBFdnFGcmFnQ29vcmQsCi0gICAgRXZxRnJvbnRGYWNpbmcsCi0gICAgRXZxUG9pbnRD
b29yZCwKLQotICAgIC8vIGJ1aWx0LWlucyB3cml0dGVuIGJ5IGZyYWdtZW50IHNoYWRlcgotICAg
IEV2cUZyYWdDb2xvciwKLSAgICBFdnFGcmFnRGF0YSwKLSAgICBFdnFGcmFnRGVwdGgsCi0KLSAg
ICAvLyBlbmQgb2YgbGlzdAotICAgIEV2cUxhc3QKLX07Ci0KLS8vCi0vLyBUaGlzIGlzIGp1c3Qg
Zm9yIGRlYnVnIHByaW50IG91dCwgY2FycmllZCBhbG9uZyB3aXRoIHRoZSBkZWZpbml0aW9ucyBh
Ym92ZS4KLS8vCi1pbmxpbmUgY29uc3QgY2hhciogZ2V0UXVhbGlmaWVyU3RyaW5nKFRRdWFsaWZp
ZXIgcSkKLXsKLSAgICBzd2l0Y2gocSkKLSAgICB7Ci0gICAgY2FzZSBFdnFUZW1wb3Jhcnk6ICAg
ICAgcmV0dXJuICJUZW1wb3JhcnkiOyAgICAgIGJyZWFrOwotICAgIGNhc2UgRXZxR2xvYmFsOiAg
ICAgICAgIHJldHVybiAiR2xvYmFsIjsgICAgICAgICBicmVhazsKLSAgICBjYXNlIEV2cUNvbnN0
OiAgICAgICAgICByZXR1cm4gImNvbnN0IjsgICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFD
b25zdFJlYWRPbmx5OiAgcmV0dXJuICJjb25zdCI7ICAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
RXZxQXR0cmlidXRlOiAgICAgIHJldHVybiAiYXR0cmlidXRlIjsgICAgICBicmVhazsKLSAgICBj
YXNlIEV2cVZhcnlpbmdJbjogICAgICByZXR1cm4gInZhcnlpbmciOyAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBFdnFWYXJ5aW5nT3V0OiAgICAgcmV0dXJuICJ2YXJ5aW5nIjsgICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWluZ0luOiByZXR1cm4gImludmFyaWFudCB2YXJ5
aW5nIjsJYnJlYWs7Ci0gICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0OnJldHVybiAiaW52
YXJpYW50IHZhcnlpbmciOwlicmVhazsKLSAgICBjYXNlIEV2cVVuaWZvcm06ICAgICAgICByZXR1
cm4gInVuaWZvcm0iOyAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFJbjogICAgICAgICAgICAg
cmV0dXJuICJpbiI7ICAgICAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXZxT3V0OiAgICAgICAg
ICAgIHJldHVybiAib3V0IjsgICAgICAgICAgICBicmVhazsKLSAgICBjYXNlIEV2cUluT3V0OiAg
ICAgICAgICByZXR1cm4gImlub3V0IjsgICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFQb3Np
dGlvbjogICAgICAgcmV0dXJuICJQb3NpdGlvbiI7ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXZx
UG9pbnRTaXplOiAgICAgIHJldHVybiAiUG9pbnRTaXplIjsgICAgICBicmVhazsKLSAgICBjYXNl
IEV2cUZyYWdDb29yZDogICAgICByZXR1cm4gIkZyYWdDb29yZCI7ICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBFdnFGcm9udEZhY2luZzogICAgcmV0dXJuICJGcm9udEZhY2luZyI7ICAgIGJyZWFrOwot
ICAgIGNhc2UgRXZxRnJhZ0NvbG9yOiAgICAgIHJldHVybiAiRnJhZ0NvbG9yIjsgICAgICBicmVh
azsKLSAgICBjYXNlIEV2cUZyYWdEYXRhOiAgICAgICByZXR1cm4gIkZyYWdEYXRhIjsgICAgICBi
cmVhazsKLSAgICBjYXNlIEV2cUZyYWdEZXB0aDogICAgICByZXR1cm4gIkZyYWdEZXB0aCI7ICAg
ICBicmVhazsKLSAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICByZXR1cm4gInVua25vd24gcXVh
bGlmaWVyIjsKLSAgICB9Ci19Ci0KLSNlbmRpZiAvLyBfQkFTSUNUWVBFU19JTkNMVURFRF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVu
Y3Rpb25FbXVsYXRvci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAxYzRiMjVmMTNmMGM2MmYwZDE0MWM4YzZlNWVmZTljODY0MWJhM2VlLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw0MDYgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVy
L0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmgiCi0KLSNpbmNsdWRlICJjb21waWxlci9TeW1ib2xU
YWJsZS5oIgotCi1uYW1lc3BhY2UgewotCi0vLyB3ZSB1c2UgbWFjcm9zIGhlcmUgaW5zdGVhZCBv
ZiBmdW5jdGlvbiBkZWZpbml0aW9ucyB0byB3b3JrIGFyb3VuZCBtb3JlIEdMU0wKLS8vIGNvbXBp
bGVyIGJ1Z3MsIGluIHBhcnRpY3VsYXIgb24gTlZJRElBIGhhcmR3YXJlIG9uIE1hYyBPU1guIE1h
Y3JvcyBhcmUKLS8vIHByb2JsZW1hdGljIGJlY2F1c2UgaWYgdGhlIGFyZ3VtZW50IGhhcyBzaWRl
LWVmZmVjdHMgdGhleSB3aWxsIGJlIHJlcGVhdGVkbHkKLS8vIGV2YWx1YXRlZC4gVGhpcyBpcyB1
bmxpa2VseSB0byBzaG93IHVwIGluIHJlYWwgc2hhZGVycywgYnV0IGlzIHNvbWV0aGluZyB0bwot
Ly8gY29uc2lkZXIuCi1jb25zdCBjaGFyKiBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhTb3VyY2Vb
XSA9IHsKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgY29zKGZsb2F0KSIsCi0gICAgIiNl
cnJvciBubyBlbXVsYXRpb24gZm9yIGNvcyh2ZWMyKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRp
b24gZm9yIGNvcyh2ZWMzKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGNvcyh2ZWM0
KSIsCi0KLSAgICAiI2RlZmluZSB3ZWJnbF9kaXN0YW5jZV9lbXUoeCwgeSkgKCh4KSA+PSAoeSkg
PyAoeCkgLSAoeSkgOiAoeSkgLSAoeCkpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Ig
ZGlzdGFuY2UodmVjMiwgdmVjMikiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkaXN0
YW5jZSh2ZWMzLCB2ZWMzKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRpc3RhbmNl
KHZlYzQsIHZlYzQpIiwKLQotICAgICIjZGVmaW5lIHdlYmdsX2RvdF9lbXUoeCwgeSkgKCh4KSAq
ICh5KSkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjMiwgdmVjMikiLAot
ICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjMywgdmVjMykiLAotICAgICIjZXJy
b3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjNCwgdmVjNCkiLAotCi0gICAgIiNkZWZpbmUgd2Vi
Z2xfbGVuZ3RoX2VtdSh4KSAoKHgpID49IDAuMCA/ICh4KSA6IC0oeCkpIiwKLSAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3RoKHZlYzIpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlv
biBmb3IgbGVuZ3RoKHZlYzMpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3Ro
KHZlYzQpIiwKLQotICAgICIjZGVmaW5lIHdlYmdsX25vcm1hbGl6ZV9lbXUoeCkgKCh4KSA9PSAw
LjAgPyAwLjAgOiAoKHgpID4gMC4wID8gMS4wIDogLTEuMCkpIiwKLSAgICAiI2Vycm9yIG5vIGVt
dWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzIpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBm
b3Igbm9ybWFsaXplKHZlYzMpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFs
aXplKHZlYzQpIiwKLQotICAgICIjZGVmaW5lIHdlYmdsX3JlZmxlY3RfZW11KEksIE4pICgoSSkg
LSAyLjAgKiAoTikgKiAoSSkgKiAoTikpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Ig
cmVmbGVjdCh2ZWMyLCB2ZWMyKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIHJlZmxl
Y3QodmVjMywgdmVjMykiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciByZWZsZWN0KHZl
YzQsIHZlYzQpIgotfTsKLQotY29uc3QgY2hhcioga0Z1bmN0aW9uRW11bGF0aW9uRnJhZ21lbnRT
b3VyY2VbXSA9IHsKLSAgICAid2ViZ2xfZW11X3ByZWNpc2lvbiBmbG9hdCB3ZWJnbF9jb3NfZW11
KHdlYmdsX2VtdV9wcmVjaXNpb24gZmxvYXQgYSkgeyByZXR1cm4gY29zKGEpOyB9IiwKLSAgICAi
d2ViZ2xfZW11X3ByZWNpc2lvbiB2ZWMyIHdlYmdsX2Nvc19lbXUod2ViZ2xfZW11X3ByZWNpc2lv
biB2ZWMyIGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCi0gICAgIndlYmdsX2VtdV9wcmVjaXNpb24g
dmVjMyB3ZWJnbF9jb3NfZW11KHdlYmdsX2VtdV9wcmVjaXNpb24gdmVjMyBhKSB7IHJldHVybiBj
b3MoYSk7IH0iLAotICAgICJ3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzQgd2ViZ2xfY29zX2VtdSh3
ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzQgYSkgeyByZXR1cm4gY29zKGEpOyB9IiwKLQotICAgICIj
ZGVmaW5lIHdlYmdsX2Rpc3RhbmNlX2VtdSh4LCB5KSAoKHgpID49ICh5KSA/ICh4KSAtICh5KSA6
ICh5KSAtICh4KSkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkaXN0YW5jZSh2ZWMy
LCB2ZWMyKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRpc3RhbmNlKHZlYzMsIHZl
YzMpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UodmVjNCwgdmVjNCki
LAotCi0gICAgIiNkZWZpbmUgd2ViZ2xfZG90X2VtdSh4LCB5KSAoKHgpICogKHkpKSIsCi0gICAg
IiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRvdCh2ZWMyLCB2ZWMyKSIsCi0gICAgIiNlcnJvciBu
byBlbXVsYXRpb24gZm9yIGRvdCh2ZWMzLCB2ZWMzKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRp
b24gZm9yIGRvdCh2ZWM0LCB2ZWM0KSIsCi0KLSAgICAiI2RlZmluZSB3ZWJnbF9sZW5ndGhfZW11
KHgpICgoeCkgPj0gMC4wID8gKHgpIDogLSh4KSkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9u
IGZvciBsZW5ndGgodmVjMikiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBsZW5ndGgo
dmVjMykiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBsZW5ndGgodmVjNCkiLAotCi0g
ICAgIiNkZWZpbmUgd2ViZ2xfbm9ybWFsaXplX2VtdSh4KSAoKHgpID09IDAuMCA/IDAuMCA6ICgo
eCkgPiAwLjAgPyAxLjAgOiAtMS4wKSkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBu
b3JtYWxpemUodmVjMikiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBub3JtYWxpemUo
dmVjMykiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBub3JtYWxpemUodmVjNCkiLAot
Ci0gICAgIiNkZWZpbmUgd2ViZ2xfcmVmbGVjdF9lbXUoSSwgTikgKChJKSAtIDIuMCAqIChOKSAq
IChJKSAqIChOKSkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciByZWZsZWN0KHZlYzIs
IHZlYzIpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgcmVmbGVjdCh2ZWMzLCB2ZWMz
KSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIHJlZmxlY3QodmVjNCwgdmVjNCkiCi19
OwotCi1jb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbXSA9IHsKLSNpZiBk
ZWZpbmVkKF9fQVBQTEVfXykKLSAgICAvLyBXb3JrIGFyb3VuZCBBVEkgZHJpdmVyIGJ1Z3MgaW4g
TWFjLgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MxCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlv
bkNvczIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMwotICAgIGZhbHNlLCAvLyBURnVuY3Rp
b25Db3M0Ci0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRpc3RhbmNlMV8xCi0gICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkRpc3RhbmNlMl8yCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlM18z
Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlNF80Ci0gICAgdHJ1ZSwgIC8vIFRGdW5j
dGlvbkRvdDFfMQotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3QyXzIKLSAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uRG90M18zCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDRfNAotICAgIHRydWUs
ICAvLyBURnVuY3Rpb25MZW5ndGgxCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKLSAg
ICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5n
dGg0Ci0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTEKLSAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uTm9ybWFsaXplMgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUzCi0gICAg
ZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTQKLSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uUmVm
bGVjdDFfMQotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0Ml8yCi0gICAgZmFsc2UsIC8v
IFRGdW5jdGlvblJlZmxlY3QzXzMKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDRfNAot
I2Vsc2UKLSAgICAvLyBXb3JrIGFyb3VuZCBEM0QgZHJpdmVyIGJ1ZyBpbiBXaW4uCi0gICAgZmFs
c2UsIC8vIFRGdW5jdGlvbkNvczEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMgotICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25Db3MzCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczQKLSAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2UxXzEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlz
dGFuY2UyXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2UzXzMKLSAgICBmYWxzZSwg
Ly8gVEZ1bmN0aW9uRGlzdGFuY2U0XzQKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90MV8xCi0g
ICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDJfMgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3Qz
XzMKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90NF80Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlv
bkxlbmd0aDEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMgotICAgIGZhbHNlLCAvLyBU
RnVuY3Rpb25MZW5ndGgzCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDQKLSAgICBmYWxz
ZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMQotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxp
emUyCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTMKLSAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uTm9ybWFsaXplNAotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0MV8xCi0gICAg
ZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QyXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVm
bGVjdDNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0NF80Ci0jZW5kaWYKLSAgICBm
YWxzZSAgLy8gVEZ1bmN0aW9uVW5rbm93bgotfTsKLQotY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVs
YXRpb25GcmFnbWVudE1hc2tbXSA9IHsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLSAgICAvLyBX
b3JrIGFyb3VuZCBBVEkgZHJpdmVyIGJ1Z3MgaW4gTWFjLgotICAgIHRydWUsICAvLyBURnVuY3Rp
b25Db3MxCi0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczIKLSAgICB0cnVlLCAgLy8gVEZ1bmN0
aW9uQ29zMwotICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3M0Ci0gICAgdHJ1ZSwgIC8vIFRGdW5j
dGlvbkRpc3RhbmNlMV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlMl8yCi0gICAg
ZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlM18zCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRp
c3RhbmNlNF80Ci0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRvdDFfMQotICAgIGZhbHNlLCAvLyBU
RnVuY3Rpb25Eb3QyXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90M18zCi0gICAgZmFsc2Us
IC8vIFRGdW5jdGlvbkRvdDRfNAotICAgIHRydWUsICAvLyBURnVuY3Rpb25MZW5ndGgxCi0gICAg
ZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3Ro
MwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0Ci0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlv
bk5vcm1hbGl6ZTEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMgotICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25Ob3JtYWxpemUzCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6
ZTQKLSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uUmVmbGVjdDFfMQotICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25SZWZsZWN0Ml8yCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QzXzMKLSAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDRfNAotI2Vsc2UKLSAgICAvLyBXb3JrIGFyb3VuZCBE
M0QgZHJpdmVyIGJ1ZyBpbiBXaW4uCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczEKLSAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uQ29zMgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MzCi0gICAg
ZmFsc2UsIC8vIFRGdW5jdGlvbkNvczQKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2Ux
XzEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2UyXzIKLSAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uRGlzdGFuY2UzXzMKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2U0XzQKLSAg
ICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90MV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDJf
MgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3QzXzMKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
RG90NF80Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDEKLSAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uTGVuZ3RoMgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgzCi0gICAgZmFsc2Us
IC8vIFRGdW5jdGlvbkxlbmd0aDQKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMQot
ICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUyCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlv
bk5vcm1hbGl6ZTMKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplNAotICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25SZWZsZWN0MV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3Qy
XzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDNfMwotICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25SZWZsZWN0NF80Ci0jZW5kaWYKLSAgICBmYWxzZSAgLy8gVEZ1bmN0aW9uVW5rbm93bgot
fTsKLQotY2xhc3MgQnVpbHRJbkZ1bmN0aW9uRW11bGF0aW9uTWFya2VyIDogcHVibGljIFRJbnRl
cm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdGlvbk1hcmtl
cihCdWlsdEluRnVuY3Rpb25FbXVsYXRvciYgZW11bGF0b3IpCi0gICAgICAgIDogbUVtdWxhdG9y
KGVtdWxhdG9yKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRVbmFyeShW
aXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQotICAgIHsKLSAgICAgICAgaWYgKHZpc2l0
ID09IFByZVZpc2l0KSB7Ci0gICAgICAgICAgICBib29sIG5lZWRUb0VtdWxhdGUgPSBtRW11bGF0
b3IuU2V0RnVuY3Rpb25DYWxsZWQoCi0gICAgICAgICAgICAgICAgbm9kZS0+Z2V0T3AoKSwgbm9k
ZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCkpOwotICAgICAgICAgICAgaWYgKG5lZWRUb0VtdWxh
dGUpCi0gICAgICAgICAgICAgICAgbm9kZS0+c2V0VXNlRW11bGF0ZWRGdW5jdGlvbigpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCB2
aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKLSAgICB7
Ci0gICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkgewotICAgICAgICAgICAgLy8gSGVyZSB3
ZSBoYW5kbGUgYWxsIHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgaW5zdGVhZCBvZiB0aGUgb25lcyB3
ZQotICAgICAgICAgICAgLy8gY3VycmVudGx5IGlkZW50aWZpZWQgYXMgcHJvYmxlbWF0aWMuCi0g
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNl
IEVPcExlc3NUaGFuOgotICAgICAgICAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46Ci0gICAg
ICAgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgotICAgICAgICAgICAgICAgIGNhc2Ug
RU9wR3JlYXRlclRoYW5FcXVhbDoKLSAgICAgICAgICAgICAgICBjYXNlIEVPcFZlY3RvckVxdWFs
OgotICAgICAgICAgICAgICAgIGNhc2UgRU9wVmVjdG9yTm90RXF1YWw6Ci0gICAgICAgICAgICAg
ICAgY2FzZSBFT3BNb2Q6Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BQb3c6Ci0gICAgICAgICAg
ICAgICAgY2FzZSBFT3BBdGFuOgotICAgICAgICAgICAgICAgIGNhc2UgRU9wTWluOgotICAgICAg
ICAgICAgICAgIGNhc2UgRU9wTWF4OgotICAgICAgICAgICAgICAgIGNhc2UgRU9wQ2xhbXA6Ci0g
ICAgICAgICAgICAgICAgY2FzZSBFT3BNaXg6Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BTdGVw
OgotICAgICAgICAgICAgICAgIGNhc2UgRU9wU21vb3RoU3RlcDoKLSAgICAgICAgICAgICAgICBj
YXNlIEVPcERpc3RhbmNlOgotICAgICAgICAgICAgICAgIGNhc2UgRU9wRG90OgotICAgICAgICAg
ICAgICAgIGNhc2UgRU9wQ3Jvc3M6Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BGYWNlRm9yd2Fy
ZDoKLSAgICAgICAgICAgICAgICBjYXNlIEVPcFJlZmxlY3Q6Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBFT3BSZWZyYWN0OgotICAgICAgICAgICAgICAgIGNhc2UgRU9wTXVsOgotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBjb25zdCBUSW50
ZXJtU2VxdWVuY2UmIHNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKLSAgICAgICAgICAg
IC8vIFJpZ2h0IG5vdyB3ZSBvbmx5IGhhbmRsZSBidWlsdC1pbiBmdW5jdGlvbnMgd2l0aCB0d28g
cGFyYW1ldGVycy4KLSAgICAgICAgICAgIGlmIChzZXF1ZW5jZS5zaXplKCkgIT0gMikKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogcGFyYW0x
ID0gc2VxdWVuY2VbMF0tPmdldEFzVHlwZWQoKTsKLSAgICAgICAgICAgIFRJbnRlcm1UeXBlZCog
cGFyYW0yID0gc2VxdWVuY2VbMV0tPmdldEFzVHlwZWQoKTsKLSAgICAgICAgICAgIGlmICghcGFy
YW0xIHx8ICFwYXJhbTIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
ICBib29sIG5lZWRUb0VtdWxhdGUgPSBtRW11bGF0b3IuU2V0RnVuY3Rpb25DYWxsZWQoCi0gICAg
ICAgICAgICAgICAgbm9kZS0+Z2V0T3AoKSwgcGFyYW0xLT5nZXRUeXBlKCksIHBhcmFtMi0+Z2V0
VHlwZSgpKTsKLSAgICAgICAgICAgIGlmIChuZWVkVG9FbXVsYXRlKQotICAgICAgICAgICAgICAg
IG5vZGUtPnNldFVzZUVtdWxhdGVkRnVuY3Rpb24oKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3Im
IG1FbXVsYXRvcjsKLX07Ci0KLX0gIC8vIGFub255bW91cyBuYW1lcHNhY2UKLQotQnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3I6OkJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yKFNoU2hhZGVyVHlwZSBzaGFk
ZXJUeXBlKQotewotICAgIGlmIChzaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikgewot
ICAgICAgICBtRnVuY3Rpb25NYXNrID0ga0Z1bmN0aW9uRW11bGF0aW9uRnJhZ21lbnRNYXNrOwot
ICAgICAgICBtRnVuY3Rpb25Tb3VyY2UgPSBrRnVuY3Rpb25FbXVsYXRpb25GcmFnbWVudFNvdXJj
ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBtRnVuY3Rpb25NYXNrID0ga0Z1bmN0aW9uRW11bGF0
aW9uVmVydGV4TWFzazsKLSAgICAgICAgbUZ1bmN0aW9uU291cmNlID0ga0Z1bmN0aW9uRW11bGF0
aW9uVmVydGV4U291cmNlOwotICAgIH0KLX0KLQotYm9vbCBCdWlsdEluRnVuY3Rpb25FbXVsYXRv
cjo6U2V0RnVuY3Rpb25DYWxsZWQoCi0gICAgVE9wZXJhdG9yIG9wLCBjb25zdCBUVHlwZSYgcGFy
YW0pCi17Ci0gICAgVEJ1aWx0SW5GdW5jdGlvbiBmdW5jdGlvbiA9IElkZW50aWZ5RnVuY3Rpb24o
b3AsIHBhcmFtKTsKLSAgICByZXR1cm4gU2V0RnVuY3Rpb25DYWxsZWQoZnVuY3Rpb24pOwotfQot
Ci1ib29sIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpTZXRGdW5jdGlvbkNhbGxlZCgKLSAgICBU
T3BlcmF0b3Igb3AsIGNvbnN0IFRUeXBlJiBwYXJhbTEsIGNvbnN0IFRUeXBlJiBwYXJhbTIpCi17
Ci0gICAgVEJ1aWx0SW5GdW5jdGlvbiBmdW5jdGlvbiA9IElkZW50aWZ5RnVuY3Rpb24ob3AsIHBh
cmFtMSwgcGFyYW0yKTsKLSAgICByZXR1cm4gU2V0RnVuY3Rpb25DYWxsZWQoZnVuY3Rpb24pOwot
fQotCi1ib29sIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpTZXRGdW5jdGlvbkNhbGxlZCgKLSAg
ICBCdWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6VEJ1aWx0SW5GdW5jdGlvbiBmdW5jdGlvbikgewot
ICAgIGlmIChmdW5jdGlvbiA9PSBURnVuY3Rpb25Vbmtub3duIHx8IG1GdW5jdGlvbk1hc2tbZnVu
Y3Rpb25dID09IGZhbHNlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtRnVuY3Rpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtRnVuY3Rp
b25zW2ldID09IGZ1bmN0aW9uKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAg
IG1GdW5jdGlvbnMucHVzaF9iYWNrKGZ1bmN0aW9uKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBCdWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6T3V0cHV0RW11bGF0ZWRGdW5jdGlvbkRlZmlu
aXRpb24oCi0gICAgVEluZm9TaW5rQmFzZSYgb3V0LCBib29sIHdpdGhQcmVjaXNpb24pIGNvbnN0
Ci17Ci0gICAgaWYgKG1GdW5jdGlvbnMuc2l6ZSgpID09IDApCi0gICAgICAgIHJldHVybjsKLSAg
ICBvdXQgPDwgIi8vIEJFR0lOOiBHZW5lcmF0ZWQgY29kZSBmb3IgYnVpbHQtaW4gZnVuY3Rpb24g
ZW11bGF0aW9uXG5cbiI7Ci0gICAgaWYgKHdpdGhQcmVjaXNpb24pIHsKLSAgICAgICAgb3V0IDw8
ICIjaWYgZGVmaW5lZChHTF9GUkFHTUVOVF9QUkVDSVNJT05fSElHSClcbiIKLSAgICAgICAgICAg
IDw8ICIjZGVmaW5lIHdlYmdsX2VtdV9wcmVjaXNpb24gaGlnaHBcbiIKLSAgICAgICAgICAgIDw8
ICIjZWxzZVxuIgotICAgICAgICAgICAgPDwgIiNkZWZpbmUgd2ViZ2xfZW11X3ByZWNpc2lvbiBt
ZWRpdW1wXG4iCi0gICAgICAgICAgICA8PCAiI2VuZGlmXG5cbiI7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgb3V0IDw8ICIjZGVmaW5lIHdlYmdsX2VtdV9wcmVjaXNpb25cblxuIjsKLSAgICB9Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtRnVuY3Rpb25zLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIG91dCA8PCBtRnVuY3Rpb25Tb3VyY2VbbUZ1bmN0aW9uc1tpXV0gPDwgIlxuXG4iOwotICAg
IH0KLSAgICBvdXQgPDwgIi8vIEVORDogR2VuZXJhdGVkIGNvZGUgZm9yIGJ1aWx0LWluIGZ1bmN0
aW9uIGVtdWxhdGlvblxuXG4iOwotfQotCi1CdWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6VEJ1aWx0
SW5GdW5jdGlvbgotQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OklkZW50aWZ5RnVuY3Rpb24oCi0g
ICAgVE9wZXJhdG9yIG9wLCBjb25zdCBUVHlwZSYgcGFyYW0pCi17Ci0gICAgaWYgKHBhcmFtLmdl
dE5vbWluYWxTaXplKCkgPiA0KQotICAgICAgICByZXR1cm4gVEZ1bmN0aW9uVW5rbm93bjsKLSAg
ICB1bnNpZ25lZCBpbnQgZnVuY3Rpb24gPSBURnVuY3Rpb25Vbmtub3duOwotICAgIHN3aXRjaCAo
b3ApIHsKLSAgICAgICAgY2FzZSBFT3BDb3M6Ci0gICAgICAgICAgICBmdW5jdGlvbiA9IFRGdW5j
dGlvbkNvczE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BMZW5ndGg6Ci0g
ICAgICAgICAgICBmdW5jdGlvbiA9IFRGdW5jdGlvbkxlbmd0aDE7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBFT3BOb3JtYWxpemU6Ci0gICAgICAgICAgICBmdW5jdGlvbiA9IFRG
dW5jdGlvbk5vcm1hbGl6ZTE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoZnVuY3Rpb24gPT0gVEZ1bmN0aW9u
VW5rbm93bikKLSAgICAgICAgcmV0dXJuIFRGdW5jdGlvblVua25vd247Ci0gICAgaWYgKHBhcmFt
LmlzVmVjdG9yKCkpCi0gICAgICAgIGZ1bmN0aW9uICs9IHBhcmFtLmdldE5vbWluYWxTaXplKCkg
LSAxOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUQnVpbHRJbkZ1bmN0aW9uPihmdW5jdGlvbik7
Ci19Ci0KLUJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpUQnVpbHRJbkZ1bmN0aW9uCi1CdWlsdElu
RnVuY3Rpb25FbXVsYXRvcjo6SWRlbnRpZnlGdW5jdGlvbigKLSAgICBUT3BlcmF0b3Igb3AsIGNv
bnN0IFRUeXBlJiBwYXJhbTEsIGNvbnN0IFRUeXBlJiBwYXJhbTIpCi17Ci0gICAgLy8gUmlnaHQg
bm93IGZvciBhbGwgdGhlIGVtdWxhdGVkIGZ1bmN0aW9ucyB3aXRoIHR3byBwYXJhbWV0ZXJzLCB0
aGUgdHdvCi0gICAgLy8gcGFyYW1ldGVycyBoYXZlIHRoZSBzYW1lIHR5cGUuCi0gICAgaWYgKHBh
cmFtMS5pc1ZlY3RvcigpICE9IHBhcmFtMi5pc1ZlY3RvcigpIHx8Ci0gICAgICAgIHBhcmFtMS5n
ZXROb21pbmFsU2l6ZSgpICE9IHBhcmFtMi5nZXROb21pbmFsU2l6ZSgpIHx8Ci0gICAgICAgIHBh
cmFtMS5nZXROb21pbmFsU2l6ZSgpID4gNCkKLSAgICAgICAgcmV0dXJuIFRGdW5jdGlvblVua25v
d247Ci0KLSAgICB1bnNpZ25lZCBpbnQgZnVuY3Rpb24gPSBURnVuY3Rpb25Vbmtub3duOwotICAg
IHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBFT3BEaXN0YW5jZToKLSAgICAgICAgICAgIGZ1
bmN0aW9uID0gVEZ1bmN0aW9uRGlzdGFuY2UxXzE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBFT3BEb3Q6Ci0gICAgICAgICAgICBmdW5jdGlvbiA9IFRGdW5jdGlvbkRvdDFfMTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFJlZmxlY3Q6Ci0gICAgICAgICAg
ICBmdW5jdGlvbiA9IFRGdW5jdGlvblJlZmxlY3QxXzE7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoZnVuY3Rp
b24gPT0gVEZ1bmN0aW9uVW5rbm93bikKLSAgICAgICAgcmV0dXJuIFRGdW5jdGlvblVua25vd247
Ci0gICAgaWYgKHBhcmFtMS5pc1ZlY3RvcigpKQotICAgICAgICBmdW5jdGlvbiArPSBwYXJhbTEu
Z2V0Tm9taW5hbFNpemUoKSAtIDE7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFRCdWlsdEluRnVu
Y3Rpb24+KGZ1bmN0aW9uKTsKLX0KLQotdm9pZCBCdWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6TWFy
a0J1aWx0SW5GdW5jdGlvbnNGb3JFbXVsYXRpb24oCi0gICAgVEludGVybU5vZGUqIHJvb3QpCi17
Ci0gICAgQVNTRVJUKHJvb3QpOwotCi0gICAgQnVpbHRJbkZ1bmN0aW9uRW11bGF0aW9uTWFya2Vy
IG1hcmtlcigqdGhpcyk7Ci0gICAgcm9vdC0+dHJhdmVyc2UoJm1hcmtlcik7Ci19Ci0KLXZvaWQg
QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OkNsZWFudXAoKQotewotICAgIG1GdW5jdGlvbnMuY2xl
YXIoKTsKLX0KLQotLy9zdGF0aWMKLVRTdHJpbmcgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6Okdl
dEVtdWxhdGVkRnVuY3Rpb25OYW1lKAotICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUpCi17Ci0gICAg
QVNTRVJUKG5hbWVbbmFtZS5sZW5ndGgoKSAtIDFdID09ICcoJyk7Ci0gICAgcmV0dXJuICJ3ZWJn
bF8iICsgbmFtZS5zdWJzdHIoMCwgbmFtZS5sZW5ndGgoKSAtIDEpICsgIl9lbXUoIjsKLX0KLQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0J1aWx0SW5G
dW5jdGlvbkVtdWxhdG9yLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MGQ5MDRmNDFkMDkxNmNmZjllOGQwYzA1ODlmOWVkODlkMGVjMDM4Mi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaAorKysgL2Rldi9udWxsCkBAIC0x
LDkzICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTElFUl9CVUlMVF9JTl9G
VU5DVElPTl9FTVVMQVRPUl9IXwotI2RlZmluZSBDT01QSUxJRVJfQlVJTFRfSU5fRlVOQ1RJT05f
RU1VTEFUT1JfSF8KLQotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgotCi0jaW5jbHVk
ZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKLSNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUu
aCIKLQotLy8KLS8vIFRoaXMgY2xhc3MgZGVjaWRlcyB3aGljaCBidWlsdC1pbiBmdW5jdGlvbnMg
bmVlZCB0byBiZSByZXBsYWNlZCB3aXRoIHRoZQotLy8gZW11bGF0ZWQgb25lcy4KLS8vIEl0J3Mg
b25seSBhIHdvcmthcm91bmQgZm9yIE9wZW5HTCBkcml2ZXIgYnVncywgYW5kIGlzbid0IG5lZWRl
ZCBpbiBnZW5lcmFsLgotLy8KLWNsYXNzIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yIHsKLXB1Ymxp
YzoKLSAgICBCdWlsdEluRnVuY3Rpb25FbXVsYXRvcihTaFNoYWRlclR5cGUgc2hhZGVyVHlwZSk7
Ci0gICAgLy8gUmVjb3JkcyB0aGF0IGEgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBzaGFkZXIg
YW5kIG1pZ2h0IG5lZWRzIHRvIGJlCi0gICAgLy8gZW11bGF0ZWQuICBJZiB0aGUgZnVuY3Rpb24n
cyBncm91cCBpcyBub3QgaW4gbUZ1bmN0aW9uR3JvdXBGaWx0ZXIsIHRoaXMKLSAgICAvLyBiZWNv
bWVzIGFuIG5vLW9wLgotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZnVuY3Rpb24gY2FsbCBu
ZWVkcyB0byBiZSByZXBsYWNlZCB3aXRoIGFuIGVtdWxhdGVkCi0gICAgLy8gb25lLgotICAgIGJv
b2wgU2V0RnVuY3Rpb25DYWxsZWQoVE9wZXJhdG9yIG9wLCBjb25zdCBUVHlwZSYgcGFyYW0pOwot
ICAgIGJvb2wgU2V0RnVuY3Rpb25DYWxsZWQoCi0gICAgICAgIFRPcGVyYXRvciBvcCwgY29uc3Qg
VFR5cGUmIHBhcmFtMSwgY29uc3QgVFR5cGUmIHBhcmFtMik7Ci0KLSAgICAvLyBPdXRwdXQgZnVu
Y3Rpb24gZW11bGF0aW9uIGRlZmluaXRpb24uICBUaGlzIHNob3VsZCBiZSBiZWZvcmUgYW55IG90
aGVyCi0gICAgLy8gc2hhZGVyIHNvdXJjZS4KLSAgICB2b2lkIE91dHB1dEVtdWxhdGVkRnVuY3Rp
b25EZWZpbml0aW9uKFRJbmZvU2lua0Jhc2UmIG91dCwgYm9vbCB3aXRoUHJlY2lzaW9uKSBjb25z
dDsKLQotICAgIHZvaWQgTWFya0J1aWx0SW5GdW5jdGlvbnNGb3JFbXVsYXRpb24oVEludGVybU5v
ZGUqIHJvb3QpOwotCi0gICAgdm9pZCBDbGVhbnVwKCk7Ci0KLSAgICAvLyAibmFtZSgiIGJlY29t
ZXMgIndlYmdsX25hbWVfZW11KCIuCi0gICAgc3RhdGljIFRTdHJpbmcgR2V0RW11bGF0ZWRGdW5j
dGlvbk5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSk7Ci0KLXByaXZhdGU6Ci0gICAgLy8KLSAgICAv
LyBCdWlsdC1pbiBmdW5jdGlvbnMuCi0gICAgLy8KLSAgICBlbnVtIFRCdWlsdEluRnVuY3Rpb24g
ewotICAgICAgICBURnVuY3Rpb25Db3MxID0gMCwgIC8vIGZsb2F0IGNvcyhmbG9hdCk7Ci0gICAg
ICAgIFRGdW5jdGlvbkNvczIsICAvLyB2ZWMyIGNvcyh2ZWMyKTsKLSAgICAgICAgVEZ1bmN0aW9u
Q29zMywgIC8vIHZlYzMgY29zKHZlYzMpOwotICAgICAgICBURnVuY3Rpb25Db3M0LCAgLy8gdmVj
NCBjb3ModmVjNCk7Ci0KLSAgICAgICAgVEZ1bmN0aW9uRGlzdGFuY2UxXzEsICAvLyBmbG9hdCBk
aXN0YW5jZShmbG9hdCwgZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25EaXN0YW5jZTJfMiwgIC8v
IHZlYzIgZGlzdGFuY2UodmVjMiwgdmVjMik7Ci0gICAgICAgIFRGdW5jdGlvbkRpc3RhbmNlM18z
LCAgLy8gdmVjMyBkaXN0YW5jZSh2ZWMzLCB2ZWMzKTsKLSAgICAgICAgVEZ1bmN0aW9uRGlzdGFu
Y2U0XzQsICAvLyB2ZWM0IGRpc3RhbmNlKHZlYzQsIHZlYzQpOwotCi0gICAgICAgIFRGdW5jdGlv
bkRvdDFfMSwgIC8vIGZsb2F0IGRvdChmbG9hdCwgZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25E
b3QyXzIsICAvLyB2ZWMyIGRvdCh2ZWMyLCB2ZWMyKTsKLSAgICAgICAgVEZ1bmN0aW9uRG90M18z
LCAgLy8gdmVjMyBkb3QodmVjMywgdmVjMyk7Ci0gICAgICAgIFRGdW5jdGlvbkRvdDRfNCwgIC8v
IHZlYzQgZG90KHZlYzQsIHZlYzQpOwotCi0gICAgICAgIFRGdW5jdGlvbkxlbmd0aDEsICAvLyBm
bG9hdCBsZW5ndGgoZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25MZW5ndGgyLCAgLy8gZmxvYXQg
bGVuZ3RoKHZlYzIpOwotICAgICAgICBURnVuY3Rpb25MZW5ndGgzLCAgLy8gZmxvYXQgbGVuZ3Ro
KHZlYzMpOwotICAgICAgICBURnVuY3Rpb25MZW5ndGg0LCAgLy8gZmxvYXQgbGVuZ3RoKHZlYzQp
OwotCi0gICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTEsICAvLyBmbG9hdCBub3JtYWxpemUoZmxv
YXQpOwotICAgICAgICBURnVuY3Rpb25Ob3JtYWxpemUyLCAgLy8gdmVjMiBub3JtYWxpemUodmVj
Mik7Ci0gICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTMsICAvLyB2ZWMzIG5vcm1hbGl6ZSh2ZWMz
KTsKLSAgICAgICAgVEZ1bmN0aW9uTm9ybWFsaXplNCwgIC8vIHZlYzQgbm9ybWFsaXplKHZlYzQp
OwotCi0gICAgICAgIFRGdW5jdGlvblJlZmxlY3QxXzEsICAvLyBmbG9hdCByZWZsZWN0KGZsb2F0
LCBmbG9hdCk7Ci0gICAgICAgIFRGdW5jdGlvblJlZmxlY3QyXzIsICAvLyB2ZWMyIHJlZmxlY3Qo
dmVjMiwgdmVjMik7Ci0gICAgICAgIFRGdW5jdGlvblJlZmxlY3QzXzMsICAvLyB2ZWMzIHJlZmxl
Y3QodmVjMywgdmVjMyk7Ci0gICAgICAgIFRGdW5jdGlvblJlZmxlY3Q0XzQsICAvLyB2ZWM0IHJl
ZmxlY3QodmVjNCwgdmVjNCk7Ci0KLSAgICAgICAgVEZ1bmN0aW9uVW5rbm93bgotICAgIH07Ci0K
LSAgICBUQnVpbHRJbkZ1bmN0aW9uIElkZW50aWZ5RnVuY3Rpb24oVE9wZXJhdG9yIG9wLCBjb25z
dCBUVHlwZSYgcGFyYW0pOwotICAgIFRCdWlsdEluRnVuY3Rpb24gSWRlbnRpZnlGdW5jdGlvbigK
LSAgICAgICAgVE9wZXJhdG9yIG9wLCBjb25zdCBUVHlwZSYgcGFyYW0xLCBjb25zdCBUVHlwZSYg
cGFyYW0yKTsKLQotICAgIGJvb2wgU2V0RnVuY3Rpb25DYWxsZWQoVEJ1aWx0SW5GdW5jdGlvbiBm
dW5jdGlvbik7Ci0KLSAgICBzdGQ6OnZlY3RvcjxUQnVpbHRJbkZ1bmN0aW9uPiBtRnVuY3Rpb25z
OwotCi0gICAgY29uc3QgYm9vbCogbUZ1bmN0aW9uTWFzazsgIC8vIGEgYm9vbGVhbiBmbGFnIGZv
ciBlYWNoIGZ1bmN0aW9uLgotICAgIGNvbnN0IGNoYXIqKiBtRnVuY3Rpb25Tb3VyY2U7Ci19Owot
Ci0jZW5kaWYgIC8vIENPTVBJTElFUl9CVUlMVF9JTl9GVU5DVElPTl9FTVVMQVRPUl9IXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW4uY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW4uY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGYyMWI4NzYxNzNhMzE0YzA4MzhmMjczZTIyYmY3
NTU2NzRhZGQzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db2RlR2VuLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJj
b21waWxlci9UcmFuc2xhdG9yRVNTTC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1RyYW5zbGF0b3JH
TFNMLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuaCIKLQotLy8KLS8vIFRo
aXMgZnVuY3Rpb24gbXVzdCBiZSBwcm92aWRlZCB0byBjcmVhdGUgdGhlIGFjdHVhbAotLy8gY29t
cGlsZSBvYmplY3QgdXNlZCBieSBoaWdoZXIgbGV2ZWwgY29kZS4gIEl0IHJldHVybnMKLS8vIGEg
c3ViY2xhc3Mgb2YgVENvbXBpbGVyLgotLy8KLVRDb21waWxlciogQ29uc3RydWN0Q29tcGlsZXIo
Ci0gICAgU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBTaFNoYWRlck91dHB1
dCBvdXRwdXQpCi17Ci0gICAgc3dpdGNoIChvdXRwdXQpIHsKLSAgICAgIGNhc2UgU0hfRVNTTF9P
VVRQVVQ6Ci0gICAgICAgIHJldHVybiBuZXcgVHJhbnNsYXRvckVTU0wodHlwZSwgc3BlYyk7Ci0g
ICAgICBjYXNlIFNIX0dMU0xfT1VUUFVUOgotICAgICAgICByZXR1cm4gbmV3IFRyYW5zbGF0b3JH
TFNMKHR5cGUsIHNwZWMpOwotICAgICAgY2FzZSBTSF9ITFNMOV9PVVRQVVQ6Ci0gICAgICBjYXNl
IFNIX0hMU0wxMV9PVVRQVVQ6Ci0gICAgICAgIHJldHVybiBuZXcgVHJhbnNsYXRvckhMU0wodHlw
ZSwgc3BlYywgb3V0cHV0KTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBOVUxMOwot
ICAgIH0KLX0KLQotLy8KLS8vIERlbGV0ZSB0aGUgY29tcGlsZXIgbWFkZSBieSBDb25zdHJ1Y3RD
b21waWxlcgotLy8KLXZvaWQgRGVsZXRlQ29tcGlsZXIoVENvbXBpbGVyKiBjb21waWxlcikKLXsK
LSAgICBkZWxldGUgY29tcGlsZXI7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvQ29tbW9uLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvQ29tbW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2Zjk0NDBm
ZmYxYjUwYmY5NzI5ZGE2MTcyNTYzMzc0YzlmZmNiZDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0NvbW1vbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLy8KLS8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgotLy8KLQotI2lmbmRlZiBfQ09NTU9OX0lOQ0xVREVEXwotI2RlZmluZSBfQ09NTU9OX0lOQ0xV
REVEXwotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0jaW5jbHVkZSA8c3Ry
aW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImNvbXBpbGVyL1Bvb2xBbGxvYy5o
IgotCi1zdHJ1Y3QgVFNvdXJjZUxvYyB7Ci0gICAgaW50IGZpcnN0X2ZpbGU7Ci0gICAgaW50IGZp
cnN0X2xpbmU7Ci0gICAgaW50IGxhc3RfZmlsZTsKLSAgICBpbnQgbGFzdF9saW5lOwotfTsKLQot
Ly8KLS8vIFB1dCBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFIGluIGJhc2UgY2xhc3NlcyB0byBt
YWtlIHRoZW0gdXNlIHRoaXMgc2NoZW1lLgotLy8KLSNkZWZpbmUgUE9PTF9BTExPQ0FUT1JfTkVX
X0RFTEVURSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzKSB7IHJldHVybiBHZXRHbG9iYWxQ
b29sQWxsb2NhdG9yKCktPmFsbG9jYXRlKHMpOyB9ICAgXAotICAgIHZvaWQqIG9wZXJhdG9yIG5l
dyhzaXplX3QsIHZvaWQgKl9XaGVyZSkgeyByZXR1cm4gKF9XaGVyZSk7IH0gICAgICAgICAgICAg
ICAgICAgIFwKLSAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKikgeyB9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgdm9pZCBvcGVyYXRv
ciBkZWxldGUodm9pZCAqLCB2b2lkICopIHsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHNpemVfdCBzKSB7IHJldHVy
biBHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCktPmFsbG9jYXRlKHMpOyB9IFwKLSAgICB2b2lkKiBv
cGVyYXRvciBuZXdbXShzaXplX3QsIHZvaWQgKl9XaGVyZSkgeyByZXR1cm4gKF9XaGVyZSk7IH0g
ICAgICAgICAgICAgICAgICBcCi0gICAgdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKikgeyB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHZv
aWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCAqLCB2b2lkICopIHsgfQotCi0vLwotLy8gUG9vbCB2
ZXJzaW9uIG9mIHN0cmluZy4KLS8vCi10eXBlZGVmIHBvb2xfYWxsb2NhdG9yPGNoYXI+IFRTdHJp
bmdBbGxvY2F0b3I7Ci10eXBlZGVmIHN0ZDo6YmFzaWNfc3RyaW5nIDxjaGFyLCBzdGQ6OmNoYXJf
dHJhaXRzPGNoYXI+LCBUU3RyaW5nQWxsb2NhdG9yPiBUU3RyaW5nOwotdHlwZWRlZiBzdGQ6OmJh
c2ljX29zdHJpbmdzdHJlYW08Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgVFN0cmluZ0Fs
bG9jYXRvcj4gVFN0cmluZ1N0cmVhbTsKLWlubGluZSBUU3RyaW5nKiBOZXdQb29sVFN0cmluZyhj
b25zdCBjaGFyKiBzKQotewotCXZvaWQqIG1lbW9yeSA9IEdldEdsb2JhbFBvb2xBbGxvY2F0b3Io
KS0+YWxsb2NhdGUoc2l6ZW9mKFRTdHJpbmcpKTsKLQlyZXR1cm4gbmV3KG1lbW9yeSkgVFN0cmlu
ZyhzKTsKLX0KLQotLy8KLS8vIFBlcnNpc3RlbnQgc3RyaW5nIG1lbW9yeS4gIFNob3VsZCBvbmx5
IGJlIHVzZWQgZm9yIHN0cmluZ3MgdGhhdCBzdXJ2aXZlCi0vLyBhY3Jvc3MgY29tcGlsZXMuCi0v
LwotI2RlZmluZSBUUGVyc2lzdFN0cmluZyBzdGQ6OnN0cmluZwotI2RlZmluZSBUUGVyc2lzdFN0
cmluZ1N0cmVhbSBzdGQ6Om9zdHJpbmdzdHJlYW0KLQotLy8KLS8vIFBvb2wgYWxsb2NhdG9yIHZl
cnNpb25zIG9mIHZlY3RvcnMsIGxpc3RzLCBhbmQgbWFwcwotLy8KLXRlbXBsYXRlIDxjbGFzcyBU
PiBjbGFzcyBUVmVjdG9yIDogcHVibGljIHN0ZDo6dmVjdG9yPFQsIHBvb2xfYWxsb2NhdG9yPFQ+
ID4gewotcHVibGljOgotICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjp2ZWN0b3I8VCwgcG9vbF9h
bGxvY2F0b3I8VD4gPjo6c2l6ZV90eXBlIHNpemVfdHlwZTsKLSAgICBUVmVjdG9yKCkgOiBzdGQ6
OnZlY3RvcjxULCBwb29sX2FsbG9jYXRvcjxUPiA+KCkge30KLSAgICBUVmVjdG9yKGNvbnN0IHBv
b2xfYWxsb2NhdG9yPFQ+JiBhKSA6IHN0ZDo6dmVjdG9yPFQsIHBvb2xfYWxsb2NhdG9yPFQ+ID4o
YSkge30KLSAgICBUVmVjdG9yKHNpemVfdHlwZSBpKTogc3RkOjp2ZWN0b3I8VCwgcG9vbF9hbGxv
Y2F0b3I8VD4gPihpKSB7fQotfTsKLQotdGVtcGxhdGUgPGNsYXNzIEssIGNsYXNzIEQsIGNsYXNz
IENNUCA9IHN0ZDo6bGVzczxLPiA+IAotY2xhc3MgVE1hcCA6IHB1YmxpYyBzdGQ6Om1hcDxLLCBE
LCBDTVAsIHBvb2xfYWxsb2NhdG9yPHN0ZDo6cGFpcjxjb25zdCBLLCBEPiA+ID4gewotcHVibGlj
OgotICAgIHR5cGVkZWYgcG9vbF9hbGxvY2F0b3I8c3RkOjpwYWlyPGNvbnN0IEssIEQ+ID4gdEFs
bG9jYXRvcjsKLQotICAgIFRNYXAoKSA6IHN0ZDo6bWFwPEssIEQsIENNUCwgdEFsbG9jYXRvcj4o
KSB7fQotICAgIC8vIHVzZSBjb3JyZWN0IHR3by1zdGFnZSBuYW1lIGxvb2t1cCBzdXBwb3J0ZWQg
aW4gZ2NjIDMuNCBhbmQgYWJvdmUKLSAgICBUTWFwKGNvbnN0IHRBbGxvY2F0b3ImIGEpIDogc3Rk
OjptYXA8SywgRCwgQ01QLCB0QWxsb2NhdG9yPihzdGQ6Om1hcDxLLCBELCBDTVAsIHRBbGxvY2F0
b3I+OjprZXlfY29tcGFyZSgpLCBhKSB7fQotfTsKLQotI2VuZGlmIC8vIF9DT01NT05fSU5DTFVE
RURfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29t
cGlsZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVy
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJiNGVmNjAyNTlkMTk5ZGFlMTEw
MWY4MzEzODYwNzIxOTA1MGQ5My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDUyICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0K
LSNpbmNsdWRlICJjb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oIgotI2luY2x1ZGUg
ImNvbXBpbGVyL0RldGVjdENhbGxEZXB0aC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL0Zvckxvb3BV
bnJvbGwuaCIKLSNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplLmgiCi0jaW5jbHVkZSAiY29t
cGlsZXIvSW5pdGlhbGl6ZUdMUG9zaXRpb24uaCIKLSNpbmNsdWRlICJjb21waWxlci9Jbml0aWFs
aXplUGFyc2VDb250ZXh0LmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFt
ZXMuaCIKLSNpbmNsdWRlICJjb21waWxlci9QYXJzZUNvbnRleHQuaCIKLSNpbmNsdWRlICJjb21w
aWxlci9SZW5hbWVGdW5jdGlvbi5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCi0j
aW5jbHVkZSAiY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0QVNULmgiCi0jaW5jbHVkZSAiY29t
cGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1ZhcmlhYmxl
UGFja2VyLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgi
Ci0jaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCi0j
aW5jbHVkZSAiY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCIK
LSNpbmNsdWRlICJjb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCIK
LSNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIuaCIKLQot
Ym9vbCBpc1dlYkdMQmFzZWRTcGVjKFNoU2hhZGVyU3BlYyBzcGVjKQotewotICAgICByZXR1cm4g
c3BlYyA9PSBTSF9XRUJHTF9TUEVDIHx8IHNwZWMgPT0gU0hfQ1NTX1NIQURFUlNfU1BFQzsKLX0K
LQotbmFtZXNwYWNlIHsKLWNsYXNzIFRTY29wZWRQb29sQWxsb2NhdG9yIHsKLXB1YmxpYzoKLSAg
ICBUU2NvcGVkUG9vbEFsbG9jYXRvcihUUG9vbEFsbG9jYXRvciogYWxsb2NhdG9yKSA6IG1BbGxv
Y2F0b3IoYWxsb2NhdG9yKSB7Ci0gICAgICAgIG1BbGxvY2F0b3ItPnB1c2goKTsKLSAgICAgICAg
U2V0R2xvYmFsUG9vbEFsbG9jYXRvcihtQWxsb2NhdG9yKTsKLSAgICB9Ci0gICAgflRTY29wZWRQ
b29sQWxsb2NhdG9yKCkgewotICAgICAgICBTZXRHbG9iYWxQb29sQWxsb2NhdG9yKE5VTEwpOwot
ICAgICAgICBtQWxsb2NhdG9yLT5wb3AoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgVFBvb2xB
bGxvY2F0b3IqIG1BbGxvY2F0b3I7Ci19OwotCi1jbGFzcyBUU2NvcGVkU3ltYm9sVGFibGVMZXZl
bCB7Ci1wdWJsaWM6Ci0gICAgVFNjb3BlZFN5bWJvbFRhYmxlTGV2ZWwoVFN5bWJvbFRhYmxlKiB0
YWJsZSkgOiBtVGFibGUodGFibGUpIHsKLSAgICAgICAgQVNTRVJUKG1UYWJsZS0+YXRCdWlsdElu
TGV2ZWwoKSk7Ci0gICAgICAgIG1UYWJsZS0+cHVzaCgpOwotICAgIH0KLSAgICB+VFNjb3BlZFN5
bWJvbFRhYmxlTGV2ZWwoKSB7Ci0gICAgICAgIHdoaWxlICghbVRhYmxlLT5hdEJ1aWx0SW5MZXZl
bCgpKQotICAgICAgICAgICAgbVRhYmxlLT5wb3AoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAg
VFN5bWJvbFRhYmxlKiBtVGFibGU7Ci19OwotfSAgLy8gbmFtZXNwYWNlCi0KLVRTaEhhbmRsZUJh
c2U6OlRTaEhhbmRsZUJhc2UoKSB7Ci0gICAgYWxsb2NhdG9yLnB1c2goKTsKLSAgICBTZXRHbG9i
YWxQb29sQWxsb2NhdG9yKCZhbGxvY2F0b3IpOwotfQotCi1UU2hIYW5kbGVCYXNlOjp+VFNoSGFu
ZGxlQmFzZSgpIHsKLSAgICBTZXRHbG9iYWxQb29sQWxsb2NhdG9yKE5VTEwpOwotICAgIGFsbG9j
YXRvci5wb3BBbGwoKTsKLX0KLQotVENvbXBpbGVyOjpUQ29tcGlsZXIoU2hTaGFkZXJUeXBlIHR5
cGUsIFNoU2hhZGVyU3BlYyBzcGVjKQotICAgIDogc2hhZGVyVHlwZSh0eXBlKSwKLSAgICAgIHNo
YWRlclNwZWMoc3BlYyksCi0gICAgICBtYXhVbmlmb3JtVmVjdG9ycygwKSwKLSAgICAgIG1heFZh
cnlpbmdWZWN0b3JzKDApLAotICAgICAgbWF4RXhwcmVzc2lvbkNvbXBsZXhpdHkoMCksCi0gICAg
ICBtYXhDYWxsU3RhY2tEZXB0aCgwKSwKLSAgICAgIGZyYWdtZW50UHJlY2lzaW9uSGlnaChmYWxz
ZSksCi0gICAgICBjbGFtcGluZ1N0cmF0ZWd5KFNIX0NMQU1QX1dJVEhfQ0xBTVBfSU5UUklOU0lD
KSwKLSAgICAgIGJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yKHR5cGUpCi17Ci0gICAgbG9uZ05hbWVN
YXAgPSBMb25nTmFtZU1hcDo6R2V0SW5zdGFuY2UoKTsKLX0KLQotVENvbXBpbGVyOjp+VENvbXBp
bGVyKCkKLXsKLSAgICBBU1NFUlQobG9uZ05hbWVNYXApOwotICAgIGxvbmdOYW1lTWFwLT5SZWxl
YXNlKCk7Ci19Ci0KLWJvb2wgVENvbXBpbGVyOjpJbml0KGNvbnN0IFNoQnVpbHRJblJlc291cmNl
cyYgcmVzb3VyY2VzKQotewotICAgIG1heFVuaWZvcm1WZWN0b3JzID0gKHNoYWRlclR5cGUgPT0g
U0hfVkVSVEVYX1NIQURFUikgPwotICAgICAgICByZXNvdXJjZXMuTWF4VmVydGV4VW5pZm9ybVZl
Y3RvcnMgOgotICAgICAgICByZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9yczsKLSAg
ICBtYXhWYXJ5aW5nVmVjdG9ycyA9IHJlc291cmNlcy5NYXhWYXJ5aW5nVmVjdG9yczsKLSAgICBt
YXhFeHByZXNzaW9uQ29tcGxleGl0eSA9IHJlc291cmNlcy5NYXhFeHByZXNzaW9uQ29tcGxleGl0
eTsKLSAgICBtYXhDYWxsU3RhY2tEZXB0aCA9IHJlc291cmNlcy5NYXhDYWxsU3RhY2tEZXB0aDsK
LQotICAgIFNldEdsb2JhbFBvb2xBbGxvY2F0b3IoJmFsbG9jYXRvcik7Ci0KLSAgICAvLyBHZW5l
cmF0ZSBidWlsdC1pbiBzeW1ib2wgdGFibGUuCi0gICAgaWYgKCFJbml0QnVpbHRJblN5bWJvbFRh
YmxlKHJlc291cmNlcykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBJbml0RXh0ZW5zaW9u
QmVoYXZpb3IocmVzb3VyY2VzLCBleHRlbnNpb25CZWhhdmlvcik7Ci0gICAgZnJhZ21lbnRQcmVj
aXNpb25IaWdoID0gcmVzb3VyY2VzLkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9PSAxOwotCi0gICAg
YXJyYXlCb3VuZHNDbGFtcGVyLlNldENsYW1waW5nU3RyYXRlZ3kocmVzb3VyY2VzLkFycmF5SW5k
ZXhDbGFtcGluZ1N0cmF0ZWd5KTsKLSAgICBjbGFtcGluZ1N0cmF0ZWd5ID0gcmVzb3VyY2VzLkFy
cmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5OwotCi0gICAgaGFzaEZ1bmN0aW9uID0gcmVzb3VyY2Vz
Lkhhc2hGdW5jdGlvbjsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFRDb21waWxlcjo6
Y29tcGlsZShjb25zdCBjaGFyKiBjb25zdCBzaGFkZXJTdHJpbmdzW10sCi0gICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgbnVtU3RyaW5ncywKLSAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBjb21waWxlT3B0aW9ucykKLXsKLSAgICBUU2NvcGVkUG9vbEFsbG9jYXRvciBzY29wZWRBbGxv
YygmYWxsb2NhdG9yKTsKLSAgICBjbGVhclJlc3VsdHMoKTsKLQotICAgIGlmIChudW1TdHJpbmdz
ID09IDApCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gSWYgY29tcGlsaW5nIGZvciBX
ZWJHTCwgdmFsaWRhdGUgbG9vcCBhbmQgaW5kZXhpbmcgYXMgd2VsbC4KLSAgICBpZiAoaXNXZWJH
TEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkKLSAgICAgICAgY29tcGlsZU9wdGlvbnMgfD0gU0hfVkFM
SURBVEVfTE9PUF9JTkRFWElORzsKLQotICAgIC8vIEZpcnN0IHN0cmluZyBpcyBwYXRoIG9mIHNv
dXJjZSBmaWxlIGlmIGZsYWcgaXMgc2V0LiBUaGUgYWN0dWFsIHNvdXJjZSBmb2xsb3dzLgotICAg
IGNvbnN0IGNoYXIqIHNvdXJjZVBhdGggPSBOVUxMOwotICAgIHNpemVfdCBmaXJzdFNvdXJjZSA9
IDA7Ci0gICAgaWYgKGNvbXBpbGVPcHRpb25zICYgU0hfU09VUkNFX1BBVEgpCi0gICAgewotICAg
ICAgICBzb3VyY2VQYXRoID0gc2hhZGVyU3RyaW5nc1swXTsKLSAgICAgICAgKytmaXJzdFNvdXJj
ZTsKLSAgICB9Ci0KLSAgICBUSW50ZXJtZWRpYXRlIGludGVybWVkaWF0ZShpbmZvU2luayk7Ci0g
ICAgVFBhcnNlQ29udGV4dCBwYXJzZUNvbnRleHQoc3ltYm9sVGFibGUsIGV4dGVuc2lvbkJlaGF2
aW9yLCBpbnRlcm1lZGlhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZGVy
VHlwZSwgc2hhZGVyU3BlYywgY29tcGlsZU9wdGlvbnMsIHRydWUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc291cmNlUGF0aCwgaW5mb1NpbmspOwotICAgIHBhcnNlQ29udGV4dC5m
cmFnbWVudFByZWNpc2lvbkhpZ2ggPSBmcmFnbWVudFByZWNpc2lvbkhpZ2g7Ci0gICAgU2V0R2xv
YmFsUGFyc2VDb250ZXh0KCZwYXJzZUNvbnRleHQpOwotCi0gICAgLy8gV2UgcHJlc2VydmUgc3lt
Ym9scyBhdCB0aGUgYnVpbHQtaW4gbGV2ZWwgZnJvbSBjb21waWxlLXRvLWNvbXBpbGUuCi0gICAg
Ly8gU3RhcnQgcHVzaGluZyB0aGUgdXNlci1kZWZpbmVkIHN5bWJvbHMgYXQgZ2xvYmFsIGxldmVs
LgotICAgIFRTY29wZWRTeW1ib2xUYWJsZUxldmVsIHNjb3BlZFN5bWJvbExldmVsKCZzeW1ib2xU
YWJsZSk7Ci0KLSAgICAvLyBQYXJzZSBzaGFkZXIuCi0gICAgYm9vbCBzdWNjZXNzID0KLSAgICAg
ICAgKFBhUGFyc2VTdHJpbmdzKG51bVN0cmluZ3MgLSBmaXJzdFNvdXJjZSwgJnNoYWRlclN0cmlu
Z3NbZmlyc3RTb3VyY2VdLCBOVUxMLCAmcGFyc2VDb250ZXh0KSA9PSAwKSAmJgotICAgICAgICAo
cGFyc2VDb250ZXh0LnRyZWVSb290ICE9IE5VTEwpOwotICAgIGlmIChzdWNjZXNzKSB7Ci0gICAg
ICAgIFRJbnRlcm1Ob2RlKiByb290ID0gcGFyc2VDb250ZXh0LnRyZWVSb290OwotICAgICAgICBz
dWNjZXNzID0gaW50ZXJtZWRpYXRlLnBvc3RQcm9jZXNzKHJvb3QpOwotCi0gICAgICAgIGlmIChz
dWNjZXNzKQotICAgICAgICAgICAgc3VjY2VzcyA9IGRldGVjdENhbGxEZXB0aChyb290LCBpbmZv
U2luaywgKGNvbXBpbGVPcHRpb25zICYgU0hfTElNSVRfQ0FMTF9TVEFDS19ERVBUSCkgIT0gMCk7
Ci0KLSAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfVkFMSURBVEVf
TE9PUF9JTkRFWElORykpCi0gICAgICAgICAgICBzdWNjZXNzID0gdmFsaWRhdGVMaW1pdGF0aW9u
cyhyb290KTsKLQotICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9U
SU1JTkdfUkVTVFJJQ1RJT05TKSkKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSBlbmZvcmNlVGltaW5n
UmVzdHJpY3Rpb25zKHJvb3QsIChjb21waWxlT3B0aW9ucyAmIFNIX0RFUEVOREVOQ1lfR1JBUEgp
ICE9IDApOwotCi0gICAgICAgIGlmIChzdWNjZXNzICYmIHNoYWRlclNwZWMgPT0gU0hfQ1NTX1NI
QURFUlNfU1BFQykKLSAgICAgICAgICAgIHJld3JpdGVDU1NTaGFkZXIocm9vdCk7Ci0KLSAgICAg
ICAgLy8gVW5yb2xsIGZvci1sb29wIG1hcmt1cCBuZWVkcyB0byBoYXBwZW4gYWZ0ZXIgdmFsaWRh
dGVMaW1pdGF0aW9ucyBwYXNzLgotICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlv
bnMgJiBTSF9VTlJPTExfRk9SX0xPT1BfV0lUSF9JTlRFR0VSX0lOREVYKSkKLSAgICAgICAgICAg
IEZvckxvb3BVbnJvbGw6Ok1hcmtGb3JMb29wc1dpdGhJbnRlZ2VySW5kaWNlc0ZvclVucm9sbGlu
Zyhyb290KTsKLQotICAgICAgICAvLyBCdWlsdC1pbiBmdW5jdGlvbiBlbXVsYXRpb24gbmVlZHMg
dG8gaGFwcGVuIGFmdGVyIHZhbGlkYXRlTGltaXRhdGlvbnMgcGFzcy4KLSAgICAgICAgaWYgKHN1
Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElPTlMp
KQotICAgICAgICAgICAgYnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuTWFya0J1aWx0SW5GdW5jdGlv
bnNGb3JFbXVsYXRpb24ocm9vdCk7Ci0KLSAgICAgICAgLy8gQ2xhbXBpbmcgdW5pZm9ybSBhcnJh
eSBib3VuZHMgbmVlZHMgdG8gaGFwcGVuIGFmdGVyIHZhbGlkYXRlTGltaXRhdGlvbnMgcGFzcy4K
LSAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfQ0xBTVBfSU5ESVJF
Q1RfQVJSQVlfQk9VTkRTKSkKLSAgICAgICAgICAgIGFycmF5Qm91bmRzQ2xhbXBlci5NYXJrSW5k
aXJlY3RBcnJheUJvdW5kc0ZvckNsYW1waW5nKHJvb3QpOwotCi0gICAgICAgIC8vIERpc2FsbG93
IGV4cHJlc3Npb25zIGRlZW1lZCB0b28gY29tcGxleC4KLSAgICAgICAgaWYgKHN1Y2Nlc3MgJiYg
KGNvbXBpbGVPcHRpb25zICYgU0hfTElNSVRfRVhQUkVTU0lPTl9DT01QTEVYSVRZKSkKLSAgICAg
ICAgICAgIHN1Y2Nlc3MgPSBsaW1pdEV4cHJlc3Npb25Db21wbGV4aXR5KHJvb3QpOwotCi0gICAg
ICAgIC8vIENhbGwgbWFwTG9uZ1ZhcmlhYmxlTmFtZXMoKSBiZWZvcmUgY29sbGVjdEF0dHJpYnNV
bmlmb3JtcygpIHNvIGluCi0gICAgICAgIC8vIGNvbGxlY3RBdHRyaWJzVW5pZm9ybXMoKSB3ZSBh
bHJlYWR5IGhhdmUgdGhlIG1hcHBlZCBzeW1ib2wgbmFtZXMgYW5kCi0gICAgICAgIC8vIHdlIGNv
dWxkIGNvbXBvc2l0ZSBtYXBwZWQgYW5kIG9yaWdpbmFsIHZhcmlhYmxlIG5hbWVzLgotICAgICAg
ICAvLyBBbHNvLCBpZiB3ZSBoYXNoIGFsbCB0aGUgbmFtZXMsIHRoZW4gbm8gbmVlZCB0byBkbyB0
aGlzIGZvciBsb25nIG5hbWVzLgotICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlv
bnMgJiBTSF9NQVBfTE9OR19WQVJJQUJMRV9OQU1FUykgJiYgaGFzaEZ1bmN0aW9uID09IE5VTEwp
Ci0gICAgICAgICAgICBtYXBMb25nVmFyaWFibGVOYW1lcyhyb290KTsKLQotICAgICAgICBpZiAo
c3VjY2VzcyAmJiBzaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIgJiYgKGNvbXBpbGVPcHRp
b25zICYgU0hfSU5JVF9HTF9QT1NJVElPTikpIHsKLSAgICAgICAgICAgIEluaXRpYWxpemVHTFBv
c2l0aW9uIGluaXRHTFBvc2l0aW9uOwotICAgICAgICAgICAgcm9vdC0+dHJhdmVyc2UoJmluaXRH
TFBvc2l0aW9uKTsKLSAgICAgICAgfQotCi0gICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRp
b25zICYgU0hfVU5GT0xEX1NIT1JUX0NJUkNVSVQpKSB7Ci0gICAgICAgICAgICBVbmZvbGRTaG9y
dENpcmN1aXRBU1QgdW5mb2xkU2hvcnRDaXJjdWl0OwotICAgICAgICAgICAgcm9vdC0+dHJhdmVy
c2UoJnVuZm9sZFNob3J0Q2lyY3VpdCk7Ci0gICAgICAgICAgICB1bmZvbGRTaG9ydENpcmN1aXQu
dXBkYXRlVHJlZSgpOwotICAgIH0KLQotICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9w
dGlvbnMgJiBTSF9WQVJJQUJMRVMpKSB7Ci0gICAgICAgICAgICBjb2xsZWN0VmFyaWFibGVzKHJv
b3QpOwotICAgICAgICAgICAgaWYgKGNvbXBpbGVPcHRpb25zICYgU0hfRU5GT1JDRV9QQUNLSU5H
X1JFU1RSSUNUSU9OUykKLSAgICAgICAgICAgICAgICBzdWNjZXNzID0gZW5mb3JjZVBhY2tpbmdS
ZXN0cmljdGlvbnMoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzdWNjZXNzICYmIChjb21w
aWxlT3B0aW9ucyAmIFNIX0lOVEVSTUVESUFURV9UUkVFKSkKLSAgICAgICAgICAgIGludGVybWVk
aWF0ZS5vdXRwdXRUcmVlKHJvb3QpOwotCi0gICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxl
T3B0aW9ucyAmIFNIX09CSkVDVF9DT0RFKSkKLSAgICAgICAgICAgIHRyYW5zbGF0ZShyb290KTsK
LSAgICB9Ci0KLSAgICAvLyBDbGVhbnVwIG1lbW9yeS4KLSAgICBpbnRlcm1lZGlhdGUucmVtb3Zl
KHBhcnNlQ29udGV4dC50cmVlUm9vdCk7Ci0KLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotYm9v
bCBUQ29tcGlsZXI6OkluaXRCdWlsdEluU3ltYm9sVGFibGUoY29uc3QgU2hCdWlsdEluUmVzb3Vy
Y2VzICZyZXNvdXJjZXMpCi17Ci0gICAgY29tcGlsZVJlc291cmNlcyA9IHJlc291cmNlczsKLQot
ICAgIGFzc2VydChzeW1ib2xUYWJsZS5pc0VtcHR5KCkpOwotICAgIHN5bWJvbFRhYmxlLnB1c2go
KTsKLQotICAgIFRQdWJsaWNUeXBlIGludGVnZXI7Ci0gICAgaW50ZWdlci50eXBlID0gRWJ0SW50
OwotICAgIGludGVnZXIuc2l6ZSA9IDE7Ci0gICAgaW50ZWdlci5tYXRyaXggPSBmYWxzZTsKLSAg
ICBpbnRlZ2VyLmFycmF5ID0gZmFsc2U7Ci0KLSAgICBUUHVibGljVHlwZSBmbG9hdGluZ1BvaW50
OwotICAgIGZsb2F0aW5nUG9pbnQudHlwZSA9IEVidEZsb2F0OwotICAgIGZsb2F0aW5nUG9pbnQu
c2l6ZSA9IDE7Ci0gICAgZmxvYXRpbmdQb2ludC5tYXRyaXggPSBmYWxzZTsKLSAgICBmbG9hdGlu
Z1BvaW50LmFycmF5ID0gZmFsc2U7Ci0KLSAgICBUUHVibGljVHlwZSBzYW1wbGVyOwotICAgIHNh
bXBsZXIuc2l6ZSA9IDE7Ci0gICAgc2FtcGxlci5tYXRyaXggPSBmYWxzZTsKLSAgICBzYW1wbGVy
LmFycmF5ID0gZmFsc2U7Ci0KLSAgICBzd2l0Y2goc2hhZGVyVHlwZSkKLSAgICB7Ci0gICAgICBj
YXNlIFNIX0ZSQUdNRU5UX1NIQURFUjoKLSAgICAgICAgc3ltYm9sVGFibGUuc2V0RGVmYXVsdFBy
ZWNpc2lvbihpbnRlZ2VyLCBFYnBNZWRpdW0pOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
U0hfVkVSVEVYX1NIQURFUjoKLSAgICAgICAgc3ltYm9sVGFibGUuc2V0RGVmYXVsdFByZWNpc2lv
bihpbnRlZ2VyLCBFYnBIaWdoKTsKLSAgICAgICAgc3ltYm9sVGFibGUuc2V0RGVmYXVsdFByZWNp
c2lvbihmbG9hdGluZ1BvaW50LCBFYnBIaWdoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZh
dWx0OiBhc3NlcnQoZmFsc2UgJiYgIkxhbmd1YWdlIG5vdCBzdXBwb3J0ZWQiKTsKLSAgICB9Ci0g
ICAgLy8gV2Ugc2V0IGRlZmF1bHRzIGZvciBhbGwgdGhlIHNhbXBsZXIgdHlwZXMsIGV2ZW4gdGhv
c2UgdGhhdCBhcmUKLSAgICAvLyBvbmx5IGF2YWlsYWJsZSBpZiBhbiBleHRlbnNpb24gZXhpc3Rz
LgotICAgIGZvciAoaW50IHNhbXBsZXJUeXBlID0gRWJ0R3VhcmRTYW1wbGVyQmVnaW4gKyAxOwot
ICAgICAgICAgc2FtcGxlclR5cGUgPCBFYnRHdWFyZFNhbXBsZXJFbmQ7ICsrc2FtcGxlclR5cGUp
IHsKLSAgICAgICAgc2FtcGxlci50eXBlID0gc3RhdGljX2Nhc3Q8VEJhc2ljVHlwZT4oc2FtcGxl
clR5cGUpOwotICAgICAgICBzeW1ib2xUYWJsZS5zZXREZWZhdWx0UHJlY2lzaW9uKHNhbXBsZXIs
IEVicExvdyk7Ci0gICAgfQotCi0gICAgSW5zZXJ0QnVpbHRJbkZ1bmN0aW9ucyhzaGFkZXJUeXBl
LCBzaGFkZXJTcGVjLCByZXNvdXJjZXMsIHN5bWJvbFRhYmxlKTsKLQotICAgIElkZW50aWZ5QnVp
bHRJbnMoc2hhZGVyVHlwZSwgc2hhZGVyU3BlYywgcmVzb3VyY2VzLCBzeW1ib2xUYWJsZSk7Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBUQ29tcGlsZXI6OmNsZWFyUmVzdWx0cygpCi17
Ci0gICAgYXJyYXlCb3VuZHNDbGFtcGVyLkNsZWFudXAoKTsKLSAgICBpbmZvU2luay5pbmZvLmVy
YXNlKCk7Ci0gICAgaW5mb1Npbmsub2JqLmVyYXNlKCk7Ci0gICAgaW5mb1NpbmsuZGVidWcuZXJh
c2UoKTsKLQotICAgIGF0dHJpYnMuY2xlYXIoKTsKLSAgICB1bmlmb3Jtcy5jbGVhcigpOwotICAg
IHZhcnlpbmdzLmNsZWFyKCk7Ci0KLSAgICBidWlsdEluRnVuY3Rpb25FbXVsYXRvci5DbGVhbnVw
KCk7Ci0KLSAgICBuYW1lTWFwLmNsZWFyKCk7Ci19Ci0KLWJvb2wgVENvbXBpbGVyOjpkZXRlY3RD
YWxsRGVwdGgoVEludGVybU5vZGUqIHJvb3QsIFRJbmZvU2luayYgaW5mb1NpbmssIGJvb2wgbGlt
aXRDYWxsU3RhY2tEZXB0aCkKLXsKLSAgICBEZXRlY3RDYWxsRGVwdGggZGV0ZWN0KGluZm9TaW5r
LCBsaW1pdENhbGxTdGFja0RlcHRoLCBtYXhDYWxsU3RhY2tEZXB0aCk7Ci0gICAgcm9vdC0+dHJh
dmVyc2UoJmRldGVjdCk7Ci0gICAgc3dpdGNoIChkZXRlY3QuZGV0ZWN0Q2FsbERlcHRoKCkpIHsK
LSAgICAgICAgY2FzZSBEZXRlY3RDYWxsRGVwdGg6OmtFcnJvck5vbmU6Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBEZXRlY3RDYWxsRGVwdGg6OmtFcnJvck1pc3NpbmdN
YWluOgotICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5wcmVmaXgoRVByZWZpeEVycm9yKTsKLSAg
ICAgICAgICAgIGluZm9TaW5rLmluZm8gPDwgIk1pc3NpbmcgbWFpbigpIjsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgY2FzZSBEZXRlY3RDYWxsRGVwdGg6OmtFcnJvclJlY3Vy
c2lvbjoKLSAgICAgICAgICAgIGluZm9TaW5rLmluZm8ucHJlZml4KEVQcmVmaXhFcnJvcik7Ci0g
ICAgICAgICAgICBpbmZvU2luay5pbmZvIDw8ICJGdW5jdGlvbiByZWN1cnNpb24gZGV0ZWN0ZWQi
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjYXNlIERldGVjdENhbGxEZXB0
aDo6a0Vycm9yTWF4RGVwdGhFeGNlZWRlZDoKLSAgICAgICAgICAgIGluZm9TaW5rLmluZm8ucHJl
Zml4KEVQcmVmaXhFcnJvcik7Ci0gICAgICAgICAgICBpbmZvU2luay5pbmZvIDw8ICJGdW5jdGlv
biBjYWxsIHN0YWNrIHRvbyBkZWVwIjsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotfQotCi12b2lkIFRDb21waWxlcjo6cmV3cml0ZUNTU1NoYWRlcihU
SW50ZXJtTm9kZSogcm9vdCkKLXsKLSAgICBSZW5hbWVGdW5jdGlvbiByZW5hbWVyKCJtYWluKCIs
ICJjc3NfbWFpbigiKTsKLSAgICByb290LT50cmF2ZXJzZSgmcmVuYW1lcik7Ci19Ci0KLWJvb2wg
VENvbXBpbGVyOjp2YWxpZGF0ZUxpbWl0YXRpb25zKFRJbnRlcm1Ob2RlKiByb290KSB7Ci0gICAg
VmFsaWRhdGVMaW1pdGF0aW9ucyB2YWxpZGF0ZShzaGFkZXJUeXBlLCBpbmZvU2luay5pbmZvKTsK
LSAgICByb290LT50cmF2ZXJzZSgmdmFsaWRhdGUpOwotICAgIHJldHVybiB2YWxpZGF0ZS5udW1F
cnJvcnMoKSA9PSAwOwotfQotCi1ib29sIFRDb21waWxlcjo6ZW5mb3JjZVRpbWluZ1Jlc3RyaWN0
aW9ucyhUSW50ZXJtTm9kZSogcm9vdCwgYm9vbCBvdXRwdXRHcmFwaCkKLXsKLSAgICBpZiAoc2hh
ZGVyU3BlYyAhPSBTSF9XRUJHTF9TUEVDKSB7Ci0gICAgICAgIGluZm9TaW5rLmluZm8gPDwgIlRp
bWluZyByZXN0cmljdGlvbnMgbXVzdCBiZSBlbmZvcmNlZCB1bmRlciB0aGUgV2ViR0wgc3BlYy4i
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHNoYWRlclR5cGUgPT0g
U0hfRlJBR01FTlRfU0hBREVSKSB7Ci0gICAgICAgIFREZXBlbmRlbmN5R3JhcGggZ3JhcGgocm9v
dCk7Ci0KLSAgICAgICAgLy8gT3V0cHV0IGFueSBlcnJvcnMgZmlyc3QuCi0gICAgICAgIGJvb2wg
c3VjY2VzcyA9IGVuZm9yY2VGcmFnbWVudFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhncmFwaCk7
Ci0gICAgICAgIAotICAgICAgICAvLyBUaGVuLCBvdXRwdXQgdGhlIGRlcGVuZGVuY3kgZ3JhcGgu
Ci0gICAgICAgIGlmIChvdXRwdXRHcmFwaCkgewotICAgICAgICAgICAgVERlcGVuZGVuY3lHcmFw
aE91dHB1dCBvdXRwdXQoaW5mb1NpbmsuaW5mbyk7Ci0gICAgICAgICAgICBvdXRwdXQub3V0cHV0
QWxsU3Bhbm5pbmdUcmVlcyhncmFwaCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJl
dHVybiBzdWNjZXNzOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgcmV0dXJuIGVuZm9yY2VW
ZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMocm9vdCk7Ci0gICAgfQotfQotCi1ib29sIFRD
b21waWxlcjo6bGltaXRFeHByZXNzaW9uQ29tcGxleGl0eShUSW50ZXJtTm9kZSogcm9vdCkKLXsK
LSAgICBUSW50ZXJtVHJhdmVyc2VyIHRyYXZlcnNlcjsKLSAgICByb290LT50cmF2ZXJzZSgmdHJh
dmVyc2VyKTsKLSAgICBURGVwZW5kZW5jeUdyYXBoIGdyYXBoKHJvb3QpOwotCi0gICAgZm9yIChU
RnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZ3JhcGguYmVnaW5Vc2Vy
RGVmaW5lZEZ1bmN0aW9uQ2FsbHMoKTsKLSAgICAgICAgIGl0ZXIgIT0gZ3JhcGguZW5kVXNlckRl
ZmluZWRGdW5jdGlvbkNhbGxzKCk7Ci0gICAgICAgICArK2l0ZXIpCi0gICAgewotICAgICAgICBU
R3JhcGhGdW5jdGlvbkNhbGwqIHNhbXBsZXJTeW1ib2wgPSAqaXRlcjsKLSAgICAgICAgVERlcGVu
ZGVuY3lHcmFwaFRyYXZlcnNlciBncmFwaFRyYXZlcnNlcjsKLSAgICAgICAgc2FtcGxlclN5bWJv
bC0+dHJhdmVyc2UoJmdyYXBoVHJhdmVyc2VyKTsKLSAgICB9Ci0KLSAgICBpZiAodHJhdmVyc2Vy
LmdldE1heERlcHRoKCkgPiBtYXhFeHByZXNzaW9uQ29tcGxleGl0eSkgewotICAgICAgICBpbmZv
U2luay5pbmZvIDw8ICJFeHByZXNzaW9uIHRvbyBjb21wbGV4LiI7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVENvbXBpbGVyOjplbmZv
cmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoY29uc3QgVERlcGVuZGVuY3lHcmFw
aCYgZ3JhcGgpCi17Ci0gICAgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZyByZXN0cmljdG9y
KGluZm9TaW5rLmluZm8pOwotICAgIHJlc3RyaWN0b3IuZW5mb3JjZVJlc3RyaWN0aW9ucyhncmFw
aCk7Ci0gICAgcmV0dXJuIHJlc3RyaWN0b3IubnVtRXJyb3JzKCkgPT0gMDsKLX0KLQotYm9vbCBU
Q29tcGlsZXI6OmVuZm9yY2VWZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoVEludGVybU5v
ZGUqIHJvb3QpCi17Ci0gICAgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcgcmVzdHJpY3Rvcihp
bmZvU2luay5pbmZvKTsKLSAgICByZXN0cmljdG9yLmVuZm9yY2VSZXN0cmljdGlvbnMocm9vdCk7
Ci0gICAgcmV0dXJuIHJlc3RyaWN0b3IubnVtRXJyb3JzKCkgPT0gMDsKLX0KLQotdm9pZCBUQ29t
cGlsZXI6OmNvbGxlY3RWYXJpYWJsZXMoVEludGVybU5vZGUqIHJvb3QpCi17Ci0gICAgQ29sbGVj
dFZhcmlhYmxlcyBjb2xsZWN0KGF0dHJpYnMsIHVuaWZvcm1zLCB2YXJ5aW5ncywgaGFzaEZ1bmN0
aW9uKTsKLSAgICByb290LT50cmF2ZXJzZSgmY29sbGVjdCk7Ci19Ci0KLWJvb2wgVENvbXBpbGVy
OjplbmZvcmNlUGFja2luZ1Jlc3RyaWN0aW9ucygpCi17Ci0gICAgVmFyaWFibGVQYWNrZXIgcGFj
a2VyOwotICAgIGJvb2wgc3VjY2VzcyA9IHBhY2tlci5DaGVja1ZhcmlhYmxlc1dpdGhpblBhY2tp
bmdMaW1pdHMobWF4VW5pZm9ybVZlY3RvcnMsIHVuaWZvcm1zKTsKLSAgICBpZiAoIXN1Y2Nlc3Mp
IHsKLSAgICAgICAgaW5mb1NpbmsuaW5mby5wcmVmaXgoRVByZWZpeEVycm9yKTsKLSAgICAgICAg
aW5mb1NpbmsuaW5mbyA8PCAidG9vIG1hbnkgdW5pZm9ybXMiOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgc3VjY2VzcyA9IHBhY2tlci5DaGVja1ZhcmlhYmxlc1dpdGhpblBh
Y2tpbmdMaW1pdHMobWF4VmFyeWluZ1ZlY3RvcnMsIHZhcnlpbmdzKTsKLQotICAgIGlmICghc3Vj
Y2VzcykgewotICAgICAgICBpbmZvU2luay5pbmZvLnByZWZpeChFUHJlZml4RXJyb3IpOwotICAg
ICAgICBpbmZvU2luay5pbmZvIDw8ICJ0b28gbWFueSB2YXJ5aW5ncyI7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBUQ29tcGlsZXI6
Om1hcExvbmdWYXJpYWJsZU5hbWVzKFRJbnRlcm1Ob2RlKiByb290KQotewotICAgIEFTU0VSVChs
b25nTmFtZU1hcCk7Ci0gICAgTWFwTG9uZ1ZhcmlhYmxlTmFtZXMgbWFwKGxvbmdOYW1lTWFwKTsK
LSAgICByb290LT50cmF2ZXJzZSgmbWFwKTsKLX0KLQotaW50IFRDb21waWxlcjo6Z2V0TWFwcGVk
TmFtZU1heExlbmd0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIE1BWF9TSE9SVEVORURfSURFTlRJ
RklFUl9TSVpFICsgMTsKLX0KLQotY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBUQ29tcGlsZXI6
OmdldEV4dGVuc2lvbkJlaGF2aW9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZXh0ZW5zaW9uQmVo
YXZpb3I7Ci19Ci0KLWNvbnN0IFNoQnVpbHRJblJlc291cmNlcyYgVENvbXBpbGVyOjpnZXRSZXNv
dXJjZXMoKSBjb25zdAotewotICAgIHJldHVybiBjb21waWxlUmVzb3VyY2VzOwotfQotCi1jb25z
dCBBcnJheUJvdW5kc0NsYW1wZXImIFRDb21waWxlcjo6Z2V0QXJyYXlCb3VuZHNDbGFtcGVyKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gYXJyYXlCb3VuZHNDbGFtcGVyOwotfQotCi1TaEFycmF5SW5k
ZXhDbGFtcGluZ1N0cmF0ZWd5IFRDb21waWxlcjo6Z2V0QXJyYXlJbmRleENsYW1waW5nU3RyYXRl
Z3koKSBjb25zdAotewotICAgIHJldHVybiBjbGFtcGluZ1N0cmF0ZWd5OwotfQotCi1jb25zdCBC
dWlsdEluRnVuY3Rpb25FbXVsYXRvciYgVENvbXBpbGVyOjpnZXRCdWlsdEluRnVuY3Rpb25FbXVs
YXRvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOwotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbnN0YW50
VW5pb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db25zdGFudFVu
aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxZTM3ODg1ZjkwMWIwMjRkNjM0
NjU4NDc3MTJiZmI2ODg2MDczNGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbnN0YW50
VW5pb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDI1NyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwotCi0jaWZuZGVmIF9DT05TVEFOVF9VTklPTl9JTkNMVURFRF8KLSNkZWZpbmUgX0NPTlNUQU5U
X1VOSU9OX0lOQ0xVREVEXwotCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0KLWNsYXNzIENvbnN0YW50
VW5pb24gewotcHVibGljOgotICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKLSAgICBD
b25zdGFudFVuaW9uKCkKLSAgICB7Ci0gICAgICAgIGlDb25zdCA9IDA7Ci0gICAgICAgIHR5cGUg
PSBFYnRWb2lkOwotICAgIH0KLQotICAgIHZvaWQgc2V0SUNvbnN0KGludCBpKSB7aUNvbnN0ID0g
aTsgdHlwZSA9IEVidEludDsgfQotICAgIHZvaWQgc2V0RkNvbnN0KGZsb2F0IGYpIHtmQ29uc3Qg
PSBmOyB0eXBlID0gRWJ0RmxvYXQ7IH0KLSAgICB2b2lkIHNldEJDb25zdChib29sIGIpIHtiQ29u
c3QgPSBiOyB0eXBlID0gRWJ0Qm9vbDsgfQotCi0gICAgaW50IGdldElDb25zdCgpIHsgcmV0dXJu
IGlDb25zdDsgfQotICAgIGZsb2F0IGdldEZDb25zdCgpIHsgcmV0dXJuIGZDb25zdDsgfQotICAg
IGJvb2wgZ2V0QkNvbnN0KCkgeyByZXR1cm4gYkNvbnN0OyB9Ci0gICAgaW50IGdldElDb25zdCgp
IGNvbnN0IHsgcmV0dXJuIGlDb25zdDsgfQotICAgIGZsb2F0IGdldEZDb25zdCgpIGNvbnN0IHsg
cmV0dXJuIGZDb25zdDsgfQotICAgIGJvb2wgZ2V0QkNvbnN0KCkgY29uc3QgeyByZXR1cm4gYkNv
bnN0OyB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaW50IGkpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gaSA9PSBpQ29uc3Q7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IGZsb2F0IGYpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZiA9PSBmQ29uc3Q7
Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGJvb2wgYikgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBiID09IGJDb25zdDsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0Ci0gICAgewotICAgICAgICBp
ZiAoY29uc3RhbnQudHlwZSAhPSB0eXBlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEVidEludDoKLSAgICAgICAgICAg
IHJldHVybiBjb25zdGFudC5pQ29uc3QgPT0gaUNvbnN0OwotICAgICAgICBjYXNlIEVidEZsb2F0
OgotICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50LmZDb25zdCA9PSBmQ29uc3Q7Ci0gICAgICAg
IGNhc2UgRWJ0Qm9vbDoKLSAgICAgICAgICAgIHJldHVybiBjb25zdGFudC5iQ29uc3QgPT0gYkNv
bnN0OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGludCBpKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KGkpOwotICAgIH0KLQotICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBmbG9hdCBmKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICFvcGVy
YXRvcj09KGYpOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBib29sIGIpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gIW9wZXJhdG9yPT0oYik7Ci0gICAgfQotCi0gICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KGNvbnN0YW50KTsKLSAgICB9Ci0KLSAgICBi
b29sIG9wZXJhdG9yPihjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKLSAgICB7
IAotICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKLSAgICAgICAgc3dpdGNo
ICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgRWJ0SW50OgotICAgICAgICAgICAgcmV0dXJuIGlDb25z
dCA+IGNvbnN0YW50LmlDb25zdDsKLSAgICAgICAgY2FzZSBFYnRGbG9hdDoKLSAgICAgICAgICAg
IHJldHVybiBmQ29uc3QgPiBjb25zdGFudC5mQ29uc3Q7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gSW52YWxpZCBvcGVyYXRpb24sIGhhbmRsZWQgYXQg
c2VtYW50aWMgYW5hbHlzaXMKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I8
KGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAotICAgIHsgCi0gICAgICAgIGFz
c2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAg
ICAgICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAgICAgICByZXR1cm4gaUNvbnN0IDwgY29uc3RhbnQu
aUNvbnN0OwotICAgICAgICBjYXNlIEVidEZsb2F0OgotICAgICAgICAgICAgcmV0dXJuIGZDb25z
dCA8IGNvbnN0YW50LmZDb25zdDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgICAvLyBJbnZhbGlkIG9wZXJhdGlvbiwgaGFuZGxlZCBhdCBzZW1hbnRpYyBhbmFs
eXNpcwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvcisoY29u
c3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0Ci0gICAgeyAKLSAgICAgICAgQ29uc3Rh
bnRVbmlvbiByZXR1cm5WYWx1ZTsKLSAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlw
ZSk7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEVidEludDogcmV0dXJu
VmFsdWUuc2V0SUNvbnN0KGlDb25zdCArIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOwotICAgICAg
ICBjYXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0ICsgY29uc3RhbnQu
ZkNvbnN0KTsgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiRGVmYXVs
dCBtaXNzaW5nIik7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci0g
ICAgfQotCi0gICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvci0oY29uc3QgQ29uc3RhbnRVbmlvbiYg
Y29uc3RhbnQpIGNvbnN0Ci0gICAgeyAKLSAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1
ZTsKLSAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7Ci0gICAgICAgIHN3aXRj
aCAodHlwZSkgewotICAgICAgICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlD
b25zdCAtIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOwotICAgICAgICBjYXNlIEVidEZsb2F0OiBy
ZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0IC0gY29uc3RhbnQuZkNvbnN0KTsgYnJlYWs7Ci0g
ICAgICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci0gICAgfQotCi0gICAgQ29uc3Rh
bnRVbmlvbiBvcGVyYXRvciooY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0Ci0g
ICAgeyAKLSAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKLSAgICAgICAgYXNzZXJ0
KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAg
ICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAqIGNvbnN0YW50LmlD
b25zdCk7IGJyZWFrOwotICAgICAgICBjYXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29u
c3QoZkNvbnN0ICogY29uc3RhbnQuZkNvbnN0KTsgYnJlYWs7IAotICAgICAgICBkZWZhdWx0OiBh
c3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOwotICAgICAgICB9Ci0KLSAgICAgICAg
cmV0dXJuIHJldHVyblZhbHVlOwotICAgIH0KLQotICAgIENvbnN0YW50VW5pb24gb3BlcmF0b3Il
KGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAotICAgIHsgCi0gICAgICAgIENv
bnN0YW50VW5pb24gcmV0dXJuVmFsdWU7Ci0gICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50
LnR5cGUpOwotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBFYnRJbnQ6IHJl
dHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgJSBjb25zdGFudC5pQ29uc3QpOyBicmVhazsKLSAg
ICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci0gICAgfQotCi0gICAgQ29u
c3RhbnRVbmlvbiBvcGVyYXRvcj4+KGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25z
dAotICAgIHsgCi0gICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7Ci0gICAgICAgIGFz
c2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAg
ICAgICAgY2FzZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgPj4gY29uc3Rh
bnQuaUNvbnN0KTsgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYg
IkRlZmF1bHQgbWlzc2luZyIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJldHVyblZh
bHVlOwotICAgIH0KLQotICAgIENvbnN0YW50VW5pb24gb3BlcmF0b3I8PChjb25zdCBDb25zdGFu
dFVuaW9uJiBjb25zdGFudCkgY29uc3QKLSAgICB7IAotICAgICAgICBDb25zdGFudFVuaW9uIHJl
dHVyblZhbHVlOwotICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKLSAgICAg
ICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJ
Q29uc3QoaUNvbnN0IDw8IGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOwotICAgICAgICBkZWZhdWx0
OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLSAgICB9Ci0KLSAgICBDb25zdGFudFVuaW9uIG9w
ZXJhdG9yJihjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKLSAgICB7IAotICAg
ICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOwotICAgICAgICBhc3NlcnQodHlwZSA9PSBj
b25zdGFudC50eXBlKTsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgRWJ0
SW50OiAgcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAmIGNvbnN0YW50LmlDb25zdCk7IGJy
ZWFrOwotICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3Np
bmciKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLSAgICB9Ci0K
LSAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yfChjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFu
dCkgY29uc3QKLSAgICB7IAotICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOwotICAg
ICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKLSAgICAgICAgc3dpdGNoICh0eXBl
KSB7Ci0gICAgICAgIGNhc2UgRWJ0SW50OiAgcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCB8
IGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOwotICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZh
bHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBy
ZXR1cm5WYWx1ZTsKLSAgICB9Ci0KLSAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yXihjb25zdCBD
b25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKLSAgICB7IAotICAgICAgICBDb25zdGFudFVu
aW9uIHJldHVyblZhbHVlOwotICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsK
LSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgRWJ0SW50OiAgcmV0dXJuVmFs
dWUuc2V0SUNvbnN0KGlDb25zdCBeIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOwotICAgICAgICBk
ZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLSAgICB9Ci0KLSAgICBDb25zdGFudFVu
aW9uIG9wZXJhdG9yJiYoY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0Ci0gICAg
eyAKLSAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKLSAgICAgICAgYXNzZXJ0KHR5
cGUgPT0gY29uc3RhbnQudHlwZSk7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBj
YXNlIEVidEJvb2w6IHJldHVyblZhbHVlLnNldEJDb25zdChiQ29uc3QgJiYgY29uc3RhbnQuYkNv
bnN0KTsgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1
bHQgbWlzc2luZyIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwot
ICAgIH0KLQotICAgIENvbnN0YW50VW5pb24gb3BlcmF0b3J8fChjb25zdCBDb25zdGFudFVuaW9u
JiBjb25zdGFudCkgY29uc3QKLSAgICB7IAotICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZh
bHVlOwotICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKLSAgICAgICAgc3dp
dGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgRWJ0Qm9vbDogcmV0dXJuVmFsdWUuc2V0QkNvbnN0
KGJDb25zdCB8fCBjb25zdGFudC5iQ29uc3QpOyBicmVhazsKLSAgICAgICAgZGVmYXVsdDogICAg
IGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4gcmV0dXJuVmFsdWU7Ci0gICAgfQotCi0gICAgVEJhc2ljVHlwZSBnZXRUeXBlKCkg
Y29uc3QgeyByZXR1cm4gdHlwZTsgfQotcHJpdmF0ZToKLQotICAgIHVuaW9uICB7Ci0gICAgICAg
IGludCBpQ29uc3Q7ICAvLyB1c2VkIGZvciBpdmVjLCBzY2FsYXIgaW50cwotICAgICAgICBib29s
IGJDb25zdDsgLy8gdXNlZCBmb3IgYnZlYywgc2NhbGFyIGJvb2xzCi0gICAgICAgIGZsb2F0IGZD
b25zdDsgICAvLyB1c2VkIGZvciB2ZWMsIG1hdCwgc2NhbGFyIGZsb2F0cwotICAgIH0gOwotCi0g
ICAgVEJhc2ljVHlwZSB0eXBlOwotfTsKLQotI2VuZGlmIC8vIF9DT05TVEFOVF9VTklPTl9JTkNM
VURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9E
ZXRlY3RDYWxsRGVwdGguY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0RldGVjdENhbGxEZXB0aC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwZGY1
MmM3MTUxYTg5NmExOGJmNmNiZDIwYjNmNjM0NTk1ODk2NmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL0RldGVjdENhbGxEZXB0aC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBA
QAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL0RldGVjdENhbGxEZXB0
aC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCi0KLURldGVjdENhbGxEZXB0aDo6
RnVuY3Rpb25Ob2RlOjpGdW5jdGlvbk5vZGUoY29uc3QgVFN0cmluZyYgZm5hbWUpCi0gICAgOiBu
YW1lKGZuYW1lKSwKLSAgICAgIHZpc2l0KFByZVZpc2l0KQotewotfQotCi1jb25zdCBUU3RyaW5n
JiBEZXRlY3RDYWxsRGVwdGg6OkZ1bmN0aW9uTm9kZTo6Z2V0TmFtZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG5hbWU7Ci19Ci0KLXZvaWQgRGV0ZWN0Q2FsbERlcHRoOjpGdW5jdGlvbk5vZGU6OmFk
ZENhbGxlZSgKLSAgICBEZXRlY3RDYWxsRGVwdGg6OkZ1bmN0aW9uTm9kZSogY2FsbGVlKQotewot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FsbGVlcy5zaXplKCk7ICsraSkgewotICAgICAg
ICBpZiAoY2FsbGVlc1tpXSA9PSBjYWxsZWUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIGNhbGxlZXMucHVzaF9iYWNrKGNhbGxlZSk7Ci19Ci0KLWludCBEZXRlY3RDYWxsRGVwdGg6
OkZ1bmN0aW9uTm9kZTo6ZGV0ZWN0Q2FsbERlcHRoKERldGVjdENhbGxEZXB0aCogZGV0ZWN0Q2Fs
bERlcHRoLCBpbnQgZGVwdGgpCi17Ci0gICAgQVNTRVJUKHZpc2l0ID09IFByZVZpc2l0KTsKLSAg
ICBBU1NFUlQoZGV0ZWN0Q2FsbERlcHRoKTsKLQotICAgIGludCBtYXhEZXB0aCA9IGRlcHRoOwot
ICAgIHZpc2l0ID0gSW5WaXNpdDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNhbGxlZXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgc3dpdGNoIChjYWxsZWVzW2ldLT52aXNpdCkgewotICAg
ICAgICAgICAgY2FzZSBJblZpc2l0OgotICAgICAgICAgICAgICAgIC8vIGN5Y2xlIGRldGVjdGVk
LCBpLmUuLCByZWN1cnNpb24gZGV0ZWN0ZWQuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGtJbmZp
bml0ZUNhbGxEZXB0aDsKLSAgICAgICAgICAgIGNhc2UgUG9zdFZpc2l0OgotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBQcmVWaXNpdDogewotICAgICAgICAgICAgICAg
IC8vIENoZWNrIGJlZm9yZSB3ZSByZWN1cnNlIHNvIHdlIGRvbid0IGdvIHRvbyBkZXB0aAotICAg
ICAgICAgICAgICAgIGlmIChkZXRlY3RDYWxsRGVwdGgtPmNoZWNrRXhjZWVkc01heERlcHRoKGRl
cHRoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlcHRoOwotICAgICAgICAgICAgICAg
IGludCBjYWxsRGVwdGggPSBjYWxsZWVzW2ldLT5kZXRlY3RDYWxsRGVwdGgoZGV0ZWN0Q2FsbERl
cHRoLCBkZXB0aCArIDEpOwotICAgICAgICAgICAgICAgIC8vIENoZWNrIGFmdGVyIHdlIHJlY3Vy
c2Ugc28gd2UgY2FuIGV4aXQgaW1tZWRpYXRlbHkgYW5kIHByb3ZpZGUgaW5mby4KLSAgICAgICAg
ICAgICAgICBpZiAoZGV0ZWN0Q2FsbERlcHRoLT5jaGVja0V4Y2VlZHNNYXhEZXB0aChjYWxsRGVw
dGgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRldGVjdENhbGxEZXB0aC0+Z2V0SW5mb1Npbmso
KS5pbmZvIDw8ICI8LSIgPDwgY2FsbGVlc1tpXS0+Z2V0TmFtZSgpOwotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gY2FsbERlcHRoOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBtYXhEZXB0aCA9IHN0ZDo6bWF4KGNhbGxEZXB0aCwgbWF4RGVwdGgpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgfQotICAgIHZpc2l0ID0gUG9zdFZpc2l0OwotICAgIHJldHVybiBtYXhEZXB0aDsKLX0K
LQotdm9pZCBEZXRlY3RDYWxsRGVwdGg6OkZ1bmN0aW9uTm9kZTo6cmVzZXQoKQotewotICAgIHZp
c2l0ID0gUHJlVmlzaXQ7Ci19Ci0KLURldGVjdENhbGxEZXB0aDo6RGV0ZWN0Q2FsbERlcHRoKFRJ
bmZvU2luayYgaW5mb1NpbmssIGJvb2wgbGltaXRDYWxsU3RhY2tEZXB0aCwgaW50IG1heENhbGxT
dGFja0RlcHRoKQotICAgIDogVEludGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFs
c2UpLAotICAgICAgY3VycmVudEZ1bmN0aW9uKE5VTEwpLAotICAgICAgaW5mb1NpbmsoaW5mb1Np
bmspLAotICAgICAgbWF4RGVwdGgobGltaXRDYWxsU3RhY2tEZXB0aCA/IG1heENhbGxTdGFja0Rl
cHRoIDogRnVuY3Rpb25Ob2RlOjprSW5maW5pdGVDYWxsRGVwdGgpCi17Ci19Ci0KLURldGVjdENh
bGxEZXB0aDo6fkRldGVjdENhbGxEZXB0aCgpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBmdW5jdGlvbnMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGRlbGV0ZSBmdW5jdGlvbnNbaV07Ci19
Ci0KLWJvb2wgRGV0ZWN0Q2FsbERlcHRoOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVElu
dGVybUFnZ3JlZ2F0ZSogbm9kZSkKLXsKLSAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCi0gICAg
ewotICAgICAgICBjYXNlIEVPcFByb3RvdHlwZToKLSAgICAgICAgICAgIC8vIEZ1bmN0aW9uIGRl
Y2xhcmF0aW9uLgotICAgICAgICAgICAgLy8gRG9uJ3QgYWRkIEZ1bmN0aW9uTm9kZSBoZXJlIGJl
Y2F1c2Ugbm9kZS0+Z2V0TmFtZSgpIGlzIHRoZQotICAgICAgICAgICAgLy8gdW5tYW5nbGVkIGZ1
bmN0aW9uIG5hbWUuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BGdW5jdGlv
bjogewotICAgICAgICAgICAgLy8gRnVuY3Rpb24gZGVmaW5pdGlvbi4KLSAgICAgICAgICAgIGlm
ICh2aXNpdCA9PSBQcmVWaXNpdCkgewotICAgICAgICAgICAgICAgIGN1cnJlbnRGdW5jdGlvbiA9
IGZpbmRGdW5jdGlvbkJ5TmFtZShub2RlLT5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgIGlm
IChjdXJyZW50RnVuY3Rpb24gPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBjdXJyZW50
RnVuY3Rpb24gPSBuZXcgRnVuY3Rpb25Ob2RlKG5vZGUtPmdldE5hbWUoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGZ1bmN0aW9ucy5wdXNoX2JhY2soY3VycmVudEZ1bmN0aW9uKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHZpc2l0ID09IFBvc3RWaXNpdCkgewot
ICAgICAgICAgICAgICAgIGN1cnJlbnRGdW5jdGlvbiA9IE5VTEw7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEVPcEZ1bmN0aW9uQ2Fs
bDogewotICAgICAgICAgICAgLy8gRnVuY3Rpb24gY2FsbC4KLSAgICAgICAgICAgIGlmICh2aXNp
dCA9PSBQcmVWaXNpdCkgewotICAgICAgICAgICAgICAgIEZ1bmN0aW9uTm9kZSogZnVuYyA9IGZp
bmRGdW5jdGlvbkJ5TmFtZShub2RlLT5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgIGlmIChm
dW5jID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgZnVuYyA9IG5ldyBGdW5jdGlvbk5v
ZGUobm9kZS0+Z2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25zLnB1c2hf
YmFjayhmdW5jKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJl
bnRGdW5jdGlvbikKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudEZ1bmN0aW9uLT5hZGRDYWxs
ZWUoZnVuYyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIERldGVjdENhbGxEZXB0aDo6Y2hlY2tFeGNlZWRzTWF4RGVwdGgoaW50
IGRlcHRoKQotewotICAgIHJldHVybiBkZXB0aCA+PSBtYXhEZXB0aDsKLX0KLQotdm9pZCBEZXRl
Y3RDYWxsRGVwdGg6OnJlc2V0RnVuY3Rpb25Ob2RlcygpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBmdW5jdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgZnVuY3Rpb25zW2ldLT5y
ZXNldCgpOwotICAgIH0KLX0KLQotRGV0ZWN0Q2FsbERlcHRoOjpFcnJvckNvZGUgRGV0ZWN0Q2Fs
bERlcHRoOjpkZXRlY3RDYWxsRGVwdGhGb3JGdW5jdGlvbihGdW5jdGlvbk5vZGUqIGZ1bmMpCi17
Ci0gICAgY3VycmVudEZ1bmN0aW9uID0gTlVMTDsKLSAgICByZXNldEZ1bmN0aW9uTm9kZXMoKTsK
LQotICAgIGludCBtYXhDYWxsRGVwdGggPSBmdW5jLT5kZXRlY3RDYWxsRGVwdGgodGhpcywgMSk7
Ci0KLSAgICBpZiAobWF4Q2FsbERlcHRoID09IEZ1bmN0aW9uTm9kZTo6a0luZmluaXRlQ2FsbERl
cHRoKQotICAgICAgICByZXR1cm4ga0Vycm9yUmVjdXJzaW9uOwotCi0gICAgaWYgKG1heENhbGxE
ZXB0aCA+PSBtYXhEZXB0aCkKLSAgICAgICAgcmV0dXJuIGtFcnJvck1heERlcHRoRXhjZWVkZWQ7
Ci0KLSAgICByZXR1cm4ga0Vycm9yTm9uZTsKLX0KLQotRGV0ZWN0Q2FsbERlcHRoOjpFcnJvckNv
ZGUgRGV0ZWN0Q2FsbERlcHRoOjpkZXRlY3RDYWxsRGVwdGgoKQotewotICAgIGlmIChtYXhEZXB0
aCAhPSBGdW5jdGlvbk5vZGU6OmtJbmZpbml0ZUNhbGxEZXB0aCkgewotICAgICAgICAvLyBDaGVj
ayBhbGwgZnVuY3Rpb25zIGJlY2F1c2UgdGhlIGRyaXZlciBtYXkgZmFpbCBvbiB0aGVtCi0gICAg
ICAgIC8vIFRPRE86IEJlZm9yZSBkZXRlY3RpbmdSZWN1cnNpb24sIHN0cmlwIHVudXNlZCBmdW5j
dGlvbnMuCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25zLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgICAgICBFcnJvckNvZGUgZXJyb3IgPSBkZXRlY3RDYWxsRGVwdGhGb3JG
dW5jdGlvbihmdW5jdGlvbnNbaV0pOwotICAgICAgICAgICAgaWYgKGVycm9yICE9IGtFcnJvck5v
bmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yOwotICAgICAgICB9Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgRnVuY3Rpb25Ob2RlKiBtYWluID0gZmluZEZ1bmN0aW9uQnlOYW1lKCJtYWlu
KCIpOwotICAgICAgICBpZiAobWFpbiA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIGtFcnJv
ck1pc3NpbmdNYWluOwotCi0gICAgICAgIHJldHVybiBkZXRlY3RDYWxsRGVwdGhGb3JGdW5jdGlv
bihtYWluKTsKLSAgICB9Ci0KLSAgICByZXR1cm4ga0Vycm9yTm9uZTsKLX0KLQotRGV0ZWN0Q2Fs
bERlcHRoOjpGdW5jdGlvbk5vZGUqIERldGVjdENhbGxEZXB0aDo6ZmluZEZ1bmN0aW9uQnlOYW1l
KAotICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBmdW5jdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGZ1bmN0aW9uc1tpXS0+Z2V0
TmFtZSgpID09IG5hbWUpCi0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb25zW2ldOwotICAgIH0K
LSAgICByZXR1cm4gTlVMTDsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0RldGVjdENhbGxEZXB0aC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0RldGVjdENhbGxEZXB0aC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA4OWU4NWY4OGY2ZWEyNjhkZDRlNTA1NGY2NWJjZmE5YjExNzVmYTdjLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3RDYWxsRGVwdGguaAorKysgL2Rldi9udWxsCkBAIC0x
LDgwICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfREVURUNU
X1JFQ1VSU0lPTl9IXwotI2RlZmluZSBDT01QSUxFUl9ERVRFQ1RfUkVDVVJTSU9OX0hfCi0KLSNp
bmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLQotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2lu
Y2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1Zhcmlh
YmxlSW5mby5oIgotCi1jbGFzcyBUSW5mb1Npbms7Ci0KLS8vIFRyYXZlcnNlcyBpbnRlcm1lZGlh
dGUgdHJlZSB0byBkZXRlY3QgZnVuY3Rpb24gcmVjdXJzaW9uLgotY2xhc3MgRGV0ZWN0Q2FsbERl
cHRoIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIGVudW0gRXJyb3JD
b2RlIHsKLSAgICAgICAga0Vycm9yTWlzc2luZ01haW4sCi0gICAgICAgIGtFcnJvclJlY3Vyc2lv
biwKLSAgICAgICAga0Vycm9yTWF4RGVwdGhFeGNlZWRlZCwKLSAgICAgICAga0Vycm9yTm9uZQot
ICAgIH07Ci0KLSAgICBEZXRlY3RDYWxsRGVwdGgoVEluZm9TaW5rJiBpbmZvU3luYywgYm9vbCBs
aW1pdENhbGxTdGFja0RlcHRoLCBpbnQgbWF4Q2FsbFN0YWNrRGVwdGgpOwotICAgIH5EZXRlY3RD
YWxsRGVwdGgoKTsKLQotICAgIHZpcnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVElu
dGVybUFnZ3JlZ2F0ZSopOwotCi0gICAgYm9vbCBjaGVja0V4Y2VlZHNNYXhEZXB0aChpbnQgZGVw
dGgpOwotCi0gICAgRXJyb3JDb2RlIGRldGVjdENhbGxEZXB0aCgpOwotCi1wcml2YXRlOgotICAg
IGNsYXNzIEZ1bmN0aW9uTm9kZSB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IGtJbmZpbml0ZUNhbGxEZXB0aCA9IElOVF9NQVg7Ci0KLSAgICAgICAgRnVuY3Rpb25Ob2Rl
KGNvbnN0IFRTdHJpbmcmIGZuYW1lKTsKLQotICAgICAgICBjb25zdCBUU3RyaW5nJiBnZXROYW1l
KCkgY29uc3Q7Ci0KLSAgICAgICAgLy8gSWYgYSBmdW5jdGlvbiBpcyBhbHJlYWR5IGluIHRoZSBj
YWxsZWUgbGlzdCwgdGhpcyBiZWNvbWVzIGEgbm8tb3AuCi0gICAgICAgIHZvaWQgYWRkQ2FsbGVl
KEZ1bmN0aW9uTm9kZSogY2FsbGVlKTsKLQotICAgICAgICAvLyBSZXR1cm5zIGtJbmlmaW5pdHlD
YWxsRGVwdGggaWYgcmVjdXJzaXZlIGZ1bmN0aW9uIGNhbGxzIGFyZSBkZXRlY3RlZC4KLSAgICAg
ICAgaW50IGRldGVjdENhbGxEZXB0aChEZXRlY3RDYWxsRGVwdGgqIGRldGVjdENhbGxEZXB0aCwg
aW50IGRlcHRoKTsKLQotICAgICAgICAvLyBSZXNldCBzdGF0ZS4KLSAgICAgICAgdm9pZCByZXNl
dCgpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgLy8gbWFuZ2xlZCBmdW5jdGlvbiBuYW1lIGlz
IHVuaXF1ZS4KLSAgICAgICAgVFN0cmluZyBuYW1lOwotCi0gICAgICAgIC8vIGZ1bmN0aW9ucyB0
aGF0IGFyZSBkaXJlY3RseSBjYWxsZWQgYnkgdGhpcyBmdW5jdGlvbi4KLSAgICAgICAgVFZlY3Rv
cjxGdW5jdGlvbk5vZGUqPiBjYWxsZWVzOwotCi0gICAgICAgIFZpc2l0IHZpc2l0OwotICAgIH07
Ci0KLSAgICBFcnJvckNvZGUgZGV0ZWN0Q2FsbERlcHRoRm9yRnVuY3Rpb24oRnVuY3Rpb25Ob2Rl
KiBmdW5jKTsKLSAgICBGdW5jdGlvbk5vZGUqIGZpbmRGdW5jdGlvbkJ5TmFtZShjb25zdCBUU3Ry
aW5nJiBuYW1lKTsKLSAgICB2b2lkIHJlc2V0RnVuY3Rpb25Ob2RlcygpOwotCi0gICAgVEluZm9T
aW5rJiBnZXRJbmZvU2luaygpIHsgcmV0dXJuIGluZm9TaW5rOyB9Ci0KLSAgICBUVmVjdG9yPEZ1
bmN0aW9uTm9kZSo+IGZ1bmN0aW9uczsKLSAgICBGdW5jdGlvbk5vZGUqIGN1cnJlbnRGdW5jdGlv
bjsKLSAgICBUSW5mb1NpbmsmIGluZm9TaW5rOwotICAgIGludCBtYXhEZXB0aDsKLQotICAgIERl
dGVjdENhbGxEZXB0aChjb25zdCBEZXRlY3RDYWxsRGVwdGgmKTsKLSAgICB2b2lkIG9wZXJhdG9y
PShjb25zdCBEZXRlY3RDYWxsRGVwdGgmKTsKLX07Ci0KLSNlbmRpZiAgLy8gQ09NUElMRVJfREVU
RUNUX1JFQ1VSU0lPTl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA4Y2ZlNDliYTIyNDJhOGRjZjJjZTY5OGQ5YzNlYTYwNmM5OTc5MjRlLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLS8vIENvbnRhaW5zIGFuYWx5
c2lzIHV0aWxpdGllcyBmb3IgZGVhbGluZyB3aXRoIEhMU0wncyBsYWNrIG9mIHN1cHBvcnQgZm9y
Ci0vLyB0aGUgdXNlIG9mIGludHJpbnNpYyBmdW5jdGlvbnMgd2hpY2ggKGltcGxpY2l0bHkgb3Ig
ZXhwbGljaXRseSkgY29tcHV0ZQotLy8gZ3JhZGllbnRzIG9mIGZ1bmN0aW9ucyB3aXRoIGRpc2Nv
bnRpbnVpdGllcy4gCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0
eS5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VDb250ZXh0LmgiCi0KLW5hbWVzcGFjZSBz
aAotewotYm9vbCBEZXRlY3RMb29wRGlzY29udGludWl0eTo6dHJhdmVyc2UoVEludGVybU5vZGUg
Km5vZGUpCi17Ci0gICAgbUxvb3BEZXB0aCA9IDA7Ci0gICAgbUxvb3BEaXNjb250aW51aXR5ID0g
ZmFsc2U7Ci0gICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgcmV0dXJuIG1Mb29wRGlzY29u
dGludWl0eTsKLX0KLQotYm9vbCBEZXRlY3RMb29wRGlzY29udGludWl0eTo6dmlzaXRMb29wKFZp
c2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbG9vcCkKLXsKLSAgICBpZiAodmlzaXQgPT0gUHJlVmlz
aXQpCi0gICAgewotICAgICAgICArK21Mb29wRGVwdGg7Ci0gICAgfQotICAgIGVsc2UgaWYgKHZp
c2l0ID09IFBvc3RWaXNpdCkKLSAgICB7Ci0gICAgICAgIC0tbUxvb3BEZXB0aDsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBEZXRlY3RMb29wRGlzY29udGludWl0eTo6dmlz
aXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2ggKm5vZGUpCi17Ci0gICAgaWYgKG1M
b29wRGlzY29udGludWl0eSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBpZiAoIW1Mb29wRGVwdGgpCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICBzd2l0Y2ggKG5vZGUtPmdldEZsb3dPcCgpKQotICAgIHsKLSAgICAgIGNhc2UgRU9w
S2lsbDoKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcEJyZWFrOgotICAgICAgY2FzZSBF
T3BDb250aW51ZToKLSAgICAgIGNhc2UgRU9wUmV0dXJuOgotICAgICAgICBtTG9vcERpc2NvbnRp
bnVpdHkgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuICFtTG9vcERpc2NvbnRpbnVpdHk7Ci19Ci0KLWJvb2wg
RGV0ZWN0TG9vcERpc2NvbnRpbnVpdHk6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50
ZXJtQWdncmVnYXRlICpub2RlKQotewotICAgIHJldHVybiAhbUxvb3BEaXNjb250aW51aXR5Owot
fQotCi1ib29sIGNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkoVEludGVybU5vZGUgKm5vZGUpCi17
Ci0gICAgRGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkgZGV0ZWN0TG9vcERpc2NvbnRpbnVpdHk7Ci0g
ICAgcmV0dXJuIGRldGVjdExvb3BEaXNjb250aW51aXR5LnRyYXZlcnNlKG5vZGUpOwotfQotCi1i
b29sIERldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkK
LXsKLSAgICBtR3JhZGllbnRPcGVyYXRpb24gPSBmYWxzZTsKLSAgICBub2RlLT50cmF2ZXJzZSh0
aGlzKTsKLSAgICByZXR1cm4gbUdyYWRpZW50T3BlcmF0aW9uOwotfQotCi1ib29sIERldGVjdEdy
YWRpZW50T3BlcmF0aW9uOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5v
ZGUpCi17Ci0gICAgaWYgKG1HcmFkaWVudE9wZXJhdGlvbikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCi0gICAgewotICAg
ICAgY2FzZSBFT3BERmR4OgotICAgICAgY2FzZSBFT3BERmR5OgotICAgICAgICBtR3JhZGllbnRP
cGVyYXRpb24gPSB0cnVlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
Ci0gICAgcmV0dXJuICFtR3JhZGllbnRPcGVyYXRpb247Ci19Ci0KLWJvb2wgRGV0ZWN0R3JhZGll
bnRPcGVyYXRpb246OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRl
ICpub2RlKQotewotICAgIGlmIChtR3JhZGllbnRPcGVyYXRpb24pCi0gICAgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9wRnVuY3Rp
b25DYWxsKQotICAgIHsKLSAgICAgICAgaWYgKCFub2RlLT5pc1VzZXJEZWZpbmVkKCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1l
KG5vZGUtPmdldE5hbWUoKSk7Ci0KLSAgICAgICAgICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQi
IHx8Ci0gICAgICAgICAgICAgICAgbmFtZSA9PSAidGV4dHVyZTJEUHJvaiIgfHwKLSAgICAgICAg
ICAgICAgICBuYW1lID09ICJ0ZXh0dXJlQ3ViZSIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgbUdyYWRpZW50T3BlcmF0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFdoZW4gYSB1c2VyIGRl
ZmluZWQgZnVuY3Rpb24gaXMgY2FsbGVkLCB3ZSBoYXZlIHRvCi0gICAgICAgICAgICAvLyBjb25z
ZXJ2YXRpdmVseSBhc3N1bWUgaXQgdG8gY29udGFpbiBncmFkaWVudCBvcGVyYXRpb25zCi0gICAg
ICAgICAgICBtR3JhZGllbnRPcGVyYXRpb24gPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgcmV0dXJuICFtR3JhZGllbnRPcGVyYXRpb247Ci19Ci0KLWJvb2wgY29udGFpbnNHcmFkaWVu
dE9wZXJhdGlvbihUSW50ZXJtTm9kZSAqbm9kZSkKLXsKLSAgICBEZXRlY3RHcmFkaWVudE9wZXJh
dGlvbiBkZXRlY3RHcmFkaWVudE9wZXJhdGlvbjsKLSAgICByZXR1cm4gZGV0ZWN0R3JhZGllbnRP
cGVyYXRpb24udHJhdmVyc2Uobm9kZSk7Ci19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU1MjBiZDViMDJmNWEyZjM1ZTg5Yzg5N2YwZjE0MGIz
ZWMxMjNkNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5o
CisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAx
MiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0vLyBDb250YWlu
cyBhbmFseXNpcyB1dGlsaXRpZXMgZm9yIGRlYWxpbmcgd2l0aCBITFNMJ3MgbGFjayBvZiBzdXBw
b3J0IGZvcgotLy8gdGhlIHVzZSBvZiBpbnRyaW5zaWMgZnVuY3Rpb25zIHdoaWNoIChpbXBsaWNp
dGx5IG9yIGV4cGxpY2l0bHkpIGNvbXB1dGUKLS8vIGdyYWRpZW50cyBvZiBmdW5jdGlvbnMgd2l0
aCBkaXNjb250aW51aXRpZXMuIAotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9ERVRFQ1RESVNDT05U
SU5VSVRZX0hfCi0jZGVmaW5lIENPTVBJTEVSX0RFVEVDVERJU0NPTlRJTlVJVFlfSF8KLQotI2lu
Y2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotCi1uYW1lc3BhY2Ugc2gKLXsKLS8vIENo
ZWNrcyB3aGV0aGVyIGEgbG9vcCBjYW4gcnVuIGZvciBhIHZhcmlhYmxlIG51bWJlciBvZiBpdGVy
YXRpb25zCi1jbGFzcyBEZXRlY3RMb29wRGlzY29udGludWl0eSA6IHB1YmxpYyBUSW50ZXJtVHJh
dmVyc2VyCi17Ci0gIHB1YmxpYzoKLSAgICBib29sIHRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2Rl
KTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVElu
dGVybUJyYW5jaCAqbm9kZSk7Ci0gICAgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRl
cm1Mb29wICpsb29wKTsKLSAgICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50
ZXJtQWdncmVnYXRlICpub2RlKTsKLQotICAgIGludCBtTG9vcERlcHRoOwotICAgIGJvb2wgbUxv
b3BEaXNjb250aW51aXR5OwotfTsKLQotYm9vbCBjb250YWluc0xvb3BEaXNjb250aW51aXR5KFRJ
bnRlcm1Ob2RlICpub2RlKTsKLQotLy8gQ2hlY2tzIGZvciBpbnRyaW5zaWMgZnVuY3Rpb25zIHdo
aWNoIGNvbXB1dGUgZ3JhZGllbnRzCi1jbGFzcyBEZXRlY3RHcmFkaWVudE9wZXJhdGlvbiA6IHB1
YmxpYyBUSW50ZXJtVHJhdmVyc2VyCi17Ci0gIHB1YmxpYzoKLSAgICBib29sIHRyYXZlcnNlKFRJ
bnRlcm1Ob2RlICpub2RlKTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgYm9vbCB2aXNpdFVuYXJ5KFZp
c2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUpOwotICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUo
VmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUpOwotCi0gICAgYm9vbCBtR3JhZGll
bnRPcGVyYXRpb247Ci19OwotCi1ib29sIGNvbnRhaW5zR3JhZGllbnRPcGVyYXRpb24oVEludGVy
bU5vZGUgKm5vZGUpOwotCi19Ci0KLSNlbmRpZiAgIC8vIENPTVBJTEVSX0RFVEVDVERJU0NPTlRJ
TlVJVFlfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9EaWFnbm9zdGljcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
RGlhZ25vc3RpY3MuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTM4YzQxYTY1
NDIzMjFlODU2NDI2YmI5M2QyNzE0MjkzNjA5MjI0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9EaWFnbm9zdGljcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vLwotLy8g
Q29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL0RpYWdub3N0aWNzLmgiCi0KLSNpbmNsdWRlICJj
b21waWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCi0jaW5jbHVk
ZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL1NvdXJjZUxvY2F0aW9uLmgiCi0KLVREaWFnbm9zdGlj
czo6VERpYWdub3N0aWNzKFRJbmZvU2luayYgaW5mb1NpbmspIDoKLSAgICBtSW5mb1NpbmsoaW5m
b1NpbmspLAotICAgIG1OdW1FcnJvcnMoMCksCi0gICAgbU51bVdhcm5pbmdzKDApCi17Ci19Ci0K
LVREaWFnbm9zdGljczo6flREaWFnbm9zdGljcygpCi17Ci19Ci0KLXZvaWQgVERpYWdub3N0aWNz
Ojp3cml0ZUluZm8oU2V2ZXJpdHkgc2V2ZXJpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcmVhc29uLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdG9rZW4sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHRyYSkKLXsKLSAgICBUUHJlZml4VHlwZSBwcmVm
aXggPSBFUHJlZml4Tm9uZTsKLSAgICBzd2l0Y2ggKHNldmVyaXR5KQotICAgIHsKLSAgICAgIGNh
c2UgRVJST1I6Ci0gICAgICAgICsrbU51bUVycm9yczsKLSAgICAgICAgcHJlZml4ID0gRVByZWZp
eEVycm9yOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgV0FSTklORzoKLSAgICAgICAgKytt
TnVtV2FybmluZ3M7Ci0gICAgICAgIHByZWZpeCA9IEVQcmVmaXhXYXJuaW5nOwotICAgICAgICBi
cmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIFRJbmZvU2lua0Jhc2UmIHNpbmsgPSBtSW5mb1NpbmsuaW5mbzsK
LSAgICAvKiBWQysrIGZvcm1hdDogZmlsZShsaW5lbnVtKSA6IGVycm9yICM6ICd0b2tlbicgOiBl
eHRyYWluZm8gKi8KLSAgICBzaW5rLnByZWZpeChwcmVmaXgpOwotICAgIHNpbmsubG9jYXRpb24o
bG9jLmZpbGUsIGxvYy5saW5lKTsKLSAgICBzaW5rIDw8ICInIiA8PCB0b2tlbiA8PCAgIicgOiAi
IDw8IHJlYXNvbiA8PCAiICIgPDwgZXh0cmEgPDwgIlxuIjsKLX0KLQotdm9pZCBURGlhZ25vc3Rp
Y3M6OndyaXRlRGVidWcoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cikKLXsKLSAgICBtSW5mb1Npbmsu
ZGVidWcgPDwgc3RyOwotfQotCi12b2lkIFREaWFnbm9zdGljczo6cHJpbnQoSUQgaWQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpCi17Ci0gICAgd3Jp
dGVJbmZvKHNldmVyaXR5KGlkKSwgbG9jLCBtZXNzYWdlKGlkKSwgdGV4dCwgIiIpOwotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNz
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I3MWJiMTIwNDIyOGE3NDczNzRhMjZlZmQ4
OWM3YzY3MmJiNTZiOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaAor
KysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENP
TVBJTEVSX0RJQUdOT1NUSUNTX0hfCi0jZGVmaW5lIENPTVBJTEVSX0RJQUdOT1NUSUNTX0hfCi0K
LSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NCYXNlLmgiCi0KLWNs
YXNzIFRJbmZvU2luazsKLQotY2xhc3MgVERpYWdub3N0aWNzIDogcHVibGljIHBwOjpEaWFnbm9z
dGljcwotewotICBwdWJsaWM6Ci0gICAgVERpYWdub3N0aWNzKFRJbmZvU2luayYgaW5mb1Npbmsp
OwotICAgIHZpcnR1YWwgflREaWFnbm9zdGljcygpOwotCi0gICAgVEluZm9TaW5rJiBpbmZvU2lu
aygpIHsgcmV0dXJuIG1JbmZvU2luazsgfQotCi0gICAgaW50IG51bUVycm9ycygpIGNvbnN0IHsg
cmV0dXJuIG1OdW1FcnJvcnM7IH0KLSAgICBpbnQgbnVtV2FybmluZ3MoKSBjb25zdCB7IHJldHVy
biBtTnVtV2FybmluZ3M7IH0KLQotICAgIHZvaWQgd3JpdGVJbmZvKFNldmVyaXR5IHNldmVyaXR5
LAotICAgICAgICAgICAgICAgICAgIGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAotICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiByZWFzb24sCi0gICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRva2VuLAotICAgICAgICAgICAgICAgICAgIGNvbnN0
IHN0ZDo6c3RyaW5nJiBleHRyYSk7Ci0KLSAgICB2b2lkIHdyaXRlRGVidWcoY29uc3Qgc3RkOjpz
dHJpbmcmIHN0cik7Ci0KLSAgcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBwcmludChJRCBp
ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2Ms
Ci0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KTsKLQotICBw
cml2YXRlOgotICAgIFRJbmZvU2luayYgbUluZm9TaW5rOwotICAgIGludCBtTnVtRXJyb3JzOwot
ICAgIGludCBtTnVtV2FybmluZ3M7Ci19OwotCi0jZW5kaWYgIC8vIENPTVBJTEVSX0RJQUdOT1NU
SUNTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
RGlyZWN0aXZlSGFuZGxlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvRGlyZWN0aXZlSGFuZGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQx
ZjZhYjNhZjViMDE1YTY3MmFiMTZjYmY2ODc4MzQ3MGI0YmM3ZmMuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTYxICsw
LDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxl
ci5oIgotCi0jaW5jbHVkZSA8c3N0cmVhbT4KLQotI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgi
Ci0jaW5jbHVkZSAiY29tcGlsZXIvRGlhZ25vc3RpY3MuaCIKLQotc3RhdGljIFRCZWhhdmlvciBn
ZXRCZWhhdmlvcihjb25zdCBzdGQ6OnN0cmluZyYgc3RyKQotewotICAgIHN0YXRpYyBjb25zdCBz
dGQ6OnN0cmluZyBrUmVxdWlyZSgicmVxdWlyZSIpOwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0
cmluZyBrRW5hYmxlKCJlbmFibGUiKTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0Rp
c2FibGUoImRpc2FibGUiKTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga1dhcm4oIndh
cm4iKTsKLQotICAgIGlmIChzdHIgPT0ga1JlcXVpcmUpIHJldHVybiBFQmhSZXF1aXJlOwotICAg
IGVsc2UgaWYgKHN0ciA9PSBrRW5hYmxlKSByZXR1cm4gRUJoRW5hYmxlOwotICAgIGVsc2UgaWYg
KHN0ciA9PSBrRGlzYWJsZSkgcmV0dXJuIEVCaERpc2FibGU7Ci0gICAgZWxzZSBpZiAoc3RyID09
IGtXYXJuKSByZXR1cm4gRUJoV2FybjsKLSAgICByZXR1cm4gRUJoVW5kZWZpbmVkOwotfQotCi1U
RGlyZWN0aXZlSGFuZGxlcjo6VERpcmVjdGl2ZUhhbmRsZXIoVEV4dGVuc2lvbkJlaGF2aW9yJiBl
eHRCZWhhdmlvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURGlhZ25v
c3RpY3MmIGRpYWdub3N0aWNzKQotICAgIDogbUV4dGVuc2lvbkJlaGF2aW9yKGV4dEJlaGF2aW9y
KSwKLSAgICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykKLXsKLX0KLQotVERpcmVjdGl2ZUhh
bmRsZXI6On5URGlyZWN0aXZlSGFuZGxlcigpCi17Ci19Ci0KLXZvaWQgVERpcmVjdGl2ZUhhbmRs
ZXI6OmhhbmRsZUVycm9yKGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1zZykKLXsKLSAg
ICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6RVJST1IsIGxvYywgbXNn
LCAiIiwgIiIpOwotfQotCi12b2lkIFREaXJlY3RpdmVIYW5kbGVyOjpoYW5kbGVQcmFnbWEoY29u
c3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKQotewotICAgIHN0YXRpYyBj
b25zdCBzdGQ6OnN0cmluZyBrU1RER0woIlNUREdMIik7Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6
c3RyaW5nIGtPcHRpbWl6ZSgib3B0aW1pemUiKTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJp
bmcga0RlYnVnKCJkZWJ1ZyIpOwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrT24oIm9u
Iik7Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtPZmYoIm9mZiIpOwotCi0gICAgYm9v
bCBpbnZhbGlkVmFsdWUgPSBmYWxzZTsKLSAgICBpZiAobmFtZSA9PSBrU1RER0wpCi0gICAgewot
ICAgICAgICAvLyBUaGUgU1RER0wgcHJhZ21hIGlzIHVzZWQgdG8gcmVzZXJ2ZSBwcmFnbWFzIGZv
ciB1c2UgYnkgZnV0dXJlCi0gICAgICAgIC8vIHJldmlzaW9ucyBvZiBHTFNMLiBJZ25vcmUgaXQu
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZWxzZSBpZiAobmFtZSA9PSBrT3B0aW1pemUp
Ci0gICAgewotICAgICAgICBpZiAodmFsdWUgPT0ga09uKSBtUHJhZ21hLm9wdGltaXplID0gdHJ1
ZTsKLSAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0ga09mZikgbVByYWdtYS5vcHRpbWl6ZSA9IGZh
bHNlOwotICAgICAgICBlbHNlIGludmFsaWRWYWx1ZSA9IHRydWU7Ci0gICAgfQotICAgIGVsc2Ug
aWYgKG5hbWUgPT0ga0RlYnVnKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlID09IGtPbikgbVBy
YWdtYS5kZWJ1ZyA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlID09IGtPZmYpIG1QcmFn
bWEuZGVidWcgPSBmYWxzZTsKLSAgICAgICAgZWxzZSBpbnZhbGlkVmFsdWUgPSB0cnVlOwotICAg
IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBtRGlhZ25vc3RpY3MucmVwb3J0KHBwOjpEaWFn
bm9zdGljczo6VU5SRUNPR05JWkVEX1BSQUdNQSwgbG9jLCBuYW1lKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmIChpbnZhbGlkVmFsdWUpCi0gICAgICBtRGlhZ25vc3RpY3Mud3Jp
dGVJbmZvKHBwOjpEaWFnbm9zdGljczo6RVJST1IsIGxvYywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImludmFsaWQgcHJhZ21hIHZhbHVlIiwgdmFsdWUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICInb24nIG9yICdvZmYnIGV4cGVjdGVkIik7Ci19Ci0KLXZvaWQgVERpcmVj
dGl2ZUhhbmRsZXI6OmhhbmRsZUV4dGVuc2lvbihjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxv
YywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0
cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBzdGQ6OnN0cmluZyYgYmVoYXZpb3IpCi17Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5n
IGtFeHRBbGwoImFsbCIpOwotCi0gICAgVEJlaGF2aW9yIGJlaGF2aW9yVmFsID0gZ2V0QmVoYXZp
b3IoYmVoYXZpb3IpOwotICAgIGlmIChiZWhhdmlvclZhbCA9PSBFQmhVbmRlZmluZWQpCi0gICAg
ewotICAgICAgICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6RVJST1Is
IGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVoYXZpb3IiLCBuYW1lLCAi
aW52YWxpZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG5hbWUgPT0ga0V4
dEFsbCkKLSAgICB7Ci0gICAgICAgIGlmIChiZWhhdmlvclZhbCA9PSBFQmhSZXF1aXJlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGlj
czo6RVJST1IsIGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4dGVu
c2lvbiIsIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3Qg
aGF2ZSAncmVxdWlyZScgYmVoYXZpb3IiKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChi
ZWhhdmlvclZhbCA9PSBFQmhFbmFibGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EaWFnbm9z
dGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpFUlJPUiwgbG9jLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZXh0ZW5zaW9uIiwgbmFtZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBoYXZlICdlbmFibGUnIGJlaGF2aW9yIik7Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKFRFeHRl
bnNpb25CZWhhdmlvcjo6aXRlcmF0b3IgaXRlciA9IG1FeHRlbnNpb25CZWhhdmlvci5iZWdpbigp
OwotICAgICAgICAgICAgICAgICBpdGVyICE9IG1FeHRlbnNpb25CZWhhdmlvci5lbmQoKTsgKytp
dGVyKQotICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBURXh0ZW5zaW9uQmVoYXZpb3I6Oml0
ZXJhdG9yIGl0ZXIgPSBtRXh0ZW5zaW9uQmVoYXZpb3IuZmluZChuYW1lKTsKLSAgICBpZiAoaXRl
ciAhPSBtRXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCkpCi0gICAgewotICAgICAgICBpdGVyLT5zZWNv
bmQgPSBiZWhhdmlvclZhbDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHBwOjpEaWFn
bm9zdGljczo6U2V2ZXJpdHkgc2V2ZXJpdHkgPSBwcDo6RGlhZ25vc3RpY3M6OkVSUk9SOwotICAg
IHN3aXRjaCAoYmVoYXZpb3JWYWwpIHsKLSAgICAgIGNhc2UgRUJoUmVxdWlyZToKLSAgICAgICAg
c2V2ZXJpdHkgPSBwcDo6RGlhZ25vc3RpY3M6OkVSUk9SOwotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgRUJoRW5hYmxlOgotICAgICAgY2FzZSBFQmhXYXJuOgotICAgICAgY2FzZSBFQmhEaXNh
YmxlOgotICAgICAgICBzZXZlcml0eSA9IHBwOjpEaWFnbm9zdGljczo6V0FSTklORzsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgbURpYWdub3N0aWNzLndyaXRlSW5mbyhzZXZlcml0eSwgbG9j
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4dGVuc2lvbiIsIG5hbWUsICJpcyBub3Qg
c3VwcG9ydGVkIik7Ci19Ci0KLXZvaWQgVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZVZlcnNpb24o
Y29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCB2ZXJzaW9uKQotewotICAgIHN0YXRpYyBjb25zdCBpbnQga1ZlcnNp
b24gPSAxMDA7Ci0KLSAgICBpZiAodmVyc2lvbiAhPSBrVmVyc2lvbikKLSAgICB7Ci0gICAgICAg
IHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKLSAgICAgICAgc3RyZWFtIDw8IHZlcnNpb247Ci0g
ICAgICAgIHN0ZDo6c3RyaW5nIHN0ciA9IHN0cmVhbS5zdHIoKTsKLSAgICAgICAgbURpYWdub3N0
aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OkVSUk9SLCBsb2MsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInZlcnNpb24gbnVtYmVyIiwgc3RyLCAibm90IHN1cHBvcnRlZCIp
OwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9EaXJlY3RpdmVIYW5kbGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvRGlyZWN0aXZlSGFuZGxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5
NWNhNTlkNmZlNWRlZWE2ZDdmYjQ1ODdlZTUxNmM4M2FiNWQwOWZjLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCww
IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9ESVJFQ1RJVkVfSEFORExFUl9I
XwotI2RlZmluZSBDT01QSUxFUl9ESVJFQ1RJVkVfSEFORExFUl9IXwotCi0jaW5jbHVkZSAiY29t
cGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaCIKLSNpbmNsdWRlICJjb21waWxlci9QcmFnbWEuaCIK
LSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlSGFuZGxlckJhc2UuaCIK
LQotY2xhc3MgVERpYWdub3N0aWNzOwotCi1jbGFzcyBURGlyZWN0aXZlSGFuZGxlciA6IHB1Ymxp
YyBwcDo6RGlyZWN0aXZlSGFuZGxlcgotewotICBwdWJsaWM6Ci0gICAgVERpcmVjdGl2ZUhhbmRs
ZXIoVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciwKLSAgICAgICAgICAgICAgICAgICAg
ICBURGlhZ25vc3RpY3MmIGRpYWdub3N0aWNzKTsKLSAgICB2aXJ0dWFsIH5URGlyZWN0aXZlSGFu
ZGxlcigpOwotCi0gICAgY29uc3QgVFByYWdtYSYgcHJhZ21hKCkgY29uc3QgeyByZXR1cm4gbVBy
YWdtYTsgfQotICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0ZW5zaW9uQmVoYXZpb3Io
KSBjb25zdCB7IHJldHVybiBtRXh0ZW5zaW9uQmVoYXZpb3I7IH0KLQotICAgIHZpcnR1YWwgdm9p
ZCBoYW5kbGVFcnJvcihjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1zZyk7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgaGFuZGxlUHJhZ21hKGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpOwotCi0gICAg
dmlydHVhbCB2b2lkIGhhbmRsZUV4dGVuc2lvbihjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxv
YywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBu
YW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcm
IGJlaGF2aW9yKTsKLQotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVWZXJzaW9uKGNvbnN0IHBwOjpT
b3VyY2VMb2NhdGlvbiYgbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2
ZXJzaW9uKTsKLQotICBwcml2YXRlOgotICAgIFRQcmFnbWEgbVByYWdtYTsKLSAgICBURXh0ZW5z
aW9uQmVoYXZpb3ImIG1FeHRlbnNpb25CZWhhdmlvcjsKLSAgICBURGlhZ25vc3RpY3MmIG1EaWFn
bm9zdGljczsKLX07Ci0KLSNlbmRpZiAgLy8gQ09NUElMRVJfRElSRUNUSVZFX0hBTkRMRVJfSF8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9FeHRlbnNp
b25CZWhhdmlvci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0V4dGVu
c2lvbkJlaGF2aW9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjMTU5NWZiMjEy
MWE4ZWE3NmJiYTIyNTdjNmYzNjM1NmVmMDBlOWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0V4dGVuc2lvbkJlaGF2aW9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIF9FWFRFTlNJT05fQkVIQVZJT1JfSU5DTFVERURfCi0j
ZGVmaW5lIF9FWFRFTlNJT05fQkVIQVZJT1JfSU5DTFVERURfCi0KLSNpbmNsdWRlIDxtYXA+Ci0j
aW5jbHVkZSA8c3RyaW5nPgotCi10eXBlZGVmIGVudW0KLXsKLSAgICBFQmhSZXF1aXJlLAotICAg
IEVCaEVuYWJsZSwKLSAgICBFQmhXYXJuLAotICAgIEVCaERpc2FibGUsCi0gICAgRUJoVW5kZWZp
bmVkCi19IFRCZWhhdmlvcjsKLQotaW5saW5lIGNvbnN0IGNoYXIqIGdldEJlaGF2aW9yU3RyaW5n
KFRCZWhhdmlvciBiKQotewotICAgIHN3aXRjaChiKQotICAgIHsKLSAgICAgIGNhc2UgRUJoUmVx
dWlyZTogcmV0dXJuICJyZXF1aXJlIjsKLSAgICAgIGNhc2UgRUJoRW5hYmxlOiByZXR1cm4gImVu
YWJsZSI7Ci0gICAgICBjYXNlIEVCaFdhcm46IHJldHVybiAid2FybiI7Ci0gICAgICBjYXNlIEVC
aERpc2FibGU6IHJldHVybiAiZGlzYWJsZSI7Ci0gICAgICBkZWZhdWx0OiByZXR1cm4gTlVMTDsK
LSAgICB9Ci19Ci0KLS8vIE1hcHBpbmcgYmV0d2VlbiBleHRlbnNpb24gbmFtZSBhbmQgYmVoYXZp
b3IuCi10eXBlZGVmIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBUQmVoYXZpb3I+IFRFeHRlbnNpb25C
ZWhhdmlvcjsKLQotI2VuZGlmIC8vIF9FWFRFTlNJT05fVEFCTEVfSU5DTFVERURfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRm9yTG9vcFVucm9sbC5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRm9yTG9vcFVucm9sbC5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3YTEzZWFiYWJiMTIyMjA0MDAwZmM1
MTlkNjY5ZGZmODRjMmMzZDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJv
bGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjE1ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLSNpbmNsdWRlICJjb21waWxlci9Gb3JMb29wVW5yb2xsLmgiCi0KLW5hbWVzcGFjZSB7Ci0K
LWNsYXNzIEludGVnZXJGb3JMb29wVW5yb2xsTWFya2VyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJz
ZXIgewotcHVibGljOgotCi0gICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCwgVEludGVy
bUxvb3AqIG5vZGUpCi0gICAgewotICAgICAgICAvLyBUaGlzIGlzIGNhbGxlZCBhZnRlciBWYWxp
ZGF0ZUxpbWl0YXRpb25zIHBhc3MsIHNvIGFsbCB0aGUgQVNTRVJUCi0gICAgICAgIC8vIHNob3Vs
ZCBuZXZlciBmYWlsLgotICAgICAgICAvLyBTZWUgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRh
dGVGb3JMb29wSW5pdCgpLgotICAgICAgICBBU1NFUlQobm9kZSk7Ci0gICAgICAgIEFTU0VSVChu
b2RlLT5nZXRUeXBlKCkgPT0gRUxvb3BGb3IpOwotICAgICAgICBBU1NFUlQobm9kZS0+Z2V0SW5p
dCgpKTsKLSAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSogZGVjbCA9IG5vZGUtPmdldEluaXQoKS0+
Z2V0QXNBZ2dyZWdhdGUoKTsKLSAgICAgICAgQVNTRVJUKGRlY2wgJiYgZGVjbC0+Z2V0T3AoKSA9
PSBFT3BEZWNsYXJhdGlvbik7Ci0gICAgICAgIFRJbnRlcm1TZXF1ZW5jZSYgZGVjbFNlcSA9IGRl
Y2wtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAgIEFTU0VSVChkZWNsU2VxLnNpemUoKSA9PSAxKTsK
LSAgICAgICAgVEludGVybUJpbmFyeSogZGVjbEluaXQgPSBkZWNsU2VxWzBdLT5nZXRBc0JpbmFy
eU5vZGUoKTsKLSAgICAgICAgQVNTRVJUKGRlY2xJbml0ICYmIGRlY2xJbml0LT5nZXRPcCgpID09
IEVPcEluaXRpYWxpemUpOwotICAgICAgICBBU1NFUlQoZGVjbEluaXQtPmdldExlZnQoKSk7Ci0g
ICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGRlY2xJbml0LT5nZXRMZWZ0KCktPmdldEFz
U3ltYm9sTm9kZSgpOwotICAgICAgICBBU1NFUlQoc3ltYm9sKTsKLSAgICAgICAgVEJhc2ljVHlw
ZSB0eXBlID0gc3ltYm9sLT5nZXRCYXNpY1R5cGUoKTsKLSAgICAgICAgQVNTRVJUKHR5cGUgPT0g
RWJ0SW50IHx8IHR5cGUgPT0gRWJ0RmxvYXQpOwotICAgICAgICBpZiAodHlwZSA9PSBFYnRJbnQp
Ci0gICAgICAgICAgICBub2RlLT5zZXRVbnJvbGxGbGFnKHRydWUpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLX07Ci0KLX0gIC8vIGFub255bW91cyBuYW1lcHNhY2UKLQotdm9pZCBG
b3JMb29wVW5yb2xsOjpGaWxsTG9vcEluZGV4SW5mbyhUSW50ZXJtTG9vcCogbm9kZSwgVExvb3BJ
bmRleEluZm8mIGluZm8pCi17Ci0gICAgQVNTRVJUKG5vZGUtPmdldFR5cGUoKSA9PSBFTG9vcEZv
cik7Ci0gICAgQVNTRVJUKG5vZGUtPmdldFVucm9sbEZsYWcoKSk7Ci0KLSAgICBUSW50ZXJtTm9k
ZSogaW5pdCA9IG5vZGUtPmdldEluaXQoKTsKLSAgICBBU1NFUlQoaW5pdCAhPSBOVUxMKTsKLSAg
ICBUSW50ZXJtQWdncmVnYXRlKiBkZWNsID0gaW5pdC0+Z2V0QXNBZ2dyZWdhdGUoKTsKLSAgICBB
U1NFUlQoKGRlY2wgIT0gTlVMTCkgJiYgKGRlY2wtPmdldE9wKCkgPT0gRU9wRGVjbGFyYXRpb24p
KTsKLSAgICBUSW50ZXJtU2VxdWVuY2UmIGRlY2xTZXEgPSBkZWNsLT5nZXRTZXF1ZW5jZSgpOwot
ICAgIEFTU0VSVChkZWNsU2VxLnNpemUoKSA9PSAxKTsKLSAgICBUSW50ZXJtQmluYXJ5KiBkZWNs
SW5pdCA9IGRlY2xTZXFbMF0tPmdldEFzQmluYXJ5Tm9kZSgpOwotICAgIEFTU0VSVCgoZGVjbElu
aXQgIT0gTlVMTCkgJiYgKGRlY2xJbml0LT5nZXRPcCgpID09IEVPcEluaXRpYWxpemUpKTsKLSAg
ICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBkZWNsSW5pdC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJv
bE5vZGUoKTsKLSAgICBBU1NFUlQoc3ltYm9sICE9IE5VTEwpOwotICAgIEFTU0VSVChzeW1ib2wt
PmdldEJhc2ljVHlwZSgpID09IEVidEludCk7Ci0KLSAgICBpbmZvLmlkID0gc3ltYm9sLT5nZXRJ
ZCgpOwotCi0gICAgQVNTRVJUKGRlY2xJbml0LT5nZXRSaWdodCgpICE9IE5VTEwpOwotICAgIFRJ
bnRlcm1Db25zdGFudFVuaW9uKiBpbml0Tm9kZSA9IGRlY2xJbml0LT5nZXRSaWdodCgpLT5nZXRB
c0NvbnN0YW50VW5pb24oKTsKLSAgICBBU1NFUlQoaW5pdE5vZGUgIT0gTlVMTCk7Ci0KLSAgICBp
bmZvLmluaXRWYWx1ZSA9IGV2YWx1YXRlSW50Q29uc3RhbnQoaW5pdE5vZGUpOwotICAgIGluZm8u
Y3VycmVudFZhbHVlID0gaW5mby5pbml0VmFsdWU7Ci0KLSAgICBUSW50ZXJtTm9kZSogY29uZCA9
IG5vZGUtPmdldENvbmRpdGlvbigpOwotICAgIEFTU0VSVChjb25kICE9IE5VTEwpOwotICAgIFRJ
bnRlcm1CaW5hcnkqIGJpbk9wID0gY29uZC0+Z2V0QXNCaW5hcnlOb2RlKCk7Ci0gICAgQVNTRVJU
KGJpbk9wICE9IE5VTEwpOwotICAgIEFTU0VSVChiaW5PcC0+Z2V0UmlnaHQoKSAhPSBOVUxMKTsK
LSAgICBBU1NFUlQoYmluT3AtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpICE9IE5V
TEwpOwotCi0gICAgaW5mby5pbmNyZW1lbnRWYWx1ZSA9IGdldExvb3BJbmNyZW1lbnQobm9kZSk7
Ci0gICAgaW5mby5zdG9wVmFsdWUgPSBldmFsdWF0ZUludENvbnN0YW50KAotICAgICAgICBiaW5P
cC0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCkpOwotICAgIGluZm8ub3AgPSBiaW5P
cC0+Z2V0T3AoKTsKLX0KLQotdm9pZCBGb3JMb29wVW5yb2xsOjpTdGVwKCkKLXsKLSAgICBBU1NF
UlQobUxvb3BJbmRleFN0YWNrLnNpemUoKSA+IDApOwotICAgIFRMb29wSW5kZXhJbmZvJiBpbmZv
ID0gbUxvb3BJbmRleFN0YWNrW21Mb29wSW5kZXhTdGFjay5zaXplKCkgLSAxXTsKLSAgICBpbmZv
LmN1cnJlbnRWYWx1ZSArPSBpbmZvLmluY3JlbWVudFZhbHVlOwotfQotCi1ib29sIEZvckxvb3BV
bnJvbGw6OlNhdGlzZmllc0xvb3BDb25kaXRpb24oKQotewotICAgIEFTU0VSVChtTG9vcEluZGV4
U3RhY2suc2l6ZSgpID4gMCk7Ci0gICAgVExvb3BJbmRleEluZm8mIGluZm8gPSBtTG9vcEluZGV4
U3RhY2tbbUxvb3BJbmRleFN0YWNrLnNpemUoKSAtIDFdOwotICAgIC8vIFJlbGF0aW9uYWwgb3Bl
cmF0b3IgaXMgb25lIG9mOiA+ID49IDwgPD0gPT0gb3IgIT0uCi0gICAgc3dpdGNoIChpbmZvLm9w
KSB7Ci0gICAgICBjYXNlIEVPcEVxdWFsOgotICAgICAgICByZXR1cm4gKGluZm8uY3VycmVudFZh
bHVlID09IGluZm8uc3RvcFZhbHVlKTsKLSAgICAgIGNhc2UgRU9wTm90RXF1YWw6Ci0gICAgICAg
IHJldHVybiAoaW5mby5jdXJyZW50VmFsdWUgIT0gaW5mby5zdG9wVmFsdWUpOwotICAgICAgY2Fz
ZSBFT3BMZXNzVGhhbjoKLSAgICAgICAgcmV0dXJuIChpbmZvLmN1cnJlbnRWYWx1ZSA8IGluZm8u
c3RvcFZhbHVlKTsKLSAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46Ci0gICAgICAgIHJldHVybiAo
aW5mby5jdXJyZW50VmFsdWUgPiBpbmZvLnN0b3BWYWx1ZSk7Ci0gICAgICBjYXNlIEVPcExlc3NU
aGFuRXF1YWw6Ci0gICAgICAgIHJldHVybiAoaW5mby5jdXJyZW50VmFsdWUgPD0gaW5mby5zdG9w
VmFsdWUpOwotICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgotICAgICAgICByZXR1cm4g
KGluZm8uY3VycmVudFZhbHVlID49IGluZm8uc3RvcFZhbHVlKTsKLSAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBGb3JMb29wVW5yb2xsOjpOZWVkc1RvUmVwbGFjZVN5bWJvbFdpdGhWYWx1ZShUSW50ZXJtU3lt
Ym9sKiBzeW1ib2wpCi17Ci0gICAgZm9yIChUVmVjdG9yPFRMb29wSW5kZXhJbmZvPjo6aXRlcmF0
b3IgaSA9IG1Mb29wSW5kZXhTdGFjay5iZWdpbigpOwotICAgICAgICAgaSAhPSBtTG9vcEluZGV4
U3RhY2suZW5kKCk7Ci0gICAgICAgICArK2kpIHsKLSAgICAgICAgaWYgKGktPmlkID09IHN5bWJv
bC0+Z2V0SWQoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLWludCBGb3JMb29wVW5yb2xsOjpHZXRMb29wSW5kZXhWYWx1ZShUSW50ZXJt
U3ltYm9sKiBzeW1ib2wpCi17Ci0gICAgZm9yIChUVmVjdG9yPFRMb29wSW5kZXhJbmZvPjo6aXRl
cmF0b3IgaSA9IG1Mb29wSW5kZXhTdGFjay5iZWdpbigpOwotICAgICAgICAgaSAhPSBtTG9vcElu
ZGV4U3RhY2suZW5kKCk7Ci0gICAgICAgICArK2kpIHsKLSAgICAgICAgaWYgKGktPmlkID09IHN5
bWJvbC0+Z2V0SWQoKSkKLSAgICAgICAgICAgIHJldHVybiBpLT5jdXJyZW50VmFsdWU7Ci0gICAg
fQotICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEZvckxv
b3BVbnJvbGw6OlB1c2goVExvb3BJbmRleEluZm8mIGluZm8pCi17Ci0gICAgbUxvb3BJbmRleFN0
YWNrLnB1c2hfYmFjayhpbmZvKTsKLX0KLQotdm9pZCBGb3JMb29wVW5yb2xsOjpQb3AoKQotewot
ICAgIG1Mb29wSW5kZXhTdGFjay5wb3BfYmFjaygpOwotfQotCi0vLyBzdGF0aWMKLXZvaWQgRm9y
TG9vcFVucm9sbDo6TWFya0Zvckxvb3BzV2l0aEludGVnZXJJbmRpY2VzRm9yVW5yb2xsaW5nKAot
ICAgIFRJbnRlcm1Ob2RlKiByb290KQotewotICAgIEFTU0VSVChyb290KTsKLQotICAgIEludGVn
ZXJGb3JMb29wVW5yb2xsTWFya2VyIG1hcmtlcjsKLSAgICByb290LT50cmF2ZXJzZSgmbWFya2Vy
KTsKLX0KLQotaW50IEZvckxvb3BVbnJvbGw6OmdldExvb3BJbmNyZW1lbnQoVEludGVybUxvb3Aq
IG5vZGUpCi17Ci0gICAgVEludGVybU5vZGUqIGV4cHIgPSBub2RlLT5nZXRFeHByZXNzaW9uKCk7
Ci0gICAgQVNTRVJUKGV4cHIgIT0gTlVMTCk7Ci0gICAgLy8gZm9yIGV4cHJlc3Npb24gaGFzIG9u
ZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1zOgotICAgIC8vICAgICBsb29wX2luZGV4KysKLSAgICAv
LyAgICAgbG9vcF9pbmRleC0tCi0gICAgLy8gICAgIGxvb3BfaW5kZXggKz0gY29uc3RhbnRfZXhw
cmVzc2lvbgotICAgIC8vICAgICBsb29wX2luZGV4IC09IGNvbnN0YW50X2V4cHJlc3Npb24KLSAg
ICAvLyAgICAgKytsb29wX2luZGV4Ci0gICAgLy8gICAgIC0tbG9vcF9pbmRleAotICAgIC8vIFRo
ZSBsYXN0IHR3byBmb3JtcyBhcmUgbm90IHNwZWNpZmllZCBpbiB0aGUgc3BlYywgYnV0IEkgYW0g
YXNzdW1pbmcKLSAgICAvLyBpdHMgYW4gb3ZlcnNpZ2h0LgotICAgIFRJbnRlcm1VbmFyeSogdW5P
cCA9IGV4cHItPmdldEFzVW5hcnlOb2RlKCk7Ci0gICAgVEludGVybUJpbmFyeSogYmluT3AgPSB1
bk9wID8gTlVMTCA6IGV4cHItPmdldEFzQmluYXJ5Tm9kZSgpOwotCi0gICAgVE9wZXJhdG9yIG9w
ID0gRU9wTnVsbDsKLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogaW5jcmVtZW50Tm9kZSA9IE5V
TEw7Ci0gICAgaWYgKHVuT3AgIT0gTlVMTCkgewotICAgICAgICBvcCA9IHVuT3AtPmdldE9wKCk7
Ci0gICAgfSBlbHNlIGlmIChiaW5PcCAhPSBOVUxMKSB7Ci0gICAgICAgIG9wID0gYmluT3AtPmdl
dE9wKCk7Ci0gICAgICAgIEFTU0VSVChiaW5PcC0+Z2V0UmlnaHQoKSAhPSBOVUxMKTsKLSAgICAg
ICAgaW5jcmVtZW50Tm9kZSA9IGJpbk9wLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24o
KTsKLSAgICAgICAgQVNTRVJUKGluY3JlbWVudE5vZGUgIT0gTlVMTCk7Ci0gICAgfQotCi0gICAg
aW50IGluY3JlbWVudCA9IDA7Ci0gICAgLy8gVGhlIG9wZXJhdG9yIGlzIG9uZSBvZjogKysgLS0g
Kz0gLT0uCi0gICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6
Ci0gICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OgotICAgICAgICAgICAgQVNTRVJUKCh1bk9w
ICE9IE5VTEwpICYmIChiaW5PcCA9PSBOVUxMKSk7Ci0gICAgICAgICAgICBpbmNyZW1lbnQgPSAx
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDoKLSAg
ICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6Ci0gICAgICAgICAgICBBU1NFUlQoKHVuT3AgIT0g
TlVMTCkgJiYgKGJpbk9wID09IE5VTEwpKTsKLSAgICAgICAgICAgIGluY3JlbWVudCA9IC0xOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQWRkQXNzaWduOgotICAgICAgICAg
ICAgQVNTRVJUKCh1bk9wID09IE5VTEwpICYmIChiaW5PcCAhPSBOVUxMKSk7Ci0gICAgICAgICAg
ICBpbmNyZW1lbnQgPSBldmFsdWF0ZUludENvbnN0YW50KGluY3JlbWVudE5vZGUpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wU3ViQXNzaWduOgotICAgICAgICAgICAgQVNT
RVJUKCh1bk9wID09IE5VTEwpICYmIChiaW5PcCAhPSBOVUxMKSk7Ci0gICAgICAgICAgICBpbmNy
ZW1lbnQgPSAtIGV2YWx1YXRlSW50Q29uc3RhbnQoaW5jcmVtZW50Tm9kZSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGluY3JlbWVudDsKLX0KLQotaW50IEZvckxvb3BVbnJvbGw6OmV2
YWx1YXRlSW50Q29uc3RhbnQoVEludGVybUNvbnN0YW50VW5pb24qIG5vZGUpCi17Ci0gICAgQVNT
RVJUKChub2RlICE9IE5VTEwpICYmIChub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpICE9IE5V
TEwpKTsKLSAgICByZXR1cm4gbm9kZS0+Z2V0SUNvbnN0KDApOwotfQotCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRm9yTG9vcFVucm9sbC5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJvbGwuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTgwMGUyNWIxZjBjMWE0ODdhMzczMWFlZTczMTYyMmNi
MjI4ZmUxZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRm9yTG9vcFVucm9sbC5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21w
aWxlci9pbnRlcm1lZGlhdGUuaCIKLQotc3RydWN0IFRMb29wSW5kZXhJbmZvIHsKLSAgICBpbnQg
aWQ7Ci0gICAgaW50IGluaXRWYWx1ZTsKLSAgICBpbnQgc3RvcFZhbHVlOwotICAgIGludCBpbmNy
ZW1lbnRWYWx1ZTsKLSAgICBUT3BlcmF0b3Igb3A7Ci0gICAgaW50IGN1cnJlbnRWYWx1ZTsKLX07
Ci0KLWNsYXNzIEZvckxvb3BVbnJvbGwgewotcHVibGljOgotICAgIEZvckxvb3BVbnJvbGwoKSB7
IH0KLQotICAgIHZvaWQgRmlsbExvb3BJbmRleEluZm8oVEludGVybUxvb3AqIG5vZGUsIFRMb29w
SW5kZXhJbmZvJiBpbmZvKTsKLQotICAgIC8vIFVwZGF0ZSB0aGUgaW5mby5jdXJyZW50VmFsdWUg
Zm9yIHRoZSBuZXh0IGxvb3AgaXRlcmF0aW9uLgotICAgIHZvaWQgU3RlcCgpOwotCi0gICAgLy8g
UmV0dXJuIGZhbHNlIGlmIGxvb3AgY29uZGl0aW9uIGlzIG5vIGxvbmdlciBzYXRpc2ZpZWQuCi0g
ICAgYm9vbCBTYXRpc2ZpZXNMb29wQ29uZGl0aW9uKCk7Ci0KLSAgICAvLyBDaGVjayBpZiB0aGUg
c3ltYm9sIGlzIHRoZSBpbmRleCBvZiBhIGxvb3AgdGhhdCdzIHVucm9sbGVkLgotICAgIGJvb2wg
TmVlZHNUb1JlcGxhY2VTeW1ib2xXaXRoVmFsdWUoVEludGVybVN5bWJvbCogc3ltYm9sKTsKLQot
ICAgIC8vIFJldHVybiB0aGUgY3VycmVudCB2YWx1ZSBvZiBhIGdpdmVuIGxvb3AgaW5kZXggc3lt
Ym9sLgotICAgIGludCBHZXRMb29wSW5kZXhWYWx1ZShUSW50ZXJtU3ltYm9sKiBzeW1ib2wpOwot
Ci0gICAgdm9pZCBQdXNoKFRMb29wSW5kZXhJbmZvJiBpbmZvKTsKLSAgICB2b2lkIFBvcCgpOwot
Ci0gICAgc3RhdGljIHZvaWQgTWFya0Zvckxvb3BzV2l0aEludGVnZXJJbmRpY2VzRm9yVW5yb2xs
aW5nKFRJbnRlcm1Ob2RlKiByb290KTsKLQotcHJpdmF0ZToKLSAgICBpbnQgZ2V0TG9vcEluY3Jl
bWVudChUSW50ZXJtTG9vcCogbm9kZSk7Ci0KLSAgICBpbnQgZXZhbHVhdGVJbnRDb25zdGFudChU
SW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSk7Ci0KLSAgICBUVmVjdG9yPFRMb29wSW5kZXhJbmZv
PiBtTG9vcEluZGV4U3RhY2s7Ci19OwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvSGFzaE5hbWVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvSGFzaE5hbWVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQy
MTQxZTJkODUzN2YwMTFlY2FhYzIyMDY2NTlhZDUyNDlmMjc4MjcuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0hhc2hOYW1lcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9IQVNIX05BTUVTX0hfCi0jZGVmaW5l
IENPTVBJTEVSX0hBU0hfTkFNRVNfSF8KLQotI2luY2x1ZGUgPG1hcD4KLQotI2luY2x1ZGUgImNv
bXBpbGVyL2ludGVybWVkaWF0ZS5oIgotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgot
Ci0jZGVmaW5lIEhBU0hFRF9OQU1FX1BSRUZJWCAid2ViZ2xfIgotCi10eXBlZGVmIHN0ZDo6bWFw
PFRQZXJzaXN0U3RyaW5nLCBUUGVyc2lzdFN0cmluZz4gTmFtZU1hcDsKLQotI2VuZGlmICAvLyBD
T01QSUxFUl9IQVNIX05BTUVTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvSW5mb1NpbmsuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0luZm9TaW5rLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDIw
YTZjMDE3NWFjYzRiZmY0OGQ3MmE0ZDEyYjcyMWE2NmJhMzIwMy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvSW5mb1NpbmsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCi0KLXZvaWQg
VEluZm9TaW5rQmFzZTo6cHJlZml4KFRQcmVmaXhUeXBlIHApIHsKLSAgICBzd2l0Y2gocCkgewot
ICAgICAgICBjYXNlIEVQcmVmaXhOb25lOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRVByZWZpeFdhcm5pbmc6Ci0gICAgICAgICAgICBzaW5rLmFwcGVuZCgiV0FSTklORzogIik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFUHJlZml4RXJyb3I6Ci0gICAgICAg
ICAgICBzaW5rLmFwcGVuZCgiRVJST1I6ICIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRVByZWZpeEludGVybmFsRXJyb3I6Ci0gICAgICAgICAgICBzaW5rLmFwcGVuZCgiSU5U
RVJOQUwgRVJST1I6ICIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVByZWZp
eFVuaW1wbGVtZW50ZWQ6Ci0gICAgICAgICAgICBzaW5rLmFwcGVuZCgiVU5JTVBMRU1FTlRFRDog
Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFUHJlZml4Tm90ZToKLSAgICAg
ICAgICAgIHNpbmsuYXBwZW5kKCJOT1RFOiAiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgc2luay5hcHBlbmQoIlVOS09XTiBFUlJPUjogIik7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgVEluZm9TaW5rQmFzZTo6bG9jYXRp
b24oaW50IGZpbGUsIGludCBsaW5lKSB7Ci0gICAgVFBlcnNpc3RTdHJpbmdTdHJlYW0gc3RyZWFt
OwotICAgIGlmIChsaW5lKQotICAgICAgICBzdHJlYW0gPDwgZmlsZSA8PCAiOiIgPDwgbGluZTsK
LSAgICBlbHNlCi0gICAgICAgIHN0cmVhbSA8PCBmaWxlIDw8ICI6PyAiOwotICAgIHN0cmVhbSA8
PCAiOiAiOwotCi0gICAgc2luay5hcHBlbmQoc3RyZWFtLnN0cigpKTsKLX0KLQotdm9pZCBUSW5m
b1NpbmtCYXNlOjpsb2NhdGlvbihjb25zdCBUU291cmNlTG9jJiBsb2MpIHsKLSAgICBsb2NhdGlv
bihsb2MuZmlyc3RfZmlsZSwgbG9jLmZpcnN0X2xpbmUpOwotfQotCi12b2lkIFRJbmZvU2lua0Jh
c2U6Om1lc3NhZ2UoVFByZWZpeFR5cGUgcCwgY29uc3QgVFNvdXJjZUxvYyYgbG9jLCBjb25zdCBj
aGFyKiBtKSB7Ci0gICAgcHJlZml4KHApOwotICAgIGxvY2F0aW9uKGxvYyk7Ci0gICAgc2luay5h
cHBlbmQobSk7Ci0gICAgc2luay5hcHBlbmQoIlxuIik7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5mb1NpbmsuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9JbmZvU2luay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiZTBkZGZmZTMxZjVhMmZlOTdkNzg2ZmQwNjhjNzQxZTZhNWZlYTY1Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9JbmZvU2luay5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICsw
LDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgX0lORk9TSU5LX0lOQ0xVREVEXwot
I2RlZmluZSBfSU5GT1NJTktfSU5DTFVERURfCi0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVk
ZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSAiY29tcGlsZXIvQ29tbW9uLmgiCi0KLS8vIFJldHVybnMg
dGhlIGZyYWN0aW9uYWwgcGFydCBvZiB0aGUgZ2l2ZW4gZmxvYXRpbmctcG9pbnQgbnVtYmVyLgot
aW5saW5lIGZsb2F0IGZyYWN0aW9uYWxQYXJ0KGZsb2F0IGYpIHsKLSAgZmxvYXQgaW50UGFydCA9
IDAuMGY7Ci0gIHJldHVybiBtb2RmZihmLCAmaW50UGFydCk7Ci19Ci0KLS8vCi0vLyBUUHJlZml4
VHlwZSBpcyB1c2VkIHRvIGNlbnRyYWxpemUgaG93IGluZm8gbG9nIG1lc3NhZ2VzIHN0YXJ0Lgot
Ly8gU2VlIGJlbG93LgotLy8KLWVudW0gVFByZWZpeFR5cGUgewotICAgIEVQcmVmaXhOb25lLAot
ICAgIEVQcmVmaXhXYXJuaW5nLAotICAgIEVQcmVmaXhFcnJvciwKLSAgICBFUHJlZml4SW50ZXJu
YWxFcnJvciwKLSAgICBFUHJlZml4VW5pbXBsZW1lbnRlZCwKLSAgICBFUHJlZml4Tm90ZQotfTsK
LQotLy8KLS8vIEVuY2Fwc3VsYXRlIGluZm8gbG9ncyBmb3IgYWxsIG9iamVjdHMgdGhhdCBoYXZl
IHRoZW0uCi0vLwotLy8gVGhlIG1ldGhvZHMgYXJlIGEgZ2VuZXJhbCBzZXQgb2YgdG9vbHMgZm9y
IGdldHRpbmcgYSB2YXJpZXR5IG9mCi0vLyBtZXNzYWdlcyBhbmQgdHlwZXMgaW5zZXJ0ZWQgaW50
byB0aGUgbG9nLgotLy8KLWNsYXNzIFRJbmZvU2lua0Jhc2UgewotcHVibGljOgotICAgIFRJbmZv
U2lua0Jhc2UoKSB7fQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgVEluZm9TaW5r
QmFzZSYgb3BlcmF0b3I8PChjb25zdCBUJiB0KSB7Ci0gICAgICAgIFRQZXJzaXN0U3RyaW5nU3Ry
ZWFtIHN0cmVhbTsKLSAgICAgICAgc3RyZWFtIDw8IHQ7Ci0gICAgICAgIHNpbmsuYXBwZW5kKHN0
cmVhbS5zdHIoKSk7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgLy8gT3ZlcnJp
ZGUgPDwgb3BlcmF0b3IgZm9yIHNwZWNpZmljIHR5cGVzLiBJdCBpcyBmYXN0ZXIgdG8gYXBwZW5k
IHN0cmluZ3MKLSAgICAvLyBhbmQgY2hhcmFjdGVycyBkaXJlY3RseSB0byB0aGUgc2luay4KLSAg
ICBUSW5mb1NpbmtCYXNlJiBvcGVyYXRvcjw8KGNoYXIgYykgewotICAgICAgICBzaW5rLmFwcGVu
ZCgxLCBjKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLSAgICBUSW5mb1NpbmtCYXNl
JiBvcGVyYXRvcjw8KGNvbnN0IGNoYXIqIHN0cikgewotICAgICAgICBzaW5rLmFwcGVuZChzdHIp
OwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIFRJbmZvU2lua0Jhc2UmIG9wZXJh
dG9yPDwoY29uc3QgVFBlcnNpc3RTdHJpbmcmIHN0cikgewotICAgICAgICBzaW5rLmFwcGVuZChz
dHIpOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIFRJbmZvU2lua0Jhc2UmIG9w
ZXJhdG9yPDwoY29uc3QgVFN0cmluZyYgc3RyKSB7Ci0gICAgICAgIHNpbmsuYXBwZW5kKHN0ci5j
X3N0cigpKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLSAgICAvLyBNYWtlIHN1cmUg
ZmxvYXRzIGFyZSB3cml0dGVuIHdpdGggY29ycmVjdCBwcmVjaXNpb24uCi0gICAgVEluZm9TaW5r
QmFzZSYgb3BlcmF0b3I8PChmbG9hdCBmKSB7Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGF0
IGxlYXN0IG9uZSBkZWNpbWFsIHBvaW50IGlzIHdyaXR0ZW4uIElmIGEgbnVtYmVyCi0gICAgICAg
IC8vIGRvZXMgbm90IGhhdmUgYSBmcmFjdGlvbmFsIHBhcnQsIHRoZSBkZWZhdWx0IHByZWNpc2lv
biBmb3JtYXQgZG9lcwotICAgICAgICAvLyBub3Qgd3JpdGUgdGhlIGRlY2ltYWwgcG9ydGlvbiB3
aGljaCBnZXRzIGludGVycHJldGVkIGFzIGludGVnZXIgYnkKLSAgICAgICAgLy8gdGhlIGNvbXBp
bGVyLgotICAgICAgICBUUGVyc2lzdFN0cmluZ1N0cmVhbSBzdHJlYW07Ci0gICAgICAgIGlmIChm
cmFjdGlvbmFsUGFydChmKSA9PSAwLjBmKSB7Ci0gICAgICAgICAgICBzdHJlYW0ucHJlY2lzaW9u
KDEpOwotICAgICAgICAgICAgc3RyZWFtIDw8IHN0ZDo6c2hvd3BvaW50IDw8IHN0ZDo6Zml4ZWQg
PDwgZjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0cmVhbS51bnNldGYoc3RkOjpp
b3M6OmZpeGVkKTsKLSAgICAgICAgICAgIHN0cmVhbS51bnNldGYoc3RkOjppb3M6OnNjaWVudGlm
aWMpOwotICAgICAgICAgICAgc3RyZWFtLnByZWNpc2lvbig4KTsKLSAgICAgICAgICAgIHN0cmVh
bSA8PCBmOwotICAgICAgICB9Ci0gICAgICAgIHNpbmsuYXBwZW5kKHN0cmVhbS5zdHIoKSk7Ci0g
ICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgLy8gV3JpdGUgYm9vbGVhbiB2YWx1ZXMg
YXMgdGhlaXIgbmFtZXMgaW5zdGVhZCBvZiBpbnRlZ3JhbCB2YWx1ZS4KLSAgICBUSW5mb1NpbmtC
YXNlJiBvcGVyYXRvcjw8KGJvb2wgYikgewotICAgICAgICBjb25zdCBjaGFyKiBzdHIgPSBiID8g
InRydWUiIDogImZhbHNlIjsKLSAgICAgICAgc2luay5hcHBlbmQoc3RyKTsKLSAgICAgICAgcmV0
dXJuICp0aGlzOwotICAgIH0KLQotICAgIHZvaWQgZXJhc2UoKSB7IHNpbmsuY2xlYXIoKTsgfQot
ICAgIGludCBzaXplKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihzaW5rLnNpemUoKSk7IH0K
LQotICAgIGNvbnN0IFRQZXJzaXN0U3RyaW5nJiBzdHIoKSBjb25zdCB7IHJldHVybiBzaW5rOyB9
Ci0gICAgY29uc3QgY2hhciogY19zdHIoKSBjb25zdCB7IHJldHVybiBzaW5rLmNfc3RyKCk7IH0K
LQotICAgIHZvaWQgcHJlZml4KFRQcmVmaXhUeXBlIHApOwotICAgIHZvaWQgbG9jYXRpb24oaW50
IGZpbGUsIGludCBsaW5lKTsKLSAgICB2b2lkIGxvY2F0aW9uKGNvbnN0IFRTb3VyY2VMb2MmIGxv
Yyk7Ci0gICAgdm9pZCBtZXNzYWdlKFRQcmVmaXhUeXBlIHAsIGNvbnN0IFRTb3VyY2VMb2MmIGxv
YywgY29uc3QgY2hhciogbSk7Ci0KLXByaXZhdGU6Ci0gICAgVFBlcnNpc3RTdHJpbmcgc2luazsK
LX07Ci0KLWNsYXNzIFRJbmZvU2luayB7Ci1wdWJsaWM6Ci0gICAgVEluZm9TaW5rQmFzZSBpbmZv
OwotICAgIFRJbmZvU2lua0Jhc2UgZGVidWc7Ci0gICAgVEluZm9TaW5rQmFzZSBvYmo7Ci19Owot
Ci0jZW5kaWYgLy8gX0lORk9TSU5LX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAyY2RiZTE3YWE2ZDVkYjAzNjBkZWI2YzkxMGQxZGYwNjc2MDgzZDU4Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDU2NCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLwotLy8gQ3JlYXRlIHN0cmluZ3Mg
dGhhdCBkZWNsYXJlIGJ1aWx0LWluIGRlZmluaXRpb25zLCBhZGQgYnVpbHQtaW5zIHRoYXQKLS8v
IGNhbm5vdCBiZSBleHByZXNzZWQgaW4gdGhlIGZpbGVzLCBhbmQgZXN0YWJsaXNoIG1hcHBpbmdz
IGJldHdlZW4gCi0vLyBidWlsdC1pbiBmdW5jdGlvbnMgYW5kIG9wZXJhdG9ycy4KLS8vCi0KLSNp
bmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplLmgiCi0KLSNpbmNsdWRlICJjb21waWxlci9pbnRl
cm1lZGlhdGUuaCIKLQotdm9pZCBJbnNlcnRCdWlsdEluRnVuY3Rpb25zKFNoU2hhZGVyVHlwZSB0
eXBlLCBTaFNoYWRlclNwZWMgc3BlYywgY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzICZyZXNvdXJj
ZXMsIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUpCi17Ci0gICAgVFR5cGUgKmZsb2F0MSA9IG5l
dyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDEpOwotICAgIFRUeXBl
ICpmbG9hdDIgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAy
KTsKLSAgICBUVHlwZSAqZmxvYXQzID0gbmV3IFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQs
IEV2cUdsb2JhbCwgMyk7Ci0gICAgVFR5cGUgKmZsb2F0NCA9IG5ldyBUVHlwZShFYnRGbG9hdCwg
RWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDQpOwotCi0gICAgVFR5cGUgKmludDIgPSBuZXcgVFR5
cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMik7Ci0gICAgVFR5cGUgKmludDMg
PSBuZXcgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMyk7Ci0gICAgVFR5
cGUgKmludDQgPSBuZXcgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgNCk7
Ci0KLSAgICAvLwotICAgIC8vIEFuZ2xlIGFuZCBUcmlnb25vbWV0cmljIEZ1bmN0aW9ucy4KLSAg
ICAvLwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAicmFkaWFucyIsIGZs
b2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJyYWRpYW5zIiwg
ZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInJhZGlhbnMi
LCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAicmFkaWFu
cyIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRl
Z3JlZXMiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAi
ZGVncmVlcyIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMs
ICJkZWdyZWVzIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
NCwgImRlZ3JlZXMiLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDEsICJzaW4iLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQyLCAic2luIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MywgInNpbiIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQs
ICJzaW4iLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEs
ICJjb3MiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAi
Y29zIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImNv
cyIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJjb3Mi
LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJ0YW4i
LCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAidGFuIiwg
ZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInRhbiIsIGZs
b2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0YW4iLCBmbG9h
dDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJhc2luIiwgZmxv
YXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImFzaW4iLCBmbG9h
dDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiYXNpbiIsIGZsb2F0
Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJhc2luIiwgZmxvYXQ0
KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiYWNvcyIsIGZsb2F0
MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJhY29zIiwgZmxvYXQy
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImFjb3MiLCBmbG9hdDMp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiYWNvcyIsIGZsb2F0NCk7
Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImF0YW4iLCBmbG9hdDEs
IGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJhdGFuIiwg
ZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAi
YXRhbiIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0NCwgImF0YW4iLCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MSwgImF0YW4iLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQyLCAiYXRhbiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDMsICJhdGFuIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0NCwgImF0YW4iLCBmbG9hdDQpOwotCi0gICAgLy8KLSAgICAvLyBFeHBvbmVudGlh
bCBGdW5jdGlvbnMuCi0gICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MSwgInBvdyIsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MiwgInBvdyIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MywgInBvdyIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0NCwgInBvdyIsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZXhwIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImV4cCIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJleHAiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZXhwIiwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibG9nIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MiwgImxvZyIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDMsICJsb2ciLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQ0LCAibG9nIiwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQxLCAiZXhwMiIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDIsICJleHAyIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MywgImV4cDIiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQ0LCAiZXhwMiIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MSwgImxvZzIiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQyLCAibG9nMiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDMsICJsb2cyIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0NCwgImxvZzIiLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDEsICJzcXJ0IiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MiwgInNxcnQiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQzLCAic3FydCIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDQsICJzcXJ0IiwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQxLCAiaW52ZXJzZXNxcnQiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQyLCAiaW52ZXJzZXNxcnQiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiaW52ZXJzZXNxcnQiLCBmbG9hdDMpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiaW52ZXJzZXNxcnQiLCBmbG9hdDQpOwotCi0g
ICAgLy8KLSAgICAvLyBDb21tb24gRnVuY3Rpb25zLgotICAgIC8vCi0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDEsICJhYnMiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQyLCAiYWJzIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MywgImFicyIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDQsICJhYnMiLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDEsICJzaWduIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MiwgInNpZ24iLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQzLCAic2lnbiIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDQsICJzaWduIiwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQxLCAiZmxvb3IiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQyLCAiZmxvb3IiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQzLCAiZmxvb3IiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQ0LCAiZmxvb3IiLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDEsICJjZWlsIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MiwgImNlaWwiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQzLCAiY2VpbCIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDQsICJjZWlsIiwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQxLCAiZnJhY3QiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQyLCAiZnJhY3QiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQzLCAiZnJhY3QiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQ0LCAiZnJhY3QiLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDEsICJtb2QiLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDIsICJtb2QiLCBmbG9hdDIsIGZsb2F0MSk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtb2QiLCBmbG9hdDMsIGZsb2F0MSk7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJtb2QiLCBmbG9hdDQsIGZsb2F0MSk7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJtb2QiLCBmbG9hdDIsIGZs
b2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtb2QiLCBmbG9h
dDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJtb2Qi
LCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MSwgIm1pbiIsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MiwgIm1pbiIsIGZsb2F0MiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MywgIm1pbiIsIGZsb2F0MywgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0NCwgIm1pbiIsIGZsb2F0NCwgZmxvYXQxKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgIm1pbiIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgIm1pbiIsIGZsb2F0MywgZmxvYXQzKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1pbiIsIGZsb2F0NCwgZmxv
YXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibWF4IiwgZmxv
YXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibWF4
IiwgZmxvYXQyLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQz
LCAibWF4IiwgZmxvYXQzLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQ0LCAibWF4IiwgZmxvYXQ0LCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQyLCAibWF4IiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQzLCAibWF4IiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibWF4IiwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJjbGFtcCIsIGZsb2F0MSwgZmxvYXQx
LCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiY2xhbXAi
LCBmbG9hdDIsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MywgImNsYW1wIiwgZmxvYXQzLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJjbGFtcCIsIGZsb2F0NCwgZmxvYXQxLCBmbG9hdDEp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiY2xhbXAiLCBmbG9hdDIs
IGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0Mywg
ImNsYW1wIiwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDQsICJjbGFtcCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJtaXgiLCBmbG9hdDEsIGZsb2F0MSwg
ZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgIm1peCIsIGZs
b2F0MiwgZmxvYXQyLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQzLCAibWl4IiwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDQsICJtaXgiLCBmbG9hdDQsIGZsb2F0NCwgZmxvYXQxKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgIm1peCIsIGZsb2F0MiwgZmxvYXQyLCBm
bG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAibWl4IiwgZmxv
YXQzLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDQsICJtaXgiLCBmbG9hdDQsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQxLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInN0ZXAiLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzdGVwIiwgZmxvYXQzLCBmbG9hdDMp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAic3RlcCIsIGZsb2F0NCwg
ZmxvYXQ0KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInN0ZXAiLCBm
bG9hdDEsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJz
dGVwIiwgZmxvYXQxLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQ0LCAic3RlcCIsIGZsb2F0MSwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQxLCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic21vb3Roc3RlcCIsIGZsb2F0Miwg
ZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAi
c21vb3Roc3RlcCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQ0LCAic21vb3Roc3RlcCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDQp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic21vb3Roc3RlcCIsIGZs
b2F0MSwgZmxvYXQxLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQzLCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDMpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBm
bG9hdDQpOwotCi0gICAgLy8KLSAgICAvLyBHZW9tZXRyaWMgRnVuY3Rpb25zLgotICAgIC8vCi0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJsZW5ndGgiLCBmbG9hdDEpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibGVuZ3RoIiwgZmxvYXQyKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0Myk7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJsZW5ndGgiLCBmbG9hdDQp
OwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkaXN0YW5jZSIsIGZs
b2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRp
c3RhbmNlIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQxLCAiZGlzdGFuY2UiLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDEsICJkaXN0YW5jZSIsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQxLCBmbG9hdDEpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQyLCBmbG9h
dDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQz
LCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90Iiwg
ZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMs
ICJjcm9zcyIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MSwgIm5vcm1hbGl6ZSIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDIsICJub3JtYWxpemUiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQzLCAibm9ybWFsaXplIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0NCwgIm5vcm1hbGl6ZSIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImZhY2Vmb3J3YXJkIiwgZmxvYXQxLCBmbG9hdDEs
IGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJmYWNlZm9y
d2FyZCIsIGZsb2F0MiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQzLCAiZmFjZWZvcndhcmQiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzKTsKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImZhY2Vmb3J3YXJkIiwgZmxvYXQ0
LCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MSwgInJlZmxlY3QiLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDIsICJyZWZsZWN0IiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQzLCAicmVmbGVjdCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInJlZmxlY3QiLCBmbG9hdDQsIGZsb2F0
NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInJlZnJhY3QiLCBm
bG9hdDEsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MiwgInJlZnJhY3QiLCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInJlZnJhY3QiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQx
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInJlZnJhY3QiLCBmbG9h
dDQsIGZsb2F0NCwgZmxvYXQxKTsKLQotICAgIFRUeXBlICptYXQyID0gbmV3IFRUeXBlKEVidEZs
b2F0LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMiwgdHJ1ZSk7Ci0gICAgVFR5cGUgKm1hdDMg
PSBuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAzLCB0cnVlKTsK
LSAgICBUVHlwZSAqbWF0NCA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFH
bG9iYWwsIDQsIHRydWUpOwotCi0gICAgLy8KLSAgICAvLyBNYXRyaXggRnVuY3Rpb25zLgotICAg
IC8vCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihtYXQyLCAibWF0cml4Q29tcE11bHQi
LCBtYXQyLCBtYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKG1hdDMsICJtYXRy
aXhDb21wTXVsdCIsIG1hdDMsIG1hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
bWF0NCwgIm1hdHJpeENvbXBNdWx0IiwgbWF0NCwgbWF0NCk7Ci0KLSAgICBUVHlwZSAqYm9vbDEg
PSBuZXcgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDEpOwotICAgIFRU
eXBlICpib29sMiA9IG5ldyBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwg
Mik7Ci0gICAgVFR5cGUgKmJvb2wzID0gbmV3IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwg
RXZxR2xvYmFsLCAzKTsKLSAgICBUVHlwZSAqYm9vbDQgPSBuZXcgVFR5cGUoRWJ0Qm9vbCwgRWJw
VW5kZWZpbmVkLCBFdnFHbG9iYWwsIDQpOwotCi0gICAgLy8KLSAgICAvLyBWZWN0b3IgcmVsYXRp
b25hbCBmdW5jdGlvbnMuCi0gICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJv
b2wyLCAibGVzc1RoYW4iLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihib29sMywgImxlc3NUaGFuIiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJsZXNzVGhhbiIsIGZsb2F0NCwgZmxvYXQ0KTsKLQot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJsZXNzVGhhbiIsIGludDIsIGlu
dDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJsZXNzVGhhbiIsIGlu
dDMsIGludDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJsZXNzVGhh
biIsIGludDQsIGludDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwg
Imxlc3NUaGFuRXF1YWwiLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihib29sMywgImxlc3NUaGFuRXF1YWwiLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImxlc3NUaGFuRXF1YWwiLCBmbG9hdDQsIGZs
b2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAibGVzc1RoYW5F
cXVhbCIsIGludDIsIGludDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMs
ICJsZXNzVGhhbkVxdWFsIiwgaW50MywgaW50Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihib29sNCwgImxlc3NUaGFuRXF1YWwiLCBpbnQ0LCBpbnQ0KTsKLQotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJncmVhdGVyVGhhbiIsIGZsb2F0MiwgZmxvYXQyKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZ3JlYXRlclRoYW4iLCBmbG9h
dDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImdyZWF0
ZXJUaGFuIiwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihib29sMiwgImdyZWF0ZXJUaGFuIiwgaW50MiwgaW50Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihib29sMywgImdyZWF0ZXJUaGFuIiwgaW50MywgaW50Myk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImdyZWF0ZXJUaGFuIiwgaW50NCwgaW50NCk7Ci0K
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZ3JlYXRlclRoYW5FcXVhbCIs
IGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAi
Z3JlYXRlclRoYW5FcXVhbCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGJvb2w0LCAiZ3JlYXRlclRoYW5FcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsKLQot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJncmVhdGVyVGhhbkVxdWFsIiwg
aW50MiwgaW50Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImdyZWF0
ZXJUaGFuRXF1YWwiLCBpbnQzLCBpbnQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGJvb2w0LCAiZ3JlYXRlclRoYW5FcXVhbCIsIGludDQsIGludDQpOwotCi0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImVxdWFsIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJlcXVhbCIsIGZsb2F0MywgZmxvYXQzKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAiZXF1YWwiLCBmbG9hdDQsIGZs
b2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZXF1YWwiLCBp
bnQyLCBpbnQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZXF1YWwi
LCBpbnQzLCBpbnQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAiZXF1
YWwiLCBpbnQ0LCBpbnQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIs
ICJlcXVhbCIsIGJvb2wyLCBib29sMik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihi
b29sMywgImVxdWFsIiwgYm9vbDMsIGJvb2wzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGJvb2w0LCAiZXF1YWwiLCBib29sNCwgYm9vbDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihib29sMiwgIm5vdEVxdWFsIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJub3RFcXVhbCIsIGZsb2F0MywgZmxvYXQzKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAibm90RXF1YWwiLCBmbG9hdDQs
IGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAibm90RXF1
YWwiLCBpbnQyLCBpbnQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAi
bm90RXF1YWwiLCBpbnQzLCBpbnQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJv
b2w0LCAibm90RXF1YWwiLCBpbnQ0LCBpbnQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oYm9vbDIsICJub3RFcXVhbCIsIGJvb2wyLCBib29sMik7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihib29sMywgIm5vdEVxdWFsIiwgYm9vbDMsIGJvb2wzKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAibm90RXF1YWwiLCBib29sNCwgYm9vbDQpOwot
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMSwgImFueSIsIGJvb2wyKTsKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wxLCAiYW55IiwgYm9vbDMpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDEsICJhbnkiLCBib29sNCk7Ci0KLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wxLCAiYWxsIiwgYm9vbDIpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oYm9vbDEsICJhbGwiLCBib29sMyk7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihib29sMSwgImFsbCIsIGJvb2w0KTsKLQotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oYm9vbDIsICJub3QiLCBib29sMik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihib29sMywgIm5vdCIsIGJvb2wzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGJvb2w0LCAibm90IiwgYm9vbDQpOwotCi0gICAgVFR5cGUgKnNhbXBsZXIyRCA9IG5ldyBU
VHlwZShFYnRTYW1wbGVyMkQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAxKTsKLSAgICBUVHlw
ZSAqc2FtcGxlckN1YmUgPSBuZXcgVFR5cGUoRWJ0U2FtcGxlckN1YmUsIEVicFVuZGVmaW5lZCwg
RXZxR2xvYmFsLCAxKTsKLQotICAgIC8vCi0gICAgLy8gVGV4dHVyZSBGdW5jdGlvbnMgZm9yIEdM
U0wgRVMgMS4wCi0gICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwg
InRleHR1cmUyRCIsIHNhbXBsZXIyRCwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVyMkQsIGZsb2F0Myk7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxl
cjJELCBmbG9hdDQpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4
dHVyZUN1YmUiLCBzYW1wbGVyQ3ViZSwgZmxvYXQzKTsKLQotICAgIGlmIChyZXNvdXJjZXMuT0VT
X0VHTF9pbWFnZV9leHRlcm5hbCkKLSAgICB7Ci0gICAgICAgIFRUeXBlICpzYW1wbGVyRXh0ZXJu
YWxPRVMgPSBuZXcgVFR5cGUoRWJ0U2FtcGxlckV4dGVybmFsT0VTLCBFYnBVbmRlZmluZWQsIEV2
cUdsb2JhbCwgMSk7Ci0KLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQs
ICJ0ZXh0dXJlMkQiLCBzYW1wbGVyRXh0ZXJuYWxPRVMsIGZsb2F0Mik7Ci0gICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXJFeHRl
cm5hbE9FUywgZmxvYXQzKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlckV4dGVybmFsT0VTLCBmbG9hdDQpOwotICAgIH0K
LQotICAgIGlmIChyZXNvdXJjZXMuQVJCX3RleHR1cmVfcmVjdGFuZ2xlKQotICAgIHsKLSAgICAg
ICAgVFR5cGUgKnNhbXBsZXIyRFJlY3QgPSBuZXcgVFR5cGUoRWJ0U2FtcGxlcjJEUmVjdCwgRWJw
VW5kZWZpbmVkLCBFdnFHbG9iYWwsIDEpOwotCi0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUmVjdCIsIHNhbXBsZXIyRFJlY3QsIGZsb2F0Mik7Ci0g
ICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUmVjdFBy
b2oiLCBzYW1wbGVyMkRSZWN0LCBmbG9hdDMpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFJlY3RQcm9qIiwgc2FtcGxlcjJEUmVjdCwgZmxvYXQ0
KTsKLSAgICB9Ci0KLSAgICBpZiAodHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCi0gICAgewot
ICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRCIsIHNh
bXBsZXIyRCwgZmxvYXQyLCBmbG9hdDEpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVyMkQsIGZsb2F0MywgZmxvYXQxKTsK
LSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9q
Iiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0MSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZUN1YmUiLCBzYW1wbGVyQ3ViZSwgZmxvYXQzLCBmbG9h
dDEpOwotCi0gICAgICAgIGlmIChyZXNvdXJjZXMuT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwg
ImRGZHgiLCBmbG9hdDEpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDIsICJkRmR4IiwgZmxvYXQyKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQzLCAiZEZkeCIsIGZsb2F0Myk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0NCwgImRGZHgiLCBmbG9hdDQpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRGZHkiLCBmbG9hdDEp
OwotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJkRmR5Iiwg
ZmxvYXQyKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAi
ZEZkeSIsIGZsb2F0Myk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0NCwgImRGZHkiLCBmbG9hdDQpOwotCi0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MSwgImZ3aWR0aCIsIGZsb2F0MSk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImZ3aWR0aCIsIGZsb2F0Mik7Ci0gICAgICAgICAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImZ3aWR0aCIsIGZsb2F0Myk7Ci0gICAg
ICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImZ3aWR0aCIsIGZsb2F0
NCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZih0eXBlID09IFNIX1ZFUlRFWF9TSEFERVIp
Ci0gICAgewotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1
cmUyRExvZCIsIHNhbXBsZXIyRCwgZmxvYXQyLCBmbG9hdDEpOwotICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFByb2pMb2QiLCBzYW1wbGVyMkQsIGZs
b2F0MywgZmxvYXQxKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQs
ICJ0ZXh0dXJlMkRQcm9qTG9kIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0MSk7Ci0gICAgICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZUN1YmVMb2QiLCBzYW1w
bGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDEpOwotICAgIH0KLQotICAgIC8vCi0gICAgLy8gRGVwdGgg
cmFuZ2UgaW4gd2luZG93IGNvb3JkaW5hdGVzCi0gICAgLy8KLSAgICBURmllbGRMaXN0ICpmaWVs
ZHMgPSBOZXdQb29sVEZpZWxkTGlzdCgpOwotICAgIFRGaWVsZCAqbmVhciA9IG5ldyBURmllbGQo
bmV3IFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEpLCBOZXdQb29sVFN0cmlu
ZygibmVhciIpKTsKLSAgICBURmllbGQgKmZhciA9IG5ldyBURmllbGQobmV3IFRUeXBlKEVidEZs
b2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEpLCBOZXdQb29sVFN0cmluZygiZmFyIikpOwotICAg
IFRGaWVsZCAqZGlmZiA9IG5ldyBURmllbGQobmV3IFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBF
dnFHbG9iYWwsIDEpLCBOZXdQb29sVFN0cmluZygiZGlmZiIpKTsKLSAgICBmaWVsZHMtPnB1c2hf
YmFjayhuZWFyKTsKLSAgICBmaWVsZHMtPnB1c2hfYmFjayhmYXIpOwotICAgIGZpZWxkcy0+cHVz
aF9iYWNrKGRpZmYpOwotICAgIFRTdHJ1Y3R1cmUgKmRlcHRoUmFuZ2VTdHJ1Y3QgPSBuZXcgVFN0
cnVjdHVyZShOZXdQb29sVFN0cmluZygiZ2xfRGVwdGhSYW5nZVBhcmFtZXRlcnMiKSwgZmllbGRz
KTsKLSAgICBUVmFyaWFibGUgKmRlcHRoUmFuZ2VQYXJhbWV0ZXJzID0gbmV3IFRWYXJpYWJsZSgm
ZGVwdGhSYW5nZVN0cnVjdC0+bmFtZSgpLCBkZXB0aFJhbmdlU3RydWN0LCB0cnVlKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnQoKmRlcHRoUmFuZ2VQYXJhbWV0ZXJzKTsKLSAgICBUVmFyaWFibGUg
KmRlcHRoUmFuZ2UgPSBuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9EZXB0aFJhbmdl
IiksIFRUeXBlKGRlcHRoUmFuZ2VTdHJ1Y3QpKTsKLSAgICBkZXB0aFJhbmdlLT5zZXRRdWFsaWZp
ZXIoRXZxVW5pZm9ybSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpkZXB0aFJhbmdlKTsKLQot
ICAgIC8vCi0gICAgLy8gSW1wbGVtZW50YXRpb24gZGVwZW5kZW50IGJ1aWx0LWluIGNvbnN0YW50
cy4KLSAgICAvLwotICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KCJnbF9NYXhWZXJ0ZXhB
dHRyaWJzIiwgcmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydENvbnN0SW50KCJnbF9NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyIsIHJlc291cmNlcy5NYXhW
ZXJ0ZXhVbmlmb3JtVmVjdG9ycyk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImds
X01heFZhcnlpbmdWZWN0b3JzIiwgcmVzb3VyY2VzLk1heFZhcnlpbmdWZWN0b3JzKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xfTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMi
LCByZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydENvbnN0SW50KCJnbF9NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzIiwgcmVzb3Vy
Y2VzLk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dENvbnN0SW50KCJnbF9NYXhUZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhUZXh0dXJl
SW1hZ2VVbml0cyk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heEZyYWdt
ZW50VW5pZm9ybVZlY3RvcnMiLCByZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyk7
Ci0KLSAgICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKQotICAgIHsKLSAgICAgICAg
c3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heERyYXdCdWZmZXJzIiwgcmVzb3VyY2Vz
Lk1heERyYXdCdWZmZXJzKTsKLSAgICB9Ci19Ci0KLXZvaWQgSWRlbnRpZnlCdWlsdElucyhTaFNo
YWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsCi0gICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgU2hCdWlsdEluUmVzb3VyY2VzICZyZXNvdXJjZXMsCi0gICAgICAgICAgICAgICAgICAg
ICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSkKLXsKLSAgICAvLwotICAgIC8vIEZpcnN0LCBp
bnNlcnQgc29tZSBzcGVjaWFsIGJ1aWx0LWluIHZhcmlhYmxlcyB0aGF0IGFyZSBub3QgaW4gCi0g
ICAgLy8gdGhlIGJ1aWx0LWluIGhlYWRlciBmaWxlcy4KLSAgICAvLwotICAgIHN3aXRjaCh0eXBl
KSB7Ci0gICAgY2FzZSBTSF9GUkFHTUVOVF9TSEFERVI6Ci0gICAgICAgIHN5bWJvbFRhYmxlLmlu
c2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Nvb3JkIiksICAgICAg
ICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29vcmQs
ICAgNCkpKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bv
b2xUU3RyaW5nKCJnbF9Gcm9udEZhY2luZyIpLCAgICAgICAgICAgICAgICAgICAgIFRUeXBlKEVi
dEJvb2wsICBFYnBVbmRlZmluZWQsIEV2cUZyb250RmFjaW5nLCAxKSkpOwotICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1BvaW50Q29v
cmQiKSwgICAgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZx
UG9pbnRDb29yZCwgIDIpKSk7Ci0KLSAgICAgICAgLy8KLSAgICAgICAgLy8gSW4gQ1NTIFNoYWRl
cnMsIGdsX0ZyYWdDb2xvciwgZ2xfRnJhZ0RhdGEsIGFuZCBnbF9NYXhEcmF3QnVmZmVycyBhcmUg
bm90IGF2YWlsYWJsZS4KLSAgICAgICAgLy8gSW5zdGVhZCwgY3NzX01peENvbG9yIGFuZCBjc3Nf
Q29sb3JNYXRyaXggYXJlIGF2YWlsYWJsZS4KLSAgICAgICAgLy8KLSAgICAgICAgaWYgKHNwZWMg
IT0gU0hfQ1NTX1NIQURFUlNfU1BFQykgewotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0
KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29sb3IiKSwgICAgICAgICAg
ICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0NvbG9yLCAgIDQpKSk7
Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRT
dHJpbmcoImdsX0ZyYWdEYXRhW2dsX01heERyYXdCdWZmZXJzXSIpLCBUVHlwZShFYnRGbG9hdCwg
RWJwTWVkaXVtLCBFdnFGcmFnRGF0YSwgICAgNCkpKTsKLSAgICAgICAgICAgIGlmIChyZXNvdXJj
ZXMuRVhUX2ZyYWdfZGVwdGgpIHsKLSAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQo
Km5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEZXB0aEVYVCIpLCAgICAgICAg
ICAgIFRUeXBlKEVidEZsb2F0LCByZXNvdXJjZXMuRnJhZ21lbnRQcmVjaXNpb25IaWdoID8gRWJw
SGlnaCA6IEVicE1lZGl1bSwgRXZxRnJhZ0RlcHRoLCAxKSkpOwotICAgICAgICAgICAgICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKCJnbF9GcmFnRGVwdGhFWFQiLCAiR0xfRVhUX2Zy
YWdfZGVwdGgiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiY3NzX01p
eENvbG9yIiksICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2
cUdsb2JhbCwgICAgICA0KSkpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcg
VFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJjc3NfQ29sb3JNYXRyaXgiKSwgICAgICAgICAgICAg
ICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAgIDQsIHRydWUpKSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgU0hfVkVSVEVYX1NIQURF
UjoKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3Ry
aW5nKCJnbF9Qb3NpdGlvbiIpLCAgICBUVHlwZShFYnRGbG9hdCwgRWJwSGlnaCwgRXZxUG9zaXRp
b24sICAgIDQpKSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfUG9pbnRTaXplIiksICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1
bSwgRXZxUG9pbnRTaXplLCAgIDEpKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDog
YXNzZXJ0KGZhbHNlICYmICJMYW5ndWFnZSBub3Qgc3VwcG9ydGVkIik7Ci0gICAgfQotCi0gICAg
Ly8KLSAgICAvLyBOZXh0LCBpZGVudGlmeSB3aGljaCBidWlsdC1pbnMgZnJvbSB0aGUgYWxyZWFk
eSBsb2FkZWQgaGVhZGVycyBoYXZlCi0gICAgLy8gYSBtYXBwaW5nIHRvIGFuIG9wZXJhdG9yLiAg
VGhvc2UgdGhhdCBhcmUgbm90IGlkZW50aWZpZWQgYXMgc3VjaCBhcmUKLSAgICAvLyBleHBlY3Rl
ZCB0byBiZSByZXNvbHZlZCB0aHJvdWdoIGEgbGlicmFyeSBvZiBmdW5jdGlvbnMsIHZlcnN1cyBh
cwotICAgIC8vIG9wZXJhdGlvbnMuCi0gICAgLy8KLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKCJtYXRyaXhDb21wTXVsdCIsICAgRU9wTXVsKTsKLQotICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoImVxdWFsIiwgICAgICAgICAgICBFT3BWZWN0b3JFcXVhbCk7Ci0gICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibm90RXF1YWwiLCAgICAgICAgIEVPcFZlY3Rv
ck5vdEVxdWFsKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJsZXNzVGhhbiIs
ICAgICAgICAgRU9wTGVzc1RoYW4pOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
ImdyZWF0ZXJUaGFuIiwgICAgICBFT3BHcmVhdGVyVGhhbik7Ci0gICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcigibGVzc1RoYW5FcXVhbCIsICAgIEVPcExlc3NUaGFuRXF1YWwpOwotICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImdyZWF0ZXJUaGFuRXF1YWwiLCBFT3BHcmVh
dGVyVGhhbkVxdWFsKTsKLSAgICAKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJy
YWRpYW5zIiwgICAgICBFT3BSYWRpYW5zKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKCJkZWdyZWVzIiwgICAgICBFT3BEZWdyZWVzKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVU
b09wZXJhdG9yKCJzaW4iLCAgICAgICAgICBFT3BTaW4pOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoImNvcyIsICAgICAgICAgIEVPcENvcyk7Ci0gICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcigidGFuIiwgICAgICAgICAgRU9wVGFuKTsKLSAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKCJhc2luIiwgICAgICAgICBFT3BBc2luKTsKLSAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKCJhY29zIiwgICAgICAgICBFT3BBY29zKTsKLSAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhdGFuIiwgICAgICAgICBFT3BBdGFuKTsKLQotICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInBvdyIsICAgICAgICAgIEVPcFBvdyk7Ci0gICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZXhwMiIsICAgICAgICAgRU9wRXhwMik7Ci0g
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibG9nIiwgICAgICAgICAgRU9wTG9nKTsK
LSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJleHAiLCAgICAgICAgICBFT3BFeHAp
OwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxvZzIiLCAgICAgICAgIEVPcExv
ZzIpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInNxcnQiLCAgICAgICAgIEVP
cFNxcnQpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImludmVyc2VzcXJ0Iiwg
IEVPcEludmVyc2VTcXJ0KTsKLQotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImFi
cyIsICAgICAgICAgIEVPcEFicyk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigi
c2lnbiIsICAgICAgICAgRU9wU2lnbik7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cigiZmxvb3IiLCAgICAgICAgRU9wRmxvb3IpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoImNlaWwiLCAgICAgICAgIEVPcENlaWwpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoImZyYWN0IiwgICAgICAgIEVPcEZyYWN0KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKCJtb2QiLCAgICAgICAgICBFT3BNb2QpOwotICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoIm1pbiIsICAgICAgICAgIEVPcE1pbik7Ci0gICAgc3ltYm9sVGFibGUu
cmVsYXRlVG9PcGVyYXRvcigibWF4IiwgICAgICAgICAgRU9wTWF4KTsKLSAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKCJjbGFtcCIsICAgICAgICBFT3BDbGFtcCk7Ci0gICAgc3ltYm9s
VGFibGUucmVsYXRlVG9PcGVyYXRvcigibWl4IiwgICAgICAgICAgRU9wTWl4KTsKLSAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzdGVwIiwgICAgICAgICBFT3BTdGVwKTsKLSAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzbW9vdGhzdGVwIiwgICBFT3BTbW9vdGhTdGVw
KTsKLQotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxlbmd0aCIsICAgICAgIEVP
cExlbmd0aCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZGlzdGFuY2UiLCAg
ICAgRU9wRGlzdGFuY2UpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImRvdCIs
ICAgICAgICAgIEVPcERvdCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiY3Jv
c3MiLCAgICAgICAgRU9wQ3Jvc3MpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
Im5vcm1hbGl6ZSIsICAgIEVPcE5vcm1hbGl6ZSk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9P
cGVyYXRvcigiZmFjZWZvcndhcmQiLCAgRU9wRmFjZUZvcndhcmQpOwotICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoInJlZmxlY3QiLCAgICAgIEVPcFJlZmxlY3QpOwotICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInJlZnJhY3QiLCAgICAgIEVPcFJlZnJhY3QpOwotICAg
IAotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImFueSIsICAgICAgICAgIEVPcEFu
eSk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiYWxsIiwgICAgICAgICAgRU9w
QWxsKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJub3QiLCAgICAgICAgICBF
T3BWZWN0b3JMb2dpY2FsTm90KTsKLQotICAgIC8vIE1hcCBsYW5ndWFnZS1zcGVjaWZpYyBvcGVy
YXRvcnMuCi0gICAgc3dpdGNoKHR5cGUpIHsKLSAgICBjYXNlIFNIX1ZFUlRFWF9TSEFERVI6Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgU0hfRlJBR01FTlRfU0hBREVSOgotICAgICAgICBpZiAo
cmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcykgewotICAgICAgICAgICAgc3ltYm9s
VGFibGUucmVsYXRlVG9PcGVyYXRvcigiZEZkeCIsICAgRU9wREZkeCk7Ci0gICAgICAgICAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkRmR5IiwgICBFT3BERmR5KTsKLSAgICAgICAg
ICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImZ3aWR0aCIsIEVPcEZ3aWR0aCk7Ci0K
LSAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKCJkRmR4IiwgIkdMX09F
U19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9FeHRlbnNpb24oImRGZHkiLCAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIik7Ci0gICAg
ICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbigiZndpZHRoIiwgIkdMX09FU19z
dGFuZGFyZF9kZXJpdmF0aXZlcyIpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6IGJyZWFrOwotICAgIH0KLQotICAgIC8vIEZpbmFsbHkgYWRkIHJlc291cmNlLXNwZWNp
ZmljIHZhcmlhYmxlcy4KLSAgICBzd2l0Y2godHlwZSkgewotICAgIGNhc2UgU0hfRlJBR01FTlRf
U0hBREVSOgotICAgICAgICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKSB7Ci0gICAg
ICAgICAgICAvLyBTZXQgdXAgZ2xfRnJhZ0RhdGEuICBUaGUgYXJyYXkgc2l6ZS4KLSAgICAgICAg
ICAgIFRUeXBlIGZyYWdEYXRhKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCA0LCBm
YWxzZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBmcmFnRGF0YS5zZXRBcnJheVNpemUocmVzb3VyY2Vz
Lk1heERyYXdCdWZmZXJzKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRW
YXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGEiKSwgICAgZnJhZ0RhdGEpKTsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OiBicmVhazsKLSAgICB9Ci19Ci0K
LXZvaWQgSW5pdEV4dGVuc2lvbkJlaGF2aW9yKGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyYgcmVz
b3VyY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgVEV4dGVuc2lvbkJlaGF2aW9yJiBl
eHRCZWhhdmlvcikKLXsKLSAgICBpZiAocmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZl
cykKLSAgICAgICAgZXh0QmVoYXZpb3JbIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyJdID0g
RUJoVW5kZWZpbmVkOwotICAgIGlmIChyZXNvdXJjZXMuT0VTX0VHTF9pbWFnZV9leHRlcm5hbCkK
LSAgICAgICAgZXh0QmVoYXZpb3JbIkdMX09FU19FR0xfaW1hZ2VfZXh0ZXJuYWwiXSA9IEVCaFVu
ZGVmaW5lZDsKLSAgICBpZiAocmVzb3VyY2VzLkFSQl90ZXh0dXJlX3JlY3RhbmdsZSkKLSAgICAg
ICAgZXh0QmVoYXZpb3JbIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSJdID0gRUJoVW5kZWZpbmVk
OwotICAgIGlmIChyZXNvdXJjZXMuRVhUX2RyYXdfYnVmZmVycykKLSAgICAgICAgZXh0QmVoYXZp
b3JbIkdMX0VYVF9kcmF3X2J1ZmZlcnMiXSA9IEVCaFVuZGVmaW5lZDsKLSAgICBpZiAocmVzb3Vy
Y2VzLkVYVF9mcmFnX2RlcHRoKQotICAgICAgICBleHRCZWhhdmlvclsiR0xfRVhUX2ZyYWdfZGVw
dGgiXSA9IEVCaFVuZGVmaW5lZDsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0
YWExMzQ2NmFjYWQyOWU2NjZjMDVmYWQ2NzU5YThkYWZmOWRiODBkLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9Jbml0aWFsaXplLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIF9JTklUSUFMSVpFX0lOQ0xVREVEXwotI2RlZmlu
ZSBfSU5JVElBTElaRV9JTkNMVURFRF8KLQotI2luY2x1ZGUgImNvbXBpbGVyL0NvbW1vbi5oIgot
I2luY2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvU3ltYm9s
VGFibGUuaCIKLQotdm9pZCBJbnNlcnRCdWlsdEluRnVuY3Rpb25zKFNoU2hhZGVyVHlwZSB0eXBl
LCBTaFNoYWRlclNwZWMgc3BlYywgY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzICZyZXNvdXJjZXMs
IFRTeW1ib2xUYWJsZSAmdGFibGUpOwotCi12b2lkIElkZW50aWZ5QnVpbHRJbnMoU2hTaGFkZXJU
eXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFNoQnVpbHRJblJlc291cmNlcyYgcmVzb3VyY2VzLAotICAgICAgICAgICAgICAgICAgICAgIFRT
eW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpOwotCi12b2lkIEluaXRFeHRlbnNpb25CZWhhdmlvcihj
b25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291cmNlcywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFRFeHRlbnNpb25CZWhhdmlvciYgZXh0ZW5zaW9uQmVoYXZpb3IpOwotCi0jZW5kaWYg
Ly8gX0lOSVRJQUxJWkVfSU5DTFVERURfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDZjN2YyN2ZjZWQxNzRiMGIxNGE2N2JlN2M2NTIwZjE3OTRlMmE3NjYuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVEbGwuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMzIgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0v
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL0lu
aXRpYWxpemVEbGwuaCIKLQotI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVHbG9iYWxzLmgi
Ci0jaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgotI2luY2x1ZGUg
ImNvbXBpbGVyL29zaW5jbHVkZS5oIgotCi1ib29sIEluaXRQcm9jZXNzKCkKLXsKLSAgICBpZiAo
IUluaXRpYWxpemVQb29sSW5kZXgoKSkgewotICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdFByb2Nl
c3MoKTogRmFpbGVkIHRvIGluaXRhbGl6ZSBnbG9iYWwgcG9vbCIpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFJbml0aWFsaXplUGFyc2VDb250ZXh0SW5kZXgoKSkg
ewotICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdFByb2Nlc3MoKTogRmFpbGVkIHRvIGluaXRhbGl6
ZSBwYXJzZSBjb250ZXh0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBEZXRhY2hQcm9jZXNzKCkKLXsKLSAgICBGcmVlUGFyc2VD
b250ZXh0SW5kZXgoKTsKLSAgICBGcmVlUG9vbEluZGV4KCk7Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVEbGwuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNDMwNzBjYzNmZjc4Zjc1M2EyNDZjNDYwNjk4OTA4NmE2M2Jm
MDhiYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5oCisrKyAvZGV2
L251bGwKQEAgLTEsMTMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLSNpZm5kZWYgX19JTklU
SUFMSVpFRExMX0gKLSNkZWZpbmUgX19JTklUSUFMSVpFRExMX0gKLQotYm9vbCBJbml0UHJvY2Vz
cygpOwotdm9pZCBEZXRhY2hQcm9jZXNzKCk7Ci0KLSNlbmRpZiAvLyBfX0lOSVRJQUxJWkVETExf
SAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5p
dGlhbGl6ZUdMUG9zaXRpb24uY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0luaXRpYWxpemVHTFBvc2l0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZTAxOTNlMzlkMmU4YmExYTZkMTAxNWM5MWFjMGRkMGIwZGE4NDc2OC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZUdMUG9zaXRpb24uY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNjEgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0v
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL0lu
aXRpYWxpemVHTFBvc2l0aW9uLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKLQotYm9v
bCBJbml0aWFsaXplR0xQb3NpdGlvbjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRl
cm1BZ2dyZWdhdGUqIG5vZGUpCi17Ci0gICAgYm9vbCB2aXNpdENoaWxkcmVuID0gIW1Db2RlSW5z
ZXJ0ZWQ7Ci0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQotICAgIHsKLSAgICAgIGNhc2UgRU9w
U2VxdWVuY2U6IGJyZWFrOwotICAgICAgY2FzZSBFT3BGdW5jdGlvbjoKLSAgICAgIHsKLSAgICAg
ICAgLy8gRnVuY3Rpb24gZGVmaW5pdGlvbi4KLSAgICAgICAgQVNTRVJUKHZpc2l0ID09IFByZVZp
c2l0KTsKLSAgICAgICAgaWYgKG5vZGUtPmdldE5hbWUoKSA9PSAibWFpbigiKQotICAgICAgICB7
Ci0gICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJnNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVu
Y2UoKTsKLSAgICAgICAgICAgIEFTU0VSVCgoc2VxdWVuY2Uuc2l6ZSgpID09IDEpIHx8IChzZXF1
ZW5jZS5zaXplKCkgPT0gMikpOwotICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSAqYm9keSA9
IE5VTEw7Ci0gICAgICAgICAgICBpZiAoc2VxdWVuY2Uuc2l6ZSgpID09IDEpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgYm9keSA9IG5ldyBUSW50ZXJtQWdncmVnYXRlKEVPcFNlcXVl
bmNlKTsKLSAgICAgICAgICAgICAgICBzZXF1ZW5jZS5wdXNoX2JhY2soYm9keSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Ym9keSA9IHNlcXVlbmNlWzFdLT5nZXRBc0FnZ3JlZ2F0ZSgpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgQVNTRVJUKGJvZHkpOwotICAgICAgICAgICAgaW5zZXJ0Q29kZShib2R5LT5nZXRT
ZXF1ZW5jZSgpKTsKLSAgICAgICAgICAgIG1Db2RlSW5zZXJ0ZWQgPSB0cnVlOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZGVmYXVsdDogdmlzaXRDaGlsZHJlbiA9
IGZhbHNlOyBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHZpc2l0Q2hpbGRyZW47Ci19Ci0KLXZv
aWQgSW5pdGlhbGl6ZUdMUG9zaXRpb246Omluc2VydENvZGUoVEludGVybVNlcXVlbmNlJiBzZXF1
ZW5jZSkKLXsKLSAgICBUSW50ZXJtQmluYXJ5ICpiaW5hcnkgPSBuZXcgVEludGVybUJpbmFyeShF
T3BBc3NpZ24pOwotICAgIHNlcXVlbmNlLmluc2VydChzZXF1ZW5jZS5iZWdpbigpLCBiaW5hcnkp
OwotCi0gICAgVEludGVybVN5bWJvbCAqbGVmdCA9IG5ldyBUSW50ZXJtU3ltYm9sKAotICAgICAg
ICAwLCAiZ2xfUG9zaXRpb24iLCBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFQb3Np
dGlvbiwgNCkpOwotICAgIGJpbmFyeS0+c2V0TGVmdChsZWZ0KTsKLQotICAgIENvbnN0YW50VW5p
b24gKnUgPSBuZXcgQ29uc3RhbnRVbmlvbls0XTsKLSAgICBmb3IgKGludCBpaSA9IDA7IGlpIDwg
MzsgKytpaSkKLSAgICAgICAgdVtpaV0uc2V0RkNvbnN0KDAuMGYpOwotICAgIHVbM10uc2V0RkNv
bnN0KDEuMGYpOwotICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpyaWdodCA9IG5ldyBUSW50ZXJt
Q29uc3RhbnRVbmlvbigKLSAgICAgICAgdSwgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwg
RXZxQ29uc3QsIDQpKTsKLSAgICBiaW5hcnktPnNldFJpZ2h0KHJpZ2h0KTsKLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplR0xQb3Np
dGlvbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVH
TFBvc2l0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiMTEwNzVhMTM3OThj
ZjNlNmYxZDc0Y2JkYmZiMDQzMjBlNzc1N2IuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0lu
aXRpYWxpemVHTFBvc2l0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX0lOSVRJQUxJWkVfR0xfUE9TSVRJT05f
SF8KLSNkZWZpbmUgQ09NUElMRVJfSU5JVElBTElaRV9HTF9QT1NJVElPTl9IXwotCi0jaW5jbHVk
ZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCi0KLWNsYXNzIEluaXRpYWxpemVHTFBvc2l0aW9u
IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKLXsKLXB1YmxpYzoKLSAgICBJbml0aWFsaXplR0xQ
b3NpdGlvbigpIDogbUNvZGVJbnNlcnRlZChmYWxzZSkgeyB9Ci0KLXByb3RlY3RlZDoKLSAgICB2
aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5vZGUp
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlz
aXQsIFRJbnRlcm1VbmFyeSogbm9kZSkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUpIHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwg
VEludGVybUxvb3AqIG5vZGUpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIHZp
c2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKiBub2RlKSB7IHJldHVybiBmYWxz
ZTsgfQotCi0gICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50
ZXJtQWdncmVnYXRlKiBub2RlKTsKLQotcHJpdmF0ZToKLSAgICAvLyBJbnNlcnQgQVNUIG5vZGUg
aW4gdGhlIGJlZ2lubmluZyBvZiBtYWluKCkgZm9yICJnbF9Qb3NpdGlvbiA9IHZlYzQoMC4wLCAw
LjAsIDAuMCwgMS4wKTsiLgotICAgIHZvaWQgaW5zZXJ0Q29kZShUSW50ZXJtU2VxdWVuY2UmIHNl
cXVlbmNlKTsKLQotICAgIGJvb2wgbUNvZGVJbnNlcnRlZDsKLX07Ci0KLSNlbmRpZiAgLy8gQ09N
UElMRVJfSU5JVElBTElaRV9HTF9QT1NJVElPTl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVHbG9iYWxzLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZUdsb2JhbHMuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDcxNTk0MTQyNDcxMDUzMDgwMzg2MjgxMzg2YTk1MDZmYWJk
MDU2My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZUdsb2JhbHMuaAorKysg
L2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYg
X19JTklUSUFMSVpFX0dMT0JBTFNfSU5DTFVERURfCi0jZGVmaW5lIF9fSU5JVElBTElaRV9HTE9C
QUxTX0lOQ0xVREVEXwotCi1ib29sIEluaXRpYWxpemVQb29sSW5kZXgoKTsKLXZvaWQgRnJlZVBv
b2xJbmRleCgpOwotCi0jZW5kaWYgLy8gX19JTklUSUFMSVpFX0dMT0JBTFNfSU5DTFVERURfCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6
ZVBhcnNlQ29udGV4dC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
SW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGRmYWIwMjczMzBkZTk1OTE2MmFiYTZlYWU4MjU4MzBkOTI1MGI0OTMuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNDAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9Jbml0aWFs
aXplUGFyc2VDb250ZXh0LmgiCi0KLSNpbmNsdWRlICJjb21waWxlci9vc2luY2x1ZGUuaCIKLQot
T1NfVExTSW5kZXggR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19JTlZBTElEX1RMU19JTkRF
WDsKLQotYm9vbCBJbml0aWFsaXplUGFyc2VDb250ZXh0SW5kZXgoKQotewotICAgIGFzc2VydChH
bG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCk7Ci0KLSAgICBH
bG9iYWxQYXJzZUNvbnRleHRJbmRleCA9IE9TX0FsbG9jVExTSW5kZXgoKTsKLSAgICByZXR1cm4g
R2xvYmFsUGFyc2VDb250ZXh0SW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7Ci19Ci0KLXZv
aWQgRnJlZVBhcnNlQ29udGV4dEluZGV4KCkKLXsKLSAgICBhc3NlcnQoR2xvYmFsUGFyc2VDb250
ZXh0SW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpOwotCi0gICAgT1NfRnJlZVRMU0luZGV4
KEdsb2JhbFBhcnNlQ29udGV4dEluZGV4KTsKLSAgICBHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9
IE9TX0lOVkFMSURfVExTX0lOREVYOwotfQotCi12b2lkIFNldEdsb2JhbFBhcnNlQ29udGV4dChU
UGFyc2VDb250ZXh0KiBjb250ZXh0KQotewotICAgIGFzc2VydChHbG9iYWxQYXJzZUNvbnRleHRJ
bmRleCAhPSBPU19JTlZBTElEX1RMU19JTkRFWCk7Ci0gICAgT1NfU2V0VExTVmFsdWUoR2xvYmFs
UGFyc2VDb250ZXh0SW5kZXgsIGNvbnRleHQpOwotfQotCi1UUGFyc2VDb250ZXh0KiBHZXRHbG9i
YWxQYXJzZUNvbnRleHQoKQotewotICAgIGFzc2VydChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCAh
PSBPU19JTlZBTElEX1RMU19JTkRFWCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFRQYXJzZUNv
bnRleHQqPihPU19HZXRUTFNWYWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCkpOwotfQotCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6
ZVBhcnNlQ29udGV4dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0lu
aXRpYWxpemVQYXJzZUNvbnRleHQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZm
YmFiODdkMDcyM2E2MzI4NDY4NDNjMzBkOWNhYzMzMDI3MDc3Ni4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTcg
KzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBfX0lOSVRJQUxJWkVfUEFSU0Vf
Q09OVEVYVF9JTkNMVURFRF8KLSNkZWZpbmUgX19JTklUSUFMSVpFX1BBUlNFX0NPTlRFWFRfSU5D
TFVERURfCi0KLWJvb2wgSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCk7Ci12b2lkIEZyZWVQ
YXJzZUNvbnRleHRJbmRleCgpOwotCi1zdHJ1Y3QgVFBhcnNlQ29udGV4dDsKLWV4dGVybiB2b2lk
IFNldEdsb2JhbFBhcnNlQ29udGV4dChUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKLWV4dGVybiBU
UGFyc2VDb250ZXh0KiBHZXRHbG9iYWxQYXJzZUNvbnRleHQoKTsKLQotI2VuZGlmIC8vIF9fSU5J
VElBTElaRV9QQVJTRV9DT05URVhUX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybVRyYXZlcnNlLmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1UcmF2ZXJzZS5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDlhNjkxZGE3MWZkMDFmNDEwNzNiNzRiNmM5YWM1MTBhMGFkZjBk
MDYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybVRyYXZlcnNlLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDI1OSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAi
Y29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCi0KLS8vCi0vLyBUcmF2ZXJzZSB0aGUgaW50ZXJtZWRp
YXRlIHJlcHJlc2VudGF0aW9uIHRyZWUsIGFuZAotLy8gY2FsbCBhIG5vZGUgdHlwZSBzcGVjaWZp
YyBmdW5jdGlvbiBmb3IgZWFjaCBub2RlLgotLy8gRG9uZSByZWN1cnNpdmVseSB0aHJvdWdoIHRo
ZSBtZW1iZXIgZnVuY3Rpb24gVHJhdmVyc2UoKS4KLS8vIE5vZGUgdHlwZXMgY2FuIGJlIHNraXBw
ZWQgaWYgdGhlaXIgZnVuY3Rpb24gdG8gY2FsbCBpcyAwLAotLy8gYnV0IHRoZWlyIHN1YnRyZWUg
d2lsbCBzdGlsbCBiZSB0cmF2ZXJzZWQuCi0vLyBOb2RlcyB3aXRoIGNoaWxkcmVuIGNhbiBoYXZl
IHRoZWlyIHdob2xlIHN1YnRyZWUgc2tpcHBlZAotLy8gaWYgcHJlVmlzaXQgaXMgdHVybmVkIG9u
IGFuZCB0aGUgdHlwZSBzcGVjaWZpYyBmdW5jdGlvbgotLy8gcmV0dXJucyBmYWxzZS4KLS8vCi0v
LyBwcmVWaXNpdCwgcG9zdFZpc2l0LCBhbmQgcmlnaHRUb0xlZnQgY29udHJvbCB3aGF0IG9yZGVy
Ci0vLyBub2RlcyBhcmUgdmlzaXRlZCBpbi4KLS8vCi0KLS8vCi0vLyBUcmF2ZXJzYWwgZnVuY3Rp
b25zIGZvciB0ZXJtaW5hbHMgYXJlIHN0cmFpZ2hmb3J3YXJkLi4uLgotLy8KLXZvaWQgVEludGVy
bVN5bWJvbDo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciAqaXQpCi17Ci0gICAgaXQtPnZpc2l0
U3ltYm9sKHRoaXMpOwotfQotCi12b2lkIFRJbnRlcm1Db25zdGFudFVuaW9uOjp0cmF2ZXJzZShU
SW50ZXJtVHJhdmVyc2VyICppdCkKLXsKLSAgICBpdC0+dmlzaXRDb25zdGFudFVuaW9uKHRoaXMp
OwotfQotCi0vLwotLy8gVHJhdmVyc2UgYSBiaW5hcnkgbm9kZS4KLS8vCi12b2lkIFRJbnRlcm1C
aW5hcnk6OnRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIgKml0KQotewotICAgIGJvb2wgdmlzaXQg
PSB0cnVlOwotCi0gICAgLy8KLSAgICAvLyB2aXNpdCB0aGUgbm9kZSBiZWZvcmUgY2hpbGRyZW4g
aWYgcHJlLXZpc2l0aW5nLgotICAgIC8vCi0gICAgaWYgKGl0LT5wcmVWaXNpdCkKLSAgICAgICAg
dmlzaXQgPSBpdC0+dmlzaXRCaW5hcnkoUHJlVmlzaXQsIHRoaXMpOwotICAgIAotICAgIC8vCi0g
ICAgLy8gVmlzaXQgdGhlIGNoaWxkcmVuLCBpbiB0aGUgcmlnaHQgb3JkZXIuCi0gICAgLy8KLSAg
ICBpZiAodmlzaXQpCi0gICAgewotICAgICAgICBpdC0+aW5jcmVtZW50RGVwdGgodGhpcyk7Ci0K
LSAgICAgICAgaWYgKGl0LT5yaWdodFRvTGVmdCkgCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChyaWdodCkKLSAgICAgICAgICAgICAgICByaWdodC0+dHJhdmVyc2UoaXQpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAoaXQtPmluVmlzaXQpCi0gICAgICAgICAgICAgICAgdmlzaXQg
PSBpdC0+dmlzaXRCaW5hcnkoSW5WaXNpdCwgdGhpcyk7Ci0KLSAgICAgICAgICAgIGlmICh2aXNp
dCAmJiBsZWZ0KQotICAgICAgICAgICAgICAgIGxlZnQtPnRyYXZlcnNlKGl0KTsKLSAgICAgICAg
fQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChsZWZ0KQotICAgICAg
ICAgICAgICAgIGxlZnQtPnRyYXZlcnNlKGl0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKGl0LT5pblZpc2l0KQotICAgICAgICAgICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0QmluYXJ5
KEluVmlzaXQsIHRoaXMpOwotCi0gICAgICAgICAgICBpZiAodmlzaXQgJiYgcmlnaHQpCi0gICAg
ICAgICAgICAgICAgcmlnaHQtPnRyYXZlcnNlKGl0KTsKLSAgICAgICAgfQotCi0gICAgICAgIGl0
LT5kZWNyZW1lbnREZXB0aCgpOwotICAgIH0KLQotICAgIC8vCi0gICAgLy8gVmlzaXQgdGhlIG5v
ZGUgYWZ0ZXIgdGhlIGNoaWxkcmVuLCBpZiByZXF1ZXN0ZWQgYW5kIHRoZSB0cmF2ZXJzYWwKLSAg
ICAvLyBoYXNuJ3QgYmVlbiBjYW5jZWxsZWQgeWV0LgotICAgIC8vCi0gICAgaWYgKHZpc2l0ICYm
IGl0LT5wb3N0VmlzaXQpCi0gICAgICAgIGl0LT52aXNpdEJpbmFyeShQb3N0VmlzaXQsIHRoaXMp
OwotfQotCi0vLwotLy8gVHJhdmVyc2UgYSB1bmFyeSBub2RlLiAgU2FtZSBjb21tZW50cyBpbiBi
aW5hcnkgbm9kZSBhcHBseSBoZXJlLgotLy8KLXZvaWQgVEludGVybVVuYXJ5Ojp0cmF2ZXJzZShU
SW50ZXJtVHJhdmVyc2VyICppdCkKLXsKLSAgICBib29sIHZpc2l0ID0gdHJ1ZTsKLQotICAgIGlm
IChpdC0+cHJlVmlzaXQpCi0gICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0VW5hcnkoUHJlVmlzaXQs
IHRoaXMpOwotCi0gICAgaWYgKHZpc2l0KSB7Ci0gICAgICAgIGl0LT5pbmNyZW1lbnREZXB0aCh0
aGlzKTsKLSAgICAgICAgb3BlcmFuZC0+dHJhdmVyc2UoaXQpOwotICAgICAgICBpdC0+ZGVjcmVt
ZW50RGVwdGgoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHZpc2l0ICYmIGl0LT5wb3N0VmlzaXQp
Ci0gICAgICAgIGl0LT52aXNpdFVuYXJ5KFBvc3RWaXNpdCwgdGhpcyk7Ci19Ci0KLS8vCi0vLyBU
cmF2ZXJzZSBhbiBhZ2dyZWdhdGUgbm9kZS4gIFNhbWUgY29tbWVudHMgaW4gYmluYXJ5IG5vZGUg
YXBwbHkgaGVyZS4KLS8vCi12b2lkIFRJbnRlcm1BZ2dyZWdhdGU6OnRyYXZlcnNlKFRJbnRlcm1U
cmF2ZXJzZXIgKml0KQotewotICAgIGJvb2wgdmlzaXQgPSB0cnVlOwotICAgIAotICAgIGlmIChp
dC0+cHJlVmlzaXQpCi0gICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0QWdncmVnYXRlKFByZVZpc2l0
LCB0aGlzKTsKLSAgICAKLSAgICBpZiAodmlzaXQpCi0gICAgewotICAgICAgICBpdC0+aW5jcmVt
ZW50RGVwdGgodGhpcyk7Ci0KLSAgICAgICAgaWYgKGl0LT5yaWdodFRvTGVmdCkKLSAgICAgICAg
ewotICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6OnJldmVyc2VfaXRlcmF0b3Igc2l0
ID0gc2VxdWVuY2UucmJlZ2luKCk7IHNpdCAhPSBzZXF1ZW5jZS5yZW5kKCk7IHNpdCsrKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICgqc2l0KS0+dHJhdmVyc2UoaXQpOwotCi0gICAg
ICAgICAgICAgICAgaWYgKHZpc2l0ICYmIGl0LT5pblZpc2l0KQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCpzaXQgIT0gc2VxdWVuY2UuZnJvbnQoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0QWdncmVnYXRlKEluVmlzaXQsIHRo
aXMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjppdGVy
YXRvciBzaXQgPSBzZXF1ZW5jZS5iZWdpbigpOyBzaXQgIT0gc2VxdWVuY2UuZW5kKCk7IHNpdCsr
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICgqc2l0KS0+dHJhdmVyc2UoaXQpOwot
Ci0gICAgICAgICAgICAgICAgaWYgKHZpc2l0ICYmIGl0LT5pblZpc2l0KQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCpzaXQgIT0gc2VxdWVuY2UuYmFjaygpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRBZ2dyZWdhdGUoSW5WaXNp
dCwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBpdC0+ZGVjcmVtZW50RGVwdGgoKTsKLSAgICB9Ci0KLSAgICBpZiAo
dmlzaXQgJiYgaXQtPnBvc3RWaXNpdCkKLSAgICAgICAgaXQtPnZpc2l0QWdncmVnYXRlKFBvc3RW
aXNpdCwgdGhpcyk7Ci19Ci0KLS8vCi0vLyBUcmF2ZXJzZSBhIHNlbGVjdGlvbiBub2RlLiAgU2Ft
ZSBjb21tZW50cyBpbiBiaW5hcnkgbm9kZSBhcHBseSBoZXJlLgotLy8KLXZvaWQgVEludGVybVNl
bGVjdGlvbjo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciAqaXQpCi17Ci0gICAgYm9vbCB2aXNp
dCA9IHRydWU7Ci0KLSAgICBpZiAoaXQtPnByZVZpc2l0KQotICAgICAgICB2aXNpdCA9IGl0LT52
aXNpdFNlbGVjdGlvbihQcmVWaXNpdCwgdGhpcyk7Ci0gICAgCi0gICAgaWYgKHZpc2l0KSB7Ci0g
ICAgICAgIGl0LT5pbmNyZW1lbnREZXB0aCh0aGlzKTsKLSAgICAgICAgaWYgKGl0LT5yaWdodFRv
TGVmdCkgewotICAgICAgICAgICAgaWYgKGZhbHNlQmxvY2spCi0gICAgICAgICAgICAgICAgZmFs
c2VCbG9jay0+dHJhdmVyc2UoaXQpOwotICAgICAgICAgICAgaWYgKHRydWVCbG9jaykKLSAgICAg
ICAgICAgICAgICB0cnVlQmxvY2stPnRyYXZlcnNlKGl0KTsKLSAgICAgICAgICAgIGNvbmRpdGlv
bi0+dHJhdmVyc2UoaXQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29uZGl0aW9u
LT50cmF2ZXJzZShpdCk7Ci0gICAgICAgICAgICBpZiAodHJ1ZUJsb2NrKQotICAgICAgICAgICAg
ICAgIHRydWVCbG9jay0+dHJhdmVyc2UoaXQpOwotICAgICAgICAgICAgaWYgKGZhbHNlQmxvY2sp
Ci0gICAgICAgICAgICAgICAgZmFsc2VCbG9jay0+dHJhdmVyc2UoaXQpOwotICAgICAgICB9Ci0g
ICAgICAgIGl0LT5kZWNyZW1lbnREZXB0aCgpOwotICAgIH0KLQotICAgIGlmICh2aXNpdCAmJiBp
dC0+cG9zdFZpc2l0KQotICAgICAgICBpdC0+dmlzaXRTZWxlY3Rpb24oUG9zdFZpc2l0LCB0aGlz
KTsKLX0KLQotLy8KLS8vIFRyYXZlcnNlIGEgbG9vcCBub2RlLiAgU2FtZSBjb21tZW50cyBpbiBi
aW5hcnkgbm9kZSBhcHBseSBoZXJlLgotLy8KLXZvaWQgVEludGVybUxvb3A6OnRyYXZlcnNlKFRJ
bnRlcm1UcmF2ZXJzZXIgKml0KQotewotICAgIGJvb2wgdmlzaXQgPSB0cnVlOwotCi0gICAgaWYg
KGl0LT5wcmVWaXNpdCkKLSAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRMb29wKFByZVZpc2l0LCB0
aGlzKTsKLSAgICAKLSAgICBpZiAodmlzaXQpCi0gICAgewotICAgICAgICBpdC0+aW5jcmVtZW50
RGVwdGgodGhpcyk7Ci0KLSAgICAgICAgaWYgKGl0LT5yaWdodFRvTGVmdCkKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKGV4cHIpCi0gICAgICAgICAgICAgICAgZXhwci0+dHJhdmVyc2UoaXQp
OwotCi0gICAgICAgICAgICBpZiAoYm9keSkKLSAgICAgICAgICAgICAgICBib2R5LT50cmF2ZXJz
ZShpdCk7Ci0KLSAgICAgICAgICAgIGlmIChjb25kKQotICAgICAgICAgICAgICAgIGNvbmQtPnRy
YXZlcnNlKGl0KTsKLQotICAgICAgICAgICAgaWYgKGluaXQpCi0gICAgICAgICAgICAgICAgaW5p
dC0+dHJhdmVyc2UoaXQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKGluaXQpCi0gICAgICAgICAgICAgICAgaW5pdC0+dHJhdmVyc2UoaXQpOwot
Ci0gICAgICAgICAgICBpZiAoY29uZCkKLSAgICAgICAgICAgICAgICBjb25kLT50cmF2ZXJzZShp
dCk7Ci0KLSAgICAgICAgICAgIGlmIChib2R5KQotICAgICAgICAgICAgICAgIGJvZHktPnRyYXZl
cnNlKGl0KTsKLQotICAgICAgICAgICAgaWYgKGV4cHIpCi0gICAgICAgICAgICAgICAgZXhwci0+
dHJhdmVyc2UoaXQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaXQtPmRlY3JlbWVudERlcHRoKCk7
Ci0gICAgfQotCi0gICAgaWYgKHZpc2l0ICYmIGl0LT5wb3N0VmlzaXQpCi0gICAgICAgIGl0LT52
aXNpdExvb3AoUG9zdFZpc2l0LCB0aGlzKTsKLX0KLQotLy8KLS8vIFRyYXZlcnNlIGEgYnJhbmNo
IG5vZGUuICBTYW1lIGNvbW1lbnRzIGluIGJpbmFyeSBub2RlIGFwcGx5IGhlcmUuCi0vLwotdm9p
ZCBUSW50ZXJtQnJhbmNoOjp0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyICppdCkKLXsKLSAgICBi
b29sIHZpc2l0ID0gdHJ1ZTsKLQotICAgIGlmIChpdC0+cHJlVmlzaXQpCi0gICAgICAgIHZpc2l0
ID0gaXQtPnZpc2l0QnJhbmNoKFByZVZpc2l0LCB0aGlzKTsKLSAgICAKLSAgICBpZiAodmlzaXQg
JiYgZXhwcmVzc2lvbikgewotICAgICAgICBpdC0+aW5jcmVtZW50RGVwdGgodGhpcyk7Ci0gICAg
ICAgIGV4cHJlc3Npb24tPnRyYXZlcnNlKGl0KTsKLSAgICAgICAgaXQtPmRlY3JlbWVudERlcHRo
KCk7Ci0gICAgfQotCi0gICAgaWYgKHZpc2l0ICYmIGl0LT5wb3N0VmlzaXQpCi0gICAgICAgIGl0
LT52aXNpdEJyYW5jaChQb3N0VmlzaXQsIHRoaXMpOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW50ZXJtZWRpYXRlLmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA0N2U0ZTM5NTEwZTJiNTcyNjkwMmFjNzIxZDNiMmFkNWFjODIx
YzkyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTUwMCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLwotLy8gQnVp
bGQgdGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbi4KLS8vCi0KLSNpbmNsdWRlIDxmbG9h
dC5oPgotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQotI2luY2x1
ZGUgImNvbXBpbGVyL0hhc2hOYW1lcy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL2xvY2FsaW50ZXJt
ZWRpYXRlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUXVhbGlmaWVyQWxpdmUuaCIKLSNpbmNsdWRl
ICJjb21waWxlci9SZW1vdmVUcmVlLmgiCi0KLWJvb2wgQ29tcGFyZVN0cnVjdHVyZShjb25zdCBU
VHlwZSYgbGVmdE5vZGVUeXBlLCBDb25zdGFudFVuaW9uKiByaWdodFVuaW9uQXJyYXksIENvbnN0
YW50VW5pb24qIGxlZnRVbmlvbkFycmF5KTsKLQotc3RhdGljIFRQcmVjaXNpb24gR2V0SGlnaGVy
UHJlY2lzaW9uKFRQcmVjaXNpb24gbGVmdCwgVFByZWNpc2lvbiByaWdodCkKLXsKLSAgICByZXR1
cm4gbGVmdCA+IHJpZ2h0ID8gbGVmdCA6IHJpZ2h0OwotfQotCi1jb25zdCBjaGFyKiBnZXRPcGVy
YXRvclN0cmluZyhUT3BlcmF0b3Igb3ApCi17Ci0gICAgc3dpdGNoIChvcCkgewotICAgICAgY2Fz
ZSBFT3BJbml0aWFsaXplOiByZXR1cm4gIj0iOwotICAgICAgY2FzZSBFT3BBc3NpZ246IHJldHVy
biAiPSI7Ci0gICAgICBjYXNlIEVPcEFkZEFzc2lnbjogcmV0dXJuICIrPSI7Ci0gICAgICBjYXNl
IEVPcFN1YkFzc2lnbjogcmV0dXJuICItPSI7Ci0gICAgICBjYXNlIEVPcERpdkFzc2lnbjogcmV0
dXJuICIvPSI7Ci0KLSAgICAgIC8vIEZhbGwtdGhyb3VnaC4KLSAgICAgIGNhc2UgRU9wTXVsQXNz
aWduOiAKLSAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXhBc3NpZ246Ci0gICAgICBjYXNl
IEVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOgotICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1Nj
YWxhckFzc2lnbjoKLSAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246IHJldHVy
biAiKj0iOwotCi0gICAgICAvLyBGYWxsLXRocm91Z2guCi0gICAgICBjYXNlIEVPcEluZGV4RGly
ZWN0OgotICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OiByZXR1cm4gIltdIjsKLQotICAgICAg
Y2FzZSBFT3BJbmRleERpcmVjdFN0cnVjdDogcmV0dXJuICIuIjsKLSAgICAgIGNhc2UgRU9wVmVj
dG9yU3dpenpsZTogcmV0dXJuICIuIjsKLSAgICAgIGNhc2UgRU9wQWRkOiByZXR1cm4gIisiOwot
ICAgICAgY2FzZSBFT3BTdWI6IHJldHVybiAiLSI7Ci0gICAgICBjYXNlIEVPcE11bDogcmV0dXJu
ICIqIjsKLSAgICAgIGNhc2UgRU9wRGl2OiByZXR1cm4gIi8iOwotICAgICAgY2FzZSBFT3BNb2Q6
IFVOSU1QTEVNRU5URUQoKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcEVxdWFsOiByZXR1cm4gIj09
IjsKLSAgICAgIGNhc2UgRU9wTm90RXF1YWw6IHJldHVybiAiIT0iOwotICAgICAgY2FzZSBFT3BM
ZXNzVGhhbjogcmV0dXJuICI8IjsKLSAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46IHJldHVybiAi
PiI7Ci0gICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6IHJldHVybiAiPD0iOwotICAgICAgY2Fz
ZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiByZXR1cm4gIj49IjsKLQotICAgICAgLy8gRmFsbC10aHJv
dWdoLgotICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjoKLSAgICAgIGNhc2UgRU9wVmVj
dG9yVGltZXNNYXRyaXg6Ci0gICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVjdG9yOgotICAgICAg
Y2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhcjoKLSAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRy
aXg6IHJldHVybiAiKiI7Ci0KLSAgICAgIGNhc2UgRU9wTG9naWNhbE9yOiByZXR1cm4gInx8IjsK
LSAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjogcmV0dXJuICJeXiI7Ci0gICAgICBjYXNlIEVPcExv
Z2ljYWxBbmQ6IHJldHVybiAiJiYiOwotICAgICAgY2FzZSBFT3BOZWdhdGl2ZTogcmV0dXJuICIt
IjsKLSAgICAgIGNhc2UgRU9wVmVjdG9yTG9naWNhbE5vdDogcmV0dXJuICJub3QiOwotICAgICAg
Y2FzZSBFT3BMb2dpY2FsTm90OiByZXR1cm4gIiEiOwotICAgICAgY2FzZSBFT3BQb3N0SW5jcmVt
ZW50OiByZXR1cm4gIisrIjsKLSAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDogcmV0dXJuICIt
LSI7Ci0gICAgICBjYXNlIEVPcFByZUluY3JlbWVudDogcmV0dXJuICIrKyI7Ci0gICAgICBjYXNl
IEVPcFByZURlY3JlbWVudDogcmV0dXJuICItLSI7Ci0KLSAgICAgIC8vIEZhbGwtdGhyb3VnaC4K
LSAgICAgIGNhc2UgRU9wQ29udkludFRvQm9vbDoKLSAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9C
b29sOiByZXR1cm4gImJvb2wiOwotIAotICAgICAgLy8gRmFsbC10aHJvdWdoLgotICAgICAgY2Fz
ZSBFT3BDb252Qm9vbFRvRmxvYXQ6Ci0gICAgICBjYXNlIEVPcENvbnZJbnRUb0Zsb2F0OiByZXR1
cm4gImZsb2F0IjsKLSAKLSAgICAgIC8vIEZhbGwtdGhyb3VnaC4KLSAgICAgIGNhc2UgRU9wQ29u
dkZsb2F0VG9JbnQ6Ci0gICAgICBjYXNlIEVPcENvbnZCb29sVG9JbnQ6IHJldHVybiAiaW50IjsK
LQotICAgICAgY2FzZSBFT3BSYWRpYW5zOiByZXR1cm4gInJhZGlhbnMiOwotICAgICAgY2FzZSBF
T3BEZWdyZWVzOiByZXR1cm4gImRlZ3JlZXMiOwotICAgICAgY2FzZSBFT3BTaW46IHJldHVybiAi
c2luIjsKLSAgICAgIGNhc2UgRU9wQ29zOiByZXR1cm4gImNvcyI7Ci0gICAgICBjYXNlIEVPcFRh
bjogcmV0dXJuICJ0YW4iOwotICAgICAgY2FzZSBFT3BBc2luOiByZXR1cm4gImFzaW4iOwotICAg
ICAgY2FzZSBFT3BBY29zOiByZXR1cm4gImFjb3MiOwotICAgICAgY2FzZSBFT3BBdGFuOiByZXR1
cm4gImF0YW4iOwotICAgICAgY2FzZSBFT3BFeHA6IHJldHVybiAiZXhwIjsKLSAgICAgIGNhc2Ug
RU9wTG9nOiByZXR1cm4gImxvZyI7Ci0gICAgICBjYXNlIEVPcEV4cDI6IHJldHVybiAiZXhwMiI7
Ci0gICAgICBjYXNlIEVPcExvZzI6IHJldHVybiAibG9nMiI7Ci0gICAgICBjYXNlIEVPcFNxcnQ6
IHJldHVybiAic3FydCI7Ci0gICAgICBjYXNlIEVPcEludmVyc2VTcXJ0OiByZXR1cm4gImludmVy
c2VzcXJ0IjsKLSAgICAgIGNhc2UgRU9wQWJzOiByZXR1cm4gImFicyI7Ci0gICAgICBjYXNlIEVP
cFNpZ246IHJldHVybiAic2lnbiI7Ci0gICAgICBjYXNlIEVPcEZsb29yOiByZXR1cm4gImZsb29y
IjsKLSAgICAgIGNhc2UgRU9wQ2VpbDogcmV0dXJuICJjZWlsIjsKLSAgICAgIGNhc2UgRU9wRnJh
Y3Q6IHJldHVybiAiZnJhY3QiOwotICAgICAgY2FzZSBFT3BMZW5ndGg6IHJldHVybiAibGVuZ3Ro
IjsKLSAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiByZXR1cm4gIm5vcm1hbGl6ZSI7Ci0gICAgICBj
YXNlIEVPcERGZHg6IHJldHVybiAiZEZkeCI7Ci0gICAgICBjYXNlIEVPcERGZHk6IHJldHVybiAi
ZEZkeSI7Ci0gICAgICBjYXNlIEVPcEZ3aWR0aDogcmV0dXJuICJmd2lkdGgiOwotICAgICAgY2Fz
ZSBFT3BBbnk6IHJldHVybiAiYW55IjsKLSAgICAgIGNhc2UgRU9wQWxsOiByZXR1cm4gImFsbCI7
Ci0KLSAgICAgIGRlZmF1bHQ6IGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gIiI7Ci19Ci0KLS8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyBGaXJzdCBzZXQgb2YgZnVuY3Rpb25zIGFyZSB0byBo
ZWxwIGJ1aWxkIHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24uCi0vLyBUaGVzZSBmdW5j
dGlvbnMgYXJlIG5vdCBtZW1iZXIgZnVuY3Rpb25zIG9mIHRoZSBub2Rlcy4KLS8vIFRoZXkgYXJl
IGNhbGxlZCBmcm9tIHBhcnNlciBwcm9kdWN0aW9ucy4KLS8vCi0vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LwotCi0vLwotLy8gQWRkIGEgdGVybWluYWwgbm9kZSBmb3IgYW4gaWRlbnRpZmllciBpbiBhbiBl
eHByZXNzaW9uLgotLy8KLS8vIFJldHVybnMgdGhlIGFkZGVkIG5vZGUuCi0vLwotVEludGVybVN5
bWJvbCogVEludGVybWVkaWF0ZTo6YWRkU3ltYm9sKGludCBpZCwgY29uc3QgVFN0cmluZyYgbmFt
ZSwgY29uc3QgVFR5cGUmIHR5cGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCi17Ci0gICAgVElu
dGVybVN5bWJvbCogbm9kZSA9IG5ldyBUSW50ZXJtU3ltYm9sKGlkLCBuYW1lLCB0eXBlKTsKLSAg
ICBub2RlLT5zZXRMaW5lKGxpbmUpOwotCi0gICAgcmV0dXJuIG5vZGU7Ci19Ci0KLS8vCi0vLyBD
b25uZWN0IHR3byBub2RlcyB3aXRoIGEgbmV3IHBhcmVudCB0aGF0IGRvZXMgYSBiaW5hcnkgb3Bl
cmF0aW9uIG9uIHRoZSBub2Rlcy4KLS8vCi0vLyBSZXR1cm5zIHRoZSBhZGRlZCBub2RlLgotLy8K
LVRJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkQmluYXJ5TWF0aChUT3BlcmF0b3Igb3As
IFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdodCwgY29uc3QgVFNvdXJjZUxv
YyYgbGluZSwgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKLXsKLSAgICBzd2l0Y2ggKG9wKSB7
Ci0gICAgICAgIGNhc2UgRU9wRXF1YWw6Ci0gICAgICAgIGNhc2UgRU9wTm90RXF1YWw6Ci0gICAg
ICAgICAgICBpZiAobGVmdC0+aXNBcnJheSgpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTGVzc1RoYW46Ci0gICAgICAgIGNh
c2UgRU9wR3JlYXRlclRoYW46Ci0gICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoKLSAgICAg
ICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgotICAgICAgICAgICAgaWYgKGxlZnQtPmlzTWF0
cml4KCkgfHwgbGVmdC0+aXNBcnJheSgpIHx8IGxlZnQtPmlzVmVjdG9yKCkgfHwgbGVmdC0+Z2V0
QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BMb2dpY2Fs
T3I6Ci0gICAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjoKLSAgICAgICAgY2FzZSBFT3BMb2dpY2Fs
QW5kOgotICAgICAgICAgICAgaWYgKGxlZnQtPmdldEJhc2ljVHlwZSgpICE9IEVidEJvb2wgfHwg
bGVmdC0+aXNNYXRyaXgoKSB8fCBsZWZ0LT5pc0FycmF5KCkgfHwgbGVmdC0+aXNWZWN0b3IoKSkg
ewotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQWRkOgotICAgICAgICBjYXNlIEVPcFN1YjoKLSAgICAg
ICAgY2FzZSBFT3BEaXY6Ci0gICAgICAgIGNhc2UgRU9wTXVsOgotICAgICAgICAgICAgaWYgKGxl
ZnQtPmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCB8fCBsZWZ0LT5nZXRCYXNpY1R5cGUoKSA9
PSBFYnRCb29sKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBkZWZhdWx0OiBi
cmVhazsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIEZpcnN0IHRyeSBjb252ZXJ0aW5nIHRoZSBj
aGlsZHJlbiB0byBjb21wYXRpYmxlIHR5cGVzLgotICAgIC8vCi0gICAgaWYgKGxlZnQtPmdldFR5
cGUoKS5nZXRTdHJ1Y3QoKSAmJiByaWdodC0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpKSB7Ci0gICAg
ICAgIGlmIChsZWZ0LT5nZXRUeXBlKCkgIT0gcmlnaHQtPmdldFR5cGUoKSkKLSAgICAgICAgICAg
IHJldHVybiAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFRJbnRlcm1UeXBlZCogY2hpbGQgPSBh
ZGRDb252ZXJzaW9uKG9wLCBsZWZ0LT5nZXRUeXBlKCksIHJpZ2h0KTsKLSAgICAgICAgaWYgKGNo
aWxkKQotICAgICAgICAgICAgcmlnaHQgPSBjaGlsZDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBjaGlsZCA9IGFkZENvbnZlcnNpb24ob3AsIHJpZ2h0LT5nZXRUeXBlKCksIGxlZnQpOwot
ICAgICAgICAgICAgaWYgKGNoaWxkKQotICAgICAgICAgICAgICAgIGxlZnQgPSBjaGlsZDsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIC8vCi0gICAgLy8gTmVlZCBhIG5ldyBub2RlIGhvbGRpbmcgdGhpbmdzIHRvZ2V0
aGVyIHRoZW4uICBNYWtlCi0gICAgLy8gb25lIGFuZCBwcm9tb3RlIGl0IHRvIHRoZSByaWdodCB0
eXBlLgotICAgIC8vCi0gICAgVEludGVybUJpbmFyeSogbm9kZSA9IG5ldyBUSW50ZXJtQmluYXJ5
KG9wKTsKLSAgICBub2RlLT5zZXRMaW5lKGxpbmUpOwotCi0gICAgbm9kZS0+c2V0TGVmdChsZWZ0
KTsKLSAgICBub2RlLT5zZXRSaWdodChyaWdodCk7Ci0gICAgaWYgKCFub2RlLT5wcm9tb3RlKGlu
Zm9TaW5rKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLwotICAgIC8vIFNlZSBpZiB3ZSBj
YW4gZm9sZCBjb25zdGFudHMuCi0gICAgLy8KLSAgICBUSW50ZXJtVHlwZWQqIHR5cGVkUmV0dXJu
Tm9kZSA9IDA7Ci0gICAgVEludGVybUNvbnN0YW50VW5pb24gKmxlZnRUZW1wQ29uc3RhbnQgPSBs
ZWZ0LT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqcmln
aHRUZW1wQ29uc3RhbnQgPSByaWdodC0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0gICAgaWYgKGxl
ZnRUZW1wQ29uc3RhbnQgJiYgcmlnaHRUZW1wQ29uc3RhbnQpIHsKLSAgICAgICAgdHlwZWRSZXR1
cm5Ob2RlID0gbGVmdFRlbXBDb25zdGFudC0+Zm9sZChub2RlLT5nZXRPcCgpLCByaWdodFRlbXBD
b25zdGFudCwgaW5mb1NpbmspOwotCi0gICAgICAgIGlmICh0eXBlZFJldHVybk5vZGUpCi0gICAg
ICAgICAgICByZXR1cm4gdHlwZWRSZXR1cm5Ob2RlOwotICAgIH0KLQotICAgIHJldHVybiBub2Rl
OwotfQotCi0vLwotLy8gQ29ubmVjdCB0d28gbm9kZXMgdGhyb3VnaCBhbiBhc3NpZ25tZW50Lgot
Ly8KLS8vIFJldHVybnMgdGhlIGFkZGVkIG5vZGUuCi0vLwotVEludGVybVR5cGVkKiBUSW50ZXJt
ZWRpYXRlOjphZGRBc3NpZ24oVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRl
cm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCi17Ci0gICAgLy8KLSAgICAv
LyBMaWtlIGFkZGluZyBiaW5hcnkgbWF0aCwgZXhjZXB0IHRoZSBjb252ZXJzaW9uIGNhbiBvbmx5
IGdvCi0gICAgLy8gZnJvbSByaWdodCB0byBsZWZ0LgotICAgIC8vCi0gICAgVEludGVybUJpbmFy
eSogbm9kZSA9IG5ldyBUSW50ZXJtQmluYXJ5KG9wKTsKLSAgICBub2RlLT5zZXRMaW5lKGxpbmUp
OwotCi0gICAgVEludGVybVR5cGVkKiBjaGlsZCA9IGFkZENvbnZlcnNpb24ob3AsIGxlZnQtPmdl
dFR5cGUoKSwgcmlnaHQpOwotICAgIGlmIChjaGlsZCA9PSAwKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIG5vZGUtPnNldExlZnQobGVmdCk7Ci0gICAgbm9kZS0+c2V0UmlnaHQoY2hpbGQpOwot
ICAgIGlmICghIG5vZGUtPnByb21vdGUoaW5mb1NpbmspKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIHJldHVybiBub2RlOwotfQotCi0vLwotLy8gQ29ubmVjdCB0d28gbm9kZXMgdGhyb3VnaCBh
biBpbmRleCBvcGVyYXRvciwgd2hlcmUgdGhlIGxlZnQgbm9kZSBpcyB0aGUgYmFzZQotLy8gb2Yg
YW4gYXJyYXkgb3Igc3RydWN0LCBhbmQgdGhlIHJpZ2h0IG5vZGUgaXMgYSBkaXJlY3Qgb3IgaW5k
aXJlY3Qgb2Zmc2V0LgotLy8KLS8vIFJldHVybnMgdGhlIGFkZGVkIG5vZGUuCi0vLyBUaGUgY2Fs
bGVyIHNob3VsZCBzZXQgdGhlIHR5cGUgb2YgdGhlIHJldHVybmVkIG5vZGUuCi0vLwotVEludGVy
bVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRJbmRleChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBl
ZCogYmFzZSwgVEludGVybVR5cGVkKiBpbmRleCwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKLXsK
LSAgICBUSW50ZXJtQmluYXJ5KiBub2RlID0gbmV3IFRJbnRlcm1CaW5hcnkob3ApOwotICAgIG5v
ZGUtPnNldExpbmUobGluZSk7Ci0gICAgbm9kZS0+c2V0TGVmdChiYXNlKTsKLSAgICBub2RlLT5z
ZXRSaWdodChpbmRleCk7Ci0KLSAgICAvLyBjYWxsZXIgc2hvdWxkIHNldCB0aGUgdHlwZQotCi0g
ICAgcmV0dXJuIG5vZGU7Ci19Ci0KLS8vCi0vLyBBZGQgb25lIG5vZGUgYXMgdGhlIHBhcmVudCBv
ZiBhbm90aGVyIHRoYXQgaXQgb3BlcmF0ZXMgb24uCi0vLwotLy8gUmV0dXJucyB0aGUgYWRkZWQg
bm9kZS4KLS8vCi1USW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZFVuYXJ5TWF0aChUT3Bl
cmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBjaGlsZE5vZGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUs
IFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCi17Ci0gICAgVEludGVybVVuYXJ5KiBub2RlOwot
ICAgIFRJbnRlcm1UeXBlZCogY2hpbGQgPSBjaGlsZE5vZGUtPmdldEFzVHlwZWQoKTsKLQotICAg
IGlmIChjaGlsZCA9PSAwKSB7Ci0gICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4
SW50ZXJuYWxFcnJvciwgbGluZSwgIkJhZCB0eXBlIGluIEFkZFVuYXJ5TWF0aCIpOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgRU9w
TG9naWNhbE5vdDoKLSAgICAgICAgICAgIGlmIChjaGlsZC0+Z2V0VHlwZSgpLmdldEJhc2ljVHlw
ZSgpICE9IEVidEJvb2wgfHwgY2hpbGQtPmdldFR5cGUoKS5pc01hdHJpeCgpIHx8IGNoaWxkLT5n
ZXRUeXBlKCkuaXNBcnJheSgpIHx8IGNoaWxkLT5nZXRUeXBlKCkuaXNWZWN0b3IoKSkgewotICAg
ICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50OgotICAgICAgICBjYXNlIEVPcFByZUlu
Y3JlbWVudDoKLSAgICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OgotICAgICAgICBjYXNlIEVP
cFByZURlY3JlbWVudDoKLSAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZToKLSAgICAgICAgICAgIGlm
IChjaGlsZC0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCB8fCBjaGlsZC0+
Z2V0VHlwZSgpLmlzQXJyYXkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
ZGVmYXVsdDogYnJlYWs7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBEbyB3ZSBuZWVkIHRvIHBy
b21vdGUgdGhlIG9wZXJhbmQ/Ci0gICAgLy8KLSAgICAvLyBOb3RlOiBJbXBsaWNpdCBwcm9tb3Rp
b25zIHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBsYW5ndWFnZS4KLSAgICAvLwotICAgIFRCYXNpY1R5
cGUgbmV3VHlwZSA9IEVidFZvaWQ7Ci0gICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIEVP
cENvbnN0cnVjdEludDogICBuZXdUeXBlID0gRWJ0SW50OyAgIGJyZWFrOwotICAgICAgICBjYXNl
IEVPcENvbnN0cnVjdEJvb2w6ICBuZXdUeXBlID0gRWJ0Qm9vbDsgIGJyZWFrOwotICAgICAgICBj
YXNlIEVPcENvbnN0cnVjdEZsb2F0OiBuZXdUeXBlID0gRWJ0RmxvYXQ7IGJyZWFrOwotICAgICAg
ICBkZWZhdWx0OiBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAobmV3VHlwZSAhPSBFYnRWb2lkKSB7
Ci0gICAgICAgIGNoaWxkID0gYWRkQ29udmVyc2lvbihvcCwgVFR5cGUobmV3VHlwZSwgY2hpbGQt
PmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksCi0gICAgICAgICAgICBjaGlsZC0+Z2V0Tm9t
aW5hbFNpemUoKSwKLSAgICAgICAgICAgIGNoaWxkLT5pc01hdHJpeCgpLAotICAgICAgICAgICAg
Y2hpbGQtPmlzQXJyYXkoKSksCi0gICAgICAgICAgICBjaGlsZCk7Ci0gICAgICAgIGlmIChjaGls
ZCA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBG
b3IgY29uc3RydWN0b3JzLCB3ZSBhcmUgbm93IGRvbmUsIGl0J3MgYWxsIGluIHRoZSBjb252ZXJz
aW9uLgotICAgIC8vCi0gICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIEVPcENvbnN0cnVj
dEludDoKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29sOgotICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdEZsb2F0OgotICAgICAgICAgICAgcmV0dXJuIGNoaWxkOwotICAgICAgICBkZWZhdWx0
OiBicmVhazsKLSAgICB9Ci0KLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqY2hpbGRUZW1wQ29u
c3RhbnQgPSAwOwotICAgIGlmIChjaGlsZC0+Z2V0QXNDb25zdGFudFVuaW9uKCkpCi0gICAgICAg
IGNoaWxkVGVtcENvbnN0YW50ID0gY2hpbGQtPmdldEFzQ29uc3RhbnRVbmlvbigpOwotCi0gICAg
Ly8KLSAgICAvLyBNYWtlIGEgbmV3IG5vZGUgZm9yIHRoZSBvcGVyYXRvci4KLSAgICAvLwotICAg
IG5vZGUgPSBuZXcgVEludGVybVVuYXJ5KG9wKTsKLSAgICBub2RlLT5zZXRMaW5lKGxpbmUpOwot
ICAgIG5vZGUtPnNldE9wZXJhbmQoY2hpbGQpOwotCi0gICAgaWYgKCEgbm9kZS0+cHJvbW90ZShp
bmZvU2luaykpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKGNoaWxkVGVtcENvbnN0YW50
KSAgewotICAgICAgICBUSW50ZXJtVHlwZWQqIG5ld0NoaWxkID0gY2hpbGRUZW1wQ29uc3RhbnQt
PmZvbGQob3AsIDAsIGluZm9TaW5rKTsKLQotICAgICAgICBpZiAobmV3Q2hpbGQpCi0gICAgICAg
ICAgICByZXR1cm4gbmV3Q2hpbGQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5vZGU7Ci19Ci0KLS8v
Ci0vLyBUaGlzIGlzIHRoZSBzYWZlIHdheSB0byBjaGFuZ2UgdGhlIG9wZXJhdG9yIG9uIGFuIGFn
Z3JlZ2F0ZSwgYXMgaXQKLS8vIGRvZXMgbG90cyBvZiBlcnJvciBjaGVja2luZyBhbmQgZml4aW5n
LiAgRXNwZWNpYWxseSBmb3IgZXN0YWJsaXNoaW5nCi0vLyBhIGZ1bmN0aW9uIGNhbGwncyBvcGVy
YXRpb24gb24gaXQncyBzZXQgb2YgcGFyYW1ldGVycy4gIFNlcXVlbmNlcwotLy8gb2YgaW5zdHJ1
Y3Rpb25zIGFyZSBhbHNvIGFnZ3JlZ2F0ZXMsIGJ1dCB0aGV5IGp1c3QgZGlyZW5jdGx5IHNldAot
Ly8gdGhlaXIgb3BlcmF0b3IgdG8gRU9wU2VxdWVuY2UuCi0vLwotLy8gUmV0dXJucyBhbiBhZ2dy
ZWdhdGUgbm9kZSwgd2hpY2ggY291bGQgYmUgdGhlIG9uZSBwYXNzZWQgaW4gaWYKLS8vIGl0IHdh
cyBhbHJlYWR5IGFuIGFnZ3JlZ2F0ZSBidXQgbm8gb3BlcmF0b3Igd2FzIHNldC4KLS8vCi1USW50
ZXJtQWdncmVnYXRlKiBUSW50ZXJtZWRpYXRlOjpzZXRBZ2dyZWdhdGVPcGVyYXRvcihUSW50ZXJt
Tm9kZSogbm9kZSwgVE9wZXJhdG9yIG9wLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQotewotICAg
IFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ05vZGU7Ci0KLSAgICAvLwotICAgIC8vIE1ha2Ugc3VyZSB3
ZSBoYXZlIGFuIGFnZ3JlZ2F0ZS4gIElmIG5vdCB0dXJuIGl0IGludG8gb25lLgotICAgIC8vCi0g
ICAgaWYgKG5vZGUpIHsKLSAgICAgICAgYWdnTm9kZSA9IG5vZGUtPmdldEFzQWdncmVnYXRlKCk7
Ci0gICAgICAgIGlmIChhZ2dOb2RlID09IDAgfHwgYWdnTm9kZS0+Z2V0T3AoKSAhPSBFT3BOdWxs
KSB7Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gTWFrZSBhbiBhZ2dyZWdhdGUgY29u
dGFpbmluZyB0aGlzIG5vZGUuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgYWdnTm9kZSA9
IG5ldyBUSW50ZXJtQWdncmVnYXRlKCk7Ci0gICAgICAgICAgICBhZ2dOb2RlLT5nZXRTZXF1ZW5j
ZSgpLnB1c2hfYmFjayhub2RlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICBhZ2dO
b2RlID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGUoKTsKLQotICAgIC8vCi0gICAgLy8gU2V0IHRoZSBv
cGVyYXRvci4KLSAgICAvLwotICAgIGFnZ05vZGUtPnNldE9wKG9wKTsKLSAgICBhZ2dOb2RlLT5z
ZXRMaW5lKGxpbmUpOwotCi0gICAgcmV0dXJuIGFnZ05vZGU7Ci19Ci0KLS8vCi0vLyBDb252ZXJ0
IG9uZSB0eXBlIHRvIGFub3RoZXIuCi0vLwotLy8gUmV0dXJucyB0aGUgbm9kZSByZXByZXNlbnRp
bmcgdGhlIGNvbnZlcnNpb24sIHdoaWNoIGNvdWxkIGJlIHRoZSBzYW1lCi0vLyBub2RlIHBhc3Nl
ZCBpbiBpZiBubyBjb252ZXJzaW9uIHdhcyBuZWVkZWQuCi0vLwotLy8gUmV0dXJuIDAgaWYgYSBj
b252ZXJzaW9uIGNhbid0IGJlIGRvbmUuCi0vLwotVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRl
OjphZGRDb252ZXJzaW9uKFRPcGVyYXRvciBvcCwgY29uc3QgVFR5cGUmIHR5cGUsIFRJbnRlcm1U
eXBlZCogbm9kZSkKLXsKLSAgICAvLwotICAgIC8vIERvZXMgdGhlIGJhc2UgdHlwZSBhbGxvdyBv
cGVyYXRpb24/Ci0gICAgLy8KLSAgICBzd2l0Y2ggKG5vZGUtPmdldEJhc2ljVHlwZSgpKSB7Ci0g
ICAgICAgIGNhc2UgRWJ0Vm9pZDoKLSAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6Ci0gICAgICAg
IGNhc2UgRWJ0U2FtcGxlckN1YmU6Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgZGVm
YXVsdDogYnJlYWs7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBPdGhlcndpc2UsIGlmIHR5cGVz
IGFyZSBpZGVudGljYWwsIG5vIHByb2JsZW0KLSAgICAvLwotICAgIGlmICh0eXBlID09IG5vZGUt
PmdldFR5cGUoKSkKLSAgICAgICAgcmV0dXJuIG5vZGU7Ci0KLSAgICAvLwotICAgIC8vIElmIG9u
ZSdzIGEgc3RydWN0dXJlLCB0aGVuIG5vIGNvbnZlcnNpb25zLgotICAgIC8vCi0gICAgaWYgKHR5
cGUuZ2V0U3RydWN0KCkgfHwgbm9kZS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIC8vCi0gICAgLy8gSWYgb25lJ3MgYW4gYXJyYXksIHRoZW4gbm8gY29u
dmVyc2lvbnMuCi0gICAgLy8KLSAgICBpZiAodHlwZS5pc0FycmF5KCkgfHwgbm9kZS0+Z2V0VHlw
ZSgpLmlzQXJyYXkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBUQmFzaWNUeXBlIHByb21v
dGVUbzsKLQotICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gRXhwbGlj
aXQgY29udmVyc2lvbnMKLSAgICAgICAgLy8KLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29s
OgotICAgICAgICAgICAgcHJvbW90ZVRvID0gRWJ0Qm9vbDsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OgotICAgICAgICAgICAgcHJvbW90ZVRvID0g
RWJ0RmxvYXQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJ
bnQ6Ci0gICAgICAgICAgICBwcm9tb3RlVG8gPSBFYnRJbnQ7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBpbXBsaWNp
dCBjb252ZXJzaW9ucyB3ZXJlIHJlbW92ZWQgZnJvbSB0aGUgbGFuZ3VhZ2UuCi0gICAgICAgICAg
ICAvLwotICAgICAgICAgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgIT0gbm9kZS0+Z2V0VHlw
ZSgpLmdldEJhc2ljVHlwZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAg
ICAgLy8KLSAgICAgICAgICAgIC8vIFNpemUgYW5kIHN0cnVjdHVyZSBjb3VsZCBzdGlsbCBkaWZm
ZXIsIGJ1dCB0aGF0J3MKLSAgICAgICAgICAgIC8vIGhhbmRsZWQgYnkgb3BlcmF0b3IgcHJvbW90
aW9uLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgIH0KLQot
ICAgIGlmIChub2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKSkgewotCi0gICAgICAgIHJldHVybiAo
cHJvbW90ZUNvbnN0YW50VW5pb24ocHJvbW90ZVRvLCBub2RlLT5nZXRBc0NvbnN0YW50VW5pb24o
KSkpOwotICAgIH0gZWxzZSB7Ci0KLSAgICAgICAgLy8KLSAgICAgICAgLy8gQWRkIGEgbmV3IG5l
d05vZGUgZm9yIHRoZSBjb252ZXJzaW9uLgotICAgICAgICAvLwotICAgICAgICBUSW50ZXJtVW5h
cnkqIG5ld05vZGUgPSAwOwotCi0gICAgICAgIFRPcGVyYXRvciBuZXdPcCA9IEVPcE51bGw7Ci0g
ICAgICAgIHN3aXRjaCAocHJvbW90ZVRvKSB7Ci0gICAgICAgICAgICBjYXNlIEVidEZsb2F0Ogot
ICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgbmV3T3AgPSBFT3BDb252SW50VG9GbG9hdDsgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6ICBuZXdPcCA9IEVPcENvbnZC
b29sVG9GbG9hdDsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJy
b3IsIG5vZGUtPmdldExpbmUoKSwgIkJhZCBwcm9tb3Rpb24gbm9kZSIpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFYnRCb29sOgotICAgICAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJ
bnQ6ICAgbmV3T3AgPSBFT3BDb252SW50VG9Cb29sOyAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICBjYXNlIEVidEZsb2F0OiBuZXdPcCA9IEVPcENvbnZGbG9hdFRvQm9vbDsgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmZv
U2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwg
IkJhZCBwcm9tb3Rpb24gbm9kZSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBFYnRJbnQ6Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRCYXNpY1R5cGUo
KSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6ICAgbmV3T3AgPSBFT3BDb252
Qm9vbFRvSW50OyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6ICBu
ZXdPcCA9IEVPcENvbnZGbG9hdFRvSW50OyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQmFkIHByb21vdGlvbiBub2RlIik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0
TGluZSgpLCAiQmFkIHByb21vdGlvbiB0eXBlIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgIH0KLQotICAgICAgICBUVHlwZSB0eXBlKHByb21vdGVUbywgbm9kZS0+Z2V0UHJl
Y2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgbm9kZS0+Z2V0Tm9taW5hbFNpemUoKSwgbm9kZS0+aXNN
YXRyaXgoKSwgbm9kZS0+aXNBcnJheSgpKTsKLSAgICAgICAgbmV3Tm9kZSA9IG5ldyBUSW50ZXJt
VW5hcnkobmV3T3AsIHR5cGUpOwotICAgICAgICBuZXdOb2RlLT5zZXRMaW5lKG5vZGUtPmdldExp
bmUoKSk7Ci0gICAgICAgIG5ld05vZGUtPnNldE9wZXJhbmQobm9kZSk7Ci0KLSAgICAgICAgcmV0
dXJuIG5ld05vZGU7Ci0gICAgfQotfQotCi0vLwotLy8gU2FmZSB3YXkgdG8gY29tYmluZSB0d28g
bm9kZXMgaW50byBhbiBhZ2dyZWdhdGUuICBXb3JrcyB3aXRoIG51bGwgcG9pbnRlcnMsCi0vLyBh
IG5vZGUgdGhhdCdzIG5vdCBhIGFnZ3JlZ2F0ZSB5ZXQsIGV0Yy4KLS8vCi0vLyBSZXR1cm5zIHRo
ZSByZXN1bHRpbmcgYWdncmVnYXRlLCB1bmxlc3MgMCB3YXMgcGFzc2VkIGluIGZvcgotLy8gYm90
aCBleGlzdGluZyBub2Rlcy4KLS8vCi1USW50ZXJtQWdncmVnYXRlKiBUSW50ZXJtZWRpYXRlOjpn
cm93QWdncmVnYXRlKFRJbnRlcm1Ob2RlKiBsZWZ0LCBUSW50ZXJtTm9kZSogcmlnaHQsIGNvbnN0
IFRTb3VyY2VMb2MmIGxpbmUpCi17Ci0gICAgaWYgKGxlZnQgPT0gMCAmJiByaWdodCA9PSAwKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ05vZGUgPSAwOwot
ICAgIGlmIChsZWZ0KQotICAgICAgICBhZ2dOb2RlID0gbGVmdC0+Z2V0QXNBZ2dyZWdhdGUoKTsK
LSAgICBpZiAoIWFnZ05vZGUgfHwgYWdnTm9kZS0+Z2V0T3AoKSAhPSBFT3BOdWxsKSB7Ci0gICAg
ICAgIGFnZ05vZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKLSAgICAgICAgaWYgKGxlZnQpCi0g
ICAgICAgICAgICBhZ2dOb2RlLT5nZXRTZXF1ZW5jZSgpLnB1c2hfYmFjayhsZWZ0KTsKLSAgICB9
Ci0KLSAgICBpZiAocmlnaHQpCi0gICAgICAgIGFnZ05vZGUtPmdldFNlcXVlbmNlKCkucHVzaF9i
YWNrKHJpZ2h0KTsKLQotICAgIGFnZ05vZGUtPnNldExpbmUobGluZSk7Ci0KLSAgICByZXR1cm4g
YWdnTm9kZTsKLX0KLQotLy8KLS8vIFR1cm4gYW4gZXhpc3Rpbmcgbm9kZSBpbnRvIGFuIGFnZ3Jl
Z2F0ZS4KLS8vCi0vLyBSZXR1cm5zIGFuIGFnZ3JlZ2F0ZSwgdW5sZXNzIDAgd2FzIHBhc3NlZCBp
biBmb3IgdGhlIGV4aXN0aW5nIG5vZGUuCi0vLwotVEludGVybUFnZ3JlZ2F0ZSogVEludGVybWVk
aWF0ZTo6bWFrZUFnZ3JlZ2F0ZShUSW50ZXJtTm9kZSogbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYg
bGluZSkKLXsKLSAgICBpZiAobm9kZSA9PSAwKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFRJ
bnRlcm1BZ2dyZWdhdGUqIGFnZ05vZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKLSAgICBhZ2dO
b2RlLT5nZXRTZXF1ZW5jZSgpLnB1c2hfYmFjayhub2RlKTsKLSAgICBhZ2dOb2RlLT5zZXRMaW5l
KGxpbmUpOwotCi0gICAgcmV0dXJuIGFnZ05vZGU7Ci19Ci0KLS8vCi0vLyBGb3IgImlmIiB0ZXN0
IG5vZGVzLiAgVGhlcmUgYXJlIHRocmVlIGNoaWxkcmVuOyBhIGNvbmRpdGlvbiwKLS8vIGEgdHJ1
ZSBwYXRoLCBhbmQgYSBmYWxzZSBwYXRoLiAgVGhlIHR3byBwYXRocyBhcmUgaW4gdGhlCi0vLyBu
b2RlUGFpci4KLS8vCi0vLyBSZXR1cm5zIHRoZSBzZWxlY3Rpb24gbm9kZSBjcmVhdGVkLgotLy8K
LVRJbnRlcm1Ob2RlKiBUSW50ZXJtZWRpYXRlOjphZGRTZWxlY3Rpb24oVEludGVybVR5cGVkKiBj
b25kLCBUSW50ZXJtTm9kZVBhaXIgbm9kZVBhaXIsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCi17
Ci0gICAgLy8KLSAgICAvLyBGb3IgY29tcGlsZSB0aW1lIGNvbnN0YW50IHNlbGVjdGlvbnMsIHBy
dW5lIHRoZSBjb2RlIGFuZAotICAgIC8vIHRlc3Qgbm93LgotICAgIC8vCi0KLSAgICBpZiAoY29u
ZC0+Z2V0QXNUeXBlZCgpICYmIGNvbmQtPmdldEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9u
KCkpIHsKLSAgICAgICAgaWYgKGNvbmQtPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRCQ29uc3Qo
MCkgPT0gdHJ1ZSkKLSAgICAgICAgICAgIHJldHVybiBub2RlUGFpci5ub2RlMSA/IHNldEFnZ3Jl
Z2F0ZU9wZXJhdG9yKG5vZGVQYWlyLm5vZGUxLCBFT3BTZXF1ZW5jZSwgbm9kZVBhaXIubm9kZTEt
PmdldExpbmUoKSkgOiBOVUxMOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gbm9k
ZVBhaXIubm9kZTIgPyBzZXRBZ2dyZWdhdGVPcGVyYXRvcihub2RlUGFpci5ub2RlMiwgRU9wU2Vx
dWVuY2UsIG5vZGVQYWlyLm5vZGUyLT5nZXRMaW5lKCkpIDogTlVMTDsKLSAgICB9Ci0KLSAgICBU
SW50ZXJtU2VsZWN0aW9uKiBub2RlID0gbmV3IFRJbnRlcm1TZWxlY3Rpb24oY29uZCwgbm9kZVBh
aXIubm9kZTEsIG5vZGVQYWlyLm5vZGUyKTsKLSAgICBub2RlLT5zZXRMaW5lKGxpbmUpOwotCi0g
ICAgcmV0dXJuIG5vZGU7Ci19Ci0KLQotVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRD
b21tYShUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3Vy
Y2VMb2MmIGxpbmUpCi17Ci0gICAgaWYgKGxlZnQtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9
PSBFdnFDb25zdCAmJiByaWdodC0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0
KSB7Ci0gICAgICAgIHJldHVybiByaWdodDsKLSAgICB9IGVsc2UgewotICAgICAgICBUSW50ZXJt
VHlwZWQgKmNvbW1hQWdncmVnYXRlID0gZ3Jvd0FnZ3JlZ2F0ZShsZWZ0LCByaWdodCwgbGluZSk7
Ci0gICAgICAgIGNvbW1hQWdncmVnYXRlLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRPcChFT3BDb21t
YSk7Ci0gICAgICAgIGNvbW1hQWdncmVnYXRlLT5zZXRUeXBlKHJpZ2h0LT5nZXRUeXBlKCkpOwot
ICAgICAgICBjb21tYUFnZ3JlZ2F0ZS0+Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2
cVRlbXBvcmFyeSk7Ci0gICAgICAgIHJldHVybiBjb21tYUFnZ3JlZ2F0ZTsKLSAgICB9Ci19Ci0K
LS8vCi0vLyBGb3IgIj86IiB0ZXN0IG5vZGVzLiAgVGhlcmUgYXJlIHRocmVlIGNoaWxkcmVuOyBh
IGNvbmRpdGlvbiwKLS8vIGEgdHJ1ZSBwYXRoLCBhbmQgYSBmYWxzZSBwYXRoLiAgVGhlIHR3byBw
YXRocyBhcmUgc3BlY2lmaWVkCi0vLyBhcyBzZXBhcmF0ZSBwYXJhbWV0ZXJzLgotLy8KLS8vIFJl
dHVybnMgdGhlIHNlbGVjdGlvbiBub2RlIGNyZWF0ZWQsIG9yIDAgaWYgb25lIGNvdWxkIG5vdCBi
ZS4KLS8vCi1USW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZFNlbGVjdGlvbihUSW50ZXJt
VHlwZWQqIGNvbmQsIFRJbnRlcm1UeXBlZCogdHJ1ZUJsb2NrLCBUSW50ZXJtVHlwZWQqIGZhbHNl
QmxvY2ssIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCi17Ci0gICAgLy8KLSAgICAvLyBHZXQgY29t
cGF0aWJsZSB0eXBlcy4KLSAgICAvLwotICAgIFRJbnRlcm1UeXBlZCogY2hpbGQgPSBhZGRDb252
ZXJzaW9uKEVPcFNlcXVlbmNlLCB0cnVlQmxvY2stPmdldFR5cGUoKSwgZmFsc2VCbG9jayk7Ci0g
ICAgaWYgKGNoaWxkKQotICAgICAgICBmYWxzZUJsb2NrID0gY2hpbGQ7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIGNoaWxkID0gYWRkQ29udmVyc2lvbihFT3BTZXF1ZW5jZSwgZmFsc2VCbG9jay0+Z2V0
VHlwZSgpLCB0cnVlQmxvY2spOwotICAgICAgICBpZiAoY2hpbGQpCi0gICAgICAgICAgICB0cnVl
QmxvY2sgPSBjaGlsZDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotCi0gICAgLy8KLSAgICAvLyBTZWUgaWYgYWxsIHRoZSBvcGVyYW5kcyBhcmUgY29uc3RhbnQs
IHRoZW4gZm9sZCBpdCBvdGhlcndpc2Ugbm90LgotICAgIC8vCi0KLSAgICBpZiAoY29uZC0+Z2V0
QXNDb25zdGFudFVuaW9uKCkgJiYgdHJ1ZUJsb2NrLT5nZXRBc0NvbnN0YW50VW5pb24oKSAmJiBm
YWxzZUJsb2NrLT5nZXRBc0NvbnN0YW50VW5pb24oKSkgewotICAgICAgICBpZiAoY29uZC0+Z2V0
QXNDb25zdGFudFVuaW9uKCktPmdldEJDb25zdCgwKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
QmxvY2s7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBmYWxzZUJsb2NrOwotICAg
IH0KLQotICAgIC8vCi0gICAgLy8gTWFrZSBhIHNlbGVjdGlvbiBub2RlLgotICAgIC8vCi0gICAg
VEludGVybVNlbGVjdGlvbiogbm9kZSA9IG5ldyBUSW50ZXJtU2VsZWN0aW9uKGNvbmQsIHRydWVC
bG9jaywgZmFsc2VCbG9jaywgdHJ1ZUJsb2NrLT5nZXRUeXBlKCkpOwotICAgIG5vZGUtPmdldFR5
cGVQb2ludGVyKCktPnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwotICAgIG5vZGUtPnNldExp
bmUobGluZSk7Ci0KLSAgICByZXR1cm4gbm9kZTsKLX0KLQotLy8KLS8vIENvbnN0YW50IHRlcm1p
bmFsIG5vZGVzLiAgSGFzIGEgdW5pb24gdGhhdCBjb250YWlucyBib29sLCBmbG9hdCBvciBpbnQg
Y29uc3RhbnRzCi0vLwotLy8gUmV0dXJucyB0aGUgY29uc3RhbnQgdW5pb24gbm9kZSBjcmVhdGVk
LgotLy8KLQotVEludGVybUNvbnN0YW50VW5pb24qIFRJbnRlcm1lZGlhdGU6OmFkZENvbnN0YW50
VW5pb24oQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheVBvaW50ZXIsIGNvbnN0IFRUeXBlJiB0LCBj
b25zdCBUU291cmNlTG9jJiBsaW5lKQotewotICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2Rl
ID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHVuaW9uQXJyYXlQb2ludGVyLCB0KTsKLSAgICBu
b2RlLT5zZXRMaW5lKGxpbmUpOwotCi0gICAgcmV0dXJuIG5vZGU7Ci19Ci0KLVRJbnRlcm1UeXBl
ZCogVEludGVybWVkaWF0ZTo6YWRkU3dpenpsZShUVmVjdG9yRmllbGRzJiBmaWVsZHMsIGNvbnN0
IFRTb3VyY2VMb2MmIGxpbmUpCi17Ci0KLSAgICBUSW50ZXJtQWdncmVnYXRlKiBub2RlID0gbmV3
IFRJbnRlcm1BZ2dyZWdhdGUoRU9wU2VxdWVuY2UpOwotCi0gICAgbm9kZS0+c2V0TGluZShsaW5l
KTsKLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogY29uc3RJbnROb2RlOwotICAgIFRJbnRlcm1T
ZXF1ZW5jZSAmc2VxdWVuY2VWZWN0b3IgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOwotICAgIENvbnN0
YW50VW5pb24qIHVuaW9uQXJyYXk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpZWxkcy5u
dW07IGkrKykgewotICAgICAgICB1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0g
ICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChmaWVsZHMub2Zmc2V0c1tpXSk7Ci0gICAgICAg
IGNvbnN0SW50Tm9kZSA9IGFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50
LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgbGluZSk7Ci0gICAgICAgIHNlcXVlbmNlVmVjdG9y
LnB1c2hfYmFjayhjb25zdEludE5vZGUpOwotICAgIH0KLQotICAgIHJldHVybiBub2RlOwotfQot
Ci0vLwotLy8gQ3JlYXRlIGxvb3Agbm9kZXMuCi0vLwotVEludGVybU5vZGUqIFRJbnRlcm1lZGlh
dGU6OmFkZExvb3AoVExvb3BUeXBlIHR5cGUsIFRJbnRlcm1Ob2RlKiBpbml0LCBUSW50ZXJtVHlw
ZWQqIGNvbmQsIFRJbnRlcm1UeXBlZCogZXhwciwgVEludGVybU5vZGUqIGJvZHksIGNvbnN0IFRT
b3VyY2VMb2MmIGxpbmUpCi17Ci0gICAgVEludGVybU5vZGUqIG5vZGUgPSBuZXcgVEludGVybUxv
b3AodHlwZSwgaW5pdCwgY29uZCwgZXhwciwgYm9keSk7Ci0gICAgbm9kZS0+c2V0TGluZShsaW5l
KTsKLQotICAgIHJldHVybiBub2RlOwotfQotCi0vLwotLy8gQWRkIGJyYW5jaGVzLgotLy8KLVRJ
bnRlcm1CcmFuY2gqIFRJbnRlcm1lZGlhdGU6OmFkZEJyYW5jaChUT3BlcmF0b3IgYnJhbmNoT3As
IGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCi17Ci0gICAgcmV0dXJuIGFkZEJyYW5jaChicmFuY2hP
cCwgMCwgbGluZSk7Ci19Ci0KLVRJbnRlcm1CcmFuY2gqIFRJbnRlcm1lZGlhdGU6OmFkZEJyYW5j
aChUT3BlcmF0b3IgYnJhbmNoT3AsIFRJbnRlcm1UeXBlZCogZXhwcmVzc2lvbiwgY29uc3QgVFNv
dXJjZUxvYyYgbGluZSkKLXsKLSAgICBUSW50ZXJtQnJhbmNoKiBub2RlID0gbmV3IFRJbnRlcm1C
cmFuY2goYnJhbmNoT3AsIGV4cHJlc3Npb24pOwotICAgIG5vZGUtPnNldExpbmUobGluZSk7Ci0K
LSAgICByZXR1cm4gbm9kZTsKLX0KLQotLy8KLS8vIFRoaXMgaXMgdG8gYmUgZXhlY3V0ZWQgb25j
ZSB0aGUgZmluYWwgcm9vdCBpcyBwdXQgb24gdG9wIGJ5IHRoZSBwYXJzaW5nCi0vLyBwcm9jZXNz
LgotLy8KLWJvb2wgVEludGVybWVkaWF0ZTo6cG9zdFByb2Nlc3MoVEludGVybU5vZGUqIHJvb3Qp
Ci17Ci0gICAgaWYgKHJvb3QgPT0gMCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLwot
ICAgIC8vIEZpcnN0LCBmaW5pc2ggb2ZmIHRoZSB0b3AgbGV2ZWwgc2VxdWVuY2UsIGlmIGFueQot
ICAgIC8vCi0gICAgVEludGVybUFnZ3JlZ2F0ZSogYWdnUm9vdCA9IHJvb3QtPmdldEFzQWdncmVn
YXRlKCk7Ci0gICAgaWYgKGFnZ1Jvb3QgJiYgYWdnUm9vdC0+Z2V0T3AoKSA9PSBFT3BOdWxsKQot
ICAgICAgICBhZ2dSb290LT5zZXRPcChFT3BTZXF1ZW5jZSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotLy8KLS8vIFRoaXMgZGVsZXRlcyB0aGUgdHJlZS4KLS8vCi12b2lkIFRJbnRlcm1lZGlh
dGU6OnJlbW92ZShUSW50ZXJtTm9kZSogcm9vdCkKLXsKLSAgICBpZiAocm9vdCkKLSAgICAgICAg
UmVtb3ZlQWxsVHJlZU5vZGVzKHJvb3QpOwotfQotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwotLy8gTWVtYmVyIGZ1
bmN0aW9ucyBvZiB0aGUgbm9kZXMgdXNlZCBmb3IgYnVpbGRpbmcgdGhlIHRyZWUuCi0vLwotLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLwotCi0jZGVmaW5lIFJFUExBQ0VfSUZfSVMobm9kZSwgdHlwZSwgb3JpZ2luYWwsIHJlcGxh
Y2VtZW50KSBcCi0gICAgaWYgKG5vZGUgPT0gb3JpZ2luYWwpIHsgXAotICAgICAgICBub2RlID0g
c3RhdGljX2Nhc3Q8dHlwZSAqPihyZXBsYWNlbWVudCk7IFwKLSAgICAgICAgcmV0dXJuIHRydWU7
IFwKLSAgICB9Ci0KLWJvb2wgVEludGVybUxvb3A6OnJlcGxhY2VDaGlsZE5vZGUoCi0gICAgVElu
dGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFjZW1lbnQpCi17Ci0gICAgUkVQ
TEFDRV9JRl9JUyhpbml0LCBUSW50ZXJtTm9kZSwgb3JpZ2luYWwsIHJlcGxhY2VtZW50KTsKLSAg
ICBSRVBMQUNFX0lGX0lTKGNvbmQsIFRJbnRlcm1UeXBlZCwgb3JpZ2luYWwsIHJlcGxhY2VtZW50
KTsKLSAgICBSRVBMQUNFX0lGX0lTKGV4cHIsIFRJbnRlcm1UeXBlZCwgb3JpZ2luYWwsIHJlcGxh
Y2VtZW50KTsKLSAgICBSRVBMQUNFX0lGX0lTKGJvZHksIFRJbnRlcm1Ob2RlLCBvcmlnaW5hbCwg
cmVwbGFjZW1lbnQpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBUSW50ZXJtQnJhbmNo
OjpyZXBsYWNlQ2hpbGROb2RlKAotICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5v
ZGUgKnJlcGxhY2VtZW50KQotewotICAgIFJFUExBQ0VfSUZfSVMoZXhwcmVzc2lvbiwgVEludGVy
bVR5cGVkLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Ym9vbCBUSW50ZXJtQmluYXJ5OjpyZXBsYWNlQ2hpbGROb2RlKAotICAgIFRJbnRlcm1Ob2RlICpv
cmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KQotewotICAgIFJFUExBQ0VfSUZfSVMo
bGVmdCwgVEludGVybVR5cGVkLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpOwotICAgIFJFUExBQ0Vf
SUZfSVMocmlnaHQsIFRJbnRlcm1UeXBlZCwgb3JpZ2luYWwsIHJlcGxhY2VtZW50KTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVEludGVybVVuYXJ5OjpyZXBsYWNlQ2hpbGROb2RlKAot
ICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KQotewot
ICAgIFJFUExBQ0VfSUZfSVMob3BlcmFuZCwgVEludGVybVR5cGVkLCBvcmlnaW5hbCwgcmVwbGFj
ZW1lbnQpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBUSW50ZXJtQWdncmVnYXRlOjpy
ZXBsYWNlQ2hpbGROb2RlKAotICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUg
KnJlcGxhY2VtZW50KQotewotICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCBzZXF1ZW5jZS5z
aXplKCk7ICsraWkpCi0gICAgewotICAgICAgICBSRVBMQUNFX0lGX0lTKHNlcXVlbmNlW2lpXSwg
VEludGVybU5vZGUsIG9yaWdpbmFsLCByZXBsYWNlbWVudCk7Ci0gICAgfQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotYm9vbCBUSW50ZXJtU2VsZWN0aW9uOjpyZXBsYWNlQ2hpbGROb2RlKAotICAg
IFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KQotewotICAg
IFJFUExBQ0VfSUZfSVMoY29uZGl0aW9uLCBUSW50ZXJtVHlwZWQsIG9yaWdpbmFsLCByZXBsYWNl
bWVudCk7Ci0gICAgUkVQTEFDRV9JRl9JUyh0cnVlQmxvY2ssIFRJbnRlcm1Ob2RlLCBvcmlnaW5h
bCwgcmVwbGFjZW1lbnQpOwotICAgIFJFUExBQ0VfSUZfSVMoZmFsc2VCbG9jaywgVEludGVybU5v
ZGUsIG9yaWdpbmFsLCByZXBsYWNlbWVudCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLwot
Ly8gU2F5IHdoZXRoZXIgb3Igbm90IGFuIG9wZXJhdGlvbiBub2RlIGNoYW5nZXMgdGhlIHZhbHVl
IG9mIGEgdmFyaWFibGUuCi0vLwotYm9vbCBUSW50ZXJtT3BlcmF0b3I6OmlzQXNzaWdubWVudCgp
IGNvbnN0Ci17Ci0gICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1l
bnQ6Ci0gICAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDoKLSAgICAgICAgY2FzZSBFT3BQcmVJ
bmNyZW1lbnQ6Ci0gICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OgotICAgICAgICBjYXNlIEVP
cEFzc2lnbjoKLSAgICAgICAgY2FzZSBFT3BBZGRBc3NpZ246Ci0gICAgICAgIGNhc2UgRU9wU3Vi
QXNzaWduOgotICAgICAgICBjYXNlIEVPcE11bEFzc2lnbjoKLSAgICAgICAgY2FzZSBFT3BWZWN0
b3JUaW1lc01hdHJpeEFzc2lnbjoKLSAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhckFz
c2lnbjoKLSAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbjoKLSAgICAgICAg
Y2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjoKLSAgICAgICAgY2FzZSBFT3BEaXZBc3Np
Z246Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLS8vCi0vLyByZXR1cm5zIHRydWUgaWYgdGhl
IG9wZXJhdG9yIGlzIGZvciBvbmUgb2YgdGhlIGNvbnN0cnVjdG9ycwotLy8KLWJvb2wgVEludGVy
bU9wZXJhdG9yOjppc0NvbnN0cnVjdG9yKCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0g
ICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMjoKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RW
ZWMzOgotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzQ6Ci0gICAgICAgIGNhc2UgRU9wQ29u
c3RydWN0TWF0MjoKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQzOgotICAgICAgICBjYXNl
IEVPcENvbnN0cnVjdE1hdDQ6Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6Ci0gICAg
ICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZl
YzM6Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzQ6Ci0gICAgICAgIGNhc2UgRU9wQ29u
c3RydWN0SW50OgotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMyOgotICAgICAgICBjYXNl
IEVPcENvbnN0cnVjdEJWZWMzOgotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWM0OgotICAg
ICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0U3Ry
dWN0OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi0vLwotLy8gTWFrZSBzdXJlIHRoZSB0eXBl
IG9mIGEgdW5hcnkgb3BlcmF0b3IgaXMgYXBwcm9wcmlhdGUgZm9yIGl0cwotLy8gY29tYmluYXRp
b24gb2Ygb3BlcmF0aW9uIGFuZCBvcGVyYW5kIHR5cGUuCi0vLwotLy8gUmV0dXJucyBmYWxzZSBp
biBub3RoaW5nIG1ha2VzIHNlbnNlLgotLy8KLWJvb2wgVEludGVybVVuYXJ5Ojpwcm9tb3RlKFRJ
bmZvU2luayYpCi17Ci0gICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIEVPcExvZ2ljYWxO
b3Q6Ci0gICAgICAgICAgICBpZiAob3BlcmFuZC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Qm9vbCkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBFT3BOZWdhdGl2ZToKLSAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50OgotICAg
ICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6Ci0gICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50
OgotICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDoKLSAgICAgICAgICAgIGlmIChvcGVyYW5k
LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRCb29sKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAvLyBvcGVyYXRvcnMgZm9yIGJ1
aWx0LWlucyBhcmUgYWxyZWFkeSB0eXBlIGNoZWNrZWQgYWdhaW5zdCB0aGVpciBwcm90b3R5cGUK
LSAgICAgICAgY2FzZSBFT3BBbnk6Ci0gICAgICAgIGNhc2UgRU9wQWxsOgotICAgICAgICBjYXNl
IEVPcFZlY3RvckxvZ2ljYWxOb3Q6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgaWYgKG9wZXJhbmQtPmdldEJhc2ljVHlwZSgpICE9IEVi
dEZsb2F0KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzZXRU
eXBlKG9wZXJhbmQtPmdldFR5cGUoKSk7Ci0gICAgdHlwZS5zZXRRdWFsaWZpZXIoRXZxVGVtcG9y
YXJ5KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLwotLy8gRXN0YWJsaXNoZXMgdGhlIHR5
cGUgb2YgdGhlIHJlc3VsdGFudCBvcGVyYXRpb24sIGFzIHdlbGwgYXMKLS8vIG1ha2VzIHRoZSBv
cGVyYXRvciB0aGUgY29ycmVjdCBvbmUgZm9yIHRoZSBvcGVyYW5kcy4KLS8vCi0vLyBSZXR1cm5z
IGZhbHNlIGlmIG9wZXJhdG9yIGNhbid0IHdvcmsgb24gb3BlcmFuZHMuCi0vLwotYm9vbCBUSW50
ZXJtQmluYXJ5Ojpwcm9tb3RlKFRJbmZvU2luayYgaW5mb1NpbmspCi17Ci0gICAgLy8gVGhpcyBm
dW5jdGlvbiBvbmx5IGhhbmRsZXMgc2NhbGFycywgdmVjdG9ycywgYW5kIG1hdHJpY2VzLgotICAg
IGlmIChsZWZ0LT5pc0FycmF5KCkgfHwgcmlnaHQtPmlzQXJyYXkoKSkgewotICAgICAgICBpbmZv
U2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIkludmFs
aWQgb3BlcmF0aW9uIGZvciBhcnJheXMiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIC8vIEdMU0wgRVMgMi4wIGRvZXMgbm90IHN1cHBvcnQgaW1wbGljaXQgdHlwZSBjYXN0
aW5nLgotICAgIC8vIFNvIHRoZSBiYXNpYyB0eXBlIHNob3VsZCBhbHdheXMgbWF0Y2guCi0gICAg
aWYgKGxlZnQtPmdldEJhc2ljVHlwZSgpICE9IHJpZ2h0LT5nZXRCYXNpY1R5cGUoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8KLSAgICAvLyBCYXNlIGFzc3VtcHRpb246ICBqdXN0
IG1ha2UgdGhlIHR5cGUgdGhlIHNhbWUgYXMgdGhlIGxlZnQKLSAgICAvLyBvcGVyYW5kLiAgVGhl
biBvbmx5IGRldmlhdGlvbnMgZnJvbSB0aGlzIG5lZWQgYmUgY29kZWQuCi0gICAgLy8KLSAgICBz
ZXRUeXBlKGxlZnQtPmdldFR5cGUoKSk7Ci0KLSAgICAvLyBUaGUgcmVzdWx0IGdldHMgcHJvbW90
ZWQgdG8gdGhlIGhpZ2hlc3QgcHJlY2lzaW9uLgotICAgIFRQcmVjaXNpb24gaGlnaGVyUHJlY2lz
aW9uID0gR2V0SGlnaGVyUHJlY2lzaW9uKGxlZnQtPmdldFByZWNpc2lvbigpLCByaWdodC0+Z2V0
UHJlY2lzaW9uKCkpOwotICAgIGdldFR5cGVQb2ludGVyKCktPnNldFByZWNpc2lvbihoaWdoZXJQ
cmVjaXNpb24pOwotCi0gICAgLy8gQmluYXJ5IG9wZXJhdGlvbnMgcmVzdWx0cyBpbiB0ZW1wb3Jh
cnkgdmFyaWFibGVzIHVubGVzcyBib3RoCi0gICAgLy8gb3BlcmFuZHMgYXJlIGNvbnN0LgotICAg
IGlmIChsZWZ0LT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFDb25zdCB8fCByaWdodC0+Z2V0UXVhbGlm
aWVyKCkgIT0gRXZxQ29uc3QpIHsKLSAgICAgICAgZ2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlm
aWVyKEV2cVRlbXBvcmFyeSk7Ci0gICAgfQotCi0gICAgaW50IHNpemUgPSBzdGQ6Om1heChsZWZ0
LT5nZXROb21pbmFsU2l6ZSgpLCByaWdodC0+Z2V0Tm9taW5hbFNpemUoKSk7Ci0KLSAgICAvLwot
ICAgIC8vIEFsbCBzY2FsYXJzLiBDb2RlIGFmdGVyIHRoaXMgdGVzdCBhc3N1bWVzIHRoaXMgY2Fz
ZSBpcyByZW1vdmVkIQotICAgIC8vCi0gICAgaWYgKHNpemUgPT0gMSkgewotICAgICAgICBzd2l0
Y2ggKG9wKSB7Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gUHJvbW90ZSB0byBjb25k
aXRpb25hbAotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGNhc2UgRU9wRXF1YWw6Ci0gICAg
ICAgICAgICBjYXNlIEVPcE5vdEVxdWFsOgotICAgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjoK
LSAgICAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46Ci0gICAgICAgICAgICBjYXNlIEVPcExl
c3NUaGFuRXF1YWw6Ci0gICAgICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6Ci0gICAg
ICAgICAgICAgICAgc2V0VHlwZShUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQpKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIEFuZCBh
bmQgT3Igb3BlcmF0ZSBvbiBjb25kaXRpb25hbHMKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAg
ICBjYXNlIEVPcExvZ2ljYWxBbmQ6Ci0gICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjoKLSAg
ICAgICAgICAgICAgICAvLyBCb3RoIG9wZXJhbmRzIG11c3QgYmUgb2YgdHlwZSBib29sLgotICAg
ICAgICAgICAgICAgIGlmIChsZWZ0LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sIHx8IHJpZ2h0
LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShFYnRCb29sLCBFYnBVbmRlZmlu
ZWQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICAvLyBJZiB3ZSByZWFjaCBoZXJlLCBhdCBsZWFzdCBvbmUgb2YgdGhlIG9wZXJh
bmRzIGlzIHZlY3RvciBvciBtYXRyaXguCi0gICAgLy8gVGhlIG90aGVyIG9wZXJhbmQgY291bGQg
YmUgYSBzY2FsYXIsIHZlY3Rvciwgb3IgbWF0cml4LgotICAgIC8vIEFyZSB0aGUgc2l6ZXMgY29t
cGF0aWJsZT8KLSAgICAvLwotICAgIGlmIChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpICE9IHJpZ2h0
LT5nZXROb21pbmFsU2l6ZSgpKSB7Ci0gICAgICAgIC8vIElmIHRoZSBub21pbmFsIHNpemUgb2Yg
b3BlcmFuZHMgZG8gbm90IG1hdGNoOgotICAgICAgICAvLyBPbmUgb2YgdGhlbSBtdXN0IGJlIHNj
YWxhci4KLSAgICAgICAgaWYgKGxlZnQtPmdldE5vbWluYWxTaXplKCkgIT0gMSAmJiByaWdodC0+
Z2V0Tm9taW5hbFNpemUoKSAhPSAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAvLyBPcGVyYXRvciBjYW5ub3QgYmUgb2YgdHlwZSBwdXJlIGFzc2lnbm1lbnQuCi0gICAgICAg
IGlmIChvcCA9PSBFT3BBc3NpZ24gfHwgb3AgPT0gRU9wSW5pdGlhbGl6ZSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIENhbiB0aGVzZSB0d28gb3Bl
cmFuZHMgYmUgY29tYmluZWQ/Ci0gICAgLy8KLSAgICBUQmFzaWNUeXBlIGJhc2ljVHlwZSA9IGxl
ZnQtPmdldEJhc2ljVHlwZSgpOwotICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBFT3BN
dWw6Ci0gICAgICAgICAgICBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4
KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobGVmdC0+aXNWZWN0b3IoKSkKLSAgICAgICAgICAg
ICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc01hdHJpeDsKLSAgICAgICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc1NjYWxhcjsKLSAgICAg
ICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwg
RXZxVGVtcG9yYXJ5LCBzaXplLCB0cnVlKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfSBlbHNlIGlmIChsZWZ0LT5pc01hdHJpeCgpICYmICFyaWdodC0+aXNNYXRyaXgoKSkgewot
ICAgICAgICAgICAgICAgIGlmIChyaWdodC0+aXNWZWN0b3IoKSkgewotICAgICAgICAgICAgICAg
ICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzVmVjdG9yOwotICAgICAgICAgICAgICAgICAgICBzZXRU
eXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUs
IGZhbHNlKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
b3AgPSBFT3BNYXRyaXhUaW1lc1NjYWxhcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKLSAg
ICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzTWF0cml4OwotICAgICAgICAgICAgfSBl
bHNlIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKLSAgICAg
ICAgICAgICAgICBpZiAobGVmdC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNWZWN0b3IoKSkgewot
ICAgICAgICAgICAgICAgICAgICAvLyBsZWF2ZSBhcyBjb21wb25lbnQgcHJvZHVjdAotICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNWZWN0b3IoKSB8fCByaWdodC0+aXNWZWN0b3Io
KSkgewotICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcFZlY3RvclRpbWVzU2NhbGFyOwotICAg
ICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9u
LCBFdnFUZW1wb3JhcnksIHNpemUsIGZhbHNlKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVBy
ZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIk1pc3NpbmcgZWxzZXMiKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBFT3BNdWxBc3NpZ246Ci0gICAgICAgICAgICBpZiAoIWxlZnQtPmlzTWF0
cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobGVmdC0+
aXNWZWN0b3IoKSkKLSAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc01hdHJp
eEFzc2lnbjsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAobGVm
dC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgICAgICBp
ZiAocmlnaHQtPmlzVmVjdG9yKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG9wID0gRU9w
TWF0cml4VGltZXNTY2FsYXJBc3NpZ247Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fSBlbHNlIGlmIChsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSB7Ci0gICAg
ICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjsKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQtPmlzVmVjdG9yKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gbGVhdmUgYXMgY29tcG9uZW50IHByb2R1Y3QKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzVmVjdG9yKCkgfHwgcmlnaHQtPmlzVmVj
dG9yKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCEgbGVmdC0+aXNWZWN0b3IoKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAg
b3AgPSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjsKLSAgICAgICAgICAgICAgICAgICAgc2V0
VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXpl
LCBmYWxzZSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBn
ZXRMaW5lKCksICJNaXNzaW5nIGVsc2VzIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BB
c3NpZ246Ci0gICAgICAgIGNhc2UgRU9wSW5pdGlhbGl6ZToKLSAgICAgICAgY2FzZSBFT3BBZGQ6
Ci0gICAgICAgIGNhc2UgRU9wU3ViOgotICAgICAgICBjYXNlIEVPcERpdjoKLSAgICAgICAgY2Fz
ZSBFT3BBZGRBc3NpZ246Ci0gICAgICAgIGNhc2UgRU9wU3ViQXNzaWduOgotICAgICAgICBjYXNl
IEVPcERpdkFzc2lnbjoKLSAgICAgICAgICAgIGlmICgobGVmdC0+aXNNYXRyaXgoKSAmJiByaWdo
dC0+aXNWZWN0b3IoKSkgfHwKLSAgICAgICAgICAgICAgICAobGVmdC0+aXNWZWN0b3IoKSAmJiBy
aWdodC0+aXNNYXRyaXgoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9y
YXJ5LCBzaXplLCBsZWZ0LT5pc01hdHJpeCgpIHx8IHJpZ2h0LT5pc01hdHJpeCgpKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEVPcEVxdWFsOgotICAgICAgICBjYXNlIEVP
cE5vdEVxdWFsOgotICAgICAgICBjYXNlIEVPcExlc3NUaGFuOgotICAgICAgICBjYXNlIEVPcEdy
ZWF0ZXJUaGFuOgotICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6Ci0gICAgICAgIGNhc2Ug
RU9wR3JlYXRlclRoYW5FcXVhbDoKLSAgICAgICAgICAgIGlmICgobGVmdC0+aXNNYXRyaXgoKSAm
JiByaWdodC0+aXNWZWN0b3IoKSkgfHwKLSAgICAgICAgICAgICAgICAobGVmdC0+aXNWZWN0b3Io
KSAmJiByaWdodC0+aXNNYXRyaXgoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgc2V0VHlwZShUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENvbXBhcmVTdHJ1
Y3QoY29uc3QgVFR5cGUmIGxlZnROb2RlVHlwZSwgQ29uc3RhbnRVbmlvbiogcmlnaHRVbmlvbkFy
cmF5LCBDb25zdGFudFVuaW9uKiBsZWZ0VW5pb25BcnJheSkKLXsKLSAgICBjb25zdCBURmllbGRM
aXN0JiBmaWVsZHMgPSBsZWZ0Tm9kZVR5cGUuZ2V0U3RydWN0KCktPmZpZWxkcygpOwotCi0gICAg
c2l6ZV90IHN0cnVjdFNpemUgPSBmaWVsZHMuc2l6ZSgpOwotICAgIHNpemVfdCBpbmRleCA9IDA7
Ci0KLSAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHN0cnVjdFNpemU7IGorKykgewotICAgICAg
ICBzaXplX3Qgc2l6ZSA9IGZpZWxkc1tqXS0+dHlwZSgpLT5nZXRPYmplY3RTaXplKCk7Ci0gICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAo
ZmllbGRzW2pdLT50eXBlKCktPmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgewotICAgICAg
ICAgICAgICAgIGlmICghQ29tcGFyZVN0cnVjdHVyZSgqKGZpZWxkc1tqXS0+dHlwZSgpKSwgJnJp
Z2h0VW5pb25BcnJheVtpbmRleF0sICZsZWZ0VW5pb25BcnJheVtpbmRleF0pKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIGlmIChsZWZ0VW5pb25BcnJheVtpbmRleF0gIT0gcmlnaHRVbmlvbkFycmF5W2luZGV4
XSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGlu
ZGV4Kys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgQ29tcGFyZVN0cnVjdHVyZShjb25zdCBUVHlwZSYgbGVmdE5vZGVUeXBlLCBD
b25zdGFudFVuaW9uKiByaWdodFVuaW9uQXJyYXksIENvbnN0YW50VW5pb24qIGxlZnRVbmlvbkFy
cmF5KQotewotICAgIGlmIChsZWZ0Tm9kZVR5cGUuaXNBcnJheSgpKSB7Ci0gICAgICAgIFRUeXBl
IHR5cGVXaXRob3V0QXJyYXluZXNzID0gbGVmdE5vZGVUeXBlOwotICAgICAgICB0eXBlV2l0aG91
dEFycmF5bmVzcy5jbGVhckFycmF5bmVzcygpOwotCi0gICAgICAgIHNpemVfdCBhcnJheVNpemUg
PSBsZWZ0Tm9kZVR5cGUuZ2V0QXJyYXlTaXplKCk7Ci0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBhcnJheVNpemU7ICsraSkgewotICAgICAgICAgICAgc2l6ZV90IG9mZnNldCA9IHR5
cGVXaXRob3V0QXJyYXluZXNzLmdldE9iamVjdFNpemUoKSAqIGk7Ci0gICAgICAgICAgICBpZiAo
IUNvbXBhcmVTdHJ1Y3QodHlwZVdpdGhvdXRBcnJheW5lc3MsICZyaWdodFVuaW9uQXJyYXlbb2Zm
c2V0XSwgJmxlZnRVbmlvbkFycmF5W29mZnNldF0pKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gQ29tcGFyZVN0cnVj
dChsZWZ0Tm9kZVR5cGUsIHJpZ2h0VW5pb25BcnJheSwgbGVmdFVuaW9uQXJyYXkpOwotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLS8vCi0vLyBUaGUgZm9sZCBmdW5jdGlvbnMgc2VlIGlmIGFuIG9w
ZXJhdGlvbiBvbiBhIGNvbnN0YW50IGNhbiBiZSBkb25lIGluIHBsYWNlLAotLy8gd2l0aG91dCBn
ZW5lcmF0aW5nIHJ1bi10aW1lIGNvZGUuCi0vLwotLy8gUmV0dXJucyB0aGUgbm9kZSB0byBrZWVw
IHVzaW5nLCB3aGljaCBtYXkgb3IgbWF5IG5vdCBiZSB0aGUgbm9kZSBwYXNzZWQgaW4uCi0vLwot
Ci1USW50ZXJtVHlwZWQqIFRJbnRlcm1Db25zdGFudFVuaW9uOjpmb2xkKFRPcGVyYXRvciBvcCwg
VEludGVybVR5cGVkKiBjb25zdGFudE5vZGUsIFRJbmZvU2luayYgaW5mb1NpbmspCi17Ci0gICAg
Q29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IGdldFVuaW9uQXJyYXlQb2ludGVyKCk7Ci0gICAg
c2l6ZV90IG9iamVjdFNpemUgPSBnZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOwotCi0gICAgaWYg
KGNvbnN0YW50Tm9kZSkgeyAgLy8gYmluYXJ5IG9wZXJhdGlvbnMKLSAgICAgICAgVEludGVybUNv
bnN0YW50VW5pb24gKm5vZGUgPSBjb25zdGFudE5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOwot
ICAgICAgICBDb25zdGFudFVuaW9uICpyaWdodFVuaW9uQXJyYXkgPSBub2RlLT5nZXRVbmlvbkFy
cmF5UG9pbnRlcigpOwotICAgICAgICBUVHlwZSByZXR1cm5UeXBlID0gZ2V0VHlwZSgpOwotCi0g
ICAgICAgIC8vIGZvciBhIGNhc2UgbGlrZSBmbG9hdCBmID0gMS4yICsgdmVjNCgyLDMsNCw1KTsK
LSAgICAgICAgaWYgKGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKSA9PSAx
ICYmIG9iamVjdFNpemUgPiAxKSB7Ci0gICAgICAgICAgICByaWdodFVuaW9uQXJyYXkgPSBuZXcg
Q29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgb2JqZWN0U2l6ZTsgKytpKQotICAgICAgICAgICAgICAgIHJpZ2h0VW5pb25BcnJheVtp
XSA9ICpub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOwotICAgICAgICAgICAgcmV0dXJuVHlw
ZSA9IGdldFR5cGUoKTsKLSAgICAgICAgfSBlbHNlIGlmIChjb25zdGFudE5vZGUtPmdldFR5cGUo
KS5nZXRPYmplY3RTaXplKCkgPiAxICYmIG9iamVjdFNpemUgPT0gMSkgewotICAgICAgICAgICAg
Ly8gZm9yIGEgY2FzZSBsaWtlIGZsb2F0IGYgPSB2ZWM0KDIsMyw0LDUpICsgMS4yOwotICAgICAg
ICAgICAgdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW2NvbnN0YW50Tm9kZS0+Z2V0VHlw
ZSgpLmdldE9iamVjdFNpemUoKV07Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsgKytpKQotICAgICAgICAg
ICAgICAgIHVuaW9uQXJyYXlbaV0gPSAqZ2V0VW5pb25BcnJheVBvaW50ZXIoKTsKLSAgICAgICAg
ICAgIHJldHVyblR5cGUgPSBub2RlLT5nZXRUeXBlKCk7Ci0gICAgICAgICAgICBvYmplY3RTaXpl
ID0gY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOwotICAgICAgICB9Ci0K
LSAgICAgICAgQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0QXJyYXkgPSAwOwotICAgICAgICBUSW50
ZXJtQ29uc3RhbnRVbmlvbiAqdGVtcE5vZGU7Ci0KLSAgICAgICAgYm9vbCBib29sTm9kZUZsYWcg
PSBmYWxzZTsKLSAgICAgICAgc3dpdGNoKG9wKSB7Ci0gICAgICAgICAgICBjYXNlIEVPcEFkZDoK
LSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVj
dFNpemVdOwotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSArIHJp
Z2h0VW5pb25BcnJheVtpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIEVPcFN1YjoKLSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RB
cnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwotICAgICAgICAgICAgICAgIHsv
LyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG9iamVjdFNpemU7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25z
dEFycmF5W2ldID0gdW5pb25BcnJheVtpXSAtIHJpZ2h0VW5pb25BcnJheVtpXTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgRU9w
TXVsOgotICAgICAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjoKLSAgICAgICAgICAg
IGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXI6Ci0gICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAgICAgICAgICB7Ly8g
c3VwcG9ydCBNU1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBvYmplY3RTaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RB
cnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gKiByaWdodFVuaW9uQXJyYXlbaV07Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFT3BNYXRy
aXhUaW1lc01hdHJpeDoKLSAgICAgICAgICAgICAgICBpZiAoZ2V0VHlwZSgpLmdldEJhc2ljVHlw
ZSgpICE9IEVidEZsb2F0IHx8IG5vZGUtPmdldEJhc2ljVHlwZSgpICE9IEVidEZsb2F0KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxF
cnJvciwgZ2V0TGluZSgpLCAiQ29uc3RhbnQgRm9sZGluZyBjYW5ub3QgYmUgZG9uZSBmb3IgbWF0
cml4IG11bHRpcGx5Iik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKLSAgICAgICAg
ICAgICAgICAgICAgaW50IHNpemUgPSBnZXROb21pbmFsU2l6ZSgpOwotICAgICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW3NpemUqc2l6ZV07Ci0gICAg
ICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHNpemU7IHJvdysrKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBzaXpl
OyBjb2x1bW4rKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5
W3NpemUgKiBjb2x1bW4gKyByb3ddLnNldEZDb25zdCgwLjBmKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtzaXplICogY29sdW1uICsgcm93XS5z
ZXRGQ29uc3QodGVtcENvbnN0QXJyYXlbc2l6ZSAqIGNvbHVtbiArIHJvd10uZ2V0RkNvbnN0KCkg
KyB1bmlvbkFycmF5W2kgKiBzaXplICsgcm93XS5nZXRGQ29uc3QoKSAqIChyaWdodFVuaW9uQXJy
YXlbY29sdW1uICogc2l6ZSArIGldLmdldEZDb25zdCgpKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBFT3BEaXY6Ci0gICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29u
c3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZD
Kys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RT
aXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdl
dEJhc2ljVHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEVidEZsb2F0OgotICAgICAgICAgICAg
ICAgIGlmIChyaWdodFVuaW9uQXJyYXlbaV0gPT0gMC4wZikgewotICAgICAgICAgICAgICAgICAg
ICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeFdhcm5pbmcsIGdldExpbmUoKSwgIkRpdmlk
ZSBieSB6ZXJvIGVycm9yIGR1cmluZyBjb25zdGFudCBmb2xkaW5nIik7Ci0gICAgICAgICAgICAg
ICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCh1bmlvbkFycmF5W2ldLmdldEZDb25z
dCgpIDwgMCA/IC1GTFRfTUFYIDogRkxUX01BWCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCh1bmlvbkFycmF5
W2ldLmdldEZDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdldEZDb25zdCgpKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAgICAg
ICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtpXSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgZ2V0TGluZSgpLCAiRGl2aWRl
IGJ5IHplcm8gZXJyb3IgZHVyaW5nIGNvbnN0YW50IGZvbGRpbmciKTsKLSAgICAgICAgICAgICAg
ICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0SUNvbnN0KElOVF9NQVgpOwotICAgICAgICAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRJQ29u
c3QodW5pb25BcnJheVtpXS5nZXRJQ29uc3QoKSAvIHJpZ2h0VW5pb25BcnJheVtpXS5nZXRJQ29u
c3QoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwg
Z2V0TGluZSgpLCAiQ29uc3RhbnQgZm9sZGluZyBjYW5ub3QgYmUgZG9uZSBmb3IgXCIvXCIiKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1ZlY3RvcjoKLSAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBn
ZXRMaW5lKCksICJDb25zdGFudCBGb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciBtYXRyaXggdGlt
ZXMgdmVjdG9yIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
W2dldE5vbWluYWxTaXplKCldOwotCi0gICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysr
Ni4wCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHNpemUgPSBnZXROb21pbmFsU2l6ZSgp
LCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENv
bnN0QXJyYXlbaV0uc2V0RkNvbnN0KDAuMGYpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9y
IChpbnQgaiA9IDA7IGogPCBzaXplOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QodGVtcENvbnN0QXJyYXlbaV0uZ2V0RkNvbnN0
KCkgKyAoKHVuaW9uQXJyYXlbaipzaXplICsgaV0uZ2V0RkNvbnN0KCkpICogcmlnaHRVbmlvbkFy
cmF5W2pdLmdldEZDb25zdCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0ZW1w
Tm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgbm9kZS0+Z2V0
VHlwZSgpKTsKLSAgICAgICAgICAgICAgICB0ZW1wTm9kZS0+c2V0TGluZShnZXRMaW5lKCkpOwot
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOwotCi0gICAgICAgICAgICBjYXNlIEVP
cFZlY3RvclRpbWVzTWF0cml4OgotICAgICAgICAgICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0QmFz
aWNUeXBlKCkgIT0gRWJ0RmxvYXQpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5m
by5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJDb25zdGFudCBGb2xk
aW5nIGNhbm5vdCBiZSBkb25lIGZvciB2ZWN0b3IgdGltZXMgbWF0cml4Iik7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bZ2V0Tm9taW5hbFNpemUoKV07Ci0g
ICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCi0gICAgICAgICAgICAgICAgICAg
IGZvciAoaW50IHNpemUgPSBnZXROb21pbmFsU2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7IGkrKykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KDAu
MGYpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzaXplOyBq
KyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRG
Q29uc3QodGVtcENvbnN0QXJyYXlbaV0uZ2V0RkNvbnN0KCkgKyAoKHVuaW9uQXJyYXlbal0uZ2V0
RkNvbnN0KCkpICogcmlnaHRVbmlvbkFycmF5W2kqc2l6ZSArIGpdLmdldEZDb25zdCgpKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgRU9w
TG9naWNhbEFuZDogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9yIHBvc3NpYmxlIGZ1dHVyZSB1
c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkKLSAgICAgICAgICAgICAgICB0ZW1w
Q29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwotICAgICAgICAgICAg
ICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRl
bXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSAmJiByaWdodFVuaW9uQXJyYXlbaV07Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBj
YXNlIEVPcExvZ2ljYWxPcjogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9yIHBvc3NpYmxlIGZ1
dHVyZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkKLSAgICAgICAgICAgICAg
ICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwotICAgICAg
ICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSB8fCByaWdodFVuaW9uQXJyYXlb
aV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
ICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6Ci0gICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkg
PSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAgICAgICAgICB7Ly8gc3Vw
cG9ydCBNU1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBvYmplY3RTaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5
cGUoKS5nZXRCYXNpY1R5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBFYnRCb29sOiB0ZW1wQ29u
c3RBcnJheVtpXS5zZXRCQ29uc3QoKHVuaW9uQXJyYXlbaV0gPT0gcmlnaHRVbmlvbkFycmF5W2ld
KSA/IGZhbHNlIDogdHJ1ZSk7IGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDogYXNzZXJ0KGZh
bHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBF
T3BMZXNzVGhhbjoKLSAgICAgICAgICAgICAgICBhc3NlcnQob2JqZWN0U2l6ZSA9PSAxKTsKLSAg
ICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAg
ICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoKnVuaW9uQXJyYXkgPCAqcmln
aHRVbmlvbkFycmF5KTsKLSAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gVFR5cGUoRWJ0Qm9v
bCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgotICAgICAgICAgICAgICAgIGFzc2VydChvYmpl
Y3RTaXplID09IDEpOwotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCgq
dW5pb25BcnJheSA+ICpyaWdodFVuaW9uQXJyYXkpOwotICAgICAgICAgICAgICAgIHJldHVyblR5
cGUgPSBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydChvYmplY3RTaXplID09IDEpOwot
ICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uIGNvbnN0YW50OwotICAgICAgICAgICAg
ICAgICAgICBjb25zdGFudC5zZXRCQ29uc3QoKnVuaW9uQXJyYXkgPiAqcmlnaHRVbmlvbkFycmF5
KTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlv
blsxXTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCghY29u
c3RhbnQuZ2V0QkNvbnN0KCkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gVFR5
cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCk7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRo
YW5FcXVhbDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydChv
YmplY3RTaXplID09IDEpOwotICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uIGNvbnN0
YW50OwotICAgICAgICAgICAgICAgICAgICBjb25zdGFudC5zZXRCQ29uc3QoKnVuaW9uQXJyYXkg
PCAqcmlnaHRVbmlvbkFycmF5KTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkg
PSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXktPnNldEJDb25zdCghY29uc3RhbnQuZ2V0QkNvbnN0KCkpOwotICAgICAgICAgICAgICAgICAg
ICByZXR1cm5UeXBlID0gVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgY2FzZSBFT3BFcXVhbDoKLSAgICAgICAgICAgICAgICBpZiAoZ2V0VHlwZSgpLmdldEJhc2lj
VHlwZSgpID09IEVidFN0cnVjdCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIUNvbXBhcmVT
dHJ1Y3R1cmUobm9kZS0+Z2V0VHlwZSgpLCBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLCB1
bmlvbkFycmF5KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh1bmlvbkFycmF5W2ldICE9IHJpZ2h0VW5pb25BcnJheVtpXSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7ICAvLyBicmVhayBvdXQgb2YgZm9yIGxvb3AKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0g
ICAgICAgICAgICAgICAgaWYgKCFib29sTm9kZUZsYWcpIHsKLSAgICAgICAgICAgICAgICAgICAg
dGVtcENvbnN0QXJyYXktPnNldEJDb25zdCh0cnVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5z
ZXRCQ29uc3QoZmFsc2UpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRl
bXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCBUVHlwZShF
YnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSk7Ci0gICAgICAgICAgICAgICAgdGVtcE5v
ZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wTm9k
ZTsKLQotICAgICAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKLSAgICAgICAgICAgICAgICBpZiAo
Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoQ29tcGFyZVN0cnVjdHVyZShub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdldFVuaW9u
QXJyYXlQb2ludGVyKCksIHVuaW9uQXJyYXkpKQotICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bE5vZGVGbGFnID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHVuaW9uQXJyYXlbaV0gPT0gcmlnaHRVbmlvbkFycmF5W2ld
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbE5vZGVGbGFnID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgIC8vIGJyZWFrIG91dCBvZiBmb3IgbG9v
cAotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29u
c3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgICAgICBpZiAoIWJvb2xOb2RlRmxhZykgewotICAg
ICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KHRydWUpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
dGVtcENvbnN0QXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgdGVtcE5vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24odGVtcENv
bnN0QXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpKTsKLSAgICAg
ICAgICAgICAgICB0ZW1wTm9kZS0+c2V0TGluZShnZXRMaW5lKCkpOwotCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRlbXBOb2RlOwotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgp
LCAiSW52YWxpZCBvcGVyYXRvciBmb3IgY29uc3RhbnQgZm9sZGluZyIpOwotICAgICAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRlcm1D
b25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCByZXR1cm5UeXBlKTsKLSAgICAgICAgdGVtcE5v
ZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKLQotICAgICAgICByZXR1cm4gdGVtcE5vZGU7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gRG8gdW5hcnkgb3BlcmF0aW9ucwotICAg
ICAgICAvLwotICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbmV3Tm9kZSA9IDA7Ci0gICAg
ICAgIENvbnN0YW50VW5pb24qIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2Jq
ZWN0U2l6ZV07Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsr
KSB7Ci0gICAgICAgICAgICBzd2l0Y2gob3ApIHsKLSAgICAgICAgICAgICAgICBjYXNlIEVPcE5l
Z2F0aXZlOgotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRCYXNpY1R5
cGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogdGVtcENvbnN0
QXJyYXlbaV0uc2V0RkNvbnN0KC11bmlvbkFycmF5W2ldLmdldEZDb25zdCgpKTsgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDogICB0ZW1wQ29uc3RBcnJheVtpXS5z
ZXRJQ29uc3QoLXVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkpOyBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1Np
bmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJVbmFyeSBv
cGVyYXRpb24gbm90IGZvbGRlZCBpbnRvIGNvbnN0YW50Iik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OiAvLyB0aGlz
IGNvZGUgaXMgd3JpdHRlbiBmb3IgcG9zc2libGUgZnV0dXJlIHVzZSwgd2lsbCBub3QgZ2V0IGV4
ZWN1dGVkIGN1cnJlbnRseQotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5n
ZXRCYXNpY1R5cGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOiAg
dGVtcENvbnN0QXJyYXlbaV0uc2V0QkNvbnN0KCF1bmlvbkFycmF5W2ldLmdldEJDb25zdCgpKTsg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwg
Z2V0TGluZSgpLCAiVW5hcnkgb3BlcmF0aW9uIG5vdCBmb2xkZWQgaW50byBjb25zdGFudCIpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIG5ld05vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24odGVtcENvbnN0QXJy
YXksIGdldFR5cGUoKSk7Ci0gICAgICAgIG5ld05vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKLSAg
ICAgICAgcmV0dXJuIG5ld05vZGU7Ci0gICAgfQotfQotCi1USW50ZXJtVHlwZWQqIFRJbnRlcm1l
ZGlhdGU6OnByb21vdGVDb25zdGFudFVuaW9uKFRCYXNpY1R5cGUgcHJvbW90ZVRvLCBUSW50ZXJt
Q29uc3RhbnRVbmlvbiogbm9kZSkKLXsKLSAgICBzaXplX3Qgc2l6ZSA9IG5vZGUtPmdldFR5cGUo
KS5nZXRPYmplY3RTaXplKCk7Ci0KLSAgICBDb25zdGFudFVuaW9uICpsZWZ0VW5pb25BcnJheSA9
IG5ldyBDb25zdGFudFVuaW9uW3NpemVdOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
aXplOyBpKyspIHsKLSAgICAgICAgaW50IGluZGV4ID0gc3RhdGljX2Nhc3Q8aW50PihpKTsKLSAg
ICAgICAgc3dpdGNoIChwcm9tb3RlVG8pIHsKLSAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6Ci0g
ICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBsZWZ0VW5pb25BcnJheVtpXS5zZXRGQ29uc3Qoc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vZGUtPmdl
dElDb25zdChpbmRleCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0
VW5pb25BcnJheVtpXS5zZXRGQ29uc3Qoc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vZGUtPmdldEJDb25z
dChpbmRleCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICBjYXNlIEVidEZsb2F0OgotICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9u
QXJyYXlbaV0uc2V0RkNvbnN0KHN0YXRpY19jYXN0PGZsb2F0Pihub2RlLT5nZXRGQ29uc3QoaW5k
ZXgpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2Fn
ZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQ2Fubm90IHByb21vdGUi
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRWJ0SW50OgotICAgICAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OgotICAgICAgICAgICAgICAgICAgICAgICAgbGVm
dFVuaW9uQXJyYXlbaV0uc2V0SUNvbnN0KHN0YXRpY19jYXN0PGludD4obm9kZS0+Z2V0SUNvbnN0
KGluZGV4KSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgRWJ0Qm9vbDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFy
cmF5W2ldLnNldElDb25zdChzdGF0aWNfY2FzdDxpbnQ+KG5vZGUtPmdldEJDb25zdChpbmRleCkp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBj
YXNlIEVidEZsb2F0OgotICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0u
c2V0SUNvbnN0KHN0YXRpY19jYXN0PGludD4obm9kZS0+Z2V0RkNvbnN0KGluZGV4KSkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeElu
dGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIkNhbm5vdCBwcm9tb3RlIik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVidEJvb2w6Ci0gICAgICAgICAgICAgICAg
c3dpdGNoIChub2RlLT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJh
eVtpXS5zZXRCQ29uc3Qobm9kZS0+Z2V0SUNvbnN0KGluZGV4KSAhPSAwKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRCQ29uc3Qobm9kZS0+
Z2V0QkNvbnN0KGluZGV4KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGxl
ZnRVbmlvbkFycmF5W2ldLnNldEJDb25zdChub2RlLT5nZXRGQ29uc3QoaW5kZXgpICE9IDAuMGYp
OwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVBy
ZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIkNhbm5vdCBwcm9tb3RlIik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRM
aW5lKCksICJJbmNvcnJlY3QgZGF0YSB0eXBlIGZvdW5kIik7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIH0KLQotICAgIH0KLQotICAgIGNvbnN0IFRUeXBlJiB0ID0gbm9kZS0+
Z2V0VHlwZSgpOwotCi0gICAgcmV0dXJuIGFkZENvbnN0YW50VW5pb24obGVmdFVuaW9uQXJyYXks
IFRUeXBlKHByb21vdGVUbywgdC5nZXRQcmVjaXNpb24oKSwgdC5nZXRRdWFsaWZpZXIoKSwgdC5n
ZXROb21pbmFsU2l6ZSgpLCB0LmlzTWF0cml4KCksIHQuaXNBcnJheSgpKSwgbm9kZS0+Z2V0TGlu
ZSgpKTsKLX0KLQotLy8gc3RhdGljCi1UU3RyaW5nIFRJbnRlcm1UcmF2ZXJzZXI6Omhhc2goY29u
c3QgVFN0cmluZyYgbmFtZSwgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24pCi17Ci0gICAg
aWYgKGhhc2hGdW5jdGlvbiA9PSBOVUxMIHx8IG5hbWUuZW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IG5hbWU7Ci0gICAga2hyb25vc191aW50NjRfdCBudW1iZXIgPSAoKmhhc2hGdW5jdGlvbikobmFt
ZS5jX3N0cigpLCBuYW1lLmxlbmd0aCgpKTsKLSAgICBUU3RyaW5nU3RyZWFtIHN0cmVhbTsKLSAg
ICBzdHJlYW0gPDwgSEFTSEVEX05BTUVfUFJFRklYIDw8IHN0ZDo6aGV4IDw8IG51bWJlcjsKLSAg
ICBUU3RyaW5nIGhhc2hlZE5hbWUgPSBzdHJlYW0uc3RyKCk7Ci0gICAgcmV0dXJuIGhhc2hlZE5h
bWU7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
TU1hcC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL01NYXAuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTMwODY3MTUxNGNjNjNlOGU3MGEwM2UzODY4YjU3
OTUxYjg1ZTk4Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvTU1hcC5oCisrKyAvZGV2L251
bGwKQEAgLTEsNTYgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBfTU1BUF9J
TkNMVURFRF8KLSNkZWZpbmUgX01NQVBfSU5DTFVERURfCi0KLS8vCi0vLyBFbmNhcHN1bGF0ZSBt
ZW1vcnkgbWFwcGVkIGZpbGVzCi0vLwotCi1jbGFzcyBUTU1hcCB7Ci1wdWJsaWM6Ci0gICAgVE1N
YXAoY29uc3QgY2hhciogZmlsZU5hbWUpIDogCi0gICAgICAgIGZTaXplKC0xKSwgLy8gLTEgaXMg
dGhlIGVycm9yIHZhbHVlIHJldHVybmVkIGJ5IEdldEZpbGVTaXplKCkKLSAgICAgICAgZnAoTlVM
TCksCi0gICAgICAgIGZCdWZmKDApICAgLy8gMCBpcyB0aGUgZXJyb3IgdmFsdWUgcmV0dXJuZWQg
YnkgTWFwVmlld09mRmlsZSgpCi0gICAgewotICAgICAgICBpZiAoKGZwID0gZm9wZW4oZmlsZU5h
bWUsICJyIikpID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNoYXIgYyA9
IGdldGMoZnApOwotICAgICAgICBmU2l6ZSA9IDA7Ci0gICAgICAgIHdoaWxlIChjICE9IEVPRikg
ewotICAgICAgICAgICAgZlNpemUrKzsKLSAgICAgICAgICAgIGMgPSBnZXRjKGZwKTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoYyA9PSBFT0YpCi0gICAgICAgICAgICBmU2l6ZSsrOwotICAgICAg
ICByZXdpbmQoZnApOwotICAgICAgICBmQnVmZiA9IChjaGFyKiltYWxsb2Moc2l6ZW9mKGNoYXIp
ICogZlNpemUpOwotICAgICAgICBpbnQgY291bnQgPSAwOwotICAgICAgICBjID0gZ2V0YyhmcCk7
Ci0gICAgICAgIHdoaWxlIChjICE9IEVPRikgewotICAgICAgICAgICAgZkJ1ZmZbY291bnQrK10g
PSBjOwotICAgICAgICAgICAgYyA9IGdldGMoZnApOwotICAgICAgICB9Ci0gICAgICAgIGZCdWZm
W2NvdW50KytdID0gYzsKLSAgICB9Ci0KLSAgICBjaGFyKiBnZXREYXRhKCkgeyByZXR1cm4gZkJ1
ZmY7IH0KLSAgICBpbnQgICBnZXRTaXplKCkgeyByZXR1cm4gZlNpemU7IH0KLQotICAgIH5UTU1h
cCgpIHsKLSAgICAgICAgaWYgKGZwICE9IE5VTEwpCi0gICAgICAgICAgICBmY2xvc2UoZnApOwot
ICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgaW50ICAgICAgICAgICAgIGZTaXplOyAgICAgIC8v
IHNpemUgb2YgZmlsZSB0byBtYXAgaW4KLSAgICBGSUxFICpmcDsKLSAgICBjaGFyKiAgICAgICAg
ICAgZkJ1ZmY7ICAgICAgLy8gdGhlIGFjdHVhbCBkYXRhOwotfTsKLQotI2VuZGlmIC8vIF9NTUFQ
X0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDA3N2VmNWQ3MmViOWU3ZmYyZDRhOTZiNGQ1YzY5YmUxODY4MTBiNzguLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDExNSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29t
cGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCIKLQotbmFtZXNwYWNlIHsKLQotVFN0cmluZyBt
YXBMb25nTmFtZShzaXplX3QgaWQsIGNvbnN0IFRTdHJpbmcmIG5hbWUsIGJvb2wgaXNHbG9iYWwp
Ci17Ci0gICAgQVNTRVJUKG5hbWUuc2l6ZSgpID4gTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJ
WkUpOwotICAgIFRTdHJpbmdTdHJlYW0gc3RyZWFtOwotICAgIHN0cmVhbSA8PCAid2ViZ2xfIjsK
LSAgICBpZiAoaXNHbG9iYWwpCi0gICAgICAgIHN0cmVhbSA8PCAiZyI7Ci0gICAgc3RyZWFtIDw8
IGlkOwotICAgIGlmIChuYW1lWzBdICE9ICdfJykKLSAgICAgICAgc3RyZWFtIDw8ICJfIjsKLSAg
ICBzdHJlYW0gPDwgbmFtZS5zdWJzdHIoMCwgTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJWkUg
LSBzdHJlYW0uc3RyKCkuc2l6ZSgpKTsKLSAgICByZXR1cm4gc3RyZWFtLnN0cigpOwotfQotCi1M
b25nTmFtZU1hcCogZ0xvbmdOYW1lTWFwSW5zdGFuY2UgPSBOVUxMOwotCi19ICAvLyBhbm9ueW1v
dXMgbmFtZXNwYWNlCi0KLUxvbmdOYW1lTWFwOjpMb25nTmFtZU1hcCgpCi0gICAgOiByZWZDb3Vu
dCgwKQotewotfQotCi1Mb25nTmFtZU1hcDo6fkxvbmdOYW1lTWFwKCkKLXsKLX0KLQotLy8gc3Rh
dGljCi1Mb25nTmFtZU1hcCogTG9uZ05hbWVNYXA6OkdldEluc3RhbmNlKCkKLXsKLSAgICBpZiAo
Z0xvbmdOYW1lTWFwSW5zdGFuY2UgPT0gTlVMTCkKLSAgICAgICAgZ0xvbmdOYW1lTWFwSW5zdGFu
Y2UgPSBuZXcgTG9uZ05hbWVNYXA7Ci0gICAgZ0xvbmdOYW1lTWFwSW5zdGFuY2UtPnJlZkNvdW50
Kys7Ci0gICAgcmV0dXJuIGdMb25nTmFtZU1hcEluc3RhbmNlOwotfQotCi12b2lkIExvbmdOYW1l
TWFwOjpSZWxlYXNlKCkKLXsKLSAgICBBU1NFUlQoZ0xvbmdOYW1lTWFwSW5zdGFuY2UgPT0gdGhp
cyk7Ci0gICAgQVNTRVJUKHJlZkNvdW50ID4gMCk7Ci0gICAgcmVmQ291bnQtLTsKLSAgICBpZiAo
cmVmQ291bnQgPT0gMCkgewotICAgICAgICBkZWxldGUgZ0xvbmdOYW1lTWFwSW5zdGFuY2U7Ci0g
ICAgICAgIGdMb25nTmFtZU1hcEluc3RhbmNlID0gTlVMTDsKLSAgICB9Ci19Ci0KLWNvbnN0IGNo
YXIqIExvbmdOYW1lTWFwOjpGaW5kKGNvbnN0IGNoYXIqIG9yaWdpbmFsTmFtZSkgY29uc3QKLXsK
LSAgICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG1Mb25nTmFtZU1hcC5maW5kKAotICAgICAgICBvcmlnaW5hbE5hbWUpOwotICAgIGlmIChp
dCAhPSBtTG9uZ05hbWVNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiAoKml0KS5zZWNvbmQuY19z
dHIoKTsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotdm9pZCBMb25nTmFtZU1hcDo6SW5zZXJ0KGNv
bnN0IGNoYXIqIG9yaWdpbmFsTmFtZSwgY29uc3QgY2hhciogbWFwcGVkTmFtZSkKLXsKLSAgICBt
TG9uZ05hbWVNYXAuaW5zZXJ0KHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz46OnZh
bHVlX3R5cGUoCi0gICAgICAgIG9yaWdpbmFsTmFtZSwgbWFwcGVkTmFtZSkpOwotfQotCi1zaXpl
X3QgTG9uZ05hbWVNYXA6OlNpemUoKSBjb25zdAotewotICAgIHJldHVybiBtTG9uZ05hbWVNYXAu
c2l6ZSgpOwotfQotCi1NYXBMb25nVmFyaWFibGVOYW1lczo6TWFwTG9uZ1ZhcmlhYmxlTmFtZXMo
TG9uZ05hbWVNYXAqIGdsb2JhbE1hcCkKLXsKLSAgICBBU1NFUlQoZ2xvYmFsTWFwKTsKLSAgICBt
R2xvYmFsTWFwID0gZ2xvYmFsTWFwOwotfQotCi12b2lkIE1hcExvbmdWYXJpYWJsZU5hbWVzOjp2
aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBzeW1ib2wpCi17Ci0gICAgQVNTRVJUKHN5bWJvbCAh
PSBOVUxMKTsKLSAgICBpZiAoc3ltYm9sLT5nZXRTeW1ib2woKS5zaXplKCkgPiBNQVhfU0hPUlRF
TkVEX0lERU5USUZJRVJfU0laRSkgewotICAgICAgICBzd2l0Y2ggKHN5bWJvbC0+Z2V0UXVhbGlm
aWVyKCkpIHsKLSAgICAgICAgICBjYXNlIEV2cVZhcnlpbmdJbjoKLSAgICAgICAgICBjYXNlIEV2
cVZhcnlpbmdPdXQ6Ci0gICAgICAgICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nSW46Ci0gICAg
ICAgICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0OgotICAgICAgICAgIGNhc2UgRXZxVW5p
Zm9ybToKLSAgICAgICAgICAgIHN5bWJvbC0+c2V0U3ltYm9sKAotICAgICAgICAgICAgICAgIG1h
cEdsb2JhbExvbmdOYW1lKHN5bWJvbC0+Z2V0U3ltYm9sKCkpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBzeW1ib2wtPnNldFN5bWJvbCgKLSAg
ICAgICAgICAgICAgICBtYXBMb25nTmFtZShzeW1ib2wtPmdldElkKCksIHN5bWJvbC0+Z2V0U3lt
Ym9sKCksIGZhbHNlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfTsKLSAgICB9Ci19
Ci0KLVRTdHJpbmcgTWFwTG9uZ1ZhcmlhYmxlTmFtZXM6Om1hcEdsb2JhbExvbmdOYW1lKGNvbnN0
IFRTdHJpbmcmIG5hbWUpCi17Ci0gICAgQVNTRVJUKG1HbG9iYWxNYXApOwotICAgIGNvbnN0IGNo
YXIqIG1hcHBlZE5hbWUgPSBtR2xvYmFsTWFwLT5GaW5kKG5hbWUuY19zdHIoKSk7Ci0gICAgaWYg
KG1hcHBlZE5hbWUgIT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIG1hcHBlZE5hbWU7Ci0gICAgc2l6
ZV90IGlkID0gbUdsb2JhbE1hcC0+U2l6ZSgpOwotICAgIFRTdHJpbmcgcnQgPSBtYXBMb25nTmFt
ZShpZCwgbmFtZSwgdHJ1ZSk7Ci0gICAgbUdsb2JhbE1hcC0+SW5zZXJ0KG5hbWUuY19zdHIoKSwg
cnQuY19zdHIoKSk7Ci0gICAgcmV0dXJuIHJ0OwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQyZmY4MjYxM2MxOGUwNDc3ZjI0YTRmNjZiMGQz
N2JhNjEyMTE5ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFt
ZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0K
LSNpZm5kZWYgQ09NUElMRVJfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVNfSF8KLSNkZWZpbmUgQ09N
UElMRVJfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVNfSF8KLQotI2luY2x1ZGUgIkdMU0xBTkcvU2hh
ZGVyTGFuZy5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCi0jaW5jbHVk
ZSAiY29tcGlsZXIvVmFyaWFibGVJbmZvLmgiCi0KLS8vIFRoaXMgc2l6ZSBkb2VzIG5vdCBpbmNs
dWRlICdcMCcgaW4gdGhlIGVuZC4KLSNkZWZpbmUgTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJ
WkUgMzIKLQotLy8gVGhpcyBpcyBhIHJlZi1jb3VudGVkIHNpbmdsZXRvbi4gR2V0SW5zdGFuY2Uo
KSByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUKLS8vIHNpbmdsZXRvbiwgYW5kIGFmdGVyIHVzZSwg
Y2FsbCBSZWxlYXNlKCkuIEdldEluc3RhbmNlKCkgYW5kIFJlbGVhc2UoKSBzaG91bGQKLS8vIGJl
IHBhaXJlZC4KLWNsYXNzIExvbmdOYW1lTWFwIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgTG9uZ05h
bWVNYXAqIEdldEluc3RhbmNlKCk7Ci0gICAgdm9pZCBSZWxlYXNlKCk7Ci0KLSAgICAvLyBSZXR1
cm4gdGhlIG1hcHBlZCBuYW1lIGlmIDxvcmlnaW5hbE5hbWUsIG1hcHBlZE5hbWU+IGlzIGluIHRo
ZSBtYXA7Ci0gICAgLy8gb3RoZXJ3aXNlLCByZXR1cm4gTlVMTC4KLSAgICBjb25zdCBjaGFyKiBG
aW5kKGNvbnN0IGNoYXIqIG9yaWdpbmFsTmFtZSkgY29uc3Q7Ci0KLSAgICAvLyBJbnNlcnQgYSBw
YWlyIGludG8gdGhlIG1hcC4KLSAgICB2b2lkIEluc2VydChjb25zdCBjaGFyKiBvcmlnaW5hbE5h
bWUsIGNvbnN0IGNoYXIqIG1hcHBlZE5hbWUpOwotCi0gICAgLy8gUmV0dXJuIHRoZSBudW1iZXIg
b2YgZW50cmllcyBpbiB0aGUgbWFwLgotICAgIHNpemVfdCBTaXplKCkgY29uc3Q7Ci0KLXByaXZh
dGU6Ci0gICAgTG9uZ05hbWVNYXAoKTsKLSAgICB+TG9uZ05hbWVNYXAoKTsKLQotICAgIHNpemVf
dCByZWZDb3VudDsKLSAgICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+IG1Mb25n
TmFtZU1hcDsKLX07Ci0KLS8vIFRyYXZlcnNlcyBpbnRlcm1lZGlhdGUgdHJlZSB0byBtYXAgYXR0
cmlidXRlcyBhbmQgdW5pZm9ybXMgbmFtZXMgdGhhdCBhcmUKLS8vIGxvbmdlciB0aGFuIE1BWF9T
SE9SVEVORURfSURFTlRJRklFUl9TSVpFIHRvIE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpF
LgotY2xhc3MgTWFwTG9uZ1ZhcmlhYmxlTmFtZXMgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7
Ci1wdWJsaWM6Ci0gICAgTWFwTG9uZ1ZhcmlhYmxlTmFtZXMoTG9uZ05hbWVNYXAqIGdsb2JhbE1h
cCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOwotCi1w
cml2YXRlOgotICAgIFRTdHJpbmcgbWFwR2xvYmFsTG9uZ05hbWUoY29uc3QgVFN0cmluZyYgbmFt
ZSk7Ci0KLSAgICBMb25nTmFtZU1hcCogbUdsb2JhbE1hcDsKLX07Ci0KLSNlbmRpZiAgLy8gQ09N
UElMRVJfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Ob2RlU2VhcmNoLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvTm9kZVNlYXJjaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAyN2U0NzFkYmJjNDllMWRkOTIzNTIwZGYyNDAzZDY5N2NiYTcyNzFjLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9Ob2RlU2VhcmNoLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3OCAr
MCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotLy8gTm9kZVNlYXJjaC5oOiBVdGlsaXRpZXMgZm9y
IHNlYXJjaGluZyB0cmFuc2xhdG9yIG5vZGUgZ3JhcGhzCi0vLwotCi0jaWZuZGVmIFRSQU5TTEFU
T1JfTk9ERVNFQVJDSF9IXwotI2RlZmluZSBUUkFOU0xBVE9SX05PREVTRUFSQ0hfSF8KLQotbmFt
ZXNwYWNlIHNoCi17Ci0KLXRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Ci1jbGFzcyBOb2RlU2VhcmNo
VHJhdmVyc2VyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKLXsKLSAgcHVibGljOgotICAgIE5v
ZGVTZWFyY2hUcmF2ZXJzZXIoKQotICAgICAgICA6IG1Gb3VuZChmYWxzZSkKLSAgICB7fQotCi0g
ICAgYm9vbCBmb3VuZCgpIGNvbnN0IHsgcmV0dXJuIG1Gb3VuZDsgfQotCi0gICAgc3RhdGljIGJv
b2wgc2VhcmNoKFRJbnRlcm1Ob2RlICpub2RlKQotICAgIHsKLSAgICAgICAgUGFyZW50IHNlYXJj
aFRyYXZlcnNlcjsKLSAgICAgICAgbm9kZS0+dHJhdmVyc2UoJnNlYXJjaFRyYXZlcnNlcik7Ci0g
ICAgICAgIHJldHVybiBzZWFyY2hUcmF2ZXJzZXIuZm91bmQoKTsKLSAgICB9Ci0KLSAgcHJvdGVj
dGVkOgotICAgIGJvb2wgbUZvdW5kOwotfTsKLQotY2xhc3MgRmluZERpc2NhcmQgOiBwdWJsaWMg
Tm9kZVNlYXJjaFRyYXZlcnNlcjxGaW5kRGlzY2FyZD4KLXsKLSAgcHVibGljOgotICAgIHZpcnR1
YWwgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCAqbm9kZSkKLSAg
ICB7Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICBjYXNlIEVPcEtpbGw6Ci0gICAgICAgICAgICBtRm91bmQgPSB0cnVlOwotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgICBkZWZhdWx0OiBicmVhazsKLSAgICAgICAgfQotCi0gICAg
ICAgIHJldHVybiAhbUZvdW5kOwotICAgIH0KLX07Ci0KLWNsYXNzIEZpbmRTaWRlRWZmZWN0UmV3
cml0aW5nIDogcHVibGljIE5vZGVTZWFyY2hUcmF2ZXJzZXI8RmluZFNpZGVFZmZlY3RSZXdyaXRp
bmc+Ci17Ci0gIHB1YmxpYzoKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlz
aXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKG5vZGUtPmdl
dE9wKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjoKLSAgICAgICAg
ICBjYXNlIEVPcExvZ2ljYWxBbmQ6Ci0gICAgICAgICAgICBpZiAobm9kZS0+Z2V0UmlnaHQoKS0+
aGFzU2lkZUVmZmVjdHMoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRm91bmQg
PSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBk
ZWZhdWx0OiBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAhbUZvdW5kOwotICAg
IH0KLX07Ci0KLX0KLQotI2VuZGlmIC8vIFRSQU5TTEFUT1JfTk9ERVNFQVJDSF9IXwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEVTU0wuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEVTU0wuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjA0OGYxY2VjNGFlY2U2YTMwMWE1YjBmMTQw
YmM4MTkyNDM5NzkwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRFU1NMLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNs
dWRlICJjb21waWxlci9PdXRwdXRFU1NMLmgiCi0KLVRPdXRwdXRFU1NMOjpUT3V0cHV0RVNTTChU
SW5mb1NpbmtCYXNlJiBvYmpTaW5rLAotICAgICAgICAgICAgICAgICAgICAgICAgIFNoQXJyYXlJ
bmRleENsYW1waW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJhdGVneSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBOYW1lTWFwJiBuYW1lTWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1i
b2xUYWJsZSYgc3ltYm9sVGFibGUpCi0gICAgOiBUT3V0cHV0R0xTTEJhc2Uob2JqU2luaywgY2xh
bXBpbmdTdHJhdGVneSwgaGFzaEZ1bmN0aW9uLCBuYW1lTWFwLCBzeW1ib2xUYWJsZSkKLXsKLX0K
LQotYm9vbCBUT3V0cHV0RVNTTDo6d3JpdGVWYXJpYWJsZVByZWNpc2lvbihUUHJlY2lzaW9uIHBy
ZWNpc2lvbikKLXsKLSAgICBpZiAocHJlY2lzaW9uID09IEVicFVuZGVmaW5lZCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOwotICAg
IG91dCA8PCBnZXRQcmVjaXNpb25TdHJpbmcocHJlY2lzaW9uKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRw
dXRFU1NMLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0RVNT
TC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWRiOTZlNDk3OTE2ZGJjOWY2NmQ5
MjBiMDJjY2RiMmI5OGQyYjFjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRFU1NM
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0j
aWZuZGVmIENST1NTQ09NUElMRVJHTFNMX09VVFBVVEVTU0xfSF8KLSNkZWZpbmUgQ1JPU1NDT01Q
SUxFUkdMU0xfT1VUUFVURVNTTF9IXwotCi0jaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0R0xTTEJh
c2UuaCIKLQotY2xhc3MgVE91dHB1dEVTU0wgOiBwdWJsaWMgVE91dHB1dEdMU0xCYXNlCi17Ci1w
dWJsaWM6Ci0gICAgVE91dHB1dEVTU0woVEluZm9TaW5rQmFzZSYgb2JqU2luaywKLSAgICAgICAg
ICAgICAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IGNsYW1waW5nU3RyYXRlZ3ksCi0g
ICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24sCi0gICAgICAgICAg
ICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5
bWJvbFRhYmxlKTsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgYm9vbCB3cml0ZVZhcmlhYmxl
UHJlY2lzaW9uKFRQcmVjaXNpb24gcHJlY2lzaW9uKTsKLX07Ci0KLSNlbmRpZiAgLy8gQ1JPU1ND
T01QSUxFUkdMU0xfT1VUUFVURVNTTF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAxMGE0NTFjMGQ3NmVjMGQ1MDMwMGU1MmJiM2M1MDUyNjVhM2Y2NzEwLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICsw
LDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9PdXRwdXRHTFNM
LmgiCi0KLVRPdXRwdXRHTFNMOjpUT3V0cHV0R0xTTChUSW5mb1NpbmtCYXNlJiBvYmpTaW5rLAot
ICAgICAgICAgICAgICAgICAgICAgICAgIFNoQXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kgY2xh
bXBpbmdTdHJhdGVneSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0
IGhhc2hGdW5jdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lTWFwJiBuYW1lTWFw
LAotICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCi0g
ICAgOiBUT3V0cHV0R0xTTEJhc2Uob2JqU2luaywgY2xhbXBpbmdTdHJhdGVneSwgaGFzaEZ1bmN0
aW9uLCBuYW1lTWFwLCBzeW1ib2xUYWJsZSkKLXsKLX0KLQotYm9vbCBUT3V0cHV0R0xTTDo6d3Jp
dGVWYXJpYWJsZVByZWNpc2lvbihUUHJlY2lzaW9uKQotewotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotdm9pZCBUT3V0cHV0R0xTTDo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKLXsK
LSAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7Ci0KLSAgICBpZiAobm9kZS0+Z2V0
U3ltYm9sKCkgPT0gImdsX0ZyYWdEZXB0aEVYVCIpCi0gICAgewotICAgICAgICBvdXQgPDwgImds
X0ZyYWdEZXB0aCI7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIFRPdXRwdXRHTFNM
QmFzZTo6dmlzaXRTeW1ib2wobm9kZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGZhNjhhYzgxMDMwZTkzM2I0ODMyODkzNTBlZmMzNTMyNzk0ZGU4NjguLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2
ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ1JPU1NDT01QSUxFUkdMU0xf
T1VUUFVUR0xTTF9IXwotI2RlZmluZSBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRHTFNMX0hfCi0K
LSNpbmNsdWRlICJjb21waWxlci9PdXRwdXRHTFNMQmFzZS5oIgotCi1jbGFzcyBUT3V0cHV0R0xT
TCA6IHB1YmxpYyBUT3V0cHV0R0xTTEJhc2UKLXsKLXB1YmxpYzoKLSAgICBUT3V0cHV0R0xTTChU
SW5mb1NpbmtCYXNlJiBvYmpTaW5rLAotICAgICAgICAgICAgICAgIFNoQXJyYXlJbmRleENsYW1w
aW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJhdGVneSwKLSAgICAgICAgICAgICAgICBTaEhhc2hGdW5j
dGlvbjY0IGhhc2hGdW5jdGlvbiwKLSAgICAgICAgICAgICAgICBOYW1lTWFwJiBuYW1lTWFwLAot
ICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpOwotCi1wcm90ZWN0ZWQ6
Ci0gICAgdmlydHVhbCBib29sIHdyaXRlVmFyaWFibGVQcmVjaXNpb24oVFByZWNpc2lvbik7Ci0g
ICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpOwotfTsKLQot
I2VuZGlmICAvLyBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRHTFNMX0hfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTEJhc2UuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0xCYXNlLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjkwYmQ2N2VjZDc0MjBlOWU0OGExZWFkMWU0
M2ZkYmFmNTgwOGUwYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTEJhc2Uu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsODE3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0K
LSNpbmNsdWRlICJjb21waWxlci9PdXRwdXRHTFNMQmFzZS5oIgotI2luY2x1ZGUgImNvbXBpbGVy
L2RlYnVnLmgiCi0KLSNpbmNsdWRlIDxjZmxvYXQ+Ci0KLW5hbWVzcGFjZQotewotVFN0cmluZyBh
cnJheUJyYWNrZXRzKGNvbnN0IFRUeXBlJiB0eXBlKQotewotICAgIEFTU0VSVCh0eXBlLmlzQXJy
YXkoKSk7Ci0gICAgVEluZm9TaW5rQmFzZSBvdXQ7Ci0gICAgb3V0IDw8ICJbIiA8PCB0eXBlLmdl
dEFycmF5U2l6ZSgpIDw8ICJdIjsKLSAgICByZXR1cm4gVFN0cmluZyhvdXQuY19zdHIoKSk7Ci19
Ci0KLWJvb2wgaXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUqIG5vZGUpIHsKLSAgICBpZiAo
Y29uc3QgVEludGVybUFnZ3JlZ2F0ZSogYWdncmVnYXRlID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUo
KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoYWdncmVnYXRlLT5nZXRPcCgpICE9IEVPcEZ1bmN0
aW9uKSAmJgotICAgICAgICAgICAgICAgKGFnZ3JlZ2F0ZS0+Z2V0T3AoKSAhPSBFT3BTZXF1ZW5j
ZSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGNvbnN0IFRJbnRlcm1TZWxlY3Rpb24qIHNlbGVjdGlv
biA9IG5vZGUtPmdldEFzU2VsZWN0aW9uTm9kZSgpKQotICAgIHsKLSAgICAgICAgLy8gVGVybmFy
eSBvcGVyYXRvcnMgYXJlIHVzdWFsbHkgcGFydCBvZiBhbiBhc3NpZ25tZW50IG9wZXJhdG9yLgot
ICAgICAgICAvLyBUaGlzIGhhbmRsZXMgdGhvc2UgcmFyZSBjYXNlcyBpbiB3aGljaCB0aGV5IGFy
ZSBhbGwgYnkgdGhlbXNlbHZlcy4KLSAgICAgICAgcmV0dXJuIHNlbGVjdGlvbi0+dXNlc1Rlcm5h
cnlPcGVyYXRvcigpOwotICAgIH0KLSAgICBlbHNlIGlmIChub2RlLT5nZXRBc0xvb3BOb2RlKCkp
Ci0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwot
fQotfSAgLy8gbmFtZXNwYWNlCi0KLVRPdXRwdXRHTFNMQmFzZTo6VE91dHB1dEdMU0xCYXNlKFRJ
bmZvU2lua0Jhc2UmIG9ialNpbmssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
aEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IGNsYW1waW5nU3RyYXRlZ3ksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQotICAg
IDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwKLSAgICAgIG1PYmpTaW5rKG9i
alNpbmspLAotICAgICAgbURlY2xhcmluZ1ZhcmlhYmxlcyhmYWxzZSksCi0gICAgICBtQ2xhbXBp
bmdTdHJhdGVneShjbGFtcGluZ1N0cmF0ZWd5KSwKLSAgICAgIG1IYXNoRnVuY3Rpb24oaGFzaEZ1
bmN0aW9uKSwKLSAgICAgIG1OYW1lTWFwKG5hbWVNYXApLAotICAgICAgbVN5bWJvbFRhYmxlKHN5
bWJvbFRhYmxlKQotewotfQotCi12b2lkIFRPdXRwdXRHTFNMQmFzZTo6d3JpdGVUcmlwbGV0KFZp
c2l0IHZpc2l0LCBjb25zdCBjaGFyKiBwcmVTdHIsIGNvbnN0IGNoYXIqIGluU3RyLCBjb25zdCBj
aGFyKiBwb3N0U3RyKQotewotICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNpbmsoKTsKLSAg
ICBpZiAodmlzaXQgPT0gUHJlVmlzaXQgJiYgcHJlU3RyKQotICAgIHsKLSAgICAgICAgb3V0IDw8
IHByZVN0cjsKLSAgICB9Ci0gICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCAmJiBpblN0cikK
LSAgICB7Ci0gICAgICAgIG91dCA8PCBpblN0cjsKLSAgICB9Ci0gICAgZWxzZSBpZiAodmlzaXQg
PT0gUG9zdFZpc2l0ICYmIHBvc3RTdHIpCi0gICAgewotICAgICAgICBvdXQgPDwgcG9zdFN0cjsK
LSAgICB9Ci19Ci0KLXZvaWQgVE91dHB1dEdMU0xCYXNlOjp3cml0ZVZhcmlhYmxlVHlwZShjb25z
dCBUVHlwZSYgdHlwZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7Ci0g
ICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSB0eXBlLmdldFF1YWxpZmllcigpOwotICAgIC8vIFRP
RE8oYWxva3ApOiBWYWxpZGF0ZSBxdWFsaWZpZXIgZm9yIHZhcmlhYmxlIGRlY2xhcmF0aW9ucy4K
LSAgICBpZiAoKHF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpICYmIChxdWFsaWZpZXIgIT0gRXZx
R2xvYmFsKSkKLSAgICAgICAgb3V0IDw8IHR5cGUuZ2V0UXVhbGlmaWVyU3RyaW5nKCkgPDwgIiAi
OwotICAgIC8vIERlY2xhcmUgdGhlIHN0cnVjdCBpZiB3ZSBoYXZlIG5vdCBkb25lIHNvIGFscmVh
ZHkuCi0gICAgaWYgKCh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgJiYgIXN0cnVj
dERlY2xhcmVkKHR5cGUuZ2V0U3RydWN0KCkpKQotICAgIHsKLSAgICAgICAgZGVjbGFyZVN0cnVj
dCh0eXBlLmdldFN0cnVjdCgpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYg
KHdyaXRlVmFyaWFibGVQcmVjaXNpb24odHlwZS5nZXRQcmVjaXNpb24oKSkpCi0gICAgICAgICAg
ICBvdXQgPDwgIiAiOwotICAgICAgICBvdXQgPDwgZ2V0VHlwZU5hbWUodHlwZSk7Ci0gICAgfQot
fQotCi12b2lkIFRPdXRwdXRHTFNMQmFzZTo6d3JpdGVGdW5jdGlvblBhcmFtZXRlcnMoY29uc3Qg
VEludGVybVNlcXVlbmNlJiBhcmdzKQotewotICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNp
bmsoKTsKLSAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGFy
Z3MuYmVnaW4oKTsKLSAgICAgICAgIGl0ZXIgIT0gYXJncy5lbmQoKTsgKytpdGVyKQotICAgIHsK
LSAgICAgICAgY29uc3QgVEludGVybVN5bWJvbCogYXJnID0gKCppdGVyKS0+Z2V0QXNTeW1ib2xO
b2RlKCk7Ci0gICAgICAgIEFTU0VSVChhcmcgIT0gTlVMTCk7Ci0KLSAgICAgICAgY29uc3QgVFR5
cGUmIHR5cGUgPSBhcmctPmdldFR5cGUoKTsKLSAgICAgICAgd3JpdGVWYXJpYWJsZVR5cGUodHlw
ZSk7Ci0KLSAgICAgICAgY29uc3QgVFN0cmluZyYgbmFtZSA9IGFyZy0+Z2V0U3ltYm9sKCk7Ci0g
ICAgICAgIGlmICghbmFtZS5lbXB0eSgpKQotICAgICAgICAgICAgb3V0IDw8ICIgIiA8PCBoYXNo
TmFtZShuYW1lKTsKLSAgICAgICAgaWYgKHR5cGUuaXNBcnJheSgpKQotICAgICAgICAgICAgb3V0
IDw8IGFycmF5QnJhY2tldHModHlwZSk7Ci0KLSAgICAgICAgLy8gUHV0IGEgY29tbWEgaWYgdGhp
cyBpcyBub3QgdGhlIGxhc3QgYXJndW1lbnQuCi0gICAgICAgIGlmIChpdGVyICE9IGFyZ3MuZW5k
KCkgLSAxKQotICAgICAgICAgICAgb3V0IDw8ICIsICI7Ci0gICAgfQotfQotCi1jb25zdCBDb25z
dGFudFVuaW9uKiBUT3V0cHV0R0xTTEJhc2U6OndyaXRlQ29uc3RhbnRVbmlvbihjb25zdCBUVHlw
ZSYgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IENvbnN0YW50VW5pb24qIHBDb25zdFVuaW9uKQotewotICAgIFRJbmZv
U2lua0Jhc2UmIG91dCA9IG9ialNpbmsoKTsKLQotICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgp
ID09IEVidFN0cnVjdCkKLSAgICB7Ci0gICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IHR5cGUuZ2V0U3RydWN0KCk7Ci0gICAgICAgIG91dCA8PCBoYXNoTmFtZShzdHJ1Y3R1cmUt
Pm5hbWUoKSkgPDwgIigiOwotCi0gICAgICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9IHN0
cnVjdHVyZS0+ZmllbGRzKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRz
LnNpemUoKTsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBUVHlwZSogZmllbGRU
eXBlID0gZmllbGRzW2ldLT50eXBlKCk7Ci0gICAgICAgICAgICBBU1NFUlQoZmllbGRUeXBlICE9
IE5VTEwpOwotICAgICAgICAgICAgcENvbnN0VW5pb24gPSB3cml0ZUNvbnN0YW50VW5pb24oKmZp
ZWxkVHlwZSwgcENvbnN0VW5pb24pOwotICAgICAgICAgICAgaWYgKGkgIT0gZmllbGRzLnNpemUo
KSAtIDEpIG91dCA8PCAiLCAiOwotICAgICAgICB9Ci0gICAgICAgIG91dCA8PCAiKSI7Ci0gICAg
fQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHNpemVfdCBzaXplID0gdHlwZS5nZXRPYmplY3RT
aXplKCk7Ci0gICAgICAgIGJvb2wgd3JpdGVUeXBlID0gc2l6ZSA+IDE7Ci0gICAgICAgIGlmICh3
cml0ZVR5cGUpIG91dCA8PCBnZXRUeXBlTmFtZSh0eXBlKSA8PCAiKCI7Ci0gICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpLCArK3BDb25zdFVuaW9uKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBzd2l0Y2ggKHBDb25zdFVuaW9uLT5nZXRUeXBlKCkpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogb3V0IDw8IHN0ZDo6bWluKEZMVF9NQVgs
IHN0ZDo6bWF4KC1GTFRfTUFYLCBwQ29uc3RVbmlvbi0+Z2V0RkNvbnN0KCkpKTsgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6IG91dCA8PCBwQ29uc3RVbmlvbi0+Z2V0SUNvbnN0
KCk7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogb3V0IDw8IHBDb25zdFVu
aW9uLT5nZXRCQ29uc3QoKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpICE9IHNpemUgLSAxKSBv
dXQgPDwgIiwgIjsKLSAgICAgICAgfQotICAgICAgICBpZiAod3JpdGVUeXBlKSBvdXQgPDwgIiki
OwotICAgIH0KLSAgICByZXR1cm4gcENvbnN0VW5pb247Ci19Ci0KLXZvaWQgVE91dHB1dEdMU0xC
YXNlOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQotewotICAgIFRJbmZvU2lua0Jh
c2UmIG91dCA9IG9ialNpbmsoKTsKLSAgICBpZiAobUxvb3BVbnJvbGwuTmVlZHNUb1JlcGxhY2VT
eW1ib2xXaXRoVmFsdWUobm9kZSkpCi0gICAgICAgIG91dCA8PCBtTG9vcFVucm9sbC5HZXRMb29w
SW5kZXhWYWx1ZShub2RlKTsKLSAgICBlbHNlCi0gICAgICAgIG91dCA8PCBoYXNoVmFyaWFibGVO
YW1lKG5vZGUtPmdldFN5bWJvbCgpKTsKLQotICAgIGlmIChtRGVjbGFyaW5nVmFyaWFibGVzICYm
IG5vZGUtPmdldFR5cGUoKS5pc0FycmF5KCkpCi0gICAgICAgIG91dCA8PCBhcnJheUJyYWNrZXRz
KG5vZGUtPmdldFR5cGUoKSk7Ci19Ci0KLXZvaWQgVE91dHB1dEdMU0xCYXNlOjp2aXNpdENvbnN0
YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qIG5vZGUpCi17Ci0gICAgd3JpdGVDb25zdGFu
dFVuaW9uKG5vZGUtPmdldFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSk7Ci19
Ci0KLWJvb2wgVE91dHB1dEdMU0xCYXNlOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVy
bUJpbmFyeSogbm9kZSkKLXsKLSAgICBib29sIHZpc2l0Q2hpbGRyZW4gPSB0cnVlOwotICAgIFRJ
bmZvU2lua0Jhc2UmIG91dCA9IG9ialNpbmsoKTsKLSAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkp
Ci0gICAgewotICAgICAgICBjYXNlIEVPcEluaXRpYWxpemU6Ci0gICAgICAgICAgICBpZiAodmlz
aXQgPT0gSW5WaXNpdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIiA9
ICI7Ci0gICAgICAgICAgICAgICAgLy8gUkhTIG9mIGluaXRpYWxpemUgaXMgbm90IGJlaW5nIGRl
Y2xhcmVkLgotICAgICAgICAgICAgICAgIG1EZWNsYXJpbmdWYXJpYWJsZXMgPSBmYWxzZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEFzc2lnbjog
d3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgPSAiLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2Fz
ZSBFT3BBZGRBc3NpZ246IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiICs9ICIsICIpIik7IGJy
ZWFrOwotICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIs
ICIgLT0gIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wRGl2QXNzaWduOiB3cml0ZVRy
aXBsZXQodmlzaXQsICIoIiwgIiAvPSAiLCAiKSIpOyBicmVhazsKLSAgICAgICAgLy8gTm90aWNl
IHRoZSBmYWxsLXRocm91Z2guCi0gICAgICAgIGNhc2UgRU9wTXVsQXNzaWduOiAKLSAgICAgICAg
Y2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjoKLSAgICAgICAgY2FzZSBFT3BWZWN0b3JU
aW1lc1NjYWxhckFzc2lnbjoKLSAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2ln
bjoKLSAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjoKLSAgICAgICAgICAg
IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiICo9ICIsICIpIik7Ci0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0OgotICAgICAgICAgICAgd3JpdGVUcmlw
bGV0KHZpc2l0LCBOVUxMLCAiWyIsICJdIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBFT3BJbmRleEluZGlyZWN0OgotICAgICAgICAgICAgaWYgKG5vZGUtPmdldEFkZEluZGV4
Q2xhbXAoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAodmlzaXQgPT0gSW5W
aXNpdCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtQ2xhbXBp
bmdTdHJhdGVneSA9PSBTSF9DTEFNUF9XSVRIX0NMQU1QX0lOVFJJTlNJQykgewotICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0IDw8ICJbaW50KGNsYW1wKGZsb2F0KCI7Ci0gICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIlt3ZWJnbF9p
bnRfY2xhbXAoIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBQb3N0VmlzaXQpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBpbnQgbWF4U2l6ZTsKLSAgICAgICAgICAgICAgICAg
ICAgVEludGVybVR5cGVkICpsZWZ0ID0gbm9kZS0+Z2V0TGVmdCgpOwotICAgICAgICAgICAgICAg
ICAgICBUVHlwZSBsZWZ0VHlwZSA9IGxlZnQtPmdldFR5cGUoKTsKLQotICAgICAgICAgICAgICAg
ICAgICBpZiAobGVmdC0+aXNBcnJheSgpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBUaGUgc2hhZGVyIHdpbGwgZmFpbCB2YWxpZGF0aW9uIGlmIHRo
ZSBhcnJheSBsZW5ndGggaXMgbm90ID4gMC4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1heFNp
emUgPSBsZWZ0VHlwZS5nZXRBcnJheVNpemUoKSAtIDE7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtYXhTaXplID0gbGVmdFR5cGUuZ2V0Tm9taW5hbFNpemUoKSAtIDE7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAobUNsYW1w
aW5nU3RyYXRlZ3kgPT0gU0hfQ0xBTVBfV0lUSF9DTEFNUF9JTlRSSU5TSUMpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAiKSwgMC4wLCBmbG9hdCgiIDw8IG1heFNpemUgPDwgIikp
KV0iOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0IDw8ICIsIDAsICIgPDwgbWF4U2l6ZSA8PCAiKV0iOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHdyaXRlVHJpcGxldCh2aXNpdCwgTlVMTCwg
IlsiLCAiXSIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6Ci0gICAgICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNp
dCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBIZXJlIHdlIGFyZSB3cml0aW5n
IG91dCAiZm9vLmJhciIsIHdoZXJlICJmb28iIGlzIHN0cnVjdAotICAgICAgICAgICAgICAgIC8v
IGFuZCAiYmFyIiBpcyBmaWVsZC4gSW4gQVNULCBpdCBpcyByZXByZXNlbnRlZCBhcyBhIGJpbmFy
eQotICAgICAgICAgICAgICAgIC8vIG5vZGUsIHdoZXJlIGxlZnQgY2hpbGQgcmVwcmVzZW50cyAi
Zm9vIiBhbmQgcmlnaHQgY2hpbGQgImJhciIuCi0gICAgICAgICAgICAgICAgLy8gVGhlIG5vZGUg
aXRzZWxmIHJlcHJlc2VudHMgIi4iLiBUaGUgc3RydWN0IGZpZWxkICJiYXIiIGlzCi0gICAgICAg
ICAgICAgICAgLy8gYWN0dWFsbHkgc3RvcmVkIGFzIGFuIGluZGV4IGludG8gVFN0cnVjdHVyZTo6
ZmllbGRzLgotICAgICAgICAgICAgICAgIG91dCA8PCAiLiI7Ci0gICAgICAgICAgICAgICAgY29u
c3QgVFN0cnVjdHVyZSogc3RydWN0dXJlID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkuZ2V0
U3RydWN0KCk7Ci0gICAgICAgICAgICAgICAgY29uc3QgVEludGVybUNvbnN0YW50VW5pb24qIGlu
ZGV4ID0gbm9kZS0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0gICAgICAgICAg
ICAgICAgY29uc3QgVEZpZWxkKiBmaWVsZCA9IHN0cnVjdHVyZS0+ZmllbGRzKClbaW5kZXgtPmdl
dElDb25zdCgwKV07Ci0KLSAgICAgICAgICAgICAgICBUU3RyaW5nIGZpZWxkTmFtZSA9IGZpZWxk
LT5uYW1lKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFtU3ltYm9sVGFibGUuZmluZEJ1aWx0SW4o
c3RydWN0dXJlLT5uYW1lKCkpKQotICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPSBoYXNo
TmFtZShmaWVsZE5hbWUpOwotCi0gICAgICAgICAgICAgICAgb3V0IDw8IGZpZWxkTmFtZTsKLSAg
ICAgICAgICAgICAgICB2aXNpdENoaWxkcmVuID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BWZWN0b3JTd2l6emxlOgotICAgICAgICAg
ICAgaWYgKHZpc2l0ID09IEluVmlzaXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
b3V0IDw8ICIuIjsKLSAgICAgICAgICAgICAgICBUSW50ZXJtQWdncmVnYXRlKiByaWdodENoaWxk
ID0gbm9kZS0+Z2V0UmlnaHQoKS0+Z2V0QXNBZ2dyZWdhdGUoKTsKLSAgICAgICAgICAgICAgICBU
SW50ZXJtU2VxdWVuY2UmIHNlcXVlbmNlID0gcmlnaHRDaGlsZC0+Z2V0U2VxdWVuY2UoKTsKLSAg
ICAgICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gc2VxdWVu
Y2UuYmVnaW4oKTsgc2l0ICE9IHNlcXVlbmNlLmVuZCgpOyArK3NpdCkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiBlbGVtZW50ID0g
KCpzaXQpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KGVsZW1lbnQtPmdldEJhc2ljVHlwZSgpID09IEVidEludCk7Ci0gICAgICAgICAgICAgICAgICAg
IEFTU0VSVChlbGVtZW50LT5nZXROb21pbmFsU2l6ZSgpID09IDEpOwotICAgICAgICAgICAgICAg
ICAgICBjb25zdCBDb25zdGFudFVuaW9uJiBkYXRhID0gZWxlbWVudC0+Z2V0VW5pb25BcnJheVBv
aW50ZXIoKVswXTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGRhdGEuZ2V0VHlwZSgpID09
IEVidEludCk7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YS5nZXRJQ29uc3QoKSkK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiBv
dXQgPDwgIngiOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogb3V0IDw8
ICJ5IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IG91dCA8PCAieiI7
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvdXQgPDwgInciOyBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgIGNhc2UgRU9wQWRkOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAr
ICIsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcFN1Yjogd3JpdGVUcmlwbGV0KHZpc2l0
LCAiKCIsICIgLSAiLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BNdWw6IHdyaXRlVHJp
cGxldCh2aXNpdCwgIigiLCAiICogIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wRGl2
OiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAvICIsICIpIik7IGJyZWFrOwotICAgICAgICBj
YXNlIEVPcE1vZDogVU5JTVBMRU1FTlRFRCgpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BFcXVh
bDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgPT0gIiwgIikiKTsgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRU9wTm90RXF1YWw6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiICE9ICIsICIpIik7
IGJyZWFrOwotICAgICAgICBjYXNlIEVPcExlc3NUaGFuOiB3cml0ZVRyaXBsZXQodmlzaXQsICIo
IiwgIiA8ICIsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOiB3cml0
ZVRyaXBsZXQodmlzaXQsICIoIiwgIiA+ICIsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVP
cExlc3NUaGFuRXF1YWw6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiIDw9ICIsICIpIik7IGJy
ZWFrOwotICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6IHdyaXRlVHJpcGxldCh2aXNp
dCwgIigiLCAiID49ICIsICIpIik7IGJyZWFrOwotCi0gICAgICAgIC8vIE5vdGljZSB0aGUgZmFs
bC10aHJvdWdoLgotICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyOgotICAgICAgICBj
YXNlIEVPcFZlY3RvclRpbWVzTWF0cml4OgotICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVj
dG9yOgotICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyOgotICAgICAgICBjYXNlIEVP
cE1hdHJpeFRpbWVzTWF0cml4OgotICAgICAgICAgICAgd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIs
ICIgKiAiLCAiKSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BMb2dp
Y2FsT3I6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiIHx8ICIsICIpIik7IGJyZWFrOwotICAg
ICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiIF5eICIs
ICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6IHdyaXRlVHJpcGxldCh2
aXNpdCwgIigiLCAiICYmICIsICIpIik7IGJyZWFrOwotICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOyBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmlzaXRDaGlsZHJlbjsKLX0KLQot
Ym9vbCBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFy
eSogbm9kZSkKLXsKLSAgICBUU3RyaW5nIHByZVN0cmluZzsKLSAgICBUU3RyaW5nIHBvc3RTdHJp
bmcgPSAiKSI7Ci0KLSAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCi0gICAgewotICAgICAgICBj
YXNlIEVPcE5lZ2F0aXZlOiBwcmVTdHJpbmcgPSAiKC0iOyBicmVhazsKLSAgICAgICAgY2FzZSBF
T3BWZWN0b3JMb2dpY2FsTm90OiBwcmVTdHJpbmcgPSAibm90KCI7IGJyZWFrOwotICAgICAgICBj
YXNlIEVPcExvZ2ljYWxOb3Q6IHByZVN0cmluZyA9ICIoISI7IGJyZWFrOwotCi0gICAgICAgIGNh
c2UgRU9wUG9zdEluY3JlbWVudDogcHJlU3RyaW5nID0gIigiOyBwb3N0U3RyaW5nID0gIisrKSI7
IGJyZWFrOwotICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6IHByZVN0cmluZyA9ICIoIjsg
cG9zdFN0cmluZyA9ICItLSkiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6
IHByZVN0cmluZyA9ICIoKysiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6
IHByZVN0cmluZyA9ICIoLS0iOyBicmVhazsKLQotICAgICAgICBjYXNlIEVPcENvbnZJbnRUb0Jv
b2w6Ci0gICAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9Cb29sOgotICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgMTogcHJlU3RyaW5nID0gICJib29sKCI7ICBi
cmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDI6IHByZVN0cmluZyA9ICJidmVjMigiOyBicmVh
azsKLSAgICAgICAgICAgICAgICBjYXNlIDM6IHByZVN0cmluZyA9ICJidmVjMygiOyBicmVhazsK
LSAgICAgICAgICAgICAgICBjYXNlIDQ6IHByZVN0cmluZyA9ICJidmVjNCgiOyBicmVhazsKLSAg
ICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0Zsb2F0OgotICAgICAg
ICBjYXNlIEVPcENvbnZJbnRUb0Zsb2F0OgotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRP
cGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGNhc2UgMTogcHJlU3RyaW5nID0gImZsb2F0KCI7ICBicmVhazsKLSAgICAg
ICAgICAgICAgICBjYXNlIDI6IHByZVN0cmluZyA9ICJ2ZWMyKCI7IGJyZWFrOwotICAgICAgICAg
ICAgICAgIGNhc2UgMzogcHJlU3RyaW5nID0gInZlYzMoIjsgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgY2FzZSA0OiBwcmVTdHJpbmcgPSAidmVjNCgiOyBicmVhazsKLSAgICAgICAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9JbnQ6Ci0gICAgICAgIGNhc2UgRU9wQ29udkJv
b2xUb0ludDoKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBl
KCkuZ2V0Tm9taW5hbFNpemUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYXNl
IDE6IHByZVN0cmluZyA9ICJpbnQoIjsgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMjog
cHJlU3RyaW5nID0gIml2ZWMyKCI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMzogcHJl
U3RyaW5nID0gIml2ZWMzKCI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgNDogcHJlU3Ry
aW5nID0gIml2ZWM0KCI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNl
IEVPcFJhZGlhbnM6IHByZVN0cmluZyA9ICJyYWRpYW5zKCI7IGJyZWFrOwotICAgICAgICBjYXNl
IEVPcERlZ3JlZXM6IHByZVN0cmluZyA9ICJkZWdyZWVzKCI7IGJyZWFrOwotICAgICAgICBjYXNl
IEVPcFNpbjogcHJlU3RyaW5nID0gInNpbigiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb3M6
IHByZVN0cmluZyA9ICJjb3MoIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wVGFuOiBwcmVTdHJp
bmcgPSAidGFuKCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEFzaW46IHByZVN0cmluZyA9ICJh
c2luKCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEFjb3M6IHByZVN0cmluZyA9ICJhY29zKCI7
IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEF0YW46IHByZVN0cmluZyA9ICJhdGFuKCI7IGJyZWFr
OwotCi0gICAgICAgIGNhc2UgRU9wRXhwOiBwcmVTdHJpbmcgPSAiZXhwKCI7IGJyZWFrOwotICAg
ICAgICBjYXNlIEVPcExvZzogcHJlU3RyaW5nID0gImxvZygiOyBicmVhazsKLSAgICAgICAgY2Fz
ZSBFT3BFeHAyOiBwcmVTdHJpbmcgPSAiZXhwMigiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BM
b2cyOiBwcmVTdHJpbmcgPSAibG9nMigiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BTcXJ0OiBw
cmVTdHJpbmcgPSAic3FydCgiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BJbnZlcnNlU3FydDog
cHJlU3RyaW5nID0gImludmVyc2VzcXJ0KCI7IGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wQWJz
OiBwcmVTdHJpbmcgPSAiYWJzKCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcFNpZ246IHByZVN0
cmluZyA9ICJzaWduKCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEZsb29yOiBwcmVTdHJpbmcg
PSAiZmxvb3IoIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ2VpbDogcHJlU3RyaW5nID0gImNl
aWwoIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wRnJhY3Q6IHByZVN0cmluZyA9ICJmcmFjdCgi
OyBicmVhazsKLQotICAgICAgICBjYXNlIEVPcExlbmd0aDogcHJlU3RyaW5nID0gImxlbmd0aCgi
OyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BOb3JtYWxpemU6IHByZVN0cmluZyA9ICJub3JtYWxp
emUoIjsgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BERmR4OiBwcmVTdHJpbmcgPSAiZEZkeCgi
OyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BERmR5OiBwcmVTdHJpbmcgPSAiZEZkeSgiOyBicmVh
azsKLSAgICAgICAgY2FzZSBFT3BGd2lkdGg6IHByZVN0cmluZyA9ICJmd2lkdGgoIjsgYnJlYWs7
Ci0KLSAgICAgICAgY2FzZSBFT3BBbnk6IHByZVN0cmluZyA9ICJhbnkoIjsgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRU9wQWxsOiBwcmVTdHJpbmcgPSAiYWxsKCI7IGJyZWFrOwotCi0gICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IGJyZWFrOwotICAgIH0KLQotICAgIGlmICh2aXNpdCA9PSBQ
cmVWaXNpdCAmJiBub2RlLT5nZXRVc2VFbXVsYXRlZEZ1bmN0aW9uKCkpCi0gICAgICAgIHByZVN0
cmluZyA9IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpHZXRFbXVsYXRlZEZ1bmN0aW9uTmFtZShw
cmVTdHJpbmcpOwotICAgIHdyaXRlVHJpcGxldCh2aXNpdCwgcHJlU3RyaW5nLmNfc3RyKCksIE5V
TEwsIHBvc3RTdHJpbmcuY19zdHIoKSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBU
T3V0cHV0R0xTTEJhc2U6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0
aW9uKiBub2RlKQotewotICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNpbmsoKTsKLQotICAg
IGlmIChub2RlLT51c2VzVGVybmFyeU9wZXJhdG9yKCkpCi0gICAgewotICAgICAgICAvLyBOb3Rp
Y2UgdHdvIGJyYWNrZXRzIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZC4gVGhlIG91dGVyIG9uZXMK
LSAgICAgICAgLy8gZW5jYXBzdWxhdGUgdGhlIHdob2xlIHRlcm5hcnkgZXhwcmVzc2lvbi4gVGhp
cyBwcmVzZXJ2ZXMgdGhlCi0gICAgICAgIC8vIG9yZGVyIG9mIHByZWNlZGVuY2Ugd2hlbiB0ZXJu
YXJ5IGV4cHJlc3Npb25zIGFyZSB1c2VkIGluIGEKLSAgICAgICAgLy8gY29tcG91bmQgZXhwcmVz
c2lvbiwgaS5lLiwgYyA9IDIgKiAoYSA8IGIgPyAxIDogMikuCi0gICAgICAgIG91dCA8PCAiKCgi
OwotICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAg
IG91dCA8PCAiKSA/ICgiOwotICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+dHJhdmVyc2Uo
dGhpcyk7Ci0gICAgICAgIG91dCA8PCAiKSA6ICgiOwotICAgICAgICBub2RlLT5nZXRGYWxzZUJs
b2NrKCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBvdXQgPDwgIikpIjsKLSAgICB9Ci0gICAg
ZWxzZQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJpZiAoIjsKLSAgICAgICAgbm9kZS0+Z2V0Q29u
ZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBvdXQgPDwgIilcbiI7Ci0KLSAgICAg
ICAgaW5jcmVtZW50RGVwdGgobm9kZSk7Ci0gICAgICAgIHZpc2l0Q29kZUJsb2NrKG5vZGUtPmdl
dFRydWVCbG9jaygpKTsKLQotICAgICAgICBpZiAobm9kZS0+Z2V0RmFsc2VCbG9jaygpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgImVsc2VcbiI7Ci0gICAgICAgICAgICB2aXNpdENv
ZGVCbG9jayhub2RlLT5nZXRGYWxzZUJsb2NrKCkpOwotICAgICAgICB9Ci0gICAgICAgIGRlY3Jl
bWVudERlcHRoKCk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBUT3V0cHV0
R0xTTEJhc2U6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBu
b2RlKQotewotICAgIGJvb2wgdmlzaXRDaGlsZHJlbiA9IHRydWU7Ci0gICAgVEluZm9TaW5rQmFz
ZSYgb3V0ID0gb2JqU2luaygpOwotICAgIFRTdHJpbmcgcHJlU3RyaW5nOwotICAgIGJvb2wgZGVs
YXllZFdyaXRlID0gZmFsc2U7Ci0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQotICAgIHsKLSAg
ICAgICAgY2FzZSBFT3BTZXF1ZW5jZTogewotICAgICAgICAgICAgLy8gU2NvcGUgdGhlIHNlcXVl
bmNlcyBleGNlcHQgd2hlbiBhdCB0aGUgZ2xvYmFsIHNjb3BlLgotICAgICAgICAgICAgaWYgKGRl
cHRoID4gMCkgb3V0IDw8ICJ7XG4iOwotCi0gICAgICAgICAgICBpbmNyZW1lbnREZXB0aChub2Rl
KTsKLSAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBub2RlLT5n
ZXRTZXF1ZW5jZSgpOwotICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBzZXF1ZW5jZS5iZWdpbigpOwotICAgICAgICAgICAgICAgICBpdGVyICE9
IHNlcXVlbmNlLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
VEludGVybU5vZGUqIG5vZGUgPSAqaXRlcjsKLSAgICAgICAgICAgICAgICBBU1NFUlQobm9kZSAh
PSBOVUxMKTsKLSAgICAgICAgICAgICAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKLQotICAgICAg
ICAgICAgICAgIGlmIChpc1NpbmdsZVN0YXRlbWVudChub2RlKSkKLSAgICAgICAgICAgICAgICAg
ICAgb3V0IDw8ICI7XG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVjcmVtZW50RGVw
dGgoKTsKLQotICAgICAgICAgICAgLy8gU2NvcGUgdGhlIHNlcXVlbmNlcyBleGNlcHQgd2hlbiBh
dCB0aGUgZ2xvYmFsIHNjb3BlLgotICAgICAgICAgICAgaWYgKGRlcHRoID4gMCkgb3V0IDw8ICJ9
XG4iOwotICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBFT3BQcm90b3R5cGU6IHsKLSAgICAgICAgICAg
IC8vIEZ1bmN0aW9uIGRlY2xhcmF0aW9uLgotICAgICAgICAgICAgQVNTRVJUKHZpc2l0ID09IFBy
ZVZpc2l0KTsKLSAgICAgICAgICAgIHdyaXRlVmFyaWFibGVUeXBlKG5vZGUtPmdldFR5cGUoKSk7
Ci0gICAgICAgICAgICBvdXQgPDwgIiAiIDw8IGhhc2hOYW1lKG5vZGUtPmdldE5hbWUoKSk7Ci0K
LSAgICAgICAgICAgIG91dCA8PCAiKCI7Ci0gICAgICAgICAgICB3cml0ZUZ1bmN0aW9uUGFyYW1l
dGVycyhub2RlLT5nZXRTZXF1ZW5jZSgpKTsKLSAgICAgICAgICAgIG91dCA8PCAiKSI7Ci0KLSAg
ICAgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgRU9wRnVuY3Rpb246IHsKLSAgICAgICAgICAgIC8vIEZ1bmN0
aW9uIGRlZmluaXRpb24uCi0gICAgICAgICAgICBBU1NFUlQodmlzaXQgPT0gUHJlVmlzaXQpOwot
ICAgICAgICAgICAgd3JpdGVWYXJpYWJsZVR5cGUobm9kZS0+Z2V0VHlwZSgpKTsKLSAgICAgICAg
ICAgIG91dCA8PCAiICIgPDwgaGFzaEZ1bmN0aW9uTmFtZShub2RlLT5nZXROYW1lKCkpOwotCi0g
ICAgICAgICAgICBpbmNyZW1lbnREZXB0aChub2RlKTsKLSAgICAgICAgICAgIC8vIEZ1bmN0aW9u
IGRlZmluaXRpb24gbm9kZSBjb250YWlucyBvbmUgb3IgdHdvIGNoaWxkcmVuIG5vZGVzCi0gICAg
ICAgICAgICAvLyByZXByZXNlbnRpbmcgZnVuY3Rpb24gcGFyYW1ldGVycyBhbmQgZnVuY3Rpb24g
Ym9keS4gVGhlIGxhdHRlcgotICAgICAgICAgICAgLy8gaXMgbm90IHByZXNlbnQgaW4gY2FzZSBv
ZiBlbXB0eSBmdW5jdGlvbiBib2RpZXMuCi0gICAgICAgICAgICBjb25zdCBUSW50ZXJtU2VxdWVu
Y2UmIHNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKLSAgICAgICAgICAgIEFTU0VSVCgo
c2VxdWVuY2Uuc2l6ZSgpID09IDEpIHx8IChzZXF1ZW5jZS5zaXplKCkgPT0gMikpOwotICAgICAg
ICAgICAgVEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBzZXFJdGVyID0gc2VxdWVuY2Uu
YmVnaW4oKTsKLQotICAgICAgICAgICAgLy8gVHJhdmVyc2UgZnVuY3Rpb24gcGFyYW1ldGVycy4K
LSAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHBhcmFtcyA9ICgqc2VxSXRlciktPmdldEFz
QWdncmVnYXRlKCk7Ci0gICAgICAgICAgICBBU1NFUlQocGFyYW1zICE9IE5VTEwpOwotICAgICAg
ICAgICAgQVNTRVJUKHBhcmFtcy0+Z2V0T3AoKSA9PSBFT3BQYXJhbWV0ZXJzKTsKLSAgICAgICAg
ICAgIHBhcmFtcy0+dHJhdmVyc2UodGhpcyk7Ci0KLSAgICAgICAgICAgIC8vIFRyYXZlcnNlIGZ1
bmN0aW9uIGJvZHkuCi0gICAgICAgICAgICBUSW50ZXJtQWdncmVnYXRlKiBib2R5ID0gKytzZXFJ
dGVyICE9IHNlcXVlbmNlLmVuZCgpID8KLSAgICAgICAgICAgICAgICAoKnNlcUl0ZXIpLT5nZXRB
c0FnZ3JlZ2F0ZSgpIDogTlVMTDsKLSAgICAgICAgICAgIHZpc2l0Q29kZUJsb2NrKGJvZHkpOwot
ICAgICAgICAgICAgZGVjcmVtZW50RGVwdGgoKTsKLSAKLSAgICAgICAgICAgIC8vIEZ1bGx5IHBy
b2Nlc3NlZDsgbm8gbmVlZCB0byB2aXNpdCBjaGlsZHJlbi4KLSAgICAgICAgICAgIHZpc2l0Q2hp
bGRyZW4gPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgRU9wRnVuY3Rpb25DYWxsOgotICAgICAgICAgICAgLy8gRnVuY3Rpb24gY2FsbC4KLSAgICAg
ICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBvdXQgPDwgaGFzaEZ1bmN0aW9uTmFtZShub2RlLT5nZXROYW1lKCkpIDw8ICIoIjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIp
IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFBh
cmFtZXRlcnM6IHsKLSAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHBhcmFtZXRlcnMuCi0gICAgICAg
ICAgICBBU1NFUlQodmlzaXQgPT0gUHJlVmlzaXQpOwotICAgICAgICAgICAgb3V0IDw8ICIoIjsK
LSAgICAgICAgICAgIHdyaXRlRnVuY3Rpb25QYXJhbWV0ZXJzKG5vZGUtPmdldFNlcXVlbmNlKCkp
OwotICAgICAgICAgICAgb3V0IDw8ICIpIjsKLSAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBm
YWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRU9wRGVj
bGFyYXRpb246IHsKLSAgICAgICAgICAgIC8vIFZhcmlhYmxlIGRlY2xhcmF0aW9uLgotICAgICAg
ICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgp
OwotICAgICAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1UeXBlZCogdmFyaWFibGUgPSBzZXF1ZW5j
ZS5mcm9udCgpLT5nZXRBc1R5cGVkKCk7Ci0gICAgICAgICAgICAgICAgd3JpdGVWYXJpYWJsZVR5
cGUodmFyaWFibGUtPmdldFR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIgIjsKLSAg
ICAgICAgICAgICAgICBtRGVjbGFyaW5nVmFyaWFibGVzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7Ci0gICAgICAgICAgICAgICAgbURlY2xhcmluZ1Zh
cmlhYmxlcyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgbURlY2xhcmluZ1ZhcmlhYmxlcyA9IGZhbHNlOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RGbG9hdDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZmxvYXQoIiwgTlVMTCwgIiki
KTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMjogd3JpdGVUcmlwbGV0KHZp
c2l0LCAidmVjMigiLCAiLCAiLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RWZWMzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJ2ZWMzKCIsICIsICIsICIpIik7IGJyZWFrOwot
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgInZlYzQo
IiwgIiwgIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDogd3Jp
dGVUcmlwbGV0KHZpc2l0LCAiYm9vbCgiLCBOVUxMLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RCVmVjMjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYnZlYzIoIiwgIiwgIiwg
IikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzM6IHdyaXRlVHJpcGxl
dCh2aXNpdCwgImJ2ZWMzKCIsICIsICIsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdEJWZWM0OiB3cml0ZVRyaXBsZXQodmlzaXQsICJidmVjNCgiLCAiLCAiLCAiKSIpOyBi
cmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6IHdyaXRlVHJpcGxldCh2aXNpdCwg
ImludCgiLCBOVUxMLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVj
Mjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiaXZlYzIoIiwgIiwgIiwgIikiKTsgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzM6IHdyaXRlVHJpcGxldCh2aXNpdCwgIml2ZWMzKCIs
ICIsICIsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWM0OiB3cml0
ZVRyaXBsZXQodmlzaXQsICJpdmVjNCgiLCAiLCAiLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RNYXQyOiB3cml0ZVRyaXBsZXQodmlzaXQsICJtYXQyKCIsICIsICIsICIp
Iik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6IHdyaXRlVHJpcGxldCh2
aXNpdCwgIm1hdDMoIiwgIiwgIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0TWF0NDogd3JpdGVUcmlwbGV0KHZpc2l0LCAibWF0NCgiLCAiLCAiLCAiKSIpOyBicmVhazsK
LSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RTdHJ1Y3Q6Ci0gICAgICAgICAgICBpZiAodmlzaXQg
PT0gUHJlVmlzaXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVFR5cGUm
IHR5cGUgPSBub2RlLT5nZXRUeXBlKCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUuZ2V0
QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgaGFzaE5h
bWUodHlwZS5nZXRTdHJ1Y3QoKS0+bmFtZSgpKSA8PCAiKCI7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dCA8PCAiLCAiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiKSI7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEVPcExlc3NUaGFuOiBwcmVTdHJp
bmcgPSAibGVzc1RoYW4oIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRU9wR3JlYXRlclRoYW46IHByZVN0cmluZyA9ICJncmVhdGVyVGhhbigiOyBkZWxheWVkV3Jp
dGUgPSB0cnVlOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOiBwcmVTdHJp
bmcgPSAibGVzc1RoYW5FcXVhbCgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKLSAgICAg
ICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiBwcmVTdHJpbmcgPSAiZ3JlYXRlclRoYW5FcXVh
bCgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BWZWN0b3JF
cXVhbDogcHJlU3RyaW5nID0gImVxdWFsKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOwot
ICAgICAgICBjYXNlIEVPcFZlY3Rvck5vdEVxdWFsOiBwcmVTdHJpbmcgPSAibm90RXF1YWwoIjsg
ZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29tbWE6IHdyaXRl
VHJpcGxldCh2aXNpdCwgTlVMTCwgIiwgIiwgTlVMTCk7IGJyZWFrOwotCi0gICAgICAgIGNhc2Ug
RU9wTW9kOiBwcmVTdHJpbmcgPSAibW9kKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOwot
ICAgICAgICBjYXNlIEVPcFBvdzogcHJlU3RyaW5nID0gInBvdygiOyBkZWxheWVkV3JpdGUgPSB0
cnVlOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BBdGFuOiBwcmVTdHJpbmcgPSAiYXRhbigiOyBk
ZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BNaW46IHByZVN0cmlu
ZyA9ICJtaW4oIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9w
TWF4OiBwcmVTdHJpbmcgPSAibWF4KCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOwotICAg
ICAgICBjYXNlIEVPcENsYW1wOiBwcmVTdHJpbmcgPSAiY2xhbXAoIjsgZGVsYXllZFdyaXRlID0g
dHJ1ZTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTWl4OiBwcmVTdHJpbmcgPSAibWl4KCI7IGRl
bGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcFN0ZXA6IHByZVN0cmlu
ZyA9ICJzdGVwKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOwotICAgICAgICBjYXNlIEVP
cFNtb290aFN0ZXA6IHByZVN0cmluZyA9ICJzbW9vdGhzdGVwKCI7IGRlbGF5ZWRXcml0ZSA9IHRy
dWU7IGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wRGlzdGFuY2U6IHByZVN0cmluZyA9ICJkaXN0
YW5jZSgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BEb3Q6
IHByZVN0cmluZyA9ICJkb3QoIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRU9wQ3Jvc3M6IHByZVN0cmluZyA9ICJjcm9zcygiOyBkZWxheWVkV3JpdGUgPSB0cnVl
OyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BGYWNlRm9yd2FyZDogcHJlU3RyaW5nID0gImZhY2Vm
b3J3YXJkKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcFJl
ZmxlY3Q6IHByZVN0cmluZyA9ICJyZWZsZWN0KCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFr
OwotICAgICAgICBjYXNlIEVPcFJlZnJhY3Q6IHByZVN0cmluZyA9ICJyZWZyYWN0KCI7IGRlbGF5
ZWRXcml0ZSA9IHRydWU7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcE11bDogcHJlU3RyaW5nID0g
Im1hdHJpeENvbXBNdWx0KCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOwotCi0gICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IGJyZWFrOwotICAgIH0KLSAgICBpZiAoZGVsYXllZFdy
aXRlICYmIHZpc2l0ID09IFByZVZpc2l0ICYmIG5vZGUtPmdldFVzZUVtdWxhdGVkRnVuY3Rpb24o
KSkKLSAgICAgICAgcHJlU3RyaW5nID0gQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OkdldEVtdWxh
dGVkRnVuY3Rpb25OYW1lKHByZVN0cmluZyk7Ci0gICAgaWYgKGRlbGF5ZWRXcml0ZSkKLSAgICAg
ICAgd3JpdGVUcmlwbGV0KHZpc2l0LCBwcmVTdHJpbmcuY19zdHIoKSwgIiwgIiwgIikiKTsKLSAg
ICByZXR1cm4gdmlzaXRDaGlsZHJlbjsKLX0KLQotYm9vbCBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0
TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqIG5vZGUpCi17Ci0gICAgVEluZm9TaW5rQmFz
ZSYgb3V0ID0gb2JqU2luaygpOwotCi0gICAgaW5jcmVtZW50RGVwdGgobm9kZSk7Ci0gICAgLy8g
TG9vcCBoZWFkZXIuCi0gICAgVExvb3BUeXBlIGxvb3BUeXBlID0gbm9kZS0+Z2V0VHlwZSgpOwot
ICAgIGlmIChsb29wVHlwZSA9PSBFTG9vcEZvcikgIC8vIGZvciBsb29wCi0gICAgewotICAgICAg
ICBpZiAoIW5vZGUtPmdldFVucm9sbEZsYWcoKSkgewotICAgICAgICAgICAgb3V0IDw8ICJmb3Ig
KCI7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Z2V0SW5pdCgpKQotICAgICAgICAgICAgICAgIG5v
ZGUtPmdldEluaXQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICBvdXQgPDwgIjsgIjsK
LQotICAgICAgICAgICAgaWYgKG5vZGUtPmdldENvbmRpdGlvbigpKQotICAgICAgICAgICAgICAg
IG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgIG91dCA8
PCAiOyAiOwotCi0gICAgICAgICAgICBpZiAobm9kZS0+Z2V0RXhwcmVzc2lvbigpKQotICAgICAg
ICAgICAgICAgIG5vZGUtPmdldEV4cHJlc3Npb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAg
ICAgICBvdXQgPDwgIilcbiI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAobG9vcFR5
cGUgPT0gRUxvb3BXaGlsZSkgIC8vIHdoaWxlIGxvb3AKLSAgICB7Ci0gICAgICAgIG91dCA8PCAi
d2hpbGUgKCI7Ci0gICAgICAgIEFTU0VSVChub2RlLT5nZXRDb25kaXRpb24oKSAhPSBOVUxMKTsK
LSAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBv
dXQgPDwgIilcbiI7Ci0gICAgfQotICAgIGVsc2UgIC8vIGRvLXdoaWxlIGxvb3AKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChsb29wVHlwZSA9PSBFTG9vcERvV2hpbGUpOwotICAgICAgICBvdXQgPDwg
ImRvXG4iOwotICAgIH0KLQotICAgIC8vIExvb3AgYm9keS4KLSAgICBpZiAobm9kZS0+Z2V0VW5y
b2xsRmxhZygpKQotICAgIHsKLSAgICAgICAgVExvb3BJbmRleEluZm8gaW5kZXhJbmZvOwotICAg
ICAgICBtTG9vcFVucm9sbC5GaWxsTG9vcEluZGV4SW5mbyhub2RlLCBpbmRleEluZm8pOwotICAg
ICAgICBtTG9vcFVucm9sbC5QdXNoKGluZGV4SW5mbyk7Ci0gICAgICAgIHdoaWxlIChtTG9vcFVu
cm9sbC5TYXRpc2ZpZXNMb29wQ29uZGl0aW9uKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZp
c2l0Q29kZUJsb2NrKG5vZGUtPmdldEJvZHkoKSk7Ci0gICAgICAgICAgICBtTG9vcFVucm9sbC5T
dGVwKCk7Ci0gICAgICAgIH0KLSAgICAgICAgbUxvb3BVbnJvbGwuUG9wKCk7Ci0gICAgfQotICAg
IGVsc2UKLSAgICB7Ci0gICAgICAgIHZpc2l0Q29kZUJsb2NrKG5vZGUtPmdldEJvZHkoKSk7Ci0g
ICAgfQotCi0gICAgLy8gTG9vcCBmb290ZXIuCi0gICAgaWYgKGxvb3BUeXBlID09IEVMb29wRG9X
aGlsZSkgIC8vIGRvLXdoaWxlIGxvb3AKLSAgICB7Ci0gICAgICAgIG91dCA8PCAid2hpbGUgKCI7
Ci0gICAgICAgIEFTU0VSVChub2RlLT5nZXRDb25kaXRpb24oKSAhPSBOVUxMKTsKLSAgICAgICAg
bm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBvdXQgPDwgIik7
XG4iOwotICAgIH0KLSAgICBkZWNyZW1lbnREZXB0aCgpOwotCi0gICAgLy8gTm8gbmVlZCB0byB2
aXNpdCBjaGlsZHJlbi4gVGhleSBoYXZlIGJlZW4gYWxyZWFkeSBwcm9jZXNzZWQgaW4KLSAgICAv
LyB0aGlzIGZ1bmN0aW9uLgotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBUT3V0cHV0R0xT
TEJhc2U6OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKiBub2RlKQotewot
ICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkpCi0gICAgewotICAgICAgICBjYXNlIEVPcEtp
bGw6IHdyaXRlVHJpcGxldCh2aXNpdCwgImRpc2NhcmQiLCBOVUxMLCBOVUxMKTsgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRU9wQnJlYWs6IHdyaXRlVHJpcGxldCh2aXNpdCwgImJyZWFrIiwgTlVMTCwg
TlVMTCk7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnRpbnVlOiB3cml0ZVRyaXBsZXQodmlz
aXQsICJjb250aW51ZSIsIE5VTEwsIE5VTEwpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BSZXR1
cm46IHdyaXRlVHJpcGxldCh2aXNpdCwgInJldHVybiAiLCBOVUxMLCBOVUxMKTsgYnJlYWs7Ci0g
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IGJyZWFrOwotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRDb2RlQmxvY2soVEludGVy
bU5vZGUqIG5vZGUpIHsKLSAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBvYmpTaW5rKCk7Ci0gICAg
aWYgKG5vZGUgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOwot
ICAgICAgICAvLyBTaW5nbGUgc3RhdGVtZW50cyBub3QgcGFydCBvZiBhIHNlcXVlbmNlIG5lZWQg
dG8gYmUgdGVybWluYXRlZAotICAgICAgICAvLyB3aXRoIHNlbWktY29sb24uCi0gICAgICAgIGlm
IChpc1NpbmdsZVN0YXRlbWVudChub2RlKSkKLSAgICAgICAgICAgIG91dCA8PCAiO1xuIjsKLSAg
ICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJ7XG59XG4iOyAgLy8gRW1wdHkg
Y29kZSBibG9jay4KLSAgICB9Ci19Ci0KLVRTdHJpbmcgVE91dHB1dEdMU0xCYXNlOjpnZXRUeXBl
TmFtZShjb25zdCBUVHlwZSYgdHlwZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlIG91dDsKLSAgICBp
ZiAodHlwZS5pc01hdHJpeCgpKQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJtYXQiOwotICAgICAg
ICBvdXQgPDwgdHlwZS5nZXROb21pbmFsU2l6ZSgpOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBl
LmlzVmVjdG9yKCkpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0QmFzaWNUeXBlKCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IG91dCA8PCAidmVjIjsgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIEVidEludDogb3V0IDw8ICJpdmVjIjsgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIEVidEJvb2w6IG91dCA8PCAiYnZlYyI7IGJyZWFrOwotICAgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgb3V0IDw8
IHR5cGUuZ2V0Tm9taW5hbFNpemUoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAg
aWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQotICAgICAgICAgICAgb3V0IDw8
IGhhc2hOYW1lKHR5cGUuZ2V0U3RydWN0KCktPm5hbWUoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG91dCA8PCB0eXBlLmdldEJhc2ljU3RyaW5nKCk7Ci0gICAgfQotICAgIHJldHVybiBU
U3RyaW5nKG91dC5jX3N0cigpKTsKLX0KLQotVFN0cmluZyBUT3V0cHV0R0xTTEJhc2U6Omhhc2hO
YW1lKGNvbnN0IFRTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKG1IYXNoRnVuY3Rpb24gPT0gTlVM
TCB8fCBuYW1lLmVtcHR5KCkpCi0gICAgICAgIHJldHVybiBuYW1lOwotICAgIE5hbWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbU5hbWVNYXAuZmluZChuYW1lLmNfc3RyKCkpOwotICAgIGlmIChp
dCAhPSBtTmFtZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQuY19zdHIoKTsK
LSAgICBUU3RyaW5nIGhhc2hlZE5hbWUgPSBUSW50ZXJtVHJhdmVyc2VyOjpoYXNoKG5hbWUsIG1I
YXNoRnVuY3Rpb24pOwotICAgIG1OYW1lTWFwW25hbWUuY19zdHIoKV0gPSBoYXNoZWROYW1lLmNf
c3RyKCk7Ci0gICAgcmV0dXJuIGhhc2hlZE5hbWU7Ci19Ci0KLVRTdHJpbmcgVE91dHB1dEdMU0xC
YXNlOjpoYXNoVmFyaWFibGVOYW1lKGNvbnN0IFRTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKG1T
eW1ib2xUYWJsZS5maW5kQnVpbHRJbihuYW1lKSAhPSBOVUxMKQotICAgICAgICByZXR1cm4gbmFt
ZTsKLSAgICByZXR1cm4gaGFzaE5hbWUobmFtZSk7Ci19Ci0KLVRTdHJpbmcgVE91dHB1dEdMU0xC
YXNlOjpoYXNoRnVuY3Rpb25OYW1lKGNvbnN0IFRTdHJpbmcmIG1hbmdsZWRfbmFtZSkKLXsKLSAg
ICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShtYW5nbGVkX25hbWUpOwot
ICAgIGlmIChtU3ltYm9sVGFibGUuZmluZEJ1aWx0SW4obWFuZ2xlZF9uYW1lKSAhPSBOVUxMIHx8
IG5hbWUgPT0gIm1haW4iKQotICAgICAgICByZXR1cm4gbmFtZTsKLSAgICByZXR1cm4gaGFzaE5h
bWUobmFtZSk7Ci19Ci0KLWJvb2wgVE91dHB1dEdMU0xCYXNlOjpzdHJ1Y3REZWNsYXJlZChjb25z
dCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EZWNsYXJlZFN0
cnVjdHMuZmluZChzdHJ1Y3R1cmUtPm5hbWUoKSkgIT0gbURlY2xhcmVkU3RydWN0cy5lbmQoKTsK
LX0KLQotdm9pZCBUT3V0cHV0R0xTTEJhc2U6OmRlY2xhcmVTdHJ1Y3QoY29uc3QgVFN0cnVjdHVy
ZSogc3RydWN0dXJlKQotewotICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNpbmsoKTsKLQot
ICAgIG91dCA8PCAic3RydWN0ICIgPDwgaGFzaE5hbWUoc3RydWN0dXJlLT5uYW1lKCkpIDw8ICJ7
XG4iOwotICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9IHN0cnVjdHVyZS0+ZmllbGRzKCk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpCi0gICAgewot
ICAgICAgICBjb25zdCBURmllbGQqIGZpZWxkID0gZmllbGRzW2ldOwotICAgICAgICBpZiAod3Jp
dGVWYXJpYWJsZVByZWNpc2lvbihmaWVsZC0+dHlwZSgpLT5nZXRQcmVjaXNpb24oKSkpCi0gICAg
ICAgICAgICBvdXQgPDwgIiAiOwotICAgICAgICBvdXQgPDwgZ2V0VHlwZU5hbWUoKmZpZWxkLT50
eXBlKCkpIDw8ICIgIiA8PCBoYXNoTmFtZShmaWVsZC0+bmFtZSgpKTsKLSAgICAgICAgaWYgKGZp
ZWxkLT50eXBlKCktPmlzQXJyYXkoKSkKLSAgICAgICAgICAgIG91dCA8PCBhcnJheUJyYWNrZXRz
KCpmaWVsZC0+dHlwZSgpKTsKLSAgICAgICAgb3V0IDw8ICI7XG4iOwotICAgIH0KLSAgICBvdXQg
PDwgIn0iOwotCi0gICAgbURlY2xhcmVkU3RydWN0cy5pbnNlcnQoc3RydWN0dXJlLT5uYW1lKCkp
OwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091
dHB1dEdMU0xCYXNlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0
cHV0R0xTTEJhc2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk4NjhjMDljY2Y3
NTQ5MDBjOTg0MTc1MDZjOTA3YmJhYjIxN2NiZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
T3V0cHV0R0xTTEJhc2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ1JPU1NDT01QSUxFUkdMU0xfT1VUUFVUR0xTTEJBU0VfSF8K
LSNkZWZpbmUgQ1JPU1NDT01QSUxFUkdMU0xfT1VUUFVUR0xTTEJBU0VfSF8KLQotI2luY2x1ZGUg
PHNldD4KLQotI2luY2x1ZGUgImNvbXBpbGVyL0Zvckxvb3BVbnJvbGwuaCIKLSNpbmNsdWRlICJj
b21waWxlci9pbnRlcm1lZGlhdGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9QYXJzZUNvbnRleHQu
aCIKLQotY2xhc3MgVE91dHB1dEdMU0xCYXNlIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKLXsK
LXB1YmxpYzoKLSAgICBUT3V0cHV0R0xTTEJhc2UoVEluZm9TaW5rQmFzZSYgb2JqU2luaywKLSAg
ICAgICAgICAgICAgICAgICAgU2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0
cmF0ZWd5LAotICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlv
biwKLSAgICAgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAgICAgICAgICAg
ICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSk7Ci0KLXByb3RlY3RlZDoKLSAgICBUSW5m
b1NpbmtCYXNlJiBvYmpTaW5rKCkgeyByZXR1cm4gbU9ialNpbms7IH0KLSAgICB2b2lkIHdyaXRl
VHJpcGxldChWaXNpdCB2aXNpdCwgY29uc3QgY2hhciogcHJlU3RyLCBjb25zdCBjaGFyKiBpblN0
ciwgY29uc3QgY2hhciogcG9zdFN0cik7Ci0gICAgdm9pZCB3cml0ZVZhcmlhYmxlVHlwZShjb25z
dCBUVHlwZSYgdHlwZSk7Ci0gICAgdmlydHVhbCBib29sIHdyaXRlVmFyaWFibGVQcmVjaXNpb24o
VFByZWNpc2lvbiBwcmVjaXNpb24pID0gMDsKLSAgICB2b2lkIHdyaXRlRnVuY3Rpb25QYXJhbWV0
ZXJzKGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgYXJncyk7Ci0gICAgY29uc3QgQ29uc3RhbnRVbmlv
biogd3JpdGVDb25zdGFudFVuaW9uKGNvbnN0IFRUeXBlJiB0eXBlLCBjb25zdCBDb25zdGFudFVu
aW9uKiBwQ29uc3RVbmlvbik7Ci0gICAgVFN0cmluZyBnZXRUeXBlTmFtZShjb25zdCBUVHlwZSYg
dHlwZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9k
ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRV
bmlvbiogbm9kZSk7Ci0gICAgdmlydHVhbCBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBU
SW50ZXJtQmluYXJ5KiBub2RlKTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2
aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRTZWxlY3Rp
b24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUpOwotICAgIHZpcnR1YWwgYm9v
bCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSk7Ci0g
ICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqIG5vZGUp
OwotICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5j
aCogbm9kZSk7Ci0KLSAgICB2b2lkIHZpc2l0Q29kZUJsb2NrKFRJbnRlcm1Ob2RlKiBub2RlKTsK
LQotCi0gICAgLy8gUmV0dXJuIHRoZSBvcmlnaW5hbCBuYW1lIGlmIGhhc2ggZnVuY3Rpb24gcG9p
bnRlciBpcyBOVUxMOwotICAgIC8vIG90aGVyd2lzZSByZXR1cm4gdGhlIGhhc2hlZCBuYW1lLgot
ICAgIFRTdHJpbmcgaGFzaE5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSk7Ci0gICAgLy8gU2FtZSBh
cyBoYXNoTmFtZSgpLCBidXQgd2l0aG91dCBoYXNoaW5nIGJ1aWx0LWluIHZhcmlhYmxlcy4KLSAg
ICBUU3RyaW5nIGhhc2hWYXJpYWJsZU5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSk7Ci0gICAgLy8g
U2FtZSBhcyBoYXNoTmFtZSgpLCBidXQgd2l0aG91dCBoYXNoaW5nIGJ1aWx0LWluIGZ1bmN0aW9u
cy4KLSAgICBUU3RyaW5nIGhhc2hGdW5jdGlvbk5hbWUoY29uc3QgVFN0cmluZyYgbWFuZ2xlZF9u
YW1lKTsKLQotcHJpdmF0ZToKLSAgICBib29sIHN0cnVjdERlY2xhcmVkKGNvbnN0IFRTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkgY29uc3Q7Ci0gICAgdm9pZCBkZWNsYXJlU3RydWN0KGNvbnN0IFRTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSk7Ci0KLSAgICBUSW5mb1NpbmtCYXNlJiBtT2JqU2luazsKLSAgICBi
b29sIG1EZWNsYXJpbmdWYXJpYWJsZXM7Ci0KLSAgICAvLyBTdHJ1Y3RzIGFyZSBkZWNsYXJlZCBh
cyB0aGUgdHJlZSBpcyB0cmF2ZXJzZWQuIFRoaXMgc2V0IGNvbnRhaW5zIGFsbAotICAgIC8vIHRo
ZSBzdHJ1Y3RzIGFscmVhZHkgZGVjbGFyZWQuIEl0IGlzIG1haW50YWluZWQgc28gdGhhdCBhIHN0
cnVjdCBpcwotICAgIC8vIGRlY2xhcmVkIG9ubHkgb25jZS4KLSAgICB0eXBlZGVmIHN0ZDo6c2V0
PFRTdHJpbmc+IERlY2xhcmVkU3RydWN0czsKLSAgICBEZWNsYXJlZFN0cnVjdHMgbURlY2xhcmVk
U3RydWN0czsKLQotICAgIEZvckxvb3BVbnJvbGwgbUxvb3BVbnJvbGw7Ci0KLSAgICBTaEFycmF5
SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IG1DbGFtcGluZ1N0cmF0ZWd5OwotCi0gICAgLy8gbmFtZSBo
YXNoaW5nLgotICAgIFNoSGFzaEZ1bmN0aW9uNjQgbUhhc2hGdW5jdGlvbjsKLQotICAgIE5hbWVN
YXAmIG1OYW1lTWFwOwotCi0gICAgVFN5bWJvbFRhYmxlJiBtU3ltYm9sVGFibGU7Ci19OwotCi0j
ZW5kaWYgIC8vIENST1NTQ09NUElMRVJHTFNMX09VVFBVVEdMU0xCQVNFX0hfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MTVmMjI5Yzk4MDRiMjBhYmY4MGY3NmZkMjc1MmQz
MTYwOTVkYTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMzEzMyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVk
ZSAiY29tcGlsZXIvT3V0cHV0SExTTC5oIgotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMu
aCIKLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL0RldGVj
dERpc2NvbnRpbnVpdHkuaCIKLSNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgotI2luY2x1
ZGUgImNvbXBpbGVyL1NlYXJjaFN5bWJvbC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1VuZm9sZFNo
b3J0Q2lyY3VpdC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL05vZGVTZWFyY2guaCIKLQotI2luY2x1
ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxjZmxvYXQ+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQot
bmFtZXNwYWNlIHNoCi17Ci0vLyBJbnRlZ2VyIHRvIFRTdHJpbmcgY29udmVyc2lvbgotVFN0cmlu
ZyBzdHIoaW50IGkpCi17Ci0gICAgY2hhciBidWZmZXJbMjBdOwotICAgIHNucHJpbnRmKGJ1ZmZl
ciwgc2l6ZW9mKGJ1ZmZlciksICIlZCIsIGkpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLU91
dHB1dEhMU0w6Ok91dHB1dEhMU0woVFBhcnNlQ29udGV4dCAmY29udGV4dCwgY29uc3QgU2hCdWls
dEluUmVzb3VyY2VzJiByZXNvdXJjZXMsIFNoU2hhZGVyT3V0cHV0IG91dHB1dFR5cGUpCi0gICAg
OiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIHRydWUsIHRydWUpLCBtQ29udGV4dChjb250ZXh0KSwg
bU91dHB1dFR5cGUob3V0cHV0VHlwZSkKLXsKLSAgICBtVW5mb2xkU2hvcnRDaXJjdWl0ID0gbmV3
IFVuZm9sZFNob3J0Q2lyY3VpdChjb250ZXh0LCB0aGlzKTsKLSAgICBtSW5zaWRlRnVuY3Rpb24g
PSBmYWxzZTsKLQotICAgIG1Vc2VzVGV4dHVyZTJEID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJl
MkRfYmlhcyA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZTJEUHJvaiA9IGZhbHNlOwotICAgIG1V
c2VzVGV4dHVyZTJEUHJval9iaWFzID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9k
ID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRMb2QgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1
cmVDdWJlID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlQ3ViZV9iaWFzID0gZmFsc2U7Ci0gICAg
bVVzZXNUZXh0dXJlQ3ViZUxvZCA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZTJETG9kMCA9IGZh
bHNlOwotICAgIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0
dXJlMkRQcm9qTG9kMCA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDBfYmlhcyA9
IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QwID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0
dXJlQ3ViZUxvZDBfYmlhcyA9IGZhbHNlOwotICAgIG1Vc2VzRnJhZ0NvbG9yID0gZmFsc2U7Ci0g
ICAgbVVzZXNGcmFnRGF0YSA9IGZhbHNlOwotICAgIG1Vc2VzRGVwdGhSYW5nZSA9IGZhbHNlOwot
ICAgIG1Vc2VzRnJhZ0Nvb3JkID0gZmFsc2U7Ci0gICAgbVVzZXNQb2ludENvb3JkID0gZmFsc2U7
Ci0gICAgbVVzZXNGcm9udEZhY2luZyA9IGZhbHNlOwotICAgIG1Vc2VzUG9pbnRTaXplID0gZmFs
c2U7Ci0gICAgbVVzZXNGcmFnRGVwdGggPSBmYWxzZTsKLSAgICBtVXNlc1hvciA9IGZhbHNlOwot
ICAgIG1Vc2VzTW9kMSA9IGZhbHNlOwotICAgIG1Vc2VzTW9kMnYgPSBmYWxzZTsKLSAgICBtVXNl
c01vZDJmID0gZmFsc2U7Ci0gICAgbVVzZXNNb2QzdiA9IGZhbHNlOwotICAgIG1Vc2VzTW9kM2Yg
PSBmYWxzZTsKLSAgICBtVXNlc01vZDR2ID0gZmFsc2U7Ci0gICAgbVVzZXNNb2Q0ZiA9IGZhbHNl
OwotICAgIG1Vc2VzRmFjZWZvcndhcmQxID0gZmFsc2U7Ci0gICAgbVVzZXNGYWNlZm9yd2FyZDIg
PSBmYWxzZTsKLSAgICBtVXNlc0ZhY2Vmb3J3YXJkMyA9IGZhbHNlOwotICAgIG1Vc2VzRmFjZWZv
cndhcmQ0ID0gZmFsc2U7Ci0gICAgbVVzZXNBdGFuMl8xID0gZmFsc2U7Ci0gICAgbVVzZXNBdGFu
Ml8yID0gZmFsc2U7Ci0gICAgbVVzZXNBdGFuMl8zID0gZmFsc2U7Ci0gICAgbVVzZXNBdGFuMl80
ID0gZmFsc2U7Ci0gICAgbVVzZXNEaXNjYXJkUmV3cml0aW5nID0gZmFsc2U7Ci0KLSAgICBtTnVt
UmVuZGVyVGFyZ2V0cyA9IHJlc291cmNlcy5FWFRfZHJhd19idWZmZXJzID8gcmVzb3VyY2VzLk1h
eERyYXdCdWZmZXJzIDogMTsKLQotICAgIG1TY29wZURlcHRoID0gMDsKLQotICAgIG1VbmlxdWVJ
bmRleCA9IDA7Ci0KLSAgICBtQ29udGFpbnNMb29wRGlzY29udGludWl0eSA9IGZhbHNlOwotICAg
IG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsKLSAgICBtSW5zaWRlRGlzY29udGludW91c0xv
b3AgPSBmYWxzZTsKLQotICAgIG1FeGNlc3NpdmVMb29wSW5kZXggPSBOVUxMOwotCi0gICAgaWYg
KG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICB7Ci0gICAgICAgIGlmIChtQ29u
dGV4dC5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikKLSAgICAgICAgewotICAgICAg
ICAgICAgbVVuaWZvcm1SZWdpc3RlciA9IDM7ICAgLy8gUmVzZXJ2ZSByZWdpc3RlcnMgZm9yIGR4
X0RlcHRoUmFuZ2UsIGR4X1ZpZXdDb29yZHMgYW5kIGR4X0RlcHRoRnJvbnQKLSAgICAgICAgfQot
ICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1Vbmlmb3JtUmVnaXN0ZXIgPSAy
OyAgIC8vIFJlc2VydmUgcmVnaXN0ZXJzIGZvciBkeF9EZXB0aFJhbmdlIGFuZCBkeF9WaWV3QWRq
dXN0Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgbVVuaWZvcm1S
ZWdpc3RlciA9IDA7Ci0gICAgfQotCi0gICAgbVNhbXBsZXJSZWdpc3RlciA9IDA7Ci19Ci0KLU91
dHB1dEhMU0w6On5PdXRwdXRITFNMKCkKLXsKLSAgICBkZWxldGUgbVVuZm9sZFNob3J0Q2lyY3Vp
dDsKLX0KLQotdm9pZCBPdXRwdXRITFNMOjpvdXRwdXQoKQotewotICAgIG1Db250YWluc0xvb3BE
aXNjb250aW51aXR5ID0gbUNvbnRleHQuc2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIg
JiYgY29udGFpbnNMb29wRGlzY29udGludWl0eShtQ29udGV4dC50cmVlUm9vdCk7Ci0KLSAgICBt
Q29udGV4dC50cmVlUm9vdC0+dHJhdmVyc2UodGhpcyk7ICAgLy8gT3V0cHV0IHRoZSBib2R5IGZp
cnN0IHRvIGRldGVybWluZSB3aGF0IGhhcyB0byBnbyBpbiB0aGUgaGVhZGVyCi0gICAgaGVhZGVy
KCk7Ci0KLSAgICBtQ29udGV4dC5pbmZvU2luaygpLm9iaiA8PCBtSGVhZGVyLmNfc3RyKCk7Ci0g
ICAgbUNvbnRleHQuaW5mb1NpbmsoKS5vYmogPDwgbUJvZHkuY19zdHIoKTsKLX0KLQotVEluZm9T
aW5rQmFzZSAmT3V0cHV0SExTTDo6Z2V0Qm9keVN0cmVhbSgpCi17Ci0gICAgcmV0dXJuIG1Cb2R5
OwotfQotCi1jb25zdCBBY3RpdmVVbmlmb3JtcyAmT3V0cHV0SExTTDo6Z2V0VW5pZm9ybXMoKQot
ewotICAgIHJldHVybiBtQWN0aXZlVW5pZm9ybXM7Ci19Ci0KLWludCBPdXRwdXRITFNMOjp2ZWN0
b3JTaXplKGNvbnN0IFRUeXBlICZ0eXBlKSBjb25zdAotewotICAgIGludCBlbGVtZW50U2l6ZSA9
IHR5cGUuaXNNYXRyaXgoKSA/IHR5cGUuZ2V0Tm9taW5hbFNpemUoKSA6IDE7Ci0gICAgaW50IGFy
cmF5U2l6ZSA9IHR5cGUuaXNBcnJheSgpID8gdHlwZS5nZXRBcnJheVNpemUoKSA6IDE7Ci0KLSAg
ICByZXR1cm4gZWxlbWVudFNpemUgKiBhcnJheVNpemU7Ci19Ci0KLXZvaWQgT3V0cHV0SExTTDo6
aGVhZGVyKCkKLXsKLSAgICBTaFNoYWRlclR5cGUgc2hhZGVyVHlwZSA9IG1Db250ZXh0LnNoYWRl
clR5cGU7Ci0gICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUhlYWRlcjsKLQotICAgIGZvciAoU3Ry
dWN0RGVjbGFyYXRpb25zOjppdGVyYXRvciBzdHJ1Y3REZWNsYXJhdGlvbiA9IG1TdHJ1Y3REZWNs
YXJhdGlvbnMuYmVnaW4oKTsgc3RydWN0RGVjbGFyYXRpb24gIT0gbVN0cnVjdERlY2xhcmF0aW9u
cy5lbmQoKTsgc3RydWN0RGVjbGFyYXRpb24rKykKLSAgICB7Ci0gICAgICAgIG91dCA8PCAqc3Ry
dWN0RGVjbGFyYXRpb247Ci0gICAgfQotCi0gICAgZm9yIChDb25zdHJ1Y3RvcnM6Oml0ZXJhdG9y
IGNvbnN0cnVjdG9yID0gbUNvbnN0cnVjdG9ycy5iZWdpbigpOyBjb25zdHJ1Y3RvciAhPSBtQ29u
c3RydWN0b3JzLmVuZCgpOyBjb25zdHJ1Y3RvcisrKQotICAgIHsKLSAgICAgICAgb3V0IDw8ICpj
b25zdHJ1Y3RvcjsKLSAgICB9Ci0KLSAgICBUU3RyaW5nIHVuaWZvcm1zOwotICAgIFRTdHJpbmcg
dmFyeWluZ3M7Ci0gICAgVFN0cmluZyBhdHRyaWJ1dGVzOwotCi0gICAgZm9yIChSZWZlcmVuY2Vk
U3ltYm9sczo6Y29uc3RfaXRlcmF0b3IgdW5pZm9ybSA9IG1SZWZlcmVuY2VkVW5pZm9ybXMuYmVn
aW4oKTsgdW5pZm9ybSAhPSBtUmVmZXJlbmNlZFVuaWZvcm1zLmVuZCgpOyB1bmlmb3JtKyspCi0g
ICAgewotICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IHVuaWZvcm0tPnNlY29uZC0+Z2V0VHlw
ZSgpOwotICAgICAgICBjb25zdCBUU3RyaW5nICZuYW1lID0gdW5pZm9ybS0+c2Vjb25kLT5nZXRT
eW1ib2woKTsKLQotICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCAm
JiBJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpICAgLy8gQWxzbyBkZWNsYXJlIHRoZSB0
ZXh0dXJlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBpbmRleCA9IHNhbXBsZXJSZWdpc3Rl
cihtUmVmZXJlbmNlZFVuaWZvcm1zW25hbWVdKTsKLQotICAgICAgICAgICAgdW5pZm9ybXMgKz0g
InVuaWZvcm0gU2FtcGxlclN0YXRlIHNhbXBsZXJfIiArIGRlY29yYXRlVW5pZm9ybShuYW1lLCB0
eXBlKSArIGFycmF5U3RyaW5nKHR5cGUpICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAiIDog
cmVnaXN0ZXIocyIgKyBzdHIoaW5kZXgpICsgIik7XG4iOwotCi0gICAgICAgICAgICB1bmlmb3Jt
cyArPSAidW5pZm9ybSAiICsgdGV4dHVyZVN0cmluZyh0eXBlKSArICIgdGV4dHVyZV8iICsgZGVj
b3JhdGVVbmlmb3JtKG5hbWUsIHR5cGUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICIgOiByZWdpc3Rlcih0IiArIHN0cihpbmRleCkgKyAiKTtcbiI7Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICB1bmlmb3JtcyAr
PSAidW5pZm9ybSAiICsgdHlwZVN0cmluZyh0eXBlKSArICIgIiArIGRlY29yYXRlVW5pZm9ybShu
YW1lLCB0eXBlKSArIGFycmF5U3RyaW5nKHR5cGUpICsgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAiIDogcmVnaXN0ZXIoIiArIHJlZ2lzdGVyU3RyaW5nKG1SZWZlcmVuY2VkVW5pZm9ybXNbbmFt
ZV0pICsgIik7XG4iOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChSZWZlcmVuY2VkU3lt
Ym9sczo6Y29uc3RfaXRlcmF0b3IgdmFyeWluZyA9IG1SZWZlcmVuY2VkVmFyeWluZ3MuYmVnaW4o
KTsgdmFyeWluZyAhPSBtUmVmZXJlbmNlZFZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAg
ewotICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IHZhcnlpbmctPnNlY29uZC0+Z2V0VHlwZSgp
OwotICAgICAgICBjb25zdCBUU3RyaW5nICZuYW1lID0gdmFyeWluZy0+c2Vjb25kLT5nZXRTeW1i
b2woKTsKLQotICAgICAgICAvLyBQcm9ncmFtIGxpbmtpbmcgZGVwZW5kcyBvbiB0aGlzIGV4YWN0
IGZvcm1hdAotICAgICAgICB2YXJ5aW5ncyArPSAic3RhdGljICIgKyB0eXBlU3RyaW5nKHR5cGUp
ICsgIiAiICsgZGVjb3JhdGUobmFtZSkgKyBhcnJheVN0cmluZyh0eXBlKSArICIgPSAiICsgaW5p
dGlhbGl6ZXIodHlwZSkgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICBmb3IgKFJlZmVyZW5jZWRTeW1i
b2xzOjpjb25zdF9pdGVyYXRvciBhdHRyaWJ1dGUgPSBtUmVmZXJlbmNlZEF0dHJpYnV0ZXMuYmVn
aW4oKTsgYXR0cmlidXRlICE9IG1SZWZlcmVuY2VkQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRl
KyspCi0gICAgewotICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IGF0dHJpYnV0ZS0+c2Vjb25k
LT5nZXRUeXBlKCk7Ci0gICAgICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSBhdHRyaWJ1dGUtPnNl
Y29uZC0+Z2V0U3ltYm9sKCk7Ci0KLSAgICAgICAgYXR0cmlidXRlcyArPSAic3RhdGljICIgKyB0
eXBlU3RyaW5nKHR5cGUpICsgIiAiICsgZGVjb3JhdGUobmFtZSkgKyBhcnJheVN0cmluZyh0eXBl
KSArICIgPSAiICsgaW5pdGlhbGl6ZXIodHlwZSkgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAo
bVVzZXNEaXNjYXJkUmV3cml0aW5nKQotICAgIHsKLSAgICAgICAgb3V0IDw8ICIjZGVmaW5lIEFO
R0xFX1VTRVNfRElTQ0FSRF9SRVdSSVRJTkciIDw8ICJcbiI7Ci0gICAgfQotCi0gICAgaWYgKHNo
YWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKQotICAgIHsKLSAgICAgICAgVEV4dGVuc2lv
bkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbUNvbnRleHQuZXh0ZW5zaW9uQmVoYXZp
b3IoKS5maW5kKCJHTF9FWFRfZHJhd19idWZmZXJzIik7Ci0gICAgICAgIGNvbnN0IGJvb2wgdXNp
bmdNUlRFeHRlbnNpb24gPSAoaXRlciAhPSBtQ29udGV4dC5leHRlbnNpb25CZWhhdmlvcigpLmVu
ZCgpICYmIChpdGVyLT5zZWNvbmQgPT0gRUJoRW5hYmxlIHx8IGl0ZXItPnNlY29uZCA9PSBFQmhS
ZXF1aXJlKSk7Ci0KLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG51bUNvbG9yVmFsdWVzID0g
dXNpbmdNUlRFeHRlbnNpb24gPyBtTnVtUmVuZGVyVGFyZ2V0cyA6IDE7Ci0KLSAgICAgICAgb3V0
IDw8ICIvLyBWYXJ5aW5nc1xuIjsKLSAgICAgICAgb3V0IDw8ICB2YXJ5aW5nczsKLSAgICAgICAg
b3V0IDw8ICJcbiIKLSAgICAgICAgICAgICAgICJzdGF0aWMgZmxvYXQ0IGdsX0NvbG9yWyIgPDwg
bnVtQ29sb3JWYWx1ZXMgPDwgIl0gPVxuIgotICAgICAgICAgICAgICAgIntcbiI7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtQ29sb3JWYWx1ZXM7IGkrKykKLSAgICAg
ICAgewotICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQ0KDAsIDAsIDAsIDApIjsKLSAgICAg
ICAgICAgIGlmIChpICsgMSAhPSBudW1Db2xvclZhbHVlcykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBvdXQgPDwgIiwiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgb3V0IDw8
ICJcbiI7Ci0gICAgICAgIH0KLSAgICAgICAgb3V0IDw8ICJ9O1xuIjsKLQotICAgICAgICBpZiAo
bVVzZXNGcmFnRGVwdGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGZs
b2F0IGdsX0RlcHRoID0gMC4wO1xuIjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtVXNlc0Zy
YWdDb29yZCkKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgZmxvYXQ0IGds
X0ZyYWdDb29yZCA9IGZsb2F0NCgwLCAwLCAwLCAwKTtcbiI7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAobVVzZXNQb2ludENvb3JkKQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgInN0
YXRpYyBmbG9hdDIgZ2xfUG9pbnRDb29yZCA9IGZsb2F0MigwLjUsIDAuNSk7XG4iOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKG1Vc2VzRnJvbnRGYWNpbmcpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG91dCA8PCAic3RhdGljIGJvb2wgZ2xfRnJvbnRGYWNpbmcgPSBmYWxzZTtcbiI7Ci0gICAg
ICAgIH0KLQotICAgICAgICBvdXQgPDwgIlxuIjsKLQotICAgICAgICBpZiAobVVzZXNEZXB0aFJh
bmdlKQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgInN0cnVjdCBnbF9EZXB0aFJhbmdl
UGFyYW1ldGVyc1xuIgotICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAg
ICAgIiAgICBmbG9hdCBuZWFyO1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZmFy
O1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZGlmZjtcbiIKLSAgICAgICAgICAg
ICAgICAgICAifTtcbiIKLSAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG91dCA8PCAiY2J1ZmZlciBEcml2ZXJDb25zdGFudHMgOiByZWdpc3RlcihiMSlc
biIKLSAgICAgICAgICAgICAgICAgICAie1xuIjsKLQotICAgICAgICAgICAgaWYgKG1Vc2VzRGVw
dGhSYW5nZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9h
dDMgZHhfRGVwdGhSYW5nZSA6IHBhY2tvZmZzZXQoYzApO1xuIjsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKG1Vc2VzRnJhZ0Nvb3JkKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG91dCA8PCAiICAgIGZsb2F0NCBkeF9WaWV3Q29vcmRzIDogcGFja29mZnNldChjMSk7
XG4iOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobVVzZXNGcmFnQ29vcmQgfHwg
bVVzZXNGcm9udEZhY2luZykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwg
IiAgICBmbG9hdDMgZHhfRGVwdGhGcm9udCA6IHBhY2tvZmZzZXQoYzIpO1xuIjsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgb3V0IDw8ICJ9O1xuIjsKLSAgICAgICAgfQotICAgICAgICBl
bHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtVXNlc0RlcHRoUmFuZ2UpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJ1bmlmb3JtIGZsb2F0MyBkeF9EZXB0aFJh
bmdlIDogcmVnaXN0ZXIoYzApOyI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICht
VXNlc0ZyYWdDb29yZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgInVu
aWZvcm0gZmxvYXQ0IGR4X1ZpZXdDb29yZHMgOiByZWdpc3RlcihjMSk7XG4iOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAobVVzZXNGcmFnQ29vcmQgfHwgbVVzZXNGcm9udEZhY2lu
ZykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgInVuaWZvcm0gZmxvYXQz
IGR4X0RlcHRoRnJvbnQgOiByZWdpc3RlcihjMik7XG4iOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgb3V0IDw8ICJcbiI7Ci0KLSAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5n
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgZ2xfRGVwdGhSYW5nZVBh
cmFtZXRlcnMgZ2xfRGVwdGhSYW5nZSA9IHtkeF9EZXB0aFJhbmdlLngsIGR4X0RlcHRoUmFuZ2Uu
eSwgZHhfRGVwdGhSYW5nZS56fTtcbiIKLSAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBvdXQgPDwgIHVuaWZvcm1zOwotICAgICAgICBvdXQgPDwg
IlxuIjsKLQotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKHNhbXBsZXIyRCBzLCBm
bG9hdDIgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gdGV4MkQocywgdCk7XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChU
ZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MiB1dilcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1w
bGUocywgdXYpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAg
ICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEX2JpYXMpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVy
ZTJEKHNhbXBsZXIyRCBzLCBmbG9hdDIgdCwgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRi
aWFzKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgYmlhcykpO1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQo
VGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDIgdXYsIGZsb2F0IGJpYXMpXG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAg
cmV0dXJuIHQuU2FtcGxlQmlhcyhzLCB1diwgYmlhcyk7XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
bVVzZXNUZXh0dXJlMkRQcm9qKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5
cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91
dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0MyB0KVxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0ZXgyRHByb2oocywgZmxvYXQ0KHQueCwgdC55LCAwLCB0LnopKTtcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMs
IGZsb2F0NCB0KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAg
ICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRHByb2oocywgdCk7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVU
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1
cmUyRFByb2ooVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3KVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0LlNhbXBsZShzLCBmbG9hdDIodXZ3LnggLyB1dncueiwgdXZ3LnkgLyB1dncueikpO1xu
IgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihUZXh0
dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0NCB1dncpXG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxl
KHMsIGZsb2F0Mih1dncueCAvIHV2dy53LCB1dncueSAvIHV2dy53KSk7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAobVVzZXNUZXh0dXJlMkRQcm9qX2JpYXMpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywg
ZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEYmlhcyhzLCBmbG9hdDQodC54
IC8gdC56LCB0LnkgLyB0LnosIDAsIGJpYXMpKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
In1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICAg
ICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0NCB0LCBmbG9hdCBi
aWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53
LCAwLCBiaWFzKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICht
T3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVyZTJEIHQsIFNhbXBs
ZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUJp
YXMocywgZmxvYXQyKHV2dy54IC8gdXZ3LnosIHV2dy55IC8gdXZ3LnopLCBiaWFzKTtcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVyZTJE
IHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAg
ICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0
LlNhbXBsZUJpYXMocywgZmxvYXQyKHV2dy54IC8gdXZ3LncsIHV2dy55IC8gdXZ3LncpLCBiaWFz
KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmVDdWJlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlKHNhbXBs
ZXJDVUJFIHMsIGZsb2F0MyB0KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFKHMsIHQpO1xuIgotICAgICAg
ICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDEx
X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBn
bF90ZXh0dXJlQ3ViZShUZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dylc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IiAgICByZXR1cm4gdC5TYW1wbGUocywgdXZ3KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
In1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtVXNl
c1RleHR1cmVDdWJlX2JpYXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtT3V0cHV0VHlw
ZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0
IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQsIGZsb2F0
IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHRleENVQkViaWFzKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCBi
aWFzKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0
VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlKFRleHR1cmVDdWJlIHQsIFNhbXBsZXJTdGF0
ZSBzLCBmbG9hdDMgdXZ3LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
e1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUJpYXMocywg
dXZ3LCBiaWFzKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRoZXNlICpMb2QwIGludHJpbnNpY3Mg
YXJlIG5vdCBhdmFpbGFibGUgaW4gR0wgZnJhZ21lbnQgc2hhZGVycy4KLSAgICAgICAgLy8gVGhl
eSBhcmUgdXNlZCB0byBzYW1wbGUgdXNpbmcgZGlzY29udGludW91cyB0ZXh0dXJlIGNvb3JkaW5h
dGVzLgotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRMb2QwKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoc2FtcGxlcjJE
IHMsIGZsb2F0MiB0KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCB0LnksIDAs
IDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRU
eXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
b3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kMChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRl
IHMsIGZsb2F0MiB1dilcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1diwgMCk7XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kMChzYW1w
bGVyMkQgcywgZmxvYXQyIHQsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZs
b2F0NCh0LngsIHQueSwgMCwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRMb2QwKFRleHR1cmUy
RCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAg
ICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0
LlNhbXBsZUxldmVsKHMsIHV2LCAwKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtVXNlc1RleHR1
cmUyRFByb2pMb2QwKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0g
U0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAi
ZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwKHNhbXBsZXIyRCBzLCBmbG9hdDMgdClcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCAwKSk7XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kKHNh
bXBsZXIyRCBzLCBmbG9hdDQgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAv
IHQudywgdC55IC8gdC53LCAwLCAwKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwKFRl
eHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dylcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1w
bGVMZXZlbChzLCBmbG9hdDIodXZ3LnggLyB1dncueiwgdXZ3LnkgLyB1dncueiksIDApO1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZDAoVGV4
dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3KVxuIgotICAgICAgICAgICAgICAg
ICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBs
ZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy53LCB1dncueSAvIHV2dy53KSwgMCk7XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pM
b2QwX2JpYXMoc2FtcGxlcjJEIHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAg
ICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0
ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC56LCB0LnkgLyB0LnosIDAsIDApKTtcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2RfYmlhcyhzYW1w
bGVyMkQgcywgZmxvYXQ0IHQsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZs
b2F0NCh0LnggLyB0LncsIHQueSAvIHQudywgMCwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQ
cm9qTG9kX2JpYXMoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3LCBmbG9h
dCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy56
LCB1dncueSAvIHV2dy56KSwgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0
NCBnbF90ZXh0dXJlMkRQcm9qTG9kX2JpYXMoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBm
bG9hdDQgdXZ3LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0
Mih1dncueCAvIHV2dy53LCB1dncueSAvIHV2dy53KSwgMCk7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAobVVzZXNUZXh0dXJlQ3ViZUxvZDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtT3V0
cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmVMb2QwKHNhbXBsZXJDVUJFIHMsIGZsb2F0
MyB0KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0ZXhDVUJFbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCAwKSk7
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9
PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8
PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChUZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUg
cywgZmxvYXQzIHV2dylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1dncsIDApO1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4i
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXMpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmVMb2Qw
KHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAg
ICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJF
bG9kKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCAwKSk7XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJl
TG9kMChUZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQgYmlh
cylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1dncsIDApO1xuIgotICAgICAgICAgICAg
ICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKHVzaW5nTVJURXh0ZW5zaW9uICYmIG1OdW1SZW5kZXJUYXJnZXRzID4gMSkKLSAgICAg
ICAgewotICAgICAgICAgICAgb3V0IDw8ICIjZGVmaW5lIEdMX1VTRVNfTVJUXG4iOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKG1Vc2VzRnJhZ0NvbG9yKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBvdXQgPDwgIiNkZWZpbmUgR0xfVVNFU19GUkFHX0NPTE9SXG4iOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKG1Vc2VzRnJhZ0RhdGEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAi
I2RlZmluZSBHTF9VU0VTX0ZSQUdfREFUQVxuIjsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNl
ICAgLy8gVmVydGV4IHNoYWRlcgotICAgIHsKLSAgICAgICAgb3V0IDw8ICIvLyBBdHRyaWJ1dGVz
XG4iOwotICAgICAgICBvdXQgPDwgIGF0dHJpYnV0ZXM7Ci0gICAgICAgIG91dCA8PCAiXG4iCi0g
ICAgICAgICAgICAgICAic3RhdGljIGZsb2F0NCBnbF9Qb3NpdGlvbiA9IGZsb2F0NCgwLCAwLCAw
LCAwKTtcbiI7Ci0gICAgICAgIAotICAgICAgICBpZiAobVVzZXNQb2ludFNpemUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGZsb2F0IGdsX1BvaW50U2l6ZSA9IGZsb2F0
KDEpO1xuIjsKLSAgICAgICAgfQotCi0gICAgICAgIG91dCA8PCAiXG4iCi0gICAgICAgICAgICAg
ICAiLy8gVmFyeWluZ3NcbiI7Ci0gICAgICAgIG91dCA8PCAgdmFyeWluZ3M7Ci0gICAgICAgIG91
dCA8PCAiXG4iOwotCi0gICAgICAgIGlmIChtVXNlc0RlcHRoUmFuZ2UpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG91dCA8PCAic3RydWN0IGdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJzXG4iCi0gICAg
ICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IG5lYXI7
XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBmYXI7XG4iCi0gICAgICAgICAgICAg
ICAgICAgIiAgICBmbG9hdCBkaWZmO1xuIgotICAgICAgICAgICAgICAgICAgICJ9O1xuIgotICAg
ICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobU91dHB1dFR5
cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1Vc2Vz
RGVwdGhSYW5nZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImNidWZm
ZXIgRHJpdmVyQ29uc3RhbnRzIDogcmVnaXN0ZXIoYjEpXG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQzIGR4X0RlcHRoUmFu
Z2UgOiBwYWNrb2Zmc2V0KGMwKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn07XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobVVzZXNEZXB0aFJhbmdlKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAidW5pZm9ybSBmbG9hdDMgZHhf
RGVwdGhSYW5nZSA6IHJlZ2lzdGVyKGMwKTtcbiI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIG91dCA8PCAidW5pZm9ybSBmbG9hdDQgZHhfVmlld0FkanVzdCA6IHJlZ2lzdGVyKGMxKTtc
biIKLSAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1V
c2VzRGVwdGhSYW5nZSkKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgZ2xf
RGVwdGhSYW5nZVBhcmFtZXRlcnMgZ2xfRGVwdGhSYW5nZSA9IHtkeF9EZXB0aFJhbmdlLngsIGR4
X0RlcHRoUmFuZ2UueSwgZHhfRGVwdGhSYW5nZS56fTtcbiIKLSAgICAgICAgICAgICAgICAgICAi
XG4iOwotICAgICAgICB9Ci0KLSAgICAgICAgb3V0IDw8IHVuaWZvcm1zOwotICAgICAgICBvdXQg
PDwgIlxuIjsKLSAgICAgICAgCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmUyRCkKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoc2Ft
cGxlcjJEIHMsIGZsb2F0MiB0KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCB0
LnksIDAsIDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1P
dXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKFRleHR1cmUyRCB0LCBTYW1wbGVyU3Rh
dGUgcywgZmxvYXQyIHV2KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIHV2LCAwKTtcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxu
IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExvZCkKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRMb2Qoc2FtcGxlcjJE
IHMsIGZsb2F0MiB0LCBmbG9hdCBsb2QpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0
LngsIHQueSwgMCwgbG9kKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
IGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZChUZXh0dXJlMkQgdCwg
U2FtcGxlclN0YXRlIHMsIGZsb2F0MiB1diwgZmxvYXQgbG9kKVxuIgotICAgICAgICAgICAgICAg
ICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBs
ZUxldmVsKHMsIHV2LCBsb2QpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxz
ZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJE
UHJvaikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5
X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBn
bF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDMgdClcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRs
b2QocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCAwKSk7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9h
dDQgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53
LCAwLCAwKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0
cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVyZTJEIHQsIFNhbXBsZXJT
dGF0ZSBzLCBmbG9hdDMgdXZ3KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1
dncueCAvIHV2dy56LCB1dncueSAvIHV2dy56KSwgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUg
cywgZmxvYXQ0IHV2dylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIodXZ3Lngg
LyB1dncudywgdXZ3LnkgLyB1dncudyksIDApO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAi
fVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1Vc2Vz
VGV4dHVyZTJEUHJvakxvZCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBl
ID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQg
PDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBzLCBmbG9hdDMgdCwgZmxv
YXQgbG9kKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC56LCB0LnkgLyB0
LnosIDAsIGxvZCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAg
ICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4
dHVyZTJEUHJvakxvZChzYW1wbGVyMkQgcywgZmxvYXQ0IHQsIGZsb2F0IGxvZClcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53LCAwLCBsb2QpKTtcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxu
IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNI
X0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJm
bG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0
MyB1dncsIGZsb2F0IGxvZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIodXZ3
LnggLyB1dncueiwgdXZ3LnkgLyB1dncueiksIGxvZCk7XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUg
cywgZmxvYXQ0IHV2dylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIodXZ3Lngg
LyB1dncudywgdXZ3LnkgLyB1dncudyksIGxvZCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVVz
ZXNUZXh0dXJlQ3ViZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09
IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwg
ImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShzYW1wbGVyQ1VCRSBzLCBmbG9hdDMgdClcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdGV4Q1VCRWxvZChzLCBmbG9hdDQodC54LCB0LnksIHQueiwgMCkpO1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09V
VFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90
ZXh0dXJlQ3ViZShUZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dylcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAg
ICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1dncsIDApO1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KG1Vc2VzVGV4dHVyZUN1YmVMb2QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtT3V0cHV0
VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
b3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmVMb2Qoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQs
IGZsb2F0IGxvZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRWxvZChzLCBmbG9hdDQodC54LCB0LnksIHQu
eiwgbG9kKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0
cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kKFRleHR1cmVDdWJlIHQsIFNhbXBs
ZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3LCBmbG9hdCBsb2QpXG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2
ZWwocywgdXZ3LCBsb2QpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAg
ICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBV
TlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1Vc2VzRnJhZ0Nvb3Jk
KQotICAgIHsKLSAgICAgICAgb3V0IDw8ICIjZGVmaW5lIEdMX1VTRVNfRlJBR19DT09SRFxuIjsK
LSAgICB9Ci0KLSAgICBpZiAobVVzZXNQb2ludENvb3JkKQotICAgIHsKLSAgICAgICAgb3V0IDw8
ICIjZGVmaW5lIEdMX1VTRVNfUE9JTlRfQ09PUkRcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1Vc2Vz
RnJvbnRGYWNpbmcpCi0gICAgewotICAgICAgICBvdXQgPDwgIiNkZWZpbmUgR0xfVVNFU19GUk9O
VF9GQUNJTkdcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1Vc2VzUG9pbnRTaXplKQotICAgIHsKLSAg
ICAgICAgb3V0IDw8ICIjZGVmaW5lIEdMX1VTRVNfUE9JTlRfU0laRVxuIjsKLSAgICB9Ci0KLSAg
ICBpZiAobVVzZXNGcmFnRGVwdGgpCi0gICAgewotICAgICAgICBvdXQgPDwgIiNkZWZpbmUgR0xf
VVNFU19GUkFHX0RFUFRIXG4iOwotICAgIH0KLQotICAgIGlmIChtVXNlc0RlcHRoUmFuZ2UpCi0g
ICAgewotICAgICAgICBvdXQgPDwgIiNkZWZpbmUgR0xfVVNFU19ERVBUSF9SQU5HRVxuIjsKLSAg
ICB9Ci0KLSAgICBpZiAobVVzZXNYb3IpCi0gICAgewotICAgICAgICBvdXQgPDwgImJvb2wgeG9y
KGJvb2wgcCwgYm9vbCBxKVxuIgotICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIChwIHx8IHEpICYmICEocCAmJiBxKTtcbiIKLSAgICAgICAgICAgICAgICJ9
XG4iCi0gICAgICAgICAgICAgICAiXG4iOwotICAgIH0KLQotICAgIGlmIChtVXNlc01vZDEpCi0g
ICAgewotICAgICAgICBvdXQgPDwgImZsb2F0IG1vZChmbG9hdCB4LCBmbG9hdCB5KVxuIgotICAg
ICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHggLSB5ICogZmxv
b3IoeCAvIHkpO1xuIgotICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICJcbiI7
Ci0gICAgfQotCi0gICAgaWYgKG1Vc2VzTW9kMnYpCi0gICAgewotICAgICAgICBvdXQgPDwgImZs
b2F0MiBtb2QoZmxvYXQyIHgsIGZsb2F0MiB5KVxuIgotICAgICAgICAgICAgICAgIntcbiIKLSAg
ICAgICAgICAgICAgICIgICAgcmV0dXJuIHggLSB5ICogZmxvb3IoeCAvIHkpO1xuIgotICAgICAg
ICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICJcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1V
c2VzTW9kMmYpCi0gICAgewotICAgICAgICBvdXQgPDwgImZsb2F0MiBtb2QoZmxvYXQyIHgsIGZs
b2F0IHkpXG4iCi0gICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgIiAgICByZXR1
cm4geCAtIHkgKiBmbG9vcih4IC8geSk7XG4iCi0gICAgICAgICAgICAgICAifVxuIgotICAgICAg
ICAgICAgICAgIlxuIjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1Vc2VzTW9kM3YpCi0gICAgewot
ICAgICAgICBvdXQgPDwgImZsb2F0MyBtb2QoZmxvYXQzIHgsIGZsb2F0MyB5KVxuIgotICAgICAg
ICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHggLSB5ICogZmxvb3Io
eCAvIHkpO1xuIgotICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICJcbiI7Ci0g
ICAgfQotCi0gICAgaWYgKG1Vc2VzTW9kM2YpCi0gICAgewotICAgICAgICBvdXQgPDwgImZsb2F0
MyBtb2QoZmxvYXQzIHgsIGZsb2F0IHkpXG4iCi0gICAgICAgICAgICAgICAie1xuIgotICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4geCAtIHkgKiBmbG9vcih4IC8geSk7XG4iCi0gICAgICAgICAg
ICAgICAifVxuIgotICAgICAgICAgICAgICAgIlxuIjsKLSAgICB9Ci0KLSAgICBpZiAobVVzZXNN
b2Q0dikKLSAgICB7Ci0gICAgICAgIG91dCA8PCAiZmxvYXQ0IG1vZChmbG9hdDQgeCwgZmxvYXQ0
IHkpXG4iCi0gICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgIiAgICByZXR1cm4g
eCAtIHkgKiBmbG9vcih4IC8geSk7XG4iCi0gICAgICAgICAgICAgICAifVxuIgotICAgICAgICAg
ICAgICAgIlxuIjsKLSAgICB9Ci0KLSAgICBpZiAobVVzZXNNb2Q0ZikKLSAgICB7Ci0gICAgICAg
IG91dCA8PCAiZmxvYXQ0IG1vZChmbG9hdDQgeCwgZmxvYXQgeSlcbiIKLSAgICAgICAgICAgICAg
ICJ7XG4iCi0gICAgICAgICAgICAgICAiICAgIHJldHVybiB4IC0geSAqIGZsb29yKHggLyB5KTtc
biIKLSAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAiXG4iOwotICAgIH0KLQot
ICAgIGlmIChtVXNlc0ZhY2Vmb3J3YXJkMSkKLSAgICB7Ci0gICAgICAgIG91dCA8PCAiZmxvYXQg
ZmFjZWZvcndhcmQoZmxvYXQgTiwgZmxvYXQgSSwgZmxvYXQgTnJlZilcbiIKLSAgICAgICAgICAg
ICAgICJ7XG4iCi0gICAgICAgICAgICAgICAiICAgIGlmKGRvdChOcmVmLCBJKSA+PSAwKVxuIgot
ICAgICAgICAgICAgICAgIiAgICB7XG4iCi0gICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4g
LU47XG4iCi0gICAgICAgICAgICAgICAiICAgIH1cbiIKLSAgICAgICAgICAgICAgICIgICAgZWxz
ZVxuIgotICAgICAgICAgICAgICAgIiAgICB7XG4iCi0gICAgICAgICAgICAgICAiICAgICAgICBy
ZXR1cm4gTjtcbiIKLSAgICAgICAgICAgICAgICIgICAgfVxuIgotICAgICAgICAgICAgICAgIn1c
biIKLSAgICAgICAgICAgICAgICJcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1Vc2VzRmFjZWZvcndh
cmQyKQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJmbG9hdDIgZmFjZWZvcndhcmQoZmxvYXQyIE4s
IGZsb2F0MiBJLCBmbG9hdDIgTnJlZilcbiIKLSAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAg
ICAgICAgICAiICAgIGlmKGRvdChOcmVmLCBJKSA+PSAwKVxuIgotICAgICAgICAgICAgICAgIiAg
ICB7XG4iCi0gICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gLU47XG4iCi0gICAgICAgICAg
ICAgICAiICAgIH1cbiIKLSAgICAgICAgICAgICAgICIgICAgZWxzZVxuIgotICAgICAgICAgICAg
ICAgIiAgICB7XG4iCi0gICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gTjtcbiIKLSAgICAg
ICAgICAgICAgICIgICAgfVxuIgotICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAg
ICJcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1Vc2VzRmFjZWZvcndhcmQzKQotICAgIHsKLSAgICAg
ICAgb3V0IDw8ICJmbG9hdDMgZmFjZWZvcndhcmQoZmxvYXQzIE4sIGZsb2F0MyBJLCBmbG9hdDMg
TnJlZilcbiIKLSAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAiICAgIGlmKGRv
dChOcmVmLCBJKSA+PSAwKVxuIgotICAgICAgICAgICAgICAgIiAgICB7XG4iCi0gICAgICAgICAg
ICAgICAiICAgICAgICByZXR1cm4gLU47XG4iCi0gICAgICAgICAgICAgICAiICAgIH1cbiIKLSAg
ICAgICAgICAgICAgICIgICAgZWxzZVxuIgotICAgICAgICAgICAgICAgIiAgICB7XG4iCi0gICAg
ICAgICAgICAgICAiICAgICAgICByZXR1cm4gTjtcbiIKLSAgICAgICAgICAgICAgICIgICAgfVxu
IgotICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICJcbiI7Ci0gICAgfQotCi0g
ICAgaWYgKG1Vc2VzRmFjZWZvcndhcmQ0KQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJmbG9hdDQg
ZmFjZWZvcndhcmQoZmxvYXQ0IE4sIGZsb2F0NCBJLCBmbG9hdDQgTnJlZilcbiIKLSAgICAgICAg
ICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAiICAgIGlmKGRvdChOcmVmLCBJKSA+PSAwKVxu
IgotICAgICAgICAgICAgICAgIiAgICB7XG4iCi0gICAgICAgICAgICAgICAiICAgICAgICByZXR1
cm4gLU47XG4iCi0gICAgICAgICAgICAgICAiICAgIH1cbiIKLSAgICAgICAgICAgICAgICIgICAg
ZWxzZVxuIgotICAgICAgICAgICAgICAgIiAgICB7XG4iCi0gICAgICAgICAgICAgICAiICAgICAg
ICByZXR1cm4gTjtcbiIKLSAgICAgICAgICAgICAgICIgICAgfVxuIgotICAgICAgICAgICAgICAg
In1cbiIKLSAgICAgICAgICAgICAgICJcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1Vc2VzQXRhbjJf
MSkKLSAgICB7Ci0gICAgICAgIG91dCA8PCAiZmxvYXQgYXRhbnl4KGZsb2F0IHksIGZsb2F0IHgp
XG4iCi0gICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgIiAgICBpZih4ID09IDAg
JiYgeSA9PSAwKSB4ID0gMTtcbiIgICAvLyBBdm9pZCBwcm9kdWNpbmcgYSBOYU4KLSAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIGF0YW4yKHksIHgpO1xuIgotICAgICAgICAgICAgICAgIn1cbiI7
Ci0gICAgfQotCi0gICAgaWYgKG1Vc2VzQXRhbjJfMikKLSAgICB7Ci0gICAgICAgIG91dCA8PCAi
ZmxvYXQyIGF0YW55eChmbG9hdDIgeSwgZmxvYXQyIHgpXG4iCi0gICAgICAgICAgICAgICAie1xu
IgotICAgICAgICAgICAgICAgIiAgICBpZih4WzBdID09IDAgJiYgeVswXSA9PSAwKSB4WzBdID0g
MTtcbiIKLSAgICAgICAgICAgICAgICIgICAgaWYoeFsxXSA9PSAwICYmIHlbMV0gPT0gMCkgeFsx
XSA9IDE7XG4iCi0gICAgICAgICAgICAgICAiICAgIHJldHVybiBmbG9hdDIoYXRhbjIoeVswXSwg
eFswXSksIGF0YW4yKHlbMV0sIHhbMV0pKTtcbiIKLSAgICAgICAgICAgICAgICJ9XG4iOwotICAg
IH0KLQotICAgIGlmIChtVXNlc0F0YW4yXzMpCi0gICAgewotICAgICAgICBvdXQgPDwgImZsb2F0
MyBhdGFueXgoZmxvYXQzIHksIGZsb2F0MyB4KVxuIgotICAgICAgICAgICAgICAgIntcbiIKLSAg
ICAgICAgICAgICAgICIgICAgaWYoeFswXSA9PSAwICYmIHlbMF0gPT0gMCkgeFswXSA9IDE7XG4i
Ci0gICAgICAgICAgICAgICAiICAgIGlmKHhbMV0gPT0gMCAmJiB5WzFdID09IDApIHhbMV0gPSAx
O1xuIgotICAgICAgICAgICAgICAgIiAgICBpZih4WzJdID09IDAgJiYgeVsyXSA9PSAwKSB4WzJd
ID0gMTtcbiIKLSAgICAgICAgICAgICAgICIgICAgcmV0dXJuIGZsb2F0MyhhdGFuMih5WzBdLCB4
WzBdKSwgYXRhbjIoeVsxXSwgeFsxXSksIGF0YW4yKHlbMl0sIHhbMl0pKTtcbiIKLSAgICAgICAg
ICAgICAgICJ9XG4iOwotICAgIH0KLQotICAgIGlmIChtVXNlc0F0YW4yXzQpCi0gICAgewotICAg
ICAgICBvdXQgPDwgImZsb2F0NCBhdGFueXgoZmxvYXQ0IHksIGZsb2F0NCB4KVxuIgotICAgICAg
ICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICIgICAgaWYoeFswXSA9PSAwICYmIHlbMF0g
PT0gMCkgeFswXSA9IDE7XG4iCi0gICAgICAgICAgICAgICAiICAgIGlmKHhbMV0gPT0gMCAmJiB5
WzFdID09IDApIHhbMV0gPSAxO1xuIgotICAgICAgICAgICAgICAgIiAgICBpZih4WzJdID09IDAg
JiYgeVsyXSA9PSAwKSB4WzJdID0gMTtcbiIKLSAgICAgICAgICAgICAgICIgICAgaWYoeFszXSA9
PSAwICYmIHlbM10gPT0gMCkgeFszXSA9IDE7XG4iCi0gICAgICAgICAgICAgICAiICAgIHJldHVy
biBmbG9hdDQoYXRhbjIoeVswXSwgeFswXSksIGF0YW4yKHlbMV0sIHhbMV0pLCBhdGFuMih5WzJd
LCB4WzJdKSwgYXRhbjIoeVszXSwgeFszXSkpO1xuIgotICAgICAgICAgICAgICAgIn1cbiI7Ci0g
ICAgfQotfQotCi12b2lkIE91dHB1dEhMU0w6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wgKm5v
ZGUpCi17Ci0gICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7Ci0KLSAgICBUU3RyaW5nIG5h
bWUgPSBub2RlLT5nZXRTeW1ib2woKTsKLQotICAgIGlmIChuYW1lID09ICJnbF9GcmFnQ29sb3Ii
KQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJnbF9Db2xvclswXSI7Ci0gICAgICAgIG1Vc2VzRnJh
Z0NvbG9yID0gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfRnJhZ0RhdGEi
KQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJnbF9Db2xvciI7Ci0gICAgICAgIG1Vc2VzRnJhZ0Rh
dGEgPSB0cnVlOwotICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9EZXB0aFJhbmdlIikK
LSAgICB7Ci0gICAgICAgIG1Vc2VzRGVwdGhSYW5nZSA9IHRydWU7Ci0gICAgICAgIG91dCA8PCBu
YW1lOwotICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9GcmFnQ29vcmQiKQotICAgIHsK
LSAgICAgICAgbVVzZXNGcmFnQ29vcmQgPSB0cnVlOwotICAgICAgICBvdXQgPDwgbmFtZTsKLSAg
ICB9Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfUG9pbnRDb29yZCIpCi0gICAgewotICAgICAg
ICBtVXNlc1BvaW50Q29vcmQgPSB0cnVlOwotICAgICAgICBvdXQgPDwgbmFtZTsKLSAgICB9Ci0g
ICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfRnJvbnRGYWNpbmciKQotICAgIHsKLSAgICAgICAgbVVz
ZXNGcm9udEZhY2luZyA9IHRydWU7Ci0gICAgICAgIG91dCA8PCBuYW1lOwotICAgIH0KLSAgICBl
bHNlIGlmIChuYW1lID09ICJnbF9Qb2ludFNpemUiKQotICAgIHsKLSAgICAgICAgbVVzZXNQb2lu
dFNpemUgPSB0cnVlOwotICAgICAgICBvdXQgPDwgbmFtZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAo
bmFtZSA9PSAiZ2xfRnJhZ0RlcHRoRVhUIikKLSAgICB7Ci0gICAgICAgIG1Vc2VzRnJhZ0RlcHRo
ID0gdHJ1ZTsKLSAgICAgICAgb3V0IDw8ICJnbF9EZXB0aCI7Ci0gICAgfQotICAgIGVsc2UKLSAg
ICB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gbm9kZS0+Z2V0UXVhbGlmaWVyKCk7
Ci0KLSAgICAgICAgaWYgKHF1YWxpZmllciA9PSBFdnFVbmlmb3JtKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBtUmVmZXJlbmNlZFVuaWZvcm1zW25hbWVdID0gbm9kZTsKLSAgICAgICAgICAgIG91
dCA8PCBkZWNvcmF0ZVVuaWZvcm0obmFtZSwgbm9kZS0+Z2V0VHlwZSgpKTsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtUmVmZXJlbmNlZEF0dHJpYnV0ZXNbbmFtZV0gPSBub2RlOwotICAgICAgICAg
ICAgb3V0IDw8IGRlY29yYXRlKG5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHF1
YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8IHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5
aW5nT3V0IHx8IHF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgcXVhbGlmaWVyID09IEV2cUlu
dmFyaWFudFZhcnlpbmdJbikKLSAgICAgICAgewotICAgICAgICAgICAgbVJlZmVyZW5jZWRWYXJ5
aW5nc1tuYW1lXSA9IG5vZGU7Ci0gICAgICAgICAgICBvdXQgPDwgZGVjb3JhdGUobmFtZSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgZGVj
b3JhdGUobmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgT3V0cHV0SExTTDo6dmlz
aXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCi17Ci0gICAgVEluZm9T
aW5rQmFzZSAmb3V0ID0gbUJvZHk7Ci0KLSAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCi0gICAg
ewotICAgICAgY2FzZSBFT3BBc3NpZ246ICAgICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgIigiLCAiID0gIiwgIikiKTsgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BJ
bml0aWFsaXplOgotICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIC8vIEdMU0wgYWxsb3dzIHRvIHdyaXRlIHRoaW5ncyBsaWtlICJmbG9hdCB4ID0g
eDsiIHdoZXJlIGEgbmV3IHZhcmlhYmxlIHggaXMgZGVmaW5lZAotICAgICAgICAgICAgLy8gYW5k
IHRoZSB2YWx1ZSBvZiBhbiBleGlzdGluZyB2YXJpYWJsZSB4IGlzIGFzc2lnbmVkLiBITFNMIHVz
ZXMgQyBzZW1hbnRpY3MgKHRoZQotICAgICAgICAgICAgLy8gbmV3IHZhcmlhYmxlIGlzIGNyZWF0
ZWQgYmVmb3JlIHRoZSBhc3NpZ25tZW50IGlzIGV2YWx1YXRlZCksIHNvIHdlIG5lZWQgdG8gY29u
dmVydAotICAgICAgICAgICAgLy8gdGhpcyB0byAiZmxvYXQgdCA9IHgsIHggPSB0OyIuCi0KLSAg
ICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUgPSBub2RlLT5nZXRMZWZ0KCktPmdl
dEFzU3ltYm9sTm9kZSgpOwotICAgICAgICAgICAgVEludGVybVR5cGVkICpleHByZXNzaW9uID0g
bm9kZS0+Z2V0UmlnaHQoKTsKLQotICAgICAgICAgICAgc2g6OlNlYXJjaFN5bWJvbCBzZWFyY2hT
eW1ib2woc3ltYm9sTm9kZS0+Z2V0U3ltYm9sKCkpOwotICAgICAgICAgICAgZXhwcmVzc2lvbi0+
dHJhdmVyc2UoJnNlYXJjaFN5bWJvbCk7Ci0gICAgICAgICAgICBib29sIHNhbWVTeW1ib2wgPSBz
ZWFyY2hTeW1ib2wuZm91bmRNYXRjaCgpOwotCi0gICAgICAgICAgICBpZiAoc2FtZVN5bWJvbCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBUeXBlIGFscmVhZHkgcHJpbnRlZAot
ICAgICAgICAgICAgICAgIG91dCA8PCAidCIgKyBzdHIobVVuaXF1ZUluZGV4KSArICIgPSAiOwot
ICAgICAgICAgICAgICAgIGV4cHJlc3Npb24tPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAgICAg
ICAgIG91dCA8PCAiLCAiOwotICAgICAgICAgICAgICAgIHN5bWJvbE5vZGUtPnRyYXZlcnNlKHRo
aXMpOwotICAgICAgICAgICAgICAgIG91dCA8PCAiID0gdCIgKyBzdHIobVVuaXF1ZUluZGV4KTsK
LQotICAgICAgICAgICAgICAgIG1VbmlxdWVJbmRleCsrOwotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh2aXNp
dCA9PSBJblZpc2l0KQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgIiA9ICI7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcEFkZEFzc2lnbjogICAgICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgKz0gIiwgIikiKTsgICAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEVPcFN1YkFzc2lnbjogICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0
KHZpc2l0LCAiKCIsICIgLT0gIiwgIikiKTsgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVP
cE11bEFzc2lnbjogICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgKj0g
IiwgIikiKTsgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFy
QXNzaWduOiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgKj0gIiwgIikiKTsgICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOiBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiKCIsICIgKj0gIiwgIikiKTsgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOgotICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlz
aXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAiKCI7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCkKLSAgICAgICAgewotICAgICAgICAgICAgb3V0
IDw8ICIgPSBtdWwoIjsKLSAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhp
cyk7Ci0gICAgICAgICAgICBvdXQgPDwgIiwgdHJhbnNwb3NlKCI7ICAgCi0gICAgICAgIH0KLSAg
ICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgIikpKSI7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4QXNzaWdu
OgotICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG91dCA8PCAiKCI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNp
dCkKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICIgPSBtdWwoIjsKLSAgICAgICAgICAg
IG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICBvdXQgPDwgIiwg
IjsgICAKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91
dCA8PCAiKSkiOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BEaXZB
c3NpZ246ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIC89ICIsICIp
Iik7ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDogICAgICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIiIsICJbIiwgIl0iKTsgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgIiIsICJbIiwgIl0iKTsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BJ
bmRleERpcmVjdFN0cnVjdDoKLSAgICAgICAgaWYgKHZpc2l0ID09IEluVmlzaXQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG5vZGUtPmdldExl
ZnQoKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpOwotICAgICAgICAgICAgY29uc3QgVEludGVybUNv
bnN0YW50VW5pb24qIGluZGV4ID0gbm9kZS0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9u
KCk7Ci0gICAgICAgICAgICBjb25zdCBURmllbGQqIGZpZWxkID0gc3RydWN0dXJlLT5maWVsZHMo
KVtpbmRleC0+Z2V0SUNvbnN0KDApXTsKLSAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0
ZUZpZWxkKGZpZWxkLT5uYW1lKCksIG5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpKTsKLQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBFT3BWZWN0b3JTd2l6emxlOgotICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKLSAg
ICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICIuIjsKLQotICAgICAgICAgICAgVEludGVybUFn
Z3JlZ2F0ZSAqc3dpenpsZSA9IG5vZGUtPmdldFJpZ2h0KCktPmdldEFzQWdncmVnYXRlKCk7Ci0K
LSAgICAgICAgICAgIGlmIChzd2l6emxlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2UgPSBzd2l6emxlLT5nZXRTZXF1ZW5jZSgpOwotCi0g
ICAgICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNpdCA9IHNlcXVl
bmNlLmJlZ2luKCk7IHNpdCAhPSBzZXF1ZW5jZS5lbmQoKTsgc2l0KyspCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqZWxlbWVudCA9
ICgqc2l0KS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYg
KGVsZW1lbnQpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpID0gZWxlbWVudC0+Z2V0SUNvbnN0KDApOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKGkpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIDA6IG91dCA8PCAieCI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAxOiBvdXQgPDwgInkiOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgMjogb3V0IDw8ICJ6IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6
IG91dCA8PCAidyI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwot
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gRnVsbHkgcHJvY2Vzc2VkCi0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcEFkZDogICAgICAgICAgICAgICBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgKyAiLCAiKSIpOyBicmVhazsKLSAgICAgIGNhc2UgRU9w
U3ViOiAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAtICIsICIpIik7
IGJyZWFrOwotICAgICAgY2FzZSBFT3BNdWw6ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgIigiLCAiICogIiwgIikiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcERpdjogICAgICAg
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgLyAiLCAiKSIpOyBicmVhazsKLSAg
ICAgIGNhc2UgRU9wRXF1YWw6Ci0gICAgICBjYXNlIEVPcE5vdEVxdWFsOgotICAgICAgICBpZiAo
bm9kZS0+Z2V0TGVmdCgpLT5pc1NjYWxhcigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
bm9kZS0+Z2V0T3AoKSA9PSBFT3BFcXVhbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPT0gIiwgIikiKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiKCIsICIgIT0gIiwgIikiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRMZWZ0KCktPmdldEJhc2ljVHlwZSgpID09IEVi
dFN0cnVjdCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9w
RXF1YWwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIoIjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBvdXQgPDwgIiEoIjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29uc3QgVEZpZWxk
TGlzdCAmZmllbGRzID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCktPmZp
ZWxkcygpOwotCi0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpZWxkcy5zaXpl
KCk7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCBURmllbGQgKmZp
ZWxkID0gZmllbGRzW2ldOwotCi0gICAgICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2
ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3JhdGVGaWVsZChm
aWVsZC0+bmFtZSgpLCBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKSkgKyAiID09ICI7Ci0gICAg
ICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAg
ICAgICAgb3V0IDw8ICIuIiArIGRlY29yYXRlRmllbGQoZmllbGQtPm5hbWUoKSwgbm9kZS0+Z2V0
TGVmdCgpLT5nZXRUeXBlKCkpOwotCi0gICAgICAgICAgICAgICAgaWYgKGkgPCBmaWVsZHMuc2l6
ZSgpIC0gMSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG91dCA8PCAi
ICYmICI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBv
dXQgPDwgIikiOwotCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS0+Z2V0TGVmdCgpLT5p
c01hdHJpeCgpIHx8IG5vZGUtPmdldExlZnQoKS0+aXNWZWN0b3IoKSk7Ci0KLSAgICAgICAgICAg
IGlmIChub2RlLT5nZXRPcCgpID09IEVPcEVxdWFsKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJhbGwoIiwgIiA9PSAiLCAiKSIpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICIhYWxsKCIsICIgPT0gIiwgIikiKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wTGVzc1RoYW46ICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA8ICIsICIpIik7ICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOiAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIs
ICIgPiAiLCAiKSIpOyAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOiAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIDw9ICIsICIpIik7ICBicmVhazsKLSAgICAgIGNh
c2UgRU9wR3JlYXRlclRoYW5FcXVhbDogIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA+PSAi
LCAiKSIpOyAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyOiBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiKCIsICIgKiAiLCAiKSIpOyAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BN
YXRyaXhUaW1lc1NjYWxhcjogb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICogIiwgIikiKTsg
ICBicmVhazsKLSAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXg6IG91dHB1dFRyaXBsZXQo
dmlzaXQsICJtdWwoIiwgIiwgdHJhbnNwb3NlKCIsICIpKSIpOyBicmVhazsKLSAgICAgIGNhc2Ug
RU9wTWF0cml4VGltZXNWZWN0b3I6IG91dHB1dFRyaXBsZXQodmlzaXQsICJtdWwodHJhbnNwb3Nl
KCIsICIpLCAiLCAiKSIpOyBicmVhazsKLSAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXg6
IG91dHB1dFRyaXBsZXQodmlzaXQsICJ0cmFuc3Bvc2UobXVsKHRyYW5zcG9zZSgiLCAiKSwgdHJh
bnNwb3NlKCIsICIpKSkiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcExvZ2ljYWxPcjoKLSAgICAg
ICAgaWYgKG5vZGUtPmdldFJpZ2h0KCktPmhhc1NpZGVFZmZlY3RzKCkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG91dCA8PCAicyIgPDwgbVVuZm9sZFNob3J0Q2lyY3VpdC0+Z2V0TmV4dFRlbXBv
cmFyeUluZGV4KCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwg
IiB8fCAiLCAiKSIpOwotICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAg
Y2FzZSBFT3BMb2dpY2FsWG9yOgotICAgICAgICBtVXNlc1hvciA9IHRydWU7Ci0gICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICJ4b3IoIiwgIiwgIiwgIikiKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6Ci0gICAgICAgIGlmIChub2RlLT5nZXRSaWdodCgpLT5o
YXNTaWRlRWZmZWN0cygpKQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgInMiIDw8IG1V
bmZvbGRTaG9ydENpcmN1aXQtPmdldE5leHRUZW1wb3JhcnlJbmRleCgpOwotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgJiYgIiwgIikiKTsKLSAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgT3V0cHV0SExTTDo6dmlzaXRVbmFy
eShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5ICpub2RlKQotewotICAgIHN3aXRjaCAobm9kZS0+
Z2V0T3AoKSkKLSAgICB7Ci0gICAgICBjYXNlIEVPcE5lZ2F0aXZlOiAgICAgICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICIoLSIsICIiLCAiKSIpOyAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFZlY3Rv
ckxvZ2ljYWxOb3Q6IG91dHB1dFRyaXBsZXQodmlzaXQsICIoISIsICIiLCAiKSIpOyAgYnJlYWs7
Ci0gICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIo
ISIsICIiLCAiKSIpOyAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6ICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIrKykiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVP
cFBvc3REZWNyZW1lbnQ6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICItLSkiKTsg
YnJlYWs7Ci0gICAgICBjYXNlIEVPcFByZUluY3JlbWVudDogICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICIoKysiLCAiIiwgIikiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFByZURlY3JlbWVudDog
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoLS0iLCAiIiwgIikiKTsgYnJlYWs7Ci0gICAgICBj
YXNlIEVPcENvbnZJbnRUb0Jvb2w6Ci0gICAgICBjYXNlIEVPcENvbnZGbG9hdFRvQm9vbDoKLSAg
ICAgICAgc3dpdGNoIChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6
ZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSAxOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAiYm9vbCgiLCAiIiwgIikiKTsgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMjogICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgImJvb2wyKCIsICIiLCAiKSIpOyBicmVhazsKLSAgICAgICAgICBjYXNl
IDM6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJib29sMygiLCAiIiwgIikiKTsgYnJlYWs7Ci0g
ICAgICAgICAgY2FzZSA0OiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYm9vbDQoIiwgIiIsICIp
Iik7IGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENvbnZCb29sVG9GbG9hdDoKLSAgICAgIGNh
c2UgRU9wQ29udkludFRvRmxvYXQ6Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgp
LT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2Ug
MTogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZsb2F0KCIsICIiLCAiKSIpOyAgYnJlYWs7Ci0g
ICAgICAgICAgY2FzZSAyOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZmxvYXQyKCIsICIiLCAi
KSIpOyBicmVhazsKLSAgICAgICAgICBjYXNlIDM6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJm
bG9hdDMoIiwgIiIsICIpIik7IGJyZWFrOwotICAgICAgICAgIGNhc2UgNDogICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgImZsb2F0NCgiLCAiIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
RU9wQ29udkZsb2F0VG9JbnQ6Ci0gICAgICBjYXNlIEVPcENvbnZCb29sVG9JbnQ6Ci0gICAgICAg
IHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkK
LSAgICAgICAgewotICAgICAgICAgIGNhc2UgMTogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImlu
dCgiLCAiIiwgIikiKTsgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMjogICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgImludDIoIiwgIiIsICIpIik7IGJyZWFrOwotICAgICAgICAgIGNhc2UgMzogICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgImludDMoIiwgIiIsICIpIik7IGJyZWFrOwotICAgICAgICAg
IGNhc2UgNDogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImludDQoIiwgIiIsICIpIik7IGJyZWFr
OwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEVPcFJhZGlhbnM6ICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICJyYWRpYW5zKCIsICIiLCAiKSIpOyAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BEZWdyZWVz
OiAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGVncmVlcygiLCAiIiwgIikiKTsgICBi
cmVhazsKLSAgICAgIGNhc2UgRU9wU2luOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgInNpbigiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENvczogICAg
ICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJjb3MoIiwgIiIsICIpIik7ICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBFT3BUYW46ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAidGFuKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wQXNpbjogICAg
ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFzaW4oIiwgIiIsICIpIik7ICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEVPcEFjb3M6ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICJhY29zKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BBdGFuOiAgICAg
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYXRhbigiLCAiIiwgIikiKTsgICAgICBicmVh
azsKLSAgICAgIGNhc2UgRU9wRXhwOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
ImV4cCgiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcExvZzogICAgICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJsb2coIiwgIiIsICIpIik7ICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBFT3BFeHAyOiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
ZXhwMigiLCAiIiwgIikiKTsgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wTG9nMjogICAgICAg
ICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImxvZzIoIiwgIiIsICIpIik7ICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEVPcFNxcnQ6ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJz
cXJ0KCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BJbnZlcnNlU3FydDog
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAicnNxcnQoIiwgIiIsICIpIik7ICAgICBicmVhazsK
LSAgICAgIGNhc2UgRU9wQWJzOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFi
cygiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFNpZ246ICAgICAgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJzaWduKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBFT3BGbG9vcjogICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZmxv
b3IoIiwgIiIsICIpIik7ICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wQ2VpbDogICAgICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImNlaWwoIiwgIiIsICIpIik7ICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEVPcEZyYWN0OiAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJmcmFj
KCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BMZW5ndGg6ICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibGVuZ3RoKCIsICIiLCAiKSIpOyAgICBicmVhazsKLSAg
ICAgIGNhc2UgRU9wTm9ybWFsaXplOiAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm5vcm1h
bGl6ZSgiLCAiIiwgIikiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcERGZHg6Ci0gICAgICAgIGlm
KG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1bmN0aW9uKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIiLCAiLCAwLjApIik7
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiZGR4KCIsICIiLCAiKSIpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBFT3BERmR5OgotICAgICAgICBpZihtSW5zaWRlRGlzY29udGludW91c0xv
b3AgfHwgbU91dHB1dExvZDBGdW5jdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgIigiLCAiIiwgIiwgMC4wKSIpOwotICAgICAgICB9Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgewotICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGR5KCIsICIi
LCAiKSIpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BGd2lkdGg6
Ci0gICAgICAgIGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1bmN0
aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIi
LCAiLCAwLjApIik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZndpZHRoKCIsICIiLCAiKSIpOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BBbnk6ICAgICAgICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiYW55KCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
RU9wQWxsOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFsbCgiLCAiIiwgIiki
KTsgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIE91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKFZp
c2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQotewotICAgIFRJbmZvU2lua0Jhc2Ug
Jm91dCA9IG1Cb2R5OwotCi0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQotICAgIHsKLSAgICAg
IGNhc2UgRU9wU2VxdWVuY2U6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtSW5zaWRlRnVu
Y3Rpb24pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2
ZShub2RlLT5nZXRMaW5lKCkuZmlyc3RfbGluZSk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJ7
XG4iOwotCi0gICAgICAgICAgICAgICAgbVNjb3BlRGVwdGgrKzsKLQotICAgICAgICAgICAgICAg
IGlmIChtU2NvcGVCcmFja2V0LnNpemUoKSA8IG1TY29wZURlcHRoKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgbVNjb3BlQnJhY2tldC5wdXNoX2JhY2soMCk7ICAgLy8g
TmV3IHNjb3BlIGxldmVsCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1TY29wZUJyYWNrZXRbbVNj
b3BlRGVwdGggLSAxXSsrOyAgIC8vIE5ldyBzY29wZSBhdCBleGlzdGluZyBsZXZlbAotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChUSW50ZXJtU2Vx
dWVuY2U6Oml0ZXJhdG9yIHNpdCA9IG5vZGUtPmdldFNlcXVlbmNlKCkuYmVnaW4oKTsgc2l0ICE9
IG5vZGUtPmdldFNlcXVlbmNlKCkuZW5kKCk7IHNpdCsrKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUoKCpzaXQpLT5nZXRMaW5lKCkuZmlyc3RfbGlu
ZSk7Ci0KLSAgICAgICAgICAgICAgICB0cmF2ZXJzZVN0YXRlbWVudHMoKnNpdCk7Ci0KLSAgICAg
ICAgICAgICAgICBvdXQgPDwgIjtcbiI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
IChtSW5zaWRlRnVuY3Rpb24pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0cHV0
TGluZURpcmVjdGl2ZShub2RlLT5nZXRMaW5lKCkubGFzdF9saW5lKTsKLSAgICAgICAgICAgICAg
ICBvdXQgPDwgIn1cbiI7Ci0KLSAgICAgICAgICAgICAgICBtU2NvcGVEZXB0aC0tOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIGNh
c2UgRU9wRGVjbGFyYXRpb246Ci0gICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKLSAgICAg
ICAgewotICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNl
cXVlbmNlKCk7Ci0gICAgICAgICAgICBUSW50ZXJtVHlwZWQgKnZhcmlhYmxlID0gc2VxdWVuY2Vb
MF0tPmdldEFzVHlwZWQoKTsKLQotICAgICAgICAgICAgaWYgKHZhcmlhYmxlICYmICh2YXJpYWJs
ZS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxVGVtcG9yYXJ5IHx8IHZhcmlhYmxlLT5nZXRRdWFsaWZp
ZXIoKSA9PSBFdnFHbG9iYWwpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICh2
YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgYWRkQ29uc3RydWN0b3IodmFyaWFibGUtPmdldFR5cGUoKSwgc2NvcGVk
U3RydWN0KHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCktPm5hbWUoKSksIE5VTEwpOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICghdmFyaWFibGUtPmdldEFz
U3ltYm9sTm9kZSgpIHx8IHZhcmlhYmxlLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCkg
IT0gIiIpICAgLy8gVmFyaWFibGUgZGVjbGFyYXRpb24KLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICghbUluc2lkZUZ1bmN0aW9uKQotICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgInN0YXRpYyAiOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgb3V0IDw8IHR5cGVTdHJpbmcodmFy
aWFibGUtPmdldFR5cGUoKSkgKyAiICI7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChUSW50
ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNpdCA9IHNlcXVlbmNlLmJlZ2luKCk7IHNpdCAhPSBzZXF1
ZW5jZS5lbmQoKTsgc2l0KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9ICgqc2l0KS0+Z2V0QXNTeW1ib2xOb2Rl
KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wpCi0gICAgICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sLT50cmF2ZXJz
ZSh0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgYXJyYXlTdHJpbmco
c3ltYm9sLT5nZXRUeXBlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAi
ID0gIiArIGluaXRpYWxpemVyKHZhcmlhYmxlLT5nZXRUeXBlKCkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqc2l0KS0+dHJhdmVyc2Uo
dGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICgqc2l0ICE9IHNlcXVlbmNlLmJhY2soKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBlbHNlIGlmICh2YXJpYWJsZS0+Z2V0QXNTeW1ib2xOb2RlKCkgJiYg
dmFyaWFibGUtPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKSA9PSAiIikgICAvLyBUeXBl
IChzdHJ1Y3QpIGRlY2xhcmF0aW9uCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAvLyBBbHJlYWR5IGFkZGVkIHRvIGNvbnN0cnVjdG9yIG1hcAotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlIGlmICh2YXJpYWJsZSAmJiAodmFyaWFibGUtPmdldFF1YWxpZmllcigp
ID09IEV2cVZhcnlpbmdPdXQgfHwgdmFyaWFibGUtPmdldFF1YWxpZmllcigpID09IEV2cUludmFy
aWFudFZhcnlpbmdPdXQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoVElu
dGVybVNlcXVlbmNlOjppdGVyYXRvciBzaXQgPSBzZXF1ZW5jZS5iZWdpbigpOyBzaXQgIT0gc2Vx
dWVuY2UuZW5kKCk7IHNpdCsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gKCpzaXQpLT5nZXRBc1N5bWJvbE5vZGUoKTsKLQot
ICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sKQotICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBWZXJ0ZXggKG91dHB1dCkgdmFyeWluZ3Mgd2hpY2gg
YXJlIGRlY2xhcmVkIGJ1dCBub3Qgd3JpdHRlbiB0byBzaG91bGQgc3RpbGwgYmUgZGVjbGFyZWQg
dG8gYWxsb3cgc3VjY2Vzc2Z1bCBsaW5raW5nCi0gICAgICAgICAgICAgICAgICAgICAgICBtUmVm
ZXJlbmNlZFZhcnlpbmdzW3N5bWJvbC0+Z2V0U3ltYm9sKCldID0gc3ltYm9sOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgKCpzaXQpLT50cmF2ZXJzZSh0aGlzKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHZp
c2l0ID09IEluVmlzaXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAiLCAiOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BQcm90b3R5cGU6Ci0gICAgICAg
IGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8IHR5
cGVTdHJpbmcobm9kZS0+Z2V0VHlwZSgpKSA8PCAiICIgPDwgZGVjb3JhdGUobm9kZS0+Z2V0TmFt
ZSgpKSA8PCAobU91dHB1dExvZDBGdW5jdGlvbiA/ICJMb2QwKCIgOiAiKCIpOwotCi0gICAgICAg
ICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IG5vZGUtPmdldFNlcXVlbmNlKCk7Ci0K
LSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgYXJndW1lbnRzLnNpemUo
KTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5
bWJvbCA9IGFyZ3VtZW50c1tpXS0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoc3ltYm9sKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgb3V0
IDw8IGFyZ3VtZW50U3RyaW5nKHN5bWJvbCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGkg
PCBhcmd1bWVudHMuc2l6ZSgpIC0gMSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBvdXQgPDwgIik7XG4iOwotCi0gICAgICAgICAgICAvLyBB
bHNvIHByb3RvdHlwZSB0aGUgTG9kMCB2YXJpYW50IGlmIG5lZWRlZAotICAgICAgICAgICAgaWYg
KG1Db250YWluc0xvb3BEaXNjb250aW51aXR5ICYmICFtT3V0cHV0TG9kMEZ1bmN0aW9uKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSB0cnVlOwot
ICAgICAgICAgICAgICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAgICAgICAgIG1P
dXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BD
b21tYTogICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIsICIsICIpIik7ICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BGdW5jdGlvbjoKLSAgICAgICAgewot
ICAgICAgICAgICAgVFN0cmluZyBuYW1lID0gVEZ1bmN0aW9uOjp1bm1hbmdsZU5hbWUobm9kZS0+
Z2V0TmFtZSgpKTsKLQotICAgICAgICAgICAgb3V0IDw8IHR5cGVTdHJpbmcobm9kZS0+Z2V0VHlw
ZSgpKSA8PCAiICI7Ci0KLSAgICAgICAgICAgIGlmIChuYW1lID09ICJtYWluIikKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImdsX21haW4oIjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwg
ZGVjb3JhdGUobmFtZSkgPDwgKG1PdXRwdXRMb2QwRnVuY3Rpb24gPyAiTG9kMCgiIDogIigiKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9
IG5vZGUtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3Vt
ZW50cyA9IHNlcXVlbmNlWzBdLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgpOwotCi0g
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXplKCk7
IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1i
b2wgPSBhcmd1bWVudHNbaV0tPmdldEFzU3ltYm9sTm9kZSgpOwotCi0gICAgICAgICAgICAgICAg
aWYgKHN5bWJvbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChz
eW1ib2wtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgYWRkQ29uc3RydWN0b3Ioc3ltYm9sLT5nZXRUeXBlKCksIHNj
b3BlZFN0cnVjdChzeW1ib2wtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+bmFtZSgpKSwgTlVMTCk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBvdXQgPDwgYXJn
dW1lbnRTdHJpbmcoc3ltYm9sKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGFyZ3Vt
ZW50cy5zaXplKCkgLSAxKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBvdXQgPDwgIiwgIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIG91dCA8PCAiKVxuIgotICAgICAgICAgICAgICAgICJ7XG4iOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc2VxdWVuY2Uuc2l6ZSgpID4gMSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBtSW5zaWRlRnVuY3Rpb24gPSB0cnVlOwotICAgICAgICAg
ICAgICAgIHNlcXVlbmNlWzFdLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgICAgICBtSW5z
aWRlRnVuY3Rpb24gPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgb3V0IDw8ICJ9XG4iOwotCi0gICAgICAgICAgICBpZiAobUNvbnRhaW5zTG9vcERpc2Nv
bnRpbnVpdHkgJiYgIW1PdXRwdXRMb2QwRnVuY3Rpb24pCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgaWYgKG5hbWUgIT0gIm1haW4iKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgbU91dHB1dExvZDBGdW5jdGlvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAgICAgICAgICAgICBtT3V0cHV0TG9k
MEZ1bmN0aW9uID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEVPcEZ1bmN0aW9uQ2FsbDoKLSAgICAgICAgewotICAgICAgICAgICAgVFN0cmluZyBu
YW1lID0gVEZ1bmN0aW9uOjp1bm1hbmdsZU5hbWUobm9kZS0+Z2V0TmFtZSgpKTsKLSAgICAgICAg
ICAgIGJvb2wgbG9kMCA9IG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1
bmN0aW9uOwotCi0gICAgICAgICAgICBpZiAobm9kZS0+aXNVc2VyRGVmaW5lZCgpKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAobG9kMCA/
ICJMb2QwKCIgOiAiKCIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQiKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2QwKQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2Uo
KS5zaXplKCkgPT0gMikKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5j
ZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEX2JpYXMgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgp
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRCgiOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNl
KCkuc2l6ZSgpID09IDIpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRMb2QwID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNl
cXVlbmNlKCkuc2l6ZSgpID09IDMpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJF
QUNIQUJMRSgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUy
RExvZDAoIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlMkRQcm9qIikKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6
ZSgpID09IDIpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNl
KCkuc2l6ZSgpID09IDMpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXMgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJM
RSgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRFByb2oo
IjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRT
ZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDAgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
bm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKLSAgICAgICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QwX2Jp
YXMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgImdsX3RleHR1cmUyRFByb2pMb2QwKCI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZUN1
YmUiKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2QwKQot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5v
ZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCi0gICAgICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZV9iaWFzID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90
ZXh0dXJlQ3ViZSgiOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCi0gICAgICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDAgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJl
TG9kMF9iaWFzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0IDw8ICJnbF90ZXh0dXJlQ3ViZUxvZDAoIjsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0
dXJlMkRMb2QiKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJETG9kID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRMb2QoIjsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJEUHJv
akxvZCIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRQcm9qTG9kKCI7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVD
dWJlTG9kIikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlTG9kID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlQ3ViZUxvZCgiOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJndW1lbnRzID0gbm9kZS0+
Z2V0U2VxdWVuY2UoKTsKLQotICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJh
dG9yIGFyZyA9IGFyZ3VtZW50cy5iZWdpbigpOyBhcmcgIT0gYXJndW1lbnRzLmVuZCgpOyBhcmcr
KykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hf
SExTTDExX09VVFBVVCAmJiBJc1NhbXBsZXIoKCphcmcpLT5nZXRBc1R5cGVkKCktPmdldEJhc2lj
VHlwZSgpKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG91dCA8PCAi
dGV4dHVyZV8iOwotICAgICAgICAgICAgICAgICAgICAoKmFyZyktPnRyYXZlcnNlKHRoaXMpOwot
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgc2FtcGxlcl8iOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICgqYXJnKS0+dHJhdmVyc2UodGhpcyk7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoYXJnIDwgYXJndW1lbnRzLmVuZCgpIC0gMSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgb3V0IDw8ICIpIjsKLQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BQYXJh
bWV0ZXJzOiAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIsICIsICIpXG57XG4iKTsg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OgotICAgICAg
ICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJ2ZWMxIiwgJm5vZGUtPmdldFNlcXVl
bmNlKCkpOwotICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidmVjMSgiLCAiIiwgIikiKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzI6Ci0gICAgICAgIGFk
ZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgInZlYzIiLCAmbm9kZS0+Z2V0U2VxdWVuY2Uo
KSk7Ci0gICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ2ZWMyKCIsICIsICIsICIpIik7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMzOgotICAgICAgICBhZGRD
b25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJ2ZWMzIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkp
OwotICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidmVjMygiLCAiLCAiLCAiKSIpOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjNDoKLSAgICAgICAgYWRkQ29u
c3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAidmVjNCIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsK
LSAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInZlYzQoIiwgIiwgIiwgIikiKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6Ci0gICAgICAgIGFkZENvbnN0
cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgImJ2ZWMxIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOwot
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYnZlYzEoIiwgIiIsICIpIik7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMjoKLSAgICAgICAgYWRkQ29uc3Ry
dWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiYnZlYzIiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7Ci0g
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJidmVjMigiLCAiLCAiLCAiKSIpOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzM6Ci0gICAgICAgIGFkZENvbnN0
cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgImJ2ZWMzIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOwot
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYnZlYzMoIiwgIiwgIiwgIikiKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWM0OgotICAgICAgICBhZGRDb25z
dHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJidmVjNCIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsK
LSAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImJ2ZWM0KCIsICIsICIsICIpIik7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6Ci0gICAgICAgIGFkZENvbnN0
cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgIml2ZWMxIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOwot
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaXZlYzEoIiwgIiIsICIpIik7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMjoKLSAgICAgICAgYWRkQ29uc3Ry
dWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiaXZlYzIiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7Ci0g
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJpdmVjMigiLCAiLCAiLCAiKSIpOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzM6Ci0gICAgICAgIGFkZENvbnN0
cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgIml2ZWMzIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOwot
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaXZlYzMoIiwgIiwgIiwgIikiKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWM0OgotICAgICAgICBhZGRDb25z
dHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJpdmVjNCIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsK
LSAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIml2ZWM0KCIsICIsICIsICIpIik7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQyOgotICAgICAgICBhZGRDb25z
dHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJtYXQyIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOwot
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibWF0MigiLCAiLCAiLCAiKSIpOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MzoKLSAgICAgICAgYWRkQ29uc3Ry
dWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAibWF0MyIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKLSAg
ICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm1hdDMoIiwgIiwgIiwgIikiKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6IAotICAgICAgICBhZGRDb25zdHJ1
Y3Rvcihub2RlLT5nZXRUeXBlKCksICJtYXQ0IiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOwotICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibWF0NCgiLCAiLCAiLCAiKSIpOwotICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgRU9wQ29uc3RydWN0U3RydWN0OgotICAgICAgICBhZGRDb25zdHJ1
Y3Rvcihub2RlLT5nZXRUeXBlKCksIHNjb3BlZFN0cnVjdChub2RlLT5nZXRUeXBlKCkuZ2V0U3Ry
dWN0KCktPm5hbWUoKSksICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKLSAgICAgICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgc3RydWN0TG9va3VwKG5vZGUtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+bmFt
ZSgpKSArICJfY3RvcigiLCAiLCAiLCAiKSIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
RU9wTGVzc1RoYW46ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIDwgIiwgIiki
KTsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjogICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPiAiLCAiKSIpOyAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6ICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICIoIiwgIiA8PSAiLCAiKSIpOyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
RU9wR3JlYXRlclRoYW5FcXVhbDogb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiID49ICIsICIp
Iik7ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BWZWN0b3JFcXVhbDogICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPT0gIiwgIikiKTsgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEVPcFZlY3Rvck5vdEVxdWFsOiAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICIoIiwgIiAhPSAiLCAiKSIpOyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
RU9wTW9kOgotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGxvb2sgYXQgdGhl
IG51bWJlciBvZiBjb21wb25lbnRzIGluIGJvdGggYXJndW1lbnRzCi0gICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPmdldFNlcXVlbmNlKClbMF0tPmdldEFzVHlwZWQoKS0+Z2V0Tm9taW5hbFNpemUo
KSAqIDEwCi0gICAgICAgICAgICAgICAgICAgICArIG5vZGUtPmdldFNlcXVlbmNlKClbMV0tPmdl
dEFzVHlwZWQoKS0+Z2V0Tm9taW5hbFNpemUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgY2FzZSAxMTogbVVzZXNNb2QxID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
MjI6IG1Vc2VzTW9kMnYgPSB0cnVlOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSAyMTogbVVz
ZXNNb2QyZiA9IHRydWU7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIDMzOiBtVXNlc01vZDN2
ID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgMzE6IG1Vc2VzTW9kM2YgPSB0cnVl
OyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSA0NDogbVVzZXNNb2Q0diA9IHRydWU7IGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIDQxOiBtVXNlc01vZDRmID0gdHJ1ZTsgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJtb2QoIiwgIiwgIiwgIikiKTsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wUG93OiAgICAgICAgICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgInBvdygiLCAiLCAiLCAiKSIpOyAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBFT3BBdGFuOgotICAgICAgICBBU1NFUlQobm9kZS0+Z2V0U2VxdWVuY2UoKS5z
aXplKCkgPT0gMik7ICAgLy8gYXRhbih4KSBpcyBhIHVuYXJ5IG9wZXJhdG9yCi0gICAgICAgIHN3
aXRjaCAobm9kZS0+Z2V0U2VxdWVuY2UoKVswXS0+Z2V0QXNUeXBlZCgpLT5nZXROb21pbmFsU2l6
ZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSAxOiBtVXNlc0F0YW4yXzEgPSB0cnVlOyBi
cmVhazsKLSAgICAgICAgICBjYXNlIDI6IG1Vc2VzQXRhbjJfMiA9IHRydWU7IGJyZWFrOwotICAg
ICAgICAgIGNhc2UgMzogbVVzZXNBdGFuMl8zID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSA0OiBtVXNlc0F0YW4yXzQgPSB0cnVlOyBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJhdGFu
eXgoIiwgIiwgIiwgIikiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcE1pbjogICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJtaW4oIiwgIiwgIiwgIikiKTsgICAgICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBFT3BNYXg6ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAibWF4KCIsICIsICIsICIpIik7ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wQ2xh
bXA6ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImNsYW1wKCIsICIsICIsICIpIik7ICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcE1peDogICAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJsZXJwKCIsICIsICIsICIpIik7ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBF
T3BTdGVwOiAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAic3RlcCgiLCAiLCAiLCAiKSIp
OyAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wU21vb3RoU3RlcDogICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgInNtb290aHN0ZXAoIiwgIiwgIiwgIikiKTsgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEVPcERpc3RhbmNlOiAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkaXN0YW5jZSgiLCAi
LCAiLCAiKSIpOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BEb3Q6ICAgICAgICAgICBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAiZG90KCIsICIsICIsICIpIik7ICAgICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgRU9wQ3Jvc3M6ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImNyb3NzKCIs
ICIsICIsICIpIik7ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcEZhY2VGb3J3YXJkOgot
ICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldFNlcXVlbmNlKClbMF0tPmdl
dEFzVHlwZWQoKS0+Z2V0Tm9taW5hbFNpemUoKSkgICAvLyBOdW1iZXIgb2YgY29tcG9uZW50cyBp
biB0aGUgZmlyc3QgYXJndW1lbnQKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgMTog
bVVzZXNGYWNlZm9yd2FyZDEgPSB0cnVlOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMjogbVVz
ZXNGYWNlZm9yd2FyZDIgPSB0cnVlOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMzogbVVzZXNG
YWNlZm9yd2FyZDMgPSB0cnVlOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgNDogbVVzZXNGYWNl
Zm9yd2FyZDQgPSB0cnVlOyBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICJmYWNlZm9yd2FyZCgiLCAiLCAiLCAiKSIpOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBFT3BSZWZsZWN0OiAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAicmVmbGVjdCgiLCAiLCAiLCAiKSIpOyAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wUmVm
cmFjdDogICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInJlZnJhY3QoIiwgIiwgIiwgIikiKTsg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcE11bDogICAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICIoIiwgIiAqICIsICIpIik7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBP
dXRwdXRITFNMOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAq
bm9kZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKLQotICAgIGlmIChub2Rl
LT51c2VzVGVybmFyeU9wZXJhdG9yKCkpCi0gICAgewotICAgICAgICBvdXQgPDwgInMiIDw8IG1V
bmZvbGRTaG9ydENpcmN1aXQtPmdldE5leHRUZW1wb3JhcnlJbmRleCgpOwotICAgIH0KLSAgICBl
bHNlICAvLyBpZi9lbHNlIHN0YXRlbWVudAotICAgIHsKLSAgICAgICAgbVVuZm9sZFNob3J0Q2ly
Y3VpdC0+dHJhdmVyc2Uobm9kZS0+Z2V0Q29uZGl0aW9uKCkpOwotCi0gICAgICAgIG91dCA8PCAi
aWYgKCI7Ci0KLSAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOwot
Ci0gICAgICAgIG91dCA8PCAiKVxuIjsKLSAgICAgICAgCi0gICAgICAgIG91dHB1dExpbmVEaXJl
Y3RpdmUobm9kZS0+Z2V0TGluZSgpLmZpcnN0X2xpbmUpOwotICAgICAgICBvdXQgPDwgIntcbiI7
Ci0KLSAgICAgICAgYm9vbCBkaXNjYXJkID0gZmFsc2U7Ci0KLSAgICAgICAgaWYgKG5vZGUtPmdl
dFRydWVCbG9jaygpKQotICAgICAgICB7Ci0gICAgICAgICAgICB0cmF2ZXJzZVN0YXRlbWVudHMo
bm9kZS0+Z2V0VHJ1ZUJsb2NrKCkpOwotCi0gICAgICAgICAgICAvLyBEZXRlY3QgdHJ1ZSBkaXNj
YXJkCi0gICAgICAgICAgICBkaXNjYXJkID0gKGRpc2NhcmQgfHwgRmluZERpc2NhcmQ6OnNlYXJj
aChub2RlLT5nZXRUcnVlQmxvY2soKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgb3V0cHV0TGlu
ZURpcmVjdGl2ZShub2RlLT5nZXRMaW5lKCkuZmlyc3RfbGluZSk7Ci0gICAgICAgIG91dCA8PCAi
O1xufVxuIjsKLQotICAgICAgICBpZiAobm9kZS0+Z2V0RmFsc2VCbG9jaygpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBvdXQgPDwgImVsc2VcbiI7Ci0KLSAgICAgICAgICAgIG91dHB1dExpbmVE
aXJlY3RpdmUobm9kZS0+Z2V0RmFsc2VCbG9jaygpLT5nZXRMaW5lKCkuZmlyc3RfbGluZSk7Ci0g
ICAgICAgICAgICBvdXQgPDwgIntcbiI7Ci0KLSAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3Rp
dmUobm9kZS0+Z2V0RmFsc2VCbG9jaygpLT5nZXRMaW5lKCkuZmlyc3RfbGluZSk7Ci0gICAgICAg
ICAgICB0cmF2ZXJzZVN0YXRlbWVudHMobm9kZS0+Z2V0RmFsc2VCbG9jaygpKTsKLQotICAgICAg
ICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRGYWxzZUJsb2NrKCktPmdldExpbmUo
KS5maXJzdF9saW5lKTsKLSAgICAgICAgICAgIG91dCA8PCAiO1xufVxuIjsKLQotICAgICAgICAg
ICAgLy8gRGV0ZWN0IGZhbHNlIGRpc2NhcmQKLSAgICAgICAgICAgIGRpc2NhcmQgPSAoZGlzY2Fy
ZCB8fCBGaW5kRGlzY2FyZDo6c2VhcmNoKG5vZGUtPmdldEZhbHNlQmxvY2soKSkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gQU5HTEUgaXNzdWUgNDg2OiBEZXRlY3QgcHJvYmxlbWF0aWMgY29u
ZGl0aW9uYWwgZGlzY2FyZAotICAgICAgICBpZiAoZGlzY2FyZCAmJiBGaW5kU2lkZUVmZmVjdFJl
d3JpdGluZzo6c2VhcmNoKG5vZGUpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtVXNlc0Rpc2Nh
cmRSZXdyaXRpbmcgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi12b2lkIE91dHB1dEhMU0w6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3Rh
bnRVbmlvbiAqbm9kZSkKLXsKLSAgICB3cml0ZUNvbnN0YW50VW5pb24obm9kZS0+Z2V0VHlwZSgp
LCBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpKTsKLX0KLQotYm9vbCBPdXRwdXRITFNMOjp2
aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKQotewotICAgIGJvb2wgd2Fz
RGlzY29udGludW91cyA9IG1JbnNpZGVEaXNjb250aW51b3VzTG9vcDsKLQotICAgIGlmIChtQ29u
dGFpbnNMb29wRGlzY29udGludWl0eSAmJiAhbUluc2lkZURpc2NvbnRpbnVvdXNMb29wKQotICAg
IHsKLSAgICAgICAgbUluc2lkZURpc2NvbnRpbnVvdXNMb29wID0gY29udGFpbnNMb29wRGlzY29u
dGludWl0eShub2RlKTsKLSAgICB9Ci0KLSAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlf
T1VUUFVUKQotICAgIHsKLSAgICAgICAgaWYgKGhhbmRsZUV4Y2Vzc2l2ZUxvb3Aobm9kZSkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OwotCi0gICAgaWYgKG5vZGUtPmdldFR5cGUo
KSA9PSBFTG9vcERvV2hpbGUpCi0gICAgewotICAgICAgICBvdXQgPDwgIntkb1xuIjsKLQotICAg
ICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKS5maXJzdF9saW5lKTsKLSAg
ICAgICAgb3V0IDw8ICJ7XG4iOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBvdXQg
PDwgIntmb3IoIjsKLSAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5nZXRJbml0KCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG5vZGUtPmdldEluaXQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBvdXQgPDwgIjsgIjsKLQotICAgICAgICBpZiAobm9kZS0+Z2V0Q29u
ZGl0aW9uKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50
cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIG91dCA8PCAiOyAiOwotCi0gICAg
ICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5v
ZGUtPmdldEV4cHJlc3Npb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBvdXQgPDwgIilcbiI7Ci0gICAgICAgIAotICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5v
ZGUtPmdldExpbmUoKS5maXJzdF9saW5lKTsKLSAgICAgICAgb3V0IDw8ICJ7XG4iOwotICAgIH0K
LQotICAgIGlmIChub2RlLT5nZXRCb2R5KCkpCi0gICAgewotICAgICAgICB0cmF2ZXJzZVN0YXRl
bWVudHMobm9kZS0+Z2V0Qm9keSgpKTsKLSAgICB9Ci0KLSAgICBvdXRwdXRMaW5lRGlyZWN0aXZl
KG5vZGUtPmdldExpbmUoKS5maXJzdF9saW5lKTsKLSAgICBvdXQgPDwgIjt9XG4iOwotCi0gICAg
aWYgKG5vZGUtPmdldFR5cGUoKSA9PSBFTG9vcERvV2hpbGUpCi0gICAgewotICAgICAgICBvdXRw
dXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldENvbmRpdGlvbigpLT5nZXRMaW5lKCkuZmlyc3RfbGlu
ZSk7Ci0gICAgICAgIG91dCA8PCAid2hpbGUoXG4iOwotCi0gICAgICAgIG5vZGUtPmdldENvbmRp
dGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKLQotICAgICAgICBvdXQgPDwgIik7IjsKLSAgICB9Ci0K
LSAgICBvdXQgPDwgIn1cbiI7Ci0KLSAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSB3YXNE
aXNjb250aW51b3VzOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIE91dHB1dEhMU0w6
OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2RlKQotewotICAgIFRJ
bmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OwotCi0gICAgc3dpdGNoIChub2RlLT5nZXRGbG93T3Ao
KSkKLSAgICB7Ci0gICAgICBjYXNlIEVPcEtpbGw6Ci0gICAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICJkaXNjYXJkO1xuIiwgIiIsICIiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVP
cEJyZWFrOgotICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChtRXhjZXNzaXZlTG9vcEluZGV4KQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG91dCA8PCAie0JyZWFrIjsKLSAgICAgICAgICAgICAgICBtRXhjZXNzaXZlTG9vcElu
ZGV4LT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIiA9IHRydWU7IGJy
ZWFrO31cbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJicmVhaztcbiI7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENvbnRpbnVlOiBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiY29udGludWU7XG4iLCAiIiwgIiIpOyBicmVhazsKLSAgICAgIGNhc2UgRU9w
UmV0dXJuOgotICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgb3V0IDw8ICJyZXR1cm4gIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgInJldHVybjtcbiI7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZp
c2l0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Z2V0RXhwcmVzc2lvbigpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiO1xuIjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgT3V0cHV0SExTTDo6dHJh
dmVyc2VTdGF0ZW1lbnRzKFRJbnRlcm1Ob2RlICpub2RlKQotewotICAgIGlmIChpc1NpbmdsZVN0
YXRlbWVudChub2RlKSkKLSAgICB7Ci0gICAgICAgIG1VbmZvbGRTaG9ydENpcmN1aXQtPnRyYXZl
cnNlKG5vZGUpOwotICAgIH0KLQotICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOwotfQotCi1ib29s
IE91dHB1dEhMU0w6OmlzU2luZ2xlU3RhdGVtZW50KFRJbnRlcm1Ob2RlICpub2RlKQotewotICAg
IFRJbnRlcm1BZ2dyZWdhdGUgKmFnZ3JlZ2F0ZSA9IG5vZGUtPmdldEFzQWdncmVnYXRlKCk7Ci0K
LSAgICBpZiAoYWdncmVnYXRlKQotICAgIHsKLSAgICAgICAgaWYgKGFnZ3JlZ2F0ZS0+Z2V0T3Ao
KSA9PSBFT3BTZXF1ZW5jZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChUSW50
ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNpdCA9IGFnZ3JlZ2F0ZS0+Z2V0U2VxdWVuY2UoKS5iZWdp
bigpOyBzaXQgIT0gYWdncmVnYXRlLT5nZXRTZXF1ZW5jZSgpLmVuZCgpOyBzaXQrKykKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIWlzU2luZ2xlU3RhdGVtZW50KCpzaXQpKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gSGFuZGxlIGxv
b3BzIHdpdGggbW9yZSB0aGFuIDI1NCBpdGVyYXRpb25zICh1bnN1cHBvcnRlZCBieSBEM0Q5KSBi
eSBzcGxpdHRpbmcgdGhlbQotLy8gKFRoZSBEM0QgZG9jdW1lbnRhdGlvbiBzYXlzIDI1NSBpdGVy
YXRpb25zLCBidXQgdGhlIGNvbXBpbGVyIGNvbXBsYWlucyBhdCBhbnl0aGluZyBtb3JlIHRoYW4g
MjU0KS4KLWJvb2wgT3V0cHV0SExTTDo6aGFuZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAq
bm9kZSkKLXsKLSAgICBjb25zdCBpbnQgTUFYX0xPT1BfSVRFUkFUSU9OUyA9IDI1NDsKLSAgICBU
SW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKLQotICAgIC8vIFBhcnNlIGxvb3BzIG9mIHRoZSBm
b3JtOgotICAgIC8vIGZvcihpbnQgaW5kZXggPSBpbml0aWFsOyBpbmRleCBbY29tcGFyYXRvcl0g
bGltaXQ7IGluZGV4ICs9IGluY3JlbWVudCkKLSAgICBUSW50ZXJtU3ltYm9sICppbmRleCA9IE5V
TEw7Ci0gICAgVE9wZXJhdG9yIGNvbXBhcmF0b3IgPSBFT3BOdWxsOwotICAgIGludCBpbml0aWFs
ID0gMDsKLSAgICBpbnQgbGltaXQgPSAwOwotICAgIGludCBpbmNyZW1lbnQgPSAwOwotCi0gICAg
Ly8gUGFyc2UgaW5kZXggbmFtZSBhbmQgaW50aWFsIHZhbHVlCi0gICAgaWYgKG5vZGUtPmdldElu
aXQoKSkKLSAgICB7Ci0gICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUgKmluaXQgPSBub2RlLT5nZXRJ
bml0KCktPmdldEFzQWdncmVnYXRlKCk7Ci0KLSAgICAgICAgaWYgKGluaXQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2UgPSBpbml0LT5nZXRTZXF1ZW5j
ZSgpOwotICAgICAgICAgICAgVEludGVybVR5cGVkICp2YXJpYWJsZSA9IHNlcXVlbmNlWzBdLT5n
ZXRBc1R5cGVkKCk7Ci0KLSAgICAgICAgICAgIGlmICh2YXJpYWJsZSAmJiB2YXJpYWJsZS0+Z2V0
UXVhbGlmaWVyKCkgPT0gRXZxVGVtcG9yYXJ5KQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIFRJbnRlcm1CaW5hcnkgKmFzc2lnbiA9IHZhcmlhYmxlLT5nZXRBc0JpbmFyeU5vZGUoKTsK
LQotICAgICAgICAgICAgICAgIGlmIChhc3NpZ24tPmdldE9wKCkgPT0gRU9wSW5pdGlhbGl6ZSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5
bWJvbCA9IGFzc2lnbi0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAgICAgICAgICAg
ICAgICAgICAgVEludGVybUNvbnN0YW50VW5pb24gKmNvbnN0YW50ID0gYXNzaWduLT5nZXRSaWdo
dCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoc3lt
Ym9sICYmIGNvbnN0YW50KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoY29uc3RhbnQtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAmJiBjb25zdGFu
dC0+Z2V0Tm9taW5hbFNpemUoKSA9PSAxKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gc3ltYm9sOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluaXRpYWwgPSBjb25zdGFudC0+Z2V0SUNvbnN0KDApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gUGFyc2UgY29tcGFy
YXRvciBhbmQgbGltaXQgdmFsdWUKLSAgICBpZiAoaW5kZXggIT0gTlVMTCAmJiBub2RlLT5nZXRD
b25kaXRpb24oKSkKLSAgICB7Ci0gICAgICAgIFRJbnRlcm1CaW5hcnkgKnRlc3QgPSBub2RlLT5n
ZXRDb25kaXRpb24oKS0+Z2V0QXNCaW5hcnlOb2RlKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAo
dGVzdCAmJiB0ZXN0LT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRJZCgpID09IGlu
ZGV4LT5nZXRJZCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlv
biAqY29uc3RhbnQgPSB0ZXN0LT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLQot
ICAgICAgICAgICAgaWYgKGNvbnN0YW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGlmIChjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5nZXRO
b21pbmFsU2l6ZSgpID09IDEpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBjb21wYXJhdG9yID0gdGVzdC0+Z2V0T3AoKTsKLSAgICAgICAgICAgICAgICAgICAgbGltaXQg
PSBjb25zdGFudC0+Z2V0SUNvbnN0KDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFBhcnNlIGluY3JlbWVudAotICAgIGlmIChp
bmRleCAhPSBOVUxMICYmIGNvbXBhcmF0b3IgIT0gRU9wTnVsbCAmJiBub2RlLT5nZXRFeHByZXNz
aW9uKCkpCi0gICAgewotICAgICAgICBUSW50ZXJtQmluYXJ5ICpiaW5hcnlUZXJtaW5hbCA9IG5v
ZGUtPmdldEV4cHJlc3Npb24oKS0+Z2V0QXNCaW5hcnlOb2RlKCk7Ci0gICAgICAgIFRJbnRlcm1V
bmFyeSAqdW5hcnlUZXJtaW5hbCA9IG5vZGUtPmdldEV4cHJlc3Npb24oKS0+Z2V0QXNVbmFyeU5v
ZGUoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChiaW5hcnlUZXJtaW5hbCkKLSAgICAgICAgewot
ICAgICAgICAgICAgVE9wZXJhdG9yIG9wID0gYmluYXJ5VGVybWluYWwtPmdldE9wKCk7Ci0gICAg
ICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqY29uc3RhbnQgPSBiaW5hcnlUZXJtaW5hbC0+
Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0KLSAgICAgICAgICAgIGlmIChjb25z
dGFudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29uc3RhbnQtPmdldEJh
c2ljVHlwZSgpID09IEVidEludCAmJiBjb25zdGFudC0+Z2V0Tm9taW5hbFNpemUoKSA9PSAxKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVlID0gY29uc3Rh
bnQtPmdldElDb25zdCgwKTsKLQotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBFT3BBZGRBc3Np
Z246IGluY3JlbWVudCA9IHZhbHVlOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBFT3BTdWJBc3NpZ246IGluY3JlbWVudCA9IC12YWx1ZTsgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5JTVBMRU1FTlRFRCgpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVs
c2UgaWYgKHVuYXJ5VGVybWluYWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFRPcGVyYXRvciBv
cCA9IHVuYXJ5VGVybWluYWwtPmdldE9wKCk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAob3ApCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDogaW5jcmVt
ZW50ID0gMTsgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6IGlu
Y3JlbWVudCA9IC0xOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6
ICBpbmNyZW1lbnQgPSAxOyAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRU9wUHJlRGVjcmVt
ZW50OiAgaW5jcmVtZW50ID0gLTE7IGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTklN
UExFTUVOVEVEKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
aW5kZXggIT0gTlVMTCAmJiBjb21wYXJhdG9yICE9IEVPcE51bGwgJiYgaW5jcmVtZW50ICE9IDAp
Ci0gICAgewotICAgICAgICBpZiAoY29tcGFyYXRvciA9PSBFT3BMZXNzVGhhbkVxdWFsKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBjb21wYXJhdG9yID0gRU9wTGVzc1RoYW47Ci0gICAgICAgICAg
ICBsaW1pdCArPSAxOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNvbXBhcmF0b3IgPT0gRU9w
TGVzc1RoYW4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBpdGVyYXRpb25zID0gKGxpbWl0
IC0gaW5pdGlhbCkgLyBpbmNyZW1lbnQ7Ci0KLSAgICAgICAgICAgIGlmIChpdGVyYXRpb25zIDw9
IE1BWF9MT09QX0lURVJBVElPTlMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAgIC8vIE5vdCBhbiBleGNlc3NpdmUgbG9vcAotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpyZXN0b3JlSW5kZXggPSBtRXhjZXNzaXZlTG9vcElu
ZGV4OwotICAgICAgICAgICAgbUV4Y2Vzc2l2ZUxvb3BJbmRleCA9IGluZGV4OwotCi0gICAgICAg
ICAgICBvdXQgPDwgIntpbnQgIjsKLSAgICAgICAgICAgIGluZGV4LT50cmF2ZXJzZSh0aGlzKTsK
LSAgICAgICAgICAgIG91dCA8PCAiO1xuIgotICAgICAgICAgICAgICAgICAgICJib29sIEJyZWFr
IjsKLSAgICAgICAgICAgIGluZGV4LT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgIG91dCA8
PCAiID0gZmFsc2U7XG4iOwotCi0gICAgICAgICAgICBib29sIGZpcnN0TG9vcEZyYWdtZW50ID0g
dHJ1ZTsKLQotICAgICAgICAgICAgd2hpbGUgKGl0ZXJhdGlvbnMgPiAwKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGludCBjbGFtcGVkTGltaXQgPSBpbml0aWFsICsgaW5jcmVtZW50
ICogc3RkOjptaW4oTUFYX0xPT1BfSVRFUkFUSU9OUywgaXRlcmF0aW9ucyk7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoIWZpcnN0TG9vcEZyYWdtZW50KQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgb3V0IDw8ICJpZiAoIUJyZWFrIjsKLSAgICAgICAgICAgICAgICAgICAg
aW5kZXgtPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIikge1xu
IjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoaXRlcmF0aW9ucyA8
PSBNQVhfTE9PUF9JVEVSQVRJT05TKSAgIC8vIExhc3QgbG9vcCBmcmFnbWVudAotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbUV4Y2Vzc2l2ZUxvb3BJbmRleCA9IE5VTEw7
ICAgLy8gU3RvcHMgc2V0dGluZyB0aGUgQnJlYWsgZmxhZwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBmb3IoaW50IGluZGV4ID0gaW5pdGlh
bDsgaW5kZXggPCBjbGFtcGVkTGltaXQ7IGluZGV4ICs9IGluY3JlbWVudCkKLQotICAgICAgICAg
ICAgICAgIG91dCA8PCAiZm9yKCI7Ci0gICAgICAgICAgICAgICAgaW5kZXgtPnRyYXZlcnNlKHRo
aXMpOwotICAgICAgICAgICAgICAgIG91dCA8PCAiID0gIjsKLSAgICAgICAgICAgICAgICBvdXQg
PDwgaW5pdGlhbDsKLQotICAgICAgICAgICAgICAgIG91dCA8PCAiOyAiOwotICAgICAgICAgICAg
ICAgIGluZGV4LT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIiA8ICI7
Ci0gICAgICAgICAgICAgICAgb3V0IDw8IGNsYW1wZWRMaW1pdDsKLQotICAgICAgICAgICAgICAg
IG91dCA8PCAiOyAiOwotICAgICAgICAgICAgICAgIGluZGV4LT50cmF2ZXJzZSh0aGlzKTsKLSAg
ICAgICAgICAgICAgICBvdXQgPDwgIiArPSAiOwotICAgICAgICAgICAgICAgIG91dCA8PCBpbmNy
ZW1lbnQ7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIpXG4iOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0TGluZSgpLmZpcnN0
X2xpbmUpOwotICAgICAgICAgICAgICAgIG91dCA8PCAie1xuIjsKLQotICAgICAgICAgICAgICAg
IGlmIChub2RlLT5nZXRCb2R5KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBub2RlLT5nZXRCb2R5KCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0TGluZSgpLmZp
cnN0X2xpbmUpOwotICAgICAgICAgICAgICAgIG91dCA8PCAiO31cbiI7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoIWZpcnN0TG9vcEZyYWdtZW50KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgb3V0IDw8ICJ9XG4iOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIGZpcnN0TG9vcEZyYWdtZW50ID0gZmFsc2U7Ci0KLSAgICAgICAgICAgICAgICBpbml0
aWFsICs9IE1BWF9MT09QX0lURVJBVElPTlMgKiBpbmNyZW1lbnQ7Ci0gICAgICAgICAgICAgICAg
aXRlcmF0aW9ucyAtPSBNQVhfTE9PUF9JVEVSQVRJT05TOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBvdXQgPDwgIn0iOwotCi0gICAgICAgICAgICBtRXhjZXNzaXZl
TG9vcEluZGV4ID0gcmVzdG9yZUluZGV4OwotCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgICAgICBlbHNlIFVOSU1QTEVNRU5URUQoKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gZmFsc2U7ICAgLy8gTm90IGhhbmRsZWQgYXMgYW4gZXhjZXNzaXZlIGxvb3AKLX0KLQotdm9p
ZCBPdXRwdXRITFNMOjpvdXRwdXRUcmlwbGV0KFZpc2l0IHZpc2l0LCBjb25zdCBUU3RyaW5nICZw
cmVTdHJpbmcsIGNvbnN0IFRTdHJpbmcgJmluU3RyaW5nLCBjb25zdCBUU3RyaW5nICZwb3N0U3Ry
aW5nKQotewotICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OwotCi0gICAgaWYgKHZpc2l0
ID09IFByZVZpc2l0KQotICAgIHsKLSAgICAgICAgb3V0IDw8IHByZVN0cmluZzsKLSAgICB9Ci0g
ICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCkKLSAgICB7Ci0gICAgICAgIG91dCA8PCBpblN0
cmluZzsKLSAgICB9Ci0gICAgZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZpc2l0KQotICAgIHsKLSAg
ICAgICAgb3V0IDw8IHBvc3RTdHJpbmc7Ci0gICAgfQotfQotCi12b2lkIE91dHB1dEhMU0w6Om91
dHB1dExpbmVEaXJlY3RpdmUoaW50IGxpbmUpCi17Ci0gICAgaWYgKChtQ29udGV4dC5jb21waWxl
T3B0aW9ucyAmIFNIX0xJTkVfRElSRUNUSVZFUykgJiYgKGxpbmUgPiAwKSkKLSAgICB7Ci0gICAg
ICAgIG1Cb2R5IDw8ICJcbiI7Ci0gICAgICAgIG1Cb2R5IDw8ICIjbGluZSAiIDw8IGxpbmU7Ci0K
LSAgICAgICAgaWYgKG1Db250ZXh0LnNvdXJjZVBhdGgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG1Cb2R5IDw8ICIgXCIiIDw8IG1Db250ZXh0LnNvdXJjZVBhdGggPDwgIlwiIjsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgbUJvZHkgPDwgIlxuIjsKLSAgICB9Ci19Ci0KLVRTdHJpbmcg
T3V0cHV0SExTTDo6YXJndW1lbnRTdHJpbmcoY29uc3QgVEludGVybVN5bWJvbCAqc3ltYm9sKQot
ewotICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gc3ltYm9sLT5nZXRRdWFsaWZpZXIoKTsKLSAg
ICBjb25zdCBUVHlwZSAmdHlwZSA9IHN5bWJvbC0+Z2V0VHlwZSgpOwotICAgIFRTdHJpbmcgbmFt
ZSA9IHN5bWJvbC0+Z2V0U3ltYm9sKCk7Ci0KLSAgICBpZiAobmFtZS5lbXB0eSgpKSAgIC8vIEhM
U0wgZGVtYW5kcyBuYW1lZCBhcmd1bWVudHMsIGFsc28gZm9yIHByb3RvdHlwZXMKLSAgICB7Ci0g
ICAgICAgIG5hbWUgPSAieCIgKyBzdHIobVVuaXF1ZUluZGV4KyspOwotICAgIH0KLSAgICBlbHNl
Ci0gICAgewotICAgICAgICBuYW1lID0gZGVjb3JhdGUobmFtZSk7Ci0gICAgfQotCi0gICAgaWYg
KG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQgJiYgSXNTYW1wbGVyKHR5cGUuZ2V0QmFz
aWNUeXBlKCkpKQotICAgIHsKLSAgICAgICByZXR1cm4gcXVhbGlmaWVyU3RyaW5nKHF1YWxpZmll
cikgKyAiICIgKyB0ZXh0dXJlU3RyaW5nKHR5cGUpICsgIiB0ZXh0dXJlXyIgKyBuYW1lICsgYXJy
YXlTdHJpbmcodHlwZSkgKyAiLCAiICsKLSAgICAgICAgICAgICAgcXVhbGlmaWVyU3RyaW5nKHF1
YWxpZmllcikgKyAiIFNhbXBsZXJTdGF0ZSBzYW1wbGVyXyIgKyBuYW1lICsgYXJyYXlTdHJpbmco
dHlwZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpICsg
IiAiICsgdHlwZVN0cmluZyh0eXBlKSArICIgIiArIG5hbWUgKyBhcnJheVN0cmluZyh0eXBlKTsK
LX0KLQotVFN0cmluZyBPdXRwdXRITFNMOjpxdWFsaWZpZXJTdHJpbmcoVFF1YWxpZmllciBxdWFs
aWZpZXIpCi17Ci0gICAgc3dpdGNoKHF1YWxpZmllcikKLSAgICB7Ci0gICAgICBjYXNlIEV2cUlu
OiAgICAgICAgICAgIHJldHVybiAiaW4iOwotICAgICAgY2FzZSBFdnFPdXQ6ICAgICAgICAgICBy
ZXR1cm4gIm91dCI7Ci0gICAgICBjYXNlIEV2cUluT3V0OiAgICAgICAgIHJldHVybiAiaW5vdXQi
OwotICAgICAgY2FzZSBFdnFDb25zdFJlYWRPbmx5OiByZXR1cm4gImNvbnN0IjsKLSAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuICIiOwotfQotCi1UU3Ry
aW5nIE91dHB1dEhMU0w6OnR5cGVTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpCi17Ci0gICAgaWYg
KHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQotICAgIHsKLSAgICAgICAgY29uc3Qg
VFN0cmluZyYgdHlwZU5hbWUgPSB0eXBlLmdldFN0cnVjdCgpLT5uYW1lKCk7Ci0gICAgICAgIGlm
ICh0eXBlTmFtZSAhPSAiIikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHN0cnVjdExv
b2t1cCh0eXBlTmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSAgIC8vIE5hbWVsZXNzIHN0
cnVjdHVyZSwgZGVmaW5lIGluIHBsYWNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IFRG
aWVsZExpc3QgJmZpZWxkcyA9IHR5cGUuZ2V0U3RydWN0KCktPmZpZWxkcygpOwotCi0gICAgICAg
ICAgICBUU3RyaW5nIHN0cmluZyA9ICJzdHJ1Y3RcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIntcbiI7Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
ZmllbGRzLnNpemUoKTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0
IFRGaWVsZCAqZmllbGQgPSBmaWVsZHNbaV07Ci0KLSAgICAgICAgICAgICAgICBzdHJpbmcgKz0g
IiAgICAiICsgdHlwZVN0cmluZygqZmllbGQtPnR5cGUoKSkgKyAiICIgKyBkZWNvcmF0ZShmaWVs
ZC0+bmFtZSgpKSArIGFycmF5U3RyaW5nKCpmaWVsZC0+dHlwZSgpKSArICI7XG4iOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBzdHJpbmcgKz0gIn0gIjsKLQotICAgICAgICAgICAgcmV0
dXJuIHN0cmluZzsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlLmlzTWF0cml4
KCkpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKLSAgICAg
ICAgewotICAgICAgICAgIGNhc2UgMjogcmV0dXJuICJmbG9hdDJ4MiI7Ci0gICAgICAgICAgY2Fz
ZSAzOiByZXR1cm4gImZsb2F0M3gzIjsKLSAgICAgICAgICBjYXNlIDQ6IHJldHVybiAiZmxvYXQ0
eDQiOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAo
dHlwZS5nZXRCYXNpY1R5cGUoKSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6
Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gImZsb2F0IjsKLSAgICAgICAgICAgICAg
Y2FzZSAyOiByZXR1cm4gImZsb2F0MiI7Ci0gICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuICJm
bG9hdDMiOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiAiZmxvYXQ0IjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICBjYXNlIEVidEludDoKLSAgICAgICAgICAgIHN3aXRjaCAodHlwZS5n
ZXROb21pbmFsU2l6ZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDE6IHJl
dHVybiAiaW50IjsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gImludDIiOwotICAgICAg
ICAgICAgICBjYXNlIDM6IHJldHVybiAiaW50MyI7Ci0gICAgICAgICAgICAgIGNhc2UgNDogcmV0
dXJuICJpbnQ0IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIEVidEJvb2w6Ci0gICAg
ICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gImJvb2wiOwotICAgICAgICAgICAgICBjYXNlIDI6
IHJldHVybiAiYm9vbDIiOwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiAiYm9vbDMiOwot
ICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiAiYm9vbDQiOwotICAgICAgICAgICAgfQotICAg
ICAgICAgIGNhc2UgRWJ0Vm9pZDoKLSAgICAgICAgICAgIHJldHVybiAidm9pZCI7Ci0gICAgICAg
ICAgY2FzZSBFYnRTYW1wbGVyMkQ6Ci0gICAgICAgICAgICByZXR1cm4gInNhbXBsZXIyRCI7Ci0g
ICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKLSAgICAgICAgICAgIHJldHVybiAic2FtcGxl
ckNVQkUiOwotICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOgotICAgICAgICAg
ICAgcmV0dXJuICJzYW1wbGVyMkQiOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgcmV0dXJu
ICI8dW5rbm93biB0eXBlPiI7Ci19Ci0KLVRTdHJpbmcgT3V0cHV0SExTTDo6dGV4dHVyZVN0cmlu
Zyhjb25zdCBUVHlwZSAmdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUuZ2V0QmFzaWNUeXBlKCkp
Ci0gICAgewotICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6Ci0gICAgICAgIHJldHVybiAiVGV4dHVy
ZTJEIjsKLSAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6Ci0gICAgICAgIHJldHVybiAiVGV4dHVy
ZUN1YmUiOwotICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6Ci0gICAgICAgIHJldHVy
biAiVGV4dHVyZTJEIjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQot
ICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgcmV0dXJuICI8dW5rbm93biB0ZXh0dXJlIHR5cGU+IjsK
LX0KLQotVFN0cmluZyBPdXRwdXRITFNMOjphcnJheVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSkK
LXsKLSAgICBpZiAoIXR5cGUuaXNBcnJheSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuICIiOwot
ICAgIH0KLQotICAgIHJldHVybiAiWyIgKyBzdHIodHlwZS5nZXRBcnJheVNpemUoKSkgKyAiXSI7
Ci19Ci0KLVRTdHJpbmcgT3V0cHV0SExTTDo6aW5pdGlhbGl6ZXIoY29uc3QgVFR5cGUgJnR5cGUp
Ci17Ci0gICAgVFN0cmluZyBzdHJpbmc7Ci0KLSAgICBzaXplX3Qgc2l6ZSA9IHR5cGUuZ2V0T2Jq
ZWN0U2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGNvbXBvbmVudCA9IDA7IGNvbXBvbmVudCA8IHNp
emU7IGNvbXBvbmVudCsrKQotICAgIHsKLSAgICAgICAgc3RyaW5nICs9ICIwIjsKLQotICAgICAg
ICBpZiAoY29tcG9uZW50ICsgMSA8IHNpemUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cmlu
ZyArPSAiLCAiOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuICJ7IiArIHN0cmluZyAr
ICJ9IjsKLX0KLQotdm9pZCBPdXRwdXRITFNMOjphZGRDb25zdHJ1Y3Rvcihjb25zdCBUVHlwZSAm
dHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSwgY29uc3QgVEludGVybVNlcXVlbmNlICpwYXJhbWV0
ZXJzKQotewotICAgIGlmIChuYW1lID09ICIiKQotICAgIHsKLSAgICAgICAgcmV0dXJuOyAgIC8v
IE5hbWVsZXNzIHN0cnVjdHVyZXMgZG9uJ3QgaGF2ZSBjb25zdHJ1Y3RvcnMKLSAgICB9Ci0KLSAg
ICBpZiAodHlwZS5nZXRTdHJ1Y3QoKSAmJiBtU3RydWN0TmFtZXMuZmluZChkZWNvcmF0ZShuYW1l
KSkgIT0gbVN0cnVjdE5hbWVzLmVuZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuOyAgIC8vIEFs
cmVhZHkgYWRkZWQKLSAgICB9Ci0KLSAgICBUVHlwZSBjdG9yVHlwZSA9IHR5cGU7Ci0gICAgY3Rv
clR5cGUuY2xlYXJBcnJheW5lc3MoKTsKLSAgICBjdG9yVHlwZS5zZXRQcmVjaXNpb24oRWJwSGln
aCk7Ci0gICAgY3RvclR5cGUuc2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7Ci0KLSAgICBUU3Ry
aW5nIGN0b3JOYW1lID0gdHlwZS5nZXRTdHJ1Y3QoKSA/IGRlY29yYXRlKG5hbWUpIDogbmFtZTsK
LQotICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VFR5cGU+IFBhcmFtZXRlckFycmF5OwotICAgIFBh
cmFtZXRlckFycmF5IGN0b3JQYXJhbWV0ZXJzOwotCi0gICAgaWYgKHR5cGUuZ2V0U3RydWN0KCkp
Ci0gICAgewotICAgICAgICBtU3RydWN0TmFtZXMuaW5zZXJ0KGRlY29yYXRlKG5hbWUpKTsKLQot
ICAgICAgICBUU3RyaW5nIHN0cnVjdHVyZTsKLSAgICAgICAgc3RydWN0dXJlICs9ICJzdHJ1Y3Qg
IiArIGRlY29yYXRlKG5hbWUpICsgIlxuIgotICAgICAgICAgICAgICAgICAgICAgIntcbiI7Ci0K
LSAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gdHlwZS5nZXRTdHJ1Y3QoKS0+Zmll
bGRzKCk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6
ZSgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAqZmllbGQgPSBm
aWVsZHNbaV07Ci0KLSAgICAgICAgICAgIHN0cnVjdHVyZSArPSAiICAgICIgKyB0eXBlU3RyaW5n
KCpmaWVsZC0+dHlwZSgpKSArICIgIiArIGRlY29yYXRlRmllbGQoZmllbGQtPm5hbWUoKSwgdHlw
ZSkgKyBhcnJheVN0cmluZygqZmllbGQtPnR5cGUoKSkgKyAiO1xuIjsKLSAgICAgICAgfQotCi0g
ICAgICAgIHN0cnVjdHVyZSArPSAifTtcbiI7Ci0KLSAgICAgICAgaWYgKHN0ZDo6ZmluZChtU3Ry
dWN0RGVjbGFyYXRpb25zLmJlZ2luKCksIG1TdHJ1Y3REZWNsYXJhdGlvbnMuZW5kKCksIHN0cnVj
dHVyZSkgPT0gbVN0cnVjdERlY2xhcmF0aW9ucy5lbmQoKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgbVN0cnVjdERlY2xhcmF0aW9ucy5wdXNoX2JhY2soc3RydWN0dXJlKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgaSsr
KQotICAgICAgICB7Ci0gICAgICAgICAgICBjdG9yUGFyYW1ldGVycy5wdXNoX2JhY2soKmZpZWxk
c1tpXS0+dHlwZSgpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChwYXJhbWV0ZXJz
KQotICAgIHsKLSAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIHBh
cmFtZXRlciA9IHBhcmFtZXRlcnMtPmJlZ2luKCk7IHBhcmFtZXRlciAhPSBwYXJhbWV0ZXJzLT5l
bmQoKTsgcGFyYW1ldGVyKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGN0b3JQYXJhbWV0ZXJz
LnB1c2hfYmFjaygoKnBhcmFtZXRlciktPmdldEFzVHlwZWQoKS0+Z2V0VHlwZSgpKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICBUU3RyaW5nIGNvbnN0
cnVjdG9yOwotCi0gICAgaWYgKGN0b3JUeXBlLmdldFN0cnVjdCgpKQotICAgIHsKLSAgICAgICAg
Y29uc3RydWN0b3IgKz0gY3Rvck5hbWUgKyAiICIgKyBjdG9yTmFtZSArICJfY3RvcigiOwotICAg
IH0KLSAgICBlbHNlICAgLy8gQnVpbHQtaW4gdHlwZQotICAgIHsKLSAgICAgICAgY29uc3RydWN0
b3IgKz0gdHlwZVN0cmluZyhjdG9yVHlwZSkgKyAiICIgKyBjdG9yTmFtZSArICIoIjsKLSAgICB9
Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBwYXJhbWV0ZXIgPSAwOyBwYXJhbWV0ZXIgPCBjdG9y
UGFyYW1ldGVycy5zaXplKCk7IHBhcmFtZXRlcisrKQotICAgIHsKLSAgICAgICAgY29uc3QgVFR5
cGUgJnR5cGUgPSBjdG9yUGFyYW1ldGVyc1twYXJhbWV0ZXJdOwotCi0gICAgICAgIGNvbnN0cnVj
dG9yICs9IHR5cGVTdHJpbmcodHlwZSkgKyAiIHgiICsgc3RyKHBhcmFtZXRlcikgKyBhcnJheVN0
cmluZyh0eXBlKTsKLQotICAgICAgICBpZiAocGFyYW1ldGVyIDwgY3RvclBhcmFtZXRlcnMuc2l6
ZSgpIC0gMSkKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gIiwgIjsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGNvbnN0cnVjdG9yICs9ICIpXG4iCi0gICAgICAgICAgICAg
ICAgICAgIntcbiI7Ci0KLSAgICBpZiAoY3RvclR5cGUuZ2V0U3RydWN0KCkpCi0gICAgewotICAg
ICAgICBjb25zdHJ1Y3RvciArPSAiICAgICIgKyBjdG9yTmFtZSArICIgc3RydWN0dXJlID0geyI7
Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGNvbnN0cnVjdG9yICs9ICIgICAgcmV0
dXJuICIgKyB0eXBlU3RyaW5nKGN0b3JUeXBlKSArICIoIjsKLSAgICB9Ci0KLSAgICBpZiAoY3Rv
clR5cGUuaXNNYXRyaXgoKSAmJiBjdG9yUGFyYW1ldGVycy5zaXplKCkgPT0gMSkKLSAgICB7Ci0g
ICAgICAgIGludCBkaW0gPSBjdG9yVHlwZS5nZXROb21pbmFsU2l6ZSgpOwotICAgICAgICBjb25z
dCBUVHlwZSAmcGFyYW1ldGVyID0gY3RvclBhcmFtZXRlcnNbMF07Ci0KLSAgICAgICAgaWYgKHBh
cmFtZXRlci5pc1NjYWxhcigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCByb3cg
PSAwOyByb3cgPCBkaW07IHJvdysrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZv
ciAoaW50IGNvbCA9IDA7IGNvbCA8IGRpbTsgY29sKyspCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSBUU3RyaW5nKChyb3cgPT0gY29sKSA/ICJ4
MCIgOiAiMC4wIik7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBp
ZiAocm93IDwgZGltIC0gMSB8fCBjb2wgPCBkaW0gLSAxKQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSAiLCAiOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIGVsc2UgaWYgKHBhcmFtZXRlci5pc01hdHJpeCgpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBkaW07IHJvdysrKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IGRpbTsgY29sKyspCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAocm93IDwgcGFyYW1ldGVy
LmdldE5vbWluYWxTaXplKCkgJiYgY29sIDwgcGFyYW1ldGVyLmdldE5vbWluYWxTaXplKCkpCi0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9y
ICs9IFRTdHJpbmcoIngwIikgKyAiWyIgKyBzdHIocm93KSArICJdIiArICJbIiArIHN0cihjb2wp
ICsgIl0iOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0
b3IgKz0gVFN0cmluZygocm93ID09IGNvbCkgPyAiMS4wIiA6ICIwLjAiKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChyb3cgPCBkaW0gLSAxIHx8IGNv
bCA8IGRpbSAtIDEpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0cnVjdG9yICs9ICIsICI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBzaXplX3QgcmVtYWluaW5n
Q29tcG9uZW50cyA9IGN0b3JUeXBlLmdldE9iamVjdFNpemUoKTsKLSAgICAgICAgc2l6ZV90IHBh
cmFtZXRlckluZGV4ID0gMDsKLQotICAgICAgICB3aGlsZSAocmVtYWluaW5nQ29tcG9uZW50cyA+
IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IFRUeXBlICZwYXJhbWV0ZXIgPSBjdG9y
UGFyYW1ldGVyc1twYXJhbWV0ZXJJbmRleF07Ci0gICAgICAgICAgICBjb25zdCBzaXplX3QgcGFy
YW1ldGVyU2l6ZSA9IHBhcmFtZXRlci5nZXRPYmplY3RTaXplKCk7Ci0gICAgICAgICAgICBib29s
IG1vcmVQYXJhbWV0ZXJzID0gcGFyYW1ldGVySW5kZXggKyAxIDwgY3RvclBhcmFtZXRlcnMuc2l6
ZSgpOwotCi0gICAgICAgICAgICBjb25zdHJ1Y3RvciArPSAieCIgKyBzdHIoc3RhdGljX2Nhc3Q8
aW50PihwYXJhbWV0ZXJJbmRleCkpOwotCi0gICAgICAgICAgICBpZiAocGFyYW1ldGVyLmlzU2Nh
bGFyKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHBhcmFtZXRlclNp
emUgPD0gcmVtYWluaW5nQ29tcG9uZW50cyk7Ci0gICAgICAgICAgICAgICAgcmVtYWluaW5nQ29t
cG9uZW50cyAtPSBwYXJhbWV0ZXJTaXplOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxz
ZSBpZiAocGFyYW1ldGVyLmlzVmVjdG9yKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgaWYgKHJlbWFpbmluZ0NvbXBvbmVudHMgPT0gcGFyYW1ldGVyU2l6ZSB8fCBtb3JlUGFyYW1l
dGVycykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChwYXJh
bWV0ZXJTaXplIDw9IHJlbWFpbmluZ0NvbXBvbmVudHMpOwotICAgICAgICAgICAgICAgICAgICBy
ZW1haW5pbmdDb21wb25lbnRzIC09IHBhcmFtZXRlclNpemU7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlbWFpbmluZ0NvbXBvbmVudHMgPCBzdGF0aWNfY2Fz
dDxzaXplX3Q+KHBhcmFtZXRlci5nZXROb21pbmFsU2l6ZSgpKSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocmVtYWluaW5nQ29tcG9uZW50cykKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogY29uc3RydWN0
b3IgKz0gIi54IjsgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBjb25z
dHJ1Y3RvciArPSAiLnh5IjsgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6
IGNvbnN0cnVjdG9yICs9ICIueHl6IjsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgNDogY29uc3RydWN0b3IgKz0gIi54eXp3IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIHJlbWFpbmluZ0NvbXBvbmVudHMgPSAwOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlIGlmIChwYXJhbWV0ZXIuaXNNYXRyaXgoKSB8fCBwYXJhbWV0ZXIuZ2V0
U3RydWN0KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHJlbWFpbmlu
Z0NvbXBvbmVudHMgPT0gcGFyYW1ldGVyU2l6ZSB8fCBtb3JlUGFyYW1ldGVycyk7Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKHBhcmFtZXRlclNpemUgPD0gcmVtYWluaW5nQ29tcG9uZW50cyk7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcmVtYWluaW5nQ29tcG9uZW50cyAtPSBw
YXJhbWV0ZXJTaXplOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJM
RSgpOwotCi0gICAgICAgICAgICBpZiAobW9yZVBhcmFtZXRlcnMpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcGFyYW1ldGVySW5kZXgrKzsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKHJlbWFpbmluZ0NvbXBvbmVudHMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgY29uc3RydWN0b3IgKz0gIiwgIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmIChjdG9yVHlwZS5nZXRTdHJ1Y3QoKSkKLSAgICB7Ci0gICAgICAgIGNvbnN0
cnVjdG9yICs9ICJ9O1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiBzdHJ1
Y3R1cmU7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iOwotICAgIH0KLSAgICBlbHNl
Ci0gICAgewotICAgICAgICBjb25zdHJ1Y3RvciArPSAiKTtcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIn1cbiI7Ci0gICAgfQotCi0gICAgbUNvbnN0cnVjdG9ycy5pbnNlcnQoY29uc3RydWN0
b3IpOwotfQotCi1jb25zdCBDb25zdGFudFVuaW9uICpPdXRwdXRITFNMOjp3cml0ZUNvbnN0YW50
VW5pb24oY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IENvbnN0YW50VW5pb24gKmNvbnN0VW5pb24p
Ci17Ci0gICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7Ci0KLSAgICBpZiAodHlwZS5nZXRC
YXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCi0gICAgewotICAgICAgICBvdXQgPDwgc3RydWN0TG9v
a3VwKHR5cGUuZ2V0U3RydWN0KCktPm5hbWUoKSkgKyAiX2N0b3IoIjsKLSAgICAgICAgCi0gICAg
ICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHR5cGUuZ2V0U3RydWN0KCktPmZpZWxkcygp
OwotCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgaSsrKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBUVHlwZSAqZmllbGRUeXBlID0gZmllbGRzW2ld
LT50eXBlKCk7Ci0KLSAgICAgICAgICAgIGNvbnN0VW5pb24gPSB3cml0ZUNvbnN0YW50VW5pb24o
KmZpZWxkVHlwZSwgY29uc3RVbmlvbik7Ci0KLSAgICAgICAgICAgIGlmIChpICE9IGZpZWxkcy5z
aXplKCkgLSAxKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgb3V0IDw8ICIpIjsKLSAgICB9Ci0g
ICAgZWxzZQotICAgIHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSB0eXBlLmdldE9iamVjdFNpemUo
KTsKLSAgICAgICAgYm9vbCB3cml0ZVR5cGUgPSBzaXplID4gMTsKLSAgICAgICAgCi0gICAgICAg
IGlmICh3cml0ZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCB0eXBlU3RyaW5n
KHR5cGUpIDw8ICIoIjsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZTsgaSsrLCBjb25zdFVuaW9uKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRj
aCAoY29uc3RVbmlvbi0+Z2V0VHlwZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBj
YXNlIEVidEZsb2F0OiBvdXQgPDwgc3RkOjptaW4oRkxUX01BWCwgc3RkOjptYXgoLUZMVF9NQVgs
IGNvbnN0VW5pb24tPmdldEZDb25zdCgpKSk7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVi
dEludDogICBvdXQgPDwgY29uc3RVbmlvbi0+Z2V0SUNvbnN0KCk7IGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEVidEJvb2w6ICBvdXQgPDwgY29uc3RVbmlvbi0+Z2V0QkNvbnN0KCk7IGJyZWFr
OwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBpZiAoaSAhPSBzaXplIC0gMSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBvdXQgPDwgIiwgIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IGlmICh3cml0ZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAiKSI7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gY29uc3RVbmlvbjsKLX0KLQotVFN0cmluZyBPdXRw
dXRITFNMOjpzY29wZVN0cmluZyh1bnNpZ25lZCBpbnQgZGVwdGhMaW1pdCkKLXsKLSAgICBUU3Ry
aW5nIHN0cmluZzsKLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbVNjb3BlQnJh
Y2tldC5zaXplKCkgJiYgaSA8IGRlcHRoTGltaXQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHN0cmlu
ZyArPSAiXyIgKyBzdHIoaSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0cmluZzsKLX0KLQotVFN0
cmluZyBPdXRwdXRITFNMOjpzY29wZWRTdHJ1Y3QoY29uc3QgVFN0cmluZyAmdHlwZU5hbWUpCi17
Ci0gICAgaWYgKHR5cGVOYW1lID09ICIiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHR5cGVOYW1l
OwotICAgIH0KLQotICAgIHJldHVybiB0eXBlTmFtZSArIHNjb3BlU3RyaW5nKG1TY29wZURlcHRo
KTsKLX0KLQotVFN0cmluZyBPdXRwdXRITFNMOjpzdHJ1Y3RMb29rdXAoY29uc3QgVFN0cmluZyAm
dHlwZU5hbWUpCi17Ci0gICAgZm9yIChpbnQgZGVwdGggPSBtU2NvcGVEZXB0aDsgZGVwdGggPj0g
MDsgZGVwdGgtLSkKLSAgICB7Ci0gICAgICAgIFRTdHJpbmcgc2NvcGVkTmFtZSA9IGRlY29yYXRl
KHR5cGVOYW1lICsgc2NvcGVTdHJpbmcoZGVwdGgpKTsKLQotICAgICAgICBmb3IgKFN0cnVjdE5h
bWVzOjppdGVyYXRvciBzdHJ1Y3ROYW1lID0gbVN0cnVjdE5hbWVzLmJlZ2luKCk7IHN0cnVjdE5h
bWUgIT0gbVN0cnVjdE5hbWVzLmVuZCgpOyBzdHJ1Y3ROYW1lKyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmICgqc3RydWN0TmFtZSA9PSBzY29wZWROYW1lKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybiBzY29wZWROYW1lOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotCi0gICAgVU5SRUFDSEFCTEUoKTsgICAvLyBTaG91bGQgaGF2ZSBmb3VuZCBhIG1h
dGNoaW5nIGNvbnN0cnVjdG9yCi0KLSAgICByZXR1cm4gdHlwZU5hbWU7Ci19Ci0KLVRTdHJpbmcg
T3V0cHV0SExTTDo6ZGVjb3JhdGUoY29uc3QgVFN0cmluZyAmc3RyaW5nKQotewotICAgIGlmIChz
dHJpbmcuY29tcGFyZSgwLCAzLCAiZ2xfIikgIT0gMCAmJiBzdHJpbmcuY29tcGFyZSgwLCAzLCAi
ZHhfIikgIT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAiXyIgKyBzdHJpbmc7Ci0gICAgfQot
ICAgIAotICAgIHJldHVybiBzdHJpbmc7Ci19Ci0KLVRTdHJpbmcgT3V0cHV0SExTTDo6ZGVjb3Jh
dGVVbmlmb3JtKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFR5cGUgJnR5cGUpCi17Ci0g
ICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U2FtcGxlckV4dGVybmFsT0VTKQotICAg
IHsKLSAgICAgICAgcmV0dXJuICJleF8iICsgc3RyaW5nOwotICAgIH0KLSAgICAKLSAgICByZXR1
cm4gZGVjb3JhdGUoc3RyaW5nKTsKLX0KLQotVFN0cmluZyBPdXRwdXRITFNMOjpkZWNvcmF0ZUZp
ZWxkKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFR5cGUgJnN0cnVjdHVyZSkKLXsKLSAg
ICBpZiAoc3RydWN0dXJlLmdldFN0cnVjdCgpLT5uYW1lKCkuY29tcGFyZSgwLCAzLCAiZ2xfIikg
IT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBkZWNvcmF0ZShzdHJpbmcpOwotICAgIH0KLQot
ICAgIHJldHVybiBzdHJpbmc7Ci19Ci0KLVRTdHJpbmcgT3V0cHV0SExTTDo6cmVnaXN0ZXJTdHJp
bmcoVEludGVybVN5bWJvbCAqb3BlcmFuZCkKLXsKLSAgICBBU1NFUlQob3BlcmFuZC0+Z2V0UXVh
bGlmaWVyKCkgPT0gRXZxVW5pZm9ybSk7Ci0KLSAgICBpZiAoSXNTYW1wbGVyKG9wZXJhbmQtPmdl
dEJhc2ljVHlwZSgpKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAicyIgKyBzdHIoc2FtcGxlclJl
Z2lzdGVyKG9wZXJhbmQpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gImMiICsgc3RyKHVuaWZvcm1S
ZWdpc3RlcihvcGVyYW5kKSk7Ci19Ci0KLWludCBPdXRwdXRITFNMOjpzYW1wbGVyUmVnaXN0ZXIo
VEludGVybVN5bWJvbCAqc2FtcGxlcikKLXsKLSAgICBjb25zdCBUVHlwZSAmdHlwZSA9IHNhbXBs
ZXItPmdldFR5cGUoKTsKLSAgICBBU1NFUlQoSXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkp
KTsKLQotICAgIGludCBpbmRleCA9IG1TYW1wbGVyUmVnaXN0ZXI7Ci0gICAgbVNhbXBsZXJSZWdp
c3RlciArPSBzYW1wbGVyLT50b3RhbFJlZ2lzdGVyQ291bnQoKTsKLQotICAgIGRlY2xhcmVVbmlm
b3JtKHR5cGUsIHNhbXBsZXItPmdldFN5bWJvbCgpLCBpbmRleCk7Ci0KLSAgICByZXR1cm4gaW5k
ZXg7Ci19Ci0KLWludCBPdXRwdXRITFNMOjp1bmlmb3JtUmVnaXN0ZXIoVEludGVybVN5bWJvbCAq
dW5pZm9ybSkKLXsKLSAgICBjb25zdCBUVHlwZSAmdHlwZSA9IHVuaWZvcm0tPmdldFR5cGUoKTsK
LSAgICBBU1NFUlQoIUlzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSk7Ci0KLSAgICBpbnQg
aW5kZXggPSBtVW5pZm9ybVJlZ2lzdGVyOwotICAgIG1Vbmlmb3JtUmVnaXN0ZXIgKz0gdW5pZm9y
bS0+dG90YWxSZWdpc3RlckNvdW50KCk7Ci0KLSAgICBkZWNsYXJlVW5pZm9ybSh0eXBlLCB1bmlm
b3JtLT5nZXRTeW1ib2woKSwgaW5kZXgpOwotCi0gICAgcmV0dXJuIGluZGV4OwotfQotCi12b2lk
IE91dHB1dEhMU0w6OmRlY2xhcmVVbmlmb3JtKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3Ry
aW5nICZuYW1lLCBpbnQgaW5kZXgpCi17Ci0gICAgVFN0cnVjdHVyZSAqc3RydWN0dXJlID0gdHlw
ZS5nZXRTdHJ1Y3QoKTsKLQotICAgIGlmICghc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgbUFj
dGl2ZVVuaWZvcm1zLnB1c2hfYmFjayhVbmlmb3JtKGdsVmFyaWFibGVUeXBlKHR5cGUpLCBnbFZh
cmlhYmxlUHJlY2lzaW9uKHR5cGUpLCBuYW1lLmNfc3RyKCksIHR5cGUuZ2V0QXJyYXlTaXplKCks
IGluZGV4KSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGNvbnN0IFRGaWVsZExp
c3QgJmZpZWxkcyA9IHN0cnVjdHVyZS0+ZmllbGRzKCk7Ci0KLSAgICAgICAgaWYgKHR5cGUuaXNB
cnJheSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgZWxlbWVudEluZGV4ID0gaW5kZXg7
Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZS5nZXRBcnJheVNpemUoKTsg
aSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBq
IDwgZmllbGRzLnNpemUoKTsgaisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVFR5cGUgJmZpZWxkVHlwZSA9ICpmaWVsZHNbal0tPnR5cGUoKTsKLSAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyB1bmlmb3JtTmFtZSA9IG5hbWUgKyAiWyIgKyBz
dHIoaSkgKyAiXS4iICsgZmllbGRzW2pdLT5uYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgIGRl
Y2xhcmVVbmlmb3JtKGZpZWxkVHlwZSwgdW5pZm9ybU5hbWUsIGVsZW1lbnRJbmRleCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGVsZW1lbnRJbmRleCArPSBmaWVsZFR5cGUudG90YWxSZWdpc3RlckNv
dW50KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGZpZWxkSW5kZXggPSBpbmRleDsK
LQotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKysp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJmZpZWxkVHlwZSA9
ICpmaWVsZHNbaV0tPnR5cGUoKTsKLSAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nIHVuaWZv
cm1OYW1lID0gbmFtZSArICIuIiArIGZpZWxkc1tpXS0+bmFtZSgpOwotICAgICAgICAgICAgICAg
IGRlY2xhcmVVbmlmb3JtKGZpZWxkVHlwZSwgdW5pZm9ybU5hbWUsIGZpZWxkSW5kZXgpOwotICAg
ICAgICAgICAgICAgIGZpZWxkSW5kZXggKz0gZmllbGRUeXBlLnRvdGFsUmVnaXN0ZXJDb3VudCgp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1HTGVudW0gT3V0cHV0SExT
TDo6Z2xWYXJpYWJsZVR5cGUoY29uc3QgVFR5cGUgJnR5cGUpCi17Ci0gICAgaWYgKHR5cGUuZ2V0
QmFzaWNUeXBlKCkgPT0gRWJ0RmxvYXQpCi0gICAgewotICAgICAgICBpZiAodHlwZS5pc1NjYWxh
cigpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRkxPQVQ7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZSBpZiAodHlwZS5pc1ZlY3RvcigpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBzd2l0Y2godHlwZS5nZXROb21pbmFsU2l6ZSgpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICBjYXNlIDI6IHJldHVybiBHTF9GTE9BVF9WRUMyOwotICAgICAgICAgICAgICBjYXNlIDM6
IHJldHVybiBHTF9GTE9BVF9WRUMzOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBHTF9G
TE9BVF9WRUM0OwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHR5cGUuaXNNYXRyaXgoKSkKLSAg
ICAgICAgewotICAgICAgICAgICAgc3dpdGNoKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gR0xfRkxPQVRfTUFUMjsKLSAg
ICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gR0xfRkxPQVRfTUFUMzsKLSAgICAgICAgICAgICAg
Y2FzZSA0OiByZXR1cm4gR0xfRkxPQVRfTUFUNDsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0
SW50KQotICAgIHsKLSAgICAgICAgaWYgKHR5cGUuaXNTY2FsYXIoKSkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIEdMX0lOVDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh0eXBl
LmlzVmVjdG9yKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCh0eXBlLmdldE5vbWlu
YWxTaXplKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIEdM
X0lOVF9WRUMyOwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBHTF9JTlRfVkVDMzsKLSAg
ICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gR0xfSU5UX1ZFQzQ7Ci0gICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlLmdldEJhc2ljVHlw
ZSgpID09IEVidEJvb2wpCi0gICAgewotICAgICAgICBpZiAodHlwZS5pc1NjYWxhcigpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfQk9PTDsKLSAgICAgICAgfQotICAgICAgICBl
bHNlIGlmICh0eXBlLmlzVmVjdG9yKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCh0
eXBlLmdldE5vbWluYWxTaXplKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2Ug
MjogcmV0dXJuIEdMX0JPT0xfVkVDMjsKLSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gR0xf
Qk9PTF9WRUMzOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBHTF9CT09MX1ZFQzQ7Ci0g
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgIH0KLSAgICBlbHNlIGlmICh0
eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFNhbXBsZXIyRCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBHTF9TQU1QTEVSXzJEOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlLmdldEJhc2ljVHlwZSgp
ID09IEVidFNhbXBsZXJDdWJlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX1NBTVBMRVJfQ1VC
RTsKLSAgICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgcmV0dXJuIEdMX05PTkU7
Ci19Ci0KLUdMZW51bSBPdXRwdXRITFNMOjpnbFZhcmlhYmxlUHJlY2lzaW9uKGNvbnN0IFRUeXBl
ICZ0eXBlKQotewotICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidEZsb2F0KQotICAg
IHsKLSAgICAgICAgc3dpdGNoICh0eXBlLmdldFByZWNpc2lvbigpKQotICAgICAgICB7Ci0gICAg
ICAgICAgY2FzZSBFYnBIaWdoOiAgIHJldHVybiBHTF9ISUdIX0ZMT0FUOwotICAgICAgICAgIGNh
c2UgRWJwTWVkaXVtOiByZXR1cm4gR0xfTUVESVVNX0ZMT0FUOwotICAgICAgICAgIGNhc2UgRWJw
TG93OiAgICByZXR1cm4gR0xfTE9XX0ZMT0FUOwotICAgICAgICAgIGNhc2UgRWJwVW5kZWZpbmVk
OgotICAgICAgICAgICAgLy8gU2hvdWxkIGJlIGRlZmluZWQgYXMgdGhlIGRlZmF1bHQgcHJlY2lz
aW9uIGJ5IHRoZSBwYXJzZXIKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50
KQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlLmdldFByZWNpc2lvbigpKQotICAgICAgICB7
Ci0gICAgICAgICAgY2FzZSBFYnBIaWdoOiAgIHJldHVybiBHTF9ISUdIX0lOVDsKLSAgICAgICAg
ICBjYXNlIEVicE1lZGl1bTogcmV0dXJuIEdMX01FRElVTV9JTlQ7Ci0gICAgICAgICAgY2FzZSBF
YnBMb3c6ICAgIHJldHVybiBHTF9MT1dfSU5UOwotICAgICAgICAgIGNhc2UgRWJwVW5kZWZpbmVk
OgotICAgICAgICAgICAgLy8gU2hvdWxkIGJlIGRlZmluZWQgYXMgdGhlIGRlZmF1bHQgcHJlY2lz
aW9uIGJ5IHRoZSBwYXJzZXIKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgLy8gT3RoZXIgdHlwZXMgKGJvb2xlYW4sIHNhbXBsZXIpIGRv
bid0IGhhdmUgYSBwcmVjaXNpb24KLSAgICByZXR1cm4gR0xfTk9ORTsKLX0KLQotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NmE3NmZiOWM3MTRkYmNlODEzYjYzODRlOGJjNDk1
Y2U5OGFjZWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuaAorKysgL2Rl
di9udWxsCkBAIC0xLDE2NyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENP
TVBJTEVSX09VVFBVVEhMU0xfSF8KLSNkZWZpbmUgQ09NUElMRVJfT1VUUFVUSExTTF9IXwotCi0j
aW5jbHVkZSA8bGlzdD4KLSNpbmNsdWRlIDxzZXQ+Ci0jaW5jbHVkZSA8bWFwPgotCi0jZGVmaW5l
IEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLQotI2luY2x1ZGUgImNvbXBpbGVy
L2ludGVybWVkaWF0ZS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlQ29udGV4dC5oIgotI2lu
Y2x1ZGUgImNvbXBpbGVyL1VuaWZvcm0uaCIKLQotbmFtZXNwYWNlIHNoCi17Ci1jbGFzcyBVbmZv
bGRTaG9ydENpcmN1aXQ7Ci0KLWNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZl
cnNlcgotewotICBwdWJsaWM6Ci0gICAgT3V0cHV0SExTTChUUGFyc2VDb250ZXh0ICZjb250ZXh0
LCBjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291cmNlcywgU2hTaGFkZXJPdXRwdXQgb3V0
cHV0VHlwZSk7Ci0gICAgfk91dHB1dEhMU0woKTsKLQotICAgIHZvaWQgb3V0cHV0KCk7Ci0KLSAg
ICBUSW5mb1NpbmtCYXNlICZnZXRCb2R5U3RyZWFtKCk7Ci0gICAgY29uc3QgQWN0aXZlVW5pZm9y
bXMgJmdldFVuaWZvcm1zKCk7Ci0KLSAgICBUU3RyaW5nIHR5cGVTdHJpbmcoY29uc3QgVFR5cGUg
JnR5cGUpOwotICAgIFRTdHJpbmcgdGV4dHVyZVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7Ci0g
ICAgc3RhdGljIFRTdHJpbmcgcXVhbGlmaWVyU3RyaW5nKFRRdWFsaWZpZXIgcXVhbGlmaWVyKTsK
LSAgICBzdGF0aWMgVFN0cmluZyBhcnJheVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7Ci0gICAg
c3RhdGljIFRTdHJpbmcgaW5pdGlhbGl6ZXIoY29uc3QgVFR5cGUgJnR5cGUpOwotICAgIHN0YXRp
YyBUU3RyaW5nIGRlY29yYXRlKGNvbnN0IFRTdHJpbmcgJnN0cmluZyk7ICAgICAgICAgICAgICAg
ICAgICAgIC8vIFByZXBlbmRzIGFuIHVuZGVyc2NvcmUgdG8gYXZvaWQgbmFtaW5nIGNsYXNoZXMK
LSAgICBzdGF0aWMgVFN0cmluZyBkZWNvcmF0ZVVuaWZvcm0oY29uc3QgVFN0cmluZyAmc3RyaW5n
LCBjb25zdCBUVHlwZSAmdHlwZSk7Ci0gICAgc3RhdGljIFRTdHJpbmcgZGVjb3JhdGVGaWVsZChj
b25zdCBUU3RyaW5nICZzdHJpbmcsIGNvbnN0IFRUeXBlICZzdHJ1Y3R1cmUpOwotCi0gIHByb3Rl
Y3RlZDoKLSAgICB2b2lkIGhlYWRlcigpOwotCi0gICAgLy8gVmlzaXQgQVNUIG5vZGVzIGFuZCBv
dXRwdXQgdGhlaXIgY29kZSB0byB0aGUgYm9keSBzdHJlYW0KLSAgICB2b2lkIHZpc2l0U3ltYm9s
KFRJbnRlcm1TeW1ib2wqKTsKLSAgICB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29u
c3RhbnRVbmlvbiopOwotICAgIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1C
aW5hcnkqKTsKLSAgICBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSop
OwotICAgIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24q
KTsKLSAgICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRl
Kik7Ci0gICAgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKik7Ci0gICAg
Ym9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCopOwotCi0gICAgdm9p
ZCB0cmF2ZXJzZVN0YXRlbWVudHMoVEludGVybU5vZGUgKm5vZGUpOwotICAgIGJvb2wgaXNTaW5n
bGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpOwotICAgIGJvb2wgaGFuZGxlRXhjZXNzaXZl
TG9vcChUSW50ZXJtTG9vcCAqbm9kZSk7Ci0gICAgdm9pZCBvdXRwdXRUcmlwbGV0KFZpc2l0IHZp
c2l0LCBjb25zdCBUU3RyaW5nICZwcmVTdHJpbmcsIGNvbnN0IFRTdHJpbmcgJmluU3RyaW5nLCBj
b25zdCBUU3RyaW5nICZwb3N0U3RyaW5nKTsKLSAgICB2b2lkIG91dHB1dExpbmVEaXJlY3RpdmUo
aW50IGxpbmUpOwotICAgIFRTdHJpbmcgYXJndW1lbnRTdHJpbmcoY29uc3QgVEludGVybVN5bWJv
bCAqc3ltYm9sKTsKLSAgICBpbnQgdmVjdG9yU2l6ZShjb25zdCBUVHlwZSAmdHlwZSkgY29uc3Q7
Ci0KLSAgICB2b2lkIGFkZENvbnN0cnVjdG9yKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3Ry
aW5nICZuYW1lLCBjb25zdCBUSW50ZXJtU2VxdWVuY2UgKnBhcmFtZXRlcnMpOwotICAgIGNvbnN0
IENvbnN0YW50VW5pb24gKndyaXRlQ29uc3RhbnRVbmlvbihjb25zdCBUVHlwZSAmdHlwZSwgY29u
c3QgQ29uc3RhbnRVbmlvbiAqY29uc3RVbmlvbik7Ci0KLSAgICBUU3RyaW5nIHNjb3BlU3RyaW5n
KHVuc2lnbmVkIGludCBkZXB0aExpbWl0KTsKLSAgICBUU3RyaW5nIHNjb3BlZFN0cnVjdChjb25z
dCBUU3RyaW5nICZ0eXBlTmFtZSk7Ci0gICAgVFN0cmluZyBzdHJ1Y3RMb29rdXAoY29uc3QgVFN0
cmluZyAmdHlwZU5hbWUpOwotCi0gICAgVFBhcnNlQ29udGV4dCAmbUNvbnRleHQ7Ci0gICAgY29u
c3QgU2hTaGFkZXJPdXRwdXQgbU91dHB1dFR5cGU7Ci0gICAgVW5mb2xkU2hvcnRDaXJjdWl0ICpt
VW5mb2xkU2hvcnRDaXJjdWl0OwotICAgIGJvb2wgbUluc2lkZUZ1bmN0aW9uOwotCi0gICAgLy8g
T3V0cHV0IHN0cmVhbXMKLSAgICBUSW5mb1NpbmtCYXNlIG1IZWFkZXI7Ci0gICAgVEluZm9TaW5r
QmFzZSBtQm9keTsKLSAgICBUSW5mb1NpbmtCYXNlIG1Gb290ZXI7Ci0KLSAgICB0eXBlZGVmIHN0
ZDo6bWFwPFRTdHJpbmcsIFRJbnRlcm1TeW1ib2wqPiBSZWZlcmVuY2VkU3ltYm9sczsKLSAgICBS
ZWZlcmVuY2VkU3ltYm9scyBtUmVmZXJlbmNlZFVuaWZvcm1zOwotICAgIFJlZmVyZW5jZWRTeW1i
b2xzIG1SZWZlcmVuY2VkQXR0cmlidXRlczsKLSAgICBSZWZlcmVuY2VkU3ltYm9scyBtUmVmZXJl
bmNlZFZhcnlpbmdzOwotCi0gICAgLy8gUGFyYW1ldGVycyBkZXRlcm1pbmluZyB3aGF0IGdvZXMg
aW4gdGhlIGhlYWRlciBvdXRwdXQKLSAgICBib29sIG1Vc2VzVGV4dHVyZTJEOwotICAgIGJvb2wg
bVVzZXNUZXh0dXJlMkRfYmlhczsKLSAgICBib29sIG1Vc2VzVGV4dHVyZTJETG9kOwotICAgIGJv
b2wgbVVzZXNUZXh0dXJlMkRQcm9qOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXM7
Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUyRFByb2pMb2Q7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmVD
dWJlOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZV9iaWFzOwotICAgIGJvb2wgbVVzZXNUZXh0
dXJlQ3ViZUxvZDsKLSAgICBib29sIG1Vc2VzVGV4dHVyZTJETG9kMDsKLSAgICBib29sIG1Vc2Vz
VGV4dHVyZTJETG9kMF9iaWFzOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMDsKLSAg
ICBib29sIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDBfYmlhczsKLSAgICBib29sIG1Vc2VzVGV4dHVy
ZUN1YmVMb2QwOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZUxvZDBfYmlhczsKLSAgICBib29s
IG1Vc2VzRnJhZ0NvbG9yOwotICAgIGJvb2wgbVVzZXNGcmFnRGF0YTsKLSAgICBib29sIG1Vc2Vz
RGVwdGhSYW5nZTsKLSAgICBib29sIG1Vc2VzRnJhZ0Nvb3JkOwotICAgIGJvb2wgbVVzZXNQb2lu
dENvb3JkOwotICAgIGJvb2wgbVVzZXNGcm9udEZhY2luZzsKLSAgICBib29sIG1Vc2VzUG9pbnRT
aXplOwotICAgIGJvb2wgbVVzZXNGcmFnRGVwdGg7Ci0gICAgYm9vbCBtVXNlc1hvcjsKLSAgICBi
b29sIG1Vc2VzTW9kMTsKLSAgICBib29sIG1Vc2VzTW9kMnY7Ci0gICAgYm9vbCBtVXNlc01vZDJm
OwotICAgIGJvb2wgbVVzZXNNb2QzdjsKLSAgICBib29sIG1Vc2VzTW9kM2Y7Ci0gICAgYm9vbCBt
VXNlc01vZDR2OwotICAgIGJvb2wgbVVzZXNNb2Q0ZjsKLSAgICBib29sIG1Vc2VzRmFjZWZvcndh
cmQxOwotICAgIGJvb2wgbVVzZXNGYWNlZm9yd2FyZDI7Ci0gICAgYm9vbCBtVXNlc0ZhY2Vmb3J3
YXJkMzsKLSAgICBib29sIG1Vc2VzRmFjZWZvcndhcmQ0OwotICAgIGJvb2wgbVVzZXNBdGFuMl8x
OwotICAgIGJvb2wgbVVzZXNBdGFuMl8yOwotICAgIGJvb2wgbVVzZXNBdGFuMl8zOwotICAgIGJv
b2wgbVVzZXNBdGFuMl80OwotICAgIGJvb2wgbVVzZXNEaXNjYXJkUmV3cml0aW5nOwotCi0gICAg
aW50IG1OdW1SZW5kZXJUYXJnZXRzOwotCi0gICAgdHlwZWRlZiBzdGQ6OnNldDxUU3RyaW5nPiBD
b25zdHJ1Y3RvcnM7Ci0gICAgQ29uc3RydWN0b3JzIG1Db25zdHJ1Y3RvcnM7Ci0KLSAgICB0eXBl
ZGVmIHN0ZDo6c2V0PFRTdHJpbmc+IFN0cnVjdE5hbWVzOwotICAgIFN0cnVjdE5hbWVzIG1TdHJ1
Y3ROYW1lczsKLQotICAgIHR5cGVkZWYgc3RkOjpsaXN0PFRTdHJpbmc+IFN0cnVjdERlY2xhcmF0
aW9uczsKLSAgICBTdHJ1Y3REZWNsYXJhdGlvbnMgbVN0cnVjdERlY2xhcmF0aW9uczsKLQotICAg
IHR5cGVkZWYgc3RkOjp2ZWN0b3I8aW50PiBTY29wZUJyYWNrZXQ7Ci0gICAgU2NvcGVCcmFja2V0
IG1TY29wZUJyYWNrZXQ7Ci0gICAgdW5zaWduZWQgaW50IG1TY29wZURlcHRoOwotCi0gICAgaW50
IG1VbmlxdWVJbmRleDsgICAvLyBGb3IgY3JlYXRpbmcgdW5pcXVlIG5hbWVzCi0KLSAgICBib29s
IG1Db250YWluc0xvb3BEaXNjb250aW51aXR5OwotICAgIGJvb2wgbU91dHB1dExvZDBGdW5jdGlv
bjsKLSAgICBib29sIG1JbnNpZGVEaXNjb250aW51b3VzTG9vcDsKLQotICAgIFRJbnRlcm1TeW1i
b2wgKm1FeGNlc3NpdmVMb29wSW5kZXg7Ci0KLSAgICBpbnQgbVVuaWZvcm1SZWdpc3RlcjsKLSAg
ICBpbnQgbVNhbXBsZXJSZWdpc3RlcjsKLQotICAgIFRTdHJpbmcgcmVnaXN0ZXJTdHJpbmcoVElu
dGVybVN5bWJvbCAqb3BlcmFuZCk7Ci0gICAgaW50IHNhbXBsZXJSZWdpc3RlcihUSW50ZXJtU3lt
Ym9sICpzYW1wbGVyKTsKLSAgICBpbnQgdW5pZm9ybVJlZ2lzdGVyKFRJbnRlcm1TeW1ib2wgKnVu
aWZvcm0pOwotICAgIHZvaWQgZGVjbGFyZVVuaWZvcm0oY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0
IFRTdHJpbmcgJm5hbWUsIGludCBpbmRleCk7Ci0gICAgc3RhdGljIEdMZW51bSBnbFZhcmlhYmxl
VHlwZShjb25zdCBUVHlwZSAmdHlwZSk7Ci0gICAgc3RhdGljIEdMZW51bSBnbFZhcmlhYmxlUHJl
Y2lzaW9uKGNvbnN0IFRUeXBlICZ0eXBlKTsKLQotICAgIEFjdGl2ZVVuaWZvcm1zIG1BY3RpdmVV
bmlmb3JtczsKLX07Ci19Ci0KLSNlbmRpZiAgIC8vIENPTVBJTEVSX09VVFBVVEhMU0xfSF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUNvbnRl
eHQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlQ29udGV4
dC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMjc5NTIzYmE3NDE2YTg3MjQ1
MzE2MGU1YWMzZTM2M2Q4MGFmNjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlQ29u
dGV4dC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAyICswLDAgQEAKLS8vCi0vLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
LS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9QYXJzZUNvbnRleHQuaCIKLQotI2luY2x1ZGUgPHN0
ZGFyZy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpbmNsdWRlICJjb21waWxlci9nbHNsYW5n
LmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL1NvdXJjZUxvY2F0aW9uLmgiCi0K
LS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCi0vLwotLy8gU3ViLSB2ZWN0b3IgYW5kIG1hdHJpeCBmaWVsZHMKLS8v
Ci0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KLQotLy8KLS8vIExvb2sgYXQgYSAnLicgZmllbGQgc2VsZWN0b3Ig
c3RyaW5nIGFuZCBjaGFuZ2UgaXQgaW50byBvZmZzZXRzCi0vLyBmb3IgYSB2ZWN0b3IuCi0vLwot
Ym9vbCBUUGFyc2VDb250ZXh0OjpwYXJzZVZlY3RvckZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21w
U3RyaW5nLCBpbnQgdmVjU2l6ZSwgVFZlY3RvckZpZWxkcyYgZmllbGRzLCBjb25zdCBUU291cmNl
TG9jJiBsaW5lKQotewotICAgIGZpZWxkcy5udW0gPSAoaW50KSBjb21wU3RyaW5nLnNpemUoKTsK
LSAgICBpZiAoZmllbGRzLm51bSA+IDQpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwg
dmVjdG9yIGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBlbnVtIHsKLSAgICAgICAgZXh5encsCi0gICAgICAg
IGVyZ2JhLAotICAgICAgICBlc3RwcQotICAgIH0gZmllbGRTZXRbNF07Ci0KLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGZpZWxkcy5udW07ICsraSkgewotICAgICAgICBzd2l0Y2ggKGNvbXBTdHJp
bmdbaV0pICB7Ci0gICAgICAgIGNhc2UgJ3gnOiAKLSAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRz
W2ldID0gMDsKLSAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXh5enc7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSAncic6IAotICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0g
PSAwOwotICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBlcmdiYTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlICdzJzoKLSAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMDsK
LSAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXN0cHE7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSAneSc6IAotICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAxOwotICAg
ICAgICAgICAgZmllbGRTZXRbaV0gPSBleHl6dzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlICdnJzogCi0gICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDE7Ci0gICAgICAg
ICAgICBmaWVsZFNldFtpXSA9IGVyZ2JhOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgJ3QnOgotICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAxOwotICAgICAgICAgICAg
ZmllbGRTZXRbaV0gPSBlc3RwcTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICd6
JzogCi0gICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDI7Ci0gICAgICAgICAgICBmaWVs
ZFNldFtpXSA9IGV4eXp3OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ2InOiAK
LSAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMjsKLSAgICAgICAgICAgIGZpZWxkU2V0
W2ldID0gZXJnYmE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAncCc6Ci0gICAg
ICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDI7Ci0gICAgICAgICAgICBmaWVsZFNldFtpXSA9
IGVzdHBxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAgICBjYXNlICd3Jzog
Ci0gICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDM7Ci0gICAgICAgICAgICBmaWVsZFNl
dFtpXSA9IGV4eXp3OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ2EnOiAKLSAg
ICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMzsKLSAgICAgICAgICAgIGZpZWxkU2V0W2ld
ID0gZXJnYmE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAncSc6Ci0gICAgICAg
ICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDM7Ci0gICAgICAgICAgICBmaWVsZFNldFtpXSA9IGVz
dHBxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBl
cnJvcihsaW5lLCAiaWxsZWdhbCB2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5j
X3N0cigpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgKytpKSB7Ci0gICAgICAgIGlmIChm
aWVsZHMub2Zmc2V0c1tpXSA+PSB2ZWNTaXplKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAi
dmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCAgY29tcFN0cmluZy5jX3N0cigp
KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChp
ID4gMCkgewotICAgICAgICAgICAgaWYgKGZpZWxkU2V0W2ldICE9IGZpZWxkU2V0W2ktMV0pIHsK
LSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCAtIHZlY3RvciBjb21wb25lbnQg
ZmllbGRzIG5vdCBmcm9tIHRoZSBzYW1lIHNldCIsIGNvbXBTdHJpbmcuY19zdHIoKSk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLQotLy8KLS8vIExvb2sgYXQgYSAnLicgZmllbGQg
c2VsZWN0b3Igc3RyaW5nIGFuZCBjaGFuZ2UgaXQgaW50byBvZmZzZXRzCi0vLyBmb3IgYSBtYXRy
aXguCi0vLwotYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3Ry
aW5nJiBjb21wU3RyaW5nLCBpbnQgbWF0U2l6ZSwgVE1hdHJpeEZpZWxkcyYgZmllbGRzLCBjb25z
dCBUU291cmNlTG9jJiBsaW5lKQotewotICAgIGZpZWxkcy53aG9sZVJvdyA9IGZhbHNlOwotICAg
IGZpZWxkcy53aG9sZUNvbCA9IGZhbHNlOwotICAgIGZpZWxkcy5yb3cgPSAtMTsKLSAgICBmaWVs
ZHMuY29sID0gLTE7Ci0KLSAgICBpZiAoY29tcFN0cmluZy5zaXplKCkgIT0gMikgewotICAgICAg
ICBlcnJvcihsaW5lLCAiaWxsZWdhbCBsZW5ndGggb2YgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIs
IGNvbXBTdHJpbmcuY19zdHIoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBpZiAoY29tcFN0cmluZ1swXSA9PSAnXycpIHsKLSAgICAgICAgaWYgKGNvbXBTdHJpbmdbMV0g
PCAnMCcgfHwgY29tcFN0cmluZ1sxXSA+ICczJykgewotICAgICAgICAgICAgZXJyb3IobGluZSwg
ImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgZmllbGRzLndob2xl
Q29sID0gdHJ1ZTsKLSAgICAgICAgZmllbGRzLmNvbCA9IGNvbXBTdHJpbmdbMV0gLSAnMCc7Ci0g
ICAgfSBlbHNlIGlmIChjb21wU3RyaW5nWzFdID09ICdfJykgewotICAgICAgICBpZiAoY29tcFN0
cmluZ1swXSA8ICcwJyB8fCBjb21wU3RyaW5nWzBdID4gJzMnKSB7Ci0gICAgICAgICAgICBlcnJv
cihsaW5lLCAiaWxsZWdhbCBtYXRyaXggZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0
cigpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBmaWVs
ZHMud2hvbGVSb3cgPSB0cnVlOwotICAgICAgICBmaWVsZHMucm93ID0gY29tcFN0cmluZ1swXSAt
ICcwJzsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoY29tcFN0cmluZ1swXSA8ICcwJyB8fCBj
b21wU3RyaW5nWzBdID4gJzMnIHx8Ci0gICAgICAgICAgICBjb21wU3RyaW5nWzFdIDwgJzAnIHx8
IGNvbXBTdHJpbmdbMV0gPiAnMycpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2Fs
IG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCkpOwotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGZpZWxkcy5yb3cgPSBjb21wU3Ry
aW5nWzBdIC0gJzAnOwotICAgICAgICBmaWVsZHMuY29sID0gY29tcFN0cmluZ1sxXSAtICcwJzsK
LSAgICB9Ci0KLSAgICBpZiAoZmllbGRzLnJvdyA+PSBtYXRTaXplIHx8IGZpZWxkcy5jb2wgPj0g
bWF0U2l6ZSkgewotICAgICAgICBlcnJvcihsaW5lLCAibWF0cml4IGZpZWxkIHNlbGVjdGlvbiBv
dXQgb2YgcmFuZ2UiLCBjb21wU3RyaW5nLmNfc3RyKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwotLy8g
RXJyb3JzCi0vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLS8vCi0vLyBUcmFjayB3aGV0aGVyIGVycm9y
cyBoYXZlIG9jY3VycmVkLgotLy8KLXZvaWQgVFBhcnNlQ29udGV4dDo6cmVjb3ZlcigpCi17Ci19
Ci0KLS8vCi0vLyBVc2VkIGJ5IGZsZXgvYmlzb24gdG8gb3V0cHV0IGFsbCBzeW50YXggYW5kIHBh
cnNpbmcgZXJyb3JzLgotLy8KLXZvaWQgVFBhcnNlQ29udGV4dDo6ZXJyb3IoY29uc3QgVFNvdXJj
ZUxvYyYgbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWFzb24s
IGNvbnN0IGNoYXIqIHRva2VuLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciogZXh0cmFJbmZvKQotewotICAgIHBwOjpTb3VyY2VMb2NhdGlvbiBzcmNMb2M7Ci0gICAgc3Jj
TG9jLmZpbGUgPSBsb2MuZmlyc3RfZmlsZTsKLSAgICBzcmNMb2MubGluZSA9IGxvYy5maXJzdF9s
aW5lOwotICAgIGRpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OkVSUk9SLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNMb2MsIHJlYXNvbiwgdG9rZW4sIGV4dHJhSW5m
byk7Ci0KLX0KLQotdm9pZCBUUGFyc2VDb250ZXh0Ojp3YXJuaW5nKGNvbnN0IFRTb3VyY2VMb2Mm
IGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWFzb24sIGNv
bnN0IGNoYXIqIHRva2VuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IGV4dHJhSW5mbykgewotICAgIHBwOjpTb3VyY2VMb2NhdGlvbiBzcmNMb2M7Ci0gICAgc3JjTG9j
LmZpbGUgPSBsb2MuZmlyc3RfZmlsZTsKLSAgICBzcmNMb2MubGluZSA9IGxvYy5maXJzdF9saW5l
OwotICAgIGRpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OldBUk5JTkcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIHNyY0xvYywgcmVhc29uLCB0b2tlbiwgZXh0cmFJbmZv
KTsKLX0KLQotdm9pZCBUUGFyc2VDb250ZXh0Ojp0cmFjZShjb25zdCBjaGFyKiBzdHIpCi17Ci0g
ICAgZGlhZ25vc3RpY3Mud3JpdGVEZWJ1ZyhzdHIpOwotfQotCi0vLwotLy8gU2FtZSBlcnJvciBt
ZXNzYWdlIGZvciBhbGwgcGxhY2VzIGFzc2lnbm1lbnRzIGRvbid0IHdvcmsuCi0vLwotdm9pZCBU
UGFyc2VDb250ZXh0Ojphc3NpZ25FcnJvcihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBj
aGFyKiBvcCwgVFN0cmluZyBsZWZ0LCBUU3RyaW5nIHJpZ2h0KQotewotICAgIHN0ZDo6c3RyaW5n
c3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKLSAgICBleHRyYUluZm9TdHJlYW0gPDwgImNhbm5vdCBj
b252ZXJ0IGZyb20gJyIgPDwgcmlnaHQgPDwgIicgdG8gJyIgPDwgbGVmdCA8PCAiJyI7Ci0gICAg
c3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOwotICAgIGVycm9y
KGxpbmUsICIiLCBvcCwgZXh0cmFJbmZvLmNfc3RyKCkpOwotfQotCi0vLwotLy8gU2FtZSBlcnJv
ciBtZXNzYWdlIGZvciBhbGwgcGxhY2VzIHVuYXJ5IG9wZXJhdGlvbnMgZG9uJ3Qgd29yay4KLS8v
Ci12b2lkIFRQYXJzZUNvbnRleHQ6OnVuYXJ5T3BFcnJvcihjb25zdCBUU291cmNlTG9jJiBsaW5l
LCBjb25zdCBjaGFyKiBvcCwgVFN0cmluZyBvcGVyYW5kKQotewotICAgIHN0ZDo6c3RyaW5nc3Ry
ZWFtIGV4dHJhSW5mb1N0cmVhbTsKLSAgICBleHRyYUluZm9TdHJlYW0gPDwgIm5vIG9wZXJhdGlv
biAnIiA8PCBvcCA8PCAiJyBleGlzdHMgdGhhdCB0YWtlcyBhbiBvcGVyYW5kIG9mIHR5cGUgIiA8
PCBvcGVyYW5kIAotICAgICAgICAgICAgICAgICAgICA8PCAiIChvciB0aGVyZSBpcyBubyBhY2Nl
cHRhYmxlIGNvbnZlcnNpb24pIjsKLSAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUlu
Zm9TdHJlYW0uc3RyKCk7Ci0gICAgZXJyb3IobGluZSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCBv
cCwgZXh0cmFJbmZvLmNfc3RyKCkpOwotfQotCi0vLwotLy8gU2FtZSBlcnJvciBtZXNzYWdlIGZv
ciBhbGwgYmluYXJ5IG9wZXJhdGlvbnMgZG9uJ3Qgd29yay4KLS8vCi12b2lkIFRQYXJzZUNvbnRl
eHQ6OmJpbmFyeU9wRXJyb3IoY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgY2hhciogb3As
IFRTdHJpbmcgbGVmdCwgVFN0cmluZyByaWdodCkKLXsKLSAgICBzdGQ6OnN0cmluZ3N0cmVhbSBl
eHRyYUluZm9TdHJlYW07Ci0gICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJubyBvcGVyYXRpb24gJyIg
PDwgb3AgPDwgIicgZXhpc3RzIHRoYXQgdGFrZXMgYSBsZWZ0LWhhbmQgb3BlcmFuZCBvZiB0eXBl
ICciIDw8IGxlZnQgCi0gICAgICAgICAgICAgICAgICAgIDw8ICInIGFuZCBhIHJpZ2h0IG9wZXJh
bmQgb2YgdHlwZSAnIiA8PCByaWdodCA8PCAiJyAob3IgdGhlcmUgaXMgbm8gYWNjZXB0YWJsZSBj
b252ZXJzaW9uKSI7Ci0gICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFt
LnN0cigpOwotICAgIGVycm9yKGxpbmUsICIgd3Jvbmcgb3BlcmFuZCB0eXBlcyAiLCBvcCwgZXh0
cmFJbmZvLmNfc3RyKCkpOyAKLX0KLQotYm9vbCBUUGFyc2VDb250ZXh0OjpwcmVjaXNpb25FcnJv
ckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRQcmVjaXNpb24gcHJlY2lzaW9uLCBUQmFz
aWNUeXBlIHR5cGUpewotICAgIGlmICghY2hlY2tzUHJlY2lzaW9uRXJyb3JzKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgc3dpdGNoKCB0eXBlICl7Ci0gICAgY2FzZSBFYnRGbG9hdDoKLSAg
ICAgICAgaWYoIHByZWNpc2lvbiA9PSBFYnBVbmRlZmluZWQgKXsKLSAgICAgICAgICAgIGVycm9y
KCBsaW5lLCAiTm8gcHJlY2lzaW9uIHNwZWNpZmllZCBmb3IgKGZsb2F0KSIsICIiICk7Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEVidEludDoKLSAgICAgICAgaWYoIHByZWNpc2lvbiA9PSBFYnBVbmRlZmluZWQgKXsKLSAgICAg
ICAgICAgIGVycm9yKCBsaW5lLCAiTm8gcHJlY2lzaW9uIHNwZWNpZmllZCAoaW50KSIsICIiICk7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotLy8KLS8vIEJvdGggdGVzdCBhbmQgaWYgbmVjZXNzYXJ5LCBzcGl0IG91dCBhbiBl
cnJvciwgdG8gc2VlIGlmIHRoZSBub2RlIGlzIHJlYWxseQotLy8gYW4gbC12YWx1ZSB0aGF0IGNh
biBiZSBvcGVyYXRlZCBvbiB0aGlzIHdheS4KLS8vCi0vLyBSZXR1cm5zIHRydWUgaWYgdGhlIHdh
cyBhbiBlcnJvci4KLS8vCi1ib29sIFRQYXJzZUNvbnRleHQ6OmxWYWx1ZUVycm9yQ2hlY2soY29u
c3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgY2hhciogb3AsIFRJbnRlcm1UeXBlZCogbm9kZSkK
LXsKLSAgICBUSW50ZXJtU3ltYm9sKiBzeW1Ob2RlID0gbm9kZS0+Z2V0QXNTeW1ib2xOb2RlKCk7
Ci0gICAgVEludGVybUJpbmFyeSogYmluYXJ5Tm9kZSA9IG5vZGUtPmdldEFzQmluYXJ5Tm9kZSgp
OwotCi0gICAgaWYgKGJpbmFyeU5vZGUpIHsKLSAgICAgICAgYm9vbCBlcnJvclJldHVybjsKLQot
ICAgICAgICBzd2l0Y2goYmluYXJ5Tm9kZS0+Z2V0T3AoKSkgewotICAgICAgICBjYXNlIEVPcElu
ZGV4RGlyZWN0OgotICAgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6Ci0gICAgICAgIGNhc2Ug
RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6Ci0gICAgICAgICAgICByZXR1cm4gbFZhbHVlRXJyb3JDaGVj
ayhsaW5lLCBvcCwgYmluYXJ5Tm9kZS0+Z2V0TGVmdCgpKTsKLSAgICAgICAgY2FzZSBFT3BWZWN0
b3JTd2l6emxlOgotICAgICAgICAgICAgZXJyb3JSZXR1cm4gPSBsVmFsdWVFcnJvckNoZWNrKGxp
bmUsIG9wLCBiaW5hcnlOb2RlLT5nZXRMZWZ0KCkpOwotICAgICAgICAgICAgaWYgKCFlcnJvclJl
dHVybikgewotICAgICAgICAgICAgICAgIGludCBvZmZzZXRbNF0gPSB7MCwwLDAsMH07Ci0KLSAg
ICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIHJpZ2h0Tm9kZSA9IGJpbmFyeU5vZGUtPmdldFJp
Z2h0KCk7Ci0gICAgICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSAqYWdnck5vZGUgPSByaWdo
dE5vZGUtPmdldEFzQWdncmVnYXRlKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHAgPSBhZ2dyTm9kZS0+Z2V0U2VxdWVu
Y2UoKS5iZWdpbigpOyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcCAhPSBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKS5lbmQoKTsgcCsrKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGludCB2YWx1ZSA9ICgqcCktPmdldEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFu
dFVuaW9uKCktPmdldElDb25zdCgwKTsKLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0W3ZhbHVl
XSsrOyAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXRbdmFsdWVdID4gMSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIG9mIHN3aXp6bGUg
Y2Fubm90IGhhdmUgZHVwbGljYXRlIGNvbXBvbmVudHMiLCBvcCk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfSAKLQotICAgICAgICAgICAgcmV0dXJuIGVycm9yUmV0dXJu
OwotICAgICAgICBkZWZhdWx0OiAKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wKTsKLQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLQotICAgIGNvbnN0IGNoYXIqIHN5bWJvbCA9IDA7Ci0gICAgaWYg
KHN5bU5vZGUgIT0gMCkKLSAgICAgICAgc3ltYm9sID0gc3ltTm9kZS0+Z2V0U3ltYm9sKCkuY19z
dHIoKTsKLQotICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2UgPSAwOwotICAgIHN3aXRjaCAobm9kZS0+
Z2V0UXVhbGlmaWVyKCkpIHsKLSAgICBjYXNlIEV2cUNvbnN0OiAgICAgICAgICBtZXNzYWdlID0g
ImNhbid0IG1vZGlmeSBhIGNvbnN0IjsgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXZxQ29uc3RS
ZWFkT25seTogIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgY29uc3QiOyAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBFdnFBdHRyaWJ1dGU6ICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYW4g
YXR0cmlidXRlIjsgICBicmVhazsKLSAgICBjYXNlIEV2cVVuaWZvcm06ICAgICAgICBtZXNzYWdl
ID0gImNhbid0IG1vZGlmeSBhIHVuaWZvcm0iOyAgICAgIGJyZWFrOwotICAgIGNhc2UgRXZxVmFy
eWluZ0luOiAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgdmFyeWluZyI7ICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBFdnFGcmFnQ29vcmQ6ICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkg
Z2xfRnJhZ0Nvb3JkIjsgICBicmVhazsKLSAgICBjYXNlIEV2cUZyb250RmFjaW5nOiAgICBtZXNz
YWdlID0gImNhbid0IG1vZGlmeSBnbF9Gcm9udEZhY2luZyI7IGJyZWFrOwotICAgIGNhc2UgRXZx
UG9pbnRDb29yZDogICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGdsX1BvaW50Q29vcmQiOyAg
YnJlYWs7Ci0gICAgZGVmYXVsdDoKLQotICAgICAgICAvLwotICAgICAgICAvLyBUeXBlIHRoYXQg
Y2FuJ3QgYmUgd3JpdHRlbiB0bz8KLSAgICAgICAgLy8KLSAgICAgICAgc3dpdGNoIChub2RlLT5n
ZXRCYXNpY1R5cGUoKSkgewotICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKLSAgICAgICAgY2Fz
ZSBFYnRTYW1wbGVyQ3ViZToKLSAgICAgICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEg
c2FtcGxlciI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFYnRWb2lkOgotICAg
ICAgICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgdm9pZCI7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgZGVmYXVsdDogCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmIChtZXNzYWdlID09IDAgJiYgYmluYXJ5Tm9kZSA9PSAwICYmIHN5bU5vZGUg
PT0gMCkgewotICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCk7Ci0K
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0KLSAgICAvLwotICAgIC8vIEV2ZXJ5dGhp
bmcgZWxzZSBpcyBva2F5LCBubyBlcnJvci4KLSAgICAvLwotICAgIGlmIChtZXNzYWdlID09IDAp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vCi0gICAgLy8gSWYgd2UgZ2V0IGhlcmUs
IHdlIGhhdmUgYW4gZXJyb3IgYW5kIGEgbWVzc2FnZS4KLSAgICAvLwotICAgIGlmIChzeW1Ob2Rl
KSB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKLSAgICAgICAg
ZXh0cmFJbmZvU3RyZWFtIDw8ICJcIiIgPDwgc3ltYm9sIDw8ICJcIiAoIiA8PCBtZXNzYWdlIDw8
ICIpIjsKLSAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0
cigpOwotICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCwgZXh0cmFJ
bmZvLmNfc3RyKCkpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgc3RkOjpzdHJpbmdzdHJl
YW0gZXh0cmFJbmZvU3RyZWFtOwotICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgIigiIDw8IG1l
c3NhZ2UgPDwgIikiOwotICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9T
dHJlYW0uc3RyKCk7Ci0gICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9w
LCBleHRyYUluZm8uY19zdHIoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8v
Ci0vLyBCb3RoIHRlc3QsIGFuZCBpZiBuZWNlc3Nhcnkgc3BpdCBvdXQgYW4gZXJyb3IsIHRvIHNl
ZSBpZiB0aGUgbm9kZSBpcyByZWFsbHkKLS8vIGEgY29uc3RhbnQuCi0vLwotLy8gUmV0dXJucyB0
cnVlIGlmIHRoZSB3YXMgYW4gZXJyb3IuCi0vLwotYm9vbCBUUGFyc2VDb250ZXh0Ojpjb25zdEVy
cm9yQ2hlY2soVEludGVybVR5cGVkKiBub2RlKQotewotICAgIGlmIChub2RlLT5nZXRRdWFsaWZp
ZXIoKSA9PSBFdnFDb25zdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZXJyb3Iobm9k
ZS0+Z2V0TGluZSgpLCAiY29uc3RhbnQgZXhwcmVzc2lvbiByZXF1aXJlZCIsICIiKTsKLQotICAg
IHJldHVybiB0cnVlOwotfQotCi0vLwotLy8gQm90aCB0ZXN0LCBhbmQgaWYgbmVjZXNzYXJ5IHNw
aXQgb3V0IGFuIGVycm9yLCB0byBzZWUgaWYgdGhlIG5vZGUgaXMgcmVhbGx5Ci0vLyBhbiBpbnRl
Z2VyLgotLy8KLS8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgd2FzIGFuIGVycm9yLgotLy8KLWJvb2wg
VFBhcnNlQ29udGV4dDo6aW50ZWdlckVycm9yQ2hlY2soVEludGVybVR5cGVkKiBub2RlLCBjb25z
dCBjaGFyKiB0b2tlbikKLXsKLSAgICBpZiAobm9kZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50
ICYmIG5vZGUtPmdldE5vbWluYWxTaXplKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiaW50ZWdlciBleHByZXNzaW9uIHJlcXVpcmVk
IiwgdG9rZW4pOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vCi0vLyBCb3RoIHRlc3QsIGFu
ZCBpZiBuZWNlc3Nhcnkgc3BpdCBvdXQgYW4gZXJyb3IsIHRvIHNlZSBpZiB3ZSBhcmUgY3VycmVu
dGx5Ci0vLyBnbG9iYWxseSBzY29wZWQuCi0vLwotLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB3YXMg
YW4gZXJyb3IuCi0vLwotYm9vbCBUUGFyc2VDb250ZXh0OjpnbG9iYWxFcnJvckNoZWNrKGNvbnN0
IFRTb3VyY2VMb2MmIGxpbmUsIGJvb2wgZ2xvYmFsLCBjb25zdCBjaGFyKiB0b2tlbikKLXsKLSAg
ICBpZiAoZ2xvYmFsKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBlcnJvcihsaW5lLCAi
b25seSBhbGxvd2VkIGF0IGdsb2JhbCBzY29wZSIsIHRva2VuKTsKLQotICAgIHJldHVybiB0cnVl
OwotfQotCi0vLwotLy8gRm9yIG5vdywga2VlcCBpdCBzaW1wbGU6ICBpZiBpdCBzdGFydHMgImds
XyIsIGl0J3MgcmVzZXJ2ZWQsIGluZGVwZW5kZW50Ci0vLyBvZiBzY29wZS4gIEV4Y2VwdCwgaWYg
dGhlIHN5bWJvbCB0YWJsZSBpcyBhdCB0aGUgYnVpbHQtaW4gcHVzaC1sZXZlbCwKLS8vIHdoaWNo
IGlzIHdoZW4gd2UgYXJlIHBhcnNpbmcgYnVpbHQtaW5zLgotLy8gQWxzbyBjaGVja3MgZm9yICJ3
ZWJnbF8iIGFuZCAiX3dlYmdsXyIgcmVzZXJ2ZWQgaWRlbnRpZmllcnMgaWYgcGFyc2luZyBhCi0v
LyB3ZWJnbCBzaGFkZXIuCi0vLwotLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdhcyBhbiBlcnJv
ci4KLS8vCi1ib29sIFRQYXJzZUNvbnRleHQ6OnJlc2VydmVkRXJyb3JDaGVjayhjb25zdCBUU291
cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyKQotewotICAgIHN0YXRpYyBj
b25zdCBjaGFyKiByZXNlcnZlZEVyck1zZyA9ICJyZXNlcnZlZCBidWlsdC1pbiBuYW1lIjsKLSAg
ICBpZiAoIXN5bWJvbFRhYmxlLmF0QnVpbHRJbkxldmVsKCkpIHsKLSAgICAgICAgaWYgKGlkZW50
aWZpZXIuY29tcGFyZSgwLCAzLCAiZ2xfIikgPT0gMCkgewotICAgICAgICAgICAgZXJyb3IobGlu
ZSwgcmVzZXJ2ZWRFcnJNc2csICJnbF8iKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChpc1dlYkdMQmFzZWRTcGVjKHNoYWRlclNwZWMpKSB7Ci0gICAg
ICAgICAgICBpZiAoaWRlbnRpZmllci5jb21wYXJlKDAsIDYsICJ3ZWJnbF8iKSA9PSAwKSB7Ci0g
ICAgICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJ3ZWJnbF8iKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChpZGVudGlmaWVyLmNvbXBhcmUoMCwgNywgIl93ZWJnbF8iKSA9PSAwKSB7Ci0gICAgICAgICAg
ICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJfd2ViZ2xfIik7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc2hhZGVy
U3BlYyA9PSBTSF9DU1NfU0hBREVSU19TUEVDICYmIGlkZW50aWZpZXIuY29tcGFyZSgwLCA0LCAi
Y3NzXyIpID09IDApIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1z
ZywgImNzc18iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBpZiAoaWRlbnRpZmllci5maW5kKCJfXyIpICE9IFRTdHJpbmc6
Om5wb3MpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJpZGVudGlmaWVycyBjb250YWluaW5n
IHR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyAoX18pIGFyZSByZXNlcnZlZCBhcyBwb3NzaWJs
ZSBmdXR1cmUga2V5d29yZHMiLCBpZGVudGlmaWVyLmNfc3RyKCkpOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8v
Ci0vLyBNYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIGRhdGEgcHJvdmlkZWQgdG8gdGhlIGNvbnN0
cnVjdG9yIHRvIGJ1aWxkCi0vLyBzb21ldGhpbmcgb2YgdGhlIHR5cGUgb2YgdGhlIGNvbnN0cnVj
dG9yLiAgQWxzbyByZXR1cm5zIHRoZSB0eXBlIG9mCi0vLyB0aGUgY29uc3RydWN0b3IuCi0vLwot
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvciBpbiBjb25zdHJ1Y3Rpb24uCi0v
LwotYm9vbCBUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RvckVycm9yQ2hlY2soY29uc3QgVFNvdXJj
ZUxvYyYgbGluZSwgVEludGVybU5vZGUqIG5vZGUsIFRGdW5jdGlvbiYgZnVuY3Rpb24sIFRPcGVy
YXRvciBvcCwgVFR5cGUqIHR5cGUpCi17Ci0gICAgKnR5cGUgPSBmdW5jdGlvbi5nZXRSZXR1cm5U
eXBlKCk7Ci0KLSAgICBib29sIGNvbnN0cnVjdGluZ01hdHJpeCA9IGZhbHNlOwotICAgIHN3aXRj
aChvcCkgewotICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MjoKLSAgICBjYXNlIEVPcENvbnN0cnVj
dE1hdDM6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQ0OgotICAgICAgICBjb25zdHJ1Y3RpbmdN
YXRyaXggPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OiAKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBOb3RlOiBJdCdzIG9rYXkgdG8gaGF2ZSB0b28g
bWFueSBjb21wb25lbnRzIGF2YWlsYWJsZSwgYnV0IG5vdCBva2F5IHRvIGhhdmUgdW51c2VkCi0g
ICAgLy8gYXJndW1lbnRzLiAgJ2Z1bGwnIHdpbGwgZ28gdG8gdHJ1ZSB3aGVuIGVub3VnaCBhcmdz
IGhhdmUgYmVlbiBzZWVuLiAgSWYgd2UgbG9vcAotICAgIC8vIGFnYWluLCB0aGVyZSBpcyBhbiBl
eHRyYSBhcmd1bWVudCwgc28gJ292ZXJmdWxsJyB3aWxsIGJlY29tZSB0cnVlLgotICAgIC8vCi0K
LSAgICBzaXplX3Qgc2l6ZSA9IDA7Ci0gICAgYm9vbCBjb25zdFR5cGUgPSB0cnVlOwotICAgIGJv
b2wgZnVsbCA9IGZhbHNlOwotICAgIGJvb2wgb3ZlckZ1bGwgPSBmYWxzZTsKLSAgICBib29sIG1h
dHJpeEluTWF0cml4ID0gZmFsc2U7Ci0gICAgYm9vbCBhcnJheUFyZyA9IGZhbHNlOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpOyArK2kpIHsKLSAg
ICAgICAgY29uc3QgVFBhcmFtZXRlciYgcGFyYW0gPSBmdW5jdGlvbi5nZXRQYXJhbShpKTsKLSAg
ICAgICAgc2l6ZSArPSBwYXJhbS50eXBlLT5nZXRPYmplY3RTaXplKCk7Ci0gICAgICAgIAotICAg
ICAgICBpZiAoY29uc3RydWN0aW5nTWF0cml4ICYmIHBhcmFtLnR5cGUtPmlzTWF0cml4KCkpCi0g
ICAgICAgICAgICBtYXRyaXhJbk1hdHJpeCA9IHRydWU7Ci0gICAgICAgIGlmIChmdWxsKQotICAg
ICAgICAgICAgb3ZlckZ1bGwgPSB0cnVlOwotICAgICAgICBpZiAob3AgIT0gRU9wQ29uc3RydWN0
U3RydWN0ICYmICF0eXBlLT5pc0FycmF5KCkgJiYgc2l6ZSA+PSB0eXBlLT5nZXRPYmplY3RTaXpl
KCkpCi0gICAgICAgICAgICBmdWxsID0gdHJ1ZTsKLSAgICAgICAgaWYgKHBhcmFtLnR5cGUtPmdl
dFF1YWxpZmllcigpICE9IEV2cUNvbnN0KQotICAgICAgICAgICAgY29uc3RUeXBlID0gZmFsc2U7
Ci0gICAgICAgIGlmIChwYXJhbS50eXBlLT5pc0FycmF5KCkpCi0gICAgICAgICAgICBhcnJheUFy
ZyA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIGlmIChjb25zdFR5cGUpCi0gICAgICAgIHR5cGUt
PnNldFF1YWxpZmllcihFdnFDb25zdCk7Ci0KLSAgICBpZiAodHlwZS0+aXNBcnJheSgpICYmIHN0
YXRpY19jYXN0PHNpemVfdD4odHlwZS0+Z2V0QXJyYXlTaXplKCkpICE9IGZ1bmN0aW9uLmdldFBh
cmFtQ291bnQoKSkgewotICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgY29uc3RydWN0b3IgbmVl
ZHMgb25lIGFyZ3VtZW50IHBlciBhcnJheSBlbGVtZW50IiwgImNvbnN0cnVjdG9yIik7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChhcnJheUFyZyAmJiBvcCAhPSBFT3BD
b25zdHJ1Y3RTdHJ1Y3QpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBmcm9t
IGEgbm9uLWRlcmVmZXJlbmNlZCBhcnJheSIsICJjb25zdHJ1Y3RvciIpOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobWF0cml4SW5NYXRyaXggJiYgIXR5cGUtPmlzQXJy
YXkoKSkgewotICAgICAgICBpZiAoZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpICE9IDEpIHsKLSAg
ICAgICAgICBlcnJvcihsaW5lLCAiY29uc3RydWN0aW5nIG1hdHJpeCBmcm9tIG1hdHJpeCBjYW4g
b25seSB0YWtlIG9uZSBhcmd1bWVudCIsICJjb25zdHJ1Y3RvciIpOwotICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG92ZXJGdWxsKSB7Ci0gICAgICAg
IGVycm9yKGxpbmUsICJ0b28gbWFueSBhcmd1bWVudHMiLCAiY29uc3RydWN0b3IiKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIGlmIChvcCA9PSBFT3BDb25zdHJ1Y3RT
dHJ1Y3QgJiYgIXR5cGUtPmlzQXJyYXkoKSAmJiBpbnQodHlwZS0+Z2V0U3RydWN0KCktPmZpZWxk
cygpLnNpemUoKSkgIT0gZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpKSB7Ci0gICAgICAgIGVycm9y
KGxpbmUsICJOdW1iZXIgb2YgY29uc3RydWN0b3IgcGFyYW1ldGVycyBkb2VzIG5vdCBtYXRjaCB0
aGUgbnVtYmVyIG9mIHN0cnVjdHVyZSBmaWVsZHMiLCAiY29uc3RydWN0b3IiKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCF0eXBlLT5pc01hdHJpeCgpIHx8ICFtYXRy
aXhJbk1hdHJpeCkgewotICAgICAgICBpZiAoKG9wICE9IEVPcENvbnN0cnVjdFN0cnVjdCAmJiBz
aXplICE9IDEgJiYgc2l6ZSA8IHR5cGUtPmdldE9iamVjdFNpemUoKSkgfHwKLSAgICAgICAgICAg
IChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QgJiYgc2l6ZSA8IHR5cGUtPmdldE9iamVjdFNpemUo
KSkpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJub3QgZW5vdWdoIGRhdGEgcHJvdmlkZWQg
Zm9yIGNvbnN0cnVjdGlvbiIsICJjb25zdHJ1Y3RvciIpOwotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBUSW50ZXJtVHlwZWQgKnR5cGVkID0gbm9kZSA/
IG5vZGUtPmdldEFzVHlwZWQoKSA6IDA7Ci0gICAgaWYgKHR5cGVkID09IDApIHsKLSAgICAgICAg
ZXJyb3IobGluZSwgImNvbnN0cnVjdG9yIGFyZ3VtZW50IGRvZXMgbm90IGhhdmUgYSB0eXBlIiwg
ImNvbnN0cnVjdG9yIik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAob3Ag
IT0gRU9wQ29uc3RydWN0U3RydWN0ICYmIElzU2FtcGxlcih0eXBlZC0+Z2V0QmFzaWNUeXBlKCkp
KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgY29udmVydCBhIHNhbXBsZXIiLCAiY29u
c3RydWN0b3IiKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmICh0eXBlZC0+
Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgewotICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90
IGNvbnZlcnQgYSB2b2lkIiwgImNvbnN0cnVjdG9yIik7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8gVGhpcyBmdW5jdGlvbiBjaGVja3Mg
dG8gc2VlIGlmIGEgdm9pZCB2YXJpYWJsZSBoYXMgYmVlbiBkZWNsYXJlZCBhbmQgcmFpc2UgYW4g
ZXJyb3IgbWVzc2FnZSBmb3Igc3VjaCBhIGNhc2UKLS8vCi0vLyByZXR1cm5zIHRydWUgaW4gY2Fz
ZSBvZiBhbiBlcnJvcgotLy8KLWJvb2wgVFBhcnNlQ29udGV4dDo6dm9pZEVycm9yQ2hlY2soY29u
c3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgVFB1
YmxpY1R5cGUmIHB1YlR5cGUpCi17Ci0gICAgaWYgKHB1YlR5cGUudHlwZSA9PSBFYnRWb2lkKSB7
Ci0gICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2b2lkJyIsIGlkZW50
aWZpZXIuY19zdHIoKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gCi0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRvIHNlZSBpZiB0aGUgbm9k
ZSAoZm9yIHRoZSBleHByZXNzaW9uKSBjb250YWlucyBhIHNjYWxhciBib29sZWFuIGV4cHJlc3Np
b24gb3Igbm90Ci0vLwotLy8gcmV0dXJucyB0cnVlIGluIGNhc2Ugb2YgYW4gZXJyb3IKLS8vCi1i
b29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUs
IGNvbnN0IFRJbnRlcm1UeXBlZCogdHlwZSkKLXsKLSAgICBpZiAodHlwZS0+Z2V0QmFzaWNUeXBl
KCkgIT0gRWJ0Qm9vbCB8fCB0eXBlLT5pc0FycmF5KCkgfHwgdHlwZS0+aXNNYXRyaXgoKSB8fCB0
eXBlLT5pc1ZlY3RvcigpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJib29sZWFuIGV4cHJlc3Np
b24gZXhwZWN0ZWQiLCAiIik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gCi0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRvIHNlZSBpZiB0aGUg
bm9kZSAoZm9yIHRoZSBleHByZXNzaW9uKSBjb250YWlucyBhIHNjYWxhciBib29sZWFuIGV4cHJl
c3Npb24gb3Igbm90Ci0vLwotLy8gcmV0dXJucyB0cnVlIGluIGNhc2Ugb2YgYW4gZXJyb3IKLS8v
Ci1ib29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZSkKLXsKLSAgICBpZiAocFR5cGUudHlwZSAhPSBF
YnRCb29sIHx8IHBUeXBlLmFycmF5IHx8IHBUeXBlLm1hdHJpeCB8fCAocFR5cGUuc2l6ZSA+IDEp
KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJib29sZWFuIGV4cHJlc3Npb24gZXhwZWN0ZWQiLCAi
Iik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gCi0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgVFBhcnNlQ29udGV4dDo6c2FtcGxlckVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxv
YyYgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlLCBjb25zdCBjaGFyKiByZWFzb24pCi17
Ci0gICAgaWYgKHBUeXBlLnR5cGUgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgIGlmIChjb250YWlu
c1NhbXBsZXIoKnBUeXBlLnVzZXJEZWYpKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCByZWFz
b24sIGdldEJhc2ljU3RyaW5nKHBUeXBlLnR5cGUpLCAiKHN0cnVjdHVyZSBjb250YWlucyBhIHNh
bXBsZXIpIik7Ci0gICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2UgaWYgKElzU2FtcGxl
cihwVHlwZS50eXBlKSkgewotICAgICAgICBlcnJvcihsaW5lLCByZWFzb24sIGdldEJhc2ljU3Ry
aW5nKHBUeXBlLnR5cGUpKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVFBhcnNlQ29udGV4dDo6c3RydWN0UXVhbGlmaWVyRXJy
b3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUp
Ci17Ci0gICAgaWYgKChwVHlwZS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8IHBUeXBlLnF1
YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8IHBUeXBlLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1
dGUpICYmCi0gICAgICAgIHBUeXBlLnR5cGUgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgIGVycm9y
KGxpbmUsICJjYW5ub3QgYmUgdXNlZCB3aXRoIGEgc3RydWN0dXJlIiwgZ2V0UXVhbGlmaWVyU3Ry
aW5nKHBUeXBlLnF1YWxpZmllcikpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCi0gICAgaWYgKHBUeXBlLnF1YWxpZmllciAhPSBFdnFVbmlmb3JtICYmIHNhbXBsZXJF
cnJvckNoZWNrKGxpbmUsIHBUeXBlLCAic2FtcGxlcnMgbXVzdCBiZSB1bmlmb3JtIikpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFRQYXJzZUNv
bnRleHQ6OnBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUs
IFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBjb25zdCBUVHlwZSYgdHlwZSkKLXsKLSAgICBpZiAoKHF1
YWxpZmllciA9PSBFdnFPdXQgfHwgcXVhbGlmaWVyID09IEV2cUluT3V0KSAmJiAKLSAgICAgICAg
ICAgICB0eXBlLmdldEJhc2ljVHlwZSgpICE9IEVidFN0cnVjdCAmJiBJc1NhbXBsZXIodHlwZS5n
ZXRCYXNpY1R5cGUoKSkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgInNhbXBsZXJzIGNhbm5vdCBi
ZSBvdXRwdXQgcGFyYW1ldGVycyIsIHR5cGUuZ2V0QmFzaWNTdHJpbmcoKSk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBUUGFyc2VD
b250ZXh0Ojpjb250YWluc1NhbXBsZXIoVFR5cGUmIHR5cGUpCi17Ci0gICAgaWYgKElzU2FtcGxl
cih0eXBlLmdldEJhc2ljVHlwZSgpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAo
dHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAgY29uc3QgVEZpZWxk
TGlzdCYgZmllbGRzID0gdHlwZS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAg
ICBpZiAoY29udGFpbnNTYW1wbGVyKCpmaWVsZHNbaV0tPnR5cGUoKSkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLS8vCi0vLyBEbyBzaXplIGNoZWNraW5nIGZvciBhbiBhcnJheSB0eXBlJ3Mgc2l6ZS4KLS8v
Ci0vLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgotLy8KLWJvb2wgVFBhcnNl
Q29udGV4dDo6YXJyYXlTaXplRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUSW50
ZXJtVHlwZWQqIGV4cHIsIGludCYgc2l6ZSkKLXsKLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiog
Y29uc3RhbnQgPSBleHByLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLSAgICBpZiAoY29uc3RhbnQg
PT0gMCB8fCBjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0SW50KSB7Ci0gICAgICAgIGVy
cm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBjb25zdGFudCBpbnRlZ2VyIGV4cHJlc3Np
b24iLCAiIik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHNpemUgPSBjb25z
dGFudC0+Z2V0SUNvbnN0KDApOwotCi0gICAgaWYgKHNpemUgPD0gMCkgewotICAgICAgICBlcnJv
cihsaW5lLCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciIsICIiKTsKLSAg
ICAgICAgc2l6ZSA9IDE7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotLy8KLS8vIFNlZSBpZiB0aGlzIHF1YWxpZmllciBjYW4gYmUgYW4gYXJy
YXkuCi0vLwotLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGFuIGVycm9yLgotLy8KLWJvb2wg
VFBhcnNlQ29udGV4dDo6YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2Mm
IGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpCi17Ci0gICAgaWYgKCh0eXBlLnF1YWxpZmllciA9PSBF
dnFBdHRyaWJ1dGUpIHx8ICh0eXBlLnF1YWxpZmllciA9PSBFdnFDb25zdCkpIHsKLSAgICAgICAg
ZXJyb3IobGluZSwgImNhbm5vdCBkZWNsYXJlIGFycmF5cyBvZiB0aGlzIHF1YWxpZmllciIsIFRU
eXBlKHR5cGUpLmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8KLS8vIFNlZSBpZiB0aGlz
IHR5cGUgY2FuIGJlIGFuIGFycmF5LgotLy8KLS8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBh
biBlcnJvci4KLS8vCi1ib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5VHlwZUVycm9yQ2hlY2soY29u
c3QgVFNvdXJjZUxvYyYgbGluZSwgVFB1YmxpY1R5cGUgdHlwZSkKLXsKLSAgICAvLwotICAgIC8v
IENhbiB0aGUgdHlwZSBiZSBhbiBhcnJheT8KLSAgICAvLwotICAgIGlmICh0eXBlLmFycmF5KSB7
Ci0gICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgZGVjbGFyZSBhcnJheXMgb2YgYXJyYXlzIiwg
VFR5cGUodHlwZSkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLwotLy8gRG8gYWxsIHRo
ZSBzZW1hbnRpYyBjaGVja2luZyBmb3IgZGVjbGFyaW5nIGFuIGFycmF5LCB3aXRoIGFuZCAKLS8v
IHdpdGhvdXQgYSBzaXplLCBhbmQgbWFrZSB0aGUgcmlnaHQgY2hhbmdlcyB0byB0aGUgc3ltYm9s
IHRhYmxlLgotLy8KLS8vIHNpemUgPT0gMCBtZWFucyBubyBzcGVjaWZpZWQgc2l6ZS4KLS8vCi0v
LyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgotLy8KLWJvb2wgVFBhcnNlQ29u
dGV4dDo6YXJyYXlFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlk
ZW50aWZpZXIsIFRQdWJsaWNUeXBlIHR5cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKQotewotICAg
IC8vCi0gICAgLy8gRG9uJ3QgY2hlY2sgZm9yIHJlc2VydmVkIHdvcmQgdXNlIHVudGlsIGFmdGVy
IHdlIGtub3cgaXQncyBub3QgaW4gdGhlIHN5bWJvbCB0YWJsZSwKLSAgICAvLyBiZWNhdXNlIHJl
c2VydmVkIGFycmF5cyBjYW4gYmUgcmVkZWNsYXJlZC4KLSAgICAvLwotCi0gICAgYm9vbCBidWls
dEluID0gZmFsc2U7IAotICAgIGJvb2wgc2FtZVNjb3BlID0gZmFsc2U7Ci0gICAgVFN5bWJvbCog
c3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChpZGVudGlmaWVyLCAmYnVpbHRJbiwgJnNhbWVTY29w
ZSk7Ci0gICAgaWYgKHN5bWJvbCA9PSAwIHx8ICFzYW1lU2NvcGUpIHsKLSAgICAgICAgaWYgKHJl
c2VydmVkRXJyb3JDaGVjayhsaW5lLCBpZGVudGlmaWVyKSkKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAKLSAgICAgICAgdmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCZpZGVudGlm
aWVyLCBUVHlwZSh0eXBlKSk7Ci0KLSAgICAgICAgaWYgKHR5cGUuYXJyYXlTaXplKQotICAgICAg
ICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5zZXRBcnJheVNpemUodHlwZS5hcnJheVNpemUpOwot
Ci0gICAgICAgIGlmICghIHN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7Ci0gICAgICAg
ICAgICBkZWxldGUgdmFyaWFibGU7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiSU5URVJOQUwg
RVJST1IgaW5zZXJ0aW5nIG5ldyBzeW1ib2wiLCBpZGVudGlmaWVyLmNfc3RyKCkpOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAo
ISBzeW1ib2wtPmlzVmFyaWFibGUoKSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwgInZhcmlh
YmxlIGV4cGVjdGVkIiwgaWRlbnRpZmllci5jX3N0cigpKTsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxUVmFyaWFi
bGUqPihzeW1ib2wpOwotICAgICAgICBpZiAoISB2YXJpYWJsZS0+Z2V0VHlwZSgpLmlzQXJyYXko
KSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyaW5nIG5vbi1hcnJheSBhcyBh
cnJheSIsIGlkZW50aWZpZXIuY19zdHIoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAodmFyaWFibGUtPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSA+
IDApIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlY2xhcmF0aW9uIG9mIGFycmF5IHdp
dGggc2l6ZSIsIGlkZW50aWZpZXIuY19zdHIoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKCEgdmFyaWFibGUtPmdldFR5cGUoKS5z
YW1lRWxlbWVudFR5cGUoVFR5cGUodHlwZSkpKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAi
cmVkZWNsYXJhdGlvbiBvZiBhcnJheSB3aXRoIGEgZGlmZmVyZW50IHR5cGUiLCBpZGVudGlmaWVy
LmNfc3RyKCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAodHlwZS5hcnJheVNpemUpCi0gICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNl
dEFycmF5U2l6ZSh0eXBlLmFycmF5U2l6ZSk7Ci0gICAgfSAKLQotICAgIGlmICh2b2lkRXJyb3JD
aGVjayhsaW5lLCBpZGVudGlmaWVyLCB0eXBlKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vCi0vLyBFbmZvcmNlIG5vbi1pbml0aWFsaXplciB0eXBl
L3F1YWxpZmllciBydWxlcy4KLS8vCi0vLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVy
cm9yLgotLy8KLWJvb2wgVFBhcnNlQ29udGV4dDo6bm9uSW5pdENvbnN0RXJyb3JDaGVjayhjb25z
dCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlw
ZSwgYm9vbCBhcnJheSkKLXsKLSAgICBpZiAodHlwZS5xdWFsaWZpZXIgPT0gRXZxQ29uc3QpCi0g
ICAgewotICAgICAgICAvLyBNYWtlIHRoZSBxdWFsaWZpZXIgbWFrZSBzZW5zZS4KLSAgICAgICAg
dHlwZS5xdWFsaWZpZXIgPSBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgIAotICAgICAgICBpZiAoYXJy
YXkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJhcnJheXMgbWF5IG5vdCBi
ZSBkZWNsYXJlZCBjb25zdGFudCBzaW5jZSB0aGV5IGNhbm5vdCBiZSBpbml0aWFsaXplZCIsIGlk
ZW50aWZpZXIuY19zdHIoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodHlwZS5pc1N0
cnVjdHVyZUNvbnRhaW5pbmdBcnJheXMoKSkKLSAgICAgICAgewotICAgICAgICAgICAgZXJyb3Io
bGluZSwgInN0cnVjdHVyZXMgY29udGFpbmluZyBhcnJheXMgbWF5IG5vdCBiZSBkZWNsYXJlZCBj
b25zdGFudCBzaW5jZSB0aGV5IGNhbm5vdCBiZSBpbml0aWFsaXplZCIsIGlkZW50aWZpZXIuY19z
dHIoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBl
cnJvcihsaW5lLCAidmFyaWFibGVzIHdpdGggcXVhbGlmaWVyICdjb25zdCcgbXVzdCBiZSBpbml0
aWFsaXplZCIsIGlkZW50aWZpZXIuY19zdHIoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vCi0vLyBEbyBzZW1h
bnRpYyBjaGVja2luZyBmb3IgYSB2YXJpYWJsZSBkZWNsYXJhdGlvbiB0aGF0IGhhcyBubyBpbml0
aWFsaXplciwKLS8vIGFuZCB1cGRhdGUgdGhlIHN5bWJvbCB0YWJsZS4KLS8vCi0vLyBSZXR1cm5z
IHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgotLy8KLWJvb2wgVFBhcnNlQ29udGV4dDo6bm9u
SW5pdEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFN0cmluZyYgaWRlbnRpZmll
ciwgVFB1YmxpY1R5cGUmIHR5cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKQotewotICAgIGlmIChy
ZXNlcnZlZEVycm9yQ2hlY2sobGluZSwgaWRlbnRpZmllcikpCi0gICAgICAgIHJlY292ZXIoKTsK
LQotICAgIHZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgmaWRlbnRpZmllciwgVFR5cGUodHlwZSkp
OwotCi0gICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKLSAgICAgICAg
ZXJyb3IobGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7
Ci0gICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKLSAgICAgICAgdmFyaWFibGUgPSAwOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAodm9pZEVycm9yQ2hlY2sobGluZSwgaWRl
bnRpZmllciwgdHlwZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIFRQYXJzZUNvbnRleHQ6OnBhcmFtRXJyb3JDaGVjayhjb25zdCBUU291cmNl
TG9jJiBsaW5lLCBUUXVhbGlmaWVyIHF1YWxpZmllciwgVFF1YWxpZmllciBwYXJhbVF1YWxpZmll
ciwgVFR5cGUqIHR5cGUpCi17ICAgIAotICAgIGlmIChxdWFsaWZpZXIgIT0gRXZxQ29uc3QgJiYg
cXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgewotICAgICAgICBlcnJvcihsaW5lLCAicXVhbGlm
aWVyIG5vdCBhbGxvd2VkIG9uIGZ1bmN0aW9uIHBhcmFtZXRlciIsIGdldFF1YWxpZmllclN0cmlu
ZyhxdWFsaWZpZXIpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmIChxdWFs
aWZpZXIgPT0gRXZxQ29uc3QgJiYgcGFyYW1RdWFsaWZpZXIgIT0gRXZxSW4pIHsKLSAgICAgICAg
ZXJyb3IobGluZSwgInF1YWxpZmllciBub3QgYWxsb3dlZCB3aXRoICIsIGdldFF1YWxpZmllclN0
cmluZyhxdWFsaWZpZXIpLCBnZXRRdWFsaWZpZXJTdHJpbmcocGFyYW1RdWFsaWZpZXIpKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHF1YWxpZmllciA9PSBFdnFDb25z
dCkKLSAgICAgICAgdHlwZS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0UmVhZE9ubHkpOwotICAgIGVs
c2UKLSAgICAgICAgdHlwZS0+c2V0UXVhbGlmaWVyKHBhcmFtUXVhbGlmaWVyKTsKLQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotYm9vbCBUUGFyc2VDb250ZXh0OjpleHRlbnNpb25FcnJvckNoZWNr
KGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGV4dGVuc2lvbikKLXsKLSAg
ICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yID0gZXh0ZW5zaW9uQmVoYXZp
b3IoKTsKLSAgICBURXh0ZW5zaW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRC
ZWhhdmlvci5maW5kKGV4dGVuc2lvbi5jX3N0cigpKTsKLSAgICBpZiAoaXRlciA9PSBleHRCZWhh
dmlvci5lbmQoKSkgewotICAgICAgICBlcnJvcihsaW5lLCAiZXh0ZW5zaW9uIiwgZXh0ZW5zaW9u
LmNfc3RyKCksICJpcyBub3Qgc3VwcG9ydGVkIik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICAvLyBJbiBHTFNMIEVTLCBhbiBleHRlbnNpb24ncyBkZWZhdWx0IGJlaGF2aW9yIGlz
ICJkaXNhYmxlIi4KLSAgICBpZiAoaXRlci0+c2Vjb25kID09IEVCaERpc2FibGUgfHwgaXRlci0+
c2Vjb25kID09IEVCaFVuZGVmaW5lZCkgewotICAgICAgICBlcnJvcihsaW5lLCAiZXh0ZW5zaW9u
IiwgZXh0ZW5zaW9uLmNfc3RyKCksICJpcyBkaXNhYmxlZCIpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgaWYgKGl0ZXItPnNlY29uZCA9PSBFQmhXYXJuKSB7Ci0gICAgICAgIHdh
cm5pbmcobGluZSwgImV4dGVuc2lvbiIsIGV4dGVuc2lvbi5jX3N0cigpLCAiaXMgYmVpbmcgdXNl
ZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIFRQYXJzZUNvbnRleHQ6OnN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IGNoYXIqIGV4
dGVuc2lvbikKLXsKLSAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dGJlaGF2aW9yID0g
ZXh0ZW5zaW9uQmVoYXZpb3IoKTsKLSAgICBURXh0ZW5zaW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJh
dG9yIGl0ZXIgPSBleHRiZWhhdmlvci5maW5kKGV4dGVuc2lvbik7Ci0gICAgcmV0dXJuIChpdGVy
ICE9IGV4dGJlaGF2aW9yLmVuZCgpKTsKLX0KLQotYm9vbCBUUGFyc2VDb250ZXh0Ojppc0V4dGVu
c2lvbkVuYWJsZWQoY29uc3QgY2hhciogZXh0ZW5zaW9uKSBjb25zdAotewotICAgIGNvbnN0IFRF
eHRlbnNpb25CZWhhdmlvciYgZXh0YmVoYXZpb3IgPSBleHRlbnNpb25CZWhhdmlvcigpOwotICAg
IFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dGJlaGF2aW9yLmZp
bmQoZXh0ZW5zaW9uKTsKLQotICAgIGlmIChpdGVyID09IGV4dGJlaGF2aW9yLmVuZCgpKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiAoaXRlci0+c2Vj
b25kID09IEVCaEVuYWJsZSB8fCBpdGVyLT5zZWNvbmQgPT0gRUJoUmVxdWlyZSk7Ci19Ci0KLS8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8KLS8vIE5vbi1FcnJvcnMuCi0vLwotLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCi0KLS8vCi0vLyBMb29rIHVwIGEgZnVuY3Rpb24gbmFtZSBpbiB0aGUg
c3ltYm9sIHRhYmxlLCBhbmQgbWFrZSBzdXJlIGl0IGlzIGEgZnVuY3Rpb24uCi0vLwotLy8gUmV0
dXJuIHRoZSBmdW5jdGlvbiBzeW1ib2wgaWYgZm91bmQsIG90aGVyd2lzZSAwLgotLy8KLWNvbnN0
IFRGdW5jdGlvbiogVFBhcnNlQ29udGV4dDo6ZmluZEZ1bmN0aW9uKGNvbnN0IFRTb3VyY2VMb2Mm
IGxpbmUsIFRGdW5jdGlvbiogY2FsbCwgYm9vbCAqYnVpbHRJbikKLXsKLSAgICAvLyBGaXJzdCBm
aW5kIGJ5IHVubWFuZ2xlZCBuYW1lIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIG5hbWUg
aGFzIGJlZW4KLSAgICAvLyBoaWRkZW4gYnkgYSB2YXJpYWJsZSBuYW1lIG9yIHN0cnVjdCB0eXBl
bmFtZS4KLSAgICAvLyBJZiBhIGZ1bmN0aW9uIGlzIGZvdW5kLCBjaGVjayBmb3Igb25lIHdpdGgg
YSBtYXRjaGluZyBhcmd1bWVudCBsaXN0LgotICAgIGNvbnN0IFRTeW1ib2wqIHN5bWJvbCA9IHN5
bWJvbFRhYmxlLmZpbmQoY2FsbC0+Z2V0TmFtZSgpLCBidWlsdEluKTsKLSAgICBpZiAoc3ltYm9s
ID09IDAgfHwgc3ltYm9sLT5pc0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgc3ltYm9sID0gc3ltYm9s
VGFibGUuZmluZChjYWxsLT5nZXRNYW5nbGVkTmFtZSgpLCBidWlsdEluKTsKLSAgICB9Ci0KLSAg
ICBpZiAoc3ltYm9sID09IDApIHsKLSAgICAgICAgZXJyb3IobGluZSwgIm5vIG1hdGNoaW5nIG92
ZXJsb2FkZWQgZnVuY3Rpb24gZm91bmQiLCBjYWxsLT5nZXROYW1lKCkuY19zdHIoKSk7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGlmICghc3ltYm9sLT5pc0Z1bmN0aW9uKCkpIHsK
LSAgICAgICAgZXJyb3IobGluZSwgImZ1bmN0aW9uIG5hbWUgZXhwZWN0ZWQiLCBjYWxsLT5nZXRO
YW1lKCkuY19zdHIoKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxjb25zdCBURnVuY3Rpb24qPihzeW1ib2wpOwotfQotCi0vLwotLy8gSW5pdGlh
bGl6ZXJzIHNob3cgdXAgaW4gc2V2ZXJhbCBwbGFjZXMgaW4gdGhlIGdyYW1tYXIuICBIYXZlIG9u
ZSBzZXQgb2YKLS8vIGNvZGUgdG8gaGFuZGxlIHRoZW0gaGVyZS4KLS8vCi1ib29sIFRQYXJzZUNv
bnRleHQ6OmV4ZWN1dGVJbml0aWFsaXplcihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5n
JiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgcFR5cGUsIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbml0aWFsaXplciwgVEludGVybU5vZGUq
JiBpbnRlcm1Ob2RlLCBUVmFyaWFibGUqIHZhcmlhYmxlKQotewotICAgIFRUeXBlIHR5cGUgPSBU
VHlwZShwVHlwZSk7Ci0KLSAgICBpZiAodmFyaWFibGUgPT0gMCkgewotICAgICAgICBpZiAocmVz
ZXJ2ZWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIpKQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICAgICAgaWYgKHZvaWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIsIHBUeXBl
KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIC8vCi0gICAgICAgIC8vIGFk
ZCB2YXJpYWJsZSB0byBzeW1ib2wgdGFibGUKLSAgICAgICAgLy8KLSAgICAgICAgdmFyaWFibGUg
PSBuZXcgVFZhcmlhYmxlKCZpZGVudGlmaWVyLCB0eXBlKTsKLSAgICAgICAgaWYgKCEgc3ltYm9s
VGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRl
ZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgICAgICAvLyBkb24ndCBkZWxldGUgdmFyaWFibGUsIGl0J3MgdXNl
ZCBieSBlcnJvciByZWNvdmVyeSwgYW5kIHRoZSBwb29sIAotICAgICAgICAgICAgLy8gcG9wIHdp
bGwgdGFrZSBjYXJlIG9mIHRoZSBtZW1vcnkKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vCi0g
ICAgLy8gaWRlbnRpZmllciBtdXN0IGJlIG9mIHR5cGUgY29uc3RhbnQsIGEgZ2xvYmFsLCBvciBh
IHRlbXBvcmFyeQotICAgIC8vCi0gICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSB2YXJpYWJsZS0+
Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpOwotICAgIGlmICgocXVhbGlmaWVyICE9IEV2cVRlbXBv
cmFyeSkgJiYgKHF1YWxpZmllciAhPSBFdnFHbG9iYWwpICYmIChxdWFsaWZpZXIgIT0gRXZxQ29u
c3QpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIgY2Fubm90IGluaXRpYWxpemUgdGhpcyB0eXBl
IG9mIHF1YWxpZmllciAiLCB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllclN0cmluZygp
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIC8vCi0gICAgLy8gdGVzdCBmb3Ig
YW5kIHByb3BhZ2F0ZSBjb25zdGFudAotICAgIC8vCi0KLSAgICBpZiAocXVhbGlmaWVyID09IEV2
cUNvbnN0KSB7Ci0gICAgICAgIGlmIChxdWFsaWZpZXIgIT0gaW5pdGlhbGl6ZXItPmdldFR5cGUo
KS5nZXRRdWFsaWZpZXIoKSkgewotICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJ
bmZvU3RyZWFtOwotICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICInIiA8PCB2YXJpYWJs
ZS0+Z2V0VHlwZSgpLmdldENvbXBsZXRlU3RyaW5nKCkgPDwgIiciOwotICAgICAgICAgICAgc3Rk
OjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOwotICAgICAgICAgICAg
ZXJyb3IobGluZSwgIiBhc3NpZ25pbmcgbm9uLWNvbnN0YW50IHRvIiwgIj0iLCBleHRyYUluZm8u
Y19zdHIoKSk7Ci0gICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldFF1YWxpZmllcihF
dnFUZW1wb3JhcnkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKHR5cGUgIT0gaW5pdGlhbGl6ZXItPmdldFR5cGUoKSkgewotICAgICAgICAgICAgZXJy
b3IobGluZSwgIiBub24tbWF0Y2hpbmcgdHlwZXMgZm9yIGNvbnN0IGluaXRpYWxpemVyICIsIAot
ICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyU3RyaW5nKCkp
OwotICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5zZXRRdWFsaWZpZXIoRXZxVGVtcG9y
YXJ5KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChp
bml0aWFsaXplci0+Z2V0QXNDb25zdGFudFVuaW9uKCkpIHsgCi0gICAgICAgICAgICB2YXJpYWJs
ZS0+c2hhcmVDb25zdFBvaW50ZXIoaW5pdGlhbGl6ZXItPmdldEFzQ29uc3RhbnRVbmlvbigpLT5n
ZXRVbmlvbkFycmF5UG9pbnRlcigpKTsKLSAgICAgICAgfSBlbHNlIGlmIChpbml0aWFsaXplci0+
Z2V0QXNTeW1ib2xOb2RlKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IFRTeW1ib2wqIHN5bWJvbCA9
IHN5bWJvbFRhYmxlLmZpbmQoaW5pdGlhbGl6ZXItPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1i
b2woKSk7Ci0gICAgICAgICAgICBjb25zdCBUVmFyaWFibGUqIHRWYXIgPSBzdGF0aWNfY2FzdDxj
b25zdCBUVmFyaWFibGUqPihzeW1ib2wpOwotCi0gICAgICAgICAgICBDb25zdGFudFVuaW9uKiBj
b25zdEFycmF5ID0gdFZhci0+Z2V0Q29uc3RQb2ludGVyKCk7Ci0gICAgICAgICAgICB2YXJpYWJs
ZS0+c2hhcmVDb25zdFBvaW50ZXIoY29uc3RBcnJheSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07Ci0gICAgICAgICAgICBl
eHRyYUluZm9TdHJlYW0gPDwgIiciIDw8IHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVT
dHJpbmcoKSA8PCAiJyI7Ci0gICAgICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRy
YUluZm9TdHJlYW0uc3RyKCk7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiIGNhbm5vdCBhc3Np
Z24gdG8iLCAiPSIsIGV4dHJhSW5mby5jX3N0cigpKTsKLSAgICAgICAgICAgIHZhcmlhYmxlLT5n
ZXRUeXBlKCkuc2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAKLSAgICBpZiAocXVhbGlmaWVyICE9IEV2cUNvbnN0
KSB7Ci0gICAgICAgIFRJbnRlcm1TeW1ib2wqIGludGVybVN5bWJvbCA9IGludGVybWVkaWF0ZS5h
ZGRTeW1ib2wodmFyaWFibGUtPmdldFVuaXF1ZUlkKCksIHZhcmlhYmxlLT5nZXROYW1lKCksIHZh
cmlhYmxlLT5nZXRUeXBlKCksIGxpbmUpOwotICAgICAgICBpbnRlcm1Ob2RlID0gaW50ZXJtZWRp
YXRlLmFkZEFzc2lnbihFT3BJbml0aWFsaXplLCBpbnRlcm1TeW1ib2wsIGluaXRpYWxpemVyLCBs
aW5lKTsKLSAgICAgICAgaWYgKGludGVybU5vZGUgPT0gMCkgewotICAgICAgICAgICAgYXNzaWdu
RXJyb3IobGluZSwgIj0iLCBpbnRlcm1TeW1ib2wtPmdldENvbXBsZXRlU3RyaW5nKCksIGluaXRp
YWxpemVyLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0gICAgfSBlbHNlIAotICAgICAgICBpbnRlcm1Ob2RlID0gMDsKLQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotYm9vbCBUUGFyc2VDb250ZXh0OjphcmVBbGxDaGlsZENvbnN0KFRJ
bnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlKQotewotICAgIEFTU0VSVChhZ2dyTm9kZSAhPSBOVUxM
KTsKLSAgICBpZiAoIWFnZ3JOb2RlLT5pc0NvbnN0cnVjdG9yKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGJvb2wgYWxsQ29uc3RhbnQgPSB0cnVlOwotCi0gICAgLy8gY2hlY2sgaWYg
YWxsIHRoZSBjaGlsZCBub2RlcyBhcmUgY29uc3RhbnRzIHNvIHRoYXQgdGhleSBjYW4gYmUgaW5z
ZXJ0ZWQgaW50byAKLSAgICAvLyB0aGUgcGFyZW50IG5vZGUKLSAgICBUSW50ZXJtU2VxdWVuY2Ug
JnNlcXVlbmNlID0gYWdnck5vZGUtPmdldFNlcXVlbmNlKCkgOwotICAgIGZvciAoVEludGVybVNl
cXVlbmNlOjppdGVyYXRvciBwID0gc2VxdWVuY2UuYmVnaW4oKTsgcCAhPSBzZXF1ZW5jZS5lbmQo
KTsgKytwKSB7Ci0gICAgICAgIGlmICghKCpwKS0+Z2V0QXNUeXBlZCgpLT5nZXRBc0NvbnN0YW50
VW5pb24oKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
YWxsQ29uc3RhbnQ7Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byB0ZXN0IGZvciB0
aGUgY29ycmVjdG5lc3Mgb2YgdGhlIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHZhcmlvdXMgY29uc3Ry
dWN0b3IgZnVuY3Rpb25zCi0vLyBhbmQgYWxzbyBjb252ZXJ0IHRoZW0gdG8gdGhlIHJpZ2h0IGRh
dGF0eXBlIGlmIGl0IGlzIGFsbG93ZWQgYW5kIHJlcXVpcmVkLiAKLS8vCi0vLyBSZXR1cm5zIDAg
Zm9yIGFuIGVycm9yIG9yIHRoZSBjb25zdHJ1Y3RlZCBub2RlIChhZ2dyZWdhdGUgb3IgdHlwZWQp
IGZvciBubyBlcnJvci4KLS8vCi1USW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0
cnVjdG9yKFRJbnRlcm1Ob2RlKiBub2RlLCBjb25zdCBUVHlwZSogdHlwZSwgVE9wZXJhdG9yIG9w
LCBURnVuY3Rpb24qIGZuQ2FsbCwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKLXsKLSAgICBpZiAo
bm9kZSA9PSAwKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFn
Z3JOb2RlID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsKLSAgICAKLSAgICBURmllbGRMaXN0Ojpj
b25zdF9pdGVyYXRvciBtZW1iZXJGaWVsZHM7Ci0gICAgaWYgKG9wID09IEVPcENvbnN0cnVjdFN0
cnVjdCkKLSAgICAgICAgbWVtYmVyRmllbGRzID0gdHlwZS0+Z2V0U3RydWN0KCktPmZpZWxkcygp
LmJlZ2luKCk7Ci0gICAgCi0gICAgVFR5cGUgZWxlbWVudFR5cGUgPSAqdHlwZTsKLSAgICBpZiAo
dHlwZS0+aXNBcnJheSgpKQotICAgICAgICBlbGVtZW50VHlwZS5jbGVhckFycmF5bmVzcygpOwot
Ci0gICAgYm9vbCBzaW5nbGVBcmc7Ci0gICAgaWYgKGFnZ3JOb2RlKSB7Ci0gICAgICAgIGlmIChh
Z2dyTm9kZS0+Z2V0T3AoKSAhPSBFT3BOdWxsIHx8IGFnZ3JOb2RlLT5nZXRTZXF1ZW5jZSgpLnNp
emUoKSA9PSAxKQotICAgICAgICAgICAgc2luZ2xlQXJnID0gdHJ1ZTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgc2luZ2xlQXJnID0gZmFsc2U7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNpbmds
ZUFyZyA9IHRydWU7Ci0KLSAgICBUSW50ZXJtVHlwZWQgKm5ld05vZGU7Ci0gICAgaWYgKHNpbmds
ZUFyZykgewotICAgICAgICAvLyBJZiBzdHJ1Y3R1cmUgY29uc3RydWN0b3Igb3IgYXJyYXkgY29u
c3RydWN0b3IgaXMgYmVpbmcgY2FsbGVkIAotICAgICAgICAvLyBmb3Igb25seSBvbmUgcGFyYW1l
dGVyIGluc2lkZSB0aGUgc3RydWN0dXJlLCB3ZSBuZWVkIHRvIGNhbGwgY29uc3RydWN0U3RydWN0
IGZ1bmN0aW9uIG9uY2UuCi0gICAgICAgIGlmICh0eXBlLT5pc0FycmF5KCkpCi0gICAgICAgICAg
ICBuZXdOb2RlID0gY29uc3RydWN0U3RydWN0KG5vZGUsICZlbGVtZW50VHlwZSwgMSwgbm9kZS0+
Z2V0TGluZSgpLCBmYWxzZSk7Ci0gICAgICAgIGVsc2UgaWYgKG9wID09IEVPcENvbnN0cnVjdFN0
cnVjdCkKLSAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RTdHJ1Y3Qobm9kZSwgKCptZW1i
ZXJGaWVsZHMpLT50eXBlKCksIDEsIG5vZGUtPmdldExpbmUoKSwgZmFsc2UpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0QnVpbHRJbih0eXBlLCBvcCwgbm9k
ZSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxzZSk7Ci0KLSAgICAgICAgaWYgKG5ld05vZGUgJiYgbmV3
Tm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKSkgewotICAgICAgICAgICAgVEludGVybVR5cGVkKiBjb25z
dENvbnN0cnVjdG9yID0gZm9sZENvbnN0Q29uc3RydWN0b3IobmV3Tm9kZS0+Z2V0QXNBZ2dyZWdh
dGUoKSwgKnR5cGUpOwotICAgICAgICAgICAgaWYgKGNvbnN0Q29uc3RydWN0b3IpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGNvbnN0Q29uc3RydWN0b3I7Ci0gICAgICAgIH0KLQotICAgICAgICBy
ZXR1cm4gbmV3Tm9kZTsKLSAgICB9Ci0gICAgCi0gICAgLy8KLSAgICAvLyBIYW5kbGUgbGlzdCBv
ZiBhcmd1bWVudHMuCi0gICAgLy8KLSAgICBUSW50ZXJtU2VxdWVuY2UgJnNlcXVlbmNlVmVjdG9y
ID0gYWdnck5vZGUtPmdldFNlcXVlbmNlKCkgOyAgICAvLyBTdG9yZXMgdGhlIGluZm9ybWF0aW9u
IGFib3V0IHRoZSBwYXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yCi0gICAgLy8gaWYgdGhlIHN0
cnVjdHVyZSBjb25zdHJ1Y3RvciBjb250YWlucyBtb3JlIHRoYW4gb25lIHBhcmFtZXRlciwgdGhl
biBjb25zdHJ1Y3QKLSAgICAvLyBlYWNoIHBhcmFtZXRlcgotICAgIAotICAgIGludCBwYXJhbUNv
dW50ID0gMDsgIC8vIGtlZXBzIGEgdHJhY2sgb2YgdGhlIGNvbnN0cnVjdG9yIHBhcmFtZXRlciBu
dW1iZXIgYmVpbmcgY2hlY2tlZCAgICAKLSAgICAKLSAgICAvLyBmb3IgZWFjaCBwYXJhbWV0ZXIg
dG8gdGhlIGNvbnN0cnVjdG9yIGNhbGwsIGNoZWNrIHRvIHNlZSBpZiB0aGUgcmlnaHQgdHlwZSBp
cyBwYXNzZWQgb3IgY29udmVydCB0aGVtIAotICAgIC8vIHRvIHRoZSByaWdodCB0eXBlIGlmIHBv
c3NpYmxlIChhbmQgYWxsb3dlZCkuCi0gICAgLy8gZm9yIHN0cnVjdHVyZSBjb25zdHJ1Y3RvcnMs
IGp1c3QgY2hlY2sgaWYgdGhlIHJpZ2h0IHR5cGUgaXMgcGFzc2VkLCBubyBjb252ZXJzaW9uIGlz
IGFsbG93ZWQuCi0gICAgCi0gICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHAgPSBz
ZXF1ZW5jZVZlY3Rvci5iZWdpbigpOyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcCAhPSBzZXF1ZW5jZVZlY3Rvci5lbmQoKTsgcCsrLCBwYXJhbUNvdW50KyspIHsKLSAgICAg
ICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkKLSAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RT
dHJ1Y3QoKnAsICZlbGVtZW50VHlwZSwgcGFyYW1Db3VudCsxLCBub2RlLT5nZXRMaW5lKCksIHRy
dWUpOwotICAgICAgICBlbHNlIGlmIChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QpCi0gICAgICAg
ICAgICBuZXdOb2RlID0gY29uc3RydWN0U3RydWN0KCpwLCBtZW1iZXJGaWVsZHNbcGFyYW1Db3Vu
dF0tPnR5cGUoKSwgcGFyYW1Db3VudCsxLCBub2RlLT5nZXRMaW5lKCksIHRydWUpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0QnVpbHRJbih0eXBlLCBvcCwg
KnAsIG5vZGUtPmdldExpbmUoKSwgdHJ1ZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAobmV3Tm9k
ZSkgewotICAgICAgICAgICAgKnAgPSBuZXdOb2RlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
VEludGVybVR5cGVkKiBjb25zdHJ1Y3RvciA9IGludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVy
YXRvcihhZ2dyTm9kZSwgb3AsIGxpbmUpOwotICAgIFRJbnRlcm1UeXBlZCogY29uc3RDb25zdHJ1
Y3RvciA9IGZvbGRDb25zdENvbnN0cnVjdG9yKGNvbnN0cnVjdG9yLT5nZXRBc0FnZ3JlZ2F0ZSgp
LCAqdHlwZSk7Ci0gICAgaWYgKGNvbnN0Q29uc3RydWN0b3IpCi0gICAgICAgIHJldHVybiBjb25z
dENvbnN0cnVjdG9yOwotCi0gICAgcmV0dXJuIGNvbnN0cnVjdG9yOwotfQotCi1USW50ZXJtVHlw
ZWQqIFRQYXJzZUNvbnRleHQ6OmZvbGRDb25zdENvbnN0cnVjdG9yKFRJbnRlcm1BZ2dyZWdhdGUq
IGFnZ3JOb2RlLCBjb25zdCBUVHlwZSYgdHlwZSkKLXsKLSAgICBib29sIGNhbkJlRm9sZGVkID0g
YXJlQWxsQ2hpbGRDb25zdChhZ2dyTm9kZSk7Ci0gICAgYWdnck5vZGUtPnNldFR5cGUodHlwZSk7
Ci0gICAgaWYgKGNhbkJlRm9sZGVkKSB7Ci0gICAgICAgIGJvb2wgcmV0dXJuVmFsID0gZmFsc2U7
Ci0gICAgICAgIENvbnN0YW50VW5pb24qIHVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblt0
eXBlLmdldE9iamVjdFNpemUoKV07Ci0gICAgICAgIGlmIChhZ2dyTm9kZS0+Z2V0U2VxdWVuY2Uo
KS5zaXplKCkgPT0gMSkgIHsKLSAgICAgICAgICAgIHJldHVyblZhbCA9IGludGVybWVkaWF0ZS5w
YXJzZUNvbnN0VHJlZShhZ2dyTm9kZS0+Z2V0TGluZSgpLCBhZ2dyTm9kZSwgdW5pb25BcnJheSwg
YWdnck5vZGUtPmdldE9wKCksIHN5bWJvbFRhYmxlLCAgdHlwZSwgdHJ1ZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm5WYWwgPSBpbnRlcm1lZGlhdGUucGFy
c2VDb25zdFRyZWUoYWdnck5vZGUtPmdldExpbmUoKSwgYWdnck5vZGUsIHVuaW9uQXJyYXksIGFn
Z3JOb2RlLT5nZXRPcCgpLCBzeW1ib2xUYWJsZSwgIHR5cGUpOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChyZXR1cm5WYWwpCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICByZXR1cm4g
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgdHlwZSwgYWdnck5vZGUt
PmdldExpbmUoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8vIEZ1bmN0aW9uIGZv
ciBjb25zdHJ1Y3RvciBpbXBsZW1lbnRhdGlvbi4gQ2FsbHMgYWRkVW5hcnlNYXRoIHdpdGggYXBw
cm9wcmlhdGUgRU9wIHZhbHVlCi0vLyBmb3IgdGhlIHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0
b3IgKHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uKS4gRXNzZW50aWFsbHksIGl0IGNvbnZlcnRzCi0v
LyB0aGUgcGFyYW1ldGVyIHR5cGVzIGNvcnJlY3RseS4gSWYgYSBjb25zdHJ1Y3RvciBleHBlY3Rz
IGFuIGludCAobGlrZSBpdmVjMikgYW5kIGlzIHBhc3NlZCBhIAotLy8gZmxvYXQsIHRoZW4gZmxv
YXQgaXMgY29udmVydGVkIHRvIGludC4KLS8vCi0vLyBSZXR1cm5zIDAgZm9yIGFuIGVycm9yIG9y
IHRoZSBjb25zdHJ1Y3RlZCBub2RlLgotLy8KLVRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6
Y29uc3RydWN0QnVpbHRJbihjb25zdCBUVHlwZSogdHlwZSwgVE9wZXJhdG9yIG9wLCBUSW50ZXJt
Tm9kZSogbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgYm9vbCBzdWJzZXQpCi17Ci0gICAg
VEludGVybVR5cGVkKiBuZXdOb2RlOwotICAgIFRPcGVyYXRvciBiYXNpY09wOwotCi0gICAgLy8K
LSAgICAvLyBGaXJzdCwgY29udmVydCB0eXBlcyBhcyBuZWVkZWQuCi0gICAgLy8KLSAgICBzd2l0
Y2ggKG9wKSB7Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMyOgotICAgIGNhc2UgRU9wQ29uc3Ry
dWN0VmVjMzoKLSAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzQ6Ci0gICAgY2FzZSBFT3BDb25zdHJ1
Y3RNYXQyOgotICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MzoKLSAgICBjYXNlIEVPcENvbnN0cnVj
dE1hdDQ6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RGbG9hdDoKLSAgICAgICAgYmFzaWNPcCA9IEVP
cENvbnN0cnVjdEZsb2F0OwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgRU9wQ29uc3RydWN0
SVZlYzI6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMzoKLSAgICBjYXNlIEVPcENvbnN0cnVj
dElWZWM0OgotICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OgotICAgICAgICBiYXNpY09wID0gRU9w
Q29uc3RydWN0SW50OwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgRU9wQ29uc3RydWN0QlZl
YzI6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMzoKLSAgICBjYXNlIEVPcENvbnN0cnVjdEJW
ZWM0OgotICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDoKLSAgICAgICAgYmFzaWNPcCA9IEVPcENv
bnN0cnVjdEJvb2w7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZXJy
b3IobGluZSwgInVuc3VwcG9ydGVkIGNvbnN0cnVjdGlvbiIsICIiKTsKLSAgICAgICAgcmVjb3Zl
cigpOwotCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBuZXdOb2RlID0gaW50ZXJtZWRp
YXRlLmFkZFVuYXJ5TWF0aChiYXNpY09wLCBub2RlLCBub2RlLT5nZXRMaW5lKCksIHN5bWJvbFRh
YmxlKTsKLSAgICBpZiAobmV3Tm9kZSA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjYW4n
dCBjb252ZXJ0IiwgImNvbnN0cnVjdG9yIik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQot
ICAgIC8vCi0gICAgLy8gTm93LCBpZiB0aGVyZSBzdGlsbCBpc24ndCBhbiBvcGVyYXRpb24gdG8g
ZG8gdGhlIGNvbnN0cnVjdGlvbiwgYW5kIHdlIG5lZWQgb25lLCBhZGQgb25lLgotICAgIC8vCi0g
ICAgCi0gICAgLy8gT3RoZXJ3aXNlLCBza2lwIG91dCBlYXJseS4KLSAgICBpZiAoc3Vic2V0IHx8
IChuZXdOb2RlICE9IG5vZGUgJiYgbmV3Tm9kZS0+Z2V0VHlwZSgpID09ICp0eXBlKSkKLSAgICAg
ICAgcmV0dXJuIG5ld05vZGU7Ci0KLSAgICAvLyBzZXRBZ2dyZWdhdGVPcGVyYXRvciB3aWxsIGlu
c2VydCBhIG5ldyBub2RlIGZvciB0aGUgY29uc3RydWN0b3IsIGFzIG5lZWRlZC4KLSAgICByZXR1
cm4gaW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5ld05vZGUsIG9wLCBsaW5lKTsK
LX0KLQotLy8gVGhpcyBmdW5jdGlvbiB0ZXN0cyBmb3IgdGhlIHR5cGUgb2YgdGhlIHBhcmFtZXRl
cnMgdG8gdGhlIHN0cnVjdHVyZXMgY29uc3RydWN0b3JzLiBSYWlzZXMKLS8vIGFuIGVycm9yIG1l
c3NhZ2UgaWYgdGhlIGV4cGVjdGVkIHR5cGUgZG9lcyBub3QgbWF0Y2ggdGhlIHBhcmFtZXRlciBw
YXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLgotLy8KLS8vIFJldHVybnMgMCBmb3IgYW4gZXJyb3Ig
b3IgdGhlIGlucHV0IG5vZGUgaXRzZWxmIGlmIHRoZSBleHBlY3RlZCBhbmQgdGhlIGdpdmVuIHBh
cmFtZXRlciB0eXBlcyBtYXRjaC4KLS8vCi1USW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmNv
bnN0cnVjdFN0cnVjdChUSW50ZXJtTm9kZSogbm9kZSwgVFR5cGUqIHR5cGUsIGludCBwYXJhbUNv
dW50LCBjb25zdCBUU291cmNlTG9jJiBsaW5lLCBib29sIHN1YnNldCkKLXsKLSAgICBpZiAoKnR5
cGUgPT0gbm9kZS0+Z2V0QXNUeXBlZCgpLT5nZXRUeXBlKCkpIHsKLSAgICAgICAgaWYgKHN1YnNl
dCkKLSAgICAgICAgICAgIHJldHVybiBub2RlLT5nZXRBc1R5cGVkKCk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHJldHVybiBpbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3Iobm9k
ZS0+Z2V0QXNUeXBlZCgpLCBFT3BDb25zdHJ1Y3RTdHJ1Y3QsIGxpbmUpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKLSAgICAgICAgZXh0
cmFJbmZvU3RyZWFtIDw8ICJjYW5ub3QgY29udmVydCBwYXJhbWV0ZXIgIiA8PCBwYXJhbUNvdW50
IAotICAgICAgICAgICAgICAgICAgICAgICAgPDwgIiBmcm9tICciIDw8IG5vZGUtPmdldEFzVHlw
ZWQoKS0+Z2V0VHlwZSgpLmdldEJhc2ljU3RyaW5nKCkKLSAgICAgICAgICAgICAgICAgICAgICAg
IDw8ICInIHRvICciIDw8IHR5cGUtPmdldEJhc2ljU3RyaW5nKCkgPDwgIiciOwotICAgICAgICBz
dGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7Ci0gICAgICAgIGVy
cm9yKGxpbmUsICIiLCAiY29uc3RydWN0b3IiLCBleHRyYUluZm8uY19zdHIoKSk7Ci0gICAgICAg
IHJlY292ZXIoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotLy8KLS8vIFRoaXMgZnVu
Y3Rpb24gcmV0dXJucyB0aGUgdHJlZSByZXByZXNlbnRhdGlvbiBmb3IgdGhlIHZlY3RvciBmaWVs
ZChzKSBiZWluZyBhY2Nlc3NlZCBmcm9tIGNvbnRhbnQgdmVjdG9yLgotLy8gSWYgb25seSBvbmUg
Y29tcG9uZW50IG9mIHZlY3RvciBpcyBhY2Nlc3NlZCAodi54IG9yIHZbMF0gd2hlcmUgdiBpcyBh
IGNvbnRhbnQgdmVjdG9yKSwgdGhlbiBhIGNvbnRhbnQgbm9kZSBpcwotLy8gcmV0dXJuZWQsIGVs
c2UgYW4gYWdncmVnYXRlIG5vZGUgaXMgcmV0dXJuZWQgKGZvciB2Lnh5KS4gVGhlIGlucHV0IHRv
IHRoaXMgZnVuY3Rpb24gY291bGQgZWl0aGVyIGJlIHRoZSBzeW1ib2wKLS8vIG5vZGUgb3IgaXQg
Y291bGQgYmUgdGhlIGludGVybWVkaWF0ZSB0cmVlIHJlcHJlc2VudGF0aW9uIG9mIGFjY2Vzc2lu
ZyBmaWVsZHMgaW4gYSBjb25zdGFudCBzdHJ1Y3R1cmUgb3IgY29sdW1uIG9mIAotLy8gYSBjb25z
dGFudCBtYXRyaXguCi0vLwotVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdFZl
Y3Rvck5vZGUoVFZlY3RvckZpZWxkcyYgZmllbGRzLCBUSW50ZXJtVHlwZWQqIG5vZGUsIGNvbnN0
IFRTb3VyY2VMb2MmIGxpbmUpCi17Ci0gICAgVEludGVybVR5cGVkKiB0eXBlZE5vZGU7Ci0gICAg
VEludGVybUNvbnN0YW50VW5pb24qIHRlbXBDb25zdGFudE5vZGUgPSBub2RlLT5nZXRBc0NvbnN0
YW50VW5pb24oKTsKLQotICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXk7Ci0gICAgaWYgKHRl
bXBDb25zdGFudE5vZGUpIHsKLSAgICAgICAgdW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUt
PmdldFVuaW9uQXJyYXlQb2ludGVyKCk7Ci0KLSAgICAgICAgaWYgKCF1bmlvbkFycmF5KSB7Ci0g
ICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7IC8vIFRoZSBu
b2RlIGhhcyB0byBiZSBlaXRoZXIgYSBzeW1ib2wgbm9kZSBvciBhbiBhZ2dyZWdhdGUgbm9kZSBv
ciBhIHRlbXBDb25zdGFudCBub2RlLCBlbHNlLCBpdHMgYW4gZXJyb3IKLSAgICAgICAgZXJyb3Io
bGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgdmVjdG9yIiwgIkVycm9yIik7Ci0gICAgICAg
IHJlY292ZXIoKTsKLQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBDb25zdGFudFVu
aW9uKiBjb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bZmllbGRzLm51bV07Ci0KLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IGZpZWxkcy5udW07IGkrKykgewotICAgICAgICBpZiAoZmllbGRz
Lm9mZnNldHNbaV0gPj0gbm9kZS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpIHsKLSAgICAg
ICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKLSAgICAgICAgICAgIGV4
dHJhSW5mb1N0cmVhbSA8PCAidmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIg
PDwgZmllbGRzLm9mZnNldHNbaV0gPDwgIiciOwotICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0
cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOwotICAgICAgICAgICAgZXJyb3IobGluZSwg
IiIsICJbIiwgZXh0cmFJbmZvLmNfc3RyKCkpOwotICAgICAgICAgICAgcmVjb3ZlcigpOwotICAg
ICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAwOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBjb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtmaWVsZHMub2Zmc2V0c1tpXV07Ci0KLSAg
ICB9IAotICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0
QXJyYXksIG5vZGUtPmdldFR5cGUoKSwgbGluZSk7Ci0gICAgcmV0dXJuIHR5cGVkTm9kZTsKLX0K
LQotLy8KLS8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY29sdW1uIGJlaW5nIGFjY2Vzc2Vk
IGZyb20gYSBjb25zdGFudCBtYXRyaXguIFRoZSB2YWx1ZXMgYXJlIHJldHJpZXZlZCBmcm9tCi0v
LyB0aGUgc3ltYm9sIHRhYmxlIGFuZCBwYXJzZS10cmVlIGlzIGJ1aWx0IGZvciBhIHZlY3RvciAo
ZWFjaCBjb2x1bW4gb2YgYSBtYXRyaXggaXMgYSB2ZWN0b3IpLiBUaGUgaW5wdXQgCi0vLyB0byB0
aGUgZnVuY3Rpb24gY291bGQgZWl0aGVyIGJlIGEgc3ltYm9sIG5vZGUgKG1bMF0gd2hlcmUgbSBp
cyBhIGNvbnN0YW50IG1hdHJpeCl0aGF0IHJlcHJlc2VudHMgYSAKLS8vIGNvbnN0YW50IG1hdHJp
eCBvciBpdCBjb3VsZCBiZSB0aGUgdHJlZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29uc3RhbnQg
bWF0cml4IChzLm0xWzBdIHdoZXJlIHMgaXMgYSBjb25zdGFudCBzdHJ1Y3R1cmUpCi0vLwotVElu
dGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdE1hdHJpeE5vZGUoaW50IGluZGV4LCBU
SW50ZXJtVHlwZWQqIG5vZGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCi17Ci0gICAgVEludGVy
bVR5cGVkKiB0eXBlZE5vZGU7Ci0gICAgVEludGVybUNvbnN0YW50VW5pb24qIHRlbXBDb25zdGFu
dE5vZGUgPSBub2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLQotICAgIGlmIChpbmRleCA+PSBu
b2RlLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkgewotICAgICAgICBzdGQ6OnN0cmluZ3N0
cmVhbSBleHRyYUluZm9TdHJlYW07Ci0gICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAibWF0cml4
IGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIgPDwgaW5kZXggPDwgIiciOwotICAgICAg
ICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7Ci0gICAgICAg
IGVycm9yKGxpbmUsICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsKLSAgICAgICAgcmVjb3Zl
cigpOwotICAgICAgICBpbmRleCA9IDA7Ci0gICAgfQotCi0gICAgaWYgKHRlbXBDb25zdGFudE5v
ZGUpIHsKLSAgICAgICAgIENvbnN0YW50VW5pb24qIHVuaW9uQXJyYXkgPSB0ZW1wQ29uc3RhbnRO
b2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOwotICAgICAgICAgaW50IHNpemUgPSB0ZW1wQ29u
c3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKTsKLSAgICAgICAgIHR5cGVkTm9k
ZSA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKCZ1bmlvbkFycmF5W3NpemUqaW5kZXhd
LCB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIG1hdHJpeCIsICJFcnJvciIp
OwotICAgICAgICByZWNvdmVyKCk7Ci0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHR5cGVkTm9kZTsKLX0KLQotCi0vLwotLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFu
IGVsZW1lbnQgb2YgYW4gYXJyYXkgYWNjZXNzZWQgZnJvbSBhIGNvbnN0YW50IGFycmF5LiBUaGUg
dmFsdWVzIGFyZSByZXRyaWV2ZWQgZnJvbQotLy8gdGhlIHN5bWJvbCB0YWJsZSBhbmQgcGFyc2Ut
dHJlZSBpcyBidWlsdCBmb3IgdGhlIHR5cGUgb2YgdGhlIGVsZW1lbnQuIFRoZSBpbnB1dCAKLS8v
IHRvIHRoZSBmdW5jdGlvbiBjb3VsZCBlaXRoZXIgYmUgYSBzeW1ib2wgbm9kZSAoYVswXSB3aGVy
ZSBhIGlzIGEgY29uc3RhbnQgYXJyYXkpdGhhdCByZXByZXNlbnRzIGEgCi0vLyBjb25zdGFudCBh
cnJheSBvciBpdCBjb3VsZCBiZSB0aGUgdHJlZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29uc3Rh
bnQgYXJyYXkgKHMuYTFbMF0gd2hlcmUgcyBpcyBhIGNvbnN0YW50IHN0cnVjdHVyZSkKLS8vCi1U
SW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0QXJyYXlOb2RlKGludCBpbmRleCwg
VEludGVybVR5cGVkKiBub2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQotewotICAgIFRJbnRl
cm1UeXBlZCogdHlwZWROb2RlOwotICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiB0ZW1wQ29uc3Rh
bnROb2RlID0gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0gICAgVFR5cGUgYXJyYXlFbGVt
ZW50VHlwZSA9IG5vZGUtPmdldFR5cGUoKTsKLSAgICBhcnJheUVsZW1lbnRUeXBlLmNsZWFyQXJy
YXluZXNzKCk7Ci0KLSAgICBpZiAoaW5kZXggPj0gbm9kZS0+Z2V0VHlwZSgpLmdldEFycmF5U2l6
ZSgpKSB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKLSAgICAg
ICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJhcnJheSBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdl
ICciIDw8IGluZGV4IDw8ICInIjsKLSAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0
cmFJbmZvU3RyZWFtLnN0cigpOwotICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCBleHRyYUlu
Zm8uY19zdHIoKSk7Ci0gICAgICAgIHJlY292ZXIoKTsKLSAgICAgICAgaW5kZXggPSAwOwotICAg
IH0KLQotICAgIGlmICh0ZW1wQ29uc3RhbnROb2RlKSB7Ci0gICAgICAgICBzaXplX3QgYXJyYXlF
bGVtZW50U2l6ZSA9IGFycmF5RWxlbWVudFR5cGUuZ2V0T2JqZWN0U2l6ZSgpOwotICAgICAgICAg
Q29uc3RhbnRVbmlvbiogdW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJy
YXlQb2ludGVyKCk7Ci0gICAgICAgICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3Rh
bnRVbmlvbigmdW5pb25BcnJheVthcnJheUVsZW1lbnRTaXplICogaW5kZXhdLCB0ZW1wQ29uc3Rh
bnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGVycm9yKGxp
bmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIGFycmF5IiwgIkVycm9yIik7Ci0gICAgICAgIHJl
Y292ZXIoKTsKLQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHlwZWRO
b2RlOwotfQotCi0KLS8vCi0vLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlIG9mIGEg
cGFydGljdWxhciBmaWVsZCBpbnNpZGUgYSBjb25zdGFudCBzdHJ1Y3R1cmUgZnJvbSB0aGUgc3lt
Ym9sIHRhYmxlLiAKLS8vIElmIHRoZXJlIGlzIGFuIGVtYmVkZGVkL25lc3RlZCBzdHJ1Y3QsIGl0
IGFwcHJvcHJpYXRlbHkgY2FsbHMgYWRkQ29uc3RTdHJ1Y3ROZXN0ZWQgb3IgYWRkQ29uc3RTdHJ1
Y3RGcm9tQWdncgotLy8gZnVuY3Rpb24gYW5kIHJldHVybnMgdGhlIHBhcnNlLXRyZWUgd2l0aCB0
aGUgdmFsdWVzIG9mIHRoZSBlbWJlZGRlZC9uZXN0ZWQgc3RydWN0LgotLy8KLVRJbnRlcm1UeXBl
ZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RTdHJ1Y3QoVFN0cmluZyYgaWRlbnRpZmllciwgVElu
dGVybVR5cGVkKiBub2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQotewotICAgIGNvbnN0IFRG
aWVsZExpc3QmIGZpZWxkcyA9IG5vZGUtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7
Ci0KLSAgICBzaXplX3QgaW5zdGFuY2VTaXplID0gMDsKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9
IDA7IGluZGV4IDwgZmllbGRzLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBpZiAoZmllbGRz
W2luZGV4XS0+bmFtZSgpID09IGlkZW50aWZpZXIpIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgaW5zdGFuY2VTaXplICs9IGZpZWxkc1tpbmRleF0t
PnR5cGUoKS0+Z2V0T2JqZWN0U2l6ZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgVEludGVy
bVR5cGVkKiB0eXBlZE5vZGUgPSAwOwotICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiB0ZW1wQ29u
c3RhbnROb2RlID0gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0gICAgaWYgKHRlbXBDb25z
dGFudE5vZGUpIHsKLSAgICAgICAgIENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSB0ZW1wQ29u
c3RhbnROb2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOwotCi0gICAgICAgICB0eXBlZE5vZGUg
PSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbihjb25zdEFycmF5K2luc3RhbmNlU2l6ZSwg
dGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsgLy8gdHlwZSB3aWxsIGJlIGNoYW5n
ZWQgaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb24KLSAgICB9IGVsc2UgewotICAgICAgICBlcnJvcihs
aW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSBzdHJ1Y3R1cmUiLCAiRXJyb3IiKTsKLSAgICAg
ICAgcmVjb3ZlcigpOwotCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiB0
eXBlZE5vZGU7Ci19Ci0KLWJvb2wgVFBhcnNlQ29udGV4dDo6ZW50ZXJTdHJ1Y3REZWNsYXJhdGlv
bihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyKQotewot
ICAgICsrc3RydWN0TmVzdGluZ0xldmVsOwotCi0gICAgLy8gRW1iZWRkZWQgc3RydWN0dXJlIGRl
ZmluaXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIHBlciBHTFNMIEVTIHNwZWMuCi0gICAgLy8gVGhl
eSBhcmVuJ3QgYWxsb3dlZCBpbiBHTFNMIGVpdGhlciwgYnV0IHdlIG5lZWQgdG8gZGV0ZWN0IHRo
aXMgaGVyZQotICAgIC8vIHNvIHdlIGRvbid0IHJlbHkgb24gdGhlIEdMU0wgY29tcGlsZXIgdG8g
Y2F0Y2ggaXQuCi0gICAgaWYgKHN0cnVjdE5lc3RpbmdMZXZlbCA+IDEpIHsKLSAgICAgICAgZXJy
b3IobGluZSwgIiIsICJFbWJlZGRlZCBzdHJ1Y3QgZGVmaW5pdGlvbnMgYXJlIG5vdCBhbGxvd2Vk
Iik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotdm9pZCBUUGFyc2VDb250ZXh0OjpleGl0U3RydWN0RGVjbGFyYXRpb24oKQotewotICAgIC0t
c3RydWN0TmVzdGluZ0xldmVsOwotfQotCi1uYW1lc3BhY2UgewotCi1jb25zdCBpbnQga1dlYkdM
TWF4U3RydWN0TmVzdGluZyA9IDQ7Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi1ib29sIFRQYXJzZUNv
bnRleHQ6OnN0cnVjdE5lc3RpbmdFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNv
bnN0IFRGaWVsZCYgZmllbGQpCi17Ci0gICAgaWYgKCFpc1dlYkdMQmFzZWRTcGVjKHNoYWRlclNw
ZWMpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoZmllbGQudHlw
ZSgpLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIC8vIFdlJ3JlIGFscmVhZHkgaW5zaWRlIGEgc3RydWN0dXJlIGRlZmlu
aXRpb24gYXQgdGhpcyBwb2ludCwgc28gYWRkCi0gICAgLy8gb25lIHRvIHRoZSBmaWVsZCdzIHN0
cnVjdCBuZXN0aW5nLgotICAgIGlmICgxICsgZmllbGQudHlwZSgpLT5nZXREZWVwZXN0U3RydWN0
TmVzdGluZygpID4ga1dlYkdMTWF4U3RydWN0TmVzdGluZykgewotICAgICAgICBzdGQ6OnN0cmlu
Z3N0cmVhbSByZWFzb25TdHJlYW07Ci0gICAgICAgIHJlYXNvblN0cmVhbSA8PCAiUmVmZXJlbmNl
IG9mIHN0cnVjdCB0eXBlICIKLSAgICAgICAgICAgICAgICAgICAgIDw8IGZpZWxkLnR5cGUoKS0+
Z2V0U3RydWN0KCktPm5hbWUoKS5jX3N0cigpCi0gICAgICAgICAgICAgICAgICAgICA8PCAiIGV4
Y2VlZHMgbWF4aW11bSBhbGxvd2VkIG5lc3RpbmcgbGV2ZWwgb2YgIgotICAgICAgICAgICAgICAg
ICAgICAgPDwga1dlYkdMTWF4U3RydWN0TmVzdGluZzsKLSAgICAgICAgc3RkOjpzdHJpbmcgcmVh
c29uID0gcmVhc29uU3RyZWFtLnN0cigpOwotICAgICAgICBlcnJvcihsaW5lLCByZWFzb24uY19z
dHIoKSwgZmllbGQubmFtZSgpLmNfc3RyKCksICIiKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLwotLy8gUGFyc2UgYW4gYXJyYXkgaW5k
ZXggZXhwcmVzc2lvbgotLy8KLVRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkSW5kZXhF
eHByZXNzaW9uKFRJbnRlcm1UeXBlZCAqYmFzZUV4cHJlc3Npb24sIGNvbnN0IFRTb3VyY2VMb2Mm
IGxvY2F0aW9uLCBUSW50ZXJtVHlwZWQgKmluZGV4RXhwcmVzc2lvbikKLXsKLSAgICBUSW50ZXJt
VHlwZWQgKmluZGV4ZWRFeHByZXNzaW9uID0gTlVMTDsKLQotICAgIGlmICghYmFzZUV4cHJlc3Np
b24tPmlzQXJyYXkoKSAmJiAhYmFzZUV4cHJlc3Npb24tPmlzTWF0cml4KCkgJiYgIWJhc2VFeHBy
ZXNzaW9uLT5pc1ZlY3RvcigpKQotICAgIHsKLSAgICAgICAgaWYgKGJhc2VFeHByZXNzaW9uLT5n
ZXRBc1N5bWJvbE5vZGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgZXJyb3IobG9jYXRpb24s
ICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIs
IGJhc2VFeHByZXNzaW9uLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBlcnJvcihs
b2NhdGlvbiwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBvciB2
ZWN0b3IgIiwgImV4cHJlc3Npb24iKTsKLSAgICAgICAgfQotICAgICAgICByZWNvdmVyKCk7Ci0g
ICAgfQotCi0gICAgaWYgKGluZGV4RXhwcmVzc2lvbi0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29u
c3QpCi0gICAgewotICAgICAgICBpbnQgaW5kZXggPSBpbmRleEV4cHJlc3Npb24tPmdldEFzQ29u
c3RhbnRVbmlvbigpLT5nZXRJQ29uc3QoMCk7Ci0gICAgICAgIGlmIChpbmRleCA8IDApCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGluZm9TdHJlYW07Ci0gICAgICAg
ICAgICBpbmZvU3RyZWFtIDw8IGluZGV4OwotICAgICAgICAgICAgc3RkOjpzdHJpbmcgaW5mbyA9
IGluZm9TdHJlYW0uc3RyKCk7Ci0gICAgICAgICAgICBlcnJvcihsb2NhdGlvbiwgIm5lZ2F0aXZl
IGluZGV4IiwgaW5mby5jX3N0cigpKTsKLSAgICAgICAgICAgIHJlY292ZXIoKTsKLSAgICAgICAg
ICAgIGluZGV4ID0gMDsKLSAgICAgICAgfQotICAgICAgICBpZiAoYmFzZUV4cHJlc3Npb24tPmdl
dFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKGJhc2VFeHByZXNzaW9uLT5pc0FycmF5KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgLy8gY29uc3RhbnQgZm9sZGluZyBmb3IgYXJyYXlzCi0gICAgICAgICAgICAgICAg
aW5kZXhlZEV4cHJlc3Npb24gPSBhZGRDb25zdEFycmF5Tm9kZShpbmRleCwgYmFzZUV4cHJlc3Np
b24sIGxvY2F0aW9uKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGJhc2VF
eHByZXNzaW9uLT5pc1ZlY3RvcigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8v
IGNvbnN0YW50IGZvbGRpbmcgZm9yIHZlY3RvcnMKLSAgICAgICAgICAgICAgICBUVmVjdG9yRmll
bGRzIGZpZWxkczsKLSAgICAgICAgICAgICAgICBmaWVsZHMubnVtID0gMTsKLSAgICAgICAgICAg
ICAgICBmaWVsZHMub2Zmc2V0c1swXSA9IGluZGV4OyAvLyBuZWVkIHRvIGRvIGl0IHRoaXMgd2F5
IGJlY2F1c2Ugdi54eSBzZW5kcyBmaWVsZHMgaW50ZWdlciBhcnJheQotICAgICAgICAgICAgICAg
IGluZGV4ZWRFeHByZXNzaW9uID0gYWRkQ29uc3RWZWN0b3JOb2RlKGZpZWxkcywgYmFzZUV4cHJl
c3Npb24sIGxvY2F0aW9uKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGJh
c2VFeHByZXNzaW9uLT5pc01hdHJpeCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IC8vIGNvbnN0YW50IGZvbGRpbmcgZm9yIG1hdHJpY2VzCi0gICAgICAgICAgICAgICAgaW5kZXhl
ZEV4cHJlc3Npb24gPSBhZGRDb25zdE1hdHJpeE5vZGUoaW5kZXgsIGJhc2VFeHByZXNzaW9uLCBs
b2NhdGlvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAoYmFzZUV4cHJlc3Npb24tPmlzQXJyYXkoKSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gYmFzZUV4cHJlc3Npb24tPmdldFR5
cGUoKS5nZXRBcnJheVNpemUoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKLSAgICAgICAgICAgICAgICAg
ICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJhcnJheSBpbmRleCBvdXQgb2YgcmFuZ2UgJyIgPDwgaW5k
ZXggPDwgIiciOwotICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBl
eHRyYUluZm9TdHJlYW0uc3RyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGVycm9yKGxvY2F0aW9u
LCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlY292
ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBiYXNlRXhwcmVzc2lvbi0+Z2V0VHlw
ZSgpLmdldEFycmF5U2l6ZSgpIC0gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgZWxzZSBpZiAoYmFzZUV4cHJlc3Npb24tPmdldFF1YWxpZmllcigpID09IEV2cUZyYWdEYXRh
ICYmIGluZGV4ID4gMCAmJiAhaXNFeHRlbnNpb25FbmFibGVkKCJHTF9FWFRfZHJhd19idWZmZXJz
IikpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBlcnJvcihsb2NhdGlv
biwgIiIsICJbIiwgImFycmF5IGluZGV4ZXMgZm9yIGdsX0ZyYWdEYXRhIG11c3QgYmUgemVybyB3
aGVuIEdMX0VYVF9kcmF3X2J1ZmZlcnMgaXMgZGlzYWJsZWQiKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICAgICBpbmRleCA9IDA7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoKGJhc2VFeHByZXNz
aW9uLT5pc1ZlY3RvcigpIHx8IGJhc2VFeHByZXNzaW9uLT5pc01hdHJpeCgpKSAmJiBiYXNlRXhw
cmVzc2lvbi0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkgPD0gaW5kZXgpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOwot
ICAgICAgICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiZmllbGQgc2VsZWN0aW9uIG91dCBv
ZiByYW5nZSAnIiA8PCBpbmRleCA8PCAiJyI7Ci0gICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcg
ZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOwotICAgICAgICAgICAgICAgIGVycm9y
KGxvY2F0aW9uLCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7Ci0gICAgICAgICAgICAgICAg
cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgIGluZGV4ID0gYmFzZUV4cHJlc3Npb24tPmdldFR5
cGUoKS5nZXROb21pbmFsU2l6ZSgpIC0gMTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aW5kZXhFeHByZXNzaW9uLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50
ZXIoKS0+c2V0SUNvbnN0KGluZGV4KTsKLSAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uID0g
aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCBiYXNlRXhwcmVzc2lvbiwgaW5k
ZXhFeHByZXNzaW9uLCBsb2NhdGlvbik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAg
IHsKLSAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBpbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9w
SW5kZXhJbmRpcmVjdCwgYmFzZUV4cHJlc3Npb24sIGluZGV4RXhwcmVzc2lvbiwgbG9jYXRpb24p
OwotICAgIH0KLQotICAgIGlmIChpbmRleGVkRXhwcmVzc2lvbiA9PSAwKQotICAgIHsKLSAgICAg
ICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAg
ICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3QoMC4wZik7Ci0gICAgICAgIGluZGV4ZWRFeHByZXNz
aW9uID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0
RmxvYXQsIEVicEhpZ2gsIEV2cUNvbnN0KSwgbG9jYXRpb24pOwotICAgIH0KLSAgICBlbHNlIGlm
IChiYXNlRXhwcmVzc2lvbi0+aXNBcnJheSgpKQotICAgIHsKLSAgICAgICAgY29uc3QgVFR5cGUg
JmJhc2VUeXBlID0gYmFzZUV4cHJlc3Npb24tPmdldFR5cGUoKTsKLSAgICAgICAgaWYgKGJhc2VU
eXBlLmdldFN0cnVjdCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBUVHlwZSBjb3B5T2ZUeXBl
KGJhc2VUeXBlLmdldFN0cnVjdCgpKTsKLSAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uLT5z
ZXRUeXBlKGNvcHlPZlR5cGUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewot
ICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoVFR5cGUoYmFzZUV4cHJlc3Np
b24tPmdldEJhc2ljVHlwZSgpLCBiYXNlRXhwcmVzc2lvbi0+Z2V0UHJlY2lzaW9uKCksIEV2cVRl
bXBvcmFyeSwgYmFzZUV4cHJlc3Npb24tPmdldE5vbWluYWxTaXplKCksIGJhc2VFeHByZXNzaW9u
LT5pc01hdHJpeCgpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYmFzZUV4cHJlc3Npb24t
PmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkKLSAgICAgICAgewotICAgICAg
ICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPmdldFR5cGVQb2ludGVyKCktPnNldFF1YWxpZmllcihF
dnFDb25zdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoYmFzZUV4cHJlc3Npb24t
PmlzTWF0cml4KCkpCi0gICAgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IGJhc2VF
eHByZXNzaW9uLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QgPyBFdnFDb25z
dCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoVFR5
cGUoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgpLCBiYXNlRXhwcmVzc2lvbi0+Z2V0UHJl
Y2lzaW9uKCksIHF1YWxpZmllciwgYmFzZUV4cHJlc3Npb24tPmdldE5vbWluYWxTaXplKCkpKTsK
LSAgICB9Ci0gICAgZWxzZSBpZiAoYmFzZUV4cHJlc3Npb24tPmlzVmVjdG9yKCkpCi0gICAgewot
ICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IGJhc2VFeHByZXNzaW9uLT5nZXRUeXBlKCku
Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QgPyBFdnFDb25zdCA6IEV2cVRlbXBvcmFyeTsKLSAg
ICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoVFR5cGUoYmFzZUV4cHJlc3Npb24tPmdl
dEJhc2ljVHlwZSgpLCBiYXNlRXhwcmVzc2lvbi0+Z2V0UHJlY2lzaW9uKCksIHF1YWxpZmllcikp
OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0
VHlwZShiYXNlRXhwcmVzc2lvbi0+Z2V0VHlwZSgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gaW5k
ZXhlZEV4cHJlc3Npb247Ci19Ci0KLS8vCi0vLyBQYXJzZSBhbiBhcnJheSBvZiBzdHJpbmdzIHVz
aW5nIHl5cGFyc2UuCi0vLwotLy8gUmV0dXJucyAwIGZvciBzdWNjZXNzLgotLy8KLWludCBQYVBh
cnNlU3RyaW5ncyhzaXplX3QgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25z
dCBpbnQgbGVuZ3RoW10sCi0gICAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4dCogY29udGV4
dCkgewotICAgIGlmICgoY291bnQgPT0gMCkgfHwgKHN0cmluZyA9PSBOVUxMKSkKLSAgICAgICAg
cmV0dXJuIDE7Ci0KLSAgICBpZiAoZ2xzbGFuZ19pbml0aWFsaXplKGNvbnRleHQpKQotICAgICAg
ICByZXR1cm4gMTsKLQotICAgIGludCBlcnJvciA9IGdsc2xhbmdfc2Nhbihjb3VudCwgc3RyaW5n
LCBsZW5ndGgsIGNvbnRleHQpOwotICAgIGlmICghZXJyb3IpCi0gICAgICAgIGVycm9yID0gZ2xz
bGFuZ19wYXJzZShjb250ZXh0KTsKLQotICAgIGdsc2xhbmdfZmluYWxpemUoY29udGV4dCk7Ci0K
LSAgICByZXR1cm4gKGVycm9yID09IDApICYmIChjb250ZXh0LT5udW1FcnJvcnMoKSA9PSAwKSA/
IDAgOiAxOwotfQotCi0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1BhcnNlQ29udGV4dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1BhcnNlQ29udGV4dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmIz
YzNmN2VjODliMGRmYzdmYTExNGNhZTM1N2IxNmRmZjU5M2JlLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9QYXJzZUNvbnRleHQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0vLwotI2lmbmRlZiBfUEFSU0VSX0hFTFBFUl9JTkNMVURFRF8KLSNkZWZp
bmUgX1BBUlNFUl9IRUxQRVJfSU5DTFVERURfCi0KLSNpbmNsdWRlICJjb21waWxlci9EaWFnbm9z
dGljcy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuaCIKLSNpbmNsdWRl
ICJjb21waWxlci9sb2NhbGludGVybWVkaWF0ZS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9QcmVwcm9jZXNzb3IuaCIKLSNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgot
I2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCi0KLXN0cnVjdCBUTWF0cml4RmllbGRz
IHsKLSAgICBib29sIHdob2xlUm93OwotICAgIGJvb2wgd2hvbGVDb2w7Ci0gICAgaW50IHJvdzsK
LSAgICBpbnQgY29sOwotfTsKLQotLy8KLS8vIFRoZSBmb2xsb3dpbmcgYXJlIGV4dHJhIHZhcmlh
YmxlcyBuZWVkZWQgZHVyaW5nIHBhcnNpbmcsIGdyb3VwZWQgdG9nZXRoZXIgc28KLS8vIHRoZXkg
Y2FuIGJlIHBhc3NlZCB0byB0aGUgcGFyc2VyIHdpdGhvdXQgbmVlZGluZyBhIGdsb2JhbC4KLS8v
Ci1zdHJ1Y3QgVFBhcnNlQ29udGV4dCB7Ci0gICAgVFBhcnNlQ29udGV4dChUU3ltYm9sVGFibGUm
IHN5bXQsIFRFeHRlbnNpb25CZWhhdmlvciYgZXh0LCBUSW50ZXJtZWRpYXRlJiBpbnRlcm0sIFNo
U2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywgaW50IG9wdGlvbnMsIGJvb2wgY2hl
Y2tzUHJlY0Vycm9ycywgY29uc3QgY2hhciogc291cmNlUGF0aCwgVEluZm9TaW5rJiBpcykgOgot
ICAgICAgICAgICAgaW50ZXJtZWRpYXRlKGludGVybSksCi0gICAgICAgICAgICBzeW1ib2xUYWJs
ZShzeW10KSwKLSAgICAgICAgICAgIHNoYWRlclR5cGUodHlwZSksCi0gICAgICAgICAgICBzaGFk
ZXJTcGVjKHNwZWMpLAotICAgICAgICAgICAgY29tcGlsZU9wdGlvbnMob3B0aW9ucyksCi0gICAg
ICAgICAgICBzb3VyY2VQYXRoKHNvdXJjZVBhdGgpLAotICAgICAgICAgICAgdHJlZVJvb3QoMCks
Ci0gICAgICAgICAgICBsb29wTmVzdGluZ0xldmVsKDApLAotICAgICAgICAgICAgc3RydWN0TmVz
dGluZ0xldmVsKDApLAotICAgICAgICAgICAgY3VycmVudEZ1bmN0aW9uVHlwZShOVUxMKSwKLSAg
ICAgICAgICAgIGZ1bmN0aW9uUmV0dXJuc1ZhbHVlKGZhbHNlKSwKLSAgICAgICAgICAgIGNoZWNr
c1ByZWNpc2lvbkVycm9ycyhjaGVja3NQcmVjRXJyb3JzKSwKLSAgICAgICAgICAgIGRpYWdub3N0
aWNzKGlzKSwKLSAgICAgICAgICAgIGRpcmVjdGl2ZUhhbmRsZXIoZXh0LCBkaWFnbm9zdGljcyks
Ci0gICAgICAgICAgICBwcmVwcm9jZXNzb3IoJmRpYWdub3N0aWNzLCAmZGlyZWN0aXZlSGFuZGxl
ciksCi0gICAgICAgICAgICBzY2FubmVyKE5VTEwpIHsgIH0KLSAgICBUSW50ZXJtZWRpYXRlJiBp
bnRlcm1lZGlhdGU7IC8vIHRvIGhvbGQgYW5kIGJ1aWxkIGEgcGFyc2UgdHJlZQotICAgIFRTeW1i
b2xUYWJsZSYgc3ltYm9sVGFibGU7ICAgLy8gc3ltYm9sIHRhYmxlIHRoYXQgZ29lcyB3aXRoIHRo
ZSBsYW5ndWFnZSBjdXJyZW50bHkgYmVpbmcgcGFyc2VkCi0gICAgU2hTaGFkZXJUeXBlIHNoYWRl
clR5cGU7ICAgICAgICAgICAgICAvLyB2ZXJ0ZXggb3IgZnJhZ21lbnQgbGFuZ3VhZ2UgKGZ1dHVy
ZTogcGFjayBvciB1bnBhY2spCi0gICAgU2hTaGFkZXJTcGVjIHNoYWRlclNwZWM7ICAgICAgICAg
ICAgICAvLyBUaGUgbGFuZ3VhZ2Ugc3BlY2lmaWNhdGlvbiBjb21waWxlciBjb25mb3JtcyB0byAt
IEdMRVMyIG9yIFdlYkdMLgotICAgIGludCBjb21waWxlT3B0aW9uczsKLSAgICBjb25zdCBjaGFy
KiBzb3VyY2VQYXRoOyAgICAgIC8vIFBhdGggb2Ygc291cmNlIGZpbGUgb3IgTlVMTC4KLSAgICBU
SW50ZXJtTm9kZSogdHJlZVJvb3Q7ICAgICAgIC8vIHJvb3Qgb2YgcGFyc2UgdHJlZSBiZWluZyBj
cmVhdGVkCi0gICAgaW50IGxvb3BOZXN0aW5nTGV2ZWw7ICAgICAgICAvLyAwIGlmIG91dHNpZGUg
YWxsIGxvb3BzCi0gICAgaW50IHN0cnVjdE5lc3RpbmdMZXZlbDsgICAgICAvLyBpbmNyZW1lbnRl
ZCB3aGlsZSBwYXJzaW5nIGEgc3RydWN0IGRlY2xhcmF0aW9uCi0gICAgY29uc3QgVFR5cGUqIGN1
cnJlbnRGdW5jdGlvblR5cGU7ICAvLyB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIHRo
YXQncyBjdXJyZW50bHkgYmVpbmcgcGFyc2VkCi0gICAgYm9vbCBmdW5jdGlvblJldHVybnNWYWx1
ZTsgICAvLyB0cnVlIGlmIGEgbm9uLXZvaWQgZnVuY3Rpb24gaGFzIGEgcmV0dXJuCi0gICAgYm9v
bCBjaGVja3NQcmVjaXNpb25FcnJvcnM7ICAvLyB0cnVlIGlmIGFuIGVycm9yIHdpbGwgYmUgZ2Vu
ZXJhdGVkIHdoZW4gYSB2YXJpYWJsZSBpcyBkZWNsYXJlZCB3aXRob3V0IHByZWNpc2lvbiwgZXhw
bGljaXQgb3IgaW1wbGljaXQuCi0gICAgYm9vbCBmcmFnbWVudFByZWNpc2lvbkhpZ2g7ICAvLyB0
cnVlIGlmIGhpZ2hwIHByZWNpc2lvbiBpcyBzdXBwb3J0ZWQgaW4gdGhlIGZyYWdtZW50IGxhbmd1
YWdlLgotICAgIFRTdHJpbmcgSGFzaEVyck1zZzsKLSAgICBURGlhZ25vc3RpY3MgZGlhZ25vc3Rp
Y3M7Ci0gICAgVERpcmVjdGl2ZUhhbmRsZXIgZGlyZWN0aXZlSGFuZGxlcjsKLSAgICBwcDo6UHJl
cHJvY2Vzc29yIHByZXByb2Nlc3NvcjsKLSAgICB2b2lkKiBzY2FubmVyOwotCi0gICAgaW50IG51
bUVycm9ycygpIGNvbnN0IHsgcmV0dXJuIGRpYWdub3N0aWNzLm51bUVycm9ycygpOyB9Ci0gICAg
VEluZm9TaW5rJiBpbmZvU2luaygpIHsgcmV0dXJuIGRpYWdub3N0aWNzLmluZm9TaW5rKCk7IH0K
LSAgICB2b2lkIGVycm9yKGNvbnN0IFRTb3VyY2VMb2MmIGxvYywgY29uc3QgY2hhciAqcmVhc29u
LCBjb25zdCBjaGFyKiB0b2tlbiwKLSAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5m
bz0iIik7Ci0gICAgdm9pZCB3YXJuaW5nKGNvbnN0IFRTb3VyY2VMb2MmIGxvYywgY29uc3QgY2hh
ciogcmVhc29uLCBjb25zdCBjaGFyKiB0b2tlbiwKLSAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciogZXh0cmFJbmZvPSIiKTsKLSAgICB2b2lkIHRyYWNlKGNvbnN0IGNoYXIqIHN0cik7Ci0gICAg
dm9pZCByZWNvdmVyKCk7Ci0KLSAgICBib29sIHBhcnNlVmVjdG9yRmllbGRzKGNvbnN0IFRTdHJp
bmcmLCBpbnQgdmVjU2l6ZSwgVFZlY3RvckZpZWxkcyYsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUp
OwotICAgIGJvb2wgcGFyc2VNYXRyaXhGaWVsZHMoY29uc3QgVFN0cmluZyYsIGludCBtYXRTaXpl
LCBUTWF0cml4RmllbGRzJiwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSk7Ci0KLSAgICBib29sIHJl
c2VydmVkRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBp
ZGVudGlmaWVyKTsKLSAgICB2b2lkIGFzc2lnbkVycm9yKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUs
IGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5nIGxlZnQsIFRTdHJpbmcgcmlnaHQpOwotICAgIHZvaWQg
dW5hcnlPcEVycm9yKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUU3Ry
aW5nIG9wZXJhbmQpOwotICAgIHZvaWQgYmluYXJ5T3BFcnJvcihjb25zdCBUU291cmNlTG9jJiBs
aW5lLCBjb25zdCBjaGFyKiBvcCwgVFN0cmluZyBsZWZ0LCBUU3RyaW5nIHJpZ2h0KTsKLSAgICBi
b29sIHByZWNpc2lvbkVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFByZWNpc2lv
biBwcmVjaXNpb24sIFRCYXNpY1R5cGUgdHlwZSk7Ci0gICAgYm9vbCBsVmFsdWVFcnJvckNoZWNr
KGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUSW50ZXJtVHlwZWQqKTsK
LSAgICBib29sIGNvbnN0RXJyb3JDaGVjayhUSW50ZXJtVHlwZWQqIG5vZGUpOwotICAgIGJvb2wg
aW50ZWdlckVycm9yQ2hlY2soVEludGVybVR5cGVkKiBub2RlLCBjb25zdCBjaGFyKiB0b2tlbik7
Ci0gICAgYm9vbCBnbG9iYWxFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGJvb2wg
Z2xvYmFsLCBjb25zdCBjaGFyKiB0b2tlbik7Ci0gICAgYm9vbCBjb25zdHJ1Y3RvckVycm9yQ2hl
Y2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVEludGVybU5vZGUqLCBURnVuY3Rpb24mLCBUT3Bl
cmF0b3IsIFRUeXBlKik7Ci0gICAgYm9vbCBhcnJheVNpemVFcnJvckNoZWNrKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxpbmUsIFRJbnRlcm1UeXBlZCogZXhwciwgaW50JiBzaXplKTsKLSAgICBib29sIGFy
cmF5UXVhbGlmaWVyRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUHVibGljVHlw
ZSB0eXBlKTsKLSAgICBib29sIGFycmF5VHlwZUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYg
bGluZSwgVFB1YmxpY1R5cGUgdHlwZSk7Ci0gICAgYm9vbCBhcnJheUVycm9yQ2hlY2soY29uc3Qg
VFNvdXJjZUxvYyYgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUgdHlwZSwg
VFZhcmlhYmxlKiYgdmFyaWFibGUpOwotICAgIGJvb2wgdm9pZEVycm9yQ2hlY2soY29uc3QgVFNv
dXJjZUxvYyYsIGNvbnN0IFRTdHJpbmcmLCBjb25zdCBUUHVibGljVHlwZSYpOwotICAgIGJvb2wg
Ym9vbEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYsIGNvbnN0IFRJbnRlcm1UeXBlZCopOwot
ICAgIGJvb2wgYm9vbEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYsIGNvbnN0IFRQdWJsaWNU
eXBlJik7Ci0gICAgYm9vbCBzYW1wbGVyRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5l
LCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUsIGNvbnN0IGNoYXIqIHJlYXNvbik7Ci0gICAgYm9v
bCBzdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0
IFRQdWJsaWNUeXBlJiBwVHlwZSk7Ci0gICAgYm9vbCBwYXJhbWV0ZXJTYW1wbGVyRXJyb3JDaGVj
ayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUXVhbGlmaWVyIHF1YWxpZmllciwgY29uc3QgVFR5
cGUmIHR5cGUpOwotICAgIGJvb2wgbm9uSW5pdENvbnN0RXJyb3JDaGVjayhjb25zdCBUU291cmNl
TG9jJiBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSwgYm9vbCBh
cnJheSk7Ci0gICAgYm9vbCBub25Jbml0RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5l
LCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSwgVFZhcmlhYmxlKiYgdmFy
aWFibGUpOwotICAgIGJvb2wgcGFyYW1FcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUs
IFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVyIHBhcmFtUXVhbGlmaWVyLCBUVHlwZSog
dHlwZSk7Ci0gICAgYm9vbCBleHRlbnNpb25FcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIGNvbnN0IFRTdHJpbmcmKTsKLQotICAgIGNvbnN0IFRQcmFnbWEmIHByYWdtYSgpIGNvbnN0
IHsgcmV0dXJuIGRpcmVjdGl2ZUhhbmRsZXIucHJhZ21hKCk7IH0KLSAgICBjb25zdCBURXh0ZW5z
aW9uQmVoYXZpb3ImIGV4dGVuc2lvbkJlaGF2aW9yKCkgY29uc3QgeyByZXR1cm4gZGlyZWN0aXZl
SGFuZGxlci5leHRlbnNpb25CZWhhdmlvcigpOyB9Ci0gICAgYm9vbCBzdXBwb3J0c0V4dGVuc2lv
bihjb25zdCBjaGFyKiBleHRlbnNpb24pOwotICAgIGJvb2wgaXNFeHRlbnNpb25FbmFibGVkKGNv
bnN0IGNoYXIqIGV4dGVuc2lvbikgY29uc3Q7Ci0KLSAgICBib29sIGNvbnRhaW5zU2FtcGxlcihU
VHlwZSYgdHlwZSk7Ci0gICAgYm9vbCBhcmVBbGxDaGlsZENvbnN0KFRJbnRlcm1BZ2dyZWdhdGUq
IGFnZ3JOb2RlKTsKLSAgICBjb25zdCBURnVuY3Rpb24qIGZpbmRGdW5jdGlvbihjb25zdCBUU291
cmNlTG9jJiBsaW5lLCBURnVuY3Rpb24qIHBmbkNhbGwsIGJvb2wgKmJ1aWx0SW4gPSAwKTsKLSAg
ICBib29sIGV4ZWN1dGVJbml0aWFsaXplcihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5n
JiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgcFR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVEludGVybVR5cGVkKiBpbml0aWFsaXplciwgVEludGVybU5vZGUqJiBpbnRlcm1Ob2Rl
LCBUVmFyaWFibGUqIHZhcmlhYmxlID0gMCk7Ci0KLSAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0
cnVjdG9yKFRJbnRlcm1Ob2RlKiwgY29uc3QgVFR5cGUqLCBUT3BlcmF0b3IsIFRGdW5jdGlvbios
IGNvbnN0IFRTb3VyY2VMb2MmKTsKLSAgICBUSW50ZXJtVHlwZWQqIGZvbGRDb25zdENvbnN0cnVj
dG9yKFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlLCBjb25zdCBUVHlwZSYgdHlwZSk7Ci0gICAg
VEludGVybVR5cGVkKiBjb25zdHJ1Y3RTdHJ1Y3QoVEludGVybU5vZGUqLCBUVHlwZSosIGludCwg
Y29uc3QgVFNvdXJjZUxvYyYsIGJvb2wgc3Vic2V0KTsKLSAgICBUSW50ZXJtVHlwZWQqIGNvbnN0
cnVjdEJ1aWx0SW4oY29uc3QgVFR5cGUqLCBUT3BlcmF0b3IsIFRJbnRlcm1Ob2RlKiwgY29uc3Qg
VFNvdXJjZUxvYyYsIGJvb2wgc3Vic2V0KTsKLSAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0VmVj
dG9yTm9kZShUVmVjdG9yRmllbGRzJiwgVEludGVybVR5cGVkKiwgY29uc3QgVFNvdXJjZUxvYyYp
OwotICAgIFRJbnRlcm1UeXBlZCogYWRkQ29uc3RNYXRyaXhOb2RlKGludCAsIFRJbnRlcm1UeXBl
ZCosIGNvbnN0IFRTb3VyY2VMb2MmKTsKLSAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0QXJyYXlO
b2RlKGludCBpbmRleCwgVEludGVybVR5cGVkKiBub2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5l
KTsKLSAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0U3RydWN0KFRTdHJpbmcmICwgVEludGVybVR5
cGVkKiwgY29uc3QgVFNvdXJjZUxvYyYpOwotICAgIFRJbnRlcm1UeXBlZCogYWRkSW5kZXhFeHBy
ZXNzaW9uKFRJbnRlcm1UeXBlZCAqYmFzZUV4cHJlc3Npb24sIGNvbnN0IFRTb3VyY2VMb2MmIGxv
Y2F0aW9uLCBUSW50ZXJtVHlwZWQgKmluZGV4RXhwcmVzc2lvbik7Ci0KLSAgICAvLyBQZXJmb3Jt
cyBhbiBlcnJvciBjaGVjayBmb3IgZW1iZWRkZWQgc3RydWN0IGRlY2xhcmF0aW9ucy4KLSAgICAv
LyBSZXR1cm5zIHRydWUgaWYgYW4gZXJyb3Igd2FzIHJhaXNlZCBkdWUgdG8gdGhlIGRlY2xhcmF0
aW9uIG9mCi0gICAgLy8gdGhpcyBzdHJ1Y3QuCi0gICAgYm9vbCBlbnRlclN0cnVjdERlY2xhcmF0
aW9uKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIpOwot
ICAgIHZvaWQgZXhpdFN0cnVjdERlY2xhcmF0aW9uKCk7Ci0KLSAgICBib29sIHN0cnVjdE5lc3Rp
bmdFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRGaWVsZCYgZmllbGQp
OwotfTsKLQotaW50IFBhUGFyc2VTdHJpbmdzKHNpemVfdCBjb3VudCwgY29uc3QgY2hhciogY29u
c3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKLSAgICAgICAgICAgICAgICAgICBUUGFy
c2VDb250ZXh0KiBjb250ZXh0KTsKLQotI2VuZGlmIC8vIF9QQVJTRVJfSEVMUEVSX0lOQ0xVREVE
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xB
bGxvYy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9j
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI5OTM1NjdiMzUzNWUxMjEyNDY4
OTVlOThmYThmNGM0MTAwZGZjOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9j
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI5NCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwot
Ci0jaW5jbHVkZSAiY29tcGlsZXIvUG9vbEFsbG9jLmgiCi0KLSNpZm5kZWYgX01TQ19WRVIKLSNp
bmNsdWRlIDxzdGRpbnQuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpbmNsdWRl
ICJjb21tb24vYW5nbGV1dGlscy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVHbG9i
YWxzLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvb3NpbmNsdWRlLmgiCi0KLU9TX1RMU0luZGV4IFBv
b2xJbmRleCA9IE9TX0lOVkFMSURfVExTX0lOREVYOwotCi1ib29sIEluaXRpYWxpemVQb29sSW5k
ZXgoKQotewotICAgIGFzc2VydChQb29sSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpOwot
Ci0gICAgUG9vbEluZGV4ID0gT1NfQWxsb2NUTFNJbmRleCgpOwotICAgIHJldHVybiBQb29sSW5k
ZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7Ci19Ci0KLXZvaWQgRnJlZVBvb2xJbmRleCgpCi17
Ci0gICAgYXNzZXJ0KFBvb2xJbmRleCAhPSBPU19JTlZBTElEX1RMU19JTkRFWCk7Ci0KLSAgICBP
U19GcmVlVExTSW5kZXgoUG9vbEluZGV4KTsKLSAgICBQb29sSW5kZXggPSBPU19JTlZBTElEX1RM
U19JTkRFWDsKLX0KLQotVFBvb2xBbGxvY2F0b3IqIEdldEdsb2JhbFBvb2xBbGxvY2F0b3IoKQot
ewotICAgIGFzc2VydChQb29sSW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpOwotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxUUG9vbEFsbG9jYXRvcio+KE9TX0dldFRMU1ZhbHVlKFBvb2xJbmRl
eCkpOwotfQotCi12b2lkIFNldEdsb2JhbFBvb2xBbGxvY2F0b3IoVFBvb2xBbGxvY2F0b3IqIHBv
b2xBbGxvY2F0b3IpCi17Ci0gICAgYXNzZXJ0KFBvb2xJbmRleCAhPSBPU19JTlZBTElEX1RMU19J
TkRFWCk7Ci0gICAgT1NfU2V0VExTVmFsdWUoUG9vbEluZGV4LCBwb29sQWxsb2NhdG9yKTsKLX0K
LQotLy8KLS8vIEltcGxlbWVudCB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgVFBvb2xBbGxvY2F0
b3IgY2xhc3MsIHdoaWNoCi0vLyBpcyBkb2N1bWVudGVkIGluIFBvb2xBbGxvYy5oLgotLy8KLVRQ
b29sQWxsb2NhdG9yOjpUUG9vbEFsbG9jYXRvcihpbnQgZ3Jvd3RoSW5jcmVtZW50LCBpbnQgYWxs
b2NhdGlvbkFsaWdubWVudCkgOiAKLSAgICBwYWdlU2l6ZShncm93dGhJbmNyZW1lbnQpLAotICAg
IGFsaWdubWVudChhbGxvY2F0aW9uQWxpZ25tZW50KSwKLSAgICBmcmVlTGlzdCgwKSwKLSAgICBp
blVzZUxpc3QoMCksCi0gICAgbnVtQ2FsbHMoMCksCi0gICAgdG90YWxCeXRlcygwKQotewotICAg
IC8vCi0gICAgLy8gRG9uJ3QgYWxsb3cgcGFnZSBzaXplcyB3ZSBrbm93IGFyZSBzbWFsbGVyIHRo
YW4gYWxsIGNvbW1vbgotICAgIC8vIE9TIHBhZ2Ugc2l6ZXMuCi0gICAgLy8KLSAgICBpZiAocGFn
ZVNpemUgPCA0KjEwMjQpCi0gICAgICAgIHBhZ2VTaXplID0gNCoxMDI0OwotCi0gICAgLy8KLSAg
ICAvLyBBIGxhcmdlIGN1cnJlbnRQYWdlT2Zmc2V0IGluZGljYXRlcyBhIG5ldyBwYWdlIG5lZWRz
IHRvCi0gICAgLy8gYmUgb2J0YWluZWQgdG8gYWxsb2NhdGUgbWVtb3J5LgotICAgIC8vCi0gICAg
Y3VycmVudFBhZ2VPZmZzZXQgPSBwYWdlU2l6ZTsKLQotICAgIC8vCi0gICAgLy8gQWRqdXN0IGFs
aWdubWVudCB0byBiZSBhdCBsZWFzdCBwb2ludGVyIGFsaWduZWQgYW5kCi0gICAgLy8gcG93ZXIg
b2YgMi4KLSAgICAvLwotICAgIHNpemVfdCBtaW5BbGlnbiA9IHNpemVvZih2b2lkKik7Ci0gICAg
YWxpZ25tZW50ICY9IH4obWluQWxpZ24gLSAxKTsKLSAgICBpZiAoYWxpZ25tZW50IDwgbWluQWxp
Z24pCi0gICAgICAgIGFsaWdubWVudCA9IG1pbkFsaWduOwotICAgIHNpemVfdCBhID0gMTsKLSAg
ICB3aGlsZSAoYSA8IGFsaWdubWVudCkKLSAgICAgICAgYSA8PD0gMTsKLSAgICBhbGlnbm1lbnQg
PSBhOwotICAgIGFsaWdubWVudE1hc2sgPSBhIC0gMTsKLQotICAgIC8vCi0gICAgLy8gQWxpZ24g
aGVhZGVyIHNraXAKLSAgICAvLwotICAgIGhlYWRlclNraXAgPSBtaW5BbGlnbjsKLSAgICBpZiAo
aGVhZGVyU2tpcCA8IHNpemVvZih0SGVhZGVyKSkgewotICAgICAgICBoZWFkZXJTa2lwID0gKHNp
emVvZih0SGVhZGVyKSArIGFsaWdubWVudE1hc2spICYgfmFsaWdubWVudE1hc2s7Ci0gICAgfQot
fQotCi1UUG9vbEFsbG9jYXRvcjo6flRQb29sQWxsb2NhdG9yKCkKLXsKLSAgICB3aGlsZSAoaW5V
c2VMaXN0KSB7Ci0gICAgICAgIHRIZWFkZXIqIG5leHQgPSBpblVzZUxpc3QtPm5leHRQYWdlOwot
ICAgICAgICBpblVzZUxpc3QtPn50SGVhZGVyKCk7Ci0gICAgICAgIGRlbGV0ZSBbXSByZWludGVy
cHJldF9jYXN0PGNoYXIqPihpblVzZUxpc3QpOwotICAgICAgICBpblVzZUxpc3QgPSBuZXh0Owot
ICAgIH0KLQotICAgIC8vIFdlIHNob3VsZCBub3QgY2hlY2sgdGhlIGd1YXJkIGJsb2NrcwotICAg
IC8vIGhlcmUsIGJlY2F1c2Ugd2UgZGlkIGl0IGFscmVhZHkgd2hlbiB0aGUgYmxvY2sgd2FzCi0g
ICAgLy8gcGxhY2VkIGludG8gdGhlIGZyZWUgbGlzdC4KLSAgICAvLwotICAgIHdoaWxlIChmcmVl
TGlzdCkgewotICAgICAgICB0SGVhZGVyKiBuZXh0ID0gZnJlZUxpc3QtPm5leHRQYWdlOwotICAg
ICAgICBkZWxldGUgW10gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZnJlZUxpc3QpOwotICAgICAg
ICBmcmVlTGlzdCA9IG5leHQ7Ci0gICAgfQotfQotCi0vLyBTdXBwb3J0IE1TVkMrKyA2LjAKLWNv
bnN0IHVuc2lnbmVkIGNoYXIgVEFsbG9jYXRpb246Omd1YXJkQmxvY2tCZWdpblZhbCA9IDB4ZmI7
Ci1jb25zdCB1bnNpZ25lZCBjaGFyIFRBbGxvY2F0aW9uOjpndWFyZEJsb2NrRW5kVmFsICAgPSAw
eGZlOwotY29uc3QgdW5zaWduZWQgY2hhciBUQWxsb2NhdGlvbjo6dXNlckRhdGFGaWxsICAgICAg
ID0gMHhjZDsKLQotI2lmZGVmIEdVQVJEX0JMT0NLUwotICAgIGNvbnN0IHNpemVfdCBUQWxsb2Nh
dGlvbjo6Z3VhcmRCbG9ja1NpemUgPSAxNjsKLSNlbHNlCi0gICAgY29uc3Qgc2l6ZV90IFRBbGxv
Y2F0aW9uOjpndWFyZEJsb2NrU2l6ZSA9IDA7Ci0jZW5kaWYKLQotLy8KLS8vIENoZWNrIGEgc2lu
Z2xlIGd1YXJkIGJsb2NrIGZvciBkYW1hZ2UKLS8vCi12b2lkIFRBbGxvY2F0aW9uOjpjaGVja0d1
YXJkQmxvY2sodW5zaWduZWQgY2hhciogYmxvY2tNZW0sIHVuc2lnbmVkIGNoYXIgdmFsLCBjb25z
dCBjaGFyKiBsb2NUZXh0KSBjb25zdAotewotI2lmZGVmIEdVQVJEX0JMT0NLUwotICAgIGZvciAo
c2l6ZV90IHggPSAwOyB4IDwgZ3VhcmRCbG9ja1NpemU7IHgrKykgewotICAgICAgICBpZiAoYmxv
Y2tNZW1beF0gIT0gdmFsKSB7Ci0gICAgICAgICAgICBjaGFyIGFzc2VydE1zZ1s4MF07Ci0KLSAg
ICAgICAgICAgIC8vIFdlIGRvbid0IHByaW50IHRoZSBhc3NlcnQgbWVzc2FnZS4gIEl0J3MgaGVy
ZSBqdXN0IHRvIGJlIGhlbHBmdWwuCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikKLSAgICAgICAgICAg
IHNucHJpbnRmKGFzc2VydE1zZywgc2l6ZW9mKGFzc2VydE1zZyksICJQb29sQWxsb2M6IERhbWFn
ZSAlcyAlSXUgYnl0ZSBhbGxvY2F0aW9uIGF0IDB4JXBcbiIsCi0gICAgICAgICAgICAgICAgICAg
IGxvY1RleHQsIHNpemUsIGRhdGEoKSk7Ci0jZWxzZQotICAgICAgICAgICAgc25wcmludGYoYXNz
ZXJ0TXNnLCBzaXplb2YoYXNzZXJ0TXNnKSwgIlBvb2xBbGxvYzogRGFtYWdlICVzICV6dSBieXRl
IGFsbG9jYXRpb24gYXQgMHglcFxuIiwKLSAgICAgICAgICAgICAgICAgICAgbG9jVGV4dCwgc2l6
ZSwgZGF0YSgpKTsKLSNlbmRpZgotICAgICAgICAgICAgYXNzZXJ0KDAgJiYgIlBvb2xBbGxvYzog
RGFtYWdlIGluIGd1YXJkIGJsb2NrIik7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLX0KLQot
Ci12b2lkIFRQb29sQWxsb2NhdG9yOjpwdXNoKCkKLXsKLSAgICB0QWxsb2NTdGF0ZSBzdGF0ZSA9
IHsgY3VycmVudFBhZ2VPZmZzZXQsIGluVXNlTGlzdCB9OwotCi0gICAgc3RhY2sucHVzaF9iYWNr
KHN0YXRlKTsKLSAgICAgICAgCi0gICAgLy8KLSAgICAvLyBJbmRpY2F0ZSB0aGVyZSBpcyBubyBj
dXJyZW50IHBhZ2UgdG8gYWxsb2NhdGUgZnJvbS4KLSAgICAvLwotICAgIGN1cnJlbnRQYWdlT2Zm
c2V0ID0gcGFnZVNpemU7Ci19Ci0KLS8vCi0vLyBEbyBhIG1hc3MtZGVhbGxvY2F0aW9uIG9mIGFs
bCB0aGUgaW5kaXZpZHVhbCBhbGxvY2F0aW9ucwotLy8gdGhhdCBoYXZlIG9jY3VycmVkIHNpbmNl
IHRoZSBsYXN0IHB1c2goKSwgb3Igc2luY2UgdGhlCi0vLyBsYXN0IHBvcCgpLCBvciBzaW5jZSB0
aGUgb2JqZWN0J3MgY3JlYXRpb24uCi0vLwotLy8gVGhlIGRlYWxsb2NhdGVkIHBhZ2VzIGFyZSBz
YXZlZCBmb3IgZnV0dXJlIGFsbG9jYXRpb25zLgotLy8KLXZvaWQgVFBvb2xBbGxvY2F0b3I6OnBv
cCgpCi17Ci0gICAgaWYgKHN0YWNrLnNpemUoKSA8IDEpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHRIZWFkZXIqIHBhZ2UgPSBzdGFjay5iYWNrKCkucGFnZTsKLSAgICBjdXJyZW50UGFnZU9mZnNl
dCA9IHN0YWNrLmJhY2soKS5vZmZzZXQ7Ci0KLSAgICB3aGlsZSAoaW5Vc2VMaXN0ICE9IHBhZ2Up
IHsKLSAgICAgICAgLy8gaW52b2tlIGRlc3RydWN0b3IgdG8gZnJlZSBhbGxvY2F0aW9uIGxpc3QK
LSAgICAgICAgaW5Vc2VMaXN0LT5+dEhlYWRlcigpOwotICAgICAgICAKLSAgICAgICAgdEhlYWRl
ciogbmV4dEluVXNlID0gaW5Vc2VMaXN0LT5uZXh0UGFnZTsKLSAgICAgICAgaWYgKGluVXNlTGlz
dC0+cGFnZUNvdW50ID4gMSkKLSAgICAgICAgICAgIGRlbGV0ZSBbXSByZWludGVycHJldF9jYXN0
PGNoYXIqPihpblVzZUxpc3QpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGluVXNlTGlz
dC0+bmV4dFBhZ2UgPSBmcmVlTGlzdDsKLSAgICAgICAgICAgIGZyZWVMaXN0ID0gaW5Vc2VMaXN0
OwotICAgICAgICB9Ci0gICAgICAgIGluVXNlTGlzdCA9IG5leHRJblVzZTsKLSAgICB9Ci0KLSAg
ICBzdGFjay5wb3BfYmFjaygpOwotfQotCi0vLwotLy8gRG8gYSBtYXNzLWRlYWxsb2NhdGlvbiBv
ZiBhbGwgdGhlIGluZGl2aWR1YWwgYWxsb2NhdGlvbnMKLS8vIHRoYXQgaGF2ZSBvY2N1cnJlZC4K
LS8vCi12b2lkIFRQb29sQWxsb2NhdG9yOjpwb3BBbGwoKQotewotICAgIHdoaWxlIChzdGFjay5z
aXplKCkgPiAwKQotICAgICAgICBwb3AoKTsKLX0KLQotdm9pZCogVFBvb2xBbGxvY2F0b3I6OmFs
bG9jYXRlKHNpemVfdCBudW1CeXRlcykKLXsKLSAgICAvLwotICAgIC8vIEp1c3Qga2VlcCBzb21l
IGludGVyZXN0aW5nIHN0YXRpc3RpY3MuCi0gICAgLy8KLSAgICArK251bUNhbGxzOwotICAgIHRv
dGFsQnl0ZXMgKz0gbnVtQnl0ZXM7Ci0KLSAgICAvLyBJZiB3ZSBhcmUgdXNpbmcgZ3VhcmQgYmxv
Y2tzLCBhbGwgYWxsb2NhdGlvbnMgYXJlIGJyYWNrZXRlZCBieQotICAgIC8vIHRoZW06IFtndWFy
ZGJsb2NrXVthbGxvY2F0aW9uXVtndWFyZGJsb2NrXS4gIG51bUJ5dGVzIGlzIGhvdwotICAgIC8v
IG11Y2ggbWVtb3J5IHRoZSBjYWxsZXIgYXNrZWQgZm9yLiAgYWxsb2NhdGlvblNpemUgaXMgdGhl
IHRvdGFsCi0gICAgLy8gc2l6ZSBpbmNsdWRpbmcgZ3VhcmQgYmxvY2tzLiAgSW4gcmVsZWFzZSBi
dWlsZCwKLSAgICAvLyBndWFyZEJsb2NrU2l6ZT0wIGFuZCB0aGlzIGFsbCBnZXRzIG9wdGltaXpl
ZCBhd2F5LgotICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IFRBbGxvY2F0aW9uOjphbGxvY2F0
aW9uU2l6ZShudW1CeXRlcyk7Ci0gICAgLy8gRGV0ZWN0IGludGVnZXIgb3ZlcmZsb3cuCi0gICAg
aWYgKGFsbG9jYXRpb25TaXplIDwgbnVtQnl0ZXMpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
Ly8KLSAgICAvLyBEbyB0aGUgYWxsb2NhdGlvbiwgbW9zdCBsaWtlbHkgY2FzZSBmaXJzdCwgZm9y
IGVmZmljaWVuY3kuCi0gICAgLy8gVGhpcyBzdGVwIGNvdWxkIGJlIG1vdmVkIHRvIGJlIGlubGlu
ZSBzb21ldGltZS4KLSAgICAvLwotICAgIGlmIChhbGxvY2F0aW9uU2l6ZSA8PSBwYWdlU2l6ZSAt
IGN1cnJlbnRQYWdlT2Zmc2V0KSB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIFNhZmUgdG8gYWxs
b2NhdGUgZnJvbSBjdXJyZW50UGFnZU9mZnNldC4KLSAgICAgICAgLy8KLSAgICAgICAgdW5zaWdu
ZWQgY2hhciogbWVtb3J5ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyICo+KGluVXNl
TGlzdCkgKyBjdXJyZW50UGFnZU9mZnNldDsKLSAgICAgICAgY3VycmVudFBhZ2VPZmZzZXQgKz0g
YWxsb2NhdGlvblNpemU7Ci0gICAgICAgIGN1cnJlbnRQYWdlT2Zmc2V0ID0gKGN1cnJlbnRQYWdl
T2Zmc2V0ICsgYWxpZ25tZW50TWFzaykgJiB+YWxpZ25tZW50TWFzazsKLQotICAgICAgICByZXR1
cm4gaW5pdGlhbGl6ZUFsbG9jYXRpb24oaW5Vc2VMaXN0LCBtZW1vcnksIG51bUJ5dGVzKTsKLSAg
ICB9Ci0KLSAgICBpZiAoYWxsb2NhdGlvblNpemUgPiBwYWdlU2l6ZSAtIGhlYWRlclNraXApIHsK
LSAgICAgICAgLy8KLSAgICAgICAgLy8gRG8gYSBtdWx0aS1wYWdlIGFsbG9jYXRpb24uICBEb24n
dCBtaXggdGhlc2Ugd2l0aCB0aGUgb3RoZXJzLgotICAgICAgICAvLyBUaGUgT1MgaXMgZWZmaWNp
ZW50IGFuZCBhbGxvY2F0aW5nIGFuZCBmcmVlLWluZyBtdWx0aXBsZSBwYWdlcy4KLSAgICAgICAg
Ly8KLSAgICAgICAgc2l6ZV90IG51bUJ5dGVzVG9BbGxvYyA9IGFsbG9jYXRpb25TaXplICsgaGVh
ZGVyU2tpcDsKLSAgICAgICAgLy8gRGV0ZWN0IGludGVnZXIgb3ZlcmZsb3cuCi0gICAgICAgIGlm
IChudW1CeXRlc1RvQWxsb2MgPCBhbGxvY2F0aW9uU2l6ZSkKLSAgICAgICAgICAgIHJldHVybiAw
OwotCi0gICAgICAgIHRIZWFkZXIqIG1lbW9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dEhlYWRlcio+
KDo6bmV3IGNoYXJbbnVtQnl0ZXNUb0FsbG9jXSk7Ci0gICAgICAgIGlmIChtZW1vcnkgPT0gMCkK
LSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIC8vIFVzZSBwbGFjZW1lbnQtbmV3IHRv
IGluaXRpYWxpemUgaGVhZGVyCi0gICAgICAgIG5ldyhtZW1vcnkpIHRIZWFkZXIoaW5Vc2VMaXN0
LCAobnVtQnl0ZXNUb0FsbG9jICsgcGFnZVNpemUgLSAxKSAvIHBhZ2VTaXplKTsKLSAgICAgICAg
aW5Vc2VMaXN0ID0gbWVtb3J5OwotCi0gICAgICAgIGN1cnJlbnRQYWdlT2Zmc2V0ID0gcGFnZVNp
emU7ICAvLyBtYWtlIG5leHQgYWxsb2NhdGlvbiBjb21lIGZyb20gYSBuZXcgcGFnZQotCi0gICAg
ICAgIC8vIE5vIGd1YXJkIGJsb2NrcyBmb3IgbXVsdGktcGFnZSBhbGxvY2F0aW9ucyAoeWV0KQot
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KG1lbW9yeSkgKyBoZWFkZXJTa2lwKTsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8v
IE5lZWQgYSBzaW1wbGUgcGFnZSB0byBhbGxvY2F0ZSBmcm9tLgotICAgIC8vCi0gICAgdEhlYWRl
ciogbWVtb3J5OwotICAgIGlmIChmcmVlTGlzdCkgewotICAgICAgICBtZW1vcnkgPSBmcmVlTGlz
dDsKLSAgICAgICAgZnJlZUxpc3QgPSBmcmVlTGlzdC0+bmV4dFBhZ2U7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgbWVtb3J5ID0gcmVpbnRlcnByZXRfY2FzdDx0SGVhZGVyKj4oOjpuZXcgY2hhcltw
YWdlU2l6ZV0pOwotICAgICAgICBpZiAobWVtb3J5ID09IDApCi0gICAgICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci0KLSAgICAvLyBVc2UgcGxhY2VtZW50LW5ldyB0byBpbml0aWFsaXplIGhlYWRl
cgotICAgIG5ldyhtZW1vcnkpIHRIZWFkZXIoaW5Vc2VMaXN0LCAxKTsKLSAgICBpblVzZUxpc3Qg
PSBtZW1vcnk7Ci0gICAgCi0gICAgdW5zaWduZWQgY2hhciogcmV0ID0gcmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZCBjaGFyICo+KGluVXNlTGlzdCkgKyBoZWFkZXJTa2lwOwotICAgIGN1cnJlbnRQ
YWdlT2Zmc2V0ID0gKGhlYWRlclNraXAgKyBhbGxvY2F0aW9uU2l6ZSArIGFsaWdubWVudE1hc2sp
ICYgfmFsaWdubWVudE1hc2s7Ci0KLSAgICByZXR1cm4gaW5pdGlhbGl6ZUFsbG9jYXRpb24oaW5V
c2VMaXN0LCByZXQsIG51bUJ5dGVzKTsKLX0KLQotCi0vLwotLy8gQ2hlY2sgYWxsIGFsbG9jYXRp
b25zIGluIGEgbGlzdCBmb3IgZGFtYWdlIGJ5IGNhbGxpbmcgY2hlY2sgb24gZWFjaC4KLS8vCi12
b2lkIFRBbGxvY2F0aW9uOjpjaGVja0FsbG9jTGlzdCgpIGNvbnN0Ci17Ci0gICAgZm9yIChjb25z
dCBUQWxsb2NhdGlvbiogYWxsb2MgPSB0aGlzOyBhbGxvYyAhPSAwOyBhbGxvYyA9IGFsbG9jLT5w
cmV2QWxsb2MpCi0gICAgICAgIGFsbG9jLT5jaGVjaygpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBlZGQyNDljNGQzYTM5YmIyMDFjMzg1NTQyMzk5MDgwOGY1NWYwN2U1Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuaAorKysgL2Rldi9udWxsCkBAIC0xLDMw
MCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIF9QT09MQUxMT0NfSU5DTFVE
RURfCi0jZGVmaW5lIF9QT09MQUxMT0NfSU5DTFVERURfCi0KLSNpZmRlZiBfREVCVUcKLSNkZWZp
bmUgR1VBUkRfQkxPQ0tTICAvLyBkZWZpbmUgdG8gZW5hYmxlIGd1YXJkIGJsb2NrIHNhbml0eSBj
aGVja2luZwotI2VuZGlmCi0KLS8vCi0vLyBUaGlzIGhlYWRlciBkZWZpbmVzIGFuIGFsbG9jYXRv
ciB0aGF0IGNhbiBiZSB1c2VkIHRvIGVmZmljaWVudGx5Ci0vLyBhbGxvY2F0ZSBhIGxhcmdlIG51
bWJlciBvZiBzbWFsbCByZXF1ZXN0cyBmb3IgaGVhcCBtZW1vcnksIHdpdGggdGhlIAotLy8gaW50
ZW50aW9uIHRoYXQgdGhleSBhcmUgbm90IGluZGl2aWR1YWxseSBkZWFsbG9jYXRlZCwgYnV0IHJh
dGhlciAKLS8vIGNvbGxlY3RpdmVseSBkZWFsbG9jYXRlZCBhdCBvbmUgdGltZS4KLS8vCi0vLyBU
aGlzIHNpbXVsdGFuZW91c2x5Ci0vLwotLy8gKiBNYWtlcyBlYWNoIGluZGl2aWR1YWwgYWxsb2Nh
dGlvbiBtdWNoIG1vcmUgZWZmaWNpZW50OyB0aGUKLS8vICAgICB0eXBpY2FsIGFsbG9jYXRpb24g
aXMgdHJpdmlhbC4KLS8vICogQ29tcGxldGVseSBhdm9pZHMgdGhlIGNvc3Qgb2YgZG9pbmcgaW5k
aXZpZHVhbCBkZWFsbG9jYXRpb24uCi0vLyAqIFNhdmVzIHRoZSB0cm91YmxlIG9mIHRyYWNraW5n
IGRvd24gYW5kIHBsdWdnaW5nIGEgbGFyZ2UgY2xhc3Mgb2YgbGVha3MuCi0vLwotLy8gSW5kaXZp
ZHVhbCBjbGFzc2VzIGNhbiB1c2UgdGhpcyBhbGxvY2F0b3IgYnkgc3VwcGx5aW5nIHRoZWlyIG93
bgotLy8gbmV3IGFuZCBkZWxldGUgbWV0aG9kcy4KLS8vCi0vLyBTVEwgY29udGFpbmVycyBjYW4g
dXNlIHRoaXMgYWxsb2NhdG9yIGJ5IHVzaW5nIHRoZSBwb29sX2FsbG9jYXRvcgotLy8gY2xhc3Mg
YXMgdGhlIGFsbG9jYXRvciAoc2Vjb25kKSB0ZW1wbGF0ZSBhcmd1bWVudC4KLS8vCi0KLSNpbmNs
dWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0K
LS8vIElmIHdlIGFyZSB1c2luZyBndWFyZCBibG9ja3MsIHdlIG11c3QgdHJhY2sgZWFjaCBpbmRp
dnVhbAotLy8gYWxsb2NhdGlvbi4gIElmIHdlIGFyZW4ndCB1c2luZyBndWFyZCBibG9ja3MsIHRo
ZXNlCi0vLyBuZXZlciBnZXQgaW5zdGFudGlhdGVkLCBzbyB3b24ndCBoYXZlIGFueSBpbXBhY3Qu
Ci0vLyAKLQotY2xhc3MgVEFsbG9jYXRpb24gewotcHVibGljOgotICAgIFRBbGxvY2F0aW9uKHNp
emVfdCBzaXplLCB1bnNpZ25lZCBjaGFyKiBtZW0sIFRBbGxvY2F0aW9uKiBwcmV2ID0gMCkgOgot
ICAgICAgICBzaXplKHNpemUpLCBtZW0obWVtKSwgcHJldkFsbG9jKHByZXYpIHsKLSAgICAgICAg
Ly8gQWxsb2NhdGlvbnMgYXJlIGJyYWNrZXRlZDoKLSAgICAgICAgLy8gICAgW2FsbG9jYXRpb25I
ZWFkZXJdW2luaXRpYWxHdWFyZEJsb2NrXVt1c2VyRGF0YV1bZmluYWxHdWFyZEJsb2NrXQotICAg
ICAgICAvLyBUaGlzIHdvdWxkIGJlIGNsZWFuZXIgd2l0aCBpZiAoZ3VhcmRCbG9ja1NpemUpLi4u
LCBidXQgdGhhdAotICAgICAgICAvLyBtYWtlcyB0aGUgY29tcGlsZXIgcHJpbnQgd2FybmluZ3Mg
YWJvdXQgMCBsZW5ndGggbWVtc2V0cywKLSAgICAgICAgLy8gZXZlbiB3aXRoIHRoZSBpZigpIHBy
b3RlY3RpbmcgdGhlbS4KLSNpZmRlZiBHVUFSRF9CTE9DS1MKLSAgICAgICAgbWVtc2V0KHByZUd1
YXJkKCksIGd1YXJkQmxvY2tCZWdpblZhbCwgZ3VhcmRCbG9ja1NpemUpOwotICAgICAgICBtZW1z
ZXQoZGF0YSgpLCAgICAgIHVzZXJEYXRhRmlsbCwgICAgICAgc2l6ZSk7Ci0gICAgICAgIG1lbXNl
dChwb3N0R3VhcmQoKSwgZ3VhcmRCbG9ja0VuZFZhbCwgICBndWFyZEJsb2NrU2l6ZSk7Ci0jZW5k
aWYKLSAgICB9Ci0KLSAgICB2b2lkIGNoZWNrKCkgY29uc3QgewotICAgICAgICBjaGVja0d1YXJk
QmxvY2socHJlR3VhcmQoKSwgIGd1YXJkQmxvY2tCZWdpblZhbCwgImJlZm9yZSIpOwotICAgICAg
ICBjaGVja0d1YXJkQmxvY2socG9zdEd1YXJkKCksIGd1YXJkQmxvY2tFbmRWYWwsICAgImFmdGVy
Iik7Ci0gICAgfQotCi0gICAgdm9pZCBjaGVja0FsbG9jTGlzdCgpIGNvbnN0OwotCi0gICAgLy8g
UmV0dXJuIHRvdGFsIHNpemUgbmVlZGVkIHRvIGFjY29tb2RhdGUgdXNlciBidWZmZXIgb2YgJ3Np
emUnLAotICAgIC8vIHBsdXMgb3VyIHRyYWNraW5nIGRhdGEuCi0gICAgaW5saW5lIHN0YXRpYyBz
aXplX3QgYWxsb2NhdGlvblNpemUoc2l6ZV90IHNpemUpIHsKLSAgICAgICAgcmV0dXJuIHNpemUg
KyAyICogZ3VhcmRCbG9ja1NpemUgKyBoZWFkZXJTaXplKCk7Ci0gICAgfQotCi0gICAgLy8gT2Zm
c2V0IGZyb20gc3Vycm91bmRpbmcgYnVmZmVyIHRvIGdldCB0byB1c2VyIGRhdGEgYnVmZmVyLgot
ICAgIGlubGluZSBzdGF0aWMgdW5zaWduZWQgY2hhciogb2Zmc2V0QWxsb2NhdGlvbih1bnNpZ25l
ZCBjaGFyKiBtKSB7Ci0gICAgICAgIHJldHVybiBtICsgZ3VhcmRCbG9ja1NpemUgKyBoZWFkZXJT
aXplKCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHZvaWQgY2hlY2tHdWFyZEJsb2NrKHVuc2ln
bmVkIGNoYXIqIGJsb2NrTWVtLCB1bnNpZ25lZCBjaGFyIHZhbCwgY29uc3QgY2hhciogbG9jVGV4
dCkgY29uc3Q7Ci0KLSAgICAvLyBGaW5kIG9mZnNldHMgdG8gcHJlIGFuZCBwb3N0IGd1YXJkIGJs
b2NrcywgYW5kIHVzZXIgZGF0YSBidWZmZXIKLSAgICB1bnNpZ25lZCBjaGFyKiBwcmVHdWFyZCgp
ICBjb25zdCB7IHJldHVybiBtZW0gKyBoZWFkZXJTaXplKCk7IH0KLSAgICB1bnNpZ25lZCBjaGFy
KiBkYXRhKCkgICAgICBjb25zdCB7IHJldHVybiBwcmVHdWFyZCgpICsgZ3VhcmRCbG9ja1NpemU7
IH0KLSAgICB1bnNpZ25lZCBjaGFyKiBwb3N0R3VhcmQoKSBjb25zdCB7IHJldHVybiBkYXRhKCkg
KyBzaXplOyB9Ci0KLSAgICBzaXplX3Qgc2l6ZTsgICAgICAgICAgICAgICAgICAvLyBzaXplIG9m
IHRoZSB1c2VyIGRhdGEgYXJlYQotICAgIHVuc2lnbmVkIGNoYXIqIG1lbTsgICAgICAgICAgIC8v
IGJlZ2lubmluZyBvZiBvdXIgYWxsb2NhdGlvbiAocHRzIHRvIGhlYWRlcikKLSAgICBUQWxsb2Nh
dGlvbiogcHJldkFsbG9jOyAgICAgICAvLyBwcmlvciBhbGxvY2F0aW9uIGluIHRoZSBjaGFpbgot
Ci0gICAgLy8gU3VwcG9ydCBNU1ZDKysgNi4wCi0gICAgY29uc3Qgc3RhdGljIHVuc2lnbmVkIGNo
YXIgZ3VhcmRCbG9ja0JlZ2luVmFsOwotICAgIGNvbnN0IHN0YXRpYyB1bnNpZ25lZCBjaGFyIGd1
YXJkQmxvY2tFbmRWYWw7Ci0gICAgY29uc3Qgc3RhdGljIHVuc2lnbmVkIGNoYXIgdXNlckRhdGFG
aWxsOwotCi0gICAgY29uc3Qgc3RhdGljIHNpemVfdCBndWFyZEJsb2NrU2l6ZTsKLSNpZmRlZiBH
VUFSRF9CTE9DS1MKLSAgICBpbmxpbmUgc3RhdGljIHNpemVfdCBoZWFkZXJTaXplKCkgeyByZXR1
cm4gc2l6ZW9mKFRBbGxvY2F0aW9uKTsgfQotI2Vsc2UKLSAgICBpbmxpbmUgc3RhdGljIHNpemVf
dCBoZWFkZXJTaXplKCkgeyByZXR1cm4gMDsgfQotI2VuZGlmCi19OwotCi0vLwotLy8gVGhlcmUg
YXJlIHNldmVyYWwgc3RhY2tzLiAgT25lIGlzIHRvIHRyYWNrIHRoZSBwdXNoaW5nIGFuZCBwb3Bw
aW5nCi0vLyBvZiB0aGUgdXNlciwgYW5kIG5vdCB5ZXQgaW1wbGVtZW50ZWQuICBUaGUgb3RoZXJz
IGFyZSBzaW1wbHkgYSAKLS8vIHJlcG9zaXRvcmllcyBvZiBmcmVlIHBhZ2VzIG9yIHVzZWQgcGFn
ZXMuCi0vLwotLy8gUGFnZSBzdGFja3MgYXJlIGxpbmtlZCB0b2dldGhlciB3aXRoIGEgc2ltcGxl
IGhlYWRlciBhdCB0aGUgYmVnaW5uaW5nCi0vLyBvZiBlYWNoIGFsbG9jYXRpb24gb2J0YWluZWQg
ZnJvbSB0aGUgdW5kZXJseWluZyBPUy4gIE11bHRpLXBhZ2UgYWxsb2NhdGlvbnMKLS8vIGFyZSBy
ZXR1cm5lZCB0byB0aGUgT1MuICBJbmRpdmlkdWFsIHBhZ2UgYWxsb2NhdGlvbnMgYXJlIGtlcHQg
Zm9yIGZ1dHVyZQotLy8gcmUtdXNlLgotLy8KLS8vIFRoZSAicGFnZSBzaXplIiB1c2VkIGlzIG5v
dCwgbm9yIG11c3QgaXQgbWF0Y2gsIHRoZSB1bmRlcmx5aW5nIE9TCi0vLyBwYWdlIHNpemUuICBC
dXQsIGhhdmluZyBpdCBiZSBhYm91dCB0aGF0IHNpemUgb3IgZXF1YWwgdG8gYSBzZXQgb2YgCi0v
LyBwYWdlcyBpcyBsaWtlbHkgbW9zdCBvcHRpbWFsLgotLy8KLWNsYXNzIFRQb29sQWxsb2NhdG9y
IHsKLXB1YmxpYzoKLSAgICBUUG9vbEFsbG9jYXRvcihpbnQgZ3Jvd3RoSW5jcmVtZW50ID0gOCox
MDI0LCBpbnQgYWxsb2NhdGlvbkFsaWdubWVudCA9IDE2KTsKLQotICAgIC8vCi0gICAgLy8gRG9u
J3QgY2FsbCB0aGUgZGVzdHJ1Y3RvciBqdXN0IHRvIGZyZWUgdXAgdGhlIG1lbW9yeSwgY2FsbCBw
b3AoKQotICAgIC8vCi0gICAgflRQb29sQWxsb2NhdG9yKCk7Ci0KLSAgICAvLwotICAgIC8vIENh
bGwgcHVzaCgpIHRvIGVzdGFibGlzaCBhIG5ldyBwbGFjZSB0byBwb3AgbWVtb3J5IHRvby4gIERv
ZXMgbm90Ci0gICAgLy8gaGF2ZSB0byBiZSBjYWxsZWQgdG8gZ2V0IHRoaW5ncyBzdGFydGVkLgot
ICAgIC8vCi0gICAgdm9pZCBwdXNoKCk7Ci0KLSAgICAvLwotICAgIC8vIENhbGwgcG9wKCkgdG8g
ZnJlZSBhbGwgbWVtb3J5IGFsbG9jYXRlZCBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvIHB1c2goKSwK
LSAgICAvLyBvciBpZiBubyBsYXN0IGNhbGwgdG8gcHVzaCwgZnJlZXMgYWxsIG1lbW9yeSBzaW5j
ZSBmaXJzdCBhbGxvY2F0aW9uLgotICAgIC8vCi0gICAgdm9pZCBwb3AoKTsKLQotICAgIC8vCi0g
ICAgLy8gQ2FsbCBwb3BBbGwoKSB0byBmcmVlIGFsbCBtZW1vcnkgYWxsb2NhdGVkLgotICAgIC8v
Ci0gICAgdm9pZCBwb3BBbGwoKTsKLQotICAgIC8vCi0gICAgLy8gQ2FsbCBhbGxvY2F0ZSgpIHRv
IGFjdHVhbGx5IGFjcXVpcmUgbWVtb3J5LiAgUmV0dXJucyAwIGlmIG5vIG1lbW9yeQotICAgIC8v
IGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGEgcHJvcGVybHkgYWxpZ25lZCBwb2ludGVyIHRvICdudW1C
eXRlcycgb2YgbWVtb3J5LgotICAgIC8vCi0gICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90IG51bUJ5
dGVzKTsKLQotICAgIC8vCi0gICAgLy8gVGhlcmUgaXMgbm8gZGVhbGxvY2F0ZS4gIFRoZSBwb2lu
dCBvZiB0aGlzIGNsYXNzIGlzIHRoYXQKLSAgICAvLyBkZWFsbG9jYXRpb24gY2FuIGJlIHNraXBw
ZWQgYnkgdGhlIHVzZXIgb2YgaXQsIGFzIHRoZSBtb2RlbAotICAgIC8vIG9mIHVzZSBpcyB0byBz
aW11bHRhbmVvdXNseSBkZWFsbG9jYXRlIGV2ZXJ5dGhpbmcgYXQgb25jZQotICAgIC8vIGJ5IGNh
bGxpbmcgcG9wKCksIGFuZCB0byBub3QgaGF2ZSB0byBzb2x2ZSBtZW1vcnkgbGVhayBwcm9ibGVt
cy4KLSAgICAvLwotCi1wcm90ZWN0ZWQ6Ci0gICAgZnJpZW5kIHN0cnVjdCB0SGVhZGVyOwotICAg
IAotICAgIHN0cnVjdCB0SGVhZGVyIHsKLSAgICAgICAgdEhlYWRlcih0SGVhZGVyKiBuZXh0UGFn
ZSwgc2l6ZV90IHBhZ2VDb3VudCkgOgotICAgICAgICAgICAgbmV4dFBhZ2UobmV4dFBhZ2UpLAot
ICAgICAgICAgICAgcGFnZUNvdW50KHBhZ2VDb3VudCkKLSNpZmRlZiBHVUFSRF9CTE9DS1MKLSAg
ICAgICAgICAsIGxhc3RBbGxvY2F0aW9uKDApCi0jZW5kaWYKLSAgICAgICAgICAgIHsgfQotCi0g
ICAgICAgIH50SGVhZGVyKCkgewotI2lmZGVmIEdVQVJEX0JMT0NLUwotICAgICAgICAgICAgaWYg
KGxhc3RBbGxvY2F0aW9uKQotICAgICAgICAgICAgICAgIGxhc3RBbGxvY2F0aW9uLT5jaGVja0Fs
bG9jTGlzdCgpOwotI2VuZGlmCi0gICAgICAgIH0KLQotICAgICAgICB0SGVhZGVyKiBuZXh0UGFn
ZTsKLSAgICAgICAgc2l6ZV90IHBhZ2VDb3VudDsKLSNpZmRlZiBHVUFSRF9CTE9DS1MKLSAgICAg
ICAgVEFsbG9jYXRpb24qIGxhc3RBbGxvY2F0aW9uOwotI2VuZGlmCi0gICAgfTsKLQotICAgIHN0
cnVjdCB0QWxsb2NTdGF0ZSB7Ci0gICAgICAgIHNpemVfdCBvZmZzZXQ7Ci0gICAgICAgIHRIZWFk
ZXIqIHBhZ2U7Ci0gICAgfTsKLSAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPHRBbGxvY1N0YXRlPiB0
QWxsb2NTdGFjazsKLQotICAgIC8vIFRyYWNrIGFsbG9jYXRpb25zIGlmIGFuZCBvbmx5IGlmIHdl
J3JlIHVzaW5nIGd1YXJkIGJsb2NrcwotICAgIHZvaWQqIGluaXRpYWxpemVBbGxvY2F0aW9uKHRI
ZWFkZXIqIGJsb2NrLCB1bnNpZ25lZCBjaGFyKiBtZW1vcnksIHNpemVfdCBudW1CeXRlcykgewot
I2lmZGVmIEdVQVJEX0JMT0NLUwotICAgICAgICBuZXcobWVtb3J5KSBUQWxsb2NhdGlvbihudW1C
eXRlcywgbWVtb3J5LCBibG9jay0+bGFzdEFsbG9jYXRpb24pOwotICAgICAgICBibG9jay0+bGFz
dEFsbG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PFRBbGxvY2F0aW9uKj4obWVtb3J5KTsKLSNl
bmRpZgotICAgICAgICAvLyBUaGlzIGlzIG9wdGltaXplZCBlbnRpcmVseSBhd2F5IGlmIEdVQVJE
X0JMT0NLUyBpcyBub3QgZGVmaW5lZC4KLSAgICAgICAgcmV0dXJuIFRBbGxvY2F0aW9uOjpvZmZz
ZXRBbGxvY2F0aW9uKG1lbW9yeSk7Ci0gICAgfQotCi0gICAgc2l6ZV90IHBhZ2VTaXplOyAgICAg
ICAgLy8gZ3JhbnVsYXJpdHkgb2YgYWxsb2NhdGlvbiBmcm9tIHRoZSBPUwotICAgIHNpemVfdCBh
bGlnbm1lbnQ7ICAgICAgIC8vIGFsbCByZXR1cm5lZCBhbGxvY2F0aW9ucyB3aWxsIGJlIGFsaWdu
ZWQgYXQgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBncmFudWxhcml0eSwg
d2hpY2ggd2lsbCBiZSBhIHBvd2VyIG9mIDIKLSAgICBzaXplX3QgYWxpZ25tZW50TWFzazsKLSAg
ICBzaXplX3QgaGVhZGVyU2tpcDsgICAgICAvLyBhbW91bnQgb2YgbWVtb3J5IHRvIHNraXAgdG8g
bWFrZSByb29tIGZvciB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIGhl
YWRlciAoYmFzaWNhbGx5LCBzaXplIG9mIGhlYWRlciwgcm91bmRlZAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vICAgICAgdXAgdG8gbWFrZSBpdCBhbGlnbmVkCi0gICAgc2l6ZV90IGN1
cnJlbnRQYWdlT2Zmc2V0OyAgLy8gbmV4dCBvZmZzZXQgaW4gdG9wIG9mIGluVXNlTGlzdCB0byBh
bGxvY2F0ZSBmcm9tCi0gICAgdEhlYWRlciogZnJlZUxpc3Q7ICAgICAgLy8gbGlzdCBvZiBwb3Bw
ZWQgbWVtb3J5Ci0gICAgdEhlYWRlciogaW5Vc2VMaXN0OyAgICAgLy8gbGlzdCBvZiBhbGwgbWVt
b3J5IGN1cnJlbnRseSBiZWluZyB1c2VkCi0gICAgdEFsbG9jU3RhY2sgc3RhY2s7ICAgICAgLy8g
c3RhY2sgb2Ygd2hlcmUgdG8gYWxsb2NhdGUgZnJvbSwgdG8gcGFydGl0aW9uIHBvb2wKLQotICAg
IGludCBudW1DYWxsczsgICAgICAgICAgIC8vIGp1c3QgYW4gaW50ZXJlc3Rpbmcgc3RhdGlzdGlj
Ci0gICAgc2l6ZV90IHRvdGFsQnl0ZXM7ICAgICAgLy8ganVzdCBhbiBpbnRlcmVzdGluZyBzdGF0
aXN0aWMKLXByaXZhdGU6Ci0gICAgVFBvb2xBbGxvY2F0b3ImIG9wZXJhdG9yPShjb25zdCBUUG9v
bEFsbG9jYXRvciYpOyAgLy8gZG9udCBhbGxvdyBhc3NpZ25tZW50IG9wZXJhdG9yCi0gICAgVFBv
b2xBbGxvY2F0b3IoY29uc3QgVFBvb2xBbGxvY2F0b3ImKTsgIC8vIGRvbnQgYWxsb3cgZGVmYXVs
dCBjb3B5IGNvbnN0cnVjdG9yCi19OwotCi0KLS8vCi0vLyBUaGVyZSBjb3VsZCBwb3RlbnRpYWxs
eSBiZSBtYW55IHBvb2xzIHdpdGggcG9wcyBoYXBwZW5pbmcgYXQKLS8vIGRpZmZlcmVudCB0aW1l
cy4gIEJ1dCBhIHNpbXBsZSB1c2UgaXMgdG8gaGF2ZSBhIGdsb2JhbCBwb3AKLS8vIHdpdGggZXZl
cnlvbmUgdXNpbmcgdGhlIHNhbWUgZ2xvYmFsIGFsbG9jYXRvci4KLS8vCi1leHRlcm4gVFBvb2xB
bGxvY2F0b3IqIEdldEdsb2JhbFBvb2xBbGxvY2F0b3IoKTsKLWV4dGVybiB2b2lkIFNldEdsb2Jh
bFBvb2xBbGxvY2F0b3IoVFBvb2xBbGxvY2F0b3IqIHBvb2xBbGxvY2F0b3IpOwotCi0vLwotLy8g
VGhpcyBTVEwgY29tcGF0aWJsZSBhbGxvY2F0b3IgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhcyB0
aGUgYWxsb2NhdG9yCi0vLyBwYXJhbWV0ZXIgdG8gdGVtcGxhdGl6ZWQgU1RMIGNvbnRhaW5lcnMs
IGxpa2UgdmVjdG9yIGFuZCBtYXAuCi0vLwotLy8gSXQgd2lsbCB1c2UgdGhlIHBvb2xzIGZvciBh
bGxvY2F0aW9uLCBhbmQgbm90Ci0vLyBkbyBhbnkgZGVhbGxvY2F0aW9uLCBidXQgd2lsbCBzdGls
bCBkbyBkZXN0cnVjdGlvbi4KLS8vCi10ZW1wbGF0ZTxjbGFzcyBUPgotY2xhc3MgcG9vbF9hbGxv
Y2F0b3IgewotcHVibGljOgotICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKLSAgICB0eXBl
ZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7Ci0gICAgdHlwZWRlZiBUKiBwb2ludGVyOwot
ICAgIHR5cGVkZWYgY29uc3QgVCogY29uc3RfcG9pbnRlcjsKLSAgICB0eXBlZGVmIFQmIHJlZmVy
ZW5jZTsKLSAgICB0eXBlZGVmIGNvbnN0IFQmIGNvbnN0X3JlZmVyZW5jZTsKLSAgICB0eXBlZGVm
IFQgdmFsdWVfdHlwZTsKLQotICAgIHRlbXBsYXRlPGNsYXNzIE90aGVyPiAKLSAgICBzdHJ1Y3Qg
cmViaW5kIHsKLSAgICAgICAgdHlwZWRlZiBwb29sX2FsbG9jYXRvcjxPdGhlcj4gb3RoZXI7Ci0g
ICAgfTsKLSAgICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIHgpIGNvbnN0IHsgcmV0dXJuICZ4
OyB9Ci0gICAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSB4KSBjb25zdCB7
IHJldHVybiAmeDsgfQotCi0gICAgcG9vbF9hbGxvY2F0b3IoKSA6IGFsbG9jYXRvcihHZXRHbG9i
YWxQb29sQWxsb2NhdG9yKCkpIHsgfQotICAgIHBvb2xfYWxsb2NhdG9yKFRQb29sQWxsb2NhdG9y
JiBhKSA6IGFsbG9jYXRvcigmYSkgeyB9Ci0gICAgcG9vbF9hbGxvY2F0b3IoY29uc3QgcG9vbF9h
bGxvY2F0b3I8VD4mIHApIDogYWxsb2NhdG9yKHAuYWxsb2NhdG9yKSB7IH0KLQotICAgIHRlbXBs
YXRlIDxjbGFzcyBPdGhlcj4KLSAgICBwb29sX2FsbG9jYXRvcjxUPiYgb3BlcmF0b3I9KGNvbnN0
IHBvb2xfYWxsb2NhdG9yPE90aGVyPiYgcCkgewotICAgICAgYWxsb2NhdG9yID0gcC5hbGxvY2F0
b3I7Ci0gICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8Y2xhc3MgT3Ro
ZXI+Ci0gICAgcG9vbF9hbGxvY2F0b3IoY29uc3QgcG9vbF9hbGxvY2F0b3I8T3RoZXI+JiBwKSA6
IGFsbG9jYXRvcigmcC5nZXRBbGxvY2F0b3IoKSkgeyB9Ci0KLSNpZiBkZWZpbmVkKF9fU1VOUFJP
X0NDKSAmJiAhZGVmaW5lZChfUldTVERfQUxMT0NBVE9SKQotICAgIC8vIGxpYkNTdGQgb24gc29t
ZSBwbGF0Zm9ybXMgaGF2ZSBhIGRpZmZlcmVudCBhbGxvY2F0ZS9kZWFsbG9jYXRlIGludGVyZmFj
ZS4KLSAgICAvLyBDYWxsZXIgcHJlLWJha2VzIHNpemVvZihUKSBpbnRvICduJyB3aGljaCBpcyB0
aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlCi0gICAgLy8gYWxsb2NhdGVkLCBub3QgdGhlIG51bWJl
ciBvZiBlbGVtZW50cy4KLSAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3R5cGUgbikgeyAKLSAgICAg
ICAgcmV0dXJuIGdldEFsbG9jYXRvcigpLmFsbG9jYXRlKG4pOwotICAgIH0KLSAgICB2b2lkKiBh
bGxvY2F0ZShzaXplX3R5cGUgbiwgY29uc3Qgdm9pZCopIHsKLSAgICAgICAgcmV0dXJuIGdldEFs
bG9jYXRvcigpLmFsbG9jYXRlKG4pOwotICAgIH0KLSAgICB2b2lkIGRlYWxsb2NhdGUodm9pZCos
IHNpemVfdHlwZSkge30KLSNlbHNlCi0gICAgcG9pbnRlciBhbGxvY2F0ZShzaXplX3R5cGUgbikg
eyAKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8cG9pbnRlcj4oZ2V0QWxsb2NhdG9y
KCkuYWxsb2NhdGUobiAqIHNpemVvZihUKSkpOwotICAgIH0KLSAgICBwb2ludGVyIGFsbG9jYXRl
KHNpemVfdHlwZSBuLCBjb25zdCB2b2lkKikgeyAKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8cG9pbnRlcj4oZ2V0QWxsb2NhdG9yKCkuYWxsb2NhdGUobiAqIHNpemVvZihUKSkpOwot
ICAgIH0KLSAgICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciwgc2l6ZV90eXBlKSB7fQotI2VuZGlm
ICAvLyBfUldTVERfQUxMT0NBVE9SCi0KLSAgICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIHAsIGNv
bnN0IFQmIHZhbCkgeyBuZXcgKCh2b2lkICopcCkgVCh2YWwpOyB9Ci0gICAgdm9pZCBkZXN0cm95
KHBvaW50ZXIgcCkgeyBwLT5UOjp+VCgpOyB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
cG9vbF9hbGxvY2F0b3ImIHJocykgY29uc3QgeyByZXR1cm4gJmdldEFsbG9jYXRvcigpID09ICZy
aHMuZ2V0QWxsb2NhdG9yKCk7IH0KLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgcG9vbF9hbGxv
Y2F0b3ImIHJocykgY29uc3QgeyByZXR1cm4gJmdldEFsbG9jYXRvcigpICE9ICZyaHMuZ2V0QWxs
b2NhdG9yKCk7IH0KLQotICAgIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PHNpemVfdHlwZT4oLTEpIC8gc2l6ZW9mKFQpOyB9Ci0gICAgc2l6ZV90eXBlIG1h
eF9zaXplKGludCBzaXplKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KC0x
KSAvIHNpemU7IH0KLQotICAgIHZvaWQgc2V0QWxsb2NhdG9yKFRQb29sQWxsb2NhdG9yKiBhKSB7
IGFsbG9jYXRvciA9IGE7IH0KLSAgICBUUG9vbEFsbG9jYXRvciYgZ2V0QWxsb2NhdG9yKCkgY29u
c3QgeyByZXR1cm4gKmFsbG9jYXRvcjsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgVFBvb2xBbGxvY2F0
b3IqIGFsbG9jYXRvcjsKLX07Ci0KLSNlbmRpZiAvLyBfUE9PTEFMTE9DX0lOQ0xVREVEXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ByYWdtYS5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ByYWdtYS5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAyZjc0NDEyM2I4Mjg5NDk4YzMxNzkxNGVhZDNkZjEzNjNhZTg2
MTZiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QcmFnbWEuaAorKysgL2Rldi9udWxsCkBA
IC0xLDE5ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1BSQUdNQV9I
XwotI2RlZmluZSBDT01QSUxFUl9QUkFHTUFfSF8KLQotc3RydWN0IFRQcmFnbWEgewotICAgIC8v
IEJ5IGRlZmF1bHQgb3B0aW1pemF0aW9uIGlzIHR1cm5lZCBvbiBhbmQgZGVidWcgaXMgdHVybmVk
IG9mZi4KLSAgICBUUHJhZ21hKCkgOiBvcHRpbWl6ZSh0cnVlKSwgZGVidWcoZmFsc2UpIHsgfQot
ICAgIFRQcmFnbWEoYm9vbCBvLCBib29sIGQpIDogb3B0aW1pemUobyksIGRlYnVnKGQpIHsgfQot
Ci0gICAgYm9vbCBvcHRpbWl6ZTsKLSAgICBib29sIGRlYnVnOwotfTsKLQotI2VuZGlmIC8vIENP
TVBJTEVSX1BSQUdNQV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDkyYTY4NzRlYjdiZTdjYjBlN2ZmY2NkNTllYWRiYzBiNTQ3ODQ4YzMuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU4
ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9pbnRlcm1l
ZGlhdGUuaCIKLQotY2xhc3MgVEFsaXZlVHJhdmVyc2VyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJz
ZXIgewotcHVibGljOgotICAgIFRBbGl2ZVRyYXZlcnNlcihUUXVhbGlmaWVyIHEpIDogVEludGVy
bVRyYXZlcnNlcih0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpLCBmb3VuZChmYWxzZSksIHF1YWxp
ZmllcihxKQotICAgIHsKLSAgICB9Ci0KLQlib29sIHdhc0ZvdW5kKCkgeyByZXR1cm4gZm91bmQ7
IH0KLQotcHJvdGVjdGVkOgotICAgIGJvb2wgZm91bmQ7Ci0gICAgVFF1YWxpZmllciBxdWFsaWZp
ZXI7Ci0KLSAgICB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKLSAgICBib29sIHZp
c2l0U2VsZWN0aW9uKFZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKik7Ci19OwotCi0vLwotLy8gUmVw
b3J0IHdoZXRoZXIgb3Igbm90IGEgdmFyaWFibGUgb2YgdGhlIGdpdmVuIHF1YWxpZmllciB0eXBl
Ci0vLyBpcyBndWFyYW50ZWVkIHdyaXR0ZW4uICBOb3QgYWx3YXlzIHBvc3NpYmxlIHRvIGRldGVy
bWluZSBpZgotLy8gaXQgaXMgd3JpdHRlbiBjb25kaXRpb25hbGx5LgotLy8KLS8vID8/IEl0IGRv
ZXMgbm90IGRvIHRoaXMgd2VsbCB5ZXQsIHRoaXMgaXMganVzdCBhIHBsYWNlIGhvbGRlcgotLy8g
dGhhdCBzaW1wbHkgZGV0ZXJtaW5lcyBpZiBpdCB3YXMgcmVmZXJlbmNlIGF0IGFsbCwgYW55d2hl
cmUuCi0vLwotYm9vbCBRdWFsaWZpZXJXcml0dGVuKFRJbnRlcm1Ob2RlKiBub2RlLCBUUXVhbGlm
aWVyIHF1YWxpZmllcikKLXsKLSAgICBUQWxpdmVUcmF2ZXJzZXIgaXQocXVhbGlmaWVyKTsKLQot
ICAgIGlmIChub2RlKQotICAgICAgICBub2RlLT50cmF2ZXJzZSgmaXQpOwotCi0gICAgcmV0dXJu
IGl0Lndhc0ZvdW5kKCk7Ci19Ci0KLXZvaWQgVEFsaXZlVHJhdmVyc2VyOjp2aXNpdFN5bWJvbChU
SW50ZXJtU3ltYm9sKiBub2RlKQotewotICAgIC8vCi0gICAgLy8gSWYgaXQncyB3aGF0IHdlJ3Jl
IGxvb2tpbmcgZm9yLCByZWNvcmQgaXQuCi0gICAgLy8KLSAgICBpZiAobm9kZS0+Z2V0UXVhbGlm
aWVyKCkgPT0gcXVhbGlmaWVyKQotICAgICAgICBmb3VuZCA9IHRydWU7Ci19Ci0KLWJvb2wgVEFs
aXZlVHJhdmVyc2VyOjp2aXNpdFNlbGVjdGlvbihWaXNpdCBwcmVWaXNpdCwgVEludGVybVNlbGVj
dGlvbiogbm9kZSkKLXsKLSAgICBpZiAod2FzRm91bmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgcmV0dXJuIHRydWU7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvUXVhbGlmaWVyQWxpdmUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA4NzJhMDZmNzIxOTJhZjFkMzc4ZjcyZDFlYTIxMGRhZTg5OWJiZjRiLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5oCisrKyAvZGV2L251bGwKQEAgLTEs
NyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi1ib29sIFF1YWxpZmllcldyaXR0ZW4oVElu
dGVybU5vZGUqIHJvb3QsIFRRdWFsaWZpZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBhNGI4YzFlNjNlMWRhZTA1OWE0MTllOTJjMWI3NTI0ODBhMDFkNmQ4Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc3
ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9pbnRlcm1l
ZGlhdGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9SZW1vdmVUcmVlLmgiCi0KLS8vCi0vLyBDb2Rl
IHRvIHJlY3Vyc2l2ZWx5IGRlbGV0ZSB0aGUgaW50ZXJtZWRpYXRlIHRyZWUuCi0vLwotCi1jbGFz
cyBSZW1vdmVUcmVlIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKLXsKLXB1YmxpYzoKLQlSZW1v
dmVUcmVlKCkgOiBUSW50ZXJtVHJhdmVyc2VyKGZhbHNlLCBmYWxzZSwgdHJ1ZSkKLQl7Ci0JfQot
Ci1wcm90ZWN0ZWQ6Ci0Jdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7Ci0Jdm9pZCB2
aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qKTsKLQlib29sIHZpc2l0Qmlu
YXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7Ci0JYm9vbCB2aXNpdFVuYXJ5KFZpc2l0
IHZpc2l0LCBUSW50ZXJtVW5hcnkqKTsKLQlib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0
LCBUSW50ZXJtU2VsZWN0aW9uKik7Ci0JYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwg
VEludGVybUFnZ3JlZ2F0ZSopOwotfTsKLQotdm9pZCBSZW1vdmVUcmVlOjp2aXNpdFN5bWJvbChU
SW50ZXJtU3ltYm9sKiBub2RlKQotewotCWRlbGV0ZSBub2RlOwotfQotCi1ib29sIFJlbW92ZVRy
ZWU6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBub2RlKQotewotCWRl
bGV0ZSBub2RlOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUmVtb3ZlVHJlZTo6dmlzaXRV
bmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQotewotICAgIGRlbGV0ZSBub2Rl
OwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUmVtb3ZlVHJlZTo6dmlzaXRBZ2dyZWdhdGUo
VmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCi17Ci0JZGVsZXRlIG5vZGU7Ci0K
LQlyZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBSZW1vdmVUcmVlOjp2aXNpdFNlbGVjdGlvbihWaXNp
dCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiogbm9kZSkKLXsKLQlkZWxldGUgbm9kZTsKLQotCXJl
dHVybiB0cnVlOwotfQotCi12b2lkIFJlbW92ZVRyZWU6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50
ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSkKLXsKLQlkZWxldGUgbm9kZTsKLX0KLQotLy8KLS8vIEVu
dHJ5IHBvaW50LgotLy8KLXZvaWQgUmVtb3ZlQWxsVHJlZU5vZGVzKFRJbnRlcm1Ob2RlKiByb290
KQotewotICAgIFJlbW92ZVRyZWUgaXQ7Ci0KLSAgICByb290LT50cmF2ZXJzZSgmaXQpOwotfQot
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVtb3Zl
VHJlZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdhODIxNjc5YzIzZmI5MjgwYjNlZGY0
YTdlOGZjYmU0MTU2MTQ2Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5o
CisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi12b2lk
IFJlbW92ZUFsbFRyZWVOb2RlcyhUSW50ZXJtTm9kZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMzkwOGJmZGRiODIwMTczNTNmODdiNDVkNTUwMmFiNzRlZjgxYTI3
Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaAorKysgL2Rldi9u
dWxsCkBAIC0xLDM2ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1JF
TkFNRV9GVU5DVElPTgotI2RlZmluZSBDT01QSUxFUl9SRU5BTUVfRlVOQ1RJT04KLQotI2luY2x1
ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotCi0vLwotLy8gUmVuYW1lcyBhIGZ1bmN0aW9u
LCBpbmNsdWRpbmcgaXRzIGRlY2xhcmF0aW9uIGFuZCBhbnkgY2FsbHMgdG8gaXQuCi0vLwotY2xh
c3MgUmVuYW1lRnVuY3Rpb24gOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgotewotcHVibGljOgot
ICAgIFJlbmFtZUZ1bmN0aW9uKGNvbnN0IFRTdHJpbmcmIG9sZEZ1bmN0aW9uTmFtZSwgY29uc3Qg
VFN0cmluZyYgbmV3RnVuY3Rpb25OYW1lKQotICAgIDogVEludGVybVRyYXZlcnNlcih0cnVlLCBm
YWxzZSwgZmFsc2UpCi0gICAgLCBtT2xkRnVuY3Rpb25OYW1lKG9sZEZ1bmN0aW9uTmFtZSkKLSAg
ICAsIG1OZXdGdW5jdGlvbk5hbWUobmV3RnVuY3Rpb25OYW1lKSB7fQotCi0gICAgdmlydHVhbCBi
b29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQot
ICAgIHsKLSAgICAgICAgVE9wZXJhdG9yIG9wID0gbm9kZS0+Z2V0T3AoKTsKLSAgICAgICAgaWYg
KChvcCA9PSBFT3BGdW5jdGlvbiB8fCBvcCA9PSBFT3BGdW5jdGlvbkNhbGwpICYmIG5vZGUtPmdl
dE5hbWUoKSA9PSBtT2xkRnVuY3Rpb25OYW1lKQotICAgICAgICAgICAgbm9kZS0+c2V0TmFtZSht
TmV3RnVuY3Rpb25OYW1lKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIGNvbnN0IFRTdHJpbmcgbU9sZEZ1bmN0aW9uTmFtZTsKLSAgICBjb25zdCBUU3RyaW5n
IG1OZXdGdW5jdGlvbk5hbWU7Ci19OwotCi0jZW5kaWYgIC8vIENPTVBJTEVSX1JFTkFNRV9GVU5D
VElPTgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Nl
YXJjaFN5bWJvbC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2Vh
cmNoU3ltYm9sLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM2OGYxYTRmYWY3
NjQ3YzRiNTlkMzQyYTc4OGZjZjAwMzJjM2ViNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
U2VhcmNoU3ltYm9sLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0vLyBTZWFyY2hTeW1ib2wgaXMgYW4gQVNUIHRyYXZlcnNlciB0byBkZXRlY3Qg
dGhlIHVzZSBvZiBhIGdpdmVuIHN5bWJvbCBuYW1lCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIv
U2VhcmNoU3ltYm9sLmgiCi0KLSNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgotI2luY2x1
ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIKLQotbmFtZXNwYWNlIHNoCi17Ci1TZWFyY2hTeW1i
b2w6OlNlYXJjaFN5bWJvbChjb25zdCBUU3RyaW5nICZzeW1ib2wpIDogbVN5bWJvbChzeW1ib2wp
Ci17Ci0gICAgbWF0Y2ggPSBmYWxzZTsKLX0KLQotdm9pZCBTZWFyY2hTeW1ib2w6OnRyYXZlcnNl
KFRJbnRlcm1Ob2RlICpub2RlKQotewotICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOwotfQotCi12
b2lkIFNlYXJjaFN5bWJvbDo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqc3ltYm9sTm9kZSkK
LXsKLSAgICBpZiAoc3ltYm9sTm9kZS0+Z2V0U3ltYm9sKCkgPT0gbVN5bWJvbCkKLSAgICB7Ci0g
ICAgICAgIG1hdGNoID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgU2VhcmNoU3ltYm9sOjpmb3Vu
ZE1hdGNoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWF0Y2g7Ci19Ci19CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2VhcmNoU3ltYm9sLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2VhcmNoU3ltYm9sLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyNGJjNzdjNmYyZGZlMzFjNzNlZDY5Mzg1YjMzYzZlMDVi
ZjA0MmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NlYXJjaFN5bWJvbC5oCisrKyAvZGV2
L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLS8vIFNlYXJjaFN5bWJv
bCBpcyBhbiBBU1QgdHJhdmVyc2VyIHRvIGRldGVjdCB0aGUgdXNlIG9mIGEgZ2l2ZW4gc3ltYm9s
IG5hbWUKLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfU0VBUkNIU1lNQk9MX0hfCi0jZGVmaW5lIENP
TVBJTEVSX1NFQVJDSFNZTUJPTF9IXwotCi0jaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRl
LmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VDb250ZXh0LmgiCi0KLW5hbWVzcGFjZSBzaAot
ewotY2xhc3MgU2VhcmNoU3ltYm9sIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKLXsKLSAgcHVi
bGljOgotICAgIFNlYXJjaFN5bWJvbChjb25zdCBUU3RyaW5nICZzeW1ib2wpOwotCi0gICAgdm9p
ZCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7Ci0gICAgdm9pZCB2aXNpdFN5bWJvbChUSW50
ZXJtU3ltYm9sICpzeW1ib2xOb2RlKTsKLQotICAgIGJvb2wgZm91bmRNYXRjaCgpIGNvbnN0Owot
Ci0gIHByb3RlY3RlZDoKLSAgICBjb25zdCBUU3RyaW5nICZtU3ltYm9sOwotICAgIGJvb2wgbWF0
Y2g7Ci19OwotfQotCi0jZW5kaWYgICAvLyBDT01QSUxFUl9TRUFSQ0hTWU1CT0xfSF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyMWQzMzFlYTlkZjEzZjAwODhjMThlNzZjOTFkYmFmZmE0
ZWQ3NDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxNzAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBfU0hIQU5E
TEVfSU5DTFVERURfCi0jZGVmaW5lIF9TSEhBTkRMRV9JTkNMVURFRF8KLQotLy8KLS8vIE1hY2hp
bmUgaW5kZXBlbmRlbnQgcGFydCBvZiB0aGUgY29tcGlsZXIgcHJpdmF0ZSBvYmplY3RzCi0vLyBz
ZW50IGFzIFNoSGFuZGxlIHRvIHRoZSBkcml2ZXIuCi0vLwotLy8gVGhpcyBzaG91bGQgbm90IGJl
IGluY2x1ZGVkIGJ5IGRyaXZlciBjb2RlLgotLy8KLQotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVy
TGFuZy5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCIK
LSNpbmNsdWRlICJjb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oIgotI2luY2x1ZGUgImNvbXBp
bGVyL0hhc2hOYW1lcy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCi0jaW5jbHVk
ZSAiY29tcGlsZXIvU3ltYm9sVGFibGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9WYXJpYWJsZUlu
Zm8uaCIKLSNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIu
aCIKLQotY2xhc3MgTG9uZ05hbWVNYXA7Ci1jbGFzcyBUQ29tcGlsZXI7Ci1jbGFzcyBURGVwZW5k
ZW5jeUdyYXBoOwotY2xhc3MgVHJhbnNsYXRvckhMU0w7Ci0KLS8vCi0vLyBIZWxwZXIgZnVuY3Rp
b24gdG8gaWRlbnRpZnkgc3BlY3MgdGhhdCBhcmUgYmFzZWQgb24gdGhlIFdlYkdMIHNwZWMsCi0v
LyBsaWtlIHRoZSBDU1MgU2hhZGVycyBzcGVjLgotLy8KLWJvb2wgaXNXZWJHTEJhc2VkU3BlYyhT
aFNoYWRlclNwZWMgc3BlYyk7Ci0KLS8vCi0vLyBUaGUgYmFzZSBjbGFzcyB1c2VkIHRvIGJhY2sg
aGFuZGxlcyByZXR1cm5lZCB0byB0aGUgZHJpdmVyLgotLy8KLWNsYXNzIFRTaEhhbmRsZUJhc2Ug
ewotcHVibGljOgotICAgIFRTaEhhbmRsZUJhc2UoKTsKLSAgICB2aXJ0dWFsIH5UU2hIYW5kbGVC
YXNlKCk7Ci0gICAgdmlydHVhbCBUQ29tcGlsZXIqIGdldEFzQ29tcGlsZXIoKSB7IHJldHVybiAw
OyB9Ci0gICAgdmlydHVhbCBUcmFuc2xhdG9ySExTTCogZ2V0QXNUcmFuc2xhdG9ySExTTCgpIHsg
cmV0dXJuIDA7IH0KLQotcHJvdGVjdGVkOgotICAgIC8vIE1lbW9yeSBhbGxvY2F0b3IuIEFsbG9j
YXRlcyBhbmQgdHJhY2tzIG1lbW9yeSByZXF1aXJlZCBieSB0aGUgY29tcGlsZXIuCi0gICAgLy8g
RGVhbGxvY2F0ZXMgYWxsIG1lbW9yeSB3aGVuIGNvbXBpbGVyIGlzIGRlc3RydWN0ZWQuCi0gICAg
VFBvb2xBbGxvY2F0b3IgYWxsb2NhdG9yOwotfTsKLQotLy8KLS8vIFRoZSBiYXNlIGNsYXNzIGZv
ciB0aGUgbWFjaGluZSBkZXBlbmRlbnQgY29tcGlsZXIgdG8gZGVyaXZlIGZyb20KLS8vIGZvciBt
YW5hZ2luZyBvYmplY3QgY29kZSBmcm9tIHRoZSBjb21waWxlLgotLy8KLWNsYXNzIFRDb21waWxl
ciA6IHB1YmxpYyBUU2hIYW5kbGVCYXNlIHsKLXB1YmxpYzoKLSAgICBUQ29tcGlsZXIoU2hTaGFk
ZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjKTsKLSAgICB2aXJ0dWFsIH5UQ29tcGlsZXIo
KTsKLSAgICB2aXJ0dWFsIFRDb21waWxlciogZ2V0QXNDb21waWxlcigpIHsgcmV0dXJuIHRoaXM7
IH0KLQotICAgIGJvb2wgSW5pdChjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291cmNlcyk7
Ci0gICAgYm9vbCBjb21waWxlKGNvbnN0IGNoYXIqIGNvbnN0IHNoYWRlclN0cmluZ3NbXSwKLSAg
ICAgICAgICAgICAgICAgc2l6ZV90IG51bVN0cmluZ3MsCi0gICAgICAgICAgICAgICAgIGludCBj
b21waWxlT3B0aW9ucyk7Ci0KLSAgICAvLyBHZXQgcmVzdWx0cyBvZiB0aGUgbGFzdCBjb21waWxh
dGlvbi4KLSAgICBUSW5mb1NpbmsmIGdldEluZm9TaW5rKCkgeyByZXR1cm4gaW5mb1Npbms7IH0K
LSAgICBjb25zdCBUVmFyaWFibGVJbmZvTGlzdCYgZ2V0QXR0cmlicygpIGNvbnN0IHsgcmV0dXJu
IGF0dHJpYnM7IH0KLSAgICBjb25zdCBUVmFyaWFibGVJbmZvTGlzdCYgZ2V0VW5pZm9ybXMoKSBj
b25zdCB7IHJldHVybiB1bmlmb3JtczsgfQotICAgIGNvbnN0IFRWYXJpYWJsZUluZm9MaXN0JiBn
ZXRWYXJ5aW5ncygpIGNvbnN0IHsgcmV0dXJuIHZhcnlpbmdzOyB9Ci0gICAgaW50IGdldE1hcHBl
ZE5hbWVNYXhMZW5ndGgoKSBjb25zdDsKLQotICAgIFNoSGFzaEZ1bmN0aW9uNjQgZ2V0SGFzaEZ1
bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gaGFzaEZ1bmN0aW9uOyB9Ci0gICAgTmFtZU1hcCYgZ2V0
TmFtZU1hcCgpIHsgcmV0dXJuIG5hbWVNYXA7IH0KLSAgICBUU3ltYm9sVGFibGUmIGdldFN5bWJv
bFRhYmxlKCkgeyByZXR1cm4gc3ltYm9sVGFibGU7IH0KLQotcHJvdGVjdGVkOgotICAgIFNoU2hh
ZGVyVHlwZSBnZXRTaGFkZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gc2hhZGVyVHlwZTsgfQotICAg
IFNoU2hhZGVyU3BlYyBnZXRTaGFkZXJTcGVjKCkgY29uc3QgeyByZXR1cm4gc2hhZGVyU3BlYzsg
fQotICAgIC8vIEluaXRpYWxpemUgc3ltYm9sLXRhYmxlIHdpdGggYnVpbHQtaW4gc3ltYm9scy4K
LSAgICBib29sIEluaXRCdWlsdEluU3ltYm9sVGFibGUoY29uc3QgU2hCdWlsdEluUmVzb3VyY2Vz
JiByZXNvdXJjZXMpOwotICAgIC8vIENsZWFycyB0aGUgcmVzdWx0cyBmcm9tIHRoZSBwcmV2aW91
cyBjb21waWxhdGlvbi4KLSAgICB2b2lkIGNsZWFyUmVzdWx0cygpOwotICAgIC8vIFJldHVybiB0
cnVlIGlmIGZ1bmN0aW9uIHJlY3Vyc2lvbiBpcyBkZXRlY3RlZCBvciBjYWxsIGRlcHRoIGV4Y2Vl
ZGVkLgotICAgIGJvb2wgZGV0ZWN0Q2FsbERlcHRoKFRJbnRlcm1Ob2RlKiByb290LCBUSW5mb1Np
bmsmIGluZm9TaW5rLCBib29sIGxpbWl0Q2FsbFN0YWNrRGVwdGgpOwotICAgIC8vIFJld3JpdGVz
IGEgc2hhZGVyJ3MgaW50ZXJtZWRpYXRlIHRyZWUgYWNjb3JkaW5nIHRvIHRoZSBDU1MgU2hhZGVy
cyBzcGVjLgotICAgIHZvaWQgcmV3cml0ZUNTU1NoYWRlcihUSW50ZXJtTm9kZSogcm9vdCk7Ci0g
ICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzaGFkZXIgZG9lcyBub3QgZXhjZWVkIHRo
ZSBtaW5pbXVtCi0gICAgLy8gZnVuY3Rpb25hbGl0eSBtYW5kYXRlZCBpbiBHTFNMIDEuMCBzcGVj
IEFwcGVuZGl4IEEuCi0gICAgYm9vbCB2YWxpZGF0ZUxpbWl0YXRpb25zKFRJbnRlcm1Ob2RlKiBy
b290KTsKLSAgICAvLyBDb2xsZWN0IGluZm8gZm9yIGFsbCBhdHRyaWJzLCB1bmlmb3JtcywgdmFy
eWluZ3MuCi0gICAgdm9pZCBjb2xsZWN0VmFyaWFibGVzKFRJbnRlcm1Ob2RlKiByb290KTsKLSAg
ICAvLyBNYXAgbG9uZyB2YXJpYWJsZSBuYW1lcyBpbnRvIHNob3J0ZXIgb25lcy4KLSAgICB2b2lk
IG1hcExvbmdWYXJpYWJsZU5hbWVzKFRJbnRlcm1Ob2RlKiByb290KTsKLSAgICAvLyBUcmFuc2xh
dGUgdG8gb2JqZWN0IGNvZGUuCi0gICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShUSW50ZXJtTm9k
ZSogcm9vdCkgPSAwOwotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiwgYWZ0ZXIgYXBwbHlpbmcgdGhl
IHBhY2tpbmcgcnVsZXMgaW4gdGhlIEdMU0wgMS4wMTcgc3BlYwotICAgIC8vIEFwcGVuZGl4IEEs
IHNlY3Rpb24gNywgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2UgdG9vIG1hbnkgdW5pZm9ybXMgb3Ig
dmFyeWluZ3MuCi0gICAgYm9vbCBlbmZvcmNlUGFja2luZ1Jlc3RyaWN0aW9ucygpOwotICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgc2hhZGVyIHBhc3NlcyB0aGUgcmVzdHJpY3Rpb25zIHRoYXQg
YWltIHRvIHByZXZlbnQgdGltaW5nIGF0dGFja3MuCi0gICAgYm9vbCBlbmZvcmNlVGltaW5nUmVz
dHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290LCBib29sIG91dHB1dEdyYXBoKTsKLSAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2Ugc2FtcGxlcnMuCi0gICAgYm9v
bCBlbmZvcmNlVmVydGV4U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290
KTsKLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2Ugc2FtcGxl
ciBkZXBlbmRlbnQgdmFsdWVzIHRvIGFmZmVjdCBjb250cm9sIAotICAgIC8vIGZsb3cgb3IgaW4g
b3BlcmF0aW9ucyB3aG9zZSB0aW1lIGNhbiBkZXBlbmQgb24gdGhlIGlucHV0IHZhbHVlcy4KLSAg
ICBib29sIGVuZm9yY2VGcmFnbWVudFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhjb25zdCBURGVw
ZW5kZW5jeUdyYXBoJiBncmFwaCk7Ci0gICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIG1heGltdW0g
ZXhwcmVzc2lvbiBjb21wbGV4aXR5IGJlbG93IHRoZSBsaW1pdC4KLSAgICBib29sIGxpbWl0RXhw
cmVzc2lvbkNvbXBsZXhpdHkoVEludGVybU5vZGUqIHJvb3QpOwotICAgIC8vIEdldCBidWlsdC1p
biBleHRlbnNpb25zIHdpdGggZGVmYXVsdCBiZWhhdmlvci4KLSAgICBjb25zdCBURXh0ZW5zaW9u
QmVoYXZpb3ImIGdldEV4dGVuc2lvbkJlaGF2aW9yKCkgY29uc3Q7Ci0gICAgLy8gR2V0IHRoZSBy
ZXNvdXJjZXMgc2V0IGJ5IEluaXRCdWlsdEluU3ltYm9sVGFibGUKLSAgICBjb25zdCBTaEJ1aWx0
SW5SZXNvdXJjZXMmIGdldFJlc291cmNlcygpIGNvbnN0OwotCi0gICAgY29uc3QgQXJyYXlCb3Vu
ZHNDbGFtcGVyJiBnZXRBcnJheUJvdW5kc0NsYW1wZXIoKSBjb25zdDsKLSAgICBTaEFycmF5SW5k
ZXhDbGFtcGluZ1N0cmF0ZWd5IGdldEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5KCkgY29uc3Q7
Ci0gICAgY29uc3QgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3ImIGdldEJ1aWx0SW5GdW5jdGlvbkVt
dWxhdG9yKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgU2hTaGFkZXJUeXBlIHNoYWRlclR5cGU7
Ci0gICAgU2hTaGFkZXJTcGVjIHNoYWRlclNwZWM7Ci0KLSAgICBpbnQgbWF4VW5pZm9ybVZlY3Rv
cnM7Ci0gICAgaW50IG1heFZhcnlpbmdWZWN0b3JzOwotICAgIGludCBtYXhFeHByZXNzaW9uQ29t
cGxleGl0eTsKLSAgICBpbnQgbWF4Q2FsbFN0YWNrRGVwdGg7Ci0KLSAgICBTaEJ1aWx0SW5SZXNv
dXJjZXMgY29tcGlsZVJlc291cmNlczsKLQotICAgIC8vIEJ1aWx0LWluIHN5bWJvbCB0YWJsZSBm
b3IgdGhlIGdpdmVuIGxhbmd1YWdlLCBzcGVjLCBhbmQgcmVzb3VyY2VzLgotICAgIC8vIEl0IGlz
IHByZXNlcnZlZCBmcm9tIGNvbXBpbGUtdG8tY29tcGlsZS4KLSAgICBUU3ltYm9sVGFibGUgc3lt
Ym9sVGFibGU7Ci0gICAgLy8gQnVpbHQtaW4gZXh0ZW5zaW9ucyB3aXRoIGRlZmF1bHQgYmVoYXZp
b3IuCi0gICAgVEV4dGVuc2lvbkJlaGF2aW9yIGV4dGVuc2lvbkJlaGF2aW9yOwotICAgIGJvb2wg
ZnJhZ21lbnRQcmVjaXNpb25IaWdoOwotCi0gICAgQXJyYXlCb3VuZHNDbGFtcGVyIGFycmF5Qm91
bmRzQ2xhbXBlcjsKLSAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IGNsYW1waW5nU3Ry
YXRlZ3k7Ci0gICAgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IgYnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3I7Ci0KLSAgICAvLyBSZXN1bHRzIG9mIGNvbXBpbGF0aW9uLgotICAgIFRJbmZvU2luayBpbmZv
U2luazsgIC8vIE91dHB1dCBzaW5rLgotICAgIFRWYXJpYWJsZUluZm9MaXN0IGF0dHJpYnM7ICAv
LyBBY3RpdmUgYXR0cmlidXRlcyBpbiB0aGUgY29tcGlsZWQgc2hhZGVyLgotICAgIFRWYXJpYWJs
ZUluZm9MaXN0IHVuaWZvcm1zOyAgLy8gQWN0aXZlIHVuaWZvcm1zIGluIHRoZSBjb21waWxlZCBz
aGFkZXIuCi0gICAgVFZhcmlhYmxlSW5mb0xpc3QgdmFyeWluZ3M7ICAvLyBWYXJ5aW5ncyBpbiB0
aGUgY29tcGlsZWQgc2hhZGVyLgotCi0gICAgLy8gQ2FjaGVkIGNvcHkgb2YgdGhlIHJlZi1jb3Vu
dGVkIHNpbmdsZXRvbi4KLSAgICBMb25nTmFtZU1hcCogbG9uZ05hbWVNYXA7Ci0KLSAgICAvLyBu
YW1lIGhhc2hpbmcuCi0gICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb247Ci0gICAgTmFt
ZU1hcCBuYW1lTWFwOwotfTsKLQotLy8KLS8vIFRoaXMgaXMgdGhlIGludGVyZmFjZSBiZXR3ZWVu
IHRoZSBtYWNoaW5lIGluZGVwZW5kZW50IGNvZGUKLS8vIGFuZCB0aGUgbWFjaGluZSBkZXBlbmRl
bnQgY29kZS4KLS8vCi0vLyBUaGUgbWFjaGluZSBkZXBlbmRlbnQgY29kZSBzaG91bGQgZGVyaXZl
IGZyb20gdGhlIGNsYXNzZXMKLS8vIGFib3ZlLiBUaGVuIENvbnN0cnVjdCooKSBhbmQgRGVsZXRl
KigpIHdpbGwgY3JlYXRlIGFuZCAKLS8vIGRlc3Ryb3kgdGhlIG1hY2hpbmUgZGVwZW5kZW50IG9i
amVjdHMsIHdoaWNoIGNvbnRhaW4gdGhlCi0vLyBhYm92ZSBtYWNoaW5lIGluZGVwZW5kZW50IGlu
Zm9ybWF0aW9uLgotLy8KLVRDb21waWxlciogQ29uc3RydWN0Q29tcGlsZXIoCi0gICAgU2hTaGFk
ZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBTaFNoYWRlck91dHB1dCBvdXRwdXQpOwot
dm9pZCBEZWxldGVDb21waWxlcihUQ29tcGlsZXIqKTsKLQotI2VuZGlmIC8vIF9TSEhBTkRMRV9J
TkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9TaGFkZXJMYW5nLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9T
aGFkZXJMYW5nLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJjZDVjYzVjMTVm
YmU3MDAyMDZjMzQ0MmI4YzhjYzgwM2U0NDliYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
U2hhZGVyTGFuZy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzODcgKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLQotLy8KLS8vIEltcGxlbWVudCB0aGUgdG9wLWxldmVsIG9mIGludGVyZmFjZSB0
byB0aGUgY29tcGlsZXIsCi0vLyBhcyBkZWZpbmVkIGluIFNoYWRlckxhbmcuaAotLy8KLQotI2lu
Y2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlh
bGl6ZURsbC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9sZW5ndGhfbGltaXRz
LmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5kbGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9U
cmFuc2xhdG9ySExTTC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1ZhcmlhYmxlUGFja2VyLmgiCi0K
LS8vCi0vLyBUaGlzIGlzIHRoZSBwbGF0Zm9ybSBpbmRlcGVuZGVudCBpbnRlcmZhY2UgYmV0d2Vl
biBhbiBPR0wgZHJpdmVyCi0vLyBhbmQgdGhlIHNoYWRpbmcgbGFuZ3VhZ2UgY29tcGlsZXIuCi0v
LwotCi1zdGF0aWMgYm9vbCBjaGVja1ZhcmlhYmxlTWF4TGVuZ3Rocyhjb25zdCBTaEhhbmRsZSBo
YW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZXhwZWN0
ZWRWYWx1ZSkKLXsKLSAgICBzaXplX3QgYWN0aXZlVW5pZm9ybUxpbWl0ID0gMDsKLSAgICBTaEdl
dEluZm8oaGFuZGxlLCBTSF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCAmYWN0aXZlVW5pZm9y
bUxpbWl0KTsKLSAgICBzaXplX3QgYWN0aXZlQXR0cmliTGltaXQgPSAwOwotICAgIFNoR2V0SW5m
byhoYW5kbGUsIFNIX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgJmFjdGl2ZUF0dHJpYkxp
bWl0KTsKLSAgICBzaXplX3QgdmFyeWluZ0xpbWl0ID0gMDsKLSAgICBTaEdldEluZm8oaGFuZGxl
LCBTSF9WQVJZSU5HX01BWF9MRU5HVEgsICZ2YXJ5aW5nTGltaXQpOwotICAgIHJldHVybiAoZXhw
ZWN0ZWRWYWx1ZSA9PSBhY3RpdmVVbmlmb3JtTGltaXQgJiYKLSAgICAgICAgICAgIGV4cGVjdGVk
VmFsdWUgPT0gYWN0aXZlQXR0cmliTGltaXQgJiYKLSAgICAgICAgICAgIGV4cGVjdGVkVmFsdWUg
PT0gdmFyeWluZ0xpbWl0KTsKLX0KLQotc3RhdGljIGJvb2wgY2hlY2tNYXBwZWROYW1lTWF4TGVu
Z3RoKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwgc2l6ZV90IGV4cGVjdGVkVmFsdWUpCi17Ci0gICAg
c2l6ZV90IG1hcHBlZE5hbWVNYXhMZW5ndGggPSAwOwotICAgIFNoR2V0SW5mbyhoYW5kbGUsIFNI
X01BUFBFRF9OQU1FX01BWF9MRU5HVEgsICZtYXBwZWROYW1lTWF4TGVuZ3RoKTsKLSAgICByZXR1
cm4gKGV4cGVjdGVkVmFsdWUgPT0gbWFwcGVkTmFtZU1heExlbmd0aCk7Ci19Ci0KLS8vCi0vLyBE
cml2ZXIgbXVzdCBjYWxsIHRoaXMgZmlyc3QsIG9uY2UsIGJlZm9yZSBkb2luZyBhbnkgb3RoZXIg
Y29tcGlsZXIgb3BlcmF0aW9ucy4KLS8vIFN1YnNlcXVlbnQgY2FsbHMgdG8gdGhpcyBmdW5jdGlv
biBhcmUgbm8tb3AuCi0vLwotaW50IFNoSW5pdGlhbGl6ZSgpCi17Ci0gICAgc3RhdGljIGNvbnN0
IGJvb2wga0luaXRpYWxpemVkID0gSW5pdFByb2Nlc3MoKTsKLSAgICByZXR1cm4ga0luaXRpYWxp
emVkID8gMSA6IDA7Ci19Ci0KLS8vCi0vLyBDbGVhbnVwIHN5bWJvbCB0YWJsZXMKLS8vCi1pbnQg
U2hGaW5hbGl6ZSgpCi17Ci0gICAgRGV0YWNoUHJvY2VzcygpOwotICAgIHJldHVybiAxOwotfQot
Ci0vLwotLy8gSW5pdGlhbGl6ZSBidWlsdC1pbiByZXNvdXJjZXMgd2l0aCBtaW5pbXVtIGV4cGVj
dGVkIHZhbHVlcy4KLS8vCi12b2lkIFNoSW5pdEJ1aWx0SW5SZXNvdXJjZXMoU2hCdWlsdEluUmVz
b3VyY2VzKiByZXNvdXJjZXMpCi17Ci0gICAgLy8gQ29uc3RhbnRzLgotICAgIHJlc291cmNlcy0+
TWF4VmVydGV4QXR0cmlicyA9IDg7Ci0gICAgcmVzb3VyY2VzLT5NYXhWZXJ0ZXhVbmlmb3JtVmVj
dG9ycyA9IDEyODsKLSAgICByZXNvdXJjZXMtPk1heFZhcnlpbmdWZWN0b3JzID0gODsKLSAgICBy
ZXNvdXJjZXMtPk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzID0gMDsKLSAgICByZXNvdXJjZXMt
Pk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSA4OwotICAgIHJlc291cmNlcy0+TWF4VGV4
dHVyZUltYWdlVW5pdHMgPSA4OwotICAgIHJlc291cmNlcy0+TWF4RnJhZ21lbnRVbmlmb3JtVmVj
dG9ycyA9IDE2OwotICAgIHJlc291cmNlcy0+TWF4RHJhd0J1ZmZlcnMgPSAxOwotCi0gICAgLy8g
RXh0ZW5zaW9ucy4KLSAgICByZXNvdXJjZXMtPk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA9IDA7
Ci0gICAgcmVzb3VyY2VzLT5PRVNfRUdMX2ltYWdlX2V4dGVybmFsID0gMDsKLSAgICByZXNvdXJj
ZXMtPkFSQl90ZXh0dXJlX3JlY3RhbmdsZSA9IDA7Ci0gICAgcmVzb3VyY2VzLT5FWFRfZHJhd19i
dWZmZXJzID0gMDsKLSAgICByZXNvdXJjZXMtPkVYVF9mcmFnX2RlcHRoID0gMDsKLQotICAgIC8v
IERpc2FibGUgaGlnaHAgcHJlY2lzaW9uIGluIGZyYWdtZW50IHNoYWRlciBieSBkZWZhdWx0Lgot
ICAgIHJlc291cmNlcy0+RnJhZ21lbnRQcmVjaXNpb25IaWdoID0gMDsKLQotICAgIC8vIERpc2Fi
bGUgbmFtZSBoYXNoaW5nIGJ5IGRlZmF1bHQuCi0gICAgcmVzb3VyY2VzLT5IYXNoRnVuY3Rpb24g
PSBOVUxMOwotCi0gICAgcmVzb3VyY2VzLT5BcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSA9IFNI
X0NMQU1QX1dJVEhfQ0xBTVBfSU5UUklOU0lDOwotfQotCi0vLwotLy8gRHJpdmVyIGNhbGxzIHRo
ZXNlIHRvIGNyZWF0ZSBhbmQgZGVzdHJveSBjb21waWxlciBvYmplY3RzLgotLy8KLVNoSGFuZGxl
IFNoQ29uc3RydWN0Q29tcGlsZXIoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVj
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaFNoYWRlck91dHB1dCBvdXRwdXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyogcmVz
b3VyY2VzKQotewotICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2FzdDxUU2hIYW5k
bGVCYXNlKj4oQ29uc3RydWN0Q29tcGlsZXIodHlwZSwgc3BlYywgb3V0cHV0KSk7Ci0gICAgVENv
bXBpbGVyKiBjb21waWxlciA9IGJhc2UtPmdldEFzQ29tcGlsZXIoKTsKLSAgICBpZiAoY29tcGls
ZXIgPT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBHZW5lcmF0ZSBidWlsdC1pbiBz
eW1ib2wgdGFibGUuCi0gICAgaWYgKCFjb21waWxlci0+SW5pdCgqcmVzb3VyY2VzKSkgewotICAg
ICAgICBTaERlc3RydWN0KGJhc2UpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZSk7Ci19Ci0KLXZvaWQgU2hEZXN0cnVj
dChTaEhhbmRsZSBoYW5kbGUpCi17Ci0gICAgaWYgKGhhbmRsZSA9PSAwKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBUU2hIYW5kbGVCYXNlKiBiYXNlID0gc3RhdGljX2Nhc3Q8VFNoSGFuZGxlQmFz
ZSo+KGhhbmRsZSk7Ci0KLSAgICBpZiAoYmFzZS0+Z2V0QXNDb21waWxlcigpKQotICAgICAgICBE
ZWxldGVDb21waWxlcihiYXNlLT5nZXRBc0NvbXBpbGVyKCkpOwotfQotCi0vLwotLy8gRG8gYW4g
YWN0dWFsIGNvbXBpbGUgb24gdGhlIGdpdmVuIHN0cmluZ3MuICBUaGUgcmVzdWx0IGlzIGxlZnQg
Ci0vLyBpbiB0aGUgZ2l2ZW4gY29tcGlsZSBvYmplY3QuCi0vLwotLy8gUmV0dXJuOiAgVGhlIHJl
dHVybiB2YWx1ZSBvZiBTaENvbXBpbGUgaXMgcmVhbGx5IGJvb2xlYW4sIGluZGljYXRpbmcKLS8v
IHN1Y2Nlc3Mgb3IgZmFpbHVyZS4KLS8vCi1pbnQgU2hDb21waWxlKAotICAgIGNvbnN0IFNoSGFu
ZGxlIGhhbmRsZSwKLSAgICBjb25zdCBjaGFyKiBjb25zdCBzaGFkZXJTdHJpbmdzW10sCi0gICAg
c2l6ZV90IG51bVN0cmluZ3MsCi0gICAgaW50IGNvbXBpbGVPcHRpb25zKQotewotICAgIGlmICho
YW5kbGUgPT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBUU2hIYW5kbGVCYXNlKiBiYXNl
ID0gcmVpbnRlcnByZXRfY2FzdDxUU2hIYW5kbGVCYXNlKj4oaGFuZGxlKTsKLSAgICBUQ29tcGls
ZXIqIGNvbXBpbGVyID0gYmFzZS0+Z2V0QXNDb21waWxlcigpOwotICAgIGlmIChjb21waWxlciA9
PSAwKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGJvb2wgc3VjY2VzcyA9IGNvbXBpbGVyLT5j
b21waWxlKHNoYWRlclN0cmluZ3MsIG51bVN0cmluZ3MsIGNvbXBpbGVPcHRpb25zKTsKLSAgICBy
ZXR1cm4gc3VjY2VzcyA/IDEgOiAwOwotfQotCi12b2lkIFNoR2V0SW5mbyhjb25zdCBTaEhhbmRs
ZSBoYW5kbGUsIFNoU2hhZGVySW5mbyBwbmFtZSwgc2l6ZV90KiBwYXJhbXMpCi17Ci0gICAgaWYg
KCFoYW5kbGUgfHwgIXBhcmFtcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVFNoSGFuZGxlQmFz
ZSogYmFzZSA9IHN0YXRpY19jYXN0PFRTaEhhbmRsZUJhc2UqPihoYW5kbGUpOwotICAgIFRDb21w
aWxlciogY29tcGlsZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7Ci0gICAgaWYgKCFjb21waWxl
cikgcmV0dXJuOwotCi0gICAgc3dpdGNoKHBuYW1lKQotICAgIHsKLSAgICBjYXNlIFNIX0lORk9f
TE9HX0xFTkdUSDoKLSAgICAgICAgKnBhcmFtcyA9IGNvbXBpbGVyLT5nZXRJbmZvU2luaygpLmlu
Zm8uc2l6ZSgpICsgMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTSF9PQkpFQ1RfQ09ERV9M
RU5HVEg6Ci0gICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0SW5mb1NpbmsoKS5vYmouc2l6
ZSgpICsgMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTSF9BQ1RJVkVfVU5JRk9STVM6Ci0g
ICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0VW5pZm9ybXMoKS5zaXplKCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgU0hfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSDoKLSAgICAgICAg
KnBhcmFtcyA9IDEgKyAgTUFYX1NZTUJPTF9OQU1FX0xFTjsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBTSF9BQ1RJVkVfQVRUUklCVVRFUzoKLSAgICAgICAgKnBhcmFtcyA9IGNvbXBpbGVyLT5n
ZXRBdHRyaWJzKCkuc2l6ZSgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNIX0FDVElWRV9B
VFRSSUJVVEVfTUFYX0xFTkdUSDoKLSAgICAgICAgKnBhcmFtcyA9IDEgKyBNQVhfU1lNQk9MX05B
TUVfTEVOOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNIX1ZBUllJTkdTOgotICAgICAgICAq
cGFyYW1zID0gY29tcGlsZXItPmdldFZhcnlpbmdzKCkuc2l6ZSgpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFNIX1ZBUllJTkdfTUFYX0xFTkdUSDoKLSAgICAgICAgKnBhcmFtcyA9IDEgKyBN
QVhfU1lNQk9MX05BTUVfTEVOOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNIX01BUFBFRF9O
QU1FX01BWF9MRU5HVEg6Ci0gICAgICAgIC8vIFVzZSBsb25nZXIgbGVuZ3RoIHRoYW4gTUFYX1NI
T1JURU5FRF9JREVOVElGSUVSX1NJWkUgdG8KLSAgICAgICAgLy8gaGFuZGxlIGFycmF5IGFuZCBz
dHJ1Y3QgZGVyZWZlcmVuY2VzLgotICAgICAgICAqcGFyYW1zID0gMSArIE1BWF9TWU1CT0xfTkFN
RV9MRU47Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU0hfTkFNRV9NQVhfTEVOR1RIOgotICAg
ICAgICAqcGFyYW1zID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgU0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSDoKLSAgICAgICAgaWYgKGNvbXBpbGVy
LT5nZXRIYXNoRnVuY3Rpb24oKSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAqcGFyYW1zID0gMDsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIDY0IGJpdHMgaGFzaGluZyBvdXRwdXQg
cmVxdWlyZXMgMTYgYnl0ZXMgZm9yIGhleCAKLSAgICAgICAgICAgIC8vIHJlcHJlc2VudGF0aW9u
LgotICAgICAgICAgICAgY29uc3QgY2hhciBIYXNoZWROYW1lUHJlZml4W10gPSBIQVNIRURfTkFN
RV9QUkVGSVg7Ci0gICAgICAgICAgICAqcGFyYW1zID0gMTYgKyBzaXplb2YoSGFzaGVkTmFtZVBy
ZWZpeCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTSF9IQVNIRURfTkFN
RVNfQ09VTlQ6Ci0gICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0TmFtZU1hcCgpLnNpemUo
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci19
Ci0KLS8vCi0vLyBSZXR1cm4gYW55IGNvbXBpbGVyIGxvZyBvZiBtZXNzYWdlcyBmb3IgdGhlIGFw
cGxpY2F0aW9uLgotLy8KLXZvaWQgU2hHZXRJbmZvTG9nKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwg
Y2hhciogaW5mb0xvZykKLXsKLSAgICBpZiAoIWhhbmRsZSB8fCAhaW5mb0xvZykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHN0YXRpY19jYXN0PFRTaEhhbmRs
ZUJhc2UqPihoYW5kbGUpOwotICAgIFRDb21waWxlciogY29tcGlsZXIgPSBiYXNlLT5nZXRBc0Nv
bXBpbGVyKCk7Ci0gICAgaWYgKCFjb21waWxlcikgcmV0dXJuOwotCi0gICAgVEluZm9TaW5rJiBp
bmZvU2luayA9IGNvbXBpbGVyLT5nZXRJbmZvU2luaygpOwotICAgIHN0cmNweShpbmZvTG9nLCBp
bmZvU2luay5pbmZvLmNfc3RyKCkpOwotfQotCi0vLwotLy8gUmV0dXJuIGFueSBvYmplY3QgY29k
ZS4KLS8vCi12b2lkIFNoR2V0T2JqZWN0Q29kZShjb25zdCBTaEhhbmRsZSBoYW5kbGUsIGNoYXIq
IG9iakNvZGUpCi17Ci0gICAgaWYgKCFoYW5kbGUgfHwgIW9iakNvZGUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2FzdDxUU2hIYW5kbGVCYXNl
Kj4oaGFuZGxlKTsKLSAgICBUQ29tcGlsZXIqIGNvbXBpbGVyID0gYmFzZS0+Z2V0QXNDb21waWxl
cigpOwotICAgIGlmICghY29tcGlsZXIpIHJldHVybjsKLQotICAgIFRJbmZvU2luayYgaW5mb1Np
bmsgPSBjb21waWxlci0+Z2V0SW5mb1NpbmsoKTsKLSAgICBzdHJjcHkob2JqQ29kZSwgaW5mb1Np
bmsub2JqLmNfc3RyKCkpOwotfQotCi12b2lkIFNoR2V0VmFyaWFibGVJbmZvKGNvbnN0IFNoSGFu
ZGxlIGhhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgU2hTaGFkZXJJbmZvIHZhclR5cGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90KiBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCogc2l6ZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgU2hEYXRhVHlwZSogdHlwZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgU2hQcmVjaXNpb25UeXBlKiBwcmVjaXNpb24sCi0gICAgICAgICAgICAgICAgICAgICAg
IGludCogc3RhdGljVXNlLAotICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBuYW1lLAotICAg
ICAgICAgICAgICAgICAgICAgICBjaGFyKiBtYXBwZWROYW1lKQotewotICAgIGlmICghaGFuZGxl
IHx8ICFzaXplIHx8ICF0eXBlIHx8ICFwcmVjaXNpb24gfHwgIXN0YXRpY1VzZSB8fCAhbmFtZSkK
LSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCgodmFyVHlwZSA9PSBTSF9BQ1RJVkVfQVRUUklC
VVRFUykgfHwKLSAgICAgICAgICAgKHZhclR5cGUgPT0gU0hfQUNUSVZFX1VOSUZPUk1TKSB8fAot
ICAgICAgICAgICAodmFyVHlwZSA9PSBTSF9WQVJZSU5HUykpOwotCi0gICAgVFNoSGFuZGxlQmFz
ZSogYmFzZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8VFNoSGFuZGxlQmFzZSo+KGhhbmRsZSk7Ci0gICAg
VENvbXBpbGVyKiBjb21waWxlciA9IGJhc2UtPmdldEFzQ29tcGlsZXIoKTsKLSAgICBpZiAoY29t
cGlsZXIgPT0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgVFZhcmlhYmxlSW5mb0xp
c3QmIHZhckxpc3QgPQotICAgICAgICB2YXJUeXBlID09IFNIX0FDVElWRV9BVFRSSUJVVEVTID8g
Y29tcGlsZXItPmdldEF0dHJpYnMoKSA6Ci0gICAgICAgICAgICAodmFyVHlwZSA9PSBTSF9BQ1RJ
VkVfVU5JRk9STVMgPyBjb21waWxlci0+Z2V0VW5pZm9ybXMoKSA6Ci0gICAgICAgICAgICAgICAg
Y29tcGlsZXItPmdldFZhcnlpbmdzKCkpOwotICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0g
c3RhdGljX2Nhc3Q8aW50Pih2YXJMaXN0LnNpemUoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGNvbnN0IFRWYXJpYWJsZUluZm8mIHZhckluZm8gPSB2YXJMaXN0W2luZGV4XTsKLSAgICBpZiAo
bGVuZ3RoKSAqbGVuZ3RoID0gdmFySW5mby5uYW1lLnNpemUoKTsKLSAgICAqc2l6ZSA9IHZhcklu
Zm8uc2l6ZTsKLSAgICAqdHlwZSA9IHZhckluZm8udHlwZTsKLSAgICBzd2l0Y2ggKHZhckluZm8u
cHJlY2lzaW9uKSB7Ci0gICAgY2FzZSBFYnBMb3c6Ci0gICAgICAgICpwcmVjaXNpb24gPSBTSF9Q
UkVDSVNJT05fTE9XUDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnBNZWRpdW06Ci0gICAg
ICAgICpwcmVjaXNpb24gPSBTSF9QUkVDSVNJT05fTUVESVVNUDsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBFYnBIaWdoOgotICAgICAgICAqcHJlY2lzaW9uID0gU0hfUFJFQ0lTSU9OX0hJR0hQ
OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICAvLyBTb21lIHR5cGVzIGRv
ZXMgbm90IHN1cHBvcnQgcHJlY2lzaW9uLCBmb3IgZXhhbXBsZSwgYm9vbGVhbi4KLSAgICAgICAg
KnByZWNpc2lvbiA9IFNIX1BSRUNJU0lPTl9VTkRFRklORUQ7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICAqc3RhdGljVXNlID0gdmFySW5mby5zdGF0aWNVc2UgPyAxIDogMDsKLQotICAgIC8v
IFRoaXMgc2l6ZSBtdXN0IG1hdGNoIHRoYXQgcXVlcmllZCBieQotICAgIC8vIFNIX0FDVElWRV9V
TklGT1JNX01BWF9MRU5HVEgsIFNIX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgU0hfVkFS
WUlOR19NQVhfTEVOR1RICi0gICAgLy8gaW4gU2hHZXRJbmZvLCBiZWxvdy4KLSAgICBzaXplX3Qg
dmFyaWFibGVMZW5ndGggPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsKLSAgICBBU1NFUlQoY2hl
Y2tWYXJpYWJsZU1heExlbmd0aHMoaGFuZGxlLCB2YXJpYWJsZUxlbmd0aCkpOwotICAgIHN0cm5j
cHkobmFtZSwgdmFySW5mby5uYW1lLmNfc3RyKCksIHZhcmlhYmxlTGVuZ3RoKTsKLSAgICBuYW1l
W3ZhcmlhYmxlTGVuZ3RoIC0gMV0gPSAwOwotICAgIGlmIChtYXBwZWROYW1lKSB7Ci0gICAgICAg
IC8vIFRoaXMgc2l6ZSBtdXN0IG1hdGNoIHRoYXQgcXVlcmllZCBieQotICAgICAgICAvLyBTSF9N
QVBQRURfTkFNRV9NQVhfTEVOR1RIIGluIFNoR2V0SW5mbywgYmVsb3cuCi0gICAgICAgIHNpemVf
dCBtYXhNYXBwZWROYW1lTGVuZ3RoID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47Ci0gICAgICAg
IEFTU0VSVChjaGVja01hcHBlZE5hbWVNYXhMZW5ndGgoaGFuZGxlLCBtYXhNYXBwZWROYW1lTGVu
Z3RoKSk7Ci0gICAgICAgIHN0cm5jcHkobWFwcGVkTmFtZSwgdmFySW5mby5tYXBwZWROYW1lLmNf
c3RyKCksIG1heE1hcHBlZE5hbWVMZW5ndGgpOwotICAgICAgICBtYXBwZWROYW1lW21heE1hcHBl
ZE5hbWVMZW5ndGggLSAxXSA9IDA7Ci0gICAgfQotfQotCi12b2lkIFNoR2V0TmFtZUhhc2hpbmdF
bnRyeShjb25zdCBTaEhhbmRsZSBoYW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBuYW1lLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciogaGFzaGVkTmFtZSkKLXsKLSAgICBpZiAoIWhhbmRs
ZSB8fCAhbmFtZSB8fCAhaGFzaGVkTmFtZSB8fCBpbmRleCA8IDApCi0gICAgICAgIHJldHVybjsK
LQotICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2FzdDxUU2hIYW5kbGVCYXNlKj4o
aGFuZGxlKTsKLSAgICBUQ29tcGlsZXIqIGNvbXBpbGVyID0gYmFzZS0+Z2V0QXNDb21waWxlcigp
OwotICAgIGlmICghY29tcGlsZXIpIHJldHVybjsKLQotICAgIGNvbnN0IE5hbWVNYXAmIG5hbWVN
YXAgPSBjb21waWxlci0+Z2V0TmFtZU1hcCgpOwotICAgIGlmIChpbmRleCA+PSBzdGF0aWNfY2Fz
dDxpbnQ+KG5hbWVNYXAuc2l6ZSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTmFtZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBuYW1lTWFwLmJlZ2luKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBpbmRleDsgKytpKQotICAgICAgICArK2l0OwotCi0gICAgc2l6ZV90IGxlbiA9IGl0LT5m
aXJzdC5sZW5ndGgoKSArIDE7Ci0gICAgc2l6ZV90IG1heF9sZW4gPSAwOwotICAgIFNoR2V0SW5m
byhoYW5kbGUsIFNIX05BTUVfTUFYX0xFTkdUSCwgJm1heF9sZW4pOwotICAgIGlmIChsZW4gPiBt
YXhfbGVuKSB7Ci0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgICAgIGxlbiA9IG1heF9sZW47
Ci0gICAgfQotICAgIHN0cm5jcHkobmFtZSwgaXQtPmZpcnN0LmNfc3RyKCksIGxlbik7Ci0gICAg
Ly8gVG8gYmUgb24gdGhlIHNhZmUgc2lkZSBpbiBjYXNlIHRoZSBzb3VyY2UgaXMgbG9uZ2VyIHRo
YW4gZXhwZWN0ZWQuCi0gICAgbmFtZVtsZW4gLSAxXSA9ICdcMCc7Ci0KLSAgICBsZW4gPSBpdC0+
c2Vjb25kLmxlbmd0aCgpICsgMTsKLSAgICBtYXhfbGVuID0gMDsKLSAgICBTaEdldEluZm8oaGFu
ZGxlLCBTSF9IQVNIRURfTkFNRV9NQVhfTEVOR1RILCAmbWF4X2xlbik7Ci0gICAgaWYgKGxlbiA+
IG1heF9sZW4pIHsKLSAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICAgICAgbGVuID0gbWF4X2xl
bjsKLSAgICB9Ci0gICAgc3RybmNweShoYXNoZWROYW1lLCBpdC0+c2Vjb25kLmNfc3RyKCksIGxl
bik7Ci0gICAgLy8gVG8gYmUgb24gdGhlIHNhZmUgc2lkZSBpbiBjYXNlIHRoZSBzb3VyY2UgaXMg
bG9uZ2VyIHRoYW4gZXhwZWN0ZWQuCi0gICAgaGFzaGVkTmFtZVtsZW4gLSAxXSA9ICdcMCc7Ci19
Ci0KLXZvaWQgU2hHZXRJbmZvUG9pbnRlcihjb25zdCBTaEhhbmRsZSBoYW5kbGUsIFNoU2hhZGVy
SW5mbyBwbmFtZSwgdm9pZCoqIHBhcmFtcykKLXsKLSAgICBpZiAoIWhhbmRsZSB8fCAhcGFyYW1z
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBUU2hIYW5kbGVCYXNlKiBiYXNlID0gc3RhdGljX2Nh
c3Q8VFNoSGFuZGxlQmFzZSo+KGhhbmRsZSk7Ci0gICAgVHJhbnNsYXRvckhMU0wqIHRyYW5zbGF0
b3IgPSBiYXNlLT5nZXRBc1RyYW5zbGF0b3JITFNMKCk7Ci0gICAgaWYgKCF0cmFuc2xhdG9yKSBy
ZXR1cm47Ci0KLSAgICBzd2l0Y2gocG5hbWUpCi0gICAgewotICAgIGNhc2UgU0hfQUNUSVZFX1VO
SUZPUk1TX0FSUkFZOgotICAgICAgICAqcGFyYW1zID0gKHZvaWQqKSZ0cmFuc2xhdG9yLT5nZXRV
bmlmb3JtcygpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwot
ICAgIH0KLX0KLQotaW50IFNoQ2hlY2tWYXJpYWJsZXNXaXRoaW5QYWNraW5nTGltaXRzKAotICAg
IGludCBtYXhWZWN0b3JzLCBTaFZhcmlhYmxlSW5mbyogdmFySW5mb0FycmF5LCBzaXplX3QgdmFy
SW5mb0FycmF5U2l6ZSkKLXsKLSAgICBpZiAodmFySW5mb0FycmF5U2l6ZSA9PSAwKQotICAgICAg
ICByZXR1cm4gMTsKLSAgICBBU1NFUlQodmFySW5mb0FycmF5KTsKLSAgICBUVmFyaWFibGVJbmZv
TGlzdCB2YXJpYWJsZXM7Ci0gICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHZhckluZm9BcnJh
eVNpemU7ICsraWkpCi0gICAgewotICAgICAgICBUVmFyaWFibGVJbmZvIHZhcih2YXJJbmZvQXJy
YXlbaWldLnR5cGUsIHZhckluZm9BcnJheVtpaV0uc2l6ZSk7Ci0gICAgICAgIHZhcmlhYmxlcy5w
dXNoX2JhY2sodmFyKTsKLSAgICB9Ci0gICAgVmFyaWFibGVQYWNrZXIgcGFja2VyOwotICAgIHJl
dHVybiBwYWNrZXIuQ2hlY2tWYXJpYWJsZXNXaXRoaW5QYWNraW5nTGltaXRzKG1heFZlY3RvcnMs
IHZhcmlhYmxlcykgPyAxIDogMDsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBhN2NlMjE2ODBmNWVlY2RiNTkwYzFkNWM2YzViNGEwNWZiOTZkNmM2Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMTYg
KzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8KLS8vIFN5bWJvbCB0YWJsZSBmb3IgcGFy
c2luZy4gIE1vc3QgZnVuY3Rpb25hbGl5IGFuZCBtYWluIGlkZWFzCi0vLyBhcmUgZG9jdW1lbnRl
ZCBpbiB0aGUgaGVhZGVyIGZpbGUuCi0vLwotCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikKLSNwcmFn
bWEgd2FybmluZyhkaXNhYmxlOiA0NzE4KQotI2VuZGlmCi0KLSNpbmNsdWRlICJjb21waWxlci9T
eW1ib2xUYWJsZS5oIgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxhbGdvcml0aG0+
Ci0jaW5jbHVkZSA8Y2xpbWl0cz4KLQotVFR5cGU6OlRUeXBlKGNvbnN0IFRQdWJsaWNUeXBlICZw
KSA6Ci0gICAgICAgICAgICB0eXBlKHAudHlwZSksIHByZWNpc2lvbihwLnByZWNpc2lvbiksIHF1
YWxpZmllcihwLnF1YWxpZmllciksIHNpemUocC5zaXplKSwgbWF0cml4KHAubWF0cml4KSwgYXJy
YXkocC5hcnJheSksIGFycmF5U2l6ZShwLmFycmF5U2l6ZSksIHN0cnVjdHVyZSgwKQotewotICAg
IGlmIChwLnVzZXJEZWYpCi0gICAgICAgIHN0cnVjdHVyZSA9IHAudXNlckRlZi0+Z2V0U3RydWN0
KCk7Ci19Ci0KLS8vCi0vLyBSZWN1cnNpdmVseSBnZW5lcmF0ZSBtYW5nbGVkIG5hbWVzLgotLy8K
LVRTdHJpbmcgVFR5cGU6OmJ1aWxkTWFuZ2xlZE5hbWUoKSBjb25zdAotewotICAgIFRTdHJpbmcg
bWFuZ2xlZE5hbWU7Ci0gICAgaWYgKGlzTWF0cml4KCkpCi0gICAgICAgIG1hbmdsZWROYW1lICs9
ICdtJzsKLSAgICBlbHNlIGlmIChpc1ZlY3RvcigpKQotICAgICAgICBtYW5nbGVkTmFtZSArPSAn
dic7Ci0KLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEVidEZsb2F0OiAgICAgICBtYW5n
bGVkTmFtZSArPSAnZic7ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRJbnQ6ICAgICAgICAgbWFu
Z2xlZE5hbWUgKz0gJ2knOyAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0Qm9vbDogICAgICAgIG1h
bmdsZWROYW1lICs9ICdiJzsgICAgICBicmVhazsKLSAgICBjYXNlIEVidFNhbXBsZXIyRDogICBt
YW5nbGVkTmFtZSArPSAiczIiOyAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRTYW1wbGVyQ3ViZTog
bWFuZ2xlZE5hbWUgKz0gInNDIjsgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0U3RydWN0OiAgICAg
IG1hbmdsZWROYW1lICs9IHN0cnVjdHVyZS0+bWFuZ2xlZE5hbWUoKTsgYnJlYWs7Ci0gICAgZGVm
YXVsdDogICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgbWFuZ2xlZE5hbWUgKz0gc3Rh
dGljX2Nhc3Q8Y2hhcj4oJzAnICsgZ2V0Tm9taW5hbFNpemUoKSk7Ci0gICAgaWYgKGlzQXJyYXko
KSkgewotICAgICAgICBjaGFyIGJ1ZlsyMF07Ci0gICAgICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9m
KGJ1ZiksICIlZCIsIGFycmF5U2l6ZSk7Ci0gICAgICAgIG1hbmdsZWROYW1lICs9ICdbJzsKLSAg
ICAgICAgbWFuZ2xlZE5hbWUgKz0gYnVmOwotICAgICAgICBtYW5nbGVkTmFtZSArPSAnXSc7Ci0g
ICAgfQotICAgIHJldHVybiBtYW5nbGVkTmFtZTsKLX0KLQotc2l6ZV90IFRUeXBlOjpnZXRPYmpl
Y3RTaXplKCkgY29uc3QKLXsKLSAgICBzaXplX3QgdG90YWxTaXplID0gMDsKLQotICAgIGlmIChn
ZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCi0gICAgICAgIHRvdGFsU2l6ZSA9IHN0cnVjdHVy
ZS0+b2JqZWN0U2l6ZSgpOwotICAgIGVsc2UgaWYgKG1hdHJpeCkKLSAgICAgICAgdG90YWxTaXpl
ID0gc2l6ZSAqIHNpemU7Ci0gICAgZWxzZQotICAgICAgICB0b3RhbFNpemUgPSBzaXplOwotCi0g
ICAgaWYgKGlzQXJyYXkoKSkgewotICAgICAgICBzaXplX3QgYXJyYXlTaXplID0gZ2V0QXJyYXlT
aXplKCk7Ci0gICAgICAgIGlmIChhcnJheVNpemUgPiBJTlRfTUFYIC8gdG90YWxTaXplKQotICAg
ICAgICAgICAgdG90YWxTaXplID0gSU5UX01BWDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
dG90YWxTaXplICo9IGFycmF5U2l6ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG90YWxTaXplOwot
fQotCi1ib29sIFRTdHJ1Y3R1cmU6OmNvbnRhaW5zQXJyYXlzKCkgY29uc3QKLXsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1GaWVsZHMtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0
IFRUeXBlKiBmaWVsZFR5cGUgPSAoKm1GaWVsZHMpW2ldLT50eXBlKCk7Ci0gICAgICAgIGlmIChm
aWVsZFR5cGUtPmlzQXJyYXkoKSB8fCBmaWVsZFR5cGUtPmlzU3RydWN0dXJlQ29udGFpbmluZ0Fy
cmF5cygpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotVFN0cmluZyBUU3RydWN0dXJlOjpidWlsZE1hbmdsZWROYW1lKCkgY29uc3QKLXsK
LSAgICBUU3RyaW5nIG1hbmdsZWROYW1lKCJzdHJ1Y3QtIik7Ci0gICAgbWFuZ2xlZE5hbWUgKz0g
Km1OYW1lOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUZpZWxkcy0+c2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJy0nOwotICAgICAgICBtYW5nbGVkTmFtZSArPSAo
Km1GaWVsZHMpW2ldLT50eXBlKCktPmdldE1hbmdsZWROYW1lKCk7Ci0gICAgfQotICAgIHJldHVy
biBtYW5nbGVkTmFtZTsKLX0KLQotc2l6ZV90IFRTdHJ1Y3R1cmU6OmNhbGN1bGF0ZU9iamVjdFNp
emUoKSBjb25zdAotewotICAgIHNpemVfdCBzaXplID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1GaWVsZHMtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHNpemVfdCBmaWVsZFNpemUg
PSAoKm1GaWVsZHMpW2ldLT50eXBlKCktPmdldE9iamVjdFNpemUoKTsKLSAgICAgICAgaWYgKGZp
ZWxkU2l6ZSA+IElOVF9NQVggLSBzaXplKQotICAgICAgICAgICAgc2l6ZSA9IElOVF9NQVg7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNpemUgKz0gZmllbGRTaXplOwotICAgIH0KLSAgICBy
ZXR1cm4gc2l6ZTsKLX0KLQotaW50IFRTdHJ1Y3R1cmU6OmNhbGN1bGF0ZURlZXBlc3ROZXN0aW5n
KCkgY29uc3QKLXsKLSAgICBpbnQgbWF4TmVzdGluZyA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtRmllbGRzLT5zaXplKCk7ICsraSkgewotICAgICAgICBtYXhOZXN0aW5nID0gc3Rk
OjptYXgobWF4TmVzdGluZywgKCptRmllbGRzKVtpXS0+dHlwZSgpLT5nZXREZWVwZXN0U3RydWN0
TmVzdGluZygpKTsKLSAgICB9Ci0gICAgcmV0dXJuIDEgKyBtYXhOZXN0aW5nOwotfQotCi0vLwot
Ly8gRHVtcCBmdW5jdGlvbnMuCi0vLwotCi12b2lkIFRWYXJpYWJsZTo6ZHVtcChUSW5mb1Npbmsm
IGluZm9TaW5rKSBjb25zdAotewotICAgIGluZm9TaW5rLmRlYnVnIDw8IGdldE5hbWUoKS5jX3N0
cigpIDw8ICI6ICIgPDwgdHlwZS5nZXRRdWFsaWZpZXJTdHJpbmcoKSA8PCAiICIgPDwgdHlwZS5n
ZXRQcmVjaXNpb25TdHJpbmcoKSA8PCAiICIgPDwgdHlwZS5nZXRCYXNpY1N0cmluZygpOwotICAg
IGlmICh0eXBlLmlzQXJyYXkoKSkgewotICAgICAgICBpbmZvU2luay5kZWJ1ZyA8PCAiWzBdIjsK
LSAgICB9Ci0gICAgaW5mb1NpbmsuZGVidWcgPDwgIlxuIjsKLX0KLQotdm9pZCBURnVuY3Rpb246
OmR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3QKLXsKLSAgICBpbmZvU2luay5kZWJ1ZyA8
PCBnZXROYW1lKCkuY19zdHIoKSA8PCAiOiAiIDw8ICByZXR1cm5UeXBlLmdldEJhc2ljU3RyaW5n
KCkgPDwgIiAiIDw8IGdldE1hbmdsZWROYW1lKCkuY19zdHIoKSA8PCAiXG4iOwotfQotCi12b2lk
IFRTeW1ib2xUYWJsZUxldmVsOjpkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0Ci17Ci0g
ICAgdExldmVsOjpjb25zdF9pdGVyYXRvciBpdDsKLSAgICBmb3IgKGl0ID0gbGV2ZWwuYmVnaW4o
KTsgaXQgIT0gbGV2ZWwuZW5kKCk7ICsraXQpCi0gICAgICAgICgqaXQpLnNlY29uZC0+ZHVtcChp
bmZvU2luayk7Ci19Ci0KLXZvaWQgVFN5bWJvbFRhYmxlOjpkdW1wKFRJbmZvU2luayAmaW5mb1Np
bmspIGNvbnN0Ci17Ci0gICAgZm9yIChpbnQgbGV2ZWwgPSBjdXJyZW50TGV2ZWwoKTsgbGV2ZWwg
Pj0gMDsgLS1sZXZlbCkgewotICAgICAgICBpbmZvU2luay5kZWJ1ZyA8PCAiTEVWRUwgIiA8PCBs
ZXZlbCA8PCAiXG4iOwotICAgICAgICB0YWJsZVtsZXZlbF0tPmR1bXAoaW5mb1NpbmspOwotICAg
IH0KLX0KLQotLy8KLS8vIEZ1bmN0aW9ucyBoYXZlIGJ1cmllZCBwb2ludGVycyB0byBkZWxldGUu
Ci0vLwotVEZ1bmN0aW9uOjp+VEZ1bmN0aW9uKCkKLXsKLSAgICBmb3IgKFRQYXJhbUxpc3Q6Oml0
ZXJhdG9yIGkgPSBwYXJhbWV0ZXJzLmJlZ2luKCk7IGkgIT0gcGFyYW1ldGVycy5lbmQoKTsgKytp
KQotICAgICAgICBkZWxldGUgKCppKS50eXBlOwotfQotCi0vLwotLy8gU3ltYm9sIHRhYmxlIGxl
dmVscyBhcmUgYSBtYXAgb2YgcG9pbnRlcnMgdG8gc3ltYm9scyB0aGF0IGhhdmUgdG8gYmUgZGVs
ZXRlZC4KLS8vCi1UU3ltYm9sVGFibGVMZXZlbDo6flRTeW1ib2xUYWJsZUxldmVsKCkKLXsKLSAg
ICBmb3IgKHRMZXZlbDo6aXRlcmF0b3IgaXQgPSBsZXZlbC5iZWdpbigpOyBpdCAhPSBsZXZlbC5l
bmQoKTsgKytpdCkKLSAgICAgICAgZGVsZXRlICgqaXQpLnNlY29uZDsKLX0KLQotLy8KLS8vIENo
YW5nZSBhbGwgZnVuY3Rpb24gZW50cmllcyBpbiB0aGUgdGFibGUgd2l0aCB0aGUgbm9uLW1hbmds
ZWQgbmFtZQotLy8gdG8gYmUgcmVsYXRlZCB0byB0aGUgcHJvdmlkZWQgYnVpbHQtaW4gb3BlcmF0
aW9uLiAgVGhpcyBpcyBhIGxvdwotLy8gcGVyZm9ybWFuY2Ugb3BlcmF0aW9uLCBhbmQgb25seSBp
bnRlbmRlZCBmb3Igc3ltYm9sIHRhYmxlcyB0aGF0Ci0vLyBsaXZlIGFjcm9zcyBhIGxhcmdlIG51
bWJlciBvZiBjb21waWxlcy4KLS8vCi12b2lkIFRTeW1ib2xUYWJsZUxldmVsOjpyZWxhdGVUb09w
ZXJhdG9yKGNvbnN0IGNoYXIqIG5hbWUsIFRPcGVyYXRvciBvcCkKLXsKLSAgICB0TGV2ZWw6Oml0
ZXJhdG9yIGl0OwotICAgIGZvciAoaXQgPSBsZXZlbC5iZWdpbigpOyBpdCAhPSBsZXZlbC5lbmQo
KTsgKytpdCkgewotICAgICAgICBpZiAoKCppdCkuc2Vjb25kLT5pc0Z1bmN0aW9uKCkpIHsKLSAg
ICAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPigo
Kml0KS5zZWNvbmQpOwotICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLT5nZXROYW1lKCkgPT0gbmFt
ZSkKLSAgICAgICAgICAgICAgICBmdW5jdGlvbi0+cmVsYXRlVG9PcGVyYXRvcihvcCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLS8vCi0vLyBDaGFuZ2UgYWxsIGZ1bmN0aW9uIGVudHJpZXMgaW4g
dGhlIHRhYmxlIHdpdGggdGhlIG5vbi1tYW5nbGVkIG5hbWUKLS8vIHRvIGJlIHJlbGF0ZWQgdG8g
dGhlIHByb3ZpZGVkIGJ1aWx0LWluIGV4dGVuc2lvbi4gVGhpcyBpcyBhIGxvdwotLy8gcGVyZm9y
bWFuY2Ugb3BlcmF0aW9uLCBhbmQgb25seSBpbnRlbmRlZCBmb3Igc3ltYm9sIHRhYmxlcyB0aGF0
Ci0vLyBsaXZlIGFjcm9zcyBhIGxhcmdlIG51bWJlciBvZiBjb21waWxlcy4KLS8vCi12b2lkIFRT
eW1ib2xUYWJsZUxldmVsOjpyZWxhdGVUb0V4dGVuc2lvbihjb25zdCBjaGFyKiBuYW1lLCBjb25z
dCBUU3RyaW5nJiBleHQpCi17Ci0gICAgZm9yICh0TGV2ZWw6Oml0ZXJhdG9yIGl0ID0gbGV2ZWwu
YmVnaW4oKTsgaXQgIT0gbGV2ZWwuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgVFN5bWJvbCogc3lt
Ym9sID0gaXQtPnNlY29uZDsKLSAgICAgICAgaWYgKHN5bWJvbC0+Z2V0TmFtZSgpID09IG5hbWUp
Ci0gICAgICAgICAgICBzeW1ib2wtPnJlbGF0ZVRvRXh0ZW5zaW9uKGV4dCk7Ci0gICAgfQotfQot
Ci1UU3ltYm9sVGFibGU6On5UU3ltYm9sVGFibGUoKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgdGFibGUuc2l6ZSgpOyArK2kpCi0gICAgICAgIGRlbGV0ZSB0YWJsZVtpXTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHByZWNpc2lvblN0YWNrLnNpemUoKTsgKytpKQotICAgICAg
ICBkZWxldGUgcHJlY2lzaW9uU3RhY2tbaV07Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiZWJhZDRiOTJlNzkwYmM2MjUzZDAyZWMwZjA3NjYxZjk4YzQzODBjLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzgy
ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgX1NZTUJPTF9UQUJMRV9JTkNM
VURFRF8KLSNkZWZpbmUgX1NZTUJPTF9UQUJMRV9JTkNMVURFRF8KLQotLy8KLS8vIFN5bWJvbCB0
YWJsZSBmb3IgcGFyc2luZy4gIEhhcyB0aGVzZSBkZXNpZ24gY2hhcmFjdGVyaXN0aWNzOgotLy8K
LS8vICogU2FtZSBzeW1ib2wgdGFibGUgY2FuIGJlIHVzZWQgdG8gY29tcGlsZSBtYW55IHNoYWRl
cnMsIHRvIHByZXNlcnZlCi0vLyAgIGVmZm9ydCBvZiBjcmVhdGluZyBhbmQgbG9hZGluZyB3aXRo
IHRoZSBsYXJnZSBudW1iZXJzIG9mIGJ1aWx0LWluCi0vLyAgIHN5bWJvbHMuCi0vLwotLy8gKiBO
YW1lIG1hbmdsaW5nIHdpbGwgYmUgdXNlZCB0byBnaXZlIGVhY2ggZnVuY3Rpb24gYSB1bmlxdWUg
bmFtZQotLy8gICBzbyB0aGF0IHN5bWJvbCB0YWJsZSBsb29rdXBzIGFyZSBuZXZlciBhbWJpZ3Vv
dXMuICBUaGlzIGFsbG93cwotLy8gICBhIHNpbXBsZXIgc3ltYm9sIHRhYmxlIHN0cnVjdHVyZS4K
LS8vCi0vLyAqIFB1c2hpbmcgYW5kIHBvcHBpbmcgb2Ygc2NvcGUsIHNvIHN5bWJvbCB0YWJsZSB3
aWxsIHJlYWxseSBiZSBhIHN0YWNrIAotLy8gICBvZiBzeW1ib2wgdGFibGVzLiAgU2VhcmNoZWQg
ZnJvbSB0aGUgdG9wLCB3aXRoIG5ldyBpbnNlcnRzIGdvaW5nIGludG8KLS8vICAgdGhlIHRvcC4K
LS8vCi0vLyAqIENvbnN0YW50czogIENvbXBpbGUgdGltZSBjb25zdGFudCBzeW1ib2xzIHdpbGwg
a2VlcCB0aGVpciB2YWx1ZXMKLS8vICAgaW4gdGhlIHN5bWJvbCB0YWJsZS4gIFRoZSBwYXJzZXIg
Y2FuIHN1YnN0aXR1dGUgY29uc3RhbnRzIGF0IHBhcnNlCi0vLyAgIHRpbWUsIGluY2x1ZGluZyBk
b2luZyBjb25zdGFudCBmb2xkaW5nIGFuZCBjb25zdGFudCBwcm9wYWdhdGlvbi4KLS8vCi0vLyAq
IE5vIHRlbXBvcmFyaWVzOiAgVGVtcG9yYXJpZXMgbWFkZSBmcm9tIG9wZXJhdGlvbnMgKCssIC0t
LCAueHksIGV0Yy4pCi0vLyAgIGFyZSB0cmFja2VkIGluIHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVz
ZW50YXRpb24sIG5vdCB0aGUgc3ltYm9sIHRhYmxlLgotLy8KLQotI2luY2x1ZGUgPGFzc2VydC5o
PgotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRlICJjb21waWxlci9J
bmZvU2luay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotCi0vLwotLy8g
U3ltYm9sIGJhc2UgY2xhc3MuICAoQ2FuIGJ1aWxkIGZ1bmN0aW9ucyBvciB2YXJpYWJsZXMgb3V0
IG9mIHRoZXNlLi4uKQotLy8KLWNsYXNzIFRTeW1ib2wgeyAgICAKLXB1YmxpYzoKLSAgICBQT09M
X0FMTE9DQVRPUl9ORVdfREVMRVRFKCk7Ci0gICAgVFN5bWJvbChjb25zdCBUU3RyaW5nKiBuKSA6
ICB1bmlxdWVJZCgwKSwgbmFtZShuKSB7IH0KLSAgICB2aXJ0dWFsIH5UU3ltYm9sKCkgeyAvKiBk
b24ndCBkZWxldGUgbmFtZSwgaXQncyBmcm9tIHRoZSBwb29sICovIH0KLQotICAgIGNvbnN0IFRT
dHJpbmcmIGdldE5hbWUoKSBjb25zdCB7IHJldHVybiAqbmFtZTsgfQotICAgIHZpcnR1YWwgY29u
c3QgVFN0cmluZyYgZ2V0TWFuZ2xlZE5hbWUoKSBjb25zdCB7IHJldHVybiBnZXROYW1lKCk7IH0K
LSAgICB2aXJ0dWFsIGJvb2wgaXNGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgdmlydHVhbCBib29sIGlzVmFyaWFibGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAg
IHZvaWQgc2V0VW5pcXVlSWQoaW50IGlkKSB7IHVuaXF1ZUlkID0gaWQ7IH0KLSAgICBpbnQgZ2V0
VW5pcXVlSWQoKSBjb25zdCB7IHJldHVybiB1bmlxdWVJZDsgfQotICAgIHZpcnR1YWwgdm9pZCBk
dW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0ID0gMDsKLSAgICB2b2lkIHJlbGF0ZVRvRXh0
ZW5zaW9uKGNvbnN0IFRTdHJpbmcmIGV4dCkgeyBleHRlbnNpb24gPSBleHQ7IH0KLSAgICBjb25z
dCBUU3RyaW5nJiBnZXRFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiBleHRlbnNpb247IH0KLQot
cHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVFN5bWJvbCk7Ci0KLSAgICBp
bnQgdW5pcXVlSWQ7ICAgICAgLy8gRm9yIHJlYWwgY29tcGFyaW5nIGR1cmluZyBjb2RlIGdlbmVy
YXRpb24KLSAgICBjb25zdCBUU3RyaW5nICpuYW1lOwotICAgIFRTdHJpbmcgZXh0ZW5zaW9uOwot
fTsKLQotLy8KLS8vIFZhcmlhYmxlIGNsYXNzLCBtZWFuaW5nIGEgc3ltYm9sIHRoYXQncyBub3Qg
YSBmdW5jdGlvbi4KLS8vIAotLy8gVGhlcmUgY291bGQgYmUgYSBzZXBhcmF0ZSBjbGFzcyBoZWly
YXJjaHkgZm9yIENvbnN0YW50IHZhcmlhYmxlczsKLS8vIE9ubHkgb25lIG9mIGludCwgYm9vbCwg
b3IgZmxvYXQsIChvciBub25lKSBpcyBjb3JyZWN0IGZvcgotLy8gYW55IHBhcnRpY3VsYXIgdXNl
LCBidXQgaXQncyBlYXN5IHRvIGRvIHRoaXMgd2F5LCBhbmQgZG9lc24ndAotLy8gc2VlbSB3b3J0
aCBoYXZpbmcgc2VwYXJhdGUgY2xhc3NlcywgYW5kICJnZXRDb25zdCIgY2FuJ3Qgc2ltcGx5IHJl
dHVybgotLy8gZGlmZmVyZW50IHZhbHVlcyBmb3IgZGlmZmVyZW50IHR5cGVzIHBvbHltb3JwaGlj
YWxseSwgc28gdGhpcyBpcyAKLS8vIGp1c3Qgc2ltcGxlIGFuZCBwcmFnbWF0aWMuCi0vLwotY2xh
c3MgVFZhcmlhYmxlIDogcHVibGljIFRTeW1ib2wgewotcHVibGljOgotICAgIFRWYXJpYWJsZShj
b25zdCBUU3RyaW5nICpuYW1lLCBjb25zdCBUVHlwZSYgdCwgYm9vbCB1VCA9IGZhbHNlICkgOiBU
U3ltYm9sKG5hbWUpLCB0eXBlKHQpLCB1c2VyVHlwZSh1VCksIHVuaW9uQXJyYXkoMCkgeyB9Ci0g
ICAgdmlydHVhbCB+VFZhcmlhYmxlKCkgeyB9Ci0gICAgdmlydHVhbCBib29sIGlzVmFyaWFibGUo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9ICAgIAotICAgIFRUeXBlJiBnZXRUeXBlKCkgeyByZXR1
cm4gdHlwZTsgfSAgICAKLSAgICBjb25zdCBUVHlwZSYgZ2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJu
IHR5cGU7IH0KLSAgICBib29sIGlzVXNlclR5cGUoKSBjb25zdCB7IHJldHVybiB1c2VyVHlwZTsg
fQotICAgIHZvaWQgc2V0UXVhbGlmaWVyKFRRdWFsaWZpZXIgcXVhbGlmaWVyKSB7IHR5cGUuc2V0
UXVhbGlmaWVyKHF1YWxpZmllcik7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRJbmZvU2lu
ayAmaW5mb1NpbmspIGNvbnN0OwotCi0gICAgQ29uc3RhbnRVbmlvbiogZ2V0Q29uc3RQb2ludGVy
KCkKLSAgICB7IAotICAgICAgICBpZiAoIXVuaW9uQXJyYXkpCi0gICAgICAgICAgICB1bmlvbkFy
cmF5ID0gbmV3IENvbnN0YW50VW5pb25bdHlwZS5nZXRPYmplY3RTaXplKCldOwotCi0gICAgICAg
IHJldHVybiB1bmlvbkFycmF5OwotICAgIH0KLQotICAgIENvbnN0YW50VW5pb24qIGdldENvbnN0
UG9pbnRlcigpIGNvbnN0IHsgcmV0dXJuIHVuaW9uQXJyYXk7IH0KLQotICAgIHZvaWQgc2hhcmVD
b25zdFBvaW50ZXIoIENvbnN0YW50VW5pb24gKmNvbnN0QXJyYXkpCi0gICAgewotICAgICAgICBp
ZiAodW5pb25BcnJheSA9PSBjb25zdEFycmF5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIGRlbGV0ZVtdIHVuaW9uQXJyYXk7Ci0gICAgICAgIHVuaW9uQXJyYXkgPSBjb25zdEFycmF5
OyAgCi0gICAgfQotCi1wcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUVmFy
aWFibGUpOwotCi0gICAgVFR5cGUgdHlwZTsKLSAgICBib29sIHVzZXJUeXBlOwotICAgIC8vIHdl
IGFyZSBhc3N1bWluZyB0aGF0IFBvb2wgQWxsb2NhdG9yIHdpbGwgZnJlZSB0aGUgbWVtb3J5IGFs
bG9jYXRlZCB0byB1bmlvbkFycmF5Ci0gICAgLy8gd2hlbiB0aGlzIG9iamVjdCBpcyBkZXN0cm95
ZWQKLSAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5OwotfTsKLQotLy8KLS8vIFRoZSBmdW5j
dGlvbiBzdWItY2xhc3Mgb2Ygc3ltYm9scyBhbmQgdGhlIHBhcnNlciB3aWxsIG5lZWQgdG8KLS8v
IHNoYXJlIHRoaXMgZGVmaW5pdGlvbiBvZiBhIGZ1bmN0aW9uIHBhcmFtZXRlci4KLS8vCi1zdHJ1
Y3QgVFBhcmFtZXRlciB7Ci0gICAgVFN0cmluZyAqbmFtZTsKLSAgICBUVHlwZSogdHlwZTsKLX07
Ci0KLS8vCi0vLyBUaGUgZnVuY3Rpb24gc3ViLWNsYXNzIG9mIGEgc3ltYm9sLiAgCi0vLwotY2xh
c3MgVEZ1bmN0aW9uIDogcHVibGljIFRTeW1ib2wgewotcHVibGljOgotICAgIFRGdW5jdGlvbihU
T3BlcmF0b3IgbykgOgotICAgICAgICBUU3ltYm9sKDApLAotICAgICAgICByZXR1cm5UeXBlKFRU
eXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCkpLAotICAgICAgICBvcChvKSwKLSAgICAgICAgZGVm
aW5lZChmYWxzZSkgeyB9Ci0gICAgVEZ1bmN0aW9uKGNvbnN0IFRTdHJpbmcgKm5hbWUsIFRUeXBl
JiByZXRUeXBlLCBUT3BlcmF0b3IgdE9wID0gRU9wTnVsbCkgOiAKLSAgICAgICAgVFN5bWJvbChu
YW1lKSwgCi0gICAgICAgIHJldHVyblR5cGUocmV0VHlwZSksCi0gICAgICAgIG1hbmdsZWROYW1l
KFRGdW5jdGlvbjo6bWFuZ2xlTmFtZSgqbmFtZSkpLAotICAgICAgICBvcCh0T3ApLAotICAgICAg
ICBkZWZpbmVkKGZhbHNlKSB7IH0KLSAgICB2aXJ0dWFsIH5URnVuY3Rpb24oKTsKLSAgICB2aXJ0
dWFsIGJvb2wgaXNGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0gICAgCi0KLSAgICBz
dGF0aWMgVFN0cmluZyBtYW5nbGVOYW1lKGNvbnN0IFRTdHJpbmcmIG5hbWUpIHsgcmV0dXJuIG5h
bWUgKyAnKCc7IH0KLSAgICBzdGF0aWMgVFN0cmluZyB1bm1hbmdsZU5hbWUoY29uc3QgVFN0cmlu
ZyYgbWFuZ2xlZE5hbWUpCi0gICAgewotICAgICAgICByZXR1cm4gVFN0cmluZyhtYW5nbGVkTmFt
ZS5jX3N0cigpLCBtYW5nbGVkTmFtZS5maW5kX2ZpcnN0X29mKCcoJykpOwotICAgIH0KLQotICAg
IHZvaWQgYWRkUGFyYW1ldGVyKFRQYXJhbWV0ZXImIHApIAotICAgIHsgCi0gICAgICAgIHBhcmFt
ZXRlcnMucHVzaF9iYWNrKHApOwotICAgICAgICBtYW5nbGVkTmFtZSA9IG1hbmdsZWROYW1lICsg
cC50eXBlLT5nZXRNYW5nbGVkTmFtZSgpOwotICAgIH0KLQotICAgIGNvbnN0IFRTdHJpbmcmIGdl
dE1hbmdsZWROYW1lKCkgY29uc3QgeyByZXR1cm4gbWFuZ2xlZE5hbWU7IH0KLSAgICBjb25zdCBU
VHlwZSYgZ2V0UmV0dXJuVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHJldHVyblR5cGU7IH0KLQotICAg
IHZvaWQgcmVsYXRlVG9PcGVyYXRvcihUT3BlcmF0b3IgbykgeyBvcCA9IG87IH0KLSAgICBUT3Bl
cmF0b3IgZ2V0QnVpbHRJbk9wKCkgY29uc3QgeyByZXR1cm4gb3A7IH0KLQotICAgIHZvaWQgc2V0
RGVmaW5lZCgpIHsgZGVmaW5lZCA9IHRydWU7IH0KLSAgICBib29sIGlzRGVmaW5lZCgpIHsgcmV0
dXJuIGRlZmluZWQ7IH0KLQotICAgIHNpemVfdCBnZXRQYXJhbUNvdW50KCkgY29uc3QgeyByZXR1
cm4gcGFyYW1ldGVycy5zaXplKCk7IH0gIAotICAgIGNvbnN0IFRQYXJhbWV0ZXImIGdldFBhcmFt
KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBwYXJhbWV0ZXJzW2ldOyB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBE
SVNBTExPV19DT1BZX0FORF9BU1NJR04oVEZ1bmN0aW9uKTsKLQotICAgIHR5cGVkZWYgVFZlY3Rv
cjxUUGFyYW1ldGVyPiBUUGFyYW1MaXN0OwotICAgIFRQYXJhbUxpc3QgcGFyYW1ldGVyczsKLSAg
ICBUVHlwZSByZXR1cm5UeXBlOwotICAgIFRTdHJpbmcgbWFuZ2xlZE5hbWU7Ci0gICAgVE9wZXJh
dG9yIG9wOwotICAgIGJvb2wgZGVmaW5lZDsKLX07Ci0KLQotY2xhc3MgVFN5bWJvbFRhYmxlTGV2
ZWwgewotcHVibGljOgotICAgIHR5cGVkZWYgVE1hcDxUU3RyaW5nLCBUU3ltYm9sKj4gdExldmVs
OwotICAgIHR5cGVkZWYgdExldmVsOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKLSAg
ICB0eXBlZGVmIGNvbnN0IHRMZXZlbDo6dmFsdWVfdHlwZSB0TGV2ZWxQYWlyOwotICAgIHR5cGVk
ZWYgc3RkOjpwYWlyPHRMZXZlbDo6aXRlcmF0b3IsIGJvb2w+IHRJbnNlcnRSZXN1bHQ7Ci0KLSAg
ICBUU3ltYm9sVGFibGVMZXZlbCgpIHsgfQotICAgIH5UU3ltYm9sVGFibGVMZXZlbCgpOwotCi0g
ICAgYm9vbCBpbnNlcnQoY29uc3QgVFN0cmluZyAmbmFtZSwgVFN5bWJvbCAmc3ltYm9sKQotICAg
IHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gcmV0dXJuaW5nIHRydWUgbWVhbnMgc3ltYm9sIHdh
cyBhZGRlZCB0byB0aGUgdGFibGUKLSAgICAgICAgLy8KLSAgICAgICAgdEluc2VydFJlc3VsdCBy
ZXN1bHQgPSBsZXZlbC5pbnNlcnQodExldmVsUGFpcihuYW1lLCAmc3ltYm9sKSk7Ci0KLSAgICAg
ICAgcmV0dXJuIHJlc3VsdC5zZWNvbmQ7Ci0gICAgfQotCi0gICAgYm9vbCBpbnNlcnQoVFN5bWJv
bCAmc3ltYm9sKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGluc2VydChzeW1ib2wuZ2V0TWFuZ2xl
ZE5hbWUoKSwgc3ltYm9sKTsKLSAgICB9Ci0KLSAgICBUU3ltYm9sKiBmaW5kKGNvbnN0IFRTdHJp
bmcmIG5hbWUpIGNvbnN0Ci0gICAgewotICAgICAgICB0TGV2ZWw6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbGV2ZWwuZmluZChuYW1lKTsKLSAgICAgICAgaWYgKGl0ID09IGxldmVsLmVuZCgpKQotICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiAoKml0
KS5zZWNvbmQ7Ci0gICAgfQotCi0gICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIGxldmVsLmJlZ2luKCk7Ci0gICAgfQotCi0gICAgY29uc3RfaXRl
cmF0b3IgZW5kKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBsZXZlbC5lbmQoKTsKLSAg
ICB9Ci0KLSAgICB2b2lkIHJlbGF0ZVRvT3BlcmF0b3IoY29uc3QgY2hhciogbmFtZSwgVE9wZXJh
dG9yIG9wKTsKLSAgICB2b2lkIHJlbGF0ZVRvRXh0ZW5zaW9uKGNvbnN0IGNoYXIqIG5hbWUsIGNv
bnN0IFRTdHJpbmcmIGV4dCk7Ci0gICAgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNv
bnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgdExldmVsIGxldmVsOwotfTsKLQotY2xhc3MgVFN5bWJv
bFRhYmxlIHsKLXB1YmxpYzoKLSAgICBUU3ltYm9sVGFibGUoKSA6IHVuaXF1ZUlkKDApCi0gICAg
ewotICAgICAgICAvLwotICAgICAgICAvLyBUaGUgc3ltYm9sIHRhYmxlIGNhbm5vdCBiZSB1c2Vk
IHVudGlsIHB1c2goKSBpcyBjYWxsZWQsIGJ1dAotICAgICAgICAvLyB0aGUgbGFjayBvZiBhbiBp
bml0aWFsIGNhbGwgdG8gcHVzaCgpIGNhbiBiZSB1c2VkIHRvIGRldGVjdAotICAgICAgICAvLyB0
aGF0IHRoZSBzeW1ib2wgdGFibGUgaGFzIG5vdCBiZWVuIHByZWxvYWRlZCB3aXRoIGJ1aWx0LWlu
cy4KLSAgICAgICAgLy8KLSAgICB9Ci0gICAgflRTeW1ib2xUYWJsZSgpOwotCi0gICAgLy8KLSAg
ICAvLyBXaGVuIHRoZSBzeW1ib2wgdGFibGUgaXMgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgYnVpbHQt
aW5zLCB0aGVyZSBzaG91bGQKLSAgICAvLyAncHVzaCcgY2FsbHMsIHNvIHRoYXQgYnVpbHQtaW5z
IGFyZSBhdCBsZXZlbCAwIGFuZCB0aGUgc2hhZGVyCi0gICAgLy8gZ2xvYmFscyBhcmUgYXQgbGV2
ZWwgMS4KLSAgICAvLwotICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIHRhYmxlLnNpemUoKSA9
PSAwOyB9Ci0gICAgYm9vbCBhdEJ1aWx0SW5MZXZlbCgpIHsgcmV0dXJuIHRhYmxlLnNpemUoKSA9
PSAxOyB9Ci0gICAgYm9vbCBhdEdsb2JhbExldmVsKCkgeyByZXR1cm4gdGFibGUuc2l6ZSgpIDw9
IDI7IH0KLSAgICB2b2lkIHB1c2goKQotICAgIHsKLSAgICAgICAgdGFibGUucHVzaF9iYWNrKG5l
dyBUU3ltYm9sVGFibGVMZXZlbCk7Ci0gICAgICAgIHByZWNpc2lvblN0YWNrLnB1c2hfYmFjayhu
ZXcgUHJlY2lzaW9uU3RhY2tMZXZlbCk7Ci0gICAgfQotCi0gICAgdm9pZCBwb3AoKQotICAgIHsK
LSAgICAgICAgZGVsZXRlIHRhYmxlLmJhY2soKTsKLSAgICAgICAgdGFibGUucG9wX2JhY2soKTsK
LQotICAgICAgICBkZWxldGUgcHJlY2lzaW9uU3RhY2suYmFjaygpOwotICAgICAgICBwcmVjaXNp
b25TdGFjay5wb3BfYmFjaygpOwotICAgIH0KLQotICAgIGJvb2wgaW5zZXJ0KFRTeW1ib2wmIHN5
bWJvbCkKLSAgICB7Ci0gICAgICAgIHN5bWJvbC5zZXRVbmlxdWVJZCgrK3VuaXF1ZUlkKTsKLSAg
ICAgICAgcmV0dXJuIHRhYmxlW2N1cnJlbnRMZXZlbCgpXS0+aW5zZXJ0KHN5bWJvbCk7Ci0gICAg
fQotCi0gICAgYm9vbCBpbnNlcnRDb25zdEludChjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUp
Ci0gICAgewotICAgICAgICBUVmFyaWFibGUgKmNvbnN0YW50ID0gbmV3IFRWYXJpYWJsZShOZXdQ
b29sVFN0cmluZyhuYW1lKSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0LCAx
KSk7Ci0gICAgICAgIGNvbnN0YW50LT5nZXRDb25zdFBvaW50ZXIoKS0+c2V0SUNvbnN0KHZhbHVl
KTsKLSAgICAgICAgcmV0dXJuIGluc2VydCgqY29uc3RhbnQpOwotICAgIH0KLQotICAgIGJvb2wg
aW5zZXJ0QnVpbHRJbihUVHlwZSAqcnZhbHVlLCBjb25zdCBjaGFyICpuYW1lLCBUVHlwZSAqcHR5
cGUxLCBUVHlwZSAqcHR5cGUyID0gMCwgVFR5cGUgKnB0eXBlMyA9IDApCi0gICAgewotICAgICAg
ICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbihOZXdQb29sVFN0cmluZyhuYW1l
KSwgKnJ2YWx1ZSk7Ci0KLSAgICAgICAgVFBhcmFtZXRlciBwYXJhbTEgPSB7TlVMTCwgcHR5cGUx
fTsKLSAgICAgICAgZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJhbTEpOwotCi0gICAgICAgIGlm
KHB0eXBlMikKLSAgICAgICAgewotICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJhbTIgPSB7TlVM
TCwgcHR5cGUyfTsKLSAgICAgICAgICAgIGZ1bmN0aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW0yKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmKHB0eXBlMykKLSAgICAgICAgewotICAgICAgICAgICAg
VFBhcmFtZXRlciBwYXJhbTMgPSB7TlVMTCwgcHR5cGUzfTsKLSAgICAgICAgICAgIGZ1bmN0aW9u
LT5hZGRQYXJhbWV0ZXIocGFyYW0zKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBpbnNl
cnQoKmZ1bmN0aW9uKTsKLSAgICB9Ci0KLSAgICBUU3ltYm9sKiBmaW5kKGNvbnN0IFRTdHJpbmcm
IG5hbWUsIGJvb2wqIGJ1aWx0SW4gPSAwLCBib29sICpzYW1lU2NvcGUgPSAwKSAKLSAgICB7Ci0g
ICAgICAgIGludCBsZXZlbCA9IGN1cnJlbnRMZXZlbCgpOwotICAgICAgICBUU3ltYm9sKiBzeW1i
b2w7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIHN5bWJvbCA9IHRhYmxlW2xldmVsXS0+Zmlu
ZChuYW1lKTsKLSAgICAgICAgICAgIC0tbGV2ZWw7Ci0gICAgICAgIH0gd2hpbGUgKHN5bWJvbCA9
PSAwICYmIGxldmVsID49IDApOwotICAgICAgICBsZXZlbCsrOwotICAgICAgICBpZiAoYnVpbHRJ
bikKLSAgICAgICAgICAgICpidWlsdEluID0gbGV2ZWwgPT0gMDsKLSAgICAgICAgaWYgKHNhbWVT
Y29wZSkKLSAgICAgICAgICAgICpzYW1lU2NvcGUgPSBsZXZlbCA9PSBjdXJyZW50TGV2ZWwoKTsK
LSAgICAgICAgcmV0dXJuIHN5bWJvbDsKLSAgICB9Ci0KLSAgICBUU3ltYm9sKiBmaW5kQnVpbHRJ
bihjb25zdCBUU3RyaW5nICZuYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRhYmxlWzBdLT5m
aW5kKG5hbWUpOwotICAgIH0KLQotICAgIFRTeW1ib2xUYWJsZUxldmVsKiBnZXRPdXRlckxldmVs
KCkgewotICAgICAgICBhc3NlcnQodGFibGUuc2l6ZSgpID49IDIpOwotICAgICAgICByZXR1cm4g
dGFibGVbY3VycmVudExldmVsKCkgLSAxXTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlbGF0ZVRvT3Bl
cmF0b3IoY29uc3QgY2hhciogbmFtZSwgVE9wZXJhdG9yIG9wKSB7Ci0gICAgICAgIHRhYmxlWzBd
LT5yZWxhdGVUb09wZXJhdG9yKG5hbWUsIG9wKTsKLSAgICB9Ci0gICAgdm9pZCByZWxhdGVUb0V4
dGVuc2lvbihjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBUU3RyaW5nJiBleHQpIHsKLSAgICAgICAg
dGFibGVbMF0tPnJlbGF0ZVRvRXh0ZW5zaW9uKG5hbWUsIGV4dCk7Ci0gICAgfQotICAgIHZvaWQg
ZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdDsKLQotICAgIGJvb2wgc2V0RGVmYXVsdFBy
ZWNpc2lvbihjb25zdCBUUHVibGljVHlwZSYgdHlwZSwgVFByZWNpc2lvbiBwcmVjKSB7Ci0gICAg
ICAgIGlmICghc3VwcG9ydHNQcmVjaXNpb24odHlwZS50eXBlKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgaWYgKHR5cGUuc2l6ZSAhPSAxIHx8IHR5cGUubWF0cml4IHx8IHR5
cGUuYXJyYXkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE5vdCBhbGxvd2VkIHRvIHNl
dCBmb3IgYWdncmVnYXRlIHR5cGVzCi0gICAgICAgIGludCBpbmRleE9mTGFzdEVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxpbnQ+KHByZWNpc2lvblN0YWNrLnNpemUoKSkgLSAxOwotICAgICAgICAoKnBy
ZWNpc2lvblN0YWNrW2luZGV4T2ZMYXN0RWxlbWVudF0pW3R5cGUudHlwZV0gPSBwcmVjOyAvLyBV
c2VzIG1hcCBvcGVyYXRvciBbXSwgb3ZlcndyaXRlcyB0aGUgY3VycmVudCB2YWx1ZQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBTZWFyY2hlcyBkb3duIHRoZSBwcmVjaXNp
b25TdGFjayBmb3IgYSBwcmVjaXNpb24gcXVhbGlmaWVyIGZvciB0aGUgc3BlY2lmaWVkIFRCYXNp
Y1R5cGUKLSAgICBUUHJlY2lzaW9uIGdldERlZmF1bHRQcmVjaXNpb24oVEJhc2ljVHlwZSB0eXBl
KSB7Ci0gICAgICAgIGlmICghc3VwcG9ydHNQcmVjaXNpb24odHlwZSkpCi0gICAgICAgICAgICBy
ZXR1cm4gRWJwVW5kZWZpbmVkOwotICAgICAgICBpbnQgbGV2ZWwgPSBzdGF0aWNfY2FzdDxpbnQ+
KHByZWNpc2lvblN0YWNrLnNpemUoKSkgLSAxOwotICAgICAgICBhc3NlcnQobGV2ZWwgPj0gMCk7
IC8vIEp1c3QgdG8gYmUgc2FmZS4gU2hvdWxkIG5vdCBoYXBwZW4uCi0gICAgICAgIFByZWNpc2lv
blN0YWNrTGV2ZWw6Oml0ZXJhdG9yIGl0OwotICAgICAgICBUUHJlY2lzaW9uIHByZWMgPSBFYnBV
bmRlZmluZWQ7IC8vIElmIHdlIGRvbnQgZmluZCBhbnl0aGluZyB3ZSByZXR1cm4gdGhpcy4gU2hv
dWxkIHdlIGVycm9yIGNoZWNrIHRoaXM/Ci0gICAgICAgIHdoaWxlIChsZXZlbCA+PSAwKSB7Ci0g
ICAgICAgICAgICBpdCA9IHByZWNpc2lvblN0YWNrW2xldmVsXS0+ZmluZCh0eXBlKTsKLSAgICAg
ICAgICAgIGlmIChpdCAhPSBwcmVjaXNpb25TdGFja1tsZXZlbF0tPmVuZCgpKSB7Ci0gICAgICAg
ICAgICAgICAgcHJlYyA9ICgqaXQpLnNlY29uZDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGxldmVsLS07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIHByZWM7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGludCBjdXJyZW50TGV2ZWwoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHRhYmxlLnNpemUoKSkgLSAxOyB9Ci0KLSAgICBi
b29sIHN1cHBvcnRzUHJlY2lzaW9uKFRCYXNpY1R5cGUgdHlwZSkgewotICAgICAgLy8gT25seSBz
dXBwb3J0cyBwcmVjaXNpb24gZm9yIGludCwgZmxvYXQsIGFuZCBzYW1wbGVyIHR5cGVzLgotICAg
ICAgcmV0dXJuIHR5cGUgPT0gRWJ0RmxvYXQgfHwgdHlwZSA9PSBFYnRJbnQgfHwgSXNTYW1wbGVy
KHR5cGUpOwotICAgIH0KLQotICAgIGludCB1bmlxdWVJZDsgICAgIC8vIGZvciB1bmlxdWUgaWRl
bnRpZmljYXRpb24gaW4gY29kZSBnZW5lcmF0aW9uCi0gICAgc3RkOjp2ZWN0b3I8VFN5bWJvbFRh
YmxlTGV2ZWwqPiB0YWJsZTsKLSAgICB0eXBlZGVmIFRNYXA8VEJhc2ljVHlwZSwgVFByZWNpc2lv
bj4gUHJlY2lzaW9uU3RhY2tMZXZlbDsKLSAgICBzdGQ6OnZlY3RvcjxQcmVjaXNpb25TdGFja0xl
dmVsKj4gcHJlY2lzaW9uU3RhY2s7Ci19OwotCi0jZW5kaWYgLy8gX1NZTUJPTF9UQUJMRV9JTkNM
VURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9U
cmFuc2xhdG9yRVNTTC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
VHJhbnNsYXRvckVTU0wuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTAwZjhh
OGVkZTlkNmEwNzc0YTQxZmY2YjZhMDFjNGU3MWQzNjk2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9UcmFuc2xhdG9yRVNTTC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuaCIK
LQotI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEVTU0wuaCIKLQotVHJhbnNsYXRvckVTU0w6OlRy
YW5zbGF0b3JFU1NMKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYykKLSAgICA6
IFRDb21waWxlcih0eXBlLCBzcGVjKSB7Ci19Ci0KLXZvaWQgVHJhbnNsYXRvckVTU0w6OnRyYW5z
bGF0ZShUSW50ZXJtTm9kZSogcm9vdCkgewotICAgIFRJbmZvU2lua0Jhc2UmIHNpbmsgPSBnZXRJ
bmZvU2luaygpLm9iajsKLQotICAgIC8vIFdyaXRlIGJ1aWx0LWluIGV4dGVuc2lvbiBiZWhhdmlv
cnMuCi0gICAgd3JpdGVFeHRlbnNpb25CZWhhdmlvcigpOwotCi0gICAgLy8gV3JpdGUgZW11bGF0
ZWQgYnVpbHQtaW4gZnVuY3Rpb25zIGlmIG5lZWRlZC4KLSAgICBnZXRCdWlsdEluRnVuY3Rpb25F
bXVsYXRvcigpLk91dHB1dEVtdWxhdGVkRnVuY3Rpb25EZWZpbml0aW9uKAotICAgICAgICBzaW5r
LCBnZXRTaGFkZXJUeXBlKCkgPT0gU0hfRlJBR01FTlRfU0hBREVSKTsKLQotICAgIC8vIFdyaXRl
IGFycmF5IGJvdW5kcyBjbGFtcGluZyBlbXVsYXRpb24gaWYgbmVlZGVkLgotICAgIGdldEFycmF5
Qm91bmRzQ2xhbXBlcigpLk91dHB1dENsYW1waW5nRnVuY3Rpb25EZWZpbml0aW9uKHNpbmspOwot
Ci0gICAgLy8gV3JpdGUgdHJhbnNsYXRlZCBzaGFkZXIuCi0gICAgVE91dHB1dEVTU0wgb3V0cHV0
RVNTTChzaW5rLCBnZXRBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSgpLCBnZXRIYXNoRnVuY3Rp
b24oKSwgZ2V0TmFtZU1hcCgpLCBnZXRTeW1ib2xUYWJsZSgpKTsKLSAgICByb290LT50cmF2ZXJz
ZSgmb3V0cHV0RVNTTCk7Ci19Ci0KLXZvaWQgVHJhbnNsYXRvckVTU0w6OndyaXRlRXh0ZW5zaW9u
QmVoYXZpb3IoKSB7Ci0gICAgVEluZm9TaW5rQmFzZSYgc2luayA9IGdldEluZm9TaW5rKCkub2Jq
OwotICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0ZW5zaW9uQmVoYXZpb3IgPSBnZXRF
eHRlbnNpb25CZWhhdmlvcigpOwotICAgIGZvciAoVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9p
dGVyYXRvciBpdGVyID0gZXh0ZW5zaW9uQmVoYXZpb3IuYmVnaW4oKTsKLSAgICAgICAgIGl0ZXIg
IT0gZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCk7ICsraXRlcikgewotICAgICAgICBpZiAoaXRlci0+
c2Vjb25kICE9IEVCaFVuZGVmaW5lZCkgewotICAgICAgICAgICAgc2luayA8PCAiI2V4dGVuc2lv
biAiIDw8IGl0ZXItPmZpcnN0IDw8ICIgOiAiCi0gICAgICAgICAgICAgICAgIDw8IGdldEJlaGF2
aW9yU3RyaW5nKGl0ZXItPnNlY29uZCkgPDwgIlxuIjsKLSAgICAgICAgfQotICAgIH0KLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9y
RVNTTC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JF
U1NMLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExMTk2YmQwMDEzYWNhYzQ0ZDc4
ZDU4NThmZTU4MTdhNmUyN2I1YmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0
b3JFU1NMLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwotCi0jaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JFU1NMX0hfCi0jZGVmaW5lIENPTVBJTEVS
X1RSQU5TTEFUT1JFU1NMX0hfCi0KLSNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgotCi1j
bGFzcyBUcmFuc2xhdG9yRVNTTCA6IHB1YmxpYyBUQ29tcGlsZXIgewotcHVibGljOgotICAgIFRy
YW5zbGF0b3JFU1NMKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYyk7Ci0KLXBy
b3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KTsK
LQotcHJpdmF0ZToKLSAgICB2b2lkIHdyaXRlRXh0ZW5zaW9uQmVoYXZpb3IoKTsKLX07Ci0KLSNl
bmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUkVTU0xfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2E0MzQxZGNkZWE3NzgzNDZmYTM2MjdlMjNhY2E0MTk4
ZjE1Njg5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVk
ZSAiY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuaCIKLQotI2luY2x1ZGUgImNvbXBpbGVyL091dHB1
dEdMU0wuaCIKLSNpbmNsdWRlICJjb21waWxlci9WZXJzaW9uR0xTTC5oIgotCi1zdGF0aWMgdm9p
ZCB3cml0ZVZlcnNpb24oU2hTaGFkZXJUeXBlIHR5cGUsIFRJbnRlcm1Ob2RlKiByb290LAotICAg
ICAgICAgICAgICAgICAgICAgICAgIFRJbmZvU2lua0Jhc2UmIHNpbmspIHsKLSAgICBUVmVyc2lv
bkdMU0wgdmVyc2lvbkdMU0wodHlwZSk7Ci0gICAgcm9vdC0+dHJhdmVyc2UoJnZlcnNpb25HTFNM
KTsKLSAgICBpbnQgdmVyc2lvbiA9IHZlcnNpb25HTFNMLmdldFZlcnNpb24oKTsKLSAgICAvLyBX
ZSBuZWVkIHRvIHdyaXRlIHZlcnNpb24gZGlyZWN0aXZlIG9ubHkgaWYgaXQgaXMgZ3JlYXRlciB0
aGFuIDExMC4KLSAgICAvLyBJZiB0aGVyZSBpcyBubyB2ZXJzaW9uIGRpcmVjdGl2ZSBpbiB0aGUg
c2hhZGVyLCAxMTAgaXMgaW1wbGllZC4KLSAgICBpZiAodmVyc2lvbiA+IDExMCkgewotICAgICAg
ICBzaW5rIDw8ICIjdmVyc2lvbiAiIDw8IHZlcnNpb24gPDwgIlxuIjsKLSAgICB9Ci19Ci0KLVRy
YW5zbGF0b3JHTFNMOjpUcmFuc2xhdG9yR0xTTChTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJT
cGVjIHNwZWMpCi0gICAgOiBUQ29tcGlsZXIodHlwZSwgc3BlYykgewotfQotCi12b2lkIFRyYW5z
bGF0b3JHTFNMOjp0cmFuc2xhdGUoVEludGVybU5vZGUqIHJvb3QpIHsKLSAgICBUSW5mb1NpbmtC
YXNlJiBzaW5rID0gZ2V0SW5mb1NpbmsoKS5vYmo7Ci0KLSAgICAvLyBXcml0ZSBHTFNMIHZlcnNp
b24uCi0gICAgd3JpdGVWZXJzaW9uKGdldFNoYWRlclR5cGUoKSwgcm9vdCwgc2luayk7Ci0KLSAg
ICAvLyBXcml0ZSBlbXVsYXRlZCBidWlsdC1pbiBmdW5jdGlvbnMgaWYgbmVlZGVkLgotICAgIGdl
dEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yKCkuT3V0cHV0RW11bGF0ZWRGdW5jdGlvbkRlZmluaXRp
b24oCi0gICAgICAgIHNpbmssIGZhbHNlKTsKLQotICAgIC8vIFdyaXRlIGFycmF5IGJvdW5kcyBj
bGFtcGluZyBlbXVsYXRpb24gaWYgbmVlZGVkLgotICAgIGdldEFycmF5Qm91bmRzQ2xhbXBlcigp
Lk91dHB1dENsYW1waW5nRnVuY3Rpb25EZWZpbml0aW9uKHNpbmspOwotCi0gICAgLy8gV3JpdGUg
dHJhbnNsYXRlZCBzaGFkZXIuCi0gICAgVE91dHB1dEdMU0wgb3V0cHV0R0xTTChzaW5rLCBnZXRB
cnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSgpLCBnZXRIYXNoRnVuY3Rpb24oKSwgZ2V0TmFtZU1h
cCgpLCBnZXRTeW1ib2xUYWJsZSgpKTsKLSAgICByb290LT50cmF2ZXJzZSgmb3V0cHV0R0xTTCk7
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJh
bnNsYXRvckdMU0wuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFu
c2xhdG9yR0xTTC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmNlMDZkMTkyZjBm
YzYxZGFiZDUzNmQyMDQ5ZmZiOWVkZWYzYTYzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9U
cmFuc2xhdG9yR0xTTC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SR0xTTF9IXwotI2RlZmluZSBD
T01QSUxFUl9UUkFOU0xBVE9SR0xTTF9IXwotCi0jaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5kbGUu
aCIKLQotY2xhc3MgVHJhbnNsYXRvckdMU0wgOiBwdWJsaWMgVENvbXBpbGVyIHsKLXB1YmxpYzoK
LSAgICBUcmFuc2xhdG9yR0xTTChTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMp
OwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShUSW50ZXJtTm9kZSog
cm9vdCk7Ci19OwotCi0jZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JHTFNMX0hfCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhM
U0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JI
TFNMLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc0MDhhMDdjNDk2Zjc2MTRl
MTc2YmU5YjViNjcxNWFhYzU4ZTU0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNs
YXRvckhMU0wuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLy8KLS8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmgiCi0KLSNpbmNsdWRl
ICJjb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCi0jaW5jbHVkZSAiY29tcGlsZXIv
T3V0cHV0SExTTC5oIgotCi1UcmFuc2xhdG9ySExTTDo6VHJhbnNsYXRvckhMU0woU2hTaGFkZXJU
eXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBTaFNoYWRlck91dHB1dCBvdXRwdXQpCi0gICAg
OiBUQ29tcGlsZXIodHlwZSwgc3BlYyksIG1PdXRwdXRUeXBlKG91dHB1dCkKLXsKLX0KLQotdm9p
ZCBUcmFuc2xhdG9ySExTTDo6dHJhbnNsYXRlKFRJbnRlcm1Ob2RlICpyb290KQotewotICAgIFRQ
YXJzZUNvbnRleHQmIHBhcnNlQ29udGV4dCA9ICpHZXRHbG9iYWxQYXJzZUNvbnRleHQoKTsKLSAg
ICBzaDo6T3V0cHV0SExTTCBvdXRwdXRITFNMKHBhcnNlQ29udGV4dCwgZ2V0UmVzb3VyY2VzKCks
IG1PdXRwdXRUeXBlKTsKLQotICAgIG91dHB1dEhMU0wub3V0cHV0KCk7Ci0gICAgbUFjdGl2ZVVu
aWZvcm1zID0gb3V0cHV0SExTTC5nZXRVbmlmb3JtcygpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggOTU1MGUxNWU4ZWY3NTIzOTJjMWIwMWJkNmIxZmRiYzQ0NjA5
ZDNiOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuaAorKysgL2Rl
di9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09N
UElMRVJfVFJBTlNMQVRPUkhMU0xfSF8KLSNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUkhMU0xf
SF8KLQotI2luY2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIv
VW5pZm9ybS5oIgotCi1jbGFzcyBUcmFuc2xhdG9ySExTTCA6IHB1YmxpYyBUQ29tcGlsZXIgewot
cHVibGljOgotICAgIFRyYW5zbGF0b3JITFNMKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNw
ZWMgc3BlYywgU2hTaGFkZXJPdXRwdXQgb3V0cHV0KTsKLQotICAgIHZpcnR1YWwgVHJhbnNsYXRv
ckhMU0wgKmdldEFzVHJhbnNsYXRvckhMU0woKSB7IHJldHVybiB0aGlzOyB9Ci0gICAgY29uc3Qg
c2g6OkFjdGl2ZVVuaWZvcm1zICZnZXRVbmlmb3JtcygpIHsgcmV0dXJuIG1BY3RpdmVVbmlmb3Jt
czsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShUSW50ZXJtTm9k
ZSogcm9vdCk7Ci0KLSAgICBzaDo6QWN0aXZlVW5pZm9ybXMgbUFjdGl2ZVVuaWZvcm1zOwotICAg
IFNoU2hhZGVyT3V0cHV0IG1PdXRwdXRUeXBlOwotfTsKLQotI2VuZGlmICAvLyBDT01QSUxFUl9U
UkFOU0xBVE9SSExTTF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1R5cGVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
VHlwZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzU1NjBkZGM2ZWZhNzQwYmU2
MWFhMjM0MWY2MDE4M2NkY2FmMDc2OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHlwZXMu
aAorKysgL2Rldi9udWxsCkBAIC0xLDMwNyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0j
aWZuZGVmIF9UWVBFU19JTkNMVURFRAotI2RlZmluZSBfVFlQRVNfSU5DTFVERUQKLQotI2luY2x1
ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0KLSNpbmNsdWRlICJjb21waWxlci9CYXNlVHlwZXMu
aCIKLSNpbmNsdWRlICJjb21waWxlci9Db21tb24uaCIKLSNpbmNsdWRlICJjb21waWxlci9kZWJ1
Zy5oIgotCi1zdHJ1Y3QgVFB1YmxpY1R5cGU7Ci1jbGFzcyBUVHlwZTsKLQotY2xhc3MgVEZpZWxk
Ci17Ci1wdWJsaWM6Ci0gICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSgpOwotICAgIFRGaWVs
ZChUVHlwZSogdHlwZSwgVFN0cmluZyogbmFtZSkgOiBtVHlwZSh0eXBlKSwgbU5hbWUobmFtZSkg
e30KLQotICAgIC8vIFRPRE8oYWxva3ApOiBXZSBzaG91bGQgb25seSByZXR1cm4gY29uc3QgdHlw
ZS4KLSAgICAvLyBGaXggaXQgYnkgdHdlYWtpbmcgZ3JhbW1hci4KLSAgICBUVHlwZSogdHlwZSgp
IHsgcmV0dXJuIG1UeXBlOyB9Ci0gICAgY29uc3QgVFR5cGUqIHR5cGUoKSBjb25zdCB7IHJldHVy
biBtVHlwZTsgfQotCi0gICAgY29uc3QgVFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuICpt
TmFtZTsgfQotCi1wcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihURmllbGQp
OwotICAgIFRUeXBlKiBtVHlwZTsKLSAgICBUU3RyaW5nKiBtTmFtZTsKLX07Ci0KLXR5cGVkZWYg
VFZlY3RvcjxURmllbGQqPiBURmllbGRMaXN0OwotaW5saW5lIFRGaWVsZExpc3QqIE5ld1Bvb2xU
RmllbGRMaXN0KCkKLXsKLSAgICB2b2lkKiBtZW1vcnkgPSBHZXRHbG9iYWxQb29sQWxsb2NhdG9y
KCktPmFsbG9jYXRlKHNpemVvZihURmllbGRMaXN0KSk7Ci0gICAgcmV0dXJuIG5ldyhtZW1vcnkp
IFRGaWVsZExpc3Q7Ci19Ci0KLWNsYXNzIFRTdHJ1Y3R1cmUKLXsKLXB1YmxpYzoKLSAgICBQT09M
X0FMTE9DQVRPUl9ORVdfREVMRVRFKCk7Ci0gICAgVFN0cnVjdHVyZShUU3RyaW5nKiBuYW1lLCBU
RmllbGRMaXN0KiBmaWVsZHMpCi0gICAgICAgIDogbU5hbWUobmFtZSksCi0gICAgICAgICAgbUZp
ZWxkcyhmaWVsZHMpLAotICAgICAgICAgIG1PYmplY3RTaXplKDApLAotICAgICAgICAgIG1EZWVw
ZXN0TmVzdGluZygwKSB7Ci0gICAgfQotCi0gICAgY29uc3QgVFN0cmluZyYgbmFtZSgpIGNvbnN0
IHsgcmV0dXJuICptTmFtZTsgfQotICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcygpIGNvbnN0
IHsgcmV0dXJuICptRmllbGRzOyB9Ci0KLSAgICBjb25zdCBUU3RyaW5nJiBtYW5nbGVkTmFtZSgp
IGNvbnN0IHsKLSAgICAgICAgaWYgKG1NYW5nbGVkTmFtZS5lbXB0eSgpKQotICAgICAgICAgICAg
bU1hbmdsZWROYW1lID0gYnVpbGRNYW5nbGVkTmFtZSgpOwotICAgICAgICByZXR1cm4gbU1hbmds
ZWROYW1lOwotICAgIH0KLSAgICBzaXplX3Qgb2JqZWN0U2l6ZSgpIGNvbnN0IHsKLSAgICAgICAg
aWYgKG1PYmplY3RTaXplID09IDApCi0gICAgICAgICAgICBtT2JqZWN0U2l6ZSA9IGNhbGN1bGF0
ZU9iamVjdFNpemUoKTsKLSAgICAgICAgcmV0dXJuIG1PYmplY3RTaXplOwotICAgIH07Ci0gICAg
aW50IGRlZXBlc3ROZXN0aW5nKCkgY29uc3QgewotICAgICAgICBpZiAobURlZXBlc3ROZXN0aW5n
ID09IDApCi0gICAgICAgICAgICBtRGVlcGVzdE5lc3RpbmcgPSBjYWxjdWxhdGVEZWVwZXN0TmVz
dGluZygpOwotICAgICAgICByZXR1cm4gbURlZXBlc3ROZXN0aW5nOwotICAgIH0KLSAgICBib29s
IGNvbnRhaW5zQXJyYXlzKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKFRTdHJ1Y3R1cmUpOwotICAgIFRTdHJpbmcgYnVpbGRNYW5nbGVkTmFtZSgpIGNv
bnN0OwotICAgIHNpemVfdCBjYWxjdWxhdGVPYmplY3RTaXplKCkgY29uc3Q7Ci0gICAgaW50IGNh
bGN1bGF0ZURlZXBlc3ROZXN0aW5nKCkgY29uc3Q7Ci0KLSAgICBUU3RyaW5nKiBtTmFtZTsKLSAg
ICBURmllbGRMaXN0KiBtRmllbGRzOwotCi0gICAgbXV0YWJsZSBUU3RyaW5nIG1NYW5nbGVkTmFt
ZTsKLSAgICBtdXRhYmxlIHNpemVfdCBtT2JqZWN0U2l6ZTsKLSAgICBtdXRhYmxlIGludCBtRGVl
cGVzdE5lc3Rpbmc7Ci19OwotCi0vLwotLy8gQmFzZSBjbGFzcyBmb3IgdGhpbmdzIHRoYXQgaGF2
ZSBhIHR5cGUuCi0vLwotY2xhc3MgVFR5cGUKLXsKLXB1YmxpYzoKLSAgICBQT09MX0FMTE9DQVRP
Ul9ORVdfREVMRVRFKCk7Ci0gICAgVFR5cGUoKSB7fQotICAgIFRUeXBlKFRCYXNpY1R5cGUgdCwg
VFByZWNpc2lvbiBwLCBUUXVhbGlmaWVyIHEgPSBFdnFUZW1wb3JhcnksIHVuc2lnbmVkIGNoYXIg
cyA9IDEsIGJvb2wgbSA9IGZhbHNlLCBib29sIGEgPSBmYWxzZSkgOgotICAgICAgICAgICAgdHlw
ZSh0KSwgcHJlY2lzaW9uKHApLCBxdWFsaWZpZXIocSksIHNpemUocyksIG1hdHJpeChtKSwgYXJy
YXkoYSksIGFycmF5U2l6ZSgwKSwgc3RydWN0dXJlKDApCi0gICAgewotICAgIH0KLSAgICBleHBs
aWNpdCBUVHlwZShjb25zdCBUUHVibGljVHlwZSAmcCk7Ci0gICAgVFR5cGUoVFN0cnVjdHVyZSog
dXNlckRlZiwgVFByZWNpc2lvbiBwID0gRWJwVW5kZWZpbmVkKSA6Ci0gICAgICAgICAgICB0eXBl
KEVidFN0cnVjdCksIHByZWNpc2lvbihwKSwgcXVhbGlmaWVyKEV2cVRlbXBvcmFyeSksIHNpemUo
MSksIG1hdHJpeChmYWxzZSksIGFycmF5KGZhbHNlKSwgYXJyYXlTaXplKDApLCBzdHJ1Y3R1cmUo
dXNlckRlZikKLSAgICB7Ci0gICAgfQotCi0gICAgVEJhc2ljVHlwZSBnZXRCYXNpY1R5cGUoKSBj
b25zdCB7IHJldHVybiB0eXBlOyB9Ci0gICAgdm9pZCBzZXRCYXNpY1R5cGUoVEJhc2ljVHlwZSB0
KSB7IHR5cGUgPSB0OyB9Ci0KLSAgICBUUHJlY2lzaW9uIGdldFByZWNpc2lvbigpIGNvbnN0IHsg
cmV0dXJuIHByZWNpc2lvbjsgfQotICAgIHZvaWQgc2V0UHJlY2lzaW9uKFRQcmVjaXNpb24gcCkg
eyBwcmVjaXNpb24gPSBwOyB9Ci0KLSAgICBUUXVhbGlmaWVyIGdldFF1YWxpZmllcigpIGNvbnN0
IHsgcmV0dXJuIHF1YWxpZmllcjsgfQotICAgIHZvaWQgc2V0UXVhbGlmaWVyKFRRdWFsaWZpZXIg
cSkgeyBxdWFsaWZpZXIgPSBxOyB9Ci0KLSAgICAvLyBPbmUtZGltZW5zaW9uYWwgc2l6ZSBvZiBz
aW5nbGUgaW5zdGFuY2UgdHlwZQotICAgIGludCBnZXROb21pbmFsU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIHNpemU7IH0KLSAgICB2b2lkIHNldE5vbWluYWxTaXplKHVuc2lnbmVkIGNoYXIgcykgeyBz
aXplID0gczsgfQotICAgIC8vIEZ1bGwgc2l6ZSBvZiBzaW5nbGUgaW5zdGFuY2Ugb2YgdHlwZQot
ICAgIHNpemVfdCBnZXRPYmplY3RTaXplKCkgY29uc3Q7Ci0KLSAgICBpbnQgZWxlbWVudFJlZ2lz
dGVyQ291bnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKHN0cnVjdHVyZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gZ2V0U3RydWN0KCktPmZp
ZWxkcygpOwotICAgICAgICAgICAgaW50IHJlZ2lzdGVyQ291bnQgPSAwOwotCi0gICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICByZWdpc3RlckNvdW50ICs9IGZpZWxkc1tpXS0+dHlwZSgpLT50
b3RhbFJlZ2lzdGVyQ291bnQoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJu
IHJlZ2lzdGVyQ291bnQ7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaXNNYXRyaXgoKSkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdldE5vbWluYWxTaXplKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGludCB0b3RhbFJlZ2lzdGVyQ291bnQoKSBjb25zdAotICAgIHsK
LSAgICAgICAgaWYgKGFycmF5KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXlT
aXplICogZWxlbWVudFJlZ2lzdGVyQ291bnQoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlbGVtZW50UmVnaXN0ZXJDb3VudCgpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgYm9vbCBpc01hdHJpeCgpIGNvbnN0IHsgcmV0dXJuIG1hdHJp
eCA/IHRydWUgOiBmYWxzZTsgfQotICAgIHZvaWQgc2V0TWF0cml4KGJvb2wgbSkgeyBtYXRyaXgg
PSBtOyB9Ci0KLSAgICBib29sIGlzQXJyYXkoKSBjb25zdCAgeyByZXR1cm4gYXJyYXkgPyB0cnVl
IDogZmFsc2U7IH0KLSAgICBpbnQgZ2V0QXJyYXlTaXplKCkgY29uc3QgeyByZXR1cm4gYXJyYXlT
aXplOyB9Ci0gICAgdm9pZCBzZXRBcnJheVNpemUoaW50IHMpIHsgYXJyYXkgPSB0cnVlOyBhcnJh
eVNpemUgPSBzOyB9Ci0gICAgdm9pZCBjbGVhckFycmF5bmVzcygpIHsgYXJyYXkgPSBmYWxzZTsg
YXJyYXlTaXplID0gMDsgfQotCi0gICAgYm9vbCBpc1ZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIHNp
emUgPiAxICYmICFtYXRyaXg7IH0KLSAgICBib29sIGlzU2NhbGFyKCkgY29uc3QgeyByZXR1cm4g
c2l6ZSA9PSAxICYmICFtYXRyaXggJiYgIXN0cnVjdHVyZTsgfQotCi0gICAgVFN0cnVjdHVyZSog
Z2V0U3RydWN0KCkgY29uc3QgeyByZXR1cm4gc3RydWN0dXJlOyB9Ci0gICAgdm9pZCBzZXRTdHJ1
Y3QoVFN0cnVjdHVyZSogcykgeyBzdHJ1Y3R1cmUgPSBzOyB9Ci0KLSAgICBjb25zdCBUU3RyaW5n
JiBnZXRNYW5nbGVkTmFtZSgpIGNvbnN0IHsKLSAgICAgICAgaWYgKG1hbmdsZWQuZW1wdHkoKSkg
ewotICAgICAgICAgICAgbWFuZ2xlZCA9IGJ1aWxkTWFuZ2xlZE5hbWUoKTsKLSAgICAgICAgICAg
IG1hbmdsZWQgKz0gJzsnOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtYW5nbGVkOwotICAg
IH0KLQotICAgIGJvb2wgc2FtZUVsZW1lbnRUeXBlKGNvbnN0IFRUeXBlJiByaWdodCkgY29uc3Qg
ewotICAgICAgICByZXR1cm4gICAgICB0eXBlID09IHJpZ2h0LnR5cGUgICAmJgotICAgICAgICAg
ICAgICAgICAgICBzaXplID09IHJpZ2h0LnNpemUgICAmJgotICAgICAgICAgICAgICAgICAgbWF0
cml4ID09IHJpZ2h0Lm1hdHJpeCAmJgotICAgICAgICAgICAgICAgc3RydWN0dXJlID09IHJpZ2h0
LnN0cnVjdHVyZTsKLSAgICB9Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRUeXBlJiByaWdo
dCkgY29uc3QgewotICAgICAgICByZXR1cm4gICAgICB0eXBlID09IHJpZ2h0LnR5cGUgICAmJgot
ICAgICAgICAgICAgICAgICAgICBzaXplID09IHJpZ2h0LnNpemUgICAmJgotICAgICAgICAgICAg
ICAgICAgbWF0cml4ID09IHJpZ2h0Lm1hdHJpeCAmJgotICAgICAgICAgICAgICAgICAgIGFycmF5
ID09IHJpZ2h0LmFycmF5ICAmJiAoIWFycmF5IHx8IGFycmF5U2l6ZSA9PSByaWdodC5hcnJheVNp
emUpICYmCi0gICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPT0gcmlnaHQuc3RydWN0dXJlOwotICAg
ICAgICAvLyBkb24ndCBjaGVjayB0aGUgcXVhbGlmaWVyLCBpdCdzIG5vdCBldmVyIHdoYXQncyBi
ZWluZyBzb3VnaHQgYWZ0ZXIKLSAgICB9Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRUeXBl
JiByaWdodCkgY29uc3QgewotICAgICAgICByZXR1cm4gIW9wZXJhdG9yPT0ocmlnaHQpOwotICAg
IH0KLSAgICBib29sIG9wZXJhdG9yPChjb25zdCBUVHlwZSYgcmlnaHQpIGNvbnN0IHsKLSAgICAg
ICAgaWYgKHR5cGUgIT0gcmlnaHQudHlwZSkgcmV0dXJuIHR5cGUgPCByaWdodC50eXBlOwotICAg
ICAgICBpZiAoc2l6ZSAhPSByaWdodC5zaXplKSByZXR1cm4gc2l6ZSA8IHJpZ2h0LnNpemU7Ci0g
ICAgICAgIGlmIChtYXRyaXggIT0gcmlnaHQubWF0cml4KSByZXR1cm4gbWF0cml4IDwgcmlnaHQu
bWF0cml4OwotICAgICAgICBpZiAoYXJyYXkgIT0gcmlnaHQuYXJyYXkpIHJldHVybiBhcnJheSA8
IHJpZ2h0LmFycmF5OwotICAgICAgICBpZiAoYXJyYXlTaXplICE9IHJpZ2h0LmFycmF5U2l6ZSkg
cmV0dXJuIGFycmF5U2l6ZSA8IHJpZ2h0LmFycmF5U2l6ZTsKLSAgICAgICAgaWYgKHN0cnVjdHVy
ZSAhPSByaWdodC5zdHJ1Y3R1cmUpIHJldHVybiBzdHJ1Y3R1cmUgPCByaWdodC5zdHJ1Y3R1cmU7
Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGNvbnN0IGNoYXIqIGdldEJh
c2ljU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gOjpnZXRCYXNpY1N0cmluZyh0eXBlKTsgfQotICAg
IGNvbnN0IGNoYXIqIGdldFByZWNpc2lvblN0cmluZygpIGNvbnN0IHsgcmV0dXJuIDo6Z2V0UHJl
Y2lzaW9uU3RyaW5nKHByZWNpc2lvbik7IH0KLSAgICBjb25zdCBjaGFyKiBnZXRRdWFsaWZpZXJT
dHJpbmcoKSBjb25zdCB7IHJldHVybiA6OmdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpOyB9
Ci0gICAgVFN0cmluZyBnZXRDb21wbGV0ZVN0cmluZygpIGNvbnN0OwotCi0gICAgLy8gSWYgdGhp
cyB0eXBlIGlzIGEgc3RydWN0LCByZXR1cm5zIHRoZSBkZWVwZXN0IHN0cnVjdCBuZXN0aW5nIG9m
Ci0gICAgLy8gYW55IGZpZWxkIGluIHRoZSBzdHJ1Y3QuIEZvciBleGFtcGxlOgotICAgIC8vICAg
c3RydWN0IG5lc3RpbmcxIHsKLSAgICAvLyAgICAgdmVjNCBwb3NpdGlvbjsKLSAgICAvLyAgIH07
Ci0gICAgLy8gICBzdHJ1Y3QgbmVzdGluZzIgewotICAgIC8vICAgICBuZXN0aW5nMSBmaWVsZDE7
Ci0gICAgLy8gICAgIHZlYzQgZmllbGQyOwotICAgIC8vICAgfTsKLSAgICAvLyBGb3IgdHlwZSAi
bmVzdGluZzIiLCB0aGlzIG1ldGhvZCB3b3VsZCByZXR1cm4gMiAtLSB0aGUgbnVtYmVyCi0gICAg
Ly8gb2Ygc3RydWN0dXJlcyB0aHJvdWdoIHdoaWNoIGluZGlyZWN0aW9uIG11c3Qgb2NjdXIgdG8g
cmVhY2ggdGhlCi0gICAgLy8gZGVlcGVzdCBmaWVsZCAobmVzdGluZzIuZmllbGQxLnBvc2l0aW9u
KS4KLSAgICBpbnQgZ2V0RGVlcGVzdFN0cnVjdE5lc3RpbmcoKSBjb25zdCB7Ci0gICAgICAgIHJl
dHVybiBzdHJ1Y3R1cmUgPyBzdHJ1Y3R1cmUtPmRlZXBlc3ROZXN0aW5nKCkgOiAwOwotICAgIH0K
LQotICAgIGJvb2wgaXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlzKCkgY29uc3QgewotICAgICAg
ICByZXR1cm4gc3RydWN0dXJlID8gc3RydWN0dXJlLT5jb250YWluc0FycmF5cygpIDogZmFsc2U7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFRTdHJpbmcgYnVpbGRNYW5nbGVkTmFtZSgpIGNvbnN0
OwotCi0gICAgVEJhc2ljVHlwZSB0eXBlOwotICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOwotICAg
IFRRdWFsaWZpZXIgcXVhbGlmaWVyOwotICAgIHVuc2lnbmVkIGNoYXIgc2l6ZTsKLSAgICBib29s
IG1hdHJpeDsKLSAgICBib29sIGFycmF5OwotICAgIGludCBhcnJheVNpemU7Ci0KLSAgICBUU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmU7ICAgICAgLy8gMCB1bmxlc3MgdGhpcyBpcyBhIHN0cnVjdAotCi0g
ICAgbXV0YWJsZSBUU3RyaW5nIG1hbmdsZWQ7Ci19OwotCi0vLwotLy8gVGhpcyBpcyBhIHdvcmth
cm91bmQgZm9yIGEgcHJvYmxlbSB3aXRoIHRoZSB5YWNjIHN0YWNrLCAgSXQgY2FuJ3QgaGF2ZQot
Ly8gdHlwZXMgdGhhdCBpdCB0aGlua3MgaGF2ZSBub24tdHJpdmlhbCBjb25zdHJ1Y3RvcnMuICBJ
dCBzaG91bGQKLS8vIGp1c3QgYmUgdXNlZCB3aGlsZSByZWNvZ25pemluZyB0aGUgZ3JhbW1hciwg
bm90IGFueXRoaW5nIGVsc2UuICBQb2ludGVycwotLy8gY291bGQgYmUgdXNlZCwgYnV0IGFsc28g
dHJ5aW5nIHRvIGF2b2lkIGxvdHMgb2YgbWVtb3J5IG1hbmFnZW1lbnQgb3ZlcmhlYWQuCi0vLwot
Ly8gTm90IGFzIGJhZCBhcyBpdCBsb29rcywgdGhlcmUgaXMgbm8gYWN0dWFsIGFzc3VtcHRpb24g
dGhhdCB0aGUgZmllbGRzCi0vLyBtYXRjaCB1cCBvciBhcmUgbmFtZSB0aGUgc2FtZSBvciBhbnl0
aGluZyBsaWtlIHRoYXQuCi0vLwotc3RydWN0IFRQdWJsaWNUeXBlCi17Ci0gICAgVEJhc2ljVHlw
ZSB0eXBlOwotICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyOwotICAgIFRQcmVjaXNpb24gcHJlY2lz
aW9uOwotICAgIHVuc2lnbmVkIGNoYXIgc2l6ZTsgICAgICAgICAgLy8gc2l6ZSBvZiB2ZWN0b3Ig
b3IgbWF0cml4LCBub3Qgc2l6ZSBvZiBhcnJheQotICAgIGJvb2wgbWF0cml4OwotICAgIGJvb2wg
YXJyYXk7Ci0gICAgaW50IGFycmF5U2l6ZTsKLSAgICBUVHlwZSogdXNlckRlZjsKLSAgICBUU291
cmNlTG9jIGxpbmU7Ci0KLSAgICB2b2lkIHNldEJhc2ljKFRCYXNpY1R5cGUgYnQsIFRRdWFsaWZp
ZXIgcSwgY29uc3QgVFNvdXJjZUxvYyYgbG4pCi0gICAgewotICAgICAgICB0eXBlID0gYnQ7Ci0g
ICAgICAgIHF1YWxpZmllciA9IHE7Ci0gICAgICAgIHByZWNpc2lvbiA9IEVicFVuZGVmaW5lZDsK
LSAgICAgICAgc2l6ZSA9IDE7Ci0gICAgICAgIG1hdHJpeCA9IGZhbHNlOwotICAgICAgICBhcnJh
eSA9IGZhbHNlOwotICAgICAgICBhcnJheVNpemUgPSAwOwotICAgICAgICB1c2VyRGVmID0gMDsK
LSAgICAgICAgbGluZSA9IGxuOwotICAgIH0KLQotICAgIHZvaWQgc2V0QWdncmVnYXRlKHVuc2ln
bmVkIGNoYXIgcywgYm9vbCBtID0gZmFsc2UpCi0gICAgewotICAgICAgICBzaXplID0gczsKLSAg
ICAgICAgbWF0cml4ID0gbTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEFycmF5KGJvb2wgYSwgaW50
IHMgPSAwKQotICAgIHsKLSAgICAgICAgYXJyYXkgPSBhOwotICAgICAgICBhcnJheVNpemUgPSBz
OwotICAgIH0KLQotICAgIGJvb2wgaXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlzKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIGlmICghdXNlckRlZikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHVzZXJEZWYtPmlzU3RydWN0
dXJlQ29udGFpbmluZ0FycmF5cygpOwotICAgIH0KLX07Ci0KLSNlbmRpZiAvLyBfVFlQRVNfSU5D
TFVERURfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
VW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA1Y2ZkZDMyMzBlNDg3NTY1ZDNiZWQ2NTZlYjcxOTE4NjlkNzBlY2FmLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MTg0ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0vLyBVbmZvbGRTaG9ydENpcmN1aXQgaXMg
YW4gQVNUIHRyYXZlcnNlciB0byBvdXRwdXQgc2hvcnQtY2lyY3VpdGluZyBvcGVyYXRvcnMgYXMg
aWYtZWxzZSBzdGF0ZW1lbnRzLgotLy8gVGhlIHJlc3VsdHMgYXJlIGFzc2lnbmVkIHRvIHMjIHRl
bXBvcmFyaWVzLCB3aGljaCBhcmUgdXNlZCBieSB0aGUgbWFpbiB0cmFuc2xhdG9yIGluc3RlYWQg
b2YKLS8vIHRoZSBvcmlnaW5hbCBleHByZXNzaW9uLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVy
L1VuZm9sZFNob3J0Q2lyY3VpdC5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIK
LSNpbmNsdWRlICJjb21waWxlci9PdXRwdXRITFNMLmgiCi0KLW5hbWVzcGFjZSBzaAotewotVW5m
b2xkU2hvcnRDaXJjdWl0OjpVbmZvbGRTaG9ydENpcmN1aXQoVFBhcnNlQ29udGV4dCAmY29udGV4
dCwgT3V0cHV0SExTTCAqb3V0cHV0SExTTCkgOiBtQ29udGV4dChjb250ZXh0KSwgbU91dHB1dEhM
U0wob3V0cHV0SExTTCkKLXsKLSAgICBtVGVtcG9yYXJ5SW5kZXggPSAwOwotfQotCi12b2lkIFVu
Zm9sZFNob3J0Q2lyY3VpdDo6dHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpCi17Ci0gICAgaW50
IHJld2luZEluZGV4ID0gbVRlbXBvcmFyeUluZGV4OwotICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMp
OwotICAgIG1UZW1wb3JhcnlJbmRleCA9IHJld2luZEluZGV4OwotfQotCi1ib29sIFVuZm9sZFNo
b3J0Q2lyY3VpdDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUp
Ci17Ci0gICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbU91dHB1dEhMU0wtPmdldEJvZHlTdHJlYW0o
KTsKLQotICAgIC8vIElmIG91ciByaWdodCBub2RlIGRvZXNuJ3QgaGF2ZSBzaWRlIGVmZmVjdHMs
IHdlIGtub3cgd2UgZG9uJ3QgbmVlZCB0byB1bmZvbGQgdGhpcwotICAgIC8vIGV4cHJlc3Npb246
IHRoZXJlIHdpbGwgYmUgbm8gc2hvcnQtY2lyY3VpdGluZyBzaWRlIGVmZmVjdHMgdG8gYXZvaWQK
LSAgICAvLyAobm90ZTogdW5mb2xkaW5nIGRvZXNuJ3QgZGVwZW5kIG9uIHRoZSBsZWZ0IG5vZGUg
LS0gaXQgd2lsbCBhbHdheXMgYmUgZXZhbHVhdGVkKQotICAgIGlmICghbm9kZS0+Z2V0UmlnaHQo
KS0+aGFzU2lkZUVmZmVjdHMoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKLSAgICB7Ci0gICAgICBjYXNlIEVPcExvZ2lj
YWxPcjoKLSAgICAgICAgLy8gInggfHwgeSIgaXMgZXF1aXZhbGVudCB0byAieCA/IHRydWUgOiB5
Iiwgd2hpY2ggdW5mb2xkcyB0byAiYm9vbCBzOyBpZih4KSBzID0gdHJ1ZTsgZWxzZSBzID0geTsi
LAotICAgICAgICAvLyBhbmQgdGhlbiBmdXJ0aGVyIHNpbXBsaWZpZXMgZG93biB0byAiYm9vbCBz
ID0geDsgaWYoIXMpIHMgPSB5OyIuCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBpID0gbVRl
bXBvcmFyeUluZGV4OwotCi0gICAgICAgICAgICBvdXQgPDwgImJvb2wgcyIgPDwgaSA8PCAiO1xu
IjsKLQotICAgICAgICAgICAgb3V0IDw8ICJ7XG4iOwotCi0gICAgICAgICAgICBtVGVtcG9yYXJ5
SW5kZXggPSBpICsgMTsKLSAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhp
cyk7Ci0gICAgICAgICAgICBvdXQgPDwgInMiIDw8IGkgPDwgIiA9ICI7Ci0gICAgICAgICAgICBt
VGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJh
dmVyc2UobU91dHB1dEhMU0wpOwotICAgICAgICAgICAgb3V0IDw8ICI7XG4iOwotICAgICAgICAg
ICAgb3V0IDw8ICJpZiAoIXMiIDw8IGkgPDwgIilcbiIKLSAgICAgICAgICAgICAgICAgICAie1xu
IjsKLSAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAgICAgICAgbm9k
ZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICBvdXQgPDwgIiAgICBz
IiA8PCBpIDw8ICIgPSAiOwotICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0g
ICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Ci0gICAg
ICAgICAgICBvdXQgPDwgIjtcbiIKLSAgICAgICAgICAgICAgICAgICAifVxuIjsKLQotICAgICAg
ICAgICAgb3V0IDw8ICJ9XG4iOwotCi0gICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsg
MTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBjYXNlIEVPcExvZ2lj
YWxBbmQ6Ci0gICAgICAgIC8vICJ4ICYmIHkiIGlzIGVxdWl2YWxlbnQgdG8gInggPyB5IDogZmFs
c2UiLCB3aGljaCB1bmZvbGRzIHRvICJib29sIHM7IGlmKHgpIHMgPSB5OyBlbHNlIHMgPSBmYWxz
ZTsiLAotICAgICAgICAvLyBhbmQgdGhlbiBmdXJ0aGVyIHNpbXBsaWZpZXMgZG93biB0byAiYm9v
bCBzID0geDsgaWYocykgcyA9IHk7Ii4KLSAgICAgICAgewotICAgICAgICAgICAgaW50IGkgPSBt
VGVtcG9yYXJ5SW5kZXg7Ci0KLSAgICAgICAgICAgIG91dCA8PCAiYm9vbCBzIiA8PCBpIDw8ICI7
XG4iOwotCi0gICAgICAgICAgICBvdXQgPDwgIntcbiI7Ci0KLSAgICAgICAgICAgIG1UZW1wb3Jh
cnlJbmRleCA9IGkgKyAxOwotICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJzZSh0
aGlzKTsKLSAgICAgICAgICAgIG91dCA8PCAicyIgPDwgaSA8PCAiID0gIjsKLSAgICAgICAgICAg
IG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50
cmF2ZXJzZShtT3V0cHV0SExTTCk7Ci0gICAgICAgICAgICBvdXQgPDwgIjtcbiI7Ci0gICAgICAg
ICAgICBvdXQgPDwgImlmIChzIiA8PCBpIDw8ICIpXG4iCi0gICAgICAgICAgICAgICAgICAgIntc
biI7Ci0gICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAgICAgICAgIG5v
ZGUtPmdldFJpZ2h0KCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAgICAgb3V0IDw8ICIgICAg
cyIgPDwgaSA8PCAiID0gIjsKLSAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwot
ICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOwotICAg
ICAgICAgICAgb3V0IDw8ICI7XG4iCi0gICAgICAgICAgICAgICAgICAgIn1cbiI7Ci0KLSAgICAg
ICAgICAgIG91dCA8PCAifVxuIjsKLQotICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSAr
IDE7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfQotCi1ib29sIFVuZm9sZFNob3J0Q2lyY3VpdDo6
dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpCi17Ci0g
ICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbU91dHB1dEhMU0wtPmdldEJvZHlTdHJlYW0oKTsKLQot
ICAgIC8vIFVuZm9sZCAiYiA/IHggOiB5IiBpbnRvICJ0eXBlIHM7IGlmKGIpIHMgPSB4OyBlbHNl
IHMgPSB5OyIKLSAgICBpZiAobm9kZS0+dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQotICAgIHsKLSAg
ICAgICAgaW50IGkgPSBtVGVtcG9yYXJ5SW5kZXg7Ci0KLSAgICAgICAgb3V0IDw8IG1PdXRwdXRI
TFNMLT50eXBlU3RyaW5nKG5vZGUtPmdldFR5cGUoKSkgPDwgIiBzIiA8PCBpIDw8ICI7XG4iOwot
Ci0gICAgICAgIG91dCA8PCAie1xuIjsKLQotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsg
MTsKLSAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAg
ICBvdXQgPDwgImlmICgiOwotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAg
ICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKLSAgICAgICAg
b3V0IDw8ICIpXG4iCi0gICAgICAgICAgICAgICAie1xuIjsKLSAgICAgICAgbVRlbXBvcmFyeUlu
ZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldFRydWVCbG9jaygpLT50cmF2ZXJzZSh0aGlz
KTsKLSAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8PCAiID0gIjsKLSAgICAgICAgbVRlbXBv
cmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldFRydWVCbG9jaygpLT50cmF2ZXJz
ZShtT3V0cHV0SExTTCk7Ci0gICAgICAgIG91dCA8PCAiO1xuIgotICAgICAgICAgICAgICAgIn1c
biIKLSAgICAgICAgICAgICAgICJlbHNlXG4iCi0gICAgICAgICAgICAgICAie1xuIjsKLSAgICAg
ICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldEZhbHNlQmxvY2so
KS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIG91dCA8PCAiICAgIHMiIDw8IGkgPDwgIiA9ICI7
Ci0gICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAgICBub2RlLT5nZXRGYWxz
ZUJsb2NrKCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKLSAgICAgICAgb3V0IDw8ICI7XG4iCi0g
ICAgICAgICAgICAgICAifVxuIjsKLQotICAgICAgICBvdXQgPDwgIn1cbiI7Ci0KLSAgICAgICAg
bVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1ib29sIFVuZm9sZFNob3J0Q2lyY3VpdDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJt
TG9vcCAqbm9kZSkKLXsKLSAgICBpbnQgcmV3aW5kSW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7Ci0K
LSAgICBpZiAobm9kZS0+Z2V0SW5pdCgpKQotICAgIHsKLSAgICAgICAgbm9kZS0+Z2V0SW5pdCgp
LT50cmF2ZXJzZSh0aGlzKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG5vZGUtPmdldENvbmRpdGlv
bigpKQotICAgIHsKLSAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMp
OwotICAgIH0KLQotICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkpCi0gICAgewotICAgICAg
ICBub2RlLT5nZXRFeHByZXNzaW9uKCktPnRyYXZlcnNlKHRoaXMpOwotICAgIH0KLQotICAgIG1U
ZW1wb3JhcnlJbmRleCA9IHJld2luZEluZGV4OwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1p
bnQgVW5mb2xkU2hvcnRDaXJjdWl0OjpnZXROZXh0VGVtcG9yYXJ5SW5kZXgoKQotewotICAgIHJl
dHVybiBtVGVtcG9yYXJ5SW5kZXgrKzsKLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYWUyOTg5ZmE0YWI0OTUwMjViYTRjOTE3NzVhMWIwZTdmYzI1
ZTlkNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmgKKysr
IC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotLy8gVW5mb2xk
U2hvcnRDaXJjdWl0IGlzIGFuIEFTVCB0cmF2ZXJzZXIgdG8gb3V0cHV0IHNob3J0LWNpcmN1aXRp
bmcgb3BlcmF0b3JzIGFzIGlmLWVsc2Ugc3RhdGVtZW50cwotLy8KLQotI2lmbmRlZiBDT01QSUxF
Ul9VTkZPTERTSE9SVENJUkNVSVRfSF8KLSNkZWZpbmUgQ09NUElMRVJfVU5GT0xEU0hPUlRDSVJD
VUlUX0hfCi0KLSNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKLSNpbmNsdWRlICJj
b21waWxlci9QYXJzZUNvbnRleHQuaCIKLQotbmFtZXNwYWNlIHNoCi17Ci1jbGFzcyBPdXRwdXRI
TFNMOwotCi1jbGFzcyBVbmZvbGRTaG9ydENpcmN1aXQgOiBwdWJsaWMgVEludGVybVRyYXZlcnNl
cgotewotICBwdWJsaWM6Ci0gICAgVW5mb2xkU2hvcnRDaXJjdWl0KFRQYXJzZUNvbnRleHQgJmNv
bnRleHQsIE91dHB1dEhMU0wgKm91dHB1dEhMU0wpOwotCi0gICAgdm9pZCB0cmF2ZXJzZShUSW50
ZXJtTm9kZSAqbm9kZSk7Ci0gICAgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVy
bUJpbmFyeSopOwotICAgIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1T
ZWxlY3Rpb24gKm5vZGUpOwotICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJt
TG9vcCAqbm9kZSk7Ci0KLSAgICBpbnQgZ2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7Ci0KLSAgcHJv
dGVjdGVkOgotICAgIFRQYXJzZUNvbnRleHQgJm1Db250ZXh0OwotICAgIE91dHB1dEhMU0wgKmNv
bnN0IG1PdXRwdXRITFNMOwotCi0gICAgaW50IG1UZW1wb3JhcnlJbmRleDsKLX07Ci19Ci0KLSNl
bmRpZiAgIC8vIENPTVBJTEVSX1VORk9MRFNIT1JUQ0lSQ1VJVF9IXwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdEFTVC5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJj
dWl0QVNULmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZkMGYyZjMwYmUxNjIx
YjgzYjAxZGI0ZmFiOTA0YjRhZTI4YmY0ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5m
b2xkU2hvcnRDaXJjdWl0QVNULmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXRB
U1QuaCIKLQotbmFtZXNwYWNlCi17Ci0KLS8vICJ4IHx8IHkiIGlzIGVxdWl2YWxlbnQgdG8gIngg
PyB0cnVlIDogeSIuCi1USW50ZXJtU2VsZWN0aW9uICpVbmZvbGRPUihUSW50ZXJtVHlwZWQgKngs
IFRJbnRlcm1UeXBlZCAqeSkKLXsKLSAgICBjb25zdCBUVHlwZSBib29sVHlwZShFYnRCb29sLCBF
YnBVbmRlZmluZWQpOwotICAgIENvbnN0YW50VW5pb24gKnUgPSBuZXcgQ29uc3RhbnRVbmlvbjsK
LSAgICB1LT5zZXRCQ29uc3QodHJ1ZSk7Ci0gICAgVEludGVybUNvbnN0YW50VW5pb24gKnRydWVO
b2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKAotICAgICAgICB1LCBUVHlwZShFYnRCb29s
LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0LCAxKSk7Ci0gICAgcmV0dXJuIG5ldyBUSW50ZXJtU2Vs
ZWN0aW9uKHgsIHRydWVOb2RlLCB5LCBib29sVHlwZSk7Ci19Ci0KLS8vICJ4ICYmIHkiIGlzIGVx
dWl2YWxlbnQgdG8gInggPyB5IDogZmFsc2UiLgotVEludGVybVNlbGVjdGlvbiAqVW5mb2xkQU5E
KFRJbnRlcm1UeXBlZCAqeCwgVEludGVybVR5cGVkICp5KQotewotICAgIGNvbnN0IFRUeXBlIGJv
b2xUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCk7Ci0gICAgQ29uc3RhbnRVbmlvbiAqdSA9IG5l
dyBDb25zdGFudFVuaW9uOwotICAgIHUtPnNldEJDb25zdChmYWxzZSk7Ci0gICAgVEludGVybUNv
bnN0YW50VW5pb24gKmZhbHNlTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbigKLSAgICAg
ICAgdSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCwgMSkpOwotICAgIHJl
dHVybiBuZXcgVEludGVybVNlbGVjdGlvbih4LCB5LCBmYWxzZU5vZGUsIGJvb2xUeXBlKTsKLX0K
LQotfSAgLy8gbmFtZXNwYWNlIGFub255bW91cwotCi1ib29sIFVuZm9sZFNob3J0Q2lyY3VpdEFT
VDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCi17Ci0gICAg
VEludGVybVNlbGVjdGlvbiAqcmVwbGFjZW1lbnQgPSBOVUxMOwotCi0gICAgc3dpdGNoIChub2Rl
LT5nZXRPcCgpKQotICAgIHsKLSAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgotICAgICAgICByZXBs
YWNlbWVudCA9IFVuZm9sZE9SKG5vZGUtPmdldExlZnQoKSwgbm9kZS0+Z2V0UmlnaHQoKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOgotICAgICAgICByZXBsYWNl
bWVudCA9IFVuZm9sZEFORChub2RlLT5nZXRMZWZ0KCksIG5vZGUtPmdldFJpZ2h0KCkpOwotICAg
ICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBp
ZiAocmVwbGFjZW1lbnQpCi0gICAgewotICAgICAgICByZXBsYWNlbWVudHMucHVzaF9iYWNrKAot
ICAgICAgICAgICAgTm9kZVVwZGF0ZUVudHJ5KGdldFBhcmVudE5vZGUoKSwgbm9kZSwgcmVwbGFj
ZW1lbnQpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgVW5mb2xkU2hvcnRD
aXJjdWl0QVNUOjp1cGRhdGVUcmVlKCkKLXsKLSAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwg
cmVwbGFjZW1lbnRzLnNpemUoKTsgKytpaSkKLSAgICB7Ci0gICAgICAgIGNvbnN0IE5vZGVVcGRh
dGVFbnRyeSYgZW50cnkgPSByZXBsYWNlbWVudHNbaWldOwotICAgICAgICBBU1NFUlQoZW50cnku
cGFyZW50KTsKLSAgICAgICAgYm9vbCByZXBsYWNlZCA9IGVudHJ5LnBhcmVudC0+cmVwbGFjZUNo
aWxkTm9kZSgKLSAgICAgICAgICAgIGVudHJ5Lm9yaWdpbmFsLCBlbnRyeS5yZXBsYWNlbWVudCk7
Ci0gICAgICAgIEFTU0VSVChyZXBsYWNlZCk7Ci0KLSAgICAgICAgLy8gSW4gQVNUIHRyYXZlcnNp
bmcsIGEgcGFyZW50IGlzIHZpc2l0ZWQgYmVmb3JlIGl0cyBjaGlsZHJlbi4KLSAgICAgICAgLy8g
QWZ0ZXIgd2UgcmVwbGFjZSBhIG5vZGUsIGlmIGFuIGltbWVkaWF0ZSBjaGlsZCBpcyB0bwotICAg
ICAgICAvLyBiZSByZXBsYWNlZCwgd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgdXBkYXRl
IHRoZSByZXBsYWNlZAotICAgIC8vIG5vZGU7IGluc3RlYWQsIHdlIHVwZGF0ZSB0aGUgcmVwbGFj
ZW1lbnQgbm9kZS4KLSAgICAgICAgZm9yIChzaXplX3QgamogPSBpaSArIDE7IGpqIDwgcmVwbGFj
ZW1lbnRzLnNpemUoKTsgKytqaikKLSAgICAgICAgewotICAgICAgICAgICAgTm9kZVVwZGF0ZUVu
dHJ5JiBlbnRyeTIgPSByZXBsYWNlbWVudHNbampdOwotICAgICAgICAgICAgaWYgKGVudHJ5Mi5w
YXJlbnQgPT0gZW50cnkub3JpZ2luYWwpCi0gICAgICAgICAgICAgICAgZW50cnkyLnBhcmVudCA9
IGVudHJ5LnJlcGxhY2VtZW50OwotICAgICAgICB9Ci0gICAgfQotfQotCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0QVNU
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJj
dWl0QVNULmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmYzUwMDY2NDg1NDY4YWQx
NjNmMzkxYjVjNjJmMTYxODI3YTFiNWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9s
ZFNob3J0Q2lyY3VpdEFTVC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLS8vIFVuZm9sZFNob3J0Q2lyY3VpdEFTVCBpcyBhbiBBU1QgdHJhdmVyc2Vy
IHRvIHJlcGxhY2Ugc2hvcnQtY2lyY3VpdGluZwotLy8gb3BlcmF0aW9ucyB3aXRoIHRlcm5hcnkg
b3BlcmF0aW9ucy4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfVU5GT0xEX1NIT1JUX0NJUkNVSVRf
QVNUX0hfCi0jZGVmaW5lIENPTVBJTEVSX1VORk9MRF9TSE9SVF9DSVJDVUlUX0FTVF9IXwotCi0j
aW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRlICJjb21waWxlci9pbnRlcm1l
ZGlhdGUuaCIKLQotLy8gVGhpcyB0cmF2ZXJzZXIgaWRlbnRpZmllcyBhbGwgdGhlIHNob3J0IGNp
cmN1aXQgYmluYXJ5ICBub2RlcyB0aGF0IG5lZWQgdG8KLS8vIGJlIHJlcGxhY2VkLCBhbmQgY3Jl
YXRlcyB0aGUgY29ycmVzcG9uZGluZyByZXBsYWNlbWVudCBub2Rlcy4gSG93ZXZlciwKLS8vIHRo
ZSBhY3R1YWwgcmVwbGFjZW1lbnRzIGhhcHBlbiBhZnRlciB0aGUgdHJhdmVyc2UgdGhyb3VnaCB1
cGRhdGVUcmVlKCkuCi0KLWNsYXNzIFVuZm9sZFNob3J0Q2lyY3VpdEFTVCA6IHB1YmxpYyBUSW50
ZXJtVHJhdmVyc2VyCi17Ci0gIHB1YmxpYzoKLSAgICBVbmZvbGRTaG9ydENpcmN1aXRBU1QoKSB7
IH0KLQotICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJp
bmFyeSAqKTsKLQotICAgIHZvaWQgdXBkYXRlVHJlZSgpOwotCi0gIHByaXZhdGU6Ci0gICAgc3Ry
dWN0IE5vZGVVcGRhdGVFbnRyeQotICAgIHsKLSAgICAgICAgTm9kZVVwZGF0ZUVudHJ5KFRJbnRl
cm1Ob2RlICpfcGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5vZGUgKl9v
cmlnaW5hbCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICpfcmVwbGFjZW1l
bnQpCi0gICAgICAgICAgICA6IHBhcmVudChfcGFyZW50KSwKLSAgICAgICAgICAgICAgb3JpZ2lu
YWwoX29yaWdpbmFsKSwKLSAgICAgICAgICAgICAgcmVwbGFjZW1lbnQoX3JlcGxhY2VtZW50KSB7
fQotCi0gICAgICAgIFRJbnRlcm1Ob2RlICpwYXJlbnQ7Ci0gICAgICAgIFRJbnRlcm1Ob2RlICpv
cmlnaW5hbDsKLSAgICAgICAgVEludGVybU5vZGUgKnJlcGxhY2VtZW50OwotICAgIH07Ci0KLSAg
ICAvLyBEdXJpbmcgdHJhdmVyc2luZywgc2F2ZSBhbGwgdGhlIHJlcGxhY2VtZW50cyB0aGF0IG5l
ZWQgdG8gaGFwcGVuOwotICAgIC8vIHRoZW4gcmVwbGFjZSB0aGVtIGJ5IGNhbGxpbmcgdXBkYXRl
Tm9kZXMoKS4KLSAgICBzdGQ6OnZlY3RvcjxOb2RlVXBkYXRlRW50cnk+IHJlcGxhY2VtZW50czsK
LQotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihVbmZvbGRTaG9ydENpcmN1aXRBU1QpOwot
fTsKLQotI2VuZGlmICAvLyBDT01QSUxFUl9VTkZPTERfU0hPUlRfQ0lSQ1VJVF9BU1RfSF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Vbmlmb3JtLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Vbmlmb3JtLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM2N2RiMmJlOGU0ZmY1ZDEzOWMwZTcxYzhiYWI4
NGM3NGQ0N2ZkYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5pZm9ybS5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBp
bGVyL1VuaWZvcm0uaCIKLQotbmFtZXNwYWNlIHNoCi17Ci0KLVVuaWZvcm06OlVuaWZvcm0oR0xl
bnVtIHR5cGUsIEdMZW51bSBwcmVjaXNpb24sIGNvbnN0IGNoYXIgKm5hbWUsIGludCBhcnJheVNp
emUsIGludCByZWdpc3RlckluZGV4KQotewotICAgIHRoaXMtPnR5cGUgPSB0eXBlOwotICAgIHRo
aXMtPnByZWNpc2lvbiA9IHByZWNpc2lvbjsKLSAgICB0aGlzLT5uYW1lID0gbmFtZTsKLSAgICB0
aGlzLT5hcnJheVNpemUgPSBhcnJheVNpemU7Ci0gICAgdGhpcy0+cmVnaXN0ZXJJbmRleCA9IHJl
Z2lzdGVySW5kZXg7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9Vbmlmb3JtLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvVW5pZm9ybS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzUzZmZhN2Qy
ZmM1ODRlNDAwYzJjZjA0ZDAxMmU2YWYxZTI1MmQ3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9Vbmlmb3JtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LQotI2lmbmRlZiBDT01QSUxFUl9VTklGT1JNX0hfCi0jZGVmaW5lIENPTVBJTEVSX1VOSUZPUk1f
SF8KLQotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNkZWZpbmUgR0xf
QVBJQ0FMTAotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotCi1uYW1lc3BhY2Ugc2gKLXsKLQotc3Ry
dWN0IFVuaWZvcm0KLXsKLSAgICBVbmlmb3JtKEdMZW51bSB0eXBlLCBHTGVudW0gcHJlY2lzaW9u
LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgYXJyYXlTaXplLCBpbnQgcmVnaXN0ZXJJbmRleCk7Ci0K
LSAgICBHTGVudW0gdHlwZTsKLSAgICBHTGVudW0gcHJlY2lzaW9uOwotICAgIHN0ZDo6c3RyaW5n
IG5hbWU7Ci0gICAgdW5zaWduZWQgaW50IGFycmF5U2l6ZTsKLSAgICAKLSAgICBpbnQgcmVnaXN0
ZXJJbmRleDsKLX07Ci0KLXR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybT4gQWN0aXZlVW5pZm9y
bXM7Ci0KLX0KLQotI2VuZGlmICAgLy8gQ09NUElMRVJfVU5JRk9STV9IXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMu
Y3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRh
dGlvbnMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDk2OWM0ODlmYTFkMGQ4
ZTg5Yzk3ODNhY2IxYTcxOWI3MWRlMDNkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYWxp
ZGF0ZUxpbWl0YXRpb25zLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUxMiArMCwwIEBACi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5o
IgotI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5p
dGlhbGl6ZVBhcnNlQ29udGV4dC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlQ29udGV4dC5o
IgotCi1uYW1lc3BhY2UgewotYm9vbCBJc0xvb3BJbmRleChjb25zdCBUSW50ZXJtU3ltYm9sKiBz
eW1ib2wsIGNvbnN0IFRMb29wU3RhY2smIHN0YWNrKSB7Ci0gICAgZm9yIChUTG9vcFN0YWNrOjpj
b25zdF9pdGVyYXRvciBpID0gc3RhY2suYmVnaW4oKTsgaSAhPSBzdGFjay5lbmQoKTsgKytpKSB7
Ci0gICAgICAgIGlmIChpLT5pbmRleC5pZCA9PSBzeW1ib2wtPmdldElkKCkpCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIE1hcmtM
b29wRm9yVW5yb2xsKGNvbnN0IFRJbnRlcm1TeW1ib2wqIHN5bWJvbCwgVExvb3BTdGFjayYgc3Rh
Y2spIHsKLSAgICBmb3IgKFRMb29wU3RhY2s6Oml0ZXJhdG9yIGkgPSBzdGFjay5iZWdpbigpOyBp
ICE9IHN0YWNrLmVuZCgpOyArK2kpIHsKLSAgICAgICAgaWYgKGktPmluZGV4LmlkID09IHN5bWJv
bC0+Z2V0SWQoKSkgewotICAgICAgICAgICAgQVNTRVJUKGktPmxvb3AgIT0gTlVMTCk7Ci0gICAg
ICAgICAgICBpLT5sb29wLT5zZXRVbnJvbGxGbGFnKHRydWUpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfQotICAgIFVOUkVBQ0hBQkxFKCk7Ci19Ci0KLS8vIFRyYXZlcnNl
cyBhIG5vZGUgdG8gY2hlY2sgaWYgaXQgcmVwcmVzZW50cyBhIGNvbnN0YW50IGluZGV4IGV4cHJl
c3Npb24uCi0vLyBEZWZpbml0aW9uOgotLy8gY29uc3RhbnQtaW5kZXgtZXhwcmVzc2lvbnMgYXJl
IGEgc3VwZXJzZXQgb2YgY29uc3RhbnQtZXhwcmVzc2lvbnMuCi0vLyBDb25zdGFudC1pbmRleC1l
eHByZXNzaW9ucyBjYW4gaW5jbHVkZSBsb29wIGluZGljZXMgYXMgZGVmaW5lZCBpbgotLy8gR0xT
TCBFUyAxLjAgc3BlYywgQXBwZW5kaXggQSwgc2VjdGlvbiA0LgotLy8gVGhlIGZvbGxvd2luZyBh
cmUgY29uc3RhbnQtaW5kZXgtZXhwcmVzc2lvbnM6Ci0vLyAtIENvbnN0YW50IGV4cHJlc3Npb25z
Ci0vLyAtIExvb3AgaW5kaWNlcyBhcyBkZWZpbmVkIGluIHNlY3Rpb24gNAotLy8gLSBFeHByZXNz
aW9ucyBjb21wb3NlZCBvZiBib3RoIG9mIHRoZSBhYm92ZQotY2xhc3MgVmFsaWRhdGVDb25zdElu
ZGV4RXhwciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKLXB1YmxpYzoKLSAgICBWYWxpZGF0
ZUNvbnN0SW5kZXhFeHByKGNvbnN0IFRMb29wU3RhY2smIHN0YWNrKQotICAgICAgICA6IG1WYWxp
ZCh0cnVlKSwgbUxvb3BTdGFjayhzdGFjaykge30KLQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgcGFyc2VkIG5vZGUgcmVwcmVzZW50cyBhIGNvbnN0YW50IGluZGV4IGV4cHJlc3Npb24uCi0g
ICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbVZhbGlkOyB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogc3ltYm9sKSB7Ci0gICAgICAgIC8vIE9u
bHkgY29uc3RhbnRzIGFuZCBsb29wIGluZGljZXMgYXJlIGFsbG93ZWQgaW4gYQotICAgICAgICAv
LyBjb25zdGFudCBpbmRleCBleHByZXNzaW9uLgotICAgICAgICBpZiAobVZhbGlkKSB7Ci0gICAg
ICAgICAgICBtVmFsaWQgPSAoc3ltYm9sLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgfHwK
LSAgICAgICAgICAgICAgICAgICAgIElzTG9vcEluZGV4KHN5bWJvbCwgbUxvb3BTdGFjayk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBtVmFsaWQ7Ci0gICAgY29uc3Qg
VExvb3BTdGFjayYgbUxvb3BTdGFjazsKLX07Ci0KLS8vIFRyYXZlcnNlcyBhIG5vZGUgdG8gY2hl
Y2sgaWYgaXQgdXNlcyBhIGxvb3AgaW5kZXguCi0vLyBJZiBhbiBpbnQgbG9vcCBpbmRleCBpcyB1
c2VkIGluIGl0cyBib2R5IGFzIGEgc2FtcGxlciBhcnJheSBpbmRleCwKLS8vIG1hcmsgdGhlIGxv
b3AgZm9yIHVucm9sbC4KLWNsYXNzIFZhbGlkYXRlTG9vcEluZGV4RXhwciA6IHB1YmxpYyBUSW50
ZXJtVHJhdmVyc2VyIHsKLXB1YmxpYzoKLSAgICBWYWxpZGF0ZUxvb3BJbmRleEV4cHIoVExvb3BT
dGFjayYgc3RhY2spCi0gICAgICAgIDogbVVzZXNGbG9hdExvb3BJbmRleChmYWxzZSksCi0gICAg
ICAgICAgbVVzZXNJbnRMb29wSW5kZXgoZmFsc2UpLAotICAgICAgICAgIG1Mb29wU3RhY2soc3Rh
Y2spIHt9Ci0KLSAgICBib29sIHVzZXNGbG9hdExvb3BJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1V
c2VzRmxvYXRMb29wSW5kZXg7IH0KLSAgICBib29sIHVzZXNJbnRMb29wSW5kZXgoKSBjb25zdCB7
IHJldHVybiBtVXNlc0ludExvb3BJbmRleDsgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0U3lt
Ym9sKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCkgewotICAgICAgICBpZiAoSXNMb29wSW5kZXgoc3lt
Ym9sLCBtTG9vcFN0YWNrKSkgewotICAgICAgICAgICAgc3dpdGNoIChzeW1ib2wtPmdldEJhc2lj
VHlwZSgpKSB7Ci0gICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6Ci0gICAgICAgICAgICAgICAg
bVVzZXNGbG9hdExvb3BJbmRleCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgRWJ0SW50OgotICAgICAgICAgICAgICAgIG1Vc2VzSW50TG9vcEluZGV4
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBNYXJrTG9vcEZvclVucm9sbChzeW1ib2wsIG1Mb29w
U3RhY2spOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBtVXNlc0Zsb2F0TG9vcEluZGV4OwotICAgIGJv
b2wgbVVzZXNJbnRMb29wSW5kZXg7Ci0gICAgVExvb3BTdGFjayYgbUxvb3BTdGFjazsKLX07Ci19
ICAvLyBuYW1lc3BhY2UKLQotVmFsaWRhdGVMaW1pdGF0aW9uczo6VmFsaWRhdGVMaW1pdGF0aW9u
cyhTaFNoYWRlclR5cGUgc2hhZGVyVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVEluZm9TaW5rQmFzZSYgc2luaykKLSAgICA6IG1TaGFkZXJUeXBlKHNoYWRl
clR5cGUpLAotICAgICAgbVNpbmsoc2luayksCi0gICAgICBtTnVtRXJyb3JzKDApCi17Ci19Ci0K
LWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5h
cnkqIG5vZGUpCi17Ci0gICAgLy8gQ2hlY2sgaWYgbG9vcCBpbmRleCBpcyBtb2RpZmllZCBpbiB0
aGUgbG9vcCBib2R5LgotICAgIHZhbGlkYXRlT3BlcmF0aW9uKG5vZGUsIG5vZGUtPmdldExlZnQo
KSk7Ci0KLSAgICAvLyBDaGVjayBpbmRleGluZy4KLSAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkp
IHsKLSAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6Ci0gICAgICAgIHZhbGlkYXRlSW5kZXhpbmco
bm9kZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OgotI2lm
IGRlZmluZWQoX19BUFBMRV9fKQotICAgICAgICAvLyBMb29wIHVucm9sbGluZyBpcyBhIHdvcmst
YXJvdW5kIGZvciBhIE1hYyBDZyBjb21waWxlciBidWcgd2hlcmUgaXQKLSAgICAgICAgLy8gY3Jh
c2hlcyB3aGVuIGEgc2FtcGxlciBhcnJheSdzIGluZGV4IGlzIGFsc28gdGhlIGxvb3AgaW5kZXgu
Ci0gICAgICAgIC8vIE9uY2UgQXBwbGUgZml4ZXMgdGhpcyBidWcsIHdlIHNob3VsZCByZW1vdmUg
dGhlIGNvZGUgaW4gdGhpcyBDTC4KLSAgICAgICAgLy8gU2VlIGh0dHA6Ly9jb2RlcmV2aWV3LmFw
cHNwb3QuY29tLzQzMzEwNDgvLgotICAgICAgICBpZiAoKG5vZGUtPmdldExlZnQoKSAhPSBOVUxM
KSAmJiAobm9kZS0+Z2V0UmlnaHQoKSAhPSBOVUxMKSAmJgotICAgICAgICAgICAgKG5vZGUtPmdl
dExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCkpKSB7Ci0gICAgICAgICAgICBUSW50ZXJtU3ltYm9s
KiBzeW1ib2wgPSBub2RlLT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOwotICAgICAgICAg
ICAgaWYgKElzU2FtcGxlcihzeW1ib2wtPmdldEJhc2ljVHlwZSgpKSAmJiBzeW1ib2wtPmlzQXJy
YXkoKSkgewotICAgICAgICAgICAgICAgIFZhbGlkYXRlTG9vcEluZGV4RXhwciB2YWxpZGF0ZSht
TG9vcFN0YWNrKTsKLSAgICAgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSgm
dmFsaWRhdGUpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZS51c2VzRmxvYXRMb29wSW5k
ZXgoKSkgewotICAgICAgICAgICAgICAgICAgICBlcnJvcihub2RlLT5nZXRMaW5lKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICJzYW1wbGVyIGFycmF5IGluZGV4IGlzIGZsb2F0IGxvb3Ag
aW5kZXgiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9yIik7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgdmFsaWRhdGVJ
bmRleGluZyhub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBicmVhazsKLSAg
ICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlz
aXRVbmFyeShWaXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQotewotICAgIC8vIENoZWNrIGlmIGxv
b3AgaW5kZXggaXMgbW9kaWZpZWQgaW4gdGhlIGxvb3AgYm9keS4KLSAgICB2YWxpZGF0ZU9wZXJh
dGlvbihub2RlLCBub2RlLT5nZXRPcGVyYW5kKCkpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1B
Z2dyZWdhdGUqIG5vZGUpCi17Ci0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKSB7Ci0gICAgICBj
YXNlIEVPcEZ1bmN0aW9uQ2FsbDoKLSAgICAgICAgdmFsaWRhdGVGdW5jdGlvbkNhbGwobm9kZSk7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZpc2l0TG9v
cChWaXNpdCwgVEludGVybUxvb3AqIG5vZGUpCi17Ci0gICAgaWYgKCF2YWxpZGF0ZUxvb3BUeXBl
KG5vZGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBUTG9vcEluZm8gaW5mbzsKLSAg
ICBtZW1zZXQoJmluZm8sIDAsIHNpemVvZihUTG9vcEluZm8pKTsKLSAgICBpbmZvLmxvb3AgPSBu
b2RlOwotICAgIGlmICghdmFsaWRhdGVGb3JMb29wSGVhZGVyKG5vZGUsICZpbmZvKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVEludGVybU5vZGUqIGJvZHkgPSBub2RlLT5nZXRCb2R5
KCk7Ci0gICAgaWYgKGJvZHkgIT0gTlVMTCkgewotICAgICAgICBtTG9vcFN0YWNrLnB1c2hfYmFj
ayhpbmZvKTsKLSAgICAgICAgYm9keS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIG1Mb29wU3Rh
Y2sucG9wX2JhY2soKTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgbG9vcCBpcyBmdWxseSBwcm9jZXNz
ZWQgLSBubyBuZWVkIHRvIHZpc2l0IGNoaWxkcmVuLgotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBWYWxpZGF0ZUxpbWl0YXRpb25zOjplcnJvcihUU291cmNlTG9jIGxvYywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcmVhc29uLCBjb25zdCBjaGFyKiB0
b2tlbikKLXsKLSAgICBtU2luay5wcmVmaXgoRVByZWZpeEVycm9yKTsKLSAgICBtU2luay5sb2Nh
dGlvbihsb2MpOwotICAgIG1TaW5rIDw8ICInIiA8PCB0b2tlbiA8PCAiJyA6ICIgPDwgcmVhc29u
IDw8ICJcbiI7Ci0gICAgKyttTnVtRXJyb3JzOwotfQotCi1ib29sIFZhbGlkYXRlTGltaXRhdGlv
bnM6OndpdGhpbkxvb3BCb2R5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gIW1Mb29wU3RhY2suZW1w
dHkoKTsKLX0KLQotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjppc0xvb3BJbmRleChjb25zdCBU
SW50ZXJtU3ltYm9sKiBzeW1ib2wpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElzTG9vcEluZGV4KHN5
bWJvbCwgbUxvb3BTdGFjayk7Ci19Ci0KLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRh
dGVMb29wVHlwZShUSW50ZXJtTG9vcCogbm9kZSkgewotICAgIFRMb29wVHlwZSB0eXBlID0gbm9k
ZS0+Z2V0VHlwZSgpOwotICAgIGlmICh0eXBlID09IEVMb29wRm9yKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIC8vIFJlamVjdCB3aGlsZSBhbmQgZG8td2hpbGUgbG9vcHMuCi0gICAgZXJy
b3Iobm9kZS0+Z2V0TGluZSgpLAotICAgICAgICAgICJUaGlzIHR5cGUgb2YgbG9vcCBpcyBub3Qg
YWxsb3dlZCIsCi0gICAgICAgICAgdHlwZSA9PSBFTG9vcFdoaWxlID8gIndoaWxlIiA6ICJkbyIp
OwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxp
ZGF0ZUZvckxvb3BIZWFkZXIoVEludGVybUxvb3AqIG5vZGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTG9vcEluZm8qIGluZm8pCi17Ci0gICAgQVNT
RVJUKG5vZGUtPmdldFR5cGUoKSA9PSBFTG9vcEZvcik7Ci0KLSAgICAvLwotICAgIC8vIFRoZSBm
b3Igc3RhdGVtZW50IGhhcyB0aGUgZm9ybToKLSAgICAvLyAgICBmb3IgKCBpbml0LWRlY2xhcmF0
aW9uIDsgY29uZGl0aW9uIDsgZXhwcmVzc2lvbiApIHN0YXRlbWVudAotICAgIC8vCi0gICAgaWYg
KCF2YWxpZGF0ZUZvckxvb3BJbml0KG5vZGUsIGluZm8pKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKCF2YWxpZGF0ZUZvckxvb3BDb25kKG5vZGUsIGluZm8pKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKCF2YWxpZGF0ZUZvckxvb3BFeHByKG5vZGUsIGluZm8pKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBWYWxpZGF0
ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvb3BJbml0KFRJbnRlcm1Mb29wKiBub2RlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRMb29wSW5mbyogaW5m
bykKLXsKLSAgICBUSW50ZXJtTm9kZSogaW5pdCA9IG5vZGUtPmdldEluaXQoKTsKLSAgICBpZiAo
aW5pdCA9PSBOVUxMKSB7Ci0gICAgICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgIk1pc3Npbmcg
aW5pdCBkZWNsYXJhdGlvbiIsICJmb3IiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIC8vCi0gICAgLy8gaW5pdC1kZWNsYXJhdGlvbiBoYXMgdGhlIGZvcm06Ci0gICAgLy8g
ICAgIHR5cGUtc3BlY2lmaWVyIGlkZW50aWZpZXIgPSBjb25zdGFudC1leHByZXNzaW9uCi0gICAg
Ly8KLSAgICBUSW50ZXJtQWdncmVnYXRlKiBkZWNsID0gaW5pdC0+Z2V0QXNBZ2dyZWdhdGUoKTsK
LSAgICBpZiAoKGRlY2wgPT0gTlVMTCkgfHwgKGRlY2wtPmdldE9wKCkgIT0gRU9wRGVjbGFyYXRp
b24pKSB7Ci0gICAgICAgIGVycm9yKGluaXQtPmdldExpbmUoKSwgIkludmFsaWQgaW5pdCBkZWNs
YXJhdGlvbiIsICJmb3IiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAvLyBU
byBrZWVwIHRoaW5ncyBzaW1wbGUgZG8gbm90IGFsbG93IGRlY2xhcmF0aW9uIGxpc3QuCi0gICAg
VEludGVybVNlcXVlbmNlJiBkZWNsU2VxID0gZGVjbC0+Z2V0U2VxdWVuY2UoKTsKLSAgICBpZiAo
ZGVjbFNlcS5zaXplKCkgIT0gMSkgewotICAgICAgICBlcnJvcihkZWNsLT5nZXRMaW5lKCksICJJ
bnZhbGlkIGluaXQgZGVjbGFyYXRpb24iLCAiZm9yIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgVEludGVybUJpbmFyeSogZGVjbEluaXQgPSBkZWNsU2VxWzBdLT5nZXRBc0Jp
bmFyeU5vZGUoKTsKLSAgICBpZiAoKGRlY2xJbml0ID09IE5VTEwpIHx8IChkZWNsSW5pdC0+Z2V0
T3AoKSAhPSBFT3BJbml0aWFsaXplKSkgewotICAgICAgICBlcnJvcihkZWNsLT5nZXRMaW5lKCks
ICJJbnZhbGlkIGluaXQgZGVjbGFyYXRpb24iLCAiZm9yIik7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gZGVjbEluaXQtPmdldExlZnQo
KS0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0gICAgaWYgKHN5bWJvbCA9PSBOVUxMKSB7Ci0gICAgICAg
IGVycm9yKGRlY2xJbml0LT5nZXRMaW5lKCksICJJbnZhbGlkIGluaXQgZGVjbGFyYXRpb24iLCAi
Zm9yIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgLy8gVGhlIGxvb3AgaW5k
ZXggaGFzIHR5cGUgaW50IG9yIGZsb2F0LgotICAgIFRCYXNpY1R5cGUgdHlwZSA9IHN5bWJvbC0+
Z2V0QmFzaWNUeXBlKCk7Ci0gICAgaWYgKCh0eXBlICE9IEVidEludCkgJiYgKHR5cGUgIT0gRWJ0
RmxvYXQpKSB7Ci0gICAgICAgIGVycm9yKHN5bWJvbC0+Z2V0TGluZSgpLAotICAgICAgICAgICAg
ICAiSW52YWxpZCB0eXBlIGZvciBsb29wIGluZGV4IiwgZ2V0QmFzaWNTdHJpbmcodHlwZSkpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIFRoZSBsb29wIGluZGV4IGlzIGlu
aXRpYWxpemVkIHdpdGggY29uc3RhbnQgZXhwcmVzc2lvbi4KLSAgICBpZiAoIWlzQ29uc3RFeHBy
KGRlY2xJbml0LT5nZXRSaWdodCgpKSkgewotICAgICAgICBlcnJvcihkZWNsSW5pdC0+Z2V0TGlu
ZSgpLAotICAgICAgICAgICAgICAiTG9vcCBpbmRleCBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgd2l0
aCBub24tY29uc3RhbnQgZXhwcmVzc2lvbiIsCi0gICAgICAgICAgICAgIHN5bWJvbC0+Z2V0U3lt
Ym9sKCkuY19zdHIoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbmZv
LT5pbmRleC5pZCA9IHN5bWJvbC0+Z2V0SWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvb3BDb25kKFRJbnRlcm1Mb29wKiBu
b2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRMb29w
SW5mbyogaW5mbykKLXsKLSAgICBUSW50ZXJtTm9kZSogY29uZCA9IG5vZGUtPmdldENvbmRpdGlv
bigpOwotICAgIGlmIChjb25kID09IE5VTEwpIHsKLSAgICAgICAgZXJyb3Iobm9kZS0+Z2V0TGlu
ZSgpLCAiTWlzc2luZyBjb25kaXRpb24iLCAiZm9yIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgLy8KLSAgICAvLyBjb25kaXRpb24gaGFzIHRoZSBmb3JtOgotICAgIC8vICAg
ICBsb29wX2luZGV4IHJlbGF0aW9uYWxfb3BlcmF0b3IgY29uc3RhbnRfZXhwcmVzc2lvbgotICAg
IC8vCi0gICAgVEludGVybUJpbmFyeSogYmluT3AgPSBjb25kLT5nZXRBc0JpbmFyeU5vZGUoKTsK
LSAgICBpZiAoYmluT3AgPT0gTlVMTCkgewotICAgICAgICBlcnJvcihub2RlLT5nZXRMaW5lKCks
ICJJbnZhbGlkIGNvbmRpdGlvbiIsICJmb3IiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICAvLyBMb29wIGluZGV4IHNob3VsZCBiZSB0byB0aGUgbGVmdCBvZiByZWxhdGlvbmFs
IG9wZXJhdG9yLgotICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGJpbk9wLT5nZXRMZWZ0KCkt
PmdldEFzU3ltYm9sTm9kZSgpOwotICAgIGlmIChzeW1ib2wgPT0gTlVMTCkgewotICAgICAgICBl
cnJvcihiaW5PcC0+Z2V0TGluZSgpLCAiSW52YWxpZCBjb25kaXRpb24iLCAiZm9yIik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHN5bWJvbC0+Z2V0SWQoKSAhPSBpbmZv
LT5pbmRleC5pZCkgewotICAgICAgICBlcnJvcihzeW1ib2wtPmdldExpbmUoKSwKLSAgICAgICAg
ICAgICAgIkV4cGVjdGVkIGxvb3AgaW5kZXgiLCBzeW1ib2wtPmdldFN5bWJvbCgpLmNfc3RyKCkp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIFJlbGF0aW9uYWwgb3BlcmF0
b3IgaXMgb25lIG9mOiA+ID49IDwgPD0gPT0gb3IgIT0uCi0gICAgc3dpdGNoIChiaW5PcC0+Z2V0
T3AoKSkgewotICAgICAgY2FzZSBFT3BFcXVhbDoKLSAgICAgIGNhc2UgRU9wTm90RXF1YWw6Ci0g
ICAgICBjYXNlIEVPcExlc3NUaGFuOgotICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjoKLSAgICAg
IGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoKLSAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBlcnJvcihiaW5PcC0+Z2V0
TGluZSgpLAotICAgICAgICAgICAgICAiSW52YWxpZCByZWxhdGlvbmFsIG9wZXJhdG9yIiwKLSAg
ICAgICAgICAgICAgZ2V0T3BlcmF0b3JTdHJpbmcoYmluT3AtPmdldE9wKCkpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIC8vIExvb3AgaW5kZXggbXVzdCBiZSBjb21wYXJlZCB3aXRoIGEg
Y29uc3RhbnQuCi0gICAgaWYgKCFpc0NvbnN0RXhwcihiaW5PcC0+Z2V0UmlnaHQoKSkpIHsKLSAg
ICAgICAgZXJyb3IoYmluT3AtPmdldExpbmUoKSwKLSAgICAgICAgICAgICAgIkxvb3AgaW5kZXgg
Y2Fubm90IGJlIGNvbXBhcmVkIHdpdGggbm9uLWNvbnN0YW50IGV4cHJlc3Npb24iLAotICAgICAg
ICAgICAgICBzeW1ib2wtPmdldFN5bWJvbCgpLmNfc3RyKCkpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmFsaWRhdGVMaW1pdGF0
aW9uczo6dmFsaWRhdGVGb3JMb29wRXhwcihUSW50ZXJtTG9vcCogbm9kZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTG9vcEluZm8qIGluZm8pCi17Ci0g
ICAgVEludGVybU5vZGUqIGV4cHIgPSBub2RlLT5nZXRFeHByZXNzaW9uKCk7Ci0gICAgaWYgKGV4
cHIgPT0gTlVMTCkgewotICAgICAgICBlcnJvcihub2RlLT5nZXRMaW5lKCksICJNaXNzaW5nIGV4
cHJlc3Npb24iLCAiZm9yIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAv
LyBmb3IgZXhwcmVzc2lvbiBoYXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9ybXM6Ci0gICAgLy8g
ICAgIGxvb3BfaW5kZXgrKwotICAgIC8vICAgICBsb29wX2luZGV4LS0KLSAgICAvLyAgICAgbG9v
cF9pbmRleCArPSBjb25zdGFudF9leHByZXNzaW9uCi0gICAgLy8gICAgIGxvb3BfaW5kZXggLT0g
Y29uc3RhbnRfZXhwcmVzc2lvbgotICAgIC8vICAgICArK2xvb3BfaW5kZXgKLSAgICAvLyAgICAg
LS1sb29wX2luZGV4Ci0gICAgLy8gVGhlIGxhc3QgdHdvIGZvcm1zIGFyZSBub3Qgc3BlY2lmaWVk
IGluIHRoZSBzcGVjLCBidXQgSSBhbSBhc3N1bWluZwotICAgIC8vIGl0cyBhbiBvdmVyc2lnaHQu
Ci0gICAgVEludGVybVVuYXJ5KiB1bk9wID0gZXhwci0+Z2V0QXNVbmFyeU5vZGUoKTsKLSAgICBU
SW50ZXJtQmluYXJ5KiBiaW5PcCA9IHVuT3AgPyBOVUxMIDogZXhwci0+Z2V0QXNCaW5hcnlOb2Rl
KCk7Ci0KLSAgICBUT3BlcmF0b3Igb3AgPSBFT3BOdWxsOwotICAgIFRJbnRlcm1TeW1ib2wqIHN5
bWJvbCA9IE5VTEw7Ci0gICAgaWYgKHVuT3AgIT0gTlVMTCkgewotICAgICAgICBvcCA9IHVuT3At
PmdldE9wKCk7Ci0gICAgICAgIHN5bWJvbCA9IHVuT3AtPmdldE9wZXJhbmQoKS0+Z2V0QXNTeW1i
b2xOb2RlKCk7Ci0gICAgfSBlbHNlIGlmIChiaW5PcCAhPSBOVUxMKSB7Ci0gICAgICAgIG9wID0g
YmluT3AtPmdldE9wKCk7Ci0gICAgICAgIHN5bWJvbCA9IGJpbk9wLT5nZXRMZWZ0KCktPmdldEFz
U3ltYm9sTm9kZSgpOwotICAgIH0KLQotICAgIC8vIFRoZSBvcGVyYW5kIG11c3QgYmUgbG9vcCBp
bmRleC4KLSAgICBpZiAoc3ltYm9sID09IE5VTEwpIHsKLSAgICAgICAgZXJyb3IoZXhwci0+Z2V0
TGluZSgpLCAiSW52YWxpZCBleHByZXNzaW9uIiwgImZvciIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIGlmIChzeW1ib2wtPmdldElkKCkgIT0gaW5mby0+aW5kZXguaWQpIHsK
LSAgICAgICAgZXJyb3Ioc3ltYm9sLT5nZXRMaW5lKCksCi0gICAgICAgICAgICAgICJFeHBlY3Rl
ZCBsb29wIGluZGV4Iiwgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFRoZSBvcGVyYXRvciBpcyBvbmUgb2Y6ICsrIC0t
ICs9IC09LgotICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50
OgotICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6Ci0gICAgICAgIGNhc2UgRU9wUHJlSW5j
cmVtZW50OgotICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDoKLSAgICAgICAgICAgIEFTU0VS
VCgodW5PcCAhPSBOVUxMKSAmJiAoYmluT3AgPT0gTlVMTCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgRU9wQWRkQXNzaWduOgotICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjoK
LSAgICAgICAgICAgIEFTU0VSVCgodW5PcCA9PSBOVUxMKSAmJiAoYmluT3AgIT0gTlVMTCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBlcnJvcihl
eHByLT5nZXRMaW5lKCksICJJbnZhbGlkIG9wZXJhdG9yIiwgZ2V0T3BlcmF0b3JTdHJpbmcob3Ap
KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBMb29wIGluZGV4
IG11c3QgYmUgaW5jcmVtZW50ZWQvZGVjcmVtZW50ZWQgd2l0aCBhIGNvbnN0YW50LgotICAgIGlm
IChiaW5PcCAhPSBOVUxMKSB7Ci0gICAgICAgIGlmICghaXNDb25zdEV4cHIoYmluT3AtPmdldFJp
Z2h0KCkpKSB7Ci0gICAgICAgICAgICBlcnJvcihiaW5PcC0+Z2V0TGluZSgpLAotICAgICAgICAg
ICAgICAgICAgIkxvb3AgaW5kZXggY2Fubm90IGJlIG1vZGlmaWVkIGJ5IG5vbi1jb25zdGFudCBl
eHByZXNzaW9uIiwKLSAgICAgICAgICAgICAgICAgIHN5bWJvbC0+Z2V0U3ltYm9sKCkuY19zdHIo
KSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZ1bmN0
aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBub2RlKQotewotICAgIEFTU0VSVChub2RlLT5nZXRP
cCgpID09IEVPcEZ1bmN0aW9uQ2FsbCk7Ci0KLSAgICAvLyBJZiBub3Qgd2l0aGluIGxvb3AgYm9k
eSwgdGhlcmUgaXMgbm90aGluZyB0byBjaGVjay4KLSAgICBpZiAoIXdpdGhpbkxvb3BCb2R5KCkp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gTGlzdCBvZiBwYXJhbSBpbmRpY2VzIGZv
ciB3aGljaCBsb29wIGluZGljZXMgYXJlIHVzZWQgYXMgYXJndW1lbnQuCi0gICAgdHlwZWRlZiBz
dGQ6OnZlY3RvcjxzaXplX3Q+IFBhcmFtSW5kZXg7Ci0gICAgUGFyYW1JbmRleCBwSW5kZXg7Ci0g
ICAgVEludGVybVNlcXVlbmNlJiBwYXJhbXMgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOwotICAgIGZv
ciAoVEludGVybVNlcXVlbmNlOjpzaXplX3R5cGUgaSA9IDA7IGkgPCBwYXJhbXMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gcGFyYW1zW2ldLT5nZXRBc1N5
bWJvbE5vZGUoKTsKLSAgICAgICAgaWYgKHN5bWJvbCAmJiBpc0xvb3BJbmRleChzeW1ib2wpKQot
ICAgICAgICAgICAgcEluZGV4LnB1c2hfYmFjayhpKTsKLSAgICB9Ci0gICAgLy8gSWYgbm9uZSBv
ZiB0aGUgbG9vcCBpbmRpY2VzIGFyZSB1c2VkIGFzIGFyZ3VtZW50cywKLSAgICAvLyB0aGVyZSBp
cyBub3RoaW5nIHRvIGNoZWNrLgotICAgIGlmIChwSW5kZXguZW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBib29sIHZhbGlkID0gdHJ1ZTsKLSAgICBUU3ltYm9sVGFibGUmIHN5
bWJvbFRhYmxlID0gR2V0R2xvYmFsUGFyc2VDb250ZXh0KCktPnN5bWJvbFRhYmxlOwotICAgIFRT
eW1ib2wqIHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQobm9kZS0+Z2V0TmFtZSgpKTsKLSAgICBB
U1NFUlQoc3ltYm9sICYmIHN5bWJvbC0+aXNGdW5jdGlvbigpKTsKLSAgICBURnVuY3Rpb24qIGZ1
bmN0aW9uID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oc3ltYm9sKTsKLSAgICBmb3IgKFBhcmFt
SW5kZXg6OmNvbnN0X2l0ZXJhdG9yIGkgPSBwSW5kZXguYmVnaW4oKTsKLSAgICAgICAgIGkgIT0g
cEluZGV4LmVuZCgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgVFBhcmFtZXRlciYgcGFyYW0gPSBm
dW5jdGlvbi0+Z2V0UGFyYW0oKmkpOwotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJhbS50
eXBlLT5nZXRRdWFsaWZpZXIoKTsKLSAgICAgICAgaWYgKChxdWFsID09IEV2cU91dCkgfHwgKHF1
YWwgPT0gRXZxSW5PdXQpKSB7Ci0gICAgICAgICAgICBlcnJvcihwYXJhbXNbKmldLT5nZXRMaW5l
KCksCi0gICAgICAgICAgICAgICAgICAiTG9vcCBpbmRleCBjYW5ub3QgYmUgdXNlZCBhcyBhcmd1
bWVudCB0byBhIGZ1bmN0aW9uIG91dCBvciBpbm91dCBwYXJhbWV0ZXIiLAotICAgICAgICAgICAg
ICAgICAgcGFyYW1zWyppXS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3RyKCkp
OwotICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJl
dHVybiB2YWxpZDsKLX0KLQotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZU9wZXJh
dGlvbihUSW50ZXJtT3BlcmF0b3IqIG5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlKiBvcGVyYW5kKSB7Ci0gICAgLy8gQ2hlY2sgaWYg
bG9vcCBpbmRleCBpcyBtb2RpZmllZCBpbiB0aGUgbG9vcCBib2R5LgotICAgIGlmICghd2l0aGlu
TG9vcEJvZHkoKSB8fCAhbm9kZS0+aXNBc3NpZ25tZW50KCkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgY29uc3QgVEludGVybVN5bWJvbCogc3ltYm9sID0gb3BlcmFuZC0+Z2V0QXNTeW1i
b2xOb2RlKCk7Ci0gICAgaWYgKHN5bWJvbCAmJiBpc0xvb3BJbmRleChzeW1ib2wpKSB7Ci0gICAg
ICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwKLSAgICAgICAgICAgICAgIkxvb3AgaW5kZXggY2Fu
bm90IGJlIHN0YXRpY2FsbHkgYXNzaWduZWQgdG8gd2l0aGluIHRoZSBib2R5IG9mIHRoZSBsb29w
IiwKLSAgICAgICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6aXNDb25zdEV4
cHIoVEludGVybU5vZGUqIG5vZGUpCi17Ci0gICAgQVNTRVJUKG5vZGUgIT0gTlVMTCk7Ci0gICAg
cmV0dXJuIG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpICE9IE5VTEw7Ci19Ci0KLWJvb2wgVmFs
aWRhdGVMaW1pdGF0aW9uczo6aXNDb25zdEluZGV4RXhwcihUSW50ZXJtTm9kZSogbm9kZSkKLXsK
LSAgICBBU1NFUlQobm9kZSAhPSBOVUxMKTsKLQotICAgIFZhbGlkYXRlQ29uc3RJbmRleEV4cHIg
dmFsaWRhdGUobUxvb3BTdGFjayk7Ci0gICAgbm9kZS0+dHJhdmVyc2UoJnZhbGlkYXRlKTsKLSAg
ICByZXR1cm4gdmFsaWRhdGUuaXNWYWxpZCgpOwotfQotCi1ib29sIFZhbGlkYXRlTGltaXRhdGlv
bnM6OnZhbGlkYXRlSW5kZXhpbmcoVEludGVybUJpbmFyeSogbm9kZSkKLXsKLSAgICBBU1NFUlQo
KG5vZGUtPmdldE9wKCkgPT0gRU9wSW5kZXhEaXJlY3QpIHx8Ci0gICAgICAgICAgIChub2RlLT5n
ZXRPcCgpID09IEVPcEluZGV4SW5kaXJlY3QpKTsKLQotICAgIGJvb2wgdmFsaWQgPSB0cnVlOwot
ICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBub2RlLT5nZXRSaWdodCgpOwotICAgIC8vIFRoZSBp
bmRleCBleHByZXNzaW9uIG11c3QgaGF2ZSBpbnRlZ3JhbCB0eXBlLgotICAgIGlmICghaW5kZXgt
PmlzU2NhbGFyKCkgfHwgKGluZGV4LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRJbnQpKSB7Ci0gICAg
ICAgIGVycm9yKGluZGV4LT5nZXRMaW5lKCksCi0gICAgICAgICAgICAgICJJbmRleCBleHByZXNz
aW9uIG11c3QgaGF2ZSBpbnRlZ3JhbCB0eXBlIiwKLSAgICAgICAgICAgICAgaW5kZXgtPmdldENv
bXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7Ci0gICAgICAgIHZhbGlkID0gZmFsc2U7Ci0gICAgfQot
ICAgIC8vIFRoZSBpbmRleCBleHBlc3Npb24gbXVzdCBiZSBhIGNvbnN0YW50LWluZGV4LWV4cHJl
c3Npb24gdW5sZXNzCi0gICAgLy8gdGhlIG9wZXJhbmQgaXMgYSB1bmlmb3JtIGluIGEgdmVydGV4
IHNoYWRlci4KLSAgICBUSW50ZXJtVHlwZWQqIG9wZXJhbmQgPSBub2RlLT5nZXRMZWZ0KCk7Ci0g
ICAgYm9vbCBza2lwID0gKG1TaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpICYmCi0gICAg
ICAgICAgICAgICAgKG9wZXJhbmQtPmdldFF1YWxpZmllcigpID09IEV2cVVuaWZvcm0pOwotICAg
IGlmICghc2tpcCAmJiAhaXNDb25zdEluZGV4RXhwcihpbmRleCkpIHsKLSAgICAgICAgZXJyb3Io
aW5kZXgtPmdldExpbmUoKSwgIkluZGV4IGV4cHJlc3Npb24gbXVzdCBiZSBjb25zdGFudCIsICJb
XSIpOwotICAgICAgICB2YWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdmFsaWQ7Ci19
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYWxp
ZGF0ZUxpbWl0YXRpb25zLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
VmFsaWRhdGVMaW1pdGF0aW9ucy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODM1
Y2IzYzIyNmU2MGYzZjZlZjhlYzJmNjY0OTBjYTEyYWFiNGI0Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCww
IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgotI2lu
Y2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotCi1jbGFzcyBUSW5mb1NpbmtCYXNlOwot
Ci1zdHJ1Y3QgVExvb3BJbmZvIHsKLSAgICBzdHJ1Y3QgVEluZGV4IHsKLSAgICAgICAgaW50IGlk
OyAgLy8gc3ltYm9sIGlkLgotICAgIH0gaW5kZXg7Ci0gICAgVEludGVybUxvb3AqIGxvb3A7Ci19
OwotdHlwZWRlZiBUVmVjdG9yPFRMb29wSW5mbz4gVExvb3BTdGFjazsKLQotLy8gVHJhdmVyc2Vz
IGludGVybWVkaWF0ZSB0cmVlIHRvIGVuc3VyZSB0aGF0IHRoZSBzaGFkZXIgZG9lcyBub3QgZXhj
ZWVkIHRoZQotLy8gbWluaW11bSBmdW5jdGlvbmFsaXR5IG1hbmRhdGVkIGluIEdMU0wgMS4wIHNw
ZWMsIEFwcGVuZGl4IEEuCi1jbGFzcyBWYWxpZGF0ZUxpbWl0YXRpb25zIDogcHVibGljIFRJbnRl
cm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIFZhbGlkYXRlTGltaXRhdGlvbnMoU2hTaGFkZXJU
eXBlIHNoYWRlclR5cGUsIFRJbmZvU2lua0Jhc2UmIHNpbmspOwotCi0gICAgaW50IG51bUVycm9y
cygpIGNvbnN0IHsgcmV0dXJuIG1OdW1FcnJvcnM7IH0KLQotICAgIHZpcnR1YWwgYm9vbCB2aXNp
dEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSopOwotICAgIHZpcnR1YWwgYm9vbCB2aXNpdFVu
YXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkqKTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdh
dGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRMb29w
KFZpc2l0LCBUSW50ZXJtTG9vcCopOwotCi1wcml2YXRlOgotICAgIHZvaWQgZXJyb3IoVFNvdXJj
ZUxvYyBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4pOwotCi0gICAg
Ym9vbCB3aXRoaW5Mb29wQm9keSgpIGNvbnN0OwotICAgIGJvb2wgaXNMb29wSW5kZXgoY29uc3Qg
VEludGVybVN5bWJvbCogc3ltYm9sKSBjb25zdDsKLSAgICBib29sIHZhbGlkYXRlTG9vcFR5cGUo
VEludGVybUxvb3AqIG5vZGUpOwotICAgIGJvb2wgdmFsaWRhdGVGb3JMb29wSGVhZGVyKFRJbnRl
cm1Mb29wKiBub2RlLCBUTG9vcEluZm8qIGluZm8pOwotICAgIGJvb2wgdmFsaWRhdGVGb3JMb29w
SW5pdChUSW50ZXJtTG9vcCogbm9kZSwgVExvb3BJbmZvKiBpbmZvKTsKLSAgICBib29sIHZhbGlk
YXRlRm9yTG9vcENvbmQoVEludGVybUxvb3AqIG5vZGUsIFRMb29wSW5mbyogaW5mbyk7Ci0gICAg
Ym9vbCB2YWxpZGF0ZUZvckxvb3BFeHByKFRJbnRlcm1Mb29wKiBub2RlLCBUTG9vcEluZm8qIGlu
Zm8pOwotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBub25lIG9mIHRoZSBsb29wIGluZGljZXMgaXMg
dXNlZCBhcyB0aGUgYXJndW1lbnQgdG8KLSAgICAvLyB0aGUgZ2l2ZW4gZnVuY3Rpb24gb3V0IG9y
IGlub3V0IHBhcmFtZXRlci4KLSAgICBib29sIHZhbGlkYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1B
Z2dyZWdhdGUqIG5vZGUpOwotICAgIGJvb2wgdmFsaWRhdGVPcGVyYXRpb24oVEludGVybU9wZXJh
dG9yKiBub2RlLCBUSW50ZXJtTm9kZSogb3BlcmFuZCk7Ci0KLSAgICAvLyBSZXR1cm5zIHRydWUg
aWYgaW5kZXhpbmcgZG9lcyBub3QgZXhjZWVkIHRoZSBtaW5pbXVtIGZ1bmN0aW9uYWxpdHkKLSAg
ICAvLyBtYW5kYXRlZCBpbiBHTFNMIDEuMCBzcGVjLCBBcHBlbmRpeCBBLCBTZWN0aW9uIDUuCi0g
ICAgYm9vbCBpc0NvbnN0RXhwcihUSW50ZXJtTm9kZSogbm9kZSk7Ci0gICAgYm9vbCBpc0NvbnN0
SW5kZXhFeHByKFRJbnRlcm1Ob2RlKiBub2RlKTsKLSAgICBib29sIHZhbGlkYXRlSW5kZXhpbmco
VEludGVybUJpbmFyeSogbm9kZSk7Ci0KLSAgICBTaFNoYWRlclR5cGUgbVNoYWRlclR5cGU7Ci0g
ICAgVEluZm9TaW5rQmFzZSYgbVNpbms7Ci0gICAgaW50IG1OdW1FcnJvcnM7Ci0gICAgVExvb3BT
dGFjayBtTG9vcFN0YWNrOwotfTsKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvVmFyaWFibGVJbmZvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMzRlYTRiNjU5MjY0ZDYyMjQyODkwNmZjYTg2YjdjOWYwZmI0NzMwMC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVJbmZvLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMw
OCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvVmFyaWFi
bGVJbmZvLmgiCi0KLW5hbWVzcGFjZSB7Ci0KLVRTdHJpbmcgYXJyYXlCcmFja2V0cyhpbnQgaW5k
ZXgpCi17Ci0gICAgVFN0cmluZ1N0cmVhbSBzdHJlYW07Ci0gICAgc3RyZWFtIDw8ICJbIiA8PCBp
bmRleCA8PCAiXSI7Ci0gICAgcmV0dXJuIHN0cmVhbS5zdHIoKTsKLX0KLQotLy8gUmV0dXJucyB0
aGUgZGF0YSB0eXBlIGZvciBhbiBhdHRyaWJ1dGUsIHVuaWZvcm0sIG9yIHZhcnlpbmcuCi1TaERh
dGFUeXBlIGdldFZhcmlhYmxlRGF0YVR5cGUoY29uc3QgVFR5cGUmIHR5cGUpCi17Ci0gICAgc3dp
dGNoICh0eXBlLmdldEJhc2ljVHlwZSgpKSB7Ci0gICAgICBjYXNlIEVidEZsb2F0OgotICAgICAg
ICAgIGlmICh0eXBlLmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdl
dE5vbWluYWxTaXplKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBTSF9GTE9B
VF9NQVQyOwotICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFNIX0ZMT0FUX01BVDM7Ci0g
ICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gU0hfRkxPQVRfTUFUNDsKLSAgICAgICAgICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
fSBlbHNlIGlmICh0eXBlLmlzVmVjdG9yKCkpIHsKLSAgICAgICAgICAgICAgc3dpdGNoICh0eXBl
LmdldE5vbWluYWxTaXplKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBTSF9G
TE9BVF9WRUMyOwotICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFNIX0ZMT0FUX1ZFQzM7
Ci0gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gU0hfRkxPQVRfVkVDNDsKLSAgICAgICAg
ICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgcmV0dXJuIFNIX0ZMT0FUOwotICAgICAgICAgIH0K
LSAgICAgIGNhc2UgRWJ0SW50OgotICAgICAgICAgIGlmICh0eXBlLmlzTWF0cml4KCkpIHsKLSAg
ICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUuaXNW
ZWN0b3IoKSkgewotICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkg
ewotICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIFNIX0lOVF9WRUMyOwotICAgICAgICAg
ICAgICAgIGNhc2UgMzogcmV0dXJuIFNIX0lOVF9WRUMzOwotICAgICAgICAgICAgICAgIGNhc2Ug
NDogcmV0dXJuIFNIX0lOVF9WRUM0OwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICByZXR1cm4gU0hfSU5UOwotICAgICAgICAgIH0KLSAgICAgIGNhc2UgRWJ0Qm9vbDoKLSAgICAg
ICAgICBpZiAodHlwZS5pc01hdHJpeCgpKSB7Ci0gICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7
Ci0gICAgICAgICAgfSBlbHNlIGlmICh0eXBlLmlzVmVjdG9yKCkpIHsKLSAgICAgICAgICAgICAg
c3dpdGNoICh0eXBlLmdldE5vbWluYWxTaXplKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDI6
IHJldHVybiBTSF9CT09MX1ZFQzI7Ci0gICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gU0hf
Qk9PTF9WRUMzOwotICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFNIX0JPT0xfVkVDNDsK
LSAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgcmV0dXJuIFNIX0JPT0w7Ci0gICAg
ICAgICAgfQotICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6IHJldHVybiBTSF9TQU1QTEVSXzJEOwot
ICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZTogcmV0dXJuIFNIX1NBTVBMRVJfQ1VCRTsKLSAgICAg
IGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOiByZXR1cm4gU0hfU0FNUExFUl9FWFRFUk5BTF9P
RVM7Ci0gICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6IHJldHVybiBTSF9TQU1QTEVSXzJEX1JF
Q1RfQVJCOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0gICAgcmV0dXJu
IFNIX05PTkU7Ci19Ci0KLXZvaWQgZ2V0QnVpbHRJblZhcmlhYmxlSW5mbyhjb25zdCBUVHlwZSYg
dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nJiBuYW1lLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcmIG1hcHBlZE5hbWUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIGluZm9MaXN0KTsK
LXZvaWQgZ2V0VXNlckRlZmluZWRWYXJpYWJsZUluZm8oY29uc3QgVFR5cGUmIHR5cGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcmIG1hcHBlZE5hbWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9MaXN0JiBpbmZvTGlzdCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVu
Y3Rpb24pOwotCi0vLyBSZXR1cm5zIGluZm8gZm9yIGFuIGF0dHJpYnV0ZSwgdW5pZm9ybSwgb3Ig
dmFyeWluZy4KLXZvaWQgZ2V0VmFyaWFibGVJbmZvKGNvbnN0IFRUeXBlJiB0eXBlLAotICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRTdHJpbmcmIG1hcHBlZE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICBUVmFyaWFi
bGVJbmZvTGlzdCYgaW5mb0xpc3QsCi0gICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlv
bjY0IGhhc2hGdW5jdGlvbikKLXsKLSAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRT
dHJ1Y3QpIHsKLSAgICAgICAgaWYgKHR5cGUuaXNBcnJheSgpKSB7Ci0gICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHR5cGUuZ2V0QXJyYXlTaXplKCk7ICsraSkgewotICAgICAgICAgICAg
ICAgIFRTdHJpbmcgbG5hbWUgPSBuYW1lICsgYXJyYXlCcmFja2V0cyhpKTsKLSAgICAgICAgICAg
ICAgICBUU3RyaW5nIGxtYXBwZWROYW1lID0gbWFwcGVkTmFtZSArIGFycmF5QnJhY2tldHMoaSk7
Ci0gICAgICAgICAgICAgICAgZ2V0VXNlckRlZmluZWRWYXJpYWJsZUluZm8odHlwZSwgbG5hbWUs
IGxtYXBwZWROYW1lLCBpbmZvTGlzdCwgaGFzaEZ1bmN0aW9uKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGdldFVzZXJEZWZpbmVkVmFyaWFibGVJbmZvKHR5
cGUsIG5hbWUsIG1hcHBlZE5hbWUsIGluZm9MaXN0LCBoYXNoRnVuY3Rpb24pOwotICAgICAgICB9
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZ2V0QnVpbHRJblZhcmlhYmxlSW5mbyh0eXBlLCBuYW1l
LCBtYXBwZWROYW1lLCBpbmZvTGlzdCk7Ci0gICAgfQotfQotCi12b2lkIGdldEJ1aWx0SW5WYXJp
YWJsZUluZm8oY29uc3QgVFR5cGUmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVFN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
U3RyaW5nJiBtYXBwZWROYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJs
ZUluZm9MaXN0JiBpbmZvTGlzdCkKLXsKLSAgICBBU1NFUlQodHlwZS5nZXRCYXNpY1R5cGUoKSAh
PSBFYnRTdHJ1Y3QpOwotCi0gICAgVFZhcmlhYmxlSW5mbyB2YXJJbmZvOwotICAgIGlmICh0eXBl
LmlzQXJyYXkoKSkgewotICAgICAgICB2YXJJbmZvLm5hbWUgPSAobmFtZSArICJbMF0iKS5jX3N0
cigpOwotICAgICAgICB2YXJJbmZvLm1hcHBlZE5hbWUgPSAobWFwcGVkTmFtZSArICJbMF0iKS5j
X3N0cigpOwotICAgICAgICB2YXJJbmZvLnNpemUgPSB0eXBlLmdldEFycmF5U2l6ZSgpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIHZhckluZm8ubmFtZSA9IG5hbWUuY19zdHIoKTsKLSAgICAgICAg
dmFySW5mby5tYXBwZWROYW1lID0gbWFwcGVkTmFtZS5jX3N0cigpOwotICAgICAgICB2YXJJbmZv
LnNpemUgPSAxOwotICAgIH0KLSAgICB2YXJJbmZvLnByZWNpc2lvbiA9IHR5cGUuZ2V0UHJlY2lz
aW9uKCk7Ci0gICAgdmFySW5mby50eXBlID0gZ2V0VmFyaWFibGVEYXRhVHlwZSh0eXBlKTsKLSAg
ICBpbmZvTGlzdC5wdXNoX2JhY2sodmFySW5mbyk7Ci19Ci0KLXZvaWQgZ2V0VXNlckRlZmluZWRW
YXJpYWJsZUluZm8oY29uc3QgVFR5cGUmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRTdHJpbmcmIG1hcHBlZE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFRWYXJpYWJsZUluZm9MaXN0JiBpbmZvTGlzdCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24pCi17Ci0gICAgQVNTRVJU
KHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KTsKLQotICAgIGNvbnN0IFRGaWVsZExp
c3QmIGZpZWxkcyA9IHR5cGUuZ2V0U3RydWN0KCktPmZpZWxkcygpOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFRUeXBlJiBm
aWVsZFR5cGUgPSAqKGZpZWxkc1tpXS0+dHlwZSgpKTsKLSAgICAgICAgY29uc3QgVFN0cmluZyYg
ZmllbGROYW1lID0gZmllbGRzW2ldLT5uYW1lKCk7Ci0gICAgICAgIGdldFZhcmlhYmxlSW5mbyhm
aWVsZFR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lICsgIi4iICsgZmllbGROYW1l
LAotICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGVkTmFtZSArICIuIiArIFRJbnRlcm1UcmF2
ZXJzZXI6Omhhc2goZmllbGROYW1lLCBoYXNoRnVuY3Rpb24pLAotICAgICAgICAgICAgICAgICAg
ICAgICAgaW5mb0xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICBoYXNoRnVuY3Rpb24pOwot
ICAgIH0KLX0KLQotVFZhcmlhYmxlSW5mbyogZmluZFZhcmlhYmxlKGNvbnN0IFRUeXBlJiB0eXBl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIGluZm9MaXN0KQotewot
ICAgIC8vIFRPRE8oem1vKTogb3B0aW1pemUgdGhpcyBmdW5jdGlvbi4KLSAgICBUU3RyaW5nIG15
TmFtZSA9IG5hbWU7Ci0gICAgaWYgKHR5cGUuaXNBcnJheSgpKQotICAgICAgICBteU5hbWUgKz0g
IlswXSI7Ci0gICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IGluZm9MaXN0LnNpemUoKTsgKytp
aSkKLSAgICB7Ci0gICAgICAgIGlmIChpbmZvTGlzdFtpaV0ubmFtZS5jX3N0cigpID09IG15TmFt
ZSkKLSAgICAgICAgICAgIHJldHVybiAmKGluZm9MaXN0W2lpXSk7Ci0gICAgfQotICAgIHJldHVy
biBOVUxMOwotfQotCi19ICAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCi0KLVRWYXJpYWJsZUluZm86
OlRWYXJpYWJsZUluZm8oKQotICAgIDogdHlwZShTSF9OT05FKSwKLSAgICAgIHNpemUoMCksCi0g
ICAgICBwcmVjaXNpb24oRWJwVW5kZWZpbmVkKSwKLSAgICAgIHN0YXRpY1VzZShmYWxzZSkKLXsK
LX0KLQotVFZhcmlhYmxlSW5mbzo6VFZhcmlhYmxlSW5mbyhTaERhdGFUeXBlIHR5cGUsIGludCBz
aXplKQotICAgIDogdHlwZSh0eXBlKSwKLSAgICAgIHNpemUoc2l6ZSksCi0gICAgICBwcmVjaXNp
b24oRWJwVW5kZWZpbmVkKSwKLSAgICAgIHN0YXRpY1VzZShmYWxzZSkKLXsKLX0KLQotQ29sbGVj
dFZhcmlhYmxlczo6Q29sbGVjdFZhcmlhYmxlcyhUVmFyaWFibGVJbmZvTGlzdCYgYXR0cmlicywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIHVu
aWZvcm1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFyaWFibGVJbmZv
TGlzdCYgdmFyeWluZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoSGFz
aEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uKQotICAgIDogbUF0dHJpYnMoYXR0cmlicyksCi0gICAg
ICBtVW5pZm9ybXModW5pZm9ybXMpLAotICAgICAgbVZhcnlpbmdzKHZhcnlpbmdzKSwKLSAgICAg
IG1Qb2ludENvb3JkQWRkZWQoZmFsc2UpLAotICAgICAgbUZyb250RmFjaW5nQWRkZWQoZmFsc2Up
LAotICAgICAgbUZyYWdDb29yZEFkZGVkKGZhbHNlKSwKLSAgICAgIG1IYXNoRnVuY3Rpb24oaGFz
aEZ1bmN0aW9uKQotewotfQotCi0vLyBXZSB3YW50IHRvIGNoZWNrIHdoZXRoZXIgYSB1bmlmb3Jt
L3ZhcnlpbmcgaXMgc3RhdGljYWxseSB1c2VkCi0vLyBiZWNhdXNlIHdlIG9ubHkgY291bnQgdGhl
IHVzZWQgb25lcyBpbiBwYWNraW5nIGNvbXB1dGluZy4KLS8vIEFsc28sIGdsX0ZyYWdDb29yZCwg
Z2xfUG9pbnRDb29yZCwgYW5kIGdsX0Zyb250RmFjaW5nIGNvdW50Ci0vLyB0b3dhcmQgdmFyeWlu
ZyBjb3VudGluZyBpZiB0aGV5IGFyZSBzdGF0aWNhbGx5IHVzZWQgaW4gYSBmcmFnbWVudAotLy8g
c2hhZGVyLgotdm9pZCBDb2xsZWN0VmFyaWFibGVzOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9s
KiBzeW1ib2wpCi17Ci0gICAgQVNTRVJUKHN5bWJvbCAhPSBOVUxMKTsKLSAgICBUVmFyaWFibGVJ
bmZvKiB2YXIgPSBOVUxMOwotICAgIHN3aXRjaCAoc3ltYm9sLT5nZXRRdWFsaWZpZXIoKSkKLSAg
ICB7Ci0gICAgY2FzZSBFdnFWYXJ5aW5nT3V0OgotICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWlu
Z091dDoKLSAgICBjYXNlIEV2cVZhcnlpbmdJbjoKLSAgICBjYXNlIEV2cUludmFyaWFudFZhcnlp
bmdJbjoKLSAgICAgICAgdmFyID0gZmluZFZhcmlhYmxlKHN5bWJvbC0+Z2V0VHlwZSgpLCBzeW1i
b2wtPmdldFN5bWJvbCgpLCBtVmFyeWluZ3MpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEV2
cVVuaWZvcm06Ci0gICAgICAgIHZhciA9IGZpbmRWYXJpYWJsZShzeW1ib2wtPmdldFR5cGUoKSwg
c3ltYm9sLT5nZXRTeW1ib2woKSwgbVVuaWZvcm1zKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBFdnFGcmFnQ29vcmQ6Ci0gICAgICAgIGlmICghbUZyYWdDb29yZEFkZGVkKSB7Ci0gICAgICAg
ICAgICBUVmFyaWFibGVJbmZvIGluZm87Ci0gICAgICAgICAgICBpbmZvLm5hbWUgPSAiZ2xfRnJh
Z0Nvb3JkIjsKLSAgICAgICAgICAgIGluZm8ubWFwcGVkTmFtZSA9ICJnbF9GcmFnQ29vcmQiOwot
ICAgICAgICAgICAgaW5mby50eXBlID0gU0hfRkxPQVRfVkVDNDsKLSAgICAgICAgICAgIGluZm8u
c2l6ZSA9IDE7Ci0gICAgICAgICAgICBpbmZvLnByZWNpc2lvbiA9IEVicE1lZGl1bTsgIC8vIFVz
ZSBtZWRpdW1wIGFzIGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlci4KLSAgICAgICAgICAgIGluZm8u
c3RhdGljVXNlID0gdHJ1ZTsKLSAgICAgICAgbVZhcnlpbmdzLnB1c2hfYmFjayhpbmZvKTsKLSAg
ICAgICAgICAgIG1GcmFnQ29vcmRBZGRlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgRXZxRnJvbnRGYWNpbmc6Ci0gICAgICAgIGlmICghbUZyb250RmFjaW5n
QWRkZWQpIHsKLSAgICAgICAgICAgIFRWYXJpYWJsZUluZm8gaW5mbzsKLSAgICAgICAgICAgIGlu
Zm8ubmFtZSA9ICJnbF9Gcm9udEZhY2luZyI7Ci0gICAgICAgICAgICBpbmZvLm1hcHBlZE5hbWUg
PSAiZ2xfRnJvbnRGYWNpbmciOwotICAgICAgICAgICAgaW5mby50eXBlID0gU0hfQk9PTDsKLSAg
ICAgICAgICAgIGluZm8uc2l6ZSA9IDE7Ci0gICAgICAgICAgICBpbmZvLnByZWNpc2lvbiA9IEVi
cFVuZGVmaW5lZDsKLSAgICAgICAgICAgIGluZm8uc3RhdGljVXNlID0gdHJ1ZTsKLSAgICAgICAg
bVZhcnlpbmdzLnB1c2hfYmFjayhpbmZvKTsKLSAgICAgICAgICAgIG1Gcm9udEZhY2luZ0FkZGVk
ID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBFdnFQb2ludENv
b3JkOgotICAgICAgICBpZiAoIW1Qb2ludENvb3JkQWRkZWQpIHsKLSAgICAgICAgICAgIFRWYXJp
YWJsZUluZm8gaW5mbzsKLSAgICAgICAgICAgIGluZm8ubmFtZSA9ICJnbF9Qb2ludENvb3JkIjsK
LSAgICAgICAgICAgIGluZm8ubWFwcGVkTmFtZSA9ICJnbF9Qb2ludENvb3JkIjsKLSAgICAgICAg
ICAgIGluZm8udHlwZSA9IFNIX0ZMT0FUX1ZFQzI7Ci0gICAgICAgICAgICBpbmZvLnNpemUgPSAx
OwotICAgICAgICAgICAgaW5mby5wcmVjaXNpb24gPSBFYnBNZWRpdW07ICAvLyBVc2UgbWVkaXVt
cCBhcyBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIuCi0gICAgICAgICAgICBpbmZvLnN0YXRpY1Vz
ZSA9IHRydWU7Ci0gICAgICAgIG1WYXJ5aW5ncy5wdXNoX2JhY2soaW5mbyk7Ci0gICAgICAgICAg
ICBtUG9pbnRDb29yZEFkZGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmICh2YXIpCi0gICAgICAg
IHZhci0+c3RhdGljVXNlID0gdHJ1ZTsKLX0KLQotYm9vbCBDb2xsZWN0VmFyaWFibGVzOjp2aXNp
dEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKLXsKLSAgICBib29sIHZp
c2l0Q2hpbGRyZW4gPSB0cnVlOwotCi0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQotICAgIHsK
LSAgICBjYXNlIEVPcERlY2xhcmF0aW9uOiB7Ci0gICAgICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5j
ZSYgc2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOwotICAgICAgICBUUXVhbGlmaWVyIHF1
YWxpZmllciA9IHNlcXVlbmNlLmZyb250KCktPmdldEFzVHlwZWQoKS0+Z2V0UXVhbGlmaWVyKCk7
Ci0gICAgICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlIHx8IHF1YWxpZmllciA9PSBF
dnFVbmlmb3JtIHx8Ci0gICAgICAgICAgICBxdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8IHF1
YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8Ci0gICAgICAgICAgICBxdWFsaWZpZXIgPT0gRXZx
SW52YXJpYW50VmFyeWluZ0luIHx8IHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0
KQotICAgICAgICB7Ci0gICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYgaW5mb0xpc3QgPSBx
dWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlID8gbUF0dHJpYnMgOgotICAgICAgICAgICAgICAgIChx
dWFsaWZpZXIgPT0gRXZxVW5pZm9ybSA/IG1Vbmlmb3JtcyA6IG1WYXJ5aW5ncyk7Ci0gICAgICAg
ICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgaSA9IHNlcXVlbmNlLmJl
Z2luKCk7Ci0gICAgICAgICAgICAgICAgIGkgIT0gc2VxdWVuY2UuZW5kKCk7ICsraSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCBUSW50ZXJtU3ltYm9sKiB2YXJpYWJsZSA9
ICgqaSktPmdldEFzU3ltYm9sTm9kZSgpOwotICAgICAgICAgICAgICAgIC8vIFRoZSBvbmx5IGNh
c2UgaW4gd2hpY2ggdGhlIHNlcXVlbmNlIHdpbGwgbm90IGNvbnRhaW4gYQotICAgICAgICAgICAg
ICAgIC8vIFRJbnRlcm1TeW1ib2wgbm9kZSBpcyBpbml0aWFsaXphdGlvbi4gSXQgd2lsbCBjb250
YWluIGEKLSAgICAgICAgICAgICAgICAvLyBUSW50ZXJCaW5hcnkgbm9kZSBpbiB0aGF0IGNhc2Uu
IFNpbmNlIGF0dHJpYnV0ZXMsIHVuaWZvcm1zLAotICAgICAgICAgICAgICAgIC8vIGFuZCB2YXJ5
aW5ncyBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgaW4gYSBzaGFkZXIsIHdlIG11c3QgaGF2ZQotICAg
ICAgICAgICAgICAgIC8vIG9ubHkgVEludGVybVN5bWJvbCBub2RlcyBpbiB0aGUgc2VxdWVuY2Uu
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhYmxlICE9IE5VTEwpOwotICAgICAgICAgICAg
ICAgIFRTdHJpbmcgcHJvY2Vzc2VkU3ltYm9sOwotICAgICAgICAgICAgICAgIGlmIChtSGFzaEZ1
bmN0aW9uID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZFN5bWJvbCA9IHZh
cmlhYmxlLT5nZXRTeW1ib2woKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIHByb2Nlc3NlZFN5bWJvbCA9IFRJbnRlcm1UcmF2ZXJzZXI6Omhhc2godmFyaWFibGUt
PmdldE9yaWdpbmFsU3ltYm9sKCksIG1IYXNoRnVuY3Rpb24pOwotICAgICAgICAgICAgICAgIGdl
dFZhcmlhYmxlSW5mbyh2YXJpYWJsZS0+Z2V0VHlwZSgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXJpYWJsZS0+Z2V0T3JpZ2luYWxTeW1ib2woKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkU3ltYm9sLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmZvTGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUhh
c2hGdW5jdGlvbik7Ci0gICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0
OiBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmlzaXRDaGlsZHJlbjsKLX0KLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzdmMmE1Zjg0ZjI2MzhlNTM3YWRlM2FmOTIy
ZmRhZmFjZmFmMDZmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uaAor
KysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5k
ZWYgQ09NUElMRVJfVkFSSUFCTEVfSU5GT19IXwotI2RlZmluZSBDT01QSUxFUl9WQVJJQUJMRV9J
TkZPX0hfCi0KLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLSNpbmNsdWRlICJjb21w
aWxlci9pbnRlcm1lZGlhdGUuaCIKLQotLy8gUHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgYSB2
YXJpYWJsZS4KLS8vIEl0IGlzIGN1cnJlbnRseSBiZWluZyB1c2VkIHRvIHN0b3JlIGluZm8gYWJv
dXQgYWN0aXZlIGF0dHJpYnMgYW5kIHVuaWZvcm1zLgotc3RydWN0IFRWYXJpYWJsZUluZm8gewot
ICAgIFRWYXJpYWJsZUluZm8oU2hEYXRhVHlwZSB0eXBlLCBpbnQgc2l6ZSk7Ci0gICAgVFZhcmlh
YmxlSW5mbygpOwotCi0gICAgVFBlcnNpc3RTdHJpbmcgbmFtZTsKLSAgICBUUGVyc2lzdFN0cmlu
ZyBtYXBwZWROYW1lOwotICAgIFNoRGF0YVR5cGUgdHlwZTsKLSAgICBpbnQgc2l6ZTsKLSAgICBU
UHJlY2lzaW9uIHByZWNpc2lvbjsKLSAgICBib29sIHN0YXRpY1VzZTsKLX07Ci10eXBlZGVmIHN0
ZDo6dmVjdG9yPFRWYXJpYWJsZUluZm8+IFRWYXJpYWJsZUluZm9MaXN0OwotCi0vLyBUcmF2ZXJz
ZXMgaW50ZXJtZWRpYXRlIHRyZWUgdG8gY29sbGVjdCBhbGwgYXR0cmlidXRlcywgdW5pZm9ybXMs
IHZhcnlpbmdzLgotY2xhc3MgQ29sbGVjdFZhcmlhYmxlcyA6IHB1YmxpYyBUSW50ZXJtVHJhdmVy
c2VyIHsKLXB1YmxpYzoKLSAgICBDb2xsZWN0VmFyaWFibGVzKFRWYXJpYWJsZUluZm9MaXN0JiBh
dHRyaWJzLAotICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIHVuaWZvcm1z
LAotICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIHZhcnlpbmdzLAotICAg
ICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24pOwotCi0gICAg
dmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKLSAgICB2aXJ0dWFsIGJv
b2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKLQotcHJpdmF0ZToK
LSAgICBUVmFyaWFibGVJbmZvTGlzdCYgbUF0dHJpYnM7Ci0gICAgVFZhcmlhYmxlSW5mb0xpc3Qm
IG1Vbmlmb3JtczsKLSAgICBUVmFyaWFibGVJbmZvTGlzdCYgbVZhcnlpbmdzOwotCi0gICAgYm9v
bCBtUG9pbnRDb29yZEFkZGVkOwotICAgIGJvb2wgbUZyb250RmFjaW5nQWRkZWQ7Ci0gICAgYm9v
bCBtRnJhZ0Nvb3JkQWRkZWQ7Ci0KLSAgICBTaEhhc2hGdW5jdGlvbjY0IG1IYXNoRnVuY3Rpb247
Ci19OwotCi0jZW5kaWYgIC8vIENPTVBJTEVSX1ZBUklBQkxFX0lORk9fSF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZVBhY2tlci5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVQYWNrZXIuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTU3Mjg3NzYzNWViMzhhNDcwZDQ3M2Iy
OTZiNWYxNzQ0YTllYTZhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZVBhY2tl
ci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyOTcgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LSNpbmNsdWRlICJjb21waWxlci9WYXJpYWJsZVBhY2tlci5oIgotCi0jaW5jbHVkZSA8YWxnb3Jp
dGhtPgotI2luY2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCi0KLW5hbWVzcGFjZSB7Ci1pbnQg
R2V0U29ydE9yZGVyKFNoRGF0YVR5cGUgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAg
ICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0OgotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
IGNhc2UgU0hfRkxPQVRfTUFUMjoKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICBjYXNl
IFNIX0ZMT0FUX1ZFQzQ6Ci0gICAgICAgIGNhc2UgU0hfSU5UX1ZFQzQ6Ci0gICAgICAgIGNhc2Ug
U0hfQk9PTF9WRUM0OgotICAgICAgICAgICAgcmV0dXJuIDI7Ci0gICAgICAgIGNhc2UgU0hfRkxP
QVRfTUFUMzoKLSAgICAgICAgICAgIHJldHVybiAzOwotICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZF
QzM6Ci0gICAgICAgIGNhc2UgU0hfSU5UX1ZFQzM6Ci0gICAgICAgIGNhc2UgU0hfQk9PTF9WRUMz
OgotICAgICAgICAgICAgcmV0dXJuIDQ7Ci0gICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMjoKLSAg
ICAgICAgY2FzZSBTSF9JTlRfVkVDMjoKLSAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzI6Ci0gICAg
ICAgICAgICByZXR1cm4gNTsKLSAgICAgICAgY2FzZSBTSF9GTE9BVDoKLSAgICAgICAgY2FzZSBT
SF9JTlQ6Ci0gICAgICAgIGNhc2UgU0hfQk9PTDoKLSAgICAgICAgY2FzZSBTSF9TQU1QTEVSXzJE
OgotICAgICAgICBjYXNlIFNIX1NBTVBMRVJfQ1VCRToKLSAgICAgICAgY2FzZSBTSF9TQU1QTEVS
X0VYVEVSTkFMX09FUzoKLSAgICAgICAgY2FzZSBTSF9TQU1QTEVSXzJEX1JFQ1RfQVJCOgotICAg
ICAgICAgICAgcmV0dXJuIDY7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlQo
ZmFsc2UpOwotICAgICAgICAgICAgcmV0dXJuIDc7Ci0gICAgfQotfQotfSAgICAvLyBuYW1lc3Bh
Y2UKLQotaW50IFZhcmlhYmxlUGFja2VyOjpHZXROdW1Db21wb25lbnRzUGVyUm93KFNoRGF0YVR5
cGUgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBTSF9GTE9BVF9N
QVQ0OgotICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDI6Ci0gICAgICAgIGNhc2UgU0hfRkxPQVRf
VkVDNDoKLSAgICAgICAgY2FzZSBTSF9JTlRfVkVDNDoKLSAgICAgICAgY2FzZSBTSF9CT09MX1ZF
QzQ6Ci0gICAgICAgICAgICByZXR1cm4gNDsKLSAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzOgot
ICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzM6Ci0gICAgICAgIGNhc2UgU0hfSU5UX1ZFQzM6Ci0g
ICAgICAgIGNhc2UgU0hfQk9PTF9WRUMzOgotICAgICAgICAgICAgcmV0dXJuIDM7Ci0gICAgICAg
IGNhc2UgU0hfRkxPQVRfVkVDMjoKLSAgICAgICAgY2FzZSBTSF9JTlRfVkVDMjoKLSAgICAgICAg
Y2FzZSBTSF9CT09MX1ZFQzI6Ci0gICAgICAgICAgICByZXR1cm4gMjsKLSAgICAgICAgY2FzZSBT
SF9GTE9BVDoKLSAgICAgICAgY2FzZSBTSF9JTlQ6Ci0gICAgICAgIGNhc2UgU0hfQk9PTDoKLSAg
ICAgICAgY2FzZSBTSF9TQU1QTEVSXzJEOgotICAgICAgICBjYXNlIFNIX1NBTVBMRVJfQ1VCRToK
LSAgICAgICAgY2FzZSBTSF9TQU1QTEVSX0VYVEVSTkFMX09FUzoKLSAgICAgICAgY2FzZSBTSF9T
QU1QTEVSXzJEX1JFQ1RfQVJCOgotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICAgICAgcmV0dXJuIDU7Ci0g
ICAgfQotfQotCi1pbnQgVmFyaWFibGVQYWNrZXI6OkdldE51bVJvd3MoU2hEYXRhVHlwZSB0eXBl
KQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDQ6Ci0g
ICAgICAgICAgICByZXR1cm4gNDsKLSAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzOgotICAgICAg
ICAgICAgcmV0dXJuIDM7Ci0gICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMjoKLSAgICAgICAgICAg
IHJldHVybiAyOwotICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzQ6Ci0gICAgICAgIGNhc2UgU0hf
SU5UX1ZFQzQ6Ci0gICAgICAgIGNhc2UgU0hfQk9PTF9WRUM0OgotICAgICAgICBjYXNlIFNIX0ZM
T0FUX1ZFQzM6Ci0gICAgICAgIGNhc2UgU0hfSU5UX1ZFQzM6Ci0gICAgICAgIGNhc2UgU0hfQk9P
TF9WRUMzOgotICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzI6Ci0gICAgICAgIGNhc2UgU0hfSU5U
X1ZFQzI6Ci0gICAgICAgIGNhc2UgU0hfQk9PTF9WRUMyOgotICAgICAgICBjYXNlIFNIX0ZMT0FU
OgotICAgICAgICBjYXNlIFNIX0lOVDoKLSAgICAgICAgY2FzZSBTSF9CT09MOgotICAgICAgICBj
YXNlIFNIX1NBTVBMRVJfMkQ6Ci0gICAgICAgIGNhc2UgU0hfU0FNUExFUl9DVUJFOgotICAgICAg
ICBjYXNlIFNIX1NBTVBMRVJfRVhURVJOQUxfT0VTOgotICAgICAgICBjYXNlIFNIX1NBTVBMRVJf
MkRfUkVDVF9BUkI6Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgICAgICAgICByZXR1cm4gMTAwMDAwOwotICAg
IH0KLX0KLQotc3RydWN0IFRWYXJpYWJsZUluZm9Db21wYXJlciB7Ci0gICAgYm9vbCBvcGVyYXRv
cigpKGNvbnN0IFRWYXJpYWJsZUluZm8mIGxocywgY29uc3QgVFZhcmlhYmxlSW5mbyYgcmhzKSBj
b25zdAotICAgIHsKLSAgICAgICAgaW50IGxoc1NvcnRPcmRlciA9IEdldFNvcnRPcmRlcihsaHMu
dHlwZSk7Ci0gICAgICAgIGludCByaHNTb3J0T3JkZXIgPSBHZXRTb3J0T3JkZXIocmhzLnR5cGUp
OwotICAgICAgICBpZiAobGhzU29ydE9yZGVyICE9IHJoc1NvcnRPcmRlcikgewotICAgICAgICAg
ICAgcmV0dXJuIGxoc1NvcnRPcmRlciA8IHJoc1NvcnRPcmRlcjsKLSAgICAgICAgfQotICAgICAg
ICAvLyBTb3J0IGJ5IGxhcmdlc3QgZmlyc3QuCi0gICAgICAgIHJldHVybiBsaHMuc2l6ZSA+IHJo
cy5zaXplOwotICAgIH0KLX07Ci0KLXVuc2lnbmVkIFZhcmlhYmxlUGFja2VyOjptYWtlQ29sdW1u
RmxhZ3MoaW50IGNvbHVtbiwgaW50IG51bUNvbXBvbmVudHNQZXJSb3cpCi17Ci0gICAgcmV0dXJu
ICgoa0NvbHVtbk1hc2sgPDwgKGtOdW1Db2x1bW5zIC0gbnVtQ29tcG9uZW50c1BlclJvdykpICYK
LSAgICAgICAgICAgICAgICAgICAga0NvbHVtbk1hc2spID4+IGNvbHVtbjsKLX0KLQotdm9pZCBW
YXJpYWJsZVBhY2tlcjo6ZmlsbENvbHVtbnMoaW50IHRvcFJvdywgaW50IG51bVJvd3MsIGludCBj
b2x1bW4sIGludCBudW1Db21wb25lbnRzUGVyUm93KQotewotICAgIHVuc2lnbmVkIGNvbHVtbkZs
YWdzID0gbWFrZUNvbHVtbkZsYWdzKGNvbHVtbiwgbnVtQ29tcG9uZW50c1BlclJvdyk7Ci0gICAg
Zm9yIChpbnQgciA9IDA7IHIgPCBudW1Sb3dzOyArK3IpIHsKLSAgICAgICAgaW50IHJvdyA9IHRv
cFJvdyArIHI7Ci0gICAgICAgIEFTU0VSVCgocm93c19bcm93XSAmIGNvbHVtbkZsYWdzKSA9PSAw
KTsKLSAgICAgICAgcm93c19bcm93XSB8PSBjb2x1bW5GbGFnczsKLSAgICB9Ci19Ci0KLWJvb2wg
VmFyaWFibGVQYWNrZXI6OnNlYXJjaENvbHVtbihpbnQgY29sdW1uLCBpbnQgbnVtUm93cywgaW50
KiBkZXN0Um93LCBpbnQqIGRlc3RTaXplKQotewotICAgIEFTU0VSVChkZXN0Um93KTsKLQotICAg
IGZvciAoOyB0b3BOb25GdWxsUm93XyA8IG1heFJvd3NfICYmIHJvd3NfW3RvcE5vbkZ1bGxSb3df
XSA9PSBrQ29sdW1uTWFzazsKLSAgICAgICAgICsrdG9wTm9uRnVsbFJvd18pIHsKLSAgICB9Ci0K
LSAgICBmb3IgKDsgYm90dG9tTm9uRnVsbFJvd18gPj0gMCAmJiByb3dzX1tib3R0b21Ob25GdWxs
Um93X10gPT0ga0NvbHVtbk1hc2s7Ci0gICAgICAgICAtLWJvdHRvbU5vbkZ1bGxSb3dfKSB7Ci0g
ICAgfQotCi0gICAgaWYgKGJvdHRvbU5vbkZ1bGxSb3dfIC0gdG9wTm9uRnVsbFJvd18gKyAxIDwg
bnVtUm93cykgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgdW5zaWduZWQg
Y29sdW1uRmxhZ3MgPSBtYWtlQ29sdW1uRmxhZ3MoY29sdW1uLCAxKTsKLSAgICBpbnQgdG9wR29v
ZFJvdyA9IDA7Ci0gICAgaW50IHNtYWxsZXN0R29vZFRvcCA9IC0xOwotICAgIGludCBzbWFsbGVz
dEdvb2RTaXplID0gbWF4Um93c18gKyAxOwotICAgIGludCBib3R0b21Sb3cgPSBib3R0b21Ob25G
dWxsUm93XyArIDE7Ci0gICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgIGZvciAoaW50IHJvdyA9
IHRvcE5vbkZ1bGxSb3dfOyByb3cgPD0gYm90dG9tUm93OyArK3JvdykgewotICAgICAgICBib29s
IHJvd0VtcHR5ID0gcm93IDwgYm90dG9tUm93ID8gKChyb3dzX1tyb3ddICYgY29sdW1uRmxhZ3Mp
ID09IDApIDogZmFsc2U7Ci0gICAgICAgIGlmIChyb3dFbXB0eSkgewotICAgICAgICAgICAgaWYg
KCFmb3VuZCkgewotICAgICAgICAgICAgICAgIHRvcEdvb2RSb3cgPSByb3c7Ci0gICAgICAgICAg
ICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgaWYgKGZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgaW50IHNpemUgPSByb3cgLSB0
b3BHb29kUm93OwotICAgICAgICAgICAgICAgIGlmIChzaXplID49IG51bVJvd3MgJiYgc2l6ZSA8
IHNtYWxsZXN0R29vZFNpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgc21hbGxlc3RHb29kU2l6
ZSA9IHNpemU7Ci0gICAgICAgICAgICAgICAgICAgIHNtYWxsZXN0R29vZFRvcCA9IHRvcEdvb2RS
b3c7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm91bmQg
PSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoc21hbGxlc3RHb29kVG9wIDwgMCkg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgKmRlc3RSb3cgPSBzbWFsbGVz
dEdvb2RUb3A7Ci0gICAgaWYgKGRlc3RTaXplKSB7Ci0gICAgICAgICpkZXN0U2l6ZSA9IHNtYWxs
ZXN0R29vZFNpemU7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFZhcmlhYmxl
UGFja2VyOjpDaGVja1ZhcmlhYmxlc1dpdGhpblBhY2tpbmdMaW1pdHMoaW50IG1heFZlY3RvcnMs
IGNvbnN0IFRWYXJpYWJsZUluZm9MaXN0JiBpbl92YXJpYWJsZXMpCi17Ci0gICAgQVNTRVJUKG1h
eFZlY3RvcnMgPiAwKTsKLSAgICBtYXhSb3dzXyA9IG1heFZlY3RvcnM7Ci0gICAgdG9wTm9uRnVs
bFJvd18gPSAwOwotICAgIGJvdHRvbU5vbkZ1bGxSb3dfID0gbWF4Um93c18gLSAxOwotICAgIFRW
YXJpYWJsZUluZm9MaXN0IHZhcmlhYmxlcyhpbl92YXJpYWJsZXMpOwotCi0gICAgLy8gQXMgcGVy
IEdMU0wgMS4wMTcgQXBwZW5kaXggQSwgU2VjdGlvbiA3IHZhcmlhYmxlcyBhcmUgcGFja2VkIGlu
IHNwZWNpZmljCi0gICAgLy8gb3JkZXIgYnkgdHlwZSwgdGhlbiBieSBzaXplIG9mIGFycmF5LCBs
YXJnZXN0IGZpcnN0LgotICAgIHN0ZDo6c29ydCh2YXJpYWJsZXMuYmVnaW4oKSwgdmFyaWFibGVz
LmVuZCgpLCBUVmFyaWFibGVJbmZvQ29tcGFyZXIoKSk7Ci0gICAgcm93c18uY2xlYXIoKTsKLSAg
ICByb3dzXy5yZXNpemUobWF4VmVjdG9ycywgMCk7Ci0KLSAgICAvLyBQYWNrcyB0aGUgNCBjb2x1
bW4gdmFyaWFibGVzLgotICAgIHNpemVfdCBpaSA9IDA7Ci0gICAgZm9yICg7IGlpIDwgdmFyaWFi
bGVzLnNpemUoKTsgKytpaSkgewotICAgICAgICBjb25zdCBUVmFyaWFibGVJbmZvJiB2YXJpYWJs
ZSA9IHZhcmlhYmxlc1tpaV07Ci0gICAgICAgIGlmIChHZXROdW1Db21wb25lbnRzUGVyUm93KHZh
cmlhYmxlLnR5cGUpICE9IDQpIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIHRvcE5vbkZ1bGxSb3dfICs9IEdldE51bVJvd3ModmFyaWFibGUudHlwZSkgKiB2YXJpYWJs
ZS5zaXplOwotICAgIH0KLQotICAgIGlmICh0b3BOb25GdWxsUm93XyA+IG1heFJvd3NfKSB7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBQYWNrcyB0aGUgMyBjb2x1bW4g
dmFyaWFibGVzLgotICAgIGludCBudW0zQ29sdW1uUm93cyA9IDA7Ci0gICAgZm9yICg7IGlpIDwg
dmFyaWFibGVzLnNpemUoKTsgKytpaSkgewotICAgICAgICBjb25zdCBUVmFyaWFibGVJbmZvJiB2
YXJpYWJsZSA9IHZhcmlhYmxlc1tpaV07Ci0gICAgICAgIGlmIChHZXROdW1Db21wb25lbnRzUGVy
Um93KHZhcmlhYmxlLnR5cGUpICE9IDMpIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIG51bTNDb2x1bW5Sb3dzICs9IEdldE51bVJvd3ModmFyaWFibGUudHlwZSkgKiB2
YXJpYWJsZS5zaXplOwotICAgIH0KLQotICAgIGlmICh0b3BOb25GdWxsUm93XyArIG51bTNDb2x1
bW5Sb3dzID4gbWF4Um93c18pIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IGZpbGxDb2x1bW5zKHRvcE5vbkZ1bGxSb3dfLCBudW0zQ29sdW1uUm93cywgMCwgMyk7Ci0KLSAg
ICAvLyBQYWNrcyB0aGUgMiBjb2x1bW4gdmFyaWFibGVzLgotICAgIGludCB0b3AyQ29sdW1uUm93
ID0gdG9wTm9uRnVsbFJvd18gKyBudW0zQ29sdW1uUm93czsKLSAgICBpbnQgdHdvQ29sdW1uUm93
c0F2YWlsYWJsZSA9IG1heFJvd3NfIC0gdG9wMkNvbHVtblJvdzsKLSAgICBpbnQgcm93c0F2YWls
YWJsZUluQ29sdW1uczAxID0gdHdvQ29sdW1uUm93c0F2YWlsYWJsZTsKLSAgICBpbnQgcm93c0F2
YWlsYWJsZUluQ29sdW1uczIzID0gdHdvQ29sdW1uUm93c0F2YWlsYWJsZTsKLSAgICBmb3IgKDsg
aWkgPCB2YXJpYWJsZXMuc2l6ZSgpOyArK2lpKSB7Ci0gICAgICAgIGNvbnN0IFRWYXJpYWJsZUlu
Zm8mIHZhcmlhYmxlID0gdmFyaWFibGVzW2lpXTsKLSAgICAgICAgaWYgKEdldE51bUNvbXBvbmVu
dHNQZXJSb3codmFyaWFibGUudHlwZSkgIT0gMikgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgaW50IG51bVJvd3MgPSBHZXROdW1Sb3dzKHZhcmlhYmxlLnR5cGUpICog
dmFyaWFibGUuc2l6ZTsKLSAgICAgICAgaWYgKG51bVJvd3MgPD0gcm93c0F2YWlsYWJsZUluQ29s
dW1uczAxKSB7Ci0gICAgICAgICAgICByb3dzQXZhaWxhYmxlSW5Db2x1bW5zMDEgLT0gbnVtUm93
czsKLSAgICAgICAgfSBlbHNlIGlmIChudW1Sb3dzIDw9IHJvd3NBdmFpbGFibGVJbkNvbHVtbnMy
MykgewotICAgICAgICAgICAgcm93c0F2YWlsYWJsZUluQ29sdW1uczIzIC09IG51bVJvd3M7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpbnQgbnVtUm93c1VzZWRJbkNvbHVtbnMwMSA9Ci0gICAgICAgIHR3b0NvbHVt
blJvd3NBdmFpbGFibGUgLSByb3dzQXZhaWxhYmxlSW5Db2x1bW5zMDE7Ci0gICAgaW50IG51bVJv
d3NVc2VkSW5Db2x1bW5zMjMgPQotICAgICAgICB0d29Db2x1bW5Sb3dzQXZhaWxhYmxlIC0gcm93
c0F2YWlsYWJsZUluQ29sdW1uczIzOwotICAgIGZpbGxDb2x1bW5zKHRvcDJDb2x1bW5Sb3csIG51
bVJvd3NVc2VkSW5Db2x1bW5zMDEsIDAsIDIpOwotICAgIGZpbGxDb2x1bW5zKG1heFJvd3NfIC0g
bnVtUm93c1VzZWRJbkNvbHVtbnMyMywgbnVtUm93c1VzZWRJbkNvbHVtbnMyMywKLSAgICAgICAg
ICAgICAgICAyLCAyKTsKLQotICAgIC8vIFBhY2tzIHRoZSAxIGNvbHVtbiB2YXJpYWJsZXMuCi0g
ICAgZm9yICg7IGlpIDwgdmFyaWFibGVzLnNpemUoKTsgKytpaSkgewotICAgICAgICBjb25zdCBU
VmFyaWFibGVJbmZvJiB2YXJpYWJsZSA9IHZhcmlhYmxlc1tpaV07Ci0gICAgICAgIEFTU0VSVCgx
ID09IEdldE51bUNvbXBvbmVudHNQZXJSb3codmFyaWFibGUudHlwZSkpOwotICAgICAgICBpbnQg
bnVtUm93cyA9IEdldE51bVJvd3ModmFyaWFibGUudHlwZSkgKiB2YXJpYWJsZS5zaXplOwotICAg
ICAgICBpbnQgc21hbGxlc3RDb2x1bW4gPSAtMTsKLSAgICAgICAgaW50IHNtYWxsZXN0U2l6ZSA9
IG1heFJvd3NfICsgMTsKLSAgICAgICAgaW50IHRvcFJvdyA9IC0xOwotICAgICAgICBmb3IgKGlu
dCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBrTnVtQ29sdW1uczsgKytjb2x1bW4pIHsKLSAgICAgICAg
ICAgIGludCByb3cgPSAwOwotICAgICAgICAgICAgaW50IHNpemUgPSAwOwotICAgICAgICAgICAg
aWYgKHNlYXJjaENvbHVtbihjb2x1bW4sIG51bVJvd3MsICZyb3csICZzaXplKSkgewotICAgICAg
ICAgICAgICAgIGlmIChzaXplIDwgc21hbGxlc3RTaXplKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHNtYWxsZXN0U2l6ZSA9IHNpemU7Ci0gICAgICAgICAgICAgICAgICAgIHNtYWxsZXN0Q29sdW1u
ID0gY29sdW1uOwotICAgICAgICAgICAgICAgICAgICB0b3BSb3cgPSByb3c7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNtYWxsZXN0
Q29sdW1uIDwgMCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZmlsbENvbHVtbnModG9wUm93LCBudW1Sb3dzLCBzbWFsbGVzdENvbHVtbiwgMSk7Ci0g
ICAgfQotCi0gICAgQVNTRVJUKHZhcmlhYmxlcy5zaXplKCkgPT0gaWkpOwotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvVmFyaWFibGVQYWNrZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9WYXJpYWJsZVBhY2tlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4
OTg3MDY2Y2MzN2NmZDc0MjMwZmEyNWJjMmFlMGU2Yzk5YzZkOGY1Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9WYXJpYWJsZVBhY2tlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBA
QAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBfVkFSSUFCTEVQQUNLRVJfSU5DTFVERURf
Ci0jZGVmaW5lIF9WQVJJQUJMRVBBQ0tFUl9JTkNMVURFRF8KLQotI2luY2x1ZGUgPHZlY3Rvcj4K
LSNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgotCi1jbGFzcyBWYXJpYWJsZVBhY2tlciB7
Ci0gcHVibGljOgotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGFzc2VkIGluIHZhcmlhYmxl
cyBwYWNrIGluIG1heFZlY3RvcnMgZm9sbG93aW5nCi0gICAgLy8gdGhlIHBhY2tpbmcgcnVsZXMg
ZnJvbSB0aGUgR0xTTCAxLjAxNyBzcGVjLCBBcHBlbmRpeCBBLCBzZWN0aW9uIDcuCi0gICAgYm9v
bCBDaGVja1ZhcmlhYmxlc1dpdGhpblBhY2tpbmdMaW1pdHMoCi0gICAgICAgIGludCBtYXhWZWN0
b3JzLAotICAgICAgICBjb25zdCBUVmFyaWFibGVJbmZvTGlzdCYgaW5fdmFyaWFibGVzKTsKLQot
ICAgIC8vIEdldHMgaG93IG1hbnkgY29tcG9uZW50cyBpbiBhIHJvdyBhIGRhdGEgdHlwZSB0YWtl
cy4KLSAgICBzdGF0aWMgaW50IEdldE51bUNvbXBvbmVudHNQZXJSb3coU2hEYXRhVHlwZSB0eXBl
KTsKLQotICAgIC8vIEdldHMgaG93IG1hbnkgcm93cyBhIGRhdGEgdHlwZSB0YWtlcy4KLSAgICBz
dGF0aWMgaW50IEdldE51bVJvd3MoU2hEYXRhVHlwZSB0eXBlKTsKLQotIHByaXZhdGU6Ci0gICAg
c3RhdGljIGNvbnN0IGludCBrTnVtQ29sdW1ucyA9IDQ7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGtDb2x1bW5NYXNrID0gKDEgPDwga051bUNvbHVtbnMpIC0gMTsKLQotICAgIHVuc2lnbmVk
IG1ha2VDb2x1bW5GbGFncyhpbnQgY29sdW1uLCBpbnQgbnVtQ29tcG9uZW50c1BlclJvdyk7Ci0g
ICAgdm9pZCBmaWxsQ29sdW1ucyhpbnQgdG9wUm93LCBpbnQgbnVtUm93cywgaW50IGNvbHVtbiwg
aW50IG51bUNvbXBvbmVudHNQZXJSb3cpOwotICAgIGJvb2wgc2VhcmNoQ29sdW1uKGludCBjb2x1
bW4sIGludCBudW1Sb3dzLCBpbnQqIGRlc3RSb3csIGludCogZGVzdFNpemUpOwotCi0gICAgaW50
IHRvcE5vbkZ1bGxSb3dfOwotICAgIGludCBib3R0b21Ob25GdWxsUm93XzsKLSAgICBpbnQgbWF4
Um93c187Ci0gICAgc3RkOjp2ZWN0b3I8dW5zaWduZWQ+IHJvd3NfOwotfTsKLQotI2VuZGlmIC8v
IF9WQVJJQUJMRVBBQ0tFUl9JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9WZXJzaW9uR0xTTC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA3YTgyYmI0ZGMxN2Q2MDUzMzU0ZTFhZmUzOTQ5ZWM4ZTU3ZmZhOWQxLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9WZXJzaW9uR0xTTC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwx
NDAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL1ZlcnNp
b25HTFNMLmgiCi0KLXN0YXRpYyBjb25zdCBpbnQgR0xTTF9WRVJTSU9OXzExMCA9IDExMDsKLXN0
YXRpYyBjb25zdCBpbnQgR0xTTF9WRVJTSU9OXzEyMCA9IDEyMDsKLQotLy8gV2UgbmVlZCB0byBz
Y2FuIGZvciB0aGUgZm9sbG93aW5nOgotLy8gMS4gImludmFyaWFudCIga2V5d29yZDogVGhpcyBj
YW4gb2NjdXIgaW4gYm90aCAtIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycwotLy8gICAgYnV0
IG9ubHkgYXQgdGhlIGdsb2JhbCBzY29wZS4KLS8vIDIuICJnbF9Qb2ludENvb3JkIiBidWlsdC1p
biB2YXJpYWJsZTogVGhpcyBjYW4gb25seSBvY2N1ciBpbiBmcmFnbWVudCBzaGFkZXIKLS8vICAg
IGJ1dCBpbnNpZGUgYW55IHNjb3BlLgotLy8gMy4gQ2FsbCB0byBhIG1hdHJpeCBjb25zdHJ1Y3Rv
ciB3aXRoIGFub3RoZXIgbWF0cml4IGFzIGFyZ3VtZW50LgotLy8gICAgKFRoZXNlIGNvbnN0cnVj
dG9ycyB3ZXJlIHJlc2VydmVkIGluIEdMU0wgdmVyc2lvbiAxLjEwLikKLS8vIDQuIEFycmF5cyBh
cyAib3V0IiBmdW5jdGlvbiBwYXJhbWV0ZXJzLgotLy8gICAgR0xTTCBzcGVjIHNlY3Rpb24gNi4x
LjE6ICJXaGVuIGNhbGxpbmcgYSBmdW5jdGlvbiwgZXhwcmVzc2lvbnMgdGhhdCBkbwotLy8gICAg
bm90IGV2YWx1YXRlIHRvIGwtdmFsdWVzIGNhbm5vdCBiZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBk
ZWNsYXJlZCBhcwotLy8gICAgb3V0IG9yIGlub3V0LiIKLS8vICAgIEdMU0wgMS4xIHNlY3Rpb24g
NS44OiAiT3RoZXIgYmluYXJ5IG9yIHVuYXJ5IGV4cHJlc3Npb25zLAotLy8gICAgbm9uLWRlcmVm
ZXJlbmNlZCBhcnJheXMsIGZ1bmN0aW9uIG5hbWVzLCBzd2l6emxlcyB3aXRoIHJlcGVhdGVkIGZp
ZWxkcywKLS8vICAgIGFuZCBjb25zdGFudHMgY2Fubm90IGJlIGwtdmFsdWVzLiIKLS8vICAgIEdM
U0wgMS4yIHJlbGF4ZWQgdGhlIHJlc3RyaWN0aW9uIG9uIGFycmF5cywgc2VjdGlvbiA1Ljg6ICJW
YXJpYWJsZXMgdGhhdAotLy8gICAgYXJlIGJ1aWx0LWluIHR5cGVzLCBlbnRpcmUgc3RydWN0dXJl
cyBvciBhcnJheXMuLi4gYXJlIGFsbCBsLXZhbHVlcy4iCi0vLwotLy8gVE9ETyhhbG9rcCk6IFRo
ZSBmb2xsb3dpbmcgdHdvIGNhc2VzIG9mIGludmFyaWFudCBkZWNhbGFyYXRpb24gZ2V0IGxvc3QK
LS8vIGR1cmluZyBwYXJzaW5nIC0gdGhleSBkbyBub3QgZ2V0IGNhcnJpZWQgb3ZlciB0byB0aGUg
aW50ZXJtZWRpYXRlIHRyZWUuCi0vLyBIYW5kbGUgdGhlc2UgY2FzZXM6Ci0vLyAxLiBXaGVuIGEg
cHJhZ21hIGlzIHVzZWQgdG8gZm9yY2UgYWxsIG91dHB1dCB2YXJpYWJsZXMgdG8gYmUgaW52YXJp
YW50OgotLy8gICAgLSAjcHJhZ21hIFNUREdMIGludmFyaWFudChhbGwpCi0vLyAyLiBXaGVuIGEg
cHJldmlvdXNseSBkZWNhbGFyZWQgb3IgYnVpbHQtaW4gdmFyaWFibGUgaXMgbWFya2VkIGludmFy
aWFudDoKLS8vICAgIC0gaW52YXJpYW50IGdsX1Bvc2l0aW9uOwotLy8gICAgLSB2YXJ5aW5nIHZl
YzMgY29sb3I7IGludmFyaWFudCBjb2xvcjsKLS8vCi1UVmVyc2lvbkdMU0w6OlRWZXJzaW9uR0xT
TChTaFNoYWRlclR5cGUgdHlwZSkKLSAgICA6IG1TaGFkZXJUeXBlKHR5cGUpLAotICAgICAgbVZl
cnNpb24oR0xTTF9WRVJTSU9OXzExMCkKLXsKLX0KLQotdm9pZCBUVmVyc2lvbkdMU0w6OnZpc2l0
U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCi17Ci0gICAgaWYgKG5vZGUtPmdldFN5bWJvbCgp
ID09ICJnbF9Qb2ludENvb3JkIikKLSAgICAgICAgdXBkYXRlVmVyc2lvbihHTFNMX1ZFUlNJT05f
MTIwKTsKLX0KLQotdm9pZCBUVmVyc2lvbkdMU0w6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJt
Q29uc3RhbnRVbmlvbiopCi17Ci19Ci0KLWJvb2wgVFZlcnNpb25HTFNMOjp2aXNpdEJpbmFyeShW
aXNpdCwgVEludGVybUJpbmFyeSopCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVFZl
cnNpb25HTFNMOjp2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkqKQotewotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFRWZXJzaW9uR0xTTDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQsIFRJ
bnRlcm1TZWxlY3Rpb24qKQotewotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFRWZXJzaW9u
R0xTTDo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCi17Ci0g
ICAgYm9vbCB2aXNpdENoaWxkcmVuID0gdHJ1ZTsKLQotICAgIHN3aXRjaCAobm9kZS0+Z2V0T3Ao
KSkgewotICAgICAgY2FzZSBFT3BTZXF1ZW5jZToKLSAgICAgICAgLy8gV2UgbmVlZCB0byB2aXNp
dCBzZXF1ZW5jZSBjaGlsZHJlbiB0byBnZXQgdG8gZ2xvYmFsIG9yIGlubmVyIHNjb3BlLgotICAg
ICAgICB2aXNpdENoaWxkcmVuID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVP
cERlY2xhcmF0aW9uOiB7Ci0gICAgICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2Ug
PSBub2RlLT5nZXRTZXF1ZW5jZSgpOwotICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHNl
cXVlbmNlLmZyb250KCktPmdldEFzVHlwZWQoKS0+Z2V0UXVhbGlmaWVyKCk7Ci0gICAgICAgIGlm
ICgocXVhbGlmaWVyID09IEV2cUludmFyaWFudFZhcnlpbmdJbikgfHwKLSAgICAgICAgICAgIChx
dWFsaWZpZXIgPT0gRXZxSW52YXJpYW50VmFyeWluZ091dCkpIHsKLSAgICAgICAgICAgIHVwZGF0
ZVZlcnNpb24oR0xTTF9WRVJTSU9OXzEyMCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgICB9Ci0gICAgICBjYXNlIEVPcFBhcmFtZXRlcnM6IHsKLSAgICAgICAgY29uc3QgVEludGVy
bVNlcXVlbmNlJiBwYXJhbXMgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOwotICAgICAgICBmb3IgKFRJ
bnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHBhcmFtcy5iZWdpbigpOwotICAg
ICAgICAgICAgIGl0ZXIgIT0gcGFyYW1zLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGNvbnN0IFRJbnRlcm1UeXBlZCogcGFyYW0gPSAoKml0ZXIpLT5nZXRBc1R5cGVkKCk7
Ci0gICAgICAgICAgICBpZiAocGFyYW0tPmlzQXJyYXkoKSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHBhcmFtLT5nZXRRdWFsaWZpZXIoKTsK
LSAgICAgICAgICAgICAgICBpZiAoKHF1YWxpZmllciA9PSBFdnFPdXQpIHx8IChxdWFsaWZpZXIg
PT0gIEV2cUluT3V0KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVw
ZGF0ZVZlcnNpb24oR0xTTF9WRVJTSU9OXzEyMCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAv
LyBGdWxseSBwcm9jZXNzZWQuIE5vIG5lZWQgdG8gdmlzaXQgY2hpbGRyZW4uCi0gICAgICAgIHZp
c2l0Q2hpbGRyZW4gPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNl
IEVPcENvbnN0cnVjdE1hdDI6Ci0gICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6Ci0gICAgICBj
YXNlIEVPcENvbnN0cnVjdE1hdDQ6IHsKLSAgICAgICAgY29uc3QgVEludGVybVNlcXVlbmNlJiBz
ZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAgIGlmIChzZXF1ZW5jZS5zaXpl
KCkgPT0gMSkgewotICAgICAgICAgIFRJbnRlcm1UeXBlZCogdHlwZWQgPSBzZXF1ZW5jZS5mcm9u
dCgpLT5nZXRBc1R5cGVkKCk7Ci0gICAgICAgICAgaWYgKHR5cGVkICYmIHR5cGVkLT5pc01hdHJp
eCgpKSB7Ci0gICAgICAgICAgICB1cGRhdGVWZXJzaW9uKEdMU0xfVkVSU0lPTl8xMjApOwotICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgZGVm
YXVsdDogYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZpc2l0Q2hpbGRyZW47Ci19Ci0KLWJv
b2wgVFZlcnNpb25HTFNMOjp2aXNpdExvb3AoVmlzaXQsIFRJbnRlcm1Mb29wKikKLXsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBUVmVyc2lvbkdMU0w6OnZpc2l0QnJhbmNoKFZpc2l0LCBU
SW50ZXJtQnJhbmNoKikKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBUVmVyc2lvbkdM
U0w6OnVwZGF0ZVZlcnNpb24oaW50IHZlcnNpb24pCi17Ci0gICAgbVZlcnNpb24gPSBzdGQ6Om1h
eCh2ZXJzaW9uLCBtVmVyc2lvbik7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9WZXJzaW9uR0xTTC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNMLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDFjMWNiMWFiOTdiOWRlNWVkNDdhOTEwNDhiMmU2ZDMzYmVjN2ViYTYuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNMLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCww
IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1ZFUlNJT05HTFNMX0hf
Ci0jZGVmaW5lIENPTVBJTEVSX1ZFUlNJT05HTFNMX0hfCi0KLSNpbmNsdWRlICJHTFNMQU5HL1No
YWRlckxhbmcuaCIKLSNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKLQotLy8gVHJh
dmVyc2VzIHRoZSBpbnRlcm1lZGlhdGUgdHJlZSB0byByZXR1cm4gdGhlIG1pbmltdW0gR0xTTCB2
ZXJzaW9uCi0vLyByZXF1aXJlZCB0byBsZWdhbGx5IGFjY2VzcyBhbGwgYnVpbHQtaW4gZmVhdHVy
ZXMgdXNlZCBpbiB0aGUgc2hhZGVyLgotLy8gR0xTTCAxLjEgd2hpY2ggaXMgbWFuZGF0ZWQgYnkg
T3BlbkdMIDIuMCBwcm92aWRlczoKLS8vICAgLSAjdmVyc2lvbiBhbmQgI2V4dGVuc2lvbiB0byBk
ZWNsYXJlIHZlcnNpb24gYW5kIGV4dGVuc2lvbnMuCi0vLyAgIC0gYnVpbHQtaW4gZnVuY3Rpb25z
IHJlZnJhY3QsIGV4cCwgYW5kIGxvZy4KLS8vICAgLSB1cGRhdGVkIHN0ZXAoKSB0byBjb21wYXJl
IHggPCBlZGdlIGluc3RlYWQgb2YgeCA8PSBlZGdlLgotLy8gR0xTTCAxLjIgd2hpY2ggaXMgbWFu
ZGF0ZWQgYnkgT3BlbkdMIDIuMSBwcm92aWRlczoKLS8vICAgLSBtYW55IGNoYW5nZXMgdG8gcmVk
dWNlIGRpZmZlcmVuY2VzIHdoZW4gY29tcGFyZWQgdG8gdGhlIEVTIHNwZWNpZmljYXRpb24uCi0v
LyAgIC0gaW52YXJpYW50IGtleXdvcmQgYW5kIGl0cyBzdXBwb3J0LgotLy8gICAtIGMrKyBzdHls
ZSBuYW1lIGhpZGluZyBydWxlcy4KLS8vICAgLSBidWlsdC1pbiB2YXJpYWJsZSBnbF9Qb2ludENv
b3JkIGZvciBmcmFnbWVudCBzaGFkZXJzLgotLy8gICAtIG1hdHJpeCBjb25zdHJ1Y3RvcnMgdGFr
aW5nIG1hdHJpeCBhcyBhcmd1bWVudC4KLS8vICAgLSBhcnJheSBhcyAib3V0IiBmdW5jdGlvbiBw
YXJhbWV0ZXJzCi0vLwotY2xhc3MgVFZlcnNpb25HTFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJz
ZXIgewotcHVibGljOgotICAgIFRWZXJzaW9uR0xTTChTaFNoYWRlclR5cGUgdHlwZSk7Ci0KLSAg
ICAvLyBSZXR1cm5zIDEyMCBpZiB0aGUgZm9sbG93aW5nIGlzIHVzZWQgdGhlIHNoYWRlcjoKLSAg
ICAvLyAtICJpbnZhcmlhbnQiLAotICAgIC8vIC0gImdsX1BvaW50Q29vcmQiLAotICAgIC8vIC0g
bWF0cml4L21hdHJpeCBjb25zdHJ1Y3RvcnMKLSAgICAvLyAtIGFycmF5ICJvdXQiIHBhcmFtZXRl
cnMKLSAgICAvLyBFbHNlIDExMCBpcyByZXR1cm5lZC4KLSAgICBpbnQgZ2V0VmVyc2lvbigpIHsg
cmV0dXJuIG1WZXJzaW9uOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVy
bVN5bWJvbCopOwotICAgIHZpcnR1YWwgdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNv
bnN0YW50VW5pb24qKTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRl
cm1CaW5hcnkqKTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRVbmFyeShWaXNpdCwgVEludGVybVVu
YXJ5Kik7Ci0gICAgdmlydHVhbCBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0LCBUSW50ZXJtU2Vs
ZWN0aW9uKik7Ci0gICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJt
QWdncmVnYXRlKik7Ci0gICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxv
b3AqKTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQsIFRJbnRlcm1CcmFuY2gq
KTsKLQotcHJvdGVjdGVkOgotICAgIHZvaWQgdXBkYXRlVmVyc2lvbihpbnQgdmVyc2lvbik7Ci0K
LXByaXZhdGU6Ci0gICAgU2hTaGFkZXJUeXBlIG1TaGFkZXJUeXBlOwotICAgIGludCBtVmVyc2lv
bjsKLX07Ci0KLSNlbmRpZiAgLy8gQ09NUElMRVJfVkVSU0lPTkdMU0xfSF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAzOGQ1NWFjYWY2N2FmYTJlMTAyODk1YzQ2OTRjNTk3OTVkNzdiNTM5Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwz
NyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBkZWJ1Zy5jcHA6IERlYnVnZ2luZyB1
dGlsaXRpZXMuCi0KLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgotCi0jaW5jbHVkZSA8c3Rk
YXJnLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxp
emVQYXJzZUNvbnRleHQuaCIKLSNpbmNsdWRlICJjb21waWxlci9QYXJzZUNvbnRleHQuaCIKLQot
I2lmZGVmIFRSQUNFX0VOQUJMRUQKLXN0YXRpYyBjb25zdCBpbnQga1RyYWNlQnVmZmVyTGVuID0g
MTAyNDsKLQotZXh0ZXJuICJDIiB7Ci12b2lkIFRyYWNlKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4u
KSB7Ci0gICAgaWYgKCFmb3JtYXQpIHJldHVybjsKLQotICAgIFRQYXJzZUNvbnRleHQqIHBhcnNl
Q29udGV4dCA9IEdldEdsb2JhbFBhcnNlQ29udGV4dCgpOwotICAgIGlmIChwYXJzZUNvbnRleHQp
IHsKLSAgICAgICAgY2hhciBidWZba1RyYWNlQnVmZmVyTGVuXTsKLSAgICAgICAgdmFfbGlzdCBh
cmdzOwotICAgICAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOwotICAgICAgICB2c25wcmludGYo
YnVmLCBrVHJhY2VCdWZmZXJMZW4sIGZvcm1hdCwgYXJncyk7Ci0gICAgICAgIHZhX2VuZChhcmdz
KTsKLQotICAgICAgICBwYXJzZUNvbnRleHQtPnRyYWNlKGJ1Zik7Ci0gICAgfQotfQotfSAgLy8g
ZXh0ZXJuICJDIgotI2VuZGlmICAvLyBUUkFDRV9FTkFCTEVECi0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDdhMzcxNTE2YWYwZmVlYzYxZjQ2ZWUxMTgyMWJhMjhkMzUxZGQ0OWUuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2RlYnVnLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0vLwotCi0vLyBkZWJ1Zy5oOiBEZWJ1Z2dpbmcgdXRpbGl0aWVzLgotCi0j
aWZuZGVmIENPTVBJTEVSX0RFQlVHX0hfCi0jZGVmaW5lIENPTVBJTEVSX0RFQlVHX0hfCi0KLSNp
bmNsdWRlIDxhc3NlcnQuaD4KLQotI2lmZGVmIF9ERUJVRwotI2RlZmluZSBUUkFDRV9FTkFCTEVE
ICAvLyBkZWZpbmUgdG8gZW5hYmxlIGRlYnVnIG1lc3NhZ2UgdHJhY2luZwotI2VuZGlmICAvLyBf
REVCVUcKLQotLy8gT3V0cHV0cyB0ZXh0IHRvIHRoZSBkZWJ1ZyBsb2cKLSNpZmRlZiBUUkFDRV9F
TkFCTEVECi0KLSNpZmRlZiAgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmICAvLyBf
X2NwbHVzcGx1cwotdm9pZCBUcmFjZShjb25zdCBjaGFyKiBmb3JtYXQsIC4uLik7Ci0jaWZkZWYg
IF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYgIC8vIF9fY3BsdXNwbHVzCi0KLSNlbHNlICAgLy8gVFJB
Q0VfRU5BQkxFRAotCi0jZGVmaW5lIFRyYWNlKC4uLikgKCh2b2lkKTApCi0KLSNlbmRpZiAgLy8g
VFJBQ0VfRU5BQkxFRAotCi0vLyBBIG1hY3JvIGFzc2VydGluZyBhIGNvbmRpdGlvbiBhbmQgb3V0
cHV0dGluZyBmYWlsdXJlcyB0byB0aGUgZGVidWcgbG9nCi0jZGVmaW5lIEFTU0VSVChleHByZXNz
aW9uKSBkbyB7IFwKLSAgICBpZighKGV4cHJlc3Npb24pKSBcCi0gICAgICAgIFRyYWNlKCJBc3Nl
cnQgZmFpbGVkOiAlcyglZCk6ICIjZXhwcmVzc2lvbiJcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5F
X18pOyBcCi0gICAgYXNzZXJ0KGV4cHJlc3Npb24pOyBcCi19IHdoaWxlKDApCi0KLSNkZWZpbmUg
VU5JTVBMRU1FTlRFRCgpIGRvIHsgXAotICAgIFRyYWNlKCJVbmltcGxlbWVudGVkIGludm9rZWQ6
ICVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7IFwKLSAgICBhc3NlcnQoZmFsc2Up
OyBcCi19IHdoaWxlKDApCi0KLSNkZWZpbmUgVU5SRUFDSEFCTEUoKSBkbyB7IFwKLSAgICBUcmFj
ZSgiVW5yZWFjaGFibGUgcmVhY2hlZDogJXMoJWQpXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9f
KTsgXAotICAgIGFzc2VydChmYWxzZSk7IFwKLX0gd2hpbGUoMCkKLQotI2VuZGlmICAgLy8gQ09N
UElMRVJfREVCVUdfSF8KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E2NjFkNjc2Nzg5YTY5M2NiMjY3ODQ0MDFkZGQxNzA1
NTZlMDgzOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdy
YXBoLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0j
cHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcxOCkKLQotI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdy
YXBoL0RlcGVuZGVuY3lHcmFwaC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVu
ZGVuY3lHcmFwaEJ1aWxkZXIuaCIKLQotVERlcGVuZGVuY3lHcmFwaDo6VERlcGVuZGVuY3lHcmFw
aChUSW50ZXJtTm9kZSogaW50ZXJtTm9kZSkKLXsKLSAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRl
cjo6YnVpbGQoaW50ZXJtTm9kZSwgdGhpcyk7Ci19Ci0KLVREZXBlbmRlbmN5R3JhcGg6On5URGVw
ZW5kZW5jeUdyYXBoKCkKLXsKLSAgICBmb3IgKFRHcmFwaE5vZGVWZWN0b3I6OmNvbnN0X2l0ZXJh
dG9yIGl0ZXIgPSBtQWxsTm9kZXMuYmVnaW4oKTsgaXRlciAhPSBtQWxsTm9kZXMuZW5kKCk7ICsr
aXRlcikKLSAgICB7Ci0gICAgICAgIFRHcmFwaE5vZGUqIG5vZGUgPSAqaXRlcjsKLSAgICAgICAg
ZGVsZXRlIG5vZGU7Ci0gICAgfQotfQotCi1UR3JhcGhBcmd1bWVudCogVERlcGVuZGVuY3lHcmFw
aDo6Y3JlYXRlQXJndW1lbnQoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcmd1
bWVudE51bWJlcikKLXsKLSAgICBUR3JhcGhBcmd1bWVudCogYXJndW1lbnQgPSBuZXcgVEdyYXBo
QXJndW1lbnQoaW50ZXJtRnVuY3Rpb25DYWxsLCBhcmd1bWVudE51bWJlcik7Ci0gICAgbUFsbE5v
ZGVzLnB1c2hfYmFjayhhcmd1bWVudCk7Ci0gICAgcmV0dXJuIGFyZ3VtZW50OwotfQotCi1UR3Jh
cGhGdW5jdGlvbkNhbGwqIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUZ1bmN0aW9uQ2FsbChUSW50
ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpCi17Ci0gICAgVEdyYXBoRnVuY3Rpb25D
YWxsKiBmdW5jdGlvbkNhbGwgPSBuZXcgVEdyYXBoRnVuY3Rpb25DYWxsKGludGVybUZ1bmN0aW9u
Q2FsbCk7Ci0gICAgbUFsbE5vZGVzLnB1c2hfYmFjayhmdW5jdGlvbkNhbGwpOwotICAgIGlmIChm
dW5jdGlvbkNhbGwtPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpLT5pc1VzZXJEZWZpbmVkKCkpCi0g
ICAgICAgIG1Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMucHVzaF9iYWNrKGZ1bmN0aW9uQ2FsbCk7
Ci0gICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKLX0KLQotVEdyYXBoU3ltYm9sKiBURGVwZW5kZW5j
eUdyYXBoOjpnZXRPckNyZWF0ZVN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wpCi17
Ci0gICAgVFN5bWJvbElkTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbVN5bWJvbElkTWFwLmZp
bmQoaW50ZXJtU3ltYm9sLT5nZXRJZCgpKTsKLQotICAgIFRHcmFwaFN5bWJvbCogc3ltYm9sID0g
TlVMTDsKLQotICAgIGlmIChpdGVyICE9IG1TeW1ib2xJZE1hcC5lbmQoKSkgewotICAgICAgICBU
U3ltYm9sSWRQYWlyIHBhaXIgPSAqaXRlcjsKLSAgICAgICAgc3ltYm9sID0gcGFpci5zZWNvbmQ7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3ltYm9sID0gbmV3IFRHcmFwaFN5bWJvbChpbnRlcm1T
eW1ib2wpOwotICAgICAgICBtQWxsTm9kZXMucHVzaF9iYWNrKHN5bWJvbCk7Ci0KLSAgICAgICAg
VFN5bWJvbElkUGFpciBwYWlyKGludGVybVN5bWJvbC0+Z2V0SWQoKSwgc3ltYm9sKTsKLSAgICAg
ICAgbVN5bWJvbElkTWFwLmluc2VydChwYWlyKTsKLQotICAgICAgICAvLyBXZSBzYXZlIGFsbCBz
YW1wbGVyIHN5bWJvbHMgaW4gYSBjb2xsZWN0aW9uLCBzbyB3ZSBjYW4gc3RhcnQgZ3JhcGggdHJh
dmVyc2FscyBmcm9tIHRoZW0gcXVpY2tseS4KLSAgICAgICAgaWYgKElzU2FtcGxlcihpbnRlcm1T
eW1ib2wtPmdldEJhc2ljVHlwZSgpKSkKLSAgICAgICAgICAgIG1TYW1wbGVyU3ltYm9scy5wdXNo
X2JhY2soc3ltYm9sKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3ltYm9sOwotfQotCi1UR3JhcGhT
ZWxlY3Rpb24qIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZVNlbGVjdGlvbihUSW50ZXJtU2VsZWN0
aW9uKiBpbnRlcm1TZWxlY3Rpb24pCi17Ci0gICAgVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24g
PSBuZXcgVEdyYXBoU2VsZWN0aW9uKGludGVybVNlbGVjdGlvbik7Ci0gICAgbUFsbE5vZGVzLnB1
c2hfYmFjayhzZWxlY3Rpb24pOwotICAgIHJldHVybiBzZWxlY3Rpb247Ci19Ci0KLVRHcmFwaExv
b3AqIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUxvb3AoVEludGVybUxvb3AqIGludGVybUxvb3Ap
Ci17Ci0gICAgVEdyYXBoTG9vcCogbG9vcCA9IG5ldyBUR3JhcGhMb29wKGludGVybUxvb3ApOwot
ICAgIG1BbGxOb2Rlcy5wdXNoX2JhY2sobG9vcCk7Ci0gICAgcmV0dXJuIGxvb3A7Ci19Ci0KLVRH
cmFwaExvZ2ljYWxPcCogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlTG9naWNhbE9wKFRJbnRlcm1C
aW5hcnkqIGludGVybUxvZ2ljYWxPcCkKLXsKLSAgICBUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxP
cCA9IG5ldyBUR3JhcGhMb2dpY2FsT3AoaW50ZXJtTG9naWNhbE9wKTsKLSAgICBtQWxsTm9kZXMu
cHVzaF9iYWNrKGxvZ2ljYWxPcCk7Ci0gICAgcmV0dXJuIGxvZ2ljYWxPcDsKLX0KLQotY29uc3Qg
Y2hhciogVEdyYXBoTG9naWNhbE9wOjpnZXRPcFN0cmluZygpIGNvbnN0Ci17Ci0gICAgY29uc3Qg
Y2hhciogb3BTdHJpbmcgPSBOVUxMOwotICAgIHN3aXRjaCAoZ2V0SW50ZXJtTG9naWNhbE9wKCkt
PmdldE9wKCkpIHsKLSAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiBvcFN0cmluZyA9ICJhbmQi
OyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6IG9wU3RyaW5nID0gIm9yIjsgYnJl
YWs7Ci0gICAgICAgIGRlZmF1bHQ6IG9wU3RyaW5nID0gInVua25vd24iOyBicmVhazsKLSAgICB9
Ci0gICAgcmV0dXJuIG9wU3RyaW5nOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTljMzVkMDBiN2EzMWQ5MjU3MTFlZjA1ZTg1
MjhkNDRmMWU3NjkyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRl
bmN5R3JhcGguaAorKysgL2Rldi9udWxsCkBAIC0xLDIxMiArMCwwIEBACi0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LQotI2lmbmRlZiBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0gKLSNkZWZpbmUg
Q09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9ICi0KLSNpbmNsdWRlICJjb21waWxl
ci9pbnRlcm1lZGlhdGUuaCIKLQotI2luY2x1ZGUgPHNldD4KLSNpbmNsdWRlIDxzdGFjaz4KLQot
Y2xhc3MgVEdyYXBoTm9kZTsKLWNsYXNzIFRHcmFwaFBhcmVudE5vZGU7Ci1jbGFzcyBUR3JhcGhB
cmd1bWVudDsKLWNsYXNzIFRHcmFwaEZ1bmN0aW9uQ2FsbDsKLWNsYXNzIFRHcmFwaFN5bWJvbDsK
LWNsYXNzIFRHcmFwaFNlbGVjdGlvbjsKLWNsYXNzIFRHcmFwaExvb3A7Ci1jbGFzcyBUR3JhcGhM
b2dpY2FsT3A7Ci1jbGFzcyBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyOwotY2xhc3MgVERlcGVu
ZGVuY3lHcmFwaE91dHB1dDsKLQotdHlwZWRlZiBzdGQ6OnNldDxUR3JhcGhOb2RlKj4gVEdyYXBo
Tm9kZVNldDsKLXR5cGVkZWYgc3RkOjp2ZWN0b3I8VEdyYXBoTm9kZSo+IFRHcmFwaE5vZGVWZWN0
b3I7Ci10eXBlZGVmIHN0ZDo6dmVjdG9yPFRHcmFwaFN5bWJvbCo+IFRHcmFwaFN5bWJvbFZlY3Rv
cjsKLXR5cGVkZWYgc3RkOjp2ZWN0b3I8VEdyYXBoRnVuY3Rpb25DYWxsKj4gVEZ1bmN0aW9uQ2Fs
bFZlY3RvcjsKLQotLy8KLS8vIEJhc2UgY2xhc3MgZm9yIGFsbCBkZXBlbmRlbmN5IGdyYXBoIG5v
ZGVzLgotLy8KLWNsYXNzIFRHcmFwaE5vZGUgewotcHVibGljOgotICAgIFRHcmFwaE5vZGUoVElu
dGVybU5vZGUqIG5vZGUpIDogaW50ZXJtTm9kZShub2RlKSB7fQotICAgIHZpcnR1YWwgflRHcmFw
aE5vZGUoKSB7fQotICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJh
dmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Ci1wcm90ZWN0ZWQ6Ci0gICAgVEludGVybU5vZGUqIGlu
dGVybU5vZGU7Ci19OwotCi0vLwotLy8gQmFzZSBjbGFzcyBmb3IgZGVwZW5kZW5jeSBncmFwaCBu
b2RlcyB0aGF0IG1heSBoYXZlIGNoaWxkcmVuLgotLy8KLWNsYXNzIFRHcmFwaFBhcmVudE5vZGUg
OiBwdWJsaWMgVEdyYXBoTm9kZSB7Ci1wdWJsaWM6Ci0gICAgVEdyYXBoUGFyZW50Tm9kZShUSW50
ZXJtTm9kZSogbm9kZSkgOiBUR3JhcGhOb2RlKG5vZGUpIHt9Ci0gICAgdmlydHVhbCB+VEdyYXBo
UGFyZW50Tm9kZSgpIHt9Ci0gICAgdm9pZCBhZGREZXBlbmRlbnROb2RlKFRHcmFwaE5vZGUqIG5v
ZGUpIHsgaWYgKG5vZGUgIT0gdGhpcykgbURlcGVuZGVudE5vZGVzLmluc2VydChub2RlKTsgfQot
ICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFw
aFRyYXZlcnNlcik7Ci1wcml2YXRlOgotICAgIFRHcmFwaE5vZGVTZXQgbURlcGVuZGVudE5vZGVz
OwotfTsKLQotLy8KLS8vIEhhbmRsZSBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50cy4KLS8vCi1jbGFz
cyBUR3JhcGhBcmd1bWVudCA6IHB1YmxpYyBUR3JhcGhQYXJlbnROb2RlIHsKLXB1YmxpYzoKLSAg
ICBUR3JhcGhBcmd1bWVudChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwsIGlu
dCBhcmd1bWVudE51bWJlcikKLSAgICAgICAgOiBUR3JhcGhQYXJlbnROb2RlKGludGVybUZ1bmN0
aW9uQ2FsbCkKLSAgICAgICAgLCBtQXJndW1lbnROdW1iZXIoYXJndW1lbnROdW1iZXIpIHt9Ci0g
ICAgdmlydHVhbCB+VEdyYXBoQXJndW1lbnQoKSB7fQotICAgIGNvbnN0IFRJbnRlcm1BZ2dyZWdh
dGUqIGdldEludGVybUZ1bmN0aW9uQ2FsbCgpIGNvbnN0IHsgcmV0dXJuIGludGVybU5vZGUtPmdl
dEFzQWdncmVnYXRlKCk7IH0KLSAgICBpbnQgZ2V0QXJndW1lbnROdW1iZXIoKSBjb25zdCB7IHJl
dHVybiBtQXJndW1lbnROdW1iZXI7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVu
ZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOwotcHJpdmF0ZToKLSAgICBpbnQg
bUFyZ3VtZW50TnVtYmVyOwotfTsKLQotLy8KLS8vIEhhbmRsZSBmdW5jdGlvbiBjYWxscy4KLS8v
Ci1jbGFzcyBUR3JhcGhGdW5jdGlvbkNhbGwgOiBwdWJsaWMgVEdyYXBoUGFyZW50Tm9kZSB7Ci1w
dWJsaWM6Ci0gICAgVEdyYXBoRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1
bmN0aW9uQ2FsbCkKLSAgICAgICAgOiBUR3JhcGhQYXJlbnROb2RlKGludGVybUZ1bmN0aW9uQ2Fs
bCkge30KLSAgICB2aXJ0dWFsIH5UR3JhcGhGdW5jdGlvbkNhbGwoKSB7fQotICAgIGNvbnN0IFRJ
bnRlcm1BZ2dyZWdhdGUqIGdldEludGVybUZ1bmN0aW9uQ2FsbCgpIGNvbnN0IHsgcmV0dXJuIGlu
dGVybU5vZGUtPmdldEFzQWdncmVnYXRlKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2Uo
VERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOwotfTsKLQotLy8KLS8v
IEhhbmRsZSBzeW1ib2xzLgotLy8KLWNsYXNzIFRHcmFwaFN5bWJvbCA6IHB1YmxpYyBUR3JhcGhQ
YXJlbnROb2RlIHsKLXB1YmxpYzoKLSAgICBUR3JhcGhTeW1ib2woVEludGVybVN5bWJvbCogaW50
ZXJtU3ltYm9sKSA6IFRHcmFwaFBhcmVudE5vZGUoaW50ZXJtU3ltYm9sKSB7fQotICAgIHZpcnR1
YWwgflRHcmFwaFN5bWJvbCgpIHt9Ci0gICAgY29uc3QgVEludGVybVN5bWJvbCogZ2V0SW50ZXJt
U3ltYm9sKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNTeW1ib2xOb2RlKCk7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3Jh
cGhUcmF2ZXJzZXIpOwotfTsKLQotLy8KLS8vIEhhbmRsZSBpZiBzdGF0ZW1lbnRzIGFuZCB0ZXJu
YXJ5IG9wZXJhdG9ycy4KLS8vCi1jbGFzcyBUR3JhcGhTZWxlY3Rpb24gOiBwdWJsaWMgVEdyYXBo
Tm9kZSB7Ci1wdWJsaWM6Ci0gICAgVEdyYXBoU2VsZWN0aW9uKFRJbnRlcm1TZWxlY3Rpb24qIGlu
dGVybVNlbGVjdGlvbikgOiBUR3JhcGhOb2RlKGludGVybVNlbGVjdGlvbikge30KLSAgICB2aXJ0
dWFsIH5UR3JhcGhTZWxlY3Rpb24oKSB7fQotICAgIGNvbnN0IFRJbnRlcm1TZWxlY3Rpb24qIGdl
dEludGVybVNlbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGludGVybU5vZGUtPmdldEFzU2VsZWN0
aW9uTm9kZSgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKLX07Ci0KLS8vCi0vLyBIYW5kbGUgZm9yLCBkby13
aGlsZSwgYW5kIHdoaWxlIGxvb3BzLgotLy8KLWNsYXNzIFRHcmFwaExvb3AgOiBwdWJsaWMgVEdy
YXBoTm9kZSB7Ci1wdWJsaWM6Ci0gICAgVEdyYXBoTG9vcChUSW50ZXJtTG9vcCogaW50ZXJtTG9v
cCkgOiBUR3JhcGhOb2RlKGludGVybUxvb3ApIHt9Ci0gICAgdmlydHVhbCB+VEdyYXBoTG9vcCgp
IHt9Ci0gICAgY29uc3QgVEludGVybUxvb3AqIGdldEludGVybUxvb3AoKSBjb25zdCB7IHJldHVy
biBpbnRlcm1Ob2RlLT5nZXRBc0xvb3BOb2RlKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhdmVy
c2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOwotfTsKLQotLy8K
LS8vIEhhbmRsZSBsb2dpY2FsIGFuZCwgb3IuCi0vLwotY2xhc3MgVEdyYXBoTG9naWNhbE9wIDog
cHVibGljIFRHcmFwaE5vZGUgewotcHVibGljOgotICAgIFRHcmFwaExvZ2ljYWxPcChUSW50ZXJt
QmluYXJ5KiBpbnRlcm1Mb2dpY2FsT3ApIDogVEdyYXBoTm9kZShpbnRlcm1Mb2dpY2FsT3ApIHt9
Ci0gICAgdmlydHVhbCB+VEdyYXBoTG9naWNhbE9wKCkge30KLSAgICBjb25zdCBUSW50ZXJtQmlu
YXJ5KiBnZXRJbnRlcm1Mb2dpY2FsT3AoKSBjb25zdCB7IHJldHVybiBpbnRlcm1Ob2RlLT5nZXRB
c0JpbmFyeU5vZGUoKTsgfQotICAgIGNvbnN0IGNoYXIqIGdldE9wU3RyaW5nKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBo
VHJhdmVyc2VyKTsKLX07Ci0KLS8vCi0vLyBBIGRlcGVuZGVuY3kgZ3JhcGggb2Ygc3ltYm9scywg
ZnVuY3Rpb24gY2FsbHMsIGNvbmRpdGlvbnMgZXRjLgotLy8KLS8vIFRoaXMgY2xhc3MgcHJvdmlk
ZXMgYW4gaW50ZXJmYWNlIHRvIHRoZSBlbnRyeSBwb2ludHMgb2YgdGhlIGRlcGVuZGVuY3kgZ3Jh
cGguCi0vLwotLy8gRGVwZW5kZW5jeSBncmFwaCBub2RlcyBzaG91bGQgYmUgY3JlYXRlZCBieSB1
c2luZyBvbmUgb2YgdGhlIHByb3ZpZGVkICJjcmVhdGUuLi4iIG1ldGhvZHMuCi0vLyBUaGlzIGNs
YXNzIChhbmQgbm9ib2R5IGVsc2UpIG1hbmFnZXMgdGhlIG1lbW9yeSBvZiB0aGUgY3JlYXRlZCBu
b2Rlcy4KLS8vIE5vZGVzIG1heSBub3QgYmUgcmVtb3ZlZCBhZnRlciBiZWluZyBhZGRlZCwgc28g
YWxsIGNyZWF0ZWQgbm9kZXMgd2lsbCBleGlzdCB3aGlsZSB0aGUKLS8vIFREZXBlbmRlbmN5R3Jh
cGggaW5zdGFuY2UgZXhpc3RzLgotLy8KLWNsYXNzIFREZXBlbmRlbmN5R3JhcGggewotcHVibGlj
OgotICAgIFREZXBlbmRlbmN5R3JhcGgoVEludGVybU5vZGUqIGludGVybU5vZGUpOwotICAgIH5U
RGVwZW5kZW5jeUdyYXBoKCk7Ci0gICAgVEdyYXBoTm9kZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3Ig
YmVnaW4oKSBjb25zdCB7IHJldHVybiBtQWxsTm9kZXMuYmVnaW4oKTsgfQotICAgIFRHcmFwaE5v
ZGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1BbGxOb2Rlcy5l
bmQoKTsgfQotCi0gICAgVEdyYXBoU3ltYm9sVmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpblNh
bXBsZXJTeW1ib2xzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtU2FtcGxlclN5bWJv
bHMuYmVnaW4oKTsKLSAgICB9Ci0KLSAgICBUR3JhcGhTeW1ib2xWZWN0b3I6OmNvbnN0X2l0ZXJh
dG9yIGVuZFNhbXBsZXJTeW1ib2xzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtU2Ft
cGxlclN5bWJvbHMuZW5kKCk7Ci0gICAgfQotCi0gICAgVEZ1bmN0aW9uQ2FsbFZlY3Rvcjo6Y29u
c3RfaXRlcmF0b3IgYmVnaW5Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMuYmVnaW4oKTsKLSAgICB9
Ci0KLSAgICBURnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9pdGVyYXRvciBlbmRVc2VyRGVmaW5l
ZEZ1bmN0aW9uQ2FsbHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1Vc2VyRGVmaW5l
ZEZ1bmN0aW9uQ2FsbHMuZW5kKCk7Ci0gICAgfQotCi0gICAgVEdyYXBoQXJndW1lbnQqIGNyZWF0
ZUFyZ3VtZW50KFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCwgaW50IGFyZ3Vt
ZW50TnVtYmVyKTsKLSAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIGNyZWF0ZUZ1bmN0aW9uQ2FsbChU
SW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpOwotICAgIFRHcmFwaFN5bWJvbCog
Z2V0T3JDcmVhdGVTeW1ib2woVEludGVybVN5bWJvbCogaW50ZXJtU3ltYm9sKTsKLSAgICBUR3Jh
cGhTZWxlY3Rpb24qIGNyZWF0ZVNlbGVjdGlvbihUSW50ZXJtU2VsZWN0aW9uKiBpbnRlcm1TZWxl
Y3Rpb24pOwotICAgIFRHcmFwaExvb3AqIGNyZWF0ZUxvb3AoVEludGVybUxvb3AqIGludGVybUxv
b3ApOwotICAgIFRHcmFwaExvZ2ljYWxPcCogY3JlYXRlTG9naWNhbE9wKFRJbnRlcm1CaW5hcnkq
IGludGVybUxvZ2ljYWxPcCk7Ci1wcml2YXRlOgotICAgIHR5cGVkZWYgVE1hcDxpbnQsIFRHcmFw
aFN5bWJvbCo+IFRTeW1ib2xJZE1hcDsKLSAgICB0eXBlZGVmIHN0ZDo6cGFpcjxpbnQsIFRHcmFw
aFN5bWJvbCo+IFRTeW1ib2xJZFBhaXI7Ci0KLSAgICBUR3JhcGhOb2RlVmVjdG9yIG1BbGxOb2Rl
czsKLSAgICBUR3JhcGhTeW1ib2xWZWN0b3IgbVNhbXBsZXJTeW1ib2xzOwotICAgIFRGdW5jdGlv
bkNhbGxWZWN0b3IgbVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxsczsKLSAgICBUU3ltYm9sSWRNYXAg
bVN5bWJvbElkTWFwOwotfTsKLQotLy8KLS8vIEZvciB0cmF2ZXJzaW5nIHRoZSBkZXBlbmRlbmN5
IGdyYXBoLiBVc2VycyBzaG91bGQgZGVyaXZlIGZyb20gdGhpcywKLS8vIHB1dCB0aGVpciB0cmF2
ZXJzYWwgc3BlY2lmaWMgZGF0YSBpbiBpdCwgYW5kIHRoZW4gcGFzcyBpdCB0byBhCi0vLyB0cmF2
ZXJzZSBtZXRob2QuCi0vLwotLy8gV2hlbiB1c2luZyB0aGlzLCBqdXN0IGZpbGwgaW4gdGhlIG1l
dGhvZHMgZm9yIG5vZGVzIHlvdSB3YW50IHZpc2l0ZWQuCi0vLwotY2xhc3MgVERlcGVuZGVuY3lH
cmFwaFRyYXZlcnNlciB7Ci1wdWJsaWM6Ci0gICAgVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcigp
IDogbURlcHRoKDApIHt9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEdyYXBoU3lt
Ym9sKiBzeW1ib2wpIHt9OwotICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFyZ3VtZW50KFRHcmFwaEFy
Z3VtZW50KiBzZWxlY3Rpb24pIHt9OwotICAgIHZpcnR1YWwgdm9pZCB2aXNpdEZ1bmN0aW9uQ2Fs
bChUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCkge307Ci0gICAgdmlydHVhbCB2b2lk
IHZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKSB7fTsKLSAgICB2aXJ0
dWFsIHZvaWQgdmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3ApIHt9OwotICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCkge307Ci0KLSAgICBp
bnQgZ2V0RGVwdGgoKSBjb25zdCB7IHJldHVybiBtRGVwdGg7IH0KLSAgICB2b2lkIGluY3JlbWVu
dERlcHRoKCkgeyArK21EZXB0aDsgfQotICAgIHZvaWQgZGVjcmVtZW50RGVwdGgoKSB7IC0tbURl
cHRoOyB9Ci0KLSAgICB2b2lkIGNsZWFyVmlzaXRlZCgpIHsgbVZpc2l0ZWQuY2xlYXIoKTsgfQot
ICAgIHZvaWQgbWFya1Zpc2l0ZWQoVEdyYXBoTm9kZSogbm9kZSkgeyBtVmlzaXRlZC5pbnNlcnQo
bm9kZSk7IH0KLSAgICBib29sIGlzVmlzaXRlZChUR3JhcGhOb2RlKiBub2RlKSBjb25zdCB7IHJl
dHVybiBtVmlzaXRlZC5maW5kKG5vZGUpICE9IG1WaXNpdGVkLmVuZCgpOyB9Ci1wcml2YXRlOgot
ICAgIGludCBtRGVwdGg7Ci0gICAgVEdyYXBoTm9kZVNldCBtVmlzaXRlZDsKLX07Ci0KLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdy
YXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjZlNmQ1N2E0ZmY4MjkzNzg0ZGNlYTVmZGVlMjA3MWNi
MTMwNmI4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIyNyArMCwwIEBACi0vLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLQotI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIu
aCIKLQotdm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6YnVpbGQoVEludGVybU5vZGUqIG5v
ZGUsIFREZXBlbmRlbmN5R3JhcGgqIGdyYXBoKQotewotICAgIFREZXBlbmRlbmN5R3JhcGhCdWls
ZGVyIGJ1aWxkZXIoZ3JhcGgpOwotICAgIGJ1aWxkZXIuYnVpbGQobm9kZSk7Ci19Ci0KLWJvb2wg
VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50
ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUpCi17Ci0gICAgc3dpdGNoIChpbnRlcm1BZ2dy
ZWdhdGUtPmdldE9wKCkpIHsKLSAgICAgICAgY2FzZSBFT3BGdW5jdGlvbjogdmlzaXRGdW5jdGlv
bkRlZmluaXRpb24oaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wRnVu
Y3Rpb25DYWxsOiB2aXNpdEZ1bmN0aW9uQ2FsbChpbnRlcm1BZ2dyZWdhdGUpOyBicmVhazsKLSAg
ICAgICAgZGVmYXVsdDogdmlzaXRBZ2dyZWdhdGVDaGlsZHJlbihpbnRlcm1BZ2dyZWdhdGUpOyBi
cmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgVERlcGVuZGVuY3lH
cmFwaEJ1aWxkZXI6OnZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFRJbnRlcm1BZ2dyZWdhdGUqIGlu
dGVybUFnZ3JlZ2F0ZSkKLXsKLSAgICAvLyBDdXJyZW50bHksIHdlIGRvIG5vdCBzdXBwb3J0IHVz
ZXIgZGVmaW5lZCBmdW5jdGlvbnMuCi0gICAgaWYgKGludGVybUFnZ3JlZ2F0ZS0+Z2V0TmFtZSgp
ICE9ICJtYWluKCIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHZpc2l0QWdncmVnYXRlQ2hpbGRy
ZW4oaW50ZXJtQWdncmVnYXRlKTsKLX0KLQotLy8gVGFrZXMgYW4gZXhwcmVzc2lvbiBsaWtlICJm
KHgpIiBhbmQgY3JlYXRlcyBhIGRlcGVuZGVuY3kgZ3JhcGggbGlrZQotLy8gInggLT4gYXJndW1l
bnQgMCAtPiBmdW5jdGlvbiBjYWxsIi4KLXZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZp
c2l0RnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCkKLXsK
LSAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCA9IG1HcmFwaC0+Y3JlYXRlRnVu
Y3Rpb25DYWxsKGludGVybUZ1bmN0aW9uQ2FsbCk7Ci0KLSAgICAvLyBSdW4gdGhyb3VnaCB0aGUg
ZnVuY3Rpb24gY2FsbCBhcmd1bWVudHMuCi0gICAgaW50IGFyZ3VtZW50TnVtYmVyID0gMDsKLSAg
ICBUSW50ZXJtU2VxdWVuY2UmIGludGVybUFyZ3VtZW50cyA9IGludGVybUZ1bmN0aW9uQ2FsbC0+
Z2V0U2VxdWVuY2UoKTsKLSAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IGludGVybUFyZ3VtZW50cy5iZWdpbigpOwotICAgICAgICAgaXRlciAhPSBpbnRlcm1B
cmd1bWVudHMuZW5kKCk7Ci0gICAgICAgICArK2l0ZXIsICsrYXJndW1lbnROdW1iZXIpCi0gICAg
ewotICAgICAgICBUTm9kZVNldE1haW50YWluZXIgbm9kZVNldE1haW50YWluZXIodGhpcyk7Ci0K
LSAgICAgICAgVEludGVybU5vZGUqIGludGVybUFyZ3VtZW50ID0gKml0ZXI7Ci0gICAgICAgIGlu
dGVybUFyZ3VtZW50LT50cmF2ZXJzZSh0aGlzKTsKLQotICAgICAgICBpZiAoVFBhcmVudE5vZGVT
ZXQqIGFyZ3VtZW50Tm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0KCkpIHsKLSAgICAgICAgICAg
IFRHcmFwaEFyZ3VtZW50KiBhcmd1bWVudCA9IG1HcmFwaC0+Y3JlYXRlQXJndW1lbnQoaW50ZXJt
RnVuY3Rpb25DYWxsLCBhcmd1bWVudE51bWJlcik7Ci0gICAgICAgICAgICBjb25uZWN0TXVsdGlw
bGVOb2Rlc1RvU2luZ2xlTm9kZShhcmd1bWVudE5vZGVzLCBhcmd1bWVudCk7Ci0gICAgICAgICAg
ICBhcmd1bWVudC0+YWRkRGVwZW5kZW50Tm9kZShmdW5jdGlvbkNhbGwpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgLy8gUHVzaCB0aGUgbGVmdG1vc3Qgc3ltYm9sIG9mIHRoaXMgZnVuY3Rpb24g
Y2FsbCBpbnRvIHRoZSBjdXJyZW50IHNldCBvZiBkZXBlbmRlbnQgc3ltYm9scyB0bwotICAgIC8v
IHJlcHJlc2VudCB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gY2FsbC4KLSAgICAvLyBUaHVz
LCBhbiBleHByZXNzaW9uIGxpa2UgInkgPSBmKHgpIiB3aWxsIHlpZWxkIGEgZGVwZW5kZW5jeSBn
cmFwaCBsaWtlCi0gICAgLy8gInggLT4gYXJndW1lbnQgMCAtPiBmdW5jdGlvbiBjYWxsIC0+IHki
LgotICAgIC8vIFRoaXMgbGluZSBlc3NlbnRpYWxseSBwYXNzZXMgdGhlIGZ1bmN0aW9uIGNhbGwg
bm9kZSBiYWNrIHVwIHRvIGFuIGVhcmxpZXIgdmlzaXRBc3NpZ25tZW50Ci0gICAgLy8gY2FsbCwg
d2hpY2ggd2lsbCBjcmVhdGUgdGhlIGNvbm5lY3Rpb24gImZ1bmN0aW9uIGNhbGwgLT4geSIuCi0g
ICAgbU5vZGVTZXRzLmluc2VydEludG9Ub3BTZXQoZnVuY3Rpb25DYWxsKTsKLX0KLQotdm9pZCBU
RGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBZ2dyZWdhdGVDaGlsZHJlbihUSW50ZXJtQWdn
cmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUpCi17Ci0gICAgVEludGVybVNlcXVlbmNlJiBzZXF1ZW5j
ZSA9IGludGVybUFnZ3JlZ2F0ZS0+Z2V0U2VxdWVuY2UoKTsKLSAgICBmb3IoVEludGVybVNlcXVl
bmNlOjpjb25zdF9pdGVyYXRvciBpdGVyID0gc2VxdWVuY2UuYmVnaW4oKTsgaXRlciAhPSBzZXF1
ZW5jZS5lbmQoKTsgKytpdGVyKQotICAgIHsKLSAgICAgICAgVEludGVybU5vZGUqIGludGVybUNo
aWxkID0gKml0ZXI7Ci0gICAgICAgIGludGVybUNoaWxkLT50cmF2ZXJzZSh0aGlzKTsKLSAgICB9
Ci19Ci0KLXZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0U3ltYm9sKFRJbnRlcm1T
eW1ib2wqIGludGVybVN5bWJvbCkKLXsKLSAgICAvLyBQdXNoIHRoaXMgc3ltYm9sIGludG8gdGhl
IHNldCBvZiBkZXBlbmRlbnQgc3ltYm9scyBmb3IgdGhlIGN1cnJlbnQgYXNzaWdubWVudCBvciBj
b25kaXRpb24KLSAgICAvLyB0aGF0IHdlIGFyZSB0cmF2ZXJzaW5nLgotICAgIFRHcmFwaFN5bWJv
bCogc3ltYm9sID0gbUdyYXBoLT5nZXRPckNyZWF0ZVN5bWJvbChpbnRlcm1TeW1ib2wpOwotICAg
IG1Ob2RlU2V0cy5pbnNlcnRJbnRvVG9wU2V0KHN5bWJvbCk7Ci0KLSAgICAvLyBJZiB0aGlzIHN5
bWJvbCBpcyB0aGUgY3VycmVudCBsZWZ0bW9zdCBzeW1ib2wgdW5kZXIgYW4gYXNzaWdubWVudCwg
cmVwbGFjZSB0aGUgcHJldmlvdXMKLSAgICAvLyBsZWZ0bW9zdCBzeW1ib2wgd2l0aCB0aGlzIHN5
bWJvbC4KLSAgICBpZiAoIW1MZWZ0bW9zdFN5bWJvbHMuZW1wdHkoKSAmJiBtTGVmdG1vc3RTeW1i
b2xzLnRvcCgpICE9ICZtUmlnaHRTdWJ0cmVlKSB7Ci0gICAgICAgIG1MZWZ0bW9zdFN5bWJvbHMu
cG9wKCk7Ci0gICAgICAgIG1MZWZ0bW9zdFN5bWJvbHMucHVzaChzeW1ib2wpOwotICAgIH0KLX0K
LQotYm9vbCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQs
IFRJbnRlcm1CaW5hcnkqIGludGVybUJpbmFyeSkKLXsKLSAgICBUT3BlcmF0b3Igb3AgPSBpbnRl
cm1CaW5hcnktPmdldE9wKCk7Ci0gICAgaWYgKG9wID09IEVPcEluaXRpYWxpemUgfHwgaW50ZXJt
QmluYXJ5LT5pc0Fzc2lnbm1lbnQoKSkKLSAgICAgICAgdmlzaXRBc3NpZ25tZW50KGludGVybUJp
bmFyeSk7Ci0gICAgZWxzZSBpZiAob3AgPT0gRU9wTG9naWNhbEFuZCB8fCBvcCA9PSBFT3BMb2dp
Y2FsT3IpCi0gICAgICAgIHZpc2l0TG9naWNhbE9wKGludGVybUJpbmFyeSk7Ci0gICAgZWxzZQot
ICAgICAgICB2aXNpdEJpbmFyeUNoaWxkcmVuKGludGVybUJpbmFyeSk7Ci0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QXNzaWdubWVu
dChUSW50ZXJtQmluYXJ5KiBpbnRlcm1Bc3NpZ25tZW50KQotewotICAgIFRJbnRlcm1UeXBlZCog
aW50ZXJtTGVmdCA9IGludGVybUFzc2lnbm1lbnQtPmdldExlZnQoKTsKLSAgICBpZiAoIWludGVy
bUxlZnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFRHcmFwaFN5bWJvbCogbGVmdG1vc3RTeW1i
b2wgPSBOVUxMOwotCi0gICAgewotICAgICAgICBUTm9kZVNldE1haW50YWluZXIgbm9kZVNldE1h
aW50YWluZXIodGhpcyk7Ci0KLSAgICAgICAgewotICAgICAgICAgICAgVExlZnRtb3N0U3ltYm9s
TWFpbnRhaW5lciBsZWZ0bW9zdFN5bWJvbE1haW50YWluZXIodGhpcywgbUxlZnRTdWJ0cmVlKTsK
LSAgICAgICAgICAgIGludGVybUxlZnQtPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAgICAgbGVm
dG1vc3RTeW1ib2wgPSBtTGVmdG1vc3RTeW1ib2xzLnRvcCgpOwotCi0gICAgICAgICAgICAvLyBB
ZnRlciB0cmF2ZXJzaW5nIHRoZSBsZWZ0IHN1YnRyZWUgb2YgdGhpcyBhc3NpZ25tZW50LCB3ZSBz
aG91bGQgaGF2ZSBmb3VuZCBhIHJlYWwKLSAgICAgICAgICAgIC8vIGxlZnRtb3N0IHN5bWJvbCwg
YW5kIHRoZSBsZWZ0bW9zdCBzeW1ib2wgc2hvdWxkIG5vdCBiZSBhIHBsYWNlaG9sZGVyLgotICAg
ICAgICAgICAgQVNTRVJUKGxlZnRtb3N0U3ltYm9sICE9ICZtTGVmdFN1YnRyZWUpOwotICAgICAg
ICAgICAgQVNTRVJUKGxlZnRtb3N0U3ltYm9sICE9ICZtUmlnaHRTdWJ0cmVlKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybVJpZ2h0ID0gaW50ZXJtQXNzaWdu
bWVudC0+Z2V0UmlnaHQoKSkgewotICAgICAgICAgICAgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5l
ciBsZWZ0bW9zdFN5bWJvbE1haW50YWluZXIodGhpcywgbVJpZ2h0U3VidHJlZSk7Ci0gICAgICAg
ICAgICBpbnRlcm1SaWdodC0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoVFBhcmVudE5vZGVTZXQqIGFzc2lnbm1lbnROb2RlcyA9IG1Ob2RlU2V0cy5nZXRUb3BTZXQo
KSkKLSAgICAgICAgICAgIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGFzc2lnbm1l
bnROb2RlcywgbGVmdG1vc3RTeW1ib2wpOwotICAgIH0KLQotICAgIC8vIFB1c2ggdGhlIGxlZnRt
b3N0IHN5bWJvbCBvZiB0aGlzIGFzc2lnbm1lbnQgaW50byB0aGUgY3VycmVudCBzZXQgb2YgZGVw
ZW5kZW50IHN5bWJvbHMgdG8KLSAgICAvLyByZXByZXNlbnQgdGhlIHJlc3VsdCBvZiB0aGlzIGFz
c2lnbm1lbnQuCi0gICAgLy8gQW4gZXhwcmVzc2lvbiBsaWtlICJhID0gKGIgPSBjKSIgd2lsbCB5
aWVsZCBhIGRlcGVuZGVuY3kgZ3JhcGggbGlrZSAiYyAtPiBiIC0+IGEiLgotICAgIC8vIFRoaXMg
bGluZSBlc3NlbnRpYWxseSBwYXNzZXMgdGhlIGxlZnRtb3N0IHN5bWJvbCBvZiB0aGUgbmVzdGVk
IGFzc2lnbm1lbnQgKCJiIiBpbiB0aGlzCi0gICAgLy8gZXhhbXBsZSkgYmFjayB1cCB0byB0aGUg
ZWFybGllciB2aXNpdEFzc2lnbm1lbnQgY2FsbCBmb3IgdGhlIG91dGVyIGFzc2lnbm1lbnQsIHdo
aWNoIHdpbGwKLSAgICAvLyBjcmVhdGUgdGhlIGNvbm5lY3Rpb24gImIgLT4gYSIuCi0gICAgbU5v
ZGVTZXRzLmluc2VydEludG9Ub3BTZXQobGVmdG1vc3RTeW1ib2wpOwotfQotCi12b2lkIFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdExvZ2ljYWxPcChUSW50ZXJtQmluYXJ5KiBpbnRlcm1M
b2dpY2FsT3ApCi17Ci0gICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtTGVmdCA9IGludGVybUxv
Z2ljYWxPcC0+Z2V0TGVmdCgpKSB7Ci0gICAgICAgIFROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFp
bmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMpOwotCi0gICAgICAgIGludGVybUxlZnQtPnRyYXZl
cnNlKHRoaXMpOwotICAgICAgICBpZiAoVFBhcmVudE5vZGVTZXQqIGxlZnROb2RlcyA9IG1Ob2Rl
U2V0cy5nZXRUb3BTZXQoKSkgewotICAgICAgICAgICAgVEdyYXBoTG9naWNhbE9wKiBsb2dpY2Fs
T3AgPSBtR3JhcGgtPmNyZWF0ZUxvZ2ljYWxPcChpbnRlcm1Mb2dpY2FsT3ApOwotICAgICAgICAg
ICAgY29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUobGVmdE5vZGVzLCBsb2dpY2FsT3Ap
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtUmlnaHQg
PSBpbnRlcm1Mb2dpY2FsT3AtPmdldFJpZ2h0KCkpIHsKLSAgICAgICAgVExlZnRtb3N0U3ltYm9s
TWFpbnRhaW5lciBsZWZ0bW9zdFN5bWJvbE1haW50YWluZXIodGhpcywgbVJpZ2h0U3VidHJlZSk7
Ci0gICAgICAgIGludGVybVJpZ2h0LT50cmF2ZXJzZSh0aGlzKTsKLSAgICB9Ci19Ci0KLXZvaWQg
VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QmluYXJ5Q2hpbGRyZW4oVEludGVybUJpbmFy
eSogaW50ZXJtQmluYXJ5KQotewotICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybUxlZnQgPSBp
bnRlcm1CaW5hcnktPmdldExlZnQoKSkKLSAgICAgICAgaW50ZXJtTGVmdC0+dHJhdmVyc2UodGhp
cyk7Ci0KLSAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1SaWdodCA9IGludGVybUJpbmFyeS0+
Z2V0UmlnaHQoKSkgewotICAgICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIGxlZnRtb3N0
U3ltYm9sTWFpbnRhaW5lcih0aGlzLCBtUmlnaHRTdWJ0cmVlKTsKLSAgICAgICAgaW50ZXJtUmln
aHQtPnRyYXZlcnNlKHRoaXMpOwotICAgIH0KLX0KLQotYm9vbCBURGVwZW5kZW5jeUdyYXBoQnVp
bGRlcjo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qIGludGVy
bVNlbGVjdGlvbikKLXsKLSAgICBpZiAoVEludGVybU5vZGUqIGludGVybUNvbmRpdGlvbiA9IGlu
dGVybVNlbGVjdGlvbi0+Z2V0Q29uZGl0aW9uKCkpIHsKLSAgICAgICAgVE5vZGVTZXRNYWludGFp
bmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMpOwotCi0gICAgICAgIGludGVybUNvbmRpdGlvbi0+
dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIGlmIChUUGFyZW50Tm9kZVNldCogY29uZGl0aW9uTm9k
ZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0KCkpIHsKLSAgICAgICAgICAgIFRHcmFwaFNlbGVjdGlv
biogc2VsZWN0aW9uID0gbUdyYXBoLT5jcmVhdGVTZWxlY3Rpb24oaW50ZXJtU2VsZWN0aW9uKTsK
LSAgICAgICAgICAgIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGNvbmRpdGlvbk5v
ZGVzLCBzZWxlY3Rpb24pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKFRJbnRlcm1Ob2Rl
KiBpbnRlcm1UcnVlQmxvY2sgPSBpbnRlcm1TZWxlY3Rpb24tPmdldFRydWVCbG9jaygpKQotICAg
ICAgICBpbnRlcm1UcnVlQmxvY2stPnRyYXZlcnNlKHRoaXMpOwotCi0gICAgaWYgKFRJbnRlcm1O
b2RlKiBpbnRlcm1GYWxzZUJsb2NrID0gaW50ZXJtU2VsZWN0aW9uLT5nZXRGYWxzZUJsb2NrKCkp
Ci0gICAgICAgIGludGVybUZhbHNlQmxvY2stPnRyYXZlcnNlKHRoaXMpOwotCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdExvb3AoVmlz
aXQgdmlzaXQsIFRJbnRlcm1Mb29wKiBpbnRlcm1Mb29wKQotewotICAgIGlmIChUSW50ZXJtVHlw
ZWQqIGludGVybUNvbmRpdGlvbiA9IGludGVybUxvb3AtPmdldENvbmRpdGlvbigpKSB7Ci0gICAg
ICAgIFROb2RlU2V0TWFpbnRhaW5lciBub2RlU2V0TWFpbnRhaW5lcih0aGlzKTsKLQotICAgICAg
ICBpbnRlcm1Db25kaXRpb24tPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBpZiAoVFBhcmVudE5v
ZGVTZXQqIGNvbmRpdGlvbk5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKSB7Ci0gICAgICAg
ICAgICBUR3JhcGhMb29wKiBsb29wID0gbUdyYXBoLT5jcmVhdGVMb29wKGludGVybUxvb3ApOwot
ICAgICAgICAgICAgY29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoY29uZGl0aW9uTm9k
ZXMsIGxvb3ApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKFRJbnRlcm1Ob2RlKiBpbnRl
cm1Cb2R5ID0gaW50ZXJtTG9vcC0+Z2V0Qm9keSgpKQotICAgICAgICBpbnRlcm1Cb2R5LT50cmF2
ZXJzZSh0aGlzKTsKLQotICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybUV4cHJlc3Npb24gPSBp
bnRlcm1Mb29wLT5nZXRFeHByZXNzaW9uKCkpCi0gICAgICAgIGludGVybUV4cHJlc3Npb24tPnRy
YXZlcnNlKHRoaXMpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0KLXZvaWQgVERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXI6OmNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKFRQYXJlbnRO
b2RlU2V0KiBub2RlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRHcmFwaE5vZGUqIG5vZGUpIGNvbnN0Ci17Ci0gICAgZm9y
IChUUGFyZW50Tm9kZVNldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG5vZGVzLT5iZWdpbigpOyBp
dGVyICE9IG5vZGVzLT5lbmQoKTsgKytpdGVyKQotICAgIHsKLSAgICAgICAgVEdyYXBoUGFyZW50
Tm9kZSogY3VycmVudE5vZGUgPSAqaXRlcjsKLSAgICAgICAgY3VycmVudE5vZGUtPmFkZERlcGVu
ZGVudE5vZGUobm9kZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1ZjIzMmNiMjFlOTM2
ZDkyN2E5NjcyNWQyZjBkMTZjOWRjNGUzOWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2Rl
cGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4MSAr
MCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRF
TkNZX0dSQVBIX0JVSUxERVJfSAotI2RlZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZ
X0dSQVBIX0JVSUxERVJfSAotCi0jaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5j
eUdyYXBoLmgiCi0KLS8vCi0vLyBDcmVhdGVzIGEgZGVwZW5kZW5jeSBncmFwaCBvZiBzeW1ib2xz
LCBmdW5jdGlvbiBjYWxscywgY29uZGl0aW9ucyBldGMuIGJ5IHRyYXZlcnNpbmcgYQotLy8gaW50
ZXJtZWRpYXRlIHRyZWUuCi0vLwotY2xhc3MgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIgOiBwdWJs
aWMgVEludGVybVRyYXZlcnNlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYnVpbGQoVElu
dGVybU5vZGUqIG5vZGUsIFREZXBlbmRlbmN5R3JhcGgqIGdyYXBoKTsKLQotICAgIHZpcnR1YWwg
dm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7Ci0gICAgdmlydHVhbCBib29sIHZpc2l0
QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7Ci0gICAgdmlydHVhbCBib29sIHZp
c2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKik7Ci0gICAgdmlydHVh
bCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7Ci0g
ICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqKTsKLQot
cHJpdmF0ZToKLSAgICB0eXBlZGVmIHN0ZDo6c3RhY2s8VEdyYXBoU3ltYm9sKj4gVFN5bWJvbFN0
YWNrOwotICAgIHR5cGVkZWYgc3RkOjpzZXQ8VEdyYXBoUGFyZW50Tm9kZSo+IFRQYXJlbnROb2Rl
U2V0OwotCi0gICAgLy8KLSAgICAvLyBGb3IgY29sbGVjdGluZyB0aGUgZGVwZW5kZW50IG5vZGVz
IG9mIGFzc2lnbm1lbnRzLCBjb25kaXRpb25zLCBldGMuCi0gICAgLy8gd2hpbGUgdHJhdmVyc2lu
ZyB0aGUgaW50ZXJtZWRpYXRlIHRyZWUuCi0gICAgLy8KLSAgICAvLyBUaGlzIGRhdGEgc3RydWN0
dXJlIGlzIHN0YWNrIG9mIHNldHMuIEVhY2ggc2V0IGNvbnRhaW5zIGRlcGVuZGVuY3kgZ3JhcGgg
cGFyZW50IG5vZGVzLgotICAgIC8vCi0gICAgY2xhc3MgVE5vZGVTZXRTdGFjayB7Ci0gICAgcHVi
bGljOgotICAgICAgICBUTm9kZVNldFN0YWNrKCkge307Ci0gICAgICAgIH5UTm9kZVNldFN0YWNr
KCkgeyBjbGVhcigpOyB9Ci0KLSAgICAgICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQg
YWZ0ZXIgYSBwdXNoU2V0LgotICAgICAgICAvLyBSZXR1cm5zIE5VTEwgaWYgdGhlIHRvcCBzZXQg
aXMgZW1wdHkuCi0gICAgICAgIFRQYXJlbnROb2RlU2V0KiBnZXRUb3BTZXQoKSBjb25zdAotICAg
ICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIW5vZGVTZXRzLmVtcHR5KCkpOwotICAgICAgICAg
ICAgVFBhcmVudE5vZGVTZXQqIHRvcFNldCA9IG5vZGVTZXRzLnRvcCgpOwotICAgICAgICAgICAg
cmV0dXJuICF0b3BTZXQtPmVtcHR5KCkgPyB0b3BTZXQgOiBOVUxMOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdm9pZCBwdXNoU2V0KCkgeyBub2RlU2V0cy5wdXNoKG5ldyBUUGFyZW50Tm9kZVNldCgp
KTsgfQotICAgICAgICB2b2lkIHBvcFNldCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VS
VCghbm9kZVNldHMuZW1wdHkoKSk7Ci0gICAgICAgICAgICBkZWxldGUgbm9kZVNldHMudG9wKCk7
Ci0gICAgICAgICAgICBub2RlU2V0cy5wb3AoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFBv
cHMgdGhlIHRvcCBzZXQgYW5kIGFkZHMgaXRzIGNvbnRlbnRzIHRvIHRoZSBuZXcgdG9wIHNldC4K
LSAgICAgICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYWZ0ZXIgYSBwdXNoU2V0Lgot
ICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBzZXQgYmVsb3cgdGhlIHRvcCBzZXQsIHRoZSB0b3Ag
c2V0IGlzIGp1c3QgZGVsZXRlZC4KLSAgICAgICAgdm9pZCBwb3BTZXRJbnRvTmV4dCgpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghbm9kZVNldHMuZW1wdHkoKSk7Ci0gICAgICAgICAg
ICBUUGFyZW50Tm9kZVNldCogb2xkVG9wU2V0ID0gbm9kZVNldHMudG9wKCk7Ci0gICAgICAgICAg
ICBub2RlU2V0cy5wb3AoKTsKLQotICAgICAgICAgICAgaWYgKCFub2RlU2V0cy5lbXB0eSgpKSB7
Ci0gICAgICAgICAgICAgICAgVFBhcmVudE5vZGVTZXQqIG5ld1RvcFNldCA9IG5vZGVTZXRzLnRv
cCgpOwotICAgICAgICAgICAgICAgIG5ld1RvcFNldC0+aW5zZXJ0KG9sZFRvcFNldC0+YmVnaW4o
KSwgb2xkVG9wU2V0LT5lbmQoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRlbGV0
ZSBvbGRUb3BTZXQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBEb2VzIG5vdGhpbmcgaWYgdGhl
cmUgaXMgbm8gdG9wIHNldC4KLSAgICAgICAgLy8gVGhpcyBjYW4gYmUgY2FsbGVkIHdoZW4gdGhl
cmUgaXMgbm8gdG9wIHNldCBpZiB3ZSBhcmUgdmlzaXRpbmcKLSAgICAgICAgLy8gc3ltYm9scyB0
aGF0IGFyZSBub3QgdW5kZXIgYW4gYXNzaWdubWVudCBvciBjb25kaXRpb24uCi0gICAgICAgIC8v
IFdlIGRvbid0IG5lZWQgdG8gdHJhY2sgdGhvc2Ugc3ltYm9scy4KLSAgICAgICAgdm9pZCBpbnNl
cnRJbnRvVG9wU2V0KFRHcmFwaFBhcmVudE5vZGUqIG5vZGUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmIChub2RlU2V0cy5lbXB0eSgpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICAgICAgbm9kZVNldHMudG9wKCktPmluc2VydChub2RlKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZvaWQgY2xlYXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICB3aGlsZSAoIW5vZGVTZXRz
LmVtcHR5KCkpCi0gICAgICAgICAgICAgICAgcG9wU2V0KCk7Ci0gICAgICAgIH0KLQotICAgIHBy
aXZhdGU6Ci0gICAgICAgIHR5cGVkZWYgc3RkOjpzdGFjazxUUGFyZW50Tm9kZVNldCo+IFRQYXJl
bnROb2RlU2V0U3RhY2s7Ci0KLSAgICAgICAgVFBhcmVudE5vZGVTZXRTdGFjayBub2RlU2V0czsK
LSAgICB9OwotCi0gICAgLy8KLSAgICAvLyBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIHB1c2hl
cyBhIG5ldyBub2RlIHNldCB3aGVuIGluc3RhbnRpYXRlZC4KLSAgICAvLyBXaGVuIHRoZSBpbnN0
YW5jZSBnb2VzIG91dCBvZiBzY29wZSwgaXQgYW5kIHBvcHMgdGhlIG5vZGUgc2V0LgotICAgIC8v
Ci0gICAgY2xhc3MgVE5vZGVTZXRNYWludGFpbmVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFRO
b2RlU2V0TWFpbnRhaW5lcihURGVwZW5kZW5jeUdyYXBoQnVpbGRlciogZmFjdG9yeSkKLSAgICAg
ICAgICAgIDogc2V0cyhmYWN0b3J5LT5tTm9kZVNldHMpIHsgc2V0cy5wdXNoU2V0KCk7IH0KLSAg
ICAgICAgflROb2RlU2V0TWFpbnRhaW5lcigpIHsgc2V0cy5wb3BTZXQoKTsgfQotICAgIHByb3Rl
Y3RlZDoKLSAgICAgICAgVE5vZGVTZXRTdGFjayYgc2V0czsKLSAgICB9OwotCi0gICAgLy8KLSAg
ICAvLyBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIHB1c2hlcyBhIG5ldyBub2RlIHNldCB3aGVu
IGluc3RhbnRpYXRlZC4KLSAgICAvLyBXaGVuIHRoZSBpbnN0YW5jZSBnb2VzIG91dCBvZiBzY29w
ZSwgaXQgYW5kIHBvcHMgdGhlIHRvcCBub2RlIHNldCBhbmQgYWRkcyBpdHMgY29udGVudHMgdG8K
LSAgICAvLyB0aGUgbmV3IHRvcCBub2RlIHNldC4KLSAgICAvLwotICAgIGNsYXNzIFROb2RlU2V0
UHJvcGFnYXRpbmdNYWludGFpbmVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFROb2RlU2V0UHJv
cGFnYXRpbmdNYWludGFpbmVyKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyKiBmYWN0b3J5KQotICAg
ICAgICAgICAgOiBzZXRzKGZhY3RvcnktPm1Ob2RlU2V0cykgeyBzZXRzLnB1c2hTZXQoKTsgfQot
ICAgICAgICB+VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIoKSB7IHNldHMucG9wU2V0SW50
b05leHQoKTsgfQotICAgIHByb3RlY3RlZDoKLSAgICAgICAgVE5vZGVTZXRTdGFjayYgc2V0czsK
LSAgICB9OwotCi0gICAgLy8KLSAgICAvLyBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGtlZXBz
IHRyYWNrIG9mIHRoZSBsZWZ0bW9zdCBzeW1ib2wgd2hpbGUgd2UncmUgZXhwbG9yaW5nIGFuCi0g
ICAgLy8gYXNzaWdubWVudC4KLSAgICAvLyBJdCB3aWxsIHB1c2ggdGhlIHBsYWNlaG9sZGVyIHN5
bWJvbCBrTGVmdFN1YnRyZWUgd2hlbiBpbnN0YW50aWF0ZWQgdW5kZXIgYSBsZWZ0IHN1YnRyZWUs
Ci0gICAgLy8gYW5kIGtSaWdodFN1YnRyZWUgdW5kZXIgYSByaWdodCBzdWJ0cmVlLgotICAgIC8v
IFdoZW4gaXQgZ29lcyBvdXQgb2Ygc2NvcGUsIGl0IHdpbGwgcG9wIHRoZSBsZWZ0bW9zdCBzeW1i
b2wgYXQgdGhlIHRvcCBvZiB0aGUgc2NvcGUuCi0gICAgLy8gRHVyaW5nIHRyYXZlcnNhbCwgdGhl
IFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyIHdpbGwgcmVwbGFjZSBrTGVmdFN1YnRyZWUgd2l0aCBh
IHJlYWwgc3ltYm9sLgotICAgIC8vIGtSaWdodFN1YnRyZWUgd2lsbCBuZXZlciBiZSByZXBsYWNl
ZCBieSBhIHJlYWwgc3ltYm9sIGJlY2F1c2Ugd2UgYXJlIHRyYWNraW5nIHRoZSBsZWZ0bW9zdAot
ICAgIC8vIHN5bWJvbC4KLSAgICAvLwotICAgIGNsYXNzIFRMZWZ0bW9zdFN5bWJvbE1haW50YWlu
ZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcihURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlciogZmFjdG9yeSwgVEdyYXBoU3ltYm9sJiBzdWJ0cmVlKQotICAg
ICAgICAgICAgOiBsZWZ0bW9zdFN5bWJvbHMoZmFjdG9yeS0+bUxlZnRtb3N0U3ltYm9scykKLSAg
ICAgICAgewotICAgICAgICAgICAgbmVlZHNQbGFjZWhvbGRlclN5bWJvbCA9IGxlZnRtb3N0U3lt
Ym9scy5lbXB0eSgpIHx8IGxlZnRtb3N0U3ltYm9scy50b3AoKSAhPSAmc3VidHJlZTsKLSAgICAg
ICAgICAgIGlmIChuZWVkc1BsYWNlaG9sZGVyU3ltYm9sKQotICAgICAgICAgICAgICAgIGxlZnRt
b3N0U3ltYm9scy5wdXNoKCZzdWJ0cmVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIH5UTGVmdG1v
c3RTeW1ib2xNYWludGFpbmVyKCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG5lZWRzUGxh
Y2Vob2xkZXJTeW1ib2wpCi0gICAgICAgICAgICAgICAgbGVmdG1vc3RTeW1ib2xzLnBvcCgpOwot
ICAgICAgICB9Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIFRTeW1ib2xTdGFjayYgbGVmdG1v
c3RTeW1ib2xzOwotICAgICAgICBib29sIG5lZWRzUGxhY2Vob2xkZXJTeW1ib2w7Ci0gICAgfTsK
LQotICAgIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyKFREZXBlbmRlbmN5R3JhcGgqIGdyYXBoKQot
ICAgICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIGZhbHNlKQotICAgICAgICAs
IG1MZWZ0U3VidHJlZShOVUxMKQotICAgICAgICAsIG1SaWdodFN1YnRyZWUoTlVMTCkKLSAgICAg
ICAgLCBtR3JhcGgoZ3JhcGgpIHt9Ci0gICAgdm9pZCBidWlsZChUSW50ZXJtTm9kZSogaW50ZXJt
Tm9kZSkgeyBpbnRlcm1Ob2RlLT50cmF2ZXJzZSh0aGlzKTsgfQotCi0gICAgdm9pZCBjb25uZWN0
TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShUUGFyZW50Tm9kZVNldCogbm9kZXMsIFRHcmFwaE5v
ZGUqIG5vZGUpIGNvbnN0OwotCi0gICAgdm9pZCB2aXNpdEFzc2lnbm1lbnQoVEludGVybUJpbmFy
eSopOwotICAgIHZvaWQgdmlzaXRMb2dpY2FsT3AoVEludGVybUJpbmFyeSopOwotICAgIHZvaWQg
dmlzaXRCaW5hcnlDaGlsZHJlbihUSW50ZXJtQmluYXJ5Kik7Ci0gICAgdm9pZCB2aXNpdEZ1bmN0
aW9uRGVmaW5pdGlvbihUSW50ZXJtQWdncmVnYXRlKik7Ci0gICAgdm9pZCB2aXNpdEZ1bmN0aW9u
Q2FsbChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpOwotICAgIHZvaWQgdmlz
aXRBZ2dyZWdhdGVDaGlsZHJlbihUSW50ZXJtQWdncmVnYXRlKik7Ci0KLSAgICBUR3JhcGhTeW1i
b2wgbUxlZnRTdWJ0cmVlOwotICAgIFRHcmFwaFN5bWJvbCBtUmlnaHRTdWJ0cmVlOwotCi0gICAg
VERlcGVuZGVuY3lHcmFwaCogbUdyYXBoOwotICAgIFROb2RlU2V0U3RhY2sgbU5vZGVTZXRzOwot
ICAgIFRTeW1ib2xTdGFjayBtTGVmdG1vc3RTeW1ib2xzOwotfTsKLQotI2VuZGlmICAvLyBDT01Q
SUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0JVSUxERVJfSApkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aE91dHB1dC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3Jh
cGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNmZjNDg5ZTdiNmYzMTQ2Y2M2YWRiOTMzOGMzMTlhZmE0MTNhNjQyZi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCi0KLXZvaWQgVERlcGVuZGVuY3lH
cmFwaE91dHB1dDo6b3V0cHV0SW5kZW50YXRpb24oKQotewotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgZ2V0RGVwdGgoKTsgKytpKQotICAgICAgICBtU2luayA8PCAiICAiOwotfQotCi12b2lkIFRE
ZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFt
ZXRlcikKLXsKLSAgICBvdXRwdXRJbmRlbnRhdGlvbigpOwotICAgIG1TaW5rIDw8ICJhcmd1bWVu
dCAiIDw8IHBhcmFtZXRlci0+Z2V0QXJndW1lbnROdW1iZXIoKSA8PCAiIG9mIGNhbGwgdG8gIgot
ICAgICAgICAgIDw8IHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCktPmdldE5hbWUo
KSA8PCAiXG4iOwotfQotCi12b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0RnVuY3Rp
b25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxsKQotewotICAgIG91dHB1dElu
ZGVudGF0aW9uKCk7Ci0gICAgbVNpbmsgPDwgImZ1bmN0aW9uIGNhbGwgIiA8PCAgZnVuY3Rpb25D
YWxsLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKS0+Z2V0TmFtZSgpIDw8ICJcbiI7Ci19Ci0KLXZv
aWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRTeW1ib2woVEdyYXBoU3ltYm9sKiBzeW1i
b2wpCi17Ci0gICAgb3V0cHV0SW5kZW50YXRpb24oKTsKLSAgICBtU2luayA8PCBzeW1ib2wtPmdl
dEludGVybVN5bWJvbCgpLT5nZXRTeW1ib2woKSA8PCAiIChzeW1ib2wgaWQ6ICIKLSAgICAgICAg
ICA8PCBzeW1ib2wtPmdldEludGVybVN5bWJvbCgpLT5nZXRJZCgpIDw8ICIpXG4iOwotfQotCi12
b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlv
biogc2VsZWN0aW9uKQotewotICAgIG91dHB1dEluZGVudGF0aW9uKCk7Ci0gICAgbVNpbmsgPDwg
InNlbGVjdGlvblxuIjsKLX0KLQotdm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExv
b3AoVEdyYXBoTG9vcCogbG9vcCkKLXsKLSAgICBvdXRwdXRJbmRlbnRhdGlvbigpOwotICAgIG1T
aW5rIDw8ICJsb29wIGNvbmRpdGlvblxuIjsKLX0KLQotdm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0
cHV0Ojp2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCkKLXsKLSAgICBv
dXRwdXRJbmRlbnRhdGlvbigpOwotICAgIG1TaW5rIDw8ICJsb2dpY2FsICIgPDwgbG9naWNhbE9w
LT5nZXRPcFN0cmluZygpIDw8ICJcbiI7Ci19Ci0KLXZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1
dDo6b3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhURGVwZW5kZW5jeUdyYXBoJiBncmFwaCkKLXsKLSAg
ICBtU2luayA8PCAiXG4iOwotCi0gICAgZm9yIChUR3JhcGhOb2RlVmVjdG9yOjpjb25zdF9pdGVy
YXRvciBpdGVyID0gZ3JhcGguYmVnaW4oKTsgaXRlciAhPSBncmFwaC5lbmQoKTsgKytpdGVyKQot
ICAgIHsKLSAgICAgICAgVEdyYXBoTm9kZSogc3ltYm9sID0gKml0ZXI7Ci0gICAgICAgIG1TaW5r
IDw8ICItLS0gRGVwZW5kZW5jeSBncmFwaCBzcGFubmluZyB0cmVlIC0tLVxuIjsKLSAgICAgICAg
Y2xlYXJWaXNpdGVkKCk7Ci0gICAgICAgIHN5bWJvbC0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAg
IG1TaW5rIDw8ICJcbiI7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aE91dHB1dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTQ0N2RhOTg3ZDJlMmVk
YWVkODM5YjYxMmQ3M2JmYjlmODY1MmZhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAg
QEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lf
R1JBUEhfT1VUUFVUX0gKLSNkZWZpbmUgQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQ
SF9PVVRQVVRfSAotCi0jaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBo
LmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKLQotY2xhc3MgVERlcGVuZGVuY3lH
cmFwaE91dHB1dCA6IHB1YmxpYyBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyIHsKLXB1YmxpYzoK
LSAgICBURGVwZW5kZW5jeUdyYXBoT3V0cHV0KFRJbmZvU2lua0Jhc2UmIHNpbmspIDogbVNpbmso
c2luaykge30KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEdyYXBoU3ltYm9sKiBzeW1i
b2wpOwotICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFyZ3VtZW50KFRHcmFwaEFyZ3VtZW50KiBwYXJh
bWV0ZXIpOwotICAgIHZpcnR1YWwgdm9pZCB2aXNpdEZ1bmN0aW9uQ2FsbChUR3JhcGhGdW5jdGlv
bkNhbGwqIGZ1bmN0aW9uQ2FsbCk7Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0U2VsZWN0aW9uKFRH
cmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKTsKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRMb29wKFRH
cmFwaExvb3AqIGxvb3ApOwotICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvZ2ljYWxPcChUR3JhcGhM
b2dpY2FsT3AqIGxvZ2ljYWxPcCk7Ci0KLSAgICB2b2lkIG91dHB1dEFsbFNwYW5uaW5nVHJlZXMo
VERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpOwotcHJpdmF0ZToKLSAgICB2b2lkIG91dHB1dEluZGVu
dGF0aW9uKCk7Ci0KLSAgICBUSW5mb1NpbmtCYXNlJiBtU2luazsKLX07Ci0KLSNlbmRpZiAgLy8g
Q09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9PVVRQVVRfSApkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lH
cmFwaFRyYXZlcnNlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9k
ZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGIxNTg1NzVjZWMzNTFjYmM2ODk4NTk4MjkyYzQ4ODkyYTgwMGZmODUuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVk
ZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCi0KLS8vIFRoZXNlIG1ldGhv
ZHMgZG8gYSBicmVhZHRoLWZpcnN0IHRyYXZlcnNhbCB0aHJvdWdoIHRoZSBncmFwaCBhbmQgbWFy
ayB2aXNpdGVkIG5vZGVzLgotCi12b2lkIFRHcmFwaE5vZGU6OnRyYXZlcnNlKFREZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQotewotICAgIGdyYXBoVHJhdmVyc2VyLT5t
YXJrVmlzaXRlZCh0aGlzKTsKLX0KLQotdm9pZCBUR3JhcGhQYXJlbnROb2RlOjp0cmF2ZXJzZShU
RGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKLXsKLSAgICBUR3JhcGhO
b2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Ci0KLSAgICBncmFwaFRyYXZlcnNlci0+aW5j
cmVtZW50RGVwdGgoKTsKLQotICAgIC8vIFZpc2l0IHRoZSBwYXJlbnQgbm9kZSdzIGNoaWxkcmVu
LgotICAgIGZvciAoVEdyYXBoTm9kZVNldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1EZXBlbmRl
bnROb2Rlcy5iZWdpbigpOwotICAgICAgICAgaXRlciAhPSBtRGVwZW5kZW50Tm9kZXMuZW5kKCk7
Ci0gICAgICAgICArK2l0ZXIpCi0gICAgewotICAgICAgICBUR3JhcGhOb2RlKiBub2RlID0gKml0
ZXI7Ci0gICAgICAgIGlmICghZ3JhcGhUcmF2ZXJzZXItPmlzVmlzaXRlZChub2RlKSkKLSAgICAg
ICAgICAgIG5vZGUtPnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKLSAgICB9Ci0KLSAgICBncmFw
aFRyYXZlcnNlci0+ZGVjcmVtZW50RGVwdGgoKTsKLX0KLQotdm9pZCBUR3JhcGhBcmd1bWVudDo6
dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCi17Ci0g
ICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0QXJndW1lbnQodGhpcyk7Ci0gICAgVEdyYXBoUGFyZW50
Tm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOwotfQotCi12b2lkIFRHcmFwaEZ1bmN0aW9u
Q2FsbDo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIp
Ci17Ci0gICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0RnVuY3Rpb25DYWxsKHRoaXMpOwotICAgIFRH
cmFwaFBhcmVudE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKLX0KLQotdm9pZCBUR3Jh
cGhTeW1ib2w6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVy
c2VyKQotewotICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdFN5bWJvbCh0aGlzKTsKLSAgICBUR3Jh
cGhQYXJlbnROb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Ci19Ci0KLXZvaWQgVEdyYXBo
U2VsZWN0aW9uOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZl
cnNlcikKLXsKLSAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRTZWxlY3Rpb24odGhpcyk7Ci0gICAg
VEdyYXBoTm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOwotfQotCi12b2lkIFRHcmFwaExv
b3A6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQot
ewotICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdExvb3AodGhpcyk7Ci0gICAgVEdyYXBoTm9kZTo6
dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOwotfQotCi12b2lkIFRHcmFwaExvZ2ljYWxPcDo6dHJh
dmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCi17Ci0gICAg
Z3JhcGhUcmF2ZXJzZXItPnZpc2l0TG9naWNhbE9wKHRoaXMpOwotICAgIFRHcmFwaE5vZGU6OnRy
YXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9nZW5lcmF0ZV9wYXJzZXIuc2ggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2VuZXJhdGVfcGFyc2VyLnNoCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDc1NQppbmRleCBlNGQ4OGIyZTg0Y2Q0YTZlYmNiYTdkZDY3MmMxN2RjYWY3ZGRhNjQzLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nZW5lcmF0ZV9wYXJzZXIuc2gKKysrIC9kZXYvbnVs
bApAQCAtMSwyOCArMCwwIEBACi0jIS9iaW4vYmFzaAotIyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jIEdlbmVyYXRlcyBHTFNMIEVT
IHBhcnNlciAtIGdsc2xhbmdfbGV4LmNwcCwgZ2xzbGFuZ190YWIuaCwgYW5kIGdsc2xhbmdfdGFi
LmNwcAotCi1ydW5fZmxleCgpCi17Ci1pbnB1dF9maWxlPSRzY3JpcHRfZGlyLyQxLmwKLW91dHB1
dF9zb3VyY2U9JHNjcmlwdF9kaXIvJDFfbGV4LmNwcAotZmxleCAtLW5vbGluZSAtLW5vdW5pc3Rk
IC0tb3V0ZmlsZT0kb3V0cHV0X3NvdXJjZSAkaW5wdXRfZmlsZQotfQotCi1ydW5fYmlzb24oKQot
ewotaW5wdXRfZmlsZT0kc2NyaXB0X2Rpci8kMS55Ci1vdXRwdXRfaGVhZGVyPSRzY3JpcHRfZGly
LyQxX3RhYi5oCi1vdXRwdXRfc291cmNlPSRzY3JpcHRfZGlyLyQxX3RhYi5jcHAKLWJpc29uIC0t
bm8tbGluZXMgLS1za2VsZXRvbj15YWNjLmMgLS1kZWZpbmVzPSRvdXRwdXRfaGVhZGVyIC0tb3V0
cHV0PSRvdXRwdXRfc291cmNlICRpbnB1dF9maWxlCi19Ci0KLXNjcmlwdF9kaXI9JChkaXJuYW1l
ICQwKQotCi0jIEdlbmVyYXRlIFBhcnNlcgotcnVuX2ZsZXggZ2xzbGFuZwotcnVuX2Jpc29uIGds
c2xhbmcKLXBhdGNoIC0tc2lsZW50IC0tZm9yd2FyZCA8IDY0Yml0LWxleGVyLXNhZmV0eS5wYXRj
aApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xh
bmcuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyMjExOTkwOTNjMjFhYjk3ZjgyMWE2ZmI2YjE4
NDgyMTZlMjI4NTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcuaAorKysgL2Rl
di9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi1zdHJ1Y3QgVFBhcnNlQ29u
dGV4dDsKLWV4dGVybiBpbnQgZ2xzbGFuZ19pbml0aWFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRl
eHQpOwotZXh0ZXJuIGludCBnbHNsYW5nX2ZpbmFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRleHQp
OwotCi1leHRlcm4gaW50IGdsc2xhbmdfc2NhbihzaXplX3QgY291bnQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGludCBsZW5ndGhbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFRQYXJz
ZUNvbnRleHQqIGNvbnRleHQpOwotZXh0ZXJuIGludCBnbHNsYW5nX3BhcnNlKFRQYXJzZUNvbnRl
eHQqIGNvbnRleHQpOwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvZ2xzbGFuZy5sIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L2dsc2xhbmcubApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQzNTBkNGMyNzM1MjE4
ZDlhMGIwNDk2YjViZmQwNzk5OTI1MzZmYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xz
bGFuZy5sCisrKyAvZGV2L251bGwKQEAgLTEsMzY1ICswLDAgQEAKLS8qCi0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
Ci0vLwotCi1UaGlzIGZpbGUgY29udGFpbnMgdGhlIExleCBzcGVjaWZpY2F0aW9uIGZvciBHTFNM
IEVTLgotQmFzZWQgb24gQU5TSSBDIGdyYW1tYXIsIExleCBzcGVjaWZpY2F0aW9uOgotaHR0cDov
L3d3dy5seXNhdG9yLmxpdS5zZS9jL0FOU0ktQy1ncmFtbWFyLWwuaHRtbAotCi1JRiBZT1UgTU9E
SUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2gsCi1X
SElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xhbmdfbGV4LmNwcCkuCi0qLwot
Ci0ldG9wewotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBi
eSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQotCi0vLyBJZ25vcmUgZXJyb3JzIGlu
IGF1dG8tZ2VuZXJhdGVkIGNvZGUuCi0jaWYgZGVmaW5lZChfX0dOVUNfXykKLSNwcmFnbWEgR0ND
IGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtZnVuY3Rpb24iCi0jcHJhZ21hIEdDQyBkaWFn
bm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLXZhcmlhYmxlIgotI3ByYWdtYSBHQ0MgZGlhZ25vc3Rp
YyBpZ25vcmVkICItV3N3aXRjaC1lbnVtIgotI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKLSNwcmFn
bWEgd2FybmluZyhkaXNhYmxlOiA0MDY1KQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQxODkp
Ci0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUwNSkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxl
OiA0NzAxKQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fY2xhbmdfXykKLSNwcmFnbWEgY2xhbmcg
ZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bmtu
b3duLXByYWdtYXMiCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNh
dGVkLXJlZ2lzdGVyIgotI2VuZGlmCi19Ci0KLSV7Ci0jaW5jbHVkZSAiY29tcGlsZXIvZ2xzbGFu
Zy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlQ29udGV4dC5oIgotI2luY2x1ZGUgImNvbXBp
bGVyL3ByZXByb2Nlc3Nvci9Ub2tlbi5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3V0aWwuaCIKLSNp
bmNsdWRlICJnbHNsYW5nX3RhYi5oIgotCi0vKiB3aW5kb3dzIG9ubHkgcHJhZ21hICovCi0jaWZk
ZWYgX01TQ19WRVIKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDEwMikKLSNlbmRpZgotCi0j
ZGVmaW5lIFlZX1VTRVJfQUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIHl5bGxvYy0+Zmlyc3RfZmlsZSA9IHl5bGxvYy0+bGFzdF9maWxlID0geXljb2x1bW47IFwK
LSAgICB5eWxsb2MtPmZpcnN0X2xpbmUgPSB5eWxsb2MtPmxhc3RfbGluZSA9IHl5bGluZW5vOwot
Ci0jZGVmaW5lIFlZX0lOUFVUKGJ1ZiwgcmVzdWx0LCBtYXhfc2l6ZSkgXAotICAgIHJlc3VsdCA9
IHN0cmluZ19pbnB1dChidWYsIG1heF9zaXplLCB5eXNjYW5uZXIpOwotCi1zdGF0aWMgeXlfc2l6
ZV90IHN0cmluZ19pbnB1dChjaGFyKiBidWYsIHl5X3NpemVfdCBtYXhfc2l6ZSwgeXlzY2FuX3Qg
eXlzY2FubmVyKTsKLXN0YXRpYyBpbnQgY2hlY2tfdHlwZSh5eXNjYW5fdCB5eXNjYW5uZXIpOwot
c3RhdGljIGludCByZXNlcnZlZF93b3JkKHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci1zdGF0aWMgaW50
IGludF9jb25zdGFudCh5eXNjYW5fdCB5eXNjYW5uZXIpOwotc3RhdGljIGludCBmbG9hdF9jb25z
dGFudCh5eXNjYW5fdCB5eXNjYW5uZXIpOwotJX0KLQotJW9wdGlvbiBub3l5d3JhcCBub3VucHV0
IG5ldmVyLWludGVyYWN0aXZlCi0lb3B0aW9uIHl5bGluZW5vIHJlZW50cmFudCBiaXNvbi1icmlk
Z2UgYmlzb24tbG9jYXRpb25zCi0lb3B0aW9uIGV4dHJhLXR5cGU9IlRQYXJzZUNvbnRleHQqIgot
Ci1EICAgICAgICAgICBbMC05XQotTCAgICAgICAgICAgW2EtekEtWl9dCi1IICAgICAgICAgICBb
YS1mQS1GMC05XQotRSAgICAgICAgICAgW0VlXVsrLV0/e0R9KwotTyAgICAgICAgICAgWzAtN10K
LQotJSUKLQotImludmFyaWFudCIgICAgeyByZXR1cm4gSU5WQVJJQU5UOyB9Ci0iaGlnaHAiICAg
ICAgICB7IHJldHVybiBISUdIX1BSRUNJU0lPTjsgfQotIm1lZGl1bXAiICAgICAgeyByZXR1cm4g
TUVESVVNX1BSRUNJU0lPTjsgfQotImxvd3AiICAgICAgICAgeyByZXR1cm4gTE9XX1BSRUNJU0lP
TjsgfQotInByZWNpc2lvbiIgICAgeyByZXR1cm4gUFJFQ0lTSU9OOyB9Ci0KLSJhdHRyaWJ1dGUi
ICAgIHsgcmV0dXJuIEFUVFJJQlVURTsgfQotImNvbnN0IiAgICAgICAgeyByZXR1cm4gQ09OU1Rf
UVVBTDsgfQotInVuaWZvcm0iICAgICAgeyByZXR1cm4gVU5JRk9STTsgfQotInZhcnlpbmciICAg
ICAgeyByZXR1cm4gVkFSWUlORzsgfQotCi0iYnJlYWsiICAgICAgICB7IHJldHVybiBCUkVBSzsg
fQotImNvbnRpbnVlIiAgICAgeyByZXR1cm4gQ09OVElOVUU7IH0KLSJkbyIgICAgICAgICAgIHsg
cmV0dXJuIERPOyB9Ci0iZm9yIiAgICAgICAgICB7IHJldHVybiBGT1I7IH0KLSJ3aGlsZSIgICAg
ICAgIHsgcmV0dXJuIFdISUxFOyB9Ci0KLSJpZiIgICAgICAgICAgIHsgcmV0dXJuIElGOyB9Ci0i
ZWxzZSIgICAgICAgICB7IHJldHVybiBFTFNFOyB9Ci0KLSJpbiIgICAgICAgICAgIHsgcmV0dXJu
IElOX1FVQUw7IH0KLSJvdXQiICAgICAgICAgIHsgcmV0dXJuIE9VVF9RVUFMOyB9Ci0iaW5vdXQi
ICAgICAgICB7IHJldHVybiBJTk9VVF9RVUFMOyB9Ci0KLSJmbG9hdCIgICAgICAgIHsgcmV0dXJu
IEZMT0FUX1RZUEU7IH0KLSJpbnQiICAgICAgICAgIHsgcmV0dXJuIElOVF9UWVBFOyB9Ci0idm9p
ZCIgICAgICAgICB7IHJldHVybiBWT0lEX1RZUEU7IH0KLSJib29sIiAgICAgICAgIHsgcmV0dXJu
IEJPT0xfVFlQRTsgfQotInRydWUiICAgICAgICAgeyB5eWx2YWwtPmxleC5iID0gdHJ1ZTsgIHJl
dHVybiBCT09MQ09OU1RBTlQ7IH0KLSJmYWxzZSIgICAgICAgIHsgeXlsdmFsLT5sZXguYiA9IGZh
bHNlOyByZXR1cm4gQk9PTENPTlNUQU5UOyB9Ci0KLSJkaXNjYXJkIiAgICAgIHsgcmV0dXJuIERJ
U0NBUkQ7IH0KLSJyZXR1cm4iICAgICAgIHsgcmV0dXJuIFJFVFVSTjsgfQotCi0ibWF0MiIgICAg
ICAgICB7IHJldHVybiBNQVRSSVgyOyB9Ci0ibWF0MyIgICAgICAgICB7IHJldHVybiBNQVRSSVgz
OyB9Ci0ibWF0NCIgICAgICAgICB7IHJldHVybiBNQVRSSVg0OyB9Ci0KLSJ2ZWMyIiAgICAgICAg
IHsgcmV0dXJuIFZFQzI7IH0KLSJ2ZWMzIiAgICAgICAgIHsgcmV0dXJuIFZFQzM7IH0KLSJ2ZWM0
IiAgICAgICAgIHsgcmV0dXJuIFZFQzQ7IH0KLSJpdmVjMiIgICAgICAgIHsgcmV0dXJuIElWRUMy
OyB9Ci0iaXZlYzMiICAgICAgICB7IHJldHVybiBJVkVDMzsgfQotIml2ZWM0IiAgICAgICAgeyBy
ZXR1cm4gSVZFQzQ7IH0KLSJidmVjMiIgICAgICAgIHsgcmV0dXJuIEJWRUMyOyB9Ci0iYnZlYzMi
ICAgICAgICB7IHJldHVybiBCVkVDMzsgfQotImJ2ZWM0IiAgICAgICAgeyByZXR1cm4gQlZFQzQ7
IH0KLQotInNhbXBsZXIyRCIgICAgICAgICAgeyByZXR1cm4gU0FNUExFUjJEOyB9Ci0ic2FtcGxl
ckN1YmUiICAgICAgICB7IHJldHVybiBTQU1QTEVSQ1VCRTsgfQotInNhbXBsZXJFeHRlcm5hbE9F
UyIgeyByZXR1cm4gU0FNUExFUl9FWFRFUk5BTF9PRVM7IH0KLSJzYW1wbGVyMkRSZWN0IiAgICAg
IHsgcmV0dXJuIFNBTVBMRVIyRFJFQ1Q7IH0KLQotInN0cnVjdCIgICAgICAgeyByZXR1cm4gU1RS
VUNUOyB9Ci0KLSJhc20iICAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQotCi0iY2xhc3MiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KLSJ1bmlvbiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQot
ImVudW0iICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0idHlw
ZWRlZiIgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJ0ZW1wbGF0
ZSIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInRoaXMiICAgICAg
ICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0icGFja2VkIiAgICAgICB7
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQotImdvdG8iICAgICAgICAgeyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0ic3dpdGNoIiAgICAgICB7IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJkZWZhdWx0IiAgICAgIHsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCi0iaW5saW5lIiAgICAgICB7IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJub2lubGluZSIgICAgIHsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQotInZvbGF0aWxlIiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9Ci0icHVibGljIiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KLSJzdGF0aWMiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQotImV4dGVybiIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0iZXh0ZXJuYWwiICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
LSJpbnRlcmZhY2UiICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImZs
YXQiICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0KLSJsb25n
IiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInNob3J0IiAg
ICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZG91YmxlIiAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJoYWxmIiAgICAgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImZpeGVkIiAgICAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0idW5zaWduZWQiICAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJzdXBlcnAiICAgICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCi0iaW5wdXQiICAgICAgICB7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJvdXRwdXQiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQotCi0iaHZlYzIiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KLSJodmVjMyIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQotImh2ZWM0IiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9Ci0iZHZlYzIiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KLSJkdmVjMyIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQot
ImR2ZWM0IiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZnZl
YzIiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJmdmVjMyIg
ICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImZ2ZWM0IiAgICAg
ICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0KLSJzYW1wbGVyMUQiICAg
ICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJzYW1wbGVyM0Qi
ICAgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJzYW1wbGVy
MURTaGFkb3ciICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJzYW1w
bGVyMkRTaGFkb3ciICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJz
YW1wbGVyM0RSZWN0IiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
LSJzYW1wbGVyMkRSZWN0U2hhZG93IiB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KLQotInNpemVvZiIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0iY2FzdCIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQot
Im5hbWVzcGFjZSIgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0idXNp
bmciICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQote0x9KHtM
fXx7RH0pKiAgICAgICB7Ci0gICB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5
eXRleHQpOyAKLSAgIHJldHVybiBjaGVja190eXBlKHl5c2Nhbm5lcik7Ci19Ci0KLTBbeFhde0h9
KyAgICAgICAgIHsgcmV0dXJuIGludF9jb25zdGFudCh5eXNjYW5uZXIpOyB9Ci0we099KyAgICAg
ICAgICAgICB7IHJldHVybiBpbnRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQote0R9KyAgICAgICAg
ICAgICAgeyByZXR1cm4gaW50X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KLQote0R9K3tFfSAgICAg
ICAgICAgeyByZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQote0R9KyIuIntEfSoo
e0V9KT8geyByZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQotIi4ie0R9Kyh7RX0p
PyAgICAgeyByZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQotCi0iKz0iICAgICAg
ICAgICAgeyByZXR1cm4gQUREX0FTU0lHTjsgfQotIi09IiAgICAgICAgICAgIHsgcmV0dXJuIFNV
Ql9BU1NJR047IH0KLSIqPSIgICAgICAgICAgICB7IHJldHVybiBNVUxfQVNTSUdOOyB9Ci0iLz0i
ICAgICAgICAgICAgeyByZXR1cm4gRElWX0FTU0lHTjsgfQotIiU9IiAgICAgICAgICAgIHsgcmV0
dXJuIE1PRF9BU1NJR047IH0KLSI8PD0iICAgICAgICAgICB7IHJldHVybiBMRUZUX0FTU0lHTjsg
fQotIj4+PSIgICAgICAgICAgIHsgcmV0dXJuIFJJR0hUX0FTU0lHTjsgfQotIiY9IiAgICAgICAg
ICAgIHsgcmV0dXJuIEFORF9BU1NJR047IH0KLSJePSIgICAgICAgICAgICB7IHJldHVybiBYT1Jf
QVNTSUdOOyB9Ci0ifD0iICAgICAgICAgICAgeyByZXR1cm4gT1JfQVNTSUdOOyB9Ci0KLSIrKyIg
ICAgICAgICAgICB7IHJldHVybiBJTkNfT1A7IH0KLSItLSIgICAgICAgICAgICB7IHJldHVybiBE
RUNfT1A7IH0KLSImJiIgICAgICAgICAgICB7IHJldHVybiBBTkRfT1A7IH0KLSJ8fCIgICAgICAg
ICAgICB7IHJldHVybiBPUl9PUDsgfQotIl5eIiAgICAgICAgICAgIHsgcmV0dXJuIFhPUl9PUDsg
fQotIjw9IiAgICAgICAgICAgIHsgcmV0dXJuIExFX09QOyB9Ci0iPj0iICAgICAgICAgICAgeyBy
ZXR1cm4gR0VfT1A7IH0KLSI9PSIgICAgICAgICAgICB7IHJldHVybiBFUV9PUDsgfQotIiE9IiAg
ICAgICAgICAgIHsgcmV0dXJuIE5FX09QOyB9Ci0iPDwiICAgICAgICAgICAgeyByZXR1cm4gTEVG
VF9PUDsgfQotIj4+IiAgICAgICAgICAgIHsgcmV0dXJuIFJJR0hUX09QOyB9Ci0iOyIgICAgICAg
ICAgICAgeyByZXR1cm4gU0VNSUNPTE9OOyB9Ci0oInsifCI8JSIpICAgICAgeyByZXR1cm4gTEVG
VF9CUkFDRTsgfQotKCJ9InwiJT4iKSAgICAgIHsgcmV0dXJuIFJJR0hUX0JSQUNFOyB9Ci0iLCIg
ICAgICAgICB7IHJldHVybiBDT01NQTsgfQotIjoiICAgICAgICAgeyByZXR1cm4gQ09MT047IH0K
LSI9IiAgICAgICAgIHsgcmV0dXJuIEVRVUFMOyB9Ci0iKCIgICAgICAgICB7IHJldHVybiBMRUZU
X1BBUkVOOyB9Ci0iKSIgICAgICAgICB7IHJldHVybiBSSUdIVF9QQVJFTjsgfQotKCJbInwiPDoi
KSAgeyByZXR1cm4gTEVGVF9CUkFDS0VUOyB9Ci0oIl0ifCI6PiIpICB7IHJldHVybiBSSUdIVF9C
UkFDS0VUOyB9Ci0iLiIgICAgICAgICB7IHJldHVybiBET1Q7IH0KLSIhIiAgICAgICAgIHsgcmV0
dXJuIEJBTkc7IH0KLSItIiAgICAgICAgIHsgcmV0dXJuIERBU0g7IH0KLSJ+IiAgICAgICAgIHsg
cmV0dXJuIFRJTERFOyB9Ci0iKyIgICAgICAgICB7IHJldHVybiBQTFVTOyB9Ci0iKiIgICAgICAg
ICB7IHJldHVybiBTVEFSOyB9Ci0iLyIgICAgICAgICB7IHJldHVybiBTTEFTSDsgfQotIiUiICAg
ICAgICAgeyByZXR1cm4gUEVSQ0VOVDsgfQotIjwiICAgICAgICAgeyByZXR1cm4gTEVGVF9BTkdM
RTsgfQotIj4iICAgICAgICAgeyByZXR1cm4gUklHSFRfQU5HTEU7IH0KLSJ8IiAgICAgICAgIHsg
cmV0dXJuIFZFUlRJQ0FMX0JBUjsgfQotIl4iICAgICAgICAgeyByZXR1cm4gQ0FSRVQ7IH0KLSIm
IiAgICAgICAgIHsgcmV0dXJuIEFNUEVSU0FORDsgfQotIj8iICAgICAgICAgeyByZXR1cm4gUVVF
U1RJT047IH0KLQotWyBcdFx2XG5cZlxyXSB7IH0KLTw8RU9GPj4gICAgeyB5eXRlcm1pbmF0ZSgp
OyB9Ci0uICAgICAgICAgIHsgYXNzZXJ0KGZhbHNlKTsgcmV0dXJuIDA7IH0KLQotJSUKLQotI2lm
IGRlZmluZWQoX19jbGFuZ19fKQotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAotI2VuZGlm
Ci0KLXl5X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCB5eV9zaXplX3QgbWF4X3NpemUs
IHl5c2Nhbl90IHl5c2Nhbm5lcikgewotICAgIHBwOjpUb2tlbiB0b2tlbjsKLSAgICB5eWdldF9l
eHRyYSh5eXNjYW5uZXIpLT5wcmVwcm9jZXNzb3IubGV4KCZ0b2tlbik7Ci0gICAgeXlfc2l6ZV90
IGxlbiA9IHRva2VuLnR5cGUgPT0gcHA6OlRva2VuOjpMQVNUID8gMCA6IHRva2VuLnRleHQuc2l6
ZSgpOwotICAgIGlmIChsZW4gPCBtYXhfc2l6ZSkKLSAgICAgICAgbWVtY3B5KGJ1ZiwgdG9rZW4u
dGV4dC5jX3N0cigpLCBsZW4pOwotICAgIHl5c2V0X2NvbHVtbih0b2tlbi5sb2NhdGlvbi5maWxl
LCB5eXNjYW5uZXIpOwotICAgIHl5c2V0X2xpbmVubyh0b2tlbi5sb2NhdGlvbi5saW5lLCB5eXNj
YW5uZXIpOwotCi0gICAgaWYgKGxlbiA+PSBtYXhfc2l6ZSkKLSAgICAgICAgWVlfRkFUQUxfRVJS
T1IoIklucHV0IGJ1ZmZlciBvdmVyZmxvdyIpOwotICAgIGVsc2UgaWYgKGxlbiA+IDApCi0gICAg
ICAgIGJ1ZltsZW4rK10gPSAnICc7Ci0gICAgcmV0dXJuIGxlbjsKLX0KLQotaW50IGNoZWNrX3R5
cGUoeXlzY2FuX3QgeXlzY2FubmVyKSB7Ci0gICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190KikgeXlzY2FubmVyOwotICAgIAotICAgIGludCB0b2tlbiA9IElERU5USUZJ
RVI7Ci0gICAgVFN5bWJvbCogc3ltYm9sID0geXlleHRyYS0+c3ltYm9sVGFibGUuZmluZCh5eXRl
eHQpOwotICAgIGlmIChzeW1ib2wgJiYgc3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKLSAgICAgICAg
VFZhcmlhYmxlKiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+KHN5bWJvbCk7Ci0g
ICAgICAgIGlmICh2YXJpYWJsZS0+aXNVc2VyVHlwZSgpKQotICAgICAgICAgICAgdG9rZW4gPSBU
WVBFX05BTUU7Ci0gICAgfQotICAgIHl5bHZhbC0+bGV4LnN5bWJvbCA9IHN5bWJvbDsKLSAgICBy
ZXR1cm4gdG9rZW47Ci19Ci0KLWludCByZXNlcnZlZF93b3JkKHl5c2Nhbl90IHl5c2Nhbm5lcikg
ewotICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIHl5c2Nhbm5l
cjsKLQotICAgIHl5ZXh0cmEtPmVycm9yKCp5eWxsb2MsICJJbGxlZ2FsIHVzZSBvZiByZXNlcnZl
ZCB3b3JkIiwgeXl0ZXh0LCAiIik7Ci0gICAgeXlleHRyYS0+cmVjb3ZlcigpOwotICAgIHJldHVy
biAwOwotfQotCi12b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxvYywgVFBhcnNlQ29udGV4dCogY29u
dGV4dCwgY29uc3QgY2hhciogcmVhc29uKSB7Ci0gICAgY29udGV4dC0+ZXJyb3IoKmxsb2MsIHJl
YXNvbiwgeXlnZXRfdGV4dChjb250ZXh0LT5zY2FubmVyKSk7Ci0gICAgY29udGV4dC0+cmVjb3Zl
cigpOwotfQotCi1pbnQgaW50X2NvbnN0YW50KHl5c2Nhbl90IHl5c2Nhbm5lcikgewotICAgIHN0
cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIHl5c2Nhbm5lcjsKLQotICAg
IGlmICghYXRvaV9jbGFtcCh5eXRleHQsICYoeXlsdmFsLT5sZXguaSkpKQotICAgICAgICB5eWV4
dHJhLT53YXJuaW5nKCp5eWxsb2MsICJJbnRlZ2VyIG92ZXJmbG93IiwgeXl0ZXh0LCAiIik7Ci0g
ICAgcmV0dXJuIElOVENPTlNUQU5UOwotfQotCi1pbnQgZmxvYXRfY29uc3RhbnQoeXlzY2FuX3Qg
eXlzY2FubmVyKSB7Ci0gICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
KikgeXlzY2FubmVyOwotCi0gICAgaWYgKCFhdG9mX2NsYW1wKHl5dGV4dCwgJih5eWx2YWwtPmxl
eC5mKSkpCi0gICAgICAgIHl5ZXh0cmEtPndhcm5pbmcoKnl5bGxvYywgIkZsb2F0IG92ZXJmbG93
IiwgeXl0ZXh0LCAiIik7Ci0gICAgcmV0dXJuIEZMT0FUQ09OU1RBTlQ7Ci19Ci0KLWludCBnbHNs
YW5nX2luaXRpYWxpemUoVFBhcnNlQ29udGV4dCogY29udGV4dCkgewotICAgIHl5c2Nhbl90IHNj
YW5uZXIgPSBOVUxMOwotICAgIGlmICh5eWxleF9pbml0X2V4dHJhKGNvbnRleHQsICZzY2FubmVy
KSkKLSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICBjb250ZXh0LT5zY2FubmVyID0gc2Nhbm5lcjsK
LSAgICByZXR1cm4gMDsKLX0KLQotaW50IGdsc2xhbmdfZmluYWxpemUoVFBhcnNlQ29udGV4dCog
Y29udGV4dCkgewotICAgIHl5c2Nhbl90IHNjYW5uZXIgPSBjb250ZXh0LT5zY2FubmVyOwotICAg
IGlmIChzY2FubmVyID09IE5VTEwpIHJldHVybiAwOwotICAgIAotICAgIGNvbnRleHQtPnNjYW5u
ZXIgPSBOVUxMOwotICAgIHl5bGV4X2Rlc3Ryb3koc2Nhbm5lcik7Ci0KLSAgICByZXR1cm4gMDsK
LX0KLQotaW50IGdsc2xhbmdfc2NhbihzaXplX3QgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0
cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCi0gICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRl
eHQqIGNvbnRleHQpIHsKLSAgICB5eXJlc3RhcnQoTlVMTCwgY29udGV4dC0+c2Nhbm5lcik7Ci0g
ICAgeXlzZXRfY29sdW1uKDAsIGNvbnRleHQtPnNjYW5uZXIpOwotICAgIHl5c2V0X2xpbmVubygx
LCBjb250ZXh0LT5zY2FubmVyKTsKLQotICAgIC8vIEluaXRpYWxpemUgcHJlcHJvY2Vzc29yLgot
ICAgIGlmICghY29udGV4dC0+cHJlcHJvY2Vzc29yLmluaXQoY291bnQsIHN0cmluZywgbGVuZ3Ro
KSkKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnNldE1heFRv
a2VuTGVuZ3RoKFNIX01BWF9UT0tFTl9MRU5HVEgpOwotCi0gICAgLy8gRGVmaW5lIGV4dGVuc2lv
biBtYWNyb3MuCi0gICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciA9IGNv
bnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yKCk7Ci0gICAgZm9yIChURXh0ZW5zaW9uQmVoYXZpb3I6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRCZWhhdmlvci5iZWdpbigpOwotICAgICAgICAgaXRl
ciAhPSBleHRCZWhhdmlvci5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGNvbnRleHQtPnByZXBy
b2Nlc3Nvci5wcmVkZWZpbmVNYWNybyhpdGVyLT5maXJzdC5jX3N0cigpLCAxKTsKLSAgICB9Ci0g
ICAgaWYgKGNvbnRleHQtPmZyYWdtZW50UHJlY2lzaW9uSGlnaCkKLSAgICAgICAgY29udGV4dC0+
cHJlcHJvY2Vzc29yLnByZWRlZmluZU1hY3JvKCJHTF9GUkFHTUVOVF9QUkVDSVNJT05fSElHSCIs
IDEpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLnkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvZ2xzbGFuZy55CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWQ1
ZDc4NzFhYTNiNmZhNzU0ZWU5ZmVhMDY5NTU2Y2Q1OThlNzA1Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9nbHNsYW5nLnkKKysrIC9kZXYvbnVsbApAQCAtMSwyMDAzICswLDAgQEAKLS8qCi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0vLwotCi1UaGlzIGZpbGUgY29udGFpbnMgdGhlIFlhY2MgZ3JhbW1hciBm
b3IgR0xTTCBFUy4KLUJhc2VkIG9uIEFOU0kgQyBZYWNjIGdyYW1tYXI6Ci1odHRwOi8vd3d3Lmx5
c2F0b3IubGl1LnNlL2MvQU5TSS1DLWdyYW1tYXIteS5odG1sCi0KLUlGIFlPVSBNT0RJRlkgVEhJ
UyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaCwKLVdISUNIIEdF
TkVSQVRFUyBUSEUgR0xTTCBFUyBQQVJTRVIgKGdsc2xhbmdfdGFiLmNwcCBBTkQgZ2xzbGFuZ190
YWIuaCkuCi0qLwotCi0lewotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVGhpcyBmaWxlIGlzIGF1
dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCi0KLS8vIEln
bm9yZSBlcnJvcnMgaW4gYXV0by1nZW5lcmF0ZWQgY29kZS4KLSNpZiBkZWZpbmVkKF9fR05VQ19f
KQotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1mdW5jdGlvbiIKLSNw
cmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtdmFyaWFibGUiCi0jcHJhZ21h
IEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc3dpdGNoLWVudW0iCi0jZWxpZiBkZWZpbmVkKF9N
U0NfVkVSKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQwNjUpCi0jcHJhZ21hIHdhcm5pbmco
ZGlzYWJsZTogNDE4OSkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NTA1KQotI3ByYWdtYSB3
YXJuaW5nKGRpc2FibGU6IDQ3MDEpCi0jZW5kaWYKLQotI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJv
bFRhYmxlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VDb250ZXh0LmgiCi0jaW5jbHVkZSAi
R0xTTEFORy9TaGFkZXJMYW5nLmgiCi0KLSNkZWZpbmUgWVlFTkFCTEVfTkxTIDAKLQotI2RlZmlu
ZSBZWUxFWF9QQVJBTSBjb250ZXh0LT5zY2FubmVyCi0lfQotCi0lZXhwZWN0IDEgLyogT25lIHNo
aWZ0IHJlZHVjZSBjb25mbGljdCBiZWNhdXNlIG9mIGlmIHwgZWxzZSAqLwotJXB1cmUtcGFyc2Vy
Ci0lcGFyc2UtcGFyYW0ge1RQYXJzZUNvbnRleHQqIGNvbnRleHR9Ci0lbG9jYXRpb25zCi0lbGV4
LXBhcmFtIHtZWUxFWF9QQVJBTX0KLQotJWNvZGUgcmVxdWlyZXMgewotI2RlZmluZSBZWUxUWVBF
IFRTb3VyY2VMb2MKLSNkZWZpbmUgWVlMVFlQRV9JU19ERUNMQVJFRCAxCi0jZGVmaW5lIFNIX01B
WF9UT0tFTl9MRU5HVEggMjU2ICAvLyBXZWJHTCBzcGVjLgotfQotCi0ldW5pb24gewotICAgIHN0
cnVjdCB7Ci0gICAgICAgIHVuaW9uIHsKLSAgICAgICAgICAgIFRTdHJpbmcgKnN0cmluZzsKLSAg
ICAgICAgICAgIGZsb2F0IGY7Ci0gICAgICAgICAgICBpbnQgaTsKLSAgICAgICAgICAgIGJvb2wg
YjsKLSAgICAgICAgfTsKLSAgICAgICAgVFN5bWJvbCogc3ltYm9sOwotICAgIH0gbGV4OwotICAg
IHN0cnVjdCB7Ci0gICAgICAgIFRPcGVyYXRvciBvcDsKLSAgICAgICAgdW5pb24gewotICAgICAg
ICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7Ci0gICAgICAgICAgICBUSW50ZXJtTm9kZVBh
aXIgbm9kZVBhaXI7Ci0gICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGludGVybVR5cGVkTm9kZTsK
LSAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUFnZ3JlZ2F0ZTsKLSAgICAgICAg
fTsKLSAgICAgICAgdW5pb24gewotICAgICAgICAgICAgVFB1YmxpY1R5cGUgdHlwZTsKLSAgICAg
ICAgICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOwotICAgICAgICAgICAgVFF1YWxpZmllciBxdWFs
aWZpZXI7Ci0gICAgICAgICAgICBURnVuY3Rpb24qIGZ1bmN0aW9uOwotICAgICAgICAgICAgVFBh
cmFtZXRlciBwYXJhbTsKLSAgICAgICAgICAgIFRGaWVsZCogZmllbGQ7Ci0gICAgICAgICAgICBU
RmllbGRMaXN0KiBmaWVsZExpc3Q7Ci0gICAgICAgIH07Ci0gICAgfSBpbnRlcm07Ci19Ci0KLSV7
Ci1leHRlcm4gaW50IHl5bGV4KFlZU1RZUEUqIHl5bHZhbCwgWVlMVFlQRSogeXlsbG9jLCB2b2lk
KiB5eXNjYW5uZXIpOwotZXh0ZXJuIHZvaWQgeXllcnJvcihZWUxUWVBFKiB5eWxsb2MsIFRQYXJz
ZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7Ci0KLSNkZWZpbmUgWVlMTE9D
X0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKSAgICAgICAgICAgICAgICAgICAgICBcCi0gIGRvIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgaWYgKE4pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2ZpbGUgPSBZWVJIU0xPQyhSaHMsIDEpLmZp
cnN0X2ZpbGU7ICBcCi0gICAgICAgIChDdXJyZW50KS5maXJzdF9saW5lID0gWVlSSFNMT0MoUmhz
LCAxKS5maXJzdF9saW5lOyAgXAotICAgICAgICAoQ3VycmVudCkubGFzdF9maWxlID0gWVlSSFNM
T0MoUmhzLCBOKS5sYXN0X2ZpbGU7ICAgIFwKLSAgICAgICAgKEN1cnJlbnQpLmxhc3RfbGluZSA9
IFlZUkhTTE9DKFJocywgTikubGFzdF9saW5lOyAgICBcCi0gICAgICB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZWxzZSB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
KEN1cnJlbnQpLmZpcnN0X2ZpbGUgPSBZWVJIU0xPQyhSaHMsIDApLmxhc3RfZmlsZTsgICBcCi0g
ICAgICAgIChDdXJyZW50KS5maXJzdF9saW5lID0gWVlSSFNMT0MoUmhzLCAwKS5sYXN0X2xpbmU7
ICAgXAotICAgICAgICAoQ3VycmVudCkubGFzdF9maWxlID0gWVlSSFNMT0MoUmhzLCAwKS5sYXN0
X2ZpbGU7ICAgIFwKLSAgICAgICAgKEN1cnJlbnQpLmxhc3RfbGluZSA9IFlZUkhTTE9DKFJocywg
MCkubGFzdF9saW5lOyAgICBcCi0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIFZFUlRF
WF9PTkxZKFMsIEwpIHsgIFwKLSAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSAhPSBTSF9WRVJU
RVhfU0hBREVSKSB7ICBcCi0gICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGlu
IHZlcnRleCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCi0gICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsgIFwKLSAgICB9ICBcCi19Ci0KLSNkZWZpbmUgRlJBR19PTkxZKFMsIEwpIHsgIFwKLSAgICBp
ZiAoY29udGV4dC0+c2hhZGVyVHlwZSAhPSBTSF9GUkFHTUVOVF9TSEFERVIpIHsgIFwKLSAgICAg
ICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21lbnQgc2hhZGVycyBvbmx5
ICIsIFMpOyAgXAotICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCi0gICAgfSAgXAotfQot
JX0KLQotJXRva2VuIDxsZXg+IElOVkFSSUFOVCBISUdIX1BSRUNJU0lPTiBNRURJVU1fUFJFQ0lT
SU9OIExPV19QUkVDSVNJT04gUFJFQ0lTSU9OCi0ldG9rZW4gPGxleD4gQVRUUklCVVRFIENPTlNU
X1FVQUwgQk9PTF9UWVBFIEZMT0FUX1RZUEUgSU5UX1RZUEUKLSV0b2tlbiA8bGV4PiBCUkVBSyBD
T05USU5VRSBETyBFTFNFIEZPUiBJRiBESVNDQVJEIFJFVFVSTgotJXRva2VuIDxsZXg+IEJWRUMy
IEJWRUMzIEJWRUM0IElWRUMyIElWRUMzIElWRUM0IFZFQzIgVkVDMyBWRUM0Ci0ldG9rZW4gPGxl
eD4gTUFUUklYMiBNQVRSSVgzIE1BVFJJWDQgSU5fUVVBTCBPVVRfUVVBTCBJTk9VVF9RVUFMIFVO
SUZPUk0gVkFSWUlORwotJXRva2VuIDxsZXg+IFNUUlVDVCBWT0lEX1RZUEUgV0hJTEUKLSV0b2tl
biA8bGV4PiBTQU1QTEVSMkQgU0FNUExFUkNVQkUgU0FNUExFUl9FWFRFUk5BTF9PRVMgU0FNUExF
UjJEUkVDVAotCi0ldG9rZW4gPGxleD4gSURFTlRJRklFUiBUWVBFX05BTUUgRkxPQVRDT05TVEFO
VCBJTlRDT05TVEFOVCBCT09MQ09OU1RBTlQKLSV0b2tlbiA8bGV4PiBMRUZUX09QIFJJR0hUX09Q
Ci0ldG9rZW4gPGxleD4gSU5DX09QIERFQ19PUCBMRV9PUCBHRV9PUCBFUV9PUCBORV9PUAotJXRv
a2VuIDxsZXg+IEFORF9PUCBPUl9PUCBYT1JfT1AgTVVMX0FTU0lHTiBESVZfQVNTSUdOIEFERF9B
U1NJR04KLSV0b2tlbiA8bGV4PiBNT0RfQVNTSUdOIExFRlRfQVNTSUdOIFJJR0hUX0FTU0lHTiBB
TkRfQVNTSUdOIFhPUl9BU1NJR04gT1JfQVNTSUdOCi0ldG9rZW4gPGxleD4gU1VCX0FTU0lHTgot
Ci0ldG9rZW4gPGxleD4gTEVGVF9QQVJFTiBSSUdIVF9QQVJFTiBMRUZUX0JSQUNLRVQgUklHSFRf
QlJBQ0tFVCBMRUZUX0JSQUNFIFJJR0hUX0JSQUNFIERPVAotJXRva2VuIDxsZXg+IENPTU1BIENP
TE9OIEVRVUFMIFNFTUlDT0xPTiBCQU5HIERBU0ggVElMREUgUExVUyBTVEFSIFNMQVNIIFBFUkNF
TlQKLSV0b2tlbiA8bGV4PiBMRUZUX0FOR0xFIFJJR0hUX0FOR0xFIFZFUlRJQ0FMX0JBUiBDQVJF
VCBBTVBFUlNBTkQgUVVFU1RJT04KLQotJXR5cGUgPGxleD4gaWRlbnRpZmllcgotJXR5cGUgPGlu
dGVybT4gYXNzaWdubWVudF9vcGVyYXRvciB1bmFyeV9vcGVyYXRvcgotJXR5cGUgPGludGVybS5p
bnRlcm1UeXBlZE5vZGU+IHZhcmlhYmxlX2lkZW50aWZpZXIgcHJpbWFyeV9leHByZXNzaW9uIHBv
c3RmaXhfZXhwcmVzc2lvbgotJXR5cGUgPGludGVybS5pbnRlcm1UeXBlZE5vZGU+IGV4cHJlc3Np
b24gaW50ZWdlcl9leHByZXNzaW9uIGFzc2lnbm1lbnRfZXhwcmVzc2lvbgotJXR5cGUgPGludGVy
bS5pbnRlcm1UeXBlZE5vZGU+IHVuYXJ5X2V4cHJlc3Npb24gbXVsdGlwbGljYXRpdmVfZXhwcmVz
c2lvbiBhZGRpdGl2ZV9leHByZXNzaW9uCi0ldHlwZSA8aW50ZXJtLmludGVybVR5cGVkTm9kZT4g
cmVsYXRpb25hbF9leHByZXNzaW9uIGVxdWFsaXR5X2V4cHJlc3Npb24KLSV0eXBlIDxpbnRlcm0u
aW50ZXJtVHlwZWROb2RlPiBjb25kaXRpb25hbF9leHByZXNzaW9uIGNvbnN0YW50X2V4cHJlc3Np
b24KLSV0eXBlIDxpbnRlcm0uaW50ZXJtVHlwZWROb2RlPiBsb2dpY2FsX29yX2V4cHJlc3Npb24g
bG9naWNhbF94b3JfZXhwcmVzc2lvbiBsb2dpY2FsX2FuZF9leHByZXNzaW9uCi0ldHlwZSA8aW50
ZXJtLmludGVybVR5cGVkTm9kZT4gc2hpZnRfZXhwcmVzc2lvbiBhbmRfZXhwcmVzc2lvbiBleGNs
dXNpdmVfb3JfZXhwcmVzc2lvbiBpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbgotJXR5cGUgPGludGVy
bS5pbnRlcm1UeXBlZE5vZGU+IGZ1bmN0aW9uX2NhbGwgaW5pdGlhbGl6ZXIgY29uZGl0aW9uIGNv
bmRpdGlvbm9wdAotCi0ldHlwZSA8aW50ZXJtLmludGVybU5vZGU+IHRyYW5zbGF0aW9uX3VuaXQg
ZnVuY3Rpb25fZGVmaW5pdGlvbgotJXR5cGUgPGludGVybS5pbnRlcm1Ob2RlPiBzdGF0ZW1lbnQg
c2ltcGxlX3N0YXRlbWVudAotJXR5cGUgPGludGVybS5pbnRlcm1BZ2dyZWdhdGU+ICBzdGF0ZW1l
bnRfbGlzdCBjb21wb3VuZF9zdGF0ZW1lbnQKLSV0eXBlIDxpbnRlcm0uaW50ZXJtTm9kZT4gZGVj
bGFyYXRpb25fc3RhdGVtZW50IHNlbGVjdGlvbl9zdGF0ZW1lbnQgZXhwcmVzc2lvbl9zdGF0ZW1l
bnQKLSV0eXBlIDxpbnRlcm0uaW50ZXJtTm9kZT4gZGVjbGFyYXRpb24gZXh0ZXJuYWxfZGVjbGFy
YXRpb24KLSV0eXBlIDxpbnRlcm0uaW50ZXJtTm9kZT4gZm9yX2luaXRfc3RhdGVtZW50IGNvbXBv
dW5kX3N0YXRlbWVudF9ub19uZXdfc2NvcGUKLSV0eXBlIDxpbnRlcm0ubm9kZVBhaXI+IHNlbGVj
dGlvbl9yZXN0X3N0YXRlbWVudCBmb3JfcmVzdF9zdGF0ZW1lbnQKLSV0eXBlIDxpbnRlcm0uaW50
ZXJtTm9kZT4gaXRlcmF0aW9uX3N0YXRlbWVudCBqdW1wX3N0YXRlbWVudCBzdGF0ZW1lbnRfbm9f
bmV3X3Njb3BlIHN0YXRlbWVudF93aXRoX3Njb3BlCi0ldHlwZSA8aW50ZXJtPiBzaW5nbGVfZGVj
bGFyYXRpb24gaW5pdF9kZWNsYXJhdG9yX2xpc3QKLQotJXR5cGUgPGludGVybT4gcGFyYW1ldGVy
X2RlY2xhcmF0aW9uIHBhcmFtZXRlcl9kZWNsYXJhdG9yIHBhcmFtZXRlcl90eXBlX3NwZWNpZmll
cgotJXR5cGUgPGludGVybS5xdWFsaWZpZXI+IHBhcmFtZXRlcl9xdWFsaWZpZXIKLQotJXR5cGUg
PGludGVybS5wcmVjaXNpb24+IHByZWNpc2lvbl9xdWFsaWZpZXIKLSV0eXBlIDxpbnRlcm0udHlw
ZT4gdHlwZV9xdWFsaWZpZXIgZnVsbHlfc3BlY2lmaWVkX3R5cGUgdHlwZV9zcGVjaWZpZXIKLSV0
eXBlIDxpbnRlcm0udHlwZT4gdHlwZV9zcGVjaWZpZXJfbm9fcHJlYyB0eXBlX3NwZWNpZmllcl9u
b25hcnJheQotJXR5cGUgPGludGVybS50eXBlPiBzdHJ1Y3Rfc3BlY2lmaWVyCi0ldHlwZSA8aW50
ZXJtLmZpZWxkPiBzdHJ1Y3RfZGVjbGFyYXRvcgotJXR5cGUgPGludGVybS5maWVsZExpc3Q+IHN0
cnVjdF9kZWNsYXJhdG9yX2xpc3Qgc3RydWN0X2RlY2xhcmF0aW9uIHN0cnVjdF9kZWNsYXJhdGlv
bl9saXN0Ci0ldHlwZSA8aW50ZXJtLmZ1bmN0aW9uPiBmdW5jdGlvbl9oZWFkZXIgZnVuY3Rpb25f
ZGVjbGFyYXRvciBmdW5jdGlvbl9pZGVudGlmaWVyCi0ldHlwZSA8aW50ZXJtLmZ1bmN0aW9uPiBm
dW5jdGlvbl9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIGZ1bmN0aW9uX2NhbGxfaGVhZGVyCi0ldHlw
ZSA8aW50ZXJtPiBmdW5jdGlvbl9jYWxsX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMgZnVuY3Rpb25f
Y2FsbF9oZWFkZXJfbm9fcGFyYW1ldGVycyBmdW5jdGlvbl9jYWxsX2dlbmVyaWMgZnVuY3Rpb25f
cHJvdG90eXBlCi0ldHlwZSA8aW50ZXJtPiBmdW5jdGlvbl9jYWxsX29yX21ldGhvZAotCi0lc3Rh
cnQgdHJhbnNsYXRpb25fdW5pdAotJSUKLQotaWRlbnRpZmllcgotICAgIDogSURFTlRJRklFUgot
ICAgIHwgVFlQRV9OQU1FCi0KLXZhcmlhYmxlX2lkZW50aWZpZXIKLSAgICA6IElERU5USUZJRVIg
ewotICAgICAgICAvLyBUaGUgc3ltYm9sIHRhYmxlIHNlYXJjaCB3YXMgZG9uZSBpbiB0aGUgbGV4
aWNhbCBwaGFzZQotICAgICAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSAkMS5zeW1ib2w7Ci0g
ICAgICAgIGNvbnN0IFRWYXJpYWJsZSogdmFyaWFibGU7Ci0gICAgICAgIGlmIChzeW1ib2wgPT0g
MCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJ1bmRlY2xhcmVkIGlkZW50aWZp
ZXIiLCAkMS5zdHJpbmctPmNfc3RyKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICAgICAgVFR5cGUgdHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkKTsKLSAgICAg
ICAgICAgIFRWYXJpYWJsZSogZmFrZVZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgkMS5zdHJpbmcs
IHR5cGUpOwotICAgICAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCpmYWtlVmFy
aWFibGUpOwotICAgICAgICAgICAgdmFyaWFibGUgPSBmYWtlVmFyaWFibGU7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlkZW50aWZpZXIgY2FuIG9ubHkgYmUgYSB2YXJp
YWJsZSB0eXBlIHN5bWJvbAotICAgICAgICAgICAgaWYgKCEgc3ltYm9sLT5pc1ZhcmlhYmxlKCkp
IHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgInZhcmlhYmxlIGV4cGVjdGVk
IiwgJDEuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHZhcmlhYmxlID0g
c3RhdGljX2Nhc3Q8Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKLQotICAgICAgICAgICAgaWYg
KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKHZhcmlhYmxlLT5nZXROYW1lKCkpICYm
Ci0gICAgICAgICAgICAgICAgIXZhcmlhYmxlLT5nZXRFeHRlbnNpb24oKS5lbXB0eSgpICYmCi0g
ICAgICAgICAgICAgICAgY29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjayhAMSwgdmFyaWFibGUt
PmdldEV4dGVuc2lvbigpKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGRvbid0IGRlbGV0ZSAkMS5z
dHJpbmcsIGl0J3MgdXNlZCBieSBlcnJvciByZWNvdmVyeSwgYW5kIHRoZSBwb29sCi0gICAgICAg
IC8vIHBvcCB3aWxsIHJlY2xhaW0gdGhlIG1lbW9yeQotCi0gICAgICAgIGlmICh2YXJpYWJsZS0+
Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0ICkgewotICAgICAgICAgICAgQ29u
c3RhbnRVbmlvbiogY29uc3RBcnJheSA9IHZhcmlhYmxlLT5nZXRDb25zdFBvaW50ZXIoKTsKLSAg
ICAgICAgICAgIFRUeXBlIHQodmFyaWFibGUtPmdldFR5cGUoKSk7Ci0gICAgICAgICAgICAkJCA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXksIHQsIEAx
KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRTeW1ib2wodmFyaWFibGUtPmdldFVuaXF1ZUlkKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldE5hbWUoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0
VHlwZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEAxKTsKLSAgICB9Ci0gICAgOwotCi1wcmltYXJ5X2V4cHJlc3Npb24KLSAgICA6IHZhcmlhYmxl
X2lkZW50aWZpZXIgewotICAgICAgICAkJCA9ICQxOwotICAgIH0KLSAgICB8IElOVENPTlNUQU5U
IHsKLSAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
WzFdOwotICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoJDEuaSk7Ci0gICAgICAgICQkID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUo
RWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDEpOwotICAgIH0KLSAgICB8IEZMT0FU
Q09OU1RBTlQgewotICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bMV07Ci0gICAgICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgkMS5mKTsKLSAgICAg
ICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5
LCBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAxKTsKLSAgICB9Ci0g
ICAgfCBCT09MQ09OU1RBTlQgewotICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0g
bmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdCgkMS5i
KTsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1
bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDEpOwot
ICAgIH0KLSAgICB8IExFRlRfUEFSRU4gZXhwcmVzc2lvbiBSSUdIVF9QQVJFTiB7Ci0gICAgICAg
ICQkID0gJDI7Ci0gICAgfQotICAgIDsKLQotcG9zdGZpeF9leHByZXNzaW9uCi0gICAgOiBwcmlt
YXJ5X2V4cHJlc3Npb24gewotICAgICAgICAkJCA9ICQxOwotICAgIH0KLSAgICB8IHBvc3RmaXhf
ZXhwcmVzc2lvbiBMRUZUX0JSQUNLRVQgaW50ZWdlcl9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQg
ewotICAgICAgICAkJCA9IGNvbnRleHQtPmFkZEluZGV4RXhwcmVzc2lvbigkMSwgQDIsICQzKTsK
LSAgICB9Ci0gICAgfCBmdW5jdGlvbl9jYWxsIHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICB9Ci0g
ICAgfCBwb3N0Zml4X2V4cHJlc3Npb24gRE9UIGlkZW50aWZpZXIgewotICAgICAgICBpZiAoJDEt
PmlzQXJyYXkoKSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDMsICJjYW5ub3QgYXBw
bHkgZG90IG9wZXJhdG9yIHRvIGFuIGFycmF5IiwgIi4iKTsKLSAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgkMS0+aXNWZWN0b3IoKSkgewot
ICAgICAgICAgICAgVFZlY3RvckZpZWxkcyBmaWVsZHM7Ci0gICAgICAgICAgICBpZiAoISBjb250
ZXh0LT5wYXJzZVZlY3RvckZpZWxkcygqJDMuc3RyaW5nLCAkMS0+Z2V0Tm9taW5hbFNpemUoKSwg
ZmllbGRzLCBAMykpIHsKLSAgICAgICAgICAgICAgICBmaWVsZHMubnVtID0gMTsKLSAgICAgICAg
ICAgICAgICBmaWVsZHMub2Zmc2V0c1swXSA9IDA7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUo
KS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgeyAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2
ZWN0b3IgZmllbGRzCi0gICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRDb25zdFZlY3Rv
ck5vZGUoZmllbGRzLCAkMSwgQDMpOwotICAgICAgICAgICAgICAgIGlmICgkJCA9PSAwKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICAg
ICAgJCQgPSAkMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQx
LT5nZXRQcmVjaXNpb24oKSwgRXZxQ29uc3QsIChpbnQpICgqJDMuc3RyaW5nKS5zaXplKCkpKTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVFN0cmluZyB2ZWN0b3JTdHJp
bmcgPSAqJDMuc3RyaW5nOwotICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3dpenpsZShmaWVsZHMsIEAzKTsKLSAgICAgICAgICAg
ICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BWZWN0b3JTd2l6emxl
LCAkMSwgaW5kZXgsIEAyKTsKLSAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+
Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAoaW50KSB2
ZWN0b3JTdHJpbmcuc2l6ZSgpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAo
JDEtPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgIFRNYXRyaXhGaWVsZHMgZmllbGRzOwotICAg
ICAgICAgICAgaWYgKCEgY29udGV4dC0+cGFyc2VNYXRyaXhGaWVsZHMoKiQzLnN0cmluZywgJDEt
PmdldE5vbWluYWxTaXplKCksIGZpZWxkcywgQDMpKSB7Ci0gICAgICAgICAgICAgICAgZmllbGRz
Lndob2xlUm93ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZmllbGRzLndob2xlQ29sID0gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgZmllbGRzLnJvdyA9IDA7Ci0gICAgICAgICAgICAgICAgZmll
bGRzLmNvbCA9IDA7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZpZWxkcy53aG9s
ZUNvbCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAiIG5vbi1zY2FsYXIg
ZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIpOwotICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5
ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0
SUNvbnN0KDApOwotICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQs
IEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMyk7Ci0gICAgICAgICAgICAgICAgJCQgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICQxLCBpbmRleCwgQDIp
OwotICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwg
JDEtPmdldFByZWNpc2lvbigpLEV2cVRlbXBvcmFyeSwgJDEtPmdldE5vbWluYWxTaXplKCkpKTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5p
b25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgIHVuaW9uQXJy
YXktPnNldElDb25zdChmaWVsZHMuY29sICogJDEtPmdldE5vbWluYWxTaXplKCkgKyBmaWVsZHMu
cm93KTsKLSAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBV
bmRlZmluZWQsIEV2cUNvbnN0KSwgQDMpOwotICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAkMSwgaW5kZXgsIEAyKTsKLSAg
ICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5n
ZXRQcmVjaXNpb24oKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCQxLT5n
ZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAgICAgIGJvb2wgZmllbGRGb3Vu
ZCA9IGZhbHNlOwotICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRzID0gJDEtPmdl
dFR5cGUoKS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQg
aTsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoZmllbGRzW2ldLT5uYW1lKCkgPT0gKiQzLnN0cmluZykgewotICAg
ICAgICAgICAgICAgICAgICBmaWVsZEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KGZpZWxkRm91bmQpIHsKLSAgICAgICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRRdWFs
aWZpZXIoKSA9PSBFdnFDb25zdCkgewotICAgICAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQt
PmFkZENvbnN0U3RydWN0KCokMy5zdHJpbmcsICQxLCBAMik7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
JCQtPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGNoYW5nZSB0aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1cm4gdHlwZSwgbm90IG9mIHRoZSBz
dHJ1Y3R1cmUgZmllbGQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHRoZSBzdHJ1Y3R1
cmUgZGVmaW5pdGlvbiBpcyBzaGFyZWQgYmV0d2VlbiB2YXJpb3VzIHN0cnVjdHVyZXMuCi0gICAg
ICAgICAgICAgICAgICAgICAgICAkJC0+Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2
cUNvbnN0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29u
c3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0
KGkpOwotICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgKmZpZWxkc1tpXS0+dHlw
ZSgpLCBAMyk7Ci0gICAgICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEluZGV4KEVPcEluZGV4RGlyZWN0U3RydWN0LCAkMSwgaW5kZXgsIEAyKTsKLSAgICAgICAg
ICAgICAgICAgICAgJCQtPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKEAyLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgJDMuc3RyaW5nLT5jX3N0cigp
KTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAg
JCQgPSAkMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKEAyLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1cmUsIHZl
Y3Rvciwgb3IgbWF0cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgJDMuc3RyaW5nLT5jX3N0cigpKTsK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQkID0gJDE7Ci0g
ICAgICAgIH0KLSAgICAgICAgLy8gZG9uJ3QgZGVsZXRlICQzLnN0cmluZywgaXQncyBmcm9tIHRo
ZSBwb29sCi0gICAgfQotICAgIHwgcG9zdGZpeF9leHByZXNzaW9uIElOQ19PUCB7Ci0gICAgICAg
IGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKEAyLCAiKysiLCAkMSkpCi0gICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZFVuYXJ5TWF0aChFT3BQb3N0SW5jcmVtZW50LCAkMSwgQDIsIGNvbnRleHQtPnN5bWJvbFRh
YmxlKTsKLSAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnVuYXJ5
T3BFcnJvcihAMiwgIisrIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgfQotICAg
IH0KLSAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBERUNfT1AgewotICAgICAgICBpZiAoY29udGV4
dC0+bFZhbHVlRXJyb3JDaGVjayhAMiwgIi0tIiwgJDEpKQotICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1h
dGgoRU9wUG9zdERlY3JlbWVudCwgJDEsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAg
ICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoQDIs
ICItLSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgICAgICQkID0gJDE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgOwot
Ci1pbnRlZ2VyX2V4cHJlc3Npb24KLSAgICA6IGV4cHJlc3Npb24gewotICAgICAgICBpZiAoY29u
dGV4dC0+aW50ZWdlckVycm9yQ2hlY2soJDEsICJbXSIpKQotICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICAkJCA9ICQxOwotICAgIH0KLSAgICA7Ci0KLWZ1bmN0aW9uX2Nh
bGwKLSAgICA6IGZ1bmN0aW9uX2NhbGxfb3JfbWV0aG9kIHsKLSAgICAgICAgVEZ1bmN0aW9uKiBm
bkNhbGwgPSAkMS5mdW5jdGlvbjsKLSAgICAgICAgVE9wZXJhdG9yIG9wID0gZm5DYWxsLT5nZXRC
dWlsdEluT3AoKTsKLQotICAgICAgICBpZiAob3AgIT0gRU9wTnVsbCkKLSAgICAgICAgewotICAg
ICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFRoZW4gdGhpcyBzaG91bGQgYmUgYSBjb25zdHJ1
Y3Rvci4KLSAgICAgICAgICAgIC8vIERvbid0IGdvIHRocm91Z2ggdGhlIHN5bWJvbCB0YWJsZSBm
b3IgY29uc3RydWN0b3JzLgotICAgICAgICAgICAgLy8gVGhlaXIgcGFyYW1ldGVycyB3aWxsIGJl
IHZlcmlmaWVkIGFsZ29yaXRobWljYWxseS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBU
VHlwZSB0eXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7ICAvLyB1c2UgdGhpcyB0byBnZXQgdGhl
IHR5cGUgYmFjawotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmNvbnN0cnVjdG9yRXJyb3JDaGVj
ayhAMSwgJDEuaW50ZXJtTm9kZSwgKmZuQ2FsbCwgb3AsICZ0eXBlKSkgewotICAgICAgICAgICAg
ICAgICQkID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8KLSAg
ICAgICAgICAgICAgICAvLyBJdCdzIGEgY29uc3RydWN0b3IsIG9mIHR5cGUgJ3R5cGUnLgotICAg
ICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRDb25zdHJ1
Y3RvcigkMS5pbnRlcm1Ob2RlLCAmdHlwZSwgb3AsIGZuQ2FsbCwgQDEpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5z
ZXRBZ2dyZWdhdGVPcGVyYXRvcigwLCBvcCwgQDEpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgJCQtPnNldFR5cGUodHlwZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLwot
ICAgICAgICAgICAgLy8gTm90IGEgY29uc3RydWN0b3IuICBGaW5kIGl0IGluIHRoZSBzeW1ib2wg
dGFibGUuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uKiBmbkNh
bmRpZGF0ZTsKLSAgICAgICAgICAgIGJvb2wgYnVpbHRJbjsKLSAgICAgICAgICAgIGZuQ2FuZGlk
YXRlID0gY29udGV4dC0+ZmluZEZ1bmN0aW9uKEAxLCBmbkNhbGwsICZidWlsdEluKTsKLSAgICAg
ICAgICAgIGlmIChmbkNhbmRpZGF0ZSkgewotICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAg
ICAgICAgLy8gQSBkZWNsYXJlZCBmdW5jdGlvbi4KLSAgICAgICAgICAgICAgICAvLwotICAgICAg
ICAgICAgICAgIGlmIChidWlsdEluICYmICFmbkNhbmRpZGF0ZS0+Z2V0RXh0ZW5zaW9uKCkuZW1w
dHkoKSAmJgotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNr
KEAxLCBmbkNhbmRpZGF0ZS0+Z2V0RXh0ZW5zaW9uKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
b3AgPSBmbkNhbmRpZGF0ZS0+Z2V0QnVpbHRJbk9wKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGJ1
aWx0SW4gJiYgb3AgIT0gRU9wTnVsbCkgewotICAgICAgICAgICAgICAgICAgICAvLwotICAgICAg
ICAgICAgICAgICAgICAvLyBBIGZ1bmN0aW9uIGNhbGwgbWFwcGVkIHRvIGEgYnVpbHQtaW4gb3Bl
cmF0aW9uLgotICAgICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgICAgICBpZiAo
Zm5DYW5kaWRhdGUtPmdldFBhcmFtQ291bnQoKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAvLwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJlYXQgaXQgbGlrZSBhIGJ1aWx0
LWluIHVuYXJ5IG9wZXJhdG9yLgotICAgICAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAg
ICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChv
cCwgJDEuaW50ZXJtTm9kZSwgQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICgkJCA9PSAwKSAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImJ1aWx0IGluIHVuYXJ5IG9wZXJhdG9yIGZ1bmN0
aW9uLiAgVHlwZTogIiA8PCBzdGF0aWNfY2FzdDxUSW50ZXJtVHlwZWQqPigkMS5pbnRlcm1Ob2Rl
KS0+Z2V0Q29tcGxldGVTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6
OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAi
IHdyb25nIG9wZXJhbmQgdHlwZSIsICJJbnRlcm5hbCBFcnJvciIsIGV4dHJhSW5mby5jX3N0cigp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBZWUVSUk9SOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3Io
JDEuaW50ZXJtQWdncmVnYXRlLCBvcCwgQDEpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHJl
YWwgZnVuY3Rpb24gY2FsbAotCi0gICAgICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKCQxLmludGVybUFnZ3JlZ2F0ZSwgRU9wRnVu
Y3Rpb25DYWxsLCBAMSk7Ci0gICAgICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKGZuQ2FuZGlk
YXRlLT5nZXRSZXR1cm5UeXBlKCkpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMg
aG93IHdlIGtub3cgd2hldGhlciB0aGUgZ2l2ZW4gZnVuY3Rpb24gaXMgYSBidWlsdEluIGZ1bmN0
aW9uIG9yIGEgdXNlciBkZWZpbmVkIGZ1bmN0aW9uCi0gICAgICAgICAgICAgICAgICAgIC8vIGlm
IGJ1aWx0SW4gPT0gZmFsc2UsIGl0J3MgYSB1c2VyRGVmaW5lZCAtPiBjb3VsZCBiZSBhbiBvdmVy
bG9hZGVkIGJ1aWx0SW4gZnVuY3Rpb24gYWxzbwotICAgICAgICAgICAgICAgICAgICAvLyBpZiBi
dWlsdEluID09IHRydWUsIGl0J3MgZGVmaW5pdGVseSBhIGJ1aWx0SW4gZnVuY3Rpb24gd2l0aCBF
T3BOdWxsCi0gICAgICAgICAgICAgICAgICAgIGlmICghYnVpbHRJbikKLSAgICAgICAgICAgICAg
ICAgICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRVc2VyRGVmaW5lZCgpOwotICAgICAg
ICAgICAgICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0TmFtZShmbkNhbmRpZGF0ZS0+
Z2V0TWFuZ2xlZE5hbWUoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgVFF1YWxpZmllciBxdWFs
OwotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZuQ2FuZGlkYXRl
LT5nZXRQYXJhbUNvdW50KCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcXVhbCA9
IGZuQ2FuZGlkYXRlLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChxdWFsID09IEV2cU91dCB8fCBxdWFsID09IEV2cUluT3V0KSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hl
Y2soJCQtPmdldExpbmUoKSwgImFzc2lnbiIsICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1
ZW5jZSgpW2ldLT5nZXRBc1R5cGVkKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQxLmludGVybU5vZGUtPmdldExpbmUoKSwgIkNvbnN0YW50IHZh
bHVlIGNhbm5vdCBiZSBwYXNzZWQgZm9yICdvdXQnIG9yICdpbm91dCcgcGFyYW1ldGVycy4iLCAi
RXJyb3IiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAkJC0+c2V0VHlwZShmbkNhbmRpZGF0ZS0+Z2V0UmV0dXJuVHlwZSgpKTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gZXJyb3IgbWVzc2FnZSB3YXMgcHV0
IG91dCBieSBQYUZpbmRGdW5jdGlvbigpCi0gICAgICAgICAgICAgICAgLy8gUHV0IG9uIGEgZHVt
bXkgbm9kZSBmb3IgZXJyb3IgcmVjb3ZlcnkKLSAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9u
ICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAgdW5p
b25BcnJheS0+c2V0RkNvbnN0KDAuMGYpOwotICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQs
IEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMSk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGRlbGV0ZSBmbkNh
bGw7Ci0gICAgfQotICAgIDsKLQotZnVuY3Rpb25fY2FsbF9vcl9tZXRob2QKLSAgICA6IGZ1bmN0
aW9uX2NhbGxfZ2VuZXJpYyB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgfQotICAgIHwgcG9zdGZp
eF9leHByZXNzaW9uIERPVCBmdW5jdGlvbl9jYWxsX2dlbmVyaWMgewotICAgICAgICBjb250ZXh0
LT5lcnJvcihAMywgIm1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQiLCAiIik7Ci0gICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgJCQgPSAkMzsKLSAgICB9Ci0gICAgOwotCi1mdW5j
dGlvbl9jYWxsX2dlbmVyaWMKLSAgICA6IGZ1bmN0aW9uX2NhbGxfaGVhZGVyX3dpdGhfcGFyYW1l
dGVycyBSSUdIVF9QQVJFTiB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgfQotICAgIHwgZnVuY3Rp
b25fY2FsbF9oZWFkZXJfbm9fcGFyYW1ldGVycyBSSUdIVF9QQVJFTiB7Ci0gICAgICAgICQkID0g
JDE7Ci0gICAgfQotICAgIDsKLQotZnVuY3Rpb25fY2FsbF9oZWFkZXJfbm9fcGFyYW1ldGVycwot
ICAgIDogZnVuY3Rpb25fY2FsbF9oZWFkZXIgVk9JRF9UWVBFIHsKLSAgICAgICAgJCQuZnVuY3Rp
b24gPSAkMTsKLSAgICAgICAgJCQuaW50ZXJtTm9kZSA9IDA7Ci0gICAgfQotICAgIHwgZnVuY3Rp
b25fY2FsbF9oZWFkZXIgewotICAgICAgICAkJC5mdW5jdGlvbiA9ICQxOwotICAgICAgICAkJC5p
bnRlcm1Ob2RlID0gMDsKLSAgICB9Ci0gICAgOwotCi1mdW5jdGlvbl9jYWxsX2hlYWRlcl93aXRo
X3BhcmFtZXRlcnMKLSAgICA6IGZ1bmN0aW9uX2NhbGxfaGVhZGVyIGFzc2lnbm1lbnRfZXhwcmVz
c2lvbiB7Ci0gICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7IDAsIG5ldyBUVHlwZSgkMi0+Z2V0
VHlwZSgpKSB9OwotICAgICAgICAkMS0+YWRkUGFyYW1ldGVyKHBhcmFtKTsKLSAgICAgICAgJCQu
ZnVuY3Rpb24gPSAkMTsKLSAgICAgICAgJCQuaW50ZXJtTm9kZSA9ICQyOwotICAgIH0KLSAgICB8
IGZ1bmN0aW9uX2NhbGxfaGVhZGVyX3dpdGhfcGFyYW1ldGVycyBDT01NQSBhc3NpZ25tZW50X2V4
cHJlc3Npb24gewotICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUoJDMt
PmdldFR5cGUoKSkgfTsKLSAgICAgICAgJDEuZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJhbSk7
Ci0gICAgICAgICQkLmZ1bmN0aW9uID0gJDEuZnVuY3Rpb247Ci0gICAgICAgICQkLmludGVybU5v
ZGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1Ob2RlLCAk
MywgQDIpOwotICAgIH0KLSAgICA7Ci0KLWZ1bmN0aW9uX2NhbGxfaGVhZGVyCi0gICAgOiBmdW5j
dGlvbl9pZGVudGlmaWVyIExFRlRfUEFSRU4gewotICAgICAgICAkJCA9ICQxOwotICAgIH0KLSAg
ICA7Ci0KLS8vIEdyYW1tYXIgTm90ZTogIENvbnN0cnVjdG9ycyBsb29rIGxpa2UgZnVuY3Rpb25z
LCBidXQgYXJlIHJlY29nbml6ZWQgYXMgdHlwZXMuCi0KLWZ1bmN0aW9uX2lkZW50aWZpZXIKLSAg
ICA6IHR5cGVfc3BlY2lmaWVyX25vbmFycmF5IHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gQ29u
c3RydWN0b3IKLSAgICAgICAgLy8KLSAgICAgICAgVE9wZXJhdG9yIG9wID0gRU9wTnVsbDsKLSAg
ICAgICAgaWYgKCQxLnVzZXJEZWYpIHsKLSAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0U3Ry
dWN0OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3dpdGNoICgkMS50eXBlKSB7Ci0g
ICAgICAgICAgICBjYXNlIEVidEZsb2F0OgotICAgICAgICAgICAgICAgIGlmICgkMS5tYXRyaXgp
IHsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoKCQxLnNpemUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdE1hdDI7ICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVjdE1hdDM7ICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVjdE1hdDQ7ICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHN3aXRjaCgkMS5zaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogb3Ag
PSBFT3BDb25zdHJ1Y3RGbG9hdDsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMjog
b3AgPSBFT3BDb25zdHJ1Y3RWZWMyOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
Mzogb3AgPSBFT3BDb25zdHJ1Y3RWZWMzOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNh
c2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RWZWM0OyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIEVidEludDoKLSAgICAgICAgICAgICAgICBzd2l0Y2goJDEuc2l6ZSkgewotICAgICAg
ICAgICAgICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RJbnQ7ICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdElWZWMyOyBicmVhazsKLSAgICAgICAg
ICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0SVZlYzM7IGJyZWFrOwotICAgICAgICAg
ICAgICAgIGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RJVmVjNDsgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFYnRCb29s
OgotICAgICAgICAgICAgICAgIHN3aXRjaCgkMS5zaXplKSB7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSAxOiBvcCA9IEVPcENvbnN0cnVjdEJvb2w7ICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNl
IDI6IG9wID0gRU9wQ29uc3RydWN0QlZlYzI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ug
Mzogb3AgPSBFT3BDb25zdHJ1Y3RCVmVjMzsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSA0
OiBvcCA9IEVPcENvbnN0cnVjdEJWZWM0OyBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OiBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmIChvcCA9PSBFT3BOdWxsKSB7Ci0gICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoQDEsICJjYW5ub3QgY29uc3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2lj
U3RyaW5nKCQxLnR5cGUpKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgICAgICAgICAgICAgJDEudHlwZSA9IEVidEZsb2F0OwotICAgICAgICAgICAgICAgIG9wID0g
RU9wQ29uc3RydWN0RmxvYXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgVFN0
cmluZyB0ZW1wU3RyaW5nOwotICAgICAgICBUVHlwZSB0eXBlKCQxKTsKLSAgICAgICAgVEZ1bmN0
aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oJnRlbXBTdHJpbmcsIHR5cGUsIG9wKTsKLSAg
ICAgICAgJCQgPSBmdW5jdGlvbjsKLSAgICB9Ci0gICAgfCBJREVOVElGSUVSIHsKLSAgICAgICAg
aWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjayhAMSwgKiQxLnN0cmluZykpCi0gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwgRWJw
VW5kZWZpbmVkKTsKLSAgICAgICAgVEZ1bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24o
JDEuc3RyaW5nLCB0eXBlKTsKLSAgICAgICAgJCQgPSBmdW5jdGlvbjsKLSAgICB9Ci0gICAgOwot
Ci11bmFyeV9leHByZXNzaW9uCi0gICAgOiBwb3N0Zml4X2V4cHJlc3Npb24gewotICAgICAgICAk
JCA9ICQxOwotICAgIH0KLSAgICB8IElOQ19PUCB1bmFyeV9leHByZXNzaW9uIHsKLSAgICAgICAg
aWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soQDEsICIrKyIsICQyKSkKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkVW5hcnlNYXRoKEVPcFByZUluY3JlbWVudCwgJDIsIEAxLCBjb250ZXh0LT5zeW1ib2xUYWJs
ZSk7Ci0gICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT51bmFyeU9w
RXJyb3IoQDEsICIrKyIsICQyLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQkID0gJDI7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgfCBERUNfT1AgdW5hcnlfZXhwcmVzc2lvbiB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5s
VmFsdWVFcnJvckNoZWNrKEAxLCAiLS0iLCAkMikpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChF
T3BQcmVEZWNyZW1lbnQsICQyLCBAMSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBp
ZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKEAxLCAiLS0i
LCAkMi0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgICAgICAkJCA9ICQyOwotICAgICAgICB9Ci0gICAgfQotICAgIHwgdW5hcnlf
b3BlcmF0b3IgdW5hcnlfZXhwcmVzc2lvbiB7Ci0gICAgICAgIGlmICgkMS5vcCAhPSBFT3BOdWxs
KSB7Ci0gICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgo
JDEub3AsICQyLCBAMSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICAgICAgaWYgKCQk
ID09IDApIHsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBlcnJvck9wID0gIiI7Ci0gICAg
ICAgICAgICAgICAgc3dpdGNoKCQxLm9wKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BOZWdh
dGl2ZTogICBlcnJvck9wID0gIi0iOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEVPcExv
Z2ljYWxOb3Q6IGVycm9yT3AgPSAiISI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6
IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb250ZXh0LT51bmFy
eU9wRXJyb3IoQDEsIGVycm9yT3AsICQyLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgJCQgPSAkMjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAkJCA9ICQyOwotICAgIH0K
LSAgICA7Ci0vLyBHcmFtbWFyIE5vdGU6ICBObyB0cmFkaXRpb25hbCBzdHlsZSB0eXBlIGNhc3Rz
LgotCi11bmFyeV9vcGVyYXRvcgotICAgIDogUExVUyAgeyAkJC5vcCA9IEVPcE51bGw7IH0KLSAg
ICB8IERBU0ggIHsgJCQub3AgPSBFT3BOZWdhdGl2ZTsgfQotICAgIHwgQkFORyAgeyAkJC5vcCA9
IEVPcExvZ2ljYWxOb3Q7IH0KLSAgICA7Ci0vLyBHcmFtbWFyIE5vdGU6ICBObyAnKicgb3IgJyYn
IHVuYXJ5IG9wcy4gIFBvaW50ZXJzIGFyZSBub3Qgc3VwcG9ydGVkLgotCi1tdWx0aXBsaWNhdGl2
ZV9leHByZXNzaW9uCi0gICAgOiB1bmFyeV9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQotICAgIHwg
bXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbiBTVEFSIHVuYXJ5X2V4cHJlc3Npb24gewotICAgICAg
ICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcE11bCwgJDEsICQz
LCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoJCQgPT0gMCkgewotICAg
ICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIioiLCAkMS0+Z2V0Q29tcGxldGVT
dHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgfQotICAgIH0KLSAgICB8
IG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24gU0xBU0ggdW5hcnlfZXhwcmVzc2lvbiB7Ci0gICAg
ICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wRGl2LCAkMSwg
JDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmICgkJCA9PSAwKSB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiLyIsICQxLT5nZXRDb21wbGV0
ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICB9Ci0gICAgfQotICAg
IDsKLQotYWRkaXRpdmVfZXhwcmVzc2lvbgotICAgIDogbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lv
biB7ICQkID0gJDE7IH0KLSAgICB8IGFkZGl0aXZlX2V4cHJlc3Npb24gUExVUyBtdWx0aXBsaWNh
dGl2ZV9leHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
QmluYXJ5TWF0aChFT3BBZGQsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKLSAg
ICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3Io
QDIsICIrIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygp
KTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQkID0gJDE7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgfCBhZGRpdGl2ZV9leHByZXNzaW9uIERBU0ggbXVsdGlw
bGljYXRpdmVfZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEJpbmFyeU1hdGgoRU9wU3ViLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7
Ci0gICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVy
cm9yKEAyLCAiLSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJp
bmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkJCA9
ICQxOwotICAgICAgICB9Ci0gICAgfQotICAgIDsKLQotc2hpZnRfZXhwcmVzc2lvbgotICAgIDog
YWRkaXRpdmVfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KLSAgICA7Ci0KLXJlbGF0aW9uYWxfZXhw
cmVzc2lvbgotICAgIDogc2hpZnRfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KLSAgICB8IHJlbGF0
aW9uYWxfZXhwcmVzc2lvbiBMRUZUX0FOR0xFIHNoaWZ0X2V4cHJlc3Npb24gewotICAgICAgICAk
JCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExlc3NUaGFuLCAkMSwg
JDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmICgkJCA9PSAwKSB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiPCIsICQxLT5nZXRDb21wbGV0
ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3
IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFs
c2UpOwotICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRV
bmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwg
QDIpOwotICAgICAgICB9Ci0gICAgfQotICAgIHwgcmVsYXRpb25hbF9leHByZXNzaW9uIFJJR0hU
X0FOR0xFIHNoaWZ0X2V4cHJlc3Npb24gIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbiwgJDEsICQzLCBAMiwgY29udGV4dC0+
c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgY29udGV4
dC0+YmluYXJ5T3BFcnJvcihAMiwgIj4iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdl
dENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFd
OwotICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAgICAgICAg
ICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwg
VFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAyKTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICB8IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiBMRV9PUCBzaGlmdF9leHByZXNzaW9u
ICB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9w
TGVzc1RoYW5FcXVhbCwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAg
ICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwg
Ijw9IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIENvbnN0YW50VW5p
b24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgIHVuaW9u
QXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QpLCBAMik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgfCByZWxhdGlv
bmFsX2V4cHJlc3Npb24gR0VfT1Agc2hpZnRfZXhwcmVzc2lvbiAgewotICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuRXF1YWwsICQx
LCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCQkID09IDApIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICI+PSIsICQxLT5nZXRDb21w
bGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0g
bmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3Qo
ZmFsc2UpOwotICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3Rh
bnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0
KSwgQDIpOwotICAgICAgICB9Ci0gICAgfQotICAgIDsKLQotZXF1YWxpdHlfZXhwcmVzc2lvbgot
ICAgIDogcmVsYXRpb25hbF9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQotICAgIHwgZXF1YWxpdHlf
ZXhwcmVzc2lvbiBFUV9PUCByZWxhdGlvbmFsX2V4cHJlc3Npb24gIHsKLSAgICAgICAgJCQgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BFcXVhbCwgJDEsICQzLCBAMiwg
Y29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoJCQgPT0gMCkgewotICAgICAgICAg
ICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIj09IiwgJDEtPmdldENvbXBsZXRlU3RyaW5n
KCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3Rh
bnRVbmlvblsxXTsKLSAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0g
ICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVu
aW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMik7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgfCBlcXVhbGl0eV9leHByZXNzaW9uIE5FX09QIHJlbGF0aW9u
YWxfZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJp
bmFyeU1hdGgoRU9wTm90RXF1YWwsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsK
LSAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJy
b3IoQDIsICIhPSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJp
bmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBDb25z
dGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAg
ICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwotICAgICAgICAgICAgJCQgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29s
LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDIpOwotICAgICAgICB9Ci0gICAgfQotICAgIDsK
LQotYW5kX2V4cHJlc3Npb24KLSAgICA6IGVxdWFsaXR5X2V4cHJlc3Npb24geyAkJCA9ICQxOyB9
Ci0gICAgOwotCi1leGNsdXNpdmVfb3JfZXhwcmVzc2lvbgotICAgIDogYW5kX2V4cHJlc3Npb24g
eyAkJCA9ICQxOyB9Ci0gICAgOwotCi1pbmNsdXNpdmVfb3JfZXhwcmVzc2lvbgotICAgIDogZXhj
bHVzaXZlX29yX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9Ci0gICAgOwotCi1sb2dpY2FsX2FuZF9l
eHByZXNzaW9uCi0gICAgOiBpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KLSAg
ICB8IGxvZ2ljYWxfYW5kX2V4cHJlc3Npb24gQU5EX09QIGluY2x1c2l2ZV9vcl9leHByZXNzaW9u
IHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BM
b2dpY2FsQW5kLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlm
ICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiJiYi
LCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAq
dW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgdW5pb25BcnJh
eS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZp
bmVkLCBFdnFDb25zdCksIEAyKTsKLSAgICAgICAgfQotICAgIH0KLSAgICA7Ci0KLWxvZ2ljYWxf
eG9yX2V4cHJlc3Npb24KLSAgICA6IGxvZ2ljYWxfYW5kX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9
Ci0gICAgfCBsb2dpY2FsX3hvcl9leHByZXNzaW9uIFhPUl9PUCBsb2dpY2FsX2FuZF9leHByZXNz
aW9uICB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgo
RU9wTG9naWNhbFhvciwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAg
ICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwg
Il5eIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIENvbnN0YW50VW5p
b24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgIHVuaW9u
QXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QpLCBAMik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgOwotCi1sb2dp
Y2FsX29yX2V4cHJlc3Npb24KLSAgICA6IGxvZ2ljYWxfeG9yX2V4cHJlc3Npb24geyAkJCA9ICQx
OyB9Ci0gICAgfCBsb2dpY2FsX29yX2V4cHJlc3Npb24gT1JfT1AgbG9naWNhbF94b3JfZXhwcmVz
c2lvbiAgewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRo
KEVPcExvZ2ljYWxPciwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAg
ICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwg
Inx8IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIENvbnN0YW50VW5p
b24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgIHVuaW9u
QXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QpLCBAMik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgOwotCi1jb25k
aXRpb25hbF9leHByZXNzaW9uCi0gICAgOiBsb2dpY2FsX29yX2V4cHJlc3Npb24geyAkJCA9ICQx
OyB9Ci0gICAgfCBsb2dpY2FsX29yX2V4cHJlc3Npb24gUVVFU1RJT04gZXhwcmVzc2lvbiBDT0xP
TiBhc3NpZ25tZW50X2V4cHJlc3Npb24gewotICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JD
aGVjayhAMiwgJDEpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAg
ICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFNlbGVjdGlvbigkMSwgJDMsICQ1LCBAMik7
Ci0gICAgICAgIGlmICgkMy0+Z2V0VHlwZSgpICE9ICQ1LT5nZXRUeXBlKCkpCi0gICAgICAgICAg
ICAkJCA9IDA7Ci0KLSAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQt
PmJpbmFyeU9wRXJyb3IoQDIsICI6IiwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCksICQ1LT5nZXRD
b21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgICAgICQkID0gJDU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgOwotCi1hc3NpZ25tZW50X2V4
cHJlc3Npb24KLSAgICA6IGNvbmRpdGlvbmFsX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9Ci0gICAg
fCB1bmFyeV9leHByZXNzaW9uIGFzc2lnbm1lbnRfb3BlcmF0b3IgYXNzaWdubWVudF9leHByZXNz
aW9uIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soQDIsICJhc3NpZ24i
LCAkMSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICQkID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZEFzc2lnbigkMi5vcCwgJDEsICQzLCBAMik7Ci0gICAgICAg
IGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5hc3NpZ25FcnJvcihAMiwgImFz
c2lnbiIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7
Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkJCA9ICQxOwot
ICAgICAgICB9Ci0gICAgfQotICAgIDsKLQotYXNzaWdubWVudF9vcGVyYXRvcgotICAgIDogRVFV
QUwgICAgICAgIHsgJCQub3AgPSBFT3BBc3NpZ247IH0KLSAgICB8IE1VTF9BU1NJR04gICB7ICQk
Lm9wID0gRU9wTXVsQXNzaWduOyB9Ci0gICAgfCBESVZfQVNTSUdOICAgeyAkJC5vcCA9IEVPcERp
dkFzc2lnbjsgfQotICAgIHwgQUREX0FTU0lHTiAgIHsgJCQub3AgPSBFT3BBZGRBc3NpZ247IH0K
LSAgICB8IFNVQl9BU1NJR04gICB7ICQkLm9wID0gRU9wU3ViQXNzaWduOyB9Ci0gICAgOwotCi1l
eHByZXNzaW9uCi0gICAgOiBhc3NpZ25tZW50X2V4cHJlc3Npb24gewotICAgICAgICAkJCA9ICQx
OwotICAgIH0KLSAgICB8IGV4cHJlc3Npb24gQ09NTUEgYXNzaWdubWVudF9leHByZXNzaW9uIHsK
LSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29tbWEoJDEsICQzLCBAMik7
Ci0gICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVy
cm9yKEAyLCAiLCIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJp
bmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkJCA9
ICQzOwotICAgICAgICB9Ci0gICAgfQotICAgIDsKLQotY29uc3RhbnRfZXhwcmVzc2lvbgotICAg
IDogY29uZGl0aW9uYWxfZXhwcmVzc2lvbiB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5jb25zdEVy
cm9yQ2hlY2soJDEpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAk
JCA9ICQxOwotICAgIH0KLSAgICA7Ci0KLWRlY2xhcmF0aW9uCi0gICAgOiBmdW5jdGlvbl9wcm90
b3R5cGUgU0VNSUNPTE9OICAgewotICAgICAgICBURnVuY3Rpb24gJmZ1bmN0aW9uID0gKigkMS5m
dW5jdGlvbik7Ci0gICAgICAgIAotICAgICAgICBUSW50ZXJtQWdncmVnYXRlICpwcm90b3R5cGUg
PSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKLSAgICAgICAgcHJvdG90eXBlLT5zZXRUeXBlKGZ1bmN0
aW9uLmdldFJldHVyblR5cGUoKSk7Ci0gICAgICAgIHByb3RvdHlwZS0+c2V0TmFtZShmdW5jdGlv
bi5nZXROYW1lKCkpOwotICAgICAgICAKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBm
dW5jdGlvbi5nZXRQYXJhbUNvdW50KCk7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgY29u
c3QgVFBhcmFtZXRlciAmcGFyYW0gPSBmdW5jdGlvbi5nZXRQYXJhbShpKTsKLSAgICAgICAgICAg
IGlmIChwYXJhbS5uYW1lICE9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVFZh
cmlhYmxlIHZhcmlhYmxlKHBhcmFtLm5hbWUsICpwYXJhbS50eXBlKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBwcm90b3R5cGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jv
d0FnZ3JlZ2F0ZShwcm90b3R5cGUsIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFy
aWFibGUuZ2V0VW5pcXVlSWQoKSwgdmFyaWFibGUuZ2V0TmFtZSgpLCB2YXJpYWJsZS5nZXRUeXBl
KCksIEAxKSwgQDEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHByb3RvdHlwZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5n
cm93QWdncmVnYXRlKHByb3RvdHlwZSwgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgw
LCAiIiwgKnBhcmFtLnR5cGUsIEAxKSwgQDEpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBwcm90b3R5cGUtPnNldE9wKEVPcFByb3RvdHlwZSk7Ci0gICAgICAg
ICQkID0gcHJvdG90eXBlOwotCi0gICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwot
ICAgIH0KLSAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IFNFTUlDT0xPTiB7Ci0gICAgICAgIGlm
ICgkMS5pbnRlcm1BZ2dyZWdhdGUpCi0gICAgICAgICAgICAkMS5pbnRlcm1BZ2dyZWdhdGUtPnNl
dE9wKEVPcERlY2xhcmF0aW9uKTsKLSAgICAgICAgJCQgPSAkMS5pbnRlcm1BZ2dyZWdhdGU7Ci0g
ICAgfQotICAgIHwgUFJFQ0lTSU9OIHByZWNpc2lvbl9xdWFsaWZpZXIgdHlwZV9zcGVjaWZpZXJf
bm9fcHJlYyBTRU1JQ09MT04gewotICAgICAgICBpZiAoKCQyID09IEVicEhpZ2gpICYmIChjb250
ZXh0LT5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikgJiYgIWNvbnRleHQtPmZyYWdt
ZW50UHJlY2lzaW9uSGlnaCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJwcmVj
aXNpb24gaXMgbm90IHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXIiLCAiaGlnaHAiKTsKLSAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWNv
bnRleHQtPnN5bWJvbFRhYmxlLnNldERlZmF1bHRQcmVjaXNpb24oICQzLCAkMiApKSB7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgImlsbGVnYWwgdHlwZSBhcmd1bWVudCBmb3IgZGVm
YXVsdCBwcmVjaXNpb24gcXVhbGlmaWVyIiwgZ2V0QmFzaWNTdHJpbmcoJDMudHlwZSkpOwotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgICQkID0gMDsK
LSAgICB9Ci0gICAgOwotCi1mdW5jdGlvbl9wcm90b3R5cGUKLSAgICA6IGZ1bmN0aW9uX2RlY2xh
cmF0b3IgUklHSFRfUEFSRU4gIHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gTXVsdGlwbGUgZGVj
bGFyYXRpb25zIG9mIHRoZSBzYW1lIGZ1bmN0aW9uIGFyZSBhbGxvd2VkLgotICAgICAgICAvLwot
ICAgICAgICAvLyBJZiB0aGlzIGlzIGEgZGVmaW5pdGlvbiwgdGhlIGRlZmluaXRpb24gcHJvZHVj
dGlvbiBjb2RlIHdpbGwgY2hlY2sgZm9yIHJlZGVmaW5pdGlvbnMKLSAgICAgICAgLy8gKHdlIGRv
bid0IGtub3cgYXQgdGhpcyBwb2ludCBpZiBpdCdzIGEgZGVmaW5pdGlvbiBvciBub3QpLgotICAg
ICAgICAvLwotICAgICAgICAvLyBSZWRlY2xhcmF0aW9ucyBhcmUgYWxsb3dlZC4gIEJ1dCwgcmV0
dXJuIHR5cGVzIGFuZCBwYXJhbWV0ZXIgcXVhbGlmaWVycyBtdXN0IG1hdGNoLgotICAgICAgICAv
LwotICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihj
b250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCQxLT5nZXRNYW5nbGVkTmFtZSgpKSk7Ci0gICAgICAg
IGlmIChwcmV2RGVjKSB7Ci0gICAgICAgICAgICBpZiAocHJldkRlYy0+Z2V0UmV0dXJuVHlwZSgp
ICE9ICQxLT5nZXRSZXR1cm5UeXBlKCkpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cihAMiwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSByZXR1cm4gdHlw
ZSIsICQxLT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNTdHJpbmcoKSk7Ci0gICAgICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBwcmV2RGVjLT5nZXRQYXJhbUNvdW50KCk7ICsraSkgewotICAgICAg
ICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSAh
PSAkMS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUg
dGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAkMS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0
UXVhbGlmaWVyU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8KLSAgICAgICAgLy8gQ2hlY2sgZm9yIHByZXZpb3VzbHkgZGVjbGFyZWQgdmFyaWFibGVz
IHVzaW5nIHRoZSBzYW1lIG5hbWUuCi0gICAgICAgIC8vCi0gICAgICAgIFRTeW1ib2wgKnByZXZT
eW0gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCQxLT5nZXROYW1lKCkpOwotICAgICAgICBp
ZiAocHJldlN5bSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFwcmV2U3ltLT5pc0Z1bmN0
aW9uKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIs
ICJyZWRlZmluaXRpb24iLCAkMS0+Z2V0TmFtZSgpLmNfc3RyKCksICJmdW5jdGlvbiIpOwotICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEluc2VydCB0aGUgdW5t
YW5nbGVkIG5hbWUgdG8gZGV0ZWN0IHBvdGVudGlhbCBmdXR1cmUgcmVkZWZpbml0aW9uIGFzIGEg
dmFyaWFibGUuCi0gICAgICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5nZXRPdXRlckxldmVs
KCktPmluc2VydCgkMS0+Z2V0TmFtZSgpLCAqJDEpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8K
LSAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHJlZGVjbGFyYXRpb24sIGl0IGNvdWxkIGFsc28gYmUg
YSBkZWZpbml0aW9uLAotICAgICAgICAvLyBpbiB3aGljaCBjYXNlLCB3ZSB3YW50IHRvIHVzZSB0
aGUgdmFyaWFibGUgbmFtZXMgZnJvbSB0aGlzIG9uZSwgYW5kIG5vdCB0aGUgb25lIHRoYXQncwot
ICAgICAgICAvLyBiZWluZyByZWRlY2xhcmVkLiAgU28sIHBhc3MgYmFjayB1cCB0aGlzIGRlY2xh
cmF0aW9uLCBub3QgdGhlIG9uZSBpbiB0aGUgc3ltYm9sIHRhYmxlLgotICAgICAgICAvLwotICAg
ICAgICAkJC5mdW5jdGlvbiA9ICQxOwotCi0gICAgICAgIC8vIFdlJ3JlIGF0IHRoZSBpbm5lciBz
Y29wZSBsZXZlbCBvZiB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudHMgYW5kIGJvZHkgc3RhdGVtZW50
LgotICAgICAgICAvLyBBZGQgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZSB0byB0aGUgc3Vycm91bmRp
bmcgc2NvcGUgaW5zdGVhZC4KLSAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUuZ2V0T3V0ZXJM
ZXZlbCgpLT5pbnNlcnQoKiQkLmZ1bmN0aW9uKTsKLSAgICB9Ci0gICAgOwotCi1mdW5jdGlvbl9k
ZWNsYXJhdG9yCi0gICAgOiBmdW5jdGlvbl9oZWFkZXIgewotICAgICAgICAkJCA9ICQxOwotICAg
IH0KLSAgICB8IGZ1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMgewotICAgICAgICAkJCA9
ICQxOwotICAgIH0KLSAgICA7Ci0KLQotZnVuY3Rpb25faGVhZGVyX3dpdGhfcGFyYW1ldGVycwot
ICAgIDogZnVuY3Rpb25faGVhZGVyIHBhcmFtZXRlcl9kZWNsYXJhdGlvbiB7Ci0gICAgICAgIC8v
IEFkZCB0aGUgcGFyYW1ldGVyCi0gICAgICAgICQkID0gJDE7Ci0gICAgICAgIGlmICgkMi5wYXJh
bS50eXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKQotICAgICAgICAgICAgJDEtPmFkZFBh
cmFtZXRlcigkMi5wYXJhbSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRlbGV0ZSAkMi5w
YXJhbS50eXBlOwotICAgIH0KLSAgICB8IGZ1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMg
Q09NTUEgcGFyYW1ldGVyX2RlY2xhcmF0aW9uIHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gT25s
eSBmaXJzdCBwYXJhbWV0ZXIgb2Ygb25lLXBhcmFtZXRlciBmdW5jdGlvbnMgY2FuIGJlIHZvaWQK
LSAgICAgICAgLy8gVGhlIGNoZWNrIGZvciBuYW1lZCBwYXJhbWV0ZXJzIG5vdCBiZWluZyB2b2lk
IGlzIGRvbmUgaW4gcGFyYW1ldGVyX2RlY2xhcmF0b3IKLSAgICAgICAgLy8KLSAgICAgICAgaWYg
KCQzLnBhcmFtLnR5cGUtPmdldEJhc2ljVHlwZSgpID09IEVidFZvaWQpIHsKLSAgICAgICAgICAg
IC8vCi0gICAgICAgICAgICAvLyBUaGlzIHBhcmFtZXRlciA+IGZpcnN0IGlzIHZvaWQKLSAgICAg
ICAgICAgIC8vCi0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgImNhbm5vdCBiZSBhbiBh
cmd1bWVudCB0eXBlIGV4Y2VwdCBmb3IgJyh2b2lkKSciLCAidm9pZCIpOwotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgZGVsZXRlICQzLnBhcmFtLnR5cGU7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBBZGQgdGhlIHBhcmFtZXRlcgotICAgICAg
ICAgICAgJCQgPSAkMTsKLSAgICAgICAgICAgICQxLT5hZGRQYXJhbWV0ZXIoJDMucGFyYW0pOwot
ICAgICAgICB9Ci0gICAgfQotICAgIDsKLQotZnVuY3Rpb25faGVhZGVyCi0gICAgOiBmdWxseV9z
cGVjaWZpZWRfdHlwZSBJREVOVElGSUVSIExFRlRfUEFSRU4gewotICAgICAgICBpZiAoJDEucXVh
bGlmaWVyICE9IEV2cUdsb2JhbCAmJiAkMS5xdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgIm5vIHF1YWxpZmllcnMgYWxsb3dlZCBmb3Ig
ZnVuY3Rpb24gcmV0dXJuIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikpOwotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgIC8vIG1ha2Ug
c3VyZSBhIHNhbXBsZXIgaXMgbm90IGludm9sdmVkIGFzIHdlbGwuLi4KLSAgICAgICAgaWYgKGNv
bnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soQDIsICQxKSkKLSAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICAvLyBBZGQgdGhlIGZ1bmN0aW9uIGFzIGEgcHJv
dG90eXBlIGFmdGVyIHBhcnNpbmcgaXQgKHdlIGRvIG5vdCBzdXBwb3J0IHJlY3Vyc2lvbikKLSAg
ICAgICAgVEZ1bmN0aW9uICpmdW5jdGlvbjsKLSAgICAgICAgVFR5cGUgdHlwZSgkMSk7Ci0gICAg
ICAgIGZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigkMi5zdHJpbmcsIHR5cGUpOwotICAgICAgICAk
JCA9IGZ1bmN0aW9uOwotICAgICAgICAKLSAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUucHVz
aCgpOwotICAgIH0KLSAgICA7Ci0KLXBhcmFtZXRlcl9kZWNsYXJhdG9yCi0gICAgLy8gVHlwZSAr
IG5hbWUKLSAgICA6IHR5cGVfc3BlY2lmaWVyIGlkZW50aWZpZXIgewotICAgICAgICBpZiAoJDEu
dHlwZSA9PSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgImlsbGVn
YWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgJDIuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY29udGV4dC0+cmVz
ZXJ2ZWRFcnJvckNoZWNrKEAyLCAqJDIuc3RyaW5nKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHskMi5zdHJpbmcsIG5ldyBUVHlw
ZSgkMSl9OwotICAgICAgICAkJC5wYXJhbSA9IHBhcmFtOwotICAgIH0KLSAgICB8IHR5cGVfc3Bl
Y2lmaWVyIGlkZW50aWZpZXIgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRf
QlJBQ0tFVCB7Ci0gICAgICAgIC8vIENoZWNrIHRoYXQgd2UgY2FuIG1ha2UgYW4gYXJyYXkgb3V0
IG9mIHRoaXMgdHlwZQotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjayhA
MywgJDEpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlmIChj
b250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soQDIsICokMi5zdHJpbmcpKQotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGludCBzaXplOwotICAgICAgICBpZiAoY29u
dGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjayhAMywgJDQsIHNpemUpKQotICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkMS5zZXRBcnJheSh0cnVlLCBzaXplKTsKLQotICAg
ICAgICBUVHlwZSogdHlwZSA9IG5ldyBUVHlwZSgkMSk7Ci0gICAgICAgIFRQYXJhbWV0ZXIgcGFy
YW0gPSB7ICQyLnN0cmluZywgdHlwZSB9OwotICAgICAgICAkJC5wYXJhbSA9IHBhcmFtOwotICAg
IH0KLSAgICA7Ci0KLXBhcmFtZXRlcl9kZWNsYXJhdGlvbgotICAgIC8vCi0gICAgLy8gVGhlIG9u
bHkgcGFyYW1ldGVyIHF1YWxpZmllciBhIHBhcmFtZXRlciBjYW4gaGF2ZSBhcmUKLSAgICAvLyBJ
Tl9RVUFMLCBPVVRfUVVBTCwgSU5PVVRfUVVBTCwgb3IgQ09OU1QuCi0gICAgLy8KLQotICAgIC8v
Ci0gICAgLy8gVHlwZSArIG5hbWUKLSAgICAvLwotICAgIDogdHlwZV9xdWFsaWZpZXIgcGFyYW1l
dGVyX3F1YWxpZmllciBwYXJhbWV0ZXJfZGVjbGFyYXRvciB7Ci0gICAgICAgICQkID0gJDM7Ci0g
ICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soQDMsICQxLnF1YWxpZmllciwgJDIs
ICQkLnBhcmFtLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgIH0K
LSAgICB8IHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX2RlY2xhcmF0b3IgewotICAgICAg
ICAkJCA9ICQyOwotICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1ldGVyU2FtcGxlckVycm9yQ2hl
Y2soQDIsICQxLCAqJDIucGFyYW0udHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soQDIsIEV2cVRlbXBvcmFy
eSwgJDEsICQkLnBhcmFtLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgIH0KLSAgICAvLwotICAgIC8vIE9ubHkgdHlwZQotICAgIC8vCi0gICAgfCB0eXBlX3F1YWxp
ZmllciBwYXJhbWV0ZXJfcXVhbGlmaWVyIHBhcmFtZXRlcl90eXBlX3NwZWNpZmllciB7Ci0gICAg
ICAgICQkID0gJDM7Ci0gICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soQDMsICQx
LnF1YWxpZmllciwgJDIsICQkLnBhcmFtLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotICAgIH0KLSAgICB8IHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX3R5cGVf
c3BlY2lmaWVyIHsKLSAgICAgICAgJCQgPSAkMjsKLSAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFt
ZXRlclNhbXBsZXJFcnJvckNoZWNrKEAyLCAkMSwgKiQyLnBhcmFtLnR5cGUpKQotICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNo
ZWNrKEAyLCBFdnFUZW1wb3JhcnksICQxLCAkJC5wYXJhbS50eXBlKSkKLSAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICB9Ci0gICAgOwotCi1wYXJhbWV0ZXJfcXVhbGlmaWVyCi0g
ICAgOiAvKiBlbXB0eSAqLyB7Ci0gICAgICAgICQkID0gRXZxSW47Ci0gICAgfQotICAgIHwgSU5f
UVVBTCB7Ci0gICAgICAgICQkID0gRXZxSW47Ci0gICAgfQotICAgIHwgT1VUX1FVQUwgewotICAg
ICAgICAkJCA9IEV2cU91dDsKLSAgICB9Ci0gICAgfCBJTk9VVF9RVUFMIHsKLSAgICAgICAgJCQg
PSBFdnFJbk91dDsKLSAgICB9Ci0gICAgOwotCi1wYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIKLSAg
ICA6IHR5cGVfc3BlY2lmaWVyIHsKLSAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3
IFRUeXBlKCQxKSB9OwotICAgICAgICAkJC5wYXJhbSA9IHBhcmFtOwotICAgIH0KLSAgICA7Ci0K
LWluaXRfZGVjbGFyYXRvcl9saXN0Ci0gICAgOiBzaW5nbGVfZGVjbGFyYXRpb24gewotICAgICAg
ICAkJCA9ICQxOwotICAgIH0KLSAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIGlkZW50
aWZpZXIgewotICAgICAgICBpZiAoJDEudHlwZS50eXBlID09IEVidEludmFyaWFudCAmJiAhJDMu
c3ltYm9sKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMywgInVuZGVj
bGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCAkMy5zdHJpbmctPmNfc3Ry
KCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJv
bCgwLCAqJDMuc3RyaW5nLCBUVHlwZSgkMS50eXBlKSwgQDMpOwotICAgICAgICAkJC5pbnRlcm1B
Z2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1O
b2RlLCBzeW1ib2wsIEAzKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RR
dWFsaWZpZXJFcnJvckNoZWNrKEAzLCAkJC50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjayhA
MywgKiQzLnN0cmluZywgJCQudHlwZSwgZmFsc2UpKQotICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotCi0gICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwotICAgICAgICBpZiAo
Y29udGV4dC0+bm9uSW5pdEVycm9yQ2hlY2soQDMsICokMy5zdHJpbmcsICQkLnR5cGUsIHZhcmlh
YmxlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgaWYgKHN5bWJv
bCAmJiB2YXJpYWJsZSkKLSAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUtPmdldFVu
aXF1ZUlkKCkpOwotICAgIH0KLSAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIGlkZW50
aWZpZXIgTEVGVF9CUkFDS0VUIFJJR0hUX0JSQUNLRVQgewotICAgICAgICBpZiAoY29udGV4dC0+
c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhAMywgJDEudHlwZSkpCi0gICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9y
Q2hlY2soQDMsICokMy5zdHJpbmcsICQxLnR5cGUsIHRydWUpKQotICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotCi0gICAgICAgICQkID0gJDE7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQt
PmFycmF5VHlwZUVycm9yQ2hlY2soQDQsICQxLnR5cGUpIHx8IGNvbnRleHQtPmFycmF5UXVhbGlm
aWVyRXJyb3JDaGVjayhANCwgJDEudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgJDEudHlwZS5zZXRBcnJheSh0cnVlKTsK
LSAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGU7Ci0gICAgICAgICAgICBpZiAoY29udGV4
dC0+YXJyYXlFcnJvckNoZWNrKEA0LCAqJDMuc3RyaW5nLCAkMS50eXBlLCB2YXJpYWJsZSkpCi0g
ICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgfQotICAg
IHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgaWRlbnRpZmllciBMRUZUX0JSQUNLRVQgY29u
c3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0
cnVjdFF1YWxpZmllckVycm9yQ2hlY2soQDMsICQxLnR5cGUpKQotICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNo
ZWNrKEAzLCAqJDMuc3RyaW5nLCAkMS50eXBlLCB0cnVlKSkKLSAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLQotICAgICAgICAkJCA9ICQxOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5h
cnJheVR5cGVFcnJvckNoZWNrKEA0LCAkMS50eXBlKSB8fCBjb250ZXh0LT5hcnJheVF1YWxpZmll
ckVycm9yQ2hlY2soQDQsICQxLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGludCBzaXplOwotICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soQDQsICQ1LCBzaXplKSkKLSAgICAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkMS50eXBlLnNldEFycmF5KHRy
dWUsIHNpemUpOwotICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7Ci0gICAgICAg
ICAgICBpZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKEA0LCAqJDMuc3RyaW5nLCAkMS50eXBl
LCB2YXJpYWJsZSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAg
ICAgICAgVFR5cGUgdHlwZSA9IFRUeXBlKCQxLnR5cGUpOwotICAgICAgICAgICAgdHlwZS5zZXRB
cnJheVNpemUoc2l6ZSk7Ci0gICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1Ob2RlLCBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlID8gdmFyaWFibGUtPmdldFVuaXF1ZUlkKCkgOiAw
LCAqJDMuc3RyaW5nLCB0eXBlLCBAMyksIEAzKTsKLSAgICAgICAgfQotICAgIH0KLSAgICB8IGlu
aXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIGlkZW50aWZpZXIgRVFVQUwgaW5pdGlhbGl6ZXIgewot
ICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhAMywgJDEudHlw
ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgJCQgPSAkMTsK
LQotICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKLSAgICAgICAgaWYgKCFjb250ZXh0
LT5leGVjdXRlSW5pdGlhbGl6ZXIoQDMsICokMy5zdHJpbmcsICQxLnR5cGUsICQ1LCBpbnRlcm1O
b2RlKSkgewotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIGJ1aWxkIHRoZSBpbnRlcm1l
ZGlhdGUgcmVwcmVzZW50YXRpb24KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBpZiAoaW50
ZXJtTm9kZSkKLSAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJtTm9kZSwgaW50ZXJtTm9kZSwgQDQpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9ICQxLmludGVy
bUFnZ3JlZ2F0ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgOwotCi1zaW5nbGVfZGVjbGFyYXRpb24KLSAgICA6IGZ1bGx5X3NwZWNpZmllZF90
eXBlIHsKLSAgICAgICAgJCQudHlwZSA9ICQxOwotICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkU3ltYm9sKDAsICIiLCBUVHlwZSgkMSksIEAxKSwgQDEpOwotICAgIH0KLSAgICB8IGZ1
bGx5X3NwZWNpZmllZF90eXBlIGlkZW50aWZpZXIgewotICAgICAgICBUSW50ZXJtU3ltYm9sKiBz
eW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICokMi5zdHJpbmcsIFRU
eXBlKCQxKSwgQDIpOwotICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsIEAyKTsKLSAgICAgICAgCi0gICAgICAgIGlm
IChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAyLCAkJC50eXBlKSkKLSAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5p
dENvbnN0RXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZywgJCQudHlwZSwgZmFsc2UpKQotICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAkJC50
eXBlID0gJDE7Ci0KLSAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7Ci0gICAgICAgIGlm
IChjb250ZXh0LT5ub25Jbml0RXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZywgJCQudHlwZSwgdmFy
aWFibGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBpZiAodmFy
aWFibGUgJiYgc3ltYm9sKQotICAgICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0
VW5pcXVlSWQoKSk7Ci0gICAgfQotICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUgaWRlbnRpZmll
ciBMRUZUX0JSQUNLRVQgUklHSFRfQlJBQ0tFVCB7Ci0gICAgICAgIGNvbnRleHQtPmVycm9yKEAy
LCAidW5zaXplZCBhcnJheSBkZWNsYXJhdGlvbnMgbm90IHN1cHBvcnRlZCIsICQyLnN0cmluZy0+
Y19zdHIoKSk7Ci0gICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBUSW50ZXJt
U3ltYm9sKiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICokMi5z
dHJpbmcsIFRUeXBlKCQxKSwgQDIpOwotICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsIEAyKTsKLSAgICAgICAgJCQu
dHlwZSA9ICQxOwotICAgIH0KLSAgICB8IGZ1bGx5X3NwZWNpZmllZF90eXBlIGlkZW50aWZpZXIg
TEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7Ci0gICAgICAg
IFRUeXBlIHR5cGUgPSBUVHlwZSgkMSk7Ci0gICAgICAgIGludCBzaXplOwotICAgICAgICBpZiAo
Y29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjayhAMiwgJDQsIHNpemUpKQotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB0eXBlLnNldEFycmF5U2l6ZShzaXplKTsKLSAg
ICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5
bWJvbCgwLCAqJDIuc3RyaW5nLCB0eXBlLCBAMik7Ci0gICAgICAgICQkLmludGVybUFnZ3JlZ2F0
ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgQDIpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soQDIs
ICQxKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoY29u
dGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZywgJDEsIHRydWUpKQot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgICQkLnR5cGUgPSAkMTsK
LQotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjayhAMywgJDEpIHx8IGNv
bnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayhAMywgJDEpKQotICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGludCBzaXplOwot
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soQDMsICQ0LCBzaXpl
KSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgICAgICQx
LnNldEFycmF5KHRydWUsIHNpemUpOwotICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9
IDA7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKEAzLCAqJDIuc3Ry
aW5nLCAkMSwgdmFyaWFibGUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCi0gICAgICAgICAgICAgICAgc3lt
Ym9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBpZGVudGlmaWVyIEVRVUFMIGluaXRpYWxpemVyIHsK
LSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soQDIsICQxKSkK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICAkJC50eXBlID0gJDE7
Ci0KLSAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7Ci0gICAgICAgIGlmICghY29udGV4
dC0+ZXhlY3V0ZUluaXRpYWxpemVyKEAyLCAqJDIuc3RyaW5nLCAkMSwgJDQsIGludGVybU5vZGUp
KSB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIEJ1aWxkIGludGVybWVkaWF0ZSByZXByZXNlbnRh
dGlvbgotICAgICAgICAvLwotICAgICAgICAgICAgaWYoaW50ZXJtTm9kZSkKLSAgICAgICAgICAg
ICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3Jl
Z2F0ZShpbnRlcm1Ob2RlLCBAMyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
JCQuaW50ZXJtQWdncmVnYXRlID0gMDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgfCBJTlZBUklBTlQgSURFTlRJRklFUiB7Ci0gICAgICAgIFZF
UlRFWF9PTkxZKCJpbnZhcmlhbnQgZGVjbGFyYXRpb24iLCBAMSk7Ci0gICAgICAgIGlmIChjb250
ZXh0LT5nbG9iYWxFcnJvckNoZWNrKEAxLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCksICJpbnZhcmlhbnQgdmFyeWluZyIpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotICAgICAgICAkJC50eXBlLnNldEJhc2ljKEVidEludmFyaWFudCwgRXZxSW52YXJpYW50
VmFyeWluZ091dCwgQDIpOwotICAgICAgICBpZiAoISQyLnN5bWJvbCkKLSAgICAgICAgewotICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFy
ZWQgYXMgaW52YXJpYW50IiwgJDIuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVn
YXRlID0gMDsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAg
IFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wo
MCwgKiQyLnN0cmluZywgVFR5cGUoJCQudHlwZSksIEAyKTsKLSAgICAgICAgICAgICQkLmludGVy
bUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwg
QDIpOwotICAgICAgICB9Ci0gICAgfQotICAgIDsKLQotZnVsbHlfc3BlY2lmaWVkX3R5cGUKLSAg
ICA6IHR5cGVfc3BlY2lmaWVyIHsKLSAgICAgICAgJCQgPSAkMTsKLQotICAgICAgICBpZiAoJDEu
YXJyYXkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAibm90IHN1cHBvcnRlZCIs
ICJmaXJzdC1jbGFzcyBhcnJheSIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICAgICAgJDEuc2V0QXJyYXkoZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQotICAgIHwg
dHlwZV9xdWFsaWZpZXIgdHlwZV9zcGVjaWZpZXIgIHsKLSAgICAgICAgaWYgKCQyLmFycmF5KSB7
Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3Qt
Y2xhc3MgYXJyYXkiKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
ICAgICQyLnNldEFycmF5KGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgkMS5xdWFs
aWZpZXIgPT0gRXZxQXR0cmlidXRlICYmCi0gICAgICAgICAgICAoJDIudHlwZSA9PSBFYnRCb29s
IHx8ICQyLnR5cGUgPT0gRWJ0SW50KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIs
ICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVy
KSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKCgkMS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8ICQxLnF1YWxpZmllciA9PSBFdnFW
YXJ5aW5nT3V0KSAmJgotICAgICAgICAgICAgKCQyLnR5cGUgPT0gRWJ0Qm9vbCB8fCAkMi50eXBl
ID09IEVidEludCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAiY2Fubm90IGJl
IGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikpOwotICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgICQkID0gJDI7Ci0g
ICAgICAgICQkLnF1YWxpZmllciA9ICQxLnF1YWxpZmllcjsKLSAgICB9Ci0gICAgOwotCi10eXBl
X3F1YWxpZmllcgotICAgIDogQ09OU1RfUVVBTCB7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidFZv
aWQsIEV2cUNvbnN0LCBAMSk7Ci0gICAgfQotICAgIHwgQVRUUklCVVRFIHsKLSAgICAgICAgVkVS
VEVYX09OTFkoImF0dHJpYnV0ZSIsIEAxKTsKLSAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVy
cm9yQ2hlY2soQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImF0dHJp
YnV0ZSIpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJC5zZXRC
YXNpYyhFYnRWb2lkLCBFdnFBdHRyaWJ1dGUsIEAxKTsKLSAgICB9Ci0gICAgfCBWQVJZSU5HIHsK
LSAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soQDEsIGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgInZhcnlpbmciKSkKLSAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfVkVSVEVY
X1NIQURFUikKLSAgICAgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cVZhcnlpbmdPdXQs
IEAxKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZx
VmFyeWluZ0luLCBAMSk7Ci0gICAgfQotICAgIHwgSU5WQVJJQU5UIFZBUllJTkcgewotICAgICAg
ICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjayhAMSwgY29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpLCAiaW52YXJpYW50IHZhcnlpbmciKSkKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfVkVS
VEVYX1NIQURFUikKLSAgICAgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFyaWFu
dFZhcnlpbmdPdXQsIEAxKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgJCQuc2V0QmFzaWMo
RWJ0Vm9pZCwgRXZxSW52YXJpYW50VmFyeWluZ0luLCBAMSk7Ci0gICAgfQotICAgIHwgVU5JRk9S
TSB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKEAxLCBjb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ1bmlmb3JtIikpCi0gICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cVVuaWZvcm0s
IEAxKTsKLSAgICB9Ci0gICAgOwotCi10eXBlX3NwZWNpZmllcgotICAgIDogdHlwZV9zcGVjaWZp
ZXJfbm9fcHJlYyB7Ci0gICAgICAgICQkID0gJDE7Ci0KLSAgICAgICAgaWYgKCQkLnByZWNpc2lv
biA9PSBFYnBVbmRlZmluZWQpIHsKLSAgICAgICAgICAgICQkLnByZWNpc2lvbiA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmdldERlZmF1bHRQcmVjaXNpb24oJDEudHlwZSk7Ci0gICAgICAgICAgICBp
ZiAoY29udGV4dC0+cHJlY2lzaW9uRXJyb3JDaGVjayhAMSwgJCQucHJlY2lzaW9uLCAkMS50eXBl
KSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLSAgICB8IHByZWNpc2lvbl9xdWFsaWZpZXIgdHlwZV9zcGVjaWZp
ZXJfbm9fcHJlYyB7Ci0gICAgICAgICQkID0gJDI7Ci0gICAgICAgICQkLnByZWNpc2lvbiA9ICQx
OwotICAgIH0KLSAgICA7Ci0KLXByZWNpc2lvbl9xdWFsaWZpZXIKLSAgICA6IEhJR0hfUFJFQ0lT
SU9OIHsKLSAgICAgICAgJCQgPSBFYnBIaWdoOwotICAgIH0KLSAgICB8IE1FRElVTV9QUkVDSVNJ
T04gewotICAgICAgICAkJCA9IEVicE1lZGl1bTsKLSAgICB9Ci0gICAgfCBMT1dfUFJFQ0lTSU9O
ICB7Ci0gICAgICAgICQkID0gRWJwTG93OwotICAgIH0KLSAgICA7Ci0KLXR5cGVfc3BlY2lmaWVy
X25vX3ByZWMKLSAgICA6IHR5cGVfc3BlY2lmaWVyX25vbmFycmF5IHsKLSAgICAgICAgJCQgPSAk
MTsKLSAgICB9Ci0gICAgfCB0eXBlX3NwZWNpZmllcl9ub25hcnJheSBMRUZUX0JSQUNLRVQgY29u
c3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKLSAgICAgICAgJCQgPSAkMTsKLQotICAg
ICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjayhAMiwgJDEpKQotICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGludCBz
aXplOwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soQDIsICQz
LCBzaXplKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAg
ICAkJC5zZXRBcnJheSh0cnVlLCBzaXplKTsKLSAgICAgICAgfQotICAgIH0KLSAgICA7Ci0KLXR5
cGVfc3BlY2lmaWVyX25vbmFycmF5Ci0gICAgOiBWT0lEX1RZUEUgewotICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIHF1YWwsIEAx
KTsKLSAgICB9Ci0gICAgfCBGTE9BVF9UWVBFIHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgQDEpOwotICAgIH0K
LSAgICB8IElOVF9UWVBFIHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAg
ICAgICAkJC5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsIEAxKTsKLSAgICB9Ci0gICAgfCBCT09MX1RZ
UEUgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICQkLnNldEJh
c2ljKEVidEJvb2wsIHF1YWwsIEAxKTsKLSAgICB9Ci0gICAgfCBWRUMyIHsKLSAgICAgICAgVFF1
YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZx
R2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVh
bCwgQDEpOwotICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMik7Ci0gICAgfQotICAgIHwgVkVDMyB7
Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgJCQuc2V0QmFzaWMo
RWJ0RmxvYXQsIHF1YWwsIEAxKTsKLSAgICAgICAgJCQuc2V0QWdncmVnYXRlKDMpOwotICAgIH0K
LSAgICB8IFZFQzQgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAg
ICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7Ci0gICAgICAgICQkLnNldEFnZ3JlZ2F0
ZSg0KTsKLSAgICB9Ci0gICAgfCBCVkVDMiB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKLSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgQDEpOwotICAgICAgICAk
JC5zZXRBZ2dyZWdhdGUoMik7Ci0gICAgfQotICAgIHwgQlZFQzMgewotICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidEJvb2wsIHF1YWwsIEAx
KTsKLSAgICAgICAgJCQuc2V0QWdncmVnYXRlKDMpOwotICAgIH0KLSAgICB8IEJWRUM0IHsKLSAg
ICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRC
b29sLCBxdWFsLCBAMSk7Ci0gICAgICAgICQkLnNldEFnZ3JlZ2F0ZSg0KTsKLSAgICB9Ci0gICAg
fCBJVkVDMiB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgJCQu
c2V0QmFzaWMoRWJ0SW50LCBxdWFsLCBAMSk7Ci0gICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgyKTsK
LSAgICB9Ci0gICAgfCBJVkVDMyB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
LSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCBAMSk7Ci0gICAgICAgICQkLnNldEFn
Z3JlZ2F0ZSgzKTsKLSAgICB9Ci0gICAgfCBJVkVDNCB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKLSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCBAMSk7Ci0gICAg
ICAgICQkLnNldEFnZ3JlZ2F0ZSg0KTsKLSAgICB9Ci0gICAgfCBNQVRSSVgyIHsKLSAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwg
cXVhbCwgQDEpOwotICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMiwgdHJ1ZSk7Ci0gICAgfQotICAg
IHwgTUFUUklYMyB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAg
JCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsKLSAgICAgICAgJCQuc2V0QWdncmVnYXRl
KDMsIHRydWUpOwotICAgIH0KLSAgICB8IE1BVFJJWDQgewotICAgICAgICBUUXVhbGlmaWVyIHF1
YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7Ci0g
ICAgICAgICQkLnNldEFnZ3JlZ2F0ZSg0LCB0cnVlKTsKLSAgICB9Ci0gICAgfCBTQU1QTEVSMkQg
ewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2Jh
bExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICQkLnNldEJhc2lj
KEVidFNhbXBsZXIyRCwgcXVhbCwgQDEpOwotICAgIH0KLSAgICB8IFNBTVBMRVJDVUJFIHsKLSAg
ICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRT
YW1wbGVyQ3ViZSwgcXVhbCwgQDEpOwotICAgIH0KLSAgICB8IFNBTVBMRVJfRVhURVJOQUxfT0VT
IHsKLSAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0V4dGVuc2lvbigiR0xfT0VTX0VHTF9p
bWFnZV9leHRlcm5hbCIpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgInVuc3Vw
cG9ydGVkIHR5cGUiLCAic2FtcGxlckV4dGVybmFsT0VTIik7Ci0gICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4
dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5
OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyRXh0ZXJuYWxPRVMsIHF1YWwsIEAxKTsK
LSAgICB9Ci0gICAgfCBTQU1QTEVSMkRSRUNUIHsKLSAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBw
b3J0c0V4dGVuc2lvbigiR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlIikpIHsKLSAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKEAxLCAidW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyMkRSZWN0Iik7
Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgVFF1
YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZx
R2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyMkRS
ZWN0LCBxdWFsLCBAMSk7Ci0gICAgfQotICAgIHwgc3RydWN0X3NwZWNpZmllciB7Ci0gICAgICAg
ICQkID0gJDE7Ci0gICAgICAgICQkLnF1YWxpZmllciA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0
R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICB9Ci0gICAgfCBU
WVBFX05BTUUgewotICAgICAgICAvLwotICAgICAgICAvLyBUaGlzIGlzIGZvciB1c2VyIGRlZmlu
ZWQgdHlwZSBuYW1lcy4gIFRoZSBsZXhpY2FsIHBoYXNlIGxvb2tlZCB1cCB0aGUKLSAgICAgICAg
Ly8gdHlwZS4KLSAgICAgICAgLy8KLSAgICAgICAgVFR5cGUmIHN0cnVjdHVyZSA9IHN0YXRpY19j
YXN0PFRWYXJpYWJsZSo+KCQxLnN5bWJvbCktPmdldFR5cGUoKTsKLSAgICAgICAgVFF1YWxpZmll
ciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFs
IDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRTdHJ1Y3QsIHF1YWwsIEAx
KTsKLSAgICAgICAgJCQudXNlckRlZiA9ICZzdHJ1Y3R1cmU7Ci0gICAgfQotICAgIDsKLQotc3Ry
dWN0X3NwZWNpZmllcgotICAgIDogU1RSVUNUIGlkZW50aWZpZXIgTEVGVF9CUkFDRSB7IGlmIChj
b250ZXh0LT5lbnRlclN0cnVjdERlY2xhcmF0aW9uKEAyLCAqJDIuc3RyaW5nKSkgY29udGV4dC0+
cmVjb3ZlcigpOyB9IHN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IFJJR0hUX0JSQUNFIHsKLSAgICAg
ICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZykpCi0gICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgVFR5cGUqIHN0cnVjdHVyZSA9
IG5ldyBUVHlwZShuZXcgVFN0cnVjdHVyZSgkMi5zdHJpbmcsICQ1KSk7Ci0gICAgICAgIFRWYXJp
YWJsZSogdXNlclR5cGVEZWYgPSBuZXcgVFZhcmlhYmxlKCQyLnN0cmluZywgKnN0cnVjdHVyZSwg
dHJ1ZSk7Ci0gICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgqdXNlclR5
cGVEZWYpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgInJlZGVmaW5pdGlvbiIs
ICQyLnN0cmluZy0+Y19zdHIoKSwgInN0cnVjdCIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgICQkLnNldEJhc2ljKEVidFN0cnVjdCwgRXZxVGVt
cG9yYXJ5LCBAMSk7Ci0gICAgICAgICQkLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7Ci0gICAgICAgIGNv
bnRleHQtPmV4aXRTdHJ1Y3REZWNsYXJhdGlvbigpOwotICAgIH0KLSAgICB8IFNUUlVDVCBMRUZU
X0JSQUNFIHsgaWYgKGNvbnRleHQtPmVudGVyU3RydWN0RGVjbGFyYXRpb24oQDIsICokMi5zdHJp
bmcpKSBjb250ZXh0LT5yZWNvdmVyKCk7IH0gc3RydWN0X2RlY2xhcmF0aW9uX2xpc3QgUklHSFRf
QlJBQ0UgewotICAgICAgICBUVHlwZSogc3RydWN0dXJlID0gbmV3IFRUeXBlKG5ldyBUU3RydWN0
dXJlKE5ld1Bvb2xUU3RyaW5nKCIiKSwgJDQpKTsKLSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U3Ry
dWN0LCBFdnFUZW1wb3JhcnksIEAxKTsKLSAgICAgICAgJCQudXNlckRlZiA9IHN0cnVjdHVyZTsK
LSAgICAgICAgY29udGV4dC0+ZXhpdFN0cnVjdERlY2xhcmF0aW9uKCk7Ci0gICAgfQotICAgIDsK
LQotc3RydWN0X2RlY2xhcmF0aW9uX2xpc3QKLSAgICA6IHN0cnVjdF9kZWNsYXJhdGlvbiB7Ci0g
ICAgICAgICQkID0gJDE7Ci0gICAgfQotICAgIHwgc3RydWN0X2RlY2xhcmF0aW9uX2xpc3Qgc3Ry
dWN0X2RlY2xhcmF0aW9uIHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCAkMi0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIFRGaWVsZCogZmllbGQg
PSAoKiQyKVtpXTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgJCQtPnNpemUo
KTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCgqJCQpW2pdLT5uYW1lKCkgPT0gZmllbGQt
Pm5hbWUoKSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgImR1cGxp
Y2F0ZSBmaWVsZCBuYW1lIGluIHN0cnVjdHVyZToiLCAic3RydWN0IiwgZmllbGQtPm5hbWUoKS5j
X3N0cigpKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICQkLT5wdXNoX2JhY2soZmll
bGQpOwotICAgICAgICB9Ci0gICAgfQotICAgIDsKLQotc3RydWN0X2RlY2xhcmF0aW9uCi0gICAg
OiB0eXBlX3NwZWNpZmllciBzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0IFNFTUlDT0xPTiB7Ci0gICAg
ICAgICQkID0gJDI7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPnZvaWRFcnJvckNoZWNrKEAxLCAo
KiQyKVswXS0+bmFtZSgpLCAkMSkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgfQotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8ICQkLT5zaXpl
KCk7ICsraSkgewotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIENhcmVmdWwgbm90IHRv
IHJlcGxhY2UgYWxyZWFkeSBrbm93biBhc3BlY3RzIG9mIHR5cGUsIGxpa2UgYXJyYXktbmVzcwot
ICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIFRUeXBlKiB0eXBlID0gKCokJClbaV0tPnR5cGUo
KTsKLSAgICAgICAgICAgIHR5cGUtPnNldEJhc2ljVHlwZSgkMS50eXBlKTsKLSAgICAgICAgICAg
IHR5cGUtPnNldE5vbWluYWxTaXplKCQxLnNpemUpOwotICAgICAgICAgICAgdHlwZS0+c2V0TWF0
cml4KCQxLm1hdHJpeCk7Ci0gICAgICAgICAgICB0eXBlLT5zZXRQcmVjaXNpb24oJDEucHJlY2lz
aW9uKTsKLQotICAgICAgICAgICAgLy8gZG9uJ3QgYWxsb3cgYXJyYXlzIG9mIGFycmF5cwotICAg
ICAgICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkgewotICAgICAgICAgICAgICAgIGlmIChjb250
ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKEAxLCAkMSkpCi0gICAgICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgkMS5hcnJh
eSkKLSAgICAgICAgICAgICAgICB0eXBlLT5zZXRBcnJheVNpemUoJDEuYXJyYXlTaXplKTsKLSAg
ICAgICAgICAgIGlmICgkMS51c2VyRGVmKQotICAgICAgICAgICAgICAgIHR5cGUtPnNldFN0cnVj
dCgkMS51c2VyRGVmLT5nZXRTdHJ1Y3QoKSk7Ci0KLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5z
dHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayhAMSwgKigqJCQpW2ldKSkKLSAgICAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgOwotCi1zdHJ1Y3RfZGVj
bGFyYXRvcl9saXN0Ci0gICAgOiBzdHJ1Y3RfZGVjbGFyYXRvciB7Ci0gICAgICAgICQkID0gTmV3
UG9vbFRGaWVsZExpc3QoKTsKLSAgICAgICAgJCQtPnB1c2hfYmFjaygkMSk7Ci0gICAgfQotICAg
IHwgc3RydWN0X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBzdHJ1Y3RfZGVjbGFyYXRvciB7Ci0gICAg
ICAgICQkLT5wdXNoX2JhY2soJDMpOwotICAgIH0KLSAgICA7Ci0KLXN0cnVjdF9kZWNsYXJhdG9y
Ci0gICAgOiBpZGVudGlmaWVyIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JD
aGVjayhAMSwgKiQxLnN0cmluZykpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0K
LSAgICAgICAgVFR5cGUqIHR5cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsK
LSAgICAgICAgJCQgPSBuZXcgVEZpZWxkKHR5cGUsICQxLnN0cmluZyk7Ci0gICAgfQotICAgIHwg
aWRlbnRpZmllciBMRUZUX0JSQUNLRVQgY29uc3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VU
IHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjayhAMSwgKiQxLnN0cmlu
ZykpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgVFR5cGUqIHR5
cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKLSAgICAgICAgaW50IHNpemUg
PSAwOwotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjayhAMywgJDMsIHNp
emUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB0eXBlLT5zZXRB
cnJheVNpemUoc2l6ZSk7Ci0KLSAgICAgICAgJCQgPSBuZXcgVEZpZWxkKHR5cGUsICQxLnN0cmlu
Zyk7Ci0gICAgfQotICAgIDsKLQotaW5pdGlhbGl6ZXIKLSAgICA6IGFzc2lnbm1lbnRfZXhwcmVz
c2lvbiB7ICQkID0gJDE7IH0KLSAgICA7Ci0KLWRlY2xhcmF0aW9uX3N0YXRlbWVudAotICAgIDog
ZGVjbGFyYXRpb24geyAkJCA9ICQxOyB9Ci0gICAgOwotCi1zdGF0ZW1lbnQKLSAgICA6IGNvbXBv
dW5kX3N0YXRlbWVudCAgeyAkJCA9ICQxOyB9Ci0gICAgfCBzaW1wbGVfc3RhdGVtZW50ICAgIHsg
JCQgPSAkMTsgfQotICAgIDsKLQotLy8gR3JhbW1hciBOb3RlOiAgTm8gbGFiZWxlZCBzdGF0ZW1l
bnRzOyAnZ290bycgaXMgbm90IHN1cHBvcnRlZC4KLQotc2ltcGxlX3N0YXRlbWVudAotICAgIDog
ZGVjbGFyYXRpb25fc3RhdGVtZW50IHsgJCQgPSAkMTsgfQotICAgIHwgZXhwcmVzc2lvbl9zdGF0
ZW1lbnQgIHsgJCQgPSAkMTsgfQotICAgIHwgc2VsZWN0aW9uX3N0YXRlbWVudCAgIHsgJCQgPSAk
MTsgfQotICAgIHwgaXRlcmF0aW9uX3N0YXRlbWVudCAgIHsgJCQgPSAkMTsgfQotICAgIHwganVt
cF9zdGF0ZW1lbnQgICAgICAgIHsgJCQgPSAkMTsgfQotICAgIDsKLQotY29tcG91bmRfc3RhdGVt
ZW50Ci0gICAgOiBMRUZUX0JSQUNFIFJJR0hUX0JSQUNFIHsgJCQgPSAwOyB9Ci0gICAgfCBMRUZU
X0JSQUNFIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyB9IHN0YXRlbWVudF9saXN0IHsg
Y29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7IH0gUklHSFRfQlJBQ0UgewotICAgICAgICBpZiAo
JDMgIT0gMCkgewotICAgICAgICAgICAgJDMtPnNldE9wKEVPcFNlcXVlbmNlKTsKLSAgICAgICAg
ICAgICQzLT5zZXRMaW5lKEAkKTsKLSAgICAgICAgfQotICAgICAgICAkJCA9ICQzOwotICAgIH0K
LSAgICA7Ci0KLXN0YXRlbWVudF9ub19uZXdfc2NvcGUKLSAgICA6IGNvbXBvdW5kX3N0YXRlbWVu
dF9ub19uZXdfc2NvcGUgeyAkJCA9ICQxOyB9Ci0gICAgfCBzaW1wbGVfc3RhdGVtZW50ICAgICAg
ICAgICAgICAgIHsgJCQgPSAkMTsgfQotICAgIDsKLQotc3RhdGVtZW50X3dpdGhfc2NvcGUKLSAg
ICA6IHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyB9IGNvbXBvdW5kX3N0YXRlbWVudF9u
b19uZXdfc2NvcGUgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgJCQgPSAkMjsgfQotICAg
IHwgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0gc2ltcGxlX3N0YXRlbWVudCAgICAg
ICAgICAgICAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOyAkJCA9ICQyOyB9Ci0gICAg
OwotCi1jb21wb3VuZF9zdGF0ZW1lbnRfbm9fbmV3X3Njb3BlCi0gICAgLy8gU3RhdGVtZW50IHRo
YXQgZG9lc24ndCBjcmVhdGUgYSBuZXcgc2NvcGUsIGZvciBzZWxlY3Rpb25fc3RhdGVtZW50LCBp
dGVyYXRpb25fc3RhdGVtZW50Ci0gICAgOiBMRUZUX0JSQUNFIFJJR0hUX0JSQUNFIHsKLSAgICAg
ICAgJCQgPSAwOwotICAgIH0KLSAgICB8IExFRlRfQlJBQ0Ugc3RhdGVtZW50X2xpc3QgUklHSFRf
QlJBQ0UgewotICAgICAgICBpZiAoJDIpIHsKLSAgICAgICAgICAgICQyLT5zZXRPcChFT3BTZXF1
ZW5jZSk7Ci0gICAgICAgICAgICAkMi0+c2V0TGluZShAJCk7Ci0gICAgICAgIH0KLSAgICAgICAg
JCQgPSAkMjsKLSAgICB9Ci0gICAgOwotCi1zdGF0ZW1lbnRfbGlzdAotICAgIDogc3RhdGVtZW50
IHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZSgkMSwg
QCQpOwotICAgIH0KLSAgICB8IHN0YXRlbWVudF9saXN0IHN0YXRlbWVudCB7Ci0gICAgICAgICQk
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEsICQyLCBAJCk7Ci0gICAg
fQotICAgIDsKLQotZXhwcmVzc2lvbl9zdGF0ZW1lbnQKLSAgICA6IFNFTUlDT0xPTiAgeyAkJCA9
IDA7IH0KLSAgICB8IGV4cHJlc3Npb24gU0VNSUNPTE9OICB7ICQkID0gc3RhdGljX2Nhc3Q8VElu
dGVybU5vZGUqPigkMSk7IH0KLSAgICA7Ci0KLXNlbGVjdGlvbl9zdGF0ZW1lbnQKLSAgICA6IElG
IExFRlRfUEFSRU4gZXhwcmVzc2lvbiBSSUdIVF9QQVJFTiBzZWxlY3Rpb25fcmVzdF9zdGF0ZW1l
bnQgewotICAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2soQDEsICQzKSkKLSAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkU2VsZWN0aW9uKCQzLCAkNSwgQDEpOwotICAgIH0KLSAgICA7Ci0KLXNlbGVjdGlv
bl9yZXN0X3N0YXRlbWVudAotICAgIDogc3RhdGVtZW50X3dpdGhfc2NvcGUgRUxTRSBzdGF0ZW1l
bnRfd2l0aF9zY29wZSB7Ci0gICAgICAgICQkLm5vZGUxID0gJDE7Ci0gICAgICAgICQkLm5vZGUy
ID0gJDM7Ci0gICAgfQotICAgIHwgc3RhdGVtZW50X3dpdGhfc2NvcGUgewotICAgICAgICAkJC5u
b2RlMSA9ICQxOwotICAgICAgICAkJC5ub2RlMiA9IDA7Ci0gICAgfQotICAgIDsKLQotLy8gR3Jh
bW1hciBOb3RlOiAgTm8gJ3N3aXRjaCcuICBTd2l0Y2ggc3RhdGVtZW50cyBub3Qgc3VwcG9ydGVk
LgotCi1jb25kaXRpb24KLSAgICAvLyBJbiAxOTk2IGMrKyBkcmFmdCwgY29uZGl0aW9ucyBjYW4g
aW5jbHVkZSBzaW5nbGUgZGVjbGFyYXRpb25zCi0gICAgOiBleHByZXNzaW9uIHsKLSAgICAgICAg
JCQgPSAkMTsKLSAgICAgICAgaWYgKGNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCQxLT5nZXRMaW5l
KCksICQxKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICB9Ci0gICAgfCBm
dWxseV9zcGVjaWZpZWRfdHlwZSBpZGVudGlmaWVyIEVRVUFMIGluaXRpYWxpemVyIHsKLSAgICAg
ICAgVEludGVybU5vZGUqIGludGVybU5vZGU7Ci0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RR
dWFsaWZpZXJFcnJvckNoZWNrKEAyLCAkMSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVjayhAMiwgJDEpKQotICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlmICghY29udGV4dC0+ZXhlY3V0
ZUluaXRpYWxpemVyKEAyLCAqJDIuc3RyaW5nLCAkMSwgJDQsIGludGVybU5vZGUpKQotICAgICAg
ICAgICAgJCQgPSAkNDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgICAgICAkJCA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgOwotCi1p
dGVyYXRpb25fc3RhdGVtZW50Ci0gICAgOiBXSElMRSBMRUZUX1BBUkVOIHsgY29udGV4dC0+c3lt
Ym9sVGFibGUucHVzaCgpOyArK2NvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0gY29uZGl0aW9u
IFJJR0hUX1BBUkVOIHN0YXRlbWVudF9ub19uZXdfc2NvcGUgewotICAgICAgICBjb250ZXh0LT5z
eW1ib2xUYWJsZS5wb3AoKTsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
TG9vcChFTG9vcFdoaWxlLCAwLCAkNCwgMCwgJDYsIEAxKTsKLSAgICAgICAgLS1jb250ZXh0LT5s
b29wTmVzdGluZ0xldmVsOwotICAgIH0KLSAgICB8IERPIHsgKytjb250ZXh0LT5sb29wTmVzdGlu
Z0xldmVsOyB9IHN0YXRlbWVudF93aXRoX3Njb3BlIFdISUxFIExFRlRfUEFSRU4gZXhwcmVzc2lv
biBSSUdIVF9QQVJFTiBTRU1JQ09MT04gewotICAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9y
Q2hlY2soQDgsICQ2KSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAg
ICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRMb29wKEVMb29wRG9XaGlsZSwgMCwgJDYs
IDAsICQzLCBANCk7Ci0gICAgICAgIC0tY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsKLSAgICB9
Ci0gICAgfCBGT1IgTEVGVF9QQVJFTiB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgKytj
b250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyB9IGZvcl9pbml0X3N0YXRlbWVudCBmb3JfcmVzdF9z
dGF0ZW1lbnQgUklHSFRfUEFSRU4gc3RhdGVtZW50X25vX25ld19zY29wZSB7Ci0gICAgICAgIGNv
bnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRMb29wKEVMb29wRm9yLCAkNCwgcmVpbnRlcnByZXRfY2FzdDxUSW50ZXJtVHlwZWQq
PigkNS5ub2RlMSksIHJlaW50ZXJwcmV0X2Nhc3Q8VEludGVybVR5cGVkKj4oJDUubm9kZTIpLCAk
NywgQDEpOwotICAgICAgICAtLWNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7Ci0gICAgfQotICAg
IDsKLQotZm9yX2luaXRfc3RhdGVtZW50Ci0gICAgOiBleHByZXNzaW9uX3N0YXRlbWVudCB7Ci0g
ICAgICAgICQkID0gJDE7Ci0gICAgfQotICAgIHwgZGVjbGFyYXRpb25fc3RhdGVtZW50IHsKLSAg
ICAgICAgJCQgPSAkMTsKLSAgICB9Ci0gICAgOwotCi1jb25kaXRpb25vcHQKLSAgICA6IGNvbmRp
dGlvbiB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgfQotICAgIHwgLyogTWF5IGJlIG51bGwgKi8g
ewotICAgICAgICAkJCA9IDA7Ci0gICAgfQotICAgIDsKLQotZm9yX3Jlc3Rfc3RhdGVtZW50Ci0g
ICAgOiBjb25kaXRpb25vcHQgU0VNSUNPTE9OIHsKLSAgICAgICAgJCQubm9kZTEgPSAkMTsKLSAg
ICAgICAgJCQubm9kZTIgPSAwOwotICAgIH0KLSAgICB8IGNvbmRpdGlvbm9wdCBTRU1JQ09MT04g
ZXhwcmVzc2lvbiAgewotICAgICAgICAkJC5ub2RlMSA9ICQxOwotICAgICAgICAkJC5ub2RlMiA9
ICQzOwotICAgIH0KLSAgICA7Ci0KLWp1bXBfc3RhdGVtZW50Ci0gICAgOiBDT05USU5VRSBTRU1J
Q09MT04gewotICAgICAgICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgImNvbnRpbnVlIHN0YXRlbWVudCBvbmx5IGFs
bG93ZWQgaW4gbG9vcHMiLCAiIik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVP
cENvbnRpbnVlLCBAMSk7Ci0gICAgfQotICAgIHwgQlJFQUsgU0VNSUNPTE9OIHsKLSAgICAgICAg
aWYgKGNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPD0gMCkgewotICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoQDEsICJicmVhayBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIp
OwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgICQk
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BCcmVhaywgQDEpOwotICAgIH0K
LSAgICB8IFJFVFVSTiBTRU1JQ09MT04gewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCBAMSk7Ci0gICAgICAgIGlmIChjb250ZXh0LT5jdXJy
ZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcihAMSwgIm5vbi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFs
dWUiLCAicmV0dXJuIik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgfCBSRVRVUk4gZXhwcmVzc2lvbiBTRU1JQ09MT04gewotICAgICAgICAk
JCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCAkMiwgQDEpOwot
ICAgICAgICBjb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IHRydWU7Ci0gICAgICAgIGlm
IChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lk
KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgInZvaWQgZnVuY3Rpb24gY2Fubm90
IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotICAgICAgICB9IGVsc2UgaWYgKCooY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZSkg
IT0gJDItPmdldFR5cGUoKSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJmdW5j
dGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6IiwgInJldHVybiIpOwotICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgfQotICAgIHwgRElTQ0FSRCBT
RU1JQ09MT04gewotICAgICAgICBGUkFHX09OTFkoImRpc2NhcmQiLCBAMSk7Ci0gICAgICAgICQk
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BLaWxsLCBAMSk7Ci0gICAgfQot
ICAgIDsKLQotLy8gR3JhbW1hciBOb3RlOiAgTm8gJ2dvdG8nLiAgR290b3MgYXJlIG5vdCBzdXBw
b3J0ZWQuCi0KLXRyYW5zbGF0aW9uX3VuaXQKLSAgICA6IGV4dGVybmFsX2RlY2xhcmF0aW9uIHsK
LSAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgY29udGV4dC0+dHJlZVJvb3QgPSAkJDsKLSAgICB9
Ci0gICAgfCB0cmFuc2xhdGlvbl91bml0IGV4dGVybmFsX2RlY2xhcmF0aW9uIHsKLSAgICAgICAg
JCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMSwgJDIsIEAkKTsKLSAg
ICAgICAgY29udGV4dC0+dHJlZVJvb3QgPSAkJDsKLSAgICB9Ci0gICAgOwotCi1leHRlcm5hbF9k
ZWNsYXJhdGlvbgotICAgIDogZnVuY3Rpb25fZGVmaW5pdGlvbiB7Ci0gICAgICAgICQkID0gJDE7
Ci0gICAgfQotICAgIHwgZGVjbGFyYXRpb24gewotICAgICAgICAkJCA9ICQxOwotICAgIH0KLSAg
ICA7Ci0KLWZ1bmN0aW9uX2RlZmluaXRpb24KLSAgICA6IGZ1bmN0aW9uX3Byb3RvdHlwZSB7Ci0g
ICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb24gPSAkMS5mdW5jdGlvbjsKLSAgICAgICAgCi0gICAg
ICAgIGNvbnN0IFRTeW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVp
bHRJbihmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAo
YnVpbHRJbikKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJidWls
dC1pbiBmdW5jdGlvbnMgY2Fubm90IGJlIHJlZGVmaW5lZCIsIGZ1bmN0aW9uLT5nZXROYW1lKCku
Y19zdHIoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRGdW5jdGlv
bio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoZnVuY3Rpb24tPmdldE1hbmdsZWROYW1lKCkp
KTsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gTm90ZTogICdwcmV2RGVjJyBjb3VsZCBiZSAnZnVu
Y3Rpb24nIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUgc2VlbiBmdW5jdGlvbgotICAg
ICAgICAvLyBhcyBpdCB3b3VsZCBoYXZlIGp1c3QgYmVlbiBwdXQgaW4gdGhlIHN5bWJvbCB0YWJs
ZS4gIE90aGVyd2lzZSwgd2UncmUgbG9va2luZyB1cAotICAgICAgICAvLyBhbiBlYXJsaWVyIG9j
Y3VyYW5jZS4KLSAgICAgICAgLy8KLSAgICAgICAgaWYgKHByZXZEZWMtPmlzRGVmaW5lZCgpKSB7
Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gVGhlbiB0aGlzIGZ1bmN0aW9uIGFscmVh
ZHkgaGFzIGEgYm9keS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBjb250ZXh0LT5lcnJv
cihAMSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9uLT5nZXROYW1lKCku
Y19zdHIoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcHJldkRlYy0+c2V0RGVmaW5lZCgpOwotCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFJh
aXNlIGVycm9yIG1lc3NhZ2UgaWYgbWFpbiBmdW5jdGlvbiB0YWtlcyBhbnkgcGFyYW1ldGVycyBv
ciByZXR1cm4gYW55dGhpbmcgb3RoZXIgdGhhbiB2b2lkCi0gICAgICAgIC8vCi0gICAgICAgIGlm
IChmdW5jdGlvbi0+Z2V0TmFtZSgpID09ICJtYWluIikgewotICAgICAgICAgICAgaWYgKGZ1bmN0
aW9uLT5nZXRQYXJhbUNvdW50KCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoQDEsICJmdW5jdGlvbiBjYW5ub3QgdGFrZSBhbnkgcGFyYW1ldGVyKHMpIiwgZnVuY3Rpb24t
PmdldE5hbWUoKS5jX3N0cigpKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZnVuY3Rpb24tPmdldFJldHVyblR5cGUo
KS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoQDEsICIiLCBmdW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCks
ICJtYWluIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIpOwotICAgICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IC8vCi0gICAgICAgIC8vIFJlbWVtYmVyIHRoZSByZXR1cm4gdHlwZSBmb3IgbGF0ZXIgY2hlY2tp
bmcgZm9yIFJFVFVSTiBzdGF0ZW1lbnRzLgotICAgICAgICAvLwotICAgICAgICBjb250ZXh0LT5j
dXJyZW50RnVuY3Rpb25UeXBlID0gJihwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkpOwotICAgICAg
ICBjb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IGZhbHNlOwotCi0gICAgICAgIC8vCi0g
ICAgICAgIC8vIEluc2VydCBwYXJhbWV0ZXJzIGludG8gdGhlIHN5bWJvbCB0YWJsZS4KLSAgICAg
ICAgLy8gSWYgdGhlIHBhcmFtZXRlciBoYXMgbm8gbmFtZSwgaXQncyBub3QgYW4gZXJyb3IsIGp1
c3QgZG9uJ3QgaW5zZXJ0IGl0Ci0gICAgICAgIC8vIChjb3VsZCBiZSB1c2VkIGZvciB1bnVzZWQg
YXJncykuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIEFsc28sIGFjY3VtdWxhdGUgdGhlIGxpc3Qg
b2YgcGFyYW1ldGVycyBpbnRvIHRoZSBISUwsIHNvIGxvd2VyIGxldmVsIGNvZGUKLSAgICAgICAg
Ly8ga25vd3Mgd2hlcmUgdG8gZmluZCBwYXJhbWV0ZXJzLgotICAgICAgICAvLwotICAgICAgICBU
SW50ZXJtQWdncmVnYXRlKiBwYXJhbU5vZGVzID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGU7Ci0gICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb24tPmdldFBhcmFtQ291bnQoKTsgaSsr
KSB7Ci0gICAgICAgICAgICBjb25zdCBUUGFyYW1ldGVyJiBwYXJhbSA9IGZ1bmN0aW9uLT5nZXRQ
YXJhbShpKTsKLSAgICAgICAgICAgIGlmIChwYXJhbS5uYW1lICE9IDApIHsKLSAgICAgICAgICAg
ICAgICBUVmFyaWFibGUgKnZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZShwYXJhbS5uYW1lLCAqcGFy
YW0udHlwZSk7Ci0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAvLyBJbnNlcnQg
dGhlIHBhcmFtZXRlcnMgd2l0aCBuYW1lIGluIHRoZSBzeW1ib2wgdGFibGUuCi0gICAgICAgICAg
ICAgICAgLy8KLSAgICAgICAgICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNl
cnQoKnZhcmlhYmxlKSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwg
InJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRl
IHZhcmlhYmxlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vCi0gICAg
ICAgICAgICAgICAgLy8gQWRkIHRoZSBwYXJhbWV0ZXIgdG8gdGhlIEhJTAotICAgICAgICAgICAg
ICAgIC8vCi0gICAgICAgICAgICAgICAgcGFyYW1Ob2RlcyA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5ncm93QWdncmVnYXRlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJhbU5vZGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRV
bmlxdWVJZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXROYW1lKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBAMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEAxKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcGFyYW1Ob2Rl
cyA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKHBhcmFtTm9kZXMsIGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsICpwYXJhbS50eXBlLCBAMSksIEAxKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
c2V0QWdncmVnYXRlT3BlcmF0b3IocGFyYW1Ob2RlcywgRU9wUGFyYW1ldGVycywgQDEpOwotICAg
ICAgICAkMS5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJhbU5vZGVzOwotICAgICAgICBjb250ZXh0LT5s
b29wTmVzdGluZ0xldmVsID0gMDsKLSAgICB9Ci0gICAgY29tcG91bmRfc3RhdGVtZW50X25vX25l
d19zY29wZSB7Ci0gICAgICAgIC8vPz8gQ2hlY2sgdGhhdCBhbGwgcGF0aHMgcmV0dXJuIGEgdmFs
dWUgaWYgcmV0dXJuIHR5cGUgIT0gdm9pZCA/Ci0gICAgICAgIC8vICAgTWF5IGJlIGJlc3QgZG9u
ZSBhcyBwb3N0IHByb2Nlc3MgcGhhc2Ugb24gaW50ZXJtZWRpYXRlIGNvZGUKLSAgICAgICAgaWYg
KGNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQg
JiYgISBjb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSkgewotICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoQDEsICJmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZToiLCAiIiwgJDEu
ZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1BZ2dyZWdhdGUsICQzLCBAJCk7Ci0gICAgICAg
IGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcigkJCwgRU9wRnVuY3Rp
b24sIEAxKTsKLSAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldE5hbWUoJDEuZnVuY3Rp
b24tPmdldE1hbmdsZWROYW1lKCkuY19zdHIoKSk7Ci0gICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0
ZSgpLT5zZXRUeXBlKCQxLmZ1bmN0aW9uLT5nZXRSZXR1cm5UeXBlKCkpOwotCi0gICAgICAgIC8v
IHN0b3JlIHRoZSBwcmFnbWEgaW5mb3JtYXRpb24gZm9yIGRlYnVnIGFuZCBvcHRpbWl6ZSBhbmQg
b3RoZXIgdmVuZG9yIHNwZWNpZmljCi0gICAgICAgIC8vIGluZm9ybWF0aW9uLiBUaGlzIGluZm9y
bWF0aW9uIGNhbiBiZSBxdWVyaWVkIGZyb20gdGhlIHBhcnNlIHRyZWUKLSAgICAgICAgJCQtPmdl
dEFzQWdncmVnYXRlKCktPnNldE9wdGltaXplKGNvbnRleHQtPnByYWdtYSgpLm9wdGltaXplKTsK
LSAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldERlYnVnKGNvbnRleHQtPnByYWdtYSgp
LmRlYnVnKTsKLQotICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKLSAgICB9Ci0g
ICAgOwotCi0lJQotCi1pbnQgZ2xzbGFuZ19wYXJzZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7
Ci0gICAgcmV0dXJuIHl5cGFyc2UoY29udGV4dCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNzkwNjJjYjc2YzkzMTI4ZGIxNzIxZGFjZTU2YjNiYmQ4NDg3OTkzYi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMjk3NCArMCwwIEBACi0jbGluZSAxNyAiLi9nbHNsYW5nLmwiCi0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4g
RE8gTk9UIEVESVQhCi0KLS8vIElnbm9yZSBlcnJvcnMgaW4gYXV0by1nZW5lcmF0ZWQgY29kZS4K
LSNpZiBkZWZpbmVkKF9fR05VQ19fKQotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICIt
V3VudXNlZC1mdW5jdGlvbiIKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVz
ZWQtdmFyaWFibGUiCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc3dpdGNoLWVu
dW0iCi0jZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQw
NjUpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDE4OSkKLSNwcmFnbWEgd2FybmluZyhkaXNh
YmxlOiA0NTA1KQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEpCi0jZW5kaWYKLQotI2lm
IGRlZmluZWQoX19jbGFuZ19fKQotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKLSNwcmFn
bWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vua25vd24tcHJhZ21hcyIKLSNwcmFnbWEg
Y2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtcmVnaXN0ZXIiCi0jZW5kaWYK
LQotCi0KLSNsaW5lIDI1ICIuL2dsc2xhbmdfbGV4LmNwcCIKLQotI2RlZmluZSAgWVlfSU5UX0FM
SUdORUQgc2hvcnQgaW50Ci0KLS8qIEEgbGV4aWNhbCBzY2FubmVyIGdlbmVyYXRlZCBieSBmbGV4
ICovCi0KLSNkZWZpbmUgRkxFWF9TQ0FOTkVSCi0jZGVmaW5lIFlZX0ZMRVhfTUFKT1JfVkVSU0lP
TiAyCi0jZGVmaW5lIFlZX0ZMRVhfTUlOT1JfVkVSU0lPTiA1Ci0jZGVmaW5lIFlZX0ZMRVhfU1VC
TUlOT1JfVkVSU0lPTiAzNQotI2lmIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiA+IDAKLSNkZWZp
bmUgRkxFWF9CRVRBCi0jZW5kaWYKLQotLyogRmlyc3QsIHdlIGRlYWwgd2l0aCAgcGxhdGZvcm0t
c3BlY2lmaWMgb3IgY29tcGlsZXItc3BlY2lmaWMgaXNzdWVzLiAqLwotCi0vKiBiZWdpbiBzdGFu
ZGFyZCBDIGhlYWRlcnMuICovCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcu
aD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0vKiBlbmQgc3Rh
bmRhcmQgQyBoZWFkZXJzLiAqLwotCi0vKiBmbGV4IGludGVnZXIgdHlwZSBkZWZpbml0aW9ucyAq
LwotCi0jaWZuZGVmIEZMRVhJTlRfSAotI2RlZmluZSBGTEVYSU5UX0gKLQotLyogQzk5IHN5c3Rl
bXMgaGF2ZSA8aW50dHlwZXMuaD4uIE5vbi1DOTkgc3lzdGVtcyBtYXkgb3IgbWF5IG5vdC4gKi8K
LQotI2lmIGRlZmluZWQgKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0g
MTk5OTAxTAotCi0vKiBDOTkgc2F5cyB0byBkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyBiZWZv
cmUgaW5jbHVkaW5nIHN0ZGludC5oLAotICogaWYgeW91IHdhbnQgdGhlIGxpbWl0IChtYXgvbWlu
KSBtYWNyb3MgZm9yIGludCB0eXBlcy4gCi0gKi8KLSNpZm5kZWYgX19TVERDX0xJTUlUX01BQ1JP
UwotI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIDEKLSNlbmRpZgotCi0jaW5jbHVkZSA8aW50
dHlwZXMuaD4KLXR5cGVkZWYgaW50OF90IGZsZXhfaW50OF90OwotdHlwZWRlZiB1aW50OF90IGZs
ZXhfdWludDhfdDsKLXR5cGVkZWYgaW50MTZfdCBmbGV4X2ludDE2X3Q7Ci10eXBlZGVmIHVpbnQx
Nl90IGZsZXhfdWludDE2X3Q7Ci10eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90OwotdHlwZWRl
ZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90OwotdHlwZWRlZiB1aW50NjRfdCBmbGV4X3VpbnQ2NF90
OwotI2Vsc2UKLXR5cGVkZWYgc2lnbmVkIGNoYXIgZmxleF9pbnQ4X3Q7Ci10eXBlZGVmIHNob3J0
IGludCBmbGV4X2ludDE2X3Q7Ci10eXBlZGVmIGludCBmbGV4X2ludDMyX3Q7Ci10eXBlZGVmIHVu
c2lnbmVkIGNoYXIgZmxleF91aW50OF90OyAKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IGZs
ZXhfdWludDE2X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90OwotI2VuZGlm
IC8qICEgQzk5ICovCi0KLS8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8KLSNpZm5kZWYg
SU5UOF9NSU4KLSNkZWZpbmUgSU5UOF9NSU4gICAgICAgICAgICAgICAoLTEyOCkKLSNlbmRpZgot
I2lmbmRlZiBJTlQxNl9NSU4KLSNkZWZpbmUgSU5UMTZfTUlOICAgICAgICAgICAgICAoLTMyNzY3
LTEpCi0jZW5kaWYKLSNpZm5kZWYgSU5UMzJfTUlOCi0jZGVmaW5lIElOVDMyX01JTiAgICAgICAg
ICAgICAgKC0yMTQ3NDgzNjQ3LTEpCi0jZW5kaWYKLSNpZm5kZWYgSU5UOF9NQVgKLSNkZWZpbmUg
SU5UOF9NQVggICAgICAgICAgICAgICAoMTI3KQotI2VuZGlmCi0jaWZuZGVmIElOVDE2X01BWAot
I2RlZmluZSBJTlQxNl9NQVggICAgICAgICAgICAgICgzMjc2NykKLSNlbmRpZgotI2lmbmRlZiBJ
TlQzMl9NQVgKLSNkZWZpbmUgSU5UMzJfTUFYICAgICAgICAgICAgICAoMjE0NzQ4MzY0NykKLSNl
bmRpZgotI2lmbmRlZiBVSU5UOF9NQVgKLSNkZWZpbmUgVUlOVDhfTUFYICAgICAgICAgICAgICAo
MjU1VSkKLSNlbmRpZgotI2lmbmRlZiBVSU5UMTZfTUFYCi0jZGVmaW5lIFVJTlQxNl9NQVggICAg
ICAgICAgICAgKDY1NTM1VSkKLSNlbmRpZgotI2lmbmRlZiBVSU5UMzJfTUFYCi0jZGVmaW5lIFVJ
TlQzMl9NQVggICAgICAgICAgICAgKDQyOTQ5NjcyOTVVKQotI2VuZGlmCi0KLSNlbmRpZiAvKiAh
IEZMRVhJTlRfSCAqLwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLQotLyogVGhlICJjb25zdCIgc3Rv
cmFnZS1jbGFzcy1tb2RpZmllciBpcyB2YWxpZC4gKi8KLSNkZWZpbmUgWVlfVVNFX0NPTlNUCi0K
LSNlbHNlCS8qICEgX19jcGx1c3BsdXMgKi8KLQotLyogQzk5IHJlcXVpcmVzIF9fU1REQ19fIHRv
IGJlIGRlZmluZWQgYXMgMS4gKi8KLSNpZiBkZWZpbmVkIChfX1NURENfXykKLQotI2RlZmluZSBZ
WV9VU0VfQ09OU1QKLQotI2VuZGlmCS8qIGRlZmluZWQgKF9fU1REQ19fKSAqLwotI2VuZGlmCS8q
ICEgX19jcGx1c3BsdXMgKi8KLQotI2lmZGVmIFlZX1VTRV9DT05TVAotI2RlZmluZSB5eWNvbnN0
IGNvbnN0Ci0jZWxzZQotI2RlZmluZSB5eWNvbnN0Ci0jZW5kaWYKLQotLyogUmV0dXJuZWQgdXBv
biBlbmQtb2YtZmlsZS4gKi8KLSNkZWZpbmUgWVlfTlVMTCAwCi0KLS8qIFByb21vdGVzIGEgcG9z
c2libHkgbmVnYXRpdmUsIHBvc3NpYmx5IHNpZ25lZCBjaGFyIHRvIGFuIHVuc2lnbmVkCi0gKiBp
bnRlZ2VyIGZvciB1c2UgYXMgYW4gYXJyYXkgaW5kZXguICBJZiB0aGUgc2lnbmVkIGNoYXIgaXMg
bmVnYXRpdmUsCi0gKiB3ZSB3YW50IHRvIGluc3RlYWQgdHJlYXQgaXQgYXMgYW4gOC1iaXQgdW5z
aWduZWQgY2hhciwgaGVuY2UgdGhlCi0gKiBkb3VibGUgY2FzdC4KLSAqLwotI2RlZmluZSBZWV9T
Q19UT19VSShjKSAoKHVuc2lnbmVkIGludCkgKHVuc2lnbmVkIGNoYXIpIGMpCi0KLS8qIEFuIG9w
YXF1ZSBwb2ludGVyLiAqLwotI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAotI2RlZmlu
ZSBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAotdHlwZWRlZiB2b2lkKiB5eXNjYW5fdDsKLSNlbmRp
ZgotCi0vKiBGb3IgY29udmVuaWVuY2UsIHRoZXNlIHZhcnMgKHBsdXMgdGhlIGJpc29uIHZhcnMg
ZmFyIGJlbG93KQotICAgYXJlIG1hY3JvcyBpbiB0aGUgcmVlbnRyYW50IHNjYW5uZXIuICovCi0j
ZGVmaW5lIHl5aW4geXlnLT55eWluX3IKLSNkZWZpbmUgeXlvdXQgeXlnLT55eW91dF9yCi0jZGVm
aW5lIHl5ZXh0cmEgeXlnLT55eWV4dHJhX3IKLSNkZWZpbmUgeXlsZW5nIHl5Zy0+eXlsZW5nX3IK
LSNkZWZpbmUgeXl0ZXh0IHl5Zy0+eXl0ZXh0X3IKLSNkZWZpbmUgeXlsaW5lbm8gKFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfYnNfbGluZW5vKQotI2RlZmluZSB5eWNvbHVtbiAoWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9ic19jb2x1bW4pCi0jZGVmaW5lIHl5X2ZsZXhfZGVidWcg
eXlnLT55eV9mbGV4X2RlYnVnX3IKLQotLyogRW50ZXIgYSBzdGFydCBjb25kaXRpb24uICBUaGlz
IG1hY3JvIHJlYWxseSBvdWdodCB0byB0YWtlIGEgcGFyYW1ldGVyLAotICogYnV0IHdlIGRvIGl0
IHRoZSBkaXNndXN0aW5nIGNydWZ0eSB3YXkgZm9yY2VkIG9uIHVzIGJ5IHRoZSAoKS1sZXNzCi0g
KiBkZWZpbml0aW9uIG9mIEJFR0lOLgotICovCi0jZGVmaW5lIEJFR0lOIHl5Zy0+eXlfc3RhcnQg
PSAxICsgMiAqCi0KLS8qIFRyYW5zbGF0ZSB0aGUgY3VycmVudCBzdGFydCBzdGF0ZSBpbnRvIGEg
dmFsdWUgdGhhdCBjYW4gYmUgbGF0ZXIgaGFuZGVkCi0gKiB0byBCRUdJTiB0byByZXR1cm4gdG8g
dGhlIHN0YXRlLiAgVGhlIFlZU1RBVEUgYWxpYXMgaXMgZm9yIGxleAotICogY29tcGF0aWJpbGl0
eS4KLSAqLwotI2RlZmluZSBZWV9TVEFSVCAoKHl5Zy0+eXlfc3RhcnQgLSAxKSAvIDIpCi0jZGVm
aW5lIFlZU1RBVEUgWVlfU1RBUlQKLQotLyogQWN0aW9uIG51bWJlciBmb3IgRU9GIHJ1bGUgb2Yg
YSBnaXZlbiBzdGFydCBzdGF0ZS4gKi8KLSNkZWZpbmUgWVlfU1RBVEVfRU9GKHN0YXRlKSAoWVlf
RU5EX09GX0JVRkZFUiArIHN0YXRlICsgMSkKLQotLyogU3BlY2lhbCBhY3Rpb24gbWVhbmluZyAi
c3RhcnQgcHJvY2Vzc2luZyBhIG5ldyBmaWxlIi4gKi8KLSNkZWZpbmUgWVlfTkVXX0ZJTEUgeXly
ZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lciApCi0KLSNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUl9DSEFS
IDAKLQotLyogU2l6ZSBvZiBkZWZhdWx0IGlucHV0IGJ1ZmZlci4gKi8KLSNpZm5kZWYgWVlfQlVG
X1NJWkUKLSNkZWZpbmUgWVlfQlVGX1NJWkUgMTYzODQKLSNlbmRpZgotCi0vKiBUaGUgc3RhdGUg
YnVmIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgb25lIHN0YXRlIHBlciBjaGFyYWN0ZXIg
aW4gdGhlIG1haW4gYnVmZmVyLgotICovCi0jZGVmaW5lIFlZX1NUQVRFX0JVRl9TSVpFICAgKChZ
WV9CVUZfU0laRSArIDIpICogc2l6ZW9mKHl5X3N0YXRlX3R5cGUpKQotCi0jaWZuZGVmIFlZX1RZ
UEVERUZfWVlfQlVGRkVSX1NUQVRFCi0jZGVmaW5lIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRF
Ci10eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFURTsKLSNlbmRp
ZgotCi0jaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCi0jZGVmaW5lIFlZX1RZUEVERUZfWVlf
U0laRV9UCi10eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7Ci0jZW5kaWYKLQotI2RlZmluZSBFT0Jf
QUNUX0NPTlRJTlVFX1NDQU4gMAotI2RlZmluZSBFT0JfQUNUX0VORF9PRl9GSUxFIDEKLSNkZWZp
bmUgRU9CX0FDVF9MQVNUX01BVENIIDIKLQotICAgIC8qIE5vdGU6IFdlIHNwZWNpZmljYWxseSBv
bWl0IHRoZSB0ZXN0IGZvciB5eV9ydWxlX2Nhbl9tYXRjaF9lb2wgYmVjYXVzZSBpdCByZXF1aXJl
cwotICAgICAqICAgICAgIGFjY2VzcyB0byB0aGUgbG9jYWwgdmFyaWFibGUgeXlfYWN0LiBTaW5j
ZSB5eWxlc3MoKSBpcyBhIG1hY3JvLCBpdCB3b3VsZCBicmVhawotICAgICAqICAgICAgIGV4aXN0
aW5nIHNjYW5uZXJzIHRoYXQgY2FsbCB5eWxlc3MoKSBmcm9tIE9VVFNJREUgeXlsZXguIAotICAg
ICAqICAgICAgIE9uZSBvYnZpb3VzIHNvbHV0aW9uIGl0IHRvIG1ha2UgeXlfYWN0IGEgZ2xvYmFs
LiBJIHRyaWVkIHRoYXQsIGFuZCBzYXcKLSAgICAgKiAgICAgICBhIDUlIHBlcmZvcm1hbmNlIGhp
dCBpbiBhIG5vbi15eWxpbmVubyBzY2FubmVyLCBiZWNhdXNlIHl5X2FjdCBpcwotICAgICAqICAg
ICAgIG5vcm1hbGx5IGRlY2xhcmVkIGFzIGEgcmVnaXN0ZXIgdmFyaWFibGUtLSBzbyBpdCBpcyBu
b3Qgd29ydGggaXQuCi0gICAgICovCi0gICAgI2RlZmluZSAgWVlfTEVTU19MSU5FTk8obikgXAot
ICAgICAgICAgICAgZG8geyBcCi0gICAgICAgICAgICAgICAgeXlfc2l6ZV90IHl5bDtcCi0gICAg
ICAgICAgICAgICAgZm9yICggeXlsID0gbjsgeXlsIDwgeXlsZW5nOyArK3l5bCApXAotICAgICAg
ICAgICAgICAgICAgICBpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKVwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC0teXlsaW5lbm87XAotICAgICAgICAgICAgfXdoaWxlKDApCi0gICAgCi0vKiBS
ZXR1cm4gYWxsIGJ1dCB0aGUgZmlyc3QgIm4iIG1hdGNoZWQgY2hhcmFjdGVycyBiYWNrIHRvIHRo
ZSBpbnB1dCBzdHJlYW0uICovCi0jZGVmaW5lIHl5bGVzcyhuKSBcCi0JZG8gXAotCQl7IFwKLQkJ
LyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCi0gICAgICAgIGludCB5
eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCi0gICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVzc19t
YWNyb19hcmcpO1wKLQkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7IFwKLQkJWVlfUkVTVE9S
RV9ZWV9NT1JFX09GRlNFVCBcCi0JCXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwID0geXlfYnAgKyB5
eWxlc3NfbWFjcm9fYXJnIC0gWVlfTU9SRV9BREo7IFwKLQkJWVlfRE9fQkVGT1JFX0FDVElPTjsg
Lyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLyBcCi0JCX0gXAotCXdoaWxlICggMCApCi0KLSNkZWZp
bmUgdW5wdXQoYykgeXl1bnB1dCggYywgeXlnLT55eXRleHRfcHRyICwgeXlzY2FubmVyICkKLQot
I2lmbmRlZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCi0jZGVmaW5lIFlZX1NUUlVDVF9ZWV9C
VUZGRVJfU1RBVEUKLXN0cnVjdCB5eV9idWZmZXJfc3RhdGUKLQl7Ci0JRklMRSAqeXlfaW5wdXRf
ZmlsZTsKLQotCWNoYXIgKnl5X2NoX2J1ZjsJCS8qIGlucHV0IGJ1ZmZlciAqLwotCWNoYXIgKnl5
X2J1Zl9wb3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1ZmZlciAqLwotCi0JLyog
U2l6ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBmb3IgRU9C
Ci0JICogY2hhcmFjdGVycy4KLQkgKi8KLQl5eV9zaXplX3QgeXlfYnVmX3NpemU7Ci0KLQkvKiBO
dW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBub3QgaW5jbHVkaW5nIEVP
QgotCSAqIGNoYXJhY3RlcnMuCi0JICovCi0JeXlfc2l6ZV90IHl5X25fY2hhcnM7Ci0KLQkvKiBX
aGV0aGVyIHdlICJvd24iIHRoZSBidWZmZXIgLSBpLmUuLCB3ZSBrbm93IHdlIGNyZWF0ZWQgaXQs
Ci0JICogYW5kIGNhbiByZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNob3VsZCBmcmVlKCkg
aXQgdG8KLQkgKiBkZWxldGUgaXQuCi0JICovCi0JaW50IHl5X2lzX291cl9idWZmZXI7Ci0KLQkv
KiBXaGV0aGVyIHRoaXMgaXMgYW4gImludGVyYWN0aXZlIiBpbnB1dCBzb3VyY2U7IGlmIHNvLCBh
bmQKLQkgKiBpZiB3ZSdyZSB1c2luZyBzdGRpbyBmb3IgaW5wdXQsIHRoZW4gd2Ugd2FudCB0byB1
c2UgZ2V0YygpCi0JICogaW5zdGVhZCBvZiBmcmVhZCgpLCB0byBtYWtlIHN1cmUgd2Ugc3RvcCBm
ZXRjaGluZyBpbnB1dCBhZnRlcgotCSAqIGVhY2ggbmV3bGluZS4KLQkgKi8KLQlpbnQgeXlfaXNf
aW50ZXJhY3RpdmU7Ci0KLQkvKiBXaGV0aGVyIHdlJ3JlIGNvbnNpZGVyZWQgdG8gYmUgYXQgdGhl
IGJlZ2lubmluZyBvZiBhIGxpbmUuCi0JICogSWYgc28sICdeJyBydWxlcyB3aWxsIGJlIGFjdGl2
ZSBvbiB0aGUgbmV4dCBtYXRjaCwgb3RoZXJ3aXNlCi0JICogbm90LgotCSAqLwotCWludCB5eV9h
dF9ib2w7Ci0KLSAgICBpbnQgeXlfYnNfbGluZW5vOyAvKio8IFRoZSBsaW5lIGNvdW50LiAqLwot
ICAgIGludCB5eV9ic19jb2x1bW47IC8qKjwgVGhlIGNvbHVtbiBjb3VudC4gKi8KLSAgICAKLQkv
KiBXaGV0aGVyIHRvIHRyeSB0byBmaWxsIHRoZSBpbnB1dCBidWZmZXIgd2hlbiB3ZSByZWFjaCB0
aGUKLQkgKiBlbmQgb2YgaXQuCi0JICovCi0JaW50IHl5X2ZpbGxfYnVmZmVyOwotCi0JaW50IHl5
X2J1ZmZlcl9zdGF0dXM7Ci0KLSNkZWZpbmUgWVlfQlVGRkVSX05FVyAwCi0jZGVmaW5lIFlZX0JV
RkZFUl9OT1JNQUwgMQotCS8qIFdoZW4gYW4gRU9GJ3MgYmVlbiBzZWVuIGJ1dCB0aGVyZSdzIHN0
aWxsIHNvbWUgdGV4dCB0byBwcm9jZXNzCi0JICogdGhlbiB3ZSBtYXJrIHRoZSBidWZmZXIgYXMg
WVlfRU9GX1BFTkRJTkcsIHRvIGluZGljYXRlIHRoYXQgd2UKLQkgKiBzaG91bGRuJ3QgdHJ5IHJl
YWRpbmcgZnJvbSB0aGUgaW5wdXQgc291cmNlIGFueSBtb3JlLiAgV2UgbWlnaHQKLQkgKiBzdGls
bCBoYXZlIGEgYnVuY2ggb2YgdG9rZW5zIHRvIG1hdGNoLCB0aG91Z2gsIGJlY2F1c2Ugb2YKLQkg
KiBwb3NzaWJsZSBiYWNraW5nLXVwLgotCSAqCi0JICogV2hlbiB3ZSBhY3R1YWxseSBzZWUgdGhl
IEVPRiwgd2UgY2hhbmdlIHRoZSBzdGF0dXMgdG8gIm5ldyIKLQkgKiAodmlhIHl5cmVzdGFydCgp
KSwgc28gdGhhdCB0aGUgdXNlciBjYW4gY29udGludWUgc2Nhbm5pbmcgYnkKLQkgKiBqdXN0IHBv
aW50aW5nIHl5aW4gYXQgYSBuZXcgaW5wdXQgZmlsZS4KLQkgKi8KLSNkZWZpbmUgWVlfQlVGRkVS
X0VPRl9QRU5ESU5HIDIKLQotCX07Ci0jZW5kaWYgLyogIVlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RB
VEUgKi8KLQotLyogV2UgcHJvdmlkZSBtYWNyb3MgZm9yIGFjY2Vzc2luZyBidWZmZXIgc3RhdGVz
IGluIGNhc2UgaW4gdGhlCi0gKiBmdXR1cmUgd2Ugd2FudCB0byBwdXQgdGhlIGJ1ZmZlciBzdGF0
ZXMgaW4gYSBtb3JlIGdlbmVyYWwKLSAqICJzY2FubmVyIHN0YXRlIi4KLSAqCi0gKiBSZXR1cm5z
IHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBvciBOVUxMLgotICovCi0jZGVmaW5lIFlZX0NVUlJFTlRf
QlVGRkVSICggeXlnLT55eV9idWZmZXJfc3RhY2sgXAotICAgICAgICAgICAgICAgICAgICAgICAg
ICA/IHl5Zy0+eXlfYnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcF0gXAotICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEwpCi0KLS8qIFNhbWUgYXMgcHJldmlvdXMgbWFj
cm8sIGJ1dCB1c2VmdWwgd2hlbiB3ZSBrbm93IHRoYXQgdGhlIGJ1ZmZlciBzdGFjayBpcyBub3QK
LSAqIE5VTEwgb3Igd2hlbiB3ZSBuZWVkIGFuIGx2YWx1ZS4gRm9yIGludGVybmFsIHVzZSBvbmx5
LgotICovCi0jZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSB5eWctPnl5X2J1ZmZlcl9z
dGFja1t5eWctPnl5X2J1ZmZlcl9zdGFja190b3BdCi0KLXZvaWQgeXlyZXN0YXJ0IChGSUxFICpp
bnB1dF9maWxlICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgeXlfc3dpdGNoX3RvX2J1ZmZl
ciAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotWVlf
QlVGRkVSX1NUQVRFIHl5X2NyZWF0ZV9idWZmZXIgKEZJTEUgKmZpbGUsaW50IHNpemUgLHl5c2Nh
bl90IHl5c2Nhbm5lciApOwotdm9pZCB5eV9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUg
YiAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHl5X2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVS
X1NUQVRFIGIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCB5eXB1c2hfYnVmZmVyX3N0YXRl
IChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lk
IHl5cG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXN0YXRpYyB2b2lk
IHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1zdGF0aWMgdm9p
ZCB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1zdGF0aWMgdm9p
ZCB5eV9pbml0X2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIsRklMRSAqZmlsZSAseXlzY2FuX3Qg
eXlzY2FubmVyICk7Ci0KLSNkZWZpbmUgWVlfRkxVU0hfQlVGRkVSIHl5X2ZsdXNoX2J1ZmZlcihZ
WV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyKQotCi1ZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9i
dWZmZXIgKGNoYXIgKmJhc2UseXlfc2l6ZV90IHNpemUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwot
WVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKnl5X3N0ciAseXlz
Y2FuX3QgeXlzY2FubmVyICk7Ci1ZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAoeXljb25z
dCBjaGFyICpieXRlcyx5eV9zaXplX3QgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9p
ZCAqeXlhbGxvYyAoeXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgKnl5cmVh
bGxvYyAodm9pZCAqLHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHl5ZnJl
ZSAodm9pZCAqICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotI2RlZmluZSB5eV9uZXdfYnVmZmVy
IHl5X2NyZWF0ZV9idWZmZXIKLQotI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNfaW50ZXJh
Y3RpdmUpIFwKLQl7IFwKLQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAotICAgICAgICB5
eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKLQkJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFID0gICAgXAotICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9T
SVpFICx5eXNjYW5uZXIpOyBcCi0JfSBcCi0JWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9p
c19pbnRlcmFjdGl2ZSA9IGlzX2ludGVyYWN0aXZlOyBcCi0JfQotCi0jZGVmaW5lIHl5X3NldF9i
b2woYXRfYm9sKSBcCi0JeyBcCi0JaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7XAotICAgICAg
ICB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKLQkJWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFID0gICAgXAotICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JV
Rl9TSVpFICx5eXNjYW5uZXIpOyBcCi0JfSBcCi0JWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9hdF9ib2wgPSBhdF9ib2w7IFwKLQl9Ci0KLSNkZWZpbmUgWVlfQVRfQk9MKCkgKFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sKQotCi0vKiBCZWdpbiB1c2VyIHNlY3QzICovCi0K
LSNkZWZpbmUgeXl3cmFwKG4pIDEKLSNkZWZpbmUgWVlfU0tJUF9ZWVdSQVAKLQotdHlwZWRlZiB1
bnNpZ25lZCBjaGFyIFlZX0NIQVI7Ci0KLXR5cGVkZWYgaW50IHl5X3N0YXRlX3R5cGU7Ci0KLSNk
ZWZpbmUgeXl0ZXh0X3B0ciB5eXRleHRfcgotCi1zdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRf
cHJldmlvdXNfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotc3RhdGljIHl5X3N0YXRlX3R5
cGUgeXlfdHJ5X05VTF90cmFucyAoeXlfc3RhdGVfdHlwZSBjdXJyZW50X3N0YXRlICAseXlzY2Fu
X3QgeXlzY2FubmVyKTsKLXN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKLXN0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIgbXNn
W10gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi0vKiBEb25lIGFmdGVyIHRoZSBjdXJyZW50IHBh
dHRlcm4gaGFzIGJlZW4gbWF0Y2hlZCBhbmQgYmVmb3JlIHRoZQotICogY29ycmVzcG9uZGluZyBh
Y3Rpb24gLSBzZXRzIHVwIHl5dGV4dC4KLSAqLwotI2RlZmluZSBZWV9ET19CRUZPUkVfQUNUSU9O
IFwKLQl5eWctPnl5dGV4dF9wdHIgPSB5eV9icDsgXAotCXl5bGVuZyA9ICh5eV9zaXplX3QpICh5
eV9jcCAtIHl5X2JwKTsgXAotCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2NwOyBcCi0JKnl5X2Nw
ID0gJ1wwJzsgXAotCXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwOwotCi0jZGVmaW5lIFlZX05VTV9S
VUxFUyAxNDcKLSNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUiAxNDgKLS8qIFRoaXMgc3RydWN0IGlz
IG5vdCB1c2VkIGluIHRoaXMgc2Nhbm5lciwKLSAgIGJ1dCBpdHMgcHJlc2VuY2UgaXMgbmVjZXNz
YXJ5LiAqLwotc3RydWN0IHl5X3RyYW5zX2luZm8KLQl7Ci0JZmxleF9pbnQzMl90IHl5X3Zlcmlm
eTsKLQlmbGV4X2ludDMyX3QgeXlfbnh0OwotCX07Ci1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2
X3QgeXlfYWNjZXB0WzQ0M10gPQotICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAgMTQ4LCAg
MTQ2LCAgMTQ1LCAgMTQ1LCAgMTMyLCAgMTM4LCAgMTQzLCAgMTI3LAotICAgICAgMTI4LCAgMTM2
LCAgMTM1LCAgMTI0LCAgMTMzLCAgMTMxLCAgMTM3LCAgIDk2LCAgIDk2LCAgMTI1LAotICAgICAg
MTIxLCAgMTM5LCAgMTI2LCAgMTQwLCAgMTQ0LCAgIDkzLCAgMTI5LCAgMTMwLCAgMTQyLCAgIDkz
LAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAg
IDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLCAgIDkzLCAgMTIyLAotICAgICAgMTQxLCAgMTIzLCAgMTM0LCAgMTE4LCAgMTA0LCAg
MTIzLCAgMTEyLCAgMTA3LCAgMTAyLCAgMTEwLAotICAgICAgMTAwLCAgMTExLCAgMTAxLCAgIDk5
LCAgMTAzLCAgIDk4LCAgIDk1LCAgIDk2LCAgICAwLCAgICAwLAotICAgICAgMTMwLCAgMTIyLCAg
MTI5LCAgMTE5LCAgMTE1LCAgMTE3LCAgMTE2LCAgMTIwLCAgIDkzLCAgMTA4LAotICAgICAgMTE0
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAot
ICAgICAgIDkzLCAgIDEyLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLAotCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgMTUsICAgMTcs
ICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAxMDksICAxMTMsICAgIDAsICAgOTgsICAgIDAsICAgIDAsCi0gICAgICAgOTcs
ICAgOTQsICAxMDUsICAxMDYsICAgNDUsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0g
ICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgMTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgMjEsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgMTgsICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0KLSAgICAgICA5Mywg
ICA5MywgICA5MywgICA5MywgICA5MywgICAgMCwgICA5OSwgICAgMCwgICA5OCwgICA5MywKLSAg
ICAgICAyMywgICA5MywgICA5MywgICA5MCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5Mywg
ICA5MywKLSAgICAgICA5MywgICAxNiwgICA0OCwgICA5MywgICA5MywgICA5MywgICA2NCwgICA5
MywgICA5MywgICA1MywKLSAgICAgICA2OCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5Mywg
ICA5MywgICA5MywgICA5MywgICA2NSwKLSAgICAgICAgNCwgICAyOCwgICAyOSwgICAzMCwgICA5
MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICA5Mywg
ICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA1MSwgICAy
NCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICAzMSwgICAzMiwKLSAgICAg
ICAzMywgICAyMiwgICA5MywgICA5MywgICA5MywgICAxMCwgICAzNywgICAzOCwgICAzOSwgICA0
NiwKLSAgICAgICAgNywgICA5MywgICA5MywgICA5MywgICA5MywgICA3NywgICA3OCwgICA3OSwg
ICA5MywgICAyNSwKLSAgICAgICA2OSwgICAyMCwgICA4MCwgICA4MSwgICA4MiwgICAgMiwgICA3
NCwgICA3NSwgICA3NiwgICA5MywKLQotICAgICAgIDE5LCAgIDcyLCAgIDkzLCAgIDkzLCAgIDM0
LCAgIDM1LCAgIDM2LCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAg
IDkzLCAgIDkzLCAgIDkzLCAgIDY2LCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDQ3LCAgIDkzLCAgIDkyLCAgIDkzLCAgIDkzLAotICAgICAg
IDE0LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDY3LCAgIDYxLCAgIDU2LCAgIDkzLCAgIDkz
LAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDczLCAgIDUyLCAgIDkzLCAgIDU5LCAgIDI3LCAg
IDkzLCAgIDg5LAotICAgICAgIDYwLCAgIDQ0LCAgIDcxLCAgIDU0LCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDU1LCAgIDI2LCAgIDkzLCAg
IDkzLCAgIDkzLCAgICAzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDQ5
LCAgICA4LCAgIDkzLCAgICA5LCAgIDkzLCAgIDkzLCAgIDExLAotICAgICAgIDYyLCAgIDkzLCAg
IDkzLCAgIDkzLCAgIDU3LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkz
LCAgIDUwLCAgIDcwLCAgIDU4LCAgICA2LCAgIDYzLCAgICAxLCAgIDkxLCAgICA1LCAgIDgzLAot
Ci0gICAgICAgNDAsICAgODQsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgNDEsICAgOTMsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgNDMsICAgOTMsICAgODcsICAg
OTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgODUsICAgOTMsICAgODYsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgNDIsCi0gICAgICAgODgsICAgIDAKLSAg
ICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQotICAgIHsg
ICAwLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAyLCAgICAzLAotICAgICAgICAyLCAgICAyLCAgICAyLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAyLCAgICA0LCAg
ICAxLCAgICAxLCAgICAxLCAgICA1LCAgICA2LCAgICAxLCAgICA3LAotICAgICAgICA4LCAgICA5
LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1LCAgIDE2LCAgIDE3LAotICAgICAg
IDE4LCAgIDE5LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIxLCAgIDIxLCAgIDIyLCAgIDIzLCAgIDI0
LAotICAgICAgIDI1LCAgIDI2LCAgIDI3LCAgICAxLCAgIDI4LCAgIDI4LCAgIDI5LCAgIDMwLCAg
IDMxLCAgIDI4LAotICAgICAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMy
LCAgIDMyLCAgIDMzLCAgIDMyLAotICAgICAgIDMyLCAgIDM0LCAgIDM1LCAgIDMyLCAgIDMyLCAg
IDMyLCAgIDMyLCAgIDM2LCAgIDMyLCAgIDMyLAotICAgICAgIDM3LCAgICAxLCAgIDM4LCAgIDM5
LCAgIDMyLCAgICAxLCAgIDQwLCAgIDQxLCAgIDQyLCAgIDQzLAotCi0gICAgICAgNDQsICAgNDUs
ICAgNDYsICAgNDcsICAgNDgsICAgMzIsICAgNDksICAgNTAsICAgNTEsICAgNTIsCi0gICAgICAg
NTMsICAgNTQsICAgMzIsICAgNTUsICAgNTYsICAgNTcsICAgNTgsICAgNTksICAgNjAsICAgNjEs
Ci0gICAgICAgNjIsICAgNjMsICAgNjQsICAgNjUsICAgNjYsICAgNjcsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0g
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsCi0KLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMQotICAgIH0gOwotCi1zdGF0
aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfbWV0YVs2OF0gPQotICAgIHsgICAwLAotICAgICAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAg
ICAyLCAgICAyLAotICAgICAgICAyLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAyLCAgICAyLCAgICAyLAotICAgICAgICAyLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAg
ICAzLCAgICAxLCAgICAxLCAgICAxLCAgICAyLAotICAgICAgICAyLCAgICAyLCAgICAyLCAgICAy
LCAgICAyLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLAotICAgICAgICAzLCAgICAzLCAg
ICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLAotICAgICAgICAz
LCAgICAzLCAgICAzLCAgICAxLCAgICAxLCAgICAxLCAgICAxCi0gICAgfSA7Ci0KLXN0YXRpYyB5
eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzQ0NV0gPQotICAgIHsgICAwLAotICAgICAgICAw
LCAgICAwLCAgNTg3LCAgNTg4LCAgNTg4LCAgNTg4LCAgNTYxLCAgIDQzLCAgIDY0LCAgNTg4LAot
ICAgICAgNTg4LCAgNTYwLCAgIDYxLCAgNTg4LCAgIDYwLCAgIDU4LCAgNTU5LCAgIDc3LCAgIDg2
LCAgNTU3LAotICAgICAgNTg4LCAgMTA0LCAgNTU3LCAgIDU1LCAgNTg4LCAgICAwLCAgNTg4LCAg
NTg4LCAgIDc1LCAgIDI2LAotICAgICAgIDU3LCAgIDgyLCAgIDgzLCAgIDczLCAgIDkzLCAgNTI4
LCAgIDk3LCAgIDk1LCAgNTI3LCAgIDQ0LAotICAgICAgIDcxLCAgNTIxLCAgMTA0LCAgNTM0LCAg
MTEwLCAgMTE2LCAgIDM1LCAgMTExLCAgNTMwLCAgNTg4LAotICAgICAgMTE0LCAgNTg4LCAgNTg4
LCAgNTg4LCAgNTg4LCAgNTg4LCAgNTg4LCAgNTg4LCAgNTg4LCAgNTg4LAotICAgICAgNTg4LCAg
NTg4LCAgNTg4LCAgMTY1LCAgNTg4LCAgMTcyLCAgMjAyLCAgMjExLCAgMjMzLCAgICAwLAotICAg
ICAgNTg4LCAgNTg4LCAgNTg4LCAgNTUxLCAgNTg4LCAgNTg4LCAgNTg4LCAgNTUwLCAgICAwLCAg
NTg4LAotICAgICAgNTg4LCAgNTIzLCAgNTE2LCAgNTE5LCAgNTI3LCAgNTI2LCAgNTEzLCAgNTI4
LCAgNTE1LCAgNTIxLAotICAgICAgNTA5LCAgNTA2LCAgNTE5LCAgNTA2LCAgNTAzLCAgNTAzLCAg
NTA5LCAgNDk3LCAgMTA4LCAgNTAyLAotCi0gICAgICA1MTIsICA0OTgsICA1MDQsICA1MDcsICA1
MDgsICAgIDAsICAxNDUsICA1MDcsICAxMTMsICA0OTMsCi0gICAgICA1MDYsICA0OTcsICA0OTks
ICA0ODksICA1MDMsICA1MDAsICA1MDIsICA0ODUsICA0OTAsICA0ODcsCi0gICAgICA0NzYsICAx
NTcsICA0ODQsICA0ODksICA0ODUsICA0ODcsICA0NzYsICA0NzksICAxMTgsICA0ODQsCi0gICAg
ICA0NzYsICA0ODgsICAgNzAsICA0ODEsICA1ODgsICA1ODgsICAyNDYsICAyNTMsICAyNzAsICAy
MTksCi0gICAgICAyODMsICAgIDAsICA1ODgsICA1ODgsICAgIDAsICA0NzMsICA0NzcsICA0ODYs
ICA0ODMsICA0NjcsCi0gICAgICA0NjcsICAxMTksICA0ODIsICA0NzksICA0NzksICA0NzcsICA0
NzQsICA0NjYsICA0NzIsICA0NTksCi0gICAgICA0NzAsICA0NTYsICA0NzIsICAgIDAsICA0Njks
ICA0NTcsICA0NjQsICA0NjEsICA0NjUsICA0NTgsCi0gICAgICA0NDcsICA0NDYsICA0NTksICA0
NjIsICA0NTksICA0NTQsICA0NDUsICAxODgsICA0NTAsICA0NTMsCi0gICAgICA0NDQsICA0NDEs
ICA0NDUsICA0NTEsICA0NDIsICA0MzMsICA0MzYsICA0MzQsICA0NDQsICA0MzAsCi0gICAgICA0
MjgsICA0NDEsICA0MjcsICA0MjksICA0MjYsICA0MzcsICA0MzYsICAxMjQsICA0MzEsICA0MjYs
Ci0KLSAgICAgIDQxNSwgIDI1OCwgIDQzMywgIDQzNSwgIDQyNCwgIDI5MCwgIDI5NywgIDMwNCwg
IDMxMSwgIDQyNSwKLSAgICAgICAgMCwgIDQyMywgIDI3NSwgICAgMCwgIDQxNSwgIDQxMywgIDQy
MSwgIDQxMCwgIDQyNywgIDQxNiwKLSAgICAgIDMxNiwgICAgMCwgICAgMCwgIDQxMCwgIDQyMCwg
IDQyMCwgICAgMCwgIDQwNSwgIDMxOSwgICAgMCwKLSAgICAgICAgMCwgIDQwNywgIDMyMiwgIDQw
OCwgIDQwMiwgIDQwMSwgIDQwMiwgIDQwMSwgIDMyNSwgICAgMCwKLSAgICAgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwgIDM5NywgIDM5OCwgIDQwMywgIDM5NCwgIDQwNywgIDQwMiwKLSAgICAgIDQw
MSwgIDM5MywgIDM5NywgIDM4OSwgIDM5MiwgIDM5NiwgIDQwMSwgIDM4NywgIDM5OSwgIDM5MCwK
LSAgICAgICAgMCwgICAgMCwgIDM5NiwgIDM4NSwgIDM4NSwgIDM5MCwgIDM4OSwgIDM4NiwgICAg
MCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgIDM3NiwgIDM4OCwgIDM5MCwgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgIDM3OCwgIDM3OSwgIDM3MywgIDM4MywgICAg
MCwgICAgMCwgICAgMCwgIDM3NCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDM4MSwKLQotICAgICAgICAwLCAgICAwLCAg
Mzc5LCAgMzc1LCAgICAwLCAgICAwLCAgICAwLCAgMzcxLCAgMzY3LCAgMzcyLAotICAgICAgMzYy
LCAgMzc1LCAgMzYxLCAgMzc0LCAgMzYzLCAgMzcwLCAgICAwLCAgMzY4LCAgMzcwLCAgMzU0LAot
ICAgICAgMzU2LCAgMzYyLCAgMzY4LCAgMzYzLCAgMzUxLCAgICAwLCAgMzUzLCAgICAwLCAgMzUy
LCAgMzU1LAotICAgICAgICAwLCAgMzQ0LCAgMzQzLCAgMzQzLCAgMzU2LCAgICAwLCAgMzU4LCAg
ICAwLCAgMzU3LCAgMzU2LAotICAgICAgMzQxLCAgMzU0LCAgMzQxLCAgICAwLCAgICAwLCAgMzQ0
LCAgICAwLCAgICAwLCAgMzM2LCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
MzMzLCAgMzQ0LCAgMzM3LCAgMzQzLCAgMzQwLCAgMzM1LAotICAgICAgMzI3LCAgMzM5LCAgICAw
LCAgICAwLCAgMzMyLCAgMzM5LCAgMzI4LCAgICAwLCAgMzM3LCAgMzM0LAotICAgICAgMzI0LCAg
MzI5LCAgMzMyLCAgICAwLCAgICAwLCAgMzMyLCAgICAwLCAgMzMwLCAgMzI5LCAgICAwLAotICAg
ICAgICAwLCAgMzI4LCAgMzE0LCAgMzI2LCAgICAwLCAgMzE3LCAgMzM4LCAgMzM3LCAgMzM2LCAg
MzA3LAotICAgICAgMzAzLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgMzI4LAotCi0gICAgICAxNjYsICAzMjUsICAzMTYsICAyOTksICAzMDgsICAzMTAs
ICAzMDYsICAzMDgsICAzMDcsICAzMDYsCi0gICAgICAzMDksICAzMDYsICAyNTYsICAyNTMsICAg
IDAsICAyMjgsICAyMzgsICAyMjIsICAyMzUsICAyMDMsCi0gICAgICAyMDcsICAyMDQsICAyMTIs
ICAxOTEsICAgIDAsICAyMDEsICAxNjUsICAxNjcsICAxNTMsICAxNjEsCi0gICAgICAgIDAsICAx
NzAsICAgIDAsICAxNzUsICAxNTEsICAxNDEsICAxMDAsICAxMTQsICAgNTksICAgIDAsCi0gICAg
ICAgIDAsICA1ODgsICAzNTksICAxMTMKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQxNl90IHl5X2RlZls0NDVdID0KLSAgICB7ICAgMCwKLSAgICAgIDQ0MiwgICAgMSwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MywgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0NCwKLSAgICAgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MywgIDQ0MiwKLSAgICAgIDQ0
MiwgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywK
LSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywKLQotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQy
LCAgNDQ0LCAgNDQyLCAgNDQyLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAot
ICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotCi0gICAgICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDMsCi0g
ICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAg
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsCi0KLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywK
LQotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgICAwLCAg
NDQyLCAgNDQyCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRb
NjU2XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDQsICAgIDUsICAgIDYsICAgIDcsICAgIDgsICAg
IDksICAgMTAsICAgMTEsICAgMTIsICAgMTMsCi0gICAgICAgMTQsICAgMTUsICAgMTYsICAgMTcs
ICAgMTgsICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksCi0gICAgICAgMTksICAgMjAsICAg
MjEsICAgMjIsICAgMjMsICAgMjQsICAgMjUsICAgMjYsICAgMjYsICAgMjYsCi0gICAgICAgMjYs
ICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjcsICAgMjgsICAgMjksICAgMzAsCi0g
ICAgICAgMzEsICAgMzIsICAgMzMsICAgMzQsICAgMzUsICAgMzYsICAgMzcsICAgMzgsICAgMjYs
ICAgMzksCi0gICAgICAgNDAsICAgNDEsICAgNDIsICAgNDMsICAgNDQsICAgNDUsICAgNDYsICAg
NDcsICAgNDgsICAgNDksCi0gICAgICAgMjYsICAgMjYsICAgMjYsICAgNTAsICAgNTEsICAgNTIs
ICAgNTMsICAgNTUsICAgNTYsICAgNTcsCi0gICAgICAgNjAsICAgNjIsICAgNjQsICAgNjQsICAg
NjQsICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNzcsCi0gICAgICAgNzgsICAgODIsICAgODMs
ICAxMTAsICAgNjMsICAgNjEsICAxMjksICAxMTEsICAgNTgsICAgNjYsCi0gICAgICAxMzAsICAg
NjcsICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAgNjgsICAgNjYsICAgODAsCi0KLSAg
ICAgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OSwgICA3Miwg
ICA4NCwKLSAgICAgIDExMiwgICA4NSwgICA3MCwgICA4MSwgIDE0MiwgICA4NiwgICA2OSwgIDIw
MywgIDQ0MSwgIDIwNCwKLSAgICAgICA2OSwgICA4NywgICA5NCwgIDExMywgICA5NSwgICA3Mywg
ICA5MCwgICA3NCwgICA3NSwgICA2OSwKLSAgICAgICA5MSwgICA4OCwgICA5NywgICA5NiwgICA4
OSwgICA5MiwgIDEwMywgICA3MCwgIDEzNSwgIDEwNiwKLSAgICAgICA5OCwgICA5MywgICA5OSwg
IDExNSwgIDEwNCwgIDEwMCwgIDEwNywgIDE2MiwgIDQ0MCwgIDExOSwKLSAgICAgIDEzMSwgIDEw
MSwgIDQzOSwgIDEwOCwgIDEzMiwgIDEwNSwgIDEyMCwgIDEyMSwgIDExNiwgIDEyNSwKLSAgICAg
IDE2MywgIDExNywgIDEyNiwgIDEzMywgIDE3NiwgIDE5OCwgIDEyMiwgIDEyMywgIDI2NCwgIDEy
NCwKLSAgICAgIDEyNywgIDQzOCwgIDE3NywgIDE5OSwgIDIxNiwgIDIxNywgIDI2NSwgIDEyOCwg
IDEzNiwgICA2NCwKLSAgICAgICA2NCwgICA2NCwgICA2NCwgICA2NCwgICA2NCwgICA2NCwgIDEz
OCwgIDEzOCwgIDEzOCwgIDEzOCwKLSAgICAgIDEzOCwgIDEzOCwgIDEzOCwgIDQzNywgIDE3MCwg
IDEzNywgIDE5MCwgIDE3MSwgIDE3MiwgIDQwNiwKLQotICAgICAgNDA3LCAgMTczLCAgMTM5LCAg
MTc0LCAgMjQyLCAgMjQzLCAgMjQ0LCAgNDM2LCAgMTM3LCAgNDM1LAotICAgICAgNDM0LCAgMTkx
LCAgNDMzLCAgNDMyLCAgIDY2LCAgMTM5LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LAotICAgICAg
IDY3LCAgIDY3LCAgIDY4LCAgIDY2LCAgNDMxLCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4
LAotICAgICAgIDY4LCAgIDY4LCAgIDY5LCAgMTQxLCAgMTQxLCAgMTQxLCAgMTQxLCAgMTQxLCAg
MTQxLCAgMTQxLAotICAgICAgNDMwLCAgIDY5LCAgMTQwLCAgNDI5LCAgMTQwLCAgIDY5LCAgNDI4
LCAgMTQxLCAgMTQxLCAgMTQxLAotICAgICAgMTQxLCAgMTQxLCAgMTQxLCAgMTQxLCAgIDY5LCAg
MjA2LCAgNDI3LCAgMjA2LCAgNDI2LCAgNDI1LAotICAgICAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3
LCAgMjA3LCAgMjA3LCAgMjA3LCAgMTM4LCAgMTM4LCAgMTM4LAotICAgICAgMTM4LCAgMTM4LCAg
MTM4LCAgMTM4LCAgMjY5LCAgMjcwLCAgMjcxLCAgNDI0LCAgNDIzLCAgMjA4LAotICAgICAgNDIy
LCAgMjA4LCAgNDIxLCAgMTM5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LAot
ICAgICAgMjA5LCAgMjc3LCAgMjc4LCAgMjc5LCAgNDIwLCAgNDE5LCAgMTM5LCAgMTQxLCAgMTQx
LCAgMTQxLAotCi0gICAgICAxNDEsICAxNDEsICAxNDEsICAxNDEsICAyMDcsICAyMDcsICAyMDcs
ICAyMDcsICAyMDcsICAyMDcsCi0gICAgICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAy
MDcsICAyMDcsICAyMDcsICAyMDksICAyMDksCi0gICAgICAyMDksICAyMDksICAyMDksICAyMDks
ICAyMDksICAyMDksICAyMDksICAyMDksICAyMDksICAyMDksCi0gICAgICAyMDksICAyMDksICAy
ODYsICAyODcsICAyODgsICAyOTMsICAyOTQsICAyOTUsICAyOTcsICAyOTgsCi0gICAgICAyOTks
ICAzMDUsICAzMDYsICAzMDcsICAzODcsICAzODgsICAzODksICA0MTgsICA0MTcsICA0MTYsCi0g
ICAgICA0MTUsICA0MTQsICA0MTMsICA0MTIsICA0MTEsICA0MTAsICA0MDksICAzOTAsICA0MDgs
ICAzOTEsCi0gICAgICAgNzksICAgNzksICA0MDUsICA0MDQsICA0MDMsICA0MDIsICA0MDEsICA0
MDAsICAzOTksICAzOTgsCi0gICAgICAzOTcsICAzOTYsICAzOTUsICAzOTQsICAzOTMsICAzOTIs
ICAzODYsICAzODUsICAzODQsICAzODMsCi0gICAgICAzODIsICAzODEsICAzODAsICAzNzksICAz
NzgsICAzNzcsICAzNzYsICAzNzUsICAzNzQsICAzNzMsCi0gICAgICAzNzIsICAzNzEsICAzNzAs
ICAzNjksICAzNjgsICAzNjcsICAzNjYsICAzNjUsICAzNjQsICAzNjMsCi0KLSAgICAgIDM2Miwg
IDM2MSwgIDM2MCwgIDM1OSwgIDM1OCwgIDM1NywgIDM1NiwgIDM1NSwgIDM1NCwgIDM1MywKLSAg
ICAgIDM1MiwgIDM1MSwgIDM1MCwgIDM0OSwgIDM0OCwgIDM0NywgIDM0NiwgIDM0NSwgIDM0NCwg
IDM0MywKLSAgICAgIDM0MiwgIDM0MSwgIDM0MCwgIDMzOSwgIDMzOCwgIDMzNywgIDMzNiwgIDMz
NSwgIDMzNCwgIDMzMywKLSAgICAgIDMzMiwgIDMzMSwgIDMzMCwgIDMyOSwgIDMyOCwgIDMyNywg
IDMyNiwgIDMyNSwgIDMyNCwgIDMyMywKLSAgICAgIDMyMiwgIDMyMSwgIDMyMCwgIDMxOSwgIDMx
OCwgIDMxNywgIDMxNiwgIDMxNSwgIDMxNCwgIDMxMywKLSAgICAgIDMxMiwgIDMxMSwgIDMxMCwg
IDMwOSwgIDMwOCwgIDMwNCwgIDMwMywgIDMwMiwgIDMwMSwgIDMwMCwKLSAgICAgIDI5NiwgIDI5
MiwgIDI5MSwgIDI5MCwgIDI4OSwgIDI4NSwgIDI4NCwgIDI4MywgIDI4MiwgIDI4MSwKLSAgICAg
IDI4MCwgIDI3NiwgIDI3NSwgIDI3NCwgIDI3MywgIDI3MiwgIDI2OCwgIDI2NywgIDI2NiwgIDI2
MywKLSAgICAgIDI2MiwgIDI2MSwgIDI2MCwgIDI1OSwgIDI1OCwgIDI1NywgIDI1NiwgIDI1NSwg
IDI1NCwgIDI1MywKLSAgICAgIDI1MiwgIDI1MSwgIDI1MCwgIDI0OSwgIDI0OCwgIDI0NywgIDI0
NiwgIDI0NSwgIDI0MSwgIDI0MCwKLQotICAgICAgMjM5LCAgMjM4LCAgMjM3LCAgMjM2LCAgMjM1
LCAgMjM0LCAgMjMzLCAgMjMyLCAgMjMxLCAgMjMwLAotICAgICAgMjI5LCAgMjI4LCAgMjI3LCAg
MjI2LCAgMjI1LCAgMjI0LCAgMjIzLCAgMjIyLCAgMjIxLCAgMjIwLAotICAgICAgMjE5LCAgMjE4
LCAgMjE1LCAgMjE0LCAgMjEzLCAgMjEyLCAgMjExLCAgMjEwLCAgMjA1LCAgMjAyLAotICAgICAg
MjAxLCAgMjAwLCAgMTk3LCAgMTk2LCAgMTk1LCAgMTk0LCAgMTkzLCAgMTkyLCAgMTg5LCAgMTg4
LAotICAgICAgMTg3LCAgMTg2LCAgMTg1LCAgMTg0LCAgMTgzLCAgMTgyLCAgMTgxLCAgMTgwLCAg
MTc5LCAgMTc4LAotICAgICAgMTc1LCAgMTY5LCAgMTY4LCAgMTY3LCAgMTY2LCAgMTY1LCAgMTY0
LCAgMTYxLCAgMTYwLCAgMTU5LAotICAgICAgMTU4LCAgMTU3LCAgMTU2LCAgMTU1LCAgMTU0LCAg
MTUzLCAgMTUyLCAgMTUxLCAgMTUwLCAgMTQ5LAotICAgICAgMTQ4LCAgMTQ3LCAgMTQ2LCAgMTQ1
LCAgMTQ0LCAgMTQzLCAgMTM0LCAgMTE4LCAgMTE0LCAgMTA5LAotICAgICAgMTAyLCAgIDc2LCAg
IDcxLCAgIDY1LCAgIDU5LCAgIDU0LCAgNDQyLCAgICAzLCAgNDQyLCAgNDQyLAotICAgICAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAot
Ci0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0
NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQxNl90IHl5X2Noa1s2NTZdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgOCwgICAgOCwgICAgOSwKLSAgICAgICAxMywgICAxNSwg
ICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAyNCwKLSAgICAgICAy
NCwgICAzMCwgICAzMCwgICA0MCwgICAxNSwgICAxMywgICA0NywgICA0MCwgICAgOSwgICAxOCwK
LSAgICAgICA0NywgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAx
OSwgICAyOSwKLQotICAgICAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5
LCAgIDE4LCAgIDIyLCAgIDMxLAotICAgICAgIDQxLCAgIDMxLCAgIDE4LCAgIDI5LCAgNDQ0LCAg
IDMxLCAgIDE5LCAgMTMzLCAgNDM5LCAgMTMzLAotICAgICAgIDE4LCAgIDMyLCAgIDM0LCAgIDQx
LCAgIDM0LCAgIDIyLCAgIDMzLCAgIDIyLCAgIDIyLCAgIDE5LAotICAgICAgIDMzLCAgIDMyLCAg
IDM1LCAgIDM0LCAgIDMyLCAgIDMzLCAgIDM3LCAgIDE4LCAgIDUxLCAgIDM4LAotICAgICAgIDM1
LCAgIDMzLCAgIDM1LCAgIDQzLCAgIDM3LCAgIDM1LCAgIDM4LCAgIDk5LCAgNDM4LCAgIDQ1LAot
ICAgICAgIDQ4LCAgIDM1LCAgNDM3LCAgIDM4LCAgIDQ4LCAgIDM3LCAgIDQ1LCAgIDQ1LCAgIDQz
LCAgIDQ2LAotICAgICAgIDk5LCAgIDQzLCAgIDQ2LCAgIDQ4LCAgMTA5LCAgMTI5LCAgIDQ1LCAg
IDQ1LCAgMTk4LCAgIDQ1LAotICAgICAgIDQ2LCAgNDM2LCAgMTA5LCAgMTI5LCAgMTUyLCAgMTUy
LCAgMTk4LCAgIDQ2LCAgIDUxLCAgIDY0LAotICAgICAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAg
IDY0LCAgIDY0LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LAotICAgICAgIDY2LCAgIDY2LCAgIDY2
LCAgNDM1LCAgMTA3LCAgIDY0LCAgMTIyLCAgMTA3LCAgMTA3LCAgNDAxLAotCi0gICAgICA0MDEs
ICAxMDcsICAgNjYsICAxMDcsICAxNzgsICAxNzgsICAxNzgsICA0MzQsICAgNjQsICA0MzIsCi0g
ICAgICA0MzAsICAxMjIsICA0MjksICA0MjgsICAgNjcsICAgNjYsICAgNjcsICAgNjcsICAgNjcs
ICAgNjcsCi0gICAgICAgNjcsICAgNjcsICAgNjcsICAgNjgsICA0MjcsICAgNjgsICAgNjgsICAg
NjgsICAgNjgsICAgNjgsCi0gICAgICAgNjgsICAgNjgsICAgNjcsICAxNDAsICAxNDAsICAxNDAs
ICAxNDAsICAxNDAsICAxNDAsICAxNDAsCi0gICAgICA0MjYsICAgNjgsICAgNjksICA0MjQsICAg
NjksICAgNjcsICA0MjMsICAgNjksICAgNjksICAgNjksCi0gICAgICAgNjksICAgNjksICAgNjks
ICAgNjksICAgNjgsICAxMzcsICA0MjIsICAxMzcsICA0MjEsICA0MjAsCi0gICAgICAxMzcsICAx
MzcsICAxMzcsICAxMzcsICAxMzcsICAxMzcsICAxMzcsICAxMzgsICAxMzgsICAxMzgsCi0gICAg
ICAxMzgsICAxMzgsICAxMzgsICAxMzgsICAyMDIsICAyMDIsICAyMDIsICA0MTksICA0MTgsICAx
MzksCi0gICAgICA0MTcsICAxMzksICA0MTYsICAxMzgsICAxMzksICAxMzksICAxMzksICAxMzks
ICAxMzksICAxMzksCi0gICAgICAxMzksICAyMTMsICAyMTMsICAyMTMsICA0MTQsICA0MTMsICAx
MzgsICAxNDEsICAxNDEsICAxNDEsCi0KLSAgICAgIDE0MSwgIDE0MSwgIDE0MSwgIDE0MSwgIDIw
NiwgIDIwNiwgIDIwNiwgIDIwNiwgIDIwNiwgIDIwNiwKLSAgICAgIDIwNiwgIDIwNywgIDIwNywg
IDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwOCwgIDIwOCwKLSAgICAgIDIwOCwgIDIw
OCwgIDIwOCwgIDIwOCwgIDIwOCwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwKLSAgICAg
IDIwOSwgIDIwOSwgIDIyMSwgIDIyMSwgIDIyMSwgIDIyOSwgIDIyOSwgIDIyOSwgIDIzMywgIDIz
MywKLSAgICAgIDIzMywgIDIzOSwgIDIzOSwgIDIzOSwgIDM3MiwgIDM3MiwgIDM3MiwgIDQxMiwg
IDQxMSwgIDQxMCwKLSAgICAgIDQwOSwgIDQwOCwgIDQwNywgIDQwNiwgIDQwNSwgIDQwNCwgIDQw
MywgIDM3MiwgIDQwMiwgIDM3MiwKLSAgICAgIDQ0MywgIDQ0MywgIDQwMCwgIDM5MSwgIDM5MCwg
IDM4OSwgIDM4OCwgIDM4NywgIDM4NiwgIDM4NCwKLSAgICAgIDM4MywgIDM4MiwgIDM3OSwgIDM3
OCwgIDM3NiwgIDM3MywgIDM3MSwgIDM3MCwgIDM2OSwgIDM2NywKLSAgICAgIDM2NiwgIDM2NSwg
IDM2MiwgIDM2MSwgIDM2MCwgIDM1OSwgIDM1OCwgIDM1NywgIDM1NiwgIDM1NSwKLSAgICAgIDM0
OSwgIDM0NiwgIDM0MywgIDM0MiwgIDM0MSwgIDM0MCwgIDMzOSwgIDMzNywgIDMzNSwgIDMzNCwK
LQotICAgICAgMzMzLCAgMzMyLCAgMzMwLCAgMzI5LCAgMzI3LCAgMzI1LCAgMzI0LCAgMzIzLCAg
MzIyLCAgMzIxLAotICAgICAgMzIwLCAgMzE5LCAgMzE4LCAgMzE2LCAgMzE1LCAgMzE0LCAgMzEz
LCAgMzEyLCAgMzExLCAgMzEwLAotICAgICAgMzA5LCAgMzA4LCAgMzA0LCAgMzAzLCAgMzAwLCAg
Mjg5LCAgMjg1LCAgMjg0LCAgMjgzLCAgMjgyLAotICAgICAgMjc1LCAgMjc0LCAgMjczLCAgMjY4
LCAgMjY3LCAgMjY2LCAgMjY1LCAgMjY0LCAgMjYzLCAgMjYwLAotICAgICAgMjU5LCAgMjU4LCAg
MjU3LCAgMjU2LCAgMjU1LCAgMjU0LCAgMjUzLCAgMjUyLCAgMjUxLCAgMjUwLAotICAgICAgMjQ5
LCAgMjQ4LCAgMjQ3LCAgMjQ2LCAgMjQ1LCAgMjM4LCAgMjM3LCAgMjM2LCAgMjM1LCAgMjM0LAot
ICAgICAgMjMyLCAgMjI4LCAgMjI2LCAgMjI1LCAgMjI0LCAgMjIwLCAgMjE5LCAgMjE4LCAgMjE3
LCAgMjE2LAotICAgICAgMjE1LCAgMjEyLCAgMjEwLCAgMjA1LCAgMjA0LCAgMjAzLCAgMjAxLCAg
MjAwLCAgMTk5LCAgMTk3LAotICAgICAgMTk2LCAgMTk1LCAgMTk0LCAgMTkzLCAgMTkyLCAgMTkx
LCAgMTkwLCAgMTg5LCAgMTg4LCAgMTg3LAotICAgICAgMTg2LCAgMTg1LCAgMTg0LCAgMTgzLCAg
MTgyLCAgMTgxLCAgMTgwLCAgMTc5LCAgMTc3LCAgMTc2LAotCi0gICAgICAxNzUsICAxNzQsICAx
NzMsICAxNzIsICAxNzEsICAxNzAsICAxNjksICAxNjgsICAxNjcsICAxNjYsCi0gICAgICAxNjUs
ICAxNjMsICAxNjIsICAxNjEsICAxNjAsICAxNTksICAxNTgsICAxNTcsICAxNTYsICAxNTUsCi0g
ICAgICAxNTQsICAxNTMsICAxNTEsICAxNTAsICAxNDksICAxNDgsICAxNDcsICAxNDYsICAxMzQs
ICAxMzIsCi0gICAgICAxMzEsICAxMzAsICAxMjgsICAxMjcsICAxMjYsICAxMjUsICAxMjQsICAx
MjMsICAxMjEsICAxMjAsCi0gICAgICAxMTksICAxMTgsICAxMTcsICAxMTYsICAxMTUsICAxMTQs
ICAxMTMsICAxMTIsICAxMTEsICAxMTAsCi0gICAgICAxMDgsICAxMDUsICAxMDQsICAxMDMsICAx
MDIsICAxMDEsICAxMDAsICAgOTgsICAgOTcsICAgOTYsCi0gICAgICAgOTUsICAgOTQsICAgOTMs
ICAgOTIsICAgOTEsICAgOTAsICAgODksICAgODgsICAgODcsICAgODYsCi0gICAgICAgODUsICAg
ODQsICAgODMsICAgODIsICAgNzgsICAgNzQsICAgNDksICAgNDQsICAgNDIsICAgMzksCi0gICAg
ICAgMzYsICAgMjMsICAgMjAsICAgMTcsICAgMTIsICAgIDcsICAgIDMsICA0NDIsICA0NDIsICA0
NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsCi0KLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MgotICAgIH0gOwotCi0vKiBUYWJs
ZSBvZiBib29sZWFucywgdHJ1ZSBpZiBydWxlIGNvdWxkIG1hdGNoIGVvbC4gKi8KLXN0YXRpYyB5
eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbMTQ4XSA9Ci0gICAgeyAg
IDAsCi0wLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAgICAgfTsKLQotLyogVGhlIGludGVudCBi
ZWhpbmQgdGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKLSAqIGFueSB1c2VzIG9m
IFJFSkVDVCB3aGljaCBmbGV4IG1pc3NlZC4KLSAqLwotI2RlZmluZSBSRUpFQ1QgcmVqZWN0X3Vz
ZWRfYnV0X25vdF9kZXRlY3RlZAotI2RlZmluZSB5eW1vcmUoKSB5eW1vcmVfdXNlZF9idXRfbm90
X2RldGVjdGVkCi0jZGVmaW5lIFlZX01PUkVfQURKIDAKLSNkZWZpbmUgWVlfUkVTVE9SRV9ZWV9N
T1JFX09GRlNFVAotLyoKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQot
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLVRoaXMgZmlsZSBjb250YWlucyB0
aGUgTGV4IHNwZWNpZmljYXRpb24gZm9yIEdMU0wgRVMuCi1CYXNlZCBvbiBBTlNJIEMgZ3JhbW1h
ciwgTGV4IHNwZWNpZmljYXRpb246Ci1odHRwOi8vd3d3Lmx5c2F0b3IubGl1LnNlL2MvQU5TSS1D
LWdyYW1tYXItbC5odG1sCi0KLUlGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQg
VE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaCwKLVdISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBM
RVhFUiAoZ2xzbGFuZ19sZXguY3BwKS4KLSovCi0KLSNpbmNsdWRlICJjb21waWxlci9nbHNsYW5n
LmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VDb250ZXh0LmgiCi0jaW5jbHVkZSAiY29tcGls
ZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvdXRpbC5oIgotI2lu
Y2x1ZGUgImdsc2xhbmdfdGFiLmgiCi0KLS8qIHdpbmRvd3Mgb25seSBwcmFnbWEgKi8KLSNpZmRl
ZiBfTVNDX1ZFUgotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0MTAyKQotI2VuZGlmCi0KLSNk
ZWZpbmUgWVlfVVNFUl9BQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgeXlsbG9jLT5maXJzdF9maWxlID0geXlsbG9jLT5sYXN0X2ZpbGUgPSB5eWNvbHVtbjsgXAot
ICAgIHl5bGxvYy0+Zmlyc3RfbGluZSA9IHl5bGxvYy0+bGFzdF9saW5lID0geXlsaW5lbm87Ci0K
LSNkZWZpbmUgWVlfSU5QVVQoYnVmLCByZXN1bHQsIG1heF9zaXplKSBcCi0gICAgcmVzdWx0ID0g
c3RyaW5nX2lucHV0KGJ1ZiwgbWF4X3NpemUsIHl5c2Nhbm5lcik7Ci0KLXN0YXRpYyB5eV9zaXpl
X3Qgc3RyaW5nX2lucHV0KGNoYXIqIGJ1ZiwgeXlfc2l6ZV90IG1heF9zaXplLCB5eXNjYW5fdCB5
eXNjYW5uZXIpOwotc3RhdGljIGludCBjaGVja190eXBlKHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci1z
dGF0aWMgaW50IHJlc2VydmVkX3dvcmQoeXlzY2FuX3QgeXlzY2FubmVyKTsKLXN0YXRpYyBpbnQg
aW50X2NvbnN0YW50KHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci1zdGF0aWMgaW50IGZsb2F0X2NvbnN0
YW50KHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0KLSNkZWZpbmUgSU5JVElBTCAwCi0KLSNkZWZpbmUg
WVlfRVhUUkFfVFlQRSBUUGFyc2VDb250ZXh0KgotCi0vKiBIb2xkcyB0aGUgZW50aXJlIHN0YXRl
IG9mIHRoZSByZWVudHJhbnQgc2Nhbm5lci4gKi8KLXN0cnVjdCB5eWd1dHNfdAotICAgIHsKLQot
ICAgIC8qIFVzZXItZGVmaW5lZC4gTm90IHRvdWNoZWQgYnkgZmxleC4gKi8KLSAgICBZWV9FWFRS
QV9UWVBFIHl5ZXh0cmFfcjsKLQotICAgIC8qIFRoZSByZXN0IGFyZSB0aGUgc2FtZSBhcyB0aGUg
Z2xvYmFscyBkZWNsYXJlZCBpbiB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLiAqLwotICAgIEZJ
TEUgKnl5aW5fciwgKnl5b3V0X3I7Ci0gICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja190b3A7IC8q
KjwgaW5kZXggb2YgdG9wIG9mIHN0YWNrLiAqLwotICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tf
bWF4OyAvKio8IGNhcGFjaXR5IG9mIHN0YWNrLiAqLwotICAgIFlZX0JVRkZFUl9TVEFURSAqIHl5
X2J1ZmZlcl9zdGFjazsgLyoqPCBTdGFjayBhcyBhbiBhcnJheS4gKi8KLSAgICBjaGFyIHl5X2hv
bGRfY2hhcjsKLSAgICB5eV9zaXplX3QgeXlfbl9jaGFyczsKLSAgICB5eV9zaXplX3QgeXlsZW5n
X3I7Ci0gICAgY2hhciAqeXlfY19idWZfcDsKLSAgICBpbnQgeXlfaW5pdDsKLSAgICBpbnQgeXlf
c3RhcnQ7Ci0gICAgaW50IHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZjsKLSAgICBpbnQgeXlf
c3RhcnRfc3RhY2tfcHRyOwotICAgIGludCB5eV9zdGFydF9zdGFja19kZXB0aDsKLSAgICBpbnQg
Knl5X3N0YXJ0X3N0YWNrOwotICAgIHl5X3N0YXRlX3R5cGUgeXlfbGFzdF9hY2NlcHRpbmdfc3Rh
dGU7Ci0gICAgY2hhciogeXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLQotICAgIGludCB5eWxpbmVu
b19yOwotICAgIGludCB5eV9mbGV4X2RlYnVnX3I7Ci0KLSAgICBjaGFyICp5eXRleHRfcjsKLSAg
ICBpbnQgeXlfbW9yZV9mbGFnOwotICAgIGludCB5eV9tb3JlX2xlbjsKLQotICAgIFlZU1RZUEUg
KiB5eWx2YWxfcjsKLQotICAgIFlZTFRZUEUgKiB5eWxsb2NfcjsKLQotICAgIH07IC8qIGVuZCBz
dHJ1Y3QgeXlndXRzX3QgKi8KLQotc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHl5c2Nhbl90
IHl5c2Nhbm5lciApOwotCi0gICAgLyogVGhpcyBtdXN0IGdvIGhlcmUgYmVjYXVzZSBZWVNUWVBF
IGFuZCBZWUxUWVBFIGFyZSBpbmNsdWRlZAotICAgICAqIGZyb20gYmlzb24gb3V0cHV0IGluIHNl
Y3Rpb24gMS4qLwotICAgICMgICAgZGVmaW5lIHl5bHZhbCB5eWctPnl5bHZhbF9yCi0gICAgCi0g
ICAgIyAgICBkZWZpbmUgeXlsbG9jIHl5Zy0+eXlsbG9jX3IKLSAgICAKLWludCB5eWxleF9pbml0
ICh5eXNjYW5fdCogc2Nhbm5lcik7Ci0KLWludCB5eWxleF9pbml0X2V4dHJhIChZWV9FWFRSQV9U
WVBFIHVzZXJfZGVmaW5lZCx5eXNjYW5fdCogc2Nhbm5lcik7Ci0KLS8qIEFjY2Vzc29yIG1ldGhv
ZHMgdG8gZ2xvYmFscy4KLSAgIFRoZXNlIGFyZSBtYWRlIHZpc2libGUgdG8gbm9uLXJlZW50cmFu
dCBzY2FubmVycyBmb3IgY29udmVuaWVuY2UuICovCi0KLWludCB5eWxleF9kZXN0cm95ICh5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKLQotaW50IHl5Z2V0X2RlYnVnICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKLQotdm9pZCB5eXNldF9kZWJ1ZyAoaW50IGRlYnVnX2ZsYWcgLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOwotCi1ZWV9FWFRSQV9UWVBFIHl5Z2V0X2V4dHJhICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
LQotdm9pZCB5eXNldF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQgLHl5c2Nhbl90
IHl5c2Nhbm5lciApOwotCi1GSUxFICp5eWdldF9pbiAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0K
LXZvaWQgeXlzZXRfaW4gIChGSUxFICogaW5fc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQot
RklMRSAqeXlnZXRfb3V0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCB5eXNldF9vdXQg
IChGSUxFICogb3V0X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXl5X3NpemVfdCB5eWdl
dF9sZW5nICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotY2hhciAqeXlnZXRfdGV4dCAoeXlzY2Fu
X3QgeXlzY2FubmVyICk7Ci0KLWludCB5eWdldF9saW5lbm8gKHl5c2Nhbl90IHl5c2Nhbm5lciAp
OwotCi12b2lkIHl5c2V0X2xpbmVubyAoaW50IGxpbmVfbnVtYmVyICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKLQotWVlTVFlQRSAqIHl5Z2V0X2x2YWwgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12
b2lkIHl5c2V0X2x2YWwgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0gLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOwotCi0gICAgICAgWVlMVFlQRSAqeXlnZXRfbGxvYyAoeXlzY2FuX3QgeXlzY2FubmVyICk7
Ci0gICAgCi0gICAgICAgIHZvaWQgeXlzZXRfbGxvYyAoWVlMVFlQRSAqIHl5bGxvY19wYXJhbSAs
eXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gICAgCi0vKiBNYWNyb3MgYWZ0ZXIgdGhpcyBwb2ludCBj
YW4gYWxsIGJlIG92ZXJyaWRkZW4gYnkgdXNlciBkZWZpbml0aW9ucyBpbgotICogc2VjdGlvbiAx
LgotICovCi0KLSNpZm5kZWYgWVlfU0tJUF9ZWVdSQVAKLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0
ZXJuICJDIiBpbnQgeXl3cmFwICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSNlbHNlCi1leHRlcm4g
aW50IHl5d3JhcCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWZu
ZGVmIHl5dGV4dF9wdHIKLXN0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciAqLHl5Y29u
c3QgY2hhciAqLGludCAseXlzY2FuX3QgeXlzY2FubmVyKTsKLSNlbmRpZgotCi0jaWZkZWYgWVlf
TkVFRF9TVFJMRU4KLXN0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqICx5
eXNjYW5fdCB5eXNjYW5uZXIpOwotI2VuZGlmCi0KLSNpZm5kZWYgWVlfTk9fSU5QVVQKLQotI2lm
ZGVmIF9fY3BsdXNwbHVzCi1zdGF0aWMgaW50IHl5aW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciAp
OwotI2Vsc2UKLXN0YXRpYyBpbnQgaW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotI2VuZGlm
Ci0KLSNlbmRpZgotCi0vKiBBbW91bnQgb2Ygc3R1ZmYgdG8gc2x1cnAgdXAgd2l0aCBlYWNoIHJl
YWQuICovCi0jaWZuZGVmIFlZX1JFQURfQlVGX1NJWkUKLSNkZWZpbmUgWVlfUkVBRF9CVUZfU0la
RSA4MTkyCi0jZW5kaWYKLQotLyogQ29weSB3aGF0ZXZlciB0aGUgbGFzdCBydWxlIG1hdGNoZWQg
dG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gKi8KLSNpZm5kZWYgRUNITwotLyogVGhpcyB1c2VkIHRv
IGJlIGFuIGZwdXRzKCksIGJ1dCBzaW5jZSB0aGUgc3RyaW5nIG1pZ2h0IGNvbnRhaW4gTlVMJ3Ms
Ci0gKiB3ZSBub3cgdXNlIGZ3cml0ZSgpLgotICovCi0jZGVmaW5lIEVDSE8gZndyaXRlKCB5eXRl
eHQsIHl5bGVuZywgMSwgeXlvdXQgKQotI2VuZGlmCi0KLS8qIEdldHMgaW5wdXQgYW5kIHN0dWZm
cyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVMTCwK
LSAqIGlzIHJldHVybmVkIGluICJyZXN1bHQiLgotICovCi0jaWZuZGVmIFlZX0lOUFVUCi0jZGVm
aW5lIFlZX0lOUFVUKGJ1ZixyZXN1bHQsbWF4X3NpemUpIFwKLQlpZiAoIFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCi0JCXsgXAotCQlpbnQgYyA9ICcqJzsg
XAotCQl5eV9zaXplX3QgbjsgXAotCQlmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKLQkJ
CSAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsrbiApIFwKLQkJ
CWJ1ZltuXSA9IChjaGFyKSBjOyBcCi0JCWlmICggYyA9PSAnXG4nICkgXAotCQkJYnVmW24rK10g
PSAoY2hhcikgYzsgXAotCQlpZiAoIGMgPT0gRU9GICYmIGZlcnJvciggeXlpbiApICkgXAotCQkJ
WVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCi0JCXJl
c3VsdCA9IG47IFwKLQkJfSBcCi0JZWxzZSBcCi0JCXsgXAotCQllcnJubz0wOyBcCi0JCXdoaWxl
ICggKHJlc3VsdCA9IGZyZWFkKGJ1ZiwgMSwgbWF4X3NpemUsIHl5aW4pKT09MCAmJiBmZXJyb3Io
eXlpbikpIFwKLQkJCXsgXAotCQkJaWYoIGVycm5vICE9IEVJTlRSKSBcCi0JCQkJeyBcCi0JCQkJ
WVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCi0JCQkJ
YnJlYWs7IFwKLQkJCQl9IFwKLQkJCWVycm5vPTA7IFwKLQkJCWNsZWFyZXJyKHl5aW4pOyBcCi0J
CQl9IFwKLQkJfVwKLVwKLQotI2VuZGlmCi0KLS8qIE5vIHNlbWktY29sb24gYWZ0ZXIgcmV0dXJu
OyBjb3JyZWN0IHVzYWdlIGlzIHRvIHdyaXRlICJ5eXRlcm1pbmF0ZSgpOyIgLQotICogd2UgZG9u
J3Qgd2FudCBhbiBleHRyYSAnOycgYWZ0ZXIgdGhlICJyZXR1cm4iIGJlY2F1c2UgdGhhdCB3aWxs
IGNhdXNlCi0gKiBzb21lIGNvbXBpbGVycyB0byBjb21wbGFpbiBhYm91dCB1bnJlYWNoYWJsZSBz
dGF0ZW1lbnRzLgotICovCi0jaWZuZGVmIHl5dGVybWluYXRlCi0jZGVmaW5lIHl5dGVybWluYXRl
KCkgcmV0dXJuIFlZX05VTEwKLSNlbmRpZgotCi0vKiBOdW1iZXIgb2YgZW50cmllcyBieSB3aGlj
aCBzdGFydC1jb25kaXRpb24gc3RhY2sgZ3Jvd3MuICovCi0jaWZuZGVmIFlZX1NUQVJUX1NUQUNL
X0lOQ1IKLSNkZWZpbmUgWVlfU1RBUlRfU1RBQ0tfSU5DUiAyNQotI2VuZGlmCi0KLS8qIFJlcG9y
dCBhIGZhdGFsIGVycm9yLiAqLwotI2lmbmRlZiBZWV9GQVRBTF9FUlJPUgotI2RlZmluZSBZWV9G
QVRBTF9FUlJPUihtc2cpIHl5X2ZhdGFsX2Vycm9yKCBtc2cgLCB5eXNjYW5uZXIpCi0jZW5kaWYK
LQotLyogZW5kIHRhYmxlcyBzZXJpYWxpemF0aW9uIHN0cnVjdHVyZXMgYW5kIHByb3RvdHlwZXMg
Ki8KLQotLyogRGVmYXVsdCBkZWNsYXJhdGlvbiBvZiBnZW5lcmF0ZWQgc2Nhbm5lciAtIGEgZGVm
aW5lIHNvIHRoZSB1c2VyIGNhbgotICogZWFzaWx5IGFkZCBwYXJhbWV0ZXJzLgotICovCi0jaWZu
ZGVmIFlZX0RFQ0wKLSNkZWZpbmUgWVlfREVDTF9JU19PVVJTIDEKLQotZXh0ZXJuIGludCB5eWxl
eCBcCi0gICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSxZWUxUWVBFICogeXls
bG9jX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotCi0jZGVmaW5lIFlZX0RFQ0wgaW50IHl5
bGV4IFwKLSAgICAgICAgICAgICAgIChZWVNUWVBFICogeXlsdmFsX3BhcmFtLCBZWUxUWVBFICog
eXlsbG9jX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQotI2VuZGlmIC8qICFZWV9ERUNMICov
Ci0KLS8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHJ1bGUsIGFmdGVy
IHl5dGV4dCBhbmQgeXlsZW5nCi0gKiBoYXZlIGJlZW4gc2V0IHVwLgotICovCi0jaWZuZGVmIFlZ
X1VTRVJfQUNUSU9OCi0jZGVmaW5lIFlZX1VTRVJfQUNUSU9OCi0jZW5kaWYKLQotLyogQ29kZSBl
eGVjdXRlZCBhdCB0aGUgZW5kIG9mIGVhY2ggcnVsZS4gKi8KLSNpZm5kZWYgWVlfQlJFQUsKLSNk
ZWZpbmUgWVlfQlJFQUsgYnJlYWs7Ci0jZW5kaWYKLQotI2RlZmluZSBZWV9SVUxFX1NFVFVQIFwK
LQlZWV9VU0VSX0FDVElPTgotCi0vKiogVGhlIG1haW4gc2Nhbm5lciBmdW5jdGlvbiB3aGljaCBk
b2VzIGFsbCB0aGUgd29yay4KLSAqLwotWVlfREVDTAotewotCXJlZ2lzdGVyIHl5X3N0YXRlX3R5
cGUgeXlfY3VycmVudF9zdGF0ZTsKLQlyZWdpc3RlciBjaGFyICp5eV9jcCwgKnl5X2JwOwotCXJl
Z2lzdGVyIGludCB5eV9hY3Q7Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgeXlsdmFsID0geXlsdmFsX3BhcmFtOwotCi0gICAg
eXlsbG9jID0geXlsbG9jX3BhcmFtOwotCi0JaWYgKCAheXlnLT55eV9pbml0ICkKLQkJewotCQl5
eWctPnl5X2luaXQgPSAxOwotCi0jaWZkZWYgWVlfVVNFUl9JTklUCi0JCVlZX1VTRVJfSU5JVDsK
LSNlbmRpZgotCi0JCWlmICggISB5eWctPnl5X3N0YXJ0ICkKLQkJCXl5Zy0+eXlfc3RhcnQgPSAx
OwkvKiBmaXJzdCBzdGFydCBzdGF0ZSAqLwotCi0JCWlmICggISB5eWluICkKLQkJCXl5aW4gPSBz
dGRpbjsKLQotCQlpZiAoICEgeXlvdXQgKQotCQkJeXlvdXQgPSBzdGRvdXQ7Ci0KLQkJaWYgKCAh
IFlZX0NVUlJFTlRfQlVGRkVSICkgewotCQkJeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5u
ZXIpOwotCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KLQkJCQl5eV9jcmVhdGVfYnVmZmVy
KHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7Ci0JCX0KLQotCQl5eV9sb2FkX2J1ZmZlcl9z
dGF0ZSh5eXNjYW5uZXIgKTsKLQkJfQotCi0Jd2hpbGUgKCAxICkJCS8qIGxvb3BzIHVudGlsIGVu
ZC1vZi1maWxlIGlzIHJlYWNoZWQgKi8KLQkJewotCQl5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsK
LQotCQkvKiBTdXBwb3J0IG9mIHl5dGV4dC4gKi8KLQkJKnl5X2NwID0geXlnLT55eV9ob2xkX2No
YXI7Ci0KLQkJLyogeXlfYnAgcG9pbnRzIHRvIHRoZSBwb3NpdGlvbiBpbiB5eV9jaF9idWYgb2Yg
dGhlIHN0YXJ0IG9mCi0JCSAqIHRoZSBjdXJyZW50IHJ1bi4KLQkJICovCi0JCXl5X2JwID0geXlf
Y3A7Ci0KLQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7Ci15eV9tYXRjaDoKLQkJ
ZG8KLQkJCXsKLQkJCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IHl5X2VjW1lZX1NDX1RPX1VJKCp5
eV9jcCldOwotCQkJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQotCQkJCXsKLQkJ
CQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKLQkJCQl5
eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKLQkJCQl9Ci0JCQl3aGlsZSAoIHl5
X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0
ZSApCi0JCQkJewotCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVu
dF9zdGF0ZV07Ci0JCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ0MyApCi0JCQkJCXl5X2Mg
PSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwotCQkJCX0KLQkJCXl5X2N1cnJlbnRfc3Rh
dGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5
X2NdOwotCQkJKyt5eV9jcDsKLQkJCX0KLQkJd2hpbGUgKCB5eV9jdXJyZW50X3N0YXRlICE9IDQ0
MiApOwotCQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLQkJeXlfY3VycmVu
dF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0KLXl5X2ZpbmRfYWN0aW9u
OgotCQl5eV9hY3QgPSB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV07Ci0KLQkJWVlfRE9fQkVG
T1JFX0FDVElPTjsKLQotCQlpZiAoIHl5X2FjdCAhPSBZWV9FTkRfT0ZfQlVGRkVSICYmIHl5X3J1
bGVfY2FuX21hdGNoX2VvbFt5eV9hY3RdICkKLQkJCXsKLQkJCXl5X3NpemVfdCB5eWw7Ci0JCQlm
b3IgKCB5eWwgPSAwOyB5eWwgPCB5eWxlbmc7ICsreXlsICkKLQkJCQlpZiAoIHl5dGV4dFt5eWxd
ID09ICdcbicgKQotCQkJCQkgICAKLSAgICBkb3sgeXlsaW5lbm8rKzsKLSAgICAgICAgeXljb2x1
bW49MDsKLSAgICB9d2hpbGUoMCkKLTsKLQkJCX0KLQotZG9fYWN0aW9uOgkvKiBUaGlzIGxhYmVs
IGlzIHVzZWQgb25seSB0byBhY2Nlc3MgRU9GIGFjdGlvbnMuICovCi0KLQkJc3dpdGNoICggeXlf
YWN0ICkKLQl7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dpdGNoICovCi0JCQljYXNlIDA6IC8q
IG11c3QgYmFjayB1cCAqLwotCQkJLyogdW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVf
QUNUSU9OICovCi0JCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLQkJCXl5X2NwID0geXln
LT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwotCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlf
bGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0JCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOwotCi1jYXNlIDE6
Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBJTlZBUklBTlQ7IH0KLQlZWV9CUkVBSwotY2FzZSAy
OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSElHSF9QUkVDSVNJT047IH0KLQlZWV9CUkVBSwot
Y2FzZSAzOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gTUVESVVNX1BSRUNJU0lPTjsgfQotCVlZ
X0JSRUFLCi1jYXNlIDQ6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBMT1dfUFJFQ0lTSU9OOyB9
Ci0JWVlfQlJFQUsKLWNhc2UgNToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFBSRUNJU0lPTjsg
fQotCVlZX0JSRUFLCi1jYXNlIDY6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBBVFRSSUJVVEU7
IH0KLQlZWV9CUkVBSwotY2FzZSA3OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gQ09OU1RfUVVB
TDsgfQotCVlZX0JSRUFLCi1jYXNlIDg6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBVTklGT1JN
OyB9Ci0JWVlfQlJFQUsKLWNhc2UgOToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFZBUllJTkc7
IH0KLQlZWV9CUkVBSwotY2FzZSAxMDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEJSRUFLOyB9
Ci0JWVlfQlJFQUsKLWNhc2UgMTE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBDT05USU5VRTsg
fQotCVlZX0JSRUFLCi1jYXNlIDEyOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gRE87IH0KLQlZ
WV9CUkVBSwotY2FzZSAxMzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEZPUjsgfQotCVlZX0JS
RUFLCi1jYXNlIDE0OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gV0hJTEU7IH0KLQlZWV9CUkVB
SwotY2FzZSAxNToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElGOyB9Ci0JWVlfQlJFQUsKLWNh
c2UgMTY6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBFTFNFOyB9Ci0JWVlfQlJFQUsKLWNhc2Ug
MTc6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBJTl9RVUFMOyB9Ci0JWVlfQlJFQUsKLWNhc2Ug
MTg6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBPVVRfUVVBTDsgfQotCVlZX0JSRUFLCi1jYXNl
IDE5OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSU5PVVRfUVVBTDsgfQotCVlZX0JSRUFLCi1j
YXNlIDIwOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gRkxPQVRfVFlQRTsgfQotCVlZX0JSRUFL
Ci1jYXNlIDIxOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSU5UX1RZUEU7IH0KLQlZWV9CUkVB
SwotY2FzZSAyMjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFZPSURfVFlQRTsgfQotCVlZX0JS
RUFLCi1jYXNlIDIzOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gQk9PTF9UWVBFOyB9Ci0JWVlf
QlJFQUsKLWNhc2UgMjQ6Ci1ZWV9SVUxFX1NFVFVQCi17IHl5bHZhbC0+bGV4LmIgPSB0cnVlOyAg
cmV0dXJuIEJPT0xDT05TVEFOVDsgfQotCVlZX0JSRUFLCi1jYXNlIDI1OgotWVlfUlVMRV9TRVRV
UAoteyB5eWx2YWwtPmxleC5iID0gZmFsc2U7IHJldHVybiBCT09MQ09OU1RBTlQ7IH0KLQlZWV9C
UkVBSwotY2FzZSAyNjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIERJU0NBUkQ7IH0KLQlZWV9C
UkVBSwotY2FzZSAyNzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFJFVFVSTjsgfQotCVlZX0JS
RUFLCi1jYXNlIDI4OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gTUFUUklYMjsgfQotCVlZX0JS
RUFLCi1jYXNlIDI5OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gTUFUUklYMzsgfQotCVlZX0JS
RUFLCi1jYXNlIDMwOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gTUFUUklYNDsgfQotCVlZX0JS
RUFLCi1jYXNlIDMxOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gVkVDMjsgfQotCVlZX0JSRUFL
Ci1jYXNlIDMyOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gVkVDMzsgfQotCVlZX0JSRUFLCi1j
YXNlIDMzOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gVkVDNDsgfQotCVlZX0JSRUFLCi1jYXNl
IDM0OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSVZFQzI7IH0KLQlZWV9CUkVBSwotY2FzZSAz
NToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElWRUMzOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMzY6
Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBJVkVDNDsgfQotCVlZX0JSRUFLCi1jYXNlIDM3Ogot
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gQlZFQzI7IH0KLQlZWV9CUkVBSwotY2FzZSAzODoKLVlZ
X1JVTEVfU0VUVVAKLXsgcmV0dXJuIEJWRUMzOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMzk6Ci1ZWV9S
VUxFX1NFVFVQCi17IHJldHVybiBCVkVDNDsgfQotCVlZX0JSRUFLCi1jYXNlIDQwOgotWVlfUlVM
RV9TRVRVUAoteyByZXR1cm4gU0FNUExFUjJEOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNDE6Ci1ZWV9S
VUxFX1NFVFVQCi17IHJldHVybiBTQU1QTEVSQ1VCRTsgfQotCVlZX0JSRUFLCi1jYXNlIDQyOgot
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gU0FNUExFUl9FWFRFUk5BTF9PRVM7IH0KLQlZWV9CUkVB
SwotY2FzZSA0MzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFNBTVBMRVIyRFJFQ1Q7IH0KLQlZ
WV9CUkVBSwotY2FzZSA0NDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFNUUlVDVDsgfQotCVlZ
X0JSRUFLCi1jYXNlIDQ1OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNDY6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA0NzoKLVlZX1JV
TEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFL
Ci1jYXNlIDQ4OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNDk6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA1MDoKLVlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNl
IDUxOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0JWVlfQlJFQUsKLWNhc2UgNTI6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA1MzoKLVlZX1JVTEVfU0VUVVAKLXsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDU0Ogot
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlf
QlJFQUsKLWNhc2UgNTU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA1NjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDU3OgotWVlfUlVM
RV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsK
LWNhc2UgNTg6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KLQlZWV9CUkVBSwotY2FzZSA1OToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDYwOgotWVlfUlVMRV9TRVRV
UAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2Ug
NjE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
LQlZWV9CUkVBSwotY2FzZSA2MjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDYzOgotWVlfUlVMRV9TRVRVUAoteyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNjQ6Ci1Z
WV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9C
UkVBSwotY2FzZSA2NToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDY2OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNjc6Ci1ZWV9SVUxF
X1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwot
Y2FzZSA2ODoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQotCVlZX0JSRUFLCi1jYXNlIDY5OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNzA6Ci1ZWV9SVUxFX1NFVFVQ
Ci17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA3
MToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQot
CVlZX0JSRUFLCi1jYXNlIDcyOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNzM6Ci1ZWV9SVUxFX1NFVFVQCi17IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA3NDoKLVlZ
X1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JS
RUFLCi1jYXNlIDc1OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNzY6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA3NzoKLVlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1j
YXNlIDc4OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0JWVlfQlJFQUsKLWNhc2UgNzk6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA4MDoKLVlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDgx
OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0J
WVlfQlJFQUsKLWNhc2UgODI6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA4MzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDg0OgotWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJF
QUsKLWNhc2UgODU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA4NjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDg3OgotWVlfUlVMRV9T
RVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNh
c2UgODg6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KLQlZWV9CUkVBSwotY2FzZSA4OToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDkwOgotWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgOTE6
Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZ
WV9CUkVBSwotY2FzZSA5MjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDkzOgotWVlfUlVMRV9TRVRVUAotewotICAg
eXlsdmFsLT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsgCi0gICByZXR1cm4g
Y2hlY2tfdHlwZSh5eXNjYW5uZXIpOwotfQotCVlZX0JSRUFLCi1jYXNlIDk0OgotWVlfUlVMRV9T
RVRVUAoteyByZXR1cm4gaW50X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2Fz
ZSA5NToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIGludF9jb25zdGFudCh5eXNjYW5uZXIpOyB9
Ci0JWVlfQlJFQUsKLWNhc2UgOTY6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBpbnRfY29uc3Rh
bnQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDk3OgotWVlfUlVMRV9TRVRVUAoteyBy
ZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDk4Ogot
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQotCVlZ
X0JSRUFLCi1jYXNlIDk5OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gZmxvYXRfY29uc3RhbnQo
eXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDEwMDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0
dXJuIEFERF9BU1NJR047IH0KLQlZWV9CUkVBSwotY2FzZSAxMDE6Ci1ZWV9SVUxFX1NFVFVQCi17
IHJldHVybiBTVUJfQVNTSUdOOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTAyOgotWVlfUlVMRV9TRVRV
UAoteyByZXR1cm4gTVVMX0FTU0lHTjsgfQotCVlZX0JSRUFLCi1jYXNlIDEwMzoKLVlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIERJVl9BU1NJR047IH0KLQlZWV9CUkVBSwotY2FzZSAxMDQ6Ci1ZWV9S
VUxFX1NFVFVQCi17IHJldHVybiBNT0RfQVNTSUdOOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTA1Ogot
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gTEVGVF9BU1NJR047IH0KLQlZWV9CUkVBSwotY2FzZSAx
MDY6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBSSUdIVF9BU1NJR047IH0KLQlZWV9CUkVBSwot
Y2FzZSAxMDc6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBBTkRfQVNTSUdOOyB9Ci0JWVlfQlJF
QUsKLWNhc2UgMTA4OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gWE9SX0FTU0lHTjsgfQotCVlZ
X0JSRUFLCi1jYXNlIDEwOToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIE9SX0FTU0lHTjsgfQot
CVlZX0JSRUFLCi1jYXNlIDExMDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElOQ19PUDsgfQot
CVlZX0JSRUFLCi1jYXNlIDExMToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIERFQ19PUDsgfQot
CVlZX0JSRUFLCi1jYXNlIDExMjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEFORF9PUDsgfQot
CVlZX0JSRUFLCi1jYXNlIDExMzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIE9SX09QOyB9Ci0J
WVlfQlJFQUsKLWNhc2UgMTE0OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gWE9SX09QOyB9Ci0J
WVlfQlJFQUsKLWNhc2UgMTE1OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gTEVfT1A7IH0KLQlZ
WV9CUkVBSwotY2FzZSAxMTY6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBHRV9PUDsgfQotCVlZ
X0JSRUFLCi1jYXNlIDExNzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEVRX09QOyB9Ci0JWVlf
QlJFQUsKLWNhc2UgMTE4OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gTkVfT1A7IH0KLQlZWV9C
UkVBSwotY2FzZSAxMTk6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBMRUZUX09QOyB9Ci0JWVlf
QlJFQUsKLWNhc2UgMTIwOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gUklHSFRfT1A7IH0KLQlZ
WV9CUkVBSwotY2FzZSAxMjE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBTRU1JQ09MT047IH0K
LQlZWV9CUkVBSwotY2FzZSAxMjI6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBMRUZUX0JSQUNF
OyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTIzOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gUklHSFRf
QlJBQ0U7IH0KLQlZWV9CUkVBSwotY2FzZSAxMjQ6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBD
T01NQTsgfQotCVlZX0JSRUFLCi1jYXNlIDEyNToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIENP
TE9OOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTI2OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gRVFV
QUw7IH0KLQlZWV9CUkVBSwotY2FzZSAxMjc6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBMRUZU
X1BBUkVOOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTI4OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4g
UklHSFRfUEFSRU47IH0KLQlZWV9CUkVBSwotY2FzZSAxMjk6Ci1ZWV9SVUxFX1NFVFVQCi17IHJl
dHVybiBMRUZUX0JSQUNLRVQ7IH0KLQlZWV9CUkVBSwotY2FzZSAxMzA6Ci1ZWV9SVUxFX1NFVFVQ
Ci17IHJldHVybiBSSUdIVF9CUkFDS0VUOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTMxOgotWVlfUlVM
RV9TRVRVUAoteyByZXR1cm4gRE9UOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTMyOgotWVlfUlVMRV9T
RVRVUAoteyByZXR1cm4gQkFORzsgfQotCVlZX0JSRUFLCi1jYXNlIDEzMzoKLVlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIERBU0g7IH0KLQlZWV9CUkVBSwotY2FzZSAxMzQ6Ci1ZWV9SVUxFX1NFVFVQ
Ci17IHJldHVybiBUSUxERTsgfQotCVlZX0JSRUFLCi1jYXNlIDEzNToKLVlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIFBMVVM7IH0KLQlZWV9CUkVBSwotY2FzZSAxMzY6Ci1ZWV9SVUxFX1NFVFVQCi17
IHJldHVybiBTVEFSOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTM3OgotWVlfUlVMRV9TRVRVUAoteyBy
ZXR1cm4gU0xBU0g7IH0KLQlZWV9CUkVBSwotY2FzZSAxMzg6Ci1ZWV9SVUxFX1NFVFVQCi17IHJl
dHVybiBQRVJDRU5UOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTM5OgotWVlfUlVMRV9TRVRVUAoteyBy
ZXR1cm4gTEVGVF9BTkdMRTsgfQotCVlZX0JSRUFLCi1jYXNlIDE0MDoKLVlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIFJJR0hUX0FOR0xFOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTQxOgotWVlfUlVMRV9T
RVRVUAoteyByZXR1cm4gVkVSVElDQUxfQkFSOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTQyOgotWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4gQ0FSRVQ7IH0KLQlZWV9CUkVBSwotY2FzZSAxNDM6Ci1ZWV9S
VUxFX1NFVFVQCi17IHJldHVybiBBTVBFUlNBTkQ7IH0KLQlZWV9CUkVBSwotY2FzZSAxNDQ6Ci1Z
WV9SVUxFX1NFVFVQCi17IHJldHVybiBRVUVTVElPTjsgfQotCVlZX0JSRUFLCi1jYXNlIDE0NToK
LS8qIHJ1bGUgMTQ1IGNhbiBtYXRjaCBlb2wgKi8KLVlZX1JVTEVfU0VUVVAKLXsgfQotCVlZX0JS
RUFLCi1jYXNlIFlZX1NUQVRFX0VPRihJTklUSUFMKToKLXsgeXl0ZXJtaW5hdGUoKTsgfQotCVlZ
X0JSRUFLCi1jYXNlIDE0NjoKLVlZX1JVTEVfU0VUVVAKLXsgYXNzZXJ0KGZhbHNlKTsgcmV0dXJu
IDA7IH0KLQlZWV9CUkVBSwotY2FzZSAxNDc6Ci1ZWV9SVUxFX1NFVFVQCi1FQ0hPOwotCVlZX0JS
RUFLCi0KLQljYXNlIFlZX0VORF9PRl9CVUZGRVI6Ci0JCXsKLQkJLyogQW1vdW50IG9mIHRleHQg
bWF0Y2hlZCBub3QgaW5jbHVkaW5nIHRoZSBFT0IgY2hhci4gKi8KLQkJaW50IHl5X2Ftb3VudF9v
Zl9tYXRjaGVkX3RleHQgPSAoaW50KSAoeXlfY3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsKLQot
CQkvKiBVbmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04uICovCi0JCSp5eV9j
cCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotCQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCi0KLQkJ
aWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVG
RkVSX05FVyApCi0JCQl7Ci0JCQkvKiBXZSdyZSBzY2FubmluZyBhIG5ldyBmaWxlIG9yIGlucHV0
IHNvdXJjZS4gIEl0J3MKLQkJCSAqIHBvc3NpYmxlIHRoYXQgdGhpcyBoYXBwZW5lZCBiZWNhdXNl
IHRoZSB1c2VyCi0JCQkgKiBqdXN0IHBvaW50ZWQgeXlpbiBhdCBhIG5ldyBzb3VyY2UgYW5kIGNh
bGxlZAotCQkJICogeXlsZXgoKS4gIElmIHNvLCB0aGVuIHdlIGhhdmUgdG8gYXNzdXJlCi0JCQkg
KiBjb25zaXN0ZW5jeSBiZXR3ZWVuIFlZX0NVUlJFTlRfQlVGRkVSIGFuZCBvdXIKLQkJCSAqIGds
b2JhbHMuICBIZXJlIGlzIHRoZSByaWdodCBwbGFjZSB0byBkbyBzbywgYmVjYXVzZQotCQkJICog
dGhpcyBpcyB0aGUgZmlyc3QgYWN0aW9uIChvdGhlciB0aGFuIHBvc3NpYmx5IGEKLQkJCSAqIGJh
Y2stdXApIHRoYXQgd2lsbCBtYXRjaCBmb3IgdGhlIG5ldyBpbnB1dCBzb3VyY2UuCi0JCQkgKi8K
LQkJCXl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFy
czsKLQkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZSA9IHl5aW47Ci0J
CQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJf
Tk9STUFMOwotCQkJfQotCi0JCS8qIE5vdGUgdGhhdCBoZXJlIHdlIHRlc3QgZm9yIHl5X2NfYnVm
X3AgIjw9IiB0byB0aGUgcG9zaXRpb24KLQkJICogb2YgdGhlIGZpcnN0IEVPQiBpbiB0aGUgYnVm
ZmVyLCBzaW5jZSB5eV9jX2J1Zl9wIHdpbGwKLQkJICogYWxyZWFkeSBoYXZlIGJlZW4gaW5jcmVt
ZW50ZWQgcGFzdCB0aGUgTlVMIGNoYXJhY3RlcgotCQkgKiAoc2luY2UgYWxsIHN0YXRlcyBtYWtl
IHRyYW5zaXRpb25zIG9uIEVPQiB0byB0aGUKLQkJICogZW5kLW9mLWJ1ZmZlciBzdGF0ZSkuICBD
b250cmFzdCB0aGlzIHdpdGggdGhlIHRlc3QKLQkJICogaW4gaW5wdXQoKS4KLQkJICovCi0JCWlm
ICggeXlnLT55eV9jX2J1Zl9wIDw9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1
Zlt5eWctPnl5X25fY2hhcnNdICkKLQkJCXsgLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLwot
CQkJeXlfc3RhdGVfdHlwZSB5eV9uZXh0X3N0YXRlOwotCi0JCQl5eWctPnl5X2NfYnVmX3AgPSB5
eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OwotCi0JCQl5eV9jdXJy
ZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKLQotCQkJLyog
T2theSwgd2UncmUgbm93IHBvc2l0aW9uZWQgdG8gbWFrZSB0aGUgTlVMCi0JCQkgKiB0cmFuc2l0
aW9uLiAgV2UgY291bGRuJ3QgaGF2ZQotCQkJICogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCkgZ28g
YWhlYWQgYW5kIGRvIGl0Ci0JCQkgKiBmb3IgdXMgYmVjYXVzZSBpdCBkb2Vzbid0IGtub3cgaG93
IHRvIGRlYWwKLQkJCSAqIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIGphbW1pbmcgKGFuZCB3ZSBk
b24ndAotCQkJICogd2FudCB0byBidWlsZCBqYW1taW5nIGludG8gaXQgYmVjYXVzZSB0aGVuIGl0
Ci0JCQkgKiB3aWxsIHJ1biBtb3JlIHNsb3dseSkuCi0JCQkgKi8KLQotCQkJeXlfbmV4dF9zdGF0
ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5uZXIpOwotCi0J
CQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOwotCi0JCQlpZiAoIHl5X25l
eHRfc3RhdGUgKQotCQkJCXsKLQkJCQkvKiBDb25zdW1lIHRoZSBOVUwuICovCi0JCQkJeXlfY3Ag
PSArK3l5Zy0+eXlfY19idWZfcDsKLQkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbmV4dF9zdGF0
ZTsKLQkJCQlnb3RvIHl5X21hdGNoOwotCQkJCX0KLQotCQkJZWxzZQotCQkJCXsKLQkJCQl5eV9j
cCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLQkJCQl5eV9jdXJyZW50X3N0YXRlID0g
eXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLQkJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOwot
CQkJCX0KLQkJCX0KLQotCQllbHNlIHN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2Fu
bmVyICkgKQotCQkJewotCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgotCQkJCXsKLQkJCQl5
eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDA7Ci0KLQkJCQlpZiAoIHl5d3JhcCh5
eXNjYW5uZXIgKSApCi0JCQkJCXsKLQkJCQkJLyogTm90ZTogYmVjYXVzZSB3ZSd2ZSB0YWtlbiBj
YXJlIGluCi0JCQkJCSAqIHl5X2dldF9uZXh0X2J1ZmZlcigpIHRvIGhhdmUgc2V0IHVwCi0JCQkJ
CSAqIHl5dGV4dCwgd2UgY2FuIG5vdyBzZXQgdXAKLQkJCQkJICogeXlfY19idWZfcCBzbyB0aGF0
IGlmIHNvbWUgdG90YWwKLQkJCQkJICogaG9zZXIgKGxpa2UgZmxleCBpdHNlbGYpIHdhbnRzIHRv
Ci0JCQkJCSAqIGNhbGwgdGhlIHNjYW5uZXIgYWZ0ZXIgd2UgcmV0dXJuIHRoZQotCQkJCQkgKiBZ
WV9OVUxMLCBpdCdsbCBzdGlsbCB3b3JrIC0gYW5vdGhlcgotCQkJCQkgKiBZWV9OVUxMIHdpbGwg
Z2V0IHJldHVybmVkLgotCQkJCQkgKi8KLQkJCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRl
eHRfcHRyICsgWVlfTU9SRV9BREo7Ci0KLQkJCQkJeXlfYWN0ID0gWVlfU1RBVEVfRU9GKFlZX1NU
QVJUKTsKLQkJCQkJZ290byBkb19hY3Rpb247Ci0JCQkJCX0KLQotCQkJCWVsc2UKLQkJCQkJewot
CQkJCQlpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQotCQkJCQkJWVlf
TkVXX0ZJTEU7Ci0JCQkJCX0KLQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCWNhc2UgRU9CX0FDVF9D
T05USU5VRV9TQ0FOOgotCQkJCXl5Zy0+eXlfY19idWZfcCA9Ci0JCQkJCXl5Zy0+eXl0ZXh0X3B0
ciArIHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7Ci0KLQkJCQl5eV9jdXJyZW50X3N0YXRlID0g
eXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKLQotCQkJCXl5X2NwID0geXlnLT55
eV9jX2J1Zl9wOwotCQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7Ci0J
CQkJZ290byB5eV9tYXRjaDsKLQotCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6Ci0JCQkJeXln
LT55eV9jX2J1Zl9wID0KLQkJCQkmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZb
eXlnLT55eV9uX2NoYXJzXTsKLQotCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlv
dXNfc3RhdGUoIHl5c2Nhbm5lciApOwotCi0JCQkJeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7Ci0J
CQkJeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKLQkJCQlnb3RvIHl5X2Zp
bmRfYWN0aW9uOwotCQkJfQotCQlicmVhazsKLQkJfQotCi0JZGVmYXVsdDoKLQkJWVlfRkFUQUxf
RVJST1IoCi0JCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1ubyBhY3Rpb24g
Zm91bmQiICk7Ci0JfSAvKiBlbmQgb2YgYWN0aW9uIHN3aXRjaCAqLwotCQl9IC8qIGVuZCBvZiBz
Y2FubmluZyBvbmUgdG9rZW4gKi8KLX0gLyogZW5kIG9mIHl5bGV4ICovCi0KLS8qIHl5X2dldF9u
ZXh0X2J1ZmZlciAtIHRyeSB0byByZWFkIGluIGEgbmV3IGJ1ZmZlcgotICoKLSAqIFJldHVybnMg
YSBjb2RlIHJlcHJlc2VudGluZyBhbiBhY3Rpb246Ci0gKglFT0JfQUNUX0xBU1RfTUFUQ0ggLQot
ICoJRU9CX0FDVF9DT05USU5VRV9TQ0FOIC0gY29udGludWUgc2Nhbm5pbmcgZnJvbSBjdXJyZW50
IHBvc2l0aW9uCi0gKglFT0JfQUNUX0VORF9PRl9GSUxFIC0gZW5kIG9mIGZpbGUKLSAqLwotc3Rh
dGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBz
dHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0JcmVn
aXN0ZXIgY2hhciAqZGVzdCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmOwot
CXJlZ2lzdGVyIGNoYXIgKnNvdXJjZSA9IHl5Zy0+eXl0ZXh0X3B0cjsKLQlyZWdpc3RlciBpbnQg
bnVtYmVyX3RvX21vdmUsIGk7Ci0JaW50IHJldF92YWw7Ci0KLQlpZiAoIHl5Zy0+eXlfY19idWZf
cCA+ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMg
KyAxXSApCi0JCVlZX0ZBVEFMX0VSUk9SKAotCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFs
IGVycm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKLQotCWlmICggWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9maWxsX2J1ZmZlciA9PSAwICkKLQkJeyAvKiBEb24ndCB0cnkgdG8gZmls
bCB0aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4gKi8KLQkJaWYgKCB5eWctPnl5X2NfYnVm
X3AgLSB5eWctPnl5dGV4dF9wdHIgLSBZWV9NT1JFX0FESiA9PSAxICkKLQkJCXsKLQkJCS8qIFdl
IG1hdGNoZWQgYSBzaW5nbGUgY2hhcmFjdGVyLCB0aGUgRU9CLCBzbwotCQkJICogdHJlYXQgdGhp
cyBhcyBhIGZpbmFsIEVPRi4KLQkJCSAqLwotCQkJcmV0dXJuIEVPQl9BQ1RfRU5EX09GX0ZJTEU7
Ci0JCQl9Ci0KLQkJZWxzZQotCQkJewotCQkJLyogV2UgbWF0Y2hlZCBzb21lIHRleHQgcHJpb3Ig
dG8gdGhlIEVPQiwgZmlyc3QKLQkJCSAqIHByb2Nlc3MgaXQuCi0JCQkgKi8KLQkJCXJldHVybiBF
T0JfQUNUX0xBU1RfTUFUQ0g7Ci0JCQl9Ci0JCX0KLQotCS8qIFRyeSB0byByZWFkIG1vcmUgZGF0
YS4gKi8KLQotCS8qIEZpcnN0IG1vdmUgbGFzdCBjaGFycyB0byBzdGFydCBvZiBidWZmZXIuICov
Ci0JbnVtYmVyX3RvX21vdmUgPSAoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRf
cHRyKSAtIDE7Ci0KLQlmb3IgKCBpID0gMDsgaSA8IG51bWJlcl90b19tb3ZlOyArK2kgKQotCQkq
KGRlc3QrKykgPSAqKHNvdXJjZSsrKTsKLQotCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9FT0ZfUEVORElORyApCi0JCS8qIGRvbid0
IGRvIHRoZSByZWFkLCBpdCdzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiBhbiBFT0YsCi0JCSAq
IGp1c3QgZm9yY2UgYW4gRU9GCi0JCSAqLwotCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnMgPSAwOwotCi0JZWxzZQotCQl7Ci0JCQl5eV9zaXpl
X3QgbnVtX3RvX3JlYWQgPQotCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6
ZSAtIG51bWJlcl90b19tb3ZlIC0gMTsKLQotCQl3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQot
CQkJeyAvKiBOb3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQuICovCi0KLQkJ
CS8qIGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciAqLwotCQkJWVlf
QlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUjsKLQotCQkJaW50IHl5X2NfYnVmX3Bf
b2Zmc2V0ID0KLQkJCQkoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0gYi0+eXlfY2hfYnVmKTsKLQot
CQkJaWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKLQkJCQl7Ci0JCQkJeXlfc2l6ZV90IG5ld19z
aXplID0gYi0+eXlfYnVmX3NpemUgKiAyOwotCi0JCQkJaWYgKCBuZXdfc2l6ZSA8PSAwICkKLQkJ
CQkJYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVmX3NpemUgLyA4OwotCQkJCWVsc2UKLQkJCQkJ
Yi0+eXlfYnVmX3NpemUgKj0gMjsKLQotCQkJCWItPnl5X2NoX2J1ZiA9IChjaGFyICopCi0JCQkJ
CS8qIEluY2x1ZGUgcm9vbSBpbiBmb3IgMiBFT0IgY2hhcnMuICovCi0JCQkJCXl5cmVhbGxvYygo
dm9pZCAqKSBiLT55eV9jaF9idWYsYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKLQkJ
CQl9Ci0JCQllbHNlCi0JCQkJLyogQ2FuJ3QgZ3JvdyBpdCwgd2UgZG9uJ3Qgb3duIGl0LiAqLwot
CQkJCWItPnl5X2NoX2J1ZiA9IDA7Ci0KLQkJCWlmICggISBiLT55eV9jaF9idWYgKQotCQkJCVlZ
X0ZBVEFMX0VSUk9SKAotCQkJCSJmYXRhbCBlcnJvciAtIHNjYW5uZXIgaW5wdXQgYnVmZmVyIG92
ZXJmbG93IiApOwotCi0JCQl5eWctPnl5X2NfYnVmX3AgPSAmYi0+eXlfY2hfYnVmW3l5X2NfYnVm
X3Bfb2Zmc2V0XTsKLQotCQkJbnVtX3RvX3JlYWQgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2J1Zl9zaXplIC0KLQkJCQkJCW51bWJlcl90b19tb3ZlIC0gMTsKLQotCQkJfQotCi0JCWlm
ICggbnVtX3RvX3JlYWQgPiBZWV9SRUFEX0JVRl9TSVpFICkKLQkJCW51bV90b19yZWFkID0gWVlf
UkVBRF9CVUZfU0laRTsKLQotCQkvKiBSZWFkIGluIG1vcmUgZGF0YS4gKi8KLQkJWVlfSU5QVVQo
ICgmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbbnVtYmVyX3RvX21vdmVdKSwK
LQkJCXl5Zy0+eXlfbl9jaGFycywgbnVtX3RvX3JlYWQgKTsKLQotCQlZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0JCX0KLQotCWlmICggeXln
LT55eV9uX2NoYXJzID09IDAgKQotCQl7Ci0JCWlmICggbnVtYmVyX3RvX21vdmUgPT0gWVlfTU9S
RV9BREogKQotCQkJewotCQkJcmV0X3ZhbCA9IEVPQl9BQ1RfRU5EX09GX0ZJTEU7Ci0JCQl5eXJl
c3RhcnQoeXlpbiAgLHl5c2Nhbm5lcik7Ci0JCQl9Ci0KLQkJZWxzZQotCQkJewotCQkJcmV0X3Zh
bCA9IEVPQl9BQ1RfTEFTVF9NQVRDSDsKLQkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
YnVmZmVyX3N0YXR1cyA9Ci0JCQkJWVlfQlVGRkVSX0VPRl9QRU5ESU5HOwotCQkJfQotCQl9Ci0K
LQllbHNlCi0JCXJldF92YWwgPSBFT0JfQUNUX0NPTlRJTlVFX1NDQU47Ci0KLQlpZiAoKHl5X3Np
emVfdCkgKHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlKSA+IFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfYnVmX3NpemUpIHsKLQkJLyogRXh0ZW5kIHRoZSBhcnJheSBieSA1MCUs
IHBsdXMgdGhlIG51bWJlciB3ZSByZWFsbHkgbmVlZC4gKi8KLQkJeXlfc2l6ZV90IG5ld19zaXpl
ID0geXlnLT55eV9uX2NoYXJzICsgbnVtYmVyX3RvX21vdmUgKyAoeXlnLT55eV9uX2NoYXJzID4+
IDEpOwotCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiA9IChjaGFyICopIHl5
cmVhbGxvYygodm9pZCAqKSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZixuZXdf
c2l6ZSAseXlzY2FubmVyICk7Ci0JCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2NoX2J1ZiApCi0JCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5
eV9nZXRfbmV4dF9idWZmZXIoKSIgKTsKLQl9Ci0KLQl5eWctPnl5X25fY2hhcnMgKz0gbnVtYmVy
X3RvX21vdmU7Ci0JWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9u
X2NoYXJzXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hB
UjsKLQotCXl5Zy0+eXl0ZXh0X3B0ciA9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2No
X2J1ZlswXTsKLQotCXJldHVybiByZXRfdmFsOwotfQotCi0vKiB5eV9nZXRfcHJldmlvdXNfc3Rh
dGUgLSBnZXQgdGhlIHN0YXRlIGp1c3QgYmVmb3JlIHRoZSBFT0IgY2hhciB3YXMgcmVhY2hlZCAq
LwotCi0gICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRlICh5eXNj
YW5fdCB5eXNjYW5uZXIpCi17Ci0JcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0
YXRlOwotCXJlZ2lzdGVyIGNoYXIgKnl5X2NwOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWct
Pnl5X3N0YXJ0OwotCi0JZm9yICggeXlfY3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FE
SjsgeXlfY3AgPCB5eWctPnl5X2NfYnVmX3A7ICsreXlfY3AgKQotCQl7Ci0JCXJlZ2lzdGVyIFlZ
X0NIQVIgeXlfYyA9ICgqeXlfY3AgPyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSA6IDEpOwot
CQlpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCi0JCQl7Ci0JCQl5eWctPnl5X2xh
c3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKLQkJCXl5Zy0+eXlfbGFzdF9h
Y2NlcHRpbmdfY3BvcyA9IHl5X2NwOwotCQkJfQotCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5
X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0JCQl7Ci0JCQl5
eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotCQkJaWYg
KCB5eV9jdXJyZW50X3N0YXRlID49IDQ0MyApCi0JCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVk
IGludCkgeXlfY107Ci0JCQl9Ci0JCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5
eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwotCQl9Ci0KLQlyZXR1cm4g
eXlfY3VycmVudF9zdGF0ZTsKLX0KLQotLyogeXlfdHJ5X05VTF90cmFucyAtIHRyeSB0byBtYWtl
IGEgdHJhbnNpdGlvbiBvbiB0aGUgTlVMIGNoYXJhY3RlcgotICoKLSAqIHN5bm9wc2lzCi0gKglu
ZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggY3VycmVudF9zdGF0ZSApOwotICovCi0gICAg
c3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAgKHl5X3N0YXRlX3R5cGUgeXlf
Y3VycmVudF9zdGF0ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLQlyZWdpc3RlciBpbnQgeXlf
aXNfamFtOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsgLyogVGhpcyB2YXIgbWF5IGJlIHVudXNlZCBkZXBlbmRpbmcgdXBvbiBvcHRpb25z
LiAqLwotCXJlZ2lzdGVyIGNoYXIgKnl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwotCi0JcmVnaXN0
ZXIgWVlfQ0hBUiB5eV9jID0gMTsKLQlpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSAp
Ci0JCXsKLQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7
Ci0JCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOwotCQl9Ci0Jd2hpbGUgKCB5
eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3Rh
dGUgKQotCQl7Ci0JCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9z
dGF0ZV07Ci0JCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NDMgKQotCQkJeXlfYyA9IHl5X21l
dGFbKHVuc2lnbmVkIGludCkgeXlfY107Ci0JCX0KLQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0
W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKLQl5eV9p
c19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9PSA0NDIpOwotCi0JcmV0dXJuIHl5X2lzX2phbSA/
IDAgOiB5eV9jdXJyZW50X3N0YXRlOwotfQotCi0jaWZuZGVmIFlZX05PX0lOUFVUCi0jaWZkZWYg
X19jcGx1c3BsdXMKLSAgICBzdGF0aWMgaW50IHl5aW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lcikK
LSNlbHNlCi0gICAgc3RhdGljIGludCBpbnB1dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLSNlbmRp
ZgotCi17Ci0JaW50IGM7Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOwotCi0JKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFy
OwotCi0JaWYgKCAqeXlnLT55eV9jX2J1Zl9wID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCi0J
CXsKLQkJLyogeXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2FudCB0
byByZXR1cm4uCi0JCSAqIElmIHRoaXMgb2NjdXJzICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFjdGVy
cywgdGhlbiBpdCdzIGEKLQkJICogdmFsaWQgTlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0IHRo
ZSBlbmQgb2YgdGhlIGJ1ZmZlci4KLQkJICovCi0JCWlmICggeXlnLT55eV9jX2J1Zl9wIDwgJllZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQotCQkJ
LyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLwotCQkJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7
Ci0KLQkJZWxzZQotCQkJeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8KLQkJCXl5X3NpemVfdCBvZmZz
ZXQgPSB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHI7Ci0JCQkrK3l5Zy0+eXlfY19i
dWZfcDsKLQotCQkJc3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCi0J
CQkJewotCQkJCWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgotCQkJCQkvKiBUaGlzIGhhcHBlbnMg
YmVjYXVzZSB5eV9nX25fYigpCi0JCQkJCSAqIHNlZXMgdGhhdCB3ZSd2ZSBhY2N1bXVsYXRlZCBh
Ci0JCQkJCSAqIHRva2VuIGFuZCBmbGFncyB0aGF0IHdlIG5lZWQgdG8KLQkJCQkJICogdHJ5IG1h
dGNoaW5nIHRoZSB0b2tlbiBiZWZvcmUKLQkJCQkJICogcHJvY2VlZGluZy4gIEJ1dCBmb3IgaW5w
dXQoKSwKLQkJCQkJICogdGhlcmUncyBubyBtYXRjaGluZyB0byBjb25zaWRlci4KLQkJCQkJICog
U28gY29udmVydCB0aGUgRU9CX0FDVF9MQVNUX01BVENICi0JCQkJCSAqIHRvIEVPQl9BQ1RfRU5E
X09GX0ZJTEUuCi0JCQkJCSAqLwotCi0JCQkJCS8qIFJlc2V0IGJ1ZmZlciBzdGF0dXMuICovCi0J
CQkJCXl5cmVzdGFydCh5eWluICx5eXNjYW5uZXIpOwotCi0JCQkJCS8qRkFMTFRIUk9VR0gqLwot
Ci0JCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgotCQkJCQl7Ci0JCQkJCWlmICggeXl3cmFw
KHl5c2Nhbm5lciApICkKLQkJCQkJCXJldHVybiBFT0Y7Ci0KLQkJCQkJaWYgKCAhIHl5Zy0+eXlf
ZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKLQkJCQkJCVlZX05FV19GSUxFOwotI2lmZGVmIF9f
Y3BsdXNwbHVzCi0JCQkJCXJldHVybiB5eWlucHV0KHl5c2Nhbm5lcik7Ci0jZWxzZQotCQkJCQly
ZXR1cm4gaW5wdXQoeXlzY2FubmVyKTsKLSNlbmRpZgotCQkJCQl9Ci0KLQkJCQljYXNlIEVPQl9B
Q1RfQ09OVElOVUVfU0NBTjoKLQkJCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRy
ICsgb2Zmc2V0OwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCWMgPSAqKHVuc2ln
bmVkIGNoYXIgKikgeXlnLT55eV9jX2J1Zl9wOwkvKiBjYXN0IGZvciA4LWJpdCBjaGFyJ3MgKi8K
LQkqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsJLyogcHJlc2VydmUgeXl0ZXh0ICovCi0JeXlnLT55
eV9ob2xkX2NoYXIgPSAqKyt5eWctPnl5X2NfYnVmX3A7Ci0KLQlpZiAoIGMgPT0gJ1xuJyApCi0J
CSAgIAotICAgIGRveyB5eWxpbmVubysrOwotICAgICAgICB5eWNvbHVtbj0wOwotICAgIH13aGls
ZSgwKQotOwotCi0JcmV0dXJuIGM7Ci19Ci0jZW5kaWYJLyogaWZuZGVmIFlZX05PX0lOUFVUICov
Ci0KLS8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgc3RyZWFtLgot
ICogQHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCi0gKiBAcGFyYW0geXlzY2Fu
bmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEBub3RlIFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qg
cmVzZXQgdGhlIHN0YXJ0IGNvbmRpdGlvbiB0byBAYyBJTklUSUFMIC4KLSAqLwotICAgIHZvaWQg
eXlyZXN0YXJ0ICAoRklMRSAqIGlucHV0X2ZpbGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0g
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwot
Ci0JaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7Ci0gICAgICAgIHl5ZW5zdXJlX2J1ZmZlcl9z
dGFjayAoeXlzY2FubmVyKTsKLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KLSAgICAgICAg
ICAgIHl5X2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsKLQl9Ci0K
LQl5eV9pbml0X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUixpbnB1dF9maWxlICx5eXNjYW5uZXIp
OwotCXl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotfQotCi0vKiogU3dpdGNoIHRv
IGEgZGlmZmVyZW50IGlucHV0IGJ1ZmZlci4KLSAqIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcg
aW5wdXQgYnVmZmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0g
Ki8KLSAgICB2b2lkIHl5X3N3aXRjaF90b19idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIG5ld19i
dWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0JLyogVE9ETy4gV2Ugc2hvdWxkIGJl
IGFibGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5Ci0JICogd2l0aAotCSAq
CQl5eXBvcF9idWZmZXJfc3RhdGUoKTsKLQkgKgkJeXlwdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVm
ZmVyKTsKLSAgICAgKi8KLQl5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7Ci0JaWYg
KCBZWV9DVVJSRU5UX0JVRkZFUiA9PSBuZXdfYnVmZmVyICkKLQkJcmV0dXJuOwotCi0JaWYgKCBZ
WV9DVVJSRU5UX0JVRkZFUiApCi0JCXsKLQkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBv
bGQgYnVmZmVyLiAqLwotCQkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7Ci0J
CVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsK
LQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJz
OwotCQl9Ci0KLQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOwotCXl5X2xv
YWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotCi0JLyogV2UgZG9uJ3QgYWN0dWFsbHkga25v
dyB3aGV0aGVyIHdlIGRpZCB0aGlzIHN3aXRjaCBkdXJpbmcKLQkgKiBFT0YgKHl5d3JhcCgpKSBw
cm9jZXNzaW5nLCBidXQgdGhlIG9ubHkgdGltZSB0aGlzIGZsYWcKLQkgKiBpcyBsb29rZWQgYXQg
aXMgYWZ0ZXIgeXl3cmFwKCkgaXMgY2FsbGVkLCBzbyBpdCdzIHNhZmUKLQkgKiB0byBnbyBhaGVh
ZCBhbmQgYWx3YXlzIHNldCBpdC4KLQkgKi8KLQl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29u
X2VvZiA9IDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHl5X2xvYWRfYnVmZmVyX3N0YXRlICAoeXlzY2Fu
X3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKLQl5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X25fY2hhcnM7Ci0JeXlnLT55eXRleHRfcHRyID0geXlnLT55eV9jX2J1Zl9wID0g
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zOwotCXl5aW4gPSBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGU7Ci0JeXlnLT55eV9ob2xkX2NoYXIgPSAqeXln
LT55eV9jX2J1Zl9wOwotfQotCi0vKiogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gaW5wdXQg
YnVmZmVyIHN0YXRlLgotICogQHBhcmFtIGZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCi0gKiBAcGFy
YW0gc2l6ZSBUaGUgY2hhcmFjdGVyIGJ1ZmZlciBzaXplIGluIGJ5dGVzLiBXaGVuIGluIGRvdWJ0
LCB1c2UgQGMgWVlfQlVGX1NJWkUuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9i
amVjdC4KLSAqIEByZXR1cm4gdGhlIGFsbG9jYXRlZCBidWZmZXIgc3RhdGUuCi0gKi8KLSAgICBZ
WV9CVUZGRVJfU1RBVEUgeXlfY3JlYXRlX2J1ZmZlciAgKEZJTEUgKiBmaWxlLCBpbnQgIHNpemUg
LCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0JWVlfQlVGRkVSX1NUQVRFIGI7Ci0gICAgCi0JYiA9
IChZWV9CVUZGRVJfU1RBVEUpIHl5YWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRl
ICkgLHl5c2Nhbm5lciApOwotCWlmICggISBiICkKLQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2Yg
ZHluYW1pYyBtZW1vcnkgaW4geXlfY3JlYXRlX2J1ZmZlcigpIiApOwotCi0JYi0+eXlfYnVmX3Np
emUgPSBzaXplOwotCi0JLyogeXlfY2hfYnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2Vy
IHRoYW4gdGhlIHNpemUgZ2l2ZW4gYmVjYXVzZQotCSAqIHdlIG5lZWQgdG8gcHV0IGluIDIgZW5k
LW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLgotCSAqLwotCWItPnl5X2NoX2J1ZiA9IChjaGFyICopIHl5
YWxsb2MoYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKLQlpZiAoICEgYi0+eXlfY2hf
YnVmICkKLQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfY3Jl
YXRlX2J1ZmZlcigpIiApOwotCi0JYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7Ci0KLQl5eV9pbml0
X2J1ZmZlcihiLGZpbGUgLHl5c2Nhbm5lcik7Ci0KLQlyZXR1cm4gYjsKLX0KLQotLyoqIERlc3Ry
b3kgdGhlIGJ1ZmZlci4KLSAqIEBwYXJhbSBiIGEgYnVmZmVyIGNyZWF0ZWQgd2l0aCB5eV9jcmVh
dGVfYnVmZmVyKCkKLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICov
Ci0gICAgdm9pZCB5eV9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOwotCi0JaWYgKCAhIGIgKQotCQlyZXR1cm47Ci0KLQlpZiAoIGIgPT0g
WVlfQ1VSUkVOVF9CVUZGRVIgKSAvKiBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgcG9wIGhlcmUuICov
Ci0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IChZWV9CVUZGRVJfU1RBVEUpIDA7Ci0KLQlp
ZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQotCQl5eWZyZWUoKHZvaWQgKikgYi0+eXlfY2hfYnVm
ICx5eXNjYW5uZXIgKTsKLQotCXl5ZnJlZSgodm9pZCAqKSBiICx5eXNjYW5uZXIgKTsKLX0KLQot
LyogSW5pdGlhbGl6ZXMgb3IgcmVpbml0aWFsaXplcyBhIGJ1ZmZlci4KLSAqIFRoaXMgZnVuY3Rp
b24gaXMgc29tZXRpbWVzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSBidWZmZXIs
Ci0gKiBzdWNoIGFzIGR1cmluZyBhIHl5cmVzdGFydCgpIG9yIGF0IEVPRi4KLSAqLwotICAgIHN0
YXRpYyB2b2lkIHl5X2luaXRfYnVmZmVyICAoWVlfQlVGRkVSX1NUQVRFICBiLCBGSUxFICogZmls
ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLQotewotCWludCBvZXJybm8gPSBlcnJubzsKLSAgICBz
dHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLQl5
eV9mbHVzaF9idWZmZXIoYiAseXlzY2FubmVyKTsKLQotCWItPnl5X2lucHV0X2ZpbGUgPSBmaWxl
OwotCWItPnl5X2ZpbGxfYnVmZmVyID0gMTsKLQotICAgIC8qIElmIGIgaXMgdGhlIGN1cnJlbnQg
YnVmZmVyLCB0aGVuIHl5X2luaXRfYnVmZmVyIHdhcyBfcHJvYmFibHlfCi0gICAgICogY2FsbGVk
IGZyb20geXlyZXN0YXJ0KCkgb3IgdGhyb3VnaCB5eV9nZXRfbmV4dF9idWZmZXIuCi0gICAgICog
SW4gdGhhdCBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIHJlc2V0IHRoZSBsaW5lbm8gb3IgY29sdW1u
LgotICAgICAqLwotICAgIGlmIChiICE9IFlZX0NVUlJFTlRfQlVGRkVSKXsKLSAgICAgICAgYi0+
eXlfYnNfbGluZW5vID0gMTsKLSAgICAgICAgYi0+eXlfYnNfY29sdW1uID0gMDsKLSAgICB9Ci0K
LSAgICAgICAgYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAwOwotICAgIAotCWVycm5vID0gb2Vycm5v
OwotfQotCi0vKiogRGlzY2FyZCBhbGwgYnVmZmVyZWQgY2hhcmFjdGVycy4gT24gdGhlIG5leHQg
c2NhbiwgWVlfSU5QVVQgd2lsbCBiZSBjYWxsZWQuCi0gKiBAcGFyYW0gYiB0aGUgYnVmZmVyIHN0
YXRlIHRvIGJlIGZsdXNoZWQsIHVzdWFsbHkgQGMgWVlfQ1VSUkVOVF9CVUZGRVIuCi0gKiBAcGFy
YW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotICAgIHZvaWQgeXlfZmx1c2hf
YnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCWlm
ICggISBiICkKLQkJcmV0dXJuOwotCi0JYi0+eXlfbl9jaGFycyA9IDA7Ci0KLQkvKiBXZSBhbHdh
eXMgbmVlZCB0d28gZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLiAgVGhlIGZpcnN0IGNhdXNlcwot
CSAqIGEgdHJhbnNpdGlvbiB0byB0aGUgZW5kLW9mLWJ1ZmZlciBzdGF0ZS4gIFRoZSBzZWNvbmQg
Y2F1c2VzCi0JICogYSBqYW0gaW4gdGhhdCBzdGF0ZS4KLQkgKi8KLQliLT55eV9jaF9idWZbMF0g
PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0JYi0+eXlfY2hfYnVmWzFdID0gWVlfRU5EX09GX0JV
RkZFUl9DSEFSOwotCi0JYi0+eXlfYnVmX3BvcyA9ICZiLT55eV9jaF9idWZbMF07Ci0KLQliLT55
eV9hdF9ib2wgPSAxOwotCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOwotCi0J
aWYgKCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkKLQkJeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlz
Y2FubmVyICk7Ci19Ci0KLS8qKiBQdXNoZXMgdGhlIG5ldyBzdGF0ZSBvbnRvIHRoZSBzdGFjay4g
VGhlIG5ldyBzdGF0ZSBiZWNvbWVzCi0gKiAgdGhlIGN1cnJlbnQgc3RhdGUuIFRoaXMgZnVuY3Rp
b24gd2lsbCBhbGxvY2F0ZSB0aGUgc3RhY2sKLSAqICBpZiBuZWNlc3NhcnkuCi0gKiAgQHBhcmFt
IG5ld19idWZmZXIgVGhlIG5ldyBzdGF0ZS4KLSAqICBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2Fu
bmVyIG9iamVjdC4KLSAqLwotdm9pZCB5eXB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RB
VEUgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0JaWYgKG5ld19idWZmZXIg
PT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JeXllbnN1cmVfYnVmZmVyX3N0YWNrKHl5c2Nhbm5lcik7
Ci0KLQkvKiBUaGlzIGJsb2NrIGlzIGNvcGllZCBmcm9tIHl5X3N3aXRjaF90b19idWZmZXIuICov
Ci0JaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCi0JCXsKLQkJLyogRmx1c2ggb3V0IGluZm9ybWF0
aW9uIGZvciBvbGQgYnVmZmVyLiAqLwotCQkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xk
X2NoYXI7Ci0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlf
Y19idWZfcDsKLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55
eV9uX2NoYXJzOwotCQl9Ci0KLQkvKiBPbmx5IHB1c2ggaWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNl
LCByZXBsYWNlIHRvcC4gKi8KLQlpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpCi0JCXl5Zy0+eXlfYnVm
ZmVyX3N0YWNrX3RvcCsrOwotCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7
Ci0KLQkvKiBjb3BpZWQgZnJvbSB5eV9zd2l0Y2hfdG9fYnVmZmVyLiAqLwotCXl5X2xvYWRfYnVm
ZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9m
ID0gMTsKLX0KLQotLyoqIFJlbW92ZXMgYW5kIGRlbGV0ZXMgdGhlIHRvcCBvZiB0aGUgc3RhY2ss
IGlmIHByZXNlbnQuCi0gKiAgVGhlIG5leHQgZWxlbWVudCBiZWNvbWVzIHRoZSBuZXcgdG9wLgot
ICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi12b2lkIHl5cG9w
X2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQlpZiAoIVlZX0NVUlJFTlRf
QlVGRkVSKQotCQlyZXR1cm47Ci0KLQl5eV9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVS
ICx5eXNjYW5uZXIpOwotCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7Ci0JaWYgKHl5
Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+IDApCi0JCS0teXlnLT55eV9idWZmZXJfc3RhY2tfdG9w
OwotCi0JaWYgKFlZX0NVUlJFTlRfQlVGRkVSKSB7Ci0JCXl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5
c2Nhbm5lciApOwotCQl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Ci0JfQot
fQotCi0vKiBBbGxvY2F0ZXMgdGhlIHN0YWNrIGlmIGl0IGRvZXMgbm90IGV4aXN0LgotICogIEd1
YXJhbnRlZXMgc3BhY2UgZm9yIGF0IGxlYXN0IG9uZSBwdXNoLgotICovCi1zdGF0aWMgdm9pZCB5
eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLQl5eV9zaXplX3Qg
bnVtX3RvX2FsbG9jOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKLQotCWlmICgheXlnLT55eV9idWZmZXJfc3RhY2spIHsKLQotCQkvKiBG
aXJzdCBhbGxvY2F0aW9uIGlzIGp1c3QgZm9yIDIgZWxlbWVudHMsIHNpbmNlIHdlIGRvbid0IGtu
b3cgaWYgdGhpcwotCQkgKiBzY2FubmVyIHdpbGwgZXZlbiBuZWVkIGEgc3RhY2suIFdlIHVzZSAy
IGluc3RlYWQgb2YgMSB0byBhdm9pZCBhbgotCQkgKiBpbW1lZGlhdGUgcmVhbGxvYyBvbiB0aGUg
bmV4dCBjYWxsLgotICAgICAgICAgKi8KLQkJbnVtX3RvX2FsbG9jID0gMTsKLQkJeXlnLT55eV9i
dWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXl5YWxsb2MKLQkJCQkJCQkJ
KG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKLQkJCQkJCQkJ
LCB5eXNjYW5uZXIpOwotCQlpZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQotCQkJWVlfRkFU
QUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXllbnN1cmVfYnVmZmVyX3N0YWNr
KCkiICk7Ci0JCQkJCQkJCSAgCi0JCW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjaywgMCwgbnVt
X3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7Ci0JCQkJCi0JCXl5
Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKLQkJeXlnLT55eV9idWZmZXJf
c3RhY2tfdG9wID0gMDsKLQkJcmV0dXJuOwotCX0KLQotCWlmICh5eWctPnl5X2J1ZmZlcl9zdGFj
a190b3AgPj0gKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCkgLSAxKXsKLQotCQkvKiBJbmNyZWFz
ZSB0aGUgYnVmZmVyIHRvIHByZXBhcmUgZm9yIGEgcG9zc2libGUgcHVzaC4gKi8KLQkJaW50IGdy
b3dfc2l6ZSA9IDggLyogYXJiaXRyYXJ5IGdyb3cgc2l6ZSAqLzsKLQotCQludW1fdG9fYWxsb2Mg
PSB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggKyBncm93X3NpemU7Ci0JCXl5Zy0+eXlfYnVmZmVy
X3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKil5eXJlYWxsb2MKLQkJCQkJCQkJKHl5
Zy0+eXlfYnVmZmVyX3N0YWNrLAotCQkJCQkJCQludW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0
IHl5X2J1ZmZlcl9zdGF0ZSopCi0JCQkJCQkJCSwgeXlzY2FubmVyKTsKLQkJaWYgKCAhIHl5Zy0+
eXlfYnVmZmVyX3N0YWNrICkKLQkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVt
b3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOwotCi0JCS8qIHplcm8gb25seSB0aGUg
bmV3IHNsb3RzLiovCi0JCW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+eXlfYnVm
ZmVyX3N0YWNrX21heCwgMCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3Rh
dGUqKSk7Ci0JCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKLQl9Ci19
Ci0KLS8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gZGlyZWN0bHkgZnJv
bSBhIHVzZXItc3BlY2lmaWVkIGNoYXJhY3RlciBidWZmZXIuCi0gKiBAcGFyYW0gYmFzZSB0aGUg
Y2hhcmFjdGVyIGJ1ZmZlcgotICogQHBhcmFtIHNpemUgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhl
IGNoYXJhY3RlciBidWZmZXIKLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0
LgotICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuIAot
ICovCi1ZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9idWZmZXIgIChjaGFyICogYmFzZSwgeXlfc2l6
ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotCVlZX0JVRkZFUl9TVEFURSBiOwot
ICAgIAotCWlmICggc2l6ZSA8IDIgfHwKLQkgICAgIGJhc2Vbc2l6ZS0yXSAhPSBZWV9FTkRfT0Zf
QlVGRkVSX0NIQVIgfHwKLQkgICAgIGJhc2Vbc2l6ZS0xXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NI
QVIgKQotCQkvKiBUaGV5IGZvcmdvdCB0byBsZWF2ZSByb29tIGZvciB0aGUgRU9CJ3MuICovCi0J
CXJldHVybiAwOwotCi0JYiA9IChZWV9CVUZGRVJfU1RBVEUpIHl5YWxsb2Moc2l6ZW9mKCBzdHJ1
Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciApOwotCWlmICggISBiICkKLQkJWVlfRkFU
QUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfc2Nhbl9idWZmZXIoKSIgKTsK
LQotCWItPnl5X2J1Zl9zaXplID0gc2l6ZSAtIDI7CS8qICItIDIiIHRvIHRha2UgY2FyZSBvZiBF
T0IncyAqLwotCWItPnl5X2J1Zl9wb3MgPSBiLT55eV9jaF9idWYgPSBiYXNlOwotCWItPnl5X2lz
X291cl9idWZmZXIgPSAwOwotCWItPnl5X2lucHV0X2ZpbGUgPSAwOwotCWItPnl5X25fY2hhcnMg
PSBiLT55eV9idWZfc2l6ZTsKLQliLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7Ci0JYi0+eXlfYXRf
Ym9sID0gMTsKLQliLT55eV9maWxsX2J1ZmZlciA9IDA7Ci0JYi0+eXlfYnVmZmVyX3N0YXR1cyA9
IFlZX0JVRkZFUl9ORVc7Ci0KLQl5eV9zd2l0Y2hfdG9fYnVmZmVyKGIgLHl5c2Nhbm5lciApOwot
Ci0JcmV0dXJuIGI7Ci19Ci0KLS8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNj
YW4gYSBzdHJpbmcuIFRoZSBuZXh0IGNhbGwgdG8geXlsZXgoKSB3aWxsCi0gKiBzY2FuIGZyb20g
YSBAZSBjb3B5IG9mIEBhIHN0ci4KLSAqIEBwYXJhbSB5eXN0ciBhIE5VTC10ZXJtaW5hdGVkIHN0
cmluZyB0byBzY2FuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAq
IEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgotICogQG5v
dGUgSWYgeW91IHdhbnQgdG8gc2NhbiBieXRlcyB0aGF0IG1heSBjb250YWluIE5VTCB2YWx1ZXMs
IHRoZW4gdXNlCi0gKiAgICAgICB5eV9zY2FuX2J5dGVzKCkgaW5zdGVhZC4KLSAqLwotWVlfQlVG
RkVSX1NUQVRFIHl5X3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0ciAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKLXsKLSAgICAKLQlyZXR1cm4geXlfc2Nhbl9ieXRlcyh5eXN0cixzdHJsZW4o
eXlzdHIpICx5eXNjYW5uZXIpOwotfQotCi0vKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0
ZSB0byBzY2FuIHRoZSBnaXZlbiBieXRlcy4gVGhlIG5leHQgY2FsbCB0byB5eWxleCgpIHdpbGwK
LSAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgYnl0ZXMuCi0gKiBAcGFyYW0gYnl0ZXMgdGhl
IGJ5dGUgYnVmZmVyIHRvIHNjYW4KLSAqIEBwYXJhbSBsZW4gdGhlIG51bWJlciBvZiBieXRlcyBp
biB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMuCi0gKiBAcGFyYW0geXlzY2FubmVy
IFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZm
ZXIgc3RhdGUgb2JqZWN0LgotICovCi1ZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAgKHl5
Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIHl5X3NpemVfdCAgX3l5Ynl0ZXNfbGVuICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQotewotCVlZX0JVRkZFUl9TVEFURSBiOwotCWNoYXIgKmJ1ZjsKLQl5eV9zaXpl
X3QgbiwgaTsKLSAgICAKLQkvKiBHZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwgaW5jbHVkaW5n
IHNwYWNlIGZvciB0cmFpbGluZyBFT0Incy4gKi8KLQluID0gX3l5Ynl0ZXNfbGVuICsgMjsKLQli
dWYgPSAoY2hhciAqKSB5eWFsbG9jKG4gLHl5c2Nhbm5lciApOwotCWlmICggISBidWYgKQotCQlZ
WV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9zY2FuX2J5dGVzKCki
ICk7Ci0KLQlmb3IgKCBpID0gMDsgaSA8IF95eWJ5dGVzX2xlbjsgKytpICkKLQkJYnVmW2ldID0g
eXlieXRlc1tpXTsKLQotCWJ1ZltfeXlieXRlc19sZW5dID0gYnVmW195eWJ5dGVzX2xlbisxXSA9
IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLQotCWIgPSB5eV9zY2FuX2J1ZmZlcihidWYsbiAseXlz
Y2FubmVyKTsKLQlpZiAoICEgYiApCi0JCVlZX0ZBVEFMX0VSUk9SKCAiYmFkIGJ1ZmZlciBpbiB5
eV9zY2FuX2J5dGVzKCkiICk7Ci0KLQkvKiBJdCdzIG9rYXkgdG8gZ3JvdyBldGMuIHRoaXMgYnVm
ZmVyLCBhbmQgd2Ugc2hvdWxkIHRocm93IGl0Ci0JICogYXdheSB3aGVuIHdlJ3JlIGRvbmUuCi0J
ICovCi0JYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7Ci0KLQlyZXR1cm4gYjsKLX0KLQotI2lmbmRl
ZiBZWV9FWElUX0ZBSUxVUkUKLSNkZWZpbmUgWVlfRVhJVF9GQUlMVVJFIDIKLSNlbmRpZgotCi1z
dGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyKiBtc2cgLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCi17Ci0gICAgCSh2b2lkKSBmcHJpbnRmKCBzdGRlcnIsICIlc1xuIiwgbXNnICk7
Ci0JZXhpdCggWVlfRVhJVF9GQUlMVVJFICk7Ci19Ci0KLS8qIFJlZGVmaW5lIHl5bGVzcygpIHNv
IGl0IHdvcmtzIGluIHNlY3Rpb24gMyBjb2RlLiAqLwotCi0jdW5kZWYgeXlsZXNzCi0jZGVmaW5l
IHl5bGVzcyhuKSBcCi0JZG8gXAotCQl7IFwKLQkJLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcg
dXAgeXl0ZXh0LiAqLyBcCi0gICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCi0g
ICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVzc19tYWNyb19hcmcpO1wKLQkJeXl0ZXh0W3l5bGVu
Z10gPSB5eWctPnl5X2hvbGRfY2hhcjsgXAotCQl5eWctPnl5X2NfYnVmX3AgPSB5eXRleHQgKyB5
eWxlc3NfbWFjcm9fYXJnOyBcCi0JCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZf
cDsgXAotCQkqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsgXAotCQl5eWxlbmcgPSB5eWxlc3NfbWFj
cm9fYXJnOyBcCi0JCX0gXAotCXdoaWxlICggMCApCi0KLS8qIEFjY2Vzc29yICBtZXRob2RzIChn
ZXQvc2V0IGZ1bmN0aW9ucykgdG8gc3RydWN0IG1lbWJlcnMuICovCi0KLS8qKiBHZXQgdGhlIHVz
ZXItZGVmaW5lZCBkYXRhIGZvciB0aGlzIHNjYW5uZXIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRo
ZSBzY2FubmVyIG9iamVjdC4KLSAqLwotWVlfRVhUUkFfVFlQRSB5eWdldF9leHRyYSAgKHl5c2Nh
bl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5ZXh0cmE7Ci19Ci0KLS8qKiBHZXQgdGhl
IGN1cnJlbnQgbGluZSBudW1iZXIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9i
amVjdC4KLSAqLwotaW50IHl5Z2V0X2xpbmVubyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0g
ICAgCi0gICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSKQotICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgCi0gICAgcmV0dXJuIHl5bGluZW5vOwotfQotCi0vKiogR2V0IHRoZSBjdXJyZW50
IGNvbHVtbiBudW1iZXIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4K
LSAqLwotaW50IHl5Z2V0X2NvbHVtbiAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1
Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgCi0g
ICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgCi0gICAgcmV0dXJuIHl5Y29sdW1uOwotfQotCi0vKiogR2V0IHRoZSBpbnB1dCBzdHJlYW0u
Ci0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotRklMRSAqeXln
ZXRfaW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eWluOwotfQotCi0v
KiogR2V0IHRoZSBvdXRwdXQgc3RyZWFtLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5l
ciBvYmplY3QuCi0gKi8KLUZJTEUgKnl5Z2V0X291dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsK
LSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
Ci0gICAgcmV0dXJuIHl5b3V0OwotfQotCi0vKiogR2V0IHRoZSBsZW5ndGggb2YgdGhlIGN1cnJl
bnQgdG9rZW4uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwot
eXlfc2l6ZV90IHl5Z2V0X2xlbmcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVy
biB5eWxlbmc7Ci19Ci0KLS8qKiBHZXQgdGhlIGN1cnJlbnQgdG9rZW4uCi0gKiBAcGFyYW0geXlz
Y2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotCi1jaGFyICp5eWdldF90ZXh0ICAoeXlz
Y2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXl0ZXh0OwotfQotCi0vKiogU2V0IHRo
ZSB1c2VyLWRlZmluZWQgZGF0YS4gVGhpcyBkYXRhIGlzIG5ldmVyIHRvdWNoZWQgYnkgdGhlIHNj
YW5uZXIuCi0gKiBAcGFyYW0gdXNlcl9kZWZpbmVkIFRoZSBkYXRhIHRvIGJlIGFzc29jaWF0ZWQg
d2l0aCB0aGlzIHNjYW5uZXIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVj
dC4KLSAqLwotdm9pZCB5eXNldF9leHRyYSAoWVlfRVhUUkFfVFlQRSAgdXNlcl9kZWZpbmVkICwg
eXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eWV4dHJhID0gdXNlcl9kZWZpbmVkIDsKLX0K
LQotLyoqIFNldCB0aGUgY3VycmVudCBsaW5lIG51bWJlci4KLSAqIEBwYXJhbSBsaW5lX251bWJl
cgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLXZvaWQgeXlz
ZXRfbGluZW5vIChpbnQgIGxpbmVfbnVtYmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQot
ICAgICAgICAvKiBsaW5lbm8gaXMgb25seSB2YWxpZCBpZiBhbiBpbnB1dCBidWZmZXIgZXhpc3Rz
LiAqLwotICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUiApCi0gICAgICAgICAgIHl5X2Zh
dGFsX2Vycm9yKCAieXlzZXRfbGluZW5vIGNhbGxlZCB3aXRoIG5vIGJ1ZmZlciIgLCB5eXNjYW5u
ZXIpOyAKLSAgICAKLSAgICB5eWxpbmVubyA9IGxpbmVfbnVtYmVyOwotfQotCi0vKiogU2V0IHRo
ZSBjdXJyZW50IGNvbHVtbi4KLSAqIEBwYXJhbSBsaW5lX251bWJlcgotICogQHBhcmFtIHl5c2Nh
bm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLXZvaWQgeXlzZXRfY29sdW1uIChpbnQgIGNv
bHVtbl9ubyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICAgICAgLyogY29sdW1uIGlz
IG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8KLSAgICAgICAgaWYgKCEg
WVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICAgICB5eV9mYXRhbF9lcnJvciggInl5c2V0X2Nv
bHVtbiBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2FubmVyKTsgCi0gICAgCi0gICAgeXlj
b2x1bW4gPSBjb2x1bW5fbm87Ci19Ci0KLS8qKiBTZXQgdGhlIGlucHV0IHN0cmVhbS4gVGhpcyBk
b2VzIG5vdCBkaXNjYXJkIHRoZSBjdXJyZW50Ci0gKiBpbnB1dCBidWZmZXIuCi0gKiBAcGFyYW0g
aW5fc3RyIEEgcmVhZGFibGUgc3RyZWFtLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5l
ciBvYmplY3QuCi0gKiBAc2VlIHl5X3N3aXRjaF90b19idWZmZXIKLSAqLwotdm9pZCB5eXNldF9p
biAoRklMRSAqICBpbl9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5aW4gPSBp
bl9zdHIgOwotfQotCi12b2lkIHl5c2V0X291dCAoRklMRSAqICBvdXRfc3RyICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKLSAgICB5eW91dCA9IG91dF9zdHIgOwotfQotCi1pbnQgeXlnZXRfZGVi
dWcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eV9mbGV4X2RlYnVnOwot
fQotCi12b2lkIHl5c2V0X2RlYnVnIChpbnQgIGJkZWJ1ZyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikK
LXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7Ci0gICAgeXlfZmxleF9kZWJ1ZyA9IGJkZWJ1ZyA7Ci19Ci0KLS8qIEFjY2Vzc29yIG1ldGhv
ZHMgZm9yIHl5bHZhbCBhbmQgeXlsbG9jICovCi0KLVlZU1RZUEUgKiB5eWdldF9sdmFsICAoeXlz
Y2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlsdmFsOwotfQotCi12b2lkIHl5c2V0
X2x2YWwgKFlZU1RZUEUgKiAgeXlsdmFsX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewot
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
LSAgICB5eWx2YWwgPSB5eWx2YWxfcGFyYW07Ci19Ci0KLVlZTFRZUEUgKnl5Z2V0X2xsb2MgICh5
eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eWxsb2M7Ci19Ci0gICAgCi12b2lk
IHl5c2V0X2xsb2MgKFlZTFRZUEUgKiAgeXlsbG9jX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVy
KQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKLSAgICB5eWxsb2MgPSB5eWxsb2NfcGFyYW07Ci19Ci0gICAgCi0vKiBVc2VyLXZpc2li
bGUgQVBJICovCi0KLS8qIHl5bGV4X2luaXQgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGNyZWF0ZXMg
dGhlIHNjYW5uZXIgaXRzZWxmLCBzbyBpdCBpcwotICogdGhlIE9OTFkgcmVlbnRyYW50IGZ1bmN0
aW9uIHRoYXQgZG9lc24ndCB0YWtlIHRoZSBzY2FubmVyIGFzIHRoZSBsYXN0IGFyZ3VtZW50Lgot
ICogVGhhdCdzIHdoeSB3ZSBleHBsaWNpdGx5IGhhbmRsZSB0aGUgZGVjbGFyYXRpb24sIGluc3Rl
YWQgb2YgdXNpbmcgb3VyIG1hY3Jvcy4KLSAqLwotCi1pbnQgeXlsZXhfaW5pdCh5eXNjYW5fdCog
cHRyX3l5X2dsb2JhbHMpCi0KLXsKLSAgICBpZiAocHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7Ci0g
ICAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICAq
cHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3QpIHl5YWxsb2MgKCBzaXplb2YoIHN0cnVjdCB5eWd1
dHNfdCApLCBOVUxMICk7Ci0KLSAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwpewotICAg
ICAgICBlcnJubyA9IEVOT01FTTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgLyog
Qnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2UgYnVncyBpbiB5eV9pbml0X2dsb2JhbHMuIExl
YXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLwotICAgIG1lbXNldCgqcHRyX3l5X2dsb2JhbHMs
MHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7Ci0KLSAgICByZXR1cm4geXlfaW5pdF9nbG9i
YWxzICggKnB0cl95eV9nbG9iYWxzICk7Ci19Ci0KLS8qIHl5bGV4X2luaXRfZXh0cmEgaGFzIHRo
ZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgeXlsZXhfaW5pdCwgYnV0IGZvbGxvd3MgdGhlCi0gKiBj
b252ZW50aW9uIG9mIHRha2luZyB0aGUgc2Nhbm5lciBhcyB0aGUgbGFzdCBhcmd1bWVudC4gTm90
ZSBob3dldmVyLCB0aGF0Ci0gKiB0aGlzIGlzIGEgKnBvaW50ZXIqIHRvIGEgc2Nhbm5lciwgYXMg
aXQgd2lsbCBiZSBhbGxvY2F0ZWQgYnkgdGhpcyBjYWxsIChhbmQKLSAqIGlzIHRoZSByZWFzb24s
IHRvbywgd2h5IHRoaXMgZnVuY3Rpb24gYWxzbyBtdXN0IGhhbmRsZSBpdHMgb3duIGRlY2xhcmF0
aW9uKS4KLSAqIFRoZSB1c2VyIGRlZmluZWQgdmFsdWUgaW4gdGhlIGZpcnN0IGFyZ3VtZW50IHdp
bGwgYmUgYXZhaWxhYmxlIHRvIHl5YWxsb2MgaW4KLSAqIHRoZSB5eWV4dHJhIGZpZWxkLgotICov
Ci0KLWludCB5eWxleF9pbml0X2V4dHJhKFlZX0VYVFJBX1RZUEUgeXlfdXNlcl9kZWZpbmVkLHl5
c2Nhbl90KiBwdHJfeXlfZ2xvYmFscyApCi0KLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgZHVtbXlf
eXlndXRzOwotCi0gICAgeXlzZXRfZXh0cmEgKHl5X3VzZXJfZGVmaW5lZCwgJmR1bW15X3l5Z3V0
cyk7Ci0KLSAgICBpZiAocHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7Ci0gICAgICAgIGVycm5vID0g
RUlOVkFMOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0JCi0gICAgKnB0cl95eV9nbG9iYWxz
ID0gKHl5c2Nhbl90KSB5eWFsbG9jICggc2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3QgKSwgJmR1bW15
X3l5Z3V0cyApOwotCQotICAgIGlmICgqcHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7Ci0gICAgICAg
IGVycm5vID0gRU5PTUVNOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgCi0gICAgLyog
Qnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2UgYnVncyBpbgotICAgIHl5X2luaXRfZ2xvYmFs
cy4gTGVhdmUgYXQgMHgwMCBmb3IgcmVsZWFzZXMuICovCi0gICAgbWVtc2V0KCpwdHJfeXlfZ2xv
YmFscywweDAwLHNpemVvZihzdHJ1Y3QgeXlndXRzX3QpKTsKLSAgICAKLSAgICB5eXNldF9leHRy
YSAoeXlfdXNlcl9kZWZpbmVkLCAqcHRyX3l5X2dsb2JhbHMpOwotICAgIAotICAgIHJldHVybiB5
eV9pbml0X2dsb2JhbHMgKCAqcHRyX3l5X2dsb2JhbHMgKTsKLX0KLQotc3RhdGljIGludCB5eV9p
bml0X2dsb2JhbHMgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgLyogSW5pdGlhbGl6YXRp
b24gaXMgdGhlIHNhbWUgYXMgZm9yIHRoZSBub24tcmVlbnRyYW50IHNjYW5uZXIuCi0gICAgICog
VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB5eWxleF9kZXN0cm95KCksIHNvIGRvbid0IGFs
bG9jYXRlIGhlcmUuCi0gICAgICovCi0KLSAgICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IDA7Ci0g
ICAgeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKLSAgICB5eWctPnl5X2J1ZmZlcl9zdGFj
a19tYXggPSAwOwotICAgIHl5Zy0+eXlfY19idWZfcCA9IChjaGFyICopIDA7Ci0gICAgeXlnLT55
eV9pbml0ID0gMDsKLSAgICB5eWctPnl5X3N0YXJ0ID0gMDsKLQotICAgIHl5Zy0+eXlfc3RhcnRf
c3RhY2tfcHRyID0gMDsKLSAgICB5eWctPnl5X3N0YXJ0X3N0YWNrX2RlcHRoID0gMDsKLSAgICB5
eWctPnl5X3N0YXJ0X3N0YWNrID0gIE5VTEw7Ci0KLS8qIERlZmluZWQgaW4gbWFpbi5jICovCi0j
aWZkZWYgWVlfU1RESU5JVAotICAgIHl5aW4gPSBzdGRpbjsKLSAgICB5eW91dCA9IHN0ZG91dDsK
LSNlbHNlCi0gICAgeXlpbiA9IChGSUxFICopIDA7Ci0gICAgeXlvdXQgPSAoRklMRSAqKSAwOwot
I2VuZGlmCi0KLSAgICAvKiBGb3IgZnV0dXJlIHJlZmVyZW5jZTogU2V0IGVycm5vIG9uIGVycm9y
LCBzaW5jZSB3ZSBhcmUgY2FsbGVkIGJ5Ci0gICAgICogeXlsZXhfaW5pdCgpCi0gICAgICovCi0g
ICAgcmV0dXJuIDA7Ci19Ci0KLS8qIHl5bGV4X2Rlc3Ryb3kgaXMgZm9yIGJvdGggcmVlbnRyYW50
IGFuZCBub24tcmVlbnRyYW50IHNjYW5uZXJzLiAqLwotaW50IHl5bGV4X2Rlc3Ryb3kgICh5eXNj
YW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgLyogUG9wIHRoZSBidWZmZXIgc3RhY2ssIGRlc3Ry
b3lpbmcgZWFjaCBlbGVtZW50LiAqLwotCXdoaWxlKFlZX0NVUlJFTlRfQlVGRkVSKXsKLQkJeXlf
ZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyICk7Ci0JCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7Ci0JCXl5cG9wX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIp
OwotCX0KLQotCS8qIERlc3Ryb3kgdGhlIHN0YWNrIGl0c2VsZi4gKi8KLQl5eWZyZWUoeXlnLT55
eV9idWZmZXJfc3RhY2sgLHl5c2Nhbm5lcik7Ci0JeXlnLT55eV9idWZmZXJfc3RhY2sgPSBOVUxM
OwotCi0gICAgLyogRGVzdHJveSB0aGUgc3RhcnQgY29uZGl0aW9uIHN0YWNrLiAqLwotICAgICAg
ICB5eWZyZWUoeXlnLT55eV9zdGFydF9zdGFjayAseXlzY2FubmVyICk7Ci0gICAgICAgIHl5Zy0+
eXlfc3RhcnRfc3RhY2sgPSBOVUxMOwotCi0gICAgLyogUmVzZXQgdGhlIGdsb2JhbHMuIFRoaXMg
aXMgaW1wb3J0YW50IGluIGEgbm9uLXJlZW50cmFudCBzY2FubmVyIHNvIHRoZSBuZXh0IHRpbWUK
LSAgICAgKiB5eWxleCgpIGlzIGNhbGxlZCwgaW5pdGlhbGl6YXRpb24gd2lsbCBvY2N1ci4gKi8K
LSAgICB5eV9pbml0X2dsb2JhbHMoIHl5c2Nhbm5lcik7Ci0KLSAgICAvKiBEZXN0cm95IHRoZSBt
YWluIHN0cnVjdCAocmVlbnRyYW50IG9ubHkpLiAqLwotICAgIHl5ZnJlZSAoIHl5c2Nhbm5lciAs
IHl5c2Nhbm5lciApOwotICAgIHl5c2Nhbm5lciA9IE5VTEw7Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LS8qCi0gKiBJbnRlcm5hbCB1dGlsaXR5IHJvdXRpbmVzLgotICovCi0KLSNpZm5kZWYgeXl0ZXh0
X3B0cgotc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyKiBzMSwgeXljb25zdCBjaGFy
ICogczIsIGludCBuICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotCXJlZ2lzdGVyIGludCBpOwot
CWZvciAoIGkgPSAwOyBpIDwgbjsgKytpICkKLQkJczFbaV0gPSBzMltpXTsKLX0KLSNlbmRpZgot
Ci0jaWZkZWYgWVlfTkVFRF9TVFJMRU4KLXN0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29u
c3QgY2hhciAqIHMgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0JcmVnaXN0ZXIgaW50IG47Ci0J
Zm9yICggbiA9IDA7IHNbbl07ICsrbiApCi0JCTsKLQotCXJldHVybiBuOwotfQotI2VuZGlmCi0K
LXZvaWQgKnl5YWxsb2MgKHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsK
LQlyZXR1cm4gKHZvaWQgKikgbWFsbG9jKCBzaXplICk7Ci19Ci0KLXZvaWQgKnl5cmVhbGxvYyAg
KHZvaWQgKiBwdHIsIHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLQkv
KiBUaGUgY2FzdCB0byAoY2hhciAqKSBpbiB0aGUgZm9sbG93aW5nIGFjY29tbW9kYXRlcyBib3Ro
Ci0JICogaW1wbGVtZW50YXRpb25zIHRoYXQgdXNlIGNoYXIqIGdlbmVyaWMgcG9pbnRlcnMsIGFu
ZCB0aG9zZQotCSAqIHRoYXQgdXNlIHZvaWQqIGdlbmVyaWMgcG9pbnRlcnMuICBJdCB3b3JrcyB3
aXRoIHRoZSBsYXR0ZXIKLQkgKiBiZWNhdXNlIGJvdGggQU5TSSBDIGFuZCBDKysgYWxsb3cgY2Fz
dGxlc3MgYXNzaWdubWVudCBmcm9tCi0JICogYW55IHBvaW50ZXIgdHlwZSB0byB2b2lkKiwgYW5k
IGRlYWwgd2l0aCBhcmd1bWVudCBjb252ZXJzaW9ucwotCSAqIGFzIHRob3VnaCBkb2luZyBhbiBh
c3NpZ25tZW50LgotCSAqLwotCXJldHVybiAodm9pZCAqKSByZWFsbG9jKCAoY2hhciAqKSBwdHIs
IHNpemUgKTsKLX0KLQotdm9pZCB5eWZyZWUgKHZvaWQgKiBwdHIgLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCi17Ci0JZnJlZSggKGNoYXIgKikgcHRyICk7CS8qIHNlZSB5eXJlYWxsb2MoKSBmb3IgKGNo
YXIgKikgY2FzdCAqLwotfQotCi0jZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5dGFibGVzIgotCi0j
aWYgZGVmaW5lZChfX2NsYW5nX18pCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCi0jZW5k
aWYKLQoteXlfc2l6ZV90IHN0cmluZ19pbnB1dChjaGFyKiBidWYsIHl5X3NpemVfdCBtYXhfc2l6
ZSwgeXlzY2FuX3QgeXlzY2FubmVyKSB7Ci0gICAgcHA6OlRva2VuIHRva2VuOwotICAgIHl5Z2V0
X2V4dHJhKHl5c2Nhbm5lciktPnByZXByb2Nlc3Nvci5sZXgoJnRva2VuKTsKLSAgICB5eV9zaXpl
X3QgbGVuID0gdG9rZW4udHlwZSA9PSBwcDo6VG9rZW46OkxBU1QgPyAwIDogdG9rZW4udGV4dC5z
aXplKCk7Ci0gICAgaWYgKGxlbiA8IG1heF9zaXplKQotICAgICAgICBtZW1jcHkoYnVmLCB0b2tl
bi50ZXh0LmNfc3RyKCksIGxlbik7Ci0gICAgeXlzZXRfY29sdW1uKHRva2VuLmxvY2F0aW9uLmZp
bGUseXlzY2FubmVyKTsKLSAgICB5eXNldF9saW5lbm8odG9rZW4ubG9jYXRpb24ubGluZSx5eXNj
YW5uZXIpOwotCi0gICAgaWYgKGxlbiA+PSBtYXhfc2l6ZSkKLSAgICAgICAgWVlfRkFUQUxfRVJS
T1IoIklucHV0IGJ1ZmZlciBvdmVyZmxvdyIpOwotICAgIGVsc2UgaWYgKGxlbiA+IDApCi0gICAg
ICAgIGJ1ZltsZW4rK10gPSAnICc7Ci0gICAgcmV0dXJuIGxlbjsKLX0KLQotaW50IGNoZWNrX3R5
cGUoeXlzY2FuX3QgeXlzY2FubmVyKSB7Ci0gICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190KikgeXlzY2FubmVyOwotICAgIAotICAgIGludCB0b2tlbiA9IElERU5USUZJ
RVI7Ci0gICAgVFN5bWJvbCogc3ltYm9sID0geXlleHRyYS0+c3ltYm9sVGFibGUuZmluZCh5eXRl
eHQpOwotICAgIGlmIChzeW1ib2wgJiYgc3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKLSAgICAgICAg
VFZhcmlhYmxlKiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+KHN5bWJvbCk7Ci0g
ICAgICAgIGlmICh2YXJpYWJsZS0+aXNVc2VyVHlwZSgpKQotICAgICAgICAgICAgdG9rZW4gPSBU
WVBFX05BTUU7Ci0gICAgfQotICAgIHl5bHZhbC0+bGV4LnN5bWJvbCA9IHN5bWJvbDsKLSAgICBy
ZXR1cm4gdG9rZW47Ci19Ci0KLWludCByZXNlcnZlZF93b3JkKHl5c2Nhbl90IHl5c2Nhbm5lcikg
ewotICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIHl5c2Nhbm5l
cjsKLQotICAgIHl5ZXh0cmEtPmVycm9yKCp5eWxsb2MsICJJbGxlZ2FsIHVzZSBvZiByZXNlcnZl
ZCB3b3JkIiwgeXl0ZXh0LCAiIik7Ci0gICAgeXlleHRyYS0+cmVjb3ZlcigpOwotICAgIHJldHVy
biAwOwotfQotCi12b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxvYywgVFBhcnNlQ29udGV4dCogY29u
dGV4dCwgY29uc3QgY2hhciogcmVhc29uKSB7Ci0gICAgY29udGV4dC0+ZXJyb3IoKmxsb2MsIHJl
YXNvbiwgeXlnZXRfdGV4dChjb250ZXh0LT5zY2FubmVyKSk7Ci0gICAgY29udGV4dC0+cmVjb3Zl
cigpOwotfQotCi1pbnQgaW50X2NvbnN0YW50KHl5c2Nhbl90IHl5c2Nhbm5lcikgewotICAgIHN0
cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIHl5c2Nhbm5lcjsKLQotICAg
IGlmICghYXRvaV9jbGFtcCh5eXRleHQsICYoeXlsdmFsLT5sZXguaSkpKQotICAgICAgICB5eWV4
dHJhLT53YXJuaW5nKCp5eWxsb2MsICJJbnRlZ2VyIG92ZXJmbG93IiwgeXl0ZXh0LCAiIik7Ci0g
ICAgcmV0dXJuIElOVENPTlNUQU5UOwotfQotCi1pbnQgZmxvYXRfY29uc3RhbnQoeXlzY2FuX3Qg
eXlzY2FubmVyKSB7Ci0gICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
KikgeXlzY2FubmVyOwotCi0gICAgaWYgKCFhdG9mX2NsYW1wKHl5dGV4dCwgJih5eWx2YWwtPmxl
eC5mKSkpCi0gICAgICAgIHl5ZXh0cmEtPndhcm5pbmcoKnl5bGxvYywgIkZsb2F0IG92ZXJmbG93
IiwgeXl0ZXh0LCAiIik7Ci0gICAgcmV0dXJuIEZMT0FUQ09OU1RBTlQ7Ci19Ci0KLWludCBnbHNs
YW5nX2luaXRpYWxpemUoVFBhcnNlQ29udGV4dCogY29udGV4dCkgewotICAgIHl5c2Nhbl90IHNj
YW5uZXIgPSBOVUxMOwotICAgIGlmICh5eWxleF9pbml0X2V4dHJhKGNvbnRleHQsJnNjYW5uZXIp
KQotICAgICAgICByZXR1cm4gMTsKLQotICAgIGNvbnRleHQtPnNjYW5uZXIgPSBzY2FubmVyOwot
ICAgIHJldHVybiAwOwotfQotCi1pbnQgZ2xzbGFuZ19maW5hbGl6ZShUUGFyc2VDb250ZXh0KiBj
b250ZXh0KSB7Ci0gICAgeXlzY2FuX3Qgc2Nhbm5lciA9IGNvbnRleHQtPnNjYW5uZXI7Ci0gICAg
aWYgKHNjYW5uZXIgPT0gTlVMTCkgcmV0dXJuIDA7Ci0gICAgCi0gICAgY29udGV4dC0+c2Nhbm5l
ciA9IE5VTEw7Ci0gICAgeXlsZXhfZGVzdHJveShzY2FubmVyKTsKLQotICAgIHJldHVybiAwOwot
fQotCi1pbnQgZ2xzbGFuZ19zY2FuKHNpemVfdCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3Ry
aW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKLSAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4
dCogY29udGV4dCkgewotICAgIHl5cmVzdGFydChOVUxMLGNvbnRleHQtPnNjYW5uZXIpOwotICAg
IHl5c2V0X2NvbHVtbigwLGNvbnRleHQtPnNjYW5uZXIpOwotICAgIHl5c2V0X2xpbmVubygxLGNv
bnRleHQtPnNjYW5uZXIpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSBwcmVwcm9jZXNzb3IuCi0gICAg
aWYgKCFjb250ZXh0LT5wcmVwcm9jZXNzb3IuaW5pdChjb3VudCwgc3RyaW5nLCBsZW5ndGgpKQot
ICAgICAgICByZXR1cm4gMTsKLSAgICBjb250ZXh0LT5wcmVwcm9jZXNzb3Iuc2V0TWF4VG9rZW5M
ZW5ndGgoU0hfTUFYX1RPS0VOX0xFTkdUSCk7Ci0KLSAgICAvLyBEZWZpbmUgZXh0ZW5zaW9uIG1h
Y3Jvcy4KLSAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yID0gY29udGV4
dC0+ZXh0ZW5zaW9uQmVoYXZpb3IoKTsKLSAgICBmb3IgKFRFeHRlbnNpb25CZWhhdmlvcjo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IGV4dEJlaGF2aW9yLmJlZ2luKCk7Ci0gICAgICAgICBpdGVyICE9
IGV4dEJlaGF2aW9yLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgY29udGV4dC0+cHJlcHJvY2Vz
c29yLnByZWRlZmluZU1hY3JvKGl0ZXItPmZpcnN0LmNfc3RyKCksIDEpOwotICAgIH0KLSAgICBp
ZiAoY29udGV4dC0+ZnJhZ21lbnRQcmVjaXNpb25IaWdoKQotICAgICAgICBjb250ZXh0LT5wcmVw
cm9jZXNzb3IucHJlZGVmaW5lTWFjcm8oIkdMX0ZSQUdNRU5UX1BSRUNJU0lPTl9ISUdIIiwgMSk7
Ci0KLSAgICByZXR1cm4gMDsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGNlN2IyYzcxMTcwYThiNDdiZjRkZjA4N2E5ZGJhM2EwZTZmNTE3YTUuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ4NzIg
KzAsMCBAQAotLyogQXBwbGUgTm90ZTogRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIEFwcGxl
IGVsZWN0cyB0byBkaXN0cmlidXRlIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEJT
RCBsaWNlbnNlLiAqLwotCi0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi43
LiAgKi8KLQotLyogQmlzb24gaW1wbGVtZW50YXRpb24gZm9yIFlhY2MtbGlrZSBwYXJzZXJzIGlu
IEMKLSAgIAotICAgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAxMiBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSAgIAotICAgVGhpcyBwcm9ncmFtIGlzIGZy
ZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lv
biAzIG9mIHRoZSBMaWNlbnNlLCBvcgotICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAgIAotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAgIAotICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFs
b25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9s
aWNlbnNlcy8+LiAgKi8KLQotLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVh
dGUgYSBsYXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCi0gICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlz
b24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawotICAgdW5kZXIgdGVy
bXMgb2YgeW91ciBjaG9pY2UsIHNvIGxvbmcgYXMgdGhhdCB3b3JrIGlzbid0IGl0c2VsZiBhCi0g
ICBwYXJzZXIgZ2VuZXJhdG9yIHVzaW5nIHRoZSBza2VsZXRvbiBvciBhIG1vZGlmaWVkIHZlcnNp
b24gdGhlcmVvZgotICAgYXMgYSBwYXJzZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5
b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZQotICAgdGhlIHBhcnNlciBza2VsZXRvbiBpdHNlbGYs
IHlvdSBtYXkgKGF0IHlvdXIgb3B0aW9uKSByZW1vdmUgdGhpcwotICAgc3BlY2lhbCBleGNlcHRp
b24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCi0gICBC
aXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1
YmxpYwotICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCi0gICAKLSAg
IFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24gaW4KLSAgIHZlcnNpb24gMi4yIG9mIEJpc29uLiAgKi8KLQotLyogQyBMQUxSKDEp
IHBhcnNlciBza2VsZXRvbiB3cml0dGVuIGJ5IFJpY2hhcmQgU3RhbGxtYW4sIGJ5Ci0gICBzaW1w
bGlmeWluZyB0aGUgb3JpZ2luYWwgc28tY2FsbGVkICJzZW1hbnRpYyIgcGFyc2VyLiAgKi8KLQot
LyogQWxsIHN5bWJvbHMgZGVmaW5lZCBiZWxvdyBzaG91bGQgYmVnaW4gd2l0aCB5eSBvciBZWSwg
dG8gYXZvaWQKLSAgIGluZnJpbmdpbmcgb24gdXNlciBuYW1lIHNwYWNlLiAgVGhpcyBzaG91bGQg
YmUgZG9uZSBldmVuIGZvciBsb2NhbAotICAgdmFyaWFibGVzLCBhcyB0aGV5IG1pZ2h0IG90aGVy
d2lzZSBiZSBleHBhbmRlZCBieSB1c2VyIG1hY3Jvcy4KLSAgIFRoZXJlIGFyZSBzb21lIHVuYXZv
aWRhYmxlIGV4Y2VwdGlvbnMgd2l0aGluIGluY2x1ZGUgZmlsZXMgdG8KLSAgIGRlZmluZSBuZWNl
c3NhcnkgbGlicmFyeSBzeW1ib2xzOyB0aGV5IGFyZSBub3RlZCAiSU5GUklOR0VTIE9OCi0gICBV
U0VSIE5BTUUgU1BBQ0UiIGJlbG93LiAgKi8KLQotLyogSWRlbnRpZnkgQmlzb24gb3V0cHV0LiAg
Ki8KLSNkZWZpbmUgWVlCSVNPTiAxCi0KLS8qIEJpc29uIHZlcnNpb24uICAqLwotI2RlZmluZSBZ
WUJJU09OX1ZFUlNJT04gIjIuNyIKLQotLyogU2tlbGV0b24gbmFtZS4gICovCi0jZGVmaW5lIFlZ
U0tFTEVUT05fTkFNRSAieWFjYy5jIgotCi0vKiBQdXJlIHBhcnNlcnMuICAqLwotI2RlZmluZSBZ
WVBVUkUgMQotCi0vKiBQdXNoIHBhcnNlcnMuICAqLwotI2RlZmluZSBZWVBVU0ggMAotCi0vKiBQ
dWxsIHBhcnNlcnMuICAqLwotI2RlZmluZSBZWVBVTEwgMQotCi0KLQotCi0vKiBDb3B5IHRoZSBm
aXJzdCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KLQotCi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwotCi0vLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNo
LiBETyBOT1QgRURJVCEKLQotLy8gSWdub3JlIGVycm9ycyBpbiBhdXRvLWdlbmVyYXRlZCBjb2Rl
LgotI2lmIGRlZmluZWQoX19HTlVDX18pCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQg
Ii1XdW51c2VkLWZ1bmN0aW9uIgotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vu
dXNlZC12YXJpYWJsZSIKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdzd2l0Y2gt
ZW51bSIKLSNlbGlmIGRlZmluZWQoX01TQ19WRVIpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTog
NDA2NSkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MTg5KQotI3ByYWdtYSB3YXJuaW5nKGRp
c2FibGU6IDQ1MDUpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcwMSkKLSNlbmRpZgotCi0j
aW5jbHVkZSAiY29tcGlsZXIvU3ltYm9sVGFibGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9QYXJz
ZUNvbnRleHQuaCIKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLQotI2RlZmluZSBZ
WUVOQUJMRV9OTFMgMAotCi0jZGVmaW5lIFlZTEVYX1BBUkFNIGNvbnRleHQtPnNjYW5uZXIKLQot
Ci0KLSMgaWZuZGVmIFlZX05VTEwKLSMgIGlmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgMjAxMTAz
TCA8PSBfX2NwbHVzcGx1cwotIyAgIGRlZmluZSBZWV9OVUxMIG51bGxwdHIKLSMgIGVsc2UKLSMg
ICBkZWZpbmUgWVlfTlVMTCAwCi0jICBlbmRpZgotIyBlbmRpZgotCi0vKiBFbmFibGluZyB2ZXJi
b3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8KLSNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKLSMgdW5kZWYg
WVlFUlJPUl9WRVJCT1NFCi0jIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQotI2Vsc2UKLSMgZGVm
aW5lIFlZRVJST1JfVkVSQk9TRSAwCi0jZW5kaWYKLQotLyogSW4gYSBmdXR1cmUgcmVsZWFzZSBv
ZiBCaXNvbiwgdGhpcyBzZWN0aW9uIHdpbGwgYmUgcmVwbGFjZWQKLSAgIGJ5ICNpbmNsdWRlICJn
bHNsYW5nX3RhYi5oIi4gICovCi0jaWZuZGVmIFlZX1lZX0dMU0xBTkdfVEFCX0hfSU5DTFVERUQK
LSMgZGVmaW5lIFlZX1lZX0dMU0xBTkdfVEFCX0hfSU5DTFVERUQKLS8qIEVuYWJsaW5nIHRyYWNl
cy4gICovCi0jaWZuZGVmIFlZREVCVUcKLSMgZGVmaW5lIFlZREVCVUcgMAotI2VuZGlmCi0jaWYg
WVlERUJVRwotZXh0ZXJuIGludCB5eWRlYnVnOwotI2VuZGlmCi0vKiAiJWNvZGUgcmVxdWlyZXMi
IGJsb2Nrcy4gICovCi0KLQotI2RlZmluZSBZWUxUWVBFIFRTb3VyY2VMb2MKLSNkZWZpbmUgWVlM
VFlQRV9JU19ERUNMQVJFRCAxCi0jZGVmaW5lIFNIX01BWF9UT0tFTl9MRU5HVEggMjU2ICAvLyBX
ZWJHTCBzcGVjLgotCi0KLQotCi0vKiBUb2tlbnMuICAqLwotI2lmbmRlZiBZWVRPS0VOVFlQRQot
IyBkZWZpbmUgWVlUT0tFTlRZUEUKLSAgIC8qIFB1dCB0aGUgdG9rZW5zIGludG8gdGhlIHN5bWJv
bCB0YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVyIGRlYnVnZ2VycwotICAgICAga25vdyBhYm91
dCB0aGVtLiAgKi8KLSAgIGVudW0geXl0b2tlbnR5cGUgewotICAgICBJTlZBUklBTlQgPSAyNTgs
Ci0gICAgIEhJR0hfUFJFQ0lTSU9OID0gMjU5LAotICAgICBNRURJVU1fUFJFQ0lTSU9OID0gMjYw
LAotICAgICBMT1dfUFJFQ0lTSU9OID0gMjYxLAotICAgICBQUkVDSVNJT04gPSAyNjIsCi0gICAg
IEFUVFJJQlVURSA9IDI2MywKLSAgICAgQ09OU1RfUVVBTCA9IDI2NCwKLSAgICAgQk9PTF9UWVBF
ID0gMjY1LAotICAgICBGTE9BVF9UWVBFID0gMjY2LAotICAgICBJTlRfVFlQRSA9IDI2NywKLSAg
ICAgQlJFQUsgPSAyNjgsCi0gICAgIENPTlRJTlVFID0gMjY5LAotICAgICBETyA9IDI3MCwKLSAg
ICAgRUxTRSA9IDI3MSwKLSAgICAgRk9SID0gMjcyLAotICAgICBJRiA9IDI3MywKLSAgICAgRElT
Q0FSRCA9IDI3NCwKLSAgICAgUkVUVVJOID0gMjc1LAotICAgICBCVkVDMiA9IDI3NiwKLSAgICAg
QlZFQzMgPSAyNzcsCi0gICAgIEJWRUM0ID0gMjc4LAotICAgICBJVkVDMiA9IDI3OSwKLSAgICAg
SVZFQzMgPSAyODAsCi0gICAgIElWRUM0ID0gMjgxLAotICAgICBWRUMyID0gMjgyLAotICAgICBW
RUMzID0gMjgzLAotICAgICBWRUM0ID0gMjg0LAotICAgICBNQVRSSVgyID0gMjg1LAotICAgICBN
QVRSSVgzID0gMjg2LAotICAgICBNQVRSSVg0ID0gMjg3LAotICAgICBJTl9RVUFMID0gMjg4LAot
ICAgICBPVVRfUVVBTCA9IDI4OSwKLSAgICAgSU5PVVRfUVVBTCA9IDI5MCwKLSAgICAgVU5JRk9S
TSA9IDI5MSwKLSAgICAgVkFSWUlORyA9IDI5MiwKLSAgICAgU1RSVUNUID0gMjkzLAotICAgICBW
T0lEX1RZUEUgPSAyOTQsCi0gICAgIFdISUxFID0gMjk1LAotICAgICBTQU1QTEVSMkQgPSAyOTYs
Ci0gICAgIFNBTVBMRVJDVUJFID0gMjk3LAotICAgICBTQU1QTEVSX0VYVEVSTkFMX09FUyA9IDI5
OCwKLSAgICAgU0FNUExFUjJEUkVDVCA9IDI5OSwKLSAgICAgSURFTlRJRklFUiA9IDMwMCwKLSAg
ICAgVFlQRV9OQU1FID0gMzAxLAotICAgICBGTE9BVENPTlNUQU5UID0gMzAyLAotICAgICBJTlRD
T05TVEFOVCA9IDMwMywKLSAgICAgQk9PTENPTlNUQU5UID0gMzA0LAotICAgICBMRUZUX09QID0g
MzA1LAotICAgICBSSUdIVF9PUCA9IDMwNiwKLSAgICAgSU5DX09QID0gMzA3LAotICAgICBERUNf
T1AgPSAzMDgsCi0gICAgIExFX09QID0gMzA5LAotICAgICBHRV9PUCA9IDMxMCwKLSAgICAgRVFf
T1AgPSAzMTEsCi0gICAgIE5FX09QID0gMzEyLAotICAgICBBTkRfT1AgPSAzMTMsCi0gICAgIE9S
X09QID0gMzE0LAotICAgICBYT1JfT1AgPSAzMTUsCi0gICAgIE1VTF9BU1NJR04gPSAzMTYsCi0g
ICAgIERJVl9BU1NJR04gPSAzMTcsCi0gICAgIEFERF9BU1NJR04gPSAzMTgsCi0gICAgIE1PRF9B
U1NJR04gPSAzMTksCi0gICAgIExFRlRfQVNTSUdOID0gMzIwLAotICAgICBSSUdIVF9BU1NJR04g
PSAzMjEsCi0gICAgIEFORF9BU1NJR04gPSAzMjIsCi0gICAgIFhPUl9BU1NJR04gPSAzMjMsCi0g
ICAgIE9SX0FTU0lHTiA9IDMyNCwKLSAgICAgU1VCX0FTU0lHTiA9IDMyNSwKLSAgICAgTEVGVF9Q
QVJFTiA9IDMyNiwKLSAgICAgUklHSFRfUEFSRU4gPSAzMjcsCi0gICAgIExFRlRfQlJBQ0tFVCA9
IDMyOCwKLSAgICAgUklHSFRfQlJBQ0tFVCA9IDMyOSwKLSAgICAgTEVGVF9CUkFDRSA9IDMzMCwK
LSAgICAgUklHSFRfQlJBQ0UgPSAzMzEsCi0gICAgIERPVCA9IDMzMiwKLSAgICAgQ09NTUEgPSAz
MzMsCi0gICAgIENPTE9OID0gMzM0LAotICAgICBFUVVBTCA9IDMzNSwKLSAgICAgU0VNSUNPTE9O
ID0gMzM2LAotICAgICBCQU5HID0gMzM3LAotICAgICBEQVNIID0gMzM4LAotICAgICBUSUxERSA9
IDMzOSwKLSAgICAgUExVUyA9IDM0MCwKLSAgICAgU1RBUiA9IDM0MSwKLSAgICAgU0xBU0ggPSAz
NDIsCi0gICAgIFBFUkNFTlQgPSAzNDMsCi0gICAgIExFRlRfQU5HTEUgPSAzNDQsCi0gICAgIFJJ
R0hUX0FOR0xFID0gMzQ1LAotICAgICBWRVJUSUNBTF9CQVIgPSAzNDYsCi0gICAgIENBUkVUID0g
MzQ3LAotICAgICBBTVBFUlNBTkQgPSAzNDgsCi0gICAgIFFVRVNUSU9OID0gMzQ5Ci0gICB9Owot
I2VuZGlmCi0KLQotI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lT
X0RFQ0xBUkVECi10eXBlZGVmIHVuaW9uIFlZU1RZUEUKLXsKLQotCi0gICAgc3RydWN0IHsKLSAg
ICAgICAgdW5pb24gewotICAgICAgICAgICAgVFN0cmluZyAqc3RyaW5nOwotICAgICAgICAgICAg
ZmxvYXQgZjsKLSAgICAgICAgICAgIGludCBpOwotICAgICAgICAgICAgYm9vbCBiOwotICAgICAg
ICB9OwotICAgICAgICBUU3ltYm9sKiBzeW1ib2w7Ci0gICAgfSBsZXg7Ci0gICAgc3RydWN0IHsK
LSAgICAgICAgVE9wZXJhdG9yIG9wOwotICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAgICBUSW50
ZXJtTm9kZSogaW50ZXJtTm9kZTsKLSAgICAgICAgICAgIFRJbnRlcm1Ob2RlUGFpciBub2RlUGFp
cjsKLSAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW50ZXJtVHlwZWROb2RlOwotICAgICAgICAg
ICAgVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtQWdncmVnYXRlOwotICAgICAgICB9OwotICAgICAg
ICB1bmlvbiB7Ci0gICAgICAgICAgICBUUHVibGljVHlwZSB0eXBlOwotICAgICAgICAgICAgVFBy
ZWNpc2lvbiBwcmVjaXNpb247Ci0gICAgICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllcjsKLSAg
ICAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb247Ci0gICAgICAgICAgICBUUGFyYW1ldGVyIHBh
cmFtOwotICAgICAgICAgICAgVEZpZWxkKiBmaWVsZDsKLSAgICAgICAgICAgIFRGaWVsZExpc3Qq
IGZpZWxkTGlzdDsKLSAgICAgICAgfTsKLSAgICB9IGludGVybTsKLQotCi0KLX0gWVlTVFlQRTsK
LSMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCi0jIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUg
Lyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCi0jIGRlZmluZSBZWVNUWVBFX0lT
X0RFQ0xBUkVEIDEKLSNlbmRpZgotCi0jaWYgISBkZWZpbmVkIFlZTFRZUEUgJiYgISBkZWZpbmVk
IFlZTFRZUEVfSVNfREVDTEFSRUQKLXR5cGVkZWYgc3RydWN0IFlZTFRZUEUKLXsKLSAgaW50IGZp
cnN0X2xpbmU7Ci0gIGludCBmaXJzdF9jb2x1bW47Ci0gIGludCBsYXN0X2xpbmU7Ci0gIGludCBs
YXN0X2NvbHVtbjsKLX0gWVlMVFlQRTsKLSMgZGVmaW5lIHl5bHR5cGUgWVlMVFlQRSAvKiBvYnNv
bGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KLSMgZGVmaW5lIFlZTFRZUEVfSVNfREVDTEFS
RUQgMQotIyBkZWZpbmUgWVlMVFlQRV9JU19UUklWSUFMIDEKLSNlbmRpZgotCi0KLSNpZmRlZiBZ
WVBBUlNFX1BBUkFNCi0jaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVz
Ci1pbnQgeXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSk7Ci0jZWxzZQotaW50IHl5cGFyc2Ug
KCk7Ci0jZW5kaWYKLSNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLwotI2lmIGRlZmluZWQgX19T
VERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cwotaW50IHl5cGFyc2UgKFRQYXJzZUNvbnRleHQq
IGNvbnRleHQpOwotI2Vsc2UKLWludCB5eXBhcnNlICgpOwotI2VuZGlmCi0jZW5kaWYgLyogISBZ
WVBBUlNFX1BBUkFNICovCi0KLSNlbmRpZiAvKiAhWVlfWVlfR0xTTEFOR19UQUJfSF9JTkNMVURF
RCAgKi8KLQotLyogQ29weSB0aGUgc2Vjb25kIHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAq
LwotCi0KLWV4dGVybiBpbnQgeXlsZXgoWVlTVFlQRSogeXlsdmFsLCBZWUxUWVBFKiB5eWxsb2Ms
IHZvaWQqIHl5c2Nhbm5lcik7Ci1leHRlcm4gdm9pZCB5eWVycm9yKFlZTFRZUEUqIHl5bGxvYywg
VFBhcnNlQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKTsKLQotI2RlZmluZSBZ
WUxMT0NfREVGQVVMVChDdXJyZW50LCBSaHMsIE4pICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICBpZiAoWVlJRChOKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICAoQ3VycmVudCkuZmlyc3RfZmlsZSA9IFlZUkhTTE9DKFJocywg
MSkuZmlyc3RfZmlsZTsgIFwKLSAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgPSBZWVJIU0xP
QyhSaHMsIDEpLmZpcnN0X2xpbmU7ICBcCi0gICAgICAgIChDdXJyZW50KS5sYXN0X2ZpbGUgPSBZ
WVJIU0xPQyhSaHMsIE4pLmxhc3RfZmlsZTsgICAgXAotICAgICAgICAoQ3VycmVudCkubGFzdF9s
aW5lID0gWVlSSFNMT0MoUmhzLCBOKS5sYXN0X2xpbmU7ICAgIFwKLSAgICAgIH0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBlbHNl
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAoQ3VycmVudCkuZmlyc3RfZmlsZSA9IFlZUkhTTE9DKFJocywgMCkubGFzdF9maWxlOyAg
IFwKLSAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgPSBZWVJIU0xPQyhSaHMsIDApLmxhc3Rf
bGluZTsgICBcCi0gICAgICAgIChDdXJyZW50KS5sYXN0X2ZpbGUgPSBZWVJIU0xPQyhSaHMsIDAp
Lmxhc3RfZmlsZTsgICAgXAotICAgICAgICAoQ3VycmVudCkubGFzdF9saW5lID0gWVlSSFNMT0Mo
UmhzLCAwKS5sYXN0X2xpbmU7ICAgIFwKLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUg
VkVSVEVYX09OTFkoUywgTCkgeyAgXAotICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNI
X1ZFUlRFWF9TSEFERVIpIHsgIFwKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0
ZWQgaW4gdmVydGV4IHNoYWRlcnMgb25seSAiLCBTKTsgIFwKLSAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOyAgXAotICAgIH0gIFwKLX0KLQotI2RlZmluZSBGUkFHX09OTFkoUywgTCkgeyAgXAot
ICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNIX0ZSQUdNRU5UX1NIQURFUikgeyAgXAot
ICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXJz
IG9ubHkgIiwgUyk7ICBcCi0gICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwKLSAgICB9ICBc
Ci19Ci0KLQotCi0jaWZkZWYgc2hvcnQKLSMgdW5kZWYgc2hvcnQKLSNlbmRpZgotCi0jaWZkZWYg
WVlUWVBFX1VJTlQ4Ci10eXBlZGVmIFlZVFlQRV9VSU5UOCB5eXR5cGVfdWludDg7Ci0jZWxzZQot
dHlwZWRlZiB1bnNpZ25lZCBjaGFyIHl5dHlwZV91aW50ODsKLSNlbmRpZgotCi0jaWZkZWYgWVlU
WVBFX0lOVDgKLXR5cGVkZWYgWVlUWVBFX0lOVDggeXl0eXBlX2ludDg7Ci0jZWxpZiAoZGVmaW5l
ZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9f
Y3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi10eXBlZGVmIHNpZ25lZCBjaGFyIHl5dHlw
ZV9pbnQ4OwotI2Vsc2UKLXR5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQ4OwotI2VuZGlmCi0K
LSNpZmRlZiBZWVRZUEVfVUlOVDE2Ci10eXBlZGVmIFlZVFlQRV9VSU5UMTYgeXl0eXBlX3VpbnQx
NjsKLSNlbHNlCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB5eXR5cGVfdWludDE2OwotI2Vu
ZGlmCi0KLSNpZmRlZiBZWVRZUEVfSU5UMTYKLXR5cGVkZWYgWVlUWVBFX0lOVDE2IHl5dHlwZV9p
bnQxNjsKLSNlbHNlCi10eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50MTY7Ci0jZW5kaWYKLQot
I2lmbmRlZiBZWVNJWkVfVAotIyBpZmRlZiBfX1NJWkVfVFlQRV9fCi0jICBkZWZpbmUgWVlTSVpF
X1QgX19TSVpFX1RZUEVfXwotIyBlbGlmIGRlZmluZWQgc2l6ZV90Ci0jICBkZWZpbmUgWVlTSVpF
X1Qgc2l6ZV90Ci0jIGVsaWYgISBkZWZpbmVkIFlZU0laRV9UICYmIChkZWZpbmVkIF9fU1REQ19f
IHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMg
fHwgZGVmaW5lZCBfTVNDX1ZFUikKLSMgIGluY2x1ZGUgPHN0ZGRlZi5oPiAvKiBJTkZSSU5HRVMg
T04gVVNFUiBOQU1FIFNQQUNFICovCi0jICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90Ci0jIGVsc2UK
LSMgIGRlZmluZSBZWVNJWkVfVCB1bnNpZ25lZCBpbnQKLSMgZW5kaWYKLSNlbmRpZgotCi0jZGVm
aW5lIFlZU0laRV9NQVhJTVVNICgoWVlTSVpFX1QpIC0xKQotCi0jaWZuZGVmIFlZXwotIyBpZiBk
ZWZpbmVkIFlZRU5BQkxFX05MUyAmJiBZWUVOQUJMRV9OTFMKLSMgIGlmIEVOQUJMRV9OTFMKLSMg
ICBpbmNsdWRlIDxsaWJpbnRsLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8K
LSMgICBkZWZpbmUgWVlfKE1zZ2lkKSBkZ2V0dGV4dCAoImJpc29uLXJ1bnRpbWUiLCBNc2dpZCkK
LSMgIGVuZGlmCi0jIGVuZGlmCi0jIGlmbmRlZiBZWV8KLSMgIGRlZmluZSBZWV8oTXNnaWQpIE1z
Z2lkCi0jIGVuZGlmCi0jZW5kaWYKLQotLyogU3VwcHJlc3MgdW51c2VkLXZhcmlhYmxlIHdhcm5p
bmdzIGJ5ICJ1c2luZyIgRS4gICovCi0jaWYgISBkZWZpbmVkIGxpbnQgfHwgZGVmaW5lZCBfX0dO
VUNfXwotIyBkZWZpbmUgWVlVU0UoRSkgKCh2b2lkKSAoRSkpCi0jZWxzZQotIyBkZWZpbmUgWVlV
U0UoRSkgLyogZW1wdHkgKi8KLSNlbmRpZgotCi0vKiBJZGVudGl0eSBmdW5jdGlvbiwgdXNlZCB0
byBzdXBwcmVzcyB3YXJuaW5ncyBhYm91dCBjb25zdGFudCBjb25kaXRpb25zLiAgKi8KLSNpZm5k
ZWYgbGludAotIyBkZWZpbmUgWVlJRChOKSAoTikKLSNlbHNlCi0jaWYgKGRlZmluZWQgX19TVERD
X18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1
cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIGludAotWVlJRCAoaW50IHl5aSkKLSNlbHNl
Ci1zdGF0aWMgaW50Ci1ZWUlEICh5eWkpCi0gICAgaW50IHl5aTsKLSNlbmRpZgotewotICByZXR1
cm4geXlpOwotfQotI2VuZGlmCi0KLSNpZiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9S
X1ZFUkJPU0UKLQotLyogVGhlIHBhcnNlciBpbnZva2VzIGFsbG9jYSBvciBtYWxsb2M7IGRlZmlu
ZSB0aGUgbmVjZXNzYXJ5IHN5bWJvbHMuICAqLwotCi0jIGlmZGVmIFlZU1RBQ0tfVVNFX0FMTE9D
QQotIyAgaWYgWVlTVEFDS19VU0VfQUxMT0NBCi0jICAgaWZkZWYgX19HTlVDX18KLSMgICAgZGVm
aW5lIFlZU1RBQ0tfQUxMT0MgX19idWlsdGluX2FsbG9jYQotIyAgIGVsaWYgZGVmaW5lZCBfX0JV
SUxUSU5fVkFfQVJHX0lOQ1IKLSMgICAgaW5jbHVkZSA8YWxsb2NhLmg+IC8qIElORlJJTkdFUyBP
TiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBlbGlmIGRlZmluZWQgX0FJWAotIyAgICBkZWZpbmUg
WVlTVEFDS19BTExPQyBfX2FsbG9jYQotIyAgIGVsaWYgZGVmaW5lZCBfTVNDX1ZFUgotIyAgICBp
bmNsdWRlIDxtYWxsb2MuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAg
ICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKLSMgICBlbHNlCi0jICAgIGRlZmluZSBZWVNUQUNLX0FM
TE9DIGFsbG9jYQotIyAgICBpZiAhIGRlZmluZWQgX0FMTE9DQV9IICYmICEgZGVmaW5lZCBFWElU
X1NVQ0NFU1MgJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwK
LSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotIyAgICAg
aW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSAg
ICAgIC8qIFVzZSBFWElUX1NVQ0NFU1MgYXMgYSB3aXRuZXNzIGZvciBzdGRsaWIuaC4gICovCi0j
ICAgICBpZm5kZWYgRVhJVF9TVUNDRVNTCi0jICAgICAgZGVmaW5lIEVYSVRfU1VDQ0VTUyAwCi0j
ICAgICBlbmRpZgotIyAgICBlbmRpZgotIyAgIGVuZGlmCi0jICBlbmRpZgotIyBlbmRpZgotCi0j
IGlmZGVmIFlZU1RBQ0tfQUxMT0MKLSAgIC8qIFBhY2lmeSBHQ0MncyBgZW1wdHkgaWYtYm9keScg
d2FybmluZy4gICovCi0jICBkZWZpbmUgWVlTVEFDS19GUkVFKFB0cikgZG8geyAvKiBlbXB0eSAq
LzsgfSB3aGlsZSAoWVlJRCAoMCkpCi0jICBpZm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNCi0g
ICAgLyogVGhlIE9TIG1pZ2h0IGd1YXJhbnRlZSBvbmx5IG9uZSBndWFyZCBwYWdlIGF0IHRoZSBi
b3R0b20gb2YgdGhlIHN0YWNrLAotICAgICAgIGFuZCBhIHBhZ2Ugc2l6ZSBjYW4gYmUgYXMgc21h
bGwgYXMgNDA5NiBieXRlcy4gIFNvIHdlIGNhbm5vdCBzYWZlbHkKLSAgICAgICBpbnZva2UgYWxs
b2NhIChOKSBpZiBOIGV4Y2VlZHMgNDA5Ni4gIFVzZSBhIHNsaWdodGx5IHNtYWxsZXIgbnVtYmVy
Ci0gICAgICAgdG8gYWxsb3cgZm9yIGEgZmV3IGNvbXBpbGVyLWFsbG9jYXRlZCB0ZW1wb3Jhcnkg
c3RhY2sgc2xvdHMuICAqLwotIyAgIGRlZmluZSBZWVNUQUNLX0FMTE9DX01BWElNVU0gNDAzMiAv
KiByZWFzb25hYmxlIGNpcmNhIDIwMDYgKi8KLSMgIGVuZGlmCi0jIGVsc2UKLSMgIGRlZmluZSBZ
WVNUQUNLX0FMTE9DIFlZTUFMTE9DCi0jICBkZWZpbmUgWVlTVEFDS19GUkVFIFlZRlJFRQotIyAg
aWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQotIyAgIGRlZmluZSBZWVNUQUNLX0FMTE9DX01B
WElNVU0gWVlTSVpFX01BWElNVU0KLSMgIGVuZGlmCi0jICBpZiAoZGVmaW5lZCBfX2NwbHVzcGx1
cyAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTIFwKLSAgICAgICAmJiAhICgoZGVmaW5lZCBZWU1B
TExPQyB8fCBkZWZpbmVkIG1hbGxvYykgXAotCSAgICAgJiYgKGRlZmluZWQgWVlGUkVFIHx8IGRl
ZmluZWQgZnJlZSkpKQotIyAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNF
UiBOQU1FIFNQQUNFICovCi0jICAgaWZuZGVmIEVYSVRfU1VDQ0VTUwotIyAgICBkZWZpbmUgRVhJ
VF9TVUNDRVNTIDAKLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgIGlmbmRlZiBZWU1BTExPQwotIyAg
IGRlZmluZSBZWU1BTExPQyBtYWxsb2MKLSMgICBpZiAhIGRlZmluZWQgbWFsbG9jICYmICEgZGVm
aW5lZCBFWElUX1NVQ0NFU1MgJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9f
RlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVS
KQotdm9pZCAqbWFsbG9jIChZWVNJWkVfVCk7IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BB
Q0UgKi8KLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgIGlmbmRlZiBZWUZSRUUKLSMgICBkZWZpbmUg
WVlGUkVFIGZyZWUKLSMgICBpZiAhIGRlZmluZWQgZnJlZSAmJiAhIGRlZmluZWQgRVhJVF9TVUND
RVNTICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAg
IHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXZvaWQgZnJlZSAo
dm9pZCAqKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgIGVuZGlmCi0j
ICBlbmRpZgotIyBlbmRpZgotI2VuZGlmIC8qICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJS
T1JfVkVSQk9TRSAqLwotCi0KLSNpZiAoISBkZWZpbmVkIHl5b3ZlcmZsb3cgXAotICAgICAmJiAo
ISBkZWZpbmVkIF9fY3BsdXNwbHVzIFwKLQkgfHwgKGRlZmluZWQgWVlMVFlQRV9JU19UUklWSUFM
ICYmIFlZTFRZUEVfSVNfVFJJVklBTCBcCi0JICAgICAmJiBkZWZpbmVkIFlZU1RZUEVfSVNfVFJJ
VklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkKLQotLyogQSB0eXBlIHRoYXQgaXMgcHJvcGVy
bHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1lbWJlci4gICovCi11bmlvbiB5eWFsbG9jCi17Ci0g
IHl5dHlwZV9pbnQxNiB5eXNzX2FsbG9jOwotICBZWVNUWVBFIHl5dnNfYWxsb2M7Ci0gIFlZTFRZ
UEUgeXlsc19hbGxvYzsKLX07Ci0KLS8qIFRoZSBzaXplIG9mIHRoZSBtYXhpbXVtIGdhcCBiZXR3
ZWVuIG9uZSBhbGlnbmVkIHN0YWNrIGFuZCB0aGUgbmV4dC4gICovCi0jIGRlZmluZSBZWVNUQUNL
X0dBUF9NQVhJTVVNIChzaXplb2YgKHVuaW9uIHl5YWxsb2MpIC0gMSkKLQotLyogVGhlIHNpemUg
b2YgYW4gYXJyYXkgbGFyZ2UgdG8gZW5vdWdoIHRvIGhvbGQgYWxsIHN0YWNrcywgZWFjaCB3aXRo
Ci0gICBOIGVsZW1lbnRzLiAgKi8KLSMgZGVmaW5lIFlZU1RBQ0tfQllURVMoTikgXAotICAgICAo
KE4pICogKHNpemVvZiAoeXl0eXBlX2ludDE2KSArIHNpemVvZiAoWVlTVFlQRSkgKyBzaXplb2Yg
KFlZTFRZUEUpKSBcCi0gICAgICArIDIgKiBZWVNUQUNLX0dBUF9NQVhJTVVNKQotCi0jIGRlZmlu
ZSBZWUNPUFlfTkVFREVEIDEKLQotLyogUmVsb2NhdGUgU1RBQ0sgZnJvbSBpdHMgb2xkIGxvY2F0
aW9uIHRvIHRoZSBuZXcgb25lLiAgVGhlCi0gICBsb2NhbCB2YXJpYWJsZXMgWVlTSVpFIGFuZCBZ
WVNUQUNLU0laRSBnaXZlIHRoZSBvbGQgYW5kIG5ldyBudW1iZXIgb2YKLSAgIGVsZW1lbnRzIGlu
IHRoZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlCi0gICBz
dGFjay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBwcm9wZXJseSBhbGlnbmVkIGxvY2F0aW9uIGZvciB0
aGUgbmV4dAotICAgc3RhY2suICAqLwotIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFja19h
bGxvYywgU3RhY2spCQkJCVwKLSAgICBkbwkJCQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJCQlcCi0J
WVlTSVpFX1QgeXluZXdieXRlczsJCQkJCQlcCi0JWVlDT1BZICgmeXlwdHItPlN0YWNrX2FsbG9j
LCBTdGFjaywgeXlzaXplKTsJCQlcCi0JU3RhY2sgPSAmeXlwdHItPlN0YWNrX2FsbG9jOwkJCQkJ
XAotCXl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNrKSArIFlZU1RBQ0tf
R0FQX01BWElNVU07IFwKLQl5eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIpOwkJ
CQlcCi0gICAgICB9CQkJCQkJCQkJXAotICAgIHdoaWxlIChZWUlEICgwKSkKLQotI2VuZGlmCi0K
LSNpZiBkZWZpbmVkIFlZQ09QWV9ORUVERUQgJiYgWVlDT1BZX05FRURFRAotLyogQ29weSBDT1VO
VCBvYmplY3RzIGZyb20gU1JDIHRvIERTVC4gIFRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRv
Ci0gICBub3Qgb3ZlcmxhcC4gICovCi0jIGlmbmRlZiBZWUNPUFkKLSMgIGlmIGRlZmluZWQgX19H
TlVDX18gJiYgMSA8IF9fR05VQ19fCi0jICAgZGVmaW5lIFlZQ09QWShEc3QsIFNyYywgQ291bnQp
IFwKLSAgICAgIF9fYnVpbHRpbl9tZW1jcHkgKERzdCwgU3JjLCAoQ291bnQpICogc2l6ZW9mICgq
KFNyYykpKQotIyAgZWxzZQotIyAgIGRlZmluZSBZWUNPUFkoRHN0LCBTcmMsIENvdW50KSAgICAg
ICAgICAgICAgXAotICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgIFlZU0laRV9UIHl5aTsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICAgIGZvciAoeXlpID0gMDsgeXlpIDwgKENvdW50KTsgeXlpKyspICAgXAotICAgICAgICAgICAg
KERzdClbeXlpXSA9IChTcmMpW3l5aV07ICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgd2hpbGUgKFlZSUQgKDApKQot
IyAgZW5kaWYKLSMgZW5kaWYKLSNlbmRpZiAvKiAhWVlDT1BZX05FRURFRCAqLwotCi0vKiBZWUZJ
TkFMIC0tIFN0YXRlIG51bWJlciBvZiB0aGUgdGVybWluYXRpb24gc3RhdGUuICAqLwotI2RlZmlu
ZSBZWUZJTkFMICA3NAotLyogWVlMQVNUIC0tIExhc3QgaW5kZXggaW4gWVlUQUJMRS4gICovCi0j
ZGVmaW5lIFlZTEFTVCAgIDE0OTAKLQotLyogWVlOVE9LRU5TIC0tIE51bWJlciBvZiB0ZXJtaW5h
bHMuICAqLwotI2RlZmluZSBZWU5UT0tFTlMgIDk1Ci0vKiBZWU5OVFMgLS0gTnVtYmVyIG9mIG5v
bnRlcm1pbmFscy4gICovCi0jZGVmaW5lIFlZTk5UUyAgODQKLS8qIFlZTlJVTEVTIC0tIE51bWJl
ciBvZiBydWxlcy4gICovCi0jZGVmaW5lIFlZTlJVTEVTICAyMDIKLS8qIFlZTlJVTEVTIC0tIE51
bWJlciBvZiBzdGF0ZXMuICAqLwotI2RlZmluZSBZWU5TVEFURVMgIDMwNwotCi0vKiBZWVRSQU5T
TEFURShZWUxFWCkgLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVY
LiAgKi8KLSNkZWZpbmUgWVlVTkRFRlRPSyAgMgotI2RlZmluZSBZWU1BWFVUT0sgICAzNDkKLQot
I2RlZmluZSBZWVRSQU5TTEFURShZWVgpCQkJCQkJXAotICAoKHVuc2lnbmVkIGludCkgKFlZWCkg
PD0gWVlNQVhVVE9LID8geXl0cmFuc2xhdGVbWVlYXSA6IFlZVU5ERUZUT0spCi0KLS8qIFlZVFJB
TlNMQVRFW1lZTEVYXSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlM
RVguICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRyYW5zbGF0ZVtdID0KLXsKLSAg
ICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
Ci0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsCi0gICAgICAgNSwgICAgIDYs
ICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwK
LSAgICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAy
MiwgICAgMjMsICAgIDI0LAotICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAg
ICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsCi0gICAgICAzNSwgICAgMzYsICAgIDM3
LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwKLSAgICAg
IDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAg
NTMsICAgIDU0LAotICAgICAgNTUsICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwg
ICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsCi0gICAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2
OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLCAgICA3NCwKLSAgICAgIDc1LCAg
ICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgxLCAgICA4MiwgICAgODMsICAg
IDg0LAotICAgICAgODUsICAgIDg2LCAgICA4NywgICAgODgsICAgIDg5LCAgICA5MCwgICAgOTEs
ICAgIDkyLCAgICA5MywgICAgOTQKLX07Ci0KLSNpZiBZWURFQlVHCi0vKiBZWVBSSFNbWVlOXSAt
LSBJbmRleCBvZiB0aGUgZmlyc3QgUkhTIHN5bWJvbCBvZiBydWxlIG51bWJlciBZWU4gaW4KLSAg
IFlZUkhTLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5cHJoc1tdID0KLXsKLSAg
ICAgICAwLCAgICAgMCwgICAgIDMsICAgICA1LCAgICAgNywgICAgIDksICAgIDExLCAgICAxMywg
ICAgMTUsICAgIDE3LAotICAgICAgMjEsICAgIDIzLCAgICAyOCwgICAgMzAsICAgIDM0LCAgICAz
NywgICAgNDAsICAgIDQyLCAgICA0NCwgICAgNDYsCi0gICAgICA1MCwgICAgNTMsICAgIDU2LCAg
ICA1OSwgICAgNjEsICAgIDY0LCAgICA2OCwgICAgNzEsICAgIDczLCAgICA3NSwKLSAgICAgIDc3
LCAgICA4MCwgICAgODMsICAgIDg2LCAgICA4OCwgICAgOTAsICAgIDkyLCAgICA5NCwgICAgOTgs
ICAgMTAyLAotICAgICAxMDQsICAgMTA4LCAgIDExMiwgICAxMTQsICAgMTE2LCAgIDEyMCwgICAx
MjQsICAgMTI4LCAgIDEzMiwgICAxMzQsCi0gICAgIDEzOCwgICAxNDIsICAgMTQ0LCAgIDE0Niwg
ICAxNDgsICAgMTUwLCAgIDE1NCwgICAxNTYsICAgMTYwLCAgIDE2MiwKLSAgICAgMTY2LCAgIDE2
OCwgICAxNzQsICAgMTc2LCAgIDE4MCwgICAxODIsICAgMTg0LCAgIDE4NiwgICAxODgsICAgMTkw
LAotICAgICAxOTIsICAgMTk2LCAgIDE5OCwgICAyMDEsICAgMjA0LCAgIDIwOSwgICAyMTIsICAg
MjE0LCAgIDIxNiwgICAyMTksCi0gICAgIDIyMywgICAyMjcsICAgMjMwLCAgIDIzNiwgICAyNDAs
ICAgMjQzLCAgIDI0NywgICAyNTAsICAgMjUxLCAgIDI1MywKLSAgICAgMjU1LCAgIDI1NywgICAy
NTksICAgMjYxLCAgIDI2NSwgICAyNzEsICAgMjc4LCAgIDI4NCwgICAyODYsICAgMjg5LAotICAg
ICAyOTQsICAgMzAwLCAgIDMwNSwgICAzMDgsICAgMzEwLCAgIDMxMywgICAzMTUsICAgMzE3LCAg
IDMxOSwgICAzMjIsCi0gICAgIDMyNCwgICAzMjYsICAgMzI5LCAgIDMzMSwgICAzMzMsICAgMzM1
LCAgIDMzNywgICAzNDIsICAgMzQ0LCAgIDM0NiwKLSAgICAgMzQ4LCAgIDM1MCwgICAzNTIsICAg
MzU0LCAgIDM1NiwgICAzNTgsICAgMzYwLCAgIDM2MiwgICAzNjQsICAgMzY2LAotICAgICAzNjgs
ICAgMzcwLCAgIDM3MiwgICAzNzQsICAgMzc2LCAgIDM3OCwgICAzODAsICAgMzgyLCAgIDM4NCwg
ICAzODYsCi0gICAgIDM4NywgICAzOTQsICAgMzk1LCAgIDQwMSwgICA0MDMsICAgNDA2LCAgIDQx
MCwgICA0MTIsICAgNDE2LCAgIDQxOCwKLSAgICAgNDIzLCAgIDQyNSwgICA0MjcsICAgNDI5LCAg
IDQzMSwgICA0MzMsICAgNDM1LCAgIDQzNywgICA0MzksICAgNDQxLAotICAgICA0NDQsICAgNDQ1
LCAgIDQ0NiwgICA0NTIsICAgNDU0LCAgIDQ1NiwgICA0NTcsICAgNDYwLCAgIDQ2MSwgICA0NjQs
Ci0gICAgIDQ2NywgICA0NzEsICAgNDczLCAgIDQ3NiwgICA0NzgsICAgNDgxLCAgIDQ4NywgICA0
OTEsICAgNDkzLCAgIDQ5NSwKLSAgICAgNTAwLCAgIDUwMSwgICA1MDgsICAgNTA5LCAgIDUxOCwg
ICA1MTksICAgNTI3LCAgIDUyOSwgICA1MzEsICAgNTMzLAotICAgICA1MzQsICAgNTM3LCAgIDU0
MSwgICA1NDQsICAgNTQ3LCAgIDU1MCwgICA1NTQsICAgNTU3LCAgIDU1OSwgICA1NjIsCi0gICAg
IDU2NCwgICA1NjYsICAgNTY3Ci19OwotCi0vKiBZWVJIUyAtLSBBIGAtMSctc2VwYXJhdGVkIGxp
c3Qgb2YgdGhlIHJ1bGVzJyBSSFMuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXJo
c1tdID0KLXsKLSAgICAgMTc1LCAgICAgMCwgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgNDYsICAg
IC0xLCAgICA0NSwgICAgLTEsICAgIDk3LAotICAgICAgLTEsICAgIDQ4LCAgICAtMSwgICAgNDcs
ICAgIC0xLCAgICA0OSwgICAgLTEsICAgIDcxLCAgIDEyNCwgICAgNzIsCi0gICAgICAtMSwgICAg
OTgsICAgIC0xLCAgICA5OSwgICAgNzMsICAgMTAwLCAgICA3NCwgICAgLTEsICAgMTAxLCAgICAt
MSwKLSAgICAgIDk5LCAgICA3NywgICAgOTYsICAgIC0xLCAgICA5OSwgICAgNTIsICAgIC0xLCAg
ICA5OSwgICAgNTMsICAgIC0xLAotICAgICAxMjQsICAgIC0xLCAgIDEwMiwgICAgLTEsICAgMTAz
LCAgICAtMSwgICAgOTksICAgIDc3LCAgIDEwMywgICAgLTEsCi0gICAgIDEwNSwgICAgNzIsICAg
IC0xLCAgIDEwNCwgICAgNzIsICAgIC0xLCAgIDEwNiwgICAgMzksICAgIC0xLCAgIDEwNiwKLSAg
ICAgIC0xLCAgIDEwNiwgICAxMjIsICAgIC0xLCAgIDEwNSwgICAgNzgsICAgMTIyLCAgICAtMSwg
ICAxMDcsICAgIDcxLAotICAgICAgLTEsICAgMTQyLCAgICAtMSwgICAgNDUsICAgIC0xLCAgICA5
OSwgICAgLTEsICAgIDUyLCAgIDEwOCwgICAgLTEsCi0gICAgICA1MywgICAxMDgsICAgIC0xLCAg
IDEwOSwgICAxMDgsICAgIC0xLCAgICA4NSwgICAgLTEsICAgIDgzLCAgICAtMSwKLSAgICAgIDgy
LCAgICAtMSwgICAxMDgsICAgIC0xLCAgIDExMCwgICAgODYsICAgMTA4LCAgICAtMSwgICAxMTAs
ICAgIDg3LAotICAgICAxMDgsICAgIC0xLCAgIDExMCwgICAgLTEsICAgMTExLCAgICA4NSwgICAx
MTAsICAgIC0xLCAgIDExMSwgICAgODMsCi0gICAgIDExMCwgICAgLTEsICAgMTExLCAgICAtMSwg
ICAxMTIsICAgIC0xLCAgIDExMywgICAgODksICAgMTEyLCAgICAtMSwKLSAgICAgMTEzLCAgICA5
MCwgICAxMTIsICAgIC0xLCAgIDExMywgICAgNTQsICAgMTEyLCAgICAtMSwgICAxMTMsICAgIDU1
LAotICAgICAxMTIsICAgIC0xLCAgIDExMywgICAgLTEsICAgMTE0LCAgICA1NiwgICAxMTMsICAg
IC0xLCAgIDExNCwgICAgNTcsCi0gICAgIDExMywgICAgLTEsICAgMTE0LCAgICAtMSwgICAxMTUs
ICAgIC0xLCAgIDExNiwgICAgLTEsICAgMTE3LCAgICAtMSwKLSAgICAgMTE4LCAgICA1OCwgICAx
MTcsICAgIC0xLCAgIDExOCwgICAgLTEsICAgMTE5LCAgICA2MCwgICAxMTgsICAgIC0xLAotICAg
ICAxMTksICAgIC0xLCAgIDEyMCwgICAgNTksICAgMTE5LCAgICAtMSwgICAxMjAsICAgIC0xLCAg
IDEyMCwgICAgOTQsCi0gICAgIDEyNCwgICAgNzksICAgMTIyLCAgICAtMSwgICAxMjEsICAgIC0x
LCAgIDEwOCwgICAxMjMsICAgMTIyLCAgICAtMSwKLSAgICAgIDgwLCAgICAtMSwgICAgNjEsICAg
IC0xLCAgICA2MiwgICAgLTEsICAgIDYzLCAgICAtMSwgICAgNzAsICAgIC0xLAotICAgICAxMjIs
ICAgIC0xLCAgIDEyNCwgICAgNzgsICAgMTIyLCAgICAtMSwgICAxMjEsICAgIC0xLCAgIDEyNywg
ICAgODEsCi0gICAgICAtMSwgICAxMzUsICAgIDgxLCAgICAtMSwgICAgIDcsICAgMTQwLCAgIDE0
MSwgICAgODEsICAgIC0xLCAgIDEyOCwKLSAgICAgIDcyLCAgICAtMSwgICAxMzAsICAgIC0xLCAg
IDEyOSwgICAgLTEsICAgMTMwLCAgIDEzMiwgICAgLTEsICAgMTI5LAotICAgICAgNzgsICAgMTMy
LCAgICAtMSwgICAxMzcsICAgIDQ1LCAgICA3MSwgICAgLTEsICAgMTM5LCAgICA5NiwgICAgLTEs
Ci0gICAgIDEzOSwgICAgOTYsICAgIDczLCAgIDEyNSwgICAgNzQsICAgIC0xLCAgIDEzOCwgICAx
MzMsICAgMTMxLCAgICAtMSwKLSAgICAgMTMzLCAgIDEzMSwgICAgLTEsICAgMTM4LCAgIDEzMywg
ICAxMzQsICAgIC0xLCAgIDEzMywgICAxMzQsICAgIC0xLAotICAgICAgLTEsICAgIDMzLCAgICAt
MSwgICAgMzQsICAgIC0xLCAgICAzNSwgICAgLTEsICAgMTM5LCAgICAtMSwgICAxMzYsCi0gICAg
ICAtMSwgICAxMzUsICAgIDc4LCAgICA5NiwgICAgLTEsICAgMTM1LCAgICA3OCwgICAgOTYsICAg
IDczLCAgICA3NCwKLSAgICAgIC0xLCAgIDEzNSwgICAgNzgsICAgIDk2LCAgICA3MywgICAxMjUs
ICAgIDc0LCAgICAtMSwgICAxMzUsICAgIDc4LAotICAgICAgOTYsICAgIDgwLCAgIDE1MCwgICAg
LTEsICAgMTM3LCAgICAtMSwgICAxMzcsICAgIDk2LCAgICAtMSwgICAxMzcsCi0gICAgICA5Niwg
ICAgNzMsICAgIDc0LCAgICAtMSwgICAxMzcsICAgIDk2LCAgICA3MywgICAxMjUsICAgIDc0LCAg
ICAtMSwKLSAgICAgMTM3LCAgICA5NiwgICAgODAsICAgMTUwLCAgICAtMSwgICAgIDMsICAgIDQ1
LCAgICAtMSwgICAxMzksICAgIC0xLAotICAgICAxMzgsICAgMTM5LCAgICAtMSwgICAgIDksICAg
IC0xLCAgICAgOCwgICAgLTEsICAgIDM3LCAgICAtMSwgICAgIDMsCi0gICAgICAzNywgICAgLTEs
ICAgIDM2LCAgICAtMSwgICAxNDEsICAgIC0xLCAgIDE0MCwgICAxNDEsICAgIC0xLCAgICAgNCwK
LSAgICAgIC0xLCAgICAgNSwgICAgLTEsICAgICA2LCAgICAtMSwgICAxNDIsICAgIC0xLCAgIDE0
MiwgICAgNzMsICAgMTI1LAotICAgICAgNzQsICAgIC0xLCAgICAzOSwgICAgLTEsICAgIDExLCAg
ICAtMSwgICAgMTIsICAgIC0xLCAgICAxMCwgICAgLTEsCi0gICAgICAyNywgICAgLTEsICAgIDI4
LCAgICAtMSwgICAgMjksICAgIC0xLCAgICAyMSwgICAgLTEsICAgIDIyLCAgICAtMSwKLSAgICAg
IDIzLCAgICAtMSwgICAgMjQsICAgIC0xLCAgICAyNSwgICAgLTEsICAgIDI2LCAgICAtMSwgICAg
MzAsICAgIC0xLAotICAgICAgMzEsICAgIC0xLCAgICAzMiwgICAgLTEsICAgIDQxLCAgICAtMSwg
ICAgNDIsICAgIC0xLCAgICA0MywgICAgLTEsCi0gICAgICA0NCwgICAgLTEsICAgMTQzLCAgICAt
MSwgICAgNDYsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDk2LCAgICA3NSwKLSAgICAgMTQ0LCAg
IDE0NiwgICAgNzYsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDc1LCAgIDE0NSwgICAxNDYsICAg
IDc2LAotICAgICAgLTEsICAgMTQ3LCAgICAtMSwgICAxNDYsICAgMTQ3LCAgICAtMSwgICAxMzks
ICAgMTQ4LCAgICA4MSwgICAgLTEsCi0gICAgIDE0OSwgICAgLTEsICAgMTQ4LCAgICA3OCwgICAx
NDksICAgIC0xLCAgICA5NiwgICAgLTEsICAgIDk2LCAgICA3MywKLSAgICAgMTI1LCAgICA3NCwg
ICAgLTEsICAgMTIyLCAgICAtMSwgICAxMjYsICAgIC0xLCAgIDE1NCwgICAgLTEsICAgMTUzLAot
ICAgICAgLTEsICAgMTUxLCAgICAtMSwgICAxNjMsICAgIC0xLCAgIDE2NCwgICAgLTEsICAgMTY3
LCAgICAtMSwgICAxNzQsCi0gICAgICAtMSwgICAgNzUsICAgIDc2LCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICA3NSwgICAxNTUsICAgMTYyLCAgIDE1NiwKLSAgICAgIDc2LCAgICAtMSwgICAxNjEs
ICAgIC0xLCAgIDE1MywgICAgLTEsICAgIC0xLCAgIDE1OSwgICAxNjEsICAgIC0xLAotICAgICAg
LTEsICAgMTYwLCAgIDE1MywgICAgLTEsICAgIDc1LCAgICA3NiwgICAgLTEsICAgIDc1LCAgIDE2
MiwgICAgNzYsCi0gICAgICAtMSwgICAxNTIsICAgIC0xLCAgIDE2MiwgICAxNTIsICAgIC0xLCAg
ICA4MSwgICAgLTEsICAgMTI0LCAgICA4MSwKLSAgICAgIC0xLCAgICAxOCwgICAgNzEsICAgMTI0
LCAgICA3MiwgICAxNjUsICAgIC0xLCAgIDE1OCwgICAgMTYsICAgMTU4LAotICAgICAgLTEsICAg
MTU4LCAgICAtMSwgICAxMjQsICAgIC0xLCAgIDEzNywgICAgOTYsICAgIDgwLCAgIDE1MCwgICAg
LTEsCi0gICAgICAtMSwgICAgNDAsICAgIDcxLCAgIDE2OCwgICAxNjYsICAgIDcyLCAgIDE1Nywg
ICAgLTEsICAgIC0xLCAgICAxNSwKLSAgICAgMTY5LCAgIDE1OCwgICAgNDAsICAgIDcxLCAgIDEy
NCwgICAgNzIsICAgIDgxLCAgICAtMSwgICAgLTEsICAgIDE3LAotICAgICAgNzEsICAgMTcwLCAg
IDE3MSwgICAxNzMsICAgIDcyLCAgIDE1NywgICAgLTEsICAgMTYzLCAgICAtMSwgICAxNTEsCi0g
ICAgICAtMSwgICAxNjYsICAgIC0xLCAgICAtMSwgICAxNzIsICAgIDgxLCAgICAtMSwgICAxNzIs
ICAgIDgxLCAgIDEyNCwKLSAgICAgIC0xLCAgICAxNCwgICAgODEsICAgIC0xLCAgICAxMywgICAg
ODEsICAgIC0xLCAgICAyMCwgICAgODEsICAgIC0xLAotICAgICAgMjAsICAgMTI0LCAgICA4MSwg
ICAgLTEsICAgIDE5LCAgICA4MSwgICAgLTEsICAgMTc2LCAgICAtMSwgICAxNzUsCi0gICAgIDE3
NiwgICAgLTEsICAgMTc3LCAgICAtMSwgICAxMjYsICAgIC0xLCAgICAtMSwgICAxMjcsICAgMTc4
LCAgIDE2MSwKLSAgICAgIC0xCi19OwotCi0vKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUg
d2hlcmUgcnVsZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5
cGVfdWludDE2IHl5cmxpbmVbXSA9Ci17Ci0gICAgICAgMCwgICAxODAsICAgMTgwLCAgIDE4MSwg
ICAxODQsICAgMjI3LCAgIDIzMCwgICAyNDMsICAgMjQ4LCAgIDI1MywKLSAgICAgMjU5LCAgIDI2
MiwgICAyNjUsICAgMjY4LCAgIDM2MywgICAzNzMsICAgMzg2LCAgIDM5NCwgICA0OTQsICAgNDk3
LAotICAgICA1MDUsICAgNTA4LCAgIDUxNCwgICA1MTgsICAgNTI1LCAgIDUzMSwgICA1NDAsICAg
NTQ4LCAgIDYwMywgICA2MTMsCi0gICAgIDYxNiwgICA2MjYsICAgNjM2LCAgIDY1NywgICA2NTgs
ICAgNjU5LCAgIDY2NCwgICA2NjUsICAgNjczLCAgIDY4NCwKLSAgICAgNjg1LCAgIDY5MywgICA3
MDQsICAgNzA4LCAgIDcwOSwgICA3MTksICAgNzI5LCAgIDczOSwgICA3NTIsICAgNzUzLAotICAg
ICA3NjMsICAgNzc2LCAgIDc4MCwgICA3ODQsICAgNzg4LCAgIDc4OSwgICA4MDIsICAgODAzLCAg
IDgxNiwgICA4MTcsCi0gICAgIDgzMCwgICA4MzEsICAgODQ4LCAgIDg0OSwgICA4NjIsICAgODYz
LCAgIDg2NCwgICA4NjUsICAgODY2LCAgIDg3MCwKLSAgICAgODczLCAgIDg4NCwgICA4OTIsICAg
OTE5LCAgIDkyNCwgICA5MzgsICAgOTkzLCAgIDk5NiwgIDEwMDMsICAxMDExLAotICAgIDEwMzIs
ICAxMDUzLCAgMTA2MywgIDEwOTEsICAxMDk2LCAgMTEwNiwgIDExMTEsICAxMTIxLCAgMTEyNCwg
IDExMjcsCi0gICAgMTEzMCwgIDExMzYsICAxMTQzLCAgMTE0NiwgIDExNjgsICAxMTg2LCAgMTIx
MCwgIDEyMzMsICAxMjM3LCAgMTI1NSwKLSAgICAxMjYzLCAgMTI5NSwgIDEzMTUsICAxMzM2LCAg
MTM0NSwgIDEzNjgsICAxMzcxLCAgMTM3NywgIDEzODUsICAxMzkzLAotICAgIDE0MDEsICAxNDEx
LCAgMTQxOCwgIDE0MjEsICAxNDI0LCAgMTQzMCwgIDE0MzMsICAxNDQ4LCAgMTQ1MiwgIDE0NTYs
Ci0gICAgMTQ2MCwgIDE0NjQsICAxNDY5LCAgMTQ3NCwgIDE0NzksICAxNDg0LCAgMTQ4OSwgIDE0
OTQsICAxNDk5LCAgMTUwNCwKLSAgICAxNTA5LCAgMTUxNCwgIDE1MTksICAxNTI0LCAgMTUyOCwg
IDE1MzIsICAxNTQwLCAgMTU0OCwgIDE1NTIsICAxNTY1LAotICAgIDE1NjUsICAxNTc5LCAgMTU3
OSwgIDE1ODgsICAxNTkxLCAgMTYwNywgIDE2NDAsICAxNjQ0LCAgMTY1MCwgIDE2NTcsCi0gICAg
MTY3MiwgIDE2NzYsICAxNjgwLCAgMTY4MSwgIDE2ODcsICAxNjg4LCAgMTY4OSwgIDE2OTAsICAx
NjkxLCAgMTY5NSwKLSAgICAxNjk2LCAgMTY5NiwgIDE2OTYsICAxNzA2LCAgMTcwNywgIDE3MTEs
ICAxNzExLCAgMTcxMiwgIDE3MTIsICAxNzE3LAotICAgIDE3MjAsICAxNzMwLCAgMTczMywgIDE3
MzksICAxNzQwLCAgMTc0NCwgIDE3NTIsICAxNzU2LCAgMTc2NiwgIDE3NzEsCi0gICAgMTc4OCwg
IDE3ODgsICAxNzkzLCAgMTc5MywgIDE4MDAsICAxODAwLCAgMTgwOCwgIDE4MTEsICAxODE3LCAg
MTgyMCwKLSAgICAxODI2LCAgMTgzMCwgIDE4MzcsICAxODQ0LCAgMTg1MSwgIDE4NTgsICAxODY5
LCAgMTg3OCwgIDE4ODIsICAxODg5LAotICAgIDE4OTIsICAxODk4LCAgMTg5OAotfTsKLSNlbmRp
ZgotCi0jaWYgWVlERUJVRyB8fCBZWUVSUk9SX1ZFUkJPU0UgfHwgMAotLyogWVlUTkFNRVtTWU1C
T0wtTlVNXSAtLSBTdHJpbmcgbmFtZSBvZiB0aGUgc3ltYm9sIFNZTUJPTC1OVU0uCi0gICBGaXJz
dCwgdGhlIHRlcm1pbmFscywgdGhlbiwgc3RhcnRpbmcgYXQgWVlOVE9LRU5TLCBub250ZXJtaW5h
bHMuICAqLwotc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHl5dG5hbWVbXSA9Ci17Ci0gICIkZW5k
IiwgImVycm9yIiwgIiR1bmRlZmluZWQiLCAiSU5WQVJJQU5UIiwgIkhJR0hfUFJFQ0lTSU9OIiwK
LSAgIk1FRElVTV9QUkVDSVNJT04iLCAiTE9XX1BSRUNJU0lPTiIsICJQUkVDSVNJT04iLCAiQVRU
UklCVVRFIiwKLSAgIkNPTlNUX1FVQUwiLCAiQk9PTF9UWVBFIiwgIkZMT0FUX1RZUEUiLCAiSU5U
X1RZUEUiLCAiQlJFQUsiLCAiQ09OVElOVUUiLAotICAiRE8iLCAiRUxTRSIsICJGT1IiLCAiSUYi
LCAiRElTQ0FSRCIsICJSRVRVUk4iLCAiQlZFQzIiLCAiQlZFQzMiLAotICAiQlZFQzQiLCAiSVZF
QzIiLCAiSVZFQzMiLCAiSVZFQzQiLCAiVkVDMiIsICJWRUMzIiwgIlZFQzQiLCAiTUFUUklYMiIs
Ci0gICJNQVRSSVgzIiwgIk1BVFJJWDQiLCAiSU5fUVVBTCIsICJPVVRfUVVBTCIsICJJTk9VVF9R
VUFMIiwgIlVOSUZPUk0iLAotICAiVkFSWUlORyIsICJTVFJVQ1QiLCAiVk9JRF9UWVBFIiwgIldI
SUxFIiwgIlNBTVBMRVIyRCIsICJTQU1QTEVSQ1VCRSIsCi0gICJTQU1QTEVSX0VYVEVSTkFMX09F
UyIsICJTQU1QTEVSMkRSRUNUIiwgIklERU5USUZJRVIiLCAiVFlQRV9OQU1FIiwKLSAgIkZMT0FU
Q09OU1RBTlQiLCAiSU5UQ09OU1RBTlQiLCAiQk9PTENPTlNUQU5UIiwgIkxFRlRfT1AiLCAiUklH
SFRfT1AiLAotICAiSU5DX09QIiwgIkRFQ19PUCIsICJMRV9PUCIsICJHRV9PUCIsICJFUV9PUCIs
ICJORV9PUCIsICJBTkRfT1AiLAotICAiT1JfT1AiLCAiWE9SX09QIiwgIk1VTF9BU1NJR04iLCAi
RElWX0FTU0lHTiIsICJBRERfQVNTSUdOIiwKLSAgIk1PRF9BU1NJR04iLCAiTEVGVF9BU1NJR04i
LCAiUklHSFRfQVNTSUdOIiwgIkFORF9BU1NJR04iLCAiWE9SX0FTU0lHTiIsCi0gICJPUl9BU1NJ
R04iLCAiU1VCX0FTU0lHTiIsICJMRUZUX1BBUkVOIiwgIlJJR0hUX1BBUkVOIiwgIkxFRlRfQlJB
Q0tFVCIsCi0gICJSSUdIVF9CUkFDS0VUIiwgIkxFRlRfQlJBQ0UiLCAiUklHSFRfQlJBQ0UiLCAi
RE9UIiwgIkNPTU1BIiwgIkNPTE9OIiwKLSAgIkVRVUFMIiwgIlNFTUlDT0xPTiIsICJCQU5HIiwg
IkRBU0giLCAiVElMREUiLCAiUExVUyIsICJTVEFSIiwgIlNMQVNIIiwKLSAgIlBFUkNFTlQiLCAi
TEVGVF9BTkdMRSIsICJSSUdIVF9BTkdMRSIsICJWRVJUSUNBTF9CQVIiLCAiQ0FSRVQiLAotICAi
QU1QRVJTQU5EIiwgIlFVRVNUSU9OIiwgIiRhY2NlcHQiLCAiaWRlbnRpZmllciIsICJ2YXJpYWJs
ZV9pZGVudGlmaWVyIiwKLSAgInByaW1hcnlfZXhwcmVzc2lvbiIsICJwb3N0Zml4X2V4cHJlc3Np
b24iLCAiaW50ZWdlcl9leHByZXNzaW9uIiwKLSAgImZ1bmN0aW9uX2NhbGwiLCAiZnVuY3Rpb25f
Y2FsbF9vcl9tZXRob2QiLCAiZnVuY3Rpb25fY2FsbF9nZW5lcmljIiwKLSAgImZ1bmN0aW9uX2Nh
bGxfaGVhZGVyX25vX3BhcmFtZXRlcnMiLAotICAiZnVuY3Rpb25fY2FsbF9oZWFkZXJfd2l0aF9w
YXJhbWV0ZXJzIiwgImZ1bmN0aW9uX2NhbGxfaGVhZGVyIiwKLSAgImZ1bmN0aW9uX2lkZW50aWZp
ZXIiLCAidW5hcnlfZXhwcmVzc2lvbiIsICJ1bmFyeV9vcGVyYXRvciIsCi0gICJtdWx0aXBsaWNh
dGl2ZV9leHByZXNzaW9uIiwgImFkZGl0aXZlX2V4cHJlc3Npb24iLCAic2hpZnRfZXhwcmVzc2lv
biIsCi0gICJyZWxhdGlvbmFsX2V4cHJlc3Npb24iLCAiZXF1YWxpdHlfZXhwcmVzc2lvbiIsICJh
bmRfZXhwcmVzc2lvbiIsCi0gICJleGNsdXNpdmVfb3JfZXhwcmVzc2lvbiIsICJpbmNsdXNpdmVf
b3JfZXhwcmVzc2lvbiIsCi0gICJsb2dpY2FsX2FuZF9leHByZXNzaW9uIiwgImxvZ2ljYWxfeG9y
X2V4cHJlc3Npb24iLAotICAibG9naWNhbF9vcl9leHByZXNzaW9uIiwgImNvbmRpdGlvbmFsX2V4
cHJlc3Npb24iLAotICAiYXNzaWdubWVudF9leHByZXNzaW9uIiwgImFzc2lnbm1lbnRfb3BlcmF0
b3IiLCAiZXhwcmVzc2lvbiIsCi0gICJjb25zdGFudF9leHByZXNzaW9uIiwgImRlY2xhcmF0aW9u
IiwgImZ1bmN0aW9uX3Byb3RvdHlwZSIsCi0gICJmdW5jdGlvbl9kZWNsYXJhdG9yIiwgImZ1bmN0
aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMiLAotICAiZnVuY3Rpb25faGVhZGVyIiwgInBhcmFt
ZXRlcl9kZWNsYXJhdG9yIiwgInBhcmFtZXRlcl9kZWNsYXJhdGlvbiIsCi0gICJwYXJhbWV0ZXJf
cXVhbGlmaWVyIiwgInBhcmFtZXRlcl90eXBlX3NwZWNpZmllciIsCi0gICJpbml0X2RlY2xhcmF0
b3JfbGlzdCIsICJzaW5nbGVfZGVjbGFyYXRpb24iLCAiZnVsbHlfc3BlY2lmaWVkX3R5cGUiLAot
ICAidHlwZV9xdWFsaWZpZXIiLCAidHlwZV9zcGVjaWZpZXIiLCAicHJlY2lzaW9uX3F1YWxpZmll
ciIsCi0gICJ0eXBlX3NwZWNpZmllcl9ub19wcmVjIiwgInR5cGVfc3BlY2lmaWVyX25vbmFycmF5
IiwgInN0cnVjdF9zcGVjaWZpZXIiLAotICAiJEAxIiwgIiRAMiIsICJzdHJ1Y3RfZGVjbGFyYXRp
b25fbGlzdCIsICJzdHJ1Y3RfZGVjbGFyYXRpb24iLAotICAic3RydWN0X2RlY2xhcmF0b3JfbGlz
dCIsICJzdHJ1Y3RfZGVjbGFyYXRvciIsICJpbml0aWFsaXplciIsCi0gICJkZWNsYXJhdGlvbl9z
dGF0ZW1lbnQiLCAic3RhdGVtZW50IiwgInNpbXBsZV9zdGF0ZW1lbnQiLAotICAiY29tcG91bmRf
c3RhdGVtZW50IiwgIiRAMyIsICIkQDQiLCAic3RhdGVtZW50X25vX25ld19zY29wZSIsCi0gICJz
dGF0ZW1lbnRfd2l0aF9zY29wZSIsICIkQDUiLCAiJEA2IiwgImNvbXBvdW5kX3N0YXRlbWVudF9u
b19uZXdfc2NvcGUiLAotICAic3RhdGVtZW50X2xpc3QiLCAiZXhwcmVzc2lvbl9zdGF0ZW1lbnQi
LCAic2VsZWN0aW9uX3N0YXRlbWVudCIsCi0gICJzZWxlY3Rpb25fcmVzdF9zdGF0ZW1lbnQiLCAi
Y29uZGl0aW9uIiwgIml0ZXJhdGlvbl9zdGF0ZW1lbnQiLCAiJEA3IiwKLSAgIiRAOCIsICIkQDki
LCAiZm9yX2luaXRfc3RhdGVtZW50IiwgImNvbmRpdGlvbm9wdCIsICJmb3JfcmVzdF9zdGF0ZW1l
bnQiLAotICAianVtcF9zdGF0ZW1lbnQiLCAidHJhbnNsYXRpb25fdW5pdCIsICJleHRlcm5hbF9k
ZWNsYXJhdGlvbiIsCi0gICJmdW5jdGlvbl9kZWZpbml0aW9uIiwgIiRAMTAiLCBZWV9OVUxMCi19
OwotI2VuZGlmCi0KLSMgaWZkZWYgWVlQUklOVAotLyogWVlUT0tOVU1bWVlMRVgtTlVNXSAtLSBJ
bnRlcm5hbCB0b2tlbiBudW1iZXIgY29ycmVzcG9uZGluZyB0bwotICAgdG9rZW4gWVlMRVgtTlVN
LiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5dG9rbnVtW10gPQotewotICAgICAg
IDAsICAgMjU2LCAgIDI1NywgICAyNTgsICAgMjU5LCAgIDI2MCwgICAyNjEsICAgMjYyLCAgIDI2
MywgICAyNjQsCi0gICAgIDI2NSwgICAyNjYsICAgMjY3LCAgIDI2OCwgICAyNjksICAgMjcwLCAg
IDI3MSwgICAyNzIsICAgMjczLCAgIDI3NCwKLSAgICAgMjc1LCAgIDI3NiwgICAyNzcsICAgMjc4
LCAgIDI3OSwgICAyODAsICAgMjgxLCAgIDI4MiwgICAyODMsICAgMjg0LAotICAgICAyODUsICAg
Mjg2LCAgIDI4NywgICAyODgsICAgMjg5LCAgIDI5MCwgICAyOTEsICAgMjkyLCAgIDI5MywgICAy
OTQsCi0gICAgIDI5NSwgICAyOTYsICAgMjk3LCAgIDI5OCwgICAyOTksICAgMzAwLCAgIDMwMSwg
ICAzMDIsICAgMzAzLCAgIDMwNCwKLSAgICAgMzA1LCAgIDMwNiwgICAzMDcsICAgMzA4LCAgIDMw
OSwgICAzMTAsICAgMzExLCAgIDMxMiwgICAzMTMsICAgMzE0LAotICAgICAzMTUsICAgMzE2LCAg
IDMxNywgICAzMTgsICAgMzE5LCAgIDMyMCwgICAzMjEsICAgMzIyLCAgIDMyMywgICAzMjQsCi0g
ICAgIDMyNSwgICAzMjYsICAgMzI3LCAgIDMyOCwgICAzMjksICAgMzMwLCAgIDMzMSwgICAzMzIs
ICAgMzMzLCAgIDMzNCwKLSAgICAgMzM1LCAgIDMzNiwgICAzMzcsICAgMzM4LCAgIDMzOSwgICAz
NDAsICAgMzQxLCAgIDM0MiwgICAzNDMsICAgMzQ0LAotICAgICAzNDUsICAgMzQ2LCAgIDM0Nywg
ICAzNDgsICAgMzQ5Ci19OwotIyBlbmRpZgotCi0vKiBZWVIxW1lZTl0gLS0gU3ltYm9sIG51bWJl
ciBvZiBzeW1ib2wgdGhhdCBydWxlIFlZTiBkZXJpdmVzLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5
cGVfdWludDggeXlyMVtdID0KLXsKLSAgICAgICAwLCAgICA5NSwgICAgOTYsICAgIDk2LCAgICA5
NywgICAgOTgsICAgIDk4LCAgICA5OCwgICAgOTgsICAgIDk4LAotICAgICAgOTksICAgIDk5LCAg
ICA5OSwgICAgOTksICAgIDk5LCAgICA5OSwgICAxMDAsICAgMTAxLCAgIDEwMiwgICAxMDIsCi0g
ICAgIDEwMywgICAxMDMsICAgMTA0LCAgIDEwNCwgICAxMDUsICAgMTA1LCAgIDEwNiwgICAxMDcs
ICAgMTA3LCAgIDEwOCwKLSAgICAgMTA4LCAgIDEwOCwgICAxMDgsICAgMTA5LCAgIDEwOSwgICAx
MDksICAgMTEwLCAgIDExMCwgICAxMTAsICAgMTExLAotICAgICAxMTEsICAgMTExLCAgIDExMiwg
ICAxMTMsICAgMTEzLCAgIDExMywgICAxMTMsICAgMTEzLCAgIDExNCwgICAxMTQsCi0gICAgIDEx
NCwgICAxMTUsICAgMTE2LCAgIDExNywgICAxMTgsICAgMTE4LCAgIDExOSwgICAxMTksICAgMTIw
LCAgIDEyMCwKLSAgICAgMTIxLCAgIDEyMSwgICAxMjIsICAgMTIyLCAgIDEyMywgICAxMjMsICAg
MTIzLCAgIDEyMywgICAxMjMsICAgMTI0LAotICAgICAxMjQsICAgMTI1LCAgIDEyNiwgICAxMjYs
ICAgMTI2LCAgIDEyNywgICAxMjgsICAgMTI4LCAgIDEyOSwgICAxMjksCi0gICAgIDEzMCwgICAx
MzEsICAgMTMxLCAgIDEzMiwgICAxMzIsICAgMTMyLCAgIDEzMiwgICAxMzMsICAgMTMzLCAgIDEz
MywKLSAgICAgMTMzLCAgIDEzNCwgICAxMzUsICAgMTM1LCAgIDEzNSwgICAxMzUsICAgMTM1LCAg
IDEzNiwgICAxMzYsICAgMTM2LAotICAgICAxMzYsICAgMTM2LCAgIDEzNiwgICAxMzcsICAgMTM3
LCAgIDEzOCwgICAxMzgsICAgMTM4LCAgIDEzOCwgICAxMzgsCi0gICAgIDEzOSwgICAxMzksICAg
MTQwLCAgIDE0MCwgICAxNDAsICAgMTQxLCAgIDE0MSwgICAxNDIsICAgMTQyLCAgIDE0MiwKLSAg
ICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0Miwg
ICAxNDIsICAgMTQyLAotICAgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0
MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDQsCi0gICAgIDE0MywgICAxNDUsICAgMTQzLCAg
IDE0NiwgICAxNDYsICAgMTQ3LCAgIDE0OCwgICAxNDgsICAgMTQ5LCAgIDE0OSwKLSAgICAgMTUw
LCAgIDE1MSwgICAxNTIsICAgMTUyLCAgIDE1MywgICAxNTMsICAgMTUzLCAgIDE1MywgICAxNTMs
ICAgMTU0LAotICAgICAxNTUsICAgMTU2LCAgIDE1NCwgICAxNTcsICAgMTU3LCAgIDE1OSwgICAx
NTgsICAgMTYwLCAgIDE1OCwgICAxNjEsCi0gICAgIDE2MSwgICAxNjIsICAgMTYyLCAgIDE2Mywg
ICAxNjMsICAgMTY0LCAgIDE2NSwgICAxNjUsICAgMTY2LCAgIDE2NiwKLSAgICAgMTY4LCAgIDE2
NywgICAxNjksICAgMTY3LCAgIDE3MCwgICAxNjcsICAgMTcxLCAgIDE3MSwgICAxNzIsICAgMTcy
LAotICAgICAxNzMsICAgMTczLCAgIDE3NCwgICAxNzQsICAgMTc0LCAgIDE3NCwgICAxNzQsICAg
MTc1LCAgIDE3NSwgICAxNzYsCi0gICAgIDE3NiwgICAxNzgsICAgMTc3Ci19OwotCi0vKiBZWVIy
W1lZTl0gLS0gTnVtYmVyIG9mIHN5bWJvbHMgY29tcG9zaW5nIHJpZ2h0IGhhbmQgc2lkZSBvZiBy
dWxlIFlZTi4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjJbXSA9Ci17Ci0gICAg
ICAgMCwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMywKLSAgICAgICAxLCAgICAgNCwgICAgIDEsICAgICAzLCAgICAgMiwgICAgIDIs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDEsICAgICAyLCAgICAgMywgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsCi0gICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAzLCAg
ICAgMSwKLSAgICAgICAzLCAgICAgMywgICAgIDEsICAgICAxLCAgICAgMywgICAgIDMsICAgICAz
LCAgICAgMywgICAgIDEsICAgICAzLAotICAgICAgIDMsICAgICAxLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMywgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDMsCi0gICAgICAgMSwgICAgIDUs
ICAgICAxLCAgICAgMywgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwK
LSAgICAgICAzLCAgICAgMSwgICAgIDIsICAgICAyLCAgICAgNCwgICAgIDIsICAgICAxLCAgICAg
MSwgICAgIDIsICAgICAzLAotICAgICAgIDMsICAgICAyLCAgICAgNSwgICAgIDMsICAgICAyLCAg
ICAgMywgICAgIDIsICAgICAwLCAgICAgMSwgICAgIDEsCi0gICAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMywgICAgIDUsICAgICA2LCAgICAgNSwgICAgIDEsICAgICAyLCAgICAgNCwKLSAgICAg
ICA1LCAgICAgNCwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDIsICAgICAxLAotICAgICAgIDEsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwg
ICAgIDQsICAgICAxLCAgICAgMSwgICAgIDEsCi0gICAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKLSAgICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAg
ICAwLAotICAgICAgIDYsICAgICAwLCAgICAgNSwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDEs
ICAgICAzLCAgICAgMSwgICAgIDQsCi0gICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMiwKLSAgICAgICAwLCAgICAgMCwg
ICAgIDUsICAgICAxLCAgICAgMSwgICAgIDAsICAgICAyLCAgICAgMCwgICAgIDIsICAgICAyLAot
ICAgICAgIDMsICAgICAxLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgNSwgICAgIDMsICAgICAx
LCAgICAgMSwgICAgIDQsCi0gICAgICAgMCwgICAgIDYsICAgICAwLCAgICAgOCwgICAgIDAsICAg
ICA3LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMCwKLSAgICAgICAyLCAgICAgMywgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAxLAotICAgICAg
IDEsICAgICAwLCAgICAgMwotfTsKLQotLyogWVlERUZBQ1RbU1RBVEUtTkFNRV0gLS0gRGVmYXVs
dCByZWR1Y3Rpb24gbnVtYmVyIGluIHN0YXRlIFNUQVRFLU5VTS4KLSAgIFBlcmZvcm1lZCB3aGVu
IFlZVEFCTEUgZG9lc24ndCBzcGVjaWZ5IHNvbWV0aGluZyBlbHNlIHRvIGRvLiAgWmVybwotICAg
bWVhbnMgdGhlIGRlZmF1bHQgaXMgYW4gZXJyb3IuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91
aW50OCB5eWRlZmFjdFtdID0KLXsKLSAgICAgICAwLCAgICAgMCwgICAxMTIsICAgMTEzLCAgIDEx
NCwgICAgIDAsICAgMTA2LCAgIDEwNSwgICAxMjAsICAgMTE4LAotICAgICAxMTksICAgMTI0LCAg
IDEyNSwgICAxMjYsICAgMTI3LCAgIDEyOCwgICAxMjksICAgMTIxLCAgIDEyMiwgICAxMjMsCi0g
ICAgIDEzMCwgICAxMzEsICAgMTMyLCAgIDEwOSwgICAxMDcsICAgICAwLCAgIDExNywgICAxMzMs
ICAgMTM0LCAgIDEzNSwKLSAgICAgMTM2LCAgIDEzOCwgICAyMDAsICAgMjAxLCAgICAgMCwgICAg
NzcsICAgIDg3LCAgICAgMCwgICAgOTIsICAgIDk3LAotICAgICAgIDAsICAgMTAzLCAgICAgMCwg
ICAxMTAsICAgMTE1LCAgIDEzNywgICAgIDAsICAgMTk3LCAgIDE5OSwgICAxMDgsCi0gICAgIDEw
MiwgICAgIDAsICAgICAyLCAgICAgMywgICAxNDEsICAgICAwLCAgICA3MiwgICAgIDAsICAgIDc1
LCAgICA4NywKLSAgICAgICAwLCAgICA4OCwgICAgODksICAgIDkwLCAgICA3OCwgICAgIDAsICAg
IDg3LCAgICAgMCwgICAgNzMsICAgICAyLAotICAgICAgOTgsICAgMTA0LCAgIDExMSwgICAgIDAs
ICAgICAxLCAgIDE5OCwgICAgIDAsICAgICAwLCAgIDEzOSwgICAgIDAsCi0gICAgIDIwMiwgICAg
NzksICAgIDg0LCAgICA4NiwgICAgOTEsICAgICAwLCAgICA5MywgICAgODAsICAgICAwLCAgICAg
MCwKLSAgICAgICA0LCAgICAgNywgICAgIDYsICAgICA4LCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAzNSwgICAgMzQsICAgIDMzLAotICAgICAgIDUsICAgIDEwLCAgICAyOSwgICAgMTIsICAgIDE3
LCAgICAxOCwgICAgIDAsICAgICAwLCAgICAyMywgICAgIDAsCi0gICAgICAzNiwgICAgIDAsICAg
IDM5LCAgICA0MiwgICAgNDMsICAgIDQ4LCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwKLSAg
ICAgIDU2LCAgICA1OCwgICAgNjAsICAgIDcxLCAgICAgMCwgICAgMjcsICAgIDc0LCAgICAgMCwg
ICAgIDAsICAgMTQzLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAxODIsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNjAsCi0gICAgIDE2OSwgICAxNzMsICAgIDM2LCAg
ICA2MiwgICAgNjksICAgICAwLCAgIDE1MSwgICAgIDAsICAgMTE1LCAgIDE1NCwKLSAgICAgMTcx
LCAgIDE1MywgICAxNTIsICAgICAwLCAgIDE1NSwgICAxNTYsICAgMTU3LCAgIDE1OCwgICAgODEs
ICAgIDgzLAotICAgICAgODUsICAgICAwLCAgICAgMCwgICAgOTksICAgICAwLCAgIDE1MCwgICAx
MDEsICAgIDMwLCAgICAzMSwgICAgIDAsCi0gICAgICAxNCwgICAgMTUsICAgICAwLCAgICAgMCwg
ICAgMjEsICAgIDIwLCAgICAgMCwgICAgMjIsICAgIDI0LCAgICAyNiwKLSAgICAgIDMyLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDExNiwgICAxNDgsICAg
ICAwLCAgIDE0NiwgICAxNDIsCi0gICAgIDE0NCwgICAgIDAsICAgMTkzLCAgIDE5MiwgICAxNjcs
ICAgMTg0LCAgICAgMCwgICAxOTYsICAgMTk0LCAgICAgMCwKLSAgICAgMTgwLCAgIDE1OSwgICAg
IDAsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2NCwgICAgIDAsICAgICAwLAotICAg
ICAxNzQsICAgMTcwLCAgIDE3MiwgICAgIDAsICAgIDk0LCAgICAgMCwgICAgOTYsICAgMTAwLCAg
ICAgOSwgICAgIDAsCi0gICAgICAxNiwgICAgIDIsICAgICAzLCAgICAxMywgICAgMTksICAgIDI1
LCAgICAzNywgICAgMzgsICAgIDQxLCAgICA0MCwKLSAgICAgIDQ2LCAgICA0NywgICAgNDQsICAg
IDQ1LCAgICA0OSwgICAgNTAsICAgIDU1LCAgICA1NywgICAgNTksICAgICAwLAotICAgICAgIDAs
ICAgICAwLCAgIDE0NSwgICAxNDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAxOTUsCi0gICAgICAgMCwgICAxNjEsICAgIDYzLCAgICA3MCwgICAgIDAsICAgIDk1LCAgICAx
MSwgICAgIDAsICAgICAwLCAgIDE0NywKLSAgICAgICAwLCAgIDE2NiwgICAxNjgsICAgMTg3LCAg
IDE4NiwgICAxODksICAgMTY3LCAgIDE3OCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgIDgy
LCAgICA2MSwgICAxNDksICAgICAwLCAgIDE4OCwgICAgIDAsICAgICAwLCAgIDE3NywgICAxNzUs
Ci0gICAgICAgMCwgICAgIDAsICAgMTYyLCAgICAgMCwgICAxOTAsICAgICAwLCAgIDE2NywgICAg
IDAsICAgMTY0LCAgIDE4MSwKLSAgICAgMTYzLCAgICAgMCwgICAxOTEsICAgMTg1LCAgIDE3Niwg
ICAxNzksICAgMTgzCi19OwotCi0vKiBZWURFRkdPVE9bTlRFUk0tTlVNXS4gICovCi1zdGF0aWMg
Y29uc3QgeXl0eXBlX2ludDE2IHl5ZGVmZ290b1tdID0KLXsKLSAgICAgIC0xLCAgIDE5NiwgICAx
MDAsICAgMTAxLCAgIDEwMiwgICAyMjksICAgMTAzLCAgIDEwNCwgICAxMDUsICAgMTA2LAotICAg
ICAxMDcsICAgMTA4LCAgIDEwOSwgICAxNDIsICAgMTExLCAgIDExMiwgICAxMTMsICAgMTE0LCAg
IDExNSwgICAxMTYsCi0gICAgIDExNywgICAxMTgsICAgMTE5LCAgIDEyMCwgICAxMjEsICAgMTIy
LCAgIDE0MywgICAxNDQsICAgMjE4LCAgIDE0NSwKLSAgICAgMTI0LCAgIDE0NiwgICAxNDcsICAg
IDM0LCAgICAzNSwgICAgMzYsICAgIDgyLCAgICA2NCwgICAgNjUsICAgIDgzLAotICAgICAgMzcs
ICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgMTI1LCAgICA0NSwg
ICAxMzAsCi0gICAgICA3NywgICAxMjgsICAgMTI5LCAgIDE5NywgICAxOTgsICAgMTY2LCAgIDE0
OSwgICAxNTAsICAgMTUxLCAgIDE1MiwKLSAgICAgMjEyLCAgIDI4MCwgICAyOTksICAgMjU0LCAg
IDI1NSwgICAyNTYsICAgMzAwLCAgIDE1MywgICAxNTQsICAgMTU1LAotICAgICAyODksICAgMjc5
LCAgIDE1NiwgICAyNjAsICAgMjA0LCAgIDI1NywgICAyNzUsICAgMjg2LCAgIDI4NywgICAxNTcs
Ci0gICAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA1NwotfTsKLQotLyogWVlQQUNUW1NUQVRFLU5V
TV0gLS0gSW5kZXggaW4gWVlUQUJMRSBvZiB0aGUgcG9ydGlvbiBkZXNjcmliaW5nCi0gICBTVEFU
RS1OVU0uICAqLwotI2RlZmluZSBZWVBBQ1RfTklORiAtMjYxCi1zdGF0aWMgY29uc3QgeXl0eXBl
X2ludDE2IHl5cGFjdFtdID0KLXsKLSAgICAxMzI3LCAgIC0yMCwgIC0yNjEsICAtMjYxLCAgLTI2
MSwgICAxMTMsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAtMjYxLCAg
LTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsCi0g
ICAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgLTE5LCAgLTI2MSwgIC0yNjEs
ICAtMjYxLCAgLTI2MSwKLSAgICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgLTYxLCAgIC00MCwgICAt
MjgsICAgIDc1LCAgICAtNywgIC0yNjEsICAgIDI0LAotICAgIDEzNzAsICAtMjYxLCAgMTQ0NCwg
IC0yNjEsICAgLTExLCAgLTI2MSwgIDEyODMsICAtMjYxLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2
MSwgIDE0NDQsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgICA2LCAgLTI2MSwgICAgNTQsICAtMjYx
LCAgICA4OCwKLSAgICAgIDYyLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIDEzNzAsICAg
IDU5LCAgICA5MSwgIC0yNjEsICAgIDM2LAotICAgICAtNTAsICAtMjYxLCAgLTI2MSwgIDEwNTEs
ICAtMjYxLCAgLTI2MSwgICAgNjMsICAxMzcwLCAgLTI2MSwgICAyOTMsCi0gICAgLTI2MSwgIC0y
NjEsICAtMjYxLCAgLTI2MSwgICAgOTEsICAxMzcwLCAgIC0xMiwgIC0yNjEsICAgODU2LCAgMTA1
MSwKLSAgICAgIDc3LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgMTA1MSwgIDEwNTEsICAxMDUxLCAg
LTI2MSwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAtMjYxLCAgIC0xNCwgIC0yNjEsICAtMjYx
LCAgLTI2MSwgICAgODQsICAgLTQ0LCAgMTExNiwgICAgOTUsCi0gICAgLTI2MSwgIDEwNTEsICAg
IDUzLCAgICAgMywgIC0yNjEsICAgLTM2LCAgICA4OSwgIC0yNjEsICAtMjYxLCAgLTI2MSwKLSAg
ICAgMTA0LCAgIDEwNywgICAtNDUsICAtMjYxLCAgICA5NiwgIC0yNjEsICAtMjYxLCAgICA5MSwg
IDExODQsICAtMjYxLAotICAgIDEzNzAsICAgIDkyLCAgICA5MywgIC0yNjEsICAgIDk4LCAgIDEw
MSwgICAgOTQsICAgOTIxLCAgIDEwNSwgICAxMDIsCi0gICAgLTI2MSwgIC0yNjEsICAgIDcyLCAg
LTI2MSwgIC0yNjEsICAgICA5LCAgLTI2MSwgICAtNjEsICAgIDQyLCAgLTI2MSwKLSAgICAtMjYx
LCAgLTI2MSwgIC0yNjEsICAgMzc2LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAxMDYs
ICAtMjYxLAotICAgIC0yNjEsICAgOTg2LCAgMTA1MSwgIC0yNjEsICAgMTAzLCAgLTI2MSwgIC0y
NjEsICAtMjYxLCAgLTI2MSwgICAtNDEsCi0gICAgLTI2MSwgIC0yNjEsICAxMDUxLCAgMTQwNywg
IC0yNjEsICAtMjYxLCAgMTA1MSwgICAxMTAsICAtMjYxLCAgLTI2MSwKLSAgICAtMjYxLCAgMTA1
MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAxMDUx
LAotICAgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgLTI2MSwgICAxMDksICAg
IDIzLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2MSwgIDEyMjcsICAtMjYxLCAgLTI2MSwgICAxMTEs
ICAtMjYxLCAgMTA1MSwgIC0yNjEsICAtMjYxLCAgICAyNSwKLSAgICAtMjYxLCAgLTI2MSwgICA0
NTksICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIDEwNTEsICAxMDUxLAotICAg
IC0yNjEsICAtMjYxLCAgLTI2MSwgIDEwNTEsICAtMjYxLCAgIDExNCwgIC0yNjEsICAtMjYxLCAg
LTI2MSwgICAxMTUsCi0gICAgIDExMiwgICAgNzcsICAgMTE2LCAgLTI2MSwgIC0yNjEsICAtMjYx
LCAgLTI2MSwgIC0yNjEsICAgIDUzLCAgICA1MywKLSAgICAtMjYxLCAgLTI2MSwgIC0yNjEsICAt
MjYxLCAgIC0zNiwgICAtMzYsICAtMjYxLCAgIDEwNCwgICAxMDcsICAgIDc2LAotICAgIDEwNTEs
ICAgIDkxLCAgLTI2MSwgIC0yNjEsICAgMTQ1LCAgICA1NCwgICA2MjUsICAgNzA4LCAgICAtNiwg
IC0yNjEsCi0gICAgIDc5MSwgICA0NTksICAtMjYxLCAgLTI2MSwgICAxMTcsICAtMjYxLCAgLTI2
MSwgIDEwNTEsICAgMTIwLCAgLTI2MSwKLSAgICAgMTI0LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAg
LTI2MSwgICA3OTEsICAgMTExLCAgIDExMiwgICAgOTEsICAgMTI1LAotICAgICAxMjIsICAtMjYx
LCAgLTI2MSwgIC0yNjEsICAxMDUxLCAgLTI2MSwgICAxMTgsICAgMTI4LCAgIDE4MCwgIC0yNjEs
Ci0gICAgIDEyNiwgICA1NDIsICAtMjYxLCAgICAtNSwgIDEwNTEsICAgNTQyLCAgIDExMSwgIDEw
NTEsICAtMjYxLCAgLTI2MSwKLSAgICAtMjYxLCAgIDEyMywgICAxMTIsICAtMjYxLCAgLTI2MSwg
IC0yNjEsICAtMjYxCi19OwotCi0vKiBZWVBHT1RPW05URVJNLU5VTV0uICAqLwotc3RhdGljIGNv
bnN0IHl5dHlwZV9pbnQxNiB5eXBnb3RvW10gPQotewotICAgIC0yNjEsICAgLTI0LCAgLTI2MSwg
IC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgICAzNCwgIC0yNjEsCi0gICAgLTI2
MSwgIC0yNjEsICAtMjYxLCAgICAzMiwgIC0yNjEsICAgLTMzLCAgLTI2MSwgICAtMjcsICAgLTI2
LCAgLTI2MSwKLSAgICAtMjYxLCAgLTI2MSwgICAgMTQsICAgIDE2LCAgICAxOCwgIC0yNjEsICAg
LTY2LCAgIC04NywgIC0yNjEsICAgLTkyLAotICAgICAtODUsICAgIDExLCAgICAxMiwgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgICAxNDEsICAgMTUwLCAgIDE2MSwgICAxNDMsCi0gICAgLTI2MSwgIC0y
NjEsICAtMjMxLCAgICAgNSwgICAtMzAsICAgMjI0LCAgIC0xOCwgICAgIDAsICAtMjYxLCAgLTI2
MSwKLSAgICAtMjYxLCAgIDEwMCwgIC0xMTksICAtMjYxLCAgIC0xNywgIC0xNTYsICAgLTI1LCAg
LTE0NSwgIC0yNDMsICAtMjYxLAotICAgIC0yNjEsICAtMjYxLCAgIC02NCwgIC0yNjAsICAtMjYx
LCAgLTI2MSwgICAtNTIsICAgIDIxLCAgIC0yMiwgIC0yNjEsCi0gICAgLTI2MSwgICAtMzksICAt
MjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwKLSAg
ICAtMjYxLCAgIDE5MSwgIC0yNjEsICAtMjYxCi19OwotCi0vKiBZWVRBQkxFW1lZUEFDVFtTVEFU
RS1OVU1dXS4gIFdoYXQgdG8gZG8gaW4gc3RhdGUgU1RBVEUtTlVNLiAgSWYKLSAgIHBvc2l0aXZl
LCBzaGlmdCB0aGF0IHRva2VuLiAgSWYgbmVnYXRpdmUsIHJlZHVjZSB0aGUgcnVsZSB3aGljaAot
ICAgbnVtYmVyIGlzIHRoZSBvcHBvc2l0ZS4gIElmIFlZVEFCTEVfTklORiwgc3ludGF4IGVycm9y
LiAgKi8KLSNkZWZpbmUgWVlUQUJMRV9OSU5GIC0xNjYKLXN0YXRpYyBjb25zdCB5eXR5cGVfaW50
MTYgeXl0YWJsZVtdID0KLXsKLSAgICAgIDQ0LCAgICA1NSwgICAxNjUsICAgMTY0LCAgIDE2OSwg
ICAgODAsICAgMjI2LCAgIDEyMywgICAyMjIsICAgMjAwLAotICAgICAgNzEsICAgIDMyLCAgICAz
MywgICAyNzIsICAgMTkzLCAgICA3MCwgICAyODgsICAgIDQ5LCAgIDE4NSwgICAxODYsCi0gICAg
ICA1NiwgICAxNzgsICAgMTIzLCAgICA4OCwgICAgNzIsICAgIDUwLCAgICA1MiwgICAgNTMsICAg
MTc1LCAgIDI3OCwKLSAgICAgIDg5LCAgIDIyOCwgICAgNTgsICAgIDc2LCAgIDE3NiwgICAgODQs
ICAgMzA0LCAgIDIxOSwgICAxNzAsICAgMTcxLAotICAgICAgNDQsICAgIDY2LCAgICA0NCwgICAg
ODYsICAgMjc4LCAgIDIwOSwgICAgNDQsICAgMTI3LCAgIDI5OCwgICAxOTQsCi0gICAgICA1OSwg
ICAgNDQsICAgMjk4LCAgIDE4NywgICAxODgsICAgIDg0LCAgICA1NCwgICAgMzIsICAgIDMzLCAg
IDE3MiwKLSAgICAgMTU4LCAgIDE2MSwgICAgNzMsICAgMTczLCAgICA2NiwgICAgNDQsICAgMjc2
LCAgIDMwMSwgICAxNjIsICAgIDY5LAotICAgICAgNTMsICAgIDY3LCAgIDIxOSwgICAyMTksICAg
IDY4LCAgIDE2NSwgICAyMjUsICAgIDQ0LCAgICA2MCwgICAxNDgsCi0gICAgIDIzMCwgICAgNzgs
ICAgMjAwLCAgICAgNiwgICAgIDcsICAgIDQ0LCAgIDE4MywgICAyMTksICAgMTg0LCAgIDIzNSwK
LSAgICAgMjIwLCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAxMjMsICAgICA2LCAgICAg
NywgICAxMjcsICAgIDQ5LAotICAgICAxMjcsICAgMjUxLCAgIDI0OSwgICAyMTksICAgMjUyLCAg
IDExMCwgICAyNTksICAgIDg3LCAgICA2MSwgICAgNjIsCi0gICAgICA2MywgICAgMjMsICAgIDI0
LCAgIC0yNywgICAyNTgsICAgIDczLCAgIDIyMiwgICAgIDIsICAgICAzLCAgICAgNCwKLSAgICAg
MTEwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICAyMywgICAgMjQsICAgMTY3LCAgIDE2OCwgICAg
NDQsICAgIDc5LAotICAgICAgNDQsICAgMjYyLCAgIDI2MywgICAyMTMsICAgMjE0LCAgIDIxNSwg
ICAgNTIsICAgIDUzLCAgIDI2NCwgICAxODEsCi0gICAgIDE4MiwgICAzMDUsICAgMjE2LCAgIDE4
MCwgICAxMjYsICAgMTg5LCAgIDE5MCwgICAtNzYsICAgLTI4LCAgIDIzMywKLSAgICAgMjM4LCAg
IDIzOSwgICAyMTcsICAgMTQ4LCAgIDIxOSwgICAyNjcsICAgMTc0LCAgIDEyMywgICAyNDAsICAg
MjQxLAotICAgICAyNDIsICAgMjQzLCAgIDE5MSwgICAyNDQsICAgMjQ1LCAgIDI2OCwgICAxNzks
ICAgMTkyLCAgIDI3NywgICAyMDUsCi0gICAgIDE5NSwgICAxMjcsICAgMjA2LCAgIDIwMiwgICAy
MDMsICAgMjA3LCAgIDIxMCwgICAyMjcsICAgMjExLCAgIDIyMywKLSAgICAgMjgyLCAgLTExNywg
ICAyNTAsICAgMjc3LCAgIDEyMywgICAyNzAsICAtMTY1LCAgLTEzOCwgICAyNjUsICAgMjY2LAot
ICAgICAyMTksICAgMjgxLCAgIDI5MywgICAxMTAsICAgMjgzLCAgIDI4NCwgICAyOTYsICAgMjkx
LCAgIDI5MiwgICAyOTQsCi0gICAgIDI5NSwgICAgNDQsICAgMzAyLCAgIDI3MSwgICAzMDYsICAg
MjQ2LCAgIDI5NywgICAyMzQsICAgMjQ3LCAgICA4MSwKLSAgICAgMTY1LCAgIDI0OCwgICAxNDgs
ICAgMjM2LCAgIDIzNywgICAxMTAsICAgMTEwLCAgIDExMCwgICAxMTAsICAgMTEwLAotICAgICAx
MTAsICAgMTEwLCAgIDExMCwgICAxMTAsICAgMTEwLCAgIDExMCwgICAxNTksICAgIDg1LCAgIDE2
MCwgICAgNTEsCi0gICAgIDIwMSwgICAzMDMsICAgMjczLCAgIDI2MSwgICAyNjksICAgMjc0LCAg
IDI4NSwgICAgNzUsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgMjkwLCAgIDExMCwgICAxNDgsICAgMTQ4LCAgICAgMCwgICAg
IDAsCi0gICAgIDE0OCwgICAxNDgsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAxNDgsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAg
IDExMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0g
ICAgICAgMCwgICAxNDgsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ4LCAgICAgMSwgICAgIDIs
ICAgICAzLCAgICAgNCwKLSAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAg
MTAsICAgMTMxLCAgIDEzMiwgICAxMzMsICAgICAwLAotICAgICAxMzQsICAgMTM1LCAgIDEzNiwg
ICAxMzcsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsCi0gICAgICAx
NywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAyMywKLSAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgMTM4LCAgICAyNywgICAgMjgsICAg
IDI5LCAgICAzMCwgICAgOTAsICAgIDMxLAotICAgICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAs
ICAgICAwLCAgICA5NCwgICAgOTUsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAxMzksICAgMTQwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQx
LCAgICA5NywgICAgOTgsICAgICAwLCAgICA5OSwgICAgIDEsCi0gICAgICAgMiwgICAgIDMsICAg
ICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgIDEzMSwKLSAg
ICAgMTMyLCAgIDEzMywgICAgIDAsICAgMTM0LCAgIDEzNSwgICAxMzYsICAgMTM3LCAgICAxMSwg
ICAgMTIsICAgIDEzLAotICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAx
OSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgIDIzLCAg
ICAyNCwgICAgMjUsICAgIDI2LCAgIDEzOCwgICAgMjcsICAgIDI4LCAgICAyOSwKLSAgICAgIDMw
LCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQs
ICAgIDk1LAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgIDEz
OSwgICAyMjEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0MSwgICAgOTcsICAgIDk4
LAotICAgICAgIDAsICAgIDk5LCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsICAg
ICA2LCAgICAgNywgICAgIDgsCi0gICAgICAgOSwgICAgMTAsICAgMTMxLCAgIDEzMiwgICAxMzMs
ICAgICAwLCAgIDEzNCwgICAxMzUsICAgMTM2LCAgIDEzNywKLSAgICAgIDExLCAgICAxMiwgICAg
MTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLAotICAg
ICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywgICAgMjQsICAgIDI1LCAg
ICAyNiwgICAxMzgsCi0gICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAsICAgIDMx
LCAgICA5MSwgICAgOTIsICAgIDkzLCAgICAgMCwKLSAgICAgICAwLCAgICA5NCwgICAgOTUsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsCi0gICAgICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMzksICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgMTQxLCAgICA5NywgICAgOTgsICAgICAwLCAg
ICA5OSwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LAotICAgICAgIDYsICAgICA3
LCAgICAgOCwgICAgIDksICAgIDEwLCAgIDEzMSwgICAxMzIsICAgMTMzLCAgICAgMCwgICAxMzQs
Ci0gICAgIDEzNSwgICAxMzYsICAgMTM3LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAg
MTUsICAgIDE2LCAgICAxNywKLSAgICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsICAgIDI0LAotICAgICAgMjUsICAgIDI2LCAgIDEz
OCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsCi0gICAg
ICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
OTYsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDc5LCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwg
ICAgIDAsICAgICAwLCAgIDE0MSwgICAgOTcsICAgIDk4LCAgICAgMCwgICAgOTksICAgICAxLCAg
ICAgMiwKLSAgICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5
LCAgICAxMCwgICAxMzEsICAgMTMyLAotICAgICAxMzMsICAgICAwLCAgIDEzNCwgICAxMzUsICAg
MTM2LCAgIDEzNywgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsCi0gICAgICAxNSwgICAgMTYs
ICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwK
LSAgICAgICAwLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAxMzgsICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDMwLAotICAgICAgOTAsICAgIDMxLCAgICA5MSwgICAgOTIsICAgIDkzLCAg
ICAgMCwgICAgIDAsICAgIDk0LCAgICA5NSwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMCwgICAg
IDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAxNDEsICAgIDk3LCAgICA5OCwgICAgIDAsCi0gICAgICA5OSwgICAgIDEsICAgICAyLCAgICAg
MywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwKLSAgICAgIDEwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
IDExLAotICAgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgs
ICAgIDE5LCAgICAyMCwgICAgMjEsCi0gICAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
MjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywKLSAgICAgIDI4LCAgICAyOSwg
ICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLAot
ICAgICAgOTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwKLSAgICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQxLAotICAgICAg
OTcsICAgIDk4LCAgICAgMCwgICAgOTksICAgIDYwLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAg
MCwgICAgIDYsCi0gICAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgMTEsICAgIDEy
LCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAotICAgICAgMTksICAg
IDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAyNCwgICAg
MjUsCi0gICAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICA5MCwg
ICAgMzEsICAgIDkxLCAgICA5MiwKLSAgICAgIDkzLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICA5
NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0g
ICAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgOCwgICAgIDks
ICAgIDEwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk3LCAgICA5OCwgICAg
IDAsICAgIDk5LCAgICAxMSwgICAgMTIsICAgIDEzLAotICAgICAgMTQsICAgIDE1LCAgICAxNiwg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsCi0gICAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4
LCAgICAyOSwKLSAgICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAg
ICAwLCAgICAgMCwgICAgOTQsICAgIDk1LAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAgICAg
MCwKLSAgICAgMTYzLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgOTcsICAgIDk4LAotICAgICAgIDAsICAgIDk5LCAgICAxMSwgICAgMTIsICAgIDEz
LCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCi0gICAgICAxOSwgICAgMjAsICAg
IDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwKLSAg
ICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDkwLCAgICAzMSwg
ICAgOTEsICAgIDkyLAotICAgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAw
LCAgICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAs
ICAgICAwLAotICAgICAgIDAsICAgICAwLCAgIDIwOCwgICAgOTcsICAgIDk4LCAgICAgMCwgICAg
OTksICAgIDExLCAgICAxMiwgICAgMTMsCi0gICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywg
ICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwKLSAgICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5
LAotICAgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAsICAg
ICAwLCAgICA5NCwgICAgOTUsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLAotICAg
ICAyMjQsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICA5NywgICAgOTgsCi0gICAgICAgMCwgICAgOTksICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0
LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKLSAgICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI1LAotICAgICAgMjYs
ICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwg
ICAgOTIsCi0gICAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAw
LCAgICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAs
Ci0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NywgICAgOTgsICAgICAwLCAgICA5OSwgICAg
MTEsICAgIDEyLCAgICAxMywKLSAgICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwg
ICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgIDI1LCAgIDE3NywgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksCi0gICAg
ICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwgICAgOTIsICAgIDkzLCAgICAgMCwgICAgIDAsICAg
IDk0LCAgICA5NSwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMiwgICAgIDMsCi0gICAgICAgNCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAgIDk3LCAg
ICA5OCwKLSAgICAgICAwLCAgICA5OSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTEsICAgIDEy
LCAgICAxMywgICAgMTQsICAgIDE1LAotICAgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAg
IDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAs
ICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAgMCwK
LSAgICAgIDMxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
OCwgICAgIDksICAgIDEwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwgICAgMTIsCi0gICAgICAxMywgICAgMTQsICAgIDE1
LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKLSAgICAg
MTk5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAg
MjcsICAgIDI4LAotICAgICAgMjksICAgIDMwLCAgICAgMCwgICAgMzEsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICA3
NCwgICAgIDAsICAgICAwLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwKLSAgICAgICA1LCAg
ICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAyNTMsICAgIDExLCAgICAxMiwgICAgMTMs
ICAgIDE0LCAgICAxNSwgICAgMTYsCi0gICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
MjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywKLSAgICAgIDI0LCAgICAyNSwg
ICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgIDAsICAgIDMxLAot
ICAgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4
LCAgICAgOSwgICAgMTAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwKLSAgICAgIDEzLCAgICAxNCwgICAgMTUs
ICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLAotICAgICAg
IDAsICAgICAwLCAgICAgMCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgICAwLCAgICAy
NywgICAgMjgsCi0gICAgICAyOSwgICAgMzAsICAgICAwLCAgICAzMSwgICAgIDIsICAgICAzLCAg
ICAgNCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICA4LCAgICAgOSwgICAgMTAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAg
IDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAg
MTksCi0gICAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgIDI1LCAgICAyNiwKLSAgICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAz
MCwgICAgIDAsICAgIDMxLCAgICAgOCwgICAgIDksICAgIDEwLAotICAgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwgICAgMTIsCi0g
ICAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAs
ICAgIDIxLCAgICAyMiwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
MjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LAotICAgICAgMjksICAgIDMwLCAgIDIzMSwg
ICAyMzIsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0
LCAgICAxNSwKLSAgICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAyNSwgICAgMjYs
ICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgIDAsCi0gICAgICAzMQotfTsK
LQotI2RlZmluZSB5eXBhY3RfdmFsdWVfaXNfZGVmYXVsdChZeXN0YXRlKSBcCi0gICghISgoWXlz
dGF0ZSkgPT0gKC0yNjEpKSkKLQotI2RlZmluZSB5eXRhYmxlX3ZhbHVlX2lzX2Vycm9yKFl5dGFi
bGVfdmFsdWUpIFwKLSAgWVlJRCAoMCkKLQotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eWNo
ZWNrW10gPQotewotICAgICAgIDAsICAgIDI1LCAgICA4OSwgICAgODgsICAgIDk2LCAgICA1Nywg
ICAxNjIsICAgIDczLCAgIDE1MywgICAxMjgsCi0gICAgICA0MCwgICAgIDAsICAgICAwLCAgIDI1
NiwgICAgNTksICAgIDM5LCAgIDI3NiwgICAgMzcsICAgIDU0LCAgICA1NSwKLSAgICAgIDgxLCAg
IDEwOCwgICAgODgsICAgIDczLCAgICA0MiwgICAgNDUsICAgIDQ1LCAgICA0NiwgICAgNzIsICAg
MjYwLAotICAgICAgODAsICAgIDcyLCAgICA3MiwgICAgNTEsICAgIDc4LCAgICA2NSwgICAyOTYs
ICAgIDc4LCAgICA1MiwgICAgNTMsCi0gICAgICA0MCwgICAgMzYsICAgIDQyLCAgICA2NywgICAy
NzUsICAgMTM3LCAgICA0NiwgICAgNzcsICAgMjkxLCAgICA5NCwKLSAgICAgIDc4LCAgICA1MSwg
ICAyOTUsICAgIDg5LCAgICA5MCwgICAgODUsICAgIDc1LCAgICA0NiwgICAgNDYsICAgIDczLAot
ICAgICAgODQsICAgIDczLCAgICA3MywgICAgNzcsICAgIDU5LCAgICA2NSwgICAgNzIsICAgIDcy
LCAgICA4MCwgICAgNDUsCi0gICAgICA0NiwgICAgNzgsICAgIDc4LCAgICA3OCwgICAgODEsICAg
MTYyLCAgIDE2MSwgICAgNzcsICAgICAzLCAgICA3OSwKLSAgICAgMTcyLCAgICA3NSwgICAyMDEs
ICAgICA4LCAgICAgOSwgICAgODUsICAgIDgzLCAgICA3OCwgICAgODUsICAgMTc2LAotICAgICAg
ODEsICAgICAzLCAgICAzMywgICAgMzQsICAgIDM1LCAgIDE2MSwgICAgIDgsICAgICA5LCAgIDEy
OCwgICAgMzcsCi0gICAgIDEzMCwgICAgNzgsICAgMTk0LCAgICA3OCwgICAgODEsICAgIDczLCAg
ICA4MSwgICAgNzEsICAgIDMzLCAgICAzNCwKLSAgICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDcx
LCAgIDIwNiwgICAgNzMsICAgMjYxLCAgICAgNCwgICAgIDUsICAgICA2LAotICAgICAgODgsICAg
IDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgOTQsICAgIDk1LCAgIDEyOCwgICAg
NzUsCi0gICAgIDEzMCwgICAyMTgsICAgMjE5LCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA0NSwg
ICAgNDYsICAgMjIzLCAgICA4NiwKLSAgICAgIDg3LCAgIDI5NywgICAgNzAsICAgMTExLCAgICA4
MSwgICAgNTYsICAgIDU3LCAgICA3MiwgICAgNzEsICAgMTczLAotICAgICAxODMsICAgMTg0LCAg
ICA4MCwgICAxNTMsICAgIDc4LCAgICA3OSwgICAgNzIsICAgMjIzLCAgIDE4NSwgICAxODYsCi0g
ICAgIDE4NywgICAxODgsICAgIDU4LCAgIDE4OSwgICAxOTAsICAgMjUwLCAgICA3MSwgICAgNjAs
ICAgMjYwLCAgICA3MSwKLSAgICAgIDc0LCAgIDIwMSwgICAgNzEsICAgIDgxLCAgICA4MSwgICAg
ODEsICAgIDcxLCAgICA3NCwgICAgNzYsICAgIDczLAotICAgICAyNjcsICAgIDcxLCAgICA3Mywg
ICAyNzUsICAgMjUwLCAgICA0MCwgICAgNzUsICAgIDcxLCAgICA3NCwgICAgNzQsCi0gICAgICA3
OCwgICAgNzQsICAgMjg0LCAgIDE2MSwgICAgNzQsICAgIDcxLCAgICAxNiwgICAgNzIsICAgIDc2
LCAgICA4MSwKLSAgICAgIDcyLCAgIDIwMSwgICAyOTQsICAgMjU1LCAgICA4MSwgICAxOTEsICAg
IDgwLCAgIDE3MywgICAxOTIsICAgIDU5LAotICAgICAyOTcsICAgMTkzLCAgIDIxMiwgICAxODEs
ICAgMTgyLCAgIDE4MywgICAxODQsICAgMTg1LCAgIDE4NiwgICAxODcsCi0gICAgIDE4OCwgICAx
ODksICAgMTkwLCAgIDE5MSwgICAxOTIsICAgMTkzLCAgICA4NSwgICAgNjYsICAgIDg1LCAgICAg
NSwKLSAgICAgMTMwLCAgIDI5NSwgICAyNTcsICAgMjEyLCAgIDI1MSwgICAyNTcsICAgMjc1LCAg
ICA0NiwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAyNzgsICAgMjIzLCAgIDI1NiwgICAyNTcsICAgIC0xLCAgICAtMSwKLSAg
ICAgMjYwLCAgIDI2MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDI3
NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgMjUwLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0x
LCAgIDI5MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAyOTUsICAgICAzLCAgICAgNCwgICAgIDUs
ICAgICA2LAotICAgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAg
MTMsICAgIDE0LCAgICAxNSwgICAgLTEsCi0gICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwg
ICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwKLSAgICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2
LAotICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAg
IDQ0LCAgICA0NSwgICAgNDYsCi0gICAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgLTEs
ICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICA3NSwgICAgNzYsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODEsICAgIDgy
LCAgICA4MywgICAgLTEsICAgIDg1LCAgICAgMywKLSAgICAgICA0LCAgICAgNSwgICAgIDYsICAg
ICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLAotICAgICAgMTQs
ICAgIDE1LCAgICAtMSwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwg
ICAgMjMsCi0gICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAz
MCwgICAgMzEsICAgIDMyLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDM3LCAg
ICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLAotICAgICAgNDQsICAgIDQ1
LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMs
Ci0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIDc1LCAgICA3
NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgxLCAgICA4MiwgICAgODMsCi0gICAg
ICAtMSwgICAgODUsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAg
ICA5LCAgICAxMCwKLSAgICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgLTEs
ICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLAotICAgICAgMjEsICAgIDIyLCAgICAyMywgICAg
MjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCi0gICAgICAzMSwg
ICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAg
ICA0MCwKLSAgICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3
LCAgICA0OCwgICAgNDksICAgIC0xLAotICAgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwK
LSAgICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3NSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLAotICAgICAgODEsICAgIDgyLCAgICA4MywgICAgLTEsICAgIDg1LCAg
ICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsCi0gICAgICAgOCwgICAgIDksICAgIDEw
LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIC0xLCAgICAxNywKLSAgICAg
IDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAg
MjYsICAgIDI3LAotICAgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAzNiwgICAgMzcsCi0gICAgICAzOCwgICAgMzksICAgIDQwLCAgICA0
MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywKLSAgICAgIDQ4LCAg
ICA0OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgNzUsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDgxLCAgICA4MiwgICAgODMsICAgIC0xLCAgICA4NSwgICAgIDMsICAgICA0LAot
ICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEy
LCAgICAxMywgICAgMTQsCi0gICAgICAxNSwgICAgLTEsICAgIDE3LCAgICAxOCwgICAgMTksICAg
IDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwKLSAgICAgIDI1LCAgICAyNiwgICAgMjcs
ICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLAotICAgICAg
LTEsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0
MywgICAgNDQsCi0gICAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIC0xLCAg
ICAtMSwgICAgNTIsICAgIDUzLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAtMSwgICAg
LTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MSwg
ICAgODIsICAgIDgzLCAgICAtMSwKLSAgICAgIDg1LCAgICAgMywgICAgIDQsICAgICA1LCAgICAg
NiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLAotICAgICAgMTIsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjEsCi0g
ICAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjks
ICAgIDMwLCAgICAzMSwKLSAgICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzNiwgICAg
MzcsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLAotICAgICAgNDIsICAgIDQzLCAgICA0NCwg
ICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgLTEsCi0gICAgICA1
MiwgICAgNTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDcxLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODEsCi0gICAgICA4MiwgICAg
ODMsICAgIC0xLCAgICA4NSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgIC0xLCAgICAg
OCwKLSAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsICAgIDIz
LCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCi0gICAgICAyOSwgICAgMzAsICAg
IDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDM3LCAgICAzOCwKLSAg
ICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0Niwg
ICAgNDcsICAgIDQ4LAotICAgICAgNDksICAgIC0xLCAgICAtMSwgICAgNTIsICAgIDUzLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0x
LCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDEwLCAgICAxMSwgICAgMTIs
ICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODIsICAgIDgzLCAgICAtMSwgICAg
ODUsICAgIDIxLCAgICAyMiwgICAgMjMsCi0gICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywg
ICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwKLSAgICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQz
LAotICAgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgLTEsICAg
IC0xLCAgICA1MiwgICAgNTMsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLAotICAg
ICAgNzQsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICA4MiwgICAgODMsCi0gICAgICAtMSwgICAgODUsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0
LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwKLSAgICAgIDI5LCAgICAzMCwgICAgMzEsICAg
IDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LAotICAgICAgMzks
ICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0Nywg
ICAgNDgsCi0gICAgICA0OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0x
LCAgICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEs
Ci0gICAgICAtMSwgICAgLTEsICAgIDgxLCAgICA4MiwgICAgODMsICAgIC0xLCAgICA4NSwgICAg
MjEsICAgIDIyLCAgICAyMywKLSAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwg
ICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsCi0gICAg
ICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgLTEsICAg
IDUyLCAgICA1MywKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsCi0gICAgICA3NCwg
ICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgyLCAg
ICA4MywKLSAgICAgIC0xLCAgICA4NSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1
LCAgICAyNiwgICAgMjcsICAgIDI4LAotICAgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsCi0gICAgICAzOSwgICAgLTEs
ICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwK
LSAgICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIDcx
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwKLSAgICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDgyLCAgICA4MywgICAgLTEsICAgIDg1LCAgICAyMSwgICAg
MjIsICAgIDIzLAotICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwg
ICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywKLSAgICAgIDQ0LCAg
ICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIC0xLCAgICAtMSwgICAgNTIsICAg
IDUzLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAgICA0LCAgICAgNSwKLSAgICAgICA2LCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgODIsICAgIDgzLAot
ICAgICAgLTEsICAgIDg1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsICAgIDIz
LCAgICAyNCwgICAgMjUsCi0gICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAg
IDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgMzgs
ICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIC0xLAotICAgICAg
NDYsICAgICA0LCAgICAgNSwgICAgIDYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDEwLCAgICAx
MSwgICAgMTIsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDIxLCAgICAyMiwKLSAgICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2
LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLAotICAgICAgNzYsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAg
NDIsCi0gICAgICA0MywgICAgNDQsICAgIC0xLCAgICA0NiwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgICAwLCAgICAt
MSwgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LAotICAgICAgIDcsICAgICA4LCAg
ICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0g
ICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3NiwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQs
ICAgIDI1LCAgICAyNiwKLSAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAg
MzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LAotICAgICAgMzcsICAgIDM4LCAgICAzOSwg
ICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICAtMSwgICAgNDYsCi0gICAgICAg
MywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDEx
LCAgICAxMiwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgMjEsICAgIDIyLAotICAgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYs
ICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsCi0gICAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0
MiwKLSAgICAgIDQzLCAgICA0NCwgICAgLTEsICAgIDQ2LCAgICAgNCwgICAgIDUsICAgICA2LCAg
ICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgMjEsICAg
IDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwKLSAg
ICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgMzgsICAgIDM5LAotICAgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICAt
MSwgICAgNDYsICAgIDEwLCAgICAxMSwgICAgMTIsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIxLCAgICAyMiwKLSAgICAgIDIz
LCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEs
ICAgIDMyLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwgICAg
MzksICAgIC0xLCAgICA0MSwgICAgNDIsCi0gICAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0Niwg
ICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1
LAotICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAg
IC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEs
ICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICAtMSwKLSAgICAgIDQ2Ci19OwotCi0vKiBZ
WVNUT1NbU1RBVEUtTlVNXSAtLSBUaGUgKGludGVybmFsIG51bWJlciBvZiB0aGUpIGFjY2Vzc2lu
ZwotICAgc3ltYm9sIG9mIHN0YXRlIFNUQVRFLU5VTS4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBl
X3VpbnQ4IHl5c3Rvc1tdID0KLXsKLSAgICAgICAwLCAgICAgMywgICAgIDQsICAgICA1LCAgICAg
NiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLAotICAgICAgMTIsICAgIDIxLCAg
ICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCi0g
ICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDEs
ICAgIDQyLCAgICA0MywKLSAgICAgIDQ0LCAgICA0NiwgICAxMjYsICAgMTI3LCAgIDEyOCwgICAx
MjksICAgMTMwLCAgIDEzNSwgICAxMzYsICAgMTM3LAotICAgICAxMzgsICAgMTM5LCAgIDE0MCwg
ICAxNDEsICAgMTQyLCAgIDE0MywgICAxNzUsICAgMTc2LCAgIDE3NywgICAgMzcsCi0gICAgICA0
NSwgICAxNDAsICAgIDQ1LCAgICA0NiwgICAgNzUsICAgIDk2LCAgICA4MSwgICAxNzgsICAgIDcy
LCAgICA3OCwKLSAgICAgICAzLCAgICAzMywgICAgMzQsICAgIDM1LCAgIDEzMiwgICAxMzMsICAg
MTM4LCAgICA3OCwgICAgODEsICAgIDQ1LAotICAgICAgOTYsICAgMTM5LCAgIDE0MSwgICAgNzMs
ICAgICAwLCAgIDE3NiwgICAxNDEsICAgMTQ1LCAgICA3NSwgICAgNzUsCi0gICAgIDE2MSwgICAx
MzIsICAgMTMxLCAgIDEzNCwgICAxMzksICAgMTMzLCAgICA5NiwgICAgNzEsICAgIDczLCAgICA4
MCwKLSAgICAgIDQ1LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MiwgICAgNTMsICAgIDcxLCAg
ICA4MiwgICAgODMsICAgIDg1LAotICAgICAgOTcsICAgIDk4LCAgICA5OSwgICAxMDEsICAgMTAy
LCAgIDEwMywgICAxMDQsICAgMTA1LCAgIDEwNiwgICAxMDcsCi0gICAgIDEwOCwgICAxMDksICAg
MTEwLCAgIDExMSwgICAxMTIsICAgMTEzLCAgIDExNCwgICAxMTUsICAgMTE2LCAgIDExNywKLSAg
ICAgMTE4LCAgIDExOSwgICAxMjAsICAgMTIxLCAgIDEyNSwgICAxNDIsICAgIDgxLCAgIDEzOSwg
ICAxNDYsICAgMTQ3LAotICAgICAxNDQsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE3LCAgICAx
OCwgICAgMTksICAgIDIwLCAgICA0MCwgICAgNzUsCi0gICAgICA3NiwgICAgODEsICAgMTA4LCAg
IDEyMSwgICAxMjIsICAgMTI0LCAgIDEyNiwgICAxMjcsICAgMTQyLCAgIDE1MSwKLSAgICAgMTUy
LCAgIDE1MywgICAxNTQsICAgMTYyLCAgIDE2MywgICAxNjQsICAgMTY3LCAgIDE3NCwgICAgOTYs
ICAgMTMxLAotICAgICAxMzQsICAgIDczLCAgICA4MCwgICAgNzQsICAgMTI1LCAgIDEyMiwgICAx
NTAsICAgMTA4LCAgIDEwOCwgICAxMjQsCi0gICAgICA1MiwgICAgNTMsICAgIDczLCAgICA3Nywg
ICAgNzIsICAgIDcyLCAgICA3OCwgICAgMzksICAgMTIyLCAgICA3MSwKLSAgICAgMTA4LCAgICA4
NiwgICAgODcsICAgIDgzLCAgICA4NSwgICAgNTQsICAgIDU1LCAgICA4OSwgICAgOTAsICAgIDU2
LAotICAgICAgNTcsICAgIDU4LCAgICA2MCwgICAgNTksICAgIDk0LCAgICA3NCwgICAgOTYsICAg
MTQ4LCAgIDE0OSwgICAgNzYsCi0gICAgIDE0NywgICAxNDYsICAgIDgxLCAgICA4MSwgICAxNjks
ICAgIDcxLCAgICA3MSwgICAgODEsICAgIDgxLCAgIDEyNCwKLSAgICAgIDcxLCAgICA3NiwgICAx
NTUsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDcwLCAgICA4MCwgICAxMjMsICAgIDc4LAotICAg
ICAgODEsICAgIDc2LCAgIDE1MiwgICAgNzMsICAgIDc0LCAgIDEyNSwgICAxNTAsICAgIDc0LCAg
ICA3MiwgICAxMDAsCi0gICAgIDEyNCwgICAgNDUsICAgIDQ2LCAgICA5NiwgICAxMDMsICAgMTIy
LCAgIDEwOCwgICAxMDgsICAgMTEwLCAgIDExMCwKLSAgICAgMTEyLCAgIDExMiwgICAxMTIsICAg
MTEyLCAgIDExMywgICAxMTMsICAgMTE3LCAgIDExOCwgICAxMTksICAgMTI0LAotICAgICAgNzMs
ICAgIDc4LCAgICA4MSwgICAgNzYsICAgMTU4LCAgIDE1OSwgICAxNjAsICAgMTcwLCAgIDEyNCwg
ICAgODEsCi0gICAgIDE2OCwgICAxNjIsICAgMTIyLCAgIDEyMiwgICAxMjUsICAgIDc0LCAgICA3
NCwgICAgNzksICAgMTI1LCAgIDE0OSwKLSAgICAgIDQwLCAgIDE2MSwgICAxNTMsICAgMTUxLCAg
IDE2MywgICAxNzEsICAgIDcyLCAgIDEyNCwgICAxMzcsICAgMTY2LAotICAgICAxNTYsICAgIDc0
LCAgIDEyMiwgICAgNzQsICAgIDcxLCAgIDE2NiwgICAxNzIsICAgMTczLCAgIDE1OCwgICAxNjUs
Ci0gICAgICA5NiwgICAgNzIsICAgIDc2LCAgIDEyNCwgICAgODEsICAgIDcyLCAgICAxNiwgICAg
ODAsICAgMTUzLCAgIDE1NywKLSAgICAgMTYxLCAgICA3MiwgICAxMjQsICAgMTU3LCAgIDE1OCwg
ICAxNTAsICAgIDgxCi19OwotCi0jZGVmaW5lIHl5ZXJyb2sJCSh5eWVycnN0YXR1cyA9IDApCi0j
ZGVmaW5lIHl5Y2xlYXJpbgkoeXljaGFyID0gWVlFTVBUWSkKLSNkZWZpbmUgWVlFTVBUWQkJKC0y
KQotI2RlZmluZSBZWUVPRgkJMAotCi0jZGVmaW5lIFlZQUNDRVBUCWdvdG8geXlhY2NlcHRsYWIK
LSNkZWZpbmUgWVlBQk9SVAkJZ290byB5eWFib3J0bGFiCi0jZGVmaW5lIFlZRVJST1IJCWdvdG8g
eXllcnJvcmxhYgotCi0KLS8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5eWVycm9yLiAg
VGhpcyByZW1haW5zIGhlcmUgdGVtcG9yYXJpbHkKLSAgIHRvIGVhc2UgdGhlIHRyYW5zaXRpb24g
dG8gdGhlIG5ldyBtZWFuaW5nIG9mIFlZRVJST1IsIGZvciBHQ0MuCi0gICBPbmNlIEdDQyB2ZXJz
aW9uIDIgaGFzIHN1cHBsYW50ZWQgdmVyc2lvbiAxLCB0aGlzIGNhbiBnby4gIEhvd2V2ZXIsCi0g
ICBZWUZBSUwgYXBwZWFycyB0byBiZSBpbiB1c2UuICBOZXZlcnRoZWxlc3MsIGl0IGlzIGZvcm1h
bGx5IGRlcHJlY2F0ZWQKLSAgIGluIEJpc29uIDIuNC4yJ3MgTkVXUyBlbnRyeSwgd2hlcmUgYSBw
bGFuIHRvIHBoYXNlIGl0IG91dCBpcwotICAgZGlzY3Vzc2VkLiAgKi8KLQotI2RlZmluZSBZWUZB
SUwJCWdvdG8geXllcnJsYWIKLSNpZiBkZWZpbmVkIFlZRkFJTAotICAvKiBUaGlzIGlzIGhlcmUg
dG8gc3VwcHJlc3Mgd2FybmluZ3MgZnJvbSB0aGUgR0NDIGNwcCdzCi0gICAgIC1XdW51c2VkLW1h
Y3Jvcy4gIE5vcm1hbGx5IHdlIGRvbid0IHdvcnJ5IGFib3V0IHRoYXQgd2FybmluZywgYnV0Ci0g
ICAgIHNvbWUgdXNlcnMgZG8sIGFuZCB3ZSB3YW50IHRvIG1ha2UgaXQgZWFzeSBmb3IgdXNlcnMg
dG8gcmVtb3ZlCi0gICAgIFlZRkFJTCB1c2VzLCB3aGljaCB3aWxsIHByb2R1Y2Ugd2FybmluZ3Mg
ZnJvbSBCaXNvbiAyLjUuICAqLwotI2VuZGlmCi0KLSNkZWZpbmUgWVlSRUNPVkVSSU5HKCkgICgh
IXl5ZXJyc3RhdHVzKQotCi0jZGVmaW5lIFlZQkFDS1VQKFRva2VuLCBWYWx1ZSkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5Y2hhciA9PSBZWUVN
UFRZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgeXljaGFyID0gKFRva2VuKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgIHl5bHZhbCA9IChWYWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICBZWVBPUFNUQUNLICh5eWxlbik7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeXlzdGF0ZSA9ICp5eXNzcDsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGdvdG8geXliYWNr
dXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB5eWVycm9yICgmeXlsbG9jLCBjb250ZXh0LCBZ
WV8oInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiKSk7IFwKLSAgICAgIFlZRVJST1I7CQkJ
CQkJCVwKLSAgICB9CQkJCQkJCQlcCi13aGlsZSAoWVlJRCAoMCkpCi0KLS8qIEVycm9yIHRva2Vu
IG51bWJlciAqLwotI2RlZmluZSBZWVRFUlJPUgkxCi0jZGVmaW5lIFlZRVJSQ09ERQkyNTYKLQot
Ci0vKiBZWUxMT0NfREVGQVVMVCAtLSBTZXQgQ1VSUkVOVCB0byBzcGFuIGZyb20gUkhTWzFdIHRv
IFJIU1tOXS4KLSAgIElmIE4gaXMgMCwgdGhlbiBzZXQgQ1VSUkVOVCB0byB0aGUgZW1wdHkgbG9j
YXRpb24gd2hpY2ggZW5kcwotICAgdGhlIHByZXZpb3VzIHN5bWJvbDogUkhTWzBdIChhbHdheXMg
ZGVmaW5lZCkuICAqLwotCi0jaWZuZGVmIFlZTExPQ19ERUZBVUxUCi0jIGRlZmluZSBZWUxMT0Nf
REVGQVVMVChDdXJyZW50LCBSaHMsIE4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICBpZiAoWVlJRCAoTikpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0
X2xpbmU7ICAgICAgICBcCi0gICAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IFlZUkhT
TE9DIChSaHMsIDEpLmZpcnN0X2NvbHVtbjsgICAgICBcCi0gICAgICAgICAgKEN1cnJlbnQpLmxh
c3RfbGluZSAgICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfbGluZTsgICAgICAgICBcCi0gICAg
ICAgICAgKEN1cnJlbnQpLmxhc3RfY29sdW1uICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfY29s
dW1uOyAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBlbHNlICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9IChDdXJyZW50KS5s
YXN0X2xpbmUgICA9ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBZWVJIU0xPQyAoUmhzLCAw
KS5sYXN0X2xpbmU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg
KEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IChDdXJyZW50KS5sYXN0X2NvbHVtbiA9ICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgICBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0X2NvbHVtbjsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgd2hpbGUgKFlZ
SUQgKDApKQotI2VuZGlmCi0KLSNkZWZpbmUgWVlSSFNMT0MoUmhzLCBLKSAoKFJocylbS10pCi0K
LQotLyogWVlfTE9DQVRJT05fUFJJTlQgLS0gUHJpbnQgdGhlIGxvY2F0aW9uIG9uIHRoZSBzdHJl
YW0uCi0gICBUaGlzIG1hY3JvIHdhcyBub3QgbWFuZGF0ZWQgb3JpZ2luYWxseTogZGVmaW5lIG9u
bHkgaWYgd2Uga25vdwotICAgd2Ugd29uJ3QgYnJlYWsgdXNlciBjb2RlOiB3aGVuIHRoZXNlIGFy
ZSB0aGUgbG9jYXRpb25zIHdlIGtub3cuICAqLwotCi0jaWZuZGVmIFlZX0xPQ0FUSU9OX1BSSU5U
Ci0jIGlmIGRlZmluZWQgWVlMVFlQRV9JU19UUklWSUFMICYmIFlZTFRZUEVfSVNfVFJJVklBTAot
Ci0vKiBQcmludCAqWVlMT0NQIG9uIFlZTy4gIFByaXZhdGUsIGRvIG5vdCByZWx5IG9uIGl0cyBl
eGlzdGVuY2UuICovCi0KLV9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQotI2lmIChkZWZpbmVk
IF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19j
cGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB1bnNpZ25lZAoteXlfbG9jYXRp
b25fcHJpbnRfIChGSUxFICp5eW8sIFlZTFRZUEUgY29uc3QgKiBjb25zdCB5eWxvY3ApCi0jZWxz
ZQotc3RhdGljIHVuc2lnbmVkCi15eV9sb2NhdGlvbl9wcmludF8gKHl5bywgeXlsb2NwKQotICAg
IEZJTEUgKnl5bzsKLSAgICBZWUxUWVBFIGNvbnN0ICogY29uc3QgeXlsb2NwOwotI2VuZGlmCi17
Ci0gIHVuc2lnbmVkIHJlcyA9IDA7Ci0gIGludCBlbmRfY29sID0gMCAhPSB5eWxvY3AtPmxhc3Rf
Y29sdW1uID8geXlsb2NwLT5sYXN0X2NvbHVtbiAtIDEgOiAwOwotICBpZiAoMCA8PSB5eWxvY3At
PmZpcnN0X2xpbmUpCi0gICAgewotICAgICAgcmVzICs9IGZwcmludGYgKHl5bywgIiVkIiwgeXls
b2NwLT5maXJzdF9saW5lKTsKLSAgICAgIGlmICgwIDw9IHl5bG9jcC0+Zmlyc3RfY29sdW1uKQot
ICAgICAgICByZXMgKz0gZnByaW50ZiAoeXlvLCAiLiVkIiwgeXlsb2NwLT5maXJzdF9jb2x1bW4p
OwotICAgIH0KLSAgaWYgKDAgPD0geXlsb2NwLT5sYXN0X2xpbmUpCi0gICAgewotICAgICAgaWYg
KHl5bG9jcC0+Zmlyc3RfbGluZSA8IHl5bG9jcC0+bGFzdF9saW5lKQotICAgICAgICB7Ci0gICAg
ICAgICAgcmVzICs9IGZwcmludGYgKHl5bywgIi0lZCIsIHl5bG9jcC0+bGFzdF9saW5lKTsKLSAg
ICAgICAgICBpZiAoMCA8PSBlbmRfY29sKQotICAgICAgICAgICAgcmVzICs9IGZwcmludGYgKHl5
bywgIi4lZCIsIGVuZF9jb2wpOwotICAgICAgICB9Ci0gICAgICBlbHNlIGlmICgwIDw9IGVuZF9j
b2wgJiYgeXlsb2NwLT5maXJzdF9jb2x1bW4gPCBlbmRfY29sKQotICAgICAgICByZXMgKz0gZnBy
aW50ZiAoeXlvLCAiLSVkIiwgZW5kX2NvbCk7Ci0gICAgfQotICByZXR1cm4gcmVzOwotIH0KLQot
IyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykgICAgICAgICAgXAotICB5eV9s
b2NhdGlvbl9wcmludF8gKEZpbGUsICYoTG9jKSkKLQotIyBlbHNlCi0jICBkZWZpbmUgWVlfTE9D
QVRJT05fUFJJTlQoRmlsZSwgTG9jKSAoKHZvaWQpIDApCi0jIGVuZGlmCi0jZW5kaWYKLQotCi0v
KiBZWUxFWCAtLSBjYWxsaW5nIGB5eWxleCcgd2l0aCB0aGUgcmlnaHQgYXJndW1lbnRzLiAgKi8K
LSNpZmRlZiBZWUxFWF9QQVJBTQotIyBkZWZpbmUgWVlMRVggeXlsZXggKCZ5eWx2YWwsICZ5eWxs
b2MsIFlZTEVYX1BBUkFNKQotI2Vsc2UKLSMgZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsLCAm
eXlsbG9jKQotI2VuZGlmCi0KLS8qIEVuYWJsZSBkZWJ1Z2dpbmcgaWYgcmVxdWVzdGVkLiAgKi8K
LSNpZiBZWURFQlVHCi0KLSMgaWZuZGVmIFlZRlBSSU5URgotIyAgaW5jbHVkZSA8c3RkaW8uaD4g
LyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgZGVmaW5lIFlZRlBSSU5URiBm
cHJpbnRmCi0jIGVuZGlmCi0KLSMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQkJCVwKLWRvIHsJCQkJ
CQlcCi0gIGlmICh5eWRlYnVnKQkJCQkJXAotICAgIFlZRlBSSU5URiBBcmdzOwkJCQlcCi19IHdo
aWxlIChZWUlEICgwKSkKLQotIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBW
YWx1ZSwgTG9jYXRpb24pCQkJICBcCi1kbyB7CQkJCQkJCQkJICBcCi0gIGlmICh5eWRlYnVnKQkJ
CQkJCQkJICBcCi0gICAgewkJCQkJCQkJCSAgXAotICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIl
cyAiLCBUaXRsZSk7CQkJCQkgIFwKLSAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLAkJCQkJ
CSAgXAotCQkgIFR5cGUsIFZhbHVlLCBMb2NhdGlvbiwgY29udGV4dCk7IFwKLSAgICAgIFlZRlBS
SU5URiAoc3RkZXJyLCAiXG4iKTsJCQkJCQkgIFwKLSAgICB9CQkJCQkJCQkJICBcCi19IHdoaWxl
IChZWUlEICgwKSkKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBQ
cmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSovCi0KLS8qQVJHU1VTRUQqLwotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRl
ZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVm
aW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xfdmFsdWVfcHJpbnQgKEZJTEUg
Knl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXAsIFlZ
TFRZUEUgY29uc3QgKiBjb25zdCB5eWxvY2F0aW9ucCwgVFBhcnNlQ29udGV4dCogY29udGV4dCkK
LSNlbHNlCi1zdGF0aWMgdm9pZAoteXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwgeXl0
eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAsIGNvbnRleHQpCi0gICAgRklMRSAqeXlvdXRwdXQ7
Ci0gICAgaW50IHl5dHlwZTsKLSAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7Ci0g
ICAgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jYXRpb25wOwotICAgIFRQYXJzZUNvbnRleHQq
IGNvbnRleHQ7Ci0jZW5kaWYKLXsKLSAgRklMRSAqeXlvID0geXlvdXRwdXQ7Ci0gIFlZVVNFICh5
eW8pOwotICBpZiAoIXl5dmFsdWVwKQotICAgIHJldHVybjsKLSAgWVlVU0UgKHl5bG9jYXRpb25w
KTsKLSAgWVlVU0UgKGNvbnRleHQpOwotIyBpZmRlZiBZWVBSSU5UCi0gIGlmICh5eXR5cGUgPCBZ
WU5UT0tFTlMpCi0gICAgWVlQUklOVCAoeXlvdXRwdXQsIHl5dG9rbnVtW3l5dHlwZV0sICp5eXZh
bHVlcCk7Ci0jIGVsc2UKLSAgWVlVU0UgKHl5b3V0cHV0KTsKLSMgZW5kaWYKLSAgc3dpdGNoICh5
eXR5cGUpCi0gICAgewotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQot
Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IFByaW50IHRoaXMgc3lt
Ym9sIG9uIFlZT1VUUFVULiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
LQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAg
IHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lk
Ci15eV9zeW1ib2xfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNv
bnN0ICogY29uc3QgeXl2YWx1ZXAsIFlZTFRZUEUgY29uc3QgKiBjb25zdCB5eWxvY2F0aW9ucCwg
VFBhcnNlQ29udGV4dCogY29udGV4dCkKLSNlbHNlCi1zdGF0aWMgdm9pZAoteXlfc3ltYm9sX3By
aW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAsIGNvbnRleHQpCi0g
ICAgRklMRSAqeXlvdXRwdXQ7Ci0gICAgaW50IHl5dHlwZTsKLSAgICBZWVNUWVBFIGNvbnN0ICog
Y29uc3QgeXl2YWx1ZXA7Ci0gICAgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jYXRpb25wOwot
ICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQ7Ci0jZW5kaWYKLXsKLSAgaWYgKHl5dHlwZSA8IFlZ
TlRPS0VOUykKLSAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAidG9rZW4gJXMgKCIsIHl5dG5hbWVb
eXl0eXBlXSk7Ci0gIGVsc2UKLSAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAibnRlcm0gJXMgKCIs
IHl5dG5hbWVbeXl0eXBlXSk7Ci0KLSAgWVlfTE9DQVRJT05fUFJJTlQgKHl5b3V0cHV0LCAqeXls
b2NhdGlvbnApOwotICBZWUZQUklOVEYgKHl5b3V0cHV0LCAiOiAiKTsKLSAgeXlfc3ltYm9sX3Zh
bHVlX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAsIGNvbnRl
eHQpOwotICBZWUZQUklOVEYgKHl5b3V0cHV0LCAiKSIpOwotfQotCi0vKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwg
eXlfc3RhY2tfcHJpbnQgLS0gUHJpbnQgdGhlIHN0YXRlIHN0YWNrIGZyb20gaXRzIEJPVFRPTSB1
cCB0byBpdHMgfAotfCBUT1AgKGluY2x1ZGVkKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmIChkZWZpbmVkIF9f
U1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1
c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15eV9zdGFja19wcmludCAo
eXl0eXBlX2ludDE2ICp5eWJvdHRvbSwgeXl0eXBlX2ludDE2ICp5eXRvcCkKLSNlbHNlCi1zdGF0
aWMgdm9pZAoteXlfc3RhY2tfcHJpbnQgKHl5Ym90dG9tLCB5eXRvcCkKLSAgICB5eXR5cGVfaW50
MTYgKnl5Ym90dG9tOwotICAgIHl5dHlwZV9pbnQxNiAqeXl0b3A7Ci0jZW5kaWYKLXsKLSAgWVlG
UFJJTlRGIChzdGRlcnIsICJTdGFjayBub3ciKTsKLSAgZm9yICg7IHl5Ym90dG9tIDw9IHl5dG9w
OyB5eWJvdHRvbSsrKQotICAgIHsKLSAgICAgIGludCB5eWJvdCA9ICp5eWJvdHRvbTsKLSAgICAg
IFlZRlBSSU5URiAoc3RkZXJyLCAiICVkIiwgeXlib3QpOwotICAgIH0KLSAgWVlGUFJJTlRGIChz
dGRlcnIsICJcbiIpOwotfQotCi0jIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkJ
CQkJXAotZG8gewkJCQkJCQkJXAotICBpZiAoeXlkZWJ1ZykJCQkJCQkJXAotICAgIHl5X3N0YWNr
X3ByaW50ICgoQm90dG9tKSwgKFRvcCkpOwkJCQlcCi19IHdoaWxlIChZWUlEICgwKSkKLQotCi0v
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgUmVw
b3J0IHRoYXQgdGhlIFlZUlVMRSBpcyBnb2luZyB0byBiZSByZWR1Y2VkLiAgfAotYC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNpZiAoZGVmaW5l
ZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9f
Y3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlfcmVkdWNlX3By
aW50IChZWVNUWVBFICp5eXZzcCwgWVlMVFlQRSAqeXlsc3AsIGludCB5eXJ1bGUsIFRQYXJzZUNv
bnRleHQqIGNvbnRleHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5X3JlZHVjZV9wcmludCAoeXl2
c3AsIHl5bHNwLCB5eXJ1bGUsIGNvbnRleHQpCi0gICAgWVlTVFlQRSAqeXl2c3A7Ci0gICAgWVlM
VFlQRSAqeXlsc3A7Ci0gICAgaW50IHl5cnVsZTsKLSAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0
OwotI2VuZGlmCi17Ci0gIGludCB5eW5yaHMgPSB5eXIyW3l5cnVsZV07Ci0gIGludCB5eWk7Ci0g
IHVuc2lnbmVkIGxvbmcgaW50IHl5bG5vID0geXlybGluZVt5eXJ1bGVdOwotICBZWUZQUklOVEYg
KHN0ZGVyciwgIlJlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgJWQgKGxpbmUgJWx1KTpcbiIsCi0JICAg
ICB5eXJ1bGUgLSAxLCB5eWxubyk7Ci0gIC8qIFRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQuICAq
LwotICBmb3IgKHl5aSA9IDA7IHl5aSA8IHl5bnJoczsgeXlpKyspCi0gICAgewotICAgICAgWVlG
UFJJTlRGIChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAxKTsKLSAgICAgIHl5X3N5bWJvbF9w
cmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNbeXlydWxlXSArIHl5aV0sCi0JCSAgICAgICAmKHl5
dnNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkKLQkJICAgICAgICwgJih5eWxzcFsoeXlpICsgMSkg
LSAoeXlucmhzKV0pCQkgICAgICAgLCBjb250ZXh0KTsKLSAgICAgIFlZRlBSSU5URiAoc3RkZXJy
LCAiXG4iKTsKLSAgICB9Ci19Ci0KLSMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQkJXAot
ZG8gewkJCQkJXAotICBpZiAoeXlkZWJ1ZykJCQkJXAotICAgIHl5X3JlZHVjZV9wcmludCAoeXl2
c3AsIHl5bHNwLCBSdWxlLCBjb250ZXh0KTsgXAotfSB3aGlsZSAoWVlJRCAoMCkpCi0KLS8qIE5v
bnplcm8gbWVhbnMgcHJpbnQgcGFyc2UgdHJhY2UuICBJdCBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQg
c28gdGhhdAotICAgbXVsdGlwbGUgcGFyc2VycyBjYW4gY29leGlzdC4gICovCi1pbnQgeXlkZWJ1
ZzsKLSNlbHNlIC8qICFZWURFQlVHICovCi0jIGRlZmluZSBZWURQUklOVEYoQXJncykKLSMgZGVm
aW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKQotIyBkZWZp
bmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApCi0jIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQo
UnVsZSkKLSNlbmRpZiAvKiAhWVlERUJVRyAqLwotCi0KLS8qIFlZSU5JVERFUFRIIC0tIGluaXRp
YWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAgKi8KLSNpZm5kZWYJWVlJTklUREVQVEgK
LSMgZGVmaW5lIFlZSU5JVERFUFRIIDIwMAotI2VuZGlmCi0KLS8qIFlZTUFYREVQVEggLS0gbWF4
aW11bSBzaXplIHRoZSBzdGFja3MgY2FuIGdyb3cgdG8gKGVmZmVjdGl2ZSBvbmx5Ci0gICBpZiB0
aGUgYnVpbHQtaW4gc3RhY2sgZXh0ZW5zaW9uIG1ldGhvZCBpcyB1c2VkKS4KLQotICAgRG8gbm90
IG1ha2UgdGhpcyB2YWx1ZSB0b28gbGFyZ2U7IHRoZSByZXN1bHRzIGFyZSB1bmRlZmluZWQgaWYK
LSAgIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA8IFlZU1RBQ0tfQllURVMgKFlZTUFYREVQVEgpCi0g
ICBldmFsdWF0ZWQgd2l0aCBpbmZpbml0ZS1wcmVjaXNpb24gaW50ZWdlciBhcml0aG1ldGljLiAg
Ki8KLQotI2lmbmRlZiBZWU1BWERFUFRICi0jIGRlZmluZSBZWU1BWERFUFRIIDEwMDAwCi0jZW5k
aWYKLQotCi0jaWYgWVlFUlJPUl9WRVJCT1NFCi0KLSMgaWZuZGVmIHl5c3RybGVuCi0jICBpZiBk
ZWZpbmVkIF9fR0xJQkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdfSAotIyAgIGRlZmluZSB5eXN0cmxl
biBzdHJsZW4KLSMgIGVsc2UKLS8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIFlZU1RSLiAgKi8KLSNp
ZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBk
ZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgWVlTSVpFX1QK
LXl5c3RybGVuIChjb25zdCBjaGFyICp5eXN0cikKLSNlbHNlCi1zdGF0aWMgWVlTSVpFX1QKLXl5
c3RybGVuICh5eXN0cikKLSAgICBjb25zdCBjaGFyICp5eXN0cjsKLSNlbmRpZgotewotICBZWVNJ
WkVfVCB5eWxlbjsKLSAgZm9yICh5eWxlbiA9IDA7IHl5c3RyW3l5bGVuXTsgeXlsZW4rKykKLSAg
ICBjb250aW51ZTsKLSAgcmV0dXJuIHl5bGVuOwotfQotIyAgZW5kaWYKLSMgZW5kaWYKLQotIyBp
Zm5kZWYgeXlzdHBjcHkKLSMgIGlmIGRlZmluZWQgX19HTElCQ19fICYmIGRlZmluZWQgX1NUUklO
R19IICYmIGRlZmluZWQgX0dOVV9TT1VSQ0UKLSMgICBkZWZpbmUgeXlzdHBjcHkgc3RwY3B5Ci0j
ICBlbHNlCi0vKiBDb3B5IFlZU1JDIHRvIFlZREVTVCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9m
IHRoZSB0ZXJtaW5hdGluZyAnXDAnIGluCi0gICBZWURFU1QuICAqLwotI2lmIChkZWZpbmVkIF9f
U1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1
c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyBjaGFyICoKLXl5c3RwY3B5IChjaGFy
ICp5eWRlc3QsIGNvbnN0IGNoYXIgKnl5c3JjKQotI2Vsc2UKLXN0YXRpYyBjaGFyICoKLXl5c3Rw
Y3B5ICh5eWRlc3QsIHl5c3JjKQotICAgIGNoYXIgKnl5ZGVzdDsKLSAgICBjb25zdCBjaGFyICp5
eXNyYzsKLSNlbmRpZgotewotICBjaGFyICp5eWQgPSB5eWRlc3Q7Ci0gIGNvbnN0IGNoYXIgKnl5
cyA9IHl5c3JjOwotCi0gIHdoaWxlICgoKnl5ZCsrID0gKnl5cysrKSAhPSAnXDAnKQotICAgIGNv
bnRpbnVlOwotCi0gIHJldHVybiB5eWQgLSAxOwotfQotIyAgZW5kaWYKLSMgZW5kaWYKLQotIyBp
Zm5kZWYgeXl0bmFtZXJyCi0vKiBDb3B5IHRvIFlZUkVTIHRoZSBjb250ZW50cyBvZiBZWVNUUiBh
ZnRlciBzdHJpcHBpbmcgYXdheSB1bm5lY2Vzc2FyeQotICAgcXVvdGVzIGFuZCBiYWNrc2xhc2hl
cywgc28gdGhhdCBpdCdzIHN1aXRhYmxlIGZvciB5eWVycm9yLiAgVGhlCi0gICBoZXVyaXN0aWMg
aXMgdGhhdCBkb3VibGUtcXVvdGluZyBpcyB1bm5lY2Vzc2FyeSB1bmxlc3MgdGhlIHN0cmluZwot
ICAgY29udGFpbnMgYW4gYXBvc3Ryb3BoZSwgYSBjb21tYSwgb3IgYmFja3NsYXNoIChvdGhlciB0
aGFuCi0gICBiYWNrc2xhc2gtYmFja3NsYXNoKS4gIFlZU1RSIGlzIHRha2VuIGZyb20geXl0bmFt
ZS4gIElmIFlZUkVTIGlzCi0gICBudWxsLCBkbyBub3QgY29weTsgaW5zdGVhZCwgcmV0dXJuIHRo
ZSBsZW5ndGggb2Ygd2hhdCB0aGUgcmVzdWx0Ci0gICB3b3VsZCBoYXZlIGJlZW4uICAqLwotc3Rh
dGljIFlZU0laRV9UCi15eXRuYW1lcnIgKGNoYXIgKnl5cmVzLCBjb25zdCBjaGFyICp5eXN0cikK
LXsKLSAgaWYgKCp5eXN0ciA9PSAnIicpCi0gICAgewotICAgICAgWVlTSVpFX1QgeXluID0gMDsK
LSAgICAgIGNoYXIgY29uc3QgKnl5cCA9IHl5c3RyOwotCi0gICAgICBmb3IgKDs7KQotCXN3aXRj
aCAoKisreXlwKQotCSAgewotCSAgY2FzZSAnXCcnOgotCSAgY2FzZSAnLCc6Ci0JICAgIGdvdG8g
ZG9fbm90X3N0cmlwX3F1b3RlczsKLQotCSAgY2FzZSAnXFwnOgotCSAgICBpZiAoKisreXlwICE9
ICdcXCcpCi0JICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOwotCSAgICAvKiBGYWxsIHRo
cm91Z2guICAqLwotCSAgZGVmYXVsdDoKLQkgICAgaWYgKHl5cmVzKQotCSAgICAgIHl5cmVzW3l5
bl0gPSAqeXlwOwotCSAgICB5eW4rKzsKLQkgICAgYnJlYWs7Ci0KLQkgIGNhc2UgJyInOgotCSAg
ICBpZiAoeXlyZXMpCi0JICAgICAgeXlyZXNbeXluXSA9ICdcMCc7Ci0JICAgIHJldHVybiB5eW47
Ci0JICB9Ci0gICAgZG9fbm90X3N0cmlwX3F1b3RlczogOwotICAgIH0KLQotICBpZiAoISB5eXJl
cykKLSAgICByZXR1cm4geXlzdHJsZW4gKHl5c3RyKTsKLQotICByZXR1cm4geXlzdHBjcHkgKHl5
cmVzLCB5eXN0cikgLSB5eXJlczsKLX0KLSMgZW5kaWYKLQotLyogQ29weSBpbnRvICpZWU1TRywg
d2hpY2ggaXMgb2Ygc2l6ZSAqWVlNU0dfQUxMT0MsIGFuIGVycm9yIG1lc3NhZ2UKLSAgIGFib3V0
IHRoZSB1bmV4cGVjdGVkIHRva2VuIFlZVE9LRU4gZm9yIHRoZSBzdGF0ZSBzdGFjayB3aG9zZSB0
b3AgaXMKLSAgIFlZU1NQLgotCi0gICBSZXR1cm4gMCBpZiAqWVlNU0cgd2FzIHN1Y2Nlc3NmdWxs
eSB3cml0dGVuLiAgUmV0dXJuIDEgaWYgKllZTVNHIGlzCi0gICBub3QgbGFyZ2UgZW5vdWdoIHRv
IGhvbGQgdGhlIG1lc3NhZ2UuICBJbiB0aGF0IGNhc2UsIGFsc28gc2V0Ci0gICAqWVlNU0dfQUxM
T0MgdG8gdGhlIHJlcXVpcmVkIG51bWJlciBvZiBieXRlcy4gIFJldHVybiAyIGlmIHRoZQotICAg
cmVxdWlyZWQgbnVtYmVyIG9mIGJ5dGVzIGlzIHRvbyBsYXJnZSB0byBzdG9yZS4gICovCi1zdGF0
aWMgaW50Ci15eXN5bnRheF9lcnJvciAoWVlTSVpFX1QgKnl5bXNnX2FsbG9jLCBjaGFyICoqeXlt
c2csCi0gICAgICAgICAgICAgICAgeXl0eXBlX2ludDE2ICp5eXNzcCwgaW50IHl5dG9rZW4pCi17
Ci0gIFlZU0laRV9UIHl5c2l6ZTAgPSB5eXRuYW1lcnIgKFlZX05VTEwsIHl5dG5hbWVbeXl0b2tl
bl0pOwotICBZWVNJWkVfVCB5eXNpemUgPSB5eXNpemUwOwotICBlbnVtIHsgWVlFUlJPUl9WRVJC
T1NFX0FSR1NfTUFYSU1VTSA9IDUgfTsKLSAgLyogSW50ZXJuYXRpb25hbGl6ZWQgZm9ybWF0IHN0
cmluZy4gKi8KLSAgY29uc3QgY2hhciAqeXlmb3JtYXQgPSBZWV9OVUxMOwotICAvKiBBcmd1bWVu
dHMgb2YgeXlmb3JtYXQuICovCi0gIGNoYXIgY29uc3QgKnl5YXJnW1lZRVJST1JfVkVSQk9TRV9B
UkdTX01BWElNVU1dOwotICAvKiBOdW1iZXIgb2YgcmVwb3J0ZWQgdG9rZW5zIChvbmUgZm9yIHRo
ZSAidW5leHBlY3RlZCIsIG9uZSBwZXIKLSAgICAgImV4cGVjdGVkIikuICovCi0gIGludCB5eWNv
dW50ID0gMDsKLQotICAvKiBUaGVyZSBhcmUgbWFueSBwb3NzaWJpbGl0aWVzIGhlcmUgdG8gY29u
c2lkZXI6Ci0gICAgIC0gQXNzdW1lIFlZRkFJTCBpcyBub3QgdXNlZC4gIEl0J3MgdG9vIGZsYXdl
ZCB0byBjb25zaWRlci4gIFNlZQotICAgICAgIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZl
L2h0bWwvYmlzb24tcGF0Y2hlcy8yMDA5LTEyL21zZzAwMDI0Lmh0bWw+Ci0gICAgICAgZm9yIGRl
dGFpbHMuICBZWUVSUk9SIGlzIGZpbmUgYXMgaXQgZG9lcyBub3QgaW52b2tlIHRoaXMKLSAgICAg
ICBmdW5jdGlvbi4KLSAgICAgLSBJZiB0aGlzIHN0YXRlIGlzIGEgY29uc2lzdGVudCBzdGF0ZSB3
aXRoIGEgZGVmYXVsdCBhY3Rpb24sIHRoZW4KLSAgICAgICB0aGUgb25seSB3YXkgdGhpcyBmdW5j
dGlvbiB3YXMgaW52b2tlZCBpcyBpZiB0aGUgZGVmYXVsdCBhY3Rpb24KLSAgICAgICBpcyBhbiBl
cnJvciBhY3Rpb24uICBJbiB0aGF0IGNhc2UsIGRvbid0IGNoZWNrIGZvciBleHBlY3RlZAotICAg
ICAgIHRva2VucyBiZWNhdXNlIHRoZXJlIGFyZSBub25lLgotICAgICAtIFRoZSBvbmx5IHdheSB0
aGVyZSBjYW4gYmUgbm8gbG9va2FoZWFkIHByZXNlbnQgKGluIHl5Y2hhcikgaXMgaWYKLSAgICAg
ICB0aGlzIHN0YXRlIGlzIGEgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgZGVmYXVsdCBhY3Rpb24u
ICBUaHVzLAotICAgICAgIGRldGVjdGluZyB0aGUgYWJzZW5jZSBvZiBhIGxvb2thaGVhZCBpcyBz
dWZmaWNpZW50IHRvIGRldGVybWluZQotICAgICAgIHRoYXQgdGhlcmUgaXMgbm8gdW5leHBlY3Rl
ZCBvciBleHBlY3RlZCB0b2tlbiB0byByZXBvcnQuICBJbiB0aGF0Ci0gICAgICAgY2FzZSwganVz
dCByZXBvcnQgYSBzaW1wbGUgInN5bnRheCBlcnJvciIuCi0gICAgIC0gRG9uJ3QgYXNzdW1lIHRo
ZXJlIGlzbid0IGEgbG9va2FoZWFkIGp1c3QgYmVjYXVzZSB0aGlzIHN0YXRlIGlzIGEKLSAgICAg
ICBjb25zaXN0ZW50IHN0YXRlIHdpdGggYSBkZWZhdWx0IGFjdGlvbi4gIFRoZXJlIG1pZ2h0IGhh
dmUgYmVlbiBhCi0gICAgICAgcHJldmlvdXMgaW5jb25zaXN0ZW50IHN0YXRlLCBjb25zaXN0ZW50
IHN0YXRlIHdpdGggYSBub24tZGVmYXVsdAotICAgICAgIGFjdGlvbiwgb3IgdXNlciBzZW1hbnRp
YyBhY3Rpb24gdGhhdCBtYW5pcHVsYXRlZCB5eWNoYXIuCi0gICAgIC0gT2YgY291cnNlLCB0aGUg
ZXhwZWN0ZWQgdG9rZW4gbGlzdCBkZXBlbmRzIG9uIHN0YXRlcyB0byBoYXZlCi0gICAgICAgY29y
cmVjdCBsb29rYWhlYWQgaW5mb3JtYXRpb24sIGFuZCBpdCBkZXBlbmRzIG9uIHRoZSBwYXJzZXIg
bm90Ci0gICAgICAgdG8gcGVyZm9ybSBleHRyYSByZWR1Y3Rpb25zIGFmdGVyIGZldGNoaW5nIGEg
bG9va2FoZWFkIGZyb20gdGhlCi0gICAgICAgc2Nhbm5lciBhbmQgYmVmb3JlIGRldGVjdGluZyBh
IHN5bnRheCBlcnJvci4gIFRodXMsIHN0YXRlIG1lcmdpbmcKLSAgICAgICAoZnJvbSBMQUxSIG9y
IElFTFIpIGFuZCBkZWZhdWx0IHJlZHVjdGlvbnMgY29ycnVwdCB0aGUgZXhwZWN0ZWQKLSAgICAg
ICB0b2tlbiBsaXN0LiAgSG93ZXZlciwgdGhlIGxpc3QgaXMgY29ycmVjdCBmb3IgY2Fub25pY2Fs
IExSIHdpdGgKLSAgICAgICBvbmUgZXhjZXB0aW9uOiBpdCB3aWxsIHN0aWxsIGNvbnRhaW4gYW55
IHRva2VuIHRoYXQgd2lsbCBub3QgYmUKLSAgICAgICBhY2NlcHRlZCBkdWUgdG8gYW4gZXJyb3Ig
YWN0aW9uIGluIGEgbGF0ZXIgc3RhdGUuCi0gICovCi0gIGlmICh5eXRva2VuICE9IFlZRU1QVFkp
Ci0gICAgewotICAgICAgaW50IHl5biA9IHl5cGFjdFsqeXlzc3BdOwotICAgICAgeXlhcmdbeXlj
b3VudCsrXSA9IHl5dG5hbWVbeXl0b2tlbl07Ci0gICAgICBpZiAoIXl5cGFjdF92YWx1ZV9pc19k
ZWZhdWx0ICh5eW4pKQotICAgICAgICB7Ci0gICAgICAgICAgLyogU3RhcnQgWVlYIGF0IC1ZWU4g
aWYgbmVnYXRpdmUgdG8gYXZvaWQgbmVnYXRpdmUgaW5kZXhlcyBpbgotICAgICAgICAgICAgIFlZ
Q0hFQ0suICBJbiBvdGhlciB3b3Jkcywgc2tpcCB0aGUgZmlyc3QgLVlZTiBhY3Rpb25zIGZvcgot
ICAgICAgICAgICAgIHRoaXMgc3RhdGUgYmVjYXVzZSB0aGV5IGFyZSBkZWZhdWx0IGFjdGlvbnMu
ICAqLwotICAgICAgICAgIGludCB5eXhiZWdpbiA9IHl5biA8IDAgPyAteXluIDogMDsKLSAgICAg
ICAgICAvKiBTdGF5IHdpdGhpbiBib3VuZHMgb2YgYm90aCB5eWNoZWNrIGFuZCB5eXRuYW1lLiAg
Ki8KLSAgICAgICAgICBpbnQgeXljaGVja2xpbSA9IFlZTEFTVCAtIHl5biArIDE7Ci0gICAgICAg
ICAgaW50IHl5eGVuZCA9IHl5Y2hlY2tsaW0gPCBZWU5UT0tFTlMgPyB5eWNoZWNrbGltIDogWVlO
VE9LRU5TOwotICAgICAgICAgIGludCB5eXg7Ci0KLSAgICAgICAgICBmb3IgKHl5eCA9IHl5eGJl
Z2luOyB5eXggPCB5eXhlbmQ7ICsreXl4KQotICAgICAgICAgICAgaWYgKHl5Y2hlY2tbeXl4ICsg
eXluXSA9PSB5eXggJiYgeXl4ICE9IFlZVEVSUk9SCi0gICAgICAgICAgICAgICAgJiYgIXl5dGFi
bGVfdmFsdWVfaXNfZXJyb3IgKHl5dGFibGVbeXl4ICsgeXluXSkpCi0gICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBpZiAoeXljb3VudCA9PSBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJ
TVVNKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB5eWNvdW50ID0g
MTsKLSAgICAgICAgICAgICAgICAgICAgeXlzaXplID0geXlzaXplMDsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgeXlhcmdb
eXljb3VudCsrXSA9IHl5dG5hbWVbeXl4XTsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICBZWVNJWkVfVCB5eXNpemUxID0geXlzaXplICsgeXl0bmFtZXJyIChZWV9OVUxMLCB5
eXRuYW1lW3l5eF0pOwotICAgICAgICAgICAgICAgICAgaWYgKCEgKHl5c2l6ZSA8PSB5eXNpemUx
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgJiYgeXlzaXplMSA8PSBZWVNUQUNLX0FMTE9DX01B
WElNVU0pKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMjsKLSAgICAgICAgICAgICAgICAg
IHl5c2l6ZSA9IHl5c2l6ZTE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgc3dpdGNoICh5eWNvdW50KQotICAgIHsKLSMgZGVmaW5lIFlZ
Q0FTRV8oTiwgUykgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgY2FzZSBOOiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHl5Zm9ybWF0ID0gUzsgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgIGJyZWFrCi0gICAgICBZWUNBU0VfKDAsIFlZXygic3ludGF4
IGVycm9yIikpOwotICAgICAgWVlDQVNFXygxLCBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3Rl
ZCAlcyIpKTsKLSAgICAgIFlZQ0FTRV8oMiwgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQg
JXMsIGV4cGVjdGluZyAlcyIpKTsKLSAgICAgIFlZQ0FTRV8oMywgWVlfKCJzeW50YXggZXJyb3Is
IHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIpKTsKLSAgICAgIFlZQ0FTRV8oNCwg
WVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAl
cyIpKTsKLSAgICAgIFlZQ0FTRV8oNSwgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMs
IGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIpKTsKLSMgdW5kZWYgWVlDQVNFXwotICAg
IH0KLQotICB7Ci0gICAgWVlTSVpFX1QgeXlzaXplMSA9IHl5c2l6ZSArIHl5c3RybGVuICh5eWZv
cm1hdCk7Ci0gICAgaWYgKCEgKHl5c2l6ZSA8PSB5eXNpemUxICYmIHl5c2l6ZTEgPD0gWVlTVEFD
S19BTExPQ19NQVhJTVVNKSkKLSAgICAgIHJldHVybiAyOwotICAgIHl5c2l6ZSA9IHl5c2l6ZTE7
Ci0gIH0KLQotICBpZiAoKnl5bXNnX2FsbG9jIDwgeXlzaXplKQotICAgIHsKLSAgICAgICp5eW1z
Z19hbGxvYyA9IDIgKiB5eXNpemU7Ci0gICAgICBpZiAoISAoeXlzaXplIDw9ICp5eW1zZ19hbGxv
YwotICAgICAgICAgICAgICYmICp5eW1zZ19hbGxvYyA8PSBZWVNUQUNLX0FMTE9DX01BWElNVU0p
KQotICAgICAgICAqeXltc2dfYWxsb2MgPSBZWVNUQUNLX0FMTE9DX01BWElNVU07Ci0gICAgICBy
ZXR1cm4gMTsKLSAgICB9Ci0KLSAgLyogQXZvaWQgc3ByaW50ZiwgYXMgdGhhdCBpbmZyaW5nZXMg
b24gdGhlIHVzZXIncyBuYW1lIHNwYWNlLgotICAgICBEb24ndCBoYXZlIHVuZGVmaW5lZCBiZWhh
dmlvciBldmVuIGlmIHRoZSB0cmFuc2xhdGlvbgotICAgICBwcm9kdWNlZCBhIHN0cmluZyB3aXRo
IHRoZSB3cm9uZyBudW1iZXIgb2YgIiVzInMuICAqLwotICB7Ci0gICAgY2hhciAqeXlwID0gKnl5
bXNnOwotICAgIGludCB5eWkgPSAwOwotICAgIHdoaWxlICgoKnl5cCA9ICp5eWZvcm1hdCkgIT0g
J1wwJykKLSAgICAgIGlmICgqeXlwID09ICclJyAmJiB5eWZvcm1hdFsxXSA9PSAncycgJiYgeXlp
IDwgeXljb3VudCkKLSAgICAgICAgewotICAgICAgICAgIHl5cCArPSB5eXRuYW1lcnIgKHl5cCwg
eXlhcmdbeXlpKytdKTsKLSAgICAgICAgICB5eWZvcm1hdCArPSAyOwotICAgICAgICB9Ci0gICAg
ICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICB5eXArKzsKLSAgICAgICAgICB5eWZvcm1hdCsr
OwotICAgICAgICB9Ci0gIH0KLSAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYgLyogWVlFUlJPUl9WRVJC
T1NFICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0uCi18IFJlbGVhc2UgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHRvIHRoaXMgc3ltYm9sLiAgfAot
YC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLypB
UkdTVVNFRCovCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19f
IFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3Rh
dGljIHZvaWQKLXl5ZGVzdHJ1Y3QgKGNvbnN0IGNoYXIgKnl5bXNnLCBpbnQgeXl0eXBlLCBZWVNU
WVBFICp5eXZhbHVlcCwgWVlMVFlQRSAqeXlsb2NhdGlvbnAsIFRQYXJzZUNvbnRleHQqIGNvbnRl
eHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5ZGVzdHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFs
dWVwLCB5eWxvY2F0aW9ucCwgY29udGV4dCkKLSAgICBjb25zdCBjaGFyICp5eW1zZzsKLSAgICBp
bnQgeXl0eXBlOwotICAgIFlZU1RZUEUgKnl5dmFsdWVwOwotICAgIFlZTFRZUEUgKnl5bG9jYXRp
b25wOwotICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQ7Ci0jZW5kaWYKLXsKLSAgWVlVU0UgKHl5
dmFsdWVwKTsKLSAgWVlVU0UgKHl5bG9jYXRpb25wKTsKLSAgWVlVU0UgKGNvbnRleHQpOwotCi0g
IGlmICgheXltc2cpCi0gICAgeXltc2cgPSAiRGVsZXRpbmciOwotICBZWV9TWU1CT0xfUFJJTlQg
KHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCk7Ci0KLSAgc3dpdGNoICh5eXR5
cGUpCi0gICAgewotCi0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0K
LQotCi0KLS8qLS0tLS0tLS0tLS4KLXwgeXlwYXJzZS4gIHwKLWAtLS0tLS0tLS0tKi8KLQotI2lm
ZGVmIFlZUEFSU0VfUEFSQU0KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5
X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19W
RVIpCi1pbnQKLXl5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pCi0jZWxzZQotaW50Ci15eXBh
cnNlIChZWVBBUlNFX1BBUkFNKQotICAgIHZvaWQgKllZUEFSU0VfUEFSQU07Ci0jZW5kaWYKLSNl
bHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLwotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmlu
ZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5l
ZCBfTVNDX1ZFUikKLWludAoteXlwYXJzZSAoVFBhcnNlQ29udGV4dCogY29udGV4dCkKLSNlbHNl
Ci1pbnQKLXl5cGFyc2UgKGNvbnRleHQpCi0gICAgVFBhcnNlQ29udGV4dCogY29udGV4dDsKLSNl
bmRpZgotI2VuZGlmCi17Ci0vKiBUaGUgbG9va2FoZWFkIHN5bWJvbC4gICovCi1pbnQgeXljaGFy
OwotCi0KLSNpZiBkZWZpbmVkIF9fR05VQ19fICYmIDQwNyA8PSBfX0dOVUNfXyAqIDEwMCArIF9f
R05VQ19NSU5PUl9fCi0vKiBTdXBwcmVzcyBhbiBpbmNvcnJlY3QgZGlhZ25vc3RpYyBhYm91dCB5
eWx2YWwgYmVpbmcgdW5pbml0aWFsaXplZC4gICovCi0jIGRlZmluZSBZWV9JR05PUkVfTUFZQkVf
VU5JTklUSUFMSVpFRF9CRUdJTiBcCi0gICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIHB1c2gi
KSBcCi0gICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3VuaW5pdGlhbGl6
ZWRcIiIpXAotICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdtYXliZS11
bmluaXRpYWxpemVkXCIiKQotIyBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURf
RU5EIFwKLSAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgcG9wIikKLSNlbHNlCi0vKiBEZWZh
dWx0IHZhbHVlIHVzZWQgZm9yIGluaXRpYWxpemF0aW9uLCBmb3IgcGFjaWZ5aW5nIG9sZGVyIEdD
Q3MKLSAgIG9yIG5vbi1HQ0MgY29tcGlsZXJzLiAgKi8KLXN0YXRpYyBZWVNUWVBFIHl5dmFsX2Rl
ZmF1bHQ7Ci0jIGRlZmluZSBZWV9JTklUSUFMX1ZBTFVFKFZhbHVlKSA9IFZhbHVlCi0jZW5kaWYK
LXN0YXRpYyBZWUxUWVBFIHl5bG9jX2RlZmF1bHQKLSMgaWYgZGVmaW5lZCBZWUxUWVBFX0lTX1RS
SVZJQUwgJiYgWVlMVFlQRV9JU19UUklWSUFMCi0gID0geyAxLCAxLCAxLCAxIH0KLSMgZW5kaWYK
LTsKLSNpZm5kZWYgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4KLSMgZGVmaW5l
IFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOCi0jIGRlZmluZSBZWV9JR05PUkVf
TUFZQkVfVU5JTklUSUFMSVpFRF9FTkQKLSNlbmRpZgotI2lmbmRlZiBZWV9JTklUSUFMX1ZBTFVF
Ci0jIGRlZmluZSBZWV9JTklUSUFMX1ZBTFVFKFZhbHVlKSAvKiBOb3RoaW5nLiAqLwotI2VuZGlm
Ci0KLS8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9va2FoZWFkIHN5bWJvbC4gICovCi1Z
WVNUWVBFIHl5bHZhbCBZWV9JTklUSUFMX1ZBTFVFKHl5dmFsX2RlZmF1bHQpOwotCi0vKiBMb2Nh
dGlvbiBkYXRhIGZvciB0aGUgbG9va2FoZWFkIHN5bWJvbC4gICovCi1ZWUxUWVBFIHl5bGxvYyA9
IHl5bG9jX2RlZmF1bHQ7Ci0KLQotICAgIC8qIE51bWJlciBvZiBzeW50YXggZXJyb3JzIHNvIGZh
ci4gICovCi0gICAgaW50IHl5bmVycnM7Ci0KLSAgICBpbnQgeXlzdGF0ZTsKLSAgICAvKiBOdW1i
ZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVkLiAgKi8K
LSAgICBpbnQgeXllcnJzdGF0dXM7Ci0KLSAgICAvKiBUaGUgc3RhY2tzIGFuZCB0aGVpciB0b29s
czoKLSAgICAgICBgeXlzcyc6IHJlbGF0ZWQgdG8gc3RhdGVzLgotICAgICAgIGB5eXZzJzogcmVs
YXRlZCB0byBzZW1hbnRpYyB2YWx1ZXMuCi0gICAgICAgYHl5bHMnOiByZWxhdGVkIHRvIGxvY2F0
aW9ucy4KLQotICAgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhyb3VnaCBzZXBhcmF0ZSBwb2lu
dGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdwotICAgICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNl
d2hlcmUuICAqLwotCi0gICAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KLSAgICB5eXR5cGVfaW50
MTYgeXlzc2FbWVlJTklUREVQVEhdOwotICAgIHl5dHlwZV9pbnQxNiAqeXlzczsKLSAgICB5eXR5
cGVfaW50MTYgKnl5c3NwOwotCi0gICAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAgKi8K
LSAgICBZWVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKLSAgICBZWVNUWVBFICp5eXZzOwotICAg
IFlZU1RZUEUgKnl5dnNwOwotCi0gICAgLyogVGhlIGxvY2F0aW9uIHN0YWNrLiAgKi8KLSAgICBZ
WUxUWVBFIHl5bHNhW1lZSU5JVERFUFRIXTsKLSAgICBZWUxUWVBFICp5eWxzOwotICAgIFlZTFRZ
UEUgKnl5bHNwOwotCi0gICAgLyogVGhlIGxvY2F0aW9ucyB3aGVyZSB0aGUgZXJyb3Igc3RhcnRl
ZCBhbmQgZW5kZWQuICAqLwotICAgIFlZTFRZUEUgeXllcnJvcl9yYW5nZVszXTsKLQotICAgIFlZ
U0laRV9UIHl5c3RhY2tzaXplOwotCi0gIGludCB5eW47Ci0gIGludCB5eXJlc3VsdDsKLSAgLyog
TG9va2FoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIu
ICAqLwotICBpbnQgeXl0b2tlbiA9IDA7Ci0gIC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1
cm4gc2VtYW50aWMgdmFsdWUgYW5kIGxvY2F0aW9uIGZyb20gdGhlCi0gICAgIGFjdGlvbiByb3V0
aW5lcy4gICovCi0gIFlZU1RZUEUgeXl2YWw7Ci0gIFlZTFRZUEUgeXlsb2M7Ci0KLSNpZiBZWUVS
Uk9SX1ZFUkJPU0UKLSAgLyogQnVmZmVyIGZvciBlcnJvciBtZXNzYWdlcywgYW5kIGl0cyBhbGxv
Y2F0ZWQgc2l6ZS4gICovCi0gIGNoYXIgeXltc2didWZbMTI4XTsKLSAgY2hhciAqeXltc2cgPSB5
eW1zZ2J1ZjsKLSAgWVlTSVpFX1QgeXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7Ci0jZW5k
aWYKLQotI2RlZmluZSBZWVBPUFNUQUNLKE4pICAgKHl5dnNwIC09IChOKSwgeXlzc3AgLT0gKE4p
LCB5eWxzcCAtPSAoTikpCi0KLSAgLyogVGhlIG51bWJlciBvZiBzeW1ib2xzIG9uIHRoZSBSSFMg
b2YgdGhlIHJlZHVjZWQgcnVsZS4KLSAgICAgS2VlcCB0byB6ZXJvIHdoZW4gbm8gc3ltYm9sIHNo
b3VsZCBiZSBwb3BwZWQuICAqLwotICBpbnQgeXlsZW4gPSAwOwotCi0gIHl5c3NwID0geXlzcyA9
IHl5c3NhOwotICB5eXZzcCA9IHl5dnMgPSB5eXZzYTsKLSAgeXlsc3AgPSB5eWxzID0geXlsc2E7
Ci0gIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7Ci0KLSAgWVlEUFJJTlRGICgoc3RkZXJyLCAi
U3RhcnRpbmcgcGFyc2VcbiIpKTsKLQotICB5eXN0YXRlID0gMDsKLSAgeXllcnJzdGF0dXMgPSAw
OwotICB5eW5lcnJzID0gMDsKLSAgeXljaGFyID0gWVlFTVBUWTsgLyogQ2F1c2UgYSB0b2tlbiB0
byBiZSByZWFkLiAgKi8KLSAgeXlsc3BbMF0gPSB5eWxsb2M7Ci0gIGdvdG8geXlzZXRzdGF0ZTsK
LQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0uCi18IHl5bmV3c3RhdGUgLS0gUHVzaCBhIG5ldyBzdGF0ZSwgd2hpY2ggaXMgZm91
bmQgaW4geXlzdGF0ZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotIHl5bmV3c3RhdGU6Ci0gIC8qIEluIGFsbCBjYXNl
cywgd2hlbiB5b3UgZ2V0IGhlcmUsIHRoZSB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2tzCi0gICAg
IGhhdmUganVzdCBiZWVuIHB1c2hlZC4gIFNvIHB1c2hpbmcgYSBzdGF0ZSBoZXJlIGV2ZW5zIHRo
ZSBzdGFja3MuICAqLwotICB5eXNzcCsrOwotCi0geXlzZXRzdGF0ZToKLSAgKnl5c3NwID0geXlz
dGF0ZTsKLQotICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkKLSAgICB7Ci0g
ICAgICAvKiBHZXQgdGhlIGN1cnJlbnQgdXNlZCBzaXplIG9mIHRoZSB0aHJlZSBzdGFja3MsIGlu
IGVsZW1lbnRzLiAgKi8KLSAgICAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5c3NwIC0geXlzcyArIDE7
Ci0KLSNpZmRlZiB5eW92ZXJmbG93Ci0gICAgICB7Ci0JLyogR2l2ZSB1c2VyIGEgY2hhbmNlIHRv
IHJlYWxsb2NhdGUgdGhlIHN0YWNrLiAgVXNlIGNvcGllcyBvZgotCSAgIHRoZXNlIHNvIHRoYXQg
dGhlICYncyBkb24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8KLQkgICBtZW1vcnkuICAqLwot
CVlZU1RZUEUgKnl5dnMxID0geXl2czsKLQl5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKLQlZ
WUxUWVBFICp5eWxzMSA9IHl5bHM7Ci0KLQkvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBp
cyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKLQkgICBkYXRhIGluIHVzZSBpbiB0aGF0IHN0
YWNrLCBpbiBieXRlcy4gIFRoaXMgdXNlZCB0byBiZSBhCi0JICAgY29uZGl0aW9uYWwgYXJvdW5k
IGp1c3QgdGhlIHR3byBleHRyYSBhcmdzLCBidXQgdGhhdCBtaWdodAotCSAgIGJlIHVuZGVmaW5l
ZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLwotCXl5b3ZlcmZsb3cgKFlZXygibWVtb3J5
IGV4aGF1c3RlZCIpLAotCQkgICAgJnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCksCi0J
CSAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKLQkJICAgICZ5eWxzMSwgeXlz
aXplICogc2l6ZW9mICgqeXlsc3ApLAotCQkgICAgJnl5c3RhY2tzaXplKTsKLQotCXl5bHMgPSB5
eWxzMTsKLQl5eXNzID0geXlzczE7Ci0JeXl2cyA9IHl5dnMxOwotICAgICAgfQotI2Vsc2UgLyog
bm8geXlvdmVyZmxvdyAqLwotIyBpZm5kZWYgWVlTVEFDS19SRUxPQ0FURQotICAgICAgZ290byB5
eWV4aGF1c3RlZGxhYjsKLSMgZWxzZQotICAgICAgLyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3du
IHdheS4gICovCi0gICAgICBpZiAoWVlNQVhERVBUSCA8PSB5eXN0YWNrc2l6ZSkKLQlnb3RvIHl5
ZXhoYXVzdGVkbGFiOwotICAgICAgeXlzdGFja3NpemUgKj0gMjsKLSAgICAgIGlmIChZWU1BWERF
UFRIIDwgeXlzdGFja3NpemUpCi0JeXlzdGFja3NpemUgPSBZWU1BWERFUFRIOwotCi0gICAgICB7
Ci0JeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7Ci0JdW5pb24geXlhbGxvYyAqeXlwdHIgPQot
CSAgKHVuaW9uIHl5YWxsb2MgKikgWVlTVEFDS19BTExPQyAoWVlTVEFDS19CWVRFUyAoeXlzdGFj
a3NpemUpKTsKLQlpZiAoISB5eXB0cikKLQkgIGdvdG8geXlleGhhdXN0ZWRsYWI7Ci0JWVlTVEFD
S19SRUxPQ0FURSAoeXlzc19hbGxvYywgeXlzcyk7Ci0JWVlTVEFDS19SRUxPQ0FURSAoeXl2c19h
bGxvYywgeXl2cyk7Ci0JWVlTVEFDS19SRUxPQ0FURSAoeXlsc19hbGxvYywgeXlscyk7Ci0jICB1
bmRlZiBZWVNUQUNLX1JFTE9DQVRFCi0JaWYgKHl5c3MxICE9IHl5c3NhKQotCSAgWVlTVEFDS19G
UkVFICh5eXNzMSk7Ci0gICAgICB9Ci0jIGVuZGlmCi0jZW5kaWYgLyogbm8geXlvdmVyZmxvdyAq
LwotCi0gICAgICB5eXNzcCA9IHl5c3MgKyB5eXNpemUgLSAxOwotICAgICAgeXl2c3AgPSB5eXZz
ICsgeXlzaXplIC0gMTsKLSAgICAgIHl5bHNwID0geXlscyArIHl5c2l6ZSAtIDE7Ci0KLSAgICAg
IFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKLQkJ
ICAodW5zaWduZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7Ci0KLSAgICAgIGlmICh5eXNzICsg
eXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQotCVlZQUJPUlQ7Ci0gICAgfQotCi0gIFlZRFBSSU5U
RiAoKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7Ci0KLSAgaWYgKHl5
c3RhdGUgPT0gWVlGSU5BTCkKLSAgICBZWUFDQ0VQVDsKLQotICBnb3RvIHl5YmFja3VwOwotCi0v
Ki0tLS0tLS0tLS0tLgotfCB5eWJhY2t1cC4gIHwKLWAtLS0tLS0tLS0tLSovCi15eWJhY2t1cDoK
LQotICAvKiBEbyBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRl
LiAgUmVhZCBhCi0gICAgIGxvb2thaGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3Qg
YWxyZWFkeSBoYXZlIG9uZS4gICovCi0KLSAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRv
IGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2thaGVhZCB0b2tlbi4gICovCi0gIHl5biA9IHl5
cGFjdFt5eXN0YXRlXTsKLSAgaWYgKHl5cGFjdF92YWx1ZV9pc19kZWZhdWx0ICh5eW4pKQotICAg
IGdvdG8geXlkZWZhdWx0OwotCi0gIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rYWhlYWQgdG9r
ZW4gaWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCi0KLSAgLyogWVlDSEFSIGlzIGVpdGhl
ciBZWUVNUFRZIG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9va2FoZWFkIHN5bWJvbC4gICovCi0gIGlm
ICh5eWNoYXIgPT0gWVlFTVBUWSkKLSAgICB7Ci0gICAgICBZWURQUklOVEYgKChzdGRlcnIsICJS
ZWFkaW5nIGEgdG9rZW46ICIpKTsKLSAgICAgIHl5Y2hhciA9IFlZTEVYOwotICAgIH0KLQotICBp
ZiAoeXljaGFyIDw9IFlZRU9GKQotICAgIHsKLSAgICAgIHl5Y2hhciA9IHl5dG9rZW4gPSBZWUVP
RjsKLSAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIk5vdyBhdCBlbmQgb2YgaW5wdXQuXG4iKSk7
Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNo
YXIpOwotICAgICAgWVlfU1lNQk9MX1BSSU5UICgiTmV4dCB0b2tlbiBpcyIsIHl5dG9rZW4sICZ5
eWx2YWwsICZ5eWxsb2MpOwotICAgIH0KLQotICAvKiBJZiB0aGUgcHJvcGVyIGFjdGlvbiBvbiBz
ZWVpbmcgdG9rZW4gWVlUT0tFTiBpcyB0byByZWR1Y2Ugb3IgdG8KLSAgICAgZGV0ZWN0IGFuIGVy
cm9yLCB0YWtlIHRoYXQgYWN0aW9uLiAgKi8KLSAgeXluICs9IHl5dG9rZW47Ci0gIGlmICh5eW4g
PCAwIHx8IFlZTEFTVCA8IHl5biB8fCB5eWNoZWNrW3l5bl0gIT0geXl0b2tlbikKLSAgICBnb3Rv
IHl5ZGVmYXVsdDsKLSAgeXluID0geXl0YWJsZVt5eW5dOwotICBpZiAoeXluIDw9IDApCi0gICAg
ewotICAgICAgaWYgKHl5dGFibGVfdmFsdWVfaXNfZXJyb3IgKHl5bikpCi0gICAgICAgIGdvdG8g
eXllcnJsYWI7Ci0gICAgICB5eW4gPSAteXluOwotICAgICAgZ290byB5eXJlZHVjZTsKLSAgICB9
Ci0KLSAgLyogQ291bnQgdG9rZW5zIHNoaWZ0ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0
dXJuIG9mZiBlcnJvcgotICAgICBzdGF0dXMuICAqLwotICBpZiAoeXllcnJzdGF0dXMpCi0gICAg
eXllcnJzdGF0dXMtLTsKLQotICAvKiBTaGlmdCB0aGUgbG9va2FoZWFkIHRva2VuLiAgKi8KLSAg
WVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsK
LQotICAvKiBEaXNjYXJkIHRoZSBzaGlmdGVkIHRva2VuLiAgKi8KLSAgeXljaGFyID0gWVlFTVBU
WTsKLQotICB5eXN0YXRlID0geXluOwotICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9C
RUdJTgotICAqKyt5eXZzcCA9IHl5bHZhbDsKLSAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTEla
RURfRU5ECi0gICorK3l5bHNwID0geXlsbG9jOwotICBnb3RvIHl5bmV3c3RhdGU7Ci0KLQotLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS4KLXwgeXlkZWZhdWx0IC0tIGRvIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgdGhlIGN1cnJlbnQg
c3RhdGUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLwoteXlkZWZhdWx0OgotICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsK
LSAgaWYgKHl5biA9PSAwKQotICAgIGdvdG8geXllcnJsYWI7Ci0gIGdvdG8geXlyZWR1Y2U7Ci0K
LQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlyZWR1Y2UgLS0gRG8gYSBy
ZWR1Y3Rpb24uICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXlyZWR1Y2U6
Ci0gIC8qIHl5biBpcyB0aGUgbnVtYmVyIG9mIGEgcnVsZSB0byByZWR1Y2Ugd2l0aC4gICovCi0g
IHl5bGVuID0geXlyMlt5eW5dOwotCi0gIC8qIElmIFlZTEVOIGlzIG5vbnplcm8sIGltcGxlbWVu
dCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYWN0aW9uOgotICAgICBgJCQgPSAkMScuCi0KLSAg
ICAgT3RoZXJ3aXNlLCB0aGUgZm9sbG93aW5nIGxpbmUgc2V0cyBZWVZBTCB0byBnYXJiYWdlLgot
ICAgICBUaGlzIGJlaGF2aW9yIGlzIHVuZG9jdW1lbnRlZCBhbmQgQmlzb24KLSAgICAgdXNlcnMg
c2hvdWxkIG5vdCByZWx5IHVwb24gaXQuICBBc3NpZ25pbmcgdG8gWVlWQUwKLSAgICAgdW5jb25k
aXRpb25hbGx5IG1ha2VzIHRoZSBwYXJzZXIgYSBiaXQgc21hbGxlciwgYW5kIGl0IGF2b2lkcyBh
Ci0gICAgIEdDQyB3YXJuaW5nIHRoYXQgWVlWQUwgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZC4g
ICovCi0gIHl5dmFsID0geXl2c3BbMS15eWxlbl07Ci0KLSAgLyogRGVmYXVsdCBsb2NhdGlvbi4g
ICovCi0gIFlZTExPQ19ERUZBVUxUICh5eWxvYywgKHl5bHNwIC0geXlsZW4pLCB5eWxlbik7Ci0g
IFlZX1JFRFVDRV9QUklOVCAoeXluKTsKLSAgc3dpdGNoICh5eW4pCi0gICAgewotICAgICAgICBj
YXNlIDQ6Ci0KLSAgICB7Ci0gICAgICAgIC8vIFRoZSBzeW1ib2wgdGFibGUgc2VhcmNoIHdhcyBk
b25lIGluIHRoZSBsZXhpY2FsIHBoYXNlCi0gICAgICAgIGNvbnN0IFRTeW1ib2wqIHN5bWJvbCA9
ICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3ltYm9sOwotICAgICAgICBjb25zdCBUVmFyaWFibGUq
IHZhcmlhYmxlOwotICAgICAgICBpZiAoc3ltYm9sID09IDApIHsKLSAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciIsICh5
eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIFRUeXBlIHR5cGUoRWJ0RmxvYXQsIEVicFVuZGVm
aW5lZCk7Ci0gICAgICAgICAgICBUVmFyaWFibGUqIGZha2VWYXJpYWJsZSA9IG5ldyBUVmFyaWFi
bGUoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcsIHR5cGUpOwotICAgICAgICAgICAgY29u
dGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCpmYWtlVmFyaWFibGUpOwotICAgICAgICAgICAgdmFy
aWFibGUgPSBmYWtlVmFyaWFibGU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBU
aGlzIGlkZW50aWZpZXIgY2FuIG9ubHkgYmUgYSB2YXJpYWJsZSB0eXBlIHN5bWJvbAotICAgICAg
ICAgICAgaWYgKCEgc3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSksICJ2YXJpYWJsZSBleHBlY3RlZCIsICh5eXZz
cFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKLQotICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKHZhcmlhYmxlLT5n
ZXROYW1lKCkpICYmCi0gICAgICAgICAgICAgICAgIXZhcmlhYmxlLT5nZXRFeHRlbnNpb24oKS5l
bXB0eSgpICYmCi0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjaygo
eXlsc3BbKDEpIC0gKDEpXSksIHZhcmlhYmxlLT5nZXRFeHRlbnNpb24oKSkpIHsKLSAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBkb24ndCBkZWxldGUgJDEuc3RyaW5nLCBpdCdzIHVzZWQgYnkgZXJyb3IgcmVj
b3ZlcnksIGFuZCB0aGUgcG9vbAotICAgICAgICAvLyBwb3Agd2lsbCByZWNsYWltIHRoZSBtZW1v
cnkKLQotICAgICAgICBpZiAodmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBF
dnFDb25zdCApIHsKLSAgICAgICAgICAgIENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSB2YXJp
YWJsZS0+Z2V0Q29uc3RQb2ludGVyKCk7Ci0gICAgICAgICAgICBUVHlwZSB0KHZhcmlhYmxlLT5n
ZXRUeXBlKCkpOwotICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24oY29uc3RBcnJheSwgdCwgKHl5
bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZh
cmlhYmxlLT5nZXRVbmlxdWVJZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXROYW1lKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXlsc3BbKDEpIC0g
KDEpXSkpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDU6Ci0KLSAgICB7Ci0gICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDY6Ci0KLSAg
ICB7Ci0gICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlv
blsxXTsKLSAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KCh5eXZzcFsoMSkgLSAoMSldLmxl
eCkuaSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwg
RWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgfQotICAg
IGJyZWFrOwotCi0gIGNhc2UgNzoKLQotICAgIHsKLSAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5p
b25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICB1bmlvbkFycmF5LT5zZXRG
Q29uc3QoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5mKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24o
dW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXls
c3BbKDEpIC0gKDEpXSkpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDg6Ci0KLSAgICB7
Ci0gICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsx
XTsKLSAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KCh5eXZzcFsoMSkgLSAoMSldLmxleCku
Yik7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVi
cFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgIH0KLSAgICBi
cmVhazsKLQotICBjYXNlIDk6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9ICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwot
ICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDEwOgotCi0gICAgewotICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMToKLQotICAgIHsKLSAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+YWRkSW5kZXhF
eHByZXNzaW9uKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXls
c3BbKDIpIC0gKDQpXSksICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
KTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMjoKLQotICAgIHsKLSAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTM6Ci0KLSAgICB7
Ci0gICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
aXNBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDMpIC0gKDMp
XSksICJjYW5ub3QgYXBwbHkgZG90IG9wZXJhdG9yIHRvIGFuIGFycmF5IiwgIi4iKTsKLSAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNWZWN0b3IoKSkgewotICAg
ICAgICAgICAgVFZlY3RvckZpZWxkcyBmaWVsZHM7Ci0gICAgICAgICAgICBpZiAoISBjb250ZXh0
LT5wYXJzZVZlY3RvckZpZWxkcygqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcsICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXROb21pbmFsU2l6ZSgpLCBm
aWVsZHMsICh5eWxzcFsoMykgLSAoMyldKSkpIHsKLSAgICAgICAgICAgICAgICBmaWVsZHMubnVt
ID0gMTsKLSAgICAgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1swXSA9IDA7Ci0gICAgICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5n
ZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgeyAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2ZWN0
b3IgZmllbGRzCi0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gY29udGV4dC0+YWRkQ29uc3RWZWN0b3JOb2RlKGZpZWxkcywgKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMykgLSAoMyldKSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRU
eXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRC
YXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dFByZWNpc2lvbigpLCBFdnFDb25zdCwgKGludCkgKCooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0
cmluZykuc2l6ZSgpKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFRT
dHJpbmcgdmVjdG9yU3RyaW5nID0gKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nOwotICAg
ICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkU3dpenpsZShmaWVsZHMsICh5eWxzcFsoMykgLSAoMyldKSk7Ci0gICAgICAgICAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZEluZGV4KEVPcFZlY3RvclN3aXp6bGUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLCBpbmRleCwgKHl5bHNwWygyKSAtICgzKV0pKTsKLSAgICAgICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBv
cmFyeSwgKGludCkgdmVjdG9yU3RyaW5nLnNpemUoKSkpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5p
c01hdHJpeCgpKSB7Ci0gICAgICAgICAgICBUTWF0cml4RmllbGRzIGZpZWxkczsKLSAgICAgICAg
ICAgIGlmICghIGNvbnRleHQtPnBhcnNlTWF0cml4RmllbGRzKCooeXl2c3BbKDMpIC0gKDMpXS5s
ZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dE5vbWluYWxTaXplKCksIGZpZWxkcywgKHl5bHNwWygzKSAtICgzKV0pKSkgewotICAgICAgICAg
ICAgICAgIGZpZWxkcy53aG9sZVJvdyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGZpZWxkcy53
aG9sZUNvbCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGZpZWxkcy5yb3cgPSAwOwotICAgICAg
ICAgICAgICAgIGZpZWxkcy5jb2wgPSAwOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGZpZWxkcy53aG9sZVJvdyB8
fCBmaWVsZHMud2hvbGVDb2wpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXls
c3BbKDIpIC0gKDMpXSksICIgbm9uLXNjYWxhciBmaWVsZHMgbm90IGltcGxlbWVudGVkIHlldCIs
ICIuIik7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAg
ICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAg
ICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoMCk7Ci0gICAgICAgICAgICAgICAg
VEludGVybVR5cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVu
aW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5
eWxzcFsoMykgLSAoMyldKSk7Ci0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0
LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eWxz
cFsoMikgLSAoMyldKSk7Ci0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5zZXRUeXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5nZXRCYXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldFByZWNpc2lvbigpLEV2cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxTaXplKCkpKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25z
dChmaWVsZHMuY29sICogKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldE5vbWluYWxTaXplKCkgKyBmaWVsZHMucm93KTsKLSAgICAgICAgICAgICAgICBUSW50ZXJt
VHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5p
b25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygz
KSAtICgzKV0pKTsKLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5bHNwWygyKSAt
ICgzKV0pKTsKLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+Z2V0UHJlY2lzaW9uKCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICgo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCkg
PT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgICAgICBib29sIGZpZWxkRm91bmQgPSBmYWxzZTsKLSAg
ICAgICAgICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9ICh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCktPmZpZWxkcygpOwot
ICAgICAgICAgICAgdW5zaWduZWQgaW50IGk7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwg
ZmllbGRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZpZWxkc1tpXS0+bmFt
ZSgpID09ICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZykgewotICAgICAgICAgICAgICAg
ICAgICBmaWVsZEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZpZWxkRm91bmQp
IHsKLSAgICAgICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgewotICAgICAg
ICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5h
ZGRDb25zdFN0cnVjdCgqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKCpmaWVsZHNbaV0tPnR5cGUoKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UgdGhlIHF1YWxpZmllciBvZiB0aGUg
cmV0dXJuIHR5cGUsIG5vdCBvZiB0aGUgc3RydWN0dXJlIGZpZWxkCi0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBhcyB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24gaXMgc2hhcmVkIGJldHdlZW4g
dmFyaW91cyBzdHJ1Y3R1cmVzLgotICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlUG9pbnRlcigpLT5zZXRRdWFsaWZpZXIoRXZxQ29u
c3QpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFu
dFVuaW9uWzFdOwotICAgICAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoaSk7
Ci0gICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCAqZmllbGRzW2ldLT50eXBlKCks
ICh5eWxzcFsoMykgLSAoMyldKSk7Ci0gICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRl
eERpcmVjdFN0cnVjdCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
IGluZGV4LCAoeXlsc3BbKDIpIC0gKDMpXSkpOwotICAgICAgICAgICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIiBubyBzdWNoIGZpZWxkIGluIHN0cnVj
dHVyZSIsICh5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICIgZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVz
IHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24gbGVmdCBoYW5kIHNpZGUiLCAoeXl2c3Bb
KDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICAgICAgfQotICAg
ICAgICAvLyBkb24ndCBkZWxldGUgJDMuc3RyaW5nLCBpdCdzIGZyb20gdGhlIHBvb2wKLSAgICB9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNDoKLQotICAgIHsKLSAgICAgICAgaWYgKGNvbnRleHQt
PmxWYWx1ZUVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgyKV0pLCAiKysiLCAoeXl2c3BbKDEpIC0g
KDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdEluY3JlbWVudCwgKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMildKSwgY29udGV4
dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcigoeXlsc3BbKDIp
IC0gKDIpXSksICIrKyIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkg
LSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgMTU6Ci0KLSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVF
cnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgIi0tIiwgKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSkpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFBvc3REZWNyZW1lbnQsICh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDIpXSksIGNvbnRleHQtPnN5bWJv
bFRhYmxlKTsKLSAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAw
KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgyKV0p
LCAiLS0iLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29t
cGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDIpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLQot
ICBjYXNlIDE2OgotCi0gICAgewotICAgICAgICBpZiAoY29udGV4dC0+aW50ZWdlckVycm9yQ2hl
Y2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICJbXSIpKQotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsK
LSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNzoKLQotICAgIHsKLSAgICAgICAgVEZ1bmN0
aW9uKiBmbkNhbGwgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmZ1bmN0aW9uOwotICAgICAg
ICBUT3BlcmF0b3Igb3AgPSBmbkNhbGwtPmdldEJ1aWx0SW5PcCgpOwotCi0gICAgICAgIGlmIChv
cCAhPSBFT3BOdWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8g
VGhlbiB0aGlzIHNob3VsZCBiZSBhIGNvbnN0cnVjdG9yLgotICAgICAgICAgICAgLy8gRG9uJ3Qg
Z28gdGhyb3VnaCB0aGUgc3ltYm9sIHRhYmxlIGZvciBjb25zdHJ1Y3RvcnMuCi0gICAgICAgICAg
ICAvLyBUaGVpciBwYXJhbWV0ZXJzIHdpbGwgYmUgdmVyaWZpZWQgYWxnb3JpdGhtaWNhbGx5Lgot
ICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZp
bmVkKTsgIC8vIHVzZSB0aGlzIHRvIGdldCB0aGUgdHlwZSBiYWNrCi0gICAgICAgICAgICBpZiAo
Y29udGV4dC0+Y29uc3RydWN0b3JFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCAqZm5DYWxsLCBvcCwgJnR5cGUpKSB7Ci0g
ICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gMDsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAvLyBJ
dCdzIGEgY29uc3RydWN0b3IsIG9mIHR5cGUgJ3R5cGUnLgotICAgICAgICAgICAgICAgIC8vCi0g
ICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
YWRkQ29uc3RydWN0b3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCAmdHlw
ZSwgb3AsIGZuQ2FsbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7Ci0gICAg
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdh
dGVPcGVyYXRvcigwLCBvcCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZSh0eXBlKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBOb3QgYSBj
b25zdHJ1Y3Rvci4gIEZpbmQgaXQgaW4gdGhlIHN5bWJvbCB0YWJsZS4KLSAgICAgICAgICAgIC8v
Ci0gICAgICAgICAgICBjb25zdCBURnVuY3Rpb24qIGZuQ2FuZGlkYXRlOwotICAgICAgICAgICAg
Ym9vbCBidWlsdEluOwotICAgICAgICAgICAgZm5DYW5kaWRhdGUgPSBjb250ZXh0LT5maW5kRnVu
Y3Rpb24oKHl5bHNwWygxKSAtICgxKV0pLCBmbkNhbGwsICZidWlsdEluKTsKLSAgICAgICAgICAg
IGlmIChmbkNhbmRpZGF0ZSkgewotICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAg
Ly8gQSBkZWNsYXJlZCBmdW5jdGlvbi4KLSAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAg
ICAgIGlmIChidWlsdEluICYmICFmbkNhbmRpZGF0ZS0+Z2V0RXh0ZW5zaW9uKCkuZW1wdHkoKSAm
JgotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCh5eWxz
cFsoMSkgLSAoMSldKSwgZm5DYW5kaWRhdGUtPmdldEV4dGVuc2lvbigpKSkgewotICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIG9wID0gZm5DYW5kaWRhdGUtPmdldEJ1aWx0SW5PcCgpOwotICAgICAgICAgICAg
ICAgIGlmIChidWlsdEluICYmIG9wICE9IEVPcE51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAg
Ly8KLSAgICAgICAgICAgICAgICAgICAgLy8gQSBmdW5jdGlvbiBjYWxsIG1hcHBlZCB0byBhIGJ1
aWx0LWluIG9wZXJhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGZuQ2FuZGlkYXRlLT5nZXRQYXJhbUNvdW50KCkgPT0gMSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyZWF0IGl0IGxp
a2UgYSBidWlsdC1pbiB1bmFyeSBvcGVyYXRvci4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
Ci0gICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKG9wLCAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0pLmludGVybU5vZGUsICh5eWxzcFsoMSkgLSAoMSldKSwgY29udGV4dC0+c3ltYm9s
VGFibGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9PSAwKSAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3Ry
aW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
eHRyYUluZm9TdHJlYW0gPDwgImJ1aWx0IGluIHVuYXJ5IG9wZXJhdG9yIGZ1bmN0aW9uLiAgVHlw
ZTogIiA8PCBzdGF0aWNfY2FzdDxUSW50ZXJtVHlwZWQqPigoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0pLmludGVybU5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0pLmludGVybU5vZGUtPmdldExpbmUoKSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUi
LCAiSW50ZXJuYWwgRXJyb3IiLCBleHRyYUluZm8uY19zdHIoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgWVlFUlJPUjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVP
cGVyYXRvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSwgb3AsICh5
eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgcmVhbCBmdW5jdGlv
biBjYWxsCi0KLSAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKCh5eXZzcFso
MSkgLSAoMSldLmludGVybSkuaW50ZXJtQWdncmVnYXRlLCBFT3BGdW5jdGlvbkNhbGwsICh5eWxz
cFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+c2V0VHlwZShmbkNhbmRpZGF0ZS0+Z2V0UmV0dXJuVHlwZSgpKTsKLQotICAg
ICAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGhvdyB3ZSBrbm93IHdoZXRoZXIgdGhlIGdpdmVu
IGZ1bmN0aW9uIGlzIGEgYnVpbHRJbiBmdW5jdGlvbiBvciBhIHVzZXIgZGVmaW5lZCBmdW5jdGlv
bgotICAgICAgICAgICAgICAgICAgICAvLyBpZiBidWlsdEluID09IGZhbHNlLCBpdCdzIGEgdXNl
ckRlZmluZWQgLT4gY291bGQgYmUgYW4gb3ZlcmxvYWRlZCBidWlsdEluIGZ1bmN0aW9uIGFsc28K
LSAgICAgICAgICAgICAgICAgICAgLy8gaWYgYnVpbHRJbiA9PSB0cnVlLCBpdCdzIGRlZmluaXRl
bHkgYSBidWlsdEluIGZ1bmN0aW9uIHdpdGggRU9wTnVsbAotICAgICAgICAgICAgICAgICAgICBp
ZiAoIWJ1aWx0SW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNldFVzZXJEZWZpbmVkKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNBZ2dyZWdh
dGUoKS0+c2V0TmFtZShmbkNhbmRpZGF0ZS0+Z2V0TWFuZ2xlZE5hbWUoKSk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgVFF1YWxpZmllciBxdWFsOwotICAgICAgICAgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGZuQ2FuZGlkYXRlLT5nZXRQYXJhbUNvdW50KCk7ICsraSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgcXVhbCA9IGZuQ2FuZGlkYXRlLT5nZXRQYXJhbShpKS50eXBl
LT5nZXRRdWFsaWZpZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdWFsID09IEV2
cU91dCB8fCBxdWFsID09IEV2cUluT3V0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRMaW5lKCksICJhc3NpZ24iLCAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldEFzQWdncmVnYXRlKCktPmdldFNlcXVlbmNlKClbaV0tPmdldEFzVHlwZWQoKSkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCksICJDb25zdGFudCB2YWx1ZSBjYW5u
b3QgYmUgcGFzc2VkIGZvciAnb3V0JyBvciAnaW5vdXQnIHBhcmFtZXRlcnMuIiwgIkVycm9yIik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKGZuQ2FuZGlkYXRlLT5nZXRS
ZXR1cm5UeXBlKCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBl
cnJvciBtZXNzYWdlIHdhcyBwdXQgb3V0IGJ5IFBhRmluZEZ1bmN0aW9uKCkKLSAgICAgICAgICAg
ICAgICAvLyBQdXQgb24gYSBkdW1teSBub2RlIGZvciBlcnJvciByZWNvdmVyeQotICAgICAgICAg
ICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsK
LSAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3QoMC4wZik7Ci0gICAgICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVm
aW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBkZWxl
dGUgZm5DYWxsOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE4OgotCi0gICAgewotICAg
ICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybSk7Ci0gICAgfQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgMTk6Ci0KLSAgICB7Ci0gICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eWxzcFsoMykgLSAoMyldKSwgIm1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQiLCAiIik7Ci0g
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2
c3BbKDMpIC0gKDMpXS5pbnRlcm0pOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDIwOgot
Ci0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVy
bSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjE6Ci0KLSAgICB7Ci0gICAgICAgICh5
eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKTsKLSAgICB9Ci0gICAgYnJl
YWs7Ci0KLSAgY2FzZSAyMjoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rp
b24gPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pOwotICAgICAgICAoeXl2YWwu
aW50ZXJtKS5pbnRlcm1Ob2RlID0gMDsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyMzoK
LQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0uZnVuY3Rpb24pOwotICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1Ob2Rl
ID0gMDsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyNDoKLQotICAgIHsKLSAgICAgICAg
VFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBlKCh5eXZzcFsoMikgLSAoMildLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkpIH07Ci0gICAgICAgICh5eXZzcFsoMSkgLSAo
MildLmludGVybS5mdW5jdGlvbiktPmFkZFBhcmFtZXRlcihwYXJhbSk7Ci0gICAgICAgICh5eXZh
bC5pbnRlcm0pLmZ1bmN0aW9uID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKTsK
LSAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtTm9kZSA9ICh5eXZzcFsoMikgLSAoMildLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDI1Ogot
Ci0gICAgewotICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUoKHl5dnNw
WygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKSkgfTsKLSAgICAg
ICAgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5mdW5jdGlvbi0+YWRkUGFyYW1ldGVyKHBhcmFt
KTsKLSAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0pLmZ1bmN0aW9uOwotICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1Ob2RlID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
KS5pbnRlcm1Ob2RlLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5bHNwWygyKSAtICgzKV0pKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyNjoKLQot
ICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0uZnVuY3Rpb24pOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDI3OgotCi0g
ICAgewotICAgICAgICAvLwotICAgICAgICAvLyBDb25zdHJ1Y3RvcgotICAgICAgICAvLwotICAg
ICAgICBUT3BlcmF0b3Igb3AgPSBFT3BOdWxsOwotICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLnR5cGUpLnVzZXJEZWYpIHsKLSAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0
U3RydWN0OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3dpdGNoICgoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSkgewotICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoK
LSAgICAgICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLm1hdHJp
eCkgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2goKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LnR5cGUpLnNpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0
cnVjdE1hdDI7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENv
bnN0cnVjdE1hdDM7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9IEVP
cENvbnN0cnVjdE1hdDQ7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCgoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0udHlwZSkuc2l6ZSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IG9w
ID0gRU9wQ29uc3RydWN0RmxvYXQ7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIDI6
IG9wID0gRU9wQ29uc3RydWN0VmVjMjsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNl
IDM6IG9wID0gRU9wQ29uc3RydWN0VmVjMzsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBj
YXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0VmVjNDsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAgICAgICAgICAgc3dpdGNoKCh5eXZzcFsoMSkgLSAoMSld
LmludGVybS50eXBlKS5zaXplKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAxOiBvcCA9IEVPcENv
bnN0cnVjdEludDsgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29u
c3RydWN0SVZlYzI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMzogb3AgPSBFT3BDb25z
dHJ1Y3RJVmVjMzsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0
cnVjdElWZWM0OyBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIEVidEJvb2w6Ci0gICAgICAgICAgICAgICAgc3dpdGNoKCh5
eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zaXplKSB7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSAxOiBvcCA9IEVPcENvbnN0cnVjdEJvb2w7ICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNl
IDI6IG9wID0gRU9wQ29uc3RydWN0QlZlYzI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ug
Mzogb3AgPSBFT3BDb25zdHJ1Y3RCVmVjMzsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSA0
OiBvcCA9IEVPcENvbnN0cnVjdEJWZWM0OyBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OiBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmIChvcCA9PSBFT3BOdWxsKSB7Ci0gICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0pLCAiY2Fubm90IGNvbnN0cnVjdCB0aGlz
IHR5cGUiLCBnZXRCYXNpY1N0cmluZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlw
ZSkpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAg
ICAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSA9IEVidEZsb2F0OwotICAgICAg
ICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgVFN0cmluZyB0ZW1wU3RyaW5nOwotICAgICAgICBUVHlwZSB0eXBlKCh5eXZz
cFsoMSkgLSAoMSldLmludGVybS50eXBlKSk7Ci0gICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24g
PSBuZXcgVEZ1bmN0aW9uKCZ0ZW1wU3RyaW5nLCB0eXBlLCBvcCk7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0uZnVuY3Rpb24pID0gZnVuY3Rpb247Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2Ug
Mjg6Ci0KLSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5
bHNwWygxKSAtICgxKV0pLCAqKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcpKQotICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBUVHlwZSB0eXBlKEVidFZvaWQsIEVi
cFVuZGVmaW5lZCk7Ci0gICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9u
KCh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLCB0eXBlKTsKLSAgICAgICAgKHl5dmFsLmlu
dGVybS5mdW5jdGlvbikgPSBmdW5jdGlvbjsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAy
OToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgfQotICAgIGJyZWFr
OwotCi0gIGNhc2UgMzA6Ci0KLSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJv
ckNoZWNrKCh5eWxzcFsoMSkgLSAoMildKSwgIisrIiwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSkpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkVW5hcnlNYXRoKEVPcFByZUluY3JlbWVudCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMSkgLSAoMildKSwgY29udGV4dC0+c3ltYm9sVGFi
bGUpOwotICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcigoeXlsc3BbKDEpIC0gKDIpXSksICIr
KyIsICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0
ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNh
c2UgMzE6Ci0KLSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCh5
eWxzcFsoMSkgLSAoMildKSwgIi0tIiwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSkpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5h
cnlNYXRoKEVPcFByZURlY3JlbWVudCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eWxzcFsoMSkgLSAoMildKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAg
ICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcigoeXlsc3BbKDEpIC0gKDIpXSksICItLSIsICh5eXZz
cFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygp
KTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzI6Ci0K
LSAgICB7Ci0gICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLm9wICE9IEVPcE51
bGwpIHsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5v
cCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMSkg
LSAoMildKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICAgICAgaWYgKCh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hh
ciogZXJyb3JPcCA9ICIiOwotICAgICAgICAgICAgICAgIHN3aXRjaCgoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0pLm9wKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZTogICBlcnJv
ck9wID0gIi0iOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6IGVy
cm9yT3AgPSAiISI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoKHl5
bHNwWygxKSAtICgyKV0pLCBlcnJvck9wLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwot
ICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDMzOgotCi0gICAgeyAoeXl2YWwuaW50ZXJtKS5v
cCA9IEVPcE51bGw7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDM0OgotCi0gICAgeyAoeXl2YWwu
aW50ZXJtKS5vcCA9IEVPcE5lZ2F0aXZlOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzNToKLQot
ICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BMb2dpY2FsTm90OyB9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSAzNjoKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KLSAgICBicmVhazsKLQot
ICBjYXNlIDM3OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BNdWwsICh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xU
YWJsZSk7Ci0gICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkg
ewotICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSks
ICIqIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBs
ZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFr
OwotCi0gIGNhc2UgMzg6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcERpdiwgKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5
bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAo
MyldKSwgIi8iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0
Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSAzOToKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KLSAgICBi
cmVhazsKLQotICBjYXNlIDQwOgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BBZGQs
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0
LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIp
IC0gKDMpXSksICIrIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgNDE6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVP
cFN1YiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFso
MykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNv
bnRleHQtPnN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxz
cFsoMikgLSAoMyldKSwgIi0iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0MjoKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7
IH0KLSAgICBicmVhazsKLQotICBjYXNlIDQzOgotCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsg
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDQ6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRo
KEVPcExlc3NUaGFuLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAo
MyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJy
b3IoKHl5bHNwWygyKSAtICgzKV0pLCAiPCIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5
ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29u
c3QoZmFsc2UpOwotICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUo
RWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMikgLSAoMyldKSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0NToKLQotICAgIHsKLSAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEJpbmFyeU1hdGgoRU9wR3JlYXRlclRoYW4sICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlm
ICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewotICAgICAgICAgICAgY29u
dGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICI+IiwgKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZz
cFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygp
KTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIENvbnN0YW50
VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgIHVu
aW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1
bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNw
WygyKSAtICgzKV0pKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDQ2
OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhhbkVxdWFsLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9s
VGFibGUpOwotICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDAp
IHsKLSAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0p
LCAiPD0iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29t
cGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
WzFdOwotICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5l
ZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwotICAgICAgICB9Ci0gICAgfQotICAg
IGJyZWFrOwotCi0gIGNhc2UgNDc6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdy
ZWF0ZXJUaGFuRXF1YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAt
ICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmICgoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BF
cnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICI+PSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFy
cmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRC
Q29uc3QoZmFsc2UpOwotICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5
cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMikgLSAoMyldKSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0ODoKLQotICAgIHsgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDQ5OgotCi0gICAgewotICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQmluYXJ5TWF0aChFT3BFcXVhbCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAo
eXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0
LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIj09IiwgKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFso
MykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIENvbnN0YW50VW5p
b24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgIHVuaW9u
QXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlv
bkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygy
KSAtICgzKV0pKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDUwOgot
Ci0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BOb3RFcXVhbCwgKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsK
LSAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIiE9Iiwg
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3Ry
aW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21w
bGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
ICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAg
ICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29u
c3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNv
bnN0KSwgKHl5bHNwWygyKSAtICgzKV0pKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsK
LQotICBjYXNlIDUxOgotCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgNTI6Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSA1MzoKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KLSAgICBicmVhazsKLQot
ICBjYXNlIDU0OgotCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQotICAgIGJyZWFrOwotCi0g
IGNhc2UgNTU6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxBbmQsICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5z
eW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0g
KDMpXSksICImJiIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50
VW5pb25bMV07Ci0gICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwotICAg
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5k
ZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMikgLSAoMyldKSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1NjoKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0K
LSAgICBicmVhazsKLQotICBjYXNlIDU3OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChF
T3BMb2dpY2FsWG9yLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAo
MyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJy
b3IoKHl5bHNwWygyKSAtICgzKV0pLCAiXl4iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJh
eSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNv
bnN0KGZhbHNlKTsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBl
KEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTg6Ci0KLSAgICB7ICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1OToKLQotICAgIHsKLSAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbE9yLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAo
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKLSAgICAgICAgICAgIGNvbnRl
eHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAifHwiLCAoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNw
WygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkp
OwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgQ29uc3RhbnRV
bmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgdW5p
b25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVu
aW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3Bb
KDIpIC0gKDMpXSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNjA6
Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA2MToK
LQotICAgIHsKLSAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2soKHl5bHNwWygyKSAt
ICg1KV0pLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCi0gICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFNlbGVjdGlvbigoeXl2c3Bb
KDEpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICg1KV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoNSkgLSAoNSldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDUpXSkpOwotICAgICAgICBpZiAoKHl5dnNwWygzKSAtICg1
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKSAhPSAoeXl2c3BbKDUpIC0gKDUp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpKQotICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gMDsKLQotICAgICAgICBpZiAoKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9w
RXJyb3IoKHl5bHNwWygyKSAtICg1KV0pLCAiOiIsICh5eXZzcFsoMykgLSAoNSldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDUpIC0gKDUpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDYyOgotCi0gICAgeyAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNjM6Ci0KLSAgICB7Ci0gICAgICAg
IGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMyldKSwgImFzc2ln
biIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKLSAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEFzc2lnbigoeXl2c3BbKDIpIC0gKDMp
XS5pbnRlcm0pLm9wLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAo
MyldKSk7Ci0gICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkg
ewotICAgICAgICAgICAgY29udGV4dC0+YXNzaWduRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAi
YXNzaWduIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENv
bXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgNjQ6Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wQXNzaWdu
OyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA2NToKLQotICAgIHsgKHl5dmFsLmludGVybSkub3Ag
PSBFT3BNdWxBc3NpZ247IH0KLSAgICBicmVhazsKLQotICBjYXNlIDY2OgotCi0gICAgeyAoeXl2
YWwuaW50ZXJtKS5vcCA9IEVPcERpdkFzc2lnbjsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNjc6
Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wQWRkQXNzaWduOyB9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSA2ODoKLQotICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BTdWJBc3NpZ247
IH0KLSAgICBicmVhazsKLQotICBjYXNlIDY5OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA3MDoKLQotICAgIHsKLSAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZENvbW1hKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2
c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0p
KTsKLSAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIiwi
LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVT
dHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENv
bXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygzKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSA3MToKLQotICAgIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPmNvbnN0RXJyb3JDaGVj
aygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCi0gICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgIH0K
LSAgICBicmVhazsKLQotICBjYXNlIDcyOgotCi0gICAgewotICAgICAgICBURnVuY3Rpb24gJmZ1
bmN0aW9uID0gKigoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmZ1bmN0aW9uKTsKLSAgICAgICAg
Ci0gICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUgKnByb3RvdHlwZSA9IG5ldyBUSW50ZXJtQWdncmVn
YXRlOwotICAgICAgICBwcm90b3R5cGUtPnNldFR5cGUoZnVuY3Rpb24uZ2V0UmV0dXJuVHlwZSgp
KTsKLSAgICAgICAgcHJvdG90eXBlLT5zZXROYW1lKGZ1bmN0aW9uLmdldE5hbWUoKSk7Ci0gICAg
ICAgIAotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uLmdldFBhcmFtQ291
bnQoKTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBUUGFyYW1ldGVyICZwYXJh
bSA9IGZ1bmN0aW9uLmdldFBhcmFtKGkpOwotICAgICAgICAgICAgaWYgKHBhcmFtLm5hbWUgIT0g
MCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUVmFyaWFibGUgdmFyaWFibGUocGFy
YW0ubmFtZSwgKnBhcmFtLnR5cGUpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IHByb3RvdHlwZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKHByb3RvdHlw
ZSwgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZS5nZXRVbmlxdWVJZCgp
LCB2YXJpYWJsZS5nZXROYW1lKCksIHZhcmlhYmxlLmdldFR5cGUoKSwgKHl5bHNwWygxKSAtICgy
KV0pKSwgKHl5bHNwWygxKSAtICgyKV0pKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcm90b3R5cGUgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShwcm90b3R5cGUsIGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRTeW1ib2woMCwgIiIsICpwYXJhbS50eXBlLCAoeXlsc3BbKDEpIC0gKDIpXSkpLCAoeXls
c3BbKDEpIC0gKDIpXSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBwcm90b3R5cGUtPnNldE9wKEVPcFByb3RvdHlwZSk7Ci0gICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSkgPSBwcm90b3R5cGU7Ci0KLSAgICAgICAgY29udGV4dC0+c3ltYm9sVGFi
bGUucG9wKCk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNzM6Ci0KLSAgICB7Ci0gICAg
ICAgIGlmICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSkKLSAgICAg
ICAgICAgICh5eXZzcFsoMSkgLSAoMildLmludGVybSkuaW50ZXJtQWdncmVnYXRlLT5zZXRPcChF
T3BEZWNsYXJhdGlvbik7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZTsKLSAgICB9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSA3NDoKLQotICAgIHsKLSAgICAgICAgaWYgKCgoeXl2c3BbKDIpIC0gKDQpXS5p
bnRlcm0ucHJlY2lzaW9uKSA9PSBFYnBIaWdoKSAmJiAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBT
SF9GUkFHTUVOVF9TSEFERVIpICYmICFjb250ZXh0LT5mcmFnbWVudFByZWNpc2lvbkhpZ2gpIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoNCldKSwgInByZWNpc2lv
biBpcyBub3Qgc3VwcG9ydGVkIGluIGZyYWdtZW50IHNoYWRlciIsICJoaWdocCIpOwotICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghY29udGV4
dC0+c3ltYm9sVGFibGUuc2V0RGVmYXVsdFByZWNpc2lvbiggKHl5dnNwWygzKSAtICg0KV0uaW50
ZXJtLnR5cGUpLCAoeXl2c3BbKDIpIC0gKDQpXS5pbnRlcm0ucHJlY2lzaW9uKSApKSB7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDQpXSksICJpbGxlZ2FsIHR5cGUg
YXJndW1lbnQgZm9yIGRlZmF1bHQgcHJlY2lzaW9uIHF1YWxpZmllciIsIGdldEJhc2ljU3RyaW5n
KCh5eXZzcFsoMykgLSAoNCldLmludGVybS50eXBlKS50eXBlKSk7Ci0gICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1O
b2RlKSA9IDA7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNzU6Ci0KLSAgICB7Ci0gICAg
ICAgIC8vCi0gICAgICAgIC8vIE11bHRpcGxlIGRlY2xhcmF0aW9ucyBvZiB0aGUgc2FtZSBmdW5j
dGlvbiBhcmUgYWxsb3dlZC4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGRl
ZmluaXRpb24sIHRoZSBkZWZpbml0aW9uIHByb2R1Y3Rpb24gY29kZSB3aWxsIGNoZWNrIGZvciBy
ZWRlZmluaXRpb25zCi0gICAgICAgIC8vICh3ZSBkb24ndCBrbm93IGF0IHRoaXMgcG9pbnQgaWYg
aXQncyBhIGRlZmluaXRpb24gb3Igbm90KS4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gUmVkZWNs
YXJhdGlvbnMgYXJlIGFsbG93ZWQuICBCdXQsIHJldHVybiB0eXBlcyBhbmQgcGFyYW1ldGVyIHF1
YWxpZmllcnMgbXVzdCBtYXRjaC4KLSAgICAgICAgLy8KLSAgICAgICAgVEZ1bmN0aW9uKiBwcmV2
RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9sVGFibGUuZmluZCgo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRNYW5nbGVkTmFtZSgpKSk7Ci0g
ICAgICAgIGlmIChwcmV2RGVjKSB7Ci0gICAgICAgICAgICBpZiAocHJldkRlYy0+Z2V0UmV0dXJu
VHlwZSgpICE9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFJldHVyblR5
cGUoKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMild
KSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSByZXR1cm4gdHlwZSIs
ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFJldHVyblR5cGUoKS5nZXRC
YXNpY1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZXZEZWMtPmdl
dFBhcmFtQ291bnQoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdldFBh
cmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpICE9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5m
dW5jdGlvbiktPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgIm92ZXJsb2FkZWQg
ZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSBwYXJhbWV0ZXIgcXVhbGlmaWVycyIsICh5eXZz
cFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxp
ZmllclN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8v
Ci0gICAgICAgIC8vIENoZWNrIGZvciBwcmV2aW91c2x5IGRlY2xhcmVkIHZhcmlhYmxlcyB1c2lu
ZyB0aGUgc2FtZSBuYW1lLgotICAgICAgICAvLwotICAgICAgICBUU3ltYm9sICpwcmV2U3ltID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuZmluZCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rp
b24pLT5nZXROYW1lKCkpOwotICAgICAgICBpZiAocHJldlN5bSkKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKCFwcmV2U3ltLT5pc0Z1bmN0aW9uKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgyKV0pLCAicmVkZWZpbml0aW9u
IiwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0TmFtZSgpLmNfc3RyKCks
ICJmdW5jdGlvbiIpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAg
IC8vIEluc2VydCB0aGUgdW5tYW5nbGVkIG5hbWUgdG8gZGV0ZWN0IHBvdGVudGlhbCBmdXR1cmUg
cmVkZWZpbml0aW9uIGFzIGEgdmFyaWFibGUuCi0gICAgICAgICAgICBjb250ZXh0LT5zeW1ib2xU
YWJsZS5nZXRPdXRlckxldmVsKCktPmluc2VydCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVu
Y3Rpb24pLT5nZXROYW1lKCksICooeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pKTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vCi0gICAgICAgIC8vIElmIHRoaXMgaXMgYSByZWRlY2xh
cmF0aW9uLCBpdCBjb3VsZCBhbHNvIGJlIGEgZGVmaW5pdGlvbiwKLSAgICAgICAgLy8gaW4gd2hp
Y2ggY2FzZSwgd2Ugd2FudCB0byB1c2UgdGhlIHZhcmlhYmxlIG5hbWVzIGZyb20gdGhpcyBvbmUs
IGFuZCBub3QgdGhlIG9uZSB0aGF0J3MKLSAgICAgICAgLy8gYmVpbmcgcmVkZWNsYXJlZC4gIFNv
LCBwYXNzIGJhY2sgdXAgdGhpcyBkZWNsYXJhdGlvbiwgbm90IHRoZSBvbmUgaW4gdGhlIHN5bWJv
bCB0YWJsZS4KLSAgICAgICAgLy8KLSAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pOwotCi0gICAgICAgIC8vIFdlJ3JlIGF0
IHRoZSBpbm5lciBzY29wZSBsZXZlbCBvZiB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudHMgYW5kIGJv
ZHkgc3RhdGVtZW50LgotICAgICAgICAvLyBBZGQgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZSB0byB0
aGUgc3Vycm91bmRpbmcgc2NvcGUgaW5zdGVhZC4KLSAgICAgICAgY29udGV4dC0+c3ltYm9sVGFi
bGUuZ2V0T3V0ZXJMZXZlbCgpLT5pbnNlcnQoKih5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uKTsKLSAg
ICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA3NjoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmlu
dGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24pOwotICAg
IH0KLSAgICBicmVhazsKLQotICBjYXNlIDc3OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50
ZXJtLmZ1bmN0aW9uKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5mdW5jdGlvbik7Ci0gICAg
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNzg6Ci0KLSAgICB7Ci0gICAgICAgIC8vIEFkZCB0aGUg
cGFyYW1ldGVyCi0gICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLmZ1bmN0aW9uKTsKLSAgICAgICAgaWYgKCh5eXZzcFsoMikgLSAoMildLmlu
dGVybSkucGFyYW0udHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkKLSAgICAgICAgICAg
ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmFkZFBhcmFtZXRlcigoeXl2c3Bb
KDIpIC0gKDIpXS5pbnRlcm0pLnBhcmFtKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZGVs
ZXRlICh5eXZzcFsoMikgLSAoMildLmludGVybSkucGFyYW0udHlwZTsKLSAgICB9Ci0gICAgYnJl
YWs7Ci0KLSAgY2FzZSA3OToKLQotICAgIHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gT25seSBm
aXJzdCBwYXJhbWV0ZXIgb2Ygb25lLXBhcmFtZXRlciBmdW5jdGlvbnMgY2FuIGJlIHZvaWQKLSAg
ICAgICAgLy8gVGhlIGNoZWNrIGZvciBuYW1lZCBwYXJhbWV0ZXJzIG5vdCBiZWluZyB2b2lkIGlz
IGRvbmUgaW4gcGFyYW1ldGVyX2RlY2xhcmF0b3IKLSAgICAgICAgLy8KLSAgICAgICAgaWYgKCh5
eXZzcFsoMykgLSAoMyldLmludGVybSkucGFyYW0udHlwZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0
Vm9pZCkgewotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFRoaXMgcGFyYW1ldGVyID4g
Zmlyc3QgaXMgdm9pZAotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eWxzcFsoMikgLSAoMyldKSwgImNhbm5vdCBiZSBhbiBhcmd1bWVudCB0eXBlIGV4Y2VwdCBm
b3IgJyh2b2lkKSciLCAidm9pZCIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICAgICAgZGVsZXRlICh5eXZzcFsoMykgLSAoMyldLmludGVybSkucGFyYW0udHlwZTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyCi0gICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5mdW5jdGlvbik7Ci0gICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uZnVuY3Rp
b24pLT5hZGRQYXJhbWV0ZXIoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKS5wYXJhbSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA4MDoKLQotICAgIHsKLSAgICAgICAg
aWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZpZXIgIT0gRXZxR2xvYmFs
ICYmICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZpZXIgIT0gRXZxVGVtcG9y
YXJ5KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICJu
byBxdWFsaWZpZXJzIGFsbG93ZWQgZm9yIGZ1bmN0aW9uIHJldHVybiIsIGdldFF1YWxpZmllclN0
cmluZygoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSk7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gbWFrZSBzdXJl
IGEgc2FtcGxlciBpcyBub3QgaW52b2x2ZWQgYXMgd2VsbC4uLgotICAgICAgICBpZiAoY29udGV4
dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDMpXSksICh5eXZzcFso
MSkgLSAoMyldLmludGVybS50eXBlKSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0KLSAgICAgICAgLy8gQWRkIHRoZSBmdW5jdGlvbiBhcyBhIHByb3RvdHlwZSBhZnRlciBwYXJz
aW5nIGl0ICh3ZSBkbyBub3Qgc3VwcG9ydCByZWN1cnNpb24pCi0gICAgICAgIFRGdW5jdGlvbiAq
ZnVuY3Rpb247Ci0gICAgICAgIFRUeXBlIHR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5
cGUpKTsKLSAgICAgICAgZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCh5eXZzcFsoMikgLSAoMyld
LmxleCkuc3RyaW5nLCB0eXBlKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSBm
dW5jdGlvbjsKLSAgICAgICAgCi0gICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsK
LSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA4MToKLQotICAgIHsKLSAgICAgICAgaWYgKCh5
eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidFZvaWQpIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgImlsbGVnYWwgdXNlIG9mIHR5
cGUgJ3ZvaWQnIiwgKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjb250
ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgyKV0pLCAqKHl5dnNwWygyKSAt
ICgyKV0ubGV4KS5zdHJpbmcpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyh5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLCBu
ZXcgVFR5cGUoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpKX07Ci0gICAgICAgICh5eXZh
bC5pbnRlcm0pLnBhcmFtID0gcGFyYW07Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgODI6
Ci0KLSAgICB7Ci0gICAgICAgIC8vIENoZWNrIHRoYXQgd2UgY2FuIG1ha2UgYW4gYXJyYXkgb3V0
IG9mIHRoaXMgdHlwZQotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygo
eXlsc3BbKDMpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSkpCi0gICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPnJlc2Vy
dmVkRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDUpXSksICooeXl2c3BbKDIpIC0gKDUpXS5sZXgp
LnN0cmluZykpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaW50
IHNpemU7Ci0gICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eWxzcFso
MykgLSAoNSldKSwgKHl5dnNwWyg0KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNp
emUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAoeXl2c3BbKDEp
IC0gKDUpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7Ci0KLSAgICAgICAgVFR5
cGUqIHR5cGUgPSBuZXcgVFR5cGUoKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKTsKLSAg
ICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcs
IHR5cGUgfTsKLSAgICAgICAgKHl5dmFsLmludGVybSkucGFyYW0gPSBwYXJhbTsKLSAgICB9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSA4MzoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybSkg
PSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pOwotICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1F
cnJvckNoZWNrKCh5eWxzcFsoMykgLSAoMyldKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5
cGUpLnF1YWxpZmllciwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZh
bC5pbnRlcm0pLnBhcmFtLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDg0OgotCi0gICAgewotICAgICAgICAoeXl2YWwu
aW50ZXJtKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybSk7Ci0gICAgICAgIGlmIChjb250ZXh0
LT5wYXJhbWV0ZXJTYW1wbGVyRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksICh5eXZzcFso
MSkgLSAoMildLmludGVybS5xdWFsaWZpZXIpLCAqKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKS5w
YXJhbS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgaWYg
KGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksIEV2cVRlbXBvcmFy
eSwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRlcm0pLnBh
cmFtLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgIH0KLSAgICBi
cmVhazsKLQotICBjYXNlIDg1OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5
eXZzcFsoMykgLSAoMyldLmludGVybSk7Ci0gICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9y
Q2hlY2soKHl5bHNwWygzKSAtICgzKV0pLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSku
cXVhbGlmaWVyLCAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0ucXVhbGlmaWVyKSwgKHl5dmFsLmlu
dGVybSkucGFyYW0udHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgODY6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRl
cm0pID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKTsKLSAgICAgICAgaWYgKGNvbnRleHQtPnBh
cmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLnF1YWxpZmllciksICooeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLnBhcmFt
LnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBpZiAoY29u
dGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgRXZxVGVtcG9yYXJ5LCAo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0ucXVhbGlmaWVyKSwgKHl5dmFsLmludGVybSkucGFyYW0u
dHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgfQotICAgIGJyZWFr
OwotCi0gIGNhc2UgODc6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVy
KSA9IEV2cUluOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDg4OgotCi0gICAgewotICAg
ICAgICAoeXl2YWwuaW50ZXJtLnF1YWxpZmllcikgPSBFdnFJbjsKLSAgICB9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSA4OToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5xdWFsaWZpZXIp
ID0gRXZxT3V0OwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDkwOgotCi0gICAgewotICAg
ICAgICAoeXl2YWwuaW50ZXJtLnF1YWxpZmllcikgPSBFdnFJbk91dDsKLSAgICB9Ci0gICAgYnJl
YWs7Ci0KLSAgY2FzZSA5MToKLQotICAgIHsKLSAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsg
MCwgbmV3IFRUeXBlKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSkgfTsKLSAgICAgICAg
KHl5dmFsLmludGVybSkucGFyYW0gPSBwYXJhbTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSA5MjoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0pOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDkzOgotCi0gICAgewotICAg
ICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS50eXBlLnR5cGUgPT0gRWJ0SW52YXJp
YW50ICYmICEoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN5bWJvbCkKLSAgICAgICAgewotICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygzKSAtICgzKV0pLCAidW5kZWNsYXJlZCBpZGVu
dGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICh5eXZzcFsoMykgLSAoMyldLmxleCkuc3Ry
aW5nLT5jX3N0cigpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
fQotCi0gICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0pLnR5cGUpLCAoeXlsc3BbKDMpIC0gKDMpXSkpOwotICAgICAg
ICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
Z3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmludGVybU5vZGUsIHN5bWJv
bCwgKHl5bHNwWygzKSAtICgzKV0pKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjb250ZXh0LT5z
dHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoMyldKSwgKHl5dmFsLmludGVy
bSkudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYg
KGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5bHNwWygzKSAtICgzKV0pLCAqKHl5
dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5cGUsIGZhbHNlKSkK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBUVmFyaWFibGUqIHZh
cmlhYmxlID0gMDsKLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRFcnJvckNoZWNrKCh5eWxz
cFsoMykgLSAoMyldKSwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2YWwuaW50
ZXJtKS50eXBlLCB2YXJpYWJsZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgICAgIGlmIChzeW1ib2wgJiYgdmFyaWFibGUpCi0gICAgICAgICAgICBzeW1ib2wtPnNldElk
KHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA5
NDoKLQotICAgIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hl
Y2soKHl5bHNwWygzKSAtICg1KV0pLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUpKQot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5u
b25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwgKih5eXZzcFsoMykgLSAo
NSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUsIHRydWUpKQot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgICh5eXZhbC5pbnRlcm0p
ID0gKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+YXJy
YXlUeXBlRXJyb3JDaGVjaygoeXlsc3BbKDQpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmlu
dGVybSkudHlwZSkgfHwgY29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFso
NCkgLSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlKSkKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAoeXl2c3Bb
KDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUuc2V0QXJyYXkodHJ1ZSk7Ci0gICAgICAgICAgICBUVmFy
aWFibGUqIHZhcmlhYmxlOwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVj
aygoeXlsc3BbKDQpIC0gKDUpXSksICooeXl2c3BbKDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5
dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlLCB2YXJpYWJsZSkpCi0gICAgICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNh
c2UgOTU6Ci0KLSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJv
ckNoZWNrKCh5eWxzcFsoMykgLSAoNildKSwgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50eXBl
KSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoY29udGV4
dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDYpXSksICooeXl2c3BbKDMp
IC0gKDYpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50eXBlLCB0cnVl
KSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICAoeXl2YWwuaW50
ZXJtKSA9ICh5eXZzcFsoMSkgLSAoNildLmludGVybSk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQt
PmFycmF5VHlwZUVycm9yQ2hlY2soKHl5bHNwWyg0KSAtICg2KV0pLCAoeXl2c3BbKDEpIC0gKDYp
XS5pbnRlcm0pLnR5cGUpIHx8IGNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjaygoeXls
c3BbKDQpIC0gKDYpXSksICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSkpCi0gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaW50
IHNpemU7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygoeXls
c3BbKDQpIC0gKDYpXSksICh5eXZzcFsoNSkgLSAoNildLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCBzaXplKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAg
ICAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7Ci0g
ICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAgICAgIGlmIChjb250
ZXh0LT5hcnJheUVycm9yQ2hlY2soKHl5bHNwWyg0KSAtICg2KV0pLCAqKHl5dnNwWygzKSAtICg2
KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSwgdmFyaWFibGUp
KQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIFRUeXBl
IHR5cGUgPSBUVHlwZSgoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUpOwotICAgICAgICAg
ICAgdHlwZS5zZXRBcnJheVNpemUoc2l6ZSk7Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5p
bnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2
c3BbKDEpIC0gKDYpXS5pbnRlcm0pLmludGVybU5vZGUsIGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRTeW1ib2wodmFyaWFibGUgPyB2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSA6IDAsICooeXl2c3Bb
KDMpIC0gKDYpXS5sZXgpLnN0cmluZywgdHlwZSwgKHl5bHNwWygzKSAtICg2KV0pKSwgKHl5bHNw
WygzKSAtICg2KV0pKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDk2
OgotCi0gICAgewotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVj
aygoeXlsc3BbKDMpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSkpCi0g
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgKHl5dmFsLmludGVybSkg
PSAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pOwotCi0gICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRl
cm1Ob2RlOwotICAgICAgICBpZiAoIWNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigoeXlsc3Bb
KDMpIC0gKDUpXSksICooeXl2c3BbKDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAt
ICg1KV0uaW50ZXJtKS50eXBlLCAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgaW50ZXJtTm9kZSkpIHsKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBidWls
ZCB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCi0gICAgICAgICAgICAvLwotICAgICAg
ICAgICAgaWYgKGludGVybU5vZGUpCi0gICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3Jl
Z2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAo
NSldLmludGVybSkuaW50ZXJtTm9kZSwgaW50ZXJtTm9kZSwgKHl5bHNwWyg0KSAtICg1KV0pKTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1B
Z2dyZWdhdGUgPSAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IDA7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA5NzoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVy
bSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsKLSAgICAgICAgKHl5dmFs
LmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dy
ZWdhdGUoY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAiIiwgVFR5cGUoKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLnR5cGUpKSwgKHl5bHNwWygxKSAtICgxKV0pKSwgKHl5bHNwWygx
KSAtICgxKV0pKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA5ODoKLQotICAgIHsKLSAg
ICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5
bWJvbCgwLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcsIFRUeXBlKCh5eXZzcFsoMSkg
LSAoMildLmludGVybS50eXBlKSksICh5eWxzcFsoMikgLSAoMildKSk7Ci0gICAgICAgICh5eXZh
bC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdn
cmVnYXRlKHN5bWJvbCwgKHl5bHNwWygyKSAtICgyKV0pKTsKLSAgICAgICAgCi0gICAgICAgIGlm
IChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwg
KHl5dmFsLmludGVybSkudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0K
LSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5bHNwWygyKSAt
ICgyKV0pLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5
cGUsIGZhbHNlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS50eXBlKTsKLQotICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAg
aWYgKGNvbnRleHQtPm5vbkluaXRFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgKih5eXZz
cFsoMikgLSAoMildLmxleCkuc3RyaW5nLCAoeXl2YWwuaW50ZXJtKS50eXBlLCB2YXJpYWJsZSkp
Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZSAm
JiBzeW1ib2wpCi0gICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJ
ZCgpKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA5OToKLQotICAgIHsKLSAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICg0KV0pLCAidW5zaXplZCBhcnJheSBkZWNsYXJh
dGlvbnMgbm90IHN1cHBvcnRlZCIsICh5eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nLT5jX3N0
cigpKTsKLSAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIFRJbnRlcm1TeW1i
b2wqIHN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFso
MikgLSAoNCldLmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlw
ZSkpLCAoeXlsc3BbKDIpIC0gKDQpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1B
Z2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsICh5
eWxzcFsoMikgLSAoNCldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3Bb
KDEpIC0gKDQpXS5pbnRlcm0udHlwZSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTAw
OgotCi0gICAgewotICAgICAgICBUVHlwZSB0eXBlID0gVFR5cGUoKHl5dnNwWygxKSAtICg1KV0u
aW50ZXJtLnR5cGUpKTsKLSAgICAgICAgaW50IHNpemU7Ci0gICAgICAgIGlmIChjb250ZXh0LT5h
cnJheVNpemVFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNSldKSwgKHl5dnNwWyg0KSAtICg1KV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNpemUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotICAgICAgICB0eXBlLnNldEFycmF5U2l6ZShzaXplKTsKLSAgICAgICAgVEludGVy
bVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5
dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsIHR5cGUsICh5eWxzcFsoMikgLSAoNSldKSk7Ci0g
ICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgKHl5bHNwWygyKSAtICg1KV0pKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFso
MikgLSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKSkKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0
RXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDUpXSksICooeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0
cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpLCB0cnVlKSkKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICAoeXl2YWwuaW50ZXJtKS50eXBlID0gKHl5
dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5hcnJh
eVR5cGVFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0uaW50
ZXJtLnR5cGUpKSB8fCBjb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygz
KSAtICg1KV0pLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSkpKQotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGludCBzaXpl
OwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soKHl5bHNwWygz
KSAtICg1KV0pLCAoeXl2c3BbKDQpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgc2l6
ZSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgICAgICAo
eXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7Ci0gICAg
ICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAgICAgIGlmIChjb250ZXh0
LT5hcnJheUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0pLCAqKHl5dnNwWygyKSAtICg1KV0u
bGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSwgdmFyaWFibGUpKQot
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIGlmICh2YXJp
YWJsZSAmJiBzeW1ib2wpCi0gICAgICAgICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+
Z2V0VW5pcXVlSWQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAx
MDE6Ci0KLSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNo
ZWNrKCh5eWxzcFsoMikgLSAoNCldKSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSkK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICAoeXl2YWwuaW50ZXJt
KS50eXBlID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpOwotCi0gICAgICAgIFRJbnRl
cm1Ob2RlKiBpbnRlcm1Ob2RlOwotICAgICAgICBpZiAoIWNvbnRleHQtPmV4ZWN1dGVJbml0aWFs
aXplcigoeXlsc3BbKDIpIC0gKDQpXSksICooeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZywg
KHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpLCAoeXl2c3BbKDQpIC0gKDQpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgaW50ZXJtTm9kZSkpIHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8g
QnVpbGQgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCi0gICAgICAgIC8vCi0gICAgICAgICAg
ICBpZihpbnRlcm1Ob2RlKQotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFn
Z3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKGludGVybU5vZGUs
ICh5eWxzcFsoMykgLSAoNCldKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
KHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gMDsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0p
LmludGVybUFnZ3JlZ2F0ZSA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSAxMDI6Ci0KLSAgICB7Ci0gICAgICAgIFZFUlRFWF9PTkxZKCJpbnZhcmlhbnQgZGVjbGFy
YXRpb24iLCAoeXlsc3BbKDEpIC0gKDIpXSkpOwotICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFs
RXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDIpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSwgImludmFyaWFudCB2YXJ5aW5nIikpCi0gICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUuc2V0QmFzaWMoRWJ0SW52YXJp
YW50LCBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCAoeXlsc3BbKDIpIC0gKDIpXSkpOwotICAgICAg
ICBpZiAoISh5eXZzcFsoMikgLSAoMildLmxleCkuc3ltYm9sKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICJ1bmRlY2xhcmVkIGlkZW50
aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJp
bmctPmNfc3RyKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAwOwotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgVEludGVybVN5bWJv
bCAqc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygy
KSAtICgyKV0ubGV4KS5zdHJpbmcsIFRUeXBlKCh5eXZhbC5pbnRlcm0pLnR5cGUpLCAoeXlsc3Bb
KDIpIC0gKDIpXSkpOwotICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRl
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCAoeXlsc3BbKDIp
IC0gKDIpXSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTAzOgot
Ci0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLnR5cGUpOwotCi0gICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlw
ZSkuYXJyYXkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSld
KSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKLSAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50
eXBlKS5zZXRBcnJheShmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSAxMDQ6Ci0KLSAgICB7Ci0gICAgICAgIGlmICgoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0u
dHlwZSkuYXJyYXkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAo
MildKSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICh5eXZzcFsoMikgLSAoMildLmludGVy
bS50eXBlKS5zZXRBcnJheShmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUgJiYKLSAg
ICAgICAgICAgICgoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRCb29s
IHx8ICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidEludCkpIHsKLSAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgImNhbm5vdCBiZSBi
b29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0u
dHlwZSkucXVhbGlmaWVyKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlm
aWVyID09IEV2cVZhcnlpbmdJbiB8fCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVh
bGlmaWVyID09IEV2cVZhcnlpbmdPdXQpICYmCi0gICAgICAgICAgICAoKHl5dnNwWygyKSAtICgy
KV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0Qm9vbCB8fCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRl
cm0udHlwZSkudHlwZSA9PSBFYnRJbnQpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXlsc3BbKDIpIC0gKDIpXSksICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJT
dHJpbmcoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcikpOwotICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSk7Ci0gICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkucXVhbGlmaWVyID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUp
LnF1YWxpZmllcjsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMDU6Ci0KLSAgICB7Ci0g
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxQ29uc3QsICh5
eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTA2OgotCi0g
ICAgewotICAgICAgICBWRVJURVhfT05MWSgiYXR0cmlidXRlIiwgKHl5bHNwWygxKSAtICgxKV0p
KTsKLSAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgx
KV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJhdHRyaWJ1dGUiKSkK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFBdHRyaWJ1dGUsICh5eWxzcFsoMSkgLSAoMSldKSk7
Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTA3OgotCi0gICAgewotICAgICAgICBpZiAo
Y29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDEpXSksIGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgInZhcnlpbmciKSkKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfVkVS
VEVYX1NIQURFUikKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0
Vm9pZCwgRXZxVmFyeWluZ091dCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFWYXJ5
aW5nSW4sICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2Ug
MTA4OgotCi0gICAgewotICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXls
c3BbKDEpIC0gKDIpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImlu
dmFyaWFudCB2YXJ5aW5nIikpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
ICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCi0gICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFyaWFudFZh
cnlpbmdPdXQsICh5eWxzcFsoMSkgLSAoMildKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxSW52YXJpYW50VmFyeWlu
Z0luLCAoeXlsc3BbKDEpIC0gKDIpXSkpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDEw
OToKLQotICAgIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5bHNw
WygxKSAtICgxKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ1bmlm
b3JtIikpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVW5pZm9ybSwgKHl5bHNwWygxKSAtICgx
KV0pKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMTA6Ci0KLSAgICB7Ci0gICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7Ci0K
LSAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0udHlwZSkucHJlY2lzaW9uID09IEVicFVuZGVmaW5l
ZCkgewotICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5wcmVjaXNpb24gPSBjb250ZXh0
LT5zeW1ib2xUYWJsZS5nZXREZWZhdWx0UHJlY2lzaW9uKCh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS50eXBlKS50eXBlKTsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5wcmVjaXNpb25FcnJvckNo
ZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgKHl5dmFsLmludGVybS50eXBlKS5wcmVjaXNpb24sICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS50eXBlKSkgewotICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBi
cmVhazsKLQotICBjYXNlIDExMToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKTsKLSAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5wcmVjaXNpb24gPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0ucHJlY2lzaW9uKTsK
LSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMTI6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZh
bC5pbnRlcm0ucHJlY2lzaW9uKSA9IEVicEhpZ2g7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNh
c2UgMTEzOgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLnByZWNpc2lvbikgPSBFYnBN
ZWRpdW07Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTE0OgotCi0gICAgewotICAgICAg
ICAoeXl2YWwuaW50ZXJtLnByZWNpc2lvbikgPSBFYnBMb3c7Ci0gICAgfQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgMTE1OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNl
IDExNjoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMSkg
LSAoNCldLmludGVybS50eXBlKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJy
b3JDaGVjaygoeXlsc3BbKDIpIC0gKDQpXSksICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBl
KSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgaW50IHNpemU7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJy
b3JDaGVjaygoeXlsc3BbKDIpIC0gKDQpXSksICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCBzaXplKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFycmF5KHRydWUsIHNpemUpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTE3OgotCi0gICAgewotICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICB9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSAxMTg6Ci0KLSAgICB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9h
dCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSAxMTk6Ci0KLSAgICB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5eWxzcFsoMSkg
LSAoMSldKSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTIwOgotCi0gICAgewotICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICB9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSAxMjE6Ci0KLSAgICB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9h
dCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRBZ2dyZWdhdGUoMik7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTIyOgotCi0g
ICAgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7
Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOwotICAgIH0KLSAg
ICBicmVhazsKLQotICBjYXNlIDEyMzoKLQotICAgIHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0
LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnNldEFnZ3JlZ2F0ZSg0KTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMjQ6Ci0KLSAg
ICB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwot
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgyKTsKLSAgICB9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSAxMjU6Ci0KLSAgICB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBx
dWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEFnZ3JlZ2F0ZSgzKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMjY6Ci0KLSAgICB7
Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKLSAgICB9Ci0gICAgYnJl
YWs7Ci0KLSAgY2FzZSAxMjc6Ci0KLSAgICB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJbnQsIHF1YWws
ICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdn
cmVnYXRlKDIpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDEyODoKLQotICAgIHsKLSAg
ICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEJhc2ljKEVidEludCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMyk7Ci0gICAgfQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgMTI5OgotCi0gICAgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7
Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXls
c3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0
ZSg0KTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMzA6Ci0KLSAgICB7Ci0gICAgICAg
IFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/
IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5z
ZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMiwgdHJ1ZSk7Ci0gICAgfQotICAgIGJyZWFr
OwotCi0gIGNhc2UgMTMxOgotCi0gICAgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jh
cnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWws
ICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdn
cmVnYXRlKDMsIHRydWUpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDEzMjoKLQotICAg
IHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9i
YWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwot
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0LCB0cnVlKTsKLSAgICB9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMzM6Ci0KLSAgICB7Ci0gICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRT
YW1wbGVyMkQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgfQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgMTM0OgotCi0gICAgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7
Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U2FtcGxlckN1YmUsIHF1
YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTM1
OgotCi0gICAgewotICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRXh0ZW5zaW9uKCJHTF9P
RVNfRUdMX2ltYWdlX2V4dGVybmFsIikpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eWxzcFsoMSkgLSAoMSldKSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlckV4dGVybmFsT0VT
Iik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEJhc2ljKEVidFNhbXBsZXJFeHRlcm5hbE9FUywgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsK
LSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMzY6Ci0KLSAgICB7Ci0gICAgICAgIGlmICgh
Y29udGV4dC0+c3VwcG9ydHNFeHRlbnNpb24oIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIpKSB7
Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSksICJ1bnN1cHBv
cnRlZCB0eXBlIiwgInNhbXBsZXIyRFJlY3QiKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1i
b2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U2FtcGxlcjJEUmVjdCwgcXVhbCwg
KHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMzc6Ci0K
LSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0udHlwZSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucXVhbGlmaWVyID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDEzODoKLQotICAgIHsKLSAgICAgICAg
Ly8KLSAgICAgICAgLy8gVGhpcyBpcyBmb3IgdXNlciBkZWZpbmVkIHR5cGUgbmFtZXMuICBUaGUg
bGV4aWNhbCBwaGFzZSBsb29rZWQgdXAgdGhlCi0gICAgICAgIC8vIHR5cGUuCi0gICAgICAgIC8v
Ci0gICAgICAgIFRUeXBlJiBzdHJ1Y3R1cmUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPigoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLnN5bWJvbCktPmdldFR5cGUoKTsKLSAgICAgICAgVFF1YWxpZmll
ciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFs
IDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVi
dFN0cnVjdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS51c2VyRGVmID0gJnN0cnVjdHVyZTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSAxMzk6Ci0KLSAgICB7IGlmIChjb250ZXh0LT5lbnRlclN0cnVjdERlY2xhcmF0aW9uKCh5eWxz
cFsoMikgLSAoMyldKSwgKih5eXZzcFsoMikgLSAoMyldLmxleCkuc3RyaW5nKSkgY29udGV4dC0+
cmVjb3ZlcigpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNDA6Ci0KLSAgICB7Ci0gICAgICAg
IGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg2KV0pLCAqKHl5
dnNwWygyKSAtICg2KV0ubGV4KS5zdHJpbmcpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotCi0gICAgICAgIFRUeXBlKiBzdHJ1Y3R1cmUgPSBuZXcgVFR5cGUobmV3IFRTdHJ1Y3R1
cmUoKHl5dnNwWygyKSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoNSkgLSAoNildLmludGVy
bS5maWVsZExpc3QpKSk7Ci0gICAgICAgIFRWYXJpYWJsZSogdXNlclR5cGVEZWYgPSBuZXcgVFZh
cmlhYmxlKCh5eXZzcFsoMikgLSAoNildLmxleCkuc3RyaW5nLCAqc3RydWN0dXJlLCB0cnVlKTsK
LSAgICAgICAgaWYgKCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp1c2VyVHlwZURlZikp
IHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoNildKSwgInJlZGVm
aW5pdGlvbiIsICh5eXZzcFsoMikgLSAoNildLmxleCkuc3RyaW5nLT5jX3N0cigpLCAic3RydWN0
Iik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgKHl5
bHNwWygxKSAtICg2KV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS51c2VyRGVmID0g
c3RydWN0dXJlOwotICAgICAgICBjb250ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsKLSAg
ICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNDE6Ci0KLSAgICB7IGlmIChjb250ZXh0LT5lbnRl
clN0cnVjdERlY2xhcmF0aW9uKCh5eWxzcFsoMikgLSAoMildKSwgKih5eXZzcFsoMikgLSAoMild
LmxleCkuc3RyaW5nKSkgY29udGV4dC0+cmVjb3ZlcigpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSAxNDI6Ci0KLSAgICB7Ci0gICAgICAgIFRUeXBlKiBzdHJ1Y3R1cmUgPSBuZXcgVFR5cGUobmV3
IFRTdHJ1Y3R1cmUoTmV3UG9vbFRTdHJpbmcoIiIpLCAoeXl2c3BbKDQpIC0gKDUpXS5pbnRlcm0u
ZmllbGRMaXN0KSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFN0
cnVjdCwgRXZxVGVtcG9yYXJ5LCAoeXlsc3BbKDEpIC0gKDUpXSkpOwotICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7Ci0gICAgICAgIGNvbnRleHQtPmV4aXRT
dHJ1Y3REZWNsYXJhdGlvbigpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE0MzoKLQot
ICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5maWVsZExpc3QpID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmZpZWxkTGlzdCk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTQ0Ogot
Ci0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSAoeXl2c3BbKDEpIC0g
KDIpXS5pbnRlcm0uZmllbGRMaXN0KTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAo
eXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uZmllbGRMaXN0KS0+c2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgICAgIFRGaWVsZCogZmllbGQgPSAoKih5eXZzcFsoMikgLSAoMildLmludGVybS5maWVsZExp
c3QpKVtpXTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgKHl5dmFsLmludGVy
bS5maWVsZExpc3QpLT5zaXplKCk7ICsraikgewotICAgICAgICAgICAgICAgIGlmICgoKih5eXZh
bC5pbnRlcm0uZmllbGRMaXN0KSlbal0tPm5hbWUoKSA9PSBmaWVsZC0+bmFtZSgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgImR1cGxp
Y2F0ZSBmaWVsZCBuYW1lIGluIHN0cnVjdHVyZToiLCAic3RydWN0IiwgZmllbGQtPm5hbWUoKS5j
X3N0cigpKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uZmll
bGRMaXN0KS0+cHVzaF9iYWNrKGZpZWxkKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsK
LQotICBjYXNlIDE0NToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5maWVsZExpc3Qp
ID0gKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmZpZWxkTGlzdCk7Ci0KLSAgICAgICAgaWYgKGNv
bnRleHQtPnZvaWRFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMyldKSwgKCooeXl2c3BbKDIpIC0g
KDMpXS5pbnRlcm0uZmllbGRMaXN0KSlbMF0tPm5hbWUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLnR5cGUpKSkgewotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgKHl5dmFsLmludGVybS5maWVs
ZExpc3QpLT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIENh
cmVmdWwgbm90IHRvIHJlcGxhY2UgYWxyZWFkeSBrbm93biBhc3BlY3RzIG9mIHR5cGUsIGxpa2Ug
YXJyYXktbmVzcwotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIFRUeXBlKiB0eXBlID0gKCoo
eXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkpW2ldLT50eXBlKCk7Ci0gICAgICAgICAgICB0eXBlLT5z
ZXRCYXNpY1R5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnR5cGUpOwotICAgICAg
ICAgICAgdHlwZS0+c2V0Tm9taW5hbFNpemUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUp
LnNpemUpOwotICAgICAgICAgICAgdHlwZS0+c2V0TWF0cml4KCh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS50eXBlKS5tYXRyaXgpOwotICAgICAgICAgICAgdHlwZS0+c2V0UHJlY2lzaW9uKCh5eXZz
cFsoMSkgLSAoMyldLmludGVybS50eXBlKS5wcmVjaXNpb24pOwotCi0gICAgICAgICAgICAvLyBk
b24ndCBhbGxvdyBhcnJheXMgb2YgYXJyYXlzCi0gICAgICAgICAgICBpZiAodHlwZS0+aXNBcnJh
eSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2so
KHl5bHNwWygxKSAtICgzKV0pLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkpKQotICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLmFycmF5KQotICAgICAg
ICAgICAgICAgIHR5cGUtPnNldEFycmF5U2l6ZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlw
ZSkuYXJyYXlTaXplKTsKLSAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
dHlwZSkudXNlckRlZikKLSAgICAgICAgICAgICAgICB0eXBlLT5zZXRTdHJ1Y3QoKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLnR5cGUpLnVzZXJEZWYtPmdldFN0cnVjdCgpKTsKLQotICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPnN0cnVjdE5lc3RpbmdFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMyld
KSwgKigqKHl5dmFsLmludGVybS5maWVsZExpc3QpKVtpXSkpCi0gICAgICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2Ug
MTQ2OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSBOZXdQb29s
VEZpZWxkTGlzdCgpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCktPnB1c2hfYmFj
aygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uZmllbGQpKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSAxNDc6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0KS0+
cHVzaF9iYWNrKCh5eXZzcFsoMykgLSAoMyldLmludGVybS5maWVsZCkpOwotICAgIH0KLSAgICBi
cmVhazsKLQotICBjYXNlIDE0ODoKLQotICAgIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnJlc2Vy
dmVkRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDEpXSksICooeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LnN0cmluZykpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgVFR5
cGUqIHR5cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKLSAgICAgICAgKHl5
dmFsLmludGVybS5maWVsZCkgPSBuZXcgVEZpZWxkKHR5cGUsICh5eXZzcFsoMSkgLSAoMSldLmxl
eCkuc3RyaW5nKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNDk6Ci0KLSAgICB7Ci0g
ICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICg0KV0p
LCAqKHl5dnNwWygxKSAtICg0KV0ubGV4KS5zdHJpbmcpKQotICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotCi0gICAgICAgIFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKEVidFZvaWQsIEVi
cFVuZGVmaW5lZCk7Ci0gICAgICAgIGludCBzaXplID0gMDsKLSAgICAgICAgaWYgKGNvbnRleHQt
PmFycmF5U2l6ZUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg0KV0pLCAoeXl2c3BbKDMpIC0gKDQp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0gICAgICAgIHR5cGUtPnNldEFycmF5U2l6ZShzaXplKTsKLQotICAgICAgICAo
eXl2YWwuaW50ZXJtLmZpZWxkKSA9IG5ldyBURmllbGQodHlwZSwgKHl5dnNwWygxKSAtICg0KV0u
bGV4KS5zdHJpbmcpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE1MDoKLQotICAgIHsg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDE1MToKLQotICAgIHsg
KHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1Ob2RlKTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTUyOgotCi0gICAgeyAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0
ZSk7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDE1MzoKLQotICAgIHsgKHl5dmFsLmludGVybS5p
bnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQotICAg
IGJyZWFrOwotCi0gIGNhc2UgMTU0OgotCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSAxNTU6Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDE1
NjoKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSld
LmludGVybS5pbnRlcm1Ob2RlKTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTU3OgotCi0gICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybU5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNTg6Ci0KLSAgICB7ICh5eXZhbC5p
bnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7
IH0KLSAgICBicmVhazsKLQotICBjYXNlIDE1OToKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRl
cm1BZ2dyZWdhdGUpID0gMDsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTYwOgotCi0gICAgeyBj
b250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDE2MToK
LQotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7IH0KLSAgICBicmVhazsKLQotICBj
YXNlIDE2MjoKLQotICAgIHsKLSAgICAgICAgaWYgKCh5eXZzcFsoMykgLSAoNSldLmludGVybS5p
bnRlcm1BZ2dyZWdhdGUpICE9IDApIHsKLSAgICAgICAgICAgICh5eXZzcFsoMykgLSAoNSldLmlu
dGVybS5pbnRlcm1BZ2dyZWdhdGUpLT5zZXRPcChFT3BTZXF1ZW5jZSk7Ci0gICAgICAgICAgICAo
eXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKS0+c2V0TGluZSgoeXlsb2Mp
KTsKLSAgICAgICAgfQotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgPSAo
eXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKTsKLSAgICB9Ci0gICAgYnJl
YWs7Ci0KLSAgY2FzZSAxNjM6Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KLSAgICBicmVhazsKLQotICBj
YXNlIDE2NDoKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTY1Ogot
Ci0gICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0KLSAgICBicmVhazsKLQotICBj
YXNlIDE2NjoKLQotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7ICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0K
LSAgICBicmVhazsKLQotICBjYXNlIDE2NzoKLQotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUu
cHVzaCgpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNjg6Ci0KLSAgICB7IGNvbnRleHQtPnN5
bWJvbFRhYmxlLnBvcCgpOyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygyKSAt
ICgyKV0uaW50ZXJtLmludGVybU5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNjk6Ci0K
LSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOwotICAgIH0KLSAg
ICBicmVhazsKLQotICBjYXNlIDE3MDoKLQotICAgIHsKLSAgICAgICAgaWYgKCh5eXZzcFsoMikg
LSAoMyldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpKSB7Ci0gICAgICAgICAgICAoeXl2c3BbKDIp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKS0+c2V0T3AoRU9wU2VxdWVuY2UpOwotICAg
ICAgICAgICAgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSktPnNldExp
bmUoKHl5bG9jKSk7Ci0gICAgICAgIH0KLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2Rl
KSA9ICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpOwotICAgIH0KLSAg
ICBicmVhazsKLQotICBjYXNlIDE3MToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1BZ2dyZWdhdGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXlsb2MpKTsKLSAgICB9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSAxNzI6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtQWdncmVnYXRlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZz
cFsoMSkgLSAoMildLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpLCAoeXl2c3BbKDIpIC0gKDIpXS5p
bnRlcm0uaW50ZXJtTm9kZSksICh5eWxvYykpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNl
IDE3MzoKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IDA7IH0KLSAgICBicmVh
azsKLQotICBjYXNlIDE3NDoKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IHN0
YXRpY19jYXN0PFRJbnRlcm1Ob2RlKj4oKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSkpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNzU6Ci0KLSAgICB7Ci0gICAgICAg
IGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDUpXSksICh5eXZzcFso
MykgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKLSAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRTZWxlY3Rpb24oKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eXZzcFsoNSkgLSAoNSldLmludGVybS5ub2RlUGFpciksICh5eWxzcFso
MSkgLSAoNSldKSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTc2OgotCi0gICAgewot
ICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1Ob2RlKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9k
ZTIgPSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgfQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgMTc3OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQ
YWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKLSAgICAg
ICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTIgPSAwOwotICAgIH0KLSAgICBicmVhazsK
LQotICBjYXNlIDE3ODoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAg
ICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+Z2V0TGluZSgpLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgfQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgMTc5OgotCi0gICAgewotICAgICAgICBUSW50ZXJtTm9kZSog
aW50ZXJtTm9kZTsKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hl
Y2soKHl5bHNwWygyKSAtICg0KV0pLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpKQot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBpZiAoY29udGV4dC0+Ym9v
bEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg0KV0pLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0u
dHlwZSkpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlmICgh
Y29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKCh5eWxzcFsoMikgLSAoNCldKSwgKih5eXZzcFso
MikgLSAoNCldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSksICh5
eXZzcFsoNCkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbnRlcm1Ob2RlKSkKLSAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoNCkgLSAo
NCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxODA6
Ci0KLSAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgKytjb250ZXh0LT5sb29wTmVz
dGluZ0xldmVsOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxODE6Ci0KLSAgICB7Ci0gICAgICAg
IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3AoRUxvb3BXaGlsZSwgMCwgKHl5
dnNwWyg0KSAtICg2KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIDAsICh5eXZzcFsoNikgLSAo
NildLmludGVybS5pbnRlcm1Ob2RlKSwgKHl5bHNwWygxKSAtICg2KV0pKTsKLSAgICAgICAgLS1j
b250ZXh0LT5sb29wTmVzdGluZ0xldmVsOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE4
MjoKLQotICAgIHsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyB9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSAxODM6Ci0KLSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVj
aygoeXlsc3BbKDgpIC0gKDgpXSksICh5eXZzcFsoNikgLSAoOCldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3AoRUxv
b3BEb1doaWxlLCAwLCAoeXl2c3BbKDYpIC0gKDgpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
MCwgKHl5dnNwWygzKSAtICg4KV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXlsc3BbKDQpIC0gKDgp
XSkpOwotICAgICAgICAtLWNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7Ci0gICAgfQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgMTg0OgotCi0gICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7
ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTg1
OgotCi0gICAgewotICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKLSAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRMb29w
KEVMb29wRm9yLCAoeXl2c3BbKDQpIC0gKDcpXS5pbnRlcm0uaW50ZXJtTm9kZSksIHJlaW50ZXJw
cmV0X2Nhc3Q8VEludGVybVR5cGVkKj4oKHl5dnNwWyg1KSAtICg3KV0uaW50ZXJtLm5vZGVQYWly
KS5ub2RlMSksIHJlaW50ZXJwcmV0X2Nhc3Q8VEludGVybVR5cGVkKj4oKHl5dnNwWyg1KSAtICg3
KV0uaW50ZXJtLm5vZGVQYWlyKS5ub2RlMiksICh5eXZzcFsoNykgLSAoNyldLmludGVybS5pbnRl
cm1Ob2RlKSwgKHl5bHNwWygxKSAtICg3KV0pKTsKLSAgICAgICAgLS1jb250ZXh0LT5sb29wTmVz
dGluZ0xldmVsOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE4NjoKLQotICAgIHsKLSAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1Ob2RlKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxODc6Ci0KLSAgICB7
Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTg4OgotCi0g
ICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSAxODk6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9IDA7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTkwOgotCi0gICAgewotICAgICAg
ICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2Rl
MiA9IDA7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTkxOgotCi0gICAgewotICAgICAg
ICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2Rl
MiA9ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgIH0KLSAg
ICBicmVhazsKLQotICBjYXNlIDE5MjoKLQotICAgIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPmxv
b3BOZXN0aW5nTGV2ZWwgPD0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNw
WygxKSAtICgyKV0pLCAiY29udGludWUgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIs
ICIiKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJy
YW5jaChFT3BDb250aW51ZSwgKHl5bHNwWygxKSAtICgyKV0pKTsKLSAgICB9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSAxOTM6Ci0KLSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGlu
Z0xldmVsIDw9IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAo
MildKSwgImJyZWFrIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIik7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wQnJl
YWssICh5eWxzcFsoMSkgLSAoMildKSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTk0
OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1cm4sICh5eWxzcFsoMSkgLSAoMildKSk7Ci0g
ICAgICAgIGlmIChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSAh
PSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDIp
XSksICJub24tdm9pZCBmdW5jdGlvbiBtdXN0IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIpOwot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgMTk1OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1cm4sICh5eXZz
cFsoMikgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDEpIC0gKDMpXSkp
OwotICAgICAgICBjb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IHRydWU7Ci0gICAgICAg
IGlmIChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRW
b2lkKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDMpXSksICJ2
b2lkIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iKTsKLSAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfSBlbHNlIGlmICgqKGNvbnRleHQtPmN1
cnJlbnRGdW5jdGlvblR5cGUpICE9ICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5nZXRUeXBlKCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFso
MSkgLSAoMyldKSwgImZ1bmN0aW9uIHJldHVybiBpcyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0
dXJuIik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxOTY6Ci0KLSAgICB7Ci0gICAgICAgIEZSQUdfT05MWSgi
ZGlzY2FyZCIsICh5eWxzcFsoMSkgLSAoMildKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcEtpbGwsICh5eWxz
cFsoMSkgLSAoMildKSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTk3OgotCi0gICAg
ewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybU5vZGUpOwotICAgICAgICBjb250ZXh0LT50cmVlUm9vdCA9ICh5eXZhbC5p
bnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTk4OgotCi0g
ICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUp
LCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eWxvYykpOwotICAgICAg
ICBjb250ZXh0LT50cmVlUm9vdCA9ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgfQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgMTk5OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwotICAg
IH0KLSAgICBicmVhazsKLQotICBjYXNlIDIwMDoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsK
LSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyMDE6Ci0KLSAgICB7Ci0gICAgICAgIFRGdW5j
dGlvbiogZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmZ1bmN0aW9uOwotICAg
ICAgICAKLSAgICAgICAgY29uc3QgVFN5bWJvbCAqYnVpbHRJbiA9IGNvbnRleHQtPnN5bWJvbFRh
YmxlLmZpbmRCdWlsdEluKGZ1bmN0aW9uLT5nZXRNYW5nbGVkTmFtZSgpKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChidWlsdEluKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXlsc3BbKDEpIC0gKDEpXSksICJidWlsdC1pbiBmdW5jdGlvbnMgY2Fubm90IGJlIHJlZGVm
aW5lZCIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSk7Ci0gICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFRGdW5jdGlvbiogcHJl
dkRlYyA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQo
ZnVuY3Rpb24tPmdldE1hbmdsZWROYW1lKCkpKTsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gTm90
ZTogICdwcmV2RGVjJyBjb3VsZCBiZSAnZnVuY3Rpb24nIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRp
bWUgd2UndmUgc2VlbiBmdW5jdGlvbgotICAgICAgICAvLyBhcyBpdCB3b3VsZCBoYXZlIGp1c3Qg
YmVlbiBwdXQgaW4gdGhlIHN5bWJvbCB0YWJsZS4gIE90aGVyd2lzZSwgd2UncmUgbG9va2luZyB1
cAotICAgICAgICAvLyBhbiBlYXJsaWVyIG9jY3VyYW5jZS4KLSAgICAgICAgLy8KLSAgICAgICAg
aWYgKHByZXZEZWMtPmlzRGVmaW5lZCgpKSB7Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAg
Ly8gVGhlbiB0aGlzIGZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keS4KLSAgICAgICAgICAgIC8v
Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSksICJmdW5jdGlv
biBhbHJlYWR5IGhhcyBhIGJvZHkiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgIHByZXZEZWMt
PnNldERlZmluZWQoKTsKLQotICAgICAgICAvLwotICAgICAgICAvLyBSYWlzZSBlcnJvciBtZXNz
YWdlIGlmIG1haW4gZnVuY3Rpb24gdGFrZXMgYW55IHBhcmFtZXRlcnMgb3IgcmV0dXJuIGFueXRo
aW5nIG90aGVyIHRoYW4gdm9pZAotICAgICAgICAvLwotICAgICAgICBpZiAoZnVuY3Rpb24tPmdl
dE5hbWUoKSA9PSAibWFpbiIpIHsKLSAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0UGFyYW1D
b3VudCgpID4gMCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkg
LSAoMSldKSwgImZ1bmN0aW9uIGNhbm5vdCB0YWtlIGFueSBwYXJhbWV0ZXIocykiLCBmdW5jdGlv
bi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0UmV0dXJuVHlw
ZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSksICIiLCBmdW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgp
LmdldEJhc2ljU3RyaW5nKCksICJtYWluIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIp
OwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFJlbWVtYmVyIHRoZSByZXR1cm4gdHlw
ZSBmb3IgbGF0ZXIgY2hlY2tpbmcgZm9yIFJFVFVSTiBzdGF0ZW1lbnRzLgotICAgICAgICAvLwot
ICAgICAgICBjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlID0gJihwcmV2RGVjLT5nZXRSZXR1
cm5UeXBlKCkpOwotICAgICAgICBjb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IGZhbHNl
OwotCi0gICAgICAgIC8vCi0gICAgICAgIC8vIEluc2VydCBwYXJhbWV0ZXJzIGludG8gdGhlIHN5
bWJvbCB0YWJsZS4KLSAgICAgICAgLy8gSWYgdGhlIHBhcmFtZXRlciBoYXMgbm8gbmFtZSwgaXQn
cyBub3QgYW4gZXJyb3IsIGp1c3QgZG9uJ3QgaW5zZXJ0IGl0Ci0gICAgICAgIC8vIChjb3VsZCBi
ZSB1c2VkIGZvciB1bnVzZWQgYXJncykuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIEFsc28sIGFj
Y3VtdWxhdGUgdGhlIGxpc3Qgb2YgcGFyYW1ldGVycyBpbnRvIHRoZSBISUwsIHNvIGxvd2VyIGxl
dmVsIGNvZGUKLSAgICAgICAgLy8ga25vd3Mgd2hlcmUgdG8gZmluZCBwYXJhbWV0ZXJzLgotICAg
ICAgICAvLwotICAgICAgICBUSW50ZXJtQWdncmVnYXRlKiBwYXJhbU5vZGVzID0gbmV3IFRJbnRl
cm1BZ2dyZWdhdGU7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb24tPmdl
dFBhcmFtQ291bnQoKTsgaSsrKSB7Ci0gICAgICAgICAgICBjb25zdCBUUGFyYW1ldGVyJiBwYXJh
bSA9IGZ1bmN0aW9uLT5nZXRQYXJhbShpKTsKLSAgICAgICAgICAgIGlmIChwYXJhbS5uYW1lICE9
IDApIHsKLSAgICAgICAgICAgICAgICBUVmFyaWFibGUgKnZhcmlhYmxlID0gbmV3IFRWYXJpYWJs
ZShwYXJhbS5uYW1lLCAqcGFyYW0udHlwZSk7Ci0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAg
ICAgICAgICAvLyBJbnNlcnQgdGhlIHBhcmFtZXRlcnMgd2l0aCBuYW1lIGluIHRoZSBzeW1ib2wg
dGFibGUuCi0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICBpZiAoISBjb250ZXh0
LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgewotICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSksICJyZWRlZmluaXRpb24iLCB2YXJpYWJs
ZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUg
cGFyYW1ldGVyIHRvIHRoZSBISUwKLSAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAg
IHBhcmFtTm9kZXMgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXJpYWJsZS0+Z2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
cmlhYmxlLT5nZXRUeXBlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHl5bHNwWygxKSAtICgx
KV0pKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHl5
bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
cGFyYW1Ob2RlcyA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKHBhcmFtTm9k
ZXMsIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsICpwYXJhbS50eXBlLCAo
eXlsc3BbKDEpIC0gKDEpXSkpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVy
YXRvcihwYXJhbU5vZGVzLCBFT3BQYXJhbWV0ZXJzLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAg
ICAgICAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IHBhcmFtTm9k
ZXM7Ci0gICAgICAgIGNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPSAwOwotICAgIH0KLSAgICBi
cmVhazsKLQotICBjYXNlIDIwMjoKLQotICAgIHsKLSAgICAgICAgLy8/PyBDaGVjayB0aGF0IGFs
bCBwYXRocyByZXR1cm4gYSB2YWx1ZSBpZiByZXR1cm4gdHlwZSAhPSB2b2lkID8KLSAgICAgICAg
Ly8gICBNYXkgYmUgYmVzdCBkb25lIGFzIHBvc3QgcHJvY2VzcyBwaGFzZSBvbiBpbnRlcm1lZGlh
dGUgY29kZQotICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+Z2V0QmFz
aWNUeXBlKCkgIT0gRWJ0Vm9pZCAmJiAhIGNvbnRleHQtPmZ1bmN0aW9uUmV0dXJuc1ZhbHVlKSB7
Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDMpXSksICJmdW5jdGlv
biBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZToiLCAiIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
KS5mdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUsICh5eXZzcFsoMykgLSAoMyldLmludGVybS5p
bnRlcm1Ob2RlKSwgKHl5bG9jKSk7Ci0gICAgICAgIGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRB
Z2dyZWdhdGVPcGVyYXRvcigoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLCBFT3BGdW5jdGlvbiwg
KHl5bHNwWygxKSAtICgzKV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKS0+
Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0TmFtZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmZ1bmN0
aW9uLT5nZXRNYW5nbGVkTmFtZSgpLmNfc3RyKCkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybSkuZnVuY3Rpb24tPmdldFJldHVyblR5cGUoKSk7Ci0KLSAgICAgICAgLy8gc3RvcmUgdGhl
IHByYWdtYSBpbmZvcm1hdGlvbiBmb3IgZGVidWcgYW5kIG9wdGltaXplIGFuZCBvdGhlciB2ZW5k
b3Igc3BlY2lmaWMKLSAgICAgICAgLy8gaW5mb3JtYXRpb24uIFRoaXMgaW5mb3JtYXRpb24gY2Fu
IGJlIHF1ZXJpZWQgZnJvbSB0aGUgcGFyc2UgdHJlZQotICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRPcHRpbWl6ZShjb250ZXh0LT5wcmFnbWEo
KS5vcHRpbWl6ZSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSktPmdldEFzQWdn
cmVnYXRlKCktPnNldERlYnVnKGNvbnRleHQtPnByYWdtYSgpLmRlYnVnKTsKLQotICAgICAgICBj
b250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLQotCi0gICAg
ICBkZWZhdWx0OiBicmVhazsKLSAgICB9Ci0gIC8qIFVzZXIgc2VtYW50aWMgYWN0aW9ucyBzb21l
dGltZXMgYWx0ZXIgeXljaGFyLCBhbmQgdGhhdCByZXF1aXJlcwotICAgICB0aGF0IHl5dG9rZW4g
YmUgdXBkYXRlZCB3aXRoIHRoZSBuZXcgdHJhbnNsYXRpb24uICBXZSB0YWtlIHRoZQotICAgICBh
cHByb2FjaCBvZiB0cmFuc2xhdGluZyBpbW1lZGlhdGVseSBiZWZvcmUgZXZlcnkgdXNlIG9mIHl5
dG9rZW4uCi0gICAgIE9uZSBhbHRlcm5hdGl2ZSBpcyB0cmFuc2xhdGluZyBoZXJlIGFmdGVyIGV2
ZXJ5IHNlbWFudGljIGFjdGlvbiwKLSAgICAgYnV0IHRoYXQgdHJhbnNsYXRpb24gd291bGQgYmUg
bWlzc2VkIGlmIHRoZSBzZW1hbnRpYyBhY3Rpb24gaW52b2tlcwotICAgICBZWUFCT1JULCBZWUFD
Q0VQVCwgb3IgWVlFUlJPUiBpbW1lZGlhdGVseSBhZnRlciBhbHRlcmluZyB5eWNoYXIgb3IKLSAg
ICAgaWYgaXQgaW52b2tlcyBZWUJBQ0tVUC4gIEluIHRoZSBjYXNlIG9mIFlZQUJPUlQgb3IgWVlB
Q0NFUFQsIGFuCi0gICAgIGluY29ycmVjdCBkZXN0cnVjdG9yIG1pZ2h0IHRoZW4gYmUgaW52b2tl
ZCBpbW1lZGlhdGVseS4gIEluIHRoZQotICAgICBjYXNlIG9mIFlZRVJST1Igb3IgWVlCQUNLVVAs
IHN1YnNlcXVlbnQgcGFyc2VyIGFjdGlvbnMgbWlnaHQgbGVhZAotICAgICB0byBhbiBpbmNvcnJl
Y3QgZGVzdHJ1Y3RvciBjYWxsIG9yIHZlcmJvc2Ugc3ludGF4IGVycm9yIG1lc3NhZ2UKLSAgICAg
YmVmb3JlIHRoZSBsb29rYWhlYWQgaXMgdHJhbnNsYXRlZC4gICovCi0gIFlZX1NZTUJPTF9QUklO
VCAoIi0+ICQkID0iLCB5eXIxW3l5bl0sICZ5eXZhbCwgJnl5bG9jKTsKLQotICBZWVBPUFNUQUNL
ICh5eWxlbik7Ci0gIHl5bGVuID0gMDsKLSAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsK
LQotICAqKyt5eXZzcCA9IHl5dmFsOwotICAqKyt5eWxzcCA9IHl5bG9jOwotCi0gIC8qIE5vdyBg
c2hpZnQnIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbi4gIERldGVybWluZSB3aGF0IHN0YXRl
Ci0gICAgIHRoYXQgZ29lcyB0bywgYmFzZWQgb24gdGhlIHN0YXRlIHdlIHBvcHBlZCBiYWNrIHRv
IGFuZCB0aGUgcnVsZQotICAgICBudW1iZXIgcmVkdWNlZCBieS4gICovCi0KLSAgeXluID0geXly
MVt5eW5dOwotCi0gIHl5c3RhdGUgPSB5eXBnb3RvW3l5biAtIFlZTlRPS0VOU10gKyAqeXlzc3A7
Ci0gIGlmICgwIDw9IHl5c3RhdGUgJiYgeXlzdGF0ZSA8PSBZWUxBU1QgJiYgeXljaGVja1t5eXN0
YXRlXSA9PSAqeXlzc3ApCi0gICAgeXlzdGF0ZSA9IHl5dGFibGVbeXlzdGF0ZV07Ci0gIGVsc2UK
LSAgICB5eXN0YXRlID0geXlkZWZnb3RvW3l5biAtIFlZTlRPS0VOU107Ci0KLSAgZ290byB5eW5l
d3N0YXRlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5
eWVycmxhYiAtLSBoZXJlIG9uIGRldGVjdGluZyBlcnJvciB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZXJybGFiOgotICAvKiBNYWtlIHN1cmUgd2UgaGF2ZSBs
YXRlc3QgbG9va2FoZWFkIHRyYW5zbGF0aW9uLiAgU2VlIGNvbW1lbnRzIGF0Ci0gICAgIHVzZXIg
c2VtYW50aWMgYWN0aW9ucyBmb3Igd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LiAgKi8KLSAgeXl0b2tl
biA9IHl5Y2hhciA9PSBZWUVNUFRZID8gWVlFTVBUWSA6IFlZVFJBTlNMQVRFICh5eWNoYXIpOwot
Ci0gIC8qIElmIG5vdCBhbHJlYWR5IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0IHRo
aXMgZXJyb3IuICAqLwotICBpZiAoIXl5ZXJyc3RhdHVzKQotICAgIHsKLSAgICAgICsreXluZXJy
czsKLSNpZiAhIFlZRVJST1JfVkVSQk9TRQotICAgICAgeXllcnJvciAoJnl5bGxvYywgY29udGV4
dCwgWVlfKCJzeW50YXggZXJyb3IiKSk7Ci0jZWxzZQotIyBkZWZpbmUgWVlTWU5UQVhfRVJST1Ig
eXlzeW50YXhfZXJyb3IgKCZ5eW1zZ19hbGxvYywgJnl5bXNnLCBcCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeXlzc3AsIHl5dG9rZW4pCi0gICAgICB7Ci0gICAgICAg
IGNoYXIgY29uc3QgKnl5bXNncCA9IFlZXygic3ludGF4IGVycm9yIik7Ci0gICAgICAgIGludCB5
eXN5bnRheF9lcnJvcl9zdGF0dXM7Ci0gICAgICAgIHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9IFlZ
U1lOVEFYX0VSUk9SOwotICAgICAgICBpZiAoeXlzeW50YXhfZXJyb3Jfc3RhdHVzID09IDApCi0g
ICAgICAgICAgeXltc2dwID0geXltc2c7Ci0gICAgICAgIGVsc2UgaWYgKHl5c3ludGF4X2Vycm9y
X3N0YXR1cyA9PSAxKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICh5eW1zZyAhPSB5eW1z
Z2J1ZikKLSAgICAgICAgICAgICAgWVlTVEFDS19GUkVFICh5eW1zZyk7Ci0gICAgICAgICAgICB5
eW1zZyA9IChjaGFyICopIFlZU1RBQ0tfQUxMT0MgKHl5bXNnX2FsbG9jKTsKLSAgICAgICAgICAg
IGlmICgheXltc2cpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB5eW1zZyA9IHl5
bXNnYnVmOwotICAgICAgICAgICAgICAgIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOwot
ICAgICAgICAgICAgICAgIHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9IDI7Ci0gICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHl5
c3ludGF4X2Vycm9yX3N0YXR1cyA9IFlZU1lOVEFYX0VSUk9SOwotICAgICAgICAgICAgICAgIHl5
bXNncCA9IHl5bXNnOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB5eWVy
cm9yICgmeXlsbG9jLCBjb250ZXh0LCB5eW1zZ3ApOwotICAgICAgICBpZiAoeXlzeW50YXhfZXJy
b3Jfc3RhdHVzID09IDIpCi0gICAgICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKLSAgICAgIH0K
LSMgdW5kZWYgWVlTWU5UQVhfRVJST1IKLSNlbmRpZgotICAgIH0KLQotICB5eWVycm9yX3Jhbmdl
WzFdID0geXlsbG9jOwotCi0gIGlmICh5eWVycnN0YXR1cyA9PSAzKQotICAgIHsKLSAgICAgIC8q
IElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIg
YW4KLQkgZXJyb3IsIGRpc2NhcmQgaXQuICAqLwotCi0gICAgICBpZiAoeXljaGFyIDw9IFlZRU9G
KQotCXsKLQkgIC8qIFJldHVybiBmYWlsdXJlIGlmIGF0IGVuZCBvZiBpbnB1dC4gICovCi0JICBp
ZiAoeXljaGFyID09IFlZRU9GKQotCSAgICBZWUFCT1JUOwotCX0KLSAgICAgIGVsc2UKLQl7Ci0J
ICB5eWRlc3RydWN0ICgiRXJyb3I6IGRpc2NhcmRpbmciLAotCQkgICAgICB5eXRva2VuLCAmeXls
dmFsLCAmeXlsbG9jLCBjb250ZXh0KTsKLQkgIHl5Y2hhciA9IFlZRU1QVFk7Ci0JfQotICAgIH0K
LQotICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBzaGlm
dGluZyB0aGUgZXJyb3IKLSAgICAgdG9rZW4uICAqLwotICBnb3RvIHl5ZXJybGFiMTsKLQotCi0v
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwg
eXllcnJvcmxhYiAtLSBlcnJvciByYWlzZWQgZXhwbGljaXRseSBieSBZWUVSUk9SLiAgfAotYC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWVy
cm9ybGFiOgotCi0gIC8qIFBhY2lmeSBjb21waWxlcnMgbGlrZSBHQ0Mgd2hlbiB0aGUgdXNlciBj
b2RlIG5ldmVyIGludm9rZXMKLSAgICAgWVlFUlJPUiBhbmQgdGhlIGxhYmVsIHl5ZXJyb3JsYWIg
dGhlcmVmb3JlIG5ldmVyIGFwcGVhcnMgaW4gdXNlcgotICAgICBjb2RlLiAgKi8KLSAgaWYgKC8q
Q09OU1RDT05EKi8gMCkKLSAgICAgZ290byB5eWVycm9ybGFiOwotCi0gIHl5ZXJyb3JfcmFuZ2Vb
MV0gPSB5eWxzcFsxLXl5bGVuXTsKLSAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2Yg
dGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAotICAgICB0aGlzIFlZRVJST1IuICAqLwot
ICBZWVBPUFNUQUNLICh5eWxlbik7Ci0gIHl5bGVuID0gMDsKLSAgWVlfU1RBQ0tfUFJJTlQgKHl5
c3MsIHl5c3NwKTsKLSAgeXlzdGF0ZSA9ICp5eXNzcDsKLSAgZ290byB5eWVycmxhYjE7Ci0KLQot
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLgotfCB5eWVycmxhYjEgLS0gY29tbW9uIGNvZGUgZm9yIGJvdGggc3ludGF4IGVycm9y
IGFuZCBZWUVSUk9SLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXllcnJsYWIxOgotICB5eWVycnN0YXR1cyA9IDM7
CS8qIEVhY2ggcmVhbCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVudHMgdGhpcy4gICovCi0KLSAgZm9y
ICg7OykKLSAgICB7Ci0gICAgICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07Ci0gICAgICBpZiAoIXl5
cGFjdF92YWx1ZV9pc19kZWZhdWx0ICh5eW4pKQotCXsKLQkgIHl5biArPSBZWVRFUlJPUjsKLQkg
IGlmICgwIDw9IHl5biAmJiB5eW4gPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXluXSA9PSBZWVRFUlJP
UikKLQkgICAgewotCSAgICAgIHl5biA9IHl5dGFibGVbeXluXTsKLQkgICAgICBpZiAoMCA8IHl5
bikKLQkJYnJlYWs7Ci0JICAgIH0KLQl9Ci0KLSAgICAgIC8qIFBvcCB0aGUgY3VycmVudCBzdGF0
ZSBiZWNhdXNlIGl0IGNhbm5vdCBoYW5kbGUgdGhlIGVycm9yIHRva2VuLiAgKi8KLSAgICAgIGlm
ICh5eXNzcCA9PSB5eXNzKQotCVlZQUJPUlQ7Ci0KLSAgICAgIHl5ZXJyb3JfcmFuZ2VbMV0gPSAq
eXlsc3A7Ci0gICAgICB5eWRlc3RydWN0ICgiRXJyb3I6IHBvcHBpbmciLAotCQkgIHl5c3Rvc1t5
eXN0YXRlXSwgeXl2c3AsIHl5bHNwLCBjb250ZXh0KTsKLSAgICAgIFlZUE9QU1RBQ0sgKDEpOwot
ICAgICAgeXlzdGF0ZSA9ICp5eXNzcDsKLSAgICAgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNz
cCk7Ci0gICAgfQotCi0gIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOCi0gICor
K3l5dnNwID0geXlsdmFsOwotICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9FTkQKLQot
ICB5eWVycm9yX3JhbmdlWzJdID0geXlsbG9jOwotICAvKiBVc2luZyBZWUxMT0MgaXMgdGVtcHRp
bmcsIGJ1dCB3b3VsZCBjaGFuZ2UgdGhlIGxvY2F0aW9uIG9mCi0gICAgIHRoZSBsb29rYWhlYWQu
ICBZWUxPQyBpcyBhdmFpbGFibGUgdGhvdWdoLiAgKi8KLSAgWVlMTE9DX0RFRkFVTFQgKHl5bG9j
LCB5eWVycm9yX3JhbmdlLCAyKTsKLSAgKisreXlsc3AgPSB5eWxvYzsKLQotICAvKiBTaGlmdCB0
aGUgZXJyb3IgdG9rZW4uICAqLwotICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5c3Rv
c1t5eW5dLCB5eXZzcCwgeXlsc3ApOwotCi0gIHl5c3RhdGUgPSB5eW47Ci0gIGdvdG8geXluZXdz
dGF0ZTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5
YWNjZXB0bGFiIC0tIFlZQUNDRVBUIGNvbWVzIGhlcmUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWFjY2VwdGxhYjoKLSAgeXlyZXN1bHQgPSAwOwotICBn
b3RvIHl5cmV0dXJuOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgot
fCB5eWFib3J0bGFiIC0tIFlZQUJPUlQgY29tZXMgaGVyZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWFib3J0bGFiOgotICB5eXJlc3VsdCA9IDE7Ci0gIGdv
dG8geXlyZXR1cm47Ci0KLSNpZiAhZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9T
RQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgot
fCB5eWV4aGF1c3RlZGxhYiAtLSBtZW1vcnkgZXhoYXVzdGlvbiBjb21lcyBoZXJlLiAgfAotYC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXlleGhh
dXN0ZWRsYWI6Ci0gIHl5ZXJyb3IgKCZ5eWxsb2MsIGNvbnRleHQsIFlZXygibWVtb3J5IGV4aGF1
c3RlZCIpKTsKLSAgeXlyZXN1bHQgPSAyOwotICAvKiBGYWxsIHRocm91Z2guICAqLwotI2VuZGlm
Ci0KLXl5cmV0dXJuOgotICBpZiAoeXljaGFyICE9IFlZRU1QVFkpCi0gICAgewotICAgICAgLyog
TWFrZSBzdXJlIHdlIGhhdmUgbGF0ZXN0IGxvb2thaGVhZCB0cmFuc2xhdGlvbi4gIFNlZSBjb21t
ZW50cyBhdAotICAgICAgICAgdXNlciBzZW1hbnRpYyBhY3Rpb25zIGZvciB3aHkgdGhpcyBpcyBu
ZWNlc3NhcnkuICAqLwotICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOwotICAg
ICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6IGRpc2NhcmRpbmcgbG9va2FoZWFkIiwKLSAgICAgICAg
ICAgICAgICAgIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MsIGNvbnRleHQpOwotICAgIH0KLSAg
LyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRy
aWdnZXJlZAotICAgICB0aGlzIFlZQUJPUlQgb3IgWVlBQ0NFUFQuICAqLwotICBZWVBPUFNUQUNL
ICh5eWxlbik7Ci0gIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7Ci0gIHdoaWxlICh5eXNz
cCAhPSB5eXNzKQotICAgIHsKLSAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBwb3BwaW5nIiwK
LQkJICB5eXN0b3NbKnl5c3NwXSwgeXl2c3AsIHl5bHNwLCBjb250ZXh0KTsKLSAgICAgIFlZUE9Q
U1RBQ0sgKDEpOwotICAgIH0KLSNpZm5kZWYgeXlvdmVyZmxvdwotICBpZiAoeXlzcyAhPSB5eXNz
YSkKLSAgICBZWVNUQUNLX0ZSRUUgKHl5c3MpOwotI2VuZGlmCi0jaWYgWVlFUlJPUl9WRVJCT1NF
Ci0gIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKLSAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKLSNl
bmRpZgotICAvKiBNYWtlIHN1cmUgWVlJRCBpcyB1c2VkLiAgKi8KLSAgcmV0dXJuIFlZSUQgKHl5
cmVzdWx0KTsKLX0KLQotCi0KLQotCi1pbnQgZ2xzbGFuZ19wYXJzZShUUGFyc2VDb250ZXh0KiBj
b250ZXh0KSB7Ci0gICAgcmV0dXJuIHl5cGFyc2UoY29udGV4dCk7Ci19CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBhMzViMDIxZmJmZWY0MTdjN2MzZjZhZDJmNjRjYjY1YzYwZmZj
NTc4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5oCisrKyAvZGV2L251
bGwKQEAgLTEsMjI1ICswLDAgQEAKLS8qIEFwcGxlIE5vdGU6IEZvciB0aGUgYXZvaWRhbmNlIG9m
IGRvdWJ0LCBBcHBsZSBlbGVjdHMgdG8gZGlzdHJpYnV0ZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBCU0QgbGljZW5zZS4gKi8KLQotLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkg
R05VIEJpc29uIDIuNy4gICovCi0KLS8qIEJpc29uIGludGVyZmFjZSBmb3IgWWFjYy1saWtlIHBh
cnNlcnMgaW4gQwotICAgCi0gICAgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODktMTk5MCwgMjAw
MC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotICAgCi0gICBUaGlzIHByb2dy
YW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm
eQotICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhl
ciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0gICAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICAgCi0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICBHTlUg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICAgCi0gICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5n
bnUub3JnL2xpY2Vuc2VzLz4uICAqLwotCi0vKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3Ug
bWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKLSAgIHBhcnQgb3IgYWxsIG9m
IHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCi0gICB1
bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3QgaXRz
ZWxmIGEKLSAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9kaWZp
ZWQgdmVyc2lvbiB0aGVyZW9mCi0gICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFsdGVybmF0aXZl
bHksIGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlCi0gICB0aGUgcGFyc2VyIHNrZWxldG9u
IGl0c2VsZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCi0gICBzcGVjaWFs
IGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRp
bmcKLSAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdl
bmVyYWwgUHVibGljCi0gICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4K
LSAgIAotICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiBpbgotICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLwotCi0jaWZu
ZGVmIFlZX1lZX0dMU0xBTkdfVEFCX0hfSU5DTFVERUQKLSMgZGVmaW5lIFlZX1lZX0dMU0xBTkdf
VEFCX0hfSU5DTFVERUQKLS8qIEVuYWJsaW5nIHRyYWNlcy4gICovCi0jaWZuZGVmIFlZREVCVUcK
LSMgZGVmaW5lIFlZREVCVUcgMAotI2VuZGlmCi0jaWYgWVlERUJVRwotZXh0ZXJuIGludCB5eWRl
YnVnOwotI2VuZGlmCi0vKiAiJWNvZGUgcmVxdWlyZXMiIGJsb2Nrcy4gICovCi0KLQotI2RlZmlu
ZSBZWUxUWVBFIFRTb3VyY2VMb2MKLSNkZWZpbmUgWVlMVFlQRV9JU19ERUNMQVJFRCAxCi0jZGVm
aW5lIFNIX01BWF9UT0tFTl9MRU5HVEggMjU2ICAvLyBXZWJHTCBzcGVjLgotCi0KLQotCi0vKiBU
b2tlbnMuICAqLwotI2lmbmRlZiBZWVRPS0VOVFlQRQotIyBkZWZpbmUgWVlUT0tFTlRZUEUKLSAg
IC8qIFB1dCB0aGUgdG9rZW5zIGludG8gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBHREIgYW5k
IG90aGVyIGRlYnVnZ2VycwotICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8KLSAgIGVudW0geXl0
b2tlbnR5cGUgewotICAgICBJTlZBUklBTlQgPSAyNTgsCi0gICAgIEhJR0hfUFJFQ0lTSU9OID0g
MjU5LAotICAgICBNRURJVU1fUFJFQ0lTSU9OID0gMjYwLAotICAgICBMT1dfUFJFQ0lTSU9OID0g
MjYxLAotICAgICBQUkVDSVNJT04gPSAyNjIsCi0gICAgIEFUVFJJQlVURSA9IDI2MywKLSAgICAg
Q09OU1RfUVVBTCA9IDI2NCwKLSAgICAgQk9PTF9UWVBFID0gMjY1LAotICAgICBGTE9BVF9UWVBF
ID0gMjY2LAotICAgICBJTlRfVFlQRSA9IDI2NywKLSAgICAgQlJFQUsgPSAyNjgsCi0gICAgIENP
TlRJTlVFID0gMjY5LAotICAgICBETyA9IDI3MCwKLSAgICAgRUxTRSA9IDI3MSwKLSAgICAgRk9S
ID0gMjcyLAotICAgICBJRiA9IDI3MywKLSAgICAgRElTQ0FSRCA9IDI3NCwKLSAgICAgUkVUVVJO
ID0gMjc1LAotICAgICBCVkVDMiA9IDI3NiwKLSAgICAgQlZFQzMgPSAyNzcsCi0gICAgIEJWRUM0
ID0gMjc4LAotICAgICBJVkVDMiA9IDI3OSwKLSAgICAgSVZFQzMgPSAyODAsCi0gICAgIElWRUM0
ID0gMjgxLAotICAgICBWRUMyID0gMjgyLAotICAgICBWRUMzID0gMjgzLAotICAgICBWRUM0ID0g
Mjg0LAotICAgICBNQVRSSVgyID0gMjg1LAotICAgICBNQVRSSVgzID0gMjg2LAotICAgICBNQVRS
SVg0ID0gMjg3LAotICAgICBJTl9RVUFMID0gMjg4LAotICAgICBPVVRfUVVBTCA9IDI4OSwKLSAg
ICAgSU5PVVRfUVVBTCA9IDI5MCwKLSAgICAgVU5JRk9STSA9IDI5MSwKLSAgICAgVkFSWUlORyA9
IDI5MiwKLSAgICAgU1RSVUNUID0gMjkzLAotICAgICBWT0lEX1RZUEUgPSAyOTQsCi0gICAgIFdI
SUxFID0gMjk1LAotICAgICBTQU1QTEVSMkQgPSAyOTYsCi0gICAgIFNBTVBMRVJDVUJFID0gMjk3
LAotICAgICBTQU1QTEVSX0VYVEVSTkFMX09FUyA9IDI5OCwKLSAgICAgU0FNUExFUjJEUkVDVCA9
IDI5OSwKLSAgICAgSURFTlRJRklFUiA9IDMwMCwKLSAgICAgVFlQRV9OQU1FID0gMzAxLAotICAg
ICBGTE9BVENPTlNUQU5UID0gMzAyLAotICAgICBJTlRDT05TVEFOVCA9IDMwMywKLSAgICAgQk9P
TENPTlNUQU5UID0gMzA0LAotICAgICBMRUZUX09QID0gMzA1LAotICAgICBSSUdIVF9PUCA9IDMw
NiwKLSAgICAgSU5DX09QID0gMzA3LAotICAgICBERUNfT1AgPSAzMDgsCi0gICAgIExFX09QID0g
MzA5LAotICAgICBHRV9PUCA9IDMxMCwKLSAgICAgRVFfT1AgPSAzMTEsCi0gICAgIE5FX09QID0g
MzEyLAotICAgICBBTkRfT1AgPSAzMTMsCi0gICAgIE9SX09QID0gMzE0LAotICAgICBYT1JfT1Ag
PSAzMTUsCi0gICAgIE1VTF9BU1NJR04gPSAzMTYsCi0gICAgIERJVl9BU1NJR04gPSAzMTcsCi0g
ICAgIEFERF9BU1NJR04gPSAzMTgsCi0gICAgIE1PRF9BU1NJR04gPSAzMTksCi0gICAgIExFRlRf
QVNTSUdOID0gMzIwLAotICAgICBSSUdIVF9BU1NJR04gPSAzMjEsCi0gICAgIEFORF9BU1NJR04g
PSAzMjIsCi0gICAgIFhPUl9BU1NJR04gPSAzMjMsCi0gICAgIE9SX0FTU0lHTiA9IDMyNCwKLSAg
ICAgU1VCX0FTU0lHTiA9IDMyNSwKLSAgICAgTEVGVF9QQVJFTiA9IDMyNiwKLSAgICAgUklHSFRf
UEFSRU4gPSAzMjcsCi0gICAgIExFRlRfQlJBQ0tFVCA9IDMyOCwKLSAgICAgUklHSFRfQlJBQ0tF
VCA9IDMyOSwKLSAgICAgTEVGVF9CUkFDRSA9IDMzMCwKLSAgICAgUklHSFRfQlJBQ0UgPSAzMzEs
Ci0gICAgIERPVCA9IDMzMiwKLSAgICAgQ09NTUEgPSAzMzMsCi0gICAgIENPTE9OID0gMzM0LAot
ICAgICBFUVVBTCA9IDMzNSwKLSAgICAgU0VNSUNPTE9OID0gMzM2LAotICAgICBCQU5HID0gMzM3
LAotICAgICBEQVNIID0gMzM4LAotICAgICBUSUxERSA9IDMzOSwKLSAgICAgUExVUyA9IDM0MCwK
LSAgICAgU1RBUiA9IDM0MSwKLSAgICAgU0xBU0ggPSAzNDIsCi0gICAgIFBFUkNFTlQgPSAzNDMs
Ci0gICAgIExFRlRfQU5HTEUgPSAzNDQsCi0gICAgIFJJR0hUX0FOR0xFID0gMzQ1LAotICAgICBW
RVJUSUNBTF9CQVIgPSAzNDYsCi0gICAgIENBUkVUID0gMzQ3LAotICAgICBBTVBFUlNBTkQgPSAz
NDgsCi0gICAgIFFVRVNUSU9OID0gMzQ5Ci0gICB9OwotI2VuZGlmCi0KLQotI2lmICEgZGVmaW5l
ZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECi10eXBlZGVmIHVuaW9u
IFlZU1RZUEUKLXsKLQotCi0gICAgc3RydWN0IHsKLSAgICAgICAgdW5pb24gewotICAgICAgICAg
ICAgVFN0cmluZyAqc3RyaW5nOwotICAgICAgICAgICAgZmxvYXQgZjsKLSAgICAgICAgICAgIGlu
dCBpOwotICAgICAgICAgICAgYm9vbCBiOwotICAgICAgICB9OwotICAgICAgICBUU3ltYm9sKiBz
eW1ib2w7Ci0gICAgfSBsZXg7Ci0gICAgc3RydWN0IHsKLSAgICAgICAgVE9wZXJhdG9yIG9wOwot
ICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKLSAg
ICAgICAgICAgIFRJbnRlcm1Ob2RlUGFpciBub2RlUGFpcjsKLSAgICAgICAgICAgIFRJbnRlcm1U
eXBlZCogaW50ZXJtVHlwZWROb2RlOwotICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSogaW50
ZXJtQWdncmVnYXRlOwotICAgICAgICB9OwotICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAgICBU
UHVibGljVHlwZSB0eXBlOwotICAgICAgICAgICAgVFByZWNpc2lvbiBwcmVjaXNpb247Ci0gICAg
ICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllcjsKLSAgICAgICAgICAgIFRGdW5jdGlvbiogZnVu
Y3Rpb247Ci0gICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtOwotICAgICAgICAgICAgVEZpZWxk
KiBmaWVsZDsKLSAgICAgICAgICAgIFRGaWVsZExpc3QqIGZpZWxkTGlzdDsKLSAgICAgICAgfTsK
LSAgICB9IGludGVybTsKLQotCi0KLX0gWVlTVFlQRTsKLSMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJ
VklBTCAxCi0jIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUg
d2l0aGRyYXduICovCi0jIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKLSNlbmRpZgotCi0j
aWYgISBkZWZpbmVkIFlZTFRZUEUgJiYgISBkZWZpbmVkIFlZTFRZUEVfSVNfREVDTEFSRUQKLXR5
cGVkZWYgc3RydWN0IFlZTFRZUEUKLXsKLSAgaW50IGZpcnN0X2xpbmU7Ci0gIGludCBmaXJzdF9j
b2x1bW47Ci0gIGludCBsYXN0X2xpbmU7Ci0gIGludCBsYXN0X2NvbHVtbjsKLX0gWVlMVFlQRTsK
LSMgZGVmaW5lIHl5bHR5cGUgWVlMVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJh
d24gKi8KLSMgZGVmaW5lIFlZTFRZUEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlMVFlQRV9J
U19UUklWSUFMIDEKLSNlbmRpZgotCi0KLSNpZmRlZiBZWVBBUlNFX1BBUkFNCi0jaWYgZGVmaW5l
ZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCi1pbnQgeXlwYXJzZSAodm9pZCAqWVlQ
QVJTRV9QQVJBTSk7Ci0jZWxzZQotaW50IHl5cGFyc2UgKCk7Ci0jZW5kaWYKLSNlbHNlIC8qICEg
WVlQQVJTRV9QQVJBTSAqLwotI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVz
cGx1cwotaW50IHl5cGFyc2UgKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOwotI2Vsc2UKLWludCB5
eXBhcnNlICgpOwotI2VuZGlmCi0jZW5kaWYgLyogISBZWVBBUlNFX1BBUkFNICovCi0KLSNlbmRp
ZiAvKiAhWVlfWVlfR0xTTEFOR19UQUJfSF9JTkNMVURFRCAgKi8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1PdXQuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDEzYWE5NmFmNmQ2MmQxMGU3ZWY3MmYyZmVhYzM2NjJlNzNkYjg2NmUu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw0MjQgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVy
L2xvY2FsaW50ZXJtZWRpYXRlLmgiCi0KLS8vCi0vLyBUd28gcHVycG9zZXM6Ci0vLyAxLiAgU2hv
dyBhbiBleGFtcGxlIG9mIGhvdyB0byBpdGVyYXRlIHRyZWUuICBGdW5jdGlvbnMgY2FuCi0vLyAg
ICAgYWxzbyBkaXJlY3RseSBjYWxsIFRyYXZlcnNlKCkgb24gY2hpbGRyZW4gdGhlbXNlbHZlcyB0
bwotLy8gICAgIGhhdmUgZmluZXIgZ3JhaW5lZCBjb250cm9sIG92ZXIgdGhlIHByb2Nlc3MgdGhh
biBzaG93biBoZXJlLgotLy8gICAgIFNlZSB0aGUgbGFzdCBmdW5jdGlvbiBmb3IgaG93IHRvIGdl
dCBzdGFydGVkLgotLy8gMi4gIFByaW50IG91dCBhIHRleHQgYmFzZWQgZGVzY3JpcHRpb24gb2Yg
dGhlIHRyZWUuCi0vLwotCi0vLwotLy8gVXNlIHRoaXMgY2xhc3MgdG8gY2FycnkgYWxvbmcgZGF0
YSBmcm9tIG5vZGUgdG8gbm9kZSBpbgotLy8gdGhlIHRyYXZlcnNhbAotLy8KLWNsYXNzIFRPdXRw
dXRUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7Ci1wdWJsaWM6Ci0gICAgVE91
dHB1dFRyYXZlcnNlcihUSW5mb1NpbmtCYXNlJiBpKSA6IHNpbmsoaSkgeyB9Ci0gICAgVEluZm9T
aW5rQmFzZSYgc2luazsKLQotcHJvdGVjdGVkOgotICAgIHZvaWQgdmlzaXRTeW1ib2woVEludGVy
bVN5bWJvbCopOwotICAgIHZvaWQgdmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVu
aW9uKik7Ci0gICAgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSop
OwotICAgIGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5Kik7Ci0gICAg
Ym9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiopOwotICAg
IGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKLSAg
ICBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqKTsKLSAgICBib29sIHZp
c2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKik7Ci19OwotCi1UU3RyaW5nIFRU
eXBlOjpnZXRDb21wbGV0ZVN0cmluZygpIGNvbnN0Ci17Ci0gICAgVFN0cmluZ1N0cmVhbSBzdHJl
YW07Ci0KLSAgICBpZiAocXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSAmJiBxdWFsaWZpZXIgIT0g
RXZxR2xvYmFsKQotICAgICAgICBzdHJlYW0gPDwgZ2V0UXVhbGlmaWVyU3RyaW5nKCkgPDwgIiAi
IDw8IGdldFByZWNpc2lvblN0cmluZygpIDw8ICIgIjsKLSAgICBpZiAoYXJyYXkpCi0gICAgICAg
IHN0cmVhbSA8PCAiYXJyYXlbIiA8PCBnZXRBcnJheVNpemUoKSA8PCAiXSBvZiAiOwotICAgIGlm
IChtYXRyaXgpCi0gICAgICAgIHN0cmVhbSA8PCBzaXplIDw8ICJYIiA8PCBzaXplIDw8ICIgbWF0
cml4IG9mICI7Ci0gICAgZWxzZSBpZiAoc2l6ZSA+IDEpCi0gICAgICAgIHN0cmVhbSA8PCBzaXpl
IDw8ICItY29tcG9uZW50IHZlY3RvciBvZiAiOwotCi0gICAgc3RyZWFtIDw8IGdldEJhc2ljU3Ry
aW5nKCk7Ci0gICAgcmV0dXJuIHN0cmVhbS5zdHIoKTsKLX0KLQotLy8KLS8vIEhlbHBlciBmdW5j
dGlvbnMgZm9yIHByaW50aW5nLCBub3QgcGFydCBvZiB0cmF2ZXJzaW5nLgotLy8KLQotdm9pZCBP
dXRwdXRUcmVlVGV4dChUSW5mb1NpbmtCYXNlJiBzaW5rLCBUSW50ZXJtTm9kZSogbm9kZSwgY29u
c3QgaW50IGRlcHRoKQotewotICAgIGludCBpOwotCi0gICAgc2luay5sb2NhdGlvbihub2RlLT5n
ZXRMaW5lKCkpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IGRlcHRoOyArK2kpCi0gICAgICAgIHNp
bmsgPDwgIiAgIjsKLX0KLQotLy8KLS8vIFRoZSByZXN0IG9mIHRoZSBmaWxlIGFyZSB0aGUgdHJh
dmVyc2FsIGZ1bmN0aW9ucy4gIFRoZSBsYXN0IG9uZQotLy8gaXMgdGhlIG9uZSB0aGF0IHN0YXJ0
cyB0aGUgdHJhdmVyc2FsLgotLy8KLS8vIFJldHVybiB0cnVlIGZyb20gaW50ZXJpb3Igbm9kZXMg
dG8gaGF2ZSB0aGUgZXh0ZXJuYWwgdHJhdmVyc2FsCi0vLyBjb250aW51ZSBvbiB0byBjaGlsZHJl
bi4gIElmIHlvdSBwcm9jZXNzIGNoaWxkcmVuIHlvdXJzZWxmLAotLy8gcmV0dXJuIGZhbHNlLgot
Ly8KLQotdm9pZCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBu
b2RlKQotewotICAgIE91dHB1dFRyZWVUZXh0KHNpbmssIG5vZGUsIGRlcHRoKTsKLQotICAgIHNp
bmsgPDwgIiciIDw8IG5vZGUtPmdldFN5bWJvbCgpIDw8ICInICI7Ci0gICAgc2luayA8PCAiKCIg
PDwgbm9kZS0+Z2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiKVxuIjsKLX0KLQotYm9vbCBUT3V0cHV0
VHJhdmVyc2VyOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSogbm9kZSkK
LXsKLSAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBzaW5rOwotCi0gICAgT3V0cHV0VHJlZVRleHQo
b3V0LCBub2RlLCBkZXB0aCk7Ci0KLSAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpIHsKLSAgICAg
ICAgY2FzZSBFT3BBc3NpZ246ICAgICAgICAgICAgICAgICAgIG91dCA8PCAibW92ZSBzZWNvbmQg
Y2hpbGQgdG8gZmlyc3QgY2hpbGQiOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9w
SW5pdGlhbGl6ZTogICAgICAgICAgICAgICBvdXQgPDwgImluaXRpYWxpemUgZmlyc3QgY2hpbGQg
d2l0aCBzZWNvbmQgY2hpbGQiOyAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjog
ICAgICAgICAgICAgICAgb3V0IDw8ICJhZGQgc2Vjb25kIGNoaWxkIGludG8gZmlyc3QgY2hpbGQi
OyAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246ICAgICAgICAgICAg
ICAgIG91dCA8PCAic3VidHJhY3Qgc2Vjb25kIGNoaWxkIGludG8gZmlyc3QgY2hpbGQiOyAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTXVsQXNzaWduOiAgICAgICAgICAgICAgICBvdXQgPDwg
Im11bHRpcGx5IHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOiAgb3V0IDw8ICJtYXRyaXggbXVs
dCBzZWNvbmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7ICBicmVhazsKLSAgICAgICAgY2FzZSBF
T3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjogIG91dCA8PCAidmVjdG9yIHNjYWxlIHNlY29uZCBj
aGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTWF0cml4VGlt
ZXNTY2FsYXJBc3NpZ246ICBvdXQgPDwgIm1hdHJpeCBzY2FsZSBzZWNvbmQgY2hpbGQgaW50byBm
aXJzdCBjaGlsZCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4QXNz
aWduOiAgb3V0IDw8ICJtYXRyaXggbXVsdCBzZWNvbmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7
IGJyZWFrOwotICAgICAgICBjYXNlIEVPcERpdkFzc2lnbjogICAgICAgICAgICAgICAgb3V0IDw8
ICJkaXZpZGUgc2Vjb25kIGNoaWxkIGludG8gZmlyc3QgY2hpbGQiOyAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDogICBvdXQgPDwgImRpcmVjdCBpbmRleCI7ICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgRU9wSW5kZXhJbmRpcmVjdDogb3V0IDw8ICJpbmRpcmVjdCBpbmRl
eCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3RydWN0OiAgIG91dCA8PCAi
ZGlyZWN0IGluZGV4IGZvciBzdHJ1Y3R1cmUiOyAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFZl
Y3RvclN3aXp6bGU6IG91dCA8PCAidmVjdG9yIHN3aXp6bGUiOyBicmVhazsKLQotICAgICAgICBj
YXNlIEVPcEFkZDogICAgb3V0IDw8ICJhZGQiOyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEVPcFN1YjogICAgb3V0IDw8ICJzdWJ0cmFjdCI7ICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEVPcE11bDogICAgb3V0IDw8ICJjb21wb25lbnQtd2lzZSBt
dWx0aXBseSI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcERpdjogICAgb3V0IDw8ICJkaXZpZGUi
OyAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEVxdWFsOiAgICAgICAg
ICAgIG91dCA8PCAiQ29tcGFyZSBFcXVhbCI7ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBFT3BOb3RFcXVhbDogICAgICAgICBvdXQgPDwgIkNvbXBhcmUgTm90IEVxdWFsIjsg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTGVzc1RoYW46ICAgICAgICAgb3V0
IDw8ICJDb21wYXJlIExlc3MgVGhhbiI7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEVPcEdyZWF0ZXJUaGFuOiAgICAgIG91dCA8PCAiQ29tcGFyZSBHcmVhdGVyIFRoYW4iOyAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOiAgICBvdXQgPDwgIkNv
bXBhcmUgTGVzcyBUaGFuIG9yIEVxdWFsIjsgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wR3Jl
YXRlclRoYW5FcXVhbDogb3V0IDw8ICJDb21wYXJlIEdyZWF0ZXIgVGhhbiBvciBFcXVhbCI7IGJy
ZWFrOwotCi0gICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXI6IG91dCA8PCAidmVjdG9y
LXNjYWxlIjsgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRy
aXg6IG91dCA8PCAidmVjdG9yLXRpbWVzLW1hdHJpeCI7ICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RU9wTWF0cml4VGltZXNWZWN0b3I6IG91dCA8PCAibWF0cml4LXRpbWVzLXZlY3RvciI7ICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXI6IG91dCA8PCAibWF0cml4LXNj
YWxlIjsgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXg6
IG91dCA8PCAibWF0cml4LW11bHRpcGx5IjsgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBF
T3BMb2dpY2FsT3I6ICBvdXQgPDwgImxvZ2ljYWwtb3IiOyAgIGJyZWFrOwotICAgICAgICBjYXNl
IEVPcExvZ2ljYWxYb3I6IG91dCA8PCAibG9naWNhbC14b3IiOyBicmVhazsKLSAgICAgICAgY2Fz
ZSBFT3BMb2dpY2FsQW5kOiBvdXQgPDwgImxvZ2ljYWwtYW5kIjsgYnJlYWs7Ci0gICAgICAgIGRl
ZmF1bHQ6IG91dCA8PCAiPHVua25vd24gb3A+IjsKLSAgICB9Ci0KLSAgICBvdXQgPDwgIiAoIiA8
PCBub2RlLT5nZXRDb21wbGV0ZVN0cmluZygpIDw8ICIpIjsKLQotICAgIG91dCA8PCAiXG4iOwot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRVbmFy
eShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQotewotICAgIFRJbmZvU2lua0Jhc2Um
IG91dCA9IHNpbms7Ci0KLSAgICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUsIGRlcHRoKTsKLQot
ICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkgewotICAgICAgICBjYXNlIEVPcE5lZ2F0aXZlOiAg
ICAgICBvdXQgPDwgIk5lZ2F0ZSB2YWx1ZSI7ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RU9wVmVjdG9yTG9naWNhbE5vdDoKLSAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OiAgICAgb3V0
IDw8ICJOZWdhdGUgY29uZGl0aW9uYWwiOyAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wUG9z
dEluY3JlbWVudDogIG91dCA8PCAiUG9zdC1JbmNyZW1lbnQiOyAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OiAgb3V0IDw8ICJQb3N0LURlY3JlbWVudCI7ICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDogICBvdXQgPDwgIlByZS1JbmNy
ZW1lbnQiOyAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OiAgIG91
dCA8PCAiUHJlLURlY3JlbWVudCI7ICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEVPcENv
bnZJbnRUb0Jvb2w6ICBvdXQgPDwgIkNvbnZlcnQgaW50IHRvIGJvb2wiOyAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRU9wQ29udkZsb2F0VG9Cb29sOm91dCA8PCAiQ29udmVydCBmbG9hdCB0byBib29s
IjticmVhazsKLSAgICAgICAgY2FzZSBFT3BDb252Qm9vbFRvRmxvYXQ6b3V0IDw8ICJDb252ZXJ0
IGJvb2wgdG8gZmxvYXQiO2JyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnZJbnRUb0Zsb2F0OiBv
dXQgPDwgIkNvbnZlcnQgaW50IHRvIGZsb2F0IjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29u
dkZsb2F0VG9JbnQ6IG91dCA8PCAiQ29udmVydCBmbG9hdCB0byBpbnQiOyBicmVhazsKLSAgICAg
ICAgY2FzZSBFT3BDb252Qm9vbFRvSW50OiAgb3V0IDw8ICJDb252ZXJ0IGJvb2wgdG8gaW50Ijsg
IGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wUmFkaWFuczogICAgICAgIG91dCA8PCAicmFkaWFu
cyI7ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BEZWdyZWVzOiAgICAgICAg
b3V0IDw8ICJkZWdyZWVzIjsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFNp
bjogICAgICAgICAgICBvdXQgPDwgInNpbmUiOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRU9wQ29zOiAgICAgICAgICAgIG91dCA8PCAiY29zaW5lIjsgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BUYW46ICAgICAgICAgICAgb3V0IDw8ICJ0YW5nZW50
IjsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEFzaW46ICAgICAgICAgICBv
dXQgPDwgImFyYyBzaW5lIjsgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQWNv
czogICAgICAgICAgIG91dCA8PCAiYXJjIGNvc2luZSI7ICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBFT3BBdGFuOiAgICAgICAgICAgb3V0IDw8ICJhcmMgdGFuZ2VudCI7ICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wRXhwOiAgICAgICAgICAgIG91dCA8PCAiZXhwIjsg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BMb2c6ICAgICAgICAgICAg
b3V0IDw8ICJsb2ciOyAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEV4
cDI6ICAgICAgICAgICBvdXQgPDwgImV4cDIiOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRU9wTG9nMjogICAgICAgICAgIG91dCA8PCAibG9nMiI7ICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BTcXJ0OiAgICAgICAgICAgb3V0IDw8ICJzcXJ0Ijsg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEludmVyc2VTcXJ0OiAgICBv
dXQgPDwgImludmVyc2Ugc3FydCI7ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BB
YnM6ICAgICAgICAgICAgb3V0IDw8ICJBYnNvbHV0ZSB2YWx1ZSI7ICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEVPcFNpZ246ICAgICAgICAgICBvdXQgPDwgIlNpZ24iOyAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wRmxvb3I6ICAgICAgICAgIG91dCA8PCAiRmxvb3Ii
OyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDZWlsOiAgICAgICAgICAg
b3V0IDw8ICJDZWlsaW5nIjsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEZy
YWN0OiAgICAgICAgICBvdXQgPDwgIkZyYWN0aW9uIjsgICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgY2FzZSBFT3BMZW5ndGg6ICAgICAgICAgb3V0IDw8ICJsZW5ndGgiOyAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcE5vcm1hbGl6ZTogICAgICBvdXQgPDwgIm5vcm1h
bGl6ZSI7ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAvLwljYXNlIEVPcERQZHg6ICAg
ICAgICAgICBvdXQgPDwgImRQZHgiOyAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAvLwljYXNlIEVPcERQZHk6ICAgICAgICAgICBvdXQgPDwgImRQZHki
OyAgICAgICAgICAgICAgICAgYnJlYWs7ICAgCi0gICAgICAgICAgICAvLwljYXNlIEVPcEZ3aWR0
aDogICAgICAgICBvdXQgPDwgImZ3aWR0aCI7ICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAg
ICAgICAgICAgIAotCi0gICAgICAgIGNhc2UgRU9wQW55OiAgICAgICAgICAgIG91dCA8PCAiYW55
IjsgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BBbGw6ICAgICAgICAg
ICAgb3V0IDw8ICJhbGwiOyAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBvdXQucHJlZml4KEVQcmVmaXhFcnJvcik7Ci0gICAgICAgICAgICBv
dXQgPDwgIkJhZCB1bmFyeSBvcCI7Ci0gICAgfQotCi0gICAgb3V0IDw8ICIgKCIgPDwgbm9kZS0+
Z2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiKSI7Ci0KLSAgICBvdXQgPDwgIlxuIjsKLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0QWdncmVnYXRlKFZp
c2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQotewotICAgIFRJbmZvU2lua0Jhc2Um
IG91dCA9IHNpbms7Ci0KLSAgICBpZiAobm9kZS0+Z2V0T3AoKSA9PSBFT3BOdWxsKSB7Ci0gICAg
ICAgIG91dC5wcmVmaXgoRVByZWZpeEVycm9yKTsKLSAgICAgICAgb3V0IDw8ICJub2RlIGlzIHN0
aWxsIEVPcE51bGwhIjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgT3V0cHV0
VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7Ci0KLSAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkp
IHsKLSAgICAgICAgY2FzZSBFT3BTZXF1ZW5jZTogICAgICBvdXQgPDwgIlNlcXVlbmNlXG4iOyBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBFT3BDb21tYTogICAgICAgICBvdXQgPDwgIkNvbW1h
XG4iOyByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBFT3BGdW5jdGlvbjogICAgICBvdXQgPDwg
IkZ1bmN0aW9uIERlZmluaXRpb246ICIgPDwgbm9kZS0+Z2V0TmFtZSgpOyBicmVhazsKLSAgICAg
ICAgY2FzZSBFT3BGdW5jdGlvbkNhbGw6ICBvdXQgPDwgIkZ1bmN0aW9uIENhbGw6ICIgPDwgbm9k
ZS0+Z2V0TmFtZSgpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BQYXJhbWV0ZXJzOiAgICBvdXQg
PDwgIkZ1bmN0aW9uIFBhcmFtZXRlcnM6ICI7ICAgICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OiBvdXQgPDwgIkNvbnN0cnVjdCBmbG9hdCI7IGJyZWFr
OwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzI6ICBvdXQgPDwgIkNvbnN0cnVjdCB2ZWMy
IjsgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzM6ICBvdXQgPDwgIkNvbnN0
cnVjdCB2ZWMzIjsgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzQ6ICBvdXQg
PDwgIkNvbnN0cnVjdCB2ZWM0IjsgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJv
b2w6ICBvdXQgPDwgIkNvbnN0cnVjdCBib29sIjsgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdEJWZWMyOiBvdXQgPDwgIkNvbnN0cnVjdCBidmVjMiI7IGJyZWFrOwotICAgICAgICBj
YXNlIEVPcENvbnN0cnVjdEJWZWMzOiBvdXQgPDwgIkNvbnN0cnVjdCBidmVjMyI7IGJyZWFrOwot
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWM0OiBvdXQgPDwgIkNvbnN0cnVjdCBidmVjNCI7
IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDogICBvdXQgPDwgIkNvbnN0cnVj
dCBpbnQiOyAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMyOiBvdXQgPDwg
IkNvbnN0cnVjdCBpdmVjMiI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMz
OiBvdXQgPDwgIkNvbnN0cnVjdCBpdmVjMyI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0
cnVjdElWZWM0OiBvdXQgPDwgIkNvbnN0cnVjdCBpdmVjNCI7IGJyZWFrOwotICAgICAgICBjYXNl
IEVPcENvbnN0cnVjdE1hdDI6ICBvdXQgPDwgIkNvbnN0cnVjdCBtYXQyIjsgIGJyZWFrOwotICAg
ICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6ICBvdXQgPDwgIkNvbnN0cnVjdCBtYXQzIjsgIGJy
ZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6ICBvdXQgPDwgIkNvbnN0cnVjdCBt
YXQ0IjsgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFN0cnVjdDogIG91dCA8PCAi
Q29uc3RydWN0IHN0cnVjdHVyZSI7ICBicmVhazsKLQotICAgICAgICBjYXNlIEVPcExlc3NUaGFu
OiAgICAgICAgIG91dCA8PCAiQ29tcGFyZSBMZXNzIFRoYW4iOyAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjogICAgICBvdXQgPDwgIkNvbXBhcmUgR3JlYXRl
ciBUaGFuIjsgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDog
ICAgb3V0IDw8ICJDb21wYXJlIExlc3MgVGhhbiBvciBFcXVhbCI7ICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6IG91dCA8PCAiQ29tcGFyZSBHcmVhdGVyIFRoYW4g
b3IgRXF1YWwiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BWZWN0b3JFcXVhbDogICAgICBvdXQg
PDwgIkVxdWFsIjsgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RU9wVmVjdG9yTm90RXF1YWw6ICAgb3V0IDw8ICJOb3RFcXVhbCI7ICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wTW9kOiAgICAgICAgICAgb3V0IDw8ICJtb2Qi
OyAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFBvdzogICAgICAgICAgIG91dCA8PCAi
cG93IjsgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEVPcEF0YW46ICAgICAgICAgIG91
dCA8PCAiYXJjIHRhbmdlbnQiOyBicmVhazsKLQotICAgICAgICBjYXNlIEVPcE1pbjogICAgICAg
ICAgIG91dCA8PCAibWluIjsgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BNYXg6ICAg
ICAgICAgICBvdXQgPDwgIm1heCI7ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ2xh
bXA6ICAgICAgICAgb3V0IDw8ICJjbGFtcCI7ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVP
cE1peDogICAgICAgICAgIG91dCA8PCAibWl4IjsgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBFT3BTdGVwOiAgICAgICAgICBvdXQgPDwgInN0ZXAiOyAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRU9wU21vb3RoU3RlcDogICAgb3V0IDw8ICJzbW9vdGhzdGVwIjsgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgRU9wRGlzdGFuY2U6ICAgICAgb3V0IDw8ICJkaXN0YW5jZSI7ICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcERvdDogICAgICAgICAgIG91dCA8PCAiZG90
LXByb2R1Y3QiOyAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDcm9zczogICAg
ICAgICBvdXQgPDwgImNyb3NzLXByb2R1Y3QiOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRU9wRmFjZUZvcndhcmQ6ICAgb3V0IDw8ICJmYWNlLWZvcndhcmQiOyAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEVPcFJlZmxlY3Q6ICAgICAgIG91dCA8PCAicmVmbGVjdCI7ICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BSZWZyYWN0OiAgICAgICBvdXQg
PDwgInJlZnJhY3QiOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTXVs
OiAgICAgICAgICAgb3V0IDw8ICJjb21wb25lbnQtd2lzZSBtdWx0aXBseSI7IGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgRU9wRGVjbGFyYXRpb246ICAgb3V0IDw8ICJEZWNsYXJhdGlvbjogIjsgICBi
cmVhazsKLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgb3V0LnByZWZpeChFUHJlZml4
RXJyb3IpOwotICAgICAgICAgICAgb3V0IDw8ICJCYWQgYWdncmVnYXRpb24gb3AiOwotICAgIH0K
LQotICAgIGlmIChub2RlLT5nZXRPcCgpICE9IEVPcFNlcXVlbmNlICYmIG5vZGUtPmdldE9wKCkg
IT0gRU9wUGFyYW1ldGVycykKLSAgICAgICAgb3V0IDw8ICIgKCIgPDwgbm9kZS0+Z2V0Q29tcGxl
dGVTdHJpbmcoKSA8PCAiKSI7Ci0KLSAgICBvdXQgPDwgIlxuIjsKLQotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0
LCBUSW50ZXJtU2VsZWN0aW9uKiBub2RlKQotewotICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IHNp
bms7Ci0KLSAgICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUsIGRlcHRoKTsKLQotICAgIG91dCA8
PCAiVGVzdCBjb25kaXRpb24gYW5kIHNlbGVjdCI7Ci0gICAgb3V0IDw8ICIgKCIgPDwgbm9kZS0+
Z2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiKVxuIjsKLQotICAgICsrZGVwdGg7Ci0KLSAgICBPdXRw
dXRUcmVlVGV4dChzaW5rLCBub2RlLCBkZXB0aCk7Ci0gICAgb3V0IDw8ICJDb25kaXRpb25cbiI7
Ci0gICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOwotCi0gICAgT3V0cHV0
VHJlZVRleHQoc2luaywgbm9kZSwgZGVwdGgpOwotICAgIGlmIChub2RlLT5nZXRUcnVlQmxvY2so
KSkgewotICAgICAgICBvdXQgPDwgInRydWUgY2FzZVxuIjsKLSAgICAgICAgbm9kZS0+Z2V0VHJ1
ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOwotICAgIH0gZWxzZQotICAgICAgICBvdXQgPDwgInRy
dWUgY2FzZSBpcyBudWxsXG4iOwotCi0gICAgaWYgKG5vZGUtPmdldEZhbHNlQmxvY2soKSkgewot
ICAgICAgICBPdXRwdXRUcmVlVGV4dChzaW5rLCBub2RlLCBkZXB0aCk7Ci0gICAgICAgIG91dCA8
PCAiZmFsc2UgY2FzZVxuIjsKLSAgICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9jaygpLT50cmF2ZXJz
ZSh0aGlzKTsKLSAgICB9Ci0KLSAgICAtLWRlcHRoOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci12b2lkIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3Rh
bnRVbmlvbiogbm9kZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBzaW5rOwotCi0gICAg
c2l6ZV90IHNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOwotCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgT3V0cHV0VHJlZVRleHQo
b3V0LCBub2RlLCBkZXB0aCk7Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0VW5pb25BcnJheVBv
aW50ZXIoKVtpXS5nZXRUeXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKLSAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVtpXS5nZXRCQ29uc3Qo
KSkKLSAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJ0cnVlIjsKLSAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZmFsc2UiOwotCi0gICAgICAgICAgICAg
ICAgb3V0IDw8ICIgKCIgPDwgImNvbnN0IGJvb2wiIDw8ICIpIjsKLSAgICAgICAgICAgICAgICBv
dXQgPDwgIlxuIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRWJ0
RmxvYXQ6Ci0gICAgICAgICAgICAgICAgb3V0IDw8IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVy
KClbaV0uZ2V0RkNvbnN0KCk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIgKGNvbnN0IGZsb2F0
KVxuIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRWJ0SW50Ogot
ICAgICAgICAgICAgICAgIG91dCA8PCBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpW2ldLmdl
dElDb25zdCgpOwotICAgICAgICAgICAgICAgIG91dCA8PCAiIChjb25zdCBpbnQpXG4iOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICBvdXQubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiVW5r
bm93biBjb25zdGFudCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
fQotfQotCi1ib29sIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVElu
dGVybUxvb3AqIG5vZGUpCi17Ci0gICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gc2luazsKLQotICAg
IE91dHB1dFRyZWVUZXh0KG91dCwgbm9kZSwgZGVwdGgpOwotCi0gICAgb3V0IDw8ICJMb29wIHdp
dGggY29uZGl0aW9uICI7Ci0gICAgaWYgKG5vZGUtPmdldFR5cGUoKSA9PSBFTG9vcERvV2hpbGUp
Ci0gICAgICAgIG91dCA8PCAibm90ICI7Ci0gICAgb3V0IDw8ICJ0ZXN0ZWQgZmlyc3RcbiI7Ci0K
LSAgICArK2RlcHRoOwotCi0gICAgT3V0cHV0VHJlZVRleHQoc2luaywgbm9kZSwgZGVwdGgpOwot
ICAgIGlmIChub2RlLT5nZXRDb25kaXRpb24oKSkgewotICAgICAgICBvdXQgPDwgIkxvb3AgQ29u
ZGl0aW9uXG4iOwotICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIG91dCA8PCAiTm8gbG9vcCBjb25kaXRpb25cbiI7Ci0KLSAg
ICBPdXRwdXRUcmVlVGV4dChzaW5rLCBub2RlLCBkZXB0aCk7Ci0gICAgaWYgKG5vZGUtPmdldEJv
ZHkoKSkgewotICAgICAgICBvdXQgPDwgIkxvb3AgQm9keVxuIjsKLSAgICAgICAgbm9kZS0+Z2V0
Qm9keSgpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgb3V0IDw8ICJObyBs
b29wIGJvZHlcbiI7Ci0KLSAgICBpZiAobm9kZS0+Z2V0RXhwcmVzc2lvbigpKSB7Ci0gICAgICAg
IE91dHB1dFRyZWVUZXh0KHNpbmssIG5vZGUsIGRlcHRoKTsKLSAgICAgICAgb3V0IDw8ICJMb29w
IFRlcm1pbmFsIEV4cHJlc3Npb25cbiI7Ci0gICAgICAgIG5vZGUtPmdldEV4cHJlc3Npb24oKS0+
dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotCi0gICAgLS1kZXB0aDsKLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotYm9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwg
VEludGVybUJyYW5jaCogbm9kZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBzaW5rOwot
Ci0gICAgT3V0cHV0VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7Ci0KLSAgICBzd2l0Y2ggKG5v
ZGUtPmdldEZsb3dPcCgpKSB7Ci0gICAgICAgIGNhc2UgRU9wS2lsbDogICAgICBvdXQgPDwgIkJy
YW5jaDogS2lsbCI7ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BCcmVhazogICAg
IG91dCA8PCAiQnJhbmNoOiBCcmVhayI7ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVP
cENvbnRpbnVlOiAgb3V0IDw8ICJCcmFuY2g6IENvbnRpbnVlIjsgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRU9wUmV0dXJuOiAgICBvdXQgPDwgIkJyYW5jaDogUmV0dXJuIjsgICAgICAgICBi
cmVhazsKLSAgICAgICAgZGVmYXVsdDogICAgICAgICAgIG91dCA8PCAiQnJhbmNoOiBVbmtub3du
IEJyYW5jaCI7IGJyZWFrOwotICAgIH0KLQotICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkp
IHsKLSAgICAgICAgb3V0IDw8ICIgd2l0aCBleHByZXNzaW9uXG4iOwotICAgICAgICArK2RlcHRo
OwotICAgICAgICBub2RlLT5nZXRFeHByZXNzaW9uKCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAg
ICAtLWRlcHRoOwotICAgIH0gZWxzZQotICAgICAgICBvdXQgPDwgIlxuIjsKLQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotLy8KLS8vIFRoaXMgZnVuY3Rpb24gaXMgdGhlIG9uZSB0byBjYWxsIGV4
dGVybmFsbHkgdG8gc3RhcnQgdGhlIHRyYXZlcnNhbC4KLS8vIEluZGl2aWR1YWwgZnVuY3Rpb25z
IGNhbiBiZSBpbml0aWFsaXplZCB0byAwIHRvIHNraXAgcHJvY2Vzc2luZyBvZiB0aGF0Ci0vLyB0
eXBlIG9mIG5vZGUuICBJdCdzIGNoaWxkcmVuIHdpbGwgc3RpbGwgYmUgcHJvY2Vzc2VkLgotLy8K
LXZvaWQgVEludGVybWVkaWF0ZTo6b3V0cHV0VHJlZShUSW50ZXJtTm9kZSogcm9vdCkKLXsKLSAg
ICBpZiAocm9vdCA9PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBUT3V0cHV0VHJhdmVyc2Vy
IGl0KGluZm9TaW5rLmluZm8pOwotCi0gICAgcm9vdC0+dHJhdmVyc2UoJml0KTsKLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRlMzlmZDU2MmRjMDQ1NTQxYzMxZmM0MzE5
MDYzYjUwNjAyMDk5Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw2MzUgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8K
LS8vIERlZmluaXRpb24gb2YgdGhlIGluLW1lbW9yeSBoaWdoLWxldmVsIGludGVybWVkaWF0ZSBy
ZXByZXNlbnRhdGlvbgotLy8gb2Ygc2hhZGVycy4gIFRoaXMgaXMgYSB0cmVlIHRoYXQgcGFyc2Vy
IGNyZWF0ZXMuCi0vLwotLy8gTm9kZXMgaW4gdGhlIHRyZWUgYXJlIGRlZmluZWQgYXMgYSBoaWVy
YXJjaHkgb2YgY2xhc3NlcyBkZXJpdmVkIGZyb20gCi0vLyBUSW50ZXJtTm9kZS4gRWFjaCBpcyBh
IG5vZGUgaW4gYSB0cmVlLiAgVGhlcmUgaXMgbm8gcHJlc2V0IGJyYW5jaGluZyBmYWN0b3I7Ci0v
LyBlYWNoIG5vZGUgY2FuIGhhdmUgaXQncyBvd24gdHlwZSBvZiBsaXN0IG9mIGNoaWxkcmVuLgot
Ly8KLQotI2lmbmRlZiBfX0lOVEVSTUVESUFURV9ICi0jZGVmaW5lIF9fSU5URVJNRURJQVRFX0gK
LQotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgotCi0jaW5jbHVkZSA8YWxnb3JpdGht
PgotI2luY2x1ZGUgImNvbXBpbGVyL0NvbW1vbi5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1R5cGVz
LmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvQ29uc3RhbnRVbmlvbi5oIgotCi0vLwotLy8gT3BlcmF0
b3JzIHVzZWQgYnkgdGhlIGhpZ2gtbGV2ZWwgKHBhcnNlIHRyZWUpIHJlcHJlc2VudGF0aW9uLgot
Ly8KLWVudW0gVE9wZXJhdG9yIHsKLSAgICBFT3BOdWxsLCAgICAgICAgICAgIC8vIGlmIGluIGEg
bm9kZSwgc2hvdWxkIG9ubHkgbWVhbiBhIG5vZGUgaXMgc3RpbGwgYmVpbmcgYnVpbHQKLSAgICBF
T3BTZXF1ZW5jZSwgICAgICAgIC8vIGRlbm90ZXMgYSBsaXN0IG9mIHN0YXRlbWVudHMsIG9yIHBh
cmFtZXRlcnMsIGV0Yy4KLSAgICBFT3BGdW5jdGlvbkNhbGwsICAgIAotICAgIEVPcEZ1bmN0aW9u
LCAgICAgICAgLy8gRm9yIGZ1bmN0aW9uIGRlZmluaXRpb24KLSAgICBFT3BQYXJhbWV0ZXJzLCAg
ICAgIC8vIGFuIGFnZ3JlZ2F0ZSBsaXN0aW5nIHRoZSBwYXJhbWV0ZXJzIHRvIGEgZnVuY3Rpb24K
LQotICAgIEVPcERlY2xhcmF0aW9uLAotICAgIEVPcFByb3RvdHlwZSwKLQotICAgIC8vCi0gICAg
Ly8gVW5hcnkgb3BlcmF0b3JzCi0gICAgLy8KLQotICAgIEVPcE5lZ2F0aXZlLAotICAgIEVPcExv
Z2ljYWxOb3QsCi0gICAgRU9wVmVjdG9yTG9naWNhbE5vdCwKLQotICAgIEVPcFBvc3RJbmNyZW1l
bnQsCi0gICAgRU9wUG9zdERlY3JlbWVudCwKLSAgICBFT3BQcmVJbmNyZW1lbnQsCi0gICAgRU9w
UHJlRGVjcmVtZW50LAotCi0gICAgRU9wQ29udkludFRvQm9vbCwKLSAgICBFT3BDb252RmxvYXRU
b0Jvb2wsCi0gICAgRU9wQ29udkJvb2xUb0Zsb2F0LAotICAgIEVPcENvbnZJbnRUb0Zsb2F0LAot
ICAgIEVPcENvbnZGbG9hdFRvSW50LAotICAgIEVPcENvbnZCb29sVG9JbnQsCi0KLSAgICAvLwot
ICAgIC8vIGJpbmFyeSBvcGVyYXRpb25zCi0gICAgLy8KLQotICAgIEVPcEFkZCwKLSAgICBFT3BT
dWIsCi0gICAgRU9wTXVsLAotICAgIEVPcERpdiwKLSAgICBFT3BFcXVhbCwKLSAgICBFT3BOb3RF
cXVhbCwKLSAgICBFT3BWZWN0b3JFcXVhbCwKLSAgICBFT3BWZWN0b3JOb3RFcXVhbCwKLSAgICBF
T3BMZXNzVGhhbiwKLSAgICBFT3BHcmVhdGVyVGhhbiwKLSAgICBFT3BMZXNzVGhhbkVxdWFsLAot
ICAgIEVPcEdyZWF0ZXJUaGFuRXF1YWwsCi0gICAgRU9wQ29tbWEsCi0KLSAgICBFT3BWZWN0b3JU
aW1lc1NjYWxhciwKLSAgICBFT3BWZWN0b3JUaW1lc01hdHJpeCwKLSAgICBFT3BNYXRyaXhUaW1l
c1ZlY3RvciwKLSAgICBFT3BNYXRyaXhUaW1lc1NjYWxhciwKLQotICAgIEVPcExvZ2ljYWxPciwK
LSAgICBFT3BMb2dpY2FsWG9yLAotICAgIEVPcExvZ2ljYWxBbmQsCi0KLSAgICBFT3BJbmRleERp
cmVjdCwKLSAgICBFT3BJbmRleEluZGlyZWN0LAotICAgIEVPcEluZGV4RGlyZWN0U3RydWN0LAot
Ci0gICAgRU9wVmVjdG9yU3dpenpsZSwKLQotICAgIC8vCi0gICAgLy8gQnVpbHQtaW4gZnVuY3Rp
b25zIHBvdGVudGlhbGx5IG1hcHBlZCB0byBvcGVyYXRvcnMKLSAgICAvLwotCi0gICAgRU9wUmFk
aWFucywKLSAgICBFT3BEZWdyZWVzLAotICAgIEVPcFNpbiwKLSAgICBFT3BDb3MsCi0gICAgRU9w
VGFuLAotICAgIEVPcEFzaW4sCi0gICAgRU9wQWNvcywKLSAgICBFT3BBdGFuLAotCi0gICAgRU9w
UG93LAotICAgIEVPcEV4cCwKLSAgICBFT3BMb2csCi0gICAgRU9wRXhwMiwKLSAgICBFT3BMb2cy
LAotICAgIEVPcFNxcnQsCi0gICAgRU9wSW52ZXJzZVNxcnQsCi0KLSAgICBFT3BBYnMsCi0gICAg
RU9wU2lnbiwKLSAgICBFT3BGbG9vciwKLSAgICBFT3BDZWlsLAotICAgIEVPcEZyYWN0LAotICAg
IEVPcE1vZCwKLSAgICBFT3BNaW4sCi0gICAgRU9wTWF4LAotICAgIEVPcENsYW1wLAotICAgIEVP
cE1peCwKLSAgICBFT3BTdGVwLAotICAgIEVPcFNtb290aFN0ZXAsCi0KLSAgICBFT3BMZW5ndGgs
Ci0gICAgRU9wRGlzdGFuY2UsCi0gICAgRU9wRG90LAotICAgIEVPcENyb3NzLAotICAgIEVPcE5v
cm1hbGl6ZSwKLSAgICBFT3BGYWNlRm9yd2FyZCwKLSAgICBFT3BSZWZsZWN0LAotICAgIEVPcFJl
ZnJhY3QsCi0KLSAgICBFT3BERmR4LCAgICAgICAgICAgIC8vIEZyYWdtZW50IG9ubHksIE9FU19z
dGFuZGFyZF9kZXJpdmF0aXZlcyBleHRlbnNpb24KLSAgICBFT3BERmR5LCAgICAgICAgICAgIC8v
IEZyYWdtZW50IG9ubHksIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyBleHRlbnNpb24KLSAgICBF
T3BGd2lkdGgsICAgICAgICAgIC8vIEZyYWdtZW50IG9ubHksIE9FU19zdGFuZGFyZF9kZXJpdmF0
aXZlcyBleHRlbnNpb24KLQotICAgIEVPcE1hdHJpeFRpbWVzTWF0cml4LAotCi0gICAgRU9wQW55
LAotICAgIEVPcEFsbCwKLQotICAgIC8vCi0gICAgLy8gQnJhbmNoCi0gICAgLy8KLQotICAgIEVP
cEtpbGwsICAgICAgICAgICAgLy8gRnJhZ21lbnQgb25seQotICAgIEVPcFJldHVybiwKLSAgICBF
T3BCcmVhaywKLSAgICBFT3BDb250aW51ZSwKLQotICAgIC8vCi0gICAgLy8gQ29uc3RydWN0b3Jz
Ci0gICAgLy8KLQotICAgIEVPcENvbnN0cnVjdEludCwKLSAgICBFT3BDb25zdHJ1Y3RCb29sLAot
ICAgIEVPcENvbnN0cnVjdEZsb2F0LAotICAgIEVPcENvbnN0cnVjdFZlYzIsCi0gICAgRU9wQ29u
c3RydWN0VmVjMywKLSAgICBFT3BDb25zdHJ1Y3RWZWM0LAotICAgIEVPcENvbnN0cnVjdEJWZWMy
LAotICAgIEVPcENvbnN0cnVjdEJWZWMzLAotICAgIEVPcENvbnN0cnVjdEJWZWM0LAotICAgIEVP
cENvbnN0cnVjdElWZWMyLAotICAgIEVPcENvbnN0cnVjdElWZWMzLAotICAgIEVPcENvbnN0cnVj
dElWZWM0LAotICAgIEVPcENvbnN0cnVjdE1hdDIsCi0gICAgRU9wQ29uc3RydWN0TWF0MywKLSAg
ICBFT3BDb25zdHJ1Y3RNYXQ0LAotICAgIEVPcENvbnN0cnVjdFN0cnVjdCwKLQotICAgIC8vCi0g
ICAgLy8gbW92ZXMKLSAgICAvLwotCi0gICAgRU9wQXNzaWduLAotICAgIEVPcEluaXRpYWxpemUs
Ci0gICAgRU9wQWRkQXNzaWduLAotICAgIEVPcFN1YkFzc2lnbiwKLSAgICBFT3BNdWxBc3NpZ24s
Ci0gICAgRU9wVmVjdG9yVGltZXNNYXRyaXhBc3NpZ24sCi0gICAgRU9wVmVjdG9yVGltZXNTY2Fs
YXJBc3NpZ24sCi0gICAgRU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ24sCi0gICAgRU9wTWF0cml4
VGltZXNNYXRyaXhBc3NpZ24sCi0gICAgRU9wRGl2QXNzaWduCi19OwotCi1leHRlcm4gY29uc3Qg
Y2hhciogZ2V0T3BlcmF0b3JTdHJpbmcoVE9wZXJhdG9yIG9wKTsKLQotY2xhc3MgVEludGVybVRy
YXZlcnNlcjsKLWNsYXNzIFRJbnRlcm1BZ2dyZWdhdGU7Ci1jbGFzcyBUSW50ZXJtQmluYXJ5Owot
Y2xhc3MgVEludGVybVVuYXJ5OwotY2xhc3MgVEludGVybUNvbnN0YW50VW5pb247Ci1jbGFzcyBU
SW50ZXJtU2VsZWN0aW9uOwotY2xhc3MgVEludGVybVR5cGVkOwotY2xhc3MgVEludGVybVN5bWJv
bDsKLWNsYXNzIFRJbnRlcm1Mb29wOwotY2xhc3MgVEluZm9TaW5rOwotCi0vLwotLy8gQmFzZSBj
bGFzcyBmb3IgdGhlIHRyZWUgbm9kZXMKLS8vCi1jbGFzcyBUSW50ZXJtTm9kZSB7Ci1wdWJsaWM6
Ci0gICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSgpOwotICAgIFRJbnRlcm1Ob2RlKCkgewot
ICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgdG8gVFNvdXJjZUxvYyBjb25zdHJ1Y3RvcgotICAg
ICAgICAvLyBhZnRlciBnZXR0aW5nIHJpZCBvZiBUUHVibGljVHlwZS4KLSAgICAgICAgbGluZS5m
aXJzdF9maWxlID0gbGluZS5sYXN0X2ZpbGUgPSAwOwotICAgICAgICBsaW5lLmZpcnN0X2xpbmUg
PSBsaW5lLmxhc3RfbGluZSA9IDA7Ci0gICAgfQotICAgIHZpcnR1YWwgflRJbnRlcm1Ob2RlKCkg
eyB9Ci0KLSAgICBjb25zdCBUU291cmNlTG9jJiBnZXRMaW5lKCkgY29uc3QgeyByZXR1cm4gbGlu
ZTsgfQotICAgIHZvaWQgc2V0TGluZShjb25zdCBUU291cmNlTG9jJiBsKSB7IGxpbmUgPSBsOyB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopID0gMDsKLSAg
ICB2aXJ0dWFsIFRJbnRlcm1UeXBlZCogZ2V0QXNUeXBlZCgpIHsgcmV0dXJuIDA7IH0KLSAgICB2
aXJ0dWFsIFRJbnRlcm1Db25zdGFudFVuaW9uKiBnZXRBc0NvbnN0YW50VW5pb24oKSB7IHJldHVy
biAwOyB9Ci0gICAgdmlydHVhbCBUSW50ZXJtQWdncmVnYXRlKiBnZXRBc0FnZ3JlZ2F0ZSgpIHsg
cmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIFRJbnRlcm1CaW5hcnkqIGdldEFzQmluYXJ5Tm9kZSgp
IHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIFRJbnRlcm1VbmFyeSogZ2V0QXNVbmFyeU5vZGUo
KSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBUSW50ZXJtU2VsZWN0aW9uKiBnZXRBc1NlbGVj
dGlvbk5vZGUoKSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBUSW50ZXJtU3ltYm9sKiBnZXRB
c1N5bWJvbE5vZGUoKSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBUSW50ZXJtTG9vcCogZ2V0
QXNMb29wTm9kZSgpIHsgcmV0dXJuIDA7IH0KLQotICAgIC8vIFJlcGxhY2UgYSBjaGlsZCBub2Rl
LiBSZXR1cm4gdHJ1ZSBpZiB8b3JpZ2luYWx8IGlzIGEgY2hpbGQKLSAgICAvLyBub2RlIGFuZCBp
dCBpcyByZXBsYWNlZDsgb3RoZXJ3aXNlLCByZXR1cm4gZmFsc2UuCi0gICAgdmlydHVhbCBib29s
IHJlcGxhY2VDaGlsZE5vZGUoCi0gICAgICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVy
bU5vZGUgKnJlcGxhY2VtZW50KSA9IDA7Ci0KLXByb3RlY3RlZDoKLSAgICBUU291cmNlTG9jIGxp
bmU7Ci19OwotCi0vLwotLy8gVGhpcyBpcyBqdXN0IHRvIGhlbHAgeWFjYy4KLS8vCi1zdHJ1Y3Qg
VEludGVybU5vZGVQYWlyIHsKLSAgICBUSW50ZXJtTm9kZSogbm9kZTE7Ci0gICAgVEludGVybU5v
ZGUqIG5vZGUyOwotfTsKLQotLy8KLS8vIEludGVybWVkaWF0ZSBjbGFzcyBmb3Igbm9kZXMgdGhh
dCBoYXZlIGEgdHlwZS4KLS8vCi1jbGFzcyBUSW50ZXJtVHlwZWQgOiBwdWJsaWMgVEludGVybU5v
ZGUgewotcHVibGljOgotICAgIFRJbnRlcm1UeXBlZChjb25zdCBUVHlwZSYgdCkgOiB0eXBlKHQp
ICB7IH0KLSAgICB2aXJ0dWFsIFRJbnRlcm1UeXBlZCogZ2V0QXNUeXBlZCgpIHsgcmV0dXJuIHRo
aXM7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBoYXNTaWRlRWZmZWN0cygpIGNvbnN0ID0gMDsKLQot
ICAgIHZvaWQgc2V0VHlwZShjb25zdCBUVHlwZSYgdCkgeyB0eXBlID0gdDsgfQotICAgIGNvbnN0
IFRUeXBlJiBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZTsgfQotICAgIFRUeXBlKiBnZXRU
eXBlUG9pbnRlcigpIHsgcmV0dXJuICZ0eXBlOyB9Ci0KLSAgICBUQmFzaWNUeXBlIGdldEJhc2lj
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0QmFzaWNUeXBlKCk7IH0KLSAgICBUUXVhbGlm
aWVyIGdldFF1YWxpZmllcigpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0UXVhbGlmaWVyKCk7IH0K
LSAgICBUUHJlY2lzaW9uIGdldFByZWNpc2lvbigpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0UHJl
Y2lzaW9uKCk7IH0KLSAgICBpbnQgZ2V0Tm9taW5hbFNpemUoKSBjb25zdCB7IHJldHVybiB0eXBl
LmdldE5vbWluYWxTaXplKCk7IH0KLSAgICAKLSAgICBib29sIGlzTWF0cml4KCkgY29uc3QgeyBy
ZXR1cm4gdHlwZS5pc01hdHJpeCgpOyB9Ci0gICAgYm9vbCBpc0FycmF5KCkgIGNvbnN0IHsgcmV0
dXJuIHR5cGUuaXNBcnJheSgpOyB9Ci0gICAgYm9vbCBpc1ZlY3RvcigpIGNvbnN0IHsgcmV0dXJu
IHR5cGUuaXNWZWN0b3IoKTsgfQotICAgIGJvb2wgaXNTY2FsYXIoKSBjb25zdCB7IHJldHVybiB0
eXBlLmlzU2NhbGFyKCk7IH0KLSAgICBjb25zdCBjaGFyKiBnZXRCYXNpY1N0cmluZygpIGNvbnN0
IHsgcmV0dXJuIHR5cGUuZ2V0QmFzaWNTdHJpbmcoKTsgfQotICAgIGNvbnN0IGNoYXIqIGdldFF1
YWxpZmllclN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0UXVhbGlmaWVyU3RyaW5nKCk7
IH0KLSAgICBUU3RyaW5nIGdldENvbXBsZXRlU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gdHlwZS5n
ZXRDb21wbGV0ZVN0cmluZygpOyB9Ci0KLSAgICBpbnQgdG90YWxSZWdpc3RlckNvdW50KCkgY29u
c3QgeyByZXR1cm4gdHlwZS50b3RhbFJlZ2lzdGVyQ291bnQoKTsgfQotICAgIGludCBlbGVtZW50
UmVnaXN0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZWxlbWVudFJlZ2lzdGVyQ291bnQo
KTsgfQotICAgIGludCBnZXRBcnJheVNpemUoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldEFycmF5
U2l6ZSgpOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBUVHlwZSB0eXBlOwotfTsKLQotLy8KLS8vIEhh
bmRsZSBmb3IsIGRvLXdoaWxlLCBhbmQgd2hpbGUgbG9vcHMuCi0vLwotZW51bSBUTG9vcFR5cGUg
ewotICAgIEVMb29wRm9yLAotICAgIEVMb29wV2hpbGUsCi0gICAgRUxvb3BEb1doaWxlCi19Owot
Ci1jbGFzcyBUSW50ZXJtTG9vcCA6IHB1YmxpYyBUSW50ZXJtTm9kZSB7Ci1wdWJsaWM6Ci0gICAg
VEludGVybUxvb3AoVExvb3BUeXBlIGFUeXBlLAotICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2Rl
ICphSW5pdCwgVEludGVybVR5cGVkKiBhQ29uZCwgVEludGVybVR5cGVkKiBhRXhwciwKLSAgICAg
ICAgICAgICAgICBUSW50ZXJtTm9kZSogYUJvZHkpIDoKLSAgICAgICAgICAgIHR5cGUoYVR5cGUp
LAotICAgICAgICAgICAgaW5pdChhSW5pdCksCi0gICAgICAgICAgICBjb25kKGFDb25kKSwKLSAg
ICAgICAgICAgIGV4cHIoYUV4cHIpLAotICAgICAgICAgICAgYm9keShhQm9keSksCi0gICAgICAg
ICAgICB1bnJvbGxGbGFnKGZhbHNlKSB7IH0KLQotICAgIHZpcnR1YWwgVEludGVybUxvb3AqIGdl
dEFzTG9vcE5vZGUoKSB7IHJldHVybiB0aGlzOyB9Ci0gICAgdmlydHVhbCB2b2lkIHRyYXZlcnNl
KFRJbnRlcm1UcmF2ZXJzZXIqKTsKLSAgICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxkTm9kZSgK
LSAgICAgICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFjZW1lbnQp
OwotCi0gICAgVExvb3BUeXBlIGdldFR5cGUoKSBjb25zdCB7IHJldHVybiB0eXBlOyB9Ci0gICAg
VEludGVybU5vZGUqIGdldEluaXQoKSB7IHJldHVybiBpbml0OyB9Ci0gICAgVEludGVybVR5cGVk
KiBnZXRDb25kaXRpb24oKSB7IHJldHVybiBjb25kOyB9Ci0gICAgVEludGVybVR5cGVkKiBnZXRF
eHByZXNzaW9uKCkgeyByZXR1cm4gZXhwcjsgfQotICAgIFRJbnRlcm1Ob2RlKiBnZXRCb2R5KCkg
eyByZXR1cm4gYm9keTsgfQotCi0gICAgdm9pZCBzZXRVbnJvbGxGbGFnKGJvb2wgZmxhZykgeyB1
bnJvbGxGbGFnID0gZmxhZzsgfQotICAgIGJvb2wgZ2V0VW5yb2xsRmxhZygpIHsgcmV0dXJuIHVu
cm9sbEZsYWc7IH0KLQotcHJvdGVjdGVkOgotICAgIFRMb29wVHlwZSB0eXBlOwotICAgIFRJbnRl
cm1Ob2RlKiBpbml0OyAgLy8gZm9yLWxvb3AgaW5pdGlhbGl6YXRpb24KLSAgICBUSW50ZXJtVHlw
ZWQqIGNvbmQ7IC8vIGxvb3AgZXhpdCBjb25kaXRpb24KLSAgICBUSW50ZXJtVHlwZWQqIGV4cHI7
IC8vIGZvci1sb29wIGV4cHJlc3Npb24KLSAgICBUSW50ZXJtTm9kZSogYm9keTsgIC8vIGxvb3Ag
Ym9keQotCi0gICAgYm9vbCB1bnJvbGxGbGFnOyAvLyBXaGV0aGVyIHRoZSBsb29wIHNob3VsZCBi
ZSB1bnJvbGxlZCBvciBub3QuCi19OwotCi0vLwotLy8gSGFuZGxlIGJyZWFrLCBjb250aW51ZSwg
cmV0dXJuLCBhbmQga2lsbC4KLS8vCi1jbGFzcyBUSW50ZXJtQnJhbmNoIDogcHVibGljIFRJbnRl
cm1Ob2RlIHsKLXB1YmxpYzoKLSAgICBUSW50ZXJtQnJhbmNoKFRPcGVyYXRvciBvcCwgVEludGVy
bVR5cGVkKiBlKSA6Ci0gICAgICAgICAgICBmbG93T3Aob3ApLAotICAgICAgICAgICAgZXhwcmVz
c2lvbihlKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2Vy
Kik7Ci0gICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGlsZE5vZGUoCi0gICAgICAgIFRJbnRlcm1O
b2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KTsKLQotICAgIFRPcGVyYXRv
ciBnZXRGbG93T3AoKSB7IHJldHVybiBmbG93T3A7IH0KLSAgICBUSW50ZXJtVHlwZWQqIGdldEV4
cHJlc3Npb24oKSB7IHJldHVybiBleHByZXNzaW9uOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBUT3Bl
cmF0b3IgZmxvd09wOwotICAgIFRJbnRlcm1UeXBlZCogZXhwcmVzc2lvbjsgIC8vIG5vbi16ZXJv
IGV4Y2VwdCBmb3IgInJldHVybiBleHA7IiBzdGF0ZW1lbnRzCi19OwotCi0vLwotLy8gTm9kZXMg
dGhhdCBjb3JyZXNwb25kIHRvIHN5bWJvbHMgb3IgY29uc3RhbnRzIGluIHRoZSBzb3VyY2UgY29k
ZS4KLS8vCi1jbGFzcyBUSW50ZXJtU3ltYm9sIDogcHVibGljIFRJbnRlcm1UeXBlZCB7Ci1wdWJs
aWM6Ci0gICAgLy8gaWYgc3ltYm9sIGlzIGluaXRpYWxpemVkIGFzIHN5bWJvbChzeW0pLCB0aGUg
bWVtb3J5IGNvbWVzIGZyb20gdGhlIHBvb2xhbGxvY2F0b3Igb2Ygc3ltLiBJZiBzeW0gY29tZXMg
ZnJvbQotICAgIC8vIHBlciBwcm9jZXNzIGdsb2JhbHBvb2xhbGxvY2F0b3IsIHRoZW4gaXQgY2F1
c2VzIGluY3JlYXNlZCBtZW1vcnkgdXNhZ2UgcGVyIGNvbXBpbGUKLSAgICAvLyBpdCBpcyBlc3Nl
bnRpYWwgdG8gdXNlICJzeW1ib2wgPSBzeW0iIHRvIGFzc2lnbiB0byBzeW1ib2wKLSAgICBUSW50
ZXJtU3ltYm9sKGludCBpLCBjb25zdCBUU3RyaW5nJiBzeW0sIGNvbnN0IFRUeXBlJiB0KSA6IAot
ICAgICAgICAgICAgVEludGVybVR5cGVkKHQpLCBpZChpKSAgeyBzeW1ib2wgPSBzeW07IG9yaWdp
bmFsU3ltYm9sID0gc3ltOyB9IAotCi0gICAgdmlydHVhbCBib29sIGhhc1NpZGVFZmZlY3RzKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIGludCBnZXRJZCgpIGNvbnN0IHsgcmV0dXJu
IGlkOyB9Ci0gICAgY29uc3QgVFN0cmluZyYgZ2V0U3ltYm9sKCkgY29uc3QgeyByZXR1cm4gc3lt
Ym9sOyB9Ci0KLSAgICB2b2lkIHNldElkKGludCBuZXdJZCkgeyBpZCA9IG5ld0lkOyB9Ci0gICAg
dm9pZCBzZXRTeW1ib2woY29uc3QgVFN0cmluZyYgc3ltKSB7IHN5bWJvbCA9IHN5bTsgfQotCi0g
ICAgY29uc3QgVFN0cmluZyYgZ2V0T3JpZ2luYWxTeW1ib2woKSBjb25zdCB7IHJldHVybiBvcmln
aW5hbFN5bWJvbDsgfQotCi0gICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJz
ZXIqKTsKLSAgICB2aXJ0dWFsIFRJbnRlcm1TeW1ib2wqIGdldEFzU3ltYm9sTm9kZSgpIHsgcmV0
dXJuIHRoaXM7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxkTm9kZShUSW50ZXJtTm9k
ZSAqLCBUSW50ZXJtTm9kZSAqKSB7IHJldHVybiBmYWxzZTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAg
aW50IGlkOwotICAgIFRTdHJpbmcgc3ltYm9sOwotICAgIFRTdHJpbmcgb3JpZ2luYWxTeW1ib2w7
Ci19OwotCi1jbGFzcyBUSW50ZXJtQ29uc3RhbnRVbmlvbiA6IHB1YmxpYyBUSW50ZXJtVHlwZWQg
ewotcHVibGljOgotICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKENvbnN0YW50VW5pb24gKnVuaW9u
UG9pbnRlciwgY29uc3QgVFR5cGUmIHQpIDogVEludGVybVR5cGVkKHQpLCB1bmlvbkFycmF5UG9p
bnRlcih1bmlvblBvaW50ZXIpIHsgfQotCi0gICAgdmlydHVhbCBib29sIGhhc1NpZGVFZmZlY3Rz
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIENvbnN0YW50VW5pb24qIGdldFVuaW9u
QXJyYXlQb2ludGVyKCkgY29uc3QgeyByZXR1cm4gdW5pb25BcnJheVBvaW50ZXI7IH0KLSAgICAK
LSAgICBpbnQgZ2V0SUNvbnN0KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gdW5pb25BcnJheVBv
aW50ZXIgPyB1bmlvbkFycmF5UG9pbnRlcltpbmRleF0uZ2V0SUNvbnN0KCkgOiAwOyB9Ci0gICAg
ZmxvYXQgZ2V0RkNvbnN0KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gdW5pb25BcnJheVBvaW50
ZXIgPyB1bmlvbkFycmF5UG9pbnRlcltpbmRleF0uZ2V0RkNvbnN0KCkgOiAwLjBmOyB9Ci0gICAg
Ym9vbCBnZXRCQ29uc3QoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiB1bmlvbkFycmF5UG9pbnRl
ciA/IHVuaW9uQXJyYXlQb2ludGVyW2luZGV4XS5nZXRCQ29uc3QoKSA6IGZhbHNlOyB9Ci0KLSAg
ICB2aXJ0dWFsIFRJbnRlcm1Db25zdGFudFVuaW9uKiBnZXRBc0NvbnN0YW50VW5pb24oKSAgeyBy
ZXR1cm4gdGhpczsgfQotICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2Vy
Kik7Ci0gICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGlsZE5vZGUoVEludGVybU5vZGUgKiwgVElu
dGVybU5vZGUgKikgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIFRJbnRlcm1UeXBlZCogZm9sZChU
T3BlcmF0b3IsIFRJbnRlcm1UeXBlZCosIFRJbmZvU2luayYpOwotCi1wcm90ZWN0ZWQ6Ci0gICAg
Q29uc3RhbnRVbmlvbiAqdW5pb25BcnJheVBvaW50ZXI7Ci19OwotCi0vLwotLy8gSW50ZXJtZWRp
YXRlIGNsYXNzIGZvciBub2RlIHR5cGVzIHRoYXQgaG9sZCBvcGVyYXRvcnMuCi0vLwotY2xhc3Mg
VEludGVybU9wZXJhdG9yIDogcHVibGljIFRJbnRlcm1UeXBlZCB7Ci1wdWJsaWM6Ci0gICAgVE9w
ZXJhdG9yIGdldE9wKCkgY29uc3QgeyByZXR1cm4gb3A7IH0KLSAgICB2b2lkIHNldE9wKFRPcGVy
YXRvciBvKSB7IG9wID0gbzsgfQotCi0gICAgYm9vbCBpc0Fzc2lnbm1lbnQoKSBjb25zdDsKLSAg
ICBib29sIGlzQ29uc3RydWN0b3IoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgYm9vbCBoYXNTaWRl
RWZmZWN0cygpIGNvbnN0IHsgcmV0dXJuIGlzQXNzaWdubWVudCgpOyB9Ci0KLXByb3RlY3RlZDoK
LSAgICBUSW50ZXJtT3BlcmF0b3IoVE9wZXJhdG9yIG8pIDogVEludGVybVR5cGVkKFRUeXBlKEVi
dEZsb2F0LCBFYnBVbmRlZmluZWQpKSwgb3Aobykge30KLSAgICBUSW50ZXJtT3BlcmF0b3IoVE9w
ZXJhdG9yIG8sIFRUeXBlJiB0KSA6IFRJbnRlcm1UeXBlZCh0KSwgb3Aobykge30gICAKLSAgICBU
T3BlcmF0b3Igb3A7Ci19OwotCi0vLwotLy8gTm9kZXMgZm9yIGFsbCB0aGUgYmFzaWMgYmluYXJ5
IG1hdGggb3BlcmF0b3JzLgotLy8KLWNsYXNzIFRJbnRlcm1CaW5hcnkgOiBwdWJsaWMgVEludGVy
bU9wZXJhdG9yIHsKLXB1YmxpYzoKLSAgICBUSW50ZXJtQmluYXJ5KFRPcGVyYXRvciBvKSA6IFRJ
bnRlcm1PcGVyYXRvcihvKSwgYWRkSW5kZXhDbGFtcChmYWxzZSkge30KLQotICAgIHZpcnR1YWwg
VEludGVybUJpbmFyeSogZ2V0QXNCaW5hcnlOb2RlKCkgeyByZXR1cm4gdGhpczsgfQotICAgIHZp
cnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7Ci0gICAgdmlydHVhbCBib29s
IHJlcGxhY2VDaGlsZE5vZGUoCi0gICAgICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVy
bU5vZGUgKnJlcGxhY2VtZW50KTsKLQotICAgIHZpcnR1YWwgYm9vbCBoYXNTaWRlRWZmZWN0cygp
IGNvbnN0IHsgcmV0dXJuIChpc0Fzc2lnbm1lbnQoKSB8fCBsZWZ0LT5oYXNTaWRlRWZmZWN0cygp
IHx8IHJpZ2h0LT5oYXNTaWRlRWZmZWN0cygpKTsgfQotCi0gICAgdm9pZCBzZXRMZWZ0KFRJbnRl
cm1UeXBlZCogbikgeyBsZWZ0ID0gbjsgfQotICAgIHZvaWQgc2V0UmlnaHQoVEludGVybVR5cGVk
KiBuKSB7IHJpZ2h0ID0gbjsgfQotICAgIFRJbnRlcm1UeXBlZCogZ2V0TGVmdCgpIGNvbnN0IHsg
cmV0dXJuIGxlZnQ7IH0KLSAgICBUSW50ZXJtVHlwZWQqIGdldFJpZ2h0KCkgY29uc3QgeyByZXR1
cm4gcmlnaHQ7IH0KLSAgICBib29sIHByb21vdGUoVEluZm9TaW5rJik7Ci0KLSAgICB2b2lkIHNl
dEFkZEluZGV4Q2xhbXAoKSB7IGFkZEluZGV4Q2xhbXAgPSB0cnVlOyB9Ci0gICAgYm9vbCBnZXRB
ZGRJbmRleENsYW1wKCkgeyByZXR1cm4gYWRkSW5kZXhDbGFtcDsgfQotCi1wcm90ZWN0ZWQ6Ci0g
ICAgVEludGVybVR5cGVkKiBsZWZ0OwotICAgIFRJbnRlcm1UeXBlZCogcmlnaHQ7Ci0KLSAgICAv
LyBJZiBzZXQgdG8gdHJ1ZSwgd3JhcCBhbnkgRU9wSW5kZXhJbmRpcmVjdCB3aXRoIGEgY2xhbXAg
dG8gYm91bmRzLgotICAgIGJvb2wgYWRkSW5kZXhDbGFtcDsKLX07Ci0KLS8vCi0vLyBOb2RlcyBm
b3IgdW5hcnkgbWF0aCBvcGVyYXRvcnMuCi0vLwotY2xhc3MgVEludGVybVVuYXJ5IDogcHVibGlj
IFRJbnRlcm1PcGVyYXRvciB7Ci1wdWJsaWM6Ci0gICAgVEludGVybVVuYXJ5KFRPcGVyYXRvciBv
LCBUVHlwZSYgdCkgOiBUSW50ZXJtT3BlcmF0b3IobywgdCksIG9wZXJhbmQoMCksIHVzZUVtdWxh
dGVkRnVuY3Rpb24oZmFsc2UpIHt9Ci0gICAgVEludGVybVVuYXJ5KFRPcGVyYXRvciBvKSA6IFRJ
bnRlcm1PcGVyYXRvcihvKSwgb3BlcmFuZCgwKSwgdXNlRW11bGF0ZWRGdW5jdGlvbihmYWxzZSkg
e30KLQotICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7Ci0gICAg
dmlydHVhbCBUSW50ZXJtVW5hcnkqIGdldEFzVW5hcnlOb2RlKCkgeyByZXR1cm4gdGhpczsgfQot
ICAgIHZpcnR1YWwgYm9vbCByZXBsYWNlQ2hpbGROb2RlKAotICAgICAgICBUSW50ZXJtTm9kZSAq
b3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wg
aGFzU2lkZUVmZmVjdHMoKSBjb25zdCB7IHJldHVybiAoaXNBc3NpZ25tZW50KCkgfHwgb3BlcmFu
ZC0+aGFzU2lkZUVmZmVjdHMoKSk7IH0KLQotICAgIHZvaWQgc2V0T3BlcmFuZChUSW50ZXJtVHlw
ZWQqIG8pIHsgb3BlcmFuZCA9IG87IH0KLSAgICBUSW50ZXJtVHlwZWQqIGdldE9wZXJhbmQoKSB7
IHJldHVybiBvcGVyYW5kOyB9ICAgIAotICAgIGJvb2wgcHJvbW90ZShUSW5mb1NpbmsmKTsKLQot
ICAgIHZvaWQgc2V0VXNlRW11bGF0ZWRGdW5jdGlvbigpIHsgdXNlRW11bGF0ZWRGdW5jdGlvbiA9
IHRydWU7IH0KLSAgICBib29sIGdldFVzZUVtdWxhdGVkRnVuY3Rpb24oKSB7IHJldHVybiB1c2VF
bXVsYXRlZEZ1bmN0aW9uOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBUSW50ZXJtVHlwZWQqIG9wZXJh
bmQ7Ci0KLSAgICAvLyBJZiBzZXQgdG8gdHJ1ZSwgcmVwbGFjZSB0aGUgYnVpbHQtaW4gZnVuY3Rp
b24gY2FsbCB3aXRoIGFuIGVtdWxhdGVkIG9uZQotICAgIC8vIHRvIHdvcmsgYXJvdW5kIGRyaXZl
ciBidWdzLgotICAgIGJvb2wgdXNlRW11bGF0ZWRGdW5jdGlvbjsKLX07Ci0KLXR5cGVkZWYgVFZl
Y3RvcjxUSW50ZXJtTm9kZSo+IFRJbnRlcm1TZXF1ZW5jZTsKLXR5cGVkZWYgVFZlY3RvcjxpbnQ+
IFRRdWFsaWZpZXJMaXN0OwotCi0vLwotLy8gTm9kZXMgdGhhdCBvcGVyYXRlIG9uIGFuIGFyYml0
cmFyeSBzaXplZCBzZXQgb2YgY2hpbGRyZW4uCi0vLwotY2xhc3MgVEludGVybUFnZ3JlZ2F0ZSA6
IHB1YmxpYyBUSW50ZXJtT3BlcmF0b3IgewotcHVibGljOgotICAgIFRJbnRlcm1BZ2dyZWdhdGUo
KSA6IFRJbnRlcm1PcGVyYXRvcihFT3BOdWxsKSwgdXNlckRlZmluZWQoZmFsc2UpLCB1c2VFbXVs
YXRlZEZ1bmN0aW9uKGZhbHNlKSB7IH0KLSAgICBUSW50ZXJtQWdncmVnYXRlKFRPcGVyYXRvciBv
KSA6IFRJbnRlcm1PcGVyYXRvcihvKSwgdXNlRW11bGF0ZWRGdW5jdGlvbihmYWxzZSkgeyB9Ci0g
ICAgflRJbnRlcm1BZ2dyZWdhdGUoKSB7IH0KLQotICAgIHZpcnR1YWwgVEludGVybUFnZ3JlZ2F0
ZSogZ2V0QXNBZ2dyZWdhdGUoKSB7IHJldHVybiB0aGlzOyB9Ci0gICAgdmlydHVhbCB2b2lkIHRy
YXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKLSAgICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxk
Tm9kZSgKLSAgICAgICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFj
ZW1lbnQpOwotCi0gICAgLy8gQ29uc2VydmF0aXZlbHkgYXNzdW1lIGZ1bmN0aW9uIGNhbGxzIGFu
ZCBvdGhlciBhZ2dyZWdhdGUgb3BlcmF0b3JzIGhhdmUgc2lkZS1lZmZlY3RzCi0gICAgdmlydHVh
bCBib29sIGhhc1NpZGVFZmZlY3RzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgVElu
dGVybVNlcXVlbmNlJiBnZXRTZXF1ZW5jZSgpIHsgcmV0dXJuIHNlcXVlbmNlOyB9Ci0KLSAgICB2
b2lkIHNldE5hbWUoY29uc3QgVFN0cmluZyYgbikgeyBuYW1lID0gbjsgfQotICAgIGNvbnN0IFRT
dHJpbmcmIGdldE5hbWUoKSBjb25zdCB7IHJldHVybiBuYW1lOyB9Ci0KLSAgICB2b2lkIHNldFVz
ZXJEZWZpbmVkKCkgeyB1c2VyRGVmaW5lZCA9IHRydWU7IH0KLSAgICBib29sIGlzVXNlckRlZmlu
ZWQoKSBjb25zdCB7IHJldHVybiB1c2VyRGVmaW5lZDsgfQotCi0gICAgdm9pZCBzZXRPcHRpbWl6
ZShib29sIG8pIHsgb3B0aW1pemUgPSBvOyB9Ci0gICAgYm9vbCBnZXRPcHRpbWl6ZSgpIHsgcmV0
dXJuIG9wdGltaXplOyB9Ci0gICAgdm9pZCBzZXREZWJ1Zyhib29sIGQpIHsgZGVidWcgPSBkOyB9
Ci0gICAgYm9vbCBnZXREZWJ1ZygpIHsgcmV0dXJuIGRlYnVnOyB9Ci0KLSAgICB2b2lkIHNldFVz
ZUVtdWxhdGVkRnVuY3Rpb24oKSB7IHVzZUVtdWxhdGVkRnVuY3Rpb24gPSB0cnVlOyB9Ci0gICAg
Ym9vbCBnZXRVc2VFbXVsYXRlZEZ1bmN0aW9uKCkgeyByZXR1cm4gdXNlRW11bGF0ZWRGdW5jdGlv
bjsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgVEludGVybUFnZ3JlZ2F0ZShjb25zdCBUSW50ZXJtQWdn
cmVnYXRlJik7IC8vIGRpc2FsbG93IGNvcHkgY29uc3RydWN0b3IKLSAgICBUSW50ZXJtQWdncmVn
YXRlJiBvcGVyYXRvcj0oY29uc3QgVEludGVybUFnZ3JlZ2F0ZSYpOyAvLyBkaXNhbGxvdyBhc3Np
Z25tZW50IG9wZXJhdG9yCi0gICAgVEludGVybVNlcXVlbmNlIHNlcXVlbmNlOwotICAgIFRTdHJp
bmcgbmFtZTsKLSAgICBib29sIHVzZXJEZWZpbmVkOyAvLyB1c2VkIGZvciB1c2VyIGRlZmluZWQg
ZnVuY3Rpb24gbmFtZXMKLQotICAgIGJvb2wgb3B0aW1pemU7Ci0gICAgYm9vbCBkZWJ1ZzsKLQot
ICAgIC8vIElmIHNldCB0byB0cnVlLCByZXBsYWNlIHRoZSBidWlsdC1pbiBmdW5jdGlvbiBjYWxs
IHdpdGggYW4gZW11bGF0ZWQgb25lCi0gICAgLy8gdG8gd29yayBhcm91bmQgZHJpdmVyIGJ1Z3Mu
Ci0gICAgYm9vbCB1c2VFbXVsYXRlZEZ1bmN0aW9uOwotfTsKLQotLy8KLS8vIEZvciBpZiB0ZXN0
cy4gIFNpbXBsaWZpZWQgc2luY2UgdGhlcmUgaXMgbm8gc3dpdGNoIHN0YXRlbWVudC4KLS8vCi1j
bGFzcyBUSW50ZXJtU2VsZWN0aW9uIDogcHVibGljIFRJbnRlcm1UeXBlZCB7Ci1wdWJsaWM6Ci0g
ICAgVEludGVybVNlbGVjdGlvbihUSW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1Ob2RlKiB0cnVl
QiwgVEludGVybU5vZGUqIGZhbHNlQikgOgotICAgICAgICAgICAgVEludGVybVR5cGVkKFRUeXBl
KEVidFZvaWQsIEVicFVuZGVmaW5lZCkpLCBjb25kaXRpb24oY29uZCksIHRydWVCbG9jayh0cnVl
QiksIGZhbHNlQmxvY2soZmFsc2VCKSB7fQotICAgIFRJbnRlcm1TZWxlY3Rpb24oVEludGVybVR5
cGVkKiBjb25kLCBUSW50ZXJtTm9kZSogdHJ1ZUIsIFRJbnRlcm1Ob2RlKiBmYWxzZUIsIGNvbnN0
IFRUeXBlJiB0eXBlKSA6Ci0gICAgICAgICAgICBUSW50ZXJtVHlwZWQodHlwZSksIGNvbmRpdGlv
bihjb25kKSwgdHJ1ZUJsb2NrKHRydWVCKSwgZmFsc2VCbG9jayhmYWxzZUIpIHt9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOwotICAgIHZpcnR1YWwgYm9v
bCByZXBsYWNlQ2hpbGROb2RlKAotICAgICAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRl
cm1Ob2RlICpyZXBsYWNlbWVudCk7Ci0KLSAgICAvLyBDb25zZXJ2YXRpdmVseSBhc3N1bWUgc2Vs
ZWN0aW9ucyBoYXZlIHNpZGUtZWZmZWN0cwotICAgIHZpcnR1YWwgYm9vbCBoYXNTaWRlRWZmZWN0
cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIGJvb2wgdXNlc1Rlcm5hcnlPcGVyYXRv
cigpIGNvbnN0IHsgcmV0dXJuIGdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQ7IH0KLSAgICBUSW50
ZXJtTm9kZSogZ2V0Q29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uOyB9Ci0gICAg
VEludGVybU5vZGUqIGdldFRydWVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIHRydWVCbG9jazsgfQot
ICAgIFRJbnRlcm1Ob2RlKiBnZXRGYWxzZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gZmFsc2VCbG9j
azsgfQotICAgIFRJbnRlcm1TZWxlY3Rpb24qIGdldEFzU2VsZWN0aW9uTm9kZSgpIHsgcmV0dXJu
IHRoaXM7IH0KLQotcHJvdGVjdGVkOgotICAgIFRJbnRlcm1UeXBlZCogY29uZGl0aW9uOwotICAg
IFRJbnRlcm1Ob2RlKiB0cnVlQmxvY2s7Ci0gICAgVEludGVybU5vZGUqIGZhbHNlQmxvY2s7Ci19
OwotCi1lbnVtIFZpc2l0Ci17Ci0gICAgUHJlVmlzaXQsCi0gICAgSW5WaXNpdCwKLSAgICBQb3N0
VmlzaXQKLX07Ci0KLS8vCi0vLyBGb3IgdHJhdmVyc2luZyB0aGUgdHJlZS4gIFVzZXIgc2hvdWxk
IGRlcml2ZSBmcm9tIHRoaXMsIAotLy8gcHV0IHRoZWlyIHRyYXZlcnNhbCBzcGVjaWZpYyBkYXRh
IGluIGl0LCBhbmQgdGhlbiBwYXNzCi0vLyBpdCB0byBhIFRyYXZlcnNlIG1ldGhvZC4KLS8vCi0v
LyBXaGVuIHVzaW5nIHRoaXMsIGp1c3QgZmlsbCBpbiB0aGUgbWV0aG9kcyBmb3Igbm9kZXMgeW91
IHdhbnQgdmlzaXRlZC4KLS8vIFJldHVybiBmYWxzZSBmcm9tIGEgcHJlLXZpc2l0IHRvIHNraXAg
dmlzaXRpbmcgdGhhdCBub2RlJ3Mgc3VidHJlZS4KLS8vCi1jbGFzcyBUSW50ZXJtVHJhdmVyc2Vy
Ci17Ci1wdWJsaWM6Ci0gICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSgpOwotICAgIFRJbnRl
cm1UcmF2ZXJzZXIoYm9vbCBwcmVWaXNpdCA9IHRydWUsIGJvb2wgaW5WaXNpdCA9IGZhbHNlLCBi
b29sIHBvc3RWaXNpdCA9IGZhbHNlLCBib29sIHJpZ2h0VG9MZWZ0ID0gZmFsc2UpIDogCi0gICAg
ICAgICAgICBwcmVWaXNpdChwcmVWaXNpdCksCi0gICAgICAgICAgICBpblZpc2l0KGluVmlzaXQp
LAotICAgICAgICAgICAgcG9zdFZpc2l0KHBvc3RWaXNpdCksCi0gICAgICAgICAgICByaWdodFRv
TGVmdChyaWdodFRvTGVmdCksCi0gICAgICAgICAgICBkZXB0aCgwKSwKLSAgICAgICAgICAgIG1h
eERlcHRoKDApIHt9Ci0gICAgdmlydHVhbCB+VEludGVybVRyYXZlcnNlcigpIHt9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopIHt9Ci0gICAgdmlydHVhbCB2
b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiopIHt9Ci0gICAgdmly
dHVhbCBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kikge3JldHVy
biB0cnVlO30KLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVy
bVVuYXJ5Kikge3JldHVybiB0cnVlO30KLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRTZWxlY3Rpb24o
VmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKSB7cmV0dXJuIHRydWU7fQotICAgIHZpcnR1
YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopIHty
ZXR1cm4gdHJ1ZTt9Ci0gICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVElu
dGVybUxvb3AqKSB7cmV0dXJuIHRydWU7fQotICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJyYW5jaChW
aXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCopIHtyZXR1cm4gdHJ1ZTt9Ci0KLSAgICBpbnQgZ2V0
TWF4RGVwdGgoKSBjb25zdCB7cmV0dXJuIG1heERlcHRoO30KLQotICAgIHZvaWQgaW5jcmVtZW50
RGVwdGgoVEludGVybU5vZGUgKmN1cnJlbnQpCi0gICAgewotICAgICAgICBkZXB0aCsrOwotICAg
ICAgICBtYXhEZXB0aCA9IHN0ZDo6bWF4KG1heERlcHRoLCBkZXB0aCk7Ci0gICAgICAgIHBhdGgu
cHVzaF9iYWNrKGN1cnJlbnQpOwotICAgIH0KLQotICAgIHZvaWQgZGVjcmVtZW50RGVwdGgoKQot
ICAgIHsKLSAgICAgICAgZGVwdGgtLTsKLSAgICAgICAgcGF0aC5wb3BfYmFjaygpOwotICAgIH0K
LQotICAgIFRJbnRlcm1Ob2RlICpnZXRQYXJlbnROb2RlKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBwYXRoLnNpemUoKSA9PSAwID8gTlVMTCA6IHBhdGguYmFjaygpOwotICAgIH0KLQotICAgIC8v
IFJldHVybiB0aGUgb3JpZ2luYWwgbmFtZSBpZiBoYXNoIGZ1bmN0aW9uIHBvaW50ZXIgaXMgTlVM
TDsKLSAgICAvLyBvdGhlcndpc2UgcmV0dXJuIHRoZSBoYXNoZWQgbmFtZS4KLSAgICBzdGF0aWMg
VFN0cmluZyBoYXNoKGNvbnN0IFRTdHJpbmcmIG5hbWUsIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1
bmN0aW9uKTsKLQotICAgIGNvbnN0IGJvb2wgcHJlVmlzaXQ7Ci0gICAgY29uc3QgYm9vbCBpblZp
c2l0OwotICAgIGNvbnN0IGJvb2wgcG9zdFZpc2l0OwotICAgIGNvbnN0IGJvb2wgcmlnaHRUb0xl
ZnQ7Ci0KLXByb3RlY3RlZDoKLSAgICBpbnQgZGVwdGg7Ci0gICAgaW50IG1heERlcHRoOwotCi0g
ICAgLy8gQWxsIHRoZSBub2RlcyBmcm9tIHJvb3QgdG8gdGhlIGN1cnJlbnQgbm9kZSdzIHBhcmVu
dCBkdXJpbmcgdHJhdmVyc2luZy4KLSAgICBUVmVjdG9yPFRJbnRlcm1Ob2RlICo+IHBhdGg7Ci19
OwotCi0jZW5kaWYgLy8gX19JTlRFUk1FRElBVEVfSApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2xvY2FsaW50ZXJtZWRpYXRlLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvbG9jYWxpbnRlcm1lZGlhdGUuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggY2NiYzQwMTc4YWNmNjNlZTRiM2RjMTU3N2RlM2M3MGJiM2Ez
YTM3YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvbG9jYWxpbnRlcm1lZGlhdGUuaAorKysg
L2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYg
X0xPQ0FMX0lOVEVSTUVESUFURV9JTkNMVURFRF8KLSNkZWZpbmUgX0xPQ0FMX0lOVEVSTUVESUFU
RV9JTkNMVURFRF8KLQotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgotI2luY2x1ZGUg
ImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxl
LmgiCi0KLXN0cnVjdCBUVmVjdG9yRmllbGRzIHsKLSAgICBpbnQgb2Zmc2V0c1s0XTsKLSAgICBp
bnQgbnVtOwotfTsKLQotLy8KLS8vIFNldCBvZiBoZWxwZXIgZnVuY3Rpb25zIHRvIGhlbHAgcGFy
c2UgYW5kIGJ1aWxkIHRoZSB0cmVlLgotLy8KLWNsYXNzIFRJbmZvU2luazsKLWNsYXNzIFRJbnRl
cm1lZGlhdGUgewotcHVibGljOiAgICAKLSAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKCk7
Ci0gICAgVEludGVybWVkaWF0ZShUSW5mb1NpbmsmIGkpIDogaW5mb1NpbmsoaSkgeyB9Ci0KLSAg
ICBUSW50ZXJtU3ltYm9sKiBhZGRTeW1ib2woaW50IElkLCBjb25zdCBUU3RyaW5nJiwgY29uc3Qg
VFR5cGUmLCBjb25zdCBUU291cmNlTG9jJik7Ci0gICAgVEludGVybVR5cGVkKiBhZGRDb252ZXJz
aW9uKFRPcGVyYXRvciwgY29uc3QgVFR5cGUmLCBUSW50ZXJtVHlwZWQqKTsKLSAgICBUSW50ZXJt
VHlwZWQqIGFkZEJpbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGxlZnQsIFRJ
bnRlcm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmLCBUU3ltYm9sVGFibGUmKTsKLSAg
ICBUSW50ZXJtVHlwZWQqIGFkZEFzc2lnbihUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogbGVm
dCwgVEludGVybVR5cGVkKiByaWdodCwgY29uc3QgVFNvdXJjZUxvYyYpOwotICAgIFRJbnRlcm1U
eXBlZCogYWRkSW5kZXgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGJhc2UsIFRJbnRlcm1U
eXBlZCogaW5kZXgsIGNvbnN0IFRTb3VyY2VMb2MmKTsKLSAgICBUSW50ZXJtVHlwZWQqIGFkZFVu
YXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBjaGlsZCwgY29uc3QgVFNvdXJjZUxv
YyYsIFRTeW1ib2xUYWJsZSYpOwotICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGdyb3dBZ2dyZWdhdGUo
VEludGVybU5vZGUqIGxlZnQsIFRJbnRlcm1Ob2RlKiByaWdodCwgY29uc3QgVFNvdXJjZUxvYyYp
OwotICAgIFRJbnRlcm1BZ2dyZWdhdGUqIG1ha2VBZ2dyZWdhdGUoVEludGVybU5vZGUqIG5vZGUs
IGNvbnN0IFRTb3VyY2VMb2MmKTsKLSAgICBUSW50ZXJtQWdncmVnYXRlKiBzZXRBZ2dyZWdhdGVP
cGVyYXRvcihUSW50ZXJtTm9kZSosIFRPcGVyYXRvciwgY29uc3QgVFNvdXJjZUxvYyYpOwotICAg
IFRJbnRlcm1Ob2RlKiAgYWRkU2VsZWN0aW9uKFRJbnRlcm1UeXBlZCogY29uZCwgVEludGVybU5v
ZGVQYWlyIGNvZGUsIGNvbnN0IFRTb3VyY2VMb2MmKTsKLSAgICBUSW50ZXJtVHlwZWQqIGFkZFNl
bGVjdGlvbihUSW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1UeXBlZCogdHJ1ZUJsb2NrLCBUSW50
ZXJtVHlwZWQqIGZhbHNlQmxvY2ssIGNvbnN0IFRTb3VyY2VMb2MmKTsKLSAgICBUSW50ZXJtVHlw
ZWQqIGFkZENvbW1hKFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdodCwgY29u
c3QgVFNvdXJjZUxvYyYpOwotICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiBhZGRDb25zdGFudFVu
aW9uKENvbnN0YW50VW5pb24qLCBjb25zdCBUVHlwZSYsIGNvbnN0IFRTb3VyY2VMb2MmKTsKLSAg
ICBUSW50ZXJtVHlwZWQqIHByb21vdGVDb25zdGFudFVuaW9uKFRCYXNpY1R5cGUsIFRJbnRlcm1D
b25zdGFudFVuaW9uKikgOwotICAgIGJvb2wgcGFyc2VDb25zdFRyZWUoY29uc3QgVFNvdXJjZUxv
YyYsIFRJbnRlcm1Ob2RlKiwgQ29uc3RhbnRVbmlvbiosIFRPcGVyYXRvciwgVFN5bWJvbFRhYmxl
JiwgVFR5cGUsIGJvb2wgc2luZ2xlQ29uc3RhbnRQYXJhbSA9IGZhbHNlKTsgICAgICAgIAotICAg
IFRJbnRlcm1Ob2RlKiBhZGRMb29wKFRMb29wVHlwZSwgVEludGVybU5vZGUqLCBUSW50ZXJtVHlw
ZWQqLCBUSW50ZXJtVHlwZWQqLCBUSW50ZXJtTm9kZSosIGNvbnN0IFRTb3VyY2VMb2MmKTsKLSAg
ICBUSW50ZXJtQnJhbmNoKiBhZGRCcmFuY2goVE9wZXJhdG9yLCBjb25zdCBUU291cmNlTG9jJik7
Ci0gICAgVEludGVybUJyYW5jaCogYWRkQnJhbmNoKFRPcGVyYXRvciwgVEludGVybVR5cGVkKiwg
Y29uc3QgVFNvdXJjZUxvYyYpOwotICAgIFRJbnRlcm1UeXBlZCogYWRkU3dpenpsZShUVmVjdG9y
RmllbGRzJiwgY29uc3QgVFNvdXJjZUxvYyYpOwotICAgIGJvb2wgcG9zdFByb2Nlc3MoVEludGVy
bU5vZGUqKTsKLSAgICB2b2lkIHJlbW92ZShUSW50ZXJtTm9kZSopOwotICAgIHZvaWQgb3V0cHV0
VHJlZShUSW50ZXJtTm9kZSopOwotCi1wcml2YXRlOgotICAgIHZvaWQgb3BlcmF0b3I9KFRJbnRl
cm1lZGlhdGUmKTsgLy8gcHJldmVudCBhc3NpZ25tZW50cwotCi0gICAgVEluZm9TaW5rJiBpbmZv
U2luazsKLX07Ci0KLSNlbmRpZiAvLyBfTE9DQUxfSU5URVJNRURJQVRFX0lOQ0xVREVEXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL29zaW5jbHVkZS5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL29zaW5jbHVkZS5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGJiMWE3OTdjNGQ4ZDkyZmQ2MzU0MmE5ZTE5NWRl
NTBkZjA2ODhiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9vc2luY2x1ZGUuaAorKysgL2Rl
di9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgX19P
U0lOQ0xVREVfSAotI2RlZmluZSBfX09TSU5DTFVERV9ICi0KLS8vCi0vLyBUaGlzIGZpbGUgY29u
dGFpbnMgY29udGFpbnMgb3Mtc3BlY2lmaWMgZGF0YXR5cGVzIGFuZAotLy8gZGVjbGFyZXMgYW55
IG9zLXNwZWNpZmljIGZ1bmN0aW9ucy4KLS8vCi0KLSNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVm
aW5lZChfV0lONjQpCi0jZGVmaW5lIEFOR0xFX09TX1dJTgotI2VsaWYgZGVmaW5lZChfX0FQUExF
X18pIHx8IGRlZmluZWQoX19saW51eF9fKSB8fCBcCi0gICAgICBkZWZpbmVkKF9fRnJlZUJTRF9f
KSB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBcCi0gICAgICBkZWZpbmVkKF9fc3VuKSB8fCBk
ZWZpbmVkKEFORFJPSUQpIHx8IFwKLSAgICAgIGRlZmluZWQoX19HTElCQ19fKSB8fCBkZWZpbmVk
KF9fR05VX18pIHx8IFwKLSAgICAgIGRlZmluZWQoX19RTlhfXykKLSNkZWZpbmUgQU5HTEVfT1Nf
UE9TSVgKLSNlbHNlCi0jZXJyb3IgVW5zdXBwb3J0ZWQgcGxhdGZvcm0uCi0jZW5kaWYKLQotI2lm
IGRlZmluZWQoQU5HTEVfT1NfV0lOKQotI2RlZmluZSBTVFJJQ1QKLSNkZWZpbmUgVkNfRVhUUkFM
RUFOIDEKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jZWxpZiBkZWZpbmVkKEFOR0xFX09TX1BPU0lY
KQotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KLSNpbmNsdWRl
IDxlcnJuby5oPgotI2VuZGlmICAvLyBBTkdMRV9PU19XSU4KLQotCi0jaW5jbHVkZSAiY29tcGls
ZXIvZGVidWcuaCIKLQotLy8KLS8vIFRocmVhZCBMb2NhbCBTdG9yYWdlIE9wZXJhdGlvbnMKLS8v
Ci0jaWYgZGVmaW5lZChBTkdMRV9PU19XSU4pCi10eXBlZGVmIERXT1JEIE9TX1RMU0luZGV4Owot
I2RlZmluZSBPU19JTlZBTElEX1RMU19JTkRFWCAoVExTX09VVF9PRl9JTkRFWEVTKQotI2VsaWYg
ZGVmaW5lZChBTkdMRV9PU19QT1NJWCkKLXR5cGVkZWYgcHRocmVhZF9rZXlfdCBPU19UTFNJbmRl
eDsKLSNkZWZpbmUgT1NfSU5WQUxJRF9UTFNfSU5ERVggKHN0YXRpY19jYXN0PE9TX1RMU0luZGV4
PigtMSkpCi0jZW5kaWYgIC8vIEFOR0xFX09TX1dJTgotCi1PU19UTFNJbmRleCBPU19BbGxvY1RM
U0luZGV4KCk7Ci1ib29sIE9TX1NldFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCwgdm9pZCAq
bHB2VmFsdWUpOwotYm9vbCBPU19GcmVlVExTSW5kZXgoT1NfVExTSW5kZXggbkluZGV4KTsKLQot
aW5saW5lIHZvaWQqIE9TX0dldFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCkKLXsKLSAgICBB
U1NFUlQobkluZGV4ICE9IE9TX0lOVkFMSURfVExTX0lOREVYKTsKLSNpZiBkZWZpbmVkKEFOR0xF
X09TX1dJTikKLSAgICByZXR1cm4gVGxzR2V0VmFsdWUobkluZGV4KTsKLSNlbGlmIGRlZmluZWQo
QU5HTEVfT1NfUE9TSVgpCi0gICAgcmV0dXJuIHB0aHJlYWRfZ2V0c3BlY2lmaWMobkluZGV4KTsK
LSNlbmRpZiAgLy8gQU5HTEVfT1NfV0lOCi19Ci0KLSNlbmRpZiAvLyBfX09TSU5DTFVERV9ICmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3Nzb3VyY2Vf
cG9zaXguY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL29zc291cmNl
X3Bvc2l4LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWUxZTY5OWFlYmMzYTI3
YmEzZGExN2VlODEzMTVkYzY2MmI5OThlOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3Nz
b3VyY2VfcG9zaXguY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLQotLy8KLS8vIFRoaXMgZmlsZSBjb250YWlucyB0aGUgcG9zaXggc3BlY2lmaWMg
ZnVuY3Rpb25zCi0vLwotI2luY2x1ZGUgImNvbXBpbGVyL29zaW5jbHVkZS5oIgotCi0jaWYgIWRl
ZmluZWQoQU5HTEVfT1NfUE9TSVgpCi0jZXJyb3IgVHJ5aW5nIHRvIGJ1aWxkIGEgcG9zaXggc3Bl
Y2lmaWMgZmlsZSBpbiBhIG5vbi1wb3NpeCBidWlsZC4KLSNlbmRpZgotCi0vLwotLy8gVGhyZWFk
IExvY2FsIFN0b3JhZ2UgT3BlcmF0aW9ucwotLy8KLU9TX1RMU0luZGV4IE9TX0FsbG9jVExTSW5k
ZXgoKQotewotICAgIHB0aHJlYWRfa2V5X3QgcFBvb2xJbmRleDsKLQotICAgIC8vCi0gICAgLy8g
Q3JlYXRlIGdsb2JhbCBwb29sIGtleS4KLSAgICAvLwotICAgIGlmICgocHRocmVhZF9rZXlfY3Jl
YXRlKCZwUG9vbEluZGV4LCBOVUxMKSkgIT0gMCkgewotICAgICAgICBhc3NlcnQoMCAmJiAiT1Nf
QWxsb2NUTFNJbmRleCgpOiBVbmFibGUgdG8gYWxsb2NhdGUgVGhyZWFkIExvY2FsIFN0b3JhZ2Ui
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgcmV0
dXJuIHBQb29sSW5kZXg7Ci0gICAgfQotfQotCi0KLWJvb2wgT1NfU2V0VExTVmFsdWUoT1NfVExT
SW5kZXggbkluZGV4LCB2b2lkICpscHZWYWx1ZSkKLXsKLSAgICBpZiAobkluZGV4ID09IE9TX0lO
VkFMSURfVExTX0lOREVYKSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJPU19TZXRUTFNWYWx1ZSgp
OiBJbnZhbGlkIFRMUyBJbmRleCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgaWYgKHB0aHJlYWRfc2V0c3BlY2lmaWMobkluZGV4LCBscHZWYWx1ZSkgPT0gMCkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLQot
Ym9vbCBPU19GcmVlVExTSW5kZXgoT1NfVExTSW5kZXggbkluZGV4KQotewotICAgIGlmIChuSW5k
ZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIk9TX1Nl
dFRMU1ZhbHVlKCk6IEludmFsaWQgVExTIEluZGV4Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICAvLwotICAgIC8vIERlbGV0ZSB0aGUgZ2xvYmFsIHBvb2wga2V5LgotICAg
IC8vCi0gICAgaWYgKHB0aHJlYWRfa2V5X2RlbGV0ZShuSW5kZXgpID09IDApCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL29zc291cmNlX3dpbi5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3Nzb3VyY2Vfd2luLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk5MjJmZWYzZjQxMWVkYmI4M2I1MjI0MTJi
NmNmNzI4YzNmOWYzOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3Nzb3VyY2Vfd2luLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNp
bmNsdWRlICJjb21waWxlci9vc2luY2x1ZGUuaCIKLS8vCi0vLyBUaGlzIGZpbGUgY29udGFpbnMg
Y29udGFpbnMgdGhlIHdpbmRvdydzIHNwZWNpZmljIGZ1bmN0aW9ucwotLy8KLQotI2lmICFkZWZp
bmVkKEFOR0xFX09TX1dJTikKLSNlcnJvciBUcnlpbmcgdG8gYnVpbGQgYSB3aW5kb3dzIHNwZWNp
ZmljIGZpbGUgaW4gYSBub24gd2luZG93cyBidWlsZC4KLSNlbmRpZgotCi0KLS8vCi0vLyBUaHJl
YWQgTG9jYWwgU3RvcmFnZSBPcGVyYXRpb25zCi0vLwotT1NfVExTSW5kZXggT1NfQWxsb2NUTFNJ
bmRleCgpCi17Ci0JRFdPUkQgZHdJbmRleCA9IFRsc0FsbG9jKCk7Ci0JaWYgKGR3SW5kZXggPT0g
VExTX09VVF9PRl9JTkRFWEVTKSB7Ci0JCWFzc2VydCgwICYmICJPU19BbGxvY1RMU0luZGV4KCk6
IFVuYWJsZSB0byBhbGxvY2F0ZSBUaHJlYWQgTG9jYWwgU3RvcmFnZSIpOwotCQlyZXR1cm4gT1Nf
SU5WQUxJRF9UTFNfSU5ERVg7Ci0JfQotCi0JcmV0dXJuIGR3SW5kZXg7Ci19Ci0KLQotYm9vbCBP
U19TZXRUTFNWYWx1ZShPU19UTFNJbmRleCBuSW5kZXgsIHZvaWQgKmxwdlZhbHVlKQotewotCWlm
IChuSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKLQkJYXNzZXJ0KDAgJiYgIk9TX1Nl
dFRMU1ZhbHVlKCk6IEludmFsaWQgVExTIEluZGV4Iik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0K
LQlpZiAoVGxzU2V0VmFsdWUobkluZGV4LCBscHZWYWx1ZSkpCi0JCXJldHVybiB0cnVlOwotCWVs
c2UKLQkJcmV0dXJuIGZhbHNlOwotfQotCi0KLWJvb2wgT1NfRnJlZVRMU0luZGV4KE9TX1RMU0lu
ZGV4IG5JbmRleCkKLXsKLQlpZiAobkluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7Ci0J
CWFzc2VydCgwICYmICJPU19TZXRUTFNWYWx1ZSgpOiBJbnZhbGlkIFRMUyBJbmRleCIpOwotCQly
ZXR1cm4gZmFsc2U7Ci0JfQotCi0JaWYgKFRsc0ZyZWUobkluZGV4KSkKLQkJcmV0dXJuIHRydWU7
Ci0JZWxzZQotCQlyZXR1cm4gZmFsc2U7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcGFyc2VDb25zdC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcGFyc2VDb25zdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDY1ZWQxMTVjYmNiMzM4Nzk4N2QzMTM5YWY4Y2UzZjJlMDIwNzU0MjIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3BhcnNlQ29uc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjQ1
ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9QYXJzZUNv
bnRleHQuaCIKLQotLy8KLS8vIFVzZSB0aGlzIGNsYXNzIHRvIGNhcnJ5IGFsb25nIGRhdGEgZnJv
bSBub2RlIHRvIG5vZGUgaW4gCi0vLyB0aGUgdHJhdmVyc2FsCi0vLwotY2xhc3MgVENvbnN0VHJh
dmVyc2VyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIFRDb25zdFRy
YXZlcnNlcihDb25zdGFudFVuaW9uKiBjVW5pb24sIGJvb2wgc2luZ2xlQ29uc3RQYXJhbSwgVE9w
ZXJhdG9yIGNvbnN0cnVjdFR5cGUsIFRJbmZvU2luayYgc2luaywgVFN5bWJvbFRhYmxlJiBzeW1U
YWJsZSwgVFR5cGUmIHQpCi0gICAgICAgIDogZXJyb3IoZmFsc2UpLAotICAgICAgICAgIGluZGV4
KDApLAotICAgICAgICAgIHVuaW9uQXJyYXkoY1VuaW9uKSwKLSAgICAgICAgICB0eXBlKHQpLAot
ICAgICAgICAgIGNvbnN0cnVjdG9yVHlwZShjb25zdHJ1Y3RUeXBlKSwKLSAgICAgICAgICBzaW5n
bGVDb25zdGFudFBhcmFtKHNpbmdsZUNvbnN0UGFyYW0pLAotICAgICAgICAgIGluZm9TaW5rKHNp
bmspLAotICAgICAgICAgIHN5bWJvbFRhYmxlKHN5bVRhYmxlKSwKLSAgICAgICAgICBzaXplKDAp
LAotICAgICAgICAgIGlzTWF0cml4KGZhbHNlKSwKLSAgICAgICAgICBtYXRyaXhTaXplKDApIHsK
LSAgICB9Ci0KLSAgICBib29sIGVycm9yOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCB2aXNpdFN5
bWJvbChUSW50ZXJtU3ltYm9sKik7Ci0gICAgdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVy
bUNvbnN0YW50VW5pb24qKTsKLSAgICBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50
ZXJtQmluYXJ5Kik7Ci0gICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5h
cnkqKTsKLSAgICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0
aW9uKik7Ci0gICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3Jl
Z2F0ZSopOwotICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCopOwot
ICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqKTsKLQotICAg
IHNpemVfdCBpbmRleDsKLSAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5OwotICAgIFRUeXBl
IHR5cGU7Ci0gICAgVE9wZXJhdG9yIGNvbnN0cnVjdG9yVHlwZTsKLSAgICBib29sIHNpbmdsZUNv
bnN0YW50UGFyYW07Ci0gICAgVEluZm9TaW5rJiBpbmZvU2luazsKLSAgICBUU3ltYm9sVGFibGUm
IHN5bWJvbFRhYmxlOwotICAgIHNpemVfdCBzaXplOyAvLyBzaXplIG9mIHRoZSBjb25zdHJ1Y3Rv
ciAoIDQgZm9yIHZlYzQpCi0gICAgYm9vbCBpc01hdHJpeDsKLSAgICBzaXplX3QgbWF0cml4U2l6
ZTsgLy8gZGltZW5zaW9uIG9mIHRoZSBtYXRyaXggKG5vbWluYWwgc2l6ZSBhbmQgbm90IHRoZSBp
bnN0YW5jZSBzaXplKQotfTsKLQotLy8KLS8vIFRoZSByZXN0IG9mIHRoZSBmaWxlIGFyZSB0aGUg
dHJhdmVyc2FsIGZ1bmN0aW9ucy4gIFRoZSBsYXN0IG9uZQotLy8gaXMgdGhlIG9uZSB0aGF0IHN0
YXJ0cyB0aGUgdHJhdmVyc2FsLgotLy8KLS8vIFJldHVybiB0cnVlIGZyb20gaW50ZXJpb3Igbm9k
ZXMgdG8gaGF2ZSB0aGUgZXh0ZXJuYWwgdHJhdmVyc2FsCi0vLyBjb250aW51ZSBvbiB0byBjaGls
ZHJlbi4gIElmIHlvdSBwcm9jZXNzIGNoaWxkcmVuIHlvdXJzZWxmLAotLy8gcmV0dXJuIGZhbHNl
LgotLy8KLQotdm9pZCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wq
IG5vZGUpCi17Ci0gICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9y
LCBub2RlLT5nZXRMaW5lKCksICJTeW1ib2wgTm9kZSBmb3VuZCBpbiBjb25zdGFudCBjb25zdHJ1
Y3RvciIpOwotICAgIHJldHVybjsKLQotfQotCi1ib29sIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRC
aW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5vZGUpCi17Ci0gICAgVFF1YWxpZmll
ciBxdWFsaWZpZXIgPSBub2RlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCk7Ci0gICAgCi0gICAg
aWYgKHF1YWxpZmllciAhPSBFdnFDb25zdCkgewotICAgICAgICBUU3RyaW5nIGJ1ZjsKLSAgICAg
ICAgYnVmLmFwcGVuZCgiJ2NvbnN0cnVjdG9yJyA6IGFzc2lnbmluZyBub24tY29uc3RhbnQgdG8g
Iik7Ci0gICAgICAgIGJ1Zi5hcHBlbmQodHlwZS5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAg
ICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCBi
dWYuY19zdHIoKSk7Ci0gICAgICAgIGVycm9yID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OyAgCi0gICAgfQotCi0gICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJy
b3IsIG5vZGUtPmdldExpbmUoKSwgIkJpbmFyeSBOb2RlIGZvdW5kIGluIGNvbnN0YW50IGNvbnN0
cnVjdG9yIik7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFRDb25zdFRyYXZl
cnNlcjo6dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQotewotICAg
IFRTdHJpbmcgYnVmOwotICAgIGJ1Zi5hcHBlbmQoIidjb25zdHJ1Y3RvcicgOiBhc3NpZ25pbmcg
bm9uLWNvbnN0YW50IHRvICIpOwotICAgIGJ1Zi5hcHBlbmQodHlwZS5nZXRDb21wbGV0ZVN0cmlu
ZygpKTsKLSAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEVycm9yLCBub2RlLT5nZXRM
aW5lKCksIGJ1Zi5jX3N0cigpKTsKLSAgICBlcnJvciA9IHRydWU7Ci0gICAgcmV0dXJuIGZhbHNl
OyAgCi19Ci0KLWJvb2wgVENvbnN0VHJhdmVyc2VyOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNp
dCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKLXsKLSAgICBpZiAoIW5vZGUtPmlzQ29uc3RydWN0
b3IoKSAmJiBub2RlLT5nZXRPcCgpICE9IEVPcENvbW1hKSB7Ci0gICAgICAgIFRTdHJpbmcgYnVm
OwotICAgICAgICBidWYuYXBwZW5kKCInY29uc3RydWN0b3InIDogYXNzaWduaW5nIG5vbi1jb25z
dGFudCB0byAiKTsKLSAgICAgICAgYnVmLmFwcGVuZCh0eXBlLmdldENvbXBsZXRlU3RyaW5nKCkp
OwotICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEVycm9yLCBub2RlLT5nZXRM
aW5lKCksIGJ1Zi5jX3N0cigpKTsKLSAgICAgICAgZXJyb3IgPSB0cnVlOwotICAgICAgICByZXR1
cm4gZmFsc2U7ICAKLSAgICB9Ci0KLSAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkg
PT0gMCkgewotICAgICAgICBlcnJvciA9IHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBib29sIGZsYWcgPSBub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAxICYm
IG5vZGUtPmdldFNlcXVlbmNlKClbMF0tPmdldEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9u
KCk7Ci0gICAgaWYgKGZsYWcpIAotICAgIHsKLSAgICAgICAgc2luZ2xlQ29uc3RhbnRQYXJhbSA9
IHRydWU7IAotICAgICAgICBjb25zdHJ1Y3RvclR5cGUgPSBub2RlLT5nZXRPcCgpOwotICAgICAg
ICBzaXplID0gbm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsKLQotICAgICAgICBpZiAo
bm9kZS0+Z2V0VHlwZSgpLmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgIGlzTWF0cml4ID0gdHJ1
ZTsKLSAgICAgICAgICAgIG1hdHJpeFNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNp
emUoKTsKLSAgICAgICAgfQotICAgIH0gICAgICAgCi0KLSAgICBmb3IgKFRJbnRlcm1TZXF1ZW5j
ZTo6aXRlcmF0b3IgcCA9IG5vZGUtPmdldFNlcXVlbmNlKCkuYmVnaW4oKTsgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHAgIT0gbm9kZS0+Z2V0U2VxdWVuY2UoKS5lbmQoKTsg
cCsrKSB7Ci0KLSAgICAgICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9wQ29tbWEpCi0gICAgICAg
ICAgICBpbmRleCA9IDA7ICAgICAgICAgICAKLQotICAgICAgICAoKnApLT50cmF2ZXJzZSh0aGlz
KTsKLSAgICB9ICAgCi0gICAgaWYgKGZsYWcpIAotICAgIHsKLSAgICAgICAgc2luZ2xlQ29uc3Rh
bnRQYXJhbSA9IGZhbHNlOyAgIAotICAgICAgICBjb25zdHJ1Y3RvclR5cGUgPSBFT3BOdWxsOwot
ICAgICAgICBzaXplID0gMDsKLSAgICAgICAgaXNNYXRyaXggPSBmYWxzZTsKLSAgICAgICAgbWF0
cml4U2l6ZSA9IDA7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBUQ29uc3RU
cmF2ZXJzZXI6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBu
b2RlKQotewotICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwg
bm9kZS0+Z2V0TGluZSgpLCAiU2VsZWN0aW9uIE5vZGUgZm91bmQgaW4gY29uc3RhbnQgY29uc3Ry
dWN0b3IiKTsKLSAgICBlcnJvciA9IHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lk
IFRDb25zdFRyYXZlcnNlcjo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9u
KiBub2RlKQotewotICAgIGlmICghbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSkKLSAgICB7
Ci0gICAgICAgIC8vIFRoZSBjb25zdGFudCB3YXMgbm90IGluaXRpYWxpemVkLCB0aGlzIHNob3Vs
ZCBhbHJlYWR5IGhhdmUgYmVlbiBsb2dnZWQKLSAgICAgICAgYXNzZXJ0KGluZm9TaW5rLmluZm8u
c2l6ZSgpICE9IDApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ29uc3RhbnRVbmlv
biogbGVmdFVuaW9uQXJyYXkgPSB1bmlvbkFycmF5OwotICAgIHNpemVfdCBpbnN0YW5jZVNpemUg
PSB0eXBlLmdldE9iamVjdFNpemUoKTsKLQotICAgIGlmIChpbmRleCA+PSBpbnN0YW5jZVNpemUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghc2luZ2xlQ29uc3RhbnRQYXJhbSkgewotICAg
ICAgICBzaXplX3Qgc2l6ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7Ci0gICAg
Ci0gICAgICAgIENvbnN0YW50VW5pb24gKnJpZ2h0VW5pb25BcnJheSA9IG5vZGUtPmdldFVuaW9u
QXJyYXlQb2ludGVyKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsr
KSB7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPj0gaW5zdGFuY2VTaXplKQotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2luZGV4XSA9IHJpZ2h0VW5p
b25BcnJheVtpXTsKLQotICAgICAgICAgICAgKGluZGV4KSsrOwotICAgICAgICB9Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgc2l6ZV90IHRvdGFsU2l6ZSA9IGluZGV4ICsgc2l6ZTsKLSAgICAgICAg
Q29uc3RhbnRVbmlvbiAqcmlnaHRVbmlvbkFycmF5ID0gbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50
ZXIoKTsKLSAgICAgICAgaWYgKCFpc01hdHJpeCkgewotICAgICAgICAgICAgc2l6ZV90IGNvdW50
ID0gMDsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBpbmRleDsgaSA8IHRvdGFsU2l6ZTsg
aSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGkgPj0gaW5zdGFuY2VTaXplKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXSA9
IHJpZ2h0VW5pb25BcnJheVtjb3VudF07Ci0KLSAgICAgICAgICAgICAgICAoaW5kZXgpKys7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFR5cGUoKS5nZXRP
YmplY3RTaXplKCkgPiAxKQotICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAg
ICAgfQotICAgICAgICB9IGVsc2UgeyAgLy8gZm9yIG1hdHJpeCBjb25zdHJ1Y3RvcnMKLSAgICAg
ICAgICAgIHNpemVfdCBjb3VudCA9IDA7Ci0gICAgICAgICAgICBzaXplX3QgZWxlbWVudCA9IGlu
ZGV4OwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGluZGV4OyBpIDwgdG90YWxTaXplOyBp
KyspIHsKLSAgICAgICAgICAgICAgICBpZiAoaSA+PSBpbnN0YW5jZVNpemUpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCAtIGkgPT0gMCB8
fCAoaSAtIGVsZW1lbnQpICUgKG1hdHJpeFNpemUgKyAxKSA9PSAwICkKLSAgICAgICAgICAgICAg
ICAgICAgbGVmdFVuaW9uQXJyYXlbaV0gPSByaWdodFVuaW9uQXJyYXlbY291bnRdOwotICAgICAg
ICAgICAgICAgIGVsc2UgCi0gICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNl
dEZDb25zdCgwLjBmKTsKLQotICAgICAgICAgICAgICAgIChpbmRleCkrKzsKLQotICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpID4gMSkKLSAgICAgICAg
ICAgICAgICAgICAgY291bnQrKzsgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgVENvbnN0VHJhdmVyc2VyOjp2aXNpdExvb3AoVmlzaXQg
dmlzaXQsIFRJbnRlcm1Mb29wKiBub2RlKQotewotICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShF
UHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiTG9vcCBOb2RlIGZvdW5kIGlu
IGNvbnN0YW50IGNvbnN0cnVjdG9yIik7Ci0gICAgZXJyb3IgPSB0cnVlOwotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotYm9vbCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0
LCBUSW50ZXJtQnJhbmNoKiBub2RlKQotewotICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQnJhbmNoIE5vZGUgZm91bmQgaW4g
Y29uc3RhbnQgY29uc3RydWN0b3IiKTsKLSAgICBlcnJvciA9IHRydWU7Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi0vLwotLy8gVGhpcyBmdW5jdGlvbiBpcyB0aGUgb25lIHRvIGNhbGwgZXh0ZXJu
YWxseSB0byBzdGFydCB0aGUgdHJhdmVyc2FsLgotLy8gSW5kaXZpZHVhbCBmdW5jdGlvbnMgY2Fu
IGJlIGluaXRpYWxpemVkIHRvIDAgdG8gc2tpcCBwcm9jZXNzaW5nIG9mIHRoYXQKLS8vIHR5cGUg
b2Ygbm9kZS4gIEl0J3MgY2hpbGRyZW4gd2lsbCBzdGlsbCBiZSBwcm9jZXNzZWQuCi0vLwotYm9v
bCBUSW50ZXJtZWRpYXRlOjpwYXJzZUNvbnN0VHJlZShjb25zdCBUU291cmNlTG9jJiBsaW5lLCBU
SW50ZXJtTm9kZSogcm9vdCwgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSwgVE9wZXJhdG9yIGNv
bnN0cnVjdG9yVHlwZSwgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVFR5cGUgdCwgYm9vbCBz
aW5nbGVDb25zdGFudFBhcmFtKQotewotICAgIGlmIChyb290ID09IDApCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIFRDb25zdFRyYXZlcnNlciBpdCh1bmlvbkFycmF5LCBzaW5nbGVDb25z
dGFudFBhcmFtLCBjb25zdHJ1Y3RvclR5cGUsIGluZm9TaW5rLCBzeW1ib2xUYWJsZSwgdCk7Ci0K
LSAgICByb290LT50cmF2ZXJzZSgmaXQpOwotICAgIGlmIChpdC5lcnJvcikKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpYWdu
b3N0aWNzQmFzZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL0RpYWdub3N0aWNzQmFzZS5jcHAKaW5kZXggM2UyMmUxZjFjNTc5ZGZjYzFjYTY1
YmYyNDg0MDFiNGRlZTY5OTQwOC4uYTdjZTg2MmJjYjQ1YmQ1OTkyN2UxMDFkODFmYWQ0Y2FlMDU5
NmVlMSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9EaWFnbm9zdGljc0Jhc2UuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NCYXNlLmNwcApAQCAtMjUs
MTQgKzI1LDE0IEBAIHZvaWQgRGlhZ25vc3RpY3M6OnJlcG9ydChJRCBpZCwKIAogRGlhZ25vc3Rp
Y3M6OlNldmVyaXR5IERpYWdub3N0aWNzOjpzZXZlcml0eShJRCBpZCkKIHsKLSAgICBpZiAoKGlk
ID4gRVJST1JfQkVHSU4pICYmIChpZCA8IEVSUk9SX0VORCkpCi0gICAgICAgIHJldHVybiBFUlJP
UjsKKyAgICBpZiAoKGlkID4gUFBfRVJST1JfQkVHSU4pICYmIChpZCA8IFBQX0VSUk9SX0VORCkp
CisgICAgICAgIHJldHVybiBQUF9FUlJPUjsKIAotICAgIGlmICgoaWQgPiBXQVJOSU5HX0JFR0lO
KSAmJiAoaWQgPCBXQVJOSU5HX0VORCkpCi0gICAgICAgIHJldHVybiBXQVJOSU5HOworICAgIGlm
ICgoaWQgPiBQUF9XQVJOSU5HX0JFR0lOKSAmJiAoaWQgPCBQUF9XQVJOSU5HX0VORCkpCisgICAg
ICAgIHJldHVybiBQUF9XQVJOSU5HOwogCiAgICAgYXNzZXJ0KGZhbHNlKTsKLSAgICByZXR1cm4g
RVJST1I7CisgICAgcmV0dXJuIFBQX0VSUk9SOwogfQogCiBzdGQ6OnN0cmluZyBEaWFnbm9zdGlj
czo6bWVzc2FnZShJRCBpZCkKQEAgLTQwLDgyICs0MCw4MiBAQCBzdGQ6OnN0cmluZyBEaWFnbm9z
dGljczo6bWVzc2FnZShJRCBpZCkKICAgICBzd2l0Y2ggKGlkKQogICAgIHsKICAgICAgIC8vIEVy
cm9ycyBiZWdpbi4KLSAgICAgIGNhc2UgSU5URVJOQUxfRVJST1I6CisgICAgICBjYXNlIFBQX0lO
VEVSTkFMX0VSUk9SOgogICAgICAgICAgIHJldHVybiAiaW50ZXJuYWwgZXJyb3IiOwotICAgICAg
Y2FzZSBPVVRfT0ZfTUVNT1JZOgorICAgICAgY2FzZSBQUF9PVVRfT0ZfTUVNT1JZOgogICAgICAg
ICAgIHJldHVybiAib3V0IG9mIG1lbW9yeSI7Ci0gICAgICBjYXNlIElOVkFMSURfQ0hBUkFDVEVS
OgorICAgICAgY2FzZSBQUF9JTlZBTElEX0NIQVJBQ1RFUjoKICAgICAgICAgICByZXR1cm4gImlu
dmFsaWQgY2hhcmFjdGVyIjsKLSAgICAgIGNhc2UgSU5WQUxJRF9OVU1CRVI6CisgICAgICBjYXNl
IFBQX0lOVkFMSURfTlVNQkVSOgogICAgICAgICAgIHJldHVybiAiaW52YWxpZCBudW1iZXIiOwot
ICAgICAgY2FzZSBJTlRFR0VSX09WRVJGTE9XOgorICAgICAgY2FzZSBQUF9JTlRFR0VSX09WRVJG
TE9XOgogICAgICAgICAgIHJldHVybiAiaW50ZWdlciBvdmVyZmxvdyI7Ci0gICAgICBjYXNlIEZM
T0FUX09WRVJGTE9XOgorICAgICAgY2FzZSBQUF9GTE9BVF9PVkVSRkxPVzoKICAgICAgICAgICBy
ZXR1cm4gImZsb2F0IG92ZXJmbG93IjsKLSAgICAgIGNhc2UgVE9LRU5fVE9PX0xPTkc6CisgICAg
ICBjYXNlIFBQX1RPS0VOX1RPT19MT05HOgogICAgICAgICAgIHJldHVybiAidG9rZW4gdG9vIGxv
bmciOwotICAgICAgY2FzZSBJTlZBTElEX0VYUFJFU1NJT046CisgICAgICBjYXNlIFBQX0lOVkFM
SURfRVhQUkVTU0lPTjoKICAgICAgICAgICByZXR1cm4gImludmFsaWQgZXhwcmVzc2lvbiI7Ci0g
ICAgICBjYXNlIERJVklTSU9OX0JZX1pFUk86CisgICAgICBjYXNlIFBQX0RJVklTSU9OX0JZX1pF
Uk86CiAgICAgICAgICAgcmV0dXJuICJkaXZpc2lvbiBieSB6ZXJvIjsKLSAgICAgIGNhc2UgRU9G
X0lOX0NPTU1FTlQ6CisgICAgICBjYXNlIFBQX0VPRl9JTl9DT01NRU5UOgogICAgICAgICAgIHJl
dHVybiAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSBmb3VuZCBpbiBjb21tZW50IjsKLSAgICAgIGNh
c2UgVU5FWFBFQ1RFRF9UT0tFTjoKKyAgICAgIGNhc2UgUFBfVU5FWFBFQ1RFRF9UT0tFTjoKICAg
ICAgICAgICByZXR1cm4gInVuZXhwZWN0ZWQgdG9rZW4iOwotICAgICAgY2FzZSBESVJFQ1RJVkVf
SU5WQUxJRF9OQU1FOgorICAgICAgY2FzZSBQUF9ESVJFQ1RJVkVfSU5WQUxJRF9OQU1FOgogICAg
ICAgICAgIHJldHVybiAiaW52YWxpZCBkaXJlY3RpdmUgbmFtZSI7Ci0gICAgICBjYXNlIE1BQ1JP
X05BTUVfUkVTRVJWRUQ6CisgICAgICBjYXNlIFBQX01BQ1JPX05BTUVfUkVTRVJWRUQ6CiAgICAg
ICAgICAgcmV0dXJuICJtYWNybyBuYW1lIGlzIHJlc2VydmVkIjsKLSAgICAgIGNhc2UgTUFDUk9f
UkVERUZJTkVEOgorICAgICAgY2FzZSBQUF9NQUNST19SRURFRklORUQ6CiAgICAgICAgICAgcmV0
dXJuICJtYWNybyByZWRlZmluZWQiOwotICAgICAgY2FzZSBNQUNST19QUkVERUZJTkVEX1JFREVG
SU5FRDoKKyAgICAgIGNhc2UgUFBfTUFDUk9fUFJFREVGSU5FRF9SRURFRklORUQ6CiAgICAgICAg
ICAgcmV0dXJuICJwcmVkZWZpbmVkIG1hY3JvIHJlZGVmaW5lZCI7Ci0gICAgICBjYXNlIE1BQ1JP
X1BSRURFRklORURfVU5ERUZJTkVEOgorICAgICAgY2FzZSBQUF9NQUNST19QUkVERUZJTkVEX1VO
REVGSU5FRDoKICAgICAgICAgICByZXR1cm4gInByZWRlZmluZWQgbWFjcm8gdW5kZWZpbmVkIjsK
LSAgICAgIGNhc2UgTUFDUk9fVU5URVJNSU5BVEVEX0lOVk9DQVRJT046CisgICAgICBjYXNlIFBQ
X01BQ1JPX1VOVEVSTUlOQVRFRF9JTlZPQ0FUSU9OOgogICAgICAgICAgIHJldHVybiAidW50ZXJt
aW5hdGVkIG1hY3JvIGludm9jYXRpb24iOwotICAgICAgY2FzZSBNQUNST19UT09fRkVXX0FSR1M6
CisgICAgICBjYXNlIFBQX01BQ1JPX1RPT19GRVdfQVJHUzoKICAgICAgICAgICByZXR1cm4gIk5v
dCBlbm91Z2ggYXJndW1lbnRzIGZvciBtYWNybyI7Ci0gICAgICBjYXNlIE1BQ1JPX1RPT19NQU5Z
X0FSR1M6CisgICAgICBjYXNlIFBQX01BQ1JPX1RPT19NQU5ZX0FSR1M6CiAgICAgICAgICAgcmV0
dXJuICJUb28gbWFueSBhcmd1bWVudHMgZm9yIG1hY3JvIjsKLSAgICAgIGNhc2UgQ09ORElUSU9O
QUxfRU5ESUZfV0lUSE9VVF9JRjoKKyAgICAgIGNhc2UgUFBfQ09ORElUSU9OQUxfRU5ESUZfV0lU
SE9VVF9JRjoKICAgICAgICAgICByZXR1cm4gInVuZXhwZWN0ZWQgI2VuZGlmIGZvdW5kIHdpdGhv
dXQgYSBtYXRjaGluZyAjaWYiOwotICAgICAgY2FzZSBDT05ESVRJT05BTF9FTFNFX1dJVEhPVVRf
SUY6CisgICAgICBjYXNlIFBQX0NPTkRJVElPTkFMX0VMU0VfV0lUSE9VVF9JRjoKICAgICAgICAg
ICByZXR1cm4gInVuZXhwZWN0ZWQgI2Vsc2UgZm91bmQgd2l0aG91dCBhIG1hdGNoaW5nICNpZiI7
Ci0gICAgICBjYXNlIENPTkRJVElPTkFMX0VMU0VfQUZURVJfRUxTRToKKyAgICAgIGNhc2UgUFBf
Q09ORElUSU9OQUxfRUxTRV9BRlRFUl9FTFNFOgogICAgICAgICAgIHJldHVybiAidW5leHBlY3Rl
ZCAjZWxzZSBmb3VuZCBhZnRlciBhbm90aGVyICNlbHNlIjsKLSAgICAgIGNhc2UgQ09ORElUSU9O
QUxfRUxJRl9XSVRIT1VUX0lGOgorICAgICAgY2FzZSBQUF9DT05ESVRJT05BTF9FTElGX1dJVEhP
VVRfSUY6CiAgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkICNlbGlmIGZvdW5kIHdpdGhvdXQg
YSBtYXRjaGluZyAjaWYiOwotICAgICAgY2FzZSBDT05ESVRJT05BTF9FTElGX0FGVEVSX0VMU0U6
CisgICAgICBjYXNlIFBQX0NPTkRJVElPTkFMX0VMSUZfQUZURVJfRUxTRToKICAgICAgICAgICBy
ZXR1cm4gInVuZXhwZWN0ZWQgI2VsaWYgZm91bmQgYWZ0ZXIgI2Vsc2UiOwotICAgICAgY2FzZSBD
T05ESVRJT05BTF9VTlRFUk1JTkFURUQ6CisgICAgICBjYXNlIFBQX0NPTkRJVElPTkFMX1VOVEVS
TUlOQVRFRDoKICAgICAgICAgICByZXR1cm4gInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUgZm91bmQg
aW4gY29uZGl0aW9uYWwgYmxvY2siOwotICAgICAgY2FzZSBJTlZBTElEX0VYVEVOU0lPTl9OQU1F
OgorICAgICAgY2FzZSBQUF9JTlZBTElEX0VYVEVOU0lPTl9OQU1FOgogICAgICAgICAgIHJldHVy
biAiaW52YWxpZCBleHRlbnNpb24gbmFtZSI7Ci0gICAgICBjYXNlIElOVkFMSURfRVhURU5TSU9O
X0JFSEFWSU9SOgorICAgICAgY2FzZSBQUF9JTlZBTElEX0VYVEVOU0lPTl9CRUhBVklPUjoKICAg
ICAgICAgICByZXR1cm4gImludmFsaWQgZXh0ZW5zaW9uIGJlaGF2aW9yIjsKLSAgICAgIGNhc2Ug
SU5WQUxJRF9FWFRFTlNJT05fRElSRUNUSVZFOgorICAgICAgY2FzZSBQUF9JTlZBTElEX0VYVEVO
U0lPTl9ESVJFQ1RJVkU6CiAgICAgICAgICAgcmV0dXJuICJpbnZhbGlkIGV4dGVuc2lvbiBkaXJl
Y3RpdmUiOwotICAgICAgY2FzZSBJTlZBTElEX1ZFUlNJT05fTlVNQkVSOgorICAgICAgY2FzZSBQ
UF9JTlZBTElEX1ZFUlNJT05fTlVNQkVSOgogICAgICAgICAgIHJldHVybiAiaW52YWxpZCB2ZXJz
aW9uIG51bWJlciI7Ci0gICAgICBjYXNlIElOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkU6CisgICAg
ICBjYXNlIFBQX0lOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkU6CiAgICAgICAgICAgcmV0dXJuICJp
bnZhbGlkIHZlcnNpb24gZGlyZWN0aXZlIjsKLSAgICAgIGNhc2UgVkVSU0lPTl9OT1RfRklSU1Rf
U1RBVEVNRU5UOgorICAgICAgY2FzZSBQUF9WRVJTSU9OX05PVF9GSVJTVF9TVEFURU1FTlQ6CiAg
ICAgICAgIHJldHVybiAiI3ZlcnNpb24gZGlyZWN0aXZlIG11c3Qgb2NjdXIgYmVmb3JlIGFueXRo
aW5nIGVsc2UsICIKICAgICAgICAgICAgICAgICJleGNlcHQgZm9yIGNvbW1lbnRzIGFuZCB3aGl0
ZSBzcGFjZSI7Ci0gICAgICBjYXNlIElOVkFMSURfTElORV9OVU1CRVI6CisgICAgICBjYXNlIFBQ
X0lOVkFMSURfTElORV9OVU1CRVI6CiAgICAgICAgICAgcmV0dXJuICJpbnZhbGlkIGxpbmUgbnVt
YmVyIjsKLSAgICAgIGNhc2UgSU5WQUxJRF9GSUxFX05VTUJFUjoKKyAgICAgIGNhc2UgUFBfSU5W
QUxJRF9GSUxFX05VTUJFUjoKICAgICAgICAgICByZXR1cm4gImludmFsaWQgZmlsZSBudW1iZXIi
OwotICAgICAgY2FzZSBJTlZBTElEX0xJTkVfRElSRUNUSVZFOgorICAgICAgY2FzZSBQUF9JTlZB
TElEX0xJTkVfRElSRUNUSVZFOgogICAgICAgICAgIHJldHVybiAiaW52YWxpZCBsaW5lIGRpcmVj
dGl2ZSI7CiAgICAgICAvLyBFcnJvcnMgZW5kLgogICAgICAgLy8gV2FybmluZ3MgYmVnaW4uCi0g
ICAgICBjYXNlIEVPRl9JTl9ESVJFQ1RJVkU6CisgICAgICBjYXNlIFBQX0VPRl9JTl9ESVJFQ1RJ
VkU6CiAgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIGZvdW5kIGluIGRp
cmVjdGl2ZSI7Ci0gICAgICBjYXNlIENPTkRJVElPTkFMX1VORVhQRUNURURfVE9LRU46CisgICAg
ICBjYXNlIFBQX0NPTkRJVElPTkFMX1VORVhQRUNURURfVE9LRU46CiAgICAgICAgICAgcmV0dXJu
ICJ1bmV4cGVjdGVkIHRva2VuIGFmdGVyIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24iOwotICAgICAg
Y2FzZSBVTlJFQ09HTklaRURfUFJBR01BOgorICAgICAgY2FzZSBQUF9VTlJFQ09HTklaRURfUFJB
R01BOgogICAgICAgICAgIHJldHVybiAidW5yZWNvZ25pemVkIHByYWdtYSI7CiAgICAgICAvLyBX
YXJuaW5ncyBlbmQuCiAgICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaWFnbm9zdGljc0Jhc2UuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3Rp
Y3NCYXNlLmgKaW5kZXggMDdiYzQxMTg0NjQyYTNkYzc0MmVmNGRmNDZkZjJlNDRlZTZlMjY0OS4u
MmM4YzUzOTEzN2I5NmE3Njk2MTUxYjNjZjA3YzUwYTk0MDc0MmJhMSAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaWFnbm9zdGlj
c0Jhc2UuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL0RpYWdub3N0aWNzQmFzZS5oCkBAIC0yMSw1MyArMjEsNTMgQEAgY2xhc3MgRGlhZ25v
c3RpY3MKICAgcHVibGljOgogICAgIGVudW0gU2V2ZXJpdHkKICAgICB7Ci0gICAgICAgIEVSUk9S
LAotICAgICAgICBXQVJOSU5HCisgICAgICAgIFBQX0VSUk9SLAorICAgICAgICBQUF9XQVJOSU5H
CiAgICAgfTsKICAgICBlbnVtIElECiAgICAgewotICAgICAgICBFUlJPUl9CRUdJTiwKLSAgICAg
ICAgSU5URVJOQUxfRVJST1IsCi0gICAgICAgIE9VVF9PRl9NRU1PUlksCi0gICAgICAgIElOVkFM
SURfQ0hBUkFDVEVSLAotICAgICAgICBJTlZBTElEX05VTUJFUiwKLSAgICAgICAgSU5URUdFUl9P
VkVSRkxPVywKLSAgICAgICAgRkxPQVRfT1ZFUkZMT1csCi0gICAgICAgIFRPS0VOX1RPT19MT05H
LAotICAgICAgICBJTlZBTElEX0VYUFJFU1NJT04sCi0gICAgICAgIERJVklTSU9OX0JZX1pFUk8s
Ci0gICAgICAgIEVPRl9JTl9DT01NRU5ULAotICAgICAgICBVTkVYUEVDVEVEX1RPS0VOLAotICAg
ICAgICBESVJFQ1RJVkVfSU5WQUxJRF9OQU1FLAotICAgICAgICBNQUNST19OQU1FX1JFU0VSVkVE
LAotICAgICAgICBNQUNST19SRURFRklORUQsCi0gICAgICAgIE1BQ1JPX1BSRURFRklORURfUkVE
RUZJTkVELAotICAgICAgICBNQUNST19QUkVERUZJTkVEX1VOREVGSU5FRCwKLSAgICAgICAgTUFD
Uk9fVU5URVJNSU5BVEVEX0lOVk9DQVRJT04sCi0gICAgICAgIE1BQ1JPX1RPT19GRVdfQVJHUywK
LSAgICAgICAgTUFDUk9fVE9PX01BTllfQVJHUywKLSAgICAgICAgQ09ORElUSU9OQUxfRU5ESUZf
V0lUSE9VVF9JRiwKLSAgICAgICAgQ09ORElUSU9OQUxfRUxTRV9XSVRIT1VUX0lGLAotICAgICAg
ICBDT05ESVRJT05BTF9FTFNFX0FGVEVSX0VMU0UsCi0gICAgICAgIENPTkRJVElPTkFMX0VMSUZf
V0lUSE9VVF9JRiwKLSAgICAgICAgQ09ORElUSU9OQUxfRUxJRl9BRlRFUl9FTFNFLAotICAgICAg
ICBDT05ESVRJT05BTF9VTlRFUk1JTkFURUQsCi0gICAgICAgIElOVkFMSURfRVhURU5TSU9OX05B
TUUsCi0gICAgICAgIElOVkFMSURfRVhURU5TSU9OX0JFSEFWSU9SLAotICAgICAgICBJTlZBTElE
X0VYVEVOU0lPTl9ESVJFQ1RJVkUsCi0gICAgICAgIElOVkFMSURfVkVSU0lPTl9OVU1CRVIsCi0g
ICAgICAgIElOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkUsCi0gICAgICAgIFZFUlNJT05fTk9UX0ZJ
UlNUX1NUQVRFTUVOVCwKLSAgICAgICAgSU5WQUxJRF9MSU5FX05VTUJFUiwKLSAgICAgICAgSU5W
QUxJRF9GSUxFX05VTUJFUiwKLSAgICAgICAgSU5WQUxJRF9MSU5FX0RJUkVDVElWRSwKLSAgICAg
ICAgRVJST1JfRU5ELAorICAgICAgICBQUF9FUlJPUl9CRUdJTiwKKyAgICAgICAgUFBfSU5URVJO
QUxfRVJST1IsCisgICAgICAgIFBQX09VVF9PRl9NRU1PUlksCisgICAgICAgIFBQX0lOVkFMSURf
Q0hBUkFDVEVSLAorICAgICAgICBQUF9JTlZBTElEX05VTUJFUiwKKyAgICAgICAgUFBfSU5URUdF
Ul9PVkVSRkxPVywKKyAgICAgICAgUFBfRkxPQVRfT1ZFUkZMT1csCisgICAgICAgIFBQX1RPS0VO
X1RPT19MT05HLAorICAgICAgICBQUF9JTlZBTElEX0VYUFJFU1NJT04sCisgICAgICAgIFBQX0RJ
VklTSU9OX0JZX1pFUk8sCisgICAgICAgIFBQX0VPRl9JTl9DT01NRU5ULAorICAgICAgICBQUF9V
TkVYUEVDVEVEX1RPS0VOLAorICAgICAgICBQUF9ESVJFQ1RJVkVfSU5WQUxJRF9OQU1FLAorICAg
ICAgICBQUF9NQUNST19OQU1FX1JFU0VSVkVELAorICAgICAgICBQUF9NQUNST19SRURFRklORUQs
CisgICAgICAgIFBQX01BQ1JPX1BSRURFRklORURfUkVERUZJTkVELAorICAgICAgICBQUF9NQUNS
T19QUkVERUZJTkVEX1VOREVGSU5FRCwKKyAgICAgICAgUFBfTUFDUk9fVU5URVJNSU5BVEVEX0lO
Vk9DQVRJT04sCisgICAgICAgIFBQX01BQ1JPX1RPT19GRVdfQVJHUywKKyAgICAgICAgUFBfTUFD
Uk9fVE9PX01BTllfQVJHUywKKyAgICAgICAgUFBfQ09ORElUSU9OQUxfRU5ESUZfV0lUSE9VVF9J
RiwKKyAgICAgICAgUFBfQ09ORElUSU9OQUxfRUxTRV9XSVRIT1VUX0lGLAorICAgICAgICBQUF9D
T05ESVRJT05BTF9FTFNFX0FGVEVSX0VMU0UsCisgICAgICAgIFBQX0NPTkRJVElPTkFMX0VMSUZf
V0lUSE9VVF9JRiwKKyAgICAgICAgUFBfQ09ORElUSU9OQUxfRUxJRl9BRlRFUl9FTFNFLAorICAg
ICAgICBQUF9DT05ESVRJT05BTF9VTlRFUk1JTkFURUQsCisgICAgICAgIFBQX0lOVkFMSURfRVhU
RU5TSU9OX05BTUUsCisgICAgICAgIFBQX0lOVkFMSURfRVhURU5TSU9OX0JFSEFWSU9SLAorICAg
ICAgICBQUF9JTlZBTElEX0VYVEVOU0lPTl9ESVJFQ1RJVkUsCisgICAgICAgIFBQX0lOVkFMSURf
VkVSU0lPTl9OVU1CRVIsCisgICAgICAgIFBQX0lOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkUsCisg
ICAgICAgIFBQX1ZFUlNJT05fTk9UX0ZJUlNUX1NUQVRFTUVOVCwKKyAgICAgICAgUFBfSU5WQUxJ
RF9MSU5FX05VTUJFUiwKKyAgICAgICAgUFBfSU5WQUxJRF9GSUxFX05VTUJFUiwKKyAgICAgICAg
UFBfSU5WQUxJRF9MSU5FX0RJUkVDVElWRSwKKyAgICAgICAgUFBfRVJST1JfRU5ELAogCi0gICAg
ICAgIFdBUk5JTkdfQkVHSU4sCi0gICAgICAgIEVPRl9JTl9ESVJFQ1RJVkUsCi0gICAgICAgIENP
TkRJVElPTkFMX1VORVhQRUNURURfVE9LRU4sCi0gICAgICAgIFVOUkVDT0dOSVpFRF9QUkFHTUEs
Ci0gICAgICAgIFdBUk5JTkdfRU5ECisgICAgICAgIFBQX1dBUk5JTkdfQkVHSU4sCisgICAgICAg
IFBQX0VPRl9JTl9ESVJFQ1RJVkUsCisgICAgICAgIFBQX0NPTkRJVElPTkFMX1VORVhQRUNURURf
VE9LRU4sCisgICAgICAgIFBQX1VOUkVDT0dOSVpFRF9QUkFHTUEsCisgICAgICAgIFBQX1dBUk5J
TkdfRU5ECiAgICAgfTsKIAogICAgIHZpcnR1YWwgfkRpYWdub3N0aWNzKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVj
dGl2ZVBhcnNlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL0RpcmVjdGl2ZVBhcnNlci5jcHAKaW5kZXggOTRkZmRmNTEzZDc1NTM4NGM1ZjVh
MWFlNWNiNjMxNjU4NGM0NjBhMy4uZWJlYzc5ODA0ZGNlZjgzNmE0YjQyZjk2NDQ3MjM2YzcxNjM0
NzAyMSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9EaXJlY3RpdmVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFyc2VyLmNwcApAQCAtMTcy
LDcgKzE3Miw3IEBAIGNsYXNzIERlZmluZWRQYXJzZXIgOiBwdWJsaWMgTGV4ZXIKIAogICAgICAg
ICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VO
LAorICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX1VORVhQ
RUNURURfVE9LRU4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9j
YXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgICAgIHNraXBVbnRpbEVPRChtTGV4ZXIsIHRv
a2VuKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE4NSw3ICsxODUsNyBAQCBjbGFzcyBEZWZp
bmVkUGFyc2VyIDogcHVibGljIExleGVyCiAgICAgICAgICAgICBtTGV4ZXItPmxleCh0b2tlbik7
CiAgICAgICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gJyknKQogICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVE
X1RPS0VOLAorICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNz
OjpQUF9VTkVYUEVDVEVEX1RPS0VOLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICAgICAgICAgIHNraXBV
bnRpbEVPRChtTGV4ZXIsIHRva2VuKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yMzMs
NyArMjMzLDcgQEAgdm9pZCBEaXJlY3RpdmVQYXJzZXI6OmxleChUb2tlbiogdG9rZW4pCiAgICAg
ICAgICAgICBpZiAoIW1Db25kaXRpb25hbFN0YWNrLmVtcHR5KCkpCiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgY29uc3QgQ29uZGl0aW9uYWxCbG9jayYgYmxvY2sgPSBtQ29uZGl0aW9u
YWxTdGFjay5iYWNrKCk7Ci0gICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6OkNPTkRJVElPTkFMX1VOVEVSTUlOQVRFRCwKKyAgICAgICAgICAgICAgICBtRGlh
Z25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfQ09ORElUSU9OQUxfVU5URVJNSU5BVEVE
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLmxvY2F0aW9uLCBi
bG9jay50eXBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjY4LDcg
KzI2OCw3IEBAIHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZURpcmVjdGl2ZShUb2tlbiogdG9r
ZW4pCiAgICAgc3dpdGNoKGRpcmVjdGl2ZSkKICAgICB7CiAgICAgICBjYXNlIERJUkVDVElWRV9O
T05FOgotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6RElSRUNUSVZF
X0lOVkFMSURfTkFNRSwKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OlBQX0RJUkVDVElWRV9JTlZBTElEX05BTUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICBza2lwVW50aWxFT0QobVRv
a2VuaXplciwgdG9rZW4pOwogICAgICAgICBicmVhazsKQEAgLTMxOSw3ICszMTksNyBAQCB2b2lk
IERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VEaXJlY3RpdmUoVG9rZW4qIHRva2VuKQogICAgIHNraXBV
bnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CiAgICAgaWYgKHRva2VuLT50eXBlID09IFRva2Vu
OjpMQVNUKQogICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OkVPRl9JTl9ESVJFQ1RJVkUsCisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpQUF9FT0ZfSU5fRElSRUNUSVZFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICB9CiB9CkBAIC0zMzEsMTkgKzMzMSwx
OSBAQCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VEZWZpbmUoVG9rZW4qIHRva2VuKQogICAg
IG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CiAgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJ
REVOVElGSUVSKQogICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpQUF9VTkVYUEVDVEVEX1RPS0VOLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBpZiAoaXNNYWNyb1ByZWRlZmluZWQodG9rZW4tPnRleHQsICptTWFjcm9TZXQpKQogICAg
IHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1BQ1JPX1BSRURF
RklORURfUkVERUZJTkVELAorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGlj
czo6UFBfTUFDUk9fUFJFREVGSU5FRF9SRURFRklORUQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIGlmIChpc01hY3JvTmFtZVJlc2VydmVkKHRva2VuLT50ZXh0KSkKICAgICB7Ci0g
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19OQU1FX1JFU0VS
VkVELAorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfTUFDUk9f
TkFNRV9SRVNFUlZFRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0
aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNjgsNyArMzY4
LDcgQEAgdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGVmaW5lKFRva2VuKiB0b2tlbikKIAog
ICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gJyknKQogICAgICAgICB7Ci0gICAgICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAg
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9VTkVYUEVDVEVEX1RP
S0VOLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPnRleHQpOwogICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtMzk2LDcgKzM5Niw3IEBAIHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJz
ZURlZmluZShUb2tlbiogdG9rZW4pCiAgICAgTWFjcm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBtTWFjcm9TZXQtPmZpbmQobWFjcm8ubmFtZSk7CiAgICAgaWYgKGl0ZXIgIT0gbU1hY3JvU2V0
LT5lbmQoKSAmJiAhbWFjcm8uZXF1YWxzKGl0ZXItPnNlY29uZCkpCiAgICAgewotICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6TUFDUk9fUkVERUZJTkVELAorICAgICAg
ICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfTUFDUk9fUkVERUZJTkVELAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1hY3JvLm5hbWUpOwogICAgICAgICByZXR1cm47CkBAIC00MTEs
NyArNDExLDcgQEAgdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVW5kZWYoVG9rZW4qIHRva2Vu
KQogICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CiAgICAgaWYgKHRva2VuLT50eXBlICE9IFRv
a2VuOjpJREVOVElGSUVSKQogICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0
KERpYWdub3N0aWNzOjpQUF9VTkVYUEVDVEVEX1RPS0VOLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTQyMSw3ICs0MjEsNyBAQCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VVbmRl
ZihUb2tlbiogdG9rZW4pCiAgICAgewogICAgICAgICBpZiAoaXRlci0+c2Vjb25kLnByZWRlZmlu
ZWQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpNQUNST19QUkVERUZJTkVEX1VOREVGSU5FRCwKKyAgICAgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9NQUNST19QUkVERUZJTkVEX1VOREVGSU5FRCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRl
eHQpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKQEAgLTQ1Nyw3ICs0NTcsNyBAQCB2b2lkIERp
cmVjdGl2ZVBhcnNlcjo6cGFyc2VFbHNlKFRva2VuKiB0b2tlbikKIAogICAgIGlmIChtQ29uZGl0
aW9uYWxTdGFjay5lbXB0eSgpKQogICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQo
RGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX0VMU0VfV0lUSE9VVF9JRiwKKyAgICAgICAgbURpYWdu
b3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX0NPTkRJVElPTkFMX0VMU0VfV0lUSE9VVF9J
RiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+
dGV4dCk7CiAgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CiAgICAgICAg
IHJldHVybjsKQEAgLTQ3Miw3ICs0NzIsNyBAQCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VF
bHNlKFRva2VuKiB0b2tlbikKICAgICB9CiAgICAgaWYgKGJsb2NrLmZvdW5kRWxzZUdyb3VwKQog
ICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElP
TkFMX0VMU0VfQUZURVJfRUxTRSwKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25v
c3RpY3M6OlBQX0NPTkRJVElPTkFMX0VMU0VfQUZURVJfRUxTRSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgIHNraXBV
bnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CiAgICAgICAgIHJldHVybjsKQEAgLTQ4Niw3ICs0
ODYsNyBAQCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFbHNlKFRva2VuKiB0b2tlbikKICAg
ICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwogICAgIGlmICghaXNFT0QodG9rZW4pKQogICAgIHsK
LSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX1VO
RVhQRUNURURfVE9LRU4sCisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNz
OjpQUF9DT05ESVRJT05BTF9VTkVYUEVDVEVEX1RPS0VOLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgc2tpcFVudGls
RU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKICAgICB9CkBAIC00OTgsNyArNDk4LDcgQEAgdm9pZCBE
aXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxpZihUb2tlbiogdG9rZW4pCiAKICAgICBpZiAobUNvbmRp
dGlvbmFsU3RhY2suZW1wdHkoKSkKICAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0
KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9FTElGX1dJVEhPVVRfSUYsCisgICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9DT05ESVRJT05BTF9FTElGX1dJVEhPVVRf
SUYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4t
PnRleHQpOwogICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOwogICAgICAg
ICByZXR1cm47CkBAIC01MTMsNyArNTEzLDcgQEAgdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNl
RWxpZihUb2tlbiogdG9rZW4pCiAgICAgfQogICAgIGlmIChibG9jay5mb3VuZEVsc2VHcm91cCkK
ICAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJ
T05BTF9FTElGX0FGVEVSX0VMU0UsCisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpQUF9DT05ESVRJT05BTF9FTElGX0FGVEVSX0VMU0UsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICBza2lw
VW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOwogICAgICAgICByZXR1cm47CkBAIC01MzgsNyAr
NTM4LDcgQEAgdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRW5kaWYoVG9rZW4qIHRva2VuKQog
CiAgICAgaWYgKG1Db25kaXRpb25hbFN0YWNrLmVtcHR5KCkpCiAgICAgewotICAgICAgICBtRGlh
Z25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfRU5ESUZfV0lUSE9VVF9J
RiwKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX0NPTkRJVElP
TkFMX0VORElGX1dJVEhPVVRfSUYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
LT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXpl
ciwgdG9rZW4pOwogICAgICAgICByZXR1cm47CkBAIC01NTAsNyArNTUwLDcgQEAgdm9pZCBEaXJl
Y3RpdmVQYXJzZXI6OnBhcnNlRW5kaWYoVG9rZW4qIHRva2VuKQogICAgIG1Ub2tlbml6ZXItPmxl
eCh0b2tlbik7CiAgICAgaWYgKCFpc0VPRCh0b2tlbikpCiAgICAgewotICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfVU5FWFBFQ1RFRF9UT0tFTiwK
KyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX0NPTkRJVElPTkFM
X1VORVhQRUNURURfVE9LRU4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5s
b2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwg
dG9rZW4pOwogICAgIH0KQEAgLTYxOCw3ICs2MTgsNyBAQCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6
cGFyc2VQcmFnbWEoVG9rZW4qIHRva2VuKQogICAgICAgICAgICAgICAgICAgICAgIChzdGF0ZSA9
PSBSSUdIVF9QQVJFTiArIDEpKTsgIC8vIFdpdGggdmFsdWUuCiAgICAgaWYgKCF2YWxpZCkKICAg
ICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTlJFQ09HTkla
RURfUFJBR01BLAorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBf
VU5SRUNPR05JWkVEX1BSQUdNQSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4t
PmxvY2F0aW9uLCBuYW1lKTsKICAgICB9CiAgICAgZWxzZSBpZiAoc3RhdGUgPiBQUkFHTUFfTkFN
RSkgIC8vIERvIG5vdCBub3RpZnkgZm9yIGVtcHR5IHByYWdtYS4KQEAgLTY1MCw3ICs2NTAsNyBA
QCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFeHRlbnNpb24oVG9rZW4qIHRva2VuKQogICAg
ICAgICAgIGNhc2UgRVhUX05BTUU6CiAgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50
eXBlICE9IFRva2VuOjpJREVOVElGSUVSKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9FWFRFTlNJT05fTkFN
RSwKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBf
SU5WQUxJRF9FWFRFTlNJT05fTkFNRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgICAgICAgICB2YWxp
ZCA9IGZhbHNlOwogICAgICAgICAgICAgfQpAQCAtNjU5LDcgKzY1OSw3IEBAIHZvaWQgRGlyZWN0
aXZlUGFyc2VyOjpwYXJzZUV4dGVuc2lvbihUb2tlbiogdG9rZW4pCiAgICAgICAgICAgY2FzZSBD
T0xPTjoKICAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gJzonKSkKICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJl
cG9ydChEaWFnbm9zdGljczo6UFBfVU5FWFBFQ1RFRF9UT0tFTiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAg
ICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgfQpAQCAtNjY3LDcgKzY2Nyw3
IEBAIHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4dGVuc2lvbihUb2tlbiogdG9rZW4pCiAg
ICAgICAgICAgY2FzZSBFWFRfQkVIQVZJT1I6CiAgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRv
a2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKSkKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9FWFRFTlNJ
T05fQkVIQVZJT1IsCisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25v
c3RpY3M6OlBQX0lOVkFMSURfRVhURU5TSU9OX0JFSEFWSU9SLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAg
ICAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICB9CkBAIC02NzYsNyArNjc2LDcg
QEAgdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXh0ZW5zaW9uKFRva2VuKiB0b2tlbikKICAg
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgaWYgKHZhbGlkKQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVD
VEVEX1RPS0VOLAorICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpQUF9VTkVYUEVDVEVEX1RPS0VOLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICAgICAgICAgIHZh
bGlkID0gZmFsc2U7CiAgICAgICAgICAgICB9CkBAIC02ODYsNyArNjg2LDcgQEAgdm9pZCBEaXJl
Y3RpdmVQYXJzZXI6OnBhcnNlRXh0ZW5zaW9uKFRva2VuKiB0b2tlbikKICAgICB9CiAgICAgaWYg
KHZhbGlkICYmIChzdGF0ZSAhPSBFWFRfQkVIQVZJT1IgKyAxKSkKICAgICB7Ci0gICAgICAgIG1E
aWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0VYVEVOU0lPTl9ESVJFQ1RJ
VkUsCisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9JTlZBTElE
X0VYVEVOU0lPTl9ESVJFQ1RJVkUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
LT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgIH0K
QEAgLTcwMCw3ICs3MDAsNyBAQCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VWZXJzaW9uKFRv
a2VuKiB0b2tlbikKIAogICAgIGlmIChtUGFzdEZpcnN0U3RhdGVtZW50KQogICAgIHsKLSAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlZFUlNJT05fTk9UX0ZJUlNUX1NU
QVRFTUVOVCwKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX1ZF
UlNJT05fTk9UX0ZJUlNUX1NUQVRFTUVOVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgIHNraXBVbnRpbEVPRChtVG9r
ZW5pemVyLCB0b2tlbik7CiAgICAgICAgIHJldHVybjsKQEAgLTcyMywxMyArNzIzLDEzIEBAIHZv
aWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZVZlcnNpb24oVG9rZW4qIHRva2VuKQogICAgICAgICAg
IGNhc2UgVkVSU0lPTl9OVU1CRVI6CiAgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50
eXBlICE9IFRva2VuOjpDT05TVF9JTlQpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX1ZFUlNJT05fTlVNQkVS
LAorICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9J
TlZBTElEX1ZFUlNJT05fTlVNQkVSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICAgICAgICAgIHZhbGlk
ID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAodmFsaWQgJiYgIXRva2Vu
LT5pVmFsdWUoJnZlcnNpb24pKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlRFR0VSX09WRVJGTE9XLAorICAgICAgICAg
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9JTlRFR0VSX09WRVJG
TE9XLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwgdG9rZW4tPnRleHQpOwogICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgICAg
ICAgICB9CkBAIC03MzcsNyArNzM3LDcgQEAgdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVmVy
c2lvbihUb2tlbiogdG9rZW4pCiAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGlmICh2
YWxpZCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfVU5FWFBFQ1RFRF9UT0tFTiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0
KTsKICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgfQpAQCAtNzQ3
LDcgKzc0Nyw3IEBAIHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZVZlcnNpb24oVG9rZW4qIHRv
a2VuKQogICAgIH0KICAgICBpZiAodmFsaWQgJiYgKHN0YXRlICE9IFZFUlNJT05fTlVNQkVSICsg
MSkpCiAgICAgewotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5W
QUxJRF9WRVJTSU9OX0RJUkVDVElWRSwKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6OlBQX0lOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICB2YWxp
ZCA9IGZhbHNlOwogICAgIH0KQEAgLTc3OCwxMyArNzc4LDEzIEBAIHZvaWQgRGlyZWN0aXZlUGFy
c2VyOjpwYXJzZUxpbmUoVG9rZW4qIHRva2VuKQogICAgICAgICAgIGNhc2UgTElORV9OVU1CRVI6
CiAgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpDT05TVF9J
TlQpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0
KERpYWdub3N0aWNzOjpJTlZBTElEX0xJTkVfTlVNQkVSLAorICAgICAgICAgICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9JTlZBTElEX0xJTkVfTlVNQkVSLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4t
PnRleHQpOwogICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpZiAodmFsaWQgJiYgIXRva2VuLT5pVmFsdWUoJmxpbmUpKQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJ
TlRFR0VSX09WRVJGTE9XLAorICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERp
YWdub3N0aWNzOjpQUF9JTlRFR0VSX09WRVJGTE9XLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICAgICAg
ICAgIHZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICB9CkBAIC03OTIsMTMgKzc5MiwxMyBAQCB2
b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VMaW5lKFRva2VuKiB0b2tlbikKICAgICAgICAgICBj
YXNlIEZJTEVfTlVNQkVSOgogICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAh
PSBUb2tlbjo6Q09OU1RfSU5UKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGlh
Z25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9GSUxFX05VTUJFUiwKKyAgICAg
ICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfSU5WQUxJRF9G
SUxFX05VTUJFUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+
bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHZhbGlkICYmICF0b2tlbi0+aVZhbHVlKCZm
aWxlKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6SU5URUdFUl9PVkVSRkxPVywKKyAgICAgICAgICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfSU5URUdFUl9PVkVSRkxPVywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0
KTsKICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgfQpAQCAtODA2
LDcgKzgwNiw3IEBAIHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUxpbmUoVG9rZW4qIHRva2Vu
KQogICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBpZiAodmFsaWQpCiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVO
RVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6OlBQX1VORVhQRUNURURfVE9LRU4sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgICAgICAg
ICAgdmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KQEAgLTgxNyw3ICs4MTcsNyBAQCB2b2lk
IERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VMaW5lKFRva2VuKiB0b2tlbikKIAogICAgIGlmICh2YWxp
ZCAmJiAoc3RhdGUgIT0gRklMRV9OVU1CRVIpICYmIChzdGF0ZSAhPSBGSUxFX05VTUJFUiArIDEp
KQogICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFM
SURfTElORV9ESVJFQ1RJVkUsCisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpQUF9JTlZBTElEX0xJTkVfRElSRUNUSVZFLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgdmFsaWQgPSBmYWxz
ZTsKICAgICB9CkBAIC04OTMsNyArODkzLDcgQEAgaW50IERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VF
eHByZXNzaW9uSWYoVG9rZW4qIHRva2VuKQogICAgIC8vIFdhcm4gaWYgdGhlcmUgYXJlIHRva2Vu
cyBhZnRlciAjaWYgZXhwcmVzc2lvbi4KICAgICBpZiAoIWlzRU9EKHRva2VuKSkKICAgICB7Ci0g
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9VTkVY
UEVDVEVEX1RPS0VOLAorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6
UFBfQ09ORElUSU9OQUxfVU5FWFBFQ1RFRF9UT0tFTiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgIHNraXBVbnRpbEVP
RChtVG9rZW5pemVyLCB0b2tlbik7CiAgICAgfQpAQCAtOTA5LDcgKzkwOSw3IEBAIGludCBEaXJl
Y3RpdmVQYXJzZXI6OnBhcnNlRXhwcmVzc2lvbklmZGVmKFRva2VuKiB0b2tlbikKICAgICBtVG9r
ZW5pemVyLT5sZXgodG9rZW4pOwogICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJ
RklFUikKICAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpV
TkVYUEVDVEVEX1RPS0VOLAorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGlj
czo6UFBfVU5FWFBFQ1RFRF9UT0tFTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5p
emVyLCB0b2tlbik7CiAgICAgICAgIHJldHVybiAwOwpAQCAtOTIyLDcgKzkyMiw3IEBAIGludCBE
aXJlY3RpdmVQYXJzZXI6OnBhcnNlRXhwcmVzc2lvbklmZGVmKFRva2VuKiB0b2tlbikKICAgICBt
VG9rZW5pemVyLT5sZXgodG9rZW4pOwogICAgIGlmICghaXNFT0QodG9rZW4pKQogICAgIHsKLSAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX1VORVhQ
RUNURURfVE9LRU4sCisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQ
UF9DT05ESVRJT05BTF9VTkVYUEVDVEVEX1RPS0VOLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgc2tpcFVudGlsRU9E
KG1Ub2tlbml6ZXIsIHRva2VuKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNz
aW9uUGFyc2VyLmNwcAppbmRleCAxZmFlMDA5NDU2YTE5YTZiZGE4MGEyMzA0YzBiOGVhYzc0YmVk
ZDliLi4zYjgwYjQ2NjI0YTczYjlkNjM2NWYyZjZiYzAxYWE2MTY3OTI0ODZmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJl
c3Npb25QYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci5jcHAKQEAgLTEsMjEgKzEsMjEgQEAKLS8q
IEFwcGxlIE5vdGU6IEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBBcHBsZSBlbGVjdHMgdG8g
ZGlzdHJpYnV0ZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBCU0QgbGljZW5zZS4g
Ki8KKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjcuICAqLwogCi0vKiBB
IEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMy4wLjEuICAqLworLyogQXBwbGUgTm90
ZTogRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIEFwcGxlIGVsZWN0cyB0byBkaXN0cmlidXRl
IHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEJTRCBsaWNlbnNlLiAqLwogCiAvKiBC
aXNvbiBpbXBsZW1lbnRhdGlvbiBmb3IgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwotCi0gICBDb3B5
cmlnaHQgKEMpIDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLgotCisgICAKKyAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAy
MDAwLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAKICAgIFRoaXMgcHJv
Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k
aWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieQogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0
aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKICAgIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0KKyAgIAogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQorICAgCiAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQogICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDov
L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCkBAIC0yOCw3ICsyOCw3IEBACiAgICBzcGVj
aWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1
bHRpbmcKICAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05V
IEdlbmVyYWwgUHVibGljCiAgICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlv
bi4KLQorICAgCiAgICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluCiAgICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICovCiAK
QEAgLTQ2LDcgKzQ2LDcgQEAKICNkZWZpbmUgWVlCSVNPTiAxCiAKIC8qIEJpc29uIHZlcnNpb24u
ICAqLwotI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjMuMC4xIgorI2RlZmluZSBZWUJJU09OX1ZF
UlNJT04gIjIuNyIKIAogLyogU2tlbGV0b24gbmFtZS4gICovCiAjZGVmaW5lIFlZU0tFTEVUT05f
TkFNRSAieWFjYy5jIgpAQCAtNjUsMTAgKzY1LDExIEBACiAjZGVmaW5lIHl5cGFyc2UgICAgICAg
ICBwcHBhcnNlCiAjZGVmaW5lIHl5bGV4ICAgICAgICAgICBwcGxleAogI2RlZmluZSB5eWVycm9y
ICAgICAgICAgcHBlcnJvcgorI2RlZmluZSB5eWx2YWwgICAgICAgICAgcHBsdmFsCisjZGVmaW5l
IHl5Y2hhciAgICAgICAgICBwcGNoYXIKICNkZWZpbmUgeXlkZWJ1ZyAgICAgICAgIHBwZGVidWcK
ICNkZWZpbmUgeXluZXJycyAgICAgICAgIHBwbmVycnMKIAotCiAvKiBDb3B5IHRoZSBmaXJzdCBw
YXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KIAogCkBAIC0xMzMsMTEgKzEzNCwxMSBAQCBz
dGF0aWMgdm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7
CiAKIAogCi0jIGlmbmRlZiBZWV9OVUxMUFRSCisjIGlmbmRlZiBZWV9OVUxMCiAjICBpZiBkZWZp
bmVkIF9fY3BsdXNwbHVzICYmIDIwMTEwM0wgPD0gX19jcGx1c3BsdXMKLSMgICBkZWZpbmUgWVlf
TlVMTFBUUiBudWxscHRyCisjICAgZGVmaW5lIFlZX05VTEwgbnVsbHB0cgogIyAgZWxzZQotIyAg
IGRlZmluZSBZWV9OVUxMUFRSIDAKKyMgICBkZWZpbmUgWVlfTlVMTCAwCiAjICBlbmRpZgogIyBl
bmRpZgogCkBAIC0xNTAsNyArMTUxLDcgQEAgc3RhdGljIHZvaWQgeXllcnJvcihDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pOwogI2VuZGlmCiAKIAotLyogRGVidWcgdHJhY2Vz
LiAgKi8KKy8qIEVuYWJsaW5nIHRyYWNlcy4gICovCiAjaWZuZGVmIFlZREVCVUcKICMgZGVmaW5l
IFlZREVCVUcgMAogI2VuZGlmCkBAIC0xNTgsMzQgKzE1OSw0NyBAQCBzdGF0aWMgdm9pZCB5eWVy
cm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7CiBleHRlcm4gaW50IHBw
ZGVidWc7CiAjZW5kaWYKIAotLyogVG9rZW4gdHlwZS4gICovCisvKiBUb2tlbnMuICAqLwogI2lm
bmRlZiBZWVRPS0VOVFlQRQogIyBkZWZpbmUgWVlUT0tFTlRZUEUKLSAgZW51bSB5eXRva2VudHlw
ZQotICB7Ci0gICAgVE9LX0NPTlNUX0lOVCA9IDI1OCwKLSAgICBUT0tfT1BfT1IgPSAyNTksCi0g
ICAgVE9LX09QX0FORCA9IDI2MCwKLSAgICBUT0tfT1BfRVEgPSAyNjEsCi0gICAgVE9LX09QX05F
ID0gMjYyLAotICAgIFRPS19PUF9MRSA9IDI2MywKLSAgICBUT0tfT1BfR0UgPSAyNjQsCi0gICAg
VE9LX09QX0xFRlQgPSAyNjUsCi0gICAgVE9LX09QX1JJR0hUID0gMjY2LAotICAgIFRPS19VTkFS
WSA9IDI2NwotICB9OworICAgLyogUHV0IHRoZSB0b2tlbnMgaW50byB0aGUgc3ltYm9sIHRhYmxl
LCBzbyB0aGF0IEdEQiBhbmQgb3RoZXIgZGVidWdnZXJzCisgICAgICBrbm93IGFib3V0IHRoZW0u
ICAqLworICAgZW51bSB5eXRva2VudHlwZSB7CisgICAgIFRPS19DT05TVF9JTlQgPSAyNTgsCisg
ICAgIFRPS19PUF9PUiA9IDI1OSwKKyAgICAgVE9LX09QX0FORCA9IDI2MCwKKyAgICAgVE9LX09Q
X05FID0gMjYxLAorICAgICBUT0tfT1BfRVEgPSAyNjIsCisgICAgIFRPS19PUF9HRSA9IDI2MywK
KyAgICAgVE9LX09QX0xFID0gMjY0LAorICAgICBUT0tfT1BfUklHSFQgPSAyNjUsCisgICAgIFRP
S19PUF9MRUZUID0gMjY2LAorICAgICBUT0tfVU5BUlkgPSAyNjcKKyAgIH07CiAjZW5kaWYKIAot
LyogVmFsdWUgdHlwZS4gICovCisKICNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQg
WVlTVFlQRV9JU19ERUNMQVJFRAogdHlwZWRlZiBpbnQgWVlTVFlQRTsKICMgZGVmaW5lIFlZU1RZ
UEVfSVNfVFJJVklBTCAxCisjIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jzb2xlc2NlbnQ7
IHdpbGwgYmUgd2l0aGRyYXduICovCiAjIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKICNl
bmRpZgogCiAKLQorI2lmZGVmIFlZUEFSU0VfUEFSQU0KKyNpZiBkZWZpbmVkIF9fU1REQ19fIHx8
IGRlZmluZWQgX19jcGx1c3BsdXMKK2ludCBwcHBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKTsK
KyNlbHNlCitpbnQgcHBwYXJzZSAoKTsKKyNlbmRpZgorI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFN
ICovCisjaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCiBpbnQgcHBw
YXJzZSAoQ29udGV4dCAqY29udGV4dCk7CisjZWxzZQoraW50IHBwcGFyc2UgKCk7CisjZW5kaWYK
KyNlbmRpZiAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KIAogCiAKQEAgLTIwNSw4ICsyMTksMTEgQEAg
dHlwZWRlZiB1bnNpZ25lZCBjaGFyIHl5dHlwZV91aW50ODsKIAogI2lmZGVmIFlZVFlQRV9JTlQ4
CiB0eXBlZGVmIFlZVFlQRV9JTlQ4IHl5dHlwZV9pbnQ4OwotI2Vsc2UKKyNlbGlmIChkZWZpbmVk
IF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19j
cGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKIHR5cGVkZWYgc2lnbmVkIGNoYXIgeXl0eXBl
X2ludDg7CisjZWxzZQordHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDg7CiAjZW5kaWYKIAog
I2lmZGVmIFlZVFlQRV9VSU5UMTYKQEAgLTIyNiw3ICsyNDMsOCBAQCB0eXBlZGVmIHNob3J0IGlu
dCB5eXR5cGVfaW50MTY7CiAjICBkZWZpbmUgWVlTSVpFX1QgX19TSVpFX1RZUEVfXwogIyBlbGlm
IGRlZmluZWQgc2l6ZV90CiAjICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90Ci0jIGVsaWYgISBkZWZp
bmVkIFlZU0laRV9UCisjIGVsaWYgISBkZWZpbmVkIFlZU0laRV9UICYmIChkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3Bs
dXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKICMgIGluY2x1ZGUgPHN0ZGRlZi5oPiAvKiBJTkZSSU5H
RVMgT04gVVNFUiBOQU1FIFNQQUNFICovCiAjICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90CiAjIGVs
c2UKQEAgLTI0OCwzMyArMjY2LDYgQEAgdHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDE2Owog
IyBlbmRpZgogI2VuZGlmCiAKLSNpZm5kZWYgWVlfQVRUUklCVVRFCi0jIGlmIChkZWZpbmVkIF9f
R05VQ19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAmJiAoMiA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSAyICYmIDk2IDw9IF9fR05VQ19N
SU5PUl9fKSkpICBcCi0gICAgIHx8IGRlZmluZWQgX19TVU5QUk9fQyAmJiAweDUxMTAgPD0gX19T
VU5QUk9fQwotIyAgZGVmaW5lIFlZX0FUVFJJQlVURShTcGVjKSBfX2F0dHJpYnV0ZV9fKFNwZWMp
Ci0jIGVsc2UKLSMgIGRlZmluZSBZWV9BVFRSSUJVVEUoU3BlYykgLyogZW1wdHkgKi8KLSMgZW5k
aWYKLSNlbmRpZgotCi0jaWZuZGVmIFlZX0FUVFJJQlVURV9QVVJFCi0jIGRlZmluZSBZWV9BVFRS
SUJVVEVfUFVSRSAgIFlZX0FUVFJJQlVURSAoKF9fcHVyZV9fKSkKLSNlbmRpZgotCi0jaWZuZGVm
IFlZX0FUVFJJQlVURV9VTlVTRUQKLSMgZGVmaW5lIFlZX0FUVFJJQlVURV9VTlVTRUQgWVlfQVRU
UklCVVRFICgoX191bnVzZWRfXykpCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkIF9Ob3JldHVybiBc
Ci0gICAgICYmICghZGVmaW5lZCBfX1NURENfVkVSU0lPTl9fIHx8IF9fU1REQ19WRVJTSU9OX18g
PCAyMDExMTIpCi0jIGlmIGRlZmluZWQgX01TQ19WRVIgJiYgMTIwMCA8PSBfTVNDX1ZFUgotIyAg
ZGVmaW5lIF9Ob3JldHVybiBfX2RlY2xzcGVjIChub3JldHVybikKLSMgZWxzZQotIyAgZGVmaW5l
IF9Ob3JldHVybiBZWV9BVFRSSUJVVEUgKChfX25vcmV0dXJuX18pKQotIyBlbmRpZgotI2VuZGlm
Ci0KIC8qIFN1cHByZXNzIHVudXNlZC12YXJpYWJsZSB3YXJuaW5ncyBieSAidXNpbmciIEUuICAq
LwogI2lmICEgZGVmaW5lZCBsaW50IHx8IGRlZmluZWQgX19HTlVDX18KICMgZGVmaW5lIFlZVVNF
KEUpICgodm9pZCkgKEUpKQpAQCAtMjgyLDI2ICsyNzMsMjQgQEAgdHlwZWRlZiBzaG9ydCBpbnQg
eXl0eXBlX2ludDE2OwogIyBkZWZpbmUgWVlVU0UoRSkgLyogZW1wdHkgKi8KICNlbmRpZgogCi0j
aWYgZGVmaW5lZCBfX0dOVUNfXyAmJiA0MDcgPD0gX19HTlVDX18gKiAxMDAgKyBfX0dOVUNfTUlO
T1JfXwotLyogU3VwcHJlc3MgYW4gaW5jb3JyZWN0IGRpYWdub3N0aWMgYWJvdXQgeXlsdmFsIGJl
aW5nIHVuaW5pdGlhbGl6ZWQuICAqLwotIyBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElB
TElaRURfQkVHSU4gXAotICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBwdXNoIikgXAotICAg
IF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVd1bmluaXRpYWxpemVkXCIiKVwK
LSAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XbWF5YmUtdW5pbml0aWFs
aXplZFwiIikKLSMgZGVmaW5lIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORCBcCi0g
ICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIHBvcCIpCisvKiBJZGVudGl0eSBmdW5jdGlvbiwg
dXNlZCB0byBzdXBwcmVzcyB3YXJuaW5ncyBhYm91dCBjb25zdGFudCBjb25kaXRpb25zLiAgKi8K
KyNpZm5kZWYgbGludAorIyBkZWZpbmUgWVlJRChOKSAoTikKICNlbHNlCi0jIGRlZmluZSBZWV9J
TklUSUFMX1ZBTFVFKFZhbHVlKSBWYWx1ZQotI2VuZGlmCi0jaWZuZGVmIFlZX0lHTk9SRV9NQVlC
RV9VTklOSVRJQUxJWkVEX0JFR0lOCi0jIGRlZmluZSBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFM
SVpFRF9CRUdJTgotIyBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5ECisj
aWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwg
ZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIGludAorWVlJ
RCAoaW50IHl5aSkKKyNlbHNlCitzdGF0aWMgaW50CitZWUlEICh5eWkpCisgICAgaW50IHl5aTsK
ICNlbmRpZgotI2lmbmRlZiBZWV9JTklUSUFMX1ZBTFVFCi0jIGRlZmluZSBZWV9JTklUSUFMX1ZB
TFVFKFZhbHVlKSAvKiBOb3RoaW5nLiAqLworeworICByZXR1cm4geXlpOworfQogI2VuZGlmCiAK
LQogI2lmICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRQogCiAvKiBUaGUg
cGFyc2VyIGludm9rZXMgYWxsb2NhIG9yIG1hbGxvYzsgZGVmaW5lIHRoZSBuZWNlc3Nhcnkgc3lt
Ym9scy4gICovCkBAIC0zMTksNyArMzA4LDggQEAgdHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2lu
dDE2OwogIyAgICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKICMgICBlbHNlCiAjICAgIGRlZmluZSBZ
WVNUQUNLX0FMTE9DIGFsbG9jYQotIyAgICBpZiAhIGRlZmluZWQgX0FMTE9DQV9IICYmICEgZGVm
aW5lZCBFWElUX1NVQ0NFU1MKKyMgICAgaWYgISBkZWZpbmVkIF9BTExPQ0FfSCAmJiAhIGRlZmlu
ZWQgRVhJVF9TVUNDRVNTICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZV
TkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikK
ICMgICAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNF
ICovCiAgICAgICAvKiBVc2UgRVhJVF9TVUNDRVNTIGFzIGEgd2l0bmVzcyBmb3Igc3RkbGliLmgu
ICAqLwogIyAgICAgaWZuZGVmIEVYSVRfU1VDQ0VTUwpAQCAtMzMxLDggKzMyMSw4IEBAIHR5cGVk
ZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQxNjsKICMgZW5kaWYKIAogIyBpZmRlZiBZWVNUQUNLX0FM
TE9DCi0gICAvKiBQYWNpZnkgR0NDJ3MgJ2VtcHR5IGlmLWJvZHknIHdhcm5pbmcuICAqLwotIyAg
ZGVmaW5lIFlZU1RBQ0tfRlJFRShQdHIpIGRvIHsgLyogZW1wdHkgKi87IH0gd2hpbGUgKDApCisg
ICAvKiBQYWNpZnkgR0NDJ3MgYGVtcHR5IGlmLWJvZHknIHdhcm5pbmcuICAqLworIyAgZGVmaW5l
IFlZU1RBQ0tfRlJFRShQdHIpIGRvIHsgLyogZW1wdHkgKi87IH0gd2hpbGUgKFlZSUQgKDApKQog
IyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQogICAgIC8qIFRoZSBPUyBtaWdodCBndWFy
YW50ZWUgb25seSBvbmUgZ3VhcmQgcGFnZSBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjaywKICAg
ICAgICBhbmQgYSBwYWdlIHNpemUgY2FuIGJlIGFzIHNtYWxsIGFzIDQwOTYgYnl0ZXMuICBTbyB3
ZSBjYW5ub3Qgc2FmZWx5CkBAIC0zNDgsNyArMzM4LDcgQEAgdHlwZWRlZiBzaG9ydCBpbnQgeXl0
eXBlX2ludDE2OwogIyAgZW5kaWYKICMgIGlmIChkZWZpbmVkIF9fY3BsdXNwbHVzICYmICEgZGVm
aW5lZCBFWElUX1NVQ0NFU1MgXAogICAgICAgICYmICEgKChkZWZpbmVkIFlZTUFMTE9DIHx8IGRl
ZmluZWQgbWFsbG9jKSBcCi0gICAgICAgICAgICAgJiYgKGRlZmluZWQgWVlGUkVFIHx8IGRlZmlu
ZWQgZnJlZSkpKQorCSAgICAgJiYgKGRlZmluZWQgWVlGUkVFIHx8IGRlZmluZWQgZnJlZSkpKQog
IyAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICov
CiAjICAgaWZuZGVmIEVYSVRfU1VDQ0VTUwogIyAgICBkZWZpbmUgRVhJVF9TVUNDRVNTIDAKQEAg
LTM1NiwxMyArMzQ2LDE1IEBAIHR5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQxNjsKICMgIGVu
ZGlmCiAjICBpZm5kZWYgWVlNQUxMT0MKICMgICBkZWZpbmUgWVlNQUxMT0MgbWFsbG9jCi0jICAg
aWYgISBkZWZpbmVkIG1hbGxvYyAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTCisjICAgaWYgISBk
ZWZpbmVkIG1hbGxvYyAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTICYmIChkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3Bs
dXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKIHZvaWQgKm1hbGxvYyAoWVlTSVpFX1QpOyAvKiBJTkZS
SU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCiAjICAgZW5kaWYKICMgIGVuZGlmCiAjICBpZm5k
ZWYgWVlGUkVFCiAjICAgZGVmaW5lIFlZRlJFRSBmcmVlCi0jICAgaWYgISBkZWZpbmVkIGZyZWUg
JiYgISBkZWZpbmVkIEVYSVRfU1VDQ0VTUworIyAgIGlmICEgZGVmaW5lZCBmcmVlICYmICEgZGVm
aW5lZCBFWElUX1NVQ0NFU1MgJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9f
RlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVS
KQogdm9pZCBmcmVlICh2b2lkICopOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICov
CiAjICAgZW5kaWYKICMgIGVuZGlmCkBAIC0zNzIsNyArMzY0LDcgQEAgdm9pZCBmcmVlICh2b2lk
ICopOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCiAKICNpZiAoISBkZWZpbmVk
IHl5b3ZlcmZsb3cgXAogICAgICAmJiAoISBkZWZpbmVkIF9fY3BsdXNwbHVzIFwKLSAgICAgICAg
IHx8IChkZWZpbmVkIFlZU1RZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkK
KwkgfHwgKGRlZmluZWQgWVlTVFlQRV9JU19UUklWSUFMICYmIFlZU1RZUEVfSVNfVFJJVklBTCkp
KQogCiAvKiBBIHR5cGUgdGhhdCBpcyBwcm9wZXJseSBhbGlnbmVkIGZvciBhbnkgc3RhY2sgbWVt
YmVyLiAgKi8KIHVuaW9uIHl5YWxsb2MKQEAgLTM5NywxNiArMzg5LDE2IEBAIHVuaW9uIHl5YWxs
b2MKICAgIGVsZW1lbnRzIGluIHRoZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9j
YXRpb24gb2YgdGhlCiAgICBzdGFjay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBwcm9wZXJseSBhbGln
bmVkIGxvY2F0aW9uIGZvciB0aGUgbmV4dAogICAgc3RhY2suICAqLwotIyBkZWZpbmUgWVlTVEFD
S19SRUxPQ0FURShTdGFja19hbGxvYywgU3RhY2spICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBZWVNJWkVfVCB5
eW5ld2J5dGVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICBZWUNPUFkgKCZ5eXB0ci0+U3RhY2tfYWxsb2MsIFN0YWNrLCB5eXNpemUpOyAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICBTdGFjayA9ICZ5eXB0ci0+U3RhY2tfYWxsb2M7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB5eW5ld2J5dGVzID0g
eXlzdGFja3NpemUgKiBzaXplb2YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJTVVNOyBcCi0g
ICAgICAgIHl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7ICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgd2hpbGUgKDApCisjIGRlZmlu
ZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrX2FsbG9jLCBTdGFjaykJCQkJXAorICAgIGRvCQkJCQkJ
CQkJXAorICAgICAgewkJCQkJCQkJCVwKKwlZWVNJWkVfVCB5eW5ld2J5dGVzOwkJCQkJCVwKKwlZ
WUNPUFkgKCZ5eXB0ci0+U3RhY2tfYWxsb2MsIFN0YWNrLCB5eXNpemUpOwkJCVwKKwlTdGFjayA9
ICZ5eXB0ci0+U3RhY2tfYWxsb2M7CQkJCQlcCisJeXluZXdieXRlcyA9IHl5c3RhY2tzaXplICog
c2l6ZW9mICgqU3RhY2spICsgWVlTVEFDS19HQVBfTUFYSU1VTTsgXAorCXl5cHRyICs9IHl5bmV3
Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7CQkJCVwKKyAgICAgIH0JCQkJCQkJCQlcCisgICAgd2hp
bGUgKFlZSUQgKDApKQogCiAjZW5kaWYKIApAQCAtNDI1LDcgKzQxNyw3IEBAIHVuaW9uIHl5YWxs
b2MKICAgICAgICAgICBmb3IgKHl5aSA9IDA7IHl5aSA8IChDb3VudCk7IHl5aSsrKSAgIFwKICAg
ICAgICAgICAgIChEc3QpW3l5aV0gPSAoU3JjKVt5eWldOyAgICAgICAgICAgIFwKICAgICAgICAg
fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHdoaWxlICgw
KQorICAgICAgd2hpbGUgKFlZSUQgKDApKQogIyAgZW5kaWYKICMgZW5kaWYKICNlbmRpZiAvKiAh
WVlDT1BZX05FRURFRCAqLwpAQCAtNDQxLDE5ICs0MzMsMTcgQEAgdW5pb24geXlhbGxvYwogI2Rl
ZmluZSBZWU5OVFMgIDMKIC8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBydWxlcy4gICovCiAjZGVm
aW5lIFlZTlJVTEVTICAyNgotLyogWVlOU1RBVEVTIC0tIE51bWJlciBvZiBzdGF0ZXMuICAqLwor
LyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHN0YXRlcy4gICovCiAjZGVmaW5lIFlZTlNUQVRFUyAg
NTIKIAotLyogWVlUUkFOU0xBVEVbWVlYXSAtLSBTeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcg
dG8gWVlYIGFzIHJldHVybmVkCi0gICBieSB5eWxleCwgd2l0aCBvdXQtb2YtYm91bmRzIGNoZWNr
aW5nLiAgKi8KKy8qIFlZVFJBTlNMQVRFKFlZTEVYKSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNv
cnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLwogI2RlZmluZSBZWVVOREVGVE9LICAyCiAjZGVmaW5l
IFlZTUFYVVRPSyAgIDI2NwogCi0jZGVmaW5lIFlZVFJBTlNMQVRFKFlZWCkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIFlZVFJBTlNMQVRF
KFlZWCkJCQkJCQlcCiAgICgodW5zaWduZWQgaW50KSAoWVlYKSA8PSBZWU1BWFVUT0sgPyB5eXRy
YW5zbGF0ZVtZWVhdIDogWVlVTkRFRlRPSykKIAotLyogWVlUUkFOU0xBVEVbVE9LRU4tTlVNXSAt
LSBTeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gVE9LRU4tTlVNCi0gICBhcyByZXR1cm5l
ZCBieSB5eWxleCwgd2l0aG91dCBvdXQtb2YtYm91bmRzIGNoZWNraW5nLiAgKi8KKy8qIFlZVFJB
TlNMQVRFW1lZTEVYXSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlM
RVguICAqLwogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRyYW5zbGF0ZVtdID0KIHsKICAg
ICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLApAQCAtNDg2LDEyICs0NzYsMzYgQEAgc3RhdGljIGNvbnN0IHl5dHlwZV91
aW50OCB5eXRyYW5zbGF0ZVtdID0KIH07CiAKICNpZiBZWURFQlVHCi0gIC8qIFlZUkxJTkVbWVlO
XSAtLSBTb3VyY2UgbGluZSB3aGVyZSBydWxlIG51bWJlciBZWU4gd2FzIGRlZmluZWQuICAqLwor
LyogWVlQUkhTW1lZTl0gLS0gSW5kZXggb2YgdGhlIGZpcnN0IFJIUyBzeW1ib2wgb2YgcnVsZSBu
dW1iZXIgWVlOIGluCisgICBZWVJIUy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5
cHJoc1tdID0KK3sKKyAgICAgICAwLCAgICAgMCwgICAgIDMsICAgICA1LCAgICAgNywgICAgMTEs
ICAgIDE1LCAgICAxOSwgICAgMjMsICAgIDI3LAorICAgICAgMzEsICAgIDM1LCAgICAzOSwgICAg
NDMsICAgIDQ3LCAgICA1MSwgICAgNTUsICAgIDU5LCAgICA2MywgICAgNjcsCisgICAgICA3MSwg
ICAgNzUsICAgIDc5LCAgICA4MiwgICAgODUsICAgIDg4LCAgICA5MQorfTsKKworLyogWVlSSFMg
LS0gQSBgLTEnLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBydWxlcycgUkhTLiAgKi8KK3N0YXRpYyBj
b25zdCB5eXR5cGVfaW50OCB5eXJoc1tdID0KK3sKKyAgICAgIDI4LCAgICAgMCwgICAgLTEsICAg
IDI5LCAgICAtMSwgICAgIDMsICAgIC0xLCAgICAyOSwgICAgIDQsICAgIDI5LAorICAgICAgLTEs
ICAgIDI5LCAgICAgNSwgICAgMjksICAgIC0xLCAgICAyOSwgICAgIDYsICAgIDI5LCAgICAtMSwg
ICAgMjksCisgICAgICAgNywgICAgMjksICAgIC0xLCAgICAyOSwgICAgIDgsICAgIDI5LCAgICAt
MSwgICAgMjksICAgICA5LCAgICAyOSwKKyAgICAgIC0xLCAgICAyOSwgICAgMTAsICAgIDI5LCAg
ICAtMSwgICAgMjksICAgIDEzLCAgICAyOSwgICAgLTEsICAgIDI5LAorICAgICAgMTQsICAgIDI5
LCAgICAtMSwgICAgMjksICAgIDEyLCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxMSwgICAgMjks
CisgICAgICAtMSwgICAgMjksICAgIDE1LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxNiwgICAg
MjksICAgIC0xLCAgICAyOSwKKyAgICAgIDE4LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxNywg
ICAgMjksICAgIC0xLCAgICAyOSwgICAgMjEsICAgIDI5LAorICAgICAgLTEsICAgIDI5LCAgICAy
MCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTksICAgIDI5LCAgICAtMSwgICAgMjMsCisgICAg
ICAyOSwgICAgLTEsICAgIDI0LCAgICAyOSwgICAgLTEsICAgIDE4LCAgICAyOSwgICAgLTEsICAg
IDE3LCAgICAyOSwKKyAgICAgIC0xLCAgICAyNSwgICAgMjksICAgIDI2LCAgICAtMQorfTsKKwor
LyogWVlSTElORVtZWU5dIC0tIHNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVyIFlZTiB3YXMg
ZGVmaW5lZC4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cmxpbmVbXSA9CiB7Ci0g
ICAgICAgMCwgICAgOTcsICAgIDk3LCAgIDEwNCwgICAxMDUsICAgMTA4LCAgIDExMSwgICAxMTQs
ICAgMTE3LCAgIDEyMCwKLSAgICAgMTIzLCAgIDEyNiwgICAxMjksICAgMTMyLCAgIDEzNSwgICAx
MzgsICAgMTQxLCAgIDE0NCwgICAxNDcsICAgMTUwLAotICAgICAxNjMsICAgMTc2LCAgIDE3OSwg
ICAxODIsICAgMTg1LCAgIDE4OCwgICAxOTEKKyAgICAgICAwLCAgICA5MSwgICAgOTEsICAgIDk4
LCAgICA5OSwgICAxMDIsICAgMTA1LCAgIDEwOCwgICAxMTEsICAgMTE0LAorICAgICAxMTcsICAg
MTIwLCAgIDEyMywgICAxMjYsICAgMTI5LCAgIDEzMiwgICAxMzUsICAgMTM4LCAgIDE0MSwgICAx
NDQsCisgICAgIDE1NywgICAxNzAsICAgMTczLCAgIDE3NiwgICAxNzksICAgMTgyLCAgIDE4NQog
fTsKICNlbmRpZgogCkBAIC01MDEsMTYgKzUxNSwxNiBAQCBzdGF0aWMgY29uc3QgeXl0eXBlX3Vp
bnQ4IHl5cmxpbmVbXSA9CiBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgeXl0bmFtZVtdID0KIHsK
ICAgIiRlbmQiLCAiZXJyb3IiLCAiJHVuZGVmaW5lZCIsICJUT0tfQ09OU1RfSU5UIiwgIlRPS19P
UF9PUiIsCi0gICJUT0tfT1BfQU5EIiwgIid8JyIsICInXiciLCAiJyYnIiwgIlRPS19PUF9FUSIs
ICJUT0tfT1BfTkUiLCAiJzwnIiwKLSAgIic+JyIsICJUT0tfT1BfTEUiLCAiVE9LX09QX0dFIiwg
IlRPS19PUF9MRUZUIiwgIlRPS19PUF9SSUdIVCIsICInKyciLAorICAiVE9LX09QX0FORCIsICIn
fCciLCAiJ14nIiwgIicmJyIsICJUT0tfT1BfTkUiLCAiVE9LX09QX0VRIiwgIic8JyIsCisgICIn
PiciLCAiVE9LX09QX0dFIiwgIlRPS19PUF9MRSIsICJUT0tfT1BfUklHSFQiLCAiVE9LX09QX0xF
RlQiLCAiJysnIiwKICAgIictJyIsICInKiciLCAiJy8nIiwgIiclJyIsICJUT0tfVU5BUlkiLCAi
JyEnIiwgIid+JyIsICInKCciLCAiJyknIiwKLSAgIiRhY2NlcHQiLCAiaW5wdXQiLCAiZXhwcmVz
c2lvbiIsIFlZX05VTExQVFIKKyAgIiRhY2NlcHQiLCAiaW5wdXQiLCAiZXhwcmVzc2lvbiIsIFlZ
X05VTEwKIH07CiAjZW5kaWYKIAogIyBpZmRlZiBZWVBSSU5UCi0vKiBZWVRPS05VTVtOVU1dIC0t
IChFeHRlcm5hbCkgdG9rZW4gbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlCi0gICAoaW50ZXJu
YWwpIHN5bWJvbCBudW1iZXIgTlVNICh3aGljaCBtdXN0IGJlIHRoYXQgb2YgYSB0b2tlbikuICAq
LworLyogWVlUT0tOVU1bWVlMRVgtTlVNXSAtLSBJbnRlcm5hbCB0b2tlbiBudW1iZXIgY29ycmVz
cG9uZGluZyB0bworICAgdG9rZW4gWVlMRVgtTlVNLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVf
dWludDE2IHl5dG9rbnVtW10gPQogewogICAgICAgIDAsICAgMjU2LCAgIDI1NywgICAyNTgsICAg
MjU5LCAgIDI2MCwgICAxMjQsICAgIDk0LCAgICAzOCwgICAyNjEsCkBAIC01MTksMTggKzUzMyw0
NCBAQCBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXRva251bVtdID0KIH07CiAjIGVuZGlm
CiAKLSNkZWZpbmUgWVlQQUNUX05JTkYgLTExCisvKiBZWVIxW1lZTl0gLS0gU3ltYm9sIG51bWJl
ciBvZiBzeW1ib2wgdGhhdCBydWxlIFlZTiBkZXJpdmVzLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5
cGVfdWludDggeXlyMVtdID0KK3sKKyAgICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAy
OSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LAorICAgICAgMjksICAgIDI5LCAg
ICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksCisg
ICAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOQorfTsKIAot
I2RlZmluZSB5eXBhY3RfdmFsdWVfaXNfZGVmYXVsdChZeXN0YXRlKSBcCi0gICghISgoWXlzdGF0
ZSkgPT0gKC0xMSkpKQorLyogWVlSMltZWU5dIC0tIE51bWJlciBvZiBzeW1ib2xzIGNvbXBvc2lu
ZyByaWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91
aW50OCB5eXIyW10gPQoreworICAgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAzLCAg
ICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsCisgICAgICAgMywgICAgIDMsICAgICAz
LCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywKKyAgICAg
ICAzLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAzCit9OwogCi0jZGVm
aW5lIFlZVEFCTEVfTklORiAtMQorLyogWVlERUZBQ1RbU1RBVEUtTkFNRV0gLS0gRGVmYXVsdCBy
ZWR1Y3Rpb24gbnVtYmVyIGluIHN0YXRlIFNUQVRFLU5VTS4KKyAgIFBlcmZvcm1lZCB3aGVuIFlZ
VEFCTEUgZG9lc24ndCBzcGVjaWZ5IHNvbWV0aGluZyBlbHNlIHRvIGRvLiAgWmVybworICAgbWVh
bnMgdGhlIGRlZmF1bHQgaXMgYW4gZXJyb3IuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50
OCB5eWRlZmFjdFtdID0KK3sKKyAgICAgICAwLCAgICAgMywgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDIsICAgIDI1LAorICAgICAgMjQsICAgIDIyLCAgICAy
MywgICAgIDAsICAgICAxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI2LCAgICAgNCwgICAgIDUs
ICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAorICAgICAgMTAsICAgIDE0LCAgICAxMywgICAg
MTEsICAgIDEyLCAgICAxNSwgICAgMTYsICAgIDE4LCAgICAxNywgICAgMjEsCisgICAgICAyMCwg
ICAgMTkKK307CiAKLSNkZWZpbmUgeXl0YWJsZV92YWx1ZV9pc19lcnJvcihZeXRhYmxlX3ZhbHVl
KSBcCi0gIDAKKy8qIFlZREVGR09UT1tOVEVSTS1OVU1dLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5
cGVfaW50OCB5eWRlZmdvdG9bXSA9Cit7CisgICAgICAtMSwgICAgIDcsICAgICA4Cit9OwogCi0g
IC8qIFlZUEFDVFtTVEFURS1OVU1dIC0tIEluZGV4IGluIFlZVEFCTEUgb2YgdGhlIHBvcnRpb24g
ZGVzY3JpYmluZwotICAgICBTVEFURS1OVU0uICAqLworLyogWVlQQUNUW1NUQVRFLU5VTV0gLS0g
SW5kZXggaW4gWVlUQUJMRSBvZiB0aGUgcG9ydGlvbiBkZXNjcmliaW5nCisgICBTVEFURS1OVU0u
ICAqLworI2RlZmluZSBZWVBBQ1RfTklORiAtMTEKIHN0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYg
eXlwYWN0W10gPQogewogICAgICAgNDYsICAgLTExLCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0
NiwgICAgNDYsICAgIDEyLCAgICA2OCwgICAtMTEsCkBAIC01NDEsMzQgKzU4MSwxNiBAQCBzdGF0
aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cGFjdFtdID0KICAgICAgLTExLCAgIC0xMQogfTsKIAot
ICAvKiBZWURFRkFDVFtTVEFURS1OVU1dIC0tIERlZmF1bHQgcmVkdWN0aW9uIG51bWJlciBpbiBz
dGF0ZSBTVEFURS1OVU0uCi0gICAgIFBlcmZvcm1lZCB3aGVuIFlZVEFCTEUgZG9lcyBub3Qgc3Bl
Y2lmeSBzb21ldGhpbmcgZWxzZSB0byBkby4gIFplcm8KLSAgICAgbWVhbnMgdGhlIGRlZmF1bHQg
aXMgYW4gZXJyb3IuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eWRlZmFjdFtdID0K
LXsKLSAgICAgICAwLCAgICAgMywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDIsICAgIDI1LAotICAgICAgMjQsICAgIDIyLCAgICAyMywgICAgIDAsICAgICAx
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAg
ICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI2LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywg
ICAgIDgsICAgIDEwLAotICAgICAgIDksICAgIDE0LCAgICAxMywgICAgMTIsICAgIDExLCAgICAx
NiwgICAgMTUsICAgIDE4LCAgICAxNywgICAgMjEsCi0gICAgICAyMCwgICAgMTkKLX07Ci0KLSAg
LyogWVlQR09UT1tOVEVSTS1OVU1dLiAgKi8KKy8qIFlZUEdPVE9bTlRFUk0tTlVNXS4gICovCiBz
dGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlwZ290b1tdID0KIHsKICAgICAgLTExLCAgIC0xMSwg
ICAgLTIKIH07CiAKLSAgLyogWVlERUZHT1RPW05URVJNLU5VTV0uICAqLwotc3RhdGljIGNvbnN0
IHl5dHlwZV9pbnQ4IHl5ZGVmZ290b1tdID0KLXsKLSAgICAgIC0xLCAgICAgNywgICAgIDgKLX07
Ci0KLSAgLyogWVlUQUJMRVtZWVBBQ1RbU1RBVEUtTlVNXV0gLS0gV2hhdCB0byBkbyBpbiBzdGF0
ZSBTVEFURS1OVU0uICBJZgotICAgICBwb3NpdGl2ZSwgc2hpZnQgdGhhdCB0b2tlbi4gIElmIG5l
Z2F0aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hvc2UKLSAgICAgbnVtYmVyIGlzIHRoZSBvcHBvc2l0
ZS4gIElmIFlZVEFCTEVfTklORiwgc3ludGF4IGVycm9yLiAgKi8KKy8qIFlZVEFCTEVbWVlQQUNU
W1NUQVRFLU5VTV1dLiAgV2hhdCB0byBkbyBpbiBzdGF0ZSBTVEFURS1OVU0uICBJZgorICAgcG9z
aXRpdmUsIHNoaWZ0IHRoYXQgdG9rZW4uICBJZiBuZWdhdGl2ZSwgcmVkdWNlIHRoZSBydWxlIHdo
aWNoCisgICBudW1iZXIgaXMgdGhlIG9wcG9zaXRlLiAgSWYgWVlUQUJMRV9OSU5GLCBzeW50YXgg
ZXJyb3IuICAqLworI2RlZmluZSBZWVRBQkxFX05JTkYgLTEKIHN0YXRpYyBjb25zdCB5eXR5cGVf
dWludDggeXl0YWJsZVtdID0KIHsKICAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAx
MywgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLApAQCAtNTkxLDYgKzYxMywxMiBA
QCBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dGFibGVbXSA9CiAgICAgICAyNywgICAgMjgs
ICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyCiB9OwogCisjZGVmaW5lIHl5cGFjdF92YWx1ZV9p
c19kZWZhdWx0KFl5c3RhdGUpIFwKKyAgKCEhKChZeXN0YXRlKSA9PSAoLTExKSkpCisKKyNkZWZp
bmUgeXl0YWJsZV92YWx1ZV9pc19lcnJvcihZeXRhYmxlX3ZhbHVlKSBcCisgIFlZSUQgKDApCisK
IHN0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eWNoZWNrW10gPQogewogICAgICAgIDIsICAgICAz
LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTks
CkBAIC02MTMsOCArNjQxLDggQEAgc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5Y2hlY2tbXSA9
CiAgICAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxCiB9OwogCi0gIC8q
IFlZU1RPU1tTVEFURS1OVU1dIC0tIFRoZSAoaW50ZXJuYWwgbnVtYmVyIG9mIHRoZSkgYWNjZXNz
aW5nCi0gICAgIHN5bWJvbCBvZiBzdGF0ZSBTVEFURS1OVU0uICAqLworLyogWVlTVE9TW1NUQVRF
LU5VTV0gLS0gVGhlIChpbnRlcm5hbCBudW1iZXIgb2YgdGhlKSBhY2Nlc3NpbmcKKyAgIHN5bWJv
bCBvZiBzdGF0ZSBTVEFURS1OVU0uICAqLwogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXN0
b3NbXSA9CiB7CiAgICAgICAgMCwgICAgIDMsICAgIDE3LCAgICAxOCwgICAgMjMsICAgIDI0LCAg
ICAyNSwgICAgMjgsICAgIDI5LCAgICAyOSwKQEAgLTYyNSwzMiArNjUzLDMwIEBAIHN0YXRpYyBj
b25zdCB5eXR5cGVfdWludDggeXlzdG9zW10gPQogICAgICAgMjksICAgIDI5CiB9OwogCi0gIC8q
IFlZUjFbWVlOXSAtLSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1bGUgWVlOIGRlcml2
ZXMuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIxW10gPQotewotICAgICAgIDAs
ICAgIDI3LCAgICAyOCwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwg
ICAgMjksCi0gICAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAy
OSwgICAgMjksICAgIDI5LCAgICAyOSwKLSAgICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAg
ICAyOSwgICAgMjksICAgIDI5Ci19OwotCi0gIC8qIFlZUjJbWVlOXSAtLSBOdW1iZXIgb2Ygc3lt
Ym9scyBvbiB0aGUgcmlnaHQgaGFuZCBzaWRlIG9mIHJ1bGUgWVlOLiAgKi8KLXN0YXRpYyBjb25z
dCB5eXR5cGVfdWludDggeXlyMltdID0KLXsKLSAgICAgICAwLCAgICAgMiwgICAgIDEsICAgICAx
LCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLAotICAgICAgIDMsICAg
ICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAg
IDMsCi0gICAgICAgMywgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMwot
fTsKLQotCi0jZGVmaW5lIHl5ZXJyb2sgICAgICAgICAoeXllcnJzdGF0dXMgPSAwKQotI2RlZmlu
ZSB5eWNsZWFyaW4gICAgICAgKHl5Y2hhciA9IFlZRU1QVFkpCi0jZGVmaW5lIFlZRU1QVFkgICAg
ICAgICAoLTIpCi0jZGVmaW5lIFlZRU9GICAgICAgICAgICAwCi0KLSNkZWZpbmUgWVlBQ0NFUFQg
ICAgICAgIGdvdG8geXlhY2NlcHRsYWIKLSNkZWZpbmUgWVlBQk9SVCAgICAgICAgIGdvdG8geXlh
Ym9ydGxhYgotI2RlZmluZSBZWUVSUk9SICAgICAgICAgZ290byB5eWVycm9ybGFiCi0KKyNkZWZp
bmUgeXllcnJvawkJKHl5ZXJyc3RhdHVzID0gMCkKKyNkZWZpbmUgeXljbGVhcmluCSh5eWNoYXIg
PSBZWUVNUFRZKQorI2RlZmluZSBZWUVNUFRZCQkoLTIpCisjZGVmaW5lIFlZRU9GCQkwCisKKyNk
ZWZpbmUgWVlBQ0NFUFQJZ290byB5eWFjY2VwdGxhYgorI2RlZmluZSBZWUFCT1JUCQlnb3RvIHl5
YWJvcnRsYWIKKyNkZWZpbmUgWVlFUlJPUgkJZ290byB5eWVycm9ybGFiCisKKworLyogTGlrZSBZ
WUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3IuICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3Jh
cmlseQorICAgdG8gZWFzZSB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1lYW5pbmcgb2YgWVlF
UlJPUiwgZm9yIEdDQy4KKyAgIE9uY2UgR0NDIHZlcnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJz
aW9uIDEsIHRoaXMgY2FuIGdvLiAgSG93ZXZlciwKKyAgIFlZRkFJTCBhcHBlYXJzIHRvIGJlIGlu
IHVzZS4gIE5ldmVydGhlbGVzcywgaXQgaXMgZm9ybWFsbHkgZGVwcmVjYXRlZAorICAgaW4gQmlz
b24gMi40LjIncyBORVdTIGVudHJ5LCB3aGVyZSBhIHBsYW4gdG8gcGhhc2UgaXQgb3V0IGlzCisg
ICBkaXNjdXNzZWQuICAqLworCisjZGVmaW5lIFlZRkFJTAkJZ290byB5eWVycmxhYgorI2lmIGRl
ZmluZWQgWVlGQUlMCisgIC8qIFRoaXMgaXMgaGVyZSB0byBzdXBwcmVzcyB3YXJuaW5ncyBmcm9t
IHRoZSBHQ0MgY3BwJ3MKKyAgICAgLVd1bnVzZWQtbWFjcm9zLiAgTm9ybWFsbHkgd2UgZG9uJ3Qg
d29ycnkgYWJvdXQgdGhhdCB3YXJuaW5nLCBidXQKKyAgICAgc29tZSB1c2VycyBkbywgYW5kIHdl
IHdhbnQgdG8gbWFrZSBpdCBlYXN5IGZvciB1c2VycyB0byByZW1vdmUKKyAgICAgWVlGQUlMIHVz
ZXMsIHdoaWNoIHdpbGwgcHJvZHVjZSB3YXJuaW5ncyBmcm9tIEJpc29uIDIuNS4gICovCisjZW5k
aWYKIAogI2RlZmluZSBZWVJFQ09WRVJJTkcoKSAgKCEheXllcnJzdGF0dXMpCiAKQEAgLTY2Nywx
NSArNjkzLDI3IEBAIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCiAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgIHl5ZXJyb3Ig
KGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIpKTsgXAotICAgICAg
WVlFUlJPUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi13aGlsZSAoMCkKKyAgICAgIFlZRVJST1I7CQkJCQkJCVwKKyAgICB9CQkJ
CQkJCQlcCit3aGlsZSAoWVlJRCAoMCkpCiAKIC8qIEVycm9yIHRva2VuIG51bWJlciAqLwotI2Rl
ZmluZSBZWVRFUlJPUiAgICAgICAgMQotI2RlZmluZSBZWUVSUkNPREUgICAgICAgMjU2CisjZGVm
aW5lIFlZVEVSUk9SCTEKKyNkZWZpbmUgWVlFUlJDT0RFCTI1NgogCiAKKy8qIFRoaXMgbWFjcm8g
aXMgcHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICovCisjaWZuZGVmIFlZX0xP
Q0FUSU9OX1BSSU5UCisjIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpICgodm9p
ZCkgMCkKKyNlbmRpZgorCisKKy8qIFlZTEVYIC0tIGNhbGxpbmcgYHl5bGV4JyB3aXRoIHRoZSBy
aWdodCBhcmd1bWVudHMuICAqLworI2lmZGVmIFlZTEVYX1BBUkFNCisjIGRlZmluZSBZWUxFWCB5
eWxleCAoJnl5bHZhbCwgWVlMRVhfUEFSQU0pCisjZWxzZQorIyBkZWZpbmUgWVlMRVggeXlsZXgg
KCZ5eWx2YWwsIGNvbnRleHQpCisjZW5kaWYKIAogLyogRW5hYmxlIGRlYnVnZ2luZyBpZiByZXF1
ZXN0ZWQuICAqLwogI2lmIFlZREVCVUcKQEAgLTY4NSw0NyArNzIzLDU4IEBAIHdoaWxlICgwKQog
IyAgZGVmaW5lIFlZRlBSSU5URiBmcHJpbnRmCiAjIGVuZGlmCiAKLSMgZGVmaW5lIFlZRFBSSU5U
RihBcmdzKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICBZWUZQUklOVEYgQXJnczsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLX0gd2hpbGUgKDApCisjIGRlZmluZSBZWURQUklOVEYoQXJncykJCQlc
CitkbyB7CQkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJCVwKKyAgICBZWUZQUklOVEYgQXJnczsJ
CQkJXAorfSB3aGlsZSAoWVlJRCAoMCkpCiAKLS8qIFRoaXMgbWFjcm8gaXMgcHJvdmlkZWQgZm9y
IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICovCi0jaWZuZGVmIFlZX0xPQ0FUSU9OX1BSSU5UCi0j
IGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpICgodm9pZCkgMCkKLSNlbmRpZgor
IyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCQkJ
ICBcCitkbyB7CQkJCQkJCQkJICBcCisgIGlmICh5eWRlYnVnKQkJCQkJCQkJICBcCisgICAgewkJ
CQkJCQkJCSAgXAorICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRsZSk7CQkJCQkg
IFwKKyAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLAkJCQkJCSAgXAorCQkgIFR5cGUsIFZh
bHVlLCBjb250ZXh0KTsgXAorICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwkJCQkJCSAg
XAorICAgIH0JCQkJCQkJCQkgIFwKK30gd2hpbGUgKFlZSUQgKDApKQogCiAKLSMgZGVmaW5lIFlZ
X1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKSAgICAgICAgICAgICAg
ICAgICAgXAotZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRsZSk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0
ZGVyciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICAgICAgICAgIFR5cGUsIFZhbHVlLCBjb250ZXh0KTsgXAotICAgICAgWVlGUFJJTlRGIChz
dGRlcnIsICJcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLX0gd2hpbGUgKDApCi0KLQotLyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBQcmludCB0aGlzIHN5bWJvbCdzIHZhbHVlIG9u
IFlZT1VUUFVULiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUHJpbnQgdGhpcyBzeW1i
b2wgb24gWVlPVVRQVVQuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwog
CisvKkFSR1NVU0VEKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19G
VU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIp
CiBzdGF0aWMgdm9pZAogeXlfc3ltYm9sX3ZhbHVlX3ByaW50IChGSUxFICp5eW91dHB1dCwgaW50
IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwLCBDb250ZXh0ICpjb250ZXh0
KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0LCB5
eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KQorICAgIEZJTEUgKnl5b3V0cHV0OworICAgIGludCB5
eXR5cGU7CisgICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOworICAgIENvbnRleHQg
KmNvbnRleHQ7CisjZW5kaWYKIHsKICAgRklMRSAqeXlvID0geXlvdXRwdXQ7CiAgIFlZVVNFICh5
eW8pOwotICBZWVVTRSAoY29udGV4dCk7CiAgIGlmICgheXl2YWx1ZXApCiAgICAgcmV0dXJuOwor
ICBZWVVTRSAoY29udGV4dCk7CiAjIGlmZGVmIFlZUFJJTlQKICAgaWYgKHl5dHlwZSA8IFlZTlRP
S0VOUykKICAgICBZWVBSSU5UICh5eW91dHB1dCwgeXl0b2tudW1beXl0eXBlXSwgKnl5dmFsdWVw
KTsKKyMgZWxzZQorICBZWVVTRSAoeXlvdXRwdXQpOwogIyBlbmRpZgotICBZWVVTRSAoeXl0eXBl
KTsKKyAgc3dpdGNoICh5eXR5cGUpCisgICAgeworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJl
YWs7CisgICAgfQogfQogCiAKQEAgLTczMywxMSArNzgyLDIzIEBAIHl5X3N5bWJvbF92YWx1ZV9w
cmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5
eXZhbHVlCiB8IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAogYC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmlu
ZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5l
ZCBfTVNDX1ZFUikKIHN0YXRpYyB2b2lkCiB5eV9zeW1ib2xfcHJpbnQgKEZJTEUgKnl5b3V0cHV0
LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXAsIENvbnRleHQgKmNv
bnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3N5bWJvbF9wcmludCAoeXlvdXRwdXQsIHl5
dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpCisgICAgRklMRSAqeXlvdXRwdXQ7CisgICAgaW50IHl5
dHlwZTsKKyAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7CisgICAgQ29udGV4dCAq
Y29udGV4dDsKKyNlbmRpZgogewotICBZWUZQUklOVEYgKHl5b3V0cHV0LCAiJXMgJXMgKCIsCi0g
ICAgICAgICAgICAgeXl0eXBlIDwgWVlOVE9LRU5TID8gInRva2VuIiA6ICJudGVybSIsIHl5dG5h
bWVbeXl0eXBlXSk7CisgIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCisgICAgWVlGUFJJTlRGICh5
eW91dHB1dCwgInRva2VuICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOworICBlbHNlCisgICAgWVlG
UFJJTlRGICh5eW91dHB1dCwgIm50ZXJtICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOwogCiAgIHl5
X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQp
OwogICBZWUZQUklOVEYgKHl5b3V0cHV0LCAiKSIpOwpAQCAtNzQ4LDggKzgwOSwxNiBAQCB5eV9z
eW1ib2xfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICog
Y29uc3QgeXl2YWx1ZXAsIENvbgogfCBUT1AgKGluY2x1ZGVkKS4gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorI2lmIChk
ZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmlu
ZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKIHN0YXRpYyB2b2lkCiB5eV9zdGFj
a19wcmludCAoeXl0eXBlX2ludDE2ICp5eWJvdHRvbSwgeXl0eXBlX2ludDE2ICp5eXRvcCkKKyNl
bHNlCitzdGF0aWMgdm9pZAoreXlfc3RhY2tfcHJpbnQgKHl5Ym90dG9tLCB5eXRvcCkKKyAgICB5
eXR5cGVfaW50MTYgKnl5Ym90dG9tOworICAgIHl5dHlwZV9pbnQxNiAqeXl0b3A7CisjZW5kaWYK
IHsKICAgWVlGUFJJTlRGIChzdGRlcnIsICJTdGFjayBub3ciKTsKICAgZm9yICg7IHl5Ym90dG9t
IDw9IHl5dG9wOyB5eWJvdHRvbSsrKQpAQCAtNzYwLDQyICs4MjksNTAgQEAgeXlfc3RhY2tfcHJp
bnQgKHl5dHlwZV9pbnQxNiAqeXlib3R0b20sIHl5dHlwZV9pbnQxNiAqeXl0b3ApCiAgIFlZRlBS
SU5URiAoc3RkZXJyLCAiXG4iKTsKIH0KIAotIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9t
LCBUb3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh5eWRl
YnVnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIHl5X3N0YWNrX3ByaW50ICgoQm90dG9tKSwgKFRvcCkpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLX0gd2hpbGUgKDApCisjIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRv
cCkJCQkJXAorZG8gewkJCQkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJCQkJXAorICAgIHl5X3N0
YWNrX3ByaW50ICgoQm90dG9tKSwgKFRvcCkpOwkJCQlcCit9IHdoaWxlIChZWUlEICgwKSkKIAog
CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KIHwg
UmVwb3J0IHRoYXQgdGhlIFlZUlVMRSBpcyBnb2luZyB0byBiZSByZWR1Y2VkLiAgfAogYC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKyNpZiAoZGVm
aW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVk
IF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCiBzdGF0aWMgdm9pZAoteXlfcmVkdWNl
X3ByaW50ICh5eXR5cGVfaW50MTYgKnl5c3NwLCBZWVNUWVBFICp5eXZzcCwgaW50IHl5cnVsZSwg
Q29udGV4dCAqY29udGV4dCkKK3l5X3JlZHVjZV9wcmludCAoWVlTVFlQRSAqeXl2c3AsIGludCB5
eXJ1bGUsIENvbnRleHQgKmNvbnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3JlZHVjZV9w
cmludCAoeXl2c3AsIHl5cnVsZSwgY29udGV4dCkKKyAgICBZWVNUWVBFICp5eXZzcDsKKyAgICBp
bnQgeXlydWxlOworICAgIENvbnRleHQgKmNvbnRleHQ7CisjZW5kaWYKIHsKLSAgdW5zaWduZWQg
bG9uZyBpbnQgeXlsbm8gPSB5eXJsaW5lW3l5cnVsZV07CiAgIGludCB5eW5yaHMgPSB5eXIyW3l5
cnVsZV07CiAgIGludCB5eWk7CisgIHVuc2lnbmVkIGxvbmcgaW50IHl5bG5vID0geXlybGluZVt5
eXJ1bGVdOwogICBZWUZQUklOVEYgKHN0ZGVyciwgIlJlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgJWQg
KGxpbmUgJWx1KTpcbiIsCi0gICAgICAgICAgICAgeXlydWxlIC0gMSwgeXlsbm8pOworCSAgICAg
eXlydWxlIC0gMSwgeXlsbm8pOwogICAvKiBUaGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLiAgKi8K
ICAgZm9yICh5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsrKQogICAgIHsKICAgICAgIFlZRlBS
SU5URiAoc3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsgMSk7Ci0gICAgICB5eV9zeW1ib2xfcHJp
bnQgKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgeXlzdG9zW3l5c3NwW3l5aSArIDEg
LSB5eW5yaHNdXSwKLSAgICAgICAgICAgICAgICAgICAgICAgJih5eXZzcFsoeXlpICsgMSkgLSAo
eXlucmhzKV0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCBjb250ZXh0KTsKKyAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNb
eXlydWxlXSArIHl5aV0sCisJCSAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkK
KwkJICAgICAgIAkJICAgICAgICwgY29udGV4dCk7CiAgICAgICBZWUZQUklOVEYgKHN0ZGVyciwg
IlxuIik7CiAgICAgfQogfQogCi0jIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkgICAgICAg
ICAgXAotZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5
ZGVidWcpICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeXlfcmVkdWNlX3ByaW50ICh5
eXNzcCwgeXl2c3AsIFJ1bGUsIGNvbnRleHQpOyBcCi19IHdoaWxlICgwKQorIyBkZWZpbmUgWVlf
UkVEVUNFX1BSSU5UKFJ1bGUpCQlcCitkbyB7CQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQlcCisg
ICAgeXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgUnVsZSwgY29udGV4dCk7IFwKK30gd2hpbGUgKFlZ
SUQgKDApKQogCiAvKiBOb256ZXJvIG1lYW5zIHByaW50IHBhcnNlIHRyYWNlLiAgSXQgaXMgbGVm
dCB1bmluaXRpYWxpemVkIHNvIHRoYXQKICAgIG11bHRpcGxlIHBhcnNlcnMgY2FuIGNvZXhpc3Qu
ICAqLwpAQCAtODA5LDcgKzg4Niw3IEBAIGludCB5eWRlYnVnOwogCiAKIC8qIFlZSU5JVERFUFRI
IC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAgKi8KLSNpZm5kZWYgWVlJ
TklUREVQVEgKKyNpZm5kZWYJWVlJTklUREVQVEgKICMgZGVmaW5lIFlZSU5JVERFUFRIIDIwMAog
I2VuZGlmCiAKQEAgLTgzMiw4ICs5MDksMTUgQEAgaW50IHl5ZGVidWc7CiAjICAgZGVmaW5lIHl5
c3RybGVuIHN0cmxlbgogIyAgZWxzZQogLyogUmV0dXJuIHRoZSBsZW5ndGggb2YgWVlTVFIuICAq
LworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAg
IHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKIHN0YXRpYyBZWVNJ
WkVfVAogeXlzdHJsZW4gKGNvbnN0IGNoYXIgKnl5c3RyKQorI2Vsc2UKK3N0YXRpYyBZWVNJWkVf
VAoreXlzdHJsZW4gKHl5c3RyKQorICAgIGNvbnN0IGNoYXIgKnl5c3RyOworI2VuZGlmCiB7CiAg
IFlZU0laRV9UIHl5bGVuOwogICBmb3IgKHl5bGVuID0gMDsgeXlzdHJbeXlsZW5dOyB5eWxlbisr
KQpAQCAtODQ5LDggKzkzMywxNiBAQCB5eXN0cmxlbiAoY29uc3QgY2hhciAqeXlzdHIpCiAjICBl
bHNlCiAvKiBDb3B5IFlZU1JDIHRvIFlZREVTVCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIHRo
ZSB0ZXJtaW5hdGluZyAnXDAnIGluCiAgICBZWURFU1QuICAqLworI2lmIChkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3Bs
dXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKIHN0YXRpYyBjaGFyICoKIHl5c3RwY3B5IChjaGFyICp5
eWRlc3QsIGNvbnN0IGNoYXIgKnl5c3JjKQorI2Vsc2UKK3N0YXRpYyBjaGFyICoKK3l5c3RwY3B5
ICh5eWRlc3QsIHl5c3JjKQorICAgIGNoYXIgKnl5ZGVzdDsKKyAgICBjb25zdCBjaGFyICp5eXNy
YzsKKyNlbmRpZgogewogICBjaGFyICp5eWQgPSB5eWRlc3Q7CiAgIGNvbnN0IGNoYXIgKnl5cyA9
IHl5c3JjOwpAQCAtODgwLDI3ICs5NzIsMjcgQEAgeXl0bmFtZXJyIChjaGFyICp5eXJlcywgY29u
c3QgY2hhciAqeXlzdHIpCiAgICAgICBjaGFyIGNvbnN0ICp5eXAgPSB5eXN0cjsKIAogICAgICAg
Zm9yICg7OykKLSAgICAgICAgc3dpdGNoICgqKyt5eXApCi0gICAgICAgICAgewotICAgICAgICAg
IGNhc2UgJ1wnJzoKLSAgICAgICAgICBjYXNlICcsJzoKLSAgICAgICAgICAgIGdvdG8gZG9fbm90
X3N0cmlwX3F1b3RlczsKLQotICAgICAgICAgIGNhc2UgJ1xcJzoKLSAgICAgICAgICAgIGlmICgq
Kyt5eXAgIT0gJ1xcJykKLSAgICAgICAgICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOwot
ICAgICAgICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KLSAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgaWYgKHl5cmVzKQotICAgICAgICAgICAgICB5eXJlc1t5eW5dID0gKnl5cDsKLSAg
ICAgICAgICAgIHl5bisrOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlICci
JzoKLSAgICAgICAgICAgIGlmICh5eXJlcykKLSAgICAgICAgICAgICAgeXlyZXNbeXluXSA9ICdc
MCc7Ci0gICAgICAgICAgICByZXR1cm4geXluOwotICAgICAgICAgIH0KKwlzd2l0Y2ggKCorK3l5
cCkKKwkgIHsKKwkgIGNhc2UgJ1wnJzoKKwkgIGNhc2UgJywnOgorCSAgICBnb3RvIGRvX25vdF9z
dHJpcF9xdW90ZXM7CisKKwkgIGNhc2UgJ1xcJzoKKwkgICAgaWYgKCorK3l5cCAhPSAnXFwnKQor
CSAgICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKKwkgICAgLyogRmFsbCB0aHJvdWdoLiAg
Ki8KKwkgIGRlZmF1bHQ6CisJICAgIGlmICh5eXJlcykKKwkgICAgICB5eXJlc1t5eW5dID0gKnl5
cDsKKwkgICAgeXluKys7CisJICAgIGJyZWFrOworCisJICBjYXNlICciJzoKKwkgICAgaWYgKHl5
cmVzKQorCSAgICAgIHl5cmVzW3l5bl0gPSAnXDAnOworCSAgICByZXR1cm4geXluOworCSAgfQog
ICAgIGRvX25vdF9zdHJpcF9xdW90ZXM6IDsKICAgICB9CiAKQEAgLTkyMywxMSArMTAxNSwxMSBA
QCBzdGF0aWMgaW50CiB5eXN5bnRheF9lcnJvciAoWVlTSVpFX1QgKnl5bXNnX2FsbG9jLCBjaGFy
ICoqeXltc2csCiAgICAgICAgICAgICAgICAgeXl0eXBlX2ludDE2ICp5eXNzcCwgaW50IHl5dG9r
ZW4pCiB7Ci0gIFlZU0laRV9UIHl5c2l6ZTAgPSB5eXRuYW1lcnIgKFlZX05VTExQVFIsIHl5dG5h
bWVbeXl0b2tlbl0pOworICBZWVNJWkVfVCB5eXNpemUwID0geXl0bmFtZXJyIChZWV9OVUxMLCB5
eXRuYW1lW3l5dG9rZW5dKTsKICAgWVlTSVpFX1QgeXlzaXplID0geXlzaXplMDsKICAgZW51bSB7
IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0gPSA1IH07CiAgIC8qIEludGVybmF0aW9uYWxp
emVkIGZvcm1hdCBzdHJpbmcuICovCi0gIGNvbnN0IGNoYXIgKnl5Zm9ybWF0ID0gWVlfTlVMTFBU
UjsKKyAgY29uc3QgY2hhciAqeXlmb3JtYXQgPSBZWV9OVUxMOwogICAvKiBBcmd1bWVudHMgb2Yg
eXlmb3JtYXQuICovCiAgIGNoYXIgY29uc3QgKnl5YXJnW1lZRVJST1JfVkVSQk9TRV9BUkdTX01B
WElNVU1dOwogICAvKiBOdW1iZXIgb2YgcmVwb3J0ZWQgdG9rZW5zIChvbmUgZm9yIHRoZSAidW5l
eHBlY3RlZCIsIG9uZSBwZXIKQEAgLTkzNSw2ICsxMDI3LDEwIEBAIHl5c3ludGF4X2Vycm9yIChZ
WVNJWkVfVCAqeXltc2dfYWxsb2MsIGNoYXIgKip5eW1zZywKICAgaW50IHl5Y291bnQgPSAwOwog
CiAgIC8qIFRoZXJlIGFyZSBtYW55IHBvc3NpYmlsaXRpZXMgaGVyZSB0byBjb25zaWRlcjoKKyAg
ICAgLSBBc3N1bWUgWVlGQUlMIGlzIG5vdCB1c2VkLiAgSXQncyB0b28gZmxhd2VkIHRvIGNvbnNp
ZGVyLiAgU2VlCisgICAgICAgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9iaXNv
bi1wYXRjaGVzLzIwMDktMTIvbXNnMDAwMjQuaHRtbD4KKyAgICAgICBmb3IgZGV0YWlscy4gIFlZ
RVJST1IgaXMgZmluZSBhcyBpdCBkb2VzIG5vdCBpbnZva2UgdGhpcworICAgICAgIGZ1bmN0aW9u
LgogICAgICAtIElmIHRoaXMgc3RhdGUgaXMgYSBjb25zaXN0ZW50IHN0YXRlIHdpdGggYSBkZWZh
dWx0IGFjdGlvbiwgdGhlbgogICAgICAgIHRoZSBvbmx5IHdheSB0aGlzIGZ1bmN0aW9uIHdhcyBp
bnZva2VkIGlzIGlmIHRoZSBkZWZhdWx0IGFjdGlvbgogICAgICAgIGlzIGFuIGVycm9yIGFjdGlv
bi4gIEluIHRoYXQgY2FzZSwgZG9uJ3QgY2hlY2sgZm9yIGV4cGVjdGVkCkBAIC05ODQsNyArMTA4
MCw3IEBAIHl5c3ludGF4X2Vycm9yIChZWVNJWkVfVCAqeXltc2dfYWxsb2MsIGNoYXIgKip5eW1z
ZywKICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB5eWFyZ1t5eWNvdW50Kytd
ID0geXl0bmFtZVt5eXhdOwogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIFlZ
U0laRV9UIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXRuYW1lcnIgKFlZX05VTExQVFIsIHl5dG5hbWVb
eXl4XSk7CisgICAgICAgICAgICAgICAgICBZWVNJWkVfVCB5eXNpemUxID0geXlzaXplICsgeXl0
bmFtZXJyIChZWV9OVUxMLCB5eXRuYW1lW3l5eF0pOwogICAgICAgICAgICAgICAgICAgaWYgKCEg
KHl5c2l6ZSA8PSB5eXNpemUxCiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgeXlzaXplMSA8
PSBZWVNUQUNLX0FMTE9DX01BWElNVU0pKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMjsK
QEAgLTEwNTEsMTggKzExNDcsMzMgQEAgeXlzeW50YXhfZXJyb3IgKFlZU0laRV9UICp5eW1zZ19h
bGxvYywgY2hhciAqKnl5bXNnLAogfCBSZWxlYXNlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB0byB0
aGlzIHN5bWJvbC4gIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCiAKKy8qQVJHU1VTRUQqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmlu
ZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5l
ZCBfTVNDX1ZFUikKIHN0YXRpYyB2b2lkCiB5eWRlc3RydWN0IChjb25zdCBjaGFyICp5eW1zZywg
aW50IHl5dHlwZSwgWVlTVFlQRSAqeXl2YWx1ZXAsIENvbnRleHQgKmNvbnRleHQpCisjZWxzZQor
c3RhdGljIHZvaWQKK3l5ZGVzdHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0
KQorICAgIGNvbnN0IGNoYXIgKnl5bXNnOworICAgIGludCB5eXR5cGU7CisgICAgWVlTVFlQRSAq
eXl2YWx1ZXA7CisgICAgQ29udGV4dCAqY29udGV4dDsKKyNlbmRpZgogewogICBZWVVTRSAoeXl2
YWx1ZXApOwogICBZWVVTRSAoY29udGV4dCk7CisKICAgaWYgKCF5eW1zZykKICAgICB5eW1zZyA9
ICJEZWxldGluZyI7CiAgIFlZX1NZTUJPTF9QUklOVCAoeXltc2csIHl5dHlwZSwgeXl2YWx1ZXAs
IHl5bG9jYXRpb25wKTsKIAotICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTgot
ICBZWVVTRSAoeXl0eXBlKTsKLSAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5ECisg
IHN3aXRjaCAoeXl0eXBlKQorICAgIHsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7
CisgICAgfQogfQogCiAKQEAgLTEwNzIsMTggKzExODMsNTYgQEAgeXlkZXN0cnVjdCAoY29uc3Qg
Y2hhciAqeXltc2csIGludCB5eXR5cGUsIFlZU1RZUEUgKnl5dmFsdWVwLCBDb250ZXh0ICpjb250
ZXh0KQogfCB5eXBhcnNlLiAgfAogYC0tLS0tLS0tLS0qLwogCisjaWZkZWYgWVlQQVJTRV9QQVJB
TQorI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAg
IHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK2ludAoreXlwYXJz
ZSAodm9pZCAqWVlQQVJTRV9QQVJBTSkKKyNlbHNlCitpbnQKK3l5cGFyc2UgKFlZUEFSU0VfUEFS
QU0pCisgICAgdm9pZCAqWVlQQVJTRV9QQVJBTTsKKyNlbmRpZgorI2Vsc2UgLyogISBZWVBBUlNF
X1BBUkFNICovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19f
IFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQogaW50
CiB5eXBhcnNlIChDb250ZXh0ICpjb250ZXh0KQorI2Vsc2UKK2ludAoreXlwYXJzZSAoY29udGV4
dCkKKyAgICBDb250ZXh0ICpjb250ZXh0OworI2VuZGlmCisjZW5kaWYKIHsKIC8qIFRoZSBsb29r
YWhlYWQgc3ltYm9sLiAgKi8KIGludCB5eWNoYXI7CiAKIAotLyogVGhlIHNlbWFudGljIHZhbHVl
IG9mIHRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8KKyNpZiBkZWZpbmVkIF9fR05VQ19fICYmIDQw
NyA8PSBfX0dOVUNfXyAqIDEwMCArIF9fR05VQ19NSU5PUl9fCisvKiBTdXBwcmVzcyBhbiBpbmNv
cnJlY3QgZGlhZ25vc3RpYyBhYm91dCB5eWx2YWwgYmVpbmcgdW5pbml0aWFsaXplZC4gICovCisj
IGRlZmluZSBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTiBcCisgICAgX1ByYWdt
YSAoIkdDQyBkaWFnbm9zdGljIHB1c2giKSBcCisgICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGlj
IGlnbm9yZWQgXCItV3VuaW5pdGlhbGl6ZWRcIiIpXAorICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25v
c3RpYyBpZ25vcmVkIFwiLVdtYXliZS11bmluaXRpYWxpemVkXCIiKQorIyBkZWZpbmUgWVlfSUdO
T1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5EIFwKKyAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0
aWMgcG9wIikKKyNlbHNlCiAvKiBEZWZhdWx0IHZhbHVlIHVzZWQgZm9yIGluaXRpYWxpemF0aW9u
LCBmb3IgcGFjaWZ5aW5nIG9sZGVyIEdDQ3MKICAgIG9yIG5vbi1HQ0MgY29tcGlsZXJzLiAgKi8K
LVlZX0lOSVRJQUxfVkFMVUUgKHN0YXRpYyBZWVNUWVBFIHl5dmFsX2RlZmF1bHQ7KQotWVlTVFlQ
RSB5eWx2YWwgWVlfSU5JVElBTF9WQUxVRSAoPSB5eXZhbF9kZWZhdWx0KTsKK3N0YXRpYyBZWVNU
WVBFIHl5dmFsX2RlZmF1bHQ7CisjIGRlZmluZSBZWV9JTklUSUFMX1ZBTFVFKFZhbHVlKSA9IFZh
bHVlCisjZW5kaWYKKyNpZm5kZWYgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4K
KyMgZGVmaW5lIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOCisjIGRlZmluZSBZ
WV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9FTkQKKyNlbmRpZgorI2lmbmRlZiBZWV9JTklU
SUFMX1ZBTFVFCisjIGRlZmluZSBZWV9JTklUSUFMX1ZBTFVFKFZhbHVlKSAvKiBOb3RoaW5nLiAq
LworI2VuZGlmCisKKy8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9va2FoZWFkIHN5bWJv
bC4gICovCitZWVNUWVBFIHl5bHZhbCBZWV9JTklUSUFMX1ZBTFVFKHl5dmFsX2RlZmF1bHQpOwog
CiAgICAgLyogTnVtYmVyIG9mIHN5bnRheCBlcnJvcnMgc28gZmFyLiAgKi8KICAgICBpbnQgeXlu
ZXJyczsKQEAgLTEwOTMsOCArMTI0Miw4IEBAIFlZU1RZUEUgeXlsdmFsIFlZX0lOSVRJQUxfVkFM
VUUgKD0geXl2YWxfZGVmYXVsdCk7CiAgICAgaW50IHl5ZXJyc3RhdHVzOwogCiAgICAgLyogVGhl
IHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6Ci0gICAgICAgJ3l5c3MnOiByZWxhdGVkIHRvIHN0YXRl
cy4KLSAgICAgICAneXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLgorICAgICAgIGB5
eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMuCisgICAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNlbWFu
dGljIHZhbHVlcy4KIAogICAgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhyb3VnaCBzZXBhcmF0
ZSBwb2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdwogICAgICAgIHRvIHJlYWxsb2NhdGUgdGhl
bSBlbHNld2hlcmUuICAqLwpAQCAtMTE2MiwyMyArMTMxMSwyMyBAQCBZWVNUWVBFIHl5bHZhbCBZ
WV9JTklUSUFMX1ZBTFVFICg9IHl5dmFsX2RlZmF1bHQpOwogCiAjaWZkZWYgeXlvdmVyZmxvdwog
ICAgICAgewotICAgICAgICAvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUg
c3RhY2suICBVc2UgY29waWVzIG9mCi0gICAgICAgICAgIHRoZXNlIHNvIHRoYXQgdGhlICYncyBk
b24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8KLSAgICAgICAgICAgbWVtb3J5LiAgKi8KLSAg
ICAgICAgWVlTVFlQRSAqeXl2czEgPSB5eXZzOwotICAgICAgICB5eXR5cGVfaW50MTYgKnl5c3Mx
ID0geXlzczsKLQotICAgICAgICAvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xs
b3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKLSAgICAgICAgICAgZGF0YSBpbiB1c2UgaW4gdGhhdCBz
dGFjaywgaW4gYnl0ZXMuICBUaGlzIHVzZWQgdG8gYmUgYQotICAgICAgICAgICBjb25kaXRpb25h
bCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0aGF0IG1pZ2h0Ci0gICAgICAg
ICAgIGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLwotICAgICAgICB5
eW92ZXJmbG93IChZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSwKLSAgICAgICAgICAgICAgICAgICAg
Jnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCksCi0gICAgICAgICAgICAgICAgICAgICZ5
eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAotICAgICAgICAgICAgICAgICAgICAmeXlz
dGFja3NpemUpOwotCi0gICAgICAgIHl5c3MgPSB5eXNzMTsKLSAgICAgICAgeXl2cyA9IHl5dnMx
OworCS8qIEdpdmUgdXNlciBhIGNoYW5jZSB0byByZWFsbG9jYXRlIHRoZSBzdGFjay4gIFVzZSBj
b3BpZXMgb2YKKwkgICB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJlYWwg
b25lcyBpbnRvCisJICAgbWVtb3J5LiAgKi8KKwlZWVNUWVBFICp5eXZzMSA9IHl5dnM7CisJeXl0
eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7CisKKwkvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVz
cyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKKwkgICBkYXRhIGluIHVzZSBpbiB0aGF0
IHN0YWNrLCBpbiBieXRlcy4gIFRoaXMgdXNlZCB0byBiZSBhCisJICAgY29uZGl0aW9uYWwgYXJv
dW5kIGp1c3QgdGhlIHR3byBleHRyYSBhcmdzLCBidXQgdGhhdCBtaWdodAorCSAgIGJlIHVuZGVm
aW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLworCXl5b3ZlcmZsb3cgKFlZXygibWVt
b3J5IGV4aGF1c3RlZCIpLAorCQkgICAgJnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCks
CisJCSAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKKwkJICAgICZ5eXN0YWNr
c2l6ZSk7CisKKwl5eXNzID0geXlzczE7CisJeXl2cyA9IHl5dnMxOwogICAgICAgfQogI2Vsc2Ug
Lyogbm8geXlvdmVyZmxvdyAqLwogIyBpZm5kZWYgWVlTVEFDS19SRUxPQ0FURQpAQCAtMTE4Niwy
MiArMTMzNSwyMiBAQCBZWVNUWVBFIHl5bHZhbCBZWV9JTklUSUFMX1ZBTFVFICg9IHl5dmFsX2Rl
ZmF1bHQpOwogIyBlbHNlCiAgICAgICAvKiBFeHRlbmQgdGhlIHN0YWNrIG91ciBvd24gd2F5LiAg
Ki8KICAgICAgIGlmIChZWU1BWERFUFRIIDw9IHl5c3RhY2tzaXplKQotICAgICAgICBnb3RvIHl5
ZXhoYXVzdGVkbGFiOworCWdvdG8geXlleGhhdXN0ZWRsYWI7CiAgICAgICB5eXN0YWNrc2l6ZSAq
PSAyOwogICAgICAgaWYgKFlZTUFYREVQVEggPCB5eXN0YWNrc2l6ZSkKLSAgICAgICAgeXlzdGFj
a3NpemUgPSBZWU1BWERFUFRIOworCXl5c3RhY2tzaXplID0gWVlNQVhERVBUSDsKIAogICAgICAg
ewotICAgICAgICB5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKLSAgICAgICAgdW5pb24geXlh
bGxvYyAqeXlwdHIgPQotICAgICAgICAgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tfQUxMT0Mg
KFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7Ci0gICAgICAgIGlmICghIHl5cHRyKQotICAg
ICAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7Ci0gICAgICAgIFlZU1RBQ0tfUkVMT0NBVEUgKHl5
c3NfYWxsb2MsIHl5c3MpOwotICAgICAgICBZWVNUQUNLX1JFTE9DQVRFICh5eXZzX2FsbG9jLCB5
eXZzKTsKKwl5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKKwl1bmlvbiB5eWFsbG9jICp5eXB0
ciA9CisJICAodW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5
eXN0YWNrc2l6ZSkpOworCWlmICghIHl5cHRyKQorCSAgZ290byB5eWV4aGF1c3RlZGxhYjsKKwlZ
WVNUQUNLX1JFTE9DQVRFICh5eXNzX2FsbG9jLCB5eXNzKTsKKwlZWVNUQUNLX1JFTE9DQVRFICh5
eXZzX2FsbG9jLCB5eXZzKTsKICMgIHVuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKLSAgICAgICAgaWYg
KHl5c3MxICE9IHl5c3NhKQotICAgICAgICAgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOworCWlmICh5
eXNzMSAhPSB5eXNzYSkKKwkgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOwogICAgICAgfQogIyBlbmRp
ZgogI2VuZGlmIC8qIG5vIHl5b3ZlcmZsb3cgKi8KQEAgLTEyMTAsMTAgKzEzNTksMTAgQEAgWVlT
VFlQRSB5eWx2YWwgWVlfSU5JVElBTF9WQUxVRSAoPSB5eXZhbF9kZWZhdWx0KTsKICAgICAgIHl5
dnNwID0geXl2cyArIHl5c2l6ZSAtIDE7CiAKICAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0
YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKLSAgICAgICAgICAgICAgICAgICh1bnNpZ25l
ZCBsb25nIGludCkgeXlzdGFja3NpemUpKTsKKwkJICAodW5zaWduZWQgbG9uZyBpbnQpIHl5c3Rh
Y2tzaXplKSk7CiAKICAgICAgIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQot
ICAgICAgICBZWUFCT1JUOworCVlZQUJPUlQ7CiAgICAgfQogCiAgIFlZRFBSSU5URiAoKHN0ZGVy
ciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7CkBAIC0xMjQyLDcgKzEzOTEsNyBA
QCB5eWJhY2t1cDoKICAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQogICAgIHsKICAgICAgIFlZRFBS
SU5URiAoKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIikpOwotICAgICAgeXljaGFyID0geXls
ZXggKCZ5eWx2YWwsIGNvbnRleHQpOworICAgICAgeXljaGFyID0gWVlMRVg7CiAgICAgfQogCiAg
IGlmICh5eWNoYXIgPD0gWVlFT0YpCkBAIC0xMzA3LDcgKzE0NTYsNyBAQCB5eXJlZHVjZToKICAg
eXlsZW4gPSB5eXIyW3l5bl07CiAKICAgLyogSWYgWVlMRU4gaXMgbm9uemVybywgaW1wbGVtZW50
IHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBhY3Rpb246Ci0gICAgICckJCA9ICQxJy4KKyAgICAg
YCQkID0gJDEnLgogCiAgICAgIE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZyBsaW5lIHNldHMgWVlW
QUwgdG8gZ2FyYmFnZS4KICAgICAgVGhpcyBiZWhhdmlvciBpcyB1bmRvY3VtZW50ZWQgYW5kIEJp
c29uCkBAIC0xMzIzLDIxNCArMTQ3MiwxOTAgQEAgeXlyZWR1Y2U6CiAgICAgICAgIGNhc2UgMjoK
IAogICAgIHsKLSAgICAgICAgKihjb250ZXh0LT5yZXN1bHQpID0gc3RhdGljX2Nhc3Q8aW50Pigo
eXl2c3BbMF0pKTsKKyAgICAgICAgKihjb250ZXh0LT5yZXN1bHQpID0gc3RhdGljX2Nhc3Q8aW50
PigoeXl2c3BbKDEpIC0gKDEpXSkpOwogICAgICAgICBZWUFDQ0VQVDsKICAgICB9Ci0KICAgICBi
cmVhazsKIAogICBjYXNlIDQ6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3BbLTJd
KSB8fCAoeXl2c3BbMF0pOworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIHx8
ICh5eXZzcFsoMykgLSAoMyldKTsKICAgICB9Ci0KICAgICBicmVhazsKIAogICBjYXNlIDU6CiAK
ICAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3BbLTJdKSAmJiAoeXl2c3BbMF0pOworICAg
ICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICYmICh5eXZzcFsoMykgLSAoMyldKTsK
ICAgICB9Ci0KICAgICBicmVhazsKIAogICBjYXNlIDY6CiAKICAgICB7Ci0gICAgICAgICh5eXZh
bCkgPSAoeXl2c3BbLTJdKSB8ICh5eXZzcFswXSk7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3Bb
KDEpIC0gKDMpXSkgfCAoeXl2c3BbKDMpIC0gKDMpXSk7CiAgICAgfQotCiAgICAgYnJlYWs7CiAK
ICAgY2FzZSA3OgogCiAgICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWy0yXSkgXiAoeXl2
c3BbMF0pOworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIF4gKHl5dnNwWygz
KSAtICgzKV0pOwogICAgIH0KLQogICAgIGJyZWFrOwogCiAgIGNhc2UgODoKIAogICAgIHsKLSAg
ICAgICAgKHl5dmFsKSA9ICh5eXZzcFstMl0pICYgKHl5dnNwWzBdKTsKKyAgICAgICAgKHl5dmFs
KSA9ICh5eXZzcFsoMSkgLSAoMyldKSAmICh5eXZzcFsoMykgLSAoMyldKTsKICAgICB9Ci0KICAg
ICBicmVhazsKIAogICBjYXNlIDk6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3Bb
LTJdKSAhPSAoeXl2c3BbMF0pOworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0p
ICE9ICh5eXZzcFsoMykgLSAoMyldKTsKICAgICB9Ci0KICAgICBicmVhazsKIAogICBjYXNlIDEw
OgogCiAgICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWy0yXSkgPT0gKHl5dnNwWzBdKTsK
KyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA9PSAoeXl2c3BbKDMpIC0gKDMp
XSk7CiAgICAgfQotCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMToKIAogICAgIHsKLSAgICAgICAg
KHl5dmFsKSA9ICh5eXZzcFstMl0pID49ICh5eXZzcFswXSk7CisgICAgICAgICh5eXZhbCkgPSAo
eXl2c3BbKDEpIC0gKDMpXSkgPj0gKHl5dnNwWygzKSAtICgzKV0pOwogICAgIH0KLQogICAgIGJy
ZWFrOwogCiAgIGNhc2UgMTI6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3BbLTJd
KSA8PSAoeXl2c3BbMF0pOworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIDw9
ICh5eXZzcFsoMykgLSAoMyldKTsKICAgICB9Ci0KICAgICBicmVhazsKIAogICBjYXNlIDEzOgog
CiAgICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWy0yXSkgPiAoeXl2c3BbMF0pOworICAg
ICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pID4gKHl5dnNwWygzKSAtICgzKV0pOwog
ICAgIH0KLQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQ6CiAKICAgICB7Ci0gICAgICAgICh5eXZh
bCkgPSAoeXl2c3BbLTJdKSA8ICh5eXZzcFswXSk7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3Bb
KDEpIC0gKDMpXSkgPCAoeXl2c3BbKDMpIC0gKDMpXSk7CiAgICAgfQotCiAgICAgYnJlYWs7CiAK
ICAgY2FzZSAxNToKIAogICAgIHsKLSAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFstMl0pID4+ICh5
eXZzcFswXSk7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPj4gKHl5dnNw
WygzKSAtICgzKV0pOwogICAgIH0KLQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY6CiAKICAgICB7
Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3BbLTJdKSA8PCAoeXl2c3BbMF0pOworICAgICAgICAo
eXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIDw8ICh5eXZzcFsoMykgLSAoMyldKTsKICAgICB9
Ci0KICAgICBicmVhazsKIAogICBjYXNlIDE3OgogCiAgICAgewotICAgICAgICAoeXl2YWwpID0g
KHl5dnNwWy0yXSkgLSAoeXl2c3BbMF0pOworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAt
ICgzKV0pIC0gKHl5dnNwWygzKSAtICgzKV0pOwogICAgIH0KLQogICAgIGJyZWFrOwogCiAgIGNh
c2UgMTg6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3BbLTJdKSArICh5eXZzcFsw
XSk7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgKyAoeXl2c3BbKDMpIC0g
KDMpXSk7CiAgICAgfQotCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOToKIAogICAgIHsKLSAgICAg
ICAgaWYgKCh5eXZzcFswXSkgPT0gMCkgeworICAgICAgICBpZiAoKHl5dnNwWygzKSAtICgzKV0p
ID09IDApIHsKICAgICAgICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBzdHJlYW07Ci0gICAgICAg
ICAgICBzdHJlYW0gPDwgKHl5dnNwWy0yXSkgPDwgIiAlICIgPDwgKHl5dnNwWzBdKTsKKyAgICAg
ICAgICAgIHN0cmVhbSA8PCAoeXl2c3BbKDEpIC0gKDMpXSkgPDwgIiAlICIgPDwgKHl5dnNwWygz
KSAtICgzKV0pOwogICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsK
LSAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNz
OjpESVZJU0lPTl9CWV9aRVJPLAorICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJl
cG9ydChwcDo6RGlhZ25vc3RpY3M6OlBQX0RJVklTSU9OX0JZX1pFUk8sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKICAg
ICAgICAgICAgIFlZQUJPUlQ7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAoeXl2YWwp
ID0gKHl5dnNwWy0yXSkgJSAoeXl2c3BbMF0pOworICAgICAgICAgICAgKHl5dmFsKSA9ICh5eXZz
cFsoMSkgLSAoMyldKSAlICh5eXZzcFsoMykgLSAoMyldKTsKICAgICAgICAgfQogICAgIH0KLQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMjA6CiAKICAgICB7Ci0gICAgICAgIGlmICgoeXl2c3BbMF0p
ID09IDApIHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMykgLSAoMyldKSA9PSAwKSB7CiAgICAgICAg
ICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyZWFtOwotICAgICAgICAgICAgc3RyZWFtIDw8ICh5
eXZzcFstMl0pIDw8ICIgLyAiIDw8ICh5eXZzcFswXSk7CisgICAgICAgICAgICBzdHJlYW0gPDwg
KHl5dnNwWygxKSAtICgzKV0pIDw8ICIgLyAiIDw8ICh5eXZzcFsoMykgLSAoMyldKTsKICAgICAg
ICAgICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBzdHJlYW0uc3RyKCk7Ci0gICAgICAgICAgICBjb250
ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RElWSVNJT05fQllfWkVS
TywKKyAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0
aWNzOjpQUF9ESVZJU0lPTl9CWV9aRVJPLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHQuY19zdHIoKSk7CiAgICAgICAgICAgICBZWUFCT1JU
OwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFstMl0pIC8g
KHl5dnNwWzBdKTsKKyAgICAgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgLyAo
eXl2c3BbKDMpIC0gKDMpXSk7CiAgICAgICAgIH0KICAgICB9Ci0KICAgICBicmVhazsKIAogICBj
YXNlIDIxOgogCiAgICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWy0yXSkgKiAoeXl2c3Bb
MF0pOworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICogKHl5dnNwWygzKSAt
ICgzKV0pOwogICAgIH0KLQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjI6CiAKICAgICB7Ci0gICAg
ICAgICh5eXZhbCkgPSAhICh5eXZzcFswXSk7CisgICAgICAgICh5eXZhbCkgPSAhICh5eXZzcFso
MikgLSAoMildKTsKICAgICB9Ci0KICAgICBicmVhazsKIAogICBjYXNlIDIzOgogCiAgICAgewot
ICAgICAgICAoeXl2YWwpID0gfiAoeXl2c3BbMF0pOworICAgICAgICAoeXl2YWwpID0gfiAoeXl2
c3BbKDIpIC0gKDIpXSk7CiAgICAgfQotCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyNDoKIAogICAg
IHsKLSAgICAgICAgKHl5dmFsKSA9IC0gKHl5dnNwWzBdKTsKKyAgICAgICAgKHl5dmFsKSA9IC0g
KHl5dnNwWygyKSAtICgyKV0pOwogICAgIH0KLQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjU6CiAK
ICAgICB7Ci0gICAgICAgICh5eXZhbCkgPSArICh5eXZzcFswXSk7CisgICAgICAgICh5eXZhbCkg
PSArICh5eXZzcFsoMikgLSAoMildKTsKICAgICB9Ci0KICAgICBicmVhazsKIAogICBjYXNlIDI2
OgogCiAgICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWy0xXSk7CisgICAgICAgICh5eXZh
bCkgPSAoeXl2c3BbKDIpIC0gKDMpXSk7CiAgICAgfQotCiAgICAgYnJlYWs7CiAKIApAQCAtMTU1
Niw3ICsxNjgxLDcgQEAgeXlyZWR1Y2U6CiAKICAgKisreXl2c3AgPSB5eXZhbDsKIAotICAvKiBO
b3cgJ3NoaWZ0JyB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24uICBEZXRlcm1pbmUgd2hhdCBz
dGF0ZQorICAvKiBOb3cgYHNoaWZ0JyB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24uICBEZXRl
cm1pbmUgd2hhdCBzdGF0ZQogICAgICB0aGF0IGdvZXMgdG8sIGJhc2VkIG9uIHRoZSBzdGF0ZSB3
ZSBwb3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUKICAgICAgbnVtYmVyIHJlZHVjZWQgYnkuICAq
LwogCkBAIC0xNTcxLDkgKzE2OTYsOSBAQCB5eXJlZHVjZToKICAgZ290byB5eW5ld3N0YXRlOwog
CiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZXJybGFi
IC0tIGhlcmUgb24gZGV0ZWN0aW5nIGVycm9yLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LgorfCB5eWVycmxhYiAtLSBoZXJlIG9uIGRldGVjdGluZyBlcnJvciB8CitgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHl5ZXJybGFiOgogICAvKiBNYWtlIHN1cmUgd2Ug
aGF2ZSBsYXRlc3QgbG9va2FoZWFkIHRyYW5zbGF0aW9uLiAgU2VlIGNvbW1lbnRzIGF0CiAgICAg
IHVzZXIgc2VtYW50aWMgYWN0aW9ucyBmb3Igd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LiAgKi8KQEAg
LTE2MjQsMjAgKzE3NDksMjAgQEAgeXllcnJsYWI6CiAgIGlmICh5eWVycnN0YXR1cyA9PSAzKQog
ICAgIHsKICAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rYWhl
YWQgdG9rZW4gYWZ0ZXIgYW4KLSAgICAgICAgIGVycm9yLCBkaXNjYXJkIGl0LiAgKi8KKwkgZXJy
b3IsIGRpc2NhcmQgaXQuICAqLwogCiAgICAgICBpZiAoeXljaGFyIDw9IFlZRU9GKQotICAgICAg
ICB7Ci0gICAgICAgICAgLyogUmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0LiAgKi8K
LSAgICAgICAgICBpZiAoeXljaGFyID09IFlZRU9GKQotICAgICAgICAgICAgWVlBQk9SVDsKLSAg
ICAgICAgfQorCXsKKwkgIC8qIFJldHVybiBmYWlsdXJlIGlmIGF0IGVuZCBvZiBpbnB1dC4gICov
CisJICBpZiAoeXljaGFyID09IFlZRU9GKQorCSAgICBZWUFCT1JUOworCX0KICAgICAgIGVsc2UK
LSAgICAgICAgewotICAgICAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogZGlzY2FyZGluZyIsCi0g
ICAgICAgICAgICAgICAgICAgICAgeXl0b2tlbiwgJnl5bHZhbCwgY29udGV4dCk7Ci0gICAgICAg
ICAgeXljaGFyID0gWVlFTVBUWTsKLSAgICAgICAgfQorCXsKKwkgIHl5ZGVzdHJ1Y3QgKCJFcnJv
cjogZGlzY2FyZGluZyIsCisJCSAgICAgIHl5dG9rZW4sICZ5eWx2YWwsIGNvbnRleHQpOworCSAg
eXljaGFyID0gWVlFTVBUWTsKKwl9CiAgICAgfQogCiAgIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1
c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRoZSBlcnJvcgpAQCAtMTY1Niw3ICsx
NzgxLDcgQEAgeXllcnJvcmxhYjoKICAgaWYgKC8qQ09OU1RDT05EKi8gMCkKICAgICAgZ290byB5
eWVycm9ybGFiOwogCi0gIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxl
IHdob3NlIGFjdGlvbiB0cmlnZ2VyZWQKKyAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMg
b2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAogICAgICB0aGlzIFlZRVJST1IuICAq
LwogICBZWVBPUFNUQUNLICh5eWxlbik7CiAgIHl5bGVuID0gMDsKQEAgLTE2NjksMjkgKzE3OTQs
MjkgQEAgeXllcnJvcmxhYjoKIHwgeXllcnJsYWIxIC0tIGNvbW1vbiBjb2RlIGZvciBib3RoIHN5
bnRheCBlcnJvciBhbmQgWVlFUlJPUi4gIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHl5ZXJybGFiMToKLSAgeXllcnJz
dGF0dXMgPSAzOyAgICAgIC8qIEVhY2ggcmVhbCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVudHMgdGhp
cy4gICovCisgIHl5ZXJyc3RhdHVzID0gMzsJLyogRWFjaCByZWFsIHRva2VuIHNoaWZ0ZWQgZGVj
cmVtZW50cyB0aGlzLiAgKi8KIAogICBmb3IgKDs7KQogICAgIHsKICAgICAgIHl5biA9IHl5cGFj
dFt5eXN0YXRlXTsKICAgICAgIGlmICgheXlwYWN0X3ZhbHVlX2lzX2RlZmF1bHQgKHl5bikpCi0g
ICAgICAgIHsKLSAgICAgICAgICB5eW4gKz0gWVlURVJST1I7Ci0gICAgICAgICAgaWYgKDAgPD0g
eXluICYmIHl5biA8PSBZWUxBU1QgJiYgeXljaGVja1t5eW5dID09IFlZVEVSUk9SKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICB5eW4gPSB5eXRhYmxlW3l5bl07Ci0gICAgICAgICAgICAg
IGlmICgwIDwgeXluKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICB9CisJeworCSAgeXluICs9IFlZVEVSUk9SOworCSAgaWYgKDAgPD0geXluICYmIHl5biA8
PSBZWUxBU1QgJiYgeXljaGVja1t5eW5dID09IFlZVEVSUk9SKQorCSAgICB7CisJICAgICAgeXlu
ID0geXl0YWJsZVt5eW5dOworCSAgICAgIGlmICgwIDwgeXluKQorCQlicmVhazsKKwkgICAgfQor
CX0KIAogICAgICAgLyogUG9wIHRoZSBjdXJyZW50IHN0YXRlIGJlY2F1c2UgaXQgY2Fubm90IGhh
bmRsZSB0aGUgZXJyb3IgdG9rZW4uICAqLwogICAgICAgaWYgKHl5c3NwID09IHl5c3MpCi0gICAg
ICAgIFlZQUJPUlQ7CisJWVlBQk9SVDsKIAogCiAgICAgICB5eWRlc3RydWN0ICgiRXJyb3I6IHBv
cHBpbmciLAotICAgICAgICAgICAgICAgICAgeXlzdG9zW3l5c3RhdGVdLCB5eXZzcCwgY29udGV4
dCk7CisJCSAgeXlzdG9zW3l5c3RhdGVdLCB5eXZzcCwgY29udGV4dCk7CiAgICAgICBZWVBPUFNU
QUNLICgxKTsKICAgICAgIHl5c3RhdGUgPSAqeXlzc3A7CiAgICAgICBZWV9TVEFDS19QUklOVCAo
eXlzcywgeXlzc3ApOwpAQCAtMTc0MiwxNCArMTg2NywxNCBAQCB5eXJldHVybjoKICAgICAgIHl5
ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVhZCIsCiAgICAgICAgICAgICAg
ICAgICB5eXRva2VuLCAmeXlsdmFsLCBjb250ZXh0KTsKICAgICB9Ci0gIC8qIERvIG5vdCByZWNs
YWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdob3NlIGFjdGlvbiB0cmlnZ2VyZWQKKyAgLyog
RG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdn
ZXJlZAogICAgICB0aGlzIFlZQUJPUlQgb3IgWVlBQ0NFUFQuICAqLwogICBZWVBPUFNUQUNLICh5
eWxlbik7CiAgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CiAgIHdoaWxlICh5eXNzcCAh
PSB5eXNzKQogICAgIHsKICAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBwb3BwaW5nIiwKLSAg
ICAgICAgICAgICAgICAgIHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCwgY29udGV4dCk7CisJCSAgeXlz
dG9zWyp5eXNzcF0sIHl5dnNwLCBjb250ZXh0KTsKICAgICAgIFlZUE9QU1RBQ0sgKDEpOwogICAg
IH0KICNpZm5kZWYgeXlvdmVyZmxvdwpAQCAtMTc2MCwxMSArMTg4NSwxNCBAQCB5eXJldHVybjoK
ICAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQogICAgIFlZU1RBQ0tfRlJFRSAoeXltc2cpOwogI2Vu
ZGlmCi0gIHJldHVybiB5eXJlc3VsdDsKKyAgLyogTWFrZSBzdXJlIFlZSUQgaXMgdXNlZC4gICov
CisgIHJldHVybiBZWUlEICh5eXJlc3VsdCk7CiB9CiAKIAogCisKKwogaW50IHl5bGV4KFlZU1RZ
UEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KQogewogICAgIGludCB0eXBlID0gMDsKQEAgLTE3
NzcsNyArMTkwNSw3IEBAIGludCB5eWxleChZWVNUWVBFKiBsdmFscCwgQ29udGV4dCogY29udGV4
dCkKICAgICAgICAgdW5zaWduZWQgaW50IHZhbCA9IDA7CiAgICAgICAgIGlmICghdG9rZW4tPnVW
YWx1ZSgmdmFsKSkKICAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3Mt
PnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OklOVEVHRVJfT1ZFUkZMT1csCisgICAgICAgICAgICBj
b250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6UFBfSU5URUdFUl9P
VkVSRkxPVywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4t
PmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgIH0KICAgICAgICAgKmx2YWxwID0gc3Rh
dGljX2Nhc3Q8WVlTVFlQRT4odmFsKTsKQEAgLTE4MTgsNyArMTk0Niw3IEBAIGludCB5eWxleChZ
WVNUWVBFKiBsdmFscCwgQ29udGV4dCogY29udGV4dCkKIAogdm9pZCB5eWVycm9yKENvbnRleHQq
IGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikKIHsKLSAgICBjb250ZXh0LT5kaWFnbm9zdGlj
cy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJRF9FWFBSRVNTSU9OLAorICAgIGNvbnRl
eHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpQUF9JTlZBTElEX0VYUFJF
U1NJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+
bG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24pOwogfQpA
QCAtMTg0NiwxMiArMTk3NCwxMiBAQCBib29sIEV4cHJlc3Npb25QYXJzZXI6OnBhcnNlKFRva2Vu
KiB0b2tlbiwgaW50KiByZXN1bHQpCiAgICAgICAgIGJyZWFrOwogCiAgICAgICBjYXNlIDI6Ci0g
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpPVVRfT0ZfTUVNT1JZLCB0
b2tlbi0+bG9jYXRpb24sICIiKTsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25v
c3RpY3M6OlBQX09VVF9PRl9NRU1PUlksIHRva2VuLT5sb2NhdGlvbiwgIiIpOwogICAgICAgICBi
cmVhazsKIAogICAgICAgZGVmYXVsdDoKICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKLSAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVEVSTkFMX0VSUk9SLCB0b2tlbi0+
bG9jYXRpb24sICIiKTsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OlBQX0lOVEVSTkFMX0VSUk9SLCB0b2tlbi0+bG9jYXRpb24sICIiKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL01hY3JvRXhwYW5kZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyb0V4cGFuZGVyLmNwcAppbmRleCAxMTE2
YzUxNmZmNjI2ODQxZGZkMzE5OTM1YjkzODJlMDhkYzIzNjYzLi5iNzg5MjYwYWY5MTYzYTdiZGJk
OGI0NTRiYjNmZDQ4NjhhNGUzMGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL01hY3JvRXhwYW5kZXIuY3BwCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvTWFjcm9FeHBhbmRl
ci5jcHAKQEAgLTI1NCw3ICsyNTQsNyBAQCBib29sIE1hY3JvRXhwYW5kZXI6OmNvbGxlY3RNYWNy
b0FyZ3MoY29uc3QgTWFjcm8mIG1hY3JvLAogCiAgICAgICAgIGlmICh0b2tlbi50eXBlID09IFRv
a2VuOjpMQVNUKQogICAgICAgICB7Ci0gICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6TUFDUk9fVU5URVJNSU5BVEVEX0lOVk9DQVRJT04sCisgICAgICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfTUFDUk9fVU5URVJNSU5BVEVEX0lO
Vk9DQVRJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyLmxv
Y2F0aW9uLCBpZGVudGlmaWVyLnRleHQpOwogICAgICAgICAgICAgLy8gRG8gbm90IGxvc2UgRU9G
IHRva2VuLgogICAgICAgICAgICAgdW5nZXRUb2tlbih0b2tlbik7CkBAIC0zMDIsOCArMzAyLDgg
QEAgYm9vbCBNYWNyb0V4cGFuZGVyOjpjb2xsZWN0TWFjcm9BcmdzKGNvbnN0IE1hY3JvJiBtYWNy
bywKICAgICBpZiAoYXJncy0+c2l6ZSgpICE9IHBhcmFtcy5zaXplKCkpCiAgICAgewogICAgICAg
ICBEaWFnbm9zdGljczo6SUQgaWQgPSBhcmdzLT5zaXplKCkgPCBtYWNyby5wYXJhbWV0ZXJzLnNp
emUoKSA/Ci0gICAgICAgICAgICBEaWFnbm9zdGljczo6TUFDUk9fVE9PX0ZFV19BUkdTIDoKLSAg
ICAgICAgICAgIERpYWdub3N0aWNzOjpNQUNST19UT09fTUFOWV9BUkdTOworICAgICAgICAgICAg
RGlhZ25vc3RpY3M6OlBQX01BQ1JPX1RPT19GRVdfQVJHUyA6CisgICAgICAgICAgICBEaWFnbm9z
dGljczo6UFBfTUFDUk9fVE9PX01BTllfQVJHUzsKICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBv
cnQoaWQsIGlkZW50aWZpZXIubG9jYXRpb24sIGlkZW50aWZpZXIudGV4dCk7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1ByZXByb2Nlc3Nvci5jcHAgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1ByZXByb2Nlc3Nvci5jcHAKaW5k
ZXggYjYxNWM4NWRjZTA0YWM4MWI2MWU1MjJhMDViZjJhYWViZjlkOTA5My4uNTgwZmZiYTQ1OWY5
Y2FmYzE3NDI4YjMzYjlkMGFhYTljOTUzYTdlZSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuY3BwCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJv
Y2Vzc29yLmNwcApAQCAtMTAxLDExICsxMDEsMTEgQEAgdm9pZCBQcmVwcm9jZXNzb3I6OmxleChU
b2tlbiogdG9rZW4pCiAgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgY2FzZSBUb2tlbjo6UFBfTlVNQkVSOgotICAgICAgICAgICAgbUltcGwt
PmRpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfTlVNQkVSLAorICAgICAg
ICAgICAgbUltcGwtPmRpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX0lOVkFMSURf
TlVNQkVSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxv
Y2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNl
IFRva2VuOjpQUF9PVEhFUjoKLSAgICAgICAgICAgIG1JbXBsLT5kaWFnbm9zdGljcy0+cmVwb3J0
KERpYWdub3N0aWNzOjpJTlZBTElEX0NIQVJBQ1RFUiwKKyAgICAgICAgICAgIG1JbXBsLT5kaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9JTlZBTElEX0NIQVJBQ1RFUiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4t
PnRleHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgZGVmYXVsdDoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9r
ZW5pemVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvVG9rZW5pemVyLmNwcAppbmRleCAzNjNhMzdiMzY1YTY0OTc2ZDkwZGI2ZTBmNjE5YmQz
OTI4YWFiMDc3Li5kZDRlZjM4MTgwNTE1ZDk1ZWU4MzYyMDAxMzdiNGRhMzIxMGIyOWNhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L1Rva2VuaXplci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuY3BwCkBAIC02ODAsNiArNjgwLDE4IEBAIHN0YXRpYyB2
b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciAqLHl5Y29uc3QgY2hhciAqLGludCAseXlzY2FuX3Qg
eXlzY2FubmVyKTsKIHN0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqICx5
eXNjYW5fdCB5eXNjYW5uZXIpOwogI2VuZGlmCiAKKyNkZWZpbmUgWVlfTk9fSU5QVVQKKworI2lm
bmRlZiBZWV9OT19JTlBVVAorCisjaWZkZWYgX19jcGx1c3BsdXMKK3N0YXRpYyBpbnQgeXlpbnB1
dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZWxzZQorc3RhdGljIGludCBpbnB1dCAoeXlzY2Fu
X3QgeXlzY2FubmVyICk7CisjZW5kaWYKKworI2VuZGlmCisKIC8qIEFtb3VudCBvZiBzdHVmZiB0
byBzbHVycCB1cCB3aXRoIGVhY2ggcmVhZC4gKi8KICNpZm5kZWYgWVlfUkVBRF9CVUZfU0laRQog
I2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDgxOTIKQEAgLTExMzksNyArMTE1MSw3IEBAIGNhc2Ug
WVlfU1RBVEVfRU9GKENPTU1FTlQpOgogCiAgICAgaWYgKFlZX1NUQVJUID09IENPTU1FTlQpCiAg
ICAgewotICAgICAgICB5eWV4dHJhLT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGlj
czo6RU9GX0lOX0NPTU1FTlQsCisgICAgICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQo
cHA6OkRpYWdub3N0aWNzOjpQUF9FT0ZfSU5fQ09NTUVOVCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcDo6U291cmNlTG9jYXRpb24oeXlmaWxlbm8sIHl5bGluZW5vKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIik7CiAgICAgfQpAQCAtMTQ4
MCw2ICsxNDkyLDgxIEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5
eXNjYW5uZXIpCiAJcmV0dXJuIHl5X2lzX2phbSA/IDAgOiB5eV9jdXJyZW50X3N0YXRlOwogfQog
CisjaWZuZGVmIFlZX05PX0lOUFVUCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBzdGF0aWMgaW50
IHl5aW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lcikKKyNlbHNlCisgICAgc3RhdGljIGludCBpbnB1
dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKKyNlbmRpZgorCit7CisJaW50IGM7CisgICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJKnl5Zy0+
eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCisJaWYgKCAqeXlnLT55eV9jX2J1Zl9w
ID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCisJCXsKKwkJLyogeXlfY19idWZfcCBub3cgcG9p
bnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2FudCB0byByZXR1cm4uCisJCSAqIElmIHRoaXMgb2Nj
dXJzICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFjdGVycywgdGhlbiBpdCdzIGEKKwkJICogdmFsaWQg
TlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KKwkJICov
CisJCWlmICggeXlnLT55eV9jX2J1Zl9wIDwgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
Y2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQorCQkJLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAq
LworCQkJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7CisKKwkJZWxzZQorCQkJeyAvKiBuZWVkIG1v
cmUgaW5wdXQgKi8KKwkJCXl5X3NpemVfdCBvZmZzZXQgPSB5eWctPnl5X2NfYnVmX3AgLSB5eWct
Pnl5dGV4dF9wdHI7CisJCQkrK3l5Zy0+eXlfY19idWZfcDsKKworCQkJc3dpdGNoICggeXlfZ2V0
X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCisJCQkJeworCQkJCWNhc2UgRU9CX0FDVF9MQVNU
X01BVENIOgorCQkJCQkvKiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB5eV9nX25fYigpCisJCQkJCSAq
IHNlZXMgdGhhdCB3ZSd2ZSBhY2N1bXVsYXRlZCBhCisJCQkJCSAqIHRva2VuIGFuZCBmbGFncyB0
aGF0IHdlIG5lZWQgdG8KKwkJCQkJICogdHJ5IG1hdGNoaW5nIHRoZSB0b2tlbiBiZWZvcmUKKwkJ
CQkJICogcHJvY2VlZGluZy4gIEJ1dCBmb3IgaW5wdXQoKSwKKwkJCQkJICogdGhlcmUncyBubyBt
YXRjaGluZyB0byBjb25zaWRlci4KKwkJCQkJICogU28gY29udmVydCB0aGUgRU9CX0FDVF9MQVNU
X01BVENICisJCQkJCSAqIHRvIEVPQl9BQ1RfRU5EX09GX0ZJTEUuCisJCQkJCSAqLworCisJCQkJ
CS8qIFJlc2V0IGJ1ZmZlciBzdGF0dXMuICovCisJCQkJCXBwcmVzdGFydCh5eWluICx5eXNjYW5u
ZXIpOworCisJCQkJCS8qRkFMTFRIUk9VR0gqLworCisJCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9G
SUxFOgorCQkJCQl7CisJCQkJCWlmICggcHB3cmFwKHl5c2Nhbm5lciApICkKKwkJCQkJCXJldHVy
biBFT0Y7CisKKwkJCQkJaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkK
KwkJCQkJCVlZX05FV19GSUxFOworI2lmZGVmIF9fY3BsdXNwbHVzCisJCQkJCXJldHVybiB5eWlu
cHV0KHl5c2Nhbm5lcik7CisjZWxzZQorCQkJCQlyZXR1cm4gaW5wdXQoeXlzY2FubmVyKTsKKyNl
bmRpZgorCQkJCQl9CisKKwkJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJCQkJeXln
LT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgb2Zmc2V0OworCQkJCQlicmVhazsKKwkJ
CQl9CisJCQl9CisJCX0KKworCWMgPSAqKHVuc2lnbmVkIGNoYXIgKikgeXlnLT55eV9jX2J1Zl9w
OwkvKiBjYXN0IGZvciA4LWJpdCBjaGFyJ3MgKi8KKwkqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsJ
LyogcHJlc2VydmUgeXl0ZXh0ICovCisJeXlnLT55eV9ob2xkX2NoYXIgPSAqKyt5eWctPnl5X2Nf
YnVmX3A7CisKKwlyZXR1cm4gYzsKK30KKyNlbmRpZgkvKiBpZm5kZWYgWVlfTk9fSU5QVVQgKi8K
KwogLyoqIEltbWVkaWF0ZWx5IHN3aXRjaCB0byBhIGRpZmZlcmVudCBpbnB1dCBzdHJlYW0uCiAg
KiBAcGFyYW0gaW5wdXRfZmlsZSBBIHJlYWRhYmxlIHN0cmVhbS4KICAqIEBwYXJhbSB5eXNjYW5u
ZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgpAQCAtMjI1Miw3ICsyMzM5LDcgQEAgdm9pZCBUb2tlbml6
ZXI6OmxleChUb2tlbiogdG9rZW4pCiAgICAgdG9rZW4tPnR5cGUgPSBwcGxleCgmdG9rZW4tPnRl
eHQsJnRva2VuLT5sb2NhdGlvbixtSGFuZGxlKTsKICAgICBpZiAodG9rZW4tPnRleHQuc2l6ZSgp
ID4gbU1heFRva2VuTGVuZ3RoKQogICAgIHsKLSAgICAgICAgbUNvbnRleHQuZGlhZ25vc3RpY3Mt
PnJlcG9ydChEaWFnbm9zdGljczo6VE9LRU5fVE9PX0xPTkcsCisgICAgICAgIG1Db250ZXh0LmRp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX1RPS0VOX1RPT19MT05HLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRl
eHQpOwogICAgICAgICB0b2tlbi0+dGV4dC5lcmFzZShtTWF4VG9rZW5MZW5ndGgpOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvVG9rZW5pemVyLmwgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL1Rva2VuaXplci5sCmluZGV4IDkwYzQyYzg3MGJlMDAwZTlhNTczZGMxOTFk
NDhiY2RmNzBlY2Q2ZTEuLjAxZjAxNzdiNmMyNjNlMjI3YTk1NDBkMzJiZGE3NDZkMDdmNzljZjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvVG9rZW5pemVyLmwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIubApAQCAtMzMsMTIgKzMzLDYgQEAgSUYgWU9VIE1P
RElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNoLgog
I3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3Npbmctbm9yZXR1cm4iCiAjZW5k
aWYKIAotI2lmIGRlZmluZWQoX19jbGFuZ19fKQotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1
c2gKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vua25vd24tcHJhZ21hcyIK
LSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtcmVnaXN0ZXIi
Ci0jZW5kaWYKLQogdHlwZWRlZiBzdGQ6OnN0cmluZyBZWVNUWVBFOwogdHlwZWRlZiBwcDo6U291
cmNlTG9jYXRpb24gWVlMVFlQRTsKIApAQCAtMjcxLDEwICsyNjUsNiBAQCBGUkFDVElPTkFMX0NP
TlNUQU5UICAoe0RJR0lUfSoiLiJ7RElHSVR9Kyl8KHtESUdJVH0rIi4iKQogCiAlJQogCi0jaWYg
ZGVmaW5lZChfX2NsYW5nX18pCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCi0jZW5kaWYK
LQogbmFtZXNwYWNlIHBwIHsKIAogVG9rZW5pemVyOjpUb2tlbml6ZXIoRGlhZ25vc3RpY3MqIGRp
YWdub3N0aWNzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzb3IudmN4cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzc29yLnZjeHByb2oKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhODUzMGI1MDc0YTE3M2RkMDA4NzQyYzM4MzBk
ZTZjMWU4NDIzOGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVw
cm9jZXNzb3IudmN4cHJvagorKysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi3vu788P3ht
bCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTxQcm9qZWN0IERlZmF1bHRUYXJn
ZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNy
b3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPg0KLSAgPEl0ZW1Hcm91cCBMYWJlbD0i
UHJvamVjdENvbmZpZ3VyYXRpb25zIj4NCi0gICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1
ZGU9IkRlYnVnfFdpbjMyIj4NCi0gICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJh
dGlvbj4NCi0gICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPg0KLSAgICA8L1Byb2plY3RD
b25maWd1cmF0aW9uPg0KLSAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8
eDY0Ij4NCi0gICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4NCi0gICAg
ICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4NCi0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4N
Ci0gICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPg0KLSAg
ICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+DQotICAgICAgPFBsYXRm
b3JtPldpbjMyPC9QbGF0Zm9ybT4NCi0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCi0gICAg
PFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4NCi0gICAgICA8Q29u
ZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPg0KLSAgICAgIDxQbGF0Zm9ybT54NjQ8
L1BsYXRmb3JtPg0KLSAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KLSAgPC9JdGVtR3JvdXA+
DQotICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+DQotICAgIDxQcm9qZWN0R3VpZD57
RkJFMzJERjMtMEZCMC00RjJGLUE0MjQtMkMyMUJEN0JDMzI1fTwvUHJvamVjdEd1aWQ+DQotICAg
IDxSb290TmFtZXNwYWNlPnByZXByb2Nlc3NvcjwvUm9vdE5hbWVzcGFjZT4NCi0gICAgPEtleXdv
cmQ+V2luMzJQcm9qPC9LZXl3b3JkPg0KLSAgPC9Qcm9wZXJ0eUdyb3VwPg0KLSAgPEltcG9ydCBQ
cm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4N
Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9y
bSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCi0gICAgPENvbmZp
Z3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KLSAgICA8Q2hh
cmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4NCi0gICAgPFdob2xlUHJvZ3JhbU9wdGlt
aXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+DQotICA8L1Byb3BlcnR5R3Jv
dXA+DQotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KLSAgICA8Q29u
ZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+DQotICAgIDxD
aGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0Pg0KLSAgPC9Qcm9wZXJ0eUdyb3VwPg0K
LSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCi0gICAgPENvbmZpZ3Vy
YXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KLSAgICA8Q2hhcmFj
dGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4NCi0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXph
dGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+DQotICA8L1Byb3BlcnR5R3JvdXA+
DQotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZv
cm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCi0gICAgPENvbmZpZ3Vy
YXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KLSAgICA8Q2hhcmFj
dGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4NCi0gIDwvUHJvcGVydHlHcm91cD4NCi0gIDxJ
bXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPg0K
LSAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+DQotICA8L0ltcG9ydEdy
b3VwPg0KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQotICAgIDxJ
bXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51
c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNw
cC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIg
Lz4NCi0gIDwvSW1wb3J0R3JvdXA+DQotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25m
aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNo
ZWV0cyI+DQotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNw
cC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERp
cilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFw
cERhdGFQbGF0Zm9ybSIgLz4NCi0gIDwvSW1wb3J0R3JvdXA+DQotICA8SW1wb3J0R3JvdXAgQ29u
ZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExh
YmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERp
cilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0
cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJyki
IExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCi0gIDwvSW1wb3J0R3JvdXA+DQotICA8
SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdE
ZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KLSAgICA8SW1wb3J0IFByb2plY3Q9
IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29u
ZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSku
dXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQotICA8L0ltcG9y
dEdyb3VwPg0KLSAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+DQotICA8UHJv
cGVydHlHcm91cD4NCi0gICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC40MDIxOS4xPC9fUHJv
amVjdEZpbGVWZXJzaW9uPg0KLSAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlv
bil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4kKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJh
dGlvbilcPC9PdXREaXI+DQotICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u
KXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+
DQotICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdEZWJ1Z3x4NjQnIj4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilc
PC9PdXREaXI+DQotICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4kKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvSW50
RGlyPg0KLSAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9y
bSknPT0nUmVsZWFzZXxXaW4zMiciPiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uKVw8L091
dERpcj4NCi0gICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZv
cm0pJz09J1JlbGVhc2V8V2luMzInIj4kKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPg0KLSAgICA8
T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFz
ZXx4NjQnIj4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9PdXRE
aXI+DQotICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdSZWxlYXNlfHg2NCciPiQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+
DQotICA8L1Byb3BlcnR5R3JvdXA+DQotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249
IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+DQotICAgIDxD
bENvbXBpbGU+DQotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0K
LSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X1dJTkRPV1M7X1VT
UkRMTDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7Tk9NSU5NQVg7JShQcmVwcm9jZXNzb3JEZWZp
bml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxNaW5pbWFsUmVidWls
ZD50cnVlPC9NaW5pbWFsUmVidWlsZD4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkVuYWJs
ZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8UnVudGltZUxpYnJhcnk+
TXVsdGlUaHJlYWRlZERlYnVnPC9SdW50aW1lTGlicmFyeT4NCi0gICAgICA8UHJlY29tcGlsZWRI
ZWFkZXI+DQotICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4NCi0gICAgICA8V2FybmluZ0xldmVs
PkxldmVsNDwvV2FybmluZ0xldmVsPg0KLSAgICAgIDxUcmVhdFdhcm5pbmdBc0Vycm9yPnRydWU8
L1RyZWF0V2FybmluZ0FzRXJyb3I+DQotICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+RWRp
dEFuZENvbnRpbnVlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KLSAgICAgIDxEaXNhYmxlU3Bl
Y2lmaWNXYXJuaW5ncz40MTAwOzQxMjc7NDE4OTs0MjM5OzQyNDQ7NDI0NTs0NTEyOzQ3MDI7NDI2
NzslKERpc2FibGVTcGVjaWZpY1dhcm5pbmdzKTwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+DQot
ICAgIDwvQ2xDb21waWxlPg0KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KLSAgPEl0ZW1EZWZp
bml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdE
ZWJ1Z3x4NjQnIj4NCi0gICAgPE1pZGw+DQotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwv
VGFyZ2V0RW52aXJvbm1lbnQ+DQotICAgIDwvTWlkbD4NCi0gICAgPENsQ29tcGlsZT4NCi0gICAg
ICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPFByZXByb2Nl
c3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMO19DUlRfU0VDVVJF
X05PX0RFUFJFQ0FURTtOT01JTk1BWDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJv
Y2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPE1pbmltYWxSZWJ1aWxkPnRydWU8L01pbmltYWxS
ZWJ1aWxkPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RW5hYmxlRmFzdENoZWNrczwvQmFz
aWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVi
dWc8L1J1bnRpbWVMaWJyYXJ5Pg0KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4NCi0gICAgICA8
L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWw0PC9XYXJuaW5n
TGV2ZWw+DQotICAgICAgPFRyZWF0V2FybmluZ0FzRXJyb3I+dHJ1ZTwvVHJlYXRXYXJuaW5nQXNF
cnJvcj4NCi0gICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0Rl
YnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQotICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzPjQx
MDA7NDEyNzs0MTg5OzQyMzk7NDI0NDs0MjQ1OzQ1MTI7NDcwMjs0NzE4OzQyNjc7JShEaXNhYmxl
U3BlY2lmaWNXYXJuaW5ncyk8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPg0KLSAgICA8L0NsQ29t
cGlsZT4NCi0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCi0gIDxJdGVtRGVmaW5pdGlvbkdyb3Vw
IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4z
MiciPg0KLSAgICA8Q2xDb21waWxlPg0KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09w
dGltaXphdGlvbj4NCi0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+QW55U3VpdGFibGU8
L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9u
cz5XSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7
Tk9NSU5NQVg7X1NFQ1VSRV9TQ0w9MDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJv
Y2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8
L1J1bnRpbWVMaWJyYXJ5Pg0KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4NCi0gICAgICA8L1By
ZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWw0PC9XYXJuaW5nTGV2
ZWw+DQotICAgICAgPFRyZWF0V2FybmluZ0FzRXJyb3I+dHJ1ZTwvVHJlYXRXYXJuaW5nQXNFcnJv
cj4NCi0gICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVn
SW5mb3JtYXRpb25Gb3JtYXQ+DQotICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzPjQxMDA7
NDEyNzs0MTg5OzQyMzk7NDI0NDs0MjQ1OzQ1MTI7NDcwMjs0NzE4OzQyNjc7JShEaXNhYmxlU3Bl
Y2lmaWNXYXJuaW5ncyk8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPg0KLSAgICA8L0NsQ29tcGls
ZT4NCi0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCi0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4N
Ci0gICAgPE1pZGw+DQotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJv
bm1lbnQ+DQotICAgIDwvTWlkbD4NCi0gICAgPENsQ29tcGlsZT4NCi0gICAgICA8T3B0aW1pemF0
aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5z
aW9uPkFueVN1aXRhYmxlPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCi0gICAgICA8UHJlcHJv
Y2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7X0NSVF9TRUNV
UkVfTk9fREVQUkVDQVRFO05PTUlOTUFYO19TRUNVUkVfU0NMPTA7JShQcmVwcm9jZXNzb3JEZWZp
bml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxSdW50aW1lTGlicmFy
eT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4NCi0gICAgICA8UHJlY29tcGlsZWRIZWFk
ZXI+DQotICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4NCi0gICAgICA8V2FybmluZ0xldmVsPkxl
dmVsNDwvV2FybmluZ0xldmVsPg0KLSAgICAgIDxUcmVhdFdhcm5pbmdBc0Vycm9yPnRydWU8L1Ry
ZWF0V2FybmluZ0FzRXJyb3I+DQotICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3Jh
bURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KLSAgICAgIDxEaXNhYmxlU3BlY2lm
aWNXYXJuaW5ncz40MTAwOzQxMjc7NDE4OTs0MjM5OzQyNDQ7NDI0NTs0NTEyOzQ3MDI7NDcxODs0
MjY3OyUoRGlzYWJsZVNwZWNpZmljV2FybmluZ3MpPC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4N
Ci0gICAgPC9DbENvbXBpbGU+DQotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQotICA8SXRlbUdy
b3VwPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkRpYWdub3N0aWNzQmFzZS5jcHAiIC8+DQot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwIiAvPg0KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9IkRpcmVjdGl2ZVBhcnNlci5jcHAiIC8+DQotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iRXhwcmVzc2lvblBhcnNlci5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iSW5wdXQuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkxleGVyLmNw
cCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJNYWNyby5jcHAiIC8+DQotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iTWFjcm9FeHBhbmRlci5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iUHJlcHJvY2Vzc29yLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJUb2tl
bi5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iVG9rZW5pemVyLmNwcCIgLz4NCi0g
IDwvSXRlbUdyb3VwPg0KLSAgPEl0ZW1Hcm91cD4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJs
ZW5ndGhfbGltaXRzLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iRGlhZ25vc3RpY3NC
YXNlLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iRGlyZWN0aXZlSGFuZGxlckJhc2Uu
aCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJEaXJlY3RpdmVQYXJzZXIuaCIgLz4NCi0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSJFeHByZXNzaW9uUGFyc2VyLmgiIC8+DQotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iSW5wdXQuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJMZXhl
ci5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ik1hY3JvLmgiIC8+DQotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iTWFjcm9FeHBhbmRlci5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Im51bWVyaWNfbGV4LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icHBfdXRpbHMu
aCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJQcmVwcm9jZXNzb3IuaCIgLz4NCi0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSJTb3VyY2VMb2NhdGlvbi5oIiAvPg0KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9IlRva2VuLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iVG9rZW5pemVy
LmgiIC8+DQotICA8L0l0ZW1Hcm91cD4NCi0gIDxJdGVtR3JvdXA+DQotICAgIDxOb25lIEluY2x1
ZGU9IlRva2VuaXplci5sIiAvPg0KLSAgPC9JdGVtR3JvdXA+DQotICA8SW1wb3J0IFByb2plY3Q9
IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPg0KLSAgPEltcG9ydEdy
b3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4NCi0gIDwvSW1wb3J0R3JvdXA+DQotPC9Qcm9q
ZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzc29yLnZjeHBy
b2ouZmlsdGVycyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvcHJlcHJvY2Vzc29yLnZjeHByb2ouZmlsdGVycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNGFjMjAyZjQwMDJhMjkyYzYxNGY5NGFkM2Q3ZDhjYzNjODE0MzdkMy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3Nvci52Y3hwcm9qLmZp
bHRlcnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAot77u/PD94bWwgdmVyc2lvbj0i
MS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgeG1s
bnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+
DQotICA8SXRlbUdyb3VwPg0KLSAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+DQot
ICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUy
QTJGRn08L1VuaXF1ZUlkZW50aWZpZXI+DQotICAgICAgPEV4dGVuc2lvbnM+Y3BwO2M7Y2M7Y3h4
O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXg8L0V4dGVuc2lvbnM+DQotICAgIDwvRmlsdGVy
Pg0KLSAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlcyI+DQotICAgICAgPFVuaXF1ZUlk
ZW50aWZpZXI+ezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJGQn08L1VuaXF1ZUlk
ZW50aWZpZXI+DQotICAgICAgPEV4dGVuc2lvbnM+aDtocHA7aHh4O2htO2lubDtpbmM7eHNkPC9F
eHRlbnNpb25zPg0KLSAgICA8L0ZpbHRlcj4NCi0gIDwvSXRlbUdyb3VwPg0KLSAgPEl0ZW1Hcm91
cD4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJEaXJlY3RpdmVQYXJzZXIuY3BwIj4NCi0gICAg
ICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSJFeHByZXNzaW9uUGFyc2VyLmNwcCI+DQotICAgICAgPEZpbHRl
cj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iSW5wdXQuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmls
dGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJMZXhlci5j
cHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21w
aWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ik1hY3JvLmNwcCI+DQotICAgICAgPEZpbHRl
cj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iTWFjcm9FeHBhbmRlci5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZp
bGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
IlByZXByb2Nlc3Nvci5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+
DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlRva2VuLmNwcCI+
DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+
DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iVG9rZW5pemVyLmNwcCI+DQotICAgICAgPEZpbHRl
cj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iRGlhZ25vc3RpY3NCYXNlLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2Ug
RmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxl
czwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gIDwvSXRlbUdyb3VwPg0KLSAgPEl0ZW1H
cm91cD4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJEaXJlY3RpdmVQYXJzZXIuaCI+DQotICAg
ICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iRXhwcmVzc2lvblBhcnNlci5oIj4NCi0gICAgICA8RmlsdGVy
PkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSJJbnB1dC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVy
Pg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJMZXhlci5oIj4N
Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJNYWNyby5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRl
ciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSJNYWNyb0V4cGFuZGVyLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0
ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Im51bWVyaWNf
bGV4LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJ
bmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InBwX3V0aWxzLmgiPg0KLSAgICAgIDxG
aWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9IlByZXByb2Nlc3Nvci5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBG
aWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSJTb3VyY2VMb2NhdGlvbi5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVy
Pg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJUb2tlbi5oIj4N
Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJUb2tlbml6ZXIuaCI+DQotICAgICAgPEZpbHRlcj5I
ZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0ibGVuZ3RoX2xpbWl0cy5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwv
RmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJEaWFn
bm9zdGljc0Jhc2UuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0g
ICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iRGlyZWN0aXZlSGFuZGxl
ckJhc2UuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9D
bEluY2x1ZGU+DQotICA8L0l0ZW1Hcm91cD4NCi0gIDxJdGVtR3JvdXA+DQotICAgIDxOb25lIElu
Y2x1ZGU9IlRva2VuaXplci5sIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVy
Pg0KLSAgICA8L05vbmU+DQotICA8L0l0ZW1Hcm91cD4NCi08L1Byb2plY3Q+ClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5ZDJiYWIxN2Y4
MTRhZTRjY2IzZGZhMTMxOTY0ODFiNDg3YTFlNDguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDEyNyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL0luZm9T
aW5rLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VDb250ZXh0LmgiCi0jaW5jbHVkZSAiY29t
cGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCi0jaW5jbHVkZSAiY29tcGls
ZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCIKLQotUmVzdHJpY3RGcmFn
bWVudFNoYWRlclRpbWluZzo6UmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZyhUSW5mb1NpbmtC
YXNlJiBzaW5rKQotICAgIDogbVNpbmsoc2luaykKLSAgICAsIG1OdW1FcnJvcnMoMCkKLXsKLSAg
ICAvLyBTYW1wbGluZyBvcHMgZm91bmQgb25seSBpbiBmcmFnbWVudCBzaGFkZXJzLgotICAgIG1T
YW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRChzMjE7dmYyO2YxOyIpOwotICAgIG1TYW1wbGlu
Z09wcy5pbnNlcnQoInRleHR1cmUyRFByb2ooczIxO3ZmMztmMTsiKTsKLSAgICBtU2FtcGxpbmdP
cHMuaW5zZXJ0KCJ0ZXh0dXJlMkRQcm9qKHMyMTt2ZjQ7ZjE7Iik7Ci0gICAgbVNhbXBsaW5nT3Bz
Lmluc2VydCgidGV4dHVyZUN1YmUoc0MxO3ZmMztmMTsiKTsKLSAgICAvLyBTYW1wbGluZyBvcHMg
Zm91bmQgaW4gYm90aCB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMuCi0gICAgbVNhbXBsaW5n
T3BzLmluc2VydCgidGV4dHVyZTJEKHMyMTt2ZjI7Iik7Ci0gICAgbVNhbXBsaW5nT3BzLmluc2Vy
dCgidGV4dHVyZTJEUHJvaihzMjE7dmYzOyIpOwotICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRl
eHR1cmUyRFByb2ooczIxO3ZmNDsiKTsKLSAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJl
Q3ViZShzQzE7dmYzOyIpOwotICAgIC8vIFNhbXBsaW5nIG9wcyBwcm92aWRlZCBieSBPRVNfRUdM
X2ltYWdlX2V4dGVybmFsLgotICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRCgxO3Zm
MjsiKTsKLSAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRQcm9qKDE7dmYzOyIpOwot
ICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFByb2ooMTt2ZjQ7Iik7Ci0gICAgLy8g
U2FtcGxpbmcgb3BzIHByb3ZpZGVkIGJ5IEFSQl90ZXh0dXJlX3JlY3RhbmdsZS4KLSAgICBtU2Ft
cGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRSZWN0KDE7dmYyOyIpOwotICAgIG1TYW1wbGluZ09w
cy5pbnNlcnQoInRleHR1cmUyRFJlY3RQcm9qKDE7dmYzOyIpOwotICAgIG1TYW1wbGluZ09wcy5p
bnNlcnQoInRleHR1cmUyRFJlY3RQcm9qKDE7dmY0OyIpOwotfQotCi0vLyBGSVhNRShtdnVqb3Zp
Yyk6IFdlIGRvIG5vdCBrbm93IGlmIHRoZSBleGVjdXRpb24gdGltZSBvZiBidWlsdC1pbiBvcGVy
YXRpb25zIGxpa2Ugc2luLCBwb3csIGV0Yy4KLS8vIGNhbiB2YXJ5IGJhc2VkIG9uIHRoZSB2YWx1
ZSBvZiB0aGUgaW5wdXQgYXJndW1lbnRzLiBJZiBzbywgd2Ugc2hvdWxkIHJlc3RyaWN0IHRob3Nl
IGFzIHdlbGwuCi12b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OmVuZm9yY2VSZXN0
cmljdGlvbnMoY29uc3QgVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpCi17Ci0gICAgbU51bUVycm9y
cyA9IDA7Ci0KLSAgICAvLyBGSVhNRShtdnVqb3ZpYyk6IFRoZSBkZXBlbmRlbmN5IGdyYXBoIGRv
ZXMgbm90IHN1cHBvcnQgdXNlciBkZWZpbmVkIGZ1bmN0aW9uIGNhbGxzIHJpZ2h0IG5vdywKLSAg
ICAvLyBzbyB3ZSBnZW5lcmF0ZSBlcnJvcnMgZm9yIHRoZW0uCi0gICAgdmFsaWRhdGVVc2VyRGVm
aW5lZEZ1bmN0aW9uQ2FsbFVzYWdlKGdyYXBoKTsKLQotICAgIC8vIFN0YXJ0aW5nIGZyb20gZWFj
aCBzYW1wbGVyLCB0cmF2ZXJzZSB0aGUgZGVwZW5kZW5jeSBncmFwaCBhbmQgZ2VuZXJhdGUgYW4g
ZXJyb3IgZWFjaCB0aW1lIHdlCi0gICAgLy8gaGl0IGEgbm9kZSB3aGVyZSBzYW1wbGVyIGRlcGVu
ZGVudCB2YWx1ZXMgYXJlIG5vdCBhbGxvd2VkLgotICAgIGZvciAoVEdyYXBoU3ltYm9sVmVjdG9y
Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gZ3JhcGguYmVnaW5TYW1wbGVyU3ltYm9scygpOwotICAg
ICAgICAgaXRlciAhPSBncmFwaC5lbmRTYW1wbGVyU3ltYm9scygpOwotICAgICAgICAgKytpdGVy
KQotICAgIHsKLSAgICAgICAgVEdyYXBoU3ltYm9sKiBzYW1wbGVyU3ltYm9sID0gKml0ZXI7Ci0g
ICAgICAgIGNsZWFyVmlzaXRlZCgpOwotICAgICAgICBzYW1wbGVyU3ltYm9sLT50cmF2ZXJzZSh0
aGlzKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmFs
aWRhdGVVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbFVzYWdlKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgm
IGdyYXBoKQotewotICAgIGZvciAoVEZ1bmN0aW9uQ2FsbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IGdyYXBoLmJlZ2luVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKCk7Ci0gICAgICAgICBp
dGVyICE9IGdyYXBoLmVuZFVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpOwotICAgICAgICAgKytp
dGVyKQotICAgIHsKLSAgICAgICAgVEdyYXBoRnVuY3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwgPSAq
aXRlcjsKLSAgICAgICAgYmVnaW5FcnJvcihmdW5jdGlvbkNhbGwtPmdldEludGVybUZ1bmN0aW9u
Q2FsbCgpKTsKLSAgICAgICAgbVNpbmsgPDwgIkEgY2FsbCB0byBhIHVzZXIgZGVmaW5lZCBmdW5j
dGlvbiBpcyBub3QgcGVybWl0dGVkLlxuIjsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzdHJpY3RGcmFn
bWVudFNoYWRlclRpbWluZzo6YmVnaW5FcnJvcihjb25zdCBUSW50ZXJtTm9kZSogbm9kZSkKLXsK
LSAgICArK21OdW1FcnJvcnM7Ci0gICAgbVNpbmsucHJlZml4KEVQcmVmaXhFcnJvcik7Ci0gICAg
bVNpbmsubG9jYXRpb24obm9kZS0+Z2V0TGluZSgpKTsKLX0KLQotYm9vbCBSZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nOjppc1NhbXBsaW5nT3AoY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogaW50
ZXJtRnVuY3Rpb25DYWxsKSBjb25zdAotewotICAgIHJldHVybiAhaW50ZXJtRnVuY3Rpb25DYWxs
LT5pc1VzZXJEZWZpbmVkKCkgJiYKLSAgICAgICAgICAgbVNhbXBsaW5nT3BzLmZpbmQoaW50ZXJt
RnVuY3Rpb25DYWxsLT5nZXROYW1lKCkpICE9IG1TYW1wbGluZ09wcy5lbmQoKTsKLX0KLQotdm9p
ZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdEFyZ3VtZW50KFRHcmFwaEFyZ3Vt
ZW50KiBwYXJhbWV0ZXIpCi17Ci0gICAgLy8gVGV4dHVyZSBjYWNoZSBhY2Nlc3MgdGltZSBtaWdo
dCBsZWFrIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi4KLSAgICAvLyBUaHVzLCB3ZSByZXN0cmljdCBz
YW1wbGVyIGRlcGVuZGVudCB2YWx1ZXMgZnJvbSBhZmZlY3RpbmcgdGhlIGNvb3JkaW5hdGUgb3Ig
TE9EIGJpYXMgb2YgYQotICAgIC8vIHNhbXBsaW5nIG9wZXJhdGlvbi4KLSAgICBpZiAoaXNTYW1w
bGluZ09wKHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkpKSB7Ci0gICAgICAgIHN3
aXRjaCAocGFyYW1ldGVyLT5nZXRBcmd1bWVudE51bWJlcigpKSB7Ci0gICAgICAgICAgICBjYXNl
IDE6Ci0gICAgICAgICAgICAgICAgLy8gU2Vjb25kIGFyZ3VtZW50IChjb29yZCkKLSAgICAgICAg
ICAgICAgICBiZWdpbkVycm9yKHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkpOwot
ICAgICAgICAgICAgICAgIG1TaW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNh
bXBsZXIgaXMgbm90IHBlcm1pdHRlZCB0byBiZSB0aGUiCi0gICAgICAgICAgICAgICAgICAgICAg
PDwgIiBjb29yZGluYXRlIGFyZ3VtZW50IG9mIGEgc2FtcGxpbmcgb3BlcmF0aW9uLlxuIjsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAg
ICAvLyBUaGlyZCBhcmd1bWVudCAoYmlhcykKLSAgICAgICAgICAgICAgICBiZWdpbkVycm9yKHBh
cmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkpOwotICAgICAgICAgICAgICAgIG1TaW5r
IDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1pdHRl
ZCB0byBiZSB0aGUiCi0gICAgICAgICAgICAgICAgICAgICAgPDwgIiBiaWFzIGFyZ3VtZW50IG9m
IGEgc2FtcGxpbmcgb3BlcmF0aW9uLlxuIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgLy8gRmlyc3QgYXJndW1lbnQgKHNhbXBs
ZXIpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
UmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0
aW9uKiBzZWxlY3Rpb24pCi17Ci0gICAgYmVnaW5FcnJvcihzZWxlY3Rpb24tPmdldEludGVybVNl
bGVjdGlvbigpKTsKLSAgICBtU2luayA8PCAiQW4gZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24gYSBz
YW1wbGVyIGlzIG5vdCBwZXJtaXR0ZWQgaW4gYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQuXG4iOwot
fQotCi12b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0TG9vcChUR3JhcGhM
b29wKiBsb29wKQotewotICAgIGJlZ2luRXJyb3IobG9vcC0+Z2V0SW50ZXJtTG9vcCgpKTsKLSAg
ICBtU2luayA8PCAiQW4gZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24gYSBzYW1wbGVyIGlzIG5vdCBw
ZXJtaXR0ZWQgaW4gYSBsb29wIGNvbmRpdGlvbi5cbiI7Ci19Ci0KLXZvaWQgUmVzdHJpY3RGcmFn
bWVudFNoYWRlclRpbWluZzo6dmlzaXRMb2dpY2FsT3AoVEdyYXBoTG9naWNhbE9wKiBsb2dpY2Fs
T3ApCi17Ci0gICAgYmVnaW5FcnJvcihsb2dpY2FsT3AtPmdldEludGVybUxvZ2ljYWxPcCgpKTsK
LSAgICBtU2luayA8PCAiQW4gZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24gYSBzYW1wbGVyIGlzIG5v
dCBwZXJtaXR0ZWQgb24gdGhlIGxlZnQgaGFuZCBzaWRlIG9mIGEgbG9naWNhbCAiCi0gICAgICAg
ICAgPDwgbG9naWNhbE9wLT5nZXRPcFN0cmluZygpCi0gICAgICAgICAgPDwgIiBvcGVyYXRvci5c
biI7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTkxNjVjYTI4N2UzMzEwMjU3ZDJjMDYw
YjIwZmVjOWQ0ZTMwM2I3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX0ZSQUdNRU5U
X1NIQURFUl9USU1JTkdfSF8KLSNkZWZpbmUgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX0ZSQUdN
RU5UX1NIQURFUl9USU1JTkdfSF8KLQotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgot
Ci0jaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCi0KLWNsYXNzIFRJbmZvU2lua0Jhc2U7Ci0KLWNs
YXNzIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcgOiBURGVwZW5kZW5jeUdyYXBoVHJhdmVy
c2VyIHsKLXB1YmxpYzoKLSAgICBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nKFRJbmZvU2lu
a0Jhc2UmIHNpbmspOwotICAgIHZvaWQgZW5mb3JjZVJlc3RyaWN0aW9ucyhjb25zdCBURGVwZW5k
ZW5jeUdyYXBoJiBncmFwaCk7Ci0gICAgaW50IG51bUVycm9ycygpIGNvbnN0IHsgcmV0dXJuIG1O
dW1FcnJvcnM7IH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFyZ3VtZW50KFRHcmFwaEFyZ3Vt
ZW50KiBwYXJhbWV0ZXIpOwotICAgIHZpcnR1YWwgdm9pZCB2aXNpdFNlbGVjdGlvbihUR3JhcGhT
ZWxlY3Rpb24qIHNlbGVjdGlvbik7Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0TG9vcChUR3JhcGhM
b29wKiBsb29wKTsKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRMb2dpY2FsT3AoVEdyYXBoTG9naWNh
bE9wKiBsb2dpY2FsT3ApOwotCi1wcml2YXRlOgotICAgIHZvaWQgYmVnaW5FcnJvcihjb25zdCBU
SW50ZXJtTm9kZSogbm9kZSk7Ci0gICAgdm9pZCB2YWxpZGF0ZVVzZXJEZWZpbmVkRnVuY3Rpb25D
YWxsVXNhZ2UoY29uc3QgVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpOwotICAgIGJvb2wgaXNTYW1w
bGluZ09wKGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCkgY29uc3Q7
Ci0KLSAgICBUSW5mb1NpbmtCYXNlJiBtU2luazsKLSAgICBpbnQgbU51bUVycm9yczsKLQotICAg
IHR5cGVkZWYgc3RkOjpzZXQ8VFN0cmluZz4gU3RyaW5nU2V0OwotICAgIFN0cmluZ1NldCBtU2Ft
cGxpbmdPcHM7Ci19OwotCi0jZW5kaWYgIC8vIENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9GUkFH
TUVOVF9TSEFERVJfVElNSU5HX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhT
aGFkZXJUaW1pbmcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTVlYjYyZDY1
MGI5OWRlNDY4NWFhOWQwMTQxZDRiZjI2ZTU5MDA0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTcgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci90aW1pbmcv
UmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCIKLQotdm9pZCBSZXN0cmljdFZlcnRleFNoYWRl
clRpbWluZzo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKLXsKLSAgICBpZiAoSXNT
YW1wbGVyKG5vZGUtPmdldEJhc2ljVHlwZSgpKSkgewotICAgICAgICArK21OdW1FcnJvcnM7Ci0g
ICAgICAgIG1TaW5rLm1lc3NhZ2UoRVByZWZpeEVycm9yLAotICAgICAgICAgICAgICAgICAgICAg
IG5vZGUtPmdldExpbmUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAiU2FtcGxlcnMgYXJlIG5v
dCBwZXJtaXR0ZWQgaW4gdmVydGV4IHNoYWRlcnMiKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4
U2hhZGVyVGltaW5nLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGlt
aW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDE5YTA1ZmE2OGJjOGJmZmY3OGI2OGI0MTk2Mjg2MzEyNDhjYjZjODEuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oCisr
KyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09N
UElMRVJfVElNSU5HX1JFU1RSSUNUX1ZFUlRFWF9TSEFERVJfVElNSU5HX0hfCi0jZGVmaW5lIENP
TVBJTEVSX1RJTUlOR19SRVNUUklDVF9WRVJURVhfU0hBREVSX1RJTUlOR19IXwotCi0jaW5jbHVk
ZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCi0KLSNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlh
dGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgotCi1jbGFzcyBUSW5mb1NpbmtC
YXNlOwotCi1jbGFzcyBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZyA6IHB1YmxpYyBUSW50ZXJt
VHJhdmVyc2VyIHsKLXB1YmxpYzoKLSAgICBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZyhUSW5m
b1NpbmtCYXNlJiBzaW5rKQotICAgICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgZmFsc2Us
IGZhbHNlKQotICAgICAgICAsIG1TaW5rKHNpbmspCi0gICAgICAgICwgbU51bUVycm9ycygwKSB7
fQotCi0gICAgdm9pZCBlbmZvcmNlUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290KSB7IHJv
b3QtPnRyYXZlcnNlKHRoaXMpOyB9Ci0gICAgaW50IG51bUVycm9ycygpIHsgcmV0dXJuIG1OdW1F
cnJvcnM7IH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7
Ci1wcml2YXRlOgotICAgIFRJbmZvU2lua0Jhc2UmIG1TaW5rOwotICAgIGludCBtTnVtRXJyb3Jz
OwotfTsKLQotI2VuZGlmICAvLyBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfVkVSVEVYX1NIQURF
Ul9USU1JTkdfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yLnZjeHByb2ogYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci52Y3hwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBh
MjY5NDlmMDgzZGE1N2MzY2QxMjM0YjBkZGI4YjAyMDgxNzk5NTkwLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yLnZjeHByb2oKKysrIC9kZXYvbnVsbApAQCAtMSwzMDQgKzAs
MCBAQAot77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08UHJvamVj
dCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDov
L3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4NCi0gIDxJdGVt
R3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+DQotICAgIDxQcm9qZWN0Q29uZmln
dXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+DQotICAgICAgPENvbmZpZ3VyYXRpb24+RGVi
dWc8L0NvbmZpZ3VyYXRpb24+DQotICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4NCi0g
ICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCi0gICAgPFByb2plY3RDb25maWd1cmF0aW9uIElu
Y2x1ZGU9IkRlYnVnfHg2NCI+DQotICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3Vy
YXRpb24+DQotICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+DQotICAgIDwvUHJvamVjdENv
bmZpZ3VyYXRpb24+DQotICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNl
fFdpbjMyIj4NCi0gICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPg0K
LSAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+DQotICAgIDwvUHJvamVjdENvbmZpZ3Vy
YXRpb24+DQotICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+
DQotICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4NCi0gICAgICA8
UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4NCi0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCi0g
IDwvSXRlbUdyb3VwPg0KLSAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPg0KLSAgICA8
UHJvamVjdEd1aWQ+ezVCM0E2REI4LTFFN0UtNDBENy05MkI5LURBOEFBRTYxOUZBRH08L1Byb2pl
Y3RHdWlkPg0KLSAgICA8Um9vdE5hbWVzcGFjZT5jb21waWxlcjwvUm9vdE5hbWVzcGFjZT4NCi0g
ICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPg0KLSAgICA8UHJvamVjdE5hbWU+dHJhbnNs
YXRvcjwvUHJvamVjdE5hbWU+DQotICA8L1Byb3BlcnR5R3JvdXA+DQotICA8SW1wb3J0IFByb2pl
Y3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPg0KLSAg
PFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KLSAgICA8Q29uZmlndXJh
dGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+DQotICAgIDxDaGFyYWN0
ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+DQotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRp
b24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPg0KLSAgPC9Qcm9wZXJ0eUdyb3VwPg0K
LSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCi0gICAgPENvbmZpZ3Vy
YXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KLSAgICA8Q2hhcmFj
dGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0Pg0KLSAgPC9Qcm9wZXJ0eUdyb3VwPg0KLSAgPFBy
b3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdS
ZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCi0gICAgPENvbmZpZ3VyYXRpb25U
eXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KLSAgICA8Q2hhcmFjdGVyU2V0
Pk5vdFNldDwvQ2hhcmFjdGVyU2V0Pg0KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRy
dWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4NCi0gIDwvUHJvcGVydHlHcm91cD4NCi0gIDxQ
cm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n
RGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KLSAgICA8Q29uZmlndXJhdGlvblR5
cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+DQotICAgIDxDaGFyYWN0ZXJTZXQ+
Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+DQotICA8L1Byb3BlcnR5R3JvdXA+DQotICA8SW1wb3J0IFBy
b2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4NCi0gIDxJbXBv
cnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPg0KLSAgPC9JbXBvcnRHcm91cD4NCi0g
IDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09
J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KLSAgICA8SW1wb3J0IFBy
b2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9w
cyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0
Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQotICA8
L0ltcG9ydEdyb3VwPg0KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlv
bil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0K
LSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0
Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jv
c29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxh
dGZvcm0iIC8+DQotICA8L0ltcG9ydEdyb3VwPg0KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJv
cGVydHlTaGVldHMiPg0KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jv
c29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNl
clJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0i
TG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQotICA8L0ltcG9ydEdyb3VwPg0KLSAgPEltcG9ydEdy
b3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0
JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCi0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJS
b290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0i
ZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJv
cHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KLSAgPC9JbXBvcnRHcm91cD4N
Ci0gIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPg0KLSAgPFByb3BlcnR5R3Jv
dXA+DQotICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuNDAyMTkuMTwvX1Byb2plY3RGaWxl
VmVyc2lvbj4NCi0gICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb24pXDwv
T3V0RGlyPg0KLSAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nRGVidWd8V2luMzInIj4kKENvbmZpZ3VyYXRpb24pXGNvbW1vblw8L0ludERpcj4N
Ci0gICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09
J0RlYnVnfHg2NCciPiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8
L091dERpcj4NCi0gICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJz09J0RlYnVnfHg2NCciPiQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9JbnRE
aXI+DQotICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdSZWxlYXNlfFdpbjMyJyI+JChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb24pXDwvT3V0
RGlyPg0KLSAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9y
bSknPT0nUmVsZWFzZXxXaW4zMiciPiQoQ29uZmlndXJhdGlvbilcY29tbW9uXDwvSW50RGlyPg0K
LSAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n
UmVsZWFzZXx4NjQnIj4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilc
PC9PdXREaXI+DQotICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9J
bnREaXI+DQotICA8L1Byb3BlcnR5R3JvdXA+DQotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25k
aXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+DQot
ICAgIDxDbENvbXBpbGU+DQotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0
aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQoUHJvamVjdERpcik7
JChQcm9qZWN0RGlyKS4uLzskKFByb2plY3REaXIpLi4vLi4vaW5jbHVkZTslKEFkZGl0aW9uYWxJ
bmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAg
IDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0xJQjtfQ1JUX1NFQ1VSRV9O
T19ERVBSRUNBVEU7Tk9NSU5NQVg7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nl
c3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxNaW5pbWFsUmVidWlsZD50cnVlPC9NaW5pbWFsUmVi
dWlsZD4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2lj
UnVudGltZUNoZWNrcz4NCi0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVn
PC9SdW50aW1lTGlicmFyeT4NCi0gICAgICA8UHJlY29tcGlsZWRIZWFkZXI+DQotICAgICAgPC9Q
cmVjb21waWxlZEhlYWRlcj4NCi0gICAgICA8V2FybmluZ0xldmVsPkxldmVsNDwvV2FybmluZ0xl
dmVsPg0KLSAgICAgIDxUcmVhdFdhcm5pbmdBc0Vycm9yPnRydWU8L1RyZWF0V2FybmluZ0FzRXJy
b3I+DQotICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+RWRpdEFuZENvbnRpbnVlPC9EZWJ1
Z0luZm9ybWF0aW9uRm9ybWF0Pg0KLSAgICAgIDxEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz40MTAw
OzQxMjc7NDE4OTs0MjM5OzQyNDQ7NDI0NTs0NTEyOzQ3MDI7NDcxODslKERpc2FibGVTcGVjaWZp
Y1dhcm5pbmdzKTwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+DQotICAgIDwvQ2xDb21waWxlPg0K
LSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4NCi0gICAg
PE1pZGw+DQotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+
DQotICAgIDwvTWlkbD4NCi0gICAgPENsQ29tcGlsZT4NCi0gICAgICA8T3B0aW1pemF0aW9uPkRp
c2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3Jp
ZXM+JChQcm9qZWN0RGlyKTskKFByb2plY3REaXIpLi4vOyQoUHJvamVjdERpcikuLi8uLi9pbmNs
dWRlOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGly
ZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztf
TElCO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWDslKFByZXByb2Nlc3NvckRlZmlu
aXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPE1pbmltYWxSZWJ1aWxk
PnRydWU8L01pbmltYWxSZWJ1aWxkPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RW5hYmxl
RmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxSdW50aW1lTGlicmFyeT5N
dWx0aVRocmVhZGVkRGVidWc8L1J1bnRpbWVMaWJyYXJ5Pg0KLSAgICAgIDxQcmVjb21waWxlZEhl
YWRlcj4NCi0gICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDxXYXJuaW5nTGV2ZWw+
TGV2ZWw0PC9XYXJuaW5nTGV2ZWw+DQotICAgICAgPFRyZWF0V2FybmluZ0FzRXJyb3I+dHJ1ZTwv
VHJlYXRXYXJuaW5nQXNFcnJvcj4NCi0gICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9n
cmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQotICAgICAgPERpc2FibGVTcGVj
aWZpY1dhcm5pbmdzPjQxMDA7NDEyNzs0MTg5OzQyMzk7NDI0NDs0MjQ1OzQyNjc7NDUxMjs0NzAy
OzQ3MTg7JShEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncyk8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdz
Pg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCi0gIDxJdGVt
RGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nUmVsZWFzZXxXaW4zMiciPg0KLSAgICA8Q2xDb21waWxlPg0KLSAgICAgIDxPcHRpbWl6YXRp
b24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNp
b24+QW55U3VpdGFibGU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPg0KLSAgICAgIDxBZGRpdGlv
bmFsSW5jbHVkZURpcmVjdG9yaWVzPiQoUHJvamVjdERpcik7JChQcm9qZWN0RGlyKS4uLzskKFBy
b2plY3REaXIpLi4vLi4vaW5jbHVkZTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9B
ZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0
aW9ucz5XSU4zMjtOREVCVUc7X0xJQjtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7Tk9NSU5NQVg7
X1NFQ1VSRV9TQ0w9MDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVm
aW5pdGlvbnM+DQotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVM
aWJyYXJ5Pg0KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4NCi0gICAgICA8L1ByZWNvbXBpbGVk
SGVhZGVyPg0KLSAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWw0PC9XYXJuaW5nTGV2ZWw+DQotICAg
ICAgPFRyZWF0V2FybmluZ0FzRXJyb3I+dHJ1ZTwvVHJlYXRXYXJuaW5nQXNFcnJvcj4NCi0gICAg
ICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRp
b25Gb3JtYXQ+DQotICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzPjQxMDA7NDEyNzs0MTg5
OzQyMzk7NDI0NDs0MjQ1OzQ1MTI7NDcwMjs0NzE4OyUoRGlzYWJsZVNwZWNpZmljV2FybmluZ3Mp
PC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4NCi0gICAgPC9DbENvbXBpbGU+DQotICA8L0l0ZW1E
ZWZpbml0aW9uR3JvdXA+DQotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENv
bmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+DQotICAgIDxNaWRsPg0K
LSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50Pg0KLSAgICA8
L01pZGw+DQotICAgIDxDbENvbXBpbGU+DQotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwv
T3B0aW1pemF0aW9uPg0KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5BbnlTdWl0YWJs
ZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGly
ZWN0b3JpZXM+JChQcm9qZWN0RGlyKTskKFByb2plY3REaXIpLi4vOyQoUHJvamVjdERpcikuLi8u
Li9pbmNsdWRlOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNs
dWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05E
RUJVRztfTElCO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWDtfU0VDVVJFX1NDTD0w
OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0g
ICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+DQotICAg
ICAgPFByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAg
ICAgPFdhcm5pbmdMZXZlbD5MZXZlbDQ8L1dhcm5pbmdMZXZlbD4NCi0gICAgICA8VHJlYXRXYXJu
aW5nQXNFcnJvcj50cnVlPC9UcmVhdFdhcm5pbmdBc0Vycm9yPg0KLSAgICAgIDxEZWJ1Z0luZm9y
bWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCi0g
ICAgICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+NDEwMDs0MTI3OzQxODk7NDIzOTs0MjQ0OzQy
NDU7NDI2Nzs0NTEyOzQ3MDI7NDcxODslKERpc2FibGVTcGVjaWZpY1dhcm5pbmdzKTwvRGlzYWJs
ZVNwZWNpZmljV2FybmluZ3M+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgPC9JdGVtRGVmaW5pdGlv
bkdyb3VwPg0KLSAgPEl0ZW1Hcm91cD4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJCdWlsdElu
RnVuY3Rpb25FbXVsYXRvci5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iQ29kZUdl
bi5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iQ29tcGlsZXIuY3BwIiAvPg0KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9ImRlYnVnLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSJEZXRlY3RDYWxsRGVwdGguY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkRl
dGVjdERpc2NvbnRpbnVpdHkuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkRpYWdu
b3N0aWNzLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJEaXJlY3RpdmVIYW5kbGVy
LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJGb3JMb29wVW5yb2xsLmNwcCIgLz4N
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJJbmZvU2luay5jcHAiIC8+DQotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iSW5pdGlhbGl6ZS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
SW5pdGlhbGl6ZURsbC5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iSW5pdGlhbGl6
ZUdMUG9zaXRpb24uY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkluaXRpYWxpemVQ
YXJzZUNvbnRleHQuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkludGVybWVkaWF0
ZS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iaW50ZXJtT3V0LmNwcCIgLz4NCi0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSJJbnRlcm1UcmF2ZXJzZS5jcHAiIC8+DQotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwIiAvPg0KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Im9zc291cmNlX3dpbi5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iT3V0cHV0RVNTTC5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iT3V0cHV0R0xT
TC5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iT3V0cHV0R0xTTEJhc2UuY3BwIiAv
Pg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ik91dHB1dEhMU0wuY3BwIiAvPg0KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9InBhcnNlQ29uc3QuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9IlBhcnNlQ29udGV4dC5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iUG9vbEFs
bG9jLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJRdWFsaWZpZXJBbGl2ZS5jcHAi
IC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iUmVtb3ZlVHJlZS5jcHAiIC8+DQotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iU2VhcmNoU3ltYm9sLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSJTaGFkZXJMYW5nLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJTeW1i
b2xUYWJsZS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iVHJhbnNsYXRvckVTU0wu
Y3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlRyYW5zbGF0b3JHTFNMLmNwcCIgLz4N
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJUcmFuc2xhdG9ySExTTC5jcHAiIC8+DQotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCIgLz4NCi0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSJVbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwIiAvPg0KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9IlVuaWZvcm0uY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InV0
aWwuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlZhbGlkYXRlTGltaXRhdGlvbnMu
Y3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlZhcmlhYmxlSW5mby5jcHAiIC8+DQot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iVmFyaWFibGVQYWNrZXIuY3BwIiAvPg0KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Imdsc2xhbmdfbGV4LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSJnbHNsYW5nX3RhYi5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iZGVwZ3Jh
cGhcRGVwZW5kZW5jeUdyYXBoLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJkZXBn
cmFwaFxEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSJkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIiAvPg0KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9ImRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCIgLz4NCi0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSJ0aW1pbmdcUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWlu
Zy5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0idGltaW5nXFJlc3RyaWN0VmVydGV4
U2hhZGVyVGltaW5nLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx0aGlyZF9w
YXJ0eVxjb21waWxlclxBcnJheUJvdW5kc0NsYW1wZXIuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9IlZlcnNpb25HTFNMLmNwcCIgLz4NCi0gIDwvSXRlbUdyb3VwPg0KLSAgPEl0ZW1H
cm91cD4NCi0gICAgPEN1c3RvbUJ1aWxkIEluY2x1ZGU9Imdsc2xhbmcubCI+DQotICAgICAgPE1l
c3NhZ2UgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xX
aW4zMiciPg0KLSAgICAgIDwvTWVzc2FnZT4NCi0gICAgICA8Q29tbWFuZCBDb25kaXRpb249Iick
KENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+DQotICAgICAgPC9D
b21tYW5kPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5wdXRzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKEFkZGl0aW9uYWxJbnB1dHMpPC9B
ZGRpdGlvbmFsSW5wdXRzPg0KLSAgICAgIDxPdXRwdXRzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKE91dHB1dHMpPC9PdXRwdXRzPg0K
LSAgICAgIDxNZXNzYWdlIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nRGVidWd8eDY0JyI+DQotICAgICAgPC9NZXNzYWdlPg0KLSAgICAgIDxDb21tYW5kIENvbmRp
dGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+DQotICAg
ICAgPC9Db21tYW5kPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5wdXRzIENvbmRpdGlvbj0iJyQoQ29u
ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JShBZGRpdGlvbmFsSW5wdXRz
KTwvQWRkaXRpb25hbElucHV0cz4NCi0gICAgICA8T3V0cHV0cyBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoT3V0cHV0cyk8L091dHB1dHM+
DQotICAgICAgPE1lc3NhZ2UgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdSZWxlYXNlfFdpbjMyJyI+DQotICAgICAgPC9NZXNzYWdlPg0KLSAgICAgIDxDb21tYW5k
IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4z
MiciPg0KLSAgICAgIDwvQ29tbWFuZD4NCi0gICAgICA8QWRkaXRpb25hbElucHV0cyBDb25kaXRp
b249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKEFk
ZGl0aW9uYWxJbnB1dHMpPC9BZGRpdGlvbmFsSW5wdXRzPg0KLSAgICAgIDxPdXRwdXRzIENvbmRp
dGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUo
T3V0cHV0cyk8L091dHB1dHM+DQotICAgICAgPE1lc3NhZ2UgQ29uZGl0aW9uPSInJChDb25maWd1
cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPg0KLSAgICAgIDwvTWVzc2FnZT4N
Ci0gICAgICA8Q29tbWFuZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p
Jz09J1JlbGVhc2V8eDY0JyI+DQotICAgICAgPC9Db21tYW5kPg0KLSAgICAgIDxBZGRpdGlvbmFs
SW5wdXRzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFz
ZXx4NjQnIj4lKEFkZGl0aW9uYWxJbnB1dHMpPC9BZGRpdGlvbmFsSW5wdXRzPg0KLSAgICAgIDxP
dXRwdXRzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFz
ZXx4NjQnIj4lKE91dHB1dHMpPC9PdXRwdXRzPg0KLSAgICA8L0N1c3RvbUJ1aWxkPg0KLSAgICA8
Q3VzdG9tQnVpbGQgSW5jbHVkZT0iZ2xzbGFuZy55Ij4NCi0gICAgICA8TWVzc2FnZSBDb25kaXRp
b249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+DQotICAg
ICAgPC9NZXNzYWdlPg0KLSAgICAgIDxDb21tYW5kIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlv
bil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4NCi0gICAgICA8L0NvbW1hbmQ+DQotICAg
ICAgPE91dHB1dHMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdE
ZWJ1Z3xXaW4zMiciPiUoT3V0cHV0cyk8L091dHB1dHM+DQotICAgICAgPE1lc3NhZ2UgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4NCi0gICAg
ICA8L01lc3NhZ2U+DQotICAgICAgPENvbW1hbmQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u
KXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4NCi0gICAgICA8L0NvbW1hbmQ+DQotICAgICAg
PE91dHB1dHMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1
Z3x4NjQnIj4lKE91dHB1dHMpPC9PdXRwdXRzPg0KLSAgICAgIDxNZXNzYWdlIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPg0KLSAgICAg
IDwvTWVzc2FnZT4NCi0gICAgICA8Q29tbWFuZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p
fCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4NCi0gICAgICA8L0NvbW1hbmQ+DQotICAg
ICAgPE91dHB1dHMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdS
ZWxlYXNlfFdpbjMyJyI+JShPdXRwdXRzKTwvT3V0cHV0cz4NCi0gICAgICA8TWVzc2FnZSBDb25k
aXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+DQot
ICAgICAgPC9NZXNzYWdlPg0KLSAgICAgIDxDb21tYW5kIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4NCi0gICAgICA8L0NvbW1hbmQ+DQot
ICAgICAgPE91dHB1dHMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdSZWxlYXNlfHg2NCciPiUoT3V0cHV0cyk8L091dHB1dHM+DQotICAgIDwvQ3VzdG9tQnVpbGQ+
DQotICA8L0l0ZW1Hcm91cD4NCi0gIDxJdGVtR3JvdXA+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iQmFzZVR5cGVzLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJDb21tb24uaCIgLz4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJDb25zdGFudFVuaW9uLmgiIC8+DQotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iZGVidWcuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJEZXRl
Y3RDYWxsRGVwdGguaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJEZXRlY3REaXNjb250
aW51aXR5LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iRGlhZ25vc3RpY3MuaCIgLz4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJEaXJlY3RpdmVIYW5kbGVyLmgiIC8+DQotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iRm9yTG9vcFVucm9sbC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ikhhc2hOYW1lcy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkluZm9TaW5r
LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iSW5pdGlhbGl6ZS5oIiAvPg0KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9IkluaXRpYWxpemVEbGwuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSJJbml0aWFsaXplR2xvYmFscy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
IkluaXRpYWxpemVHTFBvc2l0aW9uLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iSW5p
dGlhbGl6ZVBhcnNlQ29udGV4dC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImludGVy
bWVkaWF0ZS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImxvY2FsaW50ZXJtZWRpYXRl
LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCIg
Lz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJNTWFwLmgiIC8+DQotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iTm9kZVNlYXJjaC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Im9zaW5j
bHVkZS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ik91dHB1dEVTU0wuaCIgLz4NCi0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSJPdXRwdXRHTFNMLmgiIC8+DQotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iT3V0cHV0R0xTTEJhc2UuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJP
dXRwdXRITFNMLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iUGFyc2VDb250ZXh0Lmgi
IC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iUG9vbEFsbG9jLmgiIC8+DQotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iUXVhbGlmaWVyQWxpdmUuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSJSZW1vdmVUcmVlLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iUmVuYW1lRnVu
Y3Rpb24uaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXEdMU0xB
TkdcU2hhZGVyTGFuZy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlNlYXJjaFN5bWJv
bC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlNoSGFuZGxlLmgiIC8+DQotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iU3ltYm9sVGFibGUuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSJUcmFuc2xhdG9yRVNTTC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlRyYW5z
bGF0b3JHTFNMLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iVHJhbnNsYXRvckhMU0wu
aCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJUeXBlcy5oIiAvPg0KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9IlVuZm9sZFNob3J0Q2lyY3VpdC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9IlVuZm9sZFNob3J0Q2lyY3VpdEFTVC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9IlVuaWZvcm0uaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJ1dGlsLmgiIC8+DQot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iVmFsaWRhdGVMaW1pdGF0aW9ucy5oIiAvPg0KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9IlZhcmlhYmxlSW5mby5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9IlZhcmlhYmxlUGFja2VyLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iZ2xz
bGFuZ190YWIuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJ0aW1pbmdcUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InRpbWlu
Z1xSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9ImRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9ImRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCIgLz4NCi0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSJkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCIgLz4NCi0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlx0aGlyZF9wYXJ0eVxjb21waWxlclxBcnJheUJvdW5kc0NsYW1w
ZXIuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJWZXJzaW9uR0xTTC5oIiAvPg0KLSAg
PC9JdGVtR3JvdXA+DQotICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9z
b2Z0LkNwcC50YXJnZXRzIiAvPg0KLSAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJn
ZXRzIj4NCi0gIDwvSW1wb3J0R3JvdXA+DQotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yLnZjeHByb2ouZmlsdGVycwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMjI2MzEzN2U2MWZhZTFiODdhZjhmYWUwNTU4NzJkMGFkZmJhM2Q2NC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci52Y3hwcm9qLmZpbHRlcnMKKysrIC9k
ZXYvbnVsbApAQCAtMSwzNjEgKzAsMCBAQAot77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGlu
Zz0idXRmLTgiPz4NCi08UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9z
Y2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+DQotICA8SXRlbUdy
b3VwPg0KLSAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+DQotICAgICAgPFVuaXF1
ZUlkZW50aWZpZXI+ezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn08L1VuaXF1
ZUlkZW50aWZpZXI+DQotICAgICAgPEV4dGVuc2lvbnM+Y3BwO2M7Y2M7Y3h4O2RlZjtvZGw7aWRs
O2hwajtiYXQ7YXNtO2FzbXg8L0V4dGVuc2lvbnM+DQotICAgIDwvRmlsdGVyPg0KLSAgICA8Rmls
dGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlc1xnZW5lcmF0ZWQiPg0KLSAgICAgIDxVbmlxdWVJZGVu
dGlmaWVyPntlYjhkYTE1Ny1iMjljLTQzYzMtODgwZC01NDY3OWUxNzZkYzV9PC9VbmlxdWVJZGVu
dGlmaWVyPg0KLSAgICA8L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmls
ZXNcZGVwZ3JhcGgiPg0KLSAgICAgIDxVbmlxdWVJZGVudGlmaWVyPntiNTQxMGQzYS1jM2M4LTRh
ZTYtODQzYS1iMDAwZDY1MjYzMmV9PC9VbmlxdWVJZGVudGlmaWVyPg0KLSAgICA8L0ZpbHRlcj4N
Ci0gICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXNcdGltaW5nIj4NCi0gICAgICA8VW5p
cXVlSWRlbnRpZmllcj57YTk4NDc2MTEtZGNkNS00Yzg5LTgyNjItYTIyYjk2YzdjOThkfTwvVW5p
cXVlSWRlbnRpZmllcj4NCi0gICAgPC9GaWx0ZXI+DQotICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVh
ZGVyIEZpbGVzIj4NCi0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57OTM5OTUzODAtODlCRC00YjA0
LTg4RUItNjI1RkJFNTJFQkZCfTwvVW5pcXVlSWRlbnRpZmllcj4NCi0gICAgICA8RXh0ZW5zaW9u
cz5oO2hwcDtoeHg7aG07aW5sO2luYzt4c2Q8L0V4dGVuc2lvbnM+DQotICAgIDwvRmlsdGVyPg0K
LSAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlc1xnZW5lcmF0ZWQiPg0KLSAgICAgIDxV
bmlxdWVJZGVudGlmaWVyPnswOTRmNzExNS0zNWQzLTRjNjMtODcwYy1hYjVmMzkzZGMyYzJ9PC9V
bmlxdWVJZGVudGlmaWVyPg0KLSAgICA8L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJbmNsdWRlPSJI
ZWFkZXIgRmlsZXNcdGltaW5nIj4NCi0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57NWY1NzQyZTkt
MTVlMS00M2I0LWIxZTctMGMxMThiZTE0ZTA0fTwvVW5pcXVlSWRlbnRpZmllcj4NCi0gICAgPC9G
aWx0ZXI+DQotICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzXGRlcGdyYXBoIj4NCi0g
ICAgICA8VW5pcXVlSWRlbnRpZmllcj57YzQwMDdlMzUtM2MxMS00NGQ2LTk1ZjctYmI4MWRiNTI4
MDY4fTwvVW5pcXVlSWRlbnRpZmllcj4NCi0gICAgPC9GaWx0ZXI+DQotICA8L0l0ZW1Hcm91cD4N
Ci0gIDxJdGVtR3JvdXA+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3IuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAg
ICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJDb21waWxlci5jcHAiPg0K
LSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImRlYnVnLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3Vy
Y2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iRGV0ZWN0Q2FsbERlcHRoLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8
L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iRGlh
Z25vc3RpY3MuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAg
ICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJEaXJlY3RpdmVIYW5kbGVy
LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENv
bXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iRm9yTG9vcFVucm9sbC5jcHAiPg0KLSAg
ICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9IkluZm9TaW5rLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3Vy
Y2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iSW5pdGlhbGl6ZS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0
ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkluaXRpYWxp
emVEbGwuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8
L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJJbml0aWFsaXplUGFyc2VDb250
ZXh0LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9D
bENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iSW50ZXJtZWRpYXRlLmNwcCI+DQot
ICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iaW50ZXJtT3V0LmNwcCI+DQotICAgICAgPEZpbHRlcj5T
b3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iSW50ZXJtVHJhdmVyc2UuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxl
czwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJN
YXBMb25nVmFyaWFibGVOYW1lcy5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9G
aWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Im9zc291
cmNlX3dpbi5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAg
IDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InBhcnNlQ29uc3QuY3BwIj4N
Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4N
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJQb29sQWxsb2MuY3BwIj4NCi0gICAgICA8RmlsdGVy
PlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSJRdWFsaWZpZXJBbGl2ZS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZp
bGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
IlJlbW92ZVRyZWUuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0K
LSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJTaGFkZXJMYW5nLmNw
cCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBp
bGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iU3ltYm9sVGFibGUuY3BwIj4NCi0gICAgICA8
RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSJ1dGlsLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8
L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iVmFs
aWRhdGVMaW1pdGF0aW9ucy5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0
ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlZhcmlhYmxl
SW5mby5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwv
Q2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlZhcmlhYmxlUGFja2VyLmNwcCI+
DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+
DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iZ2xzbGFuZ19sZXguY3BwIj4NCi0gICAgICA8Rmls
dGVyPlNvdXJjZSBGaWxlc1xnZW5lcmF0ZWQ8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iZ2xzbGFuZ190YWIuY3BwIj4NCi0gICAgICA8RmlsdGVy
PlNvdXJjZSBGaWxlc1xnZW5lcmF0ZWQ8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoLmNwcCI+DQotICAg
ICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcZGVwZ3JhcGg8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBp
bGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoQnVp
bGRlci5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGRlcGdyYXBoPC9GaWx0ZXI+
DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImRlcGdyYXBoXERl
cGVuZGVuY3lHcmFwaE91dHB1dC5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGRl
cGdyYXBoPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9ImRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCI+DQotICAgICAgPEZpbHRl
cj5Tb3VyY2UgRmlsZXNcZGVwZ3JhcGg8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0idGltaW5nXFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcu
Y3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aW1pbmc8L0ZpbHRlcj4NCi0gICAg
PC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0idGltaW5nXFJlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGltaW5n
PC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHRoaXJkX3BhcnR5XGNvbXBpbGVyXEFycmF5Qm91bmRzQ2xhbXBlci5jcHAiPg0KLSAgICAgIDxG
aWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9IkluaXRpYWxpemVHTFBvc2l0aW9uLmNwcCI+DQotICAgICAgPEZpbHRl
cj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iRGV0ZWN0RGlzY29udGludWl0eS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291
cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ik91dHB1dEhMU0wuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmls
dGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJTZWFyY2hT
eW1ib2wuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8
L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJUcmFuc2xhdG9ySExTTC5jcHAi
Pg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxl
Pg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlVuZm9sZFNob3J0Q2lyY3VpdC5jcHAiPg0KLSAg
ICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9IlVuaWZvcm0uY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJj
ZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSJDb2RlR2VuLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4N
Ci0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iVHJhbnNsYXRvckdM
U0wuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0Ns
Q29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJUcmFuc2xhdG9yRVNTTC5jcHAiPg0K
LSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ik91dHB1dEVTU0wuY3BwIj4NCi0gICAgICA8RmlsdGVy
PlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSJPdXRwdXRHTFNMLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8
L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iT3V0
cHV0R0xTTEJhc2UuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0K
LSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJWZXJzaW9uR0xTTC5j
cHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21w
aWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlVuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAi
Pg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxl
Pg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlBhcnNlQ29udGV4dC5jcHAiPg0KLSAgICAgIDxG
aWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgPC9JdGVt
R3JvdXA+DQotICA8SXRlbUdyb3VwPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkJhc2VUeXBl
cy5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5j
bHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5o
Ij4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVk
ZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJDb21tb24uaCI+DQotICAgICAgPEZpbHRlcj5I
ZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iQ29uc3RhbnRVbmlvbi5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwv
RmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJkZWJ1
Zy5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5j
bHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJEZXRlY3RDYWxsRGVwdGguaCI+DQotICAg
ICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iRGlhZ25vc3RpY3MuaCI+DQotICAgICAgPEZpbHRlcj5IZWFk
ZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iRGlyZWN0aXZlSGFuZGxlci5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwv
RmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJGb3JM
b29wVW5yb2xsLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAg
IDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkluZm9TaW5rLmgiPg0KLSAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkluaXRpYWxpemUuaCI+DQotICAgICAgPEZpbHRlcj5IZWFk
ZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iSW5pdGlhbGl6ZURsbC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmls
dGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJJbml0aWFs
aXplR2xvYmFscy5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAg
ICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJJbml0aWFsaXplUGFyc2VD
b250ZXh0LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwv
Q2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImludGVybWVkaWF0ZS5oIj4NCi0g
ICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSJsb2NhbGludGVybWVkaWF0ZS5oIj4NCi0gICAgICA8Rmls
dGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSJNYXBMb25nVmFyaWFibGVOYW1lcy5oIj4NCi0gICAgICA8RmlsdGVyPkhl
YWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSJNTWFwLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQot
ICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Im9zaW5jbHVkZS5oIj4N
Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJQb29sQWxsb2MuaCI+DQotICAgICAgPEZpbHRlcj5I
ZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iUXVhbGlmaWVyQWxpdmUuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8
L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iUmVt
b3ZlVHJlZS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8
L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJSZW5hbWVGdW5jdGlvbi5oIj4N
Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXEdMU0xBTkdcU2hhZGVyTGFu
Zy5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5j
bHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJTaEhhbmRsZS5oIj4NCi0gICAgICA8Rmls
dGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSJTeW1ib2xUYWJsZS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxl
czwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJU
eXBlcy5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0Ns
SW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJ1dGlsLmgiPg0KLSAgICAgIDxGaWx0
ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9IlZhbGlkYXRlTGltaXRhdGlvbnMuaCI+DQotICAgICAgPEZpbHRlcj5IZWFk
ZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iVmFyaWFibGVJbmZvLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0
ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlZhcmlhYmxl
UGFja2VyLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwv
Q2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Imdsc2xhbmdfdGFiLmgiPg0KLSAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXGdlbmVyYXRlZDwvRmlsdGVyPg0KLSAgICA8L0NsSW5j
bHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJ0aW1pbmdcUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZy5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aW1pbmc8L0ZpbHRl
cj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0idGltaW5nXFJl
c3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVz
XHRpbWluZzwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSJkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGguaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIg
RmlsZXNcZGVwZ3JhcGg8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIj4NCi0gICAgICA8
RmlsdGVyPkhlYWRlciBGaWxlc1xkZXBncmFwaDwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGhPdXRwdXQu
aCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcZGVwZ3JhcGg8L0ZpbHRlcj4NCi0gICAg
PC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iSGFzaE5hbWVzLmgiPg0KLSAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkluaXRpYWxpemVHTFBvc2l0aW9uLmgiPg0KLSAgICAgIDxG
aWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHRoaXJkX3BhcnR5XGNvbXBpbGVyXEFycmF5Qm91bmRzQ2xhbXBl
ci5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5j
bHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJEZXRlY3REaXNjb250aW51aXR5LmgiPg0K
LSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ik91dHB1dEhMU0wuaCI+DQotICAgICAgPEZpbHRlcj5I
ZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iU2VhcmNoU3ltYm9sLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9G
aWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlRyYW5z
bGF0b3JITFNMLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAg
IDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlVuZm9sZFNob3J0Q2lyY3Vp
dC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5j
bHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJVbmlmb3JtLmgiPg0KLSAgICAgIDxGaWx0
ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9IlRyYW5zbGF0b3JHTFNMLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZp
bGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
IlRyYW5zbGF0b3JFU1NMLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+
DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ik91dHB1dEVTU0wu
aCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1
ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iT3V0cHV0R0xTTC5oIj4NCi0gICAgICA8Rmls
dGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSJPdXRwdXRHTFNMQmFzZS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBG
aWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSJWZXJzaW9uR0xTTC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0K
LSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJVbmZvbGRTaG9ydENp
cmN1aXRBU1QuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAg
PC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iUGFyc2VDb250ZXh0LmgiPg0K
LSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ik5vZGVTZWFyY2guaCI+DQotICAgICAgPEZpbHRlcj5I
ZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICA8L0l0ZW1Hcm91cD4N
Ci0gIDxJdGVtR3JvdXA+DQotICAgIDxDdXN0b21CdWlsZCBJbmNsdWRlPSJnbHNsYW5nLmwiPg0K
LSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ3VzdG9tQnVpbGQ+
DQotICAgIDxDdXN0b21CdWlsZCBJbmNsdWRlPSJnbHNsYW5nLnkiPg0KLSAgICAgIDxGaWx0ZXI+
U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ3VzdG9tQnVpbGQ+DQotICA8L0l0ZW1Hcm91
cD4NCi08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQmFzZVR5cGVz
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9CYXNl
VHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43YmRhZjE0OTgzOWQwYWY3YmI1NjQ0MGY4NDEzYThkNDIwOTQ1
MGY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvQmFzZVR5cGVzLmgKQEAgLTAsMCArMSwxNDkgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpZm5kZWYgX0JBU0lDVFlQRVNfSU5DTFVERURfCisjZGVmaW5lIF9CQVNJQ1RZ
UEVTX0lOQ0xVREVEXworCisvLworLy8gUHJlY2lzaW9uIHF1YWxpZmllcnMKKy8vCitlbnVtIFRQ
cmVjaXNpb24KK3sKKyAgICAvLyBUaGVzZSBuZWVkIHRvIGJlIGtlcHQgc29ydGVkCisgICAgRWJw
VW5kZWZpbmVkLAorICAgIEVicExvdywKKyAgICBFYnBNZWRpdW0sCisgICAgRWJwSGlnaAorfTsK
KworaW5saW5lIGNvbnN0IGNoYXIqIGdldFByZWNpc2lvblN0cmluZyhUUHJlY2lzaW9uIHApCit7
CisgICAgc3dpdGNoKHApCisgICAgeworICAgIGNhc2UgRWJwSGlnaDoJCXJldHVybiAiaGlnaHAi
OwkJYnJlYWs7CisgICAgY2FzZSBFYnBNZWRpdW06CQlyZXR1cm4gIm1lZGl1bXAiOwlicmVhazsK
KyAgICBjYXNlIEVicExvdzoJCXJldHVybiAibG93cCI7CQlicmVhazsKKyAgICBkZWZhdWx0OgkJ
CXJldHVybiAibWVkaXVtcCI7ICAgYnJlYWs7ICAgLy8gU2FmZXN0IGZhbGxiYWNrCisgICAgfQor
fQorCisvLworLy8gQmFzaWMgdHlwZS4gIEFycmF5cywgdmVjdG9ycywgZXRjLiwgYXJlIG9ydGhv
Z29uYWwgdG8gdGhpcy4KKy8vCitlbnVtIFRCYXNpY1R5cGUKK3sKKyAgICBFYnRWb2lkLAorICAg
IEVidEZsb2F0LAorICAgIEVidEludCwKKyAgICBFYnRCb29sLAorICAgIEVidEd1YXJkU2FtcGxl
ckJlZ2luLCAgLy8gbm9uIHR5cGU6ICBzZWUgaW1wbGVtZW50YXRpb24gb2YgSXNTYW1wbGVyKCkK
KyAgICBFYnRTYW1wbGVyMkQsCisgICAgRWJ0U2FtcGxlckN1YmUsCisgICAgRWJ0U2FtcGxlckV4
dGVybmFsT0VTLCAgLy8gT25seSB2YWxpZCBpZiBPRVNfRUdMX2ltYWdlX2V4dGVybmFsIGV4aXN0
cy4KKyAgICBFYnRTYW1wbGVyMkRSZWN0LCAgICAgICAvLyBPbmx5IHZhbGlkIGlmIEdMX0FSQl90
ZXh0dXJlX3JlY3RhbmdsZSBleGlzdHMuCisgICAgRWJ0R3VhcmRTYW1wbGVyRW5kLCAgICAvLyBu
b24gdHlwZTogIHNlZSBpbXBsZW1lbnRhdGlvbiBvZiBJc1NhbXBsZXIoKQorICAgIEVidFN0cnVj
dCwKKyAgICBFYnRBZGRyZXNzLCAgICAgICAgICAgIC8vIHNob3VsZCBiZSBkZXByZWNhdGVkPz8K
KyAgICBFYnRJbnZhcmlhbnQgICAgICAgICAgLy8gdXNlZCBhcyBhIHR5cGUgd2hlbiBxdWFsaWZ5
aW5nIGEgcHJldmlvdXNseSBkZWNsYXJlZCB2YXJpYWJsZSBhcyBiZWluZyBpbnZhcmlhbnQKK307
CisKK2lubGluZSBjb25zdCBjaGFyKiBnZXRCYXNpY1N0cmluZyhUQmFzaWNUeXBlIHQpCit7Cisg
ICAgc3dpdGNoICh0KQorICAgIHsKKyAgICBjYXNlIEVidFZvaWQ6ICAgICAgICAgICAgICByZXR1
cm4gInZvaWQiOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFYnRGbG9hdDogICAgICAg
ICAgICAgcmV0dXJuICJmbG9hdCI7ICAgICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRWJ0SW50
OiAgICAgICAgICAgICAgIHJldHVybiAiaW50IjsgICAgICAgICAgICAgICBicmVhazsKKyAgICBj
YXNlIEVidEJvb2w6ICAgICAgICAgICAgICByZXR1cm4gImJvb2wiOyAgICAgICAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkQiOyAg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6ICAgICAgIHJldHVybiAic2Ft
cGxlckN1YmUiOyAgICAgICBicmVhazsKKyAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzog
cmV0dXJuICJzYW1wbGVyRXh0ZXJuYWxPRVMiOyBicmVhazsKKyAgICBjYXNlIEVidFNhbXBsZXIy
RFJlY3Q6ICAgICByZXR1cm4gInNhbXBsZXIyRFJlY3QiOyAgICAgYnJlYWs7CisgICAgY2FzZSBF
YnRTdHJ1Y3Q6ICAgICAgICAgICAgcmV0dXJuICJzdHJ1Y3R1cmUiOyAgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgIHJldHVybiAidW5rbm93biB0eXBlIjsKKyAg
ICB9Cit9CisKK2lubGluZSBib29sIElzU2FtcGxlcihUQmFzaWNUeXBlIHR5cGUpCit7CisgICAg
cmV0dXJuIHR5cGUgPiBFYnRHdWFyZFNhbXBsZXJCZWdpbiAmJiB0eXBlIDwgRWJ0R3VhcmRTYW1w
bGVyRW5kOworfQorCisvLworLy8gUXVhbGlmaWVycyBhbmQgYnVpbHQtaW5zLiAgVGhlc2UgYXJl
IG1haW5seSB1c2VkIHRvIHNlZSB3aGF0IGNhbiBiZSByZWFkCisvLyBvciB3cml0dGVuLCBhbmQg
YnkgdGhlIG1hY2hpbmUgZGVwZW5kZW50IHRyYW5zbGF0b3IgdG8ga25vdyB3aGljaCByZWdpc3Rl
cnMKKy8vIHRvIGFsbG9jYXRlIHZhcmlhYmxlcyBpbi4gIFNpbmNlIGJ1aWx0LWlucyB0ZW5kIHRv
IGdvIHRvIGRpZmZlcmVudCByZWdpc3RlcnMKKy8vIHRoYW4gdmFyeWluZyBvciB1bmlmb3JtLCBp
dCBtYWtlcyBzZW5zZSB0aGV5IGFyZSBwZWVycywgbm90IHN1Yi1jbGFzc2VzLgorLy8KK2VudW0g
VFF1YWxpZmllcgoreworICAgIEV2cVRlbXBvcmFyeSwgICAgIC8vIEZvciB0ZW1wb3JhcmllcyAo
d2l0aGluIGEgZnVuY3Rpb24pLCByZWFkL3dyaXRlCisgICAgRXZxR2xvYmFsLCAgICAgICAgLy8g
Rm9yIGdsb2JhbHMgcmVhZC93cml0ZQorICAgIEV2cUludGVybmFsLCAgICAgIC8vIEZvciBpbnRl
cm5hbCB1c2UsIG5vdCB2aXNpYmxlIHRvIHRoZSB1c2VyCisgICAgRXZxQ29uc3QsICAgICAgICAg
Ly8gVXNlciBkZWZpbmVkIGNvbnN0YW50cyBhbmQgbm9uLW91dHB1dCBwYXJhbWV0ZXJzIGluIGZ1
bmN0aW9ucworICAgIEV2cUF0dHJpYnV0ZSwgICAgIC8vIFJlYWRvbmx5CisgICAgRXZxVmFyeWlu
Z0luLCAgICAgLy8gcmVhZG9ubHksIGZyYWdtZW50IHNoYWRlcnMgb25seQorICAgIEV2cVZhcnlp
bmdPdXQsICAgIC8vIHZlcnRleCBzaGFkZXJzIG9ubHkgIHJlYWQvd3JpdGUKKyAgICBFdnFJbnZh
cmlhbnRWYXJ5aW5nSW4sICAgICAvLyByZWFkb25seSwgZnJhZ21lbnQgc2hhZGVycyBvbmx5Cisg
ICAgRXZxSW52YXJpYW50VmFyeWluZ091dCwgICAgLy8gdmVydGV4IHNoYWRlcnMgb25seSAgcmVh
ZC93cml0ZQorICAgIEV2cVVuaWZvcm0sICAgICAgIC8vIFJlYWRvbmx5LCB2ZXJ0ZXggYW5kIGZy
YWdtZW50CisKKyAgICAvLyBwYXJhbWV0ZXJzCisgICAgRXZxSW4sCisgICAgRXZxT3V0LAorICAg
IEV2cUluT3V0LAorICAgIEV2cUNvbnN0UmVhZE9ubHksCisKKyAgICAvLyBidWlsdC1pbnMgd3Jp
dHRlbiBieSB2ZXJ0ZXggc2hhZGVyCisgICAgRXZxUG9zaXRpb24sCisgICAgRXZxUG9pbnRTaXpl
LAorCisgICAgLy8gYnVpbHQtaW5zIHJlYWQgYnkgZnJhZ21lbnQgc2hhZGVyCisgICAgRXZxRnJh
Z0Nvb3JkLAorICAgIEV2cUZyb250RmFjaW5nLAorICAgIEV2cVBvaW50Q29vcmQsCisKKyAgICAv
LyBidWlsdC1pbnMgd3JpdHRlbiBieSBmcmFnbWVudCBzaGFkZXIKKyAgICBFdnFGcmFnQ29sb3Is
CisgICAgRXZxRnJhZ0RhdGEsCisgICAgRXZxRnJhZ0RlcHRoLAorCisgICAgLy8gZW5kIG9mIGxp
c3QKKyAgICBFdnFMYXN0Cit9OworCisvLworLy8gVGhpcyBpcyBqdXN0IGZvciBkZWJ1ZyBwcmlu
dCBvdXQsIGNhcnJpZWQgYWxvbmcgd2l0aCB0aGUgZGVmaW5pdGlvbnMgYWJvdmUuCisvLworaW5s
aW5lIGNvbnN0IGNoYXIqIGdldFF1YWxpZmllclN0cmluZyhUUXVhbGlmaWVyIHEpCit7CisgICAg
c3dpdGNoKHEpCisgICAgeworICAgIGNhc2UgRXZxVGVtcG9yYXJ5OiAgICAgIHJldHVybiAiVGVt
cG9yYXJ5IjsgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUdsb2JhbDogICAgICAgICByZXR1cm4g
Ikdsb2JhbCI7ICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFDb25zdDogICAgICAgICAgcmV0
dXJuICJjb25zdCI7ICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxQ29uc3RSZWFkT25seTog
IHJldHVybiAiY29uc3QiOyAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUF0dHJpYnV0ZTog
ICAgICByZXR1cm4gImF0dHJpYnV0ZSI7ICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFWYXJ5aW5n
SW46ICAgICAgcmV0dXJuICJ2YXJ5aW5nIjsgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxVmFy
eWluZ091dDogICAgIHJldHVybiAidmFyeWluZyI7ICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2
cUludmFyaWFudFZhcnlpbmdJbjogcmV0dXJuICJpbnZhcmlhbnQgdmFyeWluZyI7CWJyZWFrOwor
ICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWluZ091dDpyZXR1cm4gImludmFyaWFudCB2YXJ5aW5n
IjsJYnJlYWs7CisgICAgY2FzZSBFdnFVbmlmb3JtOiAgICAgICAgcmV0dXJuICJ1bmlmb3JtIjsg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxSW46ICAgICAgICAgICAgIHJldHVybiAiaW4iOyAg
ICAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cU91dDogICAgICAgICAgICByZXR1cm4gIm91
dCI7ICAgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFJbk91dDogICAgICAgICAgcmV0dXJu
ICJpbm91dCI7ICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxUG9zaXRpb246ICAgICAgIHJl
dHVybiAiUG9zaXRpb24iOyAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cVBvaW50U2l6ZTogICAg
ICByZXR1cm4gIlBvaW50U2l6ZSI7ICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFGcmFnQ29vcmQ6
ICAgICAgcmV0dXJuICJGcmFnQ29vcmQiOyAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxRnJvbnRG
YWNpbmc6ICAgIHJldHVybiAiRnJvbnRGYWNpbmciOyAgICBicmVhazsKKyAgICBjYXNlIEV2cUZy
YWdDb2xvcjogICAgICByZXR1cm4gIkZyYWdDb2xvciI7ICAgICAgYnJlYWs7CisgICAgY2FzZSBF
dnFGcmFnRGF0YTogICAgICAgcmV0dXJuICJGcmFnRGF0YSI7ICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBFdnFGcmFnRGVwdGg6ICAgICAgcmV0dXJuICJGcmFnRGVwdGgiOyAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDogICAgICAgICAgICAgICAgcmV0dXJuICJ1bmtub3duIHF1YWxpZmllciI7CisgICAg
fQorfQorCisjZW5kaWYgLy8gX0JBU0lDVFlQRVNfSU5DTFVERURfCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9CdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTJiNzFjNmJk
YjE3MzdjMDEyYjY5NmQ1ZmQ5MGVmMDM3Mjc1Y2NlZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0J1aWx0SW5GdW5jdGlv
bkVtdWxhdG9yLmNwcApAQCAtMCwwICsxLDQwNiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCIKKwor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuaCIKKworbmFtZXNwYWNl
IHsKKworLy8gd2UgdXNlIG1hY3JvcyBoZXJlIGluc3RlYWQgb2YgZnVuY3Rpb24gZGVmaW5pdGlv
bnMgdG8gd29yayBhcm91bmQgbW9yZSBHTFNMCisvLyBjb21waWxlciBidWdzLCBpbiBwYXJ0aWN1
bGFyIG9uIE5WSURJQSBoYXJkd2FyZSBvbiBNYWMgT1NYLiBNYWNyb3MgYXJlCisvLyBwcm9ibGVt
YXRpYyBiZWNhdXNlIGlmIHRoZSBhcmd1bWVudCBoYXMgc2lkZS1lZmZlY3RzIHRoZXkgd2lsbCBi
ZSByZXBlYXRlZGx5CisvLyBldmFsdWF0ZWQuIFRoaXMgaXMgdW5saWtlbHkgdG8gc2hvdyB1cCBp
biByZWFsIHNoYWRlcnMsIGJ1dCBpcyBzb21ldGhpbmcgdG8KKy8vIGNvbnNpZGVyLgorY29uc3Qg
Y2hhcioga0Z1bmN0aW9uRW11bGF0aW9uVmVydGV4U291cmNlW10gPSB7CisgICAgIiNlcnJvciBu
byBlbXVsYXRpb24gZm9yIGNvcyhmbG9hdCkiLAorICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZv
ciBjb3ModmVjMikiLAorICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBjb3ModmVjMykiLAor
ICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBjb3ModmVjNCkiLAorCisgICAgIiNkZWZpbmUg
d2ViZ2xfZGlzdGFuY2VfZW11KHgsIHkpICgoeCkgPj0gKHkpID8gKHgpIC0gKHkpIDogKHkpIC0g
KHgpKSIsCisgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRpc3RhbmNlKHZlYzIsIHZlYzIp
IiwKKyAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UodmVjMywgdmVjMykiLAor
ICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkaXN0YW5jZSh2ZWM0LCB2ZWM0KSIsCisKKyAg
ICAiI2RlZmluZSB3ZWJnbF9kb3RfZW11KHgsIHkpICgoeCkgKiAoeSkpIiwKKyAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgZG90KHZlYzIsIHZlYzIpIiwKKyAgICAiI2Vycm9yIG5vIGVtdWxh
dGlvbiBmb3IgZG90KHZlYzMsIHZlYzMpIiwKKyAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Ig
ZG90KHZlYzQsIHZlYzQpIiwKKworICAgICIjZGVmaW5lIHdlYmdsX2xlbmd0aF9lbXUoeCkgKCh4
KSA+PSAwLjAgPyAoeCkgOiAtKHgpKSIsCisgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxl
bmd0aCh2ZWMyKSIsCisgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2ZWMzKSIs
CisgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2ZWM0KSIsCisKKyAgICAiI2Rl
ZmluZSB3ZWJnbF9ub3JtYWxpemVfZW11KHgpICgoeCkgPT0gMC4wID8gMC4wIDogKCh4KSA+IDAu
MCA/IDEuMCA6IC0xLjApKSIsCisgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6
ZSh2ZWMyKSIsCisgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2ZWMzKSIs
CisgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2ZWM0KSIsCisKKyAgICAi
I2RlZmluZSB3ZWJnbF9yZWZsZWN0X2VtdShJLCBOKSAoKEkpIC0gMi4wICogKE4pICogKEkpICog
KE4pKSIsCisgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIHJlZmxlY3QodmVjMiwgdmVjMiki
LAorICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciByZWZsZWN0KHZlYzMsIHZlYzMpIiwKKyAg
ICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgcmVmbGVjdCh2ZWM0LCB2ZWM0KSIKK307CisKK2Nv
bnN0IGNoYXIqIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50U291cmNlW10gPSB7CisgICAgIndl
YmdsX2VtdV9wcmVjaXNpb24gZmxvYXQgd2ViZ2xfY29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9u
IGZsb2F0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCisgICAgIndlYmdsX2VtdV9wcmVjaXNpb24g
dmVjMiB3ZWJnbF9jb3NfZW11KHdlYmdsX2VtdV9wcmVjaXNpb24gdmVjMiBhKSB7IHJldHVybiBj
b3MoYSk7IH0iLAorICAgICJ3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzMgd2ViZ2xfY29zX2VtdSh3
ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzMgYSkgeyByZXR1cm4gY29zKGEpOyB9IiwKKyAgICAid2Vi
Z2xfZW11X3ByZWNpc2lvbiB2ZWM0IHdlYmdsX2Nvc19lbXUod2ViZ2xfZW11X3ByZWNpc2lvbiB2
ZWM0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCisKKyAgICAiI2RlZmluZSB3ZWJnbF9kaXN0YW5j
ZV9lbXUoeCwgeSkgKCh4KSA+PSAoeSkgPyAoeCkgLSAoeSkgOiAoeSkgLSAoeCkpIiwKKyAgICAi
I2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UodmVjMiwgdmVjMikiLAorICAgICIjZXJy
b3Igbm8gZW11bGF0aW9uIGZvciBkaXN0YW5jZSh2ZWMzLCB2ZWMzKSIsCisgICAgIiNlcnJvciBu
byBlbXVsYXRpb24gZm9yIGRpc3RhbmNlKHZlYzQsIHZlYzQpIiwKKworICAgICIjZGVmaW5lIHdl
YmdsX2RvdF9lbXUoeCwgeSkgKCh4KSAqICh5KSkiLAorICAgICIjZXJyb3Igbm8gZW11bGF0aW9u
IGZvciBkb3QodmVjMiwgdmVjMikiLAorICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3Qo
dmVjMywgdmVjMykiLAorICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjNCwgdmVj
NCkiLAorCisgICAgIiNkZWZpbmUgd2ViZ2xfbGVuZ3RoX2VtdSh4KSAoKHgpID49IDAuMCA/ICh4
KSA6IC0oeCkpIiwKKyAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3RoKHZlYzIpIiwK
KyAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3RoKHZlYzMpIiwKKyAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3RoKHZlYzQpIiwKKworICAgICIjZGVmaW5lIHdlYmdsX25v
cm1hbGl6ZV9lbXUoeCkgKCh4KSA9PSAwLjAgPyAwLjAgOiAoKHgpID4gMC4wID8gMS4wIDogLTEu
MCkpIiwKKyAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzIpIiwKKyAg
ICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzMpIiwKKyAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzQpIiwKKworICAgICIjZGVmaW5lIHdlYmds
X3JlZmxlY3RfZW11KEksIE4pICgoSSkgLSAyLjAgKiAoTikgKiAoSSkgKiAoTikpIiwKKyAgICAi
I2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgcmVmbGVjdCh2ZWMyLCB2ZWMyKSIsCisgICAgIiNlcnJv
ciBubyBlbXVsYXRpb24gZm9yIHJlZmxlY3QodmVjMywgdmVjMykiLAorICAgICIjZXJyb3Igbm8g
ZW11bGF0aW9uIGZvciByZWZsZWN0KHZlYzQsIHZlYzQpIgorfTsKKworY29uc3QgYm9vbCBrRnVu
Y3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7CisjaWYgZGVmaW5lZChfX0FQUExFX18pCisg
ICAgLy8gV29yayBhcm91bmQgQVRJIGRyaXZlciBidWdzIGluIE1hYy4KKyAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uQ29zMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MyCisgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkNvczMKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zNAorICAgIHRydWUsICAv
LyBURnVuY3Rpb25EaXN0YW5jZTFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTJf
MgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTNfMworICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25EaXN0YW5jZTRfNAorICAgIHRydWUsICAvLyBURnVuY3Rpb25Eb3QxXzEKKyAgICBmYWxz
ZSwgLy8gVEZ1bmN0aW9uRG90Ml8yCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDNfMworICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25Eb3Q0XzQKKyAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uTGVuZ3Ro
MQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgyCisgICAgZmFsc2UsIC8vIFRGdW5jdGlv
bkxlbmd0aDMKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoNAorICAgIHRydWUsICAvLyBU
RnVuY3Rpb25Ob3JtYWxpemUxCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTIKKyAg
ICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25O
b3JtYWxpemU0CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvblJlZmxlY3QxXzEKKyAgICBmYWxzZSwg
Ly8gVEZ1bmN0aW9uUmVmbGVjdDJfMgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0M18z
CisgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3Q0XzQKKyNlbHNlCisgICAgLy8gV29yayBh
cm91bmQgRDNEIGRyaXZlciBidWcgaW4gV2luLgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3Mx
CisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29z
MworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3M0CisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRp
c3RhbmNlMV8xCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlMl8yCisgICAgZmFsc2Us
IC8vIFRGdW5jdGlvbkRpc3RhbmNlM18zCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNl
NF80CisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rp
b25Eb3QyXzIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90M18zCisgICAgZmFsc2UsIC8vIFRG
dW5jdGlvbkRvdDRfNAorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgxCisgICAgZmFsc2Us
IC8vIFRGdW5jdGlvbkxlbmd0aDIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMworICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0CisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1h
bGl6ZTEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMgorICAgIGZhbHNlLCAvLyBU
RnVuY3Rpb25Ob3JtYWxpemUzCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTQKKyAg
ICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25S
ZWZsZWN0Ml8yCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QzXzMKKyAgICBmYWxzZSwg
Ly8gVEZ1bmN0aW9uUmVmbGVjdDRfNAorI2VuZGlmCisgICAgZmFsc2UgIC8vIFRGdW5jdGlvblVu
a25vd24KK307CisKK2NvbnN0IGJvb2wga0Z1bmN0aW9uRW11bGF0aW9uRnJhZ21lbnRNYXNrW10g
PSB7CisjaWYgZGVmaW5lZChfX0FQUExFX18pCisgICAgLy8gV29yayBhcm91bmQgQVRJIGRyaXZl
ciBidWdzIGluIE1hYy4KKyAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uQ29zMQorICAgIHRydWUsICAv
LyBURnVuY3Rpb25Db3MyCisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczMKKyAgICB0cnVlLCAg
Ly8gVEZ1bmN0aW9uQ29zNAorICAgIHRydWUsICAvLyBURnVuY3Rpb25EaXN0YW5jZTFfMQorICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTJfMgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25E
aXN0YW5jZTNfMworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTRfNAorICAgIHRydWUs
ICAvLyBURnVuY3Rpb25Eb3QxXzEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90Ml8yCisgICAg
ZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDNfMworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3Q0XzQK
KyAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uTGVuZ3RoMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25M
ZW5ndGgyCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDMKKyAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uTGVuZ3RoNAorICAgIHRydWUsICAvLyBURnVuY3Rpb25Ob3JtYWxpemUxCisgICAgZmFs
c2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFs
aXplMworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemU0CisgICAgdHJ1ZSwgIC8vIFRG
dW5jdGlvblJlZmxlY3QxXzEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDJfMgorICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0M18zCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJl
ZmxlY3Q0XzQKKyNlbHNlCisgICAgLy8gV29yayBhcm91bmQgRDNEIGRyaXZlciBidWcgaW4gV2lu
LgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MxCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNv
czIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25D
b3M0CisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlMV8xCisgICAgZmFsc2UsIC8vIFRG
dW5jdGlvbkRpc3RhbmNlMl8yCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlM18zCisg
ICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlNF80CisgICAgZmFsc2UsIC8vIFRGdW5jdGlv
bkRvdDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3QyXzIKKyAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uRG90M18zCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDRfNAorICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25MZW5ndGgxCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKKyAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0
CisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uTm9ybWFsaXplMgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUzCisgICAgZmFs
c2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTQKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVj
dDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0Ml8yCisgICAgZmFsc2UsIC8vIFRG
dW5jdGlvblJlZmxlY3QzXzMKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDRfNAorI2Vu
ZGlmCisgICAgZmFsc2UgIC8vIFRGdW5jdGlvblVua25vd24KK307CisKK2NsYXNzIEJ1aWx0SW5G
dW5jdGlvbkVtdWxhdGlvbk1hcmtlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKK3B1Ymxp
YzoKKyAgICBCdWlsdEluRnVuY3Rpb25FbXVsYXRpb25NYXJrZXIoQnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3ImIGVtdWxhdG9yKQorICAgICAgICA6IG1FbXVsYXRvcihlbXVsYXRvcikKKyAgICB7Cisg
ICAgfQorCisgICAgdmlydHVhbCBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1V
bmFyeSogbm9kZSkKKyAgICB7CisgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkgeworICAg
ICAgICAgICAgYm9vbCBuZWVkVG9FbXVsYXRlID0gbUVtdWxhdG9yLlNldEZ1bmN0aW9uQ2FsbGVk
KAorICAgICAgICAgICAgICAgIG5vZGUtPmdldE9wKCksIG5vZGUtPmdldE9wZXJhbmQoKS0+Z2V0
VHlwZSgpKTsKKyAgICAgICAgICAgIGlmIChuZWVkVG9FbXVsYXRlKQorICAgICAgICAgICAgICAg
IG5vZGUtPnNldFVzZUVtdWxhdGVkRnVuY3Rpb24oKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQg
dmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCisgICAgeworICAgICAgICBpZiAodmlzaXQg
PT0gUHJlVmlzaXQpIHsKKyAgICAgICAgICAgIC8vIEhlcmUgd2UgaGFuZGxlIGFsbCB0aGUgYnVp
bHQtaW4gZnVuY3Rpb25zIGluc3RlYWQgb2YgdGhlIG9uZXMgd2UKKyAgICAgICAgICAgIC8vIGN1
cnJlbnRseSBpZGVudGlmaWVkIGFzIHByb2JsZW1hdGljLgorICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5nZXRPcCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjoKKyAgICAg
ICAgICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgorICAgICAgICAgICAgICAgIGNhc2UgRU9w
TGVzc1RoYW5FcXVhbDoKKyAgICAgICAgICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6
CisgICAgICAgICAgICAgICAgY2FzZSBFT3BWZWN0b3JFcXVhbDoKKyAgICAgICAgICAgICAgICBj
YXNlIEVPcFZlY3Rvck5vdEVxdWFsOgorICAgICAgICAgICAgICAgIGNhc2UgRU9wTW9kOgorICAg
ICAgICAgICAgICAgIGNhc2UgRU9wUG93OgorICAgICAgICAgICAgICAgIGNhc2UgRU9wQXRhbjoK
KyAgICAgICAgICAgICAgICBjYXNlIEVPcE1pbjoKKyAgICAgICAgICAgICAgICBjYXNlIEVPcE1h
eDoKKyAgICAgICAgICAgICAgICBjYXNlIEVPcENsYW1wOgorICAgICAgICAgICAgICAgIGNhc2Ug
RU9wTWl4OgorICAgICAgICAgICAgICAgIGNhc2UgRU9wU3RlcDoKKyAgICAgICAgICAgICAgICBj
YXNlIEVPcFNtb290aFN0ZXA6CisgICAgICAgICAgICAgICAgY2FzZSBFT3BEaXN0YW5jZToKKyAg
ICAgICAgICAgICAgICBjYXNlIEVPcERvdDoKKyAgICAgICAgICAgICAgICBjYXNlIEVPcENyb3Nz
OgorICAgICAgICAgICAgICAgIGNhc2UgRU9wRmFjZUZvcndhcmQ6CisgICAgICAgICAgICAgICAg
Y2FzZSBFT3BSZWZsZWN0OgorICAgICAgICAgICAgICAgIGNhc2UgRU9wUmVmcmFjdDoKKyAgICAg
ICAgICAgICAgICBjYXNlIEVPcE11bDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICB9OworICAgICAgICAgICAgY29uc3QgVEludGVybVNlcXVlbmNlJiBzZXF1ZW5j
ZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAgICAvLyBSaWdodCBub3cgd2Ugb25s
eSBoYW5kbGUgYnVpbHQtaW4gZnVuY3Rpb25zIHdpdGggdHdvIHBhcmFtZXRlcnMuCisgICAgICAg
ICAgICBpZiAoc2VxdWVuY2Uuc2l6ZSgpICE9IDIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIHBhcmFtMSA9IHNlcXVlbmNlWzBdLT5nZXRB
c1R5cGVkKCk7CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIHBhcmFtMiA9IHNlcXVlbmNlWzFd
LT5nZXRBc1R5cGVkKCk7CisgICAgICAgICAgICBpZiAoIXBhcmFtMSB8fCAhcGFyYW0yKQorICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgYm9vbCBuZWVkVG9FbXVsYXRl
ID0gbUVtdWxhdG9yLlNldEZ1bmN0aW9uQ2FsbGVkKAorICAgICAgICAgICAgICAgIG5vZGUtPmdl
dE9wKCksIHBhcmFtMS0+Z2V0VHlwZSgpLCBwYXJhbTItPmdldFR5cGUoKSk7CisgICAgICAgICAg
ICBpZiAobmVlZFRvRW11bGF0ZSkKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRVc2VFbXVsYXRl
ZEZ1bmN0aW9uKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitw
cml2YXRlOgorICAgIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yJiBtRW11bGF0b3I7Cit9OworCit9
ICAvLyBhbm9ueW1vdXMgbmFtZXBzYWNlCisKK0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpCdWls
dEluRnVuY3Rpb25FbXVsYXRvcihTaFNoYWRlclR5cGUgc2hhZGVyVHlwZSkKK3sKKyAgICBpZiAo
c2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpIHsKKyAgICAgICAgbUZ1bmN0aW9uTWFz
ayA9IGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50TWFzazsKKyAgICAgICAgbUZ1bmN0aW9uU291
cmNlID0ga0Z1bmN0aW9uRW11bGF0aW9uRnJhZ21lbnRTb3VyY2U7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgbUZ1bmN0aW9uTWFzayA9IGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2s7CisgICAg
ICAgIG1GdW5jdGlvblNvdXJjZSA9IGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleFNvdXJjZTsKKyAg
ICB9Cit9CisKK2Jvb2wgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OlNldEZ1bmN0aW9uQ2FsbGVk
KAorICAgIFRPcGVyYXRvciBvcCwgY29uc3QgVFR5cGUmIHBhcmFtKQoreworICAgIFRCdWlsdElu
RnVuY3Rpb24gZnVuY3Rpb24gPSBJZGVudGlmeUZ1bmN0aW9uKG9wLCBwYXJhbSk7CisgICAgcmV0
dXJuIFNldEZ1bmN0aW9uQ2FsbGVkKGZ1bmN0aW9uKTsKK30KKworYm9vbCBCdWlsdEluRnVuY3Rp
b25FbXVsYXRvcjo6U2V0RnVuY3Rpb25DYWxsZWQoCisgICAgVE9wZXJhdG9yIG9wLCBjb25zdCBU
VHlwZSYgcGFyYW0xLCBjb25zdCBUVHlwZSYgcGFyYW0yKQoreworICAgIFRCdWlsdEluRnVuY3Rp
b24gZnVuY3Rpb24gPSBJZGVudGlmeUZ1bmN0aW9uKG9wLCBwYXJhbTEsIHBhcmFtMik7CisgICAg
cmV0dXJuIFNldEZ1bmN0aW9uQ2FsbGVkKGZ1bmN0aW9uKTsKK30KKworYm9vbCBCdWlsdEluRnVu
Y3Rpb25FbXVsYXRvcjo6U2V0RnVuY3Rpb25DYWxsZWQoCisgICAgQnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3I6OlRCdWlsdEluRnVuY3Rpb24gZnVuY3Rpb24pIHsKKyAgICBpZiAoZnVuY3Rpb24gPT0g
VEZ1bmN0aW9uVW5rbm93biB8fCBtRnVuY3Rpb25NYXNrW2Z1bmN0aW9uXSA9PSBmYWxzZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUZ1bmN0aW9u
cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobUZ1bmN0aW9uc1tpXSA9PSBmdW5jdGlvbikK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBtRnVuY3Rpb25zLnB1c2hfYmFj
ayhmdW5jdGlvbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3I6Ok91dHB1dEVtdWxhdGVkRnVuY3Rpb25EZWZpbml0aW9uKAorICAgIFRJbmZvU2lu
a0Jhc2UmIG91dCwgYm9vbCB3aXRoUHJlY2lzaW9uKSBjb25zdAoreworICAgIGlmIChtRnVuY3Rp
b25zLnNpemUoKSA9PSAwKQorICAgICAgICByZXR1cm47CisgICAgb3V0IDw8ICIvLyBCRUdJTjog
R2VuZXJhdGVkIGNvZGUgZm9yIGJ1aWx0LWluIGZ1bmN0aW9uIGVtdWxhdGlvblxuXG4iOworICAg
IGlmICh3aXRoUHJlY2lzaW9uKSB7CisgICAgICAgIG91dCA8PCAiI2lmIGRlZmluZWQoR0xfRlJB
R01FTlRfUFJFQ0lTSU9OX0hJR0gpXG4iCisgICAgICAgICAgICA8PCAiI2RlZmluZSB3ZWJnbF9l
bXVfcHJlY2lzaW9uIGhpZ2hwXG4iCisgICAgICAgICAgICA8PCAiI2Vsc2VcbiIKKyAgICAgICAg
ICAgIDw8ICIjZGVmaW5lIHdlYmdsX2VtdV9wcmVjaXNpb24gbWVkaXVtcFxuIgorICAgICAgICAg
ICAgPDwgIiNlbmRpZlxuXG4iOworICAgIH0gZWxzZSB7CisgICAgICAgIG91dCA8PCAiI2RlZmlu
ZSB3ZWJnbF9lbXVfcHJlY2lzaW9uXG5cbiI7CisgICAgfQorICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbUZ1bmN0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBvdXQgPDwgbUZ1bmN0aW9u
U291cmNlW21GdW5jdGlvbnNbaV1dIDw8ICJcblxuIjsKKyAgICB9CisgICAgb3V0IDw8ICIvLyBF
TkQ6IEdlbmVyYXRlZCBjb2RlIGZvciBidWlsdC1pbiBmdW5jdGlvbiBlbXVsYXRpb25cblxuIjsK
K30KKworQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OlRCdWlsdEluRnVuY3Rpb24KK0J1aWx0SW5G
dW5jdGlvbkVtdWxhdG9yOjpJZGVudGlmeUZ1bmN0aW9uKAorICAgIFRPcGVyYXRvciBvcCwgY29u
c3QgVFR5cGUmIHBhcmFtKQoreworICAgIGlmIChwYXJhbS5nZXROb21pbmFsU2l6ZSgpID4gNCkK
KyAgICAgICAgcmV0dXJuIFRGdW5jdGlvblVua25vd247CisgICAgdW5zaWduZWQgaW50IGZ1bmN0
aW9uID0gVEZ1bmN0aW9uVW5rbm93bjsKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2Ug
RU9wQ29zOgorICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25Db3MxOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTGVuZ3RoOgorICAgICAgICAgICAgZnVuY3Rpb24g
PSBURnVuY3Rpb25MZW5ndGgxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
Tm9ybWFsaXplOgorICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25Ob3JtYWxpemUxOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsK
KyAgICB9CisgICAgaWYgKGZ1bmN0aW9uID09IFRGdW5jdGlvblVua25vd24pCisgICAgICAgIHJl
dHVybiBURnVuY3Rpb25Vbmtub3duOworICAgIGlmIChwYXJhbS5pc1ZlY3RvcigpKQorICAgICAg
ICBmdW5jdGlvbiArPSBwYXJhbS5nZXROb21pbmFsU2l6ZSgpIC0gMTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8VEJ1aWx0SW5GdW5jdGlvbj4oZnVuY3Rpb24pOworfQorCitCdWlsdEluRnVuY3Rp
b25FbXVsYXRvcjo6VEJ1aWx0SW5GdW5jdGlvbgorQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6Oklk
ZW50aWZ5RnVuY3Rpb24oCisgICAgVE9wZXJhdG9yIG9wLCBjb25zdCBUVHlwZSYgcGFyYW0xLCBj
b25zdCBUVHlwZSYgcGFyYW0yKQoreworICAgIC8vIFJpZ2h0IG5vdyBmb3IgYWxsIHRoZSBlbXVs
YXRlZCBmdW5jdGlvbnMgd2l0aCB0d28gcGFyYW1ldGVycywgdGhlIHR3bworICAgIC8vIHBhcmFt
ZXRlcnMgaGF2ZSB0aGUgc2FtZSB0eXBlLgorICAgIGlmIChwYXJhbTEuaXNWZWN0b3IoKSAhPSBw
YXJhbTIuaXNWZWN0b3IoKSB8fAorICAgICAgICBwYXJhbTEuZ2V0Tm9taW5hbFNpemUoKSAhPSBw
YXJhbTIuZ2V0Tm9taW5hbFNpemUoKSB8fAorICAgICAgICBwYXJhbTEuZ2V0Tm9taW5hbFNpemUo
KSA+IDQpCisgICAgICAgIHJldHVybiBURnVuY3Rpb25Vbmtub3duOworCisgICAgdW5zaWduZWQg
aW50IGZ1bmN0aW9uID0gVEZ1bmN0aW9uVW5rbm93bjsKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAg
ICAgIGNhc2UgRU9wRGlzdGFuY2U6CisgICAgICAgICAgICBmdW5jdGlvbiA9IFRGdW5jdGlvbkRp
c3RhbmNlMV8xOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRG90OgorICAg
ICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25Eb3QxXzE7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BSZWZsZWN0OgorICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rp
b25SZWZsZWN0MV8xOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKGZ1bmN0aW9uID09IFRGdW5jdGlvblVua25v
d24pCisgICAgICAgIHJldHVybiBURnVuY3Rpb25Vbmtub3duOworICAgIGlmIChwYXJhbTEuaXNW
ZWN0b3IoKSkKKyAgICAgICAgZnVuY3Rpb24gKz0gcGFyYW0xLmdldE5vbWluYWxTaXplKCkgLSAx
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUQnVpbHRJbkZ1bmN0aW9uPihmdW5jdGlvbik7Cit9
CisKK3ZvaWQgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6Ok1hcmtCdWlsdEluRnVuY3Rpb25zRm9y
RW11bGF0aW9uKAorICAgIFRJbnRlcm1Ob2RlKiByb290KQoreworICAgIEFTU0VSVChyb290KTsK
KworICAgIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdGlvbk1hcmtlciBtYXJrZXIoKnRoaXMpOworICAg
IHJvb3QtPnRyYXZlcnNlKCZtYXJrZXIpOworfQorCit2b2lkIEJ1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yOjpDbGVhbnVwKCkKK3sKKyAgICBtRnVuY3Rpb25zLmNsZWFyKCk7Cit9CisKKy8vc3RhdGlj
CitUU3RyaW5nIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpHZXRFbXVsYXRlZEZ1bmN0aW9uTmFt
ZSgKKyAgICBjb25zdCBUU3RyaW5nJiBuYW1lKQoreworICAgIEFTU0VSVChuYW1lW25hbWUubGVu
Z3RoKCkgLSAxXSA9PSAnKCcpOworICAgIHJldHVybiAid2ViZ2xfIiArIG5hbWUuc3Vic3RyKDAs
IG5hbWUubGVuZ3RoKCkgLSAxKSArICJfZW11KCI7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0J1aWx0SW5GdW5jdGlvbkVt
dWxhdG9yLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNmYjcxYTgwM2FjYzdkMjgz
NGJmNDBmNDlmZDlmOGFiYjI0NjlkMzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9CdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5oCkBAIC0wLDAgKzEsOTMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTElFUl9C
VUlMVF9JTl9GVU5DVElPTl9FTVVMQVRPUl9IXworI2RlZmluZSBDT01QSUxJRVJfQlVJTFRfSU5f
RlVOQ1RJT05fRU1VTEFUT1JfSF8KKworI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgor
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisKKy8vCisvLyBUaGlzIGNsYXNzIGRl
Y2lkZXMgd2hpY2ggYnVpbHQtaW4gZnVuY3Rpb25zIG5lZWQgdG8gYmUgcmVwbGFjZWQgd2l0aCB0
aGUKKy8vIGVtdWxhdGVkIG9uZXMuCisvLyBJdCdzIG9ubHkgYSB3b3JrYXJvdW5kIGZvciBPcGVu
R0wgZHJpdmVyIGJ1Z3MsIGFuZCBpc24ndCBuZWVkZWQgaW4gZ2VuZXJhbC4KKy8vCitjbGFzcyBC
dWlsdEluRnVuY3Rpb25FbXVsYXRvciB7CitwdWJsaWM6CisgICAgQnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3IoU2hTaGFkZXJUeXBlIHNoYWRlclR5cGUpOworICAgIC8vIFJlY29yZHMgdGhhdCBhIGZ1
bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgc2hhZGVyIGFuZCBtaWdodCBuZWVkcyB0byBiZQorICAg
IC8vIGVtdWxhdGVkLiAgSWYgdGhlIGZ1bmN0aW9uJ3MgZ3JvdXAgaXMgbm90IGluIG1GdW5jdGlv
bkdyb3VwRmlsdGVyLCB0aGlzCisgICAgLy8gYmVjb21lcyBhbiBuby1vcC4KKyAgICAvLyBSZXR1
cm5zIHRydWUgaWYgdGhlIGZ1bmN0aW9uIGNhbGwgbmVlZHMgdG8gYmUgcmVwbGFjZWQgd2l0aCBh
biBlbXVsYXRlZAorICAgIC8vIG9uZS4KKyAgICBib29sIFNldEZ1bmN0aW9uQ2FsbGVkKFRPcGVy
YXRvciBvcCwgY29uc3QgVFR5cGUmIHBhcmFtKTsKKyAgICBib29sIFNldEZ1bmN0aW9uQ2FsbGVk
KAorICAgICAgICBUT3BlcmF0b3Igb3AsIGNvbnN0IFRUeXBlJiBwYXJhbTEsIGNvbnN0IFRUeXBl
JiBwYXJhbTIpOworCisgICAgLy8gT3V0cHV0IGZ1bmN0aW9uIGVtdWxhdGlvbiBkZWZpbml0aW9u
LiAgVGhpcyBzaG91bGQgYmUgYmVmb3JlIGFueSBvdGhlcgorICAgIC8vIHNoYWRlciBzb3VyY2Uu
CisgICAgdm9pZCBPdXRwdXRFbXVsYXRlZEZ1bmN0aW9uRGVmaW5pdGlvbihUSW5mb1NpbmtCYXNl
JiBvdXQsIGJvb2wgd2l0aFByZWNpc2lvbikgY29uc3Q7CisKKyAgICB2b2lkIE1hcmtCdWlsdElu
RnVuY3Rpb25zRm9yRW11bGF0aW9uKFRJbnRlcm1Ob2RlKiByb290KTsKKworICAgIHZvaWQgQ2xl
YW51cCgpOworCisgICAgLy8gIm5hbWUoIiBiZWNvbWVzICJ3ZWJnbF9uYW1lX2VtdSgiLgorICAg
IHN0YXRpYyBUU3RyaW5nIEdldEVtdWxhdGVkRnVuY3Rpb25OYW1lKGNvbnN0IFRTdHJpbmcmIG5h
bWUpOworCitwcml2YXRlOgorICAgIC8vCisgICAgLy8gQnVpbHQtaW4gZnVuY3Rpb25zLgorICAg
IC8vCisgICAgZW51bSBUQnVpbHRJbkZ1bmN0aW9uIHsKKyAgICAgICAgVEZ1bmN0aW9uQ29zMSA9
IDAsICAvLyBmbG9hdCBjb3MoZmxvYXQpOworICAgICAgICBURnVuY3Rpb25Db3MyLCAgLy8gdmVj
MiBjb3ModmVjMik7CisgICAgICAgIFRGdW5jdGlvbkNvczMsICAvLyB2ZWMzIGNvcyh2ZWMzKTsK
KyAgICAgICAgVEZ1bmN0aW9uQ29zNCwgIC8vIHZlYzQgY29zKHZlYzQpOworCisgICAgICAgIFRG
dW5jdGlvbkRpc3RhbmNlMV8xLCAgLy8gZmxvYXQgZGlzdGFuY2UoZmxvYXQsIGZsb2F0KTsKKyAg
ICAgICAgVEZ1bmN0aW9uRGlzdGFuY2UyXzIsICAvLyB2ZWMyIGRpc3RhbmNlKHZlYzIsIHZlYzIp
OworICAgICAgICBURnVuY3Rpb25EaXN0YW5jZTNfMywgIC8vIHZlYzMgZGlzdGFuY2UodmVjMywg
dmVjMyk7CisgICAgICAgIFRGdW5jdGlvbkRpc3RhbmNlNF80LCAgLy8gdmVjNCBkaXN0YW5jZSh2
ZWM0LCB2ZWM0KTsKKworICAgICAgICBURnVuY3Rpb25Eb3QxXzEsICAvLyBmbG9hdCBkb3QoZmxv
YXQsIGZsb2F0KTsKKyAgICAgICAgVEZ1bmN0aW9uRG90Ml8yLCAgLy8gdmVjMiBkb3QodmVjMiwg
dmVjMik7CisgICAgICAgIFRGdW5jdGlvbkRvdDNfMywgIC8vIHZlYzMgZG90KHZlYzMsIHZlYzMp
OworICAgICAgICBURnVuY3Rpb25Eb3Q0XzQsICAvLyB2ZWM0IGRvdCh2ZWM0LCB2ZWM0KTsKKwor
ICAgICAgICBURnVuY3Rpb25MZW5ndGgxLCAgLy8gZmxvYXQgbGVuZ3RoKGZsb2F0KTsKKyAgICAg
ICAgVEZ1bmN0aW9uTGVuZ3RoMiwgIC8vIGZsb2F0IGxlbmd0aCh2ZWMyKTsKKyAgICAgICAgVEZ1
bmN0aW9uTGVuZ3RoMywgIC8vIGZsb2F0IGxlbmd0aCh2ZWMzKTsKKyAgICAgICAgVEZ1bmN0aW9u
TGVuZ3RoNCwgIC8vIGZsb2F0IGxlbmd0aCh2ZWM0KTsKKworICAgICAgICBURnVuY3Rpb25Ob3Jt
YWxpemUxLCAgLy8gZmxvYXQgbm9ybWFsaXplKGZsb2F0KTsKKyAgICAgICAgVEZ1bmN0aW9uTm9y
bWFsaXplMiwgIC8vIHZlYzIgbm9ybWFsaXplKHZlYzIpOworICAgICAgICBURnVuY3Rpb25Ob3Jt
YWxpemUzLCAgLy8gdmVjMyBub3JtYWxpemUodmVjMyk7CisgICAgICAgIFRGdW5jdGlvbk5vcm1h
bGl6ZTQsICAvLyB2ZWM0IG5vcm1hbGl6ZSh2ZWM0KTsKKworICAgICAgICBURnVuY3Rpb25SZWZs
ZWN0MV8xLCAgLy8gZmxvYXQgcmVmbGVjdChmbG9hdCwgZmxvYXQpOworICAgICAgICBURnVuY3Rp
b25SZWZsZWN0Ml8yLCAgLy8gdmVjMiByZWZsZWN0KHZlYzIsIHZlYzIpOworICAgICAgICBURnVu
Y3Rpb25SZWZsZWN0M18zLCAgLy8gdmVjMyByZWZsZWN0KHZlYzMsIHZlYzMpOworICAgICAgICBU
RnVuY3Rpb25SZWZsZWN0NF80LCAgLy8gdmVjNCByZWZsZWN0KHZlYzQsIHZlYzQpOworCisgICAg
ICAgIFRGdW5jdGlvblVua25vd24KKyAgICB9OworCisgICAgVEJ1aWx0SW5GdW5jdGlvbiBJZGVu
dGlmeUZ1bmN0aW9uKFRPcGVyYXRvciBvcCwgY29uc3QgVFR5cGUmIHBhcmFtKTsKKyAgICBUQnVp
bHRJbkZ1bmN0aW9uIElkZW50aWZ5RnVuY3Rpb24oCisgICAgICAgIFRPcGVyYXRvciBvcCwgY29u
c3QgVFR5cGUmIHBhcmFtMSwgY29uc3QgVFR5cGUmIHBhcmFtMik7CisKKyAgICBib29sIFNldEZ1
bmN0aW9uQ2FsbGVkKFRCdWlsdEluRnVuY3Rpb24gZnVuY3Rpb24pOworCisgICAgc3RkOjp2ZWN0
b3I8VEJ1aWx0SW5GdW5jdGlvbj4gbUZ1bmN0aW9uczsKKworICAgIGNvbnN0IGJvb2wqIG1GdW5j
dGlvbk1hc2s7ICAvLyBhIGJvb2xlYW4gZmxhZyBmb3IgZWFjaCBmdW5jdGlvbi4KKyAgICBjb25z
dCBjaGFyKiogbUZ1bmN0aW9uU291cmNlOworfTsKKworI2VuZGlmICAvLyBDT01QSUxJRVJfQlVJ
TFRfSU5fRlVOQ1RJT05fRU1VTEFUT1JfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvZGVHZW4uY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29kZUdlbi5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOGY1ZDEyOTEwNDBkMDEzMjMxYzU1YmIyNGE1NjIxOTk0MDgzZDlmNAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Nv
ZGVHZW4uY3BwCkBAIC0wLDAgKzEsMzggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JFU1NMLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yR0xTTC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvckhMU0wuaCIKKworLy8KKy8vIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBw
cm92aWRlZCB0byBjcmVhdGUgdGhlIGFjdHVhbAorLy8gY29tcGlsZSBvYmplY3QgdXNlZCBieSBo
aWdoZXIgbGV2ZWwgY29kZS4gIEl0IHJldHVybnMKKy8vIGEgc3ViY2xhc3Mgb2YgVENvbXBpbGVy
LgorLy8KK1RDb21waWxlciogQ29uc3RydWN0Q29tcGlsZXIoCisgICAgU2hTaGFkZXJUeXBlIHR5
cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBTaFNoYWRlck91dHB1dCBvdXRwdXQpCit7CisgICAgc3dp
dGNoIChvdXRwdXQpIHsKKyAgICAgIGNhc2UgU0hfRVNTTF9PVVRQVVQ6CisgICAgICAgIHJldHVy
biBuZXcgVHJhbnNsYXRvckVTU0wodHlwZSwgc3BlYyk7CisgICAgICBjYXNlIFNIX0dMU0xfT1VU
UFVUOgorICAgICAgICByZXR1cm4gbmV3IFRyYW5zbGF0b3JHTFNMKHR5cGUsIHNwZWMpOworICAg
ICAgY2FzZSBTSF9ITFNMOV9PVVRQVVQ6CisgICAgICBjYXNlIFNIX0hMU0wxMV9PVVRQVVQ6Cisg
ICAgICAgIHJldHVybiBuZXcgVHJhbnNsYXRvckhMU0wodHlwZSwgc3BlYywgb3V0cHV0KTsKKyAg
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKworLy8KKy8vIERl
bGV0ZSB0aGUgY29tcGlsZXIgbWFkZSBieSBDb25zdHJ1Y3RDb21waWxlcgorLy8KK3ZvaWQgRGVs
ZXRlQ29tcGlsZXIoVENvbXBpbGVyKiBjb21waWxlcikKK3sKKyAgICBkZWxldGUgY29tcGlsZXI7
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9Db21tb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL0NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFlNDUwM2UzNDBjZjc0YjIwOWE4MmRjYzU3
ZGMwNDNjMjdkZTk0M2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21tb24uaApAQCAtMCwwICsxLDkyIEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9DT01NT05fSU5DTFVERURfCisjZGVmaW5lIF9DT01N
T05fSU5DTFVERURfCisKKyNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNs
dWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNs
dWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Qb29sQWxsb2Mu
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2NvbXBpbGVyZGVidWcuaCIKKyNpbmNs
dWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorCitzdHJ1Y3QgVFNvdXJjZUxvYyB7CisgICAgaW50
IGZpcnN0X2ZpbGU7CisgICAgaW50IGZpcnN0X2xpbmU7CisgICAgaW50IGxhc3RfZmlsZTsKKyAg
ICBpbnQgbGFzdF9saW5lOworfTsKKworLy8KKy8vIFB1dCBQT09MX0FMTE9DQVRPUl9ORVdfREVM
RVRFIGluIGJhc2UgY2xhc3NlcyB0byBtYWtlIHRoZW0gdXNlIHRoaXMgc2NoZW1lLgorLy8KKyNk
ZWZpbmUgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSgpICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVf
dCBzKSB7IHJldHVybiBHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCktPmFsbG9jYXRlKHMpOyB9ICAg
XAorICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIHZvaWQgKl9XaGVyZSkgeyByZXR1cm4g
KF9XaGVyZSk7IH0gICAgICAgICAgICAgICAgICAgIFwKKyAgICB2b2lkIG9wZXJhdG9yIGRlbGV0
ZSh2b2lkKikgeyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAqLCB2b2lkICopIHsgfSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHZvaWQqIG9wZXJhdG9y
IG5ld1tdKHNpemVfdCBzKSB7IHJldHVybiBHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCktPmFsbG9j
YXRlKHMpOyB9IFwKKyAgICB2b2lkKiBvcGVyYXRvciBuZXdbXShzaXplX3QsIHZvaWQgKl9XaGVy
ZSkgeyByZXR1cm4gKF9XaGVyZSk7IH0gICAgICAgICAgICAgICAgICBcCisgICAgdm9pZCBvcGVy
YXRvciBkZWxldGVbXSh2b2lkKikgeyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCAqLCB2b2lk
ICopIHsgfQorCisvLworLy8gUG9vbCB2ZXJzaW9uIG9mIHN0cmluZy4KKy8vCit0eXBlZGVmIHBv
b2xfYWxsb2NhdG9yPGNoYXI+IFRTdHJpbmdBbGxvY2F0b3I7Cit0eXBlZGVmIHN0ZDo6YmFzaWNf
c3RyaW5nIDxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBUU3RyaW5nQWxsb2NhdG9yPiBU
U3RyaW5nOwordHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJpbmdzdHJlYW08Y2hhciwgc3RkOjpjaGFy
X3RyYWl0czxjaGFyPiwgVFN0cmluZ0FsbG9jYXRvcj4gVFN0cmluZ1N0cmVhbTsKK2lubGluZSBU
U3RyaW5nKiBOZXdQb29sVFN0cmluZyhjb25zdCBjaGFyKiBzKQoreworCXZvaWQqIG1lbW9yeSA9
IEdldEdsb2JhbFBvb2xBbGxvY2F0b3IoKS0+YWxsb2NhdGUoc2l6ZW9mKFRTdHJpbmcpKTsKKwly
ZXR1cm4gbmV3KG1lbW9yeSkgVFN0cmluZyhzKTsKK30KKworLy8KKy8vIFBlcnNpc3RlbnQgc3Ry
aW5nIG1lbW9yeS4gIFNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHN0cmluZ3MgdGhhdCBzdXJ2aXZl
CisvLyBhY3Jvc3MgY29tcGlsZXMuCisvLworI2RlZmluZSBUUGVyc2lzdFN0cmluZyBzdGQ6OnN0
cmluZworI2RlZmluZSBUUGVyc2lzdFN0cmluZ1N0cmVhbSBzdGQ6Om9zdHJpbmdzdHJlYW0KKwor
Ly8KKy8vIFBvb2wgYWxsb2NhdG9yIHZlcnNpb25zIG9mIHZlY3RvcnMsIGxpc3RzLCBhbmQgbWFw
cworLy8KK3RlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBUVmVjdG9yIDogcHVibGljIHN0ZDo6dmVj
dG9yPFQsIHBvb2xfYWxsb2NhdG9yPFQ+ID4geworcHVibGljOgorICAgIHR5cGVkZWYgdHlwZW5h
bWUgc3RkOjp2ZWN0b3I8VCwgcG9vbF9hbGxvY2F0b3I8VD4gPjo6c2l6ZV90eXBlIHNpemVfdHlw
ZTsKKyAgICBUVmVjdG9yKCkgOiBzdGQ6OnZlY3RvcjxULCBwb29sX2FsbG9jYXRvcjxUPiA+KCkg
e30KKyAgICBUVmVjdG9yKGNvbnN0IHBvb2xfYWxsb2NhdG9yPFQ+JiBhKSA6IHN0ZDo6dmVjdG9y
PFQsIHBvb2xfYWxsb2NhdG9yPFQ+ID4oYSkge30KKyAgICBUVmVjdG9yKHNpemVfdHlwZSBpKTog
c3RkOjp2ZWN0b3I8VCwgcG9vbF9hbGxvY2F0b3I8VD4gPihpKSB7fQorfTsKKwordGVtcGxhdGUg
PGNsYXNzIEssIGNsYXNzIEQsIGNsYXNzIENNUCA9IHN0ZDo6bGVzczxLPiA+IAorY2xhc3MgVE1h
cCA6IHB1YmxpYyBzdGQ6Om1hcDxLLCBELCBDTVAsIHBvb2xfYWxsb2NhdG9yPHN0ZDo6cGFpcjxj
b25zdCBLLCBEPiA+ID4geworcHVibGljOgorICAgIHR5cGVkZWYgcG9vbF9hbGxvY2F0b3I8c3Rk
OjpwYWlyPGNvbnN0IEssIEQ+ID4gdEFsbG9jYXRvcjsKKworICAgIFRNYXAoKSA6IHN0ZDo6bWFw
PEssIEQsIENNUCwgdEFsbG9jYXRvcj4oKSB7fQorICAgIC8vIHVzZSBjb3JyZWN0IHR3by1zdGFn
ZSBuYW1lIGxvb2t1cCBzdXBwb3J0ZWQgaW4gZ2NjIDMuNCBhbmQgYWJvdmUKKyAgICBUTWFwKGNv
bnN0IHRBbGxvY2F0b3ImIGEpIDogc3RkOjptYXA8SywgRCwgQ01QLCB0QWxsb2NhdG9yPihzdGQ6
Om1hcDxLLCBELCBDTVAsIHRBbGxvY2F0b3I+OjprZXlfY29tcGFyZSgpLCBhKSB7fQorfTsKKwor
Ly8gSW50ZWdlciB0byBUU3RyaW5nIGNvbnZlcnNpb24KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
aW5saW5lIFRTdHJpbmcgc3RyKFQgaSkKK3sKKyAgICBBU1NFUlQoc3RkOjpudW1lcmljX2xpbWl0
czxUPjo6aXNfaW50ZWdlcik7CisgICAgY2hhciBidWZmZXJbKCg4ICogc2l6ZW9mKFQpKSAvIDMp
ICsgM107CisgICAgY29uc3QgY2hhciAqZm9ybWF0U3RyID0gc3RkOjpudW1lcmljX2xpbWl0czxU
Pjo6aXNfc2lnbmVkID8gIiVkIiA6ICIldSI7CisgICAgc25wcmludGYoYnVmZmVyLCBzaXplb2Yo
YnVmZmVyKSwgZm9ybWF0U3RyLCBpKTsKKyAgICByZXR1cm4gYnVmZmVyOworfQorCisjZW5kaWYg
Ly8gX0NPTU1PTl9JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5l
Yjc0NjVlMzVjODBmNjg5OGU1MzNmYjYxZWYwMDFlZjY2OWFkOTQ0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGls
ZXIuY3BwCkBAIC0wLDAgKzEsNTI3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0Q2FsbERlcHRoLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9Gb3JMb29wVW5yb2xsLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9Jbml0aWFsaXplLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFs
aXplUGFyc2VDb250ZXh0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFs
aXplVmFyaWFibGVzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9NYXBMb25nVmFy
aWFibGVOYW1lcy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9SZW5hbWVGdW5jdGlvbi5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU2hIYW5kbGUuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1VuZm9sZFNob3J0Q2lyY3VpdEFTVC5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1pdGF0aW9ucy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVmFyaWFibGVQYWNrZXIuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5n
LmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvY29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmgi
CisKK2Jvb2wgaXNXZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNwZWMgc3BlYykKK3sKKyAgICAgcmV0
dXJuIHNwZWMgPT0gU0hfV0VCR0xfU1BFQyB8fCBzcGVjID09IFNIX0NTU19TSEFERVJTX1NQRUM7
Cit9CisKK25hbWVzcGFjZSB7CitjbGFzcyBUU2NvcGVkUG9vbEFsbG9jYXRvcgoreworICBwdWJs
aWM6CisgICAgVFNjb3BlZFBvb2xBbGxvY2F0b3IoVFBvb2xBbGxvY2F0b3IqIGFsbG9jYXRvcikg
OiBtQWxsb2NhdG9yKGFsbG9jYXRvcikKKyAgICB7CisgICAgICAgIG1BbGxvY2F0b3ItPnB1c2go
KTsKKyAgICAgICAgU2V0R2xvYmFsUG9vbEFsbG9jYXRvcihtQWxsb2NhdG9yKTsKKyAgICB9Cisg
ICAgflRTY29wZWRQb29sQWxsb2NhdG9yKCkKKyAgICB7CisgICAgICAgIFNldEdsb2JhbFBvb2xB
bGxvY2F0b3IoTlVMTCk7CisgICAgICAgIG1BbGxvY2F0b3ItPnBvcCgpOworICAgIH0KKworICBw
cml2YXRlOgorICAgIFRQb29sQWxsb2NhdG9yKiBtQWxsb2NhdG9yOworfTsKKworY2xhc3MgVFNj
b3BlZFN5bWJvbFRhYmxlTGV2ZWwKK3sKKyAgcHVibGljOgorICAgIFRTY29wZWRTeW1ib2xUYWJs
ZUxldmVsKFRTeW1ib2xUYWJsZSogdGFibGUpIDogbVRhYmxlKHRhYmxlKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKG1UYWJsZS0+YXRCdWlsdEluTGV2ZWwoKSk7CisgICAgICAgIG1UYWJsZS0+cHVz
aCgpOworICAgIH0KKyAgICB+VFNjb3BlZFN5bWJvbFRhYmxlTGV2ZWwoKQorICAgIHsKKyAgICAg
ICAgd2hpbGUgKCFtVGFibGUtPmF0QnVpbHRJbkxldmVsKCkpCisgICAgICAgICAgICBtVGFibGUt
PnBvcCgpOworICAgIH0KKworICBwcml2YXRlOgorICAgIFRTeW1ib2xUYWJsZSogbVRhYmxlOwor
fTsKK30gIC8vIG5hbWVzcGFjZQorCitUU2hIYW5kbGVCYXNlOjpUU2hIYW5kbGVCYXNlKCkKK3sK
KyAgICBhbGxvY2F0b3IucHVzaCgpOworICAgIFNldEdsb2JhbFBvb2xBbGxvY2F0b3IoJmFsbG9j
YXRvcik7Cit9CisKK1RTaEhhbmRsZUJhc2U6On5UU2hIYW5kbGVCYXNlKCkKK3sKKyAgICBTZXRH
bG9iYWxQb29sQWxsb2NhdG9yKE5VTEwpOworICAgIGFsbG9jYXRvci5wb3BBbGwoKTsKK30KKwor
VENvbXBpbGVyOjpUQ29tcGlsZXIoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVj
KQorICAgIDogc2hhZGVyVHlwZSh0eXBlKSwKKyAgICAgIHNoYWRlclNwZWMoc3BlYyksCisgICAg
ICBtYXhVbmlmb3JtVmVjdG9ycygwKSwKKyAgICAgIG1heEV4cHJlc3Npb25Db21wbGV4aXR5KDAp
LAorICAgICAgbWF4Q2FsbFN0YWNrRGVwdGgoMCksCisgICAgICBmcmFnbWVudFByZWNpc2lvbkhp
Z2goZmFsc2UpLAorICAgICAgY2xhbXBpbmdTdHJhdGVneShTSF9DTEFNUF9XSVRIX0NMQU1QX0lO
VFJJTlNJQyksCisgICAgICBidWlsdEluRnVuY3Rpb25FbXVsYXRvcih0eXBlKQoreworICAgIGxv
bmdOYW1lTWFwID0gTG9uZ05hbWVNYXA6OkdldEluc3RhbmNlKCk7Cit9CisKK1RDb21waWxlcjo6
flRDb21waWxlcigpCit7CisgICAgQVNTRVJUKGxvbmdOYW1lTWFwKTsKKyAgICBsb25nTmFtZU1h
cC0+UmVsZWFzZSgpOworfQorCitib29sIFRDb21waWxlcjo6SW5pdChjb25zdCBTaEJ1aWx0SW5S
ZXNvdXJjZXMmIHJlc291cmNlcykKK3sKKyAgICBtYXhVbmlmb3JtVmVjdG9ycyA9IChzaGFkZXJU
eXBlID09IFNIX1ZFUlRFWF9TSEFERVIpID8KKyAgICAgICAgcmVzb3VyY2VzLk1heFZlcnRleFVu
aWZvcm1WZWN0b3JzIDoKKyAgICAgICAgcmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3Rv
cnM7CisgICAgbWF4RXhwcmVzc2lvbkNvbXBsZXhpdHkgPSByZXNvdXJjZXMuTWF4RXhwcmVzc2lv
bkNvbXBsZXhpdHk7CisgICAgbWF4Q2FsbFN0YWNrRGVwdGggPSByZXNvdXJjZXMuTWF4Q2FsbFN0
YWNrRGVwdGg7CisKKyAgICBTZXRHbG9iYWxQb29sQWxsb2NhdG9yKCZhbGxvY2F0b3IpOworCisg
ICAgLy8gR2VuZXJhdGUgYnVpbHQtaW4gc3ltYm9sIHRhYmxlLgorICAgIGlmICghSW5pdEJ1aWx0
SW5TeW1ib2xUYWJsZShyZXNvdXJjZXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSW5p
dEV4dGVuc2lvbkJlaGF2aW9yKHJlc291cmNlcywgZXh0ZW5zaW9uQmVoYXZpb3IpOworICAgIGZy
YWdtZW50UHJlY2lzaW9uSGlnaCA9IHJlc291cmNlcy5GcmFnbWVudFByZWNpc2lvbkhpZ2ggPT0g
MTsKKworICAgIGFycmF5Qm91bmRzQ2xhbXBlci5TZXRDbGFtcGluZ1N0cmF0ZWd5KHJlc291cmNl
cy5BcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSk7CisgICAgY2xhbXBpbmdTdHJhdGVneSA9IHJl
c291cmNlcy5BcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneTsKKworICAgIGhhc2hGdW5jdGlvbiA9
IHJlc291cmNlcy5IYXNoRnVuY3Rpb247CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBU
Q29tcGlsZXI6OmNvbXBpbGUoY29uc3QgY2hhciogY29uc3Qgc2hhZGVyU3RyaW5nc1tdLAorICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG51bVN0cmluZ3MsCisgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgY29tcGlsZU9wdGlvbnMpCit7CisgICAgVFNjb3BlZFBvb2xBbGxvY2F0b3Ig
c2NvcGVkQWxsb2MoJmFsbG9jYXRvcik7CisgICAgY2xlYXJSZXN1bHRzKCk7CisKKyAgICBpZiAo
bnVtU3RyaW5ncyA9PSAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIElmIGNvbXBp
bGluZyBmb3IgV2ViR0wsIHZhbGlkYXRlIGxvb3AgYW5kIGluZGV4aW5nIGFzIHdlbGwuCisgICAg
aWYgKGlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpCisgICAgICAgIGNvbXBpbGVPcHRpb25z
IHw9IFNIX1ZBTElEQVRFX0xPT1BfSU5ERVhJTkc7CisKKyAgICAvLyBGaXJzdCBzdHJpbmcgaXMg
cGF0aCBvZiBzb3VyY2UgZmlsZSBpZiBmbGFnIGlzIHNldC4gVGhlIGFjdHVhbCBzb3VyY2UgZm9s
bG93cy4KKyAgICBjb25zdCBjaGFyKiBzb3VyY2VQYXRoID0gTlVMTDsKKyAgICBzaXplX3QgZmly
c3RTb3VyY2UgPSAwOworICAgIGlmIChjb21waWxlT3B0aW9ucyAmIFNIX1NPVVJDRV9QQVRIKQor
ICAgIHsKKyAgICAgICAgc291cmNlUGF0aCA9IHNoYWRlclN0cmluZ3NbMF07CisgICAgICAgICsr
Zmlyc3RTb3VyY2U7CisgICAgfQorCisgICAgVEludGVybWVkaWF0ZSBpbnRlcm1lZGlhdGUoaW5m
b1NpbmspOworICAgIFRQYXJzZUNvbnRleHQgcGFyc2VDb250ZXh0KHN5bWJvbFRhYmxlLCBleHRl
bnNpb25CZWhhdmlvciwgaW50ZXJtZWRpYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNoYWRlclR5cGUsIHNoYWRlclNwZWMsIGNvbXBpbGVPcHRpb25zLCB0cnVlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVBhdGgsIGluZm9TaW5rKTsKKyAgICBwYXJz
ZUNvbnRleHQuZnJhZ21lbnRQcmVjaXNpb25IaWdoID0gZnJhZ21lbnRQcmVjaXNpb25IaWdoOwor
ICAgIFNldEdsb2JhbFBhcnNlQ29udGV4dCgmcGFyc2VDb250ZXh0KTsKKworICAgIC8vIFdlIHBy
ZXNlcnZlIHN5bWJvbHMgYXQgdGhlIGJ1aWx0LWluIGxldmVsIGZyb20gY29tcGlsZS10by1jb21w
aWxlLgorICAgIC8vIFN0YXJ0IHB1c2hpbmcgdGhlIHVzZXItZGVmaW5lZCBzeW1ib2xzIGF0IGds
b2JhbCBsZXZlbC4KKyAgICBUU2NvcGVkU3ltYm9sVGFibGVMZXZlbCBzY29wZWRTeW1ib2xMZXZl
bCgmc3ltYm9sVGFibGUpOworCisgICAgLy8gUGFyc2Ugc2hhZGVyLgorICAgIGJvb2wgc3VjY2Vz
cyA9CisgICAgICAgIChQYVBhcnNlU3RyaW5ncyhudW1TdHJpbmdzIC0gZmlyc3RTb3VyY2UsICZz
aGFkZXJTdHJpbmdzW2ZpcnN0U291cmNlXSwgTlVMTCwgJnBhcnNlQ29udGV4dCkgPT0gMCkgJiYK
KyAgICAgICAgKHBhcnNlQ29udGV4dC50cmVlUm9vdCAhPSBOVUxMKTsKKyAgICBpZiAoc3VjY2Vz
cykKKyAgICB7CisgICAgICAgIFRJbnRlcm1Ob2RlKiByb290ID0gcGFyc2VDb250ZXh0LnRyZWVS
b290OworICAgICAgICBzdWNjZXNzID0gaW50ZXJtZWRpYXRlLnBvc3RQcm9jZXNzKHJvb3QpOwor
CisgICAgICAgIGlmIChzdWNjZXNzKQorICAgICAgICAgICAgc3VjY2VzcyA9IGRldGVjdENhbGxE
ZXB0aChyb290LCBpbmZvU2luaywgKGNvbXBpbGVPcHRpb25zICYgU0hfTElNSVRfQ0FMTF9TVEFD
S19ERVBUSCkgIT0gMCk7CisKKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25z
ICYgU0hfVkFMSURBVEVfTE9PUF9JTkRFWElORykpCisgICAgICAgICAgICBzdWNjZXNzID0gdmFs
aWRhdGVMaW1pdGF0aW9ucyhyb290KTsKKworICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGls
ZU9wdGlvbnMgJiBTSF9USU1JTkdfUkVTVFJJQ1RJT05TKSkKKyAgICAgICAgICAgIHN1Y2Nlc3Mg
PSBlbmZvcmNlVGltaW5nUmVzdHJpY3Rpb25zKHJvb3QsIChjb21waWxlT3B0aW9ucyAmIFNIX0RF
UEVOREVOQ1lfR1JBUEgpICE9IDApOworCisgICAgICAgIGlmIChzdWNjZXNzICYmIHNoYWRlclNw
ZWMgPT0gU0hfQ1NTX1NIQURFUlNfU1BFQykKKyAgICAgICAgICAgIHJld3JpdGVDU1NTaGFkZXIo
cm9vdCk7CisKKyAgICAgICAgLy8gVW5yb2xsIGZvci1sb29wIG1hcmt1cCBuZWVkcyB0byBoYXBw
ZW4gYWZ0ZXIgdmFsaWRhdGVMaW1pdGF0aW9ucyBwYXNzLgorICAgICAgICBpZiAoc3VjY2VzcyAm
JiAoY29tcGlsZU9wdGlvbnMgJiBTSF9VTlJPTExfRk9SX0xPT1BfV0lUSF9JTlRFR0VSX0lOREVY
KSkKKyAgICAgICAgICAgIEZvckxvb3BVbnJvbGw6Ok1hcmtGb3JMb29wc1dpdGhJbnRlZ2VySW5k
aWNlc0ZvclVucm9sbGluZyhyb290KTsKKworICAgICAgICAvLyBCdWlsdC1pbiBmdW5jdGlvbiBl
bXVsYXRpb24gbmVlZHMgdG8gaGFwcGVuIGFmdGVyIHZhbGlkYXRlTGltaXRhdGlvbnMgcGFzcy4K
KyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfRU1VTEFURV9CVUlM
VF9JTl9GVU5DVElPTlMpKQorICAgICAgICAgICAgYnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuTWFy
a0J1aWx0SW5GdW5jdGlvbnNGb3JFbXVsYXRpb24ocm9vdCk7CisKKyAgICAgICAgLy8gQ2xhbXBp
bmcgdW5pZm9ybSBhcnJheSBib3VuZHMgbmVlZHMgdG8gaGFwcGVuIGFmdGVyIHZhbGlkYXRlTGlt
aXRhdGlvbnMgcGFzcy4KKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYg
U0hfQ0xBTVBfSU5ESVJFQ1RfQVJSQVlfQk9VTkRTKSkKKyAgICAgICAgICAgIGFycmF5Qm91bmRz
Q2xhbXBlci5NYXJrSW5kaXJlY3RBcnJheUJvdW5kc0ZvckNsYW1waW5nKHJvb3QpOworCisgICAg
ICAgIC8vIERpc2FsbG93IGV4cHJlc3Npb25zIGRlZW1lZCB0b28gY29tcGxleC4KKyAgICAgICAg
aWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfTElNSVRfRVhQUkVTU0lPTl9DT01Q
TEVYSVRZKSkKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBsaW1pdEV4cHJlc3Npb25Db21wbGV4aXR5
KHJvb3QpOworCisgICAgICAgIC8vIENhbGwgbWFwTG9uZ1ZhcmlhYmxlTmFtZXMoKSBiZWZvcmUg
Y29sbGVjdEF0dHJpYnNVbmlmb3JtcygpIHNvIGluCisgICAgICAgIC8vIGNvbGxlY3RBdHRyaWJz
VW5pZm9ybXMoKSB3ZSBhbHJlYWR5IGhhdmUgdGhlIG1hcHBlZCBzeW1ib2wgbmFtZXMgYW5kCisg
ICAgICAgIC8vIHdlIGNvdWxkIGNvbXBvc2l0ZSBtYXBwZWQgYW5kIG9yaWdpbmFsIHZhcmlhYmxl
IG5hbWVzLgorICAgICAgICAvLyBBbHNvLCBpZiB3ZSBoYXNoIGFsbCB0aGUgbmFtZXMsIHRoZW4g
bm8gbmVlZCB0byBkbyB0aGlzIGZvciBsb25nIG5hbWVzLgorICAgICAgICBpZiAoc3VjY2VzcyAm
JiAoY29tcGlsZU9wdGlvbnMgJiBTSF9NQVBfTE9OR19WQVJJQUJMRV9OQU1FUykgJiYgaGFzaEZ1
bmN0aW9uID09IE5VTEwpCisgICAgICAgICAgICBtYXBMb25nVmFyaWFibGVOYW1lcyhyb290KTsK
KworICAgICAgICBpZiAoc3VjY2VzcyAmJiBzaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIg
JiYgKGNvbXBpbGVPcHRpb25zICYgU0hfSU5JVF9HTF9QT1NJVElPTikpCisgICAgICAgICAgICBp
bml0aWFsaXplR0xQb3NpdGlvbihyb290KTsKKworICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29t
cGlsZU9wdGlvbnMgJiBTSF9VTkZPTERfU0hPUlRfQ0lSQ1VJVCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIFVuZm9sZFNob3J0Q2lyY3VpdEFTVCB1bmZvbGRTaG9ydENpcmN1aXQ7CisgICAgICAg
ICAgICByb290LT50cmF2ZXJzZSgmdW5mb2xkU2hvcnRDaXJjdWl0KTsKKyAgICAgICAgICAgIHVu
Zm9sZFNob3J0Q2lyY3VpdC51cGRhdGVUcmVlKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
c3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9WQVJJQUJMRVMpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb2xsZWN0VmFyaWFibGVzKHJvb3QpOworICAgICAgICAgICAgaWYgKGNvbXBp
bGVPcHRpb25zICYgU0hfRU5GT1JDRV9QQUNLSU5HX1JFU1RSSUNUSU9OUykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gZW5mb3JjZVBhY2tpbmdSZXN0cmljdGlvbnMo
KTsKKyAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLnByZWZpeChFUHJlZml4RXJyb3IpOworICAg
ICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvIDw8ICJ0b28gbWFueSB1bmlmb3JtcyI7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHN1Y2Nlc3Mg
JiYgc2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSICYmCisgICAgICAgICAgICAgICAgKGNv
bXBpbGVPcHRpb25zICYgU0hfSU5JVF9WQVJZSU5HU19XSVRIT1VUX1NUQVRJQ19VU0UpKQorICAg
ICAgICAgICAgICAgIGluaXRpYWxpemVWYXJ5aW5nc1dpdGhvdXRTdGF0aWNVc2Uocm9vdCk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9J
TlRFUk1FRElBVEVfVFJFRSkpCisgICAgICAgICAgICBpbnRlcm1lZGlhdGUub3V0cHV0VHJlZShy
b290KTsKKworICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9PQkpF
Q1RfQ09ERSkpCisgICAgICAgICAgICB0cmFuc2xhdGUocm9vdCk7CisgICAgfQorCisgICAgLy8g
Q2xlYW51cCBtZW1vcnkuCisgICAgaW50ZXJtZWRpYXRlLnJlbW92ZShwYXJzZUNvbnRleHQudHJl
ZVJvb3QpOworCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK2Jvb2wgVENvbXBpbGVyOjpJbml0
QnVpbHRJblN5bWJvbFRhYmxlKGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyAmcmVzb3VyY2VzKQor
eworICAgIGNvbXBpbGVSZXNvdXJjZXMgPSByZXNvdXJjZXM7CisKKyAgICBhc3NlcnQoc3ltYm9s
VGFibGUuaXNFbXB0eSgpKTsKKyAgICBzeW1ib2xUYWJsZS5wdXNoKCk7CisKKyAgICBUUHVibGlj
VHlwZSBpbnRlZ2VyOworICAgIGludGVnZXIudHlwZSA9IEVidEludDsKKyAgICBpbnRlZ2VyLnNp
emUgPSAxOworICAgIGludGVnZXIubWF0cml4ID0gZmFsc2U7CisgICAgaW50ZWdlci5hcnJheSA9
IGZhbHNlOworCisgICAgVFB1YmxpY1R5cGUgZmxvYXRpbmdQb2ludDsKKyAgICBmbG9hdGluZ1Bv
aW50LnR5cGUgPSBFYnRGbG9hdDsKKyAgICBmbG9hdGluZ1BvaW50LnNpemUgPSAxOworICAgIGZs
b2F0aW5nUG9pbnQubWF0cml4ID0gZmFsc2U7CisgICAgZmxvYXRpbmdQb2ludC5hcnJheSA9IGZh
bHNlOworCisgICAgVFB1YmxpY1R5cGUgc2FtcGxlcjsKKyAgICBzYW1wbGVyLnNpemUgPSAxOwor
ICAgIHNhbXBsZXIubWF0cml4ID0gZmFsc2U7CisgICAgc2FtcGxlci5hcnJheSA9IGZhbHNlOwor
CisgICAgc3dpdGNoKHNoYWRlclR5cGUpCisgICAgeworICAgICAgY2FzZSBTSF9GUkFHTUVOVF9T
SEFERVI6CisgICAgICAgIHN5bWJvbFRhYmxlLnNldERlZmF1bHRQcmVjaXNpb24oaW50ZWdlciwg
RWJwTWVkaXVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNIX1ZFUlRFWF9TSEFERVI6
CisgICAgICAgIHN5bWJvbFRhYmxlLnNldERlZmF1bHRQcmVjaXNpb24oaW50ZWdlciwgRWJwSGln
aCk7CisgICAgICAgIHN5bWJvbFRhYmxlLnNldERlZmF1bHRQcmVjaXNpb24oZmxvYXRpbmdQb2lu
dCwgRWJwSGlnaCk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNz
ZXJ0KGZhbHNlICYmICJMYW5ndWFnZSBub3Qgc3VwcG9ydGVkIik7CisgICAgfQorICAgIC8vIFdl
IHNldCBkZWZhdWx0cyBmb3IgYWxsIHRoZSBzYW1wbGVyIHR5cGVzLCBldmVuIHRob3NlIHRoYXQg
YXJlCisgICAgLy8gb25seSBhdmFpbGFibGUgaWYgYW4gZXh0ZW5zaW9uIGV4aXN0cy4KKyAgICBm
b3IgKGludCBzYW1wbGVyVHlwZSA9IEVidEd1YXJkU2FtcGxlckJlZ2luICsgMTsKKyAgICAgICAg
IHNhbXBsZXJUeXBlIDwgRWJ0R3VhcmRTYW1wbGVyRW5kOyArK3NhbXBsZXJUeXBlKQorICAgIHsK
KyAgICAgICAgc2FtcGxlci50eXBlID0gc3RhdGljX2Nhc3Q8VEJhc2ljVHlwZT4oc2FtcGxlclR5
cGUpOworICAgICAgICBzeW1ib2xUYWJsZS5zZXREZWZhdWx0UHJlY2lzaW9uKHNhbXBsZXIsIEVi
cExvdyk7CisgICAgfQorCisgICAgSW5zZXJ0QnVpbHRJbkZ1bmN0aW9ucyhzaGFkZXJUeXBlLCBz
aGFkZXJTcGVjLCByZXNvdXJjZXMsIHN5bWJvbFRhYmxlKTsKKworICAgIElkZW50aWZ5QnVpbHRJ
bnMoc2hhZGVyVHlwZSwgc2hhZGVyU3BlYywgcmVzb3VyY2VzLCBzeW1ib2xUYWJsZSk7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBUQ29tcGlsZXI6OmNsZWFyUmVzdWx0cygpCit7Cisg
ICAgYXJyYXlCb3VuZHNDbGFtcGVyLkNsZWFudXAoKTsKKyAgICBpbmZvU2luay5pbmZvLmVyYXNl
KCk7CisgICAgaW5mb1Npbmsub2JqLmVyYXNlKCk7CisgICAgaW5mb1NpbmsuZGVidWcuZXJhc2Uo
KTsKKworICAgIGF0dHJpYnMuY2xlYXIoKTsKKyAgICB1bmlmb3Jtcy5jbGVhcigpOworICAgIHZh
cnlpbmdzLmNsZWFyKCk7CisKKyAgICBidWlsdEluRnVuY3Rpb25FbXVsYXRvci5DbGVhbnVwKCk7
CisKKyAgICBuYW1lTWFwLmNsZWFyKCk7Cit9CisKK2Jvb2wgVENvbXBpbGVyOjpkZXRlY3RDYWxs
RGVwdGgoVEludGVybU5vZGUqIHJvb3QsIFRJbmZvU2luayYgaW5mb1NpbmssIGJvb2wgbGltaXRD
YWxsU3RhY2tEZXB0aCkKK3sKKyAgICBEZXRlY3RDYWxsRGVwdGggZGV0ZWN0KGluZm9TaW5rLCBs
aW1pdENhbGxTdGFja0RlcHRoLCBtYXhDYWxsU3RhY2tEZXB0aCk7CisgICAgcm9vdC0+dHJhdmVy
c2UoJmRldGVjdCk7CisgICAgc3dpdGNoIChkZXRlY3QuZGV0ZWN0Q2FsbERlcHRoKCkpCisgICAg
eworICAgICAgY2FzZSBEZXRlY3RDYWxsRGVwdGg6OmtFcnJvck5vbmU6CisgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgY2FzZSBEZXRlY3RDYWxsRGVwdGg6OmtFcnJvck1pc3NpbmdNYWluOgor
ICAgICAgICBpbmZvU2luay5pbmZvLnByZWZpeChFUHJlZml4RXJyb3IpOworICAgICAgICBpbmZv
U2luay5pbmZvIDw8ICJNaXNzaW5nIG1haW4oKSI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgIGNhc2UgRGV0ZWN0Q2FsbERlcHRoOjprRXJyb3JSZWN1cnNpb246CisgICAgICAgIGluZm9T
aW5rLmluZm8ucHJlZml4KEVQcmVmaXhFcnJvcik7CisgICAgICAgIGluZm9TaW5rLmluZm8gPDwg
IkZ1bmN0aW9uIHJlY3Vyc2lvbiBkZXRlY3RlZCI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgIGNhc2UgRGV0ZWN0Q2FsbERlcHRoOjprRXJyb3JNYXhEZXB0aEV4Y2VlZGVkOgorICAgICAg
ICBpbmZvU2luay5pbmZvLnByZWZpeChFUHJlZml4RXJyb3IpOworICAgICAgICBpbmZvU2luay5p
bmZvIDw8ICJGdW5jdGlvbiBjYWxsIHN0YWNrIHRvbyBkZWVwIjsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KK30KKwordm9pZCBUQ29tcGlsZXI6OnJld3JpdGVDU1NTaGFkZXIo
VEludGVybU5vZGUqIHJvb3QpCit7CisgICAgUmVuYW1lRnVuY3Rpb24gcmVuYW1lcigibWFpbigi
LCAiY3NzX21haW4oIik7CisgICAgcm9vdC0+dHJhdmVyc2UoJnJlbmFtZXIpOworfQorCitib29s
IFRDb21waWxlcjo6dmFsaWRhdGVMaW1pdGF0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCkKK3sKKyAg
ICBWYWxpZGF0ZUxpbWl0YXRpb25zIHZhbGlkYXRlKHNoYWRlclR5cGUsIGluZm9TaW5rLmluZm8p
OworICAgIHJvb3QtPnRyYXZlcnNlKCZ2YWxpZGF0ZSk7CisgICAgcmV0dXJuIHZhbGlkYXRlLm51
bUVycm9ycygpID09IDA7Cit9CisKK2Jvb2wgVENvbXBpbGVyOjplbmZvcmNlVGltaW5nUmVzdHJp
Y3Rpb25zKFRJbnRlcm1Ob2RlKiByb290LCBib29sIG91dHB1dEdyYXBoKQoreworICAgIGlmIChz
aGFkZXJTcGVjICE9IFNIX1dFQkdMX1NQRUMpCisgICAgeworICAgICAgICBpbmZvU2luay5pbmZv
IDw8ICJUaW1pbmcgcmVzdHJpY3Rpb25zIG11c3QgYmUgZW5mb3JjZWQgdW5kZXIgdGhlIFdlYkdM
IHNwZWMuIjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChzaGFkZXJU
eXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICB7CisgICAgICAgIFREZXBlbmRlbmN5R3Jh
cGggZ3JhcGgocm9vdCk7CisKKyAgICAgICAgLy8gT3V0cHV0IGFueSBlcnJvcnMgZmlyc3QuCisg
ICAgICAgIGJvb2wgc3VjY2VzcyA9IGVuZm9yY2VGcmFnbWVudFNoYWRlclRpbWluZ1Jlc3RyaWN0
aW9ucyhncmFwaCk7CisgICAgICAgIAorICAgICAgICAvLyBUaGVuLCBvdXRwdXQgdGhlIGRlcGVu
ZGVuY3kgZ3JhcGguCisgICAgICAgIGlmIChvdXRwdXRHcmFwaCkKKyAgICAgICAgeworICAgICAg
ICAgICAgVERlcGVuZGVuY3lHcmFwaE91dHB1dCBvdXRwdXQoaW5mb1NpbmsuaW5mbyk7CisgICAg
ICAgICAgICBvdXRwdXQub3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhncmFwaCk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHJldHVybiBzdWNjZXNzOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICByZXR1cm4gZW5mb3JjZVZlcnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhy
b290KTsKKyAgICB9Cit9CisKK2Jvb2wgVENvbXBpbGVyOjpsaW1pdEV4cHJlc3Npb25Db21wbGV4
aXR5KFRJbnRlcm1Ob2RlKiByb290KQoreworICAgIFRJbnRlcm1UcmF2ZXJzZXIgdHJhdmVyc2Vy
OworICAgIHJvb3QtPnRyYXZlcnNlKCZ0cmF2ZXJzZXIpOworICAgIFREZXBlbmRlbmN5R3JhcGgg
Z3JhcGgocm9vdCk7CisKKyAgICBmb3IgKFRGdW5jdGlvbkNhbGxWZWN0b3I6OmNvbnN0X2l0ZXJh
dG9yIGl0ZXIgPSBncmFwaC5iZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpOworICAgICAg
ICAgaXRlciAhPSBncmFwaC5lbmRVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMoKTsKKyAgICAgICAg
ICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaEZ1bmN0aW9uQ2FsbCogc2FtcGxlclN5bWJv
bCA9ICppdGVyOworICAgICAgICBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyIGdyYXBoVHJhdmVy
c2VyOworICAgICAgICBzYW1wbGVyU3ltYm9sLT50cmF2ZXJzZSgmZ3JhcGhUcmF2ZXJzZXIpOwor
ICAgIH0KKworICAgIGlmICh0cmF2ZXJzZXIuZ2V0TWF4RGVwdGgoKSA+IG1heEV4cHJlc3Npb25D
b21wbGV4aXR5KQorICAgIHsKKyAgICAgICAgaW5mb1NpbmsuaW5mbyA8PCAiRXhwcmVzc2lvbiB0
b28gY29tcGxleC4iOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFRDb21waWxlcjo6ZW5mb3JjZUZyYWdtZW50U2hhZGVyVGltaW5nUmVz
dHJpY3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKQoreworICAgIFJlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmcgcmVzdHJpY3RvcihpbmZvU2luay5pbmZvKTsKKyAgICByZXN0
cmljdG9yLmVuZm9yY2VSZXN0cmljdGlvbnMoZ3JhcGgpOworICAgIHJldHVybiByZXN0cmljdG9y
Lm51bUVycm9ycygpID09IDA7Cit9CisKK2Jvb2wgVENvbXBpbGVyOjplbmZvcmNlVmVydGV4U2hh
ZGVyVGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290KQoreworICAgIFJlc3RyaWN0
VmVydGV4U2hhZGVyVGltaW5nIHJlc3RyaWN0b3IoaW5mb1NpbmsuaW5mbyk7CisgICAgcmVzdHJp
Y3Rvci5lbmZvcmNlUmVzdHJpY3Rpb25zKHJvb3QpOworICAgIHJldHVybiByZXN0cmljdG9yLm51
bUVycm9ycygpID09IDA7Cit9CisKK3ZvaWQgVENvbXBpbGVyOjpjb2xsZWN0VmFyaWFibGVzKFRJ
bnRlcm1Ob2RlKiByb290KQoreworICAgIENvbGxlY3RWYXJpYWJsZXMgY29sbGVjdChhdHRyaWJz
LCB1bmlmb3JtcywgdmFyeWluZ3MsIGhhc2hGdW5jdGlvbik7CisgICAgcm9vdC0+dHJhdmVyc2Uo
JmNvbGxlY3QpOworfQorCitib29sIFRDb21waWxlcjo6ZW5mb3JjZVBhY2tpbmdSZXN0cmljdGlv
bnMoKQoreworICAgIFZhcmlhYmxlUGFja2VyIHBhY2tlcjsKKyAgICByZXR1cm4gcGFja2VyLkNo
ZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cyhtYXhVbmlmb3JtVmVjdG9ycywgdW5pZm9y
bXMpOworfQorCit2b2lkIFRDb21waWxlcjo6aW5pdGlhbGl6ZUdMUG9zaXRpb24oVEludGVybU5v
ZGUqIHJvb3QpCit7CisgICAgSW5pdGlhbGl6ZVZhcmlhYmxlczo6SW5pdFZhcmlhYmxlSW5mb0xp
c3QgdmFyaWFibGVzOworICAgIEluaXRpYWxpemVWYXJpYWJsZXM6OkluaXRWYXJpYWJsZUluZm8g
dmFyKAorICAgICAgICAiZ2xfUG9zaXRpb24iLCBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVk
LCBFdnFQb3NpdGlvbiwgNCkpOworICAgIHZhcmlhYmxlcy5wdXNoX2JhY2sodmFyKTsKKyAgICBJ
bml0aWFsaXplVmFyaWFibGVzIGluaXRpYWxpemVyKHZhcmlhYmxlcyk7CisgICAgcm9vdC0+dHJh
dmVyc2UoJmluaXRpYWxpemVyKTsKK30KKwordm9pZCBUQ29tcGlsZXI6OmluaXRpYWxpemVWYXJ5
aW5nc1dpdGhvdXRTdGF0aWNVc2UoVEludGVybU5vZGUqIHJvb3QpCit7CisgICAgSW5pdGlhbGl6
ZVZhcmlhYmxlczo6SW5pdFZhcmlhYmxlSW5mb0xpc3QgdmFyaWFibGVzOworICAgIGZvciAoc2l6
ZV90IGlpID0gMDsgaWkgPCB2YXJ5aW5ncy5zaXplKCk7ICsraWkpCisgICAgeworICAgICAgICBj
b25zdCBUVmFyaWFibGVJbmZvJiB2YXJ5aW5nID0gdmFyeWluZ3NbaWldOworICAgICAgICBpZiAo
dmFyeWluZy5zdGF0aWNVc2UpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgdW5zaWdu
ZWQgY2hhciBzaXplID0gMDsKKyAgICAgICAgYm9vbCBtYXRyaXggPSBmYWxzZTsKKyAgICAgICAg
c3dpdGNoICh2YXJ5aW5nLnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIFNIX0ZMT0FU
OgorICAgICAgICAgICAgc2l6ZSA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBj
YXNlIFNIX0ZMT0FUX1ZFQzI6CisgICAgICAgICAgICBzaXplID0gMjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMzoKKyAgICAgICAgICAgIHNpemUgPSAz
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUM0OgorICAg
ICAgICAgICAgc2l6ZSA9IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFNI
X0ZMT0FUX01BVDI6CisgICAgICAgICAgICBzaXplID0gMjsKKyAgICAgICAgICAgIG1hdHJpeCA9
IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDM6
CisgICAgICAgICAgICBzaXplID0gMzsKKyAgICAgICAgICAgIG1hdHJpeCA9IHRydWU7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDQ6CisgICAgICAgICAg
ICBzaXplID0gNDsKKyAgICAgICAgICAgIG1hdHJpeCA9IHRydWU7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAg
ICAgfQorICAgICAgICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cVZhcnlp
bmdPdXQsIHNpemUsIG1hdHJpeCwgdmFyeWluZy5pc0FycmF5KTsKKyAgICAgICAgVFN0cmluZyBu
YW1lID0gdmFyeWluZy5uYW1lLmNfc3RyKCk7CisgICAgICAgIGlmICh2YXJ5aW5nLmlzQXJyYXkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHR5cGUuc2V0QXJyYXlTaXplKHZhcnlpbmcuc2l6ZSk7
CisgICAgICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHIoMCwgbmFtZS5maW5kX2ZpcnN0X29mKCdb
JykpOworICAgICAgICB9CisKKyAgICAgICAgSW5pdGlhbGl6ZVZhcmlhYmxlczo6SW5pdFZhcmlh
YmxlSW5mbyB2YXIobmFtZSwgdHlwZSk7CisgICAgICAgIHZhcmlhYmxlcy5wdXNoX2JhY2sodmFy
KTsKKyAgICB9CisgICAgSW5pdGlhbGl6ZVZhcmlhYmxlcyBpbml0aWFsaXplcih2YXJpYWJsZXMp
OworICAgIHJvb3QtPnRyYXZlcnNlKCZpbml0aWFsaXplcik7Cit9CisKK3ZvaWQgVENvbXBpbGVy
OjptYXBMb25nVmFyaWFibGVOYW1lcyhUSW50ZXJtTm9kZSogcm9vdCkKK3sKKyAgICBBU1NFUlQo
bG9uZ05hbWVNYXApOworICAgIE1hcExvbmdWYXJpYWJsZU5hbWVzIG1hcChsb25nTmFtZU1hcCk7
CisgICAgcm9vdC0+dHJhdmVyc2UoJm1hcCk7Cit9CisKK2ludCBUQ29tcGlsZXI6OmdldE1hcHBl
ZE5hbWVNYXhMZW5ndGgoKSBjb25zdAoreworICAgIHJldHVybiBNQVhfU0hPUlRFTkVEX0lERU5U
SUZJRVJfU0laRSArIDE7Cit9CisKK2NvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgVENvbXBpbGVy
OjpnZXRFeHRlbnNpb25CZWhhdmlvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGV4dGVuc2lvbkJl
aGF2aW9yOworfQorCitjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIFRDb21waWxlcjo6Z2V0UmVz
b3VyY2VzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29tcGlsZVJlc291cmNlczsKK30KKworY29u
c3QgQXJyYXlCb3VuZHNDbGFtcGVyJiBUQ29tcGlsZXI6OmdldEFycmF5Qm91bmRzQ2xhbXBlcigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGFycmF5Qm91bmRzQ2xhbXBlcjsKK30KKworU2hBcnJheUlu
ZGV4Q2xhbXBpbmdTdHJhdGVneSBUQ29tcGlsZXI6OmdldEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0
ZWd5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2xhbXBpbmdTdHJhdGVneTsKK30KKworY29uc3Qg
QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3ImIFRDb21waWxlcjo6Z2V0QnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3IoKSBjb25zdAoreworICAgIHJldHVybiBidWlsdEluRnVuY3Rpb25FbXVsYXRvcjsKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL0NvbnN0YW50VW5pb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMWUzNzg4NWY5MDFiMDI0
ZDYzNDY1ODQ3NzEyYmZiNjg4NjA3MzRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5oCkBAIC0w
LDAgKzEsMjU3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9DT05TVEFOVF9VTklP
Tl9JTkNMVURFRF8KKyNkZWZpbmUgX0NPTlNUQU5UX1VOSU9OX0lOQ0xVREVEXworCisjaW5jbHVk
ZSA8YXNzZXJ0Lmg+CisKK2NsYXNzIENvbnN0YW50VW5pb24geworcHVibGljOgorICAgIFBPT0xf
QUxMT0NBVE9SX05FV19ERUxFVEUoKTsKKyAgICBDb25zdGFudFVuaW9uKCkKKyAgICB7CisgICAg
ICAgIGlDb25zdCA9IDA7CisgICAgICAgIHR5cGUgPSBFYnRWb2lkOworICAgIH0KKworICAgIHZv
aWQgc2V0SUNvbnN0KGludCBpKSB7aUNvbnN0ID0gaTsgdHlwZSA9IEVidEludDsgfQorICAgIHZv
aWQgc2V0RkNvbnN0KGZsb2F0IGYpIHtmQ29uc3QgPSBmOyB0eXBlID0gRWJ0RmxvYXQ7IH0KKyAg
ICB2b2lkIHNldEJDb25zdChib29sIGIpIHtiQ29uc3QgPSBiOyB0eXBlID0gRWJ0Qm9vbDsgfQor
CisgICAgaW50IGdldElDb25zdCgpIHsgcmV0dXJuIGlDb25zdDsgfQorICAgIGZsb2F0IGdldEZD
b25zdCgpIHsgcmV0dXJuIGZDb25zdDsgfQorICAgIGJvb2wgZ2V0QkNvbnN0KCkgeyByZXR1cm4g
YkNvbnN0OyB9CisgICAgaW50IGdldElDb25zdCgpIGNvbnN0IHsgcmV0dXJuIGlDb25zdDsgfQor
ICAgIGZsb2F0IGdldEZDb25zdCgpIGNvbnN0IHsgcmV0dXJuIGZDb25zdDsgfQorICAgIGJvb2wg
Z2V0QkNvbnN0KCkgY29uc3QgeyByZXR1cm4gYkNvbnN0OyB9CisKKyAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgaW50IGkpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaSA9PSBpQ29uc3Q7
CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGZsb2F0IGYpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gZiA9PSBmQ29uc3Q7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IGJvb2wgYikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBiID09IGJDb25z
dDsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29uc3RhbnRVbmlvbiYgY29u
c3RhbnQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoY29uc3RhbnQudHlwZSAhPSB0eXBlKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAg
ICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgIHJldHVybiBjb25zdGFudC5pQ29uc3QgPT0g
aUNvbnN0OworICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgcmV0dXJuIGNvbnN0
YW50LmZDb25zdCA9PSBmQ29uc3Q7CisgICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICAg
IHJldHVybiBjb25zdGFudC5iQ29uc3QgPT0gYkNvbnN0OworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IGludCBpKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFvcGVyYXRv
cj09KGkpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBmbG9hdCBmKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KGYpOworICAgIH0KKworICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBib29sIGIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
IW9wZXJhdG9yPT0oYik7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvbnN0
YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFvcGVyYXRv
cj09KGNvbnN0YW50KTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPihjb25zdCBDb25zdGFu
dFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBhc3NlcnQodHlwZSA9PSBj
b25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0
SW50OgorICAgICAgICAgICAgcmV0dXJuIGlDb25zdCA+IGNvbnN0YW50LmlDb25zdDsKKyAgICAg
ICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgIHJldHVybiBmQ29uc3QgPiBjb25zdGFudC5m
Q29uc3Q7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8g
SW52YWxpZCBvcGVyYXRpb24sIGhhbmRsZWQgYXQgc2VtYW50aWMgYW5hbHlzaXMKKyAgICAgICAg
fQorICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0
YW50KSBjb25zdAorICAgIHsgCisgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUp
OworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAg
ICAgICByZXR1cm4gaUNvbnN0IDwgY29uc3RhbnQuaUNvbnN0OworICAgICAgICBjYXNlIEVidEZs
b2F0OgorICAgICAgICAgICAgcmV0dXJuIGZDb25zdCA8IGNvbnN0YW50LmZDb25zdDsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBJbnZhbGlkIG9wZXJh
dGlvbiwgaGFuZGxlZCBhdCBzZW1hbnRpYyBhbmFseXNpcworICAgICAgICB9CisgICAgfQorCisg
ICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvcisoY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQp
IGNvbnN0CisgICAgeyAKKyAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKKyAgICAg
ICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkg
eworICAgICAgICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCArIGNv
bnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBjYXNlIEVidEZsb2F0OiByZXR1cm5WYWx1
ZS5zZXRGQ29uc3QoZkNvbnN0ICsgY29uc3RhbnQuZkNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiBv
cGVyYXRvci0oY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAKKyAg
ICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYXNzZXJ0KHR5cGUgPT0g
Y29uc3RhbnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEVi
dEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAtIGNvbnN0YW50LmlDb25zdCk7IGJy
ZWFrOworICAgICAgICBjYXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0
IC0gY29uc3RhbnQuZkNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IGFzc2VydChmYWxz
ZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0
dXJuVmFsdWU7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvciooY29uc3QgQ29u
c3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAKKyAgICAgICAgQ29uc3RhbnRVbmlv
biByZXR1cm5WYWx1ZTsKKyAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7Cisg
ICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUu
c2V0SUNvbnN0KGlDb25zdCAqIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBjYXNl
IEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0ICogY29uc3RhbnQuZkNvbnN0
KTsgYnJlYWs7IAorICAgICAgICBkZWZhdWx0OiBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlz
c2luZyIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0K
KworICAgIENvbnN0YW50VW5pb24gb3BlcmF0b3IlKGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0
YW50KSBjb25zdAorICAgIHsgCisgICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7Cisg
ICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOworICAgICAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNldElDb25zdChpQ29uc3Qg
JSBjb25zdGFudC5pQ29uc3QpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChm
YWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
cmV0dXJuVmFsdWU7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvcj4+KGNvbnN0
IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAorICAgIHsgCisgICAgICAgIENvbnN0YW50
VW5pb24gcmV0dXJuVmFsdWU7CisgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUp
OworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6IHJldHVyblZh
bHVlLnNldElDb25zdChpQ29uc3QgPj4gY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0KKworICAgIENvbnN0YW50
VW5pb24gb3BlcmF0b3I8PChjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAg
ICB7IAorICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQo
dHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAg
IGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0IDw8IGNvbnN0YW50LmlD
b25zdCk7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZh
dWx0IG1pc3NpbmciKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsK
KyAgICB9CisKKyAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yJihjb25zdCBDb25zdGFudFVuaW9u
JiBjb25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZh
bHVlOworICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dp
dGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50OiAgcmV0dXJuVmFsdWUuc2V0SUNvbnN0
KGlDb25zdCAmIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiAgICAg
YXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9CisKKyAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9y
fChjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBD
b25zdGFudFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFu
dC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50OiAg
cmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCB8IGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9CisKKyAgICBD
b25zdGFudFVuaW9uIG9wZXJhdG9yXihjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29u
c3QKKyAgICB7IAorICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBh
c3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgICAgIGNhc2UgRWJ0SW50OiAgcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCBeIGNvbnN0
YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYm
ICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXR1cm5W
YWx1ZTsKKyAgICB9CisKKyAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yJiYoY29uc3QgQ29uc3Rh
bnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAKKyAgICAgICAgQ29uc3RhbnRVbmlvbiBy
ZXR1cm5WYWx1ZTsKKyAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CisgICAg
ICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEVidEJvb2w6IHJldHVyblZhbHVlLnNl
dEJDb25zdChiQ29uc3QgJiYgY29uc3RhbnQuYkNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0KKworICAgIENvbnN0YW50VW5pb24g
b3BlcmF0b3J8fChjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7IAor
ICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQodHlwZSA9
PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2Ug
RWJ0Qm9vbDogcmV0dXJuVmFsdWUuc2V0QkNvbnN0KGJDb25zdCB8fCBjb25zdGFudC5iQ29uc3Qp
OyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBt
aXNzaW5nIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAg
fQorCisgICAgVEJhc2ljVHlwZSBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZTsgfQorcHJp
dmF0ZToKKworICAgIHVuaW9uICB7CisgICAgICAgIGludCBpQ29uc3Q7ICAvLyB1c2VkIGZvciBp
dmVjLCBzY2FsYXIgaW50cworICAgICAgICBib29sIGJDb25zdDsgLy8gdXNlZCBmb3IgYnZlYywg
c2NhbGFyIGJvb2xzCisgICAgICAgIGZsb2F0IGZDb25zdDsgICAvLyB1c2VkIGZvciB2ZWMsIG1h
dCwgc2NhbGFyIGZsb2F0cworICAgIH0gOworCisgICAgVEJhc2ljVHlwZSB0eXBlOworfTsKKwor
I2VuZGlmIC8vIF9DT05TVEFOVF9VTklPTl9JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RldGVjdENhbGxEZXB0aC5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EZXRl
Y3RDYWxsRGVwdGguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmYzFkNTg1MmZmMmRjNmZhZDMzMGM3NTkxMGZj
M2Q1NzZmOGZlMTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9EZXRlY3RDYWxsRGVwdGguY3BwCkBAIC0wLDAgKzEsMTg1
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9E
ZXRlY3RDYWxsRGVwdGguaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luZm9TaW5r
LmgiCisKK0RldGVjdENhbGxEZXB0aDo6RnVuY3Rpb25Ob2RlOjpGdW5jdGlvbk5vZGUoY29uc3Qg
VFN0cmluZyYgZm5hbWUpCisgICAgOiBuYW1lKGZuYW1lKSwKKyAgICAgIHZpc2l0KFByZVZpc2l0
KQoreworfQorCitjb25zdCBUU3RyaW5nJiBEZXRlY3RDYWxsRGVwdGg6OkZ1bmN0aW9uTm9kZTo6
Z2V0TmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG5hbWU7Cit9CisKK3ZvaWQgRGV0ZWN0Q2Fs
bERlcHRoOjpGdW5jdGlvbk5vZGU6OmFkZENhbGxlZSgKKyAgICBEZXRlY3RDYWxsRGVwdGg6OkZ1
bmN0aW9uTm9kZSogY2FsbGVlKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FsbGVl
cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoY2FsbGVlc1tpXSA9PSBjYWxsZWUpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhbGxlZXMucHVzaF9iYWNrKGNhbGxlZSk7Cit9
CisKK2ludCBEZXRlY3RDYWxsRGVwdGg6OkZ1bmN0aW9uTm9kZTo6ZGV0ZWN0Q2FsbERlcHRoKERl
dGVjdENhbGxEZXB0aCogZGV0ZWN0Q2FsbERlcHRoLCBpbnQgZGVwdGgpCit7CisgICAgQVNTRVJU
KHZpc2l0ID09IFByZVZpc2l0KTsKKyAgICBBU1NFUlQoZGV0ZWN0Q2FsbERlcHRoKTsKKworICAg
IGludCBtYXhEZXB0aCA9IGRlcHRoOworICAgIHZpc2l0ID0gSW5WaXNpdDsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGNhbGxlZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgc3dpdGNoIChj
YWxsZWVzW2ldLT52aXNpdCkgeworICAgICAgICAgICAgY2FzZSBJblZpc2l0OgorICAgICAgICAg
ICAgICAgIC8vIGN5Y2xlIGRldGVjdGVkLCBpLmUuLCByZWN1cnNpb24gZGV0ZWN0ZWQuCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGtJbmZpbml0ZUNhbGxEZXB0aDsKKyAgICAgICAgICAgIGNhc2Ug
UG9zdFZpc2l0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBQcmVW
aXNpdDogeworICAgICAgICAgICAgICAgIC8vIENoZWNrIGJlZm9yZSB3ZSByZWN1cnNlIHNvIHdl
IGRvbid0IGdvIHRvbyBkZXB0aAorICAgICAgICAgICAgICAgIGlmIChkZXRlY3RDYWxsRGVwdGgt
PmNoZWNrRXhjZWVkc01heERlcHRoKGRlcHRoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGRlcHRoOworICAgICAgICAgICAgICAgIGludCBjYWxsRGVwdGggPSBjYWxsZWVzW2ldLT5kZXRl
Y3RDYWxsRGVwdGgoZGV0ZWN0Q2FsbERlcHRoLCBkZXB0aCArIDEpOworICAgICAgICAgICAgICAg
IC8vIENoZWNrIGFmdGVyIHdlIHJlY3Vyc2Ugc28gd2UgY2FuIGV4aXQgaW1tZWRpYXRlbHkgYW5k
IHByb3ZpZGUgaW5mby4KKyAgICAgICAgICAgICAgICBpZiAoZGV0ZWN0Q2FsbERlcHRoLT5jaGVj
a0V4Y2VlZHNNYXhEZXB0aChjYWxsRGVwdGgpKSB7CisgICAgICAgICAgICAgICAgICAgIGRldGVj
dENhbGxEZXB0aC0+Z2V0SW5mb1NpbmsoKS5pbmZvIDw8ICI8LSIgPDwgY2FsbGVlc1tpXS0+Z2V0
TmFtZSgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbERlcHRoOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBtYXhEZXB0aCA9IHN0ZDo6bWF4KGNhbGxEZXB0aCwg
bWF4RGVwdGgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHZpc2l0ID0gUG9zdFZpc2l0Owor
ICAgIHJldHVybiBtYXhEZXB0aDsKK30KKwordm9pZCBEZXRlY3RDYWxsRGVwdGg6OkZ1bmN0aW9u
Tm9kZTo6cmVzZXQoKQoreworICAgIHZpc2l0ID0gUHJlVmlzaXQ7Cit9CisKK0RldGVjdENhbGxE
ZXB0aDo6RGV0ZWN0Q2FsbERlcHRoKFRJbmZvU2luayYgaW5mb1NpbmssIGJvb2wgbGltaXRDYWxs
U3RhY2tEZXB0aCwgaW50IG1heENhbGxTdGFja0RlcHRoKQorICAgIDogVEludGVybVRyYXZlcnNl
cih0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpLAorICAgICAgY3VycmVudEZ1bmN0aW9uKE5VTEwp
LAorICAgICAgaW5mb1NpbmsoaW5mb1NpbmspLAorICAgICAgbWF4RGVwdGgobGltaXRDYWxsU3Rh
Y2tEZXB0aCA/IG1heENhbGxTdGFja0RlcHRoIDogRnVuY3Rpb25Ob2RlOjprSW5maW5pdGVDYWxs
RGVwdGgpCit7Cit9CisKK0RldGVjdENhbGxEZXB0aDo6fkRldGVjdENhbGxEZXB0aCgpCit7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAg
IGRlbGV0ZSBmdW5jdGlvbnNbaV07Cit9CisKK2Jvb2wgRGV0ZWN0Q2FsbERlcHRoOjp2aXNpdEFn
Z3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK3sKKyAgICBzd2l0
Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAgICBjYXNlIEVPcFByb3RvdHlwZToKKyAg
ICAgICAgICAgIC8vIEZ1bmN0aW9uIGRlY2xhcmF0aW9uLgorICAgICAgICAgICAgLy8gRG9uJ3Qg
YWRkIEZ1bmN0aW9uTm9kZSBoZXJlIGJlY2F1c2Ugbm9kZS0+Z2V0TmFtZSgpIGlzIHRoZQorICAg
ICAgICAgICAgLy8gdW5tYW5nbGVkIGZ1bmN0aW9uIG5hbWUuCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BGdW5jdGlvbjogeworICAgICAgICAgICAgLy8gRnVuY3Rpb24gZGVm
aW5pdGlvbi4KKyAgICAgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkgeworICAgICAgICAg
ICAgICAgIGN1cnJlbnRGdW5jdGlvbiA9IGZpbmRGdW5jdGlvbkJ5TmFtZShub2RlLT5nZXROYW1l
KCkpOworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50RnVuY3Rpb24gPT0gTlVMTCkgeworICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50RnVuY3Rpb24gPSBuZXcgRnVuY3Rpb25Ob2RlKG5vZGUt
PmdldE5hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9ucy5wdXNoX2JhY2soY3Vy
cmVudEZ1bmN0aW9uKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYg
KHZpc2l0ID09IFBvc3RWaXNpdCkgeworICAgICAgICAgICAgICAgIGN1cnJlbnRGdW5jdGlvbiA9
IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIEVPcEZ1bmN0aW9uQ2FsbDogeworICAgICAgICAgICAgLy8gRnVuY3Rpb24gY2Fs
bC4KKyAgICAgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkgeworICAgICAgICAgICAgICAg
IEZ1bmN0aW9uTm9kZSogZnVuYyA9IGZpbmRGdW5jdGlvbkJ5TmFtZShub2RlLT5nZXROYW1lKCkp
OworICAgICAgICAgICAgICAgIGlmIChmdW5jID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZnVuYyA9IG5ldyBGdW5jdGlvbk5vZGUobm9kZS0+Z2V0TmFtZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgZnVuY3Rpb25zLnB1c2hfYmFjayhmdW5jKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGdW5jdGlvbikKKyAgICAgICAgICAgICAgICAgICAg
Y3VycmVudEZ1bmN0aW9uLT5hZGRDYWxsZWUoZnVuYyk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIERldGVjdENhbGxEZXB0aDo6
Y2hlY2tFeGNlZWRzTWF4RGVwdGgoaW50IGRlcHRoKQoreworICAgIHJldHVybiBkZXB0aCA+PSBt
YXhEZXB0aDsKK30KKwordm9pZCBEZXRlY3RDYWxsRGVwdGg6OnJlc2V0RnVuY3Rpb25Ob2Rlcygp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbnMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgZnVuY3Rpb25zW2ldLT5yZXNldCgpOworICAgIH0KK30KKworRGV0ZWN0Q2FsbERl
cHRoOjpFcnJvckNvZGUgRGV0ZWN0Q2FsbERlcHRoOjpkZXRlY3RDYWxsRGVwdGhGb3JGdW5jdGlv
bihGdW5jdGlvbk5vZGUqIGZ1bmMpCit7CisgICAgY3VycmVudEZ1bmN0aW9uID0gTlVMTDsKKyAg
ICByZXNldEZ1bmN0aW9uTm9kZXMoKTsKKworICAgIGludCBtYXhDYWxsRGVwdGggPSBmdW5jLT5k
ZXRlY3RDYWxsRGVwdGgodGhpcywgMSk7CisKKyAgICBpZiAobWF4Q2FsbERlcHRoID09IEZ1bmN0
aW9uTm9kZTo6a0luZmluaXRlQ2FsbERlcHRoKQorICAgICAgICByZXR1cm4ga0Vycm9yUmVjdXJz
aW9uOworCisgICAgaWYgKG1heENhbGxEZXB0aCA+PSBtYXhEZXB0aCkKKyAgICAgICAgcmV0dXJu
IGtFcnJvck1heERlcHRoRXhjZWVkZWQ7CisKKyAgICByZXR1cm4ga0Vycm9yTm9uZTsKK30KKwor
RGV0ZWN0Q2FsbERlcHRoOjpFcnJvckNvZGUgRGV0ZWN0Q2FsbERlcHRoOjpkZXRlY3RDYWxsRGVw
dGgoKQoreworICAgIGlmIChtYXhEZXB0aCAhPSBGdW5jdGlvbk5vZGU6OmtJbmZpbml0ZUNhbGxE
ZXB0aCkgeworICAgICAgICAvLyBDaGVjayBhbGwgZnVuY3Rpb25zIGJlY2F1c2UgdGhlIGRyaXZl
ciBtYXkgZmFpbCBvbiB0aGVtCisgICAgICAgIC8vIFRPRE86IEJlZm9yZSBkZXRlY3RpbmdSZWN1
cnNpb24sIHN0cmlwIHVudXNlZCBmdW5jdGlvbnMuCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZnVuY3Rpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBFcnJvckNvZGUgZXJy
b3IgPSBkZXRlY3RDYWxsRGVwdGhGb3JGdW5jdGlvbihmdW5jdGlvbnNbaV0pOworICAgICAgICAg
ICAgaWYgKGVycm9yICE9IGtFcnJvck5vbmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgRnVuY3Rpb25Ob2RlKiBtYWluID0g
ZmluZEZ1bmN0aW9uQnlOYW1lKCJtYWluKCIpOworICAgICAgICBpZiAobWFpbiA9PSBOVUxMKQor
ICAgICAgICAgICAgcmV0dXJuIGtFcnJvck1pc3NpbmdNYWluOworCisgICAgICAgIHJldHVybiBk
ZXRlY3RDYWxsRGVwdGhGb3JGdW5jdGlvbihtYWluKTsKKyAgICB9CisKKyAgICByZXR1cm4ga0Vy
cm9yTm9uZTsKK30KKworRGV0ZWN0Q2FsbERlcHRoOjpGdW5jdGlvbk5vZGUqIERldGVjdENhbGxE
ZXB0aDo6ZmluZEZ1bmN0aW9uQnlOYW1lKAorICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUpCit7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgaWYgKGZ1bmN0aW9uc1tpXS0+Z2V0TmFtZSgpID09IG5hbWUpCisgICAgICAgICAgICByZXR1
cm4gZnVuY3Rpb25zW2ldOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0
Q2FsbERlcHRoLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9EZXRlY3RDYWxsRGVwdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZTdmMjNkMTVmOGMxODZmMjU3Mzc2
ODEwN2QyNWIyNWJhZDNhMmJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0Q2FsbERlcHRoLmgKQEAgLTAsMCAr
MSw4MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9ERVRFQ1RfUkVD
VVJTSU9OX0hfCisjZGVmaW5lIENPTVBJTEVSX0RFVEVDVF9SRUNVUlNJT05fSF8KKworI2luY2x1
ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5oIgorCitjbGFzcyBUSW5mb1Npbms7CisKKy8vIFRy
YXZlcnNlcyBpbnRlcm1lZGlhdGUgdHJlZSB0byBkZXRlY3QgZnVuY3Rpb24gcmVjdXJzaW9uLgor
Y2xhc3MgRGV0ZWN0Q2FsbERlcHRoIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGlj
OgorICAgIGVudW0gRXJyb3JDb2RlIHsKKyAgICAgICAga0Vycm9yTWlzc2luZ01haW4sCisgICAg
ICAgIGtFcnJvclJlY3Vyc2lvbiwKKyAgICAgICAga0Vycm9yTWF4RGVwdGhFeGNlZWRlZCwKKyAg
ICAgICAga0Vycm9yTm9uZQorICAgIH07CisKKyAgICBEZXRlY3RDYWxsRGVwdGgoVEluZm9TaW5r
JiBpbmZvU3luYywgYm9vbCBsaW1pdENhbGxTdGFja0RlcHRoLCBpbnQgbWF4Q2FsbFN0YWNrRGVw
dGgpOworICAgIH5EZXRlY3RDYWxsRGVwdGgoKTsKKworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEFn
Z3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOworCisgICAgYm9vbCBjaGVja0V4Y2Vl
ZHNNYXhEZXB0aChpbnQgZGVwdGgpOworCisgICAgRXJyb3JDb2RlIGRldGVjdENhbGxEZXB0aCgp
OworCitwcml2YXRlOgorICAgIGNsYXNzIEZ1bmN0aW9uTm9kZSB7CisgICAgcHVibGljOgorICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IGtJbmZpbml0ZUNhbGxEZXB0aCA9IElOVF9NQVg7CisKKyAg
ICAgICAgRnVuY3Rpb25Ob2RlKGNvbnN0IFRTdHJpbmcmIGZuYW1lKTsKKworICAgICAgICBjb25z
dCBUU3RyaW5nJiBnZXROYW1lKCkgY29uc3Q7CisKKyAgICAgICAgLy8gSWYgYSBmdW5jdGlvbiBp
cyBhbHJlYWR5IGluIHRoZSBjYWxsZWUgbGlzdCwgdGhpcyBiZWNvbWVzIGEgbm8tb3AuCisgICAg
ICAgIHZvaWQgYWRkQ2FsbGVlKEZ1bmN0aW9uTm9kZSogY2FsbGVlKTsKKworICAgICAgICAvLyBS
ZXR1cm5zIGtJbmlmaW5pdHlDYWxsRGVwdGggaWYgcmVjdXJzaXZlIGZ1bmN0aW9uIGNhbGxzIGFy
ZSBkZXRlY3RlZC4KKyAgICAgICAgaW50IGRldGVjdENhbGxEZXB0aChEZXRlY3RDYWxsRGVwdGgq
IGRldGVjdENhbGxEZXB0aCwgaW50IGRlcHRoKTsKKworICAgICAgICAvLyBSZXNldCBzdGF0ZS4K
KyAgICAgICAgdm9pZCByZXNldCgpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgLy8gbWFuZ2xl
ZCBmdW5jdGlvbiBuYW1lIGlzIHVuaXF1ZS4KKyAgICAgICAgVFN0cmluZyBuYW1lOworCisgICAg
ICAgIC8vIGZ1bmN0aW9ucyB0aGF0IGFyZSBkaXJlY3RseSBjYWxsZWQgYnkgdGhpcyBmdW5jdGlv
bi4KKyAgICAgICAgVFZlY3RvcjxGdW5jdGlvbk5vZGUqPiBjYWxsZWVzOworCisgICAgICAgIFZp
c2l0IHZpc2l0OworICAgIH07CisKKyAgICBFcnJvckNvZGUgZGV0ZWN0Q2FsbERlcHRoRm9yRnVu
Y3Rpb24oRnVuY3Rpb25Ob2RlKiBmdW5jKTsKKyAgICBGdW5jdGlvbk5vZGUqIGZpbmRGdW5jdGlv
bkJ5TmFtZShjb25zdCBUU3RyaW5nJiBuYW1lKTsKKyAgICB2b2lkIHJlc2V0RnVuY3Rpb25Ob2Rl
cygpOworCisgICAgVEluZm9TaW5rJiBnZXRJbmZvU2luaygpIHsgcmV0dXJuIGluZm9TaW5rOyB9
CisKKyAgICBUVmVjdG9yPEZ1bmN0aW9uTm9kZSo+IGZ1bmN0aW9uczsKKyAgICBGdW5jdGlvbk5v
ZGUqIGN1cnJlbnRGdW5jdGlvbjsKKyAgICBUSW5mb1NpbmsmIGluZm9TaW5rOworICAgIGludCBt
YXhEZXB0aDsKKworICAgIERldGVjdENhbGxEZXB0aChjb25zdCBEZXRlY3RDYWxsRGVwdGgmKTsK
KyAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBEZXRlY3RDYWxsRGVwdGgmKTsKK307CisKKyNlbmRp
ZiAgLy8gQ09NUElMRVJfREVURUNUX1JFQ1VSU0lPTl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0RGlzY29udGludWl0
eS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9E
ZXRlY3REaXNjb250aW51aXR5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMzRlYjBiZmE4YmFmNWEyNDYwYTFk
MjZmNzVlMGM1NWUxMDc4MDZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0RGlzY29udGludWl0eS5jcHAKQEAg
LTAsMCArMSwxMzkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gQ29udGFpbnMgYW5hbHlzaXMgdXRpbGl0
aWVzIGZvciBkZWFsaW5nIHdpdGggSExTTCdzIGxhY2sgb2Ygc3VwcG9ydCBmb3IKKy8vIHRoZSB1
c2Ugb2YgaW50cmluc2ljIGZ1bmN0aW9ucyB3aGljaCAoaW1wbGljaXRseSBvciBleHBsaWNpdGx5
KSBjb21wdXRlCisvLyBncmFkaWVudHMgb2YgZnVuY3Rpb25zIHdpdGggZGlzY29udGludWl0aWVz
LiAKKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0RldGVjdERpc2NvbnRpbnVp
dHkuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCisK
K25hbWVzcGFjZSBzaAoreworYm9vbCBEZXRlY3RMb29wRGlzY29udGludWl0eTo6dHJhdmVyc2Uo
VEludGVybU5vZGUgKm5vZGUpCit7CisgICAgbUxvb3BEZXB0aCA9IDA7CisgICAgbUxvb3BEaXNj
b250aW51aXR5ID0gZmFsc2U7CisgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgcmV0dXJu
IG1Mb29wRGlzY29udGludWl0eTsKK30KKworYm9vbCBEZXRlY3RMb29wRGlzY29udGludWl0eTo6
dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbG9vcCkKK3sKKyAgICBpZiAodmlz
aXQgPT0gUHJlVmlzaXQpCisgICAgeworICAgICAgICArK21Mb29wRGVwdGg7CisgICAgfQorICAg
IGVsc2UgaWYgKHZpc2l0ID09IFBvc3RWaXNpdCkKKyAgICB7CisgICAgICAgIC0tbUxvb3BEZXB0
aDsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBEZXRlY3RMb29wRGlzY29u
dGludWl0eTo6dmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2ggKm5vZGUpCit7
CisgICAgaWYgKG1Mb29wRGlzY29udGludWl0eSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBpZiAoIW1Mb29wRGVwdGgpCisgICAgeworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldEZsb3dPcCgpKQorICAgIHsKKyAg
ICAgIGNhc2UgRU9wS2lsbDoKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEJyZWFrOgor
ICAgICAgY2FzZSBFT3BDb250aW51ZToKKyAgICAgIGNhc2UgRU9wUmV0dXJuOgorICAgICAgICBt
TG9vcERpc2NvbnRpbnVpdHkgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuICFtTG9vcERpc2NvbnRpbnVpdHk7
Cit9CisKK2Jvb2wgRGV0ZWN0TG9vcERpc2NvbnRpbnVpdHk6OnZpc2l0QWdncmVnYXRlKFZpc2l0
IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQoreworICAgIHJldHVybiAhbUxvb3BEaXNj
b250aW51aXR5OworfQorCitib29sIGNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkoVEludGVybU5v
ZGUgKm5vZGUpCit7CisgICAgRGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkgZGV0ZWN0TG9vcERpc2Nv
bnRpbnVpdHk7CisgICAgcmV0dXJuIGRldGVjdExvb3BEaXNjb250aW51aXR5LnRyYXZlcnNlKG5v
ZGUpOworfQorCitib29sIERldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp0cmF2ZXJzZShUSW50ZXJt
Tm9kZSAqbm9kZSkKK3sKKyAgICBtR3JhZGllbnRPcGVyYXRpb24gPSBmYWxzZTsKKyAgICBub2Rl
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICByZXR1cm4gbUdyYWRpZW50T3BlcmF0aW9uOworfQorCiti
b29sIERldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50
ZXJtVW5hcnkgKm5vZGUpCit7CisgICAgaWYgKG1HcmFkaWVudE9wZXJhdGlvbikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkp
CisgICAgeworICAgICAgY2FzZSBFT3BERmR4OgorICAgICAgY2FzZSBFT3BERmR5OgorICAgICAg
ICBtR3JhZGllbnRPcGVyYXRpb24gPSB0cnVlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgcmV0dXJuICFtR3JhZGllbnRPcGVyYXRpb247Cit9CisKK2Jvb2wg
RGV0ZWN0R3JhZGllbnRPcGVyYXRpb246OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50
ZXJtQWdncmVnYXRlICpub2RlKQoreworICAgIGlmIChtR3JhZGllbnRPcGVyYXRpb24pCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG5vZGUtPmdldE9wKCkg
PT0gRU9wRnVuY3Rpb25DYWxsKQorICAgIHsKKyAgICAgICAgaWYgKCFub2RlLT5pc1VzZXJEZWZp
bmVkKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6
dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7CisKKyAgICAgICAgICAgIGlmIChuYW1lID09
ICJ0ZXh0dXJlMkQiIHx8CisgICAgICAgICAgICAgICAgbmFtZSA9PSAidGV4dHVyZTJEUHJvaiIg
fHwKKyAgICAgICAgICAgICAgICBuYW1lID09ICJ0ZXh0dXJlQ3ViZSIpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgbUdyYWRpZW50T3BlcmF0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFdo
ZW4gYSB1c2VyIGRlZmluZWQgZnVuY3Rpb24gaXMgY2FsbGVkLCB3ZSBoYXZlIHRvCisgICAgICAg
ICAgICAvLyBjb25zZXJ2YXRpdmVseSBhc3N1bWUgaXQgdG8gY29udGFpbiBncmFkaWVudCBvcGVy
YXRpb25zCisgICAgICAgICAgICBtR3JhZGllbnRPcGVyYXRpb24gPSB0cnVlOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuICFtR3JhZGllbnRPcGVyYXRpb247Cit9CisKK2Jvb2wgY29u
dGFpbnNHcmFkaWVudE9wZXJhdGlvbihUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBEZXRlY3RH
cmFkaWVudE9wZXJhdGlvbiBkZXRlY3RHcmFkaWVudE9wZXJhdGlvbjsKKyAgICByZXR1cm4gZGV0
ZWN0R3JhZGllbnRPcGVyYXRpb24udHJhdmVyc2Uobm9kZSk7Cit9Cit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EZXRlY3REaXNj
b250aW51aXR5LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9EZXRlY3REaXNjb250aW51aXR5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWRkOGJlOTIzMzU5YzNmZTZk
YWM5NGY1MjcyNjBjMzM1YjMzMTM5MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RldGVjdERpc2NvbnRpbnVpdHkuaApA
QCAtMCwwICsxLDUyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIENvbnRhaW5zIGFuYWx5c2lzIHV0aWxp
dGllcyBmb3IgZGVhbGluZyB3aXRoIEhMU0wncyBsYWNrIG9mIHN1cHBvcnQgZm9yCisvLyB0aGUg
dXNlIG9mIGludHJpbnNpYyBmdW5jdGlvbnMgd2hpY2ggKGltcGxpY2l0bHkgb3IgZXhwbGljaXRs
eSkgY29tcHV0ZQorLy8gZ3JhZGllbnRzIG9mIGZ1bmN0aW9ucyB3aXRoIGRpc2NvbnRpbnVpdGll
cy4gCisvLworCisjaWZuZGVmIENPTVBJTEVSX0RFVEVDVERJU0NPTlRJTlVJVFlfSF8KKyNkZWZp
bmUgQ09NUElMRVJfREVURUNURElTQ09OVElOVUlUWV9IXworCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKworbmFtZXNwYWNlIHNoCit7CisvLyBDaGVja3Mg
d2hldGhlciBhIGxvb3AgY2FuIHJ1biBmb3IgYSB2YXJpYWJsZSBudW1iZXIgb2YgaXRlcmF0aW9u
cworY2xhc3MgRGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkgOiBwdWJsaWMgVEludGVybVRyYXZlcnNl
cgoreworICBwdWJsaWM6CisgICAgYm9vbCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7CisK
KyAgcHJvdGVjdGVkOgorICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1C
cmFuY2ggKm5vZGUpOworICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9v
cCAqbG9vcCk7CisgICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFn
Z3JlZ2F0ZSAqbm9kZSk7CisKKyAgICBpbnQgbUxvb3BEZXB0aDsKKyAgICBib29sIG1Mb29wRGlz
Y29udGludWl0eTsKK307CisKK2Jvb2wgY29udGFpbnNMb29wRGlzY29udGludWl0eShUSW50ZXJt
Tm9kZSAqbm9kZSk7CisKKy8vIENoZWNrcyBmb3IgaW50cmluc2ljIGZ1bmN0aW9ucyB3aGljaCBj
b21wdXRlIGdyYWRpZW50cworY2xhc3MgRGV0ZWN0R3JhZGllbnRPcGVyYXRpb24gOiBwdWJsaWMg
VEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgYm9vbCB0cmF2ZXJzZShUSW50ZXJt
Tm9kZSAqbm9kZSk7CisKKyAgcHJvdGVjdGVkOgorICAgIGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2
aXNpdCwgVEludGVybVVuYXJ5ICpub2RlKTsKKyAgICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0
IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKTsKKworICAgIGJvb2wgbUdyYWRpZW50T3Bl
cmF0aW9uOworfTsKKworYm9vbCBjb250YWluc0dyYWRpZW50T3BlcmF0aW9uKFRJbnRlcm1Ob2Rl
ICpub2RlKTsKKworfQorCisjZW5kaWYgICAvLyBDT01QSUxFUl9ERVRFQ1RESVNDT05USU5VSVRZ
X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9EaWFnbm9zdGljcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTk1MDZjMDg0OTQy
MmZlMWRiMzI0OWJhZmI4NzcyZGFiYzU2MTExNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RpYWdub3N0aWNzLmNwcApA
QCAtMCwwICsxLDYzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvRGlhZ25vc3RpY3MuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvY29t
cGlsZXJkZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIK
KyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvU291cmNlTG9jYXRpb24uaCIKKworVERp
YWdub3N0aWNzOjpURGlhZ25vc3RpY3MoVEluZm9TaW5rJiBpbmZvU2luaykgOgorICAgIG1JbmZv
U2luayhpbmZvU2luayksCisgICAgbU51bUVycm9ycygwKSwKKyAgICBtTnVtV2FybmluZ3MoMCkK
K3sKK30KKworVERpYWdub3N0aWNzOjp+VERpYWdub3N0aWNzKCkKK3sKK30KKwordm9pZCBURGlh
Z25vc3RpY3M6OndyaXRlSW5mbyhTZXZlcml0eSBzZXZlcml0eSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiByZWFzb24sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0b2tlbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGV4dHJhKQoreworICAgIFRQcmVmaXhU
eXBlIHByZWZpeCA9IEVQcmVmaXhOb25lOworICAgIHN3aXRjaCAoc2V2ZXJpdHkpCisgICAgewor
ICAgICAgY2FzZSBQUF9FUlJPUjoKKyAgICAgICAgKyttTnVtRXJyb3JzOworICAgICAgICBwcmVm
aXggPSBFUHJlZml4RXJyb3I7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBQUF9XQVJOSU5H
OgorICAgICAgICArK21OdW1XYXJuaW5nczsKKyAgICAgICAgcHJlZml4ID0gRVByZWZpeFdhcm5p
bmc7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgVEluZm9TaW5rQmFzZSYgc2luayA9IG1J
bmZvU2luay5pbmZvOworICAgIC8qIFZDKysgZm9ybWF0OiBmaWxlKGxpbmVudW0pIDogZXJyb3Ig
IzogJ3Rva2VuJyA6IGV4dHJhaW5mbyAqLworICAgIHNpbmsucHJlZml4KHByZWZpeCk7CisgICAg
c2luay5sb2NhdGlvbihsb2MuZmlsZSwgbG9jLmxpbmUpOworICAgIHNpbmsgPDwgIiciIDw8IHRv
a2VuIDw8ICAiJyA6ICIgPDwgcmVhc29uIDw8ICIgIiA8PCBleHRyYSA8PCAiXG4iOworfQorCit2
b2lkIFREaWFnbm9zdGljczo6d3JpdGVEZWJ1Zyhjb25zdCBzdGQ6OnN0cmluZyYgc3RyKQorewor
ICAgIG1JbmZvU2luay5kZWJ1ZyA8PCBzdHI7Cit9CisKK3ZvaWQgVERpYWdub3N0aWNzOjpwcmlu
dChJRCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcDo6U291cmNlTG9jYXRp
b24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdGV4
dCkKK3sKKyAgICB3cml0ZUluZm8oc2V2ZXJpdHkoaWQpLCBsb2MsIG1lc3NhZ2UoaWQpLCB0ZXh0
LCAiIik7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlhZ25vc3RpY3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYjcxYmIxMjA0
MjI4YTc0NzM3NGEyNmVmZDg5YzdjNjcyYmI1NmI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlhZ25vc3RpY3MuaApA
QCAtMCwwICsxLDQ0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9ESUFHTk9T
VElDU19IXworI2RlZmluZSBDT01QSUxFUl9ESUFHTk9TVElDU19IXworCisjaW5jbHVkZSAiY29t
cGlsZXIvcHJlcHJvY2Vzc29yL0RpYWdub3N0aWNzQmFzZS5oIgorCitjbGFzcyBUSW5mb1Npbms7
CisKK2NsYXNzIFREaWFnbm9zdGljcyA6IHB1YmxpYyBwcDo6RGlhZ25vc3RpY3MKK3sKKyAgcHVi
bGljOgorICAgIFREaWFnbm9zdGljcyhUSW5mb1NpbmsmIGluZm9TaW5rKTsKKyAgICB2aXJ0dWFs
IH5URGlhZ25vc3RpY3MoKTsKKworICAgIFRJbmZvU2luayYgaW5mb1NpbmsoKSB7IHJldHVybiBt
SW5mb1Npbms7IH0KKworICAgIGludCBudW1FcnJvcnMoKSBjb25zdCB7IHJldHVybiBtTnVtRXJy
b3JzOyB9CisgICAgaW50IG51bVdhcm5pbmdzKCkgY29uc3QgeyByZXR1cm4gbU51bVdhcm5pbmdz
OyB9CisKKyAgICB2b2lkIHdyaXRlSW5mbyhTZXZlcml0eSBzZXZlcml0eSwKKyAgICAgICAgICAg
ICAgICAgICBjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdGQ6OnN0cmluZyYgcmVhc29uLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0
ZDo6c3RyaW5nJiB0b2tlbiwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYg
ZXh0cmEpOworCisgICAgdm9pZCB3cml0ZURlYnVnKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIpOwor
CisgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoSUQgaWQsCisgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdGV4dCk7CisKKyAgcHJpdmF0ZToKKyAgICBU
SW5mb1NpbmsmIG1JbmZvU2luazsKKyAgICBpbnQgbU51bUVycm9yczsKKyAgICBpbnQgbU51bVdh
cm5pbmdzOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9ESUFHTk9TVElDU19IXwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGly
ZWN0aXZlSGFuZGxlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NjJjOGFlNjI0MDFi
ZmIzNjllZjBmOGVjZGE4ODVhMmRlNjQ4NWIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFuZGxlci5j
cHAKQEAgLTAsMCArMSwxNjEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmgiCisKKyNpbmNsdWRlIDxzc3RyZWFtPgorCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9jb21waWxlcmRlYnVnLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5oIgorCitzdGF0aWMgVEJlaGF2aW9yIGdl
dEJlaGF2aW9yKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIpCit7CisgICAgc3RhdGljIGNvbnN0IHN0
ZDo6c3RyaW5nIGtSZXF1aXJlKCJyZXF1aXJlIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3Ry
aW5nIGtFbmFibGUoImVuYWJsZSIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlz
YWJsZSgiZGlzYWJsZSIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrV2Fybigid2Fy
biIpOworCisgICAgaWYgKHN0ciA9PSBrUmVxdWlyZSkgcmV0dXJuIEVCaFJlcXVpcmU7CisgICAg
ZWxzZSBpZiAoc3RyID09IGtFbmFibGUpIHJldHVybiBFQmhFbmFibGU7CisgICAgZWxzZSBpZiAo
c3RyID09IGtEaXNhYmxlKSByZXR1cm4gRUJoRGlzYWJsZTsKKyAgICBlbHNlIGlmIChzdHIgPT0g
a1dhcm4pIHJldHVybiBFQmhXYXJuOworICAgIHJldHVybiBFQmhVbmRlZmluZWQ7Cit9CisKK1RE
aXJlY3RpdmVIYW5kbGVyOjpURGlyZWN0aXZlSGFuZGxlcihURXh0ZW5zaW9uQmVoYXZpb3ImIGV4
dEJlaGF2aW9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9z
dGljcyYgZGlhZ25vc3RpY3MpCisgICAgOiBtRXh0ZW5zaW9uQmVoYXZpb3IoZXh0QmVoYXZpb3Ip
LAorICAgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQoreworfQorCitURGlyZWN0aXZlSGFu
ZGxlcjo6flREaXJlY3RpdmVIYW5kbGVyKCkKK3sKK30KKwordm9pZCBURGlyZWN0aXZlSGFuZGxl
cjo6aGFuZGxlRXJyb3IoY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbXNnKQoreworICAg
IG1EaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpQUF9FUlJPUiwgbG9jLCBt
c2csICIiLCAiIik7Cit9CisKK3ZvaWQgVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZVByYWdtYShj
b25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpCit7CisgICAgc3RhdGlj
IGNvbnN0IHN0ZDo6c3RyaW5nIGtTVERHTCgiU1RER0wiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3Rk
OjpzdHJpbmcga09wdGltaXplKCJvcHRpbWl6ZSIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0
cmluZyBrRGVidWcoImRlYnVnIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtPbigi
b24iKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga09mZigib2ZmIik7CisKKyAgICBi
b29sIGludmFsaWRWYWx1ZSA9IGZhbHNlOworICAgIGlmIChuYW1lID09IGtTVERHTCkKKyAgICB7
CisgICAgICAgIC8vIFRoZSBTVERHTCBwcmFnbWEgaXMgdXNlZCB0byByZXNlcnZlIHByYWdtYXMg
Zm9yIHVzZSBieSBmdXR1cmUKKyAgICAgICAgLy8gcmV2aXNpb25zIG9mIEdMU0wuIElnbm9yZSBp
dC4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBlbHNlIGlmIChuYW1lID09IGtPcHRpbWl6
ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSA9PSBrT24pIG1QcmFnbWEub3B0aW1pemUgPSB0
cnVlOworICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBrT2ZmKSBtUHJhZ21hLm9wdGltaXplID0g
ZmFsc2U7CisgICAgICAgIGVsc2UgaW52YWxpZFZhbHVlID0gdHJ1ZTsKKyAgICB9CisgICAgZWxz
ZSBpZiAobmFtZSA9PSBrRGVidWcpCisgICAgeworICAgICAgICBpZiAodmFsdWUgPT0ga09uKSBt
UHJhZ21hLmRlYnVnID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0ga09mZikgbVBy
YWdtYS5kZWJ1ZyA9IGZhbHNlOworICAgICAgICBlbHNlIGludmFsaWRWYWx1ZSA9IHRydWU7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy5yZXBvcnQocHA6OkRp
YWdub3N0aWNzOjpQUF9VTlJFQ09HTklaRURfUFJBR01BLCBsb2MsIG5hbWUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGludmFsaWRWYWx1ZSkKKyAgICAgIG1EaWFnbm9zdGlj
cy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpQUF9FUlJPUiwgbG9jLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiaW52YWxpZCBwcmFnbWEgdmFsdWUiLCB2YWx1ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIidvbicgb3IgJ29mZicgZXhwZWN0ZWQiKTsKK30KKwordm9p
ZCBURGlyZWN0aXZlSGFuZGxlcjo6aGFuZGxlRXh0ZW5zaW9uKGNvbnN0IHBwOjpTb3VyY2VMb2Nh
dGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHN0ZDo6c3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBiZWhhdmlvcikKK3sKKyAgICBzdGF0aWMgY29uc3Qgc3Rk
OjpzdHJpbmcga0V4dEFsbCgiYWxsIik7CisKKyAgICBUQmVoYXZpb3IgYmVoYXZpb3JWYWwgPSBn
ZXRCZWhhdmlvcihiZWhhdmlvcik7CisgICAgaWYgKGJlaGF2aW9yVmFsID09IEVCaFVuZGVmaW5l
ZCkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNz
OjpQUF9FUlJPUiwgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZWhhdmlv
ciIsIG5hbWUsICJpbnZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
bmFtZSA9PSBrRXh0QWxsKQorICAgIHsKKyAgICAgICAgaWYgKGJlaGF2aW9yVmFsID09IEVCaFJl
cXVpcmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EaWFnbm9zdGljcy53cml0ZUluZm8ocHA6
OkRpYWdub3N0aWNzOjpQUF9FUlJPUiwgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiZXh0ZW5zaW9uIiwgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImNhbm5vdCBoYXZlICdyZXF1aXJlJyBiZWhhdmlvciIpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKGJlaGF2aW9yVmFsID09IEVCaEVuYWJsZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgbURpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OlBQX0VSUk9SLCBs
b2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHRlbnNpb24iLCBuYW1l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IGhhdmUgJ2VuYWJs
ZScgYmVoYXZpb3IiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGZvciAoVEV4dGVuc2lvbkJlaGF2aW9yOjppdGVyYXRvciBpdGVyID0gbUV4dGVuc2lv
bkJlaGF2aW9yLmJlZ2luKCk7CisgICAgICAgICAgICAgICAgIGl0ZXIgIT0gbUV4dGVuc2lvbkJl
aGF2aW9yLmVuZCgpOyArK2l0ZXIpCisgICAgICAgICAgICAgICAgaXRlci0+c2Vjb25kID0gYmVo
YXZpb3JWYWw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFRFeHRl
bnNpb25CZWhhdmlvcjo6aXRlcmF0b3IgaXRlciA9IG1FeHRlbnNpb25CZWhhdmlvci5maW5kKG5h
bWUpOworICAgIGlmIChpdGVyICE9IG1FeHRlbnNpb25CZWhhdmlvci5lbmQoKSkKKyAgICB7Cisg
ICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgcHA6OkRpYWdub3N0aWNzOjpTZXZlcml0eSBzZXZlcml0eSA9IHBwOjpEaWFnbm9z
dGljczo6UFBfRVJST1I7CisgICAgc3dpdGNoIChiZWhhdmlvclZhbCkgeworICAgICAgY2FzZSBF
QmhSZXF1aXJlOgorICAgICAgICBzZXZlcml0eSA9IHBwOjpEaWFnbm9zdGljczo6UFBfRVJST1I7
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFQmhFbmFibGU6CisgICAgICBjYXNlIEVCaFdh
cm46CisgICAgICBjYXNlIEVCaERpc2FibGU6CisgICAgICAgIHNldmVyaXR5ID0gcHA6OkRpYWdu
b3N0aWNzOjpQUF9XQVJOSU5HOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBtRGlhZ25vc3Rp
Y3Mud3JpdGVJbmZvKHNldmVyaXR5LCBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ZXh0ZW5zaW9uIiwgbmFtZSwgImlzIG5vdCBzdXBwb3J0ZWQiKTsKK30KKwordm9pZCBURGlyZWN0
aXZlSGFuZGxlcjo6aGFuZGxlVmVyc2lvbihjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZlcnNpb24pCit7Cisg
ICAgc3RhdGljIGNvbnN0IGludCBrVmVyc2lvbiA9IDEwMDsKKworICAgIGlmICh2ZXJzaW9uICE9
IGtWZXJzaW9uKQorICAgIHsKKyAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOworICAg
ICAgICBzdHJlYW0gPDwgdmVyc2lvbjsKKyAgICAgICAgc3RkOjpzdHJpbmcgc3RyID0gc3RyZWFt
LnN0cigpOworICAgICAgICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6
UFBfRVJST1IsIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmVyc2lvbiBu
dW1iZXIiLCBzdHIsICJub3Qgc3VwcG9ydGVkIik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFu
ZGxlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
RGlyZWN0aXZlSGFuZGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmViNWYwNTU0OTQ5ODg5MTVjMTRjMmM2YmZh
Y2FiMWFhNGNkY2UzMWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmgKQEAgLTAsMCArMSw0
NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfRElSRUNUSVZFX0hBTkRMRVJf
SF8KKyNkZWZpbmUgQ09NUElMRVJfRElSRUNUSVZFX0hBTkRMRVJfSF8KKworI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvRXh0ZW5zaW9uQmVoYXZpb3IuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1ByYWdtYS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9E
aXJlY3RpdmVIYW5kbGVyQmFzZS5oIgorCitjbGFzcyBURGlhZ25vc3RpY3M7CisKK2NsYXNzIFRE
aXJlY3RpdmVIYW5kbGVyIDogcHVibGljIHBwOjpEaXJlY3RpdmVIYW5kbGVyCit7CisgIHB1Ymxp
YzoKKyAgICBURGlyZWN0aXZlSGFuZGxlcihURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9y
LAorICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9zdGljcyYgZGlhZ25vc3RpY3MpOworICAg
IHZpcnR1YWwgflREaXJlY3RpdmVIYW5kbGVyKCk7CisKKyAgICBjb25zdCBUUHJhZ21hJiBwcmFn
bWEoKSBjb25zdCB7IHJldHVybiBtUHJhZ21hOyB9CisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2
aW9yJiBleHRlbnNpb25CZWhhdmlvcigpIGNvbnN0IHsgcmV0dXJuIG1FeHRlbnNpb25CZWhhdmlv
cjsgfQorCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUVycm9yKGNvbnN0IHBwOjpTb3VyY2VMb2Nh
dGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmlu
ZyYgbXNnKTsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVQcmFnbWEoY29uc3QgcHA6OlNvdXJj
ZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6
OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6
c3RyaW5nJiB2YWx1ZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXh0ZW5zaW9uKGNvbnN0
IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBzdGQ6OnN0cmluZyYgYmVoYXZpb3IpOworCisgICAgdmlydHVhbCB2b2lkIGhh
bmRsZVZlcnNpb24oY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IHZlcnNpb24pOworCisgIHByaXZhdGU6CisgICAgVFByYWdt
YSBtUHJhZ21hOworICAgIFRFeHRlbnNpb25CZWhhdmlvciYgbUV4dGVuc2lvbkJlaGF2aW9yOwor
ICAgIFREaWFnbm9zdGljcyYgbURpYWdub3N0aWNzOworfTsKKworI2VuZGlmICAvLyBDT01QSUxF
Ul9ESVJFQ1RJVkVfSEFORExFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRXh0ZW5zaW9uQmVoYXZpb3IuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0V4dGVuc2lvbkJlaGF2aW9y
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNWMxNTk1ZmIyMTIxYThlYTc2YmJhMjI1N2M2ZjM2MzU2ZWYwMGU5ZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL0V4dGVuc2lvbkJlaGF2aW9yLmgKQEAgLTAsMCArMSwzNyBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworI2lmbmRlZiBfRVhURU5TSU9OX0JFSEFWSU9SX0lOQ0xVREVEXworI2RlZmlu
ZSBfRVhURU5TSU9OX0JFSEFWSU9SX0lOQ0xVREVEXworCisjaW5jbHVkZSA8bWFwPgorI2luY2x1
ZGUgPHN0cmluZz4KKwordHlwZWRlZiBlbnVtCit7CisgICAgRUJoUmVxdWlyZSwKKyAgICBFQmhF
bmFibGUsCisgICAgRUJoV2FybiwKKyAgICBFQmhEaXNhYmxlLAorICAgIEVCaFVuZGVmaW5lZAor
fSBUQmVoYXZpb3I7CisKK2lubGluZSBjb25zdCBjaGFyKiBnZXRCZWhhdmlvclN0cmluZyhUQmVo
YXZpb3IgYikKK3sKKyAgICBzd2l0Y2goYikKKyAgICB7CisgICAgICBjYXNlIEVCaFJlcXVpcmU6
IHJldHVybiAicmVxdWlyZSI7CisgICAgICBjYXNlIEVCaEVuYWJsZTogcmV0dXJuICJlbmFibGUi
OworICAgICAgY2FzZSBFQmhXYXJuOiByZXR1cm4gIndhcm4iOworICAgICAgY2FzZSBFQmhEaXNh
YmxlOiByZXR1cm4gImRpc2FibGUiOworICAgICAgZGVmYXVsdDogcmV0dXJuIE5VTEw7CisgICAg
fQorfQorCisvLyBNYXBwaW5nIGJldHdlZW4gZXh0ZW5zaW9uIG5hbWUgYW5kIGJlaGF2aW9yLgor
dHlwZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgVEJlaGF2aW9yPiBURXh0ZW5zaW9uQmVoYXZp
b3I7CisKKyNlbmRpZiAvLyBfRVhURU5TSU9OX1RBQkxFX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRm9yTG9vcFVu
cm9sbC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9Gb3JMb29wVW5yb2xsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OWU2ZjFhNjJiMWI5NTkyNzcwNjA4MDE1
NWI0MWY4NjdiZDYzYzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRm9yTG9vcFVucm9sbC5jcHAKQEAgLTAsMCArMSwy
MTUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L0Zvckxvb3BVbnJvbGwuaCIKKworbmFtZXNwYWNlIHsKKworY2xhc3MgSW50ZWdlckZvckxvb3BV
bnJvbGxNYXJrZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7CitwdWJsaWM6CisKKyAgICB2
aXJ0dWFsIGJvb2wgdmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCogbm9kZSkKKyAgICB7Cisg
ICAgICAgIC8vIFRoaXMgaXMgY2FsbGVkIGFmdGVyIFZhbGlkYXRlTGltaXRhdGlvbnMgcGFzcywg
c28gYWxsIHRoZSBBU1NFUlQKKyAgICAgICAgLy8gc2hvdWxkIG5ldmVyIGZhaWwuCisgICAgICAg
IC8vIFNlZSBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvb3BJbml0KCkuCisgICAg
ICAgIEFTU0VSVChub2RlKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmdldFR5cGUoKSA9PSBFTG9v
cEZvcik7CisgICAgICAgIEFTU0VSVChub2RlLT5nZXRJbml0KCkpOworICAgICAgICBUSW50ZXJt
QWdncmVnYXRlKiBkZWNsID0gbm9kZS0+Z2V0SW5pdCgpLT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAg
ICAgICBBU1NFUlQoZGVjbCAmJiBkZWNsLT5nZXRPcCgpID09IEVPcERlY2xhcmF0aW9uKTsKKyAg
ICAgICAgVEludGVybVNlcXVlbmNlJiBkZWNsU2VxID0gZGVjbC0+Z2V0U2VxdWVuY2UoKTsKKyAg
ICAgICAgQVNTRVJUKGRlY2xTZXEuc2l6ZSgpID09IDEpOworICAgICAgICBUSW50ZXJtQmluYXJ5
KiBkZWNsSW5pdCA9IGRlY2xTZXFbMF0tPmdldEFzQmluYXJ5Tm9kZSgpOworICAgICAgICBBU1NF
UlQoZGVjbEluaXQgJiYgZGVjbEluaXQtPmdldE9wKCkgPT0gRU9wSW5pdGlhbGl6ZSk7CisgICAg
ICAgIEFTU0VSVChkZWNsSW5pdC0+Z2V0TGVmdCgpKTsKKyAgICAgICAgVEludGVybVN5bWJvbCog
c3ltYm9sID0gZGVjbEluaXQtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgICAg
IEFTU0VSVChzeW1ib2wpOworICAgICAgICBUQmFzaWNUeXBlIHR5cGUgPSBzeW1ib2wtPmdldEJh
c2ljVHlwZSgpOworICAgICAgICBBU1NFUlQodHlwZSA9PSBFYnRJbnQgfHwgdHlwZSA9PSBFYnRG
bG9hdCk7CisgICAgICAgIGlmICh0eXBlID09IEVidEludCkKKyAgICAgICAgICAgIG5vZGUtPnNl
dFVucm9sbEZsYWcodHJ1ZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworfTsKKwor
fSAgLy8gYW5vbnltb3VzIG5hbWVwc2FjZQorCit2b2lkIEZvckxvb3BVbnJvbGw6OkZpbGxMb29w
SW5kZXhJbmZvKFRJbnRlcm1Mb29wKiBub2RlLCBUTG9vcEluZGV4SW5mbyYgaW5mbykKK3sKKyAg
ICBBU1NFUlQobm9kZS0+Z2V0VHlwZSgpID09IEVMb29wRm9yKTsKKyAgICBBU1NFUlQobm9kZS0+
Z2V0VW5yb2xsRmxhZygpKTsKKworICAgIFRJbnRlcm1Ob2RlKiBpbml0ID0gbm9kZS0+Z2V0SW5p
dCgpOworICAgIEFTU0VSVChpbml0ICE9IE5VTEwpOworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGRl
Y2wgPSBpbml0LT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAgIEFTU0VSVCgoZGVjbCAhPSBOVUxMKSAm
JiAoZGVjbC0+Z2V0T3AoKSA9PSBFT3BEZWNsYXJhdGlvbikpOworICAgIFRJbnRlcm1TZXF1ZW5j
ZSYgZGVjbFNlcSA9IGRlY2wtPmdldFNlcXVlbmNlKCk7CisgICAgQVNTRVJUKGRlY2xTZXEuc2l6
ZSgpID09IDEpOworICAgIFRJbnRlcm1CaW5hcnkqIGRlY2xJbml0ID0gZGVjbFNlcVswXS0+Z2V0
QXNCaW5hcnlOb2RlKCk7CisgICAgQVNTRVJUKChkZWNsSW5pdCAhPSBOVUxMKSAmJiAoZGVjbElu
aXQtPmdldE9wKCkgPT0gRU9wSW5pdGlhbGl6ZSkpOworICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJv
bCA9IGRlY2xJbml0LT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOworICAgIEFTU0VSVChz
eW1ib2wgIT0gTlVMTCk7CisgICAgQVNTRVJUKHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0
SW50KTsKKworICAgIGluZm8uaWQgPSBzeW1ib2wtPmdldElkKCk7CisKKyAgICBBU1NFUlQoZGVj
bEluaXQtPmdldFJpZ2h0KCkgIT0gTlVMTCk7CisgICAgVEludGVybUNvbnN0YW50VW5pb24qIGlu
aXROb2RlID0gZGVjbEluaXQtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAg
IEFTU0VSVChpbml0Tm9kZSAhPSBOVUxMKTsKKworICAgIGluZm8uaW5pdFZhbHVlID0gZXZhbHVh
dGVJbnRDb25zdGFudChpbml0Tm9kZSk7CisgICAgaW5mby5jdXJyZW50VmFsdWUgPSBpbmZvLmlu
aXRWYWx1ZTsKKworICAgIFRJbnRlcm1Ob2RlKiBjb25kID0gbm9kZS0+Z2V0Q29uZGl0aW9uKCk7
CisgICAgQVNTRVJUKGNvbmQgIT0gTlVMTCk7CisgICAgVEludGVybUJpbmFyeSogYmluT3AgPSBj
b25kLT5nZXRBc0JpbmFyeU5vZGUoKTsKKyAgICBBU1NFUlQoYmluT3AgIT0gTlVMTCk7CisgICAg
QVNTRVJUKGJpbk9wLT5nZXRSaWdodCgpICE9IE5VTEwpOworICAgIEFTU0VSVChiaW5PcC0+Z2V0
UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCkgIT0gTlVMTCk7CisKKyAgICBpbmZvLmluY3Jl
bWVudFZhbHVlID0gZ2V0TG9vcEluY3JlbWVudChub2RlKTsKKyAgICBpbmZvLnN0b3BWYWx1ZSA9
IGV2YWx1YXRlSW50Q29uc3RhbnQoCisgICAgICAgIGJpbk9wLT5nZXRSaWdodCgpLT5nZXRBc0Nv
bnN0YW50VW5pb24oKSk7CisgICAgaW5mby5vcCA9IGJpbk9wLT5nZXRPcCgpOworfQorCit2b2lk
IEZvckxvb3BVbnJvbGw6OlN0ZXAoKQoreworICAgIEFTU0VSVChtTG9vcEluZGV4U3RhY2suc2l6
ZSgpID4gMCk7CisgICAgVExvb3BJbmRleEluZm8mIGluZm8gPSBtTG9vcEluZGV4U3RhY2tbbUxv
b3BJbmRleFN0YWNrLnNpemUoKSAtIDFdOworICAgIGluZm8uY3VycmVudFZhbHVlICs9IGluZm8u
aW5jcmVtZW50VmFsdWU7Cit9CisKK2Jvb2wgRm9yTG9vcFVucm9sbDo6U2F0aXNmaWVzTG9vcENv
bmRpdGlvbigpCit7CisgICAgQVNTRVJUKG1Mb29wSW5kZXhTdGFjay5zaXplKCkgPiAwKTsKKyAg
ICBUTG9vcEluZGV4SW5mbyYgaW5mbyA9IG1Mb29wSW5kZXhTdGFja1ttTG9vcEluZGV4U3RhY2su
c2l6ZSgpIC0gMV07CisgICAgLy8gUmVsYXRpb25hbCBvcGVyYXRvciBpcyBvbmUgb2Y6ID4gPj0g
PCA8PSA9PSBvciAhPS4KKyAgICBzd2l0Y2ggKGluZm8ub3ApIHsKKyAgICAgIGNhc2UgRU9wRXF1
YWw6CisgICAgICAgIHJldHVybiAoaW5mby5jdXJyZW50VmFsdWUgPT0gaW5mby5zdG9wVmFsdWUp
OworICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKKyAgICAgICAgcmV0dXJuIChpbmZvLmN1cnJlbnRW
YWx1ZSAhPSBpbmZvLnN0b3BWYWx1ZSk7CisgICAgICBjYXNlIEVPcExlc3NUaGFuOgorICAgICAg
ICByZXR1cm4gKGluZm8uY3VycmVudFZhbHVlIDwgaW5mby5zdG9wVmFsdWUpOworICAgICAgY2Fz
ZSBFT3BHcmVhdGVyVGhhbjoKKyAgICAgICAgcmV0dXJuIChpbmZvLmN1cnJlbnRWYWx1ZSA+IGlu
Zm8uc3RvcFZhbHVlKTsKKyAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoKKyAgICAgICAgcmV0
dXJuIChpbmZvLmN1cnJlbnRWYWx1ZSA8PSBpbmZvLnN0b3BWYWx1ZSk7CisgICAgICBjYXNlIEVP
cEdyZWF0ZXJUaGFuRXF1YWw6CisgICAgICAgIHJldHVybiAoaW5mby5jdXJyZW50VmFsdWUgPj0g
aW5mby5zdG9wVmFsdWUpOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEZvckxvb3BVbnJvbGw6Ok5lZWRz
VG9SZXBsYWNlU3ltYm9sV2l0aFZhbHVlKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCkKK3sKKyAgICBm
b3IgKFRWZWN0b3I8VExvb3BJbmRleEluZm8+OjppdGVyYXRvciBpID0gbUxvb3BJbmRleFN0YWNr
LmJlZ2luKCk7CisgICAgICAgICBpICE9IG1Mb29wSW5kZXhTdGFjay5lbmQoKTsKKyAgICAgICAg
ICsraSkgeworICAgICAgICBpZiAoaS0+aWQgPT0gc3ltYm9sLT5nZXRJZCgpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworaW50IEZvckxv
b3BVbnJvbGw6OkdldExvb3BJbmRleFZhbHVlKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCkKK3sKKyAg
ICBmb3IgKFRWZWN0b3I8VExvb3BJbmRleEluZm8+OjppdGVyYXRvciBpID0gbUxvb3BJbmRleFN0
YWNrLmJlZ2luKCk7CisgICAgICAgICBpICE9IG1Mb29wSW5kZXhTdGFjay5lbmQoKTsKKyAgICAg
ICAgICsraSkgeworICAgICAgICBpZiAoaS0+aWQgPT0gc3ltYm9sLT5nZXRJZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIGktPmN1cnJlbnRWYWx1ZTsKKyAgICB9CisgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgRm9yTG9vcFVucm9sbDo6UHVzaChUTG9vcElu
ZGV4SW5mbyYgaW5mbykKK3sKKyAgICBtTG9vcEluZGV4U3RhY2sucHVzaF9iYWNrKGluZm8pOwor
fQorCit2b2lkIEZvckxvb3BVbnJvbGw6OlBvcCgpCit7CisgICAgbUxvb3BJbmRleFN0YWNrLnBv
cF9iYWNrKCk7Cit9CisKKy8vIHN0YXRpYwordm9pZCBGb3JMb29wVW5yb2xsOjpNYXJrRm9yTG9v
cHNXaXRoSW50ZWdlckluZGljZXNGb3JVbnJvbGxpbmcoCisgICAgVEludGVybU5vZGUqIHJvb3Qp
Cit7CisgICAgQVNTRVJUKHJvb3QpOworCisgICAgSW50ZWdlckZvckxvb3BVbnJvbGxNYXJrZXIg
bWFya2VyOworICAgIHJvb3QtPnRyYXZlcnNlKCZtYXJrZXIpOworfQorCitpbnQgRm9yTG9vcFVu
cm9sbDo6Z2V0TG9vcEluY3JlbWVudChUSW50ZXJtTG9vcCogbm9kZSkKK3sKKyAgICBUSW50ZXJt
Tm9kZSogZXhwciA9IG5vZGUtPmdldEV4cHJlc3Npb24oKTsKKyAgICBBU1NFUlQoZXhwciAhPSBO
VUxMKTsKKyAgICAvLyBmb3IgZXhwcmVzc2lvbiBoYXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9y
bXM6CisgICAgLy8gICAgIGxvb3BfaW5kZXgrKworICAgIC8vICAgICBsb29wX2luZGV4LS0KKyAg
ICAvLyAgICAgbG9vcF9pbmRleCArPSBjb25zdGFudF9leHByZXNzaW9uCisgICAgLy8gICAgIGxv
b3BfaW5kZXggLT0gY29uc3RhbnRfZXhwcmVzc2lvbgorICAgIC8vICAgICArK2xvb3BfaW5kZXgK
KyAgICAvLyAgICAgLS1sb29wX2luZGV4CisgICAgLy8gVGhlIGxhc3QgdHdvIGZvcm1zIGFyZSBu
b3Qgc3BlY2lmaWVkIGluIHRoZSBzcGVjLCBidXQgSSBhbSBhc3N1bWluZworICAgIC8vIGl0cyBh
biBvdmVyc2lnaHQuCisgICAgVEludGVybVVuYXJ5KiB1bk9wID0gZXhwci0+Z2V0QXNVbmFyeU5v
ZGUoKTsKKyAgICBUSW50ZXJtQmluYXJ5KiBiaW5PcCA9IHVuT3AgPyBOVUxMIDogZXhwci0+Z2V0
QXNCaW5hcnlOb2RlKCk7CisKKyAgICBUT3BlcmF0b3Igb3AgPSBFT3BOdWxsOworICAgIFRJbnRl
cm1Db25zdGFudFVuaW9uKiBpbmNyZW1lbnROb2RlID0gTlVMTDsKKyAgICBpZiAodW5PcCAhPSBO
VUxMKSB7CisgICAgICAgIG9wID0gdW5PcC0+Z2V0T3AoKTsKKyAgICB9IGVsc2UgaWYgKGJpbk9w
ICE9IE5VTEwpIHsKKyAgICAgICAgb3AgPSBiaW5PcC0+Z2V0T3AoKTsKKyAgICAgICAgQVNTRVJU
KGJpbk9wLT5nZXRSaWdodCgpICE9IE5VTEwpOworICAgICAgICBpbmNyZW1lbnROb2RlID0gYmlu
T3AtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAgICAgICBBU1NFUlQoaW5j
cmVtZW50Tm9kZSAhPSBOVUxMKTsKKyAgICB9CisKKyAgICBpbnQgaW5jcmVtZW50ID0gMDsKKyAg
ICAvLyBUaGUgb3BlcmF0b3IgaXMgb25lIG9mOiArKyAtLSArPSAtPS4KKyAgICBzd2l0Y2ggKG9w
KSB7CisgICAgICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQcmVJ
bmNyZW1lbnQ6CisgICAgICAgICAgICBBU1NFUlQoKHVuT3AgIT0gTlVMTCkgJiYgKGJpbk9wID09
IE5VTEwpKTsKKyAgICAgICAgICAgIGluY3JlbWVudCA9IDE7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OgorICAgICAgICBjYXNlIEVPcFByZURlY3Jl
bWVudDoKKyAgICAgICAgICAgIEFTU0VSVCgodW5PcCAhPSBOVUxMKSAmJiAoYmluT3AgPT0gTlVM
TCkpOworICAgICAgICAgICAgaW5jcmVtZW50ID0gLTE7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BBZGRBc3NpZ246CisgICAgICAgICAgICBBU1NFUlQoKHVuT3AgPT0gTlVM
TCkgJiYgKGJpbk9wICE9IE5VTEwpKTsKKyAgICAgICAgICAgIGluY3JlbWVudCA9IGV2YWx1YXRl
SW50Q29uc3RhbnQoaW5jcmVtZW50Tm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BTdWJBc3NpZ246CisgICAgICAgICAgICBBU1NFUlQoKHVuT3AgPT0gTlVMTCkgJiYg
KGJpbk9wICE9IE5VTEwpKTsKKyAgICAgICAgICAgIGluY3JlbWVudCA9IC0gZXZhbHVhdGVJbnRD
b25zdGFudChpbmNyZW1lbnROb2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gaW5j
cmVtZW50OworfQorCitpbnQgRm9yTG9vcFVucm9sbDo6ZXZhbHVhdGVJbnRDb25zdGFudChUSW50
ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSkKK3sKKyAgICBBU1NFUlQoKG5vZGUgIT0gTlVMTCkgJiYg
KG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCkgIT0gTlVMTCkpOworICAgIHJldHVybiBub2Rl
LT5nZXRJQ29uc3QoMCk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hZmQ3MGQxZmQyNWM5OTU0NjgwY2Q0ZGFhMDI4NWMwMDhkZWNiMDZkCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Rm9yTG9vcFVucm9sbC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVm
IENPTVBJTEVSX0ZPUkxPT1BVTlJPTExfSF8KKyNkZWZpbmUgQ09NUElMRVJfRk9STE9PUFVOUk9M
TF9IXworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKwor
c3RydWN0IFRMb29wSW5kZXhJbmZvIHsKKyAgICBpbnQgaWQ7CisgICAgaW50IGluaXRWYWx1ZTsK
KyAgICBpbnQgc3RvcFZhbHVlOworICAgIGludCBpbmNyZW1lbnRWYWx1ZTsKKyAgICBUT3BlcmF0
b3Igb3A7CisgICAgaW50IGN1cnJlbnRWYWx1ZTsKK307CisKK2NsYXNzIEZvckxvb3BVbnJvbGwg
eworcHVibGljOgorICAgIEZvckxvb3BVbnJvbGwoKSB7IH0KKworICAgIHZvaWQgRmlsbExvb3BJ
bmRleEluZm8oVEludGVybUxvb3AqIG5vZGUsIFRMb29wSW5kZXhJbmZvJiBpbmZvKTsKKworICAg
IC8vIFVwZGF0ZSB0aGUgaW5mby5jdXJyZW50VmFsdWUgZm9yIHRoZSBuZXh0IGxvb3AgaXRlcmF0
aW9uLgorICAgIHZvaWQgU3RlcCgpOworCisgICAgLy8gUmV0dXJuIGZhbHNlIGlmIGxvb3AgY29u
ZGl0aW9uIGlzIG5vIGxvbmdlciBzYXRpc2ZpZWQuCisgICAgYm9vbCBTYXRpc2ZpZXNMb29wQ29u
ZGl0aW9uKCk7CisKKyAgICAvLyBDaGVjayBpZiB0aGUgc3ltYm9sIGlzIHRoZSBpbmRleCBvZiBh
IGxvb3AgdGhhdCdzIHVucm9sbGVkLgorICAgIGJvb2wgTmVlZHNUb1JlcGxhY2VTeW1ib2xXaXRo
VmFsdWUoVEludGVybVN5bWJvbCogc3ltYm9sKTsKKworICAgIC8vIFJldHVybiB0aGUgY3VycmVu
dCB2YWx1ZSBvZiBhIGdpdmVuIGxvb3AgaW5kZXggc3ltYm9sLgorICAgIGludCBHZXRMb29wSW5k
ZXhWYWx1ZShUSW50ZXJtU3ltYm9sKiBzeW1ib2wpOworCisgICAgdm9pZCBQdXNoKFRMb29wSW5k
ZXhJbmZvJiBpbmZvKTsKKyAgICB2b2lkIFBvcCgpOworCisgICAgc3RhdGljIHZvaWQgTWFya0Zv
ckxvb3BzV2l0aEludGVnZXJJbmRpY2VzRm9yVW5yb2xsaW5nKFRJbnRlcm1Ob2RlKiByb290KTsK
KworcHJpdmF0ZToKKyAgICBpbnQgZ2V0TG9vcEluY3JlbWVudChUSW50ZXJtTG9vcCogbm9kZSk7
CisKKyAgICBpbnQgZXZhbHVhdGVJbnRDb25zdGFudChUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9k
ZSk7CisKKyAgICBUVmVjdG9yPFRMb29wSW5kZXhJbmZvPiBtTG9vcEluZGV4U3RhY2s7Cit9Owor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0hhc2hOYW1lcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvSGFzaE5hbWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzUxMjY1Yjc1OTM1Nzdl
Y2E4ZWI4YjYzOTFmOGViMDY1ODVjMTdhOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0hhc2hOYW1lcy5oCkBAIC0wLDAg
KzEsMTkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfSEFTSF9OQU1F
U19IXworI2RlZmluZSBDT01QSUxFUl9IQVNIX05BTUVTX0hfCisKKyNpbmNsdWRlIDxtYXA+CisK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUg
IkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisjZGVmaW5lIEhBU0hFRF9OQU1FX1BSRUZJWCAid2Vi
Z2xfIgorCit0eXBlZGVmIHN0ZDo6bWFwPFRQZXJzaXN0U3RyaW5nLCBUUGVyc2lzdFN0cmluZz4g
TmFtZU1hcDsKKworI2VuZGlmICAvLyBDT01QSUxFUl9IQVNIX05BTUVTX0hfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2lu
ay5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9J
bmZvU2luay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Q1OTY1OGZmNzZjOTU3NzhmNTBkNDE5ZTlhNzQzZTYz
MjJjOTJhNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL0luZm9TaW5rLmNwcApAQCAtMCwwICsxLDU0IEBACisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgor
Cit2b2lkIFRJbmZvU2lua0Jhc2U6OnByZWZpeChUUHJlZml4VHlwZSBwKSB7CisgICAgc3dpdGNo
KHApIHsKKyAgICAgICAgY2FzZSBFUHJlZml4Tm9uZToKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEVQcmVmaXhXYXJuaW5nOgorICAgICAgICAgICAgc2luay5hcHBlbmQoIldBUk5J
Tkc6ICIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVByZWZpeEVycm9yOgor
ICAgICAgICAgICAgc2luay5hcHBlbmQoIkVSUk9SOiAiKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEVQcmVmaXhJbnRlcm5hbEVycm9yOgorICAgICAgICAgICAgc2luay5hcHBl
bmQoIklOVEVSTkFMIEVSUk9SOiAiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEVQcmVmaXhVbmltcGxlbWVudGVkOgorICAgICAgICAgICAgc2luay5hcHBlbmQoIlVOSU1QTEVN
RU5URUQ6ICIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVByZWZpeE5vdGU6
CisgICAgICAgICAgICBzaW5rLmFwcGVuZCgiTk9URTogIik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNpbmsuYXBwZW5kKCJVTktPV04gRVJST1I6
ICIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIFRJbmZvU2lua0Jhc2U6
OmxvY2F0aW9uKGludCBmaWxlLCBpbnQgbGluZSkgeworICAgIFRQZXJzaXN0U3RyaW5nU3RyZWFt
IHN0cmVhbTsKKyAgICBpZiAobGluZSkKKyAgICAgICAgc3RyZWFtIDw8IGZpbGUgPDwgIjoiIDw8
IGxpbmU7CisgICAgZWxzZQorICAgICAgICBzdHJlYW0gPDwgZmlsZSA8PCAiOj8gIjsKKyAgICBz
dHJlYW0gPDwgIjogIjsKKworICAgIHNpbmsuYXBwZW5kKHN0cmVhbS5zdHIoKSk7Cit9CisKK3Zv
aWQgVEluZm9TaW5rQmFzZTo6bG9jYXRpb24oY29uc3QgVFNvdXJjZUxvYyYgbG9jKSB7CisgICAg
bG9jYXRpb24obG9jLmZpcnN0X2ZpbGUsIGxvYy5maXJzdF9saW5lKTsKK30KKwordm9pZCBUSW5m
b1NpbmtCYXNlOjptZXNzYWdlKFRQcmVmaXhUeXBlIHAsIGNvbnN0IFRTb3VyY2VMb2MmIGxvYywg
Y29uc3QgY2hhciogbSkgeworICAgIHByZWZpeChwKTsKKyAgICBsb2NhdGlvbihsb2MpOworICAg
IHNpbmsuYXBwZW5kKG0pOworICAgIHNpbmsuYXBwZW5kKCJcbiIpOworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1Npbmsu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luZm9T
aW5rLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNjk4YThiNDU0YjNjZmE5ZDRlZDJkMDBiODYxNjdlOGMxMzJkMWZm
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0luZm9TaW5rLmgKQEAgLTAsMCArMSwxMTYgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNpZm5kZWYgX0lORk9TSU5LX0lOQ0xVREVEXworI2RlZmluZSBfSU5GT1NJTktfSU5D
TFVERURfCisKKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21tb24uaCIKKworLy8gUmV0dXJucyB0aGUgZnJhY3Rp
b25hbCBwYXJ0IG9mIHRoZSBnaXZlbiBmbG9hdGluZy1wb2ludCBudW1iZXIuCitpbmxpbmUgZmxv
YXQgZnJhY3Rpb25hbFBhcnQoZmxvYXQgZikgeworICBmbG9hdCBpbnRQYXJ0ID0gMC4wZjsKKyAg
cmV0dXJuIG1vZGZmKGYsICZpbnRQYXJ0KTsKK30KKworLy8KKy8vIFRQcmVmaXhUeXBlIGlzIHVz
ZWQgdG8gY2VudHJhbGl6ZSBob3cgaW5mbyBsb2cgbWVzc2FnZXMgc3RhcnQuCisvLyBTZWUgYmVs
b3cuCisvLworZW51bSBUUHJlZml4VHlwZSB7CisgICAgRVByZWZpeE5vbmUsCisgICAgRVByZWZp
eFdhcm5pbmcsCisgICAgRVByZWZpeEVycm9yLAorICAgIEVQcmVmaXhJbnRlcm5hbEVycm9yLAor
ICAgIEVQcmVmaXhVbmltcGxlbWVudGVkLAorICAgIEVQcmVmaXhOb3RlCit9OworCisvLworLy8g
RW5jYXBzdWxhdGUgaW5mbyBsb2dzIGZvciBhbGwgb2JqZWN0cyB0aGF0IGhhdmUgdGhlbS4KKy8v
CisvLyBUaGUgbWV0aG9kcyBhcmUgYSBnZW5lcmFsIHNldCBvZiB0b29scyBmb3IgZ2V0dGluZyBh
IHZhcmlldHkgb2YKKy8vIG1lc3NhZ2VzIGFuZCB0eXBlcyBpbnNlcnRlZCBpbnRvIHRoZSBsb2cu
CisvLworY2xhc3MgVEluZm9TaW5rQmFzZSB7CitwdWJsaWM6CisgICAgVEluZm9TaW5rQmFzZSgp
IHt9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBUSW5mb1NpbmtCYXNlJiBvcGVy
YXRvcjw8KGNvbnN0IFQmIHQpIHsKKyAgICAgICAgVFBlcnNpc3RTdHJpbmdTdHJlYW0gc3RyZWFt
OworICAgICAgICBzdHJlYW0gPDwgdDsKKyAgICAgICAgc2luay5hcHBlbmQoc3RyZWFtLnN0cigp
KTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICAvLyBPdmVycmlkZSA8PCBvcGVy
YXRvciBmb3Igc3BlY2lmaWMgdHlwZXMuIEl0IGlzIGZhc3RlciB0byBhcHBlbmQgc3RyaW5ncwor
ICAgIC8vIGFuZCBjaGFyYWN0ZXJzIGRpcmVjdGx5IHRvIHRoZSBzaW5rLgorICAgIFRJbmZvU2lu
a0Jhc2UmIG9wZXJhdG9yPDwoY2hhciBjKSB7CisgICAgICAgIHNpbmsuYXBwZW5kKDEsIGMpOwor
ICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIFRJbmZvU2lua0Jhc2UmIG9wZXJhdG9y
PDwoY29uc3QgY2hhciogc3RyKSB7CisgICAgICAgIHNpbmsuYXBwZW5kKHN0cik7CisgICAgICAg
IHJldHVybiAqdGhpczsKKyAgICB9CisgICAgVEluZm9TaW5rQmFzZSYgb3BlcmF0b3I8PChjb25z
dCBUUGVyc2lzdFN0cmluZyYgc3RyKSB7CisgICAgICAgIHNpbmsuYXBwZW5kKHN0cik7CisgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgVEluZm9TaW5rQmFzZSYgb3BlcmF0b3I8PChj
b25zdCBUU3RyaW5nJiBzdHIpIHsKKyAgICAgICAgc2luay5hcHBlbmQoc3RyLmNfc3RyKCkpOwor
ICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIC8vIE1ha2Ugc3VyZSBmbG9hdHMgYXJl
IHdyaXR0ZW4gd2l0aCBjb3JyZWN0IHByZWNpc2lvbi4KKyAgICBUSW5mb1NpbmtCYXNlJiBvcGVy
YXRvcjw8KGZsb2F0IGYpIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYXQgbGVhc3Qgb25l
IGRlY2ltYWwgcG9pbnQgaXMgd3JpdHRlbi4gSWYgYSBudW1iZXIKKyAgICAgICAgLy8gZG9lcyBu
b3QgaGF2ZSBhIGZyYWN0aW9uYWwgcGFydCwgdGhlIGRlZmF1bHQgcHJlY2lzaW9uIGZvcm1hdCBk
b2VzCisgICAgICAgIC8vIG5vdCB3cml0ZSB0aGUgZGVjaW1hbCBwb3J0aW9uIHdoaWNoIGdldHMg
aW50ZXJwcmV0ZWQgYXMgaW50ZWdlciBieQorICAgICAgICAvLyB0aGUgY29tcGlsZXIuCisgICAg
ICAgIFRQZXJzaXN0U3RyaW5nU3RyZWFtIHN0cmVhbTsKKyAgICAgICAgaWYgKGZyYWN0aW9uYWxQ
YXJ0KGYpID09IDAuMGYpIHsKKyAgICAgICAgICAgIHN0cmVhbS5wcmVjaXNpb24oMSk7CisgICAg
ICAgICAgICBzdHJlYW0gPDwgc3RkOjpzaG93cG9pbnQgPDwgc3RkOjpmaXhlZCA8PCBmOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RyZWFtLnVuc2V0ZihzdGQ6Omlvczo6Zml4ZWQp
OworICAgICAgICAgICAgc3RyZWFtLnVuc2V0ZihzdGQ6Omlvczo6c2NpZW50aWZpYyk7CisgICAg
ICAgICAgICBzdHJlYW0ucHJlY2lzaW9uKDgpOworICAgICAgICAgICAgc3RyZWFtIDw8IGY7Cisg
ICAgICAgIH0KKyAgICAgICAgc2luay5hcHBlbmQoc3RyZWFtLnN0cigpKTsKKyAgICAgICAgcmV0
dXJuICp0aGlzOworICAgIH0KKyAgICAvLyBXcml0ZSBib29sZWFuIHZhbHVlcyBhcyB0aGVpciBu
YW1lcyBpbnN0ZWFkIG9mIGludGVncmFsIHZhbHVlLgorICAgIFRJbmZvU2lua0Jhc2UmIG9wZXJh
dG9yPDwoYm9vbCBiKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIHN0ciA9IGIgPyAidHJ1ZSIgOiAi
ZmFsc2UiOworICAgICAgICBzaW5rLmFwcGVuZChzdHIpOworICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgfQorCisgICAgdm9pZCBlcmFzZSgpIHsgc2luay5jbGVhcigpOyB9CisgICAgaW50IHNp
emUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHNpbmsuc2l6ZSgpKTsgfQorCisgICAgY29u
c3QgVFBlcnNpc3RTdHJpbmcmIHN0cigpIGNvbnN0IHsgcmV0dXJuIHNpbms7IH0KKyAgICBjb25z
dCBjaGFyKiBjX3N0cigpIGNvbnN0IHsgcmV0dXJuIHNpbmsuY19zdHIoKTsgfQorCisgICAgdm9p
ZCBwcmVmaXgoVFByZWZpeFR5cGUgcCk7CisgICAgdm9pZCBsb2NhdGlvbihpbnQgZmlsZSwgaW50
IGxpbmUpOworICAgIHZvaWQgbG9jYXRpb24oY29uc3QgVFNvdXJjZUxvYyYgbG9jKTsKKyAgICB2
b2lkIG1lc3NhZ2UoVFByZWZpeFR5cGUgcCwgY29uc3QgVFNvdXJjZUxvYyYgbG9jLCBjb25zdCBj
aGFyKiBtKTsKKworcHJpdmF0ZToKKyAgICBUUGVyc2lzdFN0cmluZyBzaW5rOworfTsKKworY2xh
c3MgVEluZm9TaW5rIHsKK3B1YmxpYzoKKyAgICBUSW5mb1NpbmtCYXNlIGluZm87CisgICAgVElu
Zm9TaW5rQmFzZSBkZWJ1ZzsKKyAgICBUSW5mb1NpbmtCYXNlIG9iajsKK307CisKKyNlbmRpZiAv
LyBfSU5GT1NJTktfSU5DTFVERURfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemUuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmRiNzI4YjIxMjkzNzE2NzAxOTdkZjFkYzhkYWMyOTg0ZWU5YjI3YzgKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9J
bml0aWFsaXplLmNwcApAQCAtMCwwICsxLDU2NCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8K
Ky8vIENyZWF0ZSBzdHJpbmdzIHRoYXQgZGVjbGFyZSBidWlsdC1pbiBkZWZpbml0aW9ucywgYWRk
IGJ1aWx0LWlucyB0aGF0CisvLyBjYW5ub3QgYmUgZXhwcmVzc2VkIGluIHRoZSBmaWxlcywgYW5k
IGVzdGFibGlzaCBtYXBwaW5ncyBiZXR3ZWVuIAorLy8gYnVpbHQtaW4gZnVuY3Rpb25zIGFuZCBv
cGVyYXRvcnMuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXpl
LmgiCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgorCit2
b2lkIEluc2VydEJ1aWx0SW5GdW5jdGlvbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3Bl
YyBzcGVjLCBjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMgJnJlc291cmNlcywgVFN5bWJvbFRhYmxl
ICZzeW1ib2xUYWJsZSkKK3sKKyAgICBUVHlwZSAqZmxvYXQxID0gbmV3IFRUeXBlKEVidEZsb2F0
LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMSk7CisgICAgVFR5cGUgKmZsb2F0MiA9IG5ldyBU
VHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDIpOworICAgIFRUeXBlICpm
bG9hdDMgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAzKTsK
KyAgICBUVHlwZSAqZmxvYXQ0ID0gbmV3IFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2
cUdsb2JhbCwgNCk7CisKKyAgICBUVHlwZSAqaW50MiA9IG5ldyBUVHlwZShFYnRJbnQsIEVicFVu
ZGVmaW5lZCwgRXZxR2xvYmFsLCAyKTsKKyAgICBUVHlwZSAqaW50MyA9IG5ldyBUVHlwZShFYnRJ
bnQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAzKTsKKyAgICBUVHlwZSAqaW50NCA9IG5ldyBU
VHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCA0KTsKKworICAgIC8vCisgICAg
Ly8gQW5nbGUgYW5kIFRyaWdvbm9tZXRyaWMgRnVuY3Rpb25zLgorICAgIC8vCisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJyYWRpYW5zIiwgZmxvYXQxKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInJhZGlhbnMiLCBmbG9hdDIpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAicmFkaWFucyIsIGZsb2F0Myk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJyYWRpYW5zIiwgZmxvYXQ0KTsKKwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZGVncmVlcyIsIGZsb2F0MSk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJkZWdyZWVzIiwgZmxvYXQy
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImRlZ3JlZXMiLCBmbG9h
dDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZGVncmVlcyIsIGZs
b2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInNpbiIsIGZs
b2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJzaW4iLCBmbG9h
dDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAic2luIiwgZmxvYXQz
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInNpbiIsIGZsb2F0NCk7
CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImNvcyIsIGZsb2F0MSk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJjb3MiLCBmbG9hdDIpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiY29zIiwgZmxvYXQzKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImNvcyIsIGZsb2F0NCk7CisKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInRhbiIsIGZsb2F0MSk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJ0YW4iLCBmbG9hdDIpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAidGFuIiwgZmxvYXQzKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRhbiIsIGZsb2F0NCk7CisKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImFzaW4iLCBmbG9hdDEpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiYXNpbiIsIGZsb2F0Mik7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJhc2luIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImFzaW4iLCBmbG9hdDQpOworCisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJhY29zIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImFjb3MiLCBmbG9hdDIpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiYWNvcyIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJhY29zIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiYXRhbiIsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImF0YW4iLCBmbG9hdDIsIGZsb2F0Mik7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJhdGFuIiwgZmxvYXQzLCBm
bG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiYXRhbiIsIGZs
b2F0NCwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAi
YXRhbiIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJh
dGFuIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImF0
YW4iLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiYXRh
biIsIGZsb2F0NCk7CisKKyAgICAvLworICAgIC8vIEV4cG9uZW50aWFsIEZ1bmN0aW9ucy4KKyAg
ICAvLworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAicG93IiwgZmxvYXQx
LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAicG93Iiwg
ZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAi
cG93IiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQ0LCAicG93IiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDEsICJleHAiLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQyLCAiZXhwIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MywgImV4cCIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDQsICJleHAiLCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDEsICJsb2ciLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQyLCAibG9nIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MywgImxvZyIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQs
ICJsb2ciLCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEs
ICJleHAyIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0Miwg
ImV4cDIiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAi
ZXhwMiIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJl
eHAyIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAi
bG9nMiIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJs
b2cyIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImxv
ZzIiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibG9n
MiIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInNx
cnQiLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic3Fy
dCIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzcXJ0
IiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInNxcnQi
LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJpbnZl
cnNlc3FydCIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIs
ICJpbnZlcnNlc3FydCIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDMsICJpbnZlcnNlc3FydCIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDQsICJpbnZlcnNlc3FydCIsIGZsb2F0NCk7CisKKyAgICAvLworICAgIC8vIENv
bW1vbiBGdW5jdGlvbnMuCisgICAgLy8KKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MSwgImFicyIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDIsICJhYnMiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQz
LCAiYWJzIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwg
ImFicyIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwg
InNpZ24iLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAi
c2lnbiIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJz
aWduIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInNp
Z24iLCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJm
bG9vciIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJm
bG9vciIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJm
bG9vciIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJm
bG9vciIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwg
ImNlaWwiLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAi
Y2VpbCIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJj
ZWlsIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImNl
aWwiLCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJm
cmFjdCIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJm
cmFjdCIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJm
cmFjdCIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJm
cmFjdCIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwg
Im1vZCIsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MiwgIm1vZCIsIGZsb2F0MiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MywgIm1vZCIsIGZsb2F0MywgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0NCwgIm1vZCIsIGZsb2F0NCwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgIm1vZCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgIm1vZCIsIGZsb2F0MywgZmxvYXQzKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1vZCIsIGZsb2F0NCwgZmxvYXQ0
KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibWluIiwgZmxvYXQx
LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibWluIiwg
ZmxvYXQyLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAi
bWluIiwgZmxvYXQzLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQ0LCAibWluIiwgZmxvYXQ0LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQyLCAibWluIiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQzLCAibWluIiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibWluIiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJtYXgiLCBmbG9hdDEsIGZsb2F0MSk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJtYXgiLCBmbG9hdDIsIGZsb2F0
MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtYXgiLCBmbG9hdDMs
IGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJtYXgiLCBm
bG9hdDQsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJt
YXgiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDMsICJtYXgiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDQsICJtYXgiLCBmbG9hdDQsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MSwgImNsYW1wIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJjbGFtcCIsIGZsb2F0MiwgZmxvYXQx
LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiY2xhbXAi
LCBmbG9hdDMsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0NCwgImNsYW1wIiwgZmxvYXQ0LCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJjbGFtcCIsIGZsb2F0MiwgZmxvYXQyLCBmbG9hdDIp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiY2xhbXAiLCBmbG9hdDMs
IGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwg
ImNsYW1wIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MSwgIm1peCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibWl4IiwgZmxvYXQyLCBmbG9hdDIsIGZs
b2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtaXgiLCBmbG9h
dDMsIGZsb2F0MywgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
NCwgIm1peCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQyLCAibWl4IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtaXgiLCBmbG9hdDMsIGZsb2F0MywgZmxv
YXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1peCIsIGZsb2F0
NCwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDEsICJzdGVwIiwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQyLCAic3RlcCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MywgInN0ZXAiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJzdGVwIiwgZmxvYXQ0LCBmbG9hdDQpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQyKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInN0ZXAiLCBmbG9hdDEsIGZs
b2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJzdGVwIiwgZmxv
YXQxLCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJz
bW9vdGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDIsICJzbW9vdGhzdGVwIiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzbW9vdGhzdGVwIiwgZmxv
YXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDQsICJzbW9vdGhzdGVwIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJzbW9vdGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZs
b2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzbW9vdGhzdGVw
IiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDQsICJzbW9vdGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0NCk7CisKKyAgICAv
LworICAgIC8vIEdlb21ldHJpYyBGdW5jdGlvbnMuCisgICAgLy8KKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDEsICJsZW5ndGgiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibGVuZ3RoIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRpc3RhbmNlIiwgZmxvYXQxLCBmbG9hdDEpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZGlzdGFuY2UiLCBmbG9hdDIs
IGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkaXN0YW5j
ZSIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MSwgImRpc3RhbmNlIiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDEsICJkb3QiLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkb3QiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkb3QiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkb3QiLCBmbG9hdDQsIGZsb2F0NCk7
CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImNyb3NzIiwgZmxvYXQz
LCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibm9ybWFs
aXplIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgIm5v
cm1hbGl6ZSIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMs
ICJub3JtYWxpemUiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQ0LCAibm9ybWFsaXplIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQxLCAiZmFjZWZvcndhcmQiLCBmbG9hdDEsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImZhY2Vmb3J3YXJkIiwgZmxvYXQyLCBm
bG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJm
YWNlZm9yd2FyZCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQ0LCAiZmFjZWZvcndhcmQiLCBmbG9hdDQsIGZsb2F0NCwgZmxvYXQ0
KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAicmVmbGVjdCIsIGZs
b2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInJl
ZmxlY3QiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDMsICJyZWZsZWN0IiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQ0LCAicmVmbGVjdCIsIGZsb2F0NCwgZmxvYXQ0KTsKKworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAicmVmcmFjdCIsIGZsb2F0MSwgZmxvYXQxLCBm
bG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAicmVmcmFjdCIs
IGZsb2F0MiwgZmxvYXQyLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQzLCAicmVmcmFjdCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDEpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAicmVmcmFjdCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9h
dDEpOworCisgICAgVFR5cGUgKm1hdDIgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5l
ZCwgRXZxR2xvYmFsLCAyLCB0cnVlKTsKKyAgICBUVHlwZSAqbWF0MyA9IG5ldyBUVHlwZShFYnRG
bG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDMsIHRydWUpOworICAgIFRUeXBlICptYXQ0
ID0gbmV3IFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgNCwgdHJ1ZSk7
CisKKyAgICAvLworICAgIC8vIE1hdHJpeCBGdW5jdGlvbnMuCisgICAgLy8KKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKG1hdDIsICJtYXRyaXhDb21wTXVsdCIsIG1hdDIsIG1hdDIpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4obWF0MywgIm1hdHJpeENvbXBNdWx0IiwgbWF0
MywgbWF0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihtYXQ0LCAibWF0cml4Q29t
cE11bHQiLCBtYXQ0LCBtYXQ0KTsKKworICAgIFRUeXBlICpib29sMSA9IG5ldyBUVHlwZShFYnRC
b29sLCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMSk7CisgICAgVFR5cGUgKmJvb2wyID0gbmV3
IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAyKTsKKyAgICBUVHlwZSAq
Ym9vbDMgPSBuZXcgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDMpOwor
ICAgIFRUeXBlICpib29sNCA9IG5ldyBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUds
b2JhbCwgNCk7CisKKyAgICAvLworICAgIC8vIFZlY3RvciByZWxhdGlvbmFsIGZ1bmN0aW9ucy4K
KyAgICAvLworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJsZXNzVGhhbiIs
IGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAi
bGVzc1RoYW4iLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihib29sNCwgImxlc3NUaGFuIiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihib29sMiwgImxlc3NUaGFuIiwgaW50MiwgaW50Mik7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImxlc3NUaGFuIiwgaW50MywgaW50Myk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImxlc3NUaGFuIiwgaW50NCwgaW50NCk7
CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAibGVzc1RoYW5FcXVhbCIs
IGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAi
bGVzc1RoYW5FcXVhbCIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGJvb2w0LCAibGVzc1RoYW5FcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsKKworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJsZXNzVGhhbkVxdWFsIiwgaW50MiwgaW50
Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImxlc3NUaGFuRXF1YWwi
LCBpbnQzLCBpbnQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAibGVz
c1RoYW5FcXVhbCIsIGludDQsIGludDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihib29sMiwgImdyZWF0ZXJUaGFuIiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oYm9vbDMsICJncmVhdGVyVGhhbiIsIGZsb2F0MywgZmxvYXQzKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAiZ3JlYXRlclRoYW4iLCBmbG9hdDQs
IGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZ3JlYXRl
clRoYW4iLCBpbnQyLCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wz
LCAiZ3JlYXRlclRoYW4iLCBpbnQzLCBpbnQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGJvb2w0LCAiZ3JlYXRlclRoYW4iLCBpbnQ0LCBpbnQ0KTsKKworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oYm9vbDIsICJncmVhdGVyVGhhbkVxdWFsIiwgZmxvYXQyLCBmbG9hdDIp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJncmVhdGVyVGhhbkVxdWFs
IiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQs
ICJncmVhdGVyVGhhbkVxdWFsIiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihib29sMiwgImdyZWF0ZXJUaGFuRXF1YWwiLCBpbnQyLCBpbnQyKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZ3JlYXRlclRoYW5FcXVhbCIsIGlu
dDMsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJncmVhdGVy
VGhhbkVxdWFsIiwgaW50NCwgaW50NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGJvb2wyLCAiZXF1YWwiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihib29sMywgImVxdWFsIiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oYm9vbDQsICJlcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsKKworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJlcXVhbCIsIGludDIsIGludDIpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJlcXVhbCIsIGludDMsIGludDMpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJlcXVhbCIsIGludDQsIGludDQp
OworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImVxdWFsIiwgYm9vbDIs
IGJvb2wyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZXF1YWwiLCBi
b29sMywgYm9vbDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJlcXVh
bCIsIGJvb2w0LCBib29sNCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wy
LCAibm90RXF1YWwiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihib29sMywgIm5vdEVxdWFsIiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oYm9vbDQsICJub3RFcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsKKworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJub3RFcXVhbCIsIGludDIsIGludDIp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJub3RFcXVhbCIsIGludDMs
IGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJub3RFcXVhbCIs
IGludDQsIGludDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgIm5v
dEVxdWFsIiwgYm9vbDIsIGJvb2wyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJv
b2wzLCAibm90RXF1YWwiLCBib29sMywgYm9vbDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oYm9vbDQsICJub3RFcXVhbCIsIGJvb2w0LCBib29sNCk7CisKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGJvb2wxLCAiYW55IiwgYm9vbDIpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oYm9vbDEsICJhbnkiLCBib29sMyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihib29sMSwgImFueSIsIGJvb2w0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oYm9vbDEsICJhbGwiLCBib29sMik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihib29sMSwgImFsbCIsIGJvb2wzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJv
b2wxLCAiYWxsIiwgYm9vbDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29s
MiwgIm5vdCIsIGJvb2wyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAi
bm90IiwgYm9vbDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJub3Qi
LCBib29sNCk7CisKKyAgICBUVHlwZSAqc2FtcGxlcjJEID0gbmV3IFRUeXBlKEVidFNhbXBsZXIy
RCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDEpOworICAgIFRUeXBlICpzYW1wbGVyQ3ViZSA9
IG5ldyBUVHlwZShFYnRTYW1wbGVyQ3ViZSwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDEpOwor
CisgICAgLy8KKyAgICAvLyBUZXh0dXJlIEZ1bmN0aW9ucyBmb3IgR0xTTCBFUyAxLjAKKyAgICAv
LworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEIiwgc2Ft
cGxlcjJELCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAi
dGV4dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVyMkQsIGZsb2F0NCk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlQ3ViZSIsIHNhbXBs
ZXJDdWJlLCBmbG9hdDMpOworCisgICAgaWYgKHJlc291cmNlcy5PRVNfRUdMX2ltYWdlX2V4dGVy
bmFsKQorICAgIHsKKyAgICAgICAgVFR5cGUgKnNhbXBsZXJFeHRlcm5hbE9FUyA9IG5ldyBUVHlw
ZShFYnRTYW1wbGVyRXh0ZXJuYWxPRVMsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAxKTsKKwor
ICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRCIsIHNh
bXBsZXJFeHRlcm5hbE9FUywgZmxvYXQyKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlckV4dGVybmFsT0VTLCBmbG9hdDMp
OworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFBy
b2oiLCBzYW1wbGVyRXh0ZXJuYWxPRVMsIGZsb2F0NCk7CisgICAgfQorCisgICAgaWYgKHJlc291
cmNlcy5BUkJfdGV4dHVyZV9yZWN0YW5nbGUpCisgICAgeworICAgICAgICBUVHlwZSAqc2FtcGxl
cjJEUmVjdCA9IG5ldyBUVHlwZShFYnRTYW1wbGVyMkRSZWN0LCBFYnBVbmRlZmluZWQsIEV2cUds
b2JhbCwgMSk7CisKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0
ZXh0dXJlMkRSZWN0Iiwgc2FtcGxlcjJEUmVjdCwgZmxvYXQyKTsKKyAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRSZWN0UHJvaiIsIHNhbXBsZXIyRFJl
Y3QsIGZsb2F0Myk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAi
dGV4dHVyZTJEUmVjdFByb2oiLCBzYW1wbGVyMkRSZWN0LCBmbG9hdDQpOworICAgIH0KKworICAg
IGlmICh0eXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICB7CisgICAgICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEIiwgc2FtcGxlcjJELCBmbG9hdDIs
IGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4
dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVyMkQsIGZs
b2F0NCwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQs
ICJ0ZXh0dXJlQ3ViZSIsIHNhbXBsZXJDdWJlLCBmbG9hdDMsIGZsb2F0MSk7CisKKyAgICAgICAg
aWYgKHJlc291cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZEZkeCIsIGZsb2F0MSk7
CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImRGZHgiLCBm
bG9hdDIpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJk
RmR4IiwgZmxvYXQzKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQ0LCAiZEZkeCIsIGZsb2F0NCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZEZkeSIsIGZsb2F0MSk7CisgICAgICAgICAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImRGZHkiLCBmbG9hdDIpOworICAgICAg
ICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJkRmR5IiwgZmxvYXQzKTsK
KyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZEZkeSIsIGZs
b2F0NCk7CisKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAi
ZndpZHRoIiwgZmxvYXQxKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQyLCAiZndpZHRoIiwgZmxvYXQyKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQzLCAiZndpZHRoIiwgZmxvYXQzKTsKKyAgICAgICAgICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZndpZHRoIiwgZmxvYXQ0KTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmKHR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUikKKyAgICB7CisgICAgICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJETG9kIiwgc2FtcGxl
cjJELCBmbG9hdDIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQ0LCAidGV4dHVyZTJEUHJvakxvZCIsIHNhbXBsZXIyRCwgZmxvYXQzLCBmbG9hdDEpOwor
ICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFByb2pM
b2QiLCBzYW1wbGVyMkQsIGZsb2F0NCwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlQ3ViZUxvZCIsIHNhbXBsZXJDdWJlLCBmbG9hdDMs
IGZsb2F0MSk7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBEZXB0aCByYW5nZSBpbiB3aW5kb3cg
Y29vcmRpbmF0ZXMKKyAgICAvLworICAgIFRGaWVsZExpc3QgKmZpZWxkcyA9IE5ld1Bvb2xURmll
bGRMaXN0KCk7CisgICAgVEZpZWxkICpuZWFyID0gbmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0Rmxv
YXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSksIE5ld1Bvb2xUU3RyaW5nKCJuZWFyIikpOworICAg
IFRGaWVsZCAqZmFyID0gbmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2
cUdsb2JhbCwgMSksIE5ld1Bvb2xUU3RyaW5nKCJmYXIiKSk7CisgICAgVEZpZWxkICpkaWZmID0g
bmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSksIE5l
d1Bvb2xUU3RyaW5nKCJkaWZmIikpOworICAgIGZpZWxkcy0+cHVzaF9iYWNrKG5lYXIpOworICAg
IGZpZWxkcy0+cHVzaF9iYWNrKGZhcik7CisgICAgZmllbGRzLT5wdXNoX2JhY2soZGlmZik7Cisg
ICAgVFN0cnVjdHVyZSAqZGVwdGhSYW5nZVN0cnVjdCA9IG5ldyBUU3RydWN0dXJlKE5ld1Bvb2xU
U3RyaW5nKCJnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyIpLCBmaWVsZHMpOworICAgIFRWYXJpYWJs
ZSAqZGVwdGhSYW5nZVBhcmFtZXRlcnMgPSBuZXcgVFZhcmlhYmxlKCZkZXB0aFJhbmdlU3RydWN0
LT5uYW1lKCksIGRlcHRoUmFuZ2VTdHJ1Y3QsIHRydWUpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dCgqZGVwdGhSYW5nZVBhcmFtZXRlcnMpOworICAgIFRWYXJpYWJsZSAqZGVwdGhSYW5nZSA9IG5l
dyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0RlcHRoUmFuZ2UiKSwgVFR5cGUoZGVwdGhS
YW5nZVN0cnVjdCkpOworICAgIGRlcHRoUmFuZ2UtPnNldFF1YWxpZmllcihFdnFVbmlmb3JtKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKmRlcHRoUmFuZ2UpOworCisgICAgLy8KKyAgICAvLyBJ
bXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQgYnVpbHQtaW4gY29uc3RhbnRzLgorICAgIC8vCisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heFZlcnRleEF0dHJpYnMiLCByZXNvdXJj
ZXMuTWF4VmVydGV4QXR0cmlicyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImds
X01heFZlcnRleFVuaWZvcm1WZWN0b3JzIiwgcmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0
b3JzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xfTWF4VmFyeWluZ1ZlY3Rv
cnMiLCByZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dENvbnN0SW50KCJnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhW
ZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQo
ImdsX01heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMiLCByZXNvdXJjZXMuTWF4Q29tYmluZWRU
ZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01h
eFRleHR1cmVJbWFnZVVuaXRzIiwgcmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xfTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9y
cyIsIHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKTsKKworICAgIGlmIChzcGVj
ICE9IFNIX0NTU19TSEFERVJTX1NQRUMpCisgICAgeworICAgICAgICBzeW1ib2xUYWJsZS5pbnNl
cnRDb25zdEludCgiZ2xfTWF4RHJhd0J1ZmZlcnMiLCByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMp
OworICAgIH0KK30KKwordm9pZCBJZGVudGlmeUJ1aWx0SW5zKFNoU2hhZGVyVHlwZSB0eXBlLCBT
aFNoYWRlclNwZWMgc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaEJ1aWx0SW5S
ZXNvdXJjZXMgJnJlc291cmNlcywKKyAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUg
JnN5bWJvbFRhYmxlKQoreworICAgIC8vCisgICAgLy8gRmlyc3QsIGluc2VydCBzb21lIHNwZWNp
YWwgYnVpbHQtaW4gdmFyaWFibGVzIHRoYXQgYXJlIG5vdCBpbiAKKyAgICAvLyB0aGUgYnVpbHQt
aW4gaGVhZGVyIGZpbGVzLgorICAgIC8vCisgICAgc3dpdGNoKHR5cGUpIHsKKyAgICBjYXNlIFNI
X0ZSQUdNRU5UX1NIQURFUjoKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlh
YmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29vcmQiKSwgICAgICAgICAgICAgICAgICAgICAg
IFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb29yZCwgICA0KSkpOworICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zy
b250RmFjaW5nIiksICAgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0Qm9vbCwgIEVicFVuZGVm
aW5lZCwgRXZxRnJvbnRGYWNpbmcsIDEpKSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgq
bmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfUG9pbnRDb29yZCIpLCAgICAgICAgICAg
ICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludENvb3JkLCAgMikp
KTsKKworICAgICAgICAvLworICAgICAgICAvLyBJbiBDU1MgU2hhZGVycywgZ2xfRnJhZ0NvbG9y
LCBnbF9GcmFnRGF0YSwgYW5kIGdsX01heERyYXdCdWZmZXJzIGFyZSBub3QgYXZhaWxhYmxlLgor
ICAgICAgICAvLyBJbnN0ZWFkLCBjc3NfTWl4Q29sb3IgYW5kIGNzc19Db2xvck1hdHJpeCBhcmUg
YXZhaWxhYmxlLgorICAgICAgICAvLworICAgICAgICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVS
U19TUEVDKSB7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUo
TmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb2xvciIpLCAgICAgICAgICAgICAgICAgICBUVHlwZShF
YnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29sb3IsICAgNCkpKTsKKyAgICAgICAgICAgIHN5
bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Rh
dGFbZ2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZy
YWdEYXRhLCAgICA0KSkpOworICAgICAgICAgICAgaWYgKHJlc291cmNlcy5FWFRfZnJhZ19kZXB0
aCkgeworICAgICAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RlcHRoRVhUIiksICAgICAgICAgICAgVFR5cGUoRWJ0Rmxv
YXQsIHJlc291cmNlcy5GcmFnbWVudFByZWNpc2lvbkhpZ2ggPyBFYnBIaWdoIDogRWJwTWVkaXVt
LCBFdnFGcmFnRGVwdGgsIDEpKSk7CisgICAgICAgICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9FeHRlbnNpb24oImdsX0ZyYWdEZXB0aEVYVCIsICJHTF9FWFRfZnJhZ19kZXB0aCIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJjc3NfTWl4Q29sb3IiKSwgICAgICAg
ICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAgIDQp
KSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9v
bFRTdHJpbmcoImNzc19Db2xvck1hdHJpeCIpLCAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9h
dCwgRWJwTWVkaXVtLCBFdnFHbG9iYWwsICAgICAgNCwgdHJ1ZSkpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTSF9WRVJURVhfU0hBREVSOgorICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1Bvc2l0aW9u
IiksICAgIFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFQb3NpdGlvbiwgICAgNCkpKTsKKyAg
ICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJn
bF9Qb2ludFNpemUiKSwgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludFNpemUs
ICAgMSkpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OiBhc3NlcnQoZmFsc2UgJiYg
Ikxhbmd1YWdlIG5vdCBzdXBwb3J0ZWQiKTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIE5leHQs
IGlkZW50aWZ5IHdoaWNoIGJ1aWx0LWlucyBmcm9tIHRoZSBhbHJlYWR5IGxvYWRlZCBoZWFkZXJz
IGhhdmUKKyAgICAvLyBhIG1hcHBpbmcgdG8gYW4gb3BlcmF0b3IuICBUaG9zZSB0aGF0IGFyZSBu
b3QgaWRlbnRpZmllZCBhcyBzdWNoIGFyZQorICAgIC8vIGV4cGVjdGVkIHRvIGJlIHJlc29sdmVk
IHRocm91Z2ggYSBsaWJyYXJ5IG9mIGZ1bmN0aW9ucywgdmVyc3VzIGFzCisgICAgLy8gb3BlcmF0
aW9ucy4KKyAgICAvLworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm1hdHJpeENv
bXBNdWx0IiwgICBFT3BNdWwpOworCisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigi
ZXF1YWwiLCAgICAgICAgICAgIEVPcFZlY3RvckVxdWFsKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKCJub3RFcXVhbCIsICAgICAgICAgRU9wVmVjdG9yTm90RXF1YWwpOworICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxlc3NUaGFuIiwgICAgICAgICBFT3BMZXNz
VGhhbik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZ3JlYXRlclRoYW4iLCAg
ICAgIEVPcEdyZWF0ZXJUaGFuKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJs
ZXNzVGhhbkVxdWFsIiwgICAgRU9wTGVzc1RoYW5FcXVhbCk7CisgICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcigiZ3JlYXRlclRoYW5FcXVhbCIsIEVPcEdyZWF0ZXJUaGFuRXF1YWwpOwor
ICAgIAorICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInJhZGlhbnMiLCAgICAgIEVP
cFJhZGlhbnMpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImRlZ3JlZXMiLCAg
ICAgIEVPcERlZ3JlZXMpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInNpbiIs
ICAgICAgICAgIEVPcFNpbik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiY29z
IiwgICAgICAgICAgRU9wQ29zKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJ0
YW4iLCAgICAgICAgICBFT3BUYW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
ImFzaW4iLCAgICAgICAgIEVPcEFzaW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0
b3IoImFjb3MiLCAgICAgICAgIEVPcEFjb3MpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoImF0YW4iLCAgICAgICAgIEVPcEF0YW4pOworCisgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcigicG93IiwgICAgICAgICAgRU9wUG93KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKCJleHAyIiwgICAgICAgICBFT3BFeHAyKTsKKyAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKCJsb2ciLCAgICAgICAgICBFT3BMb2cpOworICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoImV4cCIsICAgICAgICAgIEVPcEV4cCk7CisgICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9PcGVyYXRvcigibG9nMiIsICAgICAgICAgRU9wTG9nMik7CisgICAgc3ltYm9s
VGFibGUucmVsYXRlVG9PcGVyYXRvcigic3FydCIsICAgICAgICAgRU9wU3FydCk7CisgICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiaW52ZXJzZXNxcnQiLCAgRU9wSW52ZXJzZVNxcnQp
OworCisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiYWJzIiwgICAgICAgICAgRU9w
QWJzKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzaWduIiwgICAgICAgICBF
T3BTaWduKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJmbG9vciIsICAgICAg
ICBFT3BGbG9vcik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiY2VpbCIsICAg
ICAgICAgRU9wQ2VpbCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZnJhY3Qi
LCAgICAgICAgRU9wRnJhY3QpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm1v
ZCIsICAgICAgICAgIEVPcE1vZCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigi
bWluIiwgICAgICAgICAgRU9wTWluKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KCJtYXgiLCAgICAgICAgICBFT3BNYXgpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0
b3IoImNsYW1wIiwgICAgICAgIEVPcENsYW1wKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKCJtaXgiLCAgICAgICAgICBFT3BNaXgpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoInN0ZXAiLCAgICAgICAgIEVPcFN0ZXApOworICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoInNtb290aHN0ZXAiLCAgIEVPcFNtb290aFN0ZXApOworCisgICAgc3ltYm9s
VGFibGUucmVsYXRlVG9PcGVyYXRvcigibGVuZ3RoIiwgICAgICAgRU9wTGVuZ3RoKTsKKyAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkaXN0YW5jZSIsICAgICBFT3BEaXN0YW5jZSk7
CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZG90IiwgICAgICAgICAgRU9wRG90
KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJjcm9zcyIsICAgICAgICBFT3BD
cm9zcyk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibm9ybWFsaXplIiwgICAg
RU9wTm9ybWFsaXplKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJmYWNlZm9y
d2FyZCIsICBFT3BGYWNlRm9yd2FyZCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cigicmVmbGVjdCIsICAgICAgRU9wUmVmbGVjdCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9P
cGVyYXRvcigicmVmcmFjdCIsICAgICAgRU9wUmVmcmFjdCk7CisgICAgCisgICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9PcGVyYXRvcigiYW55IiwgICAgICAgICAgRU9wQW55KTsKKyAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhbGwiLCAgICAgICAgICBFT3BBbGwpOworICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm5vdCIsICAgICAgICAgIEVPcFZlY3RvckxvZ2ljYWxO
b3QpOworCisgICAgLy8gTWFwIGxhbmd1YWdlLXNwZWNpZmljIG9wZXJhdG9ycy4KKyAgICBzd2l0
Y2godHlwZSkgeworICAgIGNhc2UgU0hfVkVSVEVYX1NIQURFUjoKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBTSF9GUkFHTUVOVF9TSEFERVI6CisgICAgICAgIGlmIChyZXNvdXJjZXMuT0VTX3N0
YW5kYXJkX2Rlcml2YXRpdmVzKSB7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKCJkRmR4IiwgICBFT3BERmR4KTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoImRGZHkiLCAgIEVPcERGZHkpOworICAgICAgICAgICAgc3ltYm9sVGFibGUu
cmVsYXRlVG9PcGVyYXRvcigiZndpZHRoIiwgRU9wRndpZHRoKTsKKworICAgICAgICAgICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9FeHRlbnNpb24oImRGZHgiLCAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2
YXRpdmVzIik7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbigiZEZk
eSIsICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKKyAgICAgICAgICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKCJmd2lkdGgiLCAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRp
dmVzIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDogYnJlYWs7Cisg
ICAgfQorCisgICAgLy8gRmluYWxseSBhZGQgcmVzb3VyY2Utc3BlY2lmaWMgdmFyaWFibGVzLgor
ICAgIHN3aXRjaCh0eXBlKSB7CisgICAgY2FzZSBTSF9GUkFHTUVOVF9TSEFERVI6CisgICAgICAg
IGlmIChzcGVjICE9IFNIX0NTU19TSEFERVJTX1NQRUMpIHsKKyAgICAgICAgICAgIC8vIFNldCB1
cCBnbF9GcmFnRGF0YS4gIFRoZSBhcnJheSBzaXplLgorICAgICAgICAgICAgVFR5cGUgZnJhZ0Rh
dGEoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0RhdGEsIDQsIGZhbHNlLCB0cnVlKTsKKyAg
ICAgICAgICAgIGZyYWdEYXRhLnNldEFycmF5U2l6ZShyZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMp
OworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xU
U3RyaW5nKCJnbF9GcmFnRGF0YSIpLCAgICBmcmFnRGF0YSkpOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KK30KKwordm9pZCBJbml0RXh0ZW5z
aW9uQmVoYXZpb3IoY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yKQorewor
ICAgIGlmIChyZXNvdXJjZXMuT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzKQorICAgICAgICBleHRC
ZWhhdmlvclsiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIl0gPSBFQmhVbmRlZmluZWQ7Cisg
ICAgaWYgKHJlc291cmNlcy5PRVNfRUdMX2ltYWdlX2V4dGVybmFsKQorICAgICAgICBleHRCZWhh
dmlvclsiR0xfT0VTX0VHTF9pbWFnZV9leHRlcm5hbCJdID0gRUJoVW5kZWZpbmVkOworICAgIGlm
IChyZXNvdXJjZXMuQVJCX3RleHR1cmVfcmVjdGFuZ2xlKQorICAgICAgICBleHRCZWhhdmlvclsi
R0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlIl0gPSBFQmhVbmRlZmluZWQ7CisgICAgaWYgKHJlc291
cmNlcy5FWFRfZHJhd19idWZmZXJzKQorICAgICAgICBleHRCZWhhdmlvclsiR0xfRVhUX2RyYXdf
YnVmZmVycyJdID0gRUJoVW5kZWZpbmVkOworICAgIGlmIChyZXNvdXJjZXMuRVhUX2ZyYWdfZGVw
dGgpCisgICAgICAgIGV4dEJlaGF2aW9yWyJHTF9FWFRfZnJhZ19kZXB0aCJdID0gRUJoVW5kZWZp
bmVkOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvSW5pdGlhbGl6ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1NjQyODY5YWExOTlh
OGNhZDk3MzAxYWVjMzA3NjAzMzlkZDU0MWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplLmgKQEAgLTAs
MCArMSwyMyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfSU5JVElBTElaRV9JTkNM
VURFRF8KKyNkZWZpbmUgX0lOSVRJQUxJWkVfSU5DTFVERURfCisKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL0NvbW1vbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU2hI
YW5kbGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgiCisK
K3ZvaWQgSW5zZXJ0QnVpbHRJbkZ1bmN0aW9ucyhTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJT
cGVjIHNwZWMsIGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyAmcmVzb3VyY2VzLCBUU3ltYm9sVGFi
bGUgJnRhYmxlKTsKKwordm9pZCBJZGVudGlmeUJ1aWx0SW5zKFNoU2hhZGVyVHlwZSB0eXBlLCBT
aFNoYWRlclNwZWMgc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaEJ1aWx0SW5S
ZXNvdXJjZXMmIHJlc291cmNlcywKKyAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUm
IHN5bWJvbFRhYmxlKTsKKwordm9pZCBJbml0RXh0ZW5zaW9uQmVoYXZpb3IoY29uc3QgU2hCdWls
dEluUmVzb3VyY2VzJiByZXNvdXJjZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBURXh0
ZW5zaW9uQmVoYXZpb3ImIGV4dGVuc2lvbkJlaGF2aW9yKTsKKworI2VuZGlmIC8vIF9JTklUSUFM
SVpFX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZURsbC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplRGxsLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40M2Y4MTc4NGQwYWRlYzVhYjExNmE4YmUzNGU1N2FkZjA2MTMzYmFkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5p
dGlhbGl6ZURsbC5jcHAKQEAgLTAsMCArMSwzMiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZURsbC5oIgorCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplR2xvYmFscy5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3Ivb3NpbmNsdWRlLmgiCisKK2Jvb2wgSW5pdFByb2Nlc3MoKQoreworICAg
IGlmICghSW5pdGlhbGl6ZVBvb2xJbmRleCgpKSB7CisgICAgICAgIGFzc2VydCgwICYmICJJbml0
UHJvY2VzcygpOiBGYWlsZWQgdG8gaW5pdGFsaXplIGdsb2JhbCBwb29sIik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIUluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRl
eCgpKSB7CisgICAgICAgIGFzc2VydCgwICYmICJJbml0UHJvY2VzcygpOiBGYWlsZWQgdG8gaW5p
dGFsaXplIHBhcnNlIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIERldGFjaFByb2Nlc3MoKQoreworICAgIEZyZWVQ
YXJzZUNvbnRleHRJbmRleCgpOworICAgIEZyZWVQb29sSW5kZXgoKTsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxp
emVEbGwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L0luaXRpYWxpemVEbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MzA3MGNjM2ZmNzhmNzUzYTI0NmM0NjA2OTg5
MDg2YTYzYmYwOGJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZURsbC5oCkBAIC0wLDAgKzEsMTMgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisjaWZuZGVmIF9fSU5JVElBTElaRURMTF9ICisjZGVmaW5lIF9f
SU5JVElBTElaRURMTF9ICisKK2Jvb2wgSW5pdFByb2Nlc3MoKTsKK3ZvaWQgRGV0YWNoUHJvY2Vz
cygpOworCisjZW5kaWYgLy8gX19JTklUSUFMSVpFRExMX0gKKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZUdsb2Jh
bHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0lu
aXRpYWxpemVHbG9iYWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDcxNTk0MTQyNDcxMDUzMDgwMzg2MjgxMzg2
YTk1MDZmYWJkMDU2MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVHbG9iYWxzLmgKQEAgLTAsMCArMSwx
MyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfX0lOSVRJQUxJWkVfR0xPQkFMU19J
TkNMVURFRF8KKyNkZWZpbmUgX19JTklUSUFMSVpFX0dMT0JBTFNfSU5DTFVERURfCisKK2Jvb2wg
SW5pdGlhbGl6ZVBvb2xJbmRleCgpOwordm9pZCBGcmVlUG9vbEluZGV4KCk7CisKKyNlbmRpZiAv
LyBfX0lOSVRJQUxJWkVfR0xPQkFMU19JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVQYXJzZUNvbnRl
eHQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
SW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjRkZWZhZTU2OTUzYTlhYjg4
ODU0ZmU0NzUzYzU3ZGNlNjQwMjFkNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVQYXJzZUNvbnRleHQu
Y3BwCkBAIC0wLDAgKzEsNDAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCisKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL29zaW5jbHVkZS5oIgorCitPU19UTFNJbmRleCBHbG9iYWxQYXJzZUNvbnRl
eHRJbmRleCA9IE9TX0lOVkFMSURfVExTX0lOREVYOworCitib29sIEluaXRpYWxpemVQYXJzZUNv
bnRleHRJbmRleCgpCit7CisgICAgYXNzZXJ0KEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID09IE9T
X0lOVkFMSURfVExTX0lOREVYKTsKKworICAgIEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1Nf
QWxsb2NUTFNJbmRleCgpOworICAgIHJldHVybiBHbG9iYWxQYXJzZUNvbnRleHRJbmRleCAhPSBP
U19JTlZBTElEX1RMU19JTkRFWDsKK30KKwordm9pZCBGcmVlUGFyc2VDb250ZXh0SW5kZXgoKQor
eworICAgIGFzc2VydChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCAhPSBPU19JTlZBTElEX1RMU19J
TkRFWCk7CisKKyAgICBPU19GcmVlVExTSW5kZXgoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgpOwor
ICAgIEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7Cit9CisK
K3ZvaWQgU2V0R2xvYmFsUGFyc2VDb250ZXh0KFRQYXJzZUNvbnRleHQqIGNvbnRleHQpCit7Cisg
ICAgYXNzZXJ0KEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ICE9IE9TX0lOVkFMSURfVExTX0lOREVY
KTsKKyAgICBPU19TZXRUTFNWYWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCwgY29udGV4dCk7
Cit9CisKK1RQYXJzZUNvbnRleHQqIEdldEdsb2JhbFBhcnNlQ29udGV4dCgpCit7CisgICAgYXNz
ZXJ0KEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ICE9IE9TX0lOVkFMSURfVExTX0lOREVYKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8VFBhcnNlQ29udGV4dCo+KE9TX0dldFRMU1ZhbHVlKEdsb2Jh
bFBhcnNlQ29udGV4dEluZGV4KSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxp
emVQYXJzZUNvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZmZiYWI4N2QwNzIzYTYzMjg0Njg0M2MzMGQ5
Y2FjMzMwMjcwNzc2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oCkBAIC0wLDAg
KzEsMTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX19JTklUSUFMSVpFX1BBUlNF
X0NPTlRFWFRfSU5DTFVERURfCisjZGVmaW5lIF9fSU5JVElBTElaRV9QQVJTRV9DT05URVhUX0lO
Q0xVREVEXworCitib29sIEluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCgpOwordm9pZCBGcmVl
UGFyc2VDb250ZXh0SW5kZXgoKTsKKworc3RydWN0IFRQYXJzZUNvbnRleHQ7CitleHRlcm4gdm9p
ZCBTZXRHbG9iYWxQYXJzZUNvbnRleHQoVFBhcnNlQ29udGV4dCogY29udGV4dCk7CitleHRlcm4g
VFBhcnNlQ29udGV4dCogR2V0R2xvYmFsUGFyc2VDb250ZXh0KCk7CisKKyNlbmRpZiAvLyBfX0lO
SVRJQUxJWkVfUEFSU0VfQ09OVEVYVF9JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVWYXJpYWJsZXMu
Y3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5p
dGlhbGl6ZVZhcmlhYmxlcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTE1YzU2MWM3NzVmMTU2MTY3N2YxOTlj
NmVjMTljMzhhYTdkODdlNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVWYXJpYWJsZXMuY3BwCkBAIC0w
LDAgKzEsMTE2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9Jbml0aWFsaXplVmFyaWFibGVzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9jb21waWxlcmRlYnVnLmgiCisKK25hbWVzcGFjZQoreworCitUSW50ZXJtQ29uc3RhbnRV
bmlvbiogY29uc3RydWN0RmxvYXRDb25zdFVuaW9uTm9kZShjb25zdCBUVHlwZSYgdHlwZSkKK3sK
KyAgICBUVHlwZSBteVR5cGUgPSB0eXBlOworICAgIHVuc2lnbmVkIGNoYXIgc2l6ZSA9IG15VHlw
ZS5nZXROb21pbmFsU2l6ZSgpOworICAgIGlmIChteVR5cGUuaXNNYXRyaXgoKSkKKyAgICAgICAg
c2l6ZSAqPSBzaXplOworICAgIENvbnN0YW50VW5pb24gKnUgPSBuZXcgQ29uc3RhbnRVbmlvbltz
aXplXTsKKyAgICBmb3IgKGludCBpaSA9IDA7IGlpIDwgc2l6ZTsgKytpaSkKKyAgICAgICAgdVtp
aV0uc2V0RkNvbnN0KDAuMGYpOworCisgICAgbXlUeXBlLmNsZWFyQXJyYXluZXNzKCk7CisgICAg
bXlUeXBlLnNldFF1YWxpZmllcihFdnFDb25zdCk7CisgICAgVEludGVybUNvbnN0YW50VW5pb24g
Km5vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24odSwgbXlUeXBlKTsKKyAgICByZXR1cm4g
bm9kZTsKK30KKworVEludGVybUNvbnN0YW50VW5pb24qIGNvbnN0cnVjdEluZGV4Tm9kZShpbnQg
aW5kZXgpCit7CisgICAgQ29uc3RhbnRVbmlvbiAqdSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwor
ICAgIHVbMF0uc2V0SUNvbnN0KGluZGV4KTsKKworICAgIFRUeXBlIHR5cGUoRWJ0SW50LCBFYnBV
bmRlZmluZWQsIEV2cUNvbnN0LCAxKTsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbm9kZSA9
IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih1LCB0eXBlKTsKKyAgICByZXR1cm4gbm9kZTsKK30K
KworfSAgLy8gbmFtZXNwYWNlIGFub255bW91cworCitib29sIEluaXRpYWxpemVWYXJpYWJsZXM6
OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQorewor
ICAgIGJvb2wgdmlzaXRDaGlsZHJlbiA9ICFtQ29kZUluc2VydGVkOworICAgIHN3aXRjaCAobm9k
ZS0+Z2V0T3AoKSkKKyAgICB7CisgICAgICBjYXNlIEVPcFNlcXVlbmNlOgorICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRU9wRnVuY3Rpb246CisgICAgICB7CisgICAgICAgIC8vIEZ1bmN0aW9u
IGRlZmluaXRpb24uCisgICAgICAgIEFTU0VSVCh2aXNpdCA9PSBQcmVWaXNpdCk7CisgICAgICAg
IGlmIChub2RlLT5nZXROYW1lKCkgPT0gIm1haW4oIikKKyAgICAgICAgeworICAgICAgICAgICAg
VEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CisgICAgICAg
ICAgICBBU1NFUlQoKHNlcXVlbmNlLnNpemUoKSA9PSAxKSB8fCAoc2VxdWVuY2Uuc2l6ZSgpID09
IDIpKTsKKyAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUgKmJvZHkgPSBOVUxMOworICAgICAg
ICAgICAgaWYgKHNlcXVlbmNlLnNpemUoKSA9PSAxKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGJvZHkgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZShFT3BTZXF1ZW5jZSk7CisgICAgICAg
ICAgICAgICAgc2VxdWVuY2UucHVzaF9iYWNrKGJvZHkpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvZHkgPSBzZXF1ZW5j
ZVsxXS0+Z2V0QXNBZ2dyZWdhdGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VS
VChib2R5KTsKKyAgICAgICAgICAgIGluc2VydEluaXRDb2RlKGJvZHktPmdldFNlcXVlbmNlKCkp
OworICAgICAgICAgICAgbUNvZGVJbnNlcnRlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgICB9CisgICAgICBkZWZhdWx0OgorICAgICAgICB2aXNpdENoaWxkcmVuID0g
ZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gdmlzaXRDaGlsZHJlbjsK
K30KKwordm9pZCBJbml0aWFsaXplVmFyaWFibGVzOjppbnNlcnRJbml0Q29kZShUSW50ZXJtU2Vx
dWVuY2UmIHNlcXVlbmNlKQoreworICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCBtVmFyaWFi
bGVzLnNpemUoKTsgKytpaSkKKyAgICB7CisgICAgICAgIGNvbnN0IEluaXRWYXJpYWJsZUluZm8m
IHZhckluZm8gPSBtVmFyaWFibGVzW2lpXTsKKworICAgICAgICBpZiAodmFySW5mby50eXBlLmlz
QXJyYXkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSB2YXJJbmZv
LnR5cGUuZ2V0QXJyYXlTaXplKCkgLSAxOyBpbmRleCA+PSAwOyAtLWluZGV4KQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIFRJbnRlcm1CaW5hcnkgKmFzc2lnbiA9IG5ldyBUSW50ZXJt
QmluYXJ5KEVPcEFzc2lnbik7CisgICAgICAgICAgICAgICAgc2VxdWVuY2UuaW5zZXJ0KHNlcXVl
bmNlLmJlZ2luKCksIGFzc2lnbik7CisKKyAgICAgICAgICAgICAgICBUSW50ZXJtQmluYXJ5ICpp
bmRleERpcmVjdCA9IG5ldyBUSW50ZXJtQmluYXJ5KEVPcEluZGV4RGlyZWN0KTsKKyAgICAgICAg
ICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBuZXcgVEludGVybVN5bWJvbCgwLCB2YXJJ
bmZvLm5hbWUsIHZhckluZm8udHlwZSk7CisgICAgICAgICAgICAgICAgaW5kZXhEaXJlY3QtPnNl
dExlZnQoc3ltYm9sKTsKKyAgICAgICAgICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqaW5k
ZXhOb2RlID0gY29uc3RydWN0SW5kZXhOb2RlKGluZGV4KTsKKyAgICAgICAgICAgICAgICBpbmRl
eERpcmVjdC0+c2V0UmlnaHQoaW5kZXhOb2RlKTsKKworICAgICAgICAgICAgICAgIGFzc2lnbi0+
c2V0TGVmdChpbmRleERpcmVjdCk7CisKKyAgICAgICAgICAgICAgICBUSW50ZXJtQ29uc3RhbnRV
bmlvbiAqemVyb0NvbnN0ID0gY29uc3RydWN0RmxvYXRDb25zdFVuaW9uTm9kZSh2YXJJbmZvLnR5
cGUpOworICAgICAgICAgICAgICAgIGFzc2lnbi0+c2V0UmlnaHQoemVyb0NvbnN0KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IFRJbnRlcm1CaW5hcnkgKmFzc2lnbiA9IG5ldyBUSW50ZXJtQmluYXJ5KEVPcEFzc2lnbik7Cisg
ICAgICAgICAgICBzZXF1ZW5jZS5pbnNlcnQoc2VxdWVuY2UuYmVnaW4oKSwgYXNzaWduKTsKKyAg
ICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IG5ldyBUSW50ZXJtU3ltYm9sKDAsIHZh
ckluZm8ubmFtZSwgdmFySW5mby50eXBlKTsKKyAgICAgICAgICAgIGFzc2lnbi0+c2V0TGVmdChz
eW1ib2wpOworICAgICAgICAgICAgVEludGVybUNvbnN0YW50VW5pb24gKnplcm9Db25zdCA9IGNv
bnN0cnVjdEZsb2F0Q29uc3RVbmlvbk5vZGUodmFySW5mby50eXBlKTsKKyAgICAgICAgICAgIGFz
c2lnbi0+c2V0UmlnaHQoemVyb0NvbnN0KTsKKyAgICAgICAgfQorCisgICAgfQorfQorCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9J
bml0aWFsaXplVmFyaWFibGVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplVmFyaWFibGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWNkNmQ3ZTFi
NTExYWNlNDZhYzU4ZDQwZDY5NTViMzg4YjZkYTQ3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVWYXJp
YWJsZXMuaApAQCAtMCwwICsxLDUwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENP
TVBJTEVSX0lOSVRJQUxJWkVfVkFSSUFCTEVTX0hfCisjZGVmaW5lIENPTVBJTEVSX0lOSVRJQUxJ
WkVfVkFSSUFCTEVTX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVk
aWF0ZS5oIgorCitjbGFzcyBJbml0aWFsaXplVmFyaWFibGVzIDogcHVibGljIFRJbnRlcm1UcmF2
ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIHN0cnVjdCBJbml0VmFyaWFibGVJbmZvCisgICAgewor
ICAgICAgICBUU3RyaW5nIG5hbWU7CisgICAgICAgIFRUeXBlIHR5cGU7CisKKyAgICAgICAgSW5p
dFZhcmlhYmxlSW5mbyhjb25zdCBUU3RyaW5nJiBfbmFtZSwgY29uc3QgVFR5cGUmIF90eXBlKQor
ICAgICAgICAgICAgOiBuYW1lKF9uYW1lKSwKKyAgICAgICAgICAgICAgdHlwZShfdHlwZSkKKyAg
ICAgICAgeworICAgICAgICB9CisgICAgfTsKKyAgICB0eXBlZGVmIFRWZWN0b3I8SW5pdFZhcmlh
YmxlSW5mbz4gSW5pdFZhcmlhYmxlSW5mb0xpc3Q7CisKKyAgICBJbml0aWFsaXplVmFyaWFibGVz
KGNvbnN0IEluaXRWYXJpYWJsZUluZm9MaXN0JiB2YXJzKQorICAgICAgICA6IG1Db2RlSW5zZXJ0
ZWQoZmFsc2UpLAorICAgICAgICAgIG1WYXJpYWJsZXModmFycykKKyAgICB7CisgICAgfQorCisg
IHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1CaW5hcnkqIG5vZGUpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHZp
c2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSogbm9kZSkgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1T
ZWxlY3Rpb24qIG5vZGUpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHZpc2l0
TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqIG5vZGUpIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgdmlydHVhbCBib29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKiBu
b2RlKSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRl
KFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKTsKKworICBwcml2YXRlOgorICAg
IHZvaWQgaW5zZXJ0SW5pdENvZGUoVEludGVybVNlcXVlbmNlJiBzZXF1ZW5jZSk7CisKKyAgICBJ
bml0VmFyaWFibGVJbmZvTGlzdCBtVmFyaWFibGVzOworICAgIGJvb2wgbUNvZGVJbnNlcnRlZDsK
K307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfSU5JVElBTElaRV9WQVJJQUJMRVNfSF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0lu
dGVybVRyYXZlcnNlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL0ludGVybVRyYXZlcnNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NTRiODM0MDlhYzAwYThi
N2JjMzU0OTU3MGJkNTk4YzBjN2UyOTBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtVHJhdmVyc2UuY3BwCkBA
IC0wLDAgKzEsMjU5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKworLy8KKy8vIFRyYXZlcnNlIHRoZSBpbnRlcm1l
ZGlhdGUgcmVwcmVzZW50YXRpb24gdHJlZSwgYW5kCisvLyBjYWxsIGEgbm9kZSB0eXBlIHNwZWNp
ZmljIGZ1bmN0aW9uIGZvciBlYWNoIG5vZGUuCisvLyBEb25lIHJlY3Vyc2l2ZWx5IHRocm91Z2gg
dGhlIG1lbWJlciBmdW5jdGlvbiBUcmF2ZXJzZSgpLgorLy8gTm9kZSB0eXBlcyBjYW4gYmUgc2tp
cHBlZCBpZiB0aGVpciBmdW5jdGlvbiB0byBjYWxsIGlzIDAsCisvLyBidXQgdGhlaXIgc3VidHJl
ZSB3aWxsIHN0aWxsIGJlIHRyYXZlcnNlZC4KKy8vIE5vZGVzIHdpdGggY2hpbGRyZW4gY2FuIGhh
dmUgdGhlaXIgd2hvbGUgc3VidHJlZSBza2lwcGVkCisvLyBpZiBwcmVWaXNpdCBpcyB0dXJuZWQg
b24gYW5kIHRoZSB0eXBlIHNwZWNpZmljIGZ1bmN0aW9uCisvLyByZXR1cm5zIGZhbHNlLgorLy8K
Ky8vIHByZVZpc2l0LCBwb3N0VmlzaXQsIGFuZCByaWdodFRvTGVmdCBjb250cm9sIHdoYXQgb3Jk
ZXIKKy8vIG5vZGVzIGFyZSB2aXNpdGVkIGluLgorLy8KKworLy8KKy8vIFRyYXZlcnNhbCBmdW5j
dGlvbnMgZm9yIHRlcm1pbmFscyBhcmUgc3RyYWlnaGZvcndhcmQuLi4uCisvLwordm9pZCBUSW50
ZXJtU3ltYm9sOjp0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyICppdCkKK3sKKyAgICBpdC0+dmlz
aXRTeW1ib2wodGhpcyk7Cit9CisKK3ZvaWQgVEludGVybUNvbnN0YW50VW5pb246OnRyYXZlcnNl
KFRJbnRlcm1UcmF2ZXJzZXIgKml0KQoreworICAgIGl0LT52aXNpdENvbnN0YW50VW5pb24odGhp
cyk7Cit9CisKKy8vCisvLyBUcmF2ZXJzZSBhIGJpbmFyeSBub2RlLgorLy8KK3ZvaWQgVEludGVy
bUJpbmFyeTo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciAqaXQpCit7CisgICAgYm9vbCB2aXNp
dCA9IHRydWU7CisKKyAgICAvLworICAgIC8vIHZpc2l0IHRoZSBub2RlIGJlZm9yZSBjaGlsZHJl
biBpZiBwcmUtdmlzaXRpbmcuCisgICAgLy8KKyAgICBpZiAoaXQtPnByZVZpc2l0KQorICAgICAg
ICB2aXNpdCA9IGl0LT52aXNpdEJpbmFyeShQcmVWaXNpdCwgdGhpcyk7CisgICAgCisgICAgLy8K
KyAgICAvLyBWaXNpdCB0aGUgY2hpbGRyZW4sIGluIHRoZSByaWdodCBvcmRlci4KKyAgICAvLwor
ICAgIGlmICh2aXNpdCkKKyAgICB7CisgICAgICAgIGl0LT5pbmNyZW1lbnREZXB0aCh0aGlzKTsK
KworICAgICAgICBpZiAoaXQtPnJpZ2h0VG9MZWZ0KSAKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKHJpZ2h0KQorICAgICAgICAgICAgICAgIHJpZ2h0LT50cmF2ZXJzZShpdCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmIChpdC0+aW5WaXNpdCkKKyAgICAgICAgICAgICAgICB2aXNp
dCA9IGl0LT52aXNpdEJpbmFyeShJblZpc2l0LCB0aGlzKTsKKworICAgICAgICAgICAgaWYgKHZp
c2l0ICYmIGxlZnQpCisgICAgICAgICAgICAgICAgbGVmdC0+dHJhdmVyc2UoaXQpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGxlZnQpCisgICAg
ICAgICAgICAgICAgbGVmdC0+dHJhdmVyc2UoaXQpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAoaXQtPmluVmlzaXQpCisgICAgICAgICAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRCaW5h
cnkoSW5WaXNpdCwgdGhpcyk7CisKKyAgICAgICAgICAgIGlmICh2aXNpdCAmJiByaWdodCkKKyAg
ICAgICAgICAgICAgICByaWdodC0+dHJhdmVyc2UoaXQpOworICAgICAgICB9CisKKyAgICAgICAg
aXQtPmRlY3JlbWVudERlcHRoKCk7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBWaXNpdCB0aGUg
bm9kZSBhZnRlciB0aGUgY2hpbGRyZW4sIGlmIHJlcXVlc3RlZCBhbmQgdGhlIHRyYXZlcnNhbAor
ICAgIC8vIGhhc24ndCBiZWVuIGNhbmNlbGxlZCB5ZXQuCisgICAgLy8KKyAgICBpZiAodmlzaXQg
JiYgaXQtPnBvc3RWaXNpdCkKKyAgICAgICAgaXQtPnZpc2l0QmluYXJ5KFBvc3RWaXNpdCwgdGhp
cyk7Cit9CisKKy8vCisvLyBUcmF2ZXJzZSBhIHVuYXJ5IG5vZGUuICBTYW1lIGNvbW1lbnRzIGlu
IGJpbmFyeSBub2RlIGFwcGx5IGhlcmUuCisvLwordm9pZCBUSW50ZXJtVW5hcnk6OnRyYXZlcnNl
KFRJbnRlcm1UcmF2ZXJzZXIgKml0KQoreworICAgIGJvb2wgdmlzaXQgPSB0cnVlOworCisgICAg
aWYgKGl0LT5wcmVWaXNpdCkKKyAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRVbmFyeShQcmVWaXNp
dCwgdGhpcyk7CisKKyAgICBpZiAodmlzaXQpIHsKKyAgICAgICAgaXQtPmluY3JlbWVudERlcHRo
KHRoaXMpOworICAgICAgICBvcGVyYW5kLT50cmF2ZXJzZShpdCk7CisgICAgICAgIGl0LT5kZWNy
ZW1lbnREZXB0aCgpOworICAgIH0KKyAgICAKKyAgICBpZiAodmlzaXQgJiYgaXQtPnBvc3RWaXNp
dCkKKyAgICAgICAgaXQtPnZpc2l0VW5hcnkoUG9zdFZpc2l0LCB0aGlzKTsKK30KKworLy8KKy8v
IFRyYXZlcnNlIGFuIGFnZ3JlZ2F0ZSBub2RlLiAgU2FtZSBjb21tZW50cyBpbiBiaW5hcnkgbm9k
ZSBhcHBseSBoZXJlLgorLy8KK3ZvaWQgVEludGVybUFnZ3JlZ2F0ZTo6dHJhdmVyc2UoVEludGVy
bVRyYXZlcnNlciAqaXQpCit7CisgICAgYm9vbCB2aXNpdCA9IHRydWU7CisgICAgCisgICAgaWYg
KGl0LT5wcmVWaXNpdCkKKyAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRBZ2dyZWdhdGUoUHJlVmlz
aXQsIHRoaXMpOworICAgIAorICAgIGlmICh2aXNpdCkKKyAgICB7CisgICAgICAgIGl0LT5pbmNy
ZW1lbnREZXB0aCh0aGlzKTsKKworICAgICAgICBpZiAoaXQtPnJpZ2h0VG9MZWZ0KQorICAgICAg
ICB7CisgICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6cmV2ZXJzZV9pdGVyYXRvciBz
aXQgPSBzZXF1ZW5jZS5yYmVnaW4oKTsgc2l0ICE9IHNlcXVlbmNlLnJlbmQoKTsgc2l0KyspCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKCpzaXQpLT50cmF2ZXJzZShpdCk7CisKKyAg
ICAgICAgICAgICAgICBpZiAodmlzaXQgJiYgaXQtPmluVmlzaXQpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBpZiAoKnNpdCAhPSBzZXF1ZW5jZS5mcm9udCgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRBZ2dyZWdhdGUoSW5WaXNpdCwg
dGhpcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0
ZXJhdG9yIHNpdCA9IHNlcXVlbmNlLmJlZ2luKCk7IHNpdCAhPSBzZXF1ZW5jZS5lbmQoKTsgc2l0
KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKCpzaXQpLT50cmF2ZXJzZShpdCk7
CisKKyAgICAgICAgICAgICAgICBpZiAodmlzaXQgJiYgaXQtPmluVmlzaXQpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoKnNpdCAhPSBzZXF1ZW5jZS5iYWNrKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdCA9IGl0LT52aXNpdEFnZ3JlZ2F0ZShJblZp
c2l0LCB0aGlzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGl0LT5kZWNyZW1lbnREZXB0aCgpOworICAgIH0KKworICAgIGlm
ICh2aXNpdCAmJiBpdC0+cG9zdFZpc2l0KQorICAgICAgICBpdC0+dmlzaXRBZ2dyZWdhdGUoUG9z
dFZpc2l0LCB0aGlzKTsKK30KKworLy8KKy8vIFRyYXZlcnNlIGEgc2VsZWN0aW9uIG5vZGUuICBT
YW1lIGNvbW1lbnRzIGluIGJpbmFyeSBub2RlIGFwcGx5IGhlcmUuCisvLwordm9pZCBUSW50ZXJt
U2VsZWN0aW9uOjp0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyICppdCkKK3sKKyAgICBib29sIHZp
c2l0ID0gdHJ1ZTsKKworICAgIGlmIChpdC0+cHJlVmlzaXQpCisgICAgICAgIHZpc2l0ID0gaXQt
PnZpc2l0U2VsZWN0aW9uKFByZVZpc2l0LCB0aGlzKTsKKyAgICAKKyAgICBpZiAodmlzaXQpIHsK
KyAgICAgICAgaXQtPmluY3JlbWVudERlcHRoKHRoaXMpOworICAgICAgICBpZiAoaXQtPnJpZ2h0
VG9MZWZ0KSB7CisgICAgICAgICAgICBpZiAoZmFsc2VCbG9jaykKKyAgICAgICAgICAgICAgICBm
YWxzZUJsb2NrLT50cmF2ZXJzZShpdCk7CisgICAgICAgICAgICBpZiAodHJ1ZUJsb2NrKQorICAg
ICAgICAgICAgICAgIHRydWVCbG9jay0+dHJhdmVyc2UoaXQpOworICAgICAgICAgICAgY29uZGl0
aW9uLT50cmF2ZXJzZShpdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb25kaXRp
b24tPnRyYXZlcnNlKGl0KTsKKyAgICAgICAgICAgIGlmICh0cnVlQmxvY2spCisgICAgICAgICAg
ICAgICAgdHJ1ZUJsb2NrLT50cmF2ZXJzZShpdCk7CisgICAgICAgICAgICBpZiAoZmFsc2VCbG9j
aykKKyAgICAgICAgICAgICAgICBmYWxzZUJsb2NrLT50cmF2ZXJzZShpdCk7CisgICAgICAgIH0K
KyAgICAgICAgaXQtPmRlY3JlbWVudERlcHRoKCk7CisgICAgfQorCisgICAgaWYgKHZpc2l0ICYm
IGl0LT5wb3N0VmlzaXQpCisgICAgICAgIGl0LT52aXNpdFNlbGVjdGlvbihQb3N0VmlzaXQsIHRo
aXMpOworfQorCisvLworLy8gVHJhdmVyc2UgYSBsb29wIG5vZGUuICBTYW1lIGNvbW1lbnRzIGlu
IGJpbmFyeSBub2RlIGFwcGx5IGhlcmUuCisvLwordm9pZCBUSW50ZXJtTG9vcDo6dHJhdmVyc2Uo
VEludGVybVRyYXZlcnNlciAqaXQpCit7CisgICAgYm9vbCB2aXNpdCA9IHRydWU7CisKKyAgICBp
ZiAoaXQtPnByZVZpc2l0KQorICAgICAgICB2aXNpdCA9IGl0LT52aXNpdExvb3AoUHJlVmlzaXQs
IHRoaXMpOworICAgIAorICAgIGlmICh2aXNpdCkKKyAgICB7CisgICAgICAgIGl0LT5pbmNyZW1l
bnREZXB0aCh0aGlzKTsKKworICAgICAgICBpZiAoaXQtPnJpZ2h0VG9MZWZ0KQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoZXhwcikKKyAgICAgICAgICAgICAgICBleHByLT50cmF2ZXJzZShp
dCk7CisKKyAgICAgICAgICAgIGlmIChib2R5KQorICAgICAgICAgICAgICAgIGJvZHktPnRyYXZl
cnNlKGl0KTsKKworICAgICAgICAgICAgaWYgKGNvbmQpCisgICAgICAgICAgICAgICAgY29uZC0+
dHJhdmVyc2UoaXQpOworCisgICAgICAgICAgICBpZiAoaW5pdCkKKyAgICAgICAgICAgICAgICBp
bml0LT50cmF2ZXJzZShpdCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoaW5pdCkKKyAgICAgICAgICAgICAgICBpbml0LT50cmF2ZXJzZShpdCk7
CisKKyAgICAgICAgICAgIGlmIChjb25kKQorICAgICAgICAgICAgICAgIGNvbmQtPnRyYXZlcnNl
KGl0KTsKKworICAgICAgICAgICAgaWYgKGJvZHkpCisgICAgICAgICAgICAgICAgYm9keS0+dHJh
dmVyc2UoaXQpOworCisgICAgICAgICAgICBpZiAoZXhwcikKKyAgICAgICAgICAgICAgICBleHBy
LT50cmF2ZXJzZShpdCk7CisgICAgICAgIH0KKworICAgICAgICBpdC0+ZGVjcmVtZW50RGVwdGgo
KTsKKyAgICB9CisKKyAgICBpZiAodmlzaXQgJiYgaXQtPnBvc3RWaXNpdCkKKyAgICAgICAgaXQt
PnZpc2l0TG9vcChQb3N0VmlzaXQsIHRoaXMpOworfQorCisvLworLy8gVHJhdmVyc2UgYSBicmFu
Y2ggbm9kZS4gIFNhbWUgY29tbWVudHMgaW4gYmluYXJ5IG5vZGUgYXBwbHkgaGVyZS4KKy8vCit2
b2lkIFRJbnRlcm1CcmFuY2g6OnRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIgKml0KQoreworICAg
IGJvb2wgdmlzaXQgPSB0cnVlOworCisgICAgaWYgKGl0LT5wcmVWaXNpdCkKKyAgICAgICAgdmlz
aXQgPSBpdC0+dmlzaXRCcmFuY2goUHJlVmlzaXQsIHRoaXMpOworICAgIAorICAgIGlmICh2aXNp
dCAmJiBleHByZXNzaW9uKSB7CisgICAgICAgIGl0LT5pbmNyZW1lbnREZXB0aCh0aGlzKTsKKyAg
ICAgICAgZXhwcmVzc2lvbi0+dHJhdmVyc2UoaXQpOworICAgICAgICBpdC0+ZGVjcmVtZW50RGVw
dGgoKTsKKyAgICB9CisKKyAgICBpZiAodmlzaXQgJiYgaXQtPnBvc3RWaXNpdCkKKyAgICAgICAg
aXQtPnZpc2l0QnJhbmNoKFBvc3RWaXNpdCwgdGhpcyk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybWVkaWF0ZS5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRl
cm1lZGlhdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc3N2NhYjU0NTg1MWU0NzcwZDM1ZjQyYWRmODhkOWJm
MTc1YjZlMjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1lZGlhdGUuY3BwCkBAIC0wLDAgKzEsMTUwMCBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworLy8KKy8vIEJ1aWxkIHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVz
ZW50YXRpb24uCisvLworCisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4K
KyNpbmNsdWRlIDxhbGdvcml0aG0+CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0hh
c2hOYW1lcy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvbG9jYWxpbnRlcm1lZGlh
dGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1F1YWxpZmllckFsaXZlLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9SZW1vdmVUcmVlLmgiCisKK2Jvb2wgQ29tcGFy
ZVN0cnVjdHVyZShjb25zdCBUVHlwZSYgbGVmdE5vZGVUeXBlLCBDb25zdGFudFVuaW9uKiByaWdo
dFVuaW9uQXJyYXksIENvbnN0YW50VW5pb24qIGxlZnRVbmlvbkFycmF5KTsKKworc3RhdGljIFRQ
cmVjaXNpb24gR2V0SGlnaGVyUHJlY2lzaW9uKFRQcmVjaXNpb24gbGVmdCwgVFByZWNpc2lvbiBy
aWdodCkKK3sKKyAgICByZXR1cm4gbGVmdCA+IHJpZ2h0ID8gbGVmdCA6IHJpZ2h0OworfQorCitj
b25zdCBjaGFyKiBnZXRPcGVyYXRvclN0cmluZyhUT3BlcmF0b3Igb3ApCit7CisgICAgc3dpdGNo
IChvcCkgeworICAgICAgY2FzZSBFT3BJbml0aWFsaXplOiByZXR1cm4gIj0iOworICAgICAgY2Fz
ZSBFT3BBc3NpZ246IHJldHVybiAiPSI7CisgICAgICBjYXNlIEVPcEFkZEFzc2lnbjogcmV0dXJu
ICIrPSI7CisgICAgICBjYXNlIEVPcFN1YkFzc2lnbjogcmV0dXJuICItPSI7CisgICAgICBjYXNl
IEVPcERpdkFzc2lnbjogcmV0dXJuICIvPSI7CisKKyAgICAgIC8vIEZhbGwtdGhyb3VnaC4KKyAg
ICAgIGNhc2UgRU9wTXVsQXNzaWduOiAKKyAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXhB
c3NpZ246CisgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOgorICAgICAgY2Fz
ZSBFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbjoKKyAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNN
YXRyaXhBc3NpZ246IHJldHVybiAiKj0iOworCisgICAgICAvLyBGYWxsLXRocm91Z2guCisgICAg
ICBjYXNlIEVPcEluZGV4RGlyZWN0OgorICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OiByZXR1
cm4gIltdIjsKKworICAgICAgY2FzZSBFT3BJbmRleERpcmVjdFN0cnVjdDogcmV0dXJuICIuIjsK
KyAgICAgIGNhc2UgRU9wVmVjdG9yU3dpenpsZTogcmV0dXJuICIuIjsKKyAgICAgIGNhc2UgRU9w
QWRkOiByZXR1cm4gIisiOworICAgICAgY2FzZSBFT3BTdWI6IHJldHVybiAiLSI7CisgICAgICBj
YXNlIEVPcE11bDogcmV0dXJuICIqIjsKKyAgICAgIGNhc2UgRU9wRGl2OiByZXR1cm4gIi8iOwor
ICAgICAgY2FzZSBFT3BNb2Q6IFVOSU1QTEVNRU5URUQoKTsgYnJlYWs7CisgICAgICBjYXNlIEVP
cEVxdWFsOiByZXR1cm4gIj09IjsKKyAgICAgIGNhc2UgRU9wTm90RXF1YWw6IHJldHVybiAiIT0i
OworICAgICAgY2FzZSBFT3BMZXNzVGhhbjogcmV0dXJuICI8IjsKKyAgICAgIGNhc2UgRU9wR3Jl
YXRlclRoYW46IHJldHVybiAiPiI7CisgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6IHJldHVy
biAiPD0iOworICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiByZXR1cm4gIj49IjsKKwor
ICAgICAgLy8gRmFsbC10aHJvdWdoLgorICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjoK
KyAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXg6CisgICAgICBjYXNlIEVPcE1hdHJpeFRp
bWVzVmVjdG9yOgorICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhcjoKKyAgICAgIGNhc2Ug
RU9wTWF0cml4VGltZXNNYXRyaXg6IHJldHVybiAiKiI7CisKKyAgICAgIGNhc2UgRU9wTG9naWNh
bE9yOiByZXR1cm4gInx8IjsKKyAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjogcmV0dXJuICJeXiI7
CisgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6IHJldHVybiAiJiYiOworICAgICAgY2FzZSBFT3BO
ZWdhdGl2ZTogcmV0dXJuICItIjsKKyAgICAgIGNhc2UgRU9wVmVjdG9yTG9naWNhbE5vdDogcmV0
dXJuICJub3QiOworICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OiByZXR1cm4gIiEiOworICAgICAg
Y2FzZSBFT3BQb3N0SW5jcmVtZW50OiByZXR1cm4gIisrIjsKKyAgICAgIGNhc2UgRU9wUG9zdERl
Y3JlbWVudDogcmV0dXJuICItLSI7CisgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDogcmV0dXJu
ICIrKyI7CisgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDogcmV0dXJuICItLSI7CisKKyAgICAg
IC8vIEZhbGwtdGhyb3VnaC4KKyAgICAgIGNhc2UgRU9wQ29udkludFRvQm9vbDoKKyAgICAgIGNh
c2UgRU9wQ29udkZsb2F0VG9Cb29sOiByZXR1cm4gImJvb2wiOworIAorICAgICAgLy8gRmFsbC10
aHJvdWdoLgorICAgICAgY2FzZSBFT3BDb252Qm9vbFRvRmxvYXQ6CisgICAgICBjYXNlIEVPcENv
bnZJbnRUb0Zsb2F0OiByZXR1cm4gImZsb2F0IjsKKyAKKyAgICAgIC8vIEZhbGwtdGhyb3VnaC4K
KyAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9JbnQ6CisgICAgICBjYXNlIEVPcENvbnZCb29sVG9J
bnQ6IHJldHVybiAiaW50IjsKKworICAgICAgY2FzZSBFT3BSYWRpYW5zOiByZXR1cm4gInJhZGlh
bnMiOworICAgICAgY2FzZSBFT3BEZWdyZWVzOiByZXR1cm4gImRlZ3JlZXMiOworICAgICAgY2Fz
ZSBFT3BTaW46IHJldHVybiAic2luIjsKKyAgICAgIGNhc2UgRU9wQ29zOiByZXR1cm4gImNvcyI7
CisgICAgICBjYXNlIEVPcFRhbjogcmV0dXJuICJ0YW4iOworICAgICAgY2FzZSBFT3BBc2luOiBy
ZXR1cm4gImFzaW4iOworICAgICAgY2FzZSBFT3BBY29zOiByZXR1cm4gImFjb3MiOworICAgICAg
Y2FzZSBFT3BBdGFuOiByZXR1cm4gImF0YW4iOworICAgICAgY2FzZSBFT3BFeHA6IHJldHVybiAi
ZXhwIjsKKyAgICAgIGNhc2UgRU9wTG9nOiByZXR1cm4gImxvZyI7CisgICAgICBjYXNlIEVPcEV4
cDI6IHJldHVybiAiZXhwMiI7CisgICAgICBjYXNlIEVPcExvZzI6IHJldHVybiAibG9nMiI7Cisg
ICAgICBjYXNlIEVPcFNxcnQ6IHJldHVybiAic3FydCI7CisgICAgICBjYXNlIEVPcEludmVyc2VT
cXJ0OiByZXR1cm4gImludmVyc2VzcXJ0IjsKKyAgICAgIGNhc2UgRU9wQWJzOiByZXR1cm4gImFi
cyI7CisgICAgICBjYXNlIEVPcFNpZ246IHJldHVybiAic2lnbiI7CisgICAgICBjYXNlIEVPcEZs
b29yOiByZXR1cm4gImZsb29yIjsKKyAgICAgIGNhc2UgRU9wQ2VpbDogcmV0dXJuICJjZWlsIjsK
KyAgICAgIGNhc2UgRU9wRnJhY3Q6IHJldHVybiAiZnJhY3QiOworICAgICAgY2FzZSBFT3BMZW5n
dGg6IHJldHVybiAibGVuZ3RoIjsKKyAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiByZXR1cm4gIm5v
cm1hbGl6ZSI7CisgICAgICBjYXNlIEVPcERGZHg6IHJldHVybiAiZEZkeCI7CisgICAgICBjYXNl
IEVPcERGZHk6IHJldHVybiAiZEZkeSI7CisgICAgICBjYXNlIEVPcEZ3aWR0aDogcmV0dXJuICJm
d2lkdGgiOworICAgICAgY2FzZSBFT3BBbnk6IHJldHVybiAiYW55IjsKKyAgICAgIGNhc2UgRU9w
QWxsOiByZXR1cm4gImFsbCI7CisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKyAgICBy
ZXR1cm4gIiI7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBGaXJzdCBzZXQgb2Yg
ZnVuY3Rpb25zIGFyZSB0byBoZWxwIGJ1aWxkIHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRp
b24uCisvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBtZW1iZXIgZnVuY3Rpb25zIG9mIHRoZSBu
b2Rlcy4KKy8vIFRoZXkgYXJlIGNhbGxlZCBmcm9tIHBhcnNlciBwcm9kdWN0aW9ucy4KKy8vCisv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLworCisvLworLy8gQWRkIGEgdGVybWluYWwgbm9kZSBmb3IgYW4g
aWRlbnRpZmllciBpbiBhbiBleHByZXNzaW9uLgorLy8KKy8vIFJldHVybnMgdGhlIGFkZGVkIG5v
ZGUuCisvLworVEludGVybVN5bWJvbCogVEludGVybWVkaWF0ZTo6YWRkU3ltYm9sKGludCBpZCwg
Y29uc3QgVFN0cmluZyYgbmFtZSwgY29uc3QgVFR5cGUmIHR5cGUsIGNvbnN0IFRTb3VyY2VMb2Mm
IGxpbmUpCit7CisgICAgVEludGVybVN5bWJvbCogbm9kZSA9IG5ldyBUSW50ZXJtU3ltYm9sKGlk
LCBuYW1lLCB0eXBlKTsKKyAgICBub2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAgcmV0dXJuIG5v
ZGU7Cit9CisKKy8vCisvLyBDb25uZWN0IHR3byBub2RlcyB3aXRoIGEgbmV3IHBhcmVudCB0aGF0
IGRvZXMgYSBiaW5hcnkgb3BlcmF0aW9uIG9uIHRoZSBub2Rlcy4KKy8vCisvLyBSZXR1cm5zIHRo
ZSBhZGRlZCBub2RlLgorLy8KK1RJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkQmluYXJ5
TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdo
dCwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKK3sK
KyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9wRXF1YWw6CisgICAgICAgIGNhc2Ug
RU9wTm90RXF1YWw6CisgICAgICAgICAgICBpZiAobGVmdC0+aXNBcnJheSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTGVz
c1RoYW46CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46CisgICAgICAgIGNhc2UgRU9wTGVz
c1RoYW5FcXVhbDoKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgorICAgICAgICAg
ICAgaWYgKGxlZnQtPmlzTWF0cml4KCkgfHwgbGVmdC0+aXNBcnJheSgpIHx8IGxlZnQtPmlzVmVj
dG9yKCkgfHwgbGVmdC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BMb2dpY2FsT3I6CisgICAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjoKKyAgICAg
ICAgY2FzZSBFT3BMb2dpY2FsQW5kOgorICAgICAgICAgICAgaWYgKGxlZnQtPmdldEJhc2ljVHlw
ZSgpICE9IEVidEJvb2wgfHwgbGVmdC0+aXNNYXRyaXgoKSB8fCBsZWZ0LT5pc0FycmF5KCkgfHwg
bGVmdC0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQWRkOgorICAgICAgICBj
YXNlIEVPcFN1YjoKKyAgICAgICAgY2FzZSBFT3BEaXY6CisgICAgICAgIGNhc2UgRU9wTXVsOgor
ICAgICAgICAgICAgaWYgKGxlZnQtPmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCB8fCBsZWZ0
LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRCb29sKQorICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICAvLworICAgIC8vIEZpcnN0IHRy
eSBjb252ZXJ0aW5nIHRoZSBjaGlsZHJlbiB0byBjb21wYXRpYmxlIHR5cGVzLgorICAgIC8vCisg
ICAgaWYgKGxlZnQtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKSAmJiByaWdodC0+Z2V0VHlwZSgpLmdl
dFN0cnVjdCgpKSB7CisgICAgICAgIGlmIChsZWZ0LT5nZXRUeXBlKCkgIT0gcmlnaHQtPmdldFR5
cGUoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSB7CisgICAgICAgIFRJbnRl
cm1UeXBlZCogY2hpbGQgPSBhZGRDb252ZXJzaW9uKG9wLCBsZWZ0LT5nZXRUeXBlKCksIHJpZ2h0
KTsKKyAgICAgICAgaWYgKGNoaWxkKQorICAgICAgICAgICAgcmlnaHQgPSBjaGlsZDsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBjaGlsZCA9IGFkZENvbnZlcnNpb24ob3AsIHJpZ2h0LT5n
ZXRUeXBlKCksIGxlZnQpOworICAgICAgICAgICAgaWYgKGNoaWxkKQorICAgICAgICAgICAgICAg
IGxlZnQgPSBjaGlsZDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vCisgICAgLy8gTmVlZCBhIG5ldyBub2RlIGhv
bGRpbmcgdGhpbmdzIHRvZ2V0aGVyIHRoZW4uICBNYWtlCisgICAgLy8gb25lIGFuZCBwcm9tb3Rl
IGl0IHRvIHRoZSByaWdodCB0eXBlLgorICAgIC8vCisgICAgVEludGVybUJpbmFyeSogbm9kZSA9
IG5ldyBUSW50ZXJtQmluYXJ5KG9wKTsKKyAgICBub2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAg
bm9kZS0+c2V0TGVmdChsZWZ0KTsKKyAgICBub2RlLT5zZXRSaWdodChyaWdodCk7CisgICAgaWYg
KCFub2RlLT5wcm9tb3RlKGluZm9TaW5rKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLwor
ICAgIC8vIFNlZSBpZiB3ZSBjYW4gZm9sZCBjb25zdGFudHMuCisgICAgLy8KKyAgICBUSW50ZXJt
VHlwZWQqIHR5cGVkUmV0dXJuTm9kZSA9IDA7CisgICAgVEludGVybUNvbnN0YW50VW5pb24gKmxl
ZnRUZW1wQ29uc3RhbnQgPSBsZWZ0LT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKyAgICBUSW50ZXJt
Q29uc3RhbnRVbmlvbiAqcmlnaHRUZW1wQ29uc3RhbnQgPSByaWdodC0+Z2V0QXNDb25zdGFudFVu
aW9uKCk7CisgICAgaWYgKGxlZnRUZW1wQ29uc3RhbnQgJiYgcmlnaHRUZW1wQ29uc3RhbnQpIHsK
KyAgICAgICAgdHlwZWRSZXR1cm5Ob2RlID0gbGVmdFRlbXBDb25zdGFudC0+Zm9sZChub2RlLT5n
ZXRPcCgpLCByaWdodFRlbXBDb25zdGFudCwgaW5mb1NpbmspOworCisgICAgICAgIGlmICh0eXBl
ZFJldHVybk5vZGUpCisgICAgICAgICAgICByZXR1cm4gdHlwZWRSZXR1cm5Ob2RlOworICAgIH0K
KworICAgIHJldHVybiBub2RlOworfQorCisvLworLy8gQ29ubmVjdCB0d28gbm9kZXMgdGhyb3Vn
aCBhbiBhc3NpZ25tZW50LgorLy8KKy8vIFJldHVybnMgdGhlIGFkZGVkIG5vZGUuCisvLworVElu
dGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRBc3NpZ24oVE9wZXJhdG9yIG9wLCBUSW50ZXJt
VHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUp
Cit7CisgICAgLy8KKyAgICAvLyBMaWtlIGFkZGluZyBiaW5hcnkgbWF0aCwgZXhjZXB0IHRoZSBj
b252ZXJzaW9uIGNhbiBvbmx5IGdvCisgICAgLy8gZnJvbSByaWdodCB0byBsZWZ0LgorICAgIC8v
CisgICAgVEludGVybUJpbmFyeSogbm9kZSA9IG5ldyBUSW50ZXJtQmluYXJ5KG9wKTsKKyAgICBu
b2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAgVEludGVybVR5cGVkKiBjaGlsZCA9IGFkZENvbnZl
cnNpb24ob3AsIGxlZnQtPmdldFR5cGUoKSwgcmlnaHQpOworICAgIGlmIChjaGlsZCA9PSAwKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIG5vZGUtPnNldExlZnQobGVmdCk7CisgICAgbm9kZS0+
c2V0UmlnaHQoY2hpbGQpOworICAgIGlmICghIG5vZGUtPnByb21vdGUoaW5mb1NpbmspKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBub2RlOworfQorCisvLworLy8gQ29ubmVjdCB0
d28gbm9kZXMgdGhyb3VnaCBhbiBpbmRleCBvcGVyYXRvciwgd2hlcmUgdGhlIGxlZnQgbm9kZSBp
cyB0aGUgYmFzZQorLy8gb2YgYW4gYXJyYXkgb3Igc3RydWN0LCBhbmQgdGhlIHJpZ2h0IG5vZGUg
aXMgYSBkaXJlY3Qgb3IgaW5kaXJlY3Qgb2Zmc2V0LgorLy8KKy8vIFJldHVybnMgdGhlIGFkZGVk
IG5vZGUuCisvLyBUaGUgY2FsbGVyIHNob3VsZCBzZXQgdGhlIHR5cGUgb2YgdGhlIHJldHVybmVk
IG5vZGUuCisvLworVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRJbmRleChUT3BlcmF0
b3Igb3AsIFRJbnRlcm1UeXBlZCogYmFzZSwgVEludGVybVR5cGVkKiBpbmRleCwgY29uc3QgVFNv
dXJjZUxvYyYgbGluZSkKK3sKKyAgICBUSW50ZXJtQmluYXJ5KiBub2RlID0gbmV3IFRJbnRlcm1C
aW5hcnkob3ApOworICAgIG5vZGUtPnNldExpbmUobGluZSk7CisgICAgbm9kZS0+c2V0TGVmdChi
YXNlKTsKKyAgICBub2RlLT5zZXRSaWdodChpbmRleCk7CisKKyAgICAvLyBjYWxsZXIgc2hvdWxk
IHNldCB0aGUgdHlwZQorCisgICAgcmV0dXJuIG5vZGU7Cit9CisKKy8vCisvLyBBZGQgb25lIG5v
ZGUgYXMgdGhlIHBhcmVudCBvZiBhbm90aGVyIHRoYXQgaXQgb3BlcmF0ZXMgb24uCisvLworLy8g
UmV0dXJucyB0aGUgYWRkZWQgbm9kZS4KKy8vCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6
OmFkZFVuYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBjaGlsZE5vZGUsIGNvbnN0
IFRTb3VyY2VMb2MmIGxpbmUsIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCit7CisgICAgVElu
dGVybVVuYXJ5KiBub2RlOworICAgIFRJbnRlcm1UeXBlZCogY2hpbGQgPSBjaGlsZE5vZGUtPmdl
dEFzVHlwZWQoKTsKKworICAgIGlmIChjaGlsZCA9PSAwKSB7CisgICAgICAgIGluZm9TaW5rLmlu
Zm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbGluZSwgIkJhZCB0eXBlIGluIEFkZFVu
YXJ5TWF0aCIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG9wKSB7
CisgICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDoKKyAgICAgICAgICAgIGlmIChjaGlsZC0+Z2V0
VHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidEJvb2wgfHwgY2hpbGQtPmdldFR5cGUoKS5pc01h
dHJpeCgpIHx8IGNoaWxkLT5nZXRUeXBlKCkuaXNBcnJheSgpIHx8IGNoaWxkLT5nZXRUeXBlKCku
aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50OgorICAg
ICAgICBjYXNlIEVPcFByZUluY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50
OgorICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BOZWdhdGl2
ZToKKyAgICAgICAgICAgIGlmIChjaGlsZC0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVi
dFN0cnVjdCB8fCBjaGlsZC0+Z2V0VHlwZSgpLmlzQXJyYXkoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorCisgICAgLy8KKyAgICAv
LyBEbyB3ZSBuZWVkIHRvIHByb21vdGUgdGhlIG9wZXJhbmQ/CisgICAgLy8KKyAgICAvLyBOb3Rl
OiBJbXBsaWNpdCBwcm9tb3Rpb25zIHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBsYW5ndWFnZS4KKyAg
ICAvLworICAgIFRCYXNpY1R5cGUgbmV3VHlwZSA9IEVidFZvaWQ7CisgICAgc3dpdGNoIChvcCkg
eworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDogICBuZXdUeXBlID0gRWJ0SW50OyAgIGJy
ZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6ICBuZXdUeXBlID0gRWJ0Qm9vbDsg
IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OiBuZXdUeXBlID0gRWJ0Rmxv
YXQ7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICBpZiAobmV3
VHlwZSAhPSBFYnRWb2lkKSB7CisgICAgICAgIGNoaWxkID0gYWRkQ29udmVyc2lvbihvcCwgVFR5
cGUobmV3VHlwZSwgY2hpbGQtPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksCisgICAgICAg
ICAgICBjaGlsZC0+Z2V0Tm9taW5hbFNpemUoKSwKKyAgICAgICAgICAgIGNoaWxkLT5pc01hdHJp
eCgpLAorICAgICAgICAgICAgY2hpbGQtPmlzQXJyYXkoKSksCisgICAgICAgICAgICBjaGlsZCk7
CisgICAgICAgIGlmIChjaGlsZCA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
CisgICAgLy8KKyAgICAvLyBGb3IgY29uc3RydWN0b3JzLCB3ZSBhcmUgbm93IGRvbmUsIGl0J3Mg
YWxsIGluIHRoZSBjb252ZXJzaW9uLgorICAgIC8vCisgICAgc3dpdGNoIChvcCkgeworICAgICAg
ICBjYXNlIEVPcENvbnN0cnVjdEludDoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29sOgor
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OgorICAgICAgICAgICAgcmV0dXJuIGNoaWxk
OworICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICBUSW50ZXJtQ29uc3RhbnRV
bmlvbiAqY2hpbGRUZW1wQ29uc3RhbnQgPSAwOworICAgIGlmIChjaGlsZC0+Z2V0QXNDb25zdGFu
dFVuaW9uKCkpCisgICAgICAgIGNoaWxkVGVtcENvbnN0YW50ID0gY2hpbGQtPmdldEFzQ29uc3Rh
bnRVbmlvbigpOworCisgICAgLy8KKyAgICAvLyBNYWtlIGEgbmV3IG5vZGUgZm9yIHRoZSBvcGVy
YXRvci4KKyAgICAvLworICAgIG5vZGUgPSBuZXcgVEludGVybVVuYXJ5KG9wKTsKKyAgICBub2Rl
LT5zZXRMaW5lKGxpbmUpOworICAgIG5vZGUtPnNldE9wZXJhbmQoY2hpbGQpOworCisgICAgaWYg
KCEgbm9kZS0+cHJvbW90ZShpbmZvU2luaykpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYg
KGNoaWxkVGVtcENvbnN0YW50KSAgeworICAgICAgICBUSW50ZXJtVHlwZWQqIG5ld0NoaWxkID0g
Y2hpbGRUZW1wQ29uc3RhbnQtPmZvbGQob3AsIDAsIGluZm9TaW5rKTsKKworICAgICAgICBpZiAo
bmV3Q2hpbGQpCisgICAgICAgICAgICByZXR1cm4gbmV3Q2hpbGQ7CisgICAgfQorCisgICAgcmV0
dXJuIG5vZGU7Cit9CisKKy8vCisvLyBUaGlzIGlzIHRoZSBzYWZlIHdheSB0byBjaGFuZ2UgdGhl
IG9wZXJhdG9yIG9uIGFuIGFnZ3JlZ2F0ZSwgYXMgaXQKKy8vIGRvZXMgbG90cyBvZiBlcnJvciBj
aGVja2luZyBhbmQgZml4aW5nLiAgRXNwZWNpYWxseSBmb3IgZXN0YWJsaXNoaW5nCisvLyBhIGZ1
bmN0aW9uIGNhbGwncyBvcGVyYXRpb24gb24gaXQncyBzZXQgb2YgcGFyYW1ldGVycy4gIFNlcXVl
bmNlcworLy8gb2YgaW5zdHJ1Y3Rpb25zIGFyZSBhbHNvIGFnZ3JlZ2F0ZXMsIGJ1dCB0aGV5IGp1
c3QgZGlyZW5jdGx5IHNldAorLy8gdGhlaXIgb3BlcmF0b3IgdG8gRU9wU2VxdWVuY2UuCisvLwor
Ly8gUmV0dXJucyBhbiBhZ2dyZWdhdGUgbm9kZSwgd2hpY2ggY291bGQgYmUgdGhlIG9uZSBwYXNz
ZWQgaW4gaWYKKy8vIGl0IHdhcyBhbHJlYWR5IGFuIGFnZ3JlZ2F0ZSBidXQgbm8gb3BlcmF0b3Ig
d2FzIHNldC4KKy8vCitUSW50ZXJtQWdncmVnYXRlKiBUSW50ZXJtZWRpYXRlOjpzZXRBZ2dyZWdh
dGVPcGVyYXRvcihUSW50ZXJtTm9kZSogbm9kZSwgVE9wZXJhdG9yIG9wLCBjb25zdCBUU291cmNl
TG9jJiBsaW5lKQoreworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ05vZGU7CisKKyAgICAvLwor
ICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIGFnZ3JlZ2F0ZS4gIElmIG5vdCB0dXJuIGl0IGlu
dG8gb25lLgorICAgIC8vCisgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgYWdnTm9kZSA9IG5vZGUt
PmdldEFzQWdncmVnYXRlKCk7CisgICAgICAgIGlmIChhZ2dOb2RlID09IDAgfHwgYWdnTm9kZS0+
Z2V0T3AoKSAhPSBFT3BOdWxsKSB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gTWFr
ZSBhbiBhZ2dyZWdhdGUgY29udGFpbmluZyB0aGlzIG5vZGUuCisgICAgICAgICAgICAvLworICAg
ICAgICAgICAgYWdnTm9kZSA9IG5ldyBUSW50ZXJtQWdncmVnYXRlKCk7CisgICAgICAgICAgICBh
Z2dOb2RlLT5nZXRTZXF1ZW5jZSgpLnB1c2hfYmFjayhub2RlKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZQorICAgICAgICBhZ2dOb2RlID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGUoKTsKKworICAgIC8v
CisgICAgLy8gU2V0IHRoZSBvcGVyYXRvci4KKyAgICAvLworICAgIGFnZ05vZGUtPnNldE9wKG9w
KTsKKyAgICBhZ2dOb2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAgcmV0dXJuIGFnZ05vZGU7Cit9
CisKKy8vCisvLyBDb252ZXJ0IG9uZSB0eXBlIHRvIGFub3RoZXIuCisvLworLy8gUmV0dXJucyB0
aGUgbm9kZSByZXByZXNlbnRpbmcgdGhlIGNvbnZlcnNpb24sIHdoaWNoIGNvdWxkIGJlIHRoZSBz
YW1lCisvLyBub2RlIHBhc3NlZCBpbiBpZiBubyBjb252ZXJzaW9uIHdhcyBuZWVkZWQuCisvLwor
Ly8gUmV0dXJuIDAgaWYgYSBjb252ZXJzaW9uIGNhbid0IGJlIGRvbmUuCisvLworVEludGVybVR5
cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRDb252ZXJzaW9uKFRPcGVyYXRvciBvcCwgY29uc3QgVFR5
cGUmIHR5cGUsIFRJbnRlcm1UeXBlZCogbm9kZSkKK3sKKyAgICAvLworICAgIC8vIERvZXMgdGhl
IGJhc2UgdHlwZSBhbGxvdyBvcGVyYXRpb24/CisgICAgLy8KKyAgICBzd2l0Y2ggKG5vZGUtPmdl
dEJhc2ljVHlwZSgpKSB7CisgICAgICAgIGNhc2UgRWJ0Vm9pZDoKKyAgICAgICAgY2FzZSBFYnRT
YW1wbGVyMkQ6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6CisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBP
dGhlcndpc2UsIGlmIHR5cGVzIGFyZSBpZGVudGljYWwsIG5vIHByb2JsZW0KKyAgICAvLworICAg
IGlmICh0eXBlID09IG5vZGUtPmdldFR5cGUoKSkKKyAgICAgICAgcmV0dXJuIG5vZGU7CisKKyAg
ICAvLworICAgIC8vIElmIG9uZSdzIGEgc3RydWN0dXJlLCB0aGVuIG5vIGNvbnZlcnNpb25zLgor
ICAgIC8vCisgICAgaWYgKHR5cGUuZ2V0U3RydWN0KCkgfHwgbm9kZS0+Z2V0VHlwZSgpLmdldFN0
cnVjdCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vCisgICAgLy8gSWYgb25lJ3MgYW4g
YXJyYXksIHRoZW4gbm8gY29udmVyc2lvbnMuCisgICAgLy8KKyAgICBpZiAodHlwZS5pc0FycmF5
KCkgfHwgbm9kZS0+Z2V0VHlwZSgpLmlzQXJyYXkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBUQmFzaWNUeXBlIHByb21vdGVUbzsKKworICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gRXhwbGljaXQgY29udmVyc2lvbnMKKyAgICAgICAgLy8KKyAgICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RCb29sOgorICAgICAgICAgICAgcHJvbW90ZVRvID0gRWJ0Qm9vbDsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OgorICAgICAg
ICAgICAgcHJvbW90ZVRvID0gRWJ0RmxvYXQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BDb25zdHJ1Y3RJbnQ6CisgICAgICAgICAgICBwcm9tb3RlVG8gPSBFYnRJbnQ7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAvLyBpbXBsaWNpdCBjb252ZXJzaW9ucyB3ZXJlIHJlbW92ZWQgZnJvbSB0aGUgbGFu
Z3VhZ2UuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBl
KCkgIT0gbm9kZS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFNpemUgYW5kIHN0cnVjdHVy
ZSBjb3VsZCBzdGlsbCBkaWZmZXIsIGJ1dCB0aGF0J3MKKyAgICAgICAgICAgIC8vIGhhbmRsZWQg
Ynkgb3BlcmF0b3IgcHJvbW90aW9uLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIHJldHVy
biBub2RlOworICAgIH0KKworICAgIGlmIChub2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKSkgewor
CisgICAgICAgIHJldHVybiAocHJvbW90ZUNvbnN0YW50VW5pb24ocHJvbW90ZVRvLCBub2RlLT5n
ZXRBc0NvbnN0YW50VW5pb24oKSkpOworICAgIH0gZWxzZSB7CisKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gQWRkIGEgbmV3IG5ld05vZGUgZm9yIHRoZSBjb252ZXJzaW9uLgorICAgICAgICAvLwor
ICAgICAgICBUSW50ZXJtVW5hcnkqIG5ld05vZGUgPSAwOworCisgICAgICAgIFRPcGVyYXRvciBu
ZXdPcCA9IEVPcE51bGw7CisgICAgICAgIHN3aXRjaCAocHJvbW90ZVRvKSB7CisgICAgICAgICAg
ICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNU
eXBlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgbmV3T3AgPSBFT3BD
b252SW50VG9GbG9hdDsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6
ICBuZXdPcCA9IEVPcENvbnZCb29sVG9GbG9hdDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2Uo
RVByZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIkJhZCBwcm9tb3Rpb24gbm9k
ZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRCb29sOgorICAg
ICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgbmV3T3AgPSBFT3BDb252SW50VG9Cb29sOyAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OiBuZXdPcCA9IEVPcENvbnZGbG9h
dFRvQm9vbDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3Is
IG5vZGUtPmdldExpbmUoKSwgIkJhZCBwcm9tb3Rpb24gbm9kZSIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6
ICAgbmV3T3AgPSBFT3BDb252Qm9vbFRvSW50OyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgRWJ0RmxvYXQ6ICBuZXdPcCA9IEVPcENvbnZGbG9hdFRvSW50OyBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5r
LmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQmFk
IHByb21vdGlvbiBub2RlIik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJu
YWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQmFkIHByb21vdGlvbiB0eXBlIik7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBUVHlwZSB0eXBlKHByb21v
dGVUbywgbm9kZS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgbm9kZS0+Z2V0Tm9taW5h
bFNpemUoKSwgbm9kZS0+aXNNYXRyaXgoKSwgbm9kZS0+aXNBcnJheSgpKTsKKyAgICAgICAgbmV3
Tm9kZSA9IG5ldyBUSW50ZXJtVW5hcnkobmV3T3AsIHR5cGUpOworICAgICAgICBuZXdOb2RlLT5z
ZXRMaW5lKG5vZGUtPmdldExpbmUoKSk7CisgICAgICAgIG5ld05vZGUtPnNldE9wZXJhbmQobm9k
ZSk7CisKKyAgICAgICAgcmV0dXJuIG5ld05vZGU7CisgICAgfQorfQorCisvLworLy8gU2FmZSB3
YXkgdG8gY29tYmluZSB0d28gbm9kZXMgaW50byBhbiBhZ2dyZWdhdGUuICBXb3JrcyB3aXRoIG51
bGwgcG9pbnRlcnMsCisvLyBhIG5vZGUgdGhhdCdzIG5vdCBhIGFnZ3JlZ2F0ZSB5ZXQsIGV0Yy4K
Ky8vCisvLyBSZXR1cm5zIHRoZSByZXN1bHRpbmcgYWdncmVnYXRlLCB1bmxlc3MgMCB3YXMgcGFz
c2VkIGluIGZvcgorLy8gYm90aCBleGlzdGluZyBub2Rlcy4KKy8vCitUSW50ZXJtQWdncmVnYXRl
KiBUSW50ZXJtZWRpYXRlOjpncm93QWdncmVnYXRlKFRJbnRlcm1Ob2RlKiBsZWZ0LCBUSW50ZXJt
Tm9kZSogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCit7CisgICAgaWYgKGxlZnQgPT0g
MCAmJiByaWdodCA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRJbnRlcm1BZ2dyZWdh
dGUqIGFnZ05vZGUgPSAwOworICAgIGlmIChsZWZ0KQorICAgICAgICBhZ2dOb2RlID0gbGVmdC0+
Z2V0QXNBZ2dyZWdhdGUoKTsKKyAgICBpZiAoIWFnZ05vZGUgfHwgYWdnTm9kZS0+Z2V0T3AoKSAh
PSBFT3BOdWxsKSB7CisgICAgICAgIGFnZ05vZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKKyAg
ICAgICAgaWYgKGxlZnQpCisgICAgICAgICAgICBhZ2dOb2RlLT5nZXRTZXF1ZW5jZSgpLnB1c2hf
YmFjayhsZWZ0KTsKKyAgICB9CisKKyAgICBpZiAocmlnaHQpCisgICAgICAgIGFnZ05vZGUtPmdl
dFNlcXVlbmNlKCkucHVzaF9iYWNrKHJpZ2h0KTsKKworICAgIGFnZ05vZGUtPnNldExpbmUobGlu
ZSk7CisKKyAgICByZXR1cm4gYWdnTm9kZTsKK30KKworLy8KKy8vIFR1cm4gYW4gZXhpc3Rpbmcg
bm9kZSBpbnRvIGFuIGFnZ3JlZ2F0ZS4KKy8vCisvLyBSZXR1cm5zIGFuIGFnZ3JlZ2F0ZSwgdW5s
ZXNzIDAgd2FzIHBhc3NlZCBpbiBmb3IgdGhlIGV4aXN0aW5nIG5vZGUuCisvLworVEludGVybUFn
Z3JlZ2F0ZSogVEludGVybWVkaWF0ZTo6bWFrZUFnZ3JlZ2F0ZShUSW50ZXJtTm9kZSogbm9kZSwg
Y29uc3QgVFNvdXJjZUxvYyYgbGluZSkKK3sKKyAgICBpZiAobm9kZSA9PSAwKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ05vZGUgPSBuZXcgVEludGVybUFn
Z3JlZ2F0ZTsKKyAgICBhZ2dOb2RlLT5nZXRTZXF1ZW5jZSgpLnB1c2hfYmFjayhub2RlKTsKKyAg
ICBhZ2dOb2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAgcmV0dXJuIGFnZ05vZGU7Cit9CisKKy8v
CisvLyBGb3IgImlmIiB0ZXN0IG5vZGVzLiAgVGhlcmUgYXJlIHRocmVlIGNoaWxkcmVuOyBhIGNv
bmRpdGlvbiwKKy8vIGEgdHJ1ZSBwYXRoLCBhbmQgYSBmYWxzZSBwYXRoLiAgVGhlIHR3byBwYXRo
cyBhcmUgaW4gdGhlCisvLyBub2RlUGFpci4KKy8vCisvLyBSZXR1cm5zIHRoZSBzZWxlY3Rpb24g
bm9kZSBjcmVhdGVkLgorLy8KK1RJbnRlcm1Ob2RlKiBUSW50ZXJtZWRpYXRlOjphZGRTZWxlY3Rp
b24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtTm9kZVBhaXIgbm9kZVBhaXIsIGNvbnN0IFRT
b3VyY2VMb2MmIGxpbmUpCit7CisgICAgLy8KKyAgICAvLyBGb3IgY29tcGlsZSB0aW1lIGNvbnN0
YW50IHNlbGVjdGlvbnMsIHBydW5lIHRoZSBjb2RlIGFuZAorICAgIC8vIHRlc3Qgbm93LgorICAg
IC8vCisKKyAgICBpZiAoY29uZC0+Z2V0QXNUeXBlZCgpICYmIGNvbmQtPmdldEFzVHlwZWQoKS0+
Z2V0QXNDb25zdGFudFVuaW9uKCkpIHsKKyAgICAgICAgaWYgKGNvbmQtPmdldEFzQ29uc3RhbnRV
bmlvbigpLT5nZXRCQ29uc3QoMCkgPT0gdHJ1ZSkKKyAgICAgICAgICAgIHJldHVybiBub2RlUGFp
ci5ub2RlMSA/IHNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5vZGVQYWlyLm5vZGUxLCBFT3BTZXF1ZW5j
ZSwgbm9kZVBhaXIubm9kZTEtPmdldExpbmUoKSkgOiBOVUxMOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICByZXR1cm4gbm9kZVBhaXIubm9kZTIgPyBzZXRBZ2dyZWdhdGVPcGVyYXRvcihub2Rl
UGFpci5ub2RlMiwgRU9wU2VxdWVuY2UsIG5vZGVQYWlyLm5vZGUyLT5nZXRMaW5lKCkpIDogTlVM
TDsKKyAgICB9CisKKyAgICBUSW50ZXJtU2VsZWN0aW9uKiBub2RlID0gbmV3IFRJbnRlcm1TZWxl
Y3Rpb24oY29uZCwgbm9kZVBhaXIubm9kZTEsIG5vZGVQYWlyLm5vZGUyKTsKKyAgICBub2RlLT5z
ZXRMaW5lKGxpbmUpOworCisgICAgcmV0dXJuIG5vZGU7Cit9CisKKworVEludGVybVR5cGVkKiBU
SW50ZXJtZWRpYXRlOjphZGRDb21tYShUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCog
cmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCit7CisgICAgaWYgKGxlZnQtPmdldFR5cGUo
KS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCAmJiByaWdodC0+Z2V0VHlwZSgpLmdldFF1YWxp
ZmllcigpID09IEV2cUNvbnN0KSB7CisgICAgICAgIHJldHVybiByaWdodDsKKyAgICB9IGVsc2Ug
eworICAgICAgICBUSW50ZXJtVHlwZWQgKmNvbW1hQWdncmVnYXRlID0gZ3Jvd0FnZ3JlZ2F0ZShs
ZWZ0LCByaWdodCwgbGluZSk7CisgICAgICAgIGNvbW1hQWdncmVnYXRlLT5nZXRBc0FnZ3JlZ2F0
ZSgpLT5zZXRPcChFT3BDb21tYSk7CisgICAgICAgIGNvbW1hQWdncmVnYXRlLT5zZXRUeXBlKHJp
Z2h0LT5nZXRUeXBlKCkpOworICAgICAgICBjb21tYUFnZ3JlZ2F0ZS0+Z2V0VHlwZVBvaW50ZXIo
KS0+c2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CisgICAgICAgIHJldHVybiBjb21tYUFnZ3Jl
Z2F0ZTsKKyAgICB9Cit9CisKKy8vCisvLyBGb3IgIj86IiB0ZXN0IG5vZGVzLiAgVGhlcmUgYXJl
IHRocmVlIGNoaWxkcmVuOyBhIGNvbmRpdGlvbiwKKy8vIGEgdHJ1ZSBwYXRoLCBhbmQgYSBmYWxz
ZSBwYXRoLiAgVGhlIHR3byBwYXRocyBhcmUgc3BlY2lmaWVkCisvLyBhcyBzZXBhcmF0ZSBwYXJh
bWV0ZXJzLgorLy8KKy8vIFJldHVybnMgdGhlIHNlbGVjdGlvbiBub2RlIGNyZWF0ZWQsIG9yIDAg
aWYgb25lIGNvdWxkIG5vdCBiZS4KKy8vCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFk
ZFNlbGVjdGlvbihUSW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1UeXBlZCogdHJ1ZUJsb2NrLCBU
SW50ZXJtVHlwZWQqIGZhbHNlQmxvY2ssIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCit7CisgICAg
Ly8KKyAgICAvLyBHZXQgY29tcGF0aWJsZSB0eXBlcy4KKyAgICAvLworICAgIFRJbnRlcm1UeXBl
ZCogY2hpbGQgPSBhZGRDb252ZXJzaW9uKEVPcFNlcXVlbmNlLCB0cnVlQmxvY2stPmdldFR5cGUo
KSwgZmFsc2VCbG9jayk7CisgICAgaWYgKGNoaWxkKQorICAgICAgICBmYWxzZUJsb2NrID0gY2hp
bGQ7CisgICAgZWxzZSB7CisgICAgICAgIGNoaWxkID0gYWRkQ29udmVyc2lvbihFT3BTZXF1ZW5j
ZSwgZmFsc2VCbG9jay0+Z2V0VHlwZSgpLCB0cnVlQmxvY2spOworICAgICAgICBpZiAoY2hpbGQp
CisgICAgICAgICAgICB0cnVlQmxvY2sgPSBjaGlsZDsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBTZWUgaWYgYWxsIHRoZSBvcGVy
YW5kcyBhcmUgY29uc3RhbnQsIHRoZW4gZm9sZCBpdCBvdGhlcndpc2Ugbm90LgorICAgIC8vCisK
KyAgICBpZiAoY29uZC0+Z2V0QXNDb25zdGFudFVuaW9uKCkgJiYgdHJ1ZUJsb2NrLT5nZXRBc0Nv
bnN0YW50VW5pb24oKSAmJiBmYWxzZUJsb2NrLT5nZXRBc0NvbnN0YW50VW5pb24oKSkgeworICAg
ICAgICBpZiAoY29uZC0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldEJDb25zdCgwKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlQmxvY2s7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZUJsb2NrOworICAgIH0KKworICAgIC8vCisgICAgLy8gTWFrZSBhIHNlbGVjdGlvbiBu
b2RlLgorICAgIC8vCisgICAgVEludGVybVNlbGVjdGlvbiogbm9kZSA9IG5ldyBUSW50ZXJtU2Vs
ZWN0aW9uKGNvbmQsIHRydWVCbG9jaywgZmFsc2VCbG9jaywgdHJ1ZUJsb2NrLT5nZXRUeXBlKCkp
OworICAgIG5vZGUtPmdldFR5cGVQb2ludGVyKCktPnNldFF1YWxpZmllcihFdnFUZW1wb3Jhcnkp
OworICAgIG5vZGUtPnNldExpbmUobGluZSk7CisKKyAgICByZXR1cm4gbm9kZTsKK30KKworLy8K
Ky8vIENvbnN0YW50IHRlcm1pbmFsIG5vZGVzLiAgSGFzIGEgdW5pb24gdGhhdCBjb250YWlucyBi
b29sLCBmbG9hdCBvciBpbnQgY29uc3RhbnRzCisvLworLy8gUmV0dXJucyB0aGUgY29uc3RhbnQg
dW5pb24gbm9kZSBjcmVhdGVkLgorLy8KKworVEludGVybUNvbnN0YW50VW5pb24qIFRJbnRlcm1l
ZGlhdGU6OmFkZENvbnN0YW50VW5pb24oQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheVBvaW50ZXIs
IGNvbnN0IFRUeXBlJiB0LCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQoreworICAgIFRJbnRlcm1D
b25zdGFudFVuaW9uKiBub2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHVuaW9uQXJyYXlQ
b2ludGVyLCB0KTsKKyAgICBub2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAgcmV0dXJuIG5vZGU7
Cit9CisKK1RJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkU3dpenpsZShUVmVjdG9yRmll
bGRzJiBmaWVsZHMsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCit7CisKKyAgICBUSW50ZXJtQWdn
cmVnYXRlKiBub2RlID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGUoRU9wU2VxdWVuY2UpOworCisgICAg
bm9kZS0+c2V0TGluZShsaW5lKTsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogY29uc3RJbnRO
b2RlOworICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2VWZWN0b3IgPSBub2RlLT5nZXRTZXF1
ZW5jZSgpOworICAgIENvbnN0YW50VW5pb24qIHVuaW9uQXJyYXk7CisKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGZpZWxkcy5udW07IGkrKykgeworICAgICAgICB1bmlvbkFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bMV07CisgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChmaWVsZHMub2Zm
c2V0c1tpXSk7CisgICAgICAgIGNvbnN0SW50Tm9kZSA9IGFkZENvbnN0YW50VW5pb24odW5pb25B
cnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgbGluZSk7CisgICAg
ICAgIHNlcXVlbmNlVmVjdG9yLnB1c2hfYmFjayhjb25zdEludE5vZGUpOworICAgIH0KKworICAg
IHJldHVybiBub2RlOworfQorCisvLworLy8gQ3JlYXRlIGxvb3Agbm9kZXMuCisvLworVEludGVy
bU5vZGUqIFRJbnRlcm1lZGlhdGU6OmFkZExvb3AoVExvb3BUeXBlIHR5cGUsIFRJbnRlcm1Ob2Rl
KiBpbml0LCBUSW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1UeXBlZCogZXhwciwgVEludGVybU5v
ZGUqIGJvZHksIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCit7CisgICAgVEludGVybU5vZGUqIG5v
ZGUgPSBuZXcgVEludGVybUxvb3AodHlwZSwgaW5pdCwgY29uZCwgZXhwciwgYm9keSk7CisgICAg
bm9kZS0+c2V0TGluZShsaW5lKTsKKworICAgIHJldHVybiBub2RlOworfQorCisvLworLy8gQWRk
IGJyYW5jaGVzLgorLy8KK1RJbnRlcm1CcmFuY2gqIFRJbnRlcm1lZGlhdGU6OmFkZEJyYW5jaChU
T3BlcmF0b3IgYnJhbmNoT3AsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCit7CisgICAgcmV0dXJu
IGFkZEJyYW5jaChicmFuY2hPcCwgMCwgbGluZSk7Cit9CisKK1RJbnRlcm1CcmFuY2gqIFRJbnRl
cm1lZGlhdGU6OmFkZEJyYW5jaChUT3BlcmF0b3IgYnJhbmNoT3AsIFRJbnRlcm1UeXBlZCogZXhw
cmVzc2lvbiwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKK3sKKyAgICBUSW50ZXJtQnJhbmNoKiBu
b2RlID0gbmV3IFRJbnRlcm1CcmFuY2goYnJhbmNoT3AsIGV4cHJlc3Npb24pOworICAgIG5vZGUt
PnNldExpbmUobGluZSk7CisKKyAgICByZXR1cm4gbm9kZTsKK30KKworLy8KKy8vIFRoaXMgaXMg
dG8gYmUgZXhlY3V0ZWQgb25jZSB0aGUgZmluYWwgcm9vdCBpcyBwdXQgb24gdG9wIGJ5IHRoZSBw
YXJzaW5nCisvLyBwcm9jZXNzLgorLy8KK2Jvb2wgVEludGVybWVkaWF0ZTo6cG9zdFByb2Nlc3Mo
VEludGVybU5vZGUqIHJvb3QpCit7CisgICAgaWYgKHJvb3QgPT0gMCkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICAvLworICAgIC8vIEZpcnN0LCBmaW5pc2ggb2ZmIHRoZSB0b3AgbGV2ZWwg
c2VxdWVuY2UsIGlmIGFueQorICAgIC8vCisgICAgVEludGVybUFnZ3JlZ2F0ZSogYWdnUm9vdCA9
IHJvb3QtPmdldEFzQWdncmVnYXRlKCk7CisgICAgaWYgKGFnZ1Jvb3QgJiYgYWdnUm9vdC0+Z2V0
T3AoKSA9PSBFT3BOdWxsKQorICAgICAgICBhZ2dSb290LT5zZXRPcChFT3BTZXF1ZW5jZSk7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8KKy8vIFRoaXMgZGVsZXRlcyB0aGUgdHJlZS4KKy8v
Cit2b2lkIFRJbnRlcm1lZGlhdGU6OnJlbW92ZShUSW50ZXJtTm9kZSogcm9vdCkKK3sKKyAgICBp
ZiAocm9vdCkKKyAgICAgICAgUmVtb3ZlQWxsVHJlZU5vZGVzKHJvb3QpOworfQorCisvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisvLworLy8gTWVtYmVyIGZ1bmN0aW9ucyBvZiB0aGUgbm9kZXMgdXNlZCBmb3IgYnVpbGRpbmcg
dGhlIHRyZWUuCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjZGVmaW5lIFJFUExBQ0VfSUZfSVMobm9kZSwgdHlw
ZSwgb3JpZ2luYWwsIHJlcGxhY2VtZW50KSBcCisgICAgaWYgKG5vZGUgPT0gb3JpZ2luYWwpIHsg
XAorICAgICAgICBub2RlID0gc3RhdGljX2Nhc3Q8dHlwZSAqPihyZXBsYWNlbWVudCk7IFwKKyAg
ICAgICAgcmV0dXJuIHRydWU7IFwKKyAgICB9CisKK2Jvb2wgVEludGVybUxvb3A6OnJlcGxhY2VD
aGlsZE5vZGUoCisgICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFj
ZW1lbnQpCit7CisgICAgUkVQTEFDRV9JRl9JUyhpbml0LCBUSW50ZXJtTm9kZSwgb3JpZ2luYWws
IHJlcGxhY2VtZW50KTsKKyAgICBSRVBMQUNFX0lGX0lTKGNvbmQsIFRJbnRlcm1UeXBlZCwgb3Jp
Z2luYWwsIHJlcGxhY2VtZW50KTsKKyAgICBSRVBMQUNFX0lGX0lTKGV4cHIsIFRJbnRlcm1UeXBl
ZCwgb3JpZ2luYWwsIHJlcGxhY2VtZW50KTsKKyAgICBSRVBMQUNFX0lGX0lTKGJvZHksIFRJbnRl
cm1Ob2RlLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBUSW50ZXJtQnJhbmNoOjpyZXBsYWNlQ2hpbGROb2RlKAorICAgIFRJbnRlcm1Ob2RlICpv
cmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KQoreworICAgIFJFUExBQ0VfSUZfSVMo
ZXhwcmVzc2lvbiwgVEludGVybVR5cGVkLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBUSW50ZXJtQmluYXJ5OjpyZXBsYWNlQ2hpbGROb2RlKAor
ICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KQorewor
ICAgIFJFUExBQ0VfSUZfSVMobGVmdCwgVEludGVybVR5cGVkLCBvcmlnaW5hbCwgcmVwbGFjZW1l
bnQpOworICAgIFJFUExBQ0VfSUZfSVMocmlnaHQsIFRJbnRlcm1UeXBlZCwgb3JpZ2luYWwsIHJl
cGxhY2VtZW50KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVEludGVybVVuYXJ5Ojpy
ZXBsYWNlQ2hpbGROb2RlKAorICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUg
KnJlcGxhY2VtZW50KQoreworICAgIFJFUExBQ0VfSUZfSVMob3BlcmFuZCwgVEludGVybVR5cGVk
LCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBU
SW50ZXJtQWdncmVnYXRlOjpyZXBsYWNlQ2hpbGROb2RlKAorICAgIFRJbnRlcm1Ob2RlICpvcmln
aW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KQoreworICAgIGZvciAoc2l6ZV90IGlpID0g
MDsgaWkgPCBzZXF1ZW5jZS5zaXplKCk7ICsraWkpCisgICAgeworICAgICAgICBSRVBMQUNFX0lG
X0lTKHNlcXVlbmNlW2lpXSwgVEludGVybU5vZGUsIG9yaWdpbmFsLCByZXBsYWNlbWVudCk7Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUSW50ZXJtU2VsZWN0aW9uOjpyZXBs
YWNlQ2hpbGROb2RlKAorICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJl
cGxhY2VtZW50KQoreworICAgIFJFUExBQ0VfSUZfSVMoY29uZGl0aW9uLCBUSW50ZXJtVHlwZWQs
IG9yaWdpbmFsLCByZXBsYWNlbWVudCk7CisgICAgUkVQTEFDRV9JRl9JUyh0cnVlQmxvY2ssIFRJ
bnRlcm1Ob2RlLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpOworICAgIFJFUExBQ0VfSUZfSVMoZmFs
c2VCbG9jaywgVEludGVybU5vZGUsIG9yaWdpbmFsLCByZXBsYWNlbWVudCk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCisvLworLy8gU2F5IHdoZXRoZXIgb3Igbm90IGFuIG9wZXJhdGlvbiBub2Rl
IGNoYW5nZXMgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuCisvLworYm9vbCBUSW50ZXJtT3BlcmF0
b3I6OmlzQXNzaWdubWVudCgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChvcCkgeworICAgICAgICBj
YXNlIEVPcFBvc3RJbmNyZW1lbnQ6CisgICAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDoKKyAg
ICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6CisgICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50
OgorICAgICAgICBjYXNlIEVPcEFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BBZGRBc3NpZ246Cisg
ICAgICAgIGNhc2UgRU9wU3ViQXNzaWduOgorICAgICAgICBjYXNlIEVPcE11bEFzc2lnbjoKKyAg
ICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BW
ZWN0b3JUaW1lc1NjYWxhckFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxh
ckFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjoKKyAgICAg
ICAgY2FzZSBFT3BEaXZBc3NpZ246CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKKy8vCisvLyBy
ZXR1cm5zIHRydWUgaWYgdGhlIG9wZXJhdG9yIGlzIGZvciBvbmUgb2YgdGhlIGNvbnN0cnVjdG9y
cworLy8KK2Jvb2wgVEludGVybU9wZXJhdG9yOjppc0NvbnN0cnVjdG9yKCkgY29uc3QKK3sKKyAg
ICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMjoKKyAgICAgICAg
Y2FzZSBFT3BDb25zdHJ1Y3RWZWMzOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzQ6Cisg
ICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MjoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RN
YXQzOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6CisgICAgICAgIGNhc2UgRU9wQ29u
c3RydWN0RmxvYXQ6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6CisgICAgICAgIGNh
c2UgRU9wQ29uc3RydWN0SVZlYzM6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzQ6Cisg
ICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJW
ZWMyOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMzOgorICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdEJWZWM0OgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6CisgICAgICAgIGNh
c2UgRU9wQ29uc3RydWN0U3RydWN0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCisvLworLy8g
TWFrZSBzdXJlIHRoZSB0eXBlIG9mIGEgdW5hcnkgb3BlcmF0b3IgaXMgYXBwcm9wcmlhdGUgZm9y
IGl0cworLy8gY29tYmluYXRpb24gb2Ygb3BlcmF0aW9uIGFuZCBvcGVyYW5kIHR5cGUuCisvLwor
Ly8gUmV0dXJucyBmYWxzZSBpbiBub3RoaW5nIG1ha2VzIHNlbnNlLgorLy8KK2Jvb2wgVEludGVy
bVVuYXJ5Ojpwcm9tb3RlKFRJbmZvU2luayYpCit7CisgICAgc3dpdGNoIChvcCkgeworICAgICAg
ICBjYXNlIEVPcExvZ2ljYWxOb3Q6CisgICAgICAgICAgICBpZiAob3BlcmFuZC0+Z2V0QmFzaWNU
eXBlKCkgIT0gRWJ0Qm9vbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZToKKyAgICAgICAgY2FzZSBFT3BQ
b3N0SW5jcmVtZW50OgorICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6CisgICAgICAgIGNh
c2UgRU9wUHJlSW5jcmVtZW50OgorICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDoKKyAgICAg
ICAgICAgIGlmIChvcGVyYW5kLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRCb29sKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAv
LyBvcGVyYXRvcnMgZm9yIGJ1aWx0LWlucyBhcmUgYWxyZWFkeSB0eXBlIGNoZWNrZWQgYWdhaW5z
dCB0aGVpciBwcm90b3R5cGUKKyAgICAgICAgY2FzZSBFT3BBbnk6CisgICAgICAgIGNhc2UgRU9w
QWxsOgorICAgICAgICBjYXNlIEVPcFZlY3RvckxvZ2ljYWxOb3Q6CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKG9wZXJhbmQtPmdl
dEJhc2ljVHlwZSgpICE9IEVidEZsb2F0KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBzZXRUeXBlKG9wZXJhbmQtPmdldFR5cGUoKSk7CisgICAgdHlwZS5zZXRR
dWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKKworICAgIHJldHVybiB0cnVlOworfQorCisvLworLy8g
RXN0YWJsaXNoZXMgdGhlIHR5cGUgb2YgdGhlIHJlc3VsdGFudCBvcGVyYXRpb24sIGFzIHdlbGwg
YXMKKy8vIG1ha2VzIHRoZSBvcGVyYXRvciB0aGUgY29ycmVjdCBvbmUgZm9yIHRoZSBvcGVyYW5k
cy4KKy8vCisvLyBSZXR1cm5zIGZhbHNlIGlmIG9wZXJhdG9yIGNhbid0IHdvcmsgb24gb3BlcmFu
ZHMuCisvLworYm9vbCBUSW50ZXJtQmluYXJ5Ojpwcm9tb3RlKFRJbmZvU2luayYgaW5mb1Npbmsp
Cit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBvbmx5IGhhbmRsZXMgc2NhbGFycywgdmVjdG9ycywg
YW5kIG1hdHJpY2VzLgorICAgIGlmIChsZWZ0LT5pc0FycmF5KCkgfHwgcmlnaHQtPmlzQXJyYXko
KSkgeworICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3Is
IGdldExpbmUoKSwgIkludmFsaWQgb3BlcmF0aW9uIGZvciBhcnJheXMiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIEdMU0wgRVMgMi4wIGRvZXMgbm90IHN1cHBvcnQg
aW1wbGljaXQgdHlwZSBjYXN0aW5nLgorICAgIC8vIFNvIHRoZSBiYXNpYyB0eXBlIHNob3VsZCBh
bHdheXMgbWF0Y2guCisgICAgaWYgKGxlZnQtPmdldEJhc2ljVHlwZSgpICE9IHJpZ2h0LT5nZXRC
YXNpY1R5cGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8KKyAgICAvLyBCYXNl
IGFzc3VtcHRpb246ICBqdXN0IG1ha2UgdGhlIHR5cGUgdGhlIHNhbWUgYXMgdGhlIGxlZnQKKyAg
ICAvLyBvcGVyYW5kLiAgVGhlbiBvbmx5IGRldmlhdGlvbnMgZnJvbSB0aGlzIG5lZWQgYmUgY29k
ZWQuCisgICAgLy8KKyAgICBzZXRUeXBlKGxlZnQtPmdldFR5cGUoKSk7CisKKyAgICAvLyBUaGUg
cmVzdWx0IGdldHMgcHJvbW90ZWQgdG8gdGhlIGhpZ2hlc3QgcHJlY2lzaW9uLgorICAgIFRQcmVj
aXNpb24gaGlnaGVyUHJlY2lzaW9uID0gR2V0SGlnaGVyUHJlY2lzaW9uKGxlZnQtPmdldFByZWNp
c2lvbigpLCByaWdodC0+Z2V0UHJlY2lzaW9uKCkpOworICAgIGdldFR5cGVQb2ludGVyKCktPnNl
dFByZWNpc2lvbihoaWdoZXJQcmVjaXNpb24pOworCisgICAgLy8gQmluYXJ5IG9wZXJhdGlvbnMg
cmVzdWx0cyBpbiB0ZW1wb3JhcnkgdmFyaWFibGVzIHVubGVzcyBib3RoCisgICAgLy8gb3BlcmFu
ZHMgYXJlIGNvbnN0LgorICAgIGlmIChsZWZ0LT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFDb25zdCB8
fCByaWdodC0+Z2V0UXVhbGlmaWVyKCkgIT0gRXZxQ29uc3QpIHsKKyAgICAgICAgZ2V0VHlwZVBv
aW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CisgICAgfQorCisgICAgaW50IHNp
emUgPSBzdGQ6Om1heChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpLCByaWdodC0+Z2V0Tm9taW5hbFNp
emUoKSk7CisKKyAgICAvLworICAgIC8vIEFsbCBzY2FsYXJzLiBDb2RlIGFmdGVyIHRoaXMgdGVz
dCBhc3N1bWVzIHRoaXMgY2FzZSBpcyByZW1vdmVkIQorICAgIC8vCisgICAgaWYgKHNpemUgPT0g
MSkgeworICAgICAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAg
Ly8gUHJvbW90ZSB0byBjb25kaXRpb25hbAorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIGNh
c2UgRU9wRXF1YWw6CisgICAgICAgICAgICBjYXNlIEVPcE5vdEVxdWFsOgorICAgICAgICAgICAg
Y2FzZSBFT3BMZXNzVGhhbjoKKyAgICAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46CisgICAg
ICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6CisgICAgICAgICAgICBjYXNlIEVPcEdyZWF0
ZXJUaGFuRXF1YWw6CisgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShFYnRCb29sLCBFYnBV
bmRlZmluZWQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgIC8vIEFuZCBhbmQgT3Igb3BlcmF0ZSBvbiBjb25kaXRpb25hbHMKKyAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6CisgICAgICAgICAgICBjYXNl
IEVPcExvZ2ljYWxPcjoKKyAgICAgICAgICAgICAgICAvLyBCb3RoIG9wZXJhbmRzIG11c3QgYmUg
b2YgdHlwZSBib29sLgorICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5nZXRCYXNpY1R5cGUoKSAh
PSBFYnRCb29sIHx8IHJpZ2h0LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShF
YnRCb29sLCBFYnBVbmRlZmluZWQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSByZWFjaCBoZXJlLCBhdCBsZWFz
dCBvbmUgb2YgdGhlIG9wZXJhbmRzIGlzIHZlY3RvciBvciBtYXRyaXguCisgICAgLy8gVGhlIG90
aGVyIG9wZXJhbmQgY291bGQgYmUgYSBzY2FsYXIsIHZlY3Rvciwgb3IgbWF0cml4LgorICAgIC8v
IEFyZSB0aGUgc2l6ZXMgY29tcGF0aWJsZT8KKyAgICAvLworICAgIGlmIChsZWZ0LT5nZXROb21p
bmFsU2l6ZSgpICE9IHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpKSB7CisgICAgICAgIC8vIElmIHRo
ZSBub21pbmFsIHNpemUgb2Ygb3BlcmFuZHMgZG8gbm90IG1hdGNoOgorICAgICAgICAvLyBPbmUg
b2YgdGhlbSBtdXN0IGJlIHNjYWxhci4KKyAgICAgICAgaWYgKGxlZnQtPmdldE5vbWluYWxTaXpl
KCkgIT0gMSAmJiByaWdodC0+Z2V0Tm9taW5hbFNpemUoKSAhPSAxKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAvLyBPcGVyYXRvciBjYW5ub3QgYmUgb2YgdHlwZSBwdXJlIGFz
c2lnbm1lbnQuCisgICAgICAgIGlmIChvcCA9PSBFT3BBc3NpZ24gfHwgb3AgPT0gRU9wSW5pdGlh
bGl6ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLworICAgIC8v
IENhbiB0aGVzZSB0d28gb3BlcmFuZHMgYmUgY29tYmluZWQ/CisgICAgLy8KKyAgICBUQmFzaWNU
eXBlIGJhc2ljVHlwZSA9IGxlZnQtPmdldEJhc2ljVHlwZSgpOworICAgIHN3aXRjaCAob3ApIHsK
KyAgICAgICAgY2FzZSBFT3BNdWw6CisgICAgICAgICAgICBpZiAoIWxlZnQtPmlzTWF0cml4KCkg
JiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobGVmdC0+aXNWZWN0
b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc01hdHJpeDsKKyAg
ICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhU
aW1lc1NjYWxhcjsKKyAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUs
IGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCB0cnVlKSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5pc01hdHJpeCgpICYmICFyaWdo
dC0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgICAgIGlmIChyaWdodC0+aXNWZWN0b3IoKSkg
eworICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzVmVjdG9yOworICAgICAg
ICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBF
dnFUZW1wb3JhcnksIHNpemUsIGZhbHNlKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc1NjYWxhcjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQt
PmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzTWF0cml4
OworICAgICAgICAgICAgfSBlbHNlIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlz
TWF0cml4KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobGVmdC0+aXNWZWN0b3IoKSAmJiByaWdo
dC0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBsZWF2ZSBhcyBjb21wb25l
bnQgcHJvZHVjdAorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNWZWN0b3IoKSB8
fCByaWdodC0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcFZlY3Rv
clRpbWVzU2NhbGFyOworICAgICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlw
ZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUsIGZhbHNlKSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbmZvU2lu
ay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIk1pc3Npbmcg
ZWxzZXMiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNdWxBc3NpZ246CisgICAgICAgICAg
ICBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAobGVmdC0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgb3AgPSBF
T3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAocmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIG9wID0gRU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ247CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5p
c01hdHJpeCgpKSB7CisgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc01hdHJpeEFz
c2lnbjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0
LT5pc01hdHJpeCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkgJiYg
cmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gbGVhdmUgYXMgY29t
cG9uZW50IHByb2R1Y3QKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzVmVjdG9y
KCkgfHwgcmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCEgbGVm
dC0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjsKKyAgICAg
ICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwg
RXZxVGVtcG9yYXJ5LCBzaXplLCBmYWxzZSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVm
aXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJNaXNzaW5nIGVsc2VzIik7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSBFT3BBc3NpZ246CisgICAgICAgIGNhc2UgRU9wSW5pdGlhbGl6ZToKKyAg
ICAgICAgY2FzZSBFT3BBZGQ6CisgICAgICAgIGNhc2UgRU9wU3ViOgorICAgICAgICBjYXNlIEVP
cERpdjoKKyAgICAgICAgY2FzZSBFT3BBZGRBc3NpZ246CisgICAgICAgIGNhc2UgRU9wU3ViQXNz
aWduOgorICAgICAgICBjYXNlIEVPcERpdkFzc2lnbjoKKyAgICAgICAgICAgIGlmICgobGVmdC0+
aXNNYXRyaXgoKSAmJiByaWdodC0+aXNWZWN0b3IoKSkgfHwKKyAgICAgICAgICAgICAgICAobGVm
dC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclBy
ZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCBsZWZ0LT5pc01hdHJpeCgpIHx8IHJpZ2h0LT5p
c01hdHJpeCgpKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcEVxdWFs
OgorICAgICAgICBjYXNlIEVPcE5vdEVxdWFsOgorICAgICAgICBjYXNlIEVPcExlc3NUaGFuOgor
ICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgorICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1
YWw6CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKKyAgICAgICAgICAgIGlmICgo
bGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNWZWN0b3IoKSkgfHwKKyAgICAgICAgICAgICAg
ICAobGVmdC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgc2V0VHlwZShUVHlwZShFYnRCb29sLCBFYnBV
bmRlZmluZWQpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQor
Citib29sIENvbXBhcmVTdHJ1Y3QoY29uc3QgVFR5cGUmIGxlZnROb2RlVHlwZSwgQ29uc3RhbnRV
bmlvbiogcmlnaHRVbmlvbkFycmF5LCBDb25zdGFudFVuaW9uKiBsZWZ0VW5pb25BcnJheSkKK3sK
KyAgICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSBsZWZ0Tm9kZVR5cGUuZ2V0U3RydWN0KCkt
PmZpZWxkcygpOworCisgICAgc2l6ZV90IHN0cnVjdFNpemUgPSBmaWVsZHMuc2l6ZSgpOworICAg
IHNpemVfdCBpbmRleCA9IDA7CisKKyAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHN0cnVjdFNp
emU7IGorKykgeworICAgICAgICBzaXplX3Qgc2l6ZSA9IGZpZWxkc1tqXS0+dHlwZSgpLT5nZXRP
YmplY3RTaXplKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7
CisgICAgICAgICAgICBpZiAoZmllbGRzW2pdLT50eXBlKCktPmdldEJhc2ljVHlwZSgpID09IEVi
dFN0cnVjdCkgeworICAgICAgICAgICAgICAgIGlmICghQ29tcGFyZVN0cnVjdHVyZSgqKGZpZWxk
c1tqXS0+dHlwZSgpKSwgJnJpZ2h0VW5pb25BcnJheVtpbmRleF0sICZsZWZ0VW5pb25BcnJheVtp
bmRleF0pKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChsZWZ0VW5pb25BcnJheVtpbmRleF0gIT0gcmln
aHRVbmlvbkFycmF5W2luZGV4XSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ29tcGFyZVN0cnVjdHVyZShjb25zdCBUVHlw
ZSYgbGVmdE5vZGVUeXBlLCBDb25zdGFudFVuaW9uKiByaWdodFVuaW9uQXJyYXksIENvbnN0YW50
VW5pb24qIGxlZnRVbmlvbkFycmF5KQoreworICAgIGlmIChsZWZ0Tm9kZVR5cGUuaXNBcnJheSgp
KSB7CisgICAgICAgIFRUeXBlIHR5cGVXaXRob3V0QXJyYXluZXNzID0gbGVmdE5vZGVUeXBlOwor
ICAgICAgICB0eXBlV2l0aG91dEFycmF5bmVzcy5jbGVhckFycmF5bmVzcygpOworCisgICAgICAg
IHNpemVfdCBhcnJheVNpemUgPSBsZWZ0Tm9kZVR5cGUuZ2V0QXJyYXlTaXplKCk7CisKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheVNpemU7ICsraSkgeworICAgICAgICAgICAg
c2l6ZV90IG9mZnNldCA9IHR5cGVXaXRob3V0QXJyYXluZXNzLmdldE9iamVjdFNpemUoKSAqIGk7
CisgICAgICAgICAgICBpZiAoIUNvbXBhcmVTdHJ1Y3QodHlwZVdpdGhvdXRBcnJheW5lc3MsICZy
aWdodFVuaW9uQXJyYXlbb2Zmc2V0XSwgJmxlZnRVbmlvbkFycmF5W29mZnNldF0pKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBy
ZXR1cm4gQ29tcGFyZVN0cnVjdChsZWZ0Tm9kZVR5cGUsIHJpZ2h0VW5pb25BcnJheSwgbGVmdFVu
aW9uQXJyYXkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vCisvLyBUaGUgZm9sZCBmdW5j
dGlvbnMgc2VlIGlmIGFuIG9wZXJhdGlvbiBvbiBhIGNvbnN0YW50IGNhbiBiZSBkb25lIGluIHBs
YWNlLAorLy8gd2l0aG91dCBnZW5lcmF0aW5nIHJ1bi10aW1lIGNvZGUuCisvLworLy8gUmV0dXJu
cyB0aGUgbm9kZSB0byBrZWVwIHVzaW5nLCB3aGljaCBtYXkgb3IgbWF5IG5vdCBiZSB0aGUgbm9k
ZSBwYXNzZWQgaW4uCisvLworCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1Db25zdGFudFVuaW9uOjpm
b2xkKFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBjb25zdGFudE5vZGUsIFRJbmZvU2luayYg
aW5mb1NpbmspCit7CisgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IGdldFVuaW9uQXJy
YXlQb2ludGVyKCk7CisgICAgc2l6ZV90IG9iamVjdFNpemUgPSBnZXRUeXBlKCkuZ2V0T2JqZWN0
U2l6ZSgpOworCisgICAgaWYgKGNvbnN0YW50Tm9kZSkgeyAgLy8gYmluYXJ5IG9wZXJhdGlvbnMK
KyAgICAgICAgVEludGVybUNvbnN0YW50VW5pb24gKm5vZGUgPSBjb25zdGFudE5vZGUtPmdldEFz
Q29uc3RhbnRVbmlvbigpOworICAgICAgICBDb25zdGFudFVuaW9uICpyaWdodFVuaW9uQXJyYXkg
PSBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOworICAgICAgICBUVHlwZSByZXR1cm5UeXBl
ID0gZ2V0VHlwZSgpOworCisgICAgICAgIC8vIGZvciBhIGNhc2UgbGlrZSBmbG9hdCBmID0gMS4y
ICsgdmVjNCgyLDMsNCw1KTsKKyAgICAgICAgaWYgKGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdl
dE9iamVjdFNpemUoKSA9PSAxICYmIG9iamVjdFNpemUgPiAxKSB7CisgICAgICAgICAgICByaWdo
dFVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKKyAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgKytpKQorICAgICAgICAgICAgICAg
IHJpZ2h0VW5pb25BcnJheVtpXSA9ICpub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOworICAg
ICAgICAgICAgcmV0dXJuVHlwZSA9IGdldFR5cGUoKTsKKyAgICAgICAgfSBlbHNlIGlmIChjb25z
dGFudE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCkgPiAxICYmIG9iamVjdFNpemUgPT0g
MSkgeworICAgICAgICAgICAgLy8gZm9yIGEgY2FzZSBsaWtlIGZsb2F0IGYgPSB2ZWM0KDIsMyw0
LDUpICsgMS4yOworICAgICAgICAgICAgdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW2Nv
bnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKV07CisgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUo
KTsgKytpKQorICAgICAgICAgICAgICAgIHVuaW9uQXJyYXlbaV0gPSAqZ2V0VW5pb25BcnJheVBv
aW50ZXIoKTsKKyAgICAgICAgICAgIHJldHVyblR5cGUgPSBub2RlLT5nZXRUeXBlKCk7CisgICAg
ICAgICAgICBvYmplY3RTaXplID0gY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6
ZSgpOworICAgICAgICB9CisKKyAgICAgICAgQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0QXJyYXkg
PSAwOworICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqdGVtcE5vZGU7CisKKyAgICAgICAg
Ym9vbCBib29sTm9kZUZsYWcgPSBmYWxzZTsKKyAgICAgICAgc3dpdGNoKG9wKSB7CisgICAgICAg
ICAgICBjYXNlIEVPcEFkZDoKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBD
b25zdGFudFVuaW9uW29iamVjdFNpemVdOworICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1T
VkMrKzYuMAorICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVj
dFNpemU7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0g
dW5pb25BcnJheVtpXSArIHJpZ2h0VW5pb25BcnJheVtpXTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVPcFN1YjoKKyAgICAgICAg
ICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwor
ICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAorICAgICAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSAtIHJpZ2h0VW5pb25B
cnJheVtpXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgIGNhc2UgRU9wTXVsOgorICAgICAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1Nj
YWxhcjoKKyAgICAgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXI6CisgICAgICAgICAg
ICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKKyAg
ICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKKyAgICAgICAgICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAg
ICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gKiByaWdodFVuaW9uQXJy
YXlbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeDoKKyAgICAgICAgICAgICAgICBpZiAoZ2V0
VHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidEZsb2F0IHx8IG5vZGUtPmdldEJhc2ljVHlwZSgp
ICE9IEVidEZsb2F0KSB7CisgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2Fn
ZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiQ29uc3RhbnQgRm9sZGluZyBjYW5u
b3QgYmUgZG9uZSBmb3IgbWF0cml4IG11bHRpcGx5Iik7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBN
U1ZDKys2LjAKKyAgICAgICAgICAgICAgICAgICAgaW50IHNpemUgPSBnZXROb21pbmFsU2l6ZSgp
OworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
W3NpemUqc2l6ZV07CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8
IHNpemU7IHJvdysrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2x1bW4g
PSAwOyBjb2x1bW4gPCBzaXplOyBjb2x1bW4rKykgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRlbXBDb25zdEFycmF5W3NpemUgKiBjb2x1bW4gKyByb3ddLnNldEZDb25zdCgwLjBmKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkr
KykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtzaXpl
ICogY29sdW1uICsgcm93XS5zZXRGQ29uc3QodGVtcENvbnN0QXJyYXlbc2l6ZSAqIGNvbHVtbiAr
IHJvd10uZ2V0RkNvbnN0KCkgKyB1bmlvbkFycmF5W2kgKiBzaXplICsgcm93XS5nZXRGQ29uc3Qo
KSAqIChyaWdodFVuaW9uQXJyYXlbY29sdW1uICogc2l6ZSArIGldLmdldEZDb25zdCgpKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBFT3BEaXY6CisgICAgICAgICAgICAgICAgdGVtcENv
bnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKKyAgICAgICAgICAgICAg
ICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3
aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEVidEZs
b2F0OgorICAgICAgICAgICAgICAgIGlmIChyaWdodFVuaW9uQXJyYXlbaV0gPT0gMC4wZikgewor
ICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeFdhcm5pbmcs
IGdldExpbmUoKSwgIkRpdmlkZSBieSB6ZXJvIGVycm9yIGR1cmluZyBjb25zdGFudCBmb2xkaW5n
Iik7CisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCh1bmlv
bkFycmF5W2ldLmdldEZDb25zdCgpIDwgMCA/IC1GTFRfTUFYIDogRkxUX01BWCk7CisgICAgICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNl
dEZDb25zdCh1bmlvbkFycmF5W2ldLmdldEZDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdl
dEZDb25zdCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBF
YnRJbnQ6CisgICAgICAgICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtpXSA9PSAwKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywg
Z2V0TGluZSgpLCAiRGl2aWRlIGJ5IHplcm8gZXJyb3IgZHVyaW5nIGNvbnN0YW50IGZvbGRpbmci
KTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0SUNvbnN0KElOVF9N
QVgpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheVtpXS5zZXRJQ29uc3QodW5pb25BcnJheVtpXS5nZXRJQ29uc3QoKSAvIHJpZ2h0VW5p
b25BcnJheVtpXS5nZXRJQ29uc3QoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiQ29uc3RhbnQgZm9sZGluZyBjYW5ub3QgYmUg
ZG9uZSBmb3IgXCIvXCIiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1l
c1ZlY3RvcjoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0
RmxvYXQpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVm
aXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJDb25zdGFudCBGb2xkaW5nIGNhbm5vdCBiZSBk
b25lIGZvciBtYXRyaXggdGltZXMgdmVjdG9yIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9
IG5ldyBDb25zdGFudFVuaW9uW2dldE5vbWluYWxTaXplKCldOworCisgICAgICAgICAgICAgICAg
ey8vIHN1cHBvcnQgTVNWQysrNi4wCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHNpemUg
PSBnZXROb21pbmFsU2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KDAuMGYpOworICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzaXplOyBqKyspIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QodGVtcENvbnN0
QXJyYXlbaV0uZ2V0RkNvbnN0KCkgKyAoKHVuaW9uQXJyYXlbaipzaXplICsgaV0uZ2V0RkNvbnN0
KCkpICogcmlnaHRVbmlvbkFycmF5W2pdLmdldEZDb25zdCgpKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29u
c3RBcnJheSwgbm9kZS0+Z2V0VHlwZSgpKTsKKyAgICAgICAgICAgICAgICB0ZW1wTm9kZS0+c2V0
TGluZShnZXRMaW5lKCkpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOworCisg
ICAgICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4OgorICAgICAgICAgICAgICAgIGlm
IChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5l
KCksICJDb25zdGFudCBGb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciB2ZWN0b3IgdGltZXMgbWF0
cml4Iik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bZ2V0
Tm9taW5hbFNpemUoKV07CisgICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCisg
ICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHNpemUgPSBnZXROb21pbmFsU2l6ZSgpLCBpID0g
MDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXlbaV0uc2V0RkNvbnN0KDAuMGYpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQg
aiA9IDA7IGogPCBzaXplOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1w
Q29uc3RBcnJheVtpXS5zZXRGQ29uc3QodGVtcENvbnN0QXJyYXlbaV0uZ2V0RkNvbnN0KCkgKyAo
KHVuaW9uQXJyYXlbal0uZ2V0RkNvbnN0KCkpICogcmlnaHRVbmlvbkFycmF5W2kqc2l6ZSArIGpd
LmdldEZDb25zdCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9y
IHBvc3NpYmxlIGZ1dHVyZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkKKyAg
ICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNp
emVdOworICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAorICAgICAgICAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSAmJiByaWdo
dFVuaW9uQXJyYXlbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjogLy8gdGhpcyBjb2RlIGlzIHdyaXR0
ZW4gZm9yIHBvc3NpYmxlIGZ1dHVyZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50
bHkKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29i
amVjdFNpemVdOworICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAorICAgICAg
ICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSB8
fCByaWdodFVuaW9uQXJyYXlbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6CisgICAgICAgICAgICAg
ICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKKyAgICAg
ICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKKyAgICAgICAgICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgY2Fz
ZSBFYnRCb29sOiB0ZW1wQ29uc3RBcnJheVtpXS5zZXRCQ29uc3QoKHVuaW9uQXJyYXlbaV0gPT0g
cmlnaHRVbmlvbkFycmF5W2ldKSA/IGZhbHNlIDogdHJ1ZSk7IGJyZWFrOworICAgICAgICAgICAg
ZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjoKKyAgICAgICAgICAgICAgICBhc3NlcnQob2Jq
ZWN0U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3Qo
KnVuaW9uQXJyYXkgPCAqcmlnaHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAgICAgICByZXR1cm5U
eXBlID0gVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgorICAgICAgICAg
ICAgICAgIGFzc2VydChvYmplY3RTaXplID09IDEpOworICAgICAgICAgICAgICAgIHRlbXBDb25z
dEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXktPnNldEJDb25zdCgqdW5pb25BcnJheSA+ICpyaWdodFVuaW9uQXJyYXkpOworICAgICAg
ICAgICAgICAgIHJldHVyblR5cGUgPSBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNv
bnN0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRU9wTGVzc1Ro
YW5FcXVhbDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChv
YmplY3RTaXplID09IDEpOworICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uIGNvbnN0
YW50OworICAgICAgICAgICAgICAgICAgICBjb25zdGFudC5zZXRCQ29uc3QoKnVuaW9uQXJyYXkg
PiAqcmlnaHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkg
PSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXktPnNldEJDb25zdCghY29uc3RhbnQuZ2V0QkNvbnN0KCkpOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm5UeXBlID0gVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGFzc2VydChvYmplY3RTaXplID09IDEpOworICAgICAgICAgICAgICAgICAgICBD
b25zdGFudFVuaW9uIGNvbnN0YW50OworICAgICAgICAgICAgICAgICAgICBjb25zdGFudC5zZXRC
Q29uc3QoKnVuaW9uQXJyYXkgPCAqcmlnaHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAgICAgICAg
ICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAg
ICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCghY29uc3RhbnQuZ2V0QkNvbnN0KCkpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZp
bmVkLCBFdnFDb25zdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgY2FzZSBFT3BFcXVhbDoKKyAgICAgICAgICAgICAgICBpZiAo
Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoIUNvbXBhcmVTdHJ1Y3R1cmUobm9kZS0+Z2V0VHlwZSgpLCBub2RlLT5nZXRVbmlv
bkFycmF5UG9pbnRlcigpLCB1bmlvbkFycmF5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2xOb2RlRmxhZyA9IHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh1bmlvbkFycmF5W2ldICE9IHJpZ2h0VW5pb25BcnJheVtp
XSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAvLyBicmVhayBvdXQgb2YgZm9yIGxv
b3AKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgaWYgKCFib29sTm9kZUZsYWcpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCh0cnVlKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBD
b25zdEFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSk7CisgICAg
ICAgICAgICAgICAgdGVtcE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKKworICAgICAgICAgICAg
ICAgIHJldHVybiB0ZW1wTm9kZTsKKworICAgICAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKKyAg
ICAgICAgICAgICAgICBpZiAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoQ29tcGFyZVN0cnVjdHVyZShub2RlLT5nZXRUeXBl
KCksIG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCksIHVuaW9uQXJyYXkpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbE5vZGVGbGFnID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNp
emU7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaW9uQXJyYXlbaV0gPT0g
cmlnaHRVbmlvbkFycmF5W2ldKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbE5v
ZGVGbGFnID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgIC8vIGJy
ZWFrIG91dCBvZiBmb3IgbG9vcAorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdGVtcENv
bnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICBpZiAoIWJv
b2xOb2RlRmxhZykgeworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNv
bnN0KHRydWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdGVtcE5vZGUgPSBuZXcgVEludGVybUNv
bnN0YW50VW5pb24odGVtcENvbnN0QXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwg
RXZxQ29uc3QpKTsKKyAgICAgICAgICAgICAgICB0ZW1wTm9kZS0+c2V0TGluZShnZXRMaW5lKCkp
OworCisgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOworCisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJu
YWxFcnJvciwgZ2V0TGluZSgpLCAiSW52YWxpZCBvcGVyYXRvciBmb3IgY29uc3RhbnQgZm9sZGlu
ZyIpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHRlbXBO
b2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCByZXR1cm5UeXBl
KTsKKyAgICAgICAgdGVtcE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKKworICAgICAgICByZXR1
cm4gdGVtcE5vZGU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRG8gdW5h
cnkgb3BlcmF0aW9ucworICAgICAgICAvLworICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAq
bmV3Tm9kZSA9IDA7CisgICAgICAgIENvbnN0YW50VW5pb24qIHRlbXBDb25zdEFycmF5ID0gbmV3
IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgb2JqZWN0U2l6ZTsgaSsrKSB7CisgICAgICAgICAgICBzd2l0Y2gob3ApIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIEVPcE5lZ2F0aXZlOgorICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdl
dFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBF
YnRGbG9hdDogdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KC11bmlvbkFycmF5W2ldLmdldEZD
b25zdCgpKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDogICB0
ZW1wQ29uc3RBcnJheVtpXS5zZXRJQ29uc3QoLXVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkpOyBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBn
ZXRMaW5lKCksICJVbmFyeSBvcGVyYXRpb24gbm90IGZvbGRlZCBpbnRvIGNvbnN0YW50Iik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBFT3BM
b2dpY2FsTm90OiAvLyB0aGlzIGNvZGUgaXMgd3JpdHRlbiBmb3IgcG9zc2libGUgZnV0dXJlIHVz
ZSwgd2lsbCBub3QgZ2V0IGV4ZWN1dGVkIGN1cnJlbnRseQorICAgICAgICAgICAgICAgICAgICBz
d2l0Y2ggKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBFYnRCb29sOiAgdGVtcENvbnN0QXJyYXlbaV0uc2V0QkNvbnN0KCF1bmlvbkFycmF5
W2ldLmdldEJDb25zdCgpKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiVW5hcnkgb3BlcmF0aW9uIG5vdCBmb2xkZWQg
aW50byBjb25zdGFudCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIG5ld05vZGUgPSBuZXcgVEludGVybUNvbnN0YW50
VW5pb24odGVtcENvbnN0QXJyYXksIGdldFR5cGUoKSk7CisgICAgICAgIG5ld05vZGUtPnNldExp
bmUoZ2V0TGluZSgpKTsKKyAgICAgICAgcmV0dXJuIG5ld05vZGU7CisgICAgfQorfQorCitUSW50
ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OnByb21vdGVDb25zdGFudFVuaW9uKFRCYXNpY1R5cGUg
cHJvbW90ZVRvLCBUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSkKK3sKKyAgICBzaXplX3Qgc2l6
ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CisKKyAgICBDb25zdGFudFVuaW9u
ICpsZWZ0VW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW3NpemVdOworCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKworICAgICAgICBzd2l0Y2ggKHByb21vdGVU
bykgeworICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICBj
YXNlIEVidEludDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNl
dEZDb25zdChzdGF0aWNfY2FzdDxmbG9hdD4obm9kZS0+Z2V0SUNvbnN0KGkpKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29s
OgorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0RkNvbnN0KHN0
YXRpY19jYXN0PGZsb2F0Pihub2RlLT5nZXRCQ29uc3QoaSkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAg
ICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0RkNvbnN0KHN0YXRpY19jYXN0
PGZsb2F0Pihub2RlLT5nZXRGQ29uc3QoaSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAg
ICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRM
aW5lKCksICJDYW5ub3QgcHJvbW90ZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRUeXBlKCku
Z2V0QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAg
ICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRJQ29uc3Qoc3RhdGljX2Nh
c3Q8aW50Pihub2RlLT5nZXRJQ29uc3QoaSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAgICAgICAg
ICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRJQ29uc3Qoc3RhdGljX2Nhc3Q8aW50Pihub2Rl
LT5nZXRCQ29uc3QoaSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgICAgICAgICAgICAgbGVm
dFVuaW9uQXJyYXlbaV0uc2V0SUNvbnN0KHN0YXRpY19jYXN0PGludD4obm9kZS0+Z2V0RkNvbnN0
KGkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2Fn
ZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQ2Fubm90IHByb21vdGUi
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgeworICAg
ICAgICAgICAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxl
ZnRVbmlvbkFycmF5W2ldLnNldEJDb25zdChub2RlLT5nZXRJQ29uc3QoaSkgIT0gMCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRC
b29sOgorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0QkNvbnN0
KG5vZGUtPmdldEJDb25zdChpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAgICAgICAgICAg
IGxlZnRVbmlvbkFycmF5W2ldLnNldEJDb25zdChub2RlLT5nZXRGQ29uc3QoaSkgIT0gMC4wZik7
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQ2Fubm90IHByb21vdGUiKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdldExp
bmUoKSwgIkluY29ycmVjdCBkYXRhIHR5cGUgZm91bmQiKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgfQorCisgICAgfQorCisgICAgY29uc3QgVFR5cGUmIHQgPSBub2RlLT5n
ZXRUeXBlKCk7CisKKyAgICByZXR1cm4gYWRkQ29uc3RhbnRVbmlvbihsZWZ0VW5pb25BcnJheSwg
VFR5cGUocHJvbW90ZVRvLCB0LmdldFByZWNpc2lvbigpLCB0LmdldFF1YWxpZmllcigpLCB0Lmdl
dE5vbWluYWxTaXplKCksIHQuaXNNYXRyaXgoKSwgdC5pc0FycmF5KCkpLCBub2RlLT5nZXRMaW5l
KCkpOworfQorCisvLyBzdGF0aWMKK1RTdHJpbmcgVEludGVybVRyYXZlcnNlcjo6aGFzaChjb25z
dCBUU3RyaW5nJiBuYW1lLCBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbikKK3sKKyAgICBp
ZiAoaGFzaEZ1bmN0aW9uID09IE5VTEwgfHwgbmFtZS5lbXB0eSgpKQorICAgICAgICByZXR1cm4g
bmFtZTsKKyAgICBraHJvbm9zX3VpbnQ2NF90IG51bWJlciA9ICgqaGFzaEZ1bmN0aW9uKShuYW1l
LmNfc3RyKCksIG5hbWUubGVuZ3RoKCkpOworICAgIFRTdHJpbmdTdHJlYW0gc3RyZWFtOworICAg
IHN0cmVhbSA8PCBIQVNIRURfTkFNRV9QUkVGSVggPDwgc3RkOjpoZXggPDwgbnVtYmVyOworICAg
IFRTdHJpbmcgaGFzaGVkTmFtZSA9IHN0cmVhbS5zdHIoKTsKKyAgICByZXR1cm4gaGFzaGVkTmFt
ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL01NYXAuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL01NYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMzA4NjcxNTE0Y2M2M2U4ZTcwYTAzZTM4Njhi
NTc5NTFiODVlOTg3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTU1hcC5oCkBAIC0wLDAgKzEsNTYgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpZm5kZWYgX01NQVBfSU5DTFVERURfCisjZGVmaW5lIF9NTUFQX0lOQ0xV
REVEXworCisvLworLy8gRW5jYXBzdWxhdGUgbWVtb3J5IG1hcHBlZCBmaWxlcworLy8KKworY2xh
c3MgVE1NYXAgeworcHVibGljOgorICAgIFRNTWFwKGNvbnN0IGNoYXIqIGZpbGVOYW1lKSA6IAor
ICAgICAgICBmU2l6ZSgtMSksIC8vIC0xIGlzIHRoZSBlcnJvciB2YWx1ZSByZXR1cm5lZCBieSBH
ZXRGaWxlU2l6ZSgpCisgICAgICAgIGZwKE5VTEwpLAorICAgICAgICBmQnVmZigwKSAgIC8vIDAg
aXMgdGhlIGVycm9yIHZhbHVlIHJldHVybmVkIGJ5IE1hcFZpZXdPZkZpbGUoKQorICAgIHsKKyAg
ICAgICAgaWYgKChmcCA9IGZvcGVuKGZpbGVOYW1lLCAiciIpKSA9PSBOVUxMKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBjaGFyIGMgPSBnZXRjKGZwKTsKKyAgICAgICAgZlNpemUgPSAw
OworICAgICAgICB3aGlsZSAoYyAhPSBFT0YpIHsKKyAgICAgICAgICAgIGZTaXplKys7CisgICAg
ICAgICAgICBjID0gZ2V0YyhmcCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGMgPT0gRU9GKQor
ICAgICAgICAgICAgZlNpemUrKzsKKyAgICAgICAgcmV3aW5kKGZwKTsKKyAgICAgICAgZkJ1ZmYg
PSAoY2hhciopbWFsbG9jKHNpemVvZihjaGFyKSAqIGZTaXplKTsKKyAgICAgICAgaW50IGNvdW50
ID0gMDsKKyAgICAgICAgYyA9IGdldGMoZnApOworICAgICAgICB3aGlsZSAoYyAhPSBFT0YpIHsK
KyAgICAgICAgICAgIGZCdWZmW2NvdW50KytdID0gYzsKKyAgICAgICAgICAgIGMgPSBnZXRjKGZw
KTsKKyAgICAgICAgfQorICAgICAgICBmQnVmZltjb3VudCsrXSA9IGM7CisgICAgfQorCisgICAg
Y2hhciogZ2V0RGF0YSgpIHsgcmV0dXJuIGZCdWZmOyB9CisgICAgaW50ICAgZ2V0U2l6ZSgpIHsg
cmV0dXJuIGZTaXplOyB9CisKKyAgICB+VE1NYXAoKSB7CisgICAgICAgIGlmIChmcCAhPSBOVUxM
KQorICAgICAgICAgICAgZmNsb3NlKGZwKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIGlu
dCAgICAgICAgICAgICBmU2l6ZTsgICAgICAvLyBzaXplIG9mIGZpbGUgdG8gbWFwIGluCisgICAg
RklMRSAqZnA7CisgICAgY2hhciogICAgICAgICAgIGZCdWZmOyAgICAgIC8vIHRoZSBhY3R1YWwg
ZGF0YTsKK307CisKKyNlbmRpZiAvLyBfTU1BUF9JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL01hcExvbmdWYXJpYWJs
ZU5hbWVzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZjYyOWMyNmIxYTQ2NDU4
MGM4ZTJiM2RlODBkNzI0NGMwZDUzMjljCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMu
Y3BwCkBAIC0wLDAgKzEsMTE1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5oIgorCituYW1lc3BhY2Ugewor
CitUU3RyaW5nIG1hcExvbmdOYW1lKHNpemVfdCBpZCwgY29uc3QgVFN0cmluZyYgbmFtZSwgYm9v
bCBpc0dsb2JhbCkKK3sKKyAgICBBU1NFUlQobmFtZS5zaXplKCkgPiBNQVhfU0hPUlRFTkVEX0lE
RU5USUZJRVJfU0laRSk7CisgICAgVFN0cmluZ1N0cmVhbSBzdHJlYW07CisgICAgc3RyZWFtIDw8
ICJ3ZWJnbF8iOworICAgIGlmIChpc0dsb2JhbCkKKyAgICAgICAgc3RyZWFtIDw8ICJnIjsKKyAg
ICBzdHJlYW0gPDwgaWQ7CisgICAgaWYgKG5hbWVbMF0gIT0gJ18nKQorICAgICAgICBzdHJlYW0g
PDwgIl8iOworICAgIHN0cmVhbSA8PCBuYW1lLnN1YnN0cigwLCBNQVhfU0hPUlRFTkVEX0lERU5U
SUZJRVJfU0laRSAtIHN0cmVhbS5zdHIoKS5zaXplKCkpOworICAgIHJldHVybiBzdHJlYW0uc3Ry
KCk7Cit9CisKK0xvbmdOYW1lTWFwKiBnTG9uZ05hbWVNYXBJbnN0YW5jZSA9IE5VTEw7CisKK30g
IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworTG9uZ05hbWVNYXA6OkxvbmdOYW1lTWFwKCkKKyAg
ICA6IHJlZkNvdW50KDApCit7Cit9CisKK0xvbmdOYW1lTWFwOjp+TG9uZ05hbWVNYXAoKQorewor
fQorCisvLyBzdGF0aWMKK0xvbmdOYW1lTWFwKiBMb25nTmFtZU1hcDo6R2V0SW5zdGFuY2UoKQor
eworICAgIGlmIChnTG9uZ05hbWVNYXBJbnN0YW5jZSA9PSBOVUxMKQorICAgICAgICBnTG9uZ05h
bWVNYXBJbnN0YW5jZSA9IG5ldyBMb25nTmFtZU1hcDsKKyAgICBnTG9uZ05hbWVNYXBJbnN0YW5j
ZS0+cmVmQ291bnQrKzsKKyAgICByZXR1cm4gZ0xvbmdOYW1lTWFwSW5zdGFuY2U7Cit9CisKK3Zv
aWQgTG9uZ05hbWVNYXA6OlJlbGVhc2UoKQoreworICAgIEFTU0VSVChnTG9uZ05hbWVNYXBJbnN0
YW5jZSA9PSB0aGlzKTsKKyAgICBBU1NFUlQocmVmQ291bnQgPiAwKTsKKyAgICByZWZDb3VudC0t
OworICAgIGlmIChyZWZDb3VudCA9PSAwKSB7CisgICAgICAgIGRlbGV0ZSBnTG9uZ05hbWVNYXBJ
bnN0YW5jZTsKKyAgICAgICAgZ0xvbmdOYW1lTWFwSW5zdGFuY2UgPSBOVUxMOworICAgIH0KK30K
KworY29uc3QgY2hhciogTG9uZ05hbWVNYXA6OkZpbmQoY29uc3QgY2hhciogb3JpZ2luYWxOYW1l
KSBjb25zdAoreworICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbUxvbmdOYW1lTWFwLmZpbmQoCisgICAgICAgIG9yaWdpbmFsTmFtZSk7
CisgICAgaWYgKGl0ICE9IG1Mb25nTmFtZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuICgqaXQp
LnNlY29uZC5jX3N0cigpOworICAgIHJldHVybiBOVUxMOworfQorCit2b2lkIExvbmdOYW1lTWFw
OjpJbnNlcnQoY29uc3QgY2hhciogb3JpZ2luYWxOYW1lLCBjb25zdCBjaGFyKiBtYXBwZWROYW1l
KQoreworICAgIG1Mb25nTmFtZU1hcC5pbnNlcnQoc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6
c3RyaW5nPjo6dmFsdWVfdHlwZSgKKyAgICAgICAgb3JpZ2luYWxOYW1lLCBtYXBwZWROYW1lKSk7
Cit9CisKK3NpemVfdCBMb25nTmFtZU1hcDo6U2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1M
b25nTmFtZU1hcC5zaXplKCk7Cit9CisKK01hcExvbmdWYXJpYWJsZU5hbWVzOjpNYXBMb25nVmFy
aWFibGVOYW1lcyhMb25nTmFtZU1hcCogZ2xvYmFsTWFwKQoreworICAgIEFTU0VSVChnbG9iYWxN
YXApOworICAgIG1HbG9iYWxNYXAgPSBnbG9iYWxNYXA7Cit9CisKK3ZvaWQgTWFwTG9uZ1Zhcmlh
YmxlTmFtZXM6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCkKK3sKKyAgICBBU1NF
UlQoc3ltYm9sICE9IE5VTEwpOworICAgIGlmIChzeW1ib2wtPmdldFN5bWJvbCgpLnNpemUoKSA+
IE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFKSB7CisgICAgICAgIHN3aXRjaCAoc3ltYm9s
LT5nZXRRdWFsaWZpZXIoKSkgeworICAgICAgICAgIGNhc2UgRXZxVmFyeWluZ0luOgorICAgICAg
ICAgIGNhc2UgRXZxVmFyeWluZ091dDoKKyAgICAgICAgICBjYXNlIEV2cUludmFyaWFudFZhcnlp
bmdJbjoKKyAgICAgICAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdPdXQ6CisgICAgICAgICAg
Y2FzZSBFdnFVbmlmb3JtOgorICAgICAgICAgICAgc3ltYm9sLT5zZXRTeW1ib2woCisgICAgICAg
ICAgICAgICAgbWFwR2xvYmFsTG9uZ05hbWUoc3ltYm9sLT5nZXRTeW1ib2woKSkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHN5bWJvbC0+c2V0
U3ltYm9sKAorICAgICAgICAgICAgICAgIG1hcExvbmdOYW1lKHN5bWJvbC0+Z2V0SWQoKSwgc3lt
Ym9sLT5nZXRTeW1ib2woKSwgZmFsc2UpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
OworICAgIH0KK30KKworVFN0cmluZyBNYXBMb25nVmFyaWFibGVOYW1lczo6bWFwR2xvYmFsTG9u
Z05hbWUoY29uc3QgVFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NFUlQobUdsb2JhbE1hcCk7Cisg
ICAgY29uc3QgY2hhciogbWFwcGVkTmFtZSA9IG1HbG9iYWxNYXAtPkZpbmQobmFtZS5jX3N0cigp
KTsKKyAgICBpZiAobWFwcGVkTmFtZSAhPSBOVUxMKQorICAgICAgICByZXR1cm4gbWFwcGVkTmFt
ZTsKKyAgICBzaXplX3QgaWQgPSBtR2xvYmFsTWFwLT5TaXplKCk7CisgICAgVFN0cmluZyBydCA9
IG1hcExvbmdOYW1lKGlkLCBuYW1lLCB0cnVlKTsKKyAgICBtR2xvYmFsTWFwLT5JbnNlcnQobmFt
ZS5jX3N0cigpLCBydC5jX3N0cigpKTsKKyAgICByZXR1cm4gcnQ7Cit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9NYXBMb25nVmFy
aWFibGVOYW1lcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYjA4NWEzNjg3N2IwMTA1
NjA1NGRhMmQxMmU0NDAwZjgyOWVhMzllCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMu
aApAQCAtMCwwICsxLDU4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVS
X01BUF9MT05HX1ZBUklBQkxFX05BTUVTX0hfCisjZGVmaW5lIENPTVBJTEVSX01BUF9MT05HX1ZB
UklBQkxFX05BTUVTX0hfCisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZUluZm8uaCIKKworLy8gVGhpcyBzaXplIGRvZXMgbm90
IGluY2x1ZGUgJ1wwJyBpbiB0aGUgZW5kLgorI2RlZmluZSBNQVhfU0hPUlRFTkVEX0lERU5USUZJ
RVJfU0laRSAzMgorCisvLyBUaGlzIGlzIGEgcmVmLWNvdW50ZWQgc2luZ2xldG9uLiBHZXRJbnN0
YW5jZSgpIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZQorLy8gc2luZ2xldG9uLCBhbmQgYWZ0ZXIg
dXNlLCBjYWxsIFJlbGVhc2UoKS4gR2V0SW5zdGFuY2UoKSBhbmQgUmVsZWFzZSgpIHNob3VsZAor
Ly8gYmUgcGFpcmVkLgorY2xhc3MgTG9uZ05hbWVNYXAgeworcHVibGljOgorICAgIHN0YXRpYyBM
b25nTmFtZU1hcCogR2V0SW5zdGFuY2UoKTsKKyAgICB2b2lkIFJlbGVhc2UoKTsKKworICAgIC8v
IFJldHVybiB0aGUgbWFwcGVkIG5hbWUgaWYgPG9yaWdpbmFsTmFtZSwgbWFwcGVkTmFtZT4gaXMg
aW4gdGhlIG1hcDsKKyAgICAvLyBvdGhlcndpc2UsIHJldHVybiBOVUxMLgorICAgIGNvbnN0IGNo
YXIqIEZpbmQoY29uc3QgY2hhciogb3JpZ2luYWxOYW1lKSBjb25zdDsKKworICAgIC8vIEluc2Vy
dCBhIHBhaXIgaW50byB0aGUgbWFwLgorICAgIHZvaWQgSW5zZXJ0KGNvbnN0IGNoYXIqIG9yaWdp
bmFsTmFtZSwgY29uc3QgY2hhciogbWFwcGVkTmFtZSk7CisKKyAgICAvLyBSZXR1cm4gdGhlIG51
bWJlciBvZiBlbnRyaWVzIGluIHRoZSBtYXAuCisgICAgc2l6ZV90IFNpemUoKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICBMb25nTmFtZU1hcCgpOworICAgIH5Mb25nTmFtZU1hcCgpOworCisgICAg
c2l6ZV90IHJlZkNvdW50OworICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4g
bUxvbmdOYW1lTWFwOworfTsKKworLy8gVHJhdmVyc2VzIGludGVybWVkaWF0ZSB0cmVlIHRvIG1h
cCBhdHRyaWJ1dGVzIGFuZCB1bmlmb3JtcyBuYW1lcyB0aGF0IGFyZQorLy8gbG9uZ2VyIHRoYW4g
TUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJWkUgdG8gTUFYX1NIT1JURU5FRF9JREVOVElGSUVS
X1NJWkUuCitjbGFzcyBNYXBMb25nVmFyaWFibGVOYW1lcyA6IHB1YmxpYyBUSW50ZXJtVHJhdmVy
c2VyIHsKK3B1YmxpYzoKKyAgICBNYXBMb25nVmFyaWFibGVOYW1lcyhMb25nTmFtZU1hcCogZ2xv
YmFsTWFwKTsKKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7
CisKK3ByaXZhdGU6CisgICAgVFN0cmluZyBtYXBHbG9iYWxMb25nTmFtZShjb25zdCBUU3RyaW5n
JiBuYW1lKTsKKworICAgIExvbmdOYW1lTWFwKiBtR2xvYmFsTWFwOworfTsKKworI2VuZGlmICAv
LyBDT01QSUxFUl9NQVBfTE9OR19WQVJJQUJMRV9OQU1FU19IXwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTm9kZVNlYXJjaC5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTm9kZVNlYXJj
aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmI1OGM3ZWM2ODk0NTg4YzA4MzUwZTg4Njk2ZTczMTQzZGY0OWUxMjcK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9Ob2RlU2VhcmNoLmgKQEAgLTAsMCArMSw4MCBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKy8vIE5vZGVTZWFyY2guaDogVXRpbGl0aWVzIGZvciBzZWFyY2hpbmcgdHJhbnNsYXRvciBu
b2RlIGdyYXBocworLy8KKworI2lmbmRlZiBUUkFOU0xBVE9SX05PREVTRUFSQ0hfSF8KKyNkZWZp
bmUgVFJBTlNMQVRPUl9OT0RFU0VBUkNIX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL2ludGVybWVkaWF0ZS5oIgorCituYW1lc3BhY2Ugc2gKK3sKKwordGVtcGxhdGUgPGNsYXNz
IFBhcmVudD4KK2NsYXNzIE5vZGVTZWFyY2hUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZl
cnNlcgoreworICBwdWJsaWM6CisgICAgTm9kZVNlYXJjaFRyYXZlcnNlcigpCisgICAgICAgIDog
bUZvdW5kKGZhbHNlKQorICAgIHt9CisKKyAgICBib29sIGZvdW5kKCkgY29uc3QgeyByZXR1cm4g
bUZvdW5kOyB9CisKKyAgICBzdGF0aWMgYm9vbCBzZWFyY2goVEludGVybU5vZGUgKm5vZGUpCisg
ICAgeworICAgICAgICBQYXJlbnQgc2VhcmNoVHJhdmVyc2VyOworICAgICAgICBub2RlLT50cmF2
ZXJzZSgmc2VhcmNoVHJhdmVyc2VyKTsKKyAgICAgICAgcmV0dXJuIHNlYXJjaFRyYXZlcnNlci5m
b3VuZCgpOworICAgIH0KKworICBwcm90ZWN0ZWQ6CisgICAgYm9vbCBtRm91bmQ7Cit9OworCitj
bGFzcyBGaW5kRGlzY2FyZCA6IHB1YmxpYyBOb2RlU2VhcmNoVHJhdmVyc2VyPEZpbmREaXNjYXJk
PgoreworICBwdWJsaWM6CisgICAgdmlydHVhbCBib29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0
LCBUSW50ZXJtQnJhbmNoICpub2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5nZXRG
bG93T3AoKSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRU9wS2lsbDoKKyAgICAgICAgICAg
IG1Gb3VuZCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGRlZmF1bHQ6
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICFtRm91bmQ7CisgICAgfQorfTsK
KworY2xhc3MgRmluZFNpZGVFZmZlY3RSZXdyaXRpbmcgOiBwdWJsaWMgTm9kZVNlYXJjaFRyYXZl
cnNlcjxGaW5kU2lkZUVmZmVjdFJld3JpdGluZz4KK3sKKyAgcHVibGljOgorICAgIHZpcnR1YWwg
Ym9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm9kZSkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKKyAgICAgICAgeworICAgICAgICAgIGNh
c2UgRU9wTG9naWNhbE9yOgorICAgICAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDoKKyAgICAgICAg
ICAgIGlmIChub2RlLT5nZXRSaWdodCgpLT5oYXNTaWRlRWZmZWN0cygpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG1Gb3VuZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuICFtRm91bmQ7CisgICAgfQorfTsKKworfQorCisjZW5kaWYgLy8gVFJBTlNM
QVRPUl9OT0RFU0VBUkNIX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRFU1NMLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEVTU0wuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjgzNjc0MTI0NjIxMWE2MmQzYjQyODMwZmU2Y2M0ZDRmNzFjM2Q2MTcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRw
dXRFU1NMLmNwcApAQCAtMCwwICsxLDI2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRFU1NMLmgiCisKK1RPdXRwdXRFU1NMOjpUT3V0
cHV0RVNTTChUSW5mb1NpbmtCYXNlJiBvYmpTaW5rLAorICAgICAgICAgICAgICAgICAgICAgICAg
IFNoQXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJhdGVneSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBOYW1lTWFwJiBuYW1lTWFwLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCisgICAgOiBUT3V0cHV0R0xTTEJhc2Uob2Jq
U2luaywgY2xhbXBpbmdTdHJhdGVneSwgaGFzaEZ1bmN0aW9uLCBuYW1lTWFwLCBzeW1ib2xUYWJs
ZSkKK3sKK30KKworYm9vbCBUT3V0cHV0RVNTTDo6d3JpdGVWYXJpYWJsZVByZWNpc2lvbihUUHJl
Y2lzaW9uIHByZWNpc2lvbikKK3sKKyAgICBpZiAocHJlY2lzaW9uID09IEVicFVuZGVmaW5lZCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2lu
aygpOworICAgIG91dCA8PCBnZXRQcmVjaXNpb25TdHJpbmcocHJlY2lzaW9uKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL091dHB1dEVTU0wuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEVTU0wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZjAyOTc5YTA1
MDQ0YzM0MmRiYTYxZjUwZDIzZjQ2ZTRlYmY2NTZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0RVNTTC5oCkBA
IC0wLDAgKzEsMjUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ1JPU1NDT01QSUxF
UkdMU0xfT1VUUFVURVNTTF9IXworI2RlZmluZSBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRFU1NM
X0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0xCYXNlLmgiCisK
K2NsYXNzIFRPdXRwdXRFU1NMIDogcHVibGljIFRPdXRwdXRHTFNMQmFzZQoreworcHVibGljOgor
ICAgIFRPdXRwdXRFU1NMKFRJbmZvU2lua0Jhc2UmIG9ialNpbmssCisgICAgICAgICAgICAgICAg
U2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAorICAgICAgICAg
ICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAorICAgICAgICAgICAgICAgIE5h
bWVNYXAmIG5hbWVNYXAsCisgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJs
ZSk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIGJvb2wgd3JpdGVWYXJpYWJsZVByZWNpc2lv
bihUUHJlY2lzaW9uIHByZWNpc2lvbik7Cit9OworCisjZW5kaWYgIC8vIENST1NTQ09NUElMRVJH
TFNMX09VVFBVVEVTU0xfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NTU4OTU2MDY4MmI2MjhiNTk2ZjNhNzU5MDg3OWY3MWM0NjdmMzlhMgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1
dEdMU0wuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0wuaCIKKworVE91dHB1dEdMU0w6OlRPdXRw
dXRHTFNMKFRJbmZvU2lua0Jhc2UmIG9ialNpbmssCisgICAgICAgICAgICAgICAgICAgICAgICAg
U2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAorICAgICAgICAg
ICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKKyAgICA6IFRPdXRwdXRHTFNMQmFzZShvYmpT
aW5rLCBjbGFtcGluZ1N0cmF0ZWd5LCBoYXNoRnVuY3Rpb24sIG5hbWVNYXAsIHN5bWJvbFRhYmxl
KQoreworfQorCitib29sIFRPdXRwdXRHTFNMOjp3cml0ZVZhcmlhYmxlUHJlY2lzaW9uKFRQcmVj
aXNpb24pCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFRPdXRwdXRHTFNMOjp2aXNp
dFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9
IG9ialNpbmsoKTsKKworICAgIGlmIChub2RlLT5nZXRTeW1ib2woKSA9PSAiZ2xfRnJhZ0RlcHRo
RVhUIikKKyAgICB7CisgICAgICAgIG91dCA8PCAiZ2xfRnJhZ0RlcHRoIjsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgVE91dHB1dEdMU0xCYXNlOjp2aXNpdFN5bWJvbChub2RlKTsK
KyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTFmMTE0ZDM0N2I0
MTIyZDkzNDE2ZTYyNDRjYmFhZjkzMGQ0OTdjMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0wuaApAQCAt
MCwwICsxLDI2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENST1NTQ09NUElMRVJH
TFNMX09VVFBVVEdMU0xfSF8KKyNkZWZpbmUgQ1JPU1NDT01QSUxFUkdMU0xfT1VUUFVUR0xTTF9I
XworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMQmFzZS5oIgorCitj
bGFzcyBUT3V0cHV0R0xTTCA6IHB1YmxpYyBUT3V0cHV0R0xTTEJhc2UKK3sKK3B1YmxpYzoKKyAg
ICBUT3V0cHV0R0xTTChUSW5mb1NpbmtCYXNlJiBvYmpTaW5rLAorICAgICAgICAgICAgICAgIFNo
QXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJhdGVneSwKKyAgICAgICAgICAg
ICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwKKyAgICAgICAgICAgICAgICBOYW1l
TWFwJiBuYW1lTWFwLAorICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUp
OworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBib29sIHdyaXRlVmFyaWFibGVQcmVjaXNpb24o
VFByZWNpc2lvbik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wq
IG5vZGUpOworfTsKKworI2VuZGlmICAvLyBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRHTFNMX0hf
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9PdXRwdXRHTFNMQmFzZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMQmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjJmMGEzZDZi
ZTM4MDJlMzhlMDEzMTVhZjE4YWEwYTAyZDljMTQyNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0xCYXNl
LmNwcApAQCAtMCwwICsxLDgxNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL2NvbXBpbGVyZGVidWcuaCIKKworI2luY2x1ZGUgPGNmbG9hdD4KKworbmFtZXNw
YWNlCit7CitUU3RyaW5nIGFycmF5QnJhY2tldHMoY29uc3QgVFR5cGUmIHR5cGUpCit7CisgICAg
QVNTRVJUKHR5cGUuaXNBcnJheSgpKTsKKyAgICBUSW5mb1NpbmtCYXNlIG91dDsKKyAgICBvdXQg
PDwgIlsiIDw8IHR5cGUuZ2V0QXJyYXlTaXplKCkgPDwgIl0iOworICAgIHJldHVybiBUU3RyaW5n
KG91dC5jX3N0cigpKTsKK30KKworYm9vbCBpc1NpbmdsZVN0YXRlbWVudChUSW50ZXJtTm9kZSog
bm9kZSkgeworICAgIGlmIChjb25zdCBUSW50ZXJtQWdncmVnYXRlKiBhZ2dyZWdhdGUgPSBub2Rl
LT5nZXRBc0FnZ3JlZ2F0ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChhZ2dyZWdhdGUtPmdl
dE9wKCkgIT0gRU9wRnVuY3Rpb24pICYmCisgICAgICAgICAgICAgICAoYWdncmVnYXRlLT5nZXRP
cCgpICE9IEVPcFNlcXVlbmNlKTsKKyAgICB9CisgICAgZWxzZSBpZiAoY29uc3QgVEludGVybVNl
bGVjdGlvbiogc2VsZWN0aW9uID0gbm9kZS0+Z2V0QXNTZWxlY3Rpb25Ob2RlKCkpCisgICAgewor
ICAgICAgICAvLyBUZXJuYXJ5IG9wZXJhdG9ycyBhcmUgdXN1YWxseSBwYXJ0IG9mIGFuIGFzc2ln
bm1lbnQgb3BlcmF0b3IuCisgICAgICAgIC8vIFRoaXMgaGFuZGxlcyB0aG9zZSByYXJlIGNhc2Vz
IGluIHdoaWNoIHRoZXkgYXJlIGFsbCBieSB0aGVtc2VsdmVzLgorICAgICAgICByZXR1cm4gc2Vs
ZWN0aW9uLT51c2VzVGVybmFyeU9wZXJhdG9yKCk7CisgICAgfQorICAgIGVsc2UgaWYgKG5vZGUt
PmdldEFzTG9vcE5vZGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9Cit9ICAvLyBuYW1lc3BhY2UKKworVE91dHB1dEdMU0xCYXNlOjpU
T3V0cHV0R0xTTEJhc2UoVEluZm9TaW5rQmFzZSYgb2JqU2luaywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNoQXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJh
dGVneSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQg
aGFzaEZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZU1hcCYg
bmFtZU1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYg
c3ltYm9sVGFibGUpCisgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIHRydWUsIHRydWUpLAor
ICAgICAgbU9ialNpbmsob2JqU2luayksCisgICAgICBtRGVjbGFyaW5nVmFyaWFibGVzKGZhbHNl
KSwKKyAgICAgIG1DbGFtcGluZ1N0cmF0ZWd5KGNsYW1waW5nU3RyYXRlZ3kpLAorICAgICAgbUhh
c2hGdW5jdGlvbihoYXNoRnVuY3Rpb24pLAorICAgICAgbU5hbWVNYXAobmFtZU1hcCksCisgICAg
ICBtU3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCit7Cit9CisKK3ZvaWQgVE91dHB1dEdMU0xCYXNl
Ojp3cml0ZVRyaXBsZXQoVmlzaXQgdmlzaXQsIGNvbnN0IGNoYXIqIHByZVN0ciwgY29uc3QgY2hh
ciogaW5TdHIsIGNvbnN0IGNoYXIqIHBvc3RTdHIpCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0
ID0gb2JqU2luaygpOworICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCAmJiBwcmVTdHIpCisgICAg
eworICAgICAgICBvdXQgPDwgcHJlU3RyOworICAgIH0KKyAgICBlbHNlIGlmICh2aXNpdCA9PSBJ
blZpc2l0ICYmIGluU3RyKQorICAgIHsKKyAgICAgICAgb3V0IDw8IGluU3RyOworICAgIH0KKyAg
ICBlbHNlIGlmICh2aXNpdCA9PSBQb3N0VmlzaXQgJiYgcG9zdFN0cikKKyAgICB7CisgICAgICAg
IG91dCA8PCBwb3N0U3RyOworICAgIH0KK30KKwordm9pZCBUT3V0cHV0R0xTTEJhc2U6OndyaXRl
VmFyaWFibGVUeXBlKGNvbnN0IFRUeXBlJiB0eXBlKQoreworICAgIFRJbmZvU2lua0Jhc2UmIG91
dCA9IG9ialNpbmsoKTsKKyAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHR5cGUuZ2V0UXVhbGlm
aWVyKCk7CisgICAgLy8gVE9ETyhhbG9rcCk6IFZhbGlkYXRlIHF1YWxpZmllciBmb3IgdmFyaWFi
bGUgZGVjbGFyYXRpb25zLgorICAgIGlmICgocXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgJiYg
KHF1YWxpZmllciAhPSBFdnFHbG9iYWwpKQorICAgICAgICBvdXQgPDwgdHlwZS5nZXRRdWFsaWZp
ZXJTdHJpbmcoKSA8PCAiICI7CisgICAgLy8gRGVjbGFyZSB0aGUgc3RydWN0IGlmIHdlIGhhdmUg
bm90IGRvbmUgc28gYWxyZWFkeS4KKyAgICBpZiAoKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0
U3RydWN0KSAmJiAhc3RydWN0RGVjbGFyZWQodHlwZS5nZXRTdHJ1Y3QoKSkpCisgICAgeworICAg
ICAgICBkZWNsYXJlU3RydWN0KHR5cGUuZ2V0U3RydWN0KCkpOworICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICBpZiAod3JpdGVWYXJpYWJsZVByZWNpc2lvbih0eXBlLmdldFByZWNpc2lv
bigpKSkKKyAgICAgICAgICAgIG91dCA8PCAiICI7CisgICAgICAgIG91dCA8PCBnZXRUeXBlTmFt
ZSh0eXBlKTsKKyAgICB9Cit9CisKK3ZvaWQgVE91dHB1dEdMU0xCYXNlOjp3cml0ZUZ1bmN0aW9u
UGFyYW1ldGVycyhjb25zdCBUSW50ZXJtU2VxdWVuY2UmIGFyZ3MpCit7CisgICAgVEluZm9TaW5r
QmFzZSYgb3V0ID0gb2JqU2luaygpOworICAgIGZvciAoVEludGVybVNlcXVlbmNlOjpjb25zdF9p
dGVyYXRvciBpdGVyID0gYXJncy5iZWdpbigpOworICAgICAgICAgaXRlciAhPSBhcmdzLmVuZCgp
OyArK2l0ZXIpCisgICAgeworICAgICAgICBjb25zdCBUSW50ZXJtU3ltYm9sKiBhcmcgPSAoKml0
ZXIpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICAgICAgQVNTRVJUKGFyZyAhPSBOVUxMKTsKKwor
ICAgICAgICBjb25zdCBUVHlwZSYgdHlwZSA9IGFyZy0+Z2V0VHlwZSgpOworICAgICAgICB3cml0
ZVZhcmlhYmxlVHlwZSh0eXBlKTsKKworICAgICAgICBjb25zdCBUU3RyaW5nJiBuYW1lID0gYXJn
LT5nZXRTeW1ib2woKTsKKyAgICAgICAgaWYgKCFuYW1lLmVtcHR5KCkpCisgICAgICAgICAgICBv
dXQgPDwgIiAiIDw8IGhhc2hOYW1lKG5hbWUpOworICAgICAgICBpZiAodHlwZS5pc0FycmF5KCkp
CisgICAgICAgICAgICBvdXQgPDwgYXJyYXlCcmFja2V0cyh0eXBlKTsKKworICAgICAgICAvLyBQ
dXQgYSBjb21tYSBpZiB0aGlzIGlzIG5vdCB0aGUgbGFzdCBhcmd1bWVudC4KKyAgICAgICAgaWYg
KGl0ZXIgIT0gYXJncy5lbmQoKSAtIDEpCisgICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAgICB9
Cit9CisKK2NvbnN0IENvbnN0YW50VW5pb24qIFRPdXRwdXRHTFNMQmFzZTo6d3JpdGVDb25zdGFu
dFVuaW9uKGNvbnN0IFRUeXBlJiB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29uc3RhbnRVbmlvbiogcENvbnN0VW5p
b24pCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOworCisgICAgaWYgKHR5
cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQorICAgIHsKKyAgICAgICAgY29uc3QgVFN0
cnVjdHVyZSogc3RydWN0dXJlID0gdHlwZS5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgb3V0IDw8IGhh
c2hOYW1lKHN0cnVjdHVyZS0+bmFtZSgpKSA8PCAiKCI7CisKKyAgICAgICAgY29uc3QgVEZpZWxk
TGlzdCYgZmllbGRzID0gc3RydWN0dXJlLT5maWVsZHMoKTsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNv
bnN0IFRUeXBlKiBmaWVsZFR5cGUgPSBmaWVsZHNbaV0tPnR5cGUoKTsKKyAgICAgICAgICAgIEFT
U0VSVChmaWVsZFR5cGUgIT0gTlVMTCk7CisgICAgICAgICAgICBwQ29uc3RVbmlvbiA9IHdyaXRl
Q29uc3RhbnRVbmlvbigqZmllbGRUeXBlLCBwQ29uc3RVbmlvbik7CisgICAgICAgICAgICBpZiAo
aSAhPSBmaWVsZHMuc2l6ZSgpIC0gMSkgb3V0IDw8ICIsICI7CisgICAgICAgIH0KKyAgICAgICAg
b3V0IDw8ICIpIjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc2l6ZV90IHNpemUg
PSB0eXBlLmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgYm9vbCB3cml0ZVR5cGUgPSBzaXplID4g
MTsKKyAgICAgICAgaWYgKHdyaXRlVHlwZSkgb3V0IDw8IGdldFR5cGVOYW1lKHR5cGUpIDw8ICIo
IjsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2ksICsrcENvbnN0VW5p
b24pCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAocENvbnN0VW5pb24tPmdldFR5cGUo
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OiBvdXQgPDwg
c3RkOjptaW4oRkxUX01BWCwgc3RkOjptYXgoLUZMVF9NQVgsIHBDb25zdFVuaW9uLT5nZXRGQ29u
c3QoKSkpOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEVidEludDogb3V0IDw8IHBDb25z
dFVuaW9uLT5nZXRJQ29uc3QoKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29s
OiBvdXQgPDwgcENvbnN0VW5pb24tPmdldEJDb25zdCgpOyBicmVhazsKKyAgICAgICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGkgIT0gc2l6ZSAtIDEpIG91dCA8PCAiLCAiOworICAgICAgICB9CisgICAgICAgIGlmICh3cml0
ZVR5cGUpIG91dCA8PCAiKSI7CisgICAgfQorICAgIHJldHVybiBwQ29uc3RVbmlvbjsKK30KKwor
dm9pZCBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCit7
CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOworICAgIGlmIChtTG9vcFVucm9s
bC5OZWVkc1RvUmVwbGFjZVN5bWJvbFdpdGhWYWx1ZShub2RlKSkKKyAgICAgICAgb3V0IDw8IG1M
b29wVW5yb2xsLkdldExvb3BJbmRleFZhbHVlKG5vZGUpOworICAgIGVsc2UKKyAgICAgICAgb3V0
IDw8IGhhc2hWYXJpYWJsZU5hbWUobm9kZS0+Z2V0U3ltYm9sKCkpOworCisgICAgaWYgKG1EZWNs
YXJpbmdWYXJpYWJsZXMgJiYgbm9kZS0+Z2V0VHlwZSgpLmlzQXJyYXkoKSkKKyAgICAgICAgb3V0
IDw8IGFycmF5QnJhY2tldHMobm9kZS0+Z2V0VHlwZSgpKTsKK30KKwordm9pZCBUT3V0cHV0R0xT
TEJhc2U6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSkKK3sK
KyAgICB3cml0ZUNvbnN0YW50VW5pb24obm9kZS0+Z2V0VHlwZSgpLCBub2RlLT5nZXRVbmlvbkFy
cmF5UG9pbnRlcigpKTsKK30KKworYm9vbCBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0QmluYXJ5KFZp
c2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBub2RlKQoreworICAgIGJvb2wgdmlzaXRDaGlsZHJl
biA9IHRydWU7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOworICAgIHN3aXRj
aCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7CisgICAgICAgIGNhc2UgRU9wSW5pdGlhbGl6ZToKKyAg
ICAgICAgICAgIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG91dCA8PCAiID0gIjsKKyAgICAgICAgICAgICAgICAvLyBSSFMgb2YgaW5pdGlhbGl6
ZSBpcyBub3QgYmVpbmcgZGVjbGFyZWQuCisgICAgICAgICAgICAgICAgbURlY2xhcmluZ1Zhcmlh
YmxlcyA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wQXNzaWduOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiA9ICIsICIpIik7IGJy
ZWFrOworICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIs
ICIgKz0gIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU3ViQXNzaWduOiB3cml0ZVRy
aXBsZXQodmlzaXQsICIoIiwgIiAtPSAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BE
aXZBc3NpZ246IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiIC89ICIsICIpIik7IGJyZWFrOwor
ICAgICAgICAvLyBOb3RpY2UgdGhlIGZhbGwtdGhyb3VnaC4KKyAgICAgICAgY2FzZSBFT3BNdWxB
c3NpZ246IAorICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOgorICAgICAg
ICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOgorICAgICAgICBjYXNlIEVPcE1hdHJp
eFRpbWVzU2NhbGFyQXNzaWduOgorICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4QXNz
aWduOgorICAgICAgICAgICAgd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgKj0gIiwgIikiKTsK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6CisgICAg
ICAgICAgICB3cml0ZVRyaXBsZXQodmlzaXQsIE5VTEwsICJbIiwgIl0iKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6CisgICAgICAgICAgICBpZiAo
bm9kZS0+Z2V0QWRkSW5kZXhDbGFtcCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG1DbGFtcGluZ1N0cmF0ZWd5ID09IFNIX0NMQU1QX1dJVEhfQ0xBTVBfSU5UUklO
U0lDKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIltpbnQoY2xhbXAoZmxvYXQo
IjsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG91dCA8PCAiW3dlYmdsX2ludF9jbGFtcCgiOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IFBvc3RWaXNp
dCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGludCBtYXhTaXplOwor
ICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgKmxlZnQgPSBub2RlLT5nZXRMZWZ0KCk7
CisgICAgICAgICAgICAgICAgICAgIFRUeXBlIGxlZnRUeXBlID0gbGVmdC0+Z2V0VHlwZSgpOwor
CisgICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5pc0FycmF5KCkpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBzaGFkZXIgd2lsbCBmYWls
IHZhbGlkYXRpb24gaWYgdGhlIGFycmF5IGxlbmd0aCBpcyBub3QgPiAwLgorICAgICAgICAgICAg
ICAgICAgICAgICAgbWF4U2l6ZSA9IGxlZnRUeXBlLmdldEFycmF5U2l6ZSgpIC0gMTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heFNpemUgPSBsZWZ0VHlwZS5nZXRO
b21pbmFsU2l6ZSgpIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgIGlmIChtQ2xhbXBpbmdTdHJhdGVneSA9PSBTSF9DTEFNUF9XSVRIX0NMQU1QX0lOVFJJ
TlNJQykgeworICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIpLCAwLjAsIGZsb2F0KCIg
PDwgbWF4U2l6ZSA8PCAiKSkpXSI7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgMCwgIiA8PCBtYXhTaXplIDw8ICIpXSI7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd3JpdGVUcmlw
bGV0KHZpc2l0LCBOVUxMLCAiWyIsICJdIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdFN0cnVjdDoKKyAgICAgICAgICAgIGlm
ICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIEhl
cmUgd2UgYXJlIHdyaXRpbmcgb3V0ICJmb28uYmFyIiwgd2hlcmUgImZvbyIgaXMgc3RydWN0Cisg
ICAgICAgICAgICAgICAgLy8gYW5kICJiYXIiIGlzIGZpZWxkLiBJbiBBU1QsIGl0IGlzIHJlcHJl
c2VudGVkIGFzIGEgYmluYXJ5CisgICAgICAgICAgICAgICAgLy8gbm9kZSwgd2hlcmUgbGVmdCBj
aGlsZCByZXByZXNlbnRzICJmb28iIGFuZCByaWdodCBjaGlsZCAiYmFyIi4KKyAgICAgICAgICAg
ICAgICAvLyBUaGUgbm9kZSBpdHNlbGYgcmVwcmVzZW50cyAiLiIuIFRoZSBzdHJ1Y3QgZmllbGQg
ImJhciIgaXMKKyAgICAgICAgICAgICAgICAvLyBhY3R1YWxseSBzdG9yZWQgYXMgYW4gaW5kZXgg
aW50byBUU3RydWN0dXJlOjpmaWVsZHMuCisgICAgICAgICAgICAgICAgb3V0IDw8ICIuIjsKKyAg
ICAgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBub2RlLT5nZXRMZWZ0
KCktPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUSW50ZXJt
Q29uc3RhbnRVbmlvbiogaW5kZXggPSBub2RlLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5p
b24oKTsKKyAgICAgICAgICAgICAgICBjb25zdCBURmllbGQqIGZpZWxkID0gc3RydWN0dXJlLT5m
aWVsZHMoKVtpbmRleC0+Z2V0SUNvbnN0KDApXTsKKworICAgICAgICAgICAgICAgIFRTdHJpbmcg
ZmllbGROYW1lID0gZmllbGQtPm5hbWUoKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1TeW1ib2xU
YWJsZS5maW5kQnVpbHRJbihzdHJ1Y3R1cmUtPm5hbWUoKSkpCisgICAgICAgICAgICAgICAgICAg
IGZpZWxkTmFtZSA9IGhhc2hOYW1lKGZpZWxkTmFtZSk7CisKKyAgICAgICAgICAgICAgICBvdXQg
PDwgZmllbGROYW1lOworICAgICAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFZlY3RvclN3
aXp6bGU6CisgICAgICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgIi4iOworICAgICAgICAgICAgICAgIFRJbnRlcm1BZ2dy
ZWdhdGUqIHJpZ2h0Q2hpbGQgPSBub2RlLT5nZXRSaWdodCgpLT5nZXRBc0FnZ3JlZ2F0ZSgpOwor
ICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSByaWdodENoaWxkLT5n
ZXRTZXF1ZW5jZSgpOworICAgICAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjppdGVy
YXRvciBzaXQgPSBzZXF1ZW5jZS5iZWdpbigpOyBzaXQgIT0gc2VxdWVuY2UuZW5kKCk7ICsrc2l0
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVEludGVybUNvbnN0YW50
VW5pb24qIGVsZW1lbnQgPSAoKnNpdCktPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoZWxlbWVudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50KTsKKyAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnQtPmdldE5vbWluYWxTaXplKCkgPT0gMSk7
CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbnN0YW50VW5pb24mIGRhdGEgPSBlbGVtZW50
LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpWzBdOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
ZGF0YS5nZXRUeXBlKCkgPT0gRWJ0SW50KTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChk
YXRhLmdldElDb25zdCgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIDA6IG91dCA8PCAieCI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAxOiBvdXQgPDwgInkiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgMjogb3V0IDw8ICJ6IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6
IG91dCA8PCAidyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BBZGQ6IHdyaXRlVHJpcGxl
dCh2aXNpdCwgIigiLCAiICsgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU3ViOiB3
cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAtICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNl
IEVPcE11bDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgKiAiLCAiKSIpOyBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BEaXY6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiIC8gIiwgIikiKTsg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wTW9kOiBVTklNUExFTUVOVEVEKCk7IGJyZWFrOworICAg
ICAgICBjYXNlIEVPcEVxdWFsOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiA9PSAiLCAiKSIp
OyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAi
KCIsICIgIT0gIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW46IHdyaXRl
VHJpcGxldCh2aXNpdCwgIigiLCAiIDwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
R3JlYXRlclRoYW46IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiID4gIiwgIikiKTsgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIs
ICIgPD0gIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDog
d3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgPj0gIiwgIikiKTsgYnJlYWs7CisKKyAgICAgICAg
Ly8gTm90aWNlIHRoZSBmYWxsLXRocm91Z2guCisgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNT
Y2FsYXI6CisgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXg6CisgICAgICAgIGNhc2Ug
RU9wTWF0cml4VGltZXNWZWN0b3I6CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXI6
CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXg6CisgICAgICAgICAgICB3cml0ZVRy
aXBsZXQodmlzaXQsICIoIiwgIiAqICIsICIpIik7CisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBjYXNlIEVPcExvZ2ljYWxPcjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgfHwgIiwg
IikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjogd3JpdGVUcmlwbGV0KHZp
c2l0LCAiKCIsICIgXl4gIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9naWNhbEFu
ZDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgJiYgIiwgIikiKTsgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB2aXNp
dENoaWxkcmVuOworfQorCitib29sIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRVbmFyeShWaXNpdCB2
aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQoreworICAgIFRTdHJpbmcgcHJlU3RyaW5nOworICAg
IFRTdHJpbmcgcG9zdFN0cmluZyA9ICIpIjsKKworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkK
KyAgICB7CisgICAgICAgIGNhc2UgRU9wTmVnYXRpdmU6IHByZVN0cmluZyA9ICIoLSI7IGJyZWFr
OworICAgICAgICBjYXNlIEVPcFZlY3RvckxvZ2ljYWxOb3Q6IHByZVN0cmluZyA9ICJub3QoIjsg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDogcHJlU3RyaW5nID0gIighIjsgYnJl
YWs7CisKKyAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50OiBwcmVTdHJpbmcgPSAiKCI7IHBv
c3RTdHJpbmcgPSAiKyspIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDog
cHJlU3RyaW5nID0gIigiOyBwb3N0U3RyaW5nID0gIi0tKSI7IGJyZWFrOworICAgICAgICBjYXNl
IEVPcFByZUluY3JlbWVudDogcHJlU3RyaW5nID0gIigrKyI7IGJyZWFrOworICAgICAgICBjYXNl
IEVPcFByZURlY3JlbWVudDogcHJlU3RyaW5nID0gIigtLSI7IGJyZWFrOworCisgICAgICAgIGNh
c2UgRU9wQ29udkludFRvQm9vbDoKKyAgICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0Jvb2w6Cisg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wZXJhbmQoKS0+Z2V0VHlwZSgpLmdldE5vbWlu
YWxTaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSAxOiBwcmVTdHJp
bmcgPSAgImJvb2woIjsgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjogcHJlU3RyaW5n
ID0gImJ2ZWMyKCI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMzogcHJlU3RyaW5nID0g
ImJ2ZWMzKCI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDogcHJlU3RyaW5nID0gImJ2
ZWM0KCI7IGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb252Qm9v
bFRvRmxvYXQ6CisgICAgICAgIGNhc2UgRU9wQ29udkludFRvRmxvYXQ6CisgICAgICAgICAgICBz
d2l0Y2ggKG5vZGUtPmdldE9wZXJhbmQoKS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSAxOiBwcmVTdHJpbmcgPSAiZmxvYXQo
IjsgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjogcHJlU3RyaW5nID0gInZlYzIoIjsg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAzOiBwcmVTdHJpbmcgPSAidmVjMygiOyBicmVh
azsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6IHByZVN0cmluZyA9ICJ2ZWM0KCI7IGJyZWFrOwor
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0ludDoKKyAgICAg
ICAgY2FzZSBFT3BDb252Qm9vbFRvSW50OgorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRP
cGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGNhc2UgMTogcHJlU3RyaW5nID0gImludCgiOyAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSAyOiBwcmVTdHJpbmcgPSAiaXZlYzIoIjsgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2FzZSAzOiBwcmVTdHJpbmcgPSAiaXZlYzMoIjsgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSA0OiBwcmVTdHJpbmcgPSAiaXZlYzQoIjsgYnJlYWs7CisgICAgICAgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGNhc2UgRU9wUmFkaWFuczogcHJlU3RyaW5nID0gInJhZGlhbnMoIjsgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wRGVncmVlczogcHJlU3RyaW5nID0gImRlZ3JlZXMoIjsgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wU2luOiBwcmVTdHJpbmcgPSAic2luKCI7IGJyZWFrOworICAg
ICAgICBjYXNlIEVPcENvczogcHJlU3RyaW5nID0gImNvcygiOyBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BUYW46IHByZVN0cmluZyA9ICJ0YW4oIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQXNp
bjogcHJlU3RyaW5nID0gImFzaW4oIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQWNvczogcHJl
U3RyaW5nID0gImFjb3MoIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQXRhbjogcHJlU3RyaW5n
ID0gImF0YW4oIjsgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BFeHA6IHByZVN0cmluZyA9ICJl
eHAoIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9nOiBwcmVTdHJpbmcgPSAibG9nKCI7IGJy
ZWFrOworICAgICAgICBjYXNlIEVPcEV4cDI6IHByZVN0cmluZyA9ICJleHAyKCI7IGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcExvZzI6IHByZVN0cmluZyA9ICJsb2cyKCI7IGJyZWFrOworICAgICAg
ICBjYXNlIEVPcFNxcnQ6IHByZVN0cmluZyA9ICJzcXJ0KCI7IGJyZWFrOworICAgICAgICBjYXNl
IEVPcEludmVyc2VTcXJ0OiBwcmVTdHJpbmcgPSAiaW52ZXJzZXNxcnQoIjsgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBFT3BBYnM6IHByZVN0cmluZyA9ICJhYnMoIjsgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wU2lnbjogcHJlU3RyaW5nID0gInNpZ24oIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
Rmxvb3I6IHByZVN0cmluZyA9ICJmbG9vcigiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDZWls
OiBwcmVTdHJpbmcgPSAiY2VpbCgiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BGcmFjdDogcHJl
U3RyaW5nID0gImZyYWN0KCI7IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wTGVuZ3RoOiBwcmVT
dHJpbmcgPSAibGVuZ3RoKCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcE5vcm1hbGl6ZTogcHJl
U3RyaW5nID0gIm5vcm1hbGl6ZSgiOyBicmVhazsKKworICAgICAgICBjYXNlIEVPcERGZHg6IHBy
ZVN0cmluZyA9ICJkRmR4KCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcERGZHk6IHByZVN0cmlu
ZyA9ICJkRmR5KCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEZ3aWR0aDogcHJlU3RyaW5nID0g
ImZ3aWR0aCgiOyBicmVhazsKKworICAgICAgICBjYXNlIEVPcEFueTogcHJlU3RyaW5nID0gImFu
eSgiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BBbGw6IHByZVN0cmluZyA9ICJhbGwoIjsgYnJl
YWs7CisKKyAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7CisgICAgfQorCisg
ICAgaWYgKHZpc2l0ID09IFByZVZpc2l0ICYmIG5vZGUtPmdldFVzZUVtdWxhdGVkRnVuY3Rpb24o
KSkKKyAgICAgICAgcHJlU3RyaW5nID0gQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OkdldEVtdWxh
dGVkRnVuY3Rpb25OYW1lKHByZVN0cmluZyk7CisgICAgd3JpdGVUcmlwbGV0KHZpc2l0LCBwcmVT
dHJpbmcuY19zdHIoKSwgTlVMTCwgcG9zdFN0cmluZy5jX3N0cigpKTsKKworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlz
aXQsIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0g
b2JqU2luaygpOworCisgICAgaWYgKG5vZGUtPnVzZXNUZXJuYXJ5T3BlcmF0b3IoKSkKKyAgICB7
CisgICAgICAgIC8vIE5vdGljZSB0d28gYnJhY2tldHMgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5k
LiBUaGUgb3V0ZXIgb25lcworICAgICAgICAvLyBlbmNhcHN1bGF0ZSB0aGUgd2hvbGUgdGVybmFy
eSBleHByZXNzaW9uLiBUaGlzIHByZXNlcnZlcyB0aGUKKyAgICAgICAgLy8gb3JkZXIgb2YgcHJl
Y2VkZW5jZSB3aGVuIHRlcm5hcnkgZXhwcmVzc2lvbnMgYXJlIHVzZWQgaW4gYQorICAgICAgICAv
LyBjb21wb3VuZCBleHByZXNzaW9uLCBpLmUuLCBjID0gMiAqIChhIDwgYiA/IDEgOiAyKS4KKyAg
ICAgICAgb3V0IDw8ICIoKCI7CisgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJz
ZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIpID8gKCI7CisgICAgICAgIG5vZGUtPmdldFRydWVC
bG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIpIDogKCI7CisgICAgICAg
IG5vZGUtPmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG91dCA8PCAi
KSkiOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBvdXQgPDwgImlmICgiOworICAg
ICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG91dCA8
PCAiKVxuIjsKKworICAgICAgICBpbmNyZW1lbnREZXB0aChub2RlKTsKKyAgICAgICAgdmlzaXRD
b2RlQmxvY2sobm9kZS0+Z2V0VHJ1ZUJsb2NrKCkpOworCisgICAgICAgIGlmIChub2RlLT5nZXRG
YWxzZUJsb2NrKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZWxzZVxuIjsKKyAg
ICAgICAgICAgIHZpc2l0Q29kZUJsb2NrKG5vZGUtPmdldEZhbHNlQmxvY2soKSk7CisgICAgICAg
IH0KKyAgICAgICAgZGVjcmVtZW50RGVwdGgoKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1BZ2dyZWdhdGUqIG5vZGUpCit7CisgICAgYm9vbCB2aXNpdENoaWxkcmVuID0gdHJ1ZTsK
KyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7CisgICAgVFN0cmluZyBwcmVTdHJp
bmc7CisgICAgYm9vbCBkZWxheWVkV3JpdGUgPSBmYWxzZTsKKyAgICBzd2l0Y2ggKG5vZGUtPmdl
dE9wKCkpCisgICAgeworICAgICAgICBjYXNlIEVPcFNlcXVlbmNlOiB7CisgICAgICAgICAgICAv
LyBTY29wZSB0aGUgc2VxdWVuY2VzIGV4Y2VwdCB3aGVuIGF0IHRoZSBnbG9iYWwgc2NvcGUuCisg
ICAgICAgICAgICBpZiAoZGVwdGggPiAwKSBvdXQgPDwgIntcbiI7CisKKyAgICAgICAgICAgIGlu
Y3JlbWVudERlcHRoKG5vZGUpOworICAgICAgICAgICAgY29uc3QgVEludGVybVNlcXVlbmNlJiBz
ZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAgICBmb3IgKFRJbnRlcm1T
ZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHNlcXVlbmNlLmJlZ2luKCk7CisgICAgICAg
ICAgICAgICAgIGl0ZXIgIT0gc2VxdWVuY2UuZW5kKCk7ICsraXRlcikKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSogbm9kZSA9ICppdGVyOworICAgICAgICAgICAg
ICAgIEFTU0VSVChub2RlICE9IE5VTEwpOworICAgICAgICAgICAgICAgIG5vZGUtPnRyYXZlcnNl
KHRoaXMpOworCisgICAgICAgICAgICAgICAgaWYgKGlzU2luZ2xlU3RhdGVtZW50KG5vZGUpKQor
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIjtcbiI7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBkZWNyZW1lbnREZXB0aCgpOworCisgICAgICAgICAgICAvLyBTY29wZSB0aGUgc2VxdWVu
Y2VzIGV4Y2VwdCB3aGVuIGF0IHRoZSBnbG9iYWwgc2NvcGUuCisgICAgICAgICAgICBpZiAoZGVw
dGggPiAwKSBvdXQgPDwgIn1cbiI7CisgICAgICAgICAgICB2aXNpdENoaWxkcmVuID0gZmFsc2U7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEVPcFByb3RvdHlw
ZTogeworICAgICAgICAgICAgLy8gRnVuY3Rpb24gZGVjbGFyYXRpb24uCisgICAgICAgICAgICBB
U1NFUlQodmlzaXQgPT0gUHJlVmlzaXQpOworICAgICAgICAgICAgd3JpdGVWYXJpYWJsZVR5cGUo
bm9kZS0+Z2V0VHlwZSgpKTsKKyAgICAgICAgICAgIG91dCA8PCAiICIgPDwgaGFzaE5hbWUobm9k
ZS0+Z2V0TmFtZSgpKTsKKworICAgICAgICAgICAgb3V0IDw8ICIoIjsKKyAgICAgICAgICAgIHdy
aXRlRnVuY3Rpb25QYXJhbWV0ZXJzKG5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICAgICAg
b3V0IDw8ICIpIjsKKworICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBFT3BGdW5jdGlvbjogeworICAg
ICAgICAgICAgLy8gRnVuY3Rpb24gZGVmaW5pdGlvbi4KKyAgICAgICAgICAgIEFTU0VSVCh2aXNp
dCA9PSBQcmVWaXNpdCk7CisgICAgICAgICAgICB3cml0ZVZhcmlhYmxlVHlwZShub2RlLT5nZXRU
eXBlKCkpOworICAgICAgICAgICAgb3V0IDw8ICIgIiA8PCBoYXNoRnVuY3Rpb25OYW1lKG5vZGUt
PmdldE5hbWUoKSk7CisKKyAgICAgICAgICAgIGluY3JlbWVudERlcHRoKG5vZGUpOworICAgICAg
ICAgICAgLy8gRnVuY3Rpb24gZGVmaW5pdGlvbiBub2RlIGNvbnRhaW5zIG9uZSBvciB0d28gY2hp
bGRyZW4gbm9kZXMKKyAgICAgICAgICAgIC8vIHJlcHJlc2VudGluZyBmdW5jdGlvbiBwYXJhbWV0
ZXJzIGFuZCBmdW5jdGlvbiBib2R5LiBUaGUgbGF0dGVyCisgICAgICAgICAgICAvLyBpcyBub3Qg
cHJlc2VudCBpbiBjYXNlIG9mIGVtcHR5IGZ1bmN0aW9uIGJvZGllcy4KKyAgICAgICAgICAgIGNv
bnN0IFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOworICAg
ICAgICAgICAgQVNTRVJUKChzZXF1ZW5jZS5zaXplKCkgPT0gMSkgfHwgKHNlcXVlbmNlLnNpemUo
KSA9PSAyKSk7CisgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIHNl
cUl0ZXIgPSBzZXF1ZW5jZS5iZWdpbigpOworCisgICAgICAgICAgICAvLyBUcmF2ZXJzZSBmdW5j
dGlvbiBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSogcGFyYW1zID0g
KCpzZXFJdGVyKS0+Z2V0QXNBZ2dyZWdhdGUoKTsKKyAgICAgICAgICAgIEFTU0VSVChwYXJhbXMg
IT0gTlVMTCk7CisgICAgICAgICAgICBBU1NFUlQocGFyYW1zLT5nZXRPcCgpID09IEVPcFBhcmFt
ZXRlcnMpOworICAgICAgICAgICAgcGFyYW1zLT50cmF2ZXJzZSh0aGlzKTsKKworICAgICAgICAg
ICAgLy8gVHJhdmVyc2UgZnVuY3Rpb24gYm9keS4KKyAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdh
dGUqIGJvZHkgPSArK3NlcUl0ZXIgIT0gc2VxdWVuY2UuZW5kKCkgPworICAgICAgICAgICAgICAg
ICgqc2VxSXRlciktPmdldEFzQWdncmVnYXRlKCkgOiBOVUxMOworICAgICAgICAgICAgdmlzaXRD
b2RlQmxvY2soYm9keSk7CisgICAgICAgICAgICBkZWNyZW1lbnREZXB0aCgpOworIAorICAgICAg
ICAgICAgLy8gRnVsbHkgcHJvY2Vzc2VkOyBubyBuZWVkIHRvIHZpc2l0IGNoaWxkcmVuLgorICAg
ICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBFT3BGdW5jdGlvbkNhbGw6CisgICAgICAgICAgICAvLyBGdW5j
dGlvbiBjYWxsLgorICAgICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG91dCA8PCBoYXNoRnVuY3Rpb25OYW1lKG5vZGUtPmdldE5h
bWUoKSkgPDwgIigiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodmlzaXQg
PT0gSW5WaXNpdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBvdXQgPDwgIikiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wUGFyYW1ldGVyczogeworICAgICAgICAgICAgLy8gRnVuY3Rpb24gcGFy
YW1ldGVycy4KKyAgICAgICAgICAgIEFTU0VSVCh2aXNpdCA9PSBQcmVWaXNpdCk7CisgICAgICAg
ICAgICBvdXQgPDwgIigiOworICAgICAgICAgICAgd3JpdGVGdW5jdGlvblBhcmFtZXRlcnMobm9k
ZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgICAgICBvdXQgPDwgIikiOworICAgICAgICAgICAg
dmlzaXRDaGlsZHJlbiA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBFT3BEZWNsYXJhdGlvbjogeworICAgICAgICAgICAgLy8gVmFyaWFibGUgZGVj
bGFyYXRpb24uCisgICAgICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgY29uc3QgVEludGVybVNlcXVlbmNlJiBzZXF1ZW5jZSA9IG5v
ZGUtPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAgICAgICAgY29uc3QgVEludGVybVR5cGVkKiB2
YXJpYWJsZSA9IHNlcXVlbmNlLmZyb250KCktPmdldEFzVHlwZWQoKTsKKyAgICAgICAgICAgICAg
ICB3cml0ZVZhcmlhYmxlVHlwZSh2YXJpYWJsZS0+Z2V0VHlwZSgpKTsKKyAgICAgICAgICAgICAg
ICBvdXQgPDwgIiAiOworICAgICAgICAgICAgICAgIG1EZWNsYXJpbmdWYXJpYWJsZXMgPSB0cnVl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAgICAgICAgICAg
ICAgICBtRGVjbGFyaW5nVmFyaWFibGVzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGVjbGFyaW5nVmFyaWFi
bGVzID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OiB3cml0ZVRyaXBsZXQodmlzaXQsICJm
bG9hdCgiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMy
OiB3cml0ZVRyaXBsZXQodmlzaXQsICJ2ZWMyKCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAg
ICBjYXNlIEVPcENvbnN0cnVjdFZlYzM6IHdyaXRlVHJpcGxldCh2aXNpdCwgInZlYzMoIiwgIiwg
IiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjNDogd3JpdGVUcmlw
bGV0KHZpc2l0LCAidmVjNCgiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BD
b25zdHJ1Y3RCb29sOiB3cml0ZVRyaXBsZXQodmlzaXQsICJib29sKCIsIE5VTEwsICIpIik7IGJy
ZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMyOiB3cml0ZVRyaXBsZXQodmlzaXQs
ICJidmVjMigiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RC
VmVjMzogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYnZlYzMoIiwgIiwgIiwgIikiKTsgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgImJ2ZWM0
KCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDogd3Jp
dGVUcmlwbGV0KHZpc2l0LCAiaW50KCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNl
IEVPcENvbnN0cnVjdElWZWMyOiB3cml0ZVRyaXBsZXQodmlzaXQsICJpdmVjMigiLCAiLCAiLCAi
KSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMzogd3JpdGVUcmlwbGV0
KHZpc2l0LCAiaXZlYzMoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29u
c3RydWN0SVZlYzQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgIml2ZWM0KCIsICIsICIsICIpIik7IGJy
ZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6IHdyaXRlVHJpcGxldCh2aXNpdCwg
Im1hdDIoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0
Mzogd3JpdGVUcmlwbGV0KHZpc2l0LCAibWF0MygiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQ0OiB3cml0ZVRyaXBsZXQodmlzaXQsICJtYXQ0KCIsICIs
ICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFN0cnVjdDoKKyAgICAg
ICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBjb25zdCBUVHlwZSYgdHlwZSA9IG5vZGUtPmdldFR5cGUoKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpOworICAgICAgICAgICAg
ICAgIG91dCA8PCBoYXNoTmFtZSh0eXBlLmdldFN0cnVjdCgpLT5uYW1lKCkpIDw8ICIoIjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIp
IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9w
TGVzc1RoYW46IHByZVN0cmluZyA9ICJsZXNzVGhhbigiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjogcHJlU3RyaW5nID0gImdyZWF0ZXJU
aGFuKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOworICAgICAgICBjYXNlIEVPcExlc3NU
aGFuRXF1YWw6IHByZVN0cmluZyA9ICJsZXNzVGhhbkVxdWFsKCI7IGRlbGF5ZWRXcml0ZSA9IHRy
dWU7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6IHByZVN0cmluZyA9
ICJncmVhdGVyVGhhbkVxdWFsKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOworICAgICAg
ICBjYXNlIEVPcFZlY3RvckVxdWFsOiBwcmVTdHJpbmcgPSAiZXF1YWwoIjsgZGVsYXllZFdyaXRl
ID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVjdG9yTm90RXF1YWw6IHByZVN0cmlu
ZyA9ICJub3RFcXVhbCgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BDb21tYTogd3JpdGVUcmlwbGV0KHZpc2l0LCBOVUxMLCAiLCAiLCBOVUxMKTsgYnJlYWs7
CisKKyAgICAgICAgY2FzZSBFT3BNb2Q6IHByZVN0cmluZyA9ICJtb2QoIjsgZGVsYXllZFdyaXRl
ID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUG93OiBwcmVTdHJpbmcgPSAicG93KCI7
IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEF0YW46IHByZVN0
cmluZyA9ICJhdGFuKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOworICAgICAgICBjYXNl
IEVPcE1pbjogcHJlU3RyaW5nID0gIm1pbigiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BNYXg6IHByZVN0cmluZyA9ICJtYXgoIjsgZGVsYXllZFdyaXRlID0g
dHJ1ZTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ2xhbXA6IHByZVN0cmluZyA9ICJjbGFtcCgi
OyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNaXg6IHByZVN0
cmluZyA9ICJtaXgoIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wU3RlcDogcHJlU3RyaW5nID0gInN0ZXAoIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wU21vb3RoU3RlcDogcHJlU3RyaW5nID0gInNtb290aHN0ZXAoIjsg
ZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BEaXN0YW5jZTog
cHJlU3RyaW5nID0gImRpc3RhbmNlKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOworICAg
ICAgICBjYXNlIEVPcERvdDogcHJlU3RyaW5nID0gImRvdCgiOyBkZWxheWVkV3JpdGUgPSB0cnVl
OyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDcm9zczogcHJlU3RyaW5nID0gImNyb3NzKCI7IGRl
bGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEZhY2VGb3J3YXJkOiBw
cmVTdHJpbmcgPSAiZmFjZWZvcndhcmQoIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wUmVmbGVjdDogcHJlU3RyaW5nID0gInJlZmxlY3QoIjsgZGVsYXllZFdy
aXRlID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUmVmcmFjdDogcHJlU3RyaW5nID0g
InJlZnJhY3QoIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
TXVsOiBwcmVTdHJpbmcgPSAibWF0cml4Q29tcE11bHQoIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsg
YnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7CisgICAgfQor
ICAgIGlmIChkZWxheWVkV3JpdGUgJiYgdmlzaXQgPT0gUHJlVmlzaXQgJiYgbm9kZS0+Z2V0VXNl
RW11bGF0ZWRGdW5jdGlvbigpKQorICAgICAgICBwcmVTdHJpbmcgPSBCdWlsdEluRnVuY3Rpb25F
bXVsYXRvcjo6R2V0RW11bGF0ZWRGdW5jdGlvbk5hbWUocHJlU3RyaW5nKTsKKyAgICBpZiAoZGVs
YXllZFdyaXRlKQorICAgICAgICB3cml0ZVRyaXBsZXQodmlzaXQsIHByZVN0cmluZy5jX3N0cigp
LCAiLCAiLCAiKSIpOworICAgIHJldHVybiB2aXNpdENoaWxkcmVuOworfQorCitib29sIFRPdXRw
dXRHTFNMQmFzZTo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCogbm9kZSkKK3sK
KyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7CisKKyAgICBpbmNyZW1lbnREZXB0
aChub2RlKTsKKyAgICAvLyBMb29wIGhlYWRlci4KKyAgICBUTG9vcFR5cGUgbG9vcFR5cGUgPSBu
b2RlLT5nZXRUeXBlKCk7CisgICAgaWYgKGxvb3BUeXBlID09IEVMb29wRm9yKSAgLy8gZm9yIGxv
b3AKKyAgICB7CisgICAgICAgIGlmICghbm9kZS0+Z2V0VW5yb2xsRmxhZygpKSB7CisgICAgICAg
ICAgICBvdXQgPDwgImZvciAoIjsKKyAgICAgICAgICAgIGlmIChub2RlLT5nZXRJbml0KCkpCisg
ICAgICAgICAgICAgICAgbm9kZS0+Z2V0SW5pdCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAg
ICAgIG91dCA8PCAiOyAiOworCisgICAgICAgICAgICBpZiAobm9kZS0+Z2V0Q29uZGl0aW9uKCkp
CisgICAgICAgICAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOwor
ICAgICAgICAgICAgb3V0IDw8ICI7ICI7CisKKyAgICAgICAgICAgIGlmIChub2RlLT5nZXRFeHBy
ZXNzaW9uKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Z2V0RXhwcmVzc2lvbigpLT50cmF2ZXJz
ZSh0aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAiKVxuIjsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBlbHNlIGlmIChsb29wVHlwZSA9PSBFTG9vcFdoaWxlKSAgLy8gd2hpbGUgbG9vcAorICAgIHsK
KyAgICAgICAgb3V0IDw8ICJ3aGlsZSAoIjsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmdldENvbmRp
dGlvbigpICE9IE5VTEwpOworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2Uo
dGhpcyk7CisgICAgICAgIG91dCA8PCAiKVxuIjsKKyAgICB9CisgICAgZWxzZSAgLy8gZG8td2hp
bGUgbG9vcAorICAgIHsKKyAgICAgICAgQVNTRVJUKGxvb3BUeXBlID09IEVMb29wRG9XaGlsZSk7
CisgICAgICAgIG91dCA8PCAiZG9cbiI7CisgICAgfQorCisgICAgLy8gTG9vcCBib2R5LgorICAg
IGlmIChub2RlLT5nZXRVbnJvbGxGbGFnKCkpCisgICAgeworICAgICAgICBUTG9vcEluZGV4SW5m
byBpbmRleEluZm87CisgICAgICAgIG1Mb29wVW5yb2xsLkZpbGxMb29wSW5kZXhJbmZvKG5vZGUs
IGluZGV4SW5mbyk7CisgICAgICAgIG1Mb29wVW5yb2xsLlB1c2goaW5kZXhJbmZvKTsKKyAgICAg
ICAgd2hpbGUgKG1Mb29wVW5yb2xsLlNhdGlzZmllc0xvb3BDb25kaXRpb24oKSkKKyAgICAgICAg
eworICAgICAgICAgICAgdmlzaXRDb2RlQmxvY2sobm9kZS0+Z2V0Qm9keSgpKTsKKyAgICAgICAg
ICAgIG1Mb29wVW5yb2xsLlN0ZXAoKTsKKyAgICAgICAgfQorICAgICAgICBtTG9vcFVucm9sbC5Q
b3AoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdmlzaXRDb2RlQmxvY2sobm9k
ZS0+Z2V0Qm9keSgpKTsKKyAgICB9CisKKyAgICAvLyBMb29wIGZvb3Rlci4KKyAgICBpZiAobG9v
cFR5cGUgPT0gRUxvb3BEb1doaWxlKSAgLy8gZG8td2hpbGUgbG9vcAorICAgIHsKKyAgICAgICAg
b3V0IDw8ICJ3aGlsZSAoIjsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmdldENvbmRpdGlvbigpICE9
IE5VTEwpOworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7Cisg
ICAgICAgIG91dCA8PCAiKTtcbiI7CisgICAgfQorICAgIGRlY3JlbWVudERlcHRoKCk7CisKKyAg
ICAvLyBObyBuZWVkIHRvIHZpc2l0IGNoaWxkcmVuLiBUaGV5IGhhdmUgYmVlbiBhbHJlYWR5IHBy
b2Nlc3NlZCBpbgorICAgIC8vIHRoaXMgZnVuY3Rpb24uCisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1C
cmFuY2gqIG5vZGUpCit7CisgICAgc3dpdGNoIChub2RlLT5nZXRGbG93T3AoKSkKKyAgICB7Cisg
ICAgICAgIGNhc2UgRU9wS2lsbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZGlzY2FyZCIsIE5VTEws
IE5VTEwpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BCcmVhazogd3JpdGVUcmlwbGV0KHZpc2l0
LCAiYnJlYWsiLCBOVUxMLCBOVUxMKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udGludWU6
IHdyaXRlVHJpcGxldCh2aXNpdCwgImNvbnRpbnVlIiwgTlVMTCwgTlVMTCk7IGJyZWFrOworICAg
ICAgICBjYXNlIEVPcFJldHVybjogd3JpdGVUcmlwbGV0KHZpc2l0LCAicmV0dXJuICIsIE5VTEws
IE5VTEwpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgVE91dHB1dEdMU0xCYXNlOjp2aXNp
dENvZGVCbG9jayhUSW50ZXJtTm9kZSogbm9kZSkgeworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9
IG9ialNpbmsoKTsKKyAgICBpZiAobm9kZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbm9kZS0+
dHJhdmVyc2UodGhpcyk7CisgICAgICAgIC8vIFNpbmdsZSBzdGF0ZW1lbnRzIG5vdCBwYXJ0IG9m
IGEgc2VxdWVuY2UgbmVlZCB0byBiZSB0ZXJtaW5hdGVkCisgICAgICAgIC8vIHdpdGggc2VtaS1j
b2xvbi4KKyAgICAgICAgaWYgKGlzU2luZ2xlU3RhdGVtZW50KG5vZGUpKQorICAgICAgICAgICAg
b3V0IDw8ICI7XG4iOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBvdXQgPDwgIntc
bn1cbiI7ICAvLyBFbXB0eSBjb2RlIGJsb2NrLgorICAgIH0KK30KKworVFN0cmluZyBUT3V0cHV0
R0xTTEJhc2U6OmdldFR5cGVOYW1lKGNvbnN0IFRUeXBlJiB0eXBlKQoreworICAgIFRJbmZvU2lu
a0Jhc2Ugb3V0OworICAgIGlmICh0eXBlLmlzTWF0cml4KCkpCisgICAgeworICAgICAgICBvdXQg
PDwgIm1hdCI7CisgICAgICAgIG91dCA8PCB0eXBlLmdldE5vbWluYWxTaXplKCk7CisgICAgfQor
ICAgIGVsc2UgaWYgKHR5cGUuaXNWZWN0b3IoKSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlw
ZS5nZXRCYXNpY1R5cGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDog
b3V0IDw8ICJ2ZWMiOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0SW50OiBvdXQgPDwgIml2
ZWMiOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogb3V0IDw8ICJidmVjIjsgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBvdXQgPDwgdHlwZS5nZXROb21pbmFsU2l6ZSgpOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisg
ICAgICAgICAgICBvdXQgPDwgaGFzaE5hbWUodHlwZS5nZXRTdHJ1Y3QoKS0+bmFtZSgpKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgb3V0IDw8IHR5cGUuZ2V0QmFzaWNTdHJpbmcoKTsKKyAg
ICB9CisgICAgcmV0dXJuIFRTdHJpbmcob3V0LmNfc3RyKCkpOworfQorCitUU3RyaW5nIFRPdXRw
dXRHTFNMQmFzZTo6aGFzaE5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobUhh
c2hGdW5jdGlvbiA9PSBOVUxMIHx8IG5hbWUuZW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG5hbWU7
CisgICAgTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtTmFtZU1hcC5maW5kKG5hbWUuY19z
dHIoKSk7CisgICAgaWYgKGl0ICE9IG1OYW1lTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gaXQt
PnNlY29uZC5jX3N0cigpOworICAgIFRTdHJpbmcgaGFzaGVkTmFtZSA9IFRJbnRlcm1UcmF2ZXJz
ZXI6Omhhc2gobmFtZSwgbUhhc2hGdW5jdGlvbik7CisgICAgbU5hbWVNYXBbbmFtZS5jX3N0cigp
XSA9IGhhc2hlZE5hbWUuY19zdHIoKTsKKyAgICByZXR1cm4gaGFzaGVkTmFtZTsKK30KKworVFN0
cmluZyBUT3V0cHV0R0xTTEJhc2U6Omhhc2hWYXJpYWJsZU5hbWUoY29uc3QgVFN0cmluZyYgbmFt
ZSkKK3sKKyAgICBpZiAobVN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKG5hbWUpICE9IE5VTEwpCisg
ICAgICAgIHJldHVybiBuYW1lOworICAgIHJldHVybiBoYXNoTmFtZShuYW1lKTsKK30KKworVFN0
cmluZyBUT3V0cHV0R0xTTEJhc2U6Omhhc2hGdW5jdGlvbk5hbWUoY29uc3QgVFN0cmluZyYgbWFu
Z2xlZF9uYW1lKQoreworICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1l
KG1hbmdsZWRfbmFtZSk7CisgICAgaWYgKG1TeW1ib2xUYWJsZS5maW5kQnVpbHRJbihtYW5nbGVk
X25hbWUpICE9IE5VTEwgfHwgbmFtZSA9PSAibWFpbiIpCisgICAgICAgIHJldHVybiBuYW1lOwor
ICAgIHJldHVybiBoYXNoTmFtZShuYW1lKTsKK30KKworYm9vbCBUT3V0cHV0R0xTTEJhc2U6OnN0
cnVjdERlY2xhcmVkKGNvbnN0IFRTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbURlY2xhcmVkU3RydWN0cy5maW5kKHN0cnVjdHVyZS0+bmFtZSgpKSAhPSBtRGVjbGFy
ZWRTdHJ1Y3RzLmVuZCgpOworfQorCit2b2lkIFRPdXRwdXRHTFNMQmFzZTo6ZGVjbGFyZVN0cnVj
dChjb25zdCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0
ID0gb2JqU2luaygpOworCisgICAgb3V0IDw8ICJzdHJ1Y3QgIiA8PCBoYXNoTmFtZShzdHJ1Y3R1
cmUtPm5hbWUoKSkgPDwgIntcbiI7CisgICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRzID0gc3Ry
dWN0dXJlLT5maWVsZHMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpZWxkcy5zaXpl
KCk7ICsraSkKKyAgICB7CisgICAgICAgIGNvbnN0IFRGaWVsZCogZmllbGQgPSBmaWVsZHNbaV07
CisgICAgICAgIGlmICh3cml0ZVZhcmlhYmxlUHJlY2lzaW9uKGZpZWxkLT50eXBlKCktPmdldFBy
ZWNpc2lvbigpKSkKKyAgICAgICAgICAgIG91dCA8PCAiICI7CisgICAgICAgIG91dCA8PCBnZXRU
eXBlTmFtZSgqZmllbGQtPnR5cGUoKSkgPDwgIiAiIDw8IGhhc2hOYW1lKGZpZWxkLT5uYW1lKCkp
OworICAgICAgICBpZiAoZmllbGQtPnR5cGUoKS0+aXNBcnJheSgpKQorICAgICAgICAgICAgb3V0
IDw8IGFycmF5QnJhY2tldHMoKmZpZWxkLT50eXBlKCkpOworICAgICAgICBvdXQgPDwgIjtcbiI7
CisgICAgfQorICAgIG91dCA8PCAifSI7CisKKyAgICBtRGVjbGFyZWRTdHJ1Y3RzLmluc2VydChz
dHJ1Y3R1cmUtPm5hbWUoKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMQmFzZS5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43NmJlYzRkZTYxZTA0MWFjMThkYWVmMTIwZmVkYzNmZGJjZDlkOTgzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvT3V0cHV0R0xTTEJhc2UuaApAQCAtMCwwICsxLDc5IEBACisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaWZuZGVmIENST1NTQ09NUElMRVJHTFNMX09VVFBVVEdMU0xCQVNFX0hfCisjZGVmaW5lIENS
T1NTQ09NUElMRVJHTFNMX09VVFBVVEdMU0xCQVNFX0hfCisKKyNpbmNsdWRlIDxzZXQ+CisKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCisKK2NsYXNzIFRPdXRwdXRHTFNMQmFzZSA6IHB1Ymxp
YyBUSW50ZXJtVHJhdmVyc2VyCit7CitwdWJsaWM6CisgICAgVE91dHB1dEdMU0xCYXNlKFRJbmZv
U2lua0Jhc2UmIG9ialNpbmssCisgICAgICAgICAgICAgICAgICAgIFNoQXJyYXlJbmRleENsYW1w
aW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJhdGVneSwKKyAgICAgICAgICAgICAgICAgICAgU2hIYXNo
RnVuY3Rpb242NCBoYXNoRnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5h
bWVNYXAsCisgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpOwor
Citwcm90ZWN0ZWQ6CisgICAgVEluZm9TaW5rQmFzZSYgb2JqU2luaygpIHsgcmV0dXJuIG1PYmpT
aW5rOyB9CisgICAgdm9pZCB3cml0ZVRyaXBsZXQoVmlzaXQgdmlzaXQsIGNvbnN0IGNoYXIqIHBy
ZVN0ciwgY29uc3QgY2hhciogaW5TdHIsIGNvbnN0IGNoYXIqIHBvc3RTdHIpOworICAgIHZvaWQg
d3JpdGVWYXJpYWJsZVR5cGUoY29uc3QgVFR5cGUmIHR5cGUpOworICAgIHZpcnR1YWwgYm9vbCB3
cml0ZVZhcmlhYmxlUHJlY2lzaW9uKFRQcmVjaXNpb24gcHJlY2lzaW9uKSA9IDA7CisgICAgdm9p
ZCB3cml0ZUZ1bmN0aW9uUGFyYW1ldGVycyhjb25zdCBUSW50ZXJtU2VxdWVuY2UmIGFyZ3MpOwor
ICAgIGNvbnN0IENvbnN0YW50VW5pb24qIHdyaXRlQ29uc3RhbnRVbmlvbihjb25zdCBUVHlwZSYg
dHlwZSwgY29uc3QgQ29uc3RhbnRVbmlvbiogcENvbnN0VW5pb24pOworICAgIFRTdHJpbmcgZ2V0
VHlwZU5hbWUoY29uc3QgVFR5cGUmIHR5cGUpOworCisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3lt
Ym9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdENvbnN0YW50
VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qIG5vZGUpOworICAgIHZpcnR1YWwgYm9vbCB2aXNp
dEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSogbm9kZSk7CisgICAgdmlydHVhbCBi
b29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSogbm9kZSk7CisgICAgdmly
dHVhbCBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBu
b2RlKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRl
cm1BZ2dyZWdhdGUqIG5vZGUpOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlz
aXQsIFRJbnRlcm1Mb29wKiBub2RlKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCcmFuY2goVmlz
aXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqIG5vZGUpOworCisgICAgdm9pZCB2aXNpdENvZGVCbG9j
ayhUSW50ZXJtTm9kZSogbm9kZSk7CisKKworICAgIC8vIFJldHVybiB0aGUgb3JpZ2luYWwgbmFt
ZSBpZiBoYXNoIGZ1bmN0aW9uIHBvaW50ZXIgaXMgTlVMTDsKKyAgICAvLyBvdGhlcndpc2UgcmV0
dXJuIHRoZSBoYXNoZWQgbmFtZS4KKyAgICBUU3RyaW5nIGhhc2hOYW1lKGNvbnN0IFRTdHJpbmcm
IG5hbWUpOworICAgIC8vIFNhbWUgYXMgaGFzaE5hbWUoKSwgYnV0IHdpdGhvdXQgaGFzaGluZyBi
dWlsdC1pbiB2YXJpYWJsZXMuCisgICAgVFN0cmluZyBoYXNoVmFyaWFibGVOYW1lKGNvbnN0IFRT
dHJpbmcmIG5hbWUpOworICAgIC8vIFNhbWUgYXMgaGFzaE5hbWUoKSwgYnV0IHdpdGhvdXQgaGFz
aGluZyBidWlsdC1pbiBmdW5jdGlvbnMuCisgICAgVFN0cmluZyBoYXNoRnVuY3Rpb25OYW1lKGNv
bnN0IFRTdHJpbmcmIG1hbmdsZWRfbmFtZSk7CisKK3ByaXZhdGU6CisgICAgYm9vbCBzdHJ1Y3RE
ZWNsYXJlZChjb25zdCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0OworICAgIHZvaWQgZGVj
bGFyZVN0cnVjdChjb25zdCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUpOworCisgICAgVEluZm9TaW5r
QmFzZSYgbU9ialNpbms7CisgICAgYm9vbCBtRGVjbGFyaW5nVmFyaWFibGVzOworCisgICAgLy8g
U3RydWN0cyBhcmUgZGVjbGFyZWQgYXMgdGhlIHRyZWUgaXMgdHJhdmVyc2VkLiBUaGlzIHNldCBj
b250YWlucyBhbGwKKyAgICAvLyB0aGUgc3RydWN0cyBhbHJlYWR5IGRlY2xhcmVkLiBJdCBpcyBt
YWludGFpbmVkIHNvIHRoYXQgYSBzdHJ1Y3QgaXMKKyAgICAvLyBkZWNsYXJlZCBvbmx5IG9uY2Uu
CisgICAgdHlwZWRlZiBzdGQ6OnNldDxUU3RyaW5nPiBEZWNsYXJlZFN0cnVjdHM7CisgICAgRGVj
bGFyZWRTdHJ1Y3RzIG1EZWNsYXJlZFN0cnVjdHM7CisKKyAgICBGb3JMb29wVW5yb2xsIG1Mb29w
VW5yb2xsOworCisgICAgU2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBtQ2xhbXBpbmdTdHJh
dGVneTsKKworICAgIC8vIG5hbWUgaGFzaGluZy4KKyAgICBTaEhhc2hGdW5jdGlvbjY0IG1IYXNo
RnVuY3Rpb247CisKKyAgICBOYW1lTWFwJiBtTmFtZU1hcDsKKworICAgIFRTeW1ib2xUYWJsZSYg
bVN5bWJvbFRhYmxlOworfTsKKworI2VuZGlmICAvLyBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRH
TFNMQkFTRV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvT3V0cHV0SExTTC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRITFNMLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZjk5NmRm
NzE5ZmM0ZmFmZjhhMGE1MjBjYzdlODNhOGMyZDdhNzc5Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0SExTTC5j
cHAKQEAgLTAsMCArMSwzMTM4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9PdXRwdXRITFNMLmgiCisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1
dGlscy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvY29tcGlsZXJkZWJ1Zy5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0RGlzY29udGludWl0eS5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1NlYXJjaFN5bWJvbC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvVW5mb2xkU2hvcnRDaXJjdWl0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9O
b2RlU2VhcmNoLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9SZXdyaXRlRWxzZUJs
b2Nrcy5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNmbG9hdD4KKyNpbmNs
dWRlIDxzdGRpby5oPgorCituYW1lc3BhY2Ugc2gKK3sKKworT3V0cHV0SExTTDo6T3V0cHV0SExT
TChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291
cmNlcywgU2hTaGFkZXJPdXRwdXQgb3V0cHV0VHlwZSkKKyAgICA6IFRJbnRlcm1UcmF2ZXJzZXIo
dHJ1ZSwgdHJ1ZSwgdHJ1ZSksIG1Db250ZXh0KGNvbnRleHQpLCBtT3V0cHV0VHlwZShvdXRwdXRU
eXBlKQoreworICAgIG1VbmZvbGRTaG9ydENpcmN1aXQgPSBuZXcgVW5mb2xkU2hvcnRDaXJjdWl0
KGNvbnRleHQsIHRoaXMpOworICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNlOworCisgICAgbVVz
ZXNUZXh0dXJlMkQgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmUyRF9iaWFzID0gZmFsc2U7Cisg
ICAgbVVzZXNUZXh0dXJlMkRQcm9qID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRQcm9qX2Jp
YXMgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QgPSBmYWxzZTsKKyAgICBtVXNl
c1RleHR1cmUyRExvZCA9IGZhbHNlOworICAgIG1Vc2VzVGV4dHVyZUN1YmUgPSBmYWxzZTsKKyAg
ICBtVXNlc1RleHR1cmVDdWJlX2JpYXMgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmVDdWJlTG9k
ID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRMb2QwID0gZmFsc2U7CisgICAgbVVzZXNUZXh0
dXJlMkRMb2QwX2JpYXMgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QwID0gZmFs
c2U7CisgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzID0gZmFsc2U7CisgICAgbVVzZXNU
ZXh0dXJlQ3ViZUxvZDAgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzID0g
ZmFsc2U7CisgICAgbVVzZXNGcmFnQ29sb3IgPSBmYWxzZTsKKyAgICBtVXNlc0ZyYWdEYXRhID0g
ZmFsc2U7CisgICAgbVVzZXNEZXB0aFJhbmdlID0gZmFsc2U7CisgICAgbVVzZXNGcmFnQ29vcmQg
PSBmYWxzZTsKKyAgICBtVXNlc1BvaW50Q29vcmQgPSBmYWxzZTsKKyAgICBtVXNlc0Zyb250RmFj
aW5nID0gZmFsc2U7CisgICAgbVVzZXNQb2ludFNpemUgPSBmYWxzZTsKKyAgICBtVXNlc0ZyYWdE
ZXB0aCA9IGZhbHNlOworICAgIG1Vc2VzWG9yID0gZmFsc2U7CisgICAgbVVzZXNNb2QxID0gZmFs
c2U7CisgICAgbVVzZXNNb2QydiA9IGZhbHNlOworICAgIG1Vc2VzTW9kMmYgPSBmYWxzZTsKKyAg
ICBtVXNlc01vZDN2ID0gZmFsc2U7CisgICAgbVVzZXNNb2QzZiA9IGZhbHNlOworICAgIG1Vc2Vz
TW9kNHYgPSBmYWxzZTsKKyAgICBtVXNlc01vZDRmID0gZmFsc2U7CisgICAgbVVzZXNGYWNlZm9y
d2FyZDEgPSBmYWxzZTsKKyAgICBtVXNlc0ZhY2Vmb3J3YXJkMiA9IGZhbHNlOworICAgIG1Vc2Vz
RmFjZWZvcndhcmQzID0gZmFsc2U7CisgICAgbVVzZXNGYWNlZm9yd2FyZDQgPSBmYWxzZTsKKyAg
ICBtVXNlc0F0YW4yXzEgPSBmYWxzZTsKKyAgICBtVXNlc0F0YW4yXzIgPSBmYWxzZTsKKyAgICBt
VXNlc0F0YW4yXzMgPSBmYWxzZTsKKyAgICBtVXNlc0F0YW4yXzQgPSBmYWxzZTsKKyAgICBtVXNl
c0Rpc2NhcmRSZXdyaXRpbmcgPSBmYWxzZTsKKworICAgIG1OdW1SZW5kZXJUYXJnZXRzID0gcmVz
b3VyY2VzLkVYVF9kcmF3X2J1ZmZlcnMgPyByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgOiAxOwor
CisgICAgbVNjb3BlRGVwdGggPSAwOworCisgICAgbVVuaXF1ZUluZGV4ID0gMDsKKworICAgIG1D
b250YWluc0xvb3BEaXNjb250aW51aXR5ID0gZmFsc2U7CisgICAgbU91dHB1dExvZDBGdW5jdGlv
biA9IGZhbHNlOworICAgIG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCA9IGZhbHNlOworCisgICAg
bUV4Y2Vzc2l2ZUxvb3BJbmRleCA9IE5VTEw7CisKKyAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hf
SExTTDlfT1VUUFVUKQorICAgIHsKKyAgICAgICAgaWYgKG1Db250ZXh0LnNoYWRlclR5cGUgPT0g
U0hfRlJBR01FTlRfU0hBREVSKQorICAgICAgICB7CisgICAgICAgICAgICBtVW5pZm9ybVJlZ2lz
dGVyID0gMzsgICAvLyBSZXNlcnZlIHJlZ2lzdGVycyBmb3IgZHhfRGVwdGhSYW5nZSwgZHhfVmll
d0Nvb3JkcyBhbmQgZHhfRGVwdGhGcm9udAorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgbVVuaWZvcm1SZWdpc3RlciA9IDI7ICAgLy8gUmVzZXJ2ZSByZWdp
c3RlcnMgZm9yIGR4X0RlcHRoUmFuZ2UgYW5kIGR4X1ZpZXdBZGp1c3QKKyAgICAgICAgfQorICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtVW5pZm9ybVJlZ2lzdGVyID0gMDsKKyAgICB9
CisKKyAgICBtU2FtcGxlclJlZ2lzdGVyID0gMDsKK30KKworT3V0cHV0SExTTDo6fk91dHB1dEhM
U0woKQoreworICAgIGRlbGV0ZSBtVW5mb2xkU2hvcnRDaXJjdWl0OworfQorCit2b2lkIE91dHB1
dEhMU0w6Om91dHB1dCgpCit7CisgICAgbUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkgPSBtQ29u
dGV4dC5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUiAmJiBjb250YWluc0xvb3BEaXNj
b250aW51aXR5KG1Db250ZXh0LnRyZWVSb290KTsKKworICAgIC8vIFdvcmsgYXJvdW5kIEQzRDkg
YnVnIHRoYXQgd291bGQgbWFuaWZlc3QgaW4gdmVydGV4IHNoYWRlcnMgd2l0aCBzZWxlY3Rpb24g
YmxvY2tzIHdoaWNoCisgICAgLy8gdXNlIGEgdmVydGV4IGF0dHJpYnV0ZSBhcyBhIGNvbmRpdGlv
biwgYW5kIHNvbWUgcmVsYXRlZCBjb21wdXRhdGlvbiBpbiB0aGUgZWxzZSBibG9jay4KKyAgICBp
ZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUICYmIG1Db250ZXh0LnNoYWRlclR5cGUg
PT0gU0hfVkVSVEVYX1NIQURFUikKKyAgICB7CisgICAgICAgIFJld3JpdGVFbHNlQmxvY2tzKG1D
b250ZXh0LnRyZWVSb290KTsKKyAgICB9CisKKyAgICBtQ29udGV4dC50cmVlUm9vdC0+dHJhdmVy
c2UodGhpcyk7ICAgLy8gT3V0cHV0IHRoZSBib2R5IGZpcnN0IHRvIGRldGVybWluZSB3aGF0IGhh
cyB0byBnbyBpbiB0aGUgaGVhZGVyCisgICAgaGVhZGVyKCk7CisKKyAgICBtQ29udGV4dC5pbmZv
U2luaygpLm9iaiA8PCBtSGVhZGVyLmNfc3RyKCk7CisgICAgbUNvbnRleHQuaW5mb1NpbmsoKS5v
YmogPDwgbUJvZHkuY19zdHIoKTsKK30KKworVEluZm9TaW5rQmFzZSAmT3V0cHV0SExTTDo6Z2V0
Qm9keVN0cmVhbSgpCit7CisgICAgcmV0dXJuIG1Cb2R5OworfQorCitjb25zdCBBY3RpdmVVbmlm
b3JtcyAmT3V0cHV0SExTTDo6Z2V0VW5pZm9ybXMoKQoreworICAgIHJldHVybiBtQWN0aXZlVW5p
Zm9ybXM7Cit9CisKK2ludCBPdXRwdXRITFNMOjp2ZWN0b3JTaXplKGNvbnN0IFRUeXBlICZ0eXBl
KSBjb25zdAoreworICAgIGludCBlbGVtZW50U2l6ZSA9IHR5cGUuaXNNYXRyaXgoKSA/IHR5cGUu
Z2V0Tm9taW5hbFNpemUoKSA6IDE7CisgICAgaW50IGFycmF5U2l6ZSA9IHR5cGUuaXNBcnJheSgp
ID8gdHlwZS5nZXRBcnJheVNpemUoKSA6IDE7CisKKyAgICByZXR1cm4gZWxlbWVudFNpemUgKiBh
cnJheVNpemU7Cit9CisKK3ZvaWQgT3V0cHV0SExTTDo6aGVhZGVyKCkKK3sKKyAgICBTaFNoYWRl
clR5cGUgc2hhZGVyVHlwZSA9IG1Db250ZXh0LnNoYWRlclR5cGU7CisgICAgVEluZm9TaW5rQmFz
ZSAmb3V0ID0gbUhlYWRlcjsKKworICAgIGZvciAoU3RydWN0RGVjbGFyYXRpb25zOjppdGVyYXRv
ciBzdHJ1Y3REZWNsYXJhdGlvbiA9IG1TdHJ1Y3REZWNsYXJhdGlvbnMuYmVnaW4oKTsgc3RydWN0
RGVjbGFyYXRpb24gIT0gbVN0cnVjdERlY2xhcmF0aW9ucy5lbmQoKTsgc3RydWN0RGVjbGFyYXRp
b24rKykKKyAgICB7CisgICAgICAgIG91dCA8PCAqc3RydWN0RGVjbGFyYXRpb247CisgICAgfQor
CisgICAgZm9yIChDb25zdHJ1Y3RvcnM6Oml0ZXJhdG9yIGNvbnN0cnVjdG9yID0gbUNvbnN0cnVj
dG9ycy5iZWdpbigpOyBjb25zdHJ1Y3RvciAhPSBtQ29uc3RydWN0b3JzLmVuZCgpOyBjb25zdHJ1
Y3RvcisrKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICpjb25zdHJ1Y3RvcjsKKyAgICB9CisKKyAg
ICBUU3RyaW5nIHVuaWZvcm1zOworICAgIFRTdHJpbmcgdmFyeWluZ3M7CisgICAgVFN0cmluZyBh
dHRyaWJ1dGVzOworCisgICAgZm9yIChSZWZlcmVuY2VkU3ltYm9sczo6Y29uc3RfaXRlcmF0b3Ig
dW5pZm9ybSA9IG1SZWZlcmVuY2VkVW5pZm9ybXMuYmVnaW4oKTsgdW5pZm9ybSAhPSBtUmVmZXJl
bmNlZFVuaWZvcm1zLmVuZCgpOyB1bmlmb3JtKyspCisgICAgeworICAgICAgICBjb25zdCBUVHlw
ZSAmdHlwZSA9IHVuaWZvcm0tPnNlY29uZC0+Z2V0VHlwZSgpOworICAgICAgICBjb25zdCBUU3Ry
aW5nICZuYW1lID0gdW5pZm9ybS0+c2Vjb25kLT5nZXRTeW1ib2woKTsKKworICAgICAgICBpZiAo
bU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCAmJiBJc1NhbXBsZXIodHlwZS5nZXRCYXNp
Y1R5cGUoKSkpICAgLy8gQWxzbyBkZWNsYXJlIHRoZSB0ZXh0dXJlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGludCBpbmRleCA9IHNhbXBsZXJSZWdpc3RlcihtUmVmZXJlbmNlZFVuaWZvcm1zW25h
bWVdKTsKKworICAgICAgICAgICAgdW5pZm9ybXMgKz0gInVuaWZvcm0gU2FtcGxlclN0YXRlIHNh
bXBsZXJfIiArIGRlY29yYXRlVW5pZm9ybShuYW1lLCB0eXBlKSArIGFycmF5U3RyaW5nKHR5cGUp
ICsgCisgICAgICAgICAgICAgICAgICAgICAgICAiIDogcmVnaXN0ZXIocyIgKyBzdHIoaW5kZXgp
ICsgIik7XG4iOworCisgICAgICAgICAgICB1bmlmb3JtcyArPSAidW5pZm9ybSAiICsgdGV4dHVy
ZVN0cmluZyh0eXBlKSArICIgdGV4dHVyZV8iICsgZGVjb3JhdGVVbmlmb3JtKG5hbWUsIHR5cGUp
ICsgYXJyYXlTdHJpbmcodHlwZSkgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICIgOiByZWdp
c3Rlcih0IiArIHN0cihpbmRleCkgKyAiKTtcbiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICB1bmlmb3JtcyArPSAidW5pZm9ybSAiICsgdHlwZVN0cmlu
Zyh0eXBlKSArICIgIiArIGRlY29yYXRlVW5pZm9ybShuYW1lLCB0eXBlKSArIGFycmF5U3RyaW5n
KHR5cGUpICsgCisgICAgICAgICAgICAgICAgICAgICAgICAiIDogcmVnaXN0ZXIoIiArIHJlZ2lz
dGVyU3RyaW5nKG1SZWZlcmVuY2VkVW5pZm9ybXNbbmFtZV0pICsgIik7XG4iOworICAgICAgICB9
CisgICAgfQorCisgICAgZm9yIChSZWZlcmVuY2VkU3ltYm9sczo6Y29uc3RfaXRlcmF0b3IgdmFy
eWluZyA9IG1SZWZlcmVuY2VkVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBtUmVmZXJlbmNl
ZFZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCisgICAgeworICAgICAgICBjb25zdCBUVHlwZSAm
dHlwZSA9IHZhcnlpbmctPnNlY29uZC0+Z2V0VHlwZSgpOworICAgICAgICBjb25zdCBUU3RyaW5n
ICZuYW1lID0gdmFyeWluZy0+c2Vjb25kLT5nZXRTeW1ib2woKTsKKworICAgICAgICAvLyBQcm9n
cmFtIGxpbmtpbmcgZGVwZW5kcyBvbiB0aGlzIGV4YWN0IGZvcm1hdAorICAgICAgICB2YXJ5aW5n
cyArPSAic3RhdGljICIgKyB0eXBlU3RyaW5nKHR5cGUpICsgIiAiICsgZGVjb3JhdGUobmFtZSkg
KyBhcnJheVN0cmluZyh0eXBlKSArICIgPSAiICsgaW5pdGlhbGl6ZXIodHlwZSkgKyAiO1xuIjsK
KyAgICB9CisKKyAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpjb25zdF9pdGVyYXRvciBhdHRy
aWJ1dGUgPSBtUmVmZXJlbmNlZEF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1SZWZl
cmVuY2VkQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgeworICAgICAgICBjb25z
dCBUVHlwZSAmdHlwZSA9IGF0dHJpYnV0ZS0+c2Vjb25kLT5nZXRUeXBlKCk7CisgICAgICAgIGNv
bnN0IFRTdHJpbmcgJm5hbWUgPSBhdHRyaWJ1dGUtPnNlY29uZC0+Z2V0U3ltYm9sKCk7CisKKyAg
ICAgICAgYXR0cmlidXRlcyArPSAic3RhdGljICIgKyB0eXBlU3RyaW5nKHR5cGUpICsgIiAiICsg
ZGVjb3JhdGUobmFtZSkgKyBhcnJheVN0cmluZyh0eXBlKSArICIgPSAiICsgaW5pdGlhbGl6ZXIo
dHlwZSkgKyAiO1xuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNEaXNjYXJkUmV3cml0aW5nKQor
ICAgIHsKKyAgICAgICAgb3V0IDw8ICIjZGVmaW5lIEFOR0xFX1VTRVNfRElTQ0FSRF9SRVdSSVRJ
TkciIDw8ICJcbiI7CisgICAgfQorCisgICAgaWYgKHNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRf
U0hBREVSKQorICAgIHsKKyAgICAgICAgVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRv
ciBpdGVyID0gbUNvbnRleHQuZXh0ZW5zaW9uQmVoYXZpb3IoKS5maW5kKCJHTF9FWFRfZHJhd19i
dWZmZXJzIik7CisgICAgICAgIGNvbnN0IGJvb2wgdXNpbmdNUlRFeHRlbnNpb24gPSAoaXRlciAh
PSBtQ29udGV4dC5leHRlbnNpb25CZWhhdmlvcigpLmVuZCgpICYmIChpdGVyLT5zZWNvbmQgPT0g
RUJoRW5hYmxlIHx8IGl0ZXItPnNlY29uZCA9PSBFQmhSZXF1aXJlKSk7CisKKyAgICAgICAgY29u
c3QgdW5zaWduZWQgaW50IG51bUNvbG9yVmFsdWVzID0gdXNpbmdNUlRFeHRlbnNpb24gPyBtTnVt
UmVuZGVyVGFyZ2V0cyA6IDE7CisKKyAgICAgICAgb3V0IDw8ICIvLyBWYXJ5aW5nc1xuIjsKKyAg
ICAgICAgb3V0IDw8ICB2YXJ5aW5nczsKKyAgICAgICAgb3V0IDw8ICJcbiIKKyAgICAgICAgICAg
ICAgICJzdGF0aWMgZmxvYXQ0IGdsX0NvbG9yWyIgPDwgbnVtQ29sb3JWYWx1ZXMgPDwgIl0gPVxu
IgorICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgbnVtQ29sb3JWYWx1ZXM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8
ICIgICAgZmxvYXQ0KDAsIDAsIDAsIDApIjsKKyAgICAgICAgICAgIGlmIChpICsgMSAhPSBudW1D
b2xvclZhbHVlcykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiwiOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0IDw8ICJcbiI7CisgICAgICAgIH0KKyAgICAg
ICAgb3V0IDw8ICJ9O1xuIjsKKworICAgICAgICBpZiAobVVzZXNGcmFnRGVwdGgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGZsb2F0IGdsX0RlcHRoID0gMC4wO1xuIjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc0ZyYWdDb29yZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgb3V0IDw8ICJzdGF0aWMgZmxvYXQ0IGdsX0ZyYWdDb29yZCA9IGZsb2F0NCgwLCAw
LCAwLCAwKTtcbiI7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNQb2ludENvb3JkKQor
ICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgInN0YXRpYyBmbG9hdDIgZ2xfUG9pbnRDb29y
ZCA9IGZsb2F0MigwLjUsIDAuNSk7XG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2Vz
RnJvbnRGYWNpbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGJvb2wg
Z2xfRnJvbnRGYWNpbmcgPSBmYWxzZTtcbiI7CisgICAgICAgIH0KKworICAgICAgICBvdXQgPDwg
IlxuIjsKKworICAgICAgICBpZiAobVVzZXNEZXB0aFJhbmdlKQorICAgICAgICB7CisgICAgICAg
ICAgICBvdXQgPDwgInN0cnVjdCBnbF9EZXB0aFJhbmdlUGFyYW1ldGVyc1xuIgorICAgICAgICAg
ICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBuZWFyO1xuIgor
ICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZmFyO1xuIgorICAgICAgICAgICAgICAgICAg
ICIgICAgZmxvYXQgZGlmZjtcbiIKKyAgICAgICAgICAgICAgICAgICAifTtcbiIKKyAgICAgICAg
ICAgICAgICAgICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09
IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiY2J1ZmZl
ciBEcml2ZXJDb25zdGFudHMgOiByZWdpc3RlcihiMSlcbiIKKyAgICAgICAgICAgICAgICAgICAi
e1xuIjsKKworICAgICAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdDMgZHhfRGVwdGhSYW5nZSA6IHBhY2tv
ZmZzZXQoYzApO1xuIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG1Vc2VzRnJh
Z0Nvb3JkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0
NCBkeF9WaWV3Q29vcmRzIDogcGFja29mZnNldChjMSk7XG4iOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAobVVzZXNGcmFnQ29vcmQgfHwgbVVzZXNGcm9udEZhY2luZykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdDMgZHhfRGVwdGhGcm9u
dCA6IHBhY2tvZmZzZXQoYzIpO1xuIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgb3V0
IDw8ICJ9O1xuIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChtVXNlc0RlcHRoUmFuZ2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
b3V0IDw8ICJ1bmlmb3JtIGZsb2F0MyBkeF9EZXB0aFJhbmdlIDogcmVnaXN0ZXIoYzApOyI7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtVXNlc0ZyYWdDb29yZCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgInVuaWZvcm0gZmxvYXQ0IGR4X1ZpZXdDb29y
ZHMgOiByZWdpc3RlcihjMSk7XG4iOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
bVVzZXNGcmFnQ29vcmQgfHwgbVVzZXNGcm9udEZhY2luZykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBvdXQgPDwgInVuaWZvcm0gZmxvYXQzIGR4X0RlcHRoRnJvbnQgOiByZWdpc3Rl
cihjMik7XG4iOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgb3V0IDw8ICJc
biI7CisKKyAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgb3V0IDw8ICJzdGF0aWMgZ2xfRGVwdGhSYW5nZVBhcmFtZXRlcnMgZ2xfRGVwdGhSYW5nZSA9
IHtkeF9EZXB0aFJhbmdlLngsIGR4X0RlcHRoUmFuZ2UueSwgZHhfRGVwdGhSYW5nZS56fTtcbiIK
KyAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBv
dXQgPDwgIHVuaWZvcm1zOworICAgICAgICBvdXQgPDwgIlxuIjsKKworICAgICAgICBpZiAobVVz
ZXNUZXh0dXJlMkQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBT
SF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJm
bG9hdDQgZ2xfdGV4dHVyZTJEKHNhbXBsZXIyRCBzLCBmbG9hdDIgdClcbiIKKyAgICAgICAgICAg
ICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4
MkQocywgdCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtT3V0
cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRl
IHMsIGZsb2F0MiB1dilcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGUocywgdXYpO1xuIgorICAgICAgICAg
ICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEX2JpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKHNhbXBsZXIyRCBzLCBmbG9hdDIg
dCwgZmxvYXQgYmlhcylcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRiaWFzKHMsIGZsb2F0NCh0LngsIHQueSwg
MCwgYmlhcykpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAg
ICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobU91
dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0
ZSBzLCBmbG9hdDIgdXYsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlQmlhcyhzLCB1
diwgYmlhcyk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRQcm9qKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUy
RFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0MyB0KVxuIgorICAgICAgICAgICAgICAgICAgICAgICAi
e1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRHByb2oocywgZmxv
YXQ0KHQueCwgdC55LCAwLCB0LnopKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICAgICAiZmxv
YXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxuIgorICAgICAgICAg
ICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0
ZXgyRHByb2oocywgdCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAg
ICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlm
IChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVyZTJEIHQsIFNh
bXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3KVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xu
IgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZShzLCBmbG9hdDIo
dXZ3LnggLyB1dncueiwgdXZ3LnkgLyB1dncueikpO1xuIgorICAgICAgICAgICAgICAgICAgICAg
ICAifVxuIgorICAgICAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAg
ICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMs
IGZsb2F0NCB1dncpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAg
ICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlKHMsIGZsb2F0Mih1dncueCAvIHV2dy53
LCB1dncueSAvIHV2dy53KSk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRQ
cm9qX2JpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9I
TFNMOV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9h
dDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4i
CisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIg
ICAgcmV0dXJuIHRleDJEYmlhcyhzLCBmbG9hdDQodC54IC8gdC56LCB0LnkgLyB0LnosIDAsIGJp
YXMpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFBy
b2ooc2FtcGxlcjJEIHMsIGZsb2F0NCB0LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAg
ICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJp
YXMocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53LCAwLCBiaWFzKSk7XG4iCisgICAgICAg
ICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFf
T1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGds
X3RleHR1cmUyRFByb2ooVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3LCBm
bG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAg
ICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUJpYXMocywgZmxvYXQyKHV2dy54IC8gdXZ3
LnosIHV2dy55IC8gdXZ3LnopLCBiaWFzKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1c
biIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICAgICAi
ZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9h
dDQgdXZ3LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAg
ICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUJpYXMocywgZmxvYXQyKHV2
dy54IC8gdXZ3LncsIHV2dy55IC8gdXZ3LncpLCBiaWFzKTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChtVXNlc1RleHR1cmVDdWJlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobU91dHB1dFR5
cGUgPT0gU0hfSExTTDlfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91
dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0KVxuIgor
ICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0ZXhDVUJFKHMsIHQpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIgor
ICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShUZXh0dXJlQ3Vi
ZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dylcbiIKKyAgICAgICAgICAgICAgICAgICAg
ICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGUocywg
dXZ3KTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmVDdWJlX2JpYXMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1
YmUoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENV
QkViaWFzKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCBiaWFzKSk7XG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVU
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1
cmVDdWJlKFRleHR1cmVDdWJlIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3LCBmbG9hdCBi
aWFzKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0LlNhbXBsZUJpYXMocywgdXZ3LCBiaWFzKTtcbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIFRoZXNlICpMb2QwIGludHJpbnNpY3MgYXJlIG5vdCBhdmFpbGFibGUgaW4gR0wg
ZnJhZ21lbnQgc2hhZGVycy4KKyAgICAgICAgLy8gVGhleSBhcmUgdXNlZCB0byBzYW1wbGUgdXNp
bmcgZGlzY29udGludW91cyB0ZXh0dXJlIGNvb3JkaW5hdGVzLgorICAgICAgICBpZiAobVVzZXNU
ZXh0dXJlMkRMb2QwKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0g
U0hfSExTTDlfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAi
ZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoc2FtcGxlcjJEIHMsIGZsb2F0MiB0KVxuIgorICAgICAg
ICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVy
biB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCB0LnksIDAsIDApKTtcbiIKKyAgICAgICAgICAgICAg
ICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVy
ZTJETG9kMChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MiB1dilcbiIKKyAgICAg
ICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdC5TYW1wbGVMZXZlbChzLCB1diwgMCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNU
ZXh0dXJlMkRMb2QwX2JpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtT3V0cHV0VHlw
ZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0
IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kMChzYW1wbGVyMkQgcywgZmxvYXQyIHQsIGZsb2F0
IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgMCkpO1xu
IgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICAgICAi
XG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0g
U0hfSExTTDExX09VVFBVVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwg
ImZsb2F0NCBnbF90ZXh0dXJlMkRMb2QwKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxv
YXQyIHV2LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAg
ICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIHV2LCAwKTtc
biIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAg
IlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pMb2QwKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pM
b2QwKHNhbXBsZXIyRCBzLCBmbG9hdDMgdClcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIntc
biIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0
KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgICAg
ICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAg
ICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBzLCBmbG9hdDQgdClcbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAg
ICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53LCAwLCAwKSk7
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAg
ICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9
PSBTSF9ITFNMMTFfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8
PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUg
cywgZmxvYXQzIHV2dylcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIodXZ3Lngg
LyB1dncueiwgdXZ3LnkgLyB1dncueiksIDApO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAi
fVxuIgorICAgICAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAgICAg
ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZDAoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBz
LCBmbG9hdDQgdXZ3KVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAg
ICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAv
IHV2dy53LCB1dncueSAvIHV2dy53KSwgMCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNU
ZXh0dXJlMkRQcm9qTG9kMF9iaWFzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobU91dHB1
dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwX2JpYXMoc2FtcGxlcjJEIHMsIGZs
b2F0MyB0LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAg
ICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8g
dC56LCB0LnkgLyB0LnosIDAsIDApKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICAgICAiZmxv
YXQ0IGdsX3RleHR1cmUyRFByb2pMb2RfYmlhcyhzYW1wbGVyMkQgcywgZmxvYXQ0IHQsIGZsb2F0
IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAvIHQu
dywgMCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAg
ICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobU91
dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kX2JpYXMoVGV4dHVyZTJEIHQs
IFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAg
ICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNh
bXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy56LCB1dncueSAvIHV2dy56KSwgMCk7XG4i
CisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJc
biIKKyAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kX2Jp
YXMoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3LCBmbG9hdCBiaWFzKVxu
IgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAi
ICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy53LCB1dncueSAv
IHV2dy53KSwgMCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAg
ICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZUxvZDAp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQ
VVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4
dHVyZUN1YmVMb2QwKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0KVxuIgorICAgICAgICAgICAgICAg
ICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJF
bG9kKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAg
ICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJl
TG9kMChUZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dylcbiIKKyAgICAg
ICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdC5TYW1wbGVMZXZlbChzLCB1dncsIDApO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAi
fVxuIgorICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2Vz
VGV4dHVyZUN1YmVMb2QwX2JpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtT3V0cHV0
VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
b3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmVMb2QwKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0
LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAg
ICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFbG9kKHMsIGZsb2F0NCh0LngsIHQueSwg
dC56LCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtT3V0
cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChUZXh0dXJlQ3ViZSB0LCBTYW1w
bGVyU3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQgYmlhcylcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVM
ZXZlbChzLCB1dncsIDApO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAg
ICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBV
TlJFQUNIQUJMRSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzaW5nTVJURXh0ZW5zaW9u
ICYmIG1OdW1SZW5kZXJUYXJnZXRzID4gMSkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8
ICIjZGVmaW5lIEdMX1VTRVNfTVJUXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2Vz
RnJhZ0NvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIiNkZWZpbmUgR0xfVVNF
U19GUkFHX0NPTE9SXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzRnJhZ0RhdGEp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX0ZSQUdfREFU
QVxuIjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlICAgLy8gVmVydGV4IHNoYWRlcgorICAg
IHsKKyAgICAgICAgb3V0IDw8ICIvLyBBdHRyaWJ1dGVzXG4iOworICAgICAgICBvdXQgPDwgIGF0
dHJpYnV0ZXM7CisgICAgICAgIG91dCA8PCAiXG4iCisgICAgICAgICAgICAgICAic3RhdGljIGZs
b2F0NCBnbF9Qb3NpdGlvbiA9IGZsb2F0NCgwLCAwLCAwLCAwKTtcbiI7CisgICAgICAgIAorICAg
ICAgICBpZiAobVVzZXNQb2ludFNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAi
c3RhdGljIGZsb2F0IGdsX1BvaW50U2l6ZSA9IGZsb2F0KDEpO1xuIjsKKyAgICAgICAgfQorCisg
ICAgICAgIG91dCA8PCAiXG4iCisgICAgICAgICAgICAgICAiLy8gVmFyeWluZ3NcbiI7CisgICAg
ICAgIG91dCA8PCAgdmFyeWluZ3M7CisgICAgICAgIG91dCA8PCAiXG4iOworCisgICAgICAgIGlm
IChtVXNlc0RlcHRoUmFuZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAic3RydWN0
IGdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJzXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAg
ICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IG5lYXI7XG4iCisgICAgICAgICAgICAgICAgICAg
IiAgICBmbG9hdCBmYXI7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBkaWZmO1xu
IgorICAgICAgICAgICAgICAgICAgICJ9O1xuIgorICAgICAgICAgICAgICAgICAgICJcbiI7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgImNidWZmZXIgRHJpdmVyQ29uc3RhbnRzIDogcmVn
aXN0ZXIoYjEpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICIgICAgZmxvYXQzIGR4X0RlcHRoUmFuZ2UgOiBwYWNrb2Zmc2V0KGMwKTtcbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgIn07XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJc
biI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAobVVzZXNEZXB0aFJhbmdlKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG91dCA8PCAidW5pZm9ybSBmbG9hdDMgZHhfRGVwdGhSYW5nZSA6IHJlZ2lzdGVyKGMw
KTtcbiI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dCA8PCAidW5pZm9ybSBmbG9h
dDQgZHhfVmlld0FkanVzdCA6IHJlZ2lzdGVyKGMxKTtcbiIKKyAgICAgICAgICAgICAgICAgICAi
XG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkKKyAgICAgICAg
eworICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgZ2xfRGVwdGhSYW5nZVBhcmFtZXRlcnMgZ2xf
RGVwdGhSYW5nZSA9IHtkeF9EZXB0aFJhbmdlLngsIGR4X0RlcHRoUmFuZ2UueSwgZHhfRGVwdGhS
YW5nZS56fTtcbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CisKKyAgICAg
ICAgb3V0IDw8IHVuaWZvcm1zOworICAgICAgICBvdXQgPDwgIlxuIjsKKyAgICAgICAgCisgICAg
ICAgIGlmIChtVXNlc1RleHR1cmUyRCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1PdXRw
dXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoc2FtcGxlcjJEIHMsIGZsb2F0MiB0KVxuIgor
ICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCB0LnksIDAsIDApKTtcbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9P
VVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xf
dGV4dHVyZTJEKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2KVxuIgorICAg
ICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0LlNhbXBsZUxldmVsKHMsIHV2LCAwKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAg
In1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNl
c1RleHR1cmUyRExvZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09
IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwg
ImZsb2F0NCBnbF90ZXh0dXJlMkRMb2Qoc2FtcGxlcjJEIHMsIGZsb2F0MiB0LCBmbG9hdCBsb2Qp
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgbG9kKSk7XG4iCisg
ICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9I
TFNMMTFfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxv
YXQ0IGdsX3RleHR1cmUyRExvZChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MiB1
diwgZmxvYXQgbG9kKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAg
ICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIHV2LCBsb2QpO1xuIgor
ICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICAgICAiXG4i
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJvaikKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIy
RCBzLCBmbG9hdDMgdClcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQueiwg
dC55IC8gdC56LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBn
bF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDQgdClcbiIKKyAgICAgICAgICAgICAg
ICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRs
b2QocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53LCAwLCAwKSk7XG4iCisgICAgICAgICAg
ICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VU
UFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3Rl
eHR1cmUyRFByb2ooVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3KVxuIgor
ICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy56LCB1dncueSAvIHV2
dy56KSwgMCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJl
MkRQcm9qKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQ0IHV2dylcbiIKKyAgICAg
ICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIodXZ3LnggLyB1dncudywgdXZ3LnkgLyB1dncudyks
IDApO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAg
ICAgICAiXG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJvakxvZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQ
cm9qTG9kKHNhbXBsZXIyRCBzLCBmbG9hdDMgdCwgZmxvYXQgbG9kKVxuIgorICAgICAgICAgICAg
ICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgy
RGxvZChzLCBmbG9hdDQodC54IC8gdC56LCB0LnkgLyB0LnosIDAsIGxvZCkpO1xuIgorICAgICAg
ICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICAgICAiXG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZChzYW1wbGVyMkQg
cywgZmxvYXQ0IHQsIGZsb2F0IGxvZClcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIntcbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQu
eCAvIHQudywgdC55IC8gdC53LCAwLCBsb2QpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAg
In1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxv
ZChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncsIGZsb2F0IGxvZClcbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAg
ICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIodXZ3LnggLyB1dncueiwgdXZ3LnkgLyB1
dncueiksIGxvZCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAg
ICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0
dXJlMkRQcm9qTG9kKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQ0IHV2dywgZmxv
YXQgbG9kKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy53
LCB1dncueSAvIHV2dy53KSwgbG9kKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1
cmVDdWJlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExT
TDlfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0
IGdsX3RleHR1cmVDdWJlKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0KVxuIgorICAgICAgICAgICAg
ICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhD
VUJFbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCAwKSk7XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVD
dWJlKFRleHR1cmVDdWJlIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3KVxuIgorICAgICAg
ICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVy
biB0LlNhbXBsZUxldmVsKHMsIHV2dywgMCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNU
ZXh0dXJlQ3ViZUxvZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09
IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwg
ImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxvZChzYW1wbGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxvYXQg
bG9kKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0ZXhDVUJFbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCBsb2Qp
KTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAg
ICAgIlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBl
ID09IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0
IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmVMb2QoVGV4dHVyZUN1YmUgdCwgU2FtcGxlclN0YXRl
IHMsIGZsb2F0MyB1dncsIGZsb2F0IGxvZClcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIntc
biIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1
dncsIGxvZCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobVVzZXNGcmFnQ29vcmQpCisgICAg
eworICAgICAgICBvdXQgPDwgIiNkZWZpbmUgR0xfVVNFU19GUkFHX0NPT1JEXG4iOworICAgIH0K
KworICAgIGlmIChtVXNlc1BvaW50Q29vcmQpCisgICAgeworICAgICAgICBvdXQgPDwgIiNkZWZp
bmUgR0xfVVNFU19QT0lOVF9DT09SRFxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNGcm9udEZh
Y2luZykKKyAgICB7CisgICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX0ZST05UX0ZBQ0lO
R1xuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNQb2ludFNpemUpCisgICAgeworICAgICAgICBv
dXQgPDwgIiNkZWZpbmUgR0xfVVNFU19QT0lOVF9TSVpFXG4iOworICAgIH0KKworICAgIGlmICht
VXNlc0ZyYWdEZXB0aCkKKyAgICB7CisgICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX0ZS
QUdfREVQVEhcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkKKyAgICB7Cisg
ICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX0RFUFRIX1JBTkdFXG4iOworICAgIH0KKwor
ICAgIGlmIChtVXNlc1hvcikKKyAgICB7CisgICAgICAgIG91dCA8PCAiYm9vbCB4b3IoYm9vbCBw
LCBib29sIHEpXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gKHAgfHwgcSkgJiYgIShwICYmIHEpO1xuIgorICAgICAgICAgICAgICAgIn1cbiIKKyAg
ICAgICAgICAgICAgICJcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzTW9kMSkKKyAgICB7Cisg
ICAgICAgIG91dCA8PCAiZmxvYXQgbW9kKGZsb2F0IHgsIGZsb2F0IHkpXG4iCisgICAgICAgICAg
ICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4geCAtIHkgKiBmbG9vcih4IC8g
eSk7XG4iCisgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgIlxuIjsKKyAgICB9
CisKKyAgICBpZiAobVVzZXNNb2QydikKKyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQyIG1v
ZChmbG9hdDIgeCwgZmxvYXQyIHkpXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4geCAtIHkgKiBmbG9vcih4IC8geSk7XG4iCisgICAgICAgICAgICAg
ICAifVxuIgorICAgICAgICAgICAgICAgIlxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNNb2Qy
ZikKKyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQyIG1vZChmbG9hdDIgeCwgZmxvYXQgeSlc
biIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIHJldHVybiB4IC0g
eSAqIGZsb29yKHggLyB5KTtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAg
ICAiXG4iOworICAgIH0KKyAgICAKKyAgICBpZiAobVVzZXNNb2QzdikKKyAgICB7CisgICAgICAg
IG91dCA8PCAiZmxvYXQzIG1vZChmbG9hdDMgeCwgZmxvYXQzIHkpXG4iCisgICAgICAgICAgICAg
ICAie1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4geCAtIHkgKiBmbG9vcih4IC8geSk7
XG4iCisgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgIlxuIjsKKyAgICB9CisK
KyAgICBpZiAobVVzZXNNb2QzZikKKyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQzIG1vZChm
bG9hdDMgeCwgZmxvYXQgeSlcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAg
ICAiICAgIHJldHVybiB4IC0geSAqIGZsb29yKHggLyB5KTtcbiIKKyAgICAgICAgICAgICAgICJ9
XG4iCisgICAgICAgICAgICAgICAiXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc01vZDR2KQor
ICAgIHsKKyAgICAgICAgb3V0IDw8ICJmbG9hdDQgbW9kKGZsb2F0NCB4LCBmbG9hdDQgeSlcbiIK
KyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIHJldHVybiB4IC0geSAq
IGZsb29yKHggLyB5KTtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAi
XG4iOworICAgIH0KKworICAgIGlmIChtVXNlc01vZDRmKQorICAgIHsKKyAgICAgICAgb3V0IDw8
ICJmbG9hdDQgbW9kKGZsb2F0NCB4LCBmbG9hdCB5KVxuIgorICAgICAgICAgICAgICAgIntcbiIK
KyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHggLSB5ICogZmxvb3IoeCAvIHkpO1xuIgorICAg
ICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICJcbiI7CisgICAgfQorCisgICAgaWYg
KG1Vc2VzRmFjZWZvcndhcmQxKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJmbG9hdCBmYWNlZm9y
d2FyZChmbG9hdCBOLCBmbG9hdCBJLCBmbG9hdCBOcmVmKVxuIgorICAgICAgICAgICAgICAgIntc
biIKKyAgICAgICAgICAgICAgICIgICAgaWYoZG90KE5yZWYsIEkpID49IDApXG4iCisgICAgICAg
ICAgICAgICAiICAgIHtcbiIKKyAgICAgICAgICAgICAgICIgICAgICAgIHJldHVybiAtTjtcbiIK
KyAgICAgICAgICAgICAgICIgICAgfVxuIgorICAgICAgICAgICAgICAgIiAgICBlbHNlXG4iCisg
ICAgICAgICAgICAgICAiICAgIHtcbiIKKyAgICAgICAgICAgICAgICIgICAgICAgIHJldHVybiBO
O1xuIgorICAgICAgICAgICAgICAgIiAgICB9XG4iCisgICAgICAgICAgICAgICAifVxuIgorICAg
ICAgICAgICAgICAgIlxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNGYWNlZm9yd2FyZDIpCisg
ICAgeworICAgICAgICBvdXQgPDwgImZsb2F0MiBmYWNlZm9yd2FyZChmbG9hdDIgTiwgZmxvYXQy
IEksIGZsb2F0MiBOcmVmKVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAg
ICIgICAgaWYoZG90KE5yZWYsIEkpID49IDApXG4iCisgICAgICAgICAgICAgICAiICAgIHtcbiIK
KyAgICAgICAgICAgICAgICIgICAgICAgIHJldHVybiAtTjtcbiIKKyAgICAgICAgICAgICAgICIg
ICAgfVxuIgorICAgICAgICAgICAgICAgIiAgICBlbHNlXG4iCisgICAgICAgICAgICAgICAiICAg
IHtcbiIKKyAgICAgICAgICAgICAgICIgICAgICAgIHJldHVybiBOO1xuIgorICAgICAgICAgICAg
ICAgIiAgICB9XG4iCisgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgIlxuIjsK
KyAgICB9CisKKyAgICBpZiAobVVzZXNGYWNlZm9yd2FyZDMpCisgICAgeworICAgICAgICBvdXQg
PDwgImZsb2F0MyBmYWNlZm9yd2FyZChmbG9hdDMgTiwgZmxvYXQzIEksIGZsb2F0MyBOcmVmKVxu
IgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgaWYoZG90KE5yZWYs
IEkpID49IDApXG4iCisgICAgICAgICAgICAgICAiICAgIHtcbiIKKyAgICAgICAgICAgICAgICIg
ICAgICAgIHJldHVybiAtTjtcbiIKKyAgICAgICAgICAgICAgICIgICAgfVxuIgorICAgICAgICAg
ICAgICAgIiAgICBlbHNlXG4iCisgICAgICAgICAgICAgICAiICAgIHtcbiIKKyAgICAgICAgICAg
ICAgICIgICAgICAgIHJldHVybiBOO1xuIgorICAgICAgICAgICAgICAgIiAgICB9XG4iCisgICAg
ICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgIlxuIjsKKyAgICB9CisKKyAgICBpZiAo
bVVzZXNGYWNlZm9yd2FyZDQpCisgICAgeworICAgICAgICBvdXQgPDwgImZsb2F0NCBmYWNlZm9y
d2FyZChmbG9hdDQgTiwgZmxvYXQ0IEksIGZsb2F0NCBOcmVmKVxuIgorICAgICAgICAgICAgICAg
IntcbiIKKyAgICAgICAgICAgICAgICIgICAgaWYoZG90KE5yZWYsIEkpID49IDApXG4iCisgICAg
ICAgICAgICAgICAiICAgIHtcbiIKKyAgICAgICAgICAgICAgICIgICAgICAgIHJldHVybiAtTjtc
biIKKyAgICAgICAgICAgICAgICIgICAgfVxuIgorICAgICAgICAgICAgICAgIiAgICBlbHNlXG4i
CisgICAgICAgICAgICAgICAiICAgIHtcbiIKKyAgICAgICAgICAgICAgICIgICAgICAgIHJldHVy
biBOO1xuIgorICAgICAgICAgICAgICAgIiAgICB9XG4iCisgICAgICAgICAgICAgICAifVxuIgor
ICAgICAgICAgICAgICAgIlxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNBdGFuMl8xKQorICAg
IHsKKyAgICAgICAgb3V0IDw8ICJmbG9hdCBhdGFueXgoZmxvYXQgeSwgZmxvYXQgeClcbiIKKyAg
ICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIGlmKHggPT0gMCAmJiB5ID09
IDApIHggPSAxO1xuIiAgIC8vIEF2b2lkIHByb2R1Y2luZyBhIE5hTgorICAgICAgICAgICAgICAg
IiAgICByZXR1cm4gYXRhbjIoeSwgeCk7XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9
CisKKyAgICBpZiAobVVzZXNBdGFuMl8yKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJmbG9hdDIg
YXRhbnl4KGZsb2F0MiB5LCBmbG9hdDIgeClcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAg
ICAgICAgICAgICAiICAgIGlmKHhbMF0gPT0gMCAmJiB5WzBdID09IDApIHhbMF0gPSAxO1xuIgor
ICAgICAgICAgICAgICAgIiAgICBpZih4WzFdID09IDAgJiYgeVsxXSA9PSAwKSB4WzFdID0gMTtc
biIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIGZsb2F0MihhdGFuMih5WzBdLCB4WzBdKSwg
YXRhbjIoeVsxXSwgeFsxXSkpO1xuIgorICAgICAgICAgICAgICAgIn1cbiI7CisgICAgfQorCisg
ICAgaWYgKG1Vc2VzQXRhbjJfMykKKyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQzIGF0YW55
eChmbG9hdDMgeSwgZmxvYXQzIHgpXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAg
ICAgICAgIiAgICBpZih4WzBdID09IDAgJiYgeVswXSA9PSAwKSB4WzBdID0gMTtcbiIKKyAgICAg
ICAgICAgICAgICIgICAgaWYoeFsxXSA9PSAwICYmIHlbMV0gPT0gMCkgeFsxXSA9IDE7XG4iCisg
ICAgICAgICAgICAgICAiICAgIGlmKHhbMl0gPT0gMCAmJiB5WzJdID09IDApIHhbMl0gPSAxO1xu
IgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4gZmxvYXQzKGF0YW4yKHlbMF0sIHhbMF0pLCBh
dGFuMih5WzFdLCB4WzFdKSwgYXRhbjIoeVsyXSwgeFsyXSkpO1xuIgorICAgICAgICAgICAgICAg
In1cbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzQXRhbjJfNCkKKyAgICB7CisgICAgICAgIG91
dCA8PCAiZmxvYXQ0IGF0YW55eChmbG9hdDQgeSwgZmxvYXQ0IHgpXG4iCisgICAgICAgICAgICAg
ICAie1xuIgorICAgICAgICAgICAgICAgIiAgICBpZih4WzBdID09IDAgJiYgeVswXSA9PSAwKSB4
WzBdID0gMTtcbiIKKyAgICAgICAgICAgICAgICIgICAgaWYoeFsxXSA9PSAwICYmIHlbMV0gPT0g
MCkgeFsxXSA9IDE7XG4iCisgICAgICAgICAgICAgICAiICAgIGlmKHhbMl0gPT0gMCAmJiB5WzJd
ID09IDApIHhbMl0gPSAxO1xuIgorICAgICAgICAgICAgICAgIiAgICBpZih4WzNdID09IDAgJiYg
eVszXSA9PSAwKSB4WzNdID0gMTtcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIGZsb2F0
NChhdGFuMih5WzBdLCB4WzBdKSwgYXRhbjIoeVsxXSwgeFsxXSksIGF0YW4yKHlbMl0sIHhbMl0p
LCBhdGFuMih5WzNdLCB4WzNdKSk7XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9Cit9
CisKK3ZvaWQgT3V0cHV0SExTTDo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqbm9kZSkKK3sK
KyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKKworICAgIFRTdHJpbmcgbmFtZSA9IG5v
ZGUtPmdldFN5bWJvbCgpOworCisgICAgaWYgKG5hbWUgPT0gImdsX0ZyYWdDb2xvciIpCisgICAg
eworICAgICAgICBvdXQgPDwgImdsX0NvbG9yWzBdIjsKKyAgICAgICAgbVVzZXNGcmFnQ29sb3Ig
PSB0cnVlOworICAgIH0KKyAgICBlbHNlIGlmIChuYW1lID09ICJnbF9GcmFnRGF0YSIpCisgICAg
eworICAgICAgICBvdXQgPDwgImdsX0NvbG9yIjsKKyAgICAgICAgbVVzZXNGcmFnRGF0YSA9IHRy
dWU7CisgICAgfQorICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX0RlcHRoUmFuZ2UiKQorICAgIHsK
KyAgICAgICAgbVVzZXNEZXB0aFJhbmdlID0gdHJ1ZTsKKyAgICAgICAgb3V0IDw8IG5hbWU7Cisg
ICAgfQorICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX0ZyYWdDb29yZCIpCisgICAgeworICAgICAg
ICBtVXNlc0ZyYWdDb29yZCA9IHRydWU7CisgICAgICAgIG91dCA8PCBuYW1lOworICAgIH0KKyAg
ICBlbHNlIGlmIChuYW1lID09ICJnbF9Qb2ludENvb3JkIikKKyAgICB7CisgICAgICAgIG1Vc2Vz
UG9pbnRDb29yZCA9IHRydWU7CisgICAgICAgIG91dCA8PCBuYW1lOworICAgIH0KKyAgICBlbHNl
IGlmIChuYW1lID09ICJnbF9Gcm9udEZhY2luZyIpCisgICAgeworICAgICAgICBtVXNlc0Zyb250
RmFjaW5nID0gdHJ1ZTsKKyAgICAgICAgb3V0IDw8IG5hbWU7CisgICAgfQorICAgIGVsc2UgaWYg
KG5hbWUgPT0gImdsX1BvaW50U2l6ZSIpCisgICAgeworICAgICAgICBtVXNlc1BvaW50U2l6ZSA9
IHRydWU7CisgICAgICAgIG91dCA8PCBuYW1lOworICAgIH0KKyAgICBlbHNlIGlmIChuYW1lID09
ICJnbF9GcmFnRGVwdGhFWFQiKQorICAgIHsKKyAgICAgICAgbVVzZXNGcmFnRGVwdGggPSB0cnVl
OworICAgICAgICBvdXQgPDwgImdsX0RlcHRoIjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBub2RlLT5nZXRRdWFsaWZpZXIoKTsKKworICAg
ICAgICBpZiAocXVhbGlmaWVyID09IEV2cVVuaWZvcm0pCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1SZWZlcmVuY2VkVW5pZm9ybXNbbmFtZV0gPSBub2RlOworICAgICAgICAgICAgb3V0IDw8IGRl
Y29yYXRlVW5pZm9ybShuYW1lLCBub2RlLT5nZXRUeXBlKCkpOworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1SZWZlcmVuY2VkQXR0cmlidXRlc1tuYW1lXSA9IG5vZGU7CisgICAgICAgICAgICBvdXQg
PDwgZGVjb3JhdGUobmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocXVhbGlmaWVy
ID09IEV2cVZhcnlpbmdPdXQgfHwgcXVhbGlmaWVyID09IEV2cUludmFyaWFudFZhcnlpbmdPdXQg
fHwgcXVhbGlmaWVyID09IEV2cVZhcnlpbmdJbiB8fCBxdWFsaWZpZXIgPT0gRXZxSW52YXJpYW50
VmFyeWluZ0luKQorICAgICAgICB7CisgICAgICAgICAgICBtUmVmZXJlbmNlZFZhcnlpbmdzW25h
bWVdID0gbm9kZTsKKyAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxSW50ZXJuYWwpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG91dCA8PCBuYW1lOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgb3V0IDw8IGRlY29yYXRlKG5hbWUpOworICAgICAgICB9CisgICAg
fQorfQorCitib29sIE91dHB1dEhMU0w6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJt
QmluYXJ5ICpub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OworCisgICAg
c3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wQXNzaWduOiAgICAg
ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA9ICIsICIpIik7ICAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wSW5pdGlhbGl6ZToKKyAgICAgICAgaWYgKHZpc2l0
ID09IFByZVZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBHTFNMIGFsbG93cyB0byB3
cml0ZSB0aGluZ3MgbGlrZSAiZmxvYXQgeCA9IHg7IiB3aGVyZSBhIG5ldyB2YXJpYWJsZSB4IGlz
IGRlZmluZWQKKyAgICAgICAgICAgIC8vIGFuZCB0aGUgdmFsdWUgb2YgYW4gZXhpc3RpbmcgdmFy
aWFibGUgeCBpcyBhc3NpZ25lZC4gSExTTCB1c2VzIEMgc2VtYW50aWNzICh0aGUKKyAgICAgICAg
ICAgIC8vIG5ldyB2YXJpYWJsZSBpcyBjcmVhdGVkIGJlZm9yZSB0aGUgYXNzaWdubWVudCBpcyBl
dmFsdWF0ZWQpLCBzbyB3ZSBuZWVkIHRvIGNvbnZlcnQKKyAgICAgICAgICAgIC8vIHRoaXMgdG8g
ImZsb2F0IHQgPSB4LCB4ID0gdDsiLgorCisgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1i
b2xOb2RlID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICAgICAgICAg
IFRJbnRlcm1UeXBlZCAqZXhwcmVzc2lvbiA9IG5vZGUtPmdldFJpZ2h0KCk7CisKKyAgICAgICAg
ICAgIHNoOjpTZWFyY2hTeW1ib2wgc2VhcmNoU3ltYm9sKHN5bWJvbE5vZGUtPmdldFN5bWJvbCgp
KTsKKyAgICAgICAgICAgIGV4cHJlc3Npb24tPnRyYXZlcnNlKCZzZWFyY2hTeW1ib2wpOworICAg
ICAgICAgICAgYm9vbCBzYW1lU3ltYm9sID0gc2VhcmNoU3ltYm9sLmZvdW5kTWF0Y2goKTsKKwor
ICAgICAgICAgICAgaWYgKHNhbWVTeW1ib2wpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgLy8gVHlwZSBhbHJlYWR5IHByaW50ZWQKKyAgICAgICAgICAgICAgICBvdXQgPDwgInQiICsg
c3RyKG1VbmlxdWVJbmRleCkgKyAiID0gIjsKKyAgICAgICAgICAgICAgICBleHByZXNzaW9uLT50
cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAgICAgICAgICAg
ICAgICBzeW1ib2xOb2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICBvdXQgPDwg
IiA9IHQiICsgc3RyKG1VbmlxdWVJbmRleCk7CisKKyAgICAgICAgICAgICAgICBtVW5pcXVlSW5k
ZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAgICAgeworICAg
ICAgICAgICAgb3V0IDw8ICIgPSAiOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFT3BBZGRBc3NpZ246ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigi
LCAiICs9ICIsICIpIik7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BTdWJBc3NpZ246
ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIC09ICIsICIpIik7ICAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BNdWxBc3NpZ246ICAgICAgICAgICAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICo9ICIsICIpIik7ICAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjogb3V0cHV0VHJpcGxldCh2aXNpdCwg
IigiLCAiICo9ICIsICIpIik7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BNYXRyaXhU
aW1lc1NjYWxhckFzc2lnbjogb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICo9ICIsICIpIik7
ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjoK
KyAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBv
dXQgPDwgIigiOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiID0gbXVsKCI7CisgICAgICAgICAgICBu
b2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICIsIHRy
YW5zcG9zZSgiOyAgIAorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg
ICAgICAgb3V0IDw8ICIpKSkiOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjoKKyAgICAgICAgaWYgKHZpc2l0ID09IFByZVZp
c2l0KQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIigiOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91
dCA8PCAiID0gbXVsKCI7CisgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRo
aXMpOworICAgICAgICAgICAgb3V0IDw8ICIsICI7ICAgCisgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIikpIjsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wRGl2QXNzaWduOiAgICAgICAgICAgICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICIoIiwgIiAvPSAiLCAiKSIpOyAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRU9wSW5kZXhEaXJlY3Q6ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIiLCAi
WyIsICJdIik7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wSW5kZXhJbmRpcmVj
dDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIiLCAiWyIsICJdIik7ICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CisgICAgICAgIGlm
ICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsK
KyAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1Db25zdGFudFVuaW9uKiBpbmRleCA9IG5vZGUtPmdl
dFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAgICAgICAgICAgY29uc3QgVEZpZWxk
KiBmaWVsZCA9IHN0cnVjdHVyZS0+ZmllbGRzKClbaW5kZXgtPmdldElDb25zdCgwKV07CisgICAg
ICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3JhdGVGaWVsZChmaWVsZC0+bmFtZSgpLCBub2RlLT5n
ZXRMZWZ0KCktPmdldFR5cGUoKSk7CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wVmVjdG9yU3dpenpsZToKKyAgICAg
ICAgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAi
LiI7CisKKyAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUgKnN3aXp6bGUgPSBub2RlLT5nZXRS
aWdodCgpLT5nZXRBc0FnZ3JlZ2F0ZSgpOworCisgICAgICAgICAgICBpZiAoc3dpenpsZSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJnNlcXVlbmNlID0g
c3dpenpsZS0+Z2V0U2VxdWVuY2UoKTsKKworICAgICAgICAgICAgICAgIGZvciAoVEludGVybVNl
cXVlbmNlOjppdGVyYXRvciBzaXQgPSBzZXF1ZW5jZS5iZWdpbigpOyBzaXQgIT0gc2VxdWVuY2Uu
ZW5kKCk7IHNpdCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVElu
dGVybUNvbnN0YW50VW5pb24gKmVsZW1lbnQgPSAoKnNpdCktPmdldEFzQ29uc3RhbnRVbmlvbigp
OworCisgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50KQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaSA9IGVsZW1lbnQtPmdldElDb25zdCgw
KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiBvdXQgPDwgIngiOyBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogb3V0IDw8ICJ5IjsgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IG91dCA8PCAieiI7IGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvdXQgPDwgInciOyBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxz
ZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAg
IC8vIEZ1bGx5IHByb2Nlc3NlZAorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BBZGQ6ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICsgIiwg
IikiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcFN1YjogICAgICAgICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiKCIsICIgLSAiLCAiKSIpOyBicmVhazsKKyAgICAgIGNhc2UgRU9wTXVsOiAg
ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAqICIsICIpIik7IGJyZWFr
OworICAgICAgY2FzZSBFT3BEaXY6ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
IigiLCAiIC8gIiwgIikiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcEVxdWFsOgorICAgICAgY2Fz
ZSBFT3BOb3RFcXVhbDoKKyAgICAgICAgaWYgKG5vZGUtPmdldExlZnQoKS0+aXNTY2FsYXIoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9wRXF1YWwpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAi
ID09ICIsICIpIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICE9ICIsICIp
Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0
TGVmdCgpLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChub2RlLT5nZXRPcCgpID09IEVPcEVxdWFsKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIG91dCA8PCAiKCI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIhKCI7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IG5vZGUtPmdldExlZnQo
KS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKKworICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgY29uc3QgVEZpZWxkICpmaWVsZCA9IGZpZWxkc1tpXTsKKworICAgICAgICAg
ICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAg
b3V0IDw8ICIuIiArIGRlY29yYXRlRmllbGQoZmllbGQtPm5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgp
LT5nZXRUeXBlKCkpICsgIiA9PSAiOworICAgICAgICAgICAgICAgIG5vZGUtPmdldFJpZ2h0KCkt
PnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZp
ZWxkKGZpZWxkLT5uYW1lKCksIG5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpKTsKKworICAgICAg
ICAgICAgICAgIGlmIChpIDwgZmllbGRzLnNpemUoKSAtIDEpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAmJiAiOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgb3V0IDw8ICIpIjsKKworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKG5vZGUtPmdldExlZnQoKS0+aXNNYXRyaXgoKSB8fCBub2RlLT5nZXRMZWZ0KCkt
PmlzVmVjdG9yKCkpOworCisgICAgICAgICAgICBpZiAobm9kZS0+Z2V0T3AoKSA9PSBFT3BFcXVh
bCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
YWxsKCIsICIgPT0gIiwgIikiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiIWFsbCgi
LCAiID09ICIsICIpIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEVPcExlc3NUaGFuOiAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
KCIsICIgPCAiLCAiKSIpOyAgIGJyZWFrOworICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjogICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiID4gIiwgIikiKTsgICBicmVhazsKKyAgICAg
IGNhc2UgRU9wTGVzc1RoYW5FcXVhbDogICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA8
PSAiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6ICBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPj0gIiwgIikiKTsgIGJyZWFrOworICAgICAgY2FzZSBF
T3BWZWN0b3JUaW1lc1NjYWxhcjogb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICogIiwgIiki
KTsgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXI6IG91dHB1dFRyaXBs
ZXQodmlzaXQsICIoIiwgIiAqICIsICIpIik7ICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFZlY3Rv
clRpbWVzTWF0cml4OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibXVsKCIsICIsIHRyYW5zcG9zZSgi
LCAiKSkiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVjdG9yOiBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAibXVsKHRyYW5zcG9zZSgiLCAiKSwgIiwgIikiKTsgYnJlYWs7CisgICAg
ICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidHJhbnNw
b3NlKG11bCh0cmFuc3Bvc2UoIiwgIiksIHRyYW5zcG9zZSgiLCAiKSkpIik7IGJyZWFrOworICAg
ICAgY2FzZSBFT3BMb2dpY2FsT3I6CisgICAgICAgIGlmIChub2RlLT5nZXRSaWdodCgpLT5oYXNT
aWRlRWZmZWN0cygpKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgInMiIDw8IG1VbmZv
bGRTaG9ydENpcmN1aXQtPmdldE5leHRUZW1wb3JhcnlJbmRleCgpOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgfHwgIiwgIikiKTsKKyAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjoKKyAgICAgICAg
bVVzZXNYb3IgPSB0cnVlOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAieG9yKCIsICIs
ICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOgorICAg
ICAgICBpZiAobm9kZS0+Z2V0UmlnaHQoKS0+aGFzU2lkZUVmZmVjdHMoKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xkU2hvcnRDaXJjdWl0LT5nZXROZXh0VGVt
cG9yYXJ5SW5kZXgoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigi
LCAiICYmICIsICIpIik7CisgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIE91dHB1dEhMU0w6OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAq
bm9kZSkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAgY2FzZSBF
T3BOZWdhdGl2ZTogICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKC0iLCAiIiwgIikiKTsg
IGJyZWFrOworICAgICAgY2FzZSBFT3BWZWN0b3JMb2dpY2FsTm90OiBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAiKCEiLCAiIiwgIikiKTsgIGJyZWFrOworICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OiAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCEiLCAiIiwgIikiKTsgIGJyZWFrOworICAgICAg
Y2FzZSBFT3BQb3N0SW5jcmVtZW50OiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIiLCAi
KyspIik7IGJyZWFrOworICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OiAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiKCIsICIiLCAiLS0pIik7IGJyZWFrOworICAgICAgY2FzZSBFT3BQcmVJbmNy
ZW1lbnQ6ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCsrIiwgIiIsICIpIik7IGJyZWFrOwor
ICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKC0t
IiwgIiIsICIpIik7IGJyZWFrOworICAgICAgY2FzZSBFT3BDb252SW50VG9Cb29sOgorICAgICAg
Y2FzZSBFT3BDb252RmxvYXRUb0Jvb2w6CisgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFu
ZCgpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgeworICAgICAgICAgIGNh
c2UgMTogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImJvb2woIiwgIiIsICIpIik7ICBicmVhazsK
KyAgICAgICAgICBjYXNlIDI6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJib29sMigiLCAiIiwg
IikiKTsgYnJlYWs7CisgICAgICAgICAgY2FzZSAzOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
Ym9vbDMoIiwgIiIsICIpIik7IGJyZWFrOworICAgICAgICAgIGNhc2UgNDogICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgImJvb2w0KCIsICIiLCAiKSIpOyBicmVhazsKKyAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
T3BDb252Qm9vbFRvRmxvYXQ6CisgICAgICBjYXNlIEVPcENvbnZJbnRUb0Zsb2F0OgorICAgICAg
ICBzd2l0Y2ggKG5vZGUtPmdldE9wZXJhbmQoKS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkp
CisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIDE6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJm
bG9hdCgiLCAiIiwgIikiKTsgIGJyZWFrOworICAgICAgICAgIGNhc2UgMjogICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgImZsb2F0MigiLCAiIiwgIikiKTsgYnJlYWs7CisgICAgICAgICAgY2FzZSAz
OiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZmxvYXQzKCIsICIiLCAiKSIpOyBicmVhazsKKyAg
ICAgICAgICBjYXNlIDQ6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJmbG9hdDQoIiwgIiIsICIp
Iik7IGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnZGbG9hdFRvSW50OgorICAgICAgY2Fz
ZSBFT3BDb252Qm9vbFRvSW50OgorICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wZXJhbmQoKS0+
Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIDE6
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJpbnQoIiwgIiIsICIpIik7ICBicmVhazsKKyAgICAg
ICAgICBjYXNlIDI6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJpbnQyKCIsICIiLCAiKSIpOyBi
cmVhazsKKyAgICAgICAgICBjYXNlIDM6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJpbnQzKCIs
ICIiLCAiKSIpOyBicmVhazsKKyAgICAgICAgICBjYXNlIDQ6ICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICJpbnQ0KCIsICIiLCAiKSIpOyBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BSYWRpYW5z
OiAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAicmFkaWFucygiLCAiIiwgIikiKTsgICBi
cmVhazsKKyAgICAgIGNhc2UgRU9wRGVncmVlczogICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgImRlZ3JlZXMoIiwgIiIsICIpIik7ICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFNpbjogICAg
ICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJzaW4oIiwgIiIsICIpIik7ICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBFT3BDb3M6ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAiY29zKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wVGFuOiAgICAg
ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInRhbigiLCAiIiwgIikiKTsgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEVPcEFzaW46ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICJhc2luKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BBY29zOiAgICAg
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYWNvcygiLCAiIiwgIikiKTsgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRU9wQXRhbjogICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
ImF0YW4oIiwgIiIsICIpIik7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEV4cDogICAgICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJleHAoIiwgIiIsICIpIik7ICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBFT3BMb2c6ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
bG9nKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRXhwMjogICAgICAg
ICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImV4cDIoIiwgIiIsICIpIik7ICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEVPcExvZzI6ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJs
b2cyKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BTcXJ0OiAgICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAic3FydCgiLCAiIiwgIikiKTsgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRU9wSW52ZXJzZVNxcnQ6ICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInJz
cXJ0KCIsICIiLCAiKSIpOyAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEFiczogICAgICAgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJhYnMoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFT3BTaWduOiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAic2ln
bigiLCAiIiwgIikiKTsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRmxvb3I6ICAgICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZsb29yKCIsICIiLCAiKSIpOyAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEVPcENlaWw6ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJjZWls
KCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BGcmFjdDogICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZnJhYygiLCAiIiwgIikiKTsgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRU9wTGVuZ3RoOiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImxlbmd0
aCgiLCAiIiwgIikiKTsgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcE5vcm1hbGl6ZTogICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICJub3JtYWxpemUoIiwgIiIsICIpIik7IGJyZWFrOworICAg
ICAgY2FzZSBFT3BERmR4OgorICAgICAgICBpZihtSW5zaWRlRGlzY29udGludW91c0xvb3AgfHwg
bU91dHB1dExvZDBGdW5jdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgIigiLCAiIiwgIiwgMC4wKSIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImRkeCgiLCAiIiwgIiki
KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wREZkeToKKyAgICAg
ICAgaWYobUluc2lkZURpc2NvbnRpbnVvdXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb24pCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIsIDAu
MCkiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgImRkeSgiLCAiIiwgIikiKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRU9wRndpZHRoOgorICAgICAgICBpZihtSW5zaWRlRGlzY29udGlu
dW91c0xvb3AgfHwgbU91dHB1dExvZDBGdW5jdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIiwgIiwgMC4wKSIpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZ3
aWR0aCgiLCAiIiwgIikiKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RU9wQW55OiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFueSgiLCAiIiwgIiki
KTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEFsbDogICAgICAgICAgICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICJhbGwoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOworICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBP
dXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAq
bm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKKworICAgIHN3aXRjaCAo
bm9kZS0+Z2V0T3AoKSkKKyAgICB7CisgICAgICBjYXNlIEVPcFNlcXVlbmNlOgorICAgICAgICB7
CisgICAgICAgICAgICBpZiAobUluc2lkZUZ1bmN0aW9uKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0TGluZSgpLmZpcnN0X2xpbmUp
OworICAgICAgICAgICAgICAgIG91dCA8PCAie1xuIjsKKworICAgICAgICAgICAgICAgIG1TY29w
ZURlcHRoKys7CisKKyAgICAgICAgICAgICAgICBpZiAobVNjb3BlQnJhY2tldC5zaXplKCkgPCBt
U2NvcGVEZXB0aCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1TY29w
ZUJyYWNrZXQucHVzaF9iYWNrKDApOyAgIC8vIE5ldyBzY29wZSBsZXZlbAorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBtU2NvcGVCcmFja2V0W21TY29wZURlcHRoIC0gMV0rKzsgICAvLyBOZXcgc2Nv
cGUgYXQgZXhpc3RpbmcgbGV2ZWwKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBzaXQgPSBub2RlLT5n
ZXRTZXF1ZW5jZSgpLmJlZ2luKCk7IHNpdCAhPSBub2RlLT5nZXRTZXF1ZW5jZSgpLmVuZCgpOyBz
aXQrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZl
KCgqc2l0KS0+Z2V0TGluZSgpLmZpcnN0X2xpbmUpOworCisgICAgICAgICAgICAgICAgdHJhdmVy
c2VTdGF0ZW1lbnRzKCpzaXQpOworCisgICAgICAgICAgICAgICAgb3V0IDw8ICI7XG4iOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobUluc2lkZUZ1bmN0aW9uKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0TGluZSgp
Lmxhc3RfbGluZSk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJ9XG4iOworCisgICAgICAgICAg
ICAgICAgbVNjb3BlRGVwdGgtLTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICBjYXNlIEVPcERlY2xhcmF0aW9uOgorICAgICAgICBp
ZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRJbnRlcm1TZXF1
ZW5jZSAmc2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOworICAgICAgICAgICAgVEludGVy
bVR5cGVkICp2YXJpYWJsZSA9IHNlcXVlbmNlWzBdLT5nZXRBc1R5cGVkKCk7CisKKyAgICAgICAg
ICAgIGlmICh2YXJpYWJsZSAmJiAodmFyaWFibGUtPmdldFF1YWxpZmllcigpID09IEV2cVRlbXBv
cmFyeSB8fCB2YXJpYWJsZS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxR2xvYmFsKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmdldFR5cGUoKS5nZXRTdHJ1Y3Qo
KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFkZENvbnN0cnVjdG9y
KHZhcmlhYmxlLT5nZXRUeXBlKCksIHNjb3BlZFN0cnVjdCh2YXJpYWJsZS0+Z2V0VHlwZSgpLmdl
dFN0cnVjdCgpLT5uYW1lKCkpLCBOVUxMKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBpZiAoIXZhcmlhYmxlLT5nZXRBc1N5bWJvbE5vZGUoKSB8fCB2YXJpYWJsZS0+Z2V0
QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpICE9ICIiKSAgIC8vIFZhcmlhYmxlIGRlY2xhcmF0
aW9uCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoIW1JbnNpZGVG
dW5jdGlvbikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
b3V0IDw8ICJzdGF0aWMgIjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgIG91dCA8PCB0eXBlU3RyaW5nKHZhcmlhYmxlLT5nZXRUeXBlKCkpICsgIiAiOworCisg
ICAgICAgICAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBzaXQgPSBz
ZXF1ZW5jZS5iZWdpbigpOyBzaXQgIT0gc2VxdWVuY2UuZW5kKCk7IHNpdCsrKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1i
b2wgPSAoKnNpdCktPmdldEFzU3ltYm9sTm9kZSgpOworCisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc3ltYm9sKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN5bWJvbC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0IDw8IGFycmF5U3RyaW5nKHN5bWJvbC0+Z2V0VHlwZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiA9ICIgKyBpbml0aWFsaXplcihzeW1ib2wtPmdl
dFR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKCpzaXQpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpzaXQgIT0gc2VxdWVuY2UuYmFjaygp
KQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dCA8PCAiLCAiOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhcmlh
YmxlLT5nZXRBc1N5bWJvbE5vZGUoKSAmJiB2YXJpYWJsZS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdl
dFN5bWJvbCgpID09ICIiKSAgIC8vIFR5cGUgKHN0cnVjdCkgZGVjbGFyYXRpb24KKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIEFscmVhZHkgYWRkZWQgdG8gY29uc3Ry
dWN0b3IgbWFwCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHZhcmlhYmxlICYm
ICh2YXJpYWJsZS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxVmFyeWluZ091dCB8fCB2YXJpYWJsZS0+
Z2V0UXVhbGlmaWVyKCkgPT0gRXZxSW52YXJpYW50VmFyeWluZ091dCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNpdCA9IHNl
cXVlbmNlLmJlZ2luKCk7IHNpdCAhPSBzZXF1ZW5jZS5lbmQoKTsgc2l0KyspCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSAoKnNp
dCktPmdldEFzU3ltYm9sTm9kZSgpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wp
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFZlcnRl
eCAob3V0cHV0KSB2YXJ5aW5ncyB3aGljaCBhcmUgZGVjbGFyZWQgYnV0IG5vdCB3cml0dGVuIHRv
IHNob3VsZCBzdGlsbCBiZSBkZWNsYXJlZCB0byBhbGxvdyBzdWNjZXNzZnVsIGxpbmtpbmcKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1SZWZlcmVuY2VkVmFyeWluZ3Nbc3ltYm9sLT5nZXRTeW1i
b2woKV0gPSBzeW1ib2w7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAo
KnNpdCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAgICAgeworICAg
ICAgICAgICAgb3V0IDw8ICIsICI7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEVPcFByb3RvdHlwZToKKyAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAg
ICB7CisgICAgICAgICAgICBvdXQgPDwgdHlwZVN0cmluZyhub2RlLT5nZXRUeXBlKCkpIDw8ICIg
IiA8PCBkZWNvcmF0ZShub2RlLT5nZXROYW1lKCkpIDw8IChtT3V0cHV0TG9kMEZ1bmN0aW9uID8g
IkxvZDAoIiA6ICIoIik7CisKKyAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJndW1lbnRz
ID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gYXJndW1lbnRzW2ldLT5nZXRBc1N5bWJv
bE5vZGUoKTsKKworICAgICAgICAgICAgICAgIGlmIChzeW1ib2wpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgYXJndW1lbnRTdHJpbmcoc3ltYm9sKTsKKwor
ICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGFyZ3VtZW50cy5zaXplKCkgLSAxKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dCA8PCAi
KTtcbiI7CisKKyAgICAgICAgICAgIC8vIEFsc28gcHJvdG90eXBlIHRoZSBMb2QwIHZhcmlhbnQg
aWYgbmVlZGVkCisgICAgICAgICAgICBpZiAobUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkgJiYg
IW1PdXRwdXRMb2QwRnVuY3Rpb24pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbU91
dHB1dExvZDBGdW5jdGlvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgbm9kZS0+dHJhdmVyc2Uo
dGhpcyk7CisgICAgICAgICAgICAgICAgbU91dHB1dExvZDBGdW5jdGlvbiA9IGZhbHNlOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbW1hOiAgICAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICIoIiwgIiwgIiwgIikiKTsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEVPcEZ1bmN0aW9uOgorICAgICAgICB7CisgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVu
Y3Rpb246OnVubWFuZ2xlTmFtZShub2RlLT5nZXROYW1lKCkpOworCisgICAgICAgICAgICBvdXQg
PDwgdHlwZVN0cmluZyhub2RlLT5nZXRUeXBlKCkpIDw8ICIgIjsKKworICAgICAgICAgICAgaWYg
KG5hbWUgPT0gIm1haW4iKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAi
Z2xfbWFpbigiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAobU91dHB1dExvZDBG
dW5jdGlvbiA/ICJMb2QwKCIgOiAiKCIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBU
SW50ZXJtU2VxdWVuY2UgJnNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAg
ICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJndW1lbnRzID0gc2VxdWVuY2VbMF0tPmdldEFzQWdncmVn
YXRlKCktPmdldFNlcXVlbmNlKCk7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IGFyZ3VtZW50c1tpXS0+Z2V0QXNTeW1ib2xO
b2RlKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoc3ltYm9sKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbC0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRDb25zdHJ1
Y3RvcihzeW1ib2wtPmdldFR5cGUoKSwgc2NvcGVkU3RydWN0KHN5bWJvbC0+Z2V0VHlwZSgpLmdl
dFN0cnVjdCgpLT5uYW1lKCkpLCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCBhcmd1bWVudFN0cmluZyhzeW1ib2wpOworCisgICAgICAg
ICAgICAgICAgICAgIGlmIChpIDwgYXJndW1lbnRzLnNpemUoKSAtIDEpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgb3V0IDw8ICIpXG4iCisg
ICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzZXF1
ZW5jZS5zaXplKCkgPiAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1JbnNpZGVG
dW5jdGlvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgc2VxdWVuY2VbMV0tPnRyYXZlcnNlKHRo
aXMpOworICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBvdXQgPDwgIn1cbiI7CisKKyAgICAgICAg
ICAgIGlmIChtQ29udGFpbnNMb29wRGlzY29udGludWl0eSAmJiAhbU91dHB1dExvZDBGdW5jdGlv
bikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobmFtZSAhPSAibWFpbiIpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtT3V0cHV0TG9kMEZ1bmN0aW9u
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAg
ICAgICAgICAgICAgICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRnVuY3Rpb25DYWxsOgorICAgICAg
ICB7CisgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShu
b2RlLT5nZXROYW1lKCkpOworICAgICAgICAgICAgYm9vbCBsb2QwID0gbUluc2lkZURpc2NvbnRp
bnVvdXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb247CisKKyAgICAgICAgICAgIGlmIChub2Rl
LT5pc1VzZXJEZWZpbmVkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8
IGRlY29yYXRlKG5hbWUpIDw8IChsb2QwID8gIkxvZDAoIiA6ICIoIik7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG5h
bWUgPT0gInRleHR1cmUyRCIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoIWxvZDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRf
YmlhcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG91
dCA8PCAiZ2xfdGV4dHVyZTJEKCI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRExv
ZDAgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1
cmUyRExvZDBfYmlhcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJETG9kMCgiOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRl
eHR1cmUyRFByb2oiKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFsb2QwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2ogPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFBy
b2pfYmlhcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvaigiOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0
dXJlMkRQcm9qTG9kMCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAz
KQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1Vc2VzVGV4dHVyZTJEUHJvakxvZDBfYmlhcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvakxvZDAoIjsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlQ3ViZSIpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoIWxvZDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2Vz
VGV4dHVyZUN1YmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykK
KyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
VXNlc1RleHR1cmVDdWJlX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgICAg
ICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmVDdWJlKCI7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0g
MikKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtVXNlc1RleHR1cmVDdWJlTG9kMCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNp
emUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXMgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgp
OworCisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmVDdWJlTG9kMCgi
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmUyRExvZCIpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0
dXJlMkRMb2QgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImds
X3RleHR1cmUyRExvZCgiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
IGlmIChuYW1lID09ICJ0ZXh0dXJlMkRQcm9qTG9kIikKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUy
RFByb2pMb2QgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImds
X3RleHR1cmUyRFByb2pMb2QoIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZUN1YmVMb2QiKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVy
ZUN1YmVMb2QgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImds
X3RleHR1cmVDdWJlTG9kKCI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVEludGVybVNl
cXVlbmNlICZhcmd1bWVudHMgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOworCisgICAgICAgICAgICBm
b3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3IgYXJnID0gYXJndW1lbnRzLmJlZ2luKCk7IGFy
ZyAhPSBhcmd1bWVudHMuZW5kKCk7IGFyZysrKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUICYmIElzU2FtcGxlcigoKmFy
ZyktPmdldEFzVHlwZWQoKS0+Z2V0QmFzaWNUeXBlKCkpKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICJ0ZXh0dXJlXyI7CisgICAgICAgICAgICAgICAgICAg
ICgqYXJnKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCBz
YW1wbGVyXyI7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgKCphcmcpLT50
cmF2ZXJzZSh0aGlzKTsKKworICAgICAgICAgICAgICAgIGlmIChhcmcgPCBhcmd1bWVudHMuZW5k
KCkgLSAxKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIs
ICI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvdXQg
PDwgIikiOworCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEVPcFBhcmFtZXRlcnM6ICAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICIoIiwgIiwgIiwgIilcbntcbiIpOyAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0RmxvYXQ6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUo
KSwgInZlYzEiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJ2ZWMxKCIsICIiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9w
Q29uc3RydWN0VmVjMjoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAi
dmVjMiIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgInZlYzIoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENv
bnN0cnVjdFZlYzM6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgInZl
YzMiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICJ2ZWMzKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25z
dHJ1Y3RWZWM0OgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJ2ZWM0
IiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
dmVjNCgiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0Qm9vbDoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiYnZlYzEi
LCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJi
dmVjMSgiLCAiIiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVj
dEJWZWMyOgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJidmVjMiIs
ICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImJ2
ZWMyKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RCVmVjMzoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiYnZlYzMi
LCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJi
dmVjMygiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0QlZlYzQ6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgImJ2ZWM0
IiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
YnZlYzQoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0
cnVjdEludDoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiaXZlYzEi
LCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJp
dmVjMSgiLCAiIiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVj
dElWZWMyOgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJpdmVjMiIs
ICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIml2
ZWMyKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RJVmVjMzoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiaXZlYzMi
LCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJp
dmVjMygiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0SVZlYzQ6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgIml2ZWM0
IiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
aXZlYzQoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0
cnVjdE1hdDI6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgIm1hdDIi
LCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJt
YXQyKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RNYXQzOgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJtYXQzIiwg
Jm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibWF0
MygiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0
TWF0NDogCisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgIm1hdDQiLCAm
bm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJtYXQ0
KCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RT
dHJ1Y3Q6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgc2NvcGVkU3Ry
dWN0KG5vZGUtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+bmFtZSgpKSwgJm5vZGUtPmdldFNlcXVl
bmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCBzdHJ1Y3RMb29rdXAobm9kZS0+
Z2V0VHlwZSgpLmdldFN0cnVjdCgpLT5uYW1lKCkpICsgIl9jdG9yKCIsICIsICIsICIpIik7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BMZXNzVGhhbjogICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiKCIsICIgPCAiLCAiKSIpOyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVPcEdyZWF0ZXJUaGFuOiAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA+
ICIsICIpIik7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTGVzc1RoYW5F
cXVhbDogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIDw9ICIsICIpIik7ICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiKCIsICIgPj0gIiwgIikiKTsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVPcFZlY3RvckVxdWFsOiAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA9
PSAiLCAiKSIpOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wVmVjdG9yTm90
RXF1YWw6ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICE9ICIsICIpIik7ICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BNb2Q6CisgICAgICAgIHsKKyAgICAgICAgICAg
IC8vIFdlIG5lZWQgdG8gbG9vayBhdCB0aGUgbnVtYmVyIG9mIGNvbXBvbmVudHMgaW4gYm90aCBh
cmd1bWVudHMKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0U2VxdWVuY2UoKVswXS0+Z2V0
QXNUeXBlZCgpLT5nZXROb21pbmFsU2l6ZSgpICogMTAKKyAgICAgICAgICAgICAgICAgICAgICsg
bm9kZS0+Z2V0U2VxdWVuY2UoKVsxXS0+Z2V0QXNUeXBlZCgpLT5nZXROb21pbmFsU2l6ZSgpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDExOiBtVXNlc01vZDEgPSB0cnVlOyBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSAyMjogbVVzZXNNb2QydiA9IHRydWU7IGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIDIxOiBtVXNlc01vZDJmID0gdHJ1ZTsgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgMzM6IG1Vc2VzTW9kM3YgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSAzMTogbVVzZXNNb2QzZiA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDQ0
OiBtVXNlc01vZDR2ID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgNDE6IG1Vc2Vz
TW9kNGYgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm1v
ZCgiLCAiLCAiLCAiKSIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
T3BQb3c6ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAicG93KCIsICIsICIsICIp
Iik7ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEF0YW46CisgICAgICAgIEFT
U0VSVChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKTsgICAvLyBhdGFuKHgpIGlzIGEg
dW5hcnkgb3BlcmF0b3IKKyAgICAgICAgc3dpdGNoIChub2RlLT5nZXRTZXF1ZW5jZSgpWzBdLT5n
ZXRBc1R5cGVkKCktPmdldE5vbWluYWxTaXplKCkpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNl
IDE6IG1Vc2VzQXRhbjJfMSA9IHRydWU7IGJyZWFrOworICAgICAgICAgIGNhc2UgMjogbVVzZXNB
dGFuMl8yID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgY2FzZSAzOiBtVXNlc0F0YW4yXzMgPSB0
cnVlOyBicmVhazsKKyAgICAgICAgICBjYXNlIDQ6IG1Vc2VzQXRhbjJfNCA9IHRydWU7IGJyZWFr
OworICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgImF0YW55eCgiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRU9wTWluOiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm1p
bigiLCAiLCAiLCAiKSIpOyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcE1heDogICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJtYXgoIiwgIiwgIiwgIikiKTsgICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBFT3BDbGFtcDogICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAiY2xhbXAoIiwgIiwgIiwgIikiKTsgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTWl4
OiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImxlcnAoIiwgIiwgIiwgIikiKTsgICAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFN0ZXA6ICAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJzdGVwKCIsICIsICIsICIpIik7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
T3BTbW9vdGhTdGVwOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAic21vb3Roc3RlcCgiLCAiLCAi
LCAiKSIpOyAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRGlzdGFuY2U6ICAgICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgImRpc3RhbmNlKCIsICIsICIsICIpIik7ICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEVPcERvdDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkb3QoIiwgIiwgIiwg
IikiKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDcm9zczogICAgICAgICBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAiY3Jvc3MoIiwgIiwgIiwgIikiKTsgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRU9wRmFjZUZvcndhcmQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS0+Z2V0U2VxdWVuY2UoKVswXS0+Z2V0QXNUeXBlZCgpLT5nZXROb21pbmFsU2l6ZSgpKSAg
IC8vIE51bWJlciBvZiBjb21wb25lbnRzIGluIHRoZSBmaXJzdCBhcmd1bWVudAorICAgICAgICAg
ICAgeworICAgICAgICAgICAgY2FzZSAxOiBtVXNlc0ZhY2Vmb3J3YXJkMSA9IHRydWU7IGJyZWFr
OworICAgICAgICAgICAgY2FzZSAyOiBtVXNlc0ZhY2Vmb3J3YXJkMiA9IHRydWU7IGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSAzOiBtVXNlc0ZhY2Vmb3J3YXJkMyA9IHRydWU7IGJyZWFrOworICAg
ICAgICAgICAgY2FzZSA0OiBtVXNlc0ZhY2Vmb3J3YXJkNCA9IHRydWU7IGJyZWFrOworICAgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZhY2Vmb3J3YXJkKCIsICIsICIs
ICIpIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFJlZmxlY3Q6
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJyZWZsZWN0KCIsICIsICIsICIpIik7ICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBFT3BSZWZyYWN0OiAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAicmVmcmFjdCgiLCAiLCAiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTXVs
OiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICogIiwgIikiKTsgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIE91dHB1dEhMU0w6OnZpc2l0U2VsZWN0aW9uKFZpc2l0
IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uICpub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91
dCA9IG1Cb2R5OworCisgICAgaWYgKG5vZGUtPnVzZXNUZXJuYXJ5T3BlcmF0b3IoKSkKKyAgICB7
CisgICAgICAgIG91dCA8PCAicyIgPDwgbVVuZm9sZFNob3J0Q2lyY3VpdC0+Z2V0TmV4dFRlbXBv
cmFyeUluZGV4KCk7CisgICAgfQorICAgIGVsc2UgIC8vIGlmL2Vsc2Ugc3RhdGVtZW50CisgICAg
eworICAgICAgICBtVW5mb2xkU2hvcnRDaXJjdWl0LT50cmF2ZXJzZShub2RlLT5nZXRDb25kaXRp
b24oKSk7CisKKyAgICAgICAgb3V0IDw8ICJpZiAoIjsKKworICAgICAgICBub2RlLT5nZXRDb25k
aXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CisKKyAgICAgICAgb3V0IDw8ICIpXG4iOworICAgICAg
ICAKKyAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRMaW5lKCkuZmlyc3RfbGlu
ZSk7CisgICAgICAgIG91dCA8PCAie1xuIjsKKworICAgICAgICBib29sIGRpc2NhcmQgPSBmYWxz
ZTsKKworICAgICAgICBpZiAobm9kZS0+Z2V0VHJ1ZUJsb2NrKCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHRyYXZlcnNlU3RhdGVtZW50cyhub2RlLT5nZXRUcnVlQmxvY2soKSk7CisKKyAgICAg
ICAgICAgIC8vIERldGVjdCB0cnVlIGRpc2NhcmQKKyAgICAgICAgICAgIGRpc2NhcmQgPSAoZGlz
Y2FyZCB8fCBGaW5kRGlzY2FyZDo6c2VhcmNoKG5vZGUtPmdldFRydWVCbG9jaygpKSk7CisgICAg
ICAgIH0KKworICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKS5maXJz
dF9saW5lKTsKKyAgICAgICAgb3V0IDw8ICI7XG59XG4iOworCisgICAgICAgIGlmIChub2RlLT5n
ZXRGYWxzZUJsb2NrKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZWxzZVxuIjsK
KworICAgICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRGYWxzZUJsb2NrKCkt
PmdldExpbmUoKS5maXJzdF9saW5lKTsKKyAgICAgICAgICAgIG91dCA8PCAie1xuIjsKKworICAg
ICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRGYWxzZUJsb2NrKCktPmdldExp
bmUoKS5maXJzdF9saW5lKTsKKyAgICAgICAgICAgIHRyYXZlcnNlU3RhdGVtZW50cyhub2RlLT5n
ZXRGYWxzZUJsb2NrKCkpOworCisgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUt
PmdldEZhbHNlQmxvY2soKS0+Z2V0TGluZSgpLmZpcnN0X2xpbmUpOworICAgICAgICAgICAgb3V0
IDw8ICI7XG59XG4iOworCisgICAgICAgICAgICAvLyBEZXRlY3QgZmFsc2UgZGlzY2FyZAorICAg
ICAgICAgICAgZGlzY2FyZCA9IChkaXNjYXJkIHx8IEZpbmREaXNjYXJkOjpzZWFyY2gobm9kZS0+
Z2V0RmFsc2VCbG9jaygpKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBBTkdMRSBpc3N1ZSA0
ODY6IERldGVjdCBwcm9ibGVtYXRpYyBjb25kaXRpb25hbCBkaXNjYXJkCisgICAgICAgIGlmIChk
aXNjYXJkICYmIEZpbmRTaWRlRWZmZWN0UmV3cml0aW5nOjpzZWFyY2gobm9kZSkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1Vc2VzRGlzY2FyZFJld3JpdGluZyA9IHRydWU7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgT3V0cHV0SExTTDo6dmlzaXRD
b25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uICpub2RlKQoreworICAgIHdyaXRlQ29u
c3RhbnRVbmlvbihub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCkp
OworfQorCitib29sIE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxv
b3AgKm5vZGUpCit7CisgICAgYm9vbCB3YXNEaXNjb250aW51b3VzID0gbUluc2lkZURpc2NvbnRp
bnVvdXNMb29wOworCisgICAgaWYgKG1Db250YWluc0xvb3BEaXNjb250aW51aXR5ICYmICFtSW5z
aWRlRGlzY29udGludW91c0xvb3ApCisgICAgeworICAgICAgICBtSW5zaWRlRGlzY29udGludW91
c0xvb3AgPSBjb250YWluc0xvb3BEaXNjb250aW51aXR5KG5vZGUpOworICAgIH0KKworICAgIGlm
IChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgeworICAgICAgICBpZiAoaGFu
ZGxlRXhjZXNzaXZlTG9vcChub2RlKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorCisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7
CisKKyAgICBpZiAobm9kZS0+Z2V0VHlwZSgpID09IEVMb29wRG9XaGlsZSkKKyAgICB7CisgICAg
ICAgIG91dCA8PCAie2RvXG4iOworCisgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+
Z2V0TGluZSgpLmZpcnN0X2xpbmUpOworICAgICAgICBvdXQgPDwgIntcbiI7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIG91dCA8PCAie2ZvcigiOworICAgICAgICAKKyAgICAgICAg
aWYgKG5vZGUtPmdldEluaXQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbm9kZS0+Z2V0SW5p
dCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIG91dCA8PCAiOyAiOwor
CisgICAgICAgIGlmIChub2RlLT5nZXRDb25kaXRpb24oKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB9CisKKyAg
ICAgICAgb3V0IDw8ICI7ICI7CisKKyAgICAgICAgaWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkK
KyAgICAgICAgeworICAgICAgICAgICAgbm9kZS0+Z2V0RXhwcmVzc2lvbigpLT50cmF2ZXJzZSh0
aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIG91dCA8PCAiKVxuIjsKKyAgICAgICAgCisgICAg
ICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0TGluZSgpLmZpcnN0X2xpbmUpOworICAg
ICAgICBvdXQgPDwgIntcbiI7CisgICAgfQorCisgICAgaWYgKG5vZGUtPmdldEJvZHkoKSkKKyAg
ICB7CisgICAgICAgIHRyYXZlcnNlU3RhdGVtZW50cyhub2RlLT5nZXRCb2R5KCkpOworICAgIH0K
KworICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0TGluZSgpLmZpcnN0X2xpbmUpOwor
ICAgIG91dCA8PCAiO31cbiI7CisKKyAgICBpZiAobm9kZS0+Z2V0VHlwZSgpID09IEVMb29wRG9X
aGlsZSkKKyAgICB7CisgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0Q29uZGl0
aW9uKCktPmdldExpbmUoKS5maXJzdF9saW5lKTsKKyAgICAgICAgb3V0IDw8ICJ3aGlsZShcbiI7
CisKKyAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOworCisgICAg
ICAgIG91dCA8PCAiKTsiOworICAgIH0KKworICAgIG91dCA8PCAifVxuIjsKKworICAgIG1JbnNp
ZGVEaXNjb250aW51b3VzTG9vcCA9IHdhc0Rpc2NvbnRpbnVvdXM7CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgT3V0cHV0SExTTDo6dmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRl
cm1CcmFuY2ggKm5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CisKKyAg
ICBzd2l0Y2ggKG5vZGUtPmdldEZsb3dPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wS2lsbDoK
KyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImRpc2NhcmQ7XG4iLCAiIiwgIiIpOworICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQnJlYWs6CisgICAgICAgIGlmICh2aXNpdCA9PSBQ
cmVWaXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1FeGNlc3NpdmVMb29wSW5kZXgp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJ7QnJlYWsiOworICAgICAg
ICAgICAgICAgIG1FeGNlc3NpdmVMb29wSW5kZXgtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAg
ICAgICAgIG91dCA8PCAiID0gdHJ1ZTsgYnJlYWs7fVxuIjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgImJyZWFr
O1xuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRU9wQ29udGludWU6IG91dHB1dFRyaXBsZXQodmlzaXQsICJjb250aW51ZTtcbiIsICIiLCAi
Iik7IGJyZWFrOworICAgICAgY2FzZSBFT3BSZXR1cm46CisgICAgICAgIGlmICh2aXNpdCA9PSBQ
cmVWaXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vZGUtPmdldEV4cHJlc3Npb24o
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgInJldHVybiAiOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG91dCA8PCAicmV0dXJuO1xuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmICh2aXNpdCA9PSBQb3N0VmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChub2RlLT5nZXRFeHByZXNzaW9uKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
b3V0IDw8ICI7XG4iOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBPdXRwdXRITFNMOjp0cmF2ZXJzZVN0YXRlbWVudHMoVEludGVybU5vZGUgKm5v
ZGUpCit7CisgICAgaWYgKGlzU2luZ2xlU3RhdGVtZW50KG5vZGUpKQorICAgIHsKKyAgICAgICAg
bVVuZm9sZFNob3J0Q2lyY3VpdC0+dHJhdmVyc2Uobm9kZSk7CisgICAgfQorCisgICAgbm9kZS0+
dHJhdmVyc2UodGhpcyk7Cit9CisKK2Jvb2wgT3V0cHV0SExTTDo6aXNTaW5nbGVTdGF0ZW1lbnQo
VEludGVybU5vZGUgKm5vZGUpCit7CisgICAgVEludGVybUFnZ3JlZ2F0ZSAqYWdncmVnYXRlID0g
bm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsKKworICAgIGlmIChhZ2dyZWdhdGUpCisgICAgeworICAg
ICAgICBpZiAoYWdncmVnYXRlLT5nZXRPcCgpID09IEVPcFNlcXVlbmNlKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg
ICB7CisgICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gYWdn
cmVnYXRlLT5nZXRTZXF1ZW5jZSgpLmJlZ2luKCk7IHNpdCAhPSBhZ2dyZWdhdGUtPmdldFNlcXVl
bmNlKCkuZW5kKCk7IHNpdCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgh
aXNTaW5nbGVTdGF0ZW1lbnQoKnNpdCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCisvLyBIYW5kbGUgbG9vcHMgd2l0aCBtb3JlIHRoYW4gMjU0IGl0ZXJhdGlv
bnMgKHVuc3VwcG9ydGVkIGJ5IEQzRDkpIGJ5IHNwbGl0dGluZyB0aGVtCisvLyAoVGhlIEQzRCBk
b2N1bWVudGF0aW9uIHNheXMgMjU1IGl0ZXJhdGlvbnMsIGJ1dCB0aGUgY29tcGlsZXIgY29tcGxh
aW5zIGF0IGFueXRoaW5nIG1vcmUgdGhhbiAyNTQpLgorYm9vbCBPdXRwdXRITFNMOjpoYW5kbGVF
eGNlc3NpdmVMb29wKFRJbnRlcm1Mb29wICpub2RlKQoreworICAgIGNvbnN0IGludCBNQVhfTE9P
UF9JVEVSQVRJT05TID0gMjU0OworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OworCisg
ICAgLy8gUGFyc2UgbG9vcHMgb2YgdGhlIGZvcm06CisgICAgLy8gZm9yKGludCBpbmRleCA9IGlu
aXRpYWw7IGluZGV4IFtjb21wYXJhdG9yXSBsaW1pdDsgaW5kZXggKz0gaW5jcmVtZW50KQorICAg
IFRJbnRlcm1TeW1ib2wgKmluZGV4ID0gTlVMTDsKKyAgICBUT3BlcmF0b3IgY29tcGFyYXRvciA9
IEVPcE51bGw7CisgICAgaW50IGluaXRpYWwgPSAwOworICAgIGludCBsaW1pdCA9IDA7CisgICAg
aW50IGluY3JlbWVudCA9IDA7CisKKyAgICAvLyBQYXJzZSBpbmRleCBuYW1lIGFuZCBpbnRpYWwg
dmFsdWUKKyAgICBpZiAobm9kZS0+Z2V0SW5pdCgpKQorICAgIHsKKyAgICAgICAgVEludGVybUFn
Z3JlZ2F0ZSAqaW5pdCA9IG5vZGUtPmdldEluaXQoKS0+Z2V0QXNBZ2dyZWdhdGUoKTsKKworICAg
ICAgICBpZiAoaW5pdCkKKyAgICAgICAgeworICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZz
ZXF1ZW5jZSA9IGluaXQtPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQg
KnZhcmlhYmxlID0gc2VxdWVuY2VbMF0tPmdldEFzVHlwZWQoKTsKKworICAgICAgICAgICAgaWYg
KHZhcmlhYmxlICYmIHZhcmlhYmxlLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFUZW1wb3JhcnkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVEludGVybUJpbmFyeSAqYXNzaWduID0gdmFy
aWFibGUtPmdldEFzQmluYXJ5Tm9kZSgpOworCisgICAgICAgICAgICAgICAgaWYgKGFzc2lnbi0+
Z2V0T3AoKSA9PSBFT3BJbml0aWFsaXplKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gYXNzaWduLT5nZXRMZWZ0KCktPmdldEFz
U3ltYm9sTm9kZSgpOworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAq
Y29uc3RhbnQgPSBhc3NpZ24tPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpOworCisg
ICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wgJiYgY29uc3RhbnQpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdGFudC0+Z2V0QmFzaWNU
eXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5nZXROb21pbmFsU2l6ZSgpID09IDEpCisgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgg
PSBzeW1ib2w7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbCA9IGNvbnN0YW50
LT5nZXRJQ29uc3QoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBQYXJzZSBjb21wYXJhdG9yIGFuZCBsaW1pdCB2YWx1ZQorICAgIGlmIChp
bmRleCAhPSBOVUxMICYmIG5vZGUtPmdldENvbmRpdGlvbigpKQorICAgIHsKKyAgICAgICAgVElu
dGVybUJpbmFyeSAqdGVzdCA9IG5vZGUtPmdldENvbmRpdGlvbigpLT5nZXRBc0JpbmFyeU5vZGUo
KTsKKyAgICAgICAgCisgICAgICAgIGlmICh0ZXN0ICYmIHRlc3QtPmdldExlZnQoKS0+Z2V0QXNT
eW1ib2xOb2RlKCktPmdldElkKCkgPT0gaW5kZXgtPmdldElkKCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpjb25zdGFudCA9IHRlc3QtPmdldFJpZ2h0KCkt
PmdldEFzQ29uc3RhbnRVbmlvbigpOworCisgICAgICAgICAgICBpZiAoY29uc3RhbnQpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSA9
PSBFYnRJbnQgJiYgY29uc3RhbnQtPmdldE5vbWluYWxTaXplKCkgPT0gMSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbXBhcmF0b3IgPSB0ZXN0LT5nZXRPcCgpOwor
ICAgICAgICAgICAgICAgICAgICBsaW1pdCA9IGNvbnN0YW50LT5nZXRJQ29uc3QoMCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8g
UGFyc2UgaW5jcmVtZW50CisgICAgaWYgKGluZGV4ICE9IE5VTEwgJiYgY29tcGFyYXRvciAhPSBF
T3BOdWxsICYmIG5vZGUtPmdldEV4cHJlc3Npb24oKSkKKyAgICB7CisgICAgICAgIFRJbnRlcm1C
aW5hcnkgKmJpbmFyeVRlcm1pbmFsID0gbm9kZS0+Z2V0RXhwcmVzc2lvbigpLT5nZXRBc0JpbmFy
eU5vZGUoKTsKKyAgICAgICAgVEludGVybVVuYXJ5ICp1bmFyeVRlcm1pbmFsID0gbm9kZS0+Z2V0
RXhwcmVzc2lvbigpLT5nZXRBc1VuYXJ5Tm9kZSgpOworICAgICAgICAKKyAgICAgICAgaWYgKGJp
bmFyeVRlcm1pbmFsKQorICAgICAgICB7CisgICAgICAgICAgICBUT3BlcmF0b3Igb3AgPSBiaW5h
cnlUZXJtaW5hbC0+Z2V0T3AoKTsKKyAgICAgICAgICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpj
b25zdGFudCA9IGJpbmFyeVRlcm1pbmFsLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24o
KTsKKworICAgICAgICAgICAgaWYgKGNvbnN0YW50KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGlmIChjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50
LT5nZXROb21pbmFsU2l6ZSgpID09IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBpbnQgdmFsdWUgPSBjb25zdGFudC0+Z2V0SUNvbnN0KDApOworCisgICAgICAgICAg
ICAgICAgICAgIHN3aXRjaCAob3ApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjogaW5jcmVtZW50ID0gdmFsdWU7ICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjogaW5jcmVtZW50ID0gLXZh
bHVlOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTklNUExFTUVOVEVE
KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodW5hcnlUZXJtaW5hbCkKKyAgICAgICAg
eworICAgICAgICAgICAgVE9wZXJhdG9yIG9wID0gdW5hcnlUZXJtaW5hbC0+Z2V0T3AoKTsKKwor
ICAgICAgICAgICAgc3dpdGNoIChvcCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2Fz
ZSBFT3BQb3N0SW5jcmVtZW50OiBpbmNyZW1lbnQgPSAxOyAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRU9wUG9zdERlY3JlbWVudDogaW5jcmVtZW50ID0gLTE7IGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEVPcFByZUluY3JlbWVudDogIGluY3JlbWVudCA9IDE7ICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6ICBpbmNyZW1lbnQgPSAtMTsgYnJlYWs7Cisg
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOSU1QTEVNRU5URUQoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmIChpbmRleCAhPSBOVUxMICYmIGNvbXBhcmF0b3IgIT0g
RU9wTnVsbCAmJiBpbmNyZW1lbnQgIT0gMCkKKyAgICB7CisgICAgICAgIGlmIChjb21wYXJhdG9y
ID09IEVPcExlc3NUaGFuRXF1YWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbXBhcmF0b3Ig
PSBFT3BMZXNzVGhhbjsKKyAgICAgICAgICAgIGxpbWl0ICs9IDE7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoY29tcGFyYXRvciA9PSBFT3BMZXNzVGhhbikKKyAgICAgICAgeworICAgICAgICAg
ICAgaW50IGl0ZXJhdGlvbnMgPSAobGltaXQgLSBpbml0aWFsKSAvIGluY3JlbWVudDsKKworICAg
ICAgICAgICAgaWYgKGl0ZXJhdGlvbnMgPD0gTUFYX0xPT1BfSVRFUkFUSU9OUykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gTm90IGFuIGV4Y2Vzc2l2
ZSBsb29wCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnJlc3Rv
cmVJbmRleCA9IG1FeGNlc3NpdmVMb29wSW5kZXg7CisgICAgICAgICAgICBtRXhjZXNzaXZlTG9v
cEluZGV4ID0gaW5kZXg7CisKKyAgICAgICAgICAgIG91dCA8PCAie2ludCAiOworICAgICAgICAg
ICAgaW5kZXgtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICI7XG4iCisgICAg
ICAgICAgICAgICAgICAgImJvb2wgQnJlYWsiOworICAgICAgICAgICAgaW5kZXgtPnRyYXZlcnNl
KHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICIgPSBmYWxzZTtcbiI7CisKKyAgICAgICAgICAg
IGJvb2wgZmlyc3RMb29wRnJhZ21lbnQgPSB0cnVlOworCisgICAgICAgICAgICB3aGlsZSAoaXRl
cmF0aW9ucyA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IGNsYW1wZWRM
aW1pdCA9IGluaXRpYWwgKyBpbmNyZW1lbnQgKiBzdGQ6Om1pbihNQVhfTE9PUF9JVEVSQVRJT05T
LCBpdGVyYXRpb25zKTsKKworICAgICAgICAgICAgICAgIGlmICghZmlyc3RMb29wRnJhZ21lbnQp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImlmICghQnJl
YWsiOworICAgICAgICAgICAgICAgICAgICBpbmRleC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAg
ICAgICAgICAgICAgIG91dCA8PCAiKSB7XG4iOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIGlmIChpdGVyYXRpb25zIDw9IE1BWF9MT09QX0lURVJBVElPTlMpICAgLy8gTGFz
dCBsb29wIGZyYWdtZW50CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBt
RXhjZXNzaXZlTG9vcEluZGV4ID0gTlVMTDsgICAvLyBTdG9wcyBzZXR0aW5nIHRoZSBCcmVhayBm
bGFnCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IC8vIGZvcihpbnQgaW5kZXggPSBpbml0aWFsOyBpbmRleCA8IGNsYW1wZWRMaW1pdDsgaW5kZXgg
Kz0gaW5jcmVtZW50KQorCisgICAgICAgICAgICAgICAgb3V0IDw8ICJmb3IoIjsKKyAgICAgICAg
ICAgICAgICBpbmRleC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIg
PSAiOworICAgICAgICAgICAgICAgIG91dCA8PCBpbml0aWFsOworCisgICAgICAgICAgICAgICAg
b3V0IDw8ICI7ICI7CisgICAgICAgICAgICAgICAgaW5kZXgtPnRyYXZlcnNlKHRoaXMpOworICAg
ICAgICAgICAgICAgIG91dCA8PCAiIDwgIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgY2xhbXBl
ZExpbWl0OworCisgICAgICAgICAgICAgICAgb3V0IDw8ICI7ICI7CisgICAgICAgICAgICAgICAg
aW5kZXgtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAgIG91dCA8PCAiICs9ICI7Cisg
ICAgICAgICAgICAgICAgb3V0IDw8IGluY3JlbWVudDsKKyAgICAgICAgICAgICAgICBvdXQgPDwg
IilcbiI7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgb3V0cHV0TGluZURpcmVj
dGl2ZShub2RlLT5nZXRMaW5lKCkuZmlyc3RfbGluZSk7CisgICAgICAgICAgICAgICAgb3V0IDw8
ICJ7XG4iOworCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldEJvZHkoKSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmdldEJvZHkoKS0+dHJhdmVyc2Uo
dGhpcyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgb3V0cHV0TGluZURp
cmVjdGl2ZShub2RlLT5nZXRMaW5lKCkuZmlyc3RfbGluZSk7CisgICAgICAgICAgICAgICAgb3V0
IDw8ICI7fVxuIjsKKworICAgICAgICAgICAgICAgIGlmICghZmlyc3RMb29wRnJhZ21lbnQpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIn1cbiI7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZmlyc3RMb29wRnJhZ21lbnQgPSBmYWxz
ZTsKKworICAgICAgICAgICAgICAgIGluaXRpYWwgKz0gTUFYX0xPT1BfSVRFUkFUSU9OUyAqIGlu
Y3JlbWVudDsKKyAgICAgICAgICAgICAgICBpdGVyYXRpb25zIC09IE1BWF9MT09QX0lURVJBVElP
TlM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG91dCA8PCAifSI7
CisKKyAgICAgICAgICAgIG1FeGNlc3NpdmVMb29wSW5kZXggPSByZXN0b3JlSW5kZXg7CisKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgVU5JTVBMRU1F
TlRFRCgpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsgICAvLyBOb3QgaGFuZGxlZCBhcyBh
biBleGNlc3NpdmUgbG9vcAorfQorCit2b2lkIE91dHB1dEhMU0w6Om91dHB1dFRyaXBsZXQoVmlz
aXQgdmlzaXQsIGNvbnN0IFRTdHJpbmcgJnByZVN0cmluZywgY29uc3QgVFN0cmluZyAmaW5TdHJp
bmcsIGNvbnN0IFRTdHJpbmcgJnBvc3RTdHJpbmcpCit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0
ID0gbUJvZHk7CisKKyAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAgeworICAgICAgICBv
dXQgPDwgcHJlU3RyaW5nOworICAgIH0KKyAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQor
ICAgIHsKKyAgICAgICAgb3V0IDw8IGluU3RyaW5nOworICAgIH0KKyAgICBlbHNlIGlmICh2aXNp
dCA9PSBQb3N0VmlzaXQpCisgICAgeworICAgICAgICBvdXQgPDwgcG9zdFN0cmluZzsKKyAgICB9
Cit9CisKK3ZvaWQgT3V0cHV0SExTTDo6b3V0cHV0TGluZURpcmVjdGl2ZShpbnQgbGluZSkKK3sK
KyAgICBpZiAoKG1Db250ZXh0LmNvbXBpbGVPcHRpb25zICYgU0hfTElORV9ESVJFQ1RJVkVTKSAm
JiAobGluZSA+IDApKQorICAgIHsKKyAgICAgICAgbUJvZHkgPDwgIlxuIjsKKyAgICAgICAgbUJv
ZHkgPDwgIiNsaW5lICIgPDwgbGluZTsKKworICAgICAgICBpZiAobUNvbnRleHQuc291cmNlUGF0
aCkKKyAgICAgICAgeworICAgICAgICAgICAgbUJvZHkgPDwgIiBcIiIgPDwgbUNvbnRleHQuc291
cmNlUGF0aCA8PCAiXCIiOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtQm9keSA8PCAi
XG4iOworICAgIH0KK30KKworVFN0cmluZyBPdXRwdXRITFNMOjphcmd1bWVudFN0cmluZyhjb25z
dCBUSW50ZXJtU3ltYm9sICpzeW1ib2wpCit7CisgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBz
eW1ib2wtPmdldFF1YWxpZmllcigpOworICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gc3ltYm9sLT5n
ZXRUeXBlKCk7CisgICAgVFN0cmluZyBuYW1lID0gc3ltYm9sLT5nZXRTeW1ib2woKTsKKworICAg
IGlmIChuYW1lLmVtcHR5KCkpICAgLy8gSExTTCBkZW1hbmRzIG5hbWVkIGFyZ3VtZW50cywgYWxz
byBmb3IgcHJvdG90eXBlcworICAgIHsKKyAgICAgICAgbmFtZSA9ICJ4IiArIHN0cihtVW5pcXVl
SW5kZXgrKyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG5hbWUgPSBkZWNvcmF0
ZShuYW1lKTsKKyAgICB9CisKKyAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBV
VCAmJiBJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpCisgICAgeworICAgICAgIHJldHVy
biBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIgIiArIHRleHR1cmVTdHJpbmcodHlwZSkg
KyAiIHRleHR1cmVfIiArIG5hbWUgKyBhcnJheVN0cmluZyh0eXBlKSArICIsICIgKworICAgICAg
ICAgICAgICBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIgU2FtcGxlclN0YXRlIHNhbXBs
ZXJfIiArIG5hbWUgKyBhcnJheVN0cmluZyh0eXBlKTsKKyAgICB9CisKKyAgICByZXR1cm4gcXVh
bGlmaWVyU3RyaW5nKHF1YWxpZmllcikgKyAiICIgKyB0eXBlU3RyaW5nKHR5cGUpICsgIiAiICsg
bmFtZSArIGFycmF5U3RyaW5nKHR5cGUpOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OnF1YWxp
ZmllclN0cmluZyhUUXVhbGlmaWVyIHF1YWxpZmllcikKK3sKKyAgICBzd2l0Y2gocXVhbGlmaWVy
KQorICAgIHsKKyAgICAgIGNhc2UgRXZxSW46ICAgICAgICAgICAgcmV0dXJuICJpbiI7CisgICAg
ICBjYXNlIEV2cU91dDogICAgICAgICAgIHJldHVybiAib3V0IjsKKyAgICAgIGNhc2UgRXZxSW5P
dXQ6ICAgICAgICAgcmV0dXJuICJpbm91dCI7CisgICAgICBjYXNlIEV2cUNvbnN0UmVhZE9ubHk6
IHJldHVybiAiY29uc3QiOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisK
KyAgICByZXR1cm4gIiI7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6dHlwZVN0cmluZyhjb25z
dCBUVHlwZSAmdHlwZSkKK3sKKyAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1
Y3QpCisgICAgeworICAgICAgICBjb25zdCBUU3RyaW5nJiB0eXBlTmFtZSA9IHR5cGUuZ2V0U3Ry
dWN0KCktPm5hbWUoKTsKKyAgICAgICAgaWYgKHR5cGVOYW1lICE9ICIiKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gc3RydWN0TG9va3VwKHR5cGVOYW1lKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlICAgLy8gTmFtZWxlc3Mgc3RydWN0dXJlLCBkZWZpbmUgaW4gcGxhY2UKKyAgICAg
ICAgeworICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gdHlwZS5nZXRTdHJ1
Y3QoKS0+ZmllbGRzKCk7CisKKyAgICAgICAgICAgIFRTdHJpbmcgc3RyaW5nID0gInN0cnVjdFxu
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAie1xuIjsKKworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICpmaWVsZCA9IGZpZWxkc1tpXTsKKwor
ICAgICAgICAgICAgICAgIHN0cmluZyArPSAiICAgICIgKyB0eXBlU3RyaW5nKCpmaWVsZC0+dHlw
ZSgpKSArICIgIiArIGRlY29yYXRlKGZpZWxkLT5uYW1lKCkpICsgYXJyYXlTdHJpbmcoKmZpZWxk
LT50eXBlKCkpICsgIjtcbiI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN0cmluZyAr
PSAifSAiOworCisgICAgICAgICAgICByZXR1cm4gc3RyaW5nOworICAgICAgICB9CisgICAgfQor
ICAgIGVsc2UgaWYgKHR5cGUuaXNNYXRyaXgoKSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlw
ZS5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSAyOiByZXR1cm4g
ImZsb2F0MngyIjsKKyAgICAgICAgICBjYXNlIDM6IHJldHVybiAiZmxvYXQzeDMiOworICAgICAg
ICAgIGNhc2UgNDogcmV0dXJuICJmbG9hdDR4NCI7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlLmdldEJhc2ljVHlwZSgpKQorICAgICAgICB7
CisgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZS5nZXRO
b21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IHJldHVy
biAiZmxvYXQiOworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiAiZmxvYXQyIjsKKyAgICAg
ICAgICAgICAgY2FzZSAzOiByZXR1cm4gImZsb2F0MyI7CisgICAgICAgICAgICAgIGNhc2UgNDog
cmV0dXJuICJmbG9hdDQiOworICAgICAgICAgICAgfQorICAgICAgICAgIGNhc2UgRWJ0SW50Ogor
ICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuICJpbnQiOworICAgICAgICAgICAgICBjYXNl
IDI6IHJldHVybiAiaW50MiI7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuICJpbnQzIjsK
KyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gImludDQiOworICAgICAgICAgICAgfQorICAg
ICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFs
U2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiAiYm9v
bCI7CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuICJib29sMiI7CisgICAgICAgICAgICAg
IGNhc2UgMzogcmV0dXJuICJib29sMyI7CisgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuICJi
b29sNCI7CisgICAgICAgICAgICB9CisgICAgICAgICAgY2FzZSBFYnRWb2lkOgorICAgICAgICAg
ICAgcmV0dXJuICJ2b2lkIjsKKyAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAgICAgICAg
ICAgIHJldHVybiAic2FtcGxlcjJEIjsKKyAgICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgor
ICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyQ1VCRSI7CisgICAgICAgICAgY2FzZSBFYnRTYW1w
bGVyRXh0ZXJuYWxPRVM6CisgICAgICAgICAgICByZXR1cm4gInNhbXBsZXIyRCI7CisgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAg
VU5SRUFDSEFCTEUoKTsKKyAgICByZXR1cm4gIjx1bmtub3duIHR5cGU+IjsKK30KKworVFN0cmlu
ZyBPdXRwdXRITFNMOjp0ZXh0dXJlU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQoreworICAgIHN3
aXRjaCAodHlwZS5nZXRCYXNpY1R5cGUoKSkKKyAgICB7CisgICAgICBjYXNlIEVidFNhbXBsZXIy
RDoKKyAgICAgICAgcmV0dXJuICJUZXh0dXJlMkQiOworICAgICAgY2FzZSBFYnRTYW1wbGVyQ3Vi
ZToKKyAgICAgICAgcmV0dXJuICJUZXh0dXJlQ3ViZSI7CisgICAgICBjYXNlIEVidFNhbXBsZXJF
eHRlcm5hbE9FUzoKKyAgICAgICAgcmV0dXJuICJUZXh0dXJlMkQiOworICAgICAgZGVmYXVsdDoK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgVU5SRUFDSEFCTEUoKTsKKyAgICByZXR1cm4g
Ijx1bmtub3duIHRleHR1cmUgdHlwZT4iOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OmFycmF5
U3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQoreworICAgIGlmICghdHlwZS5pc0FycmF5KCkpCisg
ICAgeworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAgcmV0dXJuICJbIiArIHN0cih0
eXBlLmdldEFycmF5U2l6ZSgpKSArICJdIjsKK30KKworVFN0cmluZyBPdXRwdXRITFNMOjppbml0
aWFsaXplcihjb25zdCBUVHlwZSAmdHlwZSkKK3sKKyAgICBUU3RyaW5nIHN0cmluZzsKKworICAg
IHNpemVfdCBzaXplID0gdHlwZS5nZXRPYmplY3RTaXplKCk7CisgICAgZm9yIChzaXplX3QgY29t
cG9uZW50ID0gMDsgY29tcG9uZW50IDwgc2l6ZTsgY29tcG9uZW50KyspCisgICAgeworICAgICAg
ICBzdHJpbmcgKz0gIjAiOworCisgICAgICAgIGlmIChjb21wb25lbnQgKyAxIDwgc2l6ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgc3RyaW5nICs9ICIsICI7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gInsiICsgc3RyaW5nICsgIn0iOworfQorCit2b2lkIE91dHB1dEhMU0w6OmFk
ZENvbnN0cnVjdG9yKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5nICZuYW1lLCBjb25z
dCBUSW50ZXJtU2VxdWVuY2UgKnBhcmFtZXRlcnMpCit7CisgICAgaWYgKG5hbWUgPT0gIiIpCisg
ICAgeworICAgICAgICByZXR1cm47ICAgLy8gTmFtZWxlc3Mgc3RydWN0dXJlcyBkb24ndCBoYXZl
IGNvbnN0cnVjdG9ycworICAgIH0KKworICAgIGlmICh0eXBlLmdldFN0cnVjdCgpICYmIG1TdHJ1
Y3ROYW1lcy5maW5kKGRlY29yYXRlKG5hbWUpKSAhPSBtU3RydWN0TmFtZXMuZW5kKCkpCisgICAg
eworICAgICAgICByZXR1cm47ICAgLy8gQWxyZWFkeSBhZGRlZAorICAgIH0KKworICAgIFRUeXBl
IGN0b3JUeXBlID0gdHlwZTsKKyAgICBjdG9yVHlwZS5jbGVhckFycmF5bmVzcygpOworICAgIGN0
b3JUeXBlLnNldFByZWNpc2lvbihFYnBIaWdoKTsKKyAgICBjdG9yVHlwZS5zZXRRdWFsaWZpZXIo
RXZxVGVtcG9yYXJ5KTsKKworICAgIFRTdHJpbmcgY3Rvck5hbWUgPSB0eXBlLmdldFN0cnVjdCgp
ID8gZGVjb3JhdGUobmFtZSkgOiBuYW1lOworCisgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxUVHlw
ZT4gUGFyYW1ldGVyQXJyYXk7CisgICAgUGFyYW1ldGVyQXJyYXkgY3RvclBhcmFtZXRlcnM7CisK
KyAgICBpZiAodHlwZS5nZXRTdHJ1Y3QoKSkKKyAgICB7CisgICAgICAgIG1TdHJ1Y3ROYW1lcy5p
bnNlcnQoZGVjb3JhdGUobmFtZSkpOworCisgICAgICAgIFRTdHJpbmcgc3RydWN0dXJlOworICAg
ICAgICBzdHJ1Y3R1cmUgKz0gInN0cnVjdCAiICsgZGVjb3JhdGUobmFtZSkgKyAiXG4iCisgICAg
ICAgICAgICAgICAgICAgICAie1xuIjsKKworICAgICAgICBjb25zdCBURmllbGRMaXN0ICZmaWVs
ZHMgPSB0eXBlLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgY29uc3QgVEZpZWxkICpmaWVsZCA9IGZpZWxkc1tpXTsKKworICAgICAgICAgICAgc3RydWN0
dXJlICs9ICIgICAgIiArIHR5cGVTdHJpbmcoKmZpZWxkLT50eXBlKCkpICsgIiAiICsgZGVjb3Jh
dGVGaWVsZChmaWVsZC0+bmFtZSgpLCB0eXBlKSArIGFycmF5U3RyaW5nKCpmaWVsZC0+dHlwZSgp
KSArICI7XG4iOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0dXJlICs9ICJ9O1xuIjsKKwor
ICAgICAgICBpZiAoc3RkOjpmaW5kKG1TdHJ1Y3REZWNsYXJhdGlvbnMuYmVnaW4oKSwgbVN0cnVj
dERlY2xhcmF0aW9ucy5lbmQoKSwgc3RydWN0dXJlKSA9PSBtU3RydWN0RGVjbGFyYXRpb25zLmVu
ZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBtU3RydWN0RGVjbGFyYXRpb25zLnB1c2hfYmFj
ayhzdHJ1Y3R1cmUpOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGN0b3JQ
YXJhbWV0ZXJzLnB1c2hfYmFjaygqZmllbGRzW2ldLT50eXBlKCkpOworICAgICAgICB9CisgICAg
fQorICAgIGVsc2UgaWYgKHBhcmFtZXRlcnMpCisgICAgeworICAgICAgICBmb3IgKFRJbnRlcm1T
ZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgcGFyYW1ldGVyID0gcGFyYW1ldGVycy0+YmVnaW4oKTsg
cGFyYW1ldGVyICE9IHBhcmFtZXRlcnMtPmVuZCgpOyBwYXJhbWV0ZXIrKykKKyAgICAgICAgewor
ICAgICAgICAgICAgY3RvclBhcmFtZXRlcnMucHVzaF9iYWNrKCgqcGFyYW1ldGVyKS0+Z2V0QXNU
eXBlZCgpLT5nZXRUeXBlKCkpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgVU5SRUFDSEFC
TEUoKTsKKworICAgIFRTdHJpbmcgY29uc3RydWN0b3I7CisKKyAgICBpZiAoY3RvclR5cGUuZ2V0
U3RydWN0KCkpCisgICAgeworICAgICAgICBjb25zdHJ1Y3RvciArPSBjdG9yTmFtZSArICIgIiAr
IGN0b3JOYW1lICsgIl9jdG9yKCI7CisgICAgfQorICAgIGVsc2UgICAvLyBCdWlsdC1pbiB0eXBl
CisgICAgeworICAgICAgICBjb25zdHJ1Y3RvciArPSB0eXBlU3RyaW5nKGN0b3JUeXBlKSArICIg
IiArIGN0b3JOYW1lICsgIigiOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW50IHBhcmFt
ZXRlciA9IDA7IHBhcmFtZXRlciA8IGN0b3JQYXJhbWV0ZXJzLnNpemUoKTsgcGFyYW1ldGVyKysp
CisgICAgeworICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IGN0b3JQYXJhbWV0ZXJzW3BhcmFt
ZXRlcl07CisKKyAgICAgICAgY29uc3RydWN0b3IgKz0gdHlwZVN0cmluZyh0eXBlKSArICIgeCIg
KyBzdHIocGFyYW1ldGVyKSArIGFycmF5U3RyaW5nKHR5cGUpOworCisgICAgICAgIGlmIChwYXJh
bWV0ZXIgPCBjdG9yUGFyYW1ldGVycy5zaXplKCkgLSAxKQorICAgICAgICB7CisgICAgICAgICAg
ICBjb25zdHJ1Y3RvciArPSAiLCAiOworICAgICAgICB9CisgICAgfQorCisgICAgY29uc3RydWN0
b3IgKz0gIilcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIjsKKworICAgIGlmIChjdG9yVHlw
ZS5nZXRTdHJ1Y3QoKSkKKyAgICB7CisgICAgICAgIGNvbnN0cnVjdG9yICs9ICIgICAgIiArIGN0
b3JOYW1lICsgIiBzdHJ1Y3R1cmUgPSB7IjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgY29uc3RydWN0b3IgKz0gIiAgICByZXR1cm4gIiArIHR5cGVTdHJpbmcoY3RvclR5cGUpICsg
IigiOworICAgIH0KKworICAgIGlmIChjdG9yVHlwZS5pc01hdHJpeCgpICYmIGN0b3JQYXJhbWV0
ZXJzLnNpemUoKSA9PSAxKQorICAgIHsKKyAgICAgICAgaW50IGRpbSA9IGN0b3JUeXBlLmdldE5v
bWluYWxTaXplKCk7CisgICAgICAgIGNvbnN0IFRUeXBlICZwYXJhbWV0ZXIgPSBjdG9yUGFyYW1l
dGVyc1swXTsKKworICAgICAgICBpZiAocGFyYW1ldGVyLmlzU2NhbGFyKCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGRpbTsgcm93KyspCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgZGltOyBjb2wr
KykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9
IFRTdHJpbmcoKHJvdyA9PSBjb2wpID8gIngwIiA6ICIwLjAiKTsKKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChyb3cgPCBkaW0gLSAxIHx8IGNvbCA8IGRpbSAt
IDEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
cnVjdG9yICs9ICIsICI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocGFyYW1ldGVyLmlz
TWF0cml4KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8
IGRpbTsgcm93KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgY29s
ID0gMDsgY29sIDwgZGltOyBjb2wrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChyb3cgPCBwYXJhbWV0ZXIuZ2V0Tm9taW5hbFNpemUoKSAmJiBjb2wgPCBwYXJh
bWV0ZXIuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gVFN0cmluZygieDAiKSArICJbIiArIHN0cihy
b3cpICsgIl0iICsgIlsiICsgc3RyKGNvbCkgKyAiXSI7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSBUU3RyaW5nKChyb3cgPT0gY29sKSA/ICIx
LjAiIDogIjAuMCIpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHJvdyA8IGRpbSAtIDEgfHwgY29sIDwgZGltIC0gMSkKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gIiwgIjsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIHNpemVfdCByZW1haW5pbmdDb21wb25lbnRzID0gY3RvclR5cGUuZ2V0T2JqZWN0
U2l6ZSgpOworICAgICAgICBzaXplX3QgcGFyYW1ldGVySW5kZXggPSAwOworCisgICAgICAgIHdo
aWxlIChyZW1haW5pbmdDb21wb25lbnRzID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgY29u
c3QgVFR5cGUgJnBhcmFtZXRlciA9IGN0b3JQYXJhbWV0ZXJzW3BhcmFtZXRlckluZGV4XTsKKyAg
ICAgICAgICAgIGNvbnN0IHNpemVfdCBwYXJhbWV0ZXJTaXplID0gcGFyYW1ldGVyLmdldE9iamVj
dFNpemUoKTsKKyAgICAgICAgICAgIGJvb2wgbW9yZVBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJJbmRl
eCArIDEgPCBjdG9yUGFyYW1ldGVycy5zaXplKCk7CisKKyAgICAgICAgICAgIGNvbnN0cnVjdG9y
ICs9ICJ4IiArIHN0cihwYXJhbWV0ZXJJbmRleCk7CisKKyAgICAgICAgICAgIGlmIChwYXJhbWV0
ZXIuaXNTY2FsYXIoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQocGFy
YW1ldGVyU2l6ZSA8PSByZW1haW5pbmdDb21wb25lbnRzKTsKKyAgICAgICAgICAgICAgICByZW1h
aW5pbmdDb21wb25lbnRzIC09IHBhcmFtZXRlclNpemU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIGlmIChwYXJhbWV0ZXIuaXNWZWN0b3IoKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpZiAocmVtYWluaW5nQ29tcG9uZW50cyA9PSBwYXJhbWV0ZXJTaXplIHx8IG1v
cmVQYXJhbWV0ZXJzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKHBhcmFtZXRlclNpemUgPD0gcmVtYWluaW5nQ29tcG9uZW50cyk7CisgICAgICAgICAgICAg
ICAgICAgIHJlbWFpbmluZ0NvbXBvbmVudHMgLT0gcGFyYW1ldGVyU2l6ZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVtYWluaW5nQ29tcG9uZW50cyA8IHN0
YXRpY19jYXN0PHNpemVfdD4ocGFyYW1ldGVyLmdldE5vbWluYWxTaXplKCkpKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChyZW1haW5pbmdDb21wb25lbnRz
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBj
b25zdHJ1Y3RvciArPSAiLngiOyAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNl
IDI6IGNvbnN0cnVjdG9yICs9ICIueHkiOyAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgMzogY29uc3RydWN0b3IgKz0gIi54eXoiOyAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSA0OiBjb25zdHJ1Y3RvciArPSAiLnh5enciOyBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nQ29tcG9uZW50cyA9IDA7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHBhcmFtZXRlci5pc01hdHJpeCgpIHx8IHBhcmFt
ZXRlci5nZXRTdHJ1Y3QoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
cmVtYWluaW5nQ29tcG9uZW50cyA9PSBwYXJhbWV0ZXJTaXplIHx8IG1vcmVQYXJhbWV0ZXJzKTsK
KyAgICAgICAgICAgICAgICBBU1NFUlQocGFyYW1ldGVyU2l6ZSA8PSByZW1haW5pbmdDb21wb25l
bnRzKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZW1haW5pbmdDb21wb25l
bnRzIC09IHBhcmFtZXRlclNpemU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIFVO
UkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgIGlmIChtb3JlUGFyYW1ldGVycykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJJbmRleCsrOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAocmVtYWluaW5nQ29tcG9uZW50cykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSAiLCAiOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKGN0b3JUeXBlLmdldFN0cnVjdCgpKQorICAgIHsKKyAgICAg
ICAgY29uc3RydWN0b3IgKz0gIn07XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHN0cnVjdHVyZTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiI7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNvbnN0cnVjdG9yICs9ICIpO1xuIgorICAgICAgICAg
ICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisKKyAgICBtQ29uc3RydWN0b3JzLmluc2VydChj
b25zdHJ1Y3Rvcik7Cit9CisKK2NvbnN0IENvbnN0YW50VW5pb24gKk91dHB1dEhMU0w6OndyaXRl
Q29uc3RhbnRVbmlvbihjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgQ29uc3RhbnRVbmlvbiAqY29u
c3RVbmlvbikKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKKworICAgIGlmICh0
eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAgICB7CisgICAgICAgIG91dCA8PCBz
dHJ1Y3RMb29rdXAodHlwZS5nZXRTdHJ1Y3QoKS0+bmFtZSgpKSArICJfY3RvcigiOworICAgICAg
ICAKKyAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gdHlwZS5nZXRTdHJ1Y3QoKS0+
ZmllbGRzKCk7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgp
OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICpmaWVsZFR5cGUgPSBm
aWVsZHNbaV0tPnR5cGUoKTsKKworICAgICAgICAgICAgY29uc3RVbmlvbiA9IHdyaXRlQ29uc3Rh
bnRVbmlvbigqZmllbGRUeXBlLCBjb25zdFVuaW9uKTsKKworICAgICAgICAgICAgaWYgKGkgIT0g
ZmllbGRzLnNpemUoKSAtIDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8
ICIsICI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBvdXQgPDwgIikiOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzaXplX3Qgc2l6ZSA9IHR5cGUuZ2V0T2Jq
ZWN0U2l6ZSgpOworICAgICAgICBib29sIHdyaXRlVHlwZSA9IHNpemUgPiAxOworICAgICAgICAK
KyAgICAgICAgaWYgKHdyaXRlVHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8IHR5
cGVTdHJpbmcodHlwZSkgPDwgIigiOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzaXplOyBpKyssIGNvbnN0VW5pb24rKykKKyAgICAgICAgeworICAgICAgICAg
ICAgc3dpdGNoIChjb25zdFVuaW9uLT5nZXRUeXBlKCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgIGNhc2UgRWJ0RmxvYXQ6IG91dCA8PCBzdGQ6Om1pbihGTFRfTUFYLCBzdGQ6Om1heCgt
RkxUX01BWCwgY29uc3RVbmlvbi0+Z2V0RkNvbnN0KCkpKTsgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0SW50OiAgIG91dCA8PCBjb25zdFVuaW9uLT5nZXRJQ29uc3QoKTsgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogIG91dCA8PCBjb25zdFVuaW9uLT5nZXRCQ29uc3Qo
KTsgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmIChpICE9IHNpemUgLSAxKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgaWYgKHdyaXRlVHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICIp
IjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBjb25zdFVuaW9uOworfQorCitUU3Ry
aW5nIE91dHB1dEhMU0w6OnNjb3BlU3RyaW5nKHVuc2lnbmVkIGludCBkZXB0aExpbWl0KQorewor
ICAgIFRTdHJpbmcgc3RyaW5nOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBt
U2NvcGVCcmFja2V0LnNpemUoKSAmJiBpIDwgZGVwdGhMaW1pdDsgaSsrKQorICAgIHsKKyAgICAg
ICAgc3RyaW5nICs9ICJfIiArIHN0cihpKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RyaW5nOwor
fQorCitUU3RyaW5nIE91dHB1dEhMU0w6OnNjb3BlZFN0cnVjdChjb25zdCBUU3RyaW5nICZ0eXBl
TmFtZSkKK3sKKyAgICBpZiAodHlwZU5hbWUgPT0gIiIpCisgICAgeworICAgICAgICByZXR1cm4g
dHlwZU5hbWU7CisgICAgfQorCisgICAgcmV0dXJuIHR5cGVOYW1lICsgc2NvcGVTdHJpbmcobVNj
b3BlRGVwdGgpOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OnN0cnVjdExvb2t1cChjb25zdCBU
U3RyaW5nICZ0eXBlTmFtZSkKK3sKKyAgICBmb3IgKGludCBkZXB0aCA9IG1TY29wZURlcHRoOyBk
ZXB0aCA+PSAwOyBkZXB0aC0tKQorICAgIHsKKyAgICAgICAgVFN0cmluZyBzY29wZWROYW1lID0g
ZGVjb3JhdGUodHlwZU5hbWUgKyBzY29wZVN0cmluZyhkZXB0aCkpOworCisgICAgICAgIGZvciAo
U3RydWN0TmFtZXM6Oml0ZXJhdG9yIHN0cnVjdE5hbWUgPSBtU3RydWN0TmFtZXMuYmVnaW4oKTsg
c3RydWN0TmFtZSAhPSBtU3RydWN0TmFtZXMuZW5kKCk7IHN0cnVjdE5hbWUrKykKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKCpzdHJ1Y3ROYW1lID09IHNjb3BlZE5hbWUpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNjb3BlZE5hbWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBVTlJFQUNIQUJMRSgpOyAgIC8vIFNob3VsZCBoYXZlIGZv
dW5kIGEgbWF0Y2hpbmcgY29uc3RydWN0b3IKKworICAgIHJldHVybiB0eXBlTmFtZTsKK30KKwor
VFN0cmluZyBPdXRwdXRITFNMOjpkZWNvcmF0ZShjb25zdCBUU3RyaW5nICZzdHJpbmcpCit7Cisg
ICAgaWYgKHN0cmluZy5jb21wYXJlKDAsIDMsICJnbF8iKSAhPSAwICYmIHN0cmluZy5jb21wYXJl
KDAsIDMsICJkeF8iKSAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJfIiArIHN0cmluZzsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIHN0cmluZzsKK30KKworVFN0cmluZyBPdXRwdXRITFNM
OjpkZWNvcmF0ZVVuaWZvcm0oY29uc3QgVFN0cmluZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAmdHlw
ZSkKK3sKKyAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTYW1wbGVyRXh0ZXJuYWxP
RVMpCisgICAgeworICAgICAgICByZXR1cm4gImV4XyIgKyBzdHJpbmc7CisgICAgfQorICAgIAor
ICAgIHJldHVybiBkZWNvcmF0ZShzdHJpbmcpOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OmRl
Y29yYXRlRmllbGQoY29uc3QgVFN0cmluZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAmc3RydWN0dXJl
KQoreworICAgIGlmIChzdHJ1Y3R1cmUuZ2V0U3RydWN0KCktPm5hbWUoKS5jb21wYXJlKDAsIDMs
ICJnbF8iKSAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29yYXRlKHN0cmluZyk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHN0cmluZzsKK30KKworVFN0cmluZyBPdXRwdXRITFNMOjpyZWdp
c3RlclN0cmluZyhUSW50ZXJtU3ltYm9sICpvcGVyYW5kKQoreworICAgIEFTU0VSVChvcGVyYW5k
LT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFVbmlmb3JtKTsKKworICAgIGlmIChJc1NhbXBsZXIob3Bl
cmFuZC0+Z2V0QmFzaWNUeXBlKCkpKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJzIiArIHN0cihz
YW1wbGVyUmVnaXN0ZXIob3BlcmFuZCkpOworICAgIH0KKworICAgIHJldHVybiAiYyIgKyBzdHIo
dW5pZm9ybVJlZ2lzdGVyKG9wZXJhbmQpKTsKK30KKworaW50IE91dHB1dEhMU0w6OnNhbXBsZXJS
ZWdpc3RlcihUSW50ZXJtU3ltYm9sICpzYW1wbGVyKQoreworICAgIGNvbnN0IFRUeXBlICZ0eXBl
ID0gc2FtcGxlci0+Z2V0VHlwZSgpOworICAgIEFTU0VSVChJc1NhbXBsZXIodHlwZS5nZXRCYXNp
Y1R5cGUoKSkpOworCisgICAgaW50IGluZGV4ID0gbVNhbXBsZXJSZWdpc3RlcjsKKyAgICBtU2Ft
cGxlclJlZ2lzdGVyICs9IHNhbXBsZXItPnRvdGFsUmVnaXN0ZXJDb3VudCgpOworCisgICAgZGVj
bGFyZVVuaWZvcm0odHlwZSwgc2FtcGxlci0+Z2V0U3ltYm9sKCksIGluZGV4KTsKKworICAgIHJl
dHVybiBpbmRleDsKK30KKworaW50IE91dHB1dEhMU0w6OnVuaWZvcm1SZWdpc3RlcihUSW50ZXJt
U3ltYm9sICp1bmlmb3JtKQoreworICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gdW5pZm9ybS0+Z2V0
VHlwZSgpOworICAgIEFTU0VSVCghSXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKTsKKwor
ICAgIGludCBpbmRleCA9IG1Vbmlmb3JtUmVnaXN0ZXI7CisgICAgbVVuaWZvcm1SZWdpc3RlciAr
PSB1bmlmb3JtLT50b3RhbFJlZ2lzdGVyQ291bnQoKTsKKworICAgIGRlY2xhcmVVbmlmb3JtKHR5
cGUsIHVuaWZvcm0tPmdldFN5bWJvbCgpLCBpbmRleCk7CisKKyAgICByZXR1cm4gaW5kZXg7Cit9
CisKK3ZvaWQgT3V0cHV0SExTTDo6ZGVjbGFyZVVuaWZvcm0oY29uc3QgVFR5cGUgJnR5cGUsIGNv
bnN0IFRTdHJpbmcgJm5hbWUsIGludCBpbmRleCkKK3sKKyAgICBUU3RydWN0dXJlICpzdHJ1Y3R1
cmUgPSB0eXBlLmdldFN0cnVjdCgpOworCisgICAgaWYgKCFzdHJ1Y3R1cmUpCisgICAgeworICAg
ICAgICBtQWN0aXZlVW5pZm9ybXMucHVzaF9iYWNrKFVuaWZvcm0oZ2xWYXJpYWJsZVR5cGUodHlw
ZSksIGdsVmFyaWFibGVQcmVjaXNpb24odHlwZSksIG5hbWUuY19zdHIoKSwgdHlwZS5nZXRBcnJh
eVNpemUoKSwgaW5kZXgpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY29uc3Qg
VEZpZWxkTGlzdCAmZmllbGRzID0gc3RydWN0dXJlLT5maWVsZHMoKTsKKworICAgICAgICBpZiAo
dHlwZS5pc0FycmF5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBlbGVtZW50SW5kZXgg
PSBpbmRleDsKKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlLmdldEFycmF5
U2l6ZSgpOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3Qg
aiA9IDA7IGogPCBmaWVsZHMuc2l6ZSgpOyBqKyspCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBjb25zdCBUVHlwZSAmZmllbGRUeXBlID0gKmZpZWxkc1tqXS0+dHlwZSgp
OworICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nIHVuaWZvcm1OYW1lID0gbmFtZSAr
ICJbIiArIHN0cihpKSArICJdLiIgKyBmaWVsZHNbal0tPm5hbWUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgZGVjbGFyZVVuaWZvcm0oZmllbGRUeXBlLCB1bmlmb3JtTmFtZSwgZWxlbWVudEluZGV4
KTsKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudEluZGV4ICs9IGZpZWxkVHlwZS50b3RhbFJl
Z2lzdGVyQ291bnQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgZmllbGRJbmRleCA9
IGluZGV4OworCisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpZWxkcy5zaXpl
KCk7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAmZmll
bGRUeXBlID0gKmZpZWxkc1tpXS0+dHlwZSgpOworICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJp
bmcgdW5pZm9ybU5hbWUgPSBuYW1lICsgIi4iICsgZmllbGRzW2ldLT5uYW1lKCk7CisgICAgICAg
ICAgICAgICAgZGVjbGFyZVVuaWZvcm0oZmllbGRUeXBlLCB1bmlmb3JtTmFtZSwgZmllbGRJbmRl
eCk7CisgICAgICAgICAgICAgICAgZmllbGRJbmRleCArPSBmaWVsZFR5cGUudG90YWxSZWdpc3Rl
ckNvdW50KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK0dMZW51bSBP
dXRwdXRITFNMOjpnbFZhcmlhYmxlVHlwZShjb25zdCBUVHlwZSAmdHlwZSkKK3sKKyAgICBpZiAo
dHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRGbG9hdCkKKyAgICB7CisgICAgICAgIGlmICh0eXBl
LmlzU2NhbGFyKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHTF9GTE9BVDsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIGlmICh0eXBlLmlzVmVjdG9yKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHN3aXRjaCh0eXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIEdMX0ZMT0FUX1ZFQzI7CisgICAgICAgICAgICAg
IGNhc2UgMzogcmV0dXJuIEdMX0ZMT0FUX1ZFQzM7CisgICAgICAgICAgICAgIGNhc2UgNDogcmV0
dXJuIEdMX0ZMT0FUX1ZFQzQ7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodHlwZS5pc01hdHJp
eCgpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2godHlwZS5nZXROb21pbmFsU2l6ZSgp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBHTF9GTE9BVF9N
QVQyOworICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBHTF9GTE9BVF9NQVQzOworICAgICAg
ICAgICAgICBjYXNlIDQ6IHJldHVybiBHTF9GTE9BVF9NQVQ0OworICAgICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUo
KSA9PSBFYnRJbnQpCisgICAgeworICAgICAgICBpZiAodHlwZS5pc1NjYWxhcigpKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gR0xfSU5UOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKHR5cGUuaXNWZWN0b3IoKSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKHR5cGUu
Z2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAyOiBy
ZXR1cm4gR0xfSU5UX1ZFQzI7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIEdMX0lOVF9W
RUMzOworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBHTF9JTlRfVkVDNDsKKyAgICAgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUuZ2V0
QmFzaWNUeXBlKCkgPT0gRWJ0Qm9vbCkKKyAgICB7CisgICAgICAgIGlmICh0eXBlLmlzU2NhbGFy
KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHTF9CT09MOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKHR5cGUuaXNWZWN0b3IoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
c3dpdGNoKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSAyOiByZXR1cm4gR0xfQk9PTF9WRUMyOworICAgICAgICAgICAgICBjYXNlIDM6IHJl
dHVybiBHTF9CT09MX1ZFQzM7CisgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIEdMX0JPT0xf
VkVDNDsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIGVs
c2UgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U2FtcGxlcjJEKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEdMX1NBTVBMRVJfMkQ7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUuZ2V0QmFz
aWNUeXBlKCkgPT0gRWJ0U2FtcGxlckN1YmUpCisgICAgeworICAgICAgICByZXR1cm4gR0xfU0FN
UExFUl9DVUJFOworICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICByZXR1cm4g
R0xfTk9ORTsKK30KKworR0xlbnVtIE91dHB1dEhMU0w6OmdsVmFyaWFibGVQcmVjaXNpb24oY29u
c3QgVFR5cGUgJnR5cGUpCit7CisgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0Rmxv
YXQpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0UHJlY2lzaW9uKCkpCisgICAgICAg
IHsKKyAgICAgICAgICBjYXNlIEVicEhpZ2g6ICAgcmV0dXJuIEdMX0hJR0hfRkxPQVQ7CisgICAg
ICAgICAgY2FzZSBFYnBNZWRpdW06IHJldHVybiBHTF9NRURJVU1fRkxPQVQ7CisgICAgICAgICAg
Y2FzZSBFYnBMb3c6ICAgIHJldHVybiBHTF9MT1dfRkxPQVQ7CisgICAgICAgICAgY2FzZSBFYnBV
bmRlZmluZWQ6CisgICAgICAgICAgICAvLyBTaG91bGQgYmUgZGVmaW5lZCBhcyB0aGUgZGVmYXVs
dCBwcmVjaXNpb24gYnkgdGhlIHBhcnNlcgorICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9
PSBFYnRJbnQpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0UHJlY2lzaW9uKCkpCisg
ICAgICAgIHsKKyAgICAgICAgICBjYXNlIEVicEhpZ2g6ICAgcmV0dXJuIEdMX0hJR0hfSU5UOwor
ICAgICAgICAgIGNhc2UgRWJwTWVkaXVtOiByZXR1cm4gR0xfTUVESVVNX0lOVDsKKyAgICAgICAg
ICBjYXNlIEVicExvdzogICAgcmV0dXJuIEdMX0xPV19JTlQ7CisgICAgICAgICAgY2FzZSBFYnBV
bmRlZmluZWQ6CisgICAgICAgICAgICAvLyBTaG91bGQgYmUgZGVmaW5lZCBhcyB0aGUgZGVmYXVs
dCBwcmVjaXNpb24gYnkgdGhlIHBhcnNlcgorICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBPdGhlciB0eXBlcyAoYm9vbGVhbiwgc2Ft
cGxlcikgZG9uJ3QgaGF2ZSBhIHByZWNpc2lvbgorICAgIHJldHVybiBHTF9OT05FOworfQorCit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9PdXRwdXRITFNMLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9PdXRwdXRITFNMLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2FmZDhlOWFkYWIwMTE3YzQ5OWZi
YzcxZWUzZmM5Y2JkMzZiMmRmZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuaApAQCAtMCwwICsxLDE2
NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9PVVRQVVRITFNMX0hf
CisjZGVmaW5lIENPTVBJTEVSX09VVFBVVEhMU0xfSF8KKworI2luY2x1ZGUgPGxpc3Q+CisjaW5j
bHVkZSA8c2V0PgorI2luY2x1ZGUgPG1hcD4KKworI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVk
ZSA8R0xFUzIvZ2wyLmg+CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVk
aWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmgiCisKK25hbWVzcGFjZSBzaAor
eworY2xhc3MgVW5mb2xkU2hvcnRDaXJjdWl0OworCitjbGFzcyBPdXRwdXRITFNMIDogcHVibGlj
IFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIE91dHB1dEhMU0woVFBhcnNlQ29u
dGV4dCAmY29udGV4dCwgY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMsIFNoU2hh
ZGVyT3V0cHV0IG91dHB1dFR5cGUpOworICAgIH5PdXRwdXRITFNMKCk7CisKKyAgICB2b2lkIG91
dHB1dCgpOworCisgICAgVEluZm9TaW5rQmFzZSAmZ2V0Qm9keVN0cmVhbSgpOworICAgIGNvbnN0
IEFjdGl2ZVVuaWZvcm1zICZnZXRVbmlmb3JtcygpOworCisgICAgVFN0cmluZyB0eXBlU3RyaW5n
KGNvbnN0IFRUeXBlICZ0eXBlKTsKKyAgICBUU3RyaW5nIHRleHR1cmVTdHJpbmcoY29uc3QgVFR5
cGUgJnR5cGUpOworICAgIHN0YXRpYyBUU3RyaW5nIHF1YWxpZmllclN0cmluZyhUUXVhbGlmaWVy
IHF1YWxpZmllcik7CisgICAgc3RhdGljIFRTdHJpbmcgYXJyYXlTdHJpbmcoY29uc3QgVFR5cGUg
JnR5cGUpOworICAgIHN0YXRpYyBUU3RyaW5nIGluaXRpYWxpemVyKGNvbnN0IFRUeXBlICZ0eXBl
KTsKKyAgICBzdGF0aWMgVFN0cmluZyBkZWNvcmF0ZShjb25zdCBUU3RyaW5nICZzdHJpbmcpOyAg
ICAgICAgICAgICAgICAgICAgICAvLyBQcmVwZW5kcyBhbiB1bmRlcnNjb3JlIHRvIGF2b2lkIG5h
bWluZyBjbGFzaGVzCisgICAgc3RhdGljIFRTdHJpbmcgZGVjb3JhdGVVbmlmb3JtKGNvbnN0IFRT
dHJpbmcgJnN0cmluZywgY29uc3QgVFR5cGUgJnR5cGUpOworICAgIHN0YXRpYyBUU3RyaW5nIGRl
Y29yYXRlRmllbGQoY29uc3QgVFN0cmluZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAmc3RydWN0dXJl
KTsKKworICBwcm90ZWN0ZWQ6CisgICAgdm9pZCBoZWFkZXIoKTsKKworICAgIC8vIFZpc2l0IEFT
VCBub2RlcyBhbmQgb3V0cHV0IHRoZWlyIGNvZGUgdG8gdGhlIGJvZHkgc3RyZWFtCisgICAgdm9p
ZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7CisgICAgdm9pZCB2aXNpdENvbnN0YW50VW5p
b24oVEludGVybUNvbnN0YW50VW5pb24qKTsKKyAgICBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZp
c2l0LCBUSW50ZXJtQmluYXJ5Kik7CisgICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBU
SW50ZXJtVW5hcnkqKTsKKyAgICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50
ZXJtU2VsZWN0aW9uKik7CisgICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVElu
dGVybUFnZ3JlZ2F0ZSopOworICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJt
TG9vcCopOworICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gq
KTsKKworICAgIHZvaWQgdHJhdmVyc2VTdGF0ZW1lbnRzKFRJbnRlcm1Ob2RlICpub2RlKTsKKyAg
ICBib29sIGlzU2luZ2xlU3RhdGVtZW50KFRJbnRlcm1Ob2RlICpub2RlKTsKKyAgICBib29sIGhh
bmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxvb3AgKm5vZGUpOworICAgIHZvaWQgb3V0cHV0VHJp
cGxldChWaXNpdCB2aXNpdCwgY29uc3QgVFN0cmluZyAmcHJlU3RyaW5nLCBjb25zdCBUU3RyaW5n
ICZpblN0cmluZywgY29uc3QgVFN0cmluZyAmcG9zdFN0cmluZyk7CisgICAgdm9pZCBvdXRwdXRM
aW5lRGlyZWN0aXZlKGludCBsaW5lKTsKKyAgICBUU3RyaW5nIGFyZ3VtZW50U3RyaW5nKGNvbnN0
IFRJbnRlcm1TeW1ib2wgKnN5bWJvbCk7CisgICAgaW50IHZlY3RvclNpemUoY29uc3QgVFR5cGUg
JnR5cGUpIGNvbnN0OworCisgICAgdm9pZCBhZGRDb25zdHJ1Y3Rvcihjb25zdCBUVHlwZSAmdHlw
ZSwgY29uc3QgVFN0cmluZyAmbmFtZSwgY29uc3QgVEludGVybVNlcXVlbmNlICpwYXJhbWV0ZXJz
KTsKKyAgICBjb25zdCBDb25zdGFudFVuaW9uICp3cml0ZUNvbnN0YW50VW5pb24oY29uc3QgVFR5
cGUgJnR5cGUsIGNvbnN0IENvbnN0YW50VW5pb24gKmNvbnN0VW5pb24pOworCisgICAgVFN0cmlu
ZyBzY29wZVN0cmluZyh1bnNpZ25lZCBpbnQgZGVwdGhMaW1pdCk7CisgICAgVFN0cmluZyBzY29w
ZWRTdHJ1Y3QoY29uc3QgVFN0cmluZyAmdHlwZU5hbWUpOworICAgIFRTdHJpbmcgc3RydWN0TG9v
a3VwKGNvbnN0IFRTdHJpbmcgJnR5cGVOYW1lKTsKKworICAgIFRQYXJzZUNvbnRleHQgJm1Db250
ZXh0OworICAgIGNvbnN0IFNoU2hhZGVyT3V0cHV0IG1PdXRwdXRUeXBlOworICAgIFVuZm9sZFNo
b3J0Q2lyY3VpdCAqbVVuZm9sZFNob3J0Q2lyY3VpdDsKKyAgICBib29sIG1JbnNpZGVGdW5jdGlv
bjsKKworICAgIC8vIE91dHB1dCBzdHJlYW1zCisgICAgVEluZm9TaW5rQmFzZSBtSGVhZGVyOwor
ICAgIFRJbmZvU2lua0Jhc2UgbUJvZHk7CisgICAgVEluZm9TaW5rQmFzZSBtRm9vdGVyOworCisg
ICAgdHlwZWRlZiBzdGQ6Om1hcDxUU3RyaW5nLCBUSW50ZXJtU3ltYm9sKj4gUmVmZXJlbmNlZFN5
bWJvbHM7CisgICAgUmVmZXJlbmNlZFN5bWJvbHMgbVJlZmVyZW5jZWRVbmlmb3JtczsKKyAgICBS
ZWZlcmVuY2VkU3ltYm9scyBtUmVmZXJlbmNlZEF0dHJpYnV0ZXM7CisgICAgUmVmZXJlbmNlZFN5
bWJvbHMgbVJlZmVyZW5jZWRWYXJ5aW5nczsKKworICAgIC8vIFBhcmFtZXRlcnMgZGV0ZXJtaW5p
bmcgd2hhdCBnb2VzIGluIHRoZSBoZWFkZXIgb3V0cHV0CisgICAgYm9vbCBtVXNlc1RleHR1cmUy
RDsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJEX2JpYXM7CisgICAgYm9vbCBtVXNlc1RleHR1cmUy
RExvZDsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJEUHJvajsKKyAgICBib29sIG1Vc2VzVGV4dHVy
ZTJEUHJval9iaWFzOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kOworICAgIGJvb2wg
bVVzZXNUZXh0dXJlQ3ViZTsKKyAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmVfYmlhczsKKyAgICBi
b29sIG1Vc2VzVGV4dHVyZUN1YmVMb2Q7CisgICAgYm9vbCBtVXNlc1RleHR1cmUyRExvZDA7Cisg
ICAgYm9vbCBtVXNlc1RleHR1cmUyRExvZDBfYmlhczsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJE
UHJvakxvZDA7CisgICAgYm9vbCBtVXNlc1RleHR1cmUyRFByb2pMb2QwX2JpYXM7CisgICAgYm9v
bCBtVXNlc1RleHR1cmVDdWJlTG9kMDsKKyAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2Jp
YXM7CisgICAgYm9vbCBtVXNlc0ZyYWdDb2xvcjsKKyAgICBib29sIG1Vc2VzRnJhZ0RhdGE7Cisg
ICAgYm9vbCBtVXNlc0RlcHRoUmFuZ2U7CisgICAgYm9vbCBtVXNlc0ZyYWdDb29yZDsKKyAgICBi
b29sIG1Vc2VzUG9pbnRDb29yZDsKKyAgICBib29sIG1Vc2VzRnJvbnRGYWNpbmc7CisgICAgYm9v
bCBtVXNlc1BvaW50U2l6ZTsKKyAgICBib29sIG1Vc2VzRnJhZ0RlcHRoOworICAgIGJvb2wgbVVz
ZXNYb3I7CisgICAgYm9vbCBtVXNlc01vZDE7CisgICAgYm9vbCBtVXNlc01vZDJ2OworICAgIGJv
b2wgbVVzZXNNb2QyZjsKKyAgICBib29sIG1Vc2VzTW9kM3Y7CisgICAgYm9vbCBtVXNlc01vZDNm
OworICAgIGJvb2wgbVVzZXNNb2Q0djsKKyAgICBib29sIG1Vc2VzTW9kNGY7CisgICAgYm9vbCBt
VXNlc0ZhY2Vmb3J3YXJkMTsKKyAgICBib29sIG1Vc2VzRmFjZWZvcndhcmQyOworICAgIGJvb2wg
bVVzZXNGYWNlZm9yd2FyZDM7CisgICAgYm9vbCBtVXNlc0ZhY2Vmb3J3YXJkNDsKKyAgICBib29s
IG1Vc2VzQXRhbjJfMTsKKyAgICBib29sIG1Vc2VzQXRhbjJfMjsKKyAgICBib29sIG1Vc2VzQXRh
bjJfMzsKKyAgICBib29sIG1Vc2VzQXRhbjJfNDsKKyAgICBib29sIG1Vc2VzRGlzY2FyZFJld3Jp
dGluZzsKKworICAgIGludCBtTnVtUmVuZGVyVGFyZ2V0czsKKworICAgIHR5cGVkZWYgc3RkOjpz
ZXQ8VFN0cmluZz4gQ29uc3RydWN0b3JzOworICAgIENvbnN0cnVjdG9ycyBtQ29uc3RydWN0b3Jz
OworCisgICAgdHlwZWRlZiBzdGQ6OnNldDxUU3RyaW5nPiBTdHJ1Y3ROYW1lczsKKyAgICBTdHJ1
Y3ROYW1lcyBtU3RydWN0TmFtZXM7CisKKyAgICB0eXBlZGVmIHN0ZDo6bGlzdDxUU3RyaW5nPiBT
dHJ1Y3REZWNsYXJhdGlvbnM7CisgICAgU3RydWN0RGVjbGFyYXRpb25zIG1TdHJ1Y3REZWNsYXJh
dGlvbnM7CisKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPGludD4gU2NvcGVCcmFja2V0OworICAg
IFNjb3BlQnJhY2tldCBtU2NvcGVCcmFja2V0OworICAgIHVuc2lnbmVkIGludCBtU2NvcGVEZXB0
aDsKKworICAgIGludCBtVW5pcXVlSW5kZXg7ICAgLy8gRm9yIGNyZWF0aW5nIHVuaXF1ZSBuYW1l
cworCisgICAgYm9vbCBtQ29udGFpbnNMb29wRGlzY29udGludWl0eTsKKyAgICBib29sIG1PdXRw
dXRMb2QwRnVuY3Rpb247CisgICAgYm9vbCBtSW5zaWRlRGlzY29udGludW91c0xvb3A7CisKKyAg
ICBUSW50ZXJtU3ltYm9sICptRXhjZXNzaXZlTG9vcEluZGV4OworCisgICAgaW50IG1Vbmlmb3Jt
UmVnaXN0ZXI7CisgICAgaW50IG1TYW1wbGVyUmVnaXN0ZXI7CisKKyAgICBUU3RyaW5nIHJlZ2lz
dGVyU3RyaW5nKFRJbnRlcm1TeW1ib2wgKm9wZXJhbmQpOworICAgIGludCBzYW1wbGVyUmVnaXN0
ZXIoVEludGVybVN5bWJvbCAqc2FtcGxlcik7CisgICAgaW50IHVuaWZvcm1SZWdpc3RlcihUSW50
ZXJtU3ltYm9sICp1bmlmb3JtKTsKKyAgICB2b2lkIGRlY2xhcmVVbmlmb3JtKGNvbnN0IFRUeXBl
ICZ0eXBlLCBjb25zdCBUU3RyaW5nICZuYW1lLCBpbnQgaW5kZXgpOworICAgIHN0YXRpYyBHTGVu
dW0gZ2xWYXJpYWJsZVR5cGUoY29uc3QgVFR5cGUgJnR5cGUpOworICAgIHN0YXRpYyBHTGVudW0g
Z2xWYXJpYWJsZVByZWNpc2lvbihjb25zdCBUVHlwZSAmdHlwZSk7CisKKyAgICBBY3RpdmVVbmlm
b3JtcyBtQWN0aXZlVW5pZm9ybXM7Cit9OworfQorCisjZW5kaWYgICAvLyBDT01QSUxFUl9PVVRQ
VVRITFNMX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYTFl
MGQxNDBjNWE2MWViOGQ2ZGUyMWUxOTVmODYzNzAwYTRiOGY3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250
ZXh0LmNwcApAQCAtMCwwICsxLDE2MDIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5oIgorCisjaW5jbHVkZSA8c3RkYXJn
Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
Z2xzbGFuZy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9Tb3VyY2VMb2NhdGlv
bi5oIgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFN1Yi0gdmVjdG9yIGFuZCBtYXRyaXggZmll
bGRzCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vCisvLyBMb29rIGF0IGEgJy4nIGZpZWxkIHNl
bGVjdG9yIHN0cmluZyBhbmQgY2hhbmdlIGl0IGludG8gb2Zmc2V0cworLy8gZm9yIGEgdmVjdG9y
LgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VWZWN0b3JGaWVsZHMoY29uc3QgVFN0cmlu
ZyYgY29tcFN0cmluZywgaW50IHZlY1NpemUsIFRWZWN0b3JGaWVsZHMmIGZpZWxkcywgY29uc3Qg
VFNvdXJjZUxvYyYgbGluZSkKK3sKKyAgICBmaWVsZHMubnVtID0gKGludCkgY29tcFN0cmluZy5z
aXplKCk7CisgICAgaWYgKGZpZWxkcy5udW0gPiA0KSB7CisgICAgICAgIGVycm9yKGxpbmUsICJp
bGxlZ2FsIHZlY3RvciBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCkpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZW51bSB7CisgICAgICAgIGV4eXp3LAor
ICAgICAgICBlcmdiYSwKKyAgICAgICAgZXN0cHEKKyAgICB9IGZpZWxkU2V0WzRdOworCisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZHMubnVtOyArK2kpIHsKKyAgICAgICAgc3dpdGNoIChj
b21wU3RyaW5nW2ldKSAgeworICAgICAgICBjYXNlICd4JzogCisgICAgICAgICAgICBmaWVsZHMu
b2Zmc2V0c1tpXSA9IDA7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGV4eXp3OworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3InOiAKKyAgICAgICAgICAgIGZpZWxkcy5vZmZz
ZXRzW2ldID0gMDsKKyAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXJnYmE7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSAncyc6CisgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tp
XSA9IDA7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGVzdHBxOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgJ3knOiAKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0g
MTsKKyAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXh5enc7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSAnZyc6IAorICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAxOwor
ICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBlcmdiYTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlICd0JzoKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMTsKKyAgICAg
ICAgICAgIGZpZWxkU2V0W2ldID0gZXN0cHE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSAneic6IAorICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAyOworICAgICAgICAg
ICAgZmllbGRTZXRbaV0gPSBleHl6dzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
ICdiJzogCisgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDI7CisgICAgICAgICAgICBm
aWVsZFNldFtpXSA9IGVyZ2JhOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3An
OgorICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAyOworICAgICAgICAgICAgZmllbGRT
ZXRbaV0gPSBlc3RwcTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAgY2Fz
ZSAndyc6IAorICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAzOworICAgICAgICAgICAg
ZmllbGRTZXRbaV0gPSBleHl6dzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdh
JzogCisgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDM7CisgICAgICAgICAgICBmaWVs
ZFNldFtpXSA9IGVyZ2JhOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3EnOgor
ICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAzOworICAgICAgICAgICAgZmllbGRTZXRb
aV0gPSBlc3RwcTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgdmVjdG9yIGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBT
dHJpbmcuY19zdHIoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpZWxkcy5udW07ICsraSkgeworICAgICAg
ICBpZiAoZmllbGRzLm9mZnNldHNbaV0gPj0gdmVjU2l6ZSkgeworICAgICAgICAgICAgZXJyb3Io
bGluZSwgInZlY3RvciBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlIiwgIGNvbXBTdHJpbmcu
Y19zdHIoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoaSA+IDApIHsKKyAgICAgICAgICAgIGlmIChmaWVsZFNldFtpXSAhPSBmaWVsZFNldFtp
LTFdKSB7CisgICAgICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgLSB2ZWN0b3IgY29t
cG9uZW50IGZpZWxkcyBub3QgZnJvbSB0aGUgc2FtZSBzZXQiLCBjb21wU3RyaW5nLmNfc3RyKCkp
OworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCisKKy8vCisvLyBMb29rIGF0IGEgJy4n
IGZpZWxkIHNlbGVjdG9yIHN0cmluZyBhbmQgY2hhbmdlIGl0IGludG8gb2Zmc2V0cworLy8gZm9y
IGEgbWF0cml4LgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VNYXRyaXhGaWVsZHMoY29u
c3QgVFN0cmluZyYgY29tcFN0cmluZywgaW50IG1hdFNpemUsIFRNYXRyaXhGaWVsZHMmIGZpZWxk
cywgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKK3sKKyAgICBmaWVsZHMud2hvbGVSb3cgPSBmYWxz
ZTsKKyAgICBmaWVsZHMud2hvbGVDb2wgPSBmYWxzZTsKKyAgICBmaWVsZHMucm93ID0gLTE7Cisg
ICAgZmllbGRzLmNvbCA9IC0xOworCisgICAgaWYgKGNvbXBTdHJpbmcuc2l6ZSgpICE9IDIpIHsK
KyAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbGVuZ3RoIG9mIG1hdHJpeCBmaWVsZCBzZWxl
Y3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaWYgKGNvbXBTdHJpbmdbMF0gPT0gJ18nKSB7CisgICAgICAgIGlmIChjb21wU3Ry
aW5nWzFdIDwgJzAnIHx8IGNvbXBTdHJpbmdbMV0gPiAnMycpIHsKKyAgICAgICAgICAgIGVycm9y
KGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3Ry
KCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGZpZWxk
cy53aG9sZUNvbCA9IHRydWU7CisgICAgICAgIGZpZWxkcy5jb2wgPSBjb21wU3RyaW5nWzFdIC0g
JzAnOworICAgIH0gZWxzZSBpZiAoY29tcFN0cmluZ1sxXSA9PSAnXycpIHsKKyAgICAgICAgaWYg
KGNvbXBTdHJpbmdbMF0gPCAnMCcgfHwgY29tcFN0cmluZ1swXSA+ICczJykgeworICAgICAgICAg
ICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJp
bmcuY19zdHIoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgZmllbGRzLndob2xlUm93ID0gdHJ1ZTsKKyAgICAgICAgZmllbGRzLnJvdyA9IGNvbXBTdHJp
bmdbMF0gLSAnMCc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGNvbXBTdHJpbmdbMF0gPCAn
MCcgfHwgY29tcFN0cmluZ1swXSA+ICczJyB8fAorICAgICAgICAgICAgY29tcFN0cmluZ1sxXSA8
ICcwJyB8fCBjb21wU3RyaW5nWzFdID4gJzMnKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAi
aWxsZWdhbCBtYXRyaXggZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBmaWVsZHMucm93ID0g
Y29tcFN0cmluZ1swXSAtICcwJzsKKyAgICAgICAgZmllbGRzLmNvbCA9IGNvbXBTdHJpbmdbMV0g
LSAnMCc7CisgICAgfQorCisgICAgaWYgKGZpZWxkcy5yb3cgPj0gbWF0U2l6ZSB8fCBmaWVsZHMu
Y29sID49IG1hdFNpemUpIHsKKyAgICAgICAgZXJyb3IobGluZSwgIm1hdHJpeCBmaWVsZCBzZWxl
Y3Rpb24gb3V0IG9mIHJhbmdlIiwgY29tcFN0cmluZy5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCisvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor
Ly8KKy8vIEVycm9ycworLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLworLy8gVHJhY2sgd2hldGhl
ciBlcnJvcnMgaGF2ZSBvY2N1cnJlZC4KKy8vCit2b2lkIFRQYXJzZUNvbnRleHQ6OnJlY292ZXIo
KQoreworfQorCisvLworLy8gVXNlZCBieSBmbGV4L2Jpc29uIHRvIG91dHB1dCBhbGwgc3ludGF4
IGFuZCBwYXJzaW5nIGVycm9ycy4KKy8vCit2b2lkIFRQYXJzZUNvbnRleHQ6OmVycm9yKGNvbnN0
IFRTb3VyY2VMb2MmIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
cmVhc29uLCBjb25zdCBjaGFyKiB0b2tlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIGV4dHJhSW5mbykKK3sKKyAgICBwcDo6U291cmNlTG9jYXRpb24gc3JjTG9jOwor
ICAgIHNyY0xvYy5maWxlID0gbG9jLmZpcnN0X2ZpbGU7CisgICAgc3JjTG9jLmxpbmUgPSBsb2Mu
Zmlyc3RfbGluZTsKKyAgICBkaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpQ
UF9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjTG9jLCByZWFzb24sIHRva2Vu
LCBleHRyYUluZm8pOworCit9CisKK3ZvaWQgVFBhcnNlQ29udGV4dDo6d2FybmluZyhjb25zdCBU
U291cmNlTG9jJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
cmVhc29uLCBjb25zdCBjaGFyKiB0b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiBleHRyYUluZm8pIHsKKyAgICBwcDo6U291cmNlTG9jYXRpb24gc3JjTG9jOwor
ICAgIHNyY0xvYy5maWxlID0gbG9jLmZpcnN0X2ZpbGU7CisgICAgc3JjTG9jLmxpbmUgPSBsb2Mu
Zmlyc3RfbGluZTsKKyAgICBkaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpQ
UF9XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNMb2MsIHJlYXNvbiwgdG9r
ZW4sIGV4dHJhSW5mbyk7Cit9CisKK3ZvaWQgVFBhcnNlQ29udGV4dDo6dHJhY2UoY29uc3QgY2hh
ciogc3RyKQoreworICAgIGRpYWdub3N0aWNzLndyaXRlRGVidWcoc3RyKTsKK30KKworLy8KKy8v
IFNhbWUgZXJyb3IgbWVzc2FnZSBmb3IgYWxsIHBsYWNlcyBhc3NpZ25tZW50cyBkb24ndCB3b3Jr
LgorLy8KK3ZvaWQgVFBhcnNlQ29udGV4dDo6YXNzaWduRXJyb3IoY29uc3QgVFNvdXJjZUxvYyYg
bGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgbGVmdCwgVFN0cmluZyByaWdodCkKK3sKKyAg
ICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgZXh0cmFJbmZvU3RyZWFt
IDw8ICJjYW5ub3QgY29udmVydCBmcm9tICciIDw8IHJpZ2h0IDw8ICInIHRvICciIDw8IGxlZnQg
PDwgIiciOworICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIo
KTsKKyAgICBlcnJvcihsaW5lLCAiIiwgb3AsIGV4dHJhSW5mby5jX3N0cigpKTsKK30KKworLy8K
Ky8vIFNhbWUgZXJyb3IgbWVzc2FnZSBmb3IgYWxsIHBsYWNlcyB1bmFyeSBvcGVyYXRpb25zIGRv
bid0IHdvcmsuCisvLwordm9pZCBUUGFyc2VDb250ZXh0Ojp1bmFyeU9wRXJyb3IoY29uc3QgVFNv
dXJjZUxvYyYgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgb3BlcmFuZCkKK3sKKyAgICBz
dGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgZXh0cmFJbmZvU3RyZWFtIDw8
ICJubyBvcGVyYXRpb24gJyIgPDwgb3AgPDwgIicgZXhpc3RzIHRoYXQgdGFrZXMgYW4gb3BlcmFu
ZCBvZiB0eXBlICIgPDwgb3BlcmFuZCAKKyAgICAgICAgICAgICAgICAgICAgPDwgIiAob3IgdGhl
cmUgaXMgbm8gYWNjZXB0YWJsZSBjb252ZXJzaW9uKSI7CisgICAgc3RkOjpzdHJpbmcgZXh0cmFJ
bmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgIGVycm9yKGxpbmUsICIgd3Jvbmcgb3Bl
cmFuZCB0eXBlIiwgb3AsIGV4dHJhSW5mby5jX3N0cigpKTsKK30KKworLy8KKy8vIFNhbWUgZXJy
b3IgbWVzc2FnZSBmb3IgYWxsIGJpbmFyeSBvcGVyYXRpb25zIGRvbid0IHdvcmsuCisvLwordm9p
ZCBUUGFyc2VDb250ZXh0OjpiaW5hcnlPcEVycm9yKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNv
bnN0IGNoYXIqIG9wLCBUU3RyaW5nIGxlZnQsIFRTdHJpbmcgcmlnaHQpCit7CisgICAgc3RkOjpz
dHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAibm8g
b3BlcmF0aW9uICciIDw8IG9wIDw8ICInIGV4aXN0cyB0aGF0IHRha2VzIGEgbGVmdC1oYW5kIG9w
ZXJhbmQgb2YgdHlwZSAnIiA8PCBsZWZ0IAorICAgICAgICAgICAgICAgICAgICA8PCAiJyBhbmQg
YSByaWdodCBvcGVyYW5kIG9mIHR5cGUgJyIgPDwgcmlnaHQgPDwgIicgKG9yIHRoZXJlIGlzIG5v
IGFjY2VwdGFibGUgY29udmVyc2lvbikiOworICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4
dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICBlcnJvcihsaW5lLCAiIHdyb25nIG9wZXJhbmQgdHlw
ZXMgIiwgb3AsIGV4dHJhSW5mby5jX3N0cigpKTsgCit9CisKK2Jvb2wgVFBhcnNlQ29udGV4dDo6
cHJlY2lzaW9uRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUHJlY2lzaW9uIHBy
ZWNpc2lvbiwgVEJhc2ljVHlwZSB0eXBlKXsKKyAgICBpZiAoIWNoZWNrc1ByZWNpc2lvbkVycm9y
cykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHN3aXRjaCggdHlwZSApeworICAgIGNhc2Ug
RWJ0RmxvYXQ6CisgICAgICAgIGlmKCBwcmVjaXNpb24gPT0gRWJwVW5kZWZpbmVkICl7CisgICAg
ICAgICAgICBlcnJvciggbGluZSwgIk5vIHByZWNpc2lvbiBzcGVjaWZpZWQgZm9yIChmbG9hdCki
LCAiIiApOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgIGlmKCBwcmVjaXNpb24gPT0gRWJwVW5kZWZp
bmVkICl7CisgICAgICAgICAgICBlcnJvciggbGluZSwgIk5vIHByZWNpc2lvbiBzcGVjaWZpZWQg
KGludCkiLCAiIiApOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKKy8vCisvLyBCb3RoIHRlc3QgYW5kIGlmIG5lY2Vzc2FyeSwg
c3BpdCBvdXQgYW4gZXJyb3IsIHRvIHNlZSBpZiB0aGUgbm9kZSBpcyByZWFsbHkKKy8vIGFuIGwt
dmFsdWUgdGhhdCBjYW4gYmUgb3BlcmF0ZWQgb24gdGhpcyB3YXkuCisvLworLy8gUmV0dXJucyB0
cnVlIGlmIHRoZSB3YXMgYW4gZXJyb3IuCisvLworYm9vbCBUUGFyc2VDb250ZXh0OjpsVmFsdWVF
cnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUSW50ZXJt
VHlwZWQqIG5vZGUpCit7CisgICAgVEludGVybVN5bWJvbCogc3ltTm9kZSA9IG5vZGUtPmdldEFz
U3ltYm9sTm9kZSgpOworICAgIFRJbnRlcm1CaW5hcnkqIGJpbmFyeU5vZGUgPSBub2RlLT5nZXRB
c0JpbmFyeU5vZGUoKTsKKworICAgIGlmIChiaW5hcnlOb2RlKSB7CisgICAgICAgIGJvb2wgZXJy
b3JSZXR1cm47CisKKyAgICAgICAgc3dpdGNoKGJpbmFyeU5vZGUtPmdldE9wKCkpIHsKKyAgICAg
ICAgY2FzZSBFT3BJbmRleERpcmVjdDoKKyAgICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0Ogor
ICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3RydWN0OgorICAgICAgICAgICAgcmV0dXJuIGxW
YWx1ZUVycm9yQ2hlY2sobGluZSwgb3AsIGJpbmFyeU5vZGUtPmdldExlZnQoKSk7CisgICAgICAg
IGNhc2UgRU9wVmVjdG9yU3dpenpsZToKKyAgICAgICAgICAgIGVycm9yUmV0dXJuID0gbFZhbHVl
RXJyb3JDaGVjayhsaW5lLCBvcCwgYmluYXJ5Tm9kZS0+Z2V0TGVmdCgpKTsKKyAgICAgICAgICAg
IGlmICghZXJyb3JSZXR1cm4pIHsKKyAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0WzRdID0gezAs
MCwwLDB9OworCisgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiByaWdodE5vZGUgPSBiaW5h
cnlOb2RlLT5nZXRSaWdodCgpOworICAgICAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUgKmFn
Z3JOb2RlID0gcmlnaHROb2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBwID0gYWdnck5v
ZGUtPmdldFNlcXVlbmNlKCkuYmVnaW4oKTsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHAgIT0gYWdnck5vZGUtPmdldFNlcXVlbmNlKCkuZW5kKCk7IHAr
KykgeworICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWUgPSAoKnApLT5nZXRBc1R5cGVkKCkt
PmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRJQ29uc3QoMCk7CisgICAgICAgICAgICAgICAgICAg
IG9mZnNldFt2YWx1ZV0rKzsgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0W3Zh
bHVlXSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1
ZSBvZiBzd2l6emxlIGNhbm5vdCBoYXZlIGR1cGxpY2F0ZSBjb21wb25lbnRzIiwgb3ApOworCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gCisKKyAgICAgICAgICAgIHJldHVy
biBlcnJvclJldHVybjsKKyAgICAgICAgZGVmYXVsdDogCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCk7CisK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisKKyAgICBjb25zdCBjaGFyKiBzeW1ib2wg
PSAwOworICAgIGlmIChzeW1Ob2RlICE9IDApCisgICAgICAgIHN5bWJvbCA9IHN5bU5vZGUtPmdl
dFN5bWJvbCgpLmNfc3RyKCk7CisKKyAgICBjb25zdCBjaGFyKiBtZXNzYWdlID0gMDsKKyAgICBz
d2l0Y2ggKG5vZGUtPmdldFF1YWxpZmllcigpKSB7CisgICAgY2FzZSBFdnFDb25zdDogICAgICAg
ICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYSBjb25zdCI7ICAgICAgICBicmVhazsKKyAgICBj
YXNlIEV2cUNvbnN0UmVhZE9ubHk6ICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhIGNvbnN0Ijsg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxQXR0cmlidXRlOiAgICAgIG1lc3NhZ2UgPSAiY2Fu
J3QgbW9kaWZ5IGFuIGF0dHJpYnV0ZSI7ICAgYnJlYWs7CisgICAgY2FzZSBFdnFVbmlmb3JtOiAg
ICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYSB1bmlmb3JtIjsgICAgICBicmVhazsKKyAg
ICBjYXNlIEV2cVZhcnlpbmdJbjogICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhIHZhcnlp
bmciOyAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxRnJhZ0Nvb3JkOiAgICAgIG1lc3NhZ2UgPSAi
Y2FuJ3QgbW9kaWZ5IGdsX0ZyYWdDb29yZCI7ICAgYnJlYWs7CisgICAgY2FzZSBFdnFGcm9udEZh
Y2luZzogICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgZ2xfRnJvbnRGYWNpbmciOyBicmVhazsK
KyAgICBjYXNlIEV2cVBvaW50Q29vcmQ6ICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBnbF9Q
b2ludENvb3JkIjsgIGJyZWFrOworICAgIGRlZmF1bHQ6CisKKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gVHlwZSB0aGF0IGNhbid0IGJlIHdyaXR0ZW4gdG8/CisgICAgICAgIC8vCisgICAgICAgIHN3
aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6
CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6CisgICAgICAgICAgICBtZXNzYWdlID0gImNh
bid0IG1vZGlmeSBhIHNhbXBsZXIiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RWJ0Vm9pZDoKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IHZvaWQiOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IAorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobWVzc2FnZSA9PSAwICYmIGJpbmFyeU5vZGUgPT0g
MCAmJiBzeW1Ob2RlID09IDApIHsKKyAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIHJlcXVp
cmVkIiwgb3ApOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworCisgICAgLy8KKyAg
ICAvLyBFdmVyeXRoaW5nIGVsc2UgaXMgb2theSwgbm8gZXJyb3IuCisgICAgLy8KKyAgICBpZiAo
bWVzc2FnZSA9PSAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLworICAgIC8vIElm
IHdlIGdldCBoZXJlLCB3ZSBoYXZlIGFuIGVycm9yIGFuZCBhIG1lc3NhZ2UuCisgICAgLy8KKyAg
ICBpZiAoc3ltTm9kZSkgeworICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJl
YW07CisgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiXCIiIDw8IHN5bWJvbCA8PCAiXCIgKCIg
PDwgbWVzc2FnZSA8PCAiKSI7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJh
SW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIHJlcXVpcmVk
Iiwgb3AsIGV4dHJhSW5mby5jX3N0cigpKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHN0
ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgZXh0cmFJbmZvU3RyZWFt
IDw8ICIoIiA8PCBtZXNzYWdlIDw8ICIpIjsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZv
ID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUg
cmVxdWlyZWQiLCBvcCwgZXh0cmFJbmZvLmNfc3RyKCkpOworICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCisvLworLy8gQm90aCB0ZXN0LCBhbmQgaWYgbmVjZXNzYXJ5IHNwaXQgb3V0IGFu
IGVycm9yLCB0byBzZWUgaWYgdGhlIG5vZGUgaXMgcmVhbGx5CisvLyBhIGNvbnN0YW50LgorLy8K
Ky8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgd2FzIGFuIGVycm9yLgorLy8KK2Jvb2wgVFBhcnNlQ29u
dGV4dDo6Y29uc3RFcnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSkKK3sKKyAgICBpZiAobm9k
ZS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImNvbnN0YW50IGV4cHJlc3Npb24gcmVxdWlyZWQi
LCAiIik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8KKy8vIEJvdGggdGVzdCwgYW5kIGlm
IG5lY2Vzc2FyeSBzcGl0IG91dCBhbiBlcnJvciwgdG8gc2VlIGlmIHRoZSBub2RlIGlzIHJlYWxs
eQorLy8gYW4gaW50ZWdlci4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHdhcyBhbiBlcnJv
ci4KKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OmludGVnZXJFcnJvckNoZWNrKFRJbnRlcm1UeXBl
ZCogbm9kZSwgY29uc3QgY2hhciogdG9rZW4pCit7CisgICAgaWYgKG5vZGUtPmdldEJhc2ljVHlw
ZSgpID09IEVidEludCAmJiBub2RlLT5nZXROb21pbmFsU2l6ZSgpID09IDEpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImludGVnZXIgZXhwcmVz
c2lvbiByZXF1aXJlZCIsIHRva2VuKTsKKworICAgIHJldHVybiB0cnVlOworfQorCisvLworLy8g
Qm90aCB0ZXN0LCBhbmQgaWYgbmVjZXNzYXJ5IHNwaXQgb3V0IGFuIGVycm9yLCB0byBzZWUgaWYg
d2UgYXJlIGN1cnJlbnRseQorLy8gZ2xvYmFsbHkgc2NvcGVkLgorLy8KKy8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgd2FzIGFuIGVycm9yLgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6Z2xvYmFsRXJy
b3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBib29sIGdsb2JhbCwgY29uc3QgY2hhciog
dG9rZW4pCit7CisgICAgaWYgKGdsb2JhbCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ZXJyb3IobGluZSwgIm9ubHkgYWxsb3dlZCBhdCBnbG9iYWwgc2NvcGUiLCB0b2tlbik7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworLy8KKy8vIEZvciBub3csIGtlZXAgaXQgc2ltcGxlOiAgaWYg
aXQgc3RhcnRzICJnbF8iLCBpdCdzIHJlc2VydmVkLCBpbmRlcGVuZGVudAorLy8gb2Ygc2NvcGUu
ICBFeGNlcHQsIGlmIHRoZSBzeW1ib2wgdGFibGUgaXMgYXQgdGhlIGJ1aWx0LWluIHB1c2gtbGV2
ZWwsCisvLyB3aGljaCBpcyB3aGVuIHdlIGFyZSBwYXJzaW5nIGJ1aWx0LWlucy4KKy8vIEFsc28g
Y2hlY2tzIGZvciAid2ViZ2xfIiBhbmQgIl93ZWJnbF8iIHJlc2VydmVkIGlkZW50aWZpZXJzIGlm
IHBhcnNpbmcgYQorLy8gd2ViZ2wgc2hhZGVyLgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGVy
ZSB3YXMgYW4gZXJyb3IuCisvLworYm9vbCBUUGFyc2VDb250ZXh0OjpyZXNlcnZlZEVycm9yQ2hl
Y2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllcikKK3sK
KyAgICBzdGF0aWMgY29uc3QgY2hhciogcmVzZXJ2ZWRFcnJNc2cgPSAicmVzZXJ2ZWQgYnVpbHQt
aW4gbmFtZSI7CisgICAgaWYgKCFzeW1ib2xUYWJsZS5hdEJ1aWx0SW5MZXZlbCgpKSB7CisgICAg
ICAgIGlmIChpZGVudGlmaWVyLmNvbXBhcmUoMCwgMywgImdsXyIpID09IDApIHsKKyAgICAgICAg
ICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAiZ2xfIik7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNXZWJHTEJhc2VkU3BlYyhzaGFkZXJT
cGVjKSkgeworICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuY29tcGFyZSgwLCA2LCAid2ViZ2xf
IikgPT0gMCkgeworICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAi
d2ViZ2xfIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoaWRlbnRpZmllci5jb21wYXJlKDAsIDcsICJfd2ViZ2xfIikgPT0gMCkg
eworICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAiX3dlYmdsXyIp
OworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKHNoYWRlclNwZWMgPT0gU0hfQ1NTX1NIQURFUlNfU1BFQyAmJiBpZGVudGlmaWVyLmNv
bXBhcmUoMCwgNCwgImNzc18iKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgZXJyb3IobGluZSwg
cmVzZXJ2ZWRFcnJNc2csICJjc3NfIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlkZW50aWZpZXIuZmluZCgiX18i
KSAhPSBUU3RyaW5nOjpucG9zKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWRlbnRpZmll
cnMgY29udGFpbmluZyB0d28gY29uc2VjdXRpdmUgdW5kZXJzY29yZXMgKF9fKSBhcmUgcmVzZXJ2
ZWQgYXMgcG9zc2libGUgZnV0dXJlIGtleXdvcmRzIiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCisvLworLy8gTWFrZSBzdXJlIHRoZXJlIGlzIGVub3VnaCBkYXRhIHByb3ZpZGVk
IHRvIHRoZSBjb25zdHJ1Y3RvciB0byBidWlsZAorLy8gc29tZXRoaW5nIG9mIHRoZSB0eXBlIG9m
IHRoZSBjb25zdHJ1Y3Rvci4gIEFsc28gcmV0dXJucyB0aGUgdHlwZSBvZgorLy8gdGhlIGNvbnN0
cnVjdG9yLgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaW4gY29u
c3RydWN0aW9uLgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6Y29uc3RydWN0b3JFcnJvckNoZWNr
KGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRJbnRlcm1Ob2RlKiBub2RlLCBURnVuY3Rpb24mIGZ1
bmN0aW9uLCBUT3BlcmF0b3Igb3AsIFRUeXBlKiB0eXBlKQoreworICAgICp0eXBlID0gZnVuY3Rp
b24uZ2V0UmV0dXJuVHlwZSgpOworCisgICAgYm9vbCBjb25zdHJ1Y3RpbmdNYXRyaXggPSBmYWxz
ZTsKKyAgICBzd2l0Y2gob3ApIHsKKyAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6CisgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RNYXQzOgorICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0NDoKKyAgICAgICAg
Y29uc3RydWN0aW5nTWF0cml4ID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDog
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vCisgICAgLy8gTm90ZTogSXQncyBva2F5
IHRvIGhhdmUgdG9vIG1hbnkgY29tcG9uZW50cyBhdmFpbGFibGUsIGJ1dCBub3Qgb2theSB0byBo
YXZlIHVudXNlZAorICAgIC8vIGFyZ3VtZW50cy4gICdmdWxsJyB3aWxsIGdvIHRvIHRydWUgd2hl
biBlbm91Z2ggYXJncyBoYXZlIGJlZW4gc2Vlbi4gIElmIHdlIGxvb3AKKyAgICAvLyBhZ2Fpbiwg
dGhlcmUgaXMgYW4gZXh0cmEgYXJndW1lbnQsIHNvICdvdmVyZnVsbCcgd2lsbCBiZWNvbWUgdHJ1
ZS4KKyAgICAvLworCisgICAgc2l6ZV90IHNpemUgPSAwOworICAgIGJvb2wgY29uc3RUeXBlID0g
dHJ1ZTsKKyAgICBib29sIGZ1bGwgPSBmYWxzZTsKKyAgICBib29sIG92ZXJGdWxsID0gZmFsc2U7
CisgICAgYm9vbCBtYXRyaXhJbk1hdHJpeCA9IGZhbHNlOworICAgIGJvb2wgYXJyYXlBcmcgPSBm
YWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQo
KTsgKytpKSB7CisgICAgICAgIGNvbnN0IFRQYXJhbWV0ZXImIHBhcmFtID0gZnVuY3Rpb24uZ2V0
UGFyYW0oaSk7CisgICAgICAgIHNpemUgKz0gcGFyYW0udHlwZS0+Z2V0T2JqZWN0U2l6ZSgpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKGNvbnN0cnVjdGluZ01hdHJpeCAmJiBwYXJhbS50eXBlLT5p
c01hdHJpeCgpKQorICAgICAgICAgICAgbWF0cml4SW5NYXRyaXggPSB0cnVlOworICAgICAgICBp
ZiAoZnVsbCkKKyAgICAgICAgICAgIG92ZXJGdWxsID0gdHJ1ZTsKKyAgICAgICAgaWYgKG9wICE9
IEVPcENvbnN0cnVjdFN0cnVjdCAmJiAhdHlwZS0+aXNBcnJheSgpICYmIHNpemUgPj0gdHlwZS0+
Z2V0T2JqZWN0U2l6ZSgpKQorICAgICAgICAgICAgZnVsbCA9IHRydWU7CisgICAgICAgIGlmIChw
YXJhbS50eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFDb25zdCkKKyAgICAgICAgICAgIGNvbnN0
VHlwZSA9IGZhbHNlOworICAgICAgICBpZiAocGFyYW0udHlwZS0+aXNBcnJheSgpKQorICAgICAg
ICAgICAgYXJyYXlBcmcgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAoY29uc3RUeXBlKQor
ICAgICAgICB0eXBlLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3QpOworCisgICAgaWYgKHR5cGUtPmlz
QXJyYXkoKSAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KHR5cGUtPmdldEFycmF5U2l6ZSgpKSAhPSBm
dW5jdGlvbi5nZXRQYXJhbUNvdW50KCkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImFycmF5IGNv
bnN0cnVjdG9yIG5lZWRzIG9uZSBhcmd1bWVudCBwZXIgYXJyYXkgZWxlbWVudCIsICJjb25zdHJ1
Y3RvciIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYXJyYXlBcmcg
JiYgb3AgIT0gRU9wQ29uc3RydWN0U3RydWN0KSB7CisgICAgICAgIGVycm9yKGxpbmUsICJjb25z
dHJ1Y3RpbmcgZnJvbSBhIG5vbi1kZXJlZmVyZW5jZWQgYXJyYXkiLCAiY29uc3RydWN0b3IiKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKG1hdHJpeEluTWF0cml4ICYm
ICF0eXBlLT5pc0FycmF5KCkpIHsKKyAgICAgICAgaWYgKGZ1bmN0aW9uLmdldFBhcmFtQ291bnQo
KSAhPSAxKSB7CisgICAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBtYXRyaXggZnJv
bSBtYXRyaXggY2FuIG9ubHkgdGFrZSBvbmUgYXJndW1lbnQiLCAiY29uc3RydWN0b3IiKTsKKyAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChvdmVyRnVs
bCkgeworICAgICAgICBlcnJvcihsaW5lLCAidG9vIG1hbnkgYXJndW1lbnRzIiwgImNvbnN0cnVj
dG9yIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAob3AgPT0g
RU9wQ29uc3RydWN0U3RydWN0ICYmICF0eXBlLT5pc0FycmF5KCkgJiYgdHlwZS0+Z2V0U3RydWN0
KCktPmZpZWxkcygpLnNpemUoKSAhPSBmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCkpIHsKKyAgICAg
ICAgZXJyb3IobGluZSwgIk51bWJlciBvZiBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzIGRvZXMgbm90
IG1hdGNoIHRoZSBudW1iZXIgb2Ygc3RydWN0dXJlIGZpZWxkcyIsICJjb25zdHJ1Y3RvciIpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIXR5cGUtPmlzTWF0cml4KCkg
fHwgIW1hdHJpeEluTWF0cml4KSB7CisgICAgICAgIGlmICgob3AgIT0gRU9wQ29uc3RydWN0U3Ry
dWN0ICYmIHNpemUgIT0gMSAmJiBzaXplIDwgdHlwZS0+Z2V0T2JqZWN0U2l6ZSgpKSB8fAorICAg
ICAgICAgICAgKG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCAmJiBzaXplIDwgdHlwZS0+Z2V0T2Jq
ZWN0U2l6ZSgpKSkgeworICAgICAgICAgICAgZXJyb3IobGluZSwgIm5vdCBlbm91Z2ggZGF0YSBw
cm92aWRlZCBmb3IgY29uc3RydWN0aW9uIiwgImNvbnN0cnVjdG9yIik7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFRJbnRlcm1UeXBlZCAqdHlwZWQg
PSBub2RlID8gbm9kZS0+Z2V0QXNUeXBlZCgpIDogMDsKKyAgICBpZiAodHlwZWQgPT0gMCkgewor
ICAgICAgICBlcnJvcihsaW5lLCAiY29uc3RydWN0b3IgYXJndW1lbnQgZG9lcyBub3QgaGF2ZSBh
IHR5cGUiLCAiY29uc3RydWN0b3IiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IGlmIChvcCAhPSBFT3BDb25zdHJ1Y3RTdHJ1Y3QgJiYgSXNTYW1wbGVyKHR5cGVkLT5nZXRCYXNp
Y1R5cGUoKSkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBjb252ZXJ0IGEgc2FtcGxl
ciIsICJjb25zdHJ1Y3RvciIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYg
KHR5cGVkLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkKSB7CisgICAgICAgIGVycm9yKGxpbmUs
ICJjYW5ub3QgY29udmVydCBhIHZvaWQiLCAiY29uc3RydWN0b3IiKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBUaGlzIGZ1bmN0aW9u
IGNoZWNrcyB0byBzZWUgaWYgYSB2b2lkIHZhcmlhYmxlIGhhcyBiZWVuIGRlY2xhcmVkIGFuZCBy
YWlzZSBhbiBlcnJvciBtZXNzYWdlIGZvciBzdWNoIGEgY2FzZQorLy8KKy8vIHJldHVybnMgdHJ1
ZSBpbiBjYXNlIG9mIGFuIGVycm9yCisvLworYm9vbCBUUGFyc2VDb250ZXh0Ojp2b2lkRXJyb3JD
aGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBj
b25zdCBUUHVibGljVHlwZSYgcHViVHlwZSkKK3sKKyAgICBpZiAocHViVHlwZS50eXBlID09IEVi
dFZvaWQpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQn
IiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSAKKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gVGhpcyBmdW5jdGlvbiBjaGVja3MgdG8gc2VlIGlm
IHRoZSBub2RlIChmb3IgdGhlIGV4cHJlc3Npb24pIGNvbnRhaW5zIGEgc2NhbGFyIGJvb2xlYW4g
ZXhwcmVzc2lvbiBvciBub3QKKy8vCisvLyByZXR1cm5zIHRydWUgaW4gY2FzZSBvZiBhbiBlcnJv
cgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6Ym9vbEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxv
YyYgbGluZSwgY29uc3QgVEludGVybVR5cGVkKiB0eXBlKQoreworICAgIGlmICh0eXBlLT5nZXRC
YXNpY1R5cGUoKSAhPSBFYnRCb29sIHx8IHR5cGUtPmlzQXJyYXkoKSB8fCB0eXBlLT5pc01hdHJp
eCgpIHx8IHR5cGUtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImJvb2xlYW4g
ZXhwcmVzc2lvbiBleHBlY3RlZCIsICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSAK
KworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gVGhpcyBmdW5jdGlvbiBjaGVja3MgdG8gc2Vl
IGlmIHRoZSBub2RlIChmb3IgdGhlIGV4cHJlc3Npb24pIGNvbnRhaW5zIGEgc2NhbGFyIGJvb2xl
YW4gZXhwcmVzc2lvbiBvciBub3QKKy8vCisvLyByZXR1cm5zIHRydWUgaW4gY2FzZSBvZiBhbiBl
cnJvcgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6Ym9vbEVycm9yQ2hlY2soY29uc3QgVFNvdXJj
ZUxvYyYgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlKQoreworICAgIGlmIChwVHlwZS50
eXBlICE9IEVidEJvb2wgfHwgcFR5cGUuYXJyYXkgfHwgcFR5cGUubWF0cml4IHx8IChwVHlwZS5z
aXplID4gMSkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImJvb2xlYW4gZXhwcmVzc2lvbiBleHBl
Y3RlZCIsICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSAKKworICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0OjpzYW1wbGVyRXJyb3JDaGVjayhjb25zdCBU
U291cmNlTG9jJiBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUsIGNvbnN0IGNoYXIqIHJl
YXNvbikKK3sKKyAgICBpZiAocFR5cGUudHlwZSA9PSBFYnRTdHJ1Y3QpIHsKKyAgICAgICAgaWYg
KGNvbnRhaW5zU2FtcGxlcigqcFR5cGUudXNlckRlZikpIHsKKyAgICAgICAgICAgIGVycm9yKGxp
bmUsIHJlYXNvbiwgZ2V0QmFzaWNTdHJpbmcocFR5cGUudHlwZSksICIoc3RydWN0dXJlIGNvbnRh
aW5zIGEgc2FtcGxlcikiKTsKKyAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSBpZiAo
SXNTYW1wbGVyKHBUeXBlLnR5cGUpKSB7CisgICAgICAgIGVycm9yKGxpbmUsIHJlYXNvbiwgZ2V0
QmFzaWNTdHJpbmcocFR5cGUudHlwZSkpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0OjpzdHJ1Y3RRdWFs
aWZpZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBl
JiBwVHlwZSkKK3sKKyAgICBpZiAoKHBUeXBlLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwg
cFR5cGUucXVhbGlmaWVyID09IEV2cVZhcnlpbmdPdXQgfHwgcFR5cGUucXVhbGlmaWVyID09IEV2
cUF0dHJpYnV0ZSkgJiYKKyAgICAgICAgcFR5cGUudHlwZSA9PSBFYnRTdHJ1Y3QpIHsKKyAgICAg
ICAgZXJyb3IobGluZSwgImNhbm5vdCBiZSB1c2VkIHdpdGggYSBzdHJ1Y3R1cmUiLCBnZXRRdWFs
aWZpZXJTdHJpbmcocFR5cGUucXVhbGlmaWVyKSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBpZiAocFR5cGUucXVhbGlmaWVyICE9IEV2cVVuaWZvcm0gJiYg
c2FtcGxlckVycm9yQ2hlY2sobGluZSwgcFR5cGUsICJzYW1wbGVycyBtdXN0IGJlIHVuaWZvcm0i
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
VFBhcnNlQ29udGV4dDo6cGFyYW1ldGVyU2FtcGxlckVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxv
YyYgbGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIGNvbnN0IFRUeXBlJiB0eXBlKQoreworICAg
IGlmICgocXVhbGlmaWVyID09IEV2cU91dCB8fCBxdWFsaWZpZXIgPT0gRXZxSW5PdXQpICYmIAor
ICAgICAgICAgICAgIHR5cGUuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0U3RydWN0ICYmIElzU2FtcGxl
cih0eXBlLmdldEJhc2ljVHlwZSgpKSkgeworICAgICAgICBlcnJvcihsaW5lLCAic2FtcGxlcnMg
Y2Fubm90IGJlIG91dHB1dCBwYXJhbWV0ZXJzIiwgdHlwZS5nZXRCYXNpY1N0cmluZygpKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFRQYXJzZUNvbnRleHQ6OmNvbnRhaW5zU2FtcGxlcihUVHlwZSYgdHlwZSkKK3sKKyAgICBpZiAo
SXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgeworICAgICAgICBjb25z
dCBURmllbGRMaXN0JiBmaWVsZHMgPSB0eXBlLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgICAgIGlmIChjb250YWluc1NhbXBsZXIoKmZpZWxkc1tpXS0+dHlwZSgpKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBm
YWxzZTsKK30KKworLy8KKy8vIERvIHNpemUgY2hlY2tpbmcgZm9yIGFuIGFycmF5IHR5cGUncyBz
aXplLgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCisvLworYm9v
bCBUUGFyc2VDb250ZXh0OjphcnJheVNpemVFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIFRJbnRlcm1UeXBlZCogZXhwciwgaW50JiBzaXplKQoreworICAgIFRJbnRlcm1Db25zdGFu
dFVuaW9uKiBjb25zdGFudCA9IGV4cHItPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAgIGlmIChj
b25zdGFudCA9PSAwIHx8IGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRJbnQpIHsKKyAg
ICAgICAgZXJyb3IobGluZSwgImFycmF5IHNpemUgbXVzdCBiZSBhIGNvbnN0YW50IGludGVnZXIg
ZXhwcmVzc2lvbiIsICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgc2l6
ZSA9IGNvbnN0YW50LT5nZXRJQ29uc3QoMCk7CisKKyAgICBpZiAoc2l6ZSA8PSAwKSB7CisgICAg
ICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIiwg
IiIpOworICAgICAgICBzaXplID0gMTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCisvLworLy8gU2VlIGlmIHRoaXMgcXVhbGlmaWVyIGNhbiBi
ZSBhbiBhcnJheS4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYW4gZXJyb3IuCisv
LworYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVF1YWxpZmllckVycm9yQ2hlY2soY29uc3QgVFNv
dXJjZUxvYyYgbGluZSwgVFB1YmxpY1R5cGUgdHlwZSkKK3sKKyAgICBpZiAoKHR5cGUucXVhbGlm
aWVyID09IEV2cUF0dHJpYnV0ZSkgfHwgKHR5cGUucXVhbGlmaWVyID09IEV2cUNvbnN0KSkgewor
ICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGRlY2xhcmUgYXJyYXlzIG9mIHRoaXMgcXVhbGlm
aWVyIiwgVFR5cGUodHlwZSkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLworLy8gU2Vl
IGlmIHRoaXMgdHlwZSBjYW4gYmUgYW4gYXJyYXkuCisvLworLy8gUmV0dXJucyB0cnVlIGlmIHRo
ZXJlIGlzIGFuIGVycm9yLgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlUeXBlRXJyb3JD
aGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUHVibGljVHlwZSB0eXBlKQoreworICAgIC8v
CisgICAgLy8gQ2FuIHRoZSB0eXBlIGJlIGFuIGFycmF5PworICAgIC8vCisgICAgaWYgKHR5cGUu
YXJyYXkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBkZWNsYXJlIGFycmF5cyBvZiBh
cnJheXMiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vCisvLyBE
byBhbGwgdGhlIHNlbWFudGljIGNoZWNraW5nIGZvciBkZWNsYXJpbmcgYW4gYXJyYXksIHdpdGgg
YW5kIAorLy8gd2l0aG91dCBhIHNpemUsIGFuZCBtYWtlIHRoZSByaWdodCBjaGFuZ2VzIHRvIHRo
ZSBzeW1ib2wgdGFibGUuCisvLworLy8gc2l6ZSA9PSAwIG1lYW5zIG5vIHNwZWNpZmllZCBzaXpl
LgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCisvLworYm9vbCBU
UGFyc2VDb250ZXh0OjphcnJheUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFN0
cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUgdHlwZSwgVFZhcmlhYmxlKiYgdmFyaWFibGUp
Cit7CisgICAgLy8KKyAgICAvLyBEb24ndCBjaGVjayBmb3IgcmVzZXJ2ZWQgd29yZCB1c2UgdW50
aWwgYWZ0ZXIgd2Uga25vdyBpdCdzIG5vdCBpbiB0aGUgc3ltYm9sIHRhYmxlLAorICAgIC8vIGJl
Y2F1c2UgcmVzZXJ2ZWQgYXJyYXlzIGNhbiBiZSByZWRlY2xhcmVkLgorICAgIC8vCisKKyAgICBi
b29sIGJ1aWx0SW4gPSBmYWxzZTsgCisgICAgYm9vbCBzYW1lU2NvcGUgPSBmYWxzZTsKKyAgICBU
U3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKGlkZW50aWZpZXIsICZidWlsdEluLCAm
c2FtZVNjb3BlKTsKKyAgICBpZiAoc3ltYm9sID09IDAgfHwgIXNhbWVTY29wZSkgeworICAgICAg
ICBpZiAocmVzZXJ2ZWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIAorICAgICAgICB2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUo
JmlkZW50aWZpZXIsIFRUeXBlKHR5cGUpKTsKKworICAgICAgICBpZiAodHlwZS5hcnJheVNpemUp
CisgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldEFycmF5U2l6ZSh0eXBlLmFycmF5
U2l6ZSk7CisKKyAgICAgICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsK
KyAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJJ
TlRFUk5BTCBFUlJPUiBpbnNlcnRpbmcgbmV3IHN5bWJvbCIsIGlkZW50aWZpZXIuY19zdHIoKSk7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIGlmICghIHN5bWJvbC0+aXNWYXJpYWJsZSgpKSB7CisgICAgICAgICAgICBlcnJvcihsaW5l
LCAidmFyaWFibGUgZXhwZWN0ZWQiLCBpZGVudGlmaWVyLmNfc3RyKCkpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICB2YXJpYWJsZSA9IHN0YXRpY19jYXN0
PFRWYXJpYWJsZSo+KHN5bWJvbCk7CisgICAgICAgIGlmICghIHZhcmlhYmxlLT5nZXRUeXBlKCku
aXNBcnJheSgpKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAicmVkZWNsYXJpbmcgbm9uLWFy
cmF5IGFzIGFycmF5IiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldEFycmF5
U2l6ZSgpID4gMCkgeworICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyYXRpb24gb2Yg
YXJyYXkgd2l0aCBzaXplIiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoISB2YXJpYWJsZS0+Z2V0
VHlwZSgpLnNhbWVFbGVtZW50VHlwZShUVHlwZSh0eXBlKSkpIHsKKyAgICAgICAgICAgIGVycm9y
KGxpbmUsICJyZWRlY2xhcmF0aW9uIG9mIGFycmF5IHdpdGggYSBkaWZmZXJlbnQgdHlwZSIsIGlk
ZW50aWZpZXIuY19zdHIoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICh0eXBlLmFycmF5U2l6ZSkKKyAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRU
eXBlKCkuc2V0QXJyYXlTaXplKHR5cGUuYXJyYXlTaXplKTsKKyAgICB9IAorCisgICAgaWYgKHZv
aWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIsIHR5cGUpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8KKy8vIEVuZm9yY2Ugbm9uLWluaXRpYWxp
emVyIHR5cGUvcXVhbGlmaWVyIHJ1bGVzLgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3
YXMgYW4gZXJyb3IuCisvLworYm9vbCBUUGFyc2VDb250ZXh0Ojpub25Jbml0Q29uc3RFcnJvckNo
ZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNU
eXBlJiB0eXBlLCBib29sIGFycmF5KQoreworICAgIGlmICh0eXBlLnF1YWxpZmllciA9PSBFdnFD
b25zdCkKKyAgICB7CisgICAgICAgIC8vIE1ha2UgdGhlIHF1YWxpZmllciBtYWtlIHNlbnNlLgor
ICAgICAgICB0eXBlLnF1YWxpZmllciA9IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgCisgICAgICAg
IGlmIChhcnJheSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IobGluZSwgImFycmF5cyBt
YXkgbm90IGJlIGRlY2xhcmVkIGNvbnN0YW50IHNpbmNlIHRoZXkgY2Fubm90IGJlIGluaXRpYWxp
emVkIiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0
eXBlLmlzU3RydWN0dXJlQ29udGFpbmluZ0FycmF5cygpKQorICAgICAgICB7CisgICAgICAgICAg
ICBlcnJvcihsaW5lLCAic3RydWN0dXJlcyBjb250YWluaW5nIGFycmF5cyBtYXkgbm90IGJlIGRl
Y2xhcmVkIGNvbnN0YW50IHNpbmNlIHRoZXkgY2Fubm90IGJlIGluaXRpYWxpemVkIiwgaWRlbnRp
Zmllci5jX3N0cigpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGVycm9yKGxpbmUsICJ2YXJpYWJsZXMgd2l0aCBxdWFsaWZpZXIgJ2NvbnN0JyBtdXN0
IGJlIGluaXRpYWxpemVkIiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8KKy8v
IERvIHNlbWFudGljIGNoZWNraW5nIGZvciBhIHZhcmlhYmxlIGRlY2xhcmF0aW9uIHRoYXQgaGFz
IG5vIGluaXRpYWxpemVyLAorLy8gYW5kIHVwZGF0ZSB0aGUgc3ltYm9sIHRhYmxlLgorLy8KKy8v
IFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCisvLworYm9vbCBUUGFyc2VDb250
ZXh0Ojpub25Jbml0RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5nJiBp
ZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSwgVFZhcmlhYmxlKiYgdmFyaWFibGUpCit7Cisg
ICAgaWYgKHJlc2VydmVkRXJyb3JDaGVjayhsaW5lLCBpZGVudGlmaWVyKSkKKyAgICAgICAgcmVj
b3ZlcigpOworCisgICAgdmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCZpZGVudGlmaWVyLCBUVHlw
ZSh0eXBlKSk7CisKKyAgICBpZiAoISBzeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgewor
ICAgICAgICBlcnJvcihsaW5lLCAicmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5hbWUoKS5j
X3N0cigpKTsKKyAgICAgICAgZGVsZXRlIHZhcmlhYmxlOworICAgICAgICB2YXJpYWJsZSA9IDA7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICh2b2lkRXJyb3JDaGVjayhs
aW5lLCBpZGVudGlmaWVyLCB0eXBlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2Jvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1FcnJvckNoZWNrKGNvbnN0
IFRTb3VyY2VMb2MmIGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVyIHBhcmFt
UXVhbGlmaWVyLCBUVHlwZSogdHlwZSkKK3sgICAgCisgICAgaWYgKHF1YWxpZmllciAhPSBFdnFD
b25zdCAmJiBxdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7CisgICAgICAgIGVycm9yKGxpbmUs
ICJxdWFsaWZpZXIgbm90IGFsbG93ZWQgb24gZnVuY3Rpb24gcGFyYW1ldGVyIiwgZ2V0UXVhbGlm
aWVyU3RyaW5nKHF1YWxpZmllcikpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
aWYgKHF1YWxpZmllciA9PSBFdnFDb25zdCAmJiBwYXJhbVF1YWxpZmllciAhPSBFdnFJbikgewor
ICAgICAgICBlcnJvcihsaW5lLCAicXVhbGlmaWVyIG5vdCBhbGxvd2VkIHdpdGggIiwgZ2V0UXVh
bGlmaWVyU3RyaW5nKHF1YWxpZmllciksIGdldFF1YWxpZmllclN0cmluZyhwYXJhbVF1YWxpZmll
cikpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAocXVhbGlmaWVyID09
IEV2cUNvbnN0KQorICAgICAgICB0eXBlLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3RSZWFkT25seSk7
CisgICAgZWxzZQorICAgICAgICB0eXBlLT5zZXRRdWFsaWZpZXIocGFyYW1RdWFsaWZpZXIpOwor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRQYXJzZUNvbnRleHQ6OmV4dGVuc2lvbkVy
cm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgZXh0ZW5zaW9u
KQoreworICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0QmVoYXZpb3IgPSBleHRlbnNp
b25CZWhhdmlvcigpOworICAgIFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRl
ciA9IGV4dEJlaGF2aW9yLmZpbmQoZXh0ZW5zaW9uLmNfc3RyKCkpOworICAgIGlmIChpdGVyID09
IGV4dEJlaGF2aW9yLmVuZCgpKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJleHRlbnNpb24iLCBl
eHRlbnNpb24uY19zdHIoKSwgImlzIG5vdCBzdXBwb3J0ZWQiKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIC8vIEluIEdMU0wgRVMsIGFuIGV4dGVuc2lvbidzIGRlZmF1bHQgYmVo
YXZpb3IgaXMgImRpc2FibGUiLgorICAgIGlmIChpdGVyLT5zZWNvbmQgPT0gRUJoRGlzYWJsZSB8
fCBpdGVyLT5zZWNvbmQgPT0gRUJoVW5kZWZpbmVkKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJl
eHRlbnNpb24iLCBleHRlbnNpb24uY19zdHIoKSwgImlzIGRpc2FibGVkIik7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICBpZiAoaXRlci0+c2Vjb25kID09IEVCaFdhcm4pIHsKKyAg
ICAgICAgd2FybmluZyhsaW5lLCAiZXh0ZW5zaW9uIiwgZXh0ZW5zaW9uLmNfc3RyKCksICJpcyBi
ZWluZyB1c2VkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgVFBhcnNlQ29udGV4dDo6c3VwcG9ydHNFeHRlbnNpb24oY29uc3Qg
Y2hhciogZXh0ZW5zaW9uKQoreworICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0YmVo
YXZpb3IgPSBleHRlbnNpb25CZWhhdmlvcigpOworICAgIFRFeHRlbnNpb25CZWhhdmlvcjo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IGV4dGJlaGF2aW9yLmZpbmQoZXh0ZW5zaW9uKTsKKyAgICByZXR1
cm4gKGl0ZXIgIT0gZXh0YmVoYXZpb3IuZW5kKCkpOworfQorCitib29sIFRQYXJzZUNvbnRleHQ6
OmlzRXh0ZW5zaW9uRW5hYmxlZChjb25zdCBjaGFyKiBleHRlbnNpb24pIGNvbnN0Cit7CisgICAg
Y29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRiZWhhdmlvciA9IGV4dGVuc2lvbkJlaGF2aW9y
KCk7CisgICAgVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0YmVo
YXZpb3IuZmluZChleHRlbnNpb24pOworCisgICAgaWYgKGl0ZXIgPT0gZXh0YmVoYXZpb3IuZW5k
KCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIChp
dGVyLT5zZWNvbmQgPT0gRUJoRW5hYmxlIHx8IGl0ZXItPnNlY29uZCA9PSBFQmhSZXF1aXJlKTsK
K30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTm9uLUVycm9ycy4KKy8vCisv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8KKy8vIExvb2sgdXAgYSBmdW5jdGlvbiBuYW1l
IGluIHRoZSBzeW1ib2wgdGFibGUsIGFuZCBtYWtlIHN1cmUgaXQgaXMgYSBmdW5jdGlvbi4KKy8v
CisvLyBSZXR1cm4gdGhlIGZ1bmN0aW9uIHN5bWJvbCBpZiBmb3VuZCwgb3RoZXJ3aXNlIDAuCisv
LworY29uc3QgVEZ1bmN0aW9uKiBUUGFyc2VDb250ZXh0OjpmaW5kRnVuY3Rpb24oY29uc3QgVFNv
dXJjZUxvYyYgbGluZSwgVEZ1bmN0aW9uKiBjYWxsLCBib29sICpidWlsdEluKQoreworICAgIC8v
IEZpcnN0IGZpbmQgYnkgdW5tYW5nbGVkIG5hbWUgdG8gY2hlY2sgd2hldGhlciB0aGUgZnVuY3Rp
b24gbmFtZSBoYXMgYmVlbgorICAgIC8vIGhpZGRlbiBieSBhIHZhcmlhYmxlIG5hbWUgb3Igc3Ry
dWN0IHR5cGVuYW1lLgorICAgIC8vIElmIGEgZnVuY3Rpb24gaXMgZm91bmQsIGNoZWNrIGZvciBv
bmUgd2l0aCBhIG1hdGNoaW5nIGFyZ3VtZW50IGxpc3QuCisgICAgY29uc3QgVFN5bWJvbCogc3lt
Ym9sID0gc3ltYm9sVGFibGUuZmluZChjYWxsLT5nZXROYW1lKCksIGJ1aWx0SW4pOworICAgIGlm
IChzeW1ib2wgPT0gMCB8fCBzeW1ib2wtPmlzRnVuY3Rpb24oKSkgeworICAgICAgICBzeW1ib2wg
PSBzeW1ib2xUYWJsZS5maW5kKGNhbGwtPmdldE1hbmdsZWROYW1lKCksIGJ1aWx0SW4pOworICAg
IH0KKworICAgIGlmIChzeW1ib2wgPT0gMCkgeworICAgICAgICBlcnJvcihsaW5lLCAibm8gbWF0
Y2hpbmcgb3ZlcmxvYWRlZCBmdW5jdGlvbiBmb3VuZCIsIGNhbGwtPmdldE5hbWUoKS5jX3N0cigp
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCFzeW1ib2wtPmlzRnVuY3Rp
b24oKSkgeworICAgICAgICBlcnJvcihsaW5lLCAiZnVuY3Rpb24gbmFtZSBleHBlY3RlZCIsIGNh
bGwtPmdldE5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFRGdW5jdGlvbio+KHN5bWJvbCk7Cit9CisKKy8vCisv
LyBJbml0aWFsaXplcnMgc2hvdyB1cCBpbiBzZXZlcmFsIHBsYWNlcyBpbiB0aGUgZ3JhbW1hci4g
IEhhdmUgb25lIHNldCBvZgorLy8gY29kZSB0byBoYW5kbGUgdGhlbSBoZXJlLgorLy8KK2Jvb2wg
VFBhcnNlQ29udGV4dDo6ZXhlY3V0ZUluaXRpYWxpemVyKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUs
IFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiBwVHlwZSwgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluaXRpYWxpemVyLCBUSW50
ZXJtTm9kZSomIGludGVybU5vZGUsIFRWYXJpYWJsZSogdmFyaWFibGUpCit7CisgICAgVFR5cGUg
dHlwZSA9IFRUeXBlKHBUeXBlKTsKKworICAgIGlmICh2YXJpYWJsZSA9PSAwKSB7CisgICAgICAg
IGlmIChyZXNlcnZlZEVycm9yQ2hlY2sobGluZSwgaWRlbnRpZmllcikpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgICAgICBpZiAodm9pZEVycm9yQ2hlY2sobGluZSwgaWRlbnRpZmll
ciwgcFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gYWRkIHZhcmlhYmxlIHRvIHN5bWJvbCB0YWJsZQorICAgICAgICAvLworICAgICAgICB2
YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50aWZpZXIsIHR5cGUpOworICAgICAgICBpZiAo
ISBzeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgeworICAgICAgICAgICAgZXJyb3IobGlu
ZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIC8vIGRvbid0IGRlbGV0ZSB2YXJpYWJsZSwg
aXQncyB1c2VkIGJ5IGVycm9yIHJlY292ZXJ5LCBhbmQgdGhlIHBvb2wgCisgICAgICAgICAgICAv
LyBwb3Agd2lsbCB0YWtlIGNhcmUgb2YgdGhlIG1lbW9yeQorICAgICAgICB9CisgICAgfQorCisg
ICAgLy8KKyAgICAvLyBpZGVudGlmaWVyIG11c3QgYmUgb2YgdHlwZSBjb25zdGFudCwgYSBnbG9i
YWwsIG9yIGEgdGVtcG9yYXJ5CisgICAgLy8KKyAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHZh
cmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCk7CisgICAgaWYgKChxdWFsaWZpZXIgIT0g
RXZxVGVtcG9yYXJ5KSAmJiAocXVhbGlmaWVyICE9IEV2cUdsb2JhbCkgJiYgKHF1YWxpZmllciAh
PSBFdnFDb25zdCkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgIiBjYW5ub3QgaW5pdGlhbGl6ZSB0
aGlzIHR5cGUgb2YgcXVhbGlmaWVyICIsIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVy
U3RyaW5nKCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgLy8KKyAgICAvLyB0
ZXN0IGZvciBhbmQgcHJvcGFnYXRlIGNvbnN0YW50CisgICAgLy8KKworICAgIGlmIChxdWFsaWZp
ZXIgPT0gRXZxQ29uc3QpIHsKKyAgICAgICAgaWYgKHF1YWxpZmllciAhPSBpbml0aWFsaXplci0+
Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVh
bSBleHRyYUluZm9TdHJlYW07CisgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgIiciIDw8
IHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiJyI7CisgICAgICAg
ICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAg
ICAgICAgICBlcnJvcihsaW5lLCAiIGFzc2lnbmluZyBub24tY29uc3RhbnQgdG8iLCAiPSIsIGV4
dHJhSW5mby5jX3N0cigpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2V0UXVh
bGlmaWVyKEV2cVRlbXBvcmFyeSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgICBpZiAodHlwZSAhPSBpbml0aWFsaXplci0+Z2V0VHlwZSgpKSB7CisgICAgICAg
ICAgICBlcnJvcihsaW5lLCAiIG5vbi1tYXRjaGluZyB0eXBlcyBmb3IgY29uc3QgaW5pdGlhbGl6
ZXIgIiwgCisgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXJT
dHJpbmcoKSk7CisgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldFF1YWxpZmllcihF
dnFUZW1wb3JhcnkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGluaXRpYWxpemVyLT5nZXRBc0NvbnN0YW50VW5pb24oKSkgeyAKKyAgICAgICAgICAg
IHZhcmlhYmxlLT5zaGFyZUNvbnN0UG9pbnRlcihpbml0aWFsaXplci0+Z2V0QXNDb25zdGFudFVu
aW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCkpOworICAgICAgICB9IGVsc2UgaWYgKGluaXRp
YWxpemVyLT5nZXRBc1N5bWJvbE5vZGUoKSkgeworICAgICAgICAgICAgY29uc3QgVFN5bWJvbCog
c3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChpbml0aWFsaXplci0+Z2V0QXNTeW1ib2xOb2RlKCkt
PmdldFN5bWJvbCgpKTsKKyAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSogdFZhciA9IHN0YXRp
Y19jYXN0PGNvbnN0IFRWYXJpYWJsZSo+KHN5bWJvbCk7CisKKyAgICAgICAgICAgIENvbnN0YW50
VW5pb24qIGNvbnN0QXJyYXkgPSB0VmFyLT5nZXRDb25zdFBvaW50ZXIoKTsKKyAgICAgICAgICAg
IHZhcmlhYmxlLT5zaGFyZUNvbnN0UG9pbnRlcihjb25zdEFycmF5KTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAg
ICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiJyIgPDwgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRD
b21wbGV0ZVN0cmluZygpIDw8ICInIjsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5m
byA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICIgY2Fu
bm90IGFzc2lnbiB0byIsICI9IiwgZXh0cmFJbmZvLmNfc3RyKCkpOworICAgICAgICAgICAgdmFy
aWFibGUtPmdldFR5cGUoKS5zZXRRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorIAorICAgIGlmIChxdWFsaWZpZXIgIT0g
RXZxQ29uc3QpIHsKKyAgICAgICAgVEludGVybVN5bWJvbCogaW50ZXJtU3ltYm9sID0gaW50ZXJt
ZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwgdmFyaWFibGUtPmdldE5h
bWUoKSwgdmFyaWFibGUtPmdldFR5cGUoKSwgbGluZSk7CisgICAgICAgIGludGVybU5vZGUgPSBp
bnRlcm1lZGlhdGUuYWRkQXNzaWduKEVPcEluaXRpYWxpemUsIGludGVybVN5bWJvbCwgaW5pdGlh
bGl6ZXIsIGxpbmUpOworICAgICAgICBpZiAoaW50ZXJtTm9kZSA9PSAwKSB7CisgICAgICAgICAg
ICBhc3NpZ25FcnJvcihsaW5lLCAiPSIsIGludGVybVN5bWJvbC0+Z2V0Q29tcGxldGVTdHJpbmco
KSwgaW5pdGlhbGl6ZXItPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAgICAgIGludGVybU5vZGUgPSAwOwor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRQYXJzZUNvbnRleHQ6OmFyZUFsbENoaWxk
Q29uc3QoVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUpCit7CisgICAgQVNTRVJUKGFnZ3JOb2Rl
ICE9IE5VTEwpOworICAgIGlmICghYWdnck5vZGUtPmlzQ29uc3RydWN0b3IoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBhbGxDb25zdGFudCA9IHRydWU7CisKKyAgICAvLyBj
aGVjayBpZiBhbGwgdGhlIGNoaWxkIG5vZGVzIGFyZSBjb25zdGFudHMgc28gdGhhdCB0aGV5IGNh
biBiZSBpbnNlcnRlZCBpbnRvIAorICAgIC8vIHRoZSBwYXJlbnQgbm9kZQorICAgIFRJbnRlcm1T
ZXF1ZW5jZSAmc2VxdWVuY2UgPSBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKSA7CisgICAgZm9yIChU
SW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHAgPSBzZXF1ZW5jZS5iZWdpbigpOyBwICE9IHNlcXVl
bmNlLmVuZCgpOyArK3ApIHsKKyAgICAgICAgaWYgKCEoKnApLT5nZXRBc1R5cGVkKCktPmdldEFz
Q29uc3RhbnRVbmlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHJldHVybiBhbGxDb25zdGFudDsKK30KKworLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHRl
c3QgZm9yIHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgcGFyYW1ldGVycyBwYXNzZWQgdG8gdmFyaW91
cyBjb25zdHJ1Y3RvciBmdW5jdGlvbnMKKy8vIGFuZCBhbHNvIGNvbnZlcnQgdGhlbSB0byB0aGUg
cmlnaHQgZGF0YXR5cGUgaWYgaXQgaXMgYWxsb3dlZCBhbmQgcmVxdWlyZWQuIAorLy8KKy8vIFJl
dHVybnMgMCBmb3IgYW4gZXJyb3Igb3IgdGhlIGNvbnN0cnVjdGVkIG5vZGUgKGFnZ3JlZ2F0ZSBv
ciB0eXBlZCkgZm9yIG5vIGVycm9yLgorLy8KK1RJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6
YWRkQ29uc3RydWN0b3IoVEludGVybU5vZGUqIG5vZGUsIGNvbnN0IFRUeXBlKiB0eXBlLCBUT3Bl
cmF0b3Igb3AsIFRGdW5jdGlvbiogZm5DYWxsLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQorewor
ICAgIGlmIChub2RlID09IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgVEludGVybUFnZ3Jl
Z2F0ZSogYWdnck5vZGUgPSBub2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAgIAorICAgIFRGaWVs
ZExpc3Q6OmNvbnN0X2l0ZXJhdG9yIG1lbWJlckZpZWxkczsKKyAgICBpZiAob3AgPT0gRU9wQ29u
c3RydWN0U3RydWN0KQorICAgICAgICBtZW1iZXJGaWVsZHMgPSB0eXBlLT5nZXRTdHJ1Y3QoKS0+
ZmllbGRzKCkuYmVnaW4oKTsKKyAgICAKKyAgICBUVHlwZSBlbGVtZW50VHlwZSA9ICp0eXBlOwor
ICAgIGlmICh0eXBlLT5pc0FycmF5KCkpCisgICAgICAgIGVsZW1lbnRUeXBlLmNsZWFyQXJyYXlu
ZXNzKCk7CisKKyAgICBib29sIHNpbmdsZUFyZzsKKyAgICBpZiAoYWdnck5vZGUpIHsKKyAgICAg
ICAgaWYgKGFnZ3JOb2RlLT5nZXRPcCgpICE9IEVPcE51bGwgfHwgYWdnck5vZGUtPmdldFNlcXVl
bmNlKCkuc2l6ZSgpID09IDEpCisgICAgICAgICAgICBzaW5nbGVBcmcgPSB0cnVlOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBzaW5nbGVBcmcgPSBmYWxzZTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgc2luZ2xlQXJnID0gdHJ1ZTsKKworICAgIFRJbnRlcm1UeXBlZCAqbmV3Tm9kZTsKKyAgICBp
ZiAoc2luZ2xlQXJnKSB7CisgICAgICAgIC8vIElmIHN0cnVjdHVyZSBjb25zdHJ1Y3RvciBvciBh
cnJheSBjb25zdHJ1Y3RvciBpcyBiZWluZyBjYWxsZWQgCisgICAgICAgIC8vIGZvciBvbmx5IG9u
ZSBwYXJhbWV0ZXIgaW5zaWRlIHRoZSBzdHJ1Y3R1cmUsIHdlIG5lZWQgdG8gY2FsbCBjb25zdHJ1
Y3RTdHJ1Y3QgZnVuY3Rpb24gb25jZS4KKyAgICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkKKyAg
ICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RTdHJ1Y3Qobm9kZSwgJmVsZW1lbnRUeXBlLCAx
LCBub2RlLT5nZXRMaW5lKCksIGZhbHNlKTsKKyAgICAgICAgZWxzZSBpZiAob3AgPT0gRU9wQ29u
c3RydWN0U3RydWN0KQorICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdFN0cnVjdChub2Rl
LCAoKm1lbWJlckZpZWxkcyktPnR5cGUoKSwgMSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxzZSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RCdWlsdEluKHR5cGUs
IG9wLCBub2RlLCBub2RlLT5nZXRMaW5lKCksIGZhbHNlKTsKKworICAgICAgICBpZiAobmV3Tm9k
ZSAmJiBuZXdOb2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpKSB7CisgICAgICAgICAgICBUSW50ZXJtVHlw
ZWQqIGNvbnN0Q29uc3RydWN0b3IgPSBmb2xkQ29uc3RDb25zdHJ1Y3RvcihuZXdOb2RlLT5nZXRB
c0FnZ3JlZ2F0ZSgpLCAqdHlwZSk7CisgICAgICAgICAgICBpZiAoY29uc3RDb25zdHJ1Y3RvcikK
KyAgICAgICAgICAgICAgICByZXR1cm4gY29uc3RDb25zdHJ1Y3RvcjsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBuZXdOb2RlOworICAgIH0KKyAgICAKKyAgICAvLworICAgIC8vIEhhbmRs
ZSBsaXN0IG9mIGFyZ3VtZW50cy4KKyAgICAvLworICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVu
Y2VWZWN0b3IgPSBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKSA7ICAgIC8vIFN0b3JlcyB0aGUgaW5m
b3JtYXRpb24gYWJvdXQgdGhlIHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0b3IKKyAgICAvLyBp
ZiB0aGUgc3RydWN0dXJlIGNvbnN0cnVjdG9yIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgcGFyYW1l
dGVyLCB0aGVuIGNvbnN0cnVjdAorICAgIC8vIGVhY2ggcGFyYW1ldGVyCisgICAgCisgICAgaW50
IHBhcmFtQ291bnQgPSAwOyAgLy8ga2VlcHMgYSB0cmFjayBvZiB0aGUgY29uc3RydWN0b3IgcGFy
YW1ldGVyIG51bWJlciBiZWluZyBjaGVja2VkICAgIAorICAgIAorICAgIC8vIGZvciBlYWNoIHBh
cmFtZXRlciB0byB0aGUgY29uc3RydWN0b3IgY2FsbCwgY2hlY2sgdG8gc2VlIGlmIHRoZSByaWdo
dCB0eXBlIGlzIHBhc3NlZCBvciBjb252ZXJ0IHRoZW0gCisgICAgLy8gdG8gdGhlIHJpZ2h0IHR5
cGUgaWYgcG9zc2libGUgKGFuZCBhbGxvd2VkKS4KKyAgICAvLyBmb3Igc3RydWN0dXJlIGNvbnN0
cnVjdG9ycywganVzdCBjaGVjayBpZiB0aGUgcmlnaHQgdHlwZSBpcyBwYXNzZWQsIG5vIGNvbnZl
cnNpb24gaXMgYWxsb3dlZC4KKyAgICAKKyAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0
b3IgcCA9IHNlcXVlbmNlVmVjdG9yLmJlZ2luKCk7IAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwICE9IHNlcXVlbmNlVmVjdG9yLmVuZCgpOyBwKyssIHBhcmFtQ291bnQrKykg
eworICAgICAgICBpZiAodHlwZS0+aXNBcnJheSgpKQorICAgICAgICAgICAgbmV3Tm9kZSA9IGNv
bnN0cnVjdFN0cnVjdCgqcCwgJmVsZW1lbnRUeXBlLCBwYXJhbUNvdW50KzEsIG5vZGUtPmdldExp
bmUoKSwgdHJ1ZSk7CisgICAgICAgIGVsc2UgaWYgKG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCkK
KyAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RTdHJ1Y3QoKnAsIG1lbWJlckZpZWxkc1tw
YXJhbUNvdW50XS0+dHlwZSgpLCBwYXJhbUNvdW50KzEsIG5vZGUtPmdldExpbmUoKSwgdHJ1ZSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RCdWlsdEluKHR5
cGUsIG9wLCAqcCwgbm9kZS0+Z2V0TGluZSgpLCB0cnVlKTsKKyAgICAgICAgCisgICAgICAgIGlm
IChuZXdOb2RlKSB7CisgICAgICAgICAgICAqcCA9IG5ld05vZGU7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBUSW50ZXJtVHlwZWQqIGNvbnN0cnVjdG9yID0gaW50ZXJtZWRpYXRlLnNldEFnZ3Jl
Z2F0ZU9wZXJhdG9yKGFnZ3JOb2RlLCBvcCwgbGluZSk7CisgICAgVEludGVybVR5cGVkKiBjb25z
dENvbnN0cnVjdG9yID0gZm9sZENvbnN0Q29uc3RydWN0b3IoY29uc3RydWN0b3ItPmdldEFzQWdn
cmVnYXRlKCksICp0eXBlKTsKKyAgICBpZiAoY29uc3RDb25zdHJ1Y3RvcikKKyAgICAgICAgcmV0
dXJuIGNvbnN0Q29uc3RydWN0b3I7CisKKyAgICByZXR1cm4gY29uc3RydWN0b3I7Cit9CisKK1RJ
bnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6Zm9sZENvbnN0Q29uc3RydWN0b3IoVEludGVybUFn
Z3JlZ2F0ZSogYWdnck5vZGUsIGNvbnN0IFRUeXBlJiB0eXBlKQoreworICAgIGJvb2wgY2FuQmVG
b2xkZWQgPSBhcmVBbGxDaGlsZENvbnN0KGFnZ3JOb2RlKTsKKyAgICBhZ2dyTm9kZS0+c2V0VHlw
ZSh0eXBlKTsKKyAgICBpZiAoY2FuQmVGb2xkZWQpIHsKKyAgICAgICAgYm9vbCByZXR1cm5WYWwg
PSBmYWxzZTsKKyAgICAgICAgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSA9IG5ldyBDb25zdGFu
dFVuaW9uW3R5cGUuZ2V0T2JqZWN0U2l6ZSgpXTsKKyAgICAgICAgaWYgKGFnZ3JOb2RlLT5nZXRT
ZXF1ZW5jZSgpLnNpemUoKSA9PSAxKSAgeworICAgICAgICAgICAgcmV0dXJuVmFsID0gaW50ZXJt
ZWRpYXRlLnBhcnNlQ29uc3RUcmVlKGFnZ3JOb2RlLT5nZXRMaW5lKCksIGFnZ3JOb2RlLCB1bmlv
bkFycmF5LCBhZ2dyTm9kZS0+Z2V0T3AoKSwgc3ltYm9sVGFibGUsICB0eXBlLCB0cnVlKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVyblZhbCA9IGludGVybWVk
aWF0ZS5wYXJzZUNvbnN0VHJlZShhZ2dyTm9kZS0+Z2V0TGluZSgpLCBhZ2dyTm9kZSwgdW5pb25B
cnJheSwgYWdnck5vZGUtPmdldE9wKCksIHN5bWJvbFRhYmxlLCAgdHlwZSk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHJldHVyblZhbCkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAg
IHJldHVybiBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCB0eXBlLCBh
Z2dyTm9kZS0+Z2V0TGluZSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworLy8gRnVu
Y3Rpb24gZm9yIGNvbnN0cnVjdG9yIGltcGxlbWVudGF0aW9uLiBDYWxscyBhZGRVbmFyeU1hdGgg
d2l0aCBhcHByb3ByaWF0ZSBFT3AgdmFsdWUKKy8vIGZvciB0aGUgcGFyYW1ldGVyIHRvIHRoZSBj
b25zdHJ1Y3RvciAocGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24pLiBFc3NlbnRpYWxseSwgaXQgY29u
dmVydHMKKy8vIHRoZSBwYXJhbWV0ZXIgdHlwZXMgY29ycmVjdGx5LiBJZiBhIGNvbnN0cnVjdG9y
IGV4cGVjdHMgYW4gaW50IChsaWtlIGl2ZWMyKSBhbmQgaXMgcGFzc2VkIGEgCisvLyBmbG9hdCwg
dGhlbiBmbG9hdCBpcyBjb252ZXJ0ZWQgdG8gaW50LgorLy8KKy8vIFJldHVybnMgMCBmb3IgYW4g
ZXJyb3Igb3IgdGhlIGNvbnN0cnVjdGVkIG5vZGUuCisvLworVEludGVybVR5cGVkKiBUUGFyc2VD
b250ZXh0Ojpjb25zdHJ1Y3RCdWlsdEluKGNvbnN0IFRUeXBlKiB0eXBlLCBUT3BlcmF0b3Igb3As
IFRJbnRlcm1Ob2RlKiBub2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lLCBib29sIHN1YnNldCkK
K3sKKyAgICBUSW50ZXJtVHlwZWQqIG5ld05vZGU7CisgICAgVE9wZXJhdG9yIGJhc2ljT3A7CisK
KyAgICAvLworICAgIC8vIEZpcnN0LCBjb252ZXJ0IHR5cGVzIGFzIG5lZWRlZC4KKyAgICAvLwor
ICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzI6CisgICAgY2FzZSBF
T3BDb25zdHJ1Y3RWZWMzOgorICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjNDoKKyAgICBjYXNlIEVP
cENvbnN0cnVjdE1hdDI6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQzOgorICAgIGNhc2UgRU9w
Q29uc3RydWN0TWF0NDoKKyAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OgorICAgICAgICBiYXNp
Y09wID0gRU9wQ29uc3RydWN0RmxvYXQ7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBFT3BD
b25zdHJ1Y3RJVmVjMjoKKyAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMzOgorICAgIGNhc2UgRU9w
Q29uc3RydWN0SVZlYzQ6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6CisgICAgICAgIGJhc2lj
T3AgPSBFT3BDb25zdHJ1Y3RJbnQ7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBFT3BDb25z
dHJ1Y3RCVmVjMjoKKyAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMzOgorICAgIGNhc2UgRU9wQ29u
c3RydWN0QlZlYzQ6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29sOgorICAgICAgICBiYXNpY09w
ID0gRU9wQ29uc3RydWN0Qm9vbDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAg
ICAgICBlcnJvcihsaW5lLCAidW5zdXBwb3J0ZWQgY29uc3RydWN0aW9uIiwgIiIpOworICAgICAg
ICByZWNvdmVyKCk7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIG5ld05vZGUgPSBp
bnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKGJhc2ljT3AsIG5vZGUsIG5vZGUtPmdldExpbmUoKSwg
c3ltYm9sVGFibGUpOworICAgIGlmIChuZXdOb2RlID09IDApIHsKKyAgICAgICAgZXJyb3IobGlu
ZSwgImNhbid0IGNvbnZlcnQiLCAiY29uc3RydWN0b3IiKTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorCisgICAgLy8KKyAgICAvLyBOb3csIGlmIHRoZXJlIHN0aWxsIGlzbid0IGFuIG9wZXJh
dGlvbiB0byBkbyB0aGUgY29uc3RydWN0aW9uLCBhbmQgd2UgbmVlZCBvbmUsIGFkZCBvbmUuCisg
ICAgLy8KKyAgICAKKyAgICAvLyBPdGhlcndpc2UsIHNraXAgb3V0IGVhcmx5LgorICAgIGlmIChz
dWJzZXQgfHwgKG5ld05vZGUgIT0gbm9kZSAmJiBuZXdOb2RlLT5nZXRUeXBlKCkgPT0gKnR5cGUp
KQorICAgICAgICByZXR1cm4gbmV3Tm9kZTsKKworICAgIC8vIHNldEFnZ3JlZ2F0ZU9wZXJhdG9y
IHdpbGwgaW5zZXJ0IGEgbmV3IG5vZGUgZm9yIHRoZSBjb25zdHJ1Y3RvciwgYXMgbmVlZGVkLgor
ICAgIHJldHVybiBpbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IobmV3Tm9kZSwgb3As
IGxpbmUpOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIHRlc3RzIGZvciB0aGUgdHlwZSBvZiB0aGUg
cGFyYW1ldGVycyB0byB0aGUgc3RydWN0dXJlcyBjb25zdHJ1Y3RvcnMuIFJhaXNlcworLy8gYW4g
ZXJyb3IgbWVzc2FnZSBpZiB0aGUgZXhwZWN0ZWQgdHlwZSBkb2VzIG5vdCBtYXRjaCB0aGUgcGFy
YW1ldGVyIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IuCisvLworLy8gUmV0dXJucyAwIGZvciBh
biBlcnJvciBvciB0aGUgaW5wdXQgbm9kZSBpdHNlbGYgaWYgdGhlIGV4cGVjdGVkIGFuZCB0aGUg
Z2l2ZW4gcGFyYW1ldGVyIHR5cGVzIG1hdGNoLgorLy8KK1RJbnRlcm1UeXBlZCogVFBhcnNlQ29u
dGV4dDo6Y29uc3RydWN0U3RydWN0KFRJbnRlcm1Ob2RlKiBub2RlLCBUVHlwZSogdHlwZSwgaW50
IHBhcmFtQ291bnQsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGJvb2wgc3Vic2V0KQoreworICAg
IGlmICgqdHlwZSA9PSBub2RlLT5nZXRBc1R5cGVkKCktPmdldFR5cGUoKSkgeworICAgICAgICBp
ZiAoc3Vic2V0KQorICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmdldEFzVHlwZWQoKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIGludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVy
YXRvcihub2RlLT5nZXRBc1R5cGVkKCksIEVPcENvbnN0cnVjdFN0cnVjdCwgbGluZSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAg
ICAgICBleHRyYUluZm9TdHJlYW0gPDwgImNhbm5vdCBjb252ZXJ0IHBhcmFtZXRlciAiIDw8IHBh
cmFtQ291bnQgCisgICAgICAgICAgICAgICAgICAgICAgICA8PCAiIGZyb20gJyIgPDwgbm9kZS0+
Z2V0QXNUeXBlZCgpLT5nZXRUeXBlKCkuZ2V0QmFzaWNTdHJpbmcoKQorICAgICAgICAgICAgICAg
ICAgICAgICAgPDwgIicgdG8gJyIgPDwgdHlwZS0+Z2V0QmFzaWNTdHJpbmcoKSA8PCAiJyI7Cisg
ICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAg
ICAgICAgZXJyb3IobGluZSwgIiIsICJjb25zdHJ1Y3RvciIsIGV4dHJhSW5mby5jX3N0cigpKTsK
KyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCisvLworLy8g
VGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0cmVlIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgdmVj
dG9yIGZpZWxkKHMpIGJlaW5nIGFjY2Vzc2VkIGZyb20gY29udGFudCB2ZWN0b3IuCisvLyBJZiBv
bmx5IG9uZSBjb21wb25lbnQgb2YgdmVjdG9yIGlzIGFjY2Vzc2VkICh2Lnggb3IgdlswXSB3aGVy
ZSB2IGlzIGEgY29udGFudCB2ZWN0b3IpLCB0aGVuIGEgY29udGFudCBub2RlIGlzCisvLyByZXR1
cm5lZCwgZWxzZSBhbiBhZ2dyZWdhdGUgbm9kZSBpcyByZXR1cm5lZCAoZm9yIHYueHkpLiBUaGUg
aW5wdXQgdG8gdGhpcyBmdW5jdGlvbiBjb3VsZCBlaXRoZXIgYmUgdGhlIHN5bWJvbAorLy8gbm9k
ZSBvciBpdCBjb3VsZCBiZSB0aGUgaW50ZXJtZWRpYXRlIHRyZWUgcmVwcmVzZW50YXRpb24gb2Yg
YWNjZXNzaW5nIGZpZWxkcyBpbiBhIGNvbnN0YW50IHN0cnVjdHVyZSBvciBjb2x1bW4gb2YgCisv
LyBhIGNvbnN0YW50IG1hdHJpeC4KKy8vCitUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFk
ZENvbnN0VmVjdG9yTm9kZShUVmVjdG9yRmllbGRzJiBmaWVsZHMsIFRJbnRlcm1UeXBlZCogbm9k
ZSwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKK3sKKyAgICBUSW50ZXJtVHlwZWQqIHR5cGVkTm9k
ZTsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0YW50Tm9kZSA9IG5vZGUtPmdl
dEFzQ29uc3RhbnRVbmlvbigpOworCisgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheTsKKyAg
ICBpZiAodGVtcENvbnN0YW50Tm9kZSkgeworICAgICAgICB1bmlvbkFycmF5ID0gdGVtcENvbnN0
YW50Tm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKworICAgICAgICBpZiAoIXVuaW9uQXJy
YXkpIHsKKyAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICB9CisgICAgfSBlbHNlIHsg
Ly8gVGhlIG5vZGUgaGFzIHRvIGJlIGVpdGhlciBhIHN5bWJvbCBub2RlIG9yIGFuIGFnZ3JlZ2F0
ZSBub2RlIG9yIGEgdGVtcENvbnN0YW50IG5vZGUsIGVsc2UsIGl0cyBhbiBlcnJvcgorICAgICAg
ICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSB2ZWN0b3IiLCAiRXJyb3IiKTsK
KyAgICAgICAgcmVjb3ZlcigpOworCisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIENv
bnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltmaWVsZHMubnVtXTsK
KworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgaSsrKSB7CisgICAgICAgIGlm
IChmaWVsZHMub2Zmc2V0c1tpXSA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkg
eworICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAg
ICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJ2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIG91dCBvZiBy
YW5nZSAnIiA8PCBmaWVsZHMub2Zmc2V0c1tpXSA8PCAiJyI7CisgICAgICAgICAgICBzdGQ6OnN0
cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgICAgICBlcnJv
cihsaW5lLCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7CisgICAgICAgICAgICByZWNvdmVy
KCk7CisgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDA7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGNvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ZpZWxkcy5vZmZzZXRzW2ld
XTsKKworICAgIH0gCisgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5p
b24oY29uc3RBcnJheSwgbm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsKKyAgICByZXR1cm4gdHlwZWRO
b2RlOworfQorCisvLworLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjb2x1bW4gYmVpbmcg
YWNjZXNzZWQgZnJvbSBhIGNvbnN0YW50IG1hdHJpeC4gVGhlIHZhbHVlcyBhcmUgcmV0cmlldmVk
IGZyb20KKy8vIHRoZSBzeW1ib2wgdGFibGUgYW5kIHBhcnNlLXRyZWUgaXMgYnVpbHQgZm9yIGEg
dmVjdG9yIChlYWNoIGNvbHVtbiBvZiBhIG1hdHJpeCBpcyBhIHZlY3RvcikuIFRoZSBpbnB1dCAK
Ky8vIHRvIHRoZSBmdW5jdGlvbiBjb3VsZCBlaXRoZXIgYmUgYSBzeW1ib2wgbm9kZSAobVswXSB3
aGVyZSBtIGlzIGEgY29uc3RhbnQgbWF0cml4KXRoYXQgcmVwcmVzZW50cyBhIAorLy8gY29uc3Rh
bnQgbWF0cml4IG9yIGl0IGNvdWxkIGJlIHRoZSB0cmVlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBj
b25zdGFudCBtYXRyaXggKHMubTFbMF0gd2hlcmUgcyBpcyBhIGNvbnN0YW50IHN0cnVjdHVyZSkK
Ky8vCitUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0TWF0cml4Tm9kZShpbnQg
aW5kZXgsIFRJbnRlcm1UeXBlZCogbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKK3sKKyAg
ICBUSW50ZXJtVHlwZWQqIHR5cGVkTm9kZTsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogdGVt
cENvbnN0YW50Tm9kZSA9IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOworCisgICAgaWYgKGlu
ZGV4ID49IG5vZGUtPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKSB7CisgICAgICAgIHN0ZDo6
c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8
ICJtYXRyaXggZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnIiA8PCBpbmRleCA8PCAiJyI7
CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsK
KyAgICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwgZXh0cmFJbmZvLmNfc3RyKCkpOworICAgICAg
ICByZWNvdmVyKCk7CisgICAgICAgIGluZGV4ID0gMDsKKyAgICB9CisKKyAgICBpZiAodGVtcENv
bnN0YW50Tm9kZSkgeworICAgICAgICAgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSA9IHRlbXBD
b25zdGFudE5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAgICAgICBpbnQgc2l6ZSA9
IHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICAg
dHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24oJnVuaW9uQXJyYXlbc2l6
ZSppbmRleF0sIHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKSwgbGluZSk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgbWF0cml4Iiwg
IkVycm9yIik7CisgICAgICAgIHJlY292ZXIoKTsKKworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisKKyAgICByZXR1cm4gdHlwZWROb2RlOworfQorCisKKy8vCisvLyBUaGlzIGZ1bmN0aW9uIHJl
dHVybnMgYW4gZWxlbWVudCBvZiBhbiBhcnJheSBhY2Nlc3NlZCBmcm9tIGEgY29uc3RhbnQgYXJy
YXkuIFRoZSB2YWx1ZXMgYXJlIHJldHJpZXZlZCBmcm9tCisvLyB0aGUgc3ltYm9sIHRhYmxlIGFu
ZCBwYXJzZS10cmVlIGlzIGJ1aWx0IGZvciB0aGUgdHlwZSBvZiB0aGUgZWxlbWVudC4gVGhlIGlu
cHV0IAorLy8gdG8gdGhlIGZ1bmN0aW9uIGNvdWxkIGVpdGhlciBiZSBhIHN5bWJvbCBub2RlIChh
WzBdIHdoZXJlIGEgaXMgYSBjb25zdGFudCBhcnJheSl0aGF0IHJlcHJlc2VudHMgYSAKKy8vIGNv
bnN0YW50IGFycmF5IG9yIGl0IGNvdWxkIGJlIHRoZSB0cmVlIHJlcHJlc2VudGF0aW9uIG9mIHRo
ZSBjb25zdGFudCBhcnJheSAocy5hMVswXSB3aGVyZSBzIGlzIGEgY29uc3RhbnQgc3RydWN0dXJl
KQorLy8KK1RJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RBcnJheU5vZGUoaW50
IGluZGV4LCBUSW50ZXJtVHlwZWQqIG5vZGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCit7Cisg
ICAgVEludGVybVR5cGVkKiB0eXBlZE5vZGU7CisgICAgVEludGVybUNvbnN0YW50VW5pb24qIHRl
bXBDb25zdGFudE5vZGUgPSBub2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKyAgICBUVHlwZSBh
cnJheUVsZW1lbnRUeXBlID0gbm9kZS0+Z2V0VHlwZSgpOworICAgIGFycmF5RWxlbWVudFR5cGUu
Y2xlYXJBcnJheW5lc3MoKTsKKworICAgIGlmIChpbmRleCA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0
QXJyYXlTaXplKCkpIHsKKyAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFt
OworICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImFycmF5IGZpZWxkIHNlbGVjdGlvbiBvdXQg
b2YgcmFuZ2UgJyIgPDwgaW5kZXggPDwgIiciOworICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUlu
Zm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIs
IGV4dHJhSW5mby5jX3N0cigpKTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgICAgICBpbmRleCA9
IDA7CisgICAgfQorCisgICAgaWYgKHRlbXBDb25zdGFudE5vZGUpIHsKKyAgICAgICAgIHNpemVf
dCBhcnJheUVsZW1lbnRTaXplID0gYXJyYXlFbGVtZW50VHlwZS5nZXRPYmplY3RTaXplKCk7Cisg
ICAgICAgICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0
VW5pb25BcnJheVBvaW50ZXIoKTsKKyAgICAgICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5h
ZGRDb25zdGFudFVuaW9uKCZ1bmlvbkFycmF5W2FycmF5RWxlbWVudFNpemUgKiBpbmRleF0sIHRl
bXBDb25zdGFudE5vZGUtPmdldFR5cGUoKSwgbGluZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgYXJyYXkiLCAiRXJyb3IiKTsKKyAg
ICAgICAgcmVjb3ZlcigpOworCisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVy
biB0eXBlZE5vZGU7Cit9CisKKworLy8KKy8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFs
dWUgb2YgYSBwYXJ0aWN1bGFyIGZpZWxkIGluc2lkZSBhIGNvbnN0YW50IHN0cnVjdHVyZSBmcm9t
IHRoZSBzeW1ib2wgdGFibGUuIAorLy8gSWYgdGhlcmUgaXMgYW4gZW1iZWRkZWQvbmVzdGVkIHN0
cnVjdCwgaXQgYXBwcm9wcmlhdGVseSBjYWxscyBhZGRDb25zdFN0cnVjdE5lc3RlZCBvciBhZGRD
b25zdFN0cnVjdEZyb21BZ2dyCisvLyBmdW5jdGlvbiBhbmQgcmV0dXJucyB0aGUgcGFyc2UtdHJl
ZSB3aXRoIHRoZSB2YWx1ZXMgb2YgdGhlIGVtYmVkZGVkL25lc3RlZCBzdHJ1Y3QuCisvLworVElu
dGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdFN0cnVjdChUU3RyaW5nJiBpZGVudGlm
aWVyLCBUSW50ZXJtVHlwZWQqIG5vZGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCit7CisgICAg
Y29uc3QgVEZpZWxkTGlzdCYgZmllbGRzID0gbm9kZS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpLT5m
aWVsZHMoKTsKKworICAgIHNpemVfdCBpbnN0YW5jZVNpemUgPSAwOworICAgIGZvciAoc2l6ZV90
IGluZGV4ID0gMDsgaW5kZXggPCBmaWVsZHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgIGlm
IChmaWVsZHNbaW5kZXhdLT5uYW1lKCkgPT0gaWRlbnRpZmllcikgeworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbnN0YW5jZVNpemUgKz0gZmllbGRz
W2luZGV4XS0+dHlwZSgpLT5nZXRPYmplY3RTaXplKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBUSW50ZXJtVHlwZWQqIHR5cGVkTm9kZSA9IDA7CisgICAgVEludGVybUNvbnN0YW50VW5pb24q
IHRlbXBDb25zdGFudE5vZGUgPSBub2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKyAgICBpZiAo
dGVtcENvbnN0YW50Tm9kZSkgeworICAgICAgICAgQ29uc3RhbnRVbmlvbiogY29uc3RBcnJheSA9
IHRlbXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisKKyAgICAgICAgIHR5
cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXkraW5zdGFu
Y2VTaXplLCB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOyAvLyB0eXBlIHdpbGwg
YmUgY2hhbmdlZCBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbgorICAgIH0gZWxzZSB7CisgICAgICAg
IGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIHN0cnVjdHVyZSIsICJFcnJvciIp
OworICAgICAgICByZWNvdmVyKCk7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
cmV0dXJuIHR5cGVkTm9kZTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0OjplbnRlclN0cnVjdERl
Y2xhcmF0aW9uKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZp
ZXIpCit7CisgICAgKytzdHJ1Y3ROZXN0aW5nTGV2ZWw7CisKKyAgICAvLyBFbWJlZGRlZCBzdHJ1
Y3R1cmUgZGVmaW5pdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgcGVyIEdMU0wgRVMgc3BlYy4KKyAg
ICAvLyBUaGV5IGFyZW4ndCBhbGxvd2VkIGluIEdMU0wgZWl0aGVyLCBidXQgd2UgbmVlZCB0byBk
ZXRlY3QgdGhpcyBoZXJlCisgICAgLy8gc28gd2UgZG9uJ3QgcmVseSBvbiB0aGUgR0xTTCBjb21w
aWxlciB0byBjYXRjaCBpdC4KKyAgICBpZiAoc3RydWN0TmVzdGluZ0xldmVsID4gMSkgeworICAg
ICAgICBlcnJvcihsaW5lLCAiIiwgIkVtYmVkZGVkIHN0cnVjdCBkZWZpbml0aW9ucyBhcmUgbm90
IGFsbG93ZWQiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIFRQYXJzZUNvbnRleHQ6OmV4aXRTdHJ1Y3REZWNsYXJhdGlvbigpCit7
CisgICAgLS1zdHJ1Y3ROZXN0aW5nTGV2ZWw7Cit9CisKK25hbWVzcGFjZSB7CisKK2NvbnN0IGlu
dCBrV2ViR0xNYXhTdHJ1Y3ROZXN0aW5nID0gNDsKKworfSAgLy8gbmFtZXNwYWNlCisKK2Jvb2wg
VFBhcnNlQ29udGV4dDo6c3RydWN0TmVzdGluZ0Vycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYg
bGluZSwgY29uc3QgVEZpZWxkJiBmaWVsZCkKK3sKKyAgICBpZiAoIWlzV2ViR0xCYXNlZFNwZWMo
c2hhZGVyU3BlYykpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChm
aWVsZC50eXBlKCktPmdldEJhc2ljVHlwZSgpICE9IEVidFN0cnVjdCkgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gV2UncmUgYWxyZWFkeSBpbnNpZGUgYSBzdHJ1Y3R1
cmUgZGVmaW5pdGlvbiBhdCB0aGlzIHBvaW50LCBzbyBhZGQKKyAgICAvLyBvbmUgdG8gdGhlIGZp
ZWxkJ3Mgc3RydWN0IG5lc3RpbmcuCisgICAgaWYgKDEgKyBmaWVsZC50eXBlKCktPmdldERlZXBl
c3RTdHJ1Y3ROZXN0aW5nKCkgPiBrV2ViR0xNYXhTdHJ1Y3ROZXN0aW5nKSB7CisgICAgICAgIHN0
ZDo6c3RyaW5nc3RyZWFtIHJlYXNvblN0cmVhbTsKKyAgICAgICAgcmVhc29uU3RyZWFtIDw8ICJS
ZWZlcmVuY2Ugb2Ygc3RydWN0IHR5cGUgIgorICAgICAgICAgICAgICAgICAgICAgPDwgZmllbGQu
dHlwZSgpLT5nZXRTdHJ1Y3QoKS0+bmFtZSgpLmNfc3RyKCkKKyAgICAgICAgICAgICAgICAgICAg
IDw8ICIgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgbmVzdGluZyBsZXZlbCBvZiAiCisgICAgICAg
ICAgICAgICAgICAgICA8PCBrV2ViR0xNYXhTdHJ1Y3ROZXN0aW5nOworICAgICAgICBzdGQ6OnN0
cmluZyByZWFzb24gPSByZWFzb25TdHJlYW0uc3RyKCk7CisgICAgICAgIGVycm9yKGxpbmUsIHJl
YXNvbi5jX3N0cigpLCBmaWVsZC5uYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vCisvLyBQYXJzZSBhbiBh
cnJheSBpbmRleCBleHByZXNzaW9uCisvLworVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0Ojph
ZGRJbmRleEV4cHJlc3Npb24oVEludGVybVR5cGVkICpiYXNlRXhwcmVzc2lvbiwgY29uc3QgVFNv
dXJjZUxvYyYgbG9jYXRpb24sIFRJbnRlcm1UeXBlZCAqaW5kZXhFeHByZXNzaW9uKQoreworICAg
IFRJbnRlcm1UeXBlZCAqaW5kZXhlZEV4cHJlc3Npb24gPSBOVUxMOworCisgICAgaWYgKCFiYXNl
RXhwcmVzc2lvbi0+aXNBcnJheSgpICYmICFiYXNlRXhwcmVzc2lvbi0+aXNNYXRyaXgoKSAmJiAh
YmFzZUV4cHJlc3Npb24tPmlzVmVjdG9yKCkpCisgICAgeworICAgICAgICBpZiAoYmFzZUV4cHJl
c3Npb24tPmdldEFzU3ltYm9sTm9kZSgpKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihs
b2NhdGlvbiwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBvciB2
ZWN0b3IgIiwgYmFzZUV4cHJlc3Npb24tPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKS5j
X3N0cigpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IGVycm9yKGxvY2F0aW9uLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRy
aXgsIG9yIHZlY3RvciAiLCAiZXhwcmVzc2lvbiIpOworICAgICAgICB9CisgICAgICAgIHJlY292
ZXIoKTsKKyAgICB9CisKKyAgICBpZiAoaW5kZXhFeHByZXNzaW9uLT5nZXRRdWFsaWZpZXIoKSA9
PSBFdnFDb25zdCkKKyAgICB7CisgICAgICAgIGludCBpbmRleCA9IGluZGV4RXhwcmVzc2lvbi0+
Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldElDb25zdCgwKTsKKyAgICAgICAgaWYgKGluZGV4IDwg
MCkKKyAgICAgICAgeworICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gaW5mb1N0cmVhbTsK
KyAgICAgICAgICAgIGluZm9TdHJlYW0gPDwgaW5kZXg7CisgICAgICAgICAgICBzdGQ6OnN0cmlu
ZyBpbmZvID0gaW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGVycm9yKGxvY2F0aW9uLCAi
bmVnYXRpdmUgaW5kZXgiLCBpbmZvLmNfc3RyKCkpOworICAgICAgICAgICAgcmVjb3ZlcigpOwor
ICAgICAgICAgICAgaW5kZXggPSAwOworICAgICAgICB9CisgICAgICAgIGlmIChiYXNlRXhwcmVz
c2lvbi0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoYmFzZUV4cHJlc3Npb24tPmlzQXJyYXkoKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAvLyBjb25zdGFudCBmb2xkaW5nIGZvciBhcnJheXMKKyAgICAgICAg
ICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGFkZENvbnN0QXJyYXlOb2RlKGluZGV4LCBiYXNl
RXhwcmVzc2lvbiwgbG9jYXRpb24pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBp
ZiAoYmFzZUV4cHJlc3Npb24tPmlzVmVjdG9yKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgLy8gY29uc3RhbnQgZm9sZGluZyBmb3IgdmVjdG9ycworICAgICAgICAgICAgICAgIFRW
ZWN0b3JGaWVsZHMgZmllbGRzOworICAgICAgICAgICAgICAgIGZpZWxkcy5udW0gPSAxOworICAg
ICAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzWzBdID0gaW5kZXg7IC8vIG5lZWQgdG8gZG8gaXQg
dGhpcyB3YXkgYmVjYXVzZSB2Lnh5IHNlbmRzIGZpZWxkcyBpbnRlZ2VyIGFycmF5CisgICAgICAg
ICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBhZGRDb25zdFZlY3Rvck5vZGUoZmllbGRzLCBi
YXNlRXhwcmVzc2lvbiwgbG9jYXRpb24pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSBpZiAoYmFzZUV4cHJlc3Npb24tPmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgLy8gY29uc3RhbnQgZm9sZGluZyBmb3IgbWF0cmljZXMKKyAgICAgICAgICAgICAg
ICBpbmRleGVkRXhwcmVzc2lvbiA9IGFkZENvbnN0TWF0cml4Tm9kZShpbmRleCwgYmFzZUV4cHJl
c3Npb24sIGxvY2F0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNBcnJheSgpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBiYXNlRXhwcmVzc2lv
bi0+Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICAg
ICAgICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImFycmF5IGluZGV4IG91dCBvZiByYW5nZSAn
IiA8PCBpbmRleCA8PCAiJyI7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJh
SW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgICAgICAgICAgZXJyb3Io
bG9jYXRpb24sICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmVjb3ZlcigpOworICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGJhc2VFeHByZXNzaW9u
LT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkgLSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBlbHNlIGlmIChiYXNlRXhwcmVzc2lvbi0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZx
RnJhZ0RhdGEgJiYgaW5kZXggPiAwICYmICFpc0V4dGVuc2lvbkVuYWJsZWQoIkdMX0VYVF9kcmF3
X2J1ZmZlcnMiKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGVycm9y
KGxvY2F0aW9uLCAiIiwgIlsiLCAiYXJyYXkgaW5kZXhlcyBmb3IgZ2xfRnJhZ0RhdGEgbXVzdCBi
ZSB6ZXJvIHdoZW4gR0xfRVhUX2RyYXdfYnVmZmVycyBpcyBkaXNhYmxlZCIpOworICAgICAgICAg
ICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gMDsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICgoYmFz
ZUV4cHJlc3Npb24tPmlzVmVjdG9yKCkgfHwgYmFzZUV4cHJlc3Npb24tPmlzTWF0cml4KCkpICYm
IGJhc2VFeHByZXNzaW9uLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSA8PSBpbmRleCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9T
dHJlYW07CisgICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJmaWVsZCBzZWxlY3Rp
b24gb3V0IG9mIHJhbmdlICciIDw8IGluZGV4IDw8ICInIjsKKyAgICAgICAgICAgICAgICBzdGQ6
OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgICAgICAg
ICAgZXJyb3IobG9jYXRpb24sICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsKKyAgICAgICAg
ICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgaW5kZXggPSBiYXNlRXhwcmVzc2lv
bi0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkgLSAxOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpbmRleEV4cHJlc3Npb24tPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFy
cmF5UG9pbnRlcigpLT5zZXRJQ29uc3QoaW5kZXgpOworICAgICAgICAgICAgaW5kZXhlZEV4cHJl
c3Npb24gPSBpbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsIGJhc2VFeHByZXNz
aW9uLCBpbmRleEV4cHJlc3Npb24sIGxvY2F0aW9uKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGludGVybWVkaWF0ZS5hZGRJ
bmRleChFT3BJbmRleEluZGlyZWN0LCBiYXNlRXhwcmVzc2lvbiwgaW5kZXhFeHByZXNzaW9uLCBs
b2NhdGlvbik7CisgICAgfQorCisgICAgaWYgKGluZGV4ZWRFeHByZXNzaW9uID09IDApCisgICAg
eworICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25b
MV07CisgICAgICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgwLjBmKTsKKyAgICAgICAgaW5kZXhl
ZEV4cHJlc3Npb24gPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBU
VHlwZShFYnRGbG9hdCwgRWJwSGlnaCwgRXZxQ29uc3QpLCBsb2NhdGlvbik7CisgICAgfQorICAg
IGVsc2UgaWYgKGJhc2VFeHByZXNzaW9uLT5pc0FycmF5KCkpCisgICAgeworICAgICAgICBjb25z
dCBUVHlwZSAmYmFzZVR5cGUgPSBiYXNlRXhwcmVzc2lvbi0+Z2V0VHlwZSgpOworICAgICAgICBp
ZiAoYmFzZVR5cGUuZ2V0U3RydWN0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRUeXBlIGNv
cHlPZlR5cGUoYmFzZVR5cGUuZ2V0U3RydWN0KCkpOworICAgICAgICAgICAgaW5kZXhlZEV4cHJl
c3Npb24tPnNldFR5cGUoY29weU9mVHlwZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0VHlwZShUVHlwZShiYXNl
RXhwcmVzc2lvbi0+Z2V0QmFzaWNUeXBlKCksIGJhc2VFeHByZXNzaW9uLT5nZXRQcmVjaXNpb24o
KSwgRXZxVGVtcG9yYXJ5LCBiYXNlRXhwcmVzc2lvbi0+Z2V0Tm9taW5hbFNpemUoKSwgYmFzZUV4
cHJlc3Npb24tPmlzTWF0cml4KCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChiYXNlRXhw
cmVzc2lvbi0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQorICAgICAgICB7
CisgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVh
bGlmaWVyKEV2cUNvbnN0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChiYXNlRXhw
cmVzc2lvbi0+aXNNYXRyaXgoKSkKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVy
ID0gYmFzZUV4cHJlc3Npb24tPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCA/
IEV2cUNvbnN0IDogRXZxVGVtcG9yYXJ5OworICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0
VHlwZShUVHlwZShiYXNlRXhwcmVzc2lvbi0+Z2V0QmFzaWNUeXBlKCksIGJhc2VFeHByZXNzaW9u
LT5nZXRQcmVjaXNpb24oKSwgcXVhbGlmaWVyLCBiYXNlRXhwcmVzc2lvbi0+Z2V0Tm9taW5hbFNp
emUoKSkpOworICAgIH0KKyAgICBlbHNlIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNWZWN0b3IoKSkK
KyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gYmFzZUV4cHJlc3Npb24tPmdl
dFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCA/IEV2cUNvbnN0IDogRXZxVGVtcG9y
YXJ5OworICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0VHlwZShUVHlwZShiYXNlRXhwcmVz
c2lvbi0+Z2V0QmFzaWNUeXBlKCksIGJhc2VFeHByZXNzaW9uLT5nZXRQcmVjaXNpb24oKSwgcXVh
bGlmaWVyKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGluZGV4ZWRFeHByZXNz
aW9uLT5zZXRUeXBlKGJhc2VFeHByZXNzaW9uLT5nZXRUeXBlKCkpOworICAgIH0KKworICAgIHJl
dHVybiBpbmRleGVkRXhwcmVzc2lvbjsKK30KKworLy8KKy8vIFBhcnNlIGFuIGFycmF5IG9mIHN0
cmluZ3MgdXNpbmcgeXlwYXJzZS4KKy8vCisvLyBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MuCisvLwor
aW50IFBhUGFyc2VTdHJpbmdzKHNpemVfdCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5n
W10sIGNvbnN0IGludCBsZW5ndGhbXSwKKyAgICAgICAgICAgICAgICAgICBUUGFyc2VDb250ZXh0
KiBjb250ZXh0KSB7CisgICAgaWYgKChjb3VudCA9PSAwKSB8fCAoc3RyaW5nID09IE5VTEwpKQor
ICAgICAgICByZXR1cm4gMTsKKworICAgIGlmIChnbHNsYW5nX2luaXRpYWxpemUoY29udGV4dCkp
CisgICAgICAgIHJldHVybiAxOworCisgICAgaW50IGVycm9yID0gZ2xzbGFuZ19zY2FuKGNvdW50
LCBzdHJpbmcsIGxlbmd0aCwgY29udGV4dCk7CisgICAgaWYgKCFlcnJvcikKKyAgICAgICAgZXJy
b3IgPSBnbHNsYW5nX3BhcnNlKGNvbnRleHQpOworCisgICAgZ2xzbGFuZ19maW5hbGl6ZShjb250
ZXh0KTsKKworICAgIHJldHVybiAoZXJyb3IgPT0gMCkgJiYgKGNvbnRleHQtPm51bUVycm9ycygp
ID09IDApID8gMCA6IDE7Cit9CisKKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmIzMjRlNTc1ZDM1YjM5OWQ1ODlmNDdjZmVjZDYzNGE1YTQ5N2U2YmIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9QYXJzZUNvbnRleHQuaApAQCAtMCwwICsxLDEzNCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKyNp
Zm5kZWYgX1BBUlNFUl9IRUxQRVJfSU5DTFVERURfCisjZGVmaW5lIF9QQVJTRVJfSEVMUEVSX0lO
Q0xVREVEXworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFuZGxlci5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvbG9jYWxpbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJj
b21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9TaEhhbmRsZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3lt
Ym9sVGFibGUuaCIKKworc3RydWN0IFRNYXRyaXhGaWVsZHMgeworICAgIGJvb2wgd2hvbGVSb3c7
CisgICAgYm9vbCB3aG9sZUNvbDsKKyAgICBpbnQgcm93OworICAgIGludCBjb2w7Cit9OworCisv
LworLy8gVGhlIGZvbGxvd2luZyBhcmUgZXh0cmEgdmFyaWFibGVzIG5lZWRlZCBkdXJpbmcgcGFy
c2luZywgZ3JvdXBlZCB0b2dldGhlciBzbworLy8gdGhleSBjYW4gYmUgcGFzc2VkIHRvIHRoZSBw
YXJzZXIgd2l0aG91dCBuZWVkaW5nIGEgZ2xvYmFsLgorLy8KK3N0cnVjdCBUUGFyc2VDb250ZXh0
IHsKKyAgICBUUGFyc2VDb250ZXh0KFRTeW1ib2xUYWJsZSYgc3ltdCwgVEV4dGVuc2lvbkJlaGF2
aW9yJiBleHQsIFRJbnRlcm1lZGlhdGUmIGludGVybSwgU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hh
ZGVyU3BlYyBzcGVjLCBpbnQgb3B0aW9ucywgYm9vbCBjaGVja3NQcmVjRXJyb3JzLCBjb25zdCBj
aGFyKiBzb3VyY2VQYXRoLCBUSW5mb1NpbmsmIGlzKSA6CisgICAgICAgICAgICBpbnRlcm1lZGlh
dGUoaW50ZXJtKSwKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlKHN5bXQpLAorICAgICAgICAgICAg
c2hhZGVyVHlwZSh0eXBlKSwKKyAgICAgICAgICAgIHNoYWRlclNwZWMoc3BlYyksCisgICAgICAg
ICAgICBjb21waWxlT3B0aW9ucyhvcHRpb25zKSwKKyAgICAgICAgICAgIHNvdXJjZVBhdGgoc291
cmNlUGF0aCksCisgICAgICAgICAgICB0cmVlUm9vdCgwKSwKKyAgICAgICAgICAgIGxvb3BOZXN0
aW5nTGV2ZWwoMCksCisgICAgICAgICAgICBzdHJ1Y3ROZXN0aW5nTGV2ZWwoMCksCisgICAgICAg
ICAgICBjdXJyZW50RnVuY3Rpb25UeXBlKE5VTEwpLAorICAgICAgICAgICAgZnVuY3Rpb25SZXR1
cm5zVmFsdWUoZmFsc2UpLAorICAgICAgICAgICAgY2hlY2tzUHJlY2lzaW9uRXJyb3JzKGNoZWNr
c1ByZWNFcnJvcnMpLAorICAgICAgICAgICAgZGlhZ25vc3RpY3MoaXMpLAorICAgICAgICAgICAg
ZGlyZWN0aXZlSGFuZGxlcihleHQsIGRpYWdub3N0aWNzKSwKKyAgICAgICAgICAgIHByZXByb2Nl
c3NvcigmZGlhZ25vc3RpY3MsICZkaXJlY3RpdmVIYW5kbGVyKSwKKyAgICAgICAgICAgIHNjYW5u
ZXIoTlVMTCkgeyAgfQorICAgIFRJbnRlcm1lZGlhdGUmIGludGVybWVkaWF0ZTsgLy8gdG8gaG9s
ZCBhbmQgYnVpbGQgYSBwYXJzZSB0cmVlCisgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZTsg
ICAvLyBzeW1ib2wgdGFibGUgdGhhdCBnb2VzIHdpdGggdGhlIGxhbmd1YWdlIGN1cnJlbnRseSBi
ZWluZyBwYXJzZWQKKyAgICBTaFNoYWRlclR5cGUgc2hhZGVyVHlwZTsgICAgICAgICAgICAgIC8v
IHZlcnRleCBvciBmcmFnbWVudCBsYW5ndWFnZSAoZnV0dXJlOiBwYWNrIG9yIHVucGFjaykKKyAg
ICBTaFNoYWRlclNwZWMgc2hhZGVyU3BlYzsgICAgICAgICAgICAgIC8vIFRoZSBsYW5ndWFnZSBz
cGVjaWZpY2F0aW9uIGNvbXBpbGVyIGNvbmZvcm1zIHRvIC0gR0xFUzIgb3IgV2ViR0wuCisgICAg
aW50IGNvbXBpbGVPcHRpb25zOworICAgIGNvbnN0IGNoYXIqIHNvdXJjZVBhdGg7ICAgICAgLy8g
UGF0aCBvZiBzb3VyY2UgZmlsZSBvciBOVUxMLgorICAgIFRJbnRlcm1Ob2RlKiB0cmVlUm9vdDsg
ICAgICAgLy8gcm9vdCBvZiBwYXJzZSB0cmVlIGJlaW5nIGNyZWF0ZWQKKyAgICBpbnQgbG9vcE5l
c3RpbmdMZXZlbDsgICAgICAgIC8vIDAgaWYgb3V0c2lkZSBhbGwgbG9vcHMKKyAgICBpbnQgc3Ry
dWN0TmVzdGluZ0xldmVsOyAgICAgIC8vIGluY3JlbWVudGVkIHdoaWxlIHBhcnNpbmcgYSBzdHJ1
Y3QgZGVjbGFyYXRpb24KKyAgICBjb25zdCBUVHlwZSogY3VycmVudEZ1bmN0aW9uVHlwZTsgIC8v
IHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCdzIGN1cnJlbnRseSBiZWluZyBw
YXJzZWQKKyAgICBib29sIGZ1bmN0aW9uUmV0dXJuc1ZhbHVlOyAgIC8vIHRydWUgaWYgYSBub24t
dm9pZCBmdW5jdGlvbiBoYXMgYSByZXR1cm4KKyAgICBib29sIGNoZWNrc1ByZWNpc2lvbkVycm9y
czsgIC8vIHRydWUgaWYgYW4gZXJyb3Igd2lsbCBiZSBnZW5lcmF0ZWQgd2hlbiBhIHZhcmlhYmxl
IGlzIGRlY2xhcmVkIHdpdGhvdXQgcHJlY2lzaW9uLCBleHBsaWNpdCBvciBpbXBsaWNpdC4KKyAg
ICBib29sIGZyYWdtZW50UHJlY2lzaW9uSGlnaDsgIC8vIHRydWUgaWYgaGlnaHAgcHJlY2lzaW9u
IGlzIHN1cHBvcnRlZCBpbiB0aGUgZnJhZ21lbnQgbGFuZ3VhZ2UuCisgICAgVFN0cmluZyBIYXNo
RXJyTXNnOworICAgIFREaWFnbm9zdGljcyBkaWFnbm9zdGljczsKKyAgICBURGlyZWN0aXZlSGFu
ZGxlciBkaXJlY3RpdmVIYW5kbGVyOworICAgIHBwOjpQcmVwcm9jZXNzb3IgcHJlcHJvY2Vzc29y
OworICAgIHZvaWQqIHNjYW5uZXI7CisKKyAgICBpbnQgbnVtRXJyb3JzKCkgY29uc3QgeyByZXR1
cm4gZGlhZ25vc3RpY3MubnVtRXJyb3JzKCk7IH0KKyAgICBUSW5mb1NpbmsmIGluZm9TaW5rKCkg
eyByZXR1cm4gZGlhZ25vc3RpY3MuaW5mb1NpbmsoKTsgfQorICAgIHZvaWQgZXJyb3IoY29uc3Qg
VFNvdXJjZUxvYyYgbG9jLCBjb25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuLAor
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXh0cmFJbmZvPSIiKTsKKyAgICB2b2lkIHdhcm5p
bmcoY29uc3QgVFNvdXJjZUxvYyYgbG9jLCBjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IGNoYXIq
IHRva2VuLAorICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm89IiIpOworICAg
IHZvaWQgdHJhY2UoY29uc3QgY2hhciogc3RyKTsKKyAgICB2b2lkIHJlY292ZXIoKTsKKworICAg
IGJvb2wgcGFyc2VWZWN0b3JGaWVsZHMoY29uc3QgVFN0cmluZyYsIGludCB2ZWNTaXplLCBUVmVj
dG9yRmllbGRzJiwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSk7CisgICAgYm9vbCBwYXJzZU1hdHJp
eEZpZWxkcyhjb25zdCBUU3RyaW5nJiwgaW50IG1hdFNpemUsIFRNYXRyaXhGaWVsZHMmLCBjb25z
dCBUU291cmNlTG9jJiBsaW5lKTsKKworICAgIGJvb2wgcmVzZXJ2ZWRFcnJvckNoZWNrKGNvbnN0
IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIpOworICAgIHZvaWQg
YXNzaWduRXJyb3IoY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJp
bmcgbGVmdCwgVFN0cmluZyByaWdodCk7CisgICAgdm9pZCB1bmFyeU9wRXJyb3IoY29uc3QgVFNv
dXJjZUxvYyYgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgb3BlcmFuZCk7CisgICAgdm9p
ZCBiaW5hcnlPcEVycm9yKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBU
U3RyaW5nIGxlZnQsIFRTdHJpbmcgcmlnaHQpOworICAgIGJvb2wgcHJlY2lzaW9uRXJyb3JDaGVj
ayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUHJlY2lzaW9uIHByZWNpc2lvbiwgVEJhc2ljVHlw
ZSB0eXBlKTsKKyAgICBib29sIGxWYWx1ZUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGlu
ZSwgY29uc3QgY2hhciogb3AsIFRJbnRlcm1UeXBlZCopOworICAgIGJvb2wgY29uc3RFcnJvckNo
ZWNrKFRJbnRlcm1UeXBlZCogbm9kZSk7CisgICAgYm9vbCBpbnRlZ2VyRXJyb3JDaGVjayhUSW50
ZXJtVHlwZWQqIG5vZGUsIGNvbnN0IGNoYXIqIHRva2VuKTsKKyAgICBib29sIGdsb2JhbEVycm9y
Q2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgYm9vbCBnbG9iYWwsIGNvbnN0IGNoYXIqIHRv
a2VuKTsKKyAgICBib29sIGNvbnN0cnVjdG9yRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBs
aW5lLCBUSW50ZXJtTm9kZSosIFRGdW5jdGlvbiYsIFRPcGVyYXRvciwgVFR5cGUqKTsKKyAgICBi
b29sIGFycmF5U2l6ZUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVEludGVybVR5
cGVkKiBleHByLCBpbnQmIHNpemUpOworICAgIGJvb2wgYXJyYXlRdWFsaWZpZXJFcnJvckNoZWNr
KGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpOworICAgIGJvb2wgYXJy
YXlUeXBlRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUHVibGljVHlwZSB0eXBl
KTsKKyAgICBib29sIGFycmF5RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3Ry
aW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSB0eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSk7
CisgICAgYm9vbCB2b2lkRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiwgY29uc3QgVFN0cmlu
ZyYsIGNvbnN0IFRQdWJsaWNUeXBlJik7CisgICAgYm9vbCBib29sRXJyb3JDaGVjayhjb25zdCBU
U291cmNlTG9jJiwgY29uc3QgVEludGVybVR5cGVkKik7CisgICAgYm9vbCBib29sRXJyb3JDaGVj
ayhjb25zdCBUU291cmNlTG9jJiwgY29uc3QgVFB1YmxpY1R5cGUmKTsKKyAgICBib29sIHNhbXBs
ZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBw
VHlwZSwgY29uc3QgY2hhciogcmVhc29uKTsKKyAgICBib29sIHN0cnVjdFF1YWxpZmllckVycm9y
Q2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlKTsK
KyAgICBib29sIHBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBjb25zdCBUVHlwZSYgdHlwZSk7CisgICAgYm9vbCBu
b25Jbml0Q29uc3RFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlk
ZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBib29sIGFycmF5KTsKKyAgICBib29sIG5vbklu
aXRFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIs
IFRQdWJsaWNUeXBlJiB0eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSk7CisgICAgYm9vbCBwYXJh
bUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIs
IFRRdWFsaWZpZXIgcGFyYW1RdWFsaWZpZXIsIFRUeXBlKiB0eXBlKTsKKyAgICBib29sIGV4dGVu
c2lvbkVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYpOwor
CisgICAgY29uc3QgVFByYWdtYSYgcHJhZ21hKCkgY29uc3QgeyByZXR1cm4gZGlyZWN0aXZlSGFu
ZGxlci5wcmFnbWEoKTsgfQorICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0ZW5zaW9u
QmVoYXZpb3IoKSBjb25zdCB7IHJldHVybiBkaXJlY3RpdmVIYW5kbGVyLmV4dGVuc2lvbkJlaGF2
aW9yKCk7IH0KKyAgICBib29sIHN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IGNoYXIqIGV4dGVuc2lv
bik7CisgICAgYm9vbCBpc0V4dGVuc2lvbkVuYWJsZWQoY29uc3QgY2hhciogZXh0ZW5zaW9uKSBj
b25zdDsKKworICAgIGJvb2wgY29udGFpbnNTYW1wbGVyKFRUeXBlJiB0eXBlKTsKKyAgICBib29s
IGFyZUFsbENoaWxkQ29uc3QoVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUpOworICAgIGNvbnN0
IFRGdW5jdGlvbiogZmluZEZ1bmN0aW9uKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRGdW5jdGlv
biogcGZuQ2FsbCwgYm9vbCAqYnVpbHRJbiA9IDApOworICAgIGJvb2wgZXhlY3V0ZUluaXRpYWxp
emVyKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNU
eXBlJiBwVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGlu
aXRpYWxpemVyLCBUSW50ZXJtTm9kZSomIGludGVybU5vZGUsIFRWYXJpYWJsZSogdmFyaWFibGUg
PSAwKTsKKworICAgIFRJbnRlcm1UeXBlZCogYWRkQ29uc3RydWN0b3IoVEludGVybU5vZGUqLCBj
b25zdCBUVHlwZSosIFRPcGVyYXRvciwgVEZ1bmN0aW9uKiwgY29uc3QgVFNvdXJjZUxvYyYpOwor
ICAgIFRJbnRlcm1UeXBlZCogZm9sZENvbnN0Q29uc3RydWN0b3IoVEludGVybUFnZ3JlZ2F0ZSog
YWdnck5vZGUsIGNvbnN0IFRUeXBlJiB0eXBlKTsKKyAgICBUSW50ZXJtVHlwZWQqIGNvbnN0cnVj
dFN0cnVjdChUSW50ZXJtTm9kZSosIFRUeXBlKiwgaW50LCBjb25zdCBUU291cmNlTG9jJiwgYm9v
bCBzdWJzZXQpOworICAgIFRJbnRlcm1UeXBlZCogY29uc3RydWN0QnVpbHRJbihjb25zdCBUVHlw
ZSosIFRPcGVyYXRvciwgVEludGVybU5vZGUqLCBjb25zdCBUU291cmNlTG9jJiwgYm9vbCBzdWJz
ZXQpOworICAgIFRJbnRlcm1UeXBlZCogYWRkQ29uc3RWZWN0b3JOb2RlKFRWZWN0b3JGaWVsZHMm
LCBUSW50ZXJtVHlwZWQqLCBjb25zdCBUU291cmNlTG9jJik7CisgICAgVEludGVybVR5cGVkKiBh
ZGRDb25zdE1hdHJpeE5vZGUoaW50ICwgVEludGVybVR5cGVkKiwgY29uc3QgVFNvdXJjZUxvYyYp
OworICAgIFRJbnRlcm1UeXBlZCogYWRkQ29uc3RBcnJheU5vZGUoaW50IGluZGV4LCBUSW50ZXJt
VHlwZWQqIG5vZGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpOworICAgIFRJbnRlcm1UeXBlZCog
YWRkQ29uc3RTdHJ1Y3QoVFN0cmluZyYgLCBUSW50ZXJtVHlwZWQqLCBjb25zdCBUU291cmNlTG9j
Jik7CisgICAgVEludGVybVR5cGVkKiBhZGRJbmRleEV4cHJlc3Npb24oVEludGVybVR5cGVkICpi
YXNlRXhwcmVzc2lvbiwgY29uc3QgVFNvdXJjZUxvYyYgbG9jYXRpb24sIFRJbnRlcm1UeXBlZCAq
aW5kZXhFeHByZXNzaW9uKTsKKworICAgIC8vIFBlcmZvcm1zIGFuIGVycm9yIGNoZWNrIGZvciBl
bWJlZGRlZCBzdHJ1Y3QgZGVjbGFyYXRpb25zLgorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhbiBl
cnJvciB3YXMgcmFpc2VkIGR1ZSB0byB0aGUgZGVjbGFyYXRpb24gb2YKKyAgICAvLyB0aGlzIHN0
cnVjdC4KKyAgICBib29sIGVudGVyU3RydWN0RGVjbGFyYXRpb24oY29uc3QgVFNvdXJjZUxvYyYg
bGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllcik7CisgICAgdm9pZCBleGl0U3RydWN0RGVj
bGFyYXRpb24oKTsKKworICAgIGJvb2wgc3RydWN0TmVzdGluZ0Vycm9yQ2hlY2soY29uc3QgVFNv
dXJjZUxvYyYgbGluZSwgY29uc3QgVEZpZWxkJiBmaWVsZCk7Cit9OworCitpbnQgUGFQYXJzZVN0
cmluZ3Moc2l6ZV90IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50
IGxlbmd0aFtdLAorICAgICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOwor
CisjZW5kaWYgLy8gX1BBUlNFUl9IRUxQRVJfSU5DTFVERURfCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Qb29sQWxsb2MuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUG9vbEFsbG9j
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5hYmU3MDI2MmYyZDBkOWVmMDE1MDI1NWEzM2U2NWZkZDBlOTMzZjU3
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvUG9vbEFsbG9jLmNwcApAQCAtMCwwICsxLDI5NCBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUG9vbEFsbG9jLmgiCisKKyNp
Zm5kZWYgX01TQ19WRVIKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0
ZGlvLmg+CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZUdsb2JhbHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL29zaW5jbHVkZS5oIgorCitPU19UTFNJbmRleCBQb29sSW5kZXggPSBPU19JTlZB
TElEX1RMU19JTkRFWDsKKworYm9vbCBJbml0aWFsaXplUG9vbEluZGV4KCkKK3sKKyAgICBhc3Nl
cnQoUG9vbEluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKTsKKworICAgIFBvb2xJbmRleCA9
IE9TX0FsbG9jVExTSW5kZXgoKTsKKyAgICByZXR1cm4gUG9vbEluZGV4ICE9IE9TX0lOVkFMSURf
VExTX0lOREVYOworfQorCit2b2lkIEZyZWVQb29sSW5kZXgoKQoreworICAgIGFzc2VydChQb29s
SW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpOworCisgICAgT1NfRnJlZVRMU0luZGV4KFBv
b2xJbmRleCk7CisgICAgUG9vbEluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7Cit9CisKK1RQ
b29sQWxsb2NhdG9yKiBHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCkKK3sKKyAgICBhc3NlcnQoUG9v
bEluZGV4ICE9IE9TX0lOVkFMSURfVExTX0lOREVYKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
VFBvb2xBbGxvY2F0b3IqPihPU19HZXRUTFNWYWx1ZShQb29sSW5kZXgpKTsKK30KKwordm9pZCBT
ZXRHbG9iYWxQb29sQWxsb2NhdG9yKFRQb29sQWxsb2NhdG9yKiBwb29sQWxsb2NhdG9yKQorewor
ICAgIGFzc2VydChQb29sSW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpOworICAgIE9TX1Nl
dFRMU1ZhbHVlKFBvb2xJbmRleCwgcG9vbEFsbG9jYXRvcik7Cit9CisKKy8vCisvLyBJbXBsZW1l
bnQgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIFRQb29sQWxsb2NhdG9yIGNsYXNzLCB3aGljaAor
Ly8gaXMgZG9jdW1lbnRlZCBpbiBQb29sQWxsb2MuaC4KKy8vCitUUG9vbEFsbG9jYXRvcjo6VFBv
b2xBbGxvY2F0b3IoaW50IGdyb3d0aEluY3JlbWVudCwgaW50IGFsbG9jYXRpb25BbGlnbm1lbnQp
IDogCisgICAgcGFnZVNpemUoZ3Jvd3RoSW5jcmVtZW50KSwKKyAgICBhbGlnbm1lbnQoYWxsb2Nh
dGlvbkFsaWdubWVudCksCisgICAgZnJlZUxpc3QoMCksCisgICAgaW5Vc2VMaXN0KDApLAorICAg
IG51bUNhbGxzKDApLAorICAgIHRvdGFsQnl0ZXMoMCkKK3sKKyAgICAvLworICAgIC8vIERvbid0
IGFsbG93IHBhZ2Ugc2l6ZXMgd2Uga25vdyBhcmUgc21hbGxlciB0aGFuIGFsbCBjb21tb24KKyAg
ICAvLyBPUyBwYWdlIHNpemVzLgorICAgIC8vCisgICAgaWYgKHBhZ2VTaXplIDwgNCoxMDI0KQor
ICAgICAgICBwYWdlU2l6ZSA9IDQqMTAyNDsKKworICAgIC8vCisgICAgLy8gQSBsYXJnZSBjdXJy
ZW50UGFnZU9mZnNldCBpbmRpY2F0ZXMgYSBuZXcgcGFnZSBuZWVkcyB0bworICAgIC8vIGJlIG9i
dGFpbmVkIHRvIGFsbG9jYXRlIG1lbW9yeS4KKyAgICAvLworICAgIGN1cnJlbnRQYWdlT2Zmc2V0
ID0gcGFnZVNpemU7CisKKyAgICAvLworICAgIC8vIEFkanVzdCBhbGlnbm1lbnQgdG8gYmUgYXQg
bGVhc3QgcG9pbnRlciBhbGlnbmVkIGFuZAorICAgIC8vIHBvd2VyIG9mIDIuCisgICAgLy8KKyAg
ICBzaXplX3QgbWluQWxpZ24gPSBzaXplb2Yodm9pZCopOworICAgIGFsaWdubWVudCAmPSB+KG1p
bkFsaWduIC0gMSk7CisgICAgaWYgKGFsaWdubWVudCA8IG1pbkFsaWduKQorICAgICAgICBhbGln
bm1lbnQgPSBtaW5BbGlnbjsKKyAgICBzaXplX3QgYSA9IDE7CisgICAgd2hpbGUgKGEgPCBhbGln
bm1lbnQpCisgICAgICAgIGEgPDw9IDE7CisgICAgYWxpZ25tZW50ID0gYTsKKyAgICBhbGlnbm1l
bnRNYXNrID0gYSAtIDE7CisKKyAgICAvLworICAgIC8vIEFsaWduIGhlYWRlciBza2lwCisgICAg
Ly8KKyAgICBoZWFkZXJTa2lwID0gbWluQWxpZ247CisgICAgaWYgKGhlYWRlclNraXAgPCBzaXpl
b2YodEhlYWRlcikpIHsKKyAgICAgICAgaGVhZGVyU2tpcCA9IChzaXplb2YodEhlYWRlcikgKyBh
bGlnbm1lbnRNYXNrKSAmIH5hbGlnbm1lbnRNYXNrOworICAgIH0KK30KKworVFBvb2xBbGxvY2F0
b3I6On5UUG9vbEFsbG9jYXRvcigpCit7CisgICAgd2hpbGUgKGluVXNlTGlzdCkgeworICAgICAg
ICB0SGVhZGVyKiBuZXh0ID0gaW5Vc2VMaXN0LT5uZXh0UGFnZTsKKyAgICAgICAgaW5Vc2VMaXN0
LT5+dEhlYWRlcigpOworICAgICAgICBkZWxldGUgW10gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
aW5Vc2VMaXN0KTsKKyAgICAgICAgaW5Vc2VMaXN0ID0gbmV4dDsKKyAgICB9CisKKyAgICAvLyBX
ZSBzaG91bGQgbm90IGNoZWNrIHRoZSBndWFyZCBibG9ja3MKKyAgICAvLyBoZXJlLCBiZWNhdXNl
IHdlIGRpZCBpdCBhbHJlYWR5IHdoZW4gdGhlIGJsb2NrIHdhcworICAgIC8vIHBsYWNlZCBpbnRv
IHRoZSBmcmVlIGxpc3QuCisgICAgLy8KKyAgICB3aGlsZSAoZnJlZUxpc3QpIHsKKyAgICAgICAg
dEhlYWRlciogbmV4dCA9IGZyZWVMaXN0LT5uZXh0UGFnZTsKKyAgICAgICAgZGVsZXRlIFtdIHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGZyZWVMaXN0KTsKKyAgICAgICAgZnJlZUxpc3QgPSBuZXh0
OworICAgIH0KK30KKworLy8gU3VwcG9ydCBNU1ZDKysgNi4wCitjb25zdCB1bnNpZ25lZCBjaGFy
IFRBbGxvY2F0aW9uOjpndWFyZEJsb2NrQmVnaW5WYWwgPSAweGZiOworY29uc3QgdW5zaWduZWQg
Y2hhciBUQWxsb2NhdGlvbjo6Z3VhcmRCbG9ja0VuZFZhbCAgID0gMHhmZTsKK2NvbnN0IHVuc2ln
bmVkIGNoYXIgVEFsbG9jYXRpb246OnVzZXJEYXRhRmlsbCAgICAgICA9IDB4Y2Q7CisKKyNpZmRl
ZiBHVUFSRF9CTE9DS1MKKyAgICBjb25zdCBzaXplX3QgVEFsbG9jYXRpb246Omd1YXJkQmxvY2tT
aXplID0gMTY7CisjZWxzZQorICAgIGNvbnN0IHNpemVfdCBUQWxsb2NhdGlvbjo6Z3VhcmRCbG9j
a1NpemUgPSAwOworI2VuZGlmCisKKy8vCisvLyBDaGVjayBhIHNpbmdsZSBndWFyZCBibG9jayBm
b3IgZGFtYWdlCisvLwordm9pZCBUQWxsb2NhdGlvbjo6Y2hlY2tHdWFyZEJsb2NrKHVuc2lnbmVk
IGNoYXIqIGJsb2NrTWVtLCB1bnNpZ25lZCBjaGFyIHZhbCwgY29uc3QgY2hhciogbG9jVGV4dCkg
Y29uc3QKK3sKKyNpZmRlZiBHVUFSRF9CTE9DS1MKKyAgICBmb3IgKHNpemVfdCB4ID0gMDsgeCA8
IGd1YXJkQmxvY2tTaXplOyB4KyspIHsKKyAgICAgICAgaWYgKGJsb2NrTWVtW3hdICE9IHZhbCkg
eworICAgICAgICAgICAgY2hhciBhc3NlcnRNc2dbODBdOworCisgICAgICAgICAgICAvLyBXZSBk
b24ndCBwcmludCB0aGUgYXNzZXJ0IG1lc3NhZ2UuICBJdCdzIGhlcmUganVzdCB0byBiZSBoZWxw
ZnVsLgorI2lmIGRlZmluZWQoX01TQ19WRVIpCisgICAgICAgICAgICBzbnByaW50Zihhc3NlcnRN
c2csIHNpemVvZihhc3NlcnRNc2cpLCAiUG9vbEFsbG9jOiBEYW1hZ2UgJXMgJUl1IGJ5dGUgYWxs
b2NhdGlvbiBhdCAweCVwXG4iLAorICAgICAgICAgICAgICAgICAgICBsb2NUZXh0LCBzaXplLCBk
YXRhKCkpOworI2Vsc2UKKyAgICAgICAgICAgIHNucHJpbnRmKGFzc2VydE1zZywgc2l6ZW9mKGFz
c2VydE1zZyksICJQb29sQWxsb2M6IERhbWFnZSAlcyAlenUgYnl0ZSBhbGxvY2F0aW9uIGF0IDB4
JXBcbiIsCisgICAgICAgICAgICAgICAgICAgIGxvY1RleHQsIHNpemUsIGRhdGEoKSk7CisjZW5k
aWYKKyAgICAgICAgICAgIGFzc2VydCgwICYmICJQb29sQWxsb2M6IERhbWFnZSBpbiBndWFyZCBi
bG9jayIpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCit9CisKKwordm9pZCBUUG9vbEFsbG9j
YXRvcjo6cHVzaCgpCit7CisgICAgdEFsbG9jU3RhdGUgc3RhdGUgPSB7IGN1cnJlbnRQYWdlT2Zm
c2V0LCBpblVzZUxpc3QgfTsKKworICAgIHN0YWNrLnB1c2hfYmFjayhzdGF0ZSk7CisgICAgICAg
IAorICAgIC8vCisgICAgLy8gSW5kaWNhdGUgdGhlcmUgaXMgbm8gY3VycmVudCBwYWdlIHRvIGFs
bG9jYXRlIGZyb20uCisgICAgLy8KKyAgICBjdXJyZW50UGFnZU9mZnNldCA9IHBhZ2VTaXplOwor
fQorCisvLworLy8gRG8gYSBtYXNzLWRlYWxsb2NhdGlvbiBvZiBhbGwgdGhlIGluZGl2aWR1YWwg
YWxsb2NhdGlvbnMKKy8vIHRoYXQgaGF2ZSBvY2N1cnJlZCBzaW5jZSB0aGUgbGFzdCBwdXNoKCks
IG9yIHNpbmNlIHRoZQorLy8gbGFzdCBwb3AoKSwgb3Igc2luY2UgdGhlIG9iamVjdCdzIGNyZWF0
aW9uLgorLy8KKy8vIFRoZSBkZWFsbG9jYXRlZCBwYWdlcyBhcmUgc2F2ZWQgZm9yIGZ1dHVyZSBh
bGxvY2F0aW9ucy4KKy8vCit2b2lkIFRQb29sQWxsb2NhdG9yOjpwb3AoKQoreworICAgIGlmIChz
dGFjay5zaXplKCkgPCAxKQorICAgICAgICByZXR1cm47CisKKyAgICB0SGVhZGVyKiBwYWdlID0g
c3RhY2suYmFjaygpLnBhZ2U7CisgICAgY3VycmVudFBhZ2VPZmZzZXQgPSBzdGFjay5iYWNrKCku
b2Zmc2V0OworCisgICAgd2hpbGUgKGluVXNlTGlzdCAhPSBwYWdlKSB7CisgICAgICAgIC8vIGlu
dm9rZSBkZXN0cnVjdG9yIHRvIGZyZWUgYWxsb2NhdGlvbiBsaXN0CisgICAgICAgIGluVXNlTGlz
dC0+fnRIZWFkZXIoKTsKKyAgICAgICAgCisgICAgICAgIHRIZWFkZXIqIG5leHRJblVzZSA9IGlu
VXNlTGlzdC0+bmV4dFBhZ2U7CisgICAgICAgIGlmIChpblVzZUxpc3QtPnBhZ2VDb3VudCA+IDEp
CisgICAgICAgICAgICBkZWxldGUgW10gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oaW5Vc2VMaXN0
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpblVzZUxpc3QtPm5leHRQYWdlID0gZnJl
ZUxpc3Q7CisgICAgICAgICAgICBmcmVlTGlzdCA9IGluVXNlTGlzdDsKKyAgICAgICAgfQorICAg
ICAgICBpblVzZUxpc3QgPSBuZXh0SW5Vc2U7CisgICAgfQorCisgICAgc3RhY2sucG9wX2JhY2so
KTsKK30KKworLy8KKy8vIERvIGEgbWFzcy1kZWFsbG9jYXRpb24gb2YgYWxsIHRoZSBpbmRpdmlk
dWFsIGFsbG9jYXRpb25zCisvLyB0aGF0IGhhdmUgb2NjdXJyZWQuCisvLwordm9pZCBUUG9vbEFs
bG9jYXRvcjo6cG9wQWxsKCkKK3sKKyAgICB3aGlsZSAoc3RhY2suc2l6ZSgpID4gMCkKKyAgICAg
ICAgcG9wKCk7Cit9CisKK3ZvaWQqIFRQb29sQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3QgbnVt
Qnl0ZXMpCit7CisgICAgLy8KKyAgICAvLyBKdXN0IGtlZXAgc29tZSBpbnRlcmVzdGluZyBzdGF0
aXN0aWNzLgorICAgIC8vCisgICAgKytudW1DYWxsczsKKyAgICB0b3RhbEJ5dGVzICs9IG51bUJ5
dGVzOworCisgICAgLy8gSWYgd2UgYXJlIHVzaW5nIGd1YXJkIGJsb2NrcywgYWxsIGFsbG9jYXRp
b25zIGFyZSBicmFja2V0ZWQgYnkKKyAgICAvLyB0aGVtOiBbZ3VhcmRibG9ja11bYWxsb2NhdGlv
bl1bZ3VhcmRibG9ja10uICBudW1CeXRlcyBpcyBob3cKKyAgICAvLyBtdWNoIG1lbW9yeSB0aGUg
Y2FsbGVyIGFza2VkIGZvci4gIGFsbG9jYXRpb25TaXplIGlzIHRoZSB0b3RhbAorICAgIC8vIHNp
emUgaW5jbHVkaW5nIGd1YXJkIGJsb2Nrcy4gIEluIHJlbGVhc2UgYnVpbGQsCisgICAgLy8gZ3Vh
cmRCbG9ja1NpemU9MCBhbmQgdGhpcyBhbGwgZ2V0cyBvcHRpbWl6ZWQgYXdheS4KKyAgICBzaXpl
X3QgYWxsb2NhdGlvblNpemUgPSBUQWxsb2NhdGlvbjo6YWxsb2NhdGlvblNpemUobnVtQnl0ZXMp
OworICAgIC8vIERldGVjdCBpbnRlZ2VyIG92ZXJmbG93LgorICAgIGlmIChhbGxvY2F0aW9uU2l6
ZSA8IG51bUJ5dGVzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vCisgICAgLy8gRG8gdGhl
IGFsbG9jYXRpb24sIG1vc3QgbGlrZWx5IGNhc2UgZmlyc3QsIGZvciBlZmZpY2llbmN5LgorICAg
IC8vIFRoaXMgc3RlcCBjb3VsZCBiZSBtb3ZlZCB0byBiZSBpbmxpbmUgc29tZXRpbWUuCisgICAg
Ly8KKyAgICBpZiAoYWxsb2NhdGlvblNpemUgPD0gcGFnZVNpemUgLSBjdXJyZW50UGFnZU9mZnNl
dCkgeworICAgICAgICAvLworICAgICAgICAvLyBTYWZlIHRvIGFsbG9jYXRlIGZyb20gY3VycmVu
dFBhZ2VPZmZzZXQuCisgICAgICAgIC8vCisgICAgICAgIHVuc2lnbmVkIGNoYXIqIG1lbW9yeSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhciAqPihpblVzZUxpc3QpICsgY3VycmVudFBh
Z2VPZmZzZXQ7CisgICAgICAgIGN1cnJlbnRQYWdlT2Zmc2V0ICs9IGFsbG9jYXRpb25TaXplOwor
ICAgICAgICBjdXJyZW50UGFnZU9mZnNldCA9IChjdXJyZW50UGFnZU9mZnNldCArIGFsaWdubWVu
dE1hc2spICYgfmFsaWdubWVudE1hc2s7CisKKyAgICAgICAgcmV0dXJuIGluaXRpYWxpemVBbGxv
Y2F0aW9uKGluVXNlTGlzdCwgbWVtb3J5LCBudW1CeXRlcyk7CisgICAgfQorCisgICAgaWYgKGFs
bG9jYXRpb25TaXplID4gcGFnZVNpemUgLSBoZWFkZXJTa2lwKSB7CisgICAgICAgIC8vCisgICAg
ICAgIC8vIERvIGEgbXVsdGktcGFnZSBhbGxvY2F0aW9uLiAgRG9uJ3QgbWl4IHRoZXNlIHdpdGgg
dGhlIG90aGVycy4KKyAgICAgICAgLy8gVGhlIE9TIGlzIGVmZmljaWVudCBhbmQgYWxsb2NhdGlu
ZyBhbmQgZnJlZS1pbmcgbXVsdGlwbGUgcGFnZXMuCisgICAgICAgIC8vCisgICAgICAgIHNpemVf
dCBudW1CeXRlc1RvQWxsb2MgPSBhbGxvY2F0aW9uU2l6ZSArIGhlYWRlclNraXA7CisgICAgICAg
IC8vIERldGVjdCBpbnRlZ2VyIG92ZXJmbG93LgorICAgICAgICBpZiAobnVtQnl0ZXNUb0FsbG9j
IDwgYWxsb2NhdGlvblNpemUpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICB0SGVh
ZGVyKiBtZW1vcnkgPSByZWludGVycHJldF9jYXN0PHRIZWFkZXIqPig6Om5ldyBjaGFyW251bUJ5
dGVzVG9BbGxvY10pOworICAgICAgICBpZiAobWVtb3J5ID09IDApCisgICAgICAgICAgICByZXR1
cm4gMDsKKworICAgICAgICAvLyBVc2UgcGxhY2VtZW50LW5ldyB0byBpbml0aWFsaXplIGhlYWRl
cgorICAgICAgICBuZXcobWVtb3J5KSB0SGVhZGVyKGluVXNlTGlzdCwgKG51bUJ5dGVzVG9BbGxv
YyArIHBhZ2VTaXplIC0gMSkgLyBwYWdlU2l6ZSk7CisgICAgICAgIGluVXNlTGlzdCA9IG1lbW9y
eTsKKworICAgICAgICBjdXJyZW50UGFnZU9mZnNldCA9IHBhZ2VTaXplOyAgLy8gbWFrZSBuZXh0
IGFsbG9jYXRpb24gY29tZSBmcm9tIGEgbmV3IHBhZ2UKKworICAgICAgICAvLyBObyBndWFyZCBi
bG9ja3MgZm9yIG11bHRpLXBhZ2UgYWxsb2NhdGlvbnMgKHlldCkKKyAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtZW1vcnkp
ICsgaGVhZGVyU2tpcCk7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBOZWVkIGEgc2ltcGxlIHBh
Z2UgdG8gYWxsb2NhdGUgZnJvbS4KKyAgICAvLworICAgIHRIZWFkZXIqIG1lbW9yeTsKKyAgICBp
ZiAoZnJlZUxpc3QpIHsKKyAgICAgICAgbWVtb3J5ID0gZnJlZUxpc3Q7CisgICAgICAgIGZyZWVM
aXN0ID0gZnJlZUxpc3QtPm5leHRQYWdlOworICAgIH0gZWxzZSB7CisgICAgICAgIG1lbW9yeSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dEhlYWRlcio+KDo6bmV3IGNoYXJbcGFnZVNpemVdKTsKKyAgICAg
ICAgaWYgKG1lbW9yeSA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
Ly8gVXNlIHBsYWNlbWVudC1uZXcgdG8gaW5pdGlhbGl6ZSBoZWFkZXIKKyAgICBuZXcobWVtb3J5
KSB0SGVhZGVyKGluVXNlTGlzdCwgMSk7CisgICAgaW5Vc2VMaXN0ID0gbWVtb3J5OworICAgIAor
ICAgIHVuc2lnbmVkIGNoYXIqIHJldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhciAq
PihpblVzZUxpc3QpICsgaGVhZGVyU2tpcDsKKyAgICBjdXJyZW50UGFnZU9mZnNldCA9IChoZWFk
ZXJTa2lwICsgYWxsb2NhdGlvblNpemUgKyBhbGlnbm1lbnRNYXNrKSAmIH5hbGlnbm1lbnRNYXNr
OworCisgICAgcmV0dXJuIGluaXRpYWxpemVBbGxvY2F0aW9uKGluVXNlTGlzdCwgcmV0LCBudW1C
eXRlcyk7Cit9CisKKworLy8KKy8vIENoZWNrIGFsbCBhbGxvY2F0aW9ucyBpbiBhIGxpc3QgZm9y
IGRhbWFnZSBieSBjYWxsaW5nIGNoZWNrIG9uIGVhY2guCisvLwordm9pZCBUQWxsb2NhdGlvbjo6
Y2hlY2tBbGxvY0xpc3QoKSBjb25zdAoreworICAgIGZvciAoY29uc3QgVEFsbG9jYXRpb24qIGFs
bG9jID0gdGhpczsgYWxsb2MgIT0gMDsgYWxsb2MgPSBhbGxvYy0+cHJldkFsbG9jKQorICAgICAg
ICBhbGxvYy0+Y2hlY2soKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Bvb2xBbGxvYy5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUG9vbEFsbG9jLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWRk
MjQ5YzRkM2EzOWJiMjAxYzM4NTU0MjM5OTA4MDhmNTVmMDdlNQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Bvb2xBbGxv
Yy5oCkBAIC0wLDAgKzEsMzAwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9QT09M
QUxMT0NfSU5DTFVERURfCisjZGVmaW5lIF9QT09MQUxMT0NfSU5DTFVERURfCisKKyNpZmRlZiBf
REVCVUcKKyNkZWZpbmUgR1VBUkRfQkxPQ0tTICAvLyBkZWZpbmUgdG8gZW5hYmxlIGd1YXJkIGJs
b2NrIHNhbml0eSBjaGVja2luZworI2VuZGlmCisKKy8vCisvLyBUaGlzIGhlYWRlciBkZWZpbmVz
IGFuIGFsbG9jYXRvciB0aGF0IGNhbiBiZSB1c2VkIHRvIGVmZmljaWVudGx5CisvLyBhbGxvY2F0
ZSBhIGxhcmdlIG51bWJlciBvZiBzbWFsbCByZXF1ZXN0cyBmb3IgaGVhcCBtZW1vcnksIHdpdGgg
dGhlIAorLy8gaW50ZW50aW9uIHRoYXQgdGhleSBhcmUgbm90IGluZGl2aWR1YWxseSBkZWFsbG9j
YXRlZCwgYnV0IHJhdGhlciAKKy8vIGNvbGxlY3RpdmVseSBkZWFsbG9jYXRlZCBhdCBvbmUgdGlt
ZS4KKy8vCisvLyBUaGlzIHNpbXVsdGFuZW91c2x5CisvLworLy8gKiBNYWtlcyBlYWNoIGluZGl2
aWR1YWwgYWxsb2NhdGlvbiBtdWNoIG1vcmUgZWZmaWNpZW50OyB0aGUKKy8vICAgICB0eXBpY2Fs
IGFsbG9jYXRpb24gaXMgdHJpdmlhbC4KKy8vICogQ29tcGxldGVseSBhdm9pZHMgdGhlIGNvc3Qg
b2YgZG9pbmcgaW5kaXZpZHVhbCBkZWFsbG9jYXRpb24uCisvLyAqIFNhdmVzIHRoZSB0cm91Ymxl
IG9mIHRyYWNraW5nIGRvd24gYW5kIHBsdWdnaW5nIGEgbGFyZ2UgY2xhc3Mgb2YgbGVha3MuCisv
LworLy8gSW5kaXZpZHVhbCBjbGFzc2VzIGNhbiB1c2UgdGhpcyBhbGxvY2F0b3IgYnkgc3VwcGx5
aW5nIHRoZWlyIG93bgorLy8gbmV3IGFuZCBkZWxldGUgbWV0aG9kcy4KKy8vCisvLyBTVEwgY29u
dGFpbmVycyBjYW4gdXNlIHRoaXMgYWxsb2NhdG9yIGJ5IHVzaW5nIHRoZSBwb29sX2FsbG9jYXRv
cgorLy8gY2xhc3MgYXMgdGhlIGFsbG9jYXRvciAoc2Vjb25kKSB0ZW1wbGF0ZSBhcmd1bWVudC4K
Ky8vCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRl
IDx2ZWN0b3I+CisKKy8vIElmIHdlIGFyZSB1c2luZyBndWFyZCBibG9ja3MsIHdlIG11c3QgdHJh
Y2sgZWFjaCBpbmRpdnVhbAorLy8gYWxsb2NhdGlvbi4gIElmIHdlIGFyZW4ndCB1c2luZyBndWFy
ZCBibG9ja3MsIHRoZXNlCisvLyBuZXZlciBnZXQgaW5zdGFudGlhdGVkLCBzbyB3b24ndCBoYXZl
IGFueSBpbXBhY3QuCisvLyAKKworY2xhc3MgVEFsbG9jYXRpb24geworcHVibGljOgorICAgIFRB
bGxvY2F0aW9uKHNpemVfdCBzaXplLCB1bnNpZ25lZCBjaGFyKiBtZW0sIFRBbGxvY2F0aW9uKiBw
cmV2ID0gMCkgOgorICAgICAgICBzaXplKHNpemUpLCBtZW0obWVtKSwgcHJldkFsbG9jKHByZXYp
IHsKKyAgICAgICAgLy8gQWxsb2NhdGlvbnMgYXJlIGJyYWNrZXRlZDoKKyAgICAgICAgLy8gICAg
W2FsbG9jYXRpb25IZWFkZXJdW2luaXRpYWxHdWFyZEJsb2NrXVt1c2VyRGF0YV1bZmluYWxHdWFy
ZEJsb2NrXQorICAgICAgICAvLyBUaGlzIHdvdWxkIGJlIGNsZWFuZXIgd2l0aCBpZiAoZ3VhcmRC
bG9ja1NpemUpLi4uLCBidXQgdGhhdAorICAgICAgICAvLyBtYWtlcyB0aGUgY29tcGlsZXIgcHJp
bnQgd2FybmluZ3MgYWJvdXQgMCBsZW5ndGggbWVtc2V0cywKKyAgICAgICAgLy8gZXZlbiB3aXRo
IHRoZSBpZigpIHByb3RlY3RpbmcgdGhlbS4KKyNpZmRlZiBHVUFSRF9CTE9DS1MKKyAgICAgICAg
bWVtc2V0KHByZUd1YXJkKCksIGd1YXJkQmxvY2tCZWdpblZhbCwgZ3VhcmRCbG9ja1NpemUpOwor
ICAgICAgICBtZW1zZXQoZGF0YSgpLCAgICAgIHVzZXJEYXRhRmlsbCwgICAgICAgc2l6ZSk7Cisg
ICAgICAgIG1lbXNldChwb3N0R3VhcmQoKSwgZ3VhcmRCbG9ja0VuZFZhbCwgICBndWFyZEJsb2Nr
U2l6ZSk7CisjZW5kaWYKKyAgICB9CisKKyAgICB2b2lkIGNoZWNrKCkgY29uc3QgeworICAgICAg
ICBjaGVja0d1YXJkQmxvY2socHJlR3VhcmQoKSwgIGd1YXJkQmxvY2tCZWdpblZhbCwgImJlZm9y
ZSIpOworICAgICAgICBjaGVja0d1YXJkQmxvY2socG9zdEd1YXJkKCksIGd1YXJkQmxvY2tFbmRW
YWwsICAgImFmdGVyIik7CisgICAgfQorCisgICAgdm9pZCBjaGVja0FsbG9jTGlzdCgpIGNvbnN0
OworCisgICAgLy8gUmV0dXJuIHRvdGFsIHNpemUgbmVlZGVkIHRvIGFjY29tb2RhdGUgdXNlciBi
dWZmZXIgb2YgJ3NpemUnLAorICAgIC8vIHBsdXMgb3VyIHRyYWNraW5nIGRhdGEuCisgICAgaW5s
aW5lIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUoc2l6ZV90IHNpemUpIHsKKyAgICAgICAg
cmV0dXJuIHNpemUgKyAyICogZ3VhcmRCbG9ja1NpemUgKyBoZWFkZXJTaXplKCk7CisgICAgfQor
CisgICAgLy8gT2Zmc2V0IGZyb20gc3Vycm91bmRpbmcgYnVmZmVyIHRvIGdldCB0byB1c2VyIGRh
dGEgYnVmZmVyLgorICAgIGlubGluZSBzdGF0aWMgdW5zaWduZWQgY2hhciogb2Zmc2V0QWxsb2Nh
dGlvbih1bnNpZ25lZCBjaGFyKiBtKSB7CisgICAgICAgIHJldHVybiBtICsgZ3VhcmRCbG9ja1Np
emUgKyBoZWFkZXJTaXplKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgY2hlY2tHdWFy
ZEJsb2NrKHVuc2lnbmVkIGNoYXIqIGJsb2NrTWVtLCB1bnNpZ25lZCBjaGFyIHZhbCwgY29uc3Qg
Y2hhciogbG9jVGV4dCkgY29uc3Q7CisKKyAgICAvLyBGaW5kIG9mZnNldHMgdG8gcHJlIGFuZCBw
b3N0IGd1YXJkIGJsb2NrcywgYW5kIHVzZXIgZGF0YSBidWZmZXIKKyAgICB1bnNpZ25lZCBjaGFy
KiBwcmVHdWFyZCgpICBjb25zdCB7IHJldHVybiBtZW0gKyBoZWFkZXJTaXplKCk7IH0KKyAgICB1
bnNpZ25lZCBjaGFyKiBkYXRhKCkgICAgICBjb25zdCB7IHJldHVybiBwcmVHdWFyZCgpICsgZ3Vh
cmRCbG9ja1NpemU7IH0KKyAgICB1bnNpZ25lZCBjaGFyKiBwb3N0R3VhcmQoKSBjb25zdCB7IHJl
dHVybiBkYXRhKCkgKyBzaXplOyB9CisKKyAgICBzaXplX3Qgc2l6ZTsgICAgICAgICAgICAgICAg
ICAvLyBzaXplIG9mIHRoZSB1c2VyIGRhdGEgYXJlYQorICAgIHVuc2lnbmVkIGNoYXIqIG1lbTsg
ICAgICAgICAgIC8vIGJlZ2lubmluZyBvZiBvdXIgYWxsb2NhdGlvbiAocHRzIHRvIGhlYWRlcikK
KyAgICBUQWxsb2NhdGlvbiogcHJldkFsbG9jOyAgICAgICAvLyBwcmlvciBhbGxvY2F0aW9uIGlu
IHRoZSBjaGFpbgorCisgICAgLy8gU3VwcG9ydCBNU1ZDKysgNi4wCisgICAgY29uc3Qgc3RhdGlj
IHVuc2lnbmVkIGNoYXIgZ3VhcmRCbG9ja0JlZ2luVmFsOworICAgIGNvbnN0IHN0YXRpYyB1bnNp
Z25lZCBjaGFyIGd1YXJkQmxvY2tFbmRWYWw7CisgICAgY29uc3Qgc3RhdGljIHVuc2lnbmVkIGNo
YXIgdXNlckRhdGFGaWxsOworCisgICAgY29uc3Qgc3RhdGljIHNpemVfdCBndWFyZEJsb2NrU2l6
ZTsKKyNpZmRlZiBHVUFSRF9CTE9DS1MKKyAgICBpbmxpbmUgc3RhdGljIHNpemVfdCBoZWFkZXJT
aXplKCkgeyByZXR1cm4gc2l6ZW9mKFRBbGxvY2F0aW9uKTsgfQorI2Vsc2UKKyAgICBpbmxpbmUg
c3RhdGljIHNpemVfdCBoZWFkZXJTaXplKCkgeyByZXR1cm4gMDsgfQorI2VuZGlmCit9OworCisv
LworLy8gVGhlcmUgYXJlIHNldmVyYWwgc3RhY2tzLiAgT25lIGlzIHRvIHRyYWNrIHRoZSBwdXNo
aW5nIGFuZCBwb3BwaW5nCisvLyBvZiB0aGUgdXNlciwgYW5kIG5vdCB5ZXQgaW1wbGVtZW50ZWQu
ICBUaGUgb3RoZXJzIGFyZSBzaW1wbHkgYSAKKy8vIHJlcG9zaXRvcmllcyBvZiBmcmVlIHBhZ2Vz
IG9yIHVzZWQgcGFnZXMuCisvLworLy8gUGFnZSBzdGFja3MgYXJlIGxpbmtlZCB0b2dldGhlciB3
aXRoIGEgc2ltcGxlIGhlYWRlciBhdCB0aGUgYmVnaW5uaW5nCisvLyBvZiBlYWNoIGFsbG9jYXRp
b24gb2J0YWluZWQgZnJvbSB0aGUgdW5kZXJseWluZyBPUy4gIE11bHRpLXBhZ2UgYWxsb2NhdGlv
bnMKKy8vIGFyZSByZXR1cm5lZCB0byB0aGUgT1MuICBJbmRpdmlkdWFsIHBhZ2UgYWxsb2NhdGlv
bnMgYXJlIGtlcHQgZm9yIGZ1dHVyZQorLy8gcmUtdXNlLgorLy8KKy8vIFRoZSAicGFnZSBzaXpl
IiB1c2VkIGlzIG5vdCwgbm9yIG11c3QgaXQgbWF0Y2gsIHRoZSB1bmRlcmx5aW5nIE9TCisvLyBw
YWdlIHNpemUuICBCdXQsIGhhdmluZyBpdCBiZSBhYm91dCB0aGF0IHNpemUgb3IgZXF1YWwgdG8g
YSBzZXQgb2YgCisvLyBwYWdlcyBpcyBsaWtlbHkgbW9zdCBvcHRpbWFsLgorLy8KK2NsYXNzIFRQ
b29sQWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAgICBUUG9vbEFsbG9jYXRvcihpbnQgZ3Jvd3RoSW5j
cmVtZW50ID0gOCoxMDI0LCBpbnQgYWxsb2NhdGlvbkFsaWdubWVudCA9IDE2KTsKKworICAgIC8v
CisgICAgLy8gRG9uJ3QgY2FsbCB0aGUgZGVzdHJ1Y3RvciBqdXN0IHRvIGZyZWUgdXAgdGhlIG1l
bW9yeSwgY2FsbCBwb3AoKQorICAgIC8vCisgICAgflRQb29sQWxsb2NhdG9yKCk7CisKKyAgICAv
LworICAgIC8vIENhbGwgcHVzaCgpIHRvIGVzdGFibGlzaCBhIG5ldyBwbGFjZSB0byBwb3AgbWVt
b3J5IHRvby4gIERvZXMgbm90CisgICAgLy8gaGF2ZSB0byBiZSBjYWxsZWQgdG8gZ2V0IHRoaW5n
cyBzdGFydGVkLgorICAgIC8vCisgICAgdm9pZCBwdXNoKCk7CisKKyAgICAvLworICAgIC8vIENh
bGwgcG9wKCkgdG8gZnJlZSBhbGwgbWVtb3J5IGFsbG9jYXRlZCBzaW5jZSB0aGUgbGFzdCBjYWxs
IHRvIHB1c2goKSwKKyAgICAvLyBvciBpZiBubyBsYXN0IGNhbGwgdG8gcHVzaCwgZnJlZXMgYWxs
IG1lbW9yeSBzaW5jZSBmaXJzdCBhbGxvY2F0aW9uLgorICAgIC8vCisgICAgdm9pZCBwb3AoKTsK
KworICAgIC8vCisgICAgLy8gQ2FsbCBwb3BBbGwoKSB0byBmcmVlIGFsbCBtZW1vcnkgYWxsb2Nh
dGVkLgorICAgIC8vCisgICAgdm9pZCBwb3BBbGwoKTsKKworICAgIC8vCisgICAgLy8gQ2FsbCBh
bGxvY2F0ZSgpIHRvIGFjdHVhbGx5IGFjcXVpcmUgbWVtb3J5LiAgUmV0dXJucyAwIGlmIG5vIG1l
bW9yeQorICAgIC8vIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGEgcHJvcGVybHkgYWxpZ25lZCBwb2lu
dGVyIHRvICdudW1CeXRlcycgb2YgbWVtb3J5LgorICAgIC8vCisgICAgdm9pZCogYWxsb2NhdGUo
c2l6ZV90IG51bUJ5dGVzKTsKKworICAgIC8vCisgICAgLy8gVGhlcmUgaXMgbm8gZGVhbGxvY2F0
ZS4gIFRoZSBwb2ludCBvZiB0aGlzIGNsYXNzIGlzIHRoYXQKKyAgICAvLyBkZWFsbG9jYXRpb24g
Y2FuIGJlIHNraXBwZWQgYnkgdGhlIHVzZXIgb2YgaXQsIGFzIHRoZSBtb2RlbAorICAgIC8vIG9m
IHVzZSBpcyB0byBzaW11bHRhbmVvdXNseSBkZWFsbG9jYXRlIGV2ZXJ5dGhpbmcgYXQgb25jZQor
ICAgIC8vIGJ5IGNhbGxpbmcgcG9wKCksIGFuZCB0byBub3QgaGF2ZSB0byBzb2x2ZSBtZW1vcnkg
bGVhayBwcm9ibGVtcy4KKyAgICAvLworCitwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIHN0cnVjdCB0
SGVhZGVyOworICAgIAorICAgIHN0cnVjdCB0SGVhZGVyIHsKKyAgICAgICAgdEhlYWRlcih0SGVh
ZGVyKiBuZXh0UGFnZSwgc2l6ZV90IHBhZ2VDb3VudCkgOgorICAgICAgICAgICAgbmV4dFBhZ2Uo
bmV4dFBhZ2UpLAorICAgICAgICAgICAgcGFnZUNvdW50KHBhZ2VDb3VudCkKKyNpZmRlZiBHVUFS
RF9CTE9DS1MKKyAgICAgICAgICAsIGxhc3RBbGxvY2F0aW9uKDApCisjZW5kaWYKKyAgICAgICAg
ICAgIHsgfQorCisgICAgICAgIH50SGVhZGVyKCkgeworI2lmZGVmIEdVQVJEX0JMT0NLUworICAg
ICAgICAgICAgaWYgKGxhc3RBbGxvY2F0aW9uKQorICAgICAgICAgICAgICAgIGxhc3RBbGxvY2F0
aW9uLT5jaGVja0FsbG9jTGlzdCgpOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICB0SGVh
ZGVyKiBuZXh0UGFnZTsKKyAgICAgICAgc2l6ZV90IHBhZ2VDb3VudDsKKyNpZmRlZiBHVUFSRF9C
TE9DS1MKKyAgICAgICAgVEFsbG9jYXRpb24qIGxhc3RBbGxvY2F0aW9uOworI2VuZGlmCisgICAg
fTsKKworICAgIHN0cnVjdCB0QWxsb2NTdGF0ZSB7CisgICAgICAgIHNpemVfdCBvZmZzZXQ7Cisg
ICAgICAgIHRIZWFkZXIqIHBhZ2U7CisgICAgfTsKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPHRB
bGxvY1N0YXRlPiB0QWxsb2NTdGFjazsKKworICAgIC8vIFRyYWNrIGFsbG9jYXRpb25zIGlmIGFu
ZCBvbmx5IGlmIHdlJ3JlIHVzaW5nIGd1YXJkIGJsb2NrcworICAgIHZvaWQqIGluaXRpYWxpemVB
bGxvY2F0aW9uKHRIZWFkZXIqIGJsb2NrLCB1bnNpZ25lZCBjaGFyKiBtZW1vcnksIHNpemVfdCBu
dW1CeXRlcykgeworI2lmZGVmIEdVQVJEX0JMT0NLUworICAgICAgICBuZXcobWVtb3J5KSBUQWxs
b2NhdGlvbihudW1CeXRlcywgbWVtb3J5LCBibG9jay0+bGFzdEFsbG9jYXRpb24pOworICAgICAg
ICBibG9jay0+bGFzdEFsbG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PFRBbGxvY2F0aW9uKj4o
bWVtb3J5KTsKKyNlbmRpZgorICAgICAgICAvLyBUaGlzIGlzIG9wdGltaXplZCBlbnRpcmVseSBh
d2F5IGlmIEdVQVJEX0JMT0NLUyBpcyBub3QgZGVmaW5lZC4KKyAgICAgICAgcmV0dXJuIFRBbGxv
Y2F0aW9uOjpvZmZzZXRBbGxvY2F0aW9uKG1lbW9yeSk7CisgICAgfQorCisgICAgc2l6ZV90IHBh
Z2VTaXplOyAgICAgICAgLy8gZ3JhbnVsYXJpdHkgb2YgYWxsb2NhdGlvbiBmcm9tIHRoZSBPUwor
ICAgIHNpemVfdCBhbGlnbm1lbnQ7ICAgICAgIC8vIGFsbCByZXR1cm5lZCBhbGxvY2F0aW9ucyB3
aWxsIGJlIGFsaWduZWQgYXQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBn
cmFudWxhcml0eSwgd2hpY2ggd2lsbCBiZSBhIHBvd2VyIG9mIDIKKyAgICBzaXplX3QgYWxpZ25t
ZW50TWFzazsKKyAgICBzaXplX3QgaGVhZGVyU2tpcDsgICAgICAvLyBhbW91bnQgb2YgbWVtb3J5
IHRvIHNraXAgdG8gbWFrZSByb29tIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgIGhlYWRlciAoYmFzaWNhbGx5LCBzaXplIG9mIGhlYWRlciwgcm91bmRlZAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgdXAgdG8gbWFrZSBpdCBhbGlnbmVkCisg
ICAgc2l6ZV90IGN1cnJlbnRQYWdlT2Zmc2V0OyAgLy8gbmV4dCBvZmZzZXQgaW4gdG9wIG9mIGlu
VXNlTGlzdCB0byBhbGxvY2F0ZSBmcm9tCisgICAgdEhlYWRlciogZnJlZUxpc3Q7ICAgICAgLy8g
bGlzdCBvZiBwb3BwZWQgbWVtb3J5CisgICAgdEhlYWRlciogaW5Vc2VMaXN0OyAgICAgLy8gbGlz
dCBvZiBhbGwgbWVtb3J5IGN1cnJlbnRseSBiZWluZyB1c2VkCisgICAgdEFsbG9jU3RhY2sgc3Rh
Y2s7ICAgICAgLy8gc3RhY2sgb2Ygd2hlcmUgdG8gYWxsb2NhdGUgZnJvbSwgdG8gcGFydGl0aW9u
IHBvb2wKKworICAgIGludCBudW1DYWxsczsgICAgICAgICAgIC8vIGp1c3QgYW4gaW50ZXJlc3Rp
bmcgc3RhdGlzdGljCisgICAgc2l6ZV90IHRvdGFsQnl0ZXM7ICAgICAgLy8ganVzdCBhbiBpbnRl
cmVzdGluZyBzdGF0aXN0aWMKK3ByaXZhdGU6CisgICAgVFBvb2xBbGxvY2F0b3ImIG9wZXJhdG9y
PShjb25zdCBUUG9vbEFsbG9jYXRvciYpOyAgLy8gZG9udCBhbGxvdyBhc3NpZ25tZW50IG9wZXJh
dG9yCisgICAgVFBvb2xBbGxvY2F0b3IoY29uc3QgVFBvb2xBbGxvY2F0b3ImKTsgIC8vIGRvbnQg
YWxsb3cgZGVmYXVsdCBjb3B5IGNvbnN0cnVjdG9yCit9OworCisKKy8vCisvLyBUaGVyZSBjb3Vs
ZCBwb3RlbnRpYWxseSBiZSBtYW55IHBvb2xzIHdpdGggcG9wcyBoYXBwZW5pbmcgYXQKKy8vIGRp
ZmZlcmVudCB0aW1lcy4gIEJ1dCBhIHNpbXBsZSB1c2UgaXMgdG8gaGF2ZSBhIGdsb2JhbCBwb3AK
Ky8vIHdpdGggZXZlcnlvbmUgdXNpbmcgdGhlIHNhbWUgZ2xvYmFsIGFsbG9jYXRvci4KKy8vCitl
eHRlcm4gVFBvb2xBbGxvY2F0b3IqIEdldEdsb2JhbFBvb2xBbGxvY2F0b3IoKTsKK2V4dGVybiB2
b2lkIFNldEdsb2JhbFBvb2xBbGxvY2F0b3IoVFBvb2xBbGxvY2F0b3IqIHBvb2xBbGxvY2F0b3Ip
OworCisvLworLy8gVGhpcyBTVEwgY29tcGF0aWJsZSBhbGxvY2F0b3IgaXMgaW50ZW5kZWQgdG8g
YmUgdXNlZCBhcyB0aGUgYWxsb2NhdG9yCisvLyBwYXJhbWV0ZXIgdG8gdGVtcGxhdGl6ZWQgU1RM
IGNvbnRhaW5lcnMsIGxpa2UgdmVjdG9yIGFuZCBtYXAuCisvLworLy8gSXQgd2lsbCB1c2UgdGhl
IHBvb2xzIGZvciBhbGxvY2F0aW9uLCBhbmQgbm90CisvLyBkbyBhbnkgZGVhbGxvY2F0aW9uLCBi
dXQgd2lsbCBzdGlsbCBkbyBkZXN0cnVjdGlvbi4KKy8vCit0ZW1wbGF0ZTxjbGFzcyBUPgorY2xh
c3MgcG9vbF9hbGxvY2F0b3IgeworcHVibGljOgorICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlw
ZTsKKyAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CisgICAgdHlwZWRlZiBU
KiBwb2ludGVyOworICAgIHR5cGVkZWYgY29uc3QgVCogY29uc3RfcG9pbnRlcjsKKyAgICB0eXBl
ZGVmIFQmIHJlZmVyZW5jZTsKKyAgICB0eXBlZGVmIGNvbnN0IFQmIGNvbnN0X3JlZmVyZW5jZTsK
KyAgICB0eXBlZGVmIFQgdmFsdWVfdHlwZTsKKworICAgIHRlbXBsYXRlPGNsYXNzIE90aGVyPiAK
KyAgICBzdHJ1Y3QgcmViaW5kIHsKKyAgICAgICAgdHlwZWRlZiBwb29sX2FsbG9jYXRvcjxPdGhl
cj4gb3RoZXI7CisgICAgfTsKKyAgICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIHgpIGNvbnN0
IHsgcmV0dXJuICZ4OyB9CisgICAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5j
ZSB4KSBjb25zdCB7IHJldHVybiAmeDsgfQorCisgICAgcG9vbF9hbGxvY2F0b3IoKSA6IGFsbG9j
YXRvcihHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCkpIHsgfQorICAgIHBvb2xfYWxsb2NhdG9yKFRQ
b29sQWxsb2NhdG9yJiBhKSA6IGFsbG9jYXRvcigmYSkgeyB9CisgICAgcG9vbF9hbGxvY2F0b3Io
Y29uc3QgcG9vbF9hbGxvY2F0b3I8VD4mIHApIDogYWxsb2NhdG9yKHAuYWxsb2NhdG9yKSB7IH0K
KworICAgIHRlbXBsYXRlIDxjbGFzcyBPdGhlcj4KKyAgICBwb29sX2FsbG9jYXRvcjxUPiYgb3Bl
cmF0b3I9KGNvbnN0IHBvb2xfYWxsb2NhdG9yPE90aGVyPiYgcCkgeworICAgICAgYWxsb2NhdG9y
ID0gcC5hbGxvY2F0b3I7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdGVtcGxh
dGU8Y2xhc3MgT3RoZXI+CisgICAgcG9vbF9hbGxvY2F0b3IoY29uc3QgcG9vbF9hbGxvY2F0b3I8
T3RoZXI+JiBwKSA6IGFsbG9jYXRvcigmcC5nZXRBbGxvY2F0b3IoKSkgeyB9CisKKyNpZiBkZWZp
bmVkKF9fU1VOUFJPX0NDKSAmJiAhZGVmaW5lZChfUldTVERfQUxMT0NBVE9SKQorICAgIC8vIGxp
YkNTdGQgb24gc29tZSBwbGF0Zm9ybXMgaGF2ZSBhIGRpZmZlcmVudCBhbGxvY2F0ZS9kZWFsbG9j
YXRlIGludGVyZmFjZS4KKyAgICAvLyBDYWxsZXIgcHJlLWJha2VzIHNpemVvZihUKSBpbnRvICdu
JyB3aGljaCBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlCisgICAgLy8gYWxsb2NhdGVkLCBu
b3QgdGhlIG51bWJlciBvZiBlbGVtZW50cy4KKyAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3R5cGUg
bikgeyAKKyAgICAgICAgcmV0dXJuIGdldEFsbG9jYXRvcigpLmFsbG9jYXRlKG4pOworICAgIH0K
KyAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3R5cGUgbiwgY29uc3Qgdm9pZCopIHsKKyAgICAgICAg
cmV0dXJuIGdldEFsbG9jYXRvcigpLmFsbG9jYXRlKG4pOworICAgIH0KKyAgICB2b2lkIGRlYWxs
b2NhdGUodm9pZCosIHNpemVfdHlwZSkge30KKyNlbHNlCisgICAgcG9pbnRlciBhbGxvY2F0ZShz
aXplX3R5cGUgbikgeyAKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8cG9pbnRlcj4o
Z2V0QWxsb2NhdG9yKCkuYWxsb2NhdGUobiAqIHNpemVvZihUKSkpOworICAgIH0KKyAgICBwb2lu
dGVyIGFsbG9jYXRlKHNpemVfdHlwZSBuLCBjb25zdCB2b2lkKikgeyAKKyAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8cG9pbnRlcj4oZ2V0QWxsb2NhdG9yKCkuYWxsb2NhdGUobiAqIHNp
emVvZihUKSkpOworICAgIH0KKyAgICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciwgc2l6ZV90eXBl
KSB7fQorI2VuZGlmICAvLyBfUldTVERfQUxMT0NBVE9SCisKKyAgICB2b2lkIGNvbnN0cnVjdChw
b2ludGVyIHAsIGNvbnN0IFQmIHZhbCkgeyBuZXcgKCh2b2lkICopcCkgVCh2YWwpOyB9CisgICAg
dm9pZCBkZXN0cm95KHBvaW50ZXIgcCkgeyBwLT5UOjp+VCgpOyB9CisKKyAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgcG9vbF9hbGxvY2F0b3ImIHJocykgY29uc3QgeyByZXR1cm4gJmdldEFsbG9j
YXRvcigpID09ICZyaHMuZ2V0QWxsb2NhdG9yKCk7IH0KKyAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgcG9vbF9hbGxvY2F0b3ImIHJocykgY29uc3QgeyByZXR1cm4gJmdldEFsbG9jYXRvcigpICE9
ICZyaHMuZ2V0QWxsb2NhdG9yKCk7IH0KKworICAgIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdHlwZT4oLTEpIC8gc2l6ZW9mKFQpOyB9CisgICAg
c2l6ZV90eXBlIG1heF9zaXplKGludCBzaXplKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxz
aXplX3R5cGU+KC0xKSAvIHNpemU7IH0KKworICAgIHZvaWQgc2V0QWxsb2NhdG9yKFRQb29sQWxs
b2NhdG9yKiBhKSB7IGFsbG9jYXRvciA9IGE7IH0KKyAgICBUUG9vbEFsbG9jYXRvciYgZ2V0QWxs
b2NhdG9yKCkgY29uc3QgeyByZXR1cm4gKmFsbG9jYXRvcjsgfQorCitwcm90ZWN0ZWQ6CisgICAg
VFBvb2xBbGxvY2F0b3IqIGFsbG9jYXRvcjsKK307CisKKyNlbmRpZiAvLyBfUE9PTEFMTE9DX0lO
Q0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvUHJhZ21hLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9QcmFnbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZjc0NDEyM2I4Mjg5NDk4YzMxNzkx
NGVhZDNkZjEzNjNhZTg2MTZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUHJhZ21hLmgKQEAgLTAsMCArMSwxOSBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJBR01BX0hfCisjZGVmaW5lIENPTVBJ
TEVSX1BSQUdNQV9IXworCitzdHJ1Y3QgVFByYWdtYSB7CisgICAgLy8gQnkgZGVmYXVsdCBvcHRp
bWl6YXRpb24gaXMgdHVybmVkIG9uIGFuZCBkZWJ1ZyBpcyB0dXJuZWQgb2ZmLgorICAgIFRQcmFn
bWEoKSA6IG9wdGltaXplKHRydWUpLCBkZWJ1ZyhmYWxzZSkgeyB9CisgICAgVFByYWdtYShib29s
IG8sIGJvb2wgZCkgOiBvcHRpbWl6ZShvKSwgZGVidWcoZCkgeyB9CisKKyAgICBib29sIG9wdGlt
aXplOworICAgIGJvb2wgZGVidWc7Cit9OworCisjZW5kaWYgLy8gQ09NUElMRVJfUFJBR01BX0hf
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9RdWFsaWZpZXJBbGl2ZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9RdWFsaWZpZXJBbGl2ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWJhMDg3ZTE3
NjU4ZGQ0NTU1NmQyYmRkMzUwYjhiNzZlYjdmN2MzYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1F1YWxpZmllckFsaXZl
LmNwcApAQCAtMCwwICsxLDU4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKworY2xhc3MgVEFsaXZlVHJhdmVyc2Vy
IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgorICAgIFRBbGl2ZVRyYXZlcnNl
cihUUXVhbGlmaWVyIHEpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwgZmFsc2UsIHRy
dWUpLCBmb3VuZChmYWxzZSksIHF1YWxpZmllcihxKQorICAgIHsKKyAgICB9CisKKwlib29sIHdh
c0ZvdW5kKCkgeyByZXR1cm4gZm91bmQ7IH0KKworcHJvdGVjdGVkOgorICAgIGJvb2wgZm91bmQ7
CisgICAgVFF1YWxpZmllciBxdWFsaWZpZXI7CisKKyAgICB2b2lkIHZpc2l0U3ltYm9sKFRJbnRl
cm1TeW1ib2wqKTsKKyAgICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0LCBUSW50ZXJtU2VsZWN0
aW9uKik7Cit9OworCisvLworLy8gUmVwb3J0IHdoZXRoZXIgb3Igbm90IGEgdmFyaWFibGUgb2Yg
dGhlIGdpdmVuIHF1YWxpZmllciB0eXBlCisvLyBpcyBndWFyYW50ZWVkIHdyaXR0ZW4uICBOb3Qg
YWx3YXlzIHBvc3NpYmxlIHRvIGRldGVybWluZSBpZgorLy8gaXQgaXMgd3JpdHRlbiBjb25kaXRp
b25hbGx5LgorLy8KKy8vID8/IEl0IGRvZXMgbm90IGRvIHRoaXMgd2VsbCB5ZXQsIHRoaXMgaXMg
anVzdCBhIHBsYWNlIGhvbGRlcgorLy8gdGhhdCBzaW1wbHkgZGV0ZXJtaW5lcyBpZiBpdCB3YXMg
cmVmZXJlbmNlIGF0IGFsbCwgYW55d2hlcmUuCisvLworYm9vbCBRdWFsaWZpZXJXcml0dGVuKFRJ
bnRlcm1Ob2RlKiBub2RlLCBUUXVhbGlmaWVyIHF1YWxpZmllcikKK3sKKyAgICBUQWxpdmVUcmF2
ZXJzZXIgaXQocXVhbGlmaWVyKTsKKworICAgIGlmIChub2RlKQorICAgICAgICBub2RlLT50cmF2
ZXJzZSgmaXQpOworCisgICAgcmV0dXJuIGl0Lndhc0ZvdW5kKCk7Cit9CisKK3ZvaWQgVEFsaXZl
VHJhdmVyc2VyOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQoreworICAgIC8vCisg
ICAgLy8gSWYgaXQncyB3aGF0IHdlJ3JlIGxvb2tpbmcgZm9yLCByZWNvcmQgaXQuCisgICAgLy8K
KyAgICBpZiAobm9kZS0+Z2V0UXVhbGlmaWVyKCkgPT0gcXVhbGlmaWVyKQorICAgICAgICBmb3Vu
ZCA9IHRydWU7Cit9CisKK2Jvb2wgVEFsaXZlVHJhdmVyc2VyOjp2aXNpdFNlbGVjdGlvbihWaXNp
dCBwcmVWaXNpdCwgVEludGVybVNlbGVjdGlvbiogbm9kZSkKK3sKKyAgICBpZiAod2FzRm91bmQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9RdWFs
aWZpZXJBbGl2ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvUXVhbGlmaWVyQWxpdmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NzJhMDZmNzIxOTJhZjFkMzc4Zjcy
ZDFlYTIxMGRhZTg5OWJiZjRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUXVhbGlmaWVyQWxpdmUuaApAQCAtMCwwICsx
LDcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK2Jvb2wgUXVhbGlmaWVyV3JpdHRlbihUSW50ZXJt
Tm9kZSogcm9vdCwgVFF1YWxpZmllcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZW1vdmVUcmVlLmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1JlbW92ZVRyZWUuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjkyZTVkYmJmZTE0OGU1Y2MzOTk0NzFiNzc4ZGE2NzlhMTkyN2U3NTcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9SZW1vdmVUcmVlLmNwcApAQCAtMCwwICsxLDc3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1JlbW92ZVRyZWUuaCIKKworLy8KKy8vIENvZGUgdG8gcmVjdXJz
aXZlbHkgZGVsZXRlIHRoZSBpbnRlcm1lZGlhdGUgdHJlZS4KKy8vCisKK2NsYXNzIFJlbW92ZVRy
ZWUgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworcHVibGljOgorCVJlbW92ZVRyZWUoKSA6
IFRJbnRlcm1UcmF2ZXJzZXIoZmFsc2UsIGZhbHNlLCB0cnVlKQorCXsKKwl9CisKK3Byb3RlY3Rl
ZDoKKwl2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKKwl2b2lkIHZpc2l0Q29uc3Rh
bnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiopOworCWJvb2wgdmlzaXRCaW5hcnkoVmlzaXQg
dmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKwlib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1VbmFyeSopOworCWJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1T
ZWxlY3Rpb24qKTsKKwlib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdn
cmVnYXRlKik7Cit9OworCit2b2lkIFJlbW92ZVRyZWU6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1i
b2wqIG5vZGUpCit7CisJZGVsZXRlIG5vZGU7Cit9CisKK2Jvb2wgUmVtb3ZlVHJlZTo6dmlzaXRC
aW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5vZGUpCit7CisJZGVsZXRlIG5vZGU7
CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW1vdmVUcmVlOjp2aXNpdFVuYXJ5KFZpc2l0
IHZpc2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUpCit7CisgICAgZGVsZXRlIG5vZGU7CisKKwlyZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBSZW1vdmVUcmVlOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNp
dCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK3sKKwlkZWxldGUgbm9kZTsKKworCXJldHVybiB0
cnVlOworfQorCitib29sIFJlbW92ZVRyZWU6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBU
SW50ZXJtU2VsZWN0aW9uKiBub2RlKQoreworCWRlbGV0ZSBub2RlOworCisJcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgUmVtb3ZlVHJlZTo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFu
dFVuaW9uKiBub2RlKQoreworCWRlbGV0ZSBub2RlOworfQorCisvLworLy8gRW50cnkgcG9pbnQu
CisvLwordm9pZCBSZW1vdmVBbGxUcmVlTm9kZXMoVEludGVybU5vZGUqIHJvb3QpCit7CisgICAg
UmVtb3ZlVHJlZSBpdDsKKworICAgIHJvb3QtPnRyYXZlcnNlKCZpdCk7Cit9CisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1JlbW92
ZVRyZWUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1JlbW92ZVRyZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45N2E4MjE2NzljMjNmYjkyODBiM2VkZjRhN2U4ZmNi
ZTQxNTYxNDY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvUmVtb3ZlVHJlZS5oCkBAIC0wLDAgKzEsNyBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKwordm9pZCBSZW1vdmVBbGxUcmVlTm9kZXMoVEludGVybU5vZGUqKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1JlbmFtZUZ1bmN0aW9uLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9SZW5hbWVGdW5jdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFmN2ZiMTZjNDU5NzljZDFk
YTJiZjE5ZWE4NjE3OWQyNjRkNWZmYWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZW5hbWVGdW5jdGlvbi5oCkBAIC0w
LDAgKzEsMzYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1JFTkFNRV9GVU5D
VElPTgorI2RlZmluZSBDT01QSUxFUl9SRU5BTUVfRlVOQ1RJT04KKworI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisKKy8vCisvLyBSZW5hbWVzIGEgZnVuY3Rp
b24sIGluY2x1ZGluZyBpdHMgZGVjbGFyYXRpb24gYW5kIGFueSBjYWxscyB0byBpdC4KKy8vCitj
bGFzcyBSZW5hbWVGdW5jdGlvbiA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CitwdWJsaWM6
CisgICAgUmVuYW1lRnVuY3Rpb24oY29uc3QgVFN0cmluZyYgb2xkRnVuY3Rpb25OYW1lLCBjb25z
dCBUU3RyaW5nJiBuZXdGdW5jdGlvbk5hbWUpCisgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUs
IGZhbHNlLCBmYWxzZSkKKyAgICAsIG1PbGRGdW5jdGlvbk5hbWUob2xkRnVuY3Rpb25OYW1lKQor
ICAgICwgbU5ld0Z1bmN0aW9uTmFtZShuZXdGdW5jdGlvbk5hbWUpIHt9CisKKyAgICB2aXJ0dWFs
IGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUp
CisgICAgeworICAgICAgICBUT3BlcmF0b3Igb3AgPSBub2RlLT5nZXRPcCgpOworICAgICAgICBp
ZiAoKG9wID09IEVPcEZ1bmN0aW9uIHx8IG9wID09IEVPcEZ1bmN0aW9uQ2FsbCkgJiYgbm9kZS0+
Z2V0TmFtZSgpID09IG1PbGRGdW5jdGlvbk5hbWUpCisgICAgICAgICAgICBub2RlLT5zZXROYW1l
KG1OZXdGdW5jdGlvbk5hbWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgY29uc3QgVFN0cmluZyBtT2xkRnVuY3Rpb25OYW1lOworICAgIGNvbnN0IFRTdHJp
bmcgbU5ld0Z1bmN0aW9uTmFtZTsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfUkVOQU1FX0ZV
TkNUSU9OCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9SZXdyaXRlRWxzZUJsb2Nrcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZXdyaXRlRWxzZUJsb2Nrcy5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNDhlODdjZDU3YTg4MjhhYmY2Nzc3NzlhMjI5N2NiOWIwNjMwMzJmNgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Jl
d3JpdGVFbHNlQmxvY2tzLmNwcApAQCAtMCwwICsxLDk4IEBACisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIFJl
d3JpdGVFbHNlQmxvY2tzLmNwcDogSW1wbGVtZW50YXRpb24gZm9yIHRyZWUgdHJhbnNmb3JtIHRv
IGNoYW5nZQorLy8gICBhbGwgaWYtZWxzZSBibG9ja3MgdG8gaWYtaWYgYmxvY2tzLgorLy8KKwor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUmV3cml0ZUVsc2VCbG9ja3MuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL05vZGVTZWFyY2guaCIKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgiCisKK25hbWVzcGFjZSBzaAoreworCitUSW50ZXJt
U3ltYm9sICpNYWtlTmV3VGVtcG9yYXJ5KGNvbnN0IFRTdHJpbmcgJm5hbWUsIFRCYXNpY1R5cGUg
dHlwZSkKK3sKKyAgICBUVHlwZSB2YXJpYWJsZVR5cGUodHlwZSwgRWJwSGlnaCwgRXZxSW50ZXJu
YWwpOworICAgIHJldHVybiBuZXcgVEludGVybVN5bWJvbCgtMSwgbmFtZSwgdmFyaWFibGVUeXBl
KTsKK30KKworVEludGVybUJpbmFyeSAqTWFrZU5ld0JpbmFyeShUT3BlcmF0b3Igb3AsIFRJbnRl
cm1UeXBlZCAqbGVmdCwgVEludGVybVR5cGVkICpyaWdodCwgY29uc3QgVFR5cGUgJnJlc3VsdFR5
cGUpCit7CisgICAgVEludGVybUJpbmFyeSAqYmluYXJ5ID0gbmV3IFRJbnRlcm1CaW5hcnkob3Ap
OworICAgIGJpbmFyeS0+c2V0TGVmdChsZWZ0KTsKKyAgICBiaW5hcnktPnNldFJpZ2h0KHJpZ2h0
KTsKKyAgICBiaW5hcnktPnNldFR5cGUocmVzdWx0VHlwZSk7CisgICAgcmV0dXJuIGJpbmFyeTsK
K30KKworVEludGVybVVuYXJ5ICpNYWtlTmV3VW5hcnkoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlw
ZWQgKm9wZXJhbmQpCit7CisgICAgVEludGVybVVuYXJ5ICp1bmFyeSA9IG5ldyBUSW50ZXJtVW5h
cnkob3AsIG9wZXJhbmQtPmdldFR5cGUoKSk7CisgICAgdW5hcnktPnNldE9wZXJhbmQob3BlcmFu
ZCk7CisgICAgcmV0dXJuIHVuYXJ5OworfQorCitib29sIEVsc2VCbG9ja1Jld3JpdGVyOjp2aXNp
dEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSkKK3sKKyAgICBz
d2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BTZXF1ZW5jZToKKyAg
ICAgICAgeworICAgICAgICAgICAgZm9yIChzaXplX3Qgc3RhdGVtZW50SW5kZXggPSAwOyBzdGF0
ZW1lbnRJbmRleCAhPSBub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKTsgc3RhdGVtZW50SW5kZXgr
KykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSAqc3RhdGVtZW50
ID0gbm9kZS0+Z2V0U2VxdWVuY2UoKVtzdGF0ZW1lbnRJbmRleF07CisgICAgICAgICAgICAgICAg
VEludGVybVNlbGVjdGlvbiAqc2VsZWN0aW9uID0gc3RhdGVtZW50LT5nZXRBc1NlbGVjdGlvbk5v
ZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi0+Z2V0RmFs
c2VCbG9jaygpICE9IE5VTEwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBub2RlLT5nZXRTZXF1ZW5jZSgpW3N0YXRlbWVudEluZGV4XSA9IHJld3JpdGVTZWxlY3Rpb24o
c2VsZWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNlbGVjdGlvbjsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisK
KyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitU
SW50ZXJtTm9kZSAqRWxzZUJsb2NrUmV3cml0ZXI6OnJld3JpdGVTZWxlY3Rpb24oVEludGVybVNl
bGVjdGlvbiAqc2VsZWN0aW9uKQoreworICAgIEFTU0VSVChzZWxlY3Rpb24tPmdldEZhbHNlQmxv
Y2soKSAhPSBOVUxMKTsKKworICAgIFRTdHJpbmcgdGVtcG9yYXJ5TmFtZSA9ICJjb25kXyIgKyBz
dHIobVRlbXBvcmFyeUluZGV4KyspOworICAgIFRJbnRlcm1UeXBlZCAqdHlwZWRDb25kaXRpb24g
PSBzZWxlY3Rpb24tPmdldENvbmRpdGlvbigpLT5nZXRBc1R5cGVkKCk7CisgICAgVFR5cGUgcmVz
dWx0VHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQpOworICAgIFRJbnRlcm1TeW1ib2wgKmNvbmRp
dGlvblN5bWJvbEEgPSBNYWtlTmV3VGVtcG9yYXJ5KHRlbXBvcmFyeU5hbWUsIEVidEJvb2wpOwor
ICAgIFRJbnRlcm1TeW1ib2wgKmNvbmRpdGlvblN5bWJvbEIgPSBNYWtlTmV3VGVtcG9yYXJ5KHRl
bXBvcmFyeU5hbWUsIEVidEJvb2wpOworICAgIFRJbnRlcm1TeW1ib2wgKmNvbmRpdGlvblN5bWJv
bEMgPSBNYWtlTmV3VGVtcG9yYXJ5KHRlbXBvcmFyeU5hbWUsIEVidEJvb2wpOworICAgIFRJbnRl
cm1CaW5hcnkgKnN0b3JlQ29uZGl0aW9uID0gTWFrZU5ld0JpbmFyeShFT3BJbml0aWFsaXplLCBj
b25kaXRpb25TeW1ib2xBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0eXBlZENvbmRpdGlvbiwgcmVzdWx0VHlwZSk7CisgICAgVEludGVybVVuYXJ5
ICpuZWdhdGVkQ29uZGl0aW9uID0gTWFrZU5ld1VuYXJ5KEVPcExvZ2ljYWxOb3QsIGNvbmRpdGlv
blN5bWJvbEIpOworICAgIFRJbnRlcm1TZWxlY3Rpb24gKmZhbHNlQmxvY2sgPSBuZXcgVEludGVy
bVNlbGVjdGlvbihuZWdhdGVkQ29uZGl0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24tPmdldEZhbHNlQmxvY2soKSwg
TlVMTCk7CisgICAgVEludGVybVNlbGVjdGlvbiAqbmV3SWZFbHNlID0gbmV3IFRJbnRlcm1TZWxl
Y3Rpb24oY29uZGl0aW9uU3ltYm9sQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24tPmdldFRydWVCbG9jaygpLCBmYWxzZUJs
b2NrKTsKKworICAgIFRJbnRlcm1BZ2dyZWdhdGUgKmRlY2xhcmF0aW9uID0gbmV3IFRJbnRlcm1B
Z2dyZWdhdGUoRU9wRGVjbGFyYXRpb24pOworICAgIGRlY2xhcmF0aW9uLT5nZXRTZXF1ZW5jZSgp
LnB1c2hfYmFjayhzdG9yZUNvbmRpdGlvbik7CisKKyAgICBUSW50ZXJtQWdncmVnYXRlICpibG9j
ayA9IG5ldyBUSW50ZXJtQWdncmVnYXRlKEVPcFNlcXVlbmNlKTsKKyAgICBibG9jay0+Z2V0U2Vx
dWVuY2UoKS5wdXNoX2JhY2soZGVjbGFyYXRpb24pOworICAgIGJsb2NrLT5nZXRTZXF1ZW5jZSgp
LnB1c2hfYmFjayhuZXdJZkVsc2UpOworCisgICAgcmV0dXJuIGJsb2NrOworfQorCit2b2lkIFJl
d3JpdGVFbHNlQmxvY2tzKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIEVsc2VCbG9ja1Jld3Jp
dGVyIHJld3JpdGVyOworICAgIG5vZGUtPnRyYXZlcnNlKCZyZXdyaXRlcik7Cit9CisKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1Jld3JpdGVFbHNlQmxvY2tzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9SZXdyaXRlRWxzZUJsb2Nrcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEwMjIxMzM1Y2U3
MGZjOTZkZjIzYTkwOGM0ZGU1YzA3NWUwNDljMWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZXdyaXRlRWxzZUJsb2Nr
cy5oCkBAIC0wLDAgKzEsMzkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gUmV3cml0ZUVsc2VCbG9ja3Mu
aDogUHJvdG90eXBlIGZvciB0cmVlIHRyYW5zZm9ybSB0byBjaGFuZ2UKKy8vICAgYWxsIGlmLWVs
c2UgYmxvY2tzIHRvIGlmLWlmIGJsb2Nrcy4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUkVXUklU
RV9FTFNFX0JMT0NLU19IXworI2RlZmluZSBDT01QSUxFUl9SRVdSSVRFX0VMU0VfQkxPQ0tTX0hf
CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgorCituYW1l
c3BhY2Ugc2gKK3sKKworY2xhc3MgRWxzZUJsb2NrUmV3cml0ZXIgOiBwdWJsaWMgVEludGVybVRy
YXZlcnNlcgoreworICBwdWJsaWM6CisgICAgICBFbHNlQmxvY2tSZXdyaXRlcigpCisgICAgICAg
ICAgOiBUSW50ZXJtVHJhdmVyc2VyKGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpCisgICAgICAg
ICAgLCBtVGVtcG9yYXJ5SW5kZXgoMCkKKyAgICAgIHt9CisKKyAgcHJvdGVjdGVkOgorICAgIGJv
b2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKmFnZ3JlZ2F0
ZSk7CisKKyAgcHJpdmF0ZToKKyAgICBpbnQgbVRlbXBvcmFyeUluZGV4OworCisgICAgVEludGVy
bU5vZGUgKnJld3JpdGVTZWxlY3Rpb24oVEludGVybVNlbGVjdGlvbiAqc2VsZWN0aW9uKTsKK307
CisKK3ZvaWQgUmV3cml0ZUVsc2VCbG9ja3MoVEludGVybU5vZGUgKm5vZGUpOworCit9CisKKyNl
bmRpZiAvLyBDT01QSUxFUl9SRVdSSVRFX0VMU0VfQkxPQ0tTX0hfCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TZWFyY2hTeW1ib2wu
Y3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU2Vh
cmNoU3ltYm9sLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNzhjODRlMzcwZGFmNzNhNDYxNWYyOGNiZWRhN2Yw
YjMzOTMxYzU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvU2VhcmNoU3ltYm9sLmNwcApAQCAtMCwwICsxLDM4IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworLy8gU2VhcmNoU3ltYm9sIGlzIGFuIEFTVCB0cmF2ZXJzZXIgdG8g
ZGV0ZWN0IHRoZSB1c2Ugb2YgYSBnaXZlbiBzeW1ib2wgbmFtZQorLy8KKworI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvU2VhcmNoU3ltYm9sLmgiCisKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL0luZm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9PdXRw
dXRITFNMLmgiCisKK25hbWVzcGFjZSBzaAoreworU2VhcmNoU3ltYm9sOjpTZWFyY2hTeW1ib2wo
Y29uc3QgVFN0cmluZyAmc3ltYm9sKSA6IG1TeW1ib2woc3ltYm9sKQoreworICAgIG1hdGNoID0g
ZmFsc2U7Cit9CisKK3ZvaWQgU2VhcmNoU3ltYm9sOjp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9k
ZSkKK3sKKyAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKK30KKwordm9pZCBTZWFyY2hTeW1ib2w6
OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUpCit7CisgICAgaWYgKHN5bWJv
bE5vZGUtPmdldFN5bWJvbCgpID09IG1TeW1ib2wpCisgICAgeworICAgICAgICBtYXRjaCA9IHRy
dWU7CisgICAgfQorfQorCitib29sIFNlYXJjaFN5bWJvbDo6Zm91bmRNYXRjaCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1hdGNoOworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU2VhcmNoU3ltYm9sLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TZWFyY2hTeW1ib2wuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44ZGRkM2NiMWFjM2ExODJkZTllMjkxZjE1MWZjM2IxZWQxYWE5OWFmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvU2VhcmNoU3ltYm9sLmgKQEAgLTAsMCArMSwzMyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8v
IFNlYXJjaFN5bWJvbCBpcyBhbiBBU1QgdHJhdmVyc2VyIHRvIGRldGVjdCB0aGUgdXNlIG9mIGEg
Z2l2ZW4gc3ltYm9sIG5hbWUKKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfU0VBUkNIU1lNQk9MX0hf
CisjZGVmaW5lIENPTVBJTEVSX1NFQVJDSFNZTUJPTF9IXworCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1BhcnNlQ29udGV4dC5oIgorCituYW1lc3BhY2Ugc2gKK3sKK2NsYXNzIFNlYXJjaFN5bWJvbCA6
IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBTZWFyY2hTeW1ib2wo
Y29uc3QgVFN0cmluZyAmc3ltYm9sKTsKKworICAgIHZvaWQgdHJhdmVyc2UoVEludGVybU5vZGUg
Km5vZGUpOworICAgIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqc3ltYm9sTm9kZSk7
CisKKyAgICBib29sIGZvdW5kTWF0Y2goKSBjb25zdDsKKworICBwcm90ZWN0ZWQ6CisgICAgY29u
c3QgVFN0cmluZyAmbVN5bWJvbDsKKyAgICBib29sIG1hdGNoOworfTsKK30KKworI2VuZGlmICAg
Ly8gQ09NUElMRVJfU0VBUkNIU1lNQk9MX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU2hIYW5kbGUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41NGFlMjc4NTJkZDUzMjliMGQ4ZTNkZGFjNGUwM2JjYjE4MDY1ZWNhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU2hI
YW5kbGUuaApAQCAtMCwwICsxLDE3OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBf
U0hIQU5ETEVfSU5DTFVERURfCisjZGVmaW5lIF9TSEhBTkRMRV9JTkNMVURFRF8KKworLy8KKy8v
IE1hY2hpbmUgaW5kZXBlbmRlbnQgcGFydCBvZiB0aGUgY29tcGlsZXIgcHJpdmF0ZSBvYmplY3Rz
CisvLyBzZW50IGFzIFNoSGFuZGxlIHRvIHRoZSBkcml2ZXIuCisvLworLy8gVGhpcyBzaG91bGQg
bm90IGJlIGluY2x1ZGVkIGJ5IGRyaXZlciBjb2RlLgorLy8KKworI2luY2x1ZGUgIkdMU0xBTkcv
U2hhZGVyTGFuZy5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9CdWlsdEluRnVu
Y3Rpb25FbXVsYXRvci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRXh0ZW5zaW9u
QmVoYXZpb3IuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0hhc2hOYW1lcy5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9WYXJpYWJsZUluZm8uaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jb21waWxlci9BcnJh
eUJvdW5kc0NsYW1wZXIuaCIKKworY2xhc3MgTG9uZ05hbWVNYXA7CitjbGFzcyBUQ29tcGlsZXI7
CitjbGFzcyBURGVwZW5kZW5jeUdyYXBoOworY2xhc3MgVHJhbnNsYXRvckhMU0w7CisKKy8vCisv
LyBIZWxwZXIgZnVuY3Rpb24gdG8gaWRlbnRpZnkgc3BlY3MgdGhhdCBhcmUgYmFzZWQgb24gdGhl
IFdlYkdMIHNwZWMsCisvLyBsaWtlIHRoZSBDU1MgU2hhZGVycyBzcGVjLgorLy8KK2Jvb2wgaXNX
ZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNwZWMgc3BlYyk7CisKKy8vCisvLyBUaGUgYmFzZSBjbGFz
cyB1c2VkIHRvIGJhY2sgaGFuZGxlcyByZXR1cm5lZCB0byB0aGUgZHJpdmVyLgorLy8KK2NsYXNz
IFRTaEhhbmRsZUJhc2UgeworcHVibGljOgorICAgIFRTaEhhbmRsZUJhc2UoKTsKKyAgICB2aXJ0
dWFsIH5UU2hIYW5kbGVCYXNlKCk7CisgICAgdmlydHVhbCBUQ29tcGlsZXIqIGdldEFzQ29tcGls
ZXIoKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBUcmFuc2xhdG9ySExTTCogZ2V0QXNUcmFu
c2xhdG9ySExTTCgpIHsgcmV0dXJuIDA7IH0KKworcHJvdGVjdGVkOgorICAgIC8vIE1lbW9yeSBh
bGxvY2F0b3IuIEFsbG9jYXRlcyBhbmQgdHJhY2tzIG1lbW9yeSByZXF1aXJlZCBieSB0aGUgY29t
cGlsZXIuCisgICAgLy8gRGVhbGxvY2F0ZXMgYWxsIG1lbW9yeSB3aGVuIGNvbXBpbGVyIGlzIGRl
c3RydWN0ZWQuCisgICAgVFBvb2xBbGxvY2F0b3IgYWxsb2NhdG9yOworfTsKKworLy8KKy8vIFRo
ZSBiYXNlIGNsYXNzIGZvciB0aGUgbWFjaGluZSBkZXBlbmRlbnQgY29tcGlsZXIgdG8gZGVyaXZl
IGZyb20KKy8vIGZvciBtYW5hZ2luZyBvYmplY3QgY29kZSBmcm9tIHRoZSBjb21waWxlLgorLy8K
K2NsYXNzIFRDb21waWxlciA6IHB1YmxpYyBUU2hIYW5kbGVCYXNlIHsKK3B1YmxpYzoKKyAgICBU
Q29tcGlsZXIoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjKTsKKyAgICB2aXJ0
dWFsIH5UQ29tcGlsZXIoKTsKKyAgICB2aXJ0dWFsIFRDb21waWxlciogZ2V0QXNDb21waWxlcigp
IHsgcmV0dXJuIHRoaXM7IH0KKworICAgIGJvb2wgSW5pdChjb25zdCBTaEJ1aWx0SW5SZXNvdXJj
ZXMmIHJlc291cmNlcyk7CisgICAgYm9vbCBjb21waWxlKGNvbnN0IGNoYXIqIGNvbnN0IHNoYWRl
clN0cmluZ3NbXSwKKyAgICAgICAgICAgICAgICAgc2l6ZV90IG51bVN0cmluZ3MsCisgICAgICAg
ICAgICAgICAgIGludCBjb21waWxlT3B0aW9ucyk7CisKKyAgICAvLyBHZXQgcmVzdWx0cyBvZiB0
aGUgbGFzdCBjb21waWxhdGlvbi4KKyAgICBUSW5mb1NpbmsmIGdldEluZm9TaW5rKCkgeyByZXR1
cm4gaW5mb1Npbms7IH0KKyAgICBjb25zdCBUVmFyaWFibGVJbmZvTGlzdCYgZ2V0QXR0cmlicygp
IGNvbnN0IHsgcmV0dXJuIGF0dHJpYnM7IH0KKyAgICBjb25zdCBUVmFyaWFibGVJbmZvTGlzdCYg
Z2V0VW5pZm9ybXMoKSBjb25zdCB7IHJldHVybiB1bmlmb3JtczsgfQorICAgIGNvbnN0IFRWYXJp
YWJsZUluZm9MaXN0JiBnZXRWYXJ5aW5ncygpIGNvbnN0IHsgcmV0dXJuIHZhcnlpbmdzOyB9Cisg
ICAgaW50IGdldE1hcHBlZE5hbWVNYXhMZW5ndGgoKSBjb25zdDsKKworICAgIFNoSGFzaEZ1bmN0
aW9uNjQgZ2V0SGFzaEZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gaGFzaEZ1bmN0aW9uOyB9Cisg
ICAgTmFtZU1hcCYgZ2V0TmFtZU1hcCgpIHsgcmV0dXJuIG5hbWVNYXA7IH0KKyAgICBUU3ltYm9s
VGFibGUmIGdldFN5bWJvbFRhYmxlKCkgeyByZXR1cm4gc3ltYm9sVGFibGU7IH0KKworcHJvdGVj
dGVkOgorICAgIFNoU2hhZGVyVHlwZSBnZXRTaGFkZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gc2hh
ZGVyVHlwZTsgfQorICAgIFNoU2hhZGVyU3BlYyBnZXRTaGFkZXJTcGVjKCkgY29uc3QgeyByZXR1
cm4gc2hhZGVyU3BlYzsgfQorICAgIC8vIEluaXRpYWxpemUgc3ltYm9sLXRhYmxlIHdpdGggYnVp
bHQtaW4gc3ltYm9scy4KKyAgICBib29sIEluaXRCdWlsdEluU3ltYm9sVGFibGUoY29uc3QgU2hC
dWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMpOworICAgIC8vIENsZWFycyB0aGUgcmVzdWx0cyBm
cm9tIHRoZSBwcmV2aW91cyBjb21waWxhdGlvbi4KKyAgICB2b2lkIGNsZWFyUmVzdWx0cygpOwor
ICAgIC8vIFJldHVybiB0cnVlIGlmIGZ1bmN0aW9uIHJlY3Vyc2lvbiBpcyBkZXRlY3RlZCBvciBj
YWxsIGRlcHRoIGV4Y2VlZGVkLgorICAgIGJvb2wgZGV0ZWN0Q2FsbERlcHRoKFRJbnRlcm1Ob2Rl
KiByb290LCBUSW5mb1NpbmsmIGluZm9TaW5rLCBib29sIGxpbWl0Q2FsbFN0YWNrRGVwdGgpOwor
ICAgIC8vIFJld3JpdGVzIGEgc2hhZGVyJ3MgaW50ZXJtZWRpYXRlIHRyZWUgYWNjb3JkaW5nIHRv
IHRoZSBDU1MgU2hhZGVycyBzcGVjLgorICAgIHZvaWQgcmV3cml0ZUNTU1NoYWRlcihUSW50ZXJt
Tm9kZSogcm9vdCk7CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzaGFkZXIgZG9l
cyBub3QgZXhjZWVkIHRoZSBtaW5pbXVtCisgICAgLy8gZnVuY3Rpb25hbGl0eSBtYW5kYXRlZCBp
biBHTFNMIDEuMCBzcGVjIEFwcGVuZGl4IEEuCisgICAgYm9vbCB2YWxpZGF0ZUxpbWl0YXRpb25z
KFRJbnRlcm1Ob2RlKiByb290KTsKKyAgICAvLyBDb2xsZWN0IGluZm8gZm9yIGFsbCBhdHRyaWJz
LCB1bmlmb3JtcywgdmFyeWluZ3MuCisgICAgdm9pZCBjb2xsZWN0VmFyaWFibGVzKFRJbnRlcm1O
b2RlKiByb290KTsKKyAgICAvLyBNYXAgbG9uZyB2YXJpYWJsZSBuYW1lcyBpbnRvIHNob3J0ZXIg
b25lcy4KKyAgICB2b2lkIG1hcExvbmdWYXJpYWJsZU5hbWVzKFRJbnRlcm1Ob2RlKiByb290KTsK
KyAgICAvLyBUcmFuc2xhdGUgdG8gb2JqZWN0IGNvZGUuCisgICAgdmlydHVhbCB2b2lkIHRyYW5z
bGF0ZShUSW50ZXJtTm9kZSogcm9vdCkgPSAwOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiwgYWZ0
ZXIgYXBwbHlpbmcgdGhlIHBhY2tpbmcgcnVsZXMgaW4gdGhlIEdMU0wgMS4wMTcgc3BlYworICAg
IC8vIEFwcGVuZGl4IEEsIHNlY3Rpb24gNywgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2UgdG9vIG1h
bnkgdW5pZm9ybXMuCisgICAgYm9vbCBlbmZvcmNlUGFja2luZ1Jlc3RyaWN0aW9ucygpOworICAg
IC8vIEluc2VydCBzdGF0ZW1lbnRzIHRvIGluaXRpYWxpemUgdmFyeWluZ3Mgd2l0aG91dCBzdGF0
aWMgdXNlIGluIHRoZSBiZWdpbm5pbmcKKyAgICAvLyBvZiBtYWluKCkuIEl0IGlzIHRvIHdvcmsg
YXJvdW5kIGEgTWFjIGRyaXZlciB3aGVyZSBzdWNoIHZhcnlpbmdzIGluIGEgdmVydGV4CisgICAg
Ly8gc2hhZGVyIG1heSBiZSBvcHRpbWl6ZWQgb3V0IGluY29ycmVjdGx5IGF0IGNvbXBpbGUgdGlt
ZSwgY2F1c2luZyBhIGxpbmsgZmFpbHVyZS4KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBv
bmx5IGJlIGFwcGxpZWQgdG8gdmVydGV4IHNoYWRlcnMuCisgICAgdm9pZCBpbml0aWFsaXplVmFy
eWluZ3NXaXRob3V0U3RhdGljVXNlKFRJbnRlcm1Ob2RlKiByb290KTsKKyAgICAvLyBJbnNlcnQg
Z2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApIHRvIHRoZSBiZWdpbm5pbmcgb2YgbWFpbigpLgor
ICAgIC8vIEl0IGlzIHRvIHdvcmsgYXJvdW5kIGEgTGludXggZHJpdmVyIGJ1ZyB3aGVyZSBtaXNz
aW5nIHRoaXMgY2F1c2VzIGNvbXBpbGUgZmFpbHVyZQorICAgIC8vIHdoaWxlIHNwZWMgc2F5cyBp
dCBpcyBhbGxvd2VkLgorICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgYXBwbGll
ZCB0byB2ZXJ0ZXggc2hhZGVycy4KKyAgICB2b2lkIGluaXRpYWxpemVHTFBvc2l0aW9uKFRJbnRl
cm1Ob2RlKiByb290KTsKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRlciBwYXNzZXMg
dGhlIHJlc3RyaWN0aW9ucyB0aGF0IGFpbSB0byBwcmV2ZW50IHRpbWluZyBhdHRhY2tzLgorICAg
IGJvb2wgZW5mb3JjZVRpbWluZ1Jlc3RyaWN0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCwgYm9vbCBv
dXRwdXRHcmFwaCk7CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzaGFkZXIgZG9lcyBub3Qg
dXNlIHNhbXBsZXJzLgorICAgIGJvb2wgZW5mb3JjZVZlcnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0
aW9ucyhUSW50ZXJtTm9kZSogcm9vdCk7CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzaGFk
ZXIgZG9lcyBub3QgdXNlIHNhbXBsZXIgZGVwZW5kZW50IHZhbHVlcyB0byBhZmZlY3QgY29udHJv
bCAKKyAgICAvLyBmbG93IG9yIGluIG9wZXJhdGlvbnMgd2hvc2UgdGltZSBjYW4gZGVwZW5kIG9u
IHRoZSBpbnB1dCB2YWx1ZXMuCisgICAgYm9vbCBlbmZvcmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdS
ZXN0cmljdGlvbnMoY29uc3QgVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpOworICAgIC8vIFJldHVy
biB0cnVlIGlmIHRoZSBtYXhpbXVtIGV4cHJlc3Npb24gY29tcGxleGl0eSBiZWxvdyB0aGUgbGlt
aXQuCisgICAgYm9vbCBsaW1pdEV4cHJlc3Npb25Db21wbGV4aXR5KFRJbnRlcm1Ob2RlKiByb290
KTsKKyAgICAvLyBHZXQgYnVpbHQtaW4gZXh0ZW5zaW9ucyB3aXRoIGRlZmF1bHQgYmVoYXZpb3Iu
CisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBnZXRFeHRlbnNpb25CZWhhdmlvcigpIGNv
bnN0OworICAgIC8vIEdldCB0aGUgcmVzb3VyY2VzIHNldCBieSBJbml0QnVpbHRJblN5bWJvbFRh
YmxlCisgICAgY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiBnZXRSZXNvdXJjZXMoKSBjb25zdDsK
KworICAgIGNvbnN0IEFycmF5Qm91bmRzQ2xhbXBlciYgZ2V0QXJyYXlCb3VuZHNDbGFtcGVyKCkg
Y29uc3Q7CisgICAgU2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBnZXRBcnJheUluZGV4Q2xh
bXBpbmdTdHJhdGVneSgpIGNvbnN0OworICAgIGNvbnN0IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9y
JiBnZXRCdWlsdEluRnVuY3Rpb25FbXVsYXRvcigpIGNvbnN0OworCitwcml2YXRlOgorICAgIFNo
U2hhZGVyVHlwZSBzaGFkZXJUeXBlOworICAgIFNoU2hhZGVyU3BlYyBzaGFkZXJTcGVjOworCisg
ICAgaW50IG1heFVuaWZvcm1WZWN0b3JzOworICAgIGludCBtYXhFeHByZXNzaW9uQ29tcGxleGl0
eTsKKyAgICBpbnQgbWF4Q2FsbFN0YWNrRGVwdGg7CisKKyAgICBTaEJ1aWx0SW5SZXNvdXJjZXMg
Y29tcGlsZVJlc291cmNlczsKKworICAgIC8vIEJ1aWx0LWluIHN5bWJvbCB0YWJsZSBmb3IgdGhl
IGdpdmVuIGxhbmd1YWdlLCBzcGVjLCBhbmQgcmVzb3VyY2VzLgorICAgIC8vIEl0IGlzIHByZXNl
cnZlZCBmcm9tIGNvbXBpbGUtdG8tY29tcGlsZS4KKyAgICBUU3ltYm9sVGFibGUgc3ltYm9sVGFi
bGU7CisgICAgLy8gQnVpbHQtaW4gZXh0ZW5zaW9ucyB3aXRoIGRlZmF1bHQgYmVoYXZpb3IuCisg
ICAgVEV4dGVuc2lvbkJlaGF2aW9yIGV4dGVuc2lvbkJlaGF2aW9yOworICAgIGJvb2wgZnJhZ21l
bnRQcmVjaXNpb25IaWdoOworCisgICAgQXJyYXlCb3VuZHNDbGFtcGVyIGFycmF5Qm91bmRzQ2xh
bXBlcjsKKyAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IGNsYW1waW5nU3RyYXRlZ3k7
CisgICAgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IgYnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I7CisK
KyAgICAvLyBSZXN1bHRzIG9mIGNvbXBpbGF0aW9uLgorICAgIFRJbmZvU2luayBpbmZvU2luazsg
IC8vIE91dHB1dCBzaW5rLgorICAgIFRWYXJpYWJsZUluZm9MaXN0IGF0dHJpYnM7ICAvLyBBY3Rp
dmUgYXR0cmlidXRlcyBpbiB0aGUgY29tcGlsZWQgc2hhZGVyLgorICAgIFRWYXJpYWJsZUluZm9M
aXN0IHVuaWZvcm1zOyAgLy8gQWN0aXZlIHVuaWZvcm1zIGluIHRoZSBjb21waWxlZCBzaGFkZXIu
CisgICAgVFZhcmlhYmxlSW5mb0xpc3QgdmFyeWluZ3M7ICAvLyBWYXJ5aW5ncyBpbiB0aGUgY29t
cGlsZWQgc2hhZGVyLgorCisgICAgLy8gQ2FjaGVkIGNvcHkgb2YgdGhlIHJlZi1jb3VudGVkIHNp
bmdsZXRvbi4KKyAgICBMb25nTmFtZU1hcCogbG9uZ05hbWVNYXA7CisKKyAgICAvLyBuYW1lIGhh
c2hpbmcuCisgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb247CisgICAgTmFtZU1hcCBu
YW1lTWFwOworfTsKKworLy8KKy8vIFRoaXMgaXMgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBt
YWNoaW5lIGluZGVwZW5kZW50IGNvZGUKKy8vIGFuZCB0aGUgbWFjaGluZSBkZXBlbmRlbnQgY29k
ZS4KKy8vCisvLyBUaGUgbWFjaGluZSBkZXBlbmRlbnQgY29kZSBzaG91bGQgZGVyaXZlIGZyb20g
dGhlIGNsYXNzZXMKKy8vIGFib3ZlLiBUaGVuIENvbnN0cnVjdCooKSBhbmQgRGVsZXRlKigpIHdp
bGwgY3JlYXRlIGFuZCAKKy8vIGRlc3Ryb3kgdGhlIG1hY2hpbmUgZGVwZW5kZW50IG9iamVjdHMs
IHdoaWNoIGNvbnRhaW4gdGhlCisvLyBhYm92ZSBtYWNoaW5lIGluZGVwZW5kZW50IGluZm9ybWF0
aW9uLgorLy8KK1RDb21waWxlciogQ29uc3RydWN0Q29tcGlsZXIoCisgICAgU2hTaGFkZXJUeXBl
IHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBTaFNoYWRlck91dHB1dCBvdXRwdXQpOwordm9pZCBE
ZWxldGVDb21waWxlcihUQ29tcGlsZXIqKTsKKworI2VuZGlmIC8vIF9TSEhBTkRMRV9JTkNMVURF
RF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1NoYWRlckxhbmcuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvU2hhZGVyTGFuZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjA4MjM3ODYwYzE1ODE2
ZTdmNDlhZDI1NWViYWYwNTdmNGJjZjczMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1NoYWRlckxhbmcuY3BwCkBAIC0w
LDAgKzEsMzkwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLworLy8gSW1wbGVtZW50IHRoZSB0
b3AtbGV2ZWwgb2YgaW50ZXJmYWNlIHRvIHRoZSBjb21waWxlciwKKy8vIGFzIGRlZmluZWQgaW4g
U2hhZGVyTGFuZy5oCisvLworCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVEbGwuaCIKKyNpbmNsdWRlICJj
b21waWxlci9wcmVwcm9jZXNzb3IvbGVuZ3RoX2xpbWl0cy5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvU2hIYW5kbGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JITFNMLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZVBh
Y2tlci5oIgorCisvLworLy8gVGhpcyBpcyB0aGUgcGxhdGZvcm0gaW5kZXBlbmRlbnQgaW50ZXJm
YWNlIGJldHdlZW4gYW4gT0dMIGRyaXZlcgorLy8gYW5kIHRoZSBzaGFkaW5nIGxhbmd1YWdlIGNv
bXBpbGVyLgorLy8KKworc3RhdGljIGJvb2wgY2hlY2tWYXJpYWJsZU1heExlbmd0aHMoY29uc3Qg
U2hIYW5kbGUgaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IGV4cGVjdGVkVmFsdWUpCit7CisgICAgc2l6ZV90IGFjdGl2ZVVuaWZvcm1MaW1pdCA9IDA7
CisgICAgU2hHZXRJbmZvKGhhbmRsZSwgU0hfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwgJmFj
dGl2ZVVuaWZvcm1MaW1pdCk7CisgICAgc2l6ZV90IGFjdGl2ZUF0dHJpYkxpbWl0ID0gMDsKKyAg
ICBTaEdldEluZm8oaGFuZGxlLCBTSF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsICZhY3Rp
dmVBdHRyaWJMaW1pdCk7CisgICAgc2l6ZV90IHZhcnlpbmdMaW1pdCA9IDA7CisgICAgU2hHZXRJ
bmZvKGhhbmRsZSwgU0hfVkFSWUlOR19NQVhfTEVOR1RILCAmdmFyeWluZ0xpbWl0KTsKKyAgICBy
ZXR1cm4gKGV4cGVjdGVkVmFsdWUgPT0gYWN0aXZlVW5pZm9ybUxpbWl0ICYmCisgICAgICAgICAg
ICBleHBlY3RlZFZhbHVlID09IGFjdGl2ZUF0dHJpYkxpbWl0ICYmCisgICAgICAgICAgICBleHBl
Y3RlZFZhbHVlID09IHZhcnlpbmdMaW1pdCk7Cit9CisKK3N0YXRpYyBib29sIGNoZWNrTWFwcGVk
TmFtZU1heExlbmd0aChjb25zdCBTaEhhbmRsZSBoYW5kbGUsIHNpemVfdCBleHBlY3RlZFZhbHVl
KQoreworICAgIHNpemVfdCBtYXBwZWROYW1lTWF4TGVuZ3RoID0gMDsKKyAgICBTaEdldEluZm8o
aGFuZGxlLCBTSF9NQVBQRURfTkFNRV9NQVhfTEVOR1RILCAmbWFwcGVkTmFtZU1heExlbmd0aCk7
CisgICAgcmV0dXJuIChleHBlY3RlZFZhbHVlID09IG1hcHBlZE5hbWVNYXhMZW5ndGgpOworfQor
CisvLworLy8gRHJpdmVyIG11c3QgY2FsbCB0aGlzIGZpcnN0LCBvbmNlLCBiZWZvcmUgZG9pbmcg
YW55IG90aGVyIGNvbXBpbGVyIG9wZXJhdGlvbnMuCisvLyBTdWJzZXF1ZW50IGNhbGxzIHRvIHRo
aXMgZnVuY3Rpb24gYXJlIG5vLW9wLgorLy8KK2ludCBTaEluaXRpYWxpemUoKQoreworICAgIHN0
YXRpYyBjb25zdCBib29sIGtJbml0aWFsaXplZCA9IEluaXRQcm9jZXNzKCk7CisgICAgcmV0dXJu
IGtJbml0aWFsaXplZCA/IDEgOiAwOworfQorCisvLworLy8gQ2xlYW51cCBzeW1ib2wgdGFibGVz
CisvLworaW50IFNoRmluYWxpemUoKQoreworICAgIERldGFjaFByb2Nlc3MoKTsKKyAgICByZXR1
cm4gMTsKK30KKworLy8KKy8vIEluaXRpYWxpemUgYnVpbHQtaW4gcmVzb3VyY2VzIHdpdGggbWlu
aW11bSBleHBlY3RlZCB2YWx1ZXMuCisvLwordm9pZCBTaEluaXRCdWlsdEluUmVzb3VyY2VzKFNo
QnVpbHRJblJlc291cmNlcyogcmVzb3VyY2VzKQoreworICAgIC8vIENvbnN0YW50cy4KKyAgICBy
ZXNvdXJjZXMtPk1heFZlcnRleEF0dHJpYnMgPSA4OworICAgIHJlc291cmNlcy0+TWF4VmVydGV4
VW5pZm9ybVZlY3RvcnMgPSAxMjg7CisgICAgcmVzb3VyY2VzLT5NYXhWYXJ5aW5nVmVjdG9ycyA9
IDg7CisgICAgcmVzb3VyY2VzLT5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyA9IDA7CisgICAg
cmVzb3VyY2VzLT5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gODsKKyAgICByZXNvdXJj
ZXMtPk1heFRleHR1cmVJbWFnZVVuaXRzID0gODsKKyAgICByZXNvdXJjZXMtPk1heEZyYWdtZW50
VW5pZm9ybVZlY3RvcnMgPSAxNjsKKyAgICByZXNvdXJjZXMtPk1heERyYXdCdWZmZXJzID0gMTsK
KworICAgIC8vIEV4dGVuc2lvbnMuCisgICAgcmVzb3VyY2VzLT5PRVNfc3RhbmRhcmRfZGVyaXZh
dGl2ZXMgPSAwOworICAgIHJlc291cmNlcy0+T0VTX0VHTF9pbWFnZV9leHRlcm5hbCA9IDA7Cisg
ICAgcmVzb3VyY2VzLT5BUkJfdGV4dHVyZV9yZWN0YW5nbGUgPSAwOworICAgIHJlc291cmNlcy0+
RVhUX2RyYXdfYnVmZmVycyA9IDA7CisgICAgcmVzb3VyY2VzLT5FWFRfZnJhZ19kZXB0aCA9IDA7
CisKKyAgICAvLyBEaXNhYmxlIGhpZ2hwIHByZWNpc2lvbiBpbiBmcmFnbWVudCBzaGFkZXIgYnkg
ZGVmYXVsdC4KKyAgICByZXNvdXJjZXMtPkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9IDA7CisKKyAg
ICAvLyBEaXNhYmxlIG5hbWUgaGFzaGluZyBieSBkZWZhdWx0LgorICAgIHJlc291cmNlcy0+SGFz
aEZ1bmN0aW9uID0gTlVMTDsKKworICAgIHJlc291cmNlcy0+QXJyYXlJbmRleENsYW1waW5nU3Ry
YXRlZ3kgPSBTSF9DTEFNUF9XSVRIX0NMQU1QX0lOVFJJTlNJQzsKKworICAgIHJlc291cmNlcy0+
TWF4RXhwcmVzc2lvbkNvbXBsZXhpdHkgPSAyNTY7CisgICAgcmVzb3VyY2VzLT5NYXhDYWxsU3Rh
Y2tEZXB0aCA9IDI1NjsKK30KKworLy8KKy8vIERyaXZlciBjYWxscyB0aGVzZSB0byBjcmVhdGUg
YW5kIGRlc3Ryb3kgY29tcGlsZXIgb2JqZWN0cy4KKy8vCitTaEhhbmRsZSBTaENvbnN0cnVjdENv
bXBpbGVyKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU2hTaGFkZXJPdXRwdXQgb3V0cHV0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMqIHJlc291cmNlcykKK3sKKyAg
ICBUU2hIYW5kbGVCYXNlKiBiYXNlID0gc3RhdGljX2Nhc3Q8VFNoSGFuZGxlQmFzZSo+KENvbnN0
cnVjdENvbXBpbGVyKHR5cGUsIHNwZWMsIG91dHB1dCkpOworICAgIFRDb21waWxlciogY29tcGls
ZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7CisgICAgaWYgKGNvbXBpbGVyID09IDApCisgICAg
ICAgIHJldHVybiAwOworCisgICAgLy8gR2VuZXJhdGUgYnVpbHQtaW4gc3ltYm9sIHRhYmxlLgor
ICAgIGlmICghY29tcGlsZXItPkluaXQoKnJlc291cmNlcykpIHsKKyAgICAgICAgU2hEZXN0cnVj
dChiYXNlKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KGJhc2UpOworfQorCit2b2lkIFNoRGVzdHJ1Y3QoU2hIYW5kbGUgaGFu
ZGxlKQoreworICAgIGlmIChoYW5kbGUgPT0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgVFNo
SGFuZGxlQmFzZSogYmFzZSA9IHN0YXRpY19jYXN0PFRTaEhhbmRsZUJhc2UqPihoYW5kbGUpOwor
CisgICAgaWYgKGJhc2UtPmdldEFzQ29tcGlsZXIoKSkKKyAgICAgICAgRGVsZXRlQ29tcGlsZXIo
YmFzZS0+Z2V0QXNDb21waWxlcigpKTsKK30KKworLy8KKy8vIERvIGFuIGFjdHVhbCBjb21waWxl
IG9uIHRoZSBnaXZlbiBzdHJpbmdzLiAgVGhlIHJlc3VsdCBpcyBsZWZ0IAorLy8gaW4gdGhlIGdp
dmVuIGNvbXBpbGUgb2JqZWN0LgorLy8KKy8vIFJldHVybjogIFRoZSByZXR1cm4gdmFsdWUgb2Yg
U2hDb21waWxlIGlzIHJlYWxseSBib29sZWFuLCBpbmRpY2F0aW5nCisvLyBzdWNjZXNzIG9yIGZh
aWx1cmUuCisvLworaW50IFNoQ29tcGlsZSgKKyAgICBjb25zdCBTaEhhbmRsZSBoYW5kbGUsCisg
ICAgY29uc3QgY2hhciogY29uc3Qgc2hhZGVyU3RyaW5nc1tdLAorICAgIHNpemVfdCBudW1TdHJp
bmdzLAorICAgIGludCBjb21waWxlT3B0aW9ucykKK3sKKyAgICBpZiAoaGFuZGxlID09IDApCisg
ICAgICAgIHJldHVybiAwOworCisgICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8VFNoSGFuZGxlQmFzZSo+KGhhbmRsZSk7CisgICAgVENvbXBpbGVyKiBjb21waWxlciA9
IGJhc2UtPmdldEFzQ29tcGlsZXIoKTsKKyAgICBpZiAoY29tcGlsZXIgPT0gMCkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBib29sIHN1Y2Nlc3MgPSBjb21waWxlci0+Y29tcGlsZShzaGFkZXJT
dHJpbmdzLCBudW1TdHJpbmdzLCBjb21waWxlT3B0aW9ucyk7CisgICAgcmV0dXJuIHN1Y2Nlc3Mg
PyAxIDogMDsKK30KKwordm9pZCBTaEdldEluZm8oY29uc3QgU2hIYW5kbGUgaGFuZGxlLCBTaFNo
YWRlckluZm8gcG5hbWUsIHNpemVfdCogcGFyYW1zKQoreworICAgIGlmICghaGFuZGxlIHx8ICFw
YXJhbXMpCisgICAgICAgIHJldHVybjsKKworICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0
aWNfY2FzdDxUU2hIYW5kbGVCYXNlKj4oaGFuZGxlKTsKKyAgICBUQ29tcGlsZXIqIGNvbXBpbGVy
ID0gYmFzZS0+Z2V0QXNDb21waWxlcigpOworICAgIGlmICghY29tcGlsZXIpIHJldHVybjsKKwor
ICAgIHN3aXRjaChwbmFtZSkKKyAgICB7CisgICAgY2FzZSBTSF9JTkZPX0xPR19MRU5HVEg6Cisg
ICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0SW5mb1NpbmsoKS5pbmZvLnNpemUoKSArIDE7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hfT0JKRUNUX0NPREVfTEVOR1RIOgorICAgICAg
ICAqcGFyYW1zID0gY29tcGlsZXItPmdldEluZm9TaW5rKCkub2JqLnNpemUoKSArIDE7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgU0hfQUNUSVZFX1VOSUZPUk1TOgorICAgICAgICAqcGFyYW1z
ID0gY29tcGlsZXItPmdldFVuaWZvcm1zKCkuc2l6ZSgpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFNIX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEg6CisgICAgICAgICpwYXJhbXMgPSAxICsg
IE1BWF9TWU1CT0xfTkFNRV9MRU47CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hfQUNUSVZF
X0FUVFJJQlVURVM6CisgICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0QXR0cmlicygpLnNp
emUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSF9BQ1RJVkVfQVRUUklCVVRFX01BWF9M
RU5HVEg6CisgICAgICAgICpwYXJhbXMgPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBTSF9WQVJZSU5HUzoKKyAgICAgICAgKnBhcmFtcyA9IGNvbXBp
bGVyLT5nZXRWYXJ5aW5ncygpLnNpemUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSF9W
QVJZSU5HX01BWF9MRU5HVEg6CisgICAgICAgICpwYXJhbXMgPSAxICsgTUFYX1NZTUJPTF9OQU1F
X0xFTjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSF9NQVBQRURfTkFNRV9NQVhfTEVOR1RI
OgorICAgICAgICAvLyBVc2UgbG9uZ2VyIGxlbmd0aCB0aGFuIE1BWF9TSE9SVEVORURfSURFTlRJ
RklFUl9TSVpFIHRvCisgICAgICAgIC8vIGhhbmRsZSBhcnJheSBhbmQgc3RydWN0IGRlcmVmZXJl
bmNlcy4KKyAgICAgICAgKnBhcmFtcyA9IDEgKyBNQVhfU1lNQk9MX05BTUVfTEVOOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFNIX05BTUVfTUFYX0xFTkdUSDoKKyAgICAgICAgKnBhcmFtcyA9
IDEgKyBNQVhfU1lNQk9MX05BTUVfTEVOOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNIX0hB
U0hFRF9OQU1FX01BWF9MRU5HVEg6CisgICAgICAgIGlmIChjb21waWxlci0+Z2V0SGFzaEZ1bmN0
aW9uKCkgPT0gTlVMTCkgeworICAgICAgICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyA2NCBiaXRzIGhhc2hpbmcgb3V0cHV0IHJlcXVpcmVzIDE2IGJ5
dGVzIGZvciBoZXggCisgICAgICAgICAgICAvLyByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgICAg
IGNvbnN0IGNoYXIgSGFzaGVkTmFtZVByZWZpeFtdID0gSEFTSEVEX05BTUVfUFJFRklYOworICAg
ICAgICAgICAgKnBhcmFtcyA9IDE2ICsgc2l6ZW9mKEhhc2hlZE5hbWVQcmVmaXgpOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hfSEFTSEVEX05BTUVTX0NPVU5UOgorICAg
ICAgICAqcGFyYW1zID0gY29tcGlsZXItPmdldE5hbWVNYXAoKS5zaXplKCk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorfQorCisvLworLy8gUmV0
dXJuIGFueSBjb21waWxlciBsb2cgb2YgbWVzc2FnZXMgZm9yIHRoZSBhcHBsaWNhdGlvbi4KKy8v
Cit2b2lkIFNoR2V0SW5mb0xvZyhjb25zdCBTaEhhbmRsZSBoYW5kbGUsIGNoYXIqIGluZm9Mb2cp
Cit7CisgICAgaWYgKCFoYW5kbGUgfHwgIWluZm9Mb2cpCisgICAgICAgIHJldHVybjsKKworICAg
IFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2FzdDxUU2hIYW5kbGVCYXNlKj4oaGFuZGxl
KTsKKyAgICBUQ29tcGlsZXIqIGNvbXBpbGVyID0gYmFzZS0+Z2V0QXNDb21waWxlcigpOworICAg
IGlmICghY29tcGlsZXIpIHJldHVybjsKKworICAgIFRJbmZvU2luayYgaW5mb1NpbmsgPSBjb21w
aWxlci0+Z2V0SW5mb1NpbmsoKTsKKyAgICBzdHJjcHkoaW5mb0xvZywgaW5mb1NpbmsuaW5mby5j
X3N0cigpKTsKK30KKworLy8KKy8vIFJldHVybiBhbnkgb2JqZWN0IGNvZGUuCisvLwordm9pZCBT
aEdldE9iamVjdENvZGUoY29uc3QgU2hIYW5kbGUgaGFuZGxlLCBjaGFyKiBvYmpDb2RlKQorewor
ICAgIGlmICghaGFuZGxlIHx8ICFvYmpDb2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBUU2hI
YW5kbGVCYXNlKiBiYXNlID0gc3RhdGljX2Nhc3Q8VFNoSGFuZGxlQmFzZSo+KGhhbmRsZSk7Cisg
ICAgVENvbXBpbGVyKiBjb21waWxlciA9IGJhc2UtPmdldEFzQ29tcGlsZXIoKTsKKyAgICBpZiAo
IWNvbXBpbGVyKSByZXR1cm47CisKKyAgICBUSW5mb1NpbmsmIGluZm9TaW5rID0gY29tcGlsZXIt
PmdldEluZm9TaW5rKCk7CisgICAgc3RyY3B5KG9iakNvZGUsIGluZm9TaW5rLm9iai5jX3N0cigp
KTsKK30KKwordm9pZCBTaEdldFZhcmlhYmxlSW5mbyhjb25zdCBTaEhhbmRsZSBoYW5kbGUsCisg
ICAgICAgICAgICAgICAgICAgICAgIFNoU2hhZGVySW5mbyB2YXJUeXBlLAorICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogbGVu
Z3RoLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHNpemUsCisgICAgICAgICAgICAgICAg
ICAgICAgIFNoRGF0YVR5cGUqIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgIFNoUHJlY2lz
aW9uVHlwZSogcHJlY2lzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHN0YXRpY1Vz
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY2hhciogbmFtZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciogbWFwcGVkTmFtZSkKK3sKKyAgICBpZiAoIWhhbmRsZSB8fCAhc2l6ZSB8fCAh
dHlwZSB8fCAhcHJlY2lzaW9uIHx8ICFzdGF0aWNVc2UgfHwgIW5hbWUpCisgICAgICAgIHJldHVy
bjsKKyAgICBBU1NFUlQoKHZhclR5cGUgPT0gU0hfQUNUSVZFX0FUVFJJQlVURVMpIHx8CisgICAg
ICAgICAgICh2YXJUeXBlID09IFNIX0FDVElWRV9VTklGT1JNUykgfHwKKyAgICAgICAgICAgKHZh
clR5cGUgPT0gU0hfVkFSWUlOR1MpKTsKKworICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSByZWlu
dGVycHJldF9jYXN0PFRTaEhhbmRsZUJhc2UqPihoYW5kbGUpOworICAgIFRDb21waWxlciogY29t
cGlsZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7CisgICAgaWYgKGNvbXBpbGVyID09IDApCisg
ICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IFRWYXJpYWJsZUluZm9MaXN0JiB2YXJMaXN0ID0K
KyAgICAgICAgdmFyVHlwZSA9PSBTSF9BQ1RJVkVfQVRUUklCVVRFUyA/IGNvbXBpbGVyLT5nZXRB
dHRyaWJzKCkgOgorICAgICAgICAgICAgKHZhclR5cGUgPT0gU0hfQUNUSVZFX1VOSUZPUk1TID8g
Y29tcGlsZXItPmdldFVuaWZvcm1zKCkgOgorICAgICAgICAgICAgICAgIGNvbXBpbGVyLT5nZXRW
YXJ5aW5ncygpKTsKKyAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHN0YXRpY19jYXN0PGlu
dD4odmFyTGlzdC5zaXplKCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBUVmFyaWFi
bGVJbmZvJiB2YXJJbmZvID0gdmFyTGlzdFtpbmRleF07CisgICAgaWYgKGxlbmd0aCkgKmxlbmd0
aCA9IHZhckluZm8ubmFtZS5zaXplKCk7CisgICAgKnNpemUgPSB2YXJJbmZvLnNpemU7CisgICAg
KnR5cGUgPSB2YXJJbmZvLnR5cGU7CisgICAgc3dpdGNoICh2YXJJbmZvLnByZWNpc2lvbikgewor
ICAgIGNhc2UgRWJwTG93OgorICAgICAgICAqcHJlY2lzaW9uID0gU0hfUFJFQ0lTSU9OX0xPV1A7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRWJwTWVkaXVtOgorICAgICAgICAqcHJlY2lzaW9u
ID0gU0hfUFJFQ0lTSU9OX01FRElVTVA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRWJwSGln
aDoKKyAgICAgICAgKnByZWNpc2lvbiA9IFNIX1BSRUNJU0lPTl9ISUdIUDsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gU29tZSB0eXBlcyBkb2VzIG5vdCBzdXBwb3J0
IHByZWNpc2lvbiwgZm9yIGV4YW1wbGUsIGJvb2xlYW4uCisgICAgICAgICpwcmVjaXNpb24gPSBT
SF9QUkVDSVNJT05fVU5ERUZJTkVEOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgKnN0YXRp
Y1VzZSA9IHZhckluZm8uc3RhdGljVXNlID8gMSA6IDA7CisKKyAgICAvLyBUaGlzIHNpemUgbXVz
dCBtYXRjaCB0aGF0IHF1ZXJpZWQgYnkKKyAgICAvLyBTSF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVO
R1RILCBTSF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsIFNIX1ZBUllJTkdfTUFYX0xFTkdU
SAorICAgIC8vIGluIFNoR2V0SW5mbywgYmVsb3cuCisgICAgc2l6ZV90IHZhcmlhYmxlTGVuZ3Ro
ID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CisgICAgQVNTRVJUKGNoZWNrVmFyaWFibGVNYXhM
ZW5ndGhzKGhhbmRsZSwgdmFyaWFibGVMZW5ndGgpKTsKKyAgICBzdHJuY3B5KG5hbWUsIHZhcklu
Zm8ubmFtZS5jX3N0cigpLCB2YXJpYWJsZUxlbmd0aCk7CisgICAgbmFtZVt2YXJpYWJsZUxlbmd0
aCAtIDFdID0gMDsKKyAgICBpZiAobWFwcGVkTmFtZSkgeworICAgICAgICAvLyBUaGlzIHNpemUg
bXVzdCBtYXRjaCB0aGF0IHF1ZXJpZWQgYnkKKyAgICAgICAgLy8gU0hfTUFQUEVEX05BTUVfTUFY
X0xFTkdUSCBpbiBTaEdldEluZm8sIGJlbG93LgorICAgICAgICBzaXplX3QgbWF4TWFwcGVkTmFt
ZUxlbmd0aCA9IDEgKyBNQVhfU1lNQk9MX05BTUVfTEVOOworICAgICAgICBBU1NFUlQoY2hlY2tN
YXBwZWROYW1lTWF4TGVuZ3RoKGhhbmRsZSwgbWF4TWFwcGVkTmFtZUxlbmd0aCkpOworICAgICAg
ICBzdHJuY3B5KG1hcHBlZE5hbWUsIHZhckluZm8ubWFwcGVkTmFtZS5jX3N0cigpLCBtYXhNYXBw
ZWROYW1lTGVuZ3RoKTsKKyAgICAgICAgbWFwcGVkTmFtZVttYXhNYXBwZWROYW1lTGVuZ3RoIC0g
MV0gPSAwOworICAgIH0KK30KKwordm9pZCBTaEdldE5hbWVIYXNoaW5nRW50cnkoY29uc3QgU2hI
YW5kbGUgaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIqIGhhc2hlZE5hbWUpCit7CisgICAgaWYgKCFoYW5kbGUgfHwgIW5hbWUgfHwg
IWhhc2hlZE5hbWUgfHwgaW5kZXggPCAwKQorICAgICAgICByZXR1cm47CisKKyAgICBUU2hIYW5k
bGVCYXNlKiBiYXNlID0gc3RhdGljX2Nhc3Q8VFNoSGFuZGxlQmFzZSo+KGhhbmRsZSk7CisgICAg
VENvbXBpbGVyKiBjb21waWxlciA9IGJhc2UtPmdldEFzQ29tcGlsZXIoKTsKKyAgICBpZiAoIWNv
bXBpbGVyKSByZXR1cm47CisKKyAgICBjb25zdCBOYW1lTWFwJiBuYW1lTWFwID0gY29tcGlsZXIt
PmdldE5hbWVNYXAoKTsKKyAgICBpZiAoaW5kZXggPj0gc3RhdGljX2Nhc3Q8aW50PihuYW1lTWFw
LnNpemUoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIE5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbmFtZU1hcC5iZWdpbigpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5kZXg7ICsr
aSkKKyAgICAgICAgKytpdDsKKworICAgIHNpemVfdCBsZW4gPSBpdC0+Zmlyc3QubGVuZ3RoKCkg
KyAxOworICAgIHNpemVfdCBtYXhfbGVuID0gMDsKKyAgICBTaEdldEluZm8oaGFuZGxlLCBTSF9O
QU1FX01BWF9MRU5HVEgsICZtYXhfbGVuKTsKKyAgICBpZiAobGVuID4gbWF4X2xlbikgeworICAg
ICAgICBBU1NFUlQoZmFsc2UpOworICAgICAgICBsZW4gPSBtYXhfbGVuOworICAgIH0KKyAgICBz
dHJuY3B5KG5hbWUsIGl0LT5maXJzdC5jX3N0cigpLCBsZW4pOworICAgIC8vIFRvIGJlIG9uIHRo
ZSBzYWZlIHNpZGUgaW4gY2FzZSB0aGUgc291cmNlIGlzIGxvbmdlciB0aGFuIGV4cGVjdGVkLgor
ICAgIG5hbWVbbGVuIC0gMV0gPSAnXDAnOworCisgICAgbGVuID0gaXQtPnNlY29uZC5sZW5ndGgo
KSArIDE7CisgICAgbWF4X2xlbiA9IDA7CisgICAgU2hHZXRJbmZvKGhhbmRsZSwgU0hfSEFTSEVE
X05BTUVfTUFYX0xFTkdUSCwgJm1heF9sZW4pOworICAgIGlmIChsZW4gPiBtYXhfbGVuKSB7Cisg
ICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgIGxlbiA9IG1heF9sZW47CisgICAgfQorICAg
IHN0cm5jcHkoaGFzaGVkTmFtZSwgaXQtPnNlY29uZC5jX3N0cigpLCBsZW4pOworICAgIC8vIFRv
IGJlIG9uIHRoZSBzYWZlIHNpZGUgaW4gY2FzZSB0aGUgc291cmNlIGlzIGxvbmdlciB0aGFuIGV4
cGVjdGVkLgorICAgIGhhc2hlZE5hbWVbbGVuIC0gMV0gPSAnXDAnOworfQorCit2b2lkIFNoR2V0
SW5mb1BvaW50ZXIoY29uc3QgU2hIYW5kbGUgaGFuZGxlLCBTaFNoYWRlckluZm8gcG5hbWUsIHZv
aWQqKiBwYXJhbXMpCit7CisgICAgaWYgKCFoYW5kbGUgfHwgIXBhcmFtcykKKyAgICAgICAgcmV0
dXJuOworCisgICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHN0YXRpY19jYXN0PFRTaEhhbmRsZUJh
c2UqPihoYW5kbGUpOworICAgIFRyYW5zbGF0b3JITFNMKiB0cmFuc2xhdG9yID0gYmFzZS0+Z2V0
QXNUcmFuc2xhdG9ySExTTCgpOworICAgIGlmICghdHJhbnNsYXRvcikgcmV0dXJuOworCisgICAg
c3dpdGNoKHBuYW1lKQorICAgIHsKKyAgICBjYXNlIFNIX0FDVElWRV9VTklGT1JNU19BUlJBWToK
KyAgICAgICAgKnBhcmFtcyA9ICh2b2lkKikmdHJhbnNsYXRvci0+Z2V0VW5pZm9ybXMoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9Cit9CisKK2lu
dCBTaENoZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cygKKyAgICBpbnQgbWF4VmVjdG9y
cywgU2hWYXJpYWJsZUluZm8qIHZhckluZm9BcnJheSwgc2l6ZV90IHZhckluZm9BcnJheVNpemUp
Cit7CisgICAgaWYgKHZhckluZm9BcnJheVNpemUgPT0gMCkKKyAgICAgICAgcmV0dXJuIDE7Cisg
ICAgQVNTRVJUKHZhckluZm9BcnJheSk7CisgICAgVFZhcmlhYmxlSW5mb0xpc3QgdmFyaWFibGVz
OworICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCB2YXJJbmZvQXJyYXlTaXplOyArK2lpKQor
ICAgIHsKKyAgICAgICAgVFZhcmlhYmxlSW5mbyB2YXIodmFySW5mb0FycmF5W2lpXS50eXBlLCB2
YXJJbmZvQXJyYXlbaWldLnNpemUpOworICAgICAgICB2YXJpYWJsZXMucHVzaF9iYWNrKHZhcik7
CisgICAgfQorICAgIFZhcmlhYmxlUGFja2VyIHBhY2tlcjsKKyAgICByZXR1cm4gcGFja2VyLkNo
ZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cyhtYXhWZWN0b3JzLCB2YXJpYWJsZXMpID8g
MSA6IDA7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJsZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDA0ZmU1
ZDM1NTZjOWZhZjkxYjM1ODMxNjkyMzJiODU4NTQ3MWFmMgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxl
LmNwcApAQCAtMCwwICsxLDIxNiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8KKy8vIFN5bWJv
bCB0YWJsZSBmb3IgcGFyc2luZy4gIE1vc3QgZnVuY3Rpb25hbGl5IGFuZCBtYWluIGlkZWFzCisv
LyBhcmUgZG9jdW1lbnRlZCBpbiB0aGUgaGVhZGVyIGZpbGUuCisvLworCisjaWYgZGVmaW5lZChf
TVNDX1ZFUikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzE4KQorI2VuZGlmCisKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgiCisKKyNpbmNsdWRlIDxzdGRp
by5oPgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjbGltaXRzPgorCitUVHlwZTo6
VFR5cGUoY29uc3QgVFB1YmxpY1R5cGUgJnApIDoKKyAgICAgICAgICAgIHR5cGUocC50eXBlKSwg
cHJlY2lzaW9uKHAucHJlY2lzaW9uKSwgcXVhbGlmaWVyKHAucXVhbGlmaWVyKSwgc2l6ZShwLnNp
emUpLCBtYXRyaXgocC5tYXRyaXgpLCBhcnJheShwLmFycmF5KSwgYXJyYXlTaXplKHAuYXJyYXlT
aXplKSwgc3RydWN0dXJlKDApCit7CisgICAgaWYgKHAudXNlckRlZikKKyAgICAgICAgc3RydWN0
dXJlID0gcC51c2VyRGVmLT5nZXRTdHJ1Y3QoKTsKK30KKworLy8KKy8vIFJlY3Vyc2l2ZWx5IGdl
bmVyYXRlIG1hbmdsZWQgbmFtZXMuCisvLworVFN0cmluZyBUVHlwZTo6YnVpbGRNYW5nbGVkTmFt
ZSgpIGNvbnN0Cit7CisgICAgVFN0cmluZyBtYW5nbGVkTmFtZTsKKyAgICBpZiAoaXNNYXRyaXgo
KSkKKyAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ20nOworICAgIGVsc2UgaWYgKGlzVmVjdG9yKCkp
CisgICAgICAgIG1hbmdsZWROYW1lICs9ICd2JzsKKworICAgIHN3aXRjaCAodHlwZSkgeworICAg
IGNhc2UgRWJ0RmxvYXQ6ICAgICAgIG1hbmdsZWROYW1lICs9ICdmJzsgICAgICBicmVhazsKKyAg
ICBjYXNlIEVidEludDogICAgICAgICBtYW5nbGVkTmFtZSArPSAnaSc7ICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBFYnRCb29sOiAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ2InOyAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgIG1hbmdsZWROYW1lICs9ICJzMiI7ICAgICBicmVhazsK
KyAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiBtYW5nbGVkTmFtZSArPSAic0MiOyAgICAgYnJlYWs7
CisgICAgY2FzZSBFYnRTdHJ1Y3Q6ICAgICAgbWFuZ2xlZE5hbWUgKz0gc3RydWN0dXJlLT5tYW5n
bGVkTmFtZSgpOyBicmVhazsKKyAgICBkZWZhdWx0OiAgICAgICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBtYW5nbGVkTmFtZSArPSBzdGF0aWNfY2FzdDxjaGFyPignMCcgKyBnZXROb21pbmFs
U2l6ZSgpKTsKKyAgICBpZiAoaXNBcnJheSgpKSB7CisgICAgICAgIGNoYXIgYnVmWzIwXTsKKyAg
ICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwgYXJyYXlTaXplKTsKKyAgICAg
ICAgbWFuZ2xlZE5hbWUgKz0gJ1snOworICAgICAgICBtYW5nbGVkTmFtZSArPSBidWY7CisgICAg
ICAgIG1hbmdsZWROYW1lICs9ICddJzsKKyAgICB9CisgICAgcmV0dXJuIG1hbmdsZWROYW1lOwor
fQorCitzaXplX3QgVFR5cGU6OmdldE9iamVjdFNpemUoKSBjb25zdAoreworICAgIHNpemVfdCB0
b3RhbFNpemUgPSAwOworCisgICAgaWYgKGdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAg
ICAgICAgdG90YWxTaXplID0gc3RydWN0dXJlLT5vYmplY3RTaXplKCk7CisgICAgZWxzZSBpZiAo
bWF0cml4KQorICAgICAgICB0b3RhbFNpemUgPSBzaXplICogc2l6ZTsKKyAgICBlbHNlCisgICAg
ICAgIHRvdGFsU2l6ZSA9IHNpemU7CisKKyAgICBpZiAoaXNBcnJheSgpKSB7CisgICAgICAgIHNp
emVfdCBhcnJheVNpemUgPSBnZXRBcnJheVNpemUoKTsKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA+
IElOVF9NQVggLyB0b3RhbFNpemUpCisgICAgICAgICAgICB0b3RhbFNpemUgPSBJTlRfTUFYOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICB0b3RhbFNpemUgKj0gYXJyYXlTaXplOworICAgIH0K
KworICAgIHJldHVybiB0b3RhbFNpemU7Cit9CisKK2Jvb2wgVFN0cnVjdHVyZTo6Y29udGFpbnNB
cnJheXMoKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUZpZWxkcy0+c2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgVFR5cGUqIGZpZWxkVHlwZSA9ICgqbUZpZWxkcylb
aV0tPnR5cGUoKTsKKyAgICAgICAgaWYgKGZpZWxkVHlwZS0+aXNBcnJheSgpIHx8IGZpZWxkVHlw
ZS0+aXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitUU3RyaW5nIFRTdHJ1Y3R1cmU6OmJ1
aWxkTWFuZ2xlZE5hbWUoKSBjb25zdAoreworICAgIFRTdHJpbmcgbWFuZ2xlZE5hbWUoInN0cnVj
dC0iKTsKKyAgICBtYW5nbGVkTmFtZSArPSAqbU5hbWU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtRmllbGRzLT5zaXplKCk7ICsraSkgeworICAgICAgICBtYW5nbGVkTmFtZSArPSAnLSc7
CisgICAgICAgIG1hbmdsZWROYW1lICs9ICgqbUZpZWxkcylbaV0tPnR5cGUoKS0+Z2V0TWFuZ2xl
ZE5hbWUoKTsKKyAgICB9CisgICAgcmV0dXJuIG1hbmdsZWROYW1lOworfQorCitzaXplX3QgVFN0
cnVjdHVyZTo6Y2FsY3VsYXRlT2JqZWN0U2l6ZSgpIGNvbnN0Cit7CisgICAgc2l6ZV90IHNpemUg
PSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUZpZWxkcy0+c2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgc2l6ZV90IGZpZWxkU2l6ZSA9ICgqbUZpZWxkcylbaV0tPnR5cGUoKS0+Z2V0T2Jq
ZWN0U2l6ZSgpOworICAgICAgICBpZiAoZmllbGRTaXplID4gSU5UX01BWCAtIHNpemUpCisgICAg
ICAgICAgICBzaXplID0gSU5UX01BWDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2l6ZSAr
PSBmaWVsZFNpemU7CisgICAgfQorICAgIHJldHVybiBzaXplOworfQorCitpbnQgVFN0cnVjdHVy
ZTo6Y2FsY3VsYXRlRGVlcGVzdE5lc3RpbmcoKSBjb25zdAoreworICAgIGludCBtYXhOZXN0aW5n
ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1GaWVsZHMtPnNpemUoKTsgKytpKSB7
CisgICAgICAgIG1heE5lc3RpbmcgPSBzdGQ6Om1heChtYXhOZXN0aW5nLCAoKm1GaWVsZHMpW2ld
LT50eXBlKCktPmdldERlZXBlc3RTdHJ1Y3ROZXN0aW5nKCkpOworICAgIH0KKyAgICByZXR1cm4g
MSArIG1heE5lc3Rpbmc7Cit9CisKKy8vCisvLyBEdW1wIGZ1bmN0aW9ucy4KKy8vCisKK3ZvaWQg
VFZhcmlhYmxlOjpkdW1wKFRJbmZvU2luayYgaW5mb1NpbmspIGNvbnN0Cit7CisgICAgaW5mb1Np
bmsuZGVidWcgPDwgZ2V0TmFtZSgpLmNfc3RyKCkgPDwgIjogIiA8PCB0eXBlLmdldFF1YWxpZmll
clN0cmluZygpIDw8ICIgIiA8PCB0eXBlLmdldFByZWNpc2lvblN0cmluZygpIDw8ICIgIiA8PCB0
eXBlLmdldEJhc2ljU3RyaW5nKCk7CisgICAgaWYgKHR5cGUuaXNBcnJheSgpKSB7CisgICAgICAg
IGluZm9TaW5rLmRlYnVnIDw8ICJbMF0iOworICAgIH0KKyAgICBpbmZvU2luay5kZWJ1ZyA8PCAi
XG4iOworfQorCit2b2lkIFRGdW5jdGlvbjo6ZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25z
dAoreworICAgIGluZm9TaW5rLmRlYnVnIDw8IGdldE5hbWUoKS5jX3N0cigpIDw8ICI6ICIgPDwg
IHJldHVyblR5cGUuZ2V0QmFzaWNTdHJpbmcoKSA8PCAiICIgPDwgZ2V0TWFuZ2xlZE5hbWUoKS5j
X3N0cigpIDw8ICJcbiI7Cit9CisKK3ZvaWQgVFN5bWJvbFRhYmxlTGV2ZWw6OmR1bXAoVEluZm9T
aW5rICZpbmZvU2luaykgY29uc3QKK3sKKyAgICB0TGV2ZWw6OmNvbnN0X2l0ZXJhdG9yIGl0Owor
ICAgIGZvciAoaXQgPSBsZXZlbC5iZWdpbigpOyBpdCAhPSBsZXZlbC5lbmQoKTsgKytpdCkKKyAg
ICAgICAgKCppdCkuc2Vjb25kLT5kdW1wKGluZm9TaW5rKTsKK30KKwordm9pZCBUU3ltYm9sVGFi
bGU6OmR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3QKK3sKKyAgICBmb3IgKGludCBsZXZl
bCA9IGN1cnJlbnRMZXZlbCgpOyBsZXZlbCA+PSAwOyAtLWxldmVsKSB7CisgICAgICAgIGluZm9T
aW5rLmRlYnVnIDw8ICJMRVZFTCAiIDw8IGxldmVsIDw8ICJcbiI7CisgICAgICAgIHRhYmxlW2xl
dmVsXS0+ZHVtcChpbmZvU2luayk7CisgICAgfQorfQorCisvLworLy8gRnVuY3Rpb25zIGhhdmUg
YnVyaWVkIHBvaW50ZXJzIHRvIGRlbGV0ZS4KKy8vCitURnVuY3Rpb246On5URnVuY3Rpb24oKQor
eworICAgIGZvciAoVFBhcmFtTGlzdDo6aXRlcmF0b3IgaSA9IHBhcmFtZXRlcnMuYmVnaW4oKTsg
aSAhPSBwYXJhbWV0ZXJzLmVuZCgpOyArK2kpCisgICAgICAgIGRlbGV0ZSAoKmkpLnR5cGU7Cit9
CisKKy8vCisvLyBTeW1ib2wgdGFibGUgbGV2ZWxzIGFyZSBhIG1hcCBvZiBwb2ludGVycyB0byBz
eW1ib2xzIHRoYXQgaGF2ZSB0byBiZSBkZWxldGVkLgorLy8KK1RTeW1ib2xUYWJsZUxldmVsOjp+
VFN5bWJvbFRhYmxlTGV2ZWwoKQoreworICAgIGZvciAodExldmVsOjppdGVyYXRvciBpdCA9IGxl
dmVsLmJlZ2luKCk7IGl0ICE9IGxldmVsLmVuZCgpOyArK2l0KQorICAgICAgICBkZWxldGUgKCpp
dCkuc2Vjb25kOworfQorCisvLworLy8gQ2hhbmdlIGFsbCBmdW5jdGlvbiBlbnRyaWVzIGluIHRo
ZSB0YWJsZSB3aXRoIHRoZSBub24tbWFuZ2xlZCBuYW1lCisvLyB0byBiZSByZWxhdGVkIHRvIHRo
ZSBwcm92aWRlZCBidWlsdC1pbiBvcGVyYXRpb24uICBUaGlzIGlzIGEgbG93CisvLyBwZXJmb3Jt
YW5jZSBvcGVyYXRpb24sIGFuZCBvbmx5IGludGVuZGVkIGZvciBzeW1ib2wgdGFibGVzIHRoYXQK
Ky8vIGxpdmUgYWNyb3NzIGEgbGFyZ2UgbnVtYmVyIG9mIGNvbXBpbGVzLgorLy8KK3ZvaWQgVFN5
bWJvbFRhYmxlTGV2ZWw6OnJlbGF0ZVRvT3BlcmF0b3IoY29uc3QgY2hhciogbmFtZSwgVE9wZXJh
dG9yIG9wKQoreworICAgIHRMZXZlbDo6aXRlcmF0b3IgaXQ7CisgICAgZm9yIChpdCA9IGxldmVs
LmJlZ2luKCk7IGl0ICE9IGxldmVsLmVuZCgpOyArK2l0KSB7CisgICAgICAgIGlmICgoKml0KS5z
ZWNvbmQtPmlzRnVuY3Rpb24oKSkgeworICAgICAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlvbiA9
IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KCgqaXQpLnNlY29uZCk7CisgICAgICAgICAgICBpZiAo
ZnVuY3Rpb24tPmdldE5hbWUoKSA9PSBuYW1lKQorICAgICAgICAgICAgICAgIGZ1bmN0aW9uLT5y
ZWxhdGVUb09wZXJhdG9yKG9wKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8KKy8vIENoYW5n
ZSBhbGwgZnVuY3Rpb24gZW50cmllcyBpbiB0aGUgdGFibGUgd2l0aCB0aGUgbm9uLW1hbmdsZWQg
bmFtZQorLy8gdG8gYmUgcmVsYXRlZCB0byB0aGUgcHJvdmlkZWQgYnVpbHQtaW4gZXh0ZW5zaW9u
LiBUaGlzIGlzIGEgbG93CisvLyBwZXJmb3JtYW5jZSBvcGVyYXRpb24sIGFuZCBvbmx5IGludGVu
ZGVkIGZvciBzeW1ib2wgdGFibGVzIHRoYXQKKy8vIGxpdmUgYWNyb3NzIGEgbGFyZ2UgbnVtYmVy
IG9mIGNvbXBpbGVzLgorLy8KK3ZvaWQgVFN5bWJvbFRhYmxlTGV2ZWw6OnJlbGF0ZVRvRXh0ZW5z
aW9uKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFRTdHJpbmcmIGV4dCkKK3sKKyAgICBmb3IgKHRM
ZXZlbDo6aXRlcmF0b3IgaXQgPSBsZXZlbC5iZWdpbigpOyBpdCAhPSBsZXZlbC5lbmQoKTsgKytp
dCkgeworICAgICAgICBUU3ltYm9sKiBzeW1ib2wgPSBpdC0+c2Vjb25kOworICAgICAgICBpZiAo
c3ltYm9sLT5nZXROYW1lKCkgPT0gbmFtZSkKKyAgICAgICAgICAgIHN5bWJvbC0+cmVsYXRlVG9F
eHRlbnNpb24oZXh0KTsKKyAgICB9Cit9CisKK1RTeW1ib2xUYWJsZTo6flRTeW1ib2xUYWJsZSgp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YWJsZS5zaXplKCk7ICsraSkKKyAgICAg
ICAgZGVsZXRlIHRhYmxlW2ldOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJlY2lzaW9u
U3RhY2suc2l6ZSgpOyArK2kpCisgICAgICAgIGRlbGV0ZSBwcmVjaXNpb25TdGFja1tpXTsKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1N5bWJvbFRhYmxlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9TeW1ib2xUYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZjNzIxMWYyYTk1MmM4OTUxNzgz
NTE1MjU3NmQ2OGM5Mzg4Njc3YjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJsZS5oCkBAIC0wLDAgKzEs
MzgyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9TWU1CT0xfVEFCTEVfSU5DTFVE
RURfCisjZGVmaW5lIF9TWU1CT0xfVEFCTEVfSU5DTFVERURfCisKKy8vCisvLyBTeW1ib2wgdGFi
bGUgZm9yIHBhcnNpbmcuICBIYXMgdGhlc2UgZGVzaWduIGNoYXJhY3RlcmlzdGljczoKKy8vCisv
LyAqIFNhbWUgc3ltYm9sIHRhYmxlIGNhbiBiZSB1c2VkIHRvIGNvbXBpbGUgbWFueSBzaGFkZXJz
LCB0byBwcmVzZXJ2ZQorLy8gICBlZmZvcnQgb2YgY3JlYXRpbmcgYW5kIGxvYWRpbmcgd2l0aCB0
aGUgbGFyZ2UgbnVtYmVycyBvZiBidWlsdC1pbgorLy8gICBzeW1ib2xzLgorLy8KKy8vICogTmFt
ZSBtYW5nbGluZyB3aWxsIGJlIHVzZWQgdG8gZ2l2ZSBlYWNoIGZ1bmN0aW9uIGEgdW5pcXVlIG5h
bWUKKy8vICAgc28gdGhhdCBzeW1ib2wgdGFibGUgbG9va3VwcyBhcmUgbmV2ZXIgYW1iaWd1b3Vz
LiAgVGhpcyBhbGxvd3MKKy8vICAgYSBzaW1wbGVyIHN5bWJvbCB0YWJsZSBzdHJ1Y3R1cmUuCisv
LworLy8gKiBQdXNoaW5nIGFuZCBwb3BwaW5nIG9mIHNjb3BlLCBzbyBzeW1ib2wgdGFibGUgd2ls
bCByZWFsbHkgYmUgYSBzdGFjayAKKy8vICAgb2Ygc3ltYm9sIHRhYmxlcy4gIFNlYXJjaGVkIGZy
b20gdGhlIHRvcCwgd2l0aCBuZXcgaW5zZXJ0cyBnb2luZyBpbnRvCisvLyAgIHRoZSB0b3AuCisv
LworLy8gKiBDb25zdGFudHM6ICBDb21waWxlIHRpbWUgY29uc3RhbnQgc3ltYm9scyB3aWxsIGtl
ZXAgdGhlaXIgdmFsdWVzCisvLyAgIGluIHRoZSBzeW1ib2wgdGFibGUuICBUaGUgcGFyc2VyIGNh
biBzdWJzdGl0dXRlIGNvbnN0YW50cyBhdCBwYXJzZQorLy8gICB0aW1lLCBpbmNsdWRpbmcgZG9p
bmcgY29uc3RhbnQgZm9sZGluZyBhbmQgY29uc3RhbnQgcHJvcGFnYXRpb24uCisvLworLy8gKiBO
byB0ZW1wb3JhcmllczogIFRlbXBvcmFyaWVzIG1hZGUgZnJvbSBvcGVyYXRpb25zICgrLCAtLSwg
Lnh5LCBldGMuKQorLy8gICBhcmUgdHJhY2tlZCBpbiB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2Vu
dGF0aW9uLCBub3QgdGhlIHN5bWJvbCB0YWJsZS4KKy8vCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4K
KworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9JbmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJt
ZWRpYXRlLmgiCisKKy8vCisvLyBTeW1ib2wgYmFzZSBjbGFzcy4gIChDYW4gYnVpbGQgZnVuY3Rp
b25zIG9yIHZhcmlhYmxlcyBvdXQgb2YgdGhlc2UuLi4pCisvLworY2xhc3MgVFN5bWJvbCB7ICAg
IAorcHVibGljOgorICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKKyAgICBUU3ltYm9s
KGNvbnN0IFRTdHJpbmcqIG4pIDogIHVuaXF1ZUlkKDApLCBuYW1lKG4pIHsgfQorICAgIHZpcnR1
YWwgflRTeW1ib2woKSB7IC8qIGRvbid0IGRlbGV0ZSBuYW1lLCBpdCdzIGZyb20gdGhlIHBvb2wg
Ki8gfQorCisgICAgY29uc3QgVFN0cmluZyYgZ2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJuICpuYW1l
OyB9CisgICAgdmlydHVhbCBjb25zdCBUU3RyaW5nJiBnZXRNYW5nbGVkTmFtZSgpIGNvbnN0IHsg
cmV0dXJuIGdldE5hbWUoKTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0Z1bmN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNWYXJpYWJsZSgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBzZXRVbmlxdWVJZChpbnQgaWQpIHsgdW5pcXVlSWQg
PSBpZDsgfQorICAgIGludCBnZXRVbmlxdWVJZCgpIGNvbnN0IHsgcmV0dXJuIHVuaXF1ZUlkOyB9
CisgICAgdmlydHVhbCB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3QgPSAwOwor
ICAgIHZvaWQgcmVsYXRlVG9FeHRlbnNpb24oY29uc3QgVFN0cmluZyYgZXh0KSB7IGV4dGVuc2lv
biA9IGV4dDsgfQorICAgIGNvbnN0IFRTdHJpbmcmIGdldEV4dGVuc2lvbigpIGNvbnN0IHsgcmV0
dXJuIGV4dGVuc2lvbjsgfQorCitwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihUU3ltYm9sKTsKKworICAgIGludCB1bmlxdWVJZDsgICAgICAvLyBGb3IgcmVhbCBjb21wYXJp
bmcgZHVyaW5nIGNvZGUgZ2VuZXJhdGlvbgorICAgIGNvbnN0IFRTdHJpbmcgKm5hbWU7CisgICAg
VFN0cmluZyBleHRlbnNpb247Cit9OworCisvLworLy8gVmFyaWFibGUgY2xhc3MsIG1lYW5pbmcg
YSBzeW1ib2wgdGhhdCdzIG5vdCBhIGZ1bmN0aW9uLgorLy8gCisvLyBUaGVyZSBjb3VsZCBiZSBh
IHNlcGFyYXRlIGNsYXNzIGhlaXJhcmNoeSBmb3IgQ29uc3RhbnQgdmFyaWFibGVzOworLy8gT25s
eSBvbmUgb2YgaW50LCBib29sLCBvciBmbG9hdCwgKG9yIG5vbmUpIGlzIGNvcnJlY3QgZm9yCisv
LyBhbnkgcGFydGljdWxhciB1c2UsIGJ1dCBpdCdzIGVhc3kgdG8gZG8gdGhpcyB3YXksIGFuZCBk
b2Vzbid0CisvLyBzZWVtIHdvcnRoIGhhdmluZyBzZXBhcmF0ZSBjbGFzc2VzLCBhbmQgImdldENv
bnN0IiBjYW4ndCBzaW1wbHkgcmV0dXJuCisvLyBkaWZmZXJlbnQgdmFsdWVzIGZvciBkaWZmZXJl
bnQgdHlwZXMgcG9seW1vcnBoaWNhbGx5LCBzbyB0aGlzIGlzIAorLy8ganVzdCBzaW1wbGUgYW5k
IHByYWdtYXRpYy4KKy8vCitjbGFzcyBUVmFyaWFibGUgOiBwdWJsaWMgVFN5bWJvbCB7CitwdWJs
aWM6CisgICAgVFZhcmlhYmxlKGNvbnN0IFRTdHJpbmcgKm5hbWUsIGNvbnN0IFRUeXBlJiB0LCBi
b29sIHVUID0gZmFsc2UgKSA6IFRTeW1ib2wobmFtZSksIHR5cGUodCksIHVzZXJUeXBlKHVUKSwg
dW5pb25BcnJheSgwKSB7IH0KKyAgICB2aXJ0dWFsIH5UVmFyaWFibGUoKSB7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgaXNWYXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0gICAgCisgICAgVFR5
cGUmIGdldFR5cGUoKSB7IHJldHVybiB0eXBlOyB9ICAgIAorICAgIGNvbnN0IFRUeXBlJiBnZXRU
eXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZTsgfQorICAgIGJvb2wgaXNVc2VyVHlwZSgpIGNvbnN0
IHsgcmV0dXJuIHVzZXJUeXBlOyB9CisgICAgdm9pZCBzZXRRdWFsaWZpZXIoVFF1YWxpZmllciBx
dWFsaWZpZXIpIHsgdHlwZS5zZXRRdWFsaWZpZXIocXVhbGlmaWVyKTsgfQorCisgICAgdmlydHVh
bCB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7CisKKyAgICBDb25zdGFudFVu
aW9uKiBnZXRDb25zdFBvaW50ZXIoKQorICAgIHsgCisgICAgICAgIGlmICghdW5pb25BcnJheSkK
KyAgICAgICAgICAgIHVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblt0eXBlLmdldE9iamVj
dFNpemUoKV07CisKKyAgICAgICAgcmV0dXJuIHVuaW9uQXJyYXk7CisgICAgfQorCisgICAgQ29u
c3RhbnRVbmlvbiogZ2V0Q29uc3RQb2ludGVyKCkgY29uc3QgeyByZXR1cm4gdW5pb25BcnJheTsg
fQorCisgICAgdm9pZCBzaGFyZUNvbnN0UG9pbnRlciggQ29uc3RhbnRVbmlvbiAqY29uc3RBcnJh
eSkKKyAgICB7CisgICAgICAgIGlmICh1bmlvbkFycmF5ID09IGNvbnN0QXJyYXkpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgZGVsZXRlW10gdW5pb25BcnJheTsKKyAgICAgICAgdW5p
b25BcnJheSA9IGNvbnN0QXJyYXk7ICAKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRElTQUxMT1df
Q09QWV9BTkRfQVNTSUdOKFRWYXJpYWJsZSk7CisKKyAgICBUVHlwZSB0eXBlOworICAgIGJvb2wg
dXNlclR5cGU7CisgICAgLy8gd2UgYXJlIGFzc3VtaW5nIHRoYXQgUG9vbCBBbGxvY2F0b3Igd2ls
bCBmcmVlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIHRvIHVuaW9uQXJyYXkKKyAgICAvLyB3aGVuIHRo
aXMgb2JqZWN0IGlzIGRlc3Ryb3llZAorICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXk7Cit9
OworCisvLworLy8gVGhlIGZ1bmN0aW9uIHN1Yi1jbGFzcyBvZiBzeW1ib2xzIGFuZCB0aGUgcGFy
c2VyIHdpbGwgbmVlZCB0bworLy8gc2hhcmUgdGhpcyBkZWZpbml0aW9uIG9mIGEgZnVuY3Rpb24g
cGFyYW1ldGVyLgorLy8KK3N0cnVjdCBUUGFyYW1ldGVyIHsKKyAgICBUU3RyaW5nICpuYW1lOwor
ICAgIFRUeXBlKiB0eXBlOworfTsKKworLy8KKy8vIFRoZSBmdW5jdGlvbiBzdWItY2xhc3Mgb2Yg
YSBzeW1ib2wuICAKKy8vCitjbGFzcyBURnVuY3Rpb24gOiBwdWJsaWMgVFN5bWJvbCB7CitwdWJs
aWM6CisgICAgVEZ1bmN0aW9uKFRPcGVyYXRvciBvKSA6CisgICAgICAgIFRTeW1ib2woMCksCisg
ICAgICAgIHJldHVyblR5cGUoVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKSksCisgICAgICAg
IG9wKG8pLAorICAgICAgICBkZWZpbmVkKGZhbHNlKSB7IH0KKyAgICBURnVuY3Rpb24oY29uc3Qg
VFN0cmluZyAqbmFtZSwgVFR5cGUmIHJldFR5cGUsIFRPcGVyYXRvciB0T3AgPSBFT3BOdWxsKSA6
IAorICAgICAgICBUU3ltYm9sKG5hbWUpLCAKKyAgICAgICAgcmV0dXJuVHlwZShyZXRUeXBlKSwK
KyAgICAgICAgbWFuZ2xlZE5hbWUoVEZ1bmN0aW9uOjptYW5nbGVOYW1lKCpuYW1lKSksCisgICAg
ICAgIG9wKHRPcCksCisgICAgICAgIGRlZmluZWQoZmFsc2UpIHsgfQorICAgIHZpcnR1YWwgflRG
dW5jdGlvbigpOworICAgIHZpcnR1YWwgYm9vbCBpc0Z1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfSAgICAKKworICAgIHN0YXRpYyBUU3RyaW5nIG1hbmdsZU5hbWUoY29uc3QgVFN0cmlu
ZyYgbmFtZSkgeyByZXR1cm4gbmFtZSArICcoJzsgfQorICAgIHN0YXRpYyBUU3RyaW5nIHVubWFu
Z2xlTmFtZShjb25zdCBUU3RyaW5nJiBtYW5nbGVkTmFtZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBUU3RyaW5nKG1hbmdsZWROYW1lLmNfc3RyKCksIG1hbmdsZWROYW1lLmZpbmRfZmlyc3Rfb2Yo
JygnKSk7CisgICAgfQorCisgICAgdm9pZCBhZGRQYXJhbWV0ZXIoVFBhcmFtZXRlciYgcCkgCisg
ICAgeyAKKyAgICAgICAgcGFyYW1ldGVycy5wdXNoX2JhY2socCk7CisgICAgICAgIG1hbmdsZWRO
YW1lID0gbWFuZ2xlZE5hbWUgKyBwLnR5cGUtPmdldE1hbmdsZWROYW1lKCk7CisgICAgfQorCisg
ICAgY29uc3QgVFN0cmluZyYgZ2V0TWFuZ2xlZE5hbWUoKSBjb25zdCB7IHJldHVybiBtYW5nbGVk
TmFtZTsgfQorICAgIGNvbnN0IFRUeXBlJiBnZXRSZXR1cm5UeXBlKCkgY29uc3QgeyByZXR1cm4g
cmV0dXJuVHlwZTsgfQorCisgICAgdm9pZCByZWxhdGVUb09wZXJhdG9yKFRPcGVyYXRvciBvKSB7
IG9wID0gbzsgfQorICAgIFRPcGVyYXRvciBnZXRCdWlsdEluT3AoKSBjb25zdCB7IHJldHVybiBv
cDsgfQorCisgICAgdm9pZCBzZXREZWZpbmVkKCkgeyBkZWZpbmVkID0gdHJ1ZTsgfQorICAgIGJv
b2wgaXNEZWZpbmVkKCkgeyByZXR1cm4gZGVmaW5lZDsgfQorCisgICAgc2l6ZV90IGdldFBhcmFt
Q291bnQoKSBjb25zdCB7IHJldHVybiBwYXJhbWV0ZXJzLnNpemUoKTsgfSAgCisgICAgY29uc3Qg
VFBhcmFtZXRlciYgZ2V0UGFyYW0oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIHBhcmFtZXRlcnNb
aV07IH0KKworICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0
OworCitwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihURnVuY3Rpb24pOwor
CisgICAgdHlwZWRlZiBUVmVjdG9yPFRQYXJhbWV0ZXI+IFRQYXJhbUxpc3Q7CisgICAgVFBhcmFt
TGlzdCBwYXJhbWV0ZXJzOworICAgIFRUeXBlIHJldHVyblR5cGU7CisgICAgVFN0cmluZyBtYW5n
bGVkTmFtZTsKKyAgICBUT3BlcmF0b3Igb3A7CisgICAgYm9vbCBkZWZpbmVkOworfTsKKworCitj
bGFzcyBUU3ltYm9sVGFibGVMZXZlbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBUTWFwPFRTdHJp
bmcsIFRTeW1ib2wqPiB0TGV2ZWw7CisgICAgdHlwZWRlZiB0TGV2ZWw6OmNvbnN0X2l0ZXJhdG9y
IGNvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgY29uc3QgdExldmVsOjp2YWx1ZV90eXBlIHRM
ZXZlbFBhaXI7CisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8dExldmVsOjppdGVyYXRvciwgYm9vbD4g
dEluc2VydFJlc3VsdDsKKworICAgIFRTeW1ib2xUYWJsZUxldmVsKCkgeyB9CisgICAgflRTeW1i
b2xUYWJsZUxldmVsKCk7CisKKyAgICBib29sIGluc2VydChjb25zdCBUU3RyaW5nICZuYW1lLCBU
U3ltYm9sICZzeW1ib2wpCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyByZXR1cm5pbmcg
dHJ1ZSBtZWFucyBzeW1ib2wgd2FzIGFkZGVkIHRvIHRoZSB0YWJsZQorICAgICAgICAvLworICAg
ICAgICB0SW5zZXJ0UmVzdWx0IHJlc3VsdCA9IGxldmVsLmluc2VydCh0TGV2ZWxQYWlyKG5hbWUs
ICZzeW1ib2wpKTsKKworICAgICAgICByZXR1cm4gcmVzdWx0LnNlY29uZDsKKyAgICB9CisKKyAg
ICBib29sIGluc2VydChUU3ltYm9sICZzeW1ib2wpCisgICAgeworICAgICAgICByZXR1cm4gaW5z
ZXJ0KHN5bWJvbC5nZXRNYW5nbGVkTmFtZSgpLCBzeW1ib2wpOworICAgIH0KKworICAgIFRTeW1i
b2wqIGZpbmQoY29uc3QgVFN0cmluZyYgbmFtZSkgY29uc3QKKyAgICB7CisgICAgICAgIHRMZXZl
bDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsZXZlbC5maW5kKG5hbWUpOworICAgICAgICBpZiAoaXQg
PT0gbGV2ZWwuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgcmV0dXJuICgqaXQpLnNlY29uZDsKKyAgICB9CisKKyAgICBjb25zdF9pdGVyYXRv
ciBiZWdpbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbGV2ZWwuYmVnaW4oKTsKKyAg
ICB9CisKKyAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGxldmVsLmVuZCgpOworICAgIH0KKworICAgIHZvaWQgcmVsYXRlVG9PcGVyYXRvcihjb25z
dCBjaGFyKiBuYW1lLCBUT3BlcmF0b3Igb3ApOworICAgIHZvaWQgcmVsYXRlVG9FeHRlbnNpb24o
Y29uc3QgY2hhciogbmFtZSwgY29uc3QgVFN0cmluZyYgZXh0KTsKKyAgICB2b2lkIGR1bXAoVElu
Zm9TaW5rICZpbmZvU2luaykgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICB0TGV2ZWwgbGV2ZWw7
Cit9OworCitjbGFzcyBUU3ltYm9sVGFibGUgeworcHVibGljOgorICAgIFRTeW1ib2xUYWJsZSgp
IDogdW5pcXVlSWQoMCkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFRoZSBzeW1ib2wg
dGFibGUgY2Fubm90IGJlIHVzZWQgdW50aWwgcHVzaCgpIGlzIGNhbGxlZCwgYnV0CisgICAgICAg
IC8vIHRoZSBsYWNrIG9mIGFuIGluaXRpYWwgY2FsbCB0byBwdXNoKCkgY2FuIGJlIHVzZWQgdG8g
ZGV0ZWN0CisgICAgICAgIC8vIHRoYXQgdGhlIHN5bWJvbCB0YWJsZSBoYXMgbm90IGJlZW4gcHJl
bG9hZGVkIHdpdGggYnVpbHQtaW5zLgorICAgICAgICAvLworICAgIH0KKyAgICB+VFN5bWJvbFRh
YmxlKCk7CisKKyAgICAvLworICAgIC8vIFdoZW4gdGhlIHN5bWJvbCB0YWJsZSBpcyBpbml0aWFs
aXplZCB3aXRoIHRoZSBidWlsdC1pbnMsIHRoZXJlIHNob3VsZAorICAgIC8vICdwdXNoJyBjYWxs
cywgc28gdGhhdCBidWlsdC1pbnMgYXJlIGF0IGxldmVsIDAgYW5kIHRoZSBzaGFkZXIKKyAgICAv
LyBnbG9iYWxzIGFyZSBhdCBsZXZlbCAxLgorICAgIC8vCisgICAgYm9vbCBpc0VtcHR5KCkgeyBy
ZXR1cm4gdGFibGUuc2l6ZSgpID09IDA7IH0KKyAgICBib29sIGF0QnVpbHRJbkxldmVsKCkgeyBy
ZXR1cm4gdGFibGUuc2l6ZSgpID09IDE7IH0KKyAgICBib29sIGF0R2xvYmFsTGV2ZWwoKSB7IHJl
dHVybiB0YWJsZS5zaXplKCkgPD0gMjsgfQorICAgIHZvaWQgcHVzaCgpCisgICAgeworICAgICAg
ICB0YWJsZS5wdXNoX2JhY2sobmV3IFRTeW1ib2xUYWJsZUxldmVsKTsKKyAgICAgICAgcHJlY2lz
aW9uU3RhY2sucHVzaF9iYWNrKG5ldyBQcmVjaXNpb25TdGFja0xldmVsKTsKKyAgICB9CisKKyAg
ICB2b2lkIHBvcCgpCisgICAgeworICAgICAgICBkZWxldGUgdGFibGUuYmFjaygpOworICAgICAg
ICB0YWJsZS5wb3BfYmFjaygpOworCisgICAgICAgIGRlbGV0ZSBwcmVjaXNpb25TdGFjay5iYWNr
KCk7CisgICAgICAgIHByZWNpc2lvblN0YWNrLnBvcF9iYWNrKCk7CisgICAgfQorCisgICAgYm9v
bCBpbnNlcnQoVFN5bWJvbCYgc3ltYm9sKQorICAgIHsKKyAgICAgICAgc3ltYm9sLnNldFVuaXF1
ZUlkKCsrdW5pcXVlSWQpOworICAgICAgICByZXR1cm4gdGFibGVbY3VycmVudExldmVsKCldLT5p
bnNlcnQoc3ltYm9sKTsKKyAgICB9CisKKyAgICBib29sIGluc2VydENvbnN0SW50KGNvbnN0IGNo
YXIgKm5hbWUsIGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIFRWYXJpYWJsZSAqY29uc3RhbnQg
PSBuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKG5hbWUpLCBUVHlwZShFYnRJbnQsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QsIDEpKTsKKyAgICAgICAgY29uc3RhbnQtPmdldENvbnN0UG9pbnRl
cigpLT5zZXRJQ29uc3QodmFsdWUpOworICAgICAgICByZXR1cm4gaW5zZXJ0KCpjb25zdGFudCk7
CisgICAgfQorCisgICAgYm9vbCBpbnNlcnRCdWlsdEluKFRUeXBlICpydmFsdWUsIGNvbnN0IGNo
YXIgKm5hbWUsIFRUeXBlICpwdHlwZTEsIFRUeXBlICpwdHlwZTIgPSAwLCBUVHlwZSAqcHR5cGUz
ID0gMCkKKyAgICB7CisgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9u
KE5ld1Bvb2xUU3RyaW5nKG5hbWUpLCAqcnZhbHVlKTsKKworICAgICAgICBUUGFyYW1ldGVyIHBh
cmFtMSA9IHtOVUxMLCBwdHlwZTF9OworICAgICAgICBmdW5jdGlvbi0+YWRkUGFyYW1ldGVyKHBh
cmFtMSk7CisKKyAgICAgICAgaWYocHR5cGUyKQorICAgICAgICB7CisgICAgICAgICAgICBUUGFy
YW1ldGVyIHBhcmFtMiA9IHtOVUxMLCBwdHlwZTJ9OworICAgICAgICAgICAgZnVuY3Rpb24tPmFk
ZFBhcmFtZXRlcihwYXJhbTIpOworICAgICAgICB9CisKKyAgICAgICAgaWYocHR5cGUzKQorICAg
ICAgICB7CisgICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtMyA9IHtOVUxMLCBwdHlwZTN9Owor
ICAgICAgICAgICAgZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJhbTMpOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIGluc2VydCgqZnVuY3Rpb24pOworICAgIH0KKworICAgIFRTeW1ib2wq
IGZpbmQoY29uc3QgVFN0cmluZyYgbmFtZSwgYm9vbCogYnVpbHRJbiA9IDAsIGJvb2wgKnNhbWVT
Y29wZSA9IDApIAorICAgIHsKKyAgICAgICAgaW50IGxldmVsID0gY3VycmVudExldmVsKCk7Cisg
ICAgICAgIFRTeW1ib2wqIHN5bWJvbDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgc3ltYm9s
ID0gdGFibGVbbGV2ZWxdLT5maW5kKG5hbWUpOworICAgICAgICAgICAgLS1sZXZlbDsKKyAgICAg
ICAgfSB3aGlsZSAoc3ltYm9sID09IDAgJiYgbGV2ZWwgPj0gMCk7CisgICAgICAgIGxldmVsKys7
CisgICAgICAgIGlmIChidWlsdEluKQorICAgICAgICAgICAgKmJ1aWx0SW4gPSBsZXZlbCA9PSAw
OworICAgICAgICBpZiAoc2FtZVNjb3BlKQorICAgICAgICAgICAgKnNhbWVTY29wZSA9IGxldmVs
ID09IGN1cnJlbnRMZXZlbCgpOworICAgICAgICByZXR1cm4gc3ltYm9sOworICAgIH0KKworICAg
IFRTeW1ib2wqIGZpbmRCdWlsdEluKGNvbnN0IFRTdHJpbmcgJm5hbWUpCisgICAgeworICAgICAg
ICByZXR1cm4gdGFibGVbMF0tPmZpbmQobmFtZSk7CisgICAgfQorCisgICAgVFN5bWJvbFRhYmxl
TGV2ZWwqIGdldE91dGVyTGV2ZWwoKSB7CisgICAgICAgIGFzc2VydCh0YWJsZS5zaXplKCkgPj0g
Mik7CisgICAgICAgIHJldHVybiB0YWJsZVtjdXJyZW50TGV2ZWwoKSAtIDFdOworICAgIH0KKwor
ICAgIHZvaWQgcmVsYXRlVG9PcGVyYXRvcihjb25zdCBjaGFyKiBuYW1lLCBUT3BlcmF0b3Igb3Ap
IHsKKyAgICAgICAgdGFibGVbMF0tPnJlbGF0ZVRvT3BlcmF0b3IobmFtZSwgb3ApOworICAgIH0K
KyAgICB2b2lkIHJlbGF0ZVRvRXh0ZW5zaW9uKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFRTdHJp
bmcmIGV4dCkgeworICAgICAgICB0YWJsZVswXS0+cmVsYXRlVG9FeHRlbnNpb24obmFtZSwgZXh0
KTsKKyAgICB9CisgICAgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0OworCisg
ICAgYm9vbCBzZXREZWZhdWx0UHJlY2lzaW9uKGNvbnN0IFRQdWJsaWNUeXBlJiB0eXBlLCBUUHJl
Y2lzaW9uIHByZWMpIHsKKyAgICAgICAgaWYgKCFzdXBwb3J0c1ByZWNpc2lvbih0eXBlLnR5cGUp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAodHlwZS5zaXplICE9IDEg
fHwgdHlwZS5tYXRyaXggfHwgdHlwZS5hcnJheSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gTm90IGFsbG93ZWQgdG8gc2V0IGZvciBhZ2dyZWdhdGUgdHlwZXMKKyAgICAgICAgaW50IGlu
ZGV4T2ZMYXN0RWxlbWVudCA9IHN0YXRpY19jYXN0PGludD4ocHJlY2lzaW9uU3RhY2suc2l6ZSgp
KSAtIDE7CisgICAgICAgICgqcHJlY2lzaW9uU3RhY2tbaW5kZXhPZkxhc3RFbGVtZW50XSlbdHlw
ZS50eXBlXSA9IHByZWM7IC8vIFVzZXMgbWFwIG9wZXJhdG9yIFtdLCBvdmVyd3JpdGVzIHRoZSBj
dXJyZW50IHZhbHVlCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIFNlYXJj
aGVzIGRvd24gdGhlIHByZWNpc2lvblN0YWNrIGZvciBhIHByZWNpc2lvbiBxdWFsaWZpZXIgZm9y
IHRoZSBzcGVjaWZpZWQgVEJhc2ljVHlwZQorICAgIFRQcmVjaXNpb24gZ2V0RGVmYXVsdFByZWNp
c2lvbihUQmFzaWNUeXBlIHR5cGUpIHsKKyAgICAgICAgaWYgKCFzdXBwb3J0c1ByZWNpc2lvbih0
eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBFYnBVbmRlZmluZWQ7CisgICAgICAgIGludCBsZXZl
bCA9IHN0YXRpY19jYXN0PGludD4ocHJlY2lzaW9uU3RhY2suc2l6ZSgpKSAtIDE7CisgICAgICAg
IGFzc2VydChsZXZlbCA+PSAwKTsgLy8gSnVzdCB0byBiZSBzYWZlLiBTaG91bGQgbm90IGhhcHBl
bi4KKyAgICAgICAgUHJlY2lzaW9uU3RhY2tMZXZlbDo6aXRlcmF0b3IgaXQ7CisgICAgICAgIFRQ
cmVjaXNpb24gcHJlYyA9IEVicFVuZGVmaW5lZDsgLy8gSWYgd2UgZG9udCBmaW5kIGFueXRoaW5n
IHdlIHJldHVybiB0aGlzLiBTaG91bGQgd2UgZXJyb3IgY2hlY2sgdGhpcz8KKyAgICAgICAgd2hp
bGUgKGxldmVsID49IDApIHsKKyAgICAgICAgICAgIGl0ID0gcHJlY2lzaW9uU3RhY2tbbGV2ZWxd
LT5maW5kKHR5cGUpOworICAgICAgICAgICAgaWYgKGl0ICE9IHByZWNpc2lvblN0YWNrW2xldmVs
XS0+ZW5kKCkpIHsKKyAgICAgICAgICAgICAgICBwcmVjID0gKCppdCkuc2Vjb25kOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGV2ZWwtLTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gcHJlYzsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgaW50
IGN1cnJlbnRMZXZlbCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4odGFibGUuc2l6
ZSgpKSAtIDE7IH0KKworICAgIGJvb2wgc3VwcG9ydHNQcmVjaXNpb24oVEJhc2ljVHlwZSB0eXBl
KSB7CisgICAgICAvLyBPbmx5IHN1cHBvcnRzIHByZWNpc2lvbiBmb3IgaW50LCBmbG9hdCwgYW5k
IHNhbXBsZXIgdHlwZXMuCisgICAgICByZXR1cm4gdHlwZSA9PSBFYnRGbG9hdCB8fCB0eXBlID09
IEVidEludCB8fCBJc1NhbXBsZXIodHlwZSk7CisgICAgfQorCisgICAgaW50IHVuaXF1ZUlkOyAg
ICAgLy8gZm9yIHVuaXF1ZSBpZGVudGlmaWNhdGlvbiBpbiBjb2RlIGdlbmVyYXRpb24KKyAgICBz
dGQ6OnZlY3RvcjxUU3ltYm9sVGFibGVMZXZlbCo+IHRhYmxlOworICAgIHR5cGVkZWYgVE1hcDxU
QmFzaWNUeXBlLCBUUHJlY2lzaW9uPiBQcmVjaXNpb25TdGFja0xldmVsOworICAgIHN0ZDo6dmVj
dG9yPFByZWNpc2lvblN0YWNrTGV2ZWwqPiBwcmVjaXNpb25TdGFjazsKK307CisKKyNlbmRpZiAv
LyBfU1lNQk9MX1RBQkxFX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckVTU0wuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckVTU0wu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjkyNjJmN2FmOGNiODVhNjIzYzg4MGM3MTM1ODIzZTBlMzI0OTY2MWUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yRVNTTC5jcHAKQEAgLTAsMCArMSw0MyBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckVTU0wu
aCIKKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0RVNTTC5oIgorCitUcmFu
c2xhdG9yRVNTTDo6VHJhbnNsYXRvckVTU0woU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3Bl
YyBzcGVjKQorICAgIDogVENvbXBpbGVyKHR5cGUsIHNwZWMpIHsKK30KKwordm9pZCBUcmFuc2xh
dG9yRVNTTDo6dHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KSB7CisgICAgVEluZm9TaW5rQmFz
ZSYgc2luayA9IGdldEluZm9TaW5rKCkub2JqOworCisgICAgLy8gV3JpdGUgYnVpbHQtaW4gZXh0
ZW5zaW9uIGJlaGF2aW9ycy4KKyAgICB3cml0ZUV4dGVuc2lvbkJlaGF2aW9yKCk7CisKKyAgICAv
LyBXcml0ZSBlbXVsYXRlZCBidWlsdC1pbiBmdW5jdGlvbnMgaWYgbmVlZGVkLgorICAgIGdldEJ1
aWx0SW5GdW5jdGlvbkVtdWxhdG9yKCkuT3V0cHV0RW11bGF0ZWRGdW5jdGlvbkRlZmluaXRpb24o
CisgICAgICAgIHNpbmssIGdldFNoYWRlclR5cGUoKSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpOwor
CisgICAgLy8gV3JpdGUgYXJyYXkgYm91bmRzIGNsYW1waW5nIGVtdWxhdGlvbiBpZiBuZWVkZWQu
CisgICAgZ2V0QXJyYXlCb3VuZHNDbGFtcGVyKCkuT3V0cHV0Q2xhbXBpbmdGdW5jdGlvbkRlZmlu
aXRpb24oc2luayk7CisKKyAgICAvLyBXcml0ZSB0cmFuc2xhdGVkIHNoYWRlci4KKyAgICBUT3V0
cHV0RVNTTCBvdXRwdXRFU1NMKHNpbmssIGdldEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5KCks
IGdldEhhc2hGdW5jdGlvbigpLCBnZXROYW1lTWFwKCksIGdldFN5bWJvbFRhYmxlKCkpOworICAg
IHJvb3QtPnRyYXZlcnNlKCZvdXRwdXRFU1NMKTsKK30KKwordm9pZCBUcmFuc2xhdG9yRVNTTDo6
d3JpdGVFeHRlbnNpb25CZWhhdmlvcigpIHsKKyAgICBUSW5mb1NpbmtCYXNlJiBzaW5rID0gZ2V0
SW5mb1NpbmsoKS5vYmo7CisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRlbnNpb25C
ZWhhdmlvciA9IGdldEV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgZm9yIChURXh0ZW5zaW9uQmVo
YXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRlbnNpb25CZWhhdmlvci5iZWdpbigpOwor
ICAgICAgICAgaXRlciAhPSBleHRlbnNpb25CZWhhdmlvci5lbmQoKTsgKytpdGVyKSB7CisgICAg
ICAgIGlmIChpdGVyLT5zZWNvbmQgIT0gRUJoVW5kZWZpbmVkKSB7CisgICAgICAgICAgICBzaW5r
IDw8ICIjZXh0ZW5zaW9uICIgPDwgaXRlci0+Zmlyc3QgPDwgIiA6ICIKKyAgICAgICAgICAgICAg
ICAgPDwgZ2V0QmVoYXZpb3JTdHJpbmcoaXRlci0+c2Vjb25kKSA8PCAiXG4iOworICAgICAgICB9
CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckVTU0wuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JFU1NMLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTE4
ZjNjMjVlYzhiOWVlNTI5NmRkODhhZGRkNWUxM2Q2NjMyZjJhMwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JFU1NMLmgKQEAgLTAsMCArMSwyMyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEx
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBD
T01QSUxFUl9UUkFOU0xBVE9SRVNTTF9IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SRVNT
TF9IXworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oIgorCitjbGFz
cyBUcmFuc2xhdG9yRVNTTCA6IHB1YmxpYyBUQ29tcGlsZXIgeworcHVibGljOgorICAgIFRyYW5z
bGF0b3JFU1NMKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYyk7CisKK3Byb3Rl
Y3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KTsKKwor
cHJpdmF0ZToKKyAgICB2b2lkIHdyaXRlRXh0ZW5zaW9uQmVoYXZpb3IoKTsKK307CisKKyNlbmRp
ZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUkVTU0xfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JHTFNMLmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JHTFNMLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42Njg4ZDdmMzYyZTkwYmRjYzdhZjhmMWE0YWQ1MWE2MDRi
NTJjMGExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckdMU0wuY3BwCkBAIC0wLDAgKzEsNDQgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JHTFNMLmgiCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0wuaCIK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1ZlcnNpb25HTFNMLmgiCisKK3N0YXRpYyB2
b2lkIHdyaXRlVmVyc2lvbihTaFNoYWRlclR5cGUgdHlwZSwgVEludGVybU5vZGUqIHJvb3QsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgVEluZm9TaW5rQmFzZSYgc2luaykgeworICAgIFRWZXJz
aW9uR0xTTCB2ZXJzaW9uR0xTTCh0eXBlKTsKKyAgICByb290LT50cmF2ZXJzZSgmdmVyc2lvbkdM
U0wpOworICAgIGludCB2ZXJzaW9uID0gdmVyc2lvbkdMU0wuZ2V0VmVyc2lvbigpOworICAgIC8v
IFdlIG5lZWQgdG8gd3JpdGUgdmVyc2lvbiBkaXJlY3RpdmUgb25seSBpZiBpdCBpcyBncmVhdGVy
IHRoYW4gMTEwLgorICAgIC8vIElmIHRoZXJlIGlzIG5vIHZlcnNpb24gZGlyZWN0aXZlIGluIHRo
ZSBzaGFkZXIsIDExMCBpcyBpbXBsaWVkLgorICAgIGlmICh2ZXJzaW9uID4gMTEwKSB7CisgICAg
ICAgIHNpbmsgPDwgIiN2ZXJzaW9uICIgPDwgdmVyc2lvbiA8PCAiXG4iOworICAgIH0KK30KKwor
VHJhbnNsYXRvckdMU0w6OlRyYW5zbGF0b3JHTFNMKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRl
clNwZWMgc3BlYykKKyAgICA6IFRDb21waWxlcih0eXBlLCBzcGVjKSB7Cit9CisKK3ZvaWQgVHJh
bnNsYXRvckdMU0w6OnRyYW5zbGF0ZShUSW50ZXJtTm9kZSogcm9vdCkgeworICAgIFRJbmZvU2lu
a0Jhc2UmIHNpbmsgPSBnZXRJbmZvU2luaygpLm9iajsKKworICAgIC8vIFdyaXRlIEdMU0wgdmVy
c2lvbi4KKyAgICB3cml0ZVZlcnNpb24oZ2V0U2hhZGVyVHlwZSgpLCByb290LCBzaW5rKTsKKwor
ICAgIC8vIFdyaXRlIGVtdWxhdGVkIGJ1aWx0LWluIGZ1bmN0aW9ucyBpZiBuZWVkZWQuCisgICAg
Z2V0QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IoKS5PdXRwdXRFbXVsYXRlZEZ1bmN0aW9uRGVmaW5p
dGlvbigKKyAgICAgICAgc2luaywgZmFsc2UpOworCisgICAgLy8gV3JpdGUgYXJyYXkgYm91bmRz
IGNsYW1waW5nIGVtdWxhdGlvbiBpZiBuZWVkZWQuCisgICAgZ2V0QXJyYXlCb3VuZHNDbGFtcGVy
KCkuT3V0cHV0Q2xhbXBpbmdGdW5jdGlvbkRlZmluaXRpb24oc2luayk7CisKKyAgICAvLyBXcml0
ZSB0cmFuc2xhdGVkIHNoYWRlci4KKyAgICBUT3V0cHV0R0xTTCBvdXRwdXRHTFNMKHNpbmssIGdl
dEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5KCksIGdldEhhc2hGdW5jdGlvbigpLCBnZXROYW1l
TWFwKCksIGdldFN5bWJvbFRhYmxlKCkpOworICAgIHJvb3QtPnRyYXZlcnNlKCZvdXRwdXRHTFNM
KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JHTFNMLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yR0xTTC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQwYmIzMTQ1
ZTgwZjdiMjIyYzUzY2JkMzgzMmUxOGZlYmU3OTc2YzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yR0xT
TC5oCkBAIC0wLDAgKzEsMjAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElM
RVJfVFJBTlNMQVRPUkdMU0xfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUkdMU0xfSF8K
KworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU2hIYW5kbGUuaCIKKworY2xhc3MgVHJh
bnNsYXRvckdMU0wgOiBwdWJsaWMgVENvbXBpbGVyIHsKK3B1YmxpYzoKKyAgICBUcmFuc2xhdG9y
R0xTTChTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMpOworCitwcm90ZWN0ZWQ6
CisgICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShUSW50ZXJtTm9kZSogcm9vdCk7Cit9OworCisj
ZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JHTFNMX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9ySExTTC5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9ySExTTC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2MxZGIwMTFiNjZhMjJlYTI2NGZlOWIxZDY3NTFk
MmE5OWQ3ZGY3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JITFNMLmNwcApAQCAtMCwwICsxLDI0IEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9ySExTTC5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXpl
UGFyc2VDb250ZXh0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRITFNM
LmgiCisKK1RyYW5zbGF0b3JITFNMOjpUcmFuc2xhdG9ySExTTChTaFNoYWRlclR5cGUgdHlwZSwg
U2hTaGFkZXJTcGVjIHNwZWMsIFNoU2hhZGVyT3V0cHV0IG91dHB1dCkKKyAgICA6IFRDb21waWxl
cih0eXBlLCBzcGVjKSwgbU91dHB1dFR5cGUob3V0cHV0KQoreworfQorCit2b2lkIFRyYW5zbGF0
b3JITFNMOjp0cmFuc2xhdGUoVEludGVybU5vZGUgKnJvb3QpCit7CisgICAgVFBhcnNlQ29udGV4
dCYgcGFyc2VDb250ZXh0ID0gKkdldEdsb2JhbFBhcnNlQ29udGV4dCgpOworICAgIHNoOjpPdXRw
dXRITFNMIG91dHB1dEhMU0wocGFyc2VDb250ZXh0LCBnZXRSZXNvdXJjZXMoKSwgbU91dHB1dFR5
cGUpOworCisgICAgb3V0cHV0SExTTC5vdXRwdXQoKTsKKyAgICBtQWN0aXZlVW5pZm9ybXMgPSBv
dXRwdXRITFNMLmdldFVuaWZvcm1zKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9ySExTTC5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckhMU0wu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42MjA0YjMwY2MyNDFhYzc5MGYzNjZjZjIzZGNlZDdmZWIxNzA5NDYzCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvckhMU0wuaApAQCAtMCwwICsxLDI3IEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JITFNMX0hfCisjZGVmaW5lIENPTVBJ
TEVSX1RSQU5TTEFUT1JITFNMX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1No
SGFuZGxlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmgiCisKK2Ns
YXNzIFRyYW5zbGF0b3JITFNMIDogcHVibGljIFRDb21waWxlciB7CitwdWJsaWM6CisgICAgVHJh
bnNsYXRvckhMU0woU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBTaFNoYWRl
ck91dHB1dCBvdXRwdXQpOworCisgICAgdmlydHVhbCBUcmFuc2xhdG9ySExTTCAqZ2V0QXNUcmFu
c2xhdG9ySExTTCgpIHsgcmV0dXJuIHRoaXM7IH0KKyAgICBjb25zdCBzaDo6QWN0aXZlVW5pZm9y
bXMgJmdldFVuaWZvcm1zKCkgeyByZXR1cm4gbUFjdGl2ZVVuaWZvcm1zOyB9CisKK3Byb3RlY3Rl
ZDoKKyAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KTsKKworICAg
IHNoOjpBY3RpdmVVbmlmb3JtcyBtQWN0aXZlVW5pZm9ybXM7CisgICAgU2hTaGFkZXJPdXRwdXQg
bU91dHB1dFR5cGU7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JITFNMX0hf
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UeXBlcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMTlmNGYyOWU1NWZmMWY2Nzc4Yzg5MDJmMmFlZTZj
NTNhOGQwYmI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHlwZXMuaApAQCAtMCwwICsxLDMwNyBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworI2lmbmRlZiBfVFlQRVNfSU5DTFVERUQKKyNkZWZpbmUgX1RZUEVTX0lOQ0xV
REVECisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9CYXNlVHlwZXMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L0NvbW1vbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvY29tcGlsZXJkZWJ1Zy5o
IgorCitzdHJ1Y3QgVFB1YmxpY1R5cGU7CitjbGFzcyBUVHlwZTsKKworY2xhc3MgVEZpZWxkCit7
CitwdWJsaWM6CisgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSgpOworICAgIFRGaWVsZChU
VHlwZSogdHlwZSwgVFN0cmluZyogbmFtZSkgOiBtVHlwZSh0eXBlKSwgbU5hbWUobmFtZSkge30K
KworICAgIC8vIFRPRE8oYWxva3ApOiBXZSBzaG91bGQgb25seSByZXR1cm4gY29uc3QgdHlwZS4K
KyAgICAvLyBGaXggaXQgYnkgdHdlYWtpbmcgZ3JhbW1hci4KKyAgICBUVHlwZSogdHlwZSgpIHsg
cmV0dXJuIG1UeXBlOyB9CisgICAgY29uc3QgVFR5cGUqIHR5cGUoKSBjb25zdCB7IHJldHVybiBt
VHlwZTsgfQorCisgICAgY29uc3QgVFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuICptTmFt
ZTsgfQorCitwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihURmllbGQpOwor
ICAgIFRUeXBlKiBtVHlwZTsKKyAgICBUU3RyaW5nKiBtTmFtZTsKK307CisKK3R5cGVkZWYgVFZl
Y3RvcjxURmllbGQqPiBURmllbGRMaXN0OworaW5saW5lIFRGaWVsZExpc3QqIE5ld1Bvb2xURmll
bGRMaXN0KCkKK3sKKyAgICB2b2lkKiBtZW1vcnkgPSBHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCkt
PmFsbG9jYXRlKHNpemVvZihURmllbGRMaXN0KSk7CisgICAgcmV0dXJuIG5ldyhtZW1vcnkpIFRG
aWVsZExpc3Q7Cit9CisKK2NsYXNzIFRTdHJ1Y3R1cmUKK3sKK3B1YmxpYzoKKyAgICBQT09MX0FM
TE9DQVRPUl9ORVdfREVMRVRFKCk7CisgICAgVFN0cnVjdHVyZShUU3RyaW5nKiBuYW1lLCBURmll
bGRMaXN0KiBmaWVsZHMpCisgICAgICAgIDogbU5hbWUobmFtZSksCisgICAgICAgICAgbUZpZWxk
cyhmaWVsZHMpLAorICAgICAgICAgIG1PYmplY3RTaXplKDApLAorICAgICAgICAgIG1EZWVwZXN0
TmVzdGluZygwKSB7CisgICAgfQorCisgICAgY29uc3QgVFN0cmluZyYgbmFtZSgpIGNvbnN0IHsg
cmV0dXJuICptTmFtZTsgfQorICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcygpIGNvbnN0IHsg
cmV0dXJuICptRmllbGRzOyB9CisKKyAgICBjb25zdCBUU3RyaW5nJiBtYW5nbGVkTmFtZSgpIGNv
bnN0IHsKKyAgICAgICAgaWYgKG1NYW5nbGVkTmFtZS5lbXB0eSgpKQorICAgICAgICAgICAgbU1h
bmdsZWROYW1lID0gYnVpbGRNYW5nbGVkTmFtZSgpOworICAgICAgICByZXR1cm4gbU1hbmdsZWRO
YW1lOworICAgIH0KKyAgICBzaXplX3Qgb2JqZWN0U2l6ZSgpIGNvbnN0IHsKKyAgICAgICAgaWYg
KG1PYmplY3RTaXplID09IDApCisgICAgICAgICAgICBtT2JqZWN0U2l6ZSA9IGNhbGN1bGF0ZU9i
amVjdFNpemUoKTsKKyAgICAgICAgcmV0dXJuIG1PYmplY3RTaXplOworICAgIH07CisgICAgaW50
IGRlZXBlc3ROZXN0aW5nKCkgY29uc3QgeworICAgICAgICBpZiAobURlZXBlc3ROZXN0aW5nID09
IDApCisgICAgICAgICAgICBtRGVlcGVzdE5lc3RpbmcgPSBjYWxjdWxhdGVEZWVwZXN0TmVzdGlu
ZygpOworICAgICAgICByZXR1cm4gbURlZXBlc3ROZXN0aW5nOworICAgIH0KKyAgICBib29sIGNv
bnRhaW5zQXJyYXlzKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRf
QVNTSUdOKFRTdHJ1Y3R1cmUpOworICAgIFRTdHJpbmcgYnVpbGRNYW5nbGVkTmFtZSgpIGNvbnN0
OworICAgIHNpemVfdCBjYWxjdWxhdGVPYmplY3RTaXplKCkgY29uc3Q7CisgICAgaW50IGNhbGN1
bGF0ZURlZXBlc3ROZXN0aW5nKCkgY29uc3Q7CisKKyAgICBUU3RyaW5nKiBtTmFtZTsKKyAgICBU
RmllbGRMaXN0KiBtRmllbGRzOworCisgICAgbXV0YWJsZSBUU3RyaW5nIG1NYW5nbGVkTmFtZTsK
KyAgICBtdXRhYmxlIHNpemVfdCBtT2JqZWN0U2l6ZTsKKyAgICBtdXRhYmxlIGludCBtRGVlcGVz
dE5lc3Rpbmc7Cit9OworCisvLworLy8gQmFzZSBjbGFzcyBmb3IgdGhpbmdzIHRoYXQgaGF2ZSBh
IHR5cGUuCisvLworY2xhc3MgVFR5cGUKK3sKK3B1YmxpYzoKKyAgICBQT09MX0FMTE9DQVRPUl9O
RVdfREVMRVRFKCk7CisgICAgVFR5cGUoKSB7fQorICAgIFRUeXBlKFRCYXNpY1R5cGUgdCwgVFBy
ZWNpc2lvbiBwLCBUUXVhbGlmaWVyIHEgPSBFdnFUZW1wb3JhcnksIHVuc2lnbmVkIGNoYXIgcyA9
IDEsIGJvb2wgbSA9IGZhbHNlLCBib29sIGEgPSBmYWxzZSkgOgorICAgICAgICAgICAgdHlwZSh0
KSwgcHJlY2lzaW9uKHApLCBxdWFsaWZpZXIocSksIHNpemUocyksIG1hdHJpeChtKSwgYXJyYXko
YSksIGFycmF5U2l6ZSgwKSwgc3RydWN0dXJlKDApCisgICAgeworICAgIH0KKyAgICBleHBsaWNp
dCBUVHlwZShjb25zdCBUUHVibGljVHlwZSAmcCk7CisgICAgVFR5cGUoVFN0cnVjdHVyZSogdXNl
ckRlZiwgVFByZWNpc2lvbiBwID0gRWJwVW5kZWZpbmVkKSA6CisgICAgICAgICAgICB0eXBlKEVi
dFN0cnVjdCksIHByZWNpc2lvbihwKSwgcXVhbGlmaWVyKEV2cVRlbXBvcmFyeSksIHNpemUoMSks
IG1hdHJpeChmYWxzZSksIGFycmF5KGZhbHNlKSwgYXJyYXlTaXplKDApLCBzdHJ1Y3R1cmUodXNl
ckRlZikKKyAgICB7CisgICAgfQorCisgICAgVEJhc2ljVHlwZSBnZXRCYXNpY1R5cGUoKSBjb25z
dCB7IHJldHVybiB0eXBlOyB9CisgICAgdm9pZCBzZXRCYXNpY1R5cGUoVEJhc2ljVHlwZSB0KSB7
IHR5cGUgPSB0OyB9CisKKyAgICBUUHJlY2lzaW9uIGdldFByZWNpc2lvbigpIGNvbnN0IHsgcmV0
dXJuIHByZWNpc2lvbjsgfQorICAgIHZvaWQgc2V0UHJlY2lzaW9uKFRQcmVjaXNpb24gcCkgeyBw
cmVjaXNpb24gPSBwOyB9CisKKyAgICBUUXVhbGlmaWVyIGdldFF1YWxpZmllcigpIGNvbnN0IHsg
cmV0dXJuIHF1YWxpZmllcjsgfQorICAgIHZvaWQgc2V0UXVhbGlmaWVyKFRRdWFsaWZpZXIgcSkg
eyBxdWFsaWZpZXIgPSBxOyB9CisKKyAgICAvLyBPbmUtZGltZW5zaW9uYWwgc2l6ZSBvZiBzaW5n
bGUgaW5zdGFuY2UgdHlwZQorICAgIGludCBnZXROb21pbmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IHNpemU7IH0KKyAgICB2b2lkIHNldE5vbWluYWxTaXplKHVuc2lnbmVkIGNoYXIgcykgeyBzaXpl
ID0gczsgfQorICAgIC8vIEZ1bGwgc2l6ZSBvZiBzaW5nbGUgaW5zdGFuY2Ugb2YgdHlwZQorICAg
IHNpemVfdCBnZXRPYmplY3RTaXplKCkgY29uc3Q7CisKKyAgICBpbnQgZWxlbWVudFJlZ2lzdGVy
Q291bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gZ2V0U3RydWN0KCktPmZpZWxk
cygpOworICAgICAgICAgICAgaW50IHJlZ2lzdGVyQ291bnQgPSAwOworCisgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZWdpc3RlckNvdW50ICs9IGZpZWxkc1tpXS0+dHlwZSgpLT50b3Rh
bFJlZ2lzdGVyQ291bnQoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHJl
Z2lzdGVyQ291bnQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaXNNYXRyaXgoKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdldE5vbWluYWxTaXplKCk7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGludCB0b3RhbFJlZ2lzdGVyQ291bnQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKGFycmF5KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYXJyYXlTaXpl
ICogZWxlbWVudFJlZ2lzdGVyQ291bnQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50UmVnaXN0ZXJDb3VudCgpOworICAgICAg
ICB9CisgICAgfQorCisgICAgYm9vbCBpc01hdHJpeCgpIGNvbnN0IHsgcmV0dXJuIG1hdHJpeCA/
IHRydWUgOiBmYWxzZTsgfQorICAgIHZvaWQgc2V0TWF0cml4KGJvb2wgbSkgeyBtYXRyaXggPSBt
OyB9CisKKyAgICBib29sIGlzQXJyYXkoKSBjb25zdCAgeyByZXR1cm4gYXJyYXkgPyB0cnVlIDog
ZmFsc2U7IH0KKyAgICBpbnQgZ2V0QXJyYXlTaXplKCkgY29uc3QgeyByZXR1cm4gYXJyYXlTaXpl
OyB9CisgICAgdm9pZCBzZXRBcnJheVNpemUoaW50IHMpIHsgYXJyYXkgPSB0cnVlOyBhcnJheVNp
emUgPSBzOyB9CisgICAgdm9pZCBjbGVhckFycmF5bmVzcygpIHsgYXJyYXkgPSBmYWxzZTsgYXJy
YXlTaXplID0gMDsgfQorCisgICAgYm9vbCBpc1ZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIHNpemUg
PiAxICYmICFtYXRyaXg7IH0KKyAgICBib29sIGlzU2NhbGFyKCkgY29uc3QgeyByZXR1cm4gc2l6
ZSA9PSAxICYmICFtYXRyaXggJiYgIXN0cnVjdHVyZTsgfQorCisgICAgVFN0cnVjdHVyZSogZ2V0
U3RydWN0KCkgY29uc3QgeyByZXR1cm4gc3RydWN0dXJlOyB9CisgICAgdm9pZCBzZXRTdHJ1Y3Qo
VFN0cnVjdHVyZSogcykgeyBzdHJ1Y3R1cmUgPSBzOyB9CisKKyAgICBjb25zdCBUU3RyaW5nJiBn
ZXRNYW5nbGVkTmFtZSgpIGNvbnN0IHsKKyAgICAgICAgaWYgKG1hbmdsZWQuZW1wdHkoKSkgewor
ICAgICAgICAgICAgbWFuZ2xlZCA9IGJ1aWxkTWFuZ2xlZE5hbWUoKTsKKyAgICAgICAgICAgIG1h
bmdsZWQgKz0gJzsnOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtYW5nbGVkOworICAgIH0K
KworICAgIGJvb2wgc2FtZUVsZW1lbnRUeXBlKGNvbnN0IFRUeXBlJiByaWdodCkgY29uc3Qgewor
ICAgICAgICByZXR1cm4gICAgICB0eXBlID09IHJpZ2h0LnR5cGUgICAmJgorICAgICAgICAgICAg
ICAgICAgICBzaXplID09IHJpZ2h0LnNpemUgICAmJgorICAgICAgICAgICAgICAgICAgbWF0cml4
ID09IHJpZ2h0Lm1hdHJpeCAmJgorICAgICAgICAgICAgICAgc3RydWN0dXJlID09IHJpZ2h0LnN0
cnVjdHVyZTsKKyAgICB9CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRUeXBlJiByaWdodCkg
Y29uc3QgeworICAgICAgICByZXR1cm4gICAgICB0eXBlID09IHJpZ2h0LnR5cGUgICAmJgorICAg
ICAgICAgICAgICAgICAgICBzaXplID09IHJpZ2h0LnNpemUgICAmJgorICAgICAgICAgICAgICAg
ICAgbWF0cml4ID09IHJpZ2h0Lm1hdHJpeCAmJgorICAgICAgICAgICAgICAgICAgIGFycmF5ID09
IHJpZ2h0LmFycmF5ICAmJiAoIWFycmF5IHx8IGFycmF5U2l6ZSA9PSByaWdodC5hcnJheVNpemUp
ICYmCisgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPT0gcmlnaHQuc3RydWN0dXJlOworICAgICAg
ICAvLyBkb24ndCBjaGVjayB0aGUgcXVhbGlmaWVyLCBpdCdzIG5vdCBldmVyIHdoYXQncyBiZWlu
ZyBzb3VnaHQgYWZ0ZXIKKyAgICB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRUeXBlJiBy
aWdodCkgY29uc3QgeworICAgICAgICByZXR1cm4gIW9wZXJhdG9yPT0ocmlnaHQpOworICAgIH0K
KyAgICBib29sIG9wZXJhdG9yPChjb25zdCBUVHlwZSYgcmlnaHQpIGNvbnN0IHsKKyAgICAgICAg
aWYgKHR5cGUgIT0gcmlnaHQudHlwZSkgcmV0dXJuIHR5cGUgPCByaWdodC50eXBlOworICAgICAg
ICBpZiAoc2l6ZSAhPSByaWdodC5zaXplKSByZXR1cm4gc2l6ZSA8IHJpZ2h0LnNpemU7CisgICAg
ICAgIGlmIChtYXRyaXggIT0gcmlnaHQubWF0cml4KSByZXR1cm4gbWF0cml4IDwgcmlnaHQubWF0
cml4OworICAgICAgICBpZiAoYXJyYXkgIT0gcmlnaHQuYXJyYXkpIHJldHVybiBhcnJheSA8IHJp
Z2h0LmFycmF5OworICAgICAgICBpZiAoYXJyYXlTaXplICE9IHJpZ2h0LmFycmF5U2l6ZSkgcmV0
dXJuIGFycmF5U2l6ZSA8IHJpZ2h0LmFycmF5U2l6ZTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZSAh
PSByaWdodC5zdHJ1Y3R1cmUpIHJldHVybiBzdHJ1Y3R1cmUgPCByaWdodC5zdHJ1Y3R1cmU7CisK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGNvbnN0IGNoYXIqIGdldEJhc2lj
U3RyaW5nKCkgY29uc3QgeyByZXR1cm4gOjpnZXRCYXNpY1N0cmluZyh0eXBlKTsgfQorICAgIGNv
bnN0IGNoYXIqIGdldFByZWNpc2lvblN0cmluZygpIGNvbnN0IHsgcmV0dXJuIDo6Z2V0UHJlY2lz
aW9uU3RyaW5nKHByZWNpc2lvbik7IH0KKyAgICBjb25zdCBjaGFyKiBnZXRRdWFsaWZpZXJTdHJp
bmcoKSBjb25zdCB7IHJldHVybiA6OmdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpOyB9Cisg
ICAgVFN0cmluZyBnZXRDb21wbGV0ZVN0cmluZygpIGNvbnN0OworCisgICAgLy8gSWYgdGhpcyB0
eXBlIGlzIGEgc3RydWN0LCByZXR1cm5zIHRoZSBkZWVwZXN0IHN0cnVjdCBuZXN0aW5nIG9mCisg
ICAgLy8gYW55IGZpZWxkIGluIHRoZSBzdHJ1Y3QuIEZvciBleGFtcGxlOgorICAgIC8vICAgc3Ry
dWN0IG5lc3RpbmcxIHsKKyAgICAvLyAgICAgdmVjNCBwb3NpdGlvbjsKKyAgICAvLyAgIH07Cisg
ICAgLy8gICBzdHJ1Y3QgbmVzdGluZzIgeworICAgIC8vICAgICBuZXN0aW5nMSBmaWVsZDE7Cisg
ICAgLy8gICAgIHZlYzQgZmllbGQyOworICAgIC8vICAgfTsKKyAgICAvLyBGb3IgdHlwZSAibmVz
dGluZzIiLCB0aGlzIG1ldGhvZCB3b3VsZCByZXR1cm4gMiAtLSB0aGUgbnVtYmVyCisgICAgLy8g
b2Ygc3RydWN0dXJlcyB0aHJvdWdoIHdoaWNoIGluZGlyZWN0aW9uIG11c3Qgb2NjdXIgdG8gcmVh
Y2ggdGhlCisgICAgLy8gZGVlcGVzdCBmaWVsZCAobmVzdGluZzIuZmllbGQxLnBvc2l0aW9uKS4K
KyAgICBpbnQgZ2V0RGVlcGVzdFN0cnVjdE5lc3RpbmcoKSBjb25zdCB7CisgICAgICAgIHJldHVy
biBzdHJ1Y3R1cmUgPyBzdHJ1Y3R1cmUtPmRlZXBlc3ROZXN0aW5nKCkgOiAwOworICAgIH0KKwor
ICAgIGJvb2wgaXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlzKCkgY29uc3QgeworICAgICAgICBy
ZXR1cm4gc3RydWN0dXJlID8gc3RydWN0dXJlLT5jb250YWluc0FycmF5cygpIDogZmFsc2U7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIFRTdHJpbmcgYnVpbGRNYW5nbGVkTmFtZSgpIGNvbnN0Owor
CisgICAgVEJhc2ljVHlwZSB0eXBlOworICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOworICAgIFRR
dWFsaWZpZXIgcXVhbGlmaWVyOworICAgIHVuc2lnbmVkIGNoYXIgc2l6ZTsKKyAgICBib29sIG1h
dHJpeDsKKyAgICBib29sIGFycmF5OworICAgIGludCBhcnJheVNpemU7CisKKyAgICBUU3RydWN0
dXJlKiBzdHJ1Y3R1cmU7ICAgICAgLy8gMCB1bmxlc3MgdGhpcyBpcyBhIHN0cnVjdAorCisgICAg
bXV0YWJsZSBUU3RyaW5nIG1hbmdsZWQ7Cit9OworCisvLworLy8gVGhpcyBpcyBhIHdvcmthcm91
bmQgZm9yIGEgcHJvYmxlbSB3aXRoIHRoZSB5YWNjIHN0YWNrLCAgSXQgY2FuJ3QgaGF2ZQorLy8g
dHlwZXMgdGhhdCBpdCB0aGlua3MgaGF2ZSBub24tdHJpdmlhbCBjb25zdHJ1Y3RvcnMuICBJdCBz
aG91bGQKKy8vIGp1c3QgYmUgdXNlZCB3aGlsZSByZWNvZ25pemluZyB0aGUgZ3JhbW1hciwgbm90
IGFueXRoaW5nIGVsc2UuICBQb2ludGVycworLy8gY291bGQgYmUgdXNlZCwgYnV0IGFsc28gdHJ5
aW5nIHRvIGF2b2lkIGxvdHMgb2YgbWVtb3J5IG1hbmFnZW1lbnQgb3ZlcmhlYWQuCisvLworLy8g
Tm90IGFzIGJhZCBhcyBpdCBsb29rcywgdGhlcmUgaXMgbm8gYWN0dWFsIGFzc3VtcHRpb24gdGhh
dCB0aGUgZmllbGRzCisvLyBtYXRjaCB1cCBvciBhcmUgbmFtZSB0aGUgc2FtZSBvciBhbnl0aGlu
ZyBsaWtlIHRoYXQuCisvLworc3RydWN0IFRQdWJsaWNUeXBlCit7CisgICAgVEJhc2ljVHlwZSB0
eXBlOworICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyOworICAgIFRQcmVjaXNpb24gcHJlY2lzaW9u
OworICAgIHVuc2lnbmVkIGNoYXIgc2l6ZTsgICAgICAgICAgLy8gc2l6ZSBvZiB2ZWN0b3Igb3Ig
bWF0cml4LCBub3Qgc2l6ZSBvZiBhcnJheQorICAgIGJvb2wgbWF0cml4OworICAgIGJvb2wgYXJy
YXk7CisgICAgaW50IGFycmF5U2l6ZTsKKyAgICBUVHlwZSogdXNlckRlZjsKKyAgICBUU291cmNl
TG9jIGxpbmU7CisKKyAgICB2b2lkIHNldEJhc2ljKFRCYXNpY1R5cGUgYnQsIFRRdWFsaWZpZXIg
cSwgY29uc3QgVFNvdXJjZUxvYyYgbG4pCisgICAgeworICAgICAgICB0eXBlID0gYnQ7CisgICAg
ICAgIHF1YWxpZmllciA9IHE7CisgICAgICAgIHByZWNpc2lvbiA9IEVicFVuZGVmaW5lZDsKKyAg
ICAgICAgc2l6ZSA9IDE7CisgICAgICAgIG1hdHJpeCA9IGZhbHNlOworICAgICAgICBhcnJheSA9
IGZhbHNlOworICAgICAgICBhcnJheVNpemUgPSAwOworICAgICAgICB1c2VyRGVmID0gMDsKKyAg
ICAgICAgbGluZSA9IGxuOworICAgIH0KKworICAgIHZvaWQgc2V0QWdncmVnYXRlKHVuc2lnbmVk
IGNoYXIgcywgYm9vbCBtID0gZmFsc2UpCisgICAgeworICAgICAgICBzaXplID0gczsKKyAgICAg
ICAgbWF0cml4ID0gbTsKKyAgICB9CisKKyAgICB2b2lkIHNldEFycmF5KGJvb2wgYSwgaW50IHMg
PSAwKQorICAgIHsKKyAgICAgICAgYXJyYXkgPSBhOworICAgICAgICBhcnJheVNpemUgPSBzOwor
ICAgIH0KKworICAgIGJvb2wgaXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlzKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmICghdXNlckRlZikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHVzZXJEZWYtPmlzU3RydWN0dXJl
Q29udGFpbmluZ0FycmF5cygpOworICAgIH0KK307CisKKyNlbmRpZiAvLyBfVFlQRVNfSU5DTFVE
RURfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iNzgyNjExOWFlYTAwNzRkNGZjY2MwNDg1NTdkMDExMWY3ODkwODMyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5m
b2xkU2hvcnRDaXJjdWl0LmNwcApAQCAtMCwwICsxLDE4NCBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
Ky8vIFVuZm9sZFNob3J0Q2lyY3VpdCBpcyBhbiBBU1QgdHJhdmVyc2VyIHRvIG91dHB1dCBzaG9y
dC1jaXJjdWl0aW5nIG9wZXJhdG9ycyBhcyBpZi1lbHNlIHN0YXRlbWVudHMuCisvLyBUaGUgcmVz
dWx0cyBhcmUgYXNzaWduZWQgdG8gcyMgdGVtcG9yYXJpZXMsIHdoaWNoIGFyZSB1c2VkIGJ5IHRo
ZSBtYWluIHRyYW5zbGF0b3IgaW5zdGVhZCBvZgorLy8gdGhlIG9yaWdpbmFsIGV4cHJlc3Npb24u
CisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXQu
aCIKKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuaCIKKworbmFtZXNwYWNlIHNoCit7CitV
bmZvbGRTaG9ydENpcmN1aXQ6OlVuZm9sZFNob3J0Q2lyY3VpdChUUGFyc2VDb250ZXh0ICZjb250
ZXh0LCBPdXRwdXRITFNMICpvdXRwdXRITFNMKSA6IG1Db250ZXh0KGNvbnRleHQpLCBtT3V0cHV0
SExTTChvdXRwdXRITFNMKQoreworICAgIG1UZW1wb3JhcnlJbmRleCA9IDA7Cit9CisKK3ZvaWQg
VW5mb2xkU2hvcnRDaXJjdWl0Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBp
bnQgcmV3aW5kSW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7CisgICAgbm9kZS0+dHJhdmVyc2UodGhp
cyk7CisgICAgbVRlbXBvcmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7Cit9CisKK2Jvb2wgVW5mb2xk
U2hvcnRDaXJjdWl0Ojp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm9k
ZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtT3V0cHV0SExTTC0+Z2V0Qm9keVN0cmVh
bSgpOworCisgICAgLy8gSWYgb3VyIHJpZ2h0IG5vZGUgZG9lc24ndCBoYXZlIHNpZGUgZWZmZWN0
cywgd2Uga25vdyB3ZSBkb24ndCBuZWVkIHRvIHVuZm9sZCB0aGlzCisgICAgLy8gZXhwcmVzc2lv
bjogdGhlcmUgd2lsbCBiZSBubyBzaG9ydC1jaXJjdWl0aW5nIHNpZGUgZWZmZWN0cyB0byBhdm9p
ZAorICAgIC8vIChub3RlOiB1bmZvbGRpbmcgZG9lc24ndCBkZXBlbmQgb24gdGhlIGxlZnQgbm9k
ZSAtLSBpdCB3aWxsIGFsd2F5cyBiZSBldmFsdWF0ZWQpCisgICAgaWYgKCFub2RlLT5nZXRSaWdo
dCgpLT5oYXNTaWRlRWZmZWN0cygpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wTG9n
aWNhbE9yOgorICAgICAgICAvLyAieCB8fCB5IiBpcyBlcXVpdmFsZW50IHRvICJ4ID8gdHJ1ZSA6
IHkiLCB3aGljaCB1bmZvbGRzIHRvICJib29sIHM7IGlmKHgpIHMgPSB0cnVlOyBlbHNlIHMgPSB5
OyIsCisgICAgICAgIC8vIGFuZCB0aGVuIGZ1cnRoZXIgc2ltcGxpZmllcyBkb3duIHRvICJib29s
IHMgPSB4OyBpZighcykgcyA9IHk7Ii4KKyAgICAgICAgeworICAgICAgICAgICAgaW50IGkgPSBt
VGVtcG9yYXJ5SW5kZXg7CisKKyAgICAgICAgICAgIG91dCA8PCAiYm9vbCBzIiA8PCBpIDw8ICI7
XG4iOworCisgICAgICAgICAgICBvdXQgPDwgIntcbiI7CisKKyAgICAgICAgICAgIG1UZW1wb3Jh
cnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJzZSh0
aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAicyIgPDwgaSA8PCAiID0gIjsKKyAgICAgICAgICAg
IG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50
cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgICAgICBvdXQgPDwgIjtcbiI7CisgICAgICAg
ICAgICBvdXQgPDwgImlmICghcyIgPDwgaSA8PCAiKVxuIgorICAgICAgICAgICAgICAgICAgICJ7
XG4iOworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBu
b2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAiICAg
IHMiIDw8IGkgPDwgIiA9ICI7CisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsK
KyAgICAgICAgICAgIG5vZGUtPmdldFJpZ2h0KCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKKyAg
ICAgICAgICAgIG91dCA8PCAiO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iOworCisgICAg
ICAgICAgICBvdXQgPDwgIn1cbiI7CisKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkg
KyAxOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGNhc2UgRU9wTG9n
aWNhbEFuZDoKKyAgICAgICAgLy8gInggJiYgeSIgaXMgZXF1aXZhbGVudCB0byAieCA/IHkgOiBm
YWxzZSIsIHdoaWNoIHVuZm9sZHMgdG8gImJvb2wgczsgaWYoeCkgcyA9IHk7IGVsc2UgcyA9IGZh
bHNlOyIsCisgICAgICAgIC8vIGFuZCB0aGVuIGZ1cnRoZXIgc2ltcGxpZmllcyBkb3duIHRvICJi
b29sIHMgPSB4OyBpZihzKSBzID0geTsiLgorICAgICAgICB7CisgICAgICAgICAgICBpbnQgaSA9
IG1UZW1wb3JhcnlJbmRleDsKKworICAgICAgICAgICAgb3V0IDw8ICJib29sIHMiIDw8IGkgPDwg
IjtcbiI7CisKKyAgICAgICAgICAgIG91dCA8PCAie1xuIjsKKworICAgICAgICAgICAgbVRlbXBv
cmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNl
KHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICJzIiA8PCBpIDw8ICIgPSAiOworICAgICAgICAg
ICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCkt
PnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKKyAgICAgICAgICAgIG91dCA8PCAiO1xuIjsKKyAgICAg
ICAgICAgIG91dCA8PCAiaWYgKHMiIDw8IGkgPDwgIilcbiIKKyAgICAgICAgICAgICAgICAgICAi
e1xuIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAg
bm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICBvdXQgPDwgIiAg
ICBzIiA8PCBpIDw8ICIgPSAiOworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7
CisgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Cisg
ICAgICAgICAgICBvdXQgPDwgIjtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxuIjsKKworICAg
ICAgICAgICAgb3V0IDw8ICJ9XG4iOworCisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBp
ICsgMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgVW5mb2xkU2hvcnRDaXJjdWl0
Ojp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKK3sK
KyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtT3V0cHV0SExTTC0+Z2V0Qm9keVN0cmVhbSgpOwor
CisgICAgLy8gVW5mb2xkICJiID8geCA6IHkiIGludG8gInR5cGUgczsgaWYoYikgcyA9IHg7IGVs
c2UgcyA9IHk7IgorICAgIGlmIChub2RlLT51c2VzVGVybmFyeU9wZXJhdG9yKCkpCisgICAgewor
ICAgICAgICBpbnQgaSA9IG1UZW1wb3JhcnlJbmRleDsKKworICAgICAgICBvdXQgPDwgbU91dHB1
dEhMU0wtPnR5cGVTdHJpbmcobm9kZS0+Z2V0VHlwZSgpKSA8PCAiIHMiIDw8IGkgPDwgIjtcbiI7
CisKKyAgICAgICAgb3V0IDw8ICJ7XG4iOworCisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkg
KyAxOworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAg
ICAgIG91dCA8PCAiaWYgKCI7CisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAg
ICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAg
ICBvdXQgPDwgIilcbiIKKyAgICAgICAgICAgICAgICJ7XG4iOworICAgICAgICBtVGVtcG9yYXJ5
SW5kZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKHRo
aXMpOworICAgICAgICBvdXQgPDwgIiAgICBzIiA8PCBpIDw8ICIgPSAiOworICAgICAgICBtVGVt
cG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZl
cnNlKG1PdXRwdXRITFNMKTsKKyAgICAgICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAgICAgICAi
fVxuIgorICAgICAgICAgICAgICAgImVsc2VcbiIKKyAgICAgICAgICAgICAgICJ7XG4iOworICAg
ICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9j
aygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8PCAiID0g
IjsKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgIG5vZGUtPmdldEZh
bHNlQmxvY2soKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICBvdXQgPDwgIjtcbiIK
KyAgICAgICAgICAgICAgICJ9XG4iOworCisgICAgICAgIG91dCA8PCAifVxuIjsKKworICAgICAg
ICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgVW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRl
cm1Mb29wICpub2RlKQoreworICAgIGludCByZXdpbmRJbmRleCA9IG1UZW1wb3JhcnlJbmRleDsK
KworICAgIGlmIChub2RlLT5nZXRJbml0KCkpCisgICAgeworICAgICAgICBub2RlLT5nZXRJbml0
KCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKyAgICAKKyAgICBpZiAobm9kZS0+Z2V0Q29uZGl0
aW9uKCkpCisgICAgeworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhp
cyk7CisgICAgfQorCisgICAgaWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkKKyAgICB7CisgICAg
ICAgIG5vZGUtPmdldEV4cHJlc3Npb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorCisgICAg
bVRlbXBvcmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2ludCBVbmZvbGRTaG9ydENpcmN1aXQ6OmdldE5leHRUZW1wb3JhcnlJbmRleCgpCit7CisgICAg
cmV0dXJuIG1UZW1wb3JhcnlJbmRleCsrOworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0Lmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRT
aG9ydENpcmN1aXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZTQxNmJjMDRjMTRmNTNjYTA0Yjg1Yjk3YTlkOTI0
NWRjMGY3MmMwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0LmgKQEAgLTAsMCArMSwzOSBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIFVuZm9sZFNob3J0Q2lyY3VpdCBpcyBhbiBBU1QgdHJh
dmVyc2VyIHRvIG91dHB1dCBzaG9ydC1jaXJjdWl0aW5nIG9wZXJhdG9ycyBhcyBpZi1lbHNlIHN0
YXRlbWVudHMKKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVU5GT0xEU0hPUlRDSVJDVUlUX0hfCisj
ZGVmaW5lIENPTVBJTEVSX1VORk9MRFNIT1JUQ0lSQ1VJVF9IXworCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1BhcnNlQ29udGV4dC5oIgorCituYW1lc3BhY2Ugc2gKK3sKK2NsYXNzIE91dHB1dEhMU0w7
CisKK2NsYXNzIFVuZm9sZFNob3J0Q2lyY3VpdCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7
CisgIHB1YmxpYzoKKyAgICBVbmZvbGRTaG9ydENpcmN1aXQoVFBhcnNlQ29udGV4dCAmY29udGV4
dCwgT3V0cHV0SExTTCAqb3V0cHV0SExTTCk7CisKKyAgICB2b2lkIHRyYXZlcnNlKFRJbnRlcm1O
b2RlICpub2RlKTsKKyAgICBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmlu
YXJ5Kik7CisgICAgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVj
dGlvbiAqbm9kZSk7CisgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29w
ICpub2RlKTsKKworICAgIGludCBnZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKKworICBwcm90ZWN0
ZWQ6CisgICAgVFBhcnNlQ29udGV4dCAmbUNvbnRleHQ7CisgICAgT3V0cHV0SExTTCAqY29uc3Qg
bU91dHB1dEhMU0w7CisKKyAgICBpbnQgbVRlbXBvcmFyeUluZGV4OworfTsKK30KKworI2VuZGlm
ICAgLy8gQ09NUElMRVJfVU5GT0xEU0hPUlRDSVJDVUlUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1
aXRBU1QuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOWM0Mzk3ZDU2MWVhMmFh
ZGYzOTk4NDhlMDQ2MDU0ZTQzYzM5MjcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0QVNU
LmNwcApAQCAtMCwwICsxLDgxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuaCIKKworbmFtZXNwYWNlCit7
CisKKy8vICJ4IHx8IHkiIGlzIGVxdWl2YWxlbnQgdG8gInggPyB0cnVlIDogeSIuCitUSW50ZXJt
U2VsZWN0aW9uICpVbmZvbGRPUihUSW50ZXJtVHlwZWQgKngsIFRJbnRlcm1UeXBlZCAqeSkKK3sK
KyAgICBjb25zdCBUVHlwZSBib29sVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQpOworICAgIENv
bnN0YW50VW5pb24gKnUgPSBuZXcgQ29uc3RhbnRVbmlvbjsKKyAgICB1LT5zZXRCQ29uc3QodHJ1
ZSk7CisgICAgVEludGVybUNvbnN0YW50VW5pb24gKnRydWVOb2RlID0gbmV3IFRJbnRlcm1Db25z
dGFudFVuaW9uKAorICAgICAgICB1LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNv
bnN0LCAxKSk7CisgICAgcmV0dXJuIG5ldyBUSW50ZXJtU2VsZWN0aW9uKHgsIHRydWVOb2RlLCB5
LCBib29sVHlwZSk7Cit9CisKKy8vICJ4ICYmIHkiIGlzIGVxdWl2YWxlbnQgdG8gInggPyB5IDog
ZmFsc2UiLgorVEludGVybVNlbGVjdGlvbiAqVW5mb2xkQU5EKFRJbnRlcm1UeXBlZCAqeCwgVElu
dGVybVR5cGVkICp5KQoreworICAgIGNvbnN0IFRUeXBlIGJvb2xUeXBlKEVidEJvb2wsIEVicFVu
ZGVmaW5lZCk7CisgICAgQ29uc3RhbnRVbmlvbiAqdSA9IG5ldyBDb25zdGFudFVuaW9uOworICAg
IHUtPnNldEJDb25zdChmYWxzZSk7CisgICAgVEludGVybUNvbnN0YW50VW5pb24gKmZhbHNlTm9k
ZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbigKKyAgICAgICAgdSwgVFR5cGUoRWJ0Qm9vbCwg
RWJwVW5kZWZpbmVkLCBFdnFDb25zdCwgMSkpOworICAgIHJldHVybiBuZXcgVEludGVybVNlbGVj
dGlvbih4LCB5LCBmYWxzZU5vZGUsIGJvb2xUeXBlKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIGFu
b255bW91cworCitib29sIFVuZm9sZFNob3J0Q2lyY3VpdEFTVDo6dmlzaXRCaW5hcnkoVmlzaXQg
dmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCit7CisgICAgVEludGVybVNlbGVjdGlvbiAqcmVw
bGFjZW1lbnQgPSBOVUxMOworCisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAg
ICAgIGNhc2UgRU9wTG9naWNhbE9yOgorICAgICAgICByZXBsYWNlbWVudCA9IFVuZm9sZE9SKG5v
ZGUtPmdldExlZnQoKSwgbm9kZS0+Z2V0UmlnaHQoKSk7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFT3BMb2dpY2FsQW5kOgorICAgICAgICByZXBsYWNlbWVudCA9IFVuZm9sZEFORChub2Rl
LT5nZXRMZWZ0KCksIG5vZGUtPmdldFJpZ2h0KCkpOworICAgICAgICBicmVhazsKKyAgICAgIGRl
ZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAocmVwbGFjZW1lbnQpCisgICAg
eworICAgICAgICByZXBsYWNlbWVudHMucHVzaF9iYWNrKAorICAgICAgICAgICAgTm9kZVVwZGF0
ZUVudHJ5KGdldFBhcmVudE5vZGUoKSwgbm9kZSwgcmVwbGFjZW1lbnQpKTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgVW5mb2xkU2hvcnRDaXJjdWl0QVNUOjp1cGRhdGVUcmVl
KCkKK3sKKyAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgcmVwbGFjZW1lbnRzLnNpemUoKTsg
KytpaSkKKyAgICB7CisgICAgICAgIGNvbnN0IE5vZGVVcGRhdGVFbnRyeSYgZW50cnkgPSByZXBs
YWNlbWVudHNbaWldOworICAgICAgICBBU1NFUlQoZW50cnkucGFyZW50KTsKKyAgICAgICAgYm9v
bCByZXBsYWNlZCA9IGVudHJ5LnBhcmVudC0+cmVwbGFjZUNoaWxkTm9kZSgKKyAgICAgICAgICAg
IGVudHJ5Lm9yaWdpbmFsLCBlbnRyeS5yZXBsYWNlbWVudCk7CisgICAgICAgIEFTU0VSVChyZXBs
YWNlZCk7CisKKyAgICAgICAgLy8gSW4gQVNUIHRyYXZlcnNpbmcsIGEgcGFyZW50IGlzIHZpc2l0
ZWQgYmVmb3JlIGl0cyBjaGlsZHJlbi4KKyAgICAgICAgLy8gQWZ0ZXIgd2UgcmVwbGFjZSBhIG5v
ZGUsIGlmIGFuIGltbWVkaWF0ZSBjaGlsZCBpcyB0bworICAgICAgICAvLyBiZSByZXBsYWNlZCwg
d2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgdXBkYXRlIHRoZSByZXBsYWNlZAorCS8vIG5v
ZGU7IGluc3RlYWQsIHdlIHVwZGF0ZSB0aGUgcmVwbGFjZW1lbnQgbm9kZS4KKyAgICAgICAgZm9y
IChzaXplX3QgamogPSBpaSArIDE7IGpqIDwgcmVwbGFjZW1lbnRzLnNpemUoKTsgKytqaikKKyAg
ICAgICAgeworICAgICAgICAgICAgTm9kZVVwZGF0ZUVudHJ5JiBlbnRyeTIgPSByZXBsYWNlbWVu
dHNbampdOworICAgICAgICAgICAgaWYgKGVudHJ5Mi5wYXJlbnQgPT0gZW50cnkub3JpZ2luYWwp
CisgICAgICAgICAgICAgICAgZW50cnkyLnBhcmVudCA9IGVudHJ5LnJlcGxhY2VtZW50OworICAg
ICAgICB9CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1VuZm9sZFNob3J0Q2lyY3Vp
dEFTVC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjI0YzE0YTYwZTM3ZmVkYjIyMmNmOTI2ZDA4NjNiYmQyMjM1Nzc5
YzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuaApAQCAtMCwwICsxLDUxIEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworLy8gVW5mb2xkU2hvcnRDaXJjdWl0QVNUIGlzIGFuIEFTVCB0cmF2
ZXJzZXIgdG8gcmVwbGFjZSBzaG9ydC1jaXJjdWl0aW5nCisvLyBvcGVyYXRpb25zIHdpdGggdGVy
bmFyeSBvcGVyYXRpb25zLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9VTkZPTERfU0hPUlRfQ0lS
Q1VJVF9BU1RfSF8KKyNkZWZpbmUgQ09NUElMRVJfVU5GT0xEX1NIT1JUX0NJUkNVSVRfQVNUX0hf
CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisKKy8vIFRoaXMgdHJhdmVyc2VyIGlkZW50aWZpZXMg
YWxsIHRoZSBzaG9ydCBjaXJjdWl0IGJpbmFyeSAgbm9kZXMgdGhhdCBuZWVkIHRvCisvLyBiZSBy
ZXBsYWNlZCwgYW5kIGNyZWF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgcmVwbGFjZW1lbnQgbm9kZXMu
IEhvd2V2ZXIsCisvLyB0aGUgYWN0dWFsIHJlcGxhY2VtZW50cyBoYXBwZW4gYWZ0ZXIgdGhlIHRy
YXZlcnNlIHRocm91Z2ggdXBkYXRlVHJlZSgpLgorCitjbGFzcyBVbmZvbGRTaG9ydENpcmN1aXRB
U1QgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgVW5mb2xkU2hv
cnRDaXJjdWl0QVNUKCkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQg
dmlzaXQsIFRJbnRlcm1CaW5hcnkgKik7CisKKyAgICB2b2lkIHVwZGF0ZVRyZWUoKTsKKworICBw
cml2YXRlOgorICAgIHN0cnVjdCBOb2RlVXBkYXRlRW50cnkKKyAgICB7CisgICAgICAgIE5vZGVV
cGRhdGVFbnRyeShUSW50ZXJtTm9kZSAqX3BhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IFRJbnRlcm1Ob2RlICpfb3JpZ2luYWwsCisgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJt
Tm9kZSAqX3JlcGxhY2VtZW50KQorICAgICAgICAgICAgOiBwYXJlbnQoX3BhcmVudCksCisgICAg
ICAgICAgICAgIG9yaWdpbmFsKF9vcmlnaW5hbCksCisgICAgICAgICAgICAgIHJlcGxhY2VtZW50
KF9yZXBsYWNlbWVudCkge30KKworICAgICAgICBUSW50ZXJtTm9kZSAqcGFyZW50OworICAgICAg
ICBUSW50ZXJtTm9kZSAqb3JpZ2luYWw7CisgICAgICAgIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVu
dDsKKyAgICB9OworCisgICAgLy8gRHVyaW5nIHRyYXZlcnNpbmcsIHNhdmUgYWxsIHRoZSByZXBs
YWNlbWVudHMgdGhhdCBuZWVkIHRvIGhhcHBlbjsKKyAgICAvLyB0aGVuIHJlcGxhY2UgdGhlbSBi
eSBjYWxsaW5nIHVwZGF0ZU5vZGVzKCkuCisgICAgc3RkOjp2ZWN0b3I8Tm9kZVVwZGF0ZUVudHJ5
PiByZXBsYWNlbWVudHM7CisKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVW5mb2xkU2hv
cnRDaXJjdWl0QVNUKTsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVU5GT0xEX1NIT1JUX0NJ
UkNVSVRfQVNUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1VuaWZvcm0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkyMmUxM2YwNzEy
MDgxZTU1NzRjODBkNDlkNWY3NGRlMDUzN2E5ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmNwcApAQCAt
MCwwICsxLDIxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvVW5pZm9ybS5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworVW5pZm9ybTo6VW5pZm9ybShHTGVu
dW0gdHlwZSwgR0xlbnVtIHByZWNpc2lvbiwgY29uc3QgY2hhciAqbmFtZSwgaW50IGFycmF5U2l6
ZSwgaW50IHJlZ2lzdGVySW5kZXgpCit7CisgICAgdGhpcy0+dHlwZSA9IHR5cGU7CisgICAgdGhp
cy0+cHJlY2lzaW9uID0gcHJlY2lzaW9uOworICAgIHRoaXMtPm5hbWUgPSBuYW1lOworICAgIHRo
aXMtPmFycmF5U2l6ZSA9IGFycmF5U2l6ZTsKKyAgICB0aGlzLT5yZWdpc3RlckluZGV4ID0gcmVn
aXN0ZXJJbmRleDsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5pZm9ybS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5pZm9ybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRjNTNmZmE3
ZDJmYzU4NGU0MDBjMmNmMDRkMDEyZTZhZjFlMjUyZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmgKQEAg
LTAsMCArMSwzNSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVU5JRk9STV9I
XworI2RlZmluZSBDT01QSUxFUl9VTklGT1JNX0hfCisKKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5j
bHVkZSA8dmVjdG9yPgorCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMi9nbDIu
aD4KKworbmFtZXNwYWNlIHNoCit7CisKK3N0cnVjdCBVbmlmb3JtCit7CisgICAgVW5pZm9ybShH
TGVudW0gdHlwZSwgR0xlbnVtIHByZWNpc2lvbiwgY29uc3QgY2hhciAqbmFtZSwgaW50IGFycmF5
U2l6ZSwgaW50IHJlZ2lzdGVySW5kZXgpOworCisgICAgR0xlbnVtIHR5cGU7CisgICAgR0xlbnVt
IHByZWNpc2lvbjsKKyAgICBzdGQ6OnN0cmluZyBuYW1lOworICAgIHVuc2lnbmVkIGludCBhcnJh
eVNpemU7CisgICAgCisgICAgaW50IHJlZ2lzdGVySW5kZXg7Cit9OworCit0eXBlZGVmIHN0ZDo6
dmVjdG9yPFVuaWZvcm0+IEFjdGl2ZVVuaWZvcm1zOworCit9CisKKyNlbmRpZiAgIC8vIENPTVBJ
TEVSX1VOSUZPUk1fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1pdGF0aW9ucy5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uM2MyY2M0MWNkYTM2ZjgxMzcxMWZmMzY4ODRmMjViMDY2YmJjODg0OAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwCkBAIC0wLDAgKzEsNTEyIEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUxp
bWl0YXRpb25zLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCisKK25hbWVzcGFj
ZSB7Citib29sIElzTG9vcEluZGV4KGNvbnN0IFRJbnRlcm1TeW1ib2wqIHN5bWJvbCwgY29uc3Qg
VExvb3BTdGFjayYgc3RhY2spIHsKKyAgICBmb3IgKFRMb29wU3RhY2s6OmNvbnN0X2l0ZXJhdG9y
IGkgPSBzdGFjay5iZWdpbigpOyBpICE9IHN0YWNrLmVuZCgpOyArK2kpIHsKKyAgICAgICAgaWYg
KGktPmluZGV4LmlkID09IHN5bWJvbC0+Z2V0SWQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgTWFya0xvb3BGb3JVbnJvbGwo
Y29uc3QgVEludGVybVN5bWJvbCogc3ltYm9sLCBUTG9vcFN0YWNrJiBzdGFjaykgeworICAgIGZv
ciAoVExvb3BTdGFjazo6aXRlcmF0b3IgaSA9IHN0YWNrLmJlZ2luKCk7IGkgIT0gc3RhY2suZW5k
KCk7ICsraSkgeworICAgICAgICBpZiAoaS0+aW5kZXguaWQgPT0gc3ltYm9sLT5nZXRJZCgpKSB7
CisgICAgICAgICAgICBBU1NFUlQoaS0+bG9vcCAhPSBOVUxMKTsKKyAgICAgICAgICAgIGktPmxv
b3AtPnNldFVucm9sbEZsYWcodHJ1ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisgICAgVU5SRUFDSEFCTEUoKTsKK30KKworLy8gVHJhdmVyc2VzIGEgbm9kZSB0byBj
aGVjayBpZiBpdCByZXByZXNlbnRzIGEgY29uc3RhbnQgaW5kZXggZXhwcmVzc2lvbi4KKy8vIERl
ZmluaXRpb246CisvLyBjb25zdGFudC1pbmRleC1leHByZXNzaW9ucyBhcmUgYSBzdXBlcnNldCBv
ZiBjb25zdGFudC1leHByZXNzaW9ucy4KKy8vIENvbnN0YW50LWluZGV4LWV4cHJlc3Npb25zIGNh
biBpbmNsdWRlIGxvb3AgaW5kaWNlcyBhcyBkZWZpbmVkIGluCisvLyBHTFNMIEVTIDEuMCBzcGVj
LCBBcHBlbmRpeCBBLCBzZWN0aW9uIDQuCisvLyBUaGUgZm9sbG93aW5nIGFyZSBjb25zdGFudC1p
bmRleC1leHByZXNzaW9uczoKKy8vIC0gQ29uc3RhbnQgZXhwcmVzc2lvbnMKKy8vIC0gTG9vcCBp
bmRpY2VzIGFzIGRlZmluZWQgaW4gc2VjdGlvbiA0CisvLyAtIEV4cHJlc3Npb25zIGNvbXBvc2Vk
IG9mIGJvdGggb2YgdGhlIGFib3ZlCitjbGFzcyBWYWxpZGF0ZUNvbnN0SW5kZXhFeHByIDogcHVi
bGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgorICAgIFZhbGlkYXRlQ29uc3RJbmRleEV4
cHIoY29uc3QgVExvb3BTdGFjayYgc3RhY2spCisgICAgICAgIDogbVZhbGlkKHRydWUpLCBtTG9v
cFN0YWNrKHN0YWNrKSB7fQorCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBwYXJzZWQgbm9k
ZSByZXByZXNlbnRzIGEgY29uc3RhbnQgaW5kZXggZXhwcmVzc2lvbi4KKyAgICBib29sIGlzVmFs
aWQoKSBjb25zdCB7IHJldHVybiBtVmFsaWQ7IH0KKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5
bWJvbChUSW50ZXJtU3ltYm9sKiBzeW1ib2wpIHsKKyAgICAgICAgLy8gT25seSBjb25zdGFudHMg
YW5kIGxvb3AgaW5kaWNlcyBhcmUgYWxsb3dlZCBpbiBhCisgICAgICAgIC8vIGNvbnN0YW50IGlu
ZGV4IGV4cHJlc3Npb24uCisgICAgICAgIGlmIChtVmFsaWQpIHsKKyAgICAgICAgICAgIG1WYWxp
ZCA9IChzeW1ib2wtPmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB8fAorICAgICAgICAgICAg
ICAgICAgICAgSXNMb29wSW5kZXgoc3ltYm9sLCBtTG9vcFN0YWNrKTsKKyAgICAgICAgfQorICAg
IH0KKworcHJpdmF0ZToKKyAgICBib29sIG1WYWxpZDsKKyAgICBjb25zdCBUTG9vcFN0YWNrJiBt
TG9vcFN0YWNrOworfTsKKworLy8gVHJhdmVyc2VzIGEgbm9kZSB0byBjaGVjayBpZiBpdCB1c2Vz
IGEgbG9vcCBpbmRleC4KKy8vIElmIGFuIGludCBsb29wIGluZGV4IGlzIHVzZWQgaW4gaXRzIGJv
ZHkgYXMgYSBzYW1wbGVyIGFycmF5IGluZGV4LAorLy8gbWFyayB0aGUgbG9vcCBmb3IgdW5yb2xs
LgorY2xhc3MgVmFsaWRhdGVMb29wSW5kZXhFeHByIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIg
eworcHVibGljOgorICAgIFZhbGlkYXRlTG9vcEluZGV4RXhwcihUTG9vcFN0YWNrJiBzdGFjaykK
KyAgICAgICAgOiBtVXNlc0Zsb2F0TG9vcEluZGV4KGZhbHNlKSwKKyAgICAgICAgICBtVXNlc0lu
dExvb3BJbmRleChmYWxzZSksCisgICAgICAgICAgbUxvb3BTdGFjayhzdGFjaykge30KKworICAg
IGJvb2wgdXNlc0Zsb2F0TG9vcEluZGV4KCkgY29uc3QgeyByZXR1cm4gbVVzZXNGbG9hdExvb3BJ
bmRleDsgfQorICAgIGJvb2wgdXNlc0ludExvb3BJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1Vc2Vz
SW50TG9vcEluZGV4OyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5
bWJvbCogc3ltYm9sKSB7CisgICAgICAgIGlmIChJc0xvb3BJbmRleChzeW1ib2wsIG1Mb29wU3Rh
Y2spKSB7CisgICAgICAgICAgICBzd2l0Y2ggKHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCkpIHsKKyAg
ICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAgICBtVXNlc0Zsb2F0TG9v
cEluZGV4ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBFYnRJbnQ6CisgICAgICAgICAgICAgICAgbVVzZXNJbnRMb29wSW5kZXggPSB0cnVlOworICAg
ICAgICAgICAgICAgIE1hcmtMb29wRm9yVW5yb2xsKHN5bWJvbCwgbUxvb3BTdGFjayk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworcHJp
dmF0ZToKKyAgICBib29sIG1Vc2VzRmxvYXRMb29wSW5kZXg7CisgICAgYm9vbCBtVXNlc0ludExv
b3BJbmRleDsKKyAgICBUTG9vcFN0YWNrJiBtTG9vcFN0YWNrOworfTsKK30gIC8vIG5hbWVzcGFj
ZQorCitWYWxpZGF0ZUxpbWl0YXRpb25zOjpWYWxpZGF0ZUxpbWl0YXRpb25zKFNoU2hhZGVyVHlw
ZSBzaGFkZXJUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
SW5mb1NpbmtCYXNlJiBzaW5rKQorICAgIDogbVNoYWRlclR5cGUoc2hhZGVyVHlwZSksCisgICAg
ICBtU2luayhzaW5rKSwKKyAgICAgIG1OdW1FcnJvcnMoMCkKK3sKK30KKworYm9vbCBWYWxpZGF0
ZUxpbWl0YXRpb25zOjp2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSogbm9kZSkKK3sK
KyAgICAvLyBDaGVjayBpZiBsb29wIGluZGV4IGlzIG1vZGlmaWVkIGluIHRoZSBsb29wIGJvZHku
CisgICAgdmFsaWRhdGVPcGVyYXRpb24obm9kZSwgbm9kZS0+Z2V0TGVmdCgpKTsKKworICAgIC8v
IENoZWNrIGluZGV4aW5nLgorICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkgeworICAgICAgY2Fz
ZSBFT3BJbmRleERpcmVjdDoKKyAgICAgICAgdmFsaWRhdGVJbmRleGluZyhub2RlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6CisjaWYgZGVmaW5lZChfX0FQ
UExFX18pCisgICAgICAgIC8vIExvb3AgdW5yb2xsaW5nIGlzIGEgd29yay1hcm91bmQgZm9yIGEg
TWFjIENnIGNvbXBpbGVyIGJ1ZyB3aGVyZSBpdAorICAgICAgICAvLyBjcmFzaGVzIHdoZW4gYSBz
YW1wbGVyIGFycmF5J3MgaW5kZXggaXMgYWxzbyB0aGUgbG9vcCBpbmRleC4KKyAgICAgICAgLy8g
T25jZSBBcHBsZSBmaXhlcyB0aGlzIGJ1Zywgd2Ugc2hvdWxkIHJlbW92ZSB0aGUgY29kZSBpbiB0
aGlzIENMLgorICAgICAgICAvLyBTZWUgaHR0cDovL2NvZGVyZXZpZXcuYXBwc3BvdC5jb20vNDMz
MTA0OC8uCisgICAgICAgIGlmICgobm9kZS0+Z2V0TGVmdCgpICE9IE5VTEwpICYmIChub2RlLT5n
ZXRSaWdodCgpICE9IE5VTEwpICYmCisgICAgICAgICAgICAobm9kZS0+Z2V0TGVmdCgpLT5nZXRB
c1N5bWJvbE5vZGUoKSkpIHsKKyAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IG5v
ZGUtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgICAgICAgICBpZiAoSXNTYW1w
bGVyKHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCkpICYmIHN5bWJvbC0+aXNBcnJheSgpKSB7CisgICAg
ICAgICAgICAgICAgVmFsaWRhdGVMb29wSW5kZXhFeHByIHZhbGlkYXRlKG1Mb29wU3RhY2spOwor
ICAgICAgICAgICAgICAgIG5vZGUtPmdldFJpZ2h0KCktPnRyYXZlcnNlKCZ2YWxpZGF0ZSk7Cisg
ICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlLnVzZXNGbG9hdExvb3BJbmRleCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgInNhbXBsZXIgYXJyYXkgaW5kZXggaXMgZmxvYXQgbG9vcCBpbmRleCIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICJmb3IiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICB2YWxpZGF0ZUluZGV4aW5nKG5vZGUp
OworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdFVuYXJ5KFZpc2l0
LCBUSW50ZXJtVW5hcnkqIG5vZGUpCit7CisgICAgLy8gQ2hlY2sgaWYgbG9vcCBpbmRleCBpcyBt
b2RpZmllZCBpbiB0aGUgbG9vcCBib2R5LgorICAgIHZhbGlkYXRlT3BlcmF0aW9uKG5vZGUsIG5v
ZGUtPmdldE9wZXJhbmQoKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBWYWxpZGF0
ZUxpbWl0YXRpb25zOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9k
ZSkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpIHsKKyAgICAgIGNhc2UgRU9wRnVuY3Rp
b25DYWxsOgorICAgICAgICB2YWxpZGF0ZUZ1bmN0aW9uQ2FsbChub2RlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRMb29wKFZpc2l0LCBUSW50
ZXJtTG9vcCogbm9kZSkKK3sKKyAgICBpZiAoIXZhbGlkYXRlTG9vcFR5cGUobm9kZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIFRMb29wSW5mbyBpbmZvOworICAgIG1lbXNldCgmaW5m
bywgMCwgc2l6ZW9mKFRMb29wSW5mbykpOworICAgIGluZm8ubG9vcCA9IG5vZGU7CisgICAgaWYg
KCF2YWxpZGF0ZUZvckxvb3BIZWFkZXIobm9kZSwgJmluZm8pKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBUSW50ZXJtTm9kZSogYm9keSA9IG5vZGUtPmdldEJvZHkoKTsKKyAgICBpZiAo
Ym9keSAhPSBOVUxMKSB7CisgICAgICAgIG1Mb29wU3RhY2sucHVzaF9iYWNrKGluZm8pOworICAg
ICAgICBib2R5LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgbUxvb3BTdGFjay5wb3BfYmFjaygp
OworICAgIH0KKworICAgIC8vIFRoZSBsb29wIGlzIGZ1bGx5IHByb2Nlc3NlZCAtIG5vIG5lZWQg
dG8gdmlzaXQgY2hpbGRyZW4uCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFZhbGlkYXRl
TGltaXRhdGlvbnM6OmVycm9yKFRTb3VyY2VMb2MgbG9jLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuKQoreworICAg
IG1TaW5rLnByZWZpeChFUHJlZml4RXJyb3IpOworICAgIG1TaW5rLmxvY2F0aW9uKGxvYyk7Cisg
ICAgbVNpbmsgPDwgIiciIDw8IHRva2VuIDw8ICInIDogIiA8PCByZWFzb24gPDwgIlxuIjsKKyAg
ICArK21OdW1FcnJvcnM7Cit9CisKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6d2l0aGluTG9v
cEJvZHkoKSBjb25zdAoreworICAgIHJldHVybiAhbUxvb3BTdGFjay5lbXB0eSgpOworfQorCiti
b29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OmlzTG9vcEluZGV4KGNvbnN0IFRJbnRlcm1TeW1ib2wq
IHN5bWJvbCkgY29uc3QKK3sKKyAgICByZXR1cm4gSXNMb29wSW5kZXgoc3ltYm9sLCBtTG9vcFN0
YWNrKTsKK30KKworYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUxvb3BUeXBlKFRJ
bnRlcm1Mb29wKiBub2RlKSB7CisgICAgVExvb3BUeXBlIHR5cGUgPSBub2RlLT5nZXRUeXBlKCk7
CisgICAgaWYgKHR5cGUgPT0gRUxvb3BGb3IpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
Ly8gUmVqZWN0IHdoaWxlIGFuZCBkby13aGlsZSBsb29wcy4KKyAgICBlcnJvcihub2RlLT5nZXRM
aW5lKCksCisgICAgICAgICAgIlRoaXMgdHlwZSBvZiBsb29wIGlzIG5vdCBhbGxvd2VkIiwKKyAg
ICAgICAgICB0eXBlID09IEVMb29wV2hpbGUgPyAid2hpbGUiIDogImRvIik7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcEhl
YWRlcihUSW50ZXJtTG9vcCogbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRMb29wSW5mbyogaW5mbykKK3sKKyAgICBBU1NFUlQobm9kZS0+Z2V0
VHlwZSgpID09IEVMb29wRm9yKTsKKworICAgIC8vCisgICAgLy8gVGhlIGZvciBzdGF0ZW1lbnQg
aGFzIHRoZSBmb3JtOgorICAgIC8vICAgIGZvciAoIGluaXQtZGVjbGFyYXRpb24gOyBjb25kaXRp
b24gOyBleHByZXNzaW9uICkgc3RhdGVtZW50CisgICAgLy8KKyAgICBpZiAoIXZhbGlkYXRlRm9y
TG9vcEluaXQobm9kZSwgaW5mbykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXZh
bGlkYXRlRm9yTG9vcENvbmQobm9kZSwgaW5mbykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIXZhbGlkYXRlRm9yTG9vcEV4cHIobm9kZSwgaW5mbykpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6
OnZhbGlkYXRlRm9yTG9vcEluaXQoVEludGVybUxvb3AqIG5vZGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVExvb3BJbmZvKiBpbmZvKQoreworICAgIFRJ
bnRlcm1Ob2RlKiBpbml0ID0gbm9kZS0+Z2V0SW5pdCgpOworICAgIGlmIChpbml0ID09IE5VTEwp
IHsKKyAgICAgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiTWlzc2luZyBpbml0IGRlY2xhcmF0
aW9uIiwgImZvciIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8KKyAg
ICAvLyBpbml0LWRlY2xhcmF0aW9uIGhhcyB0aGUgZm9ybToKKyAgICAvLyAgICAgdHlwZS1zcGVj
aWZpZXIgaWRlbnRpZmllciA9IGNvbnN0YW50LWV4cHJlc3Npb24KKyAgICAvLworICAgIFRJbnRl
cm1BZ2dyZWdhdGUqIGRlY2wgPSBpbml0LT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAgIGlmICgoZGVj
bCA9PSBOVUxMKSB8fCAoZGVjbC0+Z2V0T3AoKSAhPSBFT3BEZWNsYXJhdGlvbikpIHsKKyAgICAg
ICAgZXJyb3IoaW5pdC0+Z2V0TGluZSgpLCAiSW52YWxpZCBpbml0IGRlY2xhcmF0aW9uIiwgImZv
ciIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8vIFRvIGtlZXAgdGhpbmdz
IHNpbXBsZSBkbyBub3QgYWxsb3cgZGVjbGFyYXRpb24gbGlzdC4KKyAgICBUSW50ZXJtU2VxdWVu
Y2UmIGRlY2xTZXEgPSBkZWNsLT5nZXRTZXF1ZW5jZSgpOworICAgIGlmIChkZWNsU2VxLnNpemUo
KSAhPSAxKSB7CisgICAgICAgIGVycm9yKGRlY2wtPmdldExpbmUoKSwgIkludmFsaWQgaW5pdCBk
ZWNsYXJhdGlvbiIsICJmb3IiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBU
SW50ZXJtQmluYXJ5KiBkZWNsSW5pdCA9IGRlY2xTZXFbMF0tPmdldEFzQmluYXJ5Tm9kZSgpOwor
ICAgIGlmICgoZGVjbEluaXQgPT0gTlVMTCkgfHwgKGRlY2xJbml0LT5nZXRPcCgpICE9IEVPcElu
aXRpYWxpemUpKSB7CisgICAgICAgIGVycm9yKGRlY2wtPmdldExpbmUoKSwgIkludmFsaWQgaW5p
dCBkZWNsYXJhdGlvbiIsICJmb3IiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBkZWNsSW5pdC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJv
bE5vZGUoKTsKKyAgICBpZiAoc3ltYm9sID09IE5VTEwpIHsKKyAgICAgICAgZXJyb3IoZGVjbElu
aXQtPmdldExpbmUoKSwgIkludmFsaWQgaW5pdCBkZWNsYXJhdGlvbiIsICJmb3IiKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBUaGUgbG9vcCBpbmRleCBoYXMgdHlwZSBp
bnQgb3IgZmxvYXQuCisgICAgVEJhc2ljVHlwZSB0eXBlID0gc3ltYm9sLT5nZXRCYXNpY1R5cGUo
KTsKKyAgICBpZiAoKHR5cGUgIT0gRWJ0SW50KSAmJiAodHlwZSAhPSBFYnRGbG9hdCkpIHsKKyAg
ICAgICAgZXJyb3Ioc3ltYm9sLT5nZXRMaW5lKCksCisgICAgICAgICAgICAgICJJbnZhbGlkIHR5
cGUgZm9yIGxvb3AgaW5kZXgiLCBnZXRCYXNpY1N0cmluZyh0eXBlKSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgLy8gVGhlIGxvb3AgaW5kZXggaXMgaW5pdGlhbGl6ZWQgd2l0
aCBjb25zdGFudCBleHByZXNzaW9uLgorICAgIGlmICghaXNDb25zdEV4cHIoZGVjbEluaXQtPmdl
dFJpZ2h0KCkpKSB7CisgICAgICAgIGVycm9yKGRlY2xJbml0LT5nZXRMaW5lKCksCisgICAgICAg
ICAgICAgICJMb29wIGluZGV4IGNhbm5vdCBiZSBpbml0aWFsaXplZCB3aXRoIG5vbi1jb25zdGFu
dCBleHByZXNzaW9uIiwKKyAgICAgICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigp
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGluZm8tPmluZGV4LmlkID0g
c3ltYm9sLT5nZXRJZCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFZhbGlkYXRlTGlt
aXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcENvbmQoVEludGVybUxvb3AqIG5vZGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVExvb3BJbmZvKiBpbmZvKQor
eworICAgIFRJbnRlcm1Ob2RlKiBjb25kID0gbm9kZS0+Z2V0Q29uZGl0aW9uKCk7CisgICAgaWYg
KGNvbmQgPT0gTlVMTCkgeworICAgICAgICBlcnJvcihub2RlLT5nZXRMaW5lKCksICJNaXNzaW5n
IGNvbmRpdGlvbiIsICJmb3IiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAv
LworICAgIC8vIGNvbmRpdGlvbiBoYXMgdGhlIGZvcm06CisgICAgLy8gICAgIGxvb3BfaW5kZXgg
cmVsYXRpb25hbF9vcGVyYXRvciBjb25zdGFudF9leHByZXNzaW9uCisgICAgLy8KKyAgICBUSW50
ZXJtQmluYXJ5KiBiaW5PcCA9IGNvbmQtPmdldEFzQmluYXJ5Tm9kZSgpOworICAgIGlmIChiaW5P
cCA9PSBOVUxMKSB7CisgICAgICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgIkludmFsaWQgY29u
ZGl0aW9uIiwgImZvciIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8vIExv
b3AgaW5kZXggc2hvdWxkIGJlIHRvIHRoZSBsZWZ0IG9mIHJlbGF0aW9uYWwgb3BlcmF0b3IuCisg
ICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gYmluT3AtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xO
b2RlKCk7CisgICAgaWYgKHN5bWJvbCA9PSBOVUxMKSB7CisgICAgICAgIGVycm9yKGJpbk9wLT5n
ZXRMaW5lKCksICJJbnZhbGlkIGNvbmRpdGlvbiIsICJmb3IiKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICBpZiAoc3ltYm9sLT5nZXRJZCgpICE9IGluZm8tPmluZGV4LmlkKSB7
CisgICAgICAgIGVycm9yKHN5bWJvbC0+Z2V0TGluZSgpLAorICAgICAgICAgICAgICAiRXhwZWN0
ZWQgbG9vcCBpbmRleCIsIHN5bWJvbC0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgLy8gUmVsYXRpb25hbCBvcGVyYXRvciBpcyBvbmUgb2Y6
ID4gPj0gPCA8PSA9PSBvciAhPS4KKyAgICBzd2l0Y2ggKGJpbk9wLT5nZXRPcCgpKSB7CisgICAg
ICBjYXNlIEVPcEVxdWFsOgorICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKKyAgICAgIGNhc2UgRU9w
TGVzc1RoYW46CisgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgorICAgICAgY2FzZSBFT3BMZXNz
VGhhbkVxdWFsOgorICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgorICAgICAgICBicmVh
azsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGVycm9yKGJpbk9wLT5nZXRMaW5lKCksCisgICAg
ICAgICAgICAgICJJbnZhbGlkIHJlbGF0aW9uYWwgb3BlcmF0b3IiLAorICAgICAgICAgICAgICBn
ZXRPcGVyYXRvclN0cmluZyhiaW5PcC0+Z2V0T3AoKSkpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgLy8gTG9vcCBpbmRleCBtdXN0IGJlIGNvbXBhcmVkIHdpdGggYSBjb25zdGFudC4KKyAg
ICBpZiAoIWlzQ29uc3RFeHByKGJpbk9wLT5nZXRSaWdodCgpKSkgeworICAgICAgICBlcnJvcihi
aW5PcC0+Z2V0TGluZSgpLAorICAgICAgICAgICAgICAiTG9vcCBpbmRleCBjYW5ub3QgYmUgY29t
cGFyZWQgd2l0aCBub24tY29uc3RhbnQgZXhwcmVzc2lvbiIsCisgICAgICAgICAgICAgIHN5bWJv
bC0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0
ZUZvckxvb3BFeHByKFRJbnRlcm1Mb29wKiBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRMb29wSW5mbyogaW5mbykKK3sKKyAgICBUSW50ZXJtTm9k
ZSogZXhwciA9IG5vZGUtPmdldEV4cHJlc3Npb24oKTsKKyAgICBpZiAoZXhwciA9PSBOVUxMKSB7
CisgICAgICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgIk1pc3NpbmcgZXhwcmVzc2lvbiIsICJm
b3IiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIGZvciBleHByZXNz
aW9uIGhhcyBvbmUgb2YgdGhlIGZvbGxvd2luZyBmb3JtczoKKyAgICAvLyAgICAgbG9vcF9pbmRl
eCsrCisgICAgLy8gICAgIGxvb3BfaW5kZXgtLQorICAgIC8vICAgICBsb29wX2luZGV4ICs9IGNv
bnN0YW50X2V4cHJlc3Npb24KKyAgICAvLyAgICAgbG9vcF9pbmRleCAtPSBjb25zdGFudF9leHBy
ZXNzaW9uCisgICAgLy8gICAgICsrbG9vcF9pbmRleAorICAgIC8vICAgICAtLWxvb3BfaW5kZXgK
KyAgICAvLyBUaGUgbGFzdCB0d28gZm9ybXMgYXJlIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHNwZWMs
IGJ1dCBJIGFtIGFzc3VtaW5nCisgICAgLy8gaXRzIGFuIG92ZXJzaWdodC4KKyAgICBUSW50ZXJt
VW5hcnkqIHVuT3AgPSBleHByLT5nZXRBc1VuYXJ5Tm9kZSgpOworICAgIFRJbnRlcm1CaW5hcnkq
IGJpbk9wID0gdW5PcCA/IE5VTEwgOiBleHByLT5nZXRBc0JpbmFyeU5vZGUoKTsKKworICAgIFRP
cGVyYXRvciBvcCA9IEVPcE51bGw7CisgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gTlVMTDsK
KyAgICBpZiAodW5PcCAhPSBOVUxMKSB7CisgICAgICAgIG9wID0gdW5PcC0+Z2V0T3AoKTsKKyAg
ICAgICAgc3ltYm9sID0gdW5PcC0+Z2V0T3BlcmFuZCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAg
ICB9IGVsc2UgaWYgKGJpbk9wICE9IE5VTEwpIHsKKyAgICAgICAgb3AgPSBiaW5PcC0+Z2V0T3Ao
KTsKKyAgICAgICAgc3ltYm9sID0gYmluT3AtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7
CisgICAgfQorCisgICAgLy8gVGhlIG9wZXJhbmQgbXVzdCBiZSBsb29wIGluZGV4LgorICAgIGlm
IChzeW1ib2wgPT0gTlVMTCkgeworICAgICAgICBlcnJvcihleHByLT5nZXRMaW5lKCksICJJbnZh
bGlkIGV4cHJlc3Npb24iLCAiZm9yIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgaWYgKHN5bWJvbC0+Z2V0SWQoKSAhPSBpbmZvLT5pbmRleC5pZCkgeworICAgICAgICBlcnJv
cihzeW1ib2wtPmdldExpbmUoKSwKKyAgICAgICAgICAgICAgIkV4cGVjdGVkIGxvb3AgaW5kZXgi
LCBzeW1ib2wtPmdldFN5bWJvbCgpLmNfc3RyKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgLy8gVGhlIG9wZXJhdG9yIGlzIG9uZSBvZjogKysgLS0gKz0gLT0uCisgICAg
c3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6CisgICAgICAgIGNh
c2UgRU9wUG9zdERlY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6CisgICAg
ICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OgorICAgICAgICAgICAgQVNTRVJUKCh1bk9wICE9IE5V
TEwpICYmIChiaW5PcCA9PSBOVUxMKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BBZGRBc3NpZ246CisgICAgICAgIGNhc2UgRU9wU3ViQXNzaWduOgorICAgICAgICAgICAg
QVNTRVJUKCh1bk9wID09IE5VTEwpICYmIChiaW5PcCAhPSBOVUxMKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGVycm9yKGV4cHItPmdldExpbmUo
KSwgIkludmFsaWQgb3BlcmF0b3IiLCBnZXRPcGVyYXRvclN0cmluZyhvcCkpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIExvb3AgaW5kZXggbXVzdCBiZSBpbmNy
ZW1lbnRlZC9kZWNyZW1lbnRlZCB3aXRoIGEgY29uc3RhbnQuCisgICAgaWYgKGJpbk9wICE9IE5V
TEwpIHsKKyAgICAgICAgaWYgKCFpc0NvbnN0RXhwcihiaW5PcC0+Z2V0UmlnaHQoKSkpIHsKKyAg
ICAgICAgICAgIGVycm9yKGJpbk9wLT5nZXRMaW5lKCksCisgICAgICAgICAgICAgICAgICAiTG9v
cCBpbmRleCBjYW5ub3QgYmUgbW9kaWZpZWQgYnkgbm9uLWNvbnN0YW50IGV4cHJlc3Npb24iLAor
ICAgICAgICAgICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRnVuY3Rpb25DYWxsKFRJbnRl
cm1BZ2dyZWdhdGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUtPmdldE9wKCkgPT0gRU9wRnVu
Y3Rpb25DYWxsKTsKKworICAgIC8vIElmIG5vdCB3aXRoaW4gbG9vcCBib2R5LCB0aGVyZSBpcyBu
b3RoaW5nIHRvIGNoZWNrLgorICAgIGlmICghd2l0aGluTG9vcEJvZHkoKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICAvLyBMaXN0IG9mIHBhcmFtIGluZGljZXMgZm9yIHdoaWNoIGxvb3Ag
aW5kaWNlcyBhcmUgdXNlZCBhcyBhcmd1bWVudC4KKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPHNp
emVfdD4gUGFyYW1JbmRleDsKKyAgICBQYXJhbUluZGV4IHBJbmRleDsKKyAgICBUSW50ZXJtU2Vx
dWVuY2UmIHBhcmFtcyA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CisgICAgZm9yIChUSW50ZXJtU2Vx
dWVuY2U6OnNpemVfdHlwZSBpID0gMDsgaSA8IHBhcmFtcy5zaXplKCk7ICsraSkgeworICAgICAg
ICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBwYXJhbXNbaV0tPmdldEFzU3ltYm9sTm9kZSgpOwor
ICAgICAgICBpZiAoc3ltYm9sICYmIGlzTG9vcEluZGV4KHN5bWJvbCkpCisgICAgICAgICAgICBw
SW5kZXgucHVzaF9iYWNrKGkpOworICAgIH0KKyAgICAvLyBJZiBub25lIG9mIHRoZSBsb29wIGlu
ZGljZXMgYXJlIHVzZWQgYXMgYXJndW1lbnRzLAorICAgIC8vIHRoZXJlIGlzIG5vdGhpbmcgdG8g
Y2hlY2suCisgICAgaWYgKHBJbmRleC5lbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGJvb2wgdmFsaWQgPSB0cnVlOworICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUgPSBH
ZXRHbG9iYWxQYXJzZUNvbnRleHQoKS0+c3ltYm9sVGFibGU7CisgICAgVFN5bWJvbCogc3ltYm9s
ID0gc3ltYm9sVGFibGUuZmluZChub2RlLT5nZXROYW1lKCkpOworICAgIEFTU0VSVChzeW1ib2wg
JiYgc3ltYm9sLT5pc0Z1bmN0aW9uKCkpOworICAgIFRGdW5jdGlvbiogZnVuY3Rpb24gPSBzdGF0
aWNfY2FzdDxURnVuY3Rpb24qPihzeW1ib2wpOworICAgIGZvciAoUGFyYW1JbmRleDo6Y29uc3Rf
aXRlcmF0b3IgaSA9IHBJbmRleC5iZWdpbigpOworICAgICAgICAgaSAhPSBwSW5kZXguZW5kKCk7
ICsraSkgeworICAgICAgICBjb25zdCBUUGFyYW1ldGVyJiBwYXJhbSA9IGZ1bmN0aW9uLT5nZXRQ
YXJhbSgqaSk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcmFtLnR5cGUtPmdldFF1YWxp
ZmllcigpOworICAgICAgICBpZiAoKHF1YWwgPT0gRXZxT3V0KSB8fCAocXVhbCA9PSBFdnFJbk91
dCkpIHsKKyAgICAgICAgICAgIGVycm9yKHBhcmFtc1sqaV0tPmdldExpbmUoKSwKKyAgICAgICAg
ICAgICAgICAgICJMb29wIGluZGV4IGNhbm5vdCBiZSB1c2VkIGFzIGFyZ3VtZW50IHRvIGEgZnVu
Y3Rpb24gb3V0IG9yIGlub3V0IHBhcmFtZXRlciIsCisgICAgICAgICAgICAgICAgICBwYXJhbXNb
KmldLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7CisgICAgICAgICAg
ICB2YWxpZCA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHZhbGlkOwor
fQorCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlT3BlcmF0aW9uKFRJbnRlcm1P
cGVyYXRvciogbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVEludGVybU5vZGUqIG9wZXJhbmQpIHsKKyAgICAvLyBDaGVjayBpZiBsb29wIGluZGV4IGlz
IG1vZGlmaWVkIGluIHRoZSBsb29wIGJvZHkuCisgICAgaWYgKCF3aXRoaW5Mb29wQm9keSgpIHx8
ICFub2RlLT5pc0Fzc2lnbm1lbnQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjb25z
dCBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBvcGVyYW5kLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAg
ICBpZiAoc3ltYm9sICYmIGlzTG9vcEluZGV4KHN5bWJvbCkpIHsKKyAgICAgICAgZXJyb3Iobm9k
ZS0+Z2V0TGluZSgpLAorICAgICAgICAgICAgICAiTG9vcCBpbmRleCBjYW5ub3QgYmUgc3RhdGlj
YWxseSBhc3NpZ25lZCB0byB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIGxvb3AiLAorICAgICAgICAg
ICAgICBzeW1ib2wtPmdldFN5bWJvbCgpLmNfc3RyKCkpOworICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjppc0NvbnN0RXhwcihUSW50ZXJtTm9k
ZSogbm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZSAhPSBOVUxMKTsKKyAgICByZXR1cm4gbm9kZS0+
Z2V0QXNDb25zdGFudFVuaW9uKCkgIT0gTlVMTDsKK30KKworYm9vbCBWYWxpZGF0ZUxpbWl0YXRp
b25zOjppc0NvbnN0SW5kZXhFeHByKFRJbnRlcm1Ob2RlKiBub2RlKQoreworICAgIEFTU0VSVChu
b2RlICE9IE5VTEwpOworCisgICAgVmFsaWRhdGVDb25zdEluZGV4RXhwciB2YWxpZGF0ZShtTG9v
cFN0YWNrKTsKKyAgICBub2RlLT50cmF2ZXJzZSgmdmFsaWRhdGUpOworICAgIHJldHVybiB2YWxp
ZGF0ZS5pc1ZhbGlkKCk7Cit9CisKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVJ
bmRleGluZyhUSW50ZXJtQmluYXJ5KiBub2RlKQoreworICAgIEFTU0VSVCgobm9kZS0+Z2V0T3Ao
KSA9PSBFT3BJbmRleERpcmVjdCkgfHwKKyAgICAgICAgICAgKG5vZGUtPmdldE9wKCkgPT0gRU9w
SW5kZXhJbmRpcmVjdCkpOworCisgICAgYm9vbCB2YWxpZCA9IHRydWU7CisgICAgVEludGVybVR5
cGVkKiBpbmRleCA9IG5vZGUtPmdldFJpZ2h0KCk7CisgICAgLy8gVGhlIGluZGV4IGV4cHJlc3Np
b24gbXVzdCBoYXZlIGludGVncmFsIHR5cGUuCisgICAgaWYgKCFpbmRleC0+aXNTY2FsYXIoKSB8
fCAoaW5kZXgtPmdldEJhc2ljVHlwZSgpICE9IEVidEludCkpIHsKKyAgICAgICAgZXJyb3IoaW5k
ZXgtPmdldExpbmUoKSwKKyAgICAgICAgICAgICAgIkluZGV4IGV4cHJlc3Npb24gbXVzdCBoYXZl
IGludGVncmFsIHR5cGUiLAorICAgICAgICAgICAgICBpbmRleC0+Z2V0Q29tcGxldGVTdHJpbmco
KS5jX3N0cigpKTsKKyAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICB9CisgICAgLy8gVGhlIGlu
ZGV4IGV4cGVzc2lvbiBtdXN0IGJlIGEgY29uc3RhbnQtaW5kZXgtZXhwcmVzc2lvbiB1bmxlc3MK
KyAgICAvLyB0aGUgb3BlcmFuZCBpcyBhIHVuaWZvcm0gaW4gYSB2ZXJ0ZXggc2hhZGVyLgorICAg
IFRJbnRlcm1UeXBlZCogb3BlcmFuZCA9IG5vZGUtPmdldExlZnQoKTsKKyAgICBib29sIHNraXAg
PSAobVNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUikgJiYKKyAgICAgICAgICAgICAgICAo
b3BlcmFuZC0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxVW5pZm9ybSk7CisgICAgaWYgKCFza2lwICYm
ICFpc0NvbnN0SW5kZXhFeHByKGluZGV4KSkgeworICAgICAgICBlcnJvcihpbmRleC0+Z2V0TGlu
ZSgpLCAiSW5kZXggZXhwcmVzc2lvbiBtdXN0IGJlIGNvbnN0YW50IiwgIltdIik7CisgICAgICAg
IHZhbGlkID0gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB2YWxpZDsKK30KKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRh
dGVMaW1pdGF0aW9ucy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVmFsaWRhdGVMaW1pdGF0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg4MzlkZDhiOGFmMzY1
NmQxMzMyNDFkMDE2MTc4ODM3OTgxODExZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUxpbWl0YXRpb25z
LmgKQEAgLTAsMCArMSw1OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJHTFNMQU5HL1No
YWRlckxhbmcuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5o
IgorCitjbGFzcyBUSW5mb1NpbmtCYXNlOworCitzdHJ1Y3QgVExvb3BJbmZvIHsKKyAgICBzdHJ1
Y3QgVEluZGV4IHsKKyAgICAgICAgaW50IGlkOyAgLy8gc3ltYm9sIGlkLgorICAgIH0gaW5kZXg7
CisgICAgVEludGVybUxvb3AqIGxvb3A7Cit9OwordHlwZWRlZiBUVmVjdG9yPFRMb29wSW5mbz4g
VExvb3BTdGFjazsKKworLy8gVHJhdmVyc2VzIGludGVybWVkaWF0ZSB0cmVlIHRvIGVuc3VyZSB0
aGF0IHRoZSBzaGFkZXIgZG9lcyBub3QgZXhjZWVkIHRoZQorLy8gbWluaW11bSBmdW5jdGlvbmFs
aXR5IG1hbmRhdGVkIGluIEdMU0wgMS4wIHNwZWMsIEFwcGVuZGl4IEEuCitjbGFzcyBWYWxpZGF0
ZUxpbWl0YXRpb25zIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgorICAgIFZh
bGlkYXRlTGltaXRhdGlvbnMoU2hTaGFkZXJUeXBlIHNoYWRlclR5cGUsIFRJbmZvU2lua0Jhc2Um
IHNpbmspOworCisgICAgaW50IG51bUVycm9ycygpIGNvbnN0IHsgcmV0dXJuIG1OdW1FcnJvcnM7
IH0KKworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSop
OworICAgIHZpcnR1YWwgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkqKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsK
KyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCopOworCitwcml2
YXRlOgorICAgIHZvaWQgZXJyb3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwg
Y29uc3QgY2hhciogdG9rZW4pOworCisgICAgYm9vbCB3aXRoaW5Mb29wQm9keSgpIGNvbnN0Owor
ICAgIGJvb2wgaXNMb29wSW5kZXgoY29uc3QgVEludGVybVN5bWJvbCogc3ltYm9sKSBjb25zdDsK
KyAgICBib29sIHZhbGlkYXRlTG9vcFR5cGUoVEludGVybUxvb3AqIG5vZGUpOworICAgIGJvb2wg
dmFsaWRhdGVGb3JMb29wSGVhZGVyKFRJbnRlcm1Mb29wKiBub2RlLCBUTG9vcEluZm8qIGluZm8p
OworICAgIGJvb2wgdmFsaWRhdGVGb3JMb29wSW5pdChUSW50ZXJtTG9vcCogbm9kZSwgVExvb3BJ
bmZvKiBpbmZvKTsKKyAgICBib29sIHZhbGlkYXRlRm9yTG9vcENvbmQoVEludGVybUxvb3AqIG5v
ZGUsIFRMb29wSW5mbyogaW5mbyk7CisgICAgYm9vbCB2YWxpZGF0ZUZvckxvb3BFeHByKFRJbnRl
cm1Mb29wKiBub2RlLCBUTG9vcEluZm8qIGluZm8pOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBu
b25lIG9mIHRoZSBsb29wIGluZGljZXMgaXMgdXNlZCBhcyB0aGUgYXJndW1lbnQgdG8KKyAgICAv
LyB0aGUgZ2l2ZW4gZnVuY3Rpb24gb3V0IG9yIGlub3V0IHBhcmFtZXRlci4KKyAgICBib29sIHZh
bGlkYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpOworICAgIGJvb2wgdmFs
aWRhdGVPcGVyYXRpb24oVEludGVybU9wZXJhdG9yKiBub2RlLCBUSW50ZXJtTm9kZSogb3BlcmFu
ZCk7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgaW5kZXhpbmcgZG9lcyBub3QgZXhjZWVkIHRo
ZSBtaW5pbXVtIGZ1bmN0aW9uYWxpdHkKKyAgICAvLyBtYW5kYXRlZCBpbiBHTFNMIDEuMCBzcGVj
LCBBcHBlbmRpeCBBLCBTZWN0aW9uIDUuCisgICAgYm9vbCBpc0NvbnN0RXhwcihUSW50ZXJtTm9k
ZSogbm9kZSk7CisgICAgYm9vbCBpc0NvbnN0SW5kZXhFeHByKFRJbnRlcm1Ob2RlKiBub2RlKTsK
KyAgICBib29sIHZhbGlkYXRlSW5kZXhpbmcoVEludGVybUJpbmFyeSogbm9kZSk7CisKKyAgICBT
aFNoYWRlclR5cGUgbVNoYWRlclR5cGU7CisgICAgVEluZm9TaW5rQmFzZSYgbVNpbms7CisgICAg
aW50IG1OdW1FcnJvcnM7CisgICAgVExvb3BTdGFjayBtTG9vcFN0YWNrOworfTsKKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFy
aWFibGVJbmZvLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1ZhcmlhYmxlSW5mby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWY4ODhhZmYxMTA0NzMzZGEzOWU2
M2Q0ZjE4MWE2NmI0MThhNTVkYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5jcHAKQEAgLTAsMCAr
MSwzMTIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1ZhcmlhYmxlSW5mby5oIgorCituYW1lc3BhY2UgeworCitUU3RyaW5nIGFycmF5QnJhY2tl
dHMoaW50IGluZGV4KQoreworICAgIFRTdHJpbmdTdHJlYW0gc3RyZWFtOworICAgIHN0cmVhbSA8
PCAiWyIgPDwgaW5kZXggPDwgIl0iOworICAgIHJldHVybiBzdHJlYW0uc3RyKCk7Cit9CisKKy8v
IFJldHVybnMgdGhlIGRhdGEgdHlwZSBmb3IgYW4gYXR0cmlidXRlLCB1bmlmb3JtLCBvciB2YXJ5
aW5nLgorU2hEYXRhVHlwZSBnZXRWYXJpYWJsZURhdGFUeXBlKGNvbnN0IFRUeXBlJiB0eXBlKQor
eworICAgIHN3aXRjaCAodHlwZS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgY2FzZSBFYnRGbG9h
dDoKKyAgICAgICAgICBpZiAodHlwZS5pc01hdHJpeCgpKSB7CisgICAgICAgICAgICAgIHN3aXRj
aCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1
cm4gU0hfRkxPQVRfTUFUMjsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBTSF9GTE9B
VF9NQVQzOworICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFNIX0ZMT0FUX01BVDQ7Cisg
ICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgfQor
ICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5pc1ZlY3RvcigpKSB7CisgICAgICAgICAgICAgIHN3
aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSAyOiBy
ZXR1cm4gU0hfRkxPQVRfVkVDMjsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBTSF9G
TE9BVF9WRUMzOworICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFNIX0ZMT0FUX1ZFQzQ7
CisgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAg
fQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHJldHVybiBTSF9GTE9BVDsKKyAg
ICAgICAgICB9CisgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICBpZiAodHlwZS5pc01hdHJp
eCgpKSB7CisgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgfSBlbHNlIGlm
ICh0eXBlLmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldE5vbWlu
YWxTaXplKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBTSF9JTlRfVkVDMjsK
KyAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBTSF9JTlRfVkVDMzsKKyAgICAgICAgICAg
ICAgICBjYXNlIDQ6IHJldHVybiBTSF9JTlRfVkVDNDsKKyAgICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgcmV0dXJuIFNIX0lOVDsKKyAgICAgICAgICB9CisgICAgICBjYXNlIEVidEJv
b2w6CisgICAgICAgICAgaWYgKHR5cGUuaXNNYXRyaXgoKSkgeworICAgICAgICAgICAgICBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5pc1ZlY3RvcigpKSB7CisgICAg
ICAgICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKSB7CisgICAgICAgICAgICAg
ICAgY2FzZSAyOiByZXR1cm4gU0hfQk9PTF9WRUMyOworICAgICAgICAgICAgICAgIGNhc2UgMzog
cmV0dXJuIFNIX0JPT0xfVkVDMzsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBTSF9C
T09MX1ZFQzQ7CisgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHJldHVybiBTSF9C
T09MOworICAgICAgICAgIH0KKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiByZXR1cm4gU0hfU0FN
UExFUl8yRDsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6IHJldHVybiBTSF9TQU1QTEVSX0NV
QkU7CisgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzogcmV0dXJuIFNIX1NBTVBMRVJf
RVhURVJOQUxfT0VTOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OiByZXR1cm4gU0hfU0FN
UExFUl8yRF9SRUNUX0FSQjsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQor
ICAgIHJldHVybiBTSF9OT05FOworfQorCit2b2lkIGdldEJ1aWx0SW5WYXJpYWJsZUluZm8oY29u
c3QgVFR5cGUmIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmlu
ZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nJiBtYXBw
ZWROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9MaXN0JiBp
bmZvTGlzdCk7Cit2b2lkIGdldFVzZXJEZWZpbmVkVmFyaWFibGVJbmZvKGNvbnN0IFRUeXBlJiB0
eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nJiBuYW1l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nJiBtYXBwZWRO
YW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYg
aW5mb0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9u
NjQgaGFzaEZ1bmN0aW9uKTsKKworLy8gUmV0dXJucyBpbmZvIGZvciBhbiBhdHRyaWJ1dGUsIHVu
aWZvcm0sIG9yIHZhcnlpbmcuCit2b2lkIGdldFZhcmlhYmxlSW5mbyhjb25zdCBUVHlwZSYgdHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUsCisgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBUU3RyaW5nJiBtYXBwZWROYW1lLAorICAgICAgICAgICAgICAgICAg
ICAgVFZhcmlhYmxlSW5mb0xpc3QmIGluZm9MaXN0LAorICAgICAgICAgICAgICAgICAgICAgU2hI
YXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24pCit7CisgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBl
KCkgPT0gRWJ0U3RydWN0KSB7CisgICAgICAgIGlmICh0eXBlLmlzQXJyYXkoKSkgeworICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlLmdldEFycmF5U2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgICAgICAgICBUU3RyaW5nIGxuYW1lID0gbmFtZSArIGFycmF5QnJhY2tldHMoaSk7Cisg
ICAgICAgICAgICAgICAgVFN0cmluZyBsbWFwcGVkTmFtZSA9IG1hcHBlZE5hbWUgKyBhcnJheUJy
YWNrZXRzKGkpOworICAgICAgICAgICAgICAgIGdldFVzZXJEZWZpbmVkVmFyaWFibGVJbmZvKHR5
cGUsIGxuYW1lLCBsbWFwcGVkTmFtZSwgaW5mb0xpc3QsIGhhc2hGdW5jdGlvbik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBnZXRVc2VyRGVmaW5lZFZhcmlh
YmxlSW5mbyh0eXBlLCBuYW1lLCBtYXBwZWROYW1lLCBpbmZvTGlzdCwgaGFzaEZ1bmN0aW9uKTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGdldEJ1aWx0SW5WYXJpYWJsZUluZm8o
dHlwZSwgbmFtZSwgbWFwcGVkTmFtZSwgaW5mb0xpc3QpOworICAgIH0KK30KKwordm9pZCBnZXRC
dWlsdEluVmFyaWFibGVJbmZvKGNvbnN0IFRUeXBlJiB0eXBlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVFN0cmluZyYgbWFwcGVkTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUVmFyaWFibGVJbmZvTGlzdCYgaW5mb0xpc3QpCit7CisgICAgQVNTRVJUKHR5cGUuZ2V0QmFz
aWNUeXBlKCkgIT0gRWJ0U3RydWN0KTsKKworICAgIFRWYXJpYWJsZUluZm8gdmFySW5mbzsKKyAg
ICBpZiAodHlwZS5pc0FycmF5KCkpIHsKKyAgICAgICAgdmFySW5mby5uYW1lID0gKG5hbWUgKyAi
WzBdIikuY19zdHIoKTsKKyAgICAgICAgdmFySW5mby5tYXBwZWROYW1lID0gKG1hcHBlZE5hbWUg
KyAiWzBdIikuY19zdHIoKTsKKyAgICAgICAgdmFySW5mby5zaXplID0gdHlwZS5nZXRBcnJheVNp
emUoKTsKKyAgICAgICAgdmFySW5mby5pc0FycmF5ID0gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAg
ICAgICB2YXJJbmZvLm5hbWUgPSBuYW1lLmNfc3RyKCk7CisgICAgICAgIHZhckluZm8ubWFwcGVk
TmFtZSA9IG1hcHBlZE5hbWUuY19zdHIoKTsKKyAgICAgICAgdmFySW5mby5zaXplID0gMTsKKyAg
ICAgICAgdmFySW5mby5pc0FycmF5ID0gZmFsc2U7CisgICAgfQorICAgIHZhckluZm8ucHJlY2lz
aW9uID0gdHlwZS5nZXRQcmVjaXNpb24oKTsKKyAgICB2YXJJbmZvLnR5cGUgPSBnZXRWYXJpYWJs
ZURhdGFUeXBlKHR5cGUpOworICAgIGluZm9MaXN0LnB1c2hfYmFjayh2YXJJbmZvKTsKK30KKwor
dm9pZCBnZXRVc2VyRGVmaW5lZFZhcmlhYmxlSW5mbyhjb25zdCBUVHlwZSYgdHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyYgbmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyYgbWFwcGVkTmFtZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIGluZm9MaXN0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5j
dGlvbikKK3sKKyAgICBBU1NFUlQodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpOwor
CisgICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRzID0gdHlwZS5nZXRTdHJ1Y3QoKS0+ZmllbGRz
KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgY29uc3QgVFR5cGUmIGZpZWxkVHlwZSA9ICooZmllbGRzW2ldLT50eXBlKCkpOworICAg
ICAgICBjb25zdCBUU3RyaW5nJiBmaWVsZE5hbWUgPSBmaWVsZHNbaV0tPm5hbWUoKTsKKyAgICAg
ICAgZ2V0VmFyaWFibGVJbmZvKGZpZWxkVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5h
bWUgKyAiLiIgKyBmaWVsZE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBtYXBwZWROYW1l
ICsgIi4iICsgVEludGVybVRyYXZlcnNlcjo6aGFzaChmaWVsZE5hbWUsIGhhc2hGdW5jdGlvbiks
CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvTGlzdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGhhc2hGdW5jdGlvbik7CisgICAgfQorfQorCitUVmFyaWFibGVJbmZvKiBmaW5kVmFyaWFi
bGUoY29uc3QgVFR5cGUmIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VFN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFyaWFibGVJbmZv
TGlzdCYgaW5mb0xpc3QpCit7CisgICAgLy8gVE9ETyh6bW8pOiBvcHRpbWl6ZSB0aGlzIGZ1bmN0
aW9uLgorICAgIFRTdHJpbmcgbXlOYW1lID0gbmFtZTsKKyAgICBpZiAodHlwZS5pc0FycmF5KCkp
CisgICAgICAgIG15TmFtZSArPSAiWzBdIjsKKyAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwg
aW5mb0xpc3Quc2l6ZSgpOyArK2lpKQorICAgIHsKKyAgICAgICAgaWYgKGluZm9MaXN0W2lpXS5u
YW1lLmNfc3RyKCkgPT0gbXlOYW1lKQorICAgICAgICAgICAgcmV0dXJuICYoaW5mb0xpc3RbaWld
KTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBhbm9ueW1v
dXMKKworVFZhcmlhYmxlSW5mbzo6VFZhcmlhYmxlSW5mbygpCisgICAgOiB0eXBlKFNIX05PTkUp
LAorICAgICAgc2l6ZSgwKSwKKyAgICAgIGlzQXJyYXkoZmFsc2UpLAorICAgICAgcHJlY2lzaW9u
KEVicFVuZGVmaW5lZCksCisgICAgICBzdGF0aWNVc2UoZmFsc2UpCit7Cit9CisKK1RWYXJpYWJs
ZUluZm86OlRWYXJpYWJsZUluZm8oU2hEYXRhVHlwZSB0eXBlLCBpbnQgc2l6ZSkKKyAgICA6IHR5
cGUodHlwZSksCisgICAgICBzaXplKHNpemUpLAorICAgICAgaXNBcnJheShmYWxzZSksCisgICAg
ICBwcmVjaXNpb24oRWJwVW5kZWZpbmVkKSwKKyAgICAgIHN0YXRpY1VzZShmYWxzZSkKK3sKK30K
KworQ29sbGVjdFZhcmlhYmxlczo6Q29sbGVjdFZhcmlhYmxlcyhUVmFyaWFibGVJbmZvTGlzdCYg
YXR0cmlicywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5m
b0xpc3QmIHVuaWZvcm1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFy
aWFibGVJbmZvTGlzdCYgdmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uKQorICAgIDogbUF0dHJpYnMoYXR0cmli
cyksCisgICAgICBtVW5pZm9ybXModW5pZm9ybXMpLAorICAgICAgbVZhcnlpbmdzKHZhcnlpbmdz
KSwKKyAgICAgIG1Qb2ludENvb3JkQWRkZWQoZmFsc2UpLAorICAgICAgbUZyb250RmFjaW5nQWRk
ZWQoZmFsc2UpLAorICAgICAgbUZyYWdDb29yZEFkZGVkKGZhbHNlKSwKKyAgICAgIG1IYXNoRnVu
Y3Rpb24oaGFzaEZ1bmN0aW9uKQoreworfQorCisvLyBXZSB3YW50IHRvIGNoZWNrIHdoZXRoZXIg
YSB1bmlmb3JtL3ZhcnlpbmcgaXMgc3RhdGljYWxseSB1c2VkCisvLyBiZWNhdXNlIHdlIG9ubHkg
Y291bnQgdGhlIHVzZWQgb25lcyBpbiBwYWNraW5nIGNvbXB1dGluZy4KKy8vIEFsc28sIGdsX0Zy
YWdDb29yZCwgZ2xfUG9pbnRDb29yZCwgYW5kIGdsX0Zyb250RmFjaW5nIGNvdW50CisvLyB0b3dh
cmQgdmFyeWluZyBjb3VudGluZyBpZiB0aGV5IGFyZSBzdGF0aWNhbGx5IHVzZWQgaW4gYSBmcmFn
bWVudAorLy8gc2hhZGVyLgordm9pZCBDb2xsZWN0VmFyaWFibGVzOjp2aXNpdFN5bWJvbChUSW50
ZXJtU3ltYm9sKiBzeW1ib2wpCit7CisgICAgQVNTRVJUKHN5bWJvbCAhPSBOVUxMKTsKKyAgICBU
VmFyaWFibGVJbmZvKiB2YXIgPSBOVUxMOworICAgIHN3aXRjaCAoc3ltYm9sLT5nZXRRdWFsaWZp
ZXIoKSkKKyAgICB7CisgICAgY2FzZSBFdnFWYXJ5aW5nT3V0OgorICAgIGNhc2UgRXZxSW52YXJp
YW50VmFyeWluZ091dDoKKyAgICBjYXNlIEV2cVZhcnlpbmdJbjoKKyAgICBjYXNlIEV2cUludmFy
aWFudFZhcnlpbmdJbjoKKyAgICAgICAgdmFyID0gZmluZFZhcmlhYmxlKHN5bWJvbC0+Z2V0VHlw
ZSgpLCBzeW1ib2wtPmdldFN5bWJvbCgpLCBtVmFyeWluZ3MpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEV2cVVuaWZvcm06CisgICAgICAgIHZhciA9IGZpbmRWYXJpYWJsZShzeW1ib2wtPmdl
dFR5cGUoKSwgc3ltYm9sLT5nZXRTeW1ib2woKSwgbVVuaWZvcm1zKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBFdnFGcmFnQ29vcmQ6CisgICAgICAgIGlmICghbUZyYWdDb29yZEFkZGVkKSB7
CisgICAgICAgICAgICBUVmFyaWFibGVJbmZvIGluZm87CisgICAgICAgICAgICBpbmZvLm5hbWUg
PSAiZ2xfRnJhZ0Nvb3JkIjsKKyAgICAgICAgICAgIGluZm8ubWFwcGVkTmFtZSA9ICJnbF9GcmFn
Q29vcmQiOworICAgICAgICAgICAgaW5mby50eXBlID0gU0hfRkxPQVRfVkVDNDsKKyAgICAgICAg
ICAgIGluZm8uc2l6ZSA9IDE7CisgICAgICAgICAgICBpbmZvLnByZWNpc2lvbiA9IEVicE1lZGl1
bTsgIC8vIFVzZSBtZWRpdW1wIGFzIGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlci4KKyAgICAgICAg
ICAgIGluZm8uc3RhdGljVXNlID0gdHJ1ZTsKKwkgICAgbVZhcnlpbmdzLnB1c2hfYmFjayhpbmZv
KTsKKyAgICAgICAgICAgIG1GcmFnQ29vcmRBZGRlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgRXZxRnJvbnRGYWNpbmc6CisgICAgICAgIGlmICghbUZyb250
RmFjaW5nQWRkZWQpIHsKKyAgICAgICAgICAgIFRWYXJpYWJsZUluZm8gaW5mbzsKKyAgICAgICAg
ICAgIGluZm8ubmFtZSA9ICJnbF9Gcm9udEZhY2luZyI7CisgICAgICAgICAgICBpbmZvLm1hcHBl
ZE5hbWUgPSAiZ2xfRnJvbnRGYWNpbmciOworICAgICAgICAgICAgaW5mby50eXBlID0gU0hfQk9P
TDsKKyAgICAgICAgICAgIGluZm8uc2l6ZSA9IDE7CisgICAgICAgICAgICBpbmZvLnByZWNpc2lv
biA9IEVicFVuZGVmaW5lZDsKKyAgICAgICAgICAgIGluZm8uc3RhdGljVXNlID0gdHJ1ZTsKKwkg
ICAgbVZhcnlpbmdzLnB1c2hfYmFjayhpbmZvKTsKKyAgICAgICAgICAgIG1Gcm9udEZhY2luZ0Fk
ZGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgY2FzZSBFdnFQb2lu
dENvb3JkOgorICAgICAgICBpZiAoIW1Qb2ludENvb3JkQWRkZWQpIHsKKyAgICAgICAgICAgIFRW
YXJpYWJsZUluZm8gaW5mbzsKKyAgICAgICAgICAgIGluZm8ubmFtZSA9ICJnbF9Qb2ludENvb3Jk
IjsKKyAgICAgICAgICAgIGluZm8ubWFwcGVkTmFtZSA9ICJnbF9Qb2ludENvb3JkIjsKKyAgICAg
ICAgICAgIGluZm8udHlwZSA9IFNIX0ZMT0FUX1ZFQzI7CisgICAgICAgICAgICBpbmZvLnNpemUg
PSAxOworICAgICAgICAgICAgaW5mby5wcmVjaXNpb24gPSBFYnBNZWRpdW07ICAvLyBVc2UgbWVk
aXVtcCBhcyBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIuCisgICAgICAgICAgICBpbmZvLnN0YXRp
Y1VzZSA9IHRydWU7CisJICAgIG1WYXJ5aW5ncy5wdXNoX2JhY2soaW5mbyk7CisgICAgICAgICAg
ICBtUG9pbnRDb29yZEFkZGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmICh2YXIpCisgICAgICAg
IHZhci0+c3RhdGljVXNlID0gdHJ1ZTsKK30KKworYm9vbCBDb2xsZWN0VmFyaWFibGVzOjp2aXNp
dEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK3sKKyAgICBib29sIHZp
c2l0Q2hpbGRyZW4gPSB0cnVlOworCisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsK
KyAgICBjYXNlIEVPcERlY2xhcmF0aW9uOiB7CisgICAgICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5j
ZSYgc2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOworICAgICAgICBUUXVhbGlmaWVyIHF1
YWxpZmllciA9IHNlcXVlbmNlLmZyb250KCktPmdldEFzVHlwZWQoKS0+Z2V0UXVhbGlmaWVyKCk7
CisgICAgICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlIHx8IHF1YWxpZmllciA9PSBF
dnFVbmlmb3JtIHx8CisgICAgICAgICAgICBxdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8IHF1
YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8CisgICAgICAgICAgICBxdWFsaWZpZXIgPT0gRXZx
SW52YXJpYW50VmFyeWluZ0luIHx8IHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0
KQorICAgICAgICB7CisgICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYgaW5mb0xpc3QgPSBx
dWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlID8gbUF0dHJpYnMgOgorICAgICAgICAgICAgICAgIChx
dWFsaWZpZXIgPT0gRXZxVW5pZm9ybSA/IG1Vbmlmb3JtcyA6IG1WYXJ5aW5ncyk7CisgICAgICAg
ICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgaSA9IHNlcXVlbmNlLmJl
Z2luKCk7CisgICAgICAgICAgICAgICAgIGkgIT0gc2VxdWVuY2UuZW5kKCk7ICsraSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBUSW50ZXJtU3ltYm9sKiB2YXJpYWJsZSA9
ICgqaSktPmdldEFzU3ltYm9sTm9kZSgpOworICAgICAgICAgICAgICAgIC8vIFRoZSBvbmx5IGNh
c2UgaW4gd2hpY2ggdGhlIHNlcXVlbmNlIHdpbGwgbm90IGNvbnRhaW4gYQorICAgICAgICAgICAg
ICAgIC8vIFRJbnRlcm1TeW1ib2wgbm9kZSBpcyBpbml0aWFsaXphdGlvbi4gSXQgd2lsbCBjb250
YWluIGEKKyAgICAgICAgICAgICAgICAvLyBUSW50ZXJCaW5hcnkgbm9kZSBpbiB0aGF0IGNhc2Uu
IFNpbmNlIGF0dHJpYnV0ZXMsIHVuaWZvcm1zLAorICAgICAgICAgICAgICAgIC8vIGFuZCB2YXJ5
aW5ncyBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgaW4gYSBzaGFkZXIsIHdlIG11c3QgaGF2ZQorICAg
ICAgICAgICAgICAgIC8vIG9ubHkgVEludGVybVN5bWJvbCBub2RlcyBpbiB0aGUgc2VxdWVuY2Uu
CisgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhYmxlICE9IE5VTEwpOworICAgICAgICAgICAg
ICAgIFRTdHJpbmcgcHJvY2Vzc2VkU3ltYm9sOworICAgICAgICAgICAgICAgIGlmIChtSGFzaEZ1
bmN0aW9uID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZFN5bWJvbCA9IHZh
cmlhYmxlLT5nZXRTeW1ib2woKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHByb2Nlc3NlZFN5bWJvbCA9IFRJbnRlcm1UcmF2ZXJzZXI6Omhhc2godmFyaWFibGUt
PmdldE9yaWdpbmFsU3ltYm9sKCksIG1IYXNoRnVuY3Rpb24pOworICAgICAgICAgICAgICAgIGdl
dFZhcmlhYmxlSW5mbyh2YXJpYWJsZS0+Z2V0VHlwZSgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXJpYWJsZS0+Z2V0T3JpZ2luYWxTeW1ib2woKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkU3ltYm9sLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmZvTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUhh
c2hGdW5jdGlvbik7CisgICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0
OiBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gdmlzaXRDaGlsZHJlbjsKK30KKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFy
aWFibGVJbmZvLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9WYXJpYWJsZUluZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNzIxNmNkMTQyOGYyZGNkMjBiMWNjZjBm
NmYwNTg5ZTllYjk4ZTQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVJbmZvLmgKQEAgLTAsMCArMSw1MiBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9WQVJJQUJMRV9JTkZPX0hf
CisjZGVmaW5lIENPTVBJTEVSX1ZBUklBQkxFX0lORk9fSF8KKworI2luY2x1ZGUgIkdMU0xBTkcv
U2hhZGVyTGFuZy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRl
LmgiCisKKy8vIFByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IGEgdmFyaWFibGUuCisvLyBJdCBp
cyBjdXJyZW50bHkgYmVpbmcgdXNlZCB0byBzdG9yZSBpbmZvIGFib3V0IGFjdGl2ZSBhdHRyaWJz
IGFuZCB1bmlmb3Jtcy4KK3N0cnVjdCBUVmFyaWFibGVJbmZvIHsKKyAgICBUVmFyaWFibGVJbmZv
KFNoRGF0YVR5cGUgdHlwZSwgaW50IHNpemUpOworICAgIFRWYXJpYWJsZUluZm8oKTsKKworICAg
IFRQZXJzaXN0U3RyaW5nIG5hbWU7CisgICAgVFBlcnNpc3RTdHJpbmcgbWFwcGVkTmFtZTsKKyAg
ICBTaERhdGFUeXBlIHR5cGU7CisgICAgaW50IHNpemU7CisgICAgYm9vbCBpc0FycmF5OworICAg
IFRQcmVjaXNpb24gcHJlY2lzaW9uOworICAgIGJvb2wgc3RhdGljVXNlOworfTsKK3R5cGVkZWYg
c3RkOjp2ZWN0b3I8VFZhcmlhYmxlSW5mbz4gVFZhcmlhYmxlSW5mb0xpc3Q7CisKKy8vIFRyYXZl
cnNlcyBpbnRlcm1lZGlhdGUgdHJlZSB0byBjb2xsZWN0IGFsbCBhdHRyaWJ1dGVzLCB1bmlmb3Jt
cywgdmFyeWluZ3MuCitjbGFzcyBDb2xsZWN0VmFyaWFibGVzIDogcHVibGljIFRJbnRlcm1UcmF2
ZXJzZXIgeworcHVibGljOgorICAgIENvbGxlY3RWYXJpYWJsZXMoVFZhcmlhYmxlSW5mb0xpc3Qm
IGF0dHJpYnMsCisgICAgICAgICAgICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYgdW5pZm9y
bXMsCisgICAgICAgICAgICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYgdmFyeWluZ3MsCisg
ICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbik7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOworICAgIHZpcnR1YWwg
Ym9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOworCitwcml2YXRl
OgorICAgIFRWYXJpYWJsZUluZm9MaXN0JiBtQXR0cmliczsKKyAgICBUVmFyaWFibGVJbmZvTGlz
dCYgbVVuaWZvcm1zOworICAgIFRWYXJpYWJsZUluZm9MaXN0JiBtVmFyeWluZ3M7CisKKyAgICBi
b29sIG1Qb2ludENvb3JkQWRkZWQ7CisgICAgYm9vbCBtRnJvbnRGYWNpbmdBZGRlZDsKKyAgICBi
b29sIG1GcmFnQ29vcmRBZGRlZDsKKworICAgIFNoSGFzaEZ1bmN0aW9uNjQgbUhhc2hGdW5jdGlv
bjsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVkFSSUFCTEVfSU5GT19IXwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFi
bGVQYWNrZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVmFyaWFibGVQYWNrZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2MzRkODYzMzc3YzlmOTcxYTUy
ZTcyNzFmZTk3OGVlZGMzNWViMWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZVBhY2tlci5jcHAKQEAgLTAs
MCArMSwyOTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9WYXJpYWJsZVBhY2tlci5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvU2hIYW5kbGUuaCIKKworbmFtZXNwYWNlIHsKK2ludCBHZXRT
b3J0T3JkZXIoU2hEYXRhVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgICAg
ICBjYXNlIFNIX0ZMT0FUX01BVDQ6CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2Fz
ZSBTSF9GTE9BVF9NQVQyOgorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgU0hf
RkxPQVRfVkVDNDoKKyAgICAgICAgY2FzZSBTSF9JTlRfVkVDNDoKKyAgICAgICAgY2FzZSBTSF9C
T09MX1ZFQzQ6CisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9N
QVQzOgorICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMzoK
KyAgICAgICAgY2FzZSBTSF9JTlRfVkVDMzoKKyAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzM6Cisg
ICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUMyOgorICAgICAg
ICBjYXNlIFNIX0lOVF9WRUMyOgorICAgICAgICBjYXNlIFNIX0JPT0xfVkVDMjoKKyAgICAgICAg
ICAgIHJldHVybiA1OworICAgICAgICBjYXNlIFNIX0ZMT0FUOgorICAgICAgICBjYXNlIFNIX0lO
VDoKKyAgICAgICAgY2FzZSBTSF9CT09MOgorICAgICAgICBjYXNlIFNIX1NBTVBMRVJfMkQ6Cisg
ICAgICAgIGNhc2UgU0hfU0FNUExFUl9DVUJFOgorICAgICAgICBjYXNlIFNIX1NBTVBMRVJfRVhU
RVJOQUxfT0VTOgorICAgICAgICBjYXNlIFNIX1NBTVBMRVJfMkRfUkVDVF9BUkI6CisgICAgICAg
ICAgICByZXR1cm4gNjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVChmYWxz
ZSk7CisgICAgICAgICAgICByZXR1cm4gNzsKKyAgICB9Cit9Cit9ICAgIC8vIG5hbWVzcGFjZQor
CitpbnQgVmFyaWFibGVQYWNrZXI6OkdldE51bUNvbXBvbmVudHNQZXJSb3coU2hEYXRhVHlwZSB0
eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDQ6
CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMjoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUM0
OgorICAgICAgICBjYXNlIFNIX0lOVF9WRUM0OgorICAgICAgICBjYXNlIFNIX0JPT0xfVkVDNDoK
KyAgICAgICAgICAgIHJldHVybiA0OworICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDM6CisgICAg
ICAgIGNhc2UgU0hfRkxPQVRfVkVDMzoKKyAgICAgICAgY2FzZSBTSF9JTlRfVkVDMzoKKyAgICAg
ICAgY2FzZSBTSF9CT09MX1ZFQzM6CisgICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgY2Fz
ZSBTSF9GTE9BVF9WRUMyOgorICAgICAgICBjYXNlIFNIX0lOVF9WRUMyOgorICAgICAgICBjYXNl
IFNIX0JPT0xfVkVDMjoKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICBjYXNlIFNIX0ZM
T0FUOgorICAgICAgICBjYXNlIFNIX0lOVDoKKyAgICAgICAgY2FzZSBTSF9CT09MOgorICAgICAg
ICBjYXNlIFNIX1NBTVBMRVJfMkQ6CisgICAgICAgIGNhc2UgU0hfU0FNUExFUl9DVUJFOgorICAg
ICAgICBjYXNlIFNIX1NBTVBMRVJfRVhURVJOQUxfT0VTOgorICAgICAgICBjYXNlIFNIX1NBTVBM
RVJfMkRfUkVDVF9BUkI6CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gNTsKKyAgICB9
Cit9CisKK2ludCBWYXJpYWJsZVBhY2tlcjo6R2V0TnVtUm93cyhTaERhdGFUeXBlIHR5cGUpCit7
CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUNDoKKyAgICAg
ICAgICAgIHJldHVybiA0OworICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDM6CisgICAgICAgICAg
ICByZXR1cm4gMzsKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQyOgorICAgICAgICAgICAgcmV0
dXJuIDI7CisgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDNDoKKyAgICAgICAgY2FzZSBTSF9JTlRf
VkVDNDoKKyAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzQ6CisgICAgICAgIGNhc2UgU0hfRkxPQVRf
VkVDMzoKKyAgICAgICAgY2FzZSBTSF9JTlRfVkVDMzoKKyAgICAgICAgY2FzZSBTSF9CT09MX1ZF
QzM6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMjoKKyAgICAgICAgY2FzZSBTSF9JTlRfVkVD
MjoKKyAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzI6CisgICAgICAgIGNhc2UgU0hfRkxPQVQ6Cisg
ICAgICAgIGNhc2UgU0hfSU5UOgorICAgICAgICBjYXNlIFNIX0JPT0w6CisgICAgICAgIGNhc2Ug
U0hfU0FNUExFUl8yRDoKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSX0NVQkU6CisgICAgICAgIGNh
c2UgU0hfU0FNUExFUl9FWFRFUk5BTF9PRVM6CisgICAgICAgIGNhc2UgU0hfU0FNUExFUl8yRF9S
RUNUX0FSQjoKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybiAxMDAwMDA7CisgICAgfQor
fQorCitzdHJ1Y3QgVFZhcmlhYmxlSW5mb0NvbXBhcmVyIHsKKyAgICBib29sIG9wZXJhdG9yKCko
Y29uc3QgVFZhcmlhYmxlSW5mbyYgbGhzLCBjb25zdCBUVmFyaWFibGVJbmZvJiByaHMpIGNvbnN0
CisgICAgeworICAgICAgICBpbnQgbGhzU29ydE9yZGVyID0gR2V0U29ydE9yZGVyKGxocy50eXBl
KTsKKyAgICAgICAgaW50IHJoc1NvcnRPcmRlciA9IEdldFNvcnRPcmRlcihyaHMudHlwZSk7Cisg
ICAgICAgIGlmIChsaHNTb3J0T3JkZXIgIT0gcmhzU29ydE9yZGVyKSB7CisgICAgICAgICAgICBy
ZXR1cm4gbGhzU29ydE9yZGVyIDwgcmhzU29ydE9yZGVyOworICAgICAgICB9CisgICAgICAgIC8v
IFNvcnQgYnkgbGFyZ2VzdCBmaXJzdC4KKyAgICAgICAgcmV0dXJuIGxocy5zaXplID4gcmhzLnNp
emU7CisgICAgfQorfTsKKwordW5zaWduZWQgVmFyaWFibGVQYWNrZXI6Om1ha2VDb2x1bW5GbGFn
cyhpbnQgY29sdW1uLCBpbnQgbnVtQ29tcG9uZW50c1BlclJvdykKK3sKKyAgICByZXR1cm4gKChr
Q29sdW1uTWFzayA8PCAoa051bUNvbHVtbnMgLSBudW1Db21wb25lbnRzUGVyUm93KSkgJgorICAg
ICAgICAgICAgICAgICAgICBrQ29sdW1uTWFzaykgPj4gY29sdW1uOworfQorCit2b2lkIFZhcmlh
YmxlUGFja2VyOjpmaWxsQ29sdW1ucyhpbnQgdG9wUm93LCBpbnQgbnVtUm93cywgaW50IGNvbHVt
biwgaW50IG51bUNvbXBvbmVudHNQZXJSb3cpCit7CisgICAgdW5zaWduZWQgY29sdW1uRmxhZ3Mg
PSBtYWtlQ29sdW1uRmxhZ3MoY29sdW1uLCBudW1Db21wb25lbnRzUGVyUm93KTsKKyAgICBmb3Ig
KGludCByID0gMDsgciA8IG51bVJvd3M7ICsrcikgeworICAgICAgICBpbnQgcm93ID0gdG9wUm93
ICsgcjsKKyAgICAgICAgQVNTRVJUKChyb3dzX1tyb3ddICYgY29sdW1uRmxhZ3MpID09IDApOwor
ICAgICAgICByb3dzX1tyb3ddIHw9IGNvbHVtbkZsYWdzOworICAgIH0KK30KKworYm9vbCBWYXJp
YWJsZVBhY2tlcjo6c2VhcmNoQ29sdW1uKGludCBjb2x1bW4sIGludCBudW1Sb3dzLCBpbnQqIGRl
c3RSb3csIGludCogZGVzdFNpemUpCit7CisgICAgQVNTRVJUKGRlc3RSb3cpOworCisgICAgZm9y
ICg7IHRvcE5vbkZ1bGxSb3dfIDwgbWF4Um93c18gJiYgcm93c19bdG9wTm9uRnVsbFJvd19dID09
IGtDb2x1bW5NYXNrOworICAgICAgICAgKyt0b3BOb25GdWxsUm93XykgeworICAgIH0KKworICAg
IGZvciAoOyBib3R0b21Ob25GdWxsUm93XyA+PSAwICYmIHJvd3NfW2JvdHRvbU5vbkZ1bGxSb3df
XSA9PSBrQ29sdW1uTWFzazsKKyAgICAgICAgIC0tYm90dG9tTm9uRnVsbFJvd18pIHsKKyAgICB9
CisKKyAgICBpZiAoYm90dG9tTm9uRnVsbFJvd18gLSB0b3BOb25GdWxsUm93XyArIDEgPCBudW1S
b3dzKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBjb2x1
bW5GbGFncyA9IG1ha2VDb2x1bW5GbGFncyhjb2x1bW4sIDEpOworICAgIGludCB0b3BHb29kUm93
ID0gMDsKKyAgICBpbnQgc21hbGxlc3RHb29kVG9wID0gLTE7CisgICAgaW50IHNtYWxsZXN0R29v
ZFNpemUgPSBtYXhSb3dzXyArIDE7CisgICAgaW50IGJvdHRvbVJvdyA9IGJvdHRvbU5vbkZ1bGxS
b3dfICsgMTsKKyAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgZm9yIChpbnQgcm93ID0gdG9w
Tm9uRnVsbFJvd187IHJvdyA8PSBib3R0b21Sb3c7ICsrcm93KSB7CisgICAgICAgIGJvb2wgcm93
RW1wdHkgPSByb3cgPCBib3R0b21Sb3cgPyAoKHJvd3NfW3Jvd10gJiBjb2x1bW5GbGFncykgPT0g
MCkgOiBmYWxzZTsKKyAgICAgICAgaWYgKHJvd0VtcHR5KSB7CisgICAgICAgICAgICBpZiAoIWZv
dW5kKSB7CisgICAgICAgICAgICAgICAgdG9wR29vZFJvdyA9IHJvdzsKKyAgICAgICAgICAgICAg
ICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBpZiAoZm91bmQpIHsKKyAgICAgICAgICAgICAgICBpbnQgc2l6ZSA9IHJvdyAtIHRvcEdv
b2RSb3c7CisgICAgICAgICAgICAgICAgaWYgKHNpemUgPj0gbnVtUm93cyAmJiBzaXplIDwgc21h
bGxlc3RHb29kU2l6ZSkgeworICAgICAgICAgICAgICAgICAgICBzbWFsbGVzdEdvb2RTaXplID0g
c2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgc21hbGxlc3RHb29kVG9wID0gdG9wR29vZFJvdzsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3VuZCA9IGZh
bHNlOworICAgICAgICB9CisgICAgfQorICAgIGlmIChzbWFsbGVzdEdvb2RUb3AgPCAwKSB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAqZGVzdFJvdyA9IHNtYWxsZXN0R29v
ZFRvcDsKKyAgICBpZiAoZGVzdFNpemUpIHsKKyAgICAgICAgKmRlc3RTaXplID0gc21hbGxlc3RH
b29kU2l6ZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVmFyaWFibGVQYWNr
ZXI6OkNoZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cyhpbnQgbWF4VmVjdG9ycywgY29u
c3QgVFZhcmlhYmxlSW5mb0xpc3QmIGluX3ZhcmlhYmxlcykKK3sKKyAgICBBU1NFUlQobWF4VmVj
dG9ycyA+IDApOworICAgIG1heFJvd3NfID0gbWF4VmVjdG9yczsKKyAgICB0b3BOb25GdWxsUm93
XyA9IDA7CisgICAgYm90dG9tTm9uRnVsbFJvd18gPSBtYXhSb3dzXyAtIDE7CisgICAgVFZhcmlh
YmxlSW5mb0xpc3QgdmFyaWFibGVzKGluX3ZhcmlhYmxlcyk7CisKKyAgICAvLyBBcyBwZXIgR0xT
TCAxLjAxNyBBcHBlbmRpeCBBLCBTZWN0aW9uIDcgdmFyaWFibGVzIGFyZSBwYWNrZWQgaW4gc3Bl
Y2lmaWMKKyAgICAvLyBvcmRlciBieSB0eXBlLCB0aGVuIGJ5IHNpemUgb2YgYXJyYXksIGxhcmdl
c3QgZmlyc3QuCisgICAgc3RkOjpzb3J0KHZhcmlhYmxlcy5iZWdpbigpLCB2YXJpYWJsZXMuZW5k
KCksIFRWYXJpYWJsZUluZm9Db21wYXJlcigpKTsKKyAgICByb3dzXy5jbGVhcigpOworICAgIHJv
d3NfLnJlc2l6ZShtYXhWZWN0b3JzLCAwKTsKKworICAgIC8vIFBhY2tzIHRoZSA0IGNvbHVtbiB2
YXJpYWJsZXMuCisgICAgc2l6ZV90IGlpID0gMDsKKyAgICBmb3IgKDsgaWkgPCB2YXJpYWJsZXMu
c2l6ZSgpOyArK2lpKSB7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZUluZm8mIHZhcmlhYmxlID0g
dmFyaWFibGVzW2lpXTsKKyAgICAgICAgaWYgKEdldE51bUNvbXBvbmVudHNQZXJSb3codmFyaWFi
bGUudHlwZSkgIT0gNCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
dG9wTm9uRnVsbFJvd18gKz0gR2V0TnVtUm93cyh2YXJpYWJsZS50eXBlKSAqIHZhcmlhYmxlLnNp
emU7CisgICAgfQorCisgICAgaWYgKHRvcE5vbkZ1bGxSb3dfID4gbWF4Um93c18pIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFBhY2tzIHRoZSAzIGNvbHVtbiB2YXJp
YWJsZXMuCisgICAgaW50IG51bTNDb2x1bW5Sb3dzID0gMDsKKyAgICBmb3IgKDsgaWkgPCB2YXJp
YWJsZXMuc2l6ZSgpOyArK2lpKSB7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZUluZm8mIHZhcmlh
YmxlID0gdmFyaWFibGVzW2lpXTsKKyAgICAgICAgaWYgKEdldE51bUNvbXBvbmVudHNQZXJSb3co
dmFyaWFibGUudHlwZSkgIT0gMykgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgbnVtM0NvbHVtblJvd3MgKz0gR2V0TnVtUm93cyh2YXJpYWJsZS50eXBlKSAqIHZhcmlh
YmxlLnNpemU7CisgICAgfQorCisgICAgaWYgKHRvcE5vbkZ1bGxSb3dfICsgbnVtM0NvbHVtblJv
d3MgPiBtYXhSb3dzXykgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZmls
bENvbHVtbnModG9wTm9uRnVsbFJvd18sIG51bTNDb2x1bW5Sb3dzLCAwLCAzKTsKKworICAgIC8v
IFBhY2tzIHRoZSAyIGNvbHVtbiB2YXJpYWJsZXMuCisgICAgaW50IHRvcDJDb2x1bW5Sb3cgPSB0
b3BOb25GdWxsUm93XyArIG51bTNDb2x1bW5Sb3dzOworICAgIGludCB0d29Db2x1bW5Sb3dzQXZh
aWxhYmxlID0gbWF4Um93c18gLSB0b3AyQ29sdW1uUm93OworICAgIGludCByb3dzQXZhaWxhYmxl
SW5Db2x1bW5zMDEgPSB0d29Db2x1bW5Sb3dzQXZhaWxhYmxlOworICAgIGludCByb3dzQXZhaWxh
YmxlSW5Db2x1bW5zMjMgPSB0d29Db2x1bW5Sb3dzQXZhaWxhYmxlOworICAgIGZvciAoOyBpaSA8
IHZhcmlhYmxlcy5zaXplKCk7ICsraWkpIHsKKyAgICAgICAgY29uc3QgVFZhcmlhYmxlSW5mbyYg
dmFyaWFibGUgPSB2YXJpYWJsZXNbaWldOworICAgICAgICBpZiAoR2V0TnVtQ29tcG9uZW50c1Bl
clJvdyh2YXJpYWJsZS50eXBlKSAhPSAyKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBpbnQgbnVtUm93cyA9IEdldE51bVJvd3ModmFyaWFibGUudHlwZSkgKiB2YXJp
YWJsZS5zaXplOworICAgICAgICBpZiAobnVtUm93cyA8PSByb3dzQXZhaWxhYmxlSW5Db2x1bW5z
MDEpIHsKKyAgICAgICAgICAgIHJvd3NBdmFpbGFibGVJbkNvbHVtbnMwMSAtPSBudW1Sb3dzOwor
ICAgICAgICB9IGVsc2UgaWYgKG51bVJvd3MgPD0gcm93c0F2YWlsYWJsZUluQ29sdW1uczIzKSB7
CisgICAgICAgICAgICByb3dzQXZhaWxhYmxlSW5Db2x1bW5zMjMgLT0gbnVtUm93czsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGludCBudW1Sb3dzVXNlZEluQ29sdW1uczAxID0KKyAgICAgICAgdHdvQ29sdW1uUm93
c0F2YWlsYWJsZSAtIHJvd3NBdmFpbGFibGVJbkNvbHVtbnMwMTsKKyAgICBpbnQgbnVtUm93c1Vz
ZWRJbkNvbHVtbnMyMyA9CisgICAgICAgIHR3b0NvbHVtblJvd3NBdmFpbGFibGUgLSByb3dzQXZh
aWxhYmxlSW5Db2x1bW5zMjM7CisgICAgZmlsbENvbHVtbnModG9wMkNvbHVtblJvdywgbnVtUm93
c1VzZWRJbkNvbHVtbnMwMSwgMCwgMik7CisgICAgZmlsbENvbHVtbnMobWF4Um93c18gLSBudW1S
b3dzVXNlZEluQ29sdW1uczIzLCBudW1Sb3dzVXNlZEluQ29sdW1uczIzLAorICAgICAgICAgICAg
ICAgIDIsIDIpOworCisgICAgLy8gUGFja3MgdGhlIDEgY29sdW1uIHZhcmlhYmxlcy4KKyAgICBm
b3IgKDsgaWkgPCB2YXJpYWJsZXMuc2l6ZSgpOyArK2lpKSB7CisgICAgICAgIGNvbnN0IFRWYXJp
YWJsZUluZm8mIHZhcmlhYmxlID0gdmFyaWFibGVzW2lpXTsKKyAgICAgICAgQVNTRVJUKDEgPT0g
R2V0TnVtQ29tcG9uZW50c1BlclJvdyh2YXJpYWJsZS50eXBlKSk7CisgICAgICAgIGludCBudW1S
b3dzID0gR2V0TnVtUm93cyh2YXJpYWJsZS50eXBlKSAqIHZhcmlhYmxlLnNpemU7CisgICAgICAg
IGludCBzbWFsbGVzdENvbHVtbiA9IC0xOworICAgICAgICBpbnQgc21hbGxlc3RTaXplID0gbWF4
Um93c18gKyAxOworICAgICAgICBpbnQgdG9wUm93ID0gLTE7CisgICAgICAgIGZvciAoaW50IGNv
bHVtbiA9IDA7IGNvbHVtbiA8IGtOdW1Db2x1bW5zOyArK2NvbHVtbikgeworICAgICAgICAgICAg
aW50IHJvdyA9IDA7CisgICAgICAgICAgICBpbnQgc2l6ZSA9IDA7CisgICAgICAgICAgICBpZiAo
c2VhcmNoQ29sdW1uKGNvbHVtbiwgbnVtUm93cywgJnJvdywgJnNpemUpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHNpemUgPCBzbWFsbGVzdFNpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgc21h
bGxlc3RTaXplID0gc2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgc21hbGxlc3RDb2x1bW4gPSBj
b2x1bW47CisgICAgICAgICAgICAgICAgICAgIHRvcFJvdyA9IHJvdzsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoc21hbGxlc3RDb2x1
bW4gPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAg
ICBmaWxsQ29sdW1ucyh0b3BSb3csIG51bVJvd3MsIHNtYWxsZXN0Q29sdW1uLCAxKTsKKyAgICB9
CisKKyAgICBBU1NFUlQodmFyaWFibGVzLnNpemUoKSA9PSBpaSk7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlUGFja2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZVBhY2tlci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZk
NjA5MDgyN2NkOGUxOTU5MzhjZTQ1OTVjZjkzNzFlNzRkMTZhNTcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJs
ZVBhY2tlci5oCkBAIC0wLDAgKzEsNDEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYg
X1ZBUklBQkxFUEFDS0VSX0lOQ0xVREVEXworI2RlZmluZSBfVkFSSUFCTEVQQUNLRVJfSU5DTFVE
RURfCisKKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9T
aEhhbmRsZS5oIgorCitjbGFzcyBWYXJpYWJsZVBhY2tlciB7CisgcHVibGljOgorICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiB0aGUgcGFzc2VkIGluIHZhcmlhYmxlcyBwYWNrIGluIG1heFZlY3RvcnMg
Zm9sbG93aW5nCisgICAgLy8gdGhlIHBhY2tpbmcgcnVsZXMgZnJvbSB0aGUgR0xTTCAxLjAxNyBz
cGVjLCBBcHBlbmRpeCBBLCBzZWN0aW9uIDcuCisgICAgYm9vbCBDaGVja1ZhcmlhYmxlc1dpdGhp
blBhY2tpbmdMaW1pdHMoCisgICAgICAgIGludCBtYXhWZWN0b3JzLAorICAgICAgICBjb25zdCBU
VmFyaWFibGVJbmZvTGlzdCYgaW5fdmFyaWFibGVzKTsKKworICAgIC8vIEdldHMgaG93IG1hbnkg
Y29tcG9uZW50cyBpbiBhIHJvdyBhIGRhdGEgdHlwZSB0YWtlcy4KKyAgICBzdGF0aWMgaW50IEdl
dE51bUNvbXBvbmVudHNQZXJSb3coU2hEYXRhVHlwZSB0eXBlKTsKKworICAgIC8vIEdldHMgaG93
IG1hbnkgcm93cyBhIGRhdGEgdHlwZSB0YWtlcy4KKyAgICBzdGF0aWMgaW50IEdldE51bVJvd3Mo
U2hEYXRhVHlwZSB0eXBlKTsKKworIHByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IGludCBrTnVt
Q29sdW1ucyA9IDQ7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGtDb2x1bW5NYXNrID0gKDEg
PDwga051bUNvbHVtbnMpIC0gMTsKKworICAgIHVuc2lnbmVkIG1ha2VDb2x1bW5GbGFncyhpbnQg
Y29sdW1uLCBpbnQgbnVtQ29tcG9uZW50c1BlclJvdyk7CisgICAgdm9pZCBmaWxsQ29sdW1ucyhp
bnQgdG9wUm93LCBpbnQgbnVtUm93cywgaW50IGNvbHVtbiwgaW50IG51bUNvbXBvbmVudHNQZXJS
b3cpOworICAgIGJvb2wgc2VhcmNoQ29sdW1uKGludCBjb2x1bW4sIGludCBudW1Sb3dzLCBpbnQq
IGRlc3RSb3csIGludCogZGVzdFNpemUpOworCisgICAgaW50IHRvcE5vbkZ1bGxSb3dfOworICAg
IGludCBib3R0b21Ob25GdWxsUm93XzsKKyAgICBpbnQgbWF4Um93c187CisgICAgc3RkOjp2ZWN0
b3I8dW5zaWduZWQ+IHJvd3NfOworfTsKKworI2VuZGlmIC8vIF9WQVJJQUJMRVBBQ0tFUl9JTkNM
VURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1ZlcnNpb25HTFNMLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1ZlcnNpb25HTFNMLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZDExZjk5ZWI4
OWM2YTU1YTA5MTVhZjA4ODMwNzZhZDZkZGU0NzM3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmVyc2lvbkdMU0wuY3Bw
CkBAIC0wLDAgKzEsMTQwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9WZXJzaW9uR0xTTC5oIgorCitzdGF0aWMgY29uc3QgaW50IEdMU0xfVkVS
U0lPTl8xMTAgPSAxMTA7CitzdGF0aWMgY29uc3QgaW50IEdMU0xfVkVSU0lPTl8xMjAgPSAxMjA7
CisKKy8vIFdlIG5lZWQgdG8gc2NhbiBmb3IgdGhlIGZvbGxvd2luZzoKKy8vIDEuICJpbnZhcmlh
bnQiIGtleXdvcmQ6IFRoaXMgY2FuIG9jY3VyIGluIGJvdGggLSB2ZXJ0ZXggYW5kIGZyYWdtZW50
IHNoYWRlcnMKKy8vICAgIGJ1dCBvbmx5IGF0IHRoZSBnbG9iYWwgc2NvcGUuCisvLyAyLiAiZ2xf
UG9pbnRDb29yZCIgYnVpbHQtaW4gdmFyaWFibGU6IFRoaXMgY2FuIG9ubHkgb2NjdXIgaW4gZnJh
Z21lbnQgc2hhZGVyCisvLyAgICBidXQgaW5zaWRlIGFueSBzY29wZS4KKy8vIDMuIENhbGwgdG8g
YSBtYXRyaXggY29uc3RydWN0b3Igd2l0aCBhbm90aGVyIG1hdHJpeCBhcyBhcmd1bWVudC4KKy8v
ICAgIChUaGVzZSBjb25zdHJ1Y3RvcnMgd2VyZSByZXNlcnZlZCBpbiBHTFNMIHZlcnNpb24gMS4x
MC4pCisvLyA0LiBBcnJheXMgYXMgIm91dCIgZnVuY3Rpb24gcGFyYW1ldGVycy4KKy8vICAgIEdM
U0wgc3BlYyBzZWN0aW9uIDYuMS4xOiAiV2hlbiBjYWxsaW5nIGEgZnVuY3Rpb24sIGV4cHJlc3Np
b25zIHRoYXQgZG8KKy8vICAgIG5vdCBldmFsdWF0ZSB0byBsLXZhbHVlcyBjYW5ub3QgYmUgcGFz
c2VkIHRvIHBhcmFtZXRlcnMgZGVjbGFyZWQgYXMKKy8vICAgIG91dCBvciBpbm91dC4iCisvLyAg
ICBHTFNMIDEuMSBzZWN0aW9uIDUuODogIk90aGVyIGJpbmFyeSBvciB1bmFyeSBleHByZXNzaW9u
cywKKy8vICAgIG5vbi1kZXJlZmVyZW5jZWQgYXJyYXlzLCBmdW5jdGlvbiBuYW1lcywgc3dpenps
ZXMgd2l0aCByZXBlYXRlZCBmaWVsZHMsCisvLyAgICBhbmQgY29uc3RhbnRzIGNhbm5vdCBiZSBs
LXZhbHVlcy4iCisvLyAgICBHTFNMIDEuMiByZWxheGVkIHRoZSByZXN0cmljdGlvbiBvbiBhcnJh
eXMsIHNlY3Rpb24gNS44OiAiVmFyaWFibGVzIHRoYXQKKy8vICAgIGFyZSBidWlsdC1pbiB0eXBl
cywgZW50aXJlIHN0cnVjdHVyZXMgb3IgYXJyYXlzLi4uIGFyZSBhbGwgbC12YWx1ZXMuIgorLy8K
Ky8vIFRPRE8oYWxva3ApOiBUaGUgZm9sbG93aW5nIHR3byBjYXNlcyBvZiBpbnZhcmlhbnQgZGVj
YWxhcmF0aW9uIGdldCBsb3N0CisvLyBkdXJpbmcgcGFyc2luZyAtIHRoZXkgZG8gbm90IGdldCBj
YXJyaWVkIG92ZXIgdG8gdGhlIGludGVybWVkaWF0ZSB0cmVlLgorLy8gSGFuZGxlIHRoZXNlIGNh
c2VzOgorLy8gMS4gV2hlbiBhIHByYWdtYSBpcyB1c2VkIHRvIGZvcmNlIGFsbCBvdXRwdXQgdmFy
aWFibGVzIHRvIGJlIGludmFyaWFudDoKKy8vICAgIC0gI3ByYWdtYSBTVERHTCBpbnZhcmlhbnQo
YWxsKQorLy8gMi4gV2hlbiBhIHByZXZpb3VzbHkgZGVjYWxhcmVkIG9yIGJ1aWx0LWluIHZhcmlh
YmxlIGlzIG1hcmtlZCBpbnZhcmlhbnQ6CisvLyAgICAtIGludmFyaWFudCBnbF9Qb3NpdGlvbjsK
Ky8vICAgIC0gdmFyeWluZyB2ZWMzIGNvbG9yOyBpbnZhcmlhbnQgY29sb3I7CisvLworVFZlcnNp
b25HTFNMOjpUVmVyc2lvbkdMU0woU2hTaGFkZXJUeXBlIHR5cGUpCisgICAgOiBtU2hhZGVyVHlw
ZSh0eXBlKSwKKyAgICAgIG1WZXJzaW9uKEdMU0xfVkVSU0lPTl8xMTApCit7Cit9CisKK3ZvaWQg
VFZlcnNpb25HTFNMOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQoreworICAgIGlm
IChub2RlLT5nZXRTeW1ib2woKSA9PSAiZ2xfUG9pbnRDb29yZCIpCisgICAgICAgIHVwZGF0ZVZl
cnNpb24oR0xTTF9WRVJTSU9OXzEyMCk7Cit9CisKK3ZvaWQgVFZlcnNpb25HTFNMOjp2aXNpdENv
bnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qKQoreworfQorCitib29sIFRWZXJzaW9u
R0xTTDo6dmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkqKQoreworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFRWZXJzaW9uR0xTTDo6dmlzaXRVbmFyeShWaXNpdCwgVEludGVybVVu
YXJ5KikKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUVmVyc2lvbkdMU0w6OnZpc2l0
U2VsZWN0aW9uKFZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKikKK3sKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBUVmVyc2lvbkdMU0w6OnZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdn
cmVnYXRlKiBub2RlKQoreworICAgIGJvb2wgdmlzaXRDaGlsZHJlbiA9IHRydWU7CisKKyAgICBz
d2l0Y2ggKG5vZGUtPmdldE9wKCkpIHsKKyAgICAgIGNhc2UgRU9wU2VxdWVuY2U6CisgICAgICAg
IC8vIFdlIG5lZWQgdG8gdmlzaXQgc2VxdWVuY2UgY2hpbGRyZW4gdG8gZ2V0IHRvIGdsb2JhbCBv
ciBpbm5lciBzY29wZS4KKyAgICAgICAgdmlzaXRDaGlsZHJlbiA9IHRydWU7CisgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBFT3BEZWNsYXJhdGlvbjogeworICAgICAgICBjb25zdCBUSW50ZXJt
U2VxdWVuY2UmIHNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAgVFF1YWxp
ZmllciBxdWFsaWZpZXIgPSBzZXF1ZW5jZS5mcm9udCgpLT5nZXRBc1R5cGVkKCktPmdldFF1YWxp
ZmllcigpOworICAgICAgICBpZiAoKHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5aW5nSW4p
IHx8CisgICAgICAgICAgICAocXVhbGlmaWVyID09IEV2cUludmFyaWFudFZhcnlpbmdPdXQpKSB7
CisgICAgICAgICAgICB1cGRhdGVWZXJzaW9uKEdMU0xfVkVSU0lPTl8xMjApOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBFT3BQYXJhbWV0ZXJzOiB7Cisg
ICAgICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgcGFyYW1zID0gbm9kZS0+Z2V0U2VxdWVuY2Uo
KTsKKyAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBw
YXJhbXMuYmVnaW4oKTsKKyAgICAgICAgICAgICBpdGVyICE9IHBhcmFtcy5lbmQoKTsgKytpdGVy
KQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUSW50ZXJtVHlwZWQqIHBhcmFtID0gKCpp
dGVyKS0+Z2V0QXNUeXBlZCgpOworICAgICAgICAgICAgaWYgKHBhcmFtLT5pc0FycmF5KCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBwYXJh
bS0+Z2V0UXVhbGlmaWVyKCk7CisgICAgICAgICAgICAgICAgaWYgKChxdWFsaWZpZXIgPT0gRXZx
T3V0KSB8fCAocXVhbGlmaWVyID09ICBFdnFJbk91dCkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICB1cGRhdGVWZXJzaW9uKEdMU0xfVkVSU0lPTl8xMjApOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gRnVsbHkgcHJvY2Vzc2VkLiBObyBuZWVkIHRvIHZpc2l0IGNo
aWxkcmVuLgorICAgICAgICB2aXNpdENoaWxkcmVuID0gZmFsc2U7CisgICAgICAgIGJyZWFrOwor
ICAgICAgfQorICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQyOgorICAgICAgY2FzZSBFT3BDb25z
dHJ1Y3RNYXQzOgorICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQ0OiB7CisgICAgICAgIGNvbnN0
IFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOworICAgICAg
ICBpZiAoc2VxdWVuY2Uuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgICBUSW50ZXJtVHlwZWQqIHR5
cGVkID0gc2VxdWVuY2UuZnJvbnQoKS0+Z2V0QXNUeXBlZCgpOworICAgICAgICAgIGlmICh0eXBl
ZCAmJiB0eXBlZC0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgdXBkYXRlVmVyc2lvbihHTFNM
X1ZFUlNJT05fMTIwKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgICB9CisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB2aXNp
dENoaWxkcmVuOworfQorCitib29sIFRWZXJzaW9uR0xTTDo6dmlzaXRMb29wKFZpc2l0LCBUSW50
ZXJtTG9vcCopCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVFZlcnNpb25HTFNMOjp2
aXNpdEJyYW5jaChWaXNpdCwgVEludGVybUJyYW5jaCopCit7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgVFZlcnNpb25HTFNMOjp1cGRhdGVWZXJzaW9uKGludCB2ZXJzaW9uKQoreworICAg
IG1WZXJzaW9uID0gc3RkOjptYXgodmVyc2lvbiwgbVZlcnNpb24pOworfQorCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WZXJzaW9u
R0xTTC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VmVyc2lvbkdMU0wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMzEwMDY2MTcxMTQ1N2ZiNjk4ZDAxNDE2MTk5YTZk
ZjJmMGFhZjBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVmVyc2lvbkdMU0wuaApAQCAtMCwwICsxLDU2IEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1ZFUlNJT05HTFNMX0hfCisjZGVmaW5l
IENPTVBJTEVSX1ZFUlNJT05HTFNMX0hfCisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcu
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgorCisvLyBU
cmF2ZXJzZXMgdGhlIGludGVybWVkaWF0ZSB0cmVlIHRvIHJldHVybiB0aGUgbWluaW11bSBHTFNM
IHZlcnNpb24KKy8vIHJlcXVpcmVkIHRvIGxlZ2FsbHkgYWNjZXNzIGFsbCBidWlsdC1pbiBmZWF0
dXJlcyB1c2VkIGluIHRoZSBzaGFkZXIuCisvLyBHTFNMIDEuMSB3aGljaCBpcyBtYW5kYXRlZCBi
eSBPcGVuR0wgMi4wIHByb3ZpZGVzOgorLy8gICAtICN2ZXJzaW9uIGFuZCAjZXh0ZW5zaW9uIHRv
IGRlY2xhcmUgdmVyc2lvbiBhbmQgZXh0ZW5zaW9ucy4KKy8vICAgLSBidWlsdC1pbiBmdW5jdGlv
bnMgcmVmcmFjdCwgZXhwLCBhbmQgbG9nLgorLy8gICAtIHVwZGF0ZWQgc3RlcCgpIHRvIGNvbXBh
cmUgeCA8IGVkZ2UgaW5zdGVhZCBvZiB4IDw9IGVkZ2UuCisvLyBHTFNMIDEuMiB3aGljaCBpcyBt
YW5kYXRlZCBieSBPcGVuR0wgMi4xIHByb3ZpZGVzOgorLy8gICAtIG1hbnkgY2hhbmdlcyB0byBy
ZWR1Y2UgZGlmZmVyZW5jZXMgd2hlbiBjb21wYXJlZCB0byB0aGUgRVMgc3BlY2lmaWNhdGlvbi4K
Ky8vICAgLSBpbnZhcmlhbnQga2V5d29yZCBhbmQgaXRzIHN1cHBvcnQuCisvLyAgIC0gYysrIHN0
eWxlIG5hbWUgaGlkaW5nIHJ1bGVzLgorLy8gICAtIGJ1aWx0LWluIHZhcmlhYmxlIGdsX1BvaW50
Q29vcmQgZm9yIGZyYWdtZW50IHNoYWRlcnMuCisvLyAgIC0gbWF0cml4IGNvbnN0cnVjdG9ycyB0
YWtpbmcgbWF0cml4IGFzIGFyZ3VtZW50LgorLy8gICAtIGFycmF5IGFzICJvdXQiIGZ1bmN0aW9u
IHBhcmFtZXRlcnMKKy8vCitjbGFzcyBUVmVyc2lvbkdMU0wgOiBwdWJsaWMgVEludGVybVRyYXZl
cnNlciB7CitwdWJsaWM6CisgICAgVFZlcnNpb25HTFNMKFNoU2hhZGVyVHlwZSB0eXBlKTsKKwor
ICAgIC8vIFJldHVybnMgMTIwIGlmIHRoZSBmb2xsb3dpbmcgaXMgdXNlZCB0aGUgc2hhZGVyOgor
ICAgIC8vIC0gImludmFyaWFudCIsCisgICAgLy8gLSAiZ2xfUG9pbnRDb29yZCIsCisgICAgLy8g
LSBtYXRyaXgvbWF0cml4IGNvbnN0cnVjdG9ycworICAgIC8vIC0gYXJyYXkgIm91dCIgcGFyYW1l
dGVycworICAgIC8vIEVsc2UgMTEwIGlzIHJldHVybmVkLgorICAgIGludCBnZXRWZXJzaW9uKCkg
eyByZXR1cm4gbVZlcnNpb247IH0KKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50
ZXJtU3ltYm9sKik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJt
Q29uc3RhbnRVbmlvbiopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCwgVElu
dGVybUJpbmFyeSopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJt
VW5hcnkqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQsIFRJbnRlcm1T
ZWxlY3Rpb24qKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRl
cm1BZ2dyZWdhdGUqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRMb29wKFZpc2l0LCBUSW50ZXJt
TG9vcCopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCwgVEludGVybUJyYW5j
aCopOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCB1cGRhdGVWZXJzaW9uKGludCB2ZXJzaW9uKTsK
KworcHJpdmF0ZToKKyAgICBTaFNoYWRlclR5cGUgbVNoYWRlclR5cGU7CisgICAgaW50IG1WZXJz
aW9uOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9WRVJTSU9OR0xTTF9IXwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvY29tcGls
ZXJkZWJ1Zy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9jb21waWxlcmRlYnVnLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMGNiZTQzYjhkNTQ4YjhlMjYxODU4
YTc5NzRmMjg0MzYzNGNkODRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvY29tcGlsZXJkZWJ1Zy5jcHAKQEAgLTAsMCAr
MSwzNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gZGVidWcuY3BwOiBEZWJ1Z2dpbmcgdXRp
bGl0aWVzLgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9jb21waWxlcmRlYnVnLmgi
CisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaCIKKworI2lmZGVmIFRSQUNFX0VOQUJM
RUQKK3N0YXRpYyBjb25zdCBpbnQga1RyYWNlQnVmZmVyTGVuID0gMTAyNDsKKworZXh0ZXJuICJD
IiB7Cit2b2lkIFRyYWNlKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSB7CisgICAgaWYgKCFmb3Jt
YXQpIHJldHVybjsKKworICAgIFRQYXJzZUNvbnRleHQqIHBhcnNlQ29udGV4dCA9IEdldEdsb2Jh
bFBhcnNlQ29udGV4dCgpOworICAgIGlmIChwYXJzZUNvbnRleHQpIHsKKyAgICAgICAgY2hhciBi
dWZba1RyYWNlQnVmZmVyTGVuXTsKKyAgICAgICAgdmFfbGlzdCBhcmdzOworICAgICAgICB2YV9z
dGFydChhcmdzLCBmb3JtYXQpOworICAgICAgICB2c25wcmludGYoYnVmLCBrVHJhY2VCdWZmZXJM
ZW4sIGZvcm1hdCwgYXJncyk7CisgICAgICAgIHZhX2VuZChhcmdzKTsKKworICAgICAgICBwYXJz
ZUNvbnRleHQtPnRyYWNlKGJ1Zik7CisgICAgfQorfQorfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlm
ICAvLyBUUkFDRV9FTkFCTEVECisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL2NvbXBpbGVyZGVidWcuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2NvbXBpbGVyZGVidWcuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43YTM3MTUxNmFmMGZlZWM2MWY0NmVlMTE4MjFiYTI4ZDM1MWRkNDllCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Y29tcGlsZXJkZWJ1Zy5oCkBAIC0wLDAgKzEsNTMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
IGRlYnVnLmg6IERlYnVnZ2luZyB1dGlsaXRpZXMuCisKKyNpZm5kZWYgQ09NUElMRVJfREVCVUdf
SF8KKyNkZWZpbmUgQ09NUElMRVJfREVCVUdfSF8KKworI2luY2x1ZGUgPGFzc2VydC5oPgorCisj
aWZkZWYgX0RFQlVHCisjZGVmaW5lIFRSQUNFX0VOQUJMRUQgIC8vIGRlZmluZSB0byBlbmFibGUg
ZGVidWcgbWVzc2FnZSB0cmFjaW5nCisjZW5kaWYgIC8vIF9ERUJVRworCisvLyBPdXRwdXRzIHRl
eHQgdG8gdGhlIGRlYnVnIGxvZworI2lmZGVmIFRSQUNFX0VOQUJMRUQKKworI2lmZGVmICBfX2Nw
bHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgIC8vIF9fY3BsdXNwbHVzCit2b2lkIFRyYWNl
KGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKTsKKyNpZmRlZiAgX19jcGx1c3BsdXMKK30KKyNlbmRp
ZiAgLy8gX19jcGx1c3BsdXMKKworI2Vsc2UgICAvLyBUUkFDRV9FTkFCTEVECisKKyNkZWZpbmUg
VHJhY2UoLi4uKSAoKHZvaWQpMCkKKworI2VuZGlmICAvLyBUUkFDRV9FTkFCTEVECisKKy8vIEEg
bWFjcm8gYXNzZXJ0aW5nIGEgY29uZGl0aW9uIGFuZCBvdXRwdXR0aW5nIGZhaWx1cmVzIHRvIHRo
ZSBkZWJ1ZyBsb2cKKyNkZWZpbmUgQVNTRVJUKGV4cHJlc3Npb24pIGRvIHsgXAorICAgIGlmKCEo
ZXhwcmVzc2lvbikpIFwKKyAgICAgICAgVHJhY2UoIkFzc2VydCBmYWlsZWQ6ICVzKCVkKTogIiNl
eHByZXNzaW9uIlxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7IFwKKyAgICBhc3NlcnQoZXhw
cmVzc2lvbik7IFwKK30gd2hpbGUoMCkKKworI2RlZmluZSBVTklNUExFTUVOVEVEKCkgZG8geyBc
CisgICAgVHJhY2UoIlVuaW1wbGVtZW50ZWQgaW52b2tlZDogJXMoJWQpXG4iLCBfX0ZVTkNUSU9O
X18sIF9fTElORV9fKTsgXAorICAgIGFzc2VydChmYWxzZSk7IFwKK30gd2hpbGUoMCkKKworI2Rl
ZmluZSBVTlJFQUNIQUJMRSgpIGRvIHsgXAorICAgIFRyYWNlKCJVbnJlYWNoYWJsZSByZWFjaGVk
OiAlcyglZClcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOyBcCisgICAgYXNzZXJ0KGZhbHNl
KTsgXAorfSB3aGlsZSgwKQorCisjZW5kaWYgICAvLyBDT01QSUxFUl9ERUJVR19IXworCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9k
ZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4xOWRkZjVjNDM5MjU4ODNjNzk0YzcxNGU3OTk4NmUyM2FiYjUxNDdhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNwcApAQCAtMCwwICsxLDk3IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MTgpCisKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIgorCitURGVw
ZW5kZW5jeUdyYXBoOjpURGVwZW5kZW5jeUdyYXBoKFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlKQor
eworICAgIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpidWlsZChpbnRlcm1Ob2RlLCB0aGlzKTsK
K30KKworVERlcGVuZGVuY3lHcmFwaDo6flREZXBlbmRlbmN5R3JhcGgoKQoreworICAgIGZvciAo
VEdyYXBoTm9kZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1BbGxOb2Rlcy5iZWdpbigp
OyBpdGVyICE9IG1BbGxOb2Rlcy5lbmQoKTsgKytpdGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBo
Tm9kZSogbm9kZSA9ICppdGVyOworICAgICAgICBkZWxldGUgbm9kZTsKKyAgICB9Cit9CisKK1RH
cmFwaEFyZ3VtZW50KiBURGVwZW5kZW5jeUdyYXBoOjpjcmVhdGVBcmd1bWVudChUSW50ZXJtQWdn
cmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50TnVtYmVyKQoreworICAgIFRHcmFwaEFy
Z3VtZW50KiBhcmd1bWVudCA9IG5ldyBUR3JhcGhBcmd1bWVudChpbnRlcm1GdW5jdGlvbkNhbGws
IGFyZ3VtZW50TnVtYmVyKTsKKyAgICBtQWxsTm9kZXMucHVzaF9iYWNrKGFyZ3VtZW50KTsKKyAg
ICByZXR1cm4gYXJndW1lbnQ7Cit9CisKK1RHcmFwaEZ1bmN0aW9uQ2FsbCogVERlcGVuZGVuY3lH
cmFwaDo6Y3JlYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9u
Q2FsbCkKK3sKKyAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCA9IG5ldyBUR3Jh
cGhGdW5jdGlvbkNhbGwoaW50ZXJtRnVuY3Rpb25DYWxsKTsKKyAgICBtQWxsTm9kZXMucHVzaF9i
YWNrKGZ1bmN0aW9uQ2FsbCk7CisgICAgaWYgKGZ1bmN0aW9uQ2FsbC0+Z2V0SW50ZXJtRnVuY3Rp
b25DYWxsKCktPmlzVXNlckRlZmluZWQoKSkKKyAgICAgICAgbVVzZXJEZWZpbmVkRnVuY3Rpb25D
YWxscy5wdXNoX2JhY2soZnVuY3Rpb25DYWxsKTsKKyAgICByZXR1cm4gZnVuY3Rpb25DYWxsOwor
fQorCitUR3JhcGhTeW1ib2wqIFREZXBlbmRlbmN5R3JhcGg6OmdldE9yQ3JlYXRlU3ltYm9sKFRJ
bnRlcm1TeW1ib2wqIGludGVybVN5bWJvbCkKK3sKKyAgICBUU3ltYm9sSWRNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBtU3ltYm9sSWRNYXAuZmluZChpbnRlcm1TeW1ib2wtPmdldElkKCkpOwor
CisgICAgVEdyYXBoU3ltYm9sKiBzeW1ib2wgPSBOVUxMOworCisgICAgaWYgKGl0ZXIgIT0gbVN5
bWJvbElkTWFwLmVuZCgpKSB7CisgICAgICAgIFRTeW1ib2xJZFBhaXIgcGFpciA9ICppdGVyOwor
ICAgICAgICBzeW1ib2wgPSBwYWlyLnNlY29uZDsKKyAgICB9IGVsc2UgeworICAgICAgICBzeW1i
b2wgPSBuZXcgVEdyYXBoU3ltYm9sKGludGVybVN5bWJvbCk7CisgICAgICAgIG1BbGxOb2Rlcy5w
dXNoX2JhY2soc3ltYm9sKTsKKworICAgICAgICBUU3ltYm9sSWRQYWlyIHBhaXIoaW50ZXJtU3lt
Ym9sLT5nZXRJZCgpLCBzeW1ib2wpOworICAgICAgICBtU3ltYm9sSWRNYXAuaW5zZXJ0KHBhaXIp
OworCisgICAgICAgIC8vIFdlIHNhdmUgYWxsIHNhbXBsZXIgc3ltYm9scyBpbiBhIGNvbGxlY3Rp
b24sIHNvIHdlIGNhbiBzdGFydCBncmFwaCB0cmF2ZXJzYWxzIGZyb20gdGhlbSBxdWlja2x5Lgor
ICAgICAgICBpZiAoSXNTYW1wbGVyKGludGVybVN5bWJvbC0+Z2V0QmFzaWNUeXBlKCkpKQorICAg
ICAgICAgICAgbVNhbXBsZXJTeW1ib2xzLnB1c2hfYmFjayhzeW1ib2wpOworICAgIH0KKworICAg
IHJldHVybiBzeW1ib2w7Cit9CisKK1RHcmFwaFNlbGVjdGlvbiogVERlcGVuZGVuY3lHcmFwaDo6
Y3JlYXRlU2VsZWN0aW9uKFRJbnRlcm1TZWxlY3Rpb24qIGludGVybVNlbGVjdGlvbikKK3sKKyAg
ICBUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbiA9IG5ldyBUR3JhcGhTZWxlY3Rpb24oaW50ZXJt
U2VsZWN0aW9uKTsKKyAgICBtQWxsTm9kZXMucHVzaF9iYWNrKHNlbGVjdGlvbik7CisgICAgcmV0
dXJuIHNlbGVjdGlvbjsKK30KKworVEdyYXBoTG9vcCogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRl
TG9vcChUSW50ZXJtTG9vcCogaW50ZXJtTG9vcCkKK3sKKyAgICBUR3JhcGhMb29wKiBsb29wID0g
bmV3IFRHcmFwaExvb3AoaW50ZXJtTG9vcCk7CisgICAgbUFsbE5vZGVzLnB1c2hfYmFjayhsb29w
KTsKKyAgICByZXR1cm4gbG9vcDsKK30KKworVEdyYXBoTG9naWNhbE9wKiBURGVwZW5kZW5jeUdy
YXBoOjpjcmVhdGVMb2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJtTG9naWNhbE9wKQorewor
ICAgIFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wID0gbmV3IFRHcmFwaExvZ2ljYWxPcChpbnRl
cm1Mb2dpY2FsT3ApOworICAgIG1BbGxOb2Rlcy5wdXNoX2JhY2sobG9naWNhbE9wKTsKKyAgICBy
ZXR1cm4gbG9naWNhbE9wOworfQorCitjb25zdCBjaGFyKiBUR3JhcGhMb2dpY2FsT3A6OmdldE9w
U3RyaW5nKCkgY29uc3QKK3sKKyAgICBjb25zdCBjaGFyKiBvcFN0cmluZyA9IE5VTEw7CisgICAg
c3dpdGNoIChnZXRJbnRlcm1Mb2dpY2FsT3AoKS0+Z2V0T3AoKSkgeworICAgICAgICBjYXNlIEVP
cExvZ2ljYWxBbmQ6IG9wU3RyaW5nID0gImFuZCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcExv
Z2ljYWxPcjogb3BTdHJpbmcgPSAib3IiOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogb3BTdHJp
bmcgPSAidW5rbm93biI7IGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gb3BTdHJpbmc7Cit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjVlYTFjYmI4MzdkY2I0NGRmZjFiMTIyNTFmZTg4ZmMwZjNkOGEwNTYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9k
ZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaApAQCAtMCwwICsxLDIxMiBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpZm5kZWYgQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9ICisjZGVmaW5l
IENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfSAorCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKworI2luY2x1ZGUgPHNldD4KKyNpbmNsdWRl
IDxzdGFjaz4KKworY2xhc3MgVEdyYXBoTm9kZTsKK2NsYXNzIFRHcmFwaFBhcmVudE5vZGU7Citj
bGFzcyBUR3JhcGhBcmd1bWVudDsKK2NsYXNzIFRHcmFwaEZ1bmN0aW9uQ2FsbDsKK2NsYXNzIFRH
cmFwaFN5bWJvbDsKK2NsYXNzIFRHcmFwaFNlbGVjdGlvbjsKK2NsYXNzIFRHcmFwaExvb3A7Citj
bGFzcyBUR3JhcGhMb2dpY2FsT3A7CitjbGFzcyBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyOwor
Y2xhc3MgVERlcGVuZGVuY3lHcmFwaE91dHB1dDsKKwordHlwZWRlZiBzdGQ6OnNldDxUR3JhcGhO
b2RlKj4gVEdyYXBoTm9kZVNldDsKK3R5cGVkZWYgc3RkOjp2ZWN0b3I8VEdyYXBoTm9kZSo+IFRH
cmFwaE5vZGVWZWN0b3I7Cit0eXBlZGVmIHN0ZDo6dmVjdG9yPFRHcmFwaFN5bWJvbCo+IFRHcmFw
aFN5bWJvbFZlY3RvcjsKK3R5cGVkZWYgc3RkOjp2ZWN0b3I8VEdyYXBoRnVuY3Rpb25DYWxsKj4g
VEZ1bmN0aW9uQ2FsbFZlY3RvcjsKKworLy8KKy8vIEJhc2UgY2xhc3MgZm9yIGFsbCBkZXBlbmRl
bmN5IGdyYXBoIG5vZGVzLgorLy8KK2NsYXNzIFRHcmFwaE5vZGUgeworcHVibGljOgorICAgIFRH
cmFwaE5vZGUoVEludGVybU5vZGUqIG5vZGUpIDogaW50ZXJtTm9kZShub2RlKSB7fQorICAgIHZp
cnR1YWwgflRHcmFwaE5vZGUoKSB7fQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5k
ZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Citwcm90ZWN0ZWQ6CisgICAgVElu
dGVybU5vZGUqIGludGVybU5vZGU7Cit9OworCisvLworLy8gQmFzZSBjbGFzcyBmb3IgZGVwZW5k
ZW5jeSBncmFwaCBub2RlcyB0aGF0IG1heSBoYXZlIGNoaWxkcmVuLgorLy8KK2NsYXNzIFRHcmFw
aFBhcmVudE5vZGUgOiBwdWJsaWMgVEdyYXBoTm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoUGFy
ZW50Tm9kZShUSW50ZXJtTm9kZSogbm9kZSkgOiBUR3JhcGhOb2RlKG5vZGUpIHt9CisgICAgdmly
dHVhbCB+VEdyYXBoUGFyZW50Tm9kZSgpIHt9CisgICAgdm9pZCBhZGREZXBlbmRlbnROb2RlKFRH
cmFwaE5vZGUqIG5vZGUpIHsgaWYgKG5vZGUgIT0gdGhpcykgbURlcGVuZGVudE5vZGVzLmluc2Vy
dChub2RlKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJh
dmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Citwcml2YXRlOgorICAgIFRHcmFwaE5vZGVTZXQgbURl
cGVuZGVudE5vZGVzOworfTsKKworLy8KKy8vIEhhbmRsZSBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50
cy4KKy8vCitjbGFzcyBUR3JhcGhBcmd1bWVudCA6IHB1YmxpYyBUR3JhcGhQYXJlbnROb2RlIHsK
K3B1YmxpYzoKKyAgICBUR3JhcGhBcmd1bWVudChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5j
dGlvbkNhbGwsIGludCBhcmd1bWVudE51bWJlcikKKyAgICAgICAgOiBUR3JhcGhQYXJlbnROb2Rl
KGludGVybUZ1bmN0aW9uQ2FsbCkKKyAgICAgICAgLCBtQXJndW1lbnROdW1iZXIoYXJndW1lbnRO
dW1iZXIpIHt9CisgICAgdmlydHVhbCB+VEdyYXBoQXJndW1lbnQoKSB7fQorICAgIGNvbnN0IFRJ
bnRlcm1BZ2dyZWdhdGUqIGdldEludGVybUZ1bmN0aW9uQ2FsbCgpIGNvbnN0IHsgcmV0dXJuIGlu
dGVybU5vZGUtPmdldEFzQWdncmVnYXRlKCk7IH0KKyAgICBpbnQgZ2V0QXJndW1lbnROdW1iZXIo
KSBjb25zdCB7IHJldHVybiBtQXJndW1lbnROdW1iZXI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJh
dmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOworcHJpdmF0
ZToKKyAgICBpbnQgbUFyZ3VtZW50TnVtYmVyOworfTsKKworLy8KKy8vIEhhbmRsZSBmdW5jdGlv
biBjYWxscy4KKy8vCitjbGFzcyBUR3JhcGhGdW5jdGlvbkNhbGwgOiBwdWJsaWMgVEdyYXBoUGFy
ZW50Tm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdh
dGUqIGludGVybUZ1bmN0aW9uQ2FsbCkKKyAgICAgICAgOiBUR3JhcGhQYXJlbnROb2RlKGludGVy
bUZ1bmN0aW9uQ2FsbCkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhGdW5jdGlvbkNhbGwoKSB7fQor
ICAgIGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUqIGdldEludGVybUZ1bmN0aW9uQ2FsbCgpIGNvbnN0
IHsgcmV0dXJuIGludGVybU5vZGUtPmdldEFzQWdncmVnYXRlKCk7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOwor
fTsKKworLy8KKy8vIEhhbmRsZSBzeW1ib2xzLgorLy8KK2NsYXNzIFRHcmFwaFN5bWJvbCA6IHB1
YmxpYyBUR3JhcGhQYXJlbnROb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhTeW1ib2woVEludGVy
bVN5bWJvbCogaW50ZXJtU3ltYm9sKSA6IFRHcmFwaFBhcmVudE5vZGUoaW50ZXJtU3ltYm9sKSB7
fQorICAgIHZpcnR1YWwgflRHcmFwaFN5bWJvbCgpIHt9CisgICAgY29uc3QgVEludGVybVN5bWJv
bCogZ2V0SW50ZXJtU3ltYm9sKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNTeW1i
b2xOb2RlKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRy
YXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOworfTsKKworLy8KKy8vIEhhbmRsZSBpZiBzdGF0ZW1l
bnRzIGFuZCB0ZXJuYXJ5IG9wZXJhdG9ycy4KKy8vCitjbGFzcyBUR3JhcGhTZWxlY3Rpb24gOiBw
dWJsaWMgVEdyYXBoTm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoU2VsZWN0aW9uKFRJbnRlcm1T
ZWxlY3Rpb24qIGludGVybVNlbGVjdGlvbikgOiBUR3JhcGhOb2RlKGludGVybVNlbGVjdGlvbikg
e30KKyAgICB2aXJ0dWFsIH5UR3JhcGhTZWxlY3Rpb24oKSB7fQorICAgIGNvbnN0IFRJbnRlcm1T
ZWxlY3Rpb24qIGdldEludGVybVNlbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGludGVybU5vZGUt
PmdldEFzU2VsZWN0aW9uTm9kZSgpOyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBl
bmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK307CisKKy8vCisvLyBIYW5k
bGUgZm9yLCBkby13aGlsZSwgYW5kIHdoaWxlIGxvb3BzLgorLy8KK2NsYXNzIFRHcmFwaExvb3Ag
OiBwdWJsaWMgVEdyYXBoTm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoTG9vcChUSW50ZXJtTG9v
cCogaW50ZXJtTG9vcCkgOiBUR3JhcGhOb2RlKGludGVybUxvb3ApIHt9CisgICAgdmlydHVhbCB+
VEdyYXBoTG9vcCgpIHt9CisgICAgY29uc3QgVEludGVybUxvb3AqIGdldEludGVybUxvb3AoKSBj
b25zdCB7IHJldHVybiBpbnRlcm1Ob2RlLT5nZXRBc0xvb3BOb2RlKCk7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIp
OworfTsKKworLy8KKy8vIEhhbmRsZSBsb2dpY2FsIGFuZCwgb3IuCisvLworY2xhc3MgVEdyYXBo
TG9naWNhbE9wIDogcHVibGljIFRHcmFwaE5vZGUgeworcHVibGljOgorICAgIFRHcmFwaExvZ2lj
YWxPcChUSW50ZXJtQmluYXJ5KiBpbnRlcm1Mb2dpY2FsT3ApIDogVEdyYXBoTm9kZShpbnRlcm1M
b2dpY2FsT3ApIHt9CisgICAgdmlydHVhbCB+VEdyYXBoTG9naWNhbE9wKCkge30KKyAgICBjb25z
dCBUSW50ZXJtQmluYXJ5KiBnZXRJbnRlcm1Mb2dpY2FsT3AoKSBjb25zdCB7IHJldHVybiBpbnRl
cm1Ob2RlLT5nZXRBc0JpbmFyeU5vZGUoKTsgfQorICAgIGNvbnN0IGNoYXIqIGdldE9wU3RyaW5n
KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2
ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK307CisKKy8vCisvLyBBIGRlcGVuZGVuY3kgZ3JhcGgg
b2Ygc3ltYm9scywgZnVuY3Rpb24gY2FsbHMsIGNvbmRpdGlvbnMgZXRjLgorLy8KKy8vIFRoaXMg
Y2xhc3MgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIHRvIHRoZSBlbnRyeSBwb2ludHMgb2YgdGhlIGRl
cGVuZGVuY3kgZ3JhcGguCisvLworLy8gRGVwZW5kZW5jeSBncmFwaCBub2RlcyBzaG91bGQgYmUg
Y3JlYXRlZCBieSB1c2luZyBvbmUgb2YgdGhlIHByb3ZpZGVkICJjcmVhdGUuLi4iIG1ldGhvZHMu
CisvLyBUaGlzIGNsYXNzIChhbmQgbm9ib2R5IGVsc2UpIG1hbmFnZXMgdGhlIG1lbW9yeSBvZiB0
aGUgY3JlYXRlZCBub2Rlcy4KKy8vIE5vZGVzIG1heSBub3QgYmUgcmVtb3ZlZCBhZnRlciBiZWlu
ZyBhZGRlZCwgc28gYWxsIGNyZWF0ZWQgbm9kZXMgd2lsbCBleGlzdCB3aGlsZSB0aGUKKy8vIFRE
ZXBlbmRlbmN5R3JhcGggaW5zdGFuY2UgZXhpc3RzLgorLy8KK2NsYXNzIFREZXBlbmRlbmN5R3Jh
cGggeworcHVibGljOgorICAgIFREZXBlbmRlbmN5R3JhcGgoVEludGVybU5vZGUqIGludGVybU5v
ZGUpOworICAgIH5URGVwZW5kZW5jeUdyYXBoKCk7CisgICAgVEdyYXBoTm9kZVZlY3Rvcjo6Y29u
c3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtQWxsTm9kZXMuYmVnaW4oKTsgfQor
ICAgIFRHcmFwaE5vZGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJu
IG1BbGxOb2Rlcy5lbmQoKTsgfQorCisgICAgVEdyYXBoU3ltYm9sVmVjdG9yOjpjb25zdF9pdGVy
YXRvciBiZWdpblNhbXBsZXJTeW1ib2xzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
U2FtcGxlclN5bWJvbHMuYmVnaW4oKTsKKyAgICB9CisKKyAgICBUR3JhcGhTeW1ib2xWZWN0b3I6
OmNvbnN0X2l0ZXJhdG9yIGVuZFNhbXBsZXJTeW1ib2xzKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtU2FtcGxlclN5bWJvbHMuZW5kKCk7CisgICAgfQorCisgICAgVEZ1bmN0aW9uQ2Fs
bFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgYmVnaW5Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMuYmVn
aW4oKTsKKyAgICB9CisKKyAgICBURnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9pdGVyYXRvciBl
bmRVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMuZW5kKCk7CisgICAgfQorCisgICAgVEdyYXBoQXJn
dW1lbnQqIGNyZWF0ZUFyZ3VtZW50KFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2Fs
bCwgaW50IGFyZ3VtZW50TnVtYmVyKTsKKyAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIGNyZWF0ZUZ1
bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpOworICAgIFRH
cmFwaFN5bWJvbCogZ2V0T3JDcmVhdGVTeW1ib2woVEludGVybVN5bWJvbCogaW50ZXJtU3ltYm9s
KTsKKyAgICBUR3JhcGhTZWxlY3Rpb24qIGNyZWF0ZVNlbGVjdGlvbihUSW50ZXJtU2VsZWN0aW9u
KiBpbnRlcm1TZWxlY3Rpb24pOworICAgIFRHcmFwaExvb3AqIGNyZWF0ZUxvb3AoVEludGVybUxv
b3AqIGludGVybUxvb3ApOworICAgIFRHcmFwaExvZ2ljYWxPcCogY3JlYXRlTG9naWNhbE9wKFRJ
bnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxPcCk7Citwcml2YXRlOgorICAgIHR5cGVkZWYgVE1h
cDxpbnQsIFRHcmFwaFN5bWJvbCo+IFRTeW1ib2xJZE1hcDsKKyAgICB0eXBlZGVmIHN0ZDo6cGFp
cjxpbnQsIFRHcmFwaFN5bWJvbCo+IFRTeW1ib2xJZFBhaXI7CisKKyAgICBUR3JhcGhOb2RlVmVj
dG9yIG1BbGxOb2RlczsKKyAgICBUR3JhcGhTeW1ib2xWZWN0b3IgbVNhbXBsZXJTeW1ib2xzOwor
ICAgIFRGdW5jdGlvbkNhbGxWZWN0b3IgbVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxsczsKKyAgICBU
U3ltYm9sSWRNYXAgbVN5bWJvbElkTWFwOworfTsKKworLy8KKy8vIEZvciB0cmF2ZXJzaW5nIHRo
ZSBkZXBlbmRlbmN5IGdyYXBoLiBVc2VycyBzaG91bGQgZGVyaXZlIGZyb20gdGhpcywKKy8vIHB1
dCB0aGVpciB0cmF2ZXJzYWwgc3BlY2lmaWMgZGF0YSBpbiBpdCwgYW5kIHRoZW4gcGFzcyBpdCB0
byBhCisvLyB0cmF2ZXJzZSBtZXRob2QuCisvLworLy8gV2hlbiB1c2luZyB0aGlzLCBqdXN0IGZp
bGwgaW4gdGhlIG1ldGhvZHMgZm9yIG5vZGVzIHlvdSB3YW50IHZpc2l0ZWQuCisvLworY2xhc3Mg
VERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgVERlcGVuZGVuY3lHcmFw
aFRyYXZlcnNlcigpIDogbURlcHRoKDApIHt9CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1i
b2woVEdyYXBoU3ltYm9sKiBzeW1ib2wpIHt9OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFyZ3Vt
ZW50KFRHcmFwaEFyZ3VtZW50KiBzZWxlY3Rpb24pIHt9OworICAgIHZpcnR1YWwgdm9pZCB2aXNp
dEZ1bmN0aW9uQ2FsbChUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCkge307CisgICAg
dmlydHVhbCB2b2lkIHZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKSB7
fTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3ApIHt9OworICAg
IHZpcnR1YWwgdm9pZCB2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCkg
e307CisKKyAgICBpbnQgZ2V0RGVwdGgoKSBjb25zdCB7IHJldHVybiBtRGVwdGg7IH0KKyAgICB2
b2lkIGluY3JlbWVudERlcHRoKCkgeyArK21EZXB0aDsgfQorICAgIHZvaWQgZGVjcmVtZW50RGVw
dGgoKSB7IC0tbURlcHRoOyB9CisKKyAgICB2b2lkIGNsZWFyVmlzaXRlZCgpIHsgbVZpc2l0ZWQu
Y2xlYXIoKTsgfQorICAgIHZvaWQgbWFya1Zpc2l0ZWQoVEdyYXBoTm9kZSogbm9kZSkgeyBtVmlz
aXRlZC5pbnNlcnQobm9kZSk7IH0KKyAgICBib29sIGlzVmlzaXRlZChUR3JhcGhOb2RlKiBub2Rl
KSBjb25zdCB7IHJldHVybiBtVmlzaXRlZC5maW5kKG5vZGUpICE9IG1WaXNpdGVkLmVuZCgpOyB9
Citwcml2YXRlOgorICAgIGludCBtRGVwdGg7CisgICAgVEdyYXBoTm9kZVNldCBtVmlzaXRlZDsK
K307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9E
ZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNWYyY2JhNWZjMDE4NzM0ZDE4
NTdmZDhkNTk5ZTcwYTVmMjY3ODU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBo
QnVpbGRlci5jcHAKQEAgLTAsMCArMSwyMjcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmgiCisK
K3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OmJ1aWxkKFRJbnRlcm1Ob2RlKiBub2RlLCBU
RGVwZW5kZW5jeUdyYXBoKiBncmFwaCkKK3sKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlciBi
dWlsZGVyKGdyYXBoKTsKKyAgICBidWlsZGVyLmJ1aWxkKG5vZGUpOworfQorCitib29sIFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFn
Z3JlZ2F0ZSogaW50ZXJtQWdncmVnYXRlKQoreworICAgIHN3aXRjaCAoaW50ZXJtQWdncmVnYXRl
LT5nZXRPcCgpKSB7CisgICAgICAgIGNhc2UgRU9wRnVuY3Rpb246IHZpc2l0RnVuY3Rpb25EZWZp
bml0aW9uKGludGVybUFnZ3JlZ2F0ZSk7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEZ1bmN0aW9u
Q2FsbDogdmlzaXRGdW5jdGlvbkNhbGwoaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6IHZpc2l0QWdncmVnYXRlQ2hpbGRyZW4oaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7
CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhC
dWlsZGVyOjp2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbihUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1B
Z2dyZWdhdGUpCit7CisgICAgLy8gQ3VycmVudGx5LCB3ZSBkbyBub3Qgc3VwcG9ydCB1c2VyIGRl
ZmluZWQgZnVuY3Rpb25zLgorICAgIGlmIChpbnRlcm1BZ2dyZWdhdGUtPmdldE5hbWUoKSAhPSAi
bWFpbigiKQorICAgICAgICByZXR1cm47CisKKyAgICB2aXNpdEFnZ3JlZ2F0ZUNoaWxkcmVuKGlu
dGVybUFnZ3JlZ2F0ZSk7Cit9CisKKy8vIFRha2VzIGFuIGV4cHJlc3Npb24gbGlrZSAiZih4KSIg
YW5kIGNyZWF0ZXMgYSBkZXBlbmRlbmN5IGdyYXBoIGxpa2UKKy8vICJ4IC0+IGFyZ3VtZW50IDAg
LT4gZnVuY3Rpb24gY2FsbCIuCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEZ1
bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpCit7CisgICAg
VEdyYXBoRnVuY3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwgPSBtR3JhcGgtPmNyZWF0ZUZ1bmN0aW9u
Q2FsbChpbnRlcm1GdW5jdGlvbkNhbGwpOworCisgICAgLy8gUnVuIHRocm91Z2ggdGhlIGZ1bmN0
aW9uIGNhbGwgYXJndW1lbnRzLgorICAgIGludCBhcmd1bWVudE51bWJlciA9IDA7CisgICAgVElu
dGVybVNlcXVlbmNlJiBpbnRlcm1Bcmd1bWVudHMgPSBpbnRlcm1GdW5jdGlvbkNhbGwtPmdldFNl
cXVlbmNlKCk7CisgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBpbnRlcm1Bcmd1bWVudHMuYmVnaW4oKTsKKyAgICAgICAgIGl0ZXIgIT0gaW50ZXJtQXJndW1l
bnRzLmVuZCgpOworICAgICAgICAgKytpdGVyLCArK2FyZ3VtZW50TnVtYmVyKQorICAgIHsKKyAg
ICAgICAgVE5vZGVTZXRNYWludGFpbmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMpOworCisgICAg
ICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Bcmd1bWVudCA9ICppdGVyOworICAgICAgICBpbnRlcm1B
cmd1bWVudC0+dHJhdmVyc2UodGhpcyk7CisKKyAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBh
cmd1bWVudE5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKSB7CisgICAgICAgICAgICBUR3Jh
cGhBcmd1bWVudCogYXJndW1lbnQgPSBtR3JhcGgtPmNyZWF0ZUFyZ3VtZW50KGludGVybUZ1bmN0
aW9uQ2FsbCwgYXJndW1lbnROdW1iZXIpOworICAgICAgICAgICAgY29ubmVjdE11bHRpcGxlTm9k
ZXNUb1NpbmdsZU5vZGUoYXJndW1lbnROb2RlcywgYXJndW1lbnQpOworICAgICAgICAgICAgYXJn
dW1lbnQtPmFkZERlcGVuZGVudE5vZGUoZnVuY3Rpb25DYWxsKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIFB1c2ggdGhlIGxlZnRtb3N0IHN5bWJvbCBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwg
aW50byB0aGUgY3VycmVudCBzZXQgb2YgZGVwZW5kZW50IHN5bWJvbHMgdG8KKyAgICAvLyByZXBy
ZXNlbnQgdGhlIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwuCisgICAgLy8gVGh1cywgYW4g
ZXhwcmVzc2lvbiBsaWtlICJ5ID0gZih4KSIgd2lsbCB5aWVsZCBhIGRlcGVuZGVuY3kgZ3JhcGgg
bGlrZQorICAgIC8vICJ4IC0+IGFyZ3VtZW50IDAgLT4gZnVuY3Rpb24gY2FsbCAtPiB5Ii4KKyAg
ICAvLyBUaGlzIGxpbmUgZXNzZW50aWFsbHkgcGFzc2VzIHRoZSBmdW5jdGlvbiBjYWxsIG5vZGUg
YmFjayB1cCB0byBhbiBlYXJsaWVyIHZpc2l0QXNzaWdubWVudAorICAgIC8vIGNhbGwsIHdoaWNo
IHdpbGwgY3JlYXRlIHRoZSBjb25uZWN0aW9uICJmdW5jdGlvbiBjYWxsIC0+IHkiLgorICAgIG1O
b2RlU2V0cy5pbnNlcnRJbnRvVG9wU2V0KGZ1bmN0aW9uQ2FsbCk7Cit9CisKK3ZvaWQgVERlcGVu
ZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdncmVnYXRlQ2hpbGRyZW4oVEludGVybUFnZ3JlZ2F0
ZSogaW50ZXJtQWdncmVnYXRlKQoreworICAgIFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBp
bnRlcm1BZ2dyZWdhdGUtPmdldFNlcXVlbmNlKCk7CisgICAgZm9yKFRJbnRlcm1TZXF1ZW5jZTo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IHNlcXVlbmNlLmJlZ2luKCk7IGl0ZXIgIT0gc2VxdWVuY2Uu
ZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1DaGlsZCA9
ICppdGVyOworICAgICAgICBpbnRlcm1DaGlsZC0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorfQor
Cit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9s
KiBpbnRlcm1TeW1ib2wpCit7CisgICAgLy8gUHVzaCB0aGlzIHN5bWJvbCBpbnRvIHRoZSBzZXQg
b2YgZGVwZW5kZW50IHN5bWJvbHMgZm9yIHRoZSBjdXJyZW50IGFzc2lnbm1lbnQgb3IgY29uZGl0
aW9uCisgICAgLy8gdGhhdCB3ZSBhcmUgdHJhdmVyc2luZy4KKyAgICBUR3JhcGhTeW1ib2wqIHN5
bWJvbCA9IG1HcmFwaC0+Z2V0T3JDcmVhdGVTeW1ib2woaW50ZXJtU3ltYm9sKTsKKyAgICBtTm9k
ZVNldHMuaW5zZXJ0SW50b1RvcFNldChzeW1ib2wpOworCisgICAgLy8gSWYgdGhpcyBzeW1ib2wg
aXMgdGhlIGN1cnJlbnQgbGVmdG1vc3Qgc3ltYm9sIHVuZGVyIGFuIGFzc2lnbm1lbnQsIHJlcGxh
Y2UgdGhlIHByZXZpb3VzCisgICAgLy8gbGVmdG1vc3Qgc3ltYm9sIHdpdGggdGhpcyBzeW1ib2wu
CisgICAgaWYgKCFtTGVmdG1vc3RTeW1ib2xzLmVtcHR5KCkgJiYgbUxlZnRtb3N0U3ltYm9scy50
b3AoKSAhPSAmbVJpZ2h0U3VidHJlZSkgeworICAgICAgICBtTGVmdG1vc3RTeW1ib2xzLnBvcCgp
OworICAgICAgICBtTGVmdG1vc3RTeW1ib2xzLnB1c2goc3ltYm9sKTsKKyAgICB9Cit9CisKK2Jv
b2wgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50
ZXJtQmluYXJ5KiBpbnRlcm1CaW5hcnkpCit7CisgICAgVE9wZXJhdG9yIG9wID0gaW50ZXJtQmlu
YXJ5LT5nZXRPcCgpOworICAgIGlmIChvcCA9PSBFT3BJbml0aWFsaXplIHx8IGludGVybUJpbmFy
eS0+aXNBc3NpZ25tZW50KCkpCisgICAgICAgIHZpc2l0QXNzaWdubWVudChpbnRlcm1CaW5hcnkp
OworICAgIGVsc2UgaWYgKG9wID09IEVPcExvZ2ljYWxBbmQgfHwgb3AgPT0gRU9wTG9naWNhbE9y
KQorICAgICAgICB2aXNpdExvZ2ljYWxPcChpbnRlcm1CaW5hcnkpOworICAgIGVsc2UKKyAgICAg
ICAgdmlzaXRCaW5hcnlDaGlsZHJlbihpbnRlcm1CaW5hcnkpOworCisgICAgcmV0dXJuIGZhbHNl
OworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEFzc2lnbm1lbnQoVElu
dGVybUJpbmFyeSogaW50ZXJtQXNzaWdubWVudCkKK3sKKyAgICBUSW50ZXJtVHlwZWQqIGludGVy
bUxlZnQgPSBpbnRlcm1Bc3NpZ25tZW50LT5nZXRMZWZ0KCk7CisgICAgaWYgKCFpbnRlcm1MZWZ0
KQorICAgICAgICByZXR1cm47CisKKyAgICBUR3JhcGhTeW1ib2wqIGxlZnRtb3N0U3ltYm9sID0g
TlVMTDsKKworICAgIHsKKyAgICAgICAgVE5vZGVTZXRNYWludGFpbmVyIG5vZGVTZXRNYWludGFp
bmVyKHRoaXMpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50
YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIG1MZWZ0U3VidHJlZSk7CisgICAg
ICAgICAgICBpbnRlcm1MZWZ0LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIGxlZnRtb3N0
U3ltYm9sID0gbUxlZnRtb3N0U3ltYm9scy50b3AoKTsKKworICAgICAgICAgICAgLy8gQWZ0ZXIg
dHJhdmVyc2luZyB0aGUgbGVmdCBzdWJ0cmVlIG9mIHRoaXMgYXNzaWdubWVudCwgd2Ugc2hvdWxk
IGhhdmUgZm91bmQgYSByZWFsCisgICAgICAgICAgICAvLyBsZWZ0bW9zdCBzeW1ib2wsIGFuZCB0
aGUgbGVmdG1vc3Qgc3ltYm9sIHNob3VsZCBub3QgYmUgYSBwbGFjZWhvbGRlci4KKyAgICAgICAg
ICAgIEFTU0VSVChsZWZ0bW9zdFN5bWJvbCAhPSAmbUxlZnRTdWJ0cmVlKTsKKyAgICAgICAgICAg
IEFTU0VSVChsZWZ0bW9zdFN5bWJvbCAhPSAmbVJpZ2h0U3VidHJlZSk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1SaWdodCA9IGludGVybUFzc2lnbm1lbnQt
PmdldFJpZ2h0KCkpIHsKKyAgICAgICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIgbGVm
dG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIG1SaWdodFN1YnRyZWUpOworICAgICAgICAgICAg
aW50ZXJtUmlnaHQtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFRQ
YXJlbnROb2RlU2V0KiBhc3NpZ25tZW50Tm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0KCkpCisg
ICAgICAgICAgICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShhc3NpZ25tZW50Tm9k
ZXMsIGxlZnRtb3N0U3ltYm9sKTsKKyAgICB9CisKKyAgICAvLyBQdXNoIHRoZSBsZWZ0bW9zdCBz
eW1ib2wgb2YgdGhpcyBhc3NpZ25tZW50IGludG8gdGhlIGN1cnJlbnQgc2V0IG9mIGRlcGVuZGVu
dCBzeW1ib2xzIHRvCisgICAgLy8gcmVwcmVzZW50IHRoZSByZXN1bHQgb2YgdGhpcyBhc3NpZ25t
ZW50LgorICAgIC8vIEFuIGV4cHJlc3Npb24gbGlrZSAiYSA9IChiID0gYykiIHdpbGwgeWllbGQg
YSBkZXBlbmRlbmN5IGdyYXBoIGxpa2UgImMgLT4gYiAtPiBhIi4KKyAgICAvLyBUaGlzIGxpbmUg
ZXNzZW50aWFsbHkgcGFzc2VzIHRoZSBsZWZ0bW9zdCBzeW1ib2wgb2YgdGhlIG5lc3RlZCBhc3Np
Z25tZW50ICgiYiIgaW4gdGhpcworICAgIC8vIGV4YW1wbGUpIGJhY2sgdXAgdG8gdGhlIGVhcmxp
ZXIgdmlzaXRBc3NpZ25tZW50IGNhbGwgZm9yIHRoZSBvdXRlciBhc3NpZ25tZW50LCB3aGljaCB3
aWxsCisgICAgLy8gY3JlYXRlIHRoZSBjb25uZWN0aW9uICJiIC0+IGEiLgorICAgIG1Ob2RlU2V0
cy5pbnNlcnRJbnRvVG9wU2V0KGxlZnRtb3N0U3ltYm9sKTsKK30KKwordm9pZCBURGVwZW5kZW5j
eUdyYXBoQnVpbGRlcjo6dmlzaXRMb2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJtTG9naWNh
bE9wKQoreworICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybUxlZnQgPSBpbnRlcm1Mb2dpY2Fs
T3AtPmdldExlZnQoKSkgeworICAgICAgICBUTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lciBu
b2RlU2V0TWFpbnRhaW5lcih0aGlzKTsKKworICAgICAgICBpbnRlcm1MZWZ0LT50cmF2ZXJzZSh0
aGlzKTsKKyAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBsZWZ0Tm9kZXMgPSBtTm9kZVNldHMu
Z2V0VG9wU2V0KCkpIHsKKyAgICAgICAgICAgIFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wID0g
bUdyYXBoLT5jcmVhdGVMb2dpY2FsT3AoaW50ZXJtTG9naWNhbE9wKTsKKyAgICAgICAgICAgIGNv
bm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGxlZnROb2RlcywgbG9naWNhbE9wKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybVJpZ2h0ID0gaW50
ZXJtTG9naWNhbE9wLT5nZXRSaWdodCgpKSB7CisgICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50
YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIG1SaWdodFN1YnRyZWUpOworICAg
ICAgICBpbnRlcm1SaWdodC0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorfQorCit2b2lkIFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEJpbmFyeUNoaWxkcmVuKFRJbnRlcm1CaW5hcnkqIGlu
dGVybUJpbmFyeSkKK3sKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1MZWZ0ID0gaW50ZXJt
QmluYXJ5LT5nZXRMZWZ0KCkpCisgICAgICAgIGludGVybUxlZnQtPnRyYXZlcnNlKHRoaXMpOwor
CisgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtUmlnaHQgPSBpbnRlcm1CaW5hcnktPmdldFJp
Z2h0KCkpIHsKKyAgICAgICAgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lciBsZWZ0bW9zdFN5bWJv
bE1haW50YWluZXIodGhpcywgbVJpZ2h0U3VidHJlZSk7CisgICAgICAgIGludGVybVJpZ2h0LT50
cmF2ZXJzZSh0aGlzKTsKKyAgICB9Cit9CisKK2Jvb2wgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6
OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBpbnRlcm1TZWxl
Y3Rpb24pCit7CisgICAgaWYgKFRJbnRlcm1Ob2RlKiBpbnRlcm1Db25kaXRpb24gPSBpbnRlcm1T
ZWxlY3Rpb24tPmdldENvbmRpdGlvbigpKSB7CisgICAgICAgIFROb2RlU2V0TWFpbnRhaW5lciBu
b2RlU2V0TWFpbnRhaW5lcih0aGlzKTsKKworICAgICAgICBpbnRlcm1Db25kaXRpb24tPnRyYXZl
cnNlKHRoaXMpOworICAgICAgICBpZiAoVFBhcmVudE5vZGVTZXQqIGNvbmRpdGlvbk5vZGVzID0g
bU5vZGVTZXRzLmdldFRvcFNldCgpKSB7CisgICAgICAgICAgICBUR3JhcGhTZWxlY3Rpb24qIHNl
bGVjdGlvbiA9IG1HcmFwaC0+Y3JlYXRlU2VsZWN0aW9uKGludGVybVNlbGVjdGlvbik7CisgICAg
ICAgICAgICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShjb25kaXRpb25Ob2Rlcywg
c2VsZWN0aW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJtTm9kZSogaW50
ZXJtVHJ1ZUJsb2NrID0gaW50ZXJtU2VsZWN0aW9uLT5nZXRUcnVlQmxvY2soKSkKKyAgICAgICAg
aW50ZXJtVHJ1ZUJsb2NrLT50cmF2ZXJzZSh0aGlzKTsKKworICAgIGlmIChUSW50ZXJtTm9kZSog
aW50ZXJtRmFsc2VCbG9jayA9IGludGVybVNlbGVjdGlvbi0+Z2V0RmFsc2VCbG9jaygpKQorICAg
ICAgICBpbnRlcm1GYWxzZUJsb2NrLT50cmF2ZXJzZSh0aGlzKTsKKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRMb29wKFZpc2l0IHZp
c2l0LCBUSW50ZXJtTG9vcCogaW50ZXJtTG9vcCkKK3sKKyAgICBpZiAoVEludGVybVR5cGVkKiBp
bnRlcm1Db25kaXRpb24gPSBpbnRlcm1Mb29wLT5nZXRDb25kaXRpb24oKSkgeworICAgICAgICBU
Tm9kZVNldE1haW50YWluZXIgbm9kZVNldE1haW50YWluZXIodGhpcyk7CisKKyAgICAgICAgaW50
ZXJtQ29uZGl0aW9uLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0
KiBjb25kaXRpb25Ob2RlcyA9IG1Ob2RlU2V0cy5nZXRUb3BTZXQoKSkgeworICAgICAgICAgICAg
VEdyYXBoTG9vcCogbG9vcCA9IG1HcmFwaC0+Y3JlYXRlTG9vcChpbnRlcm1Mb29wKTsKKyAgICAg
ICAgICAgIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGNvbmRpdGlvbk5vZGVzLCBs
b29wKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJtTm9kZSogaW50ZXJtQm9k
eSA9IGludGVybUxvb3AtPmdldEJvZHkoKSkKKyAgICAgICAgaW50ZXJtQm9keS0+dHJhdmVyc2Uo
dGhpcyk7CisKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1FeHByZXNzaW9uID0gaW50ZXJt
TG9vcC0+Z2V0RXhwcmVzc2lvbigpKQorICAgICAgICBpbnRlcm1FeHByZXNzaW9uLT50cmF2ZXJz
ZSh0aGlzKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworCit2b2lkIFREZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyOjpjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShUUGFyZW50Tm9kZVNl
dCogbm9kZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUR3JhcGhOb2RlKiBub2RlKSBjb25zdAoreworICAgIGZvciAoVFBh
cmVudE5vZGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBub2Rlcy0+YmVnaW4oKTsgaXRlciAh
PSBub2Rlcy0+ZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaFBhcmVudE5vZGUq
IGN1cnJlbnROb2RlID0gKml0ZXI7CisgICAgICAgIGN1cnJlbnROb2RlLT5hZGREZXBlbmRlbnRO
b2RlKG5vZGUpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2RlcGdy
YXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZTkyOGZiNzdlYjQ4MWQ4
M2NmODVmNWZlNmMzNWZkZWExOGVjNTY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdy
YXBoQnVpbGRlci5oCkBAIC0wLDAgKzEsMTgxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBD
T01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0JVSUxERVJfSAorI2RlZmluZSBDT01Q
SUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0JVSUxERVJfSAorCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCIKKworLy8KKy8vIENy
ZWF0ZXMgYSBkZXBlbmRlbmN5IGdyYXBoIG9mIHN5bWJvbHMsIGZ1bmN0aW9uIGNhbGxzLCBjb25k
aXRpb25zIGV0Yy4gYnkgdHJhdmVyc2luZyBhCisvLyBpbnRlcm1lZGlhdGUgdHJlZS4KKy8vCitj
bGFzcyBURGVwZW5kZW5jeUdyYXBoQnVpbGRlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBidWlsZChUSW50ZXJtTm9kZSogbm9kZSwgVERlcGVu
ZGVuY3lHcmFwaCogZ3JhcGgpOworCisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRl
cm1TeW1ib2wqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1CaW5hcnkqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlz
aXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUo
VmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRM
b29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCopOworCitwcml2YXRlOgorICAgIHR5cGVkZWYg
c3RkOjpzdGFjazxUR3JhcGhTeW1ib2wqPiBUU3ltYm9sU3RhY2s7CisgICAgdHlwZWRlZiBzdGQ6
OnNldDxUR3JhcGhQYXJlbnROb2RlKj4gVFBhcmVudE5vZGVTZXQ7CisKKyAgICAvLworICAgIC8v
IEZvciBjb2xsZWN0aW5nIHRoZSBkZXBlbmRlbnQgbm9kZXMgb2YgYXNzaWdubWVudHMsIGNvbmRp
dGlvbnMsIGV0Yy4KKyAgICAvLyB3aGlsZSB0cmF2ZXJzaW5nIHRoZSBpbnRlcm1lZGlhdGUgdHJl
ZS4KKyAgICAvLworICAgIC8vIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgaXMgc3RhY2sgb2Ygc2V0cy4g
RWFjaCBzZXQgY29udGFpbnMgZGVwZW5kZW5jeSBncmFwaCBwYXJlbnQgbm9kZXMuCisgICAgLy8K
KyAgICBjbGFzcyBUTm9kZVNldFN0YWNrIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFROb2RlU2V0
U3RhY2soKSB7fTsKKyAgICAgICAgflROb2RlU2V0U3RhY2soKSB7IGNsZWFyKCk7IH0KKworICAg
ICAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBhZnRlciBhIHB1c2hTZXQuCisgICAg
ICAgIC8vIFJldHVybnMgTlVMTCBpZiB0aGUgdG9wIHNldCBpcyBlbXB0eS4KKyAgICAgICAgVFBh
cmVudE5vZGVTZXQqIGdldFRvcFNldCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVCghbm9kZVNldHMuZW1wdHkoKSk7CisgICAgICAgICAgICBUUGFyZW50Tm9kZVNldCogdG9w
U2V0ID0gbm9kZVNldHMudG9wKCk7CisgICAgICAgICAgICByZXR1cm4gIXRvcFNldC0+ZW1wdHko
KSA/IHRvcFNldCA6IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHB1c2hTZXQoKSB7
IG5vZGVTZXRzLnB1c2gobmV3IFRQYXJlbnROb2RlU2V0KCkpOyB9CisgICAgICAgIHZvaWQgcG9w
U2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKCFub2RlU2V0cy5lbXB0eSgpKTsK
KyAgICAgICAgICAgIGRlbGV0ZSBub2RlU2V0cy50b3AoKTsKKyAgICAgICAgICAgIG5vZGVTZXRz
LnBvcCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gUG9wcyB0aGUgdG9wIHNldCBhbmQgYWRk
cyBpdHMgY29udGVudHMgdG8gdGhlIG5ldyB0b3Agc2V0LgorICAgICAgICAvLyBUaGlzIHNob3Vs
ZCBvbmx5IGJlIGNhbGxlZCBhZnRlciBhIHB1c2hTZXQuCisgICAgICAgIC8vIElmIHRoZXJlIGlz
IG5vIHNldCBiZWxvdyB0aGUgdG9wIHNldCwgdGhlIHRvcCBzZXQgaXMganVzdCBkZWxldGVkLgor
ICAgICAgICB2b2lkIHBvcFNldEludG9OZXh0KCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUKCFub2RlU2V0cy5lbXB0eSgpKTsKKyAgICAgICAgICAgIFRQYXJlbnROb2RlU2V0KiBvbGRU
b3BTZXQgPSBub2RlU2V0cy50b3AoKTsKKyAgICAgICAgICAgIG5vZGVTZXRzLnBvcCgpOworCisg
ICAgICAgICAgICBpZiAoIW5vZGVTZXRzLmVtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBUUGFy
ZW50Tm9kZVNldCogbmV3VG9wU2V0ID0gbm9kZVNldHMudG9wKCk7CisgICAgICAgICAgICAgICAg
bmV3VG9wU2V0LT5pbnNlcnQob2xkVG9wU2V0LT5iZWdpbigpLCBvbGRUb3BTZXQtPmVuZCgpKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVsZXRlIG9sZFRvcFNldDsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIERvZXMgbm90aGluZyBpZiB0aGVyZSBpcyBubyB0b3Agc2V0LgorICAg
ICAgICAvLyBUaGlzIGNhbiBiZSBjYWxsZWQgd2hlbiB0aGVyZSBpcyBubyB0b3Agc2V0IGlmIHdl
IGFyZSB2aXNpdGluZworICAgICAgICAvLyBzeW1ib2xzIHRoYXQgYXJlIG5vdCB1bmRlciBhbiBh
c3NpZ25tZW50IG9yIGNvbmRpdGlvbi4KKyAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byB0cmFj
ayB0aG9zZSBzeW1ib2xzLgorICAgICAgICB2b2lkIGluc2VydEludG9Ub3BTZXQoVEdyYXBoUGFy
ZW50Tm9kZSogbm9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vZGVTZXRzLmVtcHR5
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBub2RlU2V0cy50b3Ao
KS0+aW5zZXJ0KG5vZGUpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBjbGVhcigpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHdoaWxlICghbm9kZVNldHMuZW1wdHkoKSkKKyAgICAgICAgICAg
ICAgICBwb3BTZXQoKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgdHlwZWRl
ZiBzdGQ6OnN0YWNrPFRQYXJlbnROb2RlU2V0Kj4gVFBhcmVudE5vZGVTZXRTdGFjazsKKworICAg
ICAgICBUUGFyZW50Tm9kZVNldFN0YWNrIG5vZGVTZXRzOworICAgIH07CisKKyAgICAvLworICAg
IC8vIEFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgcHVzaGVzIGEgbmV3IG5vZGUgc2V0IHdoZW4g
aW5zdGFudGlhdGVkLgorICAgIC8vIFdoZW4gdGhlIGluc3RhbmNlIGdvZXMgb3V0IG9mIHNjb3Bl
LCBpdCBhbmQgcG9wcyB0aGUgbm9kZSBzZXQuCisgICAgLy8KKyAgICBjbGFzcyBUTm9kZVNldE1h
aW50YWluZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgVE5vZGVTZXRNYWludGFpbmVyKFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyKiBmYWN0b3J5KQorICAgICAgICAgICAgOiBzZXRzKGZhY3Rvcnkt
Pm1Ob2RlU2V0cykgeyBzZXRzLnB1c2hTZXQoKTsgfQorICAgICAgICB+VE5vZGVTZXRNYWludGFp
bmVyKCkgeyBzZXRzLnBvcFNldCgpOyB9CisgICAgcHJvdGVjdGVkOgorICAgICAgICBUTm9kZVNl
dFN0YWNrJiBzZXRzOworICAgIH07CisKKyAgICAvLworICAgIC8vIEFuIGluc3RhbmNlIG9mIHRo
aXMgY2xhc3MgcHVzaGVzIGEgbmV3IG5vZGUgc2V0IHdoZW4gaW5zdGFudGlhdGVkLgorICAgIC8v
IFdoZW4gdGhlIGluc3RhbmNlIGdvZXMgb3V0IG9mIHNjb3BlLCBpdCBhbmQgcG9wcyB0aGUgdG9w
IG5vZGUgc2V0IGFuZCBhZGRzIGl0cyBjb250ZW50cyB0bworICAgIC8vIHRoZSBuZXcgdG9wIG5v
ZGUgc2V0LgorICAgIC8vCisgICAgY2xhc3MgVE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIg
eworICAgIHB1YmxpYzoKKyAgICAgICAgVE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIoVERl
cGVuZGVuY3lHcmFwaEJ1aWxkZXIqIGZhY3RvcnkpCisgICAgICAgICAgICA6IHNldHMoZmFjdG9y
eS0+bU5vZGVTZXRzKSB7IHNldHMucHVzaFNldCgpOyB9CisgICAgICAgIH5UTm9kZVNldFByb3Bh
Z2F0aW5nTWFpbnRhaW5lcigpIHsgc2V0cy5wb3BTZXRJbnRvTmV4dCgpOyB9CisgICAgcHJvdGVj
dGVkOgorICAgICAgICBUTm9kZVNldFN0YWNrJiBzZXRzOworICAgIH07CisKKyAgICAvLworICAg
IC8vIEFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3Mga2VlcHMgdHJhY2sgb2YgdGhlIGxlZnRtb3N0
IHN5bWJvbCB3aGlsZSB3ZSdyZSBleHBsb3JpbmcgYW4KKyAgICAvLyBhc3NpZ25tZW50LgorICAg
IC8vIEl0IHdpbGwgcHVzaCB0aGUgcGxhY2Vob2xkZXIgc3ltYm9sIGtMZWZ0U3VidHJlZSB3aGVu
IGluc3RhbnRpYXRlZCB1bmRlciBhIGxlZnQgc3VidHJlZSwKKyAgICAvLyBhbmQga1JpZ2h0U3Vi
dHJlZSB1bmRlciBhIHJpZ2h0IHN1YnRyZWUuCisgICAgLy8gV2hlbiBpdCBnb2VzIG91dCBvZiBz
Y29wZSwgaXQgd2lsbCBwb3AgdGhlIGxlZnRtb3N0IHN5bWJvbCBhdCB0aGUgdG9wIG9mIHRoZSBz
Y29wZS4KKyAgICAvLyBEdXJpbmcgdHJhdmVyc2FsLCB0aGUgVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXIgd2lsbCByZXBsYWNlIGtMZWZ0U3VidHJlZSB3aXRoIGEgcmVhbCBzeW1ib2wuCisgICAgLy8g
a1JpZ2h0U3VidHJlZSB3aWxsIG5ldmVyIGJlIHJlcGxhY2VkIGJ5IGEgcmVhbCBzeW1ib2wgYmVj
YXVzZSB3ZSBhcmUgdHJhY2tpbmcgdGhlIGxlZnRtb3N0CisgICAgLy8gc3ltYm9sLgorICAgIC8v
CisgICAgY2xhc3MgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lciB7CisgICAgcHVibGljOgorICAg
ICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyKiBm
YWN0b3J5LCBUR3JhcGhTeW1ib2wmIHN1YnRyZWUpCisgICAgICAgICAgICA6IGxlZnRtb3N0U3lt
Ym9scyhmYWN0b3J5LT5tTGVmdG1vc3RTeW1ib2xzKQorICAgICAgICB7CisgICAgICAgICAgICBu
ZWVkc1BsYWNlaG9sZGVyU3ltYm9sID0gbGVmdG1vc3RTeW1ib2xzLmVtcHR5KCkgfHwgbGVmdG1v
c3RTeW1ib2xzLnRvcCgpICE9ICZzdWJ0cmVlOworICAgICAgICAgICAgaWYgKG5lZWRzUGxhY2Vo
b2xkZXJTeW1ib2wpCisgICAgICAgICAgICAgICAgbGVmdG1vc3RTeW1ib2xzLnB1c2goJnN1YnRy
ZWUpOworICAgICAgICB9CisKKyAgICAgICAgflRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIoKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAobmVlZHNQbGFjZWhvbGRlclN5bWJvbCkKKyAgICAg
ICAgICAgICAgICBsZWZ0bW9zdFN5bWJvbHMucG9wKCk7CisgICAgICAgIH0KKworICAgIHByb3Rl
Y3RlZDoKKyAgICAgICAgVFN5bWJvbFN0YWNrJiBsZWZ0bW9zdFN5bWJvbHM7CisgICAgICAgIGJv
b2wgbmVlZHNQbGFjZWhvbGRlclN5bWJvbDsKKyAgICB9OworCisgICAgVERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXIoVERlcGVuZGVuY3lHcmFwaCogZ3JhcGgpCisgICAgICAgIDogVEludGVybVRyYXZl
cnNlcih0cnVlLCBmYWxzZSwgZmFsc2UpCisgICAgICAgICwgbUxlZnRTdWJ0cmVlKE5VTEwpCisg
ICAgICAgICwgbVJpZ2h0U3VidHJlZShOVUxMKQorICAgICAgICAsIG1HcmFwaChncmFwaCkge30K
KyAgICB2b2lkIGJ1aWxkKFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlKSB7IGludGVybU5vZGUtPnRy
YXZlcnNlKHRoaXMpOyB9CisKKyAgICB2b2lkIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVO
b2RlKFRQYXJlbnROb2RlU2V0KiBub2RlcywgVEdyYXBoTm9kZSogbm9kZSkgY29uc3Q7CisKKyAg
ICB2b2lkIHZpc2l0QXNzaWdubWVudChUSW50ZXJtQmluYXJ5Kik7CisgICAgdm9pZCB2aXNpdExv
Z2ljYWxPcChUSW50ZXJtQmluYXJ5Kik7CisgICAgdm9pZCB2aXNpdEJpbmFyeUNoaWxkcmVuKFRJ
bnRlcm1CaW5hcnkqKTsKKyAgICB2b2lkIHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFRJbnRlcm1B
Z2dyZWdhdGUqKTsKKyAgICB2b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUq
IGludGVybUZ1bmN0aW9uQ2FsbCk7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZUNoaWxkcmVuKFRJ
bnRlcm1BZ2dyZWdhdGUqKTsKKworICAgIFRHcmFwaFN5bWJvbCBtTGVmdFN1YnRyZWU7CisgICAg
VEdyYXBoU3ltYm9sIG1SaWdodFN1YnRyZWU7CisKKyAgICBURGVwZW5kZW5jeUdyYXBoKiBtR3Jh
cGg7CisgICAgVE5vZGVTZXRTdGFjayBtTm9kZVNldHM7CisgICAgVFN5bWJvbFN0YWNrIG1MZWZ0
bW9zdFN5bWJvbHM7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVO
Q1lfR1JBUEhfQlVJTERFUl9ICmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3Jh
cGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMjI2MzMzNTQ1ZjczYTdk
ODVkZmI3NDIwYjQ1YzFhNzkzZTQ4MGI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdy
YXBoT3V0cHV0LmNwcApAQCAtMCwwICsxLDY1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisK
K3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6b3V0cHV0SW5kZW50YXRpb24oKQoreworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgZ2V0RGVwdGgoKTsgKytpKQorICAgICAgICBtU2luayA8PCAi
ICAiOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0QXJndW1lbnQoVEdy
YXBoQXJndW1lbnQqIHBhcmFtZXRlcikKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAg
IG1TaW5rIDw8ICJhcmd1bWVudCAiIDw8IHBhcmFtZXRlci0+Z2V0QXJndW1lbnROdW1iZXIoKSA8
PCAiIG9mIGNhbGwgdG8gIgorICAgICAgICAgIDw8IHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rp
b25DYWxsKCktPmdldE5hbWUoKSA8PCAiXG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhP
dXRwdXQ6OnZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxs
KQoreworICAgIG91dHB1dEluZGVudGF0aW9uKCk7CisgICAgbVNpbmsgPDwgImZ1bmN0aW9uIGNh
bGwgIiA8PCAgZnVuY3Rpb25DYWxsLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKS0+Z2V0TmFtZSgp
IDw8ICJcbiI7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRTeW1ib2wo
VEdyYXBoU3ltYm9sKiBzeW1ib2wpCit7CisgICAgb3V0cHV0SW5kZW50YXRpb24oKTsKKyAgICBt
U2luayA8PCBzeW1ib2wtPmdldEludGVybVN5bWJvbCgpLT5nZXRTeW1ib2woKSA8PCAiIChzeW1i
b2wgaWQ6ICIKKyAgICAgICAgICA8PCBzeW1ib2wtPmdldEludGVybVN5bWJvbCgpLT5nZXRJZCgp
IDw8ICIpXG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0U2VsZWN0
aW9uKFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKQoreworICAgIG91dHB1dEluZGVudGF0aW9u
KCk7CisgICAgbVNpbmsgPDwgInNlbGVjdGlvblxuIjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdy
YXBoT3V0cHV0Ojp2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCkKK3sKKyAgICBvdXRwdXRJbmRl
bnRhdGlvbigpOworICAgIG1TaW5rIDw8ICJsb29wIGNvbmRpdGlvblxuIjsKK30KKwordm9pZCBU
RGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxv
Z2ljYWxPcCkKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5rIDw8ICJsb2dp
Y2FsICIgPDwgbG9naWNhbE9wLT5nZXRPcFN0cmluZygpIDw8ICJcbiI7Cit9CisKK3ZvaWQgVERl
cGVuZGVuY3lHcmFwaE91dHB1dDo6b3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhURGVwZW5kZW5jeUdy
YXBoJiBncmFwaCkKK3sKKyAgICBtU2luayA8PCAiXG4iOworCisgICAgZm9yIChUR3JhcGhOb2Rl
VmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZ3JhcGguYmVnaW4oKTsgaXRlciAhPSBncmFw
aC5lbmQoKTsgKytpdGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBoTm9kZSogc3ltYm9sID0gKml0
ZXI7CisgICAgICAgIG1TaW5rIDw8ICItLS0gRGVwZW5kZW5jeSBncmFwaCBzcGFubmluZyB0cmVl
IC0tLVxuIjsKKyAgICAgICAgY2xlYXJWaXNpdGVkKCk7CisgICAgICAgIHN5bWJvbC0+dHJhdmVy
c2UodGhpcyk7CisgICAgICAgIG1TaW5rIDw8ICJcbiI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgv
RGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5jM2E0MTEyMjc4ZmJiZDRmMDkxNzUzZThkNDQ0NTQxNTVjYzE3MjVhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgKQEAgLTAsMCArMSwzMCBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9PVVRQ
VVRfSAorI2RlZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX09VVFBVVF9I
CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKKworY2xhc3Mg
VERlcGVuZGVuY3lHcmFwaE91dHB1dCA6IHB1YmxpYyBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2Vy
IHsKK3B1YmxpYzoKKyAgICBURGVwZW5kZW5jeUdyYXBoT3V0cHV0KFRJbmZvU2lua0Jhc2UmIHNp
bmspIDogbVNpbmsoc2luaykge30KKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEdyYXBo
U3ltYm9sKiBzeW1ib2wpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFyZ3VtZW50KFRHcmFwaEFy
Z3VtZW50KiBwYXJhbWV0ZXIpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdEZ1bmN0aW9uQ2FsbChU
R3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCk7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0
U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3ApOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvZ2lj
YWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCk7CisKKyAgICB2b2lkIG91dHB1dEFsbFNw
YW5uaW5nVHJlZXMoVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpOworcHJpdmF0ZToKKyAgICB2b2lk
IG91dHB1dEluZGVudGF0aW9uKCk7CisKKyAgICBUSW5mb1NpbmtCYXNlJiBtU2luazsKK307CisK
KyNlbmRpZiAgLy8gQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9PVVRQVVRfSApk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBo
VHJhdmVyc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5N2ZkZTk3ZTI2MGQwYjUwMmUxNGQ5ODBjNWU2ZmNk
MTg4MDc2MWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAK
QEAgLTAsMCArMSw2OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorCisvLyBUaGVzZSBtZXRob2RzIGRv
IGEgYnJlYWR0aC1maXJzdCB0cmF2ZXJzYWwgdGhyb3VnaCB0aGUgZ3JhcGggYW5kIG1hcmsgdmlz
aXRlZCBub2Rlcy4KKwordm9pZCBUR3JhcGhOb2RlOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBo
VHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+bWFya1Zp
c2l0ZWQodGhpcyk7Cit9CisKK3ZvaWQgVEdyYXBoUGFyZW50Tm9kZTo6dHJhdmVyc2UoVERlcGVu
ZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCit7CisgICAgVEdyYXBoTm9kZTo6
dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworCisgICAgZ3JhcGhUcmF2ZXJzZXItPmluY3JlbWVu
dERlcHRoKCk7CisKKyAgICAvLyBWaXNpdCB0aGUgcGFyZW50IG5vZGUncyBjaGlsZHJlbi4KKyAg
ICBmb3IgKFRHcmFwaE5vZGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtRGVwZW5kZW50Tm9k
ZXMuYmVnaW4oKTsKKyAgICAgICAgIGl0ZXIgIT0gbURlcGVuZGVudE5vZGVzLmVuZCgpOworICAg
ICAgICAgKytpdGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBoTm9kZSogbm9kZSA9ICppdGVyOwor
ICAgICAgICBpZiAoIWdyYXBoVHJhdmVyc2VyLT5pc1Zpc2l0ZWQobm9kZSkpCisgICAgICAgICAg
ICBub2RlLT50cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7CisgICAgfQorCisgICAgZ3JhcGhUcmF2
ZXJzZXItPmRlY3JlbWVudERlcHRoKCk7Cit9CisKK3ZvaWQgVEdyYXBoQXJndW1lbnQ6OnRyYXZl
cnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdy
YXBoVHJhdmVyc2VyLT52aXNpdEFyZ3VtZW50KHRoaXMpOworICAgIFRHcmFwaFBhcmVudE5vZGU6
OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhGdW5jdGlvbkNhbGw6
OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQorewor
ICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdEZ1bmN0aW9uQ2FsbCh0aGlzKTsKKyAgICBUR3JhcGhQ
YXJlbnROb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CisKK3ZvaWQgVEdyYXBoU3lt
Ym9sOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikK
K3sKKyAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRTeW1ib2wodGhpcyk7CisgICAgVEdyYXBoUGFy
ZW50Tm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworfQorCit2b2lkIFRHcmFwaFNlbGVj
dGlvbjo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIp
Cit7CisgICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0U2VsZWN0aW9uKHRoaXMpOworICAgIFRHcmFw
aE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhMb29wOjp0
cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAg
ICBncmFwaFRyYXZlcnNlci0+dmlzaXRMb29wKHRoaXMpOworICAgIFRHcmFwaE5vZGU6OnRyYXZl
cnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhMb2dpY2FsT3A6OnRyYXZlcnNl
KFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBo
VHJhdmVyc2VyLT52aXNpdExvZ2ljYWxPcCh0aGlzKTsKKyAgICBUR3JhcGhOb2RlOjp0cmF2ZXJz
ZShncmFwaFRyYXZlcnNlcik7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nZW5lcmF0ZV9wYXJzZXIuc2ggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nZW5lcmF0ZV9wYXJzZXIuc2gK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZTQ3MjE5MTVlM2NmYjI3Yzg3ZmY5M2EwZjk1M2FkOTE2NDNjYzZiNwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL2dlbmVyYXRlX3BhcnNlci5zaApAQCAtMCwwICsxLDI3IEBACisjIS9iaW4vYmFzaAor
IyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorCisjIEdlbmVyYXRlcyBHTFNMIEVTIHBhcnNlciAtIGdsc2xhbmdfbGV4LmNwcCwgZ2xzbGFu
Z190YWIuaCwgYW5kIGdsc2xhbmdfdGFiLmNwcAorCitydW5fZmxleCgpCit7CitpbnB1dF9maWxl
PSRzY3JpcHRfZGlyLyQxLmwKK291dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIvJDFfbGV4LmNwcAor
ZmxleCAtLW5vbGluZSAtLW5vdW5pc3RkIC0tb3V0ZmlsZT0kb3V0cHV0X3NvdXJjZSAkaW5wdXRf
ZmlsZQorfQorCitydW5fYmlzb24oKQoreworaW5wdXRfZmlsZT0kc2NyaXB0X2Rpci8kMS55Citv
dXRwdXRfaGVhZGVyPSRzY3JpcHRfZGlyLyQxX3RhYi5oCitvdXRwdXRfc291cmNlPSRzY3JpcHRf
ZGlyLyQxX3RhYi5jcHAKK2Jpc29uIC0tbm8tbGluZXMgLS1za2VsZXRvbj15YWNjLmMgLS1kZWZp
bmVzPSRvdXRwdXRfaGVhZGVyIC0tb3V0cHV0PSRvdXRwdXRfc291cmNlICRpbnB1dF9maWxlCit9
CisKK3NjcmlwdF9kaXI9JChkaXJuYW1lICQwKQorCisjIEdlbmVyYXRlIFBhcnNlcgorcnVuX2Zs
ZXggZ2xzbGFuZworcnVuX2Jpc29uIGdsc2xhbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mMjIxMTk5MDkzYzIxYWI5N2Y4MjFhNmZiNmIxODQ4MjE2ZTIyODUxCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xz
bGFuZy5oCkBAIC0wLDAgKzEsMTYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCitzdHJ1Y3QgVFBhcnNlQ29u
dGV4dDsKK2V4dGVybiBpbnQgZ2xzbGFuZ19pbml0aWFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRl
eHQpOworZXh0ZXJuIGludCBnbHNsYW5nX2ZpbmFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRleHQp
OworCitleHRlcm4gaW50IGdsc2xhbmdfc2NhbihzaXplX3QgY291bnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGludCBsZW5ndGhbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRQYXJz
ZUNvbnRleHQqIGNvbnRleHQpOworZXh0ZXJuIGludCBnbHNsYW5nX3BhcnNlKFRQYXJzZUNvbnRl
eHQqIGNvbnRleHQpOworCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nLmwgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nLmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmI2MjNlYzQxMDYy
YmU2Y2E4OWQ4MjU4NDczYWI4MGJhNzdhZDFkZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcubApAQCAtMCww
ICsxLDM1NSBAQAorLyoKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK1RoaXMgZmlsZSBjb250YWlucyB0
aGUgTGV4IHNwZWNpZmljYXRpb24gZm9yIEdMU0wgRVMuCitCYXNlZCBvbiBBTlNJIEMgZ3JhbW1h
ciwgTGV4IHNwZWNpZmljYXRpb246CitodHRwOi8vd3d3Lmx5c2F0b3IubGl1LnNlL2MvQU5TSS1D
LWdyYW1tYXItbC5odG1sCisKK0lGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQg
VE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaCwKK1dISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBM
RVhFUiAoZ2xzbGFuZ19sZXguY3BwKS4KKyovCisKKyV0b3B7CisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8g
VGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9U
IEVESVQhCisKKy8vIElnbm9yZSBlcnJvcnMgaW4gYXV0by1nZW5lcmF0ZWQgY29kZS4KKyNpZiBk
ZWZpbmVkKF9fR05VQ19fKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNl
ZC1mdW5jdGlvbiIKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtdmFy
aWFibGUiCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc3dpdGNoLWVudW0iCisj
ZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQwNjUpCisj
cHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDE4OSkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0
NTA1KQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEpCisjZW5kaWYKK30KKworJXsKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nl
c3Nvci9Ub2tlbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuaCIKKworLyogd2luZG93cyBv
bmx5IHByYWdtYSAqLworI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZSA6
IDQxMDIpCisjZW5kaWYKKworI2RlZmluZSBZWV9VU0VSX0FDVElPTiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICB5eWxsb2MtPmZpcnN0X2ZpbGUgPSB5eWxsb2MtPmxhc3Rf
ZmlsZSA9IHl5Y29sdW1uOyBcCisgICAgeXlsbG9jLT5maXJzdF9saW5lID0geXlsbG9jLT5sYXN0
X2xpbmUgPSB5eWxpbmVubzsKKworI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4X3Np
emUpIFwKKyAgICByZXN1bHQgPSBzdHJpbmdfaW5wdXQoYnVmLCBtYXhfc2l6ZSwgeXlzY2FubmVy
KTsKKworc3RhdGljIHl5X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCB5eV9zaXplX3Qg
bWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcik7CitzdGF0aWMgaW50IGNoZWNrX3R5cGUoeXlz
Y2FuX3QgeXlzY2FubmVyKTsKK3N0YXRpYyBpbnQgcmVzZXJ2ZWRfd29yZCh5eXNjYW5fdCB5eXNj
YW5uZXIpOworc3RhdGljIGludCBpbnRfY29uc3RhbnQoeXlzY2FuX3QgeXlzY2FubmVyKTsKK3N0
YXRpYyBpbnQgZmxvYXRfY29uc3RhbnQoeXlzY2FuX3QgeXlzY2FubmVyKTsKKyV9CisKKyVvcHRp
b24gbm95eXdyYXAgbm91bnB1dCBuZXZlci1pbnRlcmFjdGl2ZQorJW9wdGlvbiB5eWxpbmVubyBy
ZWVudHJhbnQgYmlzb24tYnJpZGdlIGJpc29uLWxvY2F0aW9ucworJW9wdGlvbiBleHRyYS10eXBl
PSJUUGFyc2VDb250ZXh0KiIKKworRCAgICAgICAgICAgWzAtOV0KK0wgICAgICAgICAgIFthLXpB
LVpfXQorSCAgICAgICAgICAgW2EtZkEtRjAtOV0KK0UgICAgICAgICAgIFtFZV1bKy1dP3tEfSsK
K08gICAgICAgICAgIFswLTddCisKKyUlCisKKyJpbnZhcmlhbnQiICAgIHsgcmV0dXJuIElOVkFS
SUFOVDsgfQorImhpZ2hwIiAgICAgICAgeyByZXR1cm4gSElHSF9QUkVDSVNJT047IH0KKyJtZWRp
dW1wIiAgICAgIHsgcmV0dXJuIE1FRElVTV9QUkVDSVNJT047IH0KKyJsb3dwIiAgICAgICAgIHsg
cmV0dXJuIExPV19QUkVDSVNJT047IH0KKyJwcmVjaXNpb24iICAgIHsgcmV0dXJuIFBSRUNJU0lP
TjsgfQorCisiYXR0cmlidXRlIiAgICB7IHJldHVybiBBVFRSSUJVVEU7IH0KKyJjb25zdCIgICAg
ICAgIHsgcmV0dXJuIENPTlNUX1FVQUw7IH0KKyJ1bmlmb3JtIiAgICAgIHsgcmV0dXJuIFVOSUZP
Uk07IH0KKyJ2YXJ5aW5nIiAgICAgIHsgcmV0dXJuIFZBUllJTkc7IH0KKworImJyZWFrIiAgICAg
ICAgeyByZXR1cm4gQlJFQUs7IH0KKyJjb250aW51ZSIgICAgIHsgcmV0dXJuIENPTlRJTlVFOyB9
CisiZG8iICAgICAgICAgICB7IHJldHVybiBETzsgfQorImZvciIgICAgICAgICAgeyByZXR1cm4g
Rk9SOyB9Cisid2hpbGUiICAgICAgICB7IHJldHVybiBXSElMRTsgfQorCisiaWYiICAgICAgICAg
ICB7IHJldHVybiBJRjsgfQorImVsc2UiICAgICAgICAgeyByZXR1cm4gRUxTRTsgfQorCisiaW4i
ICAgICAgICAgICB7IHJldHVybiBJTl9RVUFMOyB9Cisib3V0IiAgICAgICAgICB7IHJldHVybiBP
VVRfUVVBTDsgfQorImlub3V0IiAgICAgICAgeyByZXR1cm4gSU5PVVRfUVVBTDsgfQorCisiZmxv
YXQiICAgICAgICB7IHJldHVybiBGTE9BVF9UWVBFOyB9CisiaW50IiAgICAgICAgICB7IHJldHVy
biBJTlRfVFlQRTsgfQorInZvaWQiICAgICAgICAgeyByZXR1cm4gVk9JRF9UWVBFOyB9CisiYm9v
bCIgICAgICAgICB7IHJldHVybiBCT09MX1RZUEU7IH0KKyJ0cnVlIiAgICAgICAgIHsgeXlsdmFs
LT5sZXguYiA9IHRydWU7ICByZXR1cm4gQk9PTENPTlNUQU5UOyB9CisiZmFsc2UiICAgICAgICB7
IHl5bHZhbC0+bGV4LmIgPSBmYWxzZTsgcmV0dXJuIEJPT0xDT05TVEFOVDsgfQorCisiZGlzY2Fy
ZCIgICAgICB7IHJldHVybiBESVNDQVJEOyB9CisicmV0dXJuIiAgICAgICB7IHJldHVybiBSRVRV
Uk47IH0KKworIm1hdDIiICAgICAgICAgeyByZXR1cm4gTUFUUklYMjsgfQorIm1hdDMiICAgICAg
ICAgeyByZXR1cm4gTUFUUklYMzsgfQorIm1hdDQiICAgICAgICAgeyByZXR1cm4gTUFUUklYNDsg
fQorCisidmVjMiIgICAgICAgICB7IHJldHVybiBWRUMyOyB9CisidmVjMyIgICAgICAgICB7IHJl
dHVybiBWRUMzOyB9CisidmVjNCIgICAgICAgICB7IHJldHVybiBWRUM0OyB9CisiaXZlYzIiICAg
ICAgICB7IHJldHVybiBJVkVDMjsgfQorIml2ZWMzIiAgICAgICAgeyByZXR1cm4gSVZFQzM7IH0K
KyJpdmVjNCIgICAgICAgIHsgcmV0dXJuIElWRUM0OyB9CisiYnZlYzIiICAgICAgICB7IHJldHVy
biBCVkVDMjsgfQorImJ2ZWMzIiAgICAgICAgeyByZXR1cm4gQlZFQzM7IH0KKyJidmVjNCIgICAg
ICAgIHsgcmV0dXJuIEJWRUM0OyB9CisKKyJzYW1wbGVyMkQiICAgICAgICAgIHsgcmV0dXJuIFNB
TVBMRVIyRDsgfQorInNhbXBsZXJDdWJlIiAgICAgICAgeyByZXR1cm4gU0FNUExFUkNVQkU7IH0K
KyJzYW1wbGVyRXh0ZXJuYWxPRVMiIHsgcmV0dXJuIFNBTVBMRVJfRVhURVJOQUxfT0VTOyB9Cisi
c2FtcGxlcjJEUmVjdCIgICAgICB7IHJldHVybiBTQU1QTEVSMkRSRUNUOyB9CisKKyJzdHJ1Y3Qi
ICAgICAgIHsgcmV0dXJuIFNUUlVDVDsgfQorCisiYXNtIiAgICAgICAgICB7IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworImNsYXNzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisidW5pb24iICAgICAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KKyJlbnVtIiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQorInR5cGVkZWYiICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9CisidGVtcGxhdGUiICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KKyJ0aGlzIiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQorInBhY2tlZCIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisK
KyJnb3RvIiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInN3
aXRjaCIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZGVmYXVs
dCIgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworImlubGluZSIg
ICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisibm9pbmxpbmUiICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJ2b2xhdGlsZSIgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInB1YmxpYyIgICAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic3RhdGljIiAgICAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJleHRlcm4iICAgICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImV4dGVybmFsIiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9CisiaW50ZXJmYWNlIiAgICB7IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KKyJmbGF0IiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQorCisibG9uZyIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KKyJzaG9ydCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQorImRvdWJsZSIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
CisiaGFsZiIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJm
aXhlZCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInVuc2ln
bmVkIiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic3VwZXJwIiAg
ICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworImlucHV0IiAgICAg
ICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisib3V0cHV0IiAgICAgICB7
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworImh2ZWMyIiAgICAgICAgeyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiaHZlYzMiICAgICAgICB7IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJodmVjNCIgICAgICAgIHsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImR2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZHZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KKyJkdmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQorImZ2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9CisiZnZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KKyJmdmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQorCisic2FtcGxlcjFEIiAgICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9Cisic2FtcGxlcjNEIiAgICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9Cisic2FtcGxlcjFEU2hhZG93IiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9Cisic2FtcGxlcjJEU2hhZG93IiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxlcjNEUmVjdCIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxlcjJEUmVjdFNoYWRvdyIgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisKKyJzaXplb2YiICAgICAgIHsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQorImNhc3QiICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9CisKKyJuYW1lc3BhY2UiICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQorInVzaW5nIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9CisKK3tMfSh7TH18e0R9KSogICAgICAgeworICAgeXlsdmFsLT5sZXguc3RyaW5n
ID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsgCisgICByZXR1cm4gY2hlY2tfdHlwZSh5eXNjYW5u
ZXIpOworfQorCiswW3hYXXtIfSsgICAgICAgICB7IHJldHVybiBpbnRfY29uc3RhbnQoeXlzY2Fu
bmVyKTsgfQorMHtPfSsgICAgICAgICAgICAgeyByZXR1cm4gaW50X2NvbnN0YW50KHl5c2Nhbm5l
cik7IH0KK3tEfSsgICAgICAgICAgICAgIHsgcmV0dXJuIGludF9jb25zdGFudCh5eXNjYW5uZXIp
OyB9CisKK3tEfSt7RX0gICAgICAgICAgIHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nhbm5l
cik7IH0KK3tEfSsiLiJ7RH0qKHtFfSk/IHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nhbm5l
cik7IH0KKyIuIntEfSsoe0V9KT8gICAgIHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nhbm5l
cik7IH0KKworIis9IiAgICAgICAgICAgIHsgcmV0dXJuIEFERF9BU1NJR047IH0KKyItPSIgICAg
ICAgICAgICB7IHJldHVybiBTVUJfQVNTSUdOOyB9CisiKj0iICAgICAgICAgICAgeyByZXR1cm4g
TVVMX0FTU0lHTjsgfQorIi89IiAgICAgICAgICAgIHsgcmV0dXJuIERJVl9BU1NJR047IH0KKyIl
PSIgICAgICAgICAgICB7IHJldHVybiBNT0RfQVNTSUdOOyB9CisiPDw9IiAgICAgICAgICAgeyBy
ZXR1cm4gTEVGVF9BU1NJR047IH0KKyI+Pj0iICAgICAgICAgICB7IHJldHVybiBSSUdIVF9BU1NJ
R047IH0KKyImPSIgICAgICAgICAgICB7IHJldHVybiBBTkRfQVNTSUdOOyB9CisiXj0iICAgICAg
ICAgICAgeyByZXR1cm4gWE9SX0FTU0lHTjsgfQorInw9IiAgICAgICAgICAgIHsgcmV0dXJuIE9S
X0FTU0lHTjsgfQorCisiKysiICAgICAgICAgICAgeyByZXR1cm4gSU5DX09QOyB9CisiLS0iICAg
ICAgICAgICAgeyByZXR1cm4gREVDX09QOyB9CisiJiYiICAgICAgICAgICAgeyByZXR1cm4gQU5E
X09QOyB9CisifHwiICAgICAgICAgICAgeyByZXR1cm4gT1JfT1A7IH0KKyJeXiIgICAgICAgICAg
ICB7IHJldHVybiBYT1JfT1A7IH0KKyI8PSIgICAgICAgICAgICB7IHJldHVybiBMRV9PUDsgfQor
Ij49IiAgICAgICAgICAgIHsgcmV0dXJuIEdFX09QOyB9CisiPT0iICAgICAgICAgICAgeyByZXR1
cm4gRVFfT1A7IH0KKyIhPSIgICAgICAgICAgICB7IHJldHVybiBORV9PUDsgfQorIjw8IiAgICAg
ICAgICAgIHsgcmV0dXJuIExFRlRfT1A7IH0KKyI+PiIgICAgICAgICAgICB7IHJldHVybiBSSUdI
VF9PUDsgfQorIjsiICAgICAgICAgICAgIHsgcmV0dXJuIFNFTUlDT0xPTjsgfQorKCJ7InwiPCUi
KSAgICAgIHsgcmV0dXJuIExFRlRfQlJBQ0U7IH0KKygifSJ8IiU+IikgICAgICB7IHJldHVybiBS
SUdIVF9CUkFDRTsgfQorIiwiICAgICAgICAgeyByZXR1cm4gQ09NTUE7IH0KKyI6IiAgICAgICAg
IHsgcmV0dXJuIENPTE9OOyB9CisiPSIgICAgICAgICB7IHJldHVybiBFUVVBTDsgfQorIigiICAg
ICAgICAgeyByZXR1cm4gTEVGVF9QQVJFTjsgfQorIikiICAgICAgICAgeyByZXR1cm4gUklHSFRf
UEFSRU47IH0KKygiWyJ8Ijw6IikgIHsgcmV0dXJuIExFRlRfQlJBQ0tFVDsgfQorKCJdInwiOj4i
KSAgeyByZXR1cm4gUklHSFRfQlJBQ0tFVDsgfQorIi4iICAgICAgICAgeyByZXR1cm4gRE9UOyB9
CisiISIgICAgICAgICB7IHJldHVybiBCQU5HOyB9CisiLSIgICAgICAgICB7IHJldHVybiBEQVNI
OyB9CisifiIgICAgICAgICB7IHJldHVybiBUSUxERTsgfQorIisiICAgICAgICAgeyByZXR1cm4g
UExVUzsgfQorIioiICAgICAgICAgeyByZXR1cm4gU1RBUjsgfQorIi8iICAgICAgICAgeyByZXR1
cm4gU0xBU0g7IH0KKyIlIiAgICAgICAgIHsgcmV0dXJuIFBFUkNFTlQ7IH0KKyI8IiAgICAgICAg
IHsgcmV0dXJuIExFRlRfQU5HTEU7IH0KKyI+IiAgICAgICAgIHsgcmV0dXJuIFJJR0hUX0FOR0xF
OyB9CisifCIgICAgICAgICB7IHJldHVybiBWRVJUSUNBTF9CQVI7IH0KKyJeIiAgICAgICAgIHsg
cmV0dXJuIENBUkVUOyB9CisiJiIgICAgICAgICB7IHJldHVybiBBTVBFUlNBTkQ7IH0KKyI/IiAg
ICAgICAgIHsgcmV0dXJuIFFVRVNUSU9OOyB9CisKK1sgXHRcdlxuXGZccl0geyB9Cis8PEVPRj4+
ICAgIHsgeXl0ZXJtaW5hdGUoKTsgfQorLiAgICAgICAgICB7IGFzc2VydChmYWxzZSk7IHJldHVy
biAwOyB9CisKKyUlCisKK3l5X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCB5eV9zaXpl
X3QgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikgeworICAgIHBwOjpUb2tlbiB0b2tlbjsK
KyAgICB5eWdldF9leHRyYSh5eXNjYW5uZXIpLT5wcmVwcm9jZXNzb3IubGV4KCZ0b2tlbik7Cisg
ICAgeXlfc2l6ZV90IGxlbiA9IHRva2VuLnR5cGUgPT0gcHA6OlRva2VuOjpMQVNUID8gMCA6IHRv
a2VuLnRleHQuc2l6ZSgpOworICAgIGlmIChsZW4gPCBtYXhfc2l6ZSkKKyAgICAgICAgbWVtY3B5
KGJ1ZiwgdG9rZW4udGV4dC5jX3N0cigpLCBsZW4pOworICAgIHl5c2V0X2NvbHVtbih0b2tlbi5s
b2NhdGlvbi5maWxlLCB5eXNjYW5uZXIpOworICAgIHl5c2V0X2xpbmVubyh0b2tlbi5sb2NhdGlv
bi5saW5lLCB5eXNjYW5uZXIpOworCisgICAgaWYgKGxlbiA+PSBtYXhfc2l6ZSkKKyAgICAgICAg
WVlfRkFUQUxfRVJST1IoIklucHV0IGJ1ZmZlciBvdmVyZmxvdyIpOworICAgIGVsc2UgaWYgKGxl
biA+IDApCisgICAgICAgIGJ1ZltsZW4rK10gPSAnICc7CisgICAgcmV0dXJuIGxlbjsKK30KKwor
aW50IGNoZWNrX3R5cGUoeXlzY2FuX3QgeXlzY2FubmVyKSB7CisgICAgc3RydWN0IHl5Z3V0c190
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgeXlzY2FubmVyOworICAgIAorICAgIGludCB0b2tl
biA9IElERU5USUZJRVI7CisgICAgVFN5bWJvbCogc3ltYm9sID0geXlleHRyYS0+c3ltYm9sVGFi
bGUuZmluZCh5eXRleHQpOworICAgIGlmIChzeW1ib2wgJiYgc3ltYm9sLT5pc1ZhcmlhYmxlKCkp
IHsKKyAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+
KHN5bWJvbCk7CisgICAgICAgIGlmICh2YXJpYWJsZS0+aXNVc2VyVHlwZSgpKQorICAgICAgICAg
ICAgdG9rZW4gPSBUWVBFX05BTUU7CisgICAgfQorICAgIHl5bHZhbC0+bGV4LnN5bWJvbCA9IHN5
bWJvbDsKKyAgICByZXR1cm4gdG9rZW47Cit9CisKK2ludCByZXNlcnZlZF93b3JkKHl5c2Nhbl90
IHl5c2Nhbm5lcikgeworICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopIHl5c2Nhbm5lcjsKKworICAgIHl5ZXh0cmEtPmVycm9yKCp5eWxsb2MsICJJbGxlZ2FsIHVz
ZSBvZiByZXNlcnZlZCB3b3JkIiwgeXl0ZXh0LCAiIik7CisgICAgeXlleHRyYS0+cmVjb3Zlcigp
OworICAgIHJldHVybiAwOworfQorCit2b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxvYywgVFBhcnNl
Q29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKSB7CisgICAgY29udGV4dC0+ZXJy
b3IoKmxsb2MsIHJlYXNvbiwgeXlnZXRfdGV4dChjb250ZXh0LT5zY2FubmVyKSk7CisgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworfQorCitpbnQgaW50X2NvbnN0YW50KHl5c2Nhbl90IHl5c2Nhbm5l
cikgeworICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIHl5c2Nh
bm5lcjsKKworICAgIGlmICghYXRvaV9jbGFtcCh5eXRleHQsICYoeXlsdmFsLT5sZXguaSkpKQor
ICAgICAgICB5eWV4dHJhLT53YXJuaW5nKCp5eWxsb2MsICJJbnRlZ2VyIG92ZXJmbG93IiwgeXl0
ZXh0LCAiIik7CisgICAgcmV0dXJuIElOVENPTlNUQU5UOworfQorCitpbnQgZmxvYXRfY29uc3Rh
bnQoeXlzY2FuX3QgeXlzY2FubmVyKSB7CisgICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190KikgeXlzY2FubmVyOworCisgICAgaWYgKCFhdG9mX2NsYW1wKHl5dGV4dCwg
Jih5eWx2YWwtPmxleC5mKSkpCisgICAgICAgIHl5ZXh0cmEtPndhcm5pbmcoKnl5bGxvYywgIkZs
b2F0IG92ZXJmbG93IiwgeXl0ZXh0LCAiIik7CisgICAgcmV0dXJuIEZMT0FUQ09OU1RBTlQ7Cit9
CisKK2ludCBnbHNsYW5nX2luaXRpYWxpemUoVFBhcnNlQ29udGV4dCogY29udGV4dCkgeworICAg
IHl5c2Nhbl90IHNjYW5uZXIgPSBOVUxMOworICAgIGlmICh5eWxleF9pbml0X2V4dHJhKGNvbnRl
eHQsICZzY2FubmVyKSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBjb250ZXh0LT5zY2FubmVy
ID0gc2Nhbm5lcjsKKyAgICByZXR1cm4gMDsKK30KKworaW50IGdsc2xhbmdfZmluYWxpemUoVFBh
cnNlQ29udGV4dCogY29udGV4dCkgeworICAgIHl5c2Nhbl90IHNjYW5uZXIgPSBjb250ZXh0LT5z
Y2FubmVyOworICAgIGlmIChzY2FubmVyID09IE5VTEwpIHJldHVybiAwOworICAgIAorICAgIGNv
bnRleHQtPnNjYW5uZXIgPSBOVUxMOworICAgIHl5bGV4X2Rlc3Ryb3koc2Nhbm5lcik7CisKKyAg
ICByZXR1cm4gMDsKK30KKworaW50IGdsc2xhbmdfc2NhbihzaXplX3QgY291bnQsIGNvbnN0IGNo
YXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAgICAgICAgICAg
IFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKKyAgICB5eXJlc3RhcnQoTlVMTCwgY29udGV4dC0+
c2Nhbm5lcik7CisgICAgeXlzZXRfY29sdW1uKDAsIGNvbnRleHQtPnNjYW5uZXIpOworICAgIHl5
c2V0X2xpbmVubygxLCBjb250ZXh0LT5zY2FubmVyKTsKKworICAgIC8vIEluaXRpYWxpemUgcHJl
cHJvY2Vzc29yLgorICAgIGlmICghY29udGV4dC0+cHJlcHJvY2Vzc29yLmluaXQoY291bnQsIHN0
cmluZywgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY29udGV4dC0+cHJlcHJvY2Vz
c29yLnNldE1heFRva2VuTGVuZ3RoKFNIX01BWF9UT0tFTl9MRU5HVEgpOworCisgICAgLy8gRGVm
aW5lIGV4dGVuc2lvbiBtYWNyb3MuCisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRC
ZWhhdmlvciA9IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgZm9yIChURXh0ZW5z
aW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRCZWhhdmlvci5iZWdpbigpOwor
ICAgICAgICAgaXRlciAhPSBleHRCZWhhdmlvci5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIGNv
bnRleHQtPnByZXByb2Nlc3Nvci5wcmVkZWZpbmVNYWNybyhpdGVyLT5maXJzdC5jX3N0cigpLCAx
KTsKKyAgICB9CisgICAgaWYgKGNvbnRleHQtPmZyYWdtZW50UHJlY2lzaW9uSGlnaCkKKyAgICAg
ICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnByZWRlZmluZU1hY3JvKCJHTF9GUkFHTUVOVF9QUkVD
SVNJT05fSElHSCIsIDEpOworCisgICAgcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcueSBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcueQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5lMTJjOTg4ZWQ4NmI2YTk5MzA2ZmJhMTUwM2JhMWUyNDY4MGUwYTE2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvZ2xzbGFuZy55CkBAIC0wLDAgKzEsMjAxNSBAQAorLyoKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgWWFjYyBncmFtbWFyIGZvciBHTFNMIEVTLgorQmFz
ZWQgb24gQU5TSSBDIFlhY2MgZ3JhbW1hcjoKK2h0dHA6Ly93d3cubHlzYXRvci5saXUuc2UvYy9B
TlNJLUMtZ3JhbW1hci15Lmh0bWwKKworSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08g
TkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNoLAorV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNM
IEVTIFBBUlNFUiAoZ2xzbGFuZ190YWIuY3BwIEFORCBnbHNsYW5nX3RhYi5oKS4KKyovCisKKyV7
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkg
Z2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKKworLy8gSWdub3JlIGVycm9ycyBpbiBh
dXRvLWdlbmVyYXRlZCBjb2RlLgorI2lmIGRlZmluZWQoX19HTlVDX18pCisjcHJhZ21hIEdDQyBk
aWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLWZ1bmN0aW9uIgorI3ByYWdtYSBHQ0MgZGlhZ25v
c3RpYyBpZ25vcmVkICItV3VudXNlZC12YXJpYWJsZSIKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMg
aWdub3JlZCAiLVdzd2l0Y2gtZW51bSIKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpCisjcHJhZ21h
IHdhcm5pbmcoZGlzYWJsZTogNDA2NSkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MTg5KQor
I3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ1MDUpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTog
NDcwMSkKKyNlbmRpZgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJs
ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCisjaW5j
bHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisKKyNkZWZpbmUgWVlFTkFCTEVfTkxTIDAKKwor
I2RlZmluZSBZWUxFWF9QQVJBTSBjb250ZXh0LT5zY2FubmVyCislfQorCislZXhwZWN0IDEgLyog
T25lIHNoaWZ0IHJlZHVjZSBjb25mbGljdCBiZWNhdXNlIG9mIGlmIHwgZWxzZSAqLworJXB1cmUt
cGFyc2VyCislcGFyc2UtcGFyYW0ge1RQYXJzZUNvbnRleHQqIGNvbnRleHR9CislbG9jYXRpb25z
CislbGV4LXBhcmFtIHtZWUxFWF9QQVJBTX0KKworJWNvZGUgcmVxdWlyZXMgeworI2RlZmluZSBZ
WUxUWVBFIFRTb3VyY2VMb2MKKyNkZWZpbmUgWVlMVFlQRV9JU19ERUNMQVJFRCAxCisjZGVmaW5l
IFNIX01BWF9UT0tFTl9MRU5HVEggMjU2ICAvLyBXZWJHTCBzcGVjLgorfQorCisldW5pb24gewor
ICAgIHN0cnVjdCB7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFRTdHJpbmcgKnN0cmlu
ZzsKKyAgICAgICAgICAgIGZsb2F0IGY7CisgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAg
IGJvb2wgYjsKKyAgICAgICAgfTsKKyAgICAgICAgVFN5bWJvbCogc3ltYm9sOworICAgIH0gbGV4
OworICAgIHN0cnVjdCB7CisgICAgICAgIFRPcGVyYXRvciBvcDsKKyAgICAgICAgdW5pb24gewor
ICAgICAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CisgICAgICAgICAgICBUSW50ZXJt
Tm9kZVBhaXIgbm9kZVBhaXI7CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGludGVybVR5cGVk
Tm9kZTsKKyAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUFnZ3JlZ2F0ZTsKKyAg
ICAgICAgfTsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgVFB1YmxpY1R5cGUgdHlwZTsK
KyAgICAgICAgICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOworICAgICAgICAgICAgVFF1YWxpZmll
ciBxdWFsaWZpZXI7CisgICAgICAgICAgICBURnVuY3Rpb24qIGZ1bmN0aW9uOworICAgICAgICAg
ICAgVFBhcmFtZXRlciBwYXJhbTsKKyAgICAgICAgICAgIFRGaWVsZCogZmllbGQ7CisgICAgICAg
ICAgICBURmllbGRMaXN0KiBmaWVsZExpc3Q7CisgICAgICAgIH07CisgICAgfSBpbnRlcm07Cit9
CisKKyV7CitleHRlcm4gaW50IHl5bGV4KFlZU1RZUEUqIHl5bHZhbCwgWVlMVFlQRSogeXlsbG9j
LCB2b2lkKiB5eXNjYW5uZXIpOworZXh0ZXJuIHZvaWQgeXllcnJvcihZWUxUWVBFKiB5eWxsb2Ms
IFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7CisKKyNkZWZpbmUg
WVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKSAgICAgICAgICAgICAgICAgICAgICBcCisg
IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgaWYgKE4pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2ZpbGUgPSBZWVJIU0xPQyhSaHMs
IDEpLmZpcnN0X2ZpbGU7ICBcCisgICAgICAgIChDdXJyZW50KS5maXJzdF9saW5lID0gWVlSSFNM
T0MoUmhzLCAxKS5maXJzdF9saW5lOyAgXAorICAgICAgICAoQ3VycmVudCkubGFzdF9maWxlID0g
WVlSSFNMT0MoUmhzLCBOKS5sYXN0X2ZpbGU7ICAgIFwKKyAgICAgICAgKEN1cnJlbnQpLmxhc3Rf
bGluZSA9IFlZUkhTTE9DKFJocywgTikubGFzdF9saW5lOyAgICBcCisgICAgICB9ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgZWxz
ZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgKEN1cnJlbnQpLmZpcnN0X2ZpbGUgPSBZWVJIU0xPQyhSaHMsIDApLmxhc3RfZmlsZTsg
ICBcCisgICAgICAgIChDdXJyZW50KS5maXJzdF9saW5lID0gWVlSSFNMT0MoUmhzLCAwKS5sYXN0
X2xpbmU7ICAgXAorICAgICAgICAoQ3VycmVudCkubGFzdF9maWxlID0gWVlSSFNMT0MoUmhzLCAw
KS5sYXN0X2ZpbGU7ICAgIFwKKyAgICAgICAgKEN1cnJlbnQpLmxhc3RfbGluZSA9IFlZUkhTTE9D
KFJocywgMCkubGFzdF9saW5lOyAgICBcCisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5l
IFZFUlRFWF9PTkxZKFMsIEwpIHsgIFwKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSAhPSBT
SF9WRVJURVhfU0hBREVSKSB7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9y
dGVkIGluIHZlcnRleCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCisgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsgIFwKKyAgICB9ICBcCit9CisKKyNkZWZpbmUgRlJBR19PTkxZKFMsIEwpIHsgIFwK
KyAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSAhPSBTSF9GUkFHTUVOVF9TSEFERVIpIHsgIFwK
KyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21lbnQgc2hhZGVy
cyBvbmx5ICIsIFMpOyAgXAorICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCisgICAgfSAg
XAorfQorJX0KKworJXRva2VuIDxsZXg+IElOVkFSSUFOVCBISUdIX1BSRUNJU0lPTiBNRURJVU1f
UFJFQ0lTSU9OIExPV19QUkVDSVNJT04gUFJFQ0lTSU9OCisldG9rZW4gPGxleD4gQVRUUklCVVRF
IENPTlNUX1FVQUwgQk9PTF9UWVBFIEZMT0FUX1RZUEUgSU5UX1RZUEUKKyV0b2tlbiA8bGV4PiBC
UkVBSyBDT05USU5VRSBETyBFTFNFIEZPUiBJRiBESVNDQVJEIFJFVFVSTgorJXRva2VuIDxsZXg+
IEJWRUMyIEJWRUMzIEJWRUM0IElWRUMyIElWRUMzIElWRUM0IFZFQzIgVkVDMyBWRUM0CisldG9r
ZW4gPGxleD4gTUFUUklYMiBNQVRSSVgzIE1BVFJJWDQgSU5fUVVBTCBPVVRfUVVBTCBJTk9VVF9R
VUFMIFVOSUZPUk0gVkFSWUlORworJXRva2VuIDxsZXg+IFNUUlVDVCBWT0lEX1RZUEUgV0hJTEUK
KyV0b2tlbiA8bGV4PiBTQU1QTEVSMkQgU0FNUExFUkNVQkUgU0FNUExFUl9FWFRFUk5BTF9PRVMg
U0FNUExFUjJEUkVDVAorCisldG9rZW4gPGxleD4gSURFTlRJRklFUiBUWVBFX05BTUUgRkxPQVRD
T05TVEFOVCBJTlRDT05TVEFOVCBCT09MQ09OU1RBTlQKKyV0b2tlbiA8bGV4PiBMRUZUX09QIFJJ
R0hUX09QCisldG9rZW4gPGxleD4gSU5DX09QIERFQ19PUCBMRV9PUCBHRV9PUCBFUV9PUCBORV9P
UAorJXRva2VuIDxsZXg+IEFORF9PUCBPUl9PUCBYT1JfT1AgTVVMX0FTU0lHTiBESVZfQVNTSUdO
IEFERF9BU1NJR04KKyV0b2tlbiA8bGV4PiBNT0RfQVNTSUdOIExFRlRfQVNTSUdOIFJJR0hUX0FT
U0lHTiBBTkRfQVNTSUdOIFhPUl9BU1NJR04gT1JfQVNTSUdOCisldG9rZW4gPGxleD4gU1VCX0FT
U0lHTgorCisldG9rZW4gPGxleD4gTEVGVF9QQVJFTiBSSUdIVF9QQVJFTiBMRUZUX0JSQUNLRVQg
UklHSFRfQlJBQ0tFVCBMRUZUX0JSQUNFIFJJR0hUX0JSQUNFIERPVAorJXRva2VuIDxsZXg+IENP
TU1BIENPTE9OIEVRVUFMIFNFTUlDT0xPTiBCQU5HIERBU0ggVElMREUgUExVUyBTVEFSIFNMQVNI
IFBFUkNFTlQKKyV0b2tlbiA8bGV4PiBMRUZUX0FOR0xFIFJJR0hUX0FOR0xFIFZFUlRJQ0FMX0JB
UiBDQVJFVCBBTVBFUlNBTkQgUVVFU1RJT04KKworJXR5cGUgPGxleD4gaWRlbnRpZmllcgorJXR5
cGUgPGludGVybT4gYXNzaWdubWVudF9vcGVyYXRvciB1bmFyeV9vcGVyYXRvcgorJXR5cGUgPGlu
dGVybS5pbnRlcm1UeXBlZE5vZGU+IHZhcmlhYmxlX2lkZW50aWZpZXIgcHJpbWFyeV9leHByZXNz
aW9uIHBvc3RmaXhfZXhwcmVzc2lvbgorJXR5cGUgPGludGVybS5pbnRlcm1UeXBlZE5vZGU+IGV4
cHJlc3Npb24gaW50ZWdlcl9leHByZXNzaW9uIGFzc2lnbm1lbnRfZXhwcmVzc2lvbgorJXR5cGUg
PGludGVybS5pbnRlcm1UeXBlZE5vZGU+IHVuYXJ5X2V4cHJlc3Npb24gbXVsdGlwbGljYXRpdmVf
ZXhwcmVzc2lvbiBhZGRpdGl2ZV9leHByZXNzaW9uCisldHlwZSA8aW50ZXJtLmludGVybVR5cGVk
Tm9kZT4gcmVsYXRpb25hbF9leHByZXNzaW9uIGVxdWFsaXR5X2V4cHJlc3Npb24KKyV0eXBlIDxp
bnRlcm0uaW50ZXJtVHlwZWROb2RlPiBjb25kaXRpb25hbF9leHByZXNzaW9uIGNvbnN0YW50X2V4
cHJlc3Npb24KKyV0eXBlIDxpbnRlcm0uaW50ZXJtVHlwZWROb2RlPiBsb2dpY2FsX29yX2V4cHJl
c3Npb24gbG9naWNhbF94b3JfZXhwcmVzc2lvbiBsb2dpY2FsX2FuZF9leHByZXNzaW9uCisldHlw
ZSA8aW50ZXJtLmludGVybVR5cGVkTm9kZT4gc2hpZnRfZXhwcmVzc2lvbiBhbmRfZXhwcmVzc2lv
biBleGNsdXNpdmVfb3JfZXhwcmVzc2lvbiBpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbgorJXR5cGUg
PGludGVybS5pbnRlcm1UeXBlZE5vZGU+IGZ1bmN0aW9uX2NhbGwgaW5pdGlhbGl6ZXIgY29uZGl0
aW9uIGNvbmRpdGlvbm9wdAorCisldHlwZSA8aW50ZXJtLmludGVybU5vZGU+IHRyYW5zbGF0aW9u
X3VuaXQgZnVuY3Rpb25fZGVmaW5pdGlvbgorJXR5cGUgPGludGVybS5pbnRlcm1Ob2RlPiBzdGF0
ZW1lbnQgc2ltcGxlX3N0YXRlbWVudAorJXR5cGUgPGludGVybS5pbnRlcm1BZ2dyZWdhdGU+ICBz
dGF0ZW1lbnRfbGlzdCBjb21wb3VuZF9zdGF0ZW1lbnQKKyV0eXBlIDxpbnRlcm0uaW50ZXJtTm9k
ZT4gZGVjbGFyYXRpb25fc3RhdGVtZW50IHNlbGVjdGlvbl9zdGF0ZW1lbnQgZXhwcmVzc2lvbl9z
dGF0ZW1lbnQKKyV0eXBlIDxpbnRlcm0uaW50ZXJtTm9kZT4gZGVjbGFyYXRpb24gZXh0ZXJuYWxf
ZGVjbGFyYXRpb24KKyV0eXBlIDxpbnRlcm0uaW50ZXJtTm9kZT4gZm9yX2luaXRfc3RhdGVtZW50
IGNvbXBvdW5kX3N0YXRlbWVudF9ub19uZXdfc2NvcGUKKyV0eXBlIDxpbnRlcm0ubm9kZVBhaXI+
IHNlbGVjdGlvbl9yZXN0X3N0YXRlbWVudCBmb3JfcmVzdF9zdGF0ZW1lbnQKKyV0eXBlIDxpbnRl
cm0uaW50ZXJtTm9kZT4gaXRlcmF0aW9uX3N0YXRlbWVudCBqdW1wX3N0YXRlbWVudCBzdGF0ZW1l
bnRfbm9fbmV3X3Njb3BlIHN0YXRlbWVudF93aXRoX3Njb3BlCisldHlwZSA8aW50ZXJtPiBzaW5n
bGVfZGVjbGFyYXRpb24gaW5pdF9kZWNsYXJhdG9yX2xpc3QKKworJXR5cGUgPGludGVybT4gcGFy
YW1ldGVyX2RlY2xhcmF0aW9uIHBhcmFtZXRlcl9kZWNsYXJhdG9yIHBhcmFtZXRlcl90eXBlX3Nw
ZWNpZmllcgorJXR5cGUgPGludGVybS5xdWFsaWZpZXI+IHBhcmFtZXRlcl9xdWFsaWZpZXIKKwor
JXR5cGUgPGludGVybS5wcmVjaXNpb24+IHByZWNpc2lvbl9xdWFsaWZpZXIKKyV0eXBlIDxpbnRl
cm0udHlwZT4gdHlwZV9xdWFsaWZpZXIgZnVsbHlfc3BlY2lmaWVkX3R5cGUgdHlwZV9zcGVjaWZp
ZXIKKyV0eXBlIDxpbnRlcm0udHlwZT4gdHlwZV9zcGVjaWZpZXJfbm9fcHJlYyB0eXBlX3NwZWNp
Zmllcl9ub25hcnJheQorJXR5cGUgPGludGVybS50eXBlPiBzdHJ1Y3Rfc3BlY2lmaWVyCisldHlw
ZSA8aW50ZXJtLmZpZWxkPiBzdHJ1Y3RfZGVjbGFyYXRvcgorJXR5cGUgPGludGVybS5maWVsZExp
c3Q+IHN0cnVjdF9kZWNsYXJhdG9yX2xpc3Qgc3RydWN0X2RlY2xhcmF0aW9uIHN0cnVjdF9kZWNs
YXJhdGlvbl9saXN0CisldHlwZSA8aW50ZXJtLmZ1bmN0aW9uPiBmdW5jdGlvbl9oZWFkZXIgZnVu
Y3Rpb25fZGVjbGFyYXRvciBmdW5jdGlvbl9pZGVudGlmaWVyCisldHlwZSA8aW50ZXJtLmZ1bmN0
aW9uPiBmdW5jdGlvbl9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIGZ1bmN0aW9uX2NhbGxfaGVhZGVy
CisldHlwZSA8aW50ZXJtPiBmdW5jdGlvbl9jYWxsX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMgZnVu
Y3Rpb25fY2FsbF9oZWFkZXJfbm9fcGFyYW1ldGVycyBmdW5jdGlvbl9jYWxsX2dlbmVyaWMgZnVu
Y3Rpb25fcHJvdG90eXBlCisldHlwZSA8aW50ZXJtPiBmdW5jdGlvbl9jYWxsX29yX21ldGhvZAor
Cislc3RhcnQgdHJhbnNsYXRpb25fdW5pdAorJSUKKworaWRlbnRpZmllcgorICAgIDogSURFTlRJ
RklFUgorICAgIHwgVFlQRV9OQU1FCisKK3ZhcmlhYmxlX2lkZW50aWZpZXIKKyAgICA6IElERU5U
SUZJRVIgeworICAgICAgICAvLyBUaGUgc3ltYm9sIHRhYmxlIHNlYXJjaCB3YXMgZG9uZSBpbiB0
aGUgbGV4aWNhbCBwaGFzZQorICAgICAgICBjb25zdCBUU3ltYm9sICpzeW1ib2wgPSAkMS5zeW1i
b2w7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqdmFyaWFibGUgPSAwOworCisgICAgICAgIGlm
ICghc3ltYm9sKQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgInVu
ZGVjbGFyZWQgaWRlbnRpZmllciIsICQxLnN0cmluZy0+Y19zdHIoKSk7CisgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIXN5bWJvbC0+
aXNWYXJpYWJsZSgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwg
InZhcmlhYmxlIGV4cGVjdGVkIiwgJDEuc3RyaW5nLT5jX3N0cigpKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9s
KTsKKworICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKHZh
cmlhYmxlLT5nZXROYW1lKCkpICYmCisgICAgICAgICAgICAgICAgIXZhcmlhYmxlLT5nZXRFeHRl
bnNpb24oKS5lbXB0eSgpICYmCisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXh0ZW5zaW9uRXJy
b3JDaGVjayhAMSwgdmFyaWFibGUtPmdldEV4dGVuc2lvbigpKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBpZiAoIXZhcmlhYmxlKQorICAgICAgICB7CisgICAgICAgICAgICBUVHlw
ZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQpOworICAgICAgICAgICAgVFZhcmlhYmxlICpm
YWtlVmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCQxLnN0cmluZywgdHlwZSk7CisgICAgICAgICAg
ICBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKmZha2VWYXJpYWJsZSk7CisgICAgICAgICAg
ICB2YXJpYWJsZSA9IGZha2VWYXJpYWJsZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh2YXJp
YWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBDb25zdGFudFVuaW9uKiBjb25zdEFycmF5ID0gdmFyaWFibGUtPmdldENvbnN0
UG9pbnRlcigpOworICAgICAgICAgICAgVFR5cGUgdCh2YXJpYWJsZS0+Z2V0VHlwZSgpKTsKKyAg
ICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24oY29u
c3RBcnJheSwgdCwgQDEpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAg
ICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5n
ZXRVbmlxdWVJZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhcmlhYmxlLT5nZXROYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMSk7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBkb24ndCBkZWxldGUgJDEuc3RyaW5nLCBpdCdzIHVzZWQgYnkgZXJyb3IgcmVjb3Zl
cnksIGFuZCB0aGUgcG9vbAorICAgICAgICAvLyBwb3Agd2lsbCByZWNsYWltIHRoZSBtZW1vcnkK
KyAgICB9CisgICAgOworCitwcmltYXJ5X2V4cHJlc3Npb24KKyAgICA6IHZhcmlhYmxlX2lkZW50
aWZpZXIgeworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IElOVENPTlNUQU5UIHsKKyAg
ICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwor
ICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoJDEuaSk7CisgICAgICAgICQkID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50
LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDEpOworICAgIH0KKyAgICB8IEZMT0FUQ09OU1RB
TlQgeworICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bMV07CisgICAgICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgkMS5mKTsKKyAgICAgICAgJCQg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlw
ZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAxKTsKKyAgICB9CisgICAgfCBC
T09MQ09OU1RBTlQgeworICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bMV07CisgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdCgkMS5iKTsKKyAg
ICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFy
cmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDEpOworICAgIH0K
KyAgICB8IExFRlRfUEFSRU4gZXhwcmVzc2lvbiBSSUdIVF9QQVJFTiB7CisgICAgICAgICQkID0g
JDI7CisgICAgfQorICAgIDsKKworcG9zdGZpeF9leHByZXNzaW9uCisgICAgOiBwcmltYXJ5X2V4
cHJlc3Npb24geworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IHBvc3RmaXhfZXhwcmVz
c2lvbiBMRUZUX0JSQUNLRVQgaW50ZWdlcl9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQgeworICAg
ICAgICAkJCA9IGNvbnRleHQtPmFkZEluZGV4RXhwcmVzc2lvbigkMSwgQDIsICQzKTsKKyAgICB9
CisgICAgfCBmdW5jdGlvbl9jYWxsIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgfCBw
b3N0Zml4X2V4cHJlc3Npb24gRE9UIGlkZW50aWZpZXIgeworICAgICAgICBpZiAoJDEtPmlzQXJy
YXkoKSkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDMsICJjYW5ub3QgYXBwbHkgZG90
IG9wZXJhdG9yIHRvIGFuIGFycmF5IiwgIi4iKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgkMS0+aXNWZWN0b3IoKSkgeworICAgICAg
ICAgICAgVFZlY3RvckZpZWxkcyBmaWVsZHM7CisgICAgICAgICAgICBpZiAoISBjb250ZXh0LT5w
YXJzZVZlY3RvckZpZWxkcygqJDMuc3RyaW5nLCAkMS0+Z2V0Tm9taW5hbFNpemUoKSwgZmllbGRz
LCBAMykpIHsKKyAgICAgICAgICAgICAgICBmaWVsZHMubnVtID0gMTsKKyAgICAgICAgICAgICAg
ICBmaWVsZHMub2Zmc2V0c1swXSA9IDA7CisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRR
dWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgeyAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2ZWN0b3Ig
ZmllbGRzCisgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRDb25zdFZlY3Rvck5vZGUo
ZmllbGRzLCAkMSwgQDMpOworICAgICAgICAgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgJCQg
PSAkMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQ
cmVjaXNpb24oKSwgRXZxQ29uc3QsIChpbnQpICgqJDMuc3RyaW5nKS5zaXplKCkpKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgVFN0cmluZyB2ZWN0b3JTdHJpbmcgPSAq
JDMuc3RyaW5nOworICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkU3dpenpsZShmaWVsZHMsIEAzKTsKKyAgICAgICAgICAgICAgICAk
JCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BWZWN0b3JTd2l6emxlLCAkMSwg
aW5kZXgsIEAyKTsKKyAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFz
aWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAoaW50KSB2ZWN0b3JT
dHJpbmcuc2l6ZSgpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoJDEtPmlz
TWF0cml4KCkpIHsKKyAgICAgICAgICAgIFRNYXRyaXhGaWVsZHMgZmllbGRzOworICAgICAgICAg
ICAgaWYgKCEgY29udGV4dC0+cGFyc2VNYXRyaXhGaWVsZHMoKiQzLnN0cmluZywgJDEtPmdldE5v
bWluYWxTaXplKCksIGZpZWxkcywgQDMpKSB7CisgICAgICAgICAgICAgICAgZmllbGRzLndob2xl
Um93ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZmllbGRzLndob2xlQ29sID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgZmllbGRzLnJvdyA9IDA7CisgICAgICAgICAgICAgICAgZmllbGRzLmNv
bCA9IDA7CisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZpZWxkcy53aG9sZUNvbCkg
eworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAiIG5vbi1zY2FsYXIgZmllbGRz
IG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3
IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0
KDApOworICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QpLCBAMyk7CisgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICQxLCBpbmRleCwgQDIpOworICAg
ICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdl
dFByZWNpc2lvbigpLEV2cVRlbXBvcmFyeSwgJDEtPmdldE5vbWluYWxTaXplKCkpKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJh
eSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNl
dElDb25zdChmaWVsZHMuY29sICogJDEtPmdldE5vbWluYWxTaXplKCkgKyBmaWVsZHMucm93KTsK
KyAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmlu
ZWQsIEV2cUNvbnN0KSwgQDMpOworICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAkMSwgaW5kZXgsIEAyKTsKKyAgICAgICAg
ICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVj
aXNpb24oKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKCQxLT5nZXRCYXNp
Y1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKKyAgICAgICAgICAgIGJvb2wgZmllbGRGb3VuZCA9IGZh
bHNlOworICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRzID0gJDEtPmdldFR5cGUo
KS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaTsKKyAg
ICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoZmllbGRzW2ldLT5uYW1lKCkgPT0gKiQzLnN0cmluZykgeworICAgICAgICAg
ICAgICAgICAgICBmaWVsZEZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZpZWxk
Rm91bmQpIHsKKyAgICAgICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIo
KSA9PSBFdnFDb25zdCkgeworICAgICAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmFkZENv
bnN0U3RydWN0KCokMy5zdHJpbmcsICQxLCBAMik7CisgICAgICAgICAgICAgICAgICAgIGlmICgk
JCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgJCQtPnNl
dFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNo
YW5nZSB0aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1cm4gdHlwZSwgbm90IG9mIHRoZSBzdHJ1Y3R1
cmUgZmllbGQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHRoZSBzdHJ1Y3R1cmUgZGVm
aW5pdGlvbiBpcyBzaGFyZWQgYmV0d2VlbiB2YXJpb3VzIHN0cnVjdHVyZXMuCisgICAgICAgICAg
ICAgICAgICAgICAgICAkJC0+Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvblsxXTsKKyAgICAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGkpOwor
ICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgKmZpZWxkc1tpXS0+dHlwZSgpLCBA
Myk7CisgICAgICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZElu
ZGV4KEVPcEluZGV4RGlyZWN0U3RydWN0LCAkMSwgaW5kZXgsIEAyKTsKKyAgICAgICAgICAgICAg
ICAgICAgJCQtPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAy
LCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgJDMuc3RyaW5nLT5jX3N0cigpKTsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgJCQgPSAk
MTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKEAyLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1cmUsIHZlY3Rvciwg
b3IgbWF0cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgJDMuc3RyaW5nLT5jX3N0cigpKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkID0gJDE7CisgICAgICAg
IH0KKyAgICAgICAgLy8gZG9uJ3QgZGVsZXRlICQzLnN0cmluZywgaXQncyBmcm9tIHRoZSBwb29s
CisgICAgfQorICAgIHwgcG9zdGZpeF9leHByZXNzaW9uIElOQ19PUCB7CisgICAgICAgIGlmIChj
b250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKEAyLCAiKysiLCAkMSkpCisgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVu
YXJ5TWF0aChFT3BQb3N0SW5jcmVtZW50LCAkMSwgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsK
KyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJv
cihAMiwgIisrIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBERUNfT1AgeworICAgICAgICBpZiAoY29udGV4dC0+bFZh
bHVlRXJyb3JDaGVjayhAMiwgIi0tIiwgJDEpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9w
UG9zdERlY3JlbWVudCwgJDEsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlm
ICgkJCA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoQDIsICItLSIs
ICQxLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgICAgICQkID0gJDE7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCitpbnRl
Z2VyX2V4cHJlc3Npb24KKyAgICA6IGV4cHJlc3Npb24geworICAgICAgICBpZiAoY29udGV4dC0+
aW50ZWdlckVycm9yQ2hlY2soJDEsICJbXSIpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICA7CisKK2Z1bmN0aW9uX2NhbGwKKyAg
ICA6IGZ1bmN0aW9uX2NhbGxfb3JfbWV0aG9kIHsKKyAgICAgICAgVEZ1bmN0aW9uKiBmbkNhbGwg
PSAkMS5mdW5jdGlvbjsKKyAgICAgICAgVE9wZXJhdG9yIG9wID0gZm5DYWxsLT5nZXRCdWlsdElu
T3AoKTsKKworICAgICAgICBpZiAob3AgIT0gRU9wTnVsbCkKKyAgICAgICAgeworICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgIC8vIFRoZW4gdGhpcyBzaG91bGQgYmUgYSBjb25zdHJ1Y3Rvci4K
KyAgICAgICAgICAgIC8vIERvbid0IGdvIHRocm91Z2ggdGhlIHN5bWJvbCB0YWJsZSBmb3IgY29u
c3RydWN0b3JzLgorICAgICAgICAgICAgLy8gVGhlaXIgcGFyYW1ldGVycyB3aWxsIGJlIHZlcmlm
aWVkIGFsZ29yaXRobWljYWxseS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBUVHlwZSB0
eXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7ICAvLyB1c2UgdGhpcyB0byBnZXQgdGhlIHR5cGUg
YmFjaworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmNvbnN0cnVjdG9yRXJyb3JDaGVjayhAMSwg
JDEuaW50ZXJtTm9kZSwgKmZuQ2FsbCwgb3AsICZ0eXBlKSkgeworICAgICAgICAgICAgICAgICQk
ID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgICAgICAvLyBJdCdzIGEgY29uc3RydWN0b3IsIG9mIHR5cGUgJ3R5cGUnLgorICAgICAgICAg
ICAgICAgIC8vCisgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRDb25zdHJ1Y3Rvcigk
MS5pbnRlcm1Ob2RlLCAmdHlwZSwgb3AsIGZuQ2FsbCwgQDEpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dy
ZWdhdGVPcGVyYXRvcigwLCBvcCwgQDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgJCQt
PnNldFR5cGUodHlwZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLworICAgICAg
ICAgICAgLy8gTm90IGEgY29uc3RydWN0b3IuICBGaW5kIGl0IGluIHRoZSBzeW1ib2wgdGFibGUu
CisgICAgICAgICAgICAvLworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uKiBmbkNhbmRpZGF0
ZTsKKyAgICAgICAgICAgIGJvb2wgYnVpbHRJbjsKKyAgICAgICAgICAgIGZuQ2FuZGlkYXRlID0g
Y29udGV4dC0+ZmluZEZ1bmN0aW9uKEAxLCBmbkNhbGwsICZidWlsdEluKTsKKyAgICAgICAgICAg
IGlmIChmbkNhbmRpZGF0ZSkgeworICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAg
Ly8gQSBkZWNsYXJlZCBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAg
ICAgIGlmIChidWlsdEluICYmICFmbkNhbmRpZGF0ZS0+Z2V0RXh0ZW5zaW9uKCkuZW1wdHkoKSAm
JgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKEAxLCBm
bkNhbmRpZGF0ZS0+Z2V0RXh0ZW5zaW9uKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb3AgPSBm
bkNhbmRpZGF0ZS0+Z2V0QnVpbHRJbk9wKCk7CisgICAgICAgICAgICAgICAgaWYgKGJ1aWx0SW4g
JiYgb3AgIT0gRU9wTnVsbCkgeworICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAg
ICAgICAgICAvLyBBIGZ1bmN0aW9uIGNhbGwgbWFwcGVkIHRvIGEgYnVpbHQtaW4gb3BlcmF0aW9u
LgorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICBpZiAoZm5DYW5k
aWRhdGUtPmdldFBhcmFtQ291bnQoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAv
LworICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJlYXQgaXQgbGlrZSBhIGJ1aWx0LWluIHVu
YXJ5IG9wZXJhdG9yLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAg
ICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChvcCwgJDEu
aW50ZXJtTm9kZSwgQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICgkJCA9PSAwKSAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBleHRyYUluZm9TdHJlYW0gPDwgImJ1aWx0IGluIHVuYXJ5IG9wZXJhdG9yIGZ1bmN0aW9uLiAg
VHlwZTogIiA8PCBzdGF0aWNfY2FzdDxUSW50ZXJtVHlwZWQqPigkMS5pbnRlcm1Ob2RlKS0+Z2V0
Q29tcGxldGVTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmlu
ZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiIHdyb25n
IG9wZXJhbmQgdHlwZSIsICJJbnRlcm5hbCBFcnJvciIsIGV4dHJhSW5mby5jX3N0cigpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBZWUVSUk9SOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IoJDEuaW50
ZXJtQWdncmVnYXRlLCBvcCwgQDEpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHJlYWwgZnVu
Y3Rpb24gY2FsbAorCisgICAgICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKCQxLmludGVybUFnZ3JlZ2F0ZSwgRU9wRnVuY3Rpb25D
YWxsLCBAMSk7CisgICAgICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKGZuQ2FuZGlkYXRlLT5n
ZXRSZXR1cm5UeXBlKCkpOworCisgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgaG93IHdl
IGtub3cgd2hldGhlciB0aGUgZ2l2ZW4gZnVuY3Rpb24gaXMgYSBidWlsdEluIGZ1bmN0aW9uIG9y
IGEgdXNlciBkZWZpbmVkIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgIC8vIGlmIGJ1aWx0
SW4gPT0gZmFsc2UsIGl0J3MgYSB1c2VyRGVmaW5lZCAtPiBjb3VsZCBiZSBhbiBvdmVybG9hZGVk
IGJ1aWx0SW4gZnVuY3Rpb24gYWxzbworICAgICAgICAgICAgICAgICAgICAvLyBpZiBidWlsdElu
ID09IHRydWUsIGl0J3MgZGVmaW5pdGVseSBhIGJ1aWx0SW4gZnVuY3Rpb24gd2l0aCBFT3BOdWxs
CisgICAgICAgICAgICAgICAgICAgIGlmICghYnVpbHRJbikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRVc2VyRGVmaW5lZCgpOworICAgICAgICAgICAg
ICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0TmFtZShmbkNhbmRpZGF0ZS0+Z2V0TWFu
Z2xlZE5hbWUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgVFF1YWxpZmllciBxdWFsOworICAg
ICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZuQ2FuZGlkYXRlLT5nZXRQ
YXJhbUNvdW50KCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcXVhbCA9IGZuQ2Fu
ZGlkYXRlLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChxdWFsID09IEV2cU91dCB8fCBxdWFsID09IEV2cUluT3V0KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soJCQt
PmdldExpbmUoKSwgImFzc2lnbiIsICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgp
W2ldLT5nZXRBc1R5cGVkKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCQxLmludGVybU5vZGUtPmdldExpbmUoKSwgIkNvbnN0YW50IHZhbHVlIGNh
bm5vdCBiZSBwYXNzZWQgZm9yICdvdXQnIG9yICdpbm91dCcgcGFyYW1ldGVycy4iLCAiRXJyb3Ii
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAkJC0+c2V0VHlwZShmbkNhbmRpZGF0ZS0+Z2V0UmV0dXJuVHlwZSgpKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gZXJyb3IgbWVzc2FnZSB3YXMgcHV0IG91dCBi
eSBQYUZpbmRGdW5jdGlvbigpCisgICAgICAgICAgICAgICAgLy8gUHV0IG9uIGEgZHVtbXkgbm9k
ZSBmb3IgZXJyb3IgcmVjb3ZlcnkKKyAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlv
bkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgdW5pb25BcnJh
eS0+c2V0RkNvbnN0KDAuMGYpOworICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QpLCBAMSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGRlbGV0ZSBmbkNhbGw7Cisg
ICAgfQorICAgIDsKKworZnVuY3Rpb25fY2FsbF9vcl9tZXRob2QKKyAgICA6IGZ1bmN0aW9uX2Nh
bGxfZ2VuZXJpYyB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgcG9zdGZpeF9leHBy
ZXNzaW9uIERPVCBmdW5jdGlvbl9jYWxsX2dlbmVyaWMgeworICAgICAgICBjb250ZXh0LT5lcnJv
cihAMywgIm1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQiLCAiIik7CisgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgJCQgPSAkMzsKKyAgICB9CisgICAgOworCitmdW5jdGlvbl9j
YWxsX2dlbmVyaWMKKyAgICA6IGZ1bmN0aW9uX2NhbGxfaGVhZGVyX3dpdGhfcGFyYW1ldGVycyBS
SUdIVF9QQVJFTiB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgZnVuY3Rpb25fY2Fs
bF9oZWFkZXJfbm9fcGFyYW1ldGVycyBSSUdIVF9QQVJFTiB7CisgICAgICAgICQkID0gJDE7Cisg
ICAgfQorICAgIDsKKworZnVuY3Rpb25fY2FsbF9oZWFkZXJfbm9fcGFyYW1ldGVycworICAgIDog
ZnVuY3Rpb25fY2FsbF9oZWFkZXIgVk9JRF9UWVBFIHsKKyAgICAgICAgJCQuZnVuY3Rpb24gPSAk
MTsKKyAgICAgICAgJCQuaW50ZXJtTm9kZSA9IDA7CisgICAgfQorICAgIHwgZnVuY3Rpb25fY2Fs
bF9oZWFkZXIgeworICAgICAgICAkJC5mdW5jdGlvbiA9ICQxOworICAgICAgICAkJC5pbnRlcm1O
b2RlID0gMDsKKyAgICB9CisgICAgOworCitmdW5jdGlvbl9jYWxsX2hlYWRlcl93aXRoX3BhcmFt
ZXRlcnMKKyAgICA6IGZ1bmN0aW9uX2NhbGxfaGVhZGVyIGFzc2lnbm1lbnRfZXhwcmVzc2lvbiB7
CisgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7IDAsIG5ldyBUVHlwZSgkMi0+Z2V0VHlwZSgp
KSB9OworICAgICAgICAkMS0+YWRkUGFyYW1ldGVyKHBhcmFtKTsKKyAgICAgICAgJCQuZnVuY3Rp
b24gPSAkMTsKKyAgICAgICAgJCQuaW50ZXJtTm9kZSA9ICQyOworICAgIH0KKyAgICB8IGZ1bmN0
aW9uX2NhbGxfaGVhZGVyX3dpdGhfcGFyYW1ldGVycyBDT01NQSBhc3NpZ25tZW50X2V4cHJlc3Np
b24geworICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUoJDMtPmdldFR5
cGUoKSkgfTsKKyAgICAgICAgJDEuZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJhbSk7CisgICAg
ICAgICQkLmZ1bmN0aW9uID0gJDEuZnVuY3Rpb247CisgICAgICAgICQkLmludGVybU5vZGUgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1Ob2RlLCAkMywgQDIp
OworICAgIH0KKyAgICA7CisKK2Z1bmN0aW9uX2NhbGxfaGVhZGVyCisgICAgOiBmdW5jdGlvbl9p
ZGVudGlmaWVyIExFRlRfUEFSRU4geworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICA7CisK
Ky8vIEdyYW1tYXIgTm90ZTogIENvbnN0cnVjdG9ycyBsb29rIGxpa2UgZnVuY3Rpb25zLCBidXQg
YXJlIHJlY29nbml6ZWQgYXMgdHlwZXMuCisKK2Z1bmN0aW9uX2lkZW50aWZpZXIKKyAgICA6IHR5
cGVfc3BlY2lmaWVyX25vbmFycmF5IHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQ29uc3RydWN0
b3IKKyAgICAgICAgLy8KKyAgICAgICAgVE9wZXJhdG9yIG9wID0gRU9wTnVsbDsKKyAgICAgICAg
aWYgKCQxLnVzZXJEZWYpIHsKKyAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0U3RydWN0Owor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3dpdGNoICgkMS50eXBlKSB7CisgICAgICAg
ICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgICAgIGlmICgkMS5tYXRyaXgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoKCQxLnNpemUpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdE1hdDI7ICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVjdE1hdDM7ICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVjdE1hdDQ7ICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IHN3aXRjaCgkMS5zaXplKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogb3AgPSBFT3BD
b25zdHJ1Y3RGbG9hdDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBF
T3BDb25zdHJ1Y3RWZWMyOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogb3Ag
PSBFT3BDb25zdHJ1Y3RWZWMzOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDog
b3AgPSBFT3BDb25zdHJ1Y3RWZWM0OyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IEVidEludDoKKyAgICAgICAgICAgICAgICBzd2l0Y2goJDEuc2l6ZSkgeworICAgICAgICAgICAg
ICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RJbnQ7ICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdElWZWMyOyBicmVhazsKKyAgICAgICAgICAgICAg
ICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0SVZlYzM7IGJyZWFrOworICAgICAgICAgICAgICAg
IGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RJVmVjNDsgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRCb29sOgorICAg
ICAgICAgICAgICAgIHN3aXRjaCgkMS5zaXplKSB7CisgICAgICAgICAgICAgICAgY2FzZSAxOiBv
cCA9IEVPcENvbnN0cnVjdEJvb2w7ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6IG9w
ID0gRU9wQ29uc3RydWN0QlZlYzI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMzogb3Ag
PSBFT3BDb25zdHJ1Y3RCVmVjMzsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9
IEVPcENvbnN0cnVjdEJWZWM0OyBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChvcCA9PSBFT3BOdWxsKSB7CisgICAgICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoQDEsICJjYW5ub3QgY29uc3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5n
KCQxLnR5cGUpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
ICAgICAgICAgJDEudHlwZSA9IEVidEZsb2F0OworICAgICAgICAgICAgICAgIG9wID0gRU9wQ29u
c3RydWN0RmxvYXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgVFN0cmluZyB0
ZW1wU3RyaW5nOworICAgICAgICBUVHlwZSB0eXBlKCQxKTsKKyAgICAgICAgVEZ1bmN0aW9uICpm
dW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oJnRlbXBTdHJpbmcsIHR5cGUsIG9wKTsKKyAgICAgICAg
JCQgPSBmdW5jdGlvbjsKKyAgICB9CisgICAgfCBJREVOVElGSUVSIHsKKyAgICAgICAgaWYgKGNv
bnRleHQtPnJlc2VydmVkRXJyb3JDaGVjayhAMSwgKiQxLnN0cmluZykpCisgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZp
bmVkKTsKKyAgICAgICAgVEZ1bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oJDEuc3Ry
aW5nLCB0eXBlKTsKKyAgICAgICAgJCQgPSBmdW5jdGlvbjsKKyAgICB9CisgICAgOworCit1bmFy
eV9leHByZXNzaW9uCisgICAgOiBwb3N0Zml4X2V4cHJlc3Npb24geworICAgICAgICAkJCA9ICQx
OworICAgIH0KKyAgICB8IElOQ19PUCB1bmFyeV9leHByZXNzaW9uIHsKKyAgICAgICAgaWYgKGNv
bnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soQDEsICIrKyIsICQyKSkKKyAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5h
cnlNYXRoKEVPcFByZUluY3JlbWVudCwgJDIsIEAxLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Cisg
ICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3Io
QDEsICIrKyIsICQyLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkID0gJDI7CisgICAgICAgIH0KKyAgICB9CisgICAg
fCBERUNfT1AgdW5hcnlfZXhwcmVzc2lvbiB7CisgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVF
cnJvckNoZWNrKEAxLCAiLS0iLCAkMikpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQcmVE
ZWNyZW1lbnQsICQyLCBAMSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQg
PT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKEAxLCAiLS0iLCAkMi0+
Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICAkJCA9ICQyOworICAgICAgICB9CisgICAgfQorICAgIHwgdW5hcnlfb3BlcmF0
b3IgdW5hcnlfZXhwcmVzc2lvbiB7CisgICAgICAgIGlmICgkMS5vcCAhPSBFT3BOdWxsKSB7Cisg
ICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoJDEub3As
ICQyLCBAMSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAgICAgaWYgKCQkID09IDAp
IHsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBlcnJvck9wID0gIiI7CisgICAgICAgICAg
ICAgICAgc3dpdGNoKCQxLm9wKSB7CisgICAgICAgICAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZTog
ICBlcnJvck9wID0gIi0iOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxO
b3Q6IGVycm9yT3AgPSAiISI7IGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJy
b3IoQDEsIGVycm9yT3AsICQyLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgJCQgPSAkMjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAkJCA9ICQyOworICAgIH0KKyAgICA7
CisvLyBHcmFtbWFyIE5vdGU6ICBObyB0cmFkaXRpb25hbCBzdHlsZSB0eXBlIGNhc3RzLgorCit1
bmFyeV9vcGVyYXRvcgorICAgIDogUExVUyAgeyAkJC5vcCA9IEVPcE51bGw7IH0KKyAgICB8IERB
U0ggIHsgJCQub3AgPSBFT3BOZWdhdGl2ZTsgfQorICAgIHwgQkFORyAgeyAkJC5vcCA9IEVPcExv
Z2ljYWxOb3Q7IH0KKyAgICA7CisvLyBHcmFtbWFyIE5vdGU6ICBObyAnKicgb3IgJyYnIHVuYXJ5
IG9wcy4gIFBvaW50ZXJzIGFyZSBub3Qgc3VwcG9ydGVkLgorCittdWx0aXBsaWNhdGl2ZV9leHBy
ZXNzaW9uCisgICAgOiB1bmFyeV9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIHwgbXVsdGlw
bGljYXRpdmVfZXhwcmVzc2lvbiBTVEFSIHVuYXJ5X2V4cHJlc3Npb24geworICAgICAgICAkJCA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcE11bCwgJDEsICQzLCBAMiwg
Y29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAg
ICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIioiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmco
KSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IG11bHRp
cGxpY2F0aXZlX2V4cHJlc3Npb24gU0xBU0ggdW5hcnlfZXhwcmVzc2lvbiB7CisgICAgICAgICQk
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wRGl2LCAkMSwgJDMsIEAy
LCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAg
ICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiLyIsICQxLT5nZXRDb21wbGV0ZVN0cmlu
ZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICAkJCA9ICQxOworICAgICAgICB9CisgICAgfQorICAgIDsKKwor
YWRkaXRpdmVfZXhwcmVzc2lvbgorICAgIDogbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbiB7ICQk
ID0gJDE7IH0KKyAgICB8IGFkZGl0aXZlX2V4cHJlc3Npb24gUExVUyBtdWx0aXBsaWNhdGl2ZV9l
eHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5
TWF0aChFT3BBZGQsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAg
aWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICIr
IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkID0gJDE7CisgICAg
ICAgIH0KKyAgICB9CisgICAgfCBhZGRpdGl2ZV9leHByZXNzaW9uIERBU0ggbXVsdGlwbGljYXRp
dmVfZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJp
bmFyeU1hdGgoRU9wU3ViLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAg
ICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAy
LCAiLSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7
CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9ICQxOwor
ICAgICAgICB9CisgICAgfQorICAgIDsKKworc2hpZnRfZXhwcmVzc2lvbgorICAgIDogYWRkaXRp
dmVfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICA7CisKK3JlbGF0aW9uYWxfZXhwcmVzc2lv
bgorICAgIDogc2hpZnRfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICB8IHJlbGF0aW9uYWxf
ZXhwcmVzc2lvbiBMRUZUX0FOR0xFIHNoaWZ0X2V4cHJlc3Npb24geworICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExlc3NUaGFuLCAkMSwgJDMsIEAy
LCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAg
ICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiPCIsICQxLT5nZXRDb21wbGV0ZVN0cmlu
ZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwor
ICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1
bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDIpOwor
ICAgICAgICB9CisgICAgfQorICAgIHwgcmVsYXRpb25hbF9leHByZXNzaW9uIFJJR0hUX0FOR0xF
IHNoaWZ0X2V4cHJlc3Npb24gIHsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbiwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9s
VGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+Ymlu
YXJ5T3BFcnJvcihAMiwgIj4iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBs
ZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAg
ICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAg
ICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICQkID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUo
RWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAyKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICB8IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiBMRV9PUCBzaGlmdF9leHByZXNzaW9uICB7Cisg
ICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTGVzc1Ro
YW5FcXVhbCwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAo
JCQgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIjw9Iiwg
JDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVu
aW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXkt
PnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5l
ZCwgRXZxQ29uc3QpLCBAMik7CisgICAgICAgIH0KKyAgICB9CisgICAgfCByZWxhdGlvbmFsX2V4
cHJlc3Npb24gR0VfT1Agc2hpZnRfZXhwcmVzc2lvbiAgeworICAgICAgICAkJCA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuRXF1YWwsICQxLCAkMywg
QDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICI+PSIsICQxLT5nZXRDb21wbGV0ZVN0
cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2Up
OworICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlv
bih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDIp
OworICAgICAgICB9CisgICAgfQorICAgIDsKKworZXF1YWxpdHlfZXhwcmVzc2lvbgorICAgIDog
cmVsYXRpb25hbF9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIHwgZXF1YWxpdHlfZXhwcmVz
c2lvbiBFUV9PUCByZWxhdGlvbmFsX2V4cHJlc3Npb24gIHsKKyAgICAgICAgJCQgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BFcXVhbCwgJDEsICQzLCBAMiwgY29udGV4
dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgY29u
dGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIj09IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQz
LT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlv
blsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAg
ICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJy
YXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMik7CisgICAgICAg
IH0KKyAgICB9CisgICAgfCBlcXVhbGl0eV9leHByZXNzaW9uIE5FX09QIHJlbGF0aW9uYWxfZXhw
cmVzc2lvbiB7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1h
dGgoRU9wTm90RXF1YWwsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAg
ICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIs
ICIhPSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7
CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVu
aW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlv
bkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBV
bmRlZmluZWQsIEV2cUNvbnN0KSwgQDIpOworICAgICAgICB9CisgICAgfQorICAgIDsKKworYW5k
X2V4cHJlc3Npb24KKyAgICA6IGVxdWFsaXR5X2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAg
OworCitleGNsdXNpdmVfb3JfZXhwcmVzc2lvbgorICAgIDogYW5kX2V4cHJlc3Npb24geyAkJCA9
ICQxOyB9CisgICAgOworCitpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbgorICAgIDogZXhjbHVzaXZl
X29yX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAgOworCitsb2dpY2FsX2FuZF9leHByZXNz
aW9uCisgICAgOiBpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICB8IGxv
Z2ljYWxfYW5kX2V4cHJlc3Npb24gQU5EX09QIGluY2x1c2l2ZV9vcl9leHByZXNzaW9uIHsKKyAg
ICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2Fs
QW5kLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9
PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiJiYiLCAkMS0+
Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25B
cnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0
QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBF
dnFDb25zdCksIEAyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisKK2xvZ2ljYWxfeG9yX2V4
cHJlc3Npb24KKyAgICA6IGxvZ2ljYWxfYW5kX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAg
fCBsb2dpY2FsX3hvcl9leHByZXNzaW9uIFhPUl9PUCBsb2dpY2FsX2FuZF9leHByZXNzaW9uICB7
CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9n
aWNhbFhvciwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAo
JCQgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIl5eIiwg
JDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVu
aW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXkt
PnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5l
ZCwgRXZxQ29uc3QpLCBAMik7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCitsb2dpY2FsX29y
X2V4cHJlc3Npb24KKyAgICA6IGxvZ2ljYWxfeG9yX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9Cisg
ICAgfCBsb2dpY2FsX29yX2V4cHJlc3Npb24gT1JfT1AgbG9naWNhbF94b3JfZXhwcmVzc2lvbiAg
eworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExv
Z2ljYWxPciwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAo
JCQgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgInx8Iiwg
JDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVu
aW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXkt
PnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5l
ZCwgRXZxQ29uc3QpLCBAMik7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCitjb25kaXRpb25h
bF9leHByZXNzaW9uCisgICAgOiBsb2dpY2FsX29yX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9Cisg
ICAgfCBsb2dpY2FsX29yX2V4cHJlc3Npb24gUVVFU1RJT04gZXhwcmVzc2lvbiBDT0xPTiBhc3Np
Z25tZW50X2V4cHJlc3Npb24geworICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVjayhA
MiwgJDEpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICQkID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFNlbGVjdGlvbigkMSwgJDMsICQ1LCBAMik7CisgICAg
ICAgIGlmICgkMy0+Z2V0VHlwZSgpICE9ICQ1LT5nZXRUeXBlKCkpCisgICAgICAgICAgICAkJCA9
IDA7CisKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFy
eU9wRXJyb3IoQDIsICI6IiwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCksICQ1LT5nZXRDb21wbGV0
ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAg
ICQkID0gJDU7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCithc3NpZ25tZW50X2V4cHJlc3Np
b24KKyAgICA6IGNvbmRpdGlvbmFsX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAgfCB1bmFy
eV9leHByZXNzaW9uIGFzc2lnbm1lbnRfb3BlcmF0b3IgYXNzaWdubWVudF9leHByZXNzaW9uIHsK
KyAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soQDIsICJhc3NpZ24iLCAkMSkp
CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQkID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEFzc2lnbigkMi5vcCwgJDEsICQzLCBAMik7CisgICAgICAgIGlmICgk
JCA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5hc3NpZ25FcnJvcihAMiwgImFzc2lnbiIs
ICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9ICQxOworICAgICAg
ICB9CisgICAgfQorICAgIDsKKworYXNzaWdubWVudF9vcGVyYXRvcgorICAgIDogRVFVQUwgICAg
ICAgIHsgJCQub3AgPSBFT3BBc3NpZ247IH0KKyAgICB8IE1VTF9BU1NJR04gICB7ICQkLm9wID0g
RU9wTXVsQXNzaWduOyB9CisgICAgfCBESVZfQVNTSUdOICAgeyAkJC5vcCA9IEVPcERpdkFzc2ln
bjsgfQorICAgIHwgQUREX0FTU0lHTiAgIHsgJCQub3AgPSBFT3BBZGRBc3NpZ247IH0KKyAgICB8
IFNVQl9BU1NJR04gICB7ICQkLm9wID0gRU9wU3ViQXNzaWduOyB9CisgICAgOworCitleHByZXNz
aW9uCisgICAgOiBhc3NpZ25tZW50X2V4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxOworICAg
IH0KKyAgICB8IGV4cHJlc3Npb24gQ09NTUEgYXNzaWdubWVudF9leHByZXNzaW9uIHsKKyAgICAg
ICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29tbWEoJDEsICQzLCBAMik7CisgICAg
ICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAy
LCAiLCIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7
CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9ICQzOwor
ICAgICAgICB9CisgICAgfQorICAgIDsKKworY29uc3RhbnRfZXhwcmVzc2lvbgorICAgIDogY29u
ZGl0aW9uYWxfZXhwcmVzc2lvbiB7CisgICAgICAgIGlmIChjb250ZXh0LT5jb25zdEVycm9yQ2hl
Y2soJDEpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAkJCA9ICQx
OworICAgIH0KKyAgICA7CisKK2RlY2xhcmF0aW9uCisgICAgOiBmdW5jdGlvbl9wcm90b3R5cGUg
U0VNSUNPTE9OICAgeworICAgICAgICBURnVuY3Rpb24gJmZ1bmN0aW9uID0gKigkMS5mdW5jdGlv
bik7CisgICAgICAgIAorICAgICAgICBUSW50ZXJtQWdncmVnYXRlICpwcm90b3R5cGUgPSBuZXcg
VEludGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgcHJvdG90eXBlLT5zZXRUeXBlKGZ1bmN0aW9uLmdl
dFJldHVyblR5cGUoKSk7CisgICAgICAgIHByb3RvdHlwZS0+c2V0TmFtZShmdW5jdGlvbi5nZXRO
YW1lKCkpOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlv
bi5nZXRQYXJhbUNvdW50KCk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFBh
cmFtZXRlciAmcGFyYW0gPSBmdW5jdGlvbi5nZXRQYXJhbShpKTsKKyAgICAgICAgICAgIGlmIChw
YXJhbS5uYW1lICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVFZhcmlhYmxl
IHZhcmlhYmxlKHBhcmFtLm5hbWUsICpwYXJhbS50eXBlKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBwcm90b3R5cGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3Jl
Z2F0ZShwcm90b3R5cGUsIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUu
Z2V0VW5pcXVlSWQoKSwgdmFyaWFibGUuZ2V0TmFtZSgpLCB2YXJpYWJsZS5nZXRUeXBlKCksIEAx
KSwgQDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHByb3RvdHlwZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdn
cmVnYXRlKHByb3RvdHlwZSwgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAiIiwg
KnBhcmFtLnR5cGUsIEAxKSwgQDEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBwcm90b3R5cGUtPnNldE9wKEVPcFByb3RvdHlwZSk7CisgICAgICAgICQkID0g
cHJvdG90eXBlOworCisgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOworICAgIH0K
KyAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IFNFTUlDT0xPTiB7CisgICAgICAgIGlmICgkMS5p
bnRlcm1BZ2dyZWdhdGUpCisgICAgICAgICAgICAkMS5pbnRlcm1BZ2dyZWdhdGUtPnNldE9wKEVP
cERlY2xhcmF0aW9uKTsKKyAgICAgICAgJCQgPSAkMS5pbnRlcm1BZ2dyZWdhdGU7CisgICAgfQor
ICAgIHwgUFJFQ0lTSU9OIHByZWNpc2lvbl9xdWFsaWZpZXIgdHlwZV9zcGVjaWZpZXJfbm9fcHJl
YyBTRU1JQ09MT04geworICAgICAgICBpZiAoKCQyID09IEVicEhpZ2gpICYmIChjb250ZXh0LT5z
aGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikgJiYgIWNvbnRleHQtPmZyYWdtZW50UHJl
Y2lzaW9uSGlnaCkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJwcmVjaXNpb24g
aXMgbm90IHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXIiLCAiaGlnaHAiKTsKKyAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWNvbnRleHQt
PnN5bWJvbFRhYmxlLnNldERlZmF1bHRQcmVjaXNpb24oICQzLCAkMiApKSB7CisgICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcihAMSwgImlsbGVnYWwgdHlwZSBhcmd1bWVudCBmb3IgZGVmYXVsdCBw
cmVjaXNpb24gcXVhbGlmaWVyIiwgZ2V0QmFzaWNTdHJpbmcoJDMudHlwZSkpOworICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgICQkID0gMDsKKyAgICB9
CisgICAgOworCitmdW5jdGlvbl9wcm90b3R5cGUKKyAgICA6IGZ1bmN0aW9uX2RlY2xhcmF0b3Ig
UklHSFRfUEFSRU4gIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gTXVsdGlwbGUgZGVjbGFyYXRp
b25zIG9mIHRoZSBzYW1lIGZ1bmN0aW9uIGFyZSBhbGxvd2VkLgorICAgICAgICAvLworICAgICAg
ICAvLyBJZiB0aGlzIGlzIGEgZGVmaW5pdGlvbiwgdGhlIGRlZmluaXRpb24gcHJvZHVjdGlvbiBj
b2RlIHdpbGwgY2hlY2sgZm9yIHJlZGVmaW5pdGlvbnMKKyAgICAgICAgLy8gKHdlIGRvbid0IGtu
b3cgYXQgdGhpcyBwb2ludCBpZiBpdCdzIGEgZGVmaW5pdGlvbiBvciBub3QpLgorICAgICAgICAv
LworICAgICAgICAvLyBSZWRlY2xhcmF0aW9ucyBhcmUgYWxsb3dlZC4gIEJ1dCwgcmV0dXJuIHR5
cGVzIGFuZCBwYXJhbWV0ZXIgcXVhbGlmaWVycyBtdXN0IG1hdGNoLgorICAgICAgICAvLworICAg
ICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihjb250ZXh0
LT5zeW1ib2xUYWJsZS5maW5kKCQxLT5nZXRNYW5nbGVkTmFtZSgpKSk7CisgICAgICAgIGlmIChw
cmV2RGVjKSB7CisgICAgICAgICAgICBpZiAocHJldkRlYy0+Z2V0UmV0dXJuVHlwZSgpICE9ICQx
LT5nZXRSZXR1cm5UeXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwg
Im92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSByZXR1cm4gdHlwZSIsICQx
LT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBwcmV2RGVjLT5nZXRQYXJhbUNvdW50KCk7ICsraSkgeworICAgICAgICAgICAg
ICAgIGlmIChwcmV2RGVjLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSAkMS0+
Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoQDIsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNh
bWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAkMS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlm
aWVyU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gQ2hlY2sgZm9yIHByZXZpb3VzbHkgZGVjbGFyZWQgdmFyaWFibGVzIHVzaW5n
IHRoZSBzYW1lIG5hbWUuCisgICAgICAgIC8vCisgICAgICAgIFRTeW1ib2wgKnByZXZTeW0gPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCQxLT5nZXROYW1lKCkpOworICAgICAgICBpZiAocHJl
dlN5bSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFwcmV2U3ltLT5pc0Z1bmN0aW9uKCkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJyZWRl
ZmluaXRpb24iLCAkMS0+Z2V0TmFtZSgpLmNfc3RyKCksICJmdW5jdGlvbiIpOworICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEluc2VydCB0aGUgdW5tYW5nbGVk
IG5hbWUgdG8gZGV0ZWN0IHBvdGVudGlhbCBmdXR1cmUgcmVkZWZpbml0aW9uIGFzIGEgdmFyaWFi
bGUuCisgICAgICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5nZXRPdXRlckxldmVsKCktPmlu
c2VydCgkMS0+Z2V0TmFtZSgpLCAqJDEpOworICAgICAgICB9CisKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gSWYgdGhpcyBpcyBhIHJlZGVjbGFyYXRpb24sIGl0IGNvdWxkIGFsc28gYmUgYSBkZWZp
bml0aW9uLAorICAgICAgICAvLyBpbiB3aGljaCBjYXNlLCB3ZSB3YW50IHRvIHVzZSB0aGUgdmFy
aWFibGUgbmFtZXMgZnJvbSB0aGlzIG9uZSwgYW5kIG5vdCB0aGUgb25lIHRoYXQncworICAgICAg
ICAvLyBiZWluZyByZWRlY2xhcmVkLiAgU28sIHBhc3MgYmFjayB1cCB0aGlzIGRlY2xhcmF0aW9u
LCBub3QgdGhlIG9uZSBpbiB0aGUgc3ltYm9sIHRhYmxlLgorICAgICAgICAvLworICAgICAgICAk
JC5mdW5jdGlvbiA9ICQxOworCisgICAgICAgIC8vIFdlJ3JlIGF0IHRoZSBpbm5lciBzY29wZSBs
ZXZlbCBvZiB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudHMgYW5kIGJvZHkgc3RhdGVtZW50LgorICAg
ICAgICAvLyBBZGQgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZSB0byB0aGUgc3Vycm91bmRpbmcgc2Nv
cGUgaW5zdGVhZC4KKyAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUuZ2V0T3V0ZXJMZXZlbCgp
LT5pbnNlcnQoKiQkLmZ1bmN0aW9uKTsKKyAgICB9CisgICAgOworCitmdW5jdGlvbl9kZWNsYXJh
dG9yCisgICAgOiBmdW5jdGlvbl9oZWFkZXIgeworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAg
ICB8IGZ1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMgeworICAgICAgICAkJCA9ICQxOwor
ICAgIH0KKyAgICA7CisKKworZnVuY3Rpb25faGVhZGVyX3dpdGhfcGFyYW1ldGVycworICAgIDog
ZnVuY3Rpb25faGVhZGVyIHBhcmFtZXRlcl9kZWNsYXJhdGlvbiB7CisgICAgICAgIC8vIEFkZCB0
aGUgcGFyYW1ldGVyCisgICAgICAgICQkID0gJDE7CisgICAgICAgIGlmICgkMi5wYXJhbS50eXBl
LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKQorICAgICAgICAgICAgJDEtPmFkZFBhcmFtZXRl
cigkMi5wYXJhbSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRlbGV0ZSAkMi5wYXJhbS50
eXBlOworICAgIH0KKyAgICB8IGZ1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMgQ09NTUEg
cGFyYW1ldGVyX2RlY2xhcmF0aW9uIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gT25seSBmaXJz
dCBwYXJhbWV0ZXIgb2Ygb25lLXBhcmFtZXRlciBmdW5jdGlvbnMgY2FuIGJlIHZvaWQKKyAgICAg
ICAgLy8gVGhlIGNoZWNrIGZvciBuYW1lZCBwYXJhbWV0ZXJzIG5vdCBiZWluZyB2b2lkIGlzIGRv
bmUgaW4gcGFyYW1ldGVyX2RlY2xhcmF0b3IKKyAgICAgICAgLy8KKyAgICAgICAgaWYgKCQzLnBh
cmFtLnR5cGUtPmdldEJhc2ljVHlwZSgpID09IEVidFZvaWQpIHsKKyAgICAgICAgICAgIC8vCisg
ICAgICAgICAgICAvLyBUaGlzIHBhcmFtZXRlciA+IGZpcnN0IGlzIHZvaWQKKyAgICAgICAgICAg
IC8vCisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgImNhbm5vdCBiZSBhbiBhcmd1bWVu
dCB0eXBlIGV4Y2VwdCBmb3IgJyh2b2lkKSciLCAidm9pZCIpOworICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgZGVsZXRlICQzLnBhcmFtLnR5cGU7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAvLyBBZGQgdGhlIHBhcmFtZXRlcgorICAgICAgICAgICAg
JCQgPSAkMTsKKyAgICAgICAgICAgICQxLT5hZGRQYXJhbWV0ZXIoJDMucGFyYW0pOworICAgICAg
ICB9CisgICAgfQorICAgIDsKKworZnVuY3Rpb25faGVhZGVyCisgICAgOiBmdWxseV9zcGVjaWZp
ZWRfdHlwZSBJREVOVElGSUVSIExFRlRfUEFSRU4geworICAgICAgICBpZiAoJDEucXVhbGlmaWVy
ICE9IEV2cUdsb2JhbCAmJiAkMS5xdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7CisgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcihAMiwgIm5vIHF1YWxpZmllcnMgYWxsb3dlZCBmb3IgZnVuY3Rp
b24gcmV0dXJuIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikpOworICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIC8vIG1ha2Ugc3VyZSBh
IHNhbXBsZXIgaXMgbm90IGludm9sdmVkIGFzIHdlbGwuLi4KKyAgICAgICAgaWYgKGNvbnRleHQt
PnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soQDIsICQxKSkKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKworICAgICAgICAvLyBBZGQgdGhlIGZ1bmN0aW9uIGFzIGEgcHJvdG90eXBl
IGFmdGVyIHBhcnNpbmcgaXQgKHdlIGRvIG5vdCBzdXBwb3J0IHJlY3Vyc2lvbikKKyAgICAgICAg
VEZ1bmN0aW9uICpmdW5jdGlvbjsKKyAgICAgICAgVFR5cGUgdHlwZSgkMSk7CisgICAgICAgIGZ1
bmN0aW9uID0gbmV3IFRGdW5jdGlvbigkMi5zdHJpbmcsIHR5cGUpOworICAgICAgICAkJCA9IGZ1
bmN0aW9uOworICAgICAgICAKKyAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOwor
ICAgIH0KKyAgICA7CisKK3BhcmFtZXRlcl9kZWNsYXJhdG9yCisgICAgLy8gVHlwZSArIG5hbWUK
KyAgICA6IHR5cGVfc3BlY2lmaWVyIGlkZW50aWZpZXIgeworICAgICAgICBpZiAoJDEudHlwZSA9
PSBFYnRWb2lkKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgImlsbGVnYWwgdXNl
IG9mIHR5cGUgJ3ZvaWQnIiwgJDIuc3RyaW5nLT5jX3N0cigpKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRF
cnJvckNoZWNrKEAyLCAqJDIuc3RyaW5nKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHskMi5zdHJpbmcsIG5ldyBUVHlwZSgkMSl9
OworICAgICAgICAkJC5wYXJhbSA9IHBhcmFtOworICAgIH0KKyAgICB8IHR5cGVfc3BlY2lmaWVy
IGlkZW50aWZpZXIgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tF
VCB7CisgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgY2FuIG1ha2UgYW4gYXJyYXkgb3V0IG9mIHRo
aXMgdHlwZQorICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjayhAMywgJDEp
KQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmIChjb250ZXh0
LT5yZXNlcnZlZEVycm9yQ2hlY2soQDIsICokMi5zdHJpbmcpKQorICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworCisgICAgICAgIGludCBzaXplOworICAgICAgICBpZiAoY29udGV4dC0+
YXJyYXlTaXplRXJyb3JDaGVjayhAMywgJDQsIHNpemUpKQorICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICAkMS5zZXRBcnJheSh0cnVlLCBzaXplKTsKKworICAgICAgICBU
VHlwZSogdHlwZSA9IG5ldyBUVHlwZSgkMSk7CisgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7
ICQyLnN0cmluZywgdHlwZSB9OworICAgICAgICAkJC5wYXJhbSA9IHBhcmFtOworICAgIH0KKyAg
ICA7CisKK3BhcmFtZXRlcl9kZWNsYXJhdGlvbgorICAgIC8vCisgICAgLy8gVGhlIG9ubHkgcGFy
YW1ldGVyIHF1YWxpZmllciBhIHBhcmFtZXRlciBjYW4gaGF2ZSBhcmUKKyAgICAvLyBJTl9RVUFM
LCBPVVRfUVVBTCwgSU5PVVRfUVVBTCwgb3IgQ09OU1QuCisgICAgLy8KKworICAgIC8vCisgICAg
Ly8gVHlwZSArIG5hbWUKKyAgICAvLworICAgIDogdHlwZV9xdWFsaWZpZXIgcGFyYW1ldGVyX3F1
YWxpZmllciBwYXJhbWV0ZXJfZGVjbGFyYXRvciB7CisgICAgICAgICQkID0gJDM7CisgICAgICAg
IGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soQDMsICQxLnF1YWxpZmllciwgJDIsICQkLnBh
cmFtLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgIH0KKyAgICB8
IHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX2RlY2xhcmF0b3IgeworICAgICAgICAkJCA9
ICQyOworICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1ldGVyU2FtcGxlckVycm9yQ2hlY2soQDIs
ICQxLCAqJDIucGFyYW0udHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soQDIsIEV2cVRlbXBvcmFyeSwgJDEs
ICQkLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgIH0K
KyAgICAvLworICAgIC8vIE9ubHkgdHlwZQorICAgIC8vCisgICAgfCB0eXBlX3F1YWxpZmllciBw
YXJhbWV0ZXJfcXVhbGlmaWVyIHBhcmFtZXRlcl90eXBlX3NwZWNpZmllciB7CisgICAgICAgICQk
ID0gJDM7CisgICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soQDMsICQxLnF1YWxp
ZmllciwgJDIsICQkLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OworICAgIH0KKyAgICB8IHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX3R5cGVfc3BlY2lm
aWVyIHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtZXRlclNh
bXBsZXJFcnJvckNoZWNrKEAyLCAkMSwgKiQyLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKEAy
LCBFdnFUZW1wb3JhcnksICQxLCAkJC5wYXJhbS50eXBlKSkKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICB9CisgICAgOworCitwYXJhbWV0ZXJfcXVhbGlmaWVyCisgICAgOiAv
KiBlbXB0eSAqLyB7CisgICAgICAgICQkID0gRXZxSW47CisgICAgfQorICAgIHwgSU5fUVVBTCB7
CisgICAgICAgICQkID0gRXZxSW47CisgICAgfQorICAgIHwgT1VUX1FVQUwgeworICAgICAgICAk
JCA9IEV2cU91dDsKKyAgICB9CisgICAgfCBJTk9VVF9RVUFMIHsKKyAgICAgICAgJCQgPSBFdnFJ
bk91dDsKKyAgICB9CisgICAgOworCitwYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIKKyAgICA6IHR5
cGVfc3BlY2lmaWVyIHsKKyAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBl
KCQxKSB9OworICAgICAgICAkJC5wYXJhbSA9IHBhcmFtOworICAgIH0KKyAgICA7CisKK2luaXRf
ZGVjbGFyYXRvcl9saXN0CisgICAgOiBzaW5nbGVfZGVjbGFyYXRpb24geworICAgICAgICAkJCA9
ICQxOworICAgIH0KKyAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIGlkZW50aWZpZXIg
eworICAgICAgICBpZiAoJDEudHlwZS50eXBlID09IEVidEludmFyaWFudCAmJiAhJDMuc3ltYm9s
KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMywgInVuZGVjbGFyZWQg
aWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCAkMy5zdHJpbmctPmNfc3RyKCkpOwor
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisKKyAgICAgICAgVElu
dGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAq
JDMuc3RyaW5nLCBUVHlwZSgkMS50eXBlKSwgQDMpOworICAgICAgICAkJC5pbnRlcm1BZ2dyZWdh
dGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1Ob2RlLCBz
eW1ib2wsIEAzKTsKKyAgICAgICAgCisgICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZp
ZXJFcnJvckNoZWNrKEAzLCAkJC50eXBlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKKworICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjayhAMywgKiQz
LnN0cmluZywgJCQudHlwZSwgZmFsc2UpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OworCisgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOworICAgICAgICBpZiAoY29udGV4
dC0+bm9uSW5pdEVycm9yQ2hlY2soQDMsICokMy5zdHJpbmcsICQkLnR5cGUsIHZhcmlhYmxlKSkK
KyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKHN5bWJvbCAmJiB2
YXJpYWJsZSkKKyAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUtPmdldFVuaXF1ZUlk
KCkpOworICAgIH0KKyAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIGlkZW50aWZpZXIg
TEVGVF9CUkFDS0VUIFJJR0hUX0JSQUNLRVQgeworICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0
UXVhbGlmaWVyRXJyb3JDaGVjayhAMywgJDEudHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2so
QDMsICokMy5zdHJpbmcsICQxLnR5cGUsIHRydWUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOworCisgICAgICAgICQkID0gJDE7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5
VHlwZUVycm9yQ2hlY2soQDQsICQxLnR5cGUpIHx8IGNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJy
b3JDaGVjayhANCwgJDEudHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgJDEudHlwZS5zZXRBcnJheSh0cnVlKTsKKyAgICAg
ICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGU7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+YXJy
YXlFcnJvckNoZWNrKEA0LCAqJDMuc3RyaW5nLCAkMS50eXBlLCB2YXJpYWJsZSkpCisgICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgfQorICAgIHwgaW5p
dF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgaWRlbnRpZmllciBMRUZUX0JSQUNLRVQgY29uc3RhbnRf
ZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1
YWxpZmllckVycm9yQ2hlY2soQDMsICQxLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOworCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKEAz
LCAqJDMuc3RyaW5nLCAkMS50eXBlLCB0cnVlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKworICAgICAgICAkJCA9ICQxOworCisgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5
cGVFcnJvckNoZWNrKEA0LCAkMS50eXBlKSB8fCBjb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9y
Q2hlY2soQDQsICQxLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludCBzaXplOworICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soQDQsICQ1LCBzaXplKSkKKyAgICAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkMS50eXBlLnNldEFycmF5KHRydWUsIHNp
emUpOworICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7CisgICAgICAgICAgICBp
ZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKEA0LCAqJDMuc3RyaW5nLCAkMS50eXBlLCB2YXJp
YWJsZSkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAg
VFR5cGUgdHlwZSA9IFRUeXBlKCQxLnR5cGUpOworICAgICAgICAgICAgdHlwZS5zZXRBcnJheVNp
emUoc2l6ZSk7CisgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1Ob2RlLCBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkU3ltYm9sKHZhcmlhYmxlID8gdmFyaWFibGUtPmdldFVuaXF1ZUlkKCkgOiAwLCAqJDMu
c3RyaW5nLCB0eXBlLCBAMyksIEAzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IGluaXRfZGVj
bGFyYXRvcl9saXN0IENPTU1BIGlkZW50aWZpZXIgRVFVQUwgaW5pdGlhbGl6ZXIgeworICAgICAg
ICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhAMywgJDEudHlwZSkpCisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgJCQgPSAkMTsKKworICAg
ICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKKyAgICAgICAgaWYgKCFjb250ZXh0LT5leGVj
dXRlSW5pdGlhbGl6ZXIoQDMsICokMy5zdHJpbmcsICQxLnR5cGUsICQ1LCBpbnRlcm1Ob2RlKSkg
eworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIGJ1aWxkIHRoZSBpbnRlcm1lZGlhdGUg
cmVwcmVzZW50YXRpb24KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBpZiAoaW50ZXJtTm9k
ZSkKKyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdy
b3dBZ2dyZWdhdGUoJDEuaW50ZXJtTm9kZSwgaW50ZXJtTm9kZSwgQDQpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9ICQxLmludGVybUFnZ3Jl
Z2F0ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgOworCitzaW5nbGVfZGVjbGFyYXRpb24KKyAgICA6IGZ1bGx5X3NwZWNpZmllZF90eXBlIHsK
KyAgICAgICAgJCQudHlwZSA9ICQxOworICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
U3ltYm9sKDAsICIiLCBUVHlwZSgkMSksIEAxKSwgQDEpOworICAgIH0KKyAgICB8IGZ1bGx5X3Nw
ZWNpZmllZF90eXBlIGlkZW50aWZpZXIgeworICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICokMi5zdHJpbmcsIFRUeXBlKCQx
KSwgQDIpOworICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsIEAyKTsKKyAgICAgICAgCisgICAgICAgIGlmIChjb250
ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAyLCAkJC50eXBlKSkKKyAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0
RXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZywgJCQudHlwZSwgZmFsc2UpKQorICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICAkJC50eXBlID0g
JDE7CisKKyAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7CisgICAgICAgIGlmIChjb250
ZXh0LT5ub25Jbml0RXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZywgJCQudHlwZSwgdmFyaWFibGUp
KQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAodmFyaWFibGUg
JiYgc3ltYm9sKQorICAgICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVl
SWQoKSk7CisgICAgfQorICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUgaWRlbnRpZmllciBMRUZU
X0JSQUNLRVQgUklHSFRfQlJBQ0tFVCB7CisgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAidW5z
aXplZCBhcnJheSBkZWNsYXJhdGlvbnMgbm90IHN1cHBvcnRlZCIsICQyLnN0cmluZy0+Y19zdHIo
KSk7CisgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBUSW50ZXJtU3ltYm9s
KiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICokMi5zdHJpbmcs
IFRUeXBlKCQxKSwgQDIpOworICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsIEAyKTsKKyAgICAgICAgJCQudHlwZSA9
ICQxOworICAgIH0KKyAgICB8IGZ1bGx5X3NwZWNpZmllZF90eXBlIGlkZW50aWZpZXIgTEVGVF9C
UkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7CisgICAgICAgIFRUeXBl
IHR5cGUgPSBUVHlwZSgkMSk7CisgICAgICAgIGludCBzaXplOworICAgICAgICBpZiAoY29udGV4
dC0+YXJyYXlTaXplRXJyb3JDaGVjayhAMiwgJDQsIHNpemUpKQorICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICB0eXBlLnNldEFycmF5U2l6ZShzaXplKTsKKyAgICAgICAg
VEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgw
LCAqJDIuc3RyaW5nLCB0eXBlLCBAMik7CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgQDIpOworICAgICAgICAK
KyAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soQDIsICQxKSkK
KyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBpZiAoY29udGV4dC0+
bm9uSW5pdENvbnN0RXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZywgJDEsIHRydWUpKQorICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICQkLnR5cGUgPSAkMTsKKworICAg
ICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjayhAMywgJDEpIHx8IGNvbnRleHQt
PmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayhAMywgJDEpKQorICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludCBzaXplOworICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soQDMsICQ0LCBzaXplKSkKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgICAgICQxLnNldEFy
cmF5KHRydWUsIHNpemUpOworICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7Cisg
ICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKEAzLCAqJDIuc3RyaW5nLCAk
MSwgdmFyaWFibGUpKQorICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCisgICAgICAgICAgICAgICAgc3ltYm9sLT5z
ZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBm
dWxseV9zcGVjaWZpZWRfdHlwZSBpZGVudGlmaWVyIEVRVUFMIGluaXRpYWxpemVyIHsKKyAgICAg
ICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soQDIsICQxKSkKKyAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAkJC50eXBlID0gJDE7CisKKyAg
ICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CisgICAgICAgIGlmICghY29udGV4dC0+ZXhl
Y3V0ZUluaXRpYWxpemVyKEAyLCAqJDIuc3RyaW5nLCAkMSwgJDQsIGludGVybU5vZGUpKSB7Cisg
ICAgICAgIC8vCisgICAgICAgIC8vIEJ1aWxkIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgor
ICAgICAgICAvLworICAgICAgICAgICAgaWYoaW50ZXJtTm9kZSkKKyAgICAgICAgICAgICAgICAk
JC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShp
bnRlcm1Ob2RlLCBAMyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgJCQuaW50
ZXJtQWdncmVnYXRlID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7CisgICAgICAg
IH0KKyAgICB9CisgICAgfCBJTlZBUklBTlQgSURFTlRJRklFUiB7CisgICAgICAgIFZFUlRFWF9P
TkxZKCJpbnZhcmlhbnQgZGVjbGFyYXRpb24iLCBAMSk7CisgICAgICAgIGlmIChjb250ZXh0LT5n
bG9iYWxFcnJvckNoZWNrKEAxLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCks
ICJpbnZhcmlhbnQgdmFyeWluZyIpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICAkJC50eXBlLnNldEJhc2ljKEVidEludmFyaWFudCwgRXZxSW52YXJpYW50VmFyeWlu
Z091dCwgQDIpOworICAgICAgICBpZiAoISQyLnN5bWJvbCkKKyAgICAgICAgeworICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoQDIsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMg
aW52YXJpYW50IiwgJDIuc3RyaW5nLT5jX3N0cigpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0g
MDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFRJbnRl
cm1TeW1ib2wgKnN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQy
LnN0cmluZywgVFR5cGUoJCQudHlwZSksIEAyKTsKKyAgICAgICAgICAgICQkLmludGVybUFnZ3Jl
Z2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgQDIpOwor
ICAgICAgICB9CisgICAgfQorICAgIDsKKworZnVsbHlfc3BlY2lmaWVkX3R5cGUKKyAgICA6IHR5
cGVfc3BlY2lmaWVyIHsKKyAgICAgICAgJCQgPSAkMTsKKworICAgICAgICBpZiAoJDEuYXJyYXkp
IHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAibm90IHN1cHBvcnRlZCIsICJmaXJz
dC1jbGFzcyBhcnJheSIpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICAgICAgJDEuc2V0QXJyYXkoZmFsc2UpOworICAgICAgICB9CisgICAgfQorICAgIHwgdHlwZV9x
dWFsaWZpZXIgdHlwZV9zcGVjaWZpZXIgIHsKKyAgICAgICAgaWYgKCQyLmFycmF5KSB7CisgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3Mg
YXJyYXkiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQy
LnNldEFycmF5KGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgkMS5xdWFsaWZpZXIg
PT0gRXZxQXR0cmlidXRlICYmCisgICAgICAgICAgICAoJDIudHlwZSA9PSBFYnRCb29sIHx8ICQy
LnR5cGUgPT0gRWJ0SW50KSkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJjYW5u
b3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSk7Cisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCgk
MS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8ICQxLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5n
T3V0KSAmJgorICAgICAgICAgICAgKCQyLnR5cGUgPT0gRWJ0Qm9vbCB8fCAkMi50eXBlID09IEVi
dEludCkpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAiY2Fubm90IGJlIGJvb2wg
b3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikpOworICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgICQkID0gJDI7CisgICAgICAg
ICQkLnF1YWxpZmllciA9ICQxLnF1YWxpZmllcjsKKyAgICB9CisgICAgOworCit0eXBlX3F1YWxp
ZmllcgorICAgIDogQ09OU1RfUVVBTCB7CisgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2
cUNvbnN0LCBAMSk7CisgICAgfQorICAgIHwgQVRUUklCVVRFIHsKKyAgICAgICAgVkVSVEVYX09O
TFkoImF0dHJpYnV0ZSIsIEAxKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hl
Y2soQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImF0dHJpYnV0ZSIp
KQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAkJC5zZXRCYXNpYyhF
YnRWb2lkLCBFdnFBdHRyaWJ1dGUsIEAxKTsKKyAgICB9CisgICAgfCBWQVJZSU5HIHsKKyAgICAg
ICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSwgInZhcnlpbmciKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NIQURF
UikKKyAgICAgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cVZhcnlpbmdPdXQsIEAxKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVmFyeWlu
Z0luLCBAMSk7CisgICAgfQorICAgIHwgSU5WQVJJQU5UIFZBUllJTkcgeworICAgICAgICBpZiAo
Y29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjayhAMSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9i
YWxMZXZlbCgpLCAiaW52YXJpYW50IHZhcnlpbmciKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NI
QURFUikKKyAgICAgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFyaWFudFZhcnlp
bmdPdXQsIEAxKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9p
ZCwgRXZxSW52YXJpYW50VmFyeWluZ0luLCBAMSk7CisgICAgfQorICAgIHwgVU5JRk9STSB7Cisg
ICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKEAxLCBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCksICJ1bmlmb3JtIikpCisgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cVVuaWZvcm0sIEAxKTsK
KyAgICB9CisgICAgOworCit0eXBlX3NwZWNpZmllcgorICAgIDogdHlwZV9zcGVjaWZpZXJfbm9f
cHJlYyB7CisgICAgICAgICQkID0gJDE7CisKKyAgICAgICAgaWYgKCQkLnByZWNpc2lvbiA9PSBF
YnBVbmRlZmluZWQpIHsKKyAgICAgICAgICAgICQkLnByZWNpc2lvbiA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmdldERlZmF1bHRQcmVjaXNpb24oJDEudHlwZSk7CisgICAgICAgICAgICBpZiAoY29u
dGV4dC0+cHJlY2lzaW9uRXJyb3JDaGVjayhAMSwgJCQucHJlY2lzaW9uLCAkMS50eXBlKSkgewor
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICB8IHByZWNpc2lvbl9xdWFsaWZpZXIgdHlwZV9zcGVjaWZpZXJfbm9f
cHJlYyB7CisgICAgICAgICQkID0gJDI7CisgICAgICAgICQkLnByZWNpc2lvbiA9ICQxOworICAg
IH0KKyAgICA7CisKK3ByZWNpc2lvbl9xdWFsaWZpZXIKKyAgICA6IEhJR0hfUFJFQ0lTSU9OIHsK
KyAgICAgICAgJCQgPSBFYnBIaWdoOworICAgIH0KKyAgICB8IE1FRElVTV9QUkVDSVNJT04gewor
ICAgICAgICAkJCA9IEVicE1lZGl1bTsKKyAgICB9CisgICAgfCBMT1dfUFJFQ0lTSU9OICB7Cisg
ICAgICAgICQkID0gRWJwTG93OworICAgIH0KKyAgICA7CisKK3R5cGVfc3BlY2lmaWVyX25vX3By
ZWMKKyAgICA6IHR5cGVfc3BlY2lmaWVyX25vbmFycmF5IHsKKyAgICAgICAgJCQgPSAkMTsKKyAg
ICB9CisgICAgfCB0eXBlX3NwZWNpZmllcl9ub25hcnJheSBMRUZUX0JSQUNLRVQgY29uc3RhbnRf
ZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKKyAgICAgICAgJCQgPSAkMTsKKworICAgICAgICBp
ZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjayhAMiwgJDEpKQorICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludCBzaXplOwor
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soQDIsICQzLCBzaXpl
KSkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJC5z
ZXRBcnJheSh0cnVlLCBzaXplKTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisKK3R5cGVfc3Bl
Y2lmaWVyX25vbmFycmF5CisgICAgOiBWT0lEX1RZUEUgeworICAgICAgICBUUXVhbGlmaWVyIHF1
YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIHF1YWwsIEAxKTsKKyAg
ICB9CisgICAgfCBGTE9BVF9UWVBFIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4
dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5
OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8
IElOVF9UWVBFIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAk
JC5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBCT09MX1RZUEUgewor
ICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVi
dEJvb2wsIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBWRUMyIHsKKyAgICAgICAgVFF1YWxpZmll
ciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFs
IDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgQDEp
OworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMik7CisgICAgfQorICAgIHwgVkVDMyB7CisgICAg
ICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Rmxv
YXQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRlKDMpOworICAgIH0KKyAgICB8
IFZFQzQgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNl
dEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSg0KTsK
KyAgICB9CisgICAgfCBCVkVDMiB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
KyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgQDEpOworICAgICAgICAkJC5zZXRB
Z2dyZWdhdGUoMik7CisgICAgfQorICAgIHwgQlZFQzMgeworICAgICAgICBUUXVhbGlmaWVyIHF1
YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEJvb2wsIHF1YWwsIEAxKTsKKyAg
ICAgICAgJCQuc2V0QWdncmVnYXRlKDMpOworICAgIH0KKyAgICB8IEJWRUM0IHsKKyAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRCb29sLCBx
dWFsLCBAMSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSg0KTsKKyAgICB9CisgICAgfCBJVkVD
MiB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFz
aWMoRWJ0SW50LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgyKTsKKyAgICB9
CisgICAgfCBJVkVDMyB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAg
ICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0
ZSgzKTsKKyAgICB9CisgICAgfCBJVkVDNCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCBAMSk7CisgICAgICAgICQk
LnNldEFnZ3JlZ2F0ZSg0KTsKKyAgICB9CisgICAgfCBNQVRSSVgyIHsKKyAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwg
QDEpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMiwgdHJ1ZSk7CisgICAgfQorICAgIHwgTUFU
UklYMyB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0
R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0
QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRlKDMsIHRy
dWUpOworICAgIH0KKyAgICB8IE1BVFJJWDQgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7CisgICAgICAg
ICQkLnNldEFnZ3JlZ2F0ZSg0LCB0cnVlKTsKKyAgICB9CisgICAgfCBTQU1QTEVSMkQgeworICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidFNh
bXBsZXIyRCwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IFNBTVBMRVJDVUJFIHsKKyAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVy
Q3ViZSwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IFNBTVBMRVJfRVhURVJOQUxfT0VTIHsKKyAg
ICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0V4dGVuc2lvbigiR0xfT0VTX0VHTF9pbWFnZV9l
eHRlcm5hbCIpKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgInVuc3VwcG9ydGVk
IHR5cGUiLCAic2FtcGxlckV4dGVybmFsT0VTIik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAg
ICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyRXh0ZXJuYWxPRVMsIHF1YWwsIEAxKTsKKyAgICB9
CisgICAgfCBTQU1QTEVSMkRSRUNUIHsKKyAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0V4
dGVuc2lvbigiR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlIikpIHsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKEAxLCAidW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyMkRSZWN0Iik7CisgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgVFF1YWxpZmll
ciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFs
IDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyMkRSZWN0LCBx
dWFsLCBAMSk7CisgICAgfQorICAgIHwgc3RydWN0X3NwZWNpZmllciB7CisgICAgICAgICQkID0g
JDE7CisgICAgICAgICQkLnF1YWxpZmllciA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICB9CisgICAgfCBUWVBFX05B
TUUgeworICAgICAgICAvLworICAgICAgICAvLyBUaGlzIGlzIGZvciB1c2VyIGRlZmluZWQgdHlw
ZSBuYW1lcy4gIFRoZSBsZXhpY2FsIHBoYXNlIGxvb2tlZCB1cCB0aGUKKyAgICAgICAgLy8gdHlw
ZS4KKyAgICAgICAgLy8KKyAgICAgICAgVFR5cGUmIHN0cnVjdHVyZSA9IHN0YXRpY19jYXN0PFRW
YXJpYWJsZSo+KCQxLnN5bWJvbCktPmdldFR5cGUoKTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTdHJ1Y3QsIHF1YWwsIEAxKTsKKyAg
ICAgICAgJCQudXNlckRlZiA9ICZzdHJ1Y3R1cmU7CisgICAgfQorICAgIDsKKworc3RydWN0X3Nw
ZWNpZmllcgorICAgIDogU1RSVUNUIGlkZW50aWZpZXIgTEVGVF9CUkFDRSB7IGlmIChjb250ZXh0
LT5lbnRlclN0cnVjdERlY2xhcmF0aW9uKEAyLCAqJDIuc3RyaW5nKSkgY29udGV4dC0+cmVjb3Zl
cigpOyB9IHN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IFJJR0hUX0JSQUNFIHsKKyAgICAgICAgaWYg
KGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZykpCisgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgVFR5cGUqIHN0cnVjdHVyZSA9IG5ldyBU
VHlwZShuZXcgVFN0cnVjdHVyZSgkMi5zdHJpbmcsICQ1KSk7CisgICAgICAgIFRWYXJpYWJsZSog
dXNlclR5cGVEZWYgPSBuZXcgVFZhcmlhYmxlKCQyLnN0cmluZywgKnN0cnVjdHVyZSwgdHJ1ZSk7
CisgICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgqdXNlclR5cGVEZWYp
KSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgInJlZGVmaW5pdGlvbiIsICQyLnN0
cmluZy0+Y19zdHIoKSwgInN0cnVjdCIpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICB9CisgICAgICAgICQkLnNldEJhc2ljKEVidFN0cnVjdCwgRXZxVGVtcG9yYXJ5
LCBAMSk7CisgICAgICAgICQkLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7CisgICAgICAgIGNvbnRleHQt
PmV4aXRTdHJ1Y3REZWNsYXJhdGlvbigpOworICAgIH0KKyAgICB8IFNUUlVDVCBMRUZUX0JSQUNF
IHsgaWYgKGNvbnRleHQtPmVudGVyU3RydWN0RGVjbGFyYXRpb24oQDIsICokMi5zdHJpbmcpKSBj
b250ZXh0LT5yZWNvdmVyKCk7IH0gc3RydWN0X2RlY2xhcmF0aW9uX2xpc3QgUklHSFRfQlJBQ0Ug
eworICAgICAgICBUVHlwZSogc3RydWN0dXJlID0gbmV3IFRUeXBlKG5ldyBUU3RydWN0dXJlKE5l
d1Bvb2xUU3RyaW5nKCIiKSwgJDQpKTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U3RydWN0LCBF
dnFUZW1wb3JhcnksIEAxKTsKKyAgICAgICAgJCQudXNlckRlZiA9IHN0cnVjdHVyZTsKKyAgICAg
ICAgY29udGV4dC0+ZXhpdFN0cnVjdERlY2xhcmF0aW9uKCk7CisgICAgfQorICAgIDsKKworc3Ry
dWN0X2RlY2xhcmF0aW9uX2xpc3QKKyAgICA6IHN0cnVjdF9kZWNsYXJhdGlvbiB7CisgICAgICAg
ICQkID0gJDE7CisgICAgfQorICAgIHwgc3RydWN0X2RlY2xhcmF0aW9uX2xpc3Qgc3RydWN0X2Rl
Y2xhcmF0aW9uIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCAkMi0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIFRGaWVsZCogZmllbGQgPSAoKiQy
KVtpXTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgJCQtPnNpemUoKTsgKytq
KSB7CisgICAgICAgICAgICAgICAgaWYgKCgqJCQpW2pdLT5uYW1lKCkgPT0gZmllbGQtPm5hbWUo
KSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgImR1cGxpY2F0ZSBm
aWVsZCBuYW1lIGluIHN0cnVjdHVyZToiLCAic3RydWN0IiwgZmllbGQtPm5hbWUoKS5jX3N0cigp
KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICQkLT5wdXNoX2JhY2soZmllbGQpOwor
ICAgICAgICB9CisgICAgfQorICAgIDsKKworc3RydWN0X2RlY2xhcmF0aW9uCisgICAgOiB0eXBl
X3NwZWNpZmllciBzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0IFNFTUlDT0xPTiB7CisgICAgICAgICQk
ID0gJDI7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPnZvaWRFcnJvckNoZWNrKEAxLCAoKiQyKVsw
XS0+bmFtZSgpLCAkMSkpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8ICQkLT5zaXplKCk7ICsr
aSkgeworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIENhcmVmdWwgbm90IHRvIHJlcGxh
Y2UgYWxyZWFkeSBrbm93biBhc3BlY3RzIG9mIHR5cGUsIGxpa2UgYXJyYXktbmVzcworICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgIFRUeXBlKiB0eXBlID0gKCokJClbaV0tPnR5cGUoKTsKKyAg
ICAgICAgICAgIHR5cGUtPnNldEJhc2ljVHlwZSgkMS50eXBlKTsKKyAgICAgICAgICAgIHR5cGUt
PnNldE5vbWluYWxTaXplKCQxLnNpemUpOworICAgICAgICAgICAgdHlwZS0+c2V0TWF0cml4KCQx
Lm1hdHJpeCk7CisgICAgICAgICAgICB0eXBlLT5zZXRQcmVjaXNpb24oJDEucHJlY2lzaW9uKTsK
KworICAgICAgICAgICAgLy8gZG9uJ3QgYWxsb3cgYXJyYXlzIG9mIGFycmF5cworICAgICAgICAg
ICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5h
cnJheVR5cGVFcnJvckNoZWNrKEAxLCAkMSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgkMS5hcnJheSkKKyAg
ICAgICAgICAgICAgICB0eXBlLT5zZXRBcnJheVNpemUoJDEuYXJyYXlTaXplKTsKKyAgICAgICAg
ICAgIGlmICgkMS51c2VyRGVmKQorICAgICAgICAgICAgICAgIHR5cGUtPnNldFN0cnVjdCgkMS51
c2VyRGVmLT5nZXRTdHJ1Y3QoKSk7CisKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RO
ZXN0aW5nRXJyb3JDaGVjayhAMSwgKigqJCQpW2ldKSkKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCitzdHJ1Y3RfZGVjbGFyYXRv
cl9saXN0CisgICAgOiBzdHJ1Y3RfZGVjbGFyYXRvciB7CisgICAgICAgICQkID0gTmV3UG9vbFRG
aWVsZExpc3QoKTsKKyAgICAgICAgJCQtPnB1c2hfYmFjaygkMSk7CisgICAgfQorICAgIHwgc3Ry
dWN0X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBzdHJ1Y3RfZGVjbGFyYXRvciB7CisgICAgICAgICQk
LT5wdXNoX2JhY2soJDMpOworICAgIH0KKyAgICA7CisKK3N0cnVjdF9kZWNsYXJhdG9yCisgICAg
OiBpZGVudGlmaWVyIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjayhA
MSwgKiQxLnN0cmluZykpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAg
ICAgVFR5cGUqIHR5cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKKyAgICAg
ICAgJCQgPSBuZXcgVEZpZWxkKHR5cGUsICQxLnN0cmluZyk7CisgICAgfQorICAgIHwgaWRlbnRp
ZmllciBMRUZUX0JSQUNLRVQgY29uc3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKKyAg
ICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjayhAMSwgKiQxLnN0cmluZykpCisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgVFR5cGUqIHR5cGUgPSBu
ZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKKyAgICAgICAgaW50IHNpemUgPSAwOwor
ICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjayhAMywgJDMsIHNpemUpKQor
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB0eXBlLT5zZXRBcnJheVNp
emUoc2l6ZSk7CisKKyAgICAgICAgJCQgPSBuZXcgVEZpZWxkKHR5cGUsICQxLnN0cmluZyk7Cisg
ICAgfQorICAgIDsKKworaW5pdGlhbGl6ZXIKKyAgICA6IGFzc2lnbm1lbnRfZXhwcmVzc2lvbiB7
ICQkID0gJDE7IH0KKyAgICA7CisKK2RlY2xhcmF0aW9uX3N0YXRlbWVudAorICAgIDogZGVjbGFy
YXRpb24geyAkJCA9ICQxOyB9CisgICAgOworCitzdGF0ZW1lbnQKKyAgICA6IGNvbXBvdW5kX3N0
YXRlbWVudCAgeyAkJCA9ICQxOyB9CisgICAgfCBzaW1wbGVfc3RhdGVtZW50ICAgIHsgJCQgPSAk
MTsgfQorICAgIDsKKworLy8gR3JhbW1hciBOb3RlOiAgTm8gbGFiZWxlZCBzdGF0ZW1lbnRzOyAn
Z290bycgaXMgbm90IHN1cHBvcnRlZC4KKworc2ltcGxlX3N0YXRlbWVudAorICAgIDogZGVjbGFy
YXRpb25fc3RhdGVtZW50IHsgJCQgPSAkMTsgfQorICAgIHwgZXhwcmVzc2lvbl9zdGF0ZW1lbnQg
IHsgJCQgPSAkMTsgfQorICAgIHwgc2VsZWN0aW9uX3N0YXRlbWVudCAgIHsgJCQgPSAkMTsgfQor
ICAgIHwgaXRlcmF0aW9uX3N0YXRlbWVudCAgIHsgJCQgPSAkMTsgfQorICAgIHwganVtcF9zdGF0
ZW1lbnQgICAgICAgIHsgJCQgPSAkMTsgfQorICAgIDsKKworY29tcG91bmRfc3RhdGVtZW50Cisg
ICAgOiBMRUZUX0JSQUNFIFJJR0hUX0JSQUNFIHsgJCQgPSAwOyB9CisgICAgfCBMRUZUX0JSQUNF
IHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyB9IHN0YXRlbWVudF9saXN0IHsgY29udGV4
dC0+c3ltYm9sVGFibGUucG9wKCk7IH0gUklHSFRfQlJBQ0UgeworICAgICAgICBpZiAoJDMgIT0g
MCkgeworICAgICAgICAgICAgJDMtPnNldE9wKEVPcFNlcXVlbmNlKTsKKyAgICAgICAgICAgICQz
LT5zZXRMaW5lKEAkKTsKKyAgICAgICAgfQorICAgICAgICAkJCA9ICQzOworICAgIH0KKyAgICA7
CisKK3N0YXRlbWVudF9ub19uZXdfc2NvcGUKKyAgICA6IGNvbXBvdW5kX3N0YXRlbWVudF9ub19u
ZXdfc2NvcGUgeyAkJCA9ICQxOyB9CisgICAgfCBzaW1wbGVfc3RhdGVtZW50ICAgICAgICAgICAg
ICAgIHsgJCQgPSAkMTsgfQorICAgIDsKKworc3RhdGVtZW50X3dpdGhfc2NvcGUKKyAgICA6IHsg
Y29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyB9IGNvbXBvdW5kX3N0YXRlbWVudF9ub19uZXdf
c2NvcGUgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgJCQgPSAkMjsgfQorICAgIHwgeyBj
b250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0gc2ltcGxlX3N0YXRlbWVudCAgICAgICAgICAg
ICAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOyAkJCA9ICQyOyB9CisgICAgOworCitj
b21wb3VuZF9zdGF0ZW1lbnRfbm9fbmV3X3Njb3BlCisgICAgLy8gU3RhdGVtZW50IHRoYXQgZG9l
c24ndCBjcmVhdGUgYSBuZXcgc2NvcGUsIGZvciBzZWxlY3Rpb25fc3RhdGVtZW50LCBpdGVyYXRp
b25fc3RhdGVtZW50CisgICAgOiBMRUZUX0JSQUNFIFJJR0hUX0JSQUNFIHsKKyAgICAgICAgJCQg
PSAwOworICAgIH0KKyAgICB8IExFRlRfQlJBQ0Ugc3RhdGVtZW50X2xpc3QgUklHSFRfQlJBQ0Ug
eworICAgICAgICBpZiAoJDIpIHsKKyAgICAgICAgICAgICQyLT5zZXRPcChFT3BTZXF1ZW5jZSk7
CisgICAgICAgICAgICAkMi0+c2V0TGluZShAJCk7CisgICAgICAgIH0KKyAgICAgICAgJCQgPSAk
MjsKKyAgICB9CisgICAgOworCitzdGF0ZW1lbnRfbGlzdAorICAgIDogc3RhdGVtZW50IHsKKyAg
ICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZSgkMSwgQCQpOwor
ICAgIH0KKyAgICB8IHN0YXRlbWVudF9saXN0IHN0YXRlbWVudCB7CisgICAgICAgICQkID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEsICQyLCBAJCk7CisgICAgfQorICAg
IDsKKworZXhwcmVzc2lvbl9zdGF0ZW1lbnQKKyAgICA6IFNFTUlDT0xPTiAgeyAkJCA9IDA7IH0K
KyAgICB8IGV4cHJlc3Npb24gU0VNSUNPTE9OICB7ICQkID0gc3RhdGljX2Nhc3Q8VEludGVybU5v
ZGUqPigkMSk7IH0KKyAgICA7CisKK3NlbGVjdGlvbl9zdGF0ZW1lbnQKKyAgICA6IElGIExFRlRf
UEFSRU4gZXhwcmVzc2lvbiBSSUdIVF9QQVJFTiBzZWxlY3Rpb25fcmVzdF9zdGF0ZW1lbnQgewor
ICAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2soQDEsICQzKSkKKyAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkU2VsZWN0aW9uKCQzLCAkNSwgQDEpOworICAgIH0KKyAgICA7CisKK3NlbGVjdGlvbl9yZXN0
X3N0YXRlbWVudAorICAgIDogc3RhdGVtZW50X3dpdGhfc2NvcGUgRUxTRSBzdGF0ZW1lbnRfd2l0
aF9zY29wZSB7CisgICAgICAgICQkLm5vZGUxID0gJDE7CisgICAgICAgICQkLm5vZGUyID0gJDM7
CisgICAgfQorICAgIHwgc3RhdGVtZW50X3dpdGhfc2NvcGUgeworICAgICAgICAkJC5ub2RlMSA9
ICQxOworICAgICAgICAkJC5ub2RlMiA9IDA7CisgICAgfQorICAgIDsKKworLy8gR3JhbW1hciBO
b3RlOiAgTm8gJ3N3aXRjaCcuICBTd2l0Y2ggc3RhdGVtZW50cyBub3Qgc3VwcG9ydGVkLgorCitj
b25kaXRpb24KKyAgICAvLyBJbiAxOTk2IGMrKyBkcmFmdCwgY29uZGl0aW9ucyBjYW4gaW5jbHVk
ZSBzaW5nbGUgZGVjbGFyYXRpb25zCisgICAgOiBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAk
MTsKKyAgICAgICAgaWYgKGNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCQxLT5nZXRMaW5lKCksICQx
KSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICB9CisgICAgfCBmdWxseV9z
cGVjaWZpZWRfdHlwZSBpZGVudGlmaWVyIEVRVUFMIGluaXRpYWxpemVyIHsKKyAgICAgICAgVElu
dGVybU5vZGUqIGludGVybU5vZGU7CisgICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZp
ZXJFcnJvckNoZWNrKEAyLCAkMSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVjayhAMiwgJDEpKQorICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmICghY29udGV4dC0+ZXhlY3V0ZUluaXRp
YWxpemVyKEAyLCAqJDIuc3RyaW5nLCAkMSwgJDQsIGludGVybU5vZGUpKQorICAgICAgICAgICAg
JCQgPSAkNDsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgICAgICAkJCA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCitpdGVyYXRp
b25fc3RhdGVtZW50CisgICAgOiBXSElMRSBMRUZUX1BBUkVOIHsgY29udGV4dC0+c3ltYm9sVGFi
bGUucHVzaCgpOyArK2NvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0gY29uZGl0aW9uIFJJR0hU
X1BBUkVOIHN0YXRlbWVudF9ub19uZXdfc2NvcGUgeworICAgICAgICBjb250ZXh0LT5zeW1ib2xU
YWJsZS5wb3AoKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkTG9vcChF
TG9vcFdoaWxlLCAwLCAkNCwgMCwgJDYsIEAxKTsKKyAgICAgICAgLS1jb250ZXh0LT5sb29wTmVz
dGluZ0xldmVsOworICAgIH0KKyAgICB8IERPIHsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVs
OyB9IHN0YXRlbWVudF93aXRoX3Njb3BlIFdISUxFIExFRlRfUEFSRU4gZXhwcmVzc2lvbiBSSUdI
VF9QQVJFTiBTRU1JQ09MT04geworICAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2so
QDgsICQ2KSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAkJCA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRMb29wKEVMb29wRG9XaGlsZSwgMCwgJDYsIDAsICQz
LCBANCk7CisgICAgICAgIC0tY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsKKyAgICB9CisgICAg
fCBGT1IgTEVGVF9QQVJFTiB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgKytjb250ZXh0
LT5sb29wTmVzdGluZ0xldmVsOyB9IGZvcl9pbml0X3N0YXRlbWVudCBmb3JfcmVzdF9zdGF0ZW1l
bnQgUklHSFRfUEFSRU4gc3RhdGVtZW50X25vX25ld19zY29wZSB7CisgICAgICAgIGNvbnRleHQt
PnN5bWJvbFRhYmxlLnBvcCgpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRMb29wKEVMb29wRm9yLCAkNCwgcmVpbnRlcnByZXRfY2FzdDxUSW50ZXJtVHlwZWQqPigkNS5u
b2RlMSksIHJlaW50ZXJwcmV0X2Nhc3Q8VEludGVybVR5cGVkKj4oJDUubm9kZTIpLCAkNywgQDEp
OworICAgICAgICAtLWNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7CisgICAgfQorICAgIDsKKwor
Zm9yX2luaXRfc3RhdGVtZW50CisgICAgOiBleHByZXNzaW9uX3N0YXRlbWVudCB7CisgICAgICAg
ICQkID0gJDE7CisgICAgfQorICAgIHwgZGVjbGFyYXRpb25fc3RhdGVtZW50IHsKKyAgICAgICAg
JCQgPSAkMTsKKyAgICB9CisgICAgOworCitjb25kaXRpb25vcHQKKyAgICA6IGNvbmRpdGlvbiB7
CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgLyogTWF5IGJlIG51bGwgKi8geworICAg
ICAgICAkJCA9IDA7CisgICAgfQorICAgIDsKKworZm9yX3Jlc3Rfc3RhdGVtZW50CisgICAgOiBj
b25kaXRpb25vcHQgU0VNSUNPTE9OIHsKKyAgICAgICAgJCQubm9kZTEgPSAkMTsKKyAgICAgICAg
JCQubm9kZTIgPSAwOworICAgIH0KKyAgICB8IGNvbmRpdGlvbm9wdCBTRU1JQ09MT04gZXhwcmVz
c2lvbiAgeworICAgICAgICAkJC5ub2RlMSA9ICQxOworICAgICAgICAkJC5ub2RlMiA9ICQzOwor
ICAgIH0KKyAgICA7CisKK2p1bXBfc3RhdGVtZW50CisgICAgOiBDT05USU5VRSBTRU1JQ09MT04g
eworICAgICAgICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7CisgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcihAMSwgImNvbnRpbnVlIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQg
aW4gbG9vcHMiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
IH0KKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcENvbnRp
bnVlLCBAMSk7CisgICAgfQorICAgIHwgQlJFQUsgU0VNSUNPTE9OIHsKKyAgICAgICAgaWYgKGNv
bnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPD0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoQDEsICJicmVhayBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIpOworICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgICQkID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BCcmVhaywgQDEpOworICAgIH0KKyAgICB8
IFJFVFVSTiBTRU1JQ09MT04geworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRCcmFuY2goRU9wUmV0dXJuLCBAMSk7CisgICAgICAgIGlmIChjb250ZXh0LT5jdXJyZW50RnVu
Y3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7CisgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcihAMSwgIm5vbi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUiLCAi
cmV0dXJuIik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgfCBSRVRVUk4gZXhwcmVzc2lvbiBTRU1JQ09MT04geworICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCAkMiwgQDEpOworICAgICAg
ICBjb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IHRydWU7CisgICAgICAgIGlmIChjb250
ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkKSB7Cisg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgInZvaWQgZnVuY3Rpb24gY2Fubm90IHJldHVy
biBhIHZhbHVlIiwgInJldHVybiIpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICB9IGVsc2UgaWYgKCooY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZSkgIT0gJDIt
PmdldFR5cGUoKSkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJmdW5jdGlvbiBy
ZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6IiwgInJldHVybiIpOworICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgfQorICAgIHwgRElTQ0FSRCBTRU1JQ09M
T04geworICAgICAgICBGUkFHX09OTFkoImRpc2NhcmQiLCBAMSk7CisgICAgICAgICQkID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BLaWxsLCBAMSk7CisgICAgfQorICAgIDsK
KworLy8gR3JhbW1hciBOb3RlOiAgTm8gJ2dvdG8nLiAgR290b3MgYXJlIG5vdCBzdXBwb3J0ZWQu
CisKK3RyYW5zbGF0aW9uX3VuaXQKKyAgICA6IGV4dGVybmFsX2RlY2xhcmF0aW9uIHsKKyAgICAg
ICAgJCQgPSAkMTsKKyAgICAgICAgY29udGV4dC0+dHJlZVJvb3QgPSAkJDsKKyAgICB9CisgICAg
fCB0cmFuc2xhdGlvbl91bml0IGV4dGVybmFsX2RlY2xhcmF0aW9uIHsKKyAgICAgICAgJCQgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMSwgJDIsIEAkKTsKKyAgICAgICAg
Y29udGV4dC0+dHJlZVJvb3QgPSAkJDsKKyAgICB9CisgICAgOworCitleHRlcm5hbF9kZWNsYXJh
dGlvbgorICAgIDogZnVuY3Rpb25fZGVmaW5pdGlvbiB7CisgICAgICAgICQkID0gJDE7CisgICAg
fQorICAgIHwgZGVjbGFyYXRpb24geworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICA7CisK
K2Z1bmN0aW9uX2RlZmluaXRpb24KKyAgICA6IGZ1bmN0aW9uX3Byb3RvdHlwZSB7CisgICAgICAg
IFRGdW5jdGlvbiogZnVuY3Rpb24gPSAkMS5mdW5jdGlvbjsKKyAgICAgICAgCisgICAgICAgIGNv
bnN0IFRTeW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbihm
dW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoYnVpbHRJ
bikKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJidWlsdC1pbiBm
dW5jdGlvbnMgY2Fubm90IGJlIHJlZGVmaW5lZCIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIo
KSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNv
bnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoZnVuY3Rpb24tPmdldE1hbmdsZWROYW1lKCkpKTsKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gTm90ZTogICdwcmV2RGVjJyBjb3VsZCBiZSAnZnVuY3Rpb24n
IGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUgc2VlbiBmdW5jdGlvbgorICAgICAgICAv
LyBhcyBpdCB3b3VsZCBoYXZlIGp1c3QgYmVlbiBwdXQgaW4gdGhlIHN5bWJvbCB0YWJsZS4gIE90
aGVyd2lzZSwgd2UncmUgbG9va2luZyB1cAorICAgICAgICAvLyBhbiBlYXJsaWVyIG9jY3VyYW5j
ZS4KKyAgICAgICAgLy8KKyAgICAgICAgaWYgKHByZXZEZWMtPmlzRGVmaW5lZCgpKSB7CisgICAg
ICAgICAgICAvLworICAgICAgICAgICAgLy8gVGhlbiB0aGlzIGZ1bmN0aW9uIGFscmVhZHkgaGFz
IGEgYm9keS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwg
ImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIo
KSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAg
cHJldkRlYy0+c2V0RGVmaW5lZCgpOworCisgICAgICAgIC8vCisgICAgICAgIC8vIFJhaXNlIGVy
cm9yIG1lc3NhZ2UgaWYgbWFpbiBmdW5jdGlvbiB0YWtlcyBhbnkgcGFyYW1ldGVycyBvciByZXR1
cm4gYW55dGhpbmcgb3RoZXIgdGhhbiB2b2lkCisgICAgICAgIC8vCisgICAgICAgIGlmIChmdW5j
dGlvbi0+Z2V0TmFtZSgpID09ICJtYWluIikgeworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLT5n
ZXRQYXJhbUNvdW50KCkgPiAwKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEs
ICJmdW5jdGlvbiBjYW5ub3QgdGFrZSBhbnkgcGFyYW1ldGVyKHMpIiwgZnVuY3Rpb24tPmdldE5h
bWUoKS5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoZnVuY3Rpb24tPmdldFJldHVyblR5cGUoKS5nZXRC
YXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
QDEsICIiLCBmdW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCksICJtYWlu
IGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIpOworICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vCisg
ICAgICAgIC8vIFJlbWVtYmVyIHRoZSByZXR1cm4gdHlwZSBmb3IgbGF0ZXIgY2hlY2tpbmcgZm9y
IFJFVFVSTiBzdGF0ZW1lbnRzLgorICAgICAgICAvLworICAgICAgICBjb250ZXh0LT5jdXJyZW50
RnVuY3Rpb25UeXBlID0gJihwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkpOworICAgICAgICBjb250
ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IGZhbHNlOworCisgICAgICAgIC8vCisgICAgICAg
IC8vIEluc2VydCBwYXJhbWV0ZXJzIGludG8gdGhlIHN5bWJvbCB0YWJsZS4KKyAgICAgICAgLy8g
SWYgdGhlIHBhcmFtZXRlciBoYXMgbm8gbmFtZSwgaXQncyBub3QgYW4gZXJyb3IsIGp1c3QgZG9u
J3QgaW5zZXJ0IGl0CisgICAgICAgIC8vIChjb3VsZCBiZSB1c2VkIGZvciB1bnVzZWQgYXJncyku
CisgICAgICAgIC8vCisgICAgICAgIC8vIEFsc28sIGFjY3VtdWxhdGUgdGhlIGxpc3Qgb2YgcGFy
YW1ldGVycyBpbnRvIHRoZSBISUwsIHNvIGxvd2VyIGxldmVsIGNvZGUKKyAgICAgICAgLy8ga25v
d3Mgd2hlcmUgdG8gZmluZCBwYXJhbWV0ZXJzLgorICAgICAgICAvLworICAgICAgICBUSW50ZXJt
QWdncmVnYXRlKiBwYXJhbU5vZGVzID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGU7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb24tPmdldFBhcmFtQ291bnQoKTsgaSsrKSB7Cisg
ICAgICAgICAgICBjb25zdCBUUGFyYW1ldGVyJiBwYXJhbSA9IGZ1bmN0aW9uLT5nZXRQYXJhbShp
KTsKKyAgICAgICAgICAgIGlmIChwYXJhbS5uYW1lICE9IDApIHsKKyAgICAgICAgICAgICAgICBU
VmFyaWFibGUgKnZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZShwYXJhbS5uYW1lLCAqcGFyYW0udHlw
ZSk7CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIHBh
cmFtZXRlcnMgd2l0aCBuYW1lIGluIHRoZSBzeW1ib2wgdGFibGUuCisgICAgICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnZh
cmlhYmxlKSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgInJlZGVm
aW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhcmlh
YmxlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAgICAgLy8gQWRkIHRoZSBwYXJhbWV0ZXIgdG8gdGhlIEhJTAorICAgICAgICAgICAgICAgIC8v
CisgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcyA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93
QWdncmVnYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJhbU5vZGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJ
ZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXROYW1lKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBAMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAx
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcyA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKHBhcmFtTm9kZXMsIGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsICpwYXJhbS50eXBlLCBAMSksIEAxKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdn
cmVnYXRlT3BlcmF0b3IocGFyYW1Ob2RlcywgRU9wUGFyYW1ldGVycywgQDEpOworICAgICAgICAk
MS5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJhbU5vZGVzOworICAgICAgICBjb250ZXh0LT5sb29wTmVz
dGluZ0xldmVsID0gMDsKKyAgICB9CisgICAgY29tcG91bmRfc3RhdGVtZW50X25vX25ld19zY29w
ZSB7CisgICAgICAgIC8vPz8gQ2hlY2sgdGhhdCBhbGwgcGF0aHMgcmV0dXJuIGEgdmFsdWUgaWYg
cmV0dXJuIHR5cGUgIT0gdm9pZCA/CisgICAgICAgIC8vICAgTWF5IGJlIGJlc3QgZG9uZSBhcyBw
b3N0IHByb2Nlc3MgcGhhc2Ugb24gaW50ZXJtZWRpYXRlIGNvZGUKKyAgICAgICAgaWYgKGNvbnRl
eHQtPmN1cnJlbnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQgJiYgISBj
b250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoQDEsICJmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZToiLCAiIiwgJDEuZnVuY3Rp
b24tPmdldE5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
Z3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1BZ2dyZWdhdGUsICQzLCBAJCk7CisgICAgICAgIGNvbnRl
eHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcigkJCwgRU9wRnVuY3Rpb24sIEAx
KTsKKyAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldE5hbWUoJDEuZnVuY3Rpb24tPmdl
dE1hbmdsZWROYW1lKCkuY19zdHIoKSk7CisgICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5z
ZXRUeXBlKCQxLmZ1bmN0aW9uLT5nZXRSZXR1cm5UeXBlKCkpOworCisgICAgICAgIC8vIHN0b3Jl
IHRoZSBwcmFnbWEgaW5mb3JtYXRpb24gZm9yIGRlYnVnIGFuZCBvcHRpbWl6ZSBhbmQgb3RoZXIg
dmVuZG9yIHNwZWNpZmljCisgICAgICAgIC8vIGluZm9ybWF0aW9uLiBUaGlzIGluZm9ybWF0aW9u
IGNhbiBiZSBxdWVyaWVkIGZyb20gdGhlIHBhcnNlIHRyZWUKKyAgICAgICAgJCQtPmdldEFzQWdn
cmVnYXRlKCktPnNldE9wdGltaXplKGNvbnRleHQtPnByYWdtYSgpLm9wdGltaXplKTsKKyAgICAg
ICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldERlYnVnKGNvbnRleHQtPnByYWdtYSgpLmRlYnVn
KTsKKworICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKKyAgICB9CisgICAgOwor
CislJQorCitpbnQgZ2xzbGFuZ19wYXJzZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7CisgICAg
cmV0dXJuIHl5cGFyc2UoY29udGV4dCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX2xleC5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX2xleC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNjQ4ZTc2MTA2NjNmMjc3OTA1NTY1YjQzOTdmZTE0YTQ5NzUzM2I0ZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL2dsc2xhbmdfbGV4LmNwcApAQCAtMCwwICsxLDI5NzggQEAKKyNsaW5lIDE3ICIuL2ds
c2xhbmcubCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQg
YnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKKworLy8gSWdub3JlIGVycm9ycyBp
biBhdXRvLWdlbmVyYXRlZCBjb2RlLgorI2lmIGRlZmluZWQoX19HTlVDX18pCisjcHJhZ21hIEdD
QyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLWZ1bmN0aW9uIgorI3ByYWdtYSBHQ0MgZGlh
Z25vc3RpYyBpZ25vcmVkICItV3VudXNlZC12YXJpYWJsZSIKKyNwcmFnbWEgR0NDIGRpYWdub3N0
aWMgaWdub3JlZCAiLVdzd2l0Y2gtZW51bSIKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpCisjcHJh
Z21hIHdhcm5pbmcoZGlzYWJsZTogNDA2NSkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MTg5
KQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ1MDUpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJs
ZTogNDcwMSkKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX2NsYW5nX18pCisjcHJhZ21hIGNsYW5n
IGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5r
bm93bi1wcmFnbWFzIgorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVj
YXRlZC1yZWdpc3RlciIKKyNlbmRpZgorCisjbGluZSAyNSAiLi9nbHNsYW5nX2xleC5jcHAiCisK
KyNkZWZpbmUgIFlZX0lOVF9BTElHTkVEIHNob3J0IGludAorCisvKiBBIGxleGljYWwgc2Nhbm5l
ciBnZW5lcmF0ZWQgYnkgZmxleCAqLworCisjZGVmaW5lIEZMRVhfU0NBTk5FUgorI2RlZmluZSBZ
WV9GTEVYX01BSk9SX1ZFUlNJT04gMgorI2RlZmluZSBZWV9GTEVYX01JTk9SX1ZFUlNJT04gNQor
I2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gMzcKKyNpZiBZWV9GTEVYX1NVQk1JTk9S
X1ZFUlNJT04gPiAwCisjZGVmaW5lIEZMRVhfQkVUQQorI2VuZGlmCisKKy8qIEZpcnN0LCB3ZSBk
ZWFsIHdpdGggIHBsYXRmb3JtLXNwZWNpZmljIG9yIGNvbXBpbGVyLXNwZWNpZmljIGlzc3Vlcy4g
Ki8KKworLyogYmVnaW4gc3RhbmRhcmQgQyBoZWFkZXJzLiAqLworI2luY2x1ZGUgPHN0ZGlvLmg+
CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRs
aWIuaD4KKworLyogZW5kIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KKworLyogZmxleCBpbnRlZ2Vy
IHR5cGUgZGVmaW5pdGlvbnMgKi8KKworI2lmbmRlZiBGTEVYSU5UX0gKKyNkZWZpbmUgRkxFWElO
VF9ICisKKy8qIEM5OSBzeXN0ZW1zIGhhdmUgPGludHR5cGVzLmg+LiBOb24tQzk5IHN5c3RlbXMg
bWF5IG9yIG1heSBub3QuICovCisKKyNpZiBkZWZpbmVkIChfX1NURENfVkVSU0lPTl9fKSAmJiBf
X1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKworLyogQzk5IHNheXMgdG8gZGVmaW5lIF9fU1RE
Q19MSU1JVF9NQUNST1MgYmVmb3JlIGluY2x1ZGluZyBzdGRpbnQuaCwKKyAqIGlmIHlvdSB3YW50
IHRoZSBsaW1pdCAobWF4L21pbikgbWFjcm9zIGZvciBpbnQgdHlwZXMuIAorICovCisjaWZuZGVm
IF9fU1REQ19MSU1JVF9NQUNST1MKKyNkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyAxCisjZW5k
aWYKKworI2luY2x1ZGUgPGludHR5cGVzLmg+Cit0eXBlZGVmIGludDhfdCBmbGV4X2ludDhfdDsK
K3R5cGVkZWYgdWludDhfdCBmbGV4X3VpbnQ4X3Q7Cit0eXBlZGVmIGludDE2X3QgZmxleF9pbnQx
Nl90OwordHlwZWRlZiB1aW50MTZfdCBmbGV4X3VpbnQxNl90OwordHlwZWRlZiBpbnQzMl90IGZs
ZXhfaW50MzJfdDsKK3R5cGVkZWYgdWludDMyX3QgZmxleF91aW50MzJfdDsKKyNlbHNlCit0eXBl
ZGVmIHNpZ25lZCBjaGFyIGZsZXhfaW50OF90OwordHlwZWRlZiBzaG9ydCBpbnQgZmxleF9pbnQx
Nl90OwordHlwZWRlZiBpbnQgZmxleF9pbnQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIGZs
ZXhfdWludDhfdDsgCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBmbGV4X3VpbnQxNl90Owor
dHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxleF91aW50MzJfdDsKKworLyogTGltaXRzIG9mIGludGVn
cmFsIHR5cGVzLiAqLworI2lmbmRlZiBJTlQ4X01JTgorI2RlZmluZSBJTlQ4X01JTiAgICAgICAg
ICAgICAgICgtMTI4KQorI2VuZGlmCisjaWZuZGVmIElOVDE2X01JTgorI2RlZmluZSBJTlQxNl9N
SU4gICAgICAgICAgICAgICgtMzI3NjctMSkKKyNlbmRpZgorI2lmbmRlZiBJTlQzMl9NSU4KKyNk
ZWZpbmUgSU5UMzJfTUlOICAgICAgICAgICAgICAoLTIxNDc0ODM2NDctMSkKKyNlbmRpZgorI2lm
bmRlZiBJTlQ4X01BWAorI2RlZmluZSBJTlQ4X01BWCAgICAgICAgICAgICAgICgxMjcpCisjZW5k
aWYKKyNpZm5kZWYgSU5UMTZfTUFYCisjZGVmaW5lIElOVDE2X01BWCAgICAgICAgICAgICAgKDMy
NzY3KQorI2VuZGlmCisjaWZuZGVmIElOVDMyX01BWAorI2RlZmluZSBJTlQzMl9NQVggICAgICAg
ICAgICAgICgyMTQ3NDgzNjQ3KQorI2VuZGlmCisjaWZuZGVmIFVJTlQ4X01BWAorI2RlZmluZSBV
SU5UOF9NQVggICAgICAgICAgICAgICgyNTVVKQorI2VuZGlmCisjaWZuZGVmIFVJTlQxNl9NQVgK
KyNkZWZpbmUgVUlOVDE2X01BWCAgICAgICAgICAgICAoNjU1MzVVKQorI2VuZGlmCisjaWZuZGVm
IFVJTlQzMl9NQVgKKyNkZWZpbmUgVUlOVDMyX01BWCAgICAgICAgICAgICAoNDI5NDk2NzI5NVUp
CisjZW5kaWYKKworI2VuZGlmIC8qICEgQzk5ICovCisKKyNlbmRpZiAvKiAhIEZMRVhJTlRfSCAq
LworCisjaWZkZWYgX19jcGx1c3BsdXMKKworLyogVGhlICJjb25zdCIgc3RvcmFnZS1jbGFzcy1t
b2RpZmllciBpcyB2YWxpZC4gKi8KKyNkZWZpbmUgWVlfVVNFX0NPTlNUCisKKyNlbHNlCS8qICEg
X19jcGx1c3BsdXMgKi8KKworLyogQzk5IHJlcXVpcmVzIF9fU1REQ19fIHRvIGJlIGRlZmluZWQg
YXMgMS4gKi8KKyNpZiBkZWZpbmVkIChfX1NURENfXykKKworI2RlZmluZSBZWV9VU0VfQ09OU1QK
KworI2VuZGlmCS8qIGRlZmluZWQgKF9fU1REQ19fKSAqLworI2VuZGlmCS8qICEgX19jcGx1c3Bs
dXMgKi8KKworI2lmZGVmIFlZX1VTRV9DT05TVAorI2RlZmluZSB5eWNvbnN0IGNvbnN0CisjZWxz
ZQorI2RlZmluZSB5eWNvbnN0CisjZW5kaWYKKworLyogUmV0dXJuZWQgdXBvbiBlbmQtb2YtZmls
ZS4gKi8KKyNkZWZpbmUgWVlfTlVMTCAwCisKKy8qIFByb21vdGVzIGEgcG9zc2libHkgbmVnYXRp
dmUsIHBvc3NpYmx5IHNpZ25lZCBjaGFyIHRvIGFuIHVuc2lnbmVkCisgKiBpbnRlZ2VyIGZvciB1
c2UgYXMgYW4gYXJyYXkgaW5kZXguICBJZiB0aGUgc2lnbmVkIGNoYXIgaXMgbmVnYXRpdmUsCisg
KiB3ZSB3YW50IHRvIGluc3RlYWQgdHJlYXQgaXQgYXMgYW4gOC1iaXQgdW5zaWduZWQgY2hhciwg
aGVuY2UgdGhlCisgKiBkb3VibGUgY2FzdC4KKyAqLworI2RlZmluZSBZWV9TQ19UT19VSShjKSAo
KHVuc2lnbmVkIGludCkgKHVuc2lnbmVkIGNoYXIpIGMpCisKKy8qIEFuIG9wYXF1ZSBwb2ludGVy
LiAqLworI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAorI2RlZmluZSBZWV9UWVBFREVG
X1lZX1NDQU5ORVJfVAordHlwZWRlZiB2b2lkKiB5eXNjYW5fdDsKKyNlbmRpZgorCisvKiBGb3Ig
Y29udmVuaWVuY2UsIHRoZXNlIHZhcnMgKHBsdXMgdGhlIGJpc29uIHZhcnMgZmFyIGJlbG93KQor
ICAgYXJlIG1hY3JvcyBpbiB0aGUgcmVlbnRyYW50IHNjYW5uZXIuICovCisjZGVmaW5lIHl5aW4g
eXlnLT55eWluX3IKKyNkZWZpbmUgeXlvdXQgeXlnLT55eW91dF9yCisjZGVmaW5lIHl5ZXh0cmEg
eXlnLT55eWV4dHJhX3IKKyNkZWZpbmUgeXlsZW5nIHl5Zy0+eXlsZW5nX3IKKyNkZWZpbmUgeXl0
ZXh0IHl5Zy0+eXl0ZXh0X3IKKyNkZWZpbmUgeXlsaW5lbm8gKFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfYnNfbGluZW5vKQorI2RlZmluZSB5eWNvbHVtbiAoWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9ic19jb2x1bW4pCisjZGVmaW5lIHl5X2ZsZXhfZGVidWcgeXlnLT55eV9mbGV4
X2RlYnVnX3IKKworLyogRW50ZXIgYSBzdGFydCBjb25kaXRpb24uICBUaGlzIG1hY3JvIHJlYWxs
eSBvdWdodCB0byB0YWtlIGEgcGFyYW1ldGVyLAorICogYnV0IHdlIGRvIGl0IHRoZSBkaXNndXN0
aW5nIGNydWZ0eSB3YXkgZm9yY2VkIG9uIHVzIGJ5IHRoZSAoKS1sZXNzCisgKiBkZWZpbml0aW9u
IG9mIEJFR0lOLgorICovCisjZGVmaW5lIEJFR0lOIHl5Zy0+eXlfc3RhcnQgPSAxICsgMiAqCisK
Ky8qIFRyYW5zbGF0ZSB0aGUgY3VycmVudCBzdGFydCBzdGF0ZSBpbnRvIGEgdmFsdWUgdGhhdCBj
YW4gYmUgbGF0ZXIgaGFuZGVkCisgKiB0byBCRUdJTiB0byByZXR1cm4gdG8gdGhlIHN0YXRlLiAg
VGhlIFlZU1RBVEUgYWxpYXMgaXMgZm9yIGxleAorICogY29tcGF0aWJpbGl0eS4KKyAqLworI2Rl
ZmluZSBZWV9TVEFSVCAoKHl5Zy0+eXlfc3RhcnQgLSAxKSAvIDIpCisjZGVmaW5lIFlZU1RBVEUg
WVlfU1RBUlQKKworLyogQWN0aW9uIG51bWJlciBmb3IgRU9GIHJ1bGUgb2YgYSBnaXZlbiBzdGFy
dCBzdGF0ZS4gKi8KKyNkZWZpbmUgWVlfU1RBVEVfRU9GKHN0YXRlKSAoWVlfRU5EX09GX0JVRkZF
UiArIHN0YXRlICsgMSkKKworLyogU3BlY2lhbCBhY3Rpb24gbWVhbmluZyAic3RhcnQgcHJvY2Vz
c2luZyBhIG5ldyBmaWxlIi4gKi8KKyNkZWZpbmUgWVlfTkVXX0ZJTEUgeXlyZXN0YXJ0KHl5aW4g
LHl5c2Nhbm5lciApCisKKyNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUl9DSEFSIDAKKworLyogU2l6
ZSBvZiBkZWZhdWx0IGlucHV0IGJ1ZmZlci4gKi8KKyNpZm5kZWYgWVlfQlVGX1NJWkUKKyNkZWZp
bmUgWVlfQlVGX1NJWkUgMTYzODQKKyNlbmRpZgorCisvKiBUaGUgc3RhdGUgYnVmIG11c3QgYmUg
bGFyZ2UgZW5vdWdoIHRvIGhvbGQgb25lIHN0YXRlIHBlciBjaGFyYWN0ZXIgaW4gdGhlIG1haW4g
YnVmZmVyLgorICovCisjZGVmaW5lIFlZX1NUQVRFX0JVRl9TSVpFICAgKChZWV9CVUZfU0laRSAr
IDIpICogc2l6ZW9mKHl5X3N0YXRlX3R5cGUpKQorCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfQlVG
RkVSX1NUQVRFCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCit0eXBlZGVmIHN0
cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFURTsKKyNlbmRpZgorCisjaWZuZGVm
IFlZX1RZUEVERUZfWVlfU0laRV9UCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfU0laRV9UCit0eXBl
ZGVmIHNpemVfdCB5eV9zaXplX3Q7CisjZW5kaWYKKworI2RlZmluZSBFT0JfQUNUX0NPTlRJTlVF
X1NDQU4gMAorI2RlZmluZSBFT0JfQUNUX0VORF9PRl9GSUxFIDEKKyNkZWZpbmUgRU9CX0FDVF9M
QVNUX01BVENIIDIKKworICAgIC8qIE5vdGU6IFdlIHNwZWNpZmljYWxseSBvbWl0IHRoZSB0ZXN0
IGZvciB5eV9ydWxlX2Nhbl9tYXRjaF9lb2wgYmVjYXVzZSBpdCByZXF1aXJlcworICAgICAqICAg
ICAgIGFjY2VzcyB0byB0aGUgbG9jYWwgdmFyaWFibGUgeXlfYWN0LiBTaW5jZSB5eWxlc3MoKSBp
cyBhIG1hY3JvLCBpdCB3b3VsZCBicmVhaworICAgICAqICAgICAgIGV4aXN0aW5nIHNjYW5uZXJz
IHRoYXQgY2FsbCB5eWxlc3MoKSBmcm9tIE9VVFNJREUgeXlsZXguIAorICAgICAqICAgICAgIE9u
ZSBvYnZpb3VzIHNvbHV0aW9uIGl0IHRvIG1ha2UgeXlfYWN0IGEgZ2xvYmFsLiBJIHRyaWVkIHRo
YXQsIGFuZCBzYXcKKyAgICAgKiAgICAgICBhIDUlIHBlcmZvcm1hbmNlIGhpdCBpbiBhIG5vbi15
eWxpbmVubyBzY2FubmVyLCBiZWNhdXNlIHl5X2FjdCBpcworICAgICAqICAgICAgIG5vcm1hbGx5
IGRlY2xhcmVkIGFzIGEgcmVnaXN0ZXIgdmFyaWFibGUtLSBzbyBpdCBpcyBub3Qgd29ydGggaXQu
CisgICAgICovCisgICAgI2RlZmluZSAgWVlfTEVTU19MSU5FTk8obikgXAorICAgICAgICAgICAg
ZG8geyBcCisgICAgICAgICAgICAgICAgaW50IHl5bDtcCisgICAgICAgICAgICAgICAgZm9yICgg
eXlsID0gbjsgeXlsIDwgeXlsZW5nOyArK3l5bCApXAorICAgICAgICAgICAgICAgICAgICBpZiAo
IHl5dGV4dFt5eWxdID09ICdcbicgKVwKKyAgICAgICAgICAgICAgICAgICAgICAgIC0teXlsaW5l
bm87XAorICAgICAgICAgICAgfXdoaWxlKDApCisgICAgCisvKiBSZXR1cm4gYWxsIGJ1dCB0aGUg
Zmlyc3QgIm4iIG1hdGNoZWQgY2hhcmFjdGVycyBiYWNrIHRvIHRoZSBpbnB1dCBzdHJlYW0uICov
CisjZGVmaW5lIHl5bGVzcyhuKSBcCisJZG8gXAorCQl7IFwKKwkJLyogVW5kbyBlZmZlY3RzIG9m
IHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCisgICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0g
KG4pOyBcCisgICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVzc19tYWNyb19hcmcpO1wKKwkJKnl5
X2NwID0geXlnLT55eV9ob2xkX2NoYXI7IFwKKwkJWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVCBc
CisJCXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwID0geXlfYnAgKyB5eWxlc3NfbWFjcm9fYXJnIC0g
WVlfTU9SRV9BREo7IFwKKwkJWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBh
Z2FpbiAqLyBcCisJCX0gXAorCXdoaWxlICggMCApCisKKyNkZWZpbmUgdW5wdXQoYykgeXl1bnB1
dCggYywgeXlnLT55eXRleHRfcHRyICwgeXlzY2FubmVyICkKKworI2lmbmRlZiBZWV9TVFJVQ1Rf
WVlfQlVGRkVSX1NUQVRFCisjZGVmaW5lIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKK3N0cnVj
dCB5eV9idWZmZXJfc3RhdGUKKwl7CisJRklMRSAqeXlfaW5wdXRfZmlsZTsKKworCWNoYXIgKnl5
X2NoX2J1ZjsJCS8qIGlucHV0IGJ1ZmZlciAqLworCWNoYXIgKnl5X2J1Zl9wb3M7CQkvKiBjdXJy
ZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1ZmZlciAqLworCisJLyogU2l6ZSBvZiBpbnB1dCBidWZm
ZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBmb3IgRU9CCisJICogY2hhcmFjdGVycy4K
KwkgKi8KKwl5eV9zaXplX3QgeXlfYnVmX3NpemU7CisKKwkvKiBOdW1iZXIgb2YgY2hhcmFjdGVy
cyByZWFkIGludG8geXlfY2hfYnVmLCBub3QgaW5jbHVkaW5nIEVPQgorCSAqIGNoYXJhY3RlcnMu
CisJICovCisJeXlfc2l6ZV90IHl5X25fY2hhcnM7CisKKwkvKiBXaGV0aGVyIHdlICJvd24iIHRo
ZSBidWZmZXIgLSBpLmUuLCB3ZSBrbm93IHdlIGNyZWF0ZWQgaXQsCisJICogYW5kIGNhbiByZWFs
bG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNob3VsZCBmcmVlKCkgaXQgdG8KKwkgKiBkZWxldGUg
aXQuCisJICovCisJaW50IHl5X2lzX291cl9idWZmZXI7CisKKwkvKiBXaGV0aGVyIHRoaXMgaXMg
YW4gImludGVyYWN0aXZlIiBpbnB1dCBzb3VyY2U7IGlmIHNvLCBhbmQKKwkgKiBpZiB3ZSdyZSB1
c2luZyBzdGRpbyBmb3IgaW5wdXQsIHRoZW4gd2Ugd2FudCB0byB1c2UgZ2V0YygpCisJICogaW5z
dGVhZCBvZiBmcmVhZCgpLCB0byBtYWtlIHN1cmUgd2Ugc3RvcCBmZXRjaGluZyBpbnB1dCBhZnRl
cgorCSAqIGVhY2ggbmV3bGluZS4KKwkgKi8KKwlpbnQgeXlfaXNfaW50ZXJhY3RpdmU7CisKKwkv
KiBXaGV0aGVyIHdlJ3JlIGNvbnNpZGVyZWQgdG8gYmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxp
bmUuCisJICogSWYgc28sICdeJyBydWxlcyB3aWxsIGJlIGFjdGl2ZSBvbiB0aGUgbmV4dCBtYXRj
aCwgb3RoZXJ3aXNlCisJICogbm90LgorCSAqLworCWludCB5eV9hdF9ib2w7CisKKyAgICBpbnQg
eXlfYnNfbGluZW5vOyAvKio8IFRoZSBsaW5lIGNvdW50LiAqLworICAgIGludCB5eV9ic19jb2x1
bW47IC8qKjwgVGhlIGNvbHVtbiBjb3VudC4gKi8KKyAgICAKKwkvKiBXaGV0aGVyIHRvIHRyeSB0
byBmaWxsIHRoZSBpbnB1dCBidWZmZXIgd2hlbiB3ZSByZWFjaCB0aGUKKwkgKiBlbmQgb2YgaXQu
CisJICovCisJaW50IHl5X2ZpbGxfYnVmZmVyOworCisJaW50IHl5X2J1ZmZlcl9zdGF0dXM7CisK
KyNkZWZpbmUgWVlfQlVGRkVSX05FVyAwCisjZGVmaW5lIFlZX0JVRkZFUl9OT1JNQUwgMQorCS8q
IFdoZW4gYW4gRU9GJ3MgYmVlbiBzZWVuIGJ1dCB0aGVyZSdzIHN0aWxsIHNvbWUgdGV4dCB0byBw
cm9jZXNzCisJICogdGhlbiB3ZSBtYXJrIHRoZSBidWZmZXIgYXMgWVlfRU9GX1BFTkRJTkcsIHRv
IGluZGljYXRlIHRoYXQgd2UKKwkgKiBzaG91bGRuJ3QgdHJ5IHJlYWRpbmcgZnJvbSB0aGUgaW5w
dXQgc291cmNlIGFueSBtb3JlLiAgV2UgbWlnaHQKKwkgKiBzdGlsbCBoYXZlIGEgYnVuY2ggb2Yg
dG9rZW5zIHRvIG1hdGNoLCB0aG91Z2gsIGJlY2F1c2Ugb2YKKwkgKiBwb3NzaWJsZSBiYWNraW5n
LXVwLgorCSAqCisJICogV2hlbiB3ZSBhY3R1YWxseSBzZWUgdGhlIEVPRiwgd2UgY2hhbmdlIHRo
ZSBzdGF0dXMgdG8gIm5ldyIKKwkgKiAodmlhIHl5cmVzdGFydCgpKSwgc28gdGhhdCB0aGUgdXNl
ciBjYW4gY29udGludWUgc2Nhbm5pbmcgYnkKKwkgKiBqdXN0IHBvaW50aW5nIHl5aW4gYXQgYSBu
ZXcgaW5wdXQgZmlsZS4KKwkgKi8KKyNkZWZpbmUgWVlfQlVGRkVSX0VPRl9QRU5ESU5HIDIKKwor
CX07CisjZW5kaWYgLyogIVlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUgKi8KKworLyogV2UgcHJv
dmlkZSBtYWNyb3MgZm9yIGFjY2Vzc2luZyBidWZmZXIgc3RhdGVzIGluIGNhc2UgaW4gdGhlCisg
KiBmdXR1cmUgd2Ugd2FudCB0byBwdXQgdGhlIGJ1ZmZlciBzdGF0ZXMgaW4gYSBtb3JlIGdlbmVy
YWwKKyAqICJzY2FubmVyIHN0YXRlIi4KKyAqCisgKiBSZXR1cm5zIHRoZSB0b3Agb2YgdGhlIHN0
YWNrLCBvciBOVUxMLgorICovCisjZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSICggeXlnLT55eV9i
dWZmZXJfc3RhY2sgXAorICAgICAgICAgICAgICAgICAgICAgICAgICA/IHl5Zy0+eXlfYnVmZmVy
X3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcF0gXAorICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IE5VTEwpCisKKy8qIFNhbWUgYXMgcHJldmlvdXMgbWFjcm8sIGJ1dCB1c2VmdWwgd2hl
biB3ZSBrbm93IHRoYXQgdGhlIGJ1ZmZlciBzdGFjayBpcyBub3QKKyAqIE5VTEwgb3Igd2hlbiB3
ZSBuZWVkIGFuIGx2YWx1ZS4gRm9yIGludGVybmFsIHVzZSBvbmx5LgorICovCisjZGVmaW5lIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRSB5eWctPnl5X2J1ZmZlcl9zdGFja1t5eWctPnl5X2J1ZmZl
cl9zdGFja190b3BdCisKK3ZvaWQgeXlyZXN0YXJ0IChGSUxFICppbnB1dF9maWxlICx5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKK3ZvaWQgeXlfc3dpdGNoX3RvX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRF
IG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworWVlfQlVGRkVSX1NUQVRFIHl5X2Ny
ZWF0ZV9idWZmZXIgKEZJTEUgKmZpbGUsaW50IHNpemUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwor
dm9pZCB5eV9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYiAseXlzY2FuX3QgeXlzY2Fu
bmVyICk7Cit2b2lkIHl5X2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgLHl5c2Nhbl90
IHl5c2Nhbm5lciApOwordm9pZCB5eXB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUg
bmV3X2J1ZmZlciAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHl5cG9wX2J1ZmZlcl9zdGF0
ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3N0YXRpYyB2b2lkIHl5ZW5zdXJlX2J1ZmZlcl9z
dGFjayAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgdm9pZCB5eV9sb2FkX2J1ZmZlcl9z
dGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgdm9pZCB5eV9pbml0X2J1ZmZlciAo
WVlfQlVGRkVSX1NUQVRFIGIsRklMRSAqZmlsZSAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKKyNk
ZWZpbmUgWVlfRkxVU0hfQlVGRkVSIHl5X2ZsdXNoX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAs
eXlzY2FubmVyKQorCitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9idWZmZXIgKGNoYXIgKmJhc2Us
eXlfc2l6ZV90IHNpemUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworWVlfQlVGRkVSX1NUQVRFIHl5
X3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKnl5X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7
CitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAoeXljb25zdCBjaGFyICpieXRlcyx5eV9z
aXplX3QgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCAqeXlhbGxvYyAoeXlfc2l6
ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgKnl5cmVhbGxvYyAodm9pZCAqLHl5X3Np
emVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHl5ZnJlZSAodm9pZCAqICx5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKKworI2RlZmluZSB5eV9uZXdfYnVmZmVyIHl5X2NyZWF0ZV9idWZmZXIK
KworI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNfaW50ZXJhY3RpdmUpIFwKKwl7IFwKKwlp
ZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAorICAgICAgICB5eWVuc3VyZV9idWZmZXJfc3Rh
Y2sgKHl5c2Nhbm5lcik7IFwKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAorICAg
ICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOyBc
CisJfSBcCisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRlcmFjdGl2ZSA9IGlz
X2ludGVyYWN0aXZlOyBcCisJfQorCisjZGVmaW5lIHl5X3NldF9ib2woYXRfYm9sKSBcCisJeyBc
CisJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7XAorICAgICAgICB5eWVuc3VyZV9idWZmZXJf
c3RhY2sgKHl5c2Nhbm5lcik7IFwKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAor
ICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIp
OyBcCisJfSBcCisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wgPSBhdF9ib2w7
IFwKKwl9CisKKyNkZWZpbmUgWVlfQVRfQk9MKCkgKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfYXRfYm9sKQorCisvKiBCZWdpbiB1c2VyIHNlY3QzICovCisKKyNkZWZpbmUgeXl3cmFwKHl5
c2Nhbm5lcikgMQorI2RlZmluZSBZWV9TS0lQX1lZV1JBUAorCit0eXBlZGVmIHVuc2lnbmVkIGNo
YXIgWVlfQ0hBUjsKKwordHlwZWRlZiBpbnQgeXlfc3RhdGVfdHlwZTsKKworI2RlZmluZSB5eXRl
eHRfcHRyIHl5dGV4dF9yCisKK3N0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19z
dGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV90cnlf
TlVMX3RyYW5zICh5eV9zdGF0ZV90eXBlIGN1cnJlbnRfc3RhdGUgICx5eXNjYW5fdCB5eXNjYW5u
ZXIpOworc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lciAp
Oworc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciBtc2dbXSAseXlzY2Fu
X3QgeXlzY2FubmVyICk7CisKKy8qIERvbmUgYWZ0ZXIgdGhlIGN1cnJlbnQgcGF0dGVybiBoYXMg
YmVlbiBtYXRjaGVkIGFuZCBiZWZvcmUgdGhlCisgKiBjb3JyZXNwb25kaW5nIGFjdGlvbiAtIHNl
dHMgdXAgeXl0ZXh0LgorICovCisjZGVmaW5lIFlZX0RPX0JFRk9SRV9BQ1RJT04gXAorCXl5Zy0+
eXl0ZXh0X3B0ciA9IHl5X2JwOyBcCisJeXlsZW5nID0gKHNpemVfdCkgKHl5X2NwIC0geXlfYnAp
OyBcCisJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlfY3A7IFwKKwkqeXlfY3AgPSAnXDAnOyBcCisJ
eXlnLT55eV9jX2J1Zl9wID0geXlfY3A7CisKKyNkZWZpbmUgWVlfTlVNX1JVTEVTIDE0NworI2Rl
ZmluZSBZWV9FTkRfT0ZfQlVGRkVSIDE0OAorLyogVGhpcyBzdHJ1Y3QgaXMgbm90IHVzZWQgaW4g
dGhpcyBzY2FubmVyLAorICAgYnV0IGl0cyBwcmVzZW5jZSBpcyBuZWNlc3NhcnkuICovCitzdHJ1
Y3QgeXlfdHJhbnNfaW5mbworCXsKKwlmbGV4X2ludDMyX3QgeXlfdmVyaWZ5OworCWZsZXhfaW50
MzJfdCB5eV9ueHQ7CisJfTsKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9hY2NlcHRb
NDQzXSA9CisgICAgeyAgIDAsCisgICAgICAgIDAsICAgIDAsICAxNDgsICAxNDYsICAxNDUsICAx
NDUsICAxMzIsICAxMzgsICAxNDMsICAxMjcsCisgICAgICAxMjgsICAxMzYsICAxMzUsICAxMjQs
ICAxMzMsICAxMzEsICAxMzcsICAgOTYsICAgOTYsICAxMjUsCisgICAgICAxMjEsICAxMzksICAx
MjYsICAxNDAsICAxNDQsICAgOTMsICAxMjksICAxMzAsICAxNDIsICAgOTMsCisgICAgICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCisg
ICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAxMjIsCisgICAgICAxNDEsICAxMjMsICAxMzQsICAxMTgsICAxMDQsICAxMjMsICAxMTIsICAx
MDcsICAxMDIsICAxMTAsCisgICAgICAxMDAsICAxMTEsICAxMDEsICAgOTksICAxMDMsICAgOTgs
ICAgOTUsICAgOTYsICAgIDAsICAgIDAsCisgICAgICAxMzAsICAxMjIsICAxMjksICAxMTksICAx
MTUsICAxMTcsICAxMTYsICAxMjAsICAgOTMsICAxMDgsCisgICAgICAxMTQsICAgOTMsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgOTMsICAg
MTIsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCisKKyAg
ICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICAxNSwgICAxNywgICA5MywgICA5Mywg
ICA5MywKKyAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5
MywgICA5MywgICA5MywKKyAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5Mywg
ICA5MywgICA5MywgICA5MywgICA5MywKKyAgICAgICA5MywgICA5MywgICA5MywgICA5MywgIDEw
OSwgIDExMywgICAgMCwgICA5OCwgICAgMCwgICAgMCwKKyAgICAgICA5NywgICA5NCwgIDEwNSwg
IDEwNiwgICA0NSwgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKKyAgICAgICA5MywgICA5
MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKKyAgICAg
ICA5MywgICA5MywgICA5MywgICAxMywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5
MywKKyAgICAgICA5MywgICA5MywgICAyMSwgICA5MywgICA5MywgICA5MywgICA5MywgICA5Mywg
ICA5MywgICA5MywKKyAgICAgICA5MywgICAxOCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5
MywgICA5MywgICA5MywgICA5MywKKyAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5Mywg
ICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKKworICAgICAgIDkzLCAgIDkzLCAgIDkzLCAg
IDkzLCAgIDkzLCAgICAwLCAgIDk5LCAgICAwLCAgIDk4LCAgIDkzLAorICAgICAgIDIzLCAgIDkz
LCAgIDkzLCAgIDkwLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAorICAgICAg
IDkzLCAgIDE2LCAgIDQ4LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDY0LCAgIDkzLCAgIDkzLCAgIDUz
LAorICAgICAgIDY4LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAg
IDkzLCAgIDY1LAorICAgICAgICA0LCAgIDI4LCAgIDI5LCAgIDMwLCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLAorICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAg
IDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAorICAgICAgIDUxLCAgIDI0LCAgIDkzLCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDMxLCAgIDMyLAorICAgICAgIDMzLCAgIDIyLCAg
IDkzLCAgIDkzLCAgIDkzLCAgIDEwLCAgIDM3LCAgIDM4LCAgIDM5LCAgIDQ2LAorICAgICAgICA3
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDc3LCAgIDc4LCAgIDc5LCAgIDkzLCAgIDI1LAor
ICAgICAgIDY5LCAgIDIwLCAgIDgwLCAgIDgxLCAgIDgyLCAgICAyLCAgIDc0LCAgIDc1LCAgIDc2
LCAgIDkzLAorCisgICAgICAgMTksICAgNzIsICAgOTMsICAgOTMsICAgMzQsICAgMzUsICAgMzYs
ICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsICAgNjYsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsICAgNDcsICAgOTMsICAgOTIsICAgOTMsICAgOTMsCisgICAgICAgMTQsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgNjcsICAgNjEsICAgNTYsICAgOTMsICAgOTMsCisgICAgICAgOTMs
ICAgOTMsICAgOTMsICAgNzMsICAgNTIsICAgOTMsICAgNTksICAgMjcsICAgOTMsICAgODksCisg
ICAgICAgNjAsICAgNDQsICAgNzEsICAgNTQsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsCisgICAgICAgOTMsICAgOTMsICAgNTUsICAgMjYsICAgOTMsICAgOTMsICAgOTMsICAg
IDMsICAgOTMsICAgOTMsCisgICAgICAgOTMsICAgOTMsICAgOTMsICAgNDksICAgIDgsICAgOTMs
ICAgIDksICAgOTMsICAgOTMsICAgMTEsCisgICAgICAgNjIsICAgOTMsICAgOTMsICAgOTMsICAg
NTcsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgOTMsICAgNTAsICAgNzAs
ICAgNTgsICAgIDYsICAgNjMsICAgIDEsICAgOTEsICAgIDUsICAgODMsCisKKyAgICAgICA0MCwg
ICA4NCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKKyAg
ICAgICA5MywgICA5MywgICA5MywgICA5MywgICA0MSwgICA5MywgICA5MywgICA5MywgICA5Mywg
ICA5MywKKyAgICAgICA5MywgICA5MywgICA0MywgICA5MywgICA4NywgICA5MywgICA5MywgICA5
MywgICA5MywgICA5MywKKyAgICAgICA4NSwgICA5MywgICA4NiwgICA5MywgICA5MywgICA5Mywg
ICA5MywgICA5MywgICA5MywgICA0MiwKKyAgICAgICA4OCwgICAgMAorICAgIH0gOworCitzdGF0
aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CisgICAgeyAgIDAsCisgICAgICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDIsICAgIDMs
CisgICAgICAgIDIsICAgIDIsICAgIDIsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDIsICAgIDQsICAgIDEsICAgIDEsICAg
IDEsICAgIDUsICAgIDYsICAgIDEsICAgIDcsCisgICAgICAgIDgsICAgIDksICAgMTAsICAgMTEs
ICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTcsCisgICAgICAgMTgsICAgMTksICAg
MjAsICAgMjAsICAgMjAsICAgMjEsICAgMjEsICAgMjIsICAgMjMsICAgMjQsCisgICAgICAgMjUs
ICAgMjYsICAgMjcsICAgIDEsICAgMjgsICAgMjgsICAgMjksICAgMzAsICAgMzEsICAgMjgsCisg
ICAgICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzMs
ICAgMzIsCisgICAgICAgMzIsICAgMzQsICAgMzUsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAg
MzYsICAgMzIsICAgMzIsCisgICAgICAgMzcsICAgIDEsICAgMzgsICAgMzksICAgMzIsICAgIDEs
ICAgNDAsICAgNDEsICAgNDIsICAgNDMsCisKKyAgICAgICA0NCwgICA0NSwgICA0NiwgICA0Nywg
ICA0OCwgICAzMiwgICA0OSwgICA1MCwgICA1MSwgICA1MiwKKyAgICAgICA1MywgICA1NCwgICAz
MiwgICA1NSwgICA1NiwgICA1NywgICA1OCwgICA1OSwgICA2MCwgICA2MSwKKyAgICAgICA2Miwg
ICA2MywgICA2NCwgICA2NSwgICA2NiwgICA2NywgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwKKworICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZs
ZXhfaW50MzJfdCB5eV9tZXRhWzY4XSA9CisgICAgeyAgIDAsCisgICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsCisg
ICAgICAgIDIsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDIsICAgIDIs
ICAgIDIsCisgICAgICAgIDIsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDEsICAg
IDEsICAgIDEsICAgIDIsCisgICAgICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDMs
ICAgIDMsICAgIDMsICAgIDMsICAgIDMsCisgICAgICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAg
IDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsCisgICAgICAgIDMsICAgIDMsICAgIDMs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQxNl90IHl5X2Jhc2VbNDQ1XSA9CisgICAgeyAgIDAsCisgICAgICAgIDAsICAgIDAsICA1ODcs
ICA1ODgsICA1ODgsICA1ODgsICA1NjEsICAgNDMsICAgNjQsICA1ODgsCisgICAgICA1ODgsICA1
NjAsICAgNjEsICA1ODgsICAgNjAsICAgNTgsICA1NTksICAgNzcsICAgODYsICA1NTcsCisgICAg
ICA1ODgsICAxMDQsICA1NTcsICAgNTUsICA1ODgsICAgIDAsICA1ODgsICA1ODgsICAgNzUsICAg
MjYsCisgICAgICAgNTcsICAgODIsICAgODMsICAgNzMsICAgOTMsICA1MjgsICAgOTcsICAgOTUs
ICA1MjcsICAgNDQsCisgICAgICAgNzEsICA1MjEsICAxMDQsICA1MzQsICAxMTAsICAxMTYsICAg
MzUsICAxMTEsICA1MzAsICA1ODgsCisgICAgICAxMTQsICA1ODgsICA1ODgsICA1ODgsICA1ODgs
ICA1ODgsICA1ODgsICA1ODgsICA1ODgsICA1ODgsCisgICAgICA1ODgsICA1ODgsICA1ODgsICAx
NjUsICA1ODgsICAxNzIsICAyMDIsICAyMTEsICAyMzMsICAgIDAsCisgICAgICA1ODgsICA1ODgs
ICA1ODgsICA1NTEsICA1ODgsICA1ODgsICA1ODgsICA1NTAsICAgIDAsICA1ODgsCisgICAgICA1
ODgsICA1MjMsICA1MTYsICA1MTksICA1MjcsICA1MjYsICA1MTMsICA1MjgsICA1MTUsICA1MjEs
CisgICAgICA1MDksICA1MDYsICA1MTksICA1MDYsICA1MDMsICA1MDMsICA1MDksICA0OTcsICAx
MDgsICA1MDIsCisKKyAgICAgIDUxMiwgIDQ5OCwgIDUwNCwgIDUwNywgIDUwOCwgICAgMCwgIDE0
NSwgIDUwNywgIDExMywgIDQ5MywKKyAgICAgIDUwNiwgIDQ5NywgIDQ5OSwgIDQ4OSwgIDUwMywg
IDUwMCwgIDUwMiwgIDQ4NSwgIDQ5MCwgIDQ4NywKKyAgICAgIDQ3NiwgIDE1NywgIDQ4NCwgIDQ4
OSwgIDQ4NSwgIDQ4NywgIDQ3NiwgIDQ3OSwgIDExOCwgIDQ4NCwKKyAgICAgIDQ3NiwgIDQ4OCwg
ICA3MCwgIDQ4MSwgIDU4OCwgIDU4OCwgIDI0NiwgIDI1MywgIDI3MCwgIDIxOSwKKyAgICAgIDI4
MywgICAgMCwgIDU4OCwgIDU4OCwgICAgMCwgIDQ3MywgIDQ3NywgIDQ4NiwgIDQ4MywgIDQ2NywK
KyAgICAgIDQ2NywgIDExOSwgIDQ4MiwgIDQ3OSwgIDQ3OSwgIDQ3NywgIDQ3NCwgIDQ2NiwgIDQ3
MiwgIDQ1OSwKKyAgICAgIDQ3MCwgIDQ1NiwgIDQ3MiwgICAgMCwgIDQ2OSwgIDQ1NywgIDQ2NCwg
IDQ2MSwgIDQ2NSwgIDQ1OCwKKyAgICAgIDQ0NywgIDQ0NiwgIDQ1OSwgIDQ2MiwgIDQ1OSwgIDQ1
NCwgIDQ0NSwgIDE4OCwgIDQ1MCwgIDQ1MywKKyAgICAgIDQ0NCwgIDQ0MSwgIDQ0NSwgIDQ1MSwg
IDQ0MiwgIDQzMywgIDQzNiwgIDQzNCwgIDQ0NCwgIDQzMCwKKyAgICAgIDQyOCwgIDQ0MSwgIDQy
NywgIDQyOSwgIDQyNiwgIDQzNywgIDQzNiwgIDEyNCwgIDQzMSwgIDQyNiwKKworICAgICAgNDE1
LCAgMjU4LCAgNDMzLCAgNDM1LCAgNDI0LCAgMjkwLCAgMjk3LCAgMzA0LCAgMzExLCAgNDI1LAor
ICAgICAgICAwLCAgNDIzLCAgMjc1LCAgICAwLCAgNDE1LCAgNDEzLCAgNDIxLCAgNDEwLCAgNDI3
LCAgNDE2LAorICAgICAgMzE2LCAgICAwLCAgICAwLCAgNDEwLCAgNDIwLCAgNDIwLCAgICAwLCAg
NDA1LCAgMzE5LCAgICAwLAorICAgICAgICAwLCAgNDA3LCAgMzIyLCAgNDA4LCAgNDAyLCAgNDAx
LCAgNDAyLCAgNDAxLCAgMzI1LCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
Mzk3LCAgMzk4LCAgNDAzLCAgMzk0LCAgNDA3LCAgNDAyLAorICAgICAgNDAxLCAgMzkzLCAgMzk3
LCAgMzg5LCAgMzkyLCAgMzk2LCAgNDAxLCAgMzg3LCAgMzk5LCAgMzkwLAorICAgICAgICAwLCAg
ICAwLCAgMzk2LCAgMzg1LCAgMzg1LCAgMzkwLCAgMzg5LCAgMzg2LCAgICAwLCAgICAwLAorICAg
ICAgICAwLCAgICAwLCAgMzc2LCAgMzg4LCAgMzkwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLAorICAgICAgICAwLCAgMzc4LCAgMzc5LCAgMzczLCAgMzgzLCAgICAwLCAgICAwLCAgICAw
LCAgMzc0LCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgICAwLCAgICAwLCAgMzgxLAorCisgICAgICAgIDAsICAgIDAsICAzNzksICAzNzUsICAg
IDAsICAgIDAsICAgIDAsICAzNzEsICAzNjcsICAzNzIsCisgICAgICAzNjIsICAzNzUsICAzNjEs
ICAzNzQsICAzNjMsICAzNzAsICAgIDAsICAzNjgsICAzNzAsICAzNTQsCisgICAgICAzNTYsICAz
NjIsICAzNjgsICAzNjMsICAzNTEsICAgIDAsICAzNTMsICAgIDAsICAzNTIsICAzNTUsCisgICAg
ICAgIDAsICAzNDQsICAzNDMsICAzNDMsICAzNTYsICAgIDAsICAzNTgsICAgIDAsICAzNTcsICAz
NTYsCisgICAgICAzNDEsICAzNTQsICAzNDEsICAgIDAsICAgIDAsICAzNDQsICAgIDAsICAgIDAs
ICAzMzYsICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAzMzMsICAzNDQsICAz
MzcsICAzNDMsICAzNDAsICAzMzUsCisgICAgICAzMjcsICAzMzksICAgIDAsICAgIDAsICAzMzIs
ICAzMzksICAzMjgsICAgIDAsICAzMzcsICAzMzQsCisgICAgICAzMjQsICAzMjksICAzMzIsICAg
IDAsICAgIDAsICAzMzIsICAgIDAsICAzMzAsICAzMjksICAgIDAsCisgICAgICAgIDAsICAzMjgs
ICAzMTQsICAzMjYsICAgIDAsICAzMTcsICAzMzgsICAzMzcsICAzMzYsICAzMDcsCisgICAgICAz
MDMsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAzMjgs
CisKKyAgICAgIDE2NiwgIDMyNSwgIDMxNiwgIDI5OSwgIDMwOCwgIDMxMCwgIDMwNiwgIDMwOCwg
IDMwNywgIDMwNiwKKyAgICAgIDMwOSwgIDMwNiwgIDI1NiwgIDI1MywgICAgMCwgIDIyOCwgIDIz
OCwgIDIyMiwgIDIzNSwgIDIwMywKKyAgICAgIDIwNywgIDIwNCwgIDIxMiwgIDE5MSwgICAgMCwg
IDIwMSwgIDE2NSwgIDE2NywgIDE1MywgIDE2MSwKKyAgICAgICAgMCwgIDE3MCwgICAgMCwgIDE3
NSwgIDE1MSwgIDE0MSwgIDEwMCwgIDExNCwgICA1OSwgICAgMCwKKyAgICAgICAgMCwgIDU4OCwg
IDM1OSwgIDExMworICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfZGVm
WzQ0NV0gPQorICAgIHsgICAwLAorICAgICAgNDQyLCAgICAxLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAorICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAorICAgICAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQzLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQzLAorICAgICAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAor
ICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQyLAorICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLAorICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQ0LAorICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQzLCAgNDQyLAorICAgICAgNDQyLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorCisg
ICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCisgICAgICA0NDIsICA0NDQsICA0NDIs
ICA0NDIsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisgICAgICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisgICAg
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisKKyAgICAgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MywKKyAgICAgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKKyAgICAg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywKKyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywKKyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywKKyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKKyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKKyAgICAgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKKyAgICAgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywK
KyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywKKworICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAor
ICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLAorICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorCisgICAgICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisg
ICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisgICAgICA0NDMsICAgIDAsICA0NDIsICA0NDIKKyAg
ICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFs2NTZdID0KKyAgICB7
ICAgMCwKKyAgICAgICAgNCwgICAgNSwgICAgNiwgICAgNywgICAgOCwgICAgOSwgICAxMCwgICAx
MSwgICAxMiwgICAxMywKKyAgICAgICAxNCwgICAxNSwgICAxNiwgICAxNywgICAxOCwgICAxOSwg
ICAxOSwgICAxOSwgICAxOSwgICAxOSwKKyAgICAgICAxOSwgICAyMCwgICAyMSwgICAyMiwgICAy
MywgICAyNCwgICAyNSwgICAyNiwgICAyNiwgICAyNiwKKyAgICAgICAyNiwgICAyNiwgICAyNiwg
ICAyNiwgICAyNiwgICAyNiwgICAyNywgICAyOCwgICAyOSwgICAzMCwKKyAgICAgICAzMSwgICAz
MiwgICAzMywgICAzNCwgICAzNSwgICAzNiwgICAzNywgICAzOCwgICAyNiwgICAzOSwKKyAgICAg
ICA0MCwgICA0MSwgICA0MiwgICA0MywgICA0NCwgICA0NSwgICA0NiwgICA0NywgICA0OCwgICA0
OSwKKyAgICAgICAyNiwgICAyNiwgICAyNiwgICA1MCwgICA1MSwgICA1MiwgICA1MywgICA1NSwg
ICA1NiwgICA1NywKKyAgICAgICA2MCwgICA2MiwgICA2NCwgICA2NCwgICA2NCwgICA2NCwgICA2
NCwgICA2NCwgICA2NCwgICA3NywKKyAgICAgICA3OCwgICA4MiwgICA4MywgIDExMCwgICA2Mywg
ICA2MSwgIDEyOSwgIDExMSwgICA1OCwgICA2NiwKKyAgICAgIDEzMCwgICA2NywgICA2NywgICA2
NywgICA2NywgICA2NywgICA2NywgICA2OCwgICA2NiwgICA4MCwKKworICAgICAgIDY4LCAgIDY4
LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY5LCAgIDcyLCAgIDg0LAorICAgICAg
MTEyLCAgIDg1LCAgIDcwLCAgIDgxLCAgMTQyLCAgIDg2LCAgIDY5LCAgMjAzLCAgNDQxLCAgMjA0
LAorICAgICAgIDY5LCAgIDg3LCAgIDk0LCAgMTEzLCAgIDk1LCAgIDczLCAgIDkwLCAgIDc0LCAg
IDc1LCAgIDY5LAorICAgICAgIDkxLCAgIDg4LCAgIDk3LCAgIDk2LCAgIDg5LCAgIDkyLCAgMTAz
LCAgIDcwLCAgMTM1LCAgMTA2LAorICAgICAgIDk4LCAgIDkzLCAgIDk5LCAgMTE1LCAgMTA0LCAg
MTAwLCAgMTA3LCAgMTYyLCAgNDQwLCAgMTE5LAorICAgICAgMTMxLCAgMTAxLCAgNDM5LCAgMTA4
LCAgMTMyLCAgMTA1LCAgMTIwLCAgMTIxLCAgMTE2LCAgMTI1LAorICAgICAgMTYzLCAgMTE3LCAg
MTI2LCAgMTMzLCAgMTc2LCAgMTk4LCAgMTIyLCAgMTIzLCAgMjY0LCAgMTI0LAorICAgICAgMTI3
LCAgNDM4LCAgMTc3LCAgMTk5LCAgMjE2LCAgMjE3LCAgMjY1LCAgMTI4LCAgMTM2LCAgIDY0LAor
ICAgICAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgMTM4LCAgMTM4LCAgMTM4
LCAgMTM4LAorICAgICAgMTM4LCAgMTM4LCAgMTM4LCAgNDM3LCAgMTcwLCAgMTM3LCAgMTkwLCAg
MTcxLCAgMTcyLCAgNDA2LAorCisgICAgICA0MDcsICAxNzMsICAxMzksICAxNzQsICAyNDIsICAy
NDMsICAyNDQsICA0MzYsICAxMzcsICA0MzUsCisgICAgICA0MzQsICAxOTEsICA0MzMsICA0MzIs
ICAgNjYsICAxMzksICAgNjcsICAgNjcsICAgNjcsICAgNjcsCisgICAgICAgNjcsICAgNjcsICAg
NjgsICAgNjYsICA0MzEsICAgNjgsICAgNjgsICAgNjgsICAgNjgsICAgNjgsCisgICAgICAgNjgs
ICAgNjgsICAgNjksICAxNDEsICAxNDEsICAxNDEsICAxNDEsICAxNDEsICAxNDEsICAxNDEsCisg
ICAgICA0MzAsICAgNjksICAxNDAsICA0MjksICAxNDAsICAgNjksICA0MjgsICAxNDEsICAxNDEs
ICAxNDEsCisgICAgICAxNDEsICAxNDEsICAxNDEsICAxNDEsICAgNjksICAyMDYsICA0MjcsICAy
MDYsICA0MjYsICA0MjUsCisgICAgICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDcs
ICAyMDcsICAxMzgsICAxMzgsICAxMzgsCisgICAgICAxMzgsICAxMzgsICAxMzgsICAxMzgsICAy
NjksICAyNzAsICAyNzEsICA0MjQsICA0MjMsICAyMDgsCisgICAgICA0MjIsICAyMDgsICA0MjEs
ICAxMzksICAyMDksICAyMDksICAyMDksICAyMDksICAyMDksICAyMDksCisgICAgICAyMDksICAy
NzcsICAyNzgsICAyNzksICA0MjAsICA0MTksICAxMzksICAxNDEsICAxNDEsICAxNDEsCisKKyAg
ICAgIDE0MSwgIDE0MSwgIDE0MSwgIDE0MSwgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywg
IDIwNywKKyAgICAgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIw
NywgIDIwOSwgIDIwOSwKKyAgICAgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwg
IDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwKKyAgICAgIDIwOSwgIDIwOSwgIDI4NiwgIDI4NywgIDI4
OCwgIDI5MywgIDI5NCwgIDI5NSwgIDI5NywgIDI5OCwKKyAgICAgIDI5OSwgIDMwNSwgIDMwNiwg
IDMwNywgIDM4NywgIDM4OCwgIDM4OSwgIDQxOCwgIDQxNywgIDQxNiwKKyAgICAgIDQxNSwgIDQx
NCwgIDQxMywgIDQxMiwgIDQxMSwgIDQxMCwgIDQwOSwgIDM5MCwgIDQwOCwgIDM5MSwKKyAgICAg
ICA3OSwgICA3OSwgIDQwNSwgIDQwNCwgIDQwMywgIDQwMiwgIDQwMSwgIDQwMCwgIDM5OSwgIDM5
OCwKKyAgICAgIDM5NywgIDM5NiwgIDM5NSwgIDM5NCwgIDM5MywgIDM5MiwgIDM4NiwgIDM4NSwg
IDM4NCwgIDM4MywKKyAgICAgIDM4MiwgIDM4MSwgIDM4MCwgIDM3OSwgIDM3OCwgIDM3NywgIDM3
NiwgIDM3NSwgIDM3NCwgIDM3MywKKyAgICAgIDM3MiwgIDM3MSwgIDM3MCwgIDM2OSwgIDM2OCwg
IDM2NywgIDM2NiwgIDM2NSwgIDM2NCwgIDM2MywKKworICAgICAgMzYyLCAgMzYxLCAgMzYwLCAg
MzU5LCAgMzU4LCAgMzU3LCAgMzU2LCAgMzU1LCAgMzU0LCAgMzUzLAorICAgICAgMzUyLCAgMzUx
LCAgMzUwLCAgMzQ5LCAgMzQ4LCAgMzQ3LCAgMzQ2LCAgMzQ1LCAgMzQ0LCAgMzQzLAorICAgICAg
MzQyLCAgMzQxLCAgMzQwLCAgMzM5LCAgMzM4LCAgMzM3LCAgMzM2LCAgMzM1LCAgMzM0LCAgMzMz
LAorICAgICAgMzMyLCAgMzMxLCAgMzMwLCAgMzI5LCAgMzI4LCAgMzI3LCAgMzI2LCAgMzI1LCAg
MzI0LCAgMzIzLAorICAgICAgMzIyLCAgMzIxLCAgMzIwLCAgMzE5LCAgMzE4LCAgMzE3LCAgMzE2
LCAgMzE1LCAgMzE0LCAgMzEzLAorICAgICAgMzEyLCAgMzExLCAgMzEwLCAgMzA5LCAgMzA4LCAg
MzA0LCAgMzAzLCAgMzAyLCAgMzAxLCAgMzAwLAorICAgICAgMjk2LCAgMjkyLCAgMjkxLCAgMjkw
LCAgMjg5LCAgMjg1LCAgMjg0LCAgMjgzLCAgMjgyLCAgMjgxLAorICAgICAgMjgwLCAgMjc2LCAg
Mjc1LCAgMjc0LCAgMjczLCAgMjcyLCAgMjY4LCAgMjY3LCAgMjY2LCAgMjYzLAorICAgICAgMjYy
LCAgMjYxLCAgMjYwLCAgMjU5LCAgMjU4LCAgMjU3LCAgMjU2LCAgMjU1LCAgMjU0LCAgMjUzLAor
ICAgICAgMjUyLCAgMjUxLCAgMjUwLCAgMjQ5LCAgMjQ4LCAgMjQ3LCAgMjQ2LCAgMjQ1LCAgMjQx
LCAgMjQwLAorCisgICAgICAyMzksICAyMzgsICAyMzcsICAyMzYsICAyMzUsICAyMzQsICAyMzMs
ICAyMzIsICAyMzEsICAyMzAsCisgICAgICAyMjksICAyMjgsICAyMjcsICAyMjYsICAyMjUsICAy
MjQsICAyMjMsICAyMjIsICAyMjEsICAyMjAsCisgICAgICAyMTksICAyMTgsICAyMTUsICAyMTQs
ICAyMTMsICAyMTIsICAyMTEsICAyMTAsICAyMDUsICAyMDIsCisgICAgICAyMDEsICAyMDAsICAx
OTcsICAxOTYsICAxOTUsICAxOTQsICAxOTMsICAxOTIsICAxODksICAxODgsCisgICAgICAxODcs
ICAxODYsICAxODUsICAxODQsICAxODMsICAxODIsICAxODEsICAxODAsICAxNzksICAxNzgsCisg
ICAgICAxNzUsICAxNjksICAxNjgsICAxNjcsICAxNjYsICAxNjUsICAxNjQsICAxNjEsICAxNjAs
ICAxNTksCisgICAgICAxNTgsICAxNTcsICAxNTYsICAxNTUsICAxNTQsICAxNTMsICAxNTIsICAx
NTEsICAxNTAsICAxNDksCisgICAgICAxNDgsICAxNDcsICAxNDYsICAxNDUsICAxNDQsICAxNDMs
ICAxMzQsICAxMTgsICAxMTQsICAxMDksCisgICAgICAxMDIsICAgNzYsICAgNzEsICAgNjUsICAg
NTksICAgNTQsICA0NDIsICAgIDMsICA0NDIsICA0NDIsCisgICAgICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCisKKyAgICAgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKKyAg
ICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwKKyAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwKKyAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKKyAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKKyAgICAgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MgorICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hr
WzY1Nl0gPQorICAgIHsgICAwLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAor
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICA4LCAgICA4LCAgICA5LAorICAgICAgIDEzLCAgIDE1LCAgIDE2LCAgIDE2LCAg
IDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDI0LAorICAgICAgIDI0LCAgIDMwLCAgIDMw
LCAgIDQwLCAgIDE1LCAgIDEzLCAgIDQ3LCAgIDQwLCAgICA5LCAgIDE4LAorICAgICAgIDQ3LCAg
IDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE5LCAgIDI5LAorCisg
ICAgICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTgsICAgMjIs
ICAgMzEsCisgICAgICAgNDEsICAgMzEsICAgMTgsICAgMjksICA0NDQsICAgMzEsICAgMTksICAx
MzMsICA0MzksICAxMzMsCisgICAgICAgMTgsICAgMzIsICAgMzQsICAgNDEsICAgMzQsICAgMjIs
ICAgMzMsICAgMjIsICAgMjIsICAgMTksCisgICAgICAgMzMsICAgMzIsICAgMzUsICAgMzQsICAg
MzIsICAgMzMsICAgMzcsICAgMTgsICAgNTEsICAgMzgsCisgICAgICAgMzUsICAgMzMsICAgMzUs
ICAgNDMsICAgMzcsICAgMzUsICAgMzgsICAgOTksICA0MzgsICAgNDUsCisgICAgICAgNDgsICAg
MzUsICA0MzcsICAgMzgsICAgNDgsICAgMzcsICAgNDUsICAgNDUsICAgNDMsICAgNDYsCisgICAg
ICAgOTksICAgNDMsICAgNDYsICAgNDgsICAxMDksICAxMjksICAgNDUsICAgNDUsICAxOTgsICAg
NDUsCisgICAgICAgNDYsICA0MzYsICAxMDksICAxMjksICAxNTIsICAxNTIsICAxOTgsICAgNDYs
ICAgNTEsICAgNjQsCisgICAgICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAg
NjYsICAgNjYsICAgNjYsICAgNjYsCisgICAgICAgNjYsICAgNjYsICAgNjYsICA0MzUsICAxMDcs
ICAgNjQsICAxMjIsICAxMDcsICAxMDcsICA0MDEsCisKKyAgICAgIDQwMSwgIDEwNywgICA2Niwg
IDEwNywgIDE3OCwgIDE3OCwgIDE3OCwgIDQzNCwgICA2NCwgIDQzMiwKKyAgICAgIDQzMCwgIDEy
MiwgIDQyOSwgIDQyOCwgICA2NywgICA2NiwgICA2NywgICA2NywgICA2NywgICA2NywKKyAgICAg
ICA2NywgICA2NywgICA2NywgICA2OCwgIDQyNywgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2
OCwKKyAgICAgICA2OCwgICA2OCwgICA2NywgIDE0MCwgIDE0MCwgIDE0MCwgIDE0MCwgIDE0MCwg
IDE0MCwgIDE0MCwKKyAgICAgIDQyNiwgICA2OCwgICA2OSwgIDQyNCwgICA2OSwgICA2NywgIDQy
MywgICA2OSwgICA2OSwgICA2OSwKKyAgICAgICA2OSwgICA2OSwgICA2OSwgICA2OSwgICA2OCwg
IDEzNywgIDQyMiwgIDEzNywgIDQyMSwgIDQyMCwKKyAgICAgIDEzNywgIDEzNywgIDEzNywgIDEz
NywgIDEzNywgIDEzNywgIDEzNywgIDEzOCwgIDEzOCwgIDEzOCwKKyAgICAgIDEzOCwgIDEzOCwg
IDEzOCwgIDEzOCwgIDIwMiwgIDIwMiwgIDIwMiwgIDQxOSwgIDQxOCwgIDEzOSwKKyAgICAgIDQx
NywgIDEzOSwgIDQxNiwgIDEzOCwgIDEzOSwgIDEzOSwgIDEzOSwgIDEzOSwgIDEzOSwgIDEzOSwK
KyAgICAgIDEzOSwgIDIxMywgIDIxMywgIDIxMywgIDQxNCwgIDQxMywgIDEzOCwgIDE0MSwgIDE0
MSwgIDE0MSwKKworICAgICAgMTQxLCAgMTQxLCAgMTQxLCAgMTQxLCAgMjA2LCAgMjA2LCAgMjA2
LCAgMjA2LCAgMjA2LCAgMjA2LAorICAgICAgMjA2LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAg
MjA3LCAgMjA3LCAgMjA3LCAgMjA4LCAgMjA4LAorICAgICAgMjA4LCAgMjA4LCAgMjA4LCAgMjA4
LCAgMjA4LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LAorICAgICAgMjA5LCAgMjA5LCAg
MjIxLCAgMjIxLCAgMjIxLCAgMjI5LCAgMjI5LCAgMjI5LCAgMjMzLCAgMjMzLAorICAgICAgMjMz
LCAgMjM5LCAgMjM5LCAgMjM5LCAgMzcyLCAgMzcyLCAgMzcyLCAgNDEyLCAgNDExLCAgNDEwLAor
ICAgICAgNDA5LCAgNDA4LCAgNDA3LCAgNDA2LCAgNDA1LCAgNDA0LCAgNDAzLCAgMzcyLCAgNDAy
LCAgMzcyLAorICAgICAgNDQzLCAgNDQzLCAgNDAwLCAgMzkxLCAgMzkwLCAgMzg5LCAgMzg4LCAg
Mzg3LCAgMzg2LCAgMzg0LAorICAgICAgMzgzLCAgMzgyLCAgMzc5LCAgMzc4LCAgMzc2LCAgMzcz
LCAgMzcxLCAgMzcwLCAgMzY5LCAgMzY3LAorICAgICAgMzY2LCAgMzY1LCAgMzYyLCAgMzYxLCAg
MzYwLCAgMzU5LCAgMzU4LCAgMzU3LCAgMzU2LCAgMzU1LAorICAgICAgMzQ5LCAgMzQ2LCAgMzQz
LCAgMzQyLCAgMzQxLCAgMzQwLCAgMzM5LCAgMzM3LCAgMzM1LCAgMzM0LAorCisgICAgICAzMzMs
ICAzMzIsICAzMzAsICAzMjksICAzMjcsICAzMjUsICAzMjQsICAzMjMsICAzMjIsICAzMjEsCisg
ICAgICAzMjAsICAzMTksICAzMTgsICAzMTYsICAzMTUsICAzMTQsICAzMTMsICAzMTIsICAzMTEs
ICAzMTAsCisgICAgICAzMDksICAzMDgsICAzMDQsICAzMDMsICAzMDAsICAyODksICAyODUsICAy
ODQsICAyODMsICAyODIsCisgICAgICAyNzUsICAyNzQsICAyNzMsICAyNjgsICAyNjcsICAyNjYs
ICAyNjUsICAyNjQsICAyNjMsICAyNjAsCisgICAgICAyNTksICAyNTgsICAyNTcsICAyNTYsICAy
NTUsICAyNTQsICAyNTMsICAyNTIsICAyNTEsICAyNTAsCisgICAgICAyNDksICAyNDgsICAyNDcs
ICAyNDYsICAyNDUsICAyMzgsICAyMzcsICAyMzYsICAyMzUsICAyMzQsCisgICAgICAyMzIsICAy
MjgsICAyMjYsICAyMjUsICAyMjQsICAyMjAsICAyMTksICAyMTgsICAyMTcsICAyMTYsCisgICAg
ICAyMTUsICAyMTIsICAyMTAsICAyMDUsICAyMDQsICAyMDMsICAyMDEsICAyMDAsICAxOTksICAx
OTcsCisgICAgICAxOTYsICAxOTUsICAxOTQsICAxOTMsICAxOTIsICAxOTEsICAxOTAsICAxODks
ICAxODgsICAxODcsCisgICAgICAxODYsICAxODUsICAxODQsICAxODMsICAxODIsICAxODEsICAx
ODAsICAxNzksICAxNzcsICAxNzYsCisKKyAgICAgIDE3NSwgIDE3NCwgIDE3MywgIDE3MiwgIDE3
MSwgIDE3MCwgIDE2OSwgIDE2OCwgIDE2NywgIDE2NiwKKyAgICAgIDE2NSwgIDE2MywgIDE2Miwg
IDE2MSwgIDE2MCwgIDE1OSwgIDE1OCwgIDE1NywgIDE1NiwgIDE1NSwKKyAgICAgIDE1NCwgIDE1
MywgIDE1MSwgIDE1MCwgIDE0OSwgIDE0OCwgIDE0NywgIDE0NiwgIDEzNCwgIDEzMiwKKyAgICAg
IDEzMSwgIDEzMCwgIDEyOCwgIDEyNywgIDEyNiwgIDEyNSwgIDEyNCwgIDEyMywgIDEyMSwgIDEy
MCwKKyAgICAgIDExOSwgIDExOCwgIDExNywgIDExNiwgIDExNSwgIDExNCwgIDExMywgIDExMiwg
IDExMSwgIDExMCwKKyAgICAgIDEwOCwgIDEwNSwgIDEwNCwgIDEwMywgIDEwMiwgIDEwMSwgIDEw
MCwgICA5OCwgICA5NywgICA5NiwKKyAgICAgICA5NSwgICA5NCwgICA5MywgICA5MiwgICA5MSwg
ICA5MCwgICA4OSwgICA4OCwgICA4NywgICA4NiwKKyAgICAgICA4NSwgICA4NCwgICA4MywgICA4
MiwgICA3OCwgICA3NCwgICA0OSwgICA0NCwgICA0MiwgICAzOSwKKyAgICAgICAzNiwgICAyMywg
ICAyMCwgICAxNywgICAxMiwgICAgNywgICAgMywgIDQ0MiwgIDQ0MiwgIDQ0MiwKKyAgICAgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwK
KworICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLAorICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLAorICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAorICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAorICAgICAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAorICAgICAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyCisgICAgfSA7CisKKy8qIFRhYmxlIG9mIGJvb2xlYW5z
LCB0cnVlIGlmIHJ1bGUgY291bGQgbWF0Y2ggZW9sLiAqLworc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQzMl90IHl5X3J1bGVfY2FuX21hdGNoX2VvbFsxNDhdID0KKyAgICB7ICAgMCwKKzAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAs
IDAsIDAsIDAsIDEsIDAsIDAsICAgICB9OworCisvKiBUaGUgaW50ZW50IGJlaGluZCB0aGlzIGRl
ZmluaXRpb24gaXMgdGhhdCBpdCdsbCBjYXRjaAorICogYW55IHVzZXMgb2YgUkVKRUNUIHdoaWNo
IGZsZXggbWlzc2VkLgorICovCisjZGVmaW5lIFJFSkVDVCByZWplY3RfdXNlZF9idXRfbm90X2Rl
dGVjdGVkCisjZGVmaW5lIHl5bW9yZSgpIHl5bW9yZV91c2VkX2J1dF9ub3RfZGV0ZWN0ZWQKKyNk
ZWZpbmUgWVlfTU9SRV9BREogMAorI2RlZmluZSBZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCisv
KgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBMZXggc3BlY2lm
aWNhdGlvbiBmb3IgR0xTTCBFUy4KK0Jhc2VkIG9uIEFOU0kgQyBncmFtbWFyLCBMZXggc3BlY2lm
aWNhdGlvbjoKK2h0dHA6Ly93d3cubHlzYXRvci5saXUuc2UvYy9BTlNJLUMtZ3JhbW1hci1sLmh0
bWwKKworSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJh
dGVfcGFyc2VyLnNoLAorV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIExFWEVSIChnbHNsYW5n
X2xleC5jcHApLgorKi8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZy5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci91dGlsLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3Rh
Yi5oIgorCisvKiB3aW5kb3dzIG9ubHkgcHJhZ21hICovCisjaWZkZWYgX01TQ19WRVIKKyNwcmFn
bWEgd2FybmluZyhkaXNhYmxlIDogNDEwMikKKyNlbmRpZgorCisjZGVmaW5lIFlZX1VTRVJfQUNU
SU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHl5bGxvYy0+Zmlyc3Rf
ZmlsZSA9IHl5bGxvYy0+bGFzdF9maWxlID0geXljb2x1bW47IFwKKyAgICB5eWxsb2MtPmZpcnN0
X2xpbmUgPSB5eWxsb2MtPmxhc3RfbGluZSA9IHl5bGluZW5vOworCisjZGVmaW5lIFlZX0lOUFVU
KGJ1ZiwgcmVzdWx0LCBtYXhfc2l6ZSkgXAorICAgIHJlc3VsdCA9IHN0cmluZ19pbnB1dChidWYs
IG1heF9zaXplLCB5eXNjYW5uZXIpOworCitzdGF0aWMgeXlfc2l6ZV90IHN0cmluZ19pbnB1dChj
aGFyKiBidWYsIHl5X3NpemVfdCBtYXhfc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKTsKK3N0YXRp
YyBpbnQgY2hlY2tfdHlwZSh5eXNjYW5fdCB5eXNjYW5uZXIpOworc3RhdGljIGludCByZXNlcnZl
ZF93b3JkKHl5c2Nhbl90IHl5c2Nhbm5lcik7CitzdGF0aWMgaW50IGludF9jb25zdGFudCh5eXNj
YW5fdCB5eXNjYW5uZXIpOworc3RhdGljIGludCBmbG9hdF9jb25zdGFudCh5eXNjYW5fdCB5eXNj
YW5uZXIpOworCisjZGVmaW5lIElOSVRJQUwgMAorCisjZGVmaW5lIFlZX0VYVFJBX1RZUEUgVFBh
cnNlQ29udGV4dCoKKworLyogSG9sZHMgdGhlIGVudGlyZSBzdGF0ZSBvZiB0aGUgcmVlbnRyYW50
IHNjYW5uZXIuICovCitzdHJ1Y3QgeXlndXRzX3QKKyAgICB7CisKKyAgICAvKiBVc2VyLWRlZmlu
ZWQuIE5vdCB0b3VjaGVkIGJ5IGZsZXguICovCisgICAgWVlfRVhUUkFfVFlQRSB5eWV4dHJhX3I7
CisKKyAgICAvKiBUaGUgcmVzdCBhcmUgdGhlIHNhbWUgYXMgdGhlIGdsb2JhbHMgZGVjbGFyZWQg
aW4gdGhlIG5vbi1yZWVudHJhbnQgc2Nhbm5lci4gKi8KKyAgICBGSUxFICp5eWluX3IsICp5eW91
dF9yOworICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfdG9wOyAvKio8IGluZGV4IG9mIHRvcCBv
ZiBzdGFjay4gKi8KKyAgICBzaXplX3QgeXlfYnVmZmVyX3N0YWNrX21heDsgLyoqPCBjYXBhY2l0
eSBvZiBzdGFjay4gKi8KKyAgICBZWV9CVUZGRVJfU1RBVEUgKiB5eV9idWZmZXJfc3RhY2s7IC8q
KjwgU3RhY2sgYXMgYW4gYXJyYXkuICovCisgICAgY2hhciB5eV9ob2xkX2NoYXI7CisgICAgeXlf
c2l6ZV90IHl5X25fY2hhcnM7CisgICAgeXlfc2l6ZV90IHl5bGVuZ19yOworICAgIGNoYXIgKnl5
X2NfYnVmX3A7CisgICAgaW50IHl5X2luaXQ7CisgICAgaW50IHl5X3N0YXJ0OworICAgIGludCB5
eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2Y7CisgICAgaW50IHl5X3N0YXJ0X3N0YWNrX3B0cjsK
KyAgICBpbnQgeXlfc3RhcnRfc3RhY2tfZGVwdGg7CisgICAgaW50ICp5eV9zdGFydF9zdGFjazsK
KyAgICB5eV9zdGF0ZV90eXBlIHl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOworICAgIGNoYXIqIHl5
X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisKKyAgICBpbnQgeXlsaW5lbm9fcjsKKyAgICBpbnQgeXlf
ZmxleF9kZWJ1Z19yOworCisgICAgY2hhciAqeXl0ZXh0X3I7CisgICAgaW50IHl5X21vcmVfZmxh
ZzsKKyAgICBpbnQgeXlfbW9yZV9sZW47CisKKyAgICBZWVNUWVBFICogeXlsdmFsX3I7CisKKyAg
ICBZWUxUWVBFICogeXlsbG9jX3I7CisKKyAgICB9OyAvKiBlbmQgc3RydWN0IHl5Z3V0c190ICov
CisKK3N0YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxzICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwor
ICAgIC8qIFRoaXMgbXVzdCBnbyBoZXJlIGJlY2F1c2UgWVlTVFlQRSBhbmQgWVlMVFlQRSBhcmUg
aW5jbHVkZWQKKyAgICAgKiBmcm9tIGJpc29uIG91dHB1dCBpbiBzZWN0aW9uIDEuKi8KKyAgICAj
ICAgIGRlZmluZSB5eWx2YWwgeXlnLT55eWx2YWxfcgorICAgIAorICAgICMgICAgZGVmaW5lIHl5
bGxvYyB5eWctPnl5bGxvY19yCisgICAgCitpbnQgeXlsZXhfaW5pdCAoeXlzY2FuX3QqIHNjYW5u
ZXIpOworCitpbnQgeXlsZXhfaW5pdF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQs
eXlzY2FuX3QqIHNjYW5uZXIpOworCisvKiBBY2Nlc3NvciBtZXRob2RzIHRvIGdsb2JhbHMuCisg
ICBUaGVzZSBhcmUgbWFkZSB2aXNpYmxlIHRvIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMgZm9yIGNv
bnZlbmllbmNlLiAqLworCitpbnQgeXlsZXhfZGVzdHJveSAoeXlzY2FuX3QgeXlzY2FubmVyICk7
CisKK2ludCB5eWdldF9kZWJ1ZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgeXlzZXRf
ZGVidWcgKGludCBkZWJ1Z19mbGFnICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworWVlfRVhUUkFf
VFlQRSB5eWdldF9leHRyYSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgeXlzZXRfZXh0
cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwor
RklMRSAqeXlnZXRfaW4gKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHl5c2V0X2luICAo
RklMRSAqIGluX3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKK0ZJTEUgKnl5Z2V0X291dCAo
eXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgeXlzZXRfb3V0ICAoRklMRSAqIG91dF9zdHIg
LHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit5eV9zaXplX3QgeXlnZXRfbGVuZyAoeXlzY2FuX3Qg
eXlzY2FubmVyICk7CisKK2NoYXIgKnl5Z2V0X3RleHQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwor
CitpbnQgeXlnZXRfbGluZW5vICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCB5eXNldF9s
aW5lbm8gKGludCBsaW5lX251bWJlciAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2ludCB5eWdl
dF9jb2x1bW4gICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCB5eXNldF9jb2x1bW4gKGlu
dCBjb2x1bW5fbm8gLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitZWVNUWVBFICogeXlnZXRfbHZh
bCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgeXlzZXRfbHZhbCAoWVlTVFlQRSAqIHl5
bHZhbF9wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKKyAgICAgICBZWUxUWVBFICp5eWdl
dF9sbG9jICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyAgICAKKyAgICAgICAgdm9pZCB5eXNldF9s
bG9jIChZWUxUWVBFICogeXlsbG9jX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyAgICAK
Ky8qIE1hY3JvcyBhZnRlciB0aGlzIHBvaW50IGNhbiBhbGwgYmUgb3ZlcnJpZGRlbiBieSB1c2Vy
IGRlZmluaXRpb25zIGluCisgKiBzZWN0aW9uIDEuCisgKi8KKworI2lmbmRlZiBZWV9TS0lQX1lZ
V1JBUAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIGludCB5eXdyYXAgKHl5c2Nhbl90
IHl5c2Nhbm5lciApOworI2Vsc2UKK2V4dGVybiBpbnQgeXl3cmFwICh5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgeXl0ZXh0X3B0cgorc3RhdGljIHZvaWQg
eXlfZmxleF9zdHJuY3B5IChjaGFyICoseXljb25zdCBjaGFyICosaW50ICx5eXNjYW5fdCB5eXNj
YW5uZXIpOworI2VuZGlmCisKKyNpZmRlZiBZWV9ORUVEX1NUUkxFTgorc3RhdGljIGludCB5eV9m
bGV4X3N0cmxlbiAoeXljb25zdCBjaGFyICogLHl5c2Nhbl90IHl5c2Nhbm5lcik7CisjZW5kaWYK
KworI2lmbmRlZiBZWV9OT19JTlBVVAorCisjaWZkZWYgX19jcGx1c3BsdXMKK3N0YXRpYyBpbnQg
eXlpbnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZWxzZQorc3RhdGljIGludCBpbnB1dCAo
eXlzY2FuX3QgeXlzY2FubmVyICk7CisjZW5kaWYKKworI2VuZGlmCisKKy8qIEFtb3VudCBvZiBz
dHVmZiB0byBzbHVycCB1cCB3aXRoIGVhY2ggcmVhZC4gKi8KKyNpZm5kZWYgWVlfUkVBRF9CVUZf
U0laRQorI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDgxOTIKKyNlbmRpZgorCisvKiBDb3B5IHdo
YXRldmVyIHRoZSBsYXN0IHJ1bGUgbWF0Y2hlZCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAqLwor
I2lmbmRlZiBFQ0hPCisvKiBUaGlzIHVzZWQgdG8gYmUgYW4gZnB1dHMoKSwgYnV0IHNpbmNlIHRo
ZSBzdHJpbmcgbWlnaHQgY29udGFpbiBOVUwncywKKyAqIHdlIG5vdyB1c2UgZndyaXRlKCkuCisg
Ki8KKyNkZWZpbmUgRUNITyBkbyB7IGlmIChmd3JpdGUoIHl5dGV4dCwgeXlsZW5nLCAxLCB5eW91
dCApKSB7fSB9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qIEdldHMgaW5wdXQgYW5kIHN0dWZmcyBp
dCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVMTCwKKyAq
IGlzIHJldHVybmVkIGluICJyZXN1bHQiLgorICovCisjaWZuZGVmIFlZX0lOUFVUCisjZGVmaW5l
IFlZX0lOUFVUKGJ1ZixyZXN1bHQsbWF4X3NpemUpIFwKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCisJCXsgXAorCQlpbnQgYyA9ICcqJzsgXAor
CQlzaXplX3QgbjsgXAorCQlmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKKwkJCSAgICAg
KGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsrbiApIFwKKwkJCWJ1Zltu
XSA9IChjaGFyKSBjOyBcCisJCWlmICggYyA9PSAnXG4nICkgXAorCQkJYnVmW24rK10gPSAoY2hh
cikgYzsgXAorCQlpZiAoIGMgPT0gRU9GICYmIGZlcnJvciggeXlpbiApICkgXAorCQkJWVlfRkFU
QUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCisJCXJlc3VsdCA9
IG47IFwKKwkJfSBcCisJZWxzZSBcCisJCXsgXAorCQllcnJubz0wOyBcCisJCXdoaWxlICggKHJl
c3VsdCA9IGZyZWFkKGJ1ZiwgMSwgbWF4X3NpemUsIHl5aW4pKT09MCAmJiBmZXJyb3IoeXlpbikp
IFwKKwkJCXsgXAorCQkJaWYoIGVycm5vICE9IEVJTlRSKSBcCisJCQkJeyBcCisJCQkJWVlfRkFU
QUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCisJCQkJYnJlYWs7
IFwKKwkJCQl9IFwKKwkJCWVycm5vPTA7IFwKKwkJCWNsZWFyZXJyKHl5aW4pOyBcCisJCQl9IFwK
KwkJfVwKK1wKKworI2VuZGlmCisKKy8qIE5vIHNlbWktY29sb24gYWZ0ZXIgcmV0dXJuOyBjb3Jy
ZWN0IHVzYWdlIGlzIHRvIHdyaXRlICJ5eXRlcm1pbmF0ZSgpOyIgLQorICogd2UgZG9uJ3Qgd2Fu
dCBhbiBleHRyYSAnOycgYWZ0ZXIgdGhlICJyZXR1cm4iIGJlY2F1c2UgdGhhdCB3aWxsIGNhdXNl
CisgKiBzb21lIGNvbXBpbGVycyB0byBjb21wbGFpbiBhYm91dCB1bnJlYWNoYWJsZSBzdGF0ZW1l
bnRzLgorICovCisjaWZuZGVmIHl5dGVybWluYXRlCisjZGVmaW5lIHl5dGVybWluYXRlKCkgcmV0
dXJuIFlZX05VTEwKKyNlbmRpZgorCisvKiBOdW1iZXIgb2YgZW50cmllcyBieSB3aGljaCBzdGFy
dC1jb25kaXRpb24gc3RhY2sgZ3Jvd3MuICovCisjaWZuZGVmIFlZX1NUQVJUX1NUQUNLX0lOQ1IK
KyNkZWZpbmUgWVlfU1RBUlRfU1RBQ0tfSU5DUiAyNQorI2VuZGlmCisKKy8qIFJlcG9ydCBhIGZh
dGFsIGVycm9yLiAqLworI2lmbmRlZiBZWV9GQVRBTF9FUlJPUgorI2RlZmluZSBZWV9GQVRBTF9F
UlJPUihtc2cpIHl5X2ZhdGFsX2Vycm9yKCBtc2cgLCB5eXNjYW5uZXIpCisjZW5kaWYKKworLyog
ZW5kIHRhYmxlcyBzZXJpYWxpemF0aW9uIHN0cnVjdHVyZXMgYW5kIHByb3RvdHlwZXMgKi8KKwor
LyogRGVmYXVsdCBkZWNsYXJhdGlvbiBvZiBnZW5lcmF0ZWQgc2Nhbm5lciAtIGEgZGVmaW5lIHNv
IHRoZSB1c2VyIGNhbgorICogZWFzaWx5IGFkZCBwYXJhbWV0ZXJzLgorICovCisjaWZuZGVmIFlZ
X0RFQ0wKKyNkZWZpbmUgWVlfREVDTF9JU19PVVJTIDEKKworZXh0ZXJuIGludCB5eWxleCBcCisg
ICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSxZWUxUWVBFICogeXlsbG9jX3Bh
cmFtICx5eXNjYW5fdCB5eXNjYW5uZXIpOworCisjZGVmaW5lIFlZX0RFQ0wgaW50IHl5bGV4IFwK
KyAgICAgICAgICAgICAgIChZWVNUWVBFICogeXlsdmFsX3BhcmFtLCBZWUxUWVBFICogeXlsbG9j
X3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQorI2VuZGlmIC8qICFZWV9ERUNMICovCisKKy8q
IENvZGUgZXhlY3V0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHJ1bGUsIGFmdGVyIHl5dGV4
dCBhbmQgeXlsZW5nCisgKiBoYXZlIGJlZW4gc2V0IHVwLgorICovCisjaWZuZGVmIFlZX1VTRVJf
QUNUSU9OCisjZGVmaW5lIFlZX1VTRVJfQUNUSU9OCisjZW5kaWYKKworLyogQ29kZSBleGVjdXRl
ZCBhdCB0aGUgZW5kIG9mIGVhY2ggcnVsZS4gKi8KKyNpZm5kZWYgWVlfQlJFQUsKKyNkZWZpbmUg
WVlfQlJFQUsgYnJlYWs7CisjZW5kaWYKKworI2RlZmluZSBZWV9SVUxFX1NFVFVQIFwKKwlZWV9V
U0VSX0FDVElPTgorCisvKiogVGhlIG1haW4gc2Nhbm5lciBmdW5jdGlvbiB3aGljaCBkb2VzIGFs
bCB0aGUgd29yay4KKyAqLworWVlfREVDTAoreworCXJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlf
Y3VycmVudF9zdGF0ZTsKKwlyZWdpc3RlciBjaGFyICp5eV9jcCwgKnl5X2JwOworCXJlZ2lzdGVy
IGludCB5eV9hY3Q7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOworCisgICAgeXlsdmFsID0geXlsdmFsX3BhcmFtOworCisgICAgeXlsbG9j
ID0geXlsbG9jX3BhcmFtOworCisJaWYgKCAheXlnLT55eV9pbml0ICkKKwkJeworCQl5eWctPnl5
X2luaXQgPSAxOworCisjaWZkZWYgWVlfVVNFUl9JTklUCisJCVlZX1VTRVJfSU5JVDsKKyNlbmRp
ZgorCisJCWlmICggISB5eWctPnl5X3N0YXJ0ICkKKwkJCXl5Zy0+eXlfc3RhcnQgPSAxOwkvKiBm
aXJzdCBzdGFydCBzdGF0ZSAqLworCisJCWlmICggISB5eWluICkKKwkJCXl5aW4gPSBzdGRpbjsK
KworCQlpZiAoICEgeXlvdXQgKQorCQkJeXlvdXQgPSBzdGRvdXQ7CisKKwkJaWYgKCAhIFlZX0NV
UlJFTlRfQlVGRkVSICkgeworCQkJeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwor
CQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KKwkJCQl5eV9jcmVhdGVfYnVmZmVyKHl5aW4s
WVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7CisJCX0KKworCQl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5
eXNjYW5uZXIgKTsKKwkJfQorCisJd2hpbGUgKCAxICkJCS8qIGxvb3BzIHVudGlsIGVuZC1vZi1m
aWxlIGlzIHJlYWNoZWQgKi8KKwkJeworCQl5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKKworCQkv
KiBTdXBwb3J0IG9mIHl5dGV4dC4gKi8KKwkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7CisK
KwkJLyogeXlfYnAgcG9pbnRzIHRvIHRoZSBwb3NpdGlvbiBpbiB5eV9jaF9idWYgb2YgdGhlIHN0
YXJ0IG9mCisJCSAqIHRoZSBjdXJyZW50IHJ1bi4KKwkJICovCisJCXl5X2JwID0geXlfY3A7CisK
KwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7Cit5eV9tYXRjaDoKKwkJZG8KKwkJ
CXsKKwkJCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCld
OworCQkJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQkJCXsKKwkJCQl5eWct
Pnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKKwkJCQl5eWctPnl5
X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKKwkJCQl9CisJCQl3aGlsZSAoIHl5X2Noa1t5
eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCisJ
CQkJeworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0
ZV07CisJCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ0MyApCisJCQkJCXl5X2MgPSB5eV9t
ZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQkJCX0KKwkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5
eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwor
CQkJKyt5eV9jcDsKKwkJCX0KKwkJd2hpbGUgKCB5eV9jdXJyZW50X3N0YXRlICE9IDQ0MiApOwor
CQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKwkJeXlfY3VycmVudF9zdGF0
ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisKK3l5X2ZpbmRfYWN0aW9uOgorCQl5
eV9hY3QgPSB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV07CisKKwkJWVlfRE9fQkVGT1JFX0FD
VElPTjsKKworCQlpZiAoIHl5X2FjdCAhPSBZWV9FTkRfT0ZfQlVGRkVSICYmIHl5X3J1bGVfY2Fu
X21hdGNoX2VvbFt5eV9hY3RdICkKKwkJCXsKKwkJCXl5X3NpemVfdCB5eWw7CisJCQlmb3IgKCB5
eWwgPSAwOyB5eWwgPCB5eWxlbmc7ICsreXlsICkKKwkJCQlpZiAoIHl5dGV4dFt5eWxdID09ICdc
bicgKQorCQkJCQkgICAKKyAgICBkb3sgeXlsaW5lbm8rKzsKKyAgICAgICAgeXljb2x1bW49MDsK
KyAgICB9d2hpbGUoMCkKKzsKKwkJCX0KKworZG9fYWN0aW9uOgkvKiBUaGlzIGxhYmVsIGlzIHVz
ZWQgb25seSB0byBhY2Nlc3MgRU9GIGFjdGlvbnMuICovCisKKwkJc3dpdGNoICggeXlfYWN0ICkK
Kwl7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dpdGNoICovCisJCQljYXNlIDA6IC8qIG11c3Qg
YmFjayB1cCAqLworCQkJLyogdW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9O
ICovCisJCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJCXl5X2NwID0geXlnLT55eV9s
YXN0X2FjY2VwdGluZ19jcG9zOworCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9h
Y2NlcHRpbmdfc3RhdGU7CisJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOworCitjYXNlIDE6CitZWV9S
VUxFX1NFVFVQCit7IHJldHVybiBJTlZBUklBTlQ7IH0KKwlZWV9CUkVBSworY2FzZSAyOgorWVlf
UlVMRV9TRVRVUAoreyByZXR1cm4gSElHSF9QUkVDSVNJT047IH0KKwlZWV9CUkVBSworY2FzZSAz
OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gTUVESVVNX1BSRUNJU0lPTjsgfQorCVlZX0JSRUFL
CitjYXNlIDQ6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBMT1dfUFJFQ0lTSU9OOyB9CisJWVlf
QlJFQUsKK2Nhc2UgNToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIFBSRUNJU0lPTjsgfQorCVlZ
X0JSRUFLCitjYXNlIDY6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBBVFRSSUJVVEU7IH0KKwlZ
WV9CUkVBSworY2FzZSA3OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gQ09OU1RfUVVBTDsgfQor
CVlZX0JSRUFLCitjYXNlIDg6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBVTklGT1JNOyB9CisJ
WVlfQlJFQUsKK2Nhc2UgOToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIFZBUllJTkc7IH0KKwlZ
WV9CUkVBSworY2FzZSAxMDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIEJSRUFLOyB9CisJWVlf
QlJFQUsKK2Nhc2UgMTE6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBDT05USU5VRTsgfQorCVlZ
X0JSRUFLCitjYXNlIDEyOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gRE87IH0KKwlZWV9CUkVB
SworY2FzZSAxMzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIEZPUjsgfQorCVlZX0JSRUFLCitj
YXNlIDE0OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gV0hJTEU7IH0KKwlZWV9CUkVBSworY2Fz
ZSAxNToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIElGOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTY6
CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBFTFNFOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTc6CitZ
WV9SVUxFX1NFVFVQCit7IHJldHVybiBJTl9RVUFMOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTg6CitZ
WV9SVUxFX1NFVFVQCit7IHJldHVybiBPVVRfUVVBTDsgfQorCVlZX0JSRUFLCitjYXNlIDE5Ogor
WVlfUlVMRV9TRVRVUAoreyByZXR1cm4gSU5PVVRfUVVBTDsgfQorCVlZX0JSRUFLCitjYXNlIDIw
OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gRkxPQVRfVFlQRTsgfQorCVlZX0JSRUFLCitjYXNl
IDIxOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gSU5UX1RZUEU7IH0KKwlZWV9CUkVBSworY2Fz
ZSAyMjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIFZPSURfVFlQRTsgfQorCVlZX0JSRUFLCitj
YXNlIDIzOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gQk9PTF9UWVBFOyB9CisJWVlfQlJFQUsK
K2Nhc2UgMjQ6CitZWV9SVUxFX1NFVFVQCit7IHl5bHZhbC0+bGV4LmIgPSB0cnVlOyAgcmV0dXJu
IEJPT0xDT05TVEFOVDsgfQorCVlZX0JSRUFLCitjYXNlIDI1OgorWVlfUlVMRV9TRVRVUAoreyB5
eWx2YWwtPmxleC5iID0gZmFsc2U7IHJldHVybiBCT09MQ09OU1RBTlQ7IH0KKwlZWV9CUkVBSwor
Y2FzZSAyNjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIERJU0NBUkQ7IH0KKwlZWV9CUkVBSwor
Y2FzZSAyNzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIFJFVFVSTjsgfQorCVlZX0JSRUFLCitj
YXNlIDI4OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gTUFUUklYMjsgfQorCVlZX0JSRUFLCitj
YXNlIDI5OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gTUFUUklYMzsgfQorCVlZX0JSRUFLCitj
YXNlIDMwOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gTUFUUklYNDsgfQorCVlZX0JSRUFLCitj
YXNlIDMxOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gVkVDMjsgfQorCVlZX0JSRUFLCitjYXNl
IDMyOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gVkVDMzsgfQorCVlZX0JSRUFLCitjYXNlIDMz
OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gVkVDNDsgfQorCVlZX0JSRUFLCitjYXNlIDM0Ogor
WVlfUlVMRV9TRVRVUAoreyByZXR1cm4gSVZFQzI7IH0KKwlZWV9CUkVBSworY2FzZSAzNToKK1lZ
X1JVTEVfU0VUVVAKK3sgcmV0dXJuIElWRUMzOyB9CisJWVlfQlJFQUsKK2Nhc2UgMzY6CitZWV9S
VUxFX1NFVFVQCit7IHJldHVybiBJVkVDNDsgfQorCVlZX0JSRUFLCitjYXNlIDM3OgorWVlfUlVM
RV9TRVRVUAoreyByZXR1cm4gQlZFQzI7IH0KKwlZWV9CUkVBSworY2FzZSAzODoKK1lZX1JVTEVf
U0VUVVAKK3sgcmV0dXJuIEJWRUMzOyB9CisJWVlfQlJFQUsKK2Nhc2UgMzk6CitZWV9SVUxFX1NF
VFVQCit7IHJldHVybiBCVkVDNDsgfQorCVlZX0JSRUFLCitjYXNlIDQwOgorWVlfUlVMRV9TRVRV
UAoreyByZXR1cm4gU0FNUExFUjJEOyB9CisJWVlfQlJFQUsKK2Nhc2UgNDE6CitZWV9SVUxFX1NF
VFVQCit7IHJldHVybiBTQU1QTEVSQ1VCRTsgfQorCVlZX0JSRUFLCitjYXNlIDQyOgorWVlfUlVM
RV9TRVRVUAoreyByZXR1cm4gU0FNUExFUl9FWFRFUk5BTF9PRVM7IH0KKwlZWV9CUkVBSworY2Fz
ZSA0MzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIFNBTVBMRVIyRFJFQ1Q7IH0KKwlZWV9CUkVB
SworY2FzZSA0NDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIFNUUlVDVDsgfQorCVlZX0JSRUFL
CitjYXNlIDQ1OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNDY6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA0NzoKK1lZX1JVTEVfU0VU
VVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNl
IDQ4OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
CisJWVlfQlJFQUsKK2Nhc2UgNDk6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA1MDoKK1lZX1JVTEVfU0VUVVAKK3sg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDUxOgor
WVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlf
QlJFQUsKK2Nhc2UgNTI6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA1MzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDU0OgorWVlfUlVM
RV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsK
K2Nhc2UgNTU6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KKwlZWV9CUkVBSworY2FzZSA1NjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDU3OgorWVlfUlVMRV9TRVRV
UAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2Ug
NTg6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
KwlZWV9CUkVBSworY2FzZSA1OToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDYwOgorWVlfUlVMRV9TRVRVUAoreyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNjE6CitZ
WV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9C
UkVBSworY2FzZSA2MjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDYzOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNjQ6CitZWV9SVUxF
X1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSwor
Y2FzZSA2NToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQorCVlZX0JSRUFLCitjYXNlIDY2OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNjc6CitZWV9SVUxFX1NFVFVQ
Cit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA2
ODoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQor
CVlZX0JSRUFLCitjYXNlIDY5OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNzA6CitZWV9SVUxFX1NFVFVQCit7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA3MToKK1lZ
X1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JS
RUFLCitjYXNlIDcyOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNzM6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA3NDoKK1lZX1JVTEVf
U0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitj
YXNlIDc1OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9CisJWVlfQlJFQUsKK2Nhc2UgNzY6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA3NzoKK1lZX1JVTEVfU0VUVVAK
K3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDc4
OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJ
WVlfQlJFQUsKK2Nhc2UgNzk6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA4MDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDgxOgorWVlf
UlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJF
QUsKK2Nhc2UgODI6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA4MzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDg0OgorWVlfUlVMRV9T
RVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nh
c2UgODU6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KKwlZWV9CUkVBSworY2FzZSA4NjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDg3OgorWVlfUlVMRV9TRVRVUAor
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgODg6
CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZ
WV9CUkVBSworY2FzZSA4OToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDkwOgorWVlfUlVMRV9TRVRVUAoreyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTE6CitZWV9S
VUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVB
SworY2FzZSA5MjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDkzOgorWVlfUlVMRV9TRVRVUAoreworICAgeXlsdmFs
LT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsgCisgICByZXR1cm4gY2hlY2tf
dHlwZSh5eXNjYW5uZXIpOworfQorCVlZX0JSRUFLCitjYXNlIDk0OgorWVlfUlVMRV9TRVRVUAor
eyByZXR1cm4gaW50X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5NToK
K1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIGludF9jb25zdGFudCh5eXNjYW5uZXIpOyB9CisJWVlf
QlJFQUsKK2Nhc2UgOTY6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBpbnRfY29uc3RhbnQoeXlz
Y2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDk3OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4g
ZmxvYXRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDk4OgorWVlfUlVM
RV9TRVRVUAoreyByZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFL
CitjYXNlIDk5OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2Fu
bmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDEwMDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIEFE
RF9BU1NJR047IH0KKwlZWV9CUkVBSworY2FzZSAxMDE6CitZWV9SVUxFX1NFVFVQCit7IHJldHVy
biBTVUJfQVNTSUdOOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTAyOgorWVlfUlVMRV9TRVRVUAoreyBy
ZXR1cm4gTVVMX0FTU0lHTjsgfQorCVlZX0JSRUFLCitjYXNlIDEwMzoKK1lZX1JVTEVfU0VUVVAK
K3sgcmV0dXJuIERJVl9BU1NJR047IH0KKwlZWV9CUkVBSworY2FzZSAxMDQ6CitZWV9SVUxFX1NF
VFVQCit7IHJldHVybiBNT0RfQVNTSUdOOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTA1OgorWVlfUlVM
RV9TRVRVUAoreyByZXR1cm4gTEVGVF9BU1NJR047IH0KKwlZWV9CUkVBSworY2FzZSAxMDY6CitZ
WV9SVUxFX1NFVFVQCit7IHJldHVybiBSSUdIVF9BU1NJR047IH0KKwlZWV9CUkVBSworY2FzZSAx
MDc6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBBTkRfQVNTSUdOOyB9CisJWVlfQlJFQUsKK2Nh
c2UgMTA4OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gWE9SX0FTU0lHTjsgfQorCVlZX0JSRUFL
CitjYXNlIDEwOToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIE9SX0FTU0lHTjsgfQorCVlZX0JS
RUFLCitjYXNlIDExMDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIElOQ19PUDsgfQorCVlZX0JS
RUFLCitjYXNlIDExMToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIERFQ19PUDsgfQorCVlZX0JS
RUFLCitjYXNlIDExMjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIEFORF9PUDsgfQorCVlZX0JS
RUFLCitjYXNlIDExMzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIE9SX09QOyB9CisJWVlfQlJF
QUsKK2Nhc2UgMTE0OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gWE9SX09QOyB9CisJWVlfQlJF
QUsKK2Nhc2UgMTE1OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gTEVfT1A7IH0KKwlZWV9CUkVB
SworY2FzZSAxMTY6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBHRV9PUDsgfQorCVlZX0JSRUFL
CitjYXNlIDExNzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIEVRX09QOyB9CisJWVlfQlJFQUsK
K2Nhc2UgMTE4OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gTkVfT1A7IH0KKwlZWV9CUkVBSwor
Y2FzZSAxMTk6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBMRUZUX09QOyB9CisJWVlfQlJFQUsK
K2Nhc2UgMTIwOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gUklHSFRfT1A7IH0KKwlZWV9CUkVB
SworY2FzZSAxMjE6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBTRU1JQ09MT047IH0KKwlZWV9C
UkVBSworY2FzZSAxMjI6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBMRUZUX0JSQUNFOyB9CisJ
WVlfQlJFQUsKK2Nhc2UgMTIzOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gUklHSFRfQlJBQ0U7
IH0KKwlZWV9CUkVBSworY2FzZSAxMjQ6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBDT01NQTsg
fQorCVlZX0JSRUFLCitjYXNlIDEyNToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIENPTE9OOyB9
CisJWVlfQlJFQUsKK2Nhc2UgMTI2OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gRVFVQUw7IH0K
KwlZWV9CUkVBSworY2FzZSAxMjc6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBMRUZUX1BBUkVO
OyB9CisJWVlfQlJFQUsKK2Nhc2UgMTI4OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gUklHSFRf
UEFSRU47IH0KKwlZWV9CUkVBSworY2FzZSAxMjk6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBM
RUZUX0JSQUNLRVQ7IH0KKwlZWV9CUkVBSworY2FzZSAxMzA6CitZWV9SVUxFX1NFVFVQCit7IHJl
dHVybiBSSUdIVF9CUkFDS0VUOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTMxOgorWVlfUlVMRV9TRVRV
UAoreyByZXR1cm4gRE9UOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTMyOgorWVlfUlVMRV9TRVRVUAor
eyByZXR1cm4gQkFORzsgfQorCVlZX0JSRUFLCitjYXNlIDEzMzoKK1lZX1JVTEVfU0VUVVAKK3sg
cmV0dXJuIERBU0g7IH0KKwlZWV9CUkVBSworY2FzZSAxMzQ6CitZWV9SVUxFX1NFVFVQCit7IHJl
dHVybiBUSUxERTsgfQorCVlZX0JSRUFLCitjYXNlIDEzNToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0
dXJuIFBMVVM7IH0KKwlZWV9CUkVBSworY2FzZSAxMzY6CitZWV9SVUxFX1NFVFVQCit7IHJldHVy
biBTVEFSOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTM3OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4g
U0xBU0g7IH0KKwlZWV9CUkVBSworY2FzZSAxMzg6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBQ
RVJDRU5UOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTM5OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4g
TEVGVF9BTkdMRTsgfQorCVlZX0JSRUFLCitjYXNlIDE0MDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0
dXJuIFJJR0hUX0FOR0xFOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTQxOgorWVlfUlVMRV9TRVRVUAor
eyByZXR1cm4gVkVSVElDQUxfQkFSOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTQyOgorWVlfUlVMRV9T
RVRVUAoreyByZXR1cm4gQ0FSRVQ7IH0KKwlZWV9CUkVBSworY2FzZSAxNDM6CitZWV9SVUxFX1NF
VFVQCit7IHJldHVybiBBTVBFUlNBTkQ7IH0KKwlZWV9CUkVBSworY2FzZSAxNDQ6CitZWV9SVUxF
X1NFVFVQCit7IHJldHVybiBRVUVTVElPTjsgfQorCVlZX0JSRUFLCitjYXNlIDE0NToKKy8qIHJ1
bGUgMTQ1IGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VUVVAKK3sgfQorCVlZX0JSRUFLCitj
YXNlIFlZX1NUQVRFX0VPRihJTklUSUFMKToKK3sgeXl0ZXJtaW5hdGUoKTsgfQorCVlZX0JSRUFL
CitjYXNlIDE0NjoKK1lZX1JVTEVfU0VUVVAKK3sgYXNzZXJ0KGZhbHNlKTsgcmV0dXJuIDA7IH0K
KwlZWV9CUkVBSworY2FzZSAxNDc6CitZWV9SVUxFX1NFVFVQCitFQ0hPOworCVlZX0JSRUFLCisK
KwljYXNlIFlZX0VORF9PRl9CVUZGRVI6CisJCXsKKwkJLyogQW1vdW50IG9mIHRleHQgbWF0Y2hl
ZCBub3QgaW5jbHVkaW5nIHRoZSBFT0IgY2hhci4gKi8KKwkJaW50IHl5X2Ftb3VudF9vZl9tYXRj
aGVkX3RleHQgPSAoaW50KSAoeXlfY3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsKKworCQkvKiBV
bmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04uICovCisJCSp5eV9jcCA9IHl5
Zy0+eXlfaG9sZF9jaGFyOworCQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCisKKwkJaWYgKCBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX05F
VyApCisJCQl7CisJCQkvKiBXZSdyZSBzY2FubmluZyBhIG5ldyBmaWxlIG9yIGlucHV0IHNvdXJj
ZS4gIEl0J3MKKwkJCSAqIHBvc3NpYmxlIHRoYXQgdGhpcyBoYXBwZW5lZCBiZWNhdXNlIHRoZSB1
c2VyCisJCQkgKiBqdXN0IHBvaW50ZWQgeXlpbiBhdCBhIG5ldyBzb3VyY2UgYW5kIGNhbGxlZAor
CQkJICogeXlsZXgoKS4gIElmIHNvLCB0aGVuIHdlIGhhdmUgdG8gYXNzdXJlCisJCQkgKiBjb25z
aXN0ZW5jeSBiZXR3ZWVuIFlZX0NVUlJFTlRfQlVGRkVSIGFuZCBvdXIKKwkJCSAqIGdsb2JhbHMu
ICBIZXJlIGlzIHRoZSByaWdodCBwbGFjZSB0byBkbyBzbywgYmVjYXVzZQorCQkJICogdGhpcyBp
cyB0aGUgZmlyc3QgYWN0aW9uIChvdGhlciB0aGFuIHBvc3NpYmx5IGEKKwkJCSAqIGJhY2stdXAp
IHRoYXQgd2lsbCBtYXRjaCBmb3IgdGhlIG5ldyBpbnB1dCBzb3VyY2UuCisJCQkgKi8KKwkJCXl5
Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsKKwkJ
CVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZSA9IHl5aW47CisJCQlZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTk9STUFM
OworCQkJfQorCisJCS8qIE5vdGUgdGhhdCBoZXJlIHdlIHRlc3QgZm9yIHl5X2NfYnVmX3AgIjw9
IiB0byB0aGUgcG9zaXRpb24KKwkJICogb2YgdGhlIGZpcnN0IEVPQiBpbiB0aGUgYnVmZmVyLCBz
aW5jZSB5eV9jX2J1Zl9wIHdpbGwKKwkJICogYWxyZWFkeSBoYXZlIGJlZW4gaW5jcmVtZW50ZWQg
cGFzdCB0aGUgTlVMIGNoYXJhY3RlcgorCQkgKiAoc2luY2UgYWxsIHN0YXRlcyBtYWtlIHRyYW5z
aXRpb25zIG9uIEVPQiB0byB0aGUKKwkJICogZW5kLW9mLWJ1ZmZlciBzdGF0ZSkuICBDb250cmFz
dCB0aGlzIHdpdGggdGhlIHRlc3QKKwkJICogaW4gaW5wdXQoKS4KKwkJICovCisJCWlmICggeXln
LT55eV9jX2J1Zl9wIDw9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWct
Pnl5X25fY2hhcnNdICkKKwkJCXsgLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLworCQkJeXlf
c3RhdGVfdHlwZSB5eV9uZXh0X3N0YXRlOworCisJCQl5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5
dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OworCisJCQl5eV9jdXJyZW50X3N0
YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKKworCQkJLyogT2theSwg
d2UncmUgbm93IHBvc2l0aW9uZWQgdG8gbWFrZSB0aGUgTlVMCisJCQkgKiB0cmFuc2l0aW9uLiAg
V2UgY291bGRuJ3QgaGF2ZQorCQkJICogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCkgZ28gYWhlYWQg
YW5kIGRvIGl0CisJCQkgKiBmb3IgdXMgYmVjYXVzZSBpdCBkb2Vzbid0IGtub3cgaG93IHRvIGRl
YWwKKwkJCSAqIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIGphbW1pbmcgKGFuZCB3ZSBkb24ndAor
CQkJICogd2FudCB0byBidWlsZCBqYW1taW5nIGludG8gaXQgYmVjYXVzZSB0aGVuIGl0CisJCQkg
KiB3aWxsIHJ1biBtb3JlIHNsb3dseSkuCisJCQkgKi8KKworCQkJeXlfbmV4dF9zdGF0ZSA9IHl5
X3RyeV9OVUxfdHJhbnMoIHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5uZXIpOworCisJCQl5eV9i
cCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOworCisJCQlpZiAoIHl5X25leHRfc3Rh
dGUgKQorCQkJCXsKKwkJCQkvKiBDb25zdW1lIHRoZSBOVUwuICovCisJCQkJeXlfY3AgPSArK3l5
Zy0+eXlfY19idWZfcDsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbmV4dF9zdGF0ZTsKKwkJ
CQlnb3RvIHl5X21hdGNoOworCQkJCX0KKworCQkJZWxzZQorCQkJCXsKKwkJCQl5eV9jcCA9IHl5
Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55
eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKKwkJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOworCQkJCX0K
KwkJCX0KKworCQllbHNlIHN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkg
KQorCQkJeworCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgorCQkJCXsKKwkJCQl5eWctPnl5
X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDA7CisKKwkJCQlpZiAoIHl5d3JhcCh5eXNjYW5u
ZXIgKSApCisJCQkJCXsKKwkJCQkJLyogTm90ZTogYmVjYXVzZSB3ZSd2ZSB0YWtlbiBjYXJlIGlu
CisJCQkJCSAqIHl5X2dldF9uZXh0X2J1ZmZlcigpIHRvIGhhdmUgc2V0IHVwCisJCQkJCSAqIHl5
dGV4dCwgd2UgY2FuIG5vdyBzZXQgdXAKKwkJCQkJICogeXlfY19idWZfcCBzbyB0aGF0IGlmIHNv
bWUgdG90YWwKKwkJCQkJICogaG9zZXIgKGxpa2UgZmxleCBpdHNlbGYpIHdhbnRzIHRvCisJCQkJ
CSAqIGNhbGwgdGhlIHNjYW5uZXIgYWZ0ZXIgd2UgcmV0dXJuIHRoZQorCQkJCQkgKiBZWV9OVUxM
LCBpdCdsbCBzdGlsbCB3b3JrIC0gYW5vdGhlcgorCQkJCQkgKiBZWV9OVUxMIHdpbGwgZ2V0IHJl
dHVybmVkLgorCQkJCQkgKi8KKwkJCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRy
ICsgWVlfTU9SRV9BREo7CisKKwkJCQkJeXlfYWN0ID0gWVlfU1RBVEVfRU9GKFlZX1NUQVJUKTsK
KwkJCQkJZ290byBkb19hY3Rpb247CisJCQkJCX0KKworCQkJCWVsc2UKKwkJCQkJeworCQkJCQlp
ZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQorCQkJCQkJWVlfTkVXX0ZJ
TEU7CisJCQkJCX0KKwkJCQlicmVhazsKKwkJCQl9CisKKwkJCWNhc2UgRU9CX0FDVF9DT05USU5V
RV9TQ0FOOgorCQkJCXl5Zy0+eXlfY19idWZfcCA9CisJCQkJCXl5Zy0+eXl0ZXh0X3B0ciArIHl5
X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7CisKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0
X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKKworCQkJCXl5X2NwID0geXlnLT55eV9jX2J1
Zl9wOworCQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7CisJCQkJZ290
byB5eV9tYXRjaDsKKworCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6CisJCQkJeXlnLT55eV9j
X2J1Zl9wID0KKwkJCQkmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55
eV9uX2NoYXJzXTsKKworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3Rh
dGUoIHl5c2Nhbm5lciApOworCisJCQkJeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7CisJCQkJeXlf
YnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKKwkJCQlnb3RvIHl5X2ZpbmRfYWN0
aW9uOworCQkJfQorCQlicmVhazsKKwkJfQorCisJZGVmYXVsdDoKKwkJWVlfRkFUQUxfRVJST1Io
CisJCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1ubyBhY3Rpb24gZm91bmQi
ICk7CisJfSAvKiBlbmQgb2YgYWN0aW9uIHN3aXRjaCAqLworCQl9IC8qIGVuZCBvZiBzY2Fubmlu
ZyBvbmUgdG9rZW4gKi8KK30gLyogZW5kIG9mIHl5bGV4ICovCisKKy8qIHl5X2dldF9uZXh0X2J1
ZmZlciAtIHRyeSB0byByZWFkIGluIGEgbmV3IGJ1ZmZlcgorICoKKyAqIFJldHVybnMgYSBjb2Rl
IHJlcHJlc2VudGluZyBhbiBhY3Rpb246CisgKglFT0JfQUNUX0xBU1RfTUFUQ0ggLQorICoJRU9C
X0FDVF9DT05USU5VRV9TQ0FOIC0gY29udGludWUgc2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0
aW9uCisgKglFT0JfQUNUX0VORF9PRl9GSUxFIC0gZW5kIG9mIGZpbGUKKyAqLworc3RhdGljIGlu
dCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisJcmVnaXN0ZXIg
Y2hhciAqZGVzdCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmOworCXJlZ2lz
dGVyIGNoYXIgKnNvdXJjZSA9IHl5Zy0+eXl0ZXh0X3B0cjsKKwlyZWdpc3RlciBpbnQgbnVtYmVy
X3RvX21vdmUsIGk7CisJaW50IHJldF92YWw7CisKKwlpZiAoIHl5Zy0+eXlfY19idWZfcCA+ICZZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSAp
CisJCVlZX0ZBVEFMX0VSUk9SKAorCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9y
LS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKKworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9maWxsX2J1ZmZlciA9PSAwICkKKwkJeyAvKiBEb24ndCB0cnkgdG8gZmlsbCB0aGUg
YnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4gKi8KKwkJaWYgKCB5eWctPnl5X2NfYnVmX3AgLSB5
eWctPnl5dGV4dF9wdHIgLSBZWV9NT1JFX0FESiA9PSAxICkKKwkJCXsKKwkJCS8qIFdlIG1hdGNo
ZWQgYSBzaW5nbGUgY2hhcmFjdGVyLCB0aGUgRU9CLCBzbworCQkJICogdHJlYXQgdGhpcyBhcyBh
IGZpbmFsIEVPRi4KKwkJCSAqLworCQkJcmV0dXJuIEVPQl9BQ1RfRU5EX09GX0ZJTEU7CisJCQl9
CisKKwkJZWxzZQorCQkJeworCQkJLyogV2UgbWF0Y2hlZCBzb21lIHRleHQgcHJpb3IgdG8gdGhl
IEVPQiwgZmlyc3QKKwkJCSAqIHByb2Nlc3MgaXQuCisJCQkgKi8KKwkJCXJldHVybiBFT0JfQUNU
X0xBU1RfTUFUQ0g7CisJCQl9CisJCX0KKworCS8qIFRyeSB0byByZWFkIG1vcmUgZGF0YS4gKi8K
KworCS8qIEZpcnN0IG1vdmUgbGFzdCBjaGFycyB0byBzdGFydCBvZiBidWZmZXIuICovCisJbnVt
YmVyX3RvX21vdmUgPSAoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyKSAt
IDE7CisKKwlmb3IgKCBpID0gMDsgaSA8IG51bWJlcl90b19tb3ZlOyArK2kgKQorCQkqKGRlc3Qr
KykgPSAqKHNvdXJjZSsrKTsKKworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9i
dWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9FT0ZfUEVORElORyApCisJCS8qIGRvbid0IGRvIHRo
ZSByZWFkLCBpdCdzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiBhbiBFT0YsCisJCSAqIGp1c3Qg
Zm9yY2UgYW4gRU9GCisJCSAqLworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hh
cnMgPSB5eWctPnl5X25fY2hhcnMgPSAwOworCisJZWxzZQorCQl7CisJCQl5eV9zaXplX3QgbnVt
X3RvX3JlYWQgPQorCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtIG51
bWJlcl90b19tb3ZlIC0gMTsKKworCQl3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQorCQkJeyAv
KiBOb3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQuICovCisKKwkJCS8qIGp1
c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciAqLworCQkJWVlfQlVGRkVS
X1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUU7CisKKwkJCWludCB5eV9jX2J1Zl9w
X29mZnNldCA9CisJCQkJKGludCkgKHl5Zy0+eXlfY19idWZfcCAtIGItPnl5X2NoX2J1Zik7CisK
KwkJCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCisJCQkJeworCQkJCXl5X3NpemVfdCBuZXdf
c2l6ZSA9IGItPnl5X2J1Zl9zaXplICogMjsKKworCQkJCWlmICggbmV3X3NpemUgPD0gMCApCisJ
CQkJCWItPnl5X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsKKwkJCQllbHNlCisJCQkJ
CWItPnl5X2J1Zl9zaXplICo9IDI7CisKKwkJCQliLT55eV9jaF9idWYgPSAoY2hhciAqKQorCQkJ
CQkvKiBJbmNsdWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJzLiAqLworCQkJCQl5eXJlYWxsb2Mo
KHZvaWQgKikgYi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7CisJ
CQkJfQorCQkJZWxzZQorCQkJCS8qIENhbid0IGdyb3cgaXQsIHdlIGRvbid0IG93biBpdC4gKi8K
KwkJCQliLT55eV9jaF9idWYgPSAwOworCisJCQlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJCQlZ
WV9GQVRBTF9FUlJPUigKKwkJCQkiZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZlciBv
dmVyZmxvdyIgKTsKKworCQkJeXlnLT55eV9jX2J1Zl9wID0gJmItPnl5X2NoX2J1Zlt5eV9jX2J1
Zl9wX29mZnNldF07CisKKwkJCW51bV90b19yZWFkID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9idWZfc2l6ZSAtCisJCQkJCQludW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJCX0KKworCQlp
ZiAoIG51bV90b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSApCisJCQludW1fdG9fcmVhZCA9IFlZ
X1JFQURfQlVGX1NJWkU7CisKKwkJLyogUmVhZCBpbiBtb3JlIGRhdGEuICovCisJCVlZX0lOUFVU
KCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90b19tb3ZlXSks
CisJCQl5eWctPnl5X25fY2hhcnMsIG51bV90b19yZWFkICk7CisKKwkJWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwlpZiAoIHl5
Zy0+eXlfbl9jaGFycyA9PSAwICkKKwkJeworCQlpZiAoIG51bWJlcl90b19tb3ZlID09IFlZX01P
UkVfQURKICkKKwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0VORF9PRl9GSUxFOworCQkJeXly
ZXN0YXJ0KHl5aW4gICx5eXNjYW5uZXIpOworCQkJfQorCisJCWVsc2UKKwkJCXsKKwkJCXJldF92
YWwgPSBFT0JfQUNUX0xBU1RfTUFUQ0g7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2J1ZmZlcl9zdGF0dXMgPQorCQkJCVlZX0JVRkZFUl9FT0ZfUEVORElORzsKKwkJCX0KKwkJfQor
CisJZWxzZQorCQlyZXRfdmFsID0gRU9CX0FDVF9DT05USU5VRV9TQ0FOOworCisJaWYgKCh5eV9z
aXplX3QpICh5eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSkgPiBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplKSB7CisJCS8qIEV4dGVuZCB0aGUgYXJyYXkgYnkgNTAl
LCBwbHVzIHRoZSBudW1iZXIgd2UgcmVhbGx5IG5lZWQuICovCisJCXl5X3NpemVfdCBuZXdfc2l6
ZSA9IHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlICsgKHl5Zy0+eXlfbl9jaGFycyA+
PiAxKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgPSAoY2hhciAqKSB5
eXJlYWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYsbmV3
X3NpemUgLHl5c2Nhbm5lciApOworCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9jaF9idWYgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4g
eXlfZ2V0X25leHRfYnVmZmVyKCkiICk7CisJfQorCisJeXlnLT55eV9uX2NoYXJzICs9IG51bWJl
cl90b19tb3ZlOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlf
bl9jaGFyc10gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NI
QVI7CisKKwl5eWctPnl5dGV4dF9wdHIgPSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9j
aF9idWZbMF07CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyogeXlfZ2V0X3ByZXZpb3VzX3N0
YXRlIC0gZ2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9yZSB0aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQg
Ki8KKworICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlz
Y2FuX3QgeXlzY2FubmVyKQoreworCXJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9z
dGF0ZTsKKwlyZWdpc3RlciBjaGFyICp5eV9jcDsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwl5eV9jdXJyZW50X3N0YXRlID0geXln
LT55eV9zdGFydDsKKworCWZvciAoIHl5X2NwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9B
REo7IHl5X2NwIDwgeXlnLT55eV9jX2J1Zl9wOyArK3l5X2NwICkKKwkJeworCQlyZWdpc3RlciBZ
WV9DSEFSIHl5X2MgPSAoKnl5X2NwID8geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV0gOiAxKTsK
KwkJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQkJeworCQkJeXlnLT55eV9s
YXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJCQl5eWctPnl5X2xhc3Rf
YWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKKwkJCX0KKwkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5
eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQorCQkJeworCQkJ
eXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKKwkJCWlm
ICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NDMgKQorCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25l
ZCBpbnQpIHl5X2NdOworCQkJfQorCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2Vb
eXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJfQorCisJcmV0dXJu
IHl5X2N1cnJlbnRfc3RhdGU7Cit9CisKKy8qIHl5X3RyeV9OVUxfdHJhbnMgLSB0cnkgdG8gbWFr
ZSBhIHRyYW5zaXRpb24gb24gdGhlIE5VTCBjaGFyYWN0ZXIKKyAqCisgKiBzeW5vcHNpcworICoJ
bmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIGN1cnJlbnRfc3RhdGUgKTsKKyAqLworICAg
IHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgICh5eV9zdGF0ZV90eXBlIHl5
X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJcmVnaXN0ZXIgaW50IHl5
X2lzX2phbTsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7IC8qIFRoaXMgdmFyIG1heSBiZSB1bnVzZWQgZGVwZW5kaW5nIHVwb24gb3B0aW9u
cy4gKi8KKwlyZWdpc3RlciBjaGFyICp5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKKworCXJlZ2lz
dGVyIFlZX0NIQVIgeXlfYyA9IDE7CisJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0g
KQorCQl7CisJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJyZW50X3N0YXRl
OworCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKKwkJfQorCXdoaWxlICgg
eXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0
YXRlICkKKwkJeworCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRf
c3RhdGVdOworCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDQzICkKKwkJCXl5X2MgPSB5eV9t
ZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQl9CisJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254
dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CisJeXlf
aXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gNDQyKTsKKworCSh2b2lkKXl5ZzsKKwlyZXR1
cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7Cit9CisKKyNpZm5kZWYgWVlfTk9f
SU5QVVQKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIHN0YXRpYyBpbnQgeXlpbnB1dCAoeXlzY2Fu
X3QgeXlzY2FubmVyKQorI2Vsc2UKKyAgICBzdGF0aWMgaW50IGlucHV0ICAoeXlzY2FuX3QgeXlz
Y2FubmVyKQorI2VuZGlmCisKK3sKKwlpbnQgYzsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwkqeXlnLT55eV9jX2J1Zl9wID0geXln
LT55eV9ob2xkX2NoYXI7CisKKwlpZiAoICp5eWctPnl5X2NfYnVmX3AgPT0gWVlfRU5EX09GX0JV
RkZFUl9DSEFSICkKKwkJeworCQkvKiB5eV9jX2J1Zl9wIG5vdyBwb2ludHMgdG8gdGhlIGNoYXJh
Y3RlciB3ZSB3YW50IHRvIHJldHVybi4KKwkJICogSWYgdGhpcyBvY2N1cnMgKmJlZm9yZSogdGhl
IEVPQiBjaGFyYWN0ZXJzLCB0aGVuIGl0J3MgYQorCQkgKiB2YWxpZCBOVUw7IGlmIG5vdCwgdGhl
biB3ZSd2ZSBoaXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLgorCQkgKi8KKwkJaWYgKCB5eWctPnl5
X2NfYnVmX3AgPCAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9u
X2NoYXJzXSApCisJCQkvKiBUaGlzIHdhcyByZWFsbHkgYSBOVUwuICovCisJCQkqeXlnLT55eV9j
X2J1Zl9wID0gJ1wwJzsKKworCQllbHNlCisJCQl7IC8qIG5lZWQgbW9yZSBpbnB1dCAqLworCQkJ
eXlfc2l6ZV90IG9mZnNldCA9IHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cjsKKwkJ
CSsreXlnLT55eV9jX2J1Zl9wOworCisJCQlzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5
c2Nhbm5lciApICkKKwkJCQl7CisJCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6CisJCQkJCS8q
IFRoaXMgaGFwcGVucyBiZWNhdXNlIHl5X2dfbl9iKCkKKwkJCQkJICogc2VlcyB0aGF0IHdlJ3Zl
IGFjY3VtdWxhdGVkIGEKKwkJCQkJICogdG9rZW4gYW5kIGZsYWdzIHRoYXQgd2UgbmVlZCB0bwor
CQkJCQkgKiB0cnkgbWF0Y2hpbmcgdGhlIHRva2VuIGJlZm9yZQorCQkJCQkgKiBwcm9jZWVkaW5n
LiAgQnV0IGZvciBpbnB1dCgpLAorCQkJCQkgKiB0aGVyZSdzIG5vIG1hdGNoaW5nIHRvIGNvbnNp
ZGVyLgorCQkJCQkgKiBTbyBjb252ZXJ0IHRoZSBFT0JfQUNUX0xBU1RfTUFUQ0gKKwkJCQkJICog
dG8gRU9CX0FDVF9FTkRfT0ZfRklMRS4KKwkJCQkJICovCisKKwkJCQkJLyogUmVzZXQgYnVmZmVy
IHN0YXR1cy4gKi8KKwkJCQkJeXlyZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lcik7CisKKwkJCQkJLypG
QUxMVEhST1VHSCovCisKKwkJCQljYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6CisJCQkJCXsKKwkJ
CQkJaWYgKCB5eXdyYXAoeXlzY2FubmVyICkgKQorCQkJCQkJcmV0dXJuIEVPRjsKKworCQkJCQlp
ZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQorCQkJCQkJWVlfTkVXX0ZJ
TEU7CisjaWZkZWYgX19jcGx1c3BsdXMKKwkJCQkJcmV0dXJuIHl5aW5wdXQoeXlzY2FubmVyKTsK
KyNlbHNlCisJCQkJCXJldHVybiBpbnB1dCh5eXNjYW5uZXIpOworI2VuZGlmCisJCQkJCX0KKwor
CQkJCWNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOgorCQkJCQl5eWctPnl5X2NfYnVmX3AgPSB5
eWctPnl5dGV4dF9wdHIgKyBvZmZzZXQ7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQor
CisJYyA9ICoodW5zaWduZWQgY2hhciAqKSB5eWctPnl5X2NfYnVmX3A7CS8qIGNhc3QgZm9yIDgt
Yml0IGNoYXIncyAqLworCSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOwkvKiBwcmVzZXJ2ZSB5eXRl
eHQgKi8KKwl5eWctPnl5X2hvbGRfY2hhciA9ICorK3l5Zy0+eXlfY19idWZfcDsKKworCWlmICgg
YyA9PSAnXG4nICkKKwkJICAgCisgICAgZG97IHl5bGluZW5vKys7CisgICAgICAgIHl5Y29sdW1u
PTA7CisgICAgfXdoaWxlKDApCis7CisKKwlyZXR1cm4gYzsKK30KKyNlbmRpZgkvKiBpZm5kZWYg
WVlfTk9fSU5QVVQgKi8KKworLyoqIEltbWVkaWF0ZWx5IHN3aXRjaCB0byBhIGRpZmZlcmVudCBp
bnB1dCBzdHJlYW0uCisgKiBAcGFyYW0gaW5wdXRfZmlsZSBBIHJlYWRhYmxlIHN0cmVhbS4KKyAq
IEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQG5vdGUgVGhpcyBmdW5j
dGlvbiBkb2VzIG5vdCByZXNldCB0aGUgc3RhcnQgY29uZGl0aW9uIHRvIEBjIElOSVRJQUwgLgor
ICovCisgICAgdm9pZCB5eXJlc3RhcnQgIChGSUxFICogaW5wdXRfZmlsZSAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7CisKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsKKyAgICAgICAgeXll
bnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUgPQorICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNj
YW5uZXIpOworCX0KKworCXl5X2luaXRfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSLGlucHV0X2Zp
bGUgLHl5c2Nhbm5lcik7CisJeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Cit9CisK
Ky8qKiBTd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgYnVmZmVyLgorICogQHBhcmFtIG5ld19i
dWZmZXIgVGhlIG5ldyBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2Fu
bmVyIG9iamVjdC4KKyAqLworICAgIHZvaWQgeXlfc3dpdGNoX3RvX2J1ZmZlciAgKFlZX0JVRkZF
Ul9TVEFURSAgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwkvKiBUT0RP
LiBXZSBzaG91bGQgYmUgYWJsZSB0byByZXBsYWNlIHRoaXMgZW50aXJlIGZ1bmN0aW9uIGJvZHkK
KwkgKiB3aXRoCisJICoJCXl5cG9wX2J1ZmZlcl9zdGF0ZSgpOworCSAqCQl5eXB1c2hfYnVmZmVy
X3N0YXRlKG5ld19idWZmZXIpOworICAgICAqLworCXl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlz
Y2FubmVyKTsKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSID09IG5ld19idWZmZXIgKQorCQlyZXR1
cm47CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJeworCQkvKiBGbHVzaCBvdXQgaW5m
b3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCisJCSp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5
X2hvbGRfY2hhcjsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0geXln
LT55eV9jX2J1Zl9wOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5
eWctPnl5X25fY2hhcnM7CisJCX0KKworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19i
dWZmZXI7CisJeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisKKwkvKiBXZSBkb24n
dCBhY3R1YWxseSBrbm93IHdoZXRoZXIgd2UgZGlkIHRoaXMgc3dpdGNoIGR1cmluZworCSAqIEVP
RiAoeXl3cmFwKCkpIHByb2Nlc3NpbmcsIGJ1dCB0aGUgb25seSB0aW1lIHRoaXMgZmxhZworCSAq
IGlzIGxvb2tlZCBhdCBpcyBhZnRlciB5eXdyYXAoKSBpcyBjYWxsZWQsIHNvIGl0J3Mgc2FmZQor
CSAqIHRvIGdvIGFoZWFkIGFuZCBhbHdheXMgc2V0IGl0LgorCSAqLworCXl5Zy0+eXlfZGlkX2J1
ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKK30KKworc3RhdGljIHZvaWQgeXlfbG9hZF9idWZmZXJf
c3RhdGUgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCXl5Zy0+eXlfbl9jaGFycyA9IFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsKKwl5eWctPnl5dGV4dF9wdHIgPSB5eWct
Pnl5X2NfYnVmX3AgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3M7CisJeXlp
biA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZTsKKwl5eWctPnl5X2hv
bGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7Cit9CisKKy8qKiBBbGxvY2F0ZSBhbmQgaW5pdGlh
bGl6ZSBhbiBpbnB1dCBidWZmZXIgc3RhdGUuCisgKiBAcGFyYW0gZmlsZSBBIHJlYWRhYmxlIHN0
cmVhbS4KKyAqIEBwYXJhbSBzaXplIFRoZSBjaGFyYWN0ZXIgYnVmZmVyIHNpemUgaW4gYnl0ZXMu
IFdoZW4gaW4gZG91YnQsIHVzZSBAYyBZWV9CVUZfU0laRS4KKyAqIEBwYXJhbSB5eXNjYW5uZXIg
VGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHJldHVybiB0aGUgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0
ZS4KKyAqLworICAgIFlZX0JVRkZFUl9TVEFURSB5eV9jcmVhdGVfYnVmZmVyICAoRklMRSAqIGZp
bGUsIGludCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlZWV9CVUZGRVJfU1RBVEUg
YjsKKyAgICAKKwliID0gKFlZX0JVRkZFUl9TVEFURSkgeXlhbGxvYyhzaXplb2YoIHN0cnVjdCB5
eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7CisJaWYgKCAhIGIgKQorCQlZWV9GQVRBTF9F
UlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9jcmVhdGVfYnVmZmVyKCkiICk7CisK
KwliLT55eV9idWZfc2l6ZSA9IHNpemU7CisKKwkvKiB5eV9jaF9idWYgaGFzIHRvIGJlIDIgY2hh
cmFjdGVycyBsb25nZXIgdGhhbiB0aGUgc2l6ZSBnaXZlbiBiZWNhdXNlCisJICogd2UgbmVlZCB0
byBwdXQgaW4gMiBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuCisJICovCisJYi0+eXlfY2hfYnVm
ID0gKGNoYXIgKikgeXlhbGxvYyhiLT55eV9idWZfc2l6ZSArIDIgLHl5c2Nhbm5lciApOworCWlm
ICggISBiLT55eV9jaF9idWYgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1l
bW9yeSBpbiB5eV9jcmVhdGVfYnVmZmVyKCkiICk7CisKKwliLT55eV9pc19vdXJfYnVmZmVyID0g
MTsKKworCXl5X2luaXRfYnVmZmVyKGIsZmlsZSAseXlzY2FubmVyKTsKKworCXJldHVybiBiOwor
fQorCisvKiogRGVzdHJveSB0aGUgYnVmZmVyLgorICogQHBhcmFtIGIgYSBidWZmZXIgY3JlYXRl
ZCB3aXRoIHl5X2NyZWF0ZV9idWZmZXIoKQorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5l
ciBvYmplY3QuCisgKi8KKyAgICB2b2lkIHl5X2RlbGV0ZV9idWZmZXIgKFlZX0JVRkZFUl9TVEFU
RSAgYiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwlpZiAoICEgYiApCisJCXJldHVybjsK
KworCWlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApIC8qIE5vdCBzdXJlIGlmIHdlIHNob3Vs
ZCBwb3AgaGVyZS4gKi8KKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gKFlZX0JVRkZFUl9T
VEFURSkgMDsKKworCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCisJCXl5ZnJlZSgodm9pZCAq
KSBiLT55eV9jaF9idWYgLHl5c2Nhbm5lciApOworCisJeXlmcmVlKCh2b2lkICopIGIgLHl5c2Nh
bm5lciApOworfQorCisvKiBJbml0aWFsaXplcyBvciByZWluaXRpYWxpemVzIGEgYnVmZmVyLgor
ICogVGhpcyBmdW5jdGlvbiBpcyBzb21ldGltZXMgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIG9uIHRo
ZSBzYW1lIGJ1ZmZlciwKKyAqIHN1Y2ggYXMgZHVyaW5nIGEgeXlyZXN0YXJ0KCkgb3IgYXQgRU9G
LgorICovCisgICAgc3RhdGljIHZvaWQgeXlfaW5pdF9idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUg
IGIsIEZJTEUgKiBmaWxlICwgeXlzY2FuX3QgeXlzY2FubmVyKQorCit7CisJaW50IG9lcnJubyA9
IGVycm5vOworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKKworCXl5X2ZsdXNoX2J1ZmZlcihiICx5eXNjYW5uZXIpOworCisJYi0+eXlfaW5w
dXRfZmlsZSA9IGZpbGU7CisJYi0+eXlfZmlsbF9idWZmZXIgPSAxOworCisgICAgLyogSWYgYiBp
cyB0aGUgY3VycmVudCBidWZmZXIsIHRoZW4geXlfaW5pdF9idWZmZXIgd2FzIF9wcm9iYWJseV8K
KyAgICAgKiBjYWxsZWQgZnJvbSB5eXJlc3RhcnQoKSBvciB0aHJvdWdoIHl5X2dldF9uZXh0X2J1
ZmZlci4KKyAgICAgKiBJbiB0aGF0IGNhc2UsIHdlIGRvbid0IHdhbnQgdG8gcmVzZXQgdGhlIGxp
bmVubyBvciBjb2x1bW4uCisgICAgICovCisgICAgaWYgKGIgIT0gWVlfQ1VSUkVOVF9CVUZGRVIp
eworICAgICAgICBiLT55eV9ic19saW5lbm8gPSAxOworICAgICAgICBiLT55eV9ic19jb2x1bW4g
PSAwOworICAgIH0KKworICAgICAgICBiLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7CisgICAgCisJ
ZXJybm8gPSBvZXJybm87Cit9CisKKy8qKiBEaXNjYXJkIGFsbCBidWZmZXJlZCBjaGFyYWN0ZXJz
LiBPbiB0aGUgbmV4dCBzY2FuLCBZWV9JTlBVVCB3aWxsIGJlIGNhbGxlZC4KKyAqIEBwYXJhbSBi
IHRoZSBidWZmZXIgc3RhdGUgdG8gYmUgZmx1c2hlZCwgdXN1YWxseSBAYyBZWV9DVVJSRU5UX0JV
RkZFUi4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCisgICAg
dm9pZCB5eV9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSAgYiAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7CisJaWYgKCAhIGIgKQorCQlyZXR1cm47CisKKwliLT55eV9uX2NoYXJzID0gMDsK
KworCS8qIFdlIGFsd2F5cyBuZWVkIHR3byBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuICBUaGUg
Zmlyc3QgY2F1c2VzCisJICogYSB0cmFuc2l0aW9uIHRvIHRoZSBlbmQtb2YtYnVmZmVyIHN0YXRl
LiAgVGhlIHNlY29uZCBjYXVzZXMKKwkgKiBhIGphbSBpbiB0aGF0IHN0YXRlLgorCSAqLworCWIt
Pnl5X2NoX2J1ZlswXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKwliLT55eV9jaF9idWZbMV0g
PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwliLT55eV9idWZfcG9zID0gJmItPnl5X2NoX2J1
ZlswXTsKKworCWItPnl5X2F0X2JvbCA9IDE7CisJYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JV
RkZFUl9ORVc7CisKKwlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKQorCQl5eV9sb2FkX2J1
ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKK30KKworLyoqIFB1c2hlcyB0aGUgbmV3IHN0YXRlIG9u
dG8gdGhlIHN0YWNrLiBUaGUgbmV3IHN0YXRlIGJlY29tZXMKKyAqICB0aGUgY3VycmVudCBzdGF0
ZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGFsbG9jYXRlIHRoZSBzdGFjaworICogIGlmIG5lY2Vzc2Fy
eS4KKyAqICBAcGFyYW0gbmV3X2J1ZmZlciBUaGUgbmV3IHN0YXRlLgorICogIEBwYXJhbSB5eXNj
YW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHl5cHVzaF9idWZmZXJfc3RhdGUg
KFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwlp
ZiAobmV3X2J1ZmZlciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwl5eWVuc3VyZV9idWZmZXJfc3Rh
Y2soeXlzY2FubmVyKTsKKworCS8qIFRoaXMgYmxvY2sgaXMgY29waWVkIGZyb20geXlfc3dpdGNo
X3RvX2J1ZmZlci4gKi8KKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJeworCQkvKiBGbHVz
aCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCisJCSp5eWctPnl5X2NfYnVmX3Ag
PSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZf
cG9zID0geXlnLT55eV9jX2J1Zl9wOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25f
Y2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CisJCX0KKworCS8qIE9ubHkgcHVzaCBpZiB0b3AgZXhp
c3RzLiBPdGhlcndpc2UsIHJlcGxhY2UgdG9wLiAqLworCWlmIChZWV9DVVJSRU5UX0JVRkZFUikK
KwkJeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wKys7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
ID0gbmV3X2J1ZmZlcjsKKworCS8qIGNvcGllZCBmcm9tIHl5X3N3aXRjaF90b19idWZmZXIuICov
CisJeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisJeXlnLT55eV9kaWRfYnVmZmVy
X3N3aXRjaF9vbl9lb2YgPSAxOworfQorCisvKiogUmVtb3ZlcyBhbmQgZGVsZXRlcyB0aGUgdG9w
IG9mIHRoZSBzdGFjaywgaWYgcHJlc2VudC4KKyAqICBUaGUgbmV4dCBlbGVtZW50IGJlY29tZXMg
dGhlIG5ldyB0b3AuCisgKiAgQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisg
Ki8KK3ZvaWQgeXlwb3BfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCWlm
ICghWVlfQ1VSUkVOVF9CVUZGRVIpCisJCXJldHVybjsKKworCXl5X2RlbGV0ZV9idWZmZXIoWVlf
Q1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lcik7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0g
TlVMTDsKKwlpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID4gMCkKKwkJLS15eWctPnl5X2J1
ZmZlcl9zdGFja190b3A7CisKKwlpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpIHsKKwkJeXlfbG9hZF9i
dWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisJCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25f
ZW9mID0gMTsKKwl9Cit9CisKKy8qIEFsbG9jYXRlcyB0aGUgc3RhY2sgaWYgaXQgZG9lcyBub3Qg
ZXhpc3QuCisgKiAgR3VhcmFudGVlcyBzcGFjZSBmb3IgYXQgbGVhc3Qgb25lIHB1c2guCisgKi8K
K3N0YXRpYyB2b2lkIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyKQor
eworCXl5X3NpemVfdCBudW1fdG9fYWxsb2M7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJaWYgKCF5eWctPnl5X2J1ZmZlcl9zdGFj
aykgeworCisJCS8qIEZpcnN0IGFsbG9jYXRpb24gaXMganVzdCBmb3IgMiBlbGVtZW50cywgc2lu
Y2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGlzCisJCSAqIHNjYW5uZXIgd2lsbCBldmVuIG5lZWQgYSBz
dGFjay4gV2UgdXNlIDIgaW5zdGVhZCBvZiAxIHRvIGF2b2lkIGFuCisJCSAqIGltbWVkaWF0ZSBy
ZWFsbG9jIG9uIHRoZSBuZXh0IGNhbGwuCisgICAgICAgICAqLworCQludW1fdG9fYWxsb2MgPSAx
OworCQl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopeXlh
bGxvYworCQkJCQkJCQkobnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3Rh
dGUqKQorCQkJCQkJCQksIHl5c2Nhbm5lcik7CisJCWlmICggISB5eWctPnl5X2J1ZmZlcl9zdGFj
ayApCisJCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eWVuc3Vy
ZV9idWZmZXJfc3RhY2soKSIgKTsKKwkJCQkJCQkJICAKKwkJbWVtc2V0KHl5Zy0+eXlfYnVmZmVy
X3N0YWNrLCAwLCBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSop
KTsKKwkJCQkKKwkJeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gbnVtX3RvX2FsbG9jOworCQl5
eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPSAwOworCQlyZXR1cm47CisJfQorCisJaWYgKHl5Zy0+
eXlfYnVmZmVyX3N0YWNrX3RvcCA+PSAoeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4KSAtIDEpewor
CisJCS8qIEluY3JlYXNlIHRoZSBidWZmZXIgdG8gcHJlcGFyZSBmb3IgYSBwb3NzaWJsZSBwdXNo
LiAqLworCQlpbnQgZ3Jvd19zaXplID0gOCAvKiBhcmJpdHJhcnkgZ3JvdyBzaXplICovOworCisJ
CW51bV90b19hbGxvYyA9IHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCArIGdyb3dfc2l6ZTsKKwkJ
eXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXl5cmVhbGxv
YworCQkJCQkJCQkoeXlnLT55eV9idWZmZXJfc3RhY2ssCisJCQkJCQkJCW51bV90b19hbGxvYyAq
IHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKKwkJCQkJCQkJLCB5eXNjYW5uZXIpOwor
CQlpZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQg
b2YgZHluYW1pYyBtZW1vcnkgaW4geXllbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7CisKKwkJLyog
emVybyBvbmx5IHRoZSBuZXcgc2xvdHMuKi8KKwkJbWVtc2V0KHl5Zy0+eXlfYnVmZmVyX3N0YWNr
ICsgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4LCAwLCBncm93X3NpemUgKiBzaXplb2Yoc3RydWN0
IHl5X2J1ZmZlcl9zdGF0ZSopKTsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gbnVtX3Rv
X2FsbG9jOworCX0KK30KKworLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2Nh
biBkaXJlY3RseSBmcm9tIGEgdXNlci1zcGVjaWZpZWQgY2hhcmFjdGVyIGJ1ZmZlci4KKyAqIEBw
YXJhbSBiYXNlIHRoZSBjaGFyYWN0ZXIgYnVmZmVyCisgKiBAcGFyYW0gc2l6ZSB0aGUgc2l6ZSBp
biBieXRlcyBvZiB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUg
c2Nhbm5lciBvYmplY3QuCisgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0
YXRlIG9iamVjdC4gCisgKi8KK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J1ZmZlciAgKGNoYXIg
KiBiYXNlLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJWVlfQlVG
RkVSX1NUQVRFIGI7CisgICAgCisJaWYgKCBzaXplIDwgMiB8fAorCSAgICAgYmFzZVtzaXplLTJd
ICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiB8fAorCSAgICAgYmFzZVtzaXplLTFdICE9IFlZX0VO
RF9PRl9CVUZGRVJfQ0hBUiApCisJCS8qIFRoZXkgZm9yZ290IHRvIGxlYXZlIHJvb20gZm9yIHRo
ZSBFT0Incy4gKi8KKwkJcmV0dXJuIDA7CisKKwliID0gKFlZX0JVRkZFUl9TVEFURSkgeXlhbGxv
YyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7CisJaWYgKCAh
IGIgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9zY2Fu
X2J1ZmZlcigpIiApOworCisJYi0+eXlfYnVmX3NpemUgPSBzaXplIC0gMjsJLyogIi0gMiIgdG8g
dGFrZSBjYXJlIG9mIEVPQidzICovCisJYi0+eXlfYnVmX3BvcyA9IGItPnl5X2NoX2J1ZiA9IGJh
c2U7CisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDA7CisJYi0+eXlfaW5wdXRfZmlsZSA9IDA7CisJ
Yi0+eXlfbl9jaGFycyA9IGItPnl5X2J1Zl9zaXplOworCWItPnl5X2lzX2ludGVyYWN0aXZlID0g
MDsKKwliLT55eV9hdF9ib2wgPSAxOworCWItPnl5X2ZpbGxfYnVmZmVyID0gMDsKKwliLT55eV9i
dWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKKworCXl5X3N3aXRjaF90b19idWZmZXIoYiAs
eXlzY2FubmVyICk7CisKKwlyZXR1cm4gYjsKK30KKworLyoqIFNldHVwIHRoZSBpbnB1dCBidWZm
ZXIgc3RhdGUgdG8gc2NhbiBhIHN0cmluZy4gVGhlIG5leHQgY2FsbCB0byB5eWxleCgpIHdpbGwK
KyAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgc3RyLgorICogQHBhcmFtIHl5c3RyIGEgTlVM
LXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHNjYW4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5u
ZXIgb2JqZWN0LgorICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBv
YmplY3QuCisgKiBAbm90ZSBJZiB5b3Ugd2FudCB0byBzY2FuIGJ5dGVzIHRoYXQgbWF5IGNvbnRh
aW4gTlVMIHZhbHVlcywgdGhlbiB1c2UKKyAqICAgICAgIHl5X3NjYW5fYnl0ZXMoKSBpbnN0ZWFk
LgorICovCitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqIHl5
c3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIAorCXJldHVybiB5eV9zY2FuX2J5dGVz
KHl5c3RyLHN0cmxlbih5eXN0cikgLHl5c2Nhbm5lcik7Cit9CisKKy8qKiBTZXR1cCB0aGUgaW5w
dXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gdGhlIGdpdmVuIGJ5dGVzLiBUaGUgbmV4dCBjYWxsIHRv
IHl5bGV4KCkgd2lsbAorICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBieXRlcy4KKyAqIEBw
YXJhbSB5eWJ5dGVzIHRoZSBieXRlIGJ1ZmZlciB0byBzY2FuCisgKiBAcGFyYW0gX3l5Ynl0ZXNf
bGVuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBhIGJ5
dGVzLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAcmV0dXJu
IHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KKyAqLworWVlfQlVGRkVS
X1NUQVRFIHl5X3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCB5eV9zaXplX3Qg
IF95eWJ5dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlZWV9CVUZGRVJfU1RBVEUg
YjsKKwljaGFyICpidWY7CisJeXlfc2l6ZV90IG47CisJeXlfc2l6ZV90IGk7CisgICAgCisJLyog
R2V0IG1lbW9yeSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3IgdHJhaWxpbmcg
RU9CJ3MuICovCisJbiA9IF95eWJ5dGVzX2xlbiArIDI7CisJYnVmID0gKGNoYXIgKikgeXlhbGxv
YyhuICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYnVmICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQg
b2YgZHluYW1pYyBtZW1vcnkgaW4geXlfc2Nhbl9ieXRlcygpIiApOworCisJZm9yICggaSA9IDA7
IGkgPCBfeXlieXRlc19sZW47ICsraSApCisJCWJ1ZltpXSA9IHl5Ynl0ZXNbaV07CisKKwlidWZb
X3l5Ynl0ZXNfbGVuXSA9IGJ1ZltfeXlieXRlc19sZW4rMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NI
QVI7CisKKwliID0geXlfc2Nhbl9idWZmZXIoYnVmLG4gLHl5c2Nhbm5lcik7CisJaWYgKCAhIGIg
KQorCQlZWV9GQVRBTF9FUlJPUiggImJhZCBidWZmZXIgaW4geXlfc2Nhbl9ieXRlcygpIiApOwor
CisJLyogSXQncyBva2F5IHRvIGdyb3cgZXRjLiB0aGlzIGJ1ZmZlciwgYW5kIHdlIHNob3VsZCB0
aHJvdyBpdAorCSAqIGF3YXkgd2hlbiB3ZSdyZSBkb25lLgorCSAqLworCWItPnl5X2lzX291cl9i
dWZmZXIgPSAxOworCisJcmV0dXJuIGI7Cit9CisKKyNpZm5kZWYgWVlfRVhJVF9GQUlMVVJFCisj
ZGVmaW5lIFlZX0VYSVRfRkFJTFVSRSAyCisjZW5kaWYKKworc3RhdGljIHZvaWQgeXlfZmF0YWxf
ZXJyb3IgKHl5Y29uc3QgY2hhciogbXNnICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIAko
dm9pZCkgZnByaW50Ziggc3RkZXJyLCAiJXNcbiIsIG1zZyApOworCWV4aXQoIFlZX0VYSVRfRkFJ
TFVSRSApOworfQorCisvKiBSZWRlZmluZSB5eWxlc3MoKSBzbyBpdCB3b3JrcyBpbiBzZWN0aW9u
IDMgY29kZS4gKi8KKworI3VuZGVmIHl5bGVzcworI2RlZmluZSB5eWxlc3MobikgXAorCWRvIFwK
KwkJeyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAorICAg
ICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAorICAgICAgICBZWV9MRVNTX0xJTkVO
Tyh5eWxlc3NfbWFjcm9fYXJnKTtcCisJCXl5dGV4dFt5eWxlbmddID0geXlnLT55eV9ob2xkX2No
YXI7IFwKKwkJeXlnLT55eV9jX2J1Zl9wID0geXl0ZXh0ICsgeXlsZXNzX21hY3JvX2FyZzsgXAor
CQl5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7IFwKKwkJKnl5Zy0+eXlfY19i
dWZfcCA9ICdcMCc7IFwKKwkJeXlsZW5nID0geXlsZXNzX21hY3JvX2FyZzsgXAorCQl9IFwKKwl3
aGlsZSAoIDAgKQorCisvKiBBY2Nlc3NvciAgbWV0aG9kcyAoZ2V0L3NldCBmdW5jdGlvbnMpIHRv
IHN0cnVjdCBtZW1iZXJzLiAqLworCisvKiogR2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0YSBmb3Ig
dGhpcyBzY2FubmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisg
Ki8KK1lZX0VYVFJBX1RZUEUgeXlnZXRfZXh0cmEgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7Cisg
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwor
ICAgIHJldHVybiB5eWV4dHJhOworfQorCisvKiogR2V0IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVy
LgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK2ludCB5eWdl
dF9saW5lbm8gICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIAorICAgICAgICBpZiAoISBZ
WV9DVVJSRU5UX0JVRkZFUikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVy
biB5eWxpbmVubzsKK30KKworLyoqIEdldCB0aGUgY3VycmVudCBjb2x1bW4gbnVtYmVyLgorICog
QHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK2ludCB5eWdldF9jb2x1
bW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIAorICAgICAgICBpZiAoISBZWV9DVVJS
RU5UX0JVRkZFUikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiB5eWNv
bHVtbjsKK30KKworLyoqIEdldCB0aGUgaW5wdXQgc3RyZWFtLgorICogQHBhcmFtIHl5c2Nhbm5l
ciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK0ZJTEUgKnl5Z2V0X2luICAoeXlzY2FuX3QgeXlz
Y2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlpbjsKK30KKworLyoqIEdldCB0aGUgb3V0cHV0IHN0
cmVhbS4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCitGSUxF
ICp5eWdldF9vdXQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190
ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eW91dDsK
K30KKworLyoqIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50IHRva2VuLgorICogQHBhcmFt
IHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3l5X3NpemVfdCB5eWdldF9sZW5n
ICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlsZW5nOworfQorCisvKiog
R2V0IHRoZSBjdXJyZW50IHRva2VuLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBv
YmplY3QuCisgKi8KKworY2hhciAqeXlnZXRfdGV4dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sK
KyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
CisgICAgcmV0dXJuIHl5dGV4dDsKK30KKworLyoqIFNldCB0aGUgdXNlci1kZWZpbmVkIGRhdGEu
IFRoaXMgZGF0YSBpcyBuZXZlciB0b3VjaGVkIGJ5IHRoZSBzY2FubmVyLgorICogQHBhcmFtIHVz
ZXJfZGVmaW5lZCBUaGUgZGF0YSB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzY2FubmVyLgor
ICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQgeXlzZXRf
ZXh0cmEgKFlZX0VYVFJBX1RZUEUgIHVzZXJfZGVmaW5lZCAsIHl5c2Nhbl90IHl5c2Nhbm5lcikK
K3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7CisgICAgeXlleHRyYSA9IHVzZXJfZGVmaW5lZCA7Cit9CisKKy8qKiBTZXQgdGhlIGN1cnJl
bnQgbGluZSBudW1iZXIuCisgKiBAcGFyYW0gbGluZV9udW1iZXIKKyAqIEBwYXJhbSB5eXNjYW5u
ZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHl5c2V0X2xpbmVubyAoaW50ICBsaW5l
X251bWJlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKyAgICAgICAgLyogbGluZW5vIGlz
IG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8KKyAgICAgICAgaWYgKCEg
WVlfQ1VSUkVOVF9CVUZGRVIgKQorICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggInl5c2V0X2xp
bmVubyBjYWxsZWQgd2l0aCBubyBidWZmZXIiICk7CisgICAgCisgICAgeXlsaW5lbm8gPSBsaW5l
X251bWJlcjsKK30KKworLyoqIFNldCB0aGUgY3VycmVudCBjb2x1bW4uCisgKiBAcGFyYW0gbGlu
ZV9udW1iZXIKKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2
b2lkIHl5c2V0X2NvbHVtbiAoaW50ICBjb2x1bW5fbm8gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7
CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OworCisgICAgICAgIC8qIGNvbHVtbiBpcyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBl
eGlzdHMuICovCisgICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSICkKKyAgICAgICAgICAg
WVlfRkFUQUxfRVJST1IoICJ5eXNldF9jb2x1bW4gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiApOwor
ICAgIAorICAgIHl5Y29sdW1uID0gY29sdW1uX25vOworfQorCisvKiogU2V0IHRoZSBpbnB1dCBz
dHJlYW0uIFRoaXMgZG9lcyBub3QgZGlzY2FyZCB0aGUgY3VycmVudAorICogaW5wdXQgYnVmZmVy
LgorICogQHBhcmFtIGluX3N0ciBBIHJlYWRhYmxlIHN0cmVhbS4KKyAqIEBwYXJhbSB5eXNjYW5u
ZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHNlZSB5eV9zd2l0Y2hfdG9fYnVmZmVyCisgKi8K
K3ZvaWQgeXlzZXRfaW4gKEZJTEUgKiAgaW5fc3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQorewor
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
KyAgICB5eWluID0gaW5fc3RyIDsKK30KKwordm9pZCB5eXNldF9vdXQgKEZJTEUgKiAgb3V0X3N0
ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlvdXQgPSBvdXRfc3RyIDsKK30KKwor
aW50IHl5Z2V0X2RlYnVnICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlf
ZmxleF9kZWJ1ZzsKK30KKwordm9pZCB5eXNldF9kZWJ1ZyAoaW50ICBiZGVidWcgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOworICAgIHl5X2ZsZXhfZGVidWcgPSBiZGVidWcgOworfQorCisvKiBB
Y2Nlc3NvciBtZXRob2RzIGZvciB5eWx2YWwgYW5kIHl5bGxvYyAqLworCitZWVNUWVBFICogeXln
ZXRfbHZhbCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5bHZhbDsKK30K
Kwordm9pZCB5eXNldF9sdmFsIChZWVNUWVBFICogIHl5bHZhbF9wYXJhbSAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7CisgICAgeXlsdmFsID0geXlsdmFsX3BhcmFtOworfQorCitZWUxUWVBFICp5
eWdldF9sbG9jICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlsbG9jOwor
fQorICAgIAordm9pZCB5eXNldF9sbG9jIChZWUxUWVBFICogIHl5bGxvY19wYXJhbSAsIHl5c2Nh
bl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOworfQorICAgIAor
LyogVXNlci12aXNpYmxlIEFQSSAqLworCisvKiB5eWxleF9pbml0IGlzIHNwZWNpYWwgYmVjYXVz
ZSBpdCBjcmVhdGVzIHRoZSBzY2FubmVyIGl0c2VsZiwgc28gaXQgaXMKKyAqIHRoZSBPTkxZIHJl
ZW50cmFudCBmdW5jdGlvbiB0aGF0IGRvZXNuJ3QgdGFrZSB0aGUgc2Nhbm5lciBhcyB0aGUgbGFz
dCBhcmd1bWVudC4KKyAqIFRoYXQncyB3aHkgd2UgZXhwbGljaXRseSBoYW5kbGUgdGhlIGRlY2xh
cmF0aW9uLCBpbnN0ZWFkIG9mIHVzaW5nIG91ciBtYWNyb3MuCisgKi8KKworaW50IHl5bGV4X2lu
aXQoeXlzY2FuX3QqIHB0cl95eV9nbG9iYWxzKQorCit7CisgICAgaWYgKHB0cl95eV9nbG9iYWxz
ID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIDE7Cisg
ICAgfQorCisgICAgKnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSB5eWFsbG9jICggc2l6ZW9m
KCBzdHJ1Y3QgeXlndXRzX3QgKSwgTlVMTCApOworCisgICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9
PSBOVUxMKXsKKyAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgIHJldHVybiAxOworICAg
IH0KKworICAgIC8qIEJ5IHNldHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4geXlfaW5p
dF9nbG9iYWxzLiBMZWF2ZSBhdCAweDAwIGZvciByZWxlYXNlcy4gKi8KKyAgICBtZW1zZXQoKnB0
cl95eV9nbG9iYWxzLDB4MDAsc2l6ZW9mKHN0cnVjdCB5eWd1dHNfdCkpOworCisgICAgcmV0dXJu
IHl5X2luaXRfZ2xvYmFscyAoICpwdHJfeXlfZ2xvYmFscyApOworfQorCisvKiB5eWxleF9pbml0
X2V4dHJhIGhhcyB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGFzIHl5bGV4X2luaXQsIGJ1dCBmb2xs
b3dzIHRoZQorICogY29udmVudGlvbiBvZiB0YWtpbmcgdGhlIHNjYW5uZXIgYXMgdGhlIGxhc3Qg
YXJndW1lbnQuIE5vdGUgaG93ZXZlciwgdGhhdAorICogdGhpcyBpcyBhICpwb2ludGVyKiB0byBh
IHNjYW5uZXIsIGFzIGl0IHdpbGwgYmUgYWxsb2NhdGVkIGJ5IHRoaXMgY2FsbCAoYW5kCisgKiBp
cyB0aGUgcmVhc29uLCB0b28sIHdoeSB0aGlzIGZ1bmN0aW9uIGFsc28gbXVzdCBoYW5kbGUgaXRz
IG93biBkZWNsYXJhdGlvbikuCisgKiBUaGUgdXNlciBkZWZpbmVkIHZhbHVlIGluIHRoZSBmaXJz
dCBhcmd1bWVudCB3aWxsIGJlIGF2YWlsYWJsZSB0byB5eWFsbG9jIGluCisgKiB0aGUgeXlleHRy
YSBmaWVsZC4KKyAqLworCitpbnQgeXlsZXhfaW5pdF9leHRyYShZWV9FWFRSQV9UWVBFIHl5X3Vz
ZXJfZGVmaW5lZCx5eXNjYW5fdCogcHRyX3l5X2dsb2JhbHMgKQorCit7CisgICAgc3RydWN0IHl5
Z3V0c190IGR1bW15X3l5Z3V0czsKKworICAgIHl5c2V0X2V4dHJhICh5eV91c2VyX2RlZmluZWQs
ICZkdW1teV95eWd1dHMpOworCisgICAgaWYgKHB0cl95eV9nbG9iYWxzID09IE5VTEwpeworICAg
ICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCQorICAgICpw
dHJfeXlfZ2xvYmFscyA9ICh5eXNjYW5fdCkgeXlhbGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0
c190ICksICZkdW1teV95eWd1dHMgKTsKKwkKKyAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5V
TEwpeworICAgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQor
ICAgIAorICAgIC8qIEJ5IHNldHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4KKyAgICB5
eV9pbml0X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLworICAgIG1lbXNl
dCgqcHRyX3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7CisgICAgCisg
ICAgeXlzZXRfZXh0cmEgKHl5X3VzZXJfZGVmaW5lZCwgKnB0cl95eV9nbG9iYWxzKTsKKyAgICAK
KyAgICByZXR1cm4geXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7Cit9CisKK3N0
YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxzICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIC8q
IEluaXRpYWxpemF0aW9uIGlzIHRoZSBzYW1lIGFzIGZvciB0aGUgbm9uLXJlZW50cmFudCBzY2Fu
bmVyLgorICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20geXlsZXhfZGVzdHJveSgp
LCBzbyBkb24ndCBhbGxvY2F0ZSBoZXJlLgorICAgICAqLworCisgICAgeXlnLT55eV9idWZmZXJf
c3RhY2sgPSAwOworICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7CisgICAgeXlnLT55
eV9idWZmZXJfc3RhY2tfbWF4ID0gMDsKKyAgICB5eWctPnl5X2NfYnVmX3AgPSAoY2hhciAqKSAw
OworICAgIHl5Zy0+eXlfaW5pdCA9IDA7CisgICAgeXlnLT55eV9zdGFydCA9IDA7CisKKyAgICB5
eWctPnl5X3N0YXJ0X3N0YWNrX3B0ciA9IDA7CisgICAgeXlnLT55eV9zdGFydF9zdGFja19kZXB0
aCA9IDA7CisgICAgeXlnLT55eV9zdGFydF9zdGFjayA9ICBOVUxMOworCisvKiBEZWZpbmVkIGlu
IG1haW4uYyAqLworI2lmZGVmIFlZX1NURElOSVQKKyAgICB5eWluID0gc3RkaW47CisgICAgeXlv
dXQgPSBzdGRvdXQ7CisjZWxzZQorICAgIHl5aW4gPSAoRklMRSAqKSAwOworICAgIHl5b3V0ID0g
KEZJTEUgKikgMDsKKyNlbmRpZgorCisgICAgLyogRm9yIGZ1dHVyZSByZWZlcmVuY2U6IFNldCBl
cnJubyBvbiBlcnJvciwgc2luY2Ugd2UgYXJlIGNhbGxlZCBieQorICAgICAqIHl5bGV4X2luaXQo
KQorICAgICAqLworICAgIHJldHVybiAwOworfQorCisvKiB5eWxleF9kZXN0cm95IGlzIGZvciBi
b3RoIHJlZW50cmFudCBhbmQgbm9uLXJlZW50cmFudCBzY2FubmVycy4gKi8KK2ludCB5eWxleF9k
ZXN0cm95ICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworICAgIC8qIFBvcCB0aGUgYnVmZmVy
IHN0YWNrLCBkZXN0cm95aW5nIGVhY2ggZWxlbWVudC4gKi8KKwl3aGlsZShZWV9DVVJSRU5UX0JV
RkZFUil7CisJCXl5X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lciAp
OworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOworCQl5eXBvcF9idWZmZXJfc3Rh
dGUoeXlzY2FubmVyKTsKKwl9CisKKwkvKiBEZXN0cm95IHRoZSBzdGFjayBpdHNlbGYuICovCisJ
eXlmcmVlKHl5Zy0+eXlfYnVmZmVyX3N0YWNrICx5eXNjYW5uZXIpOworCXl5Zy0+eXlfYnVmZmVy
X3N0YWNrID0gTlVMTDsKKworICAgIC8qIERlc3Ryb3kgdGhlIHN0YXJ0IGNvbmRpdGlvbiBzdGFj
ay4gKi8KKyAgICAgICAgeXlmcmVlKHl5Zy0+eXlfc3RhcnRfc3RhY2sgLHl5c2Nhbm5lciApOwor
ICAgICAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gTlVMTDsKKworICAgIC8qIFJlc2V0IHRoZSBn
bG9iYWxzLiBUaGlzIGlzIGltcG9ydGFudCBpbiBhIG5vbi1yZWVudHJhbnQgc2Nhbm5lciBzbyB0
aGUgbmV4dCB0aW1lCisgICAgICogeXlsZXgoKSBpcyBjYWxsZWQsIGluaXRpYWxpemF0aW9uIHdp
bGwgb2NjdXIuICovCisgICAgeXlfaW5pdF9nbG9iYWxzKCB5eXNjYW5uZXIpOworCisgICAgLyog
RGVzdHJveSB0aGUgbWFpbiBzdHJ1Y3QgKHJlZW50cmFudCBvbmx5KS4gKi8KKyAgICB5eWZyZWUg
KCB5eXNjYW5uZXIgLCB5eXNjYW5uZXIgKTsKKyAgICB5eXNjYW5uZXIgPSBOVUxMOworICAgIHJl
dHVybiAwOworfQorCisvKgorICogSW50ZXJuYWwgdXRpbGl0eSByb3V0aW5lcy4KKyAqLworCisj
aWZuZGVmIHl5dGV4dF9wdHIKK3N0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciogczEs
IHl5Y29uc3QgY2hhciAqIHMyLCBpbnQgbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZWdp
c3RlciBpbnQgaTsKKwlmb3IgKCBpID0gMDsgaSA8IG47ICsraSApCisJCXMxW2ldID0gczJbaV07
Cit9CisjZW5kaWYKKworI2lmZGVmIFlZX05FRURfU1RSTEVOCitzdGF0aWMgaW50IHl5X2ZsZXhf
c3RybGVuICh5eWNvbnN0IGNoYXIgKiBzICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJlZ2lz
dGVyIGludCBuOworCWZvciAoIG4gPSAwOyBzW25dOyArK24gKQorCQk7CisKKwlyZXR1cm4gbjsK
K30KKyNlbmRpZgorCit2b2lkICp5eWFsbG9jICh5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCit7CisJcmV0dXJuICh2b2lkICopIG1hbGxvYyggc2l6ZSApOworfQorCit2b2lk
ICp5eXJlYWxsb2MgICh2b2lkICogcHRyLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCit7CisJLyogVGhlIGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZvbGxvd2luZyBhY2Nv
bW1vZGF0ZXMgYm90aAorCSAqIGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBjaGFyKiBnZW5lcmlj
IHBvaW50ZXJzLCBhbmQgdGhvc2UKKwkgKiB0aGF0IHVzZSB2b2lkKiBnZW5lcmljIHBvaW50ZXJz
LiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVyCisJICogYmVjYXVzZSBib3RoIEFOU0kgQyBhbmQg
QysrIGFsbG93IGNhc3RsZXNzIGFzc2lnbm1lbnQgZnJvbQorCSAqIGFueSBwb2ludGVyIHR5cGUg
dG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1lbnQgY29udmVyc2lvbnMKKwkgKiBhcyB0aG91
Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KKwkgKi8KKwlyZXR1cm4gKHZvaWQgKikgcmVhbGxvYygg
KGNoYXIgKikgcHRyLCBzaXplICk7Cit9CisKK3ZvaWQgeXlmcmVlICh2b2lkICogcHRyICwgeXlz
Y2FuX3QgeXlzY2FubmVyKQoreworCWZyZWUoIChjaGFyICopIHB0ciApOwkvKiBzZWUgeXlyZWFs
bG9jKCkgZm9yIChjaGFyICopIGNhc3QgKi8KK30KKworI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5
eXRhYmxlcyIKKworI2lmIGRlZmluZWQoX19jbGFuZ19fKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9z
dGljIHBvcAorI2VuZGlmCisKK3l5X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCB5eV9z
aXplX3QgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikgeworICAgIHBwOjpUb2tlbiB0b2tl
bjsKKyAgICB5eWdldF9leHRyYSh5eXNjYW5uZXIpLT5wcmVwcm9jZXNzb3IubGV4KCZ0b2tlbik7
CisgICAgeXlfc2l6ZV90IGxlbiA9IHRva2VuLnR5cGUgPT0gcHA6OlRva2VuOjpMQVNUID8gMCA6
IHRva2VuLnRleHQuc2l6ZSgpOworICAgIGlmIChsZW4gPCBtYXhfc2l6ZSkKKyAgICAgICAgbWVt
Y3B5KGJ1ZiwgdG9rZW4udGV4dC5jX3N0cigpLCBsZW4pOworICAgIHl5c2V0X2NvbHVtbih0b2tl
bi5sb2NhdGlvbi5maWxlLHl5c2Nhbm5lcik7CisgICAgeXlzZXRfbGluZW5vKHRva2VuLmxvY2F0
aW9uLmxpbmUseXlzY2FubmVyKTsKKworICAgIGlmIChsZW4gPj0gbWF4X3NpemUpCisgICAgICAg
IFlZX0ZBVEFMX0VSUk9SKCJJbnB1dCBidWZmZXIgb3ZlcmZsb3ciKTsKKyAgICBlbHNlIGlmIChs
ZW4gPiAwKQorICAgICAgICBidWZbbGVuKytdID0gJyAnOworICAgIHJldHVybiBsZW47Cit9CisK
K2ludCBjaGVja190eXBlKHl5c2Nhbl90IHl5c2Nhbm5lcikgeworICAgIHN0cnVjdCB5eWd1dHNf
dCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIHl5c2Nhbm5lcjsKKyAgICAKKyAgICBpbnQgdG9r
ZW4gPSBJREVOVElGSUVSOworICAgIFRTeW1ib2wqIHN5bWJvbCA9IHl5ZXh0cmEtPnN5bWJvbFRh
YmxlLmZpbmQoeXl0ZXh0KTsKKyAgICBpZiAoc3ltYm9sICYmIHN5bWJvbC0+aXNWYXJpYWJsZSgp
KSB7CisgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUq
PihzeW1ib2wpOworICAgICAgICBpZiAodmFyaWFibGUtPmlzVXNlclR5cGUoKSkKKyAgICAgICAg
ICAgIHRva2VuID0gVFlQRV9OQU1FOworICAgIH0KKyAgICB5eWx2YWwtPmxleC5zeW1ib2wgPSBz
eW1ib2w7CisgICAgcmV0dXJuIHRva2VuOworfQorCitpbnQgcmVzZXJ2ZWRfd29yZCh5eXNjYW5f
dCB5eXNjYW5uZXIpIHsKKyAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKSB5eXNjYW5uZXI7CisKKyAgICB5eWV4dHJhLT5lcnJvcigqeXlsbG9jLCAiSWxsZWdhbCB1
c2Ugb2YgcmVzZXJ2ZWQgd29yZCIsIHl5dGV4dCwgIiIpOworICAgIHl5ZXh0cmEtPnJlY292ZXIo
KTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCB5eWVycm9yKFlZTFRZUEUqIGxsb2MsIFRQYXJz
ZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikgeworICAgIGNvbnRleHQtPmVy
cm9yKCpsbG9jLCByZWFzb24sIHl5Z2V0X3RleHQoY29udGV4dC0+c2Nhbm5lcikpOworICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKK30KKworaW50IGludF9jb25zdGFudCh5eXNjYW5fdCB5eXNjYW5u
ZXIpIHsKKyAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSB5eXNj
YW5uZXI7CisKKyAgICBpZiAoIWF0b2lfY2xhbXAoeXl0ZXh0LCAmKHl5bHZhbC0+bGV4LmkpKSkK
KyAgICAgICAgeXlleHRyYS0+d2FybmluZygqeXlsbG9jLCAiSW50ZWdlciBvdmVyZmxvdyIsIHl5
dGV4dCwgIiIpOworICAgIHJldHVybiBJTlRDT05TVEFOVDsKK30KKworaW50IGZsb2F0X2NvbnN0
YW50KHl5c2Nhbl90IHl5c2Nhbm5lcikgeworICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopIHl5c2Nhbm5lcjsKKworICAgIGlmICghYXRvZl9jbGFtcCh5eXRleHQs
ICYoeXlsdmFsLT5sZXguZikpKQorICAgICAgICB5eWV4dHJhLT53YXJuaW5nKCp5eWxsb2MsICJG
bG9hdCBvdmVyZmxvdyIsIHl5dGV4dCwgIiIpOworICAgIHJldHVybiBGTE9BVENPTlNUQU5UOwor
fQorCitpbnQgZ2xzbGFuZ19pbml0aWFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKKyAg
ICB5eXNjYW5fdCBzY2FubmVyID0gTlVMTDsKKyAgICBpZiAoeXlsZXhfaW5pdF9leHRyYShjb250
ZXh0LCZzY2FubmVyKSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBjb250ZXh0LT5zY2FubmVy
ID0gc2Nhbm5lcjsKKyAgICByZXR1cm4gMDsKK30KKworaW50IGdsc2xhbmdfZmluYWxpemUoVFBh
cnNlQ29udGV4dCogY29udGV4dCkgeworICAgIHl5c2Nhbl90IHNjYW5uZXIgPSBjb250ZXh0LT5z
Y2FubmVyOworICAgIGlmIChzY2FubmVyID09IE5VTEwpIHJldHVybiAwOworICAgIAorICAgIGNv
bnRleHQtPnNjYW5uZXIgPSBOVUxMOworICAgIHl5bGV4X2Rlc3Ryb3koc2Nhbm5lcik7CisKKyAg
ICByZXR1cm4gMDsKK30KKworaW50IGdsc2xhbmdfc2NhbihzaXplX3QgY291bnQsIGNvbnN0IGNo
YXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAgICAgICAgICAg
IFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKKyAgICB5eXJlc3RhcnQoTlVMTCxjb250ZXh0LT5z
Y2FubmVyKTsKKyAgICB5eXNldF9jb2x1bW4oMCxjb250ZXh0LT5zY2FubmVyKTsKKyAgICB5eXNl
dF9saW5lbm8oMSxjb250ZXh0LT5zY2FubmVyKTsKKworICAgIC8vIEluaXRpYWxpemUgcHJlcHJv
Y2Vzc29yLgorICAgIGlmICghY29udGV4dC0+cHJlcHJvY2Vzc29yLmluaXQoY291bnQsIHN0cmlu
ZywgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY29udGV4dC0+cHJlcHJvY2Vzc29y
LnNldE1heFRva2VuTGVuZ3RoKFNIX01BWF9UT0tFTl9MRU5HVEgpOworCisgICAgLy8gRGVmaW5l
IGV4dGVuc2lvbiBtYWNyb3MuCisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhh
dmlvciA9IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgZm9yIChURXh0ZW5zaW9u
QmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRCZWhhdmlvci5iZWdpbigpOworICAg
ICAgICAgaXRlciAhPSBleHRCZWhhdmlvci5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIGNvbnRl
eHQtPnByZXByb2Nlc3Nvci5wcmVkZWZpbmVNYWNybyhpdGVyLT5maXJzdC5jX3N0cigpLCAxKTsK
KyAgICB9CisgICAgaWYgKGNvbnRleHQtPmZyYWdtZW50UHJlY2lzaW9uSGlnaCkKKyAgICAgICAg
Y29udGV4dC0+cHJlcHJvY2Vzc29yLnByZWRlZmluZU1hY3JvKCJHTF9GUkFHTUVOVF9QUkVDSVNJ
T05fSElHSCIsIDEpOworCisgICAgcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdf
dGFiLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4wZmFmNjJhNDViMGFmMjk1ZTNkZDFmYTEyMGNmZTU2ZjI5YTY5
N2FmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuY3BwCkBAIC0wLDAgKzEsNDg4NCBAQAorLyogQSBC
aXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuNy4xLiAgKi8KKworLyogQXBwbGUgTm90
ZTogRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIEFwcGxlIGVsZWN0cyB0byBkaXN0cmlidXRl
IHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEJTRCBsaWNlbnNlLiAqLworCisvKiBC
aXNvbiBpbXBsZW1lbnRhdGlvbiBmb3IgWWFjYy1saWtlIHBhcnNlcnMgaW4gQworICAgCisgICAg
ICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDEzIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLgorICAgCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTog
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExp
Y2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAgCisg
ICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlz
IHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAq
LworCisvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3
b3JrIHRoYXQgY29udGFpbnMKKyAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tl
bGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCisgICB1bmRlciB0ZXJtcyBvZiB5b3VyIGNo
b2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGEKKyAgIHBhcnNlciBnZW5l
cmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9mCisg
ICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFsdGVybmF0aXZlbHksIGlmIHlvdSBtb2RpZnkgb3Ig
cmVkaXN0cmlidXRlCisgICB0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91IG1heSAoYXQg
eW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCisgICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2ls
bCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKKyAgIEJpc29uIG91dHB1dCBm
aWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICBMaWNl
bnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KKyAgIAorICAgVGhpcyBzcGVjaWFs
IGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgor
ICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLworCisvKiBDIExBTFIoMSkgcGFyc2VyIHNrZWxl
dG9uIHdyaXR0ZW4gYnkgUmljaGFyZCBTdGFsbG1hbiwgYnkKKyAgIHNpbXBsaWZ5aW5nIHRoZSBv
cmlnaW5hbCBzby1jYWxsZWQgInNlbWFudGljIiBwYXJzZXIuICAqLworCisvKiBBbGwgc3ltYm9s
cyBkZWZpbmVkIGJlbG93IHNob3VsZCBiZWdpbiB3aXRoIHl5IG9yIFlZLCB0byBhdm9pZAorICAg
aW5mcmluZ2luZyBvbiB1c2VyIG5hbWUgc3BhY2UuICBUaGlzIHNob3VsZCBiZSBkb25lIGV2ZW4g
Zm9yIGxvY2FsCisgICB2YXJpYWJsZXMsIGFzIHRoZXkgbWlnaHQgb3RoZXJ3aXNlIGJlIGV4cGFu
ZGVkIGJ5IHVzZXIgbWFjcm9zLgorICAgVGhlcmUgYXJlIHNvbWUgdW5hdm9pZGFibGUgZXhjZXB0
aW9ucyB3aXRoaW4gaW5jbHVkZSBmaWxlcyB0bworICAgZGVmaW5lIG5lY2Vzc2FyeSBsaWJyYXJ5
IHN5bWJvbHM7IHRoZXkgYXJlIG5vdGVkICJJTkZSSU5HRVMgT04KKyAgIFVTRVIgTkFNRSBTUEFD
RSIgYmVsb3cuICAqLworCisvKiBJZGVudGlmeSBCaXNvbiBvdXRwdXQuICAqLworI2RlZmluZSBZ
WUJJU09OIDEKKworLyogQmlzb24gdmVyc2lvbi4gICovCisjZGVmaW5lIFlZQklTT05fVkVSU0lP
TiAiMi43LjEiCisKKy8qIFNrZWxldG9uIG5hbWUuICAqLworI2RlZmluZSBZWVNLRUxFVE9OX05B
TUUgInlhY2MuYyIKKworLyogUHVyZSBwYXJzZXJzLiAgKi8KKyNkZWZpbmUgWVlQVVJFIDEKKwor
LyogUHVzaCBwYXJzZXJzLiAgKi8KKyNkZWZpbmUgWVlQVVNIIDAKKworLyogUHVsbCBwYXJzZXJz
LiAgKi8KKyNkZWZpbmUgWVlQVUxMIDEKKworCisKKworLyogQ29weSB0aGUgZmlyc3QgcGFydCBv
ZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCisKKworLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVGhp
cyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVE
SVQhCisKKy8vIElnbm9yZSBlcnJvcnMgaW4gYXV0by1nZW5lcmF0ZWQgY29kZS4KKyNpZiBkZWZp
bmVkKF9fR05VQ19fKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1m
dW5jdGlvbiIKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtdmFyaWFi
bGUiCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc3dpdGNoLWVudW0iCisjZWxp
ZiBkZWZpbmVkKF9NU0NfVkVSKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQwNjUpCisjcHJh
Z21hIHdhcm5pbmcoZGlzYWJsZTogNDE4OSkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NTA1
KQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEpCisjZW5kaWYKKworI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1BhcnNlQ29udGV4dC5oIgorI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgor
CisjZGVmaW5lIFlZRU5BQkxFX05MUyAwCisKKyNkZWZpbmUgWVlMRVhfUEFSQU0gY29udGV4dC0+
c2Nhbm5lcgorCisKKworIyBpZm5kZWYgWVlfTlVMTAorIyAgaWYgZGVmaW5lZCBfX2NwbHVzcGx1
cyAmJiAyMDExMDNMIDw9IF9fY3BsdXNwbHVzCisjICAgZGVmaW5lIFlZX05VTEwgbnVsbHB0cgor
IyAgZWxzZQorIyAgIGRlZmluZSBZWV9OVUxMIDAKKyMgIGVuZGlmCisjIGVuZGlmCisKKy8qIEVu
YWJsaW5nIHZlcmJvc2UgZXJyb3IgbWVzc2FnZXMuICAqLworI2lmZGVmIFlZRVJST1JfVkVSQk9T
RQorIyB1bmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAxCisj
ZWxzZQorIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDAKKyNlbmRpZgorCisvKiBJbiBhIGZ1dHVy
ZSByZWxlYXNlIG9mIEJpc29uLCB0aGlzIHNlY3Rpb24gd2lsbCBiZSByZXBsYWNlZAorICAgYnkg
I2luY2x1ZGUgImdsc2xhbmdfdGFiLmgiLiAgKi8KKyNpZm5kZWYgWVlfWVlfR0xTTEFOR19UQUJf
SF9JTkNMVURFRAorIyBkZWZpbmUgWVlfWVlfR0xTTEFOR19UQUJfSF9JTkNMVURFRAorLyogRW5h
YmxpbmcgdHJhY2VzLiAgKi8KKyNpZm5kZWYgWVlERUJVRworIyBkZWZpbmUgWVlERUJVRyAwCisj
ZW5kaWYKKyNpZiBZWURFQlVHCitleHRlcm4gaW50IHl5ZGVidWc7CisjZW5kaWYKKy8qICIlY29k
ZSByZXF1aXJlcyIgYmxvY2tzLiAgKi8KKworCisjZGVmaW5lIFlZTFRZUEUgVFNvdXJjZUxvYwor
I2RlZmluZSBZWUxUWVBFX0lTX0RFQ0xBUkVEIDEKKyNkZWZpbmUgU0hfTUFYX1RPS0VOX0xFTkdU
SCAyNTYgIC8vIFdlYkdMIHNwZWMuCisKKworCisKKy8qIFRva2Vucy4gICovCisjaWZuZGVmIFlZ
VE9LRU5UWVBFCisjIGRlZmluZSBZWVRPS0VOVFlQRQorICAgLyogUHV0IHRoZSB0b2tlbnMgaW50
byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdEQiBhbmQgb3RoZXIgZGVidWdnZXJzCisgICAg
ICBrbm93IGFib3V0IHRoZW0uICAqLworICAgZW51bSB5eXRva2VudHlwZSB7CisgICAgIElOVkFS
SUFOVCA9IDI1OCwKKyAgICAgSElHSF9QUkVDSVNJT04gPSAyNTksCisgICAgIE1FRElVTV9QUkVD
SVNJT04gPSAyNjAsCisgICAgIExPV19QUkVDSVNJT04gPSAyNjEsCisgICAgIFBSRUNJU0lPTiA9
IDI2MiwKKyAgICAgQVRUUklCVVRFID0gMjYzLAorICAgICBDT05TVF9RVUFMID0gMjY0LAorICAg
ICBCT09MX1RZUEUgPSAyNjUsCisgICAgIEZMT0FUX1RZUEUgPSAyNjYsCisgICAgIElOVF9UWVBF
ID0gMjY3LAorICAgICBCUkVBSyA9IDI2OCwKKyAgICAgQ09OVElOVUUgPSAyNjksCisgICAgIERP
ID0gMjcwLAorICAgICBFTFNFID0gMjcxLAorICAgICBGT1IgPSAyNzIsCisgICAgIElGID0gMjcz
LAorICAgICBESVNDQVJEID0gMjc0LAorICAgICBSRVRVUk4gPSAyNzUsCisgICAgIEJWRUMyID0g
Mjc2LAorICAgICBCVkVDMyA9IDI3NywKKyAgICAgQlZFQzQgPSAyNzgsCisgICAgIElWRUMyID0g
Mjc5LAorICAgICBJVkVDMyA9IDI4MCwKKyAgICAgSVZFQzQgPSAyODEsCisgICAgIFZFQzIgPSAy
ODIsCisgICAgIFZFQzMgPSAyODMsCisgICAgIFZFQzQgPSAyODQsCisgICAgIE1BVFJJWDIgPSAy
ODUsCisgICAgIE1BVFJJWDMgPSAyODYsCisgICAgIE1BVFJJWDQgPSAyODcsCisgICAgIElOX1FV
QUwgPSAyODgsCisgICAgIE9VVF9RVUFMID0gMjg5LAorICAgICBJTk9VVF9RVUFMID0gMjkwLAor
ICAgICBVTklGT1JNID0gMjkxLAorICAgICBWQVJZSU5HID0gMjkyLAorICAgICBTVFJVQ1QgPSAy
OTMsCisgICAgIFZPSURfVFlQRSA9IDI5NCwKKyAgICAgV0hJTEUgPSAyOTUsCisgICAgIFNBTVBM
RVIyRCA9IDI5NiwKKyAgICAgU0FNUExFUkNVQkUgPSAyOTcsCisgICAgIFNBTVBMRVJfRVhURVJO
QUxfT0VTID0gMjk4LAorICAgICBTQU1QTEVSMkRSRUNUID0gMjk5LAorICAgICBJREVOVElGSUVS
ID0gMzAwLAorICAgICBUWVBFX05BTUUgPSAzMDEsCisgICAgIEZMT0FUQ09OU1RBTlQgPSAzMDIs
CisgICAgIElOVENPTlNUQU5UID0gMzAzLAorICAgICBCT09MQ09OU1RBTlQgPSAzMDQsCisgICAg
IExFRlRfT1AgPSAzMDUsCisgICAgIFJJR0hUX09QID0gMzA2LAorICAgICBJTkNfT1AgPSAzMDcs
CisgICAgIERFQ19PUCA9IDMwOCwKKyAgICAgTEVfT1AgPSAzMDksCisgICAgIEdFX09QID0gMzEw
LAorICAgICBFUV9PUCA9IDMxMSwKKyAgICAgTkVfT1AgPSAzMTIsCisgICAgIEFORF9PUCA9IDMx
MywKKyAgICAgT1JfT1AgPSAzMTQsCisgICAgIFhPUl9PUCA9IDMxNSwKKyAgICAgTVVMX0FTU0lH
TiA9IDMxNiwKKyAgICAgRElWX0FTU0lHTiA9IDMxNywKKyAgICAgQUREX0FTU0lHTiA9IDMxOCwK
KyAgICAgTU9EX0FTU0lHTiA9IDMxOSwKKyAgICAgTEVGVF9BU1NJR04gPSAzMjAsCisgICAgIFJJ
R0hUX0FTU0lHTiA9IDMyMSwKKyAgICAgQU5EX0FTU0lHTiA9IDMyMiwKKyAgICAgWE9SX0FTU0lH
TiA9IDMyMywKKyAgICAgT1JfQVNTSUdOID0gMzI0LAorICAgICBTVUJfQVNTSUdOID0gMzI1LAor
ICAgICBMRUZUX1BBUkVOID0gMzI2LAorICAgICBSSUdIVF9QQVJFTiA9IDMyNywKKyAgICAgTEVG
VF9CUkFDS0VUID0gMzI4LAorICAgICBSSUdIVF9CUkFDS0VUID0gMzI5LAorICAgICBMRUZUX0JS
QUNFID0gMzMwLAorICAgICBSSUdIVF9CUkFDRSA9IDMzMSwKKyAgICAgRE9UID0gMzMyLAorICAg
ICBDT01NQSA9IDMzMywKKyAgICAgQ09MT04gPSAzMzQsCisgICAgIEVRVUFMID0gMzM1LAorICAg
ICBTRU1JQ09MT04gPSAzMzYsCisgICAgIEJBTkcgPSAzMzcsCisgICAgIERBU0ggPSAzMzgsCisg
ICAgIFRJTERFID0gMzM5LAorICAgICBQTFVTID0gMzQwLAorICAgICBTVEFSID0gMzQxLAorICAg
ICBTTEFTSCA9IDM0MiwKKyAgICAgUEVSQ0VOVCA9IDM0MywKKyAgICAgTEVGVF9BTkdMRSA9IDM0
NCwKKyAgICAgUklHSFRfQU5HTEUgPSAzNDUsCisgICAgIFZFUlRJQ0FMX0JBUiA9IDM0NiwKKyAg
ICAgQ0FSRVQgPSAzNDcsCisgICAgIEFNUEVSU0FORCA9IDM0OCwKKyAgICAgUVVFU1RJT04gPSAz
NDkKKyAgIH07CisjZW5kaWYKKworCisjaWYgISBkZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZpbmVk
IFlZU1RZUEVfSVNfREVDTEFSRUQKK3R5cGVkZWYgdW5pb24gWVlTVFlQRQoreworCisKKyAgICBz
dHJ1Y3QgeworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBUU3RyaW5nICpzdHJpbmc7Cisg
ICAgICAgICAgICBmbG9hdCBmOworICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICBib29s
IGI7CisgICAgICAgIH07CisgICAgICAgIFRTeW1ib2wqIHN5bWJvbDsKKyAgICB9IGxleDsKKyAg
ICBzdHJ1Y3QgeworICAgICAgICBUT3BlcmF0b3Igb3A7CisgICAgICAgIHVuaW9uIHsKKyAgICAg
ICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOworICAgICAgICAgICAgVEludGVybU5vZGVQ
YWlyIG5vZGVQYWlyOworICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbnRlcm1UeXBlZE5vZGU7
CisgICAgICAgICAgICBUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGU7CisgICAgICAg
IH07CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFRQdWJsaWNUeXBlIHR5cGU7CisgICAg
ICAgICAgICBUUHJlY2lzaW9uIHByZWNpc2lvbjsKKyAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVh
bGlmaWVyOworICAgICAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlvbjsKKyAgICAgICAgICAgIFRQ
YXJhbWV0ZXIgcGFyYW07CisgICAgICAgICAgICBURmllbGQqIGZpZWxkOworICAgICAgICAgICAg
VEZpZWxkTGlzdCogZmllbGRMaXN0OworICAgICAgICB9OworICAgIH0gaW50ZXJtOworCisKKwor
fSBZWVNUWVBFOworIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKKyMgZGVmaW5lIHl5c3R5
cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KKyMgZGVmaW5l
IFlZU1RZUEVfSVNfREVDTEFSRUQgMQorI2VuZGlmCisKKyNpZiAhIGRlZmluZWQgWVlMVFlQRSAm
JiAhIGRlZmluZWQgWVlMVFlQRV9JU19ERUNMQVJFRAordHlwZWRlZiBzdHJ1Y3QgWVlMVFlQRQor
eworICBpbnQgZmlyc3RfbGluZTsKKyAgaW50IGZpcnN0X2NvbHVtbjsKKyAgaW50IGxhc3RfbGlu
ZTsKKyAgaW50IGxhc3RfY29sdW1uOworfSBZWUxUWVBFOworIyBkZWZpbmUgeXlsdHlwZSBZWUxU
WVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLworIyBkZWZpbmUgWVlMVFlQ
RV9JU19ERUNMQVJFRCAxCisjIGRlZmluZSBZWUxUWVBFX0lTX1RSSVZJQUwgMQorI2VuZGlmCisK
KworI2lmZGVmIFlZUEFSU0VfUEFSQU0KKyNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQg
X19jcGx1c3BsdXMKK2ludCB5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKTsKKyNlbHNlCitp
bnQgeXlwYXJzZSAoKTsKKyNlbmRpZgorI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovCisjaWYg
ZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCitpbnQgeXlwYXJzZSAoVFBh
cnNlQ29udGV4dCogY29udGV4dCk7CisjZWxzZQoraW50IHl5cGFyc2UgKCk7CisjZW5kaWYKKyNl
bmRpZiAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KKworI2VuZGlmIC8qICFZWV9ZWV9HTFNMQU5HX1RB
Ql9IX0lOQ0xVREVEICAqLworCisvKiBDb3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xh
cmF0aW9ucy4gICovCisKKworZXh0ZXJuIGludCB5eWxleChZWVNUWVBFKiB5eWx2YWwsIFlZTFRZ
UEUqIHl5bGxvYywgdm9pZCogeXlzY2FubmVyKTsKK2V4dGVybiB2b2lkIHl5ZXJyb3IoWVlMVFlQ
RSogeXlsbG9jLCBUUGFyc2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pOwor
CisjZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJocywgTikgICAgICAgICAgICAgICAg
ICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgIGlmIChZWUlEKE4pKSB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChDdXJyZW50KS5maXJzdF9maWxlID0gWVlS
SFNMT0MoUmhzLCAxKS5maXJzdF9maWxlOyAgXAorICAgICAgICAoQ3VycmVudCkuZmlyc3RfbGlu
ZSA9IFlZUkhTTE9DKFJocywgMSkuZmlyc3RfbGluZTsgIFwKKyAgICAgICAgKEN1cnJlbnQpLmxh
c3RfZmlsZSA9IFlZUkhTTE9DKFJocywgTikubGFzdF9maWxlOyAgICBcCisgICAgICAgIChDdXJy
ZW50KS5sYXN0X2xpbmUgPSBZWVJIU0xPQyhSaHMsIE4pLmxhc3RfbGluZTsgICAgXAorICAgICAg
fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIChDdXJyZW50KS5maXJzdF9maWxlID0gWVlSSFNMT0MoUmhzLCAwKS5s
YXN0X2ZpbGU7ICAgXAorICAgICAgICAoQ3VycmVudCkuZmlyc3RfbGluZSA9IFlZUkhTTE9DKFJo
cywgMCkubGFzdF9saW5lOyAgIFwKKyAgICAgICAgKEN1cnJlbnQpLmxhc3RfZmlsZSA9IFlZUkhT
TE9DKFJocywgMCkubGFzdF9maWxlOyAgICBcCisgICAgICAgIChDdXJyZW50KS5sYXN0X2xpbmUg
PSBZWVJIU0xPQyhSaHMsIDApLmxhc3RfbGluZTsgICAgXAorICAgICAgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSAoMCkK
KworI2RlZmluZSBWRVJURVhfT05MWShTLCBMKSB7ICBcCisgICAgaWYgKGNvbnRleHQtPnNoYWRl
clR5cGUgIT0gU0hfVkVSVEVYX1NIQURFUikgeyAgXAorICAgICAgICBjb250ZXh0LT5lcnJvcihM
LCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXggc2hhZGVycyBvbmx5ICIsIFMpOyAgXAorICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7ICBcCisgICAgfSAgXAorfQorCisjZGVmaW5lIEZSQUdfT05MWShT
LCBMKSB7ICBcCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgIT0gU0hfRlJBR01FTlRfU0hB
REVSKSB7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIGZyYWdt
ZW50IHNoYWRlcnMgb25seSAiLCBTKTsgIFwKKyAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAg
XAorICAgIH0gIFwKK30KKworCisKKyNpZmRlZiBzaG9ydAorIyB1bmRlZiBzaG9ydAorI2VuZGlm
CisKKyNpZmRlZiBZWVRZUEVfVUlOVDgKK3R5cGVkZWYgWVlUWVBFX1VJTlQ4IHl5dHlwZV91aW50
ODsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgeXl0eXBlX3VpbnQ4OworI2VuZGlmCisK
KyNpZmRlZiBZWVRZUEVfSU5UOAordHlwZWRlZiBZWVRZUEVfSU5UOCB5eXR5cGVfaW50ODsKKyNl
bGlmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8
IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3R5cGVkZWYgc2lnbmVk
IGNoYXIgeXl0eXBlX2ludDg7CisjZWxzZQordHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDg7
CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9VSU5UMTYKK3R5cGVkZWYgWVlUWVBFX1VJTlQxNiB5
eXR5cGVfdWludDE2OworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHl5dHlwZV91
aW50MTY7CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9JTlQxNgordHlwZWRlZiBZWVRZUEVfSU5U
MTYgeXl0eXBlX2ludDE2OworI2Vsc2UKK3R5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQxNjsK
KyNlbmRpZgorCisjaWZuZGVmIFlZU0laRV9UCisjIGlmZGVmIF9fU0laRV9UWVBFX18KKyMgIGRl
ZmluZSBZWVNJWkVfVCBfX1NJWkVfVFlQRV9fCisjIGVsaWYgZGVmaW5lZCBzaXplX3QKKyMgIGRl
ZmluZSBZWVNJWkVfVCBzaXplX3QKKyMgZWxpZiAhIGRlZmluZWQgWVlTSVpFX1QgJiYgKGRlZmlu
ZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBf
X2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorIyAgaW5jbHVkZSA8c3RkZGVmLmg+IC8q
IElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgIGRlZmluZSBZWVNJWkVfVCBzaXpl
X3QKKyMgZWxzZQorIyAgZGVmaW5lIFlZU0laRV9UIHVuc2lnbmVkIGludAorIyBlbmRpZgorI2Vu
ZGlmCisKKyNkZWZpbmUgWVlTSVpFX01BWElNVU0gKChZWVNJWkVfVCkgLTEpCisKKyNpZm5kZWYg
WVlfCisjIGlmIGRlZmluZWQgWVlFTkFCTEVfTkxTICYmIFlZRU5BQkxFX05MUworIyAgaWYgRU5B
QkxFX05MUworIyAgIGluY2x1ZGUgPGxpYmludGwuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFN
RSBTUEFDRSAqLworIyAgIGRlZmluZSBZWV8oTXNnaWQpIGRnZXR0ZXh0ICgiYmlzb24tcnVudGlt
ZSIsIE1zZ2lkKQorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZuZGVmIFlZXworIyAgZGVmaW5lIFlZ
XyhNc2dpZCkgTXNnaWQKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIF9fYXR0cmlidXRlX18K
Ky8qIFRoaXMgZmVhdHVyZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDIuNSBhbmQgbGF0
ZXIuICAqLworIyBpZiAoISBkZWZpbmVkIF9fR05VQ19fIHx8IF9fR05VQ19fIDwgMiBcCisgICAg
ICB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDUpKQorIyAgZGVmaW5lIF9f
YXR0cmlidXRlX18oU3BlYykgLyogZW1wdHkgKi8KKyMgZW5kaWYKKyNlbmRpZgorCisvKiBTdXBw
cmVzcyB1bnVzZWQtdmFyaWFibGUgd2FybmluZ3MgYnkgInVzaW5nIiBFLiAgKi8KKyNpZiAhIGRl
ZmluZWQgbGludCB8fCBkZWZpbmVkIF9fR05VQ19fCisjIGRlZmluZSBZWVVTRShFKSAoKHZvaWQp
IChFKSkKKyNlbHNlCisjIGRlZmluZSBZWVVTRShFKSAvKiBlbXB0eSAqLworI2VuZGlmCisKKwor
LyogSWRlbnRpdHkgZnVuY3Rpb24sIHVzZWQgdG8gc3VwcHJlc3Mgd2FybmluZ3MgYWJvdXQgY29u
c3RhbnQgY29uZGl0aW9ucy4gICovCisjaWZuZGVmIGxpbnQKKyMgZGVmaW5lIFlZSUQoTikgKE4p
CisjZWxzZQorI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBc
CisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRp
YyBpbnQKK1lZSUQgKGludCB5eWkpCisjZWxzZQorc3RhdGljIGludAorWVlJRCAoeXlpKQorICAg
IGludCB5eWk7CisjZW5kaWYKK3sKKyAgcmV0dXJuIHl5aTsKK30KKyNlbmRpZgorCisjaWYgISBk
ZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFCisKKy8qIFRoZSBwYXJzZXIgaW52
b2tlcyBhbGxvY2Egb3IgbWFsbG9jOyBkZWZpbmUgdGhlIG5lY2Vzc2FyeSBzeW1ib2xzLiAgKi8K
KworIyBpZmRlZiBZWVNUQUNLX1VTRV9BTExPQ0EKKyMgIGlmIFlZU1RBQ0tfVVNFX0FMTE9DQQor
IyAgIGlmZGVmIF9fR05VQ19fCisjICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYnVpbHRpbl9h
bGxvY2EKKyMgICBlbGlmIGRlZmluZWQgX19CVUlMVElOX1ZBX0FSR19JTkNSCisjICAgIGluY2x1
ZGUgPGFsbG9jYS5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZWxp
ZiBkZWZpbmVkIF9BSVgKKyMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19hbGxvY2EKKyMgICBl
bGlmIGRlZmluZWQgX01TQ19WRVIKKyMgICAgaW5jbHVkZSA8bWFsbG9jLmg+IC8qIElORlJJTkdF
UyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCisjICAg
ZWxzZQorIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBhbGxvY2EKKyMgICAgaWYgISBkZWZpbmVk
IF9BTExPQ0FfSCAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTICYmIChkZWZpbmVkIF9fU1REQ19f
IHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMg
fHwgZGVmaW5lZCBfTVNDX1ZFUikKKyMgICAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5H
RVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisgICAgICAvKiBVc2UgRVhJVF9TVUNDRVNTIGFzIGEg
d2l0bmVzcyBmb3Igc3RkbGliLmguICAqLworIyAgICAgaWZuZGVmIEVYSVRfU1VDQ0VTUworIyAg
ICAgIGRlZmluZSBFWElUX1NVQ0NFU1MgMAorIyAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgICBl
bmRpZgorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZmRlZiBZWVNUQUNLX0FMTE9DCisgICAvKiBQ
YWNpZnkgR0NDJ3MgYGVtcHR5IGlmLWJvZHknIHdhcm5pbmcuICAqLworIyAgZGVmaW5lIFlZU1RB
Q0tfRlJFRShQdHIpIGRvIHsgLyogZW1wdHkgKi87IH0gd2hpbGUgKFlZSUQgKDApKQorIyAgaWZu
ZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQorICAgIC8qIFRoZSBPUyBtaWdodCBndWFyYW50ZWUg
b25seSBvbmUgZ3VhcmQgcGFnZSBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjaywKKyAgICAgICBh
bmQgYSBwYWdlIHNpemUgY2FuIGJlIGFzIHNtYWxsIGFzIDQwOTYgYnl0ZXMuICBTbyB3ZSBjYW5u
b3Qgc2FmZWx5CisgICAgICAgaW52b2tlIGFsbG9jYSAoTikgaWYgTiBleGNlZWRzIDQwOTYuICBV
c2UgYSBzbGlnaHRseSBzbWFsbGVyIG51bWJlcgorICAgICAgIHRvIGFsbG93IGZvciBhIGZldyBj
b21waWxlci1hbGxvY2F0ZWQgdGVtcG9yYXJ5IHN0YWNrIHNsb3RzLiAgKi8KKyMgICBkZWZpbmUg
WVlTVEFDS19BTExPQ19NQVhJTVVNIDQwMzIgLyogcmVhc29uYWJsZSBjaXJjYSAyMDA2ICovCisj
ICBlbmRpZgorIyBlbHNlCisjICBkZWZpbmUgWVlTVEFDS19BTExPQyBZWU1BTExPQworIyAgZGVm
aW5lIFlZU1RBQ0tfRlJFRSBZWUZSRUUKKyMgIGlmbmRlZiBZWVNUQUNLX0FMTE9DX01BWElNVU0K
KyMgICBkZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVNIFlZU0laRV9NQVhJTVVNCisjICBlbmRp
ZgorIyAgaWYgKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgISBkZWZpbmVkIEVYSVRfU1VDQ0VTUyBc
CisgICAgICAgJiYgISAoKGRlZmluZWQgWVlNQUxMT0MgfHwgZGVmaW5lZCBtYWxsb2MpIFwKKwkg
ICAgICYmIChkZWZpbmVkIFlZRlJFRSB8fCBkZWZpbmVkIGZyZWUpKSkKKyMgICBpbmNsdWRlIDxz
dGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGlmbmRlZiBF
WElUX1NVQ0NFU1MKKyMgICAgZGVmaW5lIEVYSVRfU1VDQ0VTUyAwCisjICAgZW5kaWYKKyMgIGVu
ZGlmCisjICBpZm5kZWYgWVlNQUxMT0MKKyMgICBkZWZpbmUgWVlNQUxMT0MgbWFsbG9jCisjICAg
aWYgISBkZWZpbmVkIG1hbGxvYyAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTICYmIChkZWZpbmVk
IF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19j
cGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3ZvaWQgKm1hbGxvYyAoWVlTSVpFX1QpOyAv
KiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZW5kaWYKKyMgIGVuZGlmCisj
ICBpZm5kZWYgWVlGUkVFCisjICAgZGVmaW5lIFlZRlJFRSBmcmVlCisjICAgaWYgISBkZWZpbmVk
IGZyZWUgJiYgISBkZWZpbmVkIEVYSVRfU1VDQ0VTUyAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBk
ZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRl
ZmluZWQgX01TQ19WRVIpCit2b2lkIGZyZWUgKHZvaWQgKik7IC8qIElORlJJTkdFUyBPTiBVU0VS
IE5BTUUgU1BBQ0UgKi8KKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZiAvKiAh
IGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UgKi8KKworCisjaWYgKCEgZGVm
aW5lZCB5eW92ZXJmbG93IFwKKyAgICAgJiYgKCEgZGVmaW5lZCBfX2NwbHVzcGx1cyBcCisJIHx8
IChkZWZpbmVkIFlZTFRZUEVfSVNfVFJJVklBTCAmJiBZWUxUWVBFX0lTX1RSSVZJQUwgXAorCSAg
ICAgJiYgZGVmaW5lZCBZWVNUWVBFX0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9JU19UUklWSUFMKSkp
CisKKy8qIEEgdHlwZSB0aGF0IGlzIHByb3Blcmx5IGFsaWduZWQgZm9yIGFueSBzdGFjayBtZW1i
ZXIuICAqLwordW5pb24geXlhbGxvYworeworICB5eXR5cGVfaW50MTYgeXlzc19hbGxvYzsKKyAg
WVlTVFlQRSB5eXZzX2FsbG9jOworICBZWUxUWVBFIHl5bHNfYWxsb2M7Cit9OworCisvKiBUaGUg
c2l6ZSBvZiB0aGUgbWF4aW11bSBnYXAgYmV0d2VlbiBvbmUgYWxpZ25lZCBzdGFjayBhbmQgdGhl
IG5leHQuICAqLworIyBkZWZpbmUgWVlTVEFDS19HQVBfTUFYSU1VTSAoc2l6ZW9mICh1bmlvbiB5
eWFsbG9jKSAtIDEpCisKKy8qIFRoZSBzaXplIG9mIGFuIGFycmF5IGxhcmdlIHRvIGVub3VnaCB0
byBob2xkIGFsbCBzdGFja3MsIGVhY2ggd2l0aAorICAgTiBlbGVtZW50cy4gICovCisjIGRlZmlu
ZSBZWVNUQUNLX0JZVEVTKE4pIFwKKyAgICAgKChOKSAqIChzaXplb2YgKHl5dHlwZV9pbnQxNikg
KyBzaXplb2YgKFlZU1RZUEUpICsgc2l6ZW9mIChZWUxUWVBFKSkgXAorICAgICAgKyAyICogWVlT
VEFDS19HQVBfTUFYSU1VTSkKKworIyBkZWZpbmUgWVlDT1BZX05FRURFRCAxCisKKy8qIFJlbG9j
YXRlIFNUQUNLIGZyb20gaXRzIG9sZCBsb2NhdGlvbiB0byB0aGUgbmV3IG9uZS4gIFRoZQorICAg
bG9jYWwgdmFyaWFibGVzIFlZU0laRSBhbmQgWVlTVEFDS1NJWkUgZ2l2ZSB0aGUgb2xkIGFuZCBu
ZXcgbnVtYmVyIG9mCisgICBlbGVtZW50cyBpbiB0aGUgc3RhY2ssIGFuZCBZWVBUUiBnaXZlcyB0
aGUgbmV3IGxvY2F0aW9uIG9mIHRoZQorICAgc3RhY2suICBBZHZhbmNlIFlZUFRSIHRvIGEgcHJv
cGVybHkgYWxpZ25lZCBsb2NhdGlvbiBmb3IgdGhlIG5leHQKKyAgIHN0YWNrLiAgKi8KKyMgZGVm
aW5lIFlZU1RBQ0tfUkVMT0NBVEUoU3RhY2tfYWxsb2MsIFN0YWNrKQkJCQlcCisgICAgZG8JCQkJ
CQkJCQlcCisgICAgICB7CQkJCQkJCQkJXAorCVlZU0laRV9UIHl5bmV3Ynl0ZXM7CQkJCQkJXAor
CVlZQ09QWSAoJnl5cHRyLT5TdGFja19hbGxvYywgU3RhY2ssIHl5c2l6ZSk7CQkJXAorCVN0YWNr
ID0gJnl5cHRyLT5TdGFja19hbGxvYzsJCQkJCVwKKwl5eW5ld2J5dGVzID0geXlzdGFja3NpemUg
KiBzaXplb2YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJTVVNOyBcCisJeXlwdHIgKz0geXlu
ZXdieXRlcyAvIHNpemVvZiAoKnl5cHRyKTsJCQkJXAorICAgICAgfQkJCQkJCQkJCVwKKyAgICB3
aGlsZSAoWVlJRCAoMCkpCisKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBZWUNPUFlfTkVFREVEICYm
IFlZQ09QWV9ORUVERUQKKy8qIENvcHkgQ09VTlQgb2JqZWN0cyBmcm9tIFNSQyB0byBEU1QuICBU
aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkbworICAgbm90IG92ZXJsYXAuICAqLworIyBpZm5k
ZWYgWVlDT1BZCisjICBpZiBkZWZpbmVkIF9fR05VQ19fICYmIDEgPCBfX0dOVUNfXworIyAgIGRl
ZmluZSBZWUNPUFkoRHN0LCBTcmMsIENvdW50KSBcCisgICAgICBfX2J1aWx0aW5fbWVtY3B5IChE
c3QsIFNyYywgKENvdW50KSAqIHNpemVvZiAoKihTcmMpKSkKKyMgIGVsc2UKKyMgICBkZWZpbmUg
WVlDT1BZKERzdCwgU3JjLCBDb3VudCkgICAgICAgICAgICAgIFwKKyAgICAgIGRvICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBZWVNJWkVfVCB5eWk7ICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBmb3IgKHl5aSA9IDA7IHl5aSA8IChDb3Vu
dCk7IHl5aSsrKSAgIFwKKyAgICAgICAgICAgIChEc3QpW3l5aV0gPSAoU3JjKVt5eWldOyAgICAg
ICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgIHdoaWxlIChZWUlEICgwKSkKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYgLyog
IVlZQ09QWV9ORUVERUQgKi8KKworLyogWVlGSU5BTCAtLSBTdGF0ZSBudW1iZXIgb2YgdGhlIHRl
cm1pbmF0aW9uIHN0YXRlLiAgKi8KKyNkZWZpbmUgWVlGSU5BTCAgNzQKKy8qIFlZTEFTVCAtLSBM
YXN0IGluZGV4IGluIFlZVEFCTEUuICAqLworI2RlZmluZSBZWUxBU1QgICAxNDkwCisKKy8qIFlZ
TlRPS0VOUyAtLSBOdW1iZXIgb2YgdGVybWluYWxzLiAgKi8KKyNkZWZpbmUgWVlOVE9LRU5TICA5
NQorLyogWVlOTlRTIC0tIE51bWJlciBvZiBub250ZXJtaW5hbHMuICAqLworI2RlZmluZSBZWU5O
VFMgIDg0CisvKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2YgcnVsZXMuICAqLworI2RlZmluZSBZWU5S
VUxFUyAgMjAyCisvKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2Ygc3RhdGVzLiAgKi8KKyNkZWZpbmUg
WVlOU1RBVEVTICAzMDcKKworLyogWVlUUkFOU0xBVEUoWVlMRVgpIC0tIEJpc29uIHN5bWJvbCBu
dW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCisjZGVmaW5lIFlZVU5ERUZUT0sgIDIK
KyNkZWZpbmUgWVlNQVhVVE9LICAgMzQ5CisKKyNkZWZpbmUgWVlUUkFOU0xBVEUoWVlYKQkJCQkJ
CVwKKyAgKCh1bnNpZ25lZCBpbnQpIChZWVgpIDw9IFlZTUFYVVRPSyA/IHl5dHJhbnNsYXRlW1lZ
WF0gOiBZWVVOREVGVE9LKQorCisvKiBZWVRSQU5TTEFURVtZWUxFWF0gLS0gQmlzb24gc3ltYm9s
IG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVf
dWludDggeXl0cmFuc2xhdGVbXSA9Cit7CisgICAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
CisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwK
KyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAg
IDMsICAgICA0LAorICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwg
ICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsCisgICAgICAxNSwgICAgMTYsICAgIDE3LCAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwKKyAgICAgIDI1LCAg
ICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAg
IDM0LAorICAgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEs
ICAgIDQyLCAgICA0MywgICAgNDQsCisgICAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAg
NDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwKKyAgICAgIDU1LCAgICA1Niwg
ICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDY0LAor
ICAgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcy
LCAgICA3MywgICAgNzQsCisgICAgICA3NSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAg
IDgwLCAgICA4MSwgICAgODIsICAgIDgzLCAgICA4NCwKKyAgICAgIDg1LCAgICA4NiwgICAgODcs
ICAgIDg4LCAgICA4OSwgICAgOTAsICAgIDkxLCAgICA5MiwgICAgOTMsICAgIDk0Cit9OworCisj
aWYgWVlERUJVRworLyogWVlQUkhTW1lZTl0gLS0gSW5kZXggb2YgdGhlIGZpcnN0IFJIUyBzeW1i
b2wgb2YgcnVsZSBudW1iZXIgWVlOIGluCisgICBZWVJIUy4gICovCitzdGF0aWMgY29uc3QgeXl0
eXBlX3VpbnQxNiB5eXByaHNbXSA9Cit7CisgICAgICAgMCwgICAgIDAsICAgICAzLCAgICAgNSwg
ICAgIDcsICAgICA5LCAgICAxMSwgICAgMTMsICAgIDE1LCAgICAxNywKKyAgICAgIDIxLCAgICAy
MywgICAgMjgsICAgIDMwLCAgICAzNCwgICAgMzcsICAgIDQwLCAgICA0MiwgICAgNDQsICAgIDQ2
LAorICAgICAgNTAsICAgIDUzLCAgICA1NiwgICAgNTksICAgIDYxLCAgICA2NCwgICAgNjgsICAg
IDcxLCAgICA3MywgICAgNzUsCisgICAgICA3NywgICAgODAsICAgIDgzLCAgICA4NiwgICAgODgs
ICAgIDkwLCAgICA5MiwgICAgOTQsICAgIDk4LCAgIDEwMiwKKyAgICAgMTA0LCAgIDEwOCwgICAx
MTIsICAgMTE0LCAgIDExNiwgICAxMjAsICAgMTI0LCAgIDEyOCwgICAxMzIsICAgMTM0LAorICAg
ICAxMzgsICAgMTQyLCAgIDE0NCwgICAxNDYsICAgMTQ4LCAgIDE1MCwgICAxNTQsICAgMTU2LCAg
IDE2MCwgICAxNjIsCisgICAgIDE2NiwgICAxNjgsICAgMTc0LCAgIDE3NiwgICAxODAsICAgMTgy
LCAgIDE4NCwgICAxODYsICAgMTg4LCAgIDE5MCwKKyAgICAgMTkyLCAgIDE5NiwgICAxOTgsICAg
MjAxLCAgIDIwNCwgICAyMDksICAgMjEyLCAgIDIxNCwgICAyMTYsICAgMjE5LAorICAgICAyMjMs
ICAgMjI3LCAgIDIzMCwgICAyMzYsICAgMjQwLCAgIDI0MywgICAyNDcsICAgMjUwLCAgIDI1MSwg
ICAyNTMsCisgICAgIDI1NSwgICAyNTcsICAgMjU5LCAgIDI2MSwgICAyNjUsICAgMjcxLCAgIDI3
OCwgICAyODQsICAgMjg2LCAgIDI4OSwKKyAgICAgMjk0LCAgIDMwMCwgICAzMDUsICAgMzA4LCAg
IDMxMCwgICAzMTMsICAgMzE1LCAgIDMxNywgICAzMTksICAgMzIyLAorICAgICAzMjQsICAgMzI2
LCAgIDMyOSwgICAzMzEsICAgMzMzLCAgIDMzNSwgICAzMzcsICAgMzQyLCAgIDM0NCwgICAzNDYs
CisgICAgIDM0OCwgICAzNTAsICAgMzUyLCAgIDM1NCwgICAzNTYsICAgMzU4LCAgIDM2MCwgICAz
NjIsICAgMzY0LCAgIDM2NiwKKyAgICAgMzY4LCAgIDM3MCwgICAzNzIsICAgMzc0LCAgIDM3Niwg
ICAzNzgsICAgMzgwLCAgIDM4MiwgICAzODQsICAgMzg2LAorICAgICAzODcsICAgMzk0LCAgIDM5
NSwgICA0MDEsICAgNDAzLCAgIDQwNiwgICA0MTAsICAgNDEyLCAgIDQxNiwgICA0MTgsCisgICAg
IDQyMywgICA0MjUsICAgNDI3LCAgIDQyOSwgICA0MzEsICAgNDMzLCAgIDQzNSwgICA0MzcsICAg
NDM5LCAgIDQ0MSwKKyAgICAgNDQ0LCAgIDQ0NSwgICA0NDYsICAgNDUyLCAgIDQ1NCwgICA0NTYs
ICAgNDU3LCAgIDQ2MCwgICA0NjEsICAgNDY0LAorICAgICA0NjcsICAgNDcxLCAgIDQ3MywgICA0
NzYsICAgNDc4LCAgIDQ4MSwgICA0ODcsICAgNDkxLCAgIDQ5MywgICA0OTUsCisgICAgIDUwMCwg
ICA1MDEsICAgNTA4LCAgIDUwOSwgICA1MTgsICAgNTE5LCAgIDUyNywgICA1MjksICAgNTMxLCAg
IDUzMywKKyAgICAgNTM0LCAgIDUzNywgICA1NDEsICAgNTQ0LCAgIDU0NywgICA1NTAsICAgNTU0
LCAgIDU1NywgICA1NTksICAgNTYyLAorICAgICA1NjQsICAgNTY2LCAgIDU2NworfTsKKworLyog
WVlSSFMgLS0gQSBgLTEnLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBydWxlcycgUkhTLiAgKi8KK3N0
YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlyaHNbXSA9Cit7CisgICAgIDE3NSwgICAgIDAsICAg
IC0xLCAgICA0NSwgICAgLTEsICAgIDQ2LCAgICAtMSwgICAgNDUsICAgIC0xLCAgICA5NywKKyAg
ICAgIC0xLCAgICA0OCwgICAgLTEsICAgIDQ3LCAgICAtMSwgICAgNDksICAgIC0xLCAgICA3MSwg
ICAxMjQsICAgIDcyLAorICAgICAgLTEsICAgIDk4LCAgICAtMSwgICAgOTksICAgIDczLCAgIDEw
MCwgICAgNzQsICAgIC0xLCAgIDEwMSwgICAgLTEsCisgICAgICA5OSwgICAgNzcsICAgIDk2LCAg
ICAtMSwgICAgOTksICAgIDUyLCAgICAtMSwgICAgOTksICAgIDUzLCAgICAtMSwKKyAgICAgMTI0
LCAgICAtMSwgICAxMDIsICAgIC0xLCAgIDEwMywgICAgLTEsICAgIDk5LCAgICA3NywgICAxMDMs
ICAgIC0xLAorICAgICAxMDUsICAgIDcyLCAgICAtMSwgICAxMDQsICAgIDcyLCAgICAtMSwgICAx
MDYsICAgIDM5LCAgICAtMSwgICAxMDYsCisgICAgICAtMSwgICAxMDYsICAgMTIyLCAgICAtMSwg
ICAxMDUsICAgIDc4LCAgIDEyMiwgICAgLTEsICAgMTA3LCAgICA3MSwKKyAgICAgIC0xLCAgIDE0
MiwgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgOTksICAgIC0xLCAgICA1MiwgICAxMDgsICAgIC0x
LAorICAgICAgNTMsICAgMTA4LCAgICAtMSwgICAxMDksICAgMTA4LCAgICAtMSwgICAgODUsICAg
IC0xLCAgICA4MywgICAgLTEsCisgICAgICA4MiwgICAgLTEsICAgMTA4LCAgICAtMSwgICAxMTAs
ICAgIDg2LCAgIDEwOCwgICAgLTEsICAgMTEwLCAgICA4NywKKyAgICAgMTA4LCAgICAtMSwgICAx
MTAsICAgIC0xLCAgIDExMSwgICAgODUsICAgMTEwLCAgICAtMSwgICAxMTEsICAgIDgzLAorICAg
ICAxMTAsICAgIC0xLCAgIDExMSwgICAgLTEsICAgMTEyLCAgICAtMSwgICAxMTMsICAgIDg5LCAg
IDExMiwgICAgLTEsCisgICAgIDExMywgICAgOTAsICAgMTEyLCAgICAtMSwgICAxMTMsICAgIDU0
LCAgIDExMiwgICAgLTEsICAgMTEzLCAgICA1NSwKKyAgICAgMTEyLCAgICAtMSwgICAxMTMsICAg
IC0xLCAgIDExNCwgICAgNTYsICAgMTEzLCAgICAtMSwgICAxMTQsICAgIDU3LAorICAgICAxMTMs
ICAgIC0xLCAgIDExNCwgICAgLTEsICAgMTE1LCAgICAtMSwgICAxMTYsICAgIC0xLCAgIDExNywg
ICAgLTEsCisgICAgIDExOCwgICAgNTgsICAgMTE3LCAgICAtMSwgICAxMTgsICAgIC0xLCAgIDEx
OSwgICAgNjAsICAgMTE4LCAgICAtMSwKKyAgICAgMTE5LCAgICAtMSwgICAxMjAsICAgIDU5LCAg
IDExOSwgICAgLTEsICAgMTIwLCAgICAtMSwgICAxMjAsICAgIDk0LAorICAgICAxMjQsICAgIDc5
LCAgIDEyMiwgICAgLTEsICAgMTIxLCAgICAtMSwgICAxMDgsICAgMTIzLCAgIDEyMiwgICAgLTEs
CisgICAgICA4MCwgICAgLTEsICAgIDYxLCAgICAtMSwgICAgNjIsICAgIC0xLCAgICA2MywgICAg
LTEsICAgIDcwLCAgICAtMSwKKyAgICAgMTIyLCAgICAtMSwgICAxMjQsICAgIDc4LCAgIDEyMiwg
ICAgLTEsICAgMTIxLCAgICAtMSwgICAxMjcsICAgIDgxLAorICAgICAgLTEsICAgMTM1LCAgICA4
MSwgICAgLTEsICAgICA3LCAgIDE0MCwgICAxNDEsICAgIDgxLCAgICAtMSwgICAxMjgsCisgICAg
ICA3MiwgICAgLTEsICAgMTMwLCAgICAtMSwgICAxMjksICAgIC0xLCAgIDEzMCwgICAxMzIsICAg
IC0xLCAgIDEyOSwKKyAgICAgIDc4LCAgIDEzMiwgICAgLTEsICAgMTM3LCAgICA0NSwgICAgNzEs
ICAgIC0xLCAgIDEzOSwgICAgOTYsICAgIC0xLAorICAgICAxMzksICAgIDk2LCAgICA3MywgICAx
MjUsICAgIDc0LCAgICAtMSwgICAxMzgsICAgMTMzLCAgIDEzMSwgICAgLTEsCisgICAgIDEzMywg
ICAxMzEsICAgIC0xLCAgIDEzOCwgICAxMzMsICAgMTM0LCAgICAtMSwgICAxMzMsICAgMTM0LCAg
ICAtMSwKKyAgICAgIC0xLCAgICAzMywgICAgLTEsICAgIDM0LCAgICAtMSwgICAgMzUsICAgIC0x
LCAgIDEzOSwgICAgLTEsICAgMTM2LAorICAgICAgLTEsICAgMTM1LCAgICA3OCwgICAgOTYsICAg
IC0xLCAgIDEzNSwgICAgNzgsICAgIDk2LCAgICA3MywgICAgNzQsCisgICAgICAtMSwgICAxMzUs
ICAgIDc4LCAgICA5NiwgICAgNzMsICAgMTI1LCAgICA3NCwgICAgLTEsICAgMTM1LCAgICA3OCwK
KyAgICAgIDk2LCAgICA4MCwgICAxNTAsICAgIC0xLCAgIDEzNywgICAgLTEsICAgMTM3LCAgICA5
NiwgICAgLTEsICAgMTM3LAorICAgICAgOTYsICAgIDczLCAgICA3NCwgICAgLTEsICAgMTM3LCAg
ICA5NiwgICAgNzMsICAgMTI1LCAgICA3NCwgICAgLTEsCisgICAgIDEzNywgICAgOTYsICAgIDgw
LCAgIDE1MCwgICAgLTEsICAgICAzLCAgICA0NSwgICAgLTEsICAgMTM5LCAgICAtMSwKKyAgICAg
MTM4LCAgIDEzOSwgICAgLTEsICAgICA5LCAgICAtMSwgICAgIDgsICAgIC0xLCAgICAzNywgICAg
LTEsICAgICAzLAorICAgICAgMzcsICAgIC0xLCAgICAzNiwgICAgLTEsICAgMTQxLCAgICAtMSwg
ICAxNDAsICAgMTQxLCAgICAtMSwgICAgIDQsCisgICAgICAtMSwgICAgIDUsICAgIC0xLCAgICAg
NiwgICAgLTEsICAgMTQyLCAgICAtMSwgICAxNDIsICAgIDczLCAgIDEyNSwKKyAgICAgIDc0LCAg
ICAtMSwgICAgMzksICAgIC0xLCAgICAxMSwgICAgLTEsICAgIDEyLCAgICAtMSwgICAgMTAsICAg
IC0xLAorICAgICAgMjcsICAgIC0xLCAgICAyOCwgICAgLTEsICAgIDI5LCAgICAtMSwgICAgMjEs
ICAgIC0xLCAgICAyMiwgICAgLTEsCisgICAgICAyMywgICAgLTEsICAgIDI0LCAgICAtMSwgICAg
MjUsICAgIC0xLCAgICAyNiwgICAgLTEsICAgIDMwLCAgICAtMSwKKyAgICAgIDMxLCAgICAtMSwg
ICAgMzIsICAgIC0xLCAgICA0MSwgICAgLTEsICAgIDQyLCAgICAtMSwgICAgNDMsICAgIC0xLAor
ICAgICAgNDQsICAgIC0xLCAgIDE0MywgICAgLTEsICAgIDQ2LCAgICAtMSwgICAgLTEsICAgIDM4
LCAgICA5NiwgICAgNzUsCisgICAgIDE0NCwgICAxNDYsICAgIDc2LCAgICAtMSwgICAgLTEsICAg
IDM4LCAgICA3NSwgICAxNDUsICAgMTQ2LCAgICA3NiwKKyAgICAgIC0xLCAgIDE0NywgICAgLTEs
ICAgMTQ2LCAgIDE0NywgICAgLTEsICAgMTM5LCAgIDE0OCwgICAgODEsICAgIC0xLAorICAgICAx
NDksICAgIC0xLCAgIDE0OCwgICAgNzgsICAgMTQ5LCAgICAtMSwgICAgOTYsICAgIC0xLCAgICA5
NiwgICAgNzMsCisgICAgIDEyNSwgICAgNzQsICAgIC0xLCAgIDEyMiwgICAgLTEsICAgMTI2LCAg
ICAtMSwgICAxNTQsICAgIC0xLCAgIDE1MywKKyAgICAgIC0xLCAgIDE1MSwgICAgLTEsICAgMTYz
LCAgICAtMSwgICAxNjQsICAgIC0xLCAgIDE2NywgICAgLTEsICAgMTc0LAorICAgICAgLTEsICAg
IDc1LCAgICA3NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzUsICAgMTU1LCAgIDE2MiwgICAx
NTYsCisgICAgICA3NiwgICAgLTEsICAgMTYxLCAgICAtMSwgICAxNTMsICAgIC0xLCAgICAtMSwg
ICAxNTksICAgMTYxLCAgICAtMSwKKyAgICAgIC0xLCAgIDE2MCwgICAxNTMsICAgIC0xLCAgICA3
NSwgICAgNzYsICAgIC0xLCAgICA3NSwgICAxNjIsICAgIDc2LAorICAgICAgLTEsICAgMTUyLCAg
ICAtMSwgICAxNjIsICAgMTUyLCAgICAtMSwgICAgODEsICAgIC0xLCAgIDEyNCwgICAgODEsCisg
ICAgICAtMSwgICAgMTgsICAgIDcxLCAgIDEyNCwgICAgNzIsICAgMTY1LCAgICAtMSwgICAxNTgs
ICAgIDE2LCAgIDE1OCwKKyAgICAgIC0xLCAgIDE1OCwgICAgLTEsICAgMTI0LCAgICAtMSwgICAx
MzcsICAgIDk2LCAgICA4MCwgICAxNTAsICAgIC0xLAorICAgICAgLTEsICAgIDQwLCAgICA3MSwg
ICAxNjgsICAgMTY2LCAgICA3MiwgICAxNTcsICAgIC0xLCAgICAtMSwgICAgMTUsCisgICAgIDE2
OSwgICAxNTgsICAgIDQwLCAgICA3MSwgICAxMjQsICAgIDcyLCAgICA4MSwgICAgLTEsICAgIC0x
LCAgICAxNywKKyAgICAgIDcxLCAgIDE3MCwgICAxNzEsICAgMTczLCAgICA3MiwgICAxNTcsICAg
IC0xLCAgIDE2MywgICAgLTEsICAgMTUxLAorICAgICAgLTEsICAgMTY2LCAgICAtMSwgICAgLTEs
ICAgMTcyLCAgICA4MSwgICAgLTEsICAgMTcyLCAgICA4MSwgICAxMjQsCisgICAgICAtMSwgICAg
MTQsICAgIDgxLCAgICAtMSwgICAgMTMsICAgIDgxLCAgICAtMSwgICAgMjAsICAgIDgxLCAgICAt
MSwKKyAgICAgIDIwLCAgIDEyNCwgICAgODEsICAgIC0xLCAgICAxOSwgICAgODEsICAgIC0xLCAg
IDE3NiwgICAgLTEsICAgMTc1LAorICAgICAxNzYsICAgIC0xLCAgIDE3NywgICAgLTEsICAgMTI2
LCAgICAtMSwgICAgLTEsICAgMTI3LCAgIDE3OCwgICAxNjEsCisgICAgICAtMQorfTsKKworLyog
WVlSTElORVtZWU5dIC0tIHNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVyIFlZTiB3YXMgZGVm
aW5lZC4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXJsaW5lW10gPQoreworICAg
ICAgIDAsICAgMTgwLCAgIDE4MCwgICAxODEsICAgMTg0LCAgIDIzOSwgICAyNDIsICAgMjQ3LCAg
IDI1MiwgICAyNTcsCisgICAgIDI2MywgICAyNjYsICAgMjY5LCAgIDI3MiwgICAzNjcsICAgMzc3
LCAgIDM5MCwgICAzOTgsICAgNDk4LCAgIDUwMSwKKyAgICAgNTA5LCAgIDUxMiwgICA1MTgsICAg
NTIyLCAgIDUyOSwgICA1MzUsICAgNTQ0LCAgIDU1MiwgICA2MDcsICAgNjE3LAorICAgICA2MjAs
ICAgNjMwLCAgIDY0MCwgICA2NjEsICAgNjYyLCAgIDY2MywgICA2NjgsICAgNjY5LCAgIDY3Nywg
ICA2ODgsCisgICAgIDY4OSwgICA2OTcsICAgNzA4LCAgIDcxMiwgICA3MTMsICAgNzIzLCAgIDcz
MywgICA3NDMsICAgNzU2LCAgIDc1NywKKyAgICAgNzY3LCAgIDc4MCwgICA3ODQsICAgNzg4LCAg
IDc5MiwgICA3OTMsICAgODA2LCAgIDgwNywgICA4MjAsICAgODIxLAorICAgICA4MzQsICAgODM1
LCAgIDg1MiwgICA4NTMsICAgODY2LCAgIDg2NywgICA4NjgsICAgODY5LCAgIDg3MCwgICA4NzQs
CisgICAgIDg3NywgICA4ODgsICAgODk2LCAgIDkyMywgICA5MjgsICAgOTQyLCAgIDk5NywgIDEw
MDAsICAxMDA3LCAgMTAxNSwKKyAgICAxMDM2LCAgMTA1NywgIDEwNjcsICAxMDk1LCAgMTEwMCwg
IDExMTAsICAxMTE1LCAgMTEyNSwgIDExMjgsICAxMTMxLAorICAgIDExMzQsICAxMTQwLCAgMTE0
NywgIDExNTAsICAxMTcyLCAgMTE5MCwgIDEyMTQsICAxMjM3LCAgMTI0MSwgIDEyNTksCisgICAg
MTI2NywgIDEyOTksICAxMzE5LCAgMTM0MCwgIDEzNDksICAxMzcyLCAgMTM3NSwgIDEzODEsICAx
Mzg5LCAgMTM5NywKKyAgICAxNDA1LCAgMTQxNSwgIDE0MjIsICAxNDI1LCAgMTQyOCwgIDE0MzQs
ICAxNDM3LCAgMTQ1MiwgIDE0NTYsICAxNDYwLAorICAgIDE0NjQsICAxNDY4LCAgMTQ3MywgIDE0
NzgsICAxNDgzLCAgMTQ4OCwgIDE0OTMsICAxNDk4LCAgMTUwMywgIDE1MDgsCisgICAgMTUxMywg
IDE1MTgsICAxNTIzLCAgMTUyOCwgIDE1MzIsICAxNTM2LCAgMTU0NCwgIDE1NTIsICAxNTU2LCAg
MTU2OSwKKyAgICAxNTY5LCAgMTU4MywgIDE1ODMsICAxNTkyLCAgMTU5NSwgIDE2MTEsICAxNjQ0
LCAgMTY0OCwgIDE2NTQsICAxNjYxLAorICAgIDE2NzYsICAxNjgwLCAgMTY4NCwgIDE2ODUsICAx
NjkxLCAgMTY5MiwgIDE2OTMsICAxNjk0LCAgMTY5NSwgIDE2OTksCisgICAgMTcwMCwgIDE3MDAs
ICAxNzAwLCAgMTcxMCwgIDE3MTEsICAxNzE1LCAgMTcxNSwgIDE3MTYsICAxNzE2LCAgMTcyMSwK
KyAgICAxNzI0LCAgMTczNCwgIDE3MzcsICAxNzQzLCAgMTc0NCwgIDE3NDgsICAxNzU2LCAgMTc2
MCwgIDE3NzAsICAxNzc1LAorICAgIDE3OTIsICAxNzkyLCAgMTc5NywgIDE3OTcsICAxODA0LCAg
MTgwNCwgIDE4MTIsICAxODE1LCAgMTgyMSwgIDE4MjQsCisgICAgMTgzMCwgIDE4MzQsICAxODQx
LCAgMTg0OCwgIDE4NTUsICAxODYyLCAgMTg3MywgIDE4ODIsICAxODg2LCAgMTg5MywKKyAgICAx
ODk2LCAgMTkwMiwgIDE5MDIKK307CisjZW5kaWYKKworI2lmIFlZREVCVUcgfHwgWVlFUlJPUl9W
RVJCT1NFIHx8IDAKKy8qIFlZVE5BTUVbU1lNQk9MLU5VTV0gLS0gU3RyaW5nIG5hbWUgb2YgdGhl
IHN5bWJvbCBTWU1CT0wtTlVNLgorICAgRmlyc3QsIHRoZSB0ZXJtaW5hbHMsIHRoZW4sIHN0YXJ0
aW5nIGF0IFlZTlRPS0VOUywgbm9udGVybWluYWxzLiAgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpj
b25zdCB5eXRuYW1lW10gPQoreworICAiJGVuZCIsICJlcnJvciIsICIkdW5kZWZpbmVkIiwgIklO
VkFSSUFOVCIsICJISUdIX1BSRUNJU0lPTiIsCisgICJNRURJVU1fUFJFQ0lTSU9OIiwgIkxPV19Q
UkVDSVNJT04iLCAiUFJFQ0lTSU9OIiwgIkFUVFJJQlVURSIsCisgICJDT05TVF9RVUFMIiwgIkJP
T0xfVFlQRSIsICJGTE9BVF9UWVBFIiwgIklOVF9UWVBFIiwgIkJSRUFLIiwgIkNPTlRJTlVFIiwK
KyAgIkRPIiwgIkVMU0UiLCAiRk9SIiwgIklGIiwgIkRJU0NBUkQiLCAiUkVUVVJOIiwgIkJWRUMy
IiwgIkJWRUMzIiwKKyAgIkJWRUM0IiwgIklWRUMyIiwgIklWRUMzIiwgIklWRUM0IiwgIlZFQzIi
LCAiVkVDMyIsICJWRUM0IiwgIk1BVFJJWDIiLAorICAiTUFUUklYMyIsICJNQVRSSVg0IiwgIklO
X1FVQUwiLCAiT1VUX1FVQUwiLCAiSU5PVVRfUVVBTCIsICJVTklGT1JNIiwKKyAgIlZBUllJTkci
LCAiU1RSVUNUIiwgIlZPSURfVFlQRSIsICJXSElMRSIsICJTQU1QTEVSMkQiLCAiU0FNUExFUkNV
QkUiLAorICAiU0FNUExFUl9FWFRFUk5BTF9PRVMiLCAiU0FNUExFUjJEUkVDVCIsICJJREVOVElG
SUVSIiwgIlRZUEVfTkFNRSIsCisgICJGTE9BVENPTlNUQU5UIiwgIklOVENPTlNUQU5UIiwgIkJP
T0xDT05TVEFOVCIsICJMRUZUX09QIiwgIlJJR0hUX09QIiwKKyAgIklOQ19PUCIsICJERUNfT1Ai
LCAiTEVfT1AiLCAiR0VfT1AiLCAiRVFfT1AiLCAiTkVfT1AiLCAiQU5EX09QIiwKKyAgIk9SX09Q
IiwgIlhPUl9PUCIsICJNVUxfQVNTSUdOIiwgIkRJVl9BU1NJR04iLCAiQUREX0FTU0lHTiIsCisg
ICJNT0RfQVNTSUdOIiwgIkxFRlRfQVNTSUdOIiwgIlJJR0hUX0FTU0lHTiIsICJBTkRfQVNTSUdO
IiwgIlhPUl9BU1NJR04iLAorICAiT1JfQVNTSUdOIiwgIlNVQl9BU1NJR04iLCAiTEVGVF9QQVJF
TiIsICJSSUdIVF9QQVJFTiIsICJMRUZUX0JSQUNLRVQiLAorICAiUklHSFRfQlJBQ0tFVCIsICJM
RUZUX0JSQUNFIiwgIlJJR0hUX0JSQUNFIiwgIkRPVCIsICJDT01NQSIsICJDT0xPTiIsCisgICJF
UVVBTCIsICJTRU1JQ09MT04iLCAiQkFORyIsICJEQVNIIiwgIlRJTERFIiwgIlBMVVMiLCAiU1RB
UiIsICJTTEFTSCIsCisgICJQRVJDRU5UIiwgIkxFRlRfQU5HTEUiLCAiUklHSFRfQU5HTEUiLCAi
VkVSVElDQUxfQkFSIiwgIkNBUkVUIiwKKyAgIkFNUEVSU0FORCIsICJRVUVTVElPTiIsICIkYWNj
ZXB0IiwgImlkZW50aWZpZXIiLCAidmFyaWFibGVfaWRlbnRpZmllciIsCisgICJwcmltYXJ5X2V4
cHJlc3Npb24iLCAicG9zdGZpeF9leHByZXNzaW9uIiwgImludGVnZXJfZXhwcmVzc2lvbiIsCisg
ICJmdW5jdGlvbl9jYWxsIiwgImZ1bmN0aW9uX2NhbGxfb3JfbWV0aG9kIiwgImZ1bmN0aW9uX2Nh
bGxfZ2VuZXJpYyIsCisgICJmdW5jdGlvbl9jYWxsX2hlYWRlcl9ub19wYXJhbWV0ZXJzIiwKKyAg
ImZ1bmN0aW9uX2NhbGxfaGVhZGVyX3dpdGhfcGFyYW1ldGVycyIsICJmdW5jdGlvbl9jYWxsX2hl
YWRlciIsCisgICJmdW5jdGlvbl9pZGVudGlmaWVyIiwgInVuYXJ5X2V4cHJlc3Npb24iLCAidW5h
cnlfb3BlcmF0b3IiLAorICAibXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbiIsICJhZGRpdGl2ZV9l
eHByZXNzaW9uIiwgInNoaWZ0X2V4cHJlc3Npb24iLAorICAicmVsYXRpb25hbF9leHByZXNzaW9u
IiwgImVxdWFsaXR5X2V4cHJlc3Npb24iLCAiYW5kX2V4cHJlc3Npb24iLAorICAiZXhjbHVzaXZl
X29yX2V4cHJlc3Npb24iLCAiaW5jbHVzaXZlX29yX2V4cHJlc3Npb24iLAorICAibG9naWNhbF9h
bmRfZXhwcmVzc2lvbiIsICJsb2dpY2FsX3hvcl9leHByZXNzaW9uIiwKKyAgImxvZ2ljYWxfb3Jf
ZXhwcmVzc2lvbiIsICJjb25kaXRpb25hbF9leHByZXNzaW9uIiwKKyAgImFzc2lnbm1lbnRfZXhw
cmVzc2lvbiIsICJhc3NpZ25tZW50X29wZXJhdG9yIiwgImV4cHJlc3Npb24iLAorICAiY29uc3Rh
bnRfZXhwcmVzc2lvbiIsICJkZWNsYXJhdGlvbiIsICJmdW5jdGlvbl9wcm90b3R5cGUiLAorICAi
ZnVuY3Rpb25fZGVjbGFyYXRvciIsICJmdW5jdGlvbl9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIiwK
KyAgImZ1bmN0aW9uX2hlYWRlciIsICJwYXJhbWV0ZXJfZGVjbGFyYXRvciIsICJwYXJhbWV0ZXJf
ZGVjbGFyYXRpb24iLAorICAicGFyYW1ldGVyX3F1YWxpZmllciIsICJwYXJhbWV0ZXJfdHlwZV9z
cGVjaWZpZXIiLAorICAiaW5pdF9kZWNsYXJhdG9yX2xpc3QiLCAic2luZ2xlX2RlY2xhcmF0aW9u
IiwgImZ1bGx5X3NwZWNpZmllZF90eXBlIiwKKyAgInR5cGVfcXVhbGlmaWVyIiwgInR5cGVfc3Bl
Y2lmaWVyIiwgInByZWNpc2lvbl9xdWFsaWZpZXIiLAorICAidHlwZV9zcGVjaWZpZXJfbm9fcHJl
YyIsICJ0eXBlX3NwZWNpZmllcl9ub25hcnJheSIsICJzdHJ1Y3Rfc3BlY2lmaWVyIiwKKyAgIiRA
MSIsICIkQDIiLCAic3RydWN0X2RlY2xhcmF0aW9uX2xpc3QiLCAic3RydWN0X2RlY2xhcmF0aW9u
IiwKKyAgInN0cnVjdF9kZWNsYXJhdG9yX2xpc3QiLCAic3RydWN0X2RlY2xhcmF0b3IiLCAiaW5p
dGlhbGl6ZXIiLAorICAiZGVjbGFyYXRpb25fc3RhdGVtZW50IiwgInN0YXRlbWVudCIsICJzaW1w
bGVfc3RhdGVtZW50IiwKKyAgImNvbXBvdW5kX3N0YXRlbWVudCIsICIkQDMiLCAiJEA0IiwgInN0
YXRlbWVudF9ub19uZXdfc2NvcGUiLAorICAic3RhdGVtZW50X3dpdGhfc2NvcGUiLCAiJEA1Iiwg
IiRANiIsICJjb21wb3VuZF9zdGF0ZW1lbnRfbm9fbmV3X3Njb3BlIiwKKyAgInN0YXRlbWVudF9s
aXN0IiwgImV4cHJlc3Npb25fc3RhdGVtZW50IiwgInNlbGVjdGlvbl9zdGF0ZW1lbnQiLAorICAi
c2VsZWN0aW9uX3Jlc3Rfc3RhdGVtZW50IiwgImNvbmRpdGlvbiIsICJpdGVyYXRpb25fc3RhdGVt
ZW50IiwgIiRANyIsCisgICIkQDgiLCAiJEA5IiwgImZvcl9pbml0X3N0YXRlbWVudCIsICJjb25k
aXRpb25vcHQiLCAiZm9yX3Jlc3Rfc3RhdGVtZW50IiwKKyAgImp1bXBfc3RhdGVtZW50IiwgInRy
YW5zbGF0aW9uX3VuaXQiLCAiZXh0ZXJuYWxfZGVjbGFyYXRpb24iLAorICAiZnVuY3Rpb25fZGVm
aW5pdGlvbiIsICIkQDEwIiwgWVlfTlVMTAorfTsKKyNlbmRpZgorCisjIGlmZGVmIFlZUFJJTlQK
Ky8qIFlZVE9LTlVNW1lZTEVYLU5VTV0gLS0gSW50ZXJuYWwgdG9rZW4gbnVtYmVyIGNvcnJlc3Bv
bmRpbmcgdG8KKyAgIHRva2VuIFlZTEVYLU5VTS4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3Vp
bnQxNiB5eXRva251bVtdID0KK3sKKyAgICAgICAwLCAgIDI1NiwgICAyNTcsICAgMjU4LCAgIDI1
OSwgICAyNjAsICAgMjYxLCAgIDI2MiwgICAyNjMsICAgMjY0LAorICAgICAyNjUsICAgMjY2LCAg
IDI2NywgICAyNjgsICAgMjY5LCAgIDI3MCwgICAyNzEsICAgMjcyLCAgIDI3MywgICAyNzQsCisg
ICAgIDI3NSwgICAyNzYsICAgMjc3LCAgIDI3OCwgICAyNzksICAgMjgwLCAgIDI4MSwgICAyODIs
ICAgMjgzLCAgIDI4NCwKKyAgICAgMjg1LCAgIDI4NiwgICAyODcsICAgMjg4LCAgIDI4OSwgICAy
OTAsICAgMjkxLCAgIDI5MiwgICAyOTMsICAgMjk0LAorICAgICAyOTUsICAgMjk2LCAgIDI5Nywg
ICAyOTgsICAgMjk5LCAgIDMwMCwgICAzMDEsICAgMzAyLCAgIDMwMywgICAzMDQsCisgICAgIDMw
NSwgICAzMDYsICAgMzA3LCAgIDMwOCwgICAzMDksICAgMzEwLCAgIDMxMSwgICAzMTIsICAgMzEz
LCAgIDMxNCwKKyAgICAgMzE1LCAgIDMxNiwgICAzMTcsICAgMzE4LCAgIDMxOSwgICAzMjAsICAg
MzIxLCAgIDMyMiwgICAzMjMsICAgMzI0LAorICAgICAzMjUsICAgMzI2LCAgIDMyNywgICAzMjgs
ICAgMzI5LCAgIDMzMCwgICAzMzEsICAgMzMyLCAgIDMzMywgICAzMzQsCisgICAgIDMzNSwgICAz
MzYsICAgMzM3LCAgIDMzOCwgICAzMzksICAgMzQwLCAgIDM0MSwgICAzNDIsICAgMzQzLCAgIDM0
NCwKKyAgICAgMzQ1LCAgIDM0NiwgICAzNDcsICAgMzQ4LCAgIDM0OQorfTsKKyMgZW5kaWYKKwor
LyogWVlSMVtZWU5dIC0tIFN5bWJvbCBudW1iZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4gZGVy
aXZlcy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjFbXSA9Cit7CisgICAgICAg
MCwgICAgOTUsICAgIDk2LCAgICA5NiwgICAgOTcsICAgIDk4LCAgICA5OCwgICAgOTgsICAgIDk4
LCAgICA5OCwKKyAgICAgIDk5LCAgICA5OSwgICAgOTksICAgIDk5LCAgICA5OSwgICAgOTksICAg
MTAwLCAgIDEwMSwgICAxMDIsICAgMTAyLAorICAgICAxMDMsICAgMTAzLCAgIDEwNCwgICAxMDQs
ICAgMTA1LCAgIDEwNSwgICAxMDYsICAgMTA3LCAgIDEwNywgICAxMDgsCisgICAgIDEwOCwgICAx
MDgsICAgMTA4LCAgIDEwOSwgICAxMDksICAgMTA5LCAgIDExMCwgICAxMTAsICAgMTEwLCAgIDEx
MSwKKyAgICAgMTExLCAgIDExMSwgICAxMTIsICAgMTEzLCAgIDExMywgICAxMTMsICAgMTEzLCAg
IDExMywgICAxMTQsICAgMTE0LAorICAgICAxMTQsICAgMTE1LCAgIDExNiwgICAxMTcsICAgMTE4
LCAgIDExOCwgICAxMTksICAgMTE5LCAgIDEyMCwgICAxMjAsCisgICAgIDEyMSwgICAxMjEsICAg
MTIyLCAgIDEyMiwgICAxMjMsICAgMTIzLCAgIDEyMywgICAxMjMsICAgMTIzLCAgIDEyNCwKKyAg
ICAgMTI0LCAgIDEyNSwgICAxMjYsICAgMTI2LCAgIDEyNiwgICAxMjcsICAgMTI4LCAgIDEyOCwg
ICAxMjksICAgMTI5LAorICAgICAxMzAsICAgMTMxLCAgIDEzMSwgICAxMzIsICAgMTMyLCAgIDEz
MiwgICAxMzIsICAgMTMzLCAgIDEzMywgICAxMzMsCisgICAgIDEzMywgICAxMzQsICAgMTM1LCAg
IDEzNSwgICAxMzUsICAgMTM1LCAgIDEzNSwgICAxMzYsICAgMTM2LCAgIDEzNiwKKyAgICAgMTM2
LCAgIDEzNiwgICAxMzYsICAgMTM3LCAgIDEzNywgICAxMzgsICAgMTM4LCAgIDEzOCwgICAxMzgs
ICAgMTM4LAorICAgICAxMzksICAgMTM5LCAgIDE0MCwgICAxNDAsICAgMTQwLCAgIDE0MSwgICAx
NDEsICAgMTQyLCAgIDE0MiwgICAxNDIsCisgICAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0Miwg
ICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwKKyAgICAgMTQyLCAgIDE0
MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQ0
LAorICAgICAxNDMsICAgMTQ1LCAgIDE0MywgICAxNDYsICAgMTQ2LCAgIDE0NywgICAxNDgsICAg
MTQ4LCAgIDE0OSwgICAxNDksCisgICAgIDE1MCwgICAxNTEsICAgMTUyLCAgIDE1MiwgICAxNTMs
ICAgMTUzLCAgIDE1MywgICAxNTMsICAgMTUzLCAgIDE1NCwKKyAgICAgMTU1LCAgIDE1NiwgICAx
NTQsICAgMTU3LCAgIDE1NywgICAxNTksICAgMTU4LCAgIDE2MCwgICAxNTgsICAgMTYxLAorICAg
ICAxNjEsICAgMTYyLCAgIDE2MiwgICAxNjMsICAgMTYzLCAgIDE2NCwgICAxNjUsICAgMTY1LCAg
IDE2NiwgICAxNjYsCisgICAgIDE2OCwgICAxNjcsICAgMTY5LCAgIDE2NywgICAxNzAsICAgMTY3
LCAgIDE3MSwgICAxNzEsICAgMTcyLCAgIDE3MiwKKyAgICAgMTczLCAgIDE3MywgICAxNzQsICAg
MTc0LCAgIDE3NCwgICAxNzQsICAgMTc0LCAgIDE3NSwgICAxNzUsICAgMTc2LAorICAgICAxNzYs
ICAgMTc4LCAgIDE3NworfTsKKworLyogWVlSMltZWU5dIC0tIE51bWJlciBvZiBzeW1ib2xzIGNv
bXBvc2luZyByaWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLworc3RhdGljIGNvbnN0IHl5
dHlwZV91aW50OCB5eXIyW10gPQoreworICAgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsCisgICAgICAgMSwgICAgIDQs
ICAgICAxLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMywK
KyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAg
MSwgICAgIDEsICAgICAxLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAzLCAgICAgMywgICAgIDEsCisgICAgICAgMywgICAgIDMsICAgICAx
LCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAxLCAgICAgMywKKyAgICAg
ICAzLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAxLCAgICAgMywgICAg
IDEsICAgICAzLAorICAgICAgIDEsICAgICA1LCAgICAgMSwgICAgIDMsICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCisgICAgICAgMywgICAgIDEsICAgICAyLCAgICAg
MiwgICAgIDQsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMywKKyAgICAgICAzLCAg
ICAgMiwgICAgIDUsICAgICAzLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMCwgICAgIDEsICAg
ICAxLAorICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsICAgICA1LCAgICAgNiwgICAgIDUs
ICAgICAxLCAgICAgMiwgICAgIDQsCisgICAgICAgNSwgICAgIDQsICAgICAyLCAgICAgMSwgICAg
IDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMSwKKyAgICAgICAxLCAgICAgMiwg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICA0LCAgICAgMSwgICAgIDEsICAgICAxLAor
ICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDEsCisgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMCwKKyAgICAgICA2LCAgICAgMCwgICAgIDUs
ICAgICAxLCAgICAgMiwgICAgIDMsICAgICAxLCAgICAgMywgICAgIDEsICAgICA0LAorICAgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDIsCisgICAgICAgMCwgICAgIDAsICAgICA1LCAgICAgMSwgICAgIDEsICAgICAwLCAg
ICAgMiwgICAgIDAsICAgICAyLCAgICAgMiwKKyAgICAgICAzLCAgICAgMSwgICAgIDIsICAgICAx
LCAgICAgMiwgICAgIDUsICAgICAzLCAgICAgMSwgICAgIDEsICAgICA0LAorICAgICAgIDAsICAg
ICA2LCAgICAgMCwgICAgIDgsICAgICAwLCAgICAgNywgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDAsCisgICAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAzLCAgICAgMiwg
ICAgIDEsICAgICAyLCAgICAgMSwKKyAgICAgICAxLCAgICAgMCwgICAgIDMKK307CisKKy8qIFlZ
REVGQUNUW1NUQVRFLU5BTUVdIC0tIERlZmF1bHQgcmVkdWN0aW9uIG51bWJlciBpbiBzdGF0ZSBT
VEFURS1OVU0uCisgICBQZXJmb3JtZWQgd2hlbiBZWVRBQkxFIGRvZXNuJ3Qgc3BlY2lmeSBzb21l
dGhpbmcgZWxzZSB0byBkby4gIFplcm8KKyAgIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuIGVycm9y
LiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlkZWZhY3RbXSA9Cit7CisgICAgICAg
MCwgICAgIDAsICAgMTEyLCAgIDExMywgICAxMTQsICAgICAwLCAgIDEwNiwgICAxMDUsICAgMTIw
LCAgIDExOCwKKyAgICAgMTE5LCAgIDEyNCwgICAxMjUsICAgMTI2LCAgIDEyNywgICAxMjgsICAg
MTI5LCAgIDEyMSwgICAxMjIsICAgMTIzLAorICAgICAxMzAsICAgMTMxLCAgIDEzMiwgICAxMDks
ICAgMTA3LCAgICAgMCwgICAxMTcsICAgMTMzLCAgIDEzNCwgICAxMzUsCisgICAgIDEzNiwgICAx
MzgsICAgMjAwLCAgIDIwMSwgICAgIDAsICAgIDc3LCAgICA4NywgICAgIDAsICAgIDkyLCAgICA5
NywKKyAgICAgICAwLCAgIDEwMywgICAgIDAsICAgMTEwLCAgIDExNSwgICAxMzcsICAgICAwLCAg
IDE5NywgICAxOTksICAgMTA4LAorICAgICAxMDIsICAgICAwLCAgICAgMiwgICAgIDMsICAgMTQx
LCAgICAgMCwgICAgNzIsICAgICAwLCAgICA3NSwgICAgODcsCisgICAgICAgMCwgICAgODgsICAg
IDg5LCAgICA5MCwgICAgNzgsICAgICAwLCAgICA4NywgICAgIDAsICAgIDczLCAgICAgMiwKKyAg
ICAgIDk4LCAgIDEwNCwgICAxMTEsICAgICAwLCAgICAgMSwgICAxOTgsICAgICAwLCAgICAgMCwg
ICAxMzksICAgICAwLAorICAgICAyMDIsICAgIDc5LCAgICA4NCwgICAgODYsICAgIDkxLCAgICAg
MCwgICAgOTMsICAgIDgwLCAgICAgMCwgICAgIDAsCisgICAgICAgNCwgICAgIDcsICAgICA2LCAg
ICAgOCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMzUsICAgIDM0LCAgICAzMywKKyAgICAgICA1
LCAgICAxMCwgICAgMjksICAgIDEyLCAgICAxNywgICAgMTgsICAgICAwLCAgICAgMCwgICAgMjMs
ICAgICAwLAorICAgICAgMzYsICAgICAwLCAgICAzOSwgICAgNDIsICAgIDQzLCAgICA0OCwgICAg
NTEsICAgIDUyLCAgICA1MywgICAgNTQsCisgICAgICA1NiwgICAgNTgsICAgIDYwLCAgICA3MSwg
ICAgIDAsICAgIDI3LCAgICA3NCwgICAgIDAsICAgICAwLCAgIDE0MywKKyAgICAgICAwLCAgICAg
MCwgICAgIDAsICAgMTgyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTYw
LAorICAgICAxNjksICAgMTczLCAgICAzNiwgICAgNjIsICAgIDY5LCAgICAgMCwgICAxNTEsICAg
ICAwLCAgIDExNSwgICAxNTQsCisgICAgIDE3MSwgICAxNTMsICAgMTUyLCAgICAgMCwgICAxNTUs
ICAgMTU2LCAgIDE1NywgICAxNTgsICAgIDgxLCAgICA4MywKKyAgICAgIDg1LCAgICAgMCwgICAg
IDAsICAgIDk5LCAgICAgMCwgICAxNTAsICAgMTAxLCAgICAzMCwgICAgMzEsICAgICAwLAorICAg
ICAgMTQsICAgIDE1LCAgICAgMCwgICAgIDAsICAgIDIxLCAgICAyMCwgICAgIDAsICAgIDIyLCAg
ICAyNCwgICAgMjYsCisgICAgICAzMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAxMTYsICAgMTQ4LCAgICAgMCwgICAxNDYsICAgMTQyLAorICAgICAxNDQs
ICAgICAwLCAgIDE5MywgICAxOTIsICAgMTY3LCAgIDE4NCwgICAgIDAsICAgMTk2LCAgIDE5NCwg
ICAgIDAsCisgICAgIDE4MCwgICAxNTksICAgICAwLCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2
OCwgICAgNjQsICAgICAwLCAgICAgMCwKKyAgICAgMTc0LCAgIDE3MCwgICAxNzIsICAgICAwLCAg
ICA5NCwgICAgIDAsICAgIDk2LCAgIDEwMCwgICAgIDksICAgICAwLAorICAgICAgMTYsICAgICAy
LCAgICAgMywgICAgMTMsICAgIDE5LCAgICAyNSwgICAgMzcsICAgIDM4LCAgICA0MSwgICAgNDAs
CisgICAgICA0NiwgICAgNDcsICAgIDQ0LCAgICA0NSwgICAgNDksICAgIDUwLCAgICA1NSwgICAg
NTcsICAgIDU5LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAxNDUsICAgMTQwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTk1LAorICAgICAgIDAsICAgMTYxLCAgICA2
MywgICAgNzAsICAgICAwLCAgICA5NSwgICAgMTEsICAgICAwLCAgICAgMCwgICAxNDcsCisgICAg
ICAgMCwgICAxNjYsICAgMTY4LCAgIDE4NywgICAxODYsICAgMTg5LCAgIDE2NywgICAxNzgsICAg
ICAwLCAgICAgMCwKKyAgICAgICAwLCAgICA4MiwgICAgNjEsICAgMTQ5LCAgICAgMCwgICAxODgs
ICAgICAwLCAgICAgMCwgICAxNzcsICAgMTc1LAorICAgICAgIDAsICAgICAwLCAgIDE2MiwgICAg
IDAsICAgMTkwLCAgICAgMCwgICAxNjcsICAgICAwLCAgIDE2NCwgICAxODEsCisgICAgIDE2Mywg
ICAgIDAsICAgMTkxLCAgIDE4NSwgICAxNzYsICAgMTc5LCAgIDE4MworfTsKKworLyogWVlERUZH
T1RPW05URVJNLU5VTV0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eWRlZmdvdG9b
XSA9Cit7CisgICAgICAtMSwgICAxOTYsICAgMTAwLCAgIDEwMSwgICAxMDIsICAgMjI5LCAgIDEw
MywgICAxMDQsICAgMTA1LCAgIDEwNiwKKyAgICAgMTA3LCAgIDEwOCwgICAxMDksICAgMTQyLCAg
IDExMSwgICAxMTIsICAgMTEzLCAgIDExNCwgICAxMTUsICAgMTE2LAorICAgICAxMTcsICAgMTE4
LCAgIDExOSwgICAxMjAsICAgMTIxLCAgIDEyMiwgICAxNDMsICAgMTQ0LCAgIDIxOCwgICAxNDUs
CisgICAgIDEyNCwgICAxNDYsICAgMTQ3LCAgICAzNCwgICAgMzUsICAgIDM2LCAgICA4MiwgICAg
NjQsICAgIDY1LCAgICA4MywKKyAgICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwg
ICAgNDIsICAgIDQzLCAgIDEyNSwgICAgNDUsICAgMTMwLAorICAgICAgNzcsICAgMTI4LCAgIDEy
OSwgICAxOTcsICAgMTk4LCAgIDE2NiwgICAxNDksICAgMTUwLCAgIDE1MSwgICAxNTIsCisgICAg
IDIxMiwgICAyODAsICAgMjk5LCAgIDI1NCwgICAyNTUsICAgMjU2LCAgIDMwMCwgICAxNTMsICAg
MTU0LCAgIDE1NSwKKyAgICAgMjg5LCAgIDI3OSwgICAxNTYsICAgMjYwLCAgIDIwNCwgICAyNTcs
ICAgMjc1LCAgIDI4NiwgICAyODcsICAgMTU3LAorICAgICAgNDYsICAgIDQ3LCAgICA0OCwgICAg
NTcKK307CisKKy8qIFlZUEFDVFtTVEFURS1OVU1dIC0tIEluZGV4IGluIFlZVEFCTEUgb2YgdGhl
IHBvcnRpb24gZGVzY3JpYmluZworICAgU1RBVEUtTlVNLiAgKi8KKyNkZWZpbmUgWVlQQUNUX05J
TkYgLTI2MQorc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXBhY3RbXSA9Cit7CisgICAgMTMy
NywgICAtMjAsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgMTEzLCAgLTI2MSwgIC0yNjEsICAtMjYx
LCAgLTI2MSwKKyAgICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAt
MjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLAorICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEs
ICAtMjYxLCAgIC0xOSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsCisgICAgLTI2MSwgIC0y
NjEsICAtMjYxLCAgIC02MSwgICAtNDAsICAgLTI4LCAgICA3NSwgICAgLTcsICAtMjYxLCAgICAy
NCwKKyAgICAxMzcwLCAgLTI2MSwgIDE0NDQsICAtMjYxLCAgIC0xMSwgIC0yNjEsICAxMjgzLCAg
LTI2MSwgIC0yNjEsICAtMjYxLAorICAgIC0yNjEsICAxNDQ0LCAgLTI2MSwgIC0yNjEsICAtMjYx
LCAgICAgNiwgIC0yNjEsICAgIDU0LCAgLTI2MSwgICAgODgsCisgICAgICA2MiwgIC0yNjEsICAt
MjYxLCAgLTI2MSwgIC0yNjEsICAxMzcwLCAgICA1OSwgICAgOTEsICAtMjYxLCAgICAzNiwKKyAg
ICAgLTUwLCAgLTI2MSwgIC0yNjEsICAxMDUxLCAgLTI2MSwgIC0yNjEsICAgIDYzLCAgMTM3MCwg
IC0yNjEsICAgMjkzLAorICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgIDkxLCAgMTM3
MCwgICAtMTIsICAtMjYxLCAgIDg1NiwgIDEwNTEsCisgICAgICA3NywgIC0yNjEsICAtMjYxLCAg
LTI2MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwKKyAgICAtMjYx
LCAgLTI2MSwgICAtMTQsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgIDg0LCAgIC00NCwgIDExMTYs
ICAgIDk1LAorICAgIC0yNjEsICAxMDUxLCAgICA1MywgICAgIDMsICAtMjYxLCAgIC0zNiwgICAg
ODksICAtMjYxLCAgLTI2MSwgIC0yNjEsCisgICAgIDEwNCwgICAxMDcsICAgLTQ1LCAgLTI2MSwg
ICAgOTYsICAtMjYxLCAgLTI2MSwgICAgOTEsICAxMTg0LCAgLTI2MSwKKyAgICAxMzcwLCAgICA5
MiwgICAgOTMsICAtMjYxLCAgICA5OCwgICAxMDEsICAgIDk0LCAgIDkyMSwgICAxMDUsICAgMTAy
LAorICAgIC0yNjEsICAtMjYxLCAgICA3MiwgIC0yNjEsICAtMjYxLCAgICAgOSwgIC0yNjEsICAg
LTYxLCAgICA0MiwgIC0yNjEsCisgICAgLTI2MSwgIC0yNjEsICAtMjYxLCAgIDM3NiwgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgMTA2LCAgLTI2MSwKKyAgICAtMjYxLCAgIDk4NiwgIDEw
NTEsICAtMjYxLCAgIDEwMywgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgLTQxLAorICAg
IC0yNjEsICAtMjYxLCAgMTA1MSwgIDE0MDcsICAtMjYxLCAgLTI2MSwgIDEwNTEsICAgMTEwLCAg
LTI2MSwgIC0yNjEsCisgICAgLTI2MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAxMDUx
LCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwKKyAgICAxMDUxLCAgMTA1MSwgIDEwNTEsICAx
MDUxLCAgMTA1MSwgIC0yNjEsICAgMTA5LCAgICAyMywgIC0yNjEsICAtMjYxLAorICAgIC0yNjEs
ICAxMjI3LCAgLTI2MSwgIC0yNjEsICAgMTExLCAgLTI2MSwgIDEwNTEsICAtMjYxLCAgLTI2MSwg
ICAgMjUsCisgICAgLTI2MSwgIC0yNjEsICAgNDU5LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2
MSwgIC0yNjEsICAxMDUxLCAgMTA1MSwKKyAgICAtMjYxLCAgLTI2MSwgIC0yNjEsICAxMDUxLCAg
LTI2MSwgICAxMTQsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgMTE1LAorICAgICAxMTIsICAgIDc3
LCAgIDExNiwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgICA1MywgICAgNTMs
CisgICAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAtMzYsICAgLTM2LCAgLTI2MSwgICAx
MDQsICAgMTA3LCAgICA3NiwKKyAgICAxMDUxLCAgICA5MSwgIC0yNjEsICAtMjYxLCAgIDE0NSwg
ICAgNTQsICAgNjI1LCAgIDcwOCwgICAgLTYsICAtMjYxLAorICAgICA3OTEsICAgNDU5LCAgLTI2
MSwgIC0yNjEsICAgMTE3LCAgLTI2MSwgIC0yNjEsICAxMDUxLCAgIDEyMCwgIC0yNjEsCisgICAg
IDEyNCwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgNzkxLCAgIDExMSwgICAxMTIsICAg
IDkxLCAgIDEyNSwKKyAgICAgMTIyLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgMTA1MSwgIC0yNjEs
ICAgMTE4LCAgIDEyOCwgICAxODAsICAtMjYxLAorICAgICAxMjYsICAgNTQyLCAgLTI2MSwgICAg
LTUsICAxMDUxLCAgIDU0MiwgICAxMTEsICAxMDUxLCAgLTI2MSwgIC0yNjEsCisgICAgLTI2MSwg
ICAxMjMsICAgMTEyLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MQorfTsKKworLyogWVlQR09U
T1tOVEVSTS1OVU1dLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlwZ290b1tdID0K
K3sKKyAgICAtMjYxLCAgIC0yNCwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAg
LTI2MSwgICAgMzQsICAtMjYxLAorICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAgMzIsICAtMjYx
LCAgIC0zMywgIC0yNjEsICAgLTI3LCAgIC0yNiwgIC0yNjEsCisgICAgLTI2MSwgIC0yNjEsICAg
IDE0LCAgICAxNiwgICAgMTgsICAtMjYxLCAgIC02NiwgICAtODcsICAtMjYxLCAgIC05MiwKKyAg
ICAgLTg1LCAgICAxMSwgICAgMTIsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgMTQxLCAgIDE1MCwg
ICAxNjEsICAgMTQzLAorICAgIC0yNjEsICAtMjYxLCAgLTIzMSwgICAgIDUsICAgLTMwLCAgIDIy
NCwgICAtMTgsICAgICAwLCAgLTI2MSwgIC0yNjEsCisgICAgLTI2MSwgICAxMDAsICAtMTE5LCAg
LTI2MSwgICAtMTcsICAtMTU2LCAgIC0yNSwgIC0xNDUsICAtMjQzLCAgLTI2MSwKKyAgICAtMjYx
LCAgLTI2MSwgICAtNjQsICAtMjYwLCAgLTI2MSwgIC0yNjEsICAgLTUyLCAgICAyMSwgICAtMjIs
ICAtMjYxLAorICAgIC0yNjEsICAgLTM5LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0y
NjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsCisgICAgLTI2MSwgICAxOTEsICAtMjYxLCAgLTI2MQor
fTsKKworLyogWVlUQUJMRVtZWVBBQ1RbU1RBVEUtTlVNXV0uICBXaGF0IHRvIGRvIGluIHN0YXRl
IFNUQVRFLU5VTS4gIElmCisgICBwb3NpdGl2ZSwgc2hpZnQgdGhhdCB0b2tlbi4gIElmIG5lZ2F0
aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hpY2gKKyAgIG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJ
ZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci4gICovCisjZGVmaW5lIFlZVEFCTEVfTklORiAt
MTY2CitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5dGFibGVbXSA9Cit7CisgICAgICA0NCwg
ICAgNTUsICAgMTY1LCAgIDE2NCwgICAxNjksICAgIDgwLCAgIDIyNiwgICAxMjMsICAgMjIyLCAg
IDIwMCwKKyAgICAgIDcxLCAgICAzMiwgICAgMzMsICAgMjcyLCAgIDE5MywgICAgNzAsICAgMjg4
LCAgICA0OSwgICAxODUsICAgMTg2LAorICAgICAgNTYsICAgMTc4LCAgIDEyMywgICAgODgsICAg
IDcyLCAgICA1MCwgICAgNTIsICAgIDUzLCAgIDE3NSwgICAyNzgsCisgICAgICA4OSwgICAyMjgs
ICAgIDU4LCAgICA3NiwgICAxNzYsICAgIDg0LCAgIDMwNCwgICAyMTksICAgMTcwLCAgIDE3MSwK
KyAgICAgIDQ0LCAgICA2NiwgICAgNDQsICAgIDg2LCAgIDI3OCwgICAyMDksICAgIDQ0LCAgIDEy
NywgICAyOTgsICAgMTk0LAorICAgICAgNTksICAgIDQ0LCAgIDI5OCwgICAxODcsICAgMTg4LCAg
ICA4NCwgICAgNTQsICAgIDMyLCAgICAzMywgICAxNzIsCisgICAgIDE1OCwgICAxNjEsICAgIDcz
LCAgIDE3MywgICAgNjYsICAgIDQ0LCAgIDI3NiwgICAzMDEsICAgMTYyLCAgICA2OSwKKyAgICAg
IDUzLCAgICA2NywgICAyMTksICAgMjE5LCAgICA2OCwgICAxNjUsICAgMjI1LCAgICA0NCwgICAg
NjAsICAgMTQ4LAorICAgICAyMzAsICAgIDc4LCAgIDIwMCwgICAgIDYsICAgICA3LCAgICA0NCwg
ICAxODMsICAgMjE5LCAgIDE4NCwgICAyMzUsCisgICAgIDIyMCwgICAgNjAsICAgIDYxLCAgICA2
MiwgICAgNjMsICAgMTIzLCAgICAgNiwgICAgIDcsICAgMTI3LCAgICA0OSwKKyAgICAgMTI3LCAg
IDI1MSwgICAyNDksICAgMjE5LCAgIDI1MiwgICAxMTAsICAgMjU5LCAgICA4NywgICAgNjEsICAg
IDYyLAorICAgICAgNjMsICAgIDIzLCAgICAyNCwgICAtMjcsICAgMjU4LCAgICA3MywgICAyMjIs
ICAgICAyLCAgICAgMywgICAgIDQsCisgICAgIDExMCwgICAgNjEsICAgIDYyLCAgICA2MywgICAg
MjMsICAgIDI0LCAgIDE2NywgICAxNjgsICAgIDQ0LCAgICA3OSwKKyAgICAgIDQ0LCAgIDI2Miwg
ICAyNjMsICAgMjEzLCAgIDIxNCwgICAyMTUsICAgIDUyLCAgICA1MywgICAyNjQsICAgMTgxLAor
ICAgICAxODIsICAgMzA1LCAgIDIxNiwgICAxODAsICAgMTI2LCAgIDE4OSwgICAxOTAsICAgLTc2
LCAgIC0yOCwgICAyMzMsCisgICAgIDIzOCwgICAyMzksICAgMjE3LCAgIDE0OCwgICAyMTksICAg
MjY3LCAgIDE3NCwgICAxMjMsICAgMjQwLCAgIDI0MSwKKyAgICAgMjQyLCAgIDI0MywgICAxOTEs
ICAgMjQ0LCAgIDI0NSwgICAyNjgsICAgMTc5LCAgIDE5MiwgICAyNzcsICAgMjA1LAorICAgICAx
OTUsICAgMTI3LCAgIDIwNiwgICAyMDIsICAgMjAzLCAgIDIwNywgICAyMTAsICAgMjI3LCAgIDIx
MSwgICAyMjMsCisgICAgIDI4MiwgIC0xMTcsICAgMjUwLCAgIDI3NywgICAxMjMsICAgMjcwLCAg
LTE2NSwgIC0xMzgsICAgMjY1LCAgIDI2NiwKKyAgICAgMjE5LCAgIDI4MSwgICAyOTMsICAgMTEw
LCAgIDI4MywgICAyODQsICAgMjk2LCAgIDI5MSwgICAyOTIsICAgMjk0LAorICAgICAyOTUsICAg
IDQ0LCAgIDMwMiwgICAyNzEsICAgMzA2LCAgIDI0NiwgICAyOTcsICAgMjM0LCAgIDI0NywgICAg
ODEsCisgICAgIDE2NSwgICAyNDgsICAgMTQ4LCAgIDIzNiwgICAyMzcsICAgMTEwLCAgIDExMCwg
ICAxMTAsICAgMTEwLCAgIDExMCwKKyAgICAgMTEwLCAgIDExMCwgICAxMTAsICAgMTEwLCAgIDEx
MCwgICAxMTAsICAgMTU5LCAgICA4NSwgICAxNjAsICAgIDUxLAorICAgICAyMDEsICAgMzAzLCAg
IDI3MywgICAyNjEsICAgMjY5LCAgIDI3NCwgICAyODUsICAgIDc1LCAgICAgMCwgICAgIDAsCisg
ICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI5MCwgICAx
MTAsICAgMTQ4LCAgIDE0OCwgICAgIDAsICAgICAwLAorICAgICAxNDgsICAgMTQ4LCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ4LCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAxMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgMTQ4LCAgICAgMCwgICAgIDAs
ICAgICAwLCAgIDE0OCwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsCisgICAgICAgNSwgICAg
IDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgIDEzMSwgICAxMzIsICAgMTMzLCAgICAg
MCwKKyAgICAgMTM0LCAgIDEzNSwgICAxMzYsICAgMTM3LCAgICAxMSwgICAgMTIsICAgIDEzLCAg
ICAxNCwgICAgMTUsICAgIDE2LAorICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIx
LCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsCisgICAgICAyNCwgICAgMjUsICAg
IDI2LCAgIDEzOCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDkwLCAgICAzMSwKKyAg
ICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LCAgICAgMCwg
ICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTM5LCAgIDE0MCwKKyAgICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0MSwgICAgOTcsICAgIDk4LCAgICAgMCwgICAgOTks
ICAgICAxLAorICAgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAg
IDgsICAgICA5LCAgICAxMCwgICAxMzEsCisgICAgIDEzMiwgICAxMzMsICAgICAwLCAgIDEzNCwg
ICAxMzUsICAgMTM2LCAgIDEzNywgICAgMTEsICAgIDEyLCAgICAxMywKKyAgICAgIDE0LCAgICAx
NSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAw
LAorICAgICAgIDAsICAgICAwLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAxMzgsICAg
IDI3LCAgICAyOCwgICAgMjksCisgICAgICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwgICAgOTIs
ICAgIDkzLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICA5NSwKKyAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk2LCAg
ICAgMCwgICAgIDAsCisgICAgICAgMCwgICAxMzksICAgMjIxLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAxNDEsICAgIDk3LCAgICA5OCwKKyAgICAgICAwLCAgICA5OSwgICAgIDEsICAg
ICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LAorICAgICAgIDks
ICAgIDEwLCAgIDEzMSwgICAxMzIsICAgMTMzLCAgICAgMCwgICAxMzQsICAgMTM1LCAgIDEzNiwg
ICAxMzcsCisgICAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAx
NywgICAgMTgsICAgIDE5LCAgICAyMCwKKyAgICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgMTM4LAorICAgICAgMjcsICAgIDI4
LCAgICAyOSwgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAs
CisgICAgICAgMCwgICAgOTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgOTYsICAgICAwLCAgICAg
MCwgICAgIDAsICAgMTM5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAg
IDE0MSwgICAgOTcsICAgIDk4LCAgICAgMCwgICAgOTksICAgICAxLCAgICAgMiwgICAgIDMsICAg
ICA0LCAgICAgNSwKKyAgICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAxMzEs
ICAgMTMyLCAgIDEzMywgICAgIDAsICAgMTM0LAorICAgICAxMzUsICAgMTM2LCAgIDEzNywgICAg
MTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsCisgICAgICAxOCwg
ICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAg
ICAyNCwKKyAgICAgIDI1LCAgICAyNiwgICAxMzgsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMw
LCAgICA5MCwgICAgMzEsICAgIDkxLAorICAgICAgOTIsICAgIDkzLCAgICAgMCwgICAgIDAsICAg
IDk0LCAgICA5NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwK
KyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICA3
OSwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDEsICAgIDk3LCAg
ICA5OCwgICAgIDAsICAgIDk5LCAgICAgMSwgICAgIDIsCisgICAgICAgMywgICAgIDQsICAgICA1
LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgMTMxLCAgIDEzMiwKKyAgICAg
MTMzLCAgICAgMCwgICAxMzQsICAgMTM1LCAgIDEzNiwgICAxMzcsICAgIDExLCAgICAxMiwgICAg
MTMsICAgIDE0LAorICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwg
ICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgMjMsICAgIDI0LCAgICAy
NSwgICAgMjYsICAgMTM4LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKKyAgICAgIDkwLCAg
ICAzMSwgICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsICAg
ICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQxLCAgICA5NywgICAgOTgsICAgICAwLAor
ICAgICAgOTksICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3
LCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwKKyAgICAgIDEyLCAgICAxMywgICAgMTQs
ICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLAorICAgICAg
MjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAg
MCwgICAgMjcsCisgICAgICAyOCwgICAgMjksICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAg
ICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwKKyAgICAgIDk0LCAgICA5NSwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
OTYsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgIDE0MSwKKyAgICAgIDk3LCAgICA5OCwgICAgIDAsICAgIDk5LCAgICA2
MCwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDAsICAgICA2LAorICAgICAgIDcsICAgICA4LCAg
ICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisg
ICAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYs
ICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAyMywgICAgMjQsICAgIDI1LAorICAgICAgMjYsICAgICAwLCAgICAyNywg
ICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwgICAgOTIsCisgICAgICA5
MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsCisgICAgICAgMCwgICAg
IDAsICAgICAwLCAgICA5NywgICAgOTgsICAgICAwLCAgICA5OSwgICAgMTEsICAgIDEyLCAgICAx
MywKKyAgICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAg
ICAyMSwgICAgMjIsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI1
LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksCisgICAgICAzMCwgICAgOTAsICAg
IDMxLCAgICA5MSwgICAgOTIsICAgIDkzLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICA5NSwKKyAg
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAsCisgICAgIDE2MywgICAgIDgsICAgICA5LCAg
ICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk3LCAgICA5OCwKKyAgICAgICAw
LCAgICA5OSwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcs
ICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgMjUsCisgICAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwg
ICAgMjksICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwKKyAgICAgIDkzLCAgICAg
MCwgICAgIDAsICAgIDk0LCAgICA5NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAy
MDgsICAgIDk3LCAgICA5OCwgICAgIDAsICAgIDk5LCAgICAxMSwgICAgMTIsICAgIDEzLAorICAg
ICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAg
ICAyMiwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjUsICAgIDI2
LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwKKyAgICAgIDMwLCAgICA5MCwgICAgMzEsICAg
IDkxLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LAorICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgOTYsICAgICAwLCAgICAgMCwKKyAgICAgMjI0LCAgICAgOCwgICAgIDksICAgIDEwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTcsICAgIDk4LAorICAgICAgIDAsICAgIDk5
LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgs
CisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAyNSwKKyAgICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwg
ICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLAorICAgICAgOTMsICAgICAwLCAgICAg
MCwgICAgOTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
OTcsICAgIDk4LCAgICAgMCwgICAgOTksICAgIDExLCAgICAxMiwgICAgMTMsCisgICAgICAxNCwg
ICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAg
ICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwgICAxNzcsICAgICAw
LCAgICAyNywgICAgMjgsICAgIDI5LAorICAgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAg
IDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsCisgICAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwK
KyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5
NiwgICAgIDIsICAgICAzLAorICAgICAgIDQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA4LCAg
ICAgOSwgICAgMTAsICAgICAwLCAgICA5NywgICAgOTgsCisgICAgICAgMCwgICAgOTksICAgICAw
LCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwKKyAgICAg
IDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAg
IDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywg
ICAgMjgsICAgIDI5LCAgICAzMCwgICAgIDAsCisgICAgICAzMSwgICAgIDIsICAgICAzLCAgICAg
NCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAgICAxMCwKKyAgICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTEsICAg
IDEyLAorICAgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTks
ICAgIDIwLCAgICAyMSwgICAgMjIsCisgICAgIDE5OSwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwKKyAgICAgIDI5LCAgICAzMCwg
ICAgIDAsICAgIDMxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAor
ICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgNzQsICAgICAwLCAgICAgMCwgICAgIDEsICAgICAy
LCAgICAgMywgICAgIDQsCisgICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAg
IDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAs
ICAgMjUzLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAorICAgICAg
MTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgMjMsCisgICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAg
ICAyOSwgICAgMzAsICAgICAwLCAgICAzMSwKKyAgICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0
LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLAorICAgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwgICAg
MTIsCisgICAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwg
ICAgMjAsICAgIDIxLCAgICAyMiwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAy
NCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LAorICAgICAgMjksICAgIDMwLCAg
ICAgMCwgICAgMzEsICAgICAyLCAgICAgMywgICAgIDQsICAgICAwLCAgICAgMCwgICAgIDAsCisg
ICAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAg
MTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICAyMiwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwgICAgMjYsCisgICAgICAg
MCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgICAwLCAgICAzMSwgICAgIDgsICAgICA5
LCAgICAxMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgMTEsICAgIDEyLAorICAgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYs
ICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCisgICAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAy
OCwKKyAgICAgIDI5LCAgICAzMCwgICAyMzEsICAgMjMyLCAgICAgOCwgICAgIDksICAgIDEwLCAg
ICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsCisgICAgICAxNiwgICAgMTcsICAg
IDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwKKyAg
ICAgICAwLCAgICAgMCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwg
ICAgMzAsICAgICAwLAorICAgICAgMzEKK307CisKKyNkZWZpbmUgeXlwYWN0X3ZhbHVlX2lzX2Rl
ZmF1bHQoWXlzdGF0ZSkgXAorICAoISEoKFl5c3RhdGUpID09ICgtMjYxKSkpCisKKyNkZWZpbmUg
eXl0YWJsZV92YWx1ZV9pc19lcnJvcihZeXRhYmxlX3ZhbHVlKSBcCisgIFlZSUQgKDApCisKK3N0
YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXljaGVja1tdID0KK3sKKyAgICAgICAwLCAgICAyNSwg
ICAgODksICAgIDg4LCAgICA5NiwgICAgNTcsICAgMTYyLCAgICA3MywgICAxNTMsICAgMTI4LAor
ICAgICAgNDAsICAgICAwLCAgICAgMCwgICAyNTYsICAgIDU5LCAgICAzOSwgICAyNzYsICAgIDM3
LCAgICA1NCwgICAgNTUsCisgICAgICA4MSwgICAxMDgsICAgIDg4LCAgICA3MywgICAgNDIsICAg
IDQ1LCAgICA0NSwgICAgNDYsICAgIDcyLCAgIDI2MCwKKyAgICAgIDgwLCAgICA3MiwgICAgNzIs
ICAgIDUxLCAgICA3OCwgICAgNjUsICAgMjk2LCAgICA3OCwgICAgNTIsICAgIDUzLAorICAgICAg
NDAsICAgIDM2LCAgICA0MiwgICAgNjcsICAgMjc1LCAgIDEzNywgICAgNDYsICAgIDc3LCAgIDI5
MSwgICAgOTQsCisgICAgICA3OCwgICAgNTEsICAgMjk1LCAgICA4OSwgICAgOTAsICAgIDg1LCAg
ICA3NSwgICAgNDYsICAgIDQ2LCAgICA3MywKKyAgICAgIDg0LCAgICA3MywgICAgNzMsICAgIDc3
LCAgICA1OSwgICAgNjUsICAgIDcyLCAgICA3MiwgICAgODAsICAgIDQ1LAorICAgICAgNDYsICAg
IDc4LCAgICA3OCwgICAgNzgsICAgIDgxLCAgIDE2MiwgICAxNjEsICAgIDc3LCAgICAgMywgICAg
NzksCisgICAgIDE3MiwgICAgNzUsICAgMjAxLCAgICAgOCwgICAgIDksICAgIDg1LCAgICA4Mywg
ICAgNzgsICAgIDg1LCAgIDE3NiwKKyAgICAgIDgxLCAgICAgMywgICAgMzMsICAgIDM0LCAgICAz
NSwgICAxNjEsICAgICA4LCAgICAgOSwgICAxMjgsICAgIDM3LAorICAgICAxMzAsICAgIDc4LCAg
IDE5NCwgICAgNzgsICAgIDgxLCAgICA3MywgICAgODEsICAgIDcxLCAgICAzMywgICAgMzQsCisg
ICAgICAzNSwgICAgMzYsICAgIDM3LCAgICA3MSwgICAyMDYsICAgIDczLCAgIDI2MSwgICAgIDQs
ICAgICA1LCAgICAgNiwKKyAgICAgIDg4LCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAg
MzcsICAgIDk0LCAgICA5NSwgICAxMjgsICAgIDc1LAorICAgICAxMzAsICAgMjE4LCAgIDIxOSwg
ICAgNjEsICAgIDYyLCAgICA2MywgICAgNDUsICAgIDQ2LCAgIDIyMywgICAgODYsCisgICAgICA4
NywgICAyOTcsICAgIDcwLCAgIDExMSwgICAgODEsICAgIDU2LCAgICA1NywgICAgNzIsICAgIDcx
LCAgIDE3MywKKyAgICAgMTgzLCAgIDE4NCwgICAgODAsICAgMTUzLCAgICA3OCwgICAgNzksICAg
IDcyLCAgIDIyMywgICAxODUsICAgMTg2LAorICAgICAxODcsICAgMTg4LCAgICA1OCwgICAxODks
ICAgMTkwLCAgIDI1MCwgICAgNzEsICAgIDYwLCAgIDI2MCwgICAgNzEsCisgICAgICA3NCwgICAy
MDEsICAgIDcxLCAgICA4MSwgICAgODEsICAgIDgxLCAgICA3MSwgICAgNzQsICAgIDc2LCAgICA3
MywKKyAgICAgMjY3LCAgICA3MSwgICAgNzMsICAgMjc1LCAgIDI1MCwgICAgNDAsICAgIDc1LCAg
ICA3MSwgICAgNzQsICAgIDc0LAorICAgICAgNzgsICAgIDc0LCAgIDI4NCwgICAxNjEsICAgIDc0
LCAgICA3MSwgICAgMTYsICAgIDcyLCAgICA3NiwgICAgODEsCisgICAgICA3MiwgICAyMDEsICAg
Mjk0LCAgIDI1NSwgICAgODEsICAgMTkxLCAgICA4MCwgICAxNzMsICAgMTkyLCAgICA1OSwKKyAg
ICAgMjk3LCAgIDE5MywgICAyMTIsICAgMTgxLCAgIDE4MiwgICAxODMsICAgMTg0LCAgIDE4NSwg
ICAxODYsICAgMTg3LAorICAgICAxODgsICAgMTg5LCAgIDE5MCwgICAxOTEsICAgMTkyLCAgIDE5
MywgICAgODUsICAgIDY2LCAgICA4NSwgICAgIDUsCisgICAgIDEzMCwgICAyOTUsICAgMjU3LCAg
IDIxMiwgICAyNTEsICAgMjU3LCAgIDI3NSwgICAgNDYsICAgIC0xLCAgICAtMSwKKyAgICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMjc4LCAgIDIyMywgICAy
NTYsICAgMjU3LCAgICAtMSwgICAgLTEsCisgICAgIDI2MCwgICAyNjEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAyNzUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LAorICAgICAgLTEsICAgIC0xLCAgIDI1MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAyOTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgMjk1LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwKKyAgICAgICA3LCAgICAgOCwgICAg
IDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIC0xLAorICAg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAg
ICAyNSwgICAgMjYsCisgICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMy
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzNiwKKyAgICAgIDM3LCAgICAzOCwgICAgMzksICAg
IDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAorICAgICAgNDcs
ICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMsICAgIC0xLCAgICAtMSwg
ICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzUsICAgIDc2LAorICAgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDgxLCAgICA4MiwgICAgODMsICAgIC0xLCAgICA4NSwgICAgIDMs
CisgICAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAg
MTEsICAgIDEyLCAgICAxMywKKyAgICAgIDE0LCAgICAxNSwgICAgLTEsICAgIDE3LCAgICAxOCwg
ICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLAorICAgICAgMjQsICAgIDI1LCAgICAy
NiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsCisgICAg
ICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAg
IDQyLCAgICA0MywKKyAgICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDks
ICAgIC0xLCAgICAtMSwgICAgNTIsICAgIDUzLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAg
ICAtMSwKKyAgICAgIC0xLCAgICA3NSwgICAgNzYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICA4MSwgICAgODIsICAgIDgzLAorICAgICAgLTEsICAgIDg1LCAgICAgMywgICAgIDQsICAg
ICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsCisgICAgICAxMSwgICAgMTIs
ICAgIDEzLCAgICAxNCwgICAgMTUsICAgIC0xLCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwK
KyAgICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDMwLAorICAgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsCisgICAgICA0MSwgICAgNDIsICAgIDQz
LCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwKKyAgICAg
IC0xLCAgICA1MiwgICAgNTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICA3MSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgNzUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIDgxLCAg
ICA4MiwgICAgODMsICAgIC0xLCAgICA4NSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAg
ICA3LAorICAgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQs
ICAgIDE1LCAgICAtMSwgICAgMTcsCisgICAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAg
MjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywKKyAgICAgIDI4LCAgICAyOSwg
ICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDM3LAor
ICAgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1
LCAgICA0NiwgICAgNDcsCisgICAgICA0OCwgICAgNDksICAgIC0xLCAgICAtMSwgICAgNTIsICAg
IDUzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc1LCAgICAt
MSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MSwgICAgODIsICAgIDgzLCAg
ICAtMSwgICAgODUsICAgICAzLCAgICAgNCwKKyAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4
LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LAorICAgICAgMTUsICAg
IC0xLCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAg
MjQsCisgICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwg
ICAgMzIsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAz
OSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LAorICAgICAgNDUsICAgIDQ2LCAg
ICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsCisg
ICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgODEsICAgIDgyLCAgICA4MywgICAgLTEsCisgICAgICA4
NSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEw
LCAgICAxMSwKKyAgICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDIxLAorICAgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUs
ICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCisgICAgICAzMiwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0
MSwKKyAgICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAg
ICA0OSwgICAgLTEsICAgIC0xLAorICAgICAgNTIsICAgIDUzLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MSwKKyAg
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDgxLAorICAgICAgODIsICAgIDgzLCAgICAtMSwgICAgODUsICAgICAzLCAgICAg
NCwgICAgIDUsICAgICA2LCAgICAtMSwgICAgIDgsCisgICAgICAgOSwgICAgMTAsICAgIDExLCAg
ICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0x
LCAgICAtMSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcs
ICAgIDI4LAorICAgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDM2LCAgICAzNywgICAgMzgsCisgICAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0Miwg
ICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwKKyAgICAgIDQ5LCAgICAt
MSwgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDgyLCAgICA4MywgICAgLTEsICAgIDg1LCAgICAyMSwgICAgMjIsICAgIDIzLAorICAg
ICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAg
ICAzMiwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5
LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywKKyAgICAgIDQ0LCAgICA0NSwgICAgNDYsICAg
IDQ3LCAgICA0OCwgICAgNDksICAgIC0xLCAgICAtMSwgICAgNTIsICAgIDUzLAorICAgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgNzEsICAgIC0xLCAgICAtMSwKKyAgICAgIDc0LCAgICAxMCwgICAgMTEsICAgIDEyLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODIsICAgIDgzLAorICAgICAgLTEsICAgIDg1
LCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgs
CisgICAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAzOCwKKyAgICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0Mywg
ICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LAorICAgICAgNDksICAgIC0xLCAgICAt
MSwgICAgNTIsICAgIDUzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICA4MSwgICAg
ODIsICAgIDgzLCAgICAtMSwgICAgODUsICAgIDIxLCAgICAyMiwgICAgMjMsCisgICAgICAyNCwg
ICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAg
ICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0x
LCAgICA0MSwgICAgNDIsICAgIDQzLAorICAgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAg
IDQ4LCAgICA0OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMsCisgICAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3
MSwgICAgLTEsICAgIC0xLAorICAgICAgNzQsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICA4MiwgICAgODMsCisgICAgICAtMSwgICAgODUsICAgIDIx
LCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwKKyAgICAg
IDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDM4LAorICAgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwg
ICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsCisgICAgICA0OSwgICAgLTEsICAgIC0xLCAgICA1
MiwgICAgNTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLAorICAgICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTAs
ICAgIDExLCAgICAxMiwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MiwgICAg
ODMsICAgIC0xLCAgICA4NSwgICAgMjEsICAgIDIyLCAgICAyMywKKyAgICAgIDI0LCAgICAyNSwg
ICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLAor
ICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQx
LCAgICA0MiwgICAgNDMsCisgICAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAg
IDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywKKyAgICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAg
NCwgICAgIDUsCisgICAgICAgNiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTAsICAgIDExLCAg
ICAxMiwgICAgLTEsICAgIDgyLCAgICA4MywKKyAgICAgIC0xLCAgICA4NSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LAorICAgICAgMjYsICAg
IDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAg
LTEsCisgICAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0Miwg
ICAgNDMsICAgIDQ0LCAgICAtMSwKKyAgICAgIDQ2LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAxMCwgICAgMTEsICAgIDEyLAorICAgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsCisg
ICAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAs
ICAgIDMxLCAgICAzMiwKKyAgICAgIDc2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
MzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLAorICAgICAgNDMsICAgIDQ0LCAgICAtMSwg
ICAgNDYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAgMCwgICAgLTEsICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1
LCAgICAgNiwKKyAgICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzYs
ICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCisgICAgICAyNywgICAg
MjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAz
NiwKKyAgICAgIDM3LCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQzLCAg
ICA0NCwgICAgLTEsICAgIDQ2LAorICAgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3
LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsCisgICAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIxLCAgICAyMiwKKyAg
ICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwg
ICAgMzEsICAgIDMyLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDM3LCAgICAz
OCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsCisgICAgICA0MywgICAgNDQsICAgIC0xLCAg
ICA0NiwgICAgIDQsICAgICA1LCAgICAgNiwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIDEw
LCAgICAxMSwgICAgMTIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLAorICAgICAgLTEsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAg
MjYsICAgIDI3LCAgICAyOCwgICAgMjksCisgICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwKKyAgICAgIC0xLCAgICA0
MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgLTEsICAgIDQ2LCAgICAxMCwgICAgMTEsICAgIDEy
LAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAyMSwgICAgMjIsCisgICAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcs
ICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwKKyAgICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLAorICAg
ICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAg
ICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIx
LCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwKKyAgICAgIDI2LCAgICAyNywgICAgMjgsICAg
IDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEs
ICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwg
ICAgLTEsCisgICAgICA0NgorfTsKKworLyogWVlTVE9TW1NUQVRFLU5VTV0gLS0gVGhlIChpbnRl
cm5hbCBudW1iZXIgb2YgdGhlKSBhY2Nlc3NpbmcKKyAgIHN5bWJvbCBvZiBzdGF0ZSBTVEFURS1O
VU0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXN0b3NbXSA9Cit7CisgICAgICAg
MCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEw
LCAgICAxMSwKKyAgICAgIDEyLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LAorICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzYs
ICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQxLCAgICA0MiwgICAgNDMsCisgICAgICA0NCwgICAg
NDYsICAgMTI2LCAgIDEyNywgICAxMjgsICAgMTI5LCAgIDEzMCwgICAxMzUsICAgMTM2LCAgIDEz
NywKKyAgICAgMTM4LCAgIDEzOSwgICAxNDAsICAgMTQxLCAgIDE0MiwgICAxNDMsICAgMTc1LCAg
IDE3NiwgICAxNzcsICAgIDM3LAorICAgICAgNDUsICAgMTQwLCAgICA0NSwgICAgNDYsICAgIDc1
LCAgICA5NiwgICAgODEsICAgMTc4LCAgICA3MiwgICAgNzgsCisgICAgICAgMywgICAgMzMsICAg
IDM0LCAgICAzNSwgICAxMzIsICAgMTMzLCAgIDEzOCwgICAgNzgsICAgIDgxLCAgICA0NSwKKyAg
ICAgIDk2LCAgIDEzOSwgICAxNDEsICAgIDczLCAgICAgMCwgICAxNzYsICAgMTQxLCAgIDE0NSwg
ICAgNzUsICAgIDc1LAorICAgICAxNjEsICAgMTMyLCAgIDEzMSwgICAxMzQsICAgMTM5LCAgIDEz
MywgICAgOTYsICAgIDcxLCAgICA3MywgICAgODAsCisgICAgICA0NSwgICAgNDcsICAgIDQ4LCAg
ICA0OSwgICAgNTIsICAgIDUzLCAgICA3MSwgICAgODIsICAgIDgzLCAgICA4NSwKKyAgICAgIDk3
LCAgICA5OCwgICAgOTksICAgMTAxLCAgIDEwMiwgICAxMDMsICAgMTA0LCAgIDEwNSwgICAxMDYs
ICAgMTA3LAorICAgICAxMDgsICAgMTA5LCAgIDExMCwgICAxMTEsICAgMTEyLCAgIDExMywgICAx
MTQsICAgMTE1LCAgIDExNiwgICAxMTcsCisgICAgIDExOCwgICAxMTksICAgMTIwLCAgIDEyMSwg
ICAxMjUsICAgMTQyLCAgICA4MSwgICAxMzksICAgMTQ2LCAgIDE0NywKKyAgICAgMTQ0LCAgICAx
MywgICAgMTQsICAgIDE1LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgNDAsICAgIDc1
LAorICAgICAgNzYsICAgIDgxLCAgIDEwOCwgICAxMjEsICAgMTIyLCAgIDEyNCwgICAxMjYsICAg
MTI3LCAgIDE0MiwgICAxNTEsCisgICAgIDE1MiwgICAxNTMsICAgMTU0LCAgIDE2MiwgICAxNjMs
ICAgMTY0LCAgIDE2NywgICAxNzQsICAgIDk2LCAgIDEzMSwKKyAgICAgMTM0LCAgICA3MywgICAg
ODAsICAgIDc0LCAgIDEyNSwgICAxMjIsICAgMTUwLCAgIDEwOCwgICAxMDgsICAgMTI0LAorICAg
ICAgNTIsICAgIDUzLCAgICA3MywgICAgNzcsICAgIDcyLCAgICA3MiwgICAgNzgsICAgIDM5LCAg
IDEyMiwgICAgNzEsCisgICAgIDEwOCwgICAgODYsICAgIDg3LCAgICA4MywgICAgODUsICAgIDU0
LCAgICA1NSwgICAgODksICAgIDkwLCAgICA1NiwKKyAgICAgIDU3LCAgICA1OCwgICAgNjAsICAg
IDU5LCAgICA5NCwgICAgNzQsICAgIDk2LCAgIDE0OCwgICAxNDksICAgIDc2LAorICAgICAxNDcs
ICAgMTQ2LCAgICA4MSwgICAgODEsICAgMTY5LCAgICA3MSwgICAgNzEsICAgIDgxLCAgICA4MSwg
ICAxMjQsCisgICAgICA3MSwgICAgNzYsICAgMTU1LCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA3
MCwgICAgODAsICAgMTIzLCAgICA3OCwKKyAgICAgIDgxLCAgICA3NiwgICAxNTIsICAgIDczLCAg
ICA3NCwgICAxMjUsICAgMTUwLCAgICA3NCwgICAgNzIsICAgMTAwLAorICAgICAxMjQsICAgIDQ1
LCAgICA0NiwgICAgOTYsICAgMTAzLCAgIDEyMiwgICAxMDgsICAgMTA4LCAgIDExMCwgICAxMTAs
CisgICAgIDExMiwgICAxMTIsICAgMTEyLCAgIDExMiwgICAxMTMsICAgMTEzLCAgIDExNywgICAx
MTgsICAgMTE5LCAgIDEyNCwKKyAgICAgIDczLCAgICA3OCwgICAgODEsICAgIDc2LCAgIDE1OCwg
ICAxNTksICAgMTYwLCAgIDE3MCwgICAxMjQsICAgIDgxLAorICAgICAxNjgsICAgMTYyLCAgIDEy
MiwgICAxMjIsICAgMTI1LCAgICA3NCwgICAgNzQsICAgIDc5LCAgIDEyNSwgICAxNDksCisgICAg
ICA0MCwgICAxNjEsICAgMTUzLCAgIDE1MSwgICAxNjMsICAgMTcxLCAgICA3MiwgICAxMjQsICAg
MTM3LCAgIDE2NiwKKyAgICAgMTU2LCAgICA3NCwgICAxMjIsICAgIDc0LCAgICA3MSwgICAxNjYs
ICAgMTcyLCAgIDE3MywgICAxNTgsICAgMTY1LAorICAgICAgOTYsICAgIDcyLCAgICA3NiwgICAx
MjQsICAgIDgxLCAgICA3MiwgICAgMTYsICAgIDgwLCAgIDE1MywgICAxNTcsCisgICAgIDE2MSwg
ICAgNzIsICAgMTI0LCAgIDE1NywgICAxNTgsICAgMTUwLCAgICA4MQorfTsKKworI2RlZmluZSB5
eWVycm9rCQkoeXllcnJzdGF0dXMgPSAwKQorI2RlZmluZSB5eWNsZWFyaW4JKHl5Y2hhciA9IFlZ
RU1QVFkpCisjZGVmaW5lIFlZRU1QVFkJCSgtMikKKyNkZWZpbmUgWVlFT0YJCTAKKworI2RlZmlu
ZSBZWUFDQ0VQVAlnb3RvIHl5YWNjZXB0bGFiCisjZGVmaW5lIFlZQUJPUlQJCWdvdG8geXlhYm9y
dGxhYgorI2RlZmluZSBZWUVSUk9SCQlnb3RvIHl5ZXJyb3JsYWIKKworCisvKiBMaWtlIFlZRVJS
T1IgZXhjZXB0IGRvIGNhbGwgeXllcnJvci4gIFRoaXMgcmVtYWlucyBoZXJlIHRlbXBvcmFyaWx5
CisgICB0byBlYXNlIHRoZSB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgbWVhbmluZyBvZiBZWUVSUk9S
LCBmb3IgR0NDLgorICAgT25jZSBHQ0MgdmVyc2lvbiAyIGhhcyBzdXBwbGFudGVkIHZlcnNpb24g
MSwgdGhpcyBjYW4gZ28uICBIb3dldmVyLAorICAgWVlGQUlMIGFwcGVhcnMgdG8gYmUgaW4gdXNl
LiAgTmV2ZXJ0aGVsZXNzLCBpdCBpcyBmb3JtYWxseSBkZXByZWNhdGVkCisgICBpbiBCaXNvbiAy
LjQuMidzIE5FV1MgZW50cnksIHdoZXJlIGEgcGxhbiB0byBwaGFzZSBpdCBvdXQgaXMKKyAgIGRp
c2N1c3NlZC4gICovCisKKyNkZWZpbmUgWVlGQUlMCQlnb3RvIHl5ZXJybGFiCisjaWYgZGVmaW5l
ZCBZWUZBSUwKKyAgLyogVGhpcyBpcyBoZXJlIHRvIHN1cHByZXNzIHdhcm5pbmdzIGZyb20gdGhl
IEdDQyBjcHAncworICAgICAtV3VudXNlZC1tYWNyb3MuICBOb3JtYWxseSB3ZSBkb24ndCB3b3Jy
eSBhYm91dCB0aGF0IHdhcm5pbmcsIGJ1dAorICAgICBzb21lIHVzZXJzIGRvLCBhbmQgd2Ugd2Fu
dCB0byBtYWtlIGl0IGVhc3kgZm9yIHVzZXJzIHRvIHJlbW92ZQorICAgICBZWUZBSUwgdXNlcywg
d2hpY2ggd2lsbCBwcm9kdWNlIHdhcm5pbmdzIGZyb20gQmlzb24gMi41LiAgKi8KKyNlbmRpZgor
CisjZGVmaW5lIFlZUkVDT1ZFUklORygpICAoISF5eWVycnN0YXR1cykKKworI2RlZmluZSBZWUJB
Q0tVUChUb2tlbiwgVmFsdWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2Rv
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHl5Y2hhciA9IChUb2tlbik7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB5eWx2YWwgPSAoVmFs
dWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgWVlQ
T1BTVEFDSyAoeXlsZW4pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgIHl5c3RhdGUgPSAqeXlzc3A7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICBnb3RvIHl5YmFja3VwOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZWxzZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
eXllcnJvciAoJnl5bGxvYywgY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNr
IHVwIikpOyBcCisgICAgICBZWUVSUk9SOwkJCQkJCQlcCisgICAgfQkJCQkJCQkJXAord2hpbGUg
KFlZSUQgKDApKQorCisvKiBFcnJvciB0b2tlbiBudW1iZXIgKi8KKyNkZWZpbmUgWVlURVJST1IJ
MQorI2RlZmluZSBZWUVSUkNPREUJMjU2CisKKworLyogWVlMTE9DX0RFRkFVTFQgLS0gU2V0IENV
UlJFTlQgdG8gc3BhbiBmcm9tIFJIU1sxXSB0byBSSFNbTl0uCisgICBJZiBOIGlzIDAsIHRoZW4g
c2V0IENVUlJFTlQgdG8gdGhlIGVtcHR5IGxvY2F0aW9uIHdoaWNoIGVuZHMKKyAgIHRoZSBwcmV2
aW91cyBzeW1ib2w6IFJIU1swXSAoYWx3YXlzIGRlZmluZWQpLiAgKi8KKworI2lmbmRlZiBZWUxM
T0NfREVGQVVMVAorIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgaWYg
KFlZSUQgKE4pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChDdXJyZW50KS5maXJzdF9saW5l
ICAgPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9saW5lOyAgICAgICAgXAorICAgICAgICAgIChD
dXJyZW50KS5maXJzdF9jb2x1bW4gPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9jb2x1bW47ICAg
ICAgXAorICAgICAgICAgIChDdXJyZW50KS5sYXN0X2xpbmUgICAgPSBZWVJIU0xPQyAoUmhzLCBO
KS5sYXN0X2xpbmU7ICAgICAgICAgXAorICAgICAgICAgIChDdXJyZW50KS5sYXN0X2NvbHVtbiAg
PSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2NvbHVtbjsgICAgICAgXAorICAgICAgICB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChDdXJyZW50
KS5maXJzdF9saW5lICAgPSAoQ3VycmVudCkubGFzdF9saW5lICAgPSAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9saW5lOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgIChDdXJyZW50KS5maXJzdF9jb2x1bW4gPSAoQ3Vy
cmVudCkubGFzdF9jb2x1bW4gPSAgICAgICAgICAgICAgXAorICAgICAgICAgICAgWVlSSFNMT0Mg
KFJocywgMCkubGFzdF9jb2x1bW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIHdoaWxlIChZWUlEICgwKSkKKyNlbmRpZgorCisjZGVmaW5lIFlZ
UkhTTE9DKFJocywgSykgKChSaHMpW0tdKQorCisKKy8qIFlZX0xPQ0FUSU9OX1BSSU5UIC0tIFBy
aW50IHRoZSBsb2NhdGlvbiBvbiB0aGUgc3RyZWFtLgorICAgVGhpcyBtYWNybyB3YXMgbm90IG1h
bmRhdGVkIG9yaWdpbmFsbHk6IGRlZmluZSBvbmx5IGlmIHdlIGtub3cKKyAgIHdlIHdvbid0IGJy
ZWFrIHVzZXIgY29kZTogd2hlbiB0aGVzZSBhcmUgdGhlIGxvY2F0aW9ucyB3ZSBrbm93LiAgKi8K
KworI2lmbmRlZiBZWV9MT0NBVElPTl9QUklOVAorIyBpZiBkZWZpbmVkIFlZTFRZUEVfSVNfVFJJ
VklBTCAmJiBZWUxUWVBFX0lTX1RSSVZJQUwKKworLyogUHJpbnQgKllZTE9DUCBvbiBZWU8uICBQ
cml2YXRlLCBkbyBub3QgcmVseSBvbiBpdHMgZXhpc3RlbmNlLiAqLworCitfX2F0dHJpYnV0ZV9f
KChfX3VudXNlZF9fKSkKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19G
VU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIp
CitzdGF0aWMgdW5zaWduZWQKK3l5X2xvY2F0aW9uX3ByaW50XyAoRklMRSAqeXlvLCBZWUxUWVBF
IGNvbnN0ICogY29uc3QgeXlsb2NwKQorI2Vsc2UKK3N0YXRpYyB1bnNpZ25lZAoreXlfbG9jYXRp
b25fcHJpbnRfICh5eW8sIHl5bG9jcCkKKyAgICBGSUxFICp5eW87CisgICAgWVlMVFlQRSBjb25z
dCAqIGNvbnN0IHl5bG9jcDsKKyNlbmRpZgoreworICB1bnNpZ25lZCByZXMgPSAwOworICBpbnQg
ZW5kX2NvbCA9IDAgIT0geXlsb2NwLT5sYXN0X2NvbHVtbiA/IHl5bG9jcC0+bGFzdF9jb2x1bW4g
LSAxIDogMDsKKyAgaWYgKDAgPD0geXlsb2NwLT5maXJzdF9saW5lKQorICAgIHsKKyAgICAgIHJl
cyArPSBmcHJpbnRmICh5eW8sICIlZCIsIHl5bG9jcC0+Zmlyc3RfbGluZSk7CisgICAgICBpZiAo
MCA8PSB5eWxvY3AtPmZpcnN0X2NvbHVtbikKKyAgICAgICAgcmVzICs9IGZwcmludGYgKHl5bywg
Ii4lZCIsIHl5bG9jcC0+Zmlyc3RfY29sdW1uKTsKKyAgICB9CisgIGlmICgwIDw9IHl5bG9jcC0+
bGFzdF9saW5lKQorICAgIHsKKyAgICAgIGlmICh5eWxvY3AtPmZpcnN0X2xpbmUgPCB5eWxvY3At
Pmxhc3RfbGluZSkKKyAgICAgICAgeworICAgICAgICAgIHJlcyArPSBmcHJpbnRmICh5eW8sICIt
JWQiLCB5eWxvY3AtPmxhc3RfbGluZSk7CisgICAgICAgICAgaWYgKDAgPD0gZW5kX2NvbCkKKyAg
ICAgICAgICAgIHJlcyArPSBmcHJpbnRmICh5eW8sICIuJWQiLCBlbmRfY29sKTsKKyAgICAgICAg
fQorICAgICAgZWxzZSBpZiAoMCA8PSBlbmRfY29sICYmIHl5bG9jcC0+Zmlyc3RfY29sdW1uIDwg
ZW5kX2NvbCkKKyAgICAgICAgcmVzICs9IGZwcmludGYgKHl5bywgIi0lZCIsIGVuZF9jb2wpOwor
ICAgIH0KKyAgcmV0dXJuIHJlczsKKyB9CisKKyMgIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChG
aWxlLCBMb2MpICAgICAgICAgIFwKKyAgeXlfbG9jYXRpb25fcHJpbnRfIChGaWxlLCAmKExvYykp
CisKKyMgZWxzZQorIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykgKCh2b2lk
KSAwKQorIyBlbmRpZgorI2VuZGlmCisKKworLyogWVlMRVggLS0gY2FsbGluZyBgeXlsZXgnIHdp
dGggdGhlIHJpZ2h0IGFyZ3VtZW50cy4gICovCisjaWZkZWYgWVlMRVhfUEFSQU0KKyMgZGVmaW5l
IFlZTEVYIHl5bGV4ICgmeXlsdmFsLCAmeXlsbG9jLCBZWUxFWF9QQVJBTSkKKyNlbHNlCisjIGRl
ZmluZSBZWUxFWCB5eWxleCAoJnl5bHZhbCwgJnl5bGxvYykKKyNlbmRpZgorCisvKiBFbmFibGUg
ZGVidWdnaW5nIGlmIHJlcXVlc3RlZC4gICovCisjaWYgWVlERUJVRworCisjIGlmbmRlZiBZWUZQ
UklOVEYKKyMgIGluY2x1ZGUgPHN0ZGlvLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BB
Q0UgKi8KKyMgIGRlZmluZSBZWUZQUklOVEYgZnByaW50ZgorIyBlbmRpZgorCisjIGRlZmluZSBZ
WURQUklOVEYoQXJncykJCQlcCitkbyB7CQkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJCVwKKyAg
ICBZWUZQUklOVEYgQXJnczsJCQkJXAorfSB3aGlsZSAoWVlJRCAoMCkpCisKKyMgZGVmaW5lIFlZ
X1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKQkJCSAgXAorZG8gewkJ
CQkJCQkJCSAgXAorICBpZiAoeXlkZWJ1ZykJCQkJCQkJCSAgXAorICAgIHsJCQkJCQkJCQkgIFwK
KyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgVGl0bGUpOwkJCQkJICBcCisgICAgICB5
eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwJCQkJCQkgIFwKKwkJICBUeXBlLCBWYWx1ZSwgTG9jYXRp
b24sIGNvbnRleHQpOyBcCisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CQkJCQkJICBc
CisgICAgfQkJCQkJCQkJCSAgXAorfSB3aGlsZSAoWVlJRCAoMCkpCisKKworLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUHJpbnQgdGhpcyBzeW1ib2wgb24gWVlPVVRQVVQu
ICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKkFSR1NVU0VEKi8K
KyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8
fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAor
eXlfc3ltYm9sX3ZhbHVlX3ByaW50IChGSUxFICp5eW91dHB1dCwgaW50IHl5dHlwZSwgWVlTVFlQ
RSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwLCBZWUxUWVBFIGNvbnN0ICogY29uc3QgeXlsb2NhdGlv
bnAsIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3N5bWJv
bF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wLCBj
b250ZXh0KQorICAgIEZJTEUgKnl5b3V0cHV0OworICAgIGludCB5eXR5cGU7CisgICAgWVlTVFlQ
RSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOworICAgIFlZTFRZUEUgY29uc3QgKiBjb25zdCB5eWxv
Y2F0aW9ucDsKKyAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0OworI2VuZGlmCit7CisgIEZJTEUg
Knl5byA9IHl5b3V0cHV0OworICBZWVVTRSAoeXlvKTsKKyAgaWYgKCF5eXZhbHVlcCkKKyAgICBy
ZXR1cm47CisgIFlZVVNFICh5eWxvY2F0aW9ucCk7CisgIFlZVVNFIChjb250ZXh0KTsKKyMgaWZk
ZWYgWVlQUklOVAorICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQorICAgIFlZUFJJTlQgKHl5b3V0
cHV0LCB5eXRva251bVt5eXR5cGVdLCAqeXl2YWx1ZXApOworIyBlbHNlCisgIFlZVVNFICh5eW91
dHB1dCk7CisjIGVuZGlmCisgIFlZVVNFICh5eXR5cGUpOworfQorCisKKy8qLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAg
fAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIChkZWZpbmVkIF9f
U1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1
c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xfcHJpbnQg
KEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1
ZXAsIFlZTFRZUEUgY29uc3QgKiBjb25zdCB5eWxvY2F0aW9ucCwgVFBhcnNlQ29udGV4dCogY29u
dGV4dCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ByaW50ICh5eW91dHB1dCwgeXl0
eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAsIGNvbnRleHQpCisgICAgRklMRSAqeXlvdXRwdXQ7
CisgICAgaW50IHl5dHlwZTsKKyAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7Cisg
ICAgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jYXRpb25wOworICAgIFRQYXJzZUNvbnRleHQq
IGNvbnRleHQ7CisjZW5kaWYKK3sKKyAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKKyAgICBZWUZQ
UklOVEYgKHl5b3V0cHV0LCAidG9rZW4gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7CisgIGVsc2UK
KyAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAibnRlcm0gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7
CisKKyAgWVlfTE9DQVRJT05fUFJJTlQgKHl5b3V0cHV0LCAqeXlsb2NhdGlvbnApOworICBZWUZQ
UklOVEYgKHl5b3V0cHV0LCAiOiAiKTsKKyAgeXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1
dCwgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAsIGNvbnRleHQpOworICBZWUZQUklOVEYg
KHl5b3V0cHV0LCAiKSIpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlfc3RhY2tfcHJpbnQgLS0g
UHJpbnQgdGhlIHN0YXRlIHN0YWNrIGZyb20gaXRzIEJPVFRPTSB1cCB0byBpdHMgfAorfCBUT1Ag
KGluY2x1ZGVkKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQg
X19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBf
TVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9zdGFja19wcmludCAoeXl0eXBlX2ludDE2ICp5eWJv
dHRvbSwgeXl0eXBlX2ludDE2ICp5eXRvcCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfc3RhY2tf
cHJpbnQgKHl5Ym90dG9tLCB5eXRvcCkKKyAgICB5eXR5cGVfaW50MTYgKnl5Ym90dG9tOworICAg
IHl5dHlwZV9pbnQxNiAqeXl0b3A7CisjZW5kaWYKK3sKKyAgWVlGUFJJTlRGIChzdGRlcnIsICJT
dGFjayBub3ciKTsKKyAgZm9yICg7IHl5Ym90dG9tIDw9IHl5dG9wOyB5eWJvdHRvbSsrKQorICAg
IHsKKyAgICAgIGludCB5eWJvdCA9ICp5eWJvdHRvbTsKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJy
LCAiICVkIiwgeXlib3QpOworICAgIH0KKyAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOworfQor
CisjIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkJCQkJXAorZG8gewkJCQkJCQkJ
XAorICBpZiAoeXlkZWJ1ZykJCQkJCQkJXAorICAgIHl5X3N0YWNrX3ByaW50ICgoQm90dG9tKSwg
KFRvcCkpOwkJCQlcCit9IHdoaWxlIChZWUlEICgwKSkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUmVwb3J0IHRoYXQgdGhlIFlZUlVM
RSBpcyBnb2luZyB0byBiZSByZWR1Y2VkLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZp
bmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmlu
ZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlfcmVkdWNlX3ByaW50IChZWVNUWVBFICp5eXZz
cCwgWVlMVFlQRSAqeXlsc3AsIGludCB5eXJ1bGUsIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpCisj
ZWxzZQorc3RhdGljIHZvaWQKK3l5X3JlZHVjZV9wcmludCAoeXl2c3AsIHl5bHNwLCB5eXJ1bGUs
IGNvbnRleHQpCisgICAgWVlTVFlQRSAqeXl2c3A7CisgICAgWVlMVFlQRSAqeXlsc3A7CisgICAg
aW50IHl5cnVsZTsKKyAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0OworI2VuZGlmCit7CisgIGlu
dCB5eW5yaHMgPSB5eXIyW3l5cnVsZV07CisgIGludCB5eWk7CisgIHVuc2lnbmVkIGxvbmcgaW50
IHl5bG5vID0geXlybGluZVt5eXJ1bGVdOworICBZWUZQUklOVEYgKHN0ZGVyciwgIlJlZHVjaW5n
IHN0YWNrIGJ5IHJ1bGUgJWQgKGxpbmUgJWx1KTpcbiIsCisJICAgICB5eXJ1bGUgLSAxLCB5eWxu
byk7CisgIC8qIFRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQuICAqLworICBmb3IgKHl5aSA9IDA7
IHl5aSA8IHl5bnJoczsgeXlpKyspCisgICAgeworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIg
ICAkJWQgPSAiLCB5eWkgKyAxKTsKKyAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJo
c1t5eXByaHNbeXlydWxlXSArIHl5aV0sCisJCSAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5
eW5yaHMpXSkKKwkJICAgICAgICwgJih5eWxzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0pCQkgICAg
ICAgLCBjb250ZXh0KTsKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKKyAgICB9Cit9
CisKKyMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQkJXAorZG8gewkJCQkJXAorICBpZiAo
eXlkZWJ1ZykJCQkJXAorICAgIHl5X3JlZHVjZV9wcmludCAoeXl2c3AsIHl5bHNwLCBSdWxlLCBj
b250ZXh0KTsgXAorfSB3aGlsZSAoWVlJRCAoMCkpCisKKy8qIE5vbnplcm8gbWVhbnMgcHJpbnQg
cGFyc2UgdHJhY2UuICBJdCBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQgc28gdGhhdAorICAgbXVsdGlw
bGUgcGFyc2VycyBjYW4gY29leGlzdC4gICovCitpbnQgeXlkZWJ1ZzsKKyNlbHNlIC8qICFZWURF
QlVHICovCisjIGRlZmluZSBZWURQUklOVEYoQXJncykKKyMgZGVmaW5lIFlZX1NZTUJPTF9QUklO
VChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKQorIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQo
Qm90dG9tLCBUb3ApCisjIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkKKyNlbmRpZiAvKiAh
WVlERUJVRyAqLworCisKKy8qIFlZSU5JVERFUFRIIC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFy
c2VyJ3Mgc3RhY2tzLiAgKi8KKyNpZm5kZWYJWVlJTklUREVQVEgKKyMgZGVmaW5lIFlZSU5JVERF
UFRIIDIwMAorI2VuZGlmCisKKy8qIFlZTUFYREVQVEggLS0gbWF4aW11bSBzaXplIHRoZSBzdGFj
a3MgY2FuIGdyb3cgdG8gKGVmZmVjdGl2ZSBvbmx5CisgICBpZiB0aGUgYnVpbHQtaW4gc3RhY2sg
ZXh0ZW5zaW9uIG1ldGhvZCBpcyB1c2VkKS4KKworICAgRG8gbm90IG1ha2UgdGhpcyB2YWx1ZSB0
b28gbGFyZ2U7IHRoZSByZXN1bHRzIGFyZSB1bmRlZmluZWQgaWYKKyAgIFlZU1RBQ0tfQUxMT0Nf
TUFYSU1VTSA8IFlZU1RBQ0tfQllURVMgKFlZTUFYREVQVEgpCisgICBldmFsdWF0ZWQgd2l0aCBp
bmZpbml0ZS1wcmVjaXNpb24gaW50ZWdlciBhcml0aG1ldGljLiAgKi8KKworI2lmbmRlZiBZWU1B
WERFUFRICisjIGRlZmluZSBZWU1BWERFUFRIIDEwMDAwCisjZW5kaWYKKworCisjaWYgWVlFUlJP
Ul9WRVJCT1NFCisKKyMgaWZuZGVmIHl5c3RybGVuCisjICBpZiBkZWZpbmVkIF9fR0xJQkNfXyAm
JiBkZWZpbmVkIF9TVFJJTkdfSAorIyAgIGRlZmluZSB5eXN0cmxlbiBzdHJsZW4KKyMgIGVsc2UK
Ky8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIFlZU1RSLiAgKi8KKyNpZiAoZGVmaW5lZCBfX1NURENf
XyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVz
IHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgWVlTSVpFX1QKK3l5c3RybGVuIChjb25zdCBj
aGFyICp5eXN0cikKKyNlbHNlCitzdGF0aWMgWVlTSVpFX1QKK3l5c3RybGVuICh5eXN0cikKKyAg
ICBjb25zdCBjaGFyICp5eXN0cjsKKyNlbmRpZgoreworICBZWVNJWkVfVCB5eWxlbjsKKyAgZm9y
ICh5eWxlbiA9IDA7IHl5c3RyW3l5bGVuXTsgeXlsZW4rKykKKyAgICBjb250aW51ZTsKKyAgcmV0
dXJuIHl5bGVuOworfQorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZm5kZWYgeXlzdHBjcHkKKyMg
IGlmIGRlZmluZWQgX19HTElCQ19fICYmIGRlZmluZWQgX1NUUklOR19IICYmIGRlZmluZWQgX0dO
VV9TT1VSQ0UKKyMgICBkZWZpbmUgeXlzdHBjcHkgc3RwY3B5CisjICBlbHNlCisvKiBDb3B5IFlZ
U1JDIHRvIFlZREVTVCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSB0ZXJtaW5hdGluZyAn
XDAnIGluCisgICBZWURFU1QuICAqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQg
X19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBf
TVNDX1ZFUikKK3N0YXRpYyBjaGFyICoKK3l5c3RwY3B5IChjaGFyICp5eWRlc3QsIGNvbnN0IGNo
YXIgKnl5c3JjKQorI2Vsc2UKK3N0YXRpYyBjaGFyICoKK3l5c3RwY3B5ICh5eWRlc3QsIHl5c3Jj
KQorICAgIGNoYXIgKnl5ZGVzdDsKKyAgICBjb25zdCBjaGFyICp5eXNyYzsKKyNlbmRpZgorewor
ICBjaGFyICp5eWQgPSB5eWRlc3Q7CisgIGNvbnN0IGNoYXIgKnl5cyA9IHl5c3JjOworCisgIHdo
aWxlICgoKnl5ZCsrID0gKnl5cysrKSAhPSAnXDAnKQorICAgIGNvbnRpbnVlOworCisgIHJldHVy
biB5eWQgLSAxOworfQorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZm5kZWYgeXl0bmFtZXJyCisv
KiBDb3B5IHRvIFlZUkVTIHRoZSBjb250ZW50cyBvZiBZWVNUUiBhZnRlciBzdHJpcHBpbmcgYXdh
eSB1bm5lY2Vzc2FyeQorICAgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcywgc28gdGhhdCBpdCdzIHN1
aXRhYmxlIGZvciB5eWVycm9yLiAgVGhlCisgICBoZXVyaXN0aWMgaXMgdGhhdCBkb3VibGUtcXVv
dGluZyBpcyB1bm5lY2Vzc2FyeSB1bmxlc3MgdGhlIHN0cmluZworICAgY29udGFpbnMgYW4gYXBv
c3Ryb3BoZSwgYSBjb21tYSwgb3IgYmFja3NsYXNoIChvdGhlciB0aGFuCisgICBiYWNrc2xhc2gt
YmFja3NsYXNoKS4gIFlZU1RSIGlzIHRha2VuIGZyb20geXl0bmFtZS4gIElmIFlZUkVTIGlzCisg
ICBudWxsLCBkbyBub3QgY29weTsgaW5zdGVhZCwgcmV0dXJuIHRoZSBsZW5ndGggb2Ygd2hhdCB0
aGUgcmVzdWx0CisgICB3b3VsZCBoYXZlIGJlZW4uICAqLworc3RhdGljIFlZU0laRV9UCit5eXRu
YW1lcnIgKGNoYXIgKnl5cmVzLCBjb25zdCBjaGFyICp5eXN0cikKK3sKKyAgaWYgKCp5eXN0ciA9
PSAnIicpCisgICAgeworICAgICAgWVlTSVpFX1QgeXluID0gMDsKKyAgICAgIGNoYXIgY29uc3Qg
Knl5cCA9IHl5c3RyOworCisgICAgICBmb3IgKDs7KQorCXN3aXRjaCAoKisreXlwKQorCSAgewor
CSAgY2FzZSAnXCcnOgorCSAgY2FzZSAnLCc6CisJICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3Rl
czsKKworCSAgY2FzZSAnXFwnOgorCSAgICBpZiAoKisreXlwICE9ICdcXCcpCisJICAgICAgZ290
byBkb19ub3Rfc3RyaXBfcXVvdGVzOworCSAgICAvKiBGYWxsIHRocm91Z2guICAqLworCSAgZGVm
YXVsdDoKKwkgICAgaWYgKHl5cmVzKQorCSAgICAgIHl5cmVzW3l5bl0gPSAqeXlwOworCSAgICB5
eW4rKzsKKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgJyInOgorCSAgICBpZiAoeXlyZXMpCisJICAg
ICAgeXlyZXNbeXluXSA9ICdcMCc7CisJICAgIHJldHVybiB5eW47CisJICB9CisgICAgZG9fbm90
X3N0cmlwX3F1b3RlczogOworICAgIH0KKworICBpZiAoISB5eXJlcykKKyAgICByZXR1cm4geXlz
dHJsZW4gKHl5c3RyKTsKKworICByZXR1cm4geXlzdHBjcHkgKHl5cmVzLCB5eXN0cikgLSB5eXJl
czsKK30KKyMgZW5kaWYKKworLyogQ29weSBpbnRvICpZWU1TRywgd2hpY2ggaXMgb2Ygc2l6ZSAq
WVlNU0dfQUxMT0MsIGFuIGVycm9yIG1lc3NhZ2UKKyAgIGFib3V0IHRoZSB1bmV4cGVjdGVkIHRv
a2VuIFlZVE9LRU4gZm9yIHRoZSBzdGF0ZSBzdGFjayB3aG9zZSB0b3AgaXMKKyAgIFlZU1NQLgor
CisgICBSZXR1cm4gMCBpZiAqWVlNU0cgd2FzIHN1Y2Nlc3NmdWxseSB3cml0dGVuLiAgUmV0dXJu
IDEgaWYgKllZTVNHIGlzCisgICBub3QgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIG1lc3NhZ2Uu
ICBJbiB0aGF0IGNhc2UsIGFsc28gc2V0CisgICAqWVlNU0dfQUxMT0MgdG8gdGhlIHJlcXVpcmVk
IG51bWJlciBvZiBieXRlcy4gIFJldHVybiAyIGlmIHRoZQorICAgcmVxdWlyZWQgbnVtYmVyIG9m
IGJ5dGVzIGlzIHRvbyBsYXJnZSB0byBzdG9yZS4gICovCitzdGF0aWMgaW50Cit5eXN5bnRheF9l
cnJvciAoWVlTSVpFX1QgKnl5bXNnX2FsbG9jLCBjaGFyICoqeXltc2csCisgICAgICAgICAgICAg
ICAgeXl0eXBlX2ludDE2ICp5eXNzcCwgaW50IHl5dG9rZW4pCit7CisgIFlZU0laRV9UIHl5c2l6
ZTAgPSB5eXRuYW1lcnIgKFlZX05VTEwsIHl5dG5hbWVbeXl0b2tlbl0pOworICBZWVNJWkVfVCB5
eXNpemUgPSB5eXNpemUwOworICBlbnVtIHsgWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSA9
IDUgfTsKKyAgLyogSW50ZXJuYXRpb25hbGl6ZWQgZm9ybWF0IHN0cmluZy4gKi8KKyAgY29uc3Qg
Y2hhciAqeXlmb3JtYXQgPSBZWV9OVUxMOworICAvKiBBcmd1bWVudHMgb2YgeXlmb3JtYXQuICov
CisgIGNoYXIgY29uc3QgKnl5YXJnW1lZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU1dOworICAv
KiBOdW1iZXIgb2YgcmVwb3J0ZWQgdG9rZW5zIChvbmUgZm9yIHRoZSAidW5leHBlY3RlZCIsIG9u
ZSBwZXIKKyAgICAgImV4cGVjdGVkIikuICovCisgIGludCB5eWNvdW50ID0gMDsKKworICAvKiBU
aGVyZSBhcmUgbWFueSBwb3NzaWJpbGl0aWVzIGhlcmUgdG8gY29uc2lkZXI6CisgICAgIC0gQXNz
dW1lIFlZRkFJTCBpcyBub3QgdXNlZC4gIEl0J3MgdG9vIGZsYXdlZCB0byBjb25zaWRlci4gIFNl
ZQorICAgICAgIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hl
cy8yMDA5LTEyL21zZzAwMDI0Lmh0bWw+CisgICAgICAgZm9yIGRldGFpbHMuICBZWUVSUk9SIGlz
IGZpbmUgYXMgaXQgZG9lcyBub3QgaW52b2tlIHRoaXMKKyAgICAgICBmdW5jdGlvbi4KKyAgICAg
LSBJZiB0aGlzIHN0YXRlIGlzIGEgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgZGVmYXVsdCBhY3Rp
b24sIHRoZW4KKyAgICAgICB0aGUgb25seSB3YXkgdGhpcyBmdW5jdGlvbiB3YXMgaW52b2tlZCBp
cyBpZiB0aGUgZGVmYXVsdCBhY3Rpb24KKyAgICAgICBpcyBhbiBlcnJvciBhY3Rpb24uICBJbiB0
aGF0IGNhc2UsIGRvbid0IGNoZWNrIGZvciBleHBlY3RlZAorICAgICAgIHRva2VucyBiZWNhdXNl
IHRoZXJlIGFyZSBub25lLgorICAgICAtIFRoZSBvbmx5IHdheSB0aGVyZSBjYW4gYmUgbm8gbG9v
a2FoZWFkIHByZXNlbnQgKGluIHl5Y2hhcikgaXMgaWYKKyAgICAgICB0aGlzIHN0YXRlIGlzIGEg
Y29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgZGVmYXVsdCBhY3Rpb24uICBUaHVzLAorICAgICAgIGRl
dGVjdGluZyB0aGUgYWJzZW5jZSBvZiBhIGxvb2thaGVhZCBpcyBzdWZmaWNpZW50IHRvIGRldGVy
bWluZQorICAgICAgIHRoYXQgdGhlcmUgaXMgbm8gdW5leHBlY3RlZCBvciBleHBlY3RlZCB0b2tl
biB0byByZXBvcnQuICBJbiB0aGF0CisgICAgICAgY2FzZSwganVzdCByZXBvcnQgYSBzaW1wbGUg
InN5bnRheCBlcnJvciIuCisgICAgIC0gRG9uJ3QgYXNzdW1lIHRoZXJlIGlzbid0IGEgbG9va2Fo
ZWFkIGp1c3QgYmVjYXVzZSB0aGlzIHN0YXRlIGlzIGEKKyAgICAgICBjb25zaXN0ZW50IHN0YXRl
IHdpdGggYSBkZWZhdWx0IGFjdGlvbi4gIFRoZXJlIG1pZ2h0IGhhdmUgYmVlbiBhCisgICAgICAg
cHJldmlvdXMgaW5jb25zaXN0ZW50IHN0YXRlLCBjb25zaXN0ZW50IHN0YXRlIHdpdGggYSBub24t
ZGVmYXVsdAorICAgICAgIGFjdGlvbiwgb3IgdXNlciBzZW1hbnRpYyBhY3Rpb24gdGhhdCBtYW5p
cHVsYXRlZCB5eWNoYXIuCisgICAgIC0gT2YgY291cnNlLCB0aGUgZXhwZWN0ZWQgdG9rZW4gbGlz
dCBkZXBlbmRzIG9uIHN0YXRlcyB0byBoYXZlCisgICAgICAgY29ycmVjdCBsb29rYWhlYWQgaW5m
b3JtYXRpb24sIGFuZCBpdCBkZXBlbmRzIG9uIHRoZSBwYXJzZXIgbm90CisgICAgICAgdG8gcGVy
Zm9ybSBleHRyYSByZWR1Y3Rpb25zIGFmdGVyIGZldGNoaW5nIGEgbG9va2FoZWFkIGZyb20gdGhl
CisgICAgICAgc2Nhbm5lciBhbmQgYmVmb3JlIGRldGVjdGluZyBhIHN5bnRheCBlcnJvci4gIFRo
dXMsIHN0YXRlIG1lcmdpbmcKKyAgICAgICAoZnJvbSBMQUxSIG9yIElFTFIpIGFuZCBkZWZhdWx0
IHJlZHVjdGlvbnMgY29ycnVwdCB0aGUgZXhwZWN0ZWQKKyAgICAgICB0b2tlbiBsaXN0LiAgSG93
ZXZlciwgdGhlIGxpc3QgaXMgY29ycmVjdCBmb3IgY2Fub25pY2FsIExSIHdpdGgKKyAgICAgICBv
bmUgZXhjZXB0aW9uOiBpdCB3aWxsIHN0aWxsIGNvbnRhaW4gYW55IHRva2VuIHRoYXQgd2lsbCBu
b3QgYmUKKyAgICAgICBhY2NlcHRlZCBkdWUgdG8gYW4gZXJyb3IgYWN0aW9uIGluIGEgbGF0ZXIg
c3RhdGUuCisgICovCisgIGlmICh5eXRva2VuICE9IFlZRU1QVFkpCisgICAgeworICAgICAgaW50
IHl5biA9IHl5cGFjdFsqeXlzc3BdOworICAgICAgeXlhcmdbeXljb3VudCsrXSA9IHl5dG5hbWVb
eXl0b2tlbl07CisgICAgICBpZiAoIXl5cGFjdF92YWx1ZV9pc19kZWZhdWx0ICh5eW4pKQorICAg
ICAgICB7CisgICAgICAgICAgLyogU3RhcnQgWVlYIGF0IC1ZWU4gaWYgbmVnYXRpdmUgdG8gYXZv
aWQgbmVnYXRpdmUgaW5kZXhlcyBpbgorICAgICAgICAgICAgIFlZQ0hFQ0suICBJbiBvdGhlciB3
b3Jkcywgc2tpcCB0aGUgZmlyc3QgLVlZTiBhY3Rpb25zIGZvcgorICAgICAgICAgICAgIHRoaXMg
c3RhdGUgYmVjYXVzZSB0aGV5IGFyZSBkZWZhdWx0IGFjdGlvbnMuICAqLworICAgICAgICAgIGlu
dCB5eXhiZWdpbiA9IHl5biA8IDAgPyAteXluIDogMDsKKyAgICAgICAgICAvKiBTdGF5IHdpdGhp
biBib3VuZHMgb2YgYm90aCB5eWNoZWNrIGFuZCB5eXRuYW1lLiAgKi8KKyAgICAgICAgICBpbnQg
eXljaGVja2xpbSA9IFlZTEFTVCAtIHl5biArIDE7CisgICAgICAgICAgaW50IHl5eGVuZCA9IHl5
Y2hlY2tsaW0gPCBZWU5UT0tFTlMgPyB5eWNoZWNrbGltIDogWVlOVE9LRU5TOworICAgICAgICAg
IGludCB5eXg7CisKKyAgICAgICAgICBmb3IgKHl5eCA9IHl5eGJlZ2luOyB5eXggPCB5eXhlbmQ7
ICsreXl4KQorICAgICAgICAgICAgaWYgKHl5Y2hlY2tbeXl4ICsgeXluXSA9PSB5eXggJiYgeXl4
ICE9IFlZVEVSUk9SCisgICAgICAgICAgICAgICAgJiYgIXl5dGFibGVfdmFsdWVfaXNfZXJyb3Ig
KHl5dGFibGVbeXl4ICsgeXluXSkpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
ZiAoeXljb3VudCA9PSBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNKQorICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICB5eWNvdW50ID0gMTsKKyAgICAgICAgICAgICAg
ICAgICAgeXlzaXplID0geXlzaXplMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgeXlhcmdbeXljb3VudCsrXSA9IHl5dG5h
bWVbeXl4XTsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBZWVNJWkVfVCB5
eXNpemUxID0geXlzaXplICsgeXl0bmFtZXJyIChZWV9OVUxMLCB5eXRuYW1lW3l5eF0pOworICAg
ICAgICAgICAgICAgICAgaWYgKCEgKHl5c2l6ZSA8PSB5eXNpemUxCisgICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgeXlzaXplMSA8PSBZWVNUQUNLX0FMTE9DX01BWElNVU0pKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgICAgICAgICAgIHl5c2l6ZSA9IHl5c2l6ZTE7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgc3dpdGNoICh5eWNvdW50KQorICAgIHsKKyMgZGVmaW5lIFlZQ0FTRV8oTiwgUykgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgY2FzZSBOOiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIHl5Zm9ybWF0ID0gUzsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgIGJyZWFrCisgICAgICBZWUNBU0VfKDAsIFlZXygic3ludGF4IGVycm9yIikpOworICAgICAg
WVlDQVNFXygxLCBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIpKTsKKyAgICAgIFlZ
Q0FTRV8oMiwgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIp
KTsKKyAgICAgIFlZQ0FTRV8oMywgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4
cGVjdGluZyAlcyBvciAlcyIpKTsKKyAgICAgIFlZQ0FTRV8oNCwgWVlfKCJzeW50YXggZXJyb3Is
IHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIpKTsKKyAgICAgIFlZQ0FT
RV8oNSwgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAl
cyBvciAlcyBvciAlcyIpKTsKKyMgdW5kZWYgWVlDQVNFXworICAgIH0KKworICB7CisgICAgWVlT
SVpFX1QgeXlzaXplMSA9IHl5c2l6ZSArIHl5c3RybGVuICh5eWZvcm1hdCk7CisgICAgaWYgKCEg
KHl5c2l6ZSA8PSB5eXNpemUxICYmIHl5c2l6ZTEgPD0gWVlTVEFDS19BTExPQ19NQVhJTVVNKSkK
KyAgICAgIHJldHVybiAyOworICAgIHl5c2l6ZSA9IHl5c2l6ZTE7CisgIH0KKworICBpZiAoKnl5
bXNnX2FsbG9jIDwgeXlzaXplKQorICAgIHsKKyAgICAgICp5eW1zZ19hbGxvYyA9IDIgKiB5eXNp
emU7CisgICAgICBpZiAoISAoeXlzaXplIDw9ICp5eW1zZ19hbGxvYworICAgICAgICAgICAgICYm
ICp5eW1zZ19hbGxvYyA8PSBZWVNUQUNLX0FMTE9DX01BWElNVU0pKQorICAgICAgICAqeXltc2df
YWxsb2MgPSBZWVNUQUNLX0FMTE9DX01BWElNVU07CisgICAgICByZXR1cm4gMTsKKyAgICB9CisK
KyAgLyogQXZvaWQgc3ByaW50ZiwgYXMgdGhhdCBpbmZyaW5nZXMgb24gdGhlIHVzZXIncyBuYW1l
IHNwYWNlLgorICAgICBEb24ndCBoYXZlIHVuZGVmaW5lZCBiZWhhdmlvciBldmVuIGlmIHRoZSB0
cmFuc2xhdGlvbgorICAgICBwcm9kdWNlZCBhIHN0cmluZyB3aXRoIHRoZSB3cm9uZyBudW1iZXIg
b2YgIiVzInMuICAqLworICB7CisgICAgY2hhciAqeXlwID0gKnl5bXNnOworICAgIGludCB5eWkg
PSAwOworICAgIHdoaWxlICgoKnl5cCA9ICp5eWZvcm1hdCkgIT0gJ1wwJykKKyAgICAgIGlmICgq
eXlwID09ICclJyAmJiB5eWZvcm1hdFsxXSA9PSAncycgJiYgeXlpIDwgeXljb3VudCkKKyAgICAg
ICAgeworICAgICAgICAgIHl5cCArPSB5eXRuYW1lcnIgKHl5cCwgeXlhcmdbeXlpKytdKTsKKyAg
ICAgICAgICB5eWZvcm1hdCArPSAyOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsK
KyAgICAgICAgICB5eXArKzsKKyAgICAgICAgICB5eWZvcm1hdCsrOworICAgICAgICB9CisgIH0K
KyAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogWVlFUlJPUl9WRVJCT1NFICovCisKKy8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFJlbGVhc2UgdGhl
IG1lbW9yeSBhc3NvY2lhdGVkIHRvIHRoaXMgc3ltYm9sLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLypBUkdTVVNFRCovCisjaWYgKGRl
ZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5l
ZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5ZGVzdHJ1
Y3QgKGNvbnN0IGNoYXIgKnl5bXNnLCBpbnQgeXl0eXBlLCBZWVNUWVBFICp5eXZhbHVlcCwgWVlM
VFlQRSAqeXlsb2NhdGlvbnAsIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpCisjZWxzZQorc3RhdGlj
IHZvaWQKK3l5ZGVzdHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCwg
Y29udGV4dCkKKyAgICBjb25zdCBjaGFyICp5eW1zZzsKKyAgICBpbnQgeXl0eXBlOworICAgIFlZ
U1RZUEUgKnl5dmFsdWVwOworICAgIFlZTFRZUEUgKnl5bG9jYXRpb25wOworICAgIFRQYXJzZUNv
bnRleHQqIGNvbnRleHQ7CisjZW5kaWYKK3sKKyAgWVlVU0UgKHl5dmFsdWVwKTsKKyAgWVlVU0Ug
KHl5bG9jYXRpb25wKTsKKyAgWVlVU0UgKGNvbnRleHQpOworCisgIGlmICgheXltc2cpCisgICAg
eXltc2cgPSAiRGVsZXRpbmciOworICBZWV9TWU1CT0xfUFJJTlQgKHl5bXNnLCB5eXR5cGUsIHl5
dmFsdWVwLCB5eWxvY2F0aW9ucCk7CisKKyAgWVlVU0UgKHl5dHlwZSk7Cit9CisKKworCisKKy8q
LS0tLS0tLS0tLS4KK3wgeXlwYXJzZS4gIHwKK2AtLS0tLS0tLS0tKi8KKworI2lmZGVmIFlZUEFS
U0VfUEFSQU0KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18g
XAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitpbnQK
K3l5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pCisjZWxzZQoraW50Cit5eXBhcnNlIChZWVBB
UlNFX1BBUkFNKQorICAgIHZvaWQgKllZUEFSU0VfUEFSQU07CisjZW5kaWYKKyNlbHNlIC8qICEg
WVlQQVJTRV9QQVJBTSAqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlf
X0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZF
UikKK2ludAoreXlwYXJzZSAoVFBhcnNlQ29udGV4dCogY29udGV4dCkKKyNlbHNlCitpbnQKK3l5
cGFyc2UgKGNvbnRleHQpCisgICAgVFBhcnNlQ29udGV4dCogY29udGV4dDsKKyNlbmRpZgorI2Vu
ZGlmCit7CisvKiBUaGUgbG9va2FoZWFkIHN5bWJvbC4gICovCitpbnQgeXljaGFyOworCisKKyNp
ZiBkZWZpbmVkIF9fR05VQ19fICYmIDQwNyA8PSBfX0dOVUNfXyAqIDEwMCArIF9fR05VQ19NSU5P
Ul9fCisvKiBTdXBwcmVzcyBhbiBpbmNvcnJlY3QgZGlhZ25vc3RpYyBhYm91dCB5eWx2YWwgYmVp
bmcgdW5pbml0aWFsaXplZC4gICovCisjIGRlZmluZSBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFM
SVpFRF9CRUdJTiBcCisgICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIHB1c2giKSBcCisgICAg
X1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3VuaW5pdGlhbGl6ZWRcIiIpXAor
ICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdtYXliZS11bmluaXRpYWxp
emVkXCIiKQorIyBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5EIFwKKyAg
ICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgcG9wIikKKyNlbHNlCisvKiBEZWZhdWx0IHZhbHVl
IHVzZWQgZm9yIGluaXRpYWxpemF0aW9uLCBmb3IgcGFjaWZ5aW5nIG9sZGVyIEdDQ3MKKyAgIG9y
IG5vbi1HQ0MgY29tcGlsZXJzLiAgKi8KK3N0YXRpYyBZWVNUWVBFIHl5dmFsX2RlZmF1bHQ7Cisj
IGRlZmluZSBZWV9JTklUSUFMX1ZBTFVFKFZhbHVlKSA9IFZhbHVlCisjZW5kaWYKK3N0YXRpYyBZ
WUxUWVBFIHl5bG9jX2RlZmF1bHQKKyMgaWYgZGVmaW5lZCBZWUxUWVBFX0lTX1RSSVZJQUwgJiYg
WVlMVFlQRV9JU19UUklWSUFMCisgID0geyAxLCAxLCAxLCAxIH0KKyMgZW5kaWYKKzsKKyNpZm5k
ZWYgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4KKyMgZGVmaW5lIFlZX0lHTk9S
RV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOCisjIGRlZmluZSBZWV9JR05PUkVfTUFZQkVfVU5J
TklUSUFMSVpFRF9FTkQKKyNlbmRpZgorI2lmbmRlZiBZWV9JTklUSUFMX1ZBTFVFCisjIGRlZmlu
ZSBZWV9JTklUSUFMX1ZBTFVFKFZhbHVlKSAvKiBOb3RoaW5nLiAqLworI2VuZGlmCisKKy8qIFRo
ZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9va2FoZWFkIHN5bWJvbC4gICovCitZWVNUWVBFIHl5
bHZhbCBZWV9JTklUSUFMX1ZBTFVFKHl5dmFsX2RlZmF1bHQpOworCisvKiBMb2NhdGlvbiBkYXRh
IGZvciB0aGUgbG9va2FoZWFkIHN5bWJvbC4gICovCitZWUxUWVBFIHl5bGxvYyA9IHl5bG9jX2Rl
ZmF1bHQ7CisKKworICAgIC8qIE51bWJlciBvZiBzeW50YXggZXJyb3JzIHNvIGZhci4gICovCisg
ICAgaW50IHl5bmVycnM7CisKKyAgICBpbnQgeXlzdGF0ZTsKKyAgICAvKiBOdW1iZXIgb2YgdG9r
ZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVkLiAgKi8KKyAgICBpbnQg
eXllcnJzdGF0dXM7CisKKyAgICAvKiBUaGUgc3RhY2tzIGFuZCB0aGVpciB0b29sczoKKyAgICAg
ICBgeXlzcyc6IHJlbGF0ZWQgdG8gc3RhdGVzLgorICAgICAgIGB5eXZzJzogcmVsYXRlZCB0byBz
ZW1hbnRpYyB2YWx1ZXMuCisgICAgICAgYHl5bHMnOiByZWxhdGVkIHRvIGxvY2F0aW9ucy4KKwor
ICAgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhyb3VnaCBzZXBhcmF0ZSBwb2ludGVycywgdG8g
YWxsb3cgeXlvdmVyZmxvdworICAgICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUuICAq
LworCisgICAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KKyAgICB5eXR5cGVfaW50MTYgeXlzc2Fb
WVlJTklUREVQVEhdOworICAgIHl5dHlwZV9pbnQxNiAqeXlzczsKKyAgICB5eXR5cGVfaW50MTYg
Knl5c3NwOworCisgICAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAgKi8KKyAgICBZWVNU
WVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKKyAgICBZWVNUWVBFICp5eXZzOworICAgIFlZU1RZUEUg
Knl5dnNwOworCisgICAgLyogVGhlIGxvY2F0aW9uIHN0YWNrLiAgKi8KKyAgICBZWUxUWVBFIHl5
bHNhW1lZSU5JVERFUFRIXTsKKyAgICBZWUxUWVBFICp5eWxzOworICAgIFlZTFRZUEUgKnl5bHNw
OworCisgICAgLyogVGhlIGxvY2F0aW9ucyB3aGVyZSB0aGUgZXJyb3Igc3RhcnRlZCBhbmQgZW5k
ZWQuICAqLworICAgIFlZTFRZUEUgeXllcnJvcl9yYW5nZVszXTsKKworICAgIFlZU0laRV9UIHl5
c3RhY2tzaXplOworCisgIGludCB5eW47CisgIGludCB5eXJlc3VsdDsKKyAgLyogTG9va2FoZWFk
IHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIuICAqLworICBp
bnQgeXl0b2tlbiA9IDA7CisgIC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1cm4gc2VtYW50
aWMgdmFsdWUgYW5kIGxvY2F0aW9uIGZyb20gdGhlCisgICAgIGFjdGlvbiByb3V0aW5lcy4gICov
CisgIFlZU1RZUEUgeXl2YWw7CisgIFlZTFRZUEUgeXlsb2M7CisKKyNpZiBZWUVSUk9SX1ZFUkJP
U0UKKyAgLyogQnVmZmVyIGZvciBlcnJvciBtZXNzYWdlcywgYW5kIGl0cyBhbGxvY2F0ZWQgc2l6
ZS4gICovCisgIGNoYXIgeXltc2didWZbMTI4XTsKKyAgY2hhciAqeXltc2cgPSB5eW1zZ2J1ZjsK
KyAgWVlTSVpFX1QgeXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7CisjZW5kaWYKKworI2Rl
ZmluZSBZWVBPUFNUQUNLKE4pICAgKHl5dnNwIC09IChOKSwgeXlzc3AgLT0gKE4pLCB5eWxzcCAt
PSAoTikpCisKKyAgLyogVGhlIG51bWJlciBvZiBzeW1ib2xzIG9uIHRoZSBSSFMgb2YgdGhlIHJl
ZHVjZWQgcnVsZS4KKyAgICAgS2VlcCB0byB6ZXJvIHdoZW4gbm8gc3ltYm9sIHNob3VsZCBiZSBw
b3BwZWQuICAqLworICBpbnQgeXlsZW4gPSAwOworCisgIHl5c3NwID0geXlzcyA9IHl5c3NhOwor
ICB5eXZzcCA9IHl5dnMgPSB5eXZzYTsKKyAgeXlsc3AgPSB5eWxzID0geXlsc2E7CisgIHl5c3Rh
Y2tzaXplID0gWVlJTklUREVQVEg7CisKKyAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhcnRpbmcg
cGFyc2VcbiIpKTsKKworICB5eXN0YXRlID0gMDsKKyAgeXllcnJzdGF0dXMgPSAwOworICB5eW5l
cnJzID0gMDsKKyAgeXljaGFyID0gWVlFTVBUWTsgLyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFk
LiAgKi8KKyAgeXlsc3BbMF0gPSB5eWxsb2M7CisgIGdvdG8geXlzZXRzdGF0ZTsKKworLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0u
Cit8IHl5bmV3c3RhdGUgLS0gUHVzaCBhIG5ldyBzdGF0ZSwgd2hpY2ggaXMgZm91bmQgaW4geXlz
dGF0ZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLworIHl5bmV3c3RhdGU6CisgIC8qIEluIGFsbCBjYXNlcywgd2hlbiB5
b3UgZ2V0IGhlcmUsIHRoZSB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2tzCisgICAgIGhhdmUganVz
dCBiZWVuIHB1c2hlZC4gIFNvIHB1c2hpbmcgYSBzdGF0ZSBoZXJlIGV2ZW5zIHRoZSBzdGFja3Mu
ICAqLworICB5eXNzcCsrOworCisgeXlzZXRzdGF0ZToKKyAgKnl5c3NwID0geXlzdGF0ZTsKKwor
ICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkKKyAgICB7CisgICAgICAvKiBH
ZXQgdGhlIGN1cnJlbnQgdXNlZCBzaXplIG9mIHRoZSB0aHJlZSBzdGFja3MsIGluIGVsZW1lbnRz
LiAgKi8KKyAgICAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5c3NwIC0geXlzcyArIDE7CisKKyNpZmRl
ZiB5eW92ZXJmbG93CisgICAgICB7CisJLyogR2l2ZSB1c2VyIGEgY2hhbmNlIHRvIHJlYWxsb2Nh
dGUgdGhlIHN0YWNrLiAgVXNlIGNvcGllcyBvZgorCSAgIHRoZXNlIHNvIHRoYXQgdGhlICYncyBk
b24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8KKwkgICBtZW1vcnkuICAqLworCVlZU1RZUEUg
Knl5dnMxID0geXl2czsKKwl5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKKwlZWUxUWVBFICp5
eWxzMSA9IHl5bHM7CisKKwkvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dl
ZCBieSB0aGUgc2l6ZSBvZiB0aGUKKwkgICBkYXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBi
eXRlcy4gIFRoaXMgdXNlZCB0byBiZSBhCisJICAgY29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhl
IHR3byBleHRyYSBhcmdzLCBidXQgdGhhdCBtaWdodAorCSAgIGJlIHVuZGVmaW5lZCBpZiB5eW92
ZXJmbG93IGlzIGEgbWFjcm8uICAqLworCXl5b3ZlcmZsb3cgKFlZXygibWVtb3J5IGV4aGF1c3Rl
ZCIpLAorCQkgICAgJnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCksCisJCSAgICAmeXl2
czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKKwkJICAgICZ5eWxzMSwgeXlzaXplICogc2l6
ZW9mICgqeXlsc3ApLAorCQkgICAgJnl5c3RhY2tzaXplKTsKKworCXl5bHMgPSB5eWxzMTsKKwl5
eXNzID0geXlzczE7CisJeXl2cyA9IHl5dnMxOworICAgICAgfQorI2Vsc2UgLyogbm8geXlvdmVy
ZmxvdyAqLworIyBpZm5kZWYgWVlTVEFDS19SRUxPQ0FURQorICAgICAgZ290byB5eWV4aGF1c3Rl
ZGxhYjsKKyMgZWxzZQorICAgICAgLyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3duIHdheS4gICov
CisgICAgICBpZiAoWVlNQVhERVBUSCA8PSB5eXN0YWNrc2l6ZSkKKwlnb3RvIHl5ZXhoYXVzdGVk
bGFiOworICAgICAgeXlzdGFja3NpemUgKj0gMjsKKyAgICAgIGlmIChZWU1BWERFUFRIIDwgeXlz
dGFja3NpemUpCisJeXlzdGFja3NpemUgPSBZWU1BWERFUFRIOworCisgICAgICB7CisJeXl0eXBl
X2ludDE2ICp5eXNzMSA9IHl5c3M7CisJdW5pb24geXlhbGxvYyAqeXlwdHIgPQorCSAgKHVuaW9u
IHl5YWxsb2MgKikgWVlTVEFDS19BTExPQyAoWVlTVEFDS19CWVRFUyAoeXlzdGFja3NpemUpKTsK
KwlpZiAoISB5eXB0cikKKwkgIGdvdG8geXlleGhhdXN0ZWRsYWI7CisJWVlTVEFDS19SRUxPQ0FU
RSAoeXlzc19hbGxvYywgeXlzcyk7CisJWVlTVEFDS19SRUxPQ0FURSAoeXl2c19hbGxvYywgeXl2
cyk7CisJWVlTVEFDS19SRUxPQ0FURSAoeXlsc19hbGxvYywgeXlscyk7CisjICB1bmRlZiBZWVNU
QUNLX1JFTE9DQVRFCisJaWYgKHl5c3MxICE9IHl5c3NhKQorCSAgWVlTVEFDS19GUkVFICh5eXNz
MSk7CisgICAgICB9CisjIGVuZGlmCisjZW5kaWYgLyogbm8geXlvdmVyZmxvdyAqLworCisgICAg
ICB5eXNzcCA9IHl5c3MgKyB5eXNpemUgLSAxOworICAgICAgeXl2c3AgPSB5eXZzICsgeXlzaXpl
IC0gMTsKKyAgICAgIHl5bHNwID0geXlscyArIHl5c2l6ZSAtIDE7CisKKyAgICAgIFlZRFBSSU5U
RiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKKwkJICAodW5zaWdu
ZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7CisKKyAgICAgIGlmICh5eXNzICsgeXlzdGFja3Np
emUgLSAxIDw9IHl5c3NwKQorCVlZQUJPUlQ7CisgICAgfQorCisgIFlZRFBSSU5URiAoKHN0ZGVy
ciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7CisKKyAgaWYgKHl5c3RhdGUgPT0g
WVlGSU5BTCkKKyAgICBZWUFDQ0VQVDsKKworICBnb3RvIHl5YmFja3VwOworCisvKi0tLS0tLS0t
LS0tLgorfCB5eWJhY2t1cC4gIHwKK2AtLS0tLS0tLS0tLSovCit5eWJhY2t1cDoKKworICAvKiBE
byBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgUmVhZCBh
CisgICAgIGxvb2thaGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBo
YXZlIG9uZS4gICovCisKKyAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhv
dXQgcmVmZXJlbmNlIHRvIGxvb2thaGVhZCB0b2tlbi4gICovCisgIHl5biA9IHl5cGFjdFt5eXN0
YXRlXTsKKyAgaWYgKHl5cGFjdF92YWx1ZV9pc19kZWZhdWx0ICh5eW4pKQorICAgIGdvdG8geXlk
ZWZhdWx0OworCisgIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rYWhlYWQgdG9rZW4gaWYgZG9u
J3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisKKyAgLyogWVlDSEFSIGlzIGVpdGhlciBZWUVNUFRZ
IG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9va2FoZWFkIHN5bWJvbC4gICovCisgIGlmICh5eWNoYXIg
PT0gWVlFTVBUWSkKKyAgICB7CisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJSZWFkaW5nIGEg
dG9rZW46ICIpKTsKKyAgICAgIHl5Y2hhciA9IFlZTEVYOworICAgIH0KKworICBpZiAoeXljaGFy
IDw9IFlZRU9GKQorICAgIHsKKyAgICAgIHl5Y2hhciA9IHl5dG9rZW4gPSBZWUVPRjsKKyAgICAg
IFlZRFBSSU5URiAoKHN0ZGVyciwgIk5vdyBhdCBlbmQgb2YgaW5wdXQuXG4iKSk7CisgICAgfQor
ICBlbHNlCisgICAgeworICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOworICAg
ICAgWVlfU1lNQk9MX1BSSU5UICgiTmV4dCB0b2tlbiBpcyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5
eWxsb2MpOworICAgIH0KKworICAvKiBJZiB0aGUgcHJvcGVyIGFjdGlvbiBvbiBzZWVpbmcgdG9r
ZW4gWVlUT0tFTiBpcyB0byByZWR1Y2Ugb3IgdG8KKyAgICAgZGV0ZWN0IGFuIGVycm9yLCB0YWtl
IHRoYXQgYWN0aW9uLiAgKi8KKyAgeXluICs9IHl5dG9rZW47CisgIGlmICh5eW4gPCAwIHx8IFlZ
TEFTVCA8IHl5biB8fCB5eWNoZWNrW3l5bl0gIT0geXl0b2tlbikKKyAgICBnb3RvIHl5ZGVmYXVs
dDsKKyAgeXluID0geXl0YWJsZVt5eW5dOworICBpZiAoeXluIDw9IDApCisgICAgeworICAgICAg
aWYgKHl5dGFibGVfdmFsdWVfaXNfZXJyb3IgKHl5bikpCisgICAgICAgIGdvdG8geXllcnJsYWI7
CisgICAgICB5eW4gPSAteXluOworICAgICAgZ290byB5eXJlZHVjZTsKKyAgICB9CisKKyAgLyog
Q291bnQgdG9rZW5zIHNoaWZ0ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0dXJuIG9mZiBl
cnJvcgorICAgICBzdGF0dXMuICAqLworICBpZiAoeXllcnJzdGF0dXMpCisgICAgeXllcnJzdGF0
dXMtLTsKKworICAvKiBTaGlmdCB0aGUgbG9va2FoZWFkIHRva2VuLiAgKi8KKyAgWVlfU1lNQk9M
X1BSSU5UICgiU2hpZnRpbmciLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKKworICAvKiBE
aXNjYXJkIHRoZSBzaGlmdGVkIHRva2VuLiAgKi8KKyAgeXljaGFyID0gWVlFTVBUWTsKKworICB5
eXN0YXRlID0geXluOworICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTgorICAq
Kyt5eXZzcCA9IHl5bHZhbDsKKyAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5ECisg
ICorK3l5bHNwID0geXlsbG9jOworICBnb3RvIHl5bmV3c3RhdGU7CisKKworLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlk
ZWZhdWx0IC0tIGRvIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgdGhlIGN1cnJlbnQgc3RhdGUuICB8
CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLworeXlkZWZhdWx0OgorICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsKKyAgaWYgKHl5
biA9PSAwKQorICAgIGdvdG8geXllcnJsYWI7CisgIGdvdG8geXlyZWR1Y2U7CisKKworLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlyZWR1Y2UgLS0gRG8gYSByZWR1Y3Rpb24u
ICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlyZWR1Y2U6CisgIC8qIHl5
biBpcyB0aGUgbnVtYmVyIG9mIGEgcnVsZSB0byByZWR1Y2Ugd2l0aC4gICovCisgIHl5bGVuID0g
eXlyMlt5eW5dOworCisgIC8qIElmIFlZTEVOIGlzIG5vbnplcm8sIGltcGxlbWVudCB0aGUgZGVm
YXVsdCB2YWx1ZSBvZiB0aGUgYWN0aW9uOgorICAgICBgJCQgPSAkMScuCisKKyAgICAgT3RoZXJ3
aXNlLCB0aGUgZm9sbG93aW5nIGxpbmUgc2V0cyBZWVZBTCB0byBnYXJiYWdlLgorICAgICBUaGlz
IGJlaGF2aW9yIGlzIHVuZG9jdW1lbnRlZCBhbmQgQmlzb24KKyAgICAgdXNlcnMgc2hvdWxkIG5v
dCByZWx5IHVwb24gaXQuICBBc3NpZ25pbmcgdG8gWVlWQUwKKyAgICAgdW5jb25kaXRpb25hbGx5
IG1ha2VzIHRoZSBwYXJzZXIgYSBiaXQgc21hbGxlciwgYW5kIGl0IGF2b2lkcyBhCisgICAgIEdD
QyB3YXJuaW5nIHRoYXQgWVlWQUwgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZC4gICovCisgIHl5
dmFsID0geXl2c3BbMS15eWxlbl07CisKKyAgLyogRGVmYXVsdCBsb2NhdGlvbi4gICovCisgIFlZ
TExPQ19ERUZBVUxUICh5eWxvYywgKHl5bHNwIC0geXlsZW4pLCB5eWxlbik7CisgIFlZX1JFRFVD
RV9QUklOVCAoeXluKTsKKyAgc3dpdGNoICh5eW4pCisgICAgeworICAgICAgICBjYXNlIDQ6CisK
KyAgICB7CisgICAgICAgIC8vIFRoZSBzeW1ib2wgdGFibGUgc2VhcmNoIHdhcyBkb25lIGluIHRo
ZSBsZXhpY2FsIHBoYXNlCisgICAgICAgIGNvbnN0IFRTeW1ib2wgKnN5bWJvbCA9ICh5eXZzcFso
MSkgLSAoMSldLmxleCkuc3ltYm9sOworICAgICAgICBjb25zdCBUVmFyaWFibGUgKnZhcmlhYmxl
ID0gMDsKKworICAgICAgICBpZiAoIXN5bWJvbCkKKyAgICAgICAgeworICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0pLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIiwg
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOworICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCFzeW1ib2wtPmlz
VmFyaWFibGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNw
WygxKSAtICgxKV0pLCAidmFyaWFibGUgZXhwZWN0ZWQiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LnN0cmluZy0+Y19zdHIoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB2YXJpYWJsZSA9IHN0
YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSo+KHN5bWJvbCk7CisKKyAgICAgICAgICAgIGlmIChj
b250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbih2YXJpYWJsZS0+Z2V0TmFtZSgpKSAmJgor
ICAgICAgICAgICAgICAgICF2YXJpYWJsZS0+Z2V0RXh0ZW5zaW9uKCkuZW1wdHkoKSAmJgorICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgx
KV0pLCB2YXJpYWJsZS0+Z2V0RXh0ZW5zaW9uKCkpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIGlmICghdmFyaWFibGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRUeXBlIHR5cGUo
RWJ0RmxvYXQsIEVicFVuZGVmaW5lZCk7CisgICAgICAgICAgICBUVmFyaWFibGUgKmZha2VWYXJp
YWJsZSA9IG5ldyBUVmFyaWFibGUoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcsIHR5cGUp
OworICAgICAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCpmYWtlVmFyaWFibGUp
OworICAgICAgICAgICAgdmFyaWFibGUgPSBmYWtlVmFyaWFibGU7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAodmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkK
KyAgICAgICAgeworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiogY29uc3RBcnJheSA9IHZhcmlh
YmxlLT5nZXRDb25zdFBvaW50ZXIoKTsKKyAgICAgICAgICAgIFRUeXBlIHQodmFyaWFibGUtPmdl
dFR5cGUoKSk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbihjb25zdEFycmF5LCB0LCAoeXls
c3BbKDEpIC0gKDEpXSkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAg
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0TmFtZSgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxl
LT5nZXRUeXBlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGRvbid0
IGRlbGV0ZSAkMS5zdHJpbmcsIGl0J3MgdXNlZCBieSBlcnJvciByZWNvdmVyeSwgYW5kIHRoZSBw
b29sCisgICAgICAgIC8vIHBvcCB3aWxsIHJlY2xhaW0gdGhlIG1lbW9yeQorICAgIH0KKyAgICBi
cmVhazsKKworICBjYXNlIDU6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDY6CisKKyAgICB7CisgICAgICAgIENvbnN0YW50
VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgdW5pb25B
cnJheS0+c2V0SUNvbnN0KCh5eXZzcFsoMSkgLSAoMSldLmxleCkuaSk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25z
dGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25z
dCksICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNzoK
KworICAgIHsKKyAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFu
dFVuaW9uWzFdOworICAgICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3QoKHl5dnNwWygxKSAtICgx
KV0ubGV4KS5mKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0
RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAg
IH0KKyAgICBicmVhazsKKworICBjYXNlIDg6CisKKyAgICB7CisgICAgICAgIENvbnN0YW50VW5p
b24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgdW5pb25BcnJh
eS0+c2V0QkNvbnN0KCh5eXZzcFsoMSkgLSAoMSldLmxleCkuYik7CisgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFu
dFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3Qp
LCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDk6CisK
KyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFso
MikgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgIH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDEwOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxMToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+YWRkSW5kZXhFeHByZXNzaW9uKCh5eXZzcFsoMSkg
LSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDQpXSksICh5eXZz
cFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKTsKKyAgICB9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAxMjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAg
fQorICAgIGJyZWFrOworCisgIGNhc2UgMTM6CisKKyAgICB7CisgICAgICAgIGlmICgoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgpKSB7CisgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDMpIC0gKDMpXSksICJjYW5ub3QgYXBwbHkgZG90
IG9wZXJhdG9yIHRvIGFuIGFycmF5IiwgIi4iKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgVFZlY3RvckZpZWxk
cyBmaWVsZHM7CisgICAgICAgICAgICBpZiAoISBjb250ZXh0LT5wYXJzZVZlY3RvckZpZWxkcygq
KHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXROb21pbmFsU2l6ZSgpLCBmaWVsZHMsICh5eWxzcFsoMykgLSAo
MyldKSkpIHsKKyAgICAgICAgICAgICAgICBmaWVsZHMubnVtID0gMTsKKyAgICAgICAgICAgICAg
ICBmaWVsZHMub2Zmc2V0c1swXSA9IDA7CisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFD
b25zdCkgeyAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2ZWN0b3IgZmllbGRzCisgICAgICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+YWRkQ29uc3RW
ZWN0b3JOb2RlKGZpZWxkcywgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSksICh5eWxzcFsoMykgLSAoMyldKSk7CisgICAgICAgICAgICAgICAgaWYgKCh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKFRUeXBlKCh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRCYXNpY1R5cGUoKSwgKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFByZWNpc2lvbigpLCBFdnFDb25z
dCwgKGludCkgKCooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZykuc2l6ZSgpKSk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFRTdHJpbmcgdmVjdG9yU3RyaW5nID0g
Kih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nOworICAgICAgICAgICAgICAgIFRJbnRlcm1U
eXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3dpenpsZShmaWVsZHMsICh5
eWxzcFsoMykgLSAoMyldKSk7CisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcFZlY3RvclN3aXp6
bGUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5
bHNwWygyKSAtICgzKV0pKTsKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgKGludCkgdmVjdG9yU3Ry
aW5nLnNpemUoKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKCh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc01hdHJpeCgpKSB7CisgICAgICAg
ICAgICBUTWF0cml4RmllbGRzIGZpZWxkczsKKyAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnBh
cnNlTWF0cml4RmllbGRzKCooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxTaXplKCksIGZpZWxk
cywgKHl5bHNwWygzKSAtICgzKV0pKSkgeworICAgICAgICAgICAgICAgIGZpZWxkcy53aG9sZVJv
dyA9IGZhbHNlOworICAgICAgICAgICAgICAgIGZpZWxkcy53aG9sZUNvbCA9IGZhbHNlOworICAg
ICAgICAgICAgICAgIGZpZWxkcy5yb3cgPSAwOworICAgICAgICAgICAgICAgIGZpZWxkcy5jb2wg
PSAwOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKGZpZWxkcy53aG9sZVJvdyB8fCBmaWVsZHMud2hvbGVDb2wpIHsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICIgbm9u
LXNjYWxhciBmaWVsZHMgbm90IGltcGxlbWVudGVkIHlldCIsICIuIik7CisgICAgICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVu
aW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICB1bmlvbkFy
cmF5LT5zZXRJQ29uc3QoMCk7CisgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBl
KEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMykgLSAoMyldKSk7Cisg
ICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eWxzcFsoMikgLSAoMyldKSk7CisgICAg
ICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKFRUeXBl
KCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRCYXNpY1R5cGUo
KSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFByZWNpc2lv
bigpLEV2cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldE5vbWluYWxTaXplKCkpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwor
ICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChmaWVsZHMuY29sICogKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxTaXplKCkgKyBm
aWVsZHMucm93KTsKKyAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50
LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygzKSAtICgzKV0pKTsKKyAgICAgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5bHNwWygyKSAtICgzKV0pKTsKKyAgICAgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCkpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7CisgICAg
ICAgICAgICBib29sIGZpZWxkRm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgIGNvbnN0IFRGaWVs
ZExpc3QmIGZpZWxkcyA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5nZXRUeXBlKCkuZ2V0U3RydWN0KCktPmZpZWxkcygpOworICAgICAgICAgICAgdW5zaWduZWQg
aW50IGk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICAgICAgaWYgKGZpZWxkc1tpXS0+bmFtZSgpID09ICooeXl2c3BbKDMpIC0g
KDMpXS5sZXgpLnN0cmluZykgeworICAgICAgICAgICAgICAgICAgICBmaWVsZEZvdW5kID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKGZpZWxkRm91bmQpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5n
ZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgeworICAgICAgICAgICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5hZGRDb25zdFN0cnVjdCgqKHl5dnNw
WygzKSAtICgzKV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOworICAgICAgICAgICAgICAgICAgICBpZiAo
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5zZXRUeXBlKCpmaWVsZHNbaV0tPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBjaGFuZ2UgdGhlIHF1YWxpZmllciBvZiB0aGUgcmV0dXJuIHR5cGUsIG5vdCBvZiB0
aGUgc3RydWN0dXJlIGZpZWxkCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcyB0aGUgc3Ry
dWN0dXJlIGRlZmluaXRpb24gaXMgc2hhcmVkIGJldHdlZW4gdmFyaW91cyBzdHJ1Y3R1cmVzLgor
ICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRUeXBlUG9pbnRlcigpLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3QpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgQ29u
c3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAg
ICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoaSk7CisgICAgICAgICAgICAgICAgICAg
IFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRV
bmlvbih1bmlvbkFycmF5LCAqZmllbGRzW2ldLT50eXBlKCksICh5eWxzcFsoMykgLSAoMyldKSk7
CisgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdFN0cnVjdCwgKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGluZGV4LCAoeXlsc3BbKDIpIC0g
KDMpXSkpOworICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFso
MikgLSAoMyldKSwgIiBubyBzdWNoIGZpZWxkIGluIHN0cnVjdHVyZSIsICh5eXZzcFsoMykgLSAo
MyldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIp
IC0gKDMpXSksICIgZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBv
ciBtYXRyaXggb24gbGVmdCBoYW5kIHNpZGUiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmlu
Zy0+Y19zdHIoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgfQorICAgICAgICAvLyBkb24ndCBkZWxldGUg
JDMuc3RyaW5nLCBpdCdzIGZyb20gdGhlIHBvb2wKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAxNDoKKworICAgIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5
bHNwWygyKSAtICgyKV0pLCAiKysiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFy
eU1hdGgoRU9wUG9zdEluY3JlbWVudCwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMildKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAg
ICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAg
ICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICIrKyIsICh5eXZz
cFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygp
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTU6CisK
KyAgICB7CisgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCh5eWxzcFsoMikg
LSAoMildKSwgIi0tIiwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkp
KQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVP
cFBvc3REZWNyZW1lbnQsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCAoeXlsc3BbKDIpIC0gKDIpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYg
KCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBjb250
ZXh0LT51bmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgyKV0pLCAiLS0iLCAoeXl2c3BbKDEpIC0g
KDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE2OgorCisgICAgewor
ICAgICAgICBpZiAoY29udGV4dC0+aW50ZWdlckVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSksICJbXSIpKQorICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxNzoKKworICAgIHsKKyAgICAgICAgVEZ1bmN0aW9uKiBmbkNhbGwgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0pLmZ1bmN0aW9uOworICAgICAgICBUT3BlcmF0b3Igb3AgPSBmbkNh
bGwtPmdldEJ1aWx0SW5PcCgpOworCisgICAgICAgIGlmIChvcCAhPSBFT3BOdWxsKQorICAgICAg
ICB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVGhlbiB0aGlzIHNob3VsZCBiZSBh
IGNvbnN0cnVjdG9yLgorICAgICAgICAgICAgLy8gRG9uJ3QgZ28gdGhyb3VnaCB0aGUgc3ltYm9s
IHRhYmxlIGZvciBjb25zdHJ1Y3RvcnMuCisgICAgICAgICAgICAvLyBUaGVpciBwYXJhbWV0ZXJz
IHdpbGwgYmUgdmVyaWZpZWQgYWxnb3JpdGhtaWNhbGx5LgorICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsgIC8vIHVzZSB0aGlzIHRv
IGdldCB0aGUgdHlwZSBiYWNrCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Y29uc3RydWN0b3JF
cnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5p
bnRlcm1Ob2RlLCAqZm5DYWxsLCBvcCwgJnR5cGUpKSB7CisgICAgICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBJdCdzIGEgY29uc3RydWN0b3IsIG9m
IHR5cGUgJ3R5cGUnLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+YWRkQ29uc3RydWN0b3IoKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCAmdHlwZSwgb3AsIGZuQ2FsbCwgKHl5bHNw
WygxKSAtICgxKV0pKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcigwLCBvcCwgKHl5
bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZSh0eXBlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBOb3QgYSBjb25zdHJ1Y3Rvci4gIEZpbmQgaXQg
aW4gdGhlIHN5bWJvbCB0YWJsZS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBjb25zdCBU
RnVuY3Rpb24qIGZuQ2FuZGlkYXRlOworICAgICAgICAgICAgYm9vbCBidWlsdEluOworICAgICAg
ICAgICAgZm5DYW5kaWRhdGUgPSBjb250ZXh0LT5maW5kRnVuY3Rpb24oKHl5bHNwWygxKSAtICgx
KV0pLCBmbkNhbGwsICZidWlsdEluKTsKKyAgICAgICAgICAgIGlmIChmbkNhbmRpZGF0ZSkgewor
ICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gQSBkZWNsYXJlZCBmdW5jdGlv
bi4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIGlmIChidWlsdEluICYmICFm
bkNhbmRpZGF0ZS0+Z2V0RXh0ZW5zaW9uKCkuZW1wdHkoKSAmJgorICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgZm5DYW5k
aWRhdGUtPmdldEV4dGVuc2lvbigpKSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG9wID0gZm5DYW5k
aWRhdGUtPmdldEJ1aWx0SW5PcCgpOworICAgICAgICAgICAgICAgIGlmIChidWlsdEluICYmIG9w
ICE9IEVPcE51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAg
ICAgLy8gQSBmdW5jdGlvbiBjYWxsIG1hcHBlZCB0byBhIGJ1aWx0LWluIG9wZXJhdGlvbi4KKyAg
ICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGZuQ2FuZGlkYXRl
LT5nZXRQYXJhbUNvdW50KCkgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFRyZWF0IGl0IGxpa2UgYSBidWlsdC1pbiB1bmFyeSBv
cGVyYXRvci4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkVW5hcnlNYXRoKG9wLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUs
ICh5eWxzcFsoMSkgLSAoMSldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0
cmVhbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImJ1
aWx0IGluIHVuYXJ5IG9wZXJhdG9yIGZ1bmN0aW9uLiAgVHlwZTogIiA8PCBzdGF0aWNfY2FzdDxU
SW50ZXJtVHlwZWQqPigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUpLT5nZXRD
b21wbGV0ZVN0cmluZygpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5n
IGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5v
ZGUtPmdldExpbmUoKSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCAiSW50ZXJuYWwgRXJyb3IiLCBl
eHRyYUluZm8uY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWVlFUlJPUjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcigoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSwgb3AsICh5eWxzcFsoMSkgLSAoMSldKSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAvLyBUaGlzIGlzIGEgcmVhbCBmdW5jdGlvbiBjYWxsCisKKyAgICAgICAgICAg
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50
ZXJtQWdncmVnYXRlLCBFT3BGdW5jdGlvbkNhbGwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAg
ICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShm
bkNhbmRpZGF0ZS0+Z2V0UmV0dXJuVHlwZSgpKTsKKworICAgICAgICAgICAgICAgICAgICAvLyB0
aGlzIGlzIGhvdyB3ZSBrbm93IHdoZXRoZXIgdGhlIGdpdmVuIGZ1bmN0aW9uIGlzIGEgYnVpbHRJ
biBmdW5jdGlvbiBvciBhIHVzZXIgZGVmaW5lZCBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAg
ICAvLyBpZiBidWlsdEluID09IGZhbHNlLCBpdCdzIGEgdXNlckRlZmluZWQgLT4gY291bGQgYmUg
YW4gb3ZlcmxvYWRlZCBidWlsdEluIGZ1bmN0aW9uIGFsc28KKyAgICAgICAgICAgICAgICAgICAg
Ly8gaWYgYnVpbHRJbiA9PSB0cnVlLCBpdCdzIGRlZmluaXRlbHkgYSBidWlsdEluIGZ1bmN0aW9u
IHdpdGggRU9wTnVsbAorICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1aWx0SW4pCisgICAgICAg
ICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQWdn
cmVnYXRlKCktPnNldFVzZXJEZWZpbmVkKCk7CisgICAgICAgICAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0TmFtZShmbkNhbmRp
ZGF0ZS0+Z2V0TWFuZ2xlZE5hbWUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgVFF1YWxpZmll
ciBxdWFsOworICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZuQ2Fu
ZGlkYXRlLT5nZXRQYXJhbUNvdW50KCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
cXVhbCA9IGZuQ2FuZGlkYXRlLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChxdWFsID09IEV2cU91dCB8fCBxdWFsID09IEV2cUlu
T3V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVy
cm9yQ2hlY2soKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRMaW5lKCksICJhc3Np
Z24iLCAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQWdncmVnYXRlKCktPmdl
dFNlcXVlbmNlKClbaV0tPmdldEFzVHlwZWQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1O
b2RlLT5nZXRMaW5lKCksICJDb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFzc2VkIGZvciAnb3V0
JyBvciAnaW5vdXQnIHBhcmFtZXRlcnMuIiwgIkVycm9yIik7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5zZXRUeXBlKGZuQ2FuZGlkYXRlLT5nZXRSZXR1cm5UeXBlKCkpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBlcnJvciBtZXNzYWdlIHdhcyBwdXQg
b3V0IGJ5IFBhRmluZEZ1bmN0aW9uKCkKKyAgICAgICAgICAgICAgICAvLyBQdXQgb24gYSBkdW1t
eSBub2RlIGZvciBlcnJvciByZWNvdmVyeQorICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24g
KnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICB1bmlv
bkFycmF5LT5zZXRGQ29uc3QoMC4wZik7CisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24o
dW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXls
c3BbKDEpIC0gKDEpXSkpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBkZWxldGUgZm5DYWxsOworICAgIH0KKyAg
ICBicmVhazsKKworICBjYXNlIDE4OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtKSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2Ug
MTk6CisKKyAgICB7CisgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMykgLSAoMyldKSwg
Im1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQiLCAiIik7CisgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0p
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDIwOgorCisgICAgeworICAgICAgICAoeXl2
YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybSk7CisgICAgfQorICAgIGJyZWFr
OworCisgIGNhc2UgMjE6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMjoKKwor
ICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0uZnVuY3Rpb24pOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1Ob2RlID0g
MDsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMzoKKworICAgIHsKKyAgICAgICAgKHl5
dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24p
OworICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1Ob2RlID0gMDsKKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAyNDoKKworICAgIHsKKyAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsg
MCwgbmV3IFRUeXBlKCh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRUeXBlKCkpIH07CisgICAgICAgICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbikt
PmFkZFBhcmFtZXRlcihwYXJhbSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uID0g
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKTsKKyAgICAgICAgKHl5dmFsLmludGVy
bSkuaW50ZXJtTm9kZSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDI1OgorCisgICAgeworICAgICAgICBUUGFy
YW1ldGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldFR5cGUoKSkgfTsKKyAgICAgICAgKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtKS5mdW5jdGlvbi0+YWRkUGFyYW1ldGVyKHBhcmFtKTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmZ1bmN0aW9uOworICAg
ICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1Ob2RlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdy
b3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCAoeXl2c3Bb
KDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsK
KyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNjoKKworICAgIHsKKyAgICAgICAgKHl5dmFs
LmludGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDI3OgorCisgICAgeworICAgICAgICAvLworICAg
ICAgICAvLyBDb25zdHJ1Y3RvcgorICAgICAgICAvLworICAgICAgICBUT3BlcmF0b3Igb3AgPSBF
T3BOdWxsOworICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnVzZXJE
ZWYpIHsKKyAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0U3RydWN0OworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgc3dpdGNoICgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSku
dHlwZSkgeworICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAgICBpZiAo
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLm1hdHJpeCkgeworICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2goKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnNpemUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdE1hdDI7ICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVjdE1hdDM7ICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVjdE1hdDQ7ICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIHN3aXRjaCgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuc2l6
ZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0VmVj
MjsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0
VmVjMzsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3Ry
dWN0VmVjNDsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAg
ICAgICAgICAgICAgc3dpdGNoKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zaXplKSB7
CisgICAgICAgICAgICAgICAgY2FzZSAxOiBvcCA9IEVPcENvbnN0cnVjdEludDsgICBicmVhazsK
KyAgICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0SVZlYzI7IGJyZWFrOwor
ICAgICAgICAgICAgICAgIGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RJVmVjMzsgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVjdElWZWM0OyBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IEVidEJvb2w6CisgICAgICAgICAgICAgICAgc3dpdGNoKCh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS50eXBlKS5zaXplKSB7CisgICAgICAgICAgICAgICAgY2FzZSAxOiBvcCA9IEVPcENvbnN0cnVj
dEJvb2w7ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0
QlZlYzI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RC
VmVjMzsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVjdEJW
ZWM0OyBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChvcCA9PSBFT3BOdWxsKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNw
WygxKSAtICgxKV0pLCAiY2Fubm90IGNvbnN0cnVjdCB0aGlzIHR5cGUiLCBnZXRCYXNpY1N0cmlu
ZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSkpOworICAgICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0udHlwZSkudHlwZSA9IEVidEZsb2F0OworICAgICAgICAgICAgICAgIG9wID0gRU9wQ29u
c3RydWN0RmxvYXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgVFN0cmluZyB0
ZW1wU3RyaW5nOworICAgICAgICBUVHlwZSB0eXBlKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50
eXBlKSk7CisgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCZ0ZW1w
U3RyaW5nLCB0eXBlLCBvcCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gZnVu
Y3Rpb247CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMjg6CisKKyAgICB7CisgICAgICAg
IGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgxKV0pLCAqKHl5
dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICBUVHlwZSB0eXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7CisgICAgICAg
IFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCh5eXZzcFsoMSkgLSAoMSldLmxl
eCkuc3RyaW5nLCB0eXBlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSBmdW5j
dGlvbjsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyOToKKworICAgIHsKKyAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMzA6CisKKyAg
ICB7CisgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAo
MildKSwgIisrIiwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQor
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFBy
ZUluY3JlbWVudCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5
eWxzcFsoMSkgLSAoMildKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQt
PnVuYXJ5T3BFcnJvcigoeXlsc3BbKDEpIC0gKDIpXSksICIrKyIsICh5eXZzcFsoMikgLSAoMild
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwor
ICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMzE6CisKKyAgICB7CisgICAg
ICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMildKSwgIi0t
IiwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQorICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFByZURlY3JlbWVu
dCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMSkg
LSAoMildKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnVuYXJ5T3BF
cnJvcigoeXlsc3BbKDEpIC0gKDIpXSksICItLSIsICh5eXZzcFsoMikgLSAoMildLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICB9
CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMzI6CisKKyAgICB7CisgICAgICAgIGlmICgo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLm9wICE9IEVPcE51bGwpIHsKKyAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRV
bmFyeU1hdGgoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5vcCwgKHl5dnNwWygyKSAtICgyKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMSkgLSAoMildKSwgY29udGV4dC0+c3lt
Ym9sVGFibGUpOworICAgICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9PSAwKSB7CisgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXJyb3JPcCA9ICIiOworICAg
ICAgICAgICAgICAgIHN3aXRjaCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLm9wKSB7CisgICAg
ICAgICAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZTogICBlcnJvck9wID0gIi0iOyBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6IGVycm9yT3AgPSAiISI7IGJyZWFrOwor
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoKHl5bHNwWygxKSAtICgyKV0pLCBlcnJv
ck9wLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxl
dGVTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMikgLSAo
MildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFso
MikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgIH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDMzOgorCisgICAgeyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcE51bGw7IH0KKyAgICBi
cmVhazsKKworICBjYXNlIDM0OgorCisgICAgeyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcE5lZ2F0
aXZlOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAzNToKKworICAgIHsgKHl5dmFsLmludGVybSku
b3AgPSBFT3BMb2dpY2FsTm90OyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAzNjoKKworICAgIHsg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDM3OgorCisgICAgewor
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BNdWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgY29udGV4
dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICIqIiwgKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFso
MykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsK
KyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMzg6CisKKyAg
ICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcERpdiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAg
aWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBj
b250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIi8iLCAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5
dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5n
KCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAzOToK
KworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDQwOgor
CisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BBZGQsICh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAg
ICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAg
ICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICIrIiwgKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCks
ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0
cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2Ug
NDE6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcFN1YiwgKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsK
KyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAg
ICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIi0iLCAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJp
bmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBs
ZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSA0MjoKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KKyAgICBicmVhazsKKworICBj
YXNlIDQzOgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQorICAgIGJyZWFrOworCisgIGNh
c2UgNDQ6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExlc3NUaGFuLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9s
VGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDAp
IHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0p
LCAiPCIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21w
bGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25b
MV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVk
LCBFdnFDb25zdCksICh5eWxzcFsoMikgLSAoMyldKSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSA0NToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wR3Jl
YXRlclRoYW4sICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2
c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0p
LCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigo
eXlsc3BbKDIpIC0gKDMpXSksICI+IiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBu
ZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChm
YWxzZSk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRC
b29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygyKSAtICgzKV0pKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDQ2OgorCisgICAgeworICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
QmluYXJ5TWF0aChFT3BMZXNzVGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAo
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiPD0iLCAoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNw
WygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkp
OworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRV
bmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5p
b25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVu
aW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3Bb
KDIpIC0gKDMpXSkpOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNDc6
CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuRXF1YWwsICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1i
b2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0g
MCkgeworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMp
XSksICI+PSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRD
b21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZp
bmVkLCBFdnFDb25zdCksICh5eWxzcFsoMikgLSAoMyldKSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSA0ODoKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KKyAg
ICBicmVhazsKKworICBjYXNlIDQ5OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BF
cXVhbCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFso
MykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNv
bnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxz
cFsoMikgLSAoMyldKSwgIj09IiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcg
Q29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxz
ZSk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29s
LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygyKSAtICgzKV0pKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDUwOgorCisgICAgeworICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmlu
YXJ5TWF0aChFT3BOb3RFcXVhbCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3Bb
KDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5h
cnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIiE9IiwgKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVu
aW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXkt
PnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5
LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygyKSAtICgz
KV0pKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDUxOgorCisgICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsgfQorICAgIGJyZWFrOworCisgIGNhc2UgNTI6CisKKyAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA1MzoKKworICAgIHsg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDU0OgorCisgICAgeyAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKTsgfQorICAgIGJyZWFrOworCisgIGNhc2UgNTU6CisKKyAgICB7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxBbmQsICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAg
IGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAg
Y29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICImJiIsICh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAo
eXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJp
bmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBDb25z
dGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAg
ICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5p
b24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5
eWxzcFsoMikgLSAoMyldKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSA1NjoKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KKyAgICBicmVhazsKKworICBjYXNl
IDU3OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2FsWG9yLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9s
VGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDAp
IHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0p
LCAiXl4iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29t
cGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
WzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5l
ZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOworICAgICAgICB9CisgICAgfQorICAg
IGJyZWFrOworCisgIGNhc2UgNTg6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSA1OToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9n
aWNhbE9yLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNw
WygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwg
Y29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5
bHNwWygyKSAtICgzKV0pLCAifHwiLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZh
bHNlKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJv
b2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOworICAgICAg
ICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNjA6CisKKyAgICB7ICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2MToKKworICAgIHsKKyAgICAgICBpZiAo
Y29udGV4dC0+Ym9vbEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg1KV0pLCAoeXl2c3BbKDEpIC0g
KDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZFNlbGVjdGlvbigoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eXZzcFsoNSkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0g
KDUpXSkpOworICAgICAgICBpZiAoKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldFR5cGUoKSAhPSAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0VHlwZSgpKQorICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gMDsKKworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09
IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICg1
KV0pLCAiOiIsICh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRD
b21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDUp
IC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBi
cmVhazsKKworICBjYXNlIDYyOgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQorICAgIGJy
ZWFrOworCisgIGNhc2UgNjM6CisKKyAgICB7CisgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVF
cnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMyldKSwgImFzc2lnbiIsICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEFzc2lnbigoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0pLm9wLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CisgICAgICAgIGlmICgo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgY29udGV4
dC0+YXNzaWduRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiYXNzaWduIiwgKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZz
cFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygp
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNjQ6CisK
KyAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wQXNzaWduOyB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSA2NToKKworICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BNdWxBc3NpZ247IH0KKyAg
ICBicmVhazsKKworICBjYXNlIDY2OgorCisgICAgeyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcERp
dkFzc2lnbjsgfQorICAgIGJyZWFrOworCisgIGNhc2UgNjc6CisKKyAgICB7ICh5eXZhbC5pbnRl
cm0pLm9wID0gRU9wQWRkQXNzaWduOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2ODoKKworICAg
IHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BTdWJBc3NpZ247IH0KKyAgICBicmVhazsKKworICBj
YXNlIDY5OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSA3MDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbW1hKCh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKKyAgICAgICAgaWYgKCh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5i
aW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIiwiLCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3MToKKworICAgIHsK
KyAgICAgICAgaWYgKGNvbnRleHQtPmNvbnN0RXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNl
IDcyOgorCisgICAgeworICAgICAgICBURnVuY3Rpb24gJmZ1bmN0aW9uID0gKigoeXl2c3BbKDEp
IC0gKDIpXS5pbnRlcm0pLmZ1bmN0aW9uKTsKKyAgICAgICAgCisgICAgICAgIFRJbnRlcm1BZ2dy
ZWdhdGUgKnByb3RvdHlwZSA9IG5ldyBUSW50ZXJtQWdncmVnYXRlOworICAgICAgICBwcm90b3R5
cGUtPnNldFR5cGUoZnVuY3Rpb24uZ2V0UmV0dXJuVHlwZSgpKTsKKyAgICAgICAgcHJvdG90eXBl
LT5zZXROYW1lKGZ1bmN0aW9uLmdldE5hbWUoKSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKTsgaSsrKQorICAgICAgICB7
CisgICAgICAgICAgICBjb25zdCBUUGFyYW1ldGVyICZwYXJhbSA9IGZ1bmN0aW9uLmdldFBhcmFt
KGkpOworICAgICAgICAgICAgaWYgKHBhcmFtLm5hbWUgIT0gMCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBUVmFyaWFibGUgdmFyaWFibGUocGFyYW0ubmFtZSwgKnBhcmFtLnR5cGUp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHByb3RvdHlwZSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKHByb3RvdHlwZSwgY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFN5bWJvbCh2YXJpYWJsZS5nZXRVbmlxdWVJZCgpLCB2YXJpYWJsZS5nZXROYW1lKCks
IHZhcmlhYmxlLmdldFR5cGUoKSwgKHl5bHNwWygxKSAtICgyKV0pKSwgKHl5bHNwWygxKSAtICgy
KV0pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBwcm90b3R5cGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3Jl
Z2F0ZShwcm90b3R5cGUsIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsICpw
YXJhbS50eXBlLCAoeXlsc3BbKDEpIC0gKDIpXSkpLCAoeXlsc3BbKDEpIC0gKDIpXSkpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwcm90b3R5cGUtPnNldE9w
KEVPcFByb3RvdHlwZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBwcm90
b3R5cGU7CisKKyAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7CisgICAgfQorICAg
IGJyZWFrOworCisgIGNhc2UgNzM6CisKKyAgICB7CisgICAgICAgIGlmICgoeXl2c3BbKDEpIC0g
KDIpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSkKKyAgICAgICAgICAgICh5eXZzcFsoMSkgLSAo
MildLmludGVybSkuaW50ZXJtQWdncmVnYXRlLT5zZXRPcChFT3BEZWNsYXJhdGlvbik7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0p
LmludGVybUFnZ3JlZ2F0ZTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3NDoKKworICAg
IHsKKyAgICAgICAgaWYgKCgoeXl2c3BbKDIpIC0gKDQpXS5pbnRlcm0ucHJlY2lzaW9uKSA9PSBF
YnBIaWdoKSAmJiAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpICYm
ICFjb250ZXh0LT5mcmFnbWVudFByZWNpc2lvbkhpZ2gpIHsKKyAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eWxzcFsoMSkgLSAoNCldKSwgInByZWNpc2lvbiBpcyBub3Qgc3VwcG9ydGVkIGlu
IGZyYWdtZW50IHNoYWRlciIsICJoaWdocCIpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICB9CisgICAgICAgIGlmICghY29udGV4dC0+c3ltYm9sVGFibGUuc2V0RGVm
YXVsdFByZWNpc2lvbiggKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLnR5cGUpLCAoeXl2c3BbKDIp
IC0gKDQpXS5pbnRlcm0ucHJlY2lzaW9uKSApKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXlsc3BbKDEpIC0gKDQpXSksICJpbGxlZ2FsIHR5cGUgYXJndW1lbnQgZm9yIGRlZmF1bHQg
cHJlY2lzaW9uIHF1YWxpZmllciIsIGdldEJhc2ljU3RyaW5nKCh5eXZzcFsoMykgLSAoNCldLmlu
dGVybS50eXBlKS50eXBlKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgIH0KKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IDA7CisgICAgfQorICAg
IGJyZWFrOworCisgIGNhc2UgNzU6CisKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIE11
bHRpcGxlIGRlY2xhcmF0aW9ucyBvZiB0aGUgc2FtZSBmdW5jdGlvbiBhcmUgYWxsb3dlZC4KKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGRlZmluaXRpb24sIHRoZSBkZWZpbml0
aW9uIHByb2R1Y3Rpb24gY29kZSB3aWxsIGNoZWNrIGZvciByZWRlZmluaXRpb25zCisgICAgICAg
IC8vICh3ZSBkb24ndCBrbm93IGF0IHRoaXMgcG9pbnQgaWYgaXQncyBhIGRlZmluaXRpb24gb3Ig
bm90KS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gUmVkZWNsYXJhdGlvbnMgYXJlIGFsbG93ZWQu
ICBCdXQsIHJldHVybiB0eXBlcyBhbmQgcGFyYW1ldGVyIHF1YWxpZmllcnMgbXVzdCBtYXRjaC4K
KyAgICAgICAgLy8KKyAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nhc3Q8VEZ1
bmN0aW9uKj4oY29udGV4dC0+c3ltYm9sVGFibGUuZmluZCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0uZnVuY3Rpb24pLT5nZXRNYW5nbGVkTmFtZSgpKSk7CisgICAgICAgIGlmIChwcmV2RGVjKSB7
CisgICAgICAgICAgICBpZiAocHJldkRlYy0+Z2V0UmV0dXJuVHlwZSgpICE9ICh5eXZzcFsoMSkg
LSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFJldHVyblR5cGUoKSkgeworICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgIm92ZXJsb2FkZWQgZnVuY3Rp
b25zIG11c3QgaGF2ZSB0aGUgc2FtZSByZXR1cm4gdHlwZSIsICh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS5mdW5jdGlvbiktPmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpKTsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZXZEZWMtPmdldFBhcmFtQ291bnQoKTsgKytpKSB7
CisgICAgICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxp
ZmllcigpICE9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFBhcmFtKGkp
LnR5cGUtPmdldFF1YWxpZmllcigpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eWxzcFsoMikgLSAoMildKSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0
aGUgc2FtZSBwYXJhbWV0ZXIgcXVhbGlmaWVycyIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5m
dW5jdGlvbiktPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllclN0cmluZygpKTsKKyAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vCisgICAgICAgIC8vIENoZWNrIGZv
ciBwcmV2aW91c2x5IGRlY2xhcmVkIHZhcmlhYmxlcyB1c2luZyB0aGUgc2FtZSBuYW1lLgorICAg
ICAgICAvLworICAgICAgICBUU3ltYm9sICpwcmV2U3ltID0gY29udGV4dC0+c3ltYm9sVGFibGUu
ZmluZCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXROYW1lKCkpOworICAg
ICAgICBpZiAocHJldlN5bSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFwcmV2U3ltLT5p
c0Z1bmN0aW9uKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoKHl5bHNwWygyKSAtICgyKV0pLCAicmVkZWZpbml0aW9uIiwgKHl5dnNwWygxKSAtICgyKV0u
aW50ZXJtLmZ1bmN0aW9uKS0+Z2V0TmFtZSgpLmNfc3RyKCksICJmdW5jdGlvbiIpOworICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEluc2VydCB0aGUgdW5tYW5n
bGVkIG5hbWUgdG8gZGV0ZWN0IHBvdGVudGlhbCBmdXR1cmUgcmVkZWZpbml0aW9uIGFzIGEgdmFy
aWFibGUuCisgICAgICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5nZXRPdXRlckxldmVsKCkt
Pmluc2VydCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXROYW1lKCksICoo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vCisgICAgICAgIC8vIElmIHRoaXMgaXMgYSByZWRlY2xhcmF0aW9uLCBpdCBjb3VsZCBhbHNv
IGJlIGEgZGVmaW5pdGlvbiwKKyAgICAgICAgLy8gaW4gd2hpY2ggY2FzZSwgd2Ugd2FudCB0byB1
c2UgdGhlIHZhcmlhYmxlIG5hbWVzIGZyb20gdGhpcyBvbmUsIGFuZCBub3QgdGhlIG9uZSB0aGF0
J3MKKyAgICAgICAgLy8gYmVpbmcgcmVkZWNsYXJlZC4gIFNvLCBwYXNzIGJhY2sgdXAgdGhpcyBk
ZWNsYXJhdGlvbiwgbm90IHRoZSBvbmUgaW4gdGhlIHN5bWJvbCB0YWJsZS4KKyAgICAgICAgLy8K
KyAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0uZnVuY3Rpb24pOworCisgICAgICAgIC8vIFdlJ3JlIGF0IHRoZSBpbm5lciBzY29wZSBsZXZl
bCBvZiB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudHMgYW5kIGJvZHkgc3RhdGVtZW50LgorICAgICAg
ICAvLyBBZGQgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZSB0byB0aGUgc3Vycm91bmRpbmcgc2NvcGUg
aW5zdGVhZC4KKyAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUuZ2V0T3V0ZXJMZXZlbCgpLT5p
bnNlcnQoKih5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSA3NjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24pOworICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDc3OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5mdW5jdGlvbik7CisgICAgfQorICAgIGJyZWFrOworCisgIGNh
c2UgNzg6CisKKyAgICB7CisgICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyCisgICAgICAgICh5
eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9u
KTsKKyAgICAgICAgaWYgKCh5eXZzcFsoMikgLSAoMildLmludGVybSkucGFyYW0udHlwZS0+Z2V0
QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkKKyAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS5mdW5jdGlvbiktPmFkZFBhcmFtZXRlcigoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLnBh
cmFtKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGVsZXRlICh5eXZzcFsoMikgLSAoMild
LmludGVybSkucGFyYW0udHlwZTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3OToKKwor
ICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gT25seSBmaXJzdCBwYXJhbWV0ZXIgb2Ygb25l
LXBhcmFtZXRlciBmdW5jdGlvbnMgY2FuIGJlIHZvaWQKKyAgICAgICAgLy8gVGhlIGNoZWNrIGZv
ciBuYW1lZCBwYXJhbWV0ZXJzIG5vdCBiZWluZyB2b2lkIGlzIGRvbmUgaW4gcGFyYW1ldGVyX2Rl
Y2xhcmF0b3IKKyAgICAgICAgLy8KKyAgICAgICAgaWYgKCh5eXZzcFsoMykgLSAoMyldLmludGVy
bSkucGFyYW0udHlwZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgeworICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgIC8vIFRoaXMgcGFyYW1ldGVyID4gZmlyc3QgaXMgdm9pZAorICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwg
ImNhbm5vdCBiZSBhbiBhcmd1bWVudCB0eXBlIGV4Y2VwdCBmb3IgJyh2b2lkKSciLCAidm9pZCIp
OworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgZGVsZXRlICh5
eXZzcFsoMykgLSAoMyldLmludGVybSkucGFyYW0udHlwZTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyCisgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LmZ1bmN0aW9uKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5mdW5jdGlvbik7CisgICAgICAg
ICAgICAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uZnVuY3Rpb24pLT5hZGRQYXJhbWV0ZXIoKHl5
dnNwWygzKSAtICgzKV0uaW50ZXJtKS5wYXJhbSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSA4MDoKKworICAgIHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyld
LmludGVybS50eXBlKS5xdWFsaWZpZXIgIT0gRXZxR2xvYmFsICYmICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS50eXBlKS5xdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7CisgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICJubyBxdWFsaWZpZXJzIGFsbG93ZWQg
Zm9yIGZ1bmN0aW9uIHJldHVybiIsIGdldFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gbWFrZSBzdXJlIGEgc2FtcGxlciBpcyBub3QgaW52
b2x2ZWQgYXMgd2VsbC4uLgorICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJy
b3JDaGVjaygoeXlsc3BbKDIpIC0gKDMpXSksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBl
KSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgLy8gQWRkIHRo
ZSBmdW5jdGlvbiBhcyBhIHByb3RvdHlwZSBhZnRlciBwYXJzaW5nIGl0ICh3ZSBkbyBub3Qgc3Vw
cG9ydCByZWN1cnNpb24pCisgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb247CisgICAgICAgIFRU
eXBlIHR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpKTsKKyAgICAgICAgZnVuY3Rp
b24gPSBuZXcgVEZ1bmN0aW9uKCh5eXZzcFsoMikgLSAoMyldLmxleCkuc3RyaW5nLCB0eXBlKTsK
KyAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSBmdW5jdGlvbjsKKyAgICAgICAgCisg
ICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsKKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSA4MToKKworICAgIHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMildLmludGVy
bS50eXBlKS50eXBlID09IEVidFZvaWQpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eWxzcFsoMikgLSAoMildKSwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgKHl5dnNwWygy
KSAtICgyKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICB9CisgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hl
Y2soKHl5bHNwWygyKSAtICgyKV0pLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcpKQor
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBUUGFyYW1ldGVyIHBhcmFt
ID0geyh5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLCBuZXcgVFR5cGUoKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLnR5cGUpKX07CisgICAgICAgICh5eXZhbC5pbnRlcm0pLnBhcmFtID0gcGFy
YW07CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgODI6CisKKyAgICB7CisgICAgICAgIC8v
IENoZWNrIHRoYXQgd2UgY2FuIG1ha2UgYW4gYXJyYXkgb3V0IG9mIHRoaXMgdHlwZQorICAgICAg
ICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDUpXSksICh5
eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygoeXlsc3Bb
KDIpIC0gKDUpXSksICooeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0cmluZykpCisgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaW50IHNpemU7CisgICAgICAgIGlmIChj
b250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwgKHl5dnNwWyg0
KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNpemUpKQorICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSku
c2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CisKKyAgICAgICAgVFR5cGUqIHR5cGUgPSBuZXcgVFR5cGUo
KHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKTsKKyAgICAgICAgVFBhcmFtZXRlciBwYXJh
bSA9IHsgKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsIHR5cGUgfTsKKyAgICAgICAgKHl5
dmFsLmludGVybSkucGFyYW0gPSBwYXJhbTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA4
MzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDMpIC0gKDMpXS5p
bnRlcm0pOworICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5eWxzcFsoMykg
LSAoMyldKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciwgKHl5dnNw
WygyKSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRlcm0pLnBhcmFtLnR5cGUp
KQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgIH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDg0OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMikg
LSAoMildLmludGVybSk7CisgICAgICAgIGlmIChjb250ZXh0LT5wYXJhbWV0ZXJTYW1wbGVyRXJy
b3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksICh5eXZzcFsoMSkgLSAoMildLmludGVybS5xdWFs
aWZpZXIpLCAqKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKS5wYXJhbS50eXBlKSkKKyAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JD
aGVjaygoeXlsc3BbKDIpIC0gKDIpXSksIEV2cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICgyKV0u
aW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRlcm0pLnBhcmFtLnR5cGUpKQorICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDg1Ogor
CisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMykgLSAoMyldLmludGVy
bSk7CisgICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICgz
KV0pLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyLCAoeXl2c3BbKDIp
IC0gKDMpXS5pbnRlcm0ucXVhbGlmaWVyKSwgKHl5dmFsLmludGVybSkucGFyYW0udHlwZSkpCisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNh
c2UgODY6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygyKSAtICgy
KV0uaW50ZXJtKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtZXRlclNhbXBsZXJFcnJvckNo
ZWNrKCh5eWxzcFsoMikgLSAoMildKSwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnF1YWxpZmll
ciksICooeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNr
KCh5eWxzcFsoMikgLSAoMildKSwgRXZxVGVtcG9yYXJ5LCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0ucXVhbGlmaWVyKSwgKHl5dmFsLmludGVybSkucGFyYW0udHlwZSkpCisgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgODc6CisKKyAg
ICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cUluOworICAgIH0KKyAg
ICBicmVhazsKKworICBjYXNlIDg4OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnF1
YWxpZmllcikgPSBFdnFJbjsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA4OToKKworICAg
IHsKKyAgICAgICAgKHl5dmFsLmludGVybS5xdWFsaWZpZXIpID0gRXZxT3V0OworICAgIH0KKyAg
ICBicmVhazsKKworICBjYXNlIDkwOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnF1
YWxpZmllcikgPSBFdnFJbk91dDsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5MToKKwor
ICAgIHsKKyAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBlKCh5eXZzcFso
MSkgLSAoMSldLmludGVybS50eXBlKSkgfTsKKyAgICAgICAgKHl5dmFsLmludGVybSkucGFyYW0g
PSBwYXJhbTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5MjoKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pOworICAgIH0KKyAg
ICBicmVhazsKKworICBjYXNlIDkzOgorCisgICAgeworICAgICAgICBpZiAoKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtKS50eXBlLnR5cGUgPT0gRWJ0SW52YXJpYW50ICYmICEoeXl2c3BbKDMpIC0g
KDMpXS5sZXgpLnN5bWJvbCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
KHl5bHNwWygzKSAtICgzKV0pLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGlu
dmFyaWFudCIsICh5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIFRJbnRlcm1T
eW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZz
cFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0p
LnR5cGUpLCAoeXlsc3BbKDMpIC0gKDMpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRl
cm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0pLmludGVybU5vZGUsIHN5bWJvbCwgKHl5bHNwWygzKSAtICgzKV0p
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNo
ZWNrKCh5eWxzcFsoMykgLSAoMyldKSwgKHl5dmFsLmludGVybSkudHlwZSkpCisgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25z
dEVycm9yQ2hlY2soKHl5bHNwWygzKSAtICgzKV0pLCAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5z
dHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5cGUsIGZhbHNlKSkKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKworICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKKyAgICAgICAg
aWYgKGNvbnRleHQtPm5vbkluaXRFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoMyldKSwgKih5eXZz
cFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2YWwuaW50ZXJtKS50eXBlLCB2YXJpYWJsZSkp
CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChzeW1ib2wgJiYg
dmFyaWFibGUpCisgICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJ
ZCgpKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5NDoKKworICAgIHsKKyAgICAgICAg
aWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0p
LCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNr
KCh5eWxzcFsoMykgLSAoNSldKSwgKih5eXZzcFsoMykgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2
c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUsIHRydWUpKQorICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworCisgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICg1KV0u
aW50ZXJtKTsKKworICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXls
c3BbKDQpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSkgfHwgY29udGV4
dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoNCkgLSAoNSldKSwgKHl5dnNwWygx
KSAtICg1KV0uaW50ZXJtKS50eXBlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5
cGUuc2V0QXJyYXkodHJ1ZSk7CisgICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlOworICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygoeXlsc3BbKDQpIC0gKDUpXSks
ICooeXl2c3BbKDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJt
KS50eXBlLCB2YXJpYWJsZSkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgOTU6CisKKyAgICB7CisgICAg
ICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAo
NildKSwgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50eXBlKSkKKyAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKKworICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JD
aGVjaygoeXlsc3BbKDMpIC0gKDYpXSksICooeXl2c3BbKDMpIC0gKDYpXS5sZXgpLnN0cmluZywg
KHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50eXBlLCB0cnVlKSkKKyAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKKworICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAo
NildLmludGVybSk7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2so
KHl5bHNwWyg0KSAtICg2KV0pLCAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUpIHx8IGNv
bnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDQpIC0gKDYpXSksICh5eXZz
cFsoMSkgLSAoNildLmludGVybSkudHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW50IHNpemU7CisgICAgICAgICAgICBp
ZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygoeXlsc3BbKDQpIC0gKDYpXSksICh5eXZz
cFsoNSkgLSAoNildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBzaXplKSkKKyAgICAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDYpXS5p
bnRlcm0pLnR5cGUuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CisgICAgICAgICAgICBUVmFyaWFibGUq
IHZhcmlhYmxlID0gMDsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheUVycm9yQ2hlY2so
KHl5bHNwWyg0KSAtICg2KV0pLCAqKHl5dnNwWygzKSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eXZz
cFsoMSkgLSAoNildLmludGVybSkudHlwZSwgdmFyaWFibGUpKQorICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIFRUeXBlIHR5cGUgPSBUVHlwZSgoeXl2c3Bb
KDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUpOworICAgICAgICAgICAgdHlwZS5zZXRBcnJheVNpemUo
c2l6ZSk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0p
LmludGVybU5vZGUsIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUgPyB2
YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSA6IDAsICooeXl2c3BbKDMpIC0gKDYpXS5sZXgpLnN0cmlu
ZywgdHlwZSwgKHl5bHNwWygzKSAtICg2KV0pKSwgKHl5bHNwWygzKSAtICg2KV0pKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDk2OgorCisgICAgeworICAgICAgICBp
ZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDUpXSks
ICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisKKyAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDUpXS5p
bnRlcm0pOworCisgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOworICAgICAgICBpZiAo
IWNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigoeXlsc3BbKDMpIC0gKDUpXSksICooeXl2c3Bb
KDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlLCAo
eXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW50ZXJtTm9kZSkpIHsK
KyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBidWlsZCB0aGUgaW50ZXJtZWRpYXRlIHJl
cHJlc2VudGF0aW9uCisgICAgICAgICAgICAvLworICAgICAgICAgICAgaWYgKGludGVybU5vZGUp
CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoNSldLmludGVybSkuaW50ZXJtTm9k
ZSwgaW50ZXJtTm9kZSwgKHl5bHNwWyg0KSAtICg1KV0pKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAoeXl2c3BbKDEp
IC0gKDUpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmlu
dGVybUFnZ3JlZ2F0ZSA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSA5NzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS50eXBlKTsKKyAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVn
YXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZFN5bWJvbCgwLCAiIiwgVFR5cGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5
cGUpKSwgKHl5bHNwWygxKSAtICgxKV0pKSwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSA5ODoKKworICAgIHsKKyAgICAgICAgVEludGVybVN5bWJvbCog
c3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAt
ICgyKV0ubGV4KS5zdHJpbmcsIFRUeXBlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKSks
ICh5eWxzcFsoMikgLSAoMildKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3Jl
Z2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgKHl5bHNw
WygyKSAtICgyKV0pKTsKKyAgICAgICAgCisgICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFs
aWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgKHl5dmFsLmludGVybSkudHlwZSkp
CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQt
Pm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgyKV0pLCAqKHl5dnNwWygyKSAt
ICgyKV0ubGV4KS5zdHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5cGUsIGZhbHNlKSkKKyAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgKHl5dmFs
LmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKTsKKworICAgICAg
ICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKKyAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRF
cnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgKih5eXZzcFsoMikgLSAoMildLmxleCkuc3Ry
aW5nLCAoeXl2YWwuaW50ZXJtKS50eXBlLCB2YXJpYWJsZSkpCisgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCisgICAgICAgICAg
ICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSA5OToKKworICAgIHsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNw
WygyKSAtICg0KV0pLCAidW5zaXplZCBhcnJheSBkZWNsYXJhdGlvbnMgbm90IHN1cHBvcnRlZCIs
ICh5eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKKyAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworCisgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5n
LCBUVHlwZSgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpLCAoeXlsc3BbKDIpIC0gKDQp
XSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsICh5eWxzcFsoMikgLSAoNCldKSk7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlw
ZSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTAwOgorCisgICAgeworICAgICAgICBU
VHlwZSB0eXBlID0gVFR5cGUoKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKTsKKyAgICAg
ICAgaW50IHNpemU7CisgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5
eWxzcFsoMikgLSAoNSldKSwgKHl5dnNwWyg0KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSksIHNpemUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB0eXBl
LnNldEFycmF5U2l6ZShzaXplKTsKKyAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5z
dHJpbmcsIHR5cGUsICh5eWxzcFsoMikgLSAoNSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0p
LmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5
bWJvbCwgKHl5bHNwWygyKSAtICg1KV0pKTsKKyAgICAgICAgCisgICAgICAgIGlmIChjb250ZXh0
LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNSldKSwgKHl5dnNwWygx
KSAtICg1KV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KworICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygoeXlsc3BbKDIp
IC0gKDUpXSksICooeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1
KV0uaW50ZXJtLnR5cGUpLCB0cnVlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KworICAgICAgICAoeXl2YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICg1KV0uaW50ZXJt
LnR5cGUpOworCisgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eWxz
cFsoMykgLSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKSB8fCBjb250ZXh0
LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0pLCAoeXl2c3BbKDEp
IC0gKDUpXS5pbnRlcm0udHlwZSkpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludCBzaXplOworICAgICAgICAgICAgaWYgKGNv
bnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0pLCAoeXl2c3BbKDQp
IC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCisgICAgICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDUpXS5pbnRl
cm0udHlwZSkuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CisgICAgICAgICAgICBUVmFyaWFibGUqIHZh
cmlhYmxlID0gMDsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheUVycm9yQ2hlY2soKHl5
bHNwWygzKSAtICg1KV0pLCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFso
MSkgLSAoNSldLmludGVybS50eXBlKSwgdmFyaWFibGUpKQorICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCisgICAg
ICAgICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDE6CisKKyAgICB7CisgICAgICAg
IGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNCld
KSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKworICAgICAgICAoeXl2YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAt
ICg0KV0uaW50ZXJtLnR5cGUpOworCisgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOwor
ICAgICAgICBpZiAoIWNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigoeXlsc3BbKDIpIC0gKDQp
XSksICooeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg0KV0uaW50
ZXJtLnR5cGUpLCAoeXl2c3BbKDQpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW50
ZXJtTm9kZSkpIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQnVpbGQgaW50ZXJtZWRpYXRlIHJl
cHJlc2VudGF0aW9uCisgICAgICAgIC8vCisgICAgICAgICAgICBpZihpbnRlcm1Ob2RlKQorICAg
ICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKGludGVybU5vZGUsICh5eWxzcFsoMykgLSAoNCldKSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJt
QWdncmVnYXRlID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IDA7
CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDI6CisKKyAgICB7Cisg
ICAgICAgIFZFUlRFWF9PTkxZKCJpbnZhcmlhbnQgZGVjbGFyYXRpb24iLCAoeXlsc3BbKDEpIC0g
KDIpXSkpOworICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXlsc3BbKDEp
IC0gKDIpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImludmFyaWFu
dCB2YXJ5aW5nIikpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0pLnR5cGUuc2V0QmFzaWMoRWJ0SW52YXJpYW50LCBFdnFJbnZhcmlhbnRWYXJ5
aW5nT3V0LCAoeXlsc3BbKDIpIC0gKDIpXSkpOworICAgICAgICBpZiAoISh5eXZzcFsoMikgLSAo
MildLmxleCkuc3ltYm9sKQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXlsc3BbKDIpIC0gKDIpXSksICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52
YXJpYW50IiwgKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOworICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcs
IFRUeXBlKCh5eXZhbC5pbnRlcm0pLnR5cGUpLCAoeXlsc3BbKDIpIC0gKDIpXSkpOworICAgICAg
ICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCAoeXlsc3BbKDIpIC0gKDIpXSkpOworICAgICAgICB9
CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTAzOgorCisgICAgeworICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOworCisgICAg
ICAgIGlmICgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuYXJyYXkpIHsKKyAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgIm5vdCBzdXBwb3J0ZWQiLCAi
Zmlyc3QtY2xhc3MgYXJyYXkiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgICAgICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zZXRBcnJheShmYWxzZSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDQ6CisKKyAgICB7Cisg
ICAgICAgIGlmICgoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkuYXJyYXkpIHsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgIm5vdCBzdXBwb3J0ZWQi
LCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgICAgICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5zZXRBcnJheShmYWxz
ZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5
cGUpLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUgJiYKKyAgICAgICAgICAgICgoeXl2c3BbKDIp
IC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRCb29sIHx8ICh5eXZzcFsoMikgLSAoMild
LmludGVybS50eXBlKS50eXBlID09IEVidEludCkpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eWxzcFsoMikgLSAoMildKSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxp
ZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSk7Cisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCgo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyID09IEV2cVZhcnlpbmdJbiB8
fCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyID09IEV2cVZhcnlpbmdP
dXQpICYmCisgICAgICAgICAgICAoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUg
PT0gRWJ0Qm9vbCB8fCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRJ
bnQpKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICJj
YW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAtICgy
KV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcikpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICB9CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDIp
IC0gKDIpXS5pbnRlcm0udHlwZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucXVhbGlm
aWVyID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcjsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxMDU6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxQ29uc3QsICh5eWxzcFsoMSkgLSAoMSldKSk7Cisg
ICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTA2OgorCisgICAgeworICAgICAgICBWRVJURVhf
T05MWSgiYXR0cmlidXRlIiwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgaWYgKGNvbnRl
eHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgxKV0pLCBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCksICJhdHRyaWJ1dGUiKSkKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lk
LCBFdnFBdHRyaWJ1dGUsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgMTA3OgorCisgICAgeworICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JD
aGVjaygoeXlsc3BbKDEpIC0gKDEpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2
ZWwoKSwgInZhcnlpbmciKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUikKKyAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVmFyeWluZ091dCwg
KHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFWYXJ5aW5nSW4sICh5eWxzcFsoMSkgLSAo
MSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTA4OgorCisgICAgeworICAgICAg
ICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDIpXSksIGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImludmFyaWFudCB2YXJ5aW5nIikpCisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChjb250ZXh0LT5zaGFk
ZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFyaWFudFZhcnlpbmdPdXQsICh5eWxzcFsoMSkg
LSAoMildKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSku
c2V0QmFzaWMoRWJ0Vm9pZCwgRXZxSW52YXJpYW50VmFyeWluZ0luLCAoeXlsc3BbKDEpIC0gKDIp
XSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEwOToKKworICAgIHsKKyAgICAgICAg
aWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgxKV0pLCBjb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ1bmlmb3JtIikpCisgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMo
RWJ0Vm9pZCwgRXZxVW5pZm9ybSwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxMTA6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7CisKKyAgICAgICAgaWYgKCh5eXZhbC5p
bnRlcm0udHlwZSkucHJlY2lzaW9uID09IEVicFVuZGVmaW5lZCkgeworICAgICAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5wcmVjaXNpb24gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5nZXREZWZh
dWx0UHJlY2lzaW9uKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS50eXBlKTsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5wcmVjaXNpb25FcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSld
KSwgKHl5dmFsLmludGVybS50eXBlKS5wcmVjaXNpb24sICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS50eXBlKS50eXBlKSkgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDExMToK
KworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMikgLSAoMild
LmludGVybS50eXBlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5wcmVjaXNpb24gPSAo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0ucHJlY2lzaW9uKTsKKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxMTI6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ucHJlY2lzaW9uKSA9
IEVicEhpZ2g7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTEzOgorCisgICAgeworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnByZWNpc2lvbikgPSBFYnBNZWRpdW07CisgICAgfQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTE0OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnByZWNp
c2lvbikgPSBFYnBMb3c7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTE1OgorCisgICAg
eworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LnR5cGUpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDExNjoKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKTsK
KworICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0g
KDQpXSksICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSkpCisgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW50IHNpemU7Cisg
ICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0g
KDQpXSksICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBzaXplKSkK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLnNldEFycmF5KHRydWUsIHNpemUpOworICAgICAgICB9CisgICAgfQorICAg
IGJyZWFrOworCisgIGNhc2UgMTE3OgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwg
PSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwg
cXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAx
MTg6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAt
ICgxKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTk6CisKKyAgICB7CisgICAg
ICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAg
IGJyZWFrOworCisgIGNhc2UgMTIwOgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwg
PSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwg
cXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAx
MjE6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAt
ICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMik7Cisg
ICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTIyOgorCisgICAgeworICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMo
RWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEy
MzoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0g
KDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjQ6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZp
ZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2Jh
bCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhF
YnRCb29sLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnNldEFnZ3JlZ2F0ZSgyKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjU6
CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEp
XSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgzKTsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjY6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRC
b29sLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjc6CisK
KyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0
R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDIpOworICAgIH0KKyAg
ICBicmVhazsKKworICBjYXNlIDEyODoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEludCwg
cXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5z
ZXRBZ2dyZWdhdGUoMyk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTI5OgorCisgICAg
eworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2Jh
bExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxMzA6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVh
bCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRB
Z2dyZWdhdGUoMiwgdHJ1ZSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTMxOgorCisg
ICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMsIHRydWUpOworICAg
IH0KKyAgICBicmVhazsKKworICBjYXNlIDEzMjoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmll
ciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFs
IDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVi
dEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnNldEFnZ3JlZ2F0ZSg0LCB0cnVlKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAxMzM6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyMkQsIHF1YWwsICh5eWxz
cFsoMSkgLSAoMSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTM0OgorCisgICAg
eworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2Jh
bExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkuc2V0QmFzaWMoRWJ0U2FtcGxlckN1YmUsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSld
KSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTM1OgorCisgICAgeworICAgICAgICBp
ZiAoIWNvbnRleHQtPnN1cHBvcnRzRXh0ZW5zaW9uKCJHTF9PRVNfRUdMX2ltYWdlX2V4dGVybmFs
IikpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgInVu
c3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlckV4dGVybmFsT0VTIik7CisgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNhbXBsZXJFeHRl
cm5hbE9FUywgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxMzY6CisKKyAgICB7CisgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNFeHRl
bnNpb24oIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIpKSB7CisgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSksICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXIy
RFJlY3QiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0U2FtcGxlcjJEUmVjdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsK
KyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzc6CisKKyAgICB7CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkucXVhbGlmaWVyID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRH
bG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgIH0KKyAgICBicmVh
azsKKworICBjYXNlIDEzODoKKworICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhpcyBp
cyBmb3IgdXNlciBkZWZpbmVkIHR5cGUgbmFtZXMuICBUaGUgbGV4aWNhbCBwaGFzZSBsb29rZWQg
dXAgdGhlCisgICAgICAgIC8vIHR5cGUuCisgICAgICAgIC8vCisgICAgICAgIFRUeXBlJiBzdHJ1
Y3R1cmUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN5
bWJvbCktPmdldFR5cGUoKTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFN0cnVjdCwgcXVhbCwgKHl5bHNw
WygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS51c2VyRGVmID0gJnN0
cnVjdHVyZTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzk6CisKKyAgICB7IGlmIChj
b250ZXh0LT5lbnRlclN0cnVjdERlY2xhcmF0aW9uKCh5eWxzcFsoMikgLSAoMyldKSwgKih5eXZz
cFsoMikgLSAoMyldLmxleCkuc3RyaW5nKSkgY29udGV4dC0+cmVjb3ZlcigpOyB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxNDA6CisKKyAgICB7CisgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZl
ZEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg2KV0pLCAqKHl5dnNwWygyKSAtICg2KV0ubGV4KS5z
dHJpbmcpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIFRUeXBl
KiBzdHJ1Y3R1cmUgPSBuZXcgVFR5cGUobmV3IFRTdHJ1Y3R1cmUoKHl5dnNwWygyKSAtICg2KV0u
bGV4KS5zdHJpbmcsICh5eXZzcFsoNSkgLSAoNildLmludGVybS5maWVsZExpc3QpKSk7CisgICAg
ICAgIFRWYXJpYWJsZSogdXNlclR5cGVEZWYgPSBuZXcgVFZhcmlhYmxlKCh5eXZzcFsoMikgLSAo
NildLmxleCkuc3RyaW5nLCAqc3RydWN0dXJlLCB0cnVlKTsKKyAgICAgICAgaWYgKCEgY29udGV4
dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp1c2VyVHlwZURlZikpIHsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eWxzcFsoMikgLSAoNildKSwgInJlZGVmaW5pdGlvbiIsICh5eXZzcFsoMikg
LSAoNildLmxleCkuc3RyaW5nLT5jX3N0cigpLCAic3RydWN0Iik7CisgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5z
ZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgKHl5bHNwWygxKSAtICg2KV0pKTsKKyAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKS51c2VyRGVmID0gc3RydWN0dXJlOworICAgICAgICBj
b250ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAxNDE6CisKKyAgICB7IGlmIChjb250ZXh0LT5lbnRlclN0cnVjdERlY2xhcmF0aW9uKCh5
eWxzcFsoMikgLSAoMildKSwgKih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nKSkgY29udGV4
dC0+cmVjb3ZlcigpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDI6CisKKyAgICB7CisgICAg
ICAgIFRUeXBlKiBzdHJ1Y3R1cmUgPSBuZXcgVFR5cGUobmV3IFRTdHJ1Y3R1cmUoTmV3UG9vbFRT
dHJpbmcoIiIpLCAoeXl2c3BbKDQpIC0gKDUpXS5pbnRlcm0uZmllbGRMaXN0KSkpOworICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFN0cnVjdCwgRXZxVGVtcG9yYXJ5LCAo
eXlsc3BbKDEpIC0gKDUpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnVzZXJEZWYg
PSBzdHJ1Y3R1cmU7CisgICAgICAgIGNvbnRleHQtPmV4aXRTdHJ1Y3REZWNsYXJhdGlvbigpOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE0MzoKKworICAgIHsKKyAgICAgICAgKHl5dmFs
LmludGVybS5maWVsZExpc3QpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmZpZWxkTGlzdCk7
CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTQ0OgorCisgICAgeworICAgICAgICAoeXl2
YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZmllbGRMaXN0
KTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRl
cm0uZmllbGRMaXN0KS0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIFRGaWVsZCogZmllbGQg
PSAoKih5eXZzcFsoMikgLSAoMildLmludGVybS5maWVsZExpc3QpKVtpXTsKKyAgICAgICAgICAg
IGZvciAoc2l6ZV90IGogPSAwOyBqIDwgKHl5dmFsLmludGVybS5maWVsZExpc3QpLT5zaXplKCk7
ICsraikgeworICAgICAgICAgICAgICAgIGlmICgoKih5eXZhbC5pbnRlcm0uZmllbGRMaXN0KSlb
al0tPm5hbWUoKSA9PSBmaWVsZC0+bmFtZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgImR1cGxpY2F0ZSBmaWVsZCBuYW1lIGluIHN0
cnVjdHVyZToiLCAic3RydWN0IiwgZmllbGQtPm5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0KS0+cHVzaF9iYWNrKGZp
ZWxkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE0NToKKworICAg
IHsKKyAgICAgICAgKHl5dmFsLmludGVybS5maWVsZExpc3QpID0gKHl5dnNwWygyKSAtICgzKV0u
aW50ZXJtLmZpZWxkTGlzdCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPnZvaWRFcnJvckNoZWNr
KCh5eWxzcFsoMSkgLSAoMyldKSwgKCooeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uZmllbGRMaXN0
KSlbMF0tPm5hbWUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpKSkgeworICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgKHl5dmFsLmludGVybS5maWVsZExpc3QpLT5zaXplKCk7ICsraSkg
eworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIENhcmVmdWwgbm90IHRvIHJlcGxhY2Ug
YWxyZWFkeSBrbm93biBhc3BlY3RzIG9mIHR5cGUsIGxpa2UgYXJyYXktbmVzcworICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgIFRUeXBlKiB0eXBlID0gKCooeXl2YWwuaW50ZXJtLmZpZWxkTGlz
dCkpW2ldLT50eXBlKCk7CisgICAgICAgICAgICB0eXBlLT5zZXRCYXNpY1R5cGUoKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLnR5cGUpLnR5cGUpOworICAgICAgICAgICAgdHlwZS0+c2V0Tm9taW5h
bFNpemUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnNpemUpOworICAgICAgICAgICAg
dHlwZS0+c2V0TWF0cml4KCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5tYXRyaXgpOwor
ICAgICAgICAgICAgdHlwZS0+c2V0UHJlY2lzaW9uKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50
eXBlKS5wcmVjaXNpb24pOworCisgICAgICAgICAgICAvLyBkb24ndCBhbGxvdyBhcnJheXMgb2Yg
YXJyYXlzCisgICAgICAgICAgICBpZiAodHlwZS0+aXNBcnJheSgpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgzKV0pLCAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkpKQorICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLnR5cGUpLmFycmF5KQorICAgICAgICAgICAgICAgIHR5cGUtPnNldEFy
cmF5U2l6ZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkuYXJyYXlTaXplKTsKKyAgICAg
ICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkudXNlckRlZikKKyAgICAg
ICAgICAgICAgICB0eXBlLT5zZXRTdHJ1Y3QoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUp
LnVzZXJEZWYtPmdldFN0cnVjdCgpKTsKKworICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVj
dE5lc3RpbmdFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMyldKSwgKigqKHl5dmFsLmludGVybS5m
aWVsZExpc3QpKVtpXSkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTQ2OgorCisgICAgeworICAgICAg
ICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSBOZXdQb29sVEZpZWxkTGlzdCgpOworICAgICAg
ICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uZmllbGQpKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDc6CisKKyAgICB7
CisgICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMykg
LSAoMyldLmludGVybS5maWVsZCkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE0ODoK
KworICAgIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygoeXlsc3Bb
KDEpIC0gKDEpXSksICooeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZykpCisgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgVFR5cGUqIHR5cGUgPSBuZXcgVFR5cGUo
RWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5maWVsZCkgPSBu
ZXcgVEZpZWxkKHR5cGUsICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxNDk6CisKKyAgICB7CisgICAgICAgIGlmIChjb250ZXh0LT5y
ZXNlcnZlZEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICg0KV0pLCAqKHl5dnNwWygxKSAtICg0KV0u
bGV4KS5zdHJpbmcpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAg
IFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7CisgICAgICAg
IGludCBzaXplID0gMDsKKyAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2so
KHl5bHNwWygzKSAtICg0KV0pLCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgc2l6ZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIHR5
cGUtPnNldEFycmF5U2l6ZShzaXplKTsKKworICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkKSA9
IG5ldyBURmllbGQodHlwZSwgKHl5dnNwWygxKSAtICg0KV0ubGV4KS5zdHJpbmcpOworICAgIH0K
KyAgICBicmVhazsKKworICBjYXNlIDE1MDoKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0K
KyAgICBicmVhazsKKworICBjYXNlIDE1MToKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1O
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQorICAgIGJyZWFr
OworCisgIGNhc2UgMTUyOgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSk7IH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDE1MzoKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTU0
OgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybU5vZGUpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNTU6CisKKyAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50
ZXJtTm9kZSk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDE1NjoKKworICAgIHsgKHl5dmFsLmlu
dGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsg
fQorICAgIGJyZWFrOworCisgIGNhc2UgMTU3OgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxNTg6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KKyAgICBicmVhazsKKworICBj
YXNlIDE1OToKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gMDsgfQor
ICAgIGJyZWFrOworCisgIGNhc2UgMTYwOgorCisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5w
dXNoKCk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDE2MToKKworICAgIHsgY29udGV4dC0+c3lt
Ym9sVGFibGUucG9wKCk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDE2MjoKKworICAgIHsKKyAg
ICAgICAgaWYgKCh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpICE9IDAp
IHsKKyAgICAgICAgICAgICh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUp
LT5zZXRPcChFT3BTZXF1ZW5jZSk7CisgICAgICAgICAgICAoeXl2c3BbKDMpIC0gKDUpXS5pbnRl
cm0uaW50ZXJtQWdncmVnYXRlKS0+c2V0TGluZSgoeXlsb2MpKTsKKyAgICAgICAgfQorICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgPSAoeXl2c3BbKDMpIC0gKDUpXS5pbnRl
cm0uaW50ZXJtQWdncmVnYXRlKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNjM6CisK
KyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtTm9kZSk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDE2NDoKKworICAgIHsgKHl5
dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1O
b2RlKTsgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTY1OgorCisgICAgeyBjb250ZXh0LT5zeW1i
b2xUYWJsZS5wdXNoKCk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDE2NjoKKworICAgIHsgY29u
dGV4dC0+c3ltYm9sVGFibGUucG9wKCk7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2
c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KKyAgICBicmVhazsKKworICBjYXNl
IDE2NzoKKworICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyB9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAxNjg6CisKKyAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOyAoeXl2
YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybU5v
ZGUpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNjk6CisKKyAgICB7CisgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE3
MDoKKworICAgIHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1B
Z2dyZWdhdGUpKSB7CisgICAgICAgICAgICAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
QWdncmVnYXRlKS0+c2V0T3AoRU9wU2VxdWVuY2UpOworICAgICAgICAgICAgKHl5dnNwWygyKSAt
ICgzKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSktPnNldExpbmUoKHl5bG9jKSk7CisgICAgICAg
IH0KKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMikgLSAoMyld
LmludGVybS5pbnRlcm1BZ2dyZWdhdGUpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE3
MToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybU5vZGUpLCAoeXlsb2MpKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNzI6
CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS5p
bnRlcm1BZ2dyZWdhdGUpLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5
eWxvYykpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE3MzoKKworICAgIHsgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKSA9IDA7IH0KKyAgICBicmVhazsKKworICBjYXNlIDE3NDoKKwor
ICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IHN0YXRpY19jYXN0PFRJbnRlcm1Ob2Rl
Kj4oKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpOyB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxNzU6CisKKyAgICB7CisgICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJy
b3JDaGVjaygoeXlsc3BbKDEpIC0gKDUpXSksICh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTZWxl
Y3Rpb24oKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFso
NSkgLSAoNSldLmludGVybS5ub2RlUGFpciksICh5eWxzcFsoMSkgLSAoNSldKSk7CisgICAgfQor
ICAgIGJyZWFrOworCisgIGNhc2UgMTc2OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJt
Lm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1Ob2RlKTsK
KyAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTIgPSAoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtTm9kZSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTc3Ogor
CisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5ub2Rl
UGFpcikubm9kZTIgPSAwOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE3ODoKKworICAg
IHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgICAgIGlmIChjb250ZXh0LT5ib29s
RXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0
TGluZSgpLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCisgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2Ug
MTc5OgorCisgICAgeworICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKKyAgICAgICAg
aWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg0KV0p
LCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpKQorICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2soKHl5bHNwWygy
KSAtICg0KV0pLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpKQorICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmICghY29udGV4dC0+ZXhlY3V0ZUluaXRp
YWxpemVyKCh5eWxzcFsoMikgLSAoNCldKSwgKih5eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5n
LCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSksICh5eXZzcFsoNCkgLSAoNCldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCBpbnRlcm1Ob2RlKSkKKyAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoNCkgLSAoNCldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IDA7CisgICAgICAg
IH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxODA6CisKKyAgICB7IGNvbnRleHQtPnN5
bWJvbFRhYmxlLnB1c2goKTsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxODE6CisKKyAgICB7CisgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxl
LnBvcCgpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZExvb3AoRUxvb3BXaGlsZSwgMCwgKHl5dnNwWyg0KSAtICg2KV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksIDAsICh5eXZzcFsoNikgLSAoNildLmludGVybS5pbnRlcm1Ob2Rl
KSwgKHl5bHNwWygxKSAtICg2KV0pKTsKKyAgICAgICAgLS1jb250ZXh0LT5sb29wTmVzdGluZ0xl
dmVsOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE4MjoKKworICAgIHsgKytjb250ZXh0
LT5sb29wTmVzdGluZ0xldmVsOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxODM6CisKKyAgICB7
CisgICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVjaygoeXlsc3BbKDgpIC0gKDgpXSks
ICh5eXZzcFsoNikgLSAoOCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKKyAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUp
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3AoRUxvb3BEb1doaWxlLCAwLCAoeXl2c3Bb
KDYpIC0gKDgpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgMCwgKHl5dnNwWygzKSAtICg4KV0u
aW50ZXJtLmludGVybU5vZGUpLCAoeXlsc3BbKDQpIC0gKDgpXSkpOworICAgICAgICAtLWNvbnRl
eHQtPmxvb3BOZXN0aW5nTGV2ZWw7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTg0Ogor
CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7ICsrY29udGV4dC0+bG9vcE5lc3Rp
bmdMZXZlbDsgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTg1OgorCisgICAgeworICAgICAgICBj
b250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1O
b2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRMb29wKEVMb29wRm9yLCAoeXl2c3BbKDQp
IC0gKDcpXS5pbnRlcm0uaW50ZXJtTm9kZSksIHJlaW50ZXJwcmV0X2Nhc3Q8VEludGVybVR5cGVk
Kj4oKHl5dnNwWyg1KSAtICg3KV0uaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSksIHJlaW50ZXJwcmV0
X2Nhc3Q8VEludGVybVR5cGVkKj4oKHl5dnNwWyg1KSAtICg3KV0uaW50ZXJtLm5vZGVQYWlyKS5u
b2RlMiksICh5eXZzcFsoNykgLSAoNyldLmludGVybS5pbnRlcm1Ob2RlKSwgKHl5bHNwWygxKSAt
ICg3KV0pKTsKKyAgICAgICAgLS1jb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOworICAgIH0KKyAg
ICBicmVhazsKKworICBjYXNlIDE4NjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxODc6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7Cisg
ICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTg4OgorCisgICAgeworICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxODk6CisKKyAgICB7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IDA7CisgICAgfQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTkwOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQ
YWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwor
ICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMiA9IDA7CisgICAgfQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTkxOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQ
YWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwor
ICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMiA9ICh5eXZzcFsoMykgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE5
MjoKKworICAgIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPD0gMCkg
eworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgyKV0pLCAiY29udGlu
dWUgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIiKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BDb250aW51ZSwgKHl5
bHNwWygxKSAtICgyKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxOTM6CisKKyAg
ICB7CisgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9IDApIHsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMildKSwgImJyZWFrIHN0YXRlbWVu
dCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wQnJlYWssICh5eWxzcFsoMSkgLSAoMild
KSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTk0OgorCisgICAgeworICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5j
aChFT3BSZXR1cm4sICh5eWxzcFsoMSkgLSAoMildKSk7CisgICAgICAgIGlmIChjb250ZXh0LT5j
dXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7CisgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDIpXSksICJub24tdm9pZCBmdW5jdGlv
biBtdXN0IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIpOworICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTk1Ogor
CisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1cm4sICh5eXZzcFsoMikgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDEpIC0gKDMpXSkpOworICAgICAgICBjb250ZXh0LT5m
dW5jdGlvblJldHVybnNWYWx1ZSA9IHRydWU7CisgICAgICAgIGlmIChjb250ZXh0LT5jdXJyZW50
RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkKSB7CisgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDMpXSksICJ2b2lkIGZ1bmN0aW9uIGNhbm5vdCBy
ZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgfSBlbHNlIGlmICgqKGNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUpICE9
ICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkpIHsK
KyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMyldKSwgImZ1bmN0aW9u
IHJldHVybiBpcyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0dXJuIik7CisgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAxOTY6CisKKyAgICB7CisgICAgICAgIEZSQUdfT05MWSgiZGlzY2FyZCIsICh5eWxzcFsoMSkg
LSAoMildKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcEtpbGwsICh5eWxzcFsoMSkgLSAoMildKSk7CisgICAg
fQorICAgIGJyZWFrOworCisgIGNhc2UgMTk3OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwor
ICAgICAgICBjb250ZXh0LT50cmVlUm9vdCA9ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSk7Cisg
ICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTk4OgorCisgICAgeworICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUo
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXl2c3BbKDIpIC0gKDIpXS5p
bnRlcm0uaW50ZXJtTm9kZSksICh5eWxvYykpOworICAgICAgICBjb250ZXh0LT50cmVlUm9vdCA9
ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2Ug
MTk5OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOworICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDIwMDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAyMDE6CisKKyAgICB7CisgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb24gPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmZ1bmN0aW9uOworICAgICAgICAKKyAgICAgICAgY29uc3Qg
VFN5bWJvbCAqYnVpbHRJbiA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKGZ1bmN0
aW9uLT5nZXRNYW5nbGVkTmFtZSgpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChidWlsdEluKQor
ICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSks
ICJidWlsdC1pbiBmdW5jdGlvbnMgY2Fubm90IGJlIHJlZGVmaW5lZCIsIGZ1bmN0aW9uLT5nZXRO
YW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRG
dW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoZnVuY3Rpb24tPmdldE1hbmdsZWRO
YW1lKCkpKTsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gTm90ZTogICdwcmV2RGVjJyBjb3VsZCBi
ZSAnZnVuY3Rpb24nIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUgc2VlbiBmdW5jdGlv
bgorICAgICAgICAvLyBhcyBpdCB3b3VsZCBoYXZlIGp1c3QgYmVlbiBwdXQgaW4gdGhlIHN5bWJv
bCB0YWJsZS4gIE90aGVyd2lzZSwgd2UncmUgbG9va2luZyB1cAorICAgICAgICAvLyBhbiBlYXJs
aWVyIG9jY3VyYW5jZS4KKyAgICAgICAgLy8KKyAgICAgICAgaWYgKHByZXZEZWMtPmlzRGVmaW5l
ZCgpKSB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVGhlbiB0aGlzIGZ1bmN0aW9u
IGFscmVhZHkgaGFzIGEgYm9keS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSksICJmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHki
LCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICB9CisgICAgICAgIHByZXZEZWMtPnNldERlZmluZWQoKTsKKworICAg
ICAgICAvLworICAgICAgICAvLyBSYWlzZSBlcnJvciBtZXNzYWdlIGlmIG1haW4gZnVuY3Rpb24g
dGFrZXMgYW55IHBhcmFtZXRlcnMgb3IgcmV0dXJuIGFueXRoaW5nIG90aGVyIHRoYW4gdm9pZAor
ICAgICAgICAvLworICAgICAgICBpZiAoZnVuY3Rpb24tPmdldE5hbWUoKSA9PSAibWFpbiIpIHsK
KyAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0UGFyYW1Db3VudCgpID4gMCkgeworICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgImZ1bmN0aW9uIGNh
bm5vdCB0YWtlIGFueSBwYXJhbWV0ZXIocykiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkp
OworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljVHlwZSgpICE9
IEVidFZvaWQpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0g
KDEpXSksICIiLCBmdW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCksICJt
YWluIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIpOworICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8v
CisgICAgICAgIC8vIFJlbWVtYmVyIHRoZSByZXR1cm4gdHlwZSBmb3IgbGF0ZXIgY2hlY2tpbmcg
Zm9yIFJFVFVSTiBzdGF0ZW1lbnRzLgorICAgICAgICAvLworICAgICAgICBjb250ZXh0LT5jdXJy
ZW50RnVuY3Rpb25UeXBlID0gJihwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkpOworICAgICAgICBj
b250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IGZhbHNlOworCisgICAgICAgIC8vCisgICAg
ICAgIC8vIEluc2VydCBwYXJhbWV0ZXJzIGludG8gdGhlIHN5bWJvbCB0YWJsZS4KKyAgICAgICAg
Ly8gSWYgdGhlIHBhcmFtZXRlciBoYXMgbm8gbmFtZSwgaXQncyBub3QgYW4gZXJyb3IsIGp1c3Qg
ZG9uJ3QgaW5zZXJ0IGl0CisgICAgICAgIC8vIChjb3VsZCBiZSB1c2VkIGZvciB1bnVzZWQgYXJn
cykuCisgICAgICAgIC8vCisgICAgICAgIC8vIEFsc28sIGFjY3VtdWxhdGUgdGhlIGxpc3Qgb2Yg
cGFyYW1ldGVycyBpbnRvIHRoZSBISUwsIHNvIGxvd2VyIGxldmVsIGNvZGUKKyAgICAgICAgLy8g
a25vd3Mgd2hlcmUgdG8gZmluZCBwYXJhbWV0ZXJzLgorICAgICAgICAvLworICAgICAgICBUSW50
ZXJtQWdncmVnYXRlKiBwYXJhbU5vZGVzID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGU7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb24tPmdldFBhcmFtQ291bnQoKTsgaSsrKSB7
CisgICAgICAgICAgICBjb25zdCBUUGFyYW1ldGVyJiBwYXJhbSA9IGZ1bmN0aW9uLT5nZXRQYXJh
bShpKTsKKyAgICAgICAgICAgIGlmIChwYXJhbS5uYW1lICE9IDApIHsKKyAgICAgICAgICAgICAg
ICBUVmFyaWFibGUgKnZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZShwYXJhbS5uYW1lLCAqcGFyYW0u
dHlwZSk7CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhl
IHBhcmFtZXRlcnMgd2l0aCBuYW1lIGluIHRoZSBzeW1ib2wgdGFibGUuCisgICAgICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQo
KnZhcmlhYmxlKSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3Bb
KDEpIC0gKDEpXSksICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkp
OworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAg
ICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAvLworICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyIHRvIHRoZSBISUwK
KyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIHBhcmFtTm9kZXMgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2
YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+
Z2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHl5bHNwWygxKSAtICgxKV0pKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcyA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKHBhcmFtTm9kZXMsIGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRTeW1ib2woMCwgIiIsICpwYXJhbS50eXBlLCAoeXlsc3BbKDEpIC0gKDEpXSkpLCAo
eXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNv
bnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcihwYXJhbU5vZGVzLCBFT3BQ
YXJhbWV0ZXJzLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IHBhcmFtTm9kZXM7CisgICAgICAgIGNvbnRleHQt
Pmxvb3BOZXN0aW5nTGV2ZWwgPSAwOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDIwMjoK
KworICAgIHsKKyAgICAgICAgLy8/PyBDaGVjayB0aGF0IGFsbCBwYXRocyByZXR1cm4gYSB2YWx1
ZSBpZiByZXR1cm4gdHlwZSAhPSB2b2lkID8KKyAgICAgICAgLy8gICBNYXkgYmUgYmVzdCBkb25l
IGFzIHBvc3QgcHJvY2VzcyBwaGFzZSBvbiBpbnRlcm1lZGlhdGUgY29kZQorICAgICAgICBpZiAo
Y29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCAm
JiAhIGNvbnRleHQtPmZ1bmN0aW9uUmV0dXJuc1ZhbHVlKSB7CisgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXlsc3BbKDEpIC0gKDMpXSksICJmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYSB2
YWx1ZToiLCAiIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5mdW5jdGlvbi0+Z2V0TmFtZSgp
LmNfc3RyKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5pbnRlcm1B
Z2dyZWdhdGUsICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1Ob2RlKSwgKHl5bG9jKSk7
CisgICAgICAgIGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcigoeXl2
YWwuaW50ZXJtLmludGVybU5vZGUpLCBFT3BGdW5jdGlvbiwgKHl5bHNwWygxKSAtICgzKV0pKTsK
KyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0
TmFtZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmZ1bmN0aW9uLT5nZXRNYW5nbGVkTmFtZSgp
LmNfc3RyKCkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLT5nZXRBc0FnZ3Jl
Z2F0ZSgpLT5zZXRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybSkuZnVuY3Rpb24tPmdldFJl
dHVyblR5cGUoKSk7CisKKyAgICAgICAgLy8gc3RvcmUgdGhlIHByYWdtYSBpbmZvcm1hdGlvbiBm
b3IgZGVidWcgYW5kIG9wdGltaXplIGFuZCBvdGhlciB2ZW5kb3Igc3BlY2lmaWMKKyAgICAgICAg
Ly8gaW5mb3JtYXRpb24uIFRoaXMgaW5mb3JtYXRpb24gY2FuIGJlIHF1ZXJpZWQgZnJvbSB0aGUg
cGFyc2UgdHJlZQorICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLT5nZXRBc0FnZ3Jl
Z2F0ZSgpLT5zZXRPcHRpbWl6ZShjb250ZXh0LT5wcmFnbWEoKS5vcHRpbWl6ZSk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNldERlYnVnKGNv
bnRleHQtPnByYWdtYSgpLmRlYnVnKTsKKworICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5w
b3AoKTsKKyAgICB9CisgICAgYnJlYWs7CisKKworCisgICAgICBkZWZhdWx0OiBicmVhazsKKyAg
ICB9CisgIC8qIFVzZXIgc2VtYW50aWMgYWN0aW9ucyBzb21ldGltZXMgYWx0ZXIgeXljaGFyLCBh
bmQgdGhhdCByZXF1aXJlcworICAgICB0aGF0IHl5dG9rZW4gYmUgdXBkYXRlZCB3aXRoIHRoZSBu
ZXcgdHJhbnNsYXRpb24uICBXZSB0YWtlIHRoZQorICAgICBhcHByb2FjaCBvZiB0cmFuc2xhdGlu
ZyBpbW1lZGlhdGVseSBiZWZvcmUgZXZlcnkgdXNlIG9mIHl5dG9rZW4uCisgICAgIE9uZSBhbHRl
cm5hdGl2ZSBpcyB0cmFuc2xhdGluZyBoZXJlIGFmdGVyIGV2ZXJ5IHNlbWFudGljIGFjdGlvbiwK
KyAgICAgYnV0IHRoYXQgdHJhbnNsYXRpb24gd291bGQgYmUgbWlzc2VkIGlmIHRoZSBzZW1hbnRp
YyBhY3Rpb24gaW52b2tlcworICAgICBZWUFCT1JULCBZWUFDQ0VQVCwgb3IgWVlFUlJPUiBpbW1l
ZGlhdGVseSBhZnRlciBhbHRlcmluZyB5eWNoYXIgb3IKKyAgICAgaWYgaXQgaW52b2tlcyBZWUJB
Q0tVUC4gIEluIHRoZSBjYXNlIG9mIFlZQUJPUlQgb3IgWVlBQ0NFUFQsIGFuCisgICAgIGluY29y
cmVjdCBkZXN0cnVjdG9yIG1pZ2h0IHRoZW4gYmUgaW52b2tlZCBpbW1lZGlhdGVseS4gIEluIHRo
ZQorICAgICBjYXNlIG9mIFlZRVJST1Igb3IgWVlCQUNLVVAsIHN1YnNlcXVlbnQgcGFyc2VyIGFj
dGlvbnMgbWlnaHQgbGVhZAorICAgICB0byBhbiBpbmNvcnJlY3QgZGVzdHJ1Y3RvciBjYWxsIG9y
IHZlcmJvc2Ugc3ludGF4IGVycm9yIG1lc3NhZ2UKKyAgICAgYmVmb3JlIHRoZSBsb29rYWhlYWQg
aXMgdHJhbnNsYXRlZC4gICovCisgIFlZX1NZTUJPTF9QUklOVCAoIi0+ICQkID0iLCB5eXIxW3l5
bl0sICZ5eXZhbCwgJnl5bG9jKTsKKworICBZWVBPUFNUQUNLICh5eWxlbik7CisgIHl5bGVuID0g
MDsKKyAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKworICAqKyt5eXZzcCA9IHl5dmFs
OworICAqKyt5eWxzcCA9IHl5bG9jOworCisgIC8qIE5vdyBgc2hpZnQnIHRoZSByZXN1bHQgb2Yg
dGhlIHJlZHVjdGlvbi4gIERldGVybWluZSB3aGF0IHN0YXRlCisgICAgIHRoYXQgZ29lcyB0bywg
YmFzZWQgb24gdGhlIHN0YXRlIHdlIHBvcHBlZCBiYWNrIHRvIGFuZCB0aGUgcnVsZQorICAgICBu
dW1iZXIgcmVkdWNlZCBieS4gICovCisKKyAgeXluID0geXlyMVt5eW5dOworCisgIHl5c3RhdGUg
PSB5eXBnb3RvW3l5biAtIFlZTlRPS0VOU10gKyAqeXlzc3A7CisgIGlmICgwIDw9IHl5c3RhdGUg
JiYgeXlzdGF0ZSA8PSBZWUxBU1QgJiYgeXljaGVja1t5eXN0YXRlXSA9PSAqeXlzc3ApCisgICAg
eXlzdGF0ZSA9IHl5dGFibGVbeXlzdGF0ZV07CisgIGVsc2UKKyAgICB5eXN0YXRlID0geXlkZWZn
b3RvW3l5biAtIFlZTlRPS0VOU107CisKKyAgZ290byB5eW5ld3N0YXRlOworCisKKy8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWVycmxhYiAtLSBoZXJlIG9uIGRl
dGVjdGluZyBlcnJvciB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
K3l5ZXJybGFiOgorICAvKiBNYWtlIHN1cmUgd2UgaGF2ZSBsYXRlc3QgbG9va2FoZWFkIHRyYW5z
bGF0aW9uLiAgU2VlIGNvbW1lbnRzIGF0CisgICAgIHVzZXIgc2VtYW50aWMgYWN0aW9ucyBmb3Ig
d2h5IHRoaXMgaXMgbmVjZXNzYXJ5LiAgKi8KKyAgeXl0b2tlbiA9IHl5Y2hhciA9PSBZWUVNUFRZ
ID8gWVlFTVBUWSA6IFlZVFJBTlNMQVRFICh5eWNoYXIpOworCisgIC8qIElmIG5vdCBhbHJlYWR5
IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0IHRoaXMgZXJyb3IuICAqLworICBpZiAo
IXl5ZXJyc3RhdHVzKQorICAgIHsKKyAgICAgICsreXluZXJyczsKKyNpZiAhIFlZRVJST1JfVkVS
Qk9TRQorICAgICAgeXllcnJvciAoJnl5bGxvYywgY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3Ii
KSk7CisjZWxzZQorIyBkZWZpbmUgWVlTWU5UQVhfRVJST1IgeXlzeW50YXhfZXJyb3IgKCZ5eW1z
Z19hbGxvYywgJnl5bXNnLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeXlzc3AsIHl5dG9rZW4pCisgICAgICB7CisgICAgICAgIGNoYXIgY29uc3QgKnl5bXNncCA9
IFlZXygic3ludGF4IGVycm9yIik7CisgICAgICAgIGludCB5eXN5bnRheF9lcnJvcl9zdGF0dXM7
CisgICAgICAgIHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9IFlZU1lOVEFYX0VSUk9SOworICAgICAg
ICBpZiAoeXlzeW50YXhfZXJyb3Jfc3RhdHVzID09IDApCisgICAgICAgICAgeXltc2dwID0geXlt
c2c7CisgICAgICAgIGVsc2UgaWYgKHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9PSAxKQorICAgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKKyAgICAgICAgICAgICAg
WVlTVEFDS19GUkVFICh5eW1zZyk7CisgICAgICAgICAgICB5eW1zZyA9IChjaGFyICopIFlZU1RB
Q0tfQUxMT0MgKHl5bXNnX2FsbG9jKTsKKyAgICAgICAgICAgIGlmICgheXltc2cpCisgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICB5eW1zZyA9IHl5bXNnYnVmOworICAgICAgICAgICAg
ICAgIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOworICAgICAgICAgICAgICAgIHl5c3lu
dGF4X2Vycm9yX3N0YXR1cyA9IDI7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9
IFlZU1lOVEFYX0VSUk9SOworICAgICAgICAgICAgICAgIHl5bXNncCA9IHl5bXNnOworICAgICAg
ICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB5eWVycm9yICgmeXlsbG9jLCBjb250ZXh0
LCB5eW1zZ3ApOworICAgICAgICBpZiAoeXlzeW50YXhfZXJyb3Jfc3RhdHVzID09IDIpCisgICAg
ICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKKyAgICAgIH0KKyMgdW5kZWYgWVlTWU5UQVhfRVJS
T1IKKyNlbmRpZgorICAgIH0KKworICB5eWVycm9yX3JhbmdlWzFdID0geXlsbG9jOworCisgIGlm
ICh5eWVycnN0YXR1cyA9PSAzKQorICAgIHsKKyAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZh
aWxlZCB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgYW4KKwkgZXJyb3IsIGRpc2NhcmQg
aXQuICAqLworCisgICAgICBpZiAoeXljaGFyIDw9IFlZRU9GKQorCXsKKwkgIC8qIFJldHVybiBm
YWlsdXJlIGlmIGF0IGVuZCBvZiBpbnB1dC4gICovCisJICBpZiAoeXljaGFyID09IFlZRU9GKQor
CSAgICBZWUFCT1JUOworCX0KKyAgICAgIGVsc2UKKwl7CisJICB5eWRlc3RydWN0ICgiRXJyb3I6
IGRpc2NhcmRpbmciLAorCQkgICAgICB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jLCBjb250ZXh0
KTsKKwkgIHl5Y2hhciA9IFlZRU1QVFk7CisJfQorICAgIH0KKworICAvKiBFbHNlIHdpbGwgdHJ5
IHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKKyAgICAg
dG9rZW4uICAqLworICBnb3RvIHl5ZXJybGFiMTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJvcmxhYiAtLSBlcnJvciBy
YWlzZWQgZXhwbGljaXRseSBieSBZWUVSUk9SLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWVycm9ybGFiOgorCisgIC8qIFBhY2lm
eSBjb21waWxlcnMgbGlrZSBHQ0Mgd2hlbiB0aGUgdXNlciBjb2RlIG5ldmVyIGludm9rZXMKKyAg
ICAgWVlFUlJPUiBhbmQgdGhlIGxhYmVsIHl5ZXJyb3JsYWIgdGhlcmVmb3JlIG5ldmVyIGFwcGVh
cnMgaW4gdXNlcgorICAgICBjb2RlLiAgKi8KKyAgaWYgKC8qQ09OU1RDT05EKi8gMCkKKyAgICAg
Z290byB5eWVycm9ybGFiOworCisgIHl5ZXJyb3JfcmFuZ2VbMV0gPSB5eWxzcFsxLXl5bGVuXTsK
KyAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9u
IHRyaWdnZXJlZAorICAgICB0aGlzIFlZRVJST1IuICAqLworICBZWVBPUFNUQUNLICh5eWxlbik7
CisgIHl5bGVuID0gMDsKKyAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKyAgeXlzdGF0
ZSA9ICp5eXNzcDsKKyAgZ290byB5eWVycmxhYjE7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWVycmxhYjEg
LS0gY29tbW9uIGNvZGUgZm9yIGJvdGggc3ludGF4IGVycm9yIGFuZCBZWUVSUk9SLiAgfAorYC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLworeXllcnJsYWIxOgorICB5eWVycnN0YXR1cyA9IDM7CS8qIEVhY2ggcmVhbCB0b2tlbiBz
aGlmdGVkIGRlY3JlbWVudHMgdGhpcy4gICovCisKKyAgZm9yICg7OykKKyAgICB7CisgICAgICB5
eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisgICAgICBpZiAoIXl5cGFjdF92YWx1ZV9pc19kZWZhdWx0
ICh5eW4pKQorCXsKKwkgIHl5biArPSBZWVRFUlJPUjsKKwkgIGlmICgwIDw9IHl5biAmJiB5eW4g
PD0gWVlMQVNUICYmIHl5Y2hlY2tbeXluXSA9PSBZWVRFUlJPUikKKwkgICAgeworCSAgICAgIHl5
biA9IHl5dGFibGVbeXluXTsKKwkgICAgICBpZiAoMCA8IHl5bikKKwkJYnJlYWs7CisJICAgIH0K
Kwl9CisKKyAgICAgIC8qIFBvcCB0aGUgY3VycmVudCBzdGF0ZSBiZWNhdXNlIGl0IGNhbm5vdCBo
YW5kbGUgdGhlIGVycm9yIHRva2VuLiAgKi8KKyAgICAgIGlmICh5eXNzcCA9PSB5eXNzKQorCVlZ
QUJPUlQ7CisKKyAgICAgIHl5ZXJyb3JfcmFuZ2VbMV0gPSAqeXlsc3A7CisgICAgICB5eWRlc3Ry
dWN0ICgiRXJyb3I6IHBvcHBpbmciLAorCQkgIHl5c3Rvc1t5eXN0YXRlXSwgeXl2c3AsIHl5bHNw
LCBjb250ZXh0KTsKKyAgICAgIFlZUE9QU1RBQ0sgKDEpOworICAgICAgeXlzdGF0ZSA9ICp5eXNz
cDsKKyAgICAgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CisgICAgfQorCisgIFlZX0lH
Tk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOCisgICorK3l5dnNwID0geXlsdmFsOworICBZ
WV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9FTkQKKworICB5eWVycm9yX3JhbmdlWzJdID0g
eXlsbG9jOworICAvKiBVc2luZyBZWUxMT0MgaXMgdGVtcHRpbmcsIGJ1dCB3b3VsZCBjaGFuZ2Ug
dGhlIGxvY2F0aW9uIG9mCisgICAgIHRoZSBsb29rYWhlYWQuICBZWUxPQyBpcyBhdmFpbGFibGUg
dGhvdWdoLiAgKi8KKyAgWVlMTE9DX0RFRkFVTFQgKHl5bG9jLCB5eWVycm9yX3JhbmdlLCAyKTsK
KyAgKisreXlsc3AgPSB5eWxvYzsKKworICAvKiBTaGlmdCB0aGUgZXJyb3IgdG9rZW4uICAqLwor
ICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5c3Rvc1t5eW5dLCB5eXZzcCwgeXlsc3Ap
OworCisgIHl5c3RhdGUgPSB5eW47CisgIGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5YWNjZXB0bGFiIC0tIFlZQUNDRVBU
IGNvbWVzIGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
Cit5eWFjY2VwdGxhYjoKKyAgeXlyZXN1bHQgPSAwOworICBnb3RvIHl5cmV0dXJuOworCisvKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWFib3J0bGFiIC0tIFlZQUJP
UlQgY29tZXMgaGVyZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
Cit5eWFib3J0bGFiOgorICB5eXJlc3VsdCA9IDE7CisgIGdvdG8geXlyZXR1cm47CisKKyNpZiAh
ZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRQorLyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWV4aGF1c3RlZGxhYiAtLSBt
ZW1vcnkgZXhoYXVzdGlvbiBjb21lcyBoZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlleGhhdXN0ZWRsYWI6CisgIHl5ZXJyb3Ig
KCZ5eWxsb2MsIGNvbnRleHQsIFlZXygibWVtb3J5IGV4aGF1c3RlZCIpKTsKKyAgeXlyZXN1bHQg
PSAyOworICAvKiBGYWxsIHRocm91Z2guICAqLworI2VuZGlmCisKK3l5cmV0dXJuOgorICBpZiAo
eXljaGFyICE9IFlZRU1QVFkpCisgICAgeworICAgICAgLyogTWFrZSBzdXJlIHdlIGhhdmUgbGF0
ZXN0IGxvb2thaGVhZCB0cmFuc2xhdGlvbi4gIFNlZSBjb21tZW50cyBhdAorICAgICAgICAgdXNl
ciBzZW1hbnRpYyBhY3Rpb25zIGZvciB3aHkgdGhpcyBpcyBuZWNlc3NhcnkuICAqLworICAgICAg
eXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOworICAgICAgeXlkZXN0cnVjdCAoIkNsZWFu
dXA6IGRpc2NhcmRpbmcgbG9va2FoZWFkIiwKKyAgICAgICAgICAgICAgICAgIHl5dG9rZW4sICZ5
eWx2YWwsICZ5eWxsb2MsIGNvbnRleHQpOworICAgIH0KKyAgLyogRG8gbm90IHJlY2xhaW0gdGhl
IHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAorICAgICB0aGlzIFlZ
QUJPUlQgb3IgWVlBQ0NFUFQuICAqLworICBZWVBPUFNUQUNLICh5eWxlbik7CisgIFlZX1NUQUNL
X1BSSU5UICh5eXNzLCB5eXNzcCk7CisgIHdoaWxlICh5eXNzcCAhPSB5eXNzKQorICAgIHsKKyAg
ICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBwb3BwaW5nIiwKKwkJICB5eXN0b3NbKnl5c3NwXSwg
eXl2c3AsIHl5bHNwLCBjb250ZXh0KTsKKyAgICAgIFlZUE9QU1RBQ0sgKDEpOworICAgIH0KKyNp
Zm5kZWYgeXlvdmVyZmxvdworICBpZiAoeXlzcyAhPSB5eXNzYSkKKyAgICBZWVNUQUNLX0ZSRUUg
KHl5c3MpOworI2VuZGlmCisjaWYgWVlFUlJPUl9WRVJCT1NFCisgIGlmICh5eW1zZyAhPSB5eW1z
Z2J1ZikKKyAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKKyNlbmRpZgorICAvKiBNYWtlIHN1cmUg
WVlJRCBpcyB1c2VkLiAgKi8KKyAgcmV0dXJuIFlZSUQgKHl5cmVzdWx0KTsKK30KKworCisKKwor
CitpbnQgZ2xzbGFuZ19wYXJzZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7CisgICAgcmV0dXJu
IHl5cGFyc2UoY29udGV4dCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40MTQ0MTlhNzY1YjlmMjQ2NWVlZDFmZGY0OThjOTBmY2RjYjQ1YTM0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xz
bGFuZ190YWIuaApAQCAtMCwwICsxLDIyNSBAQAorLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkg
R05VIEJpc29uIDIuNy4xLiAgKi8KKworLyogQXBwbGUgTm90ZTogRm9yIHRoZSBhdm9pZGFuY2Ug
b2YgZG91YnQsIEFwcGxlIGVsZWN0cyB0byBkaXN0cmlidXRlIHRoaXMgZmlsZSB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEJTRCBsaWNlbnNlLiAqLworCisvKiBCaXNvbiBpbnRlcmZhY2UgZm9yIFlh
Y2MtbGlrZSBwYXJzZXJzIGluIEMKKyAgIAorICAgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5
LTE5OTAsIDIwMDAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIAorICAg
VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgIAor
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0
dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogQXMgYSBzcGVjaWFsIGV4Y2Vw
dGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCisgICBwYXJ0
IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQg
d29yaworICAgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHNvIGxvbmcgYXMgdGhhdCB3b3Jr
IGlzbid0IGl0c2VsZiBhCisgICBwYXJzZXIgZ2VuZXJhdG9yIHVzaW5nIHRoZSBza2VsZXRvbiBv
ciBhIG1vZGlmaWVkIHZlcnNpb24gdGhlcmVvZgorICAgYXMgYSBwYXJzZXIgc2tlbGV0b24uICBB
bHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZQorICAgdGhlIHBhcnNl
ciBza2VsZXRvbiBpdHNlbGYsIHlvdSBtYXkgKGF0IHlvdXIgb3B0aW9uKSByZW1vdmUgdGhpcwor
ICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0
aGUgcmVzdWx0aW5nCisgICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIg
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBl
eGNlcHRpb24uCisgICAKKyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KKyAgIHZlcnNpb24gMi4yIG9mIEJpc29uLiAg
Ki8KKworI2lmbmRlZiBZWV9ZWV9HTFNMQU5HX1RBQl9IX0lOQ0xVREVECisjIGRlZmluZSBZWV9Z
WV9HTFNMQU5HX1RBQl9IX0lOQ0xVREVECisvKiBFbmFibGluZyB0cmFjZXMuICAqLworI2lmbmRl
ZiBZWURFQlVHCisjIGRlZmluZSBZWURFQlVHIDAKKyNlbmRpZgorI2lmIFlZREVCVUcKK2V4dGVy
biBpbnQgeXlkZWJ1ZzsKKyNlbmRpZgorLyogIiVjb2RlIHJlcXVpcmVzIiBibG9ja3MuICAqLwor
CisKKyNkZWZpbmUgWVlMVFlQRSBUU291cmNlTG9jCisjZGVmaW5lIFlZTFRZUEVfSVNfREVDTEFS
RUQgMQorI2RlZmluZSBTSF9NQVhfVE9LRU5fTEVOR1RIIDI1NiAgLy8gV2ViR0wgc3BlYy4KKwor
CisKKworLyogVG9rZW5zLiAgKi8KKyNpZm5kZWYgWVlUT0tFTlRZUEUKKyMgZGVmaW5lIFlZVE9L
RU5UWVBFCisgICAvKiBQdXQgdGhlIHRva2VucyBpbnRvIHRoZSBzeW1ib2wgdGFibGUsIHNvIHRo
YXQgR0RCIGFuZCBvdGhlciBkZWJ1Z2dlcnMKKyAgICAgIGtub3cgYWJvdXQgdGhlbS4gICovCisg
ICBlbnVtIHl5dG9rZW50eXBlIHsKKyAgICAgSU5WQVJJQU5UID0gMjU4LAorICAgICBISUdIX1BS
RUNJU0lPTiA9IDI1OSwKKyAgICAgTUVESVVNX1BSRUNJU0lPTiA9IDI2MCwKKyAgICAgTE9XX1BS
RUNJU0lPTiA9IDI2MSwKKyAgICAgUFJFQ0lTSU9OID0gMjYyLAorICAgICBBVFRSSUJVVEUgPSAy
NjMsCisgICAgIENPTlNUX1FVQUwgPSAyNjQsCisgICAgIEJPT0xfVFlQRSA9IDI2NSwKKyAgICAg
RkxPQVRfVFlQRSA9IDI2NiwKKyAgICAgSU5UX1RZUEUgPSAyNjcsCisgICAgIEJSRUFLID0gMjY4
LAorICAgICBDT05USU5VRSA9IDI2OSwKKyAgICAgRE8gPSAyNzAsCisgICAgIEVMU0UgPSAyNzEs
CisgICAgIEZPUiA9IDI3MiwKKyAgICAgSUYgPSAyNzMsCisgICAgIERJU0NBUkQgPSAyNzQsCisg
ICAgIFJFVFVSTiA9IDI3NSwKKyAgICAgQlZFQzIgPSAyNzYsCisgICAgIEJWRUMzID0gMjc3LAor
ICAgICBCVkVDNCA9IDI3OCwKKyAgICAgSVZFQzIgPSAyNzksCisgICAgIElWRUMzID0gMjgwLAor
ICAgICBJVkVDNCA9IDI4MSwKKyAgICAgVkVDMiA9IDI4MiwKKyAgICAgVkVDMyA9IDI4MywKKyAg
ICAgVkVDNCA9IDI4NCwKKyAgICAgTUFUUklYMiA9IDI4NSwKKyAgICAgTUFUUklYMyA9IDI4NiwK
KyAgICAgTUFUUklYNCA9IDI4NywKKyAgICAgSU5fUVVBTCA9IDI4OCwKKyAgICAgT1VUX1FVQUwg
PSAyODksCisgICAgIElOT1VUX1FVQUwgPSAyOTAsCisgICAgIFVOSUZPUk0gPSAyOTEsCisgICAg
IFZBUllJTkcgPSAyOTIsCisgICAgIFNUUlVDVCA9IDI5MywKKyAgICAgVk9JRF9UWVBFID0gMjk0
LAorICAgICBXSElMRSA9IDI5NSwKKyAgICAgU0FNUExFUjJEID0gMjk2LAorICAgICBTQU1QTEVS
Q1VCRSA9IDI5NywKKyAgICAgU0FNUExFUl9FWFRFUk5BTF9PRVMgPSAyOTgsCisgICAgIFNBTVBM
RVIyRFJFQ1QgPSAyOTksCisgICAgIElERU5USUZJRVIgPSAzMDAsCisgICAgIFRZUEVfTkFNRSA9
IDMwMSwKKyAgICAgRkxPQVRDT05TVEFOVCA9IDMwMiwKKyAgICAgSU5UQ09OU1RBTlQgPSAzMDMs
CisgICAgIEJPT0xDT05TVEFOVCA9IDMwNCwKKyAgICAgTEVGVF9PUCA9IDMwNSwKKyAgICAgUklH
SFRfT1AgPSAzMDYsCisgICAgIElOQ19PUCA9IDMwNywKKyAgICAgREVDX09QID0gMzA4LAorICAg
ICBMRV9PUCA9IDMwOSwKKyAgICAgR0VfT1AgPSAzMTAsCisgICAgIEVRX09QID0gMzExLAorICAg
ICBORV9PUCA9IDMxMiwKKyAgICAgQU5EX09QID0gMzEzLAorICAgICBPUl9PUCA9IDMxNCwKKyAg
ICAgWE9SX09QID0gMzE1LAorICAgICBNVUxfQVNTSUdOID0gMzE2LAorICAgICBESVZfQVNTSUdO
ID0gMzE3LAorICAgICBBRERfQVNTSUdOID0gMzE4LAorICAgICBNT0RfQVNTSUdOID0gMzE5LAor
ICAgICBMRUZUX0FTU0lHTiA9IDMyMCwKKyAgICAgUklHSFRfQVNTSUdOID0gMzIxLAorICAgICBB
TkRfQVNTSUdOID0gMzIyLAorICAgICBYT1JfQVNTSUdOID0gMzIzLAorICAgICBPUl9BU1NJR04g
PSAzMjQsCisgICAgIFNVQl9BU1NJR04gPSAzMjUsCisgICAgIExFRlRfUEFSRU4gPSAzMjYsCisg
ICAgIFJJR0hUX1BBUkVOID0gMzI3LAorICAgICBMRUZUX0JSQUNLRVQgPSAzMjgsCisgICAgIFJJ
R0hUX0JSQUNLRVQgPSAzMjksCisgICAgIExFRlRfQlJBQ0UgPSAzMzAsCisgICAgIFJJR0hUX0JS
QUNFID0gMzMxLAorICAgICBET1QgPSAzMzIsCisgICAgIENPTU1BID0gMzMzLAorICAgICBDT0xP
TiA9IDMzNCwKKyAgICAgRVFVQUwgPSAzMzUsCisgICAgIFNFTUlDT0xPTiA9IDMzNiwKKyAgICAg
QkFORyA9IDMzNywKKyAgICAgREFTSCA9IDMzOCwKKyAgICAgVElMREUgPSAzMzksCisgICAgIFBM
VVMgPSAzNDAsCisgICAgIFNUQVIgPSAzNDEsCisgICAgIFNMQVNIID0gMzQyLAorICAgICBQRVJD
RU5UID0gMzQzLAorICAgICBMRUZUX0FOR0xFID0gMzQ0LAorICAgICBSSUdIVF9BTkdMRSA9IDM0
NSwKKyAgICAgVkVSVElDQUxfQkFSID0gMzQ2LAorICAgICBDQVJFVCA9IDM0NywKKyAgICAgQU1Q
RVJTQU5EID0gMzQ4LAorICAgICBRVUVTVElPTiA9IDM0OQorICAgfTsKKyNlbmRpZgorCisKKyNp
ZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAordHlw
ZWRlZiB1bmlvbiBZWVNUWVBFCit7CisKKworICAgIHN0cnVjdCB7CisgICAgICAgIHVuaW9uIHsK
KyAgICAgICAgICAgIFRTdHJpbmcgKnN0cmluZzsKKyAgICAgICAgICAgIGZsb2F0IGY7CisgICAg
ICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgIGJvb2wgYjsKKyAgICAgICAgfTsKKyAgICAgICAg
VFN5bWJvbCogc3ltYm9sOworICAgIH0gbGV4OworICAgIHN0cnVjdCB7CisgICAgICAgIFRPcGVy
YXRvciBvcDsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgVEludGVybU5vZGUqIGludGVy
bU5vZGU7CisgICAgICAgICAgICBUSW50ZXJtTm9kZVBhaXIgbm9kZVBhaXI7CisgICAgICAgICAg
ICBUSW50ZXJtVHlwZWQqIGludGVybVR5cGVkTm9kZTsKKyAgICAgICAgICAgIFRJbnRlcm1BZ2dy
ZWdhdGUqIGludGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgfTsKKyAgICAgICAgdW5pb24geworICAg
ICAgICAgICAgVFB1YmxpY1R5cGUgdHlwZTsKKyAgICAgICAgICAgIFRQcmVjaXNpb24gcHJlY2lz
aW9uOworICAgICAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXI7CisgICAgICAgICAgICBURnVu
Y3Rpb24qIGZ1bmN0aW9uOworICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJhbTsKKyAgICAgICAg
ICAgIFRGaWVsZCogZmllbGQ7CisgICAgICAgICAgICBURmllbGRMaXN0KiBmaWVsZExpc3Q7Cisg
ICAgICAgIH07CisgICAgfSBpbnRlcm07CisKKworCit9IFlZU1RZUEU7CisjIGRlZmluZSBZWVNU
WVBFX0lTX1RSSVZJQUwgMQorIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50
OyB3aWxsIGJlIHdpdGhkcmF3biAqLworIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCisj
ZW5kaWYKKworI2lmICEgZGVmaW5lZCBZWUxUWVBFICYmICEgZGVmaW5lZCBZWUxUWVBFX0lTX0RF
Q0xBUkVECit0eXBlZGVmIHN0cnVjdCBZWUxUWVBFCit7CisgIGludCBmaXJzdF9saW5lOworICBp
bnQgZmlyc3RfY29sdW1uOworICBpbnQgbGFzdF9saW5lOworICBpbnQgbGFzdF9jb2x1bW47Cit9
IFlZTFRZUEU7CisjIGRlZmluZSB5eWx0eXBlIFlZTFRZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwg
YmUgd2l0aGRyYXduICovCisjIGRlZmluZSBZWUxUWVBFX0lTX0RFQ0xBUkVEIDEKKyMgZGVmaW5l
IFlZTFRZUEVfSVNfVFJJVklBTCAxCisjZW5kaWYKKworCisjaWZkZWYgWVlQQVJTRV9QQVJBTQor
I2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cworaW50IHl5cGFyc2Ug
KHZvaWQgKllZUEFSU0VfUEFSQU0pOworI2Vsc2UKK2ludCB5eXBhcnNlICgpOworI2VuZGlmCisj
ZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KKyNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmlu
ZWQgX19jcGx1c3BsdXMKK2ludCB5eXBhcnNlIChUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKKyNl
bHNlCitpbnQgeXlwYXJzZSAoKTsKKyNlbmRpZgorI2VuZGlmIC8qICEgWVlQQVJTRV9QQVJBTSAq
LworCisjZW5kaWYgLyogIVlZX1lZX0dMU0xBTkdfVEFCX0hfSU5DTFVERUQgICovCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9pbnRl
cm1PdXQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvaW50ZXJtT3V0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMmY5MThkNzdhNzgyZjhlMjFlYzg1NTU0MzIw
ZjRhZGRmODQ0ZWFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtT3V0LmNwcApAQCAtMCwwICsxLDQyNCBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvbG9jYWxp
bnRlcm1lZGlhdGUuaCIKKworLy8KKy8vIFR3byBwdXJwb3NlczoKKy8vIDEuICBTaG93IGFuIGV4
YW1wbGUgb2YgaG93IHRvIGl0ZXJhdGUgdHJlZS4gIEZ1bmN0aW9ucyBjYW4KKy8vICAgICBhbHNv
IGRpcmVjdGx5IGNhbGwgVHJhdmVyc2UoKSBvbiBjaGlsZHJlbiB0aGVtc2VsdmVzIHRvCisvLyAg
ICAgaGF2ZSBmaW5lciBncmFpbmVkIGNvbnRyb2wgb3ZlciB0aGUgcHJvY2VzcyB0aGFuIHNob3du
IGhlcmUuCisvLyAgICAgU2VlIHRoZSBsYXN0IGZ1bmN0aW9uIGZvciBob3cgdG8gZ2V0IHN0YXJ0
ZWQuCisvLyAyLiAgUHJpbnQgb3V0IGEgdGV4dCBiYXNlZCBkZXNjcmlwdGlvbiBvZiB0aGUgdHJl
ZS4KKy8vCisKKy8vCisvLyBVc2UgdGhpcyBjbGFzcyB0byBjYXJyeSBhbG9uZyBkYXRhIGZyb20g
bm9kZSB0byBub2RlIGluCisvLyB0aGUgdHJhdmVyc2FsCisvLworY2xhc3MgVE91dHB1dFRyYXZl
cnNlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBUT3V0cHV0VHJh
dmVyc2VyKFRJbmZvU2lua0Jhc2UmIGkpIDogc2luayhpKSB7IH0KKyAgICBUSW5mb1NpbmtCYXNl
JiBzaW5rOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9s
Kik7CisgICAgdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qKTsK
KyAgICBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7CisgICAg
Ym9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqKTsKKyAgICBib29sIHZp
c2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKik7CisgICAgYm9vbCB2
aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOworICAgIGJvb2wg
dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCopOworICAgIGJvb2wgdmlzaXRCcmFu
Y2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqKTsKK307CisKK1RTdHJpbmcgVFR5cGU6Omdl
dENvbXBsZXRlU3RyaW5nKCkgY29uc3QKK3sKKyAgICBUU3RyaW5nU3RyZWFtIHN0cmVhbTsKKwor
ICAgIGlmIChxdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5ICYmIHF1YWxpZmllciAhPSBFdnFHbG9i
YWwpCisgICAgICAgIHN0cmVhbSA8PCBnZXRRdWFsaWZpZXJTdHJpbmcoKSA8PCAiICIgPDwgZ2V0
UHJlY2lzaW9uU3RyaW5nKCkgPDwgIiAiOworICAgIGlmIChhcnJheSkKKyAgICAgICAgc3RyZWFt
IDw8ICJhcnJheVsiIDw8IGdldEFycmF5U2l6ZSgpIDw8ICJdIG9mICI7CisgICAgaWYgKG1hdHJp
eCkKKyAgICAgICAgc3RyZWFtIDw8IHN0YXRpY19jYXN0PGludD4oc2l6ZSkgPDwgIlgiIDw8IHN0
YXRpY19jYXN0PGludD4oc2l6ZSkgPDwgIiBtYXRyaXggb2YgIjsKKyAgICBlbHNlIGlmIChzaXpl
ID4gMSkKKyAgICAgICAgc3RyZWFtIDw8IHN0YXRpY19jYXN0PGludD4oc2l6ZSkgPDwgIi1jb21w
b25lbnQgdmVjdG9yIG9mICI7CisKKyAgICBzdHJlYW0gPDwgZ2V0QmFzaWNTdHJpbmcoKTsKKyAg
ICByZXR1cm4gc3RyZWFtLnN0cigpOworfQorCisvLworLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3Ig
cHJpbnRpbmcsIG5vdCBwYXJ0IG9mIHRyYXZlcnNpbmcuCisvLworCit2b2lkIE91dHB1dFRyZWVU
ZXh0KFRJbmZvU2lua0Jhc2UmIHNpbmssIFRJbnRlcm1Ob2RlKiBub2RlLCBjb25zdCBpbnQgZGVw
dGgpCit7CisgICAgaW50IGk7CisKKyAgICBzaW5rLmxvY2F0aW9uKG5vZGUtPmdldExpbmUoKSk7
CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKKyAgICAgICAgc2luayA8PCAiICAi
OworfQorCisvLworLy8gVGhlIHJlc3Qgb2YgdGhlIGZpbGUgYXJlIHRoZSB0cmF2ZXJzYWwgZnVu
Y3Rpb25zLiAgVGhlIGxhc3Qgb25lCisvLyBpcyB0aGUgb25lIHRoYXQgc3RhcnRzIHRoZSB0cmF2
ZXJzYWwuCisvLworLy8gUmV0dXJuIHRydWUgZnJvbSBpbnRlcmlvciBub2RlcyB0byBoYXZlIHRo
ZSBleHRlcm5hbCB0cmF2ZXJzYWwKKy8vIGNvbnRpbnVlIG9uIHRvIGNoaWxkcmVuLiAgSWYgeW91
IHByb2Nlc3MgY2hpbGRyZW4geW91cnNlbGYsCisvLyByZXR1cm4gZmFsc2UuCisvLworCit2b2lk
IFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCit7Cisg
ICAgT3V0cHV0VHJlZVRleHQoc2luaywgbm9kZSwgZGVwdGgpOworCisgICAgc2luayA8PCAiJyIg
PDwgbm9kZS0+Z2V0U3ltYm9sKCkgPDwgIicgIjsKKyAgICBzaW5rIDw8ICIoIiA8PCBub2RlLT5n
ZXRDb21wbGV0ZVN0cmluZygpIDw8ICIpXG4iOworfQorCitib29sIFRPdXRwdXRUcmF2ZXJzZXI6
OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBub2RlKQoreworICAgIFRJ
bmZvU2lua0Jhc2UmIG91dCA9IHNpbms7CisKKyAgICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUs
IGRlcHRoKTsKKworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkgeworICAgICAgICBjYXNlIEVP
cEFzc2lnbjogICAgICAgICAgICAgICAgICAgb3V0IDw8ICJtb3ZlIHNlY29uZCBjaGlsZCB0byBm
aXJzdCBjaGlsZCI7ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BJbml0aWFsaXpl
OiAgICAgICAgICAgICAgIG91dCA8PCAiaW5pdGlhbGl6ZSBmaXJzdCBjaGlsZCB3aXRoIHNlY29u
ZCBjaGlsZCI7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQWRkQXNzaWduOiAgICAgICAgICAg
ICAgICBvdXQgPDwgImFkZCBzZWNvbmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7ICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjogICAgICAgICAgICAgICAgb3V0IDw8
ICJzdWJ0cmFjdCBzZWNvbmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7ICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BNdWxBc3NpZ246ICAgICAgICAgICAgICAgIG91dCA8PCAibXVsdGlwbHkg
c2Vjb25kIGNoaWxkIGludG8gZmlyc3QgY2hpbGQiOyAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wVmVjdG9yVGltZXNNYXRyaXhBc3NpZ246ICBvdXQgPDwgIm1hdHJpeCBtdWx0IHNlY29uZCBj
aGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFZlY3RvclRp
bWVzU2NhbGFyQXNzaWduOiAgb3V0IDw8ICJ2ZWN0b3Igc2NhbGUgc2Vjb25kIGNoaWxkIGludG8g
Zmlyc3QgY2hpbGQiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhckFz
c2lnbjogIG91dCA8PCAibWF0cml4IHNjYWxlIHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxk
IjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246ICBvdXQg
PDwgIm1hdHJpeCBtdWx0IHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wRGl2QXNzaWduOiAgICAgICAgICAgICAgICBvdXQgPDwgImRpdmlkZSBz
ZWNvbmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7ICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEVPcEluZGV4RGlyZWN0OiAgIG91dCA8PCAiZGlyZWN0IGluZGV4IjsgICBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OiBvdXQgPDwgImluZGlyZWN0IGluZGV4IjsgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6ICAgb3V0IDw8ICJkaXJlY3QgaW5k
ZXggZm9yIHN0cnVjdHVyZSI7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVjdG9yU3dpenps
ZTogb3V0IDw8ICJ2ZWN0b3Igc3dpenpsZSI7IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wQWRk
OiAgICBvdXQgPDwgImFkZCI7ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wU3ViOiAgICBvdXQgPDwgInN1YnRyYWN0IjsgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wTXVsOiAgICBvdXQgPDwgImNvbXBvbmVudC13aXNlIG11bHRpcGx5Ijsg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wRGl2OiAgICBvdXQgPDwgImRpdmlkZSI7ICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRXF1YWw6ICAgICAgICAgICAgb3V0IDw8
ICJDb21wYXJlIEVxdWFsIjsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVP
cE5vdEVxdWFsOiAgICAgICAgIG91dCA8PCAiQ29tcGFyZSBOb3QgRXF1YWwiOyAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjogICAgICAgICBvdXQgPDwgIkNvbXBh
cmUgTGVzcyBUaGFuIjsgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wR3JlYXRl
clRoYW46ICAgICAgb3V0IDw8ICJDb21wYXJlIEdyZWF0ZXIgVGhhbiI7ICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6ICAgIG91dCA8PCAiQ29tcGFyZSBMZXNz
IFRoYW4gb3IgRXF1YWwiOyAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVx
dWFsOiBvdXQgPDwgIkNvbXBhcmUgR3JlYXRlciBUaGFuIG9yIEVxdWFsIjsgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjogb3V0IDw8ICJ2ZWN0b3Itc2NhbGUiOyAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeDogb3V0IDw8
ICJ2ZWN0b3ItdGltZXMtbWF0cml4IjsgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhU
aW1lc1ZlY3Rvcjogb3V0IDw8ICJtYXRyaXgtdGltZXMtdmVjdG9yIjsgICBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhcjogb3V0IDw8ICJtYXRyaXgtc2NhbGUiOyAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeDogb3V0IDw8ICJt
YXRyaXgtbXVsdGlwbHkiOyAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcExvZ2ljYWxP
cjogIG91dCA8PCAibG9naWNhbC1vciI7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9naWNh
bFhvcjogb3V0IDw8ICJsb2dpY2FsLXhvciI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcExvZ2lj
YWxBbmQ6IG91dCA8PCAibG9naWNhbC1hbmQiOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogb3V0
IDw8ICI8dW5rbm93biBvcD4iOworICAgIH0KKworICAgIG91dCA8PCAiICgiIDw8IG5vZGUtPmdl
dENvbXBsZXRlU3RyaW5nKCkgPDwgIikiOworCisgICAgb3V0IDw8ICJcbiI7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdFVuYXJ5KFZpc2l0IHZp
c2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gc2lu
azsKKworICAgIE91dHB1dFRyZWVUZXh0KG91dCwgbm9kZSwgZGVwdGgpOworCisgICAgc3dpdGNo
IChub2RlLT5nZXRPcCgpKSB7CisgICAgICAgIGNhc2UgRU9wTmVnYXRpdmU6ICAgICAgIG91dCA8
PCAiTmVnYXRlIHZhbHVlIjsgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JM
b2dpY2FsTm90OgorICAgICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6ICAgICBvdXQgPDwgIk5lZ2F0
ZSBjb25kaXRpb25hbCI7ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50
OiAgb3V0IDw8ICJQb3N0LUluY3JlbWVudCI7ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVP
cFBvc3REZWNyZW1lbnQ6ICBvdXQgPDwgIlBvc3QtRGVjcmVtZW50IjsgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OiAgIG91dCA8PCAiUHJlLUluY3JlbWVudCI7ICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6ICAgb3V0IDw8ICJQcmUt
RGVjcmVtZW50IjsgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wQ29udkludFRvQm9v
bDogIG91dCA8PCAiQ29udmVydCBpbnQgdG8gYm9vbCI7ICBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BDb252RmxvYXRUb0Jvb2w6b3V0IDw8ICJDb252ZXJ0IGZsb2F0IHRvIGJvb2wiO2JyZWFrOwor
ICAgICAgICBjYXNlIEVPcENvbnZCb29sVG9GbG9hdDpvdXQgPDwgIkNvbnZlcnQgYm9vbCB0byBm
bG9hdCI7YnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udkludFRvRmxvYXQ6IG91dCA8PCAiQ29u
dmVydCBpbnQgdG8gZmxvYXQiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0lu
dDogb3V0IDw8ICJDb252ZXJ0IGZsb2F0IHRvIGludCI7IGJyZWFrOworICAgICAgICBjYXNlIEVP
cENvbnZCb29sVG9JbnQ6ICBvdXQgPDwgIkNvbnZlcnQgYm9vbCB0byBpbnQiOyAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSBFT3BSYWRpYW5zOiAgICAgICAgb3V0IDw8ICJyYWRpYW5zIjsgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcERlZ3JlZXM6ICAgICAgICBvdXQgPDwgImRl
Z3JlZXMiOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU2luOiAgICAgICAg
ICAgIG91dCA8PCAic2luZSI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BDb3M6ICAgICAgICAgICAgb3V0IDw8ICJjb3NpbmUiOyAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcFRhbjogICAgICAgICAgICBvdXQgPDwgInRhbmdlbnQiOyAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQXNpbjogICAgICAgICAgIG91dCA8PCAiYXJj
IHNpbmUiOyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BBY29zOiAgICAgICAg
ICAgb3V0IDw8ICJhcmMgY29zaW5lIjsgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVP
cEF0YW46ICAgICAgICAgICBvdXQgPDwgImFyYyB0YW5nZW50IjsgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSBFT3BFeHA6ICAgICAgICAgICAgb3V0IDw8ICJleHAiOyAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcExvZzogICAgICAgICAgICBvdXQgPDwgImxv
ZyI7ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRXhwMjogICAgICAg
ICAgIG91dCA8PCAiZXhwMiI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BMb2cyOiAgICAgICAgICAgb3V0IDw8ICJsb2cyIjsgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcFNxcnQ6ICAgICAgICAgICBvdXQgPDwgInNxcnQiOyAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wSW52ZXJzZVNxcnQ6ICAgIG91dCA8PCAiaW52
ZXJzZSBzcXJ0IjsgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcEFiczogICAgICAg
ICAgICBvdXQgPDwgIkFic29sdXRlIHZhbHVlIjsgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wU2lnbjogICAgICAgICAgIG91dCA8PCAiU2lnbiI7ICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BGbG9vcjogICAgICAgICAgb3V0IDw8ICJGbG9vciI7ICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENlaWw6ICAgICAgICAgICBvdXQgPDwgIkNl
aWxpbmciOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRnJhY3Q6ICAgICAg
ICAgIG91dCA8PCAiRnJhY3Rpb24iOyAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
IEVPcExlbmd0aDogICAgICAgICBvdXQgPDwgImxlbmd0aCI7ICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiAgICAgIG91dCA8PCAibm9ybWFsaXplIjsgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vCWNhc2UgRU9wRFBkeDogICAgICAgICAgIG91
dCA8PCAiZFBkeCI7ICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vCWNhc2UgRU9wRFBkeTogICAgICAgICAgIG91dCA8PCAiZFBkeSI7ICAgICAgICAg
ICAgICAgICBicmVhazsgICAKKyAgICAgICAgICAgIC8vCWNhc2UgRU9wRndpZHRoOiAgICAgICAg
IG91dCA8PCAiZndpZHRoIjsgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAg
CisKKyAgICAgICAgY2FzZSBFT3BBbnk6ICAgICAgICAgICAgb3V0IDw8ICJhbnkiOyAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEFsbDogICAgICAgICAgICBvdXQgPDwg
ImFsbCI7ICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIG91dC5wcmVmaXgoRVByZWZpeEVycm9yKTsKKyAgICAgICAgICAgIG91dCA8PCAiQmFk
IHVuYXJ5IG9wIjsKKyAgICB9CisKKyAgICBvdXQgPDwgIiAoIiA8PCBub2RlLT5nZXRDb21wbGV0
ZVN0cmluZygpIDw8ICIpIjsKKworICAgIG91dCA8PCAiXG4iOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQs
IFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gc2lu
azsKKworICAgIGlmIChub2RlLT5nZXRPcCgpID09IEVPcE51bGwpIHsKKyAgICAgICAgb3V0LnBy
ZWZpeChFUHJlZml4RXJyb3IpOworICAgICAgICBvdXQgPDwgIm5vZGUgaXMgc3RpbGwgRU9wTnVs
bCEiOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBPdXRwdXRUcmVlVGV4dChv
dXQsIG5vZGUsIGRlcHRoKTsKKworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkgeworICAgICAg
ICBjYXNlIEVPcFNlcXVlbmNlOiAgICAgIG91dCA8PCAiU2VxdWVuY2VcbiI7IHJldHVybiB0cnVl
OworICAgICAgICBjYXNlIEVPcENvbW1hOiAgICAgICAgIG91dCA8PCAiQ29tbWFcbiI7IHJldHVy
biB0cnVlOworICAgICAgICBjYXNlIEVPcEZ1bmN0aW9uOiAgICAgIG91dCA8PCAiRnVuY3Rpb24g
RGVmaW5pdGlvbjogIiA8PCBub2RlLT5nZXROYW1lKCk7IGJyZWFrOworICAgICAgICBjYXNlIEVP
cEZ1bmN0aW9uQ2FsbDogIG91dCA8PCAiRnVuY3Rpb24gQ2FsbDogIiA8PCBub2RlLT5nZXROYW1l
KCk7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFBhcmFtZXRlcnM6ICAgIG91dCA8PCAiRnVuY3Rp
b24gUGFyYW1ldGVyczogIjsgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9w
Q29uc3RydWN0RmxvYXQ6IG91dCA8PCAiQ29uc3RydWN0IGZsb2F0IjsgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wQ29uc3RydWN0VmVjMjogIG91dCA8PCAiQ29uc3RydWN0IHZlYzIiOyAgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMzogIG91dCA8PCAiQ29uc3RydWN0IHZlYzMi
OyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjNDogIG91dCA8PCAiQ29uc3Ry
dWN0IHZlYzQiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDogIG91dCA8
PCAiQ29uc3RydWN0IGJvb2wiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZl
YzI6IG91dCA8PCAiQ29uc3RydWN0IGJ2ZWMyIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29u
c3RydWN0QlZlYzM6IG91dCA8PCAiQ29uc3RydWN0IGJ2ZWMzIjsgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wQ29uc3RydWN0QlZlYzQ6IG91dCA8PCAiQ29uc3RydWN0IGJ2ZWM0IjsgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OiAgIG91dCA8PCAiQ29uc3RydWN0IGludCI7ICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6IG91dCA8PCAiQ29uc3RydWN0
IGl2ZWMyIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzM6IG91dCA8PCAi
Q29uc3RydWN0IGl2ZWMzIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzQ6
IG91dCA8PCAiQ29uc3RydWN0IGl2ZWM0IjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0TWF0MjogIG91dCA8PCAiQ29uc3RydWN0IG1hdDIiOyAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0TWF0MzogIG91dCA8PCAiQ29uc3RydWN0IG1hdDMiOyAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0NDogIG91dCA8PCAiQ29uc3RydWN0IG1hdDQiOyAgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0U3RydWN0OiAgb3V0IDw8ICJDb25zdHJ1Y3Qg
c3RydWN0dXJlIjsgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW46ICAgICAgICAg
b3V0IDw8ICJDb21wYXJlIExlc3MgVGhhbiI7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEVPcEdyZWF0ZXJUaGFuOiAgICAgIG91dCA8PCAiQ29tcGFyZSBHcmVhdGVyIFRoYW4iOyAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOiAgICBvdXQgPDwg
IkNvbXBhcmUgTGVzcyBUaGFuIG9yIEVxdWFsIjsgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
R3JlYXRlclRoYW5FcXVhbDogb3V0IDw8ICJDb21wYXJlIEdyZWF0ZXIgVGhhbiBvciBFcXVhbCI7
IGJyZWFrOworICAgICAgICBjYXNlIEVPcFZlY3RvckVxdWFsOiAgICAgIG91dCA8PCAiRXF1YWwi
OyAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JO
b3RFcXVhbDogICBvdXQgPDwgIk5vdEVxdWFsIjsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgY2FzZSBFT3BNb2Q6ICAgICAgICAgICBvdXQgPDwgIm1vZCI7ICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wUG93OiAgICAgICAgICAgb3V0IDw8ICJwb3ciOyAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wQXRhbjogICAgICAgICAgb3V0IDw8ICJhcmMg
dGFuZ2VudCI7IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wTWluOiAgICAgICAgICAgb3V0IDw8
ICJtaW4iOyAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcE1heDogICAgICAgICAgIG91
dCA8PCAibWF4IjsgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDbGFtcDogICAgICAg
ICBvdXQgPDwgImNsYW1wIjsgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTWl4OiAgICAg
ICAgICAgb3V0IDw8ICJtaXgiOyAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFN0ZXA6
ICAgICAgICAgIG91dCA8PCAic3RlcCI7ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BT
bW9vdGhTdGVwOiAgICBvdXQgPDwgInNtb290aHN0ZXAiOyAgYnJlYWs7CisKKyAgICAgICAgY2Fz
ZSBFT3BEaXN0YW5jZTogICAgICBvdXQgPDwgImRpc3RhbmNlIjsgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wRG90OiAgICAgICAgICAgb3V0IDw8ICJkb3QtcHJvZHVjdCI7
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENyb3NzOiAgICAgICAgIG91dCA8
PCAiY3Jvc3MtcHJvZHVjdCI7ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BGYWNl
Rm9yd2FyZDogICBvdXQgPDwgImZhY2UtZm9yd2FyZCI7ICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wUmVmbGVjdDogICAgICAgb3V0IDw8ICJyZWZsZWN0IjsgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFJlZnJhY3Q6ICAgICAgIG91dCA8PCAicmVmcmFj
dCI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNdWw6ICAgICAgICAg
ICBvdXQgPDwgImNvbXBvbmVudC13aXNlIG11bHRpcGx5IjsgYnJlYWs7CisKKyAgICAgICAgY2Fz
ZSBFT3BEZWNsYXJhdGlvbjogICBvdXQgPDwgIkRlY2xhcmF0aW9uOiAiOyAgIGJyZWFrOworCisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBvdXQucHJlZml4KEVQcmVmaXhFcnJvcik7Cisg
ICAgICAgICAgICBvdXQgPDwgIkJhZCBhZ2dyZWdhdGlvbiBvcCI7CisgICAgfQorCisgICAgaWYg
KG5vZGUtPmdldE9wKCkgIT0gRU9wU2VxdWVuY2UgJiYgbm9kZS0+Z2V0T3AoKSAhPSBFT3BQYXJh
bWV0ZXJzKQorICAgICAgICBvdXQgPDwgIiAoIiA8PCBub2RlLT5nZXRDb21wbGV0ZVN0cmluZygp
IDw8ICIpIjsKKworICAgIG91dCA8PCAiXG4iOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1T
ZWxlY3Rpb24qIG5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gc2luazsKKworICAg
IE91dHB1dFRyZWVUZXh0KG91dCwgbm9kZSwgZGVwdGgpOworCisgICAgb3V0IDw8ICJUZXN0IGNv
bmRpdGlvbiBhbmQgc2VsZWN0IjsKKyAgICBvdXQgPDwgIiAoIiA8PCBub2RlLT5nZXRDb21wbGV0
ZVN0cmluZygpIDw8ICIpXG4iOworCisgICAgKytkZXB0aDsKKworICAgIE91dHB1dFRyZWVUZXh0
KHNpbmssIG5vZGUsIGRlcHRoKTsKKyAgICBvdXQgPDwgIkNvbmRpdGlvblxuIjsKKyAgICBub2Rl
LT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CisKKyAgICBPdXRwdXRUcmVlVGV4dChz
aW5rLCBub2RlLCBkZXB0aCk7CisgICAgaWYgKG5vZGUtPmdldFRydWVCbG9jaygpKSB7CisgICAg
ICAgIG91dCA8PCAidHJ1ZSBjYXNlXG4iOworICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+
dHJhdmVyc2UodGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIG91dCA8PCAidHJ1ZSBjYXNlIGlz
IG51bGxcbiI7CisKKyAgICBpZiAobm9kZS0+Z2V0RmFsc2VCbG9jaygpKSB7CisgICAgICAgIE91
dHB1dFRyZWVUZXh0KHNpbmssIG5vZGUsIGRlcHRoKTsKKyAgICAgICAgb3V0IDw8ICJmYWxzZSBj
YXNlXG4iOworICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOwor
ICAgIH0KKworICAgIC0tZGVwdGg7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgVE91
dHB1dFRyYXZlcnNlcjo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKiBu
b2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IHNpbms7CisKKyAgICBzaXplX3Qgc2l6
ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CisKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUs
IGRlcHRoKTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpW2ld
LmdldFR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBFYnRCb29sOgorICAgICAgICAgICAgICAg
IGlmIChub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpW2ldLmdldEJDb25zdCgpKQorICAgICAg
ICAgICAgICAgICAgICBvdXQgPDwgInRydWUiOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgb3V0IDw8ICJmYWxzZSI7CisKKyAgICAgICAgICAgICAgICBvdXQgPDwg
IiAoIiA8PCAiY29uc3QgYm9vbCIgPDwgIikiOworICAgICAgICAgICAgICAgIG91dCA8PCAiXG4i
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAg
ICAgICAgICAgICAgICBvdXQgPDwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVtpXS5nZXRG
Q29uc3QoKTsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAoY29uc3QgZmxvYXQpXG4iOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAg
ICAgICAgb3V0IDw8IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKClbaV0uZ2V0SUNvbnN0KCk7
CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgKGNvbnN0IGludClcbiI7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG91dC5tZXNz
YWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRMaW5lKCksICJVbmtub3duIGNvbnN0
YW50Iik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jv
b2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCog
bm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBzaW5rOworCisgICAgT3V0cHV0VHJl
ZVRleHQob3V0LCBub2RlLCBkZXB0aCk7CisKKyAgICBvdXQgPDwgIkxvb3Agd2l0aCBjb25kaXRp
b24gIjsKKyAgICBpZiAobm9kZS0+Z2V0VHlwZSgpID09IEVMb29wRG9XaGlsZSkKKyAgICAgICAg
b3V0IDw8ICJub3QgIjsKKyAgICBvdXQgPDwgInRlc3RlZCBmaXJzdFxuIjsKKworICAgICsrZGVw
dGg7CisKKyAgICBPdXRwdXRUcmVlVGV4dChzaW5rLCBub2RlLCBkZXB0aCk7CisgICAgaWYgKG5v
ZGUtPmdldENvbmRpdGlvbigpKSB7CisgICAgICAgIG91dCA8PCAiTG9vcCBDb25kaXRpb25cbiI7
CisgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgb3V0IDw8ICJObyBsb29wIGNvbmRpdGlvblxuIjsKKworICAgIE91dHB1dFRy
ZWVUZXh0KHNpbmssIG5vZGUsIGRlcHRoKTsKKyAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKSB7Cisg
ICAgICAgIG91dCA8PCAiTG9vcCBCb2R5XG4iOworICAgICAgICBub2RlLT5nZXRCb2R5KCktPnRy
YXZlcnNlKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBvdXQgPDwgIk5vIGxvb3AgYm9keVxu
IjsKKworICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkpIHsKKyAgICAgICAgT3V0cHV0VHJl
ZVRleHQoc2luaywgbm9kZSwgZGVwdGgpOworICAgICAgICBvdXQgPDwgIkxvb3AgVGVybWluYWwg
RXhwcmVzc2lvblxuIjsKKyAgICAgICAgbm9kZS0+Z2V0RXhwcmVzc2lvbigpLT50cmF2ZXJzZSh0
aGlzKTsKKyAgICB9CisKKyAgICAtLWRlcHRoOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCiti
b29sIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJh
bmNoKiBub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IHNpbms7CisKKyAgICBPdXRw
dXRUcmVlVGV4dChvdXQsIG5vZGUsIGRlcHRoKTsKKworICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxv
d09wKCkpIHsKKyAgICAgICAgY2FzZSBFT3BLaWxsOiAgICAgIG91dCA8PCAiQnJhbmNoOiBLaWxs
IjsgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEJyZWFrOiAgICAgb3V0IDw8ICJC
cmFuY2g6IEJyZWFrIjsgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udGludWU6
ICBvdXQgPDwgIkJyYW5jaDogQ29udGludWUiOyAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BSZXR1cm46ICAgIG91dCA8PCAiQnJhbmNoOiBSZXR1cm4iOyAgICAgICAgIGJyZWFrOworICAg
ICAgICBkZWZhdWx0OiAgICAgICAgICAgb3V0IDw8ICJCcmFuY2g6IFVua25vd24gQnJhbmNoIjsg
YnJlYWs7CisgICAgfQorCisgICAgaWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkgeworICAgICAg
ICBvdXQgPDwgIiB3aXRoIGV4cHJlc3Npb25cbiI7CisgICAgICAgICsrZGVwdGg7CisgICAgICAg
IG5vZGUtPmdldEV4cHJlc3Npb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIC0tZGVwdGg7
CisgICAgfSBlbHNlCisgICAgICAgIG91dCA8PCAiXG4iOworCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCisvLworLy8gVGhpcyBmdW5jdGlvbiBpcyB0aGUgb25lIHRvIGNhbGwgZXh0ZXJuYWxseSB0
byBzdGFydCB0aGUgdHJhdmVyc2FsLgorLy8gSW5kaXZpZHVhbCBmdW5jdGlvbnMgY2FuIGJlIGlu
aXRpYWxpemVkIHRvIDAgdG8gc2tpcCBwcm9jZXNzaW5nIG9mIHRoYXQKKy8vIHR5cGUgb2Ygbm9k
ZS4gIEl0J3MgY2hpbGRyZW4gd2lsbCBzdGlsbCBiZSBwcm9jZXNzZWQuCisvLwordm9pZCBUSW50
ZXJtZWRpYXRlOjpvdXRwdXRUcmVlKFRJbnRlcm1Ob2RlKiByb290KQoreworICAgIGlmIChyb290
ID09IDApCisgICAgICAgIHJldHVybjsKKworICAgIFRPdXRwdXRUcmF2ZXJzZXIgaXQoaW5mb1Np
bmsuaW5mbyk7CisKKyAgICByb290LT50cmF2ZXJzZSgmaXQpOworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRl
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9pbnRl
cm1lZGlhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZjlmZTIzZDNiNDhlY2IwMmUxYWE1ZjEwNzYwNGIzNTE4
NGFmYmI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgKQEAgLTAsMCArMSw2MzUgQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKy8vCisvLyBEZWZpbml0aW9uIG9mIHRoZSBpbi1tZW1vcnkgaGlnaC1s
ZXZlbCBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24KKy8vIG9mIHNoYWRlcnMuICBUaGlzIGlz
IGEgdHJlZSB0aGF0IHBhcnNlciBjcmVhdGVzLgorLy8KKy8vIE5vZGVzIGluIHRoZSB0cmVlIGFy
ZSBkZWZpbmVkIGFzIGEgaGllcmFyY2h5IG9mIGNsYXNzZXMgZGVyaXZlZCBmcm9tIAorLy8gVElu
dGVybU5vZGUuIEVhY2ggaXMgYSBub2RlIGluIGEgdHJlZS4gIFRoZXJlIGlzIG5vIHByZXNldCBi
cmFuY2hpbmcgZmFjdG9yOworLy8gZWFjaCBub2RlIGNhbiBoYXZlIGl0J3Mgb3duIHR5cGUgb2Yg
bGlzdCBvZiBjaGlsZHJlbi4KKy8vCisKKyNpZm5kZWYgX19JTlRFUk1FRElBVEVfSAorI2RlZmlu
ZSBfX0lOVEVSTUVESUFURV9ICisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKwor
I2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbW1v
bi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHlwZXMuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaCIKKworLy8KKy8vIE9wZXJhdG9ycyB1
c2VkIGJ5IHRoZSBoaWdoLWxldmVsIChwYXJzZSB0cmVlKSByZXByZXNlbnRhdGlvbi4KKy8vCitl
bnVtIFRPcGVyYXRvciB7CisgICAgRU9wTnVsbCwgICAgICAgICAgICAvLyBpZiBpbiBhIG5vZGUs
IHNob3VsZCBvbmx5IG1lYW4gYSBub2RlIGlzIHN0aWxsIGJlaW5nIGJ1aWx0CisgICAgRU9wU2Vx
dWVuY2UsICAgICAgICAvLyBkZW5vdGVzIGEgbGlzdCBvZiBzdGF0ZW1lbnRzLCBvciBwYXJhbWV0
ZXJzLCBldGMuCisgICAgRU9wRnVuY3Rpb25DYWxsLCAgICAKKyAgICBFT3BGdW5jdGlvbiwgICAg
ICAgIC8vIEZvciBmdW5jdGlvbiBkZWZpbml0aW9uCisgICAgRU9wUGFyYW1ldGVycywgICAgICAv
LyBhbiBhZ2dyZWdhdGUgbGlzdGluZyB0aGUgcGFyYW1ldGVycyB0byBhIGZ1bmN0aW9uCisKKyAg
ICBFT3BEZWNsYXJhdGlvbiwKKyAgICBFT3BQcm90b3R5cGUsCisKKyAgICAvLworICAgIC8vIFVu
YXJ5IG9wZXJhdG9ycworICAgIC8vCisKKyAgICBFT3BOZWdhdGl2ZSwKKyAgICBFT3BMb2dpY2Fs
Tm90LAorICAgIEVPcFZlY3RvckxvZ2ljYWxOb3QsCisKKyAgICBFT3BQb3N0SW5jcmVtZW50LAor
ICAgIEVPcFBvc3REZWNyZW1lbnQsCisgICAgRU9wUHJlSW5jcmVtZW50LAorICAgIEVPcFByZURl
Y3JlbWVudCwKKworICAgIEVPcENvbnZJbnRUb0Jvb2wsCisgICAgRU9wQ29udkZsb2F0VG9Cb29s
LAorICAgIEVPcENvbnZCb29sVG9GbG9hdCwKKyAgICBFT3BDb252SW50VG9GbG9hdCwKKyAgICBF
T3BDb252RmxvYXRUb0ludCwKKyAgICBFT3BDb252Qm9vbFRvSW50LAorCisgICAgLy8KKyAgICAv
LyBiaW5hcnkgb3BlcmF0aW9ucworICAgIC8vCisKKyAgICBFT3BBZGQsCisgICAgRU9wU3ViLAor
ICAgIEVPcE11bCwKKyAgICBFT3BEaXYsCisgICAgRU9wRXF1YWwsCisgICAgRU9wTm90RXF1YWws
CisgICAgRU9wVmVjdG9yRXF1YWwsCisgICAgRU9wVmVjdG9yTm90RXF1YWwsCisgICAgRU9wTGVz
c1RoYW4sCisgICAgRU9wR3JlYXRlclRoYW4sCisgICAgRU9wTGVzc1RoYW5FcXVhbCwKKyAgICBF
T3BHcmVhdGVyVGhhbkVxdWFsLAorICAgIEVPcENvbW1hLAorCisgICAgRU9wVmVjdG9yVGltZXNT
Y2FsYXIsCisgICAgRU9wVmVjdG9yVGltZXNNYXRyaXgsCisgICAgRU9wTWF0cml4VGltZXNWZWN0
b3IsCisgICAgRU9wTWF0cml4VGltZXNTY2FsYXIsCisKKyAgICBFT3BMb2dpY2FsT3IsCisgICAg
RU9wTG9naWNhbFhvciwKKyAgICBFT3BMb2dpY2FsQW5kLAorCisgICAgRU9wSW5kZXhEaXJlY3Qs
CisgICAgRU9wSW5kZXhJbmRpcmVjdCwKKyAgICBFT3BJbmRleERpcmVjdFN0cnVjdCwKKworICAg
IEVPcFZlY3RvclN3aXp6bGUsCisKKyAgICAvLworICAgIC8vIEJ1aWx0LWluIGZ1bmN0aW9ucyBw
b3RlbnRpYWxseSBtYXBwZWQgdG8gb3BlcmF0b3JzCisgICAgLy8KKworICAgIEVPcFJhZGlhbnMs
CisgICAgRU9wRGVncmVlcywKKyAgICBFT3BTaW4sCisgICAgRU9wQ29zLAorICAgIEVPcFRhbiwK
KyAgICBFT3BBc2luLAorICAgIEVPcEFjb3MsCisgICAgRU9wQXRhbiwKKworICAgIEVPcFBvdywK
KyAgICBFT3BFeHAsCisgICAgRU9wTG9nLAorICAgIEVPcEV4cDIsCisgICAgRU9wTG9nMiwKKyAg
ICBFT3BTcXJ0LAorICAgIEVPcEludmVyc2VTcXJ0LAorCisgICAgRU9wQWJzLAorICAgIEVPcFNp
Z24sCisgICAgRU9wRmxvb3IsCisgICAgRU9wQ2VpbCwKKyAgICBFT3BGcmFjdCwKKyAgICBFT3BN
b2QsCisgICAgRU9wTWluLAorICAgIEVPcE1heCwKKyAgICBFT3BDbGFtcCwKKyAgICBFT3BNaXgs
CisgICAgRU9wU3RlcCwKKyAgICBFT3BTbW9vdGhTdGVwLAorCisgICAgRU9wTGVuZ3RoLAorICAg
IEVPcERpc3RhbmNlLAorICAgIEVPcERvdCwKKyAgICBFT3BDcm9zcywKKyAgICBFT3BOb3JtYWxp
emUsCisgICAgRU9wRmFjZUZvcndhcmQsCisgICAgRU9wUmVmbGVjdCwKKyAgICBFT3BSZWZyYWN0
LAorCisgICAgRU9wREZkeCwgICAgICAgICAgICAvLyBGcmFnbWVudCBvbmx5LCBPRVNfc3RhbmRh
cmRfZGVyaXZhdGl2ZXMgZXh0ZW5zaW9uCisgICAgRU9wREZkeSwgICAgICAgICAgICAvLyBGcmFn
bWVudCBvbmx5LCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgZXh0ZW5zaW9uCisgICAgRU9wRndp
ZHRoLCAgICAgICAgICAvLyBGcmFnbWVudCBvbmx5LCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMg
ZXh0ZW5zaW9uCisKKyAgICBFT3BNYXRyaXhUaW1lc01hdHJpeCwKKworICAgIEVPcEFueSwKKyAg
ICBFT3BBbGwsCisKKyAgICAvLworICAgIC8vIEJyYW5jaAorICAgIC8vCisKKyAgICBFT3BLaWxs
LCAgICAgICAgICAgIC8vIEZyYWdtZW50IG9ubHkKKyAgICBFT3BSZXR1cm4sCisgICAgRU9wQnJl
YWssCisgICAgRU9wQ29udGludWUsCisKKyAgICAvLworICAgIC8vIENvbnN0cnVjdG9ycworICAg
IC8vCisKKyAgICBFT3BDb25zdHJ1Y3RJbnQsCisgICAgRU9wQ29uc3RydWN0Qm9vbCwKKyAgICBF
T3BDb25zdHJ1Y3RGbG9hdCwKKyAgICBFT3BDb25zdHJ1Y3RWZWMyLAorICAgIEVPcENvbnN0cnVj
dFZlYzMsCisgICAgRU9wQ29uc3RydWN0VmVjNCwKKyAgICBFT3BDb25zdHJ1Y3RCVmVjMiwKKyAg
ICBFT3BDb25zdHJ1Y3RCVmVjMywKKyAgICBFT3BDb25zdHJ1Y3RCVmVjNCwKKyAgICBFT3BDb25z
dHJ1Y3RJVmVjMiwKKyAgICBFT3BDb25zdHJ1Y3RJVmVjMywKKyAgICBFT3BDb25zdHJ1Y3RJVmVj
NCwKKyAgICBFT3BDb25zdHJ1Y3RNYXQyLAorICAgIEVPcENvbnN0cnVjdE1hdDMsCisgICAgRU9w
Q29uc3RydWN0TWF0NCwKKyAgICBFT3BDb25zdHJ1Y3RTdHJ1Y3QsCisKKyAgICAvLworICAgIC8v
IG1vdmVzCisgICAgLy8KKworICAgIEVPcEFzc2lnbiwKKyAgICBFT3BJbml0aWFsaXplLAorICAg
IEVPcEFkZEFzc2lnbiwKKyAgICBFT3BTdWJBc3NpZ24sCisgICAgRU9wTXVsQXNzaWduLAorICAg
IEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduLAorICAgIEVPcFZlY3RvclRpbWVzU2NhbGFyQXNz
aWduLAorICAgIEVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduLAorICAgIEVPcE1hdHJpeFRpbWVz
TWF0cml4QXNzaWduLAorICAgIEVPcERpdkFzc2lnbgorfTsKKworZXh0ZXJuIGNvbnN0IGNoYXIq
IGdldE9wZXJhdG9yU3RyaW5nKFRPcGVyYXRvciBvcCk7CisKK2NsYXNzIFRJbnRlcm1UcmF2ZXJz
ZXI7CitjbGFzcyBUSW50ZXJtQWdncmVnYXRlOworY2xhc3MgVEludGVybUJpbmFyeTsKK2NsYXNz
IFRJbnRlcm1VbmFyeTsKK2NsYXNzIFRJbnRlcm1Db25zdGFudFVuaW9uOworY2xhc3MgVEludGVy
bVNlbGVjdGlvbjsKK2NsYXNzIFRJbnRlcm1UeXBlZDsKK2NsYXNzIFRJbnRlcm1TeW1ib2w7Citj
bGFzcyBUSW50ZXJtTG9vcDsKK2NsYXNzIFRJbmZvU2luazsKKworLy8KKy8vIEJhc2UgY2xhc3Mg
Zm9yIHRoZSB0cmVlIG5vZGVzCisvLworY2xhc3MgVEludGVybU5vZGUgeworcHVibGljOgorICAg
IFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKKyAgICBUSW50ZXJtTm9kZSgpIHsKKyAgICAg
ICAgLy8gVE9ETzogTW92ZSB0aGlzIHRvIFRTb3VyY2VMb2MgY29uc3RydWN0b3IKKyAgICAgICAg
Ly8gYWZ0ZXIgZ2V0dGluZyByaWQgb2YgVFB1YmxpY1R5cGUuCisgICAgICAgIGxpbmUuZmlyc3Rf
ZmlsZSA9IGxpbmUubGFzdF9maWxlID0gMDsKKyAgICAgICAgbGluZS5maXJzdF9saW5lID0gbGlu
ZS5sYXN0X2xpbmUgPSAwOworICAgIH0KKyAgICB2aXJ0dWFsIH5USW50ZXJtTm9kZSgpIHsgfQor
CisgICAgY29uc3QgVFNvdXJjZUxvYyYgZ2V0TGluZSgpIGNvbnN0IHsgcmV0dXJuIGxpbmU7IH0K
KyAgICB2b2lkIHNldExpbmUoY29uc3QgVFNvdXJjZUxvYyYgbCkgeyBsaW5lID0gbDsgfQorCisg
ICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKSA9IDA7CisgICAgdmly
dHVhbCBUSW50ZXJtVHlwZWQqIGdldEFzVHlwZWQoKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVh
bCBUSW50ZXJtQ29uc3RhbnRVbmlvbiogZ2V0QXNDb25zdGFudFVuaW9uKCkgeyByZXR1cm4gMDsg
fQorICAgIHZpcnR1YWwgVEludGVybUFnZ3JlZ2F0ZSogZ2V0QXNBZ2dyZWdhdGUoKSB7IHJldHVy
biAwOyB9CisgICAgdmlydHVhbCBUSW50ZXJtQmluYXJ5KiBnZXRBc0JpbmFyeU5vZGUoKSB7IHJl
dHVybiAwOyB9CisgICAgdmlydHVhbCBUSW50ZXJtVW5hcnkqIGdldEFzVW5hcnlOb2RlKCkgeyBy
ZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgVEludGVybVNlbGVjdGlvbiogZ2V0QXNTZWxlY3Rpb25O
b2RlKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgVEludGVybVN5bWJvbCogZ2V0QXNTeW1i
b2xOb2RlKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgVEludGVybUxvb3AqIGdldEFzTG9v
cE5vZGUoKSB7IHJldHVybiAwOyB9CisKKyAgICAvLyBSZXBsYWNlIGEgY2hpbGQgbm9kZS4gUmV0
dXJuIHRydWUgaWYgfG9yaWdpbmFsfCBpcyBhIGNoaWxkCisgICAgLy8gbm9kZSBhbmQgaXQgaXMg
cmVwbGFjZWQ7IG90aGVyd2lzZSwgcmV0dXJuIGZhbHNlLgorICAgIHZpcnR1YWwgYm9vbCByZXBs
YWNlQ2hpbGROb2RlKAorICAgICAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2Rl
ICpyZXBsYWNlbWVudCkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgVFNvdXJjZUxvYyBsaW5lOwor
fTsKKworLy8KKy8vIFRoaXMgaXMganVzdCB0byBoZWxwIHlhY2MuCisvLworc3RydWN0IFRJbnRl
cm1Ob2RlUGFpciB7CisgICAgVEludGVybU5vZGUqIG5vZGUxOworICAgIFRJbnRlcm1Ob2RlKiBu
b2RlMjsKK307CisKKy8vCisvLyBJbnRlcm1lZGlhdGUgY2xhc3MgZm9yIG5vZGVzIHRoYXQgaGF2
ZSBhIHR5cGUuCisvLworY2xhc3MgVEludGVybVR5cGVkIDogcHVibGljIFRJbnRlcm1Ob2RlIHsK
K3B1YmxpYzoKKyAgICBUSW50ZXJtVHlwZWQoY29uc3QgVFR5cGUmIHQpIDogdHlwZSh0KSAgeyB9
CisgICAgdmlydHVhbCBUSW50ZXJtVHlwZWQqIGdldEFzVHlwZWQoKSB7IHJldHVybiB0aGlzOyB9
CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzU2lkZUVmZmVjdHMoKSBjb25zdCA9IDA7CisKKyAgICB2
b2lkIHNldFR5cGUoY29uc3QgVFR5cGUmIHQpIHsgdHlwZSA9IHQ7IH0KKyAgICBjb25zdCBUVHlw
ZSYgZ2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGU7IH0KKyAgICBUVHlwZSogZ2V0VHlwZVBv
aW50ZXIoKSB7IHJldHVybiAmdHlwZTsgfQorCisgICAgVEJhc2ljVHlwZSBnZXRCYXNpY1R5cGUo
KSBjb25zdCB7IHJldHVybiB0eXBlLmdldEJhc2ljVHlwZSgpOyB9CisgICAgVFF1YWxpZmllciBn
ZXRRdWFsaWZpZXIoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldFF1YWxpZmllcigpOyB9CisgICAg
VFByZWNpc2lvbiBnZXRQcmVjaXNpb24oKSBjb25zdCB7IHJldHVybiB0eXBlLmdldFByZWNpc2lv
bigpOyB9CisgICAgaW50IGdldE5vbWluYWxTaXplKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRO
b21pbmFsU2l6ZSgpOyB9CisgICAgCisgICAgYm9vbCBpc01hdHJpeCgpIGNvbnN0IHsgcmV0dXJu
IHR5cGUuaXNNYXRyaXgoKTsgfQorICAgIGJvb2wgaXNBcnJheSgpICBjb25zdCB7IHJldHVybiB0
eXBlLmlzQXJyYXkoKTsgfQorICAgIGJvb2wgaXNWZWN0b3IoKSBjb25zdCB7IHJldHVybiB0eXBl
LmlzVmVjdG9yKCk7IH0KKyAgICBib29sIGlzU2NhbGFyKCkgY29uc3QgeyByZXR1cm4gdHlwZS5p
c1NjYWxhcigpOyB9CisgICAgY29uc3QgY2hhciogZ2V0QmFzaWNTdHJpbmcoKSBjb25zdCB7IHJl
dHVybiB0eXBlLmdldEJhc2ljU3RyaW5nKCk7IH0KKyAgICBjb25zdCBjaGFyKiBnZXRRdWFsaWZp
ZXJTdHJpbmcoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldFF1YWxpZmllclN0cmluZygpOyB9Cisg
ICAgVFN0cmluZyBnZXRDb21wbGV0ZVN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0Q29t
cGxldGVTdHJpbmcoKTsgfQorCisgICAgaW50IHRvdGFsUmVnaXN0ZXJDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIHR5cGUudG90YWxSZWdpc3RlckNvdW50KCk7IH0KKyAgICBpbnQgZWxlbWVudFJlZ2lz
dGVyQ291bnQoKSBjb25zdCB7IHJldHVybiB0eXBlLmVsZW1lbnRSZWdpc3RlckNvdW50KCk7IH0K
KyAgICBpbnQgZ2V0QXJyYXlTaXplKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRBcnJheVNpemUo
KTsgfQorCitwcm90ZWN0ZWQ6CisgICAgVFR5cGUgdHlwZTsKK307CisKKy8vCisvLyBIYW5kbGUg
Zm9yLCBkby13aGlsZSwgYW5kIHdoaWxlIGxvb3BzLgorLy8KK2VudW0gVExvb3BUeXBlIHsKKyAg
ICBFTG9vcEZvciwKKyAgICBFTG9vcFdoaWxlLAorICAgIEVMb29wRG9XaGlsZQorfTsKKworY2xh
c3MgVEludGVybUxvb3AgOiBwdWJsaWMgVEludGVybU5vZGUgeworcHVibGljOgorICAgIFRJbnRl
cm1Mb29wKFRMb29wVHlwZSBhVHlwZSwKKyAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSAqYUlu
aXQsIFRJbnRlcm1UeXBlZCogYUNvbmQsIFRJbnRlcm1UeXBlZCogYUV4cHIsCisgICAgICAgICAg
ICAgICAgVEludGVybU5vZGUqIGFCb2R5KSA6CisgICAgICAgICAgICB0eXBlKGFUeXBlKSwKKyAg
ICAgICAgICAgIGluaXQoYUluaXQpLAorICAgICAgICAgICAgY29uZChhQ29uZCksCisgICAgICAg
ICAgICBleHByKGFFeHByKSwKKyAgICAgICAgICAgIGJvZHkoYUJvZHkpLAorICAgICAgICAgICAg
dW5yb2xsRmxhZyhmYWxzZSkgeyB9CisKKyAgICB2aXJ0dWFsIFRJbnRlcm1Mb29wKiBnZXRBc0xv
b3BOb2RlKCkgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50
ZXJtVHJhdmVyc2VyKik7CisgICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGlsZE5vZGUoCisgICAg
ICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KTsKKwor
ICAgIFRMb29wVHlwZSBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZTsgfQorICAgIFRJbnRl
cm1Ob2RlKiBnZXRJbml0KCkgeyByZXR1cm4gaW5pdDsgfQorICAgIFRJbnRlcm1UeXBlZCogZ2V0
Q29uZGl0aW9uKCkgeyByZXR1cm4gY29uZDsgfQorICAgIFRJbnRlcm1UeXBlZCogZ2V0RXhwcmVz
c2lvbigpIHsgcmV0dXJuIGV4cHI7IH0KKyAgICBUSW50ZXJtTm9kZSogZ2V0Qm9keSgpIHsgcmV0
dXJuIGJvZHk7IH0KKworICAgIHZvaWQgc2V0VW5yb2xsRmxhZyhib29sIGZsYWcpIHsgdW5yb2xs
RmxhZyA9IGZsYWc7IH0KKyAgICBib29sIGdldFVucm9sbEZsYWcoKSB7IHJldHVybiB1bnJvbGxG
bGFnOyB9CisKK3Byb3RlY3RlZDoKKyAgICBUTG9vcFR5cGUgdHlwZTsKKyAgICBUSW50ZXJtTm9k
ZSogaW5pdDsgIC8vIGZvci1sb29wIGluaXRpYWxpemF0aW9uCisgICAgVEludGVybVR5cGVkKiBj
b25kOyAvLyBsb29wIGV4aXQgY29uZGl0aW9uCisgICAgVEludGVybVR5cGVkKiBleHByOyAvLyBm
b3ItbG9vcCBleHByZXNzaW9uCisgICAgVEludGVybU5vZGUqIGJvZHk7ICAvLyBsb29wIGJvZHkK
KworICAgIGJvb2wgdW5yb2xsRmxhZzsgLy8gV2hldGhlciB0aGUgbG9vcCBzaG91bGQgYmUgdW5y
b2xsZWQgb3Igbm90LgorfTsKKworLy8KKy8vIEhhbmRsZSBicmVhaywgY29udGludWUsIHJldHVy
biwgYW5kIGtpbGwuCisvLworY2xhc3MgVEludGVybUJyYW5jaCA6IHB1YmxpYyBUSW50ZXJtTm9k
ZSB7CitwdWJsaWM6CisgICAgVEludGVybUJyYW5jaChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBl
ZCogZSkgOgorICAgICAgICAgICAgZmxvd09wKG9wKSwKKyAgICAgICAgICAgIGV4cHJlc3Npb24o
ZSkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOwor
ICAgIHZpcnR1YWwgYm9vbCByZXBsYWNlQ2hpbGROb2RlKAorICAgICAgICBUSW50ZXJtTm9kZSAq
b3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCk7CisKKyAgICBUT3BlcmF0b3IgZ2V0
Rmxvd09wKCkgeyByZXR1cm4gZmxvd09wOyB9CisgICAgVEludGVybVR5cGVkKiBnZXRFeHByZXNz
aW9uKCkgeyByZXR1cm4gZXhwcmVzc2lvbjsgfQorCitwcm90ZWN0ZWQ6CisgICAgVE9wZXJhdG9y
IGZsb3dPcDsKKyAgICBUSW50ZXJtVHlwZWQqIGV4cHJlc3Npb247ICAvLyBub24temVybyBleGNl
cHQgZm9yICJyZXR1cm4gZXhwOyIgc3RhdGVtZW50cworfTsKKworLy8KKy8vIE5vZGVzIHRoYXQg
Y29ycmVzcG9uZCB0byBzeW1ib2xzIG9yIGNvbnN0YW50cyBpbiB0aGUgc291cmNlIGNvZGUuCisv
LworY2xhc3MgVEludGVybVN5bWJvbCA6IHB1YmxpYyBUSW50ZXJtVHlwZWQgeworcHVibGljOgor
ICAgIC8vIGlmIHN5bWJvbCBpcyBpbml0aWFsaXplZCBhcyBzeW1ib2woc3ltKSwgdGhlIG1lbW9y
eSBjb21lcyBmcm9tIHRoZSBwb29sYWxsb2NhdG9yIG9mIHN5bS4gSWYgc3ltIGNvbWVzIGZyb20K
KyAgICAvLyBwZXIgcHJvY2VzcyBnbG9iYWxwb29sYWxsb2NhdG9yLCB0aGVuIGl0IGNhdXNlcyBp
bmNyZWFzZWQgbWVtb3J5IHVzYWdlIHBlciBjb21waWxlCisgICAgLy8gaXQgaXMgZXNzZW50aWFs
IHRvIHVzZSAic3ltYm9sID0gc3ltIiB0byBhc3NpZ24gdG8gc3ltYm9sCisgICAgVEludGVybVN5
bWJvbChpbnQgaSwgY29uc3QgVFN0cmluZyYgc3ltLCBjb25zdCBUVHlwZSYgdCkgOiAKKyAgICAg
ICAgICAgIFRJbnRlcm1UeXBlZCh0KSwgaWQoaSkgIHsgc3ltYm9sID0gc3ltOyBvcmlnaW5hbFN5
bWJvbCA9IHN5bTsgfSAKKworICAgIHZpcnR1YWwgYm9vbCBoYXNTaWRlRWZmZWN0cygpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBpbnQgZ2V0SWQoKSBjb25zdCB7IHJldHVybiBpZDsg
fQorICAgIGNvbnN0IFRTdHJpbmcmIGdldFN5bWJvbCgpIGNvbnN0IHsgcmV0dXJuIHN5bWJvbDsg
fQorCisgICAgdm9pZCBzZXRJZChpbnQgbmV3SWQpIHsgaWQgPSBuZXdJZDsgfQorICAgIHZvaWQg
c2V0U3ltYm9sKGNvbnN0IFRTdHJpbmcmIHN5bSkgeyBzeW1ib2wgPSBzeW07IH0KKworICAgIGNv
bnN0IFRTdHJpbmcmIGdldE9yaWdpbmFsU3ltYm9sKCkgY29uc3QgeyByZXR1cm4gb3JpZ2luYWxT
eW1ib2w7IH0KKworICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7
CisgICAgdmlydHVhbCBUSW50ZXJtU3ltYm9sKiBnZXRBc1N5bWJvbE5vZGUoKSB7IHJldHVybiB0
aGlzOyB9CisgICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGlsZE5vZGUoVEludGVybU5vZGUgKiwg
VEludGVybU5vZGUgKikgeyByZXR1cm4gZmFsc2U7IH0KKworcHJvdGVjdGVkOgorICAgIGludCBp
ZDsKKyAgICBUU3RyaW5nIHN5bWJvbDsKKyAgICBUU3RyaW5nIG9yaWdpbmFsU3ltYm9sOworfTsK
KworY2xhc3MgVEludGVybUNvbnN0YW50VW5pb24gOiBwdWJsaWMgVEludGVybVR5cGVkIHsKK3B1
YmxpYzoKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbihDb25zdGFudFVuaW9uICp1bmlvblBvaW50
ZXIsIGNvbnN0IFRUeXBlJiB0KSA6IFRJbnRlcm1UeXBlZCh0KSwgdW5pb25BcnJheVBvaW50ZXIo
dW5pb25Qb2ludGVyKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCBoYXNTaWRlRWZmZWN0cygpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBDb25zdGFudFVuaW9uKiBnZXRVbmlvbkFycmF5
UG9pbnRlcigpIGNvbnN0IHsgcmV0dXJuIHVuaW9uQXJyYXlQb2ludGVyOyB9CisgICAgCisgICAg
aW50IGdldElDb25zdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIHVuaW9uQXJyYXlQb2lu
dGVyID8gdW5pb25BcnJheVBvaW50ZXJbaW5kZXhdLmdldElDb25zdCgpIDogMDsgfQorICAgIGZs
b2F0IGdldEZDb25zdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIHVuaW9uQXJyYXlQb2lu
dGVyID8gdW5pb25BcnJheVBvaW50ZXJbaW5kZXhdLmdldEZDb25zdCgpIDogMC4wZjsgfQorICAg
IGJvb2wgZ2V0QkNvbnN0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gdW5pb25BcnJheVBv
aW50ZXIgPyB1bmlvbkFycmF5UG9pbnRlcltpbmRleF0uZ2V0QkNvbnN0KCkgOiBmYWxzZTsgfQor
CisgICAgdmlydHVhbCBUSW50ZXJtQ29uc3RhbnRVbmlvbiogZ2V0QXNDb25zdGFudFVuaW9uKCkg
IHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZl
cnNlciopOworICAgIHZpcnR1YWwgYm9vbCByZXBsYWNlQ2hpbGROb2RlKFRJbnRlcm1Ob2RlICos
IFRJbnRlcm1Ob2RlICopIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBUSW50ZXJtVHlwZWQqIGZv
bGQoVE9wZXJhdG9yLCBUSW50ZXJtVHlwZWQqLCBUSW5mb1NpbmsmKTsKKworcHJvdGVjdGVkOgor
ICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXlQb2ludGVyOworfTsKKworLy8KKy8vIEludGVy
bWVkaWF0ZSBjbGFzcyBmb3Igbm9kZSB0eXBlcyB0aGF0IGhvbGQgb3BlcmF0b3JzLgorLy8KK2Ns
YXNzIFRJbnRlcm1PcGVyYXRvciA6IHB1YmxpYyBUSW50ZXJtVHlwZWQgeworcHVibGljOgorICAg
IFRPcGVyYXRvciBnZXRPcCgpIGNvbnN0IHsgcmV0dXJuIG9wOyB9CisgICAgdm9pZCBzZXRPcChU
T3BlcmF0b3IgbykgeyBvcCA9IG87IH0KKworICAgIGJvb2wgaXNBc3NpZ25tZW50KCkgY29uc3Q7
CisgICAgYm9vbCBpc0NvbnN0cnVjdG9yKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFz
U2lkZUVmZmVjdHMoKSBjb25zdCB7IHJldHVybiBpc0Fzc2lnbm1lbnQoKTsgfQorCitwcm90ZWN0
ZWQ6CisgICAgVEludGVybU9wZXJhdG9yKFRPcGVyYXRvciBvKSA6IFRJbnRlcm1UeXBlZChUVHlw
ZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkKSksIG9wKG8pIHt9CisgICAgVEludGVybU9wZXJhdG9y
KFRPcGVyYXRvciBvLCBjb25zdCBUVHlwZSYgdCkgOiBUSW50ZXJtVHlwZWQodCksIG9wKG8pIHt9
CisgICAgVE9wZXJhdG9yIG9wOworfTsKKworLy8KKy8vIE5vZGVzIGZvciBhbGwgdGhlIGJhc2lj
IGJpbmFyeSBtYXRoIG9wZXJhdG9ycy4KKy8vCitjbGFzcyBUSW50ZXJtQmluYXJ5IDogcHVibGlj
IFRJbnRlcm1PcGVyYXRvciB7CitwdWJsaWM6CisgICAgVEludGVybUJpbmFyeShUT3BlcmF0b3Ig
bykgOiBUSW50ZXJtT3BlcmF0b3IobyksIGFkZEluZGV4Q2xhbXAoZmFsc2UpIHt9CisKKyAgICB2
aXJ0dWFsIFRJbnRlcm1CaW5hcnkqIGdldEFzQmluYXJ5Tm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOworICAgIHZpcnR1
YWwgYm9vbCByZXBsYWNlQ2hpbGROb2RlKAorICAgICAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWws
IFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzU2lkZUVm
ZmVjdHMoKSBjb25zdCB7IHJldHVybiAoaXNBc3NpZ25tZW50KCkgfHwgbGVmdC0+aGFzU2lkZUVm
ZmVjdHMoKSB8fCByaWdodC0+aGFzU2lkZUVmZmVjdHMoKSk7IH0KKworICAgIHZvaWQgc2V0TGVm
dChUSW50ZXJtVHlwZWQqIG4pIHsgbGVmdCA9IG47IH0KKyAgICB2b2lkIHNldFJpZ2h0KFRJbnRl
cm1UeXBlZCogbikgeyByaWdodCA9IG47IH0KKyAgICBUSW50ZXJtVHlwZWQqIGdldExlZnQoKSBj
b25zdCB7IHJldHVybiBsZWZ0OyB9CisgICAgVEludGVybVR5cGVkKiBnZXRSaWdodCgpIGNvbnN0
IHsgcmV0dXJuIHJpZ2h0OyB9CisgICAgYm9vbCBwcm9tb3RlKFRJbmZvU2luayYpOworCisgICAg
dm9pZCBzZXRBZGRJbmRleENsYW1wKCkgeyBhZGRJbmRleENsYW1wID0gdHJ1ZTsgfQorICAgIGJv
b2wgZ2V0QWRkSW5kZXhDbGFtcCgpIHsgcmV0dXJuIGFkZEluZGV4Q2xhbXA7IH0KKworcHJvdGVj
dGVkOgorICAgIFRJbnRlcm1UeXBlZCogbGVmdDsKKyAgICBUSW50ZXJtVHlwZWQqIHJpZ2h0Owor
CisgICAgLy8gSWYgc2V0IHRvIHRydWUsIHdyYXAgYW55IEVPcEluZGV4SW5kaXJlY3Qgd2l0aCBh
IGNsYW1wIHRvIGJvdW5kcy4KKyAgICBib29sIGFkZEluZGV4Q2xhbXA7Cit9OworCisvLworLy8g
Tm9kZXMgZm9yIHVuYXJ5IG1hdGggb3BlcmF0b3JzLgorLy8KK2NsYXNzIFRJbnRlcm1VbmFyeSA6
IHB1YmxpYyBUSW50ZXJtT3BlcmF0b3IgeworcHVibGljOgorICAgIFRJbnRlcm1VbmFyeShUT3Bl
cmF0b3IgbywgY29uc3QgVFR5cGUmIHQpIDogVEludGVybU9wZXJhdG9yKG8sIHQpLCBvcGVyYW5k
KDApLCB1c2VFbXVsYXRlZEZ1bmN0aW9uKGZhbHNlKSB7fQorICAgIFRJbnRlcm1VbmFyeShUT3Bl
cmF0b3IgbykgOiBUSW50ZXJtT3BlcmF0b3IobyksIG9wZXJhbmQoMCksIHVzZUVtdWxhdGVkRnVu
Y3Rpb24oZmFsc2UpIHt9CisKKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZl
cnNlciopOworICAgIHZpcnR1YWwgVEludGVybVVuYXJ5KiBnZXRBc1VuYXJ5Tm9kZSgpIHsgcmV0
dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxkTm9kZSgKKyAgICAgICAg
VEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFjZW1lbnQpOworCisgICAg
dmlydHVhbCBib29sIGhhc1NpZGVFZmZlY3RzKCkgY29uc3QgeyByZXR1cm4gKGlzQXNzaWdubWVu
dCgpIHx8IG9wZXJhbmQtPmhhc1NpZGVFZmZlY3RzKCkpOyB9CisKKyAgICB2b2lkIHNldE9wZXJh
bmQoVEludGVybVR5cGVkKiBvKSB7IG9wZXJhbmQgPSBvOyB9CisgICAgVEludGVybVR5cGVkKiBn
ZXRPcGVyYW5kKCkgeyByZXR1cm4gb3BlcmFuZDsgfSAgICAKKyAgICBib29sIHByb21vdGUoVElu
Zm9TaW5rJik7CisKKyAgICB2b2lkIHNldFVzZUVtdWxhdGVkRnVuY3Rpb24oKSB7IHVzZUVtdWxh
dGVkRnVuY3Rpb24gPSB0cnVlOyB9CisgICAgYm9vbCBnZXRVc2VFbXVsYXRlZEZ1bmN0aW9uKCkg
eyByZXR1cm4gdXNlRW11bGF0ZWRGdW5jdGlvbjsgfQorCitwcm90ZWN0ZWQ6CisgICAgVEludGVy
bVR5cGVkKiBvcGVyYW5kOworCisgICAgLy8gSWYgc2V0IHRvIHRydWUsIHJlcGxhY2UgdGhlIGJ1
aWx0LWluIGZ1bmN0aW9uIGNhbGwgd2l0aCBhbiBlbXVsYXRlZCBvbmUKKyAgICAvLyB0byB3b3Jr
IGFyb3VuZCBkcml2ZXIgYnVncy4KKyAgICBib29sIHVzZUVtdWxhdGVkRnVuY3Rpb247Cit9Owor
Cit0eXBlZGVmIFRWZWN0b3I8VEludGVybU5vZGUqPiBUSW50ZXJtU2VxdWVuY2U7Cit0eXBlZGVm
IFRWZWN0b3I8aW50PiBUUXVhbGlmaWVyTGlzdDsKKworLy8KKy8vIE5vZGVzIHRoYXQgb3BlcmF0
ZSBvbiBhbiBhcmJpdHJhcnkgc2l6ZWQgc2V0IG9mIGNoaWxkcmVuLgorLy8KK2NsYXNzIFRJbnRl
cm1BZ2dyZWdhdGUgOiBwdWJsaWMgVEludGVybU9wZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBUSW50
ZXJtQWdncmVnYXRlKCkgOiBUSW50ZXJtT3BlcmF0b3IoRU9wTnVsbCksIHVzZXJEZWZpbmVkKGZh
bHNlKSwgdXNlRW11bGF0ZWRGdW5jdGlvbihmYWxzZSkgeyB9CisgICAgVEludGVybUFnZ3JlZ2F0
ZShUT3BlcmF0b3IgbykgOiBUSW50ZXJtT3BlcmF0b3IobyksIHVzZUVtdWxhdGVkRnVuY3Rpb24o
ZmFsc2UpIHsgfQorICAgIH5USW50ZXJtQWdncmVnYXRlKCkgeyB9CisKKyAgICB2aXJ0dWFsIFRJ
bnRlcm1BZ2dyZWdhdGUqIGdldEFzQWdncmVnYXRlKCkgeyByZXR1cm4gdGhpczsgfQorICAgIHZp
cnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7CisgICAgdmlydHVhbCBib29s
IHJlcGxhY2VDaGlsZE5vZGUoCisgICAgICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVy
bU5vZGUgKnJlcGxhY2VtZW50KTsKKworICAgIC8vIENvbnNlcnZhdGl2ZWx5IGFzc3VtZSBmdW5j
dGlvbiBjYWxscyBhbmQgb3RoZXIgYWdncmVnYXRlIG9wZXJhdG9ycyBoYXZlIHNpZGUtZWZmZWN0
cworICAgIHZpcnR1YWwgYm9vbCBoYXNTaWRlRWZmZWN0cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KKworICAgIFRJbnRlcm1TZXF1ZW5jZSYgZ2V0U2VxdWVuY2UoKSB7IHJldHVybiBzZXF1ZW5j
ZTsgfQorCisgICAgdm9pZCBzZXROYW1lKGNvbnN0IFRTdHJpbmcmIG4pIHsgbmFtZSA9IG47IH0K
KyAgICBjb25zdCBUU3RyaW5nJiBnZXROYW1lKCkgY29uc3QgeyByZXR1cm4gbmFtZTsgfQorCisg
ICAgdm9pZCBzZXRVc2VyRGVmaW5lZCgpIHsgdXNlckRlZmluZWQgPSB0cnVlOyB9CisgICAgYm9v
bCBpc1VzZXJEZWZpbmVkKCkgY29uc3QgeyByZXR1cm4gdXNlckRlZmluZWQ7IH0KKworICAgIHZv
aWQgc2V0T3B0aW1pemUoYm9vbCBvKSB7IG9wdGltaXplID0gbzsgfQorICAgIGJvb2wgZ2V0T3B0
aW1pemUoKSB7IHJldHVybiBvcHRpbWl6ZTsgfQorICAgIHZvaWQgc2V0RGVidWcoYm9vbCBkKSB7
IGRlYnVnID0gZDsgfQorICAgIGJvb2wgZ2V0RGVidWcoKSB7IHJldHVybiBkZWJ1ZzsgfQorCisg
ICAgdm9pZCBzZXRVc2VFbXVsYXRlZEZ1bmN0aW9uKCkgeyB1c2VFbXVsYXRlZEZ1bmN0aW9uID0g
dHJ1ZTsgfQorICAgIGJvb2wgZ2V0VXNlRW11bGF0ZWRGdW5jdGlvbigpIHsgcmV0dXJuIHVzZUVt
dWxhdGVkRnVuY3Rpb247IH0KKworcHJvdGVjdGVkOgorICAgIFRJbnRlcm1BZ2dyZWdhdGUoY29u
c3QgVEludGVybUFnZ3JlZ2F0ZSYpOyAvLyBkaXNhbGxvdyBjb3B5IGNvbnN0cnVjdG9yCisgICAg
VEludGVybUFnZ3JlZ2F0ZSYgb3BlcmF0b3I9KGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUmKTsgLy8g
ZGlzYWxsb3cgYXNzaWdubWVudCBvcGVyYXRvcgorICAgIFRJbnRlcm1TZXF1ZW5jZSBzZXF1ZW5j
ZTsKKyAgICBUU3RyaW5nIG5hbWU7CisgICAgYm9vbCB1c2VyRGVmaW5lZDsgLy8gdXNlZCBmb3Ig
dXNlciBkZWZpbmVkIGZ1bmN0aW9uIG5hbWVzCisKKyAgICBib29sIG9wdGltaXplOworICAgIGJv
b2wgZGVidWc7CisKKyAgICAvLyBJZiBzZXQgdG8gdHJ1ZSwgcmVwbGFjZSB0aGUgYnVpbHQtaW4g
ZnVuY3Rpb24gY2FsbCB3aXRoIGFuIGVtdWxhdGVkIG9uZQorICAgIC8vIHRvIHdvcmsgYXJvdW5k
IGRyaXZlciBidWdzLgorICAgIGJvb2wgdXNlRW11bGF0ZWRGdW5jdGlvbjsKK307CisKKy8vCisv
LyBGb3IgaWYgdGVzdHMuICBTaW1wbGlmaWVkIHNpbmNlIHRoZXJlIGlzIG5vIHN3aXRjaCBzdGF0
ZW1lbnQuCisvLworY2xhc3MgVEludGVybVNlbGVjdGlvbiA6IHB1YmxpYyBUSW50ZXJtVHlwZWQg
eworcHVibGljOgorICAgIFRJbnRlcm1TZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50
ZXJtTm9kZSogdHJ1ZUIsIFRJbnRlcm1Ob2RlKiBmYWxzZUIpIDoKKyAgICAgICAgICAgIFRJbnRl
cm1UeXBlZChUVHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpKSwgY29uZGl0aW9uKGNvbmQpLCB0
cnVlQmxvY2sodHJ1ZUIpLCBmYWxzZUJsb2NrKGZhbHNlQikge30KKyAgICBUSW50ZXJtU2VsZWN0
aW9uKFRJbnRlcm1UeXBlZCogY29uZCwgVEludGVybU5vZGUqIHRydWVCLCBUSW50ZXJtTm9kZSog
ZmFsc2VCLCBjb25zdCBUVHlwZSYgdHlwZSkgOgorICAgICAgICAgICAgVEludGVybVR5cGVkKHR5
cGUpLCBjb25kaXRpb24oY29uZCksIHRydWVCbG9jayh0cnVlQiksIGZhbHNlQmxvY2soZmFsc2VC
KSB7fQorCisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxkTm9kZSgKKyAgICAgICAgVEludGVybU5vZGUgKm9y
aWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFjZW1lbnQpOworCisgICAgLy8gQ29uc2VydmF0aXZl
bHkgYXNzdW1lIHNlbGVjdGlvbnMgaGF2ZSBzaWRlLWVmZmVjdHMKKyAgICB2aXJ0dWFsIGJvb2wg
aGFzU2lkZUVmZmVjdHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBib29sIHVzZXNU
ZXJuYXJ5T3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBnZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lk
OyB9CisgICAgVEludGVybU5vZGUqIGdldENvbmRpdGlvbigpIGNvbnN0IHsgcmV0dXJuIGNvbmRp
dGlvbjsgfQorICAgIFRJbnRlcm1Ob2RlKiBnZXRUcnVlQmxvY2soKSBjb25zdCB7IHJldHVybiB0
cnVlQmxvY2s7IH0KKyAgICBUSW50ZXJtTm9kZSogZ2V0RmFsc2VCbG9jaygpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlQmxvY2s7IH0KKyAgICBUSW50ZXJtU2VsZWN0aW9uKiBnZXRBc1NlbGVjdGlvbk5v
ZGUoKSB7IHJldHVybiB0aGlzOyB9CisKK3Byb3RlY3RlZDoKKyAgICBUSW50ZXJtVHlwZWQqIGNv
bmRpdGlvbjsKKyAgICBUSW50ZXJtTm9kZSogdHJ1ZUJsb2NrOworICAgIFRJbnRlcm1Ob2RlKiBm
YWxzZUJsb2NrOworfTsKKworZW51bSBWaXNpdAoreworICAgIFByZVZpc2l0LAorICAgIEluVmlz
aXQsCisgICAgUG9zdFZpc2l0Cit9OworCisvLworLy8gRm9yIHRyYXZlcnNpbmcgdGhlIHRyZWUu
ICBVc2VyIHNob3VsZCBkZXJpdmUgZnJvbSB0aGlzLCAKKy8vIHB1dCB0aGVpciB0cmF2ZXJzYWwg
c3BlY2lmaWMgZGF0YSBpbiBpdCwgYW5kIHRoZW4gcGFzcworLy8gaXQgdG8gYSBUcmF2ZXJzZSBt
ZXRob2QuCisvLworLy8gV2hlbiB1c2luZyB0aGlzLCBqdXN0IGZpbGwgaW4gdGhlIG1ldGhvZHMg
Zm9yIG5vZGVzIHlvdSB3YW50IHZpc2l0ZWQuCisvLyBSZXR1cm4gZmFsc2UgZnJvbSBhIHByZS12
aXNpdCB0byBza2lwIHZpc2l0aW5nIHRoYXQgbm9kZSdzIHN1YnRyZWUuCisvLworY2xhc3MgVElu
dGVybVRyYXZlcnNlcgoreworcHVibGljOgorICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUo
KTsKKyAgICBUSW50ZXJtVHJhdmVyc2VyKGJvb2wgcHJlVmlzaXQgPSB0cnVlLCBib29sIGluVmlz
aXQgPSBmYWxzZSwgYm9vbCBwb3N0VmlzaXQgPSBmYWxzZSwgYm9vbCByaWdodFRvTGVmdCA9IGZh
bHNlKSA6IAorICAgICAgICAgICAgcHJlVmlzaXQocHJlVmlzaXQpLAorICAgICAgICAgICAgaW5W
aXNpdChpblZpc2l0KSwKKyAgICAgICAgICAgIHBvc3RWaXNpdChwb3N0VmlzaXQpLAorICAgICAg
ICAgICAgcmlnaHRUb0xlZnQocmlnaHRUb0xlZnQpLAorICAgICAgICAgICAgZGVwdGgoMCksCisg
ICAgICAgICAgICBtYXhEZXB0aCgwKSB7fQorICAgIHZpcnR1YWwgflRJbnRlcm1UcmF2ZXJzZXIo
KSB7fQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKSB7fQor
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24q
KSB7fQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJp
bmFyeSopIHtyZXR1cm4gdHJ1ZTt9CisgICAgdmlydHVhbCBib29sIHZpc2l0VW5hcnkoVmlzaXQg
dmlzaXQsIFRJbnRlcm1VbmFyeSopIHtyZXR1cm4gdHJ1ZTt9CisgICAgdmlydHVhbCBib29sIHZp
c2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKikge3JldHVybiB0cnVl
O30KKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1B
Z2dyZWdhdGUqKSB7cmV0dXJuIHRydWU7fQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdExvb3AoVmlz
aXQgdmlzaXQsIFRJbnRlcm1Mb29wKikge3JldHVybiB0cnVlO30KKyAgICB2aXJ0dWFsIGJvb2wg
dmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqKSB7cmV0dXJuIHRydWU7fQor
CisgICAgaW50IGdldE1heERlcHRoKCkgY29uc3Qge3JldHVybiBtYXhEZXB0aDt9CisKKyAgICB2
b2lkIGluY3JlbWVudERlcHRoKFRJbnRlcm1Ob2RlICpjdXJyZW50KQorICAgIHsKKyAgICAgICAg
ZGVwdGgrKzsKKyAgICAgICAgbWF4RGVwdGggPSBzdGQ6Om1heChtYXhEZXB0aCwgZGVwdGgpOwor
ICAgICAgICBwYXRoLnB1c2hfYmFjayhjdXJyZW50KTsKKyAgICB9CisKKyAgICB2b2lkIGRlY3Jl
bWVudERlcHRoKCkKKyAgICB7CisgICAgICAgIGRlcHRoLS07CisgICAgICAgIHBhdGgucG9wX2Jh
Y2soKTsKKyAgICB9CisKKyAgICBUSW50ZXJtTm9kZSAqZ2V0UGFyZW50Tm9kZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gcGF0aC5zaXplKCkgPT0gMCA/IE5VTEwgOiBwYXRoLmJhY2soKTsKKyAg
ICB9CisKKyAgICAvLyBSZXR1cm4gdGhlIG9yaWdpbmFsIG5hbWUgaWYgaGFzaCBmdW5jdGlvbiBw
b2ludGVyIGlzIE5VTEw7CisgICAgLy8gb3RoZXJ3aXNlIHJldHVybiB0aGUgaGFzaGVkIG5hbWUu
CisgICAgc3RhdGljIFRTdHJpbmcgaGFzaChjb25zdCBUU3RyaW5nJiBuYW1lLCBTaEhhc2hGdW5j
dGlvbjY0IGhhc2hGdW5jdGlvbik7CisKKyAgICBjb25zdCBib29sIHByZVZpc2l0OworICAgIGNv
bnN0IGJvb2wgaW5WaXNpdDsKKyAgICBjb25zdCBib29sIHBvc3RWaXNpdDsKKyAgICBjb25zdCBi
b29sIHJpZ2h0VG9MZWZ0OworCitwcm90ZWN0ZWQ6CisgICAgaW50IGRlcHRoOworICAgIGludCBt
YXhEZXB0aDsKKworICAgIC8vIEFsbCB0aGUgbm9kZXMgZnJvbSByb290IHRvIHRoZSBjdXJyZW50
IG5vZGUncyBwYXJlbnQgZHVyaW5nIHRyYXZlcnNpbmcuCisgICAgVFZlY3RvcjxUSW50ZXJtTm9k
ZSAqPiBwYXRoOworfTsKKworI2VuZGlmIC8vIF9fSU5URVJNRURJQVRFX0gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2xvY2FsaW50
ZXJtZWRpYXRlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9sb2NhbGludGVybWVkaWF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1ODJlMDJmNWQ4NTQxZTdjYjMz
NzAzNGUwZTZjOTgyZTFlZjVmNjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9sb2NhbGludGVybWVkaWF0ZS5oCkBAIC0w
LDAgKzEsNTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX0xPQ0FMX0lOVEVSTUVE
SUFURV9JTkNMVURFRF8KKyNkZWZpbmUgX0xPQ0FMX0lOVEVSTUVESUFURV9JTkNMVURFRF8KKwor
I2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TeW1i
b2xUYWJsZS5oIgorCitzdHJ1Y3QgVFZlY3RvckZpZWxkcyB7CisgICAgaW50IG9mZnNldHNbNF07
CisgICAgaW50IG51bTsKK307CisKKy8vCisvLyBTZXQgb2YgaGVscGVyIGZ1bmN0aW9ucyB0byBo
ZWxwIHBhcnNlIGFuZCBidWlsZCB0aGUgdHJlZS4KKy8vCitjbGFzcyBUSW5mb1Npbms7CitjbGFz
cyBUSW50ZXJtZWRpYXRlIHsKK3B1YmxpYzogICAgCisgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RF
TEVURSgpOworICAgIFRJbnRlcm1lZGlhdGUoVEluZm9TaW5rJiBpKSA6IGluZm9TaW5rKGkpIHsg
fQorCisgICAgVEludGVybVN5bWJvbCogYWRkU3ltYm9sKGludCBJZCwgY29uc3QgVFN0cmluZyYs
IGNvbnN0IFRUeXBlJiwgY29uc3QgVFNvdXJjZUxvYyYpOworICAgIFRJbnRlcm1UeXBlZCogYWRk
Q29udmVyc2lvbihUT3BlcmF0b3IsIGNvbnN0IFRUeXBlJiwgVEludGVybVR5cGVkKik7CisgICAg
VEludGVybVR5cGVkKiBhZGRCaW5hcnlNYXRoKFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBs
ZWZ0LCBUSW50ZXJtVHlwZWQqIHJpZ2h0LCBjb25zdCBUU291cmNlTG9jJiwgVFN5bWJvbFRhYmxl
Jik7CisgICAgVEludGVybVR5cGVkKiBhZGRBc3NpZ24oVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlw
ZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmKTsKKyAgICBU
SW50ZXJtVHlwZWQqIGFkZEluZGV4KFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBiYXNlLCBU
SW50ZXJtVHlwZWQqIGluZGV4LCBjb25zdCBUU291cmNlTG9jJik7CisgICAgVEludGVybVR5cGVk
KiBhZGRVbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtTm9kZSogY2hpbGQsIGNvbnN0IFRT
b3VyY2VMb2MmLCBUU3ltYm9sVGFibGUmKTsKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBncm93QWdn
cmVnYXRlKFRJbnRlcm1Ob2RlKiBsZWZ0LCBUSW50ZXJtTm9kZSogcmlnaHQsIGNvbnN0IFRTb3Vy
Y2VMb2MmKTsKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBtYWtlQWdncmVnYXRlKFRJbnRlcm1Ob2Rl
KiBub2RlLCBjb25zdCBUU291cmNlTG9jJik7CisgICAgVEludGVybUFnZ3JlZ2F0ZSogc2V0QWdn
cmVnYXRlT3BlcmF0b3IoVEludGVybU5vZGUqLCBUT3BlcmF0b3IsIGNvbnN0IFRTb3VyY2VMb2Mm
KTsKKyAgICBUSW50ZXJtTm9kZSogIGFkZFNlbGVjdGlvbihUSW50ZXJtVHlwZWQqIGNvbmQsIFRJ
bnRlcm1Ob2RlUGFpciBjb2RlLCBjb25zdCBUU291cmNlTG9jJik7CisgICAgVEludGVybVR5cGVk
KiBhZGRTZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtVHlwZWQqIHRydWVCbG9j
aywgVEludGVybVR5cGVkKiBmYWxzZUJsb2NrLCBjb25zdCBUU291cmNlTG9jJik7CisgICAgVElu
dGVybVR5cGVkKiBhZGRDb21tYShUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmln
aHQsIGNvbnN0IFRTb3VyY2VMb2MmKTsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogYWRkQ29u
c3RhbnRVbmlvbihDb25zdGFudFVuaW9uKiwgY29uc3QgVFR5cGUmLCBjb25zdCBUU291cmNlTG9j
Jik7CisgICAgVEludGVybVR5cGVkKiBwcm9tb3RlQ29uc3RhbnRVbmlvbihUQmFzaWNUeXBlLCBU
SW50ZXJtQ29uc3RhbnRVbmlvbiopIDsKKyAgICBib29sIHBhcnNlQ29uc3RUcmVlKGNvbnN0IFRT
b3VyY2VMb2MmLCBUSW50ZXJtTm9kZSosIENvbnN0YW50VW5pb24qLCBUT3BlcmF0b3IsIFRTeW1i
b2xUYWJsZSYsIFRUeXBlLCBib29sIHNpbmdsZUNvbnN0YW50UGFyYW0gPSBmYWxzZSk7ICAgICAg
ICAKKyAgICBUSW50ZXJtTm9kZSogYWRkTG9vcChUTG9vcFR5cGUsIFRJbnRlcm1Ob2RlKiwgVElu
dGVybVR5cGVkKiwgVEludGVybVR5cGVkKiwgVEludGVybU5vZGUqLCBjb25zdCBUU291cmNlTG9j
Jik7CisgICAgVEludGVybUJyYW5jaCogYWRkQnJhbmNoKFRPcGVyYXRvciwgY29uc3QgVFNvdXJj
ZUxvYyYpOworICAgIFRJbnRlcm1CcmFuY2gqIGFkZEJyYW5jaChUT3BlcmF0b3IsIFRJbnRlcm1U
eXBlZCosIGNvbnN0IFRTb3VyY2VMb2MmKTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZFN3aXp6bGUo
VFZlY3RvckZpZWxkcyYsIGNvbnN0IFRTb3VyY2VMb2MmKTsKKyAgICBib29sIHBvc3RQcm9jZXNz
KFRJbnRlcm1Ob2RlKik7CisgICAgdm9pZCByZW1vdmUoVEludGVybU5vZGUqKTsKKyAgICB2b2lk
IG91dHB1dFRyZWUoVEludGVybU5vZGUqKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIG9wZXJhdG9y
PShUSW50ZXJtZWRpYXRlJik7IC8vIHByZXZlbnQgYXNzaWdubWVudHMKKworICAgIFRJbmZvU2lu
ayYgaW5mb1Npbms7Cit9OworCisjZW5kaWYgLy8gX0xPQ0FMX0lOVEVSTUVESUFURV9JTkNMVURF
RF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL29zaW5jbHVkZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3Ivb3NpbmNsdWRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzMwNjNkNjI0YTg3MjE4NmM0ZTI3
YTgyMjI0NzVhZGQzODhhNzM4MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL29zaW5jbHVkZS5oCkBAIC0wLDAgKzEsNjYg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX19PU0lOQ0xVREVfSAorI2RlZmluZSBf
X09TSU5DTFVERV9ICisKKy8vCisvLyBUaGlzIGZpbGUgY29udGFpbnMgY29udGFpbnMgb3Mtc3Bl
Y2lmaWMgZGF0YXR5cGVzIGFuZAorLy8gZGVjbGFyZXMgYW55IG9zLXNwZWNpZmljIGZ1bmN0aW9u
cy4KKy8vCisKKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfV0lONjQpCisjZGVmaW5l
IEFOR0xFX09TX1dJTgorI2VsaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19saW51
eF9fKSB8fCBcCisgICAgICBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fT3BlbkJT
RF9fKSB8fCBcCisgICAgICBkZWZpbmVkKF9fTmV0QlNEX18pIHx8IGRlZmluZWQoX19EcmFnb25G
bHlfXykgfHwgXAorICAgICAgZGVmaW5lZChfX3N1bikgfHwgZGVmaW5lZChBTkRST0lEKSB8fCBc
CisgICAgICBkZWZpbmVkKF9fR0xJQkNfXykgfHwgZGVmaW5lZChfX0dOVV9fKSB8fCBcCisgICAg
ICBkZWZpbmVkKF9fUU5YX18pCisjZGVmaW5lIEFOR0xFX09TX1BPU0lYCisjZWxzZQorI2Vycm9y
IFVuc3VwcG9ydGVkIHBsYXRmb3JtLgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEFOR0xFX09TX1dJ
TikKKyNkZWZpbmUgU1RSSUNUCisjZGVmaW5lIFZDX0VYVFJBTEVBTiAxCisjaW5jbHVkZSA8d2lu
ZG93cy5oPgorI2VsaWYgZGVmaW5lZChBTkdMRV9PU19QT1NJWCkKKyNpbmNsdWRlIDxwdGhyZWFk
Lmg+CisjaW5jbHVkZSA8c2VtYXBob3JlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZiAg
Ly8gQU5HTEVfT1NfV0lOCisKKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvY29tcGls
ZXJkZWJ1Zy5oIgorCisvLworLy8gVGhyZWFkIExvY2FsIFN0b3JhZ2UgT3BlcmF0aW9ucworLy8K
KyNpZiBkZWZpbmVkKEFOR0xFX09TX1dJTikKK3R5cGVkZWYgRFdPUkQgT1NfVExTSW5kZXg7Cisj
ZGVmaW5lIE9TX0lOVkFMSURfVExTX0lOREVYIChUTFNfT1VUX09GX0lOREVYRVMpCisjZWxpZiBk
ZWZpbmVkKEFOR0xFX09TX1BPU0lYKQordHlwZWRlZiBwdGhyZWFkX2tleV90IE9TX1RMU0luZGV4
OworI2RlZmluZSBPU19JTlZBTElEX1RMU19JTkRFWCAoc3RhdGljX2Nhc3Q8T1NfVExTSW5kZXg+
KC0xKSkKKyNlbmRpZiAgLy8gQU5HTEVfT1NfV0lOCisKK09TX1RMU0luZGV4IE9TX0FsbG9jVExT
SW5kZXgoKTsKK2Jvb2wgT1NfU2V0VExTVmFsdWUoT1NfVExTSW5kZXggbkluZGV4LCB2b2lkICps
cHZWYWx1ZSk7Citib29sIE9TX0ZyZWVUTFNJbmRleChPU19UTFNJbmRleCBuSW5kZXgpOworCitp
bmxpbmUgdm9pZCogT1NfR2V0VExTVmFsdWUoT1NfVExTSW5kZXggbkluZGV4KQoreworICAgIEFT
U0VSVChuSW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpOworI2lmIGRlZmluZWQoQU5HTEVf
T1NfV0lOKQorICAgIHJldHVybiBUbHNHZXRWYWx1ZShuSW5kZXgpOworI2VsaWYgZGVmaW5lZChB
TkdMRV9PU19QT1NJWCkKKyAgICByZXR1cm4gcHRocmVhZF9nZXRzcGVjaWZpYyhuSW5kZXgpOwor
I2VuZGlmICAvLyBBTkdMRV9PU19XSU4KK30KKworI2VuZGlmIC8vIF9fT1NJTkNMVURFX0gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L29zc291cmNlX3Bvc2l4LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL29zc291cmNlX3Bvc2l4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MGEzNzU3NDQ0MWMw
MTM0NmU3MzFlZTcyNTMyMWViMTVlY2UyZGMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Ivb3Nzb3VyY2VfcG9zaXguY3Bw
CkBAIC0wLDAgKzEsNjQgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vCisvLyBUaGlzIGZpbGUg
Y29udGFpbnMgdGhlIHBvc2l4IHNwZWNpZmljIGZ1bmN0aW9ucworLy8KKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL29zaW5jbHVkZS5oIgorCisjaWYgIWRlZmluZWQoQU5HTEVfT1NfUE9T
SVgpCisjZXJyb3IgVHJ5aW5nIHRvIGJ1aWxkIGEgcG9zaXggc3BlY2lmaWMgZmlsZSBpbiBhIG5v
bi1wb3NpeCBidWlsZC4KKyNlbmRpZgorCisvLworLy8gVGhyZWFkIExvY2FsIFN0b3JhZ2UgT3Bl
cmF0aW9ucworLy8KK09TX1RMU0luZGV4IE9TX0FsbG9jVExTSW5kZXgoKQoreworICAgIHB0aHJl
YWRfa2V5X3QgcFBvb2xJbmRleDsKKworICAgIC8vCisgICAgLy8gQ3JlYXRlIGdsb2JhbCBwb29s
IGtleS4KKyAgICAvLworICAgIGlmICgocHRocmVhZF9rZXlfY3JlYXRlKCZwUG9vbEluZGV4LCBO
VUxMKSkgIT0gMCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiT1NfQWxsb2NUTFNJbmRleCgpOiBV
bmFibGUgdG8gYWxsb2NhdGUgVGhyZWFkIExvY2FsIFN0b3JhZ2UiKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0dXJuIHBQb29sSW5kZXg7Cisg
ICAgfQorfQorCisKK2Jvb2wgT1NfU2V0VExTVmFsdWUoT1NfVExTSW5kZXggbkluZGV4LCB2b2lk
ICpscHZWYWx1ZSkKK3sKKyAgICBpZiAobkluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7
CisgICAgICAgIGFzc2VydCgwICYmICJPU19TZXRUTFNWYWx1ZSgpOiBJbnZhbGlkIFRMUyBJbmRl
eCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHB0aHJlYWRfc2V0
c3BlY2lmaWMobkluZGV4LCBscHZWYWx1ZSkgPT0gMCkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7Cit9CisKKworYm9vbCBPU19GcmVlVExTSW5k
ZXgoT1NfVExTSW5kZXggbkluZGV4KQoreworICAgIGlmIChuSW5kZXggPT0gT1NfSU5WQUxJRF9U
TFNfSU5ERVgpIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIk9TX1NldFRMU1ZhbHVlKCk6IEludmFs
aWQgVExTIEluZGV4Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLwor
ICAgIC8vIERlbGV0ZSB0aGUgZ2xvYmFsIHBvb2wga2V5LgorICAgIC8vCisgICAgaWYgKHB0aHJl
YWRfa2V5X2RlbGV0ZShuSW5kZXgpID09IDApCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGVs
c2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Ivb3Nzb3VyY2Vfd2luLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL29zc291cmNlX3dpbi5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMmNjNTg3MWI3MWQzZWVmZDIxNTYxOTM2NWVhYWNkNjI1NTA4Yjg4Mwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL29zc291cmNlX3dpbi5jcHAKQEAgLTAsMCArMSw1NyBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Ivb3NpbmNsdWRlLmgiCisvLwor
Ly8gVGhpcyBmaWxlIGNvbnRhaW5zIGNvbnRhaW5zIHRoZSB3aW5kb3cncyBzcGVjaWZpYyBmdW5j
dGlvbnMKKy8vCisKKyNpZiAhZGVmaW5lZChBTkdMRV9PU19XSU4pCisjZXJyb3IgVHJ5aW5nIHRv
IGJ1aWxkIGEgd2luZG93cyBzcGVjaWZpYyBmaWxlIGluIGEgbm9uIHdpbmRvd3MgYnVpbGQuCisj
ZW5kaWYKKworCisvLworLy8gVGhyZWFkIExvY2FsIFN0b3JhZ2UgT3BlcmF0aW9ucworLy8KK09T
X1RMU0luZGV4IE9TX0FsbG9jVExTSW5kZXgoKQoreworCURXT1JEIGR3SW5kZXggPSBUbHNBbGxv
YygpOworCWlmIChkd0luZGV4ID09IFRMU19PVVRfT0ZfSU5ERVhFUykgeworCQlhc3NlcnQoMCAm
JiAiT1NfQWxsb2NUTFNJbmRleCgpOiBVbmFibGUgdG8gYWxsb2NhdGUgVGhyZWFkIExvY2FsIFN0
b3JhZ2UiKTsKKwkJcmV0dXJuIE9TX0lOVkFMSURfVExTX0lOREVYOworCX0KKworCXJldHVybiBk
d0luZGV4OworfQorCisKK2Jvb2wgT1NfU2V0VExTVmFsdWUoT1NfVExTSW5kZXggbkluZGV4LCB2
b2lkICpscHZWYWx1ZSkKK3sKKwlpZiAobkluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7
CisJCWFzc2VydCgwICYmICJPU19TZXRUTFNWYWx1ZSgpOiBJbnZhbGlkIFRMUyBJbmRleCIpOwor
CQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKFRsc1NldFZhbHVlKG5JbmRleCwgbHB2VmFsdWUp
KQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlCisJCXJldHVybiBmYWxzZTsKK30KKworCitib29sIE9T
X0ZyZWVUTFNJbmRleChPU19UTFNJbmRleCBuSW5kZXgpCit7CisJaWYgKG5JbmRleCA9PSBPU19J
TlZBTElEX1RMU19JTkRFWCkgeworCQlhc3NlcnQoMCAmJiAiT1NfU2V0VExTVmFsdWUoKTogSW52
YWxpZCBUTFMgSW5kZXgiKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChUbHNGcmVlKG5J
bmRleCkpCisJCXJldHVybiB0cnVlOworCWVsc2UKKwkJcmV0dXJuIGZhbHNlOworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvcGFy
c2VDb25zdC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9wYXJzZUNvbnN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNTlmMGJlOWQ4YzAwNmZjOTIyMmM0OThm
MDRlNmJlNGY2NWIxNTc4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvcGFyc2VDb25zdC5jcHAKQEAgLTAsMCArMSwyNDUg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Bh
cnNlQ29udGV4dC5oIgorCisvLworLy8gVXNlIHRoaXMgY2xhc3MgdG8gY2FycnkgYWxvbmcgZGF0
YSBmcm9tIG5vZGUgdG8gbm9kZSBpbiAKKy8vIHRoZSB0cmF2ZXJzYWwKKy8vCitjbGFzcyBUQ29u
c3RUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgVENv
bnN0VHJhdmVyc2VyKENvbnN0YW50VW5pb24qIGNVbmlvbiwgYm9vbCBzaW5nbGVDb25zdFBhcmFt
LCBUT3BlcmF0b3IgY29uc3RydWN0VHlwZSwgVEluZm9TaW5rJiBzaW5rLCBUU3ltYm9sVGFibGUm
IHN5bVRhYmxlLCBUVHlwZSYgdCkKKyAgICAgICAgOiBlcnJvcihmYWxzZSksCisgICAgICAgICAg
aW5kZXgoMCksCisgICAgICAgICAgdW5pb25BcnJheShjVW5pb24pLAorICAgICAgICAgIHR5cGUo
dCksCisgICAgICAgICAgY29uc3RydWN0b3JUeXBlKGNvbnN0cnVjdFR5cGUpLAorICAgICAgICAg
IHNpbmdsZUNvbnN0YW50UGFyYW0oc2luZ2xlQ29uc3RQYXJhbSksCisgICAgICAgICAgaW5mb1Np
bmsoc2luayksCisgICAgICAgICAgc3ltYm9sVGFibGUoc3ltVGFibGUpLAorICAgICAgICAgIHNp
emUoMCksCisgICAgICAgICAgaXNNYXRyaXgoZmFsc2UpLAorICAgICAgICAgIG1hdHJpeFNpemUo
MCkgeworICAgIH0KKworICAgIGJvb2wgZXJyb3I7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHZp
c2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKKyAgICB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihU
SW50ZXJtQ29uc3RhbnRVbmlvbiopOworICAgIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQs
IFRJbnRlcm1CaW5hcnkqKTsKKyAgICBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRl
cm1VbmFyeSopOworICAgIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1T
ZWxlY3Rpb24qKTsKKyAgICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJt
QWdncmVnYXRlKik7CisgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29w
Kik7CisgICAgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCopOwor
CisgICAgc2l6ZV90IGluZGV4OworICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXk7CisgICAg
VFR5cGUgdHlwZTsKKyAgICBUT3BlcmF0b3IgY29uc3RydWN0b3JUeXBlOworICAgIGJvb2wgc2lu
Z2xlQ29uc3RhbnRQYXJhbTsKKyAgICBUSW5mb1NpbmsmIGluZm9TaW5rOworICAgIFRTeW1ib2xU
YWJsZSYgc3ltYm9sVGFibGU7CisgICAgc2l6ZV90IHNpemU7IC8vIHNpemUgb2YgdGhlIGNvbnN0
cnVjdG9yICggNCBmb3IgdmVjNCkKKyAgICBib29sIGlzTWF0cml4OworICAgIHNpemVfdCBtYXRy
aXhTaXplOyAvLyBkaW1lbnNpb24gb2YgdGhlIG1hdHJpeCAobm9taW5hbCBzaXplIGFuZCBub3Qg
dGhlIGluc3RhbmNlIHNpemUpCit9OworCisvLworLy8gVGhlIHJlc3Qgb2YgdGhlIGZpbGUgYXJl
IHRoZSB0cmF2ZXJzYWwgZnVuY3Rpb25zLiAgVGhlIGxhc3Qgb25lCisvLyBpcyB0aGUgb25lIHRo
YXQgc3RhcnRzIHRoZSB0cmF2ZXJzYWwuCisvLworLy8gUmV0dXJuIHRydWUgZnJvbSBpbnRlcmlv
ciBub2RlcyB0byBoYXZlIHRoZSBleHRlcm5hbCB0cmF2ZXJzYWwKKy8vIGNvbnRpbnVlIG9uIHRv
IGNoaWxkcmVuLiAgSWYgeW91IHByb2Nlc3MgY2hpbGRyZW4geW91cnNlbGYsCisvLyByZXR1cm4g
ZmFsc2UuCisvLworCit2b2lkIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRTeW1ib2woVEludGVybVN5
bWJvbCogbm9kZSkKK3sKKyAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFs
RXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIlN5bWJvbCBOb2RlIGZvdW5kIGluIGNvbnN0YW50IGNv
bnN0cnVjdG9yIik7CisgICAgcmV0dXJuOworCit9CisKK2Jvb2wgVENvbnN0VHJhdmVyc2VyOjp2
aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSogbm9kZSkKK3sKKyAgICBUUXVh
bGlmaWVyIHF1YWxpZmllciA9IG5vZGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKTsKKyAgICAK
KyAgICBpZiAocXVhbGlmaWVyICE9IEV2cUNvbnN0KSB7CisgICAgICAgIFRTdHJpbmcgYnVmOwor
ICAgICAgICBidWYuYXBwZW5kKCInY29uc3RydWN0b3InIDogYXNzaWduaW5nIG5vbi1jb25zdGFu
dCB0byAiKTsKKyAgICAgICAgYnVmLmFwcGVuZCh0eXBlLmdldENvbXBsZXRlU3RyaW5nKCkpOwor
ICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEVycm9yLCBub2RlLT5nZXRMaW5l
KCksIGJ1Zi5jX3N0cigpKTsKKyAgICAgICAgZXJyb3IgPSB0cnVlOworICAgICAgICByZXR1cm4g
ZmFsc2U7ICAKKyAgICB9CisKKyAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJu
YWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQmluYXJ5IE5vZGUgZm91bmQgaW4gY29uc3RhbnQg
Y29uc3RydWN0b3IiKTsKKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVENvbnN0
VHJhdmVyc2VyOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUpCit7
CisgICAgVFN0cmluZyBidWY7CisgICAgYnVmLmFwcGVuZCgiJ2NvbnN0cnVjdG9yJyA6IGFzc2ln
bmluZyBub24tY29uc3RhbnQgdG8gIik7CisgICAgYnVmLmFwcGVuZCh0eXBlLmdldENvbXBsZXRl
U3RyaW5nKCkpOworICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4RXJyb3IsIG5vZGUt
PmdldExpbmUoKSwgYnVmLmNfc3RyKCkpOworICAgIGVycm9yID0gdHJ1ZTsKKyAgICByZXR1cm4g
ZmFsc2U7ICAKK30KKworYm9vbCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0QWdncmVnYXRlKFZpc2l0
IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQoreworICAgIGlmICghbm9kZS0+aXNDb25z
dHJ1Y3RvcigpICYmIG5vZGUtPmdldE9wKCkgIT0gRU9wQ29tbWEpIHsKKyAgICAgICAgVFN0cmlu
ZyBidWY7CisgICAgICAgIGJ1Zi5hcHBlbmQoIidjb25zdHJ1Y3RvcicgOiBhc3NpZ25pbmcgbm9u
LWNvbnN0YW50IHRvICIpOworICAgICAgICBidWYuYXBwZW5kKHR5cGUuZ2V0Q29tcGxldGVTdHJp
bmcoKSk7CisgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4RXJyb3IsIG5vZGUt
PmdldExpbmUoKSwgYnVmLmNfc3RyKCkpOworICAgICAgICBlcnJvciA9IHRydWU7CisgICAgICAg
IHJldHVybiBmYWxzZTsgIAorICAgIH0KKworICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNp
emUoKSA9PSAwKSB7CisgICAgICAgIGVycm9yID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGJvb2wgZmxhZyA9IG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09
IDEgJiYgbm9kZS0+Z2V0U2VxdWVuY2UoKVswXS0+Z2V0QXNUeXBlZCgpLT5nZXRBc0NvbnN0YW50
VW5pb24oKTsKKyAgICBpZiAoZmxhZykgCisgICAgeworICAgICAgICBzaW5nbGVDb25zdGFudFBh
cmFtID0gdHJ1ZTsgCisgICAgICAgIGNvbnN0cnVjdG9yVHlwZSA9IG5vZGUtPmdldE9wKCk7Cisg
ICAgICAgIHNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOworCisgICAgICAg
IGlmIChub2RlLT5nZXRUeXBlKCkuaXNNYXRyaXgoKSkgeworICAgICAgICAgICAgaXNNYXRyaXgg
PSB0cnVlOworICAgICAgICAgICAgbWF0cml4U2l6ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXROb21p
bmFsU2l6ZSgpOworICAgICAgICB9CisgICAgfSAgICAgICAKKworICAgIGZvciAoVEludGVybVNl
cXVlbmNlOjppdGVyYXRvciBwID0gbm9kZS0+Z2V0U2VxdWVuY2UoKS5iZWdpbigpOyAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCAhPSBub2RlLT5nZXRTZXF1ZW5jZSgpLmVu
ZCgpOyBwKyspIHsKKworICAgICAgICBpZiAobm9kZS0+Z2V0T3AoKSA9PSBFT3BDb21tYSkKKyAg
ICAgICAgICAgIGluZGV4ID0gMDsgICAgICAgICAgIAorCisgICAgICAgICgqcCktPnRyYXZlcnNl
KHRoaXMpOworICAgIH0gICAKKyAgICBpZiAoZmxhZykgCisgICAgeworICAgICAgICBzaW5nbGVD
b25zdGFudFBhcmFtID0gZmFsc2U7ICAgCisgICAgICAgIGNvbnN0cnVjdG9yVHlwZSA9IEVPcE51
bGw7CisgICAgICAgIHNpemUgPSAwOworICAgICAgICBpc01hdHJpeCA9IGZhbHNlOworICAgICAg
ICBtYXRyaXhTaXplID0gMDsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRD
b25zdFRyYXZlcnNlcjo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rp
b24qIG5vZGUpCit7CisgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVy
cm9yLCBub2RlLT5nZXRMaW5lKCksICJTZWxlY3Rpb24gTm9kZSBmb3VuZCBpbiBjb25zdGFudCBj
b25zdHJ1Y3RvciIpOworICAgIGVycm9yID0gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgVENvbnN0VHJhdmVyc2VyOjp2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50
VW5pb24qIG5vZGUpCit7CisgICAgaWYgKCFub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpKQor
ICAgIHsKKyAgICAgICAgLy8gVGhlIGNvbnN0YW50IHdhcyBub3QgaW5pdGlhbGl6ZWQsIHRoaXMg
c2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIGxvZ2dlZAorICAgICAgICBhc3NlcnQoaW5mb1Npbmsu
aW5mby5zaXplKCkgIT0gMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDb25zdGFu
dFVuaW9uKiBsZWZ0VW5pb25BcnJheSA9IHVuaW9uQXJyYXk7CisgICAgc2l6ZV90IGluc3RhbmNl
U2l6ZSA9IHR5cGUuZ2V0T2JqZWN0U2l6ZSgpOworCisgICAgaWYgKGluZGV4ID49IGluc3RhbmNl
U2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFzaW5nbGVDb25zdGFudFBhcmFtKSB7
CisgICAgICAgIHNpemVfdCBzaXplID0gbm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsK
KyAgICAKKyAgICAgICAgQ29uc3RhbnRVbmlvbiAqcmlnaHRVbmlvbkFycmF5ID0gbm9kZS0+Z2V0
VW5pb25BcnJheVBvaW50ZXIoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXpl
OyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBpbnN0YW5jZVNpemUpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaW5kZXhdID0gcmln
aHRVbmlvbkFycmF5W2ldOworCisgICAgICAgICAgICAoaW5kZXgpKys7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBzaXplX3QgdG90YWxTaXplID0gaW5kZXggKyBzaXplOworICAg
ICAgICBDb25zdGFudFVuaW9uICpyaWdodFVuaW9uQXJyYXkgPSBub2RlLT5nZXRVbmlvbkFycmF5
UG9pbnRlcigpOworICAgICAgICBpZiAoIWlzTWF0cml4KSB7CisgICAgICAgICAgICBzaXplX3Qg
Y291bnQgPSAwOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGluZGV4OyBpIDwgdG90YWxT
aXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoaSA+PSBpbnN0YW5jZVNpemUpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5
W2ldID0gcmlnaHRVbmlvbkFycmF5W2NvdW50XTsKKworICAgICAgICAgICAgICAgIChpbmRleCkr
KzsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0VHlwZSgp
LmdldE9iamVjdFNpemUoKSA+IDEpCisgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7ICAvLyBmb3IgbWF0cml4IGNvbnN0cnVjdG9ycwor
ICAgICAgICAgICAgc2l6ZV90IGNvdW50ID0gMDsKKyAgICAgICAgICAgIHNpemVfdCBlbGVtZW50
ID0gaW5kZXg7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gaW5kZXg7IGkgPCB0b3RhbFNp
emU7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChpID49IGluc3RhbmNlU2l6ZSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmIChlbGVtZW50IC0gaSA9
PSAwIHx8IChpIC0gZWxlbWVudCkgJSAobWF0cml4U2l6ZSArIDEpID09IDAgKQorICAgICAgICAg
ICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXSA9IHJpZ2h0VW5pb25BcnJheVtjb3VudF07Cisg
ICAgICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlb
aV0uc2V0RkNvbnN0KDAuMGYpOworCisgICAgICAgICAgICAgICAgKGluZGV4KSsrOworCisgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCkgPiAxKQorICAg
ICAgICAgICAgICAgICAgICBjb3VudCsrOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0TG9vcChW
aXNpdCB2aXNpdCwgVEludGVybUxvb3AqIG5vZGUpCit7CisgICAgaW5mb1NpbmsuaW5mby5tZXNz
YWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRMaW5lKCksICJMb29wIE5vZGUgZm91
bmQgaW4gY29uc3RhbnQgY29uc3RydWN0b3IiKTsKKyAgICBlcnJvciA9IHRydWU7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRCcmFuY2goVmlzaXQg
dmlzaXQsIFRJbnRlcm1CcmFuY2gqIG5vZGUpCit7CisgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdl
KEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRMaW5lKCksICJCcmFuY2ggTm9kZSBmb3Vu
ZCBpbiBjb25zdGFudCBjb25zdHJ1Y3RvciIpOworICAgIGVycm9yID0gdHJ1ZTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKKy8vCisvLyBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBvbmUgdG8gY2FsbCBl
eHRlcm5hbGx5IHRvIHN0YXJ0IHRoZSB0cmF2ZXJzYWwuCisvLyBJbmRpdmlkdWFsIGZ1bmN0aW9u
cyBjYW4gYmUgaW5pdGlhbGl6ZWQgdG8gMCB0byBza2lwIHByb2Nlc3Npbmcgb2YgdGhhdAorLy8g
dHlwZSBvZiBub2RlLiAgSXQncyBjaGlsZHJlbiB3aWxsIHN0aWxsIGJlIHByb2Nlc3NlZC4KKy8v
Citib29sIFRJbnRlcm1lZGlhdGU6OnBhcnNlQ29uc3RUcmVlKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIFRJbnRlcm1Ob2RlKiByb290LCBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5LCBUT3BlcmF0
b3IgY29uc3RydWN0b3JUeXBlLCBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBUVHlwZSB0LCBi
b29sIHNpbmdsZUNvbnN0YW50UGFyYW0pCit7CisgICAgaWYgKHJvb3QgPT0gMCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgVENvbnN0VHJhdmVyc2VyIGl0KHVuaW9uQXJyYXksIHNpbmds
ZUNvbnN0YW50UGFyYW0sIGNvbnN0cnVjdG9yVHlwZSwgaW5mb1NpbmssIHN5bWJvbFRhYmxlLCB0
KTsKKworICAgIHJvb3QtPnRyYXZlcnNlKCZpdCk7CisgICAgaWYgKGl0LmVycm9yKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBmYWxzZTsKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3Rp
bWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hh
ZGVyVGltaW5nLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOWYzZjQ5ZWYzOGVkOTljZWI1MGE3ODk3MzJhMDgz
MTE4NjU0OWRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcu
Y3BwCkBAIC0wLDAgKzEsMTI3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Bh
cnNlQ29udGV4dC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVw
ZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90aW1p
bmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIgorCitSZXN0cmljdEZyYWdtZW50U2hh
ZGVyVGltaW5nOjpSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nKFRJbmZvU2lua0Jhc2UmIHNp
bmspCisgICAgOiBtU2luayhzaW5rKQorICAgICwgbU51bUVycm9ycygwKQoreworICAgIC8vIFNh
bXBsaW5nIG9wcyBmb3VuZCBvbmx5IGluIGZyYWdtZW50IHNoYWRlcnMuCisgICAgbVNhbXBsaW5n
T3BzLmluc2VydCgidGV4dHVyZTJEKHMyMTt2ZjI7ZjE7Iik7CisgICAgbVNhbXBsaW5nT3BzLmlu
c2VydCgidGV4dHVyZTJEUHJvaihzMjE7dmYzO2YxOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNl
cnQoInRleHR1cmUyRFByb2ooczIxO3ZmNDtmMTsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0
KCJ0ZXh0dXJlQ3ViZShzQzE7dmYzO2YxOyIpOworICAgIC8vIFNhbXBsaW5nIG9wcyBmb3VuZCBp
biBib3RoIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycy4KKyAgICBtU2FtcGxpbmdPcHMuaW5z
ZXJ0KCJ0ZXh0dXJlMkQoczIxO3ZmMjsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0
dXJlMkRQcm9qKHMyMTt2ZjM7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJE
UHJvaihzMjE7dmY0OyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmVDdWJlKHND
MTt2ZjM7Iik7CisgICAgLy8gU2FtcGxpbmcgb3BzIHByb3ZpZGVkIGJ5IE9FU19FR0xfaW1hZ2Vf
ZXh0ZXJuYWwuCisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEKDE7dmYyOyIpOwor
ICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFByb2ooMTt2ZjM7Iik7CisgICAgbVNh
bXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUHJvaigxO3ZmNDsiKTsKKyAgICAvLyBTYW1wbGlu
ZyBvcHMgcHJvdmlkZWQgYnkgQVJCX3RleHR1cmVfcmVjdGFuZ2xlLgorICAgIG1TYW1wbGluZ09w
cy5pbnNlcnQoInRleHR1cmUyRFJlY3QoMTt2ZjI7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2Vy
dCgidGV4dHVyZTJEUmVjdFByb2ooMTt2ZjM7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgi
dGV4dHVyZTJEUmVjdFByb2ooMTt2ZjQ7Iik7Cit9CisKKy8vIEZJWE1FKG12dWpvdmljKTogV2Ug
ZG8gbm90IGtub3cgaWYgdGhlIGV4ZWN1dGlvbiB0aW1lIG9mIGJ1aWx0LWluIG9wZXJhdGlvbnMg
bGlrZSBzaW4sIHBvdywgZXRjLgorLy8gY2FuIHZhcnkgYmFzZWQgb24gdGhlIHZhbHVlIG9mIHRo
ZSBpbnB1dCBhcmd1bWVudHMuIElmIHNvLCB3ZSBzaG91bGQgcmVzdHJpY3QgdGhvc2UgYXMgd2Vs
bC4KK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6ZW5mb3JjZVJlc3RyaWN0aW9u
cyhjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCkKK3sKKyAgICBtTnVtRXJyb3JzID0gMDsK
KworICAgIC8vIEZJWE1FKG12dWpvdmljKTogVGhlIGRlcGVuZGVuY3kgZ3JhcGggZG9lcyBub3Qg
c3VwcG9ydCB1c2VyIGRlZmluZWQgZnVuY3Rpb24gY2FsbHMgcmlnaHQgbm93LAorICAgIC8vIHNv
IHdlIGdlbmVyYXRlIGVycm9ycyBmb3IgdGhlbS4KKyAgICB2YWxpZGF0ZVVzZXJEZWZpbmVkRnVu
Y3Rpb25DYWxsVXNhZ2UoZ3JhcGgpOworCisgICAgLy8gU3RhcnRpbmcgZnJvbSBlYWNoIHNhbXBs
ZXIsIHRyYXZlcnNlIHRoZSBkZXBlbmRlbmN5IGdyYXBoIGFuZCBnZW5lcmF0ZSBhbiBlcnJvciBl
YWNoIHRpbWUgd2UKKyAgICAvLyBoaXQgYSBub2RlIHdoZXJlIHNhbXBsZXIgZGVwZW5kZW50IHZh
bHVlcyBhcmUgbm90IGFsbG93ZWQuCisgICAgZm9yIChUR3JhcGhTeW1ib2xWZWN0b3I6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBncmFwaC5iZWdpblNhbXBsZXJTeW1ib2xzKCk7CisgICAgICAgICBp
dGVyICE9IGdyYXBoLmVuZFNhbXBsZXJTeW1ib2xzKCk7CisgICAgICAgICArK2l0ZXIpCisgICAg
eworICAgICAgICBUR3JhcGhTeW1ib2wqIHNhbXBsZXJTeW1ib2wgPSAqaXRlcjsKKyAgICAgICAg
Y2xlYXJWaXNpdGVkKCk7CisgICAgICAgIHNhbXBsZXJTeW1ib2wtPnRyYXZlcnNlKHRoaXMpOwor
ICAgIH0KK30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2YWxpZGF0ZVVz
ZXJEZWZpbmVkRnVuY3Rpb25DYWxsVXNhZ2UoY29uc3QgVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgp
Cit7CisgICAgZm9yIChURnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0g
Z3JhcGguYmVnaW5Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMoKTsKKyAgICAgICAgIGl0ZXIgIT0g
Z3JhcGguZW5kVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKCk7CisgICAgICAgICArK2l0ZXIpCisg
ICAgeworICAgICAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCA9ICppdGVyOwor
ICAgICAgICBiZWdpbkVycm9yKGZ1bmN0aW9uQ2FsbC0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkp
OworICAgICAgICBtU2luayA8PCAiQSBjYWxsIHRvIGEgdXNlciBkZWZpbmVkIGZ1bmN0aW9uIGlz
IG5vdCBwZXJtaXR0ZWQuXG4iOworICAgIH0KK30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hh
ZGVyVGltaW5nOjpiZWdpbkVycm9yKGNvbnN0IFRJbnRlcm1Ob2RlKiBub2RlKQoreworICAgICsr
bU51bUVycm9yczsKKyAgICBtU2luay5wcmVmaXgoRVByZWZpeEVycm9yKTsKKyAgICBtU2luay5s
b2NhdGlvbihub2RlLT5nZXRMaW5lKCkpOworfQorCitib29sIFJlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmc6OmlzU2FtcGxpbmdPcChjb25zdCBUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5j
dGlvbkNhbGwpIGNvbnN0Cit7CisgICAgcmV0dXJuICFpbnRlcm1GdW5jdGlvbkNhbGwtPmlzVXNl
ckRlZmluZWQoKSAmJgorICAgICAgICAgICBtU2FtcGxpbmdPcHMuZmluZChpbnRlcm1GdW5jdGlv
bkNhbGwtPmdldE5hbWUoKSkgIT0gbVNhbXBsaW5nT3BzLmVuZCgpOworfQorCit2b2lkIFJlc3Ry
aWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBh
cmFtZXRlcikKK3sKKyAgICAvLyBUZXh0dXJlIGNhY2hlIGFjY2VzcyB0aW1lIG1pZ2h0IGxlYWsg
c2Vuc2l0aXZlIGluZm9ybWF0aW9uLgorICAgIC8vIFRodXMsIHdlIHJlc3RyaWN0IHNhbXBsZXIg
ZGVwZW5kZW50IHZhbHVlcyBmcm9tIGFmZmVjdGluZyB0aGUgY29vcmRpbmF0ZSBvciBMT0QgYmlh
cyBvZiBhCisgICAgLy8gc2FtcGxpbmcgb3BlcmF0aW9uLgorICAgIGlmIChpc1NhbXBsaW5nT3Ao
cGFyYW1ldGVyLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKSkpIHsKKyAgICAgICAgc3dpdGNoIChw
YXJhbWV0ZXItPmdldEFyZ3VtZW50TnVtYmVyKCkpIHsKKyAgICAgICAgICAgIGNhc2UgMToKKyAg
ICAgICAgICAgICAgICAvLyBTZWNvbmQgYXJndW1lbnQgKGNvb3JkKQorICAgICAgICAgICAgICAg
IGJlZ2luRXJyb3IocGFyYW1ldGVyLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKSk7CisgICAgICAg
ICAgICAgICAgbVNpbmsgPDwgIkFuIGV4cHJlc3Npb24gZGVwZW5kZW50IG9uIGEgc2FtcGxlciBp
cyBub3QgcGVybWl0dGVkIHRvIGJlIHRoZSIKKyAgICAgICAgICAgICAgICAgICAgICA8PCAiIGNv
b3JkaW5hdGUgYXJndW1lbnQgb2YgYSBzYW1wbGluZyBvcGVyYXRpb24uXG4iOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIC8vIFRo
aXJkIGFyZ3VtZW50IChiaWFzKQorICAgICAgICAgICAgICAgIGJlZ2luRXJyb3IocGFyYW1ldGVy
LT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKSk7CisgICAgICAgICAgICAgICAgbVNpbmsgPDwgIkFu
IGV4cHJlc3Npb24gZGVwZW5kZW50IG9uIGEgc2FtcGxlciBpcyBub3QgcGVybWl0dGVkIHRvIGJl
IHRoZSIKKyAgICAgICAgICAgICAgICAgICAgICA8PCAiIGJpYXMgYXJndW1lbnQgb2YgYSBzYW1w
bGluZyBvcGVyYXRpb24uXG4iOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAvLyBGaXJzdCBhcmd1bWVudCAoc2FtcGxlcikKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBSZXN0cmlj
dEZyYWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdFNlbGVjdGlvbihUR3JhcGhTZWxlY3Rpb24qIHNl
bGVjdGlvbikKK3sKKyAgICBiZWdpbkVycm9yKHNlbGVjdGlvbi0+Z2V0SW50ZXJtU2VsZWN0aW9u
KCkpOworICAgIG1TaW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIg
aXMgbm90IHBlcm1pdHRlZCBpbiBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudC5cbiI7Cit9CisKK3Zv
aWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRMb29wKFRHcmFwaExvb3AqIGxv
b3ApCit7CisgICAgYmVnaW5FcnJvcihsb29wLT5nZXRJbnRlcm1Mb29wKCkpOworICAgIG1TaW5r
IDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1pdHRl
ZCBpbiBhIGxvb3AgY29uZGl0aW9uLlxuIjsKK30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hh
ZGVyVGltaW5nOjp2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCkKK3sK
KyAgICBiZWdpbkVycm9yKGxvZ2ljYWxPcC0+Z2V0SW50ZXJtTG9naWNhbE9wKCkpOworICAgIG1T
aW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1p
dHRlZCBvbiB0aGUgbGVmdCBoYW5kIHNpZGUgb2YgYSBsb2dpY2FsICIKKyAgICAgICAgICA8PCBs
b2dpY2FsT3AtPmdldE9wU3RyaW5nKCkKKyAgICAgICAgICA8PCAiIG9wZXJhdG9yLlxuIjsKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMyM2NiNjJkOGEzODZlMjVhZTAwNTBhZTQyZTkx
MzRjODA1NzYxOGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWlu
Zy5oCkBAIC0wLDAgKzEsNDAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RJ
TUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCisjZGVmaW5lIENPTVBJTEVS
X1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCisKKyNpbmNsdWRlICJH
TFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50
ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBl
bmRlbmN5R3JhcGguaCIKKworY2xhc3MgVEluZm9TaW5rQmFzZTsKKworY2xhc3MgUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZyA6IFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIgeworcHVibGlj
OgorICAgIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcoVEluZm9TaW5rQmFzZSYgc2luayk7
CisgICAgdm9pZCBlbmZvcmNlUmVzdHJpY3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdy
YXBoKTsKKyAgICBpbnQgbnVtRXJyb3JzKCkgY29uc3QgeyByZXR1cm4gbU51bUVycm9yczsgfQor
CisgICAgdmlydHVhbCB2b2lkIHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFtZXRl
cik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2Vs
ZWN0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3ApOwor
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxP
cCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBiZWdpbkVycm9yKGNvbnN0IFRJbnRlcm1Ob2RlKiBu
b2RlKTsKKyAgICB2b2lkIHZhbGlkYXRlVXNlckRlZmluZWRGdW5jdGlvbkNhbGxVc2FnZShjb25z
dCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCk7CisgICAgYm9vbCBpc1NhbXBsaW5nT3AoY29uc3Qg
VEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKSBjb25zdDsKKworICAgIFRJbmZv
U2lua0Jhc2UmIG1TaW5rOworICAgIGludCBtTnVtRXJyb3JzOworCisgICAgdHlwZWRlZiBzdGQ6
OnNldDxUU3RyaW5nPiBTdHJpbmdTZXQ7CisgICAgU3RyaW5nU2V0IG1TYW1wbGluZ09wczsKK307
CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX0ZSQUdNRU5UX1NIQURFUl9U
SU1JTkdfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVlNzhjMzU0NTAxN2JkYzFlOGU5
OThmMTkxODJmNjEzOWZjMWE2ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFk
ZXJUaW1pbmcuY3BwCkBAIC0wLDAgKzEsMTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCIK
Kwordm9pZCBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZzo6dmlzaXRTeW1ib2woVEludGVybVN5
bWJvbCogbm9kZSkKK3sKKyAgICBpZiAoSXNTYW1wbGVyKG5vZGUtPmdldEJhc2ljVHlwZSgpKSkg
eworICAgICAgICArK21OdW1FcnJvcnM7CisgICAgICAgIG1TaW5rLm1lc3NhZ2UoRVByZWZpeEVy
cm9yLAorICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmdldExpbmUoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAiU2FtcGxlcnMgYXJlIG5vdCBwZXJtaXR0ZWQgaW4gdmVydGV4IHNoYWRlcnMi
KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0
cmljdFZlcnRleFNoYWRlclRpbWluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVmMGRkMzE5N2EyMzk3YmNiMTIz
OTU1ODc5YzE4NDQ1M2ZkNjI4ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFk
ZXJUaW1pbmcuaApAQCAtMCwwICsxLDMzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01Q
SUxFUl9USU1JTkdfUkVTVFJJQ1RfVkVSVEVYX1NIQURFUl9USU1JTkdfSF8KKyNkZWZpbmUgQ09N
UElMRVJfVElNSU5HX1JFU1RSSUNUX1ZFUlRFWF9TSEFERVJfVElNSU5HX0hfCisKKyNpbmNsdWRl
ICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
aW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5o
IgorCitjbGFzcyBUSW5mb1NpbmtCYXNlOworCitjbGFzcyBSZXN0cmljdFZlcnRleFNoYWRlclRp
bWluZyA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBSZXN0cmljdFZl
cnRleFNoYWRlclRpbWluZyhUSW5mb1NpbmtCYXNlJiBzaW5rKQorICAgICAgICA6IFRJbnRlcm1U
cmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIGZhbHNlKQorICAgICAgICAsIG1TaW5rKHNpbmspCisgICAg
ICAgICwgbU51bUVycm9ycygwKSB7fQorCisgICAgdm9pZCBlbmZvcmNlUmVzdHJpY3Rpb25zKFRJ
bnRlcm1Ob2RlKiByb290KSB7IHJvb3QtPnRyYXZlcnNlKHRoaXMpOyB9CisgICAgaW50IG51bUVy
cm9ycygpIHsgcmV0dXJuIG1OdW1FcnJvcnM7IH0KKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5
bWJvbChUSW50ZXJtU3ltYm9sKik7Citwcml2YXRlOgorICAgIFRJbmZvU2lua0Jhc2UmIG1TaW5r
OworICAgIGludCBtTnVtRXJyb3JzOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9USU1JTkdf
UkVTVFJJQ1RfVkVSVEVYX1NIQURFUl9USU1JTkdfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3V0aWwuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMDc3YmRjYzQ4Yjg2N2U0MTNlMGRlOTM3ZTQ4NzQ2NDg1NGM0ZGI0YwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3V0
aWwuY3BwCkBAIC0wLDAgKzEsMjggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci91dGlsLmgiCisKKyNpbmNsdWRlIDxsaW1pdHM+CisKKyNpbmNsdWRlICJj
b21waWxlci9wcmVwcm9jZXNzb3IvbnVtZXJpY19sZXguaCIKKworYm9vbCBhdG9mX2NsYW1wKGNv
bnN0IGNoYXIgKnN0ciwgZmxvYXQgKnZhbHVlKQoreworICAgIGJvb2wgc3VjY2VzcyA9IHBwOjpu
dW1lcmljX2xleF9mbG9hdChzdHIsIHZhbHVlKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAg
ICp2YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKTsKKyAgICByZXR1cm4g
c3VjY2VzczsKK30KKworYm9vbCBhdG9pX2NsYW1wKGNvbnN0IGNoYXIgKnN0ciwgaW50ICp2YWx1
ZSkKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSBwcDo6bnVtZXJpY19sZXhfaW50KHN0ciwgdmFsdWUp
OworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgKnZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ+OjptYXgoKTsKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmRjNjlmMzkwNjBkMjA1MWYzYTIwMDY1OTVmMzA2MDBmZWMyZTdmNzcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci91dGlsLmgKQEAgLTAsMCArMSwyMCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBD
T01QSUxFUl9VVElMX0gKKyNkZWZpbmUgQ09NUElMRVJfVVRJTF9ICisKKy8vIGF0b2ZfY2xhbXAg
aXMgbGlrZSBhdG9mIGJ1dAorLy8gICAxLiBpdCBmb3JjZXMgQyBsb2NhbGUsIGkuZS4gZm9yY2lu
ZyAnLicgYXMgZGVjaW1hbCBwb2ludC4KKy8vICAgMi4gaXQgY2xhbXBzIHRoZSB2YWx1ZSB0byAt
RkxUX01BWCBvciBGTFRfTUFYIGlmIG92ZXJmbG93IGhhcHBlbnMuCisvLyBSZXR1cm4gZmFsc2Ug
aWYgb3ZlcmZsb3cgaGFwcGVucy4KK2V4dGVybiBib29sIGF0b2ZfY2xhbXAoY29uc3QgY2hhciAq
c3RyLCBmbG9hdCAqdmFsdWUpOworCisvLyBJZiBvdmVyZmxvdyBoYXBwZW5zLCBjbGFtcCB0aGUg
dmFsdWUgdG8gSU5UX01JTiBvciBJTlRfTUFYLgorLy8gUmV0dXJuIGZhbHNlIGlmIG92ZXJmbG93
IGhhcHBlbnMuCitleHRlcm4gYm9vbCBhdG9pX2NsYW1wKGNvbnN0IGNoYXIgKnN0ciwgaW50ICp2
YWx1ZSk7CisKKyNlbmRpZiAvLyBDT01QSUxFUl9VVElMX0gKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci91dGlsLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci91dGlsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZDZlNWVlZWQ5MWY4ZjVhNTkyZTUzMjczZjA5YTg3OGY1NGI4NjBlZi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdXRpbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL3V0aWwuaCIKLQotI2luY2x1ZGUgPGxp
bWl0cz4KLQotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9udW1lcmljX2xleC5oIgot
Ci1ib29sIGF0b2ZfY2xhbXAoY29uc3QgY2hhciAqc3RyLCBmbG9hdCAqdmFsdWUpCi17Ci0gICAg
Ym9vbCBzdWNjZXNzID0gcHA6Om51bWVyaWNfbGV4X2Zsb2F0KHN0ciwgdmFsdWUpOwotICAgIGlm
ICghc3VjY2VzcykKLSAgICAgICAgKnZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46
Om1heCgpOwotICAgIHJldHVybiBzdWNjZXNzOwotfQotCi1ib29sIGF0b2lfY2xhbXAoY29uc3Qg
Y2hhciAqc3RyLCBpbnQgKnZhbHVlKQotewotICAgIGJvb2wgc3VjY2VzcyA9IHBwOjpudW1lcmlj
X2xleF9pbnQoc3RyLCB2YWx1ZSk7Ci0gICAgaWYgKCFzdWNjZXNzKQotICAgICAgICAqdmFsdWUg
PSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOwotICAgIHJldHVybiBzdWNjZXNzOwot
fQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdXRp
bC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3V0aWwuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM2OWYzOTA2MGQyMDUxZjNhMjAwNjU5NWYzMDYwMGZl
YzJlN2Y3Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdXRpbC5oCisrKyAvZGV2L251bGwK
QEAgLTEsMjAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9V
VElMX0gKLSNkZWZpbmUgQ09NUElMRVJfVVRJTF9ICi0KLS8vIGF0b2ZfY2xhbXAgaXMgbGlrZSBh
dG9mIGJ1dAotLy8gICAxLiBpdCBmb3JjZXMgQyBsb2NhbGUsIGkuZS4gZm9yY2luZyAnLicgYXMg
ZGVjaW1hbCBwb2ludC4KLS8vICAgMi4gaXQgY2xhbXBzIHRoZSB2YWx1ZSB0byAtRkxUX01BWCBv
ciBGTFRfTUFYIGlmIG92ZXJmbG93IGhhcHBlbnMuCi0vLyBSZXR1cm4gZmFsc2UgaWYgb3ZlcmZs
b3cgaGFwcGVucy4KLWV4dGVybiBib29sIGF0b2ZfY2xhbXAoY29uc3QgY2hhciAqc3RyLCBmbG9h
dCAqdmFsdWUpOwotCi0vLyBJZiBvdmVyZmxvdyBoYXBwZW5zLCBjbGFtcCB0aGUgdmFsdWUgdG8g
SU5UX01JTiBvciBJTlRfTUFYLgotLy8gUmV0dXJuIGZhbHNlIGlmIG92ZXJmbG93IGhhcHBlbnMu
Ci1leHRlcm4gYm9vbCBhdG9pX2NsYW1wKGNvbnN0IGNoYXIgKnN0ciwgaW50ICp2YWx1ZSk7Ci0K
LSNlbmRpZiAvLyBDT01QSUxFUl9VVElMX0gKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkVHTC9EaXNwbGF5LmgKaW5kZXggNThjMzk0MDMzMWIzNjNmZmMyNGJkZDQ5MDE1NDQzNzdm
YzcxY2U0MC4uYzgxNmU0ZTFhNTVhYTFjYWQyMjcwYjNmN2Y4YWQ2YjZmMzM4ZTBiZiAxMDA2NDQK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgKQEAgLTExLDggKzEx
LDYgQEAKICNpZm5kZWYgTElCRUdMX0RJU1BMQVlfSF8KICNkZWZpbmUgTElCRUdMX0RJU1BMQVlf
SF8KIAotI2luY2x1ZGUgImNvbW1vbi9zeXN0ZW0uaCIKLQogI2luY2x1ZGUgPHNldD4KICNpbmNs
dWRlIDx2ZWN0b3I+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJFR0wvU3VyZmFjZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1
cmZhY2UuY3BwCmluZGV4IDAxYjQwMTcxNzkxYzdlMTFlZmUyYTlhMmQzOGFlM2FmMzcyYTc4Mzcu
LjEyZjhkZmRmMjUwMjRiMjE3MzJjMzhkMWQ5Y2JkNGM2NGY2MjZjOWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5jcHAKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcApAQCAtMzE4LDYgKzMxOCw4
IEBAIGJvb2wgU3VyZmFjZTo6Y2hlY2tGb3JPdXRPZkRhdGVTd2FwQ2hhaW4oKQogICAgICAgICBz
aXplRGlydHkgPSBmYWxzZTsKICAgICB9CiAKKyAgICBib29sIHdhc0RpcnR5ID0gKG1Td2FwSW50
ZXJ2YWxEaXJ0eSB8fCBzaXplRGlydHkpOworCiAgICAgaWYgKG1Td2FwSW50ZXJ2YWxEaXJ0eSkK
ICAgICB7CiAgICAgICAgIHJlc2V0U3dhcENoYWluKGNsaWVudFdpZHRoLCBjbGllbnRIZWlnaHQp
OwpAQCAtMzI3LDcgKzMyOSw3IEBAIGJvb2wgU3VyZmFjZTo6Y2hlY2tGb3JPdXRPZkRhdGVTd2Fw
Q2hhaW4oKQogICAgICAgICByZXNpemVTd2FwQ2hhaW4oY2xpZW50V2lkdGgsIGNsaWVudEhlaWdo
dCk7CiAgICAgfQogCi0gICAgaWYgKG1Td2FwSW50ZXJ2YWxEaXJ0eSB8fCBzaXplRGlydHkpCisg
ICAgaWYgKHdhc0RpcnR5KQogICAgIHsKICAgICAgICAgaWYgKHN0YXRpY19jYXN0PGVnbDo6U3Vy
ZmFjZSo+KGdldEN1cnJlbnREcmF3U3VyZmFjZSgpKSA9PSB0aGlzKQogICAgICAgICB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAKaW5kZXggMzIwNjcw
ZGEwYzk2ZDE5MmU1M2Q5YTczOTZhZTQ2NjlhMzgyZjc2Mi4uMGVhNDZkNGIzOWVmYjE3OTNkOTRl
MzdmMjhjMDhmNmViZDQ4ZTNjZiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkVHTC9saWJFR0wuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJFR0wvbGliRUdMLmNwcApAQCAtMTg0LDcgKzE4NCw3IEBAIGNvbnN0IGNoYXIgKl9fc3RkY2Fs
bCBlZ2xRdWVyeVN0cmluZyhFR0xEaXNwbGF5IGRweSwgRUdMaW50IG5hbWUpCiAgICAgICAgICAg
Y2FzZSBFR0xfVkVORE9SOgogICAgICAgICAgICAgcmV0dXJuIGVnbDo6c3VjY2VzcyhkaXNwbGF5
LT5nZXRWZW5kb3JTdHJpbmcoKSk7CiAgICAgICAgICAgY2FzZSBFR0xfVkVSU0lPTjoKLSAgICAg
ICAgICAgIHJldHVybiBlZ2w6OnN1Y2Nlc3MoIjEuNCAoQU5HTEUgIiBWRVJTSU9OX1NUUklORyAi
KSIpOworICAgICAgICAgICAgcmV0dXJuIGVnbDo6c3VjY2VzcygiMS40IChBTkdMRSAiIEFOR0xF
X1ZFUlNJT05fU1RSSU5HICIpIik7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gZWdsOjpl
cnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgKGNvbnN0IGNoYXIqKU5VTEwpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wucmMgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5yYwppbmRleCBlMmM0NzJmM2JiMzNiODIx
OTM2MTY2OTY0ZmM4NDhkM2ZlNWViMDNiLi41NWUxYjgzOGM4NzY0MWQxOWEwNDU1NjVlZTcwYTU1
NjNjYjhhMDQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdM
L2xpYkVHTC5yYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVH
TC5yYwpAQCAtNTQsOCArNTQsOCBAQCBFTkQKIC8vDQogDQogVlNfVkVSU0lPTl9JTkZPIFZFUlNJ
T05JTkZPDQotIEZJTEVWRVJTSU9OIE1BSk9SX1ZFUlNJT04sTUlOT1JfVkVSU0lPTixCVUlMRF9W
RVJTSU9OLEJVSUxEX1JFVklTSU9ODQotIFBST0RVQ1RWRVJTSU9OIE1BSk9SX1ZFUlNJT04sTUlO
T1JfVkVSU0lPTixCVUlMRF9WRVJTSU9OLEJVSUxEX1JFVklTSU9ODQorIEZJTEVWRVJTSU9OIEFO
R0xFX01BSk9SX1ZFUlNJT04sQU5HTEVfTUlOT1JfVkVSU0lPTiwwLDANCisgUFJPRFVDVFZFUlNJ
T04gQU5HTEVfTUFKT1JfVkVSU0lPTixBTkdMRV9NSU5PUl9WRVJTSU9OLDAsMA0KICBGSUxFRkxB
R1NNQVNLIDB4MTdMDQogI2lmZGVmIF9ERUJVRw0KICBGSUxFRkxBR1MgMHgxTA0KQEAgLTcxLDEz
ICs3MSwxNCBAQCBCRUdJTgogICAgICAgICBCTE9DSyAiMDQwOTA0YjAiDQogICAgICAgICBCRUdJ
Tg0KICAgICAgICAgICAgIFZBTFVFICJGaWxlRGVzY3JpcHRpb24iLCAiQU5HTEUgbGliRUdMIER5
bmFtaWMgTGluayBMaWJyYXJ5Ig0KLSAgICAgICAgICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsIFZF
UlNJT05fU1RSSU5HDQorICAgICAgICAgICAgVkFMVUUgIkZpbGVWZXJzaW9uIiwgQU5HTEVfVkVS
U0lPTl9TVFJJTkcNCiAgICAgICAgICAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwgImxpYkVHTCIN
CiAgICAgICAgICAgICBWQUxVRSAiTGVnYWxDb3B5cmlnaHQiLCAiQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIg0KICAgICAgICAgICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwgImxp
YkVHTC5kbGwiDQotICAgICAgICAgICAgVkFMVUUgIlByaXZhdGVCdWlsZCIsIFZFUlNJT05fU1RS
SU5HDQorICAgICAgICAgICAgVkFMVUUgIlByaXZhdGVCdWlsZCIsIEFOR0xFX1ZFUlNJT05fU1RS
SU5HDQogICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwgIkFOR0xFIGxpYkVHTCBEeW5h
bWljIExpbmsgTGlicmFyeSINCi0gICAgICAgICAgICBWQUxVRSAiUHJvZHVjdFZlcnNpb24iLCBW
RVJTSU9OX1NUUklORw0KKyAgICAgICAgICAgIFZBTFVFICJQcm9kdWN0VmVyc2lvbiIsIEFOR0xF
X1ZFUlNJT05fU1RSSU5HDQorICAgICAgICAgICAgVkFMVUUgIkNvbW1lbnRzIiwgIkJ1aWxkIERh
dGU6ICIgQU5HTEVfQ09NTUlUX0RBVEUNCiAgICAgICAgIEVORA0KICAgICBFTkQNCiAgICAgQkxP
Q0sgIlZhckZpbGVJbmZvIg0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJFR0wvbWFpbi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML21h
aW4uY3BwCmluZGV4IDQyNGVjM2ZjZDFkOTg2MzUxYmY1ZWE0YmFiYmIxMTZjMGZkMWFlZTcuLjgw
ZGNjMzQ1ODA3NTYwZWY2YTQxMTc0ZjE0YjdjOWYwZDc4YzZmMWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbWFpbi5jcHAKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkVHTC9tYWluLmNwcApAQCAtMTIsMTMgKzEyLDUwIEBACiAKIHN0
YXRpYyBEV09SRCBjdXJyZW50VExTID0gVExTX09VVF9PRl9JTkRFWEVTOwogCituYW1lc3BhY2Ug
ZWdsCit7CisKK0N1cnJlbnQgKkFsbG9jYXRlQ3VycmVudCgpCit7CisgICAgQ3VycmVudCAqY3Vy
cmVudCA9IChlZ2w6OkN1cnJlbnQqKUxvY2FsQWxsb2MoTFBUUiwgc2l6ZW9mKGVnbDo6Q3VycmVu
dCkpOworCisgICAgaWYgKCFjdXJyZW50KQorICAgIHsKKyAgICAgICAgRVJSKCJDb3VsZCBub3Qg
YWxsb2NhdGUgdGhyZWFkIGxvY2FsIHN0b3JhZ2UuIik7CisgICAgICAgIHJldHVybiBOVUxMOwor
ICAgIH0KKworICAgIEFTU0VSVChjdXJyZW50VExTICE9IFRMU19PVVRfT0ZfSU5ERVhFUyk7Cisg
ICAgVGxzU2V0VmFsdWUoY3VycmVudFRMUywgY3VycmVudCk7CisKKyAgICBjdXJyZW50LT5lcnJv
ciA9IEVHTF9TVUNDRVNTOworICAgIGN1cnJlbnQtPkFQSSA9IEVHTF9PUEVOR0xfRVNfQVBJOwor
ICAgIGN1cnJlbnQtPmRpc3BsYXkgPSBFR0xfTk9fRElTUExBWTsKKyAgICBjdXJyZW50LT5kcmF3
U3VyZmFjZSA9IEVHTF9OT19TVVJGQUNFOworICAgIGN1cnJlbnQtPnJlYWRTdXJmYWNlID0gRUdM
X05PX1NVUkZBQ0U7CisKKyAgICByZXR1cm4gY3VycmVudDsKK30KKwordm9pZCBEZWFsbG9jYXRl
Q3VycmVudCgpCit7CisgICAgdm9pZCAqY3VycmVudCA9IFRsc0dldFZhbHVlKGN1cnJlbnRUTFMp
OworCisgICAgaWYgKGN1cnJlbnQpCisgICAgeworICAgICAgICBMb2NhbEZyZWUoKEhMT0NBTClj
dXJyZW50KTsKKyAgICB9Cit9CisKK30KKwogZXh0ZXJuICJDIiBCT09MIFdJTkFQSSBEbGxNYWlu
KEhJTlNUQU5DRSBpbnN0YW5jZSwgRFdPUkQgcmVhc29uLCBMUFZPSUQgcmVzZXJ2ZWQpCiB7CiAg
ICAgc3dpdGNoIChyZWFzb24pCiAgICAgewogICAgICAgY2FzZSBETExfUFJPQ0VTU19BVFRBQ0g6
CiAgICAgICAgIHsKLSNpZiAhZGVmaW5lZChBTkdMRV9ESVNBQkxFX1RSQUNFKQorI2lmIGRlZmlu
ZWQoQU5HTEVfRU5BQkxFX1RSQUNFKQogICAgICAgICAgICAgRklMRSAqZGVidWcgPSBmb3BlbihU
UkFDRV9PVVRQVVRfRklMRSwgInJ0Iik7CiAKICAgICAgICAgICAgIGlmIChkZWJ1ZykKQEAgLTQz
LDM5ICs4MCwxNyBAQCBleHRlcm4gIkMiIEJPT0wgV0lOQVBJIERsbE1haW4oSElOU1RBTkNFIGlu
c3RhbmNlLCBEV09SRCByZWFzb24sIExQVk9JRCByZXNlcnZlZAogICAgICAgICAvLyBGYWxsIHRo
cm91Z2h0IHRvIGluaXRpYWxpemUgaW5kZXgKICAgICAgIGNhc2UgRExMX1RIUkVBRF9BVFRBQ0g6
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGVnbDo6Q3VycmVudCAqY3VycmVudCA9IChlZ2w6OkN1
cnJlbnQqKUxvY2FsQWxsb2MoTFBUUiwgc2l6ZW9mKGVnbDo6Q3VycmVudCkpOwotCi0gICAgICAg
ICAgICBpZiAoY3VycmVudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUbHNTZXRW
YWx1ZShjdXJyZW50VExTLCBjdXJyZW50KTsKLQotICAgICAgICAgICAgICAgIGN1cnJlbnQtPmVy
cm9yID0gRUdMX1NVQ0NFU1M7Ci0gICAgICAgICAgICAgICAgY3VycmVudC0+QVBJID0gRUdMX09Q
RU5HTF9FU19BUEk7Ci0gICAgICAgICAgICAgICAgY3VycmVudC0+ZGlzcGxheSA9IEVHTF9OT19E
SVNQTEFZOwotICAgICAgICAgICAgICAgIGN1cnJlbnQtPmRyYXdTdXJmYWNlID0gRUdMX05PX1NV
UkZBQ0U7Ci0gICAgICAgICAgICAgICAgY3VycmVudC0+cmVhZFN1cmZhY2UgPSBFR0xfTk9fU1VS
RkFDRTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVnbDo6QWxsb2NhdGVDdXJyZW50KCk7
CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIERMTF9USFJFQURfREVUQUNI
OgogICAgICAgICB7Ci0gICAgICAgICAgICB2b2lkICpjdXJyZW50ID0gVGxzR2V0VmFsdWUoY3Vy
cmVudFRMUyk7Ci0KLSAgICAgICAgICAgIGlmIChjdXJyZW50KQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIExvY2FsRnJlZSgoSExPQ0FMKWN1cnJlbnQpOwotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWdsOjpEZWFsbG9jYXRlQ3VycmVudCgpOwogICAgICAgICB9CiAgICAgICAg
IGJyZWFrOwogICAgICAgY2FzZSBETExfUFJPQ0VTU19ERVRBQ0g6CiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHZvaWQgKmN1cnJlbnQgPSBUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKLQotICAgICAg
ICAgICAgaWYgKGN1cnJlbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTG9jYWxG
cmVlKChITE9DQUwpY3VycmVudCk7Ci0gICAgICAgICAgICB9Ci0KKyAgICAgICAgICAgIGVnbDo6
RGVhbGxvY2F0ZUN1cnJlbnQoKTsKICAgICAgICAgICAgIFRsc0ZyZWUoY3VycmVudFRMUyk7CiAg
ICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC04OCw3MiArMTAzLDgyIEBAIGV4dGVybiAiQyIg
Qk9PTCBXSU5BUEkgRGxsTWFpbihISU5TVEFOQ0UgaW5zdGFuY2UsIERXT1JEIHJlYXNvbiwgTFBW
T0lEIHJlc2VydmVkCiAKIG5hbWVzcGFjZSBlZ2wKIHsKLXZvaWQgc2V0Q3VycmVudEVycm9yKEVH
TGludCBlcnJvcikKKworQ3VycmVudCAqR2V0Q3VycmVudERhdGEoKQogewogICAgIEN1cnJlbnQg
KmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CiAKKyAgICAvLyBB
TkdMRSBpc3N1ZSA0ODg6IHdoZW4gdGhlIGRsbCBpcyBsb2FkZWQgYWZ0ZXIgdGhyZWFkIGluaXRp
YWxpemF0aW9uLAorICAgIC8vIHRocmVhZCBsb2NhbCBzdG9yYWdlIChjdXJyZW50KSBtaWdodCBu
b3QgZXhpc3QgeWV0LgorICAgIHJldHVybiAoY3VycmVudCA/IGN1cnJlbnQgOiBBbGxvY2F0ZUN1
cnJlbnQoKSk7Cit9CisKK3ZvaWQgc2V0Q3VycmVudEVycm9yKEVHTGludCBlcnJvcikKK3sKKyAg
ICBDdXJyZW50ICpjdXJyZW50ID0gR2V0Q3VycmVudERhdGEoKTsKKwogICAgIGN1cnJlbnQtPmVy
cm9yID0gZXJyb3I7CiB9CiAKIEVHTGludCBnZXRDdXJyZW50RXJyb3IoKQogewotICAgIEN1cnJl
bnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisgICAgQ3Vy
cmVudCAqY3VycmVudCA9IEdldEN1cnJlbnREYXRhKCk7CiAKICAgICByZXR1cm4gY3VycmVudC0+
ZXJyb3I7CiB9CiAKIHZvaWQgc2V0Q3VycmVudEFQSShFR0xlbnVtIEFQSSkKIHsKLSAgICBDdXJy
ZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworICAgIEN1
cnJlbnQgKmN1cnJlbnQgPSBHZXRDdXJyZW50RGF0YSgpOwogCiAgICAgY3VycmVudC0+QVBJID0g
QVBJOwogfQogCiBFR0xlbnVtIGdldEN1cnJlbnRBUEkoKQogewotICAgIEN1cnJlbnQgKmN1cnJl
bnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisgICAgQ3VycmVudCAqY3Vy
cmVudCA9IEdldEN1cnJlbnREYXRhKCk7CiAKICAgICByZXR1cm4gY3VycmVudC0+QVBJOwogfQog
CiB2b2lkIHNldEN1cnJlbnREaXNwbGF5KEVHTERpc3BsYXkgZHB5KQogewotICAgIEN1cnJlbnQg
KmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisgICAgQ3VycmVu
dCAqY3VycmVudCA9IEdldEN1cnJlbnREYXRhKCk7CiAKICAgICBjdXJyZW50LT5kaXNwbGF5ID0g
ZHB5OwogfQogCiBFR0xEaXNwbGF5IGdldEN1cnJlbnREaXNwbGF5KCkKIHsKLSAgICBDdXJyZW50
ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworICAgIEN1cnJl
bnQgKmN1cnJlbnQgPSBHZXRDdXJyZW50RGF0YSgpOwogCiAgICAgcmV0dXJuIGN1cnJlbnQtPmRp
c3BsYXk7CiB9CiAKIHZvaWQgc2V0Q3VycmVudERyYXdTdXJmYWNlKEVHTFN1cmZhY2Ugc3VyZmFj
ZSkKIHsKLSAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJl
bnRUTFMpOworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSBHZXRDdXJyZW50RGF0YSgpOwogCiAgICAg
Y3VycmVudC0+ZHJhd1N1cmZhY2UgPSBzdXJmYWNlOwogfQogCiBFR0xTdXJmYWNlIGdldEN1cnJl
bnREcmF3U3VyZmFjZSgpCiB7Ci0gICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNH
ZXRWYWx1ZShjdXJyZW50VExTKTsKKyAgICBDdXJyZW50ICpjdXJyZW50ID0gR2V0Q3VycmVudERh
dGEoKTsKIAogICAgIHJldHVybiBjdXJyZW50LT5kcmF3U3VyZmFjZTsKIH0KIAogdm9pZCBzZXRD
dXJyZW50UmVhZFN1cmZhY2UoRUdMU3VyZmFjZSBzdXJmYWNlKQogewotICAgIEN1cnJlbnQgKmN1
cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisgICAgQ3VycmVudCAq
Y3VycmVudCA9IEdldEN1cnJlbnREYXRhKCk7CiAKICAgICBjdXJyZW50LT5yZWFkU3VyZmFjZSA9
IHN1cmZhY2U7CiB9CiAKIEVHTFN1cmZhY2UgZ2V0Q3VycmVudFJlYWRTdXJmYWNlKCkKIHsKLSAg
ICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOwor
ICAgIEN1cnJlbnQgKmN1cnJlbnQgPSBHZXRDdXJyZW50RGF0YSgpOwogCiAgICAgcmV0dXJuIGN1
cnJlbnQtPnJlYWRTdXJmYWNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9Db25zdGFudHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvQ29uc3RhbnRzLmgKaW5kZXggZDkwMmQ0NTZiMTI2OWIzNWM3YmIyMmU1MjY3
NzU1YzA5MjI1ZWYzMy4uOWYyNGQ2NmE3ZGM3NGM2MDdmOTYxNzdmN2ViNGY1Y2U5NzJmZDM0MiAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db25zdGFu
dHMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnN0YW50
cy5oCkBAIC0xLDM0ICsxLDM0IEBACi0vLw0KLS8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLS8vDQotDQotLy8gQ29udGFudHMu
aDogRGVmaW5lcyBzb21lIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIGFuZCBnbCBjb25zdGFudHMN
Ci0NCi0jaWZuZGVmIExJQkdMRVNWMl9DT05TVEFOVFNfSF8NCi0jZGVmaW5lIExJQkdMRVNWMl9D
T05TVEFOVFNfSF8NCi0NCi1uYW1lc3BhY2UgZ2wNCi17DQotDQotZW51bQ0KLXsNCi0gICAgTUFY
X1ZFUlRFWF9BVFRSSUJTID0gMTYsDQotICAgIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTID0gMTYs
DQotDQotICAgIC8vIEltcGxlbWVudGF0aW9uIHVwcGVyIGxpbWl0cywgcmVhbCBtYXhpbXVtcyBk
ZXBlbmQgb24gdGhlIGhhcmR3YXJlDQotICAgIElNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVY
VFVSRV9JTUFHRV9VTklUUyA9IDE2LA0KLSAgICBJTVBMRU1FTlRBVElPTl9NQVhfQ09NQklORURf
VEVYVFVSRV9JTUFHRV9VTklUUyA9IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTICsgSU1QTEVNRU5U
QVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAgICANCi0NCi0gICAgSU1QTEVN
RU5UQVRJT05fTUFYX1ZBUllJTkdfVkVDVE9SUyA9IDMyLA0KLSAgICBJTVBMRU1FTlRBVElPTl9N
QVhfRFJBV19CVUZGRVJTID0gOA0KLX07DQotDQotY29uc3QgZmxvYXQgQUxJQVNFRF9MSU5FX1dJ
RFRIX1JBTkdFX01JTiA9IDEuMGY7DQotY29uc3QgZmxvYXQgQUxJQVNFRF9MSU5FX1dJRFRIX1JB
TkdFX01BWCA9IDEuMGY7DQotY29uc3QgZmxvYXQgQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01J
TiA9IDEuMGY7DQotDQotfQ0KLQ0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfQ09OU1RBTlRTX0hfDQor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKy8vIENvbnRhbnRzLmg6IERlZmluZXMgc29tZSBpbXBsZW1lbnRhdGlv
biBzcGVjaWZpYyBhbmQgZ2wgY29uc3RhbnRzCisKKyNpZm5kZWYgTElCR0xFU1YyX0NPTlNUQU5U
U19IXworI2RlZmluZSBMSUJHTEVTVjJfQ09OU1RBTlRTX0hfCisKK25hbWVzcGFjZSBnbAorewor
CitlbnVtCit7CisgICAgTUFYX1ZFUlRFWF9BVFRSSUJTID0gMTYsCisgICAgTUFYX1RFWFRVUkVf
SU1BR0VfVU5JVFMgPSAxNiwKKworICAgIC8vIEltcGxlbWVudGF0aW9uIHVwcGVyIGxpbWl0cywg
cmVhbCBtYXhpbXVtcyBkZXBlbmQgb24gdGhlIGhhcmR3YXJlCisgICAgSU1QTEVNRU5UQVRJT05f
TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTID0gMTYsCisgICAgSU1QTEVNRU5UQVRJT05f
TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSBNQVhfVEVYVFVSRV9JTUFHRV9VTklU
UyArIElNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUywgICAgCisK
KyAgICBJTVBMRU1FTlRBVElPTl9NQVhfVkFSWUlOR19WRUNUT1JTID0gMzIsCisgICAgSU1QTEVN
RU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSUyA9IDgKK307CisKK2NvbnN0IGZsb2F0IEFMSUFTRURf
TElORV9XSURUSF9SQU5HRV9NSU4gPSAxLjBmOworY29uc3QgZmxvYXQgQUxJQVNFRF9MSU5FX1dJ
RFRIX1JBTkdFX01BWCA9IDEuMGY7Citjb25zdCBmbG9hdCBBTElBU0VEX1BPSU5UX1NJWkVfUkFO
R0VfTUlOID0gMS4wZjsKKworfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX0NPTlNUQU5UU19IXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAK
aW5kZXggZmJhNDEwNGQxZTExMjlkMzZmMWZlOWQxNjJlMWQ1Y2RmYjliYzlkYi4uNmJjNGM3NmMz
ZDQxYzJlYTZlMDUyMThhY2U1NGUyZjUwYWE2MDljMyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwCkBAIC0xNzc4LDcgKzE3NzgsNyBA
QCB2b2lkIENvbnRleHQ6OmFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2RlKQogICAgIHsKICAgICAg
ICAgbWFzayA9IDB4RkZGRkZGRkY7CiAgICAgfQotICAgIG1SZW5kZXJlci0+c2V0QmxlbmRTdGF0
ZShtU3RhdGUuYmxlbmQsIG1TdGF0ZS5ibGVuZENvbG9yLCBtYXNrKTsKKyAgICBtUmVuZGVyZXIt
PnNldEJsZW5kU3RhdGUoZnJhbWVidWZmZXJPYmplY3QsIG1TdGF0ZS5ibGVuZCwgbVN0YXRlLmJs
ZW5kQ29sb3IsIG1hc2spOwogCiAgICAgbVJlbmRlcmVyLT5zZXREZXB0aFN0ZW5jaWxTdGF0ZSht
U3RhdGUuZGVwdGhTdGVuY2lsLCBtU3RhdGUuc3RlbmNpbFJlZiwgbVN0YXRlLnN0ZW5jaWxCYWNr
UmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRlLnJhc3Rlcml6
ZXIuZnJvbnRGYWNlID09IEdMX0NDVyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvQ29udGV4dC5oCmluZGV4IDA5ZWVkZTlmZjk0MjIxMmJmNWQyZjgzMzJjZGQ5
ZWUzMzY4YmEwM2IuLjNkYzk1ZTNiOTUyZGM4ZjA2Y2IyOWM0MzAzYWNiY2RiODNjZWRmMjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5o
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCkBA
IC03Myw3ICs3Myw3IEBAIGVudW0gUXVlcnlUeXBlCiBjbGFzcyBWZXJ0ZXhBdHRyaWJ1dGUKIHsK
ICAgcHVibGljOgotICAgIFZlcnRleEF0dHJpYnV0ZSgpIDogbVR5cGUoR0xfRkxPQVQpLCBtU2l6
ZSgwKSwgbU5vcm1hbGl6ZWQoZmFsc2UpLCBtU3RyaWRlKDApLCBtUG9pbnRlcihOVUxMKSwgbUFy
cmF5RW5hYmxlZChmYWxzZSksIG1EaXZpc29yKDApCisgICAgVmVydGV4QXR0cmlidXRlKCkgOiBt
VHlwZShHTF9GTE9BVCksIG1TaXplKDQpLCBtTm9ybWFsaXplZChmYWxzZSksIG1TdHJpZGUoMCks
IG1Qb2ludGVyKE5VTEwpLCBtQXJyYXlFbmFibGVkKGZhbHNlKSwgbURpdmlzb3IoMCkKICAgICB7
CiAgICAgICAgIG1DdXJyZW50VmFsdWVbMF0gPSAwLjBmOwogICAgICAgICBtQ3VycmVudFZhbHVl
WzFdID0gMC4wZjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvUHJvZ3JhbUJpbmFyeS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwCmluZGV4IGVlMGVjOGUwM2YxZDkyODMxZWQ2NWIyMzZh
OWU1ZWNhMTNiZGQzMTkuLjI1ZWZjNDA5NzNiMzM3NTQwNTk3NGM5MzMxNzRiZmZhNTViNzFlZTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3Jh
bUJpbmFyeS5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Q
cm9ncmFtQmluYXJ5LmNwcApAQCAtMTYyNyw5ICsxNjI3LDE5IEBAIGJvb2wgUHJvZ3JhbUJpbmFy
eTo6bG9hZChJbmZvTG9nICZpbmZvTG9nLCBjb25zdCB2b2lkICpiaW5hcnksIEdMc2l6ZWkgbGVu
Z3RoKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaW50IHZlcnNpb24gPSAw
OwotICAgIHN0cmVhbS5yZWFkKCZ2ZXJzaW9uKTsKLSAgICBpZiAodmVyc2lvbiAhPSBWRVJTSU9O
X0RXT1JEKQorICAgIGludCBtYWpvclZlcnNpb24gPSAwOworICAgIGludCBtaW5vclZlcnNpb24g
PSAwOworICAgIHN0cmVhbS5yZWFkKCZtYWpvclZlcnNpb24pOworICAgIHN0cmVhbS5yZWFkKCZt
aW5vclZlcnNpb24pOworICAgIGlmIChtYWpvclZlcnNpb24gIT0gQU5HTEVfTUFKT1JfVkVSU0lP
TiB8fCBtaW5vclZlcnNpb24gIT0gQU5HTEVfTUlOT1JfVkVSU0lPTikKKyAgICB7CisgICAgICAg
IGluZm9Mb2cuYXBwZW5kKCJJbnZhbGlkIHByb2dyYW0gYmluYXJ5IHZlcnNpb24uIik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBjaGFyIGNvbW1pdFN0cmlu
Z1tBTkdMRV9DT01NSVRfSEFTSF9TSVpFXTsKKyAgICBzdHJlYW0ucmVhZChjb21taXRTdHJpbmcs
IEFOR0xFX0NPTU1JVF9IQVNIX1NJWkUpOworICAgIGlmIChtZW1jbXAoY29tbWl0U3RyaW5nLCBB
TkdMRV9DT01NSVRfSEFTSCwgc2l6ZW9mKHVuc2lnbmVkIGNoYXIpICogQU5HTEVfQ09NTUlUX0hB
U0hfU0laRSkgIT0gMCkKICAgICB7CiAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJJbnZhbGlkIHBy
b2dyYW0gYmluYXJ5IHZlcnNpb24uIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE3OTYs
NyArMTgwNiw5IEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6c2F2ZSh2b2lkKiBiaW5hcnksIEdMc2l6
ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoKQogICAgIEJpbmFyeU91dHB1dFN0cmVhbSBzdHJl
YW07CiAKICAgICBzdHJlYW0ud3JpdGUoR0xfUFJPR1JBTV9CSU5BUllfQU5HTEUpOwotICAgIHN0
cmVhbS53cml0ZShWRVJTSU9OX0RXT1JEKTsKKyAgICBzdHJlYW0ud3JpdGUoQU5HTEVfTUFKT1Jf
VkVSU0lPTik7CisgICAgc3RyZWFtLndyaXRlKEFOR0xFX01JTk9SX1ZFUlNJT04pOworICAgIHN0
cmVhbS53cml0ZShBTkdMRV9DT01NSVRfSEFTSCwgQU5HTEVfQ09NTUlUX0hBU0hfU0laRSk7CiAg
ICAgc3RyZWFtLndyaXRlKEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMKTsKIAogICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyArK2kpCkBA
IC0yNTkyLDcgKzI2MDQsOSBAQCBzdHJ1Y3QgQXR0cmlidXRlU29ydGVyCiAKICAgICBib29sIG9w
ZXJhdG9yKCkoaW50IGEsIGludCBiKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9yaWdpbmFsSW5k
aWNlc1thXSA9PSAtMSA/IGZhbHNlIDogb3JpZ2luYWxJbmRpY2VzW2FdIDwgb3JpZ2luYWxJbmRp
Y2VzW2JdOworICAgICAgICBpZiAob3JpZ2luYWxJbmRpY2VzW2FdID09IC0xKSByZXR1cm4gZmFs
c2U7CisgICAgICAgIGlmIChvcmlnaW5hbEluZGljZXNbYl0gPT0gLTEpIHJldHVybiB0cnVlOwor
ICAgICAgICByZXR1cm4gKG9yaWdpbmFsSW5kaWNlc1thXSA8IG9yaWdpbmFsSW5kaWNlc1tiXSk7
CiAgICAgfQogCiAgICAgY29uc3QgaW50ICgmb3JpZ2luYWxJbmRpY2VzKVtNQVhfVkVSVEVYX0FU
VFJJQlNdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9TaGFkZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVy
LmgKaW5kZXggODQ4ZDRjOTlhNzEzODgzMGQ2YjJiY2U3OGE5Njc1MzU5M2Y4OWNlOS4uMjAxNWFk
ZGQxMWQyNDZiYWU2MmQ2MTRhZDEwNzIyNzg0MDNmYTZmNiAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5oCkBAIC0xOCw3ICsxOCw3IEBACiAjaW5j
bHVkZSA8bGlzdD4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlICJjb21waWxlci9Vbmlm
b3JtLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmgiCiAjaW5jbHVk
ZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKIAogbmFtZXNwYWNlIHJ4CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcAppbmRleCBjZWU5YzU3ZGFj
ZjUwOGFkMmI2OGU2OGM4ZDc3NGI2ZmY0M2U1NDJjLi4zZGVlY2FmMTEyY2JiYTUwMWUxM2ZlNzBj
NGEwNzZmMzA5OWRmMTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1RleHR1cmUuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvVGV4dHVyZS5jcHAKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlICJsaWJHTEVT
djIvbWFpbi5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgogI2luY2x1ZGUgImxp
YkdMRVN2Mi91dGlsaXRpZXMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvQmxpdC5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0JsaXQuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0lt
YWdlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAKaW5k
ZXggMWU3Y2Y5ZDBjZmFlYTNiZmU3ZDQzNjFlZDUzYmVmNWJiNTY4NmQ4Zi4uYTMzNDgxZTE1YzEz
YzRlOTNmNjVmYWNjNTdhMWQwZmQ5ZjIxZjA3MyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcApAQCAtMzg0NCw5ICszODQ0LDkg
QEAgY29uc3QgR0x1Ynl0ZSogX19zdGRjYWxsIGdsR2V0U3RyaW5nKEdMZW51bSBuYW1lKQogICAg
ICAgICAgIGNhc2UgR0xfUkVOREVSRVI6CiAgICAgICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSgo
Y29udGV4dCAhPSBOVUxMKSA/IGNvbnRleHQtPmdldFJlbmRlcmVyU3RyaW5nKCkgOiAiQU5HTEUi
KTsKICAgICAgICAgICBjYXNlIEdMX1ZFUlNJT046Ci0gICAgICAgICAgICByZXR1cm4gKEdMdWJ5
dGUqKSJPcGVuR0wgRVMgMi4wIChBTkdMRSAiIFZFUlNJT05fU1RSSU5HICIpIjsKKyAgICAgICAg
ICAgIHJldHVybiAoR0x1Ynl0ZSopIk9wZW5HTCBFUyAyLjAgKEFOR0xFICIgQU5HTEVfVkVSU0lP
Tl9TVFJJTkcgIikiOwogICAgICAgICAgIGNhc2UgR0xfU0hBRElOR19MQU5HVUFHRV9WRVJTSU9O
OgotICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikiT3BlbkdMIEVTIEdMU0wgRVMgMS4wMCAo
QU5HTEUgIiBWRVJTSU9OX1NUUklORyAiKSI7CisgICAgICAgICAgICByZXR1cm4gKEdMdWJ5dGUq
KSJPcGVuR0wgRVMgR0xTTCBFUyAxLjAwIChBTkdMRSAiIEFOR0xFX1ZFUlNJT05fU1RSSU5HICIp
IjsKICAgICAgICAgICBjYXNlIEdMX0VYVEVOU0lPTlM6CiAgICAgICAgICAgICByZXR1cm4gKEdM
dWJ5dGUqKSgoY29udGV4dCAhPSBOVUxMKSA/IGNvbnRleHQtPmdldEV4dGVuc2lvblN0cmluZygp
IDogIiIpOwogICAgICAgICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5kZWYgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5kZWYKaW5kZXggMmNkOGVjZTJiMjJjNGFjMTA1
NWY0OTJlYTg3MzUyODRhNmU1MDYzYi4uYjgzMjBjOGYyNTYzYjllZjE5NjZlZjNhNDQ1YmM1OGI1
MDA4YmNkYyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9saWJHTEVTdjIuZGVmCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvbGliR0xFU3YyLmRlZgpAQCAtMTgzLDMgKzE4Myw2IEBAIEVYUE9SVFMKICAgICBnbEJpbmRU
ZXhJbWFnZSAgICAgICAgICAgICAgICAgIEAxNTggTk9OQU1FCiAgICAgZ2xDcmVhdGVSZW5kZXJl
ciAgICAgICAgICAgICAgICBAMTc3IE5PTkFNRQogICAgIGdsRGVzdHJveVJlbmRlcmVyICAgICAg
ICAgICAgICAgQDE3OCBOT05BTUUKKworICAgIDsgU2V0dGluZyB1cCBUUkFDRSBtYWNybyBjYWxs
YmFja3MKKyAgICBTZXRUcmFjZUZ1bmN0aW9uUG9pbnRlcnMgICAgICAgIEAxODAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnJjIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIucmMKaW5kZXgg
ZjFiMDFiOWI3OTU5ZWJjOWZmMDUzYTVhZDdkYTQxM2ZkNjViYmE0ZS4uNGNhMzFmOTcyMWU3OTgx
ZWJjNDE2ZjE5ZmRlNTQyNzA0MjI5YmE0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIucmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIucmMKQEAgLTU0LDggKzU0LDggQEAgRU5ECiAv
Lw0KIA0KIFZTX1ZFUlNJT05fSU5GTyBWRVJTSU9OSU5GTw0KLSBGSUxFVkVSU0lPTiBNQUpPUl9W
RVJTSU9OLE1JTk9SX1ZFUlNJT04sQlVJTERfVkVSU0lPTixCVUlMRF9SRVZJU0lPTg0KLSBQUk9E
VUNUVkVSU0lPTiBNQUpPUl9WRVJTSU9OLE1JTk9SX1ZFUlNJT04sQlVJTERfVkVSU0lPTixCVUlM
RF9SRVZJU0lPTg0KKyBGSUxFVkVSU0lPTiBBTkdMRV9NQUpPUl9WRVJTSU9OLEFOR0xFX01JTk9S
X1ZFUlNJT04sMCwwDQorIFBST0RVQ1RWRVJTSU9OIEFOR0xFX01BSk9SX1ZFUlNJT04sQU5HTEVf
TUlOT1JfVkVSU0lPTiwwLDANCiAgRklMRUZMQUdTTUFTSyAweDE3TA0KICNpZmRlZiBfREVCVUcN
CiAgRklMRUZMQUdTIDB4MUwNCkBAIC03MSwxMyArNzEsMTQgQEAgQkVHSU4KICAgICAgICAgQkxP
Q0sgIjA0MDkwNGIwIg0KICAgICAgICAgQkVHSU4NCiAgICAgICAgICAgICBWQUxVRSAiRmlsZURl
c2NyaXB0aW9uIiwgIkFOR0xFIGxpYkdMRVN2MiBEeW5hbWljIExpbmsgTGlicmFyeSINCi0gICAg
ICAgICAgICBWQUxVRSAiRmlsZVZlcnNpb24iLCBWRVJTSU9OX1NUUklORw0KKyAgICAgICAgICAg
IFZBTFVFICJGaWxlVmVyc2lvbiIsIEFOR0xFX1ZFUlNJT05fU1RSSU5HDQogICAgICAgICAgICAg
VkFMVUUgIkludGVybmFsTmFtZSIsICJsaWJHTEVTdjIiDQogICAgICAgICAgICAgVkFMVUUgIkxl
Z2FsQ29weXJpZ2h0IiwgIkNvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiINCiAgICAgICAg
ICAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsICJsaWJHTEVTdjIuZGxsIg0KLSAgICAgICAg
ICAgIFZBTFVFICJQcml2YXRlQnVpbGQiLCBWRVJTSU9OX1NUUklORw0KKyAgICAgICAgICAgIFZB
TFVFICJQcml2YXRlQnVpbGQiLCBBTkdMRV9WRVJTSU9OX1NUUklORw0KICAgICAgICAgICAgIFZB
TFVFICJQcm9kdWN0TmFtZSIsICJBTkdMRSBsaWJHTEVTdjIgRHluYW1pYyBMaW5rIExpYnJhcnki
DQotICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgVkVSU0lPTl9TVFJJTkcNCisg
ICAgICAgICAgICBWQUxVRSAiUHJvZHVjdFZlcnNpb24iLCBBTkdMRV9WRVJTSU9OX1NUUklORw0K
KyAgICAgICAgICAgIFZBTFVFICJDb21tZW50cyIsICJCdWlsZCBEYXRlOiAiIEFOR0xFX0NPTU1J
VF9EQVRFDQogICAgICAgICBFTkQNCiAgICAgRU5EDQogICAgIEJMT0NLICJWYXJGaWxlSW5mbyIN
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdM
RVN2Mi52Y3hwcm9qIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJH
TEVTdjIudmN4cHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIwMGUxNzBlNDZi
ZWM2NTU4NjU1Y2YyOGFiYTY4MDE3OGNlY2RiNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L2xpYkdMRVN2Mi52Y3hwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNDI1ICswLDAgQEAKLe+7vzw/
eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPFByb2plY3QgRGVmYXVsdFRh
cmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1p
Y3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+DQotICA8SXRlbUdyb3VwIExhYmVs
PSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPg0KLSAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5j
bHVkZT0iRGVidWd8V2luMzIiPg0KLSAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1
cmF0aW9uPg0KLSAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+DQotICAgIDwvUHJvamVj
dENvbmZpZ3VyYXRpb24+DQotICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1
Z3x4NjQiPg0KLSAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPg0KLSAg
ICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPg0KLSAgICA8L1Byb2plY3RDb25maWd1cmF0aW9u
Pg0KLSAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+DQot
ICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4NCi0gICAgICA8UGxh
dGZvcm0+V2luMzI8L1BsYXRmb3JtPg0KLSAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KLSAg
ICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPg0KLSAgICAgIDxD
b25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+DQotICAgICAgPFBsYXRmb3JtPng2
NDwvUGxhdGZvcm0+DQotICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQotICA8L0l0ZW1Hcm91
cD4NCi0gIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4NCi0gICAgPFByb2plY3RHdWlk
PntCNTg3MUE3QS05NjhDLTQyRTMtQTMzQi05ODFFNkY0NDhFNzh9PC9Qcm9qZWN0R3VpZD4NCi0g
ICAgPFJvb3ROYW1lc3BhY2U+bGliR0xFU3YyPC9Sb290TmFtZXNwYWNlPg0KLSAgICA8S2V5d29y
ZD5XaW4zMlByb2o8L0tleXdvcmQ+DQotICA8L1Byb3BlcnR5R3JvdXA+DQotICA8SW1wb3J0IFBy
b2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPg0K
LSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KLSAgICA8Q29uZmln
dXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KLSAgICA8Q2hh
cmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4NCi0gICAgPFdob2xlUHJvZ3JhbU9wdGlt
aXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+DQotICA8L1Byb3BlcnR5R3Jv
dXA+DQotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KLSAgICA8Q29u
ZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KLSAgICA8
Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4NCi0gIDwvUHJvcGVydHlHcm91cD4N
Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9y
bSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQotICAgIDxDb25maWd1
cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+DQotICAgIDxDaGFy
YWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0Pg0KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1p
emF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4NCi0gIDwvUHJvcGVydHlHcm91
cD4NCi0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KLSAgICA8Q29uZmln
dXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KLSAgICA8Q2hh
cmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4NCi0gIDwvUHJvcGVydHlHcm91cD4NCi0g
IDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAv
Pg0KLSAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+DQotICA8L0ltcG9y
dEdyb3VwPg0KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQ
bGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQotICAg
IDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3Jt
KS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0
LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9y
bSIgLz4NCi0gIDwvSW1wb3J0R3JvdXA+DQotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChD
b25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0
eVNoZWV0cyI+DQotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0
LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9v
dERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2Nh
bEFwcERhdGFQbGF0Zm9ybSIgLz4NCi0gIDwvSW1wb3J0R3JvdXA+DQotICA8SW1wb3J0R3JvdXAg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCci
IExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9v
dERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4
aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3Bz
JykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCi0gIDwvSW1wb3J0R3JvdXA+DQot
ICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KLSAgICA8SW1wb3J0IFByb2pl
Y3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIg
Q29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9y
bSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQotICA8L0lt
cG9ydEdyb3VwPg0KLSAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+DQotICA8
UHJvcGVydHlHcm91cD4NCi0gICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC40MDIxOS4xPC9f
UHJvamVjdEZpbGVWZXJzaW9uPg0KLSAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4kKFNvbHV0aW9uRGlyKSQoQ29uZmln
dXJhdGlvbilcPC9PdXREaXI+DQotICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiQoQ29uZmlndXJhdGlvbilcPC9JbnRE
aXI+DQotICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4NCi0gICAg
PE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVh
c2V8V2luMzInIj4kKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQotICAg
IDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxl
YXNlfFdpbjMyJyI+JChDb25maWd1cmF0aW9uKVw8L0ludERpcj4NCi0gICAgPExpbmtJbmNyZW1l
bnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8
V2luMzInIj5mYWxzZTwvTGlua0luY3JlbWVudGFsPg0KLSAgICA8T3V0RGlyIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JChTb2x1dGlvbkRp
cikkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KLSAgICA8SW50RGlyIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JChQ
bGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L0ludERpcj4NCi0gICAgPExpbmtJbmNyZW1lbnRh
bCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCci
PnRydWU8L0xpbmtJbmNyZW1lbnRhbD4NCi0gICAgPE91dERpciBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JChTb2x1dGlvbkRpcikkKFBs
YXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KLSAgICA8SW50RGlyIENvbmRpdGlv
bj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4kKFBsYXRm
b3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPg0KLSAgICA8TGlua0luY3JlbWVudGFsIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5m
YWxzZTwvTGlua0luY3JlbWVudGFsPg0KLSAgICA8SW5jbHVkZVBhdGggQ29uZGl0aW9uPSInJChD
b25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiQoSW5jbHVkZVBhdGgp
PC9JbmNsdWRlUGF0aD4NCi0gICAgPExpYnJhcnlQYXRoIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4kKExpYnJhcnlQYXRoKTwvTGlicmFy
eVBhdGg+DQotICAgIDxJbmNsdWRlUGF0aCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo
UGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiQoSW5jbHVkZVBhdGgpPC9JbmNsdWRlUGF0aD4NCi0g
ICAgPExpYnJhcnlQYXRoIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nRGVidWd8eDY0JyI+JChMaWJyYXJ5UGF0aCk8L0xpYnJhcnlQYXRoPg0KLSAgICA8SW5jbHVk
ZVBhdGggQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xX
aW4zMiciPiQoSW5jbHVkZVBhdGgpPC9JbmNsdWRlUGF0aD4NCi0gICAgPEluY2x1ZGVQYXRoIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMici
PiQoSW5jbHVkZVBhdGgpPC9JbmNsdWRlUGF0aD4NCi0gICAgPExpYnJhcnlQYXRoIENvbmRpdGlv
bj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4kKExpYnJh
cnlQYXRoKTwvTGlicmFyeVBhdGg+DQotICAgIDxMaWJyYXJ5UGF0aCBDb25kaXRpb249IickKENv
bmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4kKExpYnJhcnlQYXRo
KTwvTGlicmFyeVBhdGg+DQotICA8L1Byb3BlcnR5R3JvdXA+DQotICA8SXRlbURlZmluaXRpb25H
cm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdp
bjMyJyI+DQotICAgIDxDbENvbXBpbGU+DQotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwv
T3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQoUHJv
amVjdERpcik7JChQcm9qZWN0RGlyKS8uLjsgJChQcm9qZWN0RGlyKS8uLi8uLi9pbmNsdWRlOyUo
QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3Jp
ZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfV0lORE9X
UztfVVNSRExMO0xJQkdMRVNWMl9FWFBPUlRTO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01J
Tk1BWDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+
DQotICAgICAgPE1pbmltYWxSZWJ1aWxkPnRydWU8L01pbmltYWxSZWJ1aWxkPg0KLSAgICAgIDxC
YXNpY1J1bnRpbWVDaGVja3M+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0K
LSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWc8L1J1bnRpbWVMaWJyYXJ5
Pg0KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlcj5Vc2U8L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAg
ICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWw0PC9XYXJuaW5nTGV2ZWw+DQotICAgICAgPFRyZWF0V2Fy
bmluZ0FzRXJyb3I+dHJ1ZTwvVHJlYXRXYXJuaW5nQXNFcnJvcj4NCi0gICAgICA8RGVidWdJbmZv
cm1hdGlvbkZvcm1hdD5FZGl0QW5kQ29udGludWU8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQot
ICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzPjQxMDA7NDEyNzs0MTg5OzQyMzk7NDI0NDs0
MjQ1OzQ1MTI7NDcwMjs0OTk2OyUoRGlzYWJsZVNwZWNpZmljV2FybmluZ3MpPC9EaXNhYmxlU3Bl
Y2lmaWNXYXJuaW5ncz4NCi0gICAgICA8UHJlY29tcGlsZWRIZWFkZXJGaWxlPnByZWNvbXBpbGVk
Lmg8L1ByZWNvbXBpbGVkSGVhZGVyRmlsZT4NCi0gICAgICA8QWRkaXRpb25hbE9wdGlvbnM+JChF
eHRlcm5hbENvbXBpbGVyT3B0aW9ucykgJShBZGRpdGlvbmFsT3B0aW9ucyk8L0FkZGl0aW9uYWxP
cHRpb25zPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPExpbms+DQotICAgICAgPEFkZGl0aW9u
YWxEZXBlbmRlbmNpZXM+ZDNkOS5saWI7ZHhndWlkLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNp
ZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPg0KLSAgICAgIDxNb2R1bGVEZWZpbml0aW9uRmls
ZT5saWJHTEVTdjIuZGVmPC9Nb2R1bGVEZWZpbml0aW9uRmlsZT4NCi0gICAgICA8R2VuZXJhdGVE
ZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4NCi0gICAgICA8
U3ViU3lzdGVtPldpbmRvd3M8L1N1YlN5c3RlbT4NCi0gICAgICA8RGF0YUV4ZWN1dGlvblByZXZl
bnRpb24+DQotICAgICAgPC9EYXRhRXhlY3V0aW9uUHJldmVudGlvbj4NCi0gICAgICA8VGFyZ2V0
TWFjaGluZT5NYWNoaW5lWDg2PC9UYXJnZXRNYWNoaW5lPg0KLSAgICA8L0xpbms+DQotICAgIDxQ
b3N0QnVpbGRFdmVudD4NCi0gICAgICA8Q29tbWFuZD4lNDBlY2hvIG9uDQotbWtkaXIgIiQoUHJv
amVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uKVwiDQotY29weSAiJChPdXREaXIpbGli
R0xFU3YyLmRsbCIgIiQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uKVwiDQot
Y29weSAiJChPdXREaXIpbGliR0xFU3YyLmxpYiIgIiQoUHJvamVjdERpcikuLlwuLlxsaWJcJChD
b25maWd1cmF0aW9uKVwiDQotJTQwZWNobyBvZmYNCi08L0NvbW1hbmQ+DQotICAgIDwvUG9zdEJ1
aWxkRXZlbnQ+DQotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQotICA8SXRlbURlZmluaXRpb25H
cm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8
V2luMzInIj4NCi0gICAgPENsQ29tcGlsZT4NCi0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVk
PC9PcHRpbWl6YXRpb24+DQotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPkFueVN1aXRh
YmxlPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVE
aXJlY3Rvcmllcz4kKFByb2plY3REaXIpOyQoUHJvamVjdERpcikvLi47ICQoUHJvamVjdERpcikv
Li4vLi4vaW5jbHVkZTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFs
SW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5BTkdM
RV9ESVNBQkxFX1RSQUNFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO0xJQkdMRVNWMl9F
WFBPUlRTO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWDtfU0VDVVJFX1NDTD0wOyUo
UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAg
ICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+DQotICAgICAg
PFByZWNvbXBpbGVkSGVhZGVyPlVzZTwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAgICAgPFdhcm5p
bmdMZXZlbD5MZXZlbDQ8L1dhcm5pbmdMZXZlbD4NCi0gICAgICA8VHJlYXRXYXJuaW5nQXNFcnJv
cj50cnVlPC9UcmVhdFdhcm5pbmdBc0Vycm9yPg0KLSAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9y
bWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCi0gICAgICA8RGlz
YWJsZVNwZWNpZmljV2FybmluZ3M+NDEwMDs0MTI3OzQxODk7NDIzOTs0MjQ0OzQyNDU7NDUxMjs0
NzAyOzQ3MTg7NDk5NjslKERpc2FibGVTcGVjaWZpY1dhcm5pbmdzKTwvRGlzYWJsZVNwZWNpZmlj
V2FybmluZ3M+DQotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyRmlsZT5wcmVjb21waWxlZC5oPC9Q
cmVjb21waWxlZEhlYWRlckZpbGU+DQotICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPiQoRXh0ZXJu
YWxDb21waWxlck9wdGlvbnMpICUoQWRkaXRpb25hbE9wdGlvbnMpPC9BZGRpdGlvbmFsT3B0aW9u
cz4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxMaW5rPg0KLSAgICAgIDxBZGRpdGlvbmFsRGVw
ZW5kZW5jaWVzPmQzZDkubGliO2R4Z3VpZC5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwv
QWRkaXRpb25hbERlcGVuZGVuY2llcz4NCi0gICAgICA8SWdub3JlQWxsRGVmYXVsdExpYnJhcmll
cz5mYWxzZTwvSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz4NCi0gICAgICA8TW9kdWxlRGVmaW5p
dGlvbkZpbGU+bGliR0xFU3YyLmRlZjwvTW9kdWxlRGVmaW5pdGlvbkZpbGU+DQotICAgICAgPEdl
bmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+DQot
ICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+DQotICAgICAgPE9wdGltaXplUmVm
ZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+DQotICAgICAgPEVuYWJsZUNPTURBVEZv
bGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4NCi0gICAgICA8RGF0YUV4ZWN1dGlvblBy
ZXZlbnRpb24+DQotICAgICAgPC9EYXRhRXhlY3V0aW9uUHJldmVudGlvbj4NCi0gICAgICA8VGFy
Z2V0TWFjaGluZT5NYWNoaW5lWDg2PC9UYXJnZXRNYWNoaW5lPg0KLSAgICA8L0xpbms+DQotICAg
IDxQb3N0QnVpbGRFdmVudD4NCi0gICAgICA8Q29tbWFuZD4lNDBlY2hvIG9uDQotbWtkaXIgIiQo
UHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uKVwiDQotY29weSAiJChPdXREaXIp
bGliR0xFU3YyLmRsbCIgIiQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uKVwi
DQotY29weSAiJChPdXREaXIpbGliR0xFU3YyLmxpYiIgIiQoUHJvamVjdERpcikuLlwuLlxsaWJc
JChDb25maWd1cmF0aW9uKVwiDQotJTQwZWNobyBvZmYNCi08L0NvbW1hbmQ+DQotICAgIDwvUG9z
dEJ1aWxkRXZlbnQ+DQotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQotICA8SXRlbURlZmluaXRp
b25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVn
fHg2NCciPg0KLSAgICA8TWlkbD4NCi0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJn
ZXRFbnZpcm9ubWVudD4NCi0gICAgPC9NaWRsPg0KLSAgICA8Q2xDb21waWxlPg0KLSAgICAgIDxP
cHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbElu
Y2x1ZGVEaXJlY3Rvcmllcz4kKFByb2plY3REaXIpLy4uOyAkKFByb2plY3REaXIpLy4uLy4uL2lu
Y2x1ZGU7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVE
aXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVH
O19XSU5ET1dTO19VU1JETEw7TElCR0xFU1YyX0VYUE9SVFM7X0NSVF9TRUNVUkVfTk9fREVQUkVD
QVRFO05PTUlOTUFYOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZp
bml0aW9ucz4NCi0gICAgICA8TWluaW1hbFJlYnVpbGQ+dHJ1ZTwvTWluaW1hbFJlYnVpbGQ+DQot
ICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVD
aGVja3M+DQotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1ZzwvUnVudGlt
ZUxpYnJhcnk+DQotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPlVzZTwvUHJlY29tcGlsZWRIZWFk
ZXI+DQotICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDQ8L1dhcm5pbmdMZXZlbD4NCi0gICAgICA8
RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+NDEwMDs0MTI3OzQxODk7NDIzOTs0MjQ0OzQyNDU7NDUx
Mjs0NzAyOzQ3MTg7NDk5NjslKERpc2FibGVTcGVjaWZpY1dhcm5pbmdzKTwvRGlzYWJsZVNwZWNp
ZmljV2FybmluZ3M+DQotICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFi
YXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KLSAgICAgIDxUcmVhdFdhcm5pbmdBc0Vycm9y
PnRydWU8L1RyZWF0V2FybmluZ0FzRXJyb3I+DQotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyRmls
ZT5wcmVjb21waWxlZC5oPC9QcmVjb21waWxlZEhlYWRlckZpbGU+DQotICAgICAgPEFkZGl0aW9u
YWxPcHRpb25zPiQoRXh0ZXJuYWxDb21waWxlck9wdGlvbnMpICUoQWRkaXRpb25hbE9wdGlvbnMp
PC9BZGRpdGlvbmFsT3B0aW9ucz4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxMaW5rPg0KLSAg
ICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmQzZDkubGliO2R4Z3VpZC5saWI7JShBZGRpdGlv
bmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCi0gICAgICA8TW9kdWxl
RGVmaW5pdGlvbkZpbGU+bGliR0xFU3YyLmRlZjwvTW9kdWxlRGVmaW5pdGlvbkZpbGU+DQotICAg
ICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRp
b24+DQotICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+DQotICAgICAgPERhdGFF
eGVjdXRpb25QcmV2ZW50aW9uPg0KLSAgICAgIDwvRGF0YUV4ZWN1dGlvblByZXZlbnRpb24+DQot
ICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4NCi0gICAgPC9M
aW5rPg0KLSAgICA8UG9zdEJ1aWxkRXZlbnQ+DQotICAgICAgPENvbW1hbmQ+JTQwZWNobyBvbg0K
LW1rZGlyICIkKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbilcIg0KLWNvcHkg
IiQoT3V0RGlyKWxpYkdMRVN2Mi5kbGwiICIkKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmln
dXJhdGlvbilcIg0KLWNvcHkgIiQoT3V0RGlyKWxpYkdMRVN2Mi5saWIiICIkKFByb2plY3REaXIp
Li5cLi5cbGliXCQoQ29uZmlndXJhdGlvbilcIg0KLSU0MGVjaG8gb2ZmDQotPC9Db21tYW5kPg0K
LSAgICA8L1Bvc3RCdWlsZEV2ZW50Pg0KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KLSAgPEl0
ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdSZWxlYXNlfHg2NCciPg0KLSAgICA8TWlkbD4NCi0gICAgICA8VGFyZ2V0RW52aXJvbm1l
bnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4NCi0gICAgPC9NaWRsPg0KLSAgICA8Q2xDb21waWxl
Pg0KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8
SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+QW55U3VpdGFibGU8L0lubGluZUZ1bmN0aW9uRXhwYW5z
aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQoUHJvamVjdERpcikv
Li47ICQoUHJvamVjdERpcikvLi4vLi4vaW5jbHVkZTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0
b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNz
b3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtMSUJHTEVTVjJfRVhQ
T1JUUztfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7Tk9NSU5NQVg7X1NFQ1VSRV9TQ0w9MDslKFBy
ZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAg
PFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5Pg0KLSAgICAgIDxQ
cmVjb21waWxlZEhlYWRlcj5Vc2U8L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDxXYXJuaW5n
TGV2ZWw+TGV2ZWw0PC9XYXJuaW5nTGV2ZWw+DQotICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5p
bmdzPjQxMDA7NDEyNzs0MTg5OzQyMzk7NDI0NDs0MjQ1OzQ1MTI7NDcwMjs0NzE4OzQ5OTY7JShE
aXNhYmxlU3BlY2lmaWNXYXJuaW5ncyk8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPg0KLSAgICAg
IDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlv
bkZvcm1hdD4NCi0gICAgICA8VHJlYXRXYXJuaW5nQXNFcnJvcj50cnVlPC9UcmVhdFdhcm5pbmdB
c0Vycm9yPg0KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlckZpbGU+cHJlY29tcGlsZWQuaDwvUHJl
Y29tcGlsZWRIZWFkZXJGaWxlPg0KLSAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4kKEV4dGVybmFs
Q29tcGlsZXJPcHRpb25zKSAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlvbnM+
DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8TGluaz4NCi0gICAgICA8QWRkaXRpb25hbERlcGVu
ZGVuY2llcz5kM2Q5LmxpYjtkeGd1aWQubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0Fk
ZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQotICAgICAgPElnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM+
ZmFsc2U8L0lnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM+DQotICAgICAgPE1vZHVsZURlZmluaXRp
b25GaWxlPmxpYkdMRVN2Mi5kZWY8L01vZHVsZURlZmluaXRpb25GaWxlPg0KLSAgICAgIDxHZW5l
cmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPg0KLSAg
ICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPg0KLSAgICAgIDxPcHRpbWl6ZVJlZmVy
ZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPg0KLSAgICAgIDxFbmFibGVDT01EQVRGb2xk
aW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+DQotICAgICAgPERhdGFFeGVjdXRpb25QcmV2
ZW50aW9uPg0KLSAgICAgIDwvRGF0YUV4ZWN1dGlvblByZXZlbnRpb24+DQotICAgICAgPFRhcmdl
dE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4NCi0gICAgPC9MaW5rPg0KLSAgICA8
UG9zdEJ1aWxkRXZlbnQ+DQotICAgICAgPENvbW1hbmQ+JTQwZWNobyBvbg0KLW1rZGlyICIkKFBy
b2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbilcIg0KLWNvcHkgIiQoT3V0RGlyKWxp
YkdMRVN2Mi5kbGwiICIkKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbilcIg0K
LWNvcHkgIiQoT3V0RGlyKWxpYkdMRVN2Mi5saWIiICIkKFByb2plY3REaXIpLi5cLi5cbGliXCQo
Q29uZmlndXJhdGlvbilcIg0KLSU0MGVjaG8gb2ZmDQotPC9Db21tYW5kPg0KLSAgICA8L1Bvc3RC
dWlsZEV2ZW50Pg0KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KLSAgPEl0ZW1Hcm91cD4NCi0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx0aGlyZF9wYXJ0eVxtdXJtdXJoYXNoXE11cm11ckhh
c2gzLmNwcCI+DQotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmln
dXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5Ob3RVc2luZzwvUHJlY29tcGls
ZWRIZWFkZXI+DQotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmln
dXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPk5vdFVzaW5nPC9QcmVjb21w
aWxlZEhlYWRlcj4NCi0gICAgICA8UHJlY29tcGlsZWRIZWFkZXIgQ29uZGl0aW9uPSInJChDb25m
aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5Ob3RVc2luZzwvUHJlY29tcGls
ZWRIZWFkZXI+DQotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmln
dXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5Ob3RVc2luZzwvUHJlY29tcGls
ZWRIZWFkZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkJ1
ZmZlci5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iQ29udGV4dC5jcHAiIC8+DQot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cY29tbW9uXGRlYnVnLmNwcCI+DQotICAgICAgPFBy
ZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nRGVidWd8V2luMzInIj5Ob3RVc2luZzwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAgICAgPFBy
ZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nUmVsZWFzZXxXaW4zMiciPk5vdFVzaW5nPC9QcmVjb21waWxlZEhlYWRlcj4NCi0gICAgICA8
UHJlY29tcGlsZWRIZWFkZXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdEZWJ1Z3x4NjQnIj5Ob3RVc2luZzwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAgICAgPFBy
ZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nUmVsZWFzZXx4NjQnIj5Ob3RVc2luZzwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAgIDwvQ2xD
b21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGNvbW1vblxldmVudF90cmFjZXIu
Y3BwIj4NCi0gICAgICA8UHJlY29tcGlsZWRIZWFkZXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPk5vdFVzaW5nPC9QcmVjb21waWxlZEhl
YWRlcj4NCi0gICAgICA8UHJlY29tcGlsZWRIZWFkZXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+Tm90VXNpbmc8L1ByZWNvbXBpbGVk
SGVhZGVyPg0KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlciBDb25kaXRpb249IickKENvbmZpZ3Vy
YXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPk5vdFVzaW5nPC9QcmVjb21waWxlZEhl
YWRlcj4NCi0gICAgICA8UHJlY29tcGlsZWRIZWFkZXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPk5vdFVzaW5nPC9QcmVjb21waWxlZEhl
YWRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iRmVuY2Uu
Y3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkZsb2F0MTZUb0Zsb2F0MzIuY3BwIiAv
Pg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkZyYW1lYnVmZmVyLmNwcCIgLz4NCi0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSJIYW5kbGVBbGxvY2F0b3IuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9ImxpYkdMRVN2Mi5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0ibWFp
bi5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icHJlY29tcGlsZWQuY3BwIj4NCi0g
ICAgICA8UHJlY29tcGlsZWRIZWFkZXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkNyZWF0ZTwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAg
ICAgPFByZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPkNyZWF0ZTwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAg
ICAgPFByZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nRGVidWd8eDY0JyI+Q3JlYXRlPC9QcmVjb21waWxlZEhlYWRlcj4NCi0gICAgICA8
UHJlY29tcGlsZWRIZWFkZXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdSZWxlYXNlfHg2NCciPkNyZWF0ZTwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAgIDwvQ2xD
b21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlByb2dyYW0uY3BwIiAvPg0KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9IlByb2dyYW1CaW5hcnkuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9IlF1ZXJ5LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxjb21t
b25cUmVmQ291bnRPYmplY3QuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlJlbmRl
cmJ1ZmZlci5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcQmxpdC5j
cHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcRmVuY2UxMS5jcHAiIC8+
DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcRmVuY2U5LmNwcCIgLz4NCi0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxCdWZmZXJTdG9yYWdlLmNwcCIgLz4NCi0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxCdWZmZXJTdG9yYWdlMTEuY3BwIiAvPg0KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXEJ1ZmZlclN0b3JhZ2U5LmNwcCIgLz4NCi0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxJbWFnZS5jcHAiIC8+DQotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcSW1hZ2U5LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSJyZW5kZXJlclxJbmRleEJ1ZmZlci5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0icmVuZGVyZXJcSW5kZXhCdWZmZXIxMS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0icmVuZGVyZXJcSW5kZXhCdWZmZXI5LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSJyZW5kZXJlclxJbmRleERhdGFNYW5hZ2VyLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSJyZW5kZXJlclxJbWFnZVNTRTIuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9InJlbmRlcmVyXEltYWdlMTEuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJl
bmRlcmVyXEluZGV4UmFuZ2VDYWNoZS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
cmVuZGVyZXJcSW5wdXRMYXlvdXRDYWNoZS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0icmVuZGVyZXJcUXVlcnkxMS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVu
ZGVyZXJcUXVlcnk5LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxS
ZW5kZXJlci5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcUmVuZGVy
ZXIxMS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJccmVuZGVyZXIx
MV91dGlscy5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcUmVuZGVy
ZXI5LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxyZW5kZXJlcjlf
dXRpbHMuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFJlbmRlclRh
cmdldDExLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxSZW5kZXJU
YXJnZXQ5LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxSZW5kZXJT
dGF0ZUNhY2hlLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxTaGFk
ZXJFeGVjdXRhYmxlMTEuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVy
XFNoYWRlckV4ZWN1dGFibGU5LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5k
ZXJlclxTd2FwQ2hhaW4xMS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVy
ZXJcU3dhcENoYWluOS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJc
VGV4dHVyZVN0b3JhZ2UuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVy
XFRleHR1cmVTdG9yYWdlMTEuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRl
cmVyXFRleHR1cmVTdG9yYWdlOS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVu
ZGVyZXJcVmVydGV4QnVmZmVyLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5k
ZXJlclxWZXJ0ZXhCdWZmZXIxMS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVu
ZGVyZXJcVmVydGV4QnVmZmVyOS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVu
ZGVyZXJcVmVydGV4RGF0YU1hbmFnZXIuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
InJlbmRlcmVyXFZlcnRleERlY2xhcmF0aW9uQ2FjaGUuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9IlJlc291cmNlTWFuYWdlci5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iU2hhZGVyLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJUZXh0dXJlLmNwcCIg
Lz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJVbmlmb3JtLmNwcCIgLz4NCi0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSJ1dGlsaXRpZXMuY3BwIiAvPg0KLSAgPC9JdGVtR3JvdXA+DQotICA8SXRl
bUdyb3VwPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGNvbW1vblxkZWJ1Zy5oIiAvPg0K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGNvbW1vblxldmVudF90cmFjZXIuaCIgLz4NCi0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxjb21tb25cc3lzdGVtLmgiIC8+DQotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cdGhpcmRfcGFydHlcbXVybXVyaGFzaFxNdXJtdXJIYXNoMy5oIiAv
Pg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHRoaXJkX3BhcnR5XHRyYWNlX2V2ZW50XHRy
YWNlX2V2ZW50LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iYW5nbGV0eXBlcy5oIiAv
Pg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkJpbmFyeVN0cmVhbS5oIiAvPg0KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9IkJ1ZmZlci5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImNv
bnN0YW50cy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkNvbnRleHQuaCIgLz4NCi0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSJGZW5jZS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9IkZyYW1lYnVmZmVyLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5j
bHVkZVxHTEVTMlxnbDIuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNs
dWRlXEdMRVMyXGdsMmV4dC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGlu
Y2x1ZGVcR0xFUzJcZ2wycGxhdGZvcm0uaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJI
YW5kbGVBbGxvY2F0b3IuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJtYWluLmgiIC8+
DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0ibWF0aHV0aWwuaCIgLz4NCi0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSJwcmVjb21waWxlZC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlBy
b2dyYW0uaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJQcm9ncmFtQmluYXJ5LmgiIC8+
DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iUXVlcnkuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxjb21tb25cUmVmQ291bnRPYmplY3QuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSJSZW5kZXJidWZmZXIuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5k
ZXJlclxCbGl0LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcRmVuY2Ux
MS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEZlbmNlOS5oIiAvPg0K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEZlbmNlSW1wbC5oIiAvPg0KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEJ1ZmZlclN0b3JhZ2UuaCIgLz4NCi0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxCdWZmZXJTdG9yYWdlMTEuaCIgLz4NCi0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxCdWZmZXJTdG9yYWdlOS5oIiAvPg0KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXGdlbmVyYXRlbWlwLmgiIC8+DQotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0icmVuZGVyZXJcSW1hZ2UuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSJyZW5kZXJlclxJbWFnZTExLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVy
ZXJcSW1hZ2U5LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcSW5kZXhC
dWZmZXIuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxJbmRleEJ1ZmZl
cjExLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcSW5kZXhCdWZmZXI5
LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcSW5kZXhEYXRhTWFuYWdl
ci5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEluZGV4UmFuZ2VDYWNo
ZS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXElucHV0TGF5b3V0Q2Fj
aGUuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxRdWVyeTExLmgiIC8+
DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcUXVlcnlJbXBsLmgiIC8+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcUXVlcnk5LmgiIC8+DQotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0icmVuZGVyZXJcUmVuZGVyZXIuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSJyZW5kZXJlclxSZW5kZXJlcjExLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
cmVuZGVyZXJccmVuZGVyZXIxMV91dGlscy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
InJlbmRlcmVyXFJlbmRlcmVyOS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRl
cmVyXHJlbmRlcmVyOV91dGlscy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRl
cmVyXFJlbmRlclRhcmdldC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVy
XFJlbmRlclRhcmdldDExLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJc
UmVuZGVyVGFyZ2V0OS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFJl
bmRlclN0YXRlQ2FjaGUuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxT
aGFkZXJDYWNoZS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFNoYWRl
ckV4ZWN1dGFibGUuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxTaGFk
ZXJFeGVjdXRhYmxlMTEuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxT
aGFkZXJFeGVjdXRhYmxlOS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVy
XHNoYWRlcnNcY29tcGlsZWRcY2xlYXIxMXZzLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0icmVuZGVyZXJcc2hhZGVyc1xjb21waWxlZFxjbGVhcm11bHRpcGxlMTFwcy5oIiAvPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRcY2xlYXJzaW5n
bGUxMXBzLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xj
b21waWxlZFxjb21wb25lbnRtYXNrcHMuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJy
ZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVkXGZsaXB5dnMuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVkXGx1bWluYW5jZXBzLmgiIC8+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xjb21waWxlZFxwYXNzdGhyb3Vn
aDExdnMuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXGNv
bXBpbGVkXHBhc3N0aHJvdWdobHVtMTFwcy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
InJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRccGFzc3Rocm91Z2hsdW1hbHBoYTExcHMuaCIgLz4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVkXHBhc3N0
aHJvdWdocHMuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJz
XGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiMTFwcy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9InJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRccGFzc3Rocm91Z2hyZ2JhMTFwcy5oIiAvPg0K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRcc3RhbmRh
cmR2cy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFN3YXBDaGFpbi5o
IiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFN3YXBDaGFpbjExLmgiIC8+
DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcU3dhcENoYWluOS5oIiAvPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFRleHR1cmVTdG9yYWdlLmgiIC8+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcVGV4dHVyZVN0b3JhZ2UxMS5oIiAvPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFRleHR1cmVTdG9yYWdlOS5oIiAvPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFZlcnRleEJ1ZmZlci5oIiAvPg0KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFZlcnRleEJ1ZmZlcjExLmgiIC8+DQotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcVmVydGV4QnVmZmVyOS5oIiAvPg0KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXHZlcnRleGNvbnZlcnNpb24uaCIgLz4NCi0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxWZXJ0ZXhEYXRhTWFuYWdlci5oIiAvPg0KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFZlcnRleERlY2xhcmF0aW9uQ2FjaGUuaCIgLz4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZXNvdXJjZS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9IlJlc291cmNlTWFuYWdlci5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
IlNoYWRlci5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlRleHR1cmUuaCIgLz4NCi0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSJVbmlmb3JtLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0idXRpbGl0aWVzLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cY29tbW9u
XHZlcnNpb24uaCIgLz4NCi0gIDwvSXRlbUdyb3VwPg0KLSAgPEl0ZW1Hcm91cD4NCi0gICAgPE5v
bmUgSW5jbHVkZT0ibGliR0xFU3YyLmRlZiIgLz4NCi0gICAgPE5vbmUgSW5jbHVkZT0icmVuZGVy
ZXJcc2hhZGVyc1xCbGl0LnBzIiAvPg0KLSAgICA8Tm9uZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFk
ZXJzXEJsaXQudnMiIC8+DQotICAgIDxOb25lIEluY2x1ZGU9InJlbmRlcmVyXHNoYWRlcnNcQ2xl
YXIxMS5obHNsIiAvPg0KLSAgICA8Tm9uZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXGdlbmVy
YXRlX3NoYWRlcnMuYmF0IiAvPg0KLSAgICA8Tm9uZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJz
XFBhc3N0aHJvdWdoMTEuaGxzbCIgLz4NCi0gIDwvSXRlbUdyb3VwPg0KLSAgPEl0ZW1Hcm91cD4N
Ci0gICAgPFJlc291cmNlQ29tcGlsZSBJbmNsdWRlPSJsaWJHTEVTdjIucmMiIC8+DQotICA8L0l0
ZW1Hcm91cD4NCi0gIDxJdGVtR3JvdXA+DQotICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9
Ii4uXGNvbXBpbGVyXHByZXByb2Nlc3NvclxwcmVwcm9jZXNzb3IudmN4cHJvaiI+DQotICAgICAg
PFByb2plY3Q+e2ZiZTMyZGYzLTBmYjAtNGYyZi1hNDI0LTJjMjFiZDdiYzMyNX08L1Byb2plY3Q+
DQotICAgIDwvUHJvamVjdFJlZmVyZW5jZT4NCi0gICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVk
ZT0iLi5cY29tcGlsZXJcdHJhbnNsYXRvci52Y3hwcm9qIj4NCi0gICAgICA8UHJvamVjdD57NWIz
YTZkYjgtMWU3ZS00MGQ3LTkyYjktZGE4YWFlNjE5ZmFkfTwvUHJvamVjdD4NCi0gICAgPC9Qcm9q
ZWN0UmVmZXJlbmNlPg0KLSAgPC9JdGVtR3JvdXA+DQotICA8SW1wb3J0IFByb2plY3Q9IiQoVkNU
YXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPg0KLSAgPEltcG9ydEdyb3VwIExh
YmVsPSJFeHRlbnNpb25UYXJnZXRzIj4NCi0gIDwvSW1wb3J0R3JvdXA+DQotPC9Qcm9qZWN0Pgpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjeHByb2ouZmlsdGVycwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTIyOWJhZjEyNGUxZTllZjUzOGEyNWYzMzZj
NmVmZjUzYThlNTU4ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52Y3hw
cm9qLmZpbHRlcnMKKysrIC9kZXYvbnVsbApAQCAtMSw1MjcgKzAsMCBAQAot77u/PD94bWwgdmVy
c2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08UHJvamVjdCBUb29sc1ZlcnNpb249IjQu
MCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQv
MjAwMyI+DQotICA8SXRlbUdyb3VwPg0KLSAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxl
cyI+DQotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJB
MzJENzUyQTJGRn08L1VuaXF1ZUlkZW50aWZpZXI+DQotICAgICAgPEV4dGVuc2lvbnM+Y3BwO2M7
Y2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXg8L0V4dGVuc2lvbnM+DQotICAgIDwv
RmlsdGVyPg0KLSAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlcyI+DQotICAgICAgPFVu
aXF1ZUlkZW50aWZpZXI+ezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJGQn08L1Vu
aXF1ZUlkZW50aWZpZXI+DQotICAgICAgPEV4dGVuc2lvbnM+aDtocHA7aHh4O2htO2lubDtpbmM7
eHNkPC9FeHRlbnNpb25zPg0KLSAgICA8L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJbmNsdWRlPSJU
aGlyZCBQYXJ0eSI+DQotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+e2RjMWRhYzQwLTM1NjMtNDFi
ZS05ZTJkLWMyNTg4ZDg2NzBmYn08L1VuaXF1ZUlkZW50aWZpZXI+DQotICAgIDwvRmlsdGVyPg0K
LSAgICA8RmlsdGVyIEluY2x1ZGU9IlRoaXJkIFBhcnR5XE11cm11ckhhc2giPg0KLSAgICAgIDxV
bmlxdWVJZGVudGlmaWVyPntiMDAwNWQyZi05YjRhLTQ2NTktYTI3MC0xMzg4MTExNzRmNzN9PC9V
bmlxdWVJZGVudGlmaWVyPg0KLSAgICA8L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJbmNsdWRlPSJI
ZWFkZXIgRmlsZXNcUmVuZGVyZXIiPg0KLSAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns1NjJlNDY5
ZC0xYWJiLTQ0YmMtYjdmYS01NWVlZmJmNzVhY2N9PC9VbmlxdWVJZGVudGlmaWVyPg0KLSAgICA8
L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJbmNsdWRlPSJTaGFkZXJzIj4NCi0gICAgICA8VW5pcXVl
SWRlbnRpZmllcj57NmRjMDMwNmYtNjM5Ni00ZTgwLTllZjktMDliNThhYTUzYzRkfTwvVW5pcXVl
SWRlbnRpZmllcj4NCi0gICAgPC9GaWx0ZXI+DQotICAgIDxGaWx0ZXIgSW5jbHVkZT0iU2hhZGVy
c1xDb21waWxlZCI+DQotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezYzMzI3MDViLTE5OTktNDI5
Mi1hMzhiLWRkNDczMjk3MzRhYX08L1VuaXF1ZUlkZW50aWZpZXI+DQotICAgIDwvRmlsdGVyPg0K
LSAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlc1xSZW5kZXJlciI+DQotICAgICAgPFVu
aXF1ZUlkZW50aWZpZXI+ezkzYTc2OTY0LTc3YTMtNGIyMC1hNmY1LWUxNGU3NjJkNGUxNH08L1Vu
aXF1ZUlkZW50aWZpZXI+DQotICAgIDwvRmlsdGVyPg0KLSAgICA8RmlsdGVyIEluY2x1ZGU9Ikhl
YWRlciBGaWxlc1xSZW5kZXJlcjkiPg0KLSAgICAgIDxVbmlxdWVJZGVudGlmaWVyPnszODc3ZjM1
ZS04NDVjLTRlOTUtYjlhNS1jN2Q4YjlmMzA3YzV9PC9VbmlxdWVJZGVudGlmaWVyPg0KLSAgICA8
L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXNcUmVuZGVyZXIxMSI+
DQotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezJkNzBmZDYwLTZkZWEtNDg5Zi1hYzA5LTE2ODkw
ZDMyNTY2OX08L1VuaXF1ZUlkZW50aWZpZXI+DQotICAgIDwvRmlsdGVyPg0KLSAgICA8RmlsdGVy
IEluY2x1ZGU9IlNvdXJjZSBGaWxlc1xSZW5kZXJlcjkiPg0KLSAgICAgIDxVbmlxdWVJZGVudGlm
aWVyPns2MGUxNGYwNC0yY2YyLTRhMDctYjNlZi03YzY4YTgyYmEyZDl9PC9VbmlxdWVJZGVudGlm
aWVyPg0KLSAgICA8L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXNc
UmVuZGVyZXIxMSI+DQotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezcyZGI2MWQzLWUwODEtNGI1
OC1iYzYzLWEwNGE4YTcwNTg1Zn08L1VuaXF1ZUlkZW50aWZpZXI+DQotICAgIDwvRmlsdGVyPg0K
LSAgICA8RmlsdGVyIEluY2x1ZGU9IlRoaXJkIFBhcnR5XHRyYWNlX2V2ZW50Ij4NCi0gICAgICA8
VW5pcXVlSWRlbnRpZmllcj57ZWJmYzE2MTQtOGYwYi00OGM3LWI2YmQtMjk1YmY5MWVmODVjfTwv
VW5pcXVlSWRlbnRpZmllcj4NCi0gICAgPC9GaWx0ZXI+DQotICA8L0l0ZW1Hcm91cD4NCi0gIDxJ
dGVtR3JvdXA+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iQnVmZmVyLmNwcCI+DQotICAgICAg
PEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iQ29udGV4dC5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZp
bGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGNvbW1vblxkZWJ1Zy5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0
ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkZlbmNlLmNw
cCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBp
bGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iRmxvYXQxNlRvRmxvYXQzMi5jcHAiPg0KLSAg
ICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9IkZyYW1lYnVmZmVyLmNwcCI+DQotICAgICAgPEZpbHRlcj5T
b3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iSGFuZGxlQWxsb2NhdG9yLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmls
ZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
bGliR0xFU3YyLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0g
ICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0ibWFpbi5jcHAiPg0KLSAg
ICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9IlByb2dyYW0uY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJj
ZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSJQcm9ncmFtQmluYXJ5LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0Zp
bHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iUXVlcnku
Y3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29t
cGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxjb21tb25cUmVmQ291bnRPYmplY3Qu
Y3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29t
cGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJSZW5kZXJidWZmZXIuY3BwIj4NCi0gICAg
ICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSJSZXNvdXJjZU1hbmFnZXIuY3BwIj4NCi0gICAgICA8RmlsdGVy
PlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSJTaGFkZXIuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmls
dGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJUZXh0dXJl
LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENv
bXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0idXRpbGl0aWVzLmNwcCI+DQotICAgICAg
PEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcSW1hZ2UuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNv
dXJjZSBGaWxlc1xSZW5kZXJlcjwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxUZXh0dXJlU3RvcmFnZS5jcHAiPg0KLSAgICAgIDxG
aWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFJlbmRlcmVyLmNwcCI+DQotICAgICAg
PEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+
DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cdGhpcmRfcGFydHlcbXVybXVyaGFzaFxNdXJt
dXJIYXNoMy5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+VGhpcmQgUGFydHlcTXVybXVySGFzaDwvRmls
dGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJl
clxJbmRleERhdGFNYW5hZ2VyLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVu
ZGVyZXI8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0icmVuZGVyZXJcVmVydGV4RGF0YU1hbmFnZXIuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJj
ZSBGaWxlc1xSZW5kZXJlcjwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSJyZW5kZXJlclxJbWFnZS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+UmVuZGVy
ZXI8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
cmVuZGVyZXJcSW1hZ2VTU0UyLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVu
ZGVyZXI8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0icmVuZGVyZXJcVmVydGV4QnVmZmVyLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmls
ZXNcUmVuZGVyZXI8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0icmVuZGVyZXJcSW5kZXhCdWZmZXIuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJj
ZSBGaWxlc1xSZW5kZXJlcjwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSJVbmlmb3JtLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8
L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVu
ZGVyZXJcQnVmZmVyU3RvcmFnZS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJl
bmRlcmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9InJlbmRlcmVyXEJ1ZmZlclN0b3JhZ2UxMS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNl
IEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcRmVuY2UxMS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291
cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcSW1hZ2UxMS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+
U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcSW5kZXhCdWZmZXIxMS5jcHAiPg0KLSAgICAg
IDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBp
bGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcUXVlcnkxMS5jcHAiPg0KLSAg
ICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbENv
bXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcUmVuZGVyZXIxMS5jcHAi
Pg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAg
PC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJccmVuZGVyZXIx
MV91dGlscy5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0Zp
bHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVy
ZXJcUmVuZGVyVGFyZ2V0MTEuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5k
ZXJlcjExPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9InJlbmRlcmVyXFNoYWRlckV4ZWN1dGFibGUxMS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291
cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcU3dhcENoYWluMTEuY3BwIj4NCi0gICAgICA8Rmls
dGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFRleHR1cmVTdG9yYWdlMTEuY3BwIj4N
Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+DQotICAgIDwv
Q2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFZlcnRleEJ1ZmZl
cjExLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVy
Pg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxC
dWZmZXJTdG9yYWdlOS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVy
OTwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJy
ZW5kZXJlclxGZW5jZTkuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJl
cjk8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
cmVuZGVyZXJcSW1hZ2U5LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVy
ZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
InJlbmRlcmVyXEluZGV4QnVmZmVyOS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVz
XFJlbmRlcmVyOTwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSJyZW5kZXJlclxRdWVyeTkuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxl
c1xSZW5kZXJlcjk8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0icmVuZGVyZXJcUmVuZGVyZXI5LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2Ug
RmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9InJlbmRlcmVyXHJlbmRlcmVyOV91dGlscy5jcHAiPg0KLSAgICAgIDxGaWx0
ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxSZW5kZXJUYXJnZXQ5LmNwcCI+DQotICAg
ICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xDb21w
aWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFNoYWRlckV4ZWN1dGFibGU5
LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQot
ICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFN3YXBD
aGFpbjkuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRl
cj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJc
VGV4dHVyZVN0b3JhZ2U5LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVy
ZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
InJlbmRlcmVyXFZlcnRleEJ1ZmZlcjkuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxl
c1xSZW5kZXJlcjk8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0icmVuZGVyZXJcQmxpdC5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVz
XFJlbmRlcmVyOTwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSJyZW5kZXJlclxJbnB1dExheW91dENhY2hlLmNwcCI+DQotICAgICAgPEZpbHRlcj5T
b3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxSZW5kZXJTdGF0ZUNhY2hlLmNwcCI+DQotICAg
ICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPg0KLSAgICA8L0NsQ29t
cGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxWZXJ0ZXhEZWNsYXJhdGlv
bkNhY2hlLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI5PC9GaWx0
ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InByZWNvbXBp
bGVkLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9D
bENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcSW5kZXhSYW5nZUNh
Y2hlLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI8L0ZpbHRlcj4N
Ci0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cY29tbW9uXGV2
ZW50X3RyYWNlci5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQot
ICAgIDwvQ2xDb21waWxlPg0KLSAgPC9JdGVtR3JvdXA+DQotICA8SXRlbUdyb3VwPg0KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9IkJpbmFyeVN0cmVhbS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRl
ciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSJCdWZmZXIuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0g
ICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iQ29udGV4dC5oIj4NCi0g
ICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSJGZW5jZS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBG
aWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSJGcmFtZWJ1ZmZlci5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0K
LSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRl
XEdMRVMyXGdsMi5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAg
ICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXEdM
RVMyXGdsMmV4dC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAg
ICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXEdM
RVMyXGdsMnBsYXRmb3JtLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+
DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkhhbmRsZUFsbG9j
YXRvci5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0Ns
SW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJtYWluLmgiPg0KLSAgICAgIDxGaWx0
ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Im1hdGh1dGlsLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9G
aWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlByb2dy
YW0uaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbElu
Y2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iUHJvZ3JhbUJpbmFyeS5oIj4NCi0gICAg
ICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSJRdWVyeS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxl
czwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
Llxjb21tb25cUmVmQ291bnRPYmplY3QuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8
L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iUmVu
ZGVyYnVmZmVyLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAg
IDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlc291cmNlLmgiPg0KLSAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlJlc291cmNlTWFuYWdlci5oIj4NCi0gICAgICA8RmlsdGVy
PkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSJTaGFkZXIuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRl
cj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iVGV4dHVyZS5o
Ij4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVk
ZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJ1dGlsaXRpZXMuaCI+DQotICAgICAgPEZpbHRl
cj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cY29tbW9uXHZlcnNpb24uaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIg
RmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iYW5nbGV0eXBlcy5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0K
LSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx0aGlyZF9wYXJ0
eVxtdXJtdXJoYXNoXE11cm11ckhhc2gzLmgiPg0KLSAgICAgIDxGaWx0ZXI+VGhpcmQgUGFydHlc
TXVybXVySGFzaDwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSJVbmlmb3JtLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+
DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXHNo
YWRlcnNcY29tcGlsZWRccGFzc3Rocm91Z2gxMXZzLmgiPg0KLSAgICAgIDxGaWx0ZXI+U2hhZGVy
c1xDb21waWxlZDwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVkXHBhc3N0aHJvdWdocHMuaCI+DQotICAg
ICAgPEZpbHRlcj5TaGFkZXJzXENvbXBpbGVkPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRcc3RhbmRh
cmR2cy5oIj4NCi0gICAgICA8RmlsdGVyPlNoYWRlcnNcQ29tcGlsZWQ8L0ZpbHRlcj4NCi0gICAg
PC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xj
b21waWxlZFxjb21wb25lbnRtYXNrcHMuaCI+DQotICAgICAgPEZpbHRlcj5TaGFkZXJzXENvbXBp
bGVkPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
InJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRcZmxpcHl2cy5oIj4NCi0gICAgICA8RmlsdGVyPlNo
YWRlcnNcQ29tcGlsZWQ8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xjb21waWxlZFxsdW1pbmFuY2Vwcy5oIj4NCi0g
ICAgICA8RmlsdGVyPlNoYWRlcnNcQ29tcGlsZWQ8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+
DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xjb21waWxlZFxwYXNz
dGhyb3VnaHJnYmExMXBzLmgiPg0KLSAgICAgIDxGaWx0ZXI+U2hhZGVyc1xDb21waWxlZDwvRmls
dGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJl
clxzaGFkZXJzXGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiMTFwcy5oIj4NCi0gICAgICA8RmlsdGVy
PlNoYWRlcnNcQ29tcGlsZWQ8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xjb21waWxlZFxwYXNzdGhyb3VnaGx1bTEx
cHMuaCI+DQotICAgICAgPEZpbHRlcj5TaGFkZXJzXENvbXBpbGVkPC9GaWx0ZXI+DQotICAgIDwv
Q2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXHNoYWRlcnNcY29t
cGlsZWRccGFzc3Rocm91Z2hsdW1hbHBoYTExcHMuaCI+DQotICAgICAgPEZpbHRlcj5TaGFkZXJz
XENvbXBpbGVkPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9InJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRcY2xlYXIxMXZzLmgiPg0KLSAgICAgIDxG
aWx0ZXI+U2hhZGVyc1xDb21waWxlZDwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVkXGNsZWFybXVsdGlw
bGUxMXBzLmgiPg0KLSAgICAgIDxGaWx0ZXI+U2hhZGVyc1xDb21waWxlZDwvRmlsdGVyPg0KLSAg
ICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJz
XGNvbXBpbGVkXGNsZWFyc2luZ2xlMTFwcy5oIj4NCi0gICAgICA8RmlsdGVyPlNoYWRlcnNcQ29t
cGlsZWQ8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cY29tbW9uXHN5c3RlbS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmls
dGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxjb21t
b25cZGVidWcuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAg
PC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcQnVmZmVyU3Rv
cmFnZS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjwvRmlsdGVyPg0K
LSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxGZW5j
ZUltcGwuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI8L0ZpbHRlcj4N
Ci0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcZ2Vu
ZXJhdGVtaXAuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI8L0ZpbHRl
cj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJc
SW1hZ2UuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI8L0ZpbHRlcj4N
Ci0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcSW5k
ZXhCdWZmZXIuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI8L0ZpbHRl
cj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJc
SW5kZXhEYXRhTWFuYWdlci5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJl
cjwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJy
ZW5kZXJlclxRdWVyeUltcGwuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVy
ZXI8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
cmVuZGVyZXJcUmVuZGVyZXIuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVy
ZXI8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
cmVuZGVyZXJcUmVuZGVyVGFyZ2V0LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJl
bmRlcmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9InJlbmRlcmVyXFNoYWRlckV4ZWN1dGFibGUuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIg
RmlsZXNcUmVuZGVyZXI8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0icmVuZGVyZXJcU3dhcENoYWluLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVy
IEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9InJlbmRlcmVyXFRleHR1cmVTdG9yYWdlLmgiPg0KLSAgICAgIDxGaWx0ZXI+
SGVhZGVyIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFZlcnRleEJ1ZmZlci5oIj4NCi0gICAgICA8Rmls
dGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclx2ZXJ0ZXhjb252ZXJzaW9uLmgiPg0KLSAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNs
dWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFZlcnRleERhdGFNYW5hZ2Vy
LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAg
IDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEJ1ZmZlclN0
b3JhZ2UxMS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjExPC9GaWx0
ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVy
XEluZGV4QnVmZmVyMTEuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIx
MTwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJy
ZW5kZXJlclxRdWVyeTExLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVy
MTE8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
cmVuZGVyZXJcUmVuZGVyZXIxMS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5k
ZXJlcjExPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9InJlbmRlcmVyXFJlbmRlclRhcmdldDExLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZp
bGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0icmVuZGVyZXJcU2hhZGVyRXhlY3V0YWJsZTExLmgiPg0KLSAgICAgIDxGaWx0
ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcU3dhcENoYWluMTEuaCI+DQotICAgICAg
PEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVk
ZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxUZXh0dXJlU3RvcmFnZTExLmgi
Pg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAg
PC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcVmVydGV4QnVm
ZmVyMTEuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVy
Pg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxC
dWZmZXJTdG9yYWdlOS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjk8
L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVu
ZGVyZXJcRmVuY2U5LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyOTwv
RmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5k
ZXJlclxJbWFnZTkuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9G
aWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRl
cmVyXEluZGV4QnVmZmVyOS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJl
cjk8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
cmVuZGVyZXJcUXVlcnk5LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVy
OTwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJy
ZW5kZXJlclxSZW5kZXJlcjkuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVy
ZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
InJlbmRlcmVyXHJlbmRlcmVyOV91dGlscy5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxl
c1xSZW5kZXJlcjk8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0icmVuZGVyZXJcUmVuZGVyVGFyZ2V0OS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRl
ciBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcU2hhZGVyRXhlY3V0YWJsZTkuaCI+DQotICAgICAgPEZp
bHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFN3YXBDaGFpbjkuaCI+DQotICAgICAg
PEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRl
Pg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFRleHR1cmVTdG9yYWdlOS5oIj4N
Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4NCi0gICAgPC9D
bEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcVmVydGV4QnVmZmVy
OS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4NCi0g
ICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcRmVuY2Ux
MS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+DQot
ICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEltYWdl
MTEuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPg0K
LSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxyZW5k
ZXJlcjExX3V0aWxzLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyMTE8
L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVu
ZGVyZXJcRmVuY2U5LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyXFJl
bmRlcmVyOTwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSJyZW5kZXJlclxRdWVyeTExLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJl
bmRlcmVyXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcQmxpdC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBG
aWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0icmVuZGVyZXJcU2hhZGVyQ2FjaGUuaCI+DQotICAgICAgPEZpbHRlcj5IZWFk
ZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXElucHV0TGF5b3V0Q2FjaGUuaCI+DQotICAgICAgPEZp
bHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxSZW5kZXJTdGF0ZUNhY2hlLmgiPg0K
LSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9D
bEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcVmVydGV4RGVjbGFy
YXRpb25DYWNoZS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjk8L0Zp
bHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iY29uc3Rh
bnRzLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJ
bmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InByZWNvbXBpbGVkLmgiPg0KLSAgICAg
IDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEluZGV4UmFuZ2VDYWNoZS5oIj4NCi0gICAgICA8
RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxjb21tb25cZXZlbnRfdHJhY2VyLmgiPg0KLSAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHRoaXJkX3BhcnR5XHRyYWNlX2V2ZW50XHRyYWNlX2V2
ZW50LmgiPg0KLSAgICAgIDxGaWx0ZXI+VGhpcmQgUGFydHlcdHJhY2VfZXZlbnQ8L0ZpbHRlcj4N
Ci0gICAgPC9DbEluY2x1ZGU+DQotICA8L0l0ZW1Hcm91cD4NCi0gIDxJdGVtR3JvdXA+DQotICAg
IDxOb25lIEluY2x1ZGU9InJlbmRlcmVyXHNoYWRlcnNcQmxpdC5wcyI+DQotICAgICAgPEZpbHRl
cj5TaGFkZXJzPC9GaWx0ZXI+DQotICAgIDwvTm9uZT4NCi0gICAgPE5vbmUgSW5jbHVkZT0icmVu
ZGVyZXJcc2hhZGVyc1xCbGl0LnZzIj4NCi0gICAgICA8RmlsdGVyPlNoYWRlcnM8L0ZpbHRlcj4N
Ci0gICAgPC9Ob25lPg0KLSAgICA8Tm9uZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXGdlbmVy
YXRlX3NoYWRlcnMuYmF0Ij4NCi0gICAgICA8RmlsdGVyPlNoYWRlcnM8L0ZpbHRlcj4NCi0gICAg
PC9Ob25lPg0KLSAgICA8Tm9uZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXFBhc3N0aHJvdWdo
MTEuaGxzbCI+DQotICAgICAgPEZpbHRlcj5TaGFkZXJzPC9GaWx0ZXI+DQotICAgIDwvTm9uZT4N
Ci0gICAgPE5vbmUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xDbGVhcjExLmhsc2wiPg0KLSAg
ICAgIDxGaWx0ZXI+U2hhZGVyczwvRmlsdGVyPg0KLSAgICA8L05vbmU+DQotICAgIDxOb25lIElu
Y2x1ZGU9ImxpYkdMRVN2Mi5kZWYiIC8+DQotICA8L0l0ZW1Hcm91cD4NCi0gIDxJdGVtR3JvdXA+
DQotICAgIDxSZXNvdXJjZUNvbXBpbGUgSW5jbHVkZT0ibGliR0xFU3YyLnJjIiAvPg0KLSAgPC9J
dGVtR3JvdXA+DQotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21haW4uY3BwCmluZGV4IDZkN2Ey
NDEzNDBmOWU3Yjk0N2IzMTc5NTg5YjY1MzJlZTEwNzNiY2MuLjUwZTI1OTMzMjhkMTg4YzEzMWVk
ZWZmZmFjMWQ2NGY2NmU3YWZkNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvbWFpbi5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9tYWluLmNwcApAQCAtMTMsNiArMTMsNDAgQEAKIAogc3RhdGljIERXT1JEIGN1
cnJlbnRUTFMgPSBUTFNfT1VUX09GX0lOREVYRVM7CiAKK25hbWVzcGFjZSBnbAoreworCitDdXJy
ZW50ICpBbGxvY2F0ZUN1cnJlbnQoKQoreworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVu
dCopTG9jYWxBbGxvYyhMUFRSLCBzaXplb2YoQ3VycmVudCkpOworCisgICAgaWYgKCFjdXJyZW50
KQorICAgIHsKKyAgICAgICAgRVJSKCJDb3VsZCBub3QgYWxsb2NhdGUgdGhyZWFkIGxvY2FsIHN0
b3JhZ2UuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIEFTU0VSVChjdXJy
ZW50VExTICE9IFRMU19PVVRfT0ZfSU5ERVhFUyk7CisgICAgVGxzU2V0VmFsdWUoY3VycmVudFRM
UywgY3VycmVudCk7CisKKyAgICBjdXJyZW50LT5jb250ZXh0ID0gTlVMTDsKKyAgICBjdXJyZW50
LT5kaXNwbGF5ID0gTlVMTDsKKworICAgIHJldHVybiBjdXJyZW50OworfQorCit2b2lkIERlYWxs
b2NhdGVDdXJyZW50KCkKK3sKKyAgICB2b2lkICpjdXJyZW50ID0gVGxzR2V0VmFsdWUoY3VycmVu
dFRMUyk7CisKKyAgICBpZiAoY3VycmVudCkKKyAgICB7CisgICAgICAgIExvY2FsRnJlZSgoSExP
Q0FMKWN1cnJlbnQpOworICAgIH0KK30KKworfQorCiBleHRlcm4gIkMiIEJPT0wgV0lOQVBJIERs
bE1haW4oSElOU1RBTkNFIGluc3RhbmNlLCBEV09SRCByZWFzb24sIExQVk9JRCByZXNlcnZlZCkK
IHsKICAgICBzd2l0Y2ggKHJlYXNvbikKQEAgLTI5LDM2ICs2MywxNyBAQCBleHRlcm4gIkMiIEJP
T0wgV0lOQVBJIERsbE1haW4oSElOU1RBTkNFIGluc3RhbmNlLCBEV09SRCByZWFzb24sIExQVk9J
RCByZXNlcnZlZAogICAgICAgICAvLyBGYWxsIHRocm91Z2h0IHRvIGluaXRpYWxpemUgaW5kZXgK
ICAgICAgIGNhc2UgRExMX1RIUkVBRF9BVFRBQ0g6CiAgICAgICAgIHsKLSAgICAgICAgICAgIGds
OjpDdXJyZW50ICpjdXJyZW50ID0gKGdsOjpDdXJyZW50KilMb2NhbEFsbG9jKExQVFIsIHNpemVv
ZihnbDo6Q3VycmVudCkpOwotCi0gICAgICAgICAgICBpZiAoY3VycmVudCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBUbHNTZXRWYWx1ZShjdXJyZW50VExTLCBjdXJyZW50KTsKLQot
ICAgICAgICAgICAgICAgIGN1cnJlbnQtPmNvbnRleHQgPSBOVUxMOwotICAgICAgICAgICAgICAg
IGN1cnJlbnQtPmRpc3BsYXkgPSBOVUxMOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZ2w6
OkFsbG9jYXRlQ3VycmVudCgpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgY2Fz
ZSBETExfVEhSRUFEX0RFVEFDSDoKICAgICAgICAgewotICAgICAgICAgICAgdm9pZCAqY3VycmVu
dCA9IFRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOwotCi0gICAgICAgICAgICBpZiAoY3VycmVudCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMb2NhbEZyZWUoKEhMT0NBTCljdXJyZW50
KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdsOjpEZWFsbG9jYXRlQ3VycmVudCgpOwog
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBETExfUFJPQ0VTU19ERVRBQ0g6
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHZvaWQgKmN1cnJlbnQgPSBUbHNHZXRWYWx1ZShjdXJy
ZW50VExTKTsKLQotICAgICAgICAgICAgaWYgKGN1cnJlbnQpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgTG9jYWxGcmVlKChITE9DQUwpY3VycmVudCk7Ci0gICAgICAgICAgICB9Ci0K
KyAgICAgICAgICAgIGdsOjpEZWFsbG9jYXRlQ3VycmVudCgpOwogICAgICAgICAgICAgVGxzRnJl
ZShjdXJyZW50VExTKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTcxLDEwICs4Niwy
MCBAQCBleHRlcm4gIkMiIEJPT0wgV0lOQVBJIERsbE1haW4oSElOU1RBTkNFIGluc3RhbmNlLCBE
V09SRCByZWFzb24sIExQVk9JRCByZXNlcnZlZAogCiBuYW1lc3BhY2UgZ2wKIHsKLXZvaWQgbWFr
ZUN1cnJlbnQoQ29udGV4dCAqY29udGV4dCwgZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1
cmZhY2UgKnN1cmZhY2UpCisKK0N1cnJlbnQgKkdldEN1cnJlbnREYXRhKCkKIHsKICAgICBDdXJy
ZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOwogCisgICAg
Ly8gQU5HTEUgaXNzdWUgNDg4OiB3aGVuIHRoZSBkbGwgaXMgbG9hZGVkIGFmdGVyIHRocmVhZCBp
bml0aWFsaXphdGlvbiwKKyAgICAvLyB0aHJlYWQgbG9jYWwgc3RvcmFnZSAoY3VycmVudCkgbWln
aHQgbm90IGV4aXN0IHlldC4KKyAgICByZXR1cm4gKGN1cnJlbnQgPyBjdXJyZW50IDogQWxsb2Nh
dGVDdXJyZW50KCkpOworfQorCit2b2lkIG1ha2VDdXJyZW50KENvbnRleHQgKmNvbnRleHQsIGVn
bDo6RGlzcGxheSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKQoreworICAgIEN1cnJl
bnQgKmN1cnJlbnQgPSBHZXRDdXJyZW50RGF0YSgpOworCiAgICAgY3VycmVudC0+Y29udGV4dCA9
IGNvbnRleHQ7CiAgICAgY3VycmVudC0+ZGlzcGxheSA9IGRpc3BsYXk7CiAKQEAgLTg2LDcgKzEx
MSw3IEBAIHZvaWQgbWFrZUN1cnJlbnQoQ29udGV4dCAqY29udGV4dCwgZWdsOjpEaXNwbGF5ICpk
aXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpCiAKIENvbnRleHQgKmdldENvbnRleHQoKQog
ewotICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRM
Uyk7CisgICAgQ3VycmVudCAqY3VycmVudCA9IEdldEN1cnJlbnREYXRhKCk7CiAKICAgICByZXR1
cm4gY3VycmVudC0+Y29udGV4dDsKIH0KQEAgLTExMiw3ICsxMzcsNyBAQCBDb250ZXh0ICpnZXRO
b25Mb3N0Q29udGV4dCgpCiAKIGVnbDo6RGlzcGxheSAqZ2V0RGlzcGxheSgpCiB7Ci0gICAgQ3Vy
cmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKyAgICBD
dXJyZW50ICpjdXJyZW50ID0gR2V0Q3VycmVudERhdGEoKTsKIAogICAgIHJldHVybiBjdXJyZW50
LT5kaXNwbGF5OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9tYWluLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21h
aW4uaAppbmRleCAxOTZhZmFlYWI2N2U3NDJmNzkyM2Q5MWRiMDU2MzFjZTlkOTNlMGRkLi5iNDEz
ZjIzMjBjMTUxZmQ3MjBhM2ZmMzhkYjRhZGY2MDUyZmJiZjg2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21haW4uaAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21haW4uaApAQCAtMTAsNyArMTAsNiBAQAogI2RlZmlu
ZSBMSUJHTEVTVjJfTUFJTl9IXwogCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0jaW5jbHVk
ZSAiY29tbW9uL3N5c3RlbS5oIgogCiBuYW1lc3BhY2UgZWdsCiB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21hdGh1dGlsLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21hdGh1dGlsLmgKaW5kZXggYmI0OGI5NGVhZjcx
YTQ5ZDA1MzEyYzEzOWI0ZTU3NzJiYmI4YTFlOC4uZjkwMjEzMWEzNTIyMWJmNjBmNzcyMDJkOTlh
YzBiOGRhNjE4MTJiYiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9tYXRodXRpbC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvbWF0aHV0aWwuaApAQCAtMTEsNyArMTEsNiBAQAogCiAjaW5jbHVkZSA8aW50cmluLmg+
CiAKLSNpbmNsdWRlICJjb21tb24vc3lzdGVtLmgiCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgi
CiAKIG5hbWVzcGFjZSBnbApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9wcmVjb21waWxlZC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9wcmVjb21waWxlZC5oCmluZGV4IDU4YWQxODE4NzRiMzJmYTVjMzM0ZjM2MWE0NzY2
OTdkMzA2ZDMyNGUuLjRiOWFjYzc5OWRjMWYzNWJkNDZjZDRlOGY4NGEzMzUyOWU1ZDNlYzIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcHJlY29tcGls
ZWQuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3ByZWNvbXBp
bGVkLmgKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxkM2Q5Lmg+CiAjaW5jbHVkZSA8ZDNk
MTEuaD4KICNpbmNsdWRlIDxkeGdpLmg+CisjaW5jbHVkZSA8ZHhnaTFfMi5oPgogI2luY2x1ZGUg
PGQzZGNvbXBpbGVyLmg+CiAKICNpZmRlZiBfTVNDX1ZFUgpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9CbGl0LmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQmxpdC5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhM2NlMzljNjMyNGIwODI0MjZjOTI2YTc1YmYwNTlhODdh
NWQ5ZDIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9CbGl0LmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDU5NSArMCwwIEBACi0jaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLS8vCi0KLS8vIEJsaXQuY3BwOiBTdXJmYWNlIGNvcHkgdXRpbGl0eSBjbGFz
cy4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9CbGl0LmgiCi0KLSNpbmNsdWRlICJs
aWJHTEVTdjIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9yZW5kZXJlcjlf
dXRpbHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0b3JhZ2U5Lmgi
Ci0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldDkuaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXI5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0Zy
YW1lYnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgotCi1uYW1l
c3BhY2UKLXsKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9z
dGFuZGFyZHZzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGls
ZWQvZmxpcHl2cy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBp
bGVkL3Bhc3N0aHJvdWdocHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVy
cy9jb21waWxlZC9sdW1pbmFuY2Vwcy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9z
aGFkZXJzL2NvbXBpbGVkL2NvbXBvbmVudG1hc2twcy5oIgotCi1jb25zdCBCWVRFKiBjb25zdCBn
X3NoYWRlckNvZGVbXSA9Ci17Ci0gICAgZ192czIwX3N0YW5kYXJkdnMsCi0gICAgZ192czIwX2Zs
aXB5dnMsCi0gICAgZ19wczIwX3Bhc3N0aHJvdWdocHMsCi0gICAgZ19wczIwX2x1bWluYW5jZXBz
LAotICAgIGdfcHMyMF9jb21wb25lbnRtYXNrcHMKLX07Ci0KLWNvbnN0IHNpemVfdCBnX3NoYWRl
clNpemVbXSA9Ci17Ci0gICAgc2l6ZW9mKGdfdnMyMF9zdGFuZGFyZHZzKSwKLSAgICBzaXplb2Yo
Z192czIwX2ZsaXB5dnMpLAotICAgIHNpemVvZihnX3BzMjBfcGFzc3Rocm91Z2hwcyksCi0gICAg
c2l6ZW9mKGdfcHMyMF9sdW1pbmFuY2VwcyksCi0gICAgc2l6ZW9mKGdfcHMyMF9jb21wb25lbnRt
YXNrcHMpCi19OwotfQotCi1uYW1lc3BhY2UgcngKLXsKLUJsaXQ6OkJsaXQocng6OlJlbmRlcmVy
OSAqcmVuZGVyZXIpCi0gIDogbVJlbmRlcmVyKHJlbmRlcmVyKSwgbVF1YWRWZXJ0ZXhCdWZmZXIo
TlVMTCksIG1RdWFkVmVydGV4RGVjbGFyYXRpb24oTlVMTCksIG1TYXZlZFN0YXRlQmxvY2soTlVM
TCksIG1TYXZlZFJlbmRlclRhcmdldChOVUxMKSwgbVNhdmVkRGVwdGhTdGVuY2lsKE5VTEwpCi17
Ci0gICAgaW5pdEdlb21ldHJ5KCk7Ci0gICAgbWVtc2V0KG1Db21waWxlZFNoYWRlcnMsIDAsIHNp
emVvZihtQ29tcGlsZWRTaGFkZXJzKSk7Ci19Ci0KLUJsaXQ6On5CbGl0KCkKLXsKLSAgICBpZiAo
bVNhdmVkU3RhdGVCbG9jaykgbVNhdmVkU3RhdGVCbG9jay0+UmVsZWFzZSgpOwotICAgIGlmICht
UXVhZFZlcnRleEJ1ZmZlcikgbVF1YWRWZXJ0ZXhCdWZmZXItPlJlbGVhc2UoKTsKLSAgICBpZiAo
bVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbikgbVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbi0+UmVsZWFzZSgp
OwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTSEFERVJfQ09VTlQ7IGkrKykKLSAgICB7Ci0g
ICAgICAgIGlmIChtQ29tcGlsZWRTaGFkZXJzW2ldKQotICAgICAgICB7Ci0gICAgICAgICAgICBt
Q29tcGlsZWRTaGFkZXJzW2ldLT5SZWxlYXNlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZv
aWQgQmxpdDo6aW5pdEdlb21ldHJ5KCkKLXsKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgcXVhZFtd
ID0KLSAgICB7Ci0gICAgICAgIC0xLCAtMSwKLSAgICAgICAgLTEsICAxLAotICAgICAgICAgMSwg
LTEsCi0gICAgICAgICAxLCAgMQotICAgIH07Ci0KLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZp
Y2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZp
Y2UtPkNyZWF0ZVZlcnRleEJ1ZmZlcihzaXplb2YocXVhZCksIEQzRFVTQUdFX1dSSVRFT05MWSwg
MCwgRDNEUE9PTF9ERUZBVUxULCAmbVF1YWRWZXJ0ZXhCdWZmZXIsIE5VTEwpOwotCi0gICAgaWYg
KEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJf
T1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotCi0gICAgdm9pZCAqbG9j
a1B0ciA9IE5VTEw7Ci0gICAgcmVzdWx0ID0gbVF1YWRWZXJ0ZXhCdWZmZXItPkxvY2soMCwgMCwg
JmxvY2tQdHIsIDApOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpIHx8IGxvY2tQdHIgPT0gTlVM
TCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1P
UlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAgIG1lbWNweShsb2NrUHRyLCBxdWFkLCBz
aXplb2YocXVhZCkpOwotICAgIG1RdWFkVmVydGV4QnVmZmVyLT5VbmxvY2soKTsKLQotICAgIHN0
YXRpYyBjb25zdCBEM0RWRVJURVhFTEVNRU5UOSBlbGVtZW50c1tdID0KLSAgICB7Ci0gICAgICAg
IHsgMCwgMCwgRDNEREVDTFRZUEVfRkxPQVQyLCBEM0RERUNMTUVUSE9EX0RFRkFVTFQsIEQzRERF
Q0xVU0FHRV9QT1NJVElPTiwgMCB9LAotICAgICAgICBEM0RERUNMX0VORCgpCi0gICAgfTsKLQot
ICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVmVydGV4RGVjbGFyYXRpb24oZWxlbWVudHMsICZt
UXVhZFZlcnRleERlY2xhcmF0aW9uKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOwotICAgIH0KLX0KLQotdGVtcGxhdGUgPGNsYXNzIEQzRFNoYWRlclR5cGU+Ci1i
b29sIEJsaXQ6OnNldFNoYWRlcihTaGFkZXJJZCBzb3VyY2UsIGNvbnN0IGNoYXIgKnByb2ZpbGUs
Ci0gICAgICAgICAgICAgICAgICAgICBEM0RTaGFkZXJUeXBlICoocng6OlJlbmRlcmVyOTo6KmNy
ZWF0ZVNoYWRlcikoY29uc3QgRFdPUkQgKiwgc2l6ZV90IGxlbmd0aCksCi0gICAgICAgICAgICAg
ICAgICAgICBIUkVTVUxUIChXSU5BUEkgSURpcmVjdDNERGV2aWNlOTo6KnNldFNoYWRlcikoRDNE
U2hhZGVyVHlwZSopKQotewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJl
ci0+Z2V0RGV2aWNlKCk7Ci0KLSAgICBEM0RTaGFkZXJUeXBlICpzaGFkZXI7Ci0KLSAgICBpZiAo
bUNvbXBpbGVkU2hhZGVyc1tzb3VyY2VdICE9IE5VTEwpCi0gICAgewotICAgICAgICBzaGFkZXIg
PSBzdGF0aWNfY2FzdDxEM0RTaGFkZXJUeXBlKj4obUNvbXBpbGVkU2hhZGVyc1tzb3VyY2VdKTsK
LSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgY29uc3QgQllURSogc2hhZGVyQ29kZSA9
IGdfc2hhZGVyQ29kZVtzb3VyY2VdOwotICAgICAgICBzaXplX3Qgc2hhZGVyU2l6ZSA9IGdfc2hh
ZGVyU2l6ZVtzb3VyY2VdOwotCi0gICAgICAgIHNoYWRlciA9IChtUmVuZGVyZXItPipjcmVhdGVT
aGFkZXIpKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRFdPUkQqPihzaGFkZXJDb2RlKSwgc2hhZGVy
U2l6ZSk7Ci0gICAgICAgIGlmICghc2hhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIo
IkZhaWxlZCB0byBjcmVhdGUgc2hhZGVyIGZvciBibGl0IG9wZXJhdGlvbiIpOwotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgbUNvbXBpbGVkU2hhZGVyc1tz
b3VyY2VdID0gc2hhZGVyOwotICAgIH0KLQotICAgIEhSRVNVTFQgaHIgPSAoZGV2aWNlLT4qc2V0
U2hhZGVyKShzaGFkZXIpOwotCi0gICAgaWYgKEZBSUxFRChocikpCi0gICAgewotICAgICAgICBF
UlIoIkZhaWxlZCB0byBzZXQgc2hhZGVyIGZvciBibGl0IG9wZXJhdGlvbiIpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQmxpdDo6
c2V0VmVydGV4U2hhZGVyKFNoYWRlcklkIHNoYWRlcikKLXsKLSAgICByZXR1cm4gc2V0U2hhZGVy
PElEaXJlY3QzRFZlcnRleFNoYWRlcjk+KHNoYWRlciwgInZzXzJfMCIsICZyeDo6UmVuZGVyZXI5
OjpjcmVhdGVWZXJ0ZXhTaGFkZXIsICZJRGlyZWN0M0REZXZpY2U5OjpTZXRWZXJ0ZXhTaGFkZXIp
OwotfQotCi1ib29sIEJsaXQ6OnNldFBpeGVsU2hhZGVyKFNoYWRlcklkIHNoYWRlcikKLXsKLSAg
ICByZXR1cm4gc2V0U2hhZGVyPElEaXJlY3QzRFBpeGVsU2hhZGVyOT4oc2hhZGVyLCAicHNfMl8w
IiwgJnJ4OjpSZW5kZXJlcjk6OmNyZWF0ZVBpeGVsU2hhZGVyLCAmSURpcmVjdDNERGV2aWNlOTo6
U2V0UGl4ZWxTaGFkZXIpOwotfQotCi1SRUNUIEJsaXQ6OmdldFN1cmZhY2VSZWN0KElEaXJlY3Qz
RFN1cmZhY2U5ICpzdXJmYWNlKSBjb25zdAotewotICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOwot
ICAgIHN1cmZhY2UtPkdldERlc2MoJmRlc2MpOwotCi0gICAgUkVDVCByZWN0OwotICAgIHJlY3Qu
bGVmdCA9IDA7Ci0gICAgcmVjdC50b3AgPSAwOwotICAgIHJlY3QucmlnaHQgPSBkZXNjLldpZHRo
OwotICAgIHJlY3QuYm90dG9tID0gZGVzYy5IZWlnaHQ7Ci0KLSAgICByZXR1cm4gcmVjdDsKLX0K
LQotYm9vbCBCbGl0Ojpib3hGaWx0ZXIoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgSURpcmVj
dDNEU3VyZmFjZTkgKmRlc3QpCi17Ci0gICAgSURpcmVjdDNEVGV4dHVyZTkgKnRleHR1cmUgPSBj
b3B5U3VyZmFjZVRvVGV4dHVyZShzb3VyY2UsIGdldFN1cmZhY2VSZWN0KHNvdXJjZSkpOwotICAg
IGlmICghdGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0g
ICAgc2F2ZVN0YXRlKCk7Ci0KLSAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwgdGV4dHVyZSk7Ci0g
ICAgZGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgZGVzdCk7Ci0KLSAgICBzZXRWZXJ0ZXhTaGFk
ZXIoU0hBREVSX1ZTX1NUQU5EQVJEKTsKLSAgICBzZXRQaXhlbFNoYWRlcihTSEFERVJfUFNfUEFT
U1RIUk9VR0gpOwotCi0gICAgc2V0Q29tbW9uQmxpdFN0YXRlKCk7Ci0gICAgZGV2aWNlLT5TZXRT
YW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NSU5GSUxURVIsIEQzRFRFWEZfTElORUFSKTsKLSAgICBk
ZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01BR0ZJTFRFUiwgRDNEVEVYRl9MSU5F
QVIpOwotCi0gICAgc2V0Vmlld3BvcnQoZ2V0U3VyZmFjZVJlY3QoZGVzdCksIDAsIDApOwotCi0g
ICAgcmVuZGVyKCk7Ci0KLSAgICB0ZXh0dXJlLT5SZWxlYXNlKCk7Ci0KLSAgICByZXN0b3JlU3Rh
dGUoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEJsaXQ6OmNvcHkoZ2w6OkZyYW1l
YnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RG
b3JtYXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlMkQgKnN0b3JhZ2UsIEdMaW50IGxldmVsKQotewotICAgIFJlbmRlclRhcmdldDkgKnJlbmRl
clRhcmdldCA9IE5VTEw7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSA9IE5VTEw7Ci0g
ICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3Ji
dWZmZXIoMCk7Ci0KLSAgICBpZiAoY29sb3JidWZmZXIpCi0gICAgewotICAgICAgICByZW5kZXJU
YXJnZXQgPSBSZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShjb2xvcmJ1ZmZlci0+Z2V0
UmVuZGVyVGFyZ2V0KCkpOwotICAgIH0KLSAgICAKLSAgICBpZiAocmVuZGVyVGFyZ2V0KQotICAg
IHsKLSAgICAgICAgc291cmNlID0gcmVuZGVyVGFyZ2V0LT5nZXRTdXJmYWNlKCk7Ci0gICAgfQot
Ci0gICAgaWYgKCFzb3VyY2UpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2
ZSB0aGUgcmVuZGVyIHRhcmdldC4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgVGV4dHVyZVN0b3JhZ2U5XzJEICpzdG9y
YWdlOSA9IFRleHR1cmVTdG9yYWdlOV8yRDo6bWFrZVRleHR1cmVTdG9yYWdlOV8yRChzdG9yYWdl
LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJm
YWNlID0gc3RvcmFnZTktPmdldFN1cmZhY2VMZXZlbChsZXZlbCwgdHJ1ZSk7Ci0gICAgYm9vbCBy
ZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgCi0gICAgaWYgKGRlc3RTdXJmYWNlKQotICAgIHsKLSAg
ICAgICAgcmVzdWx0ID0gY29weShzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RGb3JtYXQsIHhvZmZz
ZXQsIHlvZmZzZXQsIGRlc3RTdXJmYWNlKTsKLSAgICAgICAgZGVzdFN1cmZhY2UtPlJlbGVhc2Uo
KTsKLSAgICB9Ci0KLSAgICBzb3VyY2UtPlJlbGVhc2UoKTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1ib29sIEJsaXQ6OmNvcHkoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3Qg
UkVDVCAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwpCi17Ci0gICAgUmVuZGVyVGFyZ2V0OSAqcmVuZGVyVGFyZ2V0ID0g
TlVMTDsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlID0gTlVMTDsKLSAgICBnbDo6UmVu
ZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigwKTsK
LQotICAgIGlmIChjb2xvcmJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIHJlbmRlclRhcmdldCA9IFJl
bmRlclRhcmdldDk6Om1ha2VSZW5kZXJUYXJnZXQ5KGNvbG9yYnVmZmVyLT5nZXRSZW5kZXJUYXJn
ZXQoKSk7Ci0gICAgfQotICAgIAotICAgIGlmIChyZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAg
ICBzb3VyY2UgPSByZW5kZXJUYXJnZXQtPmdldFN1cmZhY2UoKTsKLSAgICB9Ci0KLSAgICBpZiAo
IXNvdXJjZSkKLSAgICB7Ci0gICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5k
ZXIgdGFyZ2V0LiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlks
IGZhbHNlKTsKLSAgICB9Ci0KLSAgICBUZXh0dXJlU3RvcmFnZTlfQ3ViZSAqc3RvcmFnZTkgPSBU
ZXh0dXJlU3RvcmFnZTlfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlOV9DdWJlKHN0b3JhZ2UtPmdl
dFN0b3JhZ2VJbnN0YW5jZSgpKTsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdFN1cmZhY2Ug
PSBzdG9yYWdlOS0+Z2V0Q3ViZU1hcFN1cmZhY2UodGFyZ2V0LCBsZXZlbCwgdHJ1ZSk7Ci0gICAg
Ym9vbCByZXN1bHQgPSBmYWxzZTsKLQotICAgIGlmIChkZXN0U3VyZmFjZSkKLSAgICB7Ci0gICAg
ICAgIHJlc3VsdCA9IGNvcHkoc291cmNlLCBzb3VyY2VSZWN0LCBkZXN0Rm9ybWF0LCB4b2Zmc2V0
LCB5b2Zmc2V0LCBkZXN0U3VyZmFjZSk7Ci0gICAgICAgIGRlc3RTdXJmYWNlLT5SZWxlYXNlKCk7
Ci0gICAgfQotCi0gICAgc291cmNlLT5SZWxlYXNlKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotYm9vbCBCbGl0Ojpjb3B5KElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGNvbnN0IFJFQ1Qg
JnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCkKLXsKLSAgICBpZiAoIWRlc3QpCi0gICAgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2
aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLQotICAgIEQzRFNVUkZBQ0VfREVTQyBzb3Vy
Y2VEZXNjOwotICAgIEQzRFNVUkZBQ0VfREVTQyBkZXN0RGVzYzsKLSAgICBzb3VyY2UtPkdldERl
c2MoJnNvdXJjZURlc2MpOwotICAgIGRlc3QtPkdldERlc2MoJmRlc3REZXNjKTsKLQotICAgIGlm
IChzb3VyY2VEZXNjLkZvcm1hdCA9PSBkZXN0RGVzYy5Gb3JtYXQgJiYgZGVzdERlc2MuVXNhZ2Ug
JiBEM0RVU0FHRV9SRU5ERVJUQVJHRVQgJiYKLSAgICAgICAgZDNkOV9nbDo6SXNGb3JtYXRDaGFu
bmVsRXF1aXZhbGVudChkZXN0RGVzYy5Gb3JtYXQsIGRlc3RGb3JtYXQpKSAgIC8vIENhbiB1c2Ug
U3RyZXRjaFJlY3QKLSAgICB7Ci0gICAgICAgIFJFQ1QgZGVzdFJlY3QgPSB7eG9mZnNldCwgeW9m
ZnNldCwgeG9mZnNldCArIChzb3VyY2VSZWN0LnJpZ2h0IC0gc291cmNlUmVjdC5sZWZ0KSwgeW9m
ZnNldCArIChzb3VyY2VSZWN0LmJvdHRvbSAtIHNvdXJjZVJlY3QudG9wKX07Ci0gICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5TdHJldGNoUmVjdChzb3VyY2UsICZzb3VyY2VSZWN0LCBk
ZXN0LCAmZGVzdFJlY3QsIEQzRFRFWEZfUE9JTlQpOwotCi0gICAgICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VU
T0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKLSAgICAgICAgfQotICAg
IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZm9ybWF0Q29udmVydChzb3VyY2Us
IHNvdXJjZVJlY3QsIGRlc3RGb3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQsIGRlc3QpOwotICAgIH0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBCbGl0Ojpmb3JtYXRDb252ZXJ0KElEaXJlY3Qz
RFN1cmZhY2U5ICpzb3VyY2UsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9y
bWF0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVz
dCkKLXsKLSAgICBJRGlyZWN0M0RUZXh0dXJlOSAqdGV4dHVyZSA9IGNvcHlTdXJmYWNlVG9UZXh0
dXJlKHNvdXJjZSwgc291cmNlUmVjdCk7Ci0gICAgaWYgKCF0ZXh0dXJlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9
IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0KLSAgICBzYXZlU3RhdGUoKTsKLQotICAgIGRldmlj
ZS0+U2V0VGV4dHVyZSgwLCB0ZXh0dXJlKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgw
LCBkZXN0KTsKLQotICAgIHNldFZpZXdwb3J0KHNvdXJjZVJlY3QsIHhvZmZzZXQsIHlvZmZzZXQp
OwotCi0gICAgc2V0Q29tbW9uQmxpdFN0YXRlKCk7Ci0gICAgaWYgKHNldEZvcm1hdENvbnZlcnRT
aGFkZXJzKGRlc3RGb3JtYXQpKQotICAgIHsKLSAgICAgICAgcmVuZGVyKCk7Ci0gICAgfQotCi0g
ICAgdGV4dHVyZS0+UmVsZWFzZSgpOwotCi0gICAgcmVzdG9yZVN0YXRlKCk7Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBCbGl0OjpzZXRGb3JtYXRDb252ZXJ0U2hhZGVycyhHTGVudW0g
ZGVzdEZvcm1hdCkKLXsKLSAgICBib29sIG9rYXkgPSBzZXRWZXJ0ZXhTaGFkZXIoU0hBREVSX1ZT
X1NUQU5EQVJEKTsKLQotICAgIHN3aXRjaCAoZGVzdEZvcm1hdCkKLSAgICB7Ci0gICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgY2FzZSBHTF9C
R1JBX0VYVDoKLSAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAg
ICAgb2theSA9IG9rYXkgJiYgc2V0UGl4ZWxTaGFkZXIoU0hBREVSX1BTX0NPTVBPTkVOVE1BU0sp
OwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICBjYXNl
IEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgb2theSA9IG9rYXkgJiYgc2V0UGl4ZWxTaGFk
ZXIoU0hBREVSX1BTX0xVTUlOQU5DRSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlm
ICghb2theSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBlbnVt
IHsgWCA9IDAsIFkgPSAxLCBaID0gMiwgVyA9IDMgfTsKLQotICAgIC8vIFRoZSBtZWFuaW5nIG9m
IHRoaXMgY29uc3RhbnQgZGVwZW5kcyBvbiB0aGUgc2hhZGVyIHRoYXQgd2FzIHNlbGVjdGVkLgot
ICAgIC8vIFNlZSB0aGUgc2hhZGVyIGFzc2VtYmx5IGNvZGUgYWJvdmUgZm9yIGRldGFpbHMuCi0g
ICAgZmxvYXQgcHNDb25zdDBbNF0gPSB7IDAsIDAsIDAsIDAgfTsKLQotICAgIHN3aXRjaCAoZGVz
dEZvcm1hdCkKLSAgICB7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgY2Fz
ZSBHTF9SR0JBOgotICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgcHNDb25zdDBbWF0g
PSAxOwotICAgICAgICBwc0NvbnN0MFtaXSA9IDE7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBj
YXNlIEdMX1JHQjoKLSAgICAgICAgcHNDb25zdDBbWF0gPSAxOwotICAgICAgICBwc0NvbnN0MFtX
XSA9IDE7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICBw
c0NvbnN0MFtaXSA9IDE7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEdMX0xVTUlOQU5D
RToKLSAgICAgICAgcHNDb25zdDBbWV0gPSAxOwotICAgICAgICBicmVhazsKLQotICAgICAgY2Fz
ZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgIHBzQ29uc3QwW1hdID0gMTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotCi0gICAgbVJlbmRlcmVyLT5nZXREZXZpY2UoKS0+U2V0UGl4ZWxTaGFk
ZXJDb25zdGFudEYoMCwgcHNDb25zdDAsIDEpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUlE
aXJlY3QzRFRleHR1cmU5ICpCbGl0Ojpjb3B5U3VyZmFjZVRvVGV4dHVyZShJRGlyZWN0M0RTdXJm
YWNlOSAqc3VyZmFjZSwgY29uc3QgUkVDVCAmc291cmNlUmVjdCkKLXsKLSAgICBpZiAoIXN1cmZh
Y2UpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBJRGlyZWN0M0RE
ZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0gICAgRDNEU1VSRkFD
RV9ERVNDIHNvdXJjZURlc2M7Ci0gICAgc3VyZmFjZS0+R2V0RGVzYygmc291cmNlRGVzYyk7Ci0K
LSAgICAvLyBDb3B5IHRoZSByZW5kZXIgdGFyZ2V0IGludG8gYSB0ZXh0dXJlCi0gICAgSURpcmVj
dDNEVGV4dHVyZTkgKnRleHR1cmU7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZVRleHR1cmUoc291cmNlUmVjdC5yaWdodCAtIHNvdXJjZVJlY3QubGVmdCwgc291cmNlUmVjdC5i
b3R0b20gLSBzb3VyY2VSZWN0LnRvcCwgMSwgRDNEVVNBR0VfUkVOREVSVEFSR0VULCBzb3VyY2VE
ZXNjLkZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmdGV4dHVyZSwgTlVMTCk7Ci0KLSAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9P
VVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSURpcmVjdDNEVGV4dHVyZTkqKU5VTEwp
OwotICAgIH0KLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICp0ZXh0dXJlU3VyZmFjZTsKLSAgICBy
ZXN1bHQgPSB0ZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoMCwgJnRleHR1cmVTdXJmYWNlKTsKLQot
ICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0g
RDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAg
ICAgICB0ZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSwgKElEaXJlY3QzRFRleHR1cmU5KilOVUxMKTsKLSAgICB9Ci0KLSAgICBtUmVu
ZGVyZXItPmVuZFNjZW5lKCk7Ci0gICAgcmVzdWx0ID0gZGV2aWNlLT5TdHJldGNoUmVjdChzdXJm
YWNlLCAmc291cmNlUmVjdCwgdGV4dHVyZVN1cmZhY2UsIE5VTEwsIEQzRFRFWEZfTk9ORSk7Ci0K
LSAgICB0ZXh0dXJlU3VyZmFjZS0+UmVsZWFzZSgpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQp
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9S
WSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgIHRleHR1cmUtPlJlbGVhc2Uo
KTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSURpcmVjdDNE
VGV4dHVyZTkqKU5VTEwpOwotICAgIH0KLQotICAgIHJldHVybiB0ZXh0dXJlOwotfQotCi12b2lk
IEJsaXQ6OnNldFZpZXdwb3J0KGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQpCi17Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRl
cmVyLT5nZXREZXZpY2UoKTsKLQotICAgIEQzRFZJRVdQT1JUOSB2cDsKLSAgICB2cC5YICAgICAg
PSB4b2Zmc2V0OwotICAgIHZwLlkgICAgICA9IHlvZmZzZXQ7Ci0gICAgdnAuV2lkdGggID0gc291
cmNlUmVjdC5yaWdodCAtIHNvdXJjZVJlY3QubGVmdDsKLSAgICB2cC5IZWlnaHQgPSBzb3VyY2VS
ZWN0LmJvdHRvbSAtIHNvdXJjZVJlY3QudG9wOwotICAgIHZwLk1pblogICA9IDAuMGY7Ci0gICAg
dnAuTWF4WiAgID0gMS4wZjsKLSAgICBkZXZpY2UtPlNldFZpZXdwb3J0KCZ2cCk7Ci0KLSAgICBm
bG9hdCBoYWxmUGl4ZWxBZGp1c3RbNF0gPSB7IC0xLjBmL3ZwLldpZHRoLCAxLjBmL3ZwLkhlaWdo
dCwgMCwgMCB9OwotICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKDAsIGhhbGZQ
aXhlbEFkanVzdCwgMSk7Ci19Ci0KLXZvaWQgQmxpdDo6c2V0Q29tbW9uQmxpdFN0YXRlKCkKLXsK
LSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwot
Ci0gICAgZGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKE5VTEwpOwotCi0gICAgZGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7Ci0gICAgZGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsKLSAgICBk
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKLSAg
ICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOwot
ICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsKLSAg
ICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIEQzRENPTE9S
V1JJVEVFTkFCTEVfQUxQSEEgfCBEM0RDT0xPUldSSVRFRU5BQkxFX0JMVUUgfCBEM0RDT0xPUldS
SVRFRU5BQkxFX0dSRUVOIHwgRDNEQ09MT1JXUklURUVOQUJMRV9SRUQpOwotICAgIGRldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JHQldSSVRFRU5BQkxFLCBGQUxTRSk7Ci0gICAgZGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSwgRkFMU0UpOwotCi0gICAg
ZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NQUdGSUxURVIsIEQzRFRFWEZfUE9J
TlQpOwotICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUlORklMVEVSLCBE
M0RURVhGX1BPSU5UKTsKLSAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX1NS
R0JURVhUVVJFLCBGQUxTRSk7Ci0gICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FN
UF9BRERSRVNTVSwgRDNEVEFERFJFU1NfQ0xBTVApOwotICAgIGRldmljZS0+U2V0U2FtcGxlclN0
YXRlKDAsIEQzRFNBTVBfQUREUkVTU1YsIEQzRFRBRERSRVNTX0NMQU1QKTsKLQotICAgIFJFQ1Qg
c2Npc3NvclJlY3QgPSB7MH07ICAgLy8gU2Npc3NvcmluZyBpcyBkaXNhYmxlZCBmb3IgZmxpcHBp
bmcsIGJ1dCB3ZSBuZWVkIHRoaXMgdG8gY2FwdHVyZSBhbmQgcmVzdG9yZSB0aGUgb2xkIHJlY3Rh
bmdsZQotICAgIGRldmljZS0+U2V0U2Npc3NvclJlY3QoJnNjaXNzb3JSZWN0KTsKLQotICAgIGZv
cihpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAgewotICAg
ICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoaSwgMSk7Ci0gICAgfQotfQotCi12b2lk
IEJsaXQ6OnJlbmRlcigpCi17Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRl
cmVyLT5nZXREZXZpY2UoKTsKLQotICAgIEhSRVNVTFQgaHIgPSBkZXZpY2UtPlNldFN0cmVhbVNv
dXJjZSgwLCBtUXVhZFZlcnRleEJ1ZmZlciwgMCwgMiAqIHNpemVvZihmbG9hdCkpOwotICAgIGhy
ID0gZGV2aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbihtUXVhZFZlcnRleERlY2xhcmF0aW9uKTsK
LQotICAgIG1SZW5kZXJlci0+c3RhcnRTY2VuZSgpOwotICAgIGhyID0gZGV2aWNlLT5EcmF3UHJp
bWl0aXZlKEQzRFBUX1RSSUFOR0xFU1RSSVAsIDAsIDIpOwotfQotCi12b2lkIEJsaXQ6OnNhdmVT
dGF0ZSgpCi17Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXRE
ZXZpY2UoKTsKLQotICAgIEhSRVNVTFQgaHI7Ci0KLSAgICBkZXZpY2UtPkdldERlcHRoU3RlbmNp
bFN1cmZhY2UoJm1TYXZlZERlcHRoU3RlbmNpbCk7Ci0gICAgZGV2aWNlLT5HZXRSZW5kZXJUYXJn
ZXQoMCwgJm1TYXZlZFJlbmRlclRhcmdldCk7Ci0KLSAgICBpZiAobVNhdmVkU3RhdGVCbG9jayA9
PSBOVUxMKQotICAgIHsKLSAgICAgICAgaHIgPSBkZXZpY2UtPkJlZ2luU3RhdGVCbG9jaygpOwot
ICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01F
TU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsKLQotICAgICAgICBzZXRDb21tb25CbGl0U3Rh
dGUoKTsKLQotICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXQgZHVtbXlDb25zdFs0XSA9IHsgMCwg
MCwgMCwgMCB9OwotCi0gICAgICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOwotICAg
ICAgICBkZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50RigwLCBkdW1teUNvbnN0LCAxKTsK
LSAgICAgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsKLSAgICAgICAgZGV2aWNlLT5T
ZXRQaXhlbFNoYWRlckNvbnN0YW50RigwLCBkdW1teUNvbnN0LCAxKTsKLQotICAgICAgICBEM0RW
SUVXUE9SVDkgZHVtbXlWcDsKLSAgICAgICAgZHVtbXlWcC5YID0gMDsKLSAgICAgICAgZHVtbXlW
cC5ZID0gMDsKLSAgICAgICAgZHVtbXlWcC5XaWR0aCA9IDE7Ci0gICAgICAgIGR1bW15VnAuSGVp
Z2h0ID0gMTsKLSAgICAgICAgZHVtbXlWcC5NaW5aID0gMDsKLSAgICAgICAgZHVtbXlWcC5NYXha
ID0gMTsKLQotICAgICAgICBkZXZpY2UtPlNldFZpZXdwb3J0KCZkdW1teVZwKTsKLQotICAgICAg
ICBkZXZpY2UtPlNldFRleHR1cmUoMCwgTlVMTCk7Ci0KLSAgICAgICAgZGV2aWNlLT5TZXRTdHJl
YW1Tb3VyY2UoMCwgbVF1YWRWZXJ0ZXhCdWZmZXIsIDAsIDApOwotCi0gICAgICAgIGRldmljZS0+
U2V0VmVydGV4RGVjbGFyYXRpb24obVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbik7Ci0KLSAgICAgICAg
aHIgPSBkZXZpY2UtPkVuZFN0YXRlQmxvY2soJm1TYXZlZFN0YXRlQmxvY2spOwotICAgICAgICBB
U1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBo
ciA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobVNhdmVkU3RhdGVCbG9j
ayAhPSBOVUxMKTsKLQotICAgIGlmIChtU2F2ZWRTdGF0ZUJsb2NrICE9IE5VTEwpCi0gICAgewot
ICAgICAgICBociA9IG1TYXZlZFN0YXRlQmxvY2stPkNhcHR1cmUoKTsKLSAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChocikpOwotICAgIH0KLX0KLQotdm9pZCBCbGl0OjpyZXN0b3JlU3RhdGUoKQot
ewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7
Ci0KLSAgICBkZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UobVNhdmVkRGVwdGhTdGVuY2ls
KTsKLSAgICBpZiAobVNhdmVkRGVwdGhTdGVuY2lsICE9IE5VTEwpCi0gICAgewotICAgICAgICBt
U2F2ZWREZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKLSAgICAgICAgbVNhdmVkRGVwdGhTdGVuY2ls
ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBtU2F2ZWRS
ZW5kZXJUYXJnZXQpOwotICAgIGlmIChtU2F2ZWRSZW5kZXJUYXJnZXQgIT0gTlVMTCkKLSAgICB7
Ci0gICAgICAgIG1TYXZlZFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgICAgICBtU2F2ZWRS
ZW5kZXJUYXJnZXQgPSBOVUxMOwotICAgIH0KLQotICAgIEFTU0VSVChtU2F2ZWRTdGF0ZUJsb2Nr
ICE9IE5VTEwpOwotCi0gICAgaWYgKG1TYXZlZFN0YXRlQmxvY2sgIT0gTlVMTCkKLSAgICB7Ci0g
ICAgICAgIG1TYXZlZFN0YXRlQmxvY2stPkFwcGx5KCk7Ci0gICAgfQotfQotCi19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0JsaXQu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQmxpdC5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzE4MDI4ZTY2MmQzZDU2MWM3NmNkMGNh
NmY1MmU4MTNlNjcyNWMzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQmxp
dC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
Ly8gQmxpdC5jcHA6IFN1cmZhY2UgY29weSB1dGlsaXR5IGNsYXNzLgotCi0jaWZuZGVmIExJQkdM
RVNWMl9CTElUX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9CTElUX0hfCi0KLSNpbmNsdWRlICJjb21t
b24vYW5nbGV1dGlscy5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLWNsYXNzIEZyYW1lYnVmZmVyOwot
fQotCi1uYW1lc3BhY2UgcngKLXsKLWNsYXNzIFJlbmRlcmVyOTsKLWNsYXNzIFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlMkQ7Ci1jbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU7Ci0KLWNs
YXNzIEJsaXQKLXsKLSAgcHVibGljOgotICAgIGV4cGxpY2l0IEJsaXQoUmVuZGVyZXI5ICpyZW5k
ZXJlcik7Ci0gICAgfkJsaXQoKTsKLQotICAgIC8vIENvcHkgZnJvbSBzb3VyY2Ugc3VyZmFjZSB0
byBkZXN0IHN1cmZhY2UuCi0gICAgLy8gc291cmNlUmVjdCwgeG9mZnNldCwgeW9mZnNldCBhcmUg
aW4gRDNEIGNvb3JkaW5hdGVzICgwLDAgaW4gdXBwZXItbGVmdCkKLSAgICBib29sIGNvcHkoZ2w6
OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xlbnVt
IGRlc3RGb3JtYXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlMkQgKnN0b3JhZ2UsIEdMaW50IGxldmVsKTsKLSAgICBib29sIGNvcHkoZ2w6OkZy
YW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xlbnVtIGRl
c3RGb3JtYXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpOwotCi0gICAg
Ly8gQ29weSBmcm9tIHNvdXJjZSBzdXJmYWNlIHRvIGRlc3Qgc3VyZmFjZS4KLSAgICAvLyBzb3Vy
Y2VSZWN0LCB4b2Zmc2V0LCB5b2Zmc2V0IGFyZSBpbiBEM0QgY29vcmRpbmF0ZXMgKDAsMCBpbiB1
cHBlci1sZWZ0KQotICAgIC8vIHNvdXJjZSBpcyBpbnRlcnByZXRlZCBhcyBSR0JBIGFuZCBkZXN0
Rm9ybWF0IHNwZWNpZmllcyB0aGUgZGVzaXJlZCByZXN1bHQgZm9ybWF0LiBGb3IgZXhhbXBsZSwg
aWYgZGVzdEZvcm1hdCA9IEdMX1JHQiwgdGhlIGFscGhhIGNoYW5uZWwgd2lsbCBiZSBmb3JjZWQg
dG8gMC4KLSAgICBib29sIGZvcm1hdENvbnZlcnQoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwg
Y29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0KTsKLQotICAgIC8vIDJ4MiBi
b3ggZmlsdGVyIHNhbXBsZSBmcm9tIHNvdXJjZSB0byBkZXN0LgotICAgIC8vIFJlcXVpcmVzIHRo
YXQgc291cmNlIGlzIFJHQihBKSBhbmQgZGVzdCBoYXMgdGhlIHNhbWUgZm9ybWF0IGFzIHNvdXJj
ZS4KLSAgICBib29sIGJveEZpbHRlcihJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBJRGlyZWN0
M0RTdXJmYWNlOSAqZGVzdCk7Ci0KLSAgcHJpdmF0ZToKLSAgICByeDo6UmVuZGVyZXI5ICptUmVu
ZGVyZXI7Ci0KLSAgICBJRGlyZWN0M0RWZXJ0ZXhCdWZmZXI5ICptUXVhZFZlcnRleEJ1ZmZlcjsK
LSAgICBJRGlyZWN0M0RWZXJ0ZXhEZWNsYXJhdGlvbjkgKm1RdWFkVmVydGV4RGVjbGFyYXRpb247
Ci0KLSAgICB2b2lkIGluaXRHZW9tZXRyeSgpOwotCi0gICAgYm9vbCBzZXRGb3JtYXRDb252ZXJ0
U2hhZGVycyhHTGVudW0gZGVzdEZvcm1hdCk7Ci0KLSAgICBib29sIGNvcHkoSURpcmVjdDNEU3Vy
ZmFjZTkgKnNvdXJjZSwgY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQs
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0KTsK
LSAgICBJRGlyZWN0M0RUZXh0dXJlOSAqY29weVN1cmZhY2VUb1RleHR1cmUoSURpcmVjdDNEU3Vy
ZmFjZTkgKnN1cmZhY2UsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QpOwotICAgIHZvaWQgc2V0Vmll
d3BvcnQoY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCk7Ci0gICAgdm9pZCBzZXRDb21tb25CbGl0U3RhdGUoKTsKLSAgICBSRUNUIGdldFN1cmZhY2VS
ZWN0KElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlKSBjb25zdDsKLQotICAgIC8vIFRoaXMgZW51
bSBpcyB1c2VkIHRvIGluZGV4IG1Db21waWxlZFNoYWRlcnMgYW5kIG1TaGFkZXJTb3VyY2UuCi0g
ICAgZW51bSBTaGFkZXJJZAotICAgIHsKLSAgICAgICAgU0hBREVSX1ZTX1NUQU5EQVJELAotICAg
ICAgICBTSEFERVJfVlNfRkxJUFksCi0gICAgICAgIFNIQURFUl9QU19QQVNTVEhST1VHSCwKLSAg
ICAgICAgU0hBREVSX1BTX0xVTUlOQU5DRSwKLSAgICAgICAgU0hBREVSX1BTX0NPTVBPTkVOVE1B
U0ssCi0gICAgICAgIFNIQURFUl9DT1VOVAotICAgIH07Ci0KLSAgICAvLyBUaGlzIGFjdHVhbGx5
IGNvbnRhaW5zIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgb3IgSURpcmVjdDNEUGl4ZWxTaGFkZXI5
IGNhc3RlZCB0byBJVW5rbm93bi4KLSAgICBJVW5rbm93biAqbUNvbXBpbGVkU2hhZGVyc1tTSEFE
RVJfQ09VTlRdOwotCi0gICAgdGVtcGxhdGUgPGNsYXNzIEQzRFNoYWRlclR5cGU+Ci0gICAgYm9v
bCBzZXRTaGFkZXIoU2hhZGVySWQgc291cmNlLCBjb25zdCBjaGFyICpwcm9maWxlLAotICAgICAg
ICAgICAgICAgICAgIEQzRFNoYWRlclR5cGUgKihSZW5kZXJlcjk6OipjcmVhdGVTaGFkZXIpKGNv
bnN0IERXT1JEICosIHNpemVfdCBsZW5ndGgpLAotICAgICAgICAgICAgICAgICAgIEhSRVNVTFQg
KFdJTkFQSSBJRGlyZWN0M0REZXZpY2U5Ojoqc2V0U2hhZGVyKShEM0RTaGFkZXJUeXBlKikpOwot
Ci0gICAgYm9vbCBzZXRWZXJ0ZXhTaGFkZXIoU2hhZGVySWQgc2hhZGVyKTsKLSAgICBib29sIHNl
dFBpeGVsU2hhZGVyKFNoYWRlcklkIHNoYWRlcik7Ci0gICAgdm9pZCByZW5kZXIoKTsKLQotICAg
IHZvaWQgc2F2ZVN0YXRlKCk7Ci0gICAgdm9pZCByZXN0b3JlU3RhdGUoKTsKLSAgICBJRGlyZWN0
M0RTdGF0ZUJsb2NrOSAqbVNhdmVkU3RhdGVCbG9jazsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAq
bVNhdmVkUmVuZGVyVGFyZ2V0OwotICAgIElEaXJlY3QzRFN1cmZhY2U5ICptU2F2ZWREZXB0aFN0
ZW5jaWw7Ci0KLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQmxpdCk7Ci19OwotfQotCi0j
ZW5kaWYgICAvLyBMSUJHTEVTVjJfQkxJVF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdlMTEuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdl
MTEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjQ3ZDhhODk4NTU0Yjk4NDc3
YjZmZDQ4ZWE4MzdjNmRmOGJiYTNiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvQnVmZmVyU3RvcmFnZTExLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM1OCArMCwwIEBACi0j
aW5jbHVkZSAicHJlY29tcGlsZWQuaCIKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBCdWZmZXJTdG9yYWdl
MTEuY3BwIERlZmluZXMgdGhlIEJ1ZmZlclN0b3JhZ2UxMSBjbGFzcy4KLQotI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdlMTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIv
bWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlcjExLmgiCi0KLW5h
bWVzcGFjZSByeAotewotCi1CdWZmZXJTdG9yYWdlMTE6OkJ1ZmZlclN0b3JhZ2UxMShSZW5kZXJl
cjExICpyZW5kZXJlcikKLXsKLSAgICBtUmVuZGVyZXIgPSByZW5kZXJlcjsKLQotICAgIG1TdGFn
aW5nQnVmZmVyID0gTlVMTDsKLSAgICBtU3RhZ2luZ0J1ZmZlclNpemUgPSAwOwotCi0gICAgbUJ1
ZmZlciA9IE5VTEw7Ci0gICAgbUJ1ZmZlclNpemUgPSAwOwotCi0gICAgbVNpemUgPSAwOwotCi0g
ICAgbVJlc29sdmVkRGF0YSA9IE5VTEw7Ci0gICAgbVJlc29sdmVkRGF0YVNpemUgPSAwOwotICAg
IG1SZXNvbHZlZERhdGFWYWxpZCA9IGZhbHNlOwotCi0gICAgbVJlYWRVc2FnZUNvdW50ID0gMDsK
LSAgICBtV3JpdGVVc2FnZUNvdW50ID0gMDsKLX0KLQotQnVmZmVyU3RvcmFnZTExOjp+QnVmZmVy
U3RvcmFnZTExKCkKLXsKLSAgICBpZiAobVN0YWdpbmdCdWZmZXIpCi0gICAgewotICAgICAgICBt
U3RhZ2luZ0J1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtU3RhZ2luZ0J1ZmZlciA9IE5VTEw7
Ci0gICAgfQotCi0gICAgaWYgKG1CdWZmZXIpCi0gICAgewotICAgICAgICBtQnVmZmVyLT5SZWxl
YXNlKCk7Ci0gICAgICAgIG1CdWZmZXIgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtUmVzb2x2
ZWREYXRhKQotICAgIHsKLSAgICAgICAgZnJlZShtUmVzb2x2ZWREYXRhKTsKLSAgICAgICAgbVJl
c29sdmVkRGF0YSA9IE5VTEw7Ci0gICAgfQotfQotCi1CdWZmZXJTdG9yYWdlMTEgKkJ1ZmZlclN0
b3JhZ2UxMTo6bWFrZUJ1ZmZlclN0b3JhZ2UxMShCdWZmZXJTdG9yYWdlICpidWZmZXJTdG9yYWdl
KQotewotICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKEJ1ZmZlclN0b3JhZ2UxMSosIGJ1ZmZl
clN0b3JhZ2UpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QnVmZmVyU3RvcmFnZTExKj4oYnVm
ZmVyU3RvcmFnZSk7Ci19Ci0KLXZvaWQgKkJ1ZmZlclN0b3JhZ2UxMTo6Z2V0RGF0YSgpCi17Ci0g
ICAgaWYgKCFtUmVzb2x2ZWREYXRhVmFsaWQpCi0gICAgewotICAgICAgICBJRDNEMTFEZXZpY2Ug
KmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0gICAgICAgIElEM0QxMURldmljZUNv
bnRleHQgKmNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKLSAgICAgICAg
SFJFU1VMVCByZXN1bHQ7Ci0KLSAgICAgICAgaWYgKCFtU3RhZ2luZ0J1ZmZlciB8fCBtU3RhZ2lu
Z0J1ZmZlclNpemUgPCBtQnVmZmVyU2l6ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1T
dGFnaW5nQnVmZmVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1TdGFnaW5nQnVm
ZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgbVN0YWdpbmdCdWZmZXIgPSBOVUxMOwot
ICAgICAgICAgICAgICAgIG1TdGFnaW5nQnVmZmVyU2l6ZSA9IDA7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIGJ1ZmZlckRlc2M7Ci0gICAgICAgICAgICBi
dWZmZXJEZXNjLkJ5dGVXaWR0aCA9IG1TaXplOwotICAgICAgICAgICAgYnVmZmVyRGVzYy5Vc2Fn
ZSA9IEQzRDExX1VTQUdFX1NUQUdJTkc7Ci0gICAgICAgICAgICBidWZmZXJEZXNjLkJpbmRGbGFn
cyA9IDA7Ci0gICAgICAgICAgICBidWZmZXJEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BV
X0FDQ0VTU19SRUFEIHwgRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsKLSAgICAgICAgICAgIGJ1ZmZl
ckRlc2MuTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgICAgIGJ1ZmZlckRlc2MuU3RydWN0dXJlQnl0
ZVN0cmlkZSA9IDA7Ci0KLSAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVy
KCZidWZmZXJEZXNjLCBOVUxMLCAmbVN0YWdpbmdCdWZmZXIpOwotICAgICAgICAgICAgaWYgKEZB
SUxFRChyZXN1bHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgKHZvaWQqKU5VTEwpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBtU3RhZ2luZ0J1ZmZlclNpemUgPSBidWZmZXJEZXNjLkJ5dGVXaWR0aDsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICghbVJlc29sdmVkRGF0YSB8fCBtUmVzb2x2ZWREYXRhU2l6
ZSA8IG1CdWZmZXJTaXplKQotICAgICAgICB7Ci0gICAgICAgICAgICBmcmVlKG1SZXNvbHZlZERh
dGEpOwotICAgICAgICAgICAgbVJlc29sdmVkRGF0YSA9IG1hbGxvYyhtU2l6ZSk7Ci0gICAgICAg
ICAgICBtUmVzb2x2ZWREYXRhU2l6ZSA9IG1TaXplOwotICAgICAgICB9Ci0KLSAgICAgICAgRDNE
MTFfQk9YIHNyY0JveDsKLSAgICAgICAgc3JjQm94LmxlZnQgPSAwOwotICAgICAgICBzcmNCb3gu
cmlnaHQgPSBtU2l6ZTsKLSAgICAgICAgc3JjQm94LnRvcCA9IDA7Ci0gICAgICAgIHNyY0JveC5i
b3R0b20gPSAxOwotICAgICAgICBzcmNCb3guZnJvbnQgPSAwOwotICAgICAgICBzcmNCb3guYmFj
ayA9IDE7Ci0KLSAgICAgICAgY29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKG1TdGFnaW5n
QnVmZmVyLCAwLCAwLCAwLCAwLCBtQnVmZmVyLCAwLCAmc3JjQm94KTsKLQotICAgICAgICBEM0Qx
MV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7Ci0gICAgICAgIHJlc3VsdCA9IGNv
bnRleHQtPk1hcChtU3RhZ2luZ0J1ZmZlciwgMCwgRDNEMTFfTUFQX1JFQUQsIDAsICZtYXBwZWRS
ZXNvdXJjZSk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAodm9pZCopTlVMTCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBtZW1jcHkobVJlc29sdmVkRGF0YSwgbWFwcGVkUmVzb3VyY2Uu
cERhdGEsIG1TaXplKTsKLQotICAgICAgICBjb250ZXh0LT5Vbm1hcChtU3RhZ2luZ0J1ZmZlciwg
MCk7Ci0KLSAgICAgICAgbVJlc29sdmVkRGF0YVZhbGlkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBt
UmVhZFVzYWdlQ291bnQgPSAwOwotCi0gICAgcmV0dXJuIG1SZXNvbHZlZERhdGE7Ci19Ci0KLXZv
aWQgQnVmZmVyU3RvcmFnZTExOjpzZXREYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGlu
dCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQotewotICAgIElEM0QxMURldmljZSAqZGV2aWNl
ID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLSAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250
ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7Ci0gICAgSFJFU1VMVCByZXN1bHQ7
Ci0KLSAgICB1bnNpZ25lZCBpbnQgcmVxdWlyZWRCdWZmZXJTaXplID0gc2l6ZSArIG9mZnNldDsK
LSAgICB1bnNpZ25lZCBpbnQgcmVxdWlyZWRTdGFnaW5nU2l6ZSA9IHNpemU7Ci0gICAgYm9vbCBk
aXJlY3RJbml0aWFsaXphdGlvbiA9IG9mZnNldCA9PSAwICYmICghbUJ1ZmZlciB8fCBtQnVmZmVy
U2l6ZSA8IHNpemUgKyBvZmZzZXQpOwotCi0gICAgaWYgKCFkaXJlY3RJbml0aWFsaXphdGlvbikK
LSAgICB7Ci0gICAgICAgIGlmICghbVN0YWdpbmdCdWZmZXIgfHwgbVN0YWdpbmdCdWZmZXJTaXpl
IDwgcmVxdWlyZWRTdGFnaW5nU2l6ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1TdGFn
aW5nQnVmZmVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1TdGFnaW5nQnVmZmVy
LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgbVN0YWdpbmdCdWZmZXIgPSBOVUxMOwotICAg
ICAgICAgICAgICAgIG1TdGFnaW5nQnVmZmVyU2l6ZSA9IDA7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIGJ1ZmZlckRlc2M7Ci0gICAgICAgICAgICBidWZm
ZXJEZXNjLkJ5dGVXaWR0aCA9IHNpemU7Ci0gICAgICAgICAgICBidWZmZXJEZXNjLlVzYWdlID0g
RDNEMTFfVVNBR0VfU1RBR0lORzsKLSAgICAgICAgICAgIGJ1ZmZlckRlc2MuQmluZEZsYWdzID0g
MDsKLSAgICAgICAgICAgIGJ1ZmZlckRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUND
RVNTX1JFQUQgfCBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOwotICAgICAgICAgICAgYnVmZmVyRGVz
Yy5NaXNjRmxhZ3MgPSAwOwotICAgICAgICAgICAgYnVmZmVyRGVzYy5TdHJ1Y3R1cmVCeXRlU3Ry
aWRlID0gMDsKLQotICAgICAgICAgICAgaWYgKGRhdGEpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgRDNEMTFfU1VCUkVTT1VSQ0VfREFUQSBpbml0aWFsRGF0YTsKLSAgICAgICAgICAg
ICAgICBpbml0aWFsRGF0YS5wU3lzTWVtID0gZGF0YTsKLSAgICAgICAgICAgICAgICBpbml0aWFs
RGF0YS5TeXNNZW1QaXRjaCA9IHNpemU7Ci0gICAgICAgICAgICAgICAgaW5pdGlhbERhdGEuU3lz
TWVtU2xpY2VQaXRjaCA9IDA7Ci0KLSAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZUJ1ZmZlcigmYnVmZmVyRGVzYywgJmluaXRpYWxEYXRhLCAmbVN0YWdpbmdCdWZmZXIpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJEZXNjLCBOVUxMLCAm
bVN0YWdpbmdCdWZmZXIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoRkFJTEVE
KHJlc3VsdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbVN0YWdp
bmdCdWZmZXJTaXplID0gc2l6ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChkYXRhKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVz
b3VyY2U7Ci0gICAgICAgICAgICByZXN1bHQgPSBjb250ZXh0LT5NYXAobVN0YWdpbmdCdWZmZXIs
IDAsIEQzRDExX01BUF9XUklURSwgMCwgJm1hcHBlZFJlc291cmNlKTsKLSAgICAgICAgICAgIGlm
IChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBtZW1jcHkobWFwcGVkUmVzb3VyY2UucERhdGEsIGRhdGEsIHNpemUpOwotCi0gICAgICAgICAg
ICBjb250ZXh0LT5Vbm1hcChtU3RhZ2luZ0J1ZmZlciwgMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAoIW1CdWZmZXIgfHwgbUJ1ZmZlclNpemUgPCBzaXplICsgb2Zmc2V0KQotICAgIHsK
LSAgICAgICAgRDNEMTFfQlVGRkVSX0RFU0MgYnVmZmVyRGVzYzsKLSAgICAgICAgYnVmZmVyRGVz
Yy5CeXRlV2lkdGggPSByZXF1aXJlZEJ1ZmZlclNpemU7Ci0gICAgICAgIGJ1ZmZlckRlc2MuVXNh
Z2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOwotICAgICAgICBidWZmZXJEZXNjLkJpbmRGbGFncyA9
IEQzRDExX0JJTkRfVkVSVEVYX0JVRkZFUiB8IEQzRDExX0JJTkRfSU5ERVhfQlVGRkVSOwotICAg
ICAgICBidWZmZXJEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKLSAgICAgICAgYnVmZmVyRGVzYy5N
aXNjRmxhZ3MgPSAwOwotICAgICAgICBidWZmZXJEZXNjLlN0cnVjdHVyZUJ5dGVTdHJpZGUgPSAw
OwotCi0gICAgICAgIGlmIChkaXJlY3RJbml0aWFsaXphdGlvbikKLSAgICAgICAgewotICAgICAg
ICAgICAgLy8gU2luY2UgdGhlIGRhdGEgd2lsbCBmaWxsIHRoZSBlbnRpcmUgYnVmZmVyIChiZWlu
ZyBsYXJnZXIgdGhhbiB0aGUgaW5pdGlhbCBzaXplIGFuZCBoYXZpbmcKLSAgICAgICAgICAgIC8v
IG5vIG9mZnNldCksIHRoZSBidWZmZXIgY2FuIGJlIGluaXRpYWxpemVkIHdpdGggdGhlIGRhdGEg
c28gbm8gc3RhZ2luZyBidWZmZXIgaXMgcmVxdWlyZWQKLQotICAgICAgICAgICAgLy8gTm8gbG9u
Z2VyIG5lZWQgdGhlIG9sZCBidWZmZXIKLSAgICAgICAgICAgIGlmIChtQnVmZmVyKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG1CdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgICAg
ICAgICBtQnVmZmVyID0gTlVMTDsKLSAgICAgICAgICAgICAgICBtQnVmZmVyU2l6ZSA9IDA7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChkYXRhKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIEQzRDExX1NVQlJFU09VUkNFX0RBVEEgaW5pdGlhbERhdGE7Ci0gICAgICAg
ICAgICAgICAgaW5pdGlhbERhdGEucFN5c01lbSA9IGRhdGE7Ci0gICAgICAgICAgICAgICAgaW5p
dGlhbERhdGEuU3lzTWVtUGl0Y2ggPSBzaXplOwotICAgICAgICAgICAgICAgIGluaXRpYWxEYXRh
LlN5c01lbVNsaWNlUGl0Y2ggPSAwOwotCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVCdWZmZXIoJmJ1ZmZlckRlc2MsICZpbml0aWFsRGF0YSwgJm1CdWZmZXIpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJEZXNjLCBOVUxMLCAmbUJ1
ZmZlcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG1C
dWZmZXIgJiYgb2Zmc2V0ID4gMCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gSWYgb2Zmc2V0
IGlzIGdyZWF0ZXIgdGhhbiB6ZXJvIGFuZCB0aGUgYnVmZmVyIGlzIG5vbi1udWxsLCBuZWVkIHRv
IHByZXNlcnZlIHRoZSBkYXRhIGZyb20KLSAgICAgICAgICAgIC8vIHRoZSBvbGQgYnVmZmVyIHVw
IHRvIG9mZnNldAotICAgICAgICAgICAgSUQzRDExQnVmZmVyICpuZXdCdWZmZXIgPSBOVUxMOwot
Ci0gICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmYnVmZmVyRGVzYywg
TlVMTCwgJm5ld0J1ZmZlcik7Ci0gICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgRDNEMTFfQk9YIHNyY0JveDsKLSAg
ICAgICAgICAgIHNyY0JveC5sZWZ0ID0gMDsKLSAgICAgICAgICAgIHNyY0JveC5yaWdodCA9IHN0
ZDo6bWluKG9mZnNldCwgbUJ1ZmZlclNpemUpOwotICAgICAgICAgICAgc3JjQm94LnRvcCA9IDA7
Ci0gICAgICAgICAgICBzcmNCb3guYm90dG9tID0gMTsKLSAgICAgICAgICAgIHNyY0JveC5mcm9u
dCA9IDA7Ci0gICAgICAgICAgICBzcmNCb3guYmFjayA9IDE7Ci0KLSAgICAgICAgICAgIGNvbnRl
eHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihuZXdCdWZmZXIsIDAsIDAsIDAsIDAsIG1CdWZmZXIs
IDAsICZzcmNCb3gpOwotCi0gICAgICAgICAgICBtQnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAg
ICAgICBtQnVmZmVyID0gbmV3QnVmZmVyOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgewotICAgICAgICAgICAgLy8gU2ltcGxlIGNhc2UsIG5vdGhpbmcgbmVlZHMgdG8gYmUgY29w
aWVkIGZyb20gdGhlIG9sZCBidWZmZXIgdG8gdGhlIG5ldyBvbmUsIGp1c3QgY3JlYXRlCi0gICAg
ICAgICAgICAvLyBhIG5ldyBidWZmZXIKLQotICAgICAgICAgICAgLy8gTm8gbG9uZ2VyIG5lZWQg
dGhlIG9sZCBidWZmZXIKLSAgICAgICAgICAgIGlmIChtQnVmZmVyKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIG1CdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBtQnVm
ZmVyID0gTlVMTDsKLSAgICAgICAgICAgICAgICBtQnVmZmVyU2l6ZSA9IDA7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBidWZmZXIgZm9yIGRhdGEgc3RvcmFn
ZQotICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVCdWZmZXIoJmJ1ZmZlckRlc2Ms
IE5VTEwsICZtQnVmZmVyKTsKLSAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdXBkYXRlU2VyaWFsKCk7
Ci0gICAgICAgIG1CdWZmZXJTaXplID0gYnVmZmVyRGVzYy5CeXRlV2lkdGg7Ci0gICAgfQotCi0g
ICAgaWYgKCFkaXJlY3RJbml0aWFsaXphdGlvbikKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtU3Rh
Z2luZ0J1ZmZlciAmJiBtU3RhZ2luZ0J1ZmZlclNpemUgPj0gcmVxdWlyZWRTdGFnaW5nU2l6ZSk7
Ci0KLSAgICAgICAgLy8gRGF0YSBpcyBhbHJlYWR5IHB1dCBpbnRvIHRoZSBzdGFnaW5nIGJ1ZmZl
ciwgY29weSBpdCBvdmVyIHRvIHRoZSBkYXRhIGJ1ZmZlcgotICAgICAgICBEM0QxMV9CT1ggc3Jj
Qm94OwotICAgICAgICBzcmNCb3gubGVmdCA9IDA7Ci0gICAgICAgIHNyY0JveC5yaWdodCA9IHNp
emU7Ci0gICAgICAgIHNyY0JveC50b3AgPSAwOwotICAgICAgICBzcmNCb3guYm90dG9tID0gMTsK
LSAgICAgICAgc3JjQm94LmZyb250ID0gMDsKLSAgICAgICAgc3JjQm94LmJhY2sgPSAxOwotCi0g
ICAgICAgIGNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihtQnVmZmVyLCAwLCBvZmZzZXQs
IDAsIDAsIG1TdGFnaW5nQnVmZmVyLCAwLCAmc3JjQm94KTsKLSAgICB9Ci0KLSAgICBtU2l6ZSA9
IHN0ZDo6bWF4KG1TaXplLCBvZmZzZXQgKyBzaXplKTsKLQotICAgIG1Xcml0ZVVzYWdlQ291bnQg
PSAwOwotCi0gICAgbVJlc29sdmVkRGF0YVZhbGlkID0gZmFsc2U7Ci19Ci0KLXZvaWQgQnVmZmVy
U3RvcmFnZTExOjpjbGVhcigpCi17Ci0gICAgbVJlc29sdmVkRGF0YVZhbGlkID0gZmFsc2U7Ci0g
ICAgbVNpemUgPSAwOwotfQotCi11bnNpZ25lZCBpbnQgQnVmZmVyU3RvcmFnZTExOjpnZXRTaXpl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVNpemU7Ci19Ci0KLWJvb2wgQnVmZmVyU3RvcmFnZTEx
OjpzdXBwb3J0c0RpcmVjdEJpbmRpbmcoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6bWFya0J1ZmZlclVzYWdlKCkKLXsKLSAgICBtUmVhZFVz
YWdlQ291bnQrKzsKLSAgICBtV3JpdGVVc2FnZUNvdW50Kys7Ci0KLSAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgaW50IHVzYWdlTGltaXQgPSA1OwotCi0gICAgaWYgKG1SZWFkVXNhZ2VDb3VudCA+
IHVzYWdlTGltaXQgJiYgbVJlc29sdmVkRGF0YSkKLSAgICB7Ci0gICAgICAgIGZyZWUobVJlc29s
dmVkRGF0YSk7Ci0gICAgICAgIG1SZXNvbHZlZERhdGEgPSBOVUxMOwotICAgICAgICBtUmVzb2x2
ZWREYXRhU2l6ZSA9IDA7Ci0gICAgICAgIG1SZXNvbHZlZERhdGFWYWxpZCA9IGZhbHNlOwotICAg
IH0KLQotICAgIGlmIChtUmVhZFVzYWdlQ291bnQgPiB1c2FnZUxpbWl0ICYmIG1Xcml0ZVVzYWdl
Q291bnQgPiB1c2FnZUxpbWl0ICYmIG1TdGFnaW5nQnVmZmVyKQotICAgIHsKLSAgICAgICAgbVN0
YWdpbmdCdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbVN0YWdpbmdCdWZmZXIgPSBOVUxMOwot
ICAgICAgICBtU3RhZ2luZ0J1ZmZlclNpemUgPSAwOwotICAgIH0KLX0KLQotSUQzRDExQnVmZmVy
ICpCdWZmZXJTdG9yYWdlMTE6OmdldEJ1ZmZlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1CdWZm
ZXI7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZTExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UxMS5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBiNjIzNDhiMGM5MzZmZWQ4M2E5MDQ1Y2UxOGViN2E5YTJkNjI4NTky
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZTExLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEz
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gQnVmZmVy
U3RvcmFnZTExLmggRGVmaW5lcyB0aGUgQnVmZmVyU3RvcmFnZTExIGNsYXNzLgotCi0jaWZuZGVm
IExJQkdMRVNWMl9SRU5ERVJFUl9CVUZGRVJTVE9SQUdFMTFfSF8KLSNkZWZpbmUgTElCR0xFU1Yy
X1JFTkRFUkVSX0JVRkZFUlNUT1JBR0UxMV9IXwotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL0J1ZmZlclN0b3JhZ2UuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci1jbGFzcyBSZW5kZXJlcjEx
OwotCi1jbGFzcyBCdWZmZXJTdG9yYWdlMTEgOiBwdWJsaWMgQnVmZmVyU3RvcmFnZQotewotICBw
dWJsaWM6Ci0gICAgZXhwbGljaXQgQnVmZmVyU3RvcmFnZTExKFJlbmRlcmVyMTEgKnJlbmRlcmVy
KTsKLSAgICB2aXJ0dWFsIH5CdWZmZXJTdG9yYWdlMTEoKTsKLQotICAgIHN0YXRpYyBCdWZmZXJT
dG9yYWdlMTEgKm1ha2VCdWZmZXJTdG9yYWdlMTEoQnVmZmVyU3RvcmFnZSAqYnVmZmVyU3RvcmFn
ZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgKmdldERhdGEoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9m
ZnNldCk7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyKCk7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBp
bnQgZ2V0U2l6ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0RpcmVjdEJpbmRp
bmcoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgbWFya0J1ZmZlclVzYWdlKCk7Ci0KLSAgICBJ
RDNEMTFCdWZmZXIgKmdldEJ1ZmZlcigpIGNvbnN0OwotCi0gIHByaXZhdGU6Ci0gICAgUmVuZGVy
ZXIxMSAqbVJlbmRlcmVyOwotCi0gICAgSUQzRDExQnVmZmVyICptU3RhZ2luZ0J1ZmZlcjsKLSAg
ICB1bnNpZ25lZCBpbnQgbVN0YWdpbmdCdWZmZXJTaXplOwotCi0gICAgSUQzRDExQnVmZmVyICpt
QnVmZmVyOwotICAgIHVuc2lnbmVkIGludCBtQnVmZmVyU2l6ZTsKLQotICAgIHVuc2lnbmVkIGlu
dCBtU2l6ZTsKLQotICAgIHZvaWQgKm1SZXNvbHZlZERhdGE7Ci0gICAgdW5zaWduZWQgaW50IG1S
ZXNvbHZlZERhdGFTaXplOwotICAgIGJvb2wgbVJlc29sdmVkRGF0YVZhbGlkOwotCi0gICAgdW5z
aWduZWQgaW50IG1SZWFkVXNhZ2VDb3VudDsKLSAgICB1bnNpZ25lZCBpbnQgbVdyaXRlVXNhZ2VD
b3VudDsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9CVUZGRVJTVE9S
QUdFMTFfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZTkuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdlOS5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGU2OWU3YTg5MjFlM2YzZWIwZjdlNjlkM2Y1YjZmNzFjM2Y5OWZhMzku
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdlOS5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0jaW5jbHVkZSAicHJlY29tcGlsZWQuaCIK
LS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwotCi0vLyBCdWZmZXJTdG9yYWdlOS5jcHAgRGVmaW5lcyB0aGUgQnVmZmVy
U3RvcmFnZTkgY2xhc3MuCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3Rv
cmFnZTkuaCIKLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0K
LUJ1ZmZlclN0b3JhZ2U5OjpCdWZmZXJTdG9yYWdlOSgpCi17Ci0gICAgbU1lbW9yeSA9IE5VTEw7
Ci0gICAgbUFsbG9jYXRlZFNpemUgPSAwOwotICAgIG1TaXplID0gMDsKLX0KLQotQnVmZmVyU3Rv
cmFnZTk6On5CdWZmZXJTdG9yYWdlOSgpCi17Ci0gICAgZGVsZXRlW10gbU1lbW9yeTsKLX0KLQot
QnVmZmVyU3RvcmFnZTkgKkJ1ZmZlclN0b3JhZ2U5OjptYWtlQnVmZmVyU3RvcmFnZTkoQnVmZmVy
U3RvcmFnZSAqYnVmZmVyU3RvcmFnZSkKLXsKLSAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShC
dWZmZXJTdG9yYWdlOSosIGJ1ZmZlclN0b3JhZ2UpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
QnVmZmVyU3RvcmFnZTkqPihidWZmZXJTdG9yYWdlKTsKLX0KLQotdm9pZCAqQnVmZmVyU3RvcmFn
ZTk6OmdldERhdGEoKQotewotICAgIHJldHVybiBtTWVtb3J5OwotfQotCi12b2lkIEJ1ZmZlclN0
b3JhZ2U5OjpzZXREYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNp
Z25lZCBpbnQgb2Zmc2V0KQotewotICAgIGlmICghbU1lbW9yeSB8fCBvZmZzZXQgKyBzaXplID4g
bUFsbG9jYXRlZFNpemUpCi0gICAgewotICAgICAgICB1bnNpZ25lZCBpbnQgbmV3QWxsb2NhdGVk
U2l6ZSA9IG9mZnNldCArIHNpemU7Ci0gICAgICAgIHZvaWQgKm5ld01lbW9yeSA9IG5ldyBjaGFy
W25ld0FsbG9jYXRlZFNpemVdOwotCi0gICAgICAgIGlmIChvZmZzZXQgPiAwICYmIG1NZW1vcnkg
JiYgbUFsbG9jYXRlZFNpemUgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBtZW1jcHkobmV3
TWVtb3J5LCBtTWVtb3J5LCBzdGQ6Om1pbihvZmZzZXQsIG1BbGxvY2F0ZWRTaXplKSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBkZWxldGVbXSBtTWVtb3J5OwotICAgICAgICBtTWVtb3J5ID0gbmV3
TWVtb3J5OwotICAgICAgICBtQWxsb2NhdGVkU2l6ZSA9IG5ld0FsbG9jYXRlZFNpemU7Ci0gICAg
fQotCi0gICAgbVNpemUgPSBzdGQ6Om1heChtU2l6ZSwgb2Zmc2V0ICsgc2l6ZSk7Ci0gICAgaWYg
KGRhdGEpCi0gICAgewotICAgICAgICBtZW1jcHkocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obU1l
bW9yeSkgKyBvZmZzZXQsIGRhdGEsIHNpemUpOwotICAgIH0KLX0KLQotdm9pZCBCdWZmZXJTdG9y
YWdlOTo6Y2xlYXIoKQotewotICAgIG1TaXplID0gMDsKLX0KLQotdW5zaWduZWQgaW50IEJ1ZmZl
clN0b3JhZ2U5OjpnZXRTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVNpemU7Ci19Ci0KLWJv
b2wgQnVmZmVyU3RvcmFnZTk6OnN1cHBvcnRzRGlyZWN0QmluZGluZygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2U5LmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2U5LmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlODAzOTY5YmMzNWQ0ZWExMTFkYTIyODFmMjViM2Ux
NzFkZGMyMzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9y
YWdlOS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8v
IEJ1ZmZlclN0b3JhZ2U5LmggRGVmaW5lcyB0aGUgQnVmZmVyU3RvcmFnZTkgY2xhc3MuCi0KLSNp
Zm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0JVRkZFUlNUT1JBR0U5X0hfCi0jZGVmaW5lIExJQkdM
RVNWMl9SRU5ERVJFUl9CVUZGRVJTVE9SQUdFOV9IXwotCi0jaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL0J1ZmZlclN0b3JhZ2UuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLWNsYXNzIEJ1ZmZl
clN0b3JhZ2U5IDogcHVibGljIEJ1ZmZlclN0b3JhZ2UKLXsKLSAgcHVibGljOgotICAgIEJ1ZmZl
clN0b3JhZ2U5KCk7Ci0gICAgdmlydHVhbCB+QnVmZmVyU3RvcmFnZTkoKTsKLQotICAgIHN0YXRp
YyBCdWZmZXJTdG9yYWdlOSAqbWFrZUJ1ZmZlclN0b3JhZ2U5KEJ1ZmZlclN0b3JhZ2UgKmJ1ZmZl
clN0b3JhZ2UpOwotCi0gICAgdmlydHVhbCB2b2lkICpnZXREYXRhKCk7Ci0gICAgdmlydHVhbCB2
b2lkIHNldERhdGEoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVk
IGludCBvZmZzZXQpOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpOwotICAgIHZpcnR1YWwgdW5z
aWduZWQgaW50IGdldFNpemUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNEaXJl
Y3RCaW5kaW5nKCkgY29uc3Q7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9B
U1NJR04oQnVmZmVyU3RvcmFnZTkpOwotCi0gICAgdm9pZCAqbU1lbW9yeTsKLSAgICB1bnNpZ25l
ZCBpbnQgbUFsbG9jYXRlZFNpemU7Ci0KLSAgICB1bnNpZ25lZCBpbnQgbVNpemU7Ci19OwotCi19
Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfQlVGRkVSU1RPUkFHRTlfSF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvRmVu
Y2UxMS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L0ZlbmNlMTEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDExYzlhMGZjODJl
OGNlNTYxZjAwZjE0NjA2MTAyNGJmZjQyZGM1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvRmVuY2UxMS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotI2lu
Y2x1ZGUgInByZWNvbXBpbGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gRmVuY2UxMS5jcHA6IERl
ZmluZXMgdGhlIHJ4OjpGZW5jZTExIGNsYXNzIHdoaWNoIGltcGxlbWVudHMgcng6OkZlbmNlSW1w
bC4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZTExLmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIx
MS5oIgotCi1uYW1lc3BhY2UgcngKLXsKLQotRmVuY2UxMTo6RmVuY2UxMShyeDo6UmVuZGVyZXIx
MSAqcmVuZGVyZXIpCi17Ci0gICAgbVJlbmRlcmVyID0gcmVuZGVyZXI7Ci0gICAgbVF1ZXJ5ID0g
TlVMTDsKLX0KLQotRmVuY2UxMTo6fkZlbmNlMTEoKQotewotICAgIGlmIChtUXVlcnkpCi0gICAg
ewotICAgICAgICBtUXVlcnktPlJlbGVhc2UoKTsKLSAgICAgICAgbVF1ZXJ5ID0gTlVMTDsKLSAg
ICB9Ci19Ci0KLUdMYm9vbGVhbiBGZW5jZTExOjppc0ZlbmNlKCkKLXsKLSAgICAvLyBHTF9OVl9m
ZW5jZSBzcGVjOgotICAgIC8vIEEgbmFtZSByZXR1cm5lZCBieSBHZW5GZW5jZXNOViwgYnV0IG5v
dCB5ZXQgc2V0IHZpYSBTZXRGZW5jZU5WLCBpcyBub3QgdGhlIG5hbWUgb2YgYW4gZXhpc3Rpbmcg
ZmVuY2UuCi0gICAgcmV0dXJuIG1RdWVyeSAhPSBOVUxMOwotfQotCi12b2lkIEZlbmNlMTE6OnNl
dEZlbmNlKEdMZW51bSBjb25kaXRpb24pCi17Ci0gICAgaWYgKCFtUXVlcnkpCi0gICAgewotICAg
ICAgICBEM0QxMV9RVUVSWV9ERVNDIHF1ZXJ5RGVzYzsKLSAgICAgICAgcXVlcnlEZXNjLlF1ZXJ5
ID0gRDNEMTFfUVVFUllfRVZFTlQ7Ci0gICAgICAgIHF1ZXJ5RGVzYy5NaXNjRmxhZ3MgPSAwOwot
Ci0gICAgICAgIGlmIChGQUlMRUQobVJlbmRlcmVyLT5nZXREZXZpY2UoKS0+Q3JlYXRlUXVlcnko
JnF1ZXJ5RGVzYywgJm1RdWVyeSkpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbVJlbmRl
cmVyLT5nZXREZXZpY2VDb250ZXh0KCktPkVuZChtUXVlcnkpOwotCi0gICAgc2V0Q29uZGl0aW9u
KGNvbmRpdGlvbik7Ci0gICAgc2V0U3RhdHVzKEdMX0ZBTFNFKTsKLX0KLQotR0xib29sZWFuIEZl
bmNlMTE6OnRlc3RGZW5jZSgpCi17Ci0gICAgaWYgKG1RdWVyeSA9PSBOVUxMKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfVFJVRSk7Ci0g
ICAgfQotCi0gICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQo
KS0+R2V0RGF0YShtUXVlcnksIE5VTEwsIDAsIDApOwotCi0gICAgaWYgKG1SZW5kZXJlci0+aXNE
ZXZpY2VMb3N0KCkpCi0gICAgewotICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSwgR0xfVFJVRSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKHJlc3VsdCA9PSBTX09LIHx8IHJl
c3VsdCA9PSBTX0ZBTFNFKTsKLSAgICBzZXRTdGF0dXMocmVzdWx0ID09IFNfT0spOwotICAgIHJl
dHVybiBnZXRTdGF0dXMoKTsKLX0KLQotdm9pZCBGZW5jZTExOjpmaW5pc2hGZW5jZSgpCi17Ci0g
ICAgaWYgKG1RdWVyeSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgd2hpbGUgKCF0ZXN0RmVuY2UoKSkK
LSAgICB7Ci0gICAgICAgIFNsZWVwKDApOwotICAgIH0KLX0KLQotdm9pZCBGZW5jZTExOjpnZXRG
ZW5jZWl2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcykKLXsKLSAgICBpZiAobVF1ZXJ5ID09
IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHBuYW1lKQotICAgIHsKLSAgICAgIGNhc2UgR0xf
RkVOQ0VfU1RBVFVTX05WOgotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBHTF9OVl9mZW5jZSBz
cGVjOgotICAgICAgICAgICAgLy8gT25jZSB0aGUgc3RhdHVzIG9mIGEgZmVuY2UgaGFzIGJlZW4g
ZmluaXNoZWQgKHZpYSBGaW5pc2hGZW5jZU5WKSBvciB0ZXN0ZWQgYW5kIHRoZSByZXR1cm5lZCBz
dGF0dXMgaXMgVFJVRSAodmlhIGVpdGhlciBUZXN0RmVuY2VOVgotICAgICAgICAgICAgLy8gb3Ig
R2V0RmVuY2Vpdk5WIHF1ZXJ5aW5nIHRoZSBGRU5DRV9TVEFUVVNfTlYpLCB0aGUgc3RhdHVzIHJl
bWFpbnMgVFJVRSB1bnRpbCB0aGUgbmV4dCBTZXRGZW5jZU5WIG9mIHRoZSBmZW5jZS4KLSAgICAg
ICAgICAgIGlmIChnZXRTdGF0dXMoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBw
YXJhbXNbMF0gPSBHTF9UUlVFOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXItPmdldERldmljZUNv
bnRleHQoKS0+R2V0RGF0YShtUXVlcnksIE5VTEwsIDAsIEQzRDExX0FTWU5DX0dFVERBVEFfRE9O
T1RGTFVTSCk7Ci0KLSAgICAgICAgICAgIGlmIChtUmVuZGVyZXItPmlzRGV2aWNlTG9zdCgpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9IEdMX1RSVUU7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBTX09LIHx8IHJlc3VsdCA9PSBT
X0ZBTFNFKTsKLSAgICAgICAgICAgIHNldFN0YXR1cyhyZXN1bHQgPT0gU19PSyk7Ci0gICAgICAg
ICAgICBwYXJhbXNbMF0gPSBnZXRTdGF0dXMoKTsKLQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgIGNhc2UgR0xfRkVOQ0VfQ09ORElUSU9OX05WOgotICAgICAgICBwYXJhbXNb
MF0gPSBnZXRDb25kaXRpb24oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9GZW5jZTExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL0ZlbmNlMTEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYTUzOThiY2ExNDkwMDY0N2IwM2RmMjdhMTAxOTFkOTA2OTE5MTExMi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ZlbmNlMTEuaAorKysgL2Rldi9udWxsCkBAIC0xLDM5
ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBGZW5jZTExLmg6IERlZmluZXMgdGhlIHJ4OjpG
ZW5jZTExIGNsYXNzIHdoaWNoIGltcGxlbWVudHMgcng6OkZlbmNlSW1wbC4KLQotI2lmbmRlZiBM
SUJHTEVTVjJfUkVOREVSRVJfRmVuY2UxMV9IXwotI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJf
RmVuY2UxMV9IXwotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0ZlbmNlSW1wbC5oIgot
Ci1uYW1lc3BhY2UgcngKLXsKLWNsYXNzIFJlbmRlcmVyMTE7Ci0KLWNsYXNzIEZlbmNlMTEgOiBw
dWJsaWMgRmVuY2VJbXBsCi17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBGZW5jZTExKHJ4OjpS
ZW5kZXJlcjExICpyZW5kZXJlcik7Ci0gICAgdmlydHVhbCB+RmVuY2UxMSgpOwotCi0gICAgR0xi
b29sZWFuIGlzRmVuY2UoKTsKLSAgICB2b2lkIHNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pOwot
ICAgIEdMYm9vbGVhbiB0ZXN0RmVuY2UoKTsKLSAgICB2b2lkIGZpbmlzaEZlbmNlKCk7Ci0gICAg
dm9pZCBnZXRGZW5jZWl2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7Ci0KLSAgcHJpdmF0
ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRmVuY2UxMSk7Ci0KLSAgICByeDo6UmVu
ZGVyZXIxMSAqbVJlbmRlcmVyOwotICAgIElEM0QxMVF1ZXJ5ICptUXVlcnk7Ci19OwotCi19Ci0K
LSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfRkVOQ0UxMV9IXwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZTkuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZTkuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjA2NGQ3ZTUyYmFmYWU5NzUxNTA4NGE4
M2FiYjYyOGE0YjhiM2Y0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvRmVu
Y2U5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzNSArMCwwIEBACi0jaW5jbHVkZSAicHJlY29t
cGlsZWQuaCIKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBGZW5jZTkuY3BwOiBEZWZpbmVzIHRoZSByeDo6
RmVuY2U5IGNsYXNzLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0ZlbmNlOS5oIgot
I2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L3JlbmRlcmVyOV91dGlscy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJl
cjkuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLUZlbmNlOTo6RmVuY2U5KHJ4OjpSZW5kZXJlcjkg
KnJlbmRlcmVyKQotewotICAgIG1SZW5kZXJlciA9IHJlbmRlcmVyOwotICAgIG1RdWVyeSA9IE5V
TEw7Ci19Ci0KLUZlbmNlOTo6fkZlbmNlOSgpCi17Ci0gICAgaWYgKG1RdWVyeSkKLSAgICB7Ci0g
ICAgICAgIG1SZW5kZXJlci0+ZnJlZUV2ZW50UXVlcnkobVF1ZXJ5KTsKLSAgICAgICAgbVF1ZXJ5
ID0gTlVMTDsKLSAgICB9Ci19Ci0KLUdMYm9vbGVhbiBGZW5jZTk6OmlzRmVuY2UoKQotewotICAg
IC8vIEdMX05WX2ZlbmNlIHNwZWM6Ci0gICAgLy8gQSBuYW1lIHJldHVybmVkIGJ5IEdlbkZlbmNl
c05WLCBidXQgbm90IHlldCBzZXQgdmlhIFNldEZlbmNlTlYsIGlzIG5vdCB0aGUgbmFtZSBvZiBh
biBleGlzdGluZyBmZW5jZS4KLSAgICByZXR1cm4gbVF1ZXJ5ICE9IE5VTEw7Ci19Ci0KLXZvaWQg
RmVuY2U5OjpzZXRGZW5jZShHTGVudW0gY29uZGl0aW9uKQotewotICAgIGlmICghbVF1ZXJ5KQot
ICAgIHsKLSAgICAgICAgbVF1ZXJ5ID0gbVJlbmRlcmVyLT5hbGxvY2F0ZUV2ZW50UXVlcnkoKTsK
LSAgICAgICAgaWYgKCFtUXVlcnkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBIUkVTVUxU
IHJlc3VsdCA9IG1RdWVyeS0+SXNzdWUoRDNESVNTVUVfRU5EKTsKLSAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOwotCi0gICAgc2V0Q29uZGl0aW9uKGNvbmRpdGlvbik7Ci0gICAgc2V0U3Rh
dHVzKEdMX0ZBTFNFKTsKLX0KLQotR0xib29sZWFuIEZlbmNlOTo6dGVzdEZlbmNlKCkKLXsKLSAg
ICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OLCBHTF9UUlVFKTsKLSAgICB9Ci0KLSAgICBIUkVTVUxUIHJlc3Vs
dCA9IG1RdWVyeS0+R2V0RGF0YShOVUxMLCAwLCBEM0RHRVREQVRBX0ZMVVNIKTsKLQotICAgIGlm
IChkM2Q5Ojppc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQotICAgIHsKLSAgICAgICAgbVJlbmRl
cmVyLT5ub3RpZnlEZXZpY2VMb3N0KCk7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSwgR0xfVFJVRSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKHJlc3VsdCA9PSBTX09L
IHx8IHJlc3VsdCA9PSBTX0ZBTFNFKTsKLSAgICBzZXRTdGF0dXMocmVzdWx0ID09IFNfT0spOwot
ICAgIHJldHVybiBnZXRTdGF0dXMoKTsKLX0KLQotdm9pZCBGZW5jZTk6OmZpbmlzaEZlbmNlKCkK
LXsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIXRlc3RGZW5j
ZSgpKQotICAgIHsKLSAgICAgICAgU2xlZXAoMCk7Ci0gICAgfQotfQotCi12b2lkIEZlbmNlOTo6
Z2V0RmVuY2VpdihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpCi17Ci0gICAgaWYgKG1RdWVy
eSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgfQotCi0gICAgc3dpdGNoIChwbmFtZSkKLSAgICB7Ci0gICAgICAgIGNh
c2UgR0xfRkVOQ0VfU1RBVFVTX05WOgotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBHTF9OVl9m
ZW5jZSBzcGVjOgotICAgICAgICAgICAgLy8gT25jZSB0aGUgc3RhdHVzIG9mIGEgZmVuY2UgaGFz
IGJlZW4gZmluaXNoZWQgKHZpYSBGaW5pc2hGZW5jZU5WKSBvciB0ZXN0ZWQgYW5kIHRoZSByZXR1
cm5lZCBzdGF0dXMgaXMgVFJVRSAodmlhIGVpdGhlciBUZXN0RmVuY2VOVgotICAgICAgICAgICAg
Ly8gb3IgR2V0RmVuY2Vpdk5WIHF1ZXJ5aW5nIHRoZSBGRU5DRV9TVEFUVVNfTlYpLCB0aGUgc3Rh
dHVzIHJlbWFpbnMgVFJVRSB1bnRpbCB0aGUgbmV4dCBTZXRGZW5jZU5WIG9mIHRoZSBmZW5jZS4K
LSAgICAgICAgICAgIGlmIChnZXRTdGF0dXMoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBwYXJhbXNbMF0gPSBHTF9UUlVFOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtUXVl
cnktPkdldERhdGEoTlVMTCwgMCwgMCk7Ci0KLSAgICAgICAgICAgIGlmIChkM2Q5Ojppc0Rldmlj
ZUxvc3RFcnJvcihyZXN1bHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBhcmFt
c1swXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICAgICAgbVJlbmRlcmVyLT5ub3RpZnlEZXZpY2VM
b3N0KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBTX09LIHx8
IHJlc3VsdCA9PSBTX0ZBTFNFKTsKLSAgICAgICAgICAgIHNldFN0YXR1cyhyZXN1bHQgPT0gU19P
Syk7Ci0gICAgICAgICAgICBwYXJhbXNbMF0gPSBnZXRTdGF0dXMoKTsKLQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHTF9GRU5DRV9DT05ESVRJT05fTlY6Ci0g
ICAgICAgICAgICBwYXJhbXNbMF0gPSBnZXRDb25kaXRpb24oKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ZlbmNlOS5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZTku
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWYxNzY0MWU1MTlhYjQ3ODQwN2U4MGNj
YmZkMjUzODBhM2RjYzhiYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0Zl
bmNlOS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8v
IEZlbmNlOS5oOiBEZWZpbmVzIHRoZSByeDo6RmVuY2U5IGNsYXNzIHdoaWNoIGltcGxlbWVudHMg
cng6OkZlbmNlSW1wbC4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfRkVOQ0U5X0hfCi0j
ZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9GRU5DRTlfSF8KLQotI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9GZW5jZUltcGwuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci1jbGFzcyBSZW5kZXJl
cjk7Ci0KLWNsYXNzIEZlbmNlOSA6IHB1YmxpYyBGZW5jZUltcGwKLXsKLSAgcHVibGljOgotICAg
IGV4cGxpY2l0IEZlbmNlOShyeDo6UmVuZGVyZXI5ICpyZW5kZXJlcik7Ci0gICAgdmlydHVhbCB+
RmVuY2U5KCk7Ci0KLSAgICBHTGJvb2xlYW4gaXNGZW5jZSgpOwotICAgIHZvaWQgc2V0RmVuY2Uo
R0xlbnVtIGNvbmRpdGlvbik7Ci0gICAgR0xib29sZWFuIHRlc3RGZW5jZSgpOwotICAgIHZvaWQg
ZmluaXNoRmVuY2UoKTsKLSAgICB2b2lkIGdldEZlbmNlaXYoR0xlbnVtIHBuYW1lLCBHTGludCAq
cGFyYW1zKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihGZW5j
ZTkpOwotCi0gICAgcng6OlJlbmRlcmVyOSAqbVJlbmRlcmVyOwotICAgIElEaXJlY3QzRFF1ZXJ5
OSAqbVF1ZXJ5OwotfTsKLQotfQotCi0jZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX0ZFTkNF
OV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9JbWFnZTExLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvSW1hZ2UxMS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5
Yzg5MjJkMDczZDBhNDFhNzkwNDY0YmYyYThhZjRhYzM5NDFjMjQuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZTExLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ1NyAr
MCwwIEBACi0jaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBJbWFn
ZTExLmg6IEltcGxlbWVudHMgdGhlIHJ4OjpJbWFnZTExIGNsYXNzLCB3aGljaCBhY3RzIGFzIHRo
ZSBpbnRlcmZhY2UgdG8KLS8vIHRoZSBhY3R1YWwgdW5kZXJseWluZyByZXNvdXJjZXMgb2YgYSBU
ZXh0dXJlCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIxMS5oIgotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZTExLmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlMTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVi
dWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCi0KLSNpbmNsdWRl
ICJsaWJHTEVTdjIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKLSNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXIxMV91dGlscy5oIgotI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9nZW5lcmF0ZW1pcC5oIgotCi1uYW1lc3BhY2UgcngKLXsKLQot
SW1hZ2UxMTo6SW1hZ2UxMSgpCi17Ci0gICAgbVN0YWdpbmdUZXh0dXJlID0gTlVMTDsKLSAgICBt
UmVuZGVyZXIgPSBOVUxMOwotICAgIG1EWEdJRm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5LTk9XTjsK
LX0KLQotSW1hZ2UxMTo6fkltYWdlMTEoKQotewotICAgIGlmIChtU3RhZ2luZ1RleHR1cmUpCi0g
ICAgewotICAgICAgICBtU3RhZ2luZ1RleHR1cmUtPlJlbGVhc2UoKTsKLSAgICB9Ci19Ci0KLUlt
YWdlMTEgKkltYWdlMTE6Om1ha2VJbWFnZTExKEltYWdlICppbWcpCi17Ci0gICAgQVNTRVJUKEhB
U19EWU5BTUlDX1RZUEUocng6OkltYWdlMTEqLCBpbWcpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8cng6OkltYWdlMTEqPihpbWcpOwotfQotCi12b2lkIEltYWdlMTE6OmdlbmVyYXRlTWlwbWFw
KEltYWdlMTEgKmRlc3QsIEltYWdlMTEgKnNyYykKLXsKLSAgICBBU1NFUlQoc3JjLT5nZXREWEdJ
Rm9ybWF0KCkgPT0gZGVzdC0+Z2V0RFhHSUZvcm1hdCgpKTsKLSAgICBBU1NFUlQoc3JjLT5nZXRX
aWR0aCgpID09IDEgfHwgc3JjLT5nZXRXaWR0aCgpIC8gMiA9PSBkZXN0LT5nZXRXaWR0aCgpKTsK
LSAgICBBU1NFUlQoc3JjLT5nZXRIZWlnaHQoKSA9PSAxIHx8IHNyYy0+Z2V0SGVpZ2h0KCkgLyAy
ID09IGRlc3QtPmdldEhlaWdodCgpKTsKLQotICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBk
ZXN0TWFwcGVkLCBzcmNNYXBwZWQ7Ci0gICAgZGVzdC0+bWFwKEQzRDExX01BUF9XUklURSwgJmRl
c3RNYXBwZWQpOwotICAgIHNyYy0+bWFwKEQzRDExX01BUF9SRUFELCAmc3JjTWFwcGVkKTsKLQot
ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IHVuc2lnbmVkIGNoYXIqPihzcmNNYXBwZWQucERhdGEpOwotICAgIHVuc2lnbmVkIGNoYXIg
KmRlc3REYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZGVzdE1hcHBlZC5w
RGF0YSk7Ci0KLSAgICBpZiAoc291cmNlRGF0YSAmJiBkZXN0RGF0YSkKLSAgICB7Ci0gICAgICAg
IHN3aXRjaCAoc3JjLT5nZXREWEdJRm9ybWF0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNl
IERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOgotICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
QjhHOFI4QThfVU5PUk06Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxSOEc4QjhBOD4oc3JjLT5n
ZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0
Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQThfVU5PUk06Ci0gICAgICAgICAgICBHZW5lcmF0
ZU1pcDxBOD4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRhLCBz
cmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVU5PUk06Ci0gICAg
ICAgICAgICBHZW5lcmF0ZU1pcDxSOD4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgp
LCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJv
d1BpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjMyRzMyQjMyQTMyX0ZMT0FUOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8QTMyQjMyRzMyUjMy
Rj4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBw
ZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FUOgotICAg
ICAgICAgICAgR2VuZXJhdGVNaXA8UjMyRzMyQjMyRj4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdl
dEhlaWdodCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0
TWFwcGVkLlJvd1BpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfUjE2RzE2QjE2QTE2X0ZMT0FUOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8QTE2
QjE2RzE2UjE2Rj4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRh
LCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9VTk9STToK
LSAgICAgICAgICAgIEdlbmVyYXRlTWlwPFI4Rzg+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRI
ZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1h
cHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERYR0lf
Rk9STUFUX1IxNl9GTE9BVDoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPFIxNkY+KHNyYy0+Z2V0
V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNo
LCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9GTE9BVDoKLSAgICAgICAgICAgIEdlbmVy
YXRlTWlwPFIxNkcxNkY+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNl
RGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMl9GTE9B
VDoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPFIzMkY+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5n
ZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVz
dE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERY
R0lfRk9STUFUX1IzMkczMl9GTE9BVDoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPFIzMkczMkY+
KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVk
LlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVzdC0+dW5tYXAoKTsKLSAg
ICAgICAgc3JjLT51bm1hcCgpOwotICAgIH0KLQotICAgIGRlc3QtPm1hcmtEaXJ0eSgpOwotfQot
Ci1ib29sIEltYWdlMTE6OmlzRGlydHkoKSBjb25zdAotewotICAgIHJldHVybiAobVN0YWdpbmdU
ZXh0dXJlICYmIG1EaXJ0eSk7Ci19Ci0KLWJvb2wgSW1hZ2UxMTo6dXBkYXRlU3VyZmFjZShUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIFRl
eHR1cmVTdG9yYWdlMTFfMkQgKnN0b3JhZ2UxMSA9IFRleHR1cmVTdG9yYWdlMTFfMkQ6Om1ha2VU
ZXh0dXJlU3RvcmFnZTExXzJEKHN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKLSAgICBy
ZXR1cm4gc3RvcmFnZTExLT51cGRhdGVTdWJyZXNvdXJjZUxldmVsKGdldFN0YWdpbmdUZXh0dXJl
KCksIGdldFN0YWdpbmdTdWJyZXNvdXJjZSgpLCBsZXZlbCwgMCwgeG9mZnNldCwgeW9mZnNldCwg
d2lkdGgsIGhlaWdodCk7Ci19Ci0KLWJvb2wgSW1hZ2UxMTo6dXBkYXRlU3VyZmFjZShUZXh0dXJl
U3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQot
ewotICAgIFRleHR1cmVTdG9yYWdlMTFfQ3ViZSAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2Ux
MV9DdWJlOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKHN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0
YW5jZSgpKTsKLSAgICByZXR1cm4gc3RvcmFnZTExLT51cGRhdGVTdWJyZXNvdXJjZUxldmVsKGdl
dFN0YWdpbmdUZXh0dXJlKCksIGdldFN0YWdpbmdTdWJyZXNvdXJjZSgpLCBsZXZlbCwgZmFjZSwg
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLWJvb2wgSW1hZ2UxMTo6cmVk
ZWZpbmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIGJvb2wgZm9yY2VSZWxlYXNlKQotewotICAgIGlmIChtV2lk
dGggIT0gd2lkdGggfHwKLSAgICAgICAgbUhlaWdodCAhPSBoZWlnaHQgfHwKLSAgICAgICAgbUlu
dGVybmFsRm9ybWF0ICE9IGludGVybmFsZm9ybWF0IHx8Ci0gICAgICAgIGZvcmNlUmVsZWFzZSkK
LSAgICB7Ci0gICAgICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKHJl
bmRlcmVyKTsKLQotICAgICAgICBtV2lkdGggPSB3aWR0aDsKLSAgICAgICAgbUhlaWdodCA9IGhl
aWdodDsKLSAgICAgICAgbUludGVybmFsRm9ybWF0ID0gaW50ZXJuYWxmb3JtYXQ7Ci0gICAgICAg
IC8vIGNvbXB1dGUgdGhlIGQzZCBmb3JtYXQgdGhhdCB3aWxsIGJlIHVzZWQKLSAgICAgICAgbURY
R0lGb3JtYXQgPSBnbF9kM2QxMTo6Q29udmVydFRleHR1cmVGb3JtYXQoaW50ZXJuYWxmb3JtYXQp
OwotICAgICAgICBtQWN0dWFsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRUZXh0dXJlSW50ZXJu
YWxGb3JtYXQobURYR0lGb3JtYXQpOwotCi0gICAgICAgIGlmIChtU3RhZ2luZ1RleHR1cmUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1TdGFnaW5nVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAg
ICAgICAgbVN0YWdpbmdUZXh0dXJlID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIElt
YWdlMTE6OmlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFRleHR1cmVT
dG9yYWdlMTE6OklzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUobURYR0lGb3JtYXQpOwotfQotCi1E
WEdJX0ZPUk1BVCBJbWFnZTExOjpnZXREWEdJRm9ybWF0KCkgY29uc3QKLXsKLSAgICAvLyB0aGlz
IHNob3VsZCBvbmx5IGhhcHBlbiBpZiB0aGUgaW1hZ2UgaGFzbid0IGJlZW4gcmVkZWZpbmVkIGZp
cnN0Ci0gICAgLy8gd2hpY2ggd291bGQgYmUgYSBidWcgYnkgdGhlIGNhbGxlcgotICAgIEFTU0VS
VChtRFhHSUZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKTsKLQotICAgIHJldHVybiBtRFhH
SUZvcm1hdDsKLX0KLQotLy8gU3RvcmUgdGhlIHBpeGVsIHJlY3RhbmdsZSBkZXNpZ25hdGVkIGJ5
IHhvZmZzZXQseW9mZnNldCx3aWR0aCxoZWlnaHQgd2l0aCBwaXhlbHMgc3RvcmVkIGFzIGZvcm1h
dC90eXBlIGF0IGlucHV0Ci0vLyBpbnRvIHRoZSB0YXJnZXQgcGl4ZWwgcmVjdGFuZ2xlLgotdm9p
ZCBJbWFnZTExOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5w
YWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCkKLXsKLSAgICBEM0QxMV9NQVBQRURfU1VC
UkVTT1VSQ0UgbWFwcGVkSW1hZ2U7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBtYXAoRDNEMTFfTUFQ
X1dSSVRFLCAmbWFwcGVkSW1hZ2UpOwotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0g
ICAgICAgIEVSUigiQ291bGQgbm90IG1hcCBpbWFnZSBmb3IgbG9hZGluZy4iKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSBnbDo6Q29tcHV0
ZVBpdGNoKHdpZHRoLCBtSW50ZXJuYWxGb3JtYXQsIHVucGFja0FsaWdubWVudCk7Ci0gICAgc2l6
ZV90IHBpeGVsU2l6ZSA9IGQzZDExOjpDb21wdXRlUGl4ZWxTaXplQml0cyhtRFhHSUZvcm1hdCkg
LyA4OwotICAgIHZvaWQqIG9mZnNldE1hcHBlZERhdGEgPSAodm9pZCopKChCWVRFICopbWFwcGVk
SW1hZ2UucERhdGEgKyAoeW9mZnNldCAqIG1hcHBlZEltYWdlLlJvd1BpdGNoICsgeG9mZnNldCAq
IHBpeGVsU2l6ZSkpOwotCi0gICAgc3dpdGNoIChtSW50ZXJuYWxGb3JtYXQpCi0gICAgewotICAg
ICAgY2FzZSBHTF9BTFBIQThfRVhUOgotICAgICAgICBsb2FkQWxwaGFEYXRhVG9OYXRpdmUod2lk
dGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZz
ZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRThf
RVhUOgotICAgICAgICBsb2FkTHVtaW5hbmNlRGF0YVRvTmF0aXZlT3JCR1JBKHdpZHRoLCBoZWln
aHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVk
RGF0YSwgZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQUxQSEEzMkZfRVhU
OgotICAgICAgICBsb2FkQWxwaGFGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTMyRl9FWFQ6Ci0gICAgICAgIGxv
YWRMdW1pbmFuY2VGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX0FMUEhBMTZGX0VYVDoKLSAgICAgICAgbG9hZEFscGhhSGFsZkZs
b2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1h
Z2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfTFVNSU5BTkNFMTZGX0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5jZUhhbGZGbG9hdERh
dGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJv
d1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X0xVTUlOQU5DRThfQUxQSEE4X0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhRGF0YVRv
TmF0aXZlT3JCR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFn
ZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSwgZmFsc2UpOwotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5j
ZUFscGhhRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBt
YXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhUOgotICAgICAgICBsb2FkTHVtaW5h
bmNlQWxwaGFIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgICAgbG9hZFJHQlVCeXRlRGF0YVRv
UkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0
Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdC
NTY1OgotICAgICAgICBsb2FkUkdCNTY1RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBp
dGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQThfT0VTOgotICAgICAgICBsb2FkUkdCQVVC
eXRlRGF0YVRvTmF0aXZlKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJ
bWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9SR0JBNDoKLSAgICAgICAgbG9hZFJHQkE0NDQ0RGF0YVRvUkdCQSh3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBl
ZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCNV9BMToKLSAgICAgICAg
bG9hZFJHQkE1NTUxRGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwg
bWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfQkdSQThfRVhUOgotICAgICAgICBsb2FkQkdSQURhdGFUb0JHUkEod2lk
dGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZz
ZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQjMyRl9FWFQ6
Ci0gICAgICAgIGxvYWRSR0JGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQjE2Rl9FWFQ6Ci0gICAgICAgIGxvYWRSR0JIYWxm
RmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJ
bWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9SR0JBMzJGX0VYVDoKLSAgICAgICAgbG9hZFJHQkFGbG9hdERhdGFUb1JHQkEod2lk
dGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZz
ZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQkExNkZfRVhU
OgotICAgICAgICBsb2FkUkdCQUhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAKLSAgICB9Ci0K
LSAgICB1bm1hcCgpOwotfQotCi12b2lkIEltYWdlMTE6OmxvYWRDb21wcmVzc2VkRGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQpCi17Ci0g
ICAgQVNTRVJUKHhvZmZzZXQgJSA0ID09IDApOwotICAgIEFTU0VSVCh5b2Zmc2V0ICUgNCA9PSAw
KTsKLQotICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRJbWFnZTsKLSAgICBIUkVT
VUxUIHJlc3VsdCA9IG1hcChEM0QxMV9NQVBfV1JJVEUsICZtYXBwZWRJbWFnZSk7Ci0gICAgaWYg
KEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgRVJSKCJDb3VsZCBub3QgbWFwIGltYWdl
IGZvciBsb2FkaW5nLiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gU2l6ZSBj
b21wdXRhdGlvbiBhc3N1bWVzIGEgNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQK
LSAgICBzaXplX3QgYmxvY2tTaXplID0gZDNkMTE6OkNvbXB1dGVCbG9ja1NpemVCaXRzKG1EWEdJ
Rm9ybWF0KSAvIDg7Ci0gICAgdm9pZCogb2Zmc2V0TWFwcGVkRGF0YSA9ICh2b2lkKikoKEJZVEUg
KiltYXBwZWRJbWFnZS5wRGF0YSArICgoeW9mZnNldCAvIDQpICogbWFwcGVkSW1hZ2UuUm93UGl0
Y2ggKyAoeG9mZnNldCAvIDQpICogYmxvY2tTaXplKSk7Ci0KLSAgICBHTHNpemVpIGlucHV0U2l6
ZSA9IGdsOjpDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhlaWdodCwgbUludGVybmFsRm9y
bWF0KTsKLSAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSBnbDo6Q29tcHV0ZUNvbXByZXNzZWRQaXRj
aCh3aWR0aCwgbUludGVybmFsRm9ybWF0KTsKLSAgICBpbnQgcm93cyA9IGlucHV0U2l6ZSAvIGlu
cHV0UGl0Y2g7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dzOyArK2kpCi0gICAgewotICAg
ICAgICBtZW1jcHkoKHZvaWQqKSgoQllURSopb2Zmc2V0TWFwcGVkRGF0YSArIGkgKiBtYXBwZWRJ
bWFnZS5Sb3dQaXRjaCksICh2b2lkKikoKEJZVEUqKWlucHV0ICsgaSAqIGlucHV0UGl0Y2gpLCBp
bnB1dFBpdGNoKTsKLSAgICB9Ci0KLSAgICB1bm1hcCgpOwotfQotCi12b2lkIEltYWdlMTE6OmNv
cHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAqc291cmNlKQotewotICAg
IGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gc291cmNlLT5nZXRSZWFkQ29sb3JidWZm
ZXIoKTsKLQotICAgIGlmIChjb2xvcmJ1ZmZlciAmJiBjb2xvcmJ1ZmZlci0+Z2V0QWN0dWFsRm9y
bWF0KCkgPT0gKEdMdWludCltQWN0dWFsRm9ybWF0KQotICAgIHsKLSAgICAgICAgLy8gTm8gY29u
dmVyc2lvbiBuZWVkZWQtLSB1c2UgY29weWJhY2sgZmFzdHBhdGgKLSAgICAgICAgSUQzRDExVGV4
dHVyZTJEICpjb2xvckJ1ZmZlclRleHR1cmUgPSBOVUxMOwotICAgICAgICB1bnNpZ25lZCBpbnQg
c3VicmVzb3VyY2VJbmRleCA9IDA7Ci0KLSAgICAgICAgaWYgKG1SZW5kZXJlci0+Z2V0UmVuZGVy
VGFyZ2V0UmVzb3VyY2UoY29sb3JidWZmZXIsICZzdWJyZXNvdXJjZUluZGV4LCAmY29sb3JCdWZm
ZXJUZXh0dXJlKSkKLSAgICAgICAgewotICAgICAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0Mg
dGV4dHVyZURlc2M7Ci0gICAgICAgICAgICBjb2xvckJ1ZmZlclRleHR1cmUtPkdldERlc2MoJnRl
eHR1cmVEZXNjKTsKLQotICAgICAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVy
ZXItPmdldERldmljZSgpOwotICAgICAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqZGV2aWNl
Q29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotCi0gICAgICAgICAgICBJ
RDNEMTFUZXh0dXJlMkQqIHNyY1RleCA9IE5VTEw7Ci0gICAgICAgICAgICBpZiAodGV4dHVyZURl
c2MuU2FtcGxlRGVzYy5Db3VudCA+IDEpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
RDNEMTFfVEVYVFVSRTJEX0RFU0MgcmVzb2x2ZURlc2M7Ci0gICAgICAgICAgICAgICAgcmVzb2x2
ZURlc2MuV2lkdGggPSB0ZXh0dXJlRGVzYy5XaWR0aDsKLSAgICAgICAgICAgICAgICByZXNvbHZl
RGVzYy5IZWlnaHQgPSB0ZXh0dXJlRGVzYy5IZWlnaHQ7Ci0gICAgICAgICAgICAgICAgcmVzb2x2
ZURlc2MuTWlwTGV2ZWxzID0gMTsKLSAgICAgICAgICAgICAgICByZXNvbHZlRGVzYy5BcnJheVNp
emUgPSAxOwotICAgICAgICAgICAgICAgIHJlc29sdmVEZXNjLkZvcm1hdCA9IHRleHR1cmVEZXNj
LkZvcm1hdDsKLSAgICAgICAgICAgICAgICByZXNvbHZlRGVzYy5TYW1wbGVEZXNjLkNvdW50ID0g
MTsKLSAgICAgICAgICAgICAgICByZXNvbHZlRGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOwot
ICAgICAgICAgICAgICAgIHJlc29sdmVEZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsK
LSAgICAgICAgICAgICAgICByZXNvbHZlRGVzYy5CaW5kRmxhZ3MgPSAwOwotICAgICAgICAgICAg
ICAgIHJlc29sdmVEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKLSAgICAgICAgICAgICAgICByZXNv
bHZlRGVzYy5NaXNjRmxhZ3MgPSAwOwotCi0gICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQg
PSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmcmVzb2x2ZURlc2MsIE5VTEwsICZzcmNUZXgpOwot
ICAgICAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIGNyZWF0ZSByZXNvbHZlIHRleHR1cmUg
Zm9yIEltYWdlMTE6OmNvcHksIEhSRVNVTFQ6IDB4JVguIiwgcmVzdWx0KTsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGRl
dmljZUNvbnRleHQtPlJlc29sdmVTdWJyZXNvdXJjZShzcmNUZXgsIDAsIGNvbG9yQnVmZmVyVGV4
dHVyZSwgc3VicmVzb3VyY2VJbmRleCwgdGV4dHVyZURlc2MuRm9ybWF0KTsKLSAgICAgICAgICAg
ICAgICBzdWJyZXNvdXJjZUluZGV4ID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzcmNUZXggPSBjb2xvckJ1ZmZlclRl
eHR1cmU7Ci0gICAgICAgICAgICAgICAgc3JjVGV4LT5BZGRSZWYoKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgRDNEMTFfQk9YIHNyY0JveDsKLSAgICAgICAgICAgIHNyY0JveC5sZWZ0
ID0geDsKLSAgICAgICAgICAgIHNyY0JveC5yaWdodCA9IHggKyB3aWR0aDsKLSAgICAgICAgICAg
IHNyY0JveC50b3AgPSB5OwotICAgICAgICAgICAgc3JjQm94LmJvdHRvbSA9IHkgKyBoZWlnaHQ7
Ci0gICAgICAgICAgICBzcmNCb3guZnJvbnQgPSAwOwotICAgICAgICAgICAgc3JjQm94LmJhY2sg
PSAxOwotCi0gICAgICAgICAgICBkZXZpY2VDb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24o
bVN0YWdpbmdUZXh0dXJlLCAwLCB4b2Zmc2V0LCB5b2Zmc2V0LCAwLCBzcmNUZXgsIHN1YnJlc291
cmNlSW5kZXgsICZzcmNCb3gpOwotCi0gICAgICAgICAgICBzcmNUZXgtPlJlbGVhc2UoKTsKLSAg
ICAgICAgICAgIGNvbG9yQnVmZmVyVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICB9Ci0gICAg
fQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgZm9ybWF0IHJlcXVpcmVzIGNvbnZl
cnNpb24sIHNvIHdlIG11c3QgY29weSB0aGUgdGV4dHVyZSB0byBzdGFnaW5nIGFuZCBtYW51YWxs
eSBjb252ZXJ0IHZpYSByZWFkUGl4ZWxzCi0gICAgICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJD
RSBtYXBwZWRJbWFnZTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtYXAoRDNEMTFfTUFQX1dS
SVRFLCAmbWFwcGVkSW1hZ2UpOwotCi0gICAgICAgIC8vIGRldGVybWluZSB0aGUgb2Zmc2V0IGNv
b3JkaW5hdGUgaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyCi0gICAgICAgIEdMc2l6ZWkgcm93
T2Zmc2V0ID0gZ2w6OkNvbXB1dGVQaXhlbFNpemUobUFjdHVhbEZvcm1hdCkgKiB4b2Zmc2V0Owot
ICAgICAgICB2b2lkICpkYXRhT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG1h
cHBlZEltYWdlLnBEYXRhKSArIG1hcHBlZEltYWdlLlJvd1BpdGNoICogeW9mZnNldCArIHJvd09m
ZnNldDsKLQotICAgICAgICBtUmVuZGVyZXItPnJlYWRQaXhlbHMoc291cmNlLCB4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBnbDo6RXh0cmFjdEZvcm1hdChtSW50ZXJuYWxGb3JtYXQpLCAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsOjpFeHRyYWN0VHlwZShtSW50ZXJuYWxGb3JtYXQpLCBt
YXBwZWRJbWFnZS5Sb3dQaXRjaCwgZmFsc2UsIDQsIGRhdGFPZmZzZXQpOwotCi0gICAgICAgIHVu
bWFwKCk7Ci0gICAgfQotfQotCi1JRDNEMTFUZXh0dXJlMkQgKkltYWdlMTE6OmdldFN0YWdpbmdU
ZXh0dXJlKCkKLXsKLSAgICBjcmVhdGVTdGFnaW5nVGV4dHVyZSgpOwotCi0gICAgcmV0dXJuIG1T
dGFnaW5nVGV4dHVyZTsKLX0KLQotdW5zaWduZWQgaW50IEltYWdlMTE6OmdldFN0YWdpbmdTdWJy
ZXNvdXJjZSgpCi17Ci0gICAgY3JlYXRlU3RhZ2luZ1RleHR1cmUoKTsKLQotICAgIHJldHVybiBt
U3RhZ2luZ1N1YnJlc291cmNlOwotfQotCi12b2lkIEltYWdlMTE6OmNyZWF0ZVN0YWdpbmdUZXh0
dXJlKCkKLXsKLSAgICBpZiAobVN0YWdpbmdUZXh0dXJlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIElEM0QxMVRleHR1cmUyRCAqbmV3VGV4dHVyZSA9IE5VTEw7Ci0gICAg
aW50IGxvZE9mZnNldCA9IDE7Ci0gICAgY29uc3QgRFhHSV9GT1JNQVQgZHhnaUZvcm1hdCA9IGdl
dERYR0lGb3JtYXQoKTsKLSAgICBBU1NFUlQoIWQzZDExOjpJc0RlcHRoU3RlbmNpbEZvcm1hdChk
eGdpRm9ybWF0KSk7IC8vIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSBmb3IgZGVwdGggdGV4dHVy
ZXMKLQotICAgIGlmIChtV2lkdGggIT0gMCAmJiBtSGVpZ2h0ICE9IDApCi0gICAgewotICAgICAg
ICBHTHNpemVpIHdpZHRoID0gbVdpZHRoOwotICAgICAgICBHTHNpemVpIGhlaWdodCA9IG1IZWln
aHQ7Ci0KLSAgICAgICAgLy8gYWRqdXN0IHNpemUgaWYgbmVlZGVkIGZvciBjb21wcmVzc2VkIHRl
eHR1cmVzCi0gICAgICAgIGdsOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBkM2QxMTo6SXNDb21wcmVz
c2VkKGR4Z2lGb3JtYXQpLCAmd2lkdGgsICZoZWlnaHQsICZsb2RPZmZzZXQpOwotICAgICAgICBJ
RDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0KLSAgICAgICAg
RDNEMTFfVEVYVFVSRTJEX0RFU0MgZGVzYzsKLSAgICAgICAgZGVzYy5XaWR0aCA9IHdpZHRoOwot
ICAgICAgICBkZXNjLkhlaWdodCA9IGhlaWdodDsKLSAgICAgICAgZGVzYy5NaXBMZXZlbHMgPSBs
b2RPZmZzZXQgKyAxOwotICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IDE7Ci0gICAgICAgIGRlc2Mu
Rm9ybWF0ID0gZHhnaUZvcm1hdDsKLSAgICAgICAgZGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gMTsK
LSAgICAgICAgZGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOwotICAgICAgICBkZXNjLlVzYWdl
ID0gRDNEMTFfVVNBR0VfU1RBR0lORzsKLSAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSAwOwotICAg
ICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19SRUFEIHwgRDNEMTFf
Q1BVX0FDQ0VTU19XUklURTsKLSAgICAgICAgZGVzYy5NaXNjRmxhZ3MgPSAwOwotCi0gICAgICAg
IEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRlc2MsIE5VTEwsICZu
ZXdUZXh0dXJlKTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgICAgICBF
UlIoIkNyZWF0aW5nIGltYWdlIGZhaWxlZC4iKTsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtU3RhZ2luZ1Rl
eHR1cmUgPSBuZXdUZXh0dXJlOwotICAgIG1TdGFnaW5nU3VicmVzb3VyY2UgPSBEM0QxMUNhbGNT
dWJyZXNvdXJjZShsb2RPZmZzZXQsIDAsIGxvZE9mZnNldCArIDEpOwotICAgIG1EaXJ0eSA9IGZh
bHNlOwotfQotCi1IUkVTVUxUIEltYWdlMTE6Om1hcChEM0QxMV9NQVAgbWFwVHlwZSwgRDNEMTFf
TUFQUEVEX1NVQlJFU09VUkNFICptYXApCi17Ci0gICAgY3JlYXRlU3RhZ2luZ1RleHR1cmUoKTsK
LQotICAgIEhSRVNVTFQgcmVzdWx0ID0gRV9GQUlMOwotCi0gICAgaWYgKG1TdGFnaW5nVGV4dHVy
ZSkKLSAgICB7Ci0gICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmRldmljZUNvbnRleHQgPSBt
UmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKLSAgICAgICAgcmVzdWx0ID0gZGV2aWNlQ29u
dGV4dC0+TWFwKG1TdGFnaW5nVGV4dHVyZSwgbVN0YWdpbmdTdWJyZXNvdXJjZSwgbWFwVHlwZSwg
MCwgbWFwKTsKLQotICAgICAgICAvLyB0aGlzIGNhbiBmYWlsIGlmIHRoZSBkZXZpY2UgaXMgcmVt
b3ZlZCAoZnJvbSBURFIpCi0gICAgICAgIGlmIChkM2QxMTo6aXNEZXZpY2VMb3N0RXJyb3IocmVz
dWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgbVJlbmRlcmVyLT5ub3RpZnlEZXZpY2VMb3N0
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1EaXJ0eSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEltYWdlMTE6OnVubWFwKCkKLXsKLSAgICBpZiAo
bVN0YWdpbmdUZXh0dXJlKQotICAgIHsKLSAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqZGV2
aWNlQ29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotICAgICAgICBkZXZp
Y2VDb250ZXh0LT5Vbm1hcChtU3RhZ2luZ1RleHR1cmUsIG1TdGFnaW5nU3VicmVzb3VyY2UpOwot
ICAgIH0KLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9JbWFnZTExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlMTEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMTFhNjQ5MmRjODYzYTkxNjQxOWI1YmNkMTY0Y2E3ZDdiYjVkOTVkYi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlMTEuaAorKysgL2Rldi9udWxsCkBAIC0xLDc2
ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBJbWFnZTExLmg6IERlZmluZXMgdGhlIHJ4OjpJ
bWFnZTExIGNsYXNzLCB3aGljaCBhY3RzIGFzIHRoZSBpbnRlcmZhY2UgdG8KLS8vIHRoZSBhY3R1
YWwgdW5kZXJseWluZyByZXNvdXJjZXMgb2YgYSBUZXh0dXJlCi0KLSNpZm5kZWYgTElCR0xFU1Yy
X1JFTkRFUkVSX0lNQUdFMTFfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX0lNQUdFMTFf
SF8KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZS5oIgotCi0jaW5jbHVkZSAi
Y29tbW9uL2RlYnVnLmgiCi0KLW5hbWVzcGFjZSBnbAotewotY2xhc3MgRnJhbWVidWZmZXI7Ci19
Ci0KLW5hbWVzcGFjZSByeAotewotY2xhc3MgUmVuZGVyZXI7Ci1jbGFzcyBSZW5kZXJlcjExOwot
Y2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRDsKLWNsYXNzIFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlQ3ViZTsKLQotY2xhc3MgSW1hZ2UxMSA6IHB1YmxpYyBJbWFnZQotewotICBwdWJsaWM6
Ci0gICAgSW1hZ2UxMSgpOwotICAgIHZpcnR1YWwgfkltYWdlMTEoKTsKLQotICAgIHN0YXRpYyBJ
bWFnZTExICptYWtlSW1hZ2UxMShJbWFnZSAqaW1nKTsKLQotICAgIHN0YXRpYyB2b2lkIGdlbmVy
YXRlTWlwbWFwKEltYWdlMTEgKmRlc3QsIEltYWdlMTEgKnNyYyk7Ci0KLSAgICB2aXJ0dWFsIGJv
b2wgaXNEaXJ0eSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIHVwZGF0ZVN1cmZhY2UoVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgdmly
dHVhbCBib29sIHVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9y
YWdlLCBpbnQgZmFjZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcmVkZWZp
bmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIGJvb2wgZm9yY2VSZWxlYXNlKTsKLQotICAgIHZpcnR1YWwgYm9v
bCBpc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdDsKLSAgICBEWEdJX0ZPUk1BVCBnZXREWEdJRm9y
bWF0KCkgY29uc3Q7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGxvYWREYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCk7Ci0g
ICAgdmlydHVhbCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0KTsKLQotICAgIHZpcnR1YWwgdm9p
ZCBjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSk7Ci0K
LSAgcHJvdGVjdGVkOgotICAgIEhSRVNVTFQgbWFwKEQzRDExX01BUCBtYXBUeXBlLCBEM0QxMV9N
QVBQRURfU1VCUkVTT1VSQ0UgKm1hcCk7Ci0gICAgdm9pZCB1bm1hcCgpOwotCi0gIHByaXZhdGU6
Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEltYWdlMTEpOwotCi0gICAgSUQzRDExVGV4
dHVyZTJEICpnZXRTdGFnaW5nVGV4dHVyZSgpOwotICAgIHVuc2lnbmVkIGludCBnZXRTdGFnaW5n
U3VicmVzb3VyY2UoKTsKLSAgICB2b2lkIGNyZWF0ZVN0YWdpbmdUZXh0dXJlKCk7Ci0KLSAgICBS
ZW5kZXJlcjExICptUmVuZGVyZXI7Ci0KLSAgICBEWEdJX0ZPUk1BVCBtRFhHSUZvcm1hdDsKLSAg
ICBJRDNEMTFUZXh0dXJlMkQgKm1TdGFnaW5nVGV4dHVyZTsKLSAgICB1bnNpZ25lZCBpbnQgbVN0
YWdpbmdTdWJyZXNvdXJjZTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJF
Ul9JTUFHRTExX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL0ltYWdlOS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlOS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGIzZGNjNTliNmJkOTk5ODk5ZWM4YzBkOWUyZmMyZWNiYWIxYjdiZjIuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZTkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
NzMyICswLDAgQEAKLSNpbmNsdWRlICJwcmVjb21waWxlZC5oIgotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LQotLy8gSW1hZ2U5LmNwcDogSW1wbGVtZW50cyB0aGUgcng6OkltYWdlOSBjbGFzcywgd2hpY2gg
YWN0cyBhcyB0aGUgaW50ZXJmYWNlIHRvCi0vLyB0aGUgYWN0dWFsIHVuZGVybHlpbmcgc3VyZmFj
ZXMgb2YgYSBUZXh0dXJlLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlOS5o
IgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvRnJh
bWVidWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyOS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9SZW5kZXJUYXJnZXQ5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1Rl
eHR1cmVTdG9yYWdlOS5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL3JlbmRlcmVy
OV91dGlscy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9nZW5lcmF0ZW1pcC5oIgot
Ci1uYW1lc3BhY2UgcngKLXsKLQotSW1hZ2U5OjpJbWFnZTkoKQotewotICAgIG1TdXJmYWNlID0g
TlVMTDsKLSAgICBtUmVuZGVyZXIgPSBOVUxMOwotCi0gICAgbUQzRFBvb2wgPSBEM0RQT09MX1NZ
U1RFTU1FTTsKLSAgICBtRDNERm9ybWF0ID0gRDNERk1UX1VOS05PV047Ci19Ci0KLUltYWdlOTo6
fkltYWdlOSgpCi17Ci0gICAgaWYgKG1TdXJmYWNlKQotICAgIHsKLSAgICAgICAgbVN1cmZhY2Ut
PlJlbGVhc2UoKTsKLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U5OjpnZW5lcmF0ZU1pcChJRGlyZWN0
M0RTdXJmYWNlOSAqZGVzdFN1cmZhY2UsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2VTdXJmYWNl
KQotewotICAgIEQzRFNVUkZBQ0VfREVTQyBkZXN0RGVzYzsKLSAgICBIUkVTVUxUIHJlc3VsdCA9
IGRlc3RTdXJmYWNlLT5HZXREZXNjKCZkZXN0RGVzYyk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKLQotICAgIEQzRFNVUkZBQ0VfREVTQyBzb3VyY2VEZXNjOwotICAgIHJlc3VsdCA9
IHNvdXJjZVN1cmZhY2UtPkdldERlc2MoJnNvdXJjZURlc2MpOwotICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7Ci0KLSAgICBBU1NFUlQoc291cmNlRGVzYy5Gb3JtYXQgPT0gZGVzdERlc2Mu
Rm9ybWF0KTsKLSAgICBBU1NFUlQoc291cmNlRGVzYy5XaWR0aCA9PSAxIHx8IHNvdXJjZURlc2Mu
V2lkdGggLyAyID09IGRlc3REZXNjLldpZHRoKTsKLSAgICBBU1NFUlQoc291cmNlRGVzYy5IZWln
aHQgPT0gMSB8fCBzb3VyY2VEZXNjLkhlaWdodCAvIDIgPT0gZGVzdERlc2MuSGVpZ2h0KTsKLQot
ICAgIEQzRExPQ0tFRF9SRUNUIHNvdXJjZUxvY2tlZCA9IHswfTsKLSAgICByZXN1bHQgPSBzb3Vy
Y2VTdXJmYWNlLT5Mb2NrUmVjdCgmc291cmNlTG9ja2VkLCBOVUxMLCBEM0RMT0NLX1JFQURPTkxZ
KTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgRDNETE9DS0VEX1JFQ1Qg
ZGVzdExvY2tlZCA9IHswfTsKLSAgICByZXN1bHQgPSBkZXN0U3VyZmFjZS0+TG9ja1JlY3QoJmRl
c3RMb2NrZWQsIE5VTEwsIDApOwotICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAg
ICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2VEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1bnNpZ25lZCBjaGFyKj4oc291cmNlTG9ja2VkLnBCaXRzKTsKLSAgICB1bnNpZ25lZCBjaGFy
ICpkZXN0RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRlc3RMb2NrZWQu
cEJpdHMpOwotCi0gICAgaWYgKHNvdXJjZURhdGEgJiYgZGVzdERhdGEpCi0gICAgewotICAgICAg
ICBzd2l0Y2ggKHNvdXJjZURlc2MuRm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBE
M0RGTVRfTDg6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxMOD4oc291cmNlRGVzYy5XaWR0aCwg
c291cmNlRGVzYy5IZWlnaHQsIHNvdXJjZURhdGEsIHNvdXJjZUxvY2tlZC5QaXRjaCwgZGVzdERh
dGEsIGRlc3RMb2NrZWQuUGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSBEM0RGTVRfQThMODoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPEE4TDg+KHNvdXJjZURlc2Mu
V2lkdGgsIHNvdXJjZURlc2MuSGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3VyY2VMb2NrZWQuUGl0Y2gs
IGRlc3REYXRhLCBkZXN0TG9ja2VkLlBpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4
OgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8QThSOEc4Qjg+KHNvdXJjZURlc2MuV2lkdGgsIHNv
dXJjZURlc2MuSGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3VyY2VMb2NrZWQuUGl0Y2gsIGRlc3REYXRh
LCBkZXN0TG9ja2VkLlBpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug
RDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxBMTZCMTZHMTZS
MTZGPihzb3VyY2VEZXNjLldpZHRoLCBzb3VyY2VEZXNjLkhlaWdodCwgc291cmNlRGF0YSwgc291
cmNlTG9ja2VkLlBpdGNoLCBkZXN0RGF0YSwgZGVzdExvY2tlZC5QaXRjaCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgotICAgICAgICAg
ICAgR2VuZXJhdGVNaXA8QTMyQjMyRzMyUjMyRj4oc291cmNlRGVzYy5XaWR0aCwgc291cmNlRGVz
Yy5IZWlnaHQsIHNvdXJjZURhdGEsIHNvdXJjZUxvY2tlZC5QaXRjaCwgZGVzdERhdGEsIGRlc3RM
b2NrZWQuUGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
Ci0gICAgICAgIGRlc3RTdXJmYWNlLT5VbmxvY2tSZWN0KCk7Ci0gICAgICAgIHNvdXJjZVN1cmZh
Y2UtPlVubG9ja1JlY3QoKTsKLSAgICB9Ci19Ci0KLUltYWdlOSAqSW1hZ2U5OjptYWtlSW1hZ2U5
KEltYWdlICppbWcpCi17Ci0gICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUocng6OkltYWdlOSos
IGltZykpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxyeDo6SW1hZ2U5Kj4oaW1nKTsKLX0KLQot
dm9pZCBJbWFnZTk6OmdlbmVyYXRlTWlwbWFwKEltYWdlOSAqZGVzdCwgSW1hZ2U5ICpzb3VyY2Up
Ci17Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZVN1cmZhY2UgPSBzb3VyY2UtPmdldFN1
cmZhY2UoKTsKLSAgICBpZiAoc291cmNlU3VyZmFjZSA9PSBOVUxMKQotICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmRl
c3RTdXJmYWNlID0gZGVzdC0+Z2V0U3VyZmFjZSgpOwotICAgIGdlbmVyYXRlTWlwKGRlc3RTdXJm
YWNlLCBzb3VyY2VTdXJmYWNlKTsKLQotICAgIGRlc3QtPm1hcmtEaXJ0eSgpOwotfQotCi12b2lk
IEltYWdlOTo6Y29weUxvY2thYmxlU3VyZmFjZXMoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIElE
aXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UpCi17Ci0gICAgRDNETE9DS0VEX1JFQ1Qgc291cmNlTG9j
ayA9IHswfTsKLSAgICBEM0RMT0NLRURfUkVDVCBkZXN0TG9jayA9IHswfTsKLSAgICAKLSAgICBz
b3VyY2UtPkxvY2tSZWN0KCZzb3VyY2VMb2NrLCBOVUxMLCAwKTsKLSAgICBkZXN0LT5Mb2NrUmVj
dCgmZGVzdExvY2ssIE5VTEwsIDApOwotICAgIAotICAgIGlmIChzb3VyY2VMb2NrLnBCaXRzICYm
IGRlc3RMb2NrLnBCaXRzKQotICAgIHsKLSAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7Ci0g
ICAgICAgIHNvdXJjZS0+R2V0RGVzYygmZGVzYyk7Ci0KLSAgICAgICAgaW50IHJvd3MgPSBkM2Q5
OjpJc0NvbXByZXNzZWRGb3JtYXQoZGVzYy5Gb3JtYXQpID8gZGVzYy5IZWlnaHQgLyA0IDogZGVz
Yy5IZWlnaHQ7Ci0gICAgICAgIGludCBieXRlcyA9IGQzZDk6OkNvbXB1dGVSb3dTaXplKGRlc2Mu
Rm9ybWF0LCBkZXNjLldpZHRoKTsKLSAgICAgICAgQVNTRVJUKGJ5dGVzIDw9IHNvdXJjZUxvY2su
UGl0Y2ggJiYgYnl0ZXMgPD0gZGVzdExvY2suUGl0Y2gpOwotCi0gICAgICAgIGZvcihpbnQgaSA9
IDA7IGkgPCByb3dzOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1lbWNweSgoY2hhciop
ZGVzdExvY2sucEJpdHMgKyBkZXN0TG9jay5QaXRjaCAqIGksIChjaGFyKilzb3VyY2VMb2NrLnBC
aXRzICsgc291cmNlTG9jay5QaXRjaCAqIGksIGJ5dGVzKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHNvdXJjZS0+VW5sb2NrUmVjdCgpOwotICAgICAgICBkZXN0LT5VbmxvY2tSZWN0KCk7Ci0gICAg
fQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLX0KLQotYm9vbCBJbWFnZTk6OnJlZGVmaW5lKHJ4
OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgYm9vbCBmb3JjZVJlbGVhc2UpCi17Ci0gICAgaWYgKG1XaWR0aCAh
PSB3aWR0aCB8fAotICAgICAgICBtSGVpZ2h0ICE9IGhlaWdodCB8fAotICAgICAgICBtSW50ZXJu
YWxGb3JtYXQgIT0gaW50ZXJuYWxmb3JtYXQgfHwKLSAgICAgICAgZm9yY2VSZWxlYXNlKQotICAg
IHsKLSAgICAgICAgbVJlbmRlcmVyID0gUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5KHJlbmRlcmVy
KTsKLQotICAgICAgICBtV2lkdGggPSB3aWR0aDsKLSAgICAgICAgbUhlaWdodCA9IGhlaWdodDsK
LSAgICAgICAgbUludGVybmFsRm9ybWF0ID0gaW50ZXJuYWxmb3JtYXQ7Ci0gICAgICAgIC8vIGNv
bXB1dGUgdGhlIGQzZCBmb3JtYXQgdGhhdCB3aWxsIGJlIHVzZWQKLSAgICAgICAgbUQzREZvcm1h
dCA9IG1SZW5kZXJlci0+Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1h
dCk7Ci0gICAgICAgIG1BY3R1YWxGb3JtYXQgPSBkM2Q5X2dsOjpHZXRFcXVpdmFsZW50Rm9ybWF0
KG1EM0RGb3JtYXQpOwotCi0gICAgICAgIGlmIChtU3VyZmFjZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgbVN1cmZhY2UtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1TdXJmYWNlID0gTlVMTDsK
LSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotdm9pZCBJbWFnZTk6OmNyZWF0ZVN1cmZhY2UoKQotewotICAgIGlmKG1TdXJm
YWNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIElEaXJlY3QzRFRleHR1
cmU5ICpuZXdUZXh0dXJlID0gTlVMTDsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbmV3U3VyZmFj
ZSA9IE5VTEw7Ci0gICAgY29uc3QgRDNEUE9PTCBwb29sVG9Vc2UgPSBEM0RQT09MX1NZU1RFTU1F
TTsKLSAgICBjb25zdCBEM0RGT1JNQVQgZDNkRm9ybWF0ID0gZ2V0RDNERm9ybWF0KCk7Ci0gICAg
QVNTRVJUKGQzZEZvcm1hdCAhPSBEM0RGTVRfSU5UWik7IC8vIFdlIHNob3VsZCBuZXZlciBnZXQg
aGVyZSBmb3IgZGVwdGggdGV4dHVyZXMKLQotICAgIGlmIChtV2lkdGggIT0gMCAmJiBtSGVpZ2h0
ICE9IDApCi0gICAgewotICAgICAgICBpbnQgbGV2ZWxUb0ZldGNoID0gMDsKLSAgICAgICAgR0xz
aXplaSByZXF1ZXN0V2lkdGggPSBtV2lkdGg7Ci0gICAgICAgIEdMc2l6ZWkgcmVxdWVzdEhlaWdo
dCA9IG1IZWlnaHQ7Ci0gICAgICAgIGdsOjpNYWtlVmFsaWRTaXplKHRydWUsIGdsOjpJc0NvbXBy
ZXNzZWQobUludGVybmFsRm9ybWF0KSwgJnJlcXVlc3RXaWR0aCwgJnJlcXVlc3RIZWlnaHQsICZs
ZXZlbFRvRmV0Y2gpOwotCi0gICAgICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5k
ZXJlci0+Z2V0RGV2aWNlKCk7Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZVRleHR1cmUocmVxdWVzdFdpZHRoLCByZXF1ZXN0SGVpZ2h0LCBsZXZlbFRvRmV0Y2ggKyAx
LCAwLCBkM2RGb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcG9vbFRvVXNlLCAmbmV3VGV4dHVyZSwgTlVMTCk7Ci0KLSAgICAgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09
IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAg
ICAgICAgICAgIEVSUigiQ3JlYXRpbmcgaW1hZ2Ugc3VyZmFjZSBmYWlsZWQuIik7Ci0gICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgbmV3VGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKGxldmVsVG9GZXRjaCwgJm5ld1N1cmZh
Y2UpOwotICAgICAgICBuZXdUZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgbVN1cmZh
Y2UgPSBuZXdTdXJmYWNlOwotICAgIG1EaXJ0eSA9IGZhbHNlOwotICAgIG1EM0RQb29sID0gcG9v
bFRvVXNlOwotfQotCi1IUkVTVUxUIEltYWdlOTo6bG9jayhEM0RMT0NLRURfUkVDVCAqbG9ja2Vk
UmVjdCwgY29uc3QgUkVDVCAqcmVjdCkKLXsKLSAgICBjcmVhdGVTdXJmYWNlKCk7Ci0KLSAgICBI
UkVTVUxUIHJlc3VsdCA9IEQzREVSUl9JTlZBTElEQ0FMTDsKLQotICAgIGlmIChtU3VyZmFjZSkK
LSAgICB7Ci0gICAgICAgIHJlc3VsdCA9IG1TdXJmYWNlLT5Mb2NrUmVjdChsb2NrZWRSZWN0LCBy
ZWN0LCAwKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgICAgICBt
RGlydHkgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgSW1h
Z2U5Ojp1bmxvY2soKQotewotICAgIGlmIChtU3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gbVN1cmZhY2UtPlVubG9ja1JlY3QoKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChyZXN1bHQpKTsKLSAgICB9Ci19Ci0KLWJvb2wgSW1hZ2U5Ojppc1JlbmRlcmFibGVGb3Jt
YXQoKSBjb25zdAoteyAgICAKLSAgICByZXR1cm4gVGV4dHVyZVN0b3JhZ2U5OjpJc1RleHR1cmVG
b3JtYXRSZW5kZXJhYmxlKGdldEQzREZvcm1hdCgpKTsKLX0KLQotRDNERk9STUFUIEltYWdlOTo6
Z2V0RDNERm9ybWF0KCkgY29uc3QKLXsKLSAgICAvLyB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBp
ZiB0aGUgaW1hZ2UgaGFzbid0IGJlZW4gcmVkZWZpbmVkIGZpcnN0Ci0gICAgLy8gd2hpY2ggd291
bGQgYmUgYSBidWcgYnkgdGhlIGNhbGxlcgotICAgIEFTU0VSVChtRDNERm9ybWF0ICE9IEQzREZN
VF9VTktOT1dOKTsKLQotICAgIHJldHVybiBtRDNERm9ybWF0OwotfQotCi1JRGlyZWN0M0RTdXJm
YWNlOSAqSW1hZ2U5OjpnZXRTdXJmYWNlKCkKLXsKLSAgICBjcmVhdGVTdXJmYWNlKCk7Ci0KLSAg
ICByZXR1cm4gbVN1cmZhY2U7Ci19Ci0KLXZvaWQgSW1hZ2U5OjpzZXRNYW5hZ2VkU3VyZmFjZShU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwpCi17Ci0gICAgVGV4
dHVyZVN0b3JhZ2U5XzJEICpzdG9yYWdlOSA9IFRleHR1cmVTdG9yYWdlOV8yRDo6bWFrZVRleHR1
cmVTdG9yYWdlOV8yRChzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgc2V0TWFu
YWdlZFN1cmZhY2Uoc3RvcmFnZTktPmdldFN1cmZhY2VMZXZlbChsZXZlbCwgZmFsc2UpKTsKLX0K
LQotdm9pZCBJbWFnZTk6OnNldE1hbmFnZWRTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
Q3ViZSAqc3RvcmFnZSwgaW50IGZhY2UsIGludCBsZXZlbCkKLXsKLSAgICBUZXh0dXJlU3RvcmFn
ZTlfQ3ViZSAqc3RvcmFnZTkgPSBUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6bWFrZVRleHR1cmVTdG9y
YWdlOV9DdWJlKHN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKLSAgICBzZXRNYW5hZ2Vk
U3VyZmFjZShzdG9yYWdlOS0+Z2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9YICsgZmFjZSwgbGV2ZWwsIGZhbHNlKSk7Ci19Ci0KLXZvaWQgSW1hZ2U5OjpzZXRN
YW5hZ2VkU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSkKLXsKLSAgICBEM0RTVVJG
QUNFX0RFU0MgZGVzYzsKLSAgICBzdXJmYWNlLT5HZXREZXNjKCZkZXNjKTsKLSAgICBBU1NFUlQo
ZGVzYy5Qb29sID09IEQzRFBPT0xfTUFOQUdFRCk7Ci0KLSAgICBpZiAoKEdMc2l6ZWkpZGVzYy5X
aWR0aCA9PSBtV2lkdGggJiYgKEdMc2l6ZWkpZGVzYy5IZWlnaHQgPT0gbUhlaWdodCkKLSAgICB7
Ci0gICAgICAgIGlmIChtU3VyZmFjZSkKLSAgICAgICAgewotICAgICAgICAgICAgY29weUxvY2th
YmxlU3VyZmFjZXMoc3VyZmFjZSwgbVN1cmZhY2UpOwotICAgICAgICAgICAgbVN1cmZhY2UtPlJl
bGVhc2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1TdXJmYWNlID0gc3VyZmFjZTsKLSAgICAg
ICAgbUQzRFBvb2wgPSBkZXNjLlBvb2w7Ci0gICAgfQotfQotCi1ib29sIEltYWdlOTo6dXBkYXRl
U3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KQotewotICAgIEFTU0VSVChnZXRTdXJmYWNlKCkgIT0gTlVMTCk7Ci0gICAgVGV4dHVyZVN0b3Jh
Z2U5XzJEICpzdG9yYWdlOSA9IFRleHR1cmVTdG9yYWdlOV8yRDo6bWFrZVRleHR1cmVTdG9yYWdl
OV8yRChzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgcmV0dXJuIHVwZGF0ZVN1
cmZhY2Uoc3RvcmFnZTktPmdldFN1cmZhY2VMZXZlbChsZXZlbCwgdHJ1ZSksIHhvZmZzZXQsIHlv
ZmZzZXQsIHdpZHRoLCBoZWlnaHQpOwotfQotCi1ib29sIEltYWdlOTo6dXBkYXRlU3VyZmFjZShU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0KQotewotICAgIEFTU0VSVChnZXRTdXJmYWNlKCkgIT0gTlVMTCk7Ci0gICAgVGV4dHVyZVN0
b3JhZ2U5X0N1YmUgKnN0b3JhZ2U5ID0gVGV4dHVyZVN0b3JhZ2U5X0N1YmU6Om1ha2VUZXh0dXJl
U3RvcmFnZTlfQ3ViZShzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgcmV0dXJu
IHVwZGF0ZVN1cmZhY2Uoc3RvcmFnZTktPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsLCB0cnVlKSwgeG9mZnNldCwgeW9mZnNldCwg
d2lkdGgsIGhlaWdodCk7Ci19Ci0KLWJvb2wgSW1hZ2U5Ojp1cGRhdGVTdXJmYWNlKElEaXJlY3Qz
RFN1cmZhY2U5ICpkZXN0U3VyZmFjZSwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKCFkZXN0U3VyZmFjZSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZVN1cmZh
Y2UgPSBnZXRTdXJmYWNlKCk7Ci0KLSAgICBpZiAoc291cmNlU3VyZmFjZSAmJiBzb3VyY2VTdXJm
YWNlICE9IGRlc3RTdXJmYWNlKQotICAgIHsKLSAgICAgICAgUkVDVCByZWN0OwotICAgICAgICBy
ZWN0LmxlZnQgPSB4b2Zmc2V0OwotICAgICAgICByZWN0LnRvcCA9IHlvZmZzZXQ7Ci0gICAgICAg
IHJlY3QucmlnaHQgPSB4b2Zmc2V0ICsgd2lkdGg7Ci0gICAgICAgIHJlY3QuYm90dG9tID0geW9m
ZnNldCArIGhlaWdodDsKLQotICAgICAgICBQT0lOVCBwb2ludCA9IHtyZWN0LmxlZnQsIHJlY3Qu
dG9wfTsKLQotICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdl
dERldmljZSgpOwotCi0gICAgICAgIGlmIChtRDNEUG9vbCA9PSBEM0RQT09MX01BTkFHRUQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOwotICAgICAgICAgICAg
c291cmNlU3VyZmFjZS0+R2V0RGVzYygmZGVzYyk7Ci0KLSAgICAgICAgICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpzdXJmID0gMDsKLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5D
cmVhdGVPZmZzY3JlZW5QbGFpblN1cmZhY2UoZGVzYy5XaWR0aCwgZGVzYy5IZWlnaHQsIGRlc2Mu
Rm9ybWF0LCBEM0RQT09MX1NZU1RFTU1FTSwgJnN1cmYsIE5VTEwpOwotCi0gICAgICAgICAgICBp
ZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29w
eUxvY2thYmxlU3VyZmFjZXMoc3VyZiwgc291cmNlU3VyZmFjZSk7Ci0gICAgICAgICAgICAgICAg
cmVzdWx0ID0gZGV2aWNlLT5VcGRhdGVTdXJmYWNlKHN1cmYsICZyZWN0LCBkZXN0U3VyZmFjZSwg
JnBvaW50KTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAg
ICAgICAgICAgICAgIHN1cmYtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFVwZGF0ZVN1cmZhY2U6IHNv
dXJjZSBtdXN0IGJlIFNZU1RFTU1FTSwgZGVzdCBtdXN0IGJlIERFRkFVTFQgcG9vbHMgCi0gICAg
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+VXBkYXRlU3VyZmFjZShzb3VyY2VTdXJm
YWNlLCAmcmVjdCwgZGVzdFN1cmZhY2UsICZwb2ludCk7Ci0gICAgICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZGVzdFN1cmZhY2UtPlJl
bGVhc2UoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gU3RvcmUgdGhlIHBpeGVsIHJlY3Rh
bmdsZSBkZXNpZ25hdGVkIGJ5IHhvZmZzZXQseW9mZnNldCx3aWR0aCxoZWlnaHQgd2l0aCBwaXhl
bHMgc3RvcmVkIGFzIGZvcm1hdC90eXBlIGF0IGlucHV0Ci0vLyBpbnRvIHRoZSB0YXJnZXQgcGl4
ZWwgcmVjdGFuZ2xlLgotdm9pZCBJbWFnZTk6OmxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQpCi17Ci0gICAg
UkVDVCBsb2NrUmVjdCA9Ci0gICAgewotICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LAotICAgICAg
ICB4b2Zmc2V0ICsgd2lkdGgsIHlvZmZzZXQgKyBoZWlnaHQKLSAgICB9OwotCi0gICAgRDNETE9D
S0VEX1JFQ1QgbG9ja2VkOwotICAgIEhSRVNVTFQgcmVzdWx0ID0gbG9jaygmbG9ja2VkLCAmbG9j
a1JlY3QpOwotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLQotICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IGdsOjpDb21wdXRlUGl0Y2god2lk
dGgsIG1JbnRlcm5hbEZvcm1hdCwgdW5wYWNrQWxpZ25tZW50KTsKLQotICAgIHN3aXRjaCAobUlu
dGVybmFsRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfQUxQSEE4X0VYVDoKLSAgICAgICAg
aWYgKGdsOjpzdXBwb3J0c1NTRTIoKSkKLSAgICAgICAgewotICAgICAgICAgICAgbG9hZEFscGhh
RGF0YVRvQkdSQVNTRTIod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5Q
aXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGxvYWRBbHBoYURhdGFUb0JHUkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOF9FWFQ6Ci0gICAgICAgIGxvYWRMdW1p
bmFuY2VEYXRhVG9OYXRpdmVPckJHUkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzLCBnZXREM0RGb3JtYXQoKSA9PSBEM0RGTVRfTDgp
OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQUxQSEEzMkZfRVhUOgotICAgICAgICBs
b2FkQWxwaGFGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX0xVTUlOQU5DRTMyRl9FWFQ6Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VGbG9hdERhdGFUb1JH
QkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2Vk
LnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FMUEhBMTZGX0VYVDoKLSAg
ICAgICAgbG9hZEFscGhhSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBp
dGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZGX0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5jZUhh
bGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tl
ZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xV
TUlOQU5DRThfQUxQSEE4X0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhRGF0YVRvTmF0
aXZlT3JCR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gs
IGxvY2tlZC5wQml0cywgZ2V0RDNERm9ybWF0KCkgPT0gRDNERk1UX0E4TDgpOwotICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVDoKLSAgICAgICAgbG9h
ZEx1bWluYW5jZUFscGhhRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhUOgotICAgICAgICBsb2FkTHVtaW5hbmNl
QWxwaGFIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0
LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9SR0I4X09FUzoKLSAgICAgICAgbG9hZFJHQlVCeXRlRGF0YVRvQkdSWCh3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCNTY1OgotICAgICAgICBsb2FkUkdCNTY1RGF0
YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBs
b2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQThfT0VTOgot
ICAgICAgICBpZiAoZ2w6OnN1cHBvcnRzU1NFMigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBs
b2FkUkdCQVVCeXRlRGF0YVRvQkdSQVNTRTIod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgfQotICAgICAgICBlbHNl
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhVG9CR1JBKHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0g
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQkE0OgotICAgICAgICBs
b2FkUkdCQTQ0NDREYXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBs
b2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9SR0I1X0ExOgotICAgICAgICBsb2FkUkdCQTU1NTFEYXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6Ci0gICAgICAgIGxvYWRCR1JBRGF0YVRv
QkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2Nr
ZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIC8vIGZsb2F0IHRleHR1cmVzIGFyZSBj
b252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRoZXkncmUgc3RvcmVkIHRoYXQgd2F5IGlu
IEQzRAotICAgICAgY2FzZSBHTF9SR0IzMkZfRVhUOgotICAgICAgICBsb2FkUkdCRmxvYXREYXRh
VG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxv
Y2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0IxNkZfRVhUOgot
ICAgICAgICBsb2FkUkdCSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBp
dGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfUkdCQTMyRl9FWFQ6Ci0gICAgICAgIGxvYWRSR0JBRmxvYXREYXRhVG9S
R0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tl
ZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0JBMTZGX0VYVDoKLSAg
ICAgICAgbG9hZFJHQkFIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgCi0gICAgfQotCi0gICAgdW5sb2NrKCk7Ci19
Ci0KLXZvaWQgSW1hZ2U5Ojpsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0KQotewotICAgIEFTU0VSVCh4b2Zmc2V0
ICUgNCA9PSAwKTsKLSAgICBBU1NFUlQoeW9mZnNldCAlIDQgPT0gMCk7Ci0KLSAgICBSRUNUIGxv
Y2tSZWN0ID0gewotICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LAotICAgICAgICB4b2Zmc2V0ICsg
d2lkdGgsIHlvZmZzZXQgKyBoZWlnaHQKLSAgICB9OwotCi0gICAgRDNETE9DS0VEX1JFQ1QgbG9j
a2VkOwotICAgIEhSRVNVTFQgcmVzdWx0ID0gbG9jaygmbG9ja2VkLCAmbG9ja1JlY3QpOwotICAg
IGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBHTHNpemVpIGlucHV0U2l6ZSA9IGdsOjpDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhl
aWdodCwgbUludGVybmFsRm9ybWF0KTsKLSAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSBnbDo6Q29t
cHV0ZUNvbXByZXNzZWRQaXRjaCh3aWR0aCwgbUludGVybmFsRm9ybWF0KTsKLSAgICBpbnQgcm93
cyA9IGlucHV0U2l6ZSAvIGlucHV0UGl0Y2g7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dz
OyArK2kpCi0gICAgewotICAgICAgICBtZW1jcHkoKHZvaWQqKSgoQllURSopbG9ja2VkLnBCaXRz
ICsgaSAqIGxvY2tlZC5QaXRjaCksICh2b2lkKikoKEJZVEUqKWlucHV0ICsgaSAqIGlucHV0UGl0
Y2gpLCBpbnB1dFBpdGNoKTsKLSAgICB9Ci0KLSAgICB1bmxvY2soKTsKLX0KLQotLy8gVGhpcyBp
bXBsZW1lbnRzIGdsQ29weVRleFtTdWJdSW1hZ2UyRCBmb3Igbm9uLXJlbmRlcmFibGUgaW50ZXJu
YWwgdGV4dHVyZSBmb3JtYXRzIGFuZCBpbmNvbXBsZXRlIHRleHR1cmVzCi12b2lkIEltYWdlOTo6
Y29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgZ2w6OkZyYW1lYnVmZmVyICpzb3VyY2UpCi17Ci0g
ICAgUmVuZGVyVGFyZ2V0OSAqcmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqc3VyZmFjZSA9IE5VTEw7Ci0gICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIg
PSBzb3VyY2UtPmdldENvbG9yYnVmZmVyKDApOwotCi0gICAgaWYgKGNvbG9yYnVmZmVyKQotICAg
IHsKLSAgICAgICAgcmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0OTo6bWFrZVJlbmRlclRhcmdl
dDkoY29sb3JidWZmZXItPmdldFJlbmRlclRhcmdldCgpKTsKLSAgICB9Ci0gICAgCi0gICAgaWYg
KHJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIHN1cmZhY2UgPSByZW5kZXJUYXJnZXQtPmdl
dFN1cmZhY2UoKTsKLSAgICB9Ci0KLSAgICBpZiAoIXN1cmZhY2UpCi0gICAgewotICAgICAgICBF
UlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldC4iKTsKLSAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICBJRGlyZWN0M0RE
ZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0gICAgSURpcmVjdDNE
U3VyZmFjZTkgKnJlbmRlclRhcmdldERhdGEgPSBOVUxMOwotICAgIEQzRFNVUkZBQ0VfREVTQyBk
ZXNjcmlwdGlvbjsKLSAgICBzdXJmYWNlLT5HZXREZXNjKCZkZXNjcmlwdGlvbik7Ci0gICAgCi0g
ICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZU9mZnNjcmVlblBsYWluU3VyZmFjZShk
ZXNjcmlwdGlvbi5XaWR0aCwgZGVzY3JpcHRpb24uSGVpZ2h0LCBkZXNjcmlwdGlvbi5Gb3JtYXQs
IEQzRFBPT0xfU1lTVEVNTUVNLCAmcmVuZGVyVGFyZ2V0RGF0YSwgTlVMTCk7Ci0KLSAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgbWF0
Y2hpbmcgZGVzdGluYXRpb24gc3VyZmFjZS4iKTsKLSAgICAgICAgc3VyZmFjZS0+UmVsZWFzZSgp
OwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLQot
ICAgIHJlc3VsdCA9IGRldmljZS0+R2V0UmVuZGVyVGFyZ2V0RGF0YShzdXJmYWNlLCByZW5kZXJU
YXJnZXREYXRhKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEVS
UigiR2V0UmVuZGVyVGFyZ2V0RGF0YSB1bmV4cGVjdGVkbHkgZmFpbGVkLiIpOwotICAgICAgICBy
ZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7Ci0gICAgICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsK
LSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAg
ICBSRUNUIHNvdXJjZVJlY3QgPSB7eCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0fTsKLSAgICBS
RUNUIGRlc3RSZWN0ID0ge3hvZmZzZXQsIHlvZmZzZXQsIHhvZmZzZXQgKyB3aWR0aCwgeW9mZnNl
dCArIGhlaWdodH07Ci0KLSAgICBEM0RMT0NLRURfUkVDVCBzb3VyY2VMb2NrID0gezB9OwotICAg
IHJlc3VsdCA9IHJlbmRlclRhcmdldERhdGEtPkxvY2tSZWN0KCZzb3VyY2VMb2NrLCAmc291cmNl
UmVjdCwgMCk7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIo
IkZhaWxlZCB0byBsb2NrIHRoZSBzb3VyY2Ugc3VyZmFjZSAocmVjdGFuZ2xlIG1pZ2h0IGJlIGlu
dmFsaWQpLiIpOwotICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7Ci0gICAgICAg
IHN1cmZhY2UtPlJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKLSAgICB9Ci0KLSAgICBEM0RMT0NLRURfUkVDVCBkZXN0TG9jayA9IHswfTsKLSAg
ICByZXN1bHQgPSBsb2NrKCZkZXN0TG9jaywgJmRlc3RSZWN0KTsKLSAgICAKLSAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byBsb2NrIHRoZSBkZXN0
aW5hdGlvbiBzdXJmYWNlIChyZWN0YW5nbGUgbWlnaHQgYmUgaW52YWxpZCkuIik7Ci0gICAgICAg
IHJlbmRlclRhcmdldERhdGEtPlVubG9ja1JlY3QoKTsKLSAgICAgICAgcmVuZGVyVGFyZ2V0RGF0
YS0+UmVsZWFzZSgpOwotICAgICAgICBzdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotCi0gICAgaWYgKGRlc3RMb2Nr
LnBCaXRzICYmIHNvdXJjZUxvY2sucEJpdHMpCi0gICAgewotICAgICAgICB1bnNpZ25lZCBjaGFy
ICpzb3VyY2UgPSAodW5zaWduZWQgY2hhciopc291cmNlTG9jay5wQml0czsKLSAgICAgICAgdW5z
aWduZWQgY2hhciAqZGVzdCA9ICh1bnNpZ25lZCBjaGFyKilkZXN0TG9jay5wQml0czsKLQotICAg
ICAgICBzd2l0Y2ggKGRlc2NyaXB0aW9uLkZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNh
c2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAg
ICAgICAgICAgc3dpdGNoKGdldEQzREZvcm1hdCgpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQThS
OEc4Qjg6Ci0gICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJj
ZSwgNCAqIHdpZHRoKTsKLQotICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9j
ay5QaXRjaDsKLSAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh
c2UgRDNERk1UX0w4OgotICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7
IHkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9
IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBkZXN0W3hdID0gc291cmNlW3ggKiA0ICsgMl07Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5QaXRjaDsK
LSAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1U
X0E4TDg6Ci0gICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8
IHdpZHRoOyB4KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc3RbeCAqIDIgKyAwXSA9IHNvdXJjZVt4ICogNCArIDJdOwotICAgICAgICAgICAgICAg
ICAgICAgICAgZGVzdFt4ICogMiArIDFdID0gc291cmNlW3ggKiA0ICsgM107Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5Q
aXRjaDsKLSAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKLSAgICAgICAgICAg
IHN3aXRjaChnZXREM0RGb3JtYXQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2Fz
ZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhl
aWdodDsgeSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yKGlu
dCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYiA9ICgodW5zaWduZWQgc2hvcnQqKXNv
dXJjZSlbeF07Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHJlZCA9IChy
Z2IgJiAweEY4MDApID4+IDg7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFy
IGdyZWVuID0gKHJnYiAmIDB4MDdFMCkgPj4gMzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGNoYXIgYmx1ZSA9IChyZ2IgJiAweDAwMUYpIDw8IDM7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0W3ggKyAwXSA9IGJsdWUgfCAoYmx1ZSA+PiA1KTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RbeCArIDFdID0gZ3JlZW4gfCAoZ3JlZW4gPj4gNik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBkZXN0W3ggKyAyXSA9IHJlZCB8IChyZWQgPj4gNSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBkZXN0W3ggKyAzXSA9IDB4RkY7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5QaXRjaDsKLSAgICAg
ICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0w4Ogot
ICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsg
eCsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBjaGFyIHJlZCA9IHNvdXJjZVt4ICogMiArIDFdICYgMHhGODsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RbeF0gPSByZWQgfCAocmVkID4+IDUpOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKLSAgICAgICAgICAgIHN3aXRj
aChnZXREM0RGb3JtYXQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBEM0RG
TVRfWDhSOEc4Qjg6Ci0gICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsg
eSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0g
MDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGFyZ2IgPSAoKHVuc2lnbmVkIHNob3J0Kilzb3VyY2Up
W3hdOwotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZWQgPSAoYXJnYiAm
IDB4N0MwMCkgPj4gNzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZ3Jl
ZW4gPSAoYXJnYiAmIDB4MDNFMCkgPj4gMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGNoYXIgYmx1ZSA9IChhcmdiICYgMHgwMDFGKSA8PCAzOwotICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdFt4ICsgMF0gPSBibHVlIHwgKGJsdWUgPj4gNSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0W3ggKyAxXSA9IGdyZWVuIHwgKGdyZWVuID4+IDUpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdFt4ICsgMl0gPSByZWQgfCAocmVkID4+IDUpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdFt4ICsgM10gPSAweEZGOwotICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7Ci0gICAgICAg
ICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BOFI4RzhC
ODoKLSAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lk
dGg7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgc2hvcnQgYXJnYiA9ICgodW5zaWduZWQgc2hvcnQqKXNvdXJjZSlbeF07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHJlZCA9IChhcmdiICYgMHg3QzAwKSA+
PiA3OwotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBncmVlbiA9IChhcmdi
ICYgMHgwM0UwKSA+PiAyOwotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBi
bHVlID0gKGFyZ2IgJiAweDAwMUYpIDw8IDM7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBjaGFyIGFscGhhID0gKHNpZ25lZCBzaG9ydClhcmdiID4+IDE1OwotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdFt4ICsgMF0gPSBibHVlIHwgKGJsdWUgPj4gNSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBkZXN0W3ggKyAxXSA9IGdyZWVuIHwgKGdyZWVuID4+IDUpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFt4ICsgMl0gPSByZWQgfCAocmVkID4+IDUpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFt4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOwot
ICAgICAgICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRf
TDg6Ci0gICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8IHdp
ZHRoOyB4KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGNoYXIgcmVkID0gc291cmNlW3ggKiAyICsgMV0gJiAweDdDOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdFt4XSA9IChyZWQgPDwgMSkgfCAocmVkID4+IDQpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxv
Y2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEQzREZNVF9BOEw4OgotICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWln
aHQ7IHkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGZvcihpbnQg
eCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHJlZCA9IHNvdXJjZVt4ICogMiArIDFdICYgMHg3
QzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCAqIDIgKyAwXSA9IChyZWQgPDwgMSkg
fCAocmVkID4+IDQpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICogMiArIDFdID0g
KHNpZ25lZCBjaGFyKXNvdXJjZVt4ICogMiArIDFdID4+IDc7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5QaXRjaDsKLSAg
ICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgdW5sb2NrKCk7Ci0gICAgcmVuZGVyVGFyZ2V0RGF0YS0+VW5s
b2NrUmVjdCgpOwotCi0gICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgpOwotICAgIHN1cmZh
Y2UtPlJlbGVhc2UoKTsKLQotICAgIG1EaXJ0eSA9IHRydWU7Ci19Ci0KLX0KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlOS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZTkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMmZiYmNhMzEyNDNkMmFjNDdkNTc0OGQ1YTFjN2ZhZjdkNWNhODIwNi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlOS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzkg
KzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gSW1hZ2U5Lmg6IERlZmluZXMgdGhlIHJ4
OjpJbWFnZTkgY2xhc3MsIHdoaWNoIGFjdHMgYXMgdGhlIGludGVyZmFjZSB0bwotLy8gdGhlIGFj
dHVhbCB1bmRlcmx5aW5nIHN1cmZhY2VzIG9mIGEgVGV4dHVyZS4KLQotI2lmbmRlZiBMSUJHTEVT
VjJfUkVOREVSRVJfSU1BR0U5X0hfCi0jZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9JTUFHRTlf
SF8KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZS5oIgotI2luY2x1ZGUgImNv
bW1vbi9kZWJ1Zy5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLWNsYXNzIEZyYW1lYnVmZmVyOwotfQot
Ci1uYW1lc3BhY2UgcngKLXsKLWNsYXNzIFJlbmRlcmVyOwotY2xhc3MgUmVuZGVyZXI5OwotY2xh
c3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRDsKLWNsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlQ3ViZTsKLQotY2xhc3MgSW1hZ2U5IDogcHVibGljIEltYWdlCi17Ci0gIHB1YmxpYzoKLSAg
ICBJbWFnZTkoKTsKLSAgICB+SW1hZ2U5KCk7Ci0KLSAgICBzdGF0aWMgSW1hZ2U5ICptYWtlSW1h
Z2U5KEltYWdlICppbWcpOwotCi0gICAgc3RhdGljIHZvaWQgZ2VuZXJhdGVNaXBtYXAoSW1hZ2U5
ICpkZXN0LCBJbWFnZTkgKnNvdXJjZSk7Ci0gICAgc3RhdGljIHZvaWQgZ2VuZXJhdGVNaXAoSURp
cmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJmYWNlLCBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlU3Vy
ZmFjZSk7Ci0gICAgc3RhdGljIHZvaWQgY29weUxvY2thYmxlU3VyZmFjZXMoSURpcmVjdDNEU3Vy
ZmFjZTkgKmRlc3QsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UpOwotCi0gICAgdmlydHVhbCBi
b29sIHJlZGVmaW5lKFJlbmRlcmVyICpyZW5kZXJlciwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBib29sIGZvcmNlUmVsZWFzZSk7Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgaXNSZW5kZXJhYmxlRm9ybWF0KCkgY29uc3Q7Ci0gICAgRDNERk9STUFUIGdl
dEQzREZvcm1hdCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIGlzRGlydHkoKSBjb25zdCB7
cmV0dXJuIG1TdXJmYWNlICYmIG1EaXJ0eTt9Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFN1
cmZhY2UoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRNYW5hZ2VkU3VyZmFjZShUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwpOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXRNYW5hZ2VkU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGlu
dCBmYWNlLCBpbnQgbGV2ZWwpOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVTdXJmYWNlKFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotICAgIHZpcnR1
YWwgYm9vbCB1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFn
ZSwgaW50IGZhY2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotCi0gICAgdmlydHVhbCB2b2lkIGxvYWREYXRh
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAotICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lk
ICppbnB1dCk7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0KTsKLQotICAg
IHZpcnR1YWwgdm9pZCBjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgs
IEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBnbDo6RnJhbWVidWZmZXIg
KnNvdXJjZSk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oSW1h
Z2U5KTsKLQotICAgIHZvaWQgY3JlYXRlU3VyZmFjZSgpOwotICAgIHZvaWQgc2V0TWFuYWdlZFN1
cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UpOwotICAgIGJvb2wgdXBkYXRlU3VyZmFj
ZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotCi0gICAgSFJFU1VMVCBsb2NrKEQzRExP
Q0tFRF9SRUNUICpsb2NrZWRSZWN0LCBjb25zdCBSRUNUICpyZWN0KTsKLSAgICB2b2lkIHVubG9j
aygpOwotICAgIAotICAgIFJlbmRlcmVyOSAqbVJlbmRlcmVyOwotCi0gICAgRDNEUE9PTCBtRDNE
UG9vbDsgICAvLyBjYW4gb25seSBiZSBEM0RQT09MX1NZU1RFTU1FTSBvciBEM0RQT09MX01BTkFH
RUQgc2luY2UgaXQgbmVlZHMgdG8gYmUgbG9ja2FibGUuCi0gICAgRDNERk9STUFUIG1EM0RGb3Jt
YXQ7Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVN1cmZhY2U7Ci19OwotfQotCi0jZW5kaWYg
ICAvLyBMSUJHTEVTVjJfUkVOREVSRVJfSU1BR0U5X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4QnVmZmVyMTEuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZl
cjExLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjY2MDRjNDU1ODI0Y2Y2YTRh
Nzc2YjA2MTk4MmM1OTE4ZTVjOTZiYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL0luZGV4QnVmZmVyMTEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTgzICswLDAgQEAKLSNp
bmNsdWRlICJwcmVjb21waWxlZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIEluZGV4QnVmZmVyMTEu
Y3BwOiBEZWZpbmVzIHRoZSBEM0QxMSBJbmRleEJ1ZmZlciBpbXBsZW1lbnRhdGlvbi4KLQotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZlcjExLmgiCi0jaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyMTEuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLUluZGV4
QnVmZmVyMTE6OkluZGV4QnVmZmVyMTEoUmVuZGVyZXIxMSAqY29uc3QgcmVuZGVyZXIpIDogbVJl
bmRlcmVyKHJlbmRlcmVyKQotewotICAgIG1CdWZmZXIgPSBOVUxMOwotICAgIG1CdWZmZXJTaXpl
ID0gMDsKLSAgICBtRHluYW1pY1VzYWdlID0gZmFsc2U7Ci19Ci0KLUluZGV4QnVmZmVyMTE6On5J
bmRleEJ1ZmZlcjExKCkKLXsKLSAgICBpZiAobUJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1CdWZm
ZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJ1ZmZlciA9IE5VTEw7Ci0gICAgfQotfQotCi1ib29s
IEluZGV4QnVmZmVyMTE6OmluaXRpYWxpemUodW5zaWduZWQgaW50IGJ1ZmZlclNpemUsIEdMZW51
bSBpbmRleFR5cGUsIGJvb2wgZHluYW1pYykKLXsKLSAgICBpZiAobUJ1ZmZlcikKLSAgICB7Ci0g
ICAgICAgIG1CdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJ1ZmZlciA9IE5VTEw7Ci0gICAg
fQotCi0gICAgdXBkYXRlU2VyaWFsKCk7Ci0KLSAgICBpZiAoYnVmZmVyU2l6ZSA+IDApCi0gICAg
ewotICAgICAgICBJRDNEMTFEZXZpY2UqIGR4RGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2Uo
KTsKLQotICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyBidWZmZXJEZXNjOwotICAgICAgICBidWZm
ZXJEZXNjLkJ5dGVXaWR0aCA9IGJ1ZmZlclNpemU7Ci0gICAgICAgIGJ1ZmZlckRlc2MuVXNhZ2Ug
PSBEM0QxMV9VU0FHRV9EWU5BTUlDOwotICAgICAgICBidWZmZXJEZXNjLkJpbmRGbGFncyA9IEQz
RDExX0JJTkRfSU5ERVhfQlVGRkVSOwotICAgICAgICBidWZmZXJEZXNjLkNQVUFjY2Vzc0ZsYWdz
ID0gRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsKLSAgICAgICAgYnVmZmVyRGVzYy5NaXNjRmxhZ3Mg
PSAwOwotICAgICAgICBidWZmZXJEZXNjLlN0cnVjdHVyZUJ5dGVTdHJpZGUgPSAwOwotCi0gICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gZHhEZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmYnVmZmVyRGVzYywg
TlVMTCwgJm1CdWZmZXIpOwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1CdWZm
ZXJTaXplID0gYnVmZmVyU2l6ZTsKLSAgICBtSW5kZXhUeXBlID0gaW5kZXhUeXBlOwotICAgIG1E
eW5hbWljVXNhZ2UgPSBkeW5hbWljOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUluZGV4QnVm
ZmVyMTEgKkluZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1ZmZlcjExKEluZGV4QnVmZmVyICppbmRl
eEJ1ZmZlcikKLXsKLSAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShJbmRleEJ1ZmZlcjExKiwg
aW5kZXhCdWZmZXIpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW5kZXhCdWZmZXIxMSo+KGlu
ZGV4QnVmZmVyKTsKLX0KLQotYm9vbCBJbmRleEJ1ZmZlcjExOjptYXBCdWZmZXIodW5zaWduZWQg
aW50IG9mZnNldCwgdW5zaWduZWQgaW50IHNpemUsIHZvaWQqKiBvdXRNYXBwZWRNZW1vcnkpCi17
Ci0gICAgaWYgKG1CdWZmZXIpCi0gICAgewotICAgICAgICAvLyBDaGVjayBmb3IgaW50ZWdlciBv
dmVyZmxvd3MgYW5kIG91dC1vdXQtYm91bmRzIG1hcCByZXF1ZXN0cwotICAgICAgICBpZiAob2Zm
c2V0ICsgc2l6ZSA8IG9mZnNldCB8fCBvZmZzZXQgKyBzaXplID4gbUJ1ZmZlclNpemUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEVSUigiSW5kZXggYnVmZmVyIG1hcCByYW5nZSBpcyBub3QgaW5z
aWRlIHRoZSBidWZmZXIuIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LQotICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpkeENvbnRleHQgPSBtUmVuZGVyZXItPmdl
dERldmljZUNvbnRleHQoKTsKLQotICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFw
cGVkUmVzb3VyY2U7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZHhDb250ZXh0LT5NYXAobUJ1
ZmZlciwgMCwgRDNEMTFfTUFQX1dSSVRFX05PX09WRVJXUklURSwgMCwgJm1hcHBlZFJlc291cmNl
KTsKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBF
UlIoIkluZGV4IGJ1ZmZlciBtYXAgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgICpvdXRNYXBw
ZWRNZW1vcnkgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihtYXBwZWRSZXNvdXJjZS5wRGF0YSkg
KyBvZmZzZXQ7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewot
ICAgICAgICBFUlIoIkluZGV4IGJ1ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgSW5kZXhCdWZmZXIxMTo6dW5tYXBCdWZmZXIo
KQotewotICAgIGlmIChtQnVmZmVyKQotICAgIHsKLSAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4
dCAqZHhDb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7Ci0gICAgICAgIGR4
Q29udGV4dC0+VW5tYXAobUJ1ZmZlciwgMCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICBFUlIoIkluZGV4IGJ1ZmZlciBub3QgaW5pdGlhbGl6
ZWQuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLUdMZW51bSBJbmRleEJ1
ZmZlcjExOjpnZXRJbmRleFR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBtSW5kZXhUeXBlOwot
fQotCi11bnNpZ25lZCBpbnQgSW5kZXhCdWZmZXIxMTo6Z2V0QnVmZmVyU2l6ZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1CdWZmZXJTaXplOwotfQotCi1ib29sIEluZGV4QnVmZmVyMTE6OnNldFNp
emUodW5zaWduZWQgaW50IGJ1ZmZlclNpemUsIEdMZW51bSBpbmRleFR5cGUpCi17Ci0gICAgaWYg
KGJ1ZmZlclNpemUgPiBtQnVmZmVyU2l6ZSB8fCBpbmRleFR5cGUgIT0gbUluZGV4VHlwZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBpbml0aWFsaXplKGJ1ZmZlclNpemUsIGluZGV4VHlwZSwgbUR5
bmFtaWNVc2FnZSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLX0KLQotYm9vbCBJbmRleEJ1ZmZlcjExOjpkaXNjYXJkKCkKLXsKLSAgICBpZiAo
bUJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmR4Q29udGV4dCA9
IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotCi0gICAgICAgIEQzRDExX01BUFBFRF9T
VUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJjZTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkeENv
bnRleHQtPk1hcChtQnVmZmVyLCAwLCBEM0QxMV9NQVBfV1JJVEVfRElTQ0FSRCwgMCwgJm1hcHBl
ZFJlc291cmNlKTsKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBFUlIoIkluZGV4IGJ1ZmZlciBtYXAgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4Iiwg
cmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAg
IGR4Q29udGV4dC0+VW5tYXAobUJ1ZmZlciwgMCk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIEVSUigiSW5kZXggYnVmZmVyIG5vdCBpbml0
aWFsaXplZC4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotRFhHSV9GT1JN
QVQgSW5kZXhCdWZmZXIxMTo6Z2V0SW5kZXhGb3JtYXQoKSBjb25zdAotewotICAgIHN3aXRjaCAo
bUluZGV4VHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6ICAgIHJldHVy
biBEWEdJX0ZPUk1BVF9SMTZfVUlOVDsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6ICAg
cmV0dXJuIERYR0lfRk9STUFUX1IxNl9VSU5UOwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6
ICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjMyX1VJTlQ7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOyAgIHJldHVybiBEWEdJX0ZPUk1BVF9VTktOT1dOOwotICAgIH0KLX0KLQotSUQzRDEx
QnVmZmVyICpJbmRleEJ1ZmZlcjExOjpnZXRCdWZmZXIoKSBjb25zdAotewotICAgIHJldHVybiBt
QnVmZmVyOwotfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZl
cjExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0lu
ZGV4QnVmZmVyMTEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzlhNjE5NDZhZDZl
Zjg5MmM0Y2E2NmI2MDdlNjU5YTM1Y2MwOWRlNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL0luZGV4QnVmZmVyMTEuaAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAK
LS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwotCi0vLyBJbmRleEJ1ZmZlcjExLmg6IERlZmluZXMgdGhlIEQzRDExIElu
ZGV4QnVmZmVyIGltcGxlbWVudGF0aW9uLgotCi0jaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9J
TkRFWEJVRkZFUjExX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9JTkRFWEJVRkZFUjEx
X0hfCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhCdWZmZXIuaCIKLQotbmFt
ZXNwYWNlIHJ4Ci17Ci1jbGFzcyBSZW5kZXJlcjExOwotCi1jbGFzcyBJbmRleEJ1ZmZlcjExIDog
cHVibGljIEluZGV4QnVmZmVyCi17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBJbmRleEJ1ZmZl
cjExKFJlbmRlcmVyMTEgKmNvbnN0IHJlbmRlcmVyKTsKLSAgICB2aXJ0dWFsIH5JbmRleEJ1ZmZl
cjExKCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgYnVmZmVy
U2l6ZSwgR0xlbnVtIGluZGV4VHlwZSwgYm9vbCBkeW5hbWljKTsKLQotICAgIHN0YXRpYyBJbmRl
eEJ1ZmZlcjExICptYWtlSW5kZXhCdWZmZXIxMShJbmRleEJ1ZmZlciAqaW5kZXhCdWZmZXIpOwot
Ci0gICAgdmlydHVhbCBib29sIG1hcEJ1ZmZlcih1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25l
ZCBpbnQgc2l6ZSwgdm9pZCoqIG91dE1hcHBlZE1lbW9yeSk7Ci0gICAgdmlydHVhbCBib29sIHVu
bWFwQnVmZmVyKCk7Ci0KLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRJbmRleFR5cGUoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRCdWZmZXJTaXplKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBib29sIHNldFNpemUodW5zaWduZWQgaW50IGJ1ZmZlclNpemUsIEdMZW51bSBpbmRleFR5
cGUpOwotCi0gICAgdmlydHVhbCBib29sIGRpc2NhcmQoKTsKLQotICAgIERYR0lfRk9STUFUIGdl
dEluZGV4Rm9ybWF0KCkgY29uc3Q7Ci0gICAgSUQzRDExQnVmZmVyICpnZXRCdWZmZXIoKSBjb25z
dDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihJbmRleEJ1ZmZl
cjExKTsKLQotICAgIHJ4OjpSZW5kZXJlcjExICpjb25zdCBtUmVuZGVyZXI7Ci0KLSAgICBJRDNE
MTFCdWZmZXIgKm1CdWZmZXI7Ci0gICAgdW5zaWduZWQgaW50IG1CdWZmZXJTaXplOwotICAgIEdM
ZW51bSBtSW5kZXhUeXBlOwotICAgIGJvb2wgbUR5bmFtaWNVc2FnZTsKLX07Ci0KLX0KLQotI2Vu
ZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9JTkRFWEJVRkZFUjExX0hfClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZlcjkuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZlcjkuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBjNmQ4M2M1ZGNhN2FmMzhlNjA5YjM0ZTI5YTM4MDY2ZmFhYzE2YTUw
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhCdWZmZXI5LmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDIwNyArMCwwIEBACi0jaW5jbHVkZSAicHJlY29tcGlsZWQuaCIK
LS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIEluZGV4ZmZlcjkuY3BwOiBEZWZpbmVzIHRoZSBEM0Q5
IEluZGV4QnVmZmVyIGltcGxlbWVudGF0aW9uLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL0luZGV4QnVmZmVyOS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJl
cjkuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLUluZGV4QnVmZmVyOTo6SW5kZXhCdWZmZXI5KFJl
bmRlcmVyOSAqY29uc3QgcmVuZGVyZXIpIDogbVJlbmRlcmVyKHJlbmRlcmVyKQotewotICAgIG1J
bmRleEJ1ZmZlciA9IE5VTEw7Ci0gICAgbUJ1ZmZlclNpemUgPSAwOwotICAgIG1JbmRleFR5cGUg
PSAwOwotICAgIG1EeW5hbWljID0gZmFsc2U7Ci19Ci0KLUluZGV4QnVmZmVyOTo6fkluZGV4QnVm
ZmVyOSgpCi17Ci0gICAgaWYgKG1JbmRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1JbmRleEJ1
ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtSW5kZXhCdWZmZXIgPSBOVUxMOwotICAgIH0KLX0K
LQotYm9vbCBJbmRleEJ1ZmZlcjk6OmluaXRpYWxpemUodW5zaWduZWQgaW50IGJ1ZmZlclNpemUs
IEdMZW51bSBpbmRleFR5cGUsIGJvb2wgZHluYW1pYykKLXsKLSAgICBpZiAobUluZGV4QnVmZmVy
KQotICAgIHsKLSAgICAgICAgbUluZGV4QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1JbmRl
eEJ1ZmZlciA9IE5VTEw7Ci0gICAgfQotCi0gICAgdXBkYXRlU2VyaWFsKCk7Ci0KLSAgICBpZiAo
YnVmZmVyU2l6ZSA+IDApCi0gICAgewotICAgICAgICBEM0RGT1JNQVQgZm9ybWF0OwotICAgICAg
ICBpZiAoaW5kZXhUeXBlID09IEdMX1VOU0lHTkVEX1NIT1JUIHx8IGluZGV4VHlwZSA9PSBHTF9V
TlNJR05FRF9CWVRFKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3JtYXQgPSBEM0RGTVRfSU5E
RVgxNjsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChpbmRleFR5cGUgPT0gR0xfVU5TSUdO
RURfSU5UKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobVJlbmRlcmVyLT5nZXQzMkJpdElu
ZGV4U3VwcG9ydCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvcm1hdCA9IEQz
REZNVF9JTkRFWDMyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIEVSUigiQXR0ZW1wdGVkIHRvIGNyZWF0ZSBhIDMyLWJpdCBp
bmRleCBidWZmZXIgYnV0IHJlbmRlcmVyIGRvZXMgbm90IHN1cHBvcnQgMzItYml0IGluZGljZXMu
Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJJbnZhbGlkIGlu
ZGV4IHR5cGUgJXUuIiwgaW5kZXhUeXBlKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIERXT1JEIHVzYWdlRmxhZ3MgPSBEM0RVU0FHRV9XUklURU9OTFk7
Ci0gICAgICAgIGlmIChkeW5hbWljKQotICAgICAgICB7Ci0gICAgICAgICAgICB1c2FnZUZsYWdz
IHw9IEQzRFVTQUdFX0RZTkFNSUM7Ci0gICAgICAgIH0KLQotICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IG1SZW5kZXJlci0+Y3JlYXRlSW5kZXhCdWZmZXIoYnVmZmVyU2l6ZSwgdXNhZ2VGbGFncywg
Zm9ybWF0LCAmbUluZGV4QnVmZmVyKTsKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBjcmVhdGUgYW4gaW5kZXggYnVmZmVy
IG9mIHNpemUgJXUsIHJlc3VsdDogMHglMDh4LiIsIG1CdWZmZXJTaXplLCByZXN1bHQpOwotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbUJ1ZmZlclNp
emUgPSBidWZmZXJTaXplOwotICAgIG1JbmRleFR5cGUgPSBpbmRleFR5cGU7Ci0gICAgbUR5bmFt
aWMgPSBkeW5hbWljOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUluZGV4QnVmZmVyOSAqSW5k
ZXhCdWZmZXI5OjptYWtlSW5kZXhCdWZmZXI5KEluZGV4QnVmZmVyICppbmRleEJ1ZmZlcikKLXsK
LSAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShJbmRleEJ1ZmZlcjkqLCBpbmRleEJ1ZmZlcikp
OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbmRleEJ1ZmZlcjkqPihpbmRleEJ1ZmZlcik7Ci19
Ci0KLWJvb2wgSW5kZXhCdWZmZXI5OjptYXBCdWZmZXIodW5zaWduZWQgaW50IG9mZnNldCwgdW5z
aWduZWQgaW50IHNpemUsIHZvaWQqKiBvdXRNYXBwZWRNZW1vcnkpCi17Ci0gICAgaWYgKG1JbmRl
eEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIERXT1JEIGxvY2tGbGFncyA9IG1EeW5hbWljID8gRDNE
TE9DS19OT09WRVJXUklURSA6IDA7Ci0KLSAgICAgICAgdm9pZCAqbWFwUHRyID0gTlVMTDsKLSAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBtSW5kZXhCdWZmZXItPkxvY2sob2Zmc2V0LCBzaXplLCAm
bWFwUHRyLCBsb2NrRmxhZ3MpOwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEVSUigiSW5kZXggYnVmZmVyIGxvY2sgZmFpbGVkIHdpdGggZXJyb3Ig
MHglMDh4IiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
Ci0gICAgICAgICpvdXRNYXBwZWRNZW1vcnkgPSBtYXBQdHI7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBFUlIoIkluZGV4IGJ1ZmZlciBub3Qg
aW5pdGlhbGl6ZWQuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wg
SW5kZXhCdWZmZXI5Ojp1bm1hcEJ1ZmZlcigpCi17Ci0gICAgaWYgKG1JbmRleEJ1ZmZlcikKLSAg
ICB7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUluZGV4QnVmZmVyLT5VbmxvY2soKTsKLSAg
ICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIklu
ZGV4IGJ1ZmZlciB1bmxvY2sgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBFUlIoIkluZGV4IGJ1ZmZlciBub3Qg
aW5pdGlhbGl6ZWQuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLUdMZW51
bSBJbmRleEJ1ZmZlcjk6OmdldEluZGV4VHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbmRl
eFR5cGU7Ci19Ci0KLXVuc2lnbmVkIGludCBJbmRleEJ1ZmZlcjk6OmdldEJ1ZmZlclNpemUoKSBj
b25zdAotewotICAgIHJldHVybiBtQnVmZmVyU2l6ZTsKLX0KLQotYm9vbCBJbmRleEJ1ZmZlcjk6
OnNldFNpemUodW5zaWduZWQgaW50IGJ1ZmZlclNpemUsIEdMZW51bSBpbmRleFR5cGUpCi17Ci0g
ICAgaWYgKGJ1ZmZlclNpemUgPiBtQnVmZmVyU2l6ZSB8fCBpbmRleFR5cGUgIT0gbUluZGV4VHlw
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpbml0aWFsaXplKGJ1ZmZlclNpemUsIGluZGV4VHlw
ZSwgbUR5bmFtaWMpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci19Ci0KLWJvb2wgSW5kZXhCdWZmZXI5OjpkaXNjYXJkKCkKLXsKLSAgICBpZiAo
bUluZGV4QnVmZmVyKQotICAgIHsKLSAgICAgICAgdm9pZCAqZHVtbXk7Ci0gICAgICAgIEhSRVNV
TFQgcmVzdWx0OwotCi0gICAgICAgIHJlc3VsdCA9IG1JbmRleEJ1ZmZlci0+TG9jaygwLCAxLCAm
ZHVtbXksIEQzRExPQ0tfRElTQ0FSRCk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAg
ICAgICAgewotICAgICAgICAgICAgRVJSKCJEaXNjYXJkIGxvY2sgZmFpbGVkIHdpdGggZXJyb3Ig
MHglMDh4IiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHJlc3VsdCA9IG1JbmRleEJ1ZmZlci0+VW5sb2NrKCk7Ci0gICAgICAgIGlmIChG
QUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJEaXNjYXJkIHVubG9j
ayBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgiLCByZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVs
c2UKLSAgICB7Ci0gICAgICAgIEVSUigiSW5kZXggYnVmZmVyIG5vdCBpbml0aWFsaXplZC4iKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotRDNERk9STUFUIEluZGV4QnVmZmVy
OTo6Z2V0SW5kZXhGb3JtYXQoKSBjb25zdAotewotICAgIHN3aXRjaCAobUluZGV4VHlwZSkKLSAg
ICB7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6ICAgIHJldHVybiBEM0RGTVRfSU5ERVgx
NjsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6ICAgcmV0dXJuIEQzREZNVF9JTkRFWDE2
OwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6ICAgICByZXR1cm4gRDNERk1UX0lOREVYMzI7
Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgIHJldHVybiBEM0RGTVRfVU5LTk9XTjsK
LSAgICB9Ci19Ci0KLUlEaXJlY3QzREluZGV4QnVmZmVyOSAqIEluZGV4QnVmZmVyOTo6Z2V0QnVm
ZmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUluZGV4QnVmZmVyOwotfQotCi19ClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZlcjkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhCdWZmZXI5LmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDY4MDE4Njc1MzI0NTU3M2IzN2E4OGQ5YTVkZGFmNWM0MDc0ZTBl
MjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZlcjkuaAor
KysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIElu
ZGV4ZmZlcjkuaDogRGVmaW5lcyB0aGUgRDNEOSBJbmRleEJ1ZmZlciBpbXBsZW1lbnRhdGlvbi4K
LQotI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfSU5ERVhCVUZGRVI5X0hfCi0jZGVmaW5lIExJ
QkdMRVNWMl9SRU5ERVJFUl9JTkRFWEJVRkZFUjlfSF8KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9JbmRleEJ1ZmZlci5oIgotCi1uYW1lc3BhY2UgcngKLXsKLWNsYXNzIFJlbmRlcmVy
OTsKLQotY2xhc3MgSW5kZXhCdWZmZXI5IDogcHVibGljIEluZGV4QnVmZmVyCi17Ci0gIHB1Ymxp
YzoKLSAgICBleHBsaWNpdCBJbmRleEJ1ZmZlcjkoUmVuZGVyZXI5ICpjb25zdCByZW5kZXJlcik7
Ci0gICAgdmlydHVhbCB+SW5kZXhCdWZmZXI5KCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaW5pdGlh
bGl6ZSh1bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSwgR0xlbnVtIGluZGV4VHlwZSwgYm9vbCBkeW5h
bWljKTsKLQotICAgIHN0YXRpYyBJbmRleEJ1ZmZlcjkgKm1ha2VJbmRleEJ1ZmZlcjkoSW5kZXhC
dWZmZXIgKmluZGV4QnVmZmVyKTsKLQotICAgIHZpcnR1YWwgYm9vbCBtYXBCdWZmZXIodW5zaWdu
ZWQgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IHNpemUsIHZvaWQqKiBvdXRNYXBwZWRNZW1vcnkp
OwotICAgIHZpcnR1YWwgYm9vbCB1bm1hcEJ1ZmZlcigpOwotCi0gICAgdmlydHVhbCBHTGVudW0g
Z2V0SW5kZXhUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0QnVmZmVy
U2l6ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBzZXRTaXplKHVuc2lnbmVkIGludCBidWZm
ZXJTaXplLCBHTGVudW0gaW5kZXhUeXBlKTsKLQotICAgIHZpcnR1YWwgYm9vbCBkaXNjYXJkKCk7
Ci0KLSAgICBEM0RGT1JNQVQgZ2V0SW5kZXhGb3JtYXQoKSBjb25zdDsKLSAgICBJRGlyZWN0M0RJ
bmRleEJ1ZmZlcjkgKmdldEJ1ZmZlcigpIGNvbnN0OwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKEluZGV4QnVmZmVyOSk7Ci0KLSAgICByeDo6UmVuZGVyZXI5ICpj
b25zdCBtUmVuZGVyZXI7Ci0KLSAgICBJRGlyZWN0M0RJbmRleEJ1ZmZlcjkgKm1JbmRleEJ1ZmZl
cjsKLSAgICB1bnNpZ25lZCBpbnQgbUJ1ZmZlclNpemU7Ci0gICAgR0xlbnVtIG1JbmRleFR5cGU7
Ci0gICAgYm9vbCBtRHluYW1pYzsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5E
RVJFUl9JTkRFWEJVRkZFUjlfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5wdXRMYXlvdXRDYWNoZS5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0lucHV0TGF5b3V0Q2FjaGUuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTUyZjNhMzI2ZWFkYTUxOGJlNDNkMDgw
M2Q3ZTYxZTExZTBmZjk1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5w
dXRMYXlvdXRDYWNoZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMTMgKzAsMCBAQAotI2luY2x1
ZGUgInByZWNvbXBpbGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0v
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gSW5wdXRMYXlvdXRDYWNoZS5j
cHA6IERlZmluZXMgSW5wdXRMYXlvdXRDYWNoZSwgYSBjbGFzcyB0aGF0IGJ1aWxkcyBhbmQgY2Fj
aGVzCi0vLyBEM0QxMSBpbnB1dCBsYXlvdXRzLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL0lucHV0TGF5b3V0Q2FjaGUuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVmVy
dGV4QnVmZmVyMTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFn
ZTExLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckV4ZWN1dGFibGUxMS5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL0NvbnRleHQuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGF0YU1h
bmFnZXIuaCIKLQotI2luY2x1ZGUgInRoaXJkX3BhcnR5L211cm11cmhhc2gvTXVybXVySGFzaDMu
aCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLWNvbnN0IHVuc2lnbmVkIGludCBJbnB1dExheW91dENh
Y2hlOjprTWF4SW5wdXRMYXlvdXRzID0gMTAyNDsKLQotSW5wdXRMYXlvdXRDYWNoZTo6SW5wdXRM
YXlvdXRDYWNoZSgpIDogbUlucHV0TGF5b3V0TWFwKGtNYXhJbnB1dExheW91dHMsIGhhc2hJbnB1
dExheW91dCwgY29tcGFyZUlucHV0TGF5b3V0cykKLXsKLSAgICBtQ291bnRlciA9IDA7Ci0gICAg
bURldmljZSA9IE5VTEw7Ci0gICAgbURldmljZUNvbnRleHQgPSBOVUxMOwotICAgIG1DdXJyZW50
SUwgPSBOVUxMOwotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9WRVJU
RVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAgICAgICAgbUN1cnJlbnRCdWZmZXJzW2ldID0gLTE7
Ci0gICAgICAgIG1DdXJyZW50VmVydGV4U3RyaWRlc1tpXSA9IC0xOwotICAgICAgICBtQ3VycmVu
dFZlcnRleE9mZnNldHNbaV0gPSAtMTsKLSAgICB9Ci19Ci0KLUlucHV0TGF5b3V0Q2FjaGU6On5J
bnB1dExheW91dENhY2hlKCkKLXsKLSAgICBjbGVhcigpOwotfQotCi12b2lkIElucHV0TGF5b3V0
Q2FjaGU6OmluaXRpYWxpemUoSUQzRDExRGV2aWNlICpkZXZpY2UsIElEM0QxMURldmljZUNvbnRl
eHQgKmNvbnRleHQpCi17Ci0gICAgY2xlYXIoKTsKLSAgICBtRGV2aWNlID0gZGV2aWNlOwotICAg
IG1EZXZpY2VDb250ZXh0ID0gY29udGV4dDsKLX0KLQotdm9pZCBJbnB1dExheW91dENhY2hlOjpj
bGVhcigpCi17Ci0gICAgZm9yIChJbnB1dExheW91dE1hcDo6aXRlcmF0b3IgaSA9IG1JbnB1dExh
eW91dE1hcC5iZWdpbigpOyBpICE9IG1JbnB1dExheW91dE1hcC5lbmQoKTsgaSsrKQotICAgIHsK
LSAgICAgICAgaS0+c2Vjb25kLmlucHV0TGF5b3V0LT5SZWxlYXNlKCk7Ci0gICAgfQotICAgIG1J
bnB1dExheW91dE1hcC5jbGVhcigpOwotICAgIG1hcmtEaXJ0eSgpOwotfQotCi12b2lkIElucHV0
TGF5b3V0Q2FjaGU6Om1hcmtEaXJ0eSgpCi17Ci0gICAgbUN1cnJlbnRJTCA9IE5VTEw7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKysp
Ci0gICAgewotICAgICAgICBtQ3VycmVudEJ1ZmZlcnNbaV0gPSAtMTsKLSAgICAgICAgbUN1cnJl
bnRWZXJ0ZXhTdHJpZGVzW2ldID0gLTE7Ci0gICAgICAgIG1DdXJyZW50VmVydGV4T2Zmc2V0c1tp
XSA9IC0xOwotICAgIH0KLX0KLQotR0xlbnVtIElucHV0TGF5b3V0Q2FjaGU6OmFwcGx5VmVydGV4
QnVmZmVycyhUcmFuc2xhdGVkQXR0cmlidXRlIGF0dHJpYnV0ZXNbZ2w6Ok1BWF9WRVJURVhfQVRU
UklCU10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KQotewotICAgIGludCBzb3J0ZWRTZW1hbnRpY0lu
ZGljZXNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107Ci0gICAgcHJvZ3JhbUJpbmFyeS0+c29ydEF0
dHJpYnV0ZXNCeUxheW91dChhdHRyaWJ1dGVzLCBzb3J0ZWRTZW1hbnRpY0luZGljZXMpOwotCi0g
ICAgaWYgKCFtRGV2aWNlIHx8ICFtRGV2aWNlQ29udGV4dCkKLSAgICB7Ci0gICAgICAgIEVSUigi
SW5wdXRMYXlvdXRDYWNoZSBpcyBub3QgaW5pdGlhbGl6ZWQuIik7Ci0gICAgICAgIHJldHVybiBH
TF9JTlZBTElEX09QRVJBVElPTjsKLSAgICB9Ci0KLSAgICBJbnB1dExheW91dEtleSBpbEtleSA9
IHsgMCB9OwotCi0gICAgSUQzRDExQnVmZmVyICp2ZXJ0ZXhCdWZmZXJzW2dsOjpNQVhfVkVSVEVY
X0FUVFJJQlNdID0geyBOVUxMIH07Ci0gICAgdW5zaWduZWQgaW50IHZlcnRleEJ1ZmZlclNlcmlh
bHNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10gPSB7IDAgfTsKLSAgICBVSU5UIHZlcnRleFN0cmlk
ZXNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10gPSB7IDAgfTsKLSAgICBVSU5UIHZlcnRleE9mZnNl
dHNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10gPSB7IDAgfTsKLQotICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBzZW1hbnRpY05hbWUgPSAiVEVYQ09PUkQiOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAgewotICAgICAgICBp
ZiAoYXR0cmlidXRlc1tpXS5hY3RpdmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFZlcnRleEJ1
ZmZlcjExICp2ZXJ0ZXhCdWZmZXIgPSBWZXJ0ZXhCdWZmZXIxMTo6bWFrZVZlcnRleEJ1ZmZlcjEx
KGF0dHJpYnV0ZXNbaV0udmVydGV4QnVmZmVyKTsKLSAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2Ux
MSAqYnVmZmVyU3RvcmFnZSA9IGF0dHJpYnV0ZXNbaV0uc3RvcmFnZSA/IEJ1ZmZlclN0b3JhZ2Ux
MTo6bWFrZUJ1ZmZlclN0b3JhZ2UxMShhdHRyaWJ1dGVzW2ldLnN0b3JhZ2UpIDogTlVMTDsKLQot
ICAgICAgICAgICAgRDNEMTFfSU5QVVRfQ0xBU1NJRklDQVRJT04gaW5wdXRDbGFzcyA9IGF0dHJp
YnV0ZXNbaV0uZGl2aXNvciA+IDAgPyBEM0QxMV9JTlBVVF9QRVJfSU5TVEFOQ0VfREFUQSA6IEQz
RDExX0lOUFVUX1BFUl9WRVJURVhfREFUQTsKLQotICAgICAgICAgICAgLy8gUmVjb3JkIHRoZSB0
eXBlIG9mIHRoZSBhc3NvY2lhdGVkIHZlcnRleCBzaGFkZXIgdmVjdG9yIGluIG91ciBrZXkKLSAg
ICAgICAgICAgIC8vIFRoaXMgd2lsbCBwcmV2ZW50IG1pc21hdGNoZWQgdmVydGV4IHNoYWRlcnMg
ZnJvbSB1c2luZyB0aGUgc2FtZSBpbnB1dCBsYXlvdXQKLSAgICAgICAgICAgIEdMaW50IGF0dHJp
YnV0ZVNpemU7Ci0gICAgICAgICAgICBwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVBdHRyaWJ1dGUo
aWxLZXkuZWxlbWVudENvdW50LCAwLCBOVUxMLCAmYXR0cmlidXRlU2l6ZSwgJmlsS2V5LmVsZW1l
bnRzW2lsS2V5LmVsZW1lbnRDb3VudF0uZ2xzbEVsZW1lbnRUeXBlLCBOVUxMKTsKLQotICAgICAg
ICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5kZXNjLlNlbWFudGljTmFt
ZSA9IHNlbWFudGljTmFtZTsKLSAgICAgICAgICAgIGlsS2V5LmVsZW1lbnRzW2lsS2V5LmVsZW1l
bnRDb3VudF0uZGVzYy5TZW1hbnRpY0luZGV4ID0gc29ydGVkU2VtYW50aWNJbmRpY2VzW2ldOwot
ICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5kZXNjLkZvcm1h
dCA9IGF0dHJpYnV0ZXNbaV0uYXR0cmlidXRlLT5tQXJyYXlFbmFibGVkID8gdmVydGV4QnVmZmVy
LT5nZXREWEdJRm9ybWF0KCphdHRyaWJ1dGVzW2ldLmF0dHJpYnV0ZSkgOiBEWEdJX0ZPUk1BVF9S
MzJHMzJCMzJBMzJfRkxPQVQ7Ci0gICAgICAgICAgICBpbEtleS5lbGVtZW50c1tpbEtleS5lbGVt
ZW50Q291bnRdLmRlc2MuSW5wdXRTbG90ID0gaTsKLSAgICAgICAgICAgIGlsS2V5LmVsZW1lbnRz
W2lsS2V5LmVsZW1lbnRDb3VudF0uZGVzYy5BbGlnbmVkQnl0ZU9mZnNldCA9IDA7Ci0gICAgICAg
ICAgICBpbEtleS5lbGVtZW50c1tpbEtleS5lbGVtZW50Q291bnRdLmRlc2MuSW5wdXRTbG90Q2xh
c3MgPSBpbnB1dENsYXNzOwotICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVu
dENvdW50XS5kZXNjLkluc3RhbmNlRGF0YVN0ZXBSYXRlID0gYXR0cmlidXRlc1tpXS5kaXZpc29y
OwotICAgICAgICAgICAgaWxLZXkuZWxlbWVudENvdW50Kys7Ci0KLSAgICAgICAgICAgIHZlcnRl
eEJ1ZmZlcnNbaV0gPSBidWZmZXJTdG9yYWdlID8gYnVmZmVyU3RvcmFnZS0+Z2V0QnVmZmVyKCkg
OiB2ZXJ0ZXhCdWZmZXItPmdldEJ1ZmZlcigpOwotICAgICAgICAgICAgdmVydGV4QnVmZmVyU2Vy
aWFsc1tpXSA9IGJ1ZmZlclN0b3JhZ2UgPyBidWZmZXJTdG9yYWdlLT5nZXRTZXJpYWwoKSA6IHZl
cnRleEJ1ZmZlci0+Z2V0U2VyaWFsKCk7Ci0gICAgICAgICAgICB2ZXJ0ZXhTdHJpZGVzW2ldID0g
YXR0cmlidXRlc1tpXS5zdHJpZGU7Ci0gICAgICAgICAgICB2ZXJ0ZXhPZmZzZXRzW2ldID0gYXR0
cmlidXRlc1tpXS5vZmZzZXQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBJRDNEMTFJbnB1dExh
eW91dCAqaW5wdXRMYXlvdXQgPSBOVUxMOwotCi0gICAgSW5wdXRMYXlvdXRNYXA6Oml0ZXJhdG9y
IGkgPSBtSW5wdXRMYXlvdXRNYXAuZmluZChpbEtleSk7Ci0gICAgaWYgKGkgIT0gbUlucHV0TGF5
b3V0TWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgaW5wdXRMYXlvdXQgPSBpLT5zZWNvbmQuaW5w
dXRMYXlvdXQ7Ci0gICAgICAgIGktPnNlY29uZC5sYXN0VXNlZFRpbWUgPSBtQ291bnRlcisrOwot
ICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBTaGFkZXJFeGVjdXRhYmxlMTEgKnNoYWRl
ciA9IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShwcm9ncmFtQmlu
YXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlKCkpOwotCi0gICAgICAgIEQzRDExX0lOUFVUX0VMRU1F
TlRfREVTQyBkZXNjc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaiA9IDA7IGogPCBpbEtleS5lbGVtZW50Q291bnQ7ICsraikKLSAgICAgICAgewot
ICAgICAgICAgICAgZGVzY3Nbal0gPSBpbEtleS5lbGVtZW50c1tqXS5kZXNjOwotICAgICAgICB9
Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVJbnB1dExheW91dChk
ZXNjcywgaWxLZXkuZWxlbWVudENvdW50LCBzaGFkZXItPmdldEZ1bmN0aW9uKCksIHNoYWRlci0+
Z2V0TGVuZ3RoKCksICZpbnB1dExheW91dCk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
LSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gY3JhdGUgaW5wdXQgbGF5b3V0
LCByZXN1bHQ6IDB4JTA4eCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gR0xfSU5WQUxJ
RF9PUEVSQVRJT047Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobUlucHV0TGF5b3V0TWFwLnNp
emUoKSA+PSBrTWF4SW5wdXRMYXlvdXRzKQotICAgICAgICB7Ci0gICAgICAgICAgICBUUkFDRSgi
T3ZlcmZsb3dlZCB0aGUgbGltaXQgb2YgJXUgaW5wdXQgbGF5b3V0cywgcmVtb3ZpbmcgdGhlIGxl
YXN0IHJlY2VudGx5IHVzZWQgIgotICAgICAgICAgICAgICAgICAgInRvIG1ha2Ugcm9vbS4iLCBr
TWF4SW5wdXRMYXlvdXRzKTsKLQotICAgICAgICAgICAgSW5wdXRMYXlvdXRNYXA6Oml0ZXJhdG9y
IGxlYXN0UmVjZW50bHlVc2VkID0gbUlucHV0TGF5b3V0TWFwLmJlZ2luKCk7Ci0gICAgICAgICAg
ICBmb3IgKElucHV0TGF5b3V0TWFwOjppdGVyYXRvciBpID0gbUlucHV0TGF5b3V0TWFwLmJlZ2lu
KCk7IGkgIT0gbUlucHV0TGF5b3V0TWFwLmVuZCgpOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGktPnNlY29uZC5sYXN0VXNlZFRpbWUgPCBsZWFzdFJlY2VudGx5VXNl
ZC0+c2Vjb25kLmxhc3RVc2VkVGltZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIGxlYXN0UmVjZW50bHlVc2VkID0gaTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmlucHV0TGF5b3V0
LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBtSW5wdXRMYXlvdXRNYXAuZXJhc2UobGVhc3RSZWNl
bnRseVVzZWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgSW5wdXRMYXlvdXRDb3VudGVyUGFpciBp
bnB1dENvdW50ZXJQYWlyOwotICAgICAgICBpbnB1dENvdW50ZXJQYWlyLmlucHV0TGF5b3V0ID0g
aW5wdXRMYXlvdXQ7Ci0gICAgICAgIGlucHV0Q291bnRlclBhaXIubGFzdFVzZWRUaW1lID0gbUNv
dW50ZXIrKzsKLQotICAgICAgICBtSW5wdXRMYXlvdXRNYXAuaW5zZXJ0KHN0ZDo6bWFrZV9wYWly
KGlsS2V5LCBpbnB1dENvdW50ZXJQYWlyKSk7Ci0gICAgfQotCi0gICAgaWYgKGlucHV0TGF5b3V0
ICE9IG1DdXJyZW50SUwpCi0gICAgewotICAgICAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRJbnB1
dExheW91dChpbnB1dExheW91dCk7Ci0gICAgICAgIG1DdXJyZW50SUwgPSBpbnB1dExheW91dDsK
LSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpNQVhfVkVSVEVY
X0FUVFJJQlM7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmICh2ZXJ0ZXhCdWZmZXJTZXJpYWxzW2ld
ICE9IG1DdXJyZW50QnVmZmVyc1tpXSB8fCB2ZXJ0ZXhTdHJpZGVzW2ldICE9IG1DdXJyZW50VmVy
dGV4U3RyaWRlc1tpXSB8fAotICAgICAgICAgICAgdmVydGV4T2Zmc2V0c1tpXSAhPSBtQ3VycmVu
dFZlcnRleE9mZnNldHNbaV0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0
LT5JQVNldFZlcnRleEJ1ZmZlcnMoaSwgMSwgJnZlcnRleEJ1ZmZlcnNbaV0sICZ2ZXJ0ZXhTdHJp
ZGVzW2ldLCAmdmVydGV4T2Zmc2V0c1tpXSk7Ci0gICAgICAgICAgICBtQ3VycmVudEJ1ZmZlcnNb
aV0gPSB2ZXJ0ZXhCdWZmZXJTZXJpYWxzW2ldOwotICAgICAgICAgICAgbUN1cnJlbnRWZXJ0ZXhT
dHJpZGVzW2ldID0gdmVydGV4U3RyaWRlc1tpXTsKLSAgICAgICAgICAgIG1DdXJyZW50VmVydGV4
T2Zmc2V0c1tpXSA9IHZlcnRleE9mZnNldHNbaV07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gR0xfTk9fRVJST1I7Ci19Ci0KLXN0ZDo6c2l6ZV90IElucHV0TGF5b3V0Q2FjaGU6Omhh
c2hJbnB1dExheW91dChjb25zdCBJbnB1dExheW91dEtleSAmaW5wdXRMYXlvdXQpCi17Ci0gICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZWVkID0gMHhERUFEQkVFRjsKLQotICAgIHN0ZDo6
c2l6ZV90IGhhc2ggPSAwOwotICAgIE11cm11ckhhc2gzX3g4Nl8zMihpbnB1dExheW91dC5iZWdp
bigpLCBpbnB1dExheW91dC5lbmQoKSAtIGlucHV0TGF5b3V0LmJlZ2luKCksIHNlZWQsICZoYXNo
KTsKLSAgICByZXR1cm4gaGFzaDsKLX0KLQotYm9vbCBJbnB1dExheW91dENhY2hlOjpjb21wYXJl
SW5wdXRMYXlvdXRzKGNvbnN0IElucHV0TGF5b3V0S2V5ICZhLCBjb25zdCBJbnB1dExheW91dEtl
eSAmYikKLXsKLSAgICBpZiAoYS5lbGVtZW50Q291bnQgIT0gYi5lbGVtZW50Q291bnQpCi0gICAg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0ZDo6ZXF1YWwo
YS5iZWdpbigpLCBhLmVuZCgpLCBiLmJlZ2luKCkpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0lucHV0TGF5b3V0Q2Fj
aGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5w
dXRMYXlvdXRDYWNoZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjFhOGVlYmNm
N2E2Y2E5OTBjYWI5MzgyNTU4ZjMzOTc4MTQ3YTAwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvSW5wdXRMYXlvdXRDYWNoZS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAs
MCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIElucHV0TGF5b3V0Q2FjaGUuaDogRGVmaW5lcyBJbnB1
dExheW91dENhY2hlLCBhIGNsYXNzIHRoYXQgYnVpbGRzIGFuZCBjYWNoZXMKLS8vIEQzRDExIGlu
cHV0IGxheW91dHMuCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0lOUFVUTEFZT1VUQ0FD
SEVfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX0lOUFVUTEFZT1VUQ0FDSEVfSF8KLQot
I2luY2x1ZGUgImxpYkdMRVN2Mi9Db25zdGFudHMuaCIKLSNpbmNsdWRlICJjb21tb24vYW5nbGV1
dGlscy5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLWNsYXNzIFByb2dyYW1CaW5hcnk7Ci19Ci0KLW5h
bWVzcGFjZSByeAotewotc3RydWN0IFRyYW5zbGF0ZWRBdHRyaWJ1dGU7Ci0KLWNsYXNzIElucHV0
TGF5b3V0Q2FjaGUKLXsKLSAgcHVibGljOgotICAgIElucHV0TGF5b3V0Q2FjaGUoKTsKLSAgICB2
aXJ0dWFsIH5JbnB1dExheW91dENhY2hlKCk7Ci0KLSAgICB2b2lkIGluaXRpYWxpemUoSUQzRDEx
RGV2aWNlICpkZXZpY2UsIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQpOwotICAgIHZvaWQg
Y2xlYXIoKTsKLSAgICB2b2lkIG1hcmtEaXJ0eSgpOwotCi0gICAgR0xlbnVtIGFwcGx5VmVydGV4
QnVmZmVycyhUcmFuc2xhdGVkQXR0cmlidXRlIGF0dHJpYnV0ZXNbZ2w6Ok1BWF9WRVJURVhfQVRU
UklCU10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oSW5wdXRMYXlvdXRDYWNoZSk7Ci0KLSAgICBzdHJ1Y3QgSW5wdXRMYXlvdXRFbGVtZW50Ci0g
ICAgewotICAgICAgICBEM0QxMV9JTlBVVF9FTEVNRU5UX0RFU0MgZGVzYzsKLSAgICAgICAgR0xl
bnVtIGdsc2xFbGVtZW50VHlwZTsKLSAgICB9OwotCi0gICAgc3RydWN0IElucHV0TGF5b3V0S2V5
Ci0gICAgewotICAgICAgICB1bnNpZ25lZCBpbnQgZWxlbWVudENvdW50OwotICAgICAgICBJbnB1
dExheW91dEVsZW1lbnQgZWxlbWVudHNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107Ci0KLSAgICAg
ICAgY29uc3QgY2hhciAqYmVnaW4oKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oJmVsZW1lbnRDb3VudCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBjb25zdCBjaGFyICplbmQoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oJmVsZW1lbnRzW2VsZW1l
bnRDb3VudF0pOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHN0cnVjdCBJbnB1dExheW91dENv
dW50ZXJQYWlyCi0gICAgewotICAgICAgICBJRDNEMTFJbnB1dExheW91dCAqaW5wdXRMYXlvdXQ7
Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBsYXN0VXNlZFRpbWU7Ci0gICAgfTsKLQotICAg
IElEM0QxMUlucHV0TGF5b3V0ICptQ3VycmVudElMOwotICAgIHVuc2lnbmVkIGludCBtQ3VycmVu
dEJ1ZmZlcnNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107Ci0gICAgVUlOVCBtQ3VycmVudFZlcnRl
eFN0cmlkZXNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107Ci0gICAgVUlOVCBtQ3VycmVudFZlcnRl
eE9mZnNldHNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107Ci0KLSAgICBzdGF0aWMgc3RkOjpzaXpl
X3QgaGFzaElucHV0TGF5b3V0KGNvbnN0IElucHV0TGF5b3V0S2V5ICZpbnB1dExheW91dCk7Ci0g
ICAgc3RhdGljIGJvb2wgY29tcGFyZUlucHV0TGF5b3V0cyhjb25zdCBJbnB1dExheW91dEtleSAm
YSwgY29uc3QgSW5wdXRMYXlvdXRLZXkgJmIpOwotCi0gICAgdHlwZWRlZiBzdGQ6OnNpemVfdCAo
KklucHV0TGF5b3V0SGFzaEZ1bmN0aW9uKShjb25zdCBJbnB1dExheW91dEtleSAmKTsKLSAgICB0
eXBlZGVmIGJvb2wgKCpJbnB1dExheW91dEVxdWFsaXR5RnVuY3Rpb24pKGNvbnN0IElucHV0TGF5
b3V0S2V5ICYsIGNvbnN0IElucHV0TGF5b3V0S2V5ICYpOwotICAgIHR5cGVkZWYgc3RkOjp1bm9y
ZGVyZWRfbWFwPElucHV0TGF5b3V0S2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IElucHV0TGF5b3V0Q291bnRlclBhaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SW5wdXRMYXlvdXRIYXNoRnVuY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SW5wdXRMYXlvdXRFcXVhbGl0eUZ1bmN0aW9uPiBJbnB1dExheW91dE1hcDsKLSAgICBJbnB1dExh
eW91dE1hcCBtSW5wdXRMYXlvdXRNYXA7Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50
IGtNYXhJbnB1dExheW91dHM7Ci0KLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgbUNvdW50ZXI7Ci0K
LSAgICBJRDNEMTFEZXZpY2UgKm1EZXZpY2U7Ci0gICAgSUQzRDExRGV2aWNlQ29udGV4dCAqbURl
dmljZUNvbnRleHQ7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfSU5Q
VVRMQVlPVVRDQUNIRV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9RdWVyeTExLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUXVlcnkxMS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDEzMjEwZmM5MjkxMzAzMDc2MjhhNGM5ZDFhZWVmZDQwMWQ5MjIwNDguLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9RdWVyeTExLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDEyMiArMCwwIEBACi0jaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKLS8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwotCi0vLyBRdWVyeTExLmNwcDogRGVmaW5lcyB0aGUgcng6OlF1ZXJ5MTEgY2xhc3Mgd2hpY2gg
aW1wbGVtZW50cyByeDo6UXVlcnlJbXBsLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L1F1ZXJ5MTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIxMS5oIgot
I2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0KLW5hbWVzcGFjZSByeAotewotCi1RdWVyeTEx
OjpRdWVyeTExKHJ4OjpSZW5kZXJlcjExICpyZW5kZXJlciwgR0xlbnVtIHR5cGUpIDogUXVlcnlJ
bXBsKHR5cGUpCi17Ci0gICAgbVJlbmRlcmVyID0gcmVuZGVyZXI7Ci0gICAgbVF1ZXJ5ID0gTlVM
TDsKLX0KLQotUXVlcnkxMTo6flF1ZXJ5MTEoKQotewotICAgIGlmIChtUXVlcnkpCi0gICAgewot
ICAgICAgICBtUXVlcnktPlJlbGVhc2UoKTsKLSAgICAgICAgbVF1ZXJ5ID0gTlVMTDsKLSAgICB9
Ci19Ci0KLXZvaWQgUXVlcnkxMTo6YmVnaW4oKQotewotICAgIGlmIChtUXVlcnkgPT0gTlVMTCkK
LSAgICB7Ci0gICAgICAgIEQzRDExX1FVRVJZX0RFU0MgcXVlcnlEZXNjOwotICAgICAgICBxdWVy
eURlc2MuUXVlcnkgPSBEM0QxMV9RVUVSWV9PQ0NMVVNJT047Ci0gICAgICAgIHF1ZXJ5RGVzYy5N
aXNjRmxhZ3MgPSAwOwotCi0gICAgICAgIGlmIChGQUlMRUQobVJlbmRlcmVyLT5nZXREZXZpY2Uo
KS0+Q3JlYXRlUXVlcnkoJnF1ZXJ5RGVzYywgJm1RdWVyeSkpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCktPkJlZ2luKG1RdWVyeSk7Ci19
Ci0KLXZvaWQgUXVlcnkxMTo6ZW5kKCkKLXsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAg
ewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9
Ci0KLSAgICBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKS0+RW5kKG1RdWVyeSk7Ci0KLSAg
ICBtU3RhdHVzID0gR0xfRkFMU0U7Ci0gICAgbVJlc3VsdCA9IEdMX0ZBTFNFOwotfQotCi1HTHVp
bnQgUXVlcnkxMTo6Z2V0UmVzdWx0KCkKLXsKLSAgICBpZiAobVF1ZXJ5ICE9IE5VTEwpCi0gICAg
ewotICAgICAgICB3aGlsZSAoIXRlc3RRdWVyeSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBT
bGVlcCgwKTsKLSAgICAgICAgICAgIC8vIGV4cGxpY2l0bHkgY2hlY2sgZm9yIGRldmljZSBsb3Nz
LCBzb21lIGRyaXZlcnMgc2VlbSB0byByZXR1cm4gU19GQUxTRQotICAgICAgICAgICAgLy8gaWYg
dGhlIGRldmljZSBpcyBsb3N0Ci0gICAgICAgICAgICBpZiAobVJlbmRlcmVyLT50ZXN0RGV2aWNl
TG9zdCh0cnVlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlksIDApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIG1SZXN1bHQ7Ci19Ci0KLUdMYm9vbGVhbiBRdWVyeTExOjppc1Jlc3Vs
dEF2YWlsYWJsZSgpCi17Ci0gICAgaWYgKG1RdWVyeSAhPSBOVUxMKQotICAgIHsKLSAgICAgICAg
dGVzdFF1ZXJ5KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1TdGF0dXM7Ci19Ci0KLUdMYm9vbGVh
biBRdWVyeTExOjp0ZXN0UXVlcnkoKQotewotICAgIGlmIChtUXVlcnkgIT0gTlVMTCAmJiBtU3Rh
dHVzICE9IEdMX1RSVUUpCi0gICAgewotICAgICAgICBVSU5UNjQgbnVtUGl4ZWxzID0gMDsKLSAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKS0+R2V0
RGF0YShtUXVlcnksICZudW1QaXhlbHMsIHNpemVvZihVSU5UNjQpLCAwKTsKLSAgICAgICAgaWYg
KHJlc3VsdCA9PSBTX09LKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU3RhdHVzID0gR0xfVFJV
RTsKLQotICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDoKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDoKLSAgICAgICAgICAg
ICAgICBtUmVzdWx0ID0gKG51bVBpeGVscyA+IDApID8gR0xfVFJVRSA6IEdMX0ZBTFNFOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZSBpZiAobVJlbmRlcmVyLT50ZXN0RGV2aWNlTG9zdCh0cnVlKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9UUlVFKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiBtU3RhdHVzOwotICAgIH0KLQotICAgIHJldHVybiBHTF9U
UlVFOyAvLyBwcmV2ZW50IGJsb2NraW5nIHdoZW4gcXVlcnkgaXMgbnVsbAotfQotCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1F1
ZXJ5MTEuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
UXVlcnkxMS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTAzZGU3N2NhMzI4NTVk
YmNkMTliMTNiYzQ0ZDk3ODM3OTRhNjc1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvUXVlcnkxMS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
LS8vCi0KLS8vIFF1ZXJ5MTEuaDogRGVmaW5lcyB0aGUgcng6OlF1ZXJ5MTEgY2xhc3Mgd2hpY2gg
aW1wbGVtZW50cyByeDo6UXVlcnlJbXBsLgotCi0jaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9R
VUVSWTExX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9RVUVSWTExX0hfCi0KLSNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUXVlcnlJbXBsLmgiCi0KLW5hbWVzcGFjZSByeAotewot
Y2xhc3MgUmVuZGVyZXIxMTsKLQotY2xhc3MgUXVlcnkxMSA6IHB1YmxpYyBRdWVyeUltcGwKLXsK
LSAgcHVibGljOgotICAgIFF1ZXJ5MTEocng6OlJlbmRlcmVyMTEgKnJlbmRlcmVyLCBHTGVudW0g
dHlwZSk7Ci0gICAgdmlydHVhbCB+UXVlcnkxMSgpOwotCi0gICAgdm9pZCBiZWdpbigpOwotICAg
IHZvaWQgZW5kKCk7Ci0gICAgR0x1aW50IGdldFJlc3VsdCgpOwotICAgIEdMYm9vbGVhbiBpc1Jl
c3VsdEF2YWlsYWJsZSgpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKFF1ZXJ5MTEpOwotCi0gICAgR0xib29sZWFuIHRlc3RRdWVyeSgpOwotCi0gICAgcng6OlJl
bmRlcmVyMTEgKm1SZW5kZXJlcjsKLSAgICBJRDNEMTFRdWVyeSAqbVF1ZXJ5OwotfTsKLQotfQot
Ci0jZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1FVRVJZMTFfSF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUXVlcnk5LmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUXVlcnk5LmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY2OTQyNjdkZDFlMTU5YzA5NTM4YmJi
Y2JlYTdmYWIwMDA5ZDVjMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1F1
ZXJ5OS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotI2luY2x1ZGUgInByZWNv
bXBpbGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gUXVlcnk5LmNwcDogRGVmaW5lcyB0aGUgcng6
OlF1ZXJ5OSBjbGFzcyB3aGljaCBpbXBsZW1lbnRzIHJ4OjpRdWVyeUltcGwuCi0KLQotI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9RdWVyeTkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWFp
bi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9yZW5kZXJlcjlfdXRpbHMuaCIKLSNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXI5LmgiCi0KLW5hbWVzcGFjZSByeAot
ewotCi1RdWVyeTk6OlF1ZXJ5OShyeDo6UmVuZGVyZXI5ICpyZW5kZXJlciwgR0xlbnVtIHR5cGUp
IDogUXVlcnlJbXBsKHR5cGUpCi17Ci0gICAgbVJlbmRlcmVyID0gcmVuZGVyZXI7Ci0gICAgbVF1
ZXJ5ID0gTlVMTDsKLX0KLQotUXVlcnk5Ojp+UXVlcnk5KCkKLXsKLSAgICBpZiAobVF1ZXJ5KQot
ICAgIHsKLSAgICAgICAgbVF1ZXJ5LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1RdWVyeSA9IE5VTEw7
Ci0gICAgfQotfQotCi12b2lkIFF1ZXJ5OTo6YmVnaW4oKQotewotICAgIGlmIChtUXVlcnkgPT0g
TlVMTCkKLSAgICB7Ci0gICAgICAgIGlmIChGQUlMRUQobVJlbmRlcmVyLT5nZXREZXZpY2UoKS0+
Q3JlYXRlUXVlcnkoRDNEUVVFUllUWVBFX09DQ0xVU0lPTiwgJm1RdWVyeSkpKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgSFJFU1VMVCByZXN1bHQgPSBtUXVlcnktPklzc3VlKEQzRElTU1VF
X0JFR0lOKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotfQotCi12b2lkIFF1ZXJ5
OTo6ZW5kKCkKLXsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICBIUkVTVUxU
IHJlc3VsdCA9IG1RdWVyeS0+SXNzdWUoRDNESVNTVUVfRU5EKTsKLSAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOwotCi0gICAgbVN0YXR1cyA9IEdMX0ZBTFNFOwotICAgIG1SZXN1bHQgPSBH
TF9GQUxTRTsKLX0KLQotR0x1aW50IFF1ZXJ5OTo6Z2V0UmVzdWx0KCkKLXsKLSAgICBpZiAobVF1
ZXJ5ICE9IE5VTEwpCi0gICAgewotICAgICAgICB3aGlsZSAoIXRlc3RRdWVyeSgpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBTbGVlcCgwKTsKLSAgICAgICAgICAgIC8vIGV4cGxpY2l0bHkgY2hl
Y2sgZm9yIGRldmljZSBsb3NzCi0gICAgICAgICAgICAvLyBzb21lIGRyaXZlcnMgc2VlbSB0byBy
ZXR1cm4gU19GQUxTRSBldmVuIGlmIHRoZSBkZXZpY2UgaXMgbG9zdAotICAgICAgICAgICAgLy8g
aW5zdGVhZCBvZiBEM0RFUlJfREVWSUNFTE9TVCBsaWtlIHRoZXkgc2hvdWxkCi0gICAgICAgICAg
ICBpZiAobVJlbmRlcmVyLT50ZXN0RGV2aWNlTG9zdCh0cnVlKSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIDApOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1SZXN1bHQ7Ci19Ci0K
LUdMYm9vbGVhbiBRdWVyeTk6OmlzUmVzdWx0QXZhaWxhYmxlKCkKLXsKLSAgICBpZiAobVF1ZXJ5
ICE9IE5VTEwpCi0gICAgewotICAgICAgICB0ZXN0UXVlcnkoKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gbVN0YXR1czsKLX0KLQotR0xib29sZWFuIFF1ZXJ5OTo6dGVzdFF1ZXJ5KCkKLXsKLSAgICBp
ZiAobVF1ZXJ5ICE9IE5VTEwgJiYgbVN0YXR1cyAhPSBHTF9UUlVFKQotICAgIHsKLSAgICAgICAg
RFdPUkQgbnVtUGl4ZWxzID0gMDsKLQotICAgICAgICBIUkVTVUxUIGhyZXMgPSBtUXVlcnktPkdl
dERhdGEoJm51bVBpeGVscywgc2l6ZW9mKERXT1JEKSwgRDNER0VUREFUQV9GTFVTSCk7Ci0gICAg
ICAgIGlmIChocmVzID09IFNfT0spCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1TdGF0dXMgPSAg
R0xfVFJVRTsKLQotICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDoKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDoKLSAgICAg
ICAgICAgICAgICBtUmVzdWx0ID0gKG51bVBpeGVscyA+IDApID8gR0xfVFJVRSA6IEdMX0ZBTFNF
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZSBpZiAoZDNkOTo6aXNEZXZpY2VMb3N0RXJyb3IoaHJlcykpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1SZW5kZXJlci0+bm90aWZ5RGV2aWNlTG9zdCgpOwotICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9UUlVFKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiBtU3RhdHVzOwotICAgIH0KLQotICAgIHJldHVybiBHTF9UUlVFOyAvLyBw
cmV2ZW50IGJsb2NraW5nIHdoZW4gcXVlcnkgaXMgbnVsbAotfQotCi19CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1F1ZXJ5OS5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9RdWVyeTkuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdlZWY4OTMzNmVmOGMzNDRhYTUxNjdiNGY0
MDIxYjEwNDFjMDcwYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1F1ZXJ5
OS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykg
MjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFF1
ZXJ5OS5oOiBEZWZpbmVzIHRoZSByeDo6UXVlcnk5IGNsYXNzIHdoaWNoIGltcGxlbWVudHMgcng6
OlF1ZXJ5SW1wbC4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfUVVFUlk5X0hfCi0jZGVm
aW5lIExJQkdMRVNWMl9SRU5ERVJFUl9RVUVSWTlfSF8KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9RdWVyeUltcGwuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci1jbGFzcyBSZW5kZXJlcjk7
Ci0KLWNsYXNzIFF1ZXJ5OSA6IHB1YmxpYyBRdWVyeUltcGwKLXsKLSAgcHVibGljOgotICAgIFF1
ZXJ5OShyeDo6UmVuZGVyZXI5ICpyZW5kZXJlciwgR0xlbnVtIHR5cGUpOwotICAgIHZpcnR1YWwg
flF1ZXJ5OSgpOwotCi0gICAgdm9pZCBiZWdpbigpOwotICAgIHZvaWQgZW5kKCk7Ci0gICAgR0x1
aW50IGdldFJlc3VsdCgpOwotICAgIEdMYm9vbGVhbiBpc1Jlc3VsdEF2YWlsYWJsZSgpOwotCi0g
IHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFF1ZXJ5OSk7Ci0KLSAgICBH
TGJvb2xlYW4gdGVzdFF1ZXJ5KCk7Ci0KLSAgICByeDo6UmVuZGVyZXI5ICptUmVuZGVyZXI7Ci0g
ICAgSURpcmVjdDNEUXVlcnk5ICptUXVlcnk7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVT
VjJfUkVOREVSRVJfUVVFUlk5X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclN0YXRlQ2FjaGUuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJTdGF0ZUNhY2hlLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjMxMTFhZjcyYmUwY2IyZDcyZmZhMGVj
YjdhZjQ1NjM3YTVkNjk0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1Jl
bmRlclN0YXRlQ2FjaGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDA2ICswLDAgQEAKLSNpbmNs
dWRlICJwcmVjb21waWxlZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gUmVuZGVyU3RhdGVD
YWNoZS5jcHA6IERlZmluZXMgcng6OlJlbmRlclN0YXRlQ2FjaGUsIGEgY2FjaGUgb2YgRGlyZWN0
M0QgcmVuZGVyCi0vLyBzdGF0ZSBvYmplY3RzLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL1JlbmRlclN0YXRlQ2FjaGUuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvcmVu
ZGVyZXIxMV91dGlscy5oIgotCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0jaW5jbHVkZSAi
dGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJtdXJIYXNoMy5oIgotCi1uYW1lc3BhY2UgcngKLXsK
LQotLy8gTVNETidzIGRvY3VtZW50YXRpb24gb2YgSUQzRDExRGV2aWNlOjpDcmVhdGVCbGVuZFN0
YXRlLCBJRDNEMTFEZXZpY2U6OkNyZWF0ZVJhc3Rlcml6ZXJTdGF0ZSwKLS8vIElEM0QxMURldmlj
ZTo6Q3JlYXRlRGVwdGhTdGVuY2lsU3RhdGUgYW5kIElEM0QxMURldmljZTo6Q3JlYXRlU2FtcGxl
clN0YXRlIGNsYWltcyB0aGUgbWF4aW11bQotLy8gbnVtYmVyIG9mIHVuaXF1ZSBzdGF0ZXMgb2Yg
ZWFjaCB0eXBlIGFuIGFwcGxpY2F0aW9uIGNhbiBjcmVhdGUgaXMgNDA5NgotY29uc3QgdW5zaWdu
ZWQgaW50IFJlbmRlclN0YXRlQ2FjaGU6OmtNYXhCbGVuZFN0YXRlcyA9IDQwOTY7Ci1jb25zdCB1
bnNpZ25lZCBpbnQgUmVuZGVyU3RhdGVDYWNoZTo6a01heFJhc3Rlcml6ZXJTdGF0ZXMgPSA0MDk2
OwotY29uc3QgdW5zaWduZWQgaW50IFJlbmRlclN0YXRlQ2FjaGU6OmtNYXhEZXB0aFN0ZW5jaWxT
dGF0ZXMgPSA0MDk2OwotY29uc3QgdW5zaWduZWQgaW50IFJlbmRlclN0YXRlQ2FjaGU6OmtNYXhT
YW1wbGVyU3RhdGVzID0gNDA5NjsKLQotUmVuZGVyU3RhdGVDYWNoZTo6UmVuZGVyU3RhdGVDYWNo
ZSgpIDogbURldmljZShOVUxMKSwgbUNvdW50ZXIoMCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtQmxlbmRTdGF0ZUNhY2hlKGtNYXhCbGVuZFN0YXRlcywgaGFzaEJs
ZW5kU3RhdGUsIGNvbXBhcmVCbGVuZFN0YXRlcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtUmFzdGVyaXplclN0YXRlQ2FjaGUoa01heFJhc3Rlcml6ZXJTdGF0ZXMs
IGhhc2hSYXN0ZXJpemVyU3RhdGUsIGNvbXBhcmVSYXN0ZXJpemVyU3RhdGVzKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlKGtN
YXhEZXB0aFN0ZW5jaWxTdGF0ZXMsIGhhc2hEZXB0aFN0ZW5jaWxTdGF0ZSwgY29tcGFyZURlcHRo
U3RlbmNpbFN0YXRlcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
U2FtcGxlclN0YXRlQ2FjaGUoa01heFNhbXBsZXJTdGF0ZXMsIGhhc2hTYW1wbGVyU3RhdGUsIGNv
bXBhcmVTYW1wbGVyU3RhdGVzKQotewotfQotCi1SZW5kZXJTdGF0ZUNhY2hlOjp+UmVuZGVyU3Rh
dGVDYWNoZSgpCi17Ci0gICAgY2xlYXIoKTsKLX0KLQotdm9pZCBSZW5kZXJTdGF0ZUNhY2hlOjpp
bml0aWFsaXplKElEM0QxMURldmljZSAqZGV2aWNlKQotewotICAgIGNsZWFyKCk7Ci0gICAgbURl
dmljZSA9IGRldmljZTsKLX0KLQotdm9pZCBSZW5kZXJTdGF0ZUNhY2hlOjpjbGVhcigpCi17Ci0g
ICAgZm9yIChCbGVuZFN0YXRlTWFwOjppdGVyYXRvciBpID0gbUJsZW5kU3RhdGVDYWNoZS5iZWdp
bigpOyBpICE9IG1CbGVuZFN0YXRlQ2FjaGUuZW5kKCk7IGkrKykKLSAgICB7Ci0gICAgICAgIGkt
PnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOwotICAgIH0KLSAgICBtQmxlbmRTdGF0ZUNhY2hlLmNs
ZWFyKCk7Ci0KLSAgICBmb3IgKFJhc3Rlcml6ZXJTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1SYXN0
ZXJpemVyU3RhdGVDYWNoZS5iZWdpbigpOyBpICE9IG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5lbmQo
KTsgaSsrKQotICAgIHsKLSAgICAgICAgaS0+c2Vjb25kLmZpcnN0LT5SZWxlYXNlKCk7Ci0gICAg
fQotICAgIG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5jbGVhcigpOwotCi0gICAgZm9yIChEZXB0aFN0
ZW5jaWxTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmJlZ2lu
KCk7IGkgIT0gbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuZW5kKCk7IGkrKykKLSAgICB7Ci0gICAg
ICAgIGktPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOwotICAgIH0KLSAgICBtRGVwdGhTdGVuY2ls
U3RhdGVDYWNoZS5jbGVhcigpOwotCi0gICAgZm9yIChTYW1wbGVyU3RhdGVNYXA6Oml0ZXJhdG9y
IGkgPSBtU2FtcGxlclN0YXRlQ2FjaGUuYmVnaW4oKTsgaSAhPSBtU2FtcGxlclN0YXRlQ2FjaGUu
ZW5kKCk7IGkrKykKLSAgICB7Ci0gICAgICAgIGktPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOwot
ICAgIH0KLSAgICBtU2FtcGxlclN0YXRlQ2FjaGUuY2xlYXIoKTsKLX0KLQotc3RkOjpzaXplX3Qg
UmVuZGVyU3RhdGVDYWNoZTo6aGFzaEJsZW5kU3RhdGUoY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJs
ZW5kU3RhdGUpCi17Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZWVkID0gMHhBQkNE
RUY5ODsKLQotICAgIHN0ZDo6c2l6ZV90IGhhc2ggPSAwOwotICAgIE11cm11ckhhc2gzX3g4Nl8z
MigmYmxlbmRTdGF0ZSwgc2l6ZW9mKGdsOjpCbGVuZFN0YXRlKSwgc2VlZCwgJmhhc2gpOwotICAg
IHJldHVybiBoYXNoOwotfQotCi1ib29sIFJlbmRlclN0YXRlQ2FjaGU6OmNvbXBhcmVCbGVuZFN0
YXRlcyhjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYSwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmIpCi17
Ci0gICAgcmV0dXJuIG1lbWNtcCgmYSwgJmIsIHNpemVvZihnbDo6QmxlbmRTdGF0ZSkpID09IDA7
Ci19Ci0KLUlEM0QxMUJsZW5kU3RhdGUgKlJlbmRlclN0YXRlQ2FjaGU6OmdldEJsZW5kU3RhdGUo
Y29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUpCi17Ci0gICAgaWYgKCFtRGV2aWNlKQot
ICAgIHsKLSAgICAgICAgRVJSKCJSZW5kZXJTdGF0ZUNhY2hlIGlzIG5vdCBpbml0aWFsaXplZC4i
KTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgQmxlbmRTdGF0ZU1hcDo6aXRl
cmF0b3IgaSA9IG1CbGVuZFN0YXRlQ2FjaGUuZmluZChibGVuZFN0YXRlKTsKLSAgICBpZiAoaSAh
PSBtQmxlbmRTdGF0ZUNhY2hlLmVuZCgpKQotICAgIHsKLSAgICAgICAgQmxlbmRTdGF0ZUNvdW50
ZXJQYWlyICZzdGF0ZSA9IGktPnNlY29uZDsKLSAgICAgICAgc3RhdGUuc2Vjb25kID0gbUNvdW50
ZXIrKzsKLSAgICAgICAgcmV0dXJuIHN0YXRlLmZpcnN0OwotICAgIH0KLSAgICBlbHNlCi0gICAg
ewotICAgICAgICBpZiAobUJsZW5kU3RhdGVDYWNoZS5zaXplKCkgPj0ga01heEJsZW5kU3RhdGVz
KQotICAgICAgICB7Ci0gICAgICAgICAgICBUUkFDRSgiT3ZlcmZsb3dlZCB0aGUgbGltaXQgb2Yg
JXUgYmxlbmQgc3RhdGVzLCByZW1vdmluZyB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCAiCi0gICAg
ICAgICAgICAgICAgICAidG8gbWFrZSByb29tLiIsIGtNYXhCbGVuZFN0YXRlcyk7Ci0KLSAgICAg
ICAgICAgIEJsZW5kU3RhdGVNYXA6Oml0ZXJhdG9yIGxlYXN0UmVjZW50bHlVc2VkID0gbUJsZW5k
U3RhdGVDYWNoZS5iZWdpbigpOwotICAgICAgICAgICAgZm9yIChCbGVuZFN0YXRlTWFwOjppdGVy
YXRvciBpID0gbUJsZW5kU3RhdGVDYWNoZS5iZWdpbigpOyBpICE9IG1CbGVuZFN0YXRlQ2FjaGUu
ZW5kKCk7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoaS0+c2Vjb25k
LnNlY29uZCA8IGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuc2Vjb25kKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQgPSBpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2Vk
LT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1CbGVuZFN0YXRlQ2FjaGUu
ZXJhc2UobGVhc3RSZWNlbnRseVVzZWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ3JlYXRl
IGEgbmV3IGJsZW5kIHN0YXRlIGFuZCBpbnNlcnQgaXQgaW50byB0aGUgY2FjaGUKLSAgICAgICAg
RDNEMTFfQkxFTkRfREVTQyBibGVuZERlc2MgPSB7IDAgfTsKLSAgICAgICAgYmxlbmREZXNjLkFs
cGhhVG9Db3ZlcmFnZUVuYWJsZSA9IGJsZW5kU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlOwot
ICAgICAgICBibGVuZERlc2MuSW5kZXBlbmRlbnRCbGVuZEVuYWJsZSA9IEZBTFNFOwotCi0gICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgRDNEMTFfU0lNVUxUQU5FT1VTX1JFTkRF
Ul9UQVJHRVRfQ09VTlQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgRDNEMTFfUkVOREVS
X1RBUkdFVF9CTEVORF9ERVNDICZydEJsZW5kID0gYmxlbmREZXNjLlJlbmRlclRhcmdldFtpXTsK
LQotICAgICAgICAgICAgcnRCbGVuZC5CbGVuZEVuYWJsZSA9IGJsZW5kU3RhdGUuYmxlbmQ7Ci0g
ICAgICAgICAgICBpZiAoYmxlbmRTdGF0ZS5ibGVuZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBydEJsZW5kLlNyY0JsZW5kID0gZ2xfZDNkMTE6OkNvbnZlcnRCbGVuZEZ1bmMoYmxl
bmRTdGF0ZS5zb3VyY2VCbGVuZFJHQiwgZmFsc2UpOwotICAgICAgICAgICAgICAgIHJ0QmxlbmQu
RGVzdEJsZW5kID0gZ2xfZDNkMTE6OkNvbnZlcnRCbGVuZEZ1bmMoYmxlbmRTdGF0ZS5kZXN0Qmxl
bmRSR0IsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICBydEJsZW5kLkJsZW5kT3AgPSBnbF9kM2Qx
MTo6Q29udmVydEJsZW5kT3AoYmxlbmRTdGF0ZS5ibGVuZEVxdWF0aW9uUkdCKTsKLQotICAgICAg
ICAgICAgICAgIHJ0QmxlbmQuU3JjQmxlbmRBbHBoYSA9IGdsX2QzZDExOjpDb252ZXJ0QmxlbmRG
dW5jKGJsZW5kU3RhdGUuc291cmNlQmxlbmRBbHBoYSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAg
cnRCbGVuZC5EZXN0QmxlbmRBbHBoYSA9IGdsX2QzZDExOjpDb252ZXJ0QmxlbmRGdW5jKGJsZW5k
U3RhdGUuZGVzdEJsZW5kQWxwaGEsIHRydWUpOwotICAgICAgICAgICAgICAgIHJ0QmxlbmQuQmxl
bmRPcEFscGhhID0gZ2xfZDNkMTE6OkNvbnZlcnRCbGVuZE9wKGJsZW5kU3RhdGUuYmxlbmRFcXVh
dGlvbkFscGhhKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcnRCbGVuZC5SZW5kZXJU
YXJnZXRXcml0ZU1hc2sgPSBnbF9kM2QxMTo6Q29udmVydENvbG9yTWFzayhibGVuZFN0YXRlLmNv
bG9yTWFza1JlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRTdGF0ZS5jb2xvck1hc2tHcmVlbiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYmxlbmRTdGF0ZS5jb2xvck1hc2tCbHVlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGVu
ZFN0YXRlLmNvbG9yTWFza0FscGhhKTsKLSAgICAgICAgfQotCi0gICAgICAgIElEM0QxMUJsZW5k
U3RhdGUgKmR4MTFCbGVuZFN0YXRlID0gTlVMTDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBt
RGV2aWNlLT5DcmVhdGVCbGVuZFN0YXRlKCZibGVuZERlc2MsICZkeDExQmxlbmRTdGF0ZSk7Ci0g
ICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSB8fCAhZHgxMUJsZW5kU3RhdGUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEVSUigiVW5hYmxlIHRvIGNyZWF0ZSBhIElEM0QxMUJsZW5kU3RhdGUsIEhS
RVNVTFQ6IDB4JVguIiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAg
ICB9Ci0KLSAgICAgICAgbUJsZW5kU3RhdGVDYWNoZS5pbnNlcnQoc3RkOjptYWtlX3BhaXIoYmxl
bmRTdGF0ZSwgc3RkOjptYWtlX3BhaXIoZHgxMUJsZW5kU3RhdGUsIG1Db3VudGVyKyspKSk7Ci0K
LSAgICAgICAgcmV0dXJuIGR4MTFCbGVuZFN0YXRlOwotICAgIH0KLX0KLQotc3RkOjpzaXplX3Qg
UmVuZGVyU3RhdGVDYWNoZTo6aGFzaFJhc3Rlcml6ZXJTdGF0ZShjb25zdCBSYXN0ZXJpemVyU3Rh
dGVLZXkgJnJhc3RlclN0YXRlKQotewotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2Vl
ZCA9IDB4QUJDREVGOTg7Ci0KLSAgICBzdGQ6OnNpemVfdCBoYXNoID0gMDsKLSAgICBNdXJtdXJI
YXNoM194ODZfMzIoJnJhc3RlclN0YXRlLCBzaXplb2YoUmFzdGVyaXplclN0YXRlS2V5KSwgc2Vl
ZCwgJmhhc2gpOwotICAgIHJldHVybiBoYXNoOwotfQotCi1ib29sIFJlbmRlclN0YXRlQ2FjaGU6
OmNvbXBhcmVSYXN0ZXJpemVyU3RhdGVzKGNvbnN0IFJhc3Rlcml6ZXJTdGF0ZUtleSAmYSwgY29u
c3QgUmFzdGVyaXplclN0YXRlS2V5ICZiKQotewotICAgIHJldHVybiBtZW1jbXAoJmEsICZiLCBz
aXplb2YoUmFzdGVyaXplclN0YXRlS2V5KSkgPT0gMDsKLX0KLQotSUQzRDExUmFzdGVyaXplclN0
YXRlICpSZW5kZXJTdGF0ZUNhY2hlOjpnZXRSYXN0ZXJpemVyU3RhdGUoY29uc3QgZ2w6OlJhc3Rl
cml6ZXJTdGF0ZSAmcmFzdGVyU3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNjaXNzb3JFbmFibGVkLCB1bnNpZ25l
ZCBpbnQgZGVwdGhTaXplKQotewotICAgIGlmICghbURldmljZSkKLSAgICB7Ci0gICAgICAgIEVS
UigiUmVuZGVyU3RhdGVDYWNoZSBpcyBub3QgaW5pdGlhbGl6ZWQuIik7Ci0gICAgICAgIHJldHVy
biBOVUxMOwotICAgIH0KLQotICAgIFJhc3Rlcml6ZXJTdGF0ZUtleSBrZXk7Ci0gICAga2V5LnJh
c3Rlcml6ZXJTdGF0ZSA9IHJhc3RlclN0YXRlOwotICAgIGtleS5zY2lzc29yRW5hYmxlZCA9IHNj
aXNzb3JFbmFibGVkOwotICAgIGtleS5kZXB0aFNpemUgPSBkZXB0aFNpemU7Ci0KLSAgICBSYXN0
ZXJpemVyU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtUmFzdGVyaXplclN0YXRlQ2FjaGUuZmluZChr
ZXkpOwotICAgIGlmIChpICE9IG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5lbmQoKSkKLSAgICB7Ci0g
ICAgICAgIFJhc3Rlcml6ZXJTdGF0ZUNvdW50ZXJQYWlyICZzdGF0ZSA9IGktPnNlY29uZDsKLSAg
ICAgICAgc3RhdGUuc2Vjb25kID0gbUNvdW50ZXIrKzsKLSAgICAgICAgcmV0dXJuIHN0YXRlLmZp
cnN0OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAobVJhc3Rlcml6ZXJTdGF0
ZUNhY2hlLnNpemUoKSA+PSBrTWF4UmFzdGVyaXplclN0YXRlcykKLSAgICAgICAgewotICAgICAg
ICAgICAgVFJBQ0UoIk92ZXJmbG93ZWQgdGhlIGxpbWl0IG9mICV1IHJhc3Rlcml6ZXIgc3RhdGVz
LCByZW1vdmluZyB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCAiCi0gICAgICAgICAgICAgICAgICAi
dG8gbWFrZSByb29tLiIsIGtNYXhSYXN0ZXJpemVyU3RhdGVzKTsKLQotICAgICAgICAgICAgUmFz
dGVyaXplclN0YXRlTWFwOjppdGVyYXRvciBsZWFzdFJlY2VudGx5VXNlZCA9IG1SYXN0ZXJpemVy
U3RhdGVDYWNoZS5iZWdpbigpOwotICAgICAgICAgICAgZm9yIChSYXN0ZXJpemVyU3RhdGVNYXA6
Oml0ZXJhdG9yIGkgPSBtUmFzdGVyaXplclN0YXRlQ2FjaGUuYmVnaW4oKTsgaSAhPSBtUmFzdGVy
aXplclN0YXRlQ2FjaGUuZW5kKCk7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBpZiAoaS0+c2Vjb25kLnNlY29uZCA8IGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuc2Vjb25k
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVz
ZWQgPSBpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxl
YXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1S
YXN0ZXJpemVyU3RhdGVDYWNoZS5lcmFzZShsZWFzdFJlY2VudGx5VXNlZCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBEM0QxMV9DVUxMX01PREUgY3VsbE1vZGUgPSBnbF9kM2QxMTo6Q29udmVydEN1
bGxNb2RlKHJhc3RlclN0YXRlLmN1bGxGYWNlLCByYXN0ZXJTdGF0ZS5jdWxsTW9kZSk7Ci0KLSAg
ICAgICAgLy8gRGlzYWJsZSBjdWxsaW5nIGlmIGRyYXdpbmcgcG9pbnRzCi0gICAgICAgIGlmIChy
YXN0ZXJTdGF0ZS5wb2ludERyYXdNb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjdWxsTW9k
ZSA9IEQzRDExX0NVTExfTk9ORTsKLSAgICAgICAgfQotCi0gICAgICAgIEQzRDExX1JBU1RFUkla
RVJfREVTQyByYXN0ZXJEZXNjOwotICAgICAgICByYXN0ZXJEZXNjLkZpbGxNb2RlID0gRDNEMTFf
RklMTF9TT0xJRDsKLSAgICAgICAgcmFzdGVyRGVzYy5DdWxsTW9kZSA9IGN1bGxNb2RlOwotICAg
ICAgICByYXN0ZXJEZXNjLkZyb250Q291bnRlckNsb2Nrd2lzZSA9IChyYXN0ZXJTdGF0ZS5mcm9u
dEZhY2UgPT0gR0xfQ0NXKSA/IEZBTFNFOiBUUlVFOwotICAgICAgICByYXN0ZXJEZXNjLkRlcHRo
QmlhcyA9IGxkZXhwKHJhc3RlclN0YXRlLnBvbHlnb25PZmZzZXRVbml0cywgLXN0YXRpY19jYXN0
PGludD4oZGVwdGhTaXplKSk7Ci0gICAgICAgIHJhc3RlckRlc2MuRGVwdGhCaWFzQ2xhbXAgPSAw
LjBmOyAvLyBNU0ROIGRvY3VtZW50YXRpb24gb2YgRGVwdGhCaWFzQ2xhbXAgaW1wbGllcyBhIHZh
bHVlIG9mIHplcm8gd2lsbCBwcmVmb3JtIG5vIGNsYW1waW5nLCBtdXN0IGJlIHRlc3RlZCB0aG91
Z2guCi0gICAgICAgIHJhc3RlckRlc2MuU2xvcGVTY2FsZWREZXB0aEJpYXMgPSByYXN0ZXJTdGF0
ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yOwotICAgICAgICByYXN0ZXJEZXNjLkRlcHRoQ2xpcEVuYWJs
ZSA9IFRSVUU7Ci0gICAgICAgIHJhc3RlckRlc2MuU2Npc3NvckVuYWJsZSA9IHNjaXNzb3JFbmFi
bGVkID8gVFJVRSA6IEZBTFNFOwotICAgICAgICByYXN0ZXJEZXNjLk11bHRpc2FtcGxlRW5hYmxl
ID0gcmFzdGVyU3RhdGUubXVsdGlTYW1wbGU7Ci0gICAgICAgIHJhc3RlckRlc2MuQW50aWFsaWFz
ZWRMaW5lRW5hYmxlID0gRkFMU0U7Ci0KLSAgICAgICAgSUQzRDExUmFzdGVyaXplclN0YXRlICpk
eDExUmFzdGVyaXplclN0YXRlID0gTlVMTDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2
aWNlLT5DcmVhdGVSYXN0ZXJpemVyU3RhdGUoJnJhc3RlckRlc2MsICZkeDExUmFzdGVyaXplclN0
YXRlKTsKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpIHx8ICFkeDExUmFzdGVyaXplclN0YXRl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIlVuYWJsZSB0byBjcmVhdGUgYSBJRDNEMTFS
YXN0ZXJpemVyU3RhdGUsIEhSRVNVTFQ6IDB4JVguIiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJl
dHVybiBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgbVJhc3Rlcml6ZXJTdGF0ZUNhY2hlLmlu
c2VydChzdGQ6Om1ha2VfcGFpcihrZXksIHN0ZDo6bWFrZV9wYWlyKGR4MTFSYXN0ZXJpemVyU3Rh
dGUsIG1Db3VudGVyKyspKSk7Ci0KLSAgICAgICAgcmV0dXJuIGR4MTFSYXN0ZXJpemVyU3RhdGU7
Ci0gICAgfQotfQotCi1zdGQ6OnNpemVfdCBSZW5kZXJTdGF0ZUNhY2hlOjpoYXNoRGVwdGhTdGVu
Y2lsU3RhdGUoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZkc1N0YXRlKQotewotICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2VlZCA9IDB4QUJDREVGOTg7Ci0KLSAgICBzdGQ6OnNp
emVfdCBoYXNoID0gMDsKLSAgICBNdXJtdXJIYXNoM194ODZfMzIoJmRzU3RhdGUsIHNpemVvZihn
bDo6RGVwdGhTdGVuY2lsU3RhdGUpLCBzZWVkLCAmaGFzaCk7Ci0gICAgcmV0dXJuIGhhc2g7Ci19
Ci0KLWJvb2wgUmVuZGVyU3RhdGVDYWNoZTo6Y29tcGFyZURlcHRoU3RlbmNpbFN0YXRlcyhjb25z
dCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmEsIGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAm
YikKLXsKLSAgICByZXR1cm4gbWVtY21wKCZhLCAmYiwgc2l6ZW9mKGdsOjpEZXB0aFN0ZW5jaWxT
dGF0ZSkpID09IDA7Ci19Ci0KLUlEM0QxMURlcHRoU3RlbmNpbFN0YXRlICpSZW5kZXJTdGF0ZUNh
Y2hlOjpnZXREZXB0aFN0ZW5jaWxTdGF0ZShjb25zdCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmRz
U3RhdGUpCi17Ci0gICAgaWYgKCFtRGV2aWNlKQotICAgIHsKLSAgICAgICAgRVJSKCJSZW5kZXJT
dGF0ZUNhY2hlIGlzIG5vdCBpbml0aWFsaXplZC4iKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0g
ICAgfQotCi0gICAgRGVwdGhTdGVuY2lsU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtRGVwdGhTdGVu
Y2lsU3RhdGVDYWNoZS5maW5kKGRzU3RhdGUpOwotICAgIGlmIChpICE9IG1EZXB0aFN0ZW5jaWxT
dGF0ZUNhY2hlLmVuZCgpKQotICAgIHsKLSAgICAgICAgRGVwdGhTdGVuY2lsU3RhdGVDb3VudGVy
UGFpciAmc3RhdGUgPSBpLT5zZWNvbmQ7Ci0gICAgICAgIHN0YXRlLnNlY29uZCA9IG1Db3VudGVy
Kys7Ci0gICAgICAgIHJldHVybiBzdGF0ZS5maXJzdDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsK
LSAgICAgICAgaWYgKG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLnNpemUoKSA+PSBrTWF4RGVwdGhT
dGVuY2lsU3RhdGVzKQotICAgICAgICB7Ci0gICAgICAgICAgICBUUkFDRSgiT3ZlcmZsb3dlZCB0
aGUgbGltaXQgb2YgJXUgZGVwdGggc3RlbmNpbCBzdGF0ZXMsIHJlbW92aW5nIHRoZSBsZWFzdCBy
ZWNlbnRseSB1c2VkICIKLSAgICAgICAgICAgICAgICAgICJ0byBtYWtlIHJvb20uIiwga01heERl
cHRoU3RlbmNpbFN0YXRlcyk7Ci0KLSAgICAgICAgICAgIERlcHRoU3RlbmNpbFN0YXRlTWFwOjpp
dGVyYXRvciBsZWFzdFJlY2VudGx5VXNlZCA9IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmJlZ2lu
KCk7Ci0gICAgICAgICAgICBmb3IgKERlcHRoU3RlbmNpbFN0YXRlTWFwOjppdGVyYXRvciBpID0g
bURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuYmVnaW4oKTsgaSAhPSBtRGVwdGhTdGVuY2lsU3RhdGVD
YWNoZS5lbmQoKTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChpLT5z
ZWNvbmQuc2Vjb25kIDwgbGVhc3RSZWNlbnRseVVzZWQtPnNlY29uZC5zZWNvbmQpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZCA9IGk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGVhc3RSZWNlbnRs
eVVzZWQtPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOwotICAgICAgICAgICAgbURlcHRoU3RlbmNp
bFN0YXRlQ2FjaGUuZXJhc2UobGVhc3RSZWNlbnRseVVzZWQpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgRDNEMTFfREVQVEhfU1RFTkNJTF9ERVNDIGRzRGVzYyA9IHsgMCB9OwotICAgICAgICBkc0Rl
c2MuRGVwdGhFbmFibGUgPSBkc1N0YXRlLmRlcHRoVGVzdCA/IFRSVUUgOiBGQUxTRTsKLSAgICAg
ICAgZHNEZXNjLkRlcHRoV3JpdGVNYXNrID0gZ2xfZDNkMTE6OkNvbnZlcnREZXB0aE1hc2soZHNT
dGF0ZS5kZXB0aE1hc2spOwotICAgICAgICBkc0Rlc2MuRGVwdGhGdW5jID0gZ2xfZDNkMTE6OkNv
bnZlcnRDb21wYXJpc29uKGRzU3RhdGUuZGVwdGhGdW5jKTsKLSAgICAgICAgZHNEZXNjLlN0ZW5j
aWxFbmFibGUgPSBkc1N0YXRlLnN0ZW5jaWxUZXN0ID8gVFJVRSA6IEZBTFNFOwotICAgICAgICBk
c0Rlc2MuU3RlbmNpbFJlYWRNYXNrID0gZ2xfZDNkMTE6OkNvbnZlcnRTdGVuY2lsTWFzayhkc1N0
YXRlLnN0ZW5jaWxNYXNrKTsKLSAgICAgICAgZHNEZXNjLlN0ZW5jaWxXcml0ZU1hc2sgPSBnbF9k
M2QxMTo6Q29udmVydFN0ZW5jaWxNYXNrKGRzU3RhdGUuc3RlbmNpbFdyaXRlbWFzayk7Ci0gICAg
ICAgIGRzRGVzYy5Gcm9udEZhY2UuU3RlbmNpbEZhaWxPcCA9IGdsX2QzZDExOjpDb252ZXJ0U3Rl
bmNpbE9wKGRzU3RhdGUuc3RlbmNpbEZhaWwpOwotICAgICAgICBkc0Rlc2MuRnJvbnRGYWNlLlN0
ZW5jaWxEZXB0aEZhaWxPcCA9IGdsX2QzZDExOjpDb252ZXJ0U3RlbmNpbE9wKGRzU3RhdGUuc3Rl
bmNpbFBhc3NEZXB0aEZhaWwpOwotICAgICAgICBkc0Rlc2MuRnJvbnRGYWNlLlN0ZW5jaWxQYXNz
T3AgPSBnbF9kM2QxMTo6Q29udmVydFN0ZW5jaWxPcChkc1N0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQ
YXNzKTsKLSAgICAgICAgZHNEZXNjLkZyb250RmFjZS5TdGVuY2lsRnVuYyA9IGdsX2QzZDExOjpD
b252ZXJ0Q29tcGFyaXNvbihkc1N0YXRlLnN0ZW5jaWxGdW5jKTsKLSAgICAgICAgZHNEZXNjLkJh
Y2tGYWNlLlN0ZW5jaWxGYWlsT3AgPSBnbF9kM2QxMTo6Q29udmVydFN0ZW5jaWxPcChkc1N0YXRl
LnN0ZW5jaWxCYWNrRmFpbCk7Ci0gICAgICAgIGRzRGVzYy5CYWNrRmFjZS5TdGVuY2lsRGVwdGhG
YWlsT3AgPSBnbF9kM2QxMTo6Q29udmVydFN0ZW5jaWxPcChkc1N0YXRlLnN0ZW5jaWxCYWNrUGFz
c0RlcHRoRmFpbCk7Ci0gICAgICAgIGRzRGVzYy5CYWNrRmFjZS5TdGVuY2lsUGFzc09wID0gZ2xf
ZDNkMTE6OkNvbnZlcnRTdGVuY2lsT3AoZHNTdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3Mp
OwotICAgICAgICBkc0Rlc2MuQmFja0ZhY2UuU3RlbmNpbEZ1bmMgPSBnbF9kM2QxMTo6Q29udmVy
dENvbXBhcmlzb24oZHNTdGF0ZS5zdGVuY2lsQmFja0Z1bmMpOwotCi0gICAgICAgIElEM0QxMURl
cHRoU3RlbmNpbFN0YXRlICpkeDExRGVwdGhTdGVuY2lsU3RhdGUgPSBOVUxMOwotICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFN0YXRlKCZkc0Rlc2Ms
ICZkeDExRGVwdGhTdGVuY2lsU3RhdGUpOwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkgfHwg
IWR4MTFEZXB0aFN0ZW5jaWxTdGF0ZSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJVbmFi
bGUgdG8gY3JlYXRlIGEgSUQzRDExRGVwdGhTdGVuY2lsU3RhdGUsIEhSRVNVTFQ6IDB4JVguIiwg
cmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAg
bURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGRzU3RhdGUsIHN0
ZDo6bWFrZV9wYWlyKGR4MTFEZXB0aFN0ZW5jaWxTdGF0ZSwgbUNvdW50ZXIrKykpKTsKLQotICAg
ICAgICByZXR1cm4gZHgxMURlcHRoU3RlbmNpbFN0YXRlOwotICAgIH0KLX0KLQotc3RkOjpzaXpl
X3QgUmVuZGVyU3RhdGVDYWNoZTo6aGFzaFNhbXBsZXJTdGF0ZShjb25zdCBnbDo6U2FtcGxlclN0
YXRlICZzYW1wbGVyU3RhdGUpCi17Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZWVk
ID0gMHhBQkNERUY5ODsKLQotICAgIHN0ZDo6c2l6ZV90IGhhc2ggPSAwOwotICAgIE11cm11ckhh
c2gzX3g4Nl8zMigmc2FtcGxlclN0YXRlLCBzaXplb2YoZ2w6OlNhbXBsZXJTdGF0ZSksIHNlZWQs
ICZoYXNoKTsKLSAgICByZXR1cm4gaGFzaDsKLX0KLQotYm9vbCBSZW5kZXJTdGF0ZUNhY2hlOjpj
b21wYXJlU2FtcGxlclN0YXRlcyhjb25zdCBnbDo6U2FtcGxlclN0YXRlICZhLCBjb25zdCBnbDo6
U2FtcGxlclN0YXRlICZiKQotewotICAgIHJldHVybiBtZW1jbXAoJmEsICZiLCBzaXplb2YoZ2w6
OlNhbXBsZXJTdGF0ZSkpID09IDA7Ci19Ci0KLUlEM0QxMVNhbXBsZXJTdGF0ZSAqUmVuZGVyU3Rh
dGVDYWNoZTo6Z2V0U2FtcGxlclN0YXRlKGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXJT
dGF0ZSkKLXsKLSAgICBpZiAoIW1EZXZpY2UpCi0gICAgewotICAgICAgICBFUlIoIlJlbmRlclN0
YXRlQ2FjaGUgaXMgbm90IGluaXRpYWxpemVkLiIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAg
ICB9Ci0KLSAgICBTYW1wbGVyU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtU2FtcGxlclN0YXRlQ2Fj
aGUuZmluZChzYW1wbGVyU3RhdGUpOwotICAgIGlmIChpICE9IG1TYW1wbGVyU3RhdGVDYWNoZS5l
bmQoKSkKLSAgICB7Ci0gICAgICAgIFNhbXBsZXJTdGF0ZUNvdW50ZXJQYWlyICZzdGF0ZSA9IGkt
PnNlY29uZDsKLSAgICAgICAgc3RhdGUuc2Vjb25kID0gbUNvdW50ZXIrKzsKLSAgICAgICAgcmV0
dXJuIHN0YXRlLmZpcnN0OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAobVNh
bXBsZXJTdGF0ZUNhY2hlLnNpemUoKSA+PSBrTWF4U2FtcGxlclN0YXRlcykKLSAgICAgICAgewot
ICAgICAgICAgICAgVFJBQ0UoIk92ZXJmbG93ZWQgdGhlIGxpbWl0IG9mICV1IHNhbXBsZXIgc3Rh
dGVzLCByZW1vdmluZyB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCAiCi0gICAgICAgICAgICAgICAg
ICAidG8gbWFrZSByb29tLiIsIGtNYXhTYW1wbGVyU3RhdGVzKTsKLQotICAgICAgICAgICAgU2Ft
cGxlclN0YXRlTWFwOjppdGVyYXRvciBsZWFzdFJlY2VudGx5VXNlZCA9IG1TYW1wbGVyU3RhdGVD
YWNoZS5iZWdpbigpOwotICAgICAgICAgICAgZm9yIChTYW1wbGVyU3RhdGVNYXA6Oml0ZXJhdG9y
IGkgPSBtU2FtcGxlclN0YXRlQ2FjaGUuYmVnaW4oKTsgaSAhPSBtU2FtcGxlclN0YXRlQ2FjaGUu
ZW5kKCk7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoaS0+c2Vjb25k
LnNlY29uZCA8IGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuc2Vjb25kKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQgPSBpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2Vk
LT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1TYW1wbGVyU3RhdGVDYWNo
ZS5lcmFzZShsZWFzdFJlY2VudGx5VXNlZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBEM0QxMV9T
QU1QTEVSX0RFU0Mgc2FtcGxlckRlc2M7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkZpbHRlciA9IGds
X2QzZDExOjpDb252ZXJ0RmlsdGVyKHNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIsIHNhbXBsZXJTdGF0
ZS5tYWdGaWx0ZXIsIHNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5KTsKLSAgICAgICAgc2FtcGxl
ckRlc2MuQWRkcmVzc1UgPSBnbF9kM2QxMTo6Q29udmVydFRleHR1cmVXcmFwKHNhbXBsZXJTdGF0
ZS53cmFwUyk7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkFkZHJlc3NWID0gZ2xfZDNkMTE6OkNvbnZl
cnRUZXh0dXJlV3JhcChzYW1wbGVyU3RhdGUud3JhcFQpOwotICAgICAgICBzYW1wbGVyRGVzYy5B
ZGRyZXNzVyA9IEQzRDExX1RFWFRVUkVfQUREUkVTU19DTEFNUDsKLSAgICAgICAgc2FtcGxlckRl
c2MuTWlwTE9EQmlhcyA9IHN0YXRpY19jYXN0PGZsb2F0PihzYW1wbGVyU3RhdGUubG9kT2Zmc2V0
KTsKLSAgICAgICAgc2FtcGxlckRlc2MuTWF4QW5pc290cm9weSA9IHNhbXBsZXJTdGF0ZS5tYXhB
bmlzb3Ryb3B5OwotICAgICAgICBzYW1wbGVyRGVzYy5Db21wYXJpc29uRnVuYyA9IEQzRDExX0NP
TVBBUklTT05fTkVWRVI7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzBdID0gMC4w
ZjsKLSAgICAgICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbMV0gPSAwLjBmOwotICAgICAgICBz
YW1wbGVyRGVzYy5Cb3JkZXJDb2xvclsyXSA9IDAuMGY7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkJv
cmRlckNvbG9yWzNdID0gMC4wZjsKLSAgICAgICAgc2FtcGxlckRlc2MuTWluTE9EID0gZ2xfZDNk
MTE6OkNvbnZlcnRNaW5MT0Qoc2FtcGxlclN0YXRlLm1pbkZpbHRlciwgc2FtcGxlclN0YXRlLmxv
ZE9mZnNldCk7Ci0gICAgICAgIHNhbXBsZXJEZXNjLk1heExPRCA9IGdsX2QzZDExOjpDb252ZXJ0
TWF4TE9EKHNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIsIHNhbXBsZXJTdGF0ZS5sb2RPZmZzZXQpOwot
Ci0gICAgICAgIElEM0QxMVNhbXBsZXJTdGF0ZSAqZHgxMVNhbXBsZXJTdGF0ZSA9IE5VTEw7Ci0g
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlU2FtcGxlclN0YXRlKCZzYW1w
bGVyRGVzYywgJmR4MTFTYW1wbGVyU3RhdGUpOwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkg
fHwgIWR4MTFTYW1wbGVyU3RhdGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiVW5hYmxl
IHRvIGNyZWF0ZSBhIElEM0QxMURlcHRoU3RlbmNpbFN0YXRlLCBIUkVTVUxUOiAweCVYLiIsIHJl
c3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIG1T
YW1wbGVyU3RhdGVDYWNoZS5pbnNlcnQoc3RkOjptYWtlX3BhaXIoc2FtcGxlclN0YXRlLCBzdGQ6
Om1ha2VfcGFpcihkeDExU2FtcGxlclN0YXRlLCBtQ291bnRlcisrKSkpOwotCi0gICAgICAgIHJl
dHVybiBkeDExU2FtcGxlclN0YXRlOwotICAgIH0KLX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvUmVuZGVyU3RhdGVDYWNoZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJTdGF0ZUNhY2hlLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGY4YjUxMTFkZTQ4ZjMyODgzMTRiZDUyNGEwN2U0MzcwNWQ5YmMzMjku
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJTdGF0ZUNhY2hlLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAx
Mi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8g
UmVuZGVyU3RhdGVDYWNoZS5oOiBEZWZpbmVzIHJ4OjpSZW5kZXJTdGF0ZUNhY2hlLCBhIGNhY2hl
IG9mIERpcmVjdDNEIHJlbmRlcgotLy8gc3RhdGUgb2JqZWN0cy4KLQotI2lmbmRlZiBMSUJHTEVT
VjJfUkVOREVSRVJfUkVOREVSU1RBVEVDQUNIRV9IXwotI2RlZmluZSBMSUJHTEVTVjJfUkVOREVS
RVJfUkVOREVSU1RBVEVDQUNIRV9IXwotCi0jaW5jbHVkZSAibGliR0xFU3YyL2FuZ2xldHlwZXMu
aCIKLSNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgotCi1uYW1lc3BhY2UgcngKLXsKLQot
Y2xhc3MgUmVuZGVyU3RhdGVDYWNoZQotewotICBwdWJsaWM6Ci0gICAgUmVuZGVyU3RhdGVDYWNo
ZSgpOwotICAgIHZpcnR1YWwgflJlbmRlclN0YXRlQ2FjaGUoKTsKLQotICAgIHZvaWQgaW5pdGlh
bGl6ZShJRDNEMTFEZXZpY2UgKmRldmljZSk7Ci0gICAgdm9pZCBjbGVhcigpOwotCi0gICAgLy8g
SW5jcmVtZW50cyByZWZjb3VudCBvbiB0aGUgcmV0dXJuZWQgYmxlbmQgc3RhdGUsIFJlbGVhc2Uo
KSBtdXN0IGJlIGNhbGxlZC4KLSAgICBJRDNEMTFCbGVuZFN0YXRlICpnZXRCbGVuZFN0YXRlKGNv
bnN0IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRlKTsKLSAgICBJRDNEMTFSYXN0ZXJpemVyU3Rh
dGUgKmdldFJhc3Rlcml6ZXJTdGF0ZShjb25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZyYXN0ZXJT
dGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IHNjaXNzb3JFbmFibGVkLCB1bnNpZ25lZCBpbnQgZGVwdGhTaXplKTsKLSAgICBJRDNEMTFEZXB0
aFN0ZW5jaWxTdGF0ZSAqZ2V0RGVwdGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6OkRlcHRoU3RlbmNp
bFN0YXRlICZkc1N0YXRlKTsKLSAgICBJRDNEMTFTYW1wbGVyU3RhdGUgKmdldFNhbXBsZXJTdGF0
ZShjb25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpOwotCi0gIHByaXZhdGU6Ci0g
ICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlclN0YXRlQ2FjaGUpOwotCi0gICAgdW5z
aWduZWQgbG9uZyBsb25nIG1Db3VudGVyOwotCi0gICAgLy8gQmxlbmQgc3RhdGUgY2FjaGUKLSAg
ICBzdGF0aWMgc3RkOjpzaXplX3QgaGFzaEJsZW5kU3RhdGUoY29uc3QgZ2w6OkJsZW5kU3RhdGUg
JmJsZW5kU3RhdGUpOwotICAgIHN0YXRpYyBib29sIGNvbXBhcmVCbGVuZFN0YXRlcyhjb25zdCBn
bDo6QmxlbmRTdGF0ZSAmYSwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmIpOwotICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBpbnQga01heEJsZW5kU3RhdGVzOwotCi0gICAgdHlwZWRlZiBzdGQ6OnNp
emVfdCAoKkJsZW5kU3RhdGVIYXNoRnVuY3Rpb24pKGNvbnN0IGdsOjpCbGVuZFN0YXRlICYpOwot
ICAgIHR5cGVkZWYgYm9vbCAoKkJsZW5kU3RhdGVFcXVhbGl0eUZ1bmN0aW9uKShjb25zdCBnbDo6
QmxlbmRTdGF0ZSAmLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmKTsKLSAgICB0eXBlZGVmIHN0ZDo6
cGFpcjxJRDNEMTFCbGVuZFN0YXRlKiwgdW5zaWduZWQgbG9uZyBsb25nPiBCbGVuZFN0YXRlQ291
bnRlclBhaXI7Ci0gICAgdHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8Z2w6OkJsZW5kU3RhdGUs
IEJsZW5kU3RhdGVDb3VudGVyUGFpciwgQmxlbmRTdGF0ZUhhc2hGdW5jdGlvbiwgQmxlbmRTdGF0
ZUVxdWFsaXR5RnVuY3Rpb24+IEJsZW5kU3RhdGVNYXA7Ci0gICAgQmxlbmRTdGF0ZU1hcCBtQmxl
bmRTdGF0ZUNhY2hlOwotCi0gICAgLy8gUmFzdGVyaXplciBzdGF0ZSBjYWNoZQotICAgIHN0cnVj
dCBSYXN0ZXJpemVyU3RhdGVLZXkKLSAgICB7Ci0gICAgICAgIGdsOjpSYXN0ZXJpemVyU3RhdGUg
cmFzdGVyaXplclN0YXRlOwotICAgICAgICBib29sIHNjaXNzb3JFbmFibGVkOwotICAgICAgICB1
bnNpZ25lZCBpbnQgZGVwdGhTaXplOwotICAgIH07Ci0gICAgc3RhdGljIHN0ZDo6c2l6ZV90IGhh
c2hSYXN0ZXJpemVyU3RhdGUoY29uc3QgUmFzdGVyaXplclN0YXRlS2V5ICZyYXN0ZXJTdGF0ZSk7
Ci0gICAgc3RhdGljIGJvb2wgY29tcGFyZVJhc3Rlcml6ZXJTdGF0ZXMoY29uc3QgUmFzdGVyaXpl
clN0YXRlS2V5ICZhLCBjb25zdCBSYXN0ZXJpemVyU3RhdGVLZXkgJmIpOwotICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBpbnQga01heFJhc3Rlcml6ZXJTdGF0ZXM7Ci0KLSAgICB0eXBlZGVmIHN0
ZDo6c2l6ZV90ICgqUmFzdGVyaXplclN0YXRlSGFzaEZ1bmN0aW9uKShjb25zdCBSYXN0ZXJpemVy
U3RhdGVLZXkgJik7Ci0gICAgdHlwZWRlZiBib29sICgqUmFzdGVyaXplclN0YXRlRXF1YWxpdHlG
dW5jdGlvbikoY29uc3QgUmFzdGVyaXplclN0YXRlS2V5ICYsIGNvbnN0IFJhc3Rlcml6ZXJTdGF0
ZUtleSAmKTsKLSAgICB0eXBlZGVmIHN0ZDo6cGFpcjxJRDNEMTFSYXN0ZXJpemVyU3RhdGUqLCB1
bnNpZ25lZCBsb25nIGxvbmc+IFJhc3Rlcml6ZXJTdGF0ZUNvdW50ZXJQYWlyOwotICAgIHR5cGVk
ZWYgc3RkOjp1bm9yZGVyZWRfbWFwPFJhc3Rlcml6ZXJTdGF0ZUtleSwgUmFzdGVyaXplclN0YXRl
Q291bnRlclBhaXIsIFJhc3Rlcml6ZXJTdGF0ZUhhc2hGdW5jdGlvbiwgUmFzdGVyaXplclN0YXRl
RXF1YWxpdHlGdW5jdGlvbj4gUmFzdGVyaXplclN0YXRlTWFwOwotICAgIFJhc3Rlcml6ZXJTdGF0
ZU1hcCBtUmFzdGVyaXplclN0YXRlQ2FjaGU7Ci0KLSAgICAvLyBEZXB0aCBzdGVuY2lsIHN0YXRl
IGNhY2hlCi0gICAgc3RhdGljIHN0ZDo6c2l6ZV90IGhhc2hEZXB0aFN0ZW5jaWxTdGF0ZShjb25z
dCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmRzU3RhdGUpOwotICAgIHN0YXRpYyBib29sIGNvbXBh
cmVEZXB0aFN0ZW5jaWxTdGF0ZXMoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZhLCBjb25z
dCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmIpOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBp
bnQga01heERlcHRoU3RlbmNpbFN0YXRlczsKLQotICAgIHR5cGVkZWYgc3RkOjpzaXplX3QgKCpE
ZXB0aFN0ZW5jaWxTdGF0ZUhhc2hGdW5jdGlvbikoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRl
ICYpOwotICAgIHR5cGVkZWYgYm9vbCAoKkRlcHRoU3RlbmNpbFN0YXRlRXF1YWxpdHlGdW5jdGlv
bikoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICYsIGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxT
dGF0ZSAmKTsKLSAgICB0eXBlZGVmIHN0ZDo6cGFpcjxJRDNEMTFEZXB0aFN0ZW5jaWxTdGF0ZSos
IHVuc2lnbmVkIGxvbmcgbG9uZz4gRGVwdGhTdGVuY2lsU3RhdGVDb3VudGVyUGFpcjsKLSAgICB0
eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxnbDo6RGVwdGhTdGVuY2lsU3RhdGUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRGVwdGhTdGVuY2lsU3RhdGVDb3VudGVyUGFpciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXB0aFN0ZW5jaWxTdGF0ZUhhc2hGdW5jdGlv
biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXB0aFN0ZW5jaWxTdGF0ZUVxdWFs
aXR5RnVuY3Rpb24+IERlcHRoU3RlbmNpbFN0YXRlTWFwOwotICAgIERlcHRoU3RlbmNpbFN0YXRl
TWFwIG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlOwotCi0gICAgLy8gU2FtcGxlIHN0YXRlIGNhY2hl
Ci0gICAgc3RhdGljIHN0ZDo6c2l6ZV90IGhhc2hTYW1wbGVyU3RhdGUoY29uc3QgZ2w6OlNhbXBs
ZXJTdGF0ZSAmc2FtcGxlclN0YXRlKTsKLSAgICBzdGF0aWMgYm9vbCBjb21wYXJlU2FtcGxlclN0
YXRlcyhjb25zdCBnbDo6U2FtcGxlclN0YXRlICZhLCBjb25zdCBnbDo6U2FtcGxlclN0YXRlICZi
KTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGtNYXhTYW1wbGVyU3RhdGVzOwotCi0g
ICAgdHlwZWRlZiBzdGQ6OnNpemVfdCAoKlNhbXBsZXJTdGF0ZUhhc2hGdW5jdGlvbikoY29uc3Qg
Z2w6OlNhbXBsZXJTdGF0ZSAmKTsKLSAgICB0eXBlZGVmIGJvb2wgKCpTYW1wbGVyU3RhdGVFcXVh
bGl0eUZ1bmN0aW9uKShjb25zdCBnbDo6U2FtcGxlclN0YXRlICYsIGNvbnN0IGdsOjpTYW1wbGVy
U3RhdGUgJik7Ci0gICAgdHlwZWRlZiBzdGQ6OnBhaXI8SUQzRDExU2FtcGxlclN0YXRlKiwgdW5z
aWduZWQgbG9uZyBsb25nPiBTYW1wbGVyU3RhdGVDb3VudGVyUGFpcjsKLSAgICB0eXBlZGVmIHN0
ZDo6dW5vcmRlcmVkX21hcDxnbDo6U2FtcGxlclN0YXRlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNhbXBsZXJTdGF0ZUNvdW50ZXJQYWlyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNhbXBsZXJTdGF0ZUhhc2hGdW5jdGlvbiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTYW1wbGVyU3RhdGVFcXVhbGl0eUZ1bmN0aW9uPiBTYW1wbGVyU3RhdGVNYXA7
Ci0gICAgU2FtcGxlclN0YXRlTWFwIG1TYW1wbGVyU3RhdGVDYWNoZTsKLQotICAgIElEM0QxMURl
dmljZSAqbURldmljZTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9S
RU5ERVJTVEFURUNBQ0hFX0hfClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJU
YXJnZXQxMS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL1JlbmRlclRhcmdldDExLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY2
N2NjNmZhNzgxYzc4MDQzNDdkNjAyN2QxMzk4NWMzOGMwZmRjZi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldDExLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDM1NSArMCwwIEBACi0jaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0v
LyBSZW5kZXJUYXJnZXQxMS5jcHA6IEltcGxlbWVudHMgYSBEWDExLXNwZWNpZmljIHdyYXBwZXIg
Zm9yIElEM0QxMVZpZXcgcG9pbnRlcnMKLS8vIHJldGFpbmVkIGJ5IFJlbmRlcmJ1ZmZlcnMuCi0K
LSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0MTEuaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIxMS5oIgotCi0jaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL3JlbmRlcmVyMTFfdXRpbHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5o
IgotCi1uYW1lc3BhY2UgcngKLXsKLQotc3RhdGljIHVuc2lnbmVkIGludCBnZXRSVFZTdWJyZXNv
dXJjZUluZGV4KElEM0QxMVRleHR1cmUyRCAqdGV4dHVyZSwgSUQzRDExUmVuZGVyVGFyZ2V0Vmll
dyAqdmlldykKLXsKLSAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOwot
ICAgIHZpZXctPkdldERlc2MoJnJ0dkRlc2MpOwotCi0gICAgRDNEMTFfVEVYVFVSRTJEX0RFU0Mg
dGV4RGVzYzsKLSAgICB0ZXh0dXJlLT5HZXREZXNjKCZ0ZXhEZXNjKTsKLQotICAgIHVuc2lnbmVk
IGludCBtaXBTbGljZSA9IDA7Ci0gICAgdW5zaWduZWQgaW50IGFycmF5U2xpY2UgPSAwOwotICAg
IHVuc2lnbmVkIGludCBtaXBMZXZlbHMgPSB0ZXhEZXNjLk1pcExldmVsczsKLQotICAgIHN3aXRj
aCAocnR2RGVzYy5WaWV3RGltZW5zaW9uKQotICAgIHsKLSAgICAgIGNhc2UgRDNEMTFfUlRWX0RJ
TUVOU0lPTl9URVhUVVJFMUQ6Ci0gICAgICAgIG1pcFNsaWNlID0gcnR2RGVzYy5UZXh0dXJlMUQu
TWlwU2xpY2U7Ci0gICAgICAgIGFycmF5U2xpY2UgPSAwOwotICAgICAgICBicmVhazsKLQotICAg
ICAgY2FzZSBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUxREFSUkFZOgotICAgICAgICBtaXBT
bGljZSA9IHJ0dkRlc2MuVGV4dHVyZTFEQXJyYXkuTWlwU2xpY2U7Ci0gICAgICAgIGFycmF5U2xp
Y2UgPSBydHZEZXNjLlRleHR1cmUxREFycmF5LkZpcnN0QXJyYXlTbGljZTsKLSAgICAgICAgYnJl
YWs7Ci0KLSAgICAgIGNhc2UgRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMkQ6Ci0gICAgICAg
IG1pcFNsaWNlID0gcnR2RGVzYy5UZXh0dXJlMkQuTWlwU2xpY2U7Ci0gICAgICAgIGFycmF5U2xp
Y2UgPSAwOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBEM0QxMV9SVFZfRElNRU5TSU9O
X1RFWFRVUkUyREFSUkFZOgotICAgICAgICBtaXBTbGljZSA9IHJ0dkRlc2MuVGV4dHVyZTJEQXJy
YXkuTWlwU2xpY2U7Ci0gICAgICAgIGFycmF5U2xpY2UgPSBydHZEZXNjLlRleHR1cmUyREFycmF5
LkZpcnN0QXJyYXlTbGljZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRDNEMTFfUlRW
X0RJTUVOU0lPTl9URVhUVVJFMkRNUzoKLSAgICAgICAgbWlwU2xpY2UgPSAwOwotICAgICAgICBh
cnJheVNsaWNlID0gMDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRDNEMTFfUlRWX0RJ
TUVOU0lPTl9URVhUVVJFMkRNU0FSUkFZOgotICAgICAgICBtaXBTbGljZSA9IDA7Ci0gICAgICAg
IGFycmF5U2xpY2UgPSBydHZEZXNjLlRleHR1cmUyRE1TQXJyYXkuRmlyc3RBcnJheVNsaWNlOwot
ICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUz
RDoKLSAgICAgICAgbWlwU2xpY2UgPSBydHZEZXNjLlRleHR1cmUzRC5NaXBTbGljZTsKLSAgICAg
ICAgYXJyYXlTbGljZSA9IDA7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEQzRDExX1JU
Vl9ESU1FTlNJT05fVU5LTk9XTjoKLSAgICAgIGNhc2UgRDNEMTFfUlRWX0RJTUVOU0lPTl9CVUZG
RVI6Ci0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQot
ICAgIHJldHVybiBEM0QxMUNhbGNTdWJyZXNvdXJjZShtaXBTbGljZSwgYXJyYXlTbGljZSwgbWlw
TGV2ZWxzKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBnZXREU1ZTdWJyZXNvdXJjZUluZGV4
KElEM0QxMVRleHR1cmUyRCAqdGV4dHVyZSwgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqdmlldykK
LXsKLSAgICBEM0QxMV9ERVBUSF9TVEVOQ0lMX1ZJRVdfREVTQyBkc3ZEZXNjOwotICAgIHZpZXct
PkdldERlc2MoJmRzdkRlc2MpOwotCi0gICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4RGVzYzsK
LSAgICB0ZXh0dXJlLT5HZXREZXNjKCZ0ZXhEZXNjKTsKLQotICAgIHVuc2lnbmVkIGludCBtaXBT
bGljZSA9IDA7Ci0gICAgdW5zaWduZWQgaW50IGFycmF5U2xpY2UgPSAwOwotICAgIHVuc2lnbmVk
IGludCBtaXBMZXZlbHMgPSB0ZXhEZXNjLk1pcExldmVsczsKLQotICAgIHN3aXRjaCAoZHN2RGVz
Yy5WaWV3RGltZW5zaW9uKQotICAgIHsKLSAgICAgIGNhc2UgRDNEMTFfRFNWX0RJTUVOU0lPTl9U
RVhUVVJFMUQ6Ci0gICAgICAgIG1pcFNsaWNlID0gZHN2RGVzYy5UZXh0dXJlMUQuTWlwU2xpY2U7
Ci0gICAgICAgIGFycmF5U2xpY2UgPSAwOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBE
M0QxMV9EU1ZfRElNRU5TSU9OX1RFWFRVUkUxREFSUkFZOgotICAgICAgICBtaXBTbGljZSA9IGRz
dkRlc2MuVGV4dHVyZTFEQXJyYXkuTWlwU2xpY2U7Ci0gICAgICAgIGFycmF5U2xpY2UgPSBkc3ZE
ZXNjLlRleHR1cmUxREFycmF5LkZpcnN0QXJyYXlTbGljZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgIGNhc2UgRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMkQ6Ci0gICAgICAgIG1pcFNsaWNl
ID0gZHN2RGVzYy5UZXh0dXJlMkQuTWlwU2xpY2U7Ci0gICAgICAgIGFycmF5U2xpY2UgPSAwOwot
ICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBEM0QxMV9EU1ZfRElNRU5TSU9OX1RFWFRVUkUy
REFSUkFZOgotICAgICAgICBtaXBTbGljZSA9IGRzdkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlwU2xp
Y2U7Ci0gICAgICAgIGFycmF5U2xpY2UgPSBkc3ZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJy
YXlTbGljZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRDNEMTFfRFNWX0RJTUVOU0lP
Tl9URVhUVVJFMkRNUzoKLSAgICAgICAgbWlwU2xpY2UgPSAwOwotICAgICAgICBhcnJheVNsaWNl
ID0gMDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRDNEMTFfRFNWX0RJTUVOU0lPTl9U
RVhUVVJFMkRNU0FSUkFZOgotICAgICAgICBtaXBTbGljZSA9IDA7Ci0gICAgICAgIGFycmF5U2xp
Y2UgPSBkc3ZEZXNjLlRleHR1cmUyRE1TQXJyYXkuRmlyc3RBcnJheVNsaWNlOwotICAgICAgICBi
cmVhazsKLQotICAgICAgY2FzZSBEM0QxMV9SVFZfRElNRU5TSU9OX1VOS05PV046Ci0gICAgICAg
IFVOSU1QTEVNRU5URUQoKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBE
M0QxMUNhbGNTdWJyZXNvdXJjZShtaXBTbGljZSwgYXJyYXlTbGljZSwgbWlwTGV2ZWxzKTsKLX0K
LQotUmVuZGVyVGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgSUQz
RDExUmVuZGVyVGFyZ2V0VmlldyAqcnR2LCBJRDNEMTFUZXh0dXJlMkQgKnRleCwgSUQzRDExU2hh
ZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewot
ICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKHJlbmRlcmVyKTsKLSAg
ICBtVGV4dHVyZSA9IHRleDsKLSAgICBtUmVuZGVyVGFyZ2V0ID0gcnR2OwotICAgIG1EZXB0aFN0
ZW5jaWwgPSBOVUxMOwotICAgIG1TaGFkZXJSZXNvdXJjZSA9IHNydjsKLSAgICBtU3VicmVzb3Vy
Y2VJbmRleCA9IDA7Ci0KLSAgICBpZiAobVJlbmRlclRhcmdldCAmJiBtVGV4dHVyZSkKLSAgICB7
Ci0gICAgICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIGRlc2M7Ci0gICAgICAgIG1S
ZW5kZXJUYXJnZXQtPkdldERlc2MoJmRlc2MpOwotCi0gICAgICAgIEQzRDExX1RFWFRVUkUyRF9E
RVNDIHRleERlc2M7Ci0gICAgICAgIG1UZXh0dXJlLT5HZXREZXNjKCZ0ZXhEZXNjKTsKLQotICAg
ICAgICBtU3VicmVzb3VyY2VJbmRleCA9IGdldFJUVlN1YnJlc291cmNlSW5kZXgobVRleHR1cmUs
IG1SZW5kZXJUYXJnZXQpOwotICAgICAgICBtV2lkdGggPSB3aWR0aDsKLSAgICAgICAgbUhlaWdo
dCA9IGhlaWdodDsKLSAgICAgICAgbVNhbXBsZXMgPSAodGV4RGVzYy5TYW1wbGVEZXNjLkNvdW50
ID4gMSkgPyB0ZXhEZXNjLlNhbXBsZURlc2MuQ291bnQgOiAwOwotCi0gICAgICAgIG1JbnRlcm5h
bEZvcm1hdCA9IGQzZDExX2dsOjpDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGRlc2MuRm9y
bWF0KTsKLSAgICAgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDExX2dsOjpDb252ZXJ0VGV4dHVyZUlu
dGVybmFsRm9ybWF0KGRlc2MuRm9ybWF0KTsKLSAgICB9Ci19Ci0KLVJlbmRlclRhcmdldDExOjpS
ZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIElEM0QxMURlcHRoU3RlbmNpbFZpZXcg
KmRzdiwgSUQzRDExVGV4dHVyZTJEICp0ZXgsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBtUmVuZGVyZXIgPSBSZW5k
ZXJlcjExOjptYWtlUmVuZGVyZXIxMShyZW5kZXJlcik7Ci0gICAgbVRleHR1cmUgPSB0ZXg7Ci0g
ICAgbVJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgbURlcHRoU3RlbmNpbCA9IGRzdjsKLSAgICBt
U2hhZGVyUmVzb3VyY2UgPSBzcnY7Ci0gICAgbVN1YnJlc291cmNlSW5kZXggPSAwOwotCi0gICAg
aWYgKG1EZXB0aFN0ZW5jaWwgJiYgbVRleHR1cmUpCi0gICAgewotICAgICAgICBEM0QxMV9ERVBU
SF9TVEVOQ0lMX1ZJRVdfREVTQyBkZXNjOwotICAgICAgICBtRGVwdGhTdGVuY2lsLT5HZXREZXNj
KCZkZXNjKTsKLQotICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyB0ZXhEZXNjOwotICAgICAg
ICBtVGV4dHVyZS0+R2V0RGVzYygmdGV4RGVzYyk7Ci0KLSAgICAgICAgbVN1YnJlc291cmNlSW5k
ZXggPSBnZXREU1ZTdWJyZXNvdXJjZUluZGV4KG1UZXh0dXJlLCBtRGVwdGhTdGVuY2lsKTsKLSAg
ICAgICAgbVdpZHRoID0gd2lkdGg7Ci0gICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAg
IG1TYW1wbGVzID0gKHRleERlc2MuU2FtcGxlRGVzYy5Db3VudCA+IDEpID8gdGV4RGVzYy5TYW1w
bGVEZXNjLkNvdW50IDogMDsKLQotICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBkM2QxMV9nbDo6
Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChkZXNjLkZvcm1hdCk7Ci0gICAgICAgIG1BY3R1
YWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChkZXNjLkZv
cm1hdCk7Ci0gICAgfQotfQotCi1SZW5kZXJUYXJnZXQxMTo6UmVuZGVyVGFyZ2V0MTEoUmVuZGVy
ZXIgKnJlbmRlcmVyLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xzaXplaSBzYW1wbGVzLCBib29sIGRlcHRoKQotewotICAgIG1SZW5kZXJlciA9IFJlbmRl
cmVyMTE6Om1ha2VSZW5kZXJlcjExKHJlbmRlcmVyKTsKLSAgICBtVGV4dHVyZSA9IE5VTEw7Ci0g
ICAgbVJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAg
bVNoYWRlclJlc291cmNlID0gTlVMTDsKLQotICAgIERYR0lfRk9STUFUIHJlcXVlc3RlZEZvcm1h
dCA9IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KGZvcm1hdCk7Ci0KLSAgICBp
bnQgc3VwcG9ydGVkU2FtcGxlcyA9IG1SZW5kZXJlci0+Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBs
ZXMocmVxdWVzdGVkRm9ybWF0LCBzYW1wbGVzKTsKLSAgICBpZiAoc3VwcG9ydGVkU2FtcGxlcyA8
IDApCi0gICAgewotICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApCi0gICAg
ewotICAgICAgICAvLyBDcmVhdGUgdGV4dHVyZSByZXNvdXJjZQotICAgICAgICBEM0QxMV9URVhU
VVJFMkRfREVTQyBkZXNjOwotICAgICAgICBkZXNjLldpZHRoID0gd2lkdGg7IAotICAgICAgICBk
ZXNjLkhlaWdodCA9IGhlaWdodDsKLSAgICAgICAgZGVzYy5NaXBMZXZlbHMgPSAxOwotICAgICAg
ICBkZXNjLkFycmF5U2l6ZSA9IDE7Ci0gICAgICAgIGRlc2MuRm9ybWF0ID0gcmVxdWVzdGVkRm9y
bWF0OwotICAgICAgICBkZXNjLlNhbXBsZURlc2MuQ291bnQgPSAoc3VwcG9ydGVkU2FtcGxlcyA9
PSAwKSA/IDEgOiBzdXBwb3J0ZWRTYW1wbGVzOwotICAgICAgICBkZXNjLlNhbXBsZURlc2MuUXVh
bGl0eSA9IDA7Ci0gICAgICAgIGRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOwotICAg
ICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKLSAgICAgICAgZGVzYy5NaXNjRmxhZ3MgPSAw
OwotICAgICAgICBkZXNjLkJpbmRGbGFncyA9IChkZXB0aCA/IEQzRDExX0JJTkRfREVQVEhfU1RF
TkNJTCA6IChEM0QxMV9CSU5EX1JFTkRFUl9UQVJHRVQgfCBEM0QxMV9CSU5EX1NIQURFUl9SRVNP
VVJDRSkpOwotCi0gICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXRE
ZXZpY2UoKTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUy
RCgmZGVzYywgTlVMTCwgJm1UZXh0dXJlKTsKLQotICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgIGlmIChkZXB0aCkKLSAgICAgICAgewotICAgICAg
ICAgICAgRDNEMTFfREVQVEhfU1RFTkNJTF9WSUVXX0RFU0MgZHN2RGVzYzsKLSAgICAgICAgICAg
IGRzdkRlc2MuRm9ybWF0ID0gcmVxdWVzdGVkRm9ybWF0OwotICAgICAgICAgICAgZHN2RGVzYy5W
aWV3RGltZW5zaW9uID0gKHN1cHBvcnRlZFNhbXBsZXMgPT0gMCkgPyBEM0QxMV9EU1ZfRElNRU5T
SU9OX1RFWFRVUkUyRCA6IEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTJETVM7Ci0gICAgICAg
ICAgICBkc3ZEZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IDA7Ci0gICAgICAgICAgICBkc3ZEZXNj
LkZsYWdzID0gMDsKLSAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVu
Y2lsVmlldyhtVGV4dHVyZSwgJmRzdkRlc2MsICZtRGVwdGhTdGVuY2lsKTsKLQotICAgICAgICAg
ICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgbVRleHR1cmUgPSBO
VUxMOwotICAgICAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFS
R0VUX1ZJRVdfREVTQyBydHZEZXNjOwotICAgICAgICAgICAgcnR2RGVzYy5Gb3JtYXQgPSByZXF1
ZXN0ZWRGb3JtYXQ7Ci0gICAgICAgICAgICBydHZEZXNjLlZpZXdEaW1lbnNpb24gPSAoc3VwcG9y
dGVkU2FtcGxlcyA9PSAwKSA/IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJEIDogRDNEMTFf
UlRWX0RJTUVOU0lPTl9URVhUVVJFMkRNUzsKLSAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJE
Lk1pcFNsaWNlID0gMDsKLSAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVy
VGFyZ2V0VmlldyhtVGV4dHVyZSwgJnJ0dkRlc2MsICZtUmVuZGVyVGFyZ2V0KTsKLQotICAgICAg
ICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgbVRleHR1cmUg
PSBOVUxMOwotICAgICAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgICAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0Vf
VklFV19ERVNDIHNydkRlc2M7Ci0gICAgICAgICAgICBzcnZEZXNjLkZvcm1hdCA9IHJlcXVlc3Rl
ZEZvcm1hdDsKLSAgICAgICAgICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IChzdXBwb3J0ZWRT
YW1wbGVzID09IDApID8gRDNEMTFfU1JWX0RJTUVOU0lPTl9URVhUVVJFMkQgOiBEM0QxMV9TUlZf
RElNRU5TSU9OX1RFWFRVUkUyRE1TOwotICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkQuTW9z
dERldGFpbGVkTWlwID0gMDsKLSAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJELk1pcExldmVs
cyA9IDE7Ci0gICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNl
VmlldyhtVGV4dHVyZSwgJnNydkRlc2MsICZtU2hhZGVyUmVzb3VyY2UpOwotCi0gICAgICAgICAg
ICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBtVGV4dHVyZSA9IE5V
TEw7Ci0gICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgICAgICAg
ICAgICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOwotICAgICAgICAgICAgICAgIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgbVdpZHRoID0gd2lkdGg7Ci0gICAgbUhlaWdodCA9IGhlaWdodDsKLSAgICBtSW50
ZXJuYWxGb3JtYXQgPSBmb3JtYXQ7Ci0gICAgbVNhbXBsZXMgPSBzdXBwb3J0ZWRTYW1wbGVzOwot
ICAgIG1BY3R1YWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1h
dChyZXF1ZXN0ZWRGb3JtYXQpOwotICAgIG1TdWJyZXNvdXJjZUluZGV4ID0gRDNEMTFDYWxjU3Vi
cmVzb3VyY2UoMCwgMCwgMSk7Ci19Ci0KLVJlbmRlclRhcmdldDExOjp+UmVuZGVyVGFyZ2V0MTEo
KQotewotICAgIGlmIChtVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1UZXh0dXJlLT5SZWxlYXNl
KCk7Ci0gICAgICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVJlbmRlclRh
cmdldCkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAg
bVJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1EZXB0aFN0ZW5jaWwpCi0g
ICAgewotICAgICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EZXB0aFN0
ZW5jaWwgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtU2hhZGVyUmVzb3VyY2UpCi0gICAgewot
ICAgICAgICBtU2hhZGVyUmVzb3VyY2UtPlJlbGVhc2UoKTsKLSAgICAgICAgbVNoYWRlclJlc291
cmNlID0gTlVMTDsKLSAgICB9Ci19Ci0KLVJlbmRlclRhcmdldDExICpSZW5kZXJUYXJnZXQxMTo6
bWFrZVJlbmRlclRhcmdldDExKFJlbmRlclRhcmdldCAqdGFyZ2V0KQotewotICAgIEFTU0VSVChI
QVNfRFlOQU1JQ19UWVBFKHJ4OjpSZW5kZXJUYXJnZXQxMSosIHRhcmdldCkpOwotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxyeDo6UmVuZGVyVGFyZ2V0MTEqPih0YXJnZXQpOwotfQotCi1JRDNEMTFU
ZXh0dXJlMkQgKlJlbmRlclRhcmdldDExOjpnZXRUZXh0dXJlKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbVRleHR1cmU7Ci19Ci0KLUlEM0QxMVJlbmRlclRhcmdldFZpZXcgKlJlbmRlclRhcmdldDEx
OjpnZXRSZW5kZXJUYXJnZXRWaWV3KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVJlbmRlclRhcmdl
dDsKLX0KLQotSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqUmVuZGVyVGFyZ2V0MTE6OmdldERlcHRo
U3RlbmNpbFZpZXcoKSBjb25zdAotewotICAgIHJldHVybiBtRGVwdGhTdGVuY2lsOwotfQotCi1J
RDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlJlbmRlclRhcmdldDExOjpnZXRTaGFkZXJSZXNvdXJj
ZVZpZXcoKSBjb25zdAotewotICAgIHJldHVybiBtU2hhZGVyUmVzb3VyY2U7Ci19Ci0KLXVuc2ln
bmVkIGludCBSZW5kZXJUYXJnZXQxMTo6Z2V0U3VicmVzb3VyY2VJbmRleCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1TdWJyZXNvdXJjZUluZGV4OwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldDExLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRh
cmdldDExLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ODI3ZjI2Mzk3MDcyOTQy
ODRhMmNjZDM0ODFjOTdiZWRlODliMDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9SZW5kZXJUYXJnZXQxMS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLS8vIFJlbmRlclRhcmdldDExLmg6IERlZmluZXMgYSBEWDExLXNwZWNpZmlj
IHdyYXBwZXIgZm9yIElEM0QxMVZpZXcgcG9pbnRlcnMKLS8vIHJldGFpbmVkIGJ5IFJlbmRlcmJ1
ZmZlcnMuCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUlRBUkdFVDExX0hfCi0j
ZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJUQVJHRVQxMV9IXwotCi0jaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldC5oIgotCi1uYW1lc3BhY2UgcngKLXsKLWNs
YXNzIFJlbmRlcmVyOwotY2xhc3MgUmVuZGVyZXIxMTsKLQotY2xhc3MgUmVuZGVyVGFyZ2V0MTEg
OiBwdWJsaWMgUmVuZGVyVGFyZ2V0Ci17Ci0gIHB1YmxpYzoKLSAgICBSZW5kZXJUYXJnZXQxMShS
ZW5kZXJlciAqcmVuZGVyZXIsIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0diwgSUQzRDExVGV4
dHVyZTJEICp0ZXgsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCk7Ci0gICAgUmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVy
LCBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpkc3YsIElEM0QxMVRleHR1cmUyRCAqdGV4LCBJRDNE
MTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
OwotICAgIFJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcywgYm9vbCBkZXB0
aCk7Ci0gICAgdmlydHVhbCB+UmVuZGVyVGFyZ2V0MTEoKTsKLQotICAgIHN0YXRpYyBSZW5kZXJU
YXJnZXQxMSAqbWFrZVJlbmRlclRhcmdldDExKFJlbmRlclRhcmdldCAqcmVuZGVyVGFyZ2V0KTsK
LQotICAgIElEM0QxMVRleHR1cmUyRCAqZ2V0VGV4dHVyZSgpIGNvbnN0OwotICAgIElEM0QxMVJl
bmRlclRhcmdldFZpZXcgKmdldFJlbmRlclRhcmdldFZpZXcoKSBjb25zdDsKLSAgICBJRDNEMTFE
ZXB0aFN0ZW5jaWxWaWV3ICpnZXREZXB0aFN0ZW5jaWxWaWV3KCkgY29uc3Q7Ci0gICAgSUQzRDEx
U2hhZGVyUmVzb3VyY2VWaWV3ICpnZXRTaGFkZXJSZXNvdXJjZVZpZXcoKSBjb25zdDsKLQotICAg
IHVuc2lnbmVkIGludCBnZXRTdWJyZXNvdXJjZUluZGV4KCkgY29uc3Q7Ci0KLSAgcHJpdmF0ZToK
LSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyVGFyZ2V0MTEpOwotCi0gICAgdW5z
aWduZWQgaW50IG1TdWJyZXNvdXJjZUluZGV4OwotICAgIElEM0QxMVRleHR1cmUyRCAqbVRleHR1
cmU7Ci0gICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqbVJlbmRlclRhcmdldDsKLSAgICBJRDNE
MTFEZXB0aFN0ZW5jaWxWaWV3ICptRGVwdGhTdGVuY2lsOwotICAgIElEM0QxMVNoYWRlclJlc291
cmNlVmlldyAqbVNoYWRlclJlc291cmNlOwotCi0gICAgUmVuZGVyZXIxMSAqbVJlbmRlcmVyOwot
fTsKLQotfQotCi0jZW5kaWYgTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUlRBUkdFVDExX0hfClwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQ5LmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0OS5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4NGM3MDkwNTk5YzkwZWMzMDc4OTY1ZmNh
OWUxYTA2MzIzYzc5OGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5k
ZXJUYXJnZXQ5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0jaW5jbHVkZSAi
cHJlY29tcGlsZWQuaCIKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBSZW5kZXJUYXJnZXQ5LmNwcDogSW1w
bGVtZW50cyBhIEQzRDktc3BlY2lmaWMgd3JhcHBlciBmb3IgSURpcmVjdDNEU3VyZmFjZTkKLS8v
IHBvaW50ZXJzIHJldGFpbmVkIGJ5IHJlbmRlcmJ1ZmZlcnMuCi0KLSNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0OS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9SZW5kZXJlcjkuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9yZW5kZXJlcjlf
dXRpbHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgotCi1uYW1lc3BhY2UgcngKLXsK
LQotUmVuZGVyVGFyZ2V0OTo6UmVuZGVyVGFyZ2V0OShSZW5kZXJlciAqcmVuZGVyZXIsIElEaXJl
Y3QzRFN1cmZhY2U5ICpzdXJmYWNlKQotewotICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyOTo6bWFr
ZVJlbmRlcmVyOShyZW5kZXJlcik7Ci0gICAgbVJlbmRlclRhcmdldCA9IHN1cmZhY2U7Ci0KLSAg
ICBpZiAobVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNj
cmlwdGlvbjsKLSAgICAgICAgbVJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzY3JpcHRpb24pOwot
Ci0gICAgICAgIG1XaWR0aCA9IGRlc2NyaXB0aW9uLldpZHRoOwotICAgICAgICBtSGVpZ2h0ID0g
ZGVzY3JpcHRpb24uSGVpZ2h0OwotICAgICAgICAKLSAgICAgICAgbUludGVybmFsRm9ybWF0ID0g
ZDNkOV9nbDo6R2V0RXF1aXZhbGVudEZvcm1hdChkZXNjcmlwdGlvbi5Gb3JtYXQpOwotICAgICAg
ICBtQWN0dWFsRm9ybWF0ID0gZDNkOV9nbDo6R2V0RXF1aXZhbGVudEZvcm1hdChkZXNjcmlwdGlv
bi5Gb3JtYXQpOwotICAgICAgICBtU2FtcGxlcyA9IGQzZDlfZ2w6OkdldFNhbXBsZXNGcm9tTXVs
dGlzYW1wbGVUeXBlKGRlc2NyaXB0aW9uLk11bHRpU2FtcGxlVHlwZSk7Ci0gICAgfQotfQotCi1S
ZW5kZXJUYXJnZXQ5OjpSZW5kZXJUYXJnZXQ5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcykKLXsK
LSAgICBtUmVuZGVyZXIgPSBSZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjkocmVuZGVyZXIpOwotICAg
IG1SZW5kZXJUYXJnZXQgPSBOVUxMOwotCi0gICAgRDNERk9STUFUIHJlcXVlc3RlZEZvcm1hdCA9
IGdsX2QzZDk6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoZm9ybWF0KTsKLSAgICBpbnQgc3Vw
cG9ydGVkU2FtcGxlcyA9IG1SZW5kZXJlci0+Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMocmVx
dWVzdGVkRm9ybWF0LCBzYW1wbGVzKTsKLQotICAgIGlmIChzdXBwb3J0ZWRTYW1wbGVzID09IC0x
KQotICAgIHsKLSAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotCi0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9IEQzREVSUl9JTlZBTElEQ0FM
TDsKLSAgICAKLSAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApCi0gICAgewotICAgICAg
ICBpZiAocmVxdWVzdGVkRm9ybWF0ID09IEQzREZNVF9EMjRTOCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmVzdWx0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKS0+Q3JlYXRlRGVwdGhTdGVuY2ls
U3VyZmFjZSh3aWR0aCwgaGVpZ2h0LCByZXF1ZXN0ZWRGb3JtYXQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGds
X2QzZDk6OkdldE11bHRpc2FtcGxlVHlwZUZyb21TYW1wbGVzKHN1cHBvcnRlZFNhbXBsZXMpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLCBGQUxTRSwgJm1SZW5kZXJUYXJnZXQsIE5VTEwpOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gbVJlbmRlcmVy
LT5nZXREZXZpY2UoKS0+Q3JlYXRlUmVuZGVyVGFyZ2V0KHdpZHRoLCBoZWlnaHQsIHJlcXVlc3Rl
ZEZvcm1hdCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6R2V0TXVsdGlzYW1wbGVUeXBlRnJvbVNhbXBsZXMo
c3VwcG9ydGVkU2FtcGxlcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgRkFMU0UsICZtUmVuZGVyVGFyZ2V0LCBOVUxM
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9N
RU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICB9Ci0KLSAg
ICBtV2lkdGggPSB3aWR0aDsKLSAgICBtSGVpZ2h0ID0gaGVpZ2h0OwotICAgIG1JbnRlcm5hbEZv
cm1hdCA9IGZvcm1hdDsKLSAgICBtU2FtcGxlcyA9IHN1cHBvcnRlZFNhbXBsZXM7Ci0gICAgbUFj
dHVhbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEVxdWl2YWxlbnRGb3JtYXQocmVxdWVzdGVkRm9ybWF0
KTsKLX0KLQotUmVuZGVyVGFyZ2V0OTo6flJlbmRlclRhcmdldDkoKQotewotICAgIGlmIChtUmVu
ZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAg
IH0KLX0KLQotUmVuZGVyVGFyZ2V0OSAqUmVuZGVyVGFyZ2V0OTo6bWFrZVJlbmRlclRhcmdldDko
UmVuZGVyVGFyZ2V0ICp0YXJnZXQpCi17Ci0gICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUocng6
OlJlbmRlclRhcmdldDkqLCB0YXJnZXQpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8cng6OlJl
bmRlclRhcmdldDkqPih0YXJnZXQpOwotfQotCi1JRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyVGFy
Z2V0OTo6Z2V0U3VyZmFjZSgpCi17Ci0gICAgLy8gQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBy
ZWxlYXNpbmcgdGhlIHJldHVybmVkIHN1cmZhY2UgcmVmZXJlbmNlLgotICAgIGlmIChtUmVuZGVy
VGFyZ2V0KQotICAgIHsKLSAgICAgICAgbVJlbmRlclRhcmdldC0+QWRkUmVmKCk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7Ci19Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL1JlbmRlclRhcmdldDkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0OS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBmYWY4YWQxYzZkMmQ2MjQyOTQwMGZlMzNjYjhjZGRlNzFmN2QzMjVlLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0OS5oCisrKyAvZGV2L251
bGwKQEAgLTEsNDAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQot
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFJlbmRlclRhcmdldDkuaDog
RGVmaW5lcyBhIEQzRDktc3BlY2lmaWMgd3JhcHBlciBmb3IgSURpcmVjdDNEU3VyZmFjZTkgcG9p
bnRlcnMKLS8vIHJldGFpbmVkIGJ5IFJlbmRlcmJ1ZmZlcnMuCi0KLSNpZm5kZWYgTElCR0xFU1Yy
X1JFTkRFUkVSX1JFTkRFUlRBUkdFVDlfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1JF
TkRFUlRBUkdFVDlfSF8KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJn
ZXQuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci1jbGFzcyBSZW5kZXJlcjsKLWNsYXNzIFJlbmRlcmVy
OTsKLQotY2xhc3MgUmVuZGVyVGFyZ2V0OSA6IHB1YmxpYyBSZW5kZXJUYXJnZXQKLXsKLSAgcHVi
bGljOgotICAgIFJlbmRlclRhcmdldDkoUmVuZGVyZXIgKnJlbmRlcmVyLCBJRGlyZWN0M0RTdXJm
YWNlOSAqc3VyZmFjZSk7Ci0gICAgUmVuZGVyVGFyZ2V0OShSZW5kZXJlciAqcmVuZGVyZXIsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBs
ZXMpOwotICAgIHZpcnR1YWwgflJlbmRlclRhcmdldDkoKTsKLQotICAgIHN0YXRpYyBSZW5kZXJU
YXJnZXQ5ICptYWtlUmVuZGVyVGFyZ2V0OShSZW5kZXJUYXJnZXQgKnJlbmRlclRhcmdldCk7Ci0g
ICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFN1cmZhY2UoKTsKLQotICBwcml2YXRlOgotICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJUYXJnZXQ5KTsKLQotICAgIElEaXJlY3QzRFN1
cmZhY2U5ICptUmVuZGVyVGFyZ2V0OwotCi0gICAgUmVuZGVyZXI5ICptUmVuZGVyZXI7Ci19Owot
Ci19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSVEFSR0VUOV9IXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9S
ZW5kZXJlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL1JlbmRlcmVyLmNwcAppbmRleCBlMGIzYWJjZjg3OTllYzJjNmMwOTU2NDY0ZDNkNWY5MWQ4
ODdkODZhLi40YmQ0ZGNmODI2N2U0NDJkZjFiMGE3ZGNhYzg5OWI1OWU5NTRkMTgwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRl
cmVyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL1JlbmRlcmVyLmNwcApAQCAtMTEsOCArMTEsOCBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9t
YWluLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKICNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVu
ZGVyZXI5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyMTEuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyZXIxMS5oIgogI2luY2x1ZGUgImxpYkdMRVN2
Mi91dGlsaXRpZXMuaCIKICNpbmNsdWRlICJ0aGlyZF9wYXJ0eS90cmFjZV9ldmVudC90cmFjZV9l
dmVudC5oIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL1JlbmRlcmVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgKaW5kZXggZTE4NjFmMDFlYjFkYWI5MDMyMzE5NWQx
OGYwY2NlOWJhYzJkMzJhMC4uNzI0NGEwYTNkNjExZjA5MTI4MWQ5NTY4ODYzNTdmZjBhYTljYzhl
YiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9SZW5kZXJlci5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvUmVuZGVyZXIuaApAQCAtMTE5LDcgKzExOSw3IEBAIGNsYXNzIFJlbmRlcmVy
CiAgICAgdmlydHVhbCB2b2lkIHNldFRleHR1cmUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBp
bmRleCwgZ2w6OlRleHR1cmUgKnRleHR1cmUpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRS
YXN0ZXJpemVyU3RhdGUoY29uc3QgZ2w6OlJhc3Rlcml6ZXJTdGF0ZSAmcmFzdGVyU3RhdGUpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0ZShjb25zdCBnbDo6QmxlbmRTdGF0ZSAm
YmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNvbG9yICZibGVuZENvbG9yLAorICAgIHZpcnR1YWwgdm9p
ZCBzZXRCbGVuZFN0YXRlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpC
bGVuZFN0YXRlICZibGVuZFN0YXRlLCBjb25zdCBnbDo6Q29sb3IgJmJsZW5kQ29sb3IsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZU1hc2spID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVwdGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6OkRlcHRoU3Rl
bmNpbFN0YXRlICZkZXB0aFN0ZW5jaWxTdGF0ZSwgaW50IHN0ZW5jaWxSZWYsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGVuY2lsQmFja1JlZiwgYm9vbCBmcm9u
dEZhY2VDQ1cpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIxMS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyMTEuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAxM2JhMzU1ZDU4MjJmMGZjOTdlZWQwM2Q3MjhhZTBkNzdlZDQ2ZTU3Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIxMS5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwzNTUxICswLDAgQEAKLSNpbmNsdWRlICJwcmVjb21waWxlZC5oIgotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgotLy8KLQotLy8gUmVuZGVyZXIxMS5jcHA6IEltcGxlbWVudHMgYSBiYWNrLWVu
ZCBzcGVjaWZpYyBjbGFzcyBmb3IgdGhlIEQzRDExIHJlbmRlcmVyLgotCi0jaW5jbHVkZSAibGli
R0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL0J1ZmZlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5
LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL1JlbmRlcmJ1ZmZlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJl
cjExLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldDExLmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL3JlbmRlcmVyMTFfdXRpbHMuaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvU2hhZGVyRXhlY3V0YWJsZTExLmgiCi0jaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL1N3YXBDaGFpbjExLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL0ltYWdlMTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4QnVmZmVy
MTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhCdWZmZXIxMS5oIgotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdlMTEuaCIKLSNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGF0YU1hbmFnZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvSW5kZXhEYXRhTWFuYWdlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9UZXh0dXJlU3RvcmFnZTExLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1F1
ZXJ5MTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvRmVuY2UxMS5oIgotCi0jaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2gxMXZz
LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Ro
cm91Z2hyZ2JhMTFwcy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2Nv
bXBpbGVkL3Bhc3N0aHJvdWdocmdiMTFwcy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdobHVtMTFwcy5oIgotI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdobHVtYWxwaGExMXBzLmgi
Ci0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9jbGVhcjEx
dnMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9jbGVh
cnNpbmdsZTExcHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21w
aWxlZC9jbGVhcm11bHRpcGxlMTFwcy5oIgotCi0jaW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIK
LQotI2lmZGVmIF9ERUJVRwotLy8gdGhpcyBmbGFnIGVuYWJsZXMgc3VwcHJlc3Npbmcgc29tZSBz
cHVyaW91cyB3YXJuaW5ncyB0aGF0IHBvcCB1cCBpbiBjZXJ0YWluIFdlYkdMIHNhbXBsZXMKLS8v
IGFuZCBjb25mb3JtYW5jZSB0ZXN0cy4gdG8gZW5hYmxlIGFsbCB3YXJuaW5ncywgcmVtb3ZlIHRo
aXMgZGVmaW5lLgotI2RlZmluZSBBTkdMRV9TVVBQUkVTU19EM0QxMV9IQVpBUkRfV0FSTklOR1Mg
MQotI2VuZGlmCi0KLW5hbWVzcGFjZSByeAotewotc3RhdGljIGNvbnN0IERYR0lfRk9STUFUIFJl
bmRlclRhcmdldEZvcm1hdHNbXSA9Ci0gICAgewotICAgICAgICBEWEdJX0ZPUk1BVF9COEc4UjhB
OF9VTk9STSwKLSAgICAgICAgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk0KLSAgICB9OwotCi1z
dGF0aWMgY29uc3QgRFhHSV9GT1JNQVQgRGVwdGhTdGVuY2lsRm9ybWF0c1tdID0KLSAgICB7Ci0g
ICAgICAgIERYR0lfRk9STUFUX1VOS05PV04sCi0gICAgICAgIERYR0lfRk9STUFUX0QyNF9VTk9S
TV9TOF9VSU5ULAotICAgICAgICBEWEdJX0ZPUk1BVF9EMTZfVU5PUk0KLSAgICB9OwotCi1lbnVt
Ci17Ci0gICAgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGX1NNNCA9IDE2Ci19OwotCi1SZW5k
ZXJlcjExOjpSZW5kZXJlcjExKGVnbDo6RGlzcGxheSAqZGlzcGxheSwgSERDIGhEYykgOiBSZW5k
ZXJlcihkaXNwbGF5KSwgbURjKGhEYykKLXsKLSAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBOVUxM
OwotICAgIG1JbmRleERhdGFNYW5hZ2VyID0gTlVMTDsKLQotICAgIG1MaW5lTG9vcElCID0gTlVM
TDsKLSAgICBtVHJpYW5nbGVGYW5JQiA9IE5VTEw7Ci0KLSAgICBtQ29weVJlc291cmNlc0luaXRp
YWxpemVkID0gZmFsc2U7Ci0gICAgbUNvcHlWQiA9IE5VTEw7Ci0gICAgbUNvcHlTYW1wbGVyID0g
TlVMTDsKLSAgICBtQ29weUlMID0gTlVMTDsKLSAgICBtQ29weVZTID0gTlVMTDsKLSAgICBtQ29w
eVJHQkFQUyA9IE5VTEw7Ci0gICAgbUNvcHlSR0JQUyA9IE5VTEw7Ci0gICAgbUNvcHlMdW1QUyA9
IE5VTEw7Ci0gICAgbUNvcHlMdW1BbHBoYVBTID0gTlVMTDsKLQotICAgIG1DbGVhclJlc291cmNl
c0luaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgbUNsZWFyVkIgPSBOVUxMOwotICAgIG1DbGVhcklM
ID0gTlVMTDsKLSAgICBtQ2xlYXJWUyA9IE5VTEw7Ci0gICAgbUNsZWFyU2luZ2xlUFMgPSBOVUxM
OwotICAgIG1DbGVhck11bHRpcGxlUFMgPSBOVUxMOwotICAgIG1DbGVhclNjaXNzb3JSUyA9IE5V
TEw7Ci0gICAgbUNsZWFyTm9TY2lzc29yUlMgPSBOVUxMOwotCi0gICAgbVN5bmNRdWVyeSA9IE5V
TEw7Ci0KLSAgICBtRDNkMTFNb2R1bGUgPSBOVUxMOwotICAgIG1EeGdpTW9kdWxlID0gTlVMTDsK
LQotICAgIG1EZXZpY2VMb3N0ID0gZmFsc2U7Ci0KLSAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9
IDA7Ci0KLSAgICBtRGV2aWNlID0gTlVMTDsKLSAgICBtRGV2aWNlQ29udGV4dCA9IE5VTEw7Ci0g
ICAgbUR4Z2lBZGFwdGVyID0gTlVMTDsKLSAgICBtRHhnaUZhY3RvcnkgPSBOVUxMOwotCi0gICAg
bURyaXZlckNvbnN0YW50QnVmZmVyVlMgPSBOVUxMOwotICAgIG1Ecml2ZXJDb25zdGFudEJ1ZmZl
clBTID0gTlVMTDsKLQotICAgIG1CR1JBVGV4dHVyZVN1cHBvcnQgPSBmYWxzZTsKLQotICAgIG1J
c0dlb21ldHJ5U2hhZGVyQWN0aXZlID0gZmFsc2U7Ci19Ci0KLVJlbmRlcmVyMTE6On5SZW5kZXJl
cjExKCkKLXsKLSAgICByZWxlYXNlKCk7Ci19Ci0KLVJlbmRlcmVyMTEgKlJlbmRlcmVyMTE6Om1h
a2VSZW5kZXJlcjExKFJlbmRlcmVyICpyZW5kZXJlcikKLXsKLSAgICBBU1NFUlQoSEFTX0RZTkFN
SUNfVFlQRShyeDo6UmVuZGVyZXIxMSosIHJlbmRlcmVyKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PHJ4OjpSZW5kZXJlcjExKj4ocmVuZGVyZXIpOwotfQotCi0jaWZuZGVmIF9fZDNkMTFfMV9o
X18KLSNkZWZpbmUgRDNEMTFfTUVTU0FHRV9JRF9ERVZJQ0VfRFJBV19SRU5ERVJUQVJHRVRWSUVX
X05PVF9TRVQgKChEM0QxMV9NRVNTQUdFX0lEKTMxNDYwODEpCi0jZW5kaWYKLQotRUdMaW50IFJl
bmRlcmVyMTE6OmluaXRpYWxpemUoKQotewotICAgIGlmICghaW5pdGlhbGl6ZUNvbXBpbGVyKCkp
Ci0gICAgewotICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsKLSAgICB9Ci0KLSAg
ICBtRHhnaU1vZHVsZSA9IExvYWRMaWJyYXJ5KFRFWFQoImR4Z2kuZGxsIikpOwotICAgIG1EM2Qx
MU1vZHVsZSA9IExvYWRMaWJyYXJ5KFRFWFQoImQzZDExLmRsbCIpKTsKLQotICAgIGlmIChtRDNk
MTFNb2R1bGUgPT0gTlVMTCB8fCBtRHhnaU1vZHVsZSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAg
RVJSKCJDb3VsZCBub3QgbG9hZCBEM0QxMSBvciBEWEdJIGxpYnJhcnkgLSBhYm9ydGluZyFcbiIp
OwotICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsKLSAgICB9Ci0KLSAgICAvLyBj
cmVhdGUgdGhlIEQzRDExIGRldmljZQotICAgIEFTU0VSVChtRGV2aWNlID09IE5VTEwpOwotICAg
IFBGTl9EM0QxMV9DUkVBVEVfREVWSUNFIEQzRDExQ3JlYXRlRGV2aWNlID0gKFBGTl9EM0QxMV9D
UkVBVEVfREVWSUNFKUdldFByb2NBZGRyZXNzKG1EM2QxMU1vZHVsZSwgIkQzRDExQ3JlYXRlRGV2
aWNlIik7Ci0KLSAgICBpZiAoRDNEMTFDcmVhdGVEZXZpY2UgPT0gTlVMTCkKLSAgICB7Ci0gICAg
ICAgIEVSUigiQ291bGQgbm90IHJldHJpZXZlIEQzRDExQ3JlYXRlRGV2aWNlIGFkZHJlc3MgLSBh
Ym9ydGluZyFcbiIpOwotICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsKLSAgICB9
Ci0KLSAgICBEM0RfRkVBVFVSRV9MRVZFTCBmZWF0dXJlTGV2ZWxzW10gPQotICAgIHsKLSAgICAg
ICAgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMCwKLSAgICAgICAgRDNEX0ZFQVRVUkVfTEVWRUxfMTBf
MSwKLSAgICAgICAgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMCwKLSAgICB9OwotCi0gICAgSFJFU1VM
VCByZXN1bHQgPSBTX09LOwotCi0jaWZkZWYgX0RFQlVHCi0gICAgcmVzdWx0ID0gRDNEMTFDcmVh
dGVEZXZpY2UoTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RfRFJJVkVS
X1RZUEVfSEFSRFdBUkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0QxMV9DUkVBVEVfREVWSUNFX0RFQlVHLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVMZXZlbHMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQXJyYXlTaXplKGZlYXR1cmVMZXZlbHMpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEQzRDExX1NES19WRVJTSU9OLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZtRGV2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZtRmVhdHVyZUxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtRGV2aWNl
Q29udGV4dCk7Ci0KLSAgICBpZiAoIW1EZXZpY2UgfHwgRkFJTEVEKHJlc3VsdCkpCi0gICAgewot
ICAgICAgICBFUlIoIkZhaWxlZCBjcmVhdGluZyBEZWJ1ZyBEM0QxMSBkZXZpY2UgLSBmYWxsaW5n
IGJhY2sgdG8gcmVsZWFzZSBydW50aW1lLlxuIik7Ci0gICAgfQotCi0gICAgaWYgKCFtRGV2aWNl
IHx8IEZBSUxFRChyZXN1bHQpKQotI2VuZGlmCi0gICAgewotICAgICAgICByZXN1bHQgPSBEM0Qx
MUNyZWF0ZURldmljZShOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
M0RfRFJJVkVSX1RZUEVfSEFSRFdBUkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVMZXZlbHMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFycmF5U2l6ZShmZWF0dXJlTGV2ZWxzKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEMTFfU0RLX1ZFUlNJT04sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZtRGV2aWNlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmbUZlYXR1cmVMZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJm1EZXZpY2VDb250ZXh0KTsKLQotICAgICAgICBpZiAoIW1EZXZpY2UgfHwgRkFJ
TEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0
ZSBEM0QxMSBkZXZpY2UgLSBhYm9ydGluZyFcbiIpOwotICAgICAgICAgICAgcmV0dXJuIEVHTF9O
T1RfSU5JVElBTElaRUQ7ICAgLy8gQ2xlYW51cCBkb25lIGJ5IGRlc3RydWN0b3IgdGhyb3VnaCBn
bERlc3Ryb3lSZW5kZXJlcgotICAgICAgICB9Ci0gICAgfQotCi0gICAgSURYR0lEZXZpY2UgKmR4
Z2lEZXZpY2UgPSBOVUxMOwotICAgIHJlc3VsdCA9IG1EZXZpY2UtPlF1ZXJ5SW50ZXJmYWNlKF9f
dXVpZG9mKElEWEdJRGV2aWNlKSwgKHZvaWQqKikmZHhnaURldmljZSk7Ci0KLSAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIoIkNvdWxkIG5vdCBxdWVyeSBEWEdJIGRl
dmljZSAtIGFib3J0aW5nIVxuIik7Ci0gICAgICAgIHJldHVybiBFR0xfTk9UX0lOSVRJQUxJWkVE
OwotICAgIH0KLQotICAgIHJlc3VsdCA9IGR4Z2lEZXZpY2UtPkdldFBhcmVudChfX3V1aWRvZihJ
RFhHSUFkYXB0ZXIpLCAodm9pZCoqKSZtRHhnaUFkYXB0ZXIpOwotCi0gICAgaWYgKEZBSUxFRChy
ZXN1bHQpKQotICAgIHsKLSAgICAgICAgRVJSKCJDb3VsZCBub3QgcmV0cmlldmUgRFhHSSBhZGFw
dGVyIC0gYWJvcnRpbmchXG4iKTsKLSAgICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7
Ci0gICAgfQotCi0gICAgZHhnaURldmljZS0+UmVsZWFzZSgpOwotCi0gICAgbUR4Z2lBZGFwdGVy
LT5HZXREZXNjKCZtQWRhcHRlckRlc2NyaXB0aW9uKTsKLSAgICBtZW1zZXQobURlc2NyaXB0aW9u
LCAwLCBzaXplb2YobURlc2NyaXB0aW9uKSk7Ci0gICAgd2NzdG9tYnMobURlc2NyaXB0aW9uLCBt
QWRhcHRlckRlc2NyaXB0aW9uLkRlc2NyaXB0aW9uLCBzaXplb2YobURlc2NyaXB0aW9uKSAtIDEp
OwotCi0gICAgcmVzdWx0ID0gbUR4Z2lBZGFwdGVyLT5HZXRQYXJlbnQoX191dWlkb2YoSURYR0lG
YWN0b3J5KSwgKHZvaWQqKikmbUR4Z2lGYWN0b3J5KTsKLQotICAgIGlmICghbUR4Z2lGYWN0b3J5
IHx8IEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRl
IERYR0kgZmFjdG9yeSAtIGFib3J0aW5nIVxuIik7Ci0gICAgICAgIHJldHVybiBFR0xfTk9UX0lO
SVRJQUxJWkVEOwotICAgIH0KLQotICAgIC8vIERpc2FibGUgc29tZSBzcHVyaW91cyBEM0QxMSBk
ZWJ1ZyB3YXJuaW5ncyB0byBwcmV2ZW50IHRoZW0gZnJvbSBmbG9vZGluZyB0aGUgb3V0cHV0IGxv
ZwotI2lmIGRlZmluZWQoQU5HTEVfU1VQUFJFU1NfRDNEMTFfSEFaQVJEX1dBUk5JTkdTKSAmJiBk
ZWZpbmVkKF9ERUJVRykKLSAgICBJRDNEMTFJbmZvUXVldWUgKmluZm9RdWV1ZTsKLSAgICByZXN1
bHQgPSBtRGV2aWNlLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRDNEMTFJbmZvUXVldWUpLCAg
KHZvaWQgKiopJmluZm9RdWV1ZSk7Ci0KLSAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAg
ewotICAgICAgICBEM0QxMV9NRVNTQUdFX0lEIGhpZGVNZXNzYWdlc1tdID0KLSAgICAgICAgewot
ICAgICAgICAgICAgRDNEMTFfTUVTU0FHRV9JRF9ERVZJQ0VfRFJBV19SRU5ERVJUQVJHRVRWSUVX
X05PVF9TRVQKLSAgICAgICAgfTsKLQotICAgICAgICBEM0QxMV9JTkZPX1FVRVVFX0ZJTFRFUiBm
aWx0ZXIgPSB7MH07Ci0gICAgICAgIGZpbHRlci5EZW55TGlzdC5OdW1JRHMgPSBBcnJheVNpemUo
aGlkZU1lc3NhZ2VzKTsKLSAgICAgICAgZmlsdGVyLkRlbnlMaXN0LnBJRExpc3QgPSBoaWRlTWVz
c2FnZXM7Ci0KLSAgICAgICAgaW5mb1F1ZXVlLT5BZGRTdG9yYWdlRmlsdGVyRW50cmllcygmZmls
dGVyKTsKLQotICAgICAgICBpbmZvUXVldWUtPlJlbGVhc2UoKTsKLSAgICB9Ci0jZW5kaWYKLQot
ICAgIHVuc2lnbmVkIGludCBtYXhTdXBwb3J0ZWRTYW1wbGVzID0gMDsKLSAgICB1bnNpZ25lZCBp
bnQgcnRGb3JtYXRDb3VudCA9IEFycmF5U2l6ZShSZW5kZXJUYXJnZXRGb3JtYXRzKTsKLSAgICB1
bnNpZ25lZCBpbnQgZHNGb3JtYXRDb3VudCA9IEFycmF5U2l6ZShEZXB0aFN0ZW5jaWxGb3JtYXRz
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHJ0Rm9ybWF0Q291bnQgKyBkc0Zv
cm1hdENvdW50OyArK2kpCi0gICAgewotICAgICAgICBEWEdJX0ZPUk1BVCBmb3JtYXQgPSAoaSA8
IHJ0Rm9ybWF0Q291bnQpID8gUmVuZGVyVGFyZ2V0Rm9ybWF0c1tpXSA6IERlcHRoU3RlbmNpbEZv
cm1hdHNbaSAtIHJ0Rm9ybWF0Q291bnRdOwotICAgICAgICBpZiAoZm9ybWF0ICE9IERYR0lfRk9S
TUFUX1VOS05PV04pCi0gICAgICAgIHsKLSAgICAgICAgICAgIFVJTlQgZm9ybWF0U3VwcG9ydDsK
LSAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNoZWNrRm9ybWF0U3VwcG9ydChmb3JtYXQs
ICZmb3JtYXRTdXBwb3J0KTsKLSAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSAmJiAo
Zm9ybWF0U3VwcG9ydCAmIEQzRDExX0ZPUk1BVF9TVVBQT1JUX01VTFRJU0FNUExFX1JFTkRFUlRB
UkdFVCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTXVsdGlzYW1wbGVTdXBwb3J0
SW5mbyBzdXBwb3J0SW5mbzsKLQotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGog
PSAxOyBqIDw9IEQzRDExX01BWF9NVUxUSVNBTVBMRV9TQU1QTEVfQ09VTlQ7IGorKykKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNoZWNr
TXVsdGlzYW1wbGVRdWFsaXR5TGV2ZWxzKGZvcm1hdCwgaiwgJnN1cHBvcnRJbmZvLnF1YWxpdHlM
ZXZlbHNbaiAtIDFdKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQp
ICYmIHN1cHBvcnRJbmZvLnF1YWxpdHlMZXZlbHNbaiAtIDFdID4gMCkKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbWF4U3VwcG9ydGVkU2FtcGxlcyA9IHN0
ZDo6bWF4KGosIG1heFN1cHBvcnRlZFNhbXBsZXMpOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgc3VwcG9ydEluZm8ucXVhbGl0eUxldmVsc1tqIC0gMV0gPSAwOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
bU11bHRpc2FtcGxlU3VwcG9ydE1hcC5pbnNlcnQoc3RkOjptYWtlX3BhaXIoZm9ybWF0LCBzdXBw
b3J0SW5mbykpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIG1NYXhTdXBw
b3J0ZWRTYW1wbGVzID0gbWF4U3VwcG9ydGVkU2FtcGxlczsKLQotICAgIGluaXRpYWxpemVEZXZp
Y2UoKTsKLQotICAgIC8vIEJHUkEgdGV4dHVyZSBzdXBwb3J0IGlzIG9wdGlvbmFsIGluIGZlYXR1
cmUgbGV2ZWxzIDEwIGFuZCAxMF8xCi0gICAgVUlOVCBmb3JtYXRTdXBwb3J0OwotICAgIHJlc3Vs
dCA9IG1EZXZpY2UtPkNoZWNrRm9ybWF0U3VwcG9ydChEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9S
TSwgJmZvcm1hdFN1cHBvcnQpOwotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAg
ICAgIEVSUigiRXJyb3IgY2hlY2tpbmcgQkdSQSBmb3JtYXQgc3VwcG9ydDogMHglMDhYIiwgcmVz
dWx0KTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgY29uc3QgaW50IGZsYWdzID0g
KEQzRDExX0ZPUk1BVF9TVVBQT1JUX1RFWFRVUkUyRCB8IEQzRDExX0ZPUk1BVF9TVVBQT1JUX1JF
TkRFUl9UQVJHRVQpOwotICAgICAgICBtQkdSQVRleHR1cmVTdXBwb3J0ID0gKGZvcm1hdFN1cHBv
cnQgJiBmbGFncykgPT0gZmxhZ3M7Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgZmxvYXRpbmcgcG9p
bnQgdGV4dHVyZSBzdXBwb3J0Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCByZXF1aXJl
ZFRleHR1cmVGbGFncyA9IEQzRDExX0ZPUk1BVF9TVVBQT1JUX1RFWFRVUkUyRCB8IEQzRDExX0ZP
Uk1BVF9TVVBQT1JUX1RFWFRVUkVDVUJFOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQg
cmVxdWlyZWRSZW5kZXJhYmxlRmxhZ3MgPSBEM0QxMV9GT1JNQVRfU1VQUE9SVF9SRU5ERVJfVEFS
R0VUOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcmVxdWlyZWRGaWx0ZXJGbGFncyA9
IEQzRDExX0ZPUk1BVF9TVVBQT1JUX1NIQURFUl9TQU1QTEU7Ci0KLSAgICBEWEdJX0ZPUk1BVCBm
bG9hdDE2Rm9ybWF0c1tdID0KLSAgICB7Ci0gICAgICAgIERYR0lfRk9STUFUX1IxNl9GTE9BVCwK
LSAgICAgICAgRFhHSV9GT1JNQVRfUjE2RzE2X0ZMT0FULAotICAgICAgICBEWEdJX0ZPUk1BVF9S
MTZHMTZCMTZBMTZfRkxPQVQsCi0gICAgfTsKLQotICAgIERYR0lfRk9STUFUIGZsb2F0MzJGb3Jt
YXRzW10gPQotICAgIHsKLSAgICAgICAgRFhHSV9GT1JNQVRfUjMyX0ZMT0FULAotICAgICAgICBE
WEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsCi0gICAgICAgIERYR0lfRk9STUFUX1IzMkczMkIzMkEz
Ml9GTE9BVCwKLSAgICB9OwotCi0gICAgbUZsb2F0MTZUZXh0dXJlU3VwcG9ydCA9IHRydWU7Ci0g
ICAgbUZsb2F0MTZGaWx0ZXJTdXBwb3J0ID0gdHJ1ZTsKLSAgICBtRmxvYXQxNlJlbmRlclN1cHBv
cnQgPSB0cnVlOwotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgQXJyYXlTaXplKGZs
b2F0MTZGb3JtYXRzKTsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKFNVQ0NFRURFRChtRGV2aWNl
LT5DaGVja0Zvcm1hdFN1cHBvcnQoZmxvYXQxNkZvcm1hdHNbaV0sICZmb3JtYXRTdXBwb3J0KSkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1GbG9hdDE2VGV4dHVyZVN1cHBvcnQgPSBtRmxvYXQx
NlRleHR1cmVTdXBwb3J0ICYmIChmb3JtYXRTdXBwb3J0ICYgcmVxdWlyZWRUZXh0dXJlRmxhZ3Mp
ID09IHJlcXVpcmVkVGV4dHVyZUZsYWdzOwotICAgICAgICAgICAgbUZsb2F0MTZGaWx0ZXJTdXBw
b3J0ID0gbUZsb2F0MTZGaWx0ZXJTdXBwb3J0ICYmIChmb3JtYXRTdXBwb3J0ICYgcmVxdWlyZWRG
aWx0ZXJGbGFncykgPT0gcmVxdWlyZWRGaWx0ZXJGbGFnczsKLSAgICAgICAgICAgIG1GbG9hdDE2
UmVuZGVyU3VwcG9ydCA9IG1GbG9hdDE2UmVuZGVyU3VwcG9ydCAmJiAoZm9ybWF0U3VwcG9ydCAm
IHJlcXVpcmVkUmVuZGVyYWJsZUZsYWdzKSA9PSByZXF1aXJlZFJlbmRlcmFibGVGbGFnczsKLSAg
ICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1GbG9hdDE2VGV4
dHVyZVN1cHBvcnQgPSBmYWxzZTsKLSAgICAgICAgICAgIG1GbG9hdDE2UmVuZGVyU3VwcG9ydCA9
IGZhbHNlOwotICAgICAgICAgICAgbUZsb2F0MTZGaWx0ZXJTdXBwb3J0ID0gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBtRmxvYXQzMlRleHR1cmVTdXBwb3J0ID0gdHJ1ZTsKLSAgICBt
RmxvYXQzMkZpbHRlclN1cHBvcnQgPSB0cnVlOwotICAgIG1GbG9hdDMyUmVuZGVyU3VwcG9ydCA9
IHRydWU7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUoZmxvYXQz
MkZvcm1hdHMpOyBpKyspCi0gICAgewotICAgICAgICBpZiAoU1VDQ0VFREVEKG1EZXZpY2UtPkNo
ZWNrRm9ybWF0U3VwcG9ydChmbG9hdDMyRm9ybWF0c1tpXSwgJmZvcm1hdFN1cHBvcnQpKSkKLSAg
ICAgICAgewotICAgICAgICAgICAgbUZsb2F0MzJUZXh0dXJlU3VwcG9ydCA9IG1GbG9hdDMyVGV4
dHVyZVN1cHBvcnQgJiYgKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZFRleHR1cmVGbGFncykgPT0g
cmVxdWlyZWRUZXh0dXJlRmxhZ3M7Ci0gICAgICAgICAgICBtRmxvYXQzMkZpbHRlclN1cHBvcnQg
PSBtRmxvYXQzMkZpbHRlclN1cHBvcnQgJiYgKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZEZpbHRl
ckZsYWdzKSA9PSByZXF1aXJlZEZpbHRlckZsYWdzOwotICAgICAgICAgICAgbUZsb2F0MzJSZW5k
ZXJTdXBwb3J0ID0gbUZsb2F0MzJSZW5kZXJTdXBwb3J0ICYmIChmb3JtYXRTdXBwb3J0ICYgcmVx
dWlyZWRSZW5kZXJhYmxlRmxhZ3MpID09IHJlcXVpcmVkUmVuZGVyYWJsZUZsYWdzOwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbUZsb2F0MzJUZXh0dXJl
U3VwcG9ydCA9IGZhbHNlOwotICAgICAgICAgICAgbUZsb2F0MzJGaWx0ZXJTdXBwb3J0ID0gZmFs
c2U7Ci0gICAgICAgICAgICBtRmxvYXQzMlJlbmRlclN1cHBvcnQgPSBmYWxzZTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIC8vIENoZWNrIGNvbXByZXNzZWQgdGV4dHVyZSBzdXBwb3J0Ci0gICAg
Y29uc3QgdW5zaWduZWQgaW50IHJlcXVpcmVkQ29tcHJlc3NlZFRleHR1cmVGbGFncyA9IEQzRDEx
X0ZPUk1BVF9TVVBQT1JUX1RFWFRVUkUyRDsKLQotICAgIGlmIChTVUNDRUVERUQobURldmljZS0+
Q2hlY2tGb3JtYXRTdXBwb3J0KERYR0lfRk9STUFUX0JDMV9VTk9STSwgJmZvcm1hdFN1cHBvcnQp
KSkKLSAgICB7Ci0gICAgICAgIG1EWFQxVGV4dHVyZVN1cHBvcnQgPSAoZm9ybWF0U3VwcG9ydCAm
IHJlcXVpcmVkQ29tcHJlc3NlZFRleHR1cmVGbGFncykgPT0gcmVxdWlyZWRDb21wcmVzc2VkVGV4
dHVyZUZsYWdzOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBtRFhUMVRleHR1cmVT
dXBwb3J0ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKFNVQ0NFRURFRChtRGV2aWNlLT5DaGVj
a0Zvcm1hdFN1cHBvcnQoRFhHSV9GT1JNQVRfQkMzX1VOT1JNLCAmZm9ybWF0U3VwcG9ydCkpKQot
ICAgIHsKLSAgICAgICAgbURYVDNUZXh0dXJlU3VwcG9ydCA9IChmb3JtYXRTdXBwb3J0ICYgcmVx
dWlyZWRDb21wcmVzc2VkVGV4dHVyZUZsYWdzKSA9PSByZXF1aXJlZENvbXByZXNzZWRUZXh0dXJl
RmxhZ3M7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG1EWFQzVGV4dHVyZVN1cHBv
cnQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoU1VDQ0VFREVEKG1EZXZpY2UtPkNoZWNrRm9y
bWF0U3VwcG9ydChEWEdJX0ZPUk1BVF9CQzVfVU5PUk0sICZmb3JtYXRTdXBwb3J0KSkpCi0gICAg
ewotICAgICAgICBtRFhUNVRleHR1cmVTdXBwb3J0ID0gKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJl
ZENvbXByZXNzZWRUZXh0dXJlRmxhZ3MpID09IHJlcXVpcmVkQ29tcHJlc3NlZFRleHR1cmVGbGFn
czsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgbURYVDVUZXh0dXJlU3VwcG9ydCA9
IGZhbHNlOwotICAgIH0KLQotICAgIC8vIENoZWNrIGRlcHRoIHRleHR1cmUgc3VwcG9ydAotICAg
IERYR0lfRk9STUFUIGRlcHRoVGV4dHVyZUZvcm1hdHNbXSA9Ci0gICAgewotICAgICAgICBEWEdJ
X0ZPUk1BVF9EMTZfVU5PUk0sCi0gICAgICAgIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5U
LAotICAgIH07Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHJlcXVpcmVkRGVwdGhU
ZXh0dXJlRmxhZ3MgPSBEM0QxMV9GT1JNQVRfU1VQUE9SVF9ERVBUSF9TVEVOQ0lMIHwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0Qx
MV9GT1JNQVRfU1VQUE9SVF9URVhUVVJFMkQ7Ci0KLSAgICBtRGVwdGhUZXh0dXJlU3VwcG9ydCA9
IHRydWU7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUoZGVwdGhU
ZXh0dXJlRm9ybWF0cyk7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmIChTVUNDRUVERUQobURldmlj
ZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KGRlcHRoVGV4dHVyZUZvcm1hdHNbaV0sICZmb3JtYXRTdXBw
b3J0KSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXB0aFRleHR1cmVTdXBwb3J0ID0gbURl
cHRoVGV4dHVyZVN1cHBvcnQgJiYgKChmb3JtYXRTdXBwb3J0ICYgcmVxdWlyZWREZXB0aFRleHR1
cmVGbGFncykgPT0gcmVxdWlyZWREZXB0aFRleHR1cmVGbGFncyk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGVwdGhUZXh0dXJlU3VwcG9ydCA9IGZh
bHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIEVHTF9TVUNDRVNTOwotfQotCi0v
LyBkbyBhbnkgb25lLXRpbWUgZGV2aWNlIGluaXRpYWxpemF0aW9uCi0vLyBOT1RFOiB0aGlzIGlz
IGFsc28gbmVlZGVkIGFmdGVyIGEgZGV2aWNlIGxvc3QvcmVzZXQKLS8vIHRvIHJlc2V0IHRoZSBz
Y2VuZSBzdGF0dXMgYW5kIGVuc3VyZSB0aGUgZGVmYXVsdCBzdGF0ZXMgYXJlIHJlc2V0Lgotdm9p
ZCBSZW5kZXJlcjExOjppbml0aWFsaXplRGV2aWNlKCkKLXsKLSAgICBtU3RhdGVDYWNoZS5pbml0
aWFsaXplKG1EZXZpY2UpOwotICAgIG1JbnB1dExheW91dENhY2hlLmluaXRpYWxpemUobURldmlj
ZSwgbURldmljZUNvbnRleHQpOwotCi0gICAgQVNTRVJUKCFtVmVydGV4RGF0YU1hbmFnZXIgJiYg
IW1JbmRleERhdGFNYW5hZ2VyKTsKLSAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBuZXcgVmVydGV4
RGF0YU1hbmFnZXIodGhpcyk7Ci0gICAgbUluZGV4RGF0YU1hbmFnZXIgPSBuZXcgSW5kZXhEYXRh
TWFuYWdlcih0aGlzKTsKLQotICAgIG1hcmtBbGxTdGF0ZURpcnR5KCk7Ci19Ci0KLWludCBSZW5k
ZXJlcjExOjpnZW5lcmF0ZUNvbmZpZ3MoQ29uZmlnRGVzYyAqKmNvbmZpZ0Rlc2NMaXN0KQotewot
ICAgIHVuc2lnbmVkIGludCBudW1SZW5kZXJGb3JtYXRzID0gQXJyYXlTaXplKFJlbmRlclRhcmdl
dEZvcm1hdHMpOwotICAgIHVuc2lnbmVkIGludCBudW1EZXB0aEZvcm1hdHMgPSBBcnJheVNpemUo
RGVwdGhTdGVuY2lsRm9ybWF0cyk7Ci0gICAgKCpjb25maWdEZXNjTGlzdCkgPSBuZXcgQ29uZmln
RGVzY1tudW1SZW5kZXJGb3JtYXRzICogbnVtRGVwdGhGb3JtYXRzXTsKLSAgICBpbnQgbnVtQ29u
ZmlncyA9IDA7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgZm9ybWF0SW5kZXggPSAwOyBm
b3JtYXRJbmRleCA8IG51bVJlbmRlckZvcm1hdHM7IGZvcm1hdEluZGV4KyspCi0gICAgewotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBkZXB0aFN0ZW5jaWxJbmRleCA9IDA7IGRlcHRoU3RlbmNp
bEluZGV4IDwgbnVtRGVwdGhGb3JtYXRzOyBkZXB0aFN0ZW5jaWxJbmRleCsrKQotICAgICAgICB7
Ci0gICAgICAgICAgICBEWEdJX0ZPUk1BVCByZW5kZXJUYXJnZXRGb3JtYXQgPSBSZW5kZXJUYXJn
ZXRGb3JtYXRzW2Zvcm1hdEluZGV4XTsKLQotICAgICAgICAgICAgVUlOVCBmb3JtYXRTdXBwb3J0
ID0gMDsKLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q2hlY2tGb3JtYXRT
dXBwb3J0KHJlbmRlclRhcmdldEZvcm1hdCwgJmZvcm1hdFN1cHBvcnQpOwotCi0gICAgICAgICAg
ICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkgJiYgKGZvcm1hdFN1cHBvcnQgJiBEM0QxMV9GT1JNQVRf
U1VQUE9SVF9SRU5ERVJfVEFSR0VUKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBE
WEdJX0ZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXQgPSBEZXB0aFN0ZW5jaWxGb3JtYXRzW2RlcHRo
U3RlbmNpbEluZGV4XTsKLQotICAgICAgICAgICAgICAgIGJvb2wgZGVwdGhTdGVuY2lsRm9ybWF0
T0sgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgaWYgKGRlcHRoU3RlbmNpbEZvcm1hdCAhPSBE
WEdJX0ZPUk1BVF9VTktOT1dOKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgVUlOVCBmb3JtYXRTdXBwb3J0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
bURldmljZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KGRlcHRoU3RlbmNpbEZvcm1hdCwgJmZvcm1hdFN1
cHBvcnQpOwotICAgICAgICAgICAgICAgICAgICBkZXB0aFN0ZW5jaWxGb3JtYXRPSyA9IFNVQ0NF
RURFRChyZXN1bHQpICYmIChmb3JtYXRTdXBwb3J0ICYgRDNEMTFfRk9STUFUX1NVUFBPUlRfREVQ
VEhfU1RFTkNJTCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGRl
cHRoU3RlbmNpbEZvcm1hdE9LKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgQ29uZmlnRGVzYyBuZXdDb25maWc7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5y
ZW5kZXJUYXJnZXRGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVydEJhY2tCdWZmZXJGb3JtYXQocmVu
ZGVyVGFyZ2V0Rm9ybWF0KTsKLSAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmRlcHRoU3Rl
bmNpbEZvcm1hdCA9IGQzZDExX2dsOjpDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KGRlcHRoU3Rl
bmNpbEZvcm1hdCk7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5tdWx0aVNhbXBsZSA9
IDA7ICAgICAvLyBGSVhNRTogZW51bWVyYXRlIG11bHRpLXNhbXBsaW5nCi0gICAgICAgICAgICAg
ICAgICAgIG5ld0NvbmZpZy5mYXN0Q29uZmlnID0gdHJ1ZTsgICAvLyBBc3N1bWUgYWxsIERYMTEg
Zm9ybWF0IGNvbnZlcnNpb25zIHRvIGJlIGZhc3QKLQotICAgICAgICAgICAgICAgICAgICAoKmNv
bmZpZ0Rlc2NMaXN0KVtudW1Db25maWdzKytdID0gbmV3Q29uZmlnOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBudW1Db25m
aWdzOwotfQotCi12b2lkIFJlbmRlcmVyMTE6OmRlbGV0ZUNvbmZpZ3MoQ29uZmlnRGVzYyAqY29u
ZmlnRGVzY0xpc3QpCi17Ci0gICAgZGVsZXRlIFtdIChjb25maWdEZXNjTGlzdCk7Ci19Ci0KLXZv
aWQgUmVuZGVyZXIxMTo6c3luYyhib29sIGJsb2NrKQotewotICAgIGlmIChibG9jaykKLSAgICB7
Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0OwotCi0gICAgICAgIGlmICghbVN5bmNRdWVyeSkKLSAg
ICAgICAgewotICAgICAgICAgICAgRDNEMTFfUVVFUllfREVTQyBxdWVyeURlc2M7Ci0gICAgICAg
ICAgICBxdWVyeURlc2MuUXVlcnkgPSBEM0QxMV9RVUVSWV9FVkVOVDsKLSAgICAgICAgICAgIHF1
ZXJ5RGVzYy5NaXNjRmxhZ3MgPSAwOwotCi0gICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5D
cmVhdGVRdWVyeSgmcXVlcnlEZXNjLCAmbVN5bmNRdWVyeSk7Ci0gICAgICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgbURldmljZUNvbnRleHQt
PkVuZChtU3luY1F1ZXJ5KTsKLSAgICAgICAgbURldmljZUNvbnRleHQtPkZsdXNoKCk7Ci0KLSAg
ICAgICAgZG8KLSAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZUNvbnRleHQt
PkdldERhdGEobVN5bmNRdWVyeSwgTlVMTCwgMCwgRDNEMTFfQVNZTkNfR0VUREFUQV9ET05PVEZM
VVNIKTsKLQotICAgICAgICAgICAgLy8gS2VlcCBwb2xsaW5nLCBidXQgYWxsb3cgb3RoZXIgdGhy
ZWFkcyB0byBkbyBzb21ldGhpbmcgdXNlZnVsIGZpcnN0Ci0gICAgICAgICAgICBTbGVlcCgwKTsK
LQotICAgICAgICAgICAgaWYgKHRlc3REZXZpY2VMb3N0KHRydWUpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICB3aGlsZSAocmVzdWx0ID09IFNfRkFMU0UpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAg
ICAgICBtRGV2aWNlQ29udGV4dC0+Rmx1c2goKTsKLSAgICB9Ci19Ci0KLVN3YXBDaGFpbiAqUmVu
ZGVyZXIxMTo6Y3JlYXRlU3dhcENoYWluKEhXTkQgd2luZG93LCBIQU5ETEUgc2hhcmVIYW5kbGUs
IEdMZW51bSBiYWNrQnVmZmVyRm9ybWF0LCBHTGVudW0gZGVwdGhCdWZmZXJGb3JtYXQpCi17Ci0g
ICAgcmV0dXJuIG5ldyByeDo6U3dhcENoYWluMTEodGhpcywgd2luZG93LCBzaGFyZUhhbmRsZSwg
YmFja0J1ZmZlckZvcm1hdCwgZGVwdGhCdWZmZXJGb3JtYXQpOwotfQotCi12b2lkIFJlbmRlcmVy
MTE6OnNldFNhbXBsZXJTdGF0ZShnbDo6U2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBjb25z
dCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gZ2w6
OlNBTVBMRVJfUElYRUwpCi0gICAgewotICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49
IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKLSAgICAgICAgewotICAgICAgICAgICAgRVJS
KCJQaXhlbCBzaGFkZXIgc2FtcGxlciBpbmRleCAlaSBpcyBub3QgdmFsaWQuIiwgaW5kZXgpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1Gb3JjZVNldFBp
eGVsU2FtcGxlclN0YXRlc1tpbmRleF0gfHwgbWVtY21wKCZzYW1wbGVyU3RhdGUsICZtQ3VyUGl4
ZWxTYW1wbGVyU3RhdGVzW2luZGV4XSwgc2l6ZW9mKGdsOjpTYW1wbGVyU3RhdGUpKSAhPSAwKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBJRDNEMTFTYW1wbGVyU3RhdGUgKmR4U2FtcGxlclN0YXRl
ID0gbVN0YXRlQ2FjaGUuZ2V0U2FtcGxlclN0YXRlKHNhbXBsZXJTdGF0ZSk7Ci0KLSAgICAgICAg
ICAgIGlmICghZHhTYW1wbGVyU3RhdGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
RVJSKCJOVUxMIHNhbXBsZXIgc3RhdGUgcmV0dXJuZWQgYnkgUmVuZGVyU3RhdGVDYWNoZTo6Z2V0
U2FtcGxlclN0YXRlLCBzZXR0aW5nIHRoZSBkZWZhdWx0IgotICAgICAgICAgICAgICAgICAgICAi
c2FtcGxlciBzdGF0ZSBmb3IgcGl4ZWwgc2hhZGVycyBhdCBzbG90ICVpLiIsIGluZGV4KTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgbURldmljZUNvbnRleHQtPlBTU2V0U2FtcGxlcnMo
aW5kZXgsIDEsICZkeFNhbXBsZXJTdGF0ZSk7Ci0KLSAgICAgICAgICAgIG1DdXJQaXhlbFNhbXBs
ZXJTdGF0ZXNbaW5kZXhdID0gc2FtcGxlclN0YXRlOwotICAgICAgICB9Ci0KLSAgICAgICAgbUZv
cmNlU2V0UGl4ZWxTYW1wbGVyU3RhdGVzW2luZGV4XSA9IGZhbHNlOwotICAgIH0KLSAgICBlbHNl
IGlmICh0eXBlID09IGdsOjpTQU1QTEVSX1ZFUlRFWCkKLSAgICB7Ci0gICAgICAgIGlmIChpbmRl
eCA8IDAgfHwgaW5kZXggPj0gKGludClnZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIlZlcnRleCBzaGFkZXIgc2FtcGxlciBpbmRleCAl
aSBpcyBub3QgdmFsaWQuIiwgaW5kZXgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKG1Gb3JjZVNldFZlcnRleFNhbXBsZXJTdGF0ZXNbaW5kZXhdIHx8IG1l
bWNtcCgmc2FtcGxlclN0YXRlLCAmbUN1clZlcnRleFNhbXBsZXJTdGF0ZXNbaW5kZXhdLCBzaXpl
b2YoZ2w6OlNhbXBsZXJTdGF0ZSkpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIElEM0Qx
MVNhbXBsZXJTdGF0ZSAqZHhTYW1wbGVyU3RhdGUgPSBtU3RhdGVDYWNoZS5nZXRTYW1wbGVyU3Rh
dGUoc2FtcGxlclN0YXRlKTsKLQotICAgICAgICAgICAgaWYgKCFkeFNhbXBsZXJTdGF0ZSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBFUlIoIk5VTEwgc2FtcGxlciBzdGF0ZSByZXR1
cm5lZCBieSBSZW5kZXJTdGF0ZUNhY2hlOjpnZXRTYW1wbGVyU3RhdGUsIHNldHRpbmcgdGhlIGRl
ZmF1bHQiCi0gICAgICAgICAgICAgICAgICAgICJzYW1wbGVyIHN0YXRlIGZvciB2ZXJ0ZXggc2hh
ZGVycyBhdCBzbG90ICVpLiIsIGluZGV4KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
bURldmljZUNvbnRleHQtPlZTU2V0U2FtcGxlcnMoaW5kZXgsIDEsICZkeFNhbXBsZXJTdGF0ZSk7
Ci0KLSAgICAgICAgICAgIG1DdXJWZXJ0ZXhTYW1wbGVyU3RhdGVzW2luZGV4XSA9IHNhbXBsZXJT
dGF0ZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1Gb3JjZVNldFZlcnRleFNhbXBsZXJTdGF0ZXNb
aW5kZXhdID0gZmFsc2U7Ci0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLX0KLQotdm9p
ZCBSZW5kZXJlcjExOjpzZXRUZXh0dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgs
IGdsOjpUZXh0dXJlICp0ZXh0dXJlKQotewotICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAq
dGV4dHVyZVNSViA9IE5VTEw7Ci0gICAgdW5zaWduZWQgaW50IHNlcmlhbCA9IDA7Ci0gICAgYm9v
bCBmb3JjZVNldFRleHR1cmUgPSBmYWxzZTsKLQotICAgIGlmICh0ZXh0dXJlKQotICAgIHsKLSAg
ICAgICAgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKnRleFN0b3JhZ2UgPSB0ZXh0dXJlLT5nZXRO
YXRpdmVUZXh0dXJlKCk7Ci0gICAgICAgIGlmICh0ZXhTdG9yYWdlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBUZXh0dXJlU3RvcmFnZTExICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFnZTExOjpt
YWtlVGV4dHVyZVN0b3JhZ2UxMSh0ZXhTdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0g
ICAgICAgICAgICB0ZXh0dXJlU1JWID0gc3RvcmFnZTExLT5nZXRTUlYoKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIElmIHdlIGdldCBOVUxMIGJhY2sgZnJvbSBnZXRTUlYgaGVyZSwgc29tZXRo
aW5nIHdlbnQgd3JvbmcgaW4gdGhlIHRleHR1cmUgY2xhc3MgYW5kIHdlJ3JlIHVuZXhwZWN0ZWRs
eQotICAgICAgICAvLyBtaXNzaW5nIHRoZSBzaGFkZXIgcmVzb3VyY2UgdmlldwotICAgICAgICBB
U1NFUlQodGV4dHVyZVNSViAhPSBOVUxMKTsKLQotICAgICAgICBzZXJpYWwgPSB0ZXh0dXJlLT5n
ZXRUZXh0dXJlU2VyaWFsKCk7Ci0gICAgICAgIGZvcmNlU2V0VGV4dHVyZSA9IHRleHR1cmUtPmhh
c0RpcnR5SW1hZ2VzKCk7Ci0gICAgfQotCi0gICAgaWYgKHR5cGUgPT0gZ2w6OlNBTVBMRVJfUElY
RUwpCi0gICAgewotICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGdsOjpNQVhfVEVY
VFVSRV9JTUFHRV9VTklUUykKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJQaXhlbCBzaGFk
ZXIgc2FtcGxlciBpbmRleCAlaSBpcyBub3QgdmFsaWQuIiwgaW5kZXgpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGZvcmNlU2V0VGV4dHVyZSB8fCBtQ3Vy
UGl4ZWxUZXh0dXJlU2VyaWFsc1tpbmRleF0gIT0gc2VyaWFsKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXJSZXNvdXJjZXMoaW5kZXgsIDEsICZ0ZXh0
dXJlU1JWKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1DdXJQaXhlbFRleHR1cmVTZXJpYWxzW2lu
ZGV4XSA9IHNlcmlhbDsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBnbDo6U0FNUExFUl9W
RVJURVgpCi0gICAgewotICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IChpbnQpZ2V0
TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJS
KCJWZXJ0ZXggc2hhZGVyIHNhbXBsZXIgaW5kZXggJWkgaXMgbm90IHZhbGlkLiIsIGluZGV4KTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChmb3JjZVNldFRl
eHR1cmUgfHwgbUN1clZlcnRleFRleHR1cmVTZXJpYWxzW2luZGV4XSAhPSBzZXJpYWwpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5WU1NldFNoYWRlclJlc291cmNlcyhp
bmRleCwgMSwgJnRleHR1cmVTUlYpOwotICAgICAgICB9Ci0KLSAgICAgICAgbUN1clZlcnRleFRl
eHR1cmVTZXJpYWxzW2luZGV4XSA9IHNlcmlhbDsKLSAgICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJM
RSgpOwotfQotCi12b2lkIFJlbmRlcmVyMTE6OnNldFJhc3Rlcml6ZXJTdGF0ZShjb25zdCBnbDo6
UmFzdGVyaXplclN0YXRlICZyYXN0ZXJTdGF0ZSkKLXsKLSAgICBpZiAobUZvcmNlU2V0UmFzdGVy
U3RhdGUgfHwgbWVtY21wKCZyYXN0ZXJTdGF0ZSwgJm1DdXJSYXN0ZXJTdGF0ZSwgc2l6ZW9mKGds
OjpSYXN0ZXJpemVyU3RhdGUpKSAhPSAwKQotICAgIHsKLSAgICAgICAgSUQzRDExUmFzdGVyaXpl
clN0YXRlICpkeFJhc3RlclN0YXRlID0gbVN0YXRlQ2FjaGUuZ2V0UmFzdGVyaXplclN0YXRlKHJh
c3RlclN0YXRlLCBtU2Npc3NvckVuYWJsZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ3VyRGVw
dGhTaXplKTsKLSAgICAgICAgaWYgKCFkeFJhc3RlclN0YXRlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBFUlIoIk5VTEwgcmFzdGVyaXplciBzdGF0ZSByZXR1cm5lZCBieSBSZW5kZXJTdGF0ZUNh
Y2hlOjpnZXRSYXN0ZXJpemVyU3RhdGUsIHNldHRpbmcgdGhlIGRlZmF1bHQiCi0gICAgICAgICAg
ICAgICAgInJhc3Rlcml6ZXIgc3RhdGUuIik7Ci0gICAgICAgIH0KLQotICAgICAgICBtRGV2aWNl
Q29udGV4dC0+UlNTZXRTdGF0ZShkeFJhc3RlclN0YXRlKTsKLQotICAgICAgICBtQ3VyUmFzdGVy
U3RhdGUgPSByYXN0ZXJTdGF0ZTsKLSAgICB9Ci0KLSAgICBtRm9yY2VTZXRSYXN0ZXJTdGF0ZSA9
IGZhbHNlOwotfQotCi12b2lkIFJlbmRlcmVyMTE6OnNldEJsZW5kU3RhdGUoY29uc3QgZ2w6OkJs
ZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xvciAmYmxlbmRDb2xvciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlTWFzaykKLXsKLSAg
ICBpZiAobUZvcmNlU2V0QmxlbmRTdGF0ZSB8fAotICAgICAgICBtZW1jbXAoJmJsZW5kU3RhdGUs
ICZtQ3VyQmxlbmRTdGF0ZSwgc2l6ZW9mKGdsOjpCbGVuZFN0YXRlKSkgIT0gMCB8fAotICAgICAg
ICBtZW1jbXAoJmJsZW5kQ29sb3IsICZtQ3VyQmxlbmRDb2xvciwgc2l6ZW9mKGdsOjpDb2xvcikp
ICE9IDAgfHwKLSAgICAgICAgc2FtcGxlTWFzayAhPSBtQ3VyU2FtcGxlTWFzaykKLSAgICB7Ci0g
ICAgICAgIElEM0QxMUJsZW5kU3RhdGUgKmR4QmxlbmRTdGF0ZSA9IG1TdGF0ZUNhY2hlLmdldEJs
ZW5kU3RhdGUoYmxlbmRTdGF0ZSk7Ci0gICAgICAgIGlmICghZHhCbGVuZFN0YXRlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBFUlIoIk5VTEwgYmxlbmQgc3RhdGUgcmV0dXJuZWQgYnkgUmVuZGVy
U3RhdGVDYWNoZTo6Z2V0QmxlbmRTdGF0ZSwgc2V0dGluZyB0aGUgZGVmYXVsdCAiCi0gICAgICAg
ICAgICAgICAgImJsZW5kIHN0YXRlLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgZmxvYXQgYmxl
bmRDb2xvcnNbNF0gPSB7MC4wZn07Ci0gICAgICAgIGlmIChibGVuZFN0YXRlLnNvdXJjZUJsZW5k
UkdCICE9IEdMX0NPTlNUQU5UX0FMUEhBICYmIGJsZW5kU3RhdGUuc291cmNlQmxlbmRSR0IgIT0g
R0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBICYmCi0gICAgICAgICAgICBibGVuZFN0YXRlLmRl
c3RCbGVuZFJHQiAhPSBHTF9DT05TVEFOVF9BTFBIQSAmJiBibGVuZFN0YXRlLmRlc3RCbGVuZFJH
QiAhPSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGJsZW5kQ29sb3JzWzBdID0gYmxlbmRDb2xvci5yZWQ7Ci0gICAgICAgICAgICBibGVuZENvbG9y
c1sxXSA9IGJsZW5kQ29sb3IuZ3JlZW47Ci0gICAgICAgICAgICBibGVuZENvbG9yc1syXSA9IGJs
ZW5kQ29sb3IuYmx1ZTsKLSAgICAgICAgICAgIGJsZW5kQ29sb3JzWzNdID0gYmxlbmRDb2xvci5h
bHBoYTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJs
ZW5kQ29sb3JzWzBdID0gYmxlbmRDb2xvci5hbHBoYTsKLSAgICAgICAgICAgIGJsZW5kQ29sb3Jz
WzFdID0gYmxlbmRDb2xvci5hbHBoYTsKLSAgICAgICAgICAgIGJsZW5kQ29sb3JzWzJdID0gYmxl
bmRDb2xvci5hbHBoYTsKLSAgICAgICAgICAgIGJsZW5kQ29sb3JzWzNdID0gYmxlbmRDb2xvci5h
bHBoYTsKLSAgICAgICAgfQotCi0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldEJsZW5kU3Rh
dGUoZHhCbGVuZFN0YXRlLCBibGVuZENvbG9ycywgc2FtcGxlTWFzayk7Ci0KLSAgICAgICAgbUN1
ckJsZW5kU3RhdGUgPSBibGVuZFN0YXRlOwotICAgICAgICBtQ3VyQmxlbmRDb2xvciA9IGJsZW5k
Q29sb3I7Ci0gICAgICAgIG1DdXJTYW1wbGVNYXNrID0gc2FtcGxlTWFzazsKLSAgICB9Ci0KLSAg
ICBtRm9yY2VTZXRCbGVuZFN0YXRlID0gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyZXIxMTo6c2V0
RGVwdGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZkZXB0aFN0ZW5j
aWxTdGF0ZSwgaW50IHN0ZW5jaWxSZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBzdGVuY2lsQmFja1JlZiwgYm9vbCBmcm9udEZhY2VDQ1cpCi17Ci0gICAgaWYg
KG1Gb3JjZVNldERlcHRoU3RlbmNpbFN0YXRlIHx8Ci0gICAgICAgIG1lbWNtcCgmZGVwdGhTdGVu
Y2lsU3RhdGUsICZtQ3VyRGVwdGhTdGVuY2lsU3RhdGUsIHNpemVvZihnbDo6RGVwdGhTdGVuY2ls
U3RhdGUpKSAhPSAwIHx8Ci0gICAgICAgIHN0ZW5jaWxSZWYgIT0gbUN1clN0ZW5jaWxSZWYgfHwg
c3RlbmNpbEJhY2tSZWYgIT0gbUN1clN0ZW5jaWxCYWNrUmVmKQotICAgIHsKLSAgICAgICAgaWYg
KGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sgIT0gZGVwdGhTdGVuY2lsU3RhdGUu
c3RlbmNpbEJhY2tXcml0ZW1hc2sgfHwKLSAgICAgICAgICAgIHN0ZW5jaWxSZWYgIT0gc3RlbmNp
bEJhY2tSZWYgfHwKLSAgICAgICAgICAgIGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxNYXNrICE9
IGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxCYWNrTWFzaykKLSAgICAgICAgewotICAgICAgICAg
ICAgRVJSKCJTZXBhcmF0ZSBmcm9udC9iYWNrIHN0ZW5jaWwgd3JpdGVtYXNrcywgcmVmZXJlbmNl
IHZhbHVlcywgb3Igc3RlbmNpbCBtYXNrIHZhbHVlcyBhcmUgIgotICAgICAgICAgICAgICAgICJp
bnZhbGlkIHVuZGVyIFdlYkdMLiIpOwotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLQotICAgICAgICBJRDNEMTFEZXB0aFN0ZW5j
aWxTdGF0ZSAqZHhEZXB0aFN0ZW5jaWxTdGF0ZSA9IG1TdGF0ZUNhY2hlLmdldERlcHRoU3RlbmNp
bFN0YXRlKGRlcHRoU3RlbmNpbFN0YXRlKTsKLSAgICAgICAgaWYgKCFkeERlcHRoU3RlbmNpbFN0
YXRlKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIk5VTEwgZGVwdGggc3RlbmNpbCBzdGF0
ZSByZXR1cm5lZCBieSBSZW5kZXJTdGF0ZUNhY2hlOjpnZXREZXB0aFN0ZW5jaWxTdGF0ZSwgIgot
ICAgICAgICAgICAgICAgICJzZXR0aW5nIHRoZSBkZWZhdWx0IGRlcHRoIHN0ZW5jaWwgc3RhdGUu
Iik7Ci0gICAgICAgIH0KLQotICAgICAgICBtRGV2aWNlQ29udGV4dC0+T01TZXREZXB0aFN0ZW5j
aWxTdGF0ZShkeERlcHRoU3RlbmNpbFN0YXRlLCBzdGF0aWNfY2FzdDxVSU5UPihzdGVuY2lsUmVm
KSk7Ci0KLSAgICAgICAgbUN1ckRlcHRoU3RlbmNpbFN0YXRlID0gZGVwdGhTdGVuY2lsU3RhdGU7
Ci0gICAgICAgIG1DdXJTdGVuY2lsUmVmID0gc3RlbmNpbFJlZjsKLSAgICAgICAgbUN1clN0ZW5j
aWxCYWNrUmVmID0gc3RlbmNpbEJhY2tSZWY7Ci0gICAgfQotCi0gICAgbUZvcmNlU2V0RGVwdGhT
dGVuY2lsU3RhdGUgPSBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJlcjExOjpzZXRTY2lzc29yUmVj
dGFuZ2xlKGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNjaXNzb3IsIGJvb2wgZW5hYmxlZCkKLXsKLSAg
ICBpZiAobUZvcmNlU2V0U2Npc3NvciB8fCBtZW1jbXAoJnNjaXNzb3IsICZtQ3VyU2Npc3Nvciwg
c2l6ZW9mKGdsOjpSZWN0YW5nbGUpKSAhPSAwIHx8Ci0gICAgICAgIGVuYWJsZWQgIT0gbVNjaXNz
b3JFbmFibGVkKQotICAgIHsKLSAgICAgICAgaWYgKGVuYWJsZWQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEQzRDExX1JFQ1QgcmVjdDsKLSAgICAgICAgICAgIHJlY3QubGVmdCA9IHN0ZDo6bWF4
KDAsIHNjaXNzb3IueCk7Ci0gICAgICAgICAgICByZWN0LnRvcCA9IHN0ZDo6bWF4KDAsIHNjaXNz
b3IueSk7Ci0gICAgICAgICAgICByZWN0LnJpZ2h0ID0gc2Npc3Nvci54ICsgc3RkOjptYXgoMCwg
c2Npc3Nvci53aWR0aCk7Ci0gICAgICAgICAgICByZWN0LmJvdHRvbSA9IHNjaXNzb3IueSArIHN0
ZDo6bWF4KDAsIHNjaXNzb3IuaGVpZ2h0KTsKLQotICAgICAgICAgICAgbURldmljZUNvbnRleHQt
PlJTU2V0U2Npc3NvclJlY3RzKDEsICZyZWN0KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChl
bmFibGVkICE9IG1TY2lzc29yRW5hYmxlZCkKLSAgICAgICAgewotICAgICAgICAgICAgbUZvcmNl
U2V0UmFzdGVyU3RhdGUgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgbUN1clNjaXNzb3Ig
PSBzY2lzc29yOwotICAgICAgICBtU2Npc3NvckVuYWJsZWQgPSBlbmFibGVkOwotICAgIH0KLQot
ICAgIG1Gb3JjZVNldFNjaXNzb3IgPSBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJlcjExOjpzZXRW
aWV3cG9ydChjb25zdCBnbDo6UmVjdGFuZ2xlICZ2aWV3cG9ydCwgZmxvYXQgek5lYXIsIGZsb2F0
IHpGYXIsIEdMZW51bSBkcmF3TW9kZSwgR0xlbnVtIGZyb250RmFjZSwgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgaWdub3JlVmlld3BvcnQpCi17Ci0gICAgZ2w6OlJlY3Rhbmds
ZSBhY3R1YWxWaWV3cG9ydCA9IHZpZXdwb3J0OwotICAgIGZsb2F0IGFjdHVhbFpOZWFyID0gZ2w6
OmNsYW1wMDEoek5lYXIpOwotICAgIGZsb2F0IGFjdHVhbFpGYXIgPSBnbDo6Y2xhbXAwMSh6RmFy
KTsKLSAgICBpZiAoaWdub3JlVmlld3BvcnQpCi0gICAgewotICAgICAgICBhY3R1YWxWaWV3cG9y
dC54ID0gMDsKLSAgICAgICAgYWN0dWFsVmlld3BvcnQueSA9IDA7Ci0gICAgICAgIGFjdHVhbFZp
ZXdwb3J0LndpZHRoID0gbVJlbmRlclRhcmdldERlc2Mud2lkdGg7Ci0gICAgICAgIGFjdHVhbFZp
ZXdwb3J0LmhlaWdodCA9IG1SZW5kZXJUYXJnZXREZXNjLmhlaWdodDsKLSAgICAgICAgYWN0dWFs
Wk5lYXIgPSAwLjBmOwotICAgICAgICBhY3R1YWxaRmFyID0gMS4wZjsKLSAgICB9Ci0KLSAgICAv
LyBHZXQgRDNEIHZpZXdwb3J0IGJvdW5kcywgd2hpY2ggZGVwZW5kcyBvbiB0aGUgZmVhdHVyZSBs
ZXZlbAotICAgIGNvbnN0IFJhbmdlJiB2aWV3cG9ydEJvdW5kcyA9IGdldFZpZXdwb3J0Qm91bmRz
KCk7Ci0KLSAgICAvLyBDbGFtcCB3aWR0aCBhbmQgaGVpZ2h0IGZpcnN0IHRvIHRoZSBnbCBtYXhp
bXVtLCB0aGVuIGNsYW1wIGZ1cnRoZXIgaWYgd2UgZXh0ZW5kIHBhc3QgdGhlIEQzRCBtYXhpbXVt
IGJvdW5kcwotICAgIEQzRDExX1ZJRVdQT1JUIGR4Vmlld3BvcnQ7Ci0gICAgZHhWaWV3cG9ydC5U
b3BMZWZ0WCA9IGdsOjpjbGFtcChhY3R1YWxWaWV3cG9ydC54LCB2aWV3cG9ydEJvdW5kcy5zdGFy
dCwgdmlld3BvcnRCb3VuZHMuZW5kKTsKLSAgICBkeFZpZXdwb3J0LlRvcExlZnRZID0gZ2w6OmNs
YW1wKGFjdHVhbFZpZXdwb3J0LnksIHZpZXdwb3J0Qm91bmRzLnN0YXJ0LCB2aWV3cG9ydEJvdW5k
cy5lbmQpOwotICAgIGR4Vmlld3BvcnQuV2lkdGggPSBnbDo6Y2xhbXAoYWN0dWFsVmlld3BvcnQu
d2lkdGgsIDAsIGdldE1heFZpZXdwb3J0RGltZW5zaW9uKCkpOwotICAgIGR4Vmlld3BvcnQuSGVp
Z2h0ID0gZ2w6OmNsYW1wKGFjdHVhbFZpZXdwb3J0LmhlaWdodCwgMCwgZ2V0TWF4Vmlld3BvcnRE
aW1lbnNpb24oKSk7Ci0gICAgZHhWaWV3cG9ydC5XaWR0aCA9IHN0ZDo6bWluKChpbnQpZHhWaWV3
cG9ydC5XaWR0aCwgdmlld3BvcnRCb3VuZHMuZW5kIC0gc3RhdGljX2Nhc3Q8aW50PihkeFZpZXdw
b3J0LlRvcExlZnRYKSk7Ci0gICAgZHhWaWV3cG9ydC5IZWlnaHQgPSBzdGQ6Om1pbigoaW50KWR4
Vmlld3BvcnQuSGVpZ2h0LCB2aWV3cG9ydEJvdW5kcy5lbmQgLSBzdGF0aWNfY2FzdDxpbnQ+KGR4
Vmlld3BvcnQuVG9wTGVmdFkpKTsKLSAgICBkeFZpZXdwb3J0Lk1pbkRlcHRoID0gYWN0dWFsWk5l
YXI7Ci0gICAgZHhWaWV3cG9ydC5NYXhEZXB0aCA9IGFjdHVhbFpGYXI7Ci0KLSAgICBpZiAoZHhW
aWV3cG9ydC5XaWR0aCA8PSAwIHx8IGR4Vmlld3BvcnQuSGVpZ2h0IDw9IDApCi0gICAgewotICAg
ICAgICByZXR1cm4gZmFsc2U7ICAgLy8gTm90aGluZyB0byByZW5kZXIKLSAgICB9Ci0KLSAgICBi
b29sIHZpZXdwb3J0Q2hhbmdlZCA9IG1Gb3JjZVNldFZpZXdwb3J0IHx8IG1lbWNtcCgmYWN0dWFs
Vmlld3BvcnQsICZtQ3VyVmlld3BvcnQsIHNpemVvZihnbDo6UmVjdGFuZ2xlKSkgIT0gMCB8fAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsWk5lYXIgIT0gbUN1ck5lYXIgfHwgYWN0
dWFsWkZhciAhPSBtQ3VyRmFyOwotCi0gICAgaWYgKHZpZXdwb3J0Q2hhbmdlZCkKLSAgICB7Ci0g
ICAgICAgIG1EZXZpY2VDb250ZXh0LT5SU1NldFZpZXdwb3J0cygxLCAmZHhWaWV3cG9ydCk7Ci0K
LSAgICAgICAgbUN1clZpZXdwb3J0ID0gYWN0dWFsVmlld3BvcnQ7Ci0gICAgICAgIG1DdXJOZWFy
ID0gYWN0dWFsWk5lYXI7Ci0gICAgICAgIG1DdXJGYXIgPSBhY3R1YWxaRmFyOwotCi0gICAgICAg
IG1QaXhlbENvbnN0YW50cy52aWV3Q29vcmRzWzBdID0gYWN0dWFsVmlld3BvcnQud2lkdGggICog
MC41ZjsKLSAgICAgICAgbVBpeGVsQ29uc3RhbnRzLnZpZXdDb29yZHNbMV0gPSBhY3R1YWxWaWV3
cG9ydC5oZWlnaHQgKiAwLjVmOwotICAgICAgICBtUGl4ZWxDb25zdGFudHMudmlld0Nvb3Jkc1sy
XSA9IGFjdHVhbFZpZXdwb3J0LnggKyAoYWN0dWFsVmlld3BvcnQud2lkdGggICogMC41Zik7Ci0g
ICAgICAgIG1QaXhlbENvbnN0YW50cy52aWV3Q29vcmRzWzNdID0gYWN0dWFsVmlld3BvcnQueSAr
IChhY3R1YWxWaWV3cG9ydC5oZWlnaHQgKiAwLjVmKTsKLQotICAgICAgICBtUGl4ZWxDb25zdGFu
dHMuZGVwdGhGcm9udFswXSA9IChhY3R1YWxaRmFyIC0gYWN0dWFsWk5lYXIpICogMC41ZjsKLSAg
ICAgICAgbVBpeGVsQ29uc3RhbnRzLmRlcHRoRnJvbnRbMV0gPSAoYWN0dWFsWk5lYXIgKyBhY3R1
YWxaRmFyKSAqIDAuNWY7Ci0KLSAgICAgICAgbVZlcnRleENvbnN0YW50cy5kZXB0aFJhbmdlWzBd
ID0gYWN0dWFsWk5lYXI7Ci0gICAgICAgIG1WZXJ0ZXhDb25zdGFudHMuZGVwdGhSYW5nZVsxXSA9
IGFjdHVhbFpGYXI7Ci0gICAgICAgIG1WZXJ0ZXhDb25zdGFudHMuZGVwdGhSYW5nZVsyXSA9IGFj
dHVhbFpGYXIgLSBhY3R1YWxaTmVhcjsKLQotICAgICAgICBtUGl4ZWxDb25zdGFudHMuZGVwdGhS
YW5nZVswXSA9IGFjdHVhbFpOZWFyOwotICAgICAgICBtUGl4ZWxDb25zdGFudHMuZGVwdGhSYW5n
ZVsxXSA9IGFjdHVhbFpGYXI7Ci0gICAgICAgIG1QaXhlbENvbnN0YW50cy5kZXB0aFJhbmdlWzJd
ID0gYWN0dWFsWkZhciAtIGFjdHVhbFpOZWFyOwotICAgIH0KLQotICAgIG1Gb3JjZVNldFZpZXdw
b3J0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUmVuZGVyZXIxMTo6YXBw
bHlQcmltaXRpdmVUeXBlKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50KQotewotICAgIEQzRDEx
X1BSSU1JVElWRV9UT1BPTE9HWSBwcmltaXRpdmVUb3BvbG9neSA9IEQzRF9QUklNSVRJVkVfVE9Q
T0xPR1lfVU5ERUZJTkVEOwotCi0gICAgR0xzaXplaSBtaW5Db3VudCA9IDA7Ci0KLSAgICBzd2l0
Y2ggKG1vZGUpCi0gICAgewotICAgICAgY2FzZSBHTF9QT0lOVFM6ICAgICAgICAgcHJpbWl0aXZl
VG9wb2xvZ3kgPSBEM0QxMV9QUklNSVRJVkVfVE9QT0xPR1lfUE9JTlRMSVNUOyAgIG1pbkNvdW50
ID0gMTsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xJTkVTOiAgICAgICAgICBwcmltaXRpdmVUb3Bv
bG9neSA9IEQzRF9QUklNSVRJVkVfVE9QT0xPR1lfTElORUxJU1Q7ICAgICAgbWluQ291bnQgPSAy
OyBicmVhazsKLSAgICAgIGNhc2UgR0xfTElORV9MT09QOiAgICAgIHByaW1pdGl2ZVRvcG9sb2d5
ID0gRDNEX1BSSU1JVElWRV9UT1BPTE9HWV9MSU5FU1RSSVA7ICAgICBtaW5Db3VudCA9IDI7IGJy
ZWFrOwotICAgICAgY2FzZSBHTF9MSU5FX1NUUklQOiAgICAgcHJpbWl0aXZlVG9wb2xvZ3kgPSBE
M0RfUFJJTUlUSVZFX1RPUE9MT0dZX0xJTkVTVFJJUDsgICAgIG1pbkNvdW50ID0gMjsgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX1RSSUFOR0xFUzogICAgICBwcmltaXRpdmVUb3BvbG9neSA9IEQzRF9Q
UklNSVRJVkVfVE9QT0xPR1lfVFJJQU5HTEVMSVNUOyAgbWluQ291bnQgPSAzOyBicmVhazsKLSAg
ICAgIGNhc2UgR0xfVFJJQU5HTEVfU1RSSVA6IHByaW1pdGl2ZVRvcG9sb2d5ID0gRDNEX1BSSU1J
VElWRV9UT1BPTE9HWV9UUklBTkdMRVNUUklQOyBtaW5Db3VudCA9IDM7IGJyZWFrOwotICAgICAg
ICAgIC8vIGVtdWxhdGUgZmFucyB2aWEgcmV3cml0aW5nIGluZGV4IGJ1ZmZlcgotICAgICAgY2Fz
ZSBHTF9UUklBTkdMRV9GQU46ICAgcHJpbWl0aXZlVG9wb2xvZ3kgPSBEM0RfUFJJTUlUSVZFX1RP
UE9MT0dZX1RSSUFOR0xFTElTVDsgIG1pbkNvdW50ID0gMzsgYnJlYWs7Ci0gICAgICBkZWZhdWx0
OgotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgZmFsc2UpOwotICAg
IH0KLQotICAgIGlmIChwcmltaXRpdmVUb3BvbG9neSAhPSBtQ3VycmVudFByaW1pdGl2ZVRvcG9s
b2d5KQotICAgIHsKLSAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0UHJpbWl0aXZlVG9wb2xv
Z3kocHJpbWl0aXZlVG9wb2xvZ3kpOwotICAgICAgICBtQ3VycmVudFByaW1pdGl2ZVRvcG9sb2d5
ID0gcHJpbWl0aXZlVG9wb2xvZ3k7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvdW50ID49IG1pbkNv
dW50OwotfQotCi1ib29sIFJlbmRlcmVyMTE6OmFwcGx5UmVuZGVyVGFyZ2V0KGdsOjpGcmFtZWJ1
ZmZlciAqZnJhbWVidWZmZXIpCi17Ci0gICAgLy8gR2V0IHRoZSBjb2xvciByZW5kZXIgYnVmZmVy
IGFuZCBzZXJpYWwKLSAgICAvLyBBbHNvIGV4dHJhY3QgdGhlIHJlbmRlciB0YXJnZXQgZGltZW5z
aW9ucyBhbmQgdmlldwotICAgIHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRXaWR0aCA9IDA7Ci0g
ICAgdW5zaWduZWQgaW50IHJlbmRlclRhcmdldEhlaWdodCA9IDA7Ci0gICAgR0xlbnVtIHJlbmRl
clRhcmdldEZvcm1hdCA9IDA7Ci0gICAgdW5zaWduZWQgaW50IHJlbmRlclRhcmdldFNlcmlhbHNb
Z2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlNdID0gezB9OwotICAgIElEM0QxMVJl
bmRlclRhcmdldFZpZXcqIGZyYW1lYnVmZmVyUlRWc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0RS
QVdfQlVGRkVSU10gPSB7TlVMTH07Ci0gICAgYm9vbCBtaXNzaW5nQ29sb3JSZW5kZXJUYXJnZXQg
PSB0cnVlOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gMDsgY29s
b3JBdHRhY2htZW50IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IGNvbG9y
QXR0YWNobWVudCsrKQotICAgIHsKLSAgICAgICAgY29uc3QgR0xlbnVtIGRyYXdCdWZmZXJTdGF0
ZSA9IGZyYW1lYnVmZmVyLT5nZXREcmF3QnVmZmVyU3RhdGUoY29sb3JBdHRhY2htZW50KTsKLQot
ICAgICAgICBpZiAoZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlwZShjb2xvckF0dGFjaG1l
bnQpICE9IEdMX05PTkUgJiYgZHJhd0J1ZmZlclN0YXRlICE9IEdMX05PTkUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIC8vIHRoZSBkcmF3IGJ1ZmZlciBtdXN0IGJlIGVpdGhlciAibm9uZSIsICJi
YWNrIiBmb3IgdGhlIGRlZmF1bHQgYnVmZmVyIG9yIHRoZSBzYW1lIGluZGV4IGFzIHRoaXMgY29s
b3IgKGluIG9yZGVyKQotICAgICAgICAgICAgQVNTRVJUKGRyYXdCdWZmZXJTdGF0ZSA9PSBHTF9C
QUNLIHx8IGRyYXdCdWZmZXJTdGF0ZSA9PSAoR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUICsgY29s
b3JBdHRhY2htZW50KSk7Ci0KLSAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVm
ZmVyID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKGNvbG9yQXR0YWNobWVudCk7Ci0KLSAg
ICAgICAgICAgIGlmICghY29sb3JidWZmZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAv
LyBjaGVjayBmb3IgemVyby1zaXplZCBkZWZhdWx0IGZyYW1lYnVmZmVyLCB3aGljaCBpcyBhIHNw
ZWNpYWwgY2FzZS4KLSAgICAgICAgICAgIC8vIGluIHRoaXMgY2FzZSB3ZSBkbyBub3Qgd2lzaCB0
byBtb2RpZnkgYW55IHN0YXRlIGFuZCBqdXN0IHNpbGVudGx5IHJldHVybiBmYWxzZS4KLSAgICAg
ICAgICAgIC8vIHRoaXMgd2lsbCBub3QgcmVwb3J0IGFueSBnbCBlcnJvciBidXQgd2lsbCBjYXVz
ZSB0aGUgY2FsbGluZyBtZXRob2QgdG8gcmV0dXJuLgotICAgICAgICAgICAgaWYgKGNvbG9yYnVm
ZmVyLT5nZXRXaWR0aCgpID09IDAgfHwgY29sb3JidWZmZXItPmdldEhlaWdodCgpID09IDApCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICByZW5kZXJUYXJnZXRTZXJpYWxzW2NvbG9yQXR0YWNobWVudF0gPSBj
b2xvcmJ1ZmZlci0+Z2V0U2VyaWFsKCk7Ci0KLSAgICAgICAgICAgIC8vIEV4dHJhY3QgdGhlIHJl
bmRlciB0YXJnZXQgZGltZW5zaW9ucyBhbmQgdmlldwotICAgICAgICAgICAgUmVuZGVyVGFyZ2V0
MTEgKnJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoY29s
b3JidWZmZXItPmdldFJlbmRlclRhcmdldCgpKTsKLSAgICAgICAgICAgIGlmICghcmVuZGVyVGFy
Z2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigicmVuZGVyIHRhcmdldCBw
b2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZnJhbWVidWZmZXJSVFZzW2NvbG9yQXR0
YWNobWVudF0gPSByZW5kZXJUYXJnZXQtPmdldFJlbmRlclRhcmdldFZpZXcoKTsKLSAgICAgICAg
ICAgIGlmICghZnJhbWVidWZmZXJSVFZzW2NvbG9yQXR0YWNobWVudF0pCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHZpZXcgcG9pbnRlciB1bmV4cGVj
dGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlmIChtaXNzaW5nQ29sb3JSZW5kZXJUYXJnZXQpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcmVuZGVyVGFyZ2V0V2lkdGggPSBjb2xvcmJ1ZmZlci0+
Z2V0V2lkdGgoKTsKLSAgICAgICAgICAgICAgICByZW5kZXJUYXJnZXRIZWlnaHQgPSBjb2xvcmJ1
ZmZlci0+Z2V0SGVpZ2h0KCk7Ci0gICAgICAgICAgICAgICAgcmVuZGVyVGFyZ2V0Rm9ybWF0ID0g
Y29sb3JidWZmZXItPmdldEFjdHVhbEZvcm1hdCgpOwotICAgICAgICAgICAgICAgIG1pc3NpbmdD
b2xvclJlbmRlclRhcmdldCA9IGZhbHNlOwotICAgICAgICAgICAgfQotCi0jaWZkZWYgX0RFQlVH
Ci0gICAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBEZWJ1ZyBTRVRTSEFERVJSRVNPVVJDRVNf
SEFaQVJEIEQzRDExIHdhcm5pbmdzCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB2ZXJ0
ZXhTZXJpYWxJbmRleCA9IDA7IHZlcnRleFNlcmlhbEluZGV4IDwgZ2w6OklNUExFTUVOVEFUSU9O
X01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgdmVydGV4U2VyaWFsSW5kZXgrKykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29sb3JidWZmZXItPmdldFRleHR1cmVT
ZXJpYWwoKSAhPSAwICYmIG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1t2ZXJ0ZXhTZXJpYWxJbmRl
eF0gPT0gY29sb3JidWZmZXItPmdldFRleHR1cmVTZXJpYWwoKSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHNldFRleHR1cmUoZ2w6OlNBTVBMRVJfVkVSVEVYLCB2ZXJ0
ZXhTZXJpYWxJbmRleCwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBwaXhlbFNlcmlhbEluZGV4ID0gMDsgcGl4
ZWxTZXJpYWxJbmRleCA8IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgcGl4ZWxTZXJpYWxJ
bmRleCsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlci0+
Z2V0VGV4dHVyZVNlcmlhbCgpICE9IDAgJiYgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbcGl4ZWxT
ZXJpYWxJbmRleF0gPT0gY29sb3JidWZmZXItPmdldFRleHR1cmVTZXJpYWwoKSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHNldFRleHR1cmUoZ2w6OlNBTVBMRVJfUElY
RUwsIHBpeGVsU2VyaWFsSW5kZXgsIE5VTEwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSNlbmRpZgotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gR2V0IHRoZSBkZXB0aCBz
dGVuY2lsIHJlbmRlciBidWZmZXIgYW5kIHNlcmlhbHMKLSAgICBnbDo6UmVuZGVyYnVmZmVyICpk
ZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIHVuc2lnbmVkIGludCBkZXB0aGJ1ZmZlclNlcmlhbCA9
IDA7Ci0gICAgdW5zaWduZWQgaW50IHN0ZW5jaWxidWZmZXJTZXJpYWwgPSAwOwotICAgIGlmIChm
cmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKLSAgICB7Ci0gICAg
ICAgIGRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOwotICAgICAg
ICBpZiAoIWRlcHRoU3RlbmNpbCkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJEZXB0aCBz
dGVuY2lsIHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7Ci0gICAgICAgICAgICBTYWZlUmVs
ZWFzZShmcmFtZWJ1ZmZlclJUVnMpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZGVwdGhidWZmZXJTZXJpYWwgPSBkZXB0aFN0ZW5jaWwtPmdldFNlcmlh
bCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlclR5
cGUoKSAhPSBHTF9OT05FKQotICAgIHsKLSAgICAgICAgZGVwdGhTdGVuY2lsID0gZnJhbWVidWZm
ZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKLSAgICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRs
eSBudWxsLiIpOwotICAgICAgICAgICAgU2FmZVJlbGVhc2UoZnJhbWVidWZmZXJSVFZzKTsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0ZW5jaWxidWZm
ZXJTZXJpYWwgPSBkZXB0aFN0ZW5jaWwtPmdldFNlcmlhbCgpOwotICAgIH0KLQotICAgIC8vIEV4
dHJhY3QgdGhlIGRlcHRoIHN0ZW5jaWwgc2l6ZXMgYW5kIHZpZXcKLSAgICB1bnNpZ25lZCBpbnQg
ZGVwdGhTaXplID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbFNpemUgPSAwOwotICAgIElE
M0QxMURlcHRoU3RlbmNpbFZpZXcqIGZyYW1lYnVmZmVyRFNWID0gTlVMTDsKLSAgICBpZiAoZGVw
dGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgUmVuZGVyVGFyZ2V0MTEgKmRlcHRoU3RlbmNpbFJl
bmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoZGVwdGhTdGVu
Y2lsLT5nZXREZXB0aFN0ZW5jaWwoKSk7Ci0gICAgICAgIGlmICghZGVwdGhTdGVuY2lsUmVuZGVy
VGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoInJlbmRlciB0YXJnZXQgcG9pbnRl
ciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgIFNhZmVSZWxlYXNlKGZyYW1lYnVm
ZmVyUlRWcyk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAg
ICBmcmFtZWJ1ZmZlckRTViA9IGRlcHRoU3RlbmNpbFJlbmRlclRhcmdldC0+Z2V0RGVwdGhTdGVu
Y2lsVmlldygpOwotICAgICAgICBpZiAoIWZyYW1lYnVmZmVyRFNWKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBFUlIoImRlcHRoIHN0ZW5jaWwgdmlldyBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxs
LiIpOwotICAgICAgICAgICAgU2FmZVJlbGVhc2UoZnJhbWVidWZmZXJSVFZzKTsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZXJlIGlzIG5v
IHJlbmRlciBidWZmZXIsIHRoZSB3aWR0aCwgaGVpZ2h0IGFuZCBmb3JtYXQgdmFsdWVzIGNvbWUg
ZnJvbQotICAgICAgICAvLyB0aGUgZGVwdGggc3RlbmNpbAotICAgICAgICBpZiAobWlzc2luZ0Nv
bG9yUmVuZGVyVGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZW5kZXJUYXJnZXRXaWR0
aCA9IGRlcHRoU3RlbmNpbC0+Z2V0V2lkdGgoKTsKLSAgICAgICAgICAgIHJlbmRlclRhcmdldEhl
aWdodCA9IGRlcHRoU3RlbmNpbC0+Z2V0SGVpZ2h0KCk7Ci0gICAgICAgICAgICByZW5kZXJUYXJn
ZXRGb3JtYXQgPSBkZXB0aFN0ZW5jaWwtPmdldEFjdHVhbEZvcm1hdCgpOwotICAgICAgICB9Ci0K
LSAgICAgICAgZGVwdGhTaXplID0gZGVwdGhTdGVuY2lsLT5nZXREZXB0aFNpemUoKTsKLSAgICAg
ICAgc3RlbmNpbFNpemUgPSBkZXB0aFN0ZW5jaWwtPmdldFN0ZW5jaWxTaXplKCk7Ci0gICAgfQot
Ci0gICAgLy8gQXBwbHkgdGhlIHJlbmRlciB0YXJnZXQgYW5kIGRlcHRoIHN0ZW5jaWwKLSAgICBp
ZiAoIW1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgfHwgIW1EZXB0aFN0ZW5jaWxJbml0aWFs
aXplZCB8fAotICAgICAgICBtZW1jbXAocmVuZGVyVGFyZ2V0U2VyaWFscywgbUFwcGxpZWRSZW5k
ZXJUYXJnZXRTZXJpYWxzLCBzaXplb2YocmVuZGVyVGFyZ2V0U2VyaWFscykpICE9IDAgfHwKLSAg
ICAgICAgZGVwdGhidWZmZXJTZXJpYWwgIT0gbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCB8fAot
ICAgICAgICBzdGVuY2lsYnVmZmVyU2VyaWFsICE9IG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlh
bCkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldFJlbmRlclRhcmdldHMoZ2V0
TWF4UmVuZGVyVGFyZ2V0cygpLCBmcmFtZWJ1ZmZlclJUVnMsIGZyYW1lYnVmZmVyRFNWKTsKLQot
ICAgICAgICBtUmVuZGVyVGFyZ2V0RGVzYy53aWR0aCA9IHJlbmRlclRhcmdldFdpZHRoOwotICAg
ICAgICBtUmVuZGVyVGFyZ2V0RGVzYy5oZWlnaHQgPSByZW5kZXJUYXJnZXRIZWlnaHQ7Ci0gICAg
ICAgIG1SZW5kZXJUYXJnZXREZXNjLmZvcm1hdCA9IHJlbmRlclRhcmdldEZvcm1hdDsKLSAgICAg
ICAgbUZvcmNlU2V0Vmlld3BvcnQgPSB0cnVlOwotICAgICAgICBtRm9yY2VTZXRTY2lzc29yID0g
dHJ1ZTsKLQotICAgICAgICBpZiAoIW1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCB8fCBkZXB0aFNp
emUgIT0gbUN1ckRlcHRoU2l6ZSkKLSAgICAgICAgewotICAgICAgICAgICAgbUN1ckRlcHRoU2l6
ZSA9IGRlcHRoU2l6ZTsKLSAgICAgICAgICAgIG1Gb3JjZVNldFJhc3RlclN0YXRlID0gdHJ1ZTsK
LSAgICAgICAgfQotCi0gICAgICAgIG1DdXJTdGVuY2lsU2l6ZSA9IHN0ZW5jaWxTaXplOwotCi0g
ICAgICAgIGZvciAodW5zaWduZWQgaW50IHJ0SW5kZXggPSAwOyBydEluZGV4IDwgZ2w6OklNUExF
TUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IHJ0SW5kZXgrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWxzW3J0SW5kZXhdID0gcmVuZGVyVGFyZ2V0
U2VyaWFsc1tydEluZGV4XTsKLSAgICAgICAgfQotICAgICAgICBtQXBwbGllZERlcHRoYnVmZmVy
U2VyaWFsID0gZGVwdGhidWZmZXJTZXJpYWw7Ci0gICAgICAgIG1BcHBsaWVkU3RlbmNpbGJ1ZmZl
clNlcmlhbCA9IHN0ZW5jaWxidWZmZXJTZXJpYWw7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXREZXNj
SW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgICAgICBtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgPSB0
cnVlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1HTGVudW0gUmVuZGVyZXIxMTo6
YXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGdsOjpW
ZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmlidXRlc1tdLCBHTGludCBmaXJzdCwgR0xzaXplaSBj
b3VudCwgR0xzaXplaSBpbnN0YW5jZXMpCi17Ci0gICAgVHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRy
aWJ1dGVzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdOwotICAgIEdMZW51bSBlcnIgPSBtVmVydGV4
RGF0YU1hbmFnZXItPnByZXBhcmVWZXJ0ZXhEYXRhKHZlcnRleEF0dHJpYnV0ZXMsIHByb2dyYW1C
aW5hcnksIGZpcnN0LCBjb3VudCwgYXR0cmlidXRlcywgaW5zdGFuY2VzKTsKLSAgICBpZiAoZXJy
ICE9IEdMX05PX0VSUk9SKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gbUlucHV0TGF5b3V0Q2FjaGUuYXBwbHlWZXJ0ZXhCdWZmZXJzKGF0dHJpYnV0ZXMs
IHByb2dyYW1CaW5hcnkpOwotfQotCi1HTGVudW0gUmVuZGVyZXIxMTo6YXBwbHlJbmRleEJ1ZmZl
cihjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwg
R0xzaXplaSBjb3VudCwgR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhE
YXRhICppbmRleEluZm8pCi17Ci0gICAgR0xlbnVtIGVyciA9IG1JbmRleERhdGFNYW5hZ2VyLT5w
cmVwYXJlSW5kZXhEYXRhKHR5cGUsIGNvdW50LCBlbGVtZW50QXJyYXlCdWZmZXIsIGluZGljZXMs
IGluZGV4SW5mbyk7Ci0KLSAgICBpZiAoZXJyID09IEdMX05PX0VSUk9SKQotICAgIHsKLSAgICAg
ICAgaWYgKGluZGV4SW5mby0+c3RvcmFnZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGlu
ZGV4SW5mby0+c2VyaWFsICE9IG1BcHBsaWVkU3RvcmFnZUlCU2VyaWFsIHx8IGluZGV4SW5mby0+
c3RhcnRPZmZzZXQgIT0gbUFwcGxpZWRJQk9mZnNldCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBCdWZmZXJTdG9yYWdlMTEgKnN0b3JhZ2UgPSBCdWZmZXJTdG9yYWdlMTE6Om1ha2VC
dWZmZXJTdG9yYWdlMTEoaW5kZXhJbmZvLT5zdG9yYWdlKTsKLSAgICAgICAgICAgICAgICBJbmRl
eEJ1ZmZlcjExKiBpbmRleEJ1ZmZlciA9IEluZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1ZmZlcjEx
KGluZGV4SW5mby0+aW5kZXhCdWZmZXIpOwotCi0gICAgICAgICAgICAgICAgbURldmljZUNvbnRl
eHQtPklBU2V0SW5kZXhCdWZmZXIoc3RvcmFnZS0+Z2V0QnVmZmVyKCksIGluZGV4QnVmZmVyLT5n
ZXRJbmRleEZvcm1hdCgpLCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0KTsKLQotICAgICAgICAgICAg
ICAgIG1BcHBsaWVkSUJTZXJpYWwgPSAwOwotICAgICAgICAgICAgICAgIG1BcHBsaWVkU3RvcmFn
ZUlCU2VyaWFsID0gc3RvcmFnZS0+Z2V0U2VyaWFsKCk7Ci0gICAgICAgICAgICAgICAgbUFwcGxp
ZWRJQk9mZnNldCA9IGluZGV4SW5mby0+c3RhcnRPZmZzZXQ7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaW5kZXhJbmZvLT5zZXJpYWwgIT0gbUFwcGxpZWRJQlNl
cmlhbCB8fCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0ICE9IG1BcHBsaWVkSUJPZmZzZXQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEluZGV4QnVmZmVyMTEqIGluZGV4QnVmZmVyID0gSW5kZXhCdWZm
ZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEoaW5kZXhJbmZvLT5pbmRleEJ1ZmZlcik7Ci0KLSAgICAg
ICAgICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldEluZGV4QnVmZmVyKGluZGV4QnVmZmVyLT5nZXRC
dWZmZXIoKSwgaW5kZXhCdWZmZXItPmdldEluZGV4Rm9ybWF0KCksIGluZGV4SW5mby0+c3RhcnRP
ZmZzZXQpOwotCi0gICAgICAgICAgICBtQXBwbGllZElCU2VyaWFsID0gaW5kZXhJbmZvLT5zZXJp
YWw7Ci0gICAgICAgICAgICBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbCA9IDA7Ci0gICAgICAgICAg
ICBtQXBwbGllZElCT2Zmc2V0ID0gaW5kZXhJbmZvLT5zdGFydE9mZnNldDsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiBlcnI7Ci19Ci0KLXZvaWQgUmVuZGVyZXIxMTo6ZHJhd0FycmF5
cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpCi17Ci0gICAg
aWYgKG1vZGUgPT0gR0xfTElORV9MT09QKQotICAgIHsKLSAgICAgICAgZHJhd0xpbmVMb29wKGNv
dW50LCBHTF9OT05FLCBOVUxMLCAwLCBOVUxMKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZSA9
PSBHTF9UUklBTkdMRV9GQU4pCi0gICAgewotICAgICAgICBkcmF3VHJpYW5nbGVGYW4oY291bnQs
IEdMX05PTkUsIE5VTEwsIDAsIE5VTEwsIGluc3RhbmNlcyk7Ci0gICAgfQotICAgIGVsc2UgaWYg
KGluc3RhbmNlcyA+IDApCi0gICAgewotICAgICAgICBtRGV2aWNlQ29udGV4dC0+RHJhd0luc3Rh
bmNlZChjb3VudCwgaW5zdGFuY2VzLCAwLCAwKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAg
ICAgICAgbURldmljZUNvbnRleHQtPkRyYXcoY291bnQsIDApOwotICAgIH0KLX0KLQotdm9pZCBS
ZW5kZXJlcjExOjpkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51
bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1
ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvLCBHTHNpemVpIGluc3Rh
bmNlcykKLXsKLSAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCi0gICAgewotICAgICAgICBk
cmF3TGluZUxvb3AoY291bnQsIHR5cGUsIGluZGljZXMsIGluZGV4SW5mby5taW5JbmRleCwgZWxl
bWVudEFycmF5QnVmZmVyKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZSA9PSBHTF9UUklBTkdM
RV9GQU4pCi0gICAgewotICAgICAgICBkcmF3VHJpYW5nbGVGYW4oY291bnQsIHR5cGUsIGluZGlj
ZXMsIGluZGV4SW5mby5taW5JbmRleCwgZWxlbWVudEFycmF5QnVmZmVyLCBpbnN0YW5jZXMpOwot
ICAgIH0KLSAgICBlbHNlIGlmIChpbnN0YW5jZXMgPiAwKQotICAgIHsKLSAgICAgICAgbURldmlj
ZUNvbnRleHQtPkRyYXdJbmRleGVkSW5zdGFuY2VkKGNvdW50LCBpbnN0YW5jZXMsIDAsIC1zdGF0
aWNfY2FzdDxpbnQ+KGluZGV4SW5mby5taW5JbmRleCksIDApOwotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgICBtRGV2aWNlQ29udGV4dC0+RHJhd0luZGV4ZWQoY291bnQsIDAsIC1zdGF0
aWNfY2FzdDxpbnQ+KGluZGV4SW5mby5taW5JbmRleCkpOwotICAgIH0KLX0KLQotdm9pZCBSZW5k
ZXJlcjExOjpkcmF3TGluZUxvb3AoR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdM
dm9pZCAqaW5kaWNlcywgaW50IG1pbkluZGV4LCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZm
ZXIpCi17Ci0gICAgLy8gR2V0IHRoZSByYXcgaW5kaWNlcyBmb3IgYW4gaW5kZXhlZCBkcmF3Ci0g
ICAgaWYgKHR5cGUgIT0gR0xfTk9ORSAmJiBlbGVtZW50QXJyYXlCdWZmZXIpCi0gICAgewotICAg
ICAgICBnbDo6QnVmZmVyICppbmRleEJ1ZmZlciA9IGVsZW1lbnRBcnJheUJ1ZmZlcjsKLSAgICAg
ICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGluZGV4QnVmZmVyLT5nZXRTdG9yYWdlKCk7Ci0g
ICAgICAgIGludHB0cl90IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZGlj
ZXMpOwotICAgICAgICBpbmRpY2VzID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KHN0b3Jh
Z2UtPmdldERhdGEoKSkgKyBvZmZzZXQ7Ci0gICAgfQotCi0gICAgaWYgKCFtTGluZUxvb3BJQikK
LSAgICB7Ci0gICAgICAgIG1MaW5lTG9vcElCID0gbmV3IFN0cmVhbWluZ0luZGV4QnVmZmVySW50
ZXJmYWNlKHRoaXMpOwotICAgICAgICBpZiAoIW1MaW5lTG9vcElCLT5yZXNlcnZlQnVmZmVyU3Bh
Y2UoSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwgR0xfVU5TSUdORURfSU5UKSkKLSAgICAgICAg
ewotICAgICAgICAgICAgZGVsZXRlIG1MaW5lTG9vcElCOwotICAgICAgICAgICAgbUxpbmVMb29w
SUIgPSBOVUxMOwotCi0gICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSAzMi1iaXQg
bG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKLSAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICAvLyBDaGVja2VkIGJ5IFJlbmRlcmVyMTE6OmFwcGx5UHJpbWl0aXZlVHlwZQotICAgIEFTU0VS
VChjb3VudCA+PSAwKTsKLQotICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGNvdW50
KSArIDEgPiAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSAvIHNpemVv
Zih1bnNpZ25lZCBpbnQpKSkKLSAgICB7Ci0gICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBh
IDMyLWJpdCBsb29waW5nIGluZGV4IGJ1ZmZlciBmb3IgR0xfTElORV9MT09QLCB0b28gbWFueSBp
bmRpY2VzIHJlcXVpcmVkLiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwotICAgIH0KLQotICAgIGNvbnN0IHVuc2lnbmVkIGludCBzcGFjZU5lZWRlZCA9IChz
dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGNvdW50KSArIDEpICogc2l6ZW9mKHVuc2lnbmVkIGlu
dCk7Ci0gICAgaWYgKCFtTGluZUxvb3BJQi0+cmVzZXJ2ZUJ1ZmZlclNwYWNlKHNwYWNlTmVlZGVk
LCBHTF9VTlNJR05FRF9JTlQpKQotICAgIHsKLSAgICAgICAgRVJSKCJDb3VsZCBub3QgcmVzZXJ2
ZSBlbm91Z2ggc3BhY2UgaW4gbG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4i
KTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0K
LSAgICB2b2lkKiBtYXBwZWRNZW1vcnkgPSBOVUxMOwotICAgIHVuc2lnbmVkIGludCBvZmZzZXQ7
Ci0gICAgaWYgKCFtTGluZUxvb3BJQi0+bWFwQnVmZmVyKHNwYWNlTmVlZGVkLCAmbWFwcGVkTWVt
b3J5LCAmb2Zmc2V0KSkKLSAgICB7Ci0gICAgICAgIEVSUigiQ291bGQgbm90IG1hcCBpbmRleCBi
dWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBpbnQgKmRhdGEgPSByZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkIGludCo+KG1hcHBlZE1lbW9yeSk7Ci0gICAgdW5zaWduZWQgaW50
IGluZGV4QnVmZmVyT2Zmc2V0ID0gb2Zmc2V0OwotCi0gICAgc3dpdGNoICh0eXBlKQotICAgIHsK
LSAgICAgIGNhc2UgR0xfTk9ORTogICAvLyBOb24taW5kZXhlZCBkcmF3Ci0gICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGF0YVtp
XSA9IGk7Ci0gICAgICAgIH0KLSAgICAgICAgZGF0YVtjb3VudF0gPSAwOwotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkYXRhW2ldID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpW2ldOwotICAgICAgICB9Ci0gICAgICAgIGRh
dGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpWzBdOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6Ci0gICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGF0YVtp
XSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNlcylbaV07Ci0gICAgICAgIH0K
LSAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGlj
ZXMpWzBdOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgotICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVtpXTsKLSAg
ICAgICAgfQotICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+
KGluZGljZXMpWzBdOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgfQotCi0gICAgaWYgKCFtTGluZUxvb3BJQi0+dW5tYXBCdWZmZXIoKSkKLSAgICB7
Ci0gICAgICAgIEVSUigiQ291bGQgbm90IHVubWFwIGluZGV4IGJ1ZmZlciBmb3IgR0xfTElORV9M
T09QLiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAg
IH0KLQotICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9IG1MaW5lTG9vcElCLT5nZXRTZXJpYWwo
KSB8fCBtQXBwbGllZElCT2Zmc2V0ICE9IGluZGV4QnVmZmVyT2Zmc2V0KQotICAgIHsKLSAgICAg
ICAgSW5kZXhCdWZmZXIxMSAqaW5kZXhCdWZmZXIgPSBJbmRleEJ1ZmZlcjExOjptYWtlSW5kZXhC
dWZmZXIxMShtTGluZUxvb3BJQi0+Z2V0SW5kZXhCdWZmZXIoKSk7Ci0KLSAgICAgICAgbURldmlj
ZUNvbnRleHQtPklBU2V0SW5kZXhCdWZmZXIoaW5kZXhCdWZmZXItPmdldEJ1ZmZlcigpLCBpbmRl
eEJ1ZmZlci0+Z2V0SW5kZXhGb3JtYXQoKSwgaW5kZXhCdWZmZXJPZmZzZXQpOwotICAgICAgICBt
QXBwbGllZElCU2VyaWFsID0gbUxpbmVMb29wSUItPmdldFNlcmlhbCgpOwotICAgICAgICBtQXBw
bGllZFN0b3JhZ2VJQlNlcmlhbCA9IDA7Ci0gICAgICAgIG1BcHBsaWVkSUJPZmZzZXQgPSBpbmRl
eEJ1ZmZlck9mZnNldDsKLSAgICB9Ci0KLSAgICBtRGV2aWNlQ29udGV4dC0+RHJhd0luZGV4ZWQo
Y291bnQgKyAxLCAwLCAtbWluSW5kZXgpOwotfQotCi12b2lkIFJlbmRlcmVyMTE6OmRyYXdUcmlh
bmdsZUZhbihHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2Vz
LCBpbnQgbWluSW5kZXgsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgaW50IGluc3Rh
bmNlcykKLXsKLSAgICAvLyBHZXQgdGhlIHJhdyBpbmRpY2VzIGZvciBhbiBpbmRleGVkIGRyYXcK
LSAgICBpZiAodHlwZSAhPSBHTF9OT05FICYmIGVsZW1lbnRBcnJheUJ1ZmZlcikKLSAgICB7Ci0g
ICAgICAgIGdsOjpCdWZmZXIgKmluZGV4QnVmZmVyID0gZWxlbWVudEFycmF5QnVmZmVyOwotICAg
ICAgICBCdWZmZXJTdG9yYWdlICpzdG9yYWdlID0gaW5kZXhCdWZmZXItPmdldFN0b3JhZ2UoKTsK
LSAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5k
aWNlcyk7Ci0gICAgICAgIGluZGljZXMgPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oc3Rv
cmFnZS0+Z2V0RGF0YSgpKSArIG9mZnNldDsKLSAgICB9Ci0KLSAgICBpZiAoIW1UcmlhbmdsZUZh
bklCKQotICAgIHsKLSAgICAgICAgbVRyaWFuZ2xlRmFuSUIgPSBuZXcgU3RyZWFtaW5nSW5kZXhC
dWZmZXJJbnRlcmZhY2UodGhpcyk7Ci0gICAgICAgIGlmICghbVRyaWFuZ2xlRmFuSUItPnJlc2Vy
dmVCdWZmZXJTcGFjZShJTklUSUFMX0lOREVYX0JVRkZFUl9TSVpFLCBHTF9VTlNJR05FRF9JTlQp
KQotICAgICAgICB7Ci0gICAgICAgICAgICBkZWxldGUgbVRyaWFuZ2xlRmFuSUI7Ci0gICAgICAg
ICAgICBtVHJpYW5nbGVGYW5JQiA9IE5VTEw7Ci0KLSAgICAgICAgICAgIEVSUigiQ291bGQgbm90
IGNyZWF0ZSBhIHNjcmF0Y2ggaW5kZXggYnVmZmVyIGZvciBHTF9UUklBTkdMRV9GQU4uIik7Ci0g
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgLy8gQ2hlY2tlZCBieSBSZW5kZXJlcjExOjphcHBseVByaW1pdGl2ZVR5
cGUKLSAgICBBU1NFUlQoY291bnQgPj0gMyk7Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbnVt
VHJpcyA9IGNvdW50IC0gMjsKLQotICAgIGlmIChudW1UcmlzID4gKHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLyAoc2l6ZW9mKHVuc2lnbmVkIGludCkgKiAzKSkpCi0g
ICAgewotICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSBzY3JhdGNoIGluZGV4IGJ1ZmZl
ciBmb3IgR0xfVFJJQU5HTEVfRkFOLCB0b28gbWFueSBpbmRpY2VzIHJlcXVpcmVkLiIpOwotICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAgIGNv
bnN0IHVuc2lnbmVkIGludCBzcGFjZU5lZWRlZCA9IChudW1UcmlzICogMykgKiBzaXplb2YodW5z
aWduZWQgaW50KTsKLSAgICBpZiAoIW1UcmlhbmdsZUZhbklCLT5yZXNlcnZlQnVmZmVyU3BhY2Uo
c3BhY2VOZWVkZWQsIEdMX1VOU0lHTkVEX0lOVCkpCi0gICAgewotICAgICAgICBFUlIoIkNvdWxk
IG5vdCByZXNlcnZlIGVub3VnaCBzcGFjZSBpbiBzY3JhdGNoIGluZGV4IGJ1ZmZlciBmb3IgR0xf
VFJJQU5HTEVfRkFOLiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgIH0KLQotICAgIHZvaWQqIG1hcHBlZE1lbW9yeSA9IE5VTEw7Ci0gICAgdW5zaWdu
ZWQgaW50IG9mZnNldDsKLSAgICBpZiAoIW1UcmlhbmdsZUZhbklCLT5tYXBCdWZmZXIoc3BhY2VO
ZWVkZWQsICZtYXBwZWRNZW1vcnksICZvZmZzZXQpKQotICAgIHsKLSAgICAgICAgRVJSKCJDb3Vs
ZCBub3QgbWFwIHNjcmF0Y2ggaW5kZXggYnVmZmVyIGZvciBHTF9UUklBTkdMRV9GQU4uIik7Ci0g
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotCi0gICAg
dW5zaWduZWQgaW50ICpkYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihtYXBw
ZWRNZW1vcnkpOwotICAgIHVuc2lnbmVkIGludCBpbmRleEJ1ZmZlck9mZnNldCA9IG9mZnNldDsK
LQotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX05PTkU6ICAgLy8gTm9u
LWluZGV4ZWQgZHJhdwotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVRy
aXM7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGF0YVtpKjMgKyAwXSA9IDA7Ci0gICAg
ICAgICAgICBkYXRhW2kqMyArIDFdID0gaSArIDE7Ci0gICAgICAgICAgICBkYXRhW2kqMyArIDJd
ID0gaSArIDI7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1VOU0lH
TkVEX0JZVEU6Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtVHJpczsg
aSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkYXRhW2kqMyArIDBdID0gc3RhdGljX2Nhc3Q8
Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpWzBdOwotICAgICAgICAgICAgZGF0YVtpKjMgKyAxXSA9
IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKVtpICsgMV07Ci0gICAgICAgICAg
ICBkYXRhW2kqMyArIDJdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpW2kg
KyAyXTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURf
U0hPUlQ6Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtVHJpczsgaSsr
KQotICAgICAgICB7Ci0gICAgICAgICAgICBkYXRhW2kqMyArIDBdID0gc3RhdGljX2Nhc3Q8Y29u
c3QgR0x1c2hvcnQqPihpbmRpY2VzKVswXTsKLSAgICAgICAgICAgIGRhdGFbaSozICsgMV0gPSBz
dGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpW2kgKyAxXTsKLSAgICAgICAgICAg
IGRhdGFbaSozICsgMl0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpW2kg
KyAyXTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURf
SU5UOgotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVRyaXM7IGkrKykK
LSAgICAgICAgewotICAgICAgICAgICAgZGF0YVtpKjMgKyAwXSA9IHN0YXRpY19jYXN0PGNvbnN0
IEdMdWludCo+KGluZGljZXMpWzBdOwotICAgICAgICAgICAgZGF0YVtpKjMgKyAxXSA9IHN0YXRp
Y19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMpW2kgKyAxXTsKLSAgICAgICAgICAgIGRhdGFb
aSozICsgMl0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVtpICsgMl07Ci0g
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwot
ICAgIH0KLQotICAgIGlmICghbVRyaWFuZ2xlRmFuSUItPnVubWFwQnVmZmVyKCkpCi0gICAgewot
ICAgICAgICBFUlIoIkNvdWxkIG5vdCB1bm1hcCBzY3JhdGNoIGluZGV4IGJ1ZmZlciBmb3IgR0xf
VFJJQU5HTEVfRkFOLiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgIH0KLQotICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9IG1UcmlhbmdsZUZhbklC
LT5nZXRTZXJpYWwoKSB8fCBtQXBwbGllZElCT2Zmc2V0ICE9IGluZGV4QnVmZmVyT2Zmc2V0KQot
ICAgIHsKLSAgICAgICAgSW5kZXhCdWZmZXIxMSAqaW5kZXhCdWZmZXIgPSBJbmRleEJ1ZmZlcjEx
OjptYWtlSW5kZXhCdWZmZXIxMShtVHJpYW5nbGVGYW5JQi0+Z2V0SW5kZXhCdWZmZXIoKSk7Ci0K
LSAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0SW5kZXhCdWZmZXIoaW5kZXhCdWZmZXItPmdl
dEJ1ZmZlcigpLCBpbmRleEJ1ZmZlci0+Z2V0SW5kZXhGb3JtYXQoKSwgaW5kZXhCdWZmZXJPZmZz
ZXQpOwotICAgICAgICBtQXBwbGllZElCU2VyaWFsID0gbVRyaWFuZ2xlRmFuSUItPmdldFNlcmlh
bCgpOwotICAgICAgICBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbCA9IDA7Ci0gICAgICAgIG1BcHBs
aWVkSUJPZmZzZXQgPSBpbmRleEJ1ZmZlck9mZnNldDsKLSAgICB9Ci0KLSAgICBpZiAoaW5zdGFu
Y2VzID4gMCkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5EcmF3SW5kZXhlZEluc3Rh
bmNlZChudW1UcmlzICogMywgaW5zdGFuY2VzLCAwLCAtbWluSW5kZXgsIDApOwotICAgIH0KLSAg
ICBlbHNlCi0gICAgewotICAgICAgICBtRGV2aWNlQ29udGV4dC0+RHJhd0luZGV4ZWQobnVtVHJp
cyAqIDMsIDAsIC1taW5JbmRleCk7Ci0gICAgfQotfQotCi12b2lkIFJlbmRlcmVyMTE6OmFwcGx5
U2hhZGVycyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSkKLXsKLSAgICB1bnNpZ25l
ZCBpbnQgcHJvZ3JhbUJpbmFyeVNlcmlhbCA9IHByb2dyYW1CaW5hcnktPmdldFNlcmlhbCgpOwot
ICAgIGNvbnN0IGJvb2wgdXBkYXRlUHJvZ3JhbVN0YXRlID0gKHByb2dyYW1CaW5hcnlTZXJpYWwg
IT0gbUFwcGxpZWRQcm9ncmFtQmluYXJ5U2VyaWFsKTsKLQotICAgIGlmICh1cGRhdGVQcm9ncmFt
U3RhdGUpCi0gICAgewotICAgICAgICBTaGFkZXJFeGVjdXRhYmxlICp2ZXJ0ZXhFeGUgPSBwcm9n
cmFtQmluYXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlKCk7Ci0gICAgICAgIFNoYWRlckV4ZWN1dGFi
bGUgKnBpeGVsRXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxFeGVjdXRhYmxlKCk7Ci0KLSAg
ICAgICAgSUQzRDExVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIgPSBOVUxMOwotICAgICAgICBp
ZiAodmVydGV4RXhlKSB2ZXJ0ZXhTaGFkZXIgPSBTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VTaGFk
ZXJFeGVjdXRhYmxlMTEodmVydGV4RXhlKS0+Z2V0VmVydGV4U2hhZGVyKCk7Ci0KLSAgICAgICAg
SUQzRDExUGl4ZWxTaGFkZXIgKnBpeGVsU2hhZGVyID0gTlVMTDsKLSAgICAgICAgaWYgKHBpeGVs
RXhlKSBwaXhlbFNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFi
bGUxMShwaXhlbEV4ZSktPmdldFBpeGVsU2hhZGVyKCk7Ci0KLSAgICAgICAgbURldmljZUNvbnRl
eHQtPlBTU2V0U2hhZGVyKHBpeGVsU2hhZGVyLCBOVUxMLCAwKTsKLSAgICAgICAgbURldmljZUNv
bnRleHQtPlZTU2V0U2hhZGVyKHZlcnRleFNoYWRlciwgTlVMTCwgMCk7Ci0KLSAgICAgICAgcHJv
Z3JhbUJpbmFyeS0+ZGlydHlBbGxVbmlmb3JtcygpOwotCi0gICAgICAgIG1BcHBsaWVkUHJvZ3Jh
bUJpbmFyeVNlcmlhbCA9IHByb2dyYW1CaW5hcnlTZXJpYWw7Ci0gICAgfQotCi0gICAgLy8gT25s
eSB1c2UgdGhlIGdlb21ldHJ5IHNoYWRlciBjdXJyZW50bHkgZm9yIHBvaW50IHNwcml0ZSBkcmF3
aW5nCi0gICAgY29uc3QgYm9vbCB1c2VzR2VvbWV0cnlTaGFkZXIgPSAocHJvZ3JhbUJpbmFyeS0+
dXNlc0dlb21ldHJ5U2hhZGVyKCkgJiYgbUN1clJhc3RlclN0YXRlLnBvaW50RHJhd01vZGUpOwot
Ci0gICAgaWYgKHVwZGF0ZVByb2dyYW1TdGF0ZSB8fCB1c2VzR2VvbWV0cnlTaGFkZXIgIT0gbUlz
R2VvbWV0cnlTaGFkZXJBY3RpdmUpCi0gICAgewotICAgICAgICBpZiAodXNlc0dlb21ldHJ5U2hh
ZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBTaGFkZXJFeGVjdXRhYmxlICpnZW9tZXRyeUV4
ZSA9IHByb2dyYW1CaW5hcnktPmdldEdlb21ldHJ5RXhlY3V0YWJsZSgpOwotICAgICAgICAgICAg
SUQzRDExR2VvbWV0cnlTaGFkZXIgKmdlb21ldHJ5U2hhZGVyID0gU2hhZGVyRXhlY3V0YWJsZTEx
OjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKGdlb21ldHJ5RXhlKS0+Z2V0R2VvbWV0cnlTaGFkZXIo
KTsKLSAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldFNoYWRlcihnZW9tZXRyeVNoYWRl
ciwgTlVMTCwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAg
ICAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIoTlVMTCwgTlVMTCwgMCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBtSXNHZW9tZXRyeVNoYWRlckFjdGl2ZSA9IHVzZXNHZW9tZXRyeVNoYWRl
cjsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyZXIxMTo6YXBwbHlVbmlmb3JtcyhnbDo6UHJvZ3Jh
bUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlVuaWZvcm1BcnJheSAqdW5pZm9ybUFycmF5KQot
ewotICAgIFNoYWRlckV4ZWN1dGFibGUxMSAqdmVydGV4RXhlY3V0YWJsZSA9IFNoYWRlckV4ZWN1
dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhF
eGVjdXRhYmxlKCkpOwotICAgIFNoYWRlckV4ZWN1dGFibGUxMSAqcGl4ZWxFeGVjdXRhYmxlID0g
U2hhZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKHByb2dyYW1CaW5hcnkt
PmdldFBpeGVsRXhlY3V0YWJsZSgpKTsKLQotICAgIHVuc2lnbmVkIGludCB0b3RhbFJlZ2lzdGVy
Q291bnRWUyA9IDA7Ci0gICAgdW5zaWduZWQgaW50IHRvdGFsUmVnaXN0ZXJDb3VudFBTID0gMDsK
LQotICAgIGJvb2wgdmVydGV4VW5pZm9ybXNEaXJ0eSA9IGZhbHNlOwotICAgIGJvb2wgcGl4ZWxV
bmlmb3Jtc0RpcnR5ID0gZmFsc2U7Ci0KLSAgICBmb3IgKGdsOjpVbmlmb3JtQXJyYXk6OmNvbnN0
X2l0ZXJhdG9yIHVuaWZvcm1faXRlcmF0b3IgPSB1bmlmb3JtQXJyYXktPmJlZ2luKCk7IHVuaWZv
cm1faXRlcmF0b3IgIT0gdW5pZm9ybUFycmF5LT5lbmQoKTsgdW5pZm9ybV9pdGVyYXRvcisrKQot
ICAgIHsKLSAgICAgICAgY29uc3QgZ2w6OlVuaWZvcm0gKnVuaWZvcm0gPSAqdW5pZm9ybV9pdGVy
YXRvcjsKLQotICAgICAgICBpZiAodW5pZm9ybS0+dnNSZWdpc3RlckluZGV4ID49IDApCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHRvdGFsUmVnaXN0ZXJDb3VudFZTICs9IHVuaWZvcm0tPnJlZ2lz
dGVyQ291bnQ7Ci0gICAgICAgICAgICB2ZXJ0ZXhVbmlmb3Jtc0RpcnR5ID0gdmVydGV4VW5pZm9y
bXNEaXJ0eSB8fCB1bmlmb3JtLT5kaXJ0eTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh1bmlm
b3JtLT5wc1JlZ2lzdGVySW5kZXggPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgdG90YWxS
ZWdpc3RlckNvdW50UFMgKz0gdW5pZm9ybS0+cmVnaXN0ZXJDb3VudDsKLSAgICAgICAgICAgIHBp
eGVsVW5pZm9ybXNEaXJ0eSA9IHBpeGVsVW5pZm9ybXNEaXJ0eSB8fCB1bmlmb3JtLT5kaXJ0eTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIElEM0QxMUJ1ZmZlciAqdmVydGV4Q29uc3RhbnRCdWZm
ZXIgPSB2ZXJ0ZXhFeGVjdXRhYmxlLT5nZXRDb25zdGFudEJ1ZmZlcihtRGV2aWNlLCB0b3RhbFJl
Z2lzdGVyQ291bnRWUyk7Ci0gICAgSUQzRDExQnVmZmVyICpwaXhlbENvbnN0YW50QnVmZmVyID0g
cGl4ZWxFeGVjdXRhYmxlLT5nZXRDb25zdGFudEJ1ZmZlcihtRGV2aWNlLCB0b3RhbFJlZ2lzdGVy
Q291bnRQUyk7Ci0KLSAgICBmbG9hdCAoKm1hcFZTKVs0XSA9IE5VTEw7Ci0gICAgZmxvYXQgKCpt
YXBQUylbNF0gPSBOVUxMOwotCi0gICAgaWYgKHRvdGFsUmVnaXN0ZXJDb3VudFZTID4gMCAmJiB2
ZXJ0ZXhVbmlmb3Jtc0RpcnR5KQotICAgIHsKLSAgICAgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09V
UkNFIG1hcCA9IHswfTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlQ29udGV4dC0+
TWFwKHZlcnRleENvbnN0YW50QnVmZmVyLCAwLCBEM0QxMV9NQVBfV1JJVEVfRElTQ0FSRCwgMCwg
Jm1hcCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIG1hcFZT
ID0gKGZsb2F0KCopWzRdKW1hcC5wRGF0YTsKLSAgICB9Ci0KLSAgICBpZiAodG90YWxSZWdpc3Rl
ckNvdW50UFMgPiAwICYmIHBpeGVsVW5pZm9ybXNEaXJ0eSkKLSAgICB7Ci0gICAgICAgIEQzRDEx
X01BUFBFRF9TVUJSRVNPVVJDRSBtYXAgPSB7MH07Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
bURldmljZUNvbnRleHQtPk1hcChwaXhlbENvbnN0YW50QnVmZmVyLCAwLCBEM0QxMV9NQVBfV1JJ
VEVfRElTQ0FSRCwgMCwgJm1hcCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7
Ci0gICAgICAgIG1hcFBTID0gKGZsb2F0KCopWzRdKW1hcC5wRGF0YTsKLSAgICB9Ci0KLSAgICBm
b3IgKGdsOjpVbmlmb3JtQXJyYXk6Oml0ZXJhdG9yIHVuaWZvcm1faXRlcmF0b3IgPSB1bmlmb3Jt
QXJyYXktPmJlZ2luKCk7IHVuaWZvcm1faXRlcmF0b3IgIT0gdW5pZm9ybUFycmF5LT5lbmQoKTsg
dW5pZm9ybV9pdGVyYXRvcisrKQotICAgIHsKLSAgICAgICAgZ2w6OlVuaWZvcm0gKnVuaWZvcm0g
PSAqdW5pZm9ybV9pdGVyYXRvcjsKLQotICAgICAgICBpZiAodW5pZm9ybS0+dHlwZSAhPSAgR0xf
U0FNUExFUl8yRCAmJiB1bmlmb3JtLT50eXBlICE9IEdMX1NBTVBMRVJfQ1VCRSkKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKHVuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleCA+PSAwICYmIG1hcFZT
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1lbWNweShtYXBWUyArIHVuaWZvcm0t
PnZzUmVnaXN0ZXJJbmRleCwgdW5pZm9ybS0+ZGF0YSwgdW5pZm9ybS0+cmVnaXN0ZXJDb3VudCAq
IHNpemVvZihmbG9hdFs0XSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodW5p
Zm9ybS0+cHNSZWdpc3RlckluZGV4ID49IDAgJiYgbWFwUFMpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgbWVtY3B5KG1hcFBTICsgdW5pZm9ybS0+cHNSZWdpc3RlckluZGV4LCB1bmlm
b3JtLT5kYXRhLCB1bmlmb3JtLT5yZWdpc3RlckNvdW50ICogc2l6ZW9mKGZsb2F0WzRdKSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB1bmlmb3JtLT5kaXJ0eSA9IGZhbHNl
OwotICAgIH0KLQotICAgIGlmIChtYXBWUykKLSAgICB7Ci0gICAgICAgIG1EZXZpY2VDb250ZXh0
LT5Vbm1hcCh2ZXJ0ZXhDb25zdGFudEJ1ZmZlciwgMCk7Ci0gICAgfQotCi0gICAgaWYgKG1hcFBT
KQotICAgIHsKLSAgICAgICAgbURldmljZUNvbnRleHQtPlVubWFwKHBpeGVsQ29uc3RhbnRCdWZm
ZXIsIDApOwotICAgIH0KLQotICAgIGlmIChtQ3VycmVudFZlcnRleENvbnN0YW50QnVmZmVyICE9
IHZlcnRleENvbnN0YW50QnVmZmVyKQotICAgIHsKLSAgICAgICAgbURldmljZUNvbnRleHQtPlZT
U2V0Q29uc3RhbnRCdWZmZXJzKDAsIDEsICZ2ZXJ0ZXhDb25zdGFudEJ1ZmZlcik7Ci0gICAgICAg
IG1DdXJyZW50VmVydGV4Q29uc3RhbnRCdWZmZXIgPSB2ZXJ0ZXhDb25zdGFudEJ1ZmZlcjsKLSAg
ICB9Ci0KLSAgICBpZiAobUN1cnJlbnRQaXhlbENvbnN0YW50QnVmZmVyICE9IHBpeGVsQ29uc3Rh
bnRCdWZmZXIpCi0gICAgewotICAgICAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRDb25zdGFudEJ1
ZmZlcnMoMCwgMSwgJnBpeGVsQ29uc3RhbnRCdWZmZXIpOwotICAgICAgICBtQ3VycmVudFBpeGVs
Q29uc3RhbnRCdWZmZXIgPSBwaXhlbENvbnN0YW50QnVmZmVyOwotICAgIH0KLQotICAgIC8vIERy
aXZlciB1bmlmb3JtcwotICAgIGlmICghbURyaXZlckNvbnN0YW50QnVmZmVyVlMpCi0gICAgewot
ICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uID0gezB9
OwotICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLkJ5dGVXaWR0aCA9IHNpemVvZihk
eF9WZXJ0ZXhDb25zdGFudHMpOwotICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLlVz
YWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKLSAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlw
dGlvbi5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX0NPTlNUQU5UX0JVRkZFUjsKLSAgICAgICAgY29u
c3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5DUFVBY2Nlc3NGbGFncyA9IDA7Ci0gICAgICAgIGNvbnN0
YW50QnVmZmVyRGVzY3JpcHRpb24uTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgY29uc3RhbnRCdWZm
ZXJEZXNjcmlwdGlvbi5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKLQotICAgICAgICBIUkVTVUxU
IHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlv
biwgTlVMTCwgJm1Ecml2ZXJDb25zdGFudEJ1ZmZlclZTKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChyZXN1bHQpKTsKLQotICAgICAgICBtRGV2aWNlQ29udGV4dC0+VlNTZXRDb25zdGFudEJ1
ZmZlcnMoMSwgMSwgJm1Ecml2ZXJDb25zdGFudEJ1ZmZlclZTKTsKLSAgICB9Ci0KLSAgICBpZiAo
IW1Ecml2ZXJDb25zdGFudEJ1ZmZlclBTKQotICAgIHsKLSAgICAgICAgRDNEMTFfQlVGRkVSX0RF
U0MgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbiA9IHswfTsKLSAgICAgICAgY29uc3RhbnRCdWZm
ZXJEZXNjcmlwdGlvbi5CeXRlV2lkdGggPSBzaXplb2YoZHhfUGl4ZWxDb25zdGFudHMpOwotICAg
ICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVM
VDsKLSAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5CaW5kRmxhZ3MgPSBEM0QxMV9C
SU5EX0NPTlNUQU5UX0JVRkZFUjsKLSAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5D
UFVBY2Nlc3NGbGFncyA9IDA7Ci0gICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uTWlz
Y0ZsYWdzID0gMDsKLSAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5TdHJ1Y3R1cmVC
eXRlU3RyaWRlID0gMDsKLQotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0
ZUJ1ZmZlcigmY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbiwgTlVMTCwgJm1Ecml2ZXJDb25zdGFu
dEJ1ZmZlclBTKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgICAg
ICBtRGV2aWNlQ29udGV4dC0+UFNTZXRDb25zdGFudEJ1ZmZlcnMoMSwgMSwgJm1Ecml2ZXJDb25z
dGFudEJ1ZmZlclBTKTsKLSAgICB9Ci0KLSAgICBpZiAobWVtY21wKCZtVmVydGV4Q29uc3RhbnRz
LCAmbUFwcGxpZWRWZXJ0ZXhDb25zdGFudHMsIHNpemVvZihkeF9WZXJ0ZXhDb25zdGFudHMpKSAh
PSAwKQotICAgIHsKLSAgICAgICAgbURldmljZUNvbnRleHQtPlVwZGF0ZVN1YnJlc291cmNlKG1E
cml2ZXJDb25zdGFudEJ1ZmZlclZTLCAwLCBOVUxMLCAmbVZlcnRleENvbnN0YW50cywgMTYsIDAp
OwotICAgICAgICBtZW1jcHkoJm1BcHBsaWVkVmVydGV4Q29uc3RhbnRzLCAmbVZlcnRleENvbnN0
YW50cywgc2l6ZW9mKGR4X1ZlcnRleENvbnN0YW50cykpOwotICAgIH0KLQotICAgIGlmIChtZW1j
bXAoJm1QaXhlbENvbnN0YW50cywgJm1BcHBsaWVkUGl4ZWxDb25zdGFudHMsIHNpemVvZihkeF9Q
aXhlbENvbnN0YW50cykpICE9IDApCi0gICAgewotICAgICAgICBtRGV2aWNlQ29udGV4dC0+VXBk
YXRlU3VicmVzb3VyY2UobURyaXZlckNvbnN0YW50QnVmZmVyUFMsIDAsIE5VTEwsICZtUGl4ZWxD
b25zdGFudHMsIDE2LCAwKTsKLSAgICAgICAgbWVtY3B5KCZtQXBwbGllZFBpeGVsQ29uc3RhbnRz
LCAmbVBpeGVsQ29uc3RhbnRzLCBzaXplb2YoZHhfUGl4ZWxDb25zdGFudHMpKTsKLSAgICB9Ci0K
LSAgICAvLyBuZWVkZWQgZm9yIHRoZSBwb2ludCBzcHJpdGUgZ2VvbWV0cnkgc2hhZGVyCi0gICAg
aWYgKG1DdXJyZW50R2VvbWV0cnlDb25zdGFudEJ1ZmZlciAhPSBtRHJpdmVyQ29uc3RhbnRCdWZm
ZXJQUykKLSAgICB7Ci0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldENvbnN0YW50QnVmZmVy
cygwLCAxLCAmbURyaXZlckNvbnN0YW50QnVmZmVyUFMpOwotICAgICAgICBtQ3VycmVudEdlb21l
dHJ5Q29uc3RhbnRCdWZmZXIgPSBtRHJpdmVyQ29uc3RhbnRCdWZmZXJQUzsKLSAgICB9Ci19Ci0K
LXZvaWQgUmVuZGVyZXIxMTo6Y2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyYW1ldGVycyAmY2xlYXJQ
YXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpCi17Ci0gICAgIGJvb2wgYWxwaGFV
bm1hc2tlZCA9IChnbDo6R2V0QWxwaGFTaXplKG1SZW5kZXJUYXJnZXREZXNjLmZvcm1hdCkgPT0g
MCkgfHwgY2xlYXJQYXJhbXMuY29sb3JNYXNrQWxwaGE7Ci0gICAgIGJvb2wgbmVlZE1hc2tlZENv
bG9yQ2xlYXIgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpICYmCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKGNsZWFyUGFyYW1zLmNvbG9yTWFza1Jl
ZCAmJiBjbGVhclBhcmFtcy5jb2xvck1hc2tHcmVlbiAmJgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tCbHVlICYmIGFscGhhVW5tYXNrZWQp
OwotCi0gICAgIHVuc2lnbmVkIGludCBzdGVuY2lsVW5tYXNrZWQgPSAweDA7Ci0gICAgIGlmIChm
cmFtZUJ1ZmZlci0+aGFzU3RlbmNpbCgpKQotICAgICB7Ci0gICAgICAgICB1bnNpZ25lZCBpbnQg
c3RlbmNpbFNpemUgPSBnbDo6R2V0U3RlbmNpbFNpemUoZnJhbWVCdWZmZXItPmdldFN0ZW5jaWxi
dWZmZXIoKS0+Z2V0QWN0dWFsRm9ybWF0KCkpOwotICAgICAgICAgc3RlbmNpbFVubWFza2VkID0g
KDB4MSA8PCBzdGVuY2lsU2l6ZSkgLSAxOwotICAgICB9Ci0gICAgIGJvb2wgbmVlZE1hc2tlZFN0
ZW5jaWxDbGVhciA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKSAm
JgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xlYXJQYXJhbXMuc3RlbmNp
bFdyaXRlTWFzayAmIHN0ZW5jaWxVbm1hc2tlZCkgIT0gc3RlbmNpbFVubWFza2VkOwotCi0gICAg
IGJvb2wgbmVlZFNjaXNzb3JlZENsZWFyID0gbVNjaXNzb3JFbmFibGVkICYmIChtQ3VyU2Npc3Nv
ci54ID4gMCB8fCBtQ3VyU2Npc3Nvci55ID4gMCB8fAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbUN1clNjaXNzb3IueCArIG1DdXJTY2lzc29yLndp
ZHRoIDwgbVJlbmRlclRhcmdldERlc2Mud2lkdGggfHwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1DdXJTY2lzc29yLnkgKyBtQ3VyU2Npc3Nvci5o
ZWlnaHQgPCBtUmVuZGVyVGFyZ2V0RGVzYy5oZWlnaHQpOwotCi0gICAgIGlmIChuZWVkTWFza2Vk
Q29sb3JDbGVhciB8fCBuZWVkTWFza2VkU3RlbmNpbENsZWFyIHx8IG5lZWRTY2lzc29yZWRDbGVh
cikKLSAgICAgewotICAgICAgICAgbWFza2VkQ2xlYXIoY2xlYXJQYXJhbXMsIGZyYW1lQnVmZmVy
LT51c2luZ0V4dGVuZGVkRHJhd0J1ZmZlcnMoKSk7Ci0gICAgIH0KLSAgICAgZWxzZQotICAgICB7
Ci0gICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpCi0g
ICAgICAgICB7Ci0gICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50
ID0gMDsgY29sb3JBdHRhY2htZW50IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZF
UlM7IGNvbG9yQXR0YWNobWVudCsrKQotICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
aWYgKGZyYW1lQnVmZmVyLT5pc0VuYWJsZWRDb2xvckF0dGFjaG1lbnQoY29sb3JBdHRhY2htZW50
KSkKLSAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1
ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0ID0gZnJhbWVCdWZmZXItPmdldENvbG9yYnVmZmVyKGNv
bG9yQXR0YWNobWVudCk7Ci0gICAgICAgICAgICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyT2Jq
ZWN0KQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgUmVu
ZGVyVGFyZ2V0MTEgKnJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFy
Z2V0MTEocmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUlIoInJlbmRlciB0YXJnZXQgcG9pbnRl
ciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmZyYW1lYnVmZmVyUlRWID0gcmVuZGVyVGFyZ2V0LT5n
ZXRSZW5kZXJUYXJnZXRWaWV3KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZyYW1l
YnVmZmVyUlRWKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEVSUigicmVuZGVyIHRhcmdldCB2aWV3IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51
bGwuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCBjbGVh
clZhbHVlc1s0XSA9IHsgY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLnJlZCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhclBhcmFt
cy5jb2xvckNsZWFyVmFsdWUuZ3JlZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLmJsdWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLmFscGhhIH07Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtRGV2aWNlQ29udGV4dC0+Q2xlYXJSZW5kZXJUYXJnZXRWaWV3KGZyYW1lYnVmZmVyUlRW
LCBjbGVhclZhbHVlcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFz
ayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQgfHwgY2xlYXJQYXJhbXMubWFzayAmIEdMX1NURU5DSUxf
QlVGRkVSX0JJVCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVu
ZGVyYnVmZmVyT2JqZWN0ID0gZnJhbWVCdWZmZXItPmdldERlcHRoT3JTdGVuY2lsYnVmZmVyKCk7
Ci0gICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyT2JqZWN0KQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIFJlbmRlclRhcmdldDExICpyZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQx
MTo6bWFrZVJlbmRlclRhcmdldDExKHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhTdGVuY2ls
KCkpOwotICAgICAgICAgICAgICAgIGlmICghcmVuZGVyVGFyZ2V0KQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHBvaW50ZXIgdW5leHBl
Y3RlZGx5IG51bGwuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpmcmFtZWJ1
ZmZlckRTViA9IHJlbmRlclRhcmdldC0+Z2V0RGVwdGhTdGVuY2lsVmlldygpOwotICAgICAgICAg
ICAgICAgIGlmICghZnJhbWVidWZmZXJEU1YpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBFUlIoImRlcHRoIHN0ZW5jaWwgdmlldyBwb2ludGVyIHVuZXhwZWN0ZWRseSBu
dWxsLiIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgVUlOVCBjbGVhckZsYWdzID0gMDsKLSAgICAgICAgICAgICAgICBp
ZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBjbGVhckZsYWdzIHw9IEQzRDExX0NMRUFSX0RFUFRI
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFz
ayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNsZWFyRmxhZ3MgfD0gRDNEMTFfQ0xFQVJfU1RFTkNJTDsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBmbG9hdCBkZXB0aENsZWFyID0gZ2w6OmNsYW1wMDEo
Y2xlYXJQYXJhbXMuZGVwdGhDbGVhclZhbHVlKTsKLSAgICAgICAgICAgICAgICBVSU5UOCBzdGVu
Y2lsQ2xlYXIgPSBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSAmIDB4MDAwMDAwRkY7Ci0K
LSAgICAgICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+Q2xlYXJEZXB0aFN0ZW5jaWxWaWV3KGZy
YW1lYnVmZmVyRFNWLCBjbGVhckZsYWdzLCBkZXB0aENsZWFyLCBzdGVuY2lsQ2xlYXIpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFJlbmRlcmVyMTE6Om1hc2tl
ZENsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBib29sIHVzaW5n
RXh0ZW5kZWREcmF3QnVmZmVycykKLXsKLSAgICBIUkVTVUxUIHJlc3VsdDsKLQotICAgIGlmICgh
bUNsZWFyUmVzb3VyY2VzSW5pdGlhbGl6ZWQpCi0gICAgewotICAgICAgICBBU1NFUlQoIW1DbGVh
clZCICYmICFtQ2xlYXJWUyAmJiAhbUNsZWFyU2luZ2xlUFMgJiYgIW1DbGVhck11bHRpcGxlUFMg
JiYgIW1DbGVhclNjaXNzb3JSUyAmJiAhbUNsZWFyTm9TY2lzc29yUlMpOwotCi0gICAgICAgIEQz
RDExX0JVRkZFUl9ERVNDIHZiRGVzYzsKLSAgICAgICAgdmJEZXNjLkJ5dGVXaWR0aCA9IHNpemVv
ZihkM2QxMTo6UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KSAqIDQ7Ci0gICAgICAgIHZiRGVzYy5V
c2FnZSA9IEQzRDExX1VTQUdFX0RZTkFNSUM7Ci0gICAgICAgIHZiRGVzYy5CaW5kRmxhZ3MgPSBE
M0QxMV9CSU5EX1ZFUlRFWF9CVUZGRVI7Ci0gICAgICAgIHZiRGVzYy5DUFVBY2Nlc3NGbGFncyA9
IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7Ci0gICAgICAgIHZiRGVzYy5NaXNjRmxhZ3MgPSAwOwot
ICAgICAgICB2YkRlc2MuU3RydWN0dXJlQnl0ZVN0cmlkZSA9IDA7Ci0KLSAgICAgICAgcmVzdWx0
ID0gbURldmljZS0+Q3JlYXRlQnVmZmVyKCZ2YkRlc2MsIE5VTEwsICZtQ2xlYXJWQik7Ci0gICAg
ICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05h
bWUobUNsZWFyVkIsICJSZW5kZXJlcjExIG1hc2tlZCBjbGVhciB2ZXJ0ZXggYnVmZmVyIik7Ci0K
LSAgICAgICAgRDNEMTFfSU5QVVRfRUxFTUVOVF9ERVNDIHF1YWRMYXlvdXRbXSA9Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIHsgIlBPU0lUSU9OIiwgMCwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZM
T0FULCAgICAwLCAgMCwgRDNEMTFfSU5QVVRfUEVSX1ZFUlRFWF9EQVRBLCAwIH0sCi0gICAgICAg
ICAgICB7ICJDT0xPUiIsICAgIDAsIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCwgMCwg
MTIsIEQzRDExX0lOUFVUX1BFUl9WRVJURVhfREFUQSwgMCB9LAotICAgICAgICB9OwotCi0gICAg
ICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUlucHV0TGF5b3V0KHF1YWRMYXlvdXQsIDIsIGdf
VlNfQ2xlYXIsIHNpemVvZihnX1ZTX0NsZWFyKSwgJm1DbGVhcklMKTsKLSAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ2xlYXJJ
TCwgIlJlbmRlcmVyMTEgbWFza2VkIGNsZWFyIGlucHV0IGxheW91dCIpOwotCi0gICAgICAgIHJl
c3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVZlcnRleFNoYWRlcihnX1ZTX0NsZWFyLCBzaXplb2YoZ19W
U19DbGVhciksIE5VTEwsICZtQ2xlYXJWUyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNsZWFyVlMsICJSZW5kZXJlcjEx
IG1hc2tlZCBjbGVhciB2ZXJ0ZXggc2hhZGVyIik7Ci0KLSAgICAgICAgcmVzdWx0ID0gbURldmlj
ZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19DbGVhclNpbmdsZSwgc2l6ZW9mKGdfUFNfQ2xlYXJT
aW5nbGUpLCBOVUxMLCAmbUNsZWFyU2luZ2xlUFMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhclNpbmdsZVBTLCAi
UmVuZGVyZXIxMSBtYXNrZWQgY2xlYXIgcGl4ZWwgc2hhZGVyICgxIFJUKSIpOwotCi0gICAgICAg
IHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdfUFNfQ2xlYXJNdWx0aXBsZSwg
c2l6ZW9mKGdfUFNfQ2xlYXJNdWx0aXBsZSksIE5VTEwsICZtQ2xlYXJNdWx0aXBsZVBTKTsKLSAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVn
TmFtZShtQ2xlYXJNdWx0aXBsZVBTLCAiUmVuZGVyZXIxMSBtYXNrZWQgY2xlYXIgcGl4ZWwgc2hh
ZGVyIChNUlQpIik7Ci0KLSAgICAgICAgRDNEMTFfUkFTVEVSSVpFUl9ERVNDIHJzU2Npc3NvckRl
c2M7Ci0gICAgICAgIHJzU2Npc3NvckRlc2MuRmlsbE1vZGUgPSBEM0QxMV9GSUxMX1NPTElEOwot
ICAgICAgICByc1NjaXNzb3JEZXNjLkN1bGxNb2RlID0gRDNEMTFfQ1VMTF9OT05FOwotICAgICAg
ICByc1NjaXNzb3JEZXNjLkZyb250Q291bnRlckNsb2Nrd2lzZSA9IEZBTFNFOwotICAgICAgICBy
c1NjaXNzb3JEZXNjLkRlcHRoQmlhcyA9IDA7Ci0gICAgICAgIHJzU2Npc3NvckRlc2MuRGVwdGhC
aWFzQ2xhbXAgPSAwLjBmOwotICAgICAgICByc1NjaXNzb3JEZXNjLlNsb3BlU2NhbGVkRGVwdGhC
aWFzID0gMC4wZjsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5EZXB0aENsaXBFbmFibGUgPSBGQUxT
RTsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5TY2lzc29yRW5hYmxlID0gVFJVRTsKLSAgICAgICAg
cnNTY2lzc29yRGVzYy5NdWx0aXNhbXBsZUVuYWJsZSA9IEZBTFNFOwotICAgICAgICByc1NjaXNz
b3JEZXNjLkFudGlhbGlhc2VkTGluZUVuYWJsZSA9IEZBTFNFOwotCi0gICAgICAgIHJlc3VsdCA9
IG1EZXZpY2UtPkNyZWF0ZVJhc3Rlcml6ZXJTdGF0ZSgmcnNTY2lzc29yRGVzYywgJm1DbGVhclNj
aXNzb3JSUyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQz
ZDExOjpTZXREZWJ1Z05hbWUobUNsZWFyU2Npc3NvclJTLCAiUmVuZGVyZXIxMSBtYXNrZWQgY2xl
YXIgc2Npc3NvciByYXN0ZXJpemVyIHN0YXRlIik7Ci0KLSAgICAgICAgRDNEMTFfUkFTVEVSSVpF
Ul9ERVNDIHJzTm9TY2lzc29yRGVzYzsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLkZpbGxNb2Rl
ID0gRDNEMTFfRklMTF9TT0xJRDsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLkN1bGxNb2RlID0g
RDNEMTFfQ1VMTF9OT05FOwotICAgICAgICByc05vU2Npc3NvckRlc2MuRnJvbnRDb3VudGVyQ2xv
Y2t3aXNlID0gRkFMU0U7Ci0gICAgICAgIHJzTm9TY2lzc29yRGVzYy5EZXB0aEJpYXMgPSAwOwot
ICAgICAgICByc05vU2Npc3NvckRlc2MuRGVwdGhCaWFzQ2xhbXAgPSAwLjBmOwotICAgICAgICBy
c05vU2Npc3NvckRlc2MuU2xvcGVTY2FsZWREZXB0aEJpYXMgPSAwLjBmOwotICAgICAgICByc05v
U2Npc3NvckRlc2MuRGVwdGhDbGlwRW5hYmxlID0gRkFMU0U7Ci0gICAgICAgIHJzTm9TY2lzc29y
RGVzYy5TY2lzc29yRW5hYmxlID0gRkFMU0U7Ci0gICAgICAgIHJzTm9TY2lzc29yRGVzYy5NdWx0
aXNhbXBsZUVuYWJsZSA9IEZBTFNFOwotICAgICAgICByc05vU2Npc3NvckRlc2MuQW50aWFsaWFz
ZWRMaW5lRW5hYmxlID0gRkFMU0U7Ci0KLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRl
UmFzdGVyaXplclN0YXRlKCZyc05vU2Npc3NvckRlc2MsICZtQ2xlYXJOb1NjaXNzb3JSUyk7Ci0g
ICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1
Z05hbWUobUNsZWFyTm9TY2lzc29yUlMsICJSZW5kZXJlcjExIG1hc2tlZCBjbGVhciBubyBzY2lz
c29yIHJhc3Rlcml6ZXIgc3RhdGUiKTsKLQotICAgICAgICBtQ2xlYXJSZXNvdXJjZXNJbml0aWFs
aXplZCA9IHRydWU7Ci0gICAgfQotCi0gICAgLy8gUHJlcGFyZSB0aGUgZGVwdGggc3RlbmNpbCBz
dGF0ZSB0byB3cml0ZSBkZXB0aCB2YWx1ZXMgaWYgdGhlIGRlcHRoIHNob3VsZCBiZSBjbGVhcmVk
Ci0gICAgLy8gYW5kIHN0ZW5jaWwgdmFsdWVzIGlmIHRoZSBzdGVuY2lsIHNob3VsZCBiZSBjbGVh
cmVkCi0gICAgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlIGdsRFNTdGF0ZTsKLSAgICBnbERTU3RhdGUu
ZGVwdGhUZXN0ID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUKSAhPSAw
OwotICAgIGdsRFNTdGF0ZS5kZXB0aEZ1bmMgPSBHTF9BTFdBWVM7Ci0gICAgZ2xEU1N0YXRlLmRl
cHRoTWFzayA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCkgIT0gMDsK
LSAgICBnbERTU3RhdGUuc3RlbmNpbFRlc3QgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX1NURU5D
SUxfQlVGRkVSX0JJVCkgIT0gMDsKLSAgICBnbERTU3RhdGUuc3RlbmNpbEZ1bmMgPSBHTF9BTFdB
WVM7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxNYXNrID0gMDsKLSAgICBnbERTU3RhdGUuc3RlbmNp
bEZhaWwgPSBHTF9SRVBMQUNFOwotICAgIGdsRFNTdGF0ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbCA9
IEdMX1JFUExBQ0U7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzID0gR0xfUkVQ
TEFDRTsKLSAgICBnbERTU3RhdGUuc3RlbmNpbFdyaXRlbWFzayA9IGNsZWFyUGFyYW1zLnN0ZW5j
aWxXcml0ZU1hc2s7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxCYWNrRnVuYyA9IEdMX0FMV0FZUzsK
LSAgICBnbERTU3RhdGUuc3RlbmNpbEJhY2tNYXNrID0gMDsKLSAgICBnbERTU3RhdGUuc3RlbmNp
bEJhY2tGYWlsID0gR0xfUkVQTEFDRTsKLSAgICBnbERTU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVw
dGhGYWlsID0gR0xfUkVQTEFDRTsKLSAgICBnbERTU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQ
YXNzID0gR0xfUkVQTEFDRTsKLSAgICBnbERTU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgPSBj
bGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrOwotCi0gICAgaW50IHN0ZW5jaWxDbGVhciA9IGNs
ZWFyUGFyYW1zLnN0ZW5jaWxDbGVhclZhbHVlICYgMHgwMDAwMDBGRjsKLQotICAgIElEM0QxMURl
cHRoU3RlbmNpbFN0YXRlICpkc1N0YXRlID0gbVN0YXRlQ2FjaGUuZ2V0RGVwdGhTdGVuY2lsU3Rh
dGUoZ2xEU1N0YXRlKTsKLQotICAgIC8vIFByZXBhcmUgdGhlIGJsZW5kIHN0YXRlIHRvIHVzZSBh
IHdyaXRlIG1hc2sgaWYgdGhlIGNvbG9yIGJ1ZmZlciBzaG91bGQgYmUgY2xlYXJlZAotICAgIGds
OjpCbGVuZFN0YXRlIGdsQmxlbmRTdGF0ZTsKLSAgICBnbEJsZW5kU3RhdGUuYmxlbmQgPSBmYWxz
ZTsKLSAgICBnbEJsZW5kU3RhdGUuc291cmNlQmxlbmRSR0IgPSBHTF9PTkU7Ci0gICAgZ2xCbGVu
ZFN0YXRlLmRlc3RCbGVuZFJHQiA9IEdMX1pFUk87Ci0gICAgZ2xCbGVuZFN0YXRlLnNvdXJjZUJs
ZW5kQWxwaGEgPSBHTF9PTkU7Ci0gICAgZ2xCbGVuZFN0YXRlLmRlc3RCbGVuZEFscGhhID0gR0xf
WkVSTzsKLSAgICBnbEJsZW5kU3RhdGUuYmxlbmRFcXVhdGlvblJHQiA9IEdMX0ZVTkNfQUREOwot
ICAgIGdsQmxlbmRTdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEgPSBHTF9GVU5DX0FERDsKLSAgICBn
bEJsZW5kU3RhdGUuY29sb3JNYXNrUmVkID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xPUl9C
VUZGRVJfQklUKSA/IGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCA6IGZhbHNlOwotICAgIGdsQmxl
bmRTdGF0ZS5jb2xvck1hc2tHcmVlbiA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVG
RkVSX0JJVCkgPyBjbGVhclBhcmFtcy5jb2xvck1hc2tHcmVlbiA6IGZhbHNlOwotICAgIGdsQmxl
bmRTdGF0ZS5jb2xvck1hc2tCbHVlID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xPUl9CVUZG
RVJfQklUKSA/IGNsZWFyUGFyYW1zLmNvbG9yTWFza0JsdWUgOiBmYWxzZTsKLSAgICBnbEJsZW5k
U3RhdGUuY29sb3JNYXNrQWxwaGEgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZF
Ul9CSVQpID8gY2xlYXJQYXJhbXMuY29sb3JNYXNrQWxwaGEgOiBmYWxzZTsKLSAgICBnbEJsZW5k
U3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlID0gZmFsc2U7Ci0gICAgZ2xCbGVuZFN0YXRlLmRp
dGhlciA9IGZhbHNlOwotCi0gICAgc3RhdGljIGNvbnN0IGZsb2F0IGJsZW5kRmFjdG9yc1s0XSA9
IHsgMS4wZiwgMS4wZiwgMS4wZiwgMS4wZiB9OwotICAgIHN0YXRpYyBjb25zdCBVSU5UIHNhbXBs
ZU1hc2sgPSAweEZGRkZGRkZGOwotCi0gICAgSUQzRDExQmxlbmRTdGF0ZSAqYmxlbmRTdGF0ZSA9
IG1TdGF0ZUNhY2hlLmdldEJsZW5kU3RhdGUoZ2xCbGVuZFN0YXRlKTsKLQotICAgIC8vIFNldCB0
aGUgdmVydGljZXMKLSAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7
Ci0gICAgcmVzdWx0ID0gbURldmljZUNvbnRleHQtPk1hcChtQ2xlYXJWQiwgMCwgRDNEMTFfTUFQ
X1dSSVRFX0RJU0NBUkQsIDAsICZtYXBwZWRSZXNvdXJjZSk7Ci0gICAgaWYgKEZBSUxFRChyZXN1
bHQpKQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gbWFwIG1hc2tlZCBjbGVhciB2ZXJ0
ZXggYnVmZmVyLCBIUkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBkM2QxMTo6UG9zaXRpb25EZXB0aENvbG9yVmVydGV4ICp2ZXJ0aWNlcyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8ZDNkMTE6OlBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCo+KG1hcHBlZFJl
c291cmNlLnBEYXRhKTsKLQotICAgIGZsb2F0IGRlcHRoQ2xlYXIgPSBnbDo6Y2xhbXAwMShjbGVh
clBhcmFtcy5kZXB0aENsZWFyVmFsdWUpOwotICAgIGQzZDExOjpTZXRQb3NpdGlvbkRlcHRoQ29s
b3JWZXJ0ZXgoJnZlcnRpY2VzWzBdLCAtMS4wZiwgIDEuMGYsIGRlcHRoQ2xlYXIsIGNsZWFyUGFy
YW1zLmNvbG9yQ2xlYXJWYWx1ZSk7Ci0gICAgZDNkMTE6OlNldFBvc2l0aW9uRGVwdGhDb2xvclZl
cnRleCgmdmVydGljZXNbMV0sIC0xLjBmLCAtMS4wZiwgZGVwdGhDbGVhciwgY2xlYXJQYXJhbXMu
Y29sb3JDbGVhclZhbHVlKTsKLSAgICBkM2QxMTo6U2V0UG9zaXRpb25EZXB0aENvbG9yVmVydGV4
KCZ2ZXJ0aWNlc1syXSwgIDEuMGYsICAxLjBmLCBkZXB0aENsZWFyLCBjbGVhclBhcmFtcy5jb2xv
ckNsZWFyVmFsdWUpOwotICAgIGQzZDExOjpTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgoJnZl
cnRpY2VzWzNdLCAgMS4wZiwgLTEuMGYsIGRlcHRoQ2xlYXIsIGNsZWFyUGFyYW1zLmNvbG9yQ2xl
YXJWYWx1ZSk7Ci0KLSAgICBtRGV2aWNlQ29udGV4dC0+VW5tYXAobUNsZWFyVkIsIDApOwotCi0g
ICAgLy8gQXBwbHkgc3RhdGUKLSAgICBtRGV2aWNlQ29udGV4dC0+T01TZXRCbGVuZFN0YXRlKGJs
ZW5kU3RhdGUsIGJsZW5kRmFjdG9ycywgc2FtcGxlTWFzayk7Ci0gICAgbURldmljZUNvbnRleHQt
Pk9NU2V0RGVwdGhTdGVuY2lsU3RhdGUoZHNTdGF0ZSwgc3RlbmNpbENsZWFyKTsKLSAgICBtRGV2
aWNlQ29udGV4dC0+UlNTZXRTdGF0ZShtU2Npc3NvckVuYWJsZWQgPyBtQ2xlYXJTY2lzc29yUlMg
OiBtQ2xlYXJOb1NjaXNzb3JSUyk7Ci0KLSAgICAvLyBBcHBseSBzaGFkZXJzCi0gICAgSUQzRDEx
UGl4ZWxTaGFkZXIgKnBpeGVsU2hhZGVyID0gdXNpbmdFeHRlbmRlZERyYXdCdWZmZXJzID8gbUNs
ZWFyTXVsdGlwbGVQUyA6IG1DbGVhclNpbmdsZVBTOwotCi0gICAgbURldmljZUNvbnRleHQtPklB
U2V0SW5wdXRMYXlvdXQobUNsZWFySUwpOwotICAgIG1EZXZpY2VDb250ZXh0LT5WU1NldFNoYWRl
cihtQ2xlYXJWUywgTlVMTCwgMCk7Ci0gICAgbURldmljZUNvbnRleHQtPlBTU2V0U2hhZGVyKHBp
eGVsU2hhZGVyLCBOVUxMLCAwKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIoTlVM
TCwgTlVMTCwgMCk7Ci0KLSAgICAvLyBBcHBseSB2ZXJ0ZXggYnVmZmVyCi0gICAgc3RhdGljIFVJ
TlQgc3RyaWRlID0gc2l6ZW9mKGQzZDExOjpQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgpOwotICAg
IHN0YXRpYyBVSU5UIHN0YXJ0SWR4ID0gMDsKLSAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRWZXJ0
ZXhCdWZmZXJzKDAsIDEsICZtQ2xlYXJWQiwgJnN0cmlkZSwgJnN0YXJ0SWR4KTsKLSAgICBtRGV2
aWNlQ29udGV4dC0+SUFTZXRQcmltaXRpdmVUb3BvbG9neShEM0RfUFJJTUlUSVZFX1RPUE9MT0dZ
X1RSSUFOR0xFU1RSSVApOwotCi0gICAgLy8gRHJhdyB0aGUgY2xlYXIgcXVhZAotICAgIG1EZXZp
Y2VDb250ZXh0LT5EcmF3KDQsIDApOwotCi0gICAgLy8gQ2xlYW4gdXAKLSAgICBtYXJrQWxsU3Rh
dGVEaXJ0eSgpOwotfQotCi12b2lkIFJlbmRlcmVyMTE6Om1hcmtBbGxTdGF0ZURpcnR5KCkKLXsK
LSAgICBmb3IgKHVuc2lnbmVkIGludCBydEluZGV4ID0gMDsgcnRJbmRleCA8IGdsOjpJTVBMRU1F
TlRBVElPTl9NQVhfRFJBV19CVUZGRVJTOyBydEluZGV4KyspCi0gICAgewotICAgICAgICBtQXBw
bGllZFJlbmRlclRhcmdldFNlcmlhbHNbcnRJbmRleF0gPSAwOwotICAgIH0KLSAgICBtQXBwbGll
ZERlcHRoYnVmZmVyU2VyaWFsID0gMDsKLSAgICBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwg
PSAwOwotICAgIG1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCA9IGZhbHNlOwotICAgIG1SZW5kZXJU
YXJnZXREZXNjSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Z2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgaSsrKQot
ICAgIHsKLSAgICAgICAgbUZvcmNlU2V0VmVydGV4U2FtcGxlclN0YXRlc1tpXSA9IHRydWU7Ci0g
ICAgICAgIG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1tpXSA9IDA7Ci0gICAgfQotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyBpKyspCi0gICAgewot
ICAgICAgICBtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0ZXNbaV0gPSB0cnVlOwotICAgICAgICBt
Q3VyUGl4ZWxUZXh0dXJlU2VyaWFsc1tpXSA9IDA7Ci0gICAgfQotCi0gICAgbUZvcmNlU2V0Qmxl
bmRTdGF0ZSA9IHRydWU7Ci0gICAgbUZvcmNlU2V0UmFzdGVyU3RhdGUgPSB0cnVlOwotICAgIG1G
b3JjZVNldERlcHRoU3RlbmNpbFN0YXRlID0gdHJ1ZTsKLSAgICBtRm9yY2VTZXRTY2lzc29yID0g
dHJ1ZTsKLSAgICBtRm9yY2VTZXRWaWV3cG9ydCA9IHRydWU7Ci0KLSAgICBtQXBwbGllZElCU2Vy
aWFsID0gMDsKLSAgICBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbCA9IDA7Ci0gICAgbUFwcGxpZWRJ
Qk9mZnNldCA9IDA7Ci0KLSAgICBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWwgPSAwOwotICAg
IG1lbXNldCgmbUFwcGxpZWRWZXJ0ZXhDb25zdGFudHMsIDAsIHNpemVvZihkeF9WZXJ0ZXhDb25z
dGFudHMpKTsKLSAgICBtZW1zZXQoJm1BcHBsaWVkUGl4ZWxDb25zdGFudHMsIDAsIHNpemVvZihk
eF9QaXhlbENvbnN0YW50cykpOwotCi0gICAgbUlucHV0TGF5b3V0Q2FjaGUubWFya0RpcnR5KCk7
Ci0KLSAgICBtQ3VycmVudFZlcnRleENvbnN0YW50QnVmZmVyID0gTlVMTDsKLSAgICBtQ3VycmVu
dFBpeGVsQ29uc3RhbnRCdWZmZXIgPSBOVUxMOwotICAgIG1DdXJyZW50R2VvbWV0cnlDb25zdGFu
dEJ1ZmZlciA9IE5VTEw7Ci0KLSAgICBtQ3VycmVudFByaW1pdGl2ZVRvcG9sb2d5ID0gRDNEX1BS
SU1JVElWRV9UT1BPTE9HWV9VTkRFRklORUQ7Ci19Ci0KLXZvaWQgUmVuZGVyZXIxMTo6cmVsZWFz
ZURldmljZVJlc291cmNlcygpCi17Ci0gICAgbVN0YXRlQ2FjaGUuY2xlYXIoKTsKLSAgICBtSW5w
dXRMYXlvdXRDYWNoZS5jbGVhcigpOwotCi0gICAgZGVsZXRlIG1WZXJ0ZXhEYXRhTWFuYWdlcjsK
LSAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBOVUxMOwotCi0gICAgZGVsZXRlIG1JbmRleERhdGFN
YW5hZ2VyOwotICAgIG1JbmRleERhdGFNYW5hZ2VyID0gTlVMTDsKLQotICAgIGRlbGV0ZSBtTGlu
ZUxvb3BJQjsKLSAgICBtTGluZUxvb3BJQiA9IE5VTEw7Ci0KLSAgICBkZWxldGUgbVRyaWFuZ2xl
RmFuSUI7Ci0gICAgbVRyaWFuZ2xlRmFuSUIgPSBOVUxMOwotCi0gICAgU2FmZVJlbGVhc2UobUNv
cHlWQik7Ci0gICAgU2FmZVJlbGVhc2UobUNvcHlTYW1wbGVyKTsKLSAgICBTYWZlUmVsZWFzZSht
Q29weUlMKTsKLSAgICBTYWZlUmVsZWFzZShtQ29weUlMKTsKLSAgICBTYWZlUmVsZWFzZShtQ29w
eVZTKTsKLSAgICBTYWZlUmVsZWFzZShtQ29weVJHQkFQUyk7Ci0gICAgU2FmZVJlbGVhc2UobUNv
cHlSR0JQUyk7Ci0gICAgU2FmZVJlbGVhc2UobUNvcHlMdW1QUyk7Ci0gICAgU2FmZVJlbGVhc2Uo
bUNvcHlMdW1BbHBoYVBTKTsKLQotICAgIG1Db3B5UmVzb3VyY2VzSW5pdGlhbGl6ZWQgPSBmYWxz
ZTsKLQotICAgIFNhZmVSZWxlYXNlKG1DbGVhclZCKTsKLSAgICBTYWZlUmVsZWFzZShtQ2xlYXJJ
TCk7Ci0gICAgU2FmZVJlbGVhc2UobUNsZWFyVlMpOwotICAgIFNhZmVSZWxlYXNlKG1DbGVhclNp
bmdsZVBTKTsKLSAgICBTYWZlUmVsZWFzZShtQ2xlYXJNdWx0aXBsZVBTKTsKLSAgICBTYWZlUmVs
ZWFzZShtQ2xlYXJTY2lzc29yUlMpOwotICAgIFNhZmVSZWxlYXNlKG1DbGVhck5vU2Npc3NvclJT
KTsKLQotICAgIG1DbGVhclJlc291cmNlc0luaXRpYWxpemVkID0gZmFsc2U7Ci0KLSAgICBTYWZl
UmVsZWFzZShtRHJpdmVyQ29uc3RhbnRCdWZmZXJWUyk7Ci0gICAgU2FmZVJlbGVhc2UobURyaXZl
ckNvbnN0YW50QnVmZmVyUFMpOwotICAgIFNhZmVSZWxlYXNlKG1TeW5jUXVlcnkpOwotfQotCi12
b2lkIFJlbmRlcmVyMTE6Om5vdGlmeURldmljZUxvc3QoKQotewotICAgIG1EZXZpY2VMb3N0ID0g
dHJ1ZTsKLSAgICBtRGlzcGxheS0+bm90aWZ5RGV2aWNlTG9zdCgpOwotfQotCi1ib29sIFJlbmRl
cmVyMTE6OmlzRGV2aWNlTG9zdCgpCi17Ci0gICAgcmV0dXJuIG1EZXZpY2VMb3N0OwotfQotCi0v
LyBzZXQgbm90aWZ5IHRvIHRydWUgdG8gYnJvYWRjYXN0IGEgbWVzc2FnZSB0byBhbGwgY29udGV4
dHMgb2YgdGhlIGRldmljZSBsb3NzCi1ib29sIFJlbmRlcmVyMTE6OnRlc3REZXZpY2VMb3N0KGJv
b2wgbm90aWZ5KQotewotICAgIGJvb2wgaXNMb3N0ID0gZmFsc2U7Ci0KLSAgICAvLyBHZXRSZW1v
dmVkUmVhc29uIGlzIHVzZWQgdG8gdGVzdCBpZiB0aGUgZGV2aWNlIGlzIHJlbW92ZWQKLSAgICBI
UkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkdldERldmljZVJlbW92ZWRSZWFzb24oKTsKLSAgICBp
c0xvc3QgPSBkM2QxMTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KTsKLQotICAgIGlmIChpc0xv
c3QpCi0gICAgewotICAgICAgICAvLyBMb2cgZXJyb3IgaWYgdGhpcyBpcyBhIG5ldyBkZXZpY2Ug
bG9zdCBldmVudAotICAgICAgICBpZiAobURldmljZUxvc3QgPT0gZmFsc2UpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEVSUigiVGhlIEQzRDExIGRldmljZSB3YXMgcmVtb3ZlZDogMHglMDhYIiwg
cmVzdWx0KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGVuc3VyZSB3ZSBub3RlIHRoZSBkZXZp
Y2UgbG9zcyAtLQotICAgICAgICAvLyB3ZSdsbCBwcm9iYWJseSBnZXQgdGhpcyBkb25lIGFnYWlu
IGJ5IG5vdGlmeURldmljZUxvc3QKLSAgICAgICAgLy8gYnV0IGJlc3QgdG8gcmVtZW1iZXIgaXQh
Ci0gICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCB3YW50IHRvIGNsZWFyIHRoZSBkZXZpY2Ug
bG9zcyBzdGF0dXMgaGVyZQotICAgICAgICAvLyAtLSB0aGlzIG5lZWRzIHRvIGJlIGRvbmUgYnkg
cmVzZXREZXZpY2UKLSAgICAgICAgbURldmljZUxvc3QgPSB0cnVlOwotICAgICAgICBpZiAobm90
aWZ5KQotICAgICAgICB7Ci0gICAgICAgICAgICBub3RpZnlEZXZpY2VMb3N0KCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gaXNMb3N0OwotfQotCi1ib29sIFJlbmRlcmVyMTE6OnRl
c3REZXZpY2VSZXNldHRhYmxlKCkKLXsKLSAgICAvLyBkZXRlcm1pbmUgaWYgdGhlIGRldmljZSBp
cyByZXNldHRhYmxlIGJ5IGNyZWF0aW5nIGEgZHVtbXkgZGV2aWNlCi0gICAgUEZOX0QzRDExX0NS
RUFURV9ERVZJQ0UgRDNEMTFDcmVhdGVEZXZpY2UgPSAoUEZOX0QzRDExX0NSRUFURV9ERVZJQ0Up
R2V0UHJvY0FkZHJlc3MobUQzZDExTW9kdWxlLCAiRDNEMTFDcmVhdGVEZXZpY2UiKTsKLQotICAg
IGlmIChEM0QxMUNyZWF0ZURldmljZSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIEQzRF9GRUFUVVJFX0xFVkVMIGZlYXR1cmVMZXZlbHNbXSA9Ci0g
ICAgewotICAgICAgICBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wLAotICAgICAgICBEM0RfRkVBVFVS
RV9MRVZFTF8xMF8xLAotICAgICAgICBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wLAotICAgIH07Ci0K
LSAgICBJRDNEMTFEZXZpY2UqIGR1bW15RGV2aWNlOwotICAgIEQzRF9GRUFUVVJFX0xFVkVMIGR1
bW15RmVhdHVyZUxldmVsOwotICAgIElEM0QxMURldmljZUNvbnRleHQqIGR1bW15Q29udGV4dDsK
LQotICAgIEhSRVNVTFQgcmVzdWx0ID0gRDNEMTFDcmVhdGVEZXZpY2UoTlVMTCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRF9EUklWRVJfVFlQRV9IQVJEV0FSRSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjaWYgZGVmaW5lZChfREVCVUcpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0QxMV9DUkVBVEVfREVWSUNFX0RFQlVH
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2Vsc2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAjZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZlYXR1cmVMZXZlbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBcnJheVNpemUoZmVhdHVyZUxldmVscyksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBEM0QxMV9TREtfVkVSU0lPTiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZkdW1teURldmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZkdW1teUZlYXR1cmVMZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZkdW1teUNvbnRleHQpOwotCi0gICAgaWYgKCFtRGV2aWNlIHx8IEZB
SUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IGR1bW15Q29udGV4dC0+UmVsZWFzZSgpOwotICAgIGR1bW15RGV2aWNlLT5SZWxlYXNlKCk7Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBSZW5kZXJlcjExOjpyZWxlYXNlKCkKLXsKLSAg
ICByZWxlYXNlRGV2aWNlUmVzb3VyY2VzKCk7Ci0KLSAgICBpZiAobUR4Z2lGYWN0b3J5KQotICAg
IHsKLSAgICAgICAgbUR4Z2lGYWN0b3J5LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EeGdpRmFjdG9y
eSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1EeGdpQWRhcHRlcikKLSAgICB7Ci0gICAgICAg
IG1EeGdpQWRhcHRlci0+UmVsZWFzZSgpOwotICAgICAgICBtRHhnaUFkYXB0ZXIgPSBOVUxMOwot
ICAgIH0KLQotICAgIGlmIChtRGV2aWNlQ29udGV4dCkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2VD
b250ZXh0LT5DbGVhclN0YXRlKCk7Ci0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5GbHVzaCgpOwot
ICAgICAgICBtRGV2aWNlQ29udGV4dC0+UmVsZWFzZSgpOwotICAgICAgICBtRGV2aWNlQ29udGV4
dCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1EZXZpY2UpCi0gICAgewotICAgICAgICBtRGV2
aWNlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EZXZpY2UgPSBOVUxMOwotICAgIH0KLQotICAgIGlm
IChtRDNkMTFNb2R1bGUpCi0gICAgewotICAgICAgICBGcmVlTGlicmFyeShtRDNkMTFNb2R1bGUp
OwotICAgICAgICBtRDNkMTFNb2R1bGUgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtRHhnaU1v
ZHVsZSkKLSAgICB7Ci0gICAgICAgIEZyZWVMaWJyYXJ5KG1EeGdpTW9kdWxlKTsKLSAgICAgICAg
bUR4Z2lNb2R1bGUgPSBOVUxMOwotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJlcjExOjpyZXNldERl
dmljZSgpCi17Ci0gICAgLy8gcmVjcmVhdGUgZXZlcnl0aGluZwotICAgIHJlbGVhc2UoKTsKLSAg
ICBFR0xpbnQgcmVzdWx0ID0gaW5pdGlhbGl6ZSgpOwotCi0gICAgaWYgKHJlc3VsdCAhPSBFR0xf
U1VDQ0VTUykKLSAgICB7Ci0gICAgICAgIEVSUigiQ291bGQgbm90IHJlaW5pdGlhbGl6ZSBEM0Qx
MSBkZXZpY2U6ICUwOFgiLCByZXN1bHQpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgbURldmljZUxvc3QgPSBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1EV09S
RCBSZW5kZXJlcjExOjpnZXRBZGFwdGVyVmVuZG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUFk
YXB0ZXJEZXNjcmlwdGlvbi5WZW5kb3JJZDsKLX0KLQotc3RkOjpzdHJpbmcgUmVuZGVyZXIxMTo6
Z2V0UmVuZGVyZXJEZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgc3RkOjpvc3RyaW5nc3RyZWFt
IHJlbmRlcmVyU3RyaW5nOwotCi0gICAgcmVuZGVyZXJTdHJpbmcgPDwgbURlc2NyaXB0aW9uOwot
ICAgIHJlbmRlcmVyU3RyaW5nIDw8ICIgRGlyZWN0M0QxMSI7Ci0KLSAgICByZW5kZXJlclN0cmlu
ZyA8PCAiIHZzXyIgPDwgZ2V0TWFqb3JTaGFkZXJNb2RlbCgpIDw8ICJfIiA8PCBnZXRNaW5vclNo
YWRlck1vZGVsKCk7Ci0gICAgcmVuZGVyZXJTdHJpbmcgPDwgIiBwc18iIDw8IGdldE1ham9yU2hh
ZGVyTW9kZWwoKSA8PCAiXyIgPDwgZ2V0TWlub3JTaGFkZXJNb2RlbCgpOwotCi0gICAgcmV0dXJu
IHJlbmRlcmVyU3RyaW5nLnN0cigpOwotfQotCi1HVUlEIFJlbmRlcmVyMTE6OmdldEFkYXB0ZXJJ
ZGVudGlmaWVyKCkgY29uc3QKLXsKLSAgICAvLyBVc2UgdGhlIGFkYXB0ZXIgTFVJRCBhcyBvdXIg
YWRhcHRlciBJRAotICAgIC8vIFRoaXMgbnVtYmVyIGlzIGxvY2FsIHRvIGEgbWFjaGluZSBpcyBv
bmx5IGd1YXJhbnRlZWQgdG8gYmUgdW5pcXVlIGJldHdlZW4gcmVzdGFydHMKLSAgICBNRVRBX0FT
U0VSVChzaXplb2YoTFVJRCkgPD0gc2l6ZW9mKEdVSUQpKTsKLSAgICBHVUlEIGFkYXB0ZXJJZCA9
IHswfTsKLSAgICBtZW1jcHkoJmFkYXB0ZXJJZCwgJm1BZGFwdGVyRGVzY3JpcHRpb24uQWRhcHRl
ckx1aWQsIHNpemVvZihMVUlEKSk7Ci0gICAgcmV0dXJuIGFkYXB0ZXJJZDsKLX0KLQotYm9vbCBS
ZW5kZXJlcjExOjpnZXRCR1JBVGV4dHVyZVN1cHBvcnQoKSBjb25zdAotewotICAgIHJldHVybiBt
QkdSQVRleHR1cmVTdXBwb3J0OwotfQotCi1ib29sIFJlbmRlcmVyMTE6OmdldERYVDFUZXh0dXJl
U3VwcG9ydCgpCi17Ci0gICAgcmV0dXJuIG1EWFQxVGV4dHVyZVN1cHBvcnQ7Ci19Ci0KLWJvb2wg
UmVuZGVyZXIxMTo6Z2V0RFhUM1RleHR1cmVTdXBwb3J0KCkKLXsKLSAgICByZXR1cm4gbURYVDNU
ZXh0dXJlU3VwcG9ydDsKLX0KLQotYm9vbCBSZW5kZXJlcjExOjpnZXREWFQ1VGV4dHVyZVN1cHBv
cnQoKQotewotICAgIHJldHVybiBtRFhUNVRleHR1cmVTdXBwb3J0OwotfQotCi1ib29sIFJlbmRl
cmVyMTE6OmdldERlcHRoVGV4dHVyZVN1cHBvcnQoKSBjb25zdAotewotICAgIHJldHVybiBtRGVw
dGhUZXh0dXJlU3VwcG9ydDsKLX0KLQotYm9vbCBSZW5kZXJlcjExOjpnZXRGbG9hdDMyVGV4dHVy
ZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKQotewotICAgICpyZW5k
ZXJhYmxlID0gbUZsb2F0MzJSZW5kZXJTdXBwb3J0OwotICAgICpmaWx0ZXJpbmcgPSBtRmxvYXQz
MkZpbHRlclN1cHBvcnQ7Ci0gICAgcmV0dXJuIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQ7Ci19Ci0K
LWJvb2wgUmVuZGVyZXIxMTo6Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmlu
ZywgYm9vbCAqcmVuZGVyYWJsZSkKLXsKLSAgICAqcmVuZGVyYWJsZSA9IG1GbG9hdDE2UmVuZGVy
U3VwcG9ydDsKLSAgICAqZmlsdGVyaW5nID0gbUZsb2F0MTZGaWx0ZXJTdXBwb3J0OwotICAgIHJl
dHVybiBtRmxvYXQxNlRleHR1cmVTdXBwb3J0OwotfQotCi1ib29sIFJlbmRlcmVyMTE6OmdldEx1
bWluYW5jZVRleHR1cmVTdXBwb3J0KCkKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
UmVuZGVyZXIxMTo6Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpCi17Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlcmVyMTE6OmdldFRleHR1cmVGaWx0ZXJBbmlzb3Ry
b3B5U3VwcG9ydCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWZsb2F0IFJlbmRl
cmVyMTE6OmdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1G
ZWF0dXJlTGV2ZWwpCi0gICAgewotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgot
ICAgICAgICByZXR1cm4gRDNEMTFfTUFYX01BWEFOSVNPVFJPUFk7Ci0gICAgICBjYXNlIEQzRF9G
RUFUVVJFX0xFVkVMXzEwXzE6Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6Ci0g
ICAgICAgIHJldHVybiBEM0QxMF9NQVhfTUFYQU5JU09UUk9QWTsKLSAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJl
cjExOjpnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVJh
bmdlIFJlbmRlcmVyMTE6OmdldFZpZXdwb3J0Qm91bmRzKCkgY29uc3QKLXsKLSAgICBzd2l0Y2gg
KG1GZWF0dXJlTGV2ZWwpCi0gICAgewotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8w
OgotICAgICAgICByZXR1cm4gUmFuZ2UoRDNEMTFfVklFV1BPUlRfQk9VTkRTX01JTiwgRDNEMTFf
VklFV1BPUlRfQk9VTkRTX01BWCk7Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6
Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6Ci0gICAgICAgIHJldHVybiBSYW5n
ZShEM0QxMF9WSUVXUE9SVF9CT1VORFNfTUlOLCBEM0QxMF9WSUVXUE9SVF9CT1VORFNfTUFYKTsK
LSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiBSYW5nZSgwLCAw
KTsKLSAgICB9Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJlcjExOjpnZXRNYXhWZXJ0ZXhUZXh0
dXJlSW1hZ2VVbml0cygpIGNvbnN0Ci17Ci0gICAgTUVUQV9BU1NFUlQoTUFYX1RFWFRVUkVfSU1B
R0VfVU5JVFNfVlRGX1NNNCA8PSBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJF
X0lNQUdFX1VOSVRTKTsKLSAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCi0gICAgewotICAgICAg
Y2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZF
TF8xMF8xOgotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgotICAgICAgICByZXR1
cm4gTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGX1NNNDsKLSAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotdW5zaWduZWQgaW50IFJl
bmRlcmVyMTE6OmdldE1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdAotewotICAg
IHJldHVybiBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKyBnZXRNYXhWZXJ0ZXhUZXh0dXJl
SW1hZ2VVbml0cygpOwotfQotCi11bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0UmVzZXJ2ZWRW
ZXJ0ZXhVbmlmb3JtVmVjdG9ycygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7ICAgLy8gRHJpdmVy
IHVuaWZvcm1zIGFyZSBzdG9yZWQgaW4gYSBzZXBhcmF0ZSBjb25zdGFudCBidWZmZXIKLX0KLQot
dW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldFJlc2VydmVkRnJhZ21lbnRVbmlmb3JtVmVjdG9y
cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7ICAgLy8gRHJpdmVyIHVuaWZvcm1zIGFyZSBzdG9y
ZWQgaW4gYSBzZXBhcmF0ZSBjb25zdGFudCBidWZmZXIKLX0KLQotdW5zaWduZWQgaW50IFJlbmRl
cmVyMTE6OmdldE1heFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29uc3QKLXsKLSAgICBNRVRBX0FT
U0VSVChNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SU19EM0QxMSA8PSBEM0QxMF9SRVFfQ09OU1RB
TlRfQlVGRkVSX0VMRU1FTlRfQ09VTlQpOwotICAgIEFTU0VSVChtRmVhdHVyZUxldmVsID49IEQz
RF9GRUFUVVJFX0xFVkVMXzEwXzApOwotICAgIHJldHVybiBNQVhfVkVSVEVYX1VOSUZPUk1fVkVD
VE9SU19EM0QxMTsKLX0KLQotdW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldE1heEZyYWdtZW50
VW5pZm9ybVZlY3RvcnMoKSBjb25zdAotewotICAgIE1FVEFfQVNTRVJUKE1BWF9GUkFHTUVOVF9V
TklGT1JNX1ZFQ1RPUlNfRDNEMTEgPD0gRDNEMTBfUkVRX0NPTlNUQU5UX0JVRkZFUl9FTEVNRU5U
X0NPVU5UKTsKLSAgICBBU1NFUlQobUZlYXR1cmVMZXZlbCA+PSBEM0RfRkVBVFVSRV9MRVZFTF8x
MF8wKTsKLSAgICByZXR1cm4gTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SU19EM0QxMTsKLX0K
LQotdW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldE1heFZhcnlpbmdWZWN0b3JzKCkgY29uc3QK
LXsKLSAgICBNRVRBX0FTU0VSVChnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZBUllJTkdfVkVDVE9S
UyA9PSBEM0QxMV9WU19PVVRQVVRfUkVHSVNURVJfQ09VTlQpOwotICAgIHN3aXRjaCAobUZlYXR1
cmVMZXZlbCkKLSAgICB7Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6Ci0gICAg
ICAgIHJldHVybiBEM0QxMV9WU19PVVRQVVRfUkVHSVNURVJfQ09VTlQ7Ci0gICAgICBjYXNlIEQz
RF9GRUFUVVJFX0xFVkVMXzEwXzE6Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6
Ci0gICAgICAgIHJldHVybiBEM0QxMF9WU19PVVRQVVRfUkVHSVNURVJfQ09VTlQ7Ci0gICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLWJv
b2wgUmVuZGVyZXIxMTo6Z2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25zdAotewotICAg
IHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKLSAgICB7Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xF
VkVMXzExXzA6Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6Ci0gICAgICBjYXNl
IEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQot
Ym9vbCBSZW5kZXJlcjExOjpnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKSBjb25zdAotewotICAg
IHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKLSAgICB7Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xF
VkVMXzExXzA6Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6Ci0gICAgICBjYXNl
IEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQot
Ym9vbCBSZW5kZXJlcjExOjpnZXRJbnN0YW5jaW5nU3VwcG9ydCgpIGNvbnN0Ci17Ci0gICAgc3dp
dGNoIChtRmVhdHVyZUxldmVsKQotICAgIHsKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxf
MTFfMDoKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKLSAgICAgIGNhc2UgRDNE
X0ZFQVRVUkVfTEVWRUxfMTBfMDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29s
IFJlbmRlcmVyMTE6OmdldFNoYXJlSGFuZGxlU3VwcG9ydCgpIGNvbnN0Ci17Ci0gICAgLy8gV2Ug
b25seSBjdXJyZW50bHkgc3VwcG9ydCBzaGFyZSBoYW5kbGVzIHdpdGggQkdSQSBzdXJmYWNlcywg
YmVjYXVzZQotICAgIC8vIGNocm9tZSBuZWVkcyBCR1JBLiBPbmNlIGNocm9tZSBmaXhlcyB0aGlz
LCB3ZSBzaG91bGQgYWx3YXlzIHN1cHBvcnQgdGhlbS4KLSAgICAvLyBQSVggZG9lc24ndCBzZWVt
IHRvIHN1cHBvcnQgdXNpbmcgc2hhcmUgaGFuZGxlcywgc28gZGlzYWJsZSB0aGVtLgotICAgIHJl
dHVybiBnZXRCR1JBVGV4dHVyZVN1cHBvcnQoKSAmJiAhZ2w6OnBlcmZBY3RpdmUoKTsKLX0KLQot
Ym9vbCBSZW5kZXJlcjExOjpnZXREZXJpdmF0aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0KCkgY29uc3QK
LXsKLSAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCi0gICAgewotICAgICAgY2FzZSBEM0RfRkVB
VFVSRV9MRVZFTF8xMV8wOgotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgotICAg
ICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci19Ci0KLWJvb2wgUmVuZGVyZXIxMTo6Z2V0UG9zdFN1YkJ1ZmZlclN1cHBvcnQoKSBjb25zdAot
ewotICAgIC8vIEQzRDExIGRvZXMgbm90IHN1cHBvcnQgcHJlc2VudCB3aXRoIGRpcnR5IHJlY3Rh
bmdsZXMgdW50aWwgRDNEMTEuMSBhbmQgRFhHSSAxLjIuCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1pbnQgUmVuZGVyZXIxMTo6Z2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNvbnN0Ci17Ci0gICAgc3dp
dGNoIChtRmVhdHVyZUxldmVsKQotICAgIHsKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxf
MTFfMDogcmV0dXJuIEQzRDExX1NIQURFUl9NQUpPUl9WRVJTSU9OOyAgIC8vIDUKLSAgICAgIGNh
c2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMTogcmV0dXJuIEQzRDEwXzFfU0hBREVSX01BSk9SX1ZF
UlNJT047IC8vIDQKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDogcmV0dXJuIEQz
RDEwX1NIQURFUl9NQUpPUl9WRVJTSU9OOyAgIC8vIDQKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1pbnQgUmVuZGVyZXIxMTo6Z2V0TWlu
b3JTaGFkZXJNb2RlbCgpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQotICAg
IHsKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDogcmV0dXJuIEQzRDExX1NIQURF
Ul9NSU5PUl9WRVJTSU9OOyAgIC8vIDAKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBf
MTogcmV0dXJuIEQzRDEwXzFfU0hBREVSX01JTk9SX1ZFUlNJT047IC8vIDEKLSAgICAgIGNhc2Ug
RDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDogcmV0dXJuIEQzRDEwX1NIQURFUl9NSU5PUl9WRVJTSU9O
OyAgIC8vIDAKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotfQotCi1mbG9hdCBSZW5kZXJlcjExOjpnZXRNYXhQb2ludFNpemUoKSBjb25zdAotewot
ICAgIC8vIGNob29zZSBhIHJlYXNvbmFibGUgbWF4aW11bS4gd2UgZW5mb3JjZSB0aGlzIGluIHRo
ZSBzaGFkZXIuCi0gICAgLy8gKG5iOiBvbiBhIFJhZGVvbiAyNjAweHQsIERYOSByZXBvcnRzIGEg
MjU2IG1heCBwb2ludCBzaXplKQotICAgIHJldHVybiAxMDI0LjBmOwotfQotCi1pbnQgUmVuZGVy
ZXIxMTo6Z2V0TWF4Vmlld3BvcnREaW1lbnNpb24oKSBjb25zdAotewotICAgIC8vIE1heGltdW0g
dmlld3BvcnQgc2l6ZSBtdXN0IGJlIGF0IGxlYXN0IGFzIGxhcmdlIGFzIHRoZSBsYXJnZXN0IHJl
bmRlciBidWZmZXIgKG9yIGxhcmdlcikuCi0gICAgLy8gSW4gb3VyIGNhc2UgcmV0dXJuIHRoZSBt
YXhpbXVtIHRleHR1cmUgc2l6ZSwgd2hpY2ggaXMgdGhlIG1heGltdW0gcmVuZGVyIGJ1ZmZlciBz
aXplLgotICAgIE1FVEFfQVNTRVJUKEQzRDExX1JFUV9URVhUVVJFMkRfVV9PUl9WX0RJTUVOU0lP
TiAqIDIgLSAxIDw9IEQzRDExX1ZJRVdQT1JUX0JPVU5EU19NQVgpOwotICAgIE1FVEFfQVNTRVJU
KEQzRDEwX1JFUV9URVhUVVJFMkRfVV9PUl9WX0RJTUVOU0lPTiAqIDIgLSAxIDw9IEQzRDEwX1ZJ
RVdQT1JUX0JPVU5EU19NQVgpOwotCi0gICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQotICAgIHsK
LSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDogCi0gICAgICAgIHJldHVybiBEM0Qx
MV9SRVFfVEVYVFVSRTJEX1VfT1JfVl9ESU1FTlNJT047ICAgLy8gMTYzODQKLSAgICAgIGNhc2Ug
RDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBf
MDogCi0gICAgICAgIHJldHVybiBEM0QxMF9SRVFfVEVYVFVSRTJEX1VfT1JfVl9ESU1FTlNJT047
ICAgLy8gODE5MgotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotfQotCi1pbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VGV4dHVyZVdpZHRo
KCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCi0gICAgewotICAgICAgY2Fz
ZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOiByZXR1cm4gRDNEMTFfUkVRX1RFWFRVUkUyRF9VX09S
X1ZfRElNRU5TSU9OOyAgIC8vIDE2Mzg0Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEw
XzE6Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6IHJldHVybiBEM0QxMF9SRVFf
VEVYVFVSRTJEX1VfT1JfVl9ESU1FTlNJT047ICAgLy8gODE5MgotICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLWludCBSZW5kZXJlcjExOjpn
ZXRNYXhUZXh0dXJlSGVpZ2h0KCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwp
Ci0gICAgewotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOiByZXR1cm4gRDNEMTFf
UkVRX1RFWFRVUkUyRF9VX09SX1ZfRElNRU5TSU9OOyAgIC8vIDE2Mzg0Ci0gICAgICBjYXNlIEQz
RF9GRUFUVVJFX0xFVkVMXzEwXzE6Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6
IHJldHVybiBEM0QxMF9SRVFfVEVYVFVSRTJEX1VfT1JfVl9ESU1FTlNJT047ICAgLy8gODE5Mgot
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0K
LWJvb2wgUmVuZGVyZXIxMTo6Z2V0MzJCaXRJbmRleFN1cHBvcnQoKSBjb25zdAotewotICAgIHN3
aXRjaCAobUZlYXR1cmVMZXZlbCkKLSAgICB7Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVM
XzExXzA6IAotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgotICAgICAgY2FzZSBE
M0RfRkVBVFVSRV9MRVZFTF8xMF8wOiByZXR1cm4gRDNEMTBfUkVRX0RSQVdJTkRFWEVEX0lOREVY
X0NPVU5UXzJfVE9fRVhQID49IDMyOyAgIC8vIHRydWUKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotaW50IFJlbmRlcmVyMTE6Omdl
dE1pblN3YXBJbnRlcnZhbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBSZW5k
ZXJlcjExOjpnZXRNYXhTd2FwSW50ZXJ2YWwoKSBjb25zdAotewotICAgIHJldHVybiA0OwotfQot
Ci1pbnQgUmVuZGVyZXIxMTo6Z2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1NYXhTdXBwb3J0ZWRTYW1wbGVzOwotfQotCi1pbnQgUmVuZGVyZXIxMTo6Z2V0TmVh
cmVzdFN1cHBvcnRlZFNhbXBsZXMoRFhHSV9GT1JNQVQgZm9ybWF0LCB1bnNpZ25lZCBpbnQgcmVx
dWVzdGVkKSBjb25zdAotewotICAgIGlmIChyZXF1ZXN0ZWQgPT0gMCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLQotICAgIE11bHRpc2FtcGxlU3VwcG9ydE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IG1NdWx0aXNhbXBsZVN1cHBvcnRNYXAuZmluZChmb3JtYXQpOwotICAgIGlm
IChpdGVyICE9IG1NdWx0aXNhbXBsZVN1cHBvcnRNYXAuZW5kKCkpCi0gICAgewotICAgICAgICBj
b25zdCBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvJiBpbmZvID0gaXRlci0+c2Vjb25kOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gcmVxdWVzdGVkIC0gMTsgaSA8IEQzRDExX01BWF9NVUxU
SVNBTVBMRV9TQU1QTEVfQ09VTlQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGlu
Zm8ucXVhbGl0eUxldmVsc1tpXSA+IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGkgKyAxOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0
dXJuIC0xOwotfQotCi11bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4UmVuZGVyVGFyZ2V0
cygpIGNvbnN0Ci17Ci0gICAgTUVUQV9BU1NFUlQoRDNEMTFfU0lNVUxUQU5FT1VTX1JFTkRFUl9U
QVJHRVRfQ09VTlQgPD0gZ2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlMpOwotICAg
IE1FVEFfQVNTRVJUKEQzRDEwX1NJTVVMVEFORU9VU19SRU5ERVJfVEFSR0VUX0NPVU5UIDw9IGds
OjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTKTsKLQotICAgIHN3aXRjaCAobUZlYXR1
cmVMZXZlbCkKLSAgICB7Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6Ci0gICAg
ICAgIHJldHVybiBEM0QxMV9TSU1VTFRBTkVPVVNfUkVOREVSX1RBUkdFVF9DT1VOVDsgIC8vIDgK
LSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKLSAgICAgIGNhc2UgRDNEX0ZFQVRV
UkVfTEVWRUxfMTBfMDoKLSAgICAgICAgcmV0dXJuIEQzRDEwX1NJTVVMVEFORU9VU19SRU5ERVJf
VEFSR0VUX0NPVU5UOyAgLy8gOAotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUo
KTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotfQotCi1ib29sIFJlbmRlcmVyMTE6OmNvcHlU
b1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpkZXN0LCBUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTJEICpzb3VyY2UpCi17Ci0gICAgaWYgKHNvdXJjZSAmJiBkZXN0KQotICAg
IHsKLSAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMV8yRCAqc291cmNlMTEgPSBUZXh0dXJlU3RvcmFn
ZTExXzJEOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yRChzb3VyY2UtPmdldFN0b3JhZ2VJbnN0YW5j
ZSgpKTsKLSAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMV8yRCAqZGVzdDExID0gVGV4dHVyZVN0b3Jh
Z2UxMV8yRDo6bWFrZVRleHR1cmVTdG9yYWdlMTFfMkQoZGVzdC0+Z2V0U3RvcmFnZUluc3RhbmNl
KCkpOwotCi0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5Db3B5UmVzb3VyY2UoZGVzdDExLT5nZXRC
YXNlVGV4dHVyZSgpLCBzb3VyY2UxMS0+Z2V0QmFzZVRleHR1cmUoKSk7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJlcjEx
Ojpjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpkZXN0LCBU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnNvdXJjZSkKLXsKLSAgICBpZiAoc291cmNlICYm
IGRlc3QpCi0gICAgewotICAgICAgICBUZXh0dXJlU3RvcmFnZTExX0N1YmUgKnNvdXJjZTExID0g
VGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKHNvdXJjZS0+
Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwotICAgICAgICBUZXh0dXJlU3RvcmFnZTExX0N1YmUgKmRl
c3QxMSA9IFRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlMTFfQ3ViZShk
ZXN0LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0KLSAgICAgICAgbURldmljZUNvbnRleHQtPkNv
cHlSZXNvdXJjZShkZXN0MTEtPmdldEJhc2VUZXh0dXJlKCksIHNvdXJjZTExLT5nZXRCYXNlVGV4
dHVyZSgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIFJlbmRlcmVyMTE6OmNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1l
YnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1h
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIEdMaW50IGxldmVsKQotewot
ICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gZnJhbWVidWZmZXItPmdldFJlYWRD
b2xvcmJ1ZmZlcigpOwotICAgIGlmICghY29sb3JidWZmZXIpCi0gICAgewotICAgICAgICBFUlIo
IkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgY29sb3IgYnVmZmVyIGZyb20gdGhlIGZyYW1lIGJ1ZmZl
ci4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7
Ci0gICAgfQotCi0gICAgUmVuZGVyVGFyZ2V0MTEgKnNvdXJjZVJlbmRlclRhcmdldCA9IFJlbmRl
clRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoY29sb3JidWZmZXItPmdldFJlbmRlclRhcmdl
dCgpKTsKLSAgICBpZiAoIXNvdXJjZVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIEVSUigi
RmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGZyYW1lIGJ1ZmZl
ci4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7
Ci0gICAgfQotCi0gICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzb3VyY2UgPSBzb3VyY2VS
ZW5kZXJUYXJnZXQtPmdldFNoYWRlclJlc291cmNlVmlldygpOwotICAgIGlmICghc291cmNlKQot
ICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQg
dmlldyBmcm9tIHRoZSByZW5kZXIgdGFyZ2V0LiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBUZXh0dXJlU3RvcmFnZTEx
XzJEICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFnZTExXzJEOjptYWtlVGV4dHVyZVN0b3JhZ2Ux
MV8yRChzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgaWYgKCFzdG9yYWdlMTEp
Ci0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgdGV4dHVyZSBzdG9y
YWdlIGZyb20gdGhlIGRlc3RpbmF0aW9uLiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBSZW5kZXJUYXJnZXQxMSAqZGVz
dFJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoc3RvcmFn
ZTExLT5nZXRSZW5kZXJUYXJnZXQobGV2ZWwpKTsKLSAgICBpZiAoIWRlc3RSZW5kZXJUYXJnZXQp
Ci0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdl
dCBmcm9tIHRoZSBkZXN0aW5hdGlvbiBzdG9yYWdlLiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBJRDNEMTFSZW5kZXJU
YXJnZXRWaWV3ICpkZXN0ID0gZGVzdFJlbmRlclRhcmdldC0+Z2V0UmVuZGVyVGFyZ2V0Vmlldygp
OwotICAgIGlmICghZGVzdCkKLSAgICB7Ci0gICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZl
IHRoZSByZW5kZXIgdGFyZ2V0IHZpZXcgZnJvbSB0aGUgZGVzdGluYXRpb24gcmVuZGVyIHRhcmdl
dC4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7
Ci0gICAgfQotCi0gICAgZ2w6OlJlY3RhbmdsZSBkZXN0UmVjdDsKLSAgICBkZXN0UmVjdC54ID0g
eG9mZnNldDsKLSAgICBkZXN0UmVjdC55ID0geW9mZnNldDsKLSAgICBkZXN0UmVjdC53aWR0aCA9
IHNvdXJjZVJlY3Qud2lkdGg7Ci0gICAgZGVzdFJlY3QuaGVpZ2h0ID0gc291cmNlUmVjdC5oZWln
aHQ7Ci0KLSAgICBib29sIHJldCA9IGNvcHlUZXh0dXJlKHNvdXJjZSwgc291cmNlUmVjdCwgc291
cmNlUmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBzb3VyY2VSZW5kZXJUYXJnZXQtPmdldEhlaWdo
dCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCwgZGVzdFJlY3QsIGRlc3RSZW5k
ZXJUYXJnZXQtPmdldFdpZHRoKCksIGRlc3RSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCBkZXN0
Rm9ybWF0KTsKLQotICAgIHJldHVybiByZXQ7Ci19Ci0KLWJvb2wgUmVuZGVyZXIxMTo6Y29weUlt
YWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNv
dXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJl
ICpzdG9yYWdlLCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkKLXsKLSAgICBnbDo6UmVuZGVy
YnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRSZWFkQ29sb3JidWZmZXIoKTsK
LSAgICBpZiAoIWNvbG9yYnVmZmVyKQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0
cmlldmUgdGhlIGNvbG9yIGJ1ZmZlciBmcm9tIHRoZSBmcmFtZSBidWZmZXIuIik7Ci0gICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAgIH0KLQotICAg
IFJlbmRlclRhcmdldDExICpzb3VyY2VSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFr
ZVJlbmRlclRhcmdldDExKGNvbG9yYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSk7Ci0gICAgaWYg
KCFzb3VyY2VSZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRy
aWV2ZSB0aGUgcmVuZGVyIHRhcmdldCBmcm9tIHRoZSBmcmFtZSBidWZmZXIuIik7Ci0gICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAgIH0KLQotICAg
IElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc291cmNlID0gc291cmNlUmVuZGVyVGFyZ2V0LT5n
ZXRTaGFkZXJSZXNvdXJjZVZpZXcoKTsKLSAgICBpZiAoIXNvdXJjZSkKLSAgICB7Ci0gICAgICAg
IEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0IHZpZXcgZnJvbSB0aGUg
cmVuZGVyIHRhcmdldC4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlICpzdG9yYWdl
MTEgPSBUZXh0dXJlU3RvcmFnZTExX0N1YmU6Om1ha2VUZXh0dXJlU3RvcmFnZTExX0N1YmUoc3Rv
cmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwotICAgIGlmICghc3RvcmFnZTExKQotICAgIHsK
LSAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHRleHR1cmUgc3RvcmFnZSBmcm9t
IHRoZSBkZXN0aW5hdGlvbi4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3RSZW5kZXJU
YXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKHN0b3JhZ2UxMS0+Z2V0
UmVuZGVyVGFyZ2V0KHRhcmdldCwgbGV2ZWwpKTsKLSAgICBpZiAoIWRlc3RSZW5kZXJUYXJnZXQp
Ci0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdl
dCBmcm9tIHRoZSBkZXN0aW5hdGlvbiBzdG9yYWdlLiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBJRDNEMTFSZW5kZXJU
YXJnZXRWaWV3ICpkZXN0ID0gZGVzdFJlbmRlclRhcmdldC0+Z2V0UmVuZGVyVGFyZ2V0Vmlldygp
OwotICAgIGlmICghZGVzdCkKLSAgICB7Ci0gICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZl
IHRoZSByZW5kZXIgdGFyZ2V0IHZpZXcgZnJvbSB0aGUgZGVzdGluYXRpb24gcmVuZGVyIHRhcmdl
dC4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7
Ci0gICAgfQotCi0gICAgZ2w6OlJlY3RhbmdsZSBkZXN0UmVjdDsKLSAgICBkZXN0UmVjdC54ID0g
eG9mZnNldDsKLSAgICBkZXN0UmVjdC55ID0geW9mZnNldDsKLSAgICBkZXN0UmVjdC53aWR0aCA9
IHNvdXJjZVJlY3Qud2lkdGg7Ci0gICAgZGVzdFJlY3QuaGVpZ2h0ID0gc291cmNlUmVjdC5oZWln
aHQ7Ci0KLSAgICBib29sIHJldCA9IGNvcHlUZXh0dXJlKHNvdXJjZSwgc291cmNlUmVjdCwgc291
cmNlUmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBzb3VyY2VSZW5kZXJUYXJnZXQtPmdldEhlaWdo
dCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCwgZGVzdFJlY3QsIGRlc3RSZW5k
ZXJUYXJnZXQtPmdldFdpZHRoKCksIGRlc3RSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCBkZXN0
Rm9ybWF0KTsKLQotICAgIHJldHVybiByZXQ7Ci19Ci0KLWJvb2wgUmVuZGVyZXIxMTo6Y29weVRl
eHR1cmUoSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzb3VyY2UsIGNvbnN0IGdsOjpSZWN0YW5n
bGUgJnNvdXJjZUFyZWEsIHVuc2lnbmVkIGludCBzb3VyY2VXaWR0aCwgdW5zaWduZWQgaW50IHNv
dXJjZUhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUQzRDExUmVuZGVyVGFy
Z2V0VmlldyAqZGVzdCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZGVzdEFyZWEsIHVuc2lnbmVkIGlu
dCBkZXN0V2lkdGgsIHVuc2lnbmVkIGludCBkZXN0SGVpZ2h0LCBHTGVudW0gZGVzdEZvcm1hdCkK
LXsKLSAgICBIUkVTVUxUIHJlc3VsdDsKLQotICAgIGlmICghbUNvcHlSZXNvdXJjZXNJbml0aWFs
aXplZCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghbUNvcHlWQiAmJiAhbUNvcHlTYW1wbGVyICYm
ICFtQ29weUlMICYmICFtQ29weVZTICYmICFtQ29weVJHQkFQUyAmJiAhbUNvcHlSR0JQUyAmJiAh
bUNvcHlMdW1QUyAmJiAhbUNvcHlMdW1BbHBoYVBTKTsKLQotICAgICAgICBEM0QxMV9CVUZGRVJf
REVTQyB2YkRlc2M7Ci0gICAgICAgIHZiRGVzYy5CeXRlV2lkdGggPSBzaXplb2YoZDNkMTE6OlBv
c2l0aW9uVGV4Q29vcmRWZXJ0ZXgpICogNDsKLSAgICAgICAgdmJEZXNjLlVzYWdlID0gRDNEMTFf
VVNBR0VfRFlOQU1JQzsKLSAgICAgICAgdmJEZXNjLkJpbmRGbGFncyA9IEQzRDExX0JJTkRfVkVS
VEVYX0JVRkZFUjsKLSAgICAgICAgdmJEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FD
Q0VTU19XUklURTsKLSAgICAgICAgdmJEZXNjLk1pc2NGbGFncyA9IDA7Ci0gICAgICAgIHZiRGVz
Yy5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5D
cmVhdGVCdWZmZXIoJnZiRGVzYywgTlVMTCwgJm1Db3B5VkIpOwotICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5VkIsICJS
ZW5kZXJlcjExIGNvcHkgdGV4dHVyZSB2ZXJ0ZXggYnVmZmVyIik7Ci0KLSAgICAgICAgRDNEMTFf
U0FNUExFUl9ERVNDIHNhbXBsZXJEZXNjOwotICAgICAgICBzYW1wbGVyRGVzYy5GaWx0ZXIgPSBE
M0QxMV9GSUxURVJfTUlOX01BR19NSVBfTElORUFSOwotICAgICAgICBzYW1wbGVyRGVzYy5BZGRy
ZXNzVSA9IEQzRDExX1RFWFRVUkVfQUREUkVTU19DTEFNUDsKLSAgICAgICAgc2FtcGxlckRlc2Mu
QWRkcmVzc1YgPSBEM0QxMV9URVhUVVJFX0FERFJFU1NfQ0xBTVA7Ci0gICAgICAgIHNhbXBsZXJE
ZXNjLkFkZHJlc3NXID0gRDNEMTFfVEVYVFVSRV9BRERSRVNTX0NMQU1QOwotICAgICAgICBzYW1w
bGVyRGVzYy5NaXBMT0RCaWFzID0gMC4wZjsKLSAgICAgICAgc2FtcGxlckRlc2MuTWF4QW5pc290
cm9weSA9IDA7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkNvbXBhcmlzb25GdW5jID0gRDNEMTFfQ09N
UEFSSVNPTl9ORVZFUjsKLSAgICAgICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbMF0gPSAwLjBm
OwotICAgICAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclsxXSA9IDAuMGY7Ci0gICAgICAgIHNh
bXBsZXJEZXNjLkJvcmRlckNvbG9yWzJdID0gMC4wZjsKLSAgICAgICAgc2FtcGxlckRlc2MuQm9y
ZGVyQ29sb3JbM10gPSAwLjBmOwotICAgICAgICBzYW1wbGVyRGVzYy5NaW5MT0QgPSAwLjBmOwot
ICAgICAgICBzYW1wbGVyRGVzYy5NYXhMT0QgPSAwLjBmOwotCi0gICAgICAgIHJlc3VsdCA9IG1E
ZXZpY2UtPkNyZWF0ZVNhbXBsZXJTdGF0ZSgmc2FtcGxlckRlc2MsICZtQ29weVNhbXBsZXIpOwot
ICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVi
dWdOYW1lKG1Db3B5U2FtcGxlciwgIlJlbmRlcmVyMTEgY29weSBzYW1wbGVyIik7Ci0KLSAgICAg
ICAgRDNEMTFfSU5QVVRfRUxFTUVOVF9ERVNDIHF1YWRMYXlvdXRbXSA9Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIHsgIlBPU0lUSU9OIiwgMCwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCAwLCAw
LCBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAgfSwKLSAgICAgICAgICAgIHsgIlRFWENP
T1JEIiwgMCwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCAwLCA4LCBEM0QxMV9JTlBVVF9QRVJf
VkVSVEVYX0RBVEEsIDAgfSwKLSAgICAgICAgfTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNl
LT5DcmVhdGVJbnB1dExheW91dChxdWFkTGF5b3V0LCAyLCBnX1ZTX1Bhc3N0aHJvdWdoLCBzaXpl
b2YoZ19WU19QYXNzdGhyb3VnaCksICZtQ29weUlMKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURF
RChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ29weUlMLCAiUmVuZGVy
ZXIxMSBjb3B5IHRleHR1cmUgaW5wdXQgbGF5b3V0Iik7Ci0KLSAgICAgICAgcmVzdWx0ID0gbURl
dmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKGdfVlNfUGFzc3Rocm91Z2gsIHNpemVvZihnX1ZTX1Bh
c3N0aHJvdWdoKSwgTlVMTCwgJm1Db3B5VlMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5VlMsICJSZW5kZXJlcjEx
IGNvcHkgdGV4dHVyZSB2ZXJ0ZXggc2hhZGVyIik7Ci0KLSAgICAgICAgcmVzdWx0ID0gbURldmlj
ZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19QYXNzdGhyb3VnaFJHQkEsIHNpemVvZihnX1BTX1Bh
c3N0aHJvdWdoUkdCQSksIE5VTEwsICZtQ29weVJHQkFQUyk7Ci0gICAgICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNvcHlSR0JBUFMs
ICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSBSR0JBIHBpeGVsIHNoYWRlciIpOwotCi0gICAgICAg
IHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdfUFNfUGFzc3Rocm91Z2hSR0Is
IHNpemVvZihnX1BTX1Bhc3N0aHJvdWdoUkdCKSwgTlVMTCwgJm1Db3B5UkdCUFMpOwotICAgICAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1l
KG1Db3B5UkdCUFMsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSBSR0IgcGl4ZWwgc2hhZGVyIik7
Ci0KLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19QYXNz
dGhyb3VnaEx1bSwgc2l6ZW9mKGdfUFNfUGFzc3Rocm91Z2hMdW0pLCBOVUxMLCAmbUNvcHlMdW1Q
Uyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpT
ZXREZWJ1Z05hbWUobUNvcHlMdW1QUywgIlJlbmRlcmVyMTEgY29weSB0ZXh0dXJlIGx1bWluYW5j
ZSBwaXhlbCBzaGFkZXIiKTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhl
bFNoYWRlcihnX1BTX1Bhc3N0aHJvdWdoTHVtQWxwaGEsIHNpemVvZihnX1BTX1Bhc3N0aHJvdWdo
THVtQWxwaGEpLCBOVUxMLCAmbUNvcHlMdW1BbHBoYVBTKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ29weUx1bUFscGhh
UFMsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSBsdW1pbmFuY2UgYWxwaGEgcGl4ZWwgc2hhZGVy
Iik7Ci0KLSAgICAgICAgbUNvcHlSZXNvdXJjZXNJbml0aWFsaXplZCA9IHRydWU7Ci0gICAgfQot
Ci0gICAgLy8gVmVyaWZ5IHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZWEgc2l6ZXMKLSAg
ICBpZiAoc291cmNlQXJlYS54IDwgMCB8fCBzb3VyY2VBcmVhLnggKyBzb3VyY2VBcmVhLndpZHRo
ID4gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VXaWR0aCkgfHwKLSAgICAgICAgc291cmNlQXJlYS55
IDwgMCB8fCBzb3VyY2VBcmVhLnkgKyBzb3VyY2VBcmVhLmhlaWdodCA+IHN0YXRpY19jYXN0PGlu
dD4oc291cmNlSGVpZ2h0KSB8fAotICAgICAgICBkZXN0QXJlYS54IDwgMCB8fCBkZXN0QXJlYS54
ICsgZGVzdEFyZWEud2lkdGggPiBzdGF0aWNfY2FzdDxpbnQ+KGRlc3RXaWR0aCkgfHwKLSAgICAg
ICAgZGVzdEFyZWEueSA8IDAgfHwgZGVzdEFyZWEueSArIGRlc3RBcmVhLmhlaWdodCA+IHN0YXRp
Y19jYXN0PGludD4oZGVzdEhlaWdodCkpCi0gICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfVkFMVUUsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICAvLyBTZXQgdmVydGljZXMK
LSAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7Ci0gICAgcmVzdWx0
ID0gbURldmljZUNvbnRleHQtPk1hcChtQ29weVZCLCAwLCBEM0QxMV9NQVBfV1JJVEVfRElTQ0FS
RCwgMCwgJm1hcHBlZFJlc291cmNlKTsKLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewot
ICAgICAgICBFUlIoIkZhaWxlZCB0byBtYXAgdmVydGV4IGJ1ZmZlciBmb3IgdGV4dHVyZSBjb3B5
LCBIUkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAgIH0KLQotICAgIGQzZDExOjpQb3NpdGlvblRleENv
b3JkVmVydGV4ICp2ZXJ0aWNlcyA9IHN0YXRpY19jYXN0PGQzZDExOjpQb3NpdGlvblRleENvb3Jk
VmVydGV4Kj4obWFwcGVkUmVzb3VyY2UucERhdGEpOwotCi0gICAgLy8gQ3JlYXRlIGEgcXVhZCBp
biBob21vZ2VuZW91cyBjb29yZGluYXRlcwotICAgIGZsb2F0IHgxID0gKGRlc3RBcmVhLnggLyBm
bG9hdChkZXN0V2lkdGgpKSAqIDIuMGYgLSAxLjBmOwotICAgIGZsb2F0IHkxID0gKChkZXN0SGVp
Z2h0IC0gZGVzdEFyZWEueSAtIGRlc3RBcmVhLmhlaWdodCkgLyBmbG9hdChkZXN0SGVpZ2h0KSkg
KiAyLjBmIC0gMS4wZjsKLSAgICBmbG9hdCB4MiA9ICgoZGVzdEFyZWEueCArIGRlc3RBcmVhLndp
ZHRoKSAvIGZsb2F0KGRlc3RXaWR0aCkpICogMi4wZiAtIDEuMGY7Ci0gICAgZmxvYXQgeTIgPSAo
KGRlc3RIZWlnaHQgLSBkZXN0QXJlYS55KSAvIGZsb2F0KGRlc3RIZWlnaHQpKSAqIDIuMGYgLSAx
LjBmOwotCi0gICAgZmxvYXQgdTEgPSBzb3VyY2VBcmVhLnggLyBmbG9hdChzb3VyY2VXaWR0aCk7
Ci0gICAgZmxvYXQgdjEgPSBzb3VyY2VBcmVhLnkgLyBmbG9hdChzb3VyY2VIZWlnaHQpOwotICAg
IGZsb2F0IHUyID0gKHNvdXJjZUFyZWEueCArIHNvdXJjZUFyZWEud2lkdGgpIC8gZmxvYXQoc291
cmNlV2lkdGgpOwotICAgIGZsb2F0IHYyID0gKHNvdXJjZUFyZWEueSArIHNvdXJjZUFyZWEuaGVp
Z2h0KSAvIGZsb2F0KHNvdXJjZUhlaWdodCk7Ci0KLSAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhD
b29yZFZlcnRleCgmdmVydGljZXNbMF0sIHgxLCB5MSwgdTEsIHYyKTsKLSAgICBkM2QxMTo6U2V0
UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNbMV0sIHgxLCB5MiwgdTEsIHYxKTsKLSAg
ICBkM2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNbMl0sIHgyLCB5MSwg
dTIsIHYyKTsKLSAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNb
M10sIHgyLCB5MiwgdTIsIHYxKTsKLQotICAgIG1EZXZpY2VDb250ZXh0LT5Vbm1hcChtQ29weVZC
LCAwKTsKLQotICAgIHN0YXRpYyBVSU5UIHN0cmlkZSA9IHNpemVvZihkM2QxMTo6UG9zaXRpb25U
ZXhDb29yZFZlcnRleCk7Ci0gICAgc3RhdGljIFVJTlQgc3RhcnRJZHggPSAwOwotICAgIG1EZXZp
Y2VDb250ZXh0LT5JQVNldFZlcnRleEJ1ZmZlcnMoMCwgMSwgJm1Db3B5VkIsICZzdHJpZGUsICZz
dGFydElkeCk7Ci0KLSAgICAvLyBBcHBseSBzdGF0ZQotICAgIG1EZXZpY2VDb250ZXh0LT5PTVNl
dEJsZW5kU3RhdGUoTlVMTCwgTlVMTCwgMHhGRkZGRkZGKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+
T01TZXREZXB0aFN0ZW5jaWxTdGF0ZShOVUxMLCAweEZGRkZGRkZGKTsKLSAgICBtRGV2aWNlQ29u
dGV4dC0+UlNTZXRTdGF0ZShOVUxMKTsKLQotICAgIC8vIEFwcGx5IHNoYWRlcnMKLSAgICBtRGV2
aWNlQ29udGV4dC0+SUFTZXRJbnB1dExheW91dChtQ29weUlMKTsKLSAgICBtRGV2aWNlQ29udGV4
dC0+SUFTZXRQcmltaXRpdmVUb3BvbG9neShEM0RfUFJJTUlUSVZFX1RPUE9MT0dZX1RSSUFOR0xF
U1RSSVApOwotICAgIG1EZXZpY2VDb250ZXh0LT5WU1NldFNoYWRlcihtQ29weVZTLCBOVUxMLCAw
KTsKLQotICAgIElEM0QxMVBpeGVsU2hhZGVyICpwcyA9IE5VTEw7Ci0gICAgc3dpdGNoKGRlc3RG
b3JtYXQpCi0gICAgewotICAgICAgY2FzZSBHTF9SR0JBOiAgICAgICAgICAgIHBzID0gbUNvcHlS
R0JBUFM7ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCOiAgICAgICAgICAgICBwcyA9IG1D
b3B5UkdCUFM7ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FMUEhBOiAgICAgICAgICAgcHMg
PSBtQ29weVJHQkFQUzsgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CR1JBX0VYVDogICAgICAg
IHBzID0gbUNvcHlSR0JBUFM7ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOiAg
ICAgICBwcyA9IG1Db3B5THVtUFM7ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5D
RV9BTFBIQTogcHMgPSBtQ29weUx1bUFscGhhUFM7IGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsgIHBzID0gTlVMTDsgICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBt
RGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIocHMsIE5VTEwsIDApOwotICAgIG1EZXZpY2VDb250
ZXh0LT5HU1NldFNoYWRlcihOVUxMLCBOVUxMLCAwKTsKLQotICAgIC8vIFVuc2V0IHRoZSBjdXJy
ZW50bHkgYm91bmQgc2hhZGVyIHJlc291cmNlIHRvIGF2b2lkIGNvbmZsaWN0cwotICAgIHN0YXRp
YyBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmNvbnN0IG51bGxTUlYgPSBOVUxMOwotICAgIG1E
ZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlclJlc291cmNlcygwLCAxLCAmbnVsbFNSVik7Ci0KLSAg
ICAvLyBBcHBseSByZW5kZXIgdGFyZ2V0Ci0gICAgc2V0T25lVGltZVJlbmRlclRhcmdldChkZXN0
KTsKLQotICAgIC8vIFNldCB0aGUgdmlld3BvcnQKLSAgICBEM0QxMV9WSUVXUE9SVCB2aWV3cG9y
dDsKLSAgICB2aWV3cG9ydC5Ub3BMZWZ0WCA9IDA7Ci0gICAgdmlld3BvcnQuVG9wTGVmdFkgPSAw
OwotICAgIHZpZXdwb3J0LldpZHRoID0gZGVzdFdpZHRoOwotICAgIHZpZXdwb3J0LkhlaWdodCA9
IGRlc3RIZWlnaHQ7Ci0gICAgdmlld3BvcnQuTWluRGVwdGggPSAwLjBmOwotICAgIHZpZXdwb3J0
Lk1heERlcHRoID0gMS4wZjsKLSAgICBtRGV2aWNlQ29udGV4dC0+UlNTZXRWaWV3cG9ydHMoMSwg
JnZpZXdwb3J0KTsKLQotICAgIC8vIEFwcGx5IHRleHR1cmVzCi0gICAgbURldmljZUNvbnRleHQt
PlBTU2V0U2hhZGVyUmVzb3VyY2VzKDAsIDEsICZzb3VyY2UpOwotICAgIG1EZXZpY2VDb250ZXh0
LT5QU1NldFNhbXBsZXJzKDAsIDEsICZtQ29weVNhbXBsZXIpOwotCi0gICAgLy8gRHJhdyB0aGUg
cXVhZAotICAgIG1EZXZpY2VDb250ZXh0LT5EcmF3KDQsIDApOwotCi0gICAgLy8gVW5iaW5kIHRl
eHR1cmVzIGFuZCByZW5kZXIgdGFyZ2V0cyBhbmQgdmVydGV4IGJ1ZmZlcgotICAgIG1EZXZpY2VD
b250ZXh0LT5QU1NldFNoYWRlclJlc291cmNlcygwLCAxLCAmbnVsbFNSVik7Ci0KLSAgICB1bmFw
cGx5UmVuZGVyVGFyZ2V0cygpOwotCi0gICAgVUlOVCB6ZXJvID0gMDsKLSAgICBJRDNEMTFCdWZm
ZXIgKmNvbnN0IG51bGxCdWZmZXIgPSBOVUxMOwotICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldFZl
cnRleEJ1ZmZlcnMoMCwgMSwgJm51bGxCdWZmZXIsICZ6ZXJvLCAmemVybyk7Ci0KLSAgICBtYXJr
QWxsU3RhdGVEaXJ0eSgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVyZXIx
MTo6dW5hcHBseVJlbmRlclRhcmdldHMoKQotewotICAgIHNldE9uZVRpbWVSZW5kZXJUYXJnZXQo
TlVMTCk7Ci19Ci0KLXZvaWQgUmVuZGVyZXIxMTo6c2V0T25lVGltZVJlbmRlclRhcmdldChJRDNE
MTFSZW5kZXJUYXJnZXRWaWV3ICpyZW5kZXJUYXJnZXRWaWV3KQotewotICAgIElEM0QxMVJlbmRl
clRhcmdldFZpZXcgKnJ0dkFycmF5W2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJT
XSA9IHtOVUxMfTsKLQotICAgIHJ0dkFycmF5WzBdID0gcmVuZGVyVGFyZ2V0VmlldzsKLQotICAg
IG1EZXZpY2VDb250ZXh0LT5PTVNldFJlbmRlclRhcmdldHMoZ2V0TWF4UmVuZGVyVGFyZ2V0cygp
LCBydHZBcnJheSwgTlVMTCk7Ci0KLSAgICAvLyBEbyBub3QgcHJlc2VydmUgdGhlIHNlcmlhbCBm
b3IgdGhpcyBvbmUtdGltZS11c2UgcmVuZGVyIHRhcmdldAotICAgIGZvciAodW5zaWduZWQgaW50
IHJ0SW5kZXggPSAwOyBydEluZGV4IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZF
UlM7IHJ0SW5kZXgrKykKLSAgICB7Ci0gICAgICAgIG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFs
c1tydEluZGV4XSA9IDA7Ci0gICAgfQotfQotCi1SZW5kZXJUYXJnZXQgKlJlbmRlcmVyMTE6OmNy
ZWF0ZVJlbmRlclRhcmdldChTd2FwQ2hhaW4gKnN3YXBDaGFpbiwgYm9vbCBkZXB0aCkKLXsKLSAg
ICBTd2FwQ2hhaW4xMSAqc3dhcENoYWluMTEgPSBTd2FwQ2hhaW4xMTo6bWFrZVN3YXBDaGFpbjEx
KHN3YXBDaGFpbik7Ci0gICAgUmVuZGVyVGFyZ2V0MTEgKnJlbmRlclRhcmdldCA9IE5VTEw7Ci0K
LSAgICBpZiAoZGVwdGgpCi0gICAgewotICAgICAgICAvLyBOb3RlOiBkZXB0aCBzdGVuY2lsIG1h
eSBiZSBOVUxMIGZvciAwIHNpemVkIHN1cmZhY2VzCi0gICAgICAgIHJlbmRlclRhcmdldCA9IG5l
dyBSZW5kZXJUYXJnZXQxMSh0aGlzLCBzd2FwQ2hhaW4xMS0+Z2V0RGVwdGhTdGVuY2lsKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwQ2hhaW4xMS0+Z2V0
RGVwdGhTdGVuY2lsVGV4dHVyZSgpLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldFdpZHRoKCksIHN3YXBDaGFpbjExLT5nZXRI
ZWlnaHQoKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIC8vIE5vdGU6IHJlbmRl
ciB0YXJnZXQgbWF5IGJlIE5VTEwgZm9yIDAgc2l6ZWQgc3VyZmFjZXMKLSAgICAgICAgcmVuZGVy
VGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldDExKHRoaXMsIHN3YXBDaGFpbjExLT5nZXRSZW5kZXJU
YXJnZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBD
aGFpbjExLT5nZXRPZmZzY3JlZW5UZXh0dXJlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzd2FwQ2hhaW4xMS0+Z2V0UmVuZGVyVGFyZ2V0U2hhZGVyUmVzb3Vy
Y2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBDaGFp
bjExLT5nZXRXaWR0aCgpLCBzd2FwQ2hhaW4xMS0+Z2V0SGVpZ2h0KCkpOwotICAgIH0KLSAgICBy
ZXR1cm4gcmVuZGVyVGFyZ2V0OwotfQotCi1SZW5kZXJUYXJnZXQgKlJlbmRlcmVyMTE6OmNyZWF0
ZVJlbmRlclRhcmdldChpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6
ZWkgc2FtcGxlcywgYm9vbCBkZXB0aCkKLXsKLSAgICBSZW5kZXJUYXJnZXQxMSAqcmVuZGVyVGFy
Z2V0ID0gbmV3IFJlbmRlclRhcmdldDExKHRoaXMsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgc2Ft
cGxlcywgZGVwdGgpOwotICAgIHJldHVybiByZW5kZXJUYXJnZXQ7Ci19Ci0KLVNoYWRlckV4ZWN1
dGFibGUgKlJlbmRlcmVyMTE6OmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBz
aXplX3QgbGVuZ3RoLCByeDo6U2hhZGVyVHlwZSB0eXBlKQotewotICAgIFNoYWRlckV4ZWN1dGFi
bGUxMSAqZXhlY3V0YWJsZSA9IE5VTEw7Ci0KLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAg
ICAgY2FzZSByeDo6U0hBREVSX1ZFUlRFWDoKLSAgICAgICAgewotICAgICAgICAgICAgSUQzRDEx
VmVydGV4U2hhZGVyICp2c2hhZGVyID0gTlVMTDsKLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gbURldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKGZ1bmN0aW9uLCBsZW5ndGgsIE5VTEwsICZ2
c2hhZGVyKTsKLSAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAg
ICAgICAgIGlmICh2c2hhZGVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGV4ZWN1
dGFibGUgPSBuZXcgU2hhZGVyRXhlY3V0YWJsZTExKGZ1bmN0aW9uLCBsZW5ndGgsIHZzaGFkZXIp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBy
eDo6U0hBREVSX1BJWEVMOgotICAgICAgICB7Ci0gICAgICAgICAgICBJRDNEMTFQaXhlbFNoYWRl
ciAqcHNoYWRlciA9IE5VTEw7Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2Ut
PkNyZWF0ZVBpeGVsU2hhZGVyKGZ1bmN0aW9uLCBsZW5ndGgsIE5VTEwsICZwc2hhZGVyKTsKLSAg
ICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAgICAgIGlmIChw
c2hhZGVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBuZXcg
U2hhZGVyRXhlY3V0YWJsZTExKGZ1bmN0aW9uLCBsZW5ndGgsIHBzaGFkZXIpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSByeDo6U0hBREVSX0dF
T01FVFJZOgotICAgICAgICB7Ci0gICAgICAgICAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZ3No
YWRlciA9IE5VTEw7Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0
ZUdlb21ldHJ5U2hhZGVyKGZ1bmN0aW9uLCBsZW5ndGgsIE5VTEwsICZnc2hhZGVyKTsKLSAgICAg
ICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAgICAgIGlmIChnc2hh
ZGVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBuZXcgU2hh
ZGVyRXhlY3V0YWJsZTExKGZ1bmN0aW9uLCBsZW5ndGgsIGdzaGFkZXIpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5S
RUFDSEFCTEUoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIGV4ZWN1dGFi
bGU7Ci19Ci0KLVNoYWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyMTE6OmNvbXBpbGVUb0V4ZWN1dGFi
bGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRlckhMU0wsIHJ4OjpTaGFk
ZXJUeXBlIHR5cGUsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91bmQpCi17Ci0gICAgY29uc3Qg
Y2hhciAqcHJvZmlsZSA9IE5VTEw7Ci0KLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAg
Y2FzZSByeDo6U0hBREVSX1ZFUlRFWDoKLSAgICAgICAgcHJvZmlsZSA9ICJ2c180XzAiOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2Ugcng6OlNIQURFUl9QSVhFTDoKLSAgICAgICAgcHJvZmls
ZSA9ICJwc180XzAiOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ugcng6OlNIQURFUl9HRU9N
RVRSWToKLSAgICAgICAgcHJvZmlsZSA9ICJnc180XzAiOwotICAgICAgICBicmVhazsKLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwot
ICAgIH0KLQotICAgIElEM0RCbG9iICpiaW5hcnkgPSAoSUQzREJsb2IqKWNvbXBpbGVUb0JpbmFy
eShpbmZvTG9nLCBzaGFkZXJITFNMLCBwcm9maWxlLCBEM0RDT01QSUxFX09QVElNSVpBVElPTl9M
RVZFTDAsIGZhbHNlKTsKLSAgICBpZiAoIWJpbmFyeSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0K
LSAgICBTaGFkZXJFeGVjdXRhYmxlICpleGVjdXRhYmxlID0gbG9hZEV4ZWN1dGFibGUoKERXT1JE
ICopYmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksIGJpbmFyeS0+R2V0QnVmZmVyU2l6ZSgpLCB0
eXBlKTsKLSAgICBiaW5hcnktPlJlbGVhc2UoKTsKLQotICAgIHJldHVybiBleGVjdXRhYmxlOwot
fQotCi1WZXJ0ZXhCdWZmZXIgKlJlbmRlcmVyMTE6OmNyZWF0ZVZlcnRleEJ1ZmZlcigpCi17Ci0g
ICAgcmV0dXJuIG5ldyBWZXJ0ZXhCdWZmZXIxMSh0aGlzKTsKLX0KLQotSW5kZXhCdWZmZXIgKlJl
bmRlcmVyMTE6OmNyZWF0ZUluZGV4QnVmZmVyKCkKLXsKLSAgICByZXR1cm4gbmV3IEluZGV4QnVm
ZmVyMTEodGhpcyk7Ci19Ci0KLUJ1ZmZlclN0b3JhZ2UgKlJlbmRlcmVyMTE6OmNyZWF0ZUJ1ZmZl
clN0b3JhZ2UoKQotewotICAgIHJldHVybiBuZXcgQnVmZmVyU3RvcmFnZTExKHRoaXMpOwotfQot
Ci1RdWVyeUltcGwgKlJlbmRlcmVyMTE6OmNyZWF0ZVF1ZXJ5KEdMZW51bSB0eXBlKQotewotICAg
IHJldHVybiBuZXcgUXVlcnkxMSh0aGlzLCB0eXBlKTsKLX0KLQotRmVuY2VJbXBsICpSZW5kZXJl
cjExOjpjcmVhdGVGZW5jZSgpCi17Ci0gICAgcmV0dXJuIG5ldyBGZW5jZTExKHRoaXMpOwotfQot
Ci1ib29sIFJlbmRlcmVyMTE6OmdldFJlbmRlclRhcmdldFJlc291cmNlKGdsOjpSZW5kZXJidWZm
ZXIgKmNvbG9yYnVmZmVyLCB1bnNpZ25lZCBpbnQgKnN1YnJlc291cmNlSW5kZXgsIElEM0QxMVRl
eHR1cmUyRCAqKnJlc291cmNlKQotewotICAgIEFTU0VSVChjb2xvcmJ1ZmZlciAhPSBOVUxMKTsK
LQotICAgIFJlbmRlclRhcmdldDExICpyZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFr
ZVJlbmRlclRhcmdldDExKGNvbG9yYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSk7Ci0gICAgaWYg
KHJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgICpzdWJyZXNvdXJjZUluZGV4ID0gcmVuZGVy
VGFyZ2V0LT5nZXRTdWJyZXNvdXJjZUluZGV4KCk7Ci0KLSAgICAgICAgSUQzRDExUmVuZGVyVGFy
Z2V0VmlldyAqY29sb3JCdWZmZXJSVFYgPSByZW5kZXJUYXJnZXQtPmdldFJlbmRlclRhcmdldFZp
ZXcoKTsKLSAgICAgICAgaWYgKGNvbG9yQnVmZmVyUlRWKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBJRDNEMTFSZXNvdXJjZSAqdGV4dHVyZVJlc291cmNlID0gTlVMTDsKLSAgICAgICAgICAgIGNv
bG9yQnVmZmVyUlRWLT5HZXRSZXNvdXJjZSgmdGV4dHVyZVJlc291cmNlKTsKLQotICAgICAgICAg
ICAgaWYgKHRleHR1cmVSZXNvdXJjZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IHRleHR1cmVSZXNvdXJjZS0+UXVlcnlJbnRlcmZhY2UoSUlEX0lEM0Qx
MVRleHR1cmUyRCwgKHZvaWQqKilyZXNvdXJjZSk7Ci0gICAgICAgICAgICAgICAgdGV4dHVyZVJl
c291cmNlLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3Vs
dCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gZXh0cmFjdCB0aGUgSUQzRDEx
VGV4dHVyZTJEIGZyb20gdGhlIHJlbmRlciB0YXJnZXQgcmVzb3VyY2UsICIKLSAgICAgICAgICAg
ICAgICAgICAgICAgICJIUkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIFJlbmRlcmVyMTE6OmJsaXRSZWN0KGdsOjpGcmFtZWJ1ZmZlciAqcmVhZFRhcmdl
dCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGdsOjpGcmFtZWJ1ZmZlciAqZHJhd1Rh
cmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0RGVwdGhTdGVuY2lsKQotewot
ICAgIGlmIChibGl0UmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZl
ciAqcmVhZEJ1ZmZlciA9IHJlYWRUYXJnZXQtPmdldFJlYWRDb2xvcmJ1ZmZlcigpOwotCi0gICAg
ICAgIGlmICghcmVhZEJ1ZmZlcikKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJGYWlsZWQg
dG8gcmV0cmlldmUgdGhlIHJlYWQgYnVmZmVyIGZyb20gdGhlIHJlYWQgZnJhbWVidWZmZXIuIik7
Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsK
LSAgICAgICAgfQotCi0gICAgICAgIFJlbmRlclRhcmdldCAqcmVhZFJlbmRlclRhcmdldCA9IHJl
YWRCdWZmZXItPmdldFJlbmRlclRhcmdldCgpOwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaW50
IGNvbG9yQXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNobWVudCA8IGdsOjpJTVBMRU1FTlRBVElP
Tl9NQVhfRFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKGRyYXdUYXJnZXQtPmlzRW5hYmxlZENvbG9yQXR0YWNobWVudChjb2xvckF0dGFj
aG1lbnQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIg
KmRyYXdCdWZmZXIgPSBkcmF3VGFyZ2V0LT5nZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQp
OwotCi0gICAgICAgICAgICAgICAgaWYgKCFkcmF3QnVmZmVyKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIGRyYXcgYnVm
ZmVyIGZyb20gdGhlIGRyYXcgZnJhbWVidWZmZXIuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIFJlbmRlclRhcmdldCAqZHJhd1JlbmRlclRhcmdldCA9IGRy
YXdCdWZmZXItPmdldFJlbmRlclRhcmdldCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFibGl0
UmVuZGVyYnVmZmVyUmVjdChyZWFkUmVjdCwgZHJhd1JlY3QsIHJlYWRSZW5kZXJUYXJnZXQsIGRy
YXdSZW5kZXJUYXJnZXQsIGZhbHNlKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoYmxpdERlcHRoU3RlbmNpbCkKLSAgICB7Ci0gICAg
ICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlYWRCdWZmZXIgPSByZWFkVGFyZ2V0LT5nZXREZXB0aE9y
U3RlbmNpbGJ1ZmZlcigpOwotICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpkcmF3QnVmZmVyID0g
ZHJhd1RhcmdldC0+Z2V0RGVwdGhPclN0ZW5jaWxidWZmZXIoKTsKLQotICAgICAgICBpZiAoIXJl
YWRCdWZmZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZl
IHRoZSByZWFkIGRlcHRoLXN0ZW5jaWwgYnVmZmVyIGZyb20gdGhlIHJlYWQgZnJhbWVidWZmZXIu
Iik7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNl
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghZHJhd0J1ZmZlcikKLSAgICAgICAgewotICAg
ICAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIGRyYXcgZGVwdGgtc3RlbmNpbCBi
dWZmZXIgZnJvbSB0aGUgZHJhdyBmcmFtZWJ1ZmZlci4iKTsKLSAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAg
UmVuZGVyVGFyZ2V0ICpyZWFkUmVuZGVyVGFyZ2V0ID0gcmVhZEJ1ZmZlci0+Z2V0RGVwdGhTdGVu
Y2lsKCk7Ci0gICAgICAgIFJlbmRlclRhcmdldCAqZHJhd1JlbmRlclRhcmdldCA9IGRyYXdCdWZm
ZXItPmdldERlcHRoU3RlbmNpbCgpOwotCi0gICAgICAgIGlmICghYmxpdFJlbmRlcmJ1ZmZlclJl
Y3QocmVhZFJlY3QsIGRyYXdSZWN0LCByZWFkUmVuZGVyVGFyZ2V0LCBkcmF3UmVuZGVyVGFyZ2V0
LCB0cnVlKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVyZXIxMTo6cmVhZFBp
eGVscyhnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBHTGludCB4LCBHTGludCB5LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBvdXRwdXRQaXRjaCwgYm9vbCBwYWNr
UmV2ZXJzZVJvd09yZGVyLCBHTGludCBwYWNrQWxpZ25tZW50LCB2b2lkKiBwaXhlbHMpCi17Ci0g
ICAgSUQzRDExVGV4dHVyZTJEICpjb2xvckJ1ZmZlclRleHR1cmUgPSBOVUxMOwotICAgIHVuc2ln
bmVkIGludCBzdWJyZXNvdXJjZUluZGV4ID0gMDsKLQotICAgIGdsOjpSZW5kZXJidWZmZXIgKmNv
bG9yYnVmZmVyID0gZnJhbWVidWZmZXItPmdldFJlYWRDb2xvcmJ1ZmZlcigpOwotCi0gICAgaWYg
KGNvbG9yYnVmZmVyICYmIGdldFJlbmRlclRhcmdldFJlc291cmNlKGNvbG9yYnVmZmVyLCAmc3Vi
cmVzb3VyY2VJbmRleCwgJmNvbG9yQnVmZmVyVGV4dHVyZSkpCi0gICAgewotICAgICAgICBnbDo6
UmVjdGFuZ2xlIGFyZWE7Ci0gICAgICAgIGFyZWEueCA9IHg7Ci0gICAgICAgIGFyZWEueSA9IHk7
Ci0gICAgICAgIGFyZWEud2lkdGggPSB3aWR0aDsKLSAgICAgICAgYXJlYS5oZWlnaHQgPSBoZWln
aHQ7Ci0KLSAgICAgICAgcmVhZFRleHR1cmVEYXRhKGNvbG9yQnVmZmVyVGV4dHVyZSwgc3VicmVz
b3VyY2VJbmRleCwgYXJlYSwgZm9ybWF0LCB0eXBlLCBvdXRwdXRQaXRjaCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHBhY2tSZXZlcnNlUm93T3JkZXIsIHBhY2tBbGlnbm1lbnQsIHBpeGVscyk7
Ci0KLSAgICAgICAgY29sb3JCdWZmZXJUZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIGNvbG9y
QnVmZmVyVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQotfQotCi1JbWFnZSAqUmVuZGVyZXIxMTo6Y3Jl
YXRlSW1hZ2UoKQotewotICAgIHJldHVybiBuZXcgSW1hZ2UxMSgpOwotfQotCi12b2lkIFJlbmRl
cmVyMTE6OmdlbmVyYXRlTWlwbWFwKEltYWdlICpkZXN0LCBJbWFnZSAqc3JjKQotewotICAgIElt
YWdlMTEgKmRlc3QxMSA9IEltYWdlMTE6Om1ha2VJbWFnZTExKGRlc3QpOwotICAgIEltYWdlMTEg
KnNyYzExID0gSW1hZ2UxMTo6bWFrZUltYWdlMTEoc3JjKTsKLSAgICBJbWFnZTExOjpnZW5lcmF0
ZU1pcG1hcChkZXN0MTEsIHNyYzExKTsKLX0KLQotVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyMTE6
OmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoU3dhcENoYWluICpzd2FwQ2hhaW4pCi17Ci0gICAgU3dh
cENoYWluMTEgKnN3YXBDaGFpbjExID0gU3dhcENoYWluMTE6Om1ha2VTd2FwQ2hhaW4xMShzd2Fw
Q2hhaW4pOwotICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2UxMV8yRCh0aGlzLCBzd2FwQ2hh
aW4xMSk7Ci19Ci0KLVRleHR1cmVTdG9yYWdlICpSZW5kZXJlcjExOjpjcmVhdGVUZXh0dXJlU3Rv
cmFnZTJEKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBi
b29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0g
ICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTExXzJEKHRoaXMsIGxldmVscywgaW50ZXJuYWxm
b3JtYXQsIHVzYWdlLCBmb3JjZVJlbmRlcmFibGUsIHdpZHRoLCBoZWlnaHQpOwotfQotCi1UZXh0
dXJlU3RvcmFnZSAqUmVuZGVyZXIxMTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKGludCBsZXZl
bHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVy
YWJsZSwgaW50IHNpemUpCi17Ci0gICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTExX0N1YmUo
dGhpcywgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSwgc2l6
ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldEZhc3RQaXhlbENvcHlTaXpl
KERYR0lfRk9STUFUIHNvdXJjZUZvcm1hdCwgR0xlbnVtIGRlc3RGb3JtYXQsIEdMZW51bSBkZXN0
VHlwZSkKLXsKLSAgICBpZiAoc291cmNlRm9ybWF0ID09IERYR0lfRk9STUFUX0E4X1VOT1JNICYm
Ci0gICAgICAgIGRlc3RGb3JtYXQgICA9PSBHTF9BTFBIQSAmJgotICAgICAgICBkZXN0VHlwZSAg
ICAgPT0gR0xfVU5TSUdORURfQllURSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0K
LSAgICBlbHNlIGlmIChzb3VyY2VGb3JtYXQgPT0gRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk0g
JiYKLSAgICAgICAgICAgICBkZXN0Rm9ybWF0ICAgPT0gR0xfUkdCQSAmJgotICAgICAgICAgICAg
IGRlc3RUeXBlICAgICA9PSBHTF9VTlNJR05FRF9CWVRFKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IDQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNvdXJjZUZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9COEc4
UjhBOF9VTk9STSAmJgotICAgICAgICAgICAgIGRlc3RGb3JtYXQgICA9PSBHTF9CR1JBX0VYVCAm
JgotICAgICAgICAgICAgIGRlc3RUeXBlICAgICA9PSBHTF9VTlNJR05FRF9CWVRFKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNvdXJjZUZvcm1hdCA9PSBE
WEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQgJiYKLSAgICAgICAgICAgICBkZXN0Rm9ybWF0
ICAgPT0gR0xfUkdCQSAmJgotICAgICAgICAgICAgIGRlc3RUeXBlICAgICA9PSBHTF9IQUxGX0ZM
T0FUX09FUykKLSAgICB7Ci0gICAgICAgIHJldHVybiA4OwotICAgIH0KLSAgICBlbHNlIGlmIChz
b3VyY2VGb3JtYXQgPT0gRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FUICYmCi0gICAgICAgICAg
ICAgZGVzdEZvcm1hdCAgID09IEdMX1JHQiAmJgotICAgICAgICAgICAgIGRlc3RUeXBlICAgICA9
PSBHTF9GTE9BVCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAxMjsKLSAgICB9Ci0gICAgZWxzZSBp
ZiAoc291cmNlRm9ybWF0ID09IERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCAmJgotICAg
ICAgICAgICAgIGRlc3RGb3JtYXQgICA9PSBHTF9SR0JBICYmCi0gICAgICAgICAgICAgZGVzdFR5
cGUgICAgID09IEdMX0ZMT0FUKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDE2OwotICAgIH0KLSAg
ICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgdm9pZCByZWFkUGl4ZWxDb2xvcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBEWEdJX0ZP
Uk1BVCBmb3JtYXQsIHVuc2lnbmVkIGludCB4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCB5LCBpbnQgaW5wdXRQaXRjaCwgZ2w6OkNvbG9yICpvdXRDb2xv
cikKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X1I4RzhCOEE4X1VOT1JNOgotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmdi
YSA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KGRhdGEgKyA0ICogeCAr
IHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgIChyZ2JhICYg
MHgwMDAwMDBGRikgKiAoMS4wZiAvIDB4MDAwMDAwRkYpOwotICAgICAgICAgICAgb3V0Q29sb3It
PmdyZWVuID0gKHJnYmEgJiAweDAwMDBGRjAwKSAqICgxLjBmIC8gMHgwMDAwRkYwMCk7Ci0gICAg
ICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAocmdiYSAmIDB4MDBGRjAwMDApICogKDEuMGYgLyAw
eDAwRkYwMDAwKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IChyZ2JhICYgMHhGRjAw
MDAwMCkgKiAoMS4wZiAvIDB4RkYwMDAwMDApOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0E4X1VOT1JNOgotICAgICAgICB7Ci0gICAgICAgICAg
ICBvdXRDb2xvci0+cmVkID0gICAwLjBmOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0g
MC4wZjsKLSAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gIDAuMGY7Ci0gICAgICAgICAgICBv
dXRDb2xvci0+YWxwaGEgPSAqKGRhdGEgKyB4ICsgeSAqIGlucHV0UGl0Y2gpIC8gMjU1LjBmOwot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkcz
MkIzMkEzMl9GTE9BVDoKLSAgICAgICAgewotICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAg
KihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDE2ICogeCArIHkgKiBpbnB1
dFBpdGNoKSArIDApOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gKihyZWludGVycHJl
dF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDE2ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDEp
OwotICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAgKihyZWludGVycHJldF9jYXN0PGNvbnN0
IGZsb2F0Kj4oZGF0YSArIDE2ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDIpOwotICAgICAgICAg
ICAgb3V0Q29sb3ItPmFscGhhID0gKihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0
YSArIDE2ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDMpOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVDoKLSAgICAgICAg
ewotICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAgKihyZWludGVycHJldF9jYXN0PGNvbnN0
IGZsb2F0Kj4oZGF0YSArIDEyICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDApOwotICAgICAgICAg
ICAgb3V0Q29sb3ItPmdyZWVuID0gKihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0
YSArIDEyICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDEpOwotICAgICAgICAgICAgb3V0Q29sb3It
PmJsdWUgPSAgKihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDEyICogeCAr
IHkgKiBpbnB1dFBpdGNoKSArIDIpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gMS4w
ZjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
MTZHMTZCMTZBMTZfRkxPQVQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG91dENvbG9yLT5yZWQg
PSAgIGdsOjpmbG9hdDE2VG9GbG9hdDMyKCoocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25l
ZCBzaG9ydCo+KGRhdGEgKyA4ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDApKTsKLSAgICAgICAg
ICAgIG91dENvbG9yLT5ncmVlbiA9IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCoocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyA4ICogeCArIHkgKiBpbnB1dFBpdGNo
KSArIDEpKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gIGdsOjpmbG9hdDE2VG9GbG9h
dDMyKCoocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyA4ICog
eCArIHkgKiBpbnB1dFBpdGNoKSArIDIpKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9
IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCoocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBz
aG9ydCo+KGRhdGEgKyA4ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDMpKTsKLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STToK
LSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IGJncmEgPSAqcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihkYXRhICsgNCAqIHggKyB5ICogaW5wdXRQaXRjaCk7
Ci0gICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICAoYmdyYSAmIDB4MDBGRjAwMDApICogKDEu
MGYgLyAweDAwRkYwMDAwKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gIChiZ3JhICYg
MHgwMDAwMDBGRikgKiAoMS4wZiAvIDB4MDAwMDAwRkYpOwotICAgICAgICAgICAgb3V0Q29sb3It
PmdyZWVuID0gKGJncmEgJiAweDAwMDBGRjAwKSAqICgxLjBmIC8gMHgwMDAwRkYwMCk7Ci0gICAg
ICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAoYmdyYSAmIDB4RkYwMDAwMDApICogKDEuMGYgLyAw
eEZGMDAwMDAwKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SOF9VTk9STToKLSAgICAgICAgewotICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9
ICAgKihkYXRhICsgeCArIHkgKiBpbnB1dFBpdGNoKSAvIDI1NS4wZjsKLSAgICAgICAgICAgIG91
dENvbG9yLT5ncmVlbiA9IDAuMGY7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAwLjBm
OwotICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gMS4wZjsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNOgotICAgICAgICB7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZyA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0
IHVuc2lnbmVkIHNob3J0Kj4oZGF0YSArIDIgKiB4ICsgeSAqIGlucHV0UGl0Y2gpOwotCi0gICAg
ICAgICAgICBvdXRDb2xvci0+cmVkID0gICAocmcgJiAweEZGMDApICogKDEuMGYgLyAweEZGMDAp
OwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gKHJnICYgMHgwMEZGKSAqICgxLjBmIC8g
MHgwMEZGKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gIDAuMGY7Ci0gICAgICAgICAg
ICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0g
ICAgICBjYXNlIERYR0lfRk9STUFUX1IxNl9GTE9BVDoKLSAgICAgICAgewotICAgICAgICAgICAg
b3V0Q29sb3ItPnJlZCA9ICAgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKnJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgMiAqIHggKyB5ICogaW5wdXRQaXRjaCkpOwot
ICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gMC4wZjsKLSAgICAgICAgICAgIG91dENvbG9y
LT5ibHVlID0gIDAuMGY7Ci0gICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9G
TE9BVDoKLSAgICAgICAgewotICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAgZ2w6OmZsb2F0
MTZUb0Zsb2F0MzIoKihyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oZGF0
YSArIDQgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMCkpOwotICAgICAgICAgICAgb3V0Q29sb3It
PmdyZWVuID0gZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKihyZWludGVycHJldF9jYXN0PGNvbnN0IHVu
c2lnbmVkIHNob3J0Kj4oZGF0YSArIDQgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMSkpOwotICAg
ICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAgMC4wZjsKLSAgICAgICAgICAgIG91dENvbG9yLT5h
bHBoYSA9IDEuMGY7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIEVSUigiUmVhZFBpeGVsQ29sb3Igbm90IGltcGxlbWVudGVkIGZvciBEWEdJIGZv
cm1hdCAldS4iLCBmb3JtYXQpOwotICAgICAgICBVTklNUExFTUVOVEVEKCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdyaXRlUGl4ZWxDb2xvcihjb25z
dCBnbDo6Q29sb3IgJmNvbG9yLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgdW5zaWduZWQg
aW50IHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB5
LCBpbnQgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dERhdGEpCi17Ci0gICAgdW5zaWduZWQgY2hhciog
Ynl0ZURhdGEgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXREYXRhKTsKLSAg
ICB1bnNpZ25lZCBzaG9ydCogc2hvcnREYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBz
aG9ydCo+KG91dERhdGEpOwotCi0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2Fz
ZSBHTF9SR0JBOgotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBj
YXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBv
dXRwdXRQaXRjaCArIDBdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3Iu
cmVkICAgKyAwLjVmKTsKLSAgICAgICAgICAgIGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1dFBp
dGNoICsgMV0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5ncmVlbiAr
IDAuNWYpOwotICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAy
XSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLmJsdWUgICsgMC41Zik7
Ci0gICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDNdID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuYWxwaGEgKyAwLjVmKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEVSUigiV3Jp
dGVQaXhlbENvbG9yIG5vdCBpbXBsZW1lbnRlZCBmb3IgZm9ybWF0IEdMX1JHQkEgYW5kIHR5cGUg
MHglWC4iLCB0eXBlKTsKLSAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEdMX0JHUkFf
RVhUOgotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQ
aXRjaCArIDBdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuYmx1ZSAg
KyAwLjVmKTsKLSAgICAgICAgICAgIGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsg
MV0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5ncmVlbiArIDAuNWYp
OwotICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAyXSA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLnJlZCAgICsgMC41Zik7Ci0gICAg
ICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDNdID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuYWxwaGEgKyAwLjVmKTsKLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9F
WFQ6Ci0gICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIGRlc2t0b3AgR0wgc3BlYyBpbiB0
aGUgIlRyYW5zZmVyIG9mIFBpeGVsIFJlY3RhbmdsZXMiIHNlY3Rpb24KLSAgICAgICAgICAgIC8v
IHRoaXMgdHlwZSBpcyBwYWNrZWQgYXMgZm9sbG93czoKLSAgICAgICAgICAgIC8vICAgMTUgICAx
NCAgIDEzICAgMTIgICAxMSAgIDEwICAgIDkgICAgOCAgICA3ICAgIDYgICAgNSAgICA0ICAgIDMg
ICAgMiAgICAxICAgIDAKLSAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
ICAgICAgICAgICAgLy8gfCAgICAgICA0dGggICAgICAgICB8ICAgICAgICAzcmQgICAgICAgICB8
ICAgICAgICAybmQgICAgICAgIHwgICAxc3QgY29tcG9uZW50ICAgfAotICAgICAgICAgICAgLy8g
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAvLyBpbiB0aGUgY2FzZSBvZiBC
R1JBX0VYVCwgQiBpcyB0aGUgZmlyc3QgY29tcG9uZW50LCBHIHRoZSBzZWNvbmQsIGFuZCBzbyBm
b3J0aC4KLSAgICAgICAgICAgIHNob3J0RGF0YVt4ICsgeSAqIG91dHB1dFBpdGNoIC8gc2l6ZW9m
KHVuc2lnbmVkIHNob3J0KV0gPQotICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBzaG9ydD4oMTUgKiBjb2xvci5hbHBoYSArIDAuNWYpIDw8IDEyKSB8Ci0gICAgICAgICAgICAg
ICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigxNSAqIGNvbG9yLnJlZCAgICsgMC41Zikg
PDwgIDgpIHwKLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDE1
ICogY29sb3IuZ3JlZW4gKyAwLjVmKSA8PCAgNCkgfAotICAgICAgICAgICAgICAgIChzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBzaG9ydD4oMTUgKiBjb2xvci5ibHVlICArIDAuNWYpIDw8ICAwKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF8xXzVf
NV81X1JFVl9FWFQ6Ci0gICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIGRlc2t0b3AgR0wg
c3BlYyBpbiB0aGUgIlRyYW5zZmVyIG9mIFBpeGVsIFJlY3RhbmdsZXMiIHNlY3Rpb24KLSAgICAg
ICAgICAgIC8vIHRoaXMgdHlwZSBpcyBwYWNrZWQgYXMgZm9sbG93czoKLSAgICAgICAgICAgIC8v
ICAgMTUgICAxNCAgIDEzICAgMTIgICAxMSAgIDEwICAgIDkgICAgOCAgICA3ICAgIDYgICAgNSAg
ICA0ICAgIDMgICAgMiAgICAxICAgIDAKLSAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotICAgICAgICAgICAgLy8gfCA0dGggfCAgICAgICAgICAzcmQgICAgICAgICAgIHwg
ICAgICAgICAgIDJuZCAgICAgICAgICB8ICAgICAgMXN0IGNvbXBvbmVudCAgICAgfAotICAgICAg
ICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAvLyBpbiB0aGUg
Y2FzZSBvZiBCR1JBX0VYVCwgQiBpcyB0aGUgZmlyc3QgY29tcG9uZW50LCBHIHRoZSBzZWNvbmQs
IGFuZCBzbyBmb3J0aC4KLSAgICAgICAgICAgIHNob3J0RGF0YVt4ICsgeSAqIG91dHB1dFBpdGNo
IC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KV0gPQotICAgICAgICAgICAgICAgIChzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBzaG9ydD4oICAgICBjb2xvci5hbHBoYSArIDAuNWYpIDw8IDE1KSB8Ci0gICAg
ICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigzMSAqIGNvbG9yLnJlZCAg
ICsgMC41ZikgPDwgMTApIHwKLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQg
c2hvcnQ+KDMxICogY29sb3IuZ3JlZW4gKyAwLjVmKSA8PCAgNSkgfAotICAgICAgICAgICAgICAg
IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMzEgKiBjb2xvci5ibHVlICArIDAuNWYpIDw8
ICAwKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIEVSUigiV3JpdGVQaXhlbENvbG9yIG5vdCBpbXBsZW1lbnRlZCBmb3IgZm9ybWF0IEdMX0JH
UkFfRVhUIGFuZCB0eXBlIDB4JVguIiwgdHlwZSk7Ci0gICAgICAgICAgICBVTklNUExFTUVOVEVE
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAg
ICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgewotICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAgICAgICBzaG9ydERhdGFb
eCArIHkgKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0KLSAgICAgICAg
ICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDMxICogY29sb3IuYmx1ZSAgKyAw
LjVmKSA8PCAgMCkgfAotICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9y
dD4oNjMgKiBjb2xvci5ncmVlbiArIDAuNWYpIDw8ICA1KSB8Ci0gICAgICAgICAgICAgICAgKHN0
YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigzMSAqIGNvbG9yLnJlZCAgICsgMC41ZikgPDwgMTEp
OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6
Ci0gICAgICAgICAgICBieXRlRGF0YVszICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDBdID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IucmVkICsgICAwLjVmKTsKLSAgICAg
ICAgICAgIGJ5dGVEYXRhWzMgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMV0gPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5ncmVlbiArIDAuNWYpOwotICAgICAgICAgICAg
Ynl0ZURhdGFbMyAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAyXSA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXI+KDI1NSAqIGNvbG9yLmJsdWUgKyAgMC41Zik7Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBFUlIoIldyaXRlUGl4ZWxDb2xvciBu
b3QgaW1wbGVtZW50ZWQgZm9yIGZvcm1hdCBHTF9SR0IgYW5kIHR5cGUgMHglWC4iLCB0eXBlKTsK
LSAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICBFUlIoIldyaXRl
UGl4ZWxDb2xvciBub3QgaW1wbGVtZW50ZWQgZm9yIGZvcm1hdCAweCVYLiIsIGZvcm1hdCk7Ci0g
ICAgICAgIFVOSU1QTEVNRU5URUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lk
IFJlbmRlcmVyMTE6OnJlYWRUZXh0dXJlRGF0YShJRDNEMTFUZXh0dXJlMkQgKnRleHR1cmUsIHVu
c2lnbmVkIGludCBzdWJSZXNvdXJjZSwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmYXJlYSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBH
THNpemVpIG91dHB1dFBpdGNoLCBib29sIHBhY2tSZXZlcnNlUm93T3JkZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCBwYWNrQWxpZ25tZW50LCB2b2lkICpwaXhlbHMp
Ci17Ci0gICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4dHVyZURlc2M7Ci0gICAgdGV4dHVyZS0+
R2V0RGVzYygmdGV4dHVyZURlc2MpOwotCi0gICAgRDNEMTFfVEVYVFVSRTJEX0RFU0Mgc3RhZ2lu
Z0Rlc2M7Ci0gICAgc3RhZ2luZ0Rlc2MuV2lkdGggPSBhcmVhLndpZHRoOwotICAgIHN0YWdpbmdE
ZXNjLkhlaWdodCA9IGFyZWEuaGVpZ2h0OwotICAgIHN0YWdpbmdEZXNjLk1pcExldmVscyA9IDE7
Ci0gICAgc3RhZ2luZ0Rlc2MuQXJyYXlTaXplID0gMTsKLSAgICBzdGFnaW5nRGVzYy5Gb3JtYXQg
PSB0ZXh0dXJlRGVzYy5Gb3JtYXQ7Ci0gICAgc3RhZ2luZ0Rlc2MuU2FtcGxlRGVzYy5Db3VudCA9
IDE7Ci0gICAgc3RhZ2luZ0Rlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKLSAgICBzdGFnaW5n
RGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX1NUQUdJTkc7Ci0gICAgc3RhZ2luZ0Rlc2MuQmluZEZs
YWdzID0gMDsKLSAgICBzdGFnaW5nRGVzYy5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NF
U1NfUkVBRDsKLSAgICBzdGFnaW5nRGVzYy5NaXNjRmxhZ3MgPSAwOwotCi0gICAgSUQzRDExVGV4
dHVyZTJEKiBzdGFnaW5nVGV4ID0gTlVMTDsKLSAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2Ut
PkNyZWF0ZVRleHR1cmUyRCgmc3RhZ2luZ0Rlc2MsIE5VTEwsICZzdGFnaW5nVGV4KTsKLSAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byBjcmVhdGUg
c3RhZ2luZyB0ZXh0dXJlIGZvciByZWFkUGl4ZWxzLCBIUkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJRDNEMTFUZXh0dXJlMkQqIHNyY1RleCA9
IE5VTEw7Ci0gICAgaWYgKHRleHR1cmVEZXNjLlNhbXBsZURlc2MuQ291bnQgPiAxKQotICAgIHsK
LSAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgcmVzb2x2ZURlc2M7Ci0gICAgICAgIHJlc29s
dmVEZXNjLldpZHRoID0gdGV4dHVyZURlc2MuV2lkdGg7Ci0gICAgICAgIHJlc29sdmVEZXNjLkhl
aWdodCA9IHRleHR1cmVEZXNjLkhlaWdodDsKLSAgICAgICAgcmVzb2x2ZURlc2MuTWlwTGV2ZWxz
ID0gMTsKLSAgICAgICAgcmVzb2x2ZURlc2MuQXJyYXlTaXplID0gMTsKLSAgICAgICAgcmVzb2x2
ZURlc2MuRm9ybWF0ID0gdGV4dHVyZURlc2MuRm9ybWF0OwotICAgICAgICByZXNvbHZlRGVzYy5T
YW1wbGVEZXNjLkNvdW50ID0gMTsKLSAgICAgICAgcmVzb2x2ZURlc2MuU2FtcGxlRGVzYy5RdWFs
aXR5ID0gMDsKLSAgICAgICAgcmVzb2x2ZURlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxU
OwotICAgICAgICByZXNvbHZlRGVzYy5CaW5kRmxhZ3MgPSAwOwotICAgICAgICByZXNvbHZlRGVz
Yy5DUFVBY2Nlc3NGbGFncyA9IDA7Ci0gICAgICAgIHJlc29sdmVEZXNjLk1pc2NGbGFncyA9IDA7
Ci0KLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZyZXNvbHZlRGVz
YywgTlVMTCwgJnNyY1RleCk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAg
ewotICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gY3JlYXRlIHJlc29sdmUgdGV4dHVyZSBmb3Ig
cmVhZFBpeGVscywgSFJFU1VMVDogMHglWC4iLCByZXN1bHQpOwotICAgICAgICAgICAgc3RhZ2lu
Z1RleC0+UmVsZWFzZSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgbURldmljZUNvbnRleHQtPlJlc29sdmVTdWJyZXNvdXJjZShzcmNUZXgsIDAsIHRleHR1cmUs
IHN1YlJlc291cmNlLCB0ZXh0dXJlRGVzYy5Gb3JtYXQpOwotICAgICAgICBzdWJSZXNvdXJjZSA9
IDA7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHNyY1RleCA9IHRleHR1cmU7Ci0g
ICAgICAgIHNyY1RleC0+QWRkUmVmKCk7Ci0gICAgfQotCi0gICAgRDNEMTFfQk9YIHNyY0JveDsK
LSAgICBzcmNCb3gubGVmdCA9IGFyZWEueDsKLSAgICBzcmNCb3gucmlnaHQgPSBhcmVhLnggKyBh
cmVhLndpZHRoOwotICAgIHNyY0JveC50b3AgPSBhcmVhLnk7Ci0gICAgc3JjQm94LmJvdHRvbSA9
IGFyZWEueSArIGFyZWEuaGVpZ2h0OwotICAgIHNyY0JveC5mcm9udCA9IDA7Ci0gICAgc3JjQm94
LmJhY2sgPSAxOwotCi0gICAgbURldmljZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihz
dGFnaW5nVGV4LCAwLCAwLCAwLCAwLCBzcmNUZXgsIHN1YlJlc291cmNlLCAmc3JjQm94KTsKLQot
ICAgIHNyY1RleC0+UmVsZWFzZSgpOwotICAgIHNyY1RleCA9IE5VTEw7Ci0KLSAgICBEM0QxMV9N
QVBQRURfU1VCUkVTT1VSQ0UgbWFwcGluZzsKLSAgICBtRGV2aWNlQ29udGV4dC0+TWFwKHN0YWdp
bmdUZXgsIDAsIEQzRDExX01BUF9SRUFELCAwLCAmbWFwcGluZyk7Ci0KLSAgICB1bnNpZ25lZCBj
aGFyICpzb3VyY2U7Ci0gICAgaW50IGlucHV0UGl0Y2g7Ci0gICAgaWYgKHBhY2tSZXZlcnNlUm93
T3JkZXIpCi0gICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4obWFwcGluZy5wRGF0YSkgKyBtYXBwaW5nLlJvd1BpdGNoICogKGFyZWEuaGVpZ2h0IC0gMSk7
Ci0gICAgICAgIGlucHV0UGl0Y2ggPSAtc3RhdGljX2Nhc3Q8aW50PihtYXBwaW5nLlJvd1BpdGNo
KTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcio+KG1hcHBpbmcucERhdGEpOwotICAgICAgICBpbnB1dFBpdGNoID0gc3Rh
dGljX2Nhc3Q8aW50PihtYXBwaW5nLlJvd1BpdGNoKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBp
bnQgZmFzdFBpeGVsU2l6ZSA9IGdldEZhc3RQaXhlbENvcHlTaXplKHRleHR1cmVEZXNjLkZvcm1h
dCwgZm9ybWF0LCB0eXBlKTsKLSAgICBpZiAoZmFzdFBpeGVsU2l6ZSAhPSAwKQotICAgIHsKLSAg
ICAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihw
aXhlbHMpOwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGFyZWEuaGVpZ2h0OyBqKyspCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1lbWNweShkZXN0ICsgaiAqIG91dHB1dFBpdGNoLCBzb3Vy
Y2UgKyBqICogaW5wdXRQaXRjaCwgYXJlYS53aWR0aCAqIGZhc3RQaXhlbFNpemUpOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHRleHR1cmVEZXNjLkZvcm1hdCA9PSBEWEdJX0ZPUk1B
VF9COEc4UjhBOF9VTk9STSAmJgotICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9SR0JBICYmCi0g
ICAgICAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQotICAgIHsKLSAgICAgICAgLy8g
RmFzdCBwYXRoIGZvciBzd2FwcGluZyByZWQgd2l0aCBibHVlCi0gICAgICAgIHVuc2lnbmVkIGNo
YXIgKmRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxzKTsKLQotICAgICAg
ICBmb3IgKGludCBqID0gMDsgaiA8IGFyZWEuaGVpZ2h0OyBqKyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJlYS53aWR0aDsgaSsrKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdiID0gKih1bnNpZ25lZCBpbnQqKShz
b3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgICAgICAgICAqKHVuc2ln
bmVkIGludCopKGRlc3QgKyA0ICogaSArIGogKiBvdXRwdXRQaXRjaCkgPQotICAgICAgICAgICAg
ICAgICAgICAoYXJnYiAmIDB4RkYwMEZGMDApIHwgICAgICAgLy8gS2VlcCBhbHBoYSBhbmQgZ3Jl
ZW4KLSAgICAgICAgICAgICAgICAgICAgKGFyZ2IgJiAweDAwRkYwMDAwKSA+PiAxNiB8IC8vIE1v
dmUgcmVkIHRvIGJsdWUKLSAgICAgICAgICAgICAgICAgICAgKGFyZ2IgJiAweDAwMDAwMEZGKSA8
PCAxNjsgIC8vIE1vdmUgYmx1ZSB0byByZWQKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBnbDo6Q29sb3IgcGl4ZWxDb2xvcjsKLSAgICAg
ICAgZm9yIChpbnQgaiA9IDA7IGogPCBhcmVhLmhlaWdodDsgaisrKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZWEud2lkdGg7IGkrKykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICByZWFkUGl4ZWxDb2xvcihzb3VyY2UsIHRleHR1cmVEZXNjLkZv
cm1hdCwgaSwgaiwgaW5wdXRQaXRjaCwgJnBpeGVsQ29sb3IpOwotICAgICAgICAgICAgICAgIHdy
aXRlUGl4ZWxDb2xvcihwaXhlbENvbG9yLCBmb3JtYXQsIHR5cGUsIGksIGosIG91dHB1dFBpdGNo
LCBwaXhlbHMpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgbURldmlj
ZUNvbnRleHQtPlVubWFwKHN0YWdpbmdUZXgsIDApOwotCi0gICAgc3RhZ2luZ1RleC0+UmVsZWFz
ZSgpOwotICAgIHN0YWdpbmdUZXggPSBOVUxMOwotfQotCi1ib29sIFJlbmRlcmVyMTE6OmJsaXRS
ZW5kZXJidWZmZXJSZWN0KGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRSZWN0LCBjb25zdCBnbDo6
UmVjdGFuZ2xlICZkcmF3UmVjdCwgUmVuZGVyVGFyZ2V0ICpyZWFkUmVuZGVyVGFyZ2V0LCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyVGFyZ2V0ICpkcmF3UmVu
ZGVyVGFyZ2V0LCBib29sIHdob2xlQnVmZmVyQ29weSkKLXsKLSAgICBBU1NFUlQocmVhZFJlY3Qu
d2lkdGggPT0gZHJhd1JlY3Qud2lkdGggJiYgcmVhZFJlY3QuaGVpZ2h0ID09IGRyYXdSZWN0Lmhl
aWdodCk7Ci0KLSAgICBSZW5kZXJUYXJnZXQxMSAqZHJhd1JlbmRlclRhcmdldDExID0gUmVuZGVy
VGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShkcmF3UmVuZGVyVGFyZ2V0KTsKLSAgICBpZiAo
IWRyYXdSZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2
ZSB0aGUgZHJhdyByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGRyYXcgZnJhbWVidWZmZXIuIik7Ci0g
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAgIH0K
LQotICAgIElEM0QxMVRleHR1cmUyRCAqZHJhd1RleHR1cmUgPSBkcmF3UmVuZGVyVGFyZ2V0MTEt
PmdldFRleHR1cmUoKTsKLSAgICB1bnNpZ25lZCBpbnQgZHJhd1N1YnJlc291cmNlID0gZHJhd1Jl
bmRlclRhcmdldDExLT5nZXRTdWJyZXNvdXJjZUluZGV4KCk7Ci0KLSAgICBSZW5kZXJUYXJnZXQx
MSAqcmVhZFJlbmRlclRhcmdldDExID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQx
MShyZWFkUmVuZGVyVGFyZ2V0KTsKLSAgICBpZiAoIXJlYWRSZW5kZXJUYXJnZXQpCi0gICAgewot
ICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVhZCByZW5kZXIgdGFyZ2V0IGZy
b20gdGhlIHJlYWQgZnJhbWVidWZmZXIuIik7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAgIH0KLQotICAgIElEM0QxMVRleHR1cmUyRCAqcmVh
ZFRleHR1cmUgPSBOVUxMOwotICAgIHVuc2lnbmVkIGludCByZWFkU3VicmVzb3VyY2UgPSAwOwot
ICAgIGlmIChyZWFkUmVuZGVyVGFyZ2V0LT5nZXRTYW1wbGVzKCkgPiAwKQotICAgIHsKLSAgICAg
ICAgcmVhZFRleHR1cmUgPSByZXNvbHZlTXVsdGlzYW1wbGVkVGV4dHVyZShyZWFkUmVuZGVyVGFy
Z2V0MTEtPmdldFRleHR1cmUoKSwgcmVhZFJlbmRlclRhcmdldDExLT5nZXRTdWJyZXNvdXJjZUlu
ZGV4KCkpOwotICAgICAgICByZWFkU3VicmVzb3VyY2UgPSAwOwotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgICByZWFkVGV4dHVyZSA9IHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0VGV4dHVy
ZSgpOwotICAgICAgICByZWFkVGV4dHVyZS0+QWRkUmVmKCk7Ci0gICAgICAgIHJlYWRTdWJyZXNv
dXJjZSA9IHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0U3VicmVzb3VyY2VJbmRleCgpOwotICAgIH0K
LQotICAgIGlmICghcmVhZFRleHR1cmUpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byBy
ZXRyaWV2ZSB0aGUgcmVhZCByZW5kZXIgdGFyZ2V0IHZpZXcgZnJvbSB0aGUgcmVhZCByZW5kZXIg
dGFyZ2V0LiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZh
bHNlKTsKLSAgICB9Ci0KLSAgICBEM0QxMV9CT1ggcmVhZEJveDsKLSAgICByZWFkQm94LmxlZnQg
PSByZWFkUmVjdC54OwotICAgIHJlYWRCb3gucmlnaHQgPSByZWFkUmVjdC54ICsgcmVhZFJlY3Qu
d2lkdGg7Ci0gICAgcmVhZEJveC50b3AgPSByZWFkUmVjdC55OwotICAgIHJlYWRCb3guYm90dG9t
ID0gcmVhZFJlY3QueSArIHJlYWRSZWN0LmhlaWdodDsKLSAgICByZWFkQm94LmZyb250ID0gMDsK
LSAgICByZWFkQm94LmJhY2sgPSAxOwotCi0gICAgLy8gRDNEMTEgbmVlZHMgZGVwdGgtc3RlbmNp
bCBDb3B5U3VicmVzb3VyY2VSZWdpb25zIHRvIGhhdmUgYSBOVUxMIHBTcmNCb3gKLSAgICAvLyBX
ZSBhbHNvIHJlcXVpcmUgY29tcGxldGUgZnJhbWVidWZmZXIgY29waWVzIGZvciBkZXB0aC1zdGVu
Y2lsIGJsaXQuCi0gICAgRDNEMTFfQk9YICpwU3JjQm94ID0gd2hvbGVCdWZmZXJDb3B5ID8gTlVM
TCA6ICZyZWFkQm94OwotCi0gICAgbURldmljZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lv
bihkcmF3VGV4dHVyZSwgZHJhd1N1YnJlc291cmNlLCBkcmF3UmVjdC54LCBkcmF3UmVjdC55LCAw
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZFRleHR1cmUs
IHJlYWRTdWJyZXNvdXJjZSwgcFNyY0JveCk7Ci0KLSAgICBTYWZlUmVsZWFzZShyZWFkVGV4dHVy
ZSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotSUQzRDExVGV4dHVyZTJEICpSZW5kZXJlcjEx
OjpyZXNvbHZlTXVsdGlzYW1wbGVkVGV4dHVyZShJRDNEMTFUZXh0dXJlMkQgKnNvdXJjZSwgdW5z
aWduZWQgaW50IHN1YnJlc291cmNlKQotewotICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleHR1
cmVEZXNjOwotICAgIHNvdXJjZS0+R2V0RGVzYygmdGV4dHVyZURlc2MpOwotCi0gICAgaWYgKHRl
eHR1cmVEZXNjLlNhbXBsZURlc2MuQ291bnQgPiAxKQotICAgIHsKLSAgICAgICAgRDNEMTFfVEVY
VFVSRTJEX0RFU0MgcmVzb2x2ZURlc2M7Ci0gICAgICAgIHJlc29sdmVEZXNjLldpZHRoID0gdGV4
dHVyZURlc2MuV2lkdGg7Ci0gICAgICAgIHJlc29sdmVEZXNjLkhlaWdodCA9IHRleHR1cmVEZXNj
LkhlaWdodDsKLSAgICAgICAgcmVzb2x2ZURlc2MuTWlwTGV2ZWxzID0gMTsKLSAgICAgICAgcmVz
b2x2ZURlc2MuQXJyYXlTaXplID0gMTsKLSAgICAgICAgcmVzb2x2ZURlc2MuRm9ybWF0ID0gdGV4
dHVyZURlc2MuRm9ybWF0OwotICAgICAgICByZXNvbHZlRGVzYy5TYW1wbGVEZXNjLkNvdW50ID0g
MTsKLSAgICAgICAgcmVzb2x2ZURlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKLSAgICAgICAg
cmVzb2x2ZURlc2MuVXNhZ2UgPSB0ZXh0dXJlRGVzYy5Vc2FnZTsKLSAgICAgICAgcmVzb2x2ZURl
c2MuQmluZEZsYWdzID0gdGV4dHVyZURlc2MuQmluZEZsYWdzOwotICAgICAgICByZXNvbHZlRGVz
Yy5DUFVBY2Nlc3NGbGFncyA9IDA7Ci0gICAgICAgIHJlc29sdmVEZXNjLk1pc2NGbGFncyA9IDA7
Ci0KLSAgICAgICAgSUQzRDExVGV4dHVyZTJEICpyZXNvbHZlVGV4dHVyZSA9IE5VTEw7Ci0gICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZyZXNvbHZlRGVz
YywgTlVMTCwgJnJlc29sdmVUZXh0dXJlKTsKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBjcmVhdGUgYSBtdWx0aXNhbXBs
ZSByZXNvbHZlIHRleHR1cmUsIEhSRVNVTFQ6IDB4JVguIiwgcmVzdWx0KTsKLSAgICAgICAgICAg
IHJldHVybiBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgbURldmljZUNvbnRleHQtPlJlc29s
dmVTdWJyZXNvdXJjZShyZXNvbHZlVGV4dHVyZSwgMCwgc291cmNlLCBzdWJyZXNvdXJjZSwgdGV4
dHVyZURlc2MuRm9ybWF0KTsKLSAgICAgICAgcmV0dXJuIHJlc29sdmVUZXh0dXJlOwotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICBzb3VyY2UtPkFkZFJlZigpOwotICAgICAgICByZXR1
cm4gc291cmNlOwotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJlcjExOjpnZXRMVUlEKExVSUQgKmFk
YXB0ZXJMdWlkKSBjb25zdAotewotICAgIGFkYXB0ZXJMdWlkLT5IaWdoUGFydCA9IDA7Ci0gICAg
YWRhcHRlckx1aWQtPkxvd1BhcnQgPSAwOwotCi0gICAgaWYgKCFtRHhnaUFkYXB0ZXIpCi0gICAg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgRFhHSV9BREFQVEVSX0RFU0Mg
YWRhcHRlckRlc2M7Ci0gICAgaWYgKEZBSUxFRChtRHhnaUFkYXB0ZXItPkdldERlc2MoJmFkYXB0
ZXJEZXNjKSkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgKmFk
YXB0ZXJMdWlkID0gYWRhcHRlckRlc2MuQWRhcHRlckx1aWQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvUmVuZGVyZXIxMS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9SZW5kZXJlcjExLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGI4NmY0ODVmNDBjNThjOTQwZGM5YTNlNGFmYzU4MjViNGUyOWU4YmYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlcjExLmgKKysrIC9kZXYvbnVsbApAQCAtMSwz
NTggKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gUmVuZGVyZXIxMS5oOiBEZWZpbmVz
IGEgYmFjay1lbmQgc3BlY2lmaWMgY2xhc3MgZm9yIHRoZSBEM0QxMSByZW5kZXJlci4KLQotI2lm
bmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSRVIxMV9IXwotI2RlZmluZSBMSUJHTEVTVjJf
UkVOREVSRVJfUkVOREVSRVIxMV9IXwotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIK
LSNpbmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9t
YXRodXRpbC5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclN0YXRlQ2FjaGUuaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvSW5wdXRMYXlvdXRDYWNoZS5oIgotI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQuaCIKLQotbmFtZXNwYWNlIGdsCi17Ci1jbGFzcyBS
ZW5kZXJidWZmZXI7Ci19Ci0KLW5hbWVzcGFjZSByeAotewotCi1jbGFzcyBWZXJ0ZXhEYXRhTWFu
YWdlcjsKLWNsYXNzIEluZGV4RGF0YU1hbmFnZXI7Ci1jbGFzcyBTdHJlYW1pbmdJbmRleEJ1ZmZl
ckludGVyZmFjZTsKLQotZW51bQotewotICAgIE1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTX0Qz
RDExID0gMTAyNCwKLSAgICBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTX0QzRDExID0gMTAy
NAotfTsKLQotY2xhc3MgUmVuZGVyZXIxMSA6IHB1YmxpYyBSZW5kZXJlcgotewotICBwdWJsaWM6
Ci0gICAgUmVuZGVyZXIxMShlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIEhEQyBoRGMpOwotICAgIHZp
cnR1YWwgflJlbmRlcmVyMTEoKTsKLQotICAgIHN0YXRpYyBSZW5kZXJlcjExICptYWtlUmVuZGVy
ZXIxMShSZW5kZXJlciAqcmVuZGVyZXIpOwotCi0gICAgdmlydHVhbCBFR0xpbnQgaW5pdGlhbGl6
ZSgpOwotICAgIHZpcnR1YWwgYm9vbCByZXNldERldmljZSgpOwotCi0gICAgdmlydHVhbCBpbnQg
Z2VuZXJhdGVDb25maWdzKENvbmZpZ0Rlc2MgKipjb25maWdEZXNjTGlzdCk7Ci0gICAgdmlydHVh
bCB2b2lkIGRlbGV0ZUNvbmZpZ3MoQ29uZmlnRGVzYyAqY29uZmlnRGVzY0xpc3QpOwotCi0gICAg
dmlydHVhbCB2b2lkIHN5bmMoYm9vbCBibG9jayk7Ci0KLSAgICB2aXJ0dWFsIFN3YXBDaGFpbiAq
Y3JlYXRlU3dhcENoYWluKEhXTkQgd2luZG93LCBIQU5ETEUgc2hhcmVIYW5kbGUsIEdMZW51bSBi
YWNrQnVmZmVyRm9ybWF0LCBHTGVudW0gZGVwdGhCdWZmZXJGb3JtYXQpOwotCi0gICAgdmlydHVh
bCB2b2lkIHNldFNhbXBsZXJTdGF0ZShnbDo6U2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBj
b25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4
dHVyZShnbDo6U2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBnbDo6VGV4dHVyZSAqdGV4dHVy
ZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmFzdGVyaXplclN0YXRlKGNvbnN0IGdsOjpSYXN0
ZXJpemVyU3RhdGUgJnJhc3RlclN0YXRlKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0
ZShjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNvbG9yICZibGVu
ZENvbG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1w
bGVNYXNrKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RGVwdGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6
OkRlcHRoU3RlbmNpbFN0YXRlICZkZXB0aFN0ZW5jaWxTdGF0ZSwgaW50IHN0ZW5jaWxSZWYsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGVuY2lsQmFja1JlZiwg
Ym9vbCBmcm9udEZhY2VDQ1cpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldFNjaXNzb3JSZWN0YW5n
bGUoY29uc3QgZ2w6OlJlY3RhbmdsZSAmc2Npc3NvciwgYm9vbCBlbmFibGVkKTsKLSAgICB2aXJ0
dWFsIGJvb2wgc2V0Vmlld3BvcnQoY29uc3QgZ2w6OlJlY3RhbmdsZSAmdmlld3BvcnQsIGZsb2F0
IHpOZWFyLCBmbG9hdCB6RmFyLCBHTGVudW0gZHJhd01vZGUsIEdMZW51bSBmcm9udEZhY2UsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaWdub3JlVmlld3BvcnQpOwotCi0gICAg
dmlydHVhbCBib29sIGFwcGx5UHJpbWl0aXZlVHlwZShHTGVudW0gbW9kZSwgR0xzaXplaSBjb3Vu
dCk7Ci0gICAgdmlydHVhbCBib29sIGFwcGx5UmVuZGVyVGFyZ2V0KGdsOjpGcmFtZWJ1ZmZlciAq
ZnJhbWVCdWZmZXIpOwotICAgIHZpcnR1YWwgdm9pZCBhcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1C
aW5hcnkgKnByb2dyYW1CaW5hcnkpOwotICAgIHZpcnR1YWwgdm9pZCBhcHBseVVuaWZvcm1zKGds
OjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBnbDo6VW5pZm9ybUFycmF5ICp1bmlmb3Jt
QXJyYXkpOwotICAgIHZpcnR1YWwgR0xlbnVtIGFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0
ZXNbXSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKLSAg
ICB2aXJ0dWFsIEdMZW51bSBhcHBseUluZGV4QnVmZmVyKGNvbnN0IEdMdm9pZCAqaW5kaWNlcywg
Z2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyLCBHTHNpemVpIGNvdW50LCBHTGVudW0gbW9k
ZSwgR0xlbnVtIHR5cGUsIFRyYW5zbGF0ZWRJbmRleERhdGEgKmluZGV4SW5mbyk7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xzaXpl
aSBpbnN0YW5jZXMpOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUs
IEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpC
dWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5k
ZXhJbmZvLCBHTHNpemVpIGluc3RhbmNlcyk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoY29u
c3QgZ2w6OkNsZWFyUGFyYW1ldGVycyAmY2xlYXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJh
bWVCdWZmZXIpOwotCi0gICAgdmlydHVhbCB2b2lkIG1hcmtBbGxTdGF0ZURpcnR5KCk7Ci0KLSAg
ICAvLyBsb3N0IGRldmljZQotICAgIHZvaWQgbm90aWZ5RGV2aWNlTG9zdCgpOwotICAgIHZpcnR1
YWwgYm9vbCBpc0RldmljZUxvc3QoKTsKLSAgICB2aXJ0dWFsIGJvb2wgdGVzdERldmljZUxvc3Qo
Ym9vbCBub3RpZnkpOwotICAgIHZpcnR1YWwgYm9vbCB0ZXN0RGV2aWNlUmVzZXR0YWJsZSgpOwot
Ci0gICAgLy8gUmVuZGVyZXIgY2FwYWJpbGl0aWVzCi0gICAgdmlydHVhbCBEV09SRCBnZXRBZGFw
dGVyVmVuZG9yKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBzdGQ6OnN0cmluZyBnZXRSZW5kZXJlckRl
c2NyaXB0aW9uKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHVUlEIGdldEFkYXB0ZXJJZGVudGlmaWVy
KCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0QkdSQVRleHR1cmVTdXBwb3J0KCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBib29sIGdldERYVDFUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1
YWwgYm9vbCBnZXREWFQzVGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhU
NVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldEV2ZW50UXVlcnlTdXBwb3J0
KCk7Ci0gICAgdmlydHVhbCBib29sIGdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydChib29sICpmaWx0
ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4
dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKTsKLSAgICB2aXJ0
dWFsIGJvb2wgZ2V0THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wg
Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1YWwgdW5zaWduZWQg
aW50IGdldE1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1
bnNpZ25lZCBpbnQgZ2V0TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0OwotICAg
IHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlc2VydmVkVmVydGV4VW5pZm9ybVZlY3RvcnMoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9y
bVZlY3RvcnMoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhV
bmlmb3JtVmVjdG9ycygpIGNvbnN0OwotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heEZy
YWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBn
ZXRNYXhWYXJ5aW5nVmVjdG9ycygpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBnZXROb25Qb3dl
cjJUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBnZXREZXB0aFRleHR1
cmVTdXBwb3J0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdldE9jY2x1c2lvblF1ZXJ5U3Vw
cG9ydCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBnZXRJbnN0YW5jaW5nU3VwcG9ydCgpIGNv
bnN0OwotICAgIHZpcnR1YWwgYm9vbCBnZXRUZXh0dXJlRmlsdGVyQW5pc290cm9weVN1cHBvcnQo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGZsb2F0IGdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBib29sIGdldFNoYXJlSGFuZGxlU3VwcG9ydCgpIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBnZXREZXJpdmF0aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0KCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBib29sIGdldFBvc3RTdWJCdWZmZXJTdXBwb3J0KCkgY29uc3Q7Ci0KLSAgICB2
aXJ0dWFsIGludCBnZXRNYWpvclNoYWRlck1vZGVsKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBmbG9h
dCBnZXRNYXhQb2ludFNpemUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBnZXRNYXhWaWV3cG9y
dERpbWVuc2lvbigpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1cmVXaWR0aCgp
IGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1cmVIZWlnaHQoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGJvb2wgZ2V0MzJCaXRJbmRleFN1cHBvcnQoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGludCBnZXRNaW5Td2FwSW50ZXJ2YWwoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBnZXRNYXhT
d2FwSW50ZXJ2YWwoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRNYXhTdXBwb3J0
ZWRTYW1wbGVzKCkgY29uc3Q7Ci0gICAgaW50IGdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKERY
R0lfRk9STUFUIGZvcm1hdCwgdW5zaWduZWQgaW50IHJlcXVlc3RlZCkgY29uc3Q7Ci0KLSAgICB2
aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhSZW5kZXJUYXJnZXRzKCkgY29uc3Q7Ci0KLSAgICAv
LyBQaXhlbCBvcGVyYXRpb25zCi0gICAgdmlydHVhbCBib29sIGNvcHlUb1JlbmRlclRhcmdldChU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJE
ICpzb3VyY2UpOwotICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2VDdWJlICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnNv
dXJjZSk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJh
bWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9y
bWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpOwot
ICAgIHZpcnR1YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwg
Y29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsKTsKLQotICAgIGJvb2wgY29weVRleHR1cmUoSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpz
b3VyY2UsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZUFyZWEsIHVuc2lnbmVkIGludCBzb3Vy
Y2VXaWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
IElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmRlc3QsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRlc3RB
cmVhLCB1bnNpZ25lZCBpbnQgZGVzdFdpZHRoLCB1bnNpZ25lZCBpbnQgZGVzdEhlaWdodCwgR0xl
bnVtIGRlc3RGb3JtYXQpOwotCi0gICAgdmlydHVhbCBib29sIGJsaXRSZWN0KGdsOjpGcmFtZWJ1
ZmZlciAqcmVhZFRhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGdsOjpGcmFt
ZWJ1ZmZlciAqZHJhd1RhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0RGVw
dGhTdGVuY2lsKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVhZFBpeGVscyhnbDo6RnJhbWVidWZmZXIg
KmZyYW1lYnVmZmVyLCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xzaXplaSBvdXRwdXRQaXRjaCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLCBHTGlu
dCBwYWNrQWxpZ25tZW50LCB2b2lkKiBwaXhlbHMpOwotCi0gICAgLy8gUmVuZGVyVGFyZ2V0IGNy
ZWF0aW9uCi0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRlclRhcmdldChTd2Fw
Q2hhaW4gKnN3YXBDaGFpbiwgYm9vbCBkZXB0aCk7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQg
KmNyZWF0ZVJlbmRlclRhcmdldChpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMc2l6ZWkgc2FtcGxlcywgYm9vbCBkZXB0aCk7Ci0KLSAgICAvLyBTaGFkZXIgb3BlcmF0aW9u
cwotICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqbG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9p
ZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUpOwotICAgIHZp
cnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqY29tcGlsZVRvRXhlY3V0YWJsZShnbDo6SW5mb0xvZyAm
aW5mb0xvZywgY29uc3QgY2hhciAqc2hhZGVySExTTCwgcng6OlNoYWRlclR5cGUgdHlwZSwgRDNE
V29ya2Fyb3VuZFR5cGUgd29ya2Fyb3VuZCk7Ci0KLSAgICAvLyBJbWFnZSBvcGVyYXRpb25zCi0g
ICAgdmlydHVhbCBJbWFnZSAqY3JlYXRlSW1hZ2UoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJh
dGVNaXBtYXAoSW1hZ2UgKmRlc3QsIEltYWdlICpzb3VyY2UpOwotICAgIHZpcnR1YWwgVGV4dHVy
ZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoU3dhcENoYWluICpzd2FwQ2hhaW4pOwot
ICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoaW50IGxl
dmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5k
ZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgdmlydHVhbCBUZXh0
dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKGludCBsZXZlbHMsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNp
emUpOwotCi0gICAgLy8gQnVmZmVyIGNyZWF0aW9uCi0gICAgdmlydHVhbCBWZXJ0ZXhCdWZmZXIg
KmNyZWF0ZVZlcnRleEJ1ZmZlcigpOwotICAgIHZpcnR1YWwgSW5kZXhCdWZmZXIgKmNyZWF0ZUlu
ZGV4QnVmZmVyKCk7Ci0gICAgdmlydHVhbCBCdWZmZXJTdG9yYWdlICpjcmVhdGVCdWZmZXJTdG9y
YWdlKCk7Ci0KLSAgICAvLyBRdWVyeSBhbmQgRmVuY2UgY3JlYXRpb24KLSAgICB2aXJ0dWFsIFF1
ZXJ5SW1wbCAqY3JlYXRlUXVlcnkoR0xlbnVtIHR5cGUpOwotICAgIHZpcnR1YWwgRmVuY2VJbXBs
ICpjcmVhdGVGZW5jZSgpOwotCi0gICAgLy8gRDNEMTEtcmVuZGVyZXIgc3BlY2lmaWMgbWV0aG9k
cwotICAgIElEM0QxMURldmljZSAqZ2V0RGV2aWNlKCkgeyByZXR1cm4gbURldmljZTsgfQotICAg
IElEM0QxMURldmljZUNvbnRleHQgKmdldERldmljZUNvbnRleHQoKSB7IHJldHVybiBtRGV2aWNl
Q29udGV4dDsgfTsKLSAgICBJRFhHSUZhY3RvcnkgKmdldER4Z2lGYWN0b3J5KCkgeyByZXR1cm4g
bUR4Z2lGYWN0b3J5OyB9OwotCi0gICAgYm9vbCBnZXRSZW5kZXJUYXJnZXRSZXNvdXJjZShnbDo6
UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciwgdW5zaWduZWQgaW50ICpzdWJyZXNvdXJjZUluZGV4
LCBJRDNEMTFUZXh0dXJlMkQgKipyZXNvdXJjZSk7Ci0gICAgdm9pZCB1bmFwcGx5UmVuZGVyVGFy
Z2V0cygpOwotICAgIHZvaWQgc2V0T25lVGltZVJlbmRlclRhcmdldChJRDNEMTFSZW5kZXJUYXJn
ZXRWaWV3ICpyZW5kZXJUYXJnZXRWaWV3KTsKLQotICAgIHZpcnR1YWwgYm9vbCBnZXRMVUlEKExV
SUQgKmFkYXB0ZXJMdWlkKSBjb25zdDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihSZW5kZXJlcjExKTsKLQotICAgIHZvaWQgZHJhd0xpbmVMb29wKEdMc2l6ZWkg
Y291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGludCBtaW5JbmRleCwg
Z2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyKTsKLSAgICB2b2lkIGRyYXdUcmlhbmdsZUZh
bihHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBpbnQg
bWluSW5kZXgsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgaW50IGluc3RhbmNlcyk7
Ci0KLSAgICB2b2lkIHJlYWRUZXh0dXJlRGF0YShJRDNEMTFUZXh0dXJlMkQgKnRleHR1cmUsIHVu
c2lnbmVkIGludCBzdWJSZXNvdXJjZSwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmYXJlYSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xzaXplaSBv
dXRwdXRQaXRjaCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMaW50IHBhY2tBbGlnbm1lbnQsIHZvaWQgKnBpeGVscyk7Ci0KLSAgICB2b2lkIG1h
c2tlZENsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBib29sIHVz
aW5nRXh0ZW5kZWREcmF3QnVmZmVycyk7Ci0gICAgcng6OlJhbmdlIGdldFZpZXdwb3J0Qm91bmRz
KCkgY29uc3Q7Ci0KLSAgICBib29sIGJsaXRSZW5kZXJidWZmZXJSZWN0KGNvbnN0IGdsOjpSZWN0
YW5nbGUgJnJlYWRSZWN0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkcmF3UmVjdCwgUmVuZGVyVGFy
Z2V0ICpyZWFkUmVuZGVyVGFyZ2V0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl
bmRlclRhcmdldCAqZHJhd1JlbmRlclRhcmdldCwgYm9vbCB3aG9sZUJ1ZmZlckNvcHkpOwotICAg
IElEM0QxMVRleHR1cmUyRCAqcmVzb2x2ZU11bHRpc2FtcGxlZFRleHR1cmUoSUQzRDExVGV4dHVy
ZTJEICpzb3VyY2UsIHVuc2lnbmVkIGludCBzdWJyZXNvdXJjZSk7Ci0KLSAgICBITU9EVUxFIG1E
M2QxMU1vZHVsZTsKLSAgICBITU9EVUxFIG1EeGdpTW9kdWxlOwotICAgIEhEQyBtRGM7Ci0KLSAg
ICBib29sIG1EZXZpY2VMb3N0OwotCi0gICAgdm9pZCBpbml0aWFsaXplRGV2aWNlKCk7Ci0gICAg
dm9pZCByZWxlYXNlRGV2aWNlUmVzb3VyY2VzKCk7Ci0gICAgaW50IGdldE1pbm9yU2hhZGVyTW9k
ZWwoKSBjb25zdDsKLSAgICB2b2lkIHJlbGVhc2UoKTsKLQotICAgIFJlbmRlclN0YXRlQ2FjaGUg
bVN0YXRlQ2FjaGU7Ci0KLSAgICAvLyBTdXBwb3J0IGZsYWdzCi0gICAgYm9vbCBtRmxvYXQxNlRl
eHR1cmVTdXBwb3J0OwotICAgIGJvb2wgbUZsb2F0MTZGaWx0ZXJTdXBwb3J0OwotICAgIGJvb2wg
bUZsb2F0MTZSZW5kZXJTdXBwb3J0OwotCi0gICAgYm9vbCBtRmxvYXQzMlRleHR1cmVTdXBwb3J0
OwotICAgIGJvb2wgbUZsb2F0MzJGaWx0ZXJTdXBwb3J0OwotICAgIGJvb2wgbUZsb2F0MzJSZW5k
ZXJTdXBwb3J0OwotCi0gICAgYm9vbCBtRFhUMVRleHR1cmVTdXBwb3J0OwotICAgIGJvb2wgbURY
VDNUZXh0dXJlU3VwcG9ydDsKLSAgICBib29sIG1EWFQ1VGV4dHVyZVN1cHBvcnQ7Ci0KLSAgICBi
b29sIG1EZXB0aFRleHR1cmVTdXBwb3J0OwotCi0gICAgLy8gTXVsdGlzYW1wbGUgZm9ybWF0IHN1
cHBvcnQKLSAgICBzdHJ1Y3QgTXVsdGlzYW1wbGVTdXBwb3J0SW5mbwotICAgIHsKLSAgICAgICAg
dW5zaWduZWQgaW50IHF1YWxpdHlMZXZlbHNbRDNEMTFfTUFYX01VTFRJU0FNUExFX1NBTVBMRV9D
T1VOVF07Ci0gICAgfTsKLQotICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPERYR0lfRk9S
TUFULCBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvLCBzdGQ6Omhhc2g8aW50PiA+IE11bHRpc2FtcGxl
U3VwcG9ydE1hcDsKLSAgICBNdWx0aXNhbXBsZVN1cHBvcnRNYXAgbU11bHRpc2FtcGxlU3VwcG9y
dE1hcDsKLQotICAgIHVuc2lnbmVkIGludCBtTWF4U3VwcG9ydGVkU2FtcGxlczsKLQotICAgIC8v
IGN1cnJlbnQgcmVuZGVyIHRhcmdldCBzdGF0ZXMKLSAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRS
ZW5kZXJUYXJnZXRTZXJpYWxzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTXTsK
LSAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbDsKLSAgICB1bnNpZ25l
ZCBpbnQgbUFwcGxpZWRTdGVuY2lsYnVmZmVyU2VyaWFsOwotICAgIGJvb2wgbURlcHRoU3RlbmNp
bEluaXRpYWxpemVkOwotICAgIGJvb2wgbVJlbmRlclRhcmdldERlc2NJbml0aWFsaXplZDsKLSAg
ICByeDo6UmVuZGVyVGFyZ2V0OjpEZXNjIG1SZW5kZXJUYXJnZXREZXNjOwotICAgIHVuc2lnbmVk
IGludCBtQ3VyRGVwdGhTaXplOwotICAgIHVuc2lnbmVkIGludCBtQ3VyU3RlbmNpbFNpemU7Ci0K
LSAgICAvLyBDdXJyZW50bHkgYXBwbGllZCBzYW1wbGVyIHN0YXRlcwotICAgIGJvb2wgbUZvcmNl
U2V0VmVydGV4U2FtcGxlclN0YXRlc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhU
VVJFX0lNQUdFX1VOSVRTXTsKLSAgICBnbDo6U2FtcGxlclN0YXRlIG1DdXJWZXJ0ZXhTYW1wbGVy
U3RhdGVzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNd
OwotCi0gICAgYm9vbCBtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0ZXNbZ2w6Ok1BWF9URVhUVVJF
X0lNQUdFX1VOSVRTXTsKLSAgICBnbDo6U2FtcGxlclN0YXRlIG1DdXJQaXhlbFNhbXBsZXJTdGF0
ZXNbZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKLQotICAgIC8vIEN1cnJlbnRseSBhcHBs
aWVkIHRleHR1cmVzCi0gICAgdW5zaWduZWQgaW50IG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1tn
bDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKLSAgICB1
bnNpZ25lZCBpbnQgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbZ2w6Ok1BWF9URVhUVVJFX0lNQUdF
X1VOSVRTXTsKLQotICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIGJsZW5kIHN0YXRlCi0gICAgYm9v
bCBtRm9yY2VTZXRCbGVuZFN0YXRlOwotICAgIGdsOjpCbGVuZFN0YXRlIG1DdXJCbGVuZFN0YXRl
OwotICAgIGdsOjpDb2xvciBtQ3VyQmxlbmRDb2xvcjsKLSAgICB1bnNpZ25lZCBpbnQgbUN1clNh
bXBsZU1hc2s7Ci0KLSAgICAvLyBDdXJyZW50bHkgYXBwbGllZCByYXN0ZXJpemVyIHN0YXRlCi0g
ICAgYm9vbCBtRm9yY2VTZXRSYXN0ZXJTdGF0ZTsKLSAgICBnbDo6UmFzdGVyaXplclN0YXRlIG1D
dXJSYXN0ZXJTdGF0ZTsKLQotICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIGRlcHRoIHN0ZW5jaWwg
c3RhdGUKLSAgICBib29sIG1Gb3JjZVNldERlcHRoU3RlbmNpbFN0YXRlOwotICAgIGdsOjpEZXB0
aFN0ZW5jaWxTdGF0ZSBtQ3VyRGVwdGhTdGVuY2lsU3RhdGU7Ci0gICAgaW50IG1DdXJTdGVuY2ls
UmVmOwotICAgIGludCBtQ3VyU3RlbmNpbEJhY2tSZWY7Ci0KLSAgICAvLyBDdXJyZW50bHkgYXBw
bGllZCBzY2lzc29yIHJlY3RhbmdsZQotICAgIGJvb2wgbUZvcmNlU2V0U2Npc3NvcjsKLSAgICBi
b29sIG1TY2lzc29yRW5hYmxlZDsKLSAgICBnbDo6UmVjdGFuZ2xlIG1DdXJTY2lzc29yOwotCi0g
ICAgLy8gQ3VycmVudGx5IGFwcGxpZWQgdmlld3BvcnQKLSAgICBib29sIG1Gb3JjZVNldFZpZXdw
b3J0OwotICAgIGdsOjpSZWN0YW5nbGUgbUN1clZpZXdwb3J0OwotICAgIGZsb2F0IG1DdXJOZWFy
OwotICAgIGZsb2F0IG1DdXJGYXI7Ci0KLSAgICAvLyBDdXJyZW50bHkgYXBwbGllZCBwcmltaXRp
dmUgdG9wb2xvZ3kKLSAgICBEM0QxMV9QUklNSVRJVkVfVE9QT0xPR1kgbUN1cnJlbnRQcmltaXRp
dmVUb3BvbG9neTsKLQotICAgIHVuc2lnbmVkIGludCBtQXBwbGllZElCU2VyaWFsOwotICAgIHVu
c2lnbmVkIGludCBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbDsKLSAgICB1bnNpZ25lZCBpbnQgbUFw
cGxpZWRJQk9mZnNldDsKLQotICAgIHVuc2lnbmVkIGludCBtQXBwbGllZFByb2dyYW1CaW5hcnlT
ZXJpYWw7Ci0gICAgYm9vbCBtSXNHZW9tZXRyeVNoYWRlckFjdGl2ZTsKLQotICAgIGR4X1ZlcnRl
eENvbnN0YW50cyBtVmVydGV4Q29uc3RhbnRzOwotICAgIGR4X1ZlcnRleENvbnN0YW50cyBtQXBw
bGllZFZlcnRleENvbnN0YW50czsKLSAgICBJRDNEMTFCdWZmZXIgKm1Ecml2ZXJDb25zdGFudEJ1
ZmZlclZTOwotICAgIElEM0QxMUJ1ZmZlciAqbUN1cnJlbnRWZXJ0ZXhDb25zdGFudEJ1ZmZlcjsK
LQotICAgIGR4X1BpeGVsQ29uc3RhbnRzIG1QaXhlbENvbnN0YW50czsKLSAgICBkeF9QaXhlbENv
bnN0YW50cyBtQXBwbGllZFBpeGVsQ29uc3RhbnRzOwotICAgIElEM0QxMUJ1ZmZlciAqbURyaXZl
ckNvbnN0YW50QnVmZmVyUFM7Ci0gICAgSUQzRDExQnVmZmVyICptQ3VycmVudFBpeGVsQ29uc3Rh
bnRCdWZmZXI7Ci0KLSAgICBJRDNEMTFCdWZmZXIgKm1DdXJyZW50R2VvbWV0cnlDb25zdGFudEJ1
ZmZlcjsKLQotICAgIC8vIFZlcnRleCwgaW5kZXggYW5kIGlucHV0IGxheW91dHMKLSAgICBWZXJ0
ZXhEYXRhTWFuYWdlciAqbVZlcnRleERhdGFNYW5hZ2VyOwotICAgIEluZGV4RGF0YU1hbmFnZXIg
Km1JbmRleERhdGFNYW5hZ2VyOwotICAgIElucHV0TGF5b3V0Q2FjaGUgbUlucHV0TGF5b3V0Q2Fj
aGU7Ci0KLSAgICBTdHJlYW1pbmdJbmRleEJ1ZmZlckludGVyZmFjZSAqbUxpbmVMb29wSUI7Ci0g
ICAgU3RyZWFtaW5nSW5kZXhCdWZmZXJJbnRlcmZhY2UgKm1UcmlhbmdsZUZhbklCOwotCi0gICAg
Ly8gVGV4dHVyZSBjb3B5IHJlc291cmNlcwotICAgIGJvb2wgbUNvcHlSZXNvdXJjZXNJbml0aWFs
aXplZDsKLSAgICBJRDNEMTFCdWZmZXIgKm1Db3B5VkI7Ci0gICAgSUQzRDExU2FtcGxlclN0YXRl
ICptQ29weVNhbXBsZXI7Ci0gICAgSUQzRDExSW5wdXRMYXlvdXQgKm1Db3B5SUw7Ci0gICAgSUQz
RDExVmVydGV4U2hhZGVyICptQ29weVZTOwotICAgIElEM0QxMVBpeGVsU2hhZGVyICptQ29weVJH
QkFQUzsKLSAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUNvcHlSR0JQUzsKLSAgICBJRDNEMTFQaXhl
bFNoYWRlciAqbUNvcHlMdW1QUzsKLSAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUNvcHlMdW1BbHBo
YVBTOwotCi0gICAgLy8gTWFza2VkIGNsZWFyIHJlc291cmNlcwotICAgIGJvb2wgbUNsZWFyUmVz
b3VyY2VzSW5pdGlhbGl6ZWQ7Ci0gICAgSUQzRDExQnVmZmVyICptQ2xlYXJWQjsKLSAgICBJRDNE
MTFJbnB1dExheW91dCAqbUNsZWFySUw7Ci0gICAgSUQzRDExVmVydGV4U2hhZGVyICptQ2xlYXJW
UzsKLSAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUNsZWFyU2luZ2xlUFM7Ci0gICAgSUQzRDExUGl4
ZWxTaGFkZXIgKm1DbGVhck11bHRpcGxlUFM7Ci0gICAgSUQzRDExUmFzdGVyaXplclN0YXRlICpt
Q2xlYXJTY2lzc29yUlM7Ci0gICAgSUQzRDExUmFzdGVyaXplclN0YXRlICptQ2xlYXJOb1NjaXNz
b3JSUzsKLQotICAgIC8vIFN5bmMgcXVlcnkKLSAgICBJRDNEMTFRdWVyeSAqbVN5bmNRdWVyeTsK
LQotICAgIElEM0QxMURldmljZSAqbURldmljZTsKLSAgICBEM0RfRkVBVFVSRV9MRVZFTCBtRmVh
dHVyZUxldmVsOwotICAgIElEM0QxMURldmljZUNvbnRleHQgKm1EZXZpY2VDb250ZXh0OwotICAg
IElEWEdJQWRhcHRlciAqbUR4Z2lBZGFwdGVyOwotICAgIERYR0lfQURBUFRFUl9ERVNDIG1BZGFw
dGVyRGVzY3JpcHRpb247Ci0gICAgY2hhciBtRGVzY3JpcHRpb25bMTI4XTsKLSAgICBJRFhHSUZh
Y3RvcnkgKm1EeGdpRmFjdG9yeTsKLQotICAgIC8vIENhY2hlZCBkZXZpY2UgY2FwcwotICAgIGJv
b2wgbUJHUkFUZXh0dXJlU3VwcG9ydDsKLX07Ci0KLX0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVO
REVSRVJfUkVOREVSRVIxMV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlcjkuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlcjkuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBlODlmOGJkZGM4ZDZjZmViMTI4YTQzM2VkMGY3ZTE0ZWZlOGQzMTE5
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXI5LmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDMyNjQgKzAsMCBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0vLwotCi0vLyBSZW5kZXJlcjkuY3BwOiBJbXBsZW1lbnRzIGEgYmFjay1l
bmQgc3BlY2lmaWMgY2xhc3MgZm9yIHRoZSBEM0Q5IHJlbmRlcmVyLgotCi0jaW5jbHVkZSAibGli
R0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL1RleHR1cmUuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIK
LSNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L1Byb2dyYW1CaW5hcnkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhEYXRh
TWFuYWdlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlcjkuaCIKLSNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXI5X3V0aWxzLmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckV4ZWN1dGFibGU5LmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL1N3YXBDaGFpbjkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
VGV4dHVyZVN0b3JhZ2U5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlOS5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9CbGl0LmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldDkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvVmVydGV4QnVmZmVyOS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1
ZmZlcjkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZTkuaCIK
LSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUXVlcnk5LmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL0ZlbmNlOS5oIgotCi0jaW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIKLQot
I2luY2x1ZGUgInRoaXJkX3BhcnR5L3RyYWNlX2V2ZW50L3RyYWNlX2V2ZW50LmgiCi0KLS8vIENh
biBhbHNvIGJlIGVuYWJsZWQgYnkgZGVmaW5pbmcgRk9SQ0VfUkVGX1JBU1QgaW4gdGhlIHByb2pl
Y3QncyBwcmVkZWZpbmVkIG1hY3JvcwotI2RlZmluZSBSRUZfUkFTVCAwCi0KLS8vIFRoZSAiRGVi
dWcgVGhpcyBQaXhlbC4uLiIgZmVhdHVyZSBpbiBQSVggb2Z0ZW4gZmFpbHMgd2hlbiB1c2luZyB0
aGUKLS8vIEQzRDlFeCBpbnRlcmZhY2VzLiAgSW4gb3JkZXIgdG8gZ2V0IGRlYnVnIHBpeGVsIHRv
IHdvcmsgb24gYSBWaXN0YS9XaW4gNwotLy8gbWFjaGluZSwgZGVmaW5lICJBTkdMRV9FTkFCTEVf
RDNEOUVYPTAiIGluIHlvdXIgcHJvamVjdCBmaWxlLgotI2lmICFkZWZpbmVkKEFOR0xFX0VOQUJM
RV9EM0Q5RVgpCi0vLyBFbmFibGVzIHVzZSBvZiB0aGUgSURpcmVjdDNEOUV4IGludGVyZmFjZSwg
d2hlbiBhdmFpbGFibGUKLSNkZWZpbmUgQU5HTEVfRU5BQkxFX0QzRDlFWCAxCi0jZW5kaWYgLy8g
IWRlZmluZWQoQU5HTEVfRU5BQkxFX0QzRDlFWCkKLQotbmFtZXNwYWNlIHJ4Ci17Ci1zdGF0aWMg
Y29uc3QgRDNERk9STUFUIFJlbmRlclRhcmdldEZvcm1hdHNbXSA9Ci0gICAgewotICAgICAgICBE
M0RGTVRfQTFSNUc1QjUsCi0gICAgLy8gIEQzREZNVF9BMlIxMEcxMEIxMCwgICAvLyBUaGUgY29s
b3JfcmFtcCBjb25mb3JtYW5jZSB0ZXN0IHVzZXMgUmVhZFBpeGVscyB3aXRoIFVOU0lHTkVEX0JZ
VEUgY2F1c2luZyBpdCB0byB0aGluayB0aGF0IHJlbmRlcmluZyBza2lwcGVkIGEgY29sb3VyIHZh
bHVlLgotICAgICAgICBEM0RGTVRfQThSOEc4QjgsCi0gICAgICAgIEQzREZNVF9SNUc2QjUsCi0g
ICAgLy8gIEQzREZNVF9YMVI1RzVCNSwgICAgICAvLyBIYXMgbm8gY29tcGF0aWJsZSBPcGVuR0wg
RVMgcmVuZGVyYnVmZmVyIGZvcm1hdAotICAgICAgICBEM0RGTVRfWDhSOEc4QjgKLSAgICB9Owot
Ci1zdGF0aWMgY29uc3QgRDNERk9STUFUIERlcHRoU3RlbmNpbEZvcm1hdHNbXSA9Ci0gICAgewot
ICAgICAgICBEM0RGTVRfVU5LTk9XTiwKLSAgICAvLyAgRDNERk1UX0QxNl9MT0NLQUJMRSwKLSAg
ICAgICAgRDNERk1UX0QzMiwKLSAgICAvLyAgRDNERk1UX0QxNVMxLAotICAgICAgICBEM0RGTVRf
RDI0UzgsCi0gICAgICAgIEQzREZNVF9EMjRYOCwKLSAgICAvLyAgRDNERk1UX0QyNFg0UzQsCi0g
ICAgICAgIEQzREZNVF9EMTYsCi0gICAgLy8gIEQzREZNVF9EMzJGX0xPQ0tBQkxFLAotICAgIC8v
ICBEM0RGTVRfRDI0RlM4Ci0gICAgfTsKLQotZW51bQotewotICAgIE1BWF9WRVJURVhfQ09OU1RB
TlRfVkVDVE9SU19EM0Q5ID0gMjU2LAotICAgIE1BWF9QSVhFTF9DT05TVEFOVF9WRUNUT1JTX1NN
MiA9IDMyLAotICAgIE1BWF9QSVhFTF9DT05TVEFOVF9WRUNUT1JTX1NNMyA9IDIyNCwKLSAgICBN
QVhfVkFSWUlOR19WRUNUT1JTX1NNMiA9IDgsCi0gICAgTUFYX1ZBUllJTkdfVkVDVE9SU19TTTMg
PSAxMCwKLQotICAgIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl9TTTMgPSA0Ci19OwotCi1S
ZW5kZXJlcjk6OlJlbmRlcmVyOShlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIEhEQyBoRGMsIGJvb2wg
c29mdHdhcmVEZXZpY2UpIDogUmVuZGVyZXIoZGlzcGxheSksIG1EYyhoRGMpLCBtU29mdHdhcmVE
ZXZpY2Uoc29mdHdhcmVEZXZpY2UpCi17Ci0gICAgbUQzZDlNb2R1bGUgPSBOVUxMOwotCi0gICAg
bUQzZDkgPSBOVUxMOwotICAgIG1EM2Q5RXggPSBOVUxMOwotICAgIG1EZXZpY2UgPSBOVUxMOwot
ICAgIG1EZXZpY2VFeCA9IE5VTEw7Ci0gICAgbURldmljZVdpbmRvdyA9IE5VTEw7Ci0gICAgbUJs
aXQgPSBOVUxMOwotCi0gICAgbUFkYXB0ZXIgPSBEM0RBREFQVEVSX0RFRkFVTFQ7Ci0KLSAgICAj
aWYgUkVGX1JBU1QgPT0gMSB8fCBkZWZpbmVkKEZPUkNFX1JFRl9SQVNUKQotICAgICAgICBtRGV2
aWNlVHlwZSA9IEQzRERFVlRZUEVfUkVGOwotICAgICNlbHNlCi0gICAgICAgIG1EZXZpY2VUeXBl
ID0gRDNEREVWVFlQRV9IQUw7Ci0gICAgI2VuZGlmCi0KLSAgICBtRGV2aWNlTG9zdCA9IGZhbHNl
OwotCi0gICAgbU1heFN1cHBvcnRlZFNhbXBsZXMgPSAwOwotCi0gICAgbU1hc2tlZENsZWFyU2F2
ZWRTdGF0ZSA9IE5VTEw7Ci0KLSAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBOVUxMOwotICAgIG1J
bmRleERhdGFNYW5hZ2VyID0gTlVMTDsKLSAgICBtTGluZUxvb3BJQiA9IE5VTEw7Ci0KLSAgICBt
TWF4TnVsbENvbG9yYnVmZmVyTFJVID0gMDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9O
VUxMX0NPTE9SQlVGRkVSX0NBQ0hFX0VOVFJJRVM7IGkrKykKLSAgICB7Ci0gICAgICAgIG1OdWxs
Q29sb3JidWZmZXJDYWNoZVtpXS5scnVDb3VudCA9IDA7Ci0gICAgICAgIG1OdWxsQ29sb3JidWZm
ZXJDYWNoZVtpXS53aWR0aCA9IDA7Ci0gICAgICAgIG1OdWxsQ29sb3JidWZmZXJDYWNoZVtpXS5o
ZWlnaHQgPSAwOwotICAgICAgICBtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0uYnVmZmVyID0gTlVM
TDsKLSAgICB9Ci19Ci0KLVJlbmRlcmVyOTo6flJlbmRlcmVyOSgpCi17Ci0gICAgcmVsZWFzZURl
dmljZVJlc291cmNlcygpOwotCi0gICAgaWYgKG1EZXZpY2UpCi0gICAgewotICAgICAgICAvLyBJ
ZiB0aGUgZGV2aWNlIGlzIGxvc3QsIHJlc2V0IGl0IGZpcnN0IHRvIHByZXZlbnQgbGVhdmluZyB0
aGUgZHJpdmVyIGluIGFuIHVuc3RhYmxlIHN0YXRlCi0gICAgICAgIGlmICh0ZXN0RGV2aWNlTG9z
dChmYWxzZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc2V0RGV2aWNlKCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBtRGV2aWNlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EZXZpY2UgPSBOVUxM
OwotICAgIH0KLQotICAgIGlmIChtRGV2aWNlRXgpCi0gICAgewotICAgICAgICBtRGV2aWNlRXgt
PlJlbGVhc2UoKTsKLSAgICAgICAgbURldmljZUV4ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAo
bUQzZDkpCi0gICAgewotICAgICAgICBtRDNkOS0+UmVsZWFzZSgpOwotICAgICAgICBtRDNkOSA9
IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1EZXZpY2VXaW5kb3cpCi0gICAgewotICAgICAgICBE
ZXN0cm95V2luZG93KG1EZXZpY2VXaW5kb3cpOwotICAgICAgICBtRGV2aWNlV2luZG93ID0gTlVM
TDsKLSAgICB9Ci0KLSAgICBpZiAobUQzZDlFeCkKLSAgICB7Ci0gICAgICAgIG1EM2Q5RXgtPlJl
bGVhc2UoKTsKLSAgICAgICAgbUQzZDlFeCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1EM2Q5
TW9kdWxlKQotICAgIHsKLSAgICAgICAgbUQzZDlNb2R1bGUgPSBOVUxMOwotICAgIH0KLQotICAg
IHdoaWxlICghbU11bHRpU2FtcGxlU3VwcG9ydC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgZGVs
ZXRlIFtdIG1NdWx0aVNhbXBsZVN1cHBvcnQuYmVnaW4oKS0+c2Vjb25kOwotICAgICAgICBtTXVs
dGlTYW1wbGVTdXBwb3J0LmVyYXNlKG1NdWx0aVNhbXBsZVN1cHBvcnQuYmVnaW4oKSk7Ci0gICAg
fQotfQotCi1SZW5kZXJlcjkgKlJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShSZW5kZXJlciAqcmVu
ZGVyZXIpCi17Ci0gICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUocng6OlJlbmRlcmVyOSosIHJl
bmRlcmVyKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHJ4OjpSZW5kZXJlcjkqPihyZW5kZXJl
cik7Ci19Ci0KLUVHTGludCBSZW5kZXJlcjk6OmluaXRpYWxpemUoKQotewotICAgIGlmICghaW5p
dGlhbGl6ZUNvbXBpbGVyKCkpCi0gICAgewotICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFM
SVpFRDsKLSAgICB9Ci0KLSAgICBpZiAobVNvZnR3YXJlRGV2aWNlKQotICAgIHsKLSAgICAgICAg
VFJBQ0VfRVZFTlQwKCJncHUiLCAiR2V0TW9kdWxlSGFuZGxlX3N3aWZ0c2hhZGVyIik7Ci0gICAg
ICAgIG1EM2Q5TW9kdWxlID0gR2V0TW9kdWxlSGFuZGxlKFRFWFQoInN3aWZ0c2hhZGVyX2QzZDku
ZGxsIikpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBUUkFDRV9FVkVOVDAoImdw
dSIsICJHZXRNb2R1bGVIYW5kbGVfZDNkOSIpOwotICAgICAgICBtRDNkOU1vZHVsZSA9IEdldE1v
ZHVsZUhhbmRsZShURVhUKCJkM2Q5LmRsbCIpKTsKLSAgICB9Ci0KLSAgICBpZiAobUQzZDlNb2R1
bGUgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIEVSUigiTm8gRDNEOSBtb2R1bGUgZm91bmQgLSBh
Ym9ydGluZyFcbiIpOwotICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsKLSAgICB9
Ci0KLSAgICB0eXBlZGVmIEhSRVNVTFQgKFdJTkFQSSAqRGlyZWN0M0RDcmVhdGU5RXhGdW5jKShV
SU5ULCBJRGlyZWN0M0Q5RXgqKik7Ci0gICAgRGlyZWN0M0RDcmVhdGU5RXhGdW5jIERpcmVjdDNE
Q3JlYXRlOUV4UHRyID0gcmVpbnRlcnByZXRfY2FzdDxEaXJlY3QzRENyZWF0ZTlFeEZ1bmM+KEdl
dFByb2NBZGRyZXNzKG1EM2Q5TW9kdWxlLCAiRGlyZWN0M0RDcmVhdGU5RXgiKSk7Ci0KLSAgICAv
LyBVc2UgRGlyZWN0M0Q5RXggaWYgYXZhaWxhYmxlLiBBbW9uZyBvdGhlciB0aGluZ3MsIHRoaXMg
dmVyc2lvbiBpcyBsZXNzCi0gICAgLy8gaW5jbGluZWQgdG8gcmVwb3J0IGEgbG9zdCBjb250ZXh0
LCBmb3IgZXhhbXBsZSB3aGVuIHRoZSB1c2VyIHN3aXRjaGVzCi0gICAgLy8gZGVza3RvcC4gRGly
ZWN0M0Q5RXggaXMgYXZhaWxhYmxlIGluIFdpbmRvd3MgVmlzdGEgYW5kIGxhdGVyIGlmIHN1aXRh
YmxlIGRyaXZlcnMgYXJlIGF2YWlsYWJsZS4KLSAgICBpZiAoQU5HTEVfRU5BQkxFX0QzRDlFWCAm
JiBEaXJlY3QzRENyZWF0ZTlFeFB0ciAmJiBTVUNDRUVERUQoRGlyZWN0M0RDcmVhdGU5RXhQdHIo
RDNEX1NES19WRVJTSU9OLCAmbUQzZDlFeCkpKQotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQw
KCJncHUiLCAiRDNkOUV4X1F1ZXJ5SW50ZXJmYWNlIik7Ci0gICAgICAgIEFTU0VSVChtRDNkOUV4
KTsKLSAgICAgICAgbUQzZDlFeC0+UXVlcnlJbnRlcmZhY2UoSUlEX0lEaXJlY3QzRDksIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbUQzZDkpKTsKLSAgICAgICAgQVNTRVJUKG1EM2Q5KTsKLSAg
ICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiRGlyZWN0
M0RDcmVhdGU5Iik7Ci0gICAgICAgIG1EM2Q5ID0gRGlyZWN0M0RDcmVhdGU5KEQzRF9TREtfVkVS
U0lPTik7Ci0gICAgfQotCi0gICAgaWYgKCFtRDNkOSkKLSAgICB7Ci0gICAgICAgIEVSUigiQ291
bGQgbm90IGNyZWF0ZSBEM0Q5IGRldmljZSAtIGFib3J0aW5nIVxuIik7Ci0gICAgICAgIHJldHVy
biBFR0xfTk9UX0lOSVRJQUxJWkVEOwotICAgIH0KLQotICAgIGlmIChtRGMgIT0gTlVMTCkKLSAg
ICB7Ci0gICAgLy8gIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRTogRGV0ZXJtaW5lIHdoaWNo
IGFkYXB0ZXIgaW5kZXggdGhlIGRldmljZSBjb250ZXh0IGNvcnJlc3BvbmRzIHRvCi0gICAgfQot
Ci0gICAgSFJFU1VMVCByZXN1bHQ7Ci0KLSAgICAvLyBHaXZlIHVwIG9uIGdldHRpbmcgZGV2aWNl
IGNhcHMgYWZ0ZXIgYWJvdXQgb25lIHNlY29uZC4KLSAgICB7Ci0gICAgICAgIFRSQUNFX0VWRU5U
MCgiZ3B1IiwgIkdldERldmljZUNhcHMiKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAx
MDsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBtRDNkOS0+R2V0RGV2aWNl
Q2FwcyhtQWRhcHRlciwgbURldmljZVR5cGUsICZtRGV2aWNlQ2Fwcyk7Ci0gICAgICAgICAgICBp
ZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChyZXN1bHQgPT0gRDNERVJS
X05PVEFWQUlMQUJMRSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTbGVlcCgxMDAp
OyAgIC8vIEdpdmUgdGhlIGRyaXZlciBzb21lIHRpbWUgdG8gaW5pdGlhbGl6ZS9yZWNvdmVyCi0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChGQUlMRUQocmVzdWx0KSkgICAvLyBE
M0RFUlJfT1VUT0ZWSURFT01FTU9SWSwgRV9PVVRPRk1FTU9SWSwgRDNERVJSX0lOVkFMSURERVZJ
Q0UsIG9yIGFub3RoZXIgZXJyb3Igd2UgY2FuJ3QgcmVjb3ZlciBmcm9tCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgRVJSKCJmYWlsZWQgdG8gZ2V0IGRldmljZSBjYXBzICgweCV4KVxu
IiwgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtRGV2aWNlQ2Fwcy5Q
aXhlbFNoYWRlclZlcnNpb24gPCBEM0RQU19WRVJTSU9OKDIsIDApKQotICAgIHsKLSAgICAgICAg
RVJSKCJSZW5kZXJlciBkb2VzIG5vdCBzdXBwb3J0IFBTIDIuMC4gYWJvcnRpbmchXG4iKTsKLSAg
ICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7Ci0gICAgfQotCi0gICAgLy8gV2hlbiBE
aXJlY3RYOSBpcyBydW5uaW5nIHdpdGggYW4gb2xkZXIgRGlyZWN0WDggZHJpdmVyLCBhIFN0cmV0
Y2hSZWN0IGZyb20gYSByZWd1bGFyIHRleHR1cmUgdG8gYSByZW5kZXIgdGFyZ2V0IHRleHR1cmUg
aXMgbm90IHN1cHBvcnRlZC4KLSAgICAvLyBUaGlzIGlzIHJlcXVpcmVkIGJ5IFRleHR1cmUyRDo6
Y29udmVydFRvUmVuZGVyVGFyZ2V0LgotICAgIGlmICgobURldmljZUNhcHMuRGV2Q2FwczIgJiBE
M0RERVZDQVBTMl9DQU5fU1RSRVRDSFJFQ1RfRlJPTV9URVhUVVJFUykgPT0gMCkKLSAgICB7Ci0g
ICAgICAgIEVSUigiUmVuZGVyZXIgZG9lcyBub3Qgc3VwcG9ydCBzdHJldGN0cmVjdCBmcm9tIHRl
eHR1cmVzIVxuIik7Ci0gICAgICAgIHJldHVybiBFR0xfTk9UX0lOSVRJQUxJWkVEOwotICAgIH0K
LQotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiR2V0QWRhcHRlcklkZW50aWZp
ZXIiKTsKLSAgICAgICAgbUQzZDktPkdldEFkYXB0ZXJJZGVudGlmaWVyKG1BZGFwdGVyLCAwLCAm
bUFkYXB0ZXJJZGVudGlmaWVyKTsKLSAgICB9Ci0KLSAgICAvLyBBVEkgY2FyZHMgb24gWFAgaGF2
ZSBwcm9ibGVtcyB3aXRoIG5vbi1wb3dlci1vZi10d28gdGV4dHVyZXMuCi0gICAgbVN1cHBvcnRz
Tm9uUG93ZXIyVGV4dHVyZXMgPSAhKG1EZXZpY2VDYXBzLlRleHR1cmVDYXBzICYgRDNEUFRFWFRV
UkVDQVBTX1BPVzIpICYmCi0gICAgICAgICEobURldmljZUNhcHMuVGV4dHVyZUNhcHMgJiBEM0RQ
VEVYVFVSRUNBUFNfQ1VCRU1BUF9QT1cyKSAmJgotICAgICAgICAhKG1EZXZpY2VDYXBzLlRleHR1
cmVDYXBzICYgRDNEUFRFWFRVUkVDQVBTX05PTlBPVzJDT05ESVRJT05BTCkgJiYKLSAgICAgICAg
IShnZXRDb21wYXJhYmxlT1NWZXJzaW9uKCkgPCB2ZXJzaW9uV2luZG93c1Zpc3RhICYmIG1BZGFw
dGVySWRlbnRpZmllci5WZW5kb3JJZCA9PSBWRU5ET1JfSURfQU1EKTsKLQotICAgIC8vIE11c3Qg
c3VwcG9ydCBhIG1pbmltdW0gb2YgMjoxIGFuaXNvdHJvcHkgZm9yIG1heCBhbmlzb3Ryb3B5IHRv
IGJlIGNvbnNpZGVyZWQgc3VwcG9ydGVkLCBwZXIgdGhlIHNwZWMKLSAgICBtU3VwcG9ydHNUZXh0
dXJlRmlsdGVyQW5pc290cm9weSA9ICgobURldmljZUNhcHMuUmFzdGVyQ2FwcyAmIEQzRFBSQVNU
RVJDQVBTX0FOSVNPVFJPUFkpICYmIChtRGV2aWNlQ2Fwcy5NYXhBbmlzb3Ryb3B5ID49IDIpKTsK
LQotICAgIG1NaW5Td2FwSW50ZXJ2YWwgPSA0OwotICAgIG1NYXhTd2FwSW50ZXJ2YWwgPSAwOwot
Ci0gICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRf
SU5URVJWQUxfSU1NRURJQVRFKQotICAgIHsKLSAgICAgICAgbU1pblN3YXBJbnRlcnZhbCA9IHN0
ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDApOwotICAgICAgICBtTWF4U3dhcEludGVydmFsID0g
c3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgMCk7Ci0gICAgfQotICAgIGlmIChtRGV2aWNlQ2Fw
cy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX09ORSkKLSAgICB7
Ci0gICAgICAgIG1NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dhcEludGVydmFsLCAx
KTsKLSAgICAgICAgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2YWws
IDEpOwotICAgIH0KLSAgICBpZiAobURldmljZUNhcHMuUHJlc2VudGF0aW9uSW50ZXJ2YWxzICYg
RDNEUFJFU0VOVF9JTlRFUlZBTF9UV08pCi0gICAgewotICAgICAgICBtTWluU3dhcEludGVydmFs
ID0gc3RkOjptaW4obU1pblN3YXBJbnRlcnZhbCwgMik7Ci0gICAgICAgIG1NYXhTd2FwSW50ZXJ2
YWwgPSBzdGQ6Om1heChtTWF4U3dhcEludGVydmFsLCAyKTsKLSAgICB9Ci0gICAgaWYgKG1EZXZp
Y2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfVEhSRUUp
Ci0gICAgewotICAgICAgICBtTWluU3dhcEludGVydmFsID0gc3RkOjptaW4obU1pblN3YXBJbnRl
cnZhbCwgMyk7Ci0gICAgICAgIG1NYXhTd2FwSW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4U3dhcElu
dGVydmFsLCAzKTsKLSAgICB9Ci0gICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlvbkludGVy
dmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfRk9VUikKLSAgICB7Ci0gICAgICAgIG1NaW5Td2Fw
SW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dhcEludGVydmFsLCA0KTsKLSAgICAgICAgbU1heFN3
YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2YWwsIDQpOwotICAgIH0KLQotICAg
IGludCBtYXggPSAwOwotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiZ2V0TXVs
dGlTYW1wbGVTdXBwb3J0Iik7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
QXJyYXlTaXplKFJlbmRlclRhcmdldEZvcm1hdHMpOyArK2kpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGJvb2wgKm11bHRpc2FtcGxlQXJyYXkgPSBuZXcgYm9vbFtEM0RNVUxUSVNBTVBMRV8xNl9T
QU1QTEVTICsgMV07Ci0gICAgICAgICAgICBnZXRNdWx0aVNhbXBsZVN1cHBvcnQoUmVuZGVyVGFy
Z2V0Rm9ybWF0c1tpXSwgbXVsdGlzYW1wbGVBcnJheSk7Ci0gICAgICAgICAgICBtTXVsdGlTYW1w
bGVTdXBwb3J0W1JlbmRlclRhcmdldEZvcm1hdHNbaV1dID0gbXVsdGlzYW1wbGVBcnJheTsKLQot
ICAgICAgICAgICAgZm9yIChpbnQgaiA9IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7IGogPj0g
MDsgLS1qKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtdWx0aXNhbXBsZUFy
cmF5W2pdICYmIGogIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUgJiYgaiA+IG1heCkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1heCA9IGo7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgewotICAgICAg
ICBUUkFDRV9FVkVOVDAoImdwdSIsICJnZXRNdWx0aVNhbXBsZVN1cHBvcnQyIik7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgQXJyYXlTaXplKERlcHRoU3RlbmNpbEZvcm1h
dHMpOyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChEZXB0aFN0ZW5jaWxGb3JtYXRz
W2ldID09IEQzREZNVF9VTktOT1dOKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgICAgICBib29sICptdWx0aXNhbXBsZUFycmF5ID0gbmV3IGJvb2xbRDNETVVMVElTQU1QTEVf
MTZfU0FNUExFUyArIDFdOwotICAgICAgICAgICAgZ2V0TXVsdGlTYW1wbGVTdXBwb3J0KERlcHRo
U3RlbmNpbEZvcm1hdHNbaV0sIG11bHRpc2FtcGxlQXJyYXkpOwotICAgICAgICAgICAgbU11bHRp
U2FtcGxlU3VwcG9ydFtEZXB0aFN0ZW5jaWxGb3JtYXRzW2ldXSA9IG11bHRpc2FtcGxlQXJyYXk7
Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGogPSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTOyBq
ID49IDA7IC0taikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobXVsdGlzYW1w
bGVBcnJheVtqXSAmJiBqICE9IEQzRE1VTFRJU0FNUExFX05PTk1BU0tBQkxFICYmIGogPiBtYXgp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtYXggPSBqOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIG1NYXhT
dXBwb3J0ZWRTYW1wbGVzID0gbWF4OwotCi0gICAgc3RhdGljIGNvbnN0IFRDSEFSIHdpbmRvd05h
bWVbXSA9IFRFWFQoIkFuZ2xlSGlkZGVuV2luZG93Iik7Ci0gICAgc3RhdGljIGNvbnN0IFRDSEFS
IGNsYXNzTmFtZVtdID0gVEVYVCgiU1RBVElDIik7Ci0KLSAgICB7Ci0gICAgICAgIFRSQUNFX0VW
RU5UMCgiZ3B1IiwgIkNyZWF0ZVdpbmRvd0V4Iik7Ci0gICAgICAgIG1EZXZpY2VXaW5kb3cgPSBD
cmVhdGVXaW5kb3dFeChXU19FWF9OT0FDVElWQVRFLCBjbGFzc05hbWUsIHdpbmRvd05hbWUsIFdT
X0RJU0FCTEVEIHwgV1NfUE9QVVAsIDAsIDAsIDEsIDEsIEhXTkRfTUVTU0FHRSwgTlVMTCwgR2V0
TW9kdWxlSGFuZGxlKE5VTEwpLCBOVUxMKTsKLSAgICB9Ci0KLSAgICBEM0RQUkVTRU5UX1BBUkFN
RVRFUlMgcHJlc2VudFBhcmFtZXRlcnMgPSBnZXREZWZhdWx0UHJlc2VudFBhcmFtZXRlcnMoKTsK
LSAgICBEV09SRCBiZWhhdmlvckZsYWdzID0gRDNEQ1JFQVRFX0ZQVV9QUkVTRVJWRSB8IEQzRENS
RUFURV9OT1dJTkRPV0NIQU5HRVM7Ci0KLSAgICB7Ci0gICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1
IiwgIkQzZDlfQ3JlYXRlRGV2aWNlIik7Ci0gICAgICAgIHJlc3VsdCA9IG1EM2Q5LT5DcmVhdGVE
ZXZpY2UobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBtRGV2aWNlV2luZG93LCBiZWhhdmlvckZsYWdz
IHwgRDNEQ1JFQVRFX0hBUkRXQVJFX1ZFUlRFWFBST0NFU1NJTkcgfCBEM0RDUkVBVEVfUFVSRURF
VklDRSwgJnByZXNlbnRQYXJhbWV0ZXJzLCAmbURldmljZSk7Ci0gICAgfQotICAgIGlmIChyZXN1
bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkg
fHwgcmVzdWx0ID09IEQzREVSUl9ERVZJQ0VMT1NUKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEVH
TF9CQURfQUxMT0M7Ci0gICAgfQotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAg
ICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiRDNkOV9DcmVhdGVEZXZpY2UyIik7Ci0gICAgICAg
IHJlc3VsdCA9IG1EM2Q5LT5DcmVhdGVEZXZpY2UobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBtRGV2
aWNlV2luZG93LCBiZWhhdmlvckZsYWdzIHwgRDNEQ1JFQVRFX1NPRlRXQVJFX1ZFUlRFWFBST0NF
U1NJTkcsICZwcmVzZW50UGFyYW1ldGVycywgJm1EZXZpY2UpOwotCi0gICAgICAgIGlmIChGQUlM
RUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RF
UlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQg
PT0gRDNERVJSX05PVEFWQUlMQUJMRSB8fCByZXN1bHQgPT0gRDNERVJSX0RFVklDRUxPU1QpOwot
ICAgICAgICAgICAgcmV0dXJuIEVHTF9CQURfQUxMT0M7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAobUQzZDlFeCkKLSAgICB7Ci0gICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgIm1EZXZp
Y2VfUXVlcnlJbnRlcmZhY2UiKTsKLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+UXVlcnlJbnRl
cmZhY2UoSUlEX0lEaXJlY3QzRERldmljZTlFeCwgKHZvaWQqKikgJm1EZXZpY2VFeCk7Ci0gICAg
ICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgfQotCi0gICAgewotICAgICAgICBU
UkFDRV9FVkVOVDAoImdwdSIsICJTaGFkZXJDYWNoZSBpbml0aWFsaXplIik7Ci0gICAgICAgIG1W
ZXJ0ZXhTaGFkZXJDYWNoZS5pbml0aWFsaXplKG1EZXZpY2UpOwotICAgICAgICBtUGl4ZWxTaGFk
ZXJDYWNoZS5pbml0aWFsaXplKG1EZXZpY2UpOwotICAgIH0KLQotICAgIC8vIENoZWNrIG9jY2x1
c2lvbiBxdWVyeSBzdXBwb3J0Ci0gICAgSURpcmVjdDNEUXVlcnk5ICpvY2NsdXNpb25RdWVyeSA9
IE5VTEw7Ci0gICAgewotICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJkZXZpY2VfQ3JlYXRl
UXVlcnkiKTsKLSAgICAgICAgaWYgKFNVQ0NFRURFRChtRGV2aWNlLT5DcmVhdGVRdWVyeShEM0RR
VUVSWVRZUEVfT0NDTFVTSU9OLCAmb2NjbHVzaW9uUXVlcnkpKSAmJiBvY2NsdXNpb25RdWVyeSkK
LSAgICAgICAgewotICAgICAgICAgICAgb2NjbHVzaW9uUXVlcnktPlJlbGVhc2UoKTsKLSAgICAg
ICAgICAgIG1PY2NsdXNpb25RdWVyeVN1cHBvcnQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbU9jY2x1c2lvblF1ZXJ5U3VwcG9ydCA9IGZh
bHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgZXZlbnQgcXVlcnkgc3VwcG9y
dAotICAgIElEaXJlY3QzRFF1ZXJ5OSAqZXZlbnRRdWVyeSA9IE5VTEw7Ci0gICAgewotICAgICAg
ICBUUkFDRV9FVkVOVDAoImdwdSIsICJkZXZpY2VfQ3JlYXRlUXVlcnkyIik7Ci0gICAgICAgIGlm
IChTVUNDRUVERUQobURldmljZS0+Q3JlYXRlUXVlcnkoRDNEUVVFUllUWVBFX0VWRU5ULCAmZXZl
bnRRdWVyeSkpICYmIGV2ZW50UXVlcnkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGV2ZW50UXVl
cnktPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1FdmVudFF1ZXJ5U3VwcG9ydCA9IHRydWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRXZlbnRRdWVy
eVN1cHBvcnQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEQzRERJU1BMQVlNT0RF
IGN1cnJlbnREaXNwbGF5TW9kZTsKLSAgICBtRDNkOS0+R2V0QWRhcHRlckRpc3BsYXlNb2RlKG1B
ZGFwdGVyLCAmY3VycmVudERpc3BsYXlNb2RlKTsKLQotICAgIC8vIENoZWNrIHZlcnRleCB0ZXh0
dXJlIHN1cHBvcnQKLSAgICAvLyBPbmx5IERpcmVjdDNEIDEwIHJlYWR5IGRldmljZXMgc3VwcG9y
dCBhbGwgdGhlIG5lY2Vzc2FyeSB2ZXJ0ZXggdGV4dHVyZSBmb3JtYXRzLgotICAgIC8vIFdlIHRl
c3QgdGhpcyB1c2luZyBEM0Q5IGJ5IGNoZWNraW5nIHN1cHBvcnQgZm9yIHRoZSBSMTZGIGZvcm1h
dC4KLSAgICBtVmVydGV4VGV4dHVyZVN1cHBvcnQgPSBtRGV2aWNlQ2Fwcy5QaXhlbFNoYWRlclZl
cnNpb24gPj0gRDNEUFNfVkVSU0lPTigzLCAwKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VU
eXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEVVNBR0VfUVVFUllfVkVS
VEVYVEVYVFVSRSwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX1IxNkYpKTsKLQotICAgIC8vIENo
ZWNrIGRlcHRoIHRleHR1cmUgc3VwcG9ydAotICAgIC8vIHdlIHVzZSBJTlRaIGZvciBkZXB0aCB0
ZXh0dXJlcyBpbiBEaXJlY3QzRDkKLSAgICAvLyB3ZSBhbHNvIHdhbnQgTlVMTCB0ZXh0dXJlIHN1
cHBvcnQgdG8gZW5zdXJlIHRoZSB3ZSBjYW4gbWFrZSBkZXB0aC1vbmx5IEZCT3MKLSAgICAvLyBz
ZWUgaHR0cDovL2FyYXMtcC5pbmZvL3RleHRzL0QzRDlHUFVIYWNrcy5odG1sCi0gICAgbURlcHRo
VGV4dHVyZVN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFw
dGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEVVNB
R0VfREVQVEhTVEVOQ0lMLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfSU5UWikpICYmCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0
KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RDNEVVNBR0VfUkVOREVSVEFSR0VULCBEM0RSVFlQRV9TVVJGQUNFLCBEM0RGTVRfTlVMTCkpOwot
Ci0gICAgLy8gQ2hlY2sgMzIgYml0IGZsb2F0aW5nIHBvaW50IHRleHR1cmUgc3VwcG9ydAotICAg
IG1GbG9hdDMyRmlsdGVyU3VwcG9ydCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3Jt
YXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RV
U0FHRV9RVUVSWV9GSUxURVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfQTMyQjMy
RzMyUjMyRikpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1EM2Q5
LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5
TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1FVRVJZX0ZJTFRFUiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX0NVQkVU
RVhUVVJFLCBEM0RGTVRfQTMyQjMyRzMyUjMyRikpOwotCi0gICAgbUZsb2F0MzJSZW5kZXJTdXBw
b3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmlj
ZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9BMzJCMzJHMzJSMzJGKSkgJiYKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0
KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNB
R0VfUkVOREVSVEFSR0VULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfQ1VCRVRFWFRVUkUsIEQzREZNVF9BMzJC
MzJHMzJSMzJGKSk7Ci0KLSAgICBpZiAoIW1GbG9hdDMyRmlsdGVyU3VwcG9ydCAmJiAhbUZsb2F0
MzJSZW5kZXJTdXBwb3J0KQotICAgIHsKLSAgICAgICAgbUZsb2F0MzJUZXh0dXJlU3VwcG9ydCA9
IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBl
LCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9URVhU
VVJFLCBEM0RGTVRfQTMyQjMyRzMyUjMyRikpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2
aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZ
UEVfQ1VCRVRFWFRVUkUsIEQzREZNVF9BMzJCMzJHMzJSMzJGKSk7Ci0gICAgfQotICAgIGVsc2UK
LSAgICB7Ci0gICAgICAgIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQgPSB0cnVlOwotICAgIH0KLQot
ICAgIC8vIENoZWNrIDE2IGJpdCBmbG9hdGluZyBwb2ludCB0ZXh0dXJlIHN1cHBvcnQKLSAgICBt
RmxvYXQxNkZpbHRlclN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0
KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNB
R0VfUVVFUllfRklMVEVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0ExNkIxNkcx
NlIxNkYpKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+
Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1v
ZGUuRm9ybWF0LCBEM0RVU0FHRV9RVUVSWV9GSUxURVIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9DVUJFVEVY
VFVSRSwgRDNERk1UX0ExNkIxNkcxNlIxNkYpKTsKLQotICAgIG1GbG9hdDE2UmVuZGVyU3VwcG9y
dCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VU
eXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfQTE2QjE2RzE2UjE2RikpICYmCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdCht
QWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdF
X1JFTkRFUlRBUkdFVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX0NVQkVURVhUVVJFLCBEM0RGTVRfQTE2QjE2
RzE2UjE2RikpOwotCi0gICAgaWYgKCFtRmxvYXQxNkZpbHRlclN1cHBvcnQgJiYgIW1GbG9hdDE2
UmVuZGVyU3VwcG9ydCkKLSAgICB7Ci0gICAgICAgIG1GbG9hdDE2VGV4dHVyZVN1cHBvcnQgPSBT
VUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwg
Y3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfVEVYVFVS
RSwgRDNERk1UX0ExNkIxNkcxNlIxNkYpKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmlj
ZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBF
X0NVQkVURVhUVVJFLCBEM0RGTVRfQTE2QjE2RzE2UjE2RikpOwotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgICBtRmxvYXQxNlRleHR1cmVTdXBwb3J0ID0gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICAvLyBDaGVjayBEWFQgdGV4dHVyZSBzdXBwb3J0Ci0gICAgbURYVDFUZXh0dXJlU3VwcG9ydCA9
IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBl
LCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRf
RFhUMSkpOwotICAgIG1EWFQzVGV4dHVyZVN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNr
RGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZv
cm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0RYVDMpKTsKLSAgICBtRFhUNVRleHR1
cmVTdXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwg
bURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsIEQzRFJUWVBFX1RFWFRV
UkUsIEQzREZNVF9EWFQ1KSk7Ci0KLSAgICAvLyBDaGVjayBsdW1pbmFuY2VbYWxwaGFdIHRleHR1
cmUgc3VwcG9ydAotICAgIG1MdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCA9IFNVQ0NFRURFRChtRDNk
OS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxh
eU1vZGUuRm9ybWF0LCAwLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfTDgpKTsKLSAgICBtTHVt
aW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VG
b3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAw
LCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfQThMOCkpOwotCi0gICAgaW5pdGlhbGl6ZURldmlj
ZSgpOwotCi0gICAgcmV0dXJuIEVHTF9TVUNDRVNTOwotfQotCi0vLyBkbyBhbnkgb25lLXRpbWUg
ZGV2aWNlIGluaXRpYWxpemF0aW9uCi0vLyBOT1RFOiB0aGlzIGlzIGFsc28gbmVlZGVkIGFmdGVy
IGEgZGV2aWNlIGxvc3QvcmVzZXQKLS8vIHRvIHJlc2V0IHRoZSBzY2VuZSBzdGF0dXMgYW5kIGVu
c3VyZSB0aGUgZGVmYXVsdCBzdGF0ZXMgYXJlIHJlc2V0Lgotdm9pZCBSZW5kZXJlcjk6OmluaXRp
YWxpemVEZXZpY2UoKQotewotICAgIC8vIFBlcm1hbmVudCBub24tZGVmYXVsdCBzdGF0ZXMKLSAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19QT0lOVFNQUklURUVOQUJMRSwgVFJVRSk7
Ci0gICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfTEFTVFBJWEVMLCBGQUxTRSk7Ci0K
LSAgICBpZiAobURldmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJzaW9uID49IEQzRFBTX1ZFUlNJT04o
MywgMCkpCi0gICAgewotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19QT0lO
VFNJWkVfTUFYLCAoRFdPUkQmKW1EZXZpY2VDYXBzLk1heFBvaW50U2l6ZSk7Ci0gICAgfQotICAg
IGVsc2UKLSAgICB7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1BPSU5U
U0laRV9NQVgsIDB4M0Y4MDAwMDApOyAgIC8vIDEuMGYKLSAgICB9Ci0KLSAgICBtYXJrQWxsU3Rh
dGVEaXJ0eSgpOwotCi0gICAgbVNjZW5lU3RhcnRlZCA9IGZhbHNlOwotCi0gICAgQVNTRVJUKCFt
QmxpdCAmJiAhbVZlcnRleERhdGFNYW5hZ2VyICYmICFtSW5kZXhEYXRhTWFuYWdlcik7Ci0gICAg
bUJsaXQgPSBuZXcgQmxpdCh0aGlzKTsKLSAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBuZXcgcng6
OlZlcnRleERhdGFNYW5hZ2VyKHRoaXMpOwotICAgIG1JbmRleERhdGFNYW5hZ2VyID0gbmV3IHJ4
OjpJbmRleERhdGFNYW5hZ2VyKHRoaXMpOwotfQotCi1EM0RQUkVTRU5UX1BBUkFNRVRFUlMgUmVu
ZGVyZXI5OjpnZXREZWZhdWx0UHJlc2VudFBhcmFtZXRlcnMoKQotewotICAgIEQzRFBSRVNFTlRf
UEFSQU1FVEVSUyBwcmVzZW50UGFyYW1ldGVycyA9IHswfTsKLQotICAgIC8vIFRoZSBkZWZhdWx0
IHN3YXAgY2hhaW4gaXMgbmV2ZXIgYWN0dWFsbHkgdXNlZC4gU3VyZmFjZSB3aWxsIGNyZWF0ZSBh
IG5ldyBzd2FwIGNoYWluIHdpdGggdGhlIHByb3BlciBwYXJhbWV0ZXJzLgotICAgIHByZXNlbnRQ
YXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQgPSBEM0RGTVRfVU5LTk9XTjsKLSAgICBw
cmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyQ291bnQgPSAxOwotICAgIHByZXNlbnRQYXJhbWV0
ZXJzLkJhY2tCdWZmZXJGb3JtYXQgPSBEM0RGTVRfVU5LTk9XTjsKLSAgICBwcmVzZW50UGFyYW1l
dGVycy5CYWNrQnVmZmVyV2lkdGggPSAxOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZm
ZXJIZWlnaHQgPSAxOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkVuYWJsZUF1dG9EZXB0aFN0ZW5j
aWwgPSBGQUxTRTsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5GbGFncyA9IDA7Ci0gICAgcHJlc2Vu
dFBhcmFtZXRlcnMuaERldmljZVdpbmRvdyA9IG1EZXZpY2VXaW5kb3c7Ci0gICAgcHJlc2VudFBh
cmFtZXRlcnMuTXVsdGlTYW1wbGVRdWFsaXR5ID0gMDsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5N
dWx0aVNhbXBsZVR5cGUgPSBEM0RNVUxUSVNBTVBMRV9OT05FOwotICAgIHByZXNlbnRQYXJhbWV0
ZXJzLlByZXNlbnRhdGlvbkludGVydmFsID0gRDNEUFJFU0VOVF9JTlRFUlZBTF9ERUZBVUxUOwot
ICAgIHByZXNlbnRQYXJhbWV0ZXJzLlN3YXBFZmZlY3QgPSBEM0RTV0FQRUZGRUNUX0RJU0NBUkQ7
Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuV2luZG93ZWQgPSBUUlVFOwotCi0gICAgcmV0dXJuIHBy
ZXNlbnRQYXJhbWV0ZXJzOwotfQotCi1pbnQgUmVuZGVyZXI5OjpnZW5lcmF0ZUNvbmZpZ3MoQ29u
ZmlnRGVzYyAqKmNvbmZpZ0Rlc2NMaXN0KQotewotICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnRE
aXNwbGF5TW9kZTsKLSAgICBtRDNkOS0+R2V0QWRhcHRlckRpc3BsYXlNb2RlKG1BZGFwdGVyLCAm
Y3VycmVudERpc3BsYXlNb2RlKTsKLQotICAgIHVuc2lnbmVkIGludCBudW1SZW5kZXJGb3JtYXRz
ID0gQXJyYXlTaXplKFJlbmRlclRhcmdldEZvcm1hdHMpOwotICAgIHVuc2lnbmVkIGludCBudW1E
ZXB0aEZvcm1hdHMgPSBBcnJheVNpemUoRGVwdGhTdGVuY2lsRm9ybWF0cyk7Ci0gICAgKCpjb25m
aWdEZXNjTGlzdCkgPSBuZXcgQ29uZmlnRGVzY1tudW1SZW5kZXJGb3JtYXRzICogbnVtRGVwdGhG
b3JtYXRzXTsKLSAgICBpbnQgbnVtQ29uZmlncyA9IDA7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGlu
dCBmb3JtYXRJbmRleCA9IDA7IGZvcm1hdEluZGV4IDwgbnVtUmVuZGVyRm9ybWF0czsgZm9ybWF0
SW5kZXgrKykKLSAgICB7Ci0gICAgICAgIEQzREZPUk1BVCByZW5kZXJUYXJnZXRGb3JtYXQgPSBS
ZW5kZXJUYXJnZXRGb3JtYXRzW2Zvcm1hdEluZGV4XTsKLQotICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJl
bnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgRDNEUlRZUEVfU1VS
RkFDRSwgcmVuZGVyVGFyZ2V0Rm9ybWF0KTsKLQotICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3Vs
dCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGRlcHRoU3RlbmNp
bEluZGV4ID0gMDsgZGVwdGhTdGVuY2lsSW5kZXggPCBudW1EZXB0aEZvcm1hdHM7IGRlcHRoU3Rl
bmNpbEluZGV4KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRDNERk9STUFUIGRl
cHRoU3RlbmNpbEZvcm1hdCA9IERlcHRoU3RlbmNpbEZvcm1hdHNbZGVwdGhTdGVuY2lsSW5kZXhd
OwotICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gRDNEX09LOwotCi0gICAgICAgICAg
ICAgICAgaWYoZGVwdGhTdGVuY2lsRm9ybWF0ICE9IEQzREZNVF9VTktOT1dOKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbUQzZDktPkNoZWNrRGV2aWNl
Rm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwg
RDNEVVNBR0VfREVQVEhTVEVOQ0lMLCBEM0RSVFlQRV9TVVJGQUNFLCBkZXB0aFN0ZW5jaWxGb3Jt
YXQpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQo
cmVzdWx0KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmKGRlcHRo
U3RlbmNpbEZvcm1hdCAhPSBEM0RGTVRfVU5LTk9XTikKLSAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbUQzZDktPkNoZWNrRGVwdGhTdGVuY2ls
TWF0Y2gobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBy
ZW5kZXJUYXJnZXRGb3JtYXQsIGRlcHRoU3RlbmNpbEZvcm1hdCk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ0Rlc2MgbmV3
Q29uZmlnOwotICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLnJlbmRlclRhcmdldEZv
cm1hdCA9IGQzZDlfZ2w6OkNvbnZlcnRCYWNrQnVmZmVyRm9ybWF0KHJlbmRlclRhcmdldEZvcm1h
dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcuZGVwdGhTdGVuY2lsRm9ybWF0
ID0gZDNkOV9nbDo6Q29udmVydERlcHRoU3RlbmNpbEZvcm1hdChkZXB0aFN0ZW5jaWxGb3JtYXQp
OwotICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLm11bHRpU2FtcGxlID0gMDsgLy8g
RklYTUU6IGVudW1lcmF0ZSBtdWx0aS1zYW1wbGluZwotICAgICAgICAgICAgICAgICAgICAgICAg
bmV3Q29uZmlnLmZhc3RDb25maWcgPSAoY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCA9PSByZW5k
ZXJUYXJnZXRGb3JtYXQpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAoKmNvbmZpZ0Rlc2NM
aXN0KVtudW1Db25maWdzKytdID0gbmV3Q29uZmlnOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAg
cmV0dXJuIG51bUNvbmZpZ3M7Ci19Ci0KLXZvaWQgUmVuZGVyZXI5OjpkZWxldGVDb25maWdzKENv
bmZpZ0Rlc2MgKmNvbmZpZ0Rlc2NMaXN0KQotewotICAgIGRlbGV0ZSBbXSAoY29uZmlnRGVzY0xp
c3QpOwotfQotCi12b2lkIFJlbmRlcmVyOTo6c3RhcnRTY2VuZSgpCi17Ci0gICAgaWYgKCFtU2Nl
bmVTdGFydGVkKQotICAgIHsKLSAgICAgICAgbG9uZyByZXN1bHQgPSBtRGV2aWNlLT5CZWdpblNj
ZW5lKCk7Ci0gICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkgewotICAgICAgICAgICAgLy8g
VGhpcyBpcyBkZWZlbnNpdmUgY2hlY2tpbmcgYWdhaW5zdCB0aGUgZGV2aWNlIGJlaW5nCi0gICAg
ICAgICAgICAvLyBsb3N0IGF0IHVuZXhwZWN0ZWQgdGltZXMuCi0gICAgICAgICAgICBtU2NlbmVT
dGFydGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJlcjk6OmVu
ZFNjZW5lKCkKLXsKLSAgICBpZiAobVNjZW5lU3RhcnRlZCkKLSAgICB7Ci0gICAgICAgIC8vIEVu
ZFNjZW5lIGNhbiBmYWlsIGlmIHRoZSBkZXZpY2Ugd2FzIGxvc3QsIGZvciBleGFtcGxlIGR1ZQot
ICAgICAgICAvLyB0byBhIFREUiBkdXJpbmcgYSBkcmF3IGNhbGwuCi0gICAgICAgIG1EZXZpY2Ut
PkVuZFNjZW5lKCk7Ci0gICAgICAgIG1TY2VuZVN0YXJ0ZWQgPSBmYWxzZTsKLSAgICB9Ci19Ci0K
LXZvaWQgUmVuZGVyZXI5OjpzeW5jKGJvb2wgYmxvY2spCi17Ci0gICAgSFJFU1VMVCByZXN1bHQ7
Ci0KLSAgICBJRGlyZWN0M0RRdWVyeTkqIHF1ZXJ5ID0gYWxsb2NhdGVFdmVudFF1ZXJ5KCk7Ci0g
ICAgaWYgKCFxdWVyeSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICByZXN1
bHQgPSBxdWVyeS0+SXNzdWUoRDNESVNTVUVfRU5EKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOwotCi0gICAgZG8KLSAgICB7Ci0gICAgICAgIHJlc3VsdCA9IHF1ZXJ5LT5HZXREYXRh
KE5VTEwsIDAsIEQzREdFVERBVEFfRkxVU0gpOwotCi0gICAgICAgIGlmKGJsb2NrICYmIHJlc3Vs
dCA9PSBTX0ZBTFNFKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBLZWVwIHBvbGxpbmcsIGJ1
dCBhbGxvdyBvdGhlciB0aHJlYWRzIHRvIGRvIHNvbWV0aGluZyB1c2VmdWwgZmlyc3QKLSAgICAg
ICAgICAgIFNsZWVwKDApOwotICAgICAgICAgICAgLy8gZXhwbGljaXRseSBjaGVjayBmb3IgZGV2
aWNlIGxvc3MKLSAgICAgICAgICAgIC8vIHNvbWUgZHJpdmVycyBzZWVtIHRvIHJldHVybiBTX0ZB
TFNFIGV2ZW4gaWYgdGhlIGRldmljZSBpcyBsb3N0Ci0gICAgICAgICAgICAvLyBpbnN0ZWFkIG9m
IEQzREVSUl9ERVZJQ0VMT1NUIGxpa2UgdGhleSBzaG91bGQKLSAgICAgICAgICAgIGlmICh0ZXN0
RGV2aWNlTG9zdChmYWxzZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0
ID0gRDNERVJSX0RFVklDRUxPU1Q7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgd2hpbGUoYmxvY2sgJiYgcmVzdWx0ID09IFNfRkFMU0UpOwotCi0gICAgZnJlZUV2ZW50UXVl
cnkocXVlcnkpOwotCi0gICAgaWYgKGQzZDk6OmlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCi0g
ICAgewotICAgICAgICBub3RpZnlEZXZpY2VMb3N0KCk7Ci0gICAgfQotfQotCi1Td2FwQ2hhaW4g
KlJlbmRlcmVyOTo6Y3JlYXRlU3dhcENoYWluKEhXTkQgd2luZG93LCBIQU5ETEUgc2hhcmVIYW5k
bGUsIEdMZW51bSBiYWNrQnVmZmVyRm9ybWF0LCBHTGVudW0gZGVwdGhCdWZmZXJGb3JtYXQpCi17
Ci0gICAgcmV0dXJuIG5ldyByeDo6U3dhcENoYWluOSh0aGlzLCB3aW5kb3csIHNoYXJlSGFuZGxl
LCBiYWNrQnVmZmVyRm9ybWF0LCBkZXB0aEJ1ZmZlckZvcm1hdCk7Ci19Ci0KLUlEaXJlY3QzRFF1
ZXJ5OSogUmVuZGVyZXI5OjphbGxvY2F0ZUV2ZW50UXVlcnkoKQotewotICAgIElEaXJlY3QzRFF1
ZXJ5OSAqcXVlcnkgPSBOVUxMOwotCi0gICAgaWYgKG1FdmVudFF1ZXJ5UG9vbC5lbXB0eSgpKQot
ICAgIHsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVRdWVyeShEM0RR
VUVSWVRZUEVfRVZFTlQsICZxdWVyeSk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHF1ZXJ5ID0gbUV2ZW50UXVlcnlQ
b29sLmJhY2soKTsKLSAgICAgICAgbUV2ZW50UXVlcnlQb29sLnBvcF9iYWNrKCk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHF1ZXJ5OwotfQotCi12b2lkIFJlbmRlcmVyOTo6ZnJlZUV2ZW50UXVlcnko
SURpcmVjdDNEUXVlcnk5KiBxdWVyeSkKLXsKLSAgICBpZiAobUV2ZW50UXVlcnlQb29sLnNpemUo
KSA+IDEwMDApCi0gICAgewotICAgICAgICBxdWVyeS0+UmVsZWFzZSgpOwotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICBtRXZlbnRRdWVyeVBvb2wucHVzaF9iYWNrKHF1ZXJ5KTsKLSAg
ICB9Ci19Ci0KLUlEaXJlY3QzRFZlcnRleFNoYWRlcjkgKlJlbmRlcmVyOTo6Y3JlYXRlVmVydGV4
U2hhZGVyKGNvbnN0IERXT1JEICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCkKLXsKLSAgICByZXR1
cm4gbVZlcnRleFNoYWRlckNhY2hlLmNyZWF0ZShmdW5jdGlvbiwgbGVuZ3RoKTsKLX0KLQotSURp
cmVjdDNEUGl4ZWxTaGFkZXI5ICpSZW5kZXJlcjk6OmNyZWF0ZVBpeGVsU2hhZGVyKGNvbnN0IERX
T1JEICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCkKLXsKLSAgICByZXR1cm4gbVBpeGVsU2hhZGVy
Q2FjaGUuY3JlYXRlKGZ1bmN0aW9uLCBsZW5ndGgpOwotfQotCi1IUkVTVUxUIFJlbmRlcmVyOTo6
Y3JlYXRlVmVydGV4QnVmZmVyKFVJTlQgTGVuZ3RoLCBEV09SRCBVc2FnZSwgSURpcmVjdDNEVmVy
dGV4QnVmZmVyOSAqKnBwVmVydGV4QnVmZmVyKQotewotICAgIEQzRFBPT0wgUG9vbCA9IGdldEJ1
ZmZlclBvb2woVXNhZ2UpOwotICAgIHJldHVybiBtRGV2aWNlLT5DcmVhdGVWZXJ0ZXhCdWZmZXIo
TGVuZ3RoLCBVc2FnZSwgMCwgUG9vbCwgcHBWZXJ0ZXhCdWZmZXIsIE5VTEwpOwotfQotCi1WZXJ0
ZXhCdWZmZXIgKlJlbmRlcmVyOTo6Y3JlYXRlVmVydGV4QnVmZmVyKCkKLXsKLSAgICByZXR1cm4g
bmV3IFZlcnRleEJ1ZmZlcjkodGhpcyk7Ci19Ci0KLUhSRVNVTFQgUmVuZGVyZXI5OjpjcmVhdGVJ
bmRleEJ1ZmZlcihVSU5UIExlbmd0aCwgRFdPUkQgVXNhZ2UsIEQzREZPUk1BVCBGb3JtYXQsIElE
aXJlY3QzREluZGV4QnVmZmVyOSAqKnBwSW5kZXhCdWZmZXIpCi17Ci0gICAgRDNEUE9PTCBQb29s
ID0gZ2V0QnVmZmVyUG9vbChVc2FnZSk7Ci0gICAgcmV0dXJuIG1EZXZpY2UtPkNyZWF0ZUluZGV4
QnVmZmVyKExlbmd0aCwgVXNhZ2UsIEZvcm1hdCwgUG9vbCwgcHBJbmRleEJ1ZmZlciwgTlVMTCk7
Ci19Ci0KLUluZGV4QnVmZmVyICpSZW5kZXJlcjk6OmNyZWF0ZUluZGV4QnVmZmVyKCkKLXsKLSAg
ICByZXR1cm4gbmV3IEluZGV4QnVmZmVyOSh0aGlzKTsKLX0KLQotQnVmZmVyU3RvcmFnZSAqUmVu
ZGVyZXI5OjpjcmVhdGVCdWZmZXJTdG9yYWdlKCkKLXsKLSAgICByZXR1cm4gbmV3IEJ1ZmZlclN0
b3JhZ2U5KCk7Ci19Ci0KLVF1ZXJ5SW1wbCAqUmVuZGVyZXI5OjpjcmVhdGVRdWVyeShHTGVudW0g
dHlwZSkKLXsKLSAgICByZXR1cm4gbmV3IFF1ZXJ5OSh0aGlzLCB0eXBlKTsKLX0KLQotRmVuY2VJ
bXBsICpSZW5kZXJlcjk6OmNyZWF0ZUZlbmNlKCkKLXsKLSAgICByZXR1cm4gbmV3IEZlbmNlOSh0
aGlzKTsKLX0KLQotdm9pZCBSZW5kZXJlcjk6OnNldFNhbXBsZXJTdGF0ZShnbDo6U2FtcGxlclR5
cGUgdHlwZSwgaW50IGluZGV4LCBjb25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUp
Ci17Ci0gICAgYm9vbCAqZm9yY2VTZXRTYW1wbGVycyA9ICh0eXBlID09IGdsOjpTQU1QTEVSX1BJ
WEVMKSA/IG1Gb3JjZVNldFBpeGVsU2FtcGxlclN0YXRlcyA6IG1Gb3JjZVNldFZlcnRleFNhbXBs
ZXJTdGF0ZXM7Ci0gICAgZ2w6OlNhbXBsZXJTdGF0ZSAqYXBwbGllZFNhbXBsZXJzID0gKHR5cGUg
PT0gZ2w6OlNBTVBMRVJfUElYRUwpID8gbUN1clBpeGVsU2FtcGxlclN0YXRlczogbUN1clZlcnRl
eFNhbXBsZXJTdGF0ZXM7Ci0KLSAgICBpZiAoZm9yY2VTZXRTYW1wbGVyc1tpbmRleF0gfHwgbWVt
Y21wKCZzYW1wbGVyU3RhdGUsICZhcHBsaWVkU2FtcGxlcnNbaW5kZXhdLCBzaXplb2YoZ2w6OlNh
bXBsZXJTdGF0ZSkpICE9IDApCi0gICAgewotICAgICAgICBpbnQgZDNkU2FtcGxlck9mZnNldCA9
ICh0eXBlID09IGdsOjpTQU1QTEVSX1BJWEVMKSA/IDAgOiBEM0RWRVJURVhURVhUVVJFU0FNUExF
UjA7Ci0gICAgICAgIGludCBkM2RTYW1wbGVyID0gaW5kZXggKyBkM2RTYW1wbGVyT2Zmc2V0Owot
Ci0gICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX0FE
RFJFU1NVLCBnbF9kM2Q5OjpDb252ZXJ0VGV4dHVyZVdyYXAoc2FtcGxlclN0YXRlLndyYXBTKSk7
Ci0gICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX0FE
RFJFU1NWLCBnbF9kM2Q5OjpDb252ZXJ0VGV4dHVyZVdyYXAoc2FtcGxlclN0YXRlLndyYXBUKSk7
Ci0KLSAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBf
TUFHRklMVEVSLCBnbF9kM2Q5OjpDb252ZXJ0TWFnRmlsdGVyKHNhbXBsZXJTdGF0ZS5tYWdGaWx0
ZXIsIHNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5KSk7Ci0gICAgICAgIEQzRFRFWFRVUkVGSUxU
RVJUWVBFIGQzZE1pbkZpbHRlciwgZDNkTWlwRmlsdGVyOwotICAgICAgICBnbF9kM2Q5OjpDb252
ZXJ0TWluRmlsdGVyKHNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIsICZkM2RNaW5GaWx0ZXIsICZkM2RN
aXBGaWx0ZXIsIHNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5KTsKLSAgICAgICAgbURldmljZS0+
U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUlORklMVEVSLCBkM2RNaW5GaWx0
ZXIpOwotICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FN
UF9NSVBGSUxURVIsIGQzZE1pcEZpbHRlcik7Ci0gICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJT
dGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01BWE1JUExFVkVMLCBzYW1wbGVyU3RhdGUubG9kT2Zm
c2V0KTsKLSAgICAgICAgaWYgKG1TdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwg
RDNEU0FNUF9NQVhBTklTT1RST1BZLCAoRFdPUkQpc2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHkp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yY2VTZXRTYW1wbGVyc1tpbmRleF0gPSBmYWxz
ZTsKLSAgICBhcHBsaWVkU2FtcGxlcnNbaW5kZXhdID0gc2FtcGxlclN0YXRlOwotfQotCi12b2lk
IFJlbmRlcmVyOTo6c2V0VGV4dHVyZShnbDo6U2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBn
bDo6VGV4dHVyZSAqdGV4dHVyZSkKLXsKLSAgICBpbnQgZDNkU2FtcGxlck9mZnNldCA9ICh0eXBl
ID09IGdsOjpTQU1QTEVSX1BJWEVMKSA/IDAgOiBEM0RWRVJURVhURVhUVVJFU0FNUExFUjA7Ci0g
ICAgaW50IGQzZFNhbXBsZXIgPSBpbmRleCArIGQzZFNhbXBsZXJPZmZzZXQ7Ci0gICAgSURpcmVj
dDNEQmFzZVRleHR1cmU5ICpkM2RUZXh0dXJlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBpbnQgc2Vy
aWFsID0gMDsKLSAgICBib29sIGZvcmNlU2V0VGV4dHVyZSA9IGZhbHNlOwotCi0gICAgdW5zaWdu
ZWQgaW50ICphcHBsaWVkU2VyaWFscyA9ICh0eXBlID09IGdsOjpTQU1QTEVSX1BJWEVMKSA/IG1D
dXJQaXhlbFRleHR1cmVTZXJpYWxzIDogbUN1clZlcnRleFRleHR1cmVTZXJpYWxzOwotCi0gICAg
aWYgKHRleHR1cmUpCi0gICAgewotICAgICAgICBUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqdGV4
U3RvcmFnZSA9IHRleHR1cmUtPmdldE5hdGl2ZVRleHR1cmUoKTsKLSAgICAgICAgaWYgKHRleFN0
b3JhZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFRleHR1cmVTdG9yYWdlOSAqc3RvcmFnZTkg
PSBUZXh0dXJlU3RvcmFnZTk6Om1ha2VUZXh0dXJlU3RvcmFnZTkodGV4U3RvcmFnZS0+Z2V0U3Rv
cmFnZUluc3RhbmNlKCkpOwotICAgICAgICAgICAgZDNkVGV4dHVyZSA9IHN0b3JhZ2U5LT5nZXRC
YXNlVGV4dHVyZSgpOwotICAgICAgICB9Ci0gICAgICAgIC8vIElmIHdlIGdldCBOVUxMIGJhY2sg
ZnJvbSBnZXRCYXNlVGV4dHVyZSBoZXJlLCBzb21ldGhpbmcgd2VudCB3cm9uZwotICAgICAgICAv
LyBpbiB0aGUgdGV4dHVyZSBjbGFzcyBhbmQgd2UncmUgdW5leHBlY3RlZGx5IG1pc3NpbmcgdGhl
IGQzZCB0ZXh0dXJlCi0gICAgICAgIEFTU0VSVChkM2RUZXh0dXJlICE9IE5VTEwpOwotCi0gICAg
ICAgIHNlcmlhbCA9IHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKTsKLSAgICAgICAgZm9yY2VT
ZXRUZXh0dXJlID0gdGV4dHVyZS0+aGFzRGlydHlJbWFnZXMoKTsKLSAgICB9Ci0KLSAgICBpZiAo
Zm9yY2VTZXRUZXh0dXJlIHx8IGFwcGxpZWRTZXJpYWxzW2luZGV4XSAhPSBzZXJpYWwpCi0gICAg
ewotICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlKGQzZFNhbXBsZXIsIGQzZFRleHR1cmUpOwot
ICAgIH0KLQotICAgIGFwcGxpZWRTZXJpYWxzW2luZGV4XSA9IHNlcmlhbDsKLX0KLQotdm9pZCBS
ZW5kZXJlcjk6OnNldFJhc3Rlcml6ZXJTdGF0ZShjb25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZy
YXN0ZXJTdGF0ZSkKLXsKLSAgICBib29sIHJhc3RlclN0YXRlQ2hhbmdlZCA9IG1Gb3JjZVNldFJh
c3RlclN0YXRlIHx8IG1lbWNtcCgmcmFzdGVyU3RhdGUsICZtQ3VyUmFzdGVyU3RhdGUsIHNpemVv
ZihnbDo6UmFzdGVyaXplclN0YXRlKSkgIT0gMDsKLQotICAgIGlmIChyYXN0ZXJTdGF0ZUNoYW5n
ZWQpCi0gICAgewotICAgICAgICAvLyBTZXQgdGhlIGN1bGwgbW9kZQotICAgICAgICBpZiAocmFz
dGVyU3RhdGUuY3VsbEZhY2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBnbF9kM2Q5OjpDb252ZXJ0Q3VsbE1vZGUocmFzdGVy
U3RhdGUuY3VsbE1vZGUsIHJhc3RlclN0YXRlLmZyb250RmFjZSkpOwotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfQ1VMTE1PREUsIEQzRENVTExfTk9ORSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
cmFzdGVyU3RhdGUucG9seWdvbk9mZnNldEZpbGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChtQ3VyRGVwdGhTaXplID4gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TTE9QRVNDQUxFREVQVEhCSUFTLCAqKERXT1JEKikm
cmFzdGVyU3RhdGUucG9seWdvbk9mZnNldEZhY3Rvcik7Ci0KLSAgICAgICAgICAgICAgICBmbG9h
dCBkZXB0aEJpYXMgPSBsZGV4cChyYXN0ZXJTdGF0ZS5wb2x5Z29uT2Zmc2V0VW5pdHMsIC1zdGF0
aWNfY2FzdDxpbnQ+KG1DdXJEZXB0aFNpemUpKTsKLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19ERVBUSEJJQVMsICooRFdPUkQqKSZkZXB0aEJpYXMpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0xPUEVTQ0FMRURFUFRIQklBUywgMCk7
Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ERVBUSEJJQVMsIDAp
OwotICAgICAgICB9Ci0KLSAgICAgICAgbUN1clJhc3RlclN0YXRlID0gcmFzdGVyU3RhdGU7Ci0g
ICAgfQotCi0gICAgbUZvcmNlU2V0UmFzdGVyU3RhdGUgPSBmYWxzZTsKLX0KLQotdm9pZCBSZW5k
ZXJlcjk6OnNldEJsZW5kU3RhdGUoY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNv
bnN0IGdsOjpDb2xvciAmYmxlbmRDb2xvciwgdW5zaWduZWQgaW50IHNhbXBsZU1hc2spCi17Ci0g
ICAgYm9vbCBibGVuZFN0YXRlQ2hhbmdlZCA9IG1Gb3JjZVNldEJsZW5kU3RhdGUgfHwgbWVtY21w
KCZibGVuZFN0YXRlLCAmbUN1ckJsZW5kU3RhdGUsIHNpemVvZihnbDo6QmxlbmRTdGF0ZSkpICE9
IDA7Ci0gICAgYm9vbCBibGVuZENvbG9yQ2hhbmdlZCA9IG1Gb3JjZVNldEJsZW5kU3RhdGUgfHwg
bWVtY21wKCZibGVuZENvbG9yLCAmbUN1ckJsZW5kQ29sb3IsIHNpemVvZihnbDo6Q29sb3IpKSAh
PSAwOwotICAgIGJvb2wgc2FtcGxlTWFza0NoYW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0YXRlIHx8
IHNhbXBsZU1hc2sgIT0gbUN1clNhbXBsZU1hc2s7Ci0KLSAgICBpZiAoYmxlbmRTdGF0ZUNoYW5n
ZWQgfHwgYmxlbmRDb2xvckNoYW5nZWQpCi0gICAgewotICAgICAgICBpZiAoYmxlbmRTdGF0ZS5i
bGVuZCkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7Ci0KLSAgICAgICAgICAgIGlmIChibGVuZFN0YXRl
LnNvdXJjZUJsZW5kUkdCICE9IEdMX0NPTlNUQU5UX0FMUEhBICYmIGJsZW5kU3RhdGUuc291cmNl
QmxlbmRSR0IgIT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBICYmCi0gICAgICAgICAgICAg
ICAgYmxlbmRTdGF0ZS5kZXN0QmxlbmRSR0IgIT0gR0xfQ09OU1RBTlRfQUxQSEEgJiYgYmxlbmRT
dGF0ZS5kZXN0QmxlbmRSR0IgIT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JM
RU5ERkFDVE9SLCBnbF9kM2Q5OjpDb252ZXJ0Q29sb3IoYmxlbmRDb2xvcikpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JMRU5ERkFDVE9SLCBEM0RDT0xPUl9SR0JBKGds
Ojp1bm9ybTw4PihibGVuZENvbG9yLmFscGhhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08
OD4oYmxlbmRDb2xvci5hbHBoYSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGJsZW5k
Q29sb3IuYWxwaGEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4PihibGVuZENvbG9yLmFs
cGhhKSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19TUkNCTEVORCwgZ2xfZDNkOTo6Q29udmVydEJsZW5kRnVuYyhibGVuZFN0YXRl
LnNvdXJjZUJsZW5kUkdCKSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19ERVNUQkxFTkQsIGdsX2QzZDk6OkNvbnZlcnRCbGVuZEZ1bmMoYmxlbmRTdGF0ZS5kZXN0
QmxlbmRSR0IpKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JM
RU5ET1AsIGdsX2QzZDk6OkNvbnZlcnRCbGVuZE9wKGJsZW5kU3RhdGUuYmxlbmRFcXVhdGlvblJH
QikpOwotCi0gICAgICAgICAgICBpZiAoYmxlbmRTdGF0ZS5zb3VyY2VCbGVuZFJHQiAhPSBibGVu
ZFN0YXRlLnNvdXJjZUJsZW5kQWxwaGEgfHwKLSAgICAgICAgICAgICAgICBibGVuZFN0YXRlLmRl
c3RCbGVuZFJHQiAhPSBibGVuZFN0YXRlLmRlc3RCbGVuZEFscGhhIHx8Ci0gICAgICAgICAgICAg
ICAgYmxlbmRTdGF0ZS5ibGVuZEVxdWF0aW9uUkdCICE9IGJsZW5kU3RhdGUuYmxlbmRFcXVhdGlv
bkFscGhhKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX1NFUEFSQVRFQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7Ci0KLSAgICAgICAg
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TUkNCTEVOREFMUEhBLCBnbF9k
M2Q5OjpDb252ZXJ0QmxlbmRGdW5jKGJsZW5kU3RhdGUuc291cmNlQmxlbmRBbHBoYSkpOwotICAg
ICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RFU1RCTEVOREFMUEhB
LCBnbF9kM2Q5OjpDb252ZXJ0QmxlbmRGdW5jKGJsZW5kU3RhdGUuZGVzdEJsZW5kQWxwaGEpKTsK
LSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVORE9QQUxQ
SEEsIGdsX2QzZDk6OkNvbnZlcnRCbGVuZE9wKGJsZW5kU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhh
KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJM
RU5ERU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19B
TFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYmxlbmRT
dGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEZJWE1F
KCJTYW1wbGUgYWxwaGEgdG8gY292ZXJhZ2UgaXMgdW5pbXBsZW1lbnRlZC4iKTsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vIFNldCB0aGUgY29sb3IgbWFzawotICAgICAgICBib29sIHplcm9Db2xv
ck1hc2tBbGxvd2VkID0gZ2V0QWRhcHRlclZlbmRvcigpICE9IFZFTkRPUl9JRF9BTUQ7Ci0gICAg
ICAgIC8vIEFwcGFyZW50bHkgc29tZSBBVEkgY2FyZHMgaGF2ZSBhIGJ1ZyB3aGVyZSBhIGRyYXcg
d2l0aCBhIHplcm8gY29sb3IKLSAgICAgICAgLy8gd3JpdGUgbWFzayBjYW4gY2F1c2UgbGF0ZXIg
ZHJhd3MgdG8gaGF2ZSBpbmNvcnJlY3QgcmVzdWx0cy4gSW5zdGVhZCwKLSAgICAgICAgLy8gc2V0
IGEgbm9uemVybyBjb2xvciB3cml0ZSBtYXNrIGJ1dCBtb2RpZnkgdGhlIGJsZW5kIHN0YXRlIHNv
IHRoYXQgbm8KLSAgICAgICAgLy8gZHJhd2luZyBpcyBkb25lLgotICAgICAgICAvLyBodHRwOi8v
Y29kZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0L2lzc3Vlcy9kZXRhaWw/aWQ9MTY5Ci0KLSAg
ICAgICAgRFdPUkQgY29sb3JNYXNrID0gZ2xfZDNkOTo6Q29udmVydENvbG9yTWFzayhibGVuZFN0
YXRlLmNvbG9yTWFza1JlZCwgYmxlbmRTdGF0ZS5jb2xvck1hc2tHcmVlbiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGVuZFN0YXRlLmNvbG9y
TWFza0JsdWUsIGJsZW5kU3RhdGUuY29sb3JNYXNrQWxwaGEpOwotICAgICAgICBpZiAoY29sb3JN
YXNrID09IDAgJiYgIXplcm9Db2xvck1hc2tBbGxvd2VkKQotICAgICAgICB7Ci0gICAgICAgICAg
ICAvLyBFbmFibGUgZ3JlZW4gY2hhbm5lbCwgYnV0IHNldCBibGVuZGluZyBzbyBub3RoaW5nIHdp
bGwgYmUgZHJhd24uCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19D
T0xPUldSSVRFRU5BQkxFLCBEM0RDT0xPUldSSVRFRU5BQkxFX0dSRUVOKTsKLSAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOwot
Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TUkNCTEVORCwgRDNE
QkxFTkRfWkVSTyk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19E
RVNUQkxFTkQsIEQzREJMRU5EX09ORSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19CTEVORE9QLCBEM0RCTEVORE9QX0FERCk7Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19DT0xPUldSSVRFRU5BQkxFLCBjb2xvck1hc2spOwotICAgICAgICB9Ci0KLSAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfRElUSEVSRU5BQkxFLCBibGVuZFN0YXRlLmRpdGhl
ciA/IFRSVUUgOiBGQUxTRSk7Ci0KLSAgICAgICAgbUN1ckJsZW5kU3RhdGUgPSBibGVuZFN0YXRl
OwotICAgICAgICBtQ3VyQmxlbmRDb2xvciA9IGJsZW5kQ29sb3I7Ci0gICAgfQotCi0gICAgaWYg
KHNhbXBsZU1hc2tDaGFuZ2VkKQotICAgIHsKLSAgICAgICAgLy8gU2V0IHRoZSBtdWx0aXNhbXBs
ZSBtYXNrCi0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExF
QU5USUFMSUFTLCBUUlVFKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
TVVMVElTQU1QTEVNQVNLLCBzdGF0aWNfY2FzdDxEV09SRD4oc2FtcGxlTWFzaykpOwotCi0gICAg
ICAgIG1DdXJTYW1wbGVNYXNrID0gc2FtcGxlTWFzazsKLSAgICB9Ci0KLSAgICBtRm9yY2VTZXRC
bGVuZFN0YXRlID0gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyZXI5OjpzZXREZXB0aFN0ZW5jaWxT
dGF0ZShjb25zdCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmRlcHRoU3RlbmNpbFN0YXRlLCBpbnQg
c3RlbmNpbFJlZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3Rl
bmNpbEJhY2tSZWYsIGJvb2wgZnJvbnRGYWNlQ0NXKQotewotICAgIGJvb2wgZGVwdGhTdGVuY2ls
U3RhdGVDaGFuZ2VkID0gbUZvcmNlU2V0RGVwdGhTdGVuY2lsU3RhdGUgfHwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNtcCgmZGVwdGhTdGVuY2lsU3RhdGUsICZtQ3Vy
RGVwdGhTdGVuY2lsU3RhdGUsIHNpemVvZihnbDo6RGVwdGhTdGVuY2lsU3RhdGUpKSAhPSAwOwot
ICAgIGJvb2wgc3RlbmNpbFJlZkNoYW5nZWQgPSBtRm9yY2VTZXREZXB0aFN0ZW5jaWxTdGF0ZSB8
fCBzdGVuY2lsUmVmICE9IG1DdXJTdGVuY2lsUmVmIHx8Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZW5jaWxCYWNrUmVmICE9IG1DdXJTdGVuY2lsQmFja1JlZjsKLSAgICBib29sIGZy
b250RmFjZUNDV0NoYW5nZWQgPSBtRm9yY2VTZXREZXB0aFN0ZW5jaWxTdGF0ZSB8fCBmcm9udEZh
Y2VDQ1cgIT0gbUN1ckZyb250RmFjZUNDVzsKLQotICAgIGlmIChkZXB0aFN0ZW5jaWxTdGF0ZUNo
YW5nZWQpCi0gICAgewotICAgICAgICBpZiAoZGVwdGhTdGVuY2lsU3RhdGUuZGVwdGhUZXN0KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5B
QkxFLCBEM0RaQl9UUlVFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX1pGVU5DLCBnbF9kM2Q5OjpDb252ZXJ0Q29tcGFyaXNvbihkZXB0aFN0ZW5jaWxTdGF0ZS5k
ZXB0aEZ1bmMpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEQzRFpCX0ZBTFNFKTsK
LSAgICAgICAgfQotCi0gICAgICAgIG1DdXJEZXB0aFN0ZW5jaWxTdGF0ZSA9IGRlcHRoU3RlbmNp
bFN0YXRlOwotICAgIH0KLQotICAgIGlmIChkZXB0aFN0ZW5jaWxTdGF0ZUNoYW5nZWQgfHwgc3Rl
bmNpbFJlZkNoYW5nZWQgfHwgZnJvbnRGYWNlQ0NXQ2hhbmdlZCkKLSAgICB7Ci0gICAgICAgIGlm
IChkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsVGVzdCAmJiBtQ3VyU3RlbmNpbFNpemUgPiAwKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVO
Q0lMRU5BQkxFLCBUUlVFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX1RXT1NJREVEU1RFTkNJTE1PREUsIFRSVUUpOwotCi0gICAgICAgICAgICAvLyBGSVhNRTog
VW5zdXBwb3J0ZWQgYnkgRDNEOQotICAgICAgICAgICAgY29uc3QgRDNEUkVOREVSU1RBVEVUWVBF
IEQzRFJTX0NDV19TVEVOQ0lMUkVGID0gRDNEUlNfU1RFTkNJTFJFRjsKLSAgICAgICAgICAgIGNv
bnN0IEQzRFJFTkRFUlNUQVRFVFlQRSBEM0RSU19DQ1dfU1RFTkNJTE1BU0sgPSBEM0RSU19TVEVO
Q0lMTUFTSzsKLSAgICAgICAgICAgIGNvbnN0IEQzRFJFTkRFUlNUQVRFVFlQRSBEM0RSU19DQ1df
U1RFTkNJTFdSSVRFTUFTSyA9IEQzRFJTX1NURU5DSUxXUklURU1BU0s7Ci0gICAgICAgICAgICBp
ZiAoZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbFdyaXRlbWFzayAhPSBkZXB0aFN0ZW5jaWxTdGF0
ZS5zdGVuY2lsQmFja1dyaXRlbWFzayB8fAotICAgICAgICAgICAgICAgIHN0ZW5jaWxSZWYgIT0g
c3RlbmNpbEJhY2tSZWYgfHwKLSAgICAgICAgICAgICAgICBkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVu
Y2lsTWFzayAhPSBkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsQmFja01hc2spCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgRVJSKCJTZXBhcmF0ZSBmcm9udC9iYWNrIHN0ZW5jaWwgd3Jp
dGVtYXNrcywgcmVmZXJlbmNlIHZhbHVlcywgb3Igc3RlbmNpbCBtYXNrIHZhbHVlcyBhcmUgaW52
YWxpZCB1bmRlciBXZWJHTC4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gZ2V0
IHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIHN0ZW5jaWwgcmVmCi0gICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgbWF4U3RlbmNpbCA9ICgxIDw8IG1DdXJTdGVuY2lsU2l6ZSkgLSAxOwotCi0gICAgICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShmcm9udEZhY2VDQ1cgPyBEM0RSU19TVEVOQ0lM
V1JJVEVNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxXUklURU1BU0ssCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsV3JpdGVtYXNrKTsK
LSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGZyb250RmFjZUNDVyA/IEQzRFJT
X1NURU5DSUxGVU5DIDogRDNEUlNfQ0NXX1NURU5DSUxGVU5DLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6Q29udmVydENvbXBhcmlzb24oZGVwdGhTdGVuY2ls
U3RhdGUuc3RlbmNpbEZ1bmMpKTsKLQotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoZnJvbnRGYWNlQ0NXID8gRDNEUlNfU1RFTkNJTFJFRiA6IEQzRFJTX0NDV19TVEVOQ0lMUkVG
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0ZW5jaWxSZWYgPCAoaW50
KW1heFN0ZW5jaWwpID8gc3RlbmNpbFJlZiA6IG1heFN0ZW5jaWwpOwotICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoZnJvbnRGYWNlQ0NXID8gRDNEUlNfU1RFTkNJTE1BU0sgOiBE
M0RSU19DQ1dfU1RFTkNJTE1BU0ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsTWFzayk7Ci0KLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKGZyb250RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxGQUlMIDogRDNEUlNf
Q0NXX1NURU5DSUxGQUlMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xf
ZDNkOTo6Q29udmVydFN0ZW5jaWxPcChkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsRmFpbCkpOwot
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoZnJvbnRGYWNlQ0NXID8gRDNEUlNf
U1RFTkNJTFpGQUlMIDogRDNEUlNfQ0NXX1NURU5DSUxaRkFJTCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRTdGVuY2lsT3AoZGVwdGhTdGVuY2ls
U3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwpKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKGZyb250RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxQQVNTIDogRDNEUlNfQ0NXX1NU
RU5DSUxQQVNTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6
Q29udmVydFN0ZW5jaWxPcChkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsUGFzc0RlcHRoUGFzcykp
OwotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZSghZnJvbnRGYWNlQ0NXID8g
RDNEUlNfU1RFTkNJTFdSSVRFTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMV1JJVEVNQVNLLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNp
bEJhY2tXcml0ZW1hc2spOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoIWZy
b250RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxGVU5DIDogRDNEUlNfQ0NXX1NURU5DSUxGVU5DLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6Q29udmVydENvbXBh
cmlzb24oZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbEJhY2tGdW5jKSk7Ci0KLSAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKCFmcm9udEZhY2VDQ1cgPyBEM0RSU19TVEVOQ0lMUkVG
IDogRDNEUlNfQ0NXX1NURU5DSUxSRUYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoc3RlbmNpbEJhY2tSZWYgPCAoaW50KW1heFN0ZW5jaWwpID8gc3RlbmNpbEJhY2tSZWYg
OiBtYXhTdGVuY2lsKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKCFmcm9u
dEZhY2VDQ1cgPyBEM0RSU19TVEVOQ0lMTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMTUFTSywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5j
aWxCYWNrTWFzayk7Ci0KLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKCFmcm9u
dEZhY2VDQ1cgPyBEM0RSU19TVEVOQ0lMRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMRkFJTCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRTdGVuY2ls
T3AoZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbEJhY2tGYWlsKSk7Ci0gICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZSghZnJvbnRGYWNlQ0NXID8gRDNEUlNfU1RFTkNJTFpGQUlMIDog
RDNEUlNfQ0NXX1NURU5DSUxaRkFJTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsX2QzZDk6OkNvbnZlcnRTdGVuY2lsT3AoZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbEJh
Y2tQYXNzRGVwdGhGYWlsKSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZSgh
ZnJvbnRGYWNlQ0NXID8gRDNEUlNfU1RFTkNJTFBBU1MgOiBEM0RSU19DQ1dfU1RFTkNJTFBBU1Ms
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9kM2Q5OjpDb252ZXJ0U3Rl
bmNpbE9wKGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcykpOwotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRFRU5BQkxFLCBkZXB0aFN0
ZW5jaWxTdGF0ZS5kZXB0aE1hc2sgPyBUUlVFIDogRkFMU0UpOwotCi0gICAgICAgIG1DdXJTdGVu
Y2lsUmVmID0gc3RlbmNpbFJlZjsKLSAgICAgICAgbUN1clN0ZW5jaWxCYWNrUmVmID0gc3RlbmNp
bEJhY2tSZWY7Ci0gICAgICAgIG1DdXJGcm9udEZhY2VDQ1cgPSBmcm9udEZhY2VDQ1c7Ci0gICAg
fQotCi0gICAgbUZvcmNlU2V0RGVwdGhTdGVuY2lsU3RhdGUgPSBmYWxzZTsKLX0KLQotdm9pZCBS
ZW5kZXJlcjk6OnNldFNjaXNzb3JSZWN0YW5nbGUoY29uc3QgZ2w6OlJlY3RhbmdsZSAmc2Npc3Nv
ciwgYm9vbCBlbmFibGVkKQotewotICAgIGJvb2wgc2Npc3NvckNoYW5nZWQgPSBtRm9yY2VTZXRT
Y2lzc29yIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNtcCgmc2Npc3NvciwgJm1D
dXJTY2lzc29yLCBzaXplb2YoZ2w6OlJlY3RhbmdsZSkpICE9IDAgfHwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgZW5hYmxlZCAhPSBtU2Npc3NvckVuYWJsZWQ7Ci0KLSAgICBpZiAoc2Npc3Nv
ckNoYW5nZWQpCi0gICAgewotICAgICAgICBpZiAoZW5hYmxlZCkKLSAgICAgICAgewotICAgICAg
ICAgICAgUkVDVCByZWN0OwotICAgICAgICAgICAgcmVjdC5sZWZ0ID0gZ2w6OmNsYW1wKHNjaXNz
b3IueCwgMCwgc3RhdGljX2Nhc3Q8aW50PihtUmVuZGVyVGFyZ2V0RGVzYy53aWR0aCkpOwotICAg
ICAgICAgICAgcmVjdC50b3AgPSBnbDo6Y2xhbXAoc2Npc3Nvci55LCAwLCBzdGF0aWNfY2FzdDxp
bnQ+KG1SZW5kZXJUYXJnZXREZXNjLmhlaWdodCkpOwotICAgICAgICAgICAgcmVjdC5yaWdodCA9
IGdsOjpjbGFtcChzY2lzc29yLnggKyBzY2lzc29yLndpZHRoLCAwLCBzdGF0aWNfY2FzdDxpbnQ+
KG1SZW5kZXJUYXJnZXREZXNjLndpZHRoKSk7Ci0gICAgICAgICAgICByZWN0LmJvdHRvbSA9IGds
OjpjbGFtcChzY2lzc29yLnkgKyBzY2lzc29yLmhlaWdodCwgMCwgc3RhdGljX2Nhc3Q8aW50Piht
UmVuZGVyVGFyZ2V0RGVzYy5oZWlnaHQpKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFNjaXNz
b3JSZWN0KCZyZWN0KTsKLSAgICAgICAgfQotCi0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1NDSVNTT1JURVNURU5BQkxFLCBlbmFibGVkID8gVFJVRSA6IEZBTFNFKTsKLQot
ICAgICAgICBtU2Npc3NvckVuYWJsZWQgPSBlbmFibGVkOwotICAgICAgICBtQ3VyU2Npc3NvciA9
IHNjaXNzb3I7Ci0gICAgfQotCi0gICAgbUZvcmNlU2V0U2Npc3NvciA9IGZhbHNlOwotfQotCi1i
b29sIFJlbmRlcmVyOTo6c2V0Vmlld3BvcnQoY29uc3QgZ2w6OlJlY3RhbmdsZSAmdmlld3BvcnQs
IGZsb2F0IHpOZWFyLCBmbG9hdCB6RmFyLCBHTGVudW0gZHJhd01vZGUsIEdMZW51bSBmcm9udEZh
Y2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpZ25vcmVWaWV3cG9ydCkKLXsK
LSAgICBnbDo6UmVjdGFuZ2xlIGFjdHVhbFZpZXdwb3J0ID0gdmlld3BvcnQ7Ci0gICAgZmxvYXQg
YWN0dWFsWk5lYXIgPSBnbDo6Y2xhbXAwMSh6TmVhcik7Ci0gICAgZmxvYXQgYWN0dWFsWkZhciA9
IGdsOjpjbGFtcDAxKHpGYXIpOwotICAgIGlmIChpZ25vcmVWaWV3cG9ydCkKLSAgICB7Ci0gICAg
ICAgIGFjdHVhbFZpZXdwb3J0LnggPSAwOwotICAgICAgICBhY3R1YWxWaWV3cG9ydC55ID0gMDsK
LSAgICAgICAgYWN0dWFsVmlld3BvcnQud2lkdGggPSBtUmVuZGVyVGFyZ2V0RGVzYy53aWR0aDsK
LSAgICAgICAgYWN0dWFsVmlld3BvcnQuaGVpZ2h0ID0gbVJlbmRlclRhcmdldERlc2MuaGVpZ2h0
OwotICAgICAgICBhY3R1YWxaTmVhciA9IDAuMGY7Ci0gICAgICAgIGFjdHVhbFpGYXIgPSAxLjBm
OwotICAgIH0KLQotICAgIEQzRFZJRVdQT1JUOSBkeFZpZXdwb3J0OwotICAgIGR4Vmlld3BvcnQu
WCA9IGdsOjpjbGFtcChhY3R1YWxWaWV3cG9ydC54LCAwLCBzdGF0aWNfY2FzdDxpbnQ+KG1SZW5k
ZXJUYXJnZXREZXNjLndpZHRoKSk7Ci0gICAgZHhWaWV3cG9ydC5ZID0gZ2w6OmNsYW1wKGFjdHVh
bFZpZXdwb3J0LnksIDAsIHN0YXRpY19jYXN0PGludD4obVJlbmRlclRhcmdldERlc2MuaGVpZ2h0
KSk7Ci0gICAgZHhWaWV3cG9ydC5XaWR0aCA9IGdsOjpjbGFtcChhY3R1YWxWaWV3cG9ydC53aWR0
aCwgMCwgc3RhdGljX2Nhc3Q8aW50PihtUmVuZGVyVGFyZ2V0RGVzYy53aWR0aCkgLSBzdGF0aWNf
Y2FzdDxpbnQ+KGR4Vmlld3BvcnQuWCkpOwotICAgIGR4Vmlld3BvcnQuSGVpZ2h0ID0gZ2w6OmNs
YW1wKGFjdHVhbFZpZXdwb3J0LmhlaWdodCwgMCwgc3RhdGljX2Nhc3Q8aW50PihtUmVuZGVyVGFy
Z2V0RGVzYy5oZWlnaHQpIC0gc3RhdGljX2Nhc3Q8aW50PihkeFZpZXdwb3J0LlkpKTsKLSAgICBk
eFZpZXdwb3J0Lk1pblogPSBhY3R1YWxaTmVhcjsKLSAgICBkeFZpZXdwb3J0Lk1heFogPSBhY3R1
YWxaRmFyOwotCi0gICAgaWYgKGR4Vmlld3BvcnQuV2lkdGggPD0gMCB8fCBkeFZpZXdwb3J0Lkhl
aWdodCA8PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIE5vdGhpbmcgdG8g
cmVuZGVyCi0gICAgfQotCi0gICAgZmxvYXQgZGVwdGhGcm9udCA9ICFnbDo6SXNUcmlhbmdsZU1v
ZGUoZHJhd01vZGUpID8gMC4wZiA6IChmcm9udEZhY2UgPT0gR0xfQ0NXID8gMS4wZiA6IC0xLjBm
KTsKLQotICAgIGJvb2wgdmlld3BvcnRDaGFuZ2VkID0gbUZvcmNlU2V0Vmlld3BvcnQgfHwgbWVt
Y21wKCZhY3R1YWxWaWV3cG9ydCwgJm1DdXJWaWV3cG9ydCwgc2l6ZW9mKGdsOjpSZWN0YW5nbGUp
KSAhPSAwIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxaTmVhciAhPSBtQ3Vy
TmVhciB8fCBhY3R1YWxaRmFyICE9IG1DdXJGYXIgfHwgbUN1ckRlcHRoRnJvbnQgIT0gZGVwdGhG
cm9udDsKLSAgICBpZiAodmlld3BvcnRDaGFuZ2VkKQotICAgIHsKLSAgICAgICAgbURldmljZS0+
U2V0Vmlld3BvcnQoJmR4Vmlld3BvcnQpOwotCi0gICAgICAgIG1DdXJWaWV3cG9ydCA9IGFjdHVh
bFZpZXdwb3J0OwotICAgICAgICBtQ3VyTmVhciA9IGFjdHVhbFpOZWFyOwotICAgICAgICBtQ3Vy
RmFyID0gYWN0dWFsWkZhcjsKLSAgICAgICAgbUN1ckRlcHRoRnJvbnQgPSBkZXB0aEZyb250Owot
Ci0gICAgICAgIGR4X1ZlcnRleENvbnN0YW50cyB2YyA9IHswfTsKLSAgICAgICAgZHhfUGl4ZWxD
b25zdGFudHMgcGMgPSB7MH07Ci0KLSAgICAgICAgdmMudmlld0FkanVzdFswXSA9IChmbG9hdCko
KGFjdHVhbFZpZXdwb3J0LndpZHRoIC0gKGludClkeFZpZXdwb3J0LldpZHRoKSArIDIgKiAoYWN0
dWFsVmlld3BvcnQueCAtIChpbnQpZHhWaWV3cG9ydC5YKSAtIDEpIC8gZHhWaWV3cG9ydC5XaWR0
aDsKLSAgICAgICAgdmMudmlld0FkanVzdFsxXSA9IChmbG9hdCkoKGFjdHVhbFZpZXdwb3J0Lmhl
aWdodCAtIChpbnQpZHhWaWV3cG9ydC5IZWlnaHQpICsgMiAqIChhY3R1YWxWaWV3cG9ydC55IC0g
KGludClkeFZpZXdwb3J0LlkpIC0gMSkgLyBkeFZpZXdwb3J0LkhlaWdodDsKLSAgICAgICAgdmMu
dmlld0FkanVzdFsyXSA9IChmbG9hdClhY3R1YWxWaWV3cG9ydC53aWR0aCAvIGR4Vmlld3BvcnQu
V2lkdGg7Ci0gICAgICAgIHZjLnZpZXdBZGp1c3RbM10gPSAoZmxvYXQpYWN0dWFsVmlld3BvcnQu
aGVpZ2h0IC8gZHhWaWV3cG9ydC5IZWlnaHQ7Ci0KLSAgICAgICAgcGMudmlld0Nvb3Jkc1swXSA9
IGFjdHVhbFZpZXdwb3J0LndpZHRoICAqIDAuNWY7Ci0gICAgICAgIHBjLnZpZXdDb29yZHNbMV0g
PSBhY3R1YWxWaWV3cG9ydC5oZWlnaHQgKiAwLjVmOwotICAgICAgICBwYy52aWV3Q29vcmRzWzJd
ID0gYWN0dWFsVmlld3BvcnQueCArIChhY3R1YWxWaWV3cG9ydC53aWR0aCAgKiAwLjVmKTsKLSAg
ICAgICAgcGMudmlld0Nvb3Jkc1szXSA9IGFjdHVhbFZpZXdwb3J0LnkgKyAoYWN0dWFsVmlld3Bv
cnQuaGVpZ2h0ICogMC41Zik7Ci0KLSAgICAgICAgcGMuZGVwdGhGcm9udFswXSA9IChhY3R1YWxa
RmFyIC0gYWN0dWFsWk5lYXIpICogMC41ZjsKLSAgICAgICAgcGMuZGVwdGhGcm9udFsxXSA9IChh
Y3R1YWxaTmVhciArIGFjdHVhbFpGYXIpICogMC41ZjsKLSAgICAgICAgcGMuZGVwdGhGcm9udFsy
XSA9IGRlcHRoRnJvbnQ7Ci0KLSAgICAgICAgdmMuZGVwdGhSYW5nZVswXSA9IGFjdHVhbFpOZWFy
OwotICAgICAgICB2Yy5kZXB0aFJhbmdlWzFdID0gYWN0dWFsWkZhcjsKLSAgICAgICAgdmMuZGVw
dGhSYW5nZVsyXSA9IGFjdHVhbFpGYXIgLSBhY3R1YWxaTmVhcjsKLQotICAgICAgICBwYy5kZXB0
aFJhbmdlWzBdID0gYWN0dWFsWk5lYXI7Ci0gICAgICAgIHBjLmRlcHRoUmFuZ2VbMV0gPSBhY3R1
YWxaRmFyOwotICAgICAgICBwYy5kZXB0aFJhbmdlWzJdID0gYWN0dWFsWkZhciAtIGFjdHVhbFpO
ZWFyOwotCi0gICAgICAgIGlmIChtZW1jbXAoJnZjLCAmbVZlcnRleENvbnN0YW50cywgc2l6ZW9m
KGR4X1ZlcnRleENvbnN0YW50cykpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1WZXJ0
ZXhDb25zdGFudHMgPSB2YzsKLSAgICAgICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1lbWNtcCgmcGMsICZtUGl4ZWxDb25zdGFudHMsIHNp
emVvZihkeF9QaXhlbENvbnN0YW50cykpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1Q
aXhlbENvbnN0YW50cyA9IHBjOwotICAgICAgICAgICAgbUR4VW5pZm9ybXNEaXJ0eSA9IHRydWU7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtRm9yY2VTZXRWaWV3cG9ydCA9IGZhbHNlOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIFJlbmRlcmVyOTo6YXBwbHlQcmltaXRpdmVUeXBlKEdM
ZW51bSBtb2RlLCBHTHNpemVpIGNvdW50KQotewotICAgIHN3aXRjaCAobW9kZSkKLSAgICB7Ci0g
ICAgICBjYXNlIEdMX1BPSU5UUzoKLSAgICAgICAgbVByaW1pdGl2ZVR5cGUgPSBEM0RQVF9QT0lO
VExJU1Q7Ci0gICAgICAgIG1QcmltaXRpdmVDb3VudCA9IGNvdW50OwotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfTElORVM6Ci0gICAgICAgIG1QcmltaXRpdmVUeXBlID0gRDNEUFRfTElO
RUxJU1Q7Ci0gICAgICAgIG1QcmltaXRpdmVDb3VudCA9IGNvdW50IC8gMjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX0xJTkVfTE9PUDoKLSAgICAgICAgbVByaW1pdGl2ZVR5cGUgPSBE
M0RQVF9MSU5FU1RSSVA7Ci0gICAgICAgIG1QcmltaXRpdmVDb3VudCA9IGNvdW50IC0gMTsgICAv
LyBEM0QgZG9lc24ndCBzdXBwb3J0IGxpbmUgbG9vcHMsIHNvIHdlIGRyYXcgdGhlIGxhc3QgbGlu
ZSBzZXBhcmF0ZWx5Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MSU5FX1NUUklQOgot
ICAgICAgICBtUHJpbWl0aXZlVHlwZSA9IEQzRFBUX0xJTkVTVFJJUDsKLSAgICAgICAgbVByaW1p
dGl2ZUNvdW50ID0gY291bnQgLSAxOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVFJJ
QU5HTEVTOgotICAgICAgICBtUHJpbWl0aXZlVHlwZSA9IEQzRFBUX1RSSUFOR0xFTElTVDsKLSAg
ICAgICAgbVByaW1pdGl2ZUNvdW50ID0gY291bnQgLyAzOwotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfVFJJQU5HTEVfU1RSSVA6Ci0gICAgICAgIG1QcmltaXRpdmVUeXBlID0gRDNEUFRf
VFJJQU5HTEVTVFJJUDsKLSAgICAgICAgbVByaW1pdGl2ZUNvdW50ID0gY291bnQgLSAyOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVFJJQU5HTEVfRkFOOgotICAgICAgICBtUHJpbWl0
aXZlVHlwZSA9IEQzRFBUX1RSSUFOR0xFRkFOOwotICAgICAgICBtUHJpbWl0aXZlQ291bnQgPSBj
b3VudCAtIDI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0sIGZhbHNlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
bVByaW1pdGl2ZUNvdW50ID4gMDsKLX0KLQotCi1nbDo6UmVuZGVyYnVmZmVyICpSZW5kZXJlcjk6
OmdldE51bGxDb2xvcmJ1ZmZlcihnbDo6UmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlcikKLXsKLSAg
ICBpZiAoIWRlcHRoYnVmZmVyKQotICAgIHsKLSAgICAgICAgRVJSKCJVbmV4cGVjdGVkIG51bGwg
ZGVwdGhidWZmZXIgZm9yIGRlcHRoLW9ubHkgRkJPLiIpOwotICAgICAgICByZXR1cm4gTlVMTDsK
LSAgICB9Ci0KLSAgICBHTHNpemVpIHdpZHRoICA9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpOwot
ICAgIEdMc2l6ZWkgaGVpZ2h0ID0gZGVwdGhidWZmZXItPmdldEhlaWdodCgpOwotCi0gICAgLy8g
c2VhcmNoIGNhY2hlZCBudWxsY29sb3JidWZmZXJzCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBO
VU1fTlVMTF9DT0xPUkJVRkZFUl9DQUNIRV9FTlRSSUVTOyBpKyspCi0gICAgewotICAgICAgICBp
ZiAobU51bGxDb2xvcmJ1ZmZlckNhY2hlW2ldLmJ1ZmZlciAhPSBOVUxMICYmCi0gICAgICAgICAg
ICBtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0ud2lkdGggPT0gd2lkdGggJiYKLSAgICAgICAgICAg
IG1OdWxsQ29sb3JidWZmZXJDYWNoZVtpXS5oZWlnaHQgPT0gaGVpZ2h0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0ubHJ1Q291bnQgPSArK21NYXhOdWxs
Q29sb3JidWZmZXJMUlU7Ci0gICAgICAgICAgICByZXR1cm4gbU51bGxDb2xvcmJ1ZmZlckNhY2hl
W2ldLmJ1ZmZlcjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGdsOjpSZW5kZXJidWZmZXIgKm51
bGxidWZmZXIgPSBuZXcgZ2w6OlJlbmRlcmJ1ZmZlcih0aGlzLCAwLCBuZXcgZ2w6OkNvbG9yYnVm
ZmVyKHRoaXMsIHdpZHRoLCBoZWlnaHQsIEdMX05PTkUsIDApKTsKLQotICAgIC8vIGFkZCBudWxs
YnVmZmVyIHRvIHRoZSBjYWNoZQotICAgIE51bGxDb2xvcmJ1ZmZlckNhY2hlRW50cnkgKm9sZGVz
dCA9ICZtTnVsbENvbG9yYnVmZmVyQ2FjaGVbMF07Ci0gICAgZm9yIChpbnQgaSA9IDE7IGkgPCBO
VU1fTlVMTF9DT0xPUkJVRkZFUl9DQUNIRV9FTlRSSUVTOyBpKyspCi0gICAgewotICAgICAgICBp
ZiAobU51bGxDb2xvcmJ1ZmZlckNhY2hlW2ldLmxydUNvdW50IDwgb2xkZXN0LT5scnVDb3VudCkK
LSAgICAgICAgewotICAgICAgICAgICAgb2xkZXN0ID0gJm1OdWxsQ29sb3JidWZmZXJDYWNoZVtp
XTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGRlbGV0ZSBvbGRlc3QtPmJ1ZmZlcjsKLSAgICBv
bGRlc3QtPmJ1ZmZlciA9IG51bGxidWZmZXI7Ci0gICAgb2xkZXN0LT5scnVDb3VudCA9ICsrbU1h
eE51bGxDb2xvcmJ1ZmZlckxSVTsKLSAgICBvbGRlc3QtPndpZHRoID0gd2lkdGg7Ci0gICAgb2xk
ZXN0LT5oZWlnaHQgPSBoZWlnaHQ7Ci0KLSAgICByZXR1cm4gbnVsbGJ1ZmZlcjsKLX0KLQotYm9v
bCBSZW5kZXJlcjk6OmFwcGx5UmVuZGVyVGFyZ2V0KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZm
ZXIpCi17Ci0gICAgLy8gaWYgdGhlcmUgaXMgbm8gY29sb3IgYXR0YWNobWVudCB3ZSBtdXN0IHN5
bnRoZXNpemUgYSBOVUxMIGNvbG9yYXR0YWNobWVudAotICAgIC8vIHRvIGtlZXAgdGhlIEQzRCBy
dW50aW1lIGhhcHB5LiAgVGhpcyBzaG91bGQgb25seSBiZSBwb3NzaWJsZSBpZiBkZXB0aCB0ZXh0
dXJpbmcuCi0gICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0ID0gTlVMTDsK
LSAgICBpZiAoZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlwZSgwKSAhPSBHTF9OT05FKQot
ICAgIHsKLSAgICAgICAgcmVuZGVyYnVmZmVyT2JqZWN0ID0gZnJhbWVidWZmZXItPmdldENvbG9y
YnVmZmVyKDApOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZW5kZXJidWZmZXJP
YmplY3QgPSBnZXROdWxsQ29sb3JidWZmZXIoZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCkp
OwotICAgIH0KLSAgICBpZiAoIXJlbmRlcmJ1ZmZlck9iamVjdCkKLSAgICB7Ci0gICAgICAgIEVS
UigidW5hYmxlIHRvIGxvY2F0ZSByZW5kZXJidWZmZXIgZm9yIEZCTy4iKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wgcmVuZGVyVGFyZ2V0Q2hhbmdlZCA9IGZhbHNl
OwotICAgIHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRTZXJpYWwgPSByZW5kZXJidWZmZXJPYmpl
Y3QtPmdldFNlcmlhbCgpOwotICAgIGlmIChyZW5kZXJUYXJnZXRTZXJpYWwgIT0gbUFwcGxpZWRS
ZW5kZXJUYXJnZXRTZXJpYWwpCi0gICAgewotICAgICAgICAvLyBBcHBseSB0aGUgcmVuZGVyIHRh
cmdldCBvbiB0aGUgZGV2aWNlCi0gICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJn
ZXRTdXJmYWNlID0gTlVMTDsKLQotICAgICAgICBSZW5kZXJUYXJnZXQgKnJlbmRlclRhcmdldCA9
IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIGlmIChyZW5k
ZXJUYXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlbmRlclRhcmdldFN1cmZhY2UgPSBS
ZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShyZW5kZXJUYXJnZXQpLT5nZXRTdXJmYWNl
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXJlbmRlclRhcmdldFN1cmZhY2UpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEVSUigicmVuZGVyIHRhcmdldCBwb2ludGVyIHVuZXhwZWN0ZWRs
eSBudWxsLiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIENvbnRleHQgbXVzdCBi
ZSBsb3N0Ci0gICAgICAgIH0KLQotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwg
cmVuZGVyVGFyZ2V0U3VyZmFjZSk7Ci0gICAgICAgIHJlbmRlclRhcmdldFN1cmZhY2UtPlJlbGVh
c2UoKTsKLQotICAgICAgICBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbCA9IHJlbmRlclRhcmdl
dFNlcmlhbDsKLSAgICAgICAgcmVuZGVyVGFyZ2V0Q2hhbmdlZCA9IHRydWU7Ci0gICAgfQotCi0g
ICAgZ2w6OlJlbmRlcmJ1ZmZlciAqZGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICB1bnNpZ25lZCBp
bnQgZGVwdGhidWZmZXJTZXJpYWwgPSAwOwotICAgIHVuc2lnbmVkIGludCBzdGVuY2lsYnVmZmVy
U2VyaWFsID0gMDsKLSAgICBpZiAoZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyVHlwZSgpICE9
IEdMX05PTkUpCi0gICAgewotICAgICAgICBkZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZlci0+Z2V0
RGVwdGhidWZmZXIoKTsKLSAgICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIp
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVwdGhi
dWZmZXJTZXJpYWwgPSBkZXB0aFN0ZW5jaWwtPmdldFNlcmlhbCgpOwotICAgIH0KLSAgICBlbHNl
IGlmIChmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQotICAg
IHsKLSAgICAgICAgZGVwdGhTdGVuY2lsID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIo
KTsKLSAgICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVS
UigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RlbmNpbGJ1ZmZlclNlcmlh
bCA9IGRlcHRoU3RlbmNpbC0+Z2V0U2VyaWFsKCk7Ci0gICAgfQotCi0gICAgaWYgKGRlcHRoYnVm
ZmVyU2VyaWFsICE9IG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWwgfHwKLSAgICAgICAgc3RlbmNp
bGJ1ZmZlclNlcmlhbCAhPSBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwgfHwKLSAgICAgICAg
IW1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBk
ZXB0aFNpemUgPSAwOwotICAgICAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbFNpemUgPSAwOwotCi0g
ICAgICAgIC8vIEFwcGx5IHRoZSBkZXB0aCBzdGVuY2lsIG9uIHRoZSBkZXZpY2UKLSAgICAgICAg
aWYgKGRlcHRoU3RlbmNpbCkKLSAgICAgICAgewotICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKmRlcHRoU3RlbmNpbFN1cmZhY2UgPSBOVUxMOwotICAgICAgICAgICAgUmVuZGVyVGFyZ2V0
ICpkZXB0aFN0ZW5jaWxSZW5kZXJUYXJnZXQgPSBkZXB0aFN0ZW5jaWwtPmdldERlcHRoU3RlbmNp
bCgpOwotCi0gICAgICAgICAgICBpZiAoZGVwdGhTdGVuY2lsUmVuZGVyVGFyZ2V0KQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGRlcHRoU3RlbmNpbFN1cmZhY2UgPSBSZW5kZXJUYXJn
ZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShkZXB0aFN0ZW5jaWxSZW5kZXJUYXJnZXQpLT5nZXRTdXJm
YWNlKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghZGVwdGhTdGVuY2lsU3Vy
ZmFjZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBFUlIoImRlcHRoIHN0ZW5jaWwg
cG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7ICAgLy8gQ29udGV4dCBtdXN0IGJlIGxvc3QKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgbURldmljZS0+U2V0RGVwdGhTdGVuY2lsU3VyZmFjZShkZXB0aFN0ZW5jaWxTdXJmYWNlKTsK
LSAgICAgICAgICAgIGRlcHRoU3RlbmNpbFN1cmZhY2UtPlJlbGVhc2UoKTsKLQotICAgICAgICAg
ICAgZGVwdGhTaXplID0gZGVwdGhTdGVuY2lsLT5nZXREZXB0aFNpemUoKTsKLSAgICAgICAgICAg
IHN0ZW5jaWxTaXplID0gZGVwdGhTdGVuY2lsLT5nZXRTdGVuY2lsU2l6ZSgpOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0RGVwdGhT
dGVuY2lsU3VyZmFjZShOVUxMKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghbURlcHRoU3Rl
bmNpbEluaXRpYWxpemVkIHx8IGRlcHRoU2l6ZSAhPSBtQ3VyRGVwdGhTaXplKQotICAgICAgICB7
Ci0gICAgICAgICAgICBtQ3VyRGVwdGhTaXplID0gZGVwdGhTaXplOwotICAgICAgICAgICAgbUZv
cmNlU2V0UmFzdGVyU3RhdGUgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtRGVw
dGhTdGVuY2lsSW5pdGlhbGl6ZWQgfHwgc3RlbmNpbFNpemUgIT0gbUN1clN0ZW5jaWxTaXplKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtQ3VyU3RlbmNpbFNpemUgPSBzdGVuY2lsU2l6ZTsKLSAg
ICAgICAgICAgIG1Gb3JjZVNldERlcHRoU3RlbmNpbFN0YXRlID0gdHJ1ZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWwgPSBkZXB0aGJ1ZmZlclNlcmlhbDsK
LSAgICAgICAgbUFwcGxpZWRTdGVuY2lsYnVmZmVyU2VyaWFsID0gc3RlbmNpbGJ1ZmZlclNlcmlh
bDsKLSAgICAgICAgbURlcHRoU3RlbmNpbEluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICBpZiAocmVuZGVyVGFyZ2V0Q2hhbmdlZCB8fCAhbVJlbmRlclRhcmdldERlc2NJbml0aWFsaXpl
ZCkKLSAgICB7Ci0gICAgICAgIG1Gb3JjZVNldFNjaXNzb3IgPSB0cnVlOwotICAgICAgICBtRm9y
Y2VTZXRWaWV3cG9ydCA9IHRydWU7Ci0KLSAgICAgICAgbVJlbmRlclRhcmdldERlc2Mud2lkdGgg
PSByZW5kZXJidWZmZXJPYmplY3QtPmdldFdpZHRoKCk7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXRE
ZXNjLmhlaWdodCA9IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0SGVpZ2h0KCk7Ci0gICAgICAgIG1S
ZW5kZXJUYXJnZXREZXNjLmZvcm1hdCA9IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0QWN0dWFsRm9y
bWF0KCk7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1HTGVudW0gUmVuZGVyZXI5OjphcHBseVZlcnRl
eEJ1ZmZlcihnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlZlcnRleEF0dHJp
YnV0ZSB2ZXJ0ZXhBdHRyaWJ1dGVzW10sIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNp
emVpIGluc3RhbmNlcykKLXsKLSAgICBUcmFuc2xhdGVkQXR0cmlidXRlIGF0dHJpYnV0ZXNbZ2w6
Ok1BWF9WRVJURVhfQVRUUklCU107Ci0gICAgR0xlbnVtIGVyciA9IG1WZXJ0ZXhEYXRhTWFuYWdl
ci0+cHJlcGFyZVZlcnRleERhdGEodmVydGV4QXR0cmlidXRlcywgcHJvZ3JhbUJpbmFyeSwgZmly
c3QsIGNvdW50LCBhdHRyaWJ1dGVzLCBpbnN0YW5jZXMpOwotICAgIGlmIChlcnIgIT0gR0xfTk9f
RVJST1IpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLSAgICAKLSAgICByZXR1
cm4gbVZlcnRleERlY2xhcmF0aW9uQ2FjaGUuYXBwbHlEZWNsYXJhdGlvbihtRGV2aWNlLCBhdHRy
aWJ1dGVzLCBwcm9ncmFtQmluYXJ5LCBpbnN0YW5jZXMsICZtUmVwZWF0RHJhdyk7Ci19Ci0KLS8v
IEFwcGxpZXMgdGhlIGluZGljZXMgYW5kIGVsZW1lbnQgYXJyYXkgYmluZGluZ3MgdG8gdGhlIERp
cmVjdDNEIDkgZGV2aWNlCi1HTGVudW0gUmVuZGVyZXI5OjphcHBseUluZGV4QnVmZmVyKGNvbnN0
IEdMdm9pZCAqaW5kaWNlcywgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyLCBHTHNpemVp
IGNvdW50LCBHTGVudW0gbW9kZSwgR0xlbnVtIHR5cGUsIFRyYW5zbGF0ZWRJbmRleERhdGEgKmlu
ZGV4SW5mbykKLXsKLSAgICBHTGVudW0gZXJyID0gbUluZGV4RGF0YU1hbmFnZXItPnByZXBhcmVJ
bmRleERhdGEodHlwZSwgY291bnQsIGVsZW1lbnRBcnJheUJ1ZmZlciwgaW5kaWNlcywgaW5kZXhJ
bmZvKTsKLQotICAgIGlmIChlcnIgPT0gR0xfTk9fRVJST1IpCi0gICAgewotICAgICAgICAvLyBE
aXJlY3RseSBiaW5kaW5nIHRoZSBzdG9yYWdlIGJ1ZmZlciBpcyBub3Qgc3VwcG9ydGVkIGZvciBk
M2Q5Ci0gICAgICAgIEFTU0VSVChpbmRleEluZm8tPnN0b3JhZ2UgPT0gTlVMTCk7Ci0KLSAgICAg
ICAgaWYgKGluZGV4SW5mby0+c2VyaWFsICE9IG1BcHBsaWVkSUJTZXJpYWwpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEluZGV4QnVmZmVyOSogaW5kZXhCdWZmZXIgPSBJbmRleEJ1ZmZlcjk6Om1h
a2VJbmRleEJ1ZmZlcjkoaW5kZXhJbmZvLT5pbmRleEJ1ZmZlcik7Ci0KLSAgICAgICAgICAgIG1E
ZXZpY2UtPlNldEluZGljZXMoaW5kZXhCdWZmZXItPmdldEJ1ZmZlcigpKTsKLSAgICAgICAgICAg
IG1BcHBsaWVkSUJTZXJpYWwgPSBpbmRleEluZm8tPnNlcmlhbDsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHJldHVybiBlcnI7Ci19Ci0KLXZvaWQgUmVuZGVyZXI5OjpkcmF3QXJyYXlzKEdMZW51
bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcykKLXsKLSAgICBzdGFydFNj
ZW5lKCk7Ci0gICAgICAgIAotICAgIGlmIChtb2RlID09IEdMX0xJTkVfTE9PUCkKLSAgICB7Ci0g
ICAgICAgIGRyYXdMaW5lTG9vcChjb3VudCwgR0xfTk9ORSwgTlVMTCwgMCwgTlVMTCk7Ci0gICAg
fQotICAgIGVsc2UgaWYgKGluc3RhbmNlcyA+IDApCi0gICAgewotICAgICAgICBTdGF0aWNJbmRl
eEJ1ZmZlckludGVyZmFjZSAqY291bnRpbmdJQiA9IG1JbmRleERhdGFNYW5hZ2VyLT5nZXRDb3Vu
dGluZ0luZGljZXMoY291bnQpOwotICAgICAgICBpZiAoY291bnRpbmdJQikKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKG1BcHBsaWVkSUJTZXJpYWwgIT0gY291bnRpbmdJQi0+Z2V0U2VyaWFs
KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSW5kZXhCdWZmZXI5ICppbmRleEJ1
ZmZlciA9IEluZGV4QnVmZmVyOTo6bWFrZUluZGV4QnVmZmVyOShjb3VudGluZ0lCLT5nZXRJbmRl
eEJ1ZmZlcigpKTsKLQotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldEluZGljZXMoaW5kZXhC
dWZmZXItPmdldEJ1ZmZlcigpKTsKLSAgICAgICAgICAgICAgICBtQXBwbGllZElCU2VyaWFsID0g
Y291bnRpbmdJQi0+Z2V0U2VyaWFsKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbVJlcGVhdERyYXc7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBtRGV2aWNlLT5EcmF3SW5kZXhlZFByaW1pdGl2ZShtUHJpbWl0aXZlVHlwZSwg
MCwgMCwgY291bnQsIDAsIG1QcmltaXRpdmVDb3VudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBj
cmVhdGUgYSBjb3VudGluZyBpbmRleCBidWZmZXIgZm9yIGdsRHJhd0FycmF5c0luc3RhbmNlZC4i
KTsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgZWxzZSAgIC8vIFJlZ3VsYXIgY2FzZQotICAgIHsKLSAgICAgICAg
bURldmljZS0+RHJhd1ByaW1pdGl2ZShtUHJpbWl0aXZlVHlwZSwgMCwgbVByaW1pdGl2ZUNvdW50
KTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyZXI5OjpkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUs
IEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpC
dWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5k
ZXhJbmZvLCBHTHNpemVpIC8qaW5zdGFuY2VzKi8pCi17Ci0gICAgc3RhcnRTY2VuZSgpOwotCi0g
ICAgaWYgKG1vZGUgPT0gR0xfUE9JTlRTKQotICAgIHsKLSAgICAgICAgZHJhd0luZGV4ZWRQb2lu
dHMoY291bnQsIHR5cGUsIGluZGljZXMsIGVsZW1lbnRBcnJheUJ1ZmZlcik7Ci0gICAgfQotICAg
IGVsc2UgaWYgKG1vZGUgPT0gR0xfTElORV9MT09QKQotICAgIHsKLSAgICAgICAgZHJhd0xpbmVM
b29wKGNvdW50LCB0eXBlLCBpbmRpY2VzLCBpbmRleEluZm8ubWluSW5kZXgsIGVsZW1lbnRBcnJh
eUJ1ZmZlcik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbVJlcGVhdERyYXc7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgR0xzaXplaSB2
ZXJ0ZXhDb3VudCA9IGluZGV4SW5mby5tYXhJbmRleCAtIGluZGV4SW5mby5taW5JbmRleCArIDE7
Ci0gICAgICAgICAgICBtRGV2aWNlLT5EcmF3SW5kZXhlZFByaW1pdGl2ZShtUHJpbWl0aXZlVHlw
ZSwgLShJTlQpaW5kZXhJbmZvLm1pbkluZGV4LCBpbmRleEluZm8ubWluSW5kZXgsIHZlcnRleENv
dW50LCBpbmRleEluZm8uc3RhcnRJbmRleCwgbVByaW1pdGl2ZUNvdW50KTsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQotdm9pZCBSZW5kZXJlcjk6OmRyYXdMaW5lTG9vcChHTHNpemVpIGNvdW50LCBH
TGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBpbnQgbWluSW5kZXgsIGdsOjpCdWZm
ZXIgKmVsZW1lbnRBcnJheUJ1ZmZlcikKLXsKLSAgICAvLyBHZXQgdGhlIHJhdyBpbmRpY2VzIGZv
ciBhbiBpbmRleGVkIGRyYXcKLSAgICBpZiAodHlwZSAhPSBHTF9OT05FICYmIGVsZW1lbnRBcnJh
eUJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIGdsOjpCdWZmZXIgKmluZGV4QnVmZmVyID0gZWxlbWVu
dEFycmF5QnVmZmVyOwotICAgICAgICBCdWZmZXJTdG9yYWdlICpzdG9yYWdlID0gaW5kZXhCdWZm
ZXItPmdldFN0b3JhZ2UoKTsKLSAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gcmVpbnRlcnByZXRf
Y2FzdDxpbnRwdHJfdD4oaW5kaWNlcyk7Ci0gICAgICAgIGluZGljZXMgPSBzdGF0aWNfY2FzdDxj
b25zdCBHTHVieXRlKj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSArIG9mZnNldDsKLSAgICB9Ci0KLSAg
ICB1bnNpZ25lZCBpbnQgc3RhcnRJbmRleCA9IDA7Ci0KLSAgICBpZiAoZ2V0MzJCaXRJbmRleFN1
cHBvcnQoKSkKLSAgICB7Ci0gICAgICAgIGlmICghbUxpbmVMb29wSUIpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1MaW5lTG9vcElCID0gbmV3IFN0cmVhbWluZ0luZGV4QnVmZmVySW50ZXJmYWNl
KHRoaXMpOwotICAgICAgICAgICAgaWYgKCFtTGluZUxvb3BJQi0+cmVzZXJ2ZUJ1ZmZlclNwYWNl
KElOSVRJQUxfSU5ERVhfQlVGRkVSX1NJWkUsIEdMX1VOU0lHTkVEX0lOVCkpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIG1MaW5lTG9vcElCOwotICAgICAgICAgICAgICAg
IG1MaW5lTG9vcElCID0gTlVMTDsKLQotICAgICAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNy
ZWF0ZSBhIDMyLWJpdCBsb29waW5nIGluZGV4IGJ1ZmZlciBmb3IgR0xfTElORV9MT09QLiIpOwot
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQg
aW50Pihjb3VudCkgKyAxID4gKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4
KCkgLyBzaXplb2YodW5zaWduZWQgaW50KSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigi
Q291bGQgbm90IGNyZWF0ZSBhIDMyLWJpdCBsb29waW5nIGluZGV4IGJ1ZmZlciBmb3IgR0xfTElO
RV9MT09QLCB0b28gbWFueSBpbmRpY2VzIHJlcXVpcmVkLiIpOwotICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENo
ZWNrZWQgYnkgUmVuZGVyZXI5OjphcHBseVByaW1pdGl2ZVR5cGUKLSAgICAgICAgQVNTRVJUKGNv
dW50ID49IDApOwotCi0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBzcGFjZU5lZWRlZCA9IChz
dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGNvdW50KSArIDEpICogc2l6ZW9mKHVuc2lnbmVkIGlu
dCk7Ci0gICAgICAgIGlmICghbUxpbmVMb29wSUItPnJlc2VydmVCdWZmZXJTcGFjZShzcGFjZU5l
ZWRlZCwgR0xfVU5TSUdORURfSU5UKSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJDb3Vs
ZCBub3QgcmVzZXJ2ZSBlbm91Z2ggc3BhY2UgaW4gbG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdM
X0xJTkVfTE9PUC4iKTsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkKiBtYXBwZWRNZW1vcnkgPSBOVUxMOwot
ICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMDsKLSAgICAgICAgaWYgKCFtTGluZUxvb3BJ
Qi0+bWFwQnVmZmVyKHNwYWNlTmVlZGVkLCAmbWFwcGVkTWVtb3J5LCAmb2Zmc2V0KSkKLSAgICAg
ICAgewotICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgbWFwIGluZGV4IGJ1ZmZlciBmb3IgR0xf
TElORV9MT09QLiIpOwotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXJ0SW5kZXggPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBpbnQ+KG9mZnNldCkgLyA0OwotICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgPSByZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KG1hcHBlZE1lbW9yeSk7Ci0KLSAgICAgICAgc3dp
dGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9OT05FOiAgIC8vIE5vbi1p
bmRleGVkIGRyYXcKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkYXRhW2ldID0gaTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGRhdGFbY291bnRdID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkYXRhW2ld
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpW2ldOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4o
aW5kaWNlcylbMF07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX1NIT1JUOgotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25z
dCBHTHVzaG9ydCo+KGluZGljZXMpW2ldOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGF0
YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpWzBdOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6Ci0gICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMp
W2ldOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2Fz
dDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVswXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW1M
aW5lTG9vcElCLT51bm1hcEJ1ZmZlcigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkNv
dWxkIG5vdCB1bm1hcCBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKLSAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKCFtTGluZUxvb3BJQikKLSAgICAgICAgewot
ICAgICAgICAgICAgbUxpbmVMb29wSUIgPSBuZXcgU3RyZWFtaW5nSW5kZXhCdWZmZXJJbnRlcmZh
Y2UodGhpcyk7Ci0gICAgICAgICAgICBpZiAoIW1MaW5lTG9vcElCLT5yZXNlcnZlQnVmZmVyU3Bh
Y2UoSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwgR0xfVU5TSUdORURfU0hPUlQpKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGRlbGV0ZSBtTGluZUxvb3BJQjsKLSAgICAgICAgICAg
ICAgICBtTGluZUxvb3BJQiA9IE5VTEw7Ci0KLSAgICAgICAgICAgICAgICBFUlIoIkNvdWxkIG5v
dCBjcmVhdGUgYSAxNi1iaXQgbG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4i
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2hlY2tlZCBieSBSZW5kZXJl
cjk6OmFwcGx5UHJpbWl0aXZlVHlwZQotICAgICAgICBBU1NFUlQoY291bnQgPj0gMCk7Ci0KLSAg
ICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oY291bnQpICsgMSA+IChzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0Pjo6bWF4KCkgLyBzaXplb2YodW5zaWduZWQgc2hv
cnQpKSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGEgMTYt
Yml0IGxvb3BpbmcgaW5kZXggYnVmZmVyIGZvciBHTF9MSU5FX0xPT1AsIHRvbyBtYW55IGluZGlj
ZXMgcmVxdWlyZWQuIik7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHNwYWNlTmVl
ZGVkID0gKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oY291bnQpICsgMSkgKiBzaXplb2YodW5z
aWduZWQgc2hvcnQpOwotICAgICAgICBpZiAoIW1MaW5lTG9vcElCLT5yZXNlcnZlQnVmZmVyU3Bh
Y2Uoc3BhY2VOZWVkZWQsIEdMX1VOU0lHTkVEX1NIT1JUKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgRVJSKCJDb3VsZCBub3QgcmVzZXJ2ZSBlbm91Z2ggc3BhY2UgaW4gbG9vcGluZyBpbmRleCBi
dWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkKiBtYXBwZWRNZW1v
cnkgPSBOVUxMOwotICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0OwotICAgICAgICBpZiAobUxp
bmVMb29wSUItPm1hcEJ1ZmZlcihzcGFjZU5lZWRlZCwgJm1hcHBlZE1lbW9yeSwgJm9mZnNldCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiQ291bGQgbm90IG1hcCBpbmRleCBidWZmZXIg
Zm9yIEdMX0xJTkVfTE9PUC4iKTsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGFydEluZGV4ID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgaW50PihvZmZzZXQpIC8gMjsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgKmRh
dGEgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4obWFwcGVkTWVtb3J5KTsKLQot
ICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX05PTkU6
ICAgLy8gTm9uLWluZGV4ZWQgZHJhdwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZGF0YVtjb3VudF0gPSAwOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oaW5kaWNlcylbaV07Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNvbnN0
IEdMdWJ5dGUqPihpbmRpY2VzKVswXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNh
c2UgR0xfVU5TSUdORURfU0hPUlQ6Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRp
Y19jYXN0PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNlcylbaV07Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNl
cylbMF07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lO
VDoKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1aW50
Kj4oaW5kaWNlcylbaV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkYXRhW2NvdW50XSA9
IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMpWzBdOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmICghbUxpbmVMb29wSUItPnVubWFwQnVmZmVyKCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEVSUigiQ291bGQgbm90IHVubWFwIGluZGV4IGJ1ZmZlciBmb3IgR0xfTElORV9MT09QLiIp
OwotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9IG1MaW5lTG9vcElCLT5n
ZXRTZXJpYWwoKSkKLSAgICB7Ci0gICAgICAgIEluZGV4QnVmZmVyOSAqaW5kZXhCdWZmZXIgPSBJ
bmRleEJ1ZmZlcjk6Om1ha2VJbmRleEJ1ZmZlcjkobUxpbmVMb29wSUItPmdldEluZGV4QnVmZmVy
KCkpOwotCi0gICAgICAgIG1EZXZpY2UtPlNldEluZGljZXMoaW5kZXhCdWZmZXItPmdldEJ1ZmZl
cigpKTsKLSAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IG1MaW5lTG9vcElCLT5nZXRTZXJpYWwo
KTsKLSAgICB9Ci0KLSAgICBtRGV2aWNlLT5EcmF3SW5kZXhlZFByaW1pdGl2ZShEM0RQVF9MSU5F
U1RSSVAsIC1taW5JbmRleCwgbWluSW5kZXgsIGNvdW50LCBzdGFydEluZGV4LCBjb3VudCk7Ci19
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RhdGljIHZvaWQgZHJhd1BvaW50cyhJRGlyZWN0
M0REZXZpY2U5KiBkZXZpY2UsIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcykK
LXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB1
bnNpZ25lZCBpbnQgaW5kZXhWYWx1ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oc3RhdGlj
X2Nhc3Q8Y29uc3QgVCo+KGluZGljZXMpW2ldKTsKLSAgICAgICAgZGV2aWNlLT5EcmF3UHJpbWl0
aXZlKEQzRFBUX1BPSU5UTElTVCwgaW5kZXhWYWx1ZSwgMSk7Ci0gICAgfQotfQotCi12b2lkIFJl
bmRlcmVyOTo6ZHJhd0luZGV4ZWRQb2ludHMoR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNv
bnN0IEdMdm9pZCAqaW5kaWNlcywgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyKQotewot
ICAgIC8vIERyYXdpbmcgaW5kZXggcG9pbnQgbGlzdHMgaXMgdW5zdXBwb3J0ZWQgaW4gZDNkOSwg
ZmFsbCBiYWNrIHRvIGEgcmVndWxhciBEcmF3UHJpbWl0aXZlIGNhbGwKLSAgICAvLyBmb3IgZWFj
aCBpbmRpdmlkdWFsIHBvaW50LiBUaGlzIGNhbGwgaXMgbm90IGV4cGVjdGVkIHRvIGhhcHBlbiBv
ZnRlbi4KLQotICAgIGlmIChlbGVtZW50QXJyYXlCdWZmZXIpCi0gICAgewotICAgICAgICBCdWZm
ZXJTdG9yYWdlICpzdG9yYWdlID0gZWxlbWVudEFycmF5QnVmZmVyLT5nZXRTdG9yYWdlKCk7Ci0g
ICAgICAgIGludHB0cl90IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZGlj
ZXMpOwotICAgICAgICBpbmRpY2VzID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KHN0b3Jh
Z2UtPmdldERhdGEoKSkgKyBvZmZzZXQ7Ci0gICAgfQotCi0gICAgc3dpdGNoICh0eXBlKQotICAg
IHsKLSAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOiAgZHJhd1BvaW50czxHTHVieXRlPiht
RGV2aWNlLCBjb3VudCwgaW5kaWNlcyk7ICBicmVhazsKLSAgICAgICAgY2FzZSBHTF9VTlNJR05F
RF9TSE9SVDogZHJhd1BvaW50czxHTHVzaG9ydD4obURldmljZSwgY291bnQsIGluZGljZXMpOyBi
cmVhazsKLSAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6ICAgZHJhd1BvaW50czxHTHVpbnQ+
KG1EZXZpY2UsIGNvdW50LCBpbmRpY2VzKTsgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyZXI5OjphcHBseVNoYWRlcnMoZ2w6
OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpCi17Ci0gICAgdW5zaWduZWQgaW50IHByb2dy
YW1CaW5hcnlTZXJpYWwgPSBwcm9ncmFtQmluYXJ5LT5nZXRTZXJpYWwoKTsKLSAgICBpZiAocHJv
Z3JhbUJpbmFyeVNlcmlhbCAhPSBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWwpCi0gICAgewot
ICAgICAgICBTaGFkZXJFeGVjdXRhYmxlICp2ZXJ0ZXhFeGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRW
ZXJ0ZXhFeGVjdXRhYmxlKCk7Ci0gICAgICAgIFNoYWRlckV4ZWN1dGFibGUgKnBpeGVsRXhlID0g
cHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxFeGVjdXRhYmxlKCk7Ci0KLSAgICAgICAgSURpcmVjdDNE
VmVydGV4U2hhZGVyOSAqdmVydGV4U2hhZGVyID0gTlVMTDsKLSAgICAgICAgaWYgKHZlcnRleEV4
ZSkgdmVydGV4U2hhZGVyID0gU2hhZGVyRXhlY3V0YWJsZTk6Om1ha2VTaGFkZXJFeGVjdXRhYmxl
OSh2ZXJ0ZXhFeGUpLT5nZXRWZXJ0ZXhTaGFkZXIoKTsKLQotICAgICAgICBJRGlyZWN0M0RQaXhl
bFNoYWRlcjkgKnBpeGVsU2hhZGVyID0gTlVMTDsKLSAgICAgICAgaWYgKHBpeGVsRXhlKSBwaXhl
bFNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGU5OjptYWtlU2hhZGVyRXhlY3V0YWJsZTkocGl4ZWxF
eGUpLT5nZXRQaXhlbFNoYWRlcigpOwotCi0gICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVy
KHBpeGVsU2hhZGVyKTsKLSAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyKHZlcnRleFNo
YWRlcik7Ci0gICAgICAgIHByb2dyYW1CaW5hcnktPmRpcnR5QWxsVW5pZm9ybXMoKTsKLSAgICAg
ICAgbUR4VW5pZm9ybXNEaXJ0eSA9IHRydWU7Ci0KLSAgICAgICAgbUFwcGxpZWRQcm9ncmFtQmlu
YXJ5U2VyaWFsID0gcHJvZ3JhbUJpbmFyeVNlcmlhbDsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVy
ZXI5OjphcHBseVVuaWZvcm1zKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBnbDo6
VW5pZm9ybUFycmF5ICp1bmlmb3JtQXJyYXkpCi17Ci0gICAgZm9yIChzdGQ6OnZlY3RvcjxnbDo6
VW5pZm9ybSo+Ojpjb25zdF9pdGVyYXRvciB1YiA9IHVuaWZvcm1BcnJheS0+YmVnaW4oKSwgdWUg
PSB1bmlmb3JtQXJyYXktPmVuZCgpOyB1YiAhPSB1ZTsgKyt1YikKLSAgICB7Ci0gICAgICAgIGds
OjpVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gKnViOwotCi0gICAgICAgIGlmICh0YXJnZXRVbmlm
b3JtLT5kaXJ0eSkKLSAgICAgICAgewotICAgICAgICAgICAgR0xmbG9hdCAqZiA9IChHTGZsb2F0
Kil0YXJnZXRVbmlmb3JtLT5kYXRhOwotICAgICAgICAgICAgR0xpbnQgKmkgPSAoR0xpbnQqKXRh
cmdldFVuaWZvcm0tPmRhdGE7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+
dHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgot
ICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRVJfQ1VCRToKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MOgotICAgICAgICAgICAgICBjYXNlIEdMX0JP
T0xfVkVDMjoKLSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfQk9PTF9WRUM0OgotICAgICAgICAgICAgICAgIGFwcGx5VW5pZm9ybW5idih0YXJn
ZXRVbmlmb3JtLCBpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9GTE9BVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgotICAgICAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVD
NDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKLSAgICAg
ICAgICAgICAgICBhcHBseVVuaWZvcm1uZnYodGFyZ2V0VW5pZm9ybSwgZik7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UOgotICAgICAgICAgICAgICBj
YXNlIEdMX0lOVF9WRUMyOgotICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMzOgotICAgICAg
ICAgICAgICBjYXNlIEdMX0lOVF9WRUM0OgotICAgICAgICAgICAgICAgIGFwcGx5VW5pZm9ybW5p
dih0YXJnZXRVbmlmb3JtLCBpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IGZhbHNlOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgLy8gRHJpdmVyIHVuaWZvcm1zCi0gICAgaWYgKG1EeFVuaWZvcm1zRGly
dHkpCi0gICAgewotICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYoMCwg
KGZsb2F0KikmbVZlcnRleENvbnN0YW50cywgc2l6ZW9mKGR4X1ZlcnRleENvbnN0YW50cykgLyBz
aXplb2YoZmxvYXRbNF0pKTsKLSAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFu
dEYoMCwgKGZsb2F0KikmbVBpeGVsQ29uc3RhbnRzLCBzaXplb2YoZHhfUGl4ZWxDb25zdGFudHMp
IC8gc2l6ZW9mKGZsb2F0WzRdKSk7Ci0gICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSBmYWxzZTsK
LSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyZXI5OjphcHBseVVuaWZvcm1uZnYoZ2w6OlVuaWZvcm0g
KnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMZmxvYXQgKnYpCi17Ci0gICAgaWYgKHRhcmdldFVuaWZv
cm0tPnBzUmVnaXN0ZXJJbmRleCA+PSAwKQotICAgIHsKLSAgICAgICAgbURldmljZS0+U2V0UGl4
ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHNSZWdpc3RlckluZGV4LCB2LCB0YXJn
ZXRVbmlmb3JtLT5yZWdpc3RlckNvdW50KTsKLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9y
bS0+dnNSZWdpc3RlckluZGV4ID49IDApCi0gICAgewotICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0
ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnNSZWdpc3RlckluZGV4LCB2LCB0YXJn
ZXRVbmlmb3JtLT5yZWdpc3RlckNvdW50KTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyZXI5Ojph
cHBseVVuaWZvcm1uaXYoZ2w6OlVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMaW50ICp2
KQotewotICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT5yZWdpc3RlckNvdW50IDw9IE1BWF9WRVJU
RVhfQ09OU1RBTlRfVkVDVE9SU19EM0Q5KTsKLSAgICBHTGZsb2F0IHZlY3RvcltNQVhfVkVSVEVY
X0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOV1bNF07Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IHRhcmdldFVuaWZvcm0tPnJlZ2lzdGVyQ291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAg
IHZlY3RvcltpXVswXSA9IChHTGZsb2F0KXZbNCAqIGkgKyAwXTsKLSAgICAgICAgdmVjdG9yW2ld
WzFdID0gKEdMZmxvYXQpdls0ICogaSArIDFdOwotICAgICAgICB2ZWN0b3JbaV1bMl0gPSAoR0xm
bG9hdCl2WzQgKiBpICsgMl07Ci0gICAgICAgIHZlY3RvcltpXVszXSA9IChHTGZsb2F0KXZbNCAq
IGkgKyAzXTsKLSAgICB9Ci0KLSAgICBhcHBseVVuaWZvcm1uZnYodGFyZ2V0VW5pZm9ybSwgKEdM
ZmxvYXQqKXZlY3Rvcik7Ci19Ci0KLXZvaWQgUmVuZGVyZXI5OjphcHBseVVuaWZvcm1uYnYoZ2w6
OlVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMaW50ICp2KQotewotICAgIEFTU0VSVCh0
YXJnZXRVbmlmb3JtLT5yZWdpc3RlckNvdW50IDw9IE1BWF9WRVJURVhfQ09OU1RBTlRfVkVDVE9S
U19EM0Q5KTsKLSAgICBHTGZsb2F0IHZlY3RvcltNQVhfVkVSVEVYX0NPTlNUQU5UX1ZFQ1RPUlNf
RDNEOV1bNF07Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHRhcmdldFVuaWZv
cm0tPnJlZ2lzdGVyQ291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHZlY3RvcltpXVswXSA9ICh2
WzQgKiBpICsgMF0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7Ci0gICAgICAgIHZlY3Rvcltp
XVsxXSA9ICh2WzQgKiBpICsgMV0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7Ci0gICAgICAg
IHZlY3RvcltpXVsyXSA9ICh2WzQgKiBpICsgMl0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7
Ci0gICAgICAgIHZlY3RvcltpXVszXSA9ICh2WzQgKiBpICsgM10gPT0gR0xfRkFMU0UpID8gMC4w
ZiA6IDEuMGY7Ci0gICAgfQotCi0gICAgYXBwbHlVbmlmb3JtbmZ2KHRhcmdldFVuaWZvcm0sIChH
TGZsb2F0Kil2ZWN0b3IpOwotfQotCi12b2lkIFJlbmRlcmVyOTo6Y2xlYXIoY29uc3QgZ2w6OkNs
ZWFyUGFyYW1ldGVycyAmY2xlYXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIp
Ci17Ci0gICAgRDNEQ09MT1IgY29sb3IgPSBEM0RDT0xPUl9BUkdCKGdsOjp1bm9ybTw4PihjbGVh
clBhcmFtcy5jb2xvckNsZWFyVmFsdWUuYWxwaGEpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnbDo6dW5vcm08OD4oY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLnJlZCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4PihjbGVhclBh
cmFtcy5jb2xvckNsZWFyVmFsdWUuZ3JlZW4pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbDo6dW5vcm08OD4oY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLmJsdWUpKTsK
LSAgICBmbG9hdCBkZXB0aCA9IGdsOjpjbGFtcDAxKGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1
ZSk7Ci0gICAgaW50IHN0ZW5jaWwgPSBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSAmIDB4
MDAwMDAwRkY7Ci0KLSAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbFVubWFza2VkID0gMHgwOwotICAg
IGlmICgoY2xlYXJQYXJhbXMubWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkgJiYgZnJhbWVC
dWZmZXItPmhhc1N0ZW5jaWwoKSkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzdGVuY2ls
U2l6ZSA9IGdsOjpHZXRTdGVuY2lsU2l6ZShmcmFtZUJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigp
LT5nZXRBY3R1YWxGb3JtYXQoKSk7Ci0gICAgICAgIHN0ZW5jaWxVbm1hc2tlZCA9ICgweDEgPDwg
c3RlbmNpbFNpemUpIC0gMTsKLSAgICB9Ci0KLSAgICBib29sIGFscGhhVW5tYXNrZWQgPSAoZ2w6
OkdldEFscGhhU2l6ZShtUmVuZGVyVGFyZ2V0RGVzYy5mb3JtYXQpID09IDApIHx8IGNsZWFyUGFy
YW1zLmNvbG9yTWFza0FscGhhOwotCi0gICAgY29uc3QgYm9vbCBuZWVkTWFza2VkU3RlbmNpbENs
ZWFyID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpICYmCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsZWFyUGFyYW1zLnN0ZW5jaWxX
cml0ZU1hc2sgJiBzdGVuY2lsVW5tYXNrZWQpICE9IHN0ZW5jaWxVbm1hc2tlZDsKLSAgICBjb25z
dCBib29sIG5lZWRNYXNrZWRDb2xvckNsZWFyID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xP
Ul9CVUZGRVJfQklUKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAh
KGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCAmJiBjbGVhclBhcmFtcy5jb2xvck1hc2tHcmVlbiAm
JgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyUGFyYW1zLmNv
bG9yTWFza0JsdWUgJiYgYWxwaGFVbm1hc2tlZCk7Ci0KLSAgICBpZiAobmVlZE1hc2tlZENvbG9y
Q2xlYXIgfHwgbmVlZE1hc2tlZFN0ZW5jaWxDbGVhcikKLSAgICB7Ci0gICAgICAgIC8vIFN0YXRl
IHdoaWNoIGlzIGFsdGVyZWQgaW4gYWxsIHBhdGhzIGZyb20gdGhpcyBwb2ludCB0byB0aGUgY2xl
YXIgY2FsbCBpcyBzYXZlZC4KLSAgICAgICAgLy8gU3RhdGUgd2hpY2ggaXMgYWx0ZXJlZCBpbiBv
bmx5IHNvbWUgcGF0aHMgd2lsbCBiZSBmbGFnZ2VkIGRpcnR5IGluIHRoZSBjYXNlIHRoYXQKLSAg
ICAgICAgLy8gIHRoYXQgcGF0aCBpcyB0YWtlbi4KLSAgICAgICAgSFJFU1VMVCBocjsKLSAgICAg
ICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgPT0gTlVMTCkKLSAgICAgICAgewotICAgICAg
ICAgICAgaHIgPSBtRGV2aWNlLT5CZWdpblN0YXRlQmxvY2soKTsKLSAgICAgICAgICAgIEFTU0VS
VChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IGhyID09
IEVfT1VUT0ZNRU1PUlkpOwotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19aV1JJVEVFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX1pGVU5DLCBEM0RDTVBfQUxXQVlTKTsKLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOwotICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfRklMTE1PREUsIEQzREZJTExfU09M
SUQpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFURVNU
RU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOwotICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgMCk7Ci0gICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBGQUxTRSk7Ci0gICAg
ICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsKLSAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFZlcnRleFNoYWRlcihOVUxMKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldEZWRihE
M0RGVkZfWFlaUkhXIHwgRDNERlZGX0RJRkZVU0UpOwotICAgICAgICAgICAgbURldmljZS0+U2V0
U3RyZWFtU291cmNlKDAsIE5VTEwsIDAsIDApOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsKLSAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUk9QLCBEM0RU
T1BfU0VMRUNUQVJHMSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0
ZSgwLCBEM0RUU1NfQ09MT1JBUkcxLCBEM0RUQV9URkFDVE9SKTsKLSAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19BTFBIQU9QLCBEM0RUT1BfU0VMRUNU
QVJHMSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RU
U1NfQUxQSEFBUkcxLCBEM0RUQV9URkFDVE9SKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX1RFWFRVUkVGQUNUT1IsIGNvbG9yKTsKLSAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExFTUFTSywgMHhGRkZGRkZGRik7Ci0K
LSAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBp
KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+U2V0U3RyZWFtU291
cmNlRnJlcShpLCAxKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaHIgPSBtRGV2aWNl
LT5FbmRTdGF0ZUJsb2NrKCZtTWFza2VkQ2xlYXJTYXZlZFN0YXRlKTsKLSAgICAgICAgICAgIEFT
U0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IGhy
ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKG1NYXNrZWRD
bGVhclNhdmVkU3RhdGUgIT0gTlVMTCk7Ci0KLSAgICAgICAgaWYgKG1NYXNrZWRDbGVhclNhdmVk
U3RhdGUgIT0gTlVMTCkKLSAgICAgICAgewotICAgICAgICAgICAgaHIgPSBtTWFza2VkQ2xlYXJT
YXZlZFN0YXRlLT5DYXB0dXJlKCk7Ci0gICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJ
VEVFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
WkZVTkMsIEQzRENNUF9BTFdBWVMpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19aRU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7Ci0gICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0UpOwotICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7Ci0gICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NMSVBQTEFORUVOQUJMRSwgMCk7Ci0K
LSAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldS
SVRFRU5BQkxFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6
Q29udmVydENvbG9yTWFzayhjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyUGFy
YW1zLmNvbG9yTWFza0dyZWVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tCbHVlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjbGVhclBhcmFtcy5jb2xvck1hc2tBbHBoYSkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09M
T1JXUklURUVOQUJMRSwgMCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3RlbmNpbFVubWFz
a2VkICE9IDB4MCAmJiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NU
RU5DSUxFTkFCTEUsIFRSVUUpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfVFdPU0lERURTVEVOQ0lMTU9ERSwgRkFMU0UpOwotICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEZVTkMsIEQzRENNUF9BTFdBWVMpOwotICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFJFRiwgc3RlbmNpbCk7
Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMV1JJVEVN
QVNLLCBjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrKTsKLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxGQUlMLCBEM0RTVEVOQ0lMT1BfUkVQTEFDRSk7
Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMWkZBSUws
IEQzRFNURU5DSUxPUF9SRVBMQUNFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1NURU5DSUxQQVNTLCBEM0RTVEVOQ0lMT1BfUkVQTEFDRSk7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBt
RGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsKLSAgICAgICAgbURldmljZS0+U2V0VmVydGV4
U2hhZGVyKE5VTEwpOwotICAgICAgICBtRGV2aWNlLT5TZXRGVkYoRDNERlZGX1hZWlJIVyk7Ci0g
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NFUEFSQVRFQUxQSEFCTEVOREVO
QUJMRSwgVFJVRSk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQz
RFRTU19DT0xPUk9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFRl
eHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUkFSRzEsIEQzRFRBX1RGQUNUT1IpOwotICAg
ICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQUxQSEFPUCwgRDNE
VE9QX1NFTEVDVEFSRzEpOwotICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgw
LCBEM0RUU1NfQUxQSEFBUkcxLCBEM0RUQV9URkFDVE9SKTsKLSAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfVEVYVFVSRUZBQ1RPUiwgY29sb3IpOwotICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRU1BU0ssIDB4RkZGRkZGRkYpOwotCi0g
ICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoaSwgMSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBmbG9hdCBxdWFkWzRdWzRdOyAgIC8vIEEgcXVhZHJpbGF0
ZXJhbCBjb3ZlcmluZyB0aGUgdGFyZ2V0LCBhbGlnbmVkIHRvIG1hdGNoIHRoZSBlZGdlcwotICAg
ICAgICBxdWFkWzBdWzBdID0gLTAuNWY7Ci0gICAgICAgIHF1YWRbMF1bMV0gPSBtUmVuZGVyVGFy
Z2V0RGVzYy5oZWlnaHQgLSAwLjVmOwotICAgICAgICBxdWFkWzBdWzJdID0gMC4wZjsKLSAgICAg
ICAgcXVhZFswXVszXSA9IDEuMGY7Ci0KLSAgICAgICAgcXVhZFsxXVswXSA9IG1SZW5kZXJUYXJn
ZXREZXNjLndpZHRoIC0gMC41ZjsKLSAgICAgICAgcXVhZFsxXVsxXSA9IG1SZW5kZXJUYXJnZXRE
ZXNjLmhlaWdodCAtIDAuNWY7Ci0gICAgICAgIHF1YWRbMV1bMl0gPSAwLjBmOwotICAgICAgICBx
dWFkWzFdWzNdID0gMS4wZjsKLQotICAgICAgICBxdWFkWzJdWzBdID0gLTAuNWY7Ci0gICAgICAg
IHF1YWRbMl1bMV0gPSAtMC41ZjsKLSAgICAgICAgcXVhZFsyXVsyXSA9IDAuMGY7Ci0gICAgICAg
IHF1YWRbMl1bM10gPSAxLjBmOwotCi0gICAgICAgIHF1YWRbM11bMF0gPSBtUmVuZGVyVGFyZ2V0
RGVzYy53aWR0aCAtIDAuNWY7Ci0gICAgICAgIHF1YWRbM11bMV0gPSAtMC41ZjsKLSAgICAgICAg
cXVhZFszXVsyXSA9IDAuMGY7Ci0gICAgICAgIHF1YWRbM11bM10gPSAxLjBmOwotCi0gICAgICAg
IHN0YXJ0U2NlbmUoKTsKLSAgICAgICAgbURldmljZS0+RHJhd1ByaW1pdGl2ZVVQKEQzRFBUX1RS
SUFOR0xFU1RSSVAsIDIsIHF1YWQsIHNpemVvZihmbG9hdFs0XSkpOwotCi0gICAgICAgIGlmIChj
bGVhclBhcmFtcy5tYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCkKLSAgICAgICAgewotICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgVFJVRSk7Ci0gICAg
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIFRSVUUp
OwotICAgICAgICAgICAgbURldmljZS0+Q2xlYXIoMCwgTlVMTCwgRDNEQ0xFQVJfWkJVRkZFUiwg
Y29sb3IsIGRlcHRoLCBzdGVuY2lsKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtTWFza2Vk
Q2xlYXJTYXZlZFN0YXRlICE9IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1NYXNrZWRD
bGVhclNhdmVkU3RhdGUtPkFwcGx5KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAo
Y2xlYXJQYXJhbXMubWFzaykKLSAgICB7Ci0gICAgICAgIERXT1JEIGR4Q2xlYXJGbGFncyA9IDA7
Ci0gICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkKLSAg
ICAgICAgewotICAgICAgICAgICAgZHhDbGVhckZsYWdzIHw9IEQzRENMRUFSX1RBUkdFVDsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0RFUFRIX0JVRkZFUl9C
SVQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGR4Q2xlYXJGbGFncyB8PSBEM0RDTEVBUl9aQlVG
RkVSOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfU1RFTkNJ
TF9CVUZGRVJfQklUKQotICAgICAgICB7Ci0gICAgICAgICAgICBkeENsZWFyRmxhZ3MgfD0gRDNE
Q0xFQVJfU1RFTkNJTDsKLSAgICAgICAgfQotCi0gICAgICAgIG1EZXZpY2UtPkNsZWFyKDAsIE5V
TEwsIGR4Q2xlYXJGbGFncywgY29sb3IsIGRlcHRoLCBzdGVuY2lsKTsKLSAgICB9Ci19Ci0KLXZv
aWQgUmVuZGVyZXI5OjptYXJrQWxsU3RhdGVEaXJ0eSgpCi17Ci0gICAgbUFwcGxpZWRSZW5kZXJU
YXJnZXRTZXJpYWwgPSAwOwotICAgIG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWwgPSAwOwotICAg
IG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCA9IDA7Ci0gICAgbURlcHRoU3RlbmNpbEluaXRp
YWxpemVkID0gZmFsc2U7Ci0gICAgbVJlbmRlclRhcmdldERlc2NJbml0aWFsaXplZCA9IGZhbHNl
OwotCi0gICAgbUZvcmNlU2V0RGVwdGhTdGVuY2lsU3RhdGUgPSB0cnVlOwotICAgIG1Gb3JjZVNl
dFJhc3RlclN0YXRlID0gdHJ1ZTsKLSAgICBtRm9yY2VTZXRTY2lzc29yID0gdHJ1ZTsKLSAgICBt
Rm9yY2VTZXRWaWV3cG9ydCA9IHRydWU7Ci0gICAgbUZvcmNlU2V0QmxlbmRTdGF0ZSA9IHRydWU7
Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9N
QVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IGkrKykKLSAgICB7Ci0gICAgICAgIG1Gb3Jj
ZVNldFZlcnRleFNhbXBsZXJTdGF0ZXNbaV0gPSB0cnVlOwotICAgICAgICBtQ3VyVmVydGV4VGV4
dHVyZVNlcmlhbHNbaV0gPSAwOwotICAgIH0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgaSsrKQotICAgIHsKLSAgICAgICAgbUZv
cmNlU2V0UGl4ZWxTYW1wbGVyU3RhdGVzW2ldID0gdHJ1ZTsKLSAgICAgICAgbUN1clBpeGVsVGV4
dHVyZVNlcmlhbHNbaV0gPSAwOwotICAgIH0KLQotICAgIG1BcHBsaWVkSUJTZXJpYWwgPSAwOwot
ICAgIG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbCA9IDA7Ci0gICAgbUR4VW5pZm9ybXNEaXJ0
eSA9IHRydWU7Ci0KLSAgICBtVmVydGV4RGVjbGFyYXRpb25DYWNoZS5tYXJrU3RhdGVEaXJ0eSgp
OwotfQotCi12b2lkIFJlbmRlcmVyOTo6cmVsZWFzZURldmljZVJlc291cmNlcygpCi17Ci0gICAg
d2hpbGUgKCFtRXZlbnRRdWVyeVBvb2wuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIG1FdmVudFF1
ZXJ5UG9vbC5iYWNrKCktPlJlbGVhc2UoKTsKLSAgICAgICAgbUV2ZW50UXVlcnlQb29sLnBvcF9i
YWNrKCk7Ci0gICAgfQotCi0gICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUpCi0gICAgewot
ICAgICAgICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1NYXNr
ZWRDbGVhclNhdmVkU3RhdGUgPSBOVUxMOwotICAgIH0KLQotICAgIG1WZXJ0ZXhTaGFkZXJDYWNo
ZS5jbGVhcigpOwotICAgIG1QaXhlbFNoYWRlckNhY2hlLmNsZWFyKCk7Ci0KLSAgICBkZWxldGUg
bUJsaXQ7Ci0gICAgbUJsaXQgPSBOVUxMOwotCi0gICAgZGVsZXRlIG1WZXJ0ZXhEYXRhTWFuYWdl
cjsKLSAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBOVUxMOwotCi0gICAgZGVsZXRlIG1JbmRleERh
dGFNYW5hZ2VyOwotICAgIG1JbmRleERhdGFNYW5hZ2VyID0gTlVMTDsKLQotICAgIGRlbGV0ZSBt
TGluZUxvb3BJQjsKLSAgICBtTGluZUxvb3BJQiA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IE5VTV9OVUxMX0NPTE9SQlVGRkVSX0NBQ0hFX0VOVFJJRVM7IGkrKykKLSAgICB7Ci0g
ICAgICAgIGRlbGV0ZSBtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0uYnVmZmVyOwotICAgICAgICBt
TnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0uYnVmZmVyID0gTlVMTDsKLSAgICB9Ci0KLX0KLQotCi12
b2lkIFJlbmRlcmVyOTo6bm90aWZ5RGV2aWNlTG9zdCgpCi17Ci0gICAgbURldmljZUxvc3QgPSB0
cnVlOwotICAgIG1EaXNwbGF5LT5ub3RpZnlEZXZpY2VMb3N0KCk7Ci19Ci0KLWJvb2wgUmVuZGVy
ZXI5Ojppc0RldmljZUxvc3QoKQotewotICAgIHJldHVybiBtRGV2aWNlTG9zdDsKLX0KLQotLy8g
c2V0IG5vdGlmeSB0byB0cnVlIHRvIGJyb2FkY2FzdCBhIG1lc3NhZ2UgdG8gYWxsIGNvbnRleHRz
IG9mIHRoZSBkZXZpY2UgbG9zcwotYm9vbCBSZW5kZXJlcjk6OnRlc3REZXZpY2VMb3N0KGJvb2wg
bm90aWZ5KQotewotICAgIEhSRVNVTFQgc3RhdHVzID0gU19PSzsKLQotICAgIGlmIChtRGV2aWNl
RXgpCi0gICAgewotICAgICAgICBzdGF0dXMgPSBtRGV2aWNlRXgtPkNoZWNrRGV2aWNlU3RhdGUo
TlVMTCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1EZXZpY2UpCi0gICAgewotICAgICAgICBzdGF0
dXMgPSBtRGV2aWNlLT5UZXN0Q29vcGVyYXRpdmVMZXZlbCgpOwotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgICAvLyBObyBkZXZpY2UgeWV0LCBzbyBubyByZXNldCByZXF1aXJlZAotICAg
IH0KLQotICAgIGJvb2wgaXNMb3N0ID0gRkFJTEVEKHN0YXR1cykgfHwgZDNkOTo6aXNEZXZpY2VM
b3N0RXJyb3Ioc3RhdHVzKTsKLQotICAgIGlmIChpc0xvc3QpCi0gICAgewotICAgICAgICAvLyBl
bnN1cmUgd2Ugbm90ZSB0aGUgZGV2aWNlIGxvc3MgLS0KLSAgICAgICAgLy8gd2UnbGwgcHJvYmFi
bHkgZ2V0IHRoaXMgZG9uZSBhZ2FpbiBieSBub3RpZnlEZXZpY2VMb3N0Ci0gICAgICAgIC8vIGJ1
dCBiZXN0IHRvIHJlbWVtYmVyIGl0IQotICAgICAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3Qgd2Fu
dCB0byBjbGVhciB0aGUgZGV2aWNlIGxvc3Mgc3RhdHVzIGhlcmUKLSAgICAgICAgLy8gLS0gdGhp
cyBuZWVkcyB0byBiZSBkb25lIGJ5IHJlc2V0RGV2aWNlCi0gICAgICAgIG1EZXZpY2VMb3N0ID0g
dHJ1ZTsKLSAgICAgICAgaWYgKG5vdGlmeSkKLSAgICAgICAgewotICAgICAgICAgICAgbm90aWZ5
RGV2aWNlTG9zdCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGlzTG9zdDsKLX0K
LQotYm9vbCBSZW5kZXJlcjk6OnRlc3REZXZpY2VSZXNldHRhYmxlKCkKLXsKLSAgICBIUkVTVUxU
IHN0YXR1cyA9IEQzRF9PSzsKLQotICAgIGlmIChtRGV2aWNlRXgpCi0gICAgewotICAgICAgICBz
dGF0dXMgPSBtRGV2aWNlRXgtPkNoZWNrRGV2aWNlU3RhdGUoTlVMTCk7Ci0gICAgfQotICAgIGVs
c2UgaWYgKG1EZXZpY2UpCi0gICAgewotICAgICAgICBzdGF0dXMgPSBtRGV2aWNlLT5UZXN0Q29v
cGVyYXRpdmVMZXZlbCgpOwotICAgIH0KLQotICAgIC8vIE9uIEQzRDlFeCwgREVWSUNFTE9TVCBy
ZXByZXNlbnRzIGEgaHVuZyBkZXZpY2UgdGhhdCBuZWVkcyB0byBiZSByZXN0YXJ0ZWQKLSAgICAv
LyBERVZJQ0VSRU1PVkVEIGluZGljYXRlcyB0aGUgZGV2aWNlIGhhcyBiZWVuIHN0b3BwZWQgYW5k
IG11c3QgYmUgcmVjcmVhdGVkCi0gICAgc3dpdGNoIChzdGF0dXMpCi0gICAgewotICAgICAgY2Fz
ZSBEM0RFUlJfREVWSUNFTk9UUkVTRVQ6Ci0gICAgICBjYXNlIEQzREVSUl9ERVZJQ0VIVU5HOgot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGNhc2UgRDNERVJSX0RFVklDRUxPU1Q6Ci0gICAg
ICAgIHJldHVybiAobURldmljZUV4ICE9IE5VTEwpOwotICAgICAgY2FzZSBEM0RFUlJfREVWSUNF
UkVNT1ZFRDoKLSAgICAgICAgVU5JTVBMRU1FTlRFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29s
IFJlbmRlcmVyOTo6cmVzZXREZXZpY2UoKQotewotICAgIHJlbGVhc2VEZXZpY2VSZXNvdXJjZXMo
KTsKLQotICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50UGFyYW1ldGVycyA9IGdldERl
ZmF1bHRQcmVzZW50UGFyYW1ldGVycygpOwotCi0gICAgSFJFU1VMVCByZXN1bHQgPSBEM0RfT0s7
Ci0gICAgYm9vbCBsb3N0ID0gdGVzdERldmljZUxvc3QoZmFsc2UpOwotICAgIGludCBhdHRlbXB0
cyA9IDM7Ci0KLSAgICB3aGlsZSAobG9zdCAmJiBhdHRlbXB0cyA+IDApCi0gICAgewotICAgICAg
ICBpZiAobURldmljZUV4KQotICAgICAgICB7Ci0gICAgICAgICAgICBTbGVlcCg1MDApOyAgIC8v
IEdpdmUgdGhlIGdyYXBoaWNzIGRyaXZlciBzb21lIENQVSB0aW1lCi0gICAgICAgICAgICByZXN1
bHQgPSBtRGV2aWNlRXgtPlJlc2V0RXgoJnByZXNlbnRQYXJhbWV0ZXJzLCBOVUxMKTsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZp
Y2UtPlRlc3RDb29wZXJhdGl2ZUxldmVsKCk7Ci0gICAgICAgICAgICB3aGlsZSAocmVzdWx0ID09
IEQzREVSUl9ERVZJQ0VMT1NUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNsZWVw
KDEwMCk7ICAgLy8gR2l2ZSB0aGUgZ3JhcGhpY3MgZHJpdmVyIHNvbWUgQ1BVIHRpbWUKLSAgICAg
ICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5UZXN0Q29vcGVyYXRpdmVMZXZlbCgpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9ERVZJQ0VOT1RS
RVNFVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5S
ZXNldCgmcHJlc2VudFBhcmFtZXRlcnMpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgbG9zdCA9IHRlc3REZXZpY2VMb3N0KGZhbHNlKTsKLSAgICAgICAgYXR0ZW1wdHMgLS07
Ci0gICAgfQotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgRVJSKCJS
ZXNldC9SZXNldEV4IGZhaWxlZCBtdWx0aXBsZSB0aW1lczogMHglMDhYIiwgcmVzdWx0KTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIHJlc2V0IGRldmljZSBkZWZhdWx0
cwotICAgIGluaXRpYWxpemVEZXZpY2UoKTsKLSAgICBtRGV2aWNlTG9zdCA9IGZhbHNlOwotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLURXT1JEIFJlbmRlcmVyOTo6Z2V0QWRhcHRlclZlbmRvcigp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1BZGFwdGVySWRlbnRpZmllci5WZW5kb3JJZDsKLX0KLQot
c3RkOjpzdHJpbmcgUmVuZGVyZXI5OjpnZXRSZW5kZXJlckRlc2NyaXB0aW9uKCkgY29uc3QKLXsK
LSAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gcmVuZGVyZXJTdHJpbmc7Ci0KLSAgICByZW5kZXJlclN0
cmluZyA8PCBtQWRhcHRlcklkZW50aWZpZXIuRGVzY3JpcHRpb247Ci0gICAgaWYgKGdldFNoYXJl
SGFuZGxlU3VwcG9ydCgpKQotICAgIHsKLSAgICAgICAgcmVuZGVyZXJTdHJpbmcgPDwgIiBEaXJl
Y3QzRDlFeCI7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJlbmRlcmVyU3RyaW5n
IDw8ICIgRGlyZWN0M0Q5IjsKLSAgICB9Ci0KLSAgICByZW5kZXJlclN0cmluZyA8PCAiIHZzXyIg
PDwgRDNEU0hBREVSX1ZFUlNJT05fTUFKT1IobURldmljZUNhcHMuVmVydGV4U2hhZGVyVmVyc2lv
bikgPDwgIl8iIDw8IEQzRFNIQURFUl9WRVJTSU9OX01JTk9SKG1EZXZpY2VDYXBzLlZlcnRleFNo
YWRlclZlcnNpb24pOwotICAgIHJlbmRlcmVyU3RyaW5nIDw8ICIgcHNfIiA8PCBEM0RTSEFERVJf
VkVSU0lPTl9NQUpPUihtRGV2aWNlQ2Fwcy5QaXhlbFNoYWRlclZlcnNpb24pIDw8ICJfIiA8PCBE
M0RTSEFERVJfVkVSU0lPTl9NSU5PUihtRGV2aWNlQ2Fwcy5QaXhlbFNoYWRlclZlcnNpb24pOwot
Ci0gICAgcmV0dXJuIHJlbmRlcmVyU3RyaW5nLnN0cigpOwotfQotCi1HVUlEIFJlbmRlcmVyOTo6
Z2V0QWRhcHRlcklkZW50aWZpZXIoKSBjb25zdAotewotICAgIHJldHVybiBtQWRhcHRlcklkZW50
aWZpZXIuRGV2aWNlSWRlbnRpZmllcjsKLX0KLQotdm9pZCBSZW5kZXJlcjk6OmdldE11bHRpU2Ft
cGxlU3VwcG9ydChEM0RGT1JNQVQgZm9ybWF0LCBib29sICptdWx0aVNhbXBsZUFycmF5KQotewot
ICAgIGZvciAoaW50IG11bHRpU2FtcGxlSW5kZXggPSAwOyBtdWx0aVNhbXBsZUluZGV4IDw9IEQz
RE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7IG11bHRpU2FtcGxlSW5kZXgrKykKLSAgICB7Ci0gICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQzZDktPkNoZWNrRGV2aWNlTXVsdGlTYW1wbGVUeXBlKG1B
ZGFwdGVyLCBtRGV2aWNlVHlwZSwgZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLCAoRDNETVVMVElTQU1QTEVfVFlQ
RSltdWx0aVNhbXBsZUluZGV4LCBOVUxMKTsKLQotICAgICAgICBtdWx0aVNhbXBsZUFycmF5W211
bHRpU2FtcGxlSW5kZXhdID0gU1VDQ0VFREVEKHJlc3VsdCk7Ci0gICAgfQotfQotCi1ib29sIFJl
bmRlcmVyOTo6Z2V0QkdSQVRleHR1cmVTdXBwb3J0KCkgY29uc3QKLXsKLSAgICAvLyBEaXJlY3RY
IDkgYWx3YXlzIHN1cHBvcnRzIEJHUkEKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBSZW5k
ZXJlcjk6OmdldERYVDFUZXh0dXJlU3VwcG9ydCgpCi17Ci0gICAgcmV0dXJuIG1EWFQxVGV4dHVy
ZVN1cHBvcnQ7Ci19Ci0KLWJvb2wgUmVuZGVyZXI5OjpnZXREWFQzVGV4dHVyZVN1cHBvcnQoKQot
ewotICAgIHJldHVybiBtRFhUM1RleHR1cmVTdXBwb3J0OwotfQotCi1ib29sIFJlbmRlcmVyOTo6
Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCkKLXsKLSAgICByZXR1cm4gbURYVDVUZXh0dXJlU3VwcG9y
dDsKLX0KLQotYm9vbCBSZW5kZXJlcjk6OmdldERlcHRoVGV4dHVyZVN1cHBvcnQoKSBjb25zdAot
ewotICAgIHJldHVybiBtRGVwdGhUZXh0dXJlU3VwcG9ydDsKLX0KLQotYm9vbCBSZW5kZXJlcjk6
OmdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFi
bGUpCi17Ci0gICAgKmZpbHRlcmluZyA9IG1GbG9hdDMyRmlsdGVyU3VwcG9ydDsKLSAgICAqcmVu
ZGVyYWJsZSA9IG1GbG9hdDMyUmVuZGVyU3VwcG9ydDsKLSAgICByZXR1cm4gbUZsb2F0MzJUZXh0
dXJlU3VwcG9ydDsKLX0KLQotYm9vbCBSZW5kZXJlcjk6OmdldEZsb2F0MTZUZXh0dXJlU3VwcG9y
dChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpCi17Ci0gICAgKmZpbHRlcmluZyA9
IG1GbG9hdDE2RmlsdGVyU3VwcG9ydDsKLSAgICAqcmVuZGVyYWJsZSA9IG1GbG9hdDE2UmVuZGVy
U3VwcG9ydDsKLSAgICByZXR1cm4gbUZsb2F0MTZUZXh0dXJlU3VwcG9ydDsKLX0KLQotYm9vbCBS
ZW5kZXJlcjk6OmdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCkKLXsKLSAgICByZXR1cm4gbUx1
bWluYW5jZVRleHR1cmVTdXBwb3J0OwotfQotCi1ib29sIFJlbmRlcmVyOTo6Z2V0THVtaW5hbmNl
QWxwaGFUZXh0dXJlU3VwcG9ydCgpCi17Ci0gICAgcmV0dXJuIG1MdW1pbmFuY2VBbHBoYVRleHR1
cmVTdXBwb3J0OwotfQotCi1ib29sIFJlbmRlcmVyOTo6Z2V0VGV4dHVyZUZpbHRlckFuaXNvdHJv
cHlTdXBwb3J0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzVGV4dHVyZUZpbHRlckFu
aXNvdHJvcHk7Ci19Ci0KLWZsb2F0IFJlbmRlcmVyOTo6Z2V0VGV4dHVyZU1heEFuaXNvdHJvcHko
KSBjb25zdAotewotICAgIGlmIChtU3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obURldmljZUNhcHMuTWF4QW5p
c290cm9weSk7Ci0gICAgfQotICAgIHJldHVybiAxLjBmOwotfQotCi1ib29sIFJlbmRlcmVyOTo6
Z2V0RXZlbnRRdWVyeVN1cHBvcnQoKQotewotICAgIHJldHVybiBtRXZlbnRRdWVyeVN1cHBvcnQ7
Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldE1heFZlcnRleFRleHR1cmVJbWFnZVVu
aXRzKCkgY29uc3QKLXsKLSAgICBNRVRBX0FTU0VSVChNQVhfVEVYVFVSRV9JTUFHRV9VTklUU19W
VEZfU00zIDw9IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5J
VFMpOwotICAgIHJldHVybiBtVmVydGV4VGV4dHVyZVN1cHBvcnQgPyBNQVhfVEVYVFVSRV9JTUFH
RV9VTklUU19WVEZfU00zIDogMDsKLX0KLQotdW5zaWduZWQgaW50IFJlbmRlcmVyOTo6Z2V0TWF4
Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdsOjpNQVhf
VEVYVFVSRV9JTUFHRV9VTklUUyArIGdldE1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCk7Ci19
Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldFJlc2VydmVkVmVydGV4VW5pZm9ybVZlY3Rv
cnMoKSBjb25zdAotewotICAgIHJldHVybiAyOyAgIC8vIGR4X1ZpZXdBZGp1c3QgYW5kIGR4X0Rl
cHRoUmFuZ2UuCi19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldFJlc2VydmVkRnJhZ21l
bnRVbmlmb3JtVmVjdG9ycygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDM7ICAgLy8gZHhfVmlld0Nv
b3JkcywgZHhfRGVwdGhGcm9udCBhbmQgZHhfRGVwdGhSYW5nZS4KLX0KLQotdW5zaWduZWQgaW50
IFJlbmRlcmVyOTo6Z2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKSBjb25zdAotewotICAgIHJl
dHVybiBNQVhfVkVSVEVYX0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOSAtIGdldFJlc2VydmVkVmVydGV4
VW5pZm9ybVZlY3RvcnMoKTsKLX0KLQotdW5zaWduZWQgaW50IFJlbmRlcmVyOTo6Z2V0TWF4RnJh
Z21lbnRVbmlmb3JtVmVjdG9ycygpIGNvbnN0Ci17Ci0gICAgY29uc3QgaW50IG1heFBpeGVsQ29u
c3RhbnRWZWN0b3JzID0gKGdldE1ham9yU2hhZGVyTW9kZWwoKSA+PSAzKSA/IE1BWF9QSVhFTF9D
T05TVEFOVF9WRUNUT1JTX1NNMyA6IE1BWF9QSVhFTF9DT05TVEFOVF9WRUNUT1JTX1NNMjsKLQot
ICAgIHJldHVybiBtYXhQaXhlbENvbnN0YW50VmVjdG9ycyAtIGdldFJlc2VydmVkRnJhZ21lbnRV
bmlmb3JtVmVjdG9ycygpOwotfQotCi11bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRNYXhWYXJ5
aW5nVmVjdG9ycygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChnZXRNYWpvclNoYWRlck1vZGVsKCkg
Pj0gMykgPyBNQVhfVkFSWUlOR19WRUNUT1JTX1NNMyA6IE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00y
OwotfQotCi1ib29sIFJlbmRlcmVyOTo6Z2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25z
dAotewotICAgIHJldHVybiBtU3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlczsKLX0KLQotYm9vbCBS
ZW5kZXJlcjk6OmdldE9jY2x1c2lvblF1ZXJ5U3VwcG9ydCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1PY2NsdXNpb25RdWVyeVN1cHBvcnQ7Ci19Ci0KLWJvb2wgUmVuZGVyZXI5OjpnZXRJbnN0YW5j
aW5nU3VwcG9ydCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVy
VmVyc2lvbiA+PSBEM0RQU19WRVJTSU9OKDMsIDApOwotfQotCi1ib29sIFJlbmRlcmVyOTo6Z2V0
U2hhcmVIYW5kbGVTdXBwb3J0KCkgY29uc3QKLXsKLSAgICAvLyBQSVggZG9lc24ndCBzZWVtIHRv
IHN1cHBvcnQgdXNpbmcgc2hhcmUgaGFuZGxlcywgc28gZGlzYWJsZSB0aGVtLgotICAgIHJldHVy
biAobUQzZDlFeCAhPSBOVUxMKSAmJiAhZ2w6OnBlcmZBY3RpdmUoKTsKLX0KLQotYm9vbCBSZW5k
ZXJlcjk6OmdldERlcml2YXRpdmVJbnN0cnVjdGlvblN1cHBvcnQoKSBjb25zdAotewotICAgIHJl
dHVybiAobURldmljZUNhcHMuUFMyMENhcHMuQ2FwcyAmIEQzRFBTMjBDQVBTX0dSQURJRU5USU5T
VFJVQ1RJT05TKSAhPSAwOwotfQotCi1ib29sIFJlbmRlcmVyOTo6Z2V0UG9zdFN1YkJ1ZmZlclN1
cHBvcnQoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi1pbnQgUmVuZGVyZXI5Ojpn
ZXRNYWpvclNoYWRlck1vZGVsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gRDNEU0hBREVSX1ZFUlNJ
T05fTUFKT1IobURldmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJzaW9uKTsKLX0KLQotZmxvYXQgUmVu
ZGVyZXI5OjpnZXRNYXhQb2ludFNpemUoKSBjb25zdAotewotICAgIC8vIFBvaW50IHNpemUgY2xh
bXBlZCBhdCAxLjBmIGZvciBTTTIKLSAgICByZXR1cm4gZ2V0TWFqb3JTaGFkZXJNb2RlbCgpID09
IDMgPyBtRGV2aWNlQ2Fwcy5NYXhQb2ludFNpemUgOiAxLjBmOwotfQotCi1pbnQgUmVuZGVyZXI5
OjpnZXRNYXhWaWV3cG9ydERpbWVuc2lvbigpIGNvbnN0Ci17Ci0gICAgaW50IG1heFRleHR1cmVE
aW1lbnNpb24gPSBzdGQ6Om1pbihzdGQ6Om1pbihnZXRNYXhUZXh0dXJlV2lkdGgoKSwgZ2V0TWF4
VGV4dHVyZUhlaWdodCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX1NJWkUpOwotICAgIHJldHVybiBt
YXhUZXh0dXJlRGltZW5zaW9uOwotfQotCi1pbnQgUmVuZGVyZXI5OjpnZXRNYXhUZXh0dXJlV2lk
dGgoKSBjb25zdAotewotICAgIHJldHVybiAoaW50KW1EZXZpY2VDYXBzLk1heFRleHR1cmVXaWR0
aDsKLX0KLQotaW50IFJlbmRlcmVyOTo6Z2V0TWF4VGV4dHVyZUhlaWdodCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIChpbnQpbURldmljZUNhcHMuTWF4VGV4dHVyZUhlaWdodDsKLX0KLQotYm9vbCBS
ZW5kZXJlcjk6OmdldDMyQml0SW5kZXhTdXBwb3J0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbURl
dmljZUNhcHMuTWF4VmVydGV4SW5kZXggPj0gKDEgPDwgMTYpOwotfQotCi1EV09SRCBSZW5kZXJl
cjk6OmdldENhcHNEZWNsVHlwZXMoKSBjb25zdAotewotICAgIHJldHVybiBtRGV2aWNlQ2Fwcy5E
ZWNsVHlwZXM7Ci19Ci0KLWludCBSZW5kZXJlcjk6OmdldE1pblN3YXBJbnRlcnZhbCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1NaW5Td2FwSW50ZXJ2YWw7Ci19Ci0KLWludCBSZW5kZXJlcjk6Omdl
dE1heFN3YXBJbnRlcnZhbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1NYXhTd2FwSW50ZXJ2YWw7
Ci19Ci0KLWludCBSZW5kZXJlcjk6OmdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSBjb25zdAotewot
ICAgIHJldHVybiBtTWF4U3VwcG9ydGVkU2FtcGxlczsKLX0KLQotaW50IFJlbmRlcmVyOTo6Z2V0
TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMoRDNERk9STUFUIGZvcm1hdCwgaW50IHJlcXVlc3RlZCkg
Y29uc3QKLXsKLSAgICBpZiAocmVxdWVzdGVkID09IDApCi0gICAgewotICAgICAgICByZXR1cm4g
cmVxdWVzdGVkOwotICAgIH0KLQotICAgIHN0ZDo6bWFwPEQzREZPUk1BVCwgYm9vbCAqPjo6Y29u
c3RfaXRlcmF0b3IgaXRyID0gbU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7Ci0gICAg
aWYgKGl0ciA9PSBtTXVsdGlTYW1wbGVTdXBwb3J0LmVuZCgpKQotICAgIHsKLSAgICAgICAgaWYg
KGZvcm1hdCA9PSBEM0RGTVRfVU5LTk9XTikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IHJlcXVlc3RlZDsgaSA8PSBE
M0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTOyArK2kpCi0gICAgewotICAgICAgICBpZiAoaXRyLT5z
ZWNvbmRbaV0gJiYgaSAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7
Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldE1heFJlbmRlclRhcmdldHMoKSBjb25z
dAotewotICAgIC8vIHdlIGRvIG5vdCBzdXBwb3J0IE1SVCBpbiBkM2Q5Ci0gICAgcmV0dXJuIDE7
Ci19Ci0KLUQzREZPUk1BVCBSZW5kZXJlcjk6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQo
R0xpbnQgaW50ZXJuYWxmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKLSAg
ICB7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgY2FzZSBHTF9ERVBU
SF9DT01QT05FTlQzMl9PRVM6Ci0gICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgot
ICAgICAgICByZXR1cm4gRDNERk1UX0lOVFo7Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdC
X1MzVENfRFhUMV9FWFQ6Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFf
RVhUOgotICAgICAgICByZXR1cm4gRDNERk1UX0RYVDE7Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNT
RURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6Ci0gICAgICAgIHJldHVybiBEM0RGTVRfRFhUMzsKLSAg
ICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKLSAgICAgICAgcmV0
dXJuIEQzREZNVF9EWFQ1OwotICAgICAgY2FzZSBHTF9SR0JBMzJGX0VYVDoKLSAgICAgIGNhc2Ug
R0xfUkdCMzJGX0VYVDoKLSAgICAgIGNhc2UgR0xfQUxQSEEzMkZfRVhUOgotICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0UzMkZfRVhUOgotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhU
OgotICAgICAgICByZXR1cm4gRDNERk1UX0EzMkIzMkczMlIzMkY7Ci0gICAgICBjYXNlIEdMX1JH
QkExNkZfRVhUOgotICAgICAgY2FzZSBHTF9SR0IxNkZfRVhUOgotICAgICAgY2FzZSBHTF9BTFBI
QTE2Rl9FWFQ6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6Ci0gICAgICBjYXNlIEdM
X0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6Ci0gICAgICAgIHJldHVybiBEM0RGTVRfQTE2QjE2RzE2
UjE2RjsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOF9FWFQ6Ci0gICAgICAgIGlmIChnZXRMdW1p
bmFuY2VUZXh0dXJlU3VwcG9ydCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRDNE
Rk1UX0w4OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFO
Q0U4X0FMUEhBOF9FWFQ6Ci0gICAgICAgIGlmIChnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBw
b3J0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBEM0RGTVRfQThMODsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6Ci0gICAgICBjYXNl
IEdMX1JHQjU2NToKLSAgICAgICAgcmV0dXJuIEQzREZNVF9YOFI4RzhCODsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gRDNERk1UX0E4UjhHOEI4OwotfQotCi1ib29sIFJlbmRlcmVyOTo6Y29weVRvUmVu
ZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKmRlc3QsIFRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlMkQgKnNvdXJjZSkKLXsKLSAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotCi0gICAg
aWYgKHNvdXJjZSAmJiBkZXN0KQotICAgIHsKLSAgICAgICAgVGV4dHVyZVN0b3JhZ2U5XzJEICpz
b3VyY2U5ID0gVGV4dHVyZVN0b3JhZ2U5XzJEOjptYWtlVGV4dHVyZVN0b3JhZ2U5XzJEKHNvdXJj
ZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwotICAgICAgICBUZXh0dXJlU3RvcmFnZTlfMkQgKmRl
c3Q5ID0gVGV4dHVyZVN0b3JhZ2U5XzJEOjptYWtlVGV4dHVyZVN0b3JhZ2U5XzJEKGRlc3QtPmdl
dFN0b3JhZ2VJbnN0YW5jZSgpKTsKLQotICAgICAgICBpbnQgbGV2ZWxzID0gc291cmNlOS0+bGV2
ZWxDb3VudCgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxldmVsczsgKytpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3JjU3VyZiA9IHNvdXJjZTkt
PmdldFN1cmZhY2VMZXZlbChpLCBmYWxzZSk7Ci0gICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqZHN0U3VyZiA9IGRlc3Q5LT5nZXRTdXJmYWNlTGV2ZWwoaSwgZmFsc2UpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICByZXN1bHQgPSBjb3B5VG9SZW5kZXJUYXJnZXQoZHN0U3VyZiwgc3Jj
U3VyZiwgc291cmNlOS0+aXNNYW5hZ2VkKCkpOwotCi0gICAgICAgICAgICBpZiAoc3JjU3VyZikg
c3JjU3VyZi0+UmVsZWFzZSgpOwotICAgICAgICAgICAgaWYgKGRzdFN1cmYpIGRzdFN1cmYtPlJl
bGVhc2UoKTsKLQotICAgICAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
Ym9vbCBSZW5kZXJlcjk6OmNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZUN1YmUgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc291cmNlKQotewotICAg
IGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0KLSAgICBpZiAoc291cmNlICYmIGRlc3QpCi0gICAgewot
ICAgICAgICBUZXh0dXJlU3RvcmFnZTlfQ3ViZSAqc291cmNlOSA9IFRleHR1cmVTdG9yYWdlOV9D
dWJlOjptYWtlVGV4dHVyZVN0b3JhZ2U5X0N1YmUoc291cmNlLT5nZXRTdG9yYWdlSW5zdGFuY2Uo
KSk7Ci0gICAgICAgIFRleHR1cmVTdG9yYWdlOV9DdWJlICpkZXN0OSA9IFRleHR1cmVTdG9yYWdl
OV9DdWJlOjptYWtlVGV4dHVyZVN0b3JhZ2U5X0N1YmUoZGVzdC0+Z2V0U3RvcmFnZUluc3RhbmNl
KCkpOwotICAgICAgICBpbnQgbGV2ZWxzID0gc291cmNlOS0+bGV2ZWxDb3VudCgpOwotICAgICAg
ICBmb3IgKGludCBmID0gMDsgZiA8IDY7IGYrKykKLSAgICAgICAgewotICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBsZXZlbHM7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3JjU3VyZiA9IHNvdXJjZTktPmdldEN1YmVNYXBTdXJm
YWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGYsIGksIGZhbHNlKTsKLSAgICAg
ICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZHN0U3VyZiA9IGRlc3Q5LT5nZXRDdWJlTWFw
U3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmLCBpLCB0cnVlKTsKLQot
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvcHlUb1JlbmRlclRhcmdldChkc3RTdXJmLCBzcmNT
dXJmLCBzb3VyY2U5LT5pc01hbmFnZWQoKSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc3JjU3Vy
Zikgc3JjU3VyZi0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIGlmIChkc3RTdXJmKSBkc3RT
dXJmLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotRDNEUE9PTCBSZW5kZXJlcjk6OmdldEJ1ZmZl
clBvb2woRFdPUkQgdXNhZ2UpIGNvbnN0Ci17Ci0gICAgaWYgKG1EM2Q5RXggIT0gTlVMTCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBEM0RQT09MX0RFRkFVTFQ7Ci0gICAgfQotICAgIGVsc2UKLSAg
ICB7Ci0gICAgICAgIGlmICghKHVzYWdlICYgRDNEVVNBR0VfRFlOQU1JQykpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBEM0RQT09MX01BTkFHRUQ7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gRDNEUE9PTF9ERUZBVUxUOwotfQotCi1ib29sIFJlbmRlcmVyOTo6Y29weUlt
YWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNv
dXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpz
dG9yYWdlLCBHTGludCBsZXZlbCkKLXsKLSAgICBSRUNUIHJlY3Q7Ci0gICAgcmVjdC5sZWZ0ID0g
c291cmNlUmVjdC54OwotICAgIHJlY3QudG9wID0gc291cmNlUmVjdC55OwotICAgIHJlY3Qucmln
aHQgPSBzb3VyY2VSZWN0LnggKyBzb3VyY2VSZWN0LndpZHRoOwotICAgIHJlY3QuYm90dG9tID0g
c291cmNlUmVjdC55ICsgc291cmNlUmVjdC5oZWlnaHQ7Ci0KLSAgICByZXR1cm4gbUJsaXQtPmNv
cHkoZnJhbWVidWZmZXIsIHJlY3QsIGRlc3RGb3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQsIHN0b3Jh
Z2UsIGxldmVsKTsKLX0KLQotYm9vbCBSZW5kZXJlcjk6OmNvcHlJbWFnZShnbDo6RnJhbWVidWZm
ZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0g
ZGVzdEZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCkKLXsKLSAgICBSRUNUIHJlY3Q7Ci0gICAgcmVjdC5sZWZ0ID0g
c291cmNlUmVjdC54OwotICAgIHJlY3QudG9wID0gc291cmNlUmVjdC55OwotICAgIHJlY3Qucmln
aHQgPSBzb3VyY2VSZWN0LnggKyBzb3VyY2VSZWN0LndpZHRoOwotICAgIHJlY3QuYm90dG9tID0g
c291cmNlUmVjdC55ICsgc291cmNlUmVjdC5oZWlnaHQ7Ci0KLSAgICByZXR1cm4gbUJsaXQtPmNv
cHkoZnJhbWVidWZmZXIsIHJlY3QsIGRlc3RGb3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQsIHN0b3Jh
Z2UsIHRhcmdldCwgbGV2ZWwpOwotfQotCi1ib29sIFJlbmRlcmVyOTo6YmxpdFJlY3QoZ2w6OkZy
YW1lYnVmZmVyICpyZWFkRnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRSZWN0
LCBnbDo6RnJhbWVidWZmZXIgKmRyYXdGcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAm
ZHJhd1JlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0
LCBib29sIGJsaXREZXB0aFN0ZW5jaWwpCi17Ci0gICAgZW5kU2NlbmUoKTsKLQotICAgIGlmIChi
bGl0UmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVhZEJ1
ZmZlciA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoMCk7Ci0gICAgICAgIGdsOjpS
ZW5kZXJidWZmZXIgKmRyYXdCdWZmZXIgPSBkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVy
KDApOwotICAgICAgICBSZW5kZXJUYXJnZXQ5ICpyZWFkUmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAg
ICAgICAgUmVuZGVyVGFyZ2V0OSAqZHJhd1JlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgICAgIElE
aXJlY3QzRFN1cmZhY2U5KiByZWFkU3VyZmFjZSA9IE5VTEw7Ci0gICAgICAgIElEaXJlY3QzRFN1
cmZhY2U5KiBkcmF3U3VyZmFjZSA9IE5VTEw7Ci0KLSAgICAgICAgaWYgKHJlYWRCdWZmZXIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJlYWRSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQ5Ojpt
YWtlUmVuZGVyVGFyZ2V0OShyZWFkQnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSk7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKGRyYXdCdWZmZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRyYXdS
ZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShkcmF3QnVmZmVy
LT5nZXRSZW5kZXJUYXJnZXQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVhZFJlbmRl
clRhcmdldCkKLSAgICAgICAgewotICAgICAgICAgICAgcmVhZFN1cmZhY2UgPSByZWFkUmVuZGVy
VGFyZ2V0LT5nZXRTdXJmYWNlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGRyYXdSZW5kZXJU
YXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRyYXdTdXJmYWNlID0gZHJhd1JlbmRlclRh
cmdldC0+Z2V0U3VyZmFjZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFyZWFkU3VyZmFj
ZSB8fCAhZHJhd1N1cmZhY2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiRmFpbGVkIHRv
IHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOwotICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBSRUNU
IHNyY1JlY3Q7Ci0gICAgICAgIHNyY1JlY3QubGVmdCA9IHJlYWRSZWN0Lng7Ci0gICAgICAgIHNy
Y1JlY3QucmlnaHQgPSByZWFkUmVjdC54ICsgcmVhZFJlY3Qud2lkdGg7Ci0gICAgICAgIHNyY1Jl
Y3QudG9wID0gcmVhZFJlY3QueTsKLSAgICAgICAgc3JjUmVjdC5ib3R0b20gPSByZWFkUmVjdC55
ICsgcmVhZFJlY3QuaGVpZ2h0OwotCi0gICAgICAgIFJFQ1QgZHN0UmVjdDsKLSAgICAgICAgZHN0
UmVjdC5sZWZ0ID0gZHJhd1JlY3QueDsKLSAgICAgICAgZHN0UmVjdC5yaWdodCA9IGRyYXdSZWN0
LnggKyBkcmF3UmVjdC53aWR0aDsKLSAgICAgICAgZHN0UmVjdC50b3AgPSBkcmF3UmVjdC55Owot
ICAgICAgICBkc3RSZWN0LmJvdHRvbSA9IGRyYXdSZWN0LnkgKyBkcmF3UmVjdC5oZWlnaHQ7Ci0K
LSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5TdHJldGNoUmVjdChyZWFkU3VyZmFj
ZSwgJnNyY1JlY3QsIGRyYXdTdXJmYWNlLCAmZHN0UmVjdCwgRDNEVEVYRl9OT05FKTsKLQotICAg
ICAgICByZWFkU3VyZmFjZS0+UmVsZWFzZSgpOwotICAgICAgICBkcmF3U3VyZmFjZS0+UmVsZWFz
ZSgpOwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAg
ICAgRVJSKCJCbGl0RnJhbWVidWZmZXJBTkdMRSBmYWlsZWQ6IFN0cmV0Y2hSZWN0IHJldHVybmVk
ICV4LiIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAoYmxpdERlcHRoU3RlbmNpbCkKLSAgICB7Ci0gICAgICAgIGdsOjpSZW5k
ZXJidWZmZXIgKnJlYWRCdWZmZXIgPSByZWFkRnJhbWVidWZmZXItPmdldERlcHRoT3JTdGVuY2ls
YnVmZmVyKCk7Ci0gICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmRyYXdCdWZmZXIgPSBkcmF3RnJh
bWVidWZmZXItPmdldERlcHRoT3JTdGVuY2lsYnVmZmVyKCk7Ci0gICAgICAgIFJlbmRlclRhcmdl
dDkgKnJlYWREZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgICAgICBSZW5kZXJUYXJnZXQ5ICpkcmF3
RGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkqIHJlYWRTdXJm
YWNlID0gTlVMTDsKLSAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkqIGRyYXdTdXJmYWNlID0gTlVM
TDsKLQotICAgICAgICBpZiAocmVhZEJ1ZmZlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmVh
ZERlcHRoU3RlbmNpbCA9IFJlbmRlclRhcmdldDk6Om1ha2VSZW5kZXJUYXJnZXQ5KHJlYWRCdWZm
ZXItPmdldERlcHRoU3RlbmNpbCgpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZHJhd0J1ZmZl
cikKLSAgICAgICAgewotICAgICAgICAgICAgZHJhd0RlcHRoU3RlbmNpbCA9IFJlbmRlclRhcmdl
dDk6Om1ha2VSZW5kZXJUYXJnZXQ5KGRyYXdCdWZmZXItPmdldERlcHRoU3RlbmNpbCgpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChyZWFkRGVwdGhTdGVuY2lsKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZWFkU3VyZmFjZSA9IHJlYWREZXB0aFN0ZW5jaWwtPmdldFN1cmZhY2UoKTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoZHJhd0RlcHRoU3RlbmNpbCkKLSAgICAgICAgewotICAgICAg
ICAgICAgZHJhd1N1cmZhY2UgPSBkcmF3RGVwdGhTdGVuY2lsLT5nZXRTdXJmYWNlKCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoIXJlYWRTdXJmYWNlIHx8ICFkcmF3U3VyZmFjZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJn
ZXQuIik7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZh
bHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+U3Ry
ZXRjaFJlY3QocmVhZFN1cmZhY2UsIE5VTEwsIGRyYXdTdXJmYWNlLCBOVUxMLCBEM0RURVhGX05P
TkUpOwotCi0gICAgICAgIHJlYWRTdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgICAgIGRyYXdTdXJm
YWNlLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBFUlIoIkJsaXRGcmFtZWJ1ZmZlckFOR0xFIGZhaWxlZDogU3RyZXRjaFJl
Y3QgcmV0dXJuZWQgJXguIiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFJlbmRlcmVyOTo6
cmVhZFBpeGVscyhnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBHTGludCB4LCBHTGludCB5
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBvdXRwdXRQaXRjaCwgYm9v
bCBwYWNrUmV2ZXJzZVJvd09yZGVyLCBHTGludCBwYWNrQWxpZ25tZW50LCB2b2lkKiBwaXhlbHMp
Ci17Ci0gICAgUmVuZGVyVGFyZ2V0OSAqcmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqc3VyZmFjZSA9IE5VTEw7Ci0gICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3Ji
dWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoMCk7Ci0KLSAgICBpZiAoY29sb3Ji
dWZmZXIpCi0gICAgewotICAgICAgICByZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQ5OjptYWtl
UmVuZGVyVGFyZ2V0OShjb2xvcmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOwotICAgIH0KLSAg
ICAKLSAgICBpZiAocmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgc3VyZmFjZSA9IHJlbmRl
clRhcmdldC0+Z2V0U3VyZmFjZSgpOwotICAgIH0KLQotICAgIGlmICghc3VyZmFjZSkKLSAgICB7
Ci0gICAgICAgIC8vIGNvbnRleHQgbXVzdCBiZSBsb3N0Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKLSAgICBzdXJmYWNlLT5HZXREZXNjKCZkZXNj
KTsKLQotICAgIGlmIChkZXNjLk11bHRpU2FtcGxlVHlwZSAhPSBEM0RNVUxUSVNBTVBMRV9OT05F
KQotICAgIHsKLSAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FOiBSZXF1aXJlcyBy
ZXNvbHZlIHVzaW5nIFN0cmV0Y2hSZWN0IGludG8gbm9uLW11bHRpc2FtcGxlZCByZW5kZXIgdGFy
Z2V0Ci0gICAgICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICBIUkVTVUxUIHJlc3VsdDsKLSAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqc3lzdGVtU3VyZmFjZSA9IE5VTEw7Ci0gICAgYm9vbCBkaXJlY3RU
b1BpeGVscyA9ICFwYWNrUmV2ZXJzZVJvd09yZGVyICYmIHBhY2tBbGlnbm1lbnQgPD0gNCAmJiBn
ZXRTaGFyZUhhbmRsZVN1cHBvcnQoKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICB4ID09
IDAgJiYgeSA9PSAwICYmIFVJTlQod2lkdGgpID09IGRlc2MuV2lkdGggJiYgVUlOVChoZWlnaHQp
ID09IGRlc2MuSGVpZ2h0ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MuRm9ybWF0
ID09IEQzREZNVF9BOFI4RzhCOCAmJiBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYgdHlwZSA9PSBH
TF9VTlNJR05FRF9CWVRFOwotICAgIGlmIChkaXJlY3RUb1BpeGVscykKLSAgICB7Ci0gICAgICAg
IC8vIFVzZSB0aGUgcGl4ZWxzIHB0ciBhcyBhIHNoYXJlZCBoYW5kbGUgdG8gd3JpdGUgZGlyZWN0
bHkgaW50byBjbGllbnQncyBtZW1vcnkKLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRl
T2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBkZXNjLkZvcm1h
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEQzRFBPT0xfU1lTVEVNTUVNLCAmc3lzdGVtU3VyZmFjZSwgJnBpeGVscyk7Ci0gICAgICAgIGlm
IChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gVHJ5IGFnYWluIHdp
dGhvdXQgdGhlIHNoYXJlZCBoYW5kbGUKLSAgICAgICAgICAgIGRpcmVjdFRvUGl4ZWxzID0gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWRpcmVjdFRvUGl4ZWxzKQotICAgIHsK
LSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRl
c2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBkZXNjLkZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFBPT0xfU1lTVEVNTUVNLCAmc3lz
dGVtU3VyZmFjZSwgTlVMTCk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAg
ewotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8
fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgICAgICBzdXJmYWNlLT5SZWxlYXNl
KCk7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gbURldmljZS0+R2V0UmVuZGVyVGFyZ2V0RGF0
YShzdXJmYWNlLCBzeXN0ZW1TdXJmYWNlKTsKLSAgICBzdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAg
c3VyZmFjZSA9IE5VTEw7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAg
ICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgLy8gSXQgdHVybnMgb3V0IHRo
YXQgRDNEIHdpbGwgc29tZXRpbWVzIHByb2R1Y2UgbW9yZSBlcnJvcgotICAgICAgICAvLyBjb2Rl
cyB0aGFuIHRob3NlIGRvY3VtZW50ZWQuCi0gICAgICAgIGlmIChkM2Q5Ojppc0RldmljZUxvc3RF
cnJvcihyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBub3RpZnlEZXZpY2VMb3N0KCk7
Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgfQotCi0gICAgaWYgKGRpcmVj
dFRvUGl4ZWxzKQotICAgIHsKLSAgICAgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUkVDVCByZWN0OwotICAgIHJlY3QubGVmdCA9IGds
OjpjbGFtcCh4LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVzYy5XaWR0aCkpOwotICAgIHJlY3Qu
dG9wID0gZ2w6OmNsYW1wKHksIDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNjLkhlaWdodCkpOwot
ICAgIHJlY3QucmlnaHQgPSBnbDo6Y2xhbXAoeCArIHdpZHRoLCAwTCwgc3RhdGljX2Nhc3Q8TE9O
Rz4oZGVzYy5XaWR0aCkpOwotICAgIHJlY3QuYm90dG9tID0gZ2w6OmNsYW1wKHkgKyBoZWlnaHQs
IDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNjLkhlaWdodCkpOwotCi0gICAgRDNETE9DS0VEX1JF
Q1QgbG9jazsKLSAgICByZXN1bHQgPSBzeXN0ZW1TdXJmYWNlLT5Mb2NrUmVjdCgmbG9jaywgJnJl
Y3QsIEQzRExPQ0tfUkVBRE9OTFkpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsK
LSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgp
OwotCi0gICAgICAgIHJldHVybjsgICAvLyBObyBzZW5zaWJsZSBlcnJvciB0byBnZW5lcmF0ZQot
ICAgIH0KLQotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSAodW5zaWduZWQgY2hhciopcGl4ZWxz
OwotICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0MTYgPSAodW5zaWduZWQgc2hvcnQqKXBpeGVsczsK
LQotICAgIHVuc2lnbmVkIGNoYXIgKnNvdXJjZTsKLSAgICBpbnQgaW5wdXRQaXRjaDsKLSAgICBp
ZiAocGFja1JldmVyc2VSb3dPcmRlcikKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9ICgodW5zaWdu
ZWQgY2hhciopbG9jay5wQml0cykgKyBsb2NrLlBpdGNoICogKHJlY3QuYm90dG9tIC0gcmVjdC50
b3AgLSAxKTsKLSAgICAgICAgaW5wdXRQaXRjaCA9IC1sb2NrLlBpdGNoOwotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICBzb3VyY2UgPSAodW5zaWduZWQgY2hhciopbG9jay5wQml0czsK
LSAgICAgICAgaW5wdXRQaXRjaCA9IGxvY2suUGl0Y2g7Ci0gICAgfQotCi0gICAgdW5zaWduZWQg
aW50IGZhc3RQaXhlbFNpemUgPSAwOwotCi0gICAgaWYgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9B
OFI4RzhCOCAmJgotICAgICAgICBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYKLSAgICAgICAgdHlw
ZSA9PSBHTF9VTlNJR05FRF9CWVRFKQotICAgIHsKLSAgICAgICAgZmFzdFBpeGVsU2l6ZSA9IDQ7
Ci0gICAgfQotICAgIGVsc2UgaWYgKChkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQTRSNEc0QjQgJiYK
LSAgICAgICAgICAgICBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYKLSAgICAgICAgICAgICB0eXBl
ID09IEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVCkgfHwKLSAgICAgICAgICAgICAo
ZGVzYy5Gb3JtYXQgPT0gRDNERk1UX0ExUjVHNUI1ICYmCi0gICAgICAgICAgICAgZm9ybWF0ID09
IEdMX0JHUkFfRVhUICYmCi0gICAgICAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9TSE9SVF8x
XzVfNV81X1JFVl9FWFQpKQotICAgIHsKLSAgICAgICAgZmFzdFBpeGVsU2l6ZSA9IDI7Ci0gICAg
fQotICAgIGVsc2UgaWYgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BMTZCMTZHMTZSMTZGICYmCi0g
ICAgICAgICAgICAgZm9ybWF0ID09IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICB0eXBlID09IEdM
X0hBTEZfRkxPQVRfT0VTKQotICAgIHsKLSAgICAgICAgZmFzdFBpeGVsU2l6ZSA9IDg7Ci0gICAg
fQotICAgIGVsc2UgaWYgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BMzJCMzJHMzJSMzJGICYmCi0g
ICAgICAgICAgICAgZm9ybWF0ID09IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICB0eXBlID09IEdM
X0ZMT0FUKQotICAgIHsKLSAgICAgICAgZmFzdFBpeGVsU2l6ZSA9IDE2OwotICAgIH0KLQotICAg
IGZvciAoaW50IGogPSAwOyBqIDwgcmVjdC5ib3R0b20gLSByZWN0LnRvcDsgaisrKQotICAgIHsK
LSAgICAgICAgaWYgKGZhc3RQaXhlbFNpemUgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAg
Ly8gRmFzdCBwYXRoIGZvciBmb3JtYXRzIHdoaWNoIHJlcXVpcmUgbm8gdHJhbnNsYXRpb246Ci0g
ICAgICAgICAgICAvLyBEM0RGTVRfQThSOEc4QjggdG8gQkdSQS9VTlNJR05FRF9CWVRFCi0gICAg
ICAgICAgICAvLyBEM0RGTVRfQTRSNEc0QjQgdG8gQkdSQS9VTlNJR05FRF9TSE9SVF80XzRfNF80
X1JFVl9FWFQKLSAgICAgICAgICAgIC8vIEQzREZNVF9BMVI1RzVCNSB0byBCR1JBL1VOU0lHTkVE
X1NIT1JUXzFfNV81XzVfUkVWX0VYVAotICAgICAgICAgICAgLy8gRDNERk1UX0ExNkIxNkcxNlIx
NkYgdG8gUkdCQS9IQUxGX0ZMT0FUX09FUwotICAgICAgICAgICAgLy8gRDNERk1UX0EzMkIzMkcz
MlIzMkYgdG8gUkdCQS9GTE9BVAotICAgICAgICAgICAgLy8gCi0gICAgICAgICAgICAvLyBOb3Rl
IHRoYXQgYnVmZmVycyB3aXRoIG5vIGFscGhhIGdvIHRocm91Z2ggdGhlIHNsb3cgcGF0aCBiZWxv
dy4KLSAgICAgICAgICAgIG1lbWNweShkZXN0ICsgaiAqIG91dHB1dFBpdGNoLAotICAgICAgICAg
ICAgICAgICAgIHNvdXJjZSArIGogKiBpbnB1dFBpdGNoLAotICAgICAgICAgICAgICAgICAgIChy
ZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0KSAqIGZhc3RQaXhlbFNpemUpOwotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoZGVzYy5Gb3JtYXQgPT0gRDNERk1U
X0E4UjhHOEI4ICYmCi0gICAgICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9SR0JBICYmCi0gICAg
ICAgICAgICAgICAgIHR5cGUgPT0gR0xfVU5TSUdORURfQllURSkKLSAgICAgICAgewotICAgICAg
ICAgICAgLy8gRmFzdCBwYXRoIGZvciBzd2FwcGluZyByZWQgd2l0aCBibHVlCi0gICAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3QucmlnaHQgLSByZWN0LmxlZnQ7IGkrKykKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQg
aW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7Ci0gICAgICAgICAgICAgICAg
Kih1bnNpZ25lZCBpbnQqKShkZXN0ICsgNCAqIGkgKyBqICogb3V0cHV0UGl0Y2gpID0KLSAgICAg
ICAgICAgICAgICAgICAgKGFyZ2IgJiAweEZGMDBGRjAwKSB8ICAgICAgIC8vIEtlZXAgYWxwaGEg
YW5kIGdyZWVuCi0gICAgICAgICAgICAgICAgICAgIChhcmdiICYgMHgwMEZGMDAwMCkgPj4gMTYg
fCAvLyBNb3ZlIHJlZCB0byBibHVlCi0gICAgICAgICAgICAgICAgICAgIChhcmdiICYgMHgwMDAw
MDBGRikgPDwgMTY7ICAvLyBNb3ZlIGJsdWUgdG8gcmVkCi0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
cmVjdC5yaWdodCAtIHJlY3QubGVmdDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBmbG9h
dCByOwotICAgICAgICAgICAgZmxvYXQgZzsKLSAgICAgICAgICAgIGZsb2F0IGI7Ci0gICAgICAg
ICAgICBmbG9hdCBhOwotCi0gICAgICAgICAgICBzd2l0Y2ggKGRlc2MuRm9ybWF0KQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6Ci0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2IgPSAqKHVuc2lnbmVk
IHNob3J0Kikoc291cmNlICsgMiAqIGkgKyBqICogaW5wdXRQaXRjaCk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgYSA9IDEuMGY7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAocmdiICYgMHgwMDFG
KSAqICgxLjBmIC8gMHgwMDFGKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IChyZ2IgJiAweDA3
RTApICogKDEuMGYgLyAweDA3RTApOwotICAgICAgICAgICAgICAgICAgICByID0gKHJnYiAmIDB4
RjgwMCkgKiAoMS4wZiAvIDB4RjgwMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGFyZ2IgPSAqKHVu
c2lnbmVkIHNob3J0Kikoc291cmNlICsgMiAqIGkgKyBqICogaW5wdXRQaXRjaCk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgYSA9IChhcmdiICYgMHg4MDAwKSA/IDEuMGYgOiAwLjBmOwotICAgICAg
ICAgICAgICAgICAgICBiID0gKGFyZ2IgJiAweDAwMUYpICogKDEuMGYgLyAweDAwMUYpOwotICAg
ICAgICAgICAgICAgICAgICBnID0gKGFyZ2IgJiAweDAzRTApICogKDEuMGYgLyAweDAzRTApOwot
ICAgICAgICAgICAgICAgICAgICByID0gKGFyZ2IgJiAweDdDMDApICogKDEuMGYgLyAweDdDMDAp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAq
IGkgKyBqICogaW5wdXRQaXRjaCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYSA9IChhcmdiICYg
MHhGRjAwMDAwMCkgKiAoMS4wZiAvIDB4RkYwMDAwMDApOwotICAgICAgICAgICAgICAgICAgICBi
ID0gKGFyZ2IgJiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBGRik7Ci0gICAgICAgICAg
ICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAweDAwMDBGRjAwKTsK
LSAgICAgICAgICAgICAgICAgICAgciA9IChhcmdiICYgMHgwMEZGMDAwMCkgKiAoMS4wZiAvIDB4
MDBGRjAwMDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgeHJnYiA9ICoodW5zaWduZWQgaW50Kikoc291
cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYSA9
IDEuMGY7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAoeHJnYiAmIDB4MDAwMDAwRkYpICogKDEu
MGYgLyAweDAwMDAwMEZGKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9ICh4cmdiICYgMHgwMDAw
RkYwMCkgKiAoMS4wZiAvIDB4MDAwMEZGMDApOwotICAgICAgICAgICAgICAgICAgICByID0gKHhy
Z2IgJiAweDAwRkYwMDAwKSAqICgxLjBmIC8gMHgwMEZGMDAwMCk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMlIx
MEcxMEIxMDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCBhcmdiID0gKih1bnNpZ25lZCBpbnQqKShzb3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBp
dGNoKTsKLQotICAgICAgICAgICAgICAgICAgICBhID0gKGFyZ2IgJiAweEMwMDAwMDAwKSAqICgx
LjBmIC8gMHhDMDAwMDAwMCk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAw
MDAzRkYpICogKDEuMGYgLyAweDAwMDAwM0ZGKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IChh
cmdiICYgMHgwMDBGRkMwMCkgKiAoMS4wZiAvIDB4MDAwRkZDMDApOwotICAgICAgICAgICAgICAg
ICAgICByID0gKGFyZ2IgJiAweDNGRjAwMDAwKSAqICgxLjBmIC8gMHgzRkYwMDAwMCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEQzREZNVF9BMzJCMzJHMzJSMzJGOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gZmxvYXQgZm9ybWF0cyBpbiBEM0QgYXJlIHN0b3JlZCByZ2JhLCByYXRoZXIgdGhh
biB0aGUgb3RoZXIgd2F5IHJvdW5kCi0gICAgICAgICAgICAgICAgICAgIHIgPSAqKChmbG9hdCop
KHNvdXJjZSArIDE2ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDApOwotICAgICAgICAgICAgICAg
ICAgICBnID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAx
KTsKLSAgICAgICAgICAgICAgICAgICAgYiA9ICooKGZsb2F0Kikoc291cmNlICsgMTYgKiBpICsg
aiAqIGlucHV0UGl0Y2gpICsgMik7Ci0gICAgICAgICAgICAgICAgICAgIGEgPSAqKChmbG9hdCop
KHNvdXJjZSArIDE2ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDMpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTE2
QjE2RzE2UjE2RjoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGZs
b2F0IGZvcm1hdHMgaW4gRDNEIGFyZSBzdG9yZWQgcmdiYSwgcmF0aGVyIHRoYW4gdGhlIG90aGVy
IHdheSByb3VuZAotICAgICAgICAgICAgICAgICAgICByID0gZ2w6OmZsb2F0MTZUb0Zsb2F0MzIo
KigodW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyA4ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDAp
KTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCooKHVuc2ln
bmVkIHNob3J0Kikoc291cmNlICsgOCAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAxKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGIgPSBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKCh1bnNpZ25lZCBzaG9y
dCopKHNvdXJjZSArIDggKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMikpOwotICAgICAgICAgICAg
ICAgICAgICBhID0gZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKigodW5zaWduZWQgc2hvcnQqKShzb3Vy
Y2UgKyA4ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDMpKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAgICAgICAgICAgICAgVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNl
IEdMX1JHQkE6Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDBdID0gKHVuc2lnbmVkIGNo
YXIpKDI1NSAqIHIgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGog
KiBvdXRwdXRQaXRjaCArIDFdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGcgKyAwLjVmKTsKLSAg
ICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDJdID0gKHVu
c2lnbmVkIGNoYXIpKDI1NSAqIGIgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFs0
ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDNdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGEgKyAw
LjVmKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgICAgICAgICBz
d2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBH
TF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91
dHB1dFBpdGNoICsgMF0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYiArIDAuNWYpOwotICAgICAg
ICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMV0gPSAodW5zaWdu
ZWQgY2hhcikoMjU1ICogZyArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBp
ICsgaiAqIG91dHB1dFBpdGNoICsgMl0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogciArIDAuNWYp
OwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgM10g
PSAodW5zaWduZWQgY2hhcikoMjU1ICogYSArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9S
RVZfRVhUOgotICAgICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIGRlc2t0b3Ag
R0wgc3BlYyBpbiB0aGUgIlRyYW5zZmVyIG9mIFBpeGVsIFJlY3RhbmdsZXMiIHNlY3Rpb24KLSAg
ICAgICAgICAgICAgICAgICAgLy8gdGhpcyB0eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOgotICAg
ICAgICAgICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAg
IDggICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAgMSAgICAwCi0gICAgICAgICAgICAg
ICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAv
LyB8ICAgICAgIDR0aCAgICAgICAgIHwgICAgICAgIDNyZCAgICAgICAgIHwgICAgICAgIDJuZCAg
ICAgICAgfCAgIDFzdCBjb21wb25lbnQgICB8Ci0gICAgICAgICAgICAgICAgICAgIC8vICAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgY2FzZSBv
ZiBCR1JBX0VYVCwgQiBpcyB0aGUgZmlyc3QgY29tcG9uZW50LCBHIHRoZSBzZWNvbmQsIGFuZCBz
byBmb3J0aC4KLSAgICAgICAgICAgICAgICAgICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2gg
LyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVu
c2lnbmVkIHNob3J0KSgxNSAqIGEgKyAwLjVmKSA8PCAxMil8Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIHIgKyAwLjVmKSA8PCA4KSB8Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIGcgKyAwLjVmKSA8PCA0KSB8Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIGIgKyAwLjVmKSA8
PCAwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVDoKLSAgICAgICAgICAgICAgICAgICAg
Ly8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhlICJUcmFuc2ZlciBvZiBQ
aXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgdHlw
ZSBpcyBwYWNrZWQgYXMgZm9sbG93czoKLSAgICAgICAgICAgICAgICAgICAgLy8gICAxNSAgIDE0
ICAgMTMgICAxMiAgIDExICAgMTAgICAgOSAgICA4ICAgIDcgICAgNiAgICA1ICAgIDQgICAgMyAg
ICAyICAgIDEgICAgMAotICAgICAgICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLSAgICAgICAgICAgICAgICAgICAgLy8gfCA0dGggfCAgICAgICAgICAzcmQgICAgICAg
ICAgIHwgICAgICAgICAgIDJuZCAgICAgICAgICB8ICAgICAgMXN0IGNvbXBvbmVudCAgICAgfAot
ICAgICAgICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAg
ICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgQkdSQV9FWFQsIEIgaXMgdGhlIGZpcnN0IGNv
bXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28gZm9ydGguCi0gICAgICAgICAgICAgICAgICAg
IGRlc3QxNltpICsgaiAqIG91dHB1dFBpdGNoIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KV0gPQot
ICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoICAgICBhICsgMC41Zikg
PDwgMTUpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICog
ciArIDAuNWYpIDw8IDEwKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNo
b3J0KSgzMSAqIGcgKyAwLjVmKSA8PCA1KSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVu
c2lnbmVkIHNob3J0KSgzMSAqIGIgKyAwLjVmKSA8PCAwKTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9SR0I6Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAg
ICAgICAgICAgICAgIGRlc3QxNltpICsgaiAqIG91dHB1dFBpdGNoIC8gc2l6ZW9mKHVuc2lnbmVk
IHNob3J0KV0gPSAKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMx
ICogYiArIDAuNWYpIDw8IDApIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQg
c2hvcnQpKDYzICogZyArIDAuNWYpIDw8IDUpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgo
dW5zaWduZWQgc2hvcnQpKDMxICogciArIDAuNWYpIDw8IDExKTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RbMyAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAwXSA9ICh1bnNp
Z25lZCBjaGFyKSgyNTUgKiByICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbMyAq
IGkgKyBqICogb3V0cHV0UGl0Y2ggKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBnICsgMC41
Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbMyAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAy
XSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBiICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBzeXN0ZW1TdXJmYWNlLT5VbmxvY2tSZWN0KCk7Ci0KLSAgICBzeXN0ZW1TdXJmYWNlLT5SZWxl
YXNlKCk7Ci19Ci0KLVJlbmRlclRhcmdldCAqUmVuZGVyZXI5OjpjcmVhdGVSZW5kZXJUYXJnZXQo
U3dhcENoYWluICpzd2FwQ2hhaW4sIGJvb2wgZGVwdGgpCi17Ci0gICAgU3dhcENoYWluOSAqc3dh
cENoYWluOSA9IFN3YXBDaGFpbjk6Om1ha2VTd2FwQ2hhaW45KHN3YXBDaGFpbik7Ci0gICAgSURp
cmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOwotICAgIGlmIChkZXB0aCkKLSAgICB7Ci0g
ICAgICAgIHN1cmZhY2UgPSBzd2FwQ2hhaW45LT5nZXREZXB0aFN0ZW5jaWwoKTsKLSAgICB9Ci0g
ICAgZWxzZQotICAgIHsKLSAgICAgICAgc3VyZmFjZSA9IHN3YXBDaGFpbjktPmdldFJlbmRlclRh
cmdldCgpOwotICAgIH0KLQotICAgIFJlbmRlclRhcmdldDkgKnJlbmRlclRhcmdldCA9IG5ldyBS
ZW5kZXJUYXJnZXQ5KHRoaXMsIHN1cmZhY2UpOwotCi0gICAgcmV0dXJuIHJlbmRlclRhcmdldDsK
LX0KLQotUmVuZGVyVGFyZ2V0ICpSZW5kZXJlcjk6OmNyZWF0ZVJlbmRlclRhcmdldChpbnQgd2lk
dGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcywgYm9vbCBkZXB0
aCkKLXsKLSAgICBSZW5kZXJUYXJnZXQ5ICpyZW5kZXJUYXJnZXQgPSBuZXcgUmVuZGVyVGFyZ2V0
OSh0aGlzLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHNhbXBsZXMpOwotICAgIHJldHVybiByZW5k
ZXJUYXJnZXQ7Ci19Ci0KLVNoYWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyOTo6bG9hZEV4ZWN1dGFi
bGUoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5
cGUpCi17Ci0gICAgU2hhZGVyRXhlY3V0YWJsZTkgKmV4ZWN1dGFibGUgPSBOVUxMOwotCi0gICAg
c3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2Ugcng6OlNIQURFUl9WRVJURVg6Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKnZzaGFkZXIgPSBjcmVh
dGVWZXJ0ZXhTaGFkZXIoKERXT1JEKilmdW5jdGlvbiwgbGVuZ3RoKTsKLSAgICAgICAgICAgIGlm
ICh2c2hhZGVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBu
ZXcgU2hhZGVyRXhlY3V0YWJsZTkoZnVuY3Rpb24sIGxlbmd0aCwgdnNoYWRlcik7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIHJ4OjpTSEFERVJf
UElYRUw6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqcHNo
YWRlciA9IGNyZWF0ZVBpeGVsU2hhZGVyKChEV09SRCopZnVuY3Rpb24sIGxlbmd0aCk7Ci0gICAg
ICAgICAgICBpZiAocHNoYWRlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBleGVj
dXRhYmxlID0gbmV3IFNoYWRlckV4ZWN1dGFibGU5KGZ1bmN0aW9uLCBsZW5ndGgsIHBzaGFkZXIp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVs
dDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGV4ZWN1dGFibGU7Ci19Ci0KLVNoYWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyOTo6Y29t
cGlsZVRvRXhlY3V0YWJsZShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqc2hhZGVy
SExTTCwgcng6OlNoYWRlclR5cGUgdHlwZSwgRDNEV29ya2Fyb3VuZFR5cGUgd29ya2Fyb3VuZCkK
LXsKLSAgICBjb25zdCBjaGFyICpwcm9maWxlID0gTlVMTDsKLQotICAgIHN3aXRjaCAodHlwZSkK
LSAgICB7Ci0gICAgICBjYXNlIHJ4OjpTSEFERVJfVkVSVEVYOgotICAgICAgICBwcm9maWxlID0g
Z2V0TWFqb3JTaGFkZXJNb2RlbCgpID49IDMgPyAidnNfM18wIiA6ICJ2c18yXzAiOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2Ugcng6OlNIQURFUl9QSVhFTDoKLSAgICAgICAgcHJvZmlsZSA9
IGdldE1ham9yU2hhZGVyTW9kZWwoKSA+PSAzID8gInBzXzNfMCIgOiAicHNfMl8wIjsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICAvLyBBTkdMRSBpc3N1ZSA0ODY6Ci0gICAgLy8g
V29yay1hcm91bmQgYSBEM0Q5IGNvbXBpbGVyIGJ1ZyB0aGF0IHByZXNlbnRzIGl0c2VsZiB3aGVu
IHVzaW5nIGNvbmRpdGlvbmFsIGRpc2NhcmQsIGJ5IGRpc2FibGluZyBvcHRpbWl6YXRpb24KLSAg
ICBVSU5UIG9wdGltaXphdGlvbkZsYWdzID0gKHdvcmthcm91bmQgPT0gQU5HTEVfRDNEX1dPUktB
Uk9VTkRfU00zX09QVElNSVpFUiA/IEQzRENPTVBJTEVfU0tJUF9PUFRJTUlaQVRJT04gOiBBTkdM
RV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTCk7Ci0KLSAgICBJRDNEQmxvYiAqYmluYXJ5ID0g
KElEM0RCbG9iKiljb21waWxlVG9CaW5hcnkoaW5mb0xvZywgc2hhZGVySExTTCwgcHJvZmlsZSwg
b3B0aW1pemF0aW9uRmxhZ3MsIHRydWUpOwotICAgIGlmICghYmluYXJ5KQotICAgICAgICByZXR1
cm4gTlVMTDsKLQotICAgIFNoYWRlckV4ZWN1dGFibGUgKmV4ZWN1dGFibGUgPSBsb2FkRXhlY3V0
YWJsZShiaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgYmluYXJ5LT5HZXRCdWZmZXJTaXplKCks
IHR5cGUpOwotICAgIGJpbmFyeS0+UmVsZWFzZSgpOwotCi0gICAgcmV0dXJuIGV4ZWN1dGFibGU7
Ci19Ci0KLWJvb2wgUmVuZGVyZXI5Ojpib3hGaWx0ZXIoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJj
ZSwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpCi17Ci0gICAgcmV0dXJuIG1CbGl0LT5ib3hGaWx0
ZXIoc291cmNlLCBkZXN0KTsKLX0KLQotRDNEUE9PTCBSZW5kZXJlcjk6OmdldFRleHR1cmVQb29s
KERXT1JEIHVzYWdlKSBjb25zdAotewotICAgIGlmIChtRDNkOUV4ICE9IE5VTEwpCi0gICAgewot
ICAgICAgICByZXR1cm4gRDNEUE9PTF9ERUZBVUxUOwotICAgIH0KLSAgICBlbHNlCi0gICAgewot
ICAgICAgICBpZiAoISh1c2FnZSAmIChEM0RVU0FHRV9ERVBUSFNURU5DSUwgfCBEM0RVU0FHRV9S
RU5ERVJUQVJHRVQpKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEQzRFBPT0xfTUFO
QUdFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBEM0RQT09MX0RFRkFVTFQ7Ci19
Ci0KLWJvb2wgUmVuZGVyZXI5Ojpjb3B5VG9SZW5kZXJUYXJnZXQoSURpcmVjdDNEU3VyZmFjZTkg
KmRlc3QsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGJvb2wgZnJvbU1hbmFnZWQpCi17Ci0g
ICAgaWYgKHNvdXJjZSAmJiBkZXN0KQotICAgIHsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBE
M0RFUlJfT1VUT0ZWSURFT01FTU9SWTsKLQotICAgICAgICBpZiAoZnJvbU1hbmFnZWQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOwotICAgICAgICAgICAgc291
cmNlLT5HZXREZXNjKCZkZXNjKTsKLQotICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1
cmYgPSAwOwotICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxh
aW5TdXJmYWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBkZXNjLkZvcm1hdCwgRDNEUE9PTF9T
WVNURU1NRU0sICZzdXJmLCBOVUxMKTsKLQotICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1
bHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEltYWdlOTo6Y29weUxvY2thYmxl
U3VyZmFjZXMoc3VyZiwgc291cmNlKTsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNl
LT5VcGRhdGVTdXJmYWNlKHN1cmYsIE5VTEwsIGRlc3QsIE5VTEwpOwotICAgICAgICAgICAgICAg
IHN1cmYtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNl
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGVuZFNjZW5lKCk7Ci0gICAgICAgICAgICByZXN1bHQg
PSBtRGV2aWNlLT5TdHJldGNoUmVjdChzb3VyY2UsIE5VTEwsIGRlc3QsIE5VTEwsIEQzRFRFWEZf
Tk9ORSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkg
fHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUltYWdlICpSZW5kZXJl
cjk6OmNyZWF0ZUltYWdlKCkKLXsKLSAgICByZXR1cm4gbmV3IEltYWdlOSgpOwotfQotCi12b2lk
IFJlbmRlcmVyOTo6Z2VuZXJhdGVNaXBtYXAoSW1hZ2UgKmRlc3QsIEltYWdlICpzcmMpCi17Ci0g
ICAgSW1hZ2U5ICpzcmM5ID0gSW1hZ2U5OjptYWtlSW1hZ2U5KHNyYyk7Ci0gICAgSW1hZ2U5ICpk
c3Q5ID0gSW1hZ2U5OjptYWtlSW1hZ2U5KGRlc3QpOwotICAgIEltYWdlOTo6Z2VuZXJhdGVNaXBt
YXAoZHN0OSwgc3JjOSk7Ci19Ci0KLVRleHR1cmVTdG9yYWdlICpSZW5kZXJlcjk6OmNyZWF0ZVRl
eHR1cmVTdG9yYWdlMkQoU3dhcENoYWluICpzd2FwQ2hhaW4pCi17Ci0gICAgU3dhcENoYWluOSAq
c3dhcENoYWluOSA9IFN3YXBDaGFpbjk6Om1ha2VTd2FwQ2hhaW45KHN3YXBDaGFpbik7Ci0gICAg
cmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTlfMkQodGhpcywgc3dhcENoYWluOSk7Ci19Ci0KLVRl
eHR1cmVTdG9yYWdlICpSZW5kZXJlcjk6OmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVs
cywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJh
YmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICByZXR1cm4gbmV3IFRl
eHR1cmVTdG9yYWdlOV8yRCh0aGlzLCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB1c2FnZSwgZm9y
Y2VSZW5kZXJhYmxlLCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotVGV4dHVyZVN0b3JhZ2UgKlJlbmRl
cmVyOTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpCi17
Ci0gICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTlfQ3ViZSh0aGlzLCBsZXZlbHMsIGludGVy
bmFsZm9ybWF0LCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlLCBzaXplKTsKLX0KLQotYm9vbCBSZW5k
ZXJlcjk6OmdldExVSUQoTFVJRCAqYWRhcHRlckx1aWQpIGNvbnN0Ci17Ci0gICAgYWRhcHRlckx1
aWQtPkhpZ2hQYXJ0ID0gMDsKLSAgICBhZGFwdGVyTHVpZC0+TG93UGFydCA9IDA7Ci0KLSAgICBp
ZiAobUQzZDlFeCkKLSAgICB7Ci0gICAgICAgIG1EM2Q5RXgtPkdldEFkYXB0ZXJMVUlEKG1BZGFw
dGVyLCBhZGFwdGVyTHVpZCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlcjkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXI5LmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGFmYzJkYzFkNTNlNGMwMzg0ZThjYmY5MDUwMmIwM2YwNjE3MjgxODIuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlcjkuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDM1MCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBSZW5kZXJlcjku
aDogRGVmaW5lcyBhIGJhY2stZW5kIHNwZWNpZmljIGNsYXNzIGZvciB0aGUgRDNEOSByZW5kZXJl
ci4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSRVI5X0hfCi0jZGVmaW5lIExJ
QkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjlfSF8KLQotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0
aWxzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL1NoYWRlckNhY2hlLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L1ZlcnRleERlY2xhcmF0aW9uQ2FjaGUuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
UmVuZGVyZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0Lmgi
Ci0KLW5hbWVzcGFjZSBnbAotewotY2xhc3MgUmVuZGVyYnVmZmVyOwotfQotCi1uYW1lc3BhY2Ug
cngKLXsKLWNsYXNzIFZlcnRleERhdGFNYW5hZ2VyOwotY2xhc3MgSW5kZXhEYXRhTWFuYWdlcjsK
LWNsYXNzIFN0cmVhbWluZ0luZGV4QnVmZmVySW50ZXJmYWNlOwotc3RydWN0IFRyYW5zbGF0ZWRB
dHRyaWJ1dGU7Ci0KLWNsYXNzIFJlbmRlcmVyOSA6IHB1YmxpYyBSZW5kZXJlcgotewotICBwdWJs
aWM6Ci0gICAgUmVuZGVyZXI5KGVnbDo6RGlzcGxheSAqZGlzcGxheSwgSERDIGhEYywgYm9vbCBz
b2Z0d2FyZURldmljZSk7Ci0gICAgdmlydHVhbCB+UmVuZGVyZXI5KCk7Ci0KLSAgICBzdGF0aWMg
UmVuZGVyZXI5ICptYWtlUmVuZGVyZXI5KFJlbmRlcmVyICpyZW5kZXJlcik7Ci0KLSAgICB2aXJ0
dWFsIEVHTGludCBpbml0aWFsaXplKCk7Ci0gICAgdmlydHVhbCBib29sIHJlc2V0RGV2aWNlKCk7
Ci0KLSAgICB2aXJ0dWFsIGludCBnZW5lcmF0ZUNvbmZpZ3MoQ29uZmlnRGVzYyAqKmNvbmZpZ0Rl
c2NMaXN0KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQ29uZmlncyhDb25maWdEZXNjICpjb25m
aWdEZXNjTGlzdCk7Ci0KLSAgICB2b2lkIHN0YXJ0U2NlbmUoKTsKLSAgICB2b2lkIGVuZFNjZW5l
KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3luYyhib29sIGJsb2NrKTsKLQotICAgIHZpcnR1YWwg
U3dhcENoYWluICpjcmVhdGVTd2FwQ2hhaW4oSFdORCB3aW5kb3csIEhBTkRMRSBzaGFyZUhhbmRs
ZSwgR0xlbnVtIGJhY2tCdWZmZXJGb3JtYXQsIEdMZW51bSBkZXB0aEJ1ZmZlckZvcm1hdCk7Ci0K
LSAgICBJRGlyZWN0M0RRdWVyeTkqIGFsbG9jYXRlRXZlbnRRdWVyeSgpOwotICAgIHZvaWQgZnJl
ZUV2ZW50UXVlcnkoSURpcmVjdDNEUXVlcnk5KiBxdWVyeSk7Ci0KLSAgICAvLyByZXNvdXJjZSBj
cmVhdGlvbgotICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKmNyZWF0ZVZlcnRleFNoYWRlcihj
b25zdCBEV09SRCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgpOwotICAgIElEaXJlY3QzRFBpeGVs
U2hhZGVyOSAqY3JlYXRlUGl4ZWxTaGFkZXIoY29uc3QgRFdPUkQgKmZ1bmN0aW9uLCBzaXplX3Qg
bGVuZ3RoKTsKLSAgICBIUkVTVUxUIGNyZWF0ZVZlcnRleEJ1ZmZlcihVSU5UIExlbmd0aCwgRFdP
UkQgVXNhZ2UsIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKipwcFZlcnRleEJ1ZmZlcik7Ci0gICAg
SFJFU1VMVCBjcmVhdGVJbmRleEJ1ZmZlcihVSU5UIExlbmd0aCwgRFdPUkQgVXNhZ2UsIEQzREZP
Uk1BVCBGb3JtYXQsIElEaXJlY3QzREluZGV4QnVmZmVyOSAqKnBwSW5kZXhCdWZmZXIpOwotI2lm
IDAKLSAgICB2b2lkICpjcmVhdGVUZXh0dXJlMkQoKTsKLSAgICB2b2lkICpjcmVhdGVUZXh0dXJl
Q3ViZSgpOwotICAgIHZvaWQgKmNyZWF0ZVF1ZXJ5KCk7Ci0gICAgdm9pZCAqY3JlYXRlSW5kZXhC
dWZmZXIoKTsKLSAgICB2b2lkICpjcmVhdGVWZXJ0ZXhidWZmZXIoKTsKLQotICAgIC8vIHN0YXRl
IHNldHVwCi0gICAgdm9pZCBhcHBseVNoYWRlcnMoKTsKLSAgICB2b2lkIGFwcGx5Q29uc3RhbnRz
KCk7Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2FtcGxlclN0YXRlKGdsOjpTYW1wbGVy
VHlwZSB0eXBlLCBpbnQgaW5kZXgsIGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXIpOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5k
ZXgsIGdsOjpUZXh0dXJlICp0ZXh0dXJlKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRSYXN0ZXJp
emVyU3RhdGUoY29uc3QgZ2w6OlJhc3Rlcml6ZXJTdGF0ZSAmcmFzdGVyU3RhdGUpOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRCbGVuZFN0YXRlKGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRl
LCBjb25zdCBnbDo6Q29sb3IgJmJsZW5kQ29sb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IHNhbXBsZU1hc2spOwotICAgIHZpcnR1YWwgdm9pZCBzZXREZXB0
aFN0ZW5jaWxTdGF0ZShjb25zdCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmRlcHRoU3RlbmNpbFN0
YXRlLCBpbnQgc3RlbmNpbFJlZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IHN0ZW5jaWxCYWNrUmVmLCBib29sIGZyb250RmFjZUNDVyk7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgc2V0U2Npc3NvclJlY3RhbmdsZShjb25zdCBnbDo6UmVjdGFuZ2xlICZzY2lzc29yLCBi
b29sIGVuYWJsZWQpOwotICAgIHZpcnR1YWwgYm9vbCBzZXRWaWV3cG9ydChjb25zdCBnbDo6UmVj
dGFuZ2xlICZ2aWV3cG9ydCwgZmxvYXQgek5lYXIsIGZsb2F0IHpGYXIsIEdMZW51bSBkcmF3TW9k
ZSwgR0xlbnVtIGZyb250RmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBp
Z25vcmVWaWV3cG9ydCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZW5kZXJUYXJnZXQoZ2w6
OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcik7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5U2hhZGVy
cyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSk7Ci0gICAgdmlydHVhbCB2b2lkIGFw
cGx5VW5pZm9ybXMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGdsOjpVbmlmb3Jt
QXJyYXkgKnVuaWZvcm1BcnJheSk7Ci0gICAgdmlydHVhbCBib29sIGFwcGx5UHJpbWl0aXZlVHlw
ZShHTGVudW0gcHJpbWl0aXZlVHlwZSwgR0xzaXplaSBlbGVtZW50Q291bnQpOwotICAgIHZpcnR1
YWwgR0xlbnVtIGFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5LCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0ZXNbXSwgR0xpbnQgZmlyc3Qs
IEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKLSAgICB2aXJ0dWFsIEdMZW51bSBh
cHBseUluZGV4QnVmZmVyKGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgZ2w6OkJ1ZmZlciAqZWxlbWVu
dEFycmF5QnVmZmVyLCBHTHNpemVpIGNvdW50LCBHTGVudW0gbW9kZSwgR0xlbnVtIHR5cGUsIFRy
YW5zbGF0ZWRJbmRleERhdGEgKmluZGV4SW5mbyk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0Fy
cmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpOwotICAg
IHZpcnR1YWwgdm9pZCBkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdM
ZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJh
eUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvLCBHTHNpemVpIGlu
c3RhbmNlcyk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyYW1l
dGVycyAmY2xlYXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpOwotCi0gICAg
dmlydHVhbCB2b2lkIG1hcmtBbGxTdGF0ZURpcnR5KCk7Ci0KLSAgICAvLyBsb3N0IGRldmljZQot
ICAgIHZvaWQgbm90aWZ5RGV2aWNlTG9zdCgpOwotICAgIHZpcnR1YWwgYm9vbCBpc0RldmljZUxv
c3QoKTsKLSAgICB2aXJ0dWFsIGJvb2wgdGVzdERldmljZUxvc3QoYm9vbCBub3RpZnkpOwotICAg
IHZpcnR1YWwgYm9vbCB0ZXN0RGV2aWNlUmVzZXR0YWJsZSgpOwotCi0gICAgLy8gUmVuZGVyZXIg
Y2FwYWJpbGl0aWVzCi0gICAgSURpcmVjdDNERGV2aWNlOSAqZ2V0RGV2aWNlKCkgeyByZXR1cm4g
bURldmljZTsgfQotICAgIHZpcnR1YWwgRFdPUkQgZ2V0QWRhcHRlclZlbmRvcigpIGNvbnN0Owot
ICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgZ2V0UmVuZGVyZXJEZXNjcmlwdGlvbigpIGNvbnN0Owot
ICAgIHZpcnR1YWwgR1VJRCBnZXRBZGFwdGVySWRlbnRpZmllcigpIGNvbnN0OwotCi0gICAgdmly
dHVhbCBib29sIGdldEJHUkFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9v
bCBnZXREWFQxVGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUM1RleHR1
cmVTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldERYVDVUZXh0dXJlU3VwcG9ydCgpOwot
ICAgIHZpcnR1YWwgYm9vbCBnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpOwotICAgIHZpcnR1YWwgYm9v
bCBnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJh
YmxlKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KGJvb2wgKmZp
bHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSk7Ci0gICAgdmlydHVhbCBib29sIGdldEx1bWluYW5j
ZVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZUFscGhhVGV4
dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhUZXh0
dXJlSW1hZ2VVbml0cygpIGNvbnN0OwotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heENv
bWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGlu
dCBnZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1
bnNpZ25lZCBpbnQgZ2V0UmVzZXJ2ZWRGcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhGcmFnbWVudFVuaWZvcm1WZWN0b3Jz
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmFyeWluZ1ZlY3RvcnMo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgYm9vbCBnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIGJvb2wgZ2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJv
b2wgZ2V0VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBmbG9hdCBnZXRUZXh0dXJlTWF4QW5pc290cm9weSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9v
bCBnZXRTaGFyZUhhbmRsZVN1cHBvcnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVy
aXZhdGl2ZUluc3RydWN0aW9uU3VwcG9ydCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBnZXRQ
b3N0U3ViQnVmZmVyU3VwcG9ydCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBpbnQgZ2V0TWFqb3JT
aGFkZXJNb2RlbCgpIGNvbnN0OwotICAgIHZpcnR1YWwgZmxvYXQgZ2V0TWF4UG9pbnRTaXplKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgZ2V0TWF4Vmlld3BvcnREaW1lbnNpb24oKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGludCBnZXRNYXhUZXh0dXJlV2lkdGgoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGludCBnZXRNYXhUZXh0dXJlSGVpZ2h0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdldDMy
Qml0SW5kZXhTdXBwb3J0KCkgY29uc3Q7Ci0gICAgRFdPUkQgZ2V0Q2Fwc0RlY2xUeXBlcygpIGNv
bnN0OwotICAgIHZpcnR1YWwgaW50IGdldE1pblN3YXBJbnRlcnZhbCgpIGNvbnN0OwotICAgIHZp
cnR1YWwgaW50IGdldE1heFN3YXBJbnRlcnZhbCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBHTHNp
emVpIGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSBjb25zdDsKLSAgICBpbnQgZ2V0TmVhcmVzdFN1
cHBvcnRlZFNhbXBsZXMoRDNERk9STUFUIGZvcm1hdCwgaW50IHJlcXVlc3RlZCkgY29uc3Q7Ci0g
ICAgCi0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4UmVuZGVyVGFyZ2V0cygpIGNvbnN0
OwotCi0gICAgRDNERk9STUFUIENvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoR0xpbnQgaW50
ZXJuYWxmb3JtYXQpOwotCi0gICAgLy8gUGl4ZWwgb3BlcmF0aW9ucwotICAgIHZpcnR1YWwgYm9v
bCBjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqZGVzdCwgVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc291cmNlKTsKLSAgICB2aXJ0dWFsIGJvb2wgY29weVRv
UmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqZGVzdCwgVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2VDdWJlICpzb3VyY2UpOwotCi0gICAgdmlydHVhbCBib29sIGNvcHlJbWFn
ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3Vy
Y2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0
b3JhZ2UsIEdMaW50IGxldmVsKTsKLSAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdlKGdsOjpGcmFt
ZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdM
ZW51bSBkZXN0Rm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYmxpdFJlY3Qo
Z2w6OkZyYW1lYnVmZmVyICpyZWFkVGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFkUmVj
dCwgZ2w6OkZyYW1lYnVmZmVyICpkcmF3VGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkcmF3
UmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0LCBi
b29sIGJsaXREZXB0aFN0ZW5jaWwpOwotICAgIHZpcnR1YWwgdm9pZCByZWFkUGl4ZWxzKGdsOjpG
cmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTHNpemVpIG91dHB1dFBpdGNoLCBib29sIHBhY2tSZXZlcnNlUm93
T3JkZXIsIEdMaW50IHBhY2tBbGlnbm1lbnQsIHZvaWQqIHBpeGVscyk7Ci0KLSAgICAvLyBSZW5k
ZXJUYXJnZXQgY3JlYXRpb24KLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqY3JlYXRlUmVuZGVy
VGFyZ2V0KFN3YXBDaGFpbiAqc3dhcENoYWluLCBib29sIGRlcHRoKTsKLSAgICB2aXJ0dWFsIFJl
bmRlclRhcmdldCAqY3JlYXRlUmVuZGVyVGFyZ2V0KGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xl
bnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzLCBib29sIGRlcHRoKTsKLQotICAgIC8vIFNoYWRl
ciBvcGVyYXRpb25zCi0gICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpsb2FkRXhlY3V0YWJs
ZShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgcng6OlNoYWRlclR5cGUgdHlw
ZSk7Ci0gICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpjb21waWxlVG9FeGVjdXRhYmxlKGds
OjpJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpzaGFkZXJITFNMLCByeDo6U2hhZGVyVHlw
ZSB0eXBlLCBEM0RXb3JrYXJvdW5kVHlwZSB3b3JrYXJvdW5kKTsKLQotICAgIC8vIEltYWdlIG9w
ZXJhdGlvbnMKLSAgICB2aXJ0dWFsIEltYWdlICpjcmVhdGVJbWFnZSgpOwotICAgIHZpcnR1YWwg
dm9pZCBnZW5lcmF0ZU1pcG1hcChJbWFnZSAqZGVzdCwgSW1hZ2UgKnNvdXJjZSk7Ci0gICAgdmly
dHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChTd2FwQ2hhaW4gKnN3
YXBDaGFpbik7Ci0gICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3Jh
Z2UyRChpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9v
bCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICB2
aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUoaW50IGxldmVs
cywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJh
YmxlLCBpbnQgc2l6ZSk7Ci0KLSAgICAvLyBCdWZmZXIgY3JlYXRpb24KLSAgICB2aXJ0dWFsIFZl
cnRleEJ1ZmZlciAqY3JlYXRlVmVydGV4QnVmZmVyKCk7Ci0gICAgdmlydHVhbCBJbmRleEJ1ZmZl
ciAqY3JlYXRlSW5kZXhCdWZmZXIoKTsKLSAgICB2aXJ0dWFsIEJ1ZmZlclN0b3JhZ2UgKmNyZWF0
ZUJ1ZmZlclN0b3JhZ2UoKTsKLQotICAgIC8vIFF1ZXJ5IGFuZCBGZW5jZSBjcmVhdGlvbgotICAg
IHZpcnR1YWwgUXVlcnlJbXBsICpjcmVhdGVRdWVyeShHTGVudW0gdHlwZSk7Ci0gICAgdmlydHVh
bCBGZW5jZUltcGwgKmNyZWF0ZUZlbmNlKCk7Ci0KLSAgICAvLyBEM0Q5LXJlbmRlcmVyIHNwZWNp
ZmljIG1ldGhvZHMKLSAgICBib29sIGJveEZpbHRlcihJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNl
LCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCk7Ci0KLSAgICBEM0RQT09MIGdldFRleHR1cmVQb29s
KERXT1JEIHVzYWdlKSBjb25zdDsKLQotICAgIHZpcnR1YWwgYm9vbCBnZXRMVUlEKExVSUQgKmFk
YXB0ZXJMdWlkKSBjb25zdDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihSZW5kZXJlcjkpOwotCi0gICAgdm9pZCBhcHBseVVuaWZvcm1uZnYoZ2w6OlVuaWZvcm0g
KnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMZmxvYXQgKnYpOwotICAgIHZvaWQgYXBwbHlVbmlmb3Jt
bml2KGdsOjpVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGludCAqdik7Ci0gICAgdm9p
ZCBhcHBseVVuaWZvcm1uYnYoZ2w6OlVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMaW50
ICp2KTsKLQotICAgIHZvaWQgZHJhd0xpbmVMb29wKEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBl
LCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGludCBtaW5JbmRleCwgZ2w6OkJ1ZmZlciAqZWxlbWVu
dEFycmF5QnVmZmVyKTsKLSAgICB2b2lkIGRyYXdJbmRleGVkUG9pbnRzKEdMc2l6ZWkgY291bnQs
IEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRB
cnJheUJ1ZmZlcik7Ci0KLSAgICB2b2lkIGdldE11bHRpU2FtcGxlU3VwcG9ydChEM0RGT1JNQVQg
Zm9ybWF0LCBib29sICptdWx0aVNhbXBsZUFycmF5KTsKLSAgICBib29sIGNvcHlUb1JlbmRlclRh
cmdldChJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwg
Ym9vbCBmcm9tTWFuYWdlZCk7Ci0gICAgZ2w6OlJlbmRlcmJ1ZmZlciAqZ2V0TnVsbENvbG9yYnVm
ZmVyKGdsOjpSZW5kZXJidWZmZXIgKmRlcHRoYnVmZmVyKTsKLQotICAgIEQzRFBPT0wgZ2V0QnVm
ZmVyUG9vbChEV09SRCB1c2FnZSkgY29uc3Q7Ci0KLSAgICBITU9EVUxFIG1EM2Q5TW9kdWxlOwot
ICAgIEhEQyBtRGM7Ci0KLSAgICB2b2lkIGluaXRpYWxpemVEZXZpY2UoKTsKLSAgICBEM0RQUkVT
RU5UX1BBUkFNRVRFUlMgZ2V0RGVmYXVsdFByZXNlbnRQYXJhbWV0ZXJzKCk7Ci0gICAgdm9pZCBy
ZWxlYXNlRGV2aWNlUmVzb3VyY2VzKCk7Ci0KLSAgICBVSU5UIG1BZGFwdGVyOwotICAgIEQzRERF
VlRZUEUgbURldmljZVR5cGU7Ci0gICAgYm9vbCBtU29mdHdhcmVEZXZpY2U7ICAgLy8gRklYTUU6
IERlcHJlY2F0ZQotICAgIElEaXJlY3QzRDkgKm1EM2Q5OyAgLy8gQWx3YXlzIHZhbGlkIGFmdGVy
IHN1Y2Nlc3NmdWwgaW5pdGlhbGl6YXRpb24uCi0gICAgSURpcmVjdDNEOUV4ICptRDNkOUV4OyAg
Ly8gTWlnaHQgYmUgbnVsbCBpZiBEM0Q5RXggaXMgbm90IHN1cHBvcnRlZC4KLSAgICBJRGlyZWN0
M0REZXZpY2U5ICptRGV2aWNlOwotICAgIElEaXJlY3QzRERldmljZTlFeCAqbURldmljZUV4OyAg
Ly8gTWlnaHQgYmUgbnVsbCBpZiBEM0Q5RXggaXMgbm90IHN1cHBvcnRlZC4KLQotICAgIEJsaXQg
Km1CbGl0OwotCi0gICAgSFdORCBtRGV2aWNlV2luZG93OwotCi0gICAgYm9vbCBtRGV2aWNlTG9z
dDsKLSAgICBEM0RDQVBTOSBtRGV2aWNlQ2FwczsKLSAgICBEM0RBREFQVEVSX0lERU5USUZJRVI5
IG1BZGFwdGVySWRlbnRpZmllcjsKLQotICAgIEQzRFBSSU1JVElWRVRZUEUgbVByaW1pdGl2ZVR5
cGU7Ci0gICAgaW50IG1QcmltaXRpdmVDb3VudDsKLSAgICBHTHNpemVpIG1SZXBlYXREcmF3Owot
Ci0gICAgYm9vbCBtU2NlbmVTdGFydGVkOwotICAgIGJvb2wgbVN1cHBvcnRzTm9uUG93ZXIyVGV4
dHVyZXM7Ci0gICAgYm9vbCBtU3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weTsKLSAgICBp
bnQgbU1pblN3YXBJbnRlcnZhbDsKLSAgICBpbnQgbU1heFN3YXBJbnRlcnZhbDsKLQotICAgIGJv
b2wgbU9jY2x1c2lvblF1ZXJ5U3VwcG9ydDsKLSAgICBib29sIG1FdmVudFF1ZXJ5U3VwcG9ydDsK
LSAgICBib29sIG1WZXJ0ZXhUZXh0dXJlU3VwcG9ydDsKLQotICAgIGJvb2wgbURlcHRoVGV4dHVy
ZVN1cHBvcnQ7Ci0KLSAgICBib29sIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQ7Ci0gICAgYm9vbCBt
RmxvYXQzMkZpbHRlclN1cHBvcnQ7Ci0gICAgYm9vbCBtRmxvYXQzMlJlbmRlclN1cHBvcnQ7Ci0K
LSAgICBib29sIG1GbG9hdDE2VGV4dHVyZVN1cHBvcnQ7Ci0gICAgYm9vbCBtRmxvYXQxNkZpbHRl
clN1cHBvcnQ7Ci0gICAgYm9vbCBtRmxvYXQxNlJlbmRlclN1cHBvcnQ7Ci0KLSAgICBib29sIG1E
WFQxVGV4dHVyZVN1cHBvcnQ7Ci0gICAgYm9vbCBtRFhUM1RleHR1cmVTdXBwb3J0OwotICAgIGJv
b2wgbURYVDVUZXh0dXJlU3VwcG9ydDsKLQotICAgIGJvb2wgbUx1bWluYW5jZVRleHR1cmVTdXBw
b3J0OwotICAgIGJvb2wgbUx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQ7Ci0KLSAgICBzdGQ6
Om1hcDxEM0RGT1JNQVQsIGJvb2wgKj4gbU11bHRpU2FtcGxlU3VwcG9ydDsKLSAgICBHTHNpemVp
IG1NYXhTdXBwb3J0ZWRTYW1wbGVzOwotCi0gICAgLy8gY3VycmVudCByZW5kZXIgdGFyZ2V0IHN0
YXRlcwotICAgIHVuc2lnbmVkIGludCBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbDsKLSAgICB1
bnNpZ25lZCBpbnQgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbDsKLSAgICB1bnNpZ25lZCBpbnQg
bUFwcGxpZWRTdGVuY2lsYnVmZmVyU2VyaWFsOwotICAgIGJvb2wgbURlcHRoU3RlbmNpbEluaXRp
YWxpemVkOwotICAgIGJvb2wgbVJlbmRlclRhcmdldERlc2NJbml0aWFsaXplZDsKLSAgICByeDo6
UmVuZGVyVGFyZ2V0OjpEZXNjIG1SZW5kZXJUYXJnZXREZXNjOwotICAgIHVuc2lnbmVkIGludCBt
Q3VyU3RlbmNpbFNpemU7Ci0gICAgdW5zaWduZWQgaW50IG1DdXJEZXB0aFNpemU7Ci0KLSAgICBJ
RGlyZWN0M0RTdGF0ZUJsb2NrOSAqbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZTsKLQotICAgIC8vIHBy
ZXZpb3VzbHkgc2V0IHJlbmRlciBzdGF0ZXMKLSAgICBib29sIG1Gb3JjZVNldERlcHRoU3RlbmNp
bFN0YXRlOwotICAgIGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSBtQ3VyRGVwdGhTdGVuY2lsU3RhdGU7
Ci0gICAgaW50IG1DdXJTdGVuY2lsUmVmOwotICAgIGludCBtQ3VyU3RlbmNpbEJhY2tSZWY7Ci0g
ICAgYm9vbCBtQ3VyRnJvbnRGYWNlQ0NXOwotCi0gICAgYm9vbCBtRm9yY2VTZXRSYXN0ZXJTdGF0
ZTsKLSAgICBnbDo6UmFzdGVyaXplclN0YXRlIG1DdXJSYXN0ZXJTdGF0ZTsKLQotICAgIGJvb2wg
bUZvcmNlU2V0U2Npc3NvcjsKLSAgICBnbDo6UmVjdGFuZ2xlIG1DdXJTY2lzc29yOwotICAgIGJv
b2wgbVNjaXNzb3JFbmFibGVkOwotCi0gICAgYm9vbCBtRm9yY2VTZXRWaWV3cG9ydDsKLSAgICBn
bDo6UmVjdGFuZ2xlIG1DdXJWaWV3cG9ydDsKLSAgICBmbG9hdCBtQ3VyTmVhcjsKLSAgICBmbG9h
dCBtQ3VyRmFyOwotICAgIGZsb2F0IG1DdXJEZXB0aEZyb250OwotCi0gICAgYm9vbCBtRm9yY2VT
ZXRCbGVuZFN0YXRlOwotICAgIGdsOjpCbGVuZFN0YXRlIG1DdXJCbGVuZFN0YXRlOwotICAgIGds
OjpDb2xvciBtQ3VyQmxlbmRDb2xvcjsKLSAgICBHTHVpbnQgbUN1clNhbXBsZU1hc2s7Ci0KLSAg
ICAvLyBDdXJyZW50bHkgYXBwbGllZCBzYW1wbGVyIHN0YXRlcwotICAgIGJvb2wgbUZvcmNlU2V0
VmVydGV4U2FtcGxlclN0YXRlc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJF
X0lNQUdFX1VOSVRTXTsKLSAgICBnbDo6U2FtcGxlclN0YXRlIG1DdXJWZXJ0ZXhTYW1wbGVyU3Rh
dGVzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOwot
Ci0gICAgYm9vbCBtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0ZXNbZ2w6Ok1BWF9URVhUVVJFX0lN
QUdFX1VOSVRTXTsKLSAgICBnbDo6U2FtcGxlclN0YXRlIG1DdXJQaXhlbFNhbXBsZXJTdGF0ZXNb
Z2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKLQotICAgIC8vIEN1cnJlbnRseSBhcHBsaWVk
IHRleHR1cmVzCi0gICAgdW5zaWduZWQgaW50IG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1tnbDo6
SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKLSAgICB1bnNp
Z25lZCBpbnQgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VO
SVRTXTsKLQotICAgIHVuc2lnbmVkIGludCBtQXBwbGllZElCU2VyaWFsOwotICAgIHVuc2lnbmVk
IGludCBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWw7Ci0gICAgCi0gICAgcng6OmR4X1ZlcnRl
eENvbnN0YW50cyBtVmVydGV4Q29uc3RhbnRzOwotICAgIHJ4OjpkeF9QaXhlbENvbnN0YW50cyBt
UGl4ZWxDb25zdGFudHM7Ci0gICAgYm9vbCBtRHhVbmlmb3Jtc0RpcnR5OwotCi0gICAgLy8gQSBw
b29sIG9mIGV2ZW50IHF1ZXJpZXMgdGhhdCBhcmUgY3VycmVudGx5IHVudXNlZC4KLSAgICBzdGQ6
OnZlY3RvcjxJRGlyZWN0M0RRdWVyeTkqPiBtRXZlbnRRdWVyeVBvb2w7Ci0gICAgVmVydGV4U2hh
ZGVyQ2FjaGUgbVZlcnRleFNoYWRlckNhY2hlOwotICAgIFBpeGVsU2hhZGVyQ2FjaGUgbVBpeGVs
U2hhZGVyQ2FjaGU7Ci0KLSAgICBWZXJ0ZXhEYXRhTWFuYWdlciAqbVZlcnRleERhdGFNYW5hZ2Vy
OwotICAgIFZlcnRleERlY2xhcmF0aW9uQ2FjaGUgbVZlcnRleERlY2xhcmF0aW9uQ2FjaGU7Ci0K
LSAgICBJbmRleERhdGFNYW5hZ2VyICptSW5kZXhEYXRhTWFuYWdlcjsKLSAgICBTdHJlYW1pbmdJ
bmRleEJ1ZmZlckludGVyZmFjZSAqbUxpbmVMb29wSUI7Ci0KLSAgICBlbnVtIHsgTlVNX05VTExf
Q09MT1JCVUZGRVJfQ0FDSEVfRU5UUklFUyA9IDEyIH07Ci0gICAgc3RydWN0IE51bGxDb2xvcmJ1
ZmZlckNhY2hlRW50cnkKLSAgICB7Ci0gICAgICAgIFVJTlQgbHJ1Q291bnQ7Ci0gICAgICAgIGlu
dCB3aWR0aDsKLSAgICAgICAgaW50IGhlaWdodDsKLSAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAq
YnVmZmVyOwotICAgIH0gbU51bGxDb2xvcmJ1ZmZlckNhY2hlW05VTV9OVUxMX0NPTE9SQlVGRkVS
X0NBQ0hFX0VOVFJJRVNdOwotICAgIFVJTlQgbU1heE51bGxDb2xvcmJ1ZmZlckxSVTsKLQotfTsK
LQotfQotI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjlfSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvU2hhZGVy
RXhlY3V0YWJsZTExLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvU2hhZGVyRXhlY3V0YWJsZTExLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZTFlYjU2MDMzNDgzZmZiMDkwMjI5MGU1OTY4NmRkNGMwZDhiMjBjMi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckV4ZWN1dGFibGUxMS5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwotCi0vLyBTaGFkZXJFeGVjdXRhYmxlMTEuY3BwOiBJbXBsZW1lbnRzIGEg
RDNEMTEtc3BlY2lmaWMgY2xhc3MgdG8gY29udGFpbiBzaGFkZXIKLS8vIGV4ZWN1dGFibGUgaW1w
bGVtZW50YXRpb24gZGV0YWlscy4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9TaGFk
ZXJFeGVjdXRhYmxlMTEuaCIKLQotI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgotCi1uYW1lc3Bh
Y2UgcngKLXsKLQotU2hhZGVyRXhlY3V0YWJsZTExOjpTaGFkZXJFeGVjdXRhYmxlMTEoY29uc3Qg
dm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIElEM0QxMVBpeGVsU2hhZGVyICpleGVjdXRh
YmxlKQotICAgIDogU2hhZGVyRXhlY3V0YWJsZShmdW5jdGlvbiwgbGVuZ3RoKQotewotICAgIG1Q
aXhlbEV4ZWN1dGFibGUgPSBleGVjdXRhYmxlOwotICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVM
TDsKLSAgICBtR2VvbWV0cnlFeGVjdXRhYmxlID0gTlVMTDsKLQotICAgIG1Db25zdGFudEJ1ZmZl
ciA9IE5VTEw7Ci19Ci0KLVNoYWRlckV4ZWN1dGFibGUxMTo6U2hhZGVyRXhlY3V0YWJsZTExKGNv
bnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFWZXJ0ZXhTaGFkZXIgKmV4
ZWN1dGFibGUpCi0gICAgOiBTaGFkZXJFeGVjdXRhYmxlKGZ1bmN0aW9uLCBsZW5ndGgpCi17Ci0g
ICAgbVZlcnRleEV4ZWN1dGFibGUgPSBleGVjdXRhYmxlOwotICAgIG1QaXhlbEV4ZWN1dGFibGUg
PSBOVUxMOwotICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBOVUxMOwotCi0gICAgbUNvbnN0YW50
QnVmZmVyID0gTlVMTDsKLX0KLQotU2hhZGVyRXhlY3V0YWJsZTExOjpTaGFkZXJFeGVjdXRhYmxl
MTEoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIElEM0QxMUdlb21ldHJ5U2hh
ZGVyICpleGVjdXRhYmxlKQotICAgIDogU2hhZGVyRXhlY3V0YWJsZShmdW5jdGlvbiwgbGVuZ3Ro
KQotewotICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBleGVjdXRhYmxlOwotICAgIG1WZXJ0ZXhF
eGVjdXRhYmxlID0gTlVMTDsKLSAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKLQotICAgIG1D
b25zdGFudEJ1ZmZlciA9IE5VTEw7Ci19Ci0KLVNoYWRlckV4ZWN1dGFibGUxMTo6flNoYWRlckV4
ZWN1dGFibGUxMSgpCi17Ci0gICAgaWYgKG1WZXJ0ZXhFeGVjdXRhYmxlKQotICAgIHsKLSAgICAg
ICAgbVZlcnRleEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKLSAgICB9Ci0gICAgaWYgKG1QaXhlbEV4
ZWN1dGFibGUpCi0gICAgewotICAgICAgICBtUGl4ZWxFeGVjdXRhYmxlLT5SZWxlYXNlKCk7Ci0g
ICAgfQotICAgIGlmIChtR2VvbWV0cnlFeGVjdXRhYmxlKQotICAgIHsKLSAgICAgICAgbUdlb21l
dHJ5RXhlY3V0YWJsZS0+UmVsZWFzZSgpOwotICAgIH0KLSAgICAKLSAgICBpZiAobUNvbnN0YW50
QnVmZmVyKQotICAgIHsKLSAgICAgICAgbUNvbnN0YW50QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAg
fQotfQotCi1TaGFkZXJFeGVjdXRhYmxlMTEgKlNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRl
ckV4ZWN1dGFibGUxMShTaGFkZXJFeGVjdXRhYmxlICpleGVjdXRhYmxlKQotewotICAgIEFTU0VS
VChIQVNfRFlOQU1JQ19UWVBFKFNoYWRlckV4ZWN1dGFibGUxMSosIGV4ZWN1dGFibGUpKTsKLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8U2hhZGVyRXhlY3V0YWJsZTExKj4oZXhlY3V0YWJsZSk7Ci19
Ci0KLUlEM0QxMVZlcnRleFNoYWRlciAqU2hhZGVyRXhlY3V0YWJsZTExOjpnZXRWZXJ0ZXhTaGFk
ZXIoKSBjb25zdAotewotICAgIHJldHVybiBtVmVydGV4RXhlY3V0YWJsZTsKLX0KLQotSUQzRDEx
UGl4ZWxTaGFkZXIgKlNoYWRlckV4ZWN1dGFibGUxMTo6Z2V0UGl4ZWxTaGFkZXIoKSBjb25zdAot
ewotICAgIHJldHVybiBtUGl4ZWxFeGVjdXRhYmxlOwotfQotCi1JRDNEMTFHZW9tZXRyeVNoYWRl
ciAqU2hhZGVyRXhlY3V0YWJsZTExOjpnZXRHZW9tZXRyeVNoYWRlcigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1HZW9tZXRyeUV4ZWN1dGFibGU7Ci19Ci0KLUlEM0QxMUJ1ZmZlciAqU2hhZGVyRXhl
Y3V0YWJsZTExOjpnZXRDb25zdGFudEJ1ZmZlcihJRDNEMTFEZXZpY2UgKmRldmljZSwgdW5zaWdu
ZWQgaW50IHJlZ2lzdGVyQ291bnQpCi17Ci0gICAgaWYgKCFtQ29uc3RhbnRCdWZmZXIgJiYgcmVn
aXN0ZXJDb3VudCA+IDApCi0gICAgewotICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyBjb25zdGFu
dEJ1ZmZlckRlc2NyaXB0aW9uID0gezB9OwotICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0
aW9uLkJ5dGVXaWR0aCA9IHJlZ2lzdGVyQ291bnQgKiBzaXplb2YoZmxvYXRbNF0pOwotICAgICAg
ICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLlVzYWdlID0gRDNEMTFfVVNBR0VfRFlOQU1JQzsK
LSAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5E
X0NPTlNUQU5UX0JVRkZFUjsKLSAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5DUFVB
Y2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7Ci0gICAgICAgIGNvbnN0YW50QnVm
ZmVyRGVzY3JpcHRpb24uTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNj
cmlwdGlvbi5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKLQotICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLCBOVUxM
LCAmbUNvbnN0YW50QnVmZmVyKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gbUNvbnN0YW50QnVmZmVyOwotfQotCi19ClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlMTEuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvU2hhZGVyRXhlY3V0YWJsZTExLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZWMxY2Y3ZDJjZGFlYmE0NGQ0YTViODU1Nzlk
MTgyOTdhNDFmYWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJF
eGVjdXRhYmxlMTEuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCi0KLS8vIFNoYWRlckV4ZWN1dGFibGUxMS5oOiBEZWZpbmVzIGEgRDNEMTEtc3BlY2lm
aWMgY2xhc3MgdG8gY29udGFpbiBzaGFkZXIKLS8vIGV4ZWN1dGFibGUgaW1wbGVtZW50YXRpb24g
ZGV0YWlscy4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfU0hBREVSRVhFQ1VUQUJMRTEx
X0hfCi0jZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9TSEFERVJFWEVDVVRBQkxFMTFfSF8KLQot
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlLmgiCi0KLW5hbWVz
cGFjZSByeAotewotCi1jbGFzcyBTaGFkZXJFeGVjdXRhYmxlMTEgOiBwdWJsaWMgU2hhZGVyRXhl
Y3V0YWJsZQotewotICBwdWJsaWM6Ci0gICAgU2hhZGVyRXhlY3V0YWJsZTExKGNvbnN0IHZvaWQg
KmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFQaXhlbFNoYWRlciAqZXhlY3V0YWJsZSk7
Ci0gICAgU2hhZGVyRXhlY3V0YWJsZTExKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVu
Z3RoLCBJRDNEMTFWZXJ0ZXhTaGFkZXIgKmV4ZWN1dGFibGUpOwotICAgIFNoYWRlckV4ZWN1dGFi
bGUxMShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSUQzRDExR2VvbWV0cnlT
aGFkZXIgKmV4ZWN1dGFibGUpOwotCi0gICAgdmlydHVhbCB+U2hhZGVyRXhlY3V0YWJsZTExKCk7
Ci0KLSAgICBzdGF0aWMgU2hhZGVyRXhlY3V0YWJsZTExICptYWtlU2hhZGVyRXhlY3V0YWJsZTEx
KFNoYWRlckV4ZWN1dGFibGUgKmV4ZWN1dGFibGUpOwotCi0gICAgSUQzRDExUGl4ZWxTaGFkZXIg
KmdldFBpeGVsU2hhZGVyKCkgY29uc3Q7Ci0gICAgSUQzRDExVmVydGV4U2hhZGVyICpnZXRWZXJ0
ZXhTaGFkZXIoKSBjb25zdDsKLSAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZ2V0R2VvbWV0cnlT
aGFkZXIoKSBjb25zdDsKLQotICAgIElEM0QxMUJ1ZmZlciAqZ2V0Q29uc3RhbnRCdWZmZXIoSUQz
RDExRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGludCByZWdpc3RlckNvdW50KTsKLQotICBwcml2
YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTaGFkZXJFeGVjdXRhYmxlMTEpOwot
Ci0gICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1QaXhlbEV4ZWN1dGFibGU7Ci0gICAgSUQzRDExVmVy
dGV4U2hhZGVyICptVmVydGV4RXhlY3V0YWJsZTsKLSAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAq
bUdlb21ldHJ5RXhlY3V0YWJsZTsKLQotICAgIElEM0QxMUJ1ZmZlciAqbUNvbnN0YW50QnVmZmVy
OwotfTsKLQotfQotCi0jZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1NIQURFUkVYRUNVVEFC
TEUxMV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlOS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckV4ZWN1dGFibGU5LmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggOTg4NjhhM2ZiZjM4YTUzZmY0OWE4NzU5MTY4ZWU5MmU0NTcw
YTk4MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckV4ZWN1dGFi
bGU5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLSNpbmNsdWRlICJwcmVjb21w
aWxlZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gU2hhZGVyRXhlY3V0YWJsZTkuY3BwOiBJ
bXBsZW1lbnRzIGEgRDNEOS1zcGVjaWZpYyBjbGFzcyB0byBjb250YWluIHNoYWRlcgotLy8gZXhl
Y3V0YWJsZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL1NoYWRlckV4ZWN1dGFibGU5LmgiCi0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIK
LQotbmFtZXNwYWNlIHJ4Ci17Ci0KLVNoYWRlckV4ZWN1dGFibGU5OjpTaGFkZXJFeGVjdXRhYmxl
OShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSURpcmVjdDNEUGl4ZWxTaGFk
ZXI5ICpleGVjdXRhYmxlKQotICAgIDogU2hhZGVyRXhlY3V0YWJsZShmdW5jdGlvbiwgbGVuZ3Ro
KQotewotICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBleGVjdXRhYmxlOwotICAgIG1WZXJ0ZXhFeGVj
dXRhYmxlID0gTlVMTDsKLX0KLQotU2hhZGVyRXhlY3V0YWJsZTk6OlNoYWRlckV4ZWN1dGFibGU5
KGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRGlyZWN0M0RWZXJ0ZXhTaGFk
ZXI5ICpleGVjdXRhYmxlKQotICAgIDogU2hhZGVyRXhlY3V0YWJsZShmdW5jdGlvbiwgbGVuZ3Ro
KQotewotICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gZXhlY3V0YWJsZTsKLSAgICBtUGl4ZWxFeGVj
dXRhYmxlID0gTlVMTDsKLX0KLQotU2hhZGVyRXhlY3V0YWJsZTk6On5TaGFkZXJFeGVjdXRhYmxl
OSgpCi17Ci0gICAgaWYgKG1WZXJ0ZXhFeGVjdXRhYmxlKQotICAgIHsKLSAgICAgICAgbVZlcnRl
eEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKLSAgICB9Ci0gICAgaWYgKG1QaXhlbEV4ZWN1dGFibGUp
Ci0gICAgewotICAgICAgICBtUGl4ZWxFeGVjdXRhYmxlLT5SZWxlYXNlKCk7Ci0gICAgfQotfQot
Ci1TaGFkZXJFeGVjdXRhYmxlOSAqU2hhZGVyRXhlY3V0YWJsZTk6Om1ha2VTaGFkZXJFeGVjdXRh
YmxlOShTaGFkZXJFeGVjdXRhYmxlICpleGVjdXRhYmxlKQotewotICAgIEFTU0VSVChIQVNfRFlO
QU1JQ19UWVBFKFNoYWRlckV4ZWN1dGFibGU5KiwgZXhlY3V0YWJsZSkpOwotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxTaGFkZXJFeGVjdXRhYmxlOSo+KGV4ZWN1dGFibGUpOwotfQotCi1JRGlyZWN0
M0RWZXJ0ZXhTaGFkZXI5ICpTaGFkZXJFeGVjdXRhYmxlOTo6Z2V0VmVydGV4U2hhZGVyKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbVZlcnRleEV4ZWN1dGFibGU7Ci19Ci0KLUlEaXJlY3QzRFBpeGVs
U2hhZGVyOSAqU2hhZGVyRXhlY3V0YWJsZTk6OmdldFBpeGVsU2hhZGVyKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbVBpeGVsRXhlY3V0YWJsZTsKLX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvU2hhZGVyRXhlY3V0YWJsZTkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvU2hhZGVyRXhlY3V0YWJsZTkuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZmExZTZjMjg0NGE5OGJhNDI2OGYwZGRmMmI0OTRhMzZkMjc2YzViZi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckV4ZWN1dGFibGU5LmgK
KysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEy
LTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBT
aGFkZXJFeGVjdXRhYmxlOS5oOiBEZWZpbmVzIGEgRDNEOS1zcGVjaWZpYyBjbGFzcyB0byBjb250
YWluIHNoYWRlcgotLy8gZXhlY3V0YWJsZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgotCi0jaWZu
ZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9TSEFERVJFWEVDVVRBQkxFOV9IXwotI2RlZmluZSBMSUJH
TEVTVjJfUkVOREVSRVJfU0hBREVSRVhFQ1VUQUJMRTlfSF8KLQotI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlLmgiCi0KLW5hbWVzcGFjZSByeAotewotCi1jbGFz
cyBTaGFkZXJFeGVjdXRhYmxlOSA6IHB1YmxpYyBTaGFkZXJFeGVjdXRhYmxlCi17Ci0gIHB1Ymxp
YzoKLSAgICBTaGFkZXJFeGVjdXRhYmxlOShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxl
bmd0aCwgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpleGVjdXRhYmxlKTsKLSAgICBTaGFkZXJFeGVj
dXRhYmxlOShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSURpcmVjdDNEVmVy
dGV4U2hhZGVyOSAqZXhlY3V0YWJsZSk7Ci0gICAgdmlydHVhbCB+U2hhZGVyRXhlY3V0YWJsZTko
KTsKLQotICAgIHN0YXRpYyBTaGFkZXJFeGVjdXRhYmxlOSAqbWFrZVNoYWRlckV4ZWN1dGFibGU5
KFNoYWRlckV4ZWN1dGFibGUgKmV4ZWN1dGFibGUpOwotCi0gICAgSURpcmVjdDNEUGl4ZWxTaGFk
ZXI5ICpnZXRQaXhlbFNoYWRlcigpIGNvbnN0OwotICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkg
KmdldFZlcnRleFNoYWRlcigpIGNvbnN0OwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKFNoYWRlckV4ZWN1dGFibGU5KTsKLQotICAgIElEaXJlY3QzRFBpeGVsU2hh
ZGVyOSAqbVBpeGVsRXhlY3V0YWJsZTsKLSAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICptVmVy
dGV4RXhlY3V0YWJsZTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9T
SEFERVJFWEVDVVRBQkxFOV9IXwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvU3dhcENo
YWluMTEuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9Td2FwQ2hhaW4xMS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMmNmZTQz
MGRkZDlhYWViZGMxYzliMzZiNGM1ZWMxZmQzNzNmZDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9Td2FwQ2hhaW4xMS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3NzUgKzAs
MCBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEy
LTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBT
d2FwQ2hhaW4xMS5jcHA6IEltcGxlbWVudHMgYSBiYWNrLWVuZCBzcGVjaWZpYyBjbGFzcyBmb3Ig
dGhlIEQzRDExIHN3YXAgY2hhaW4uCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvU3dh
cENoYWluMTEuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9yZW5kZXJlcjExX3V0
aWxzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyMTEuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaDExdnMu
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9wYXNzdGhy
b3VnaHJnYmExMXBzLmgiCi0KLW5hbWVzcGFjZSByeAotewotCi1Td2FwQ2hhaW4xMTo6U3dhcENo
YWluMTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIsIEhXTkQgd2luZG93LCBIQU5ETEUgc2hhcmVIYW5k
bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGJhY2tCdWZmZXJGb3JtYXQsIEdM
ZW51bSBkZXB0aEJ1ZmZlckZvcm1hdCkKLSAgICA6IG1SZW5kZXJlcihyZW5kZXJlciksIFN3YXBD
aGFpbih3aW5kb3csIHNoYXJlSGFuZGxlLCBiYWNrQnVmZmVyRm9ybWF0LCBkZXB0aEJ1ZmZlckZv
cm1hdCkKLXsKLSAgICBtU3dhcENoYWluID0gTlVMTDsKLSAgICBtQmFja0J1ZmZlclRleHR1cmUg
PSBOVUxMOwotICAgIG1CYWNrQnVmZmVyUlRWaWV3ID0gTlVMTDsKLSAgICBtT2Zmc2NyZWVuVGV4
dHVyZSA9IE5VTEw7Ci0gICAgbU9mZnNjcmVlblJUVmlldyA9IE5VTEw7Ci0gICAgbU9mZnNjcmVl
blNSVmlldyA9IE5VTEw7Ci0gICAgbURlcHRoU3RlbmNpbFRleHR1cmUgPSBOVUxMOwotICAgIG1E
ZXB0aFN0ZW5jaWxEU1ZpZXcgPSBOVUxMOwotICAgIG1RdWFkVkIgPSBOVUxMOwotICAgIG1QYXNz
VGhyb3VnaFNhbXBsZXIgPSBOVUxMOwotICAgIG1QYXNzVGhyb3VnaElMID0gTlVMTDsKLSAgICBt
UGFzc1Rocm91Z2hWUyA9IE5VTEw7Ci0gICAgbVBhc3NUaHJvdWdoUFMgPSBOVUxMOwotICAgIG1X
aWR0aCA9IC0xOwotICAgIG1IZWlnaHQgPSAtMTsKLSAgICBtU3dhcEludGVydmFsID0gMDsKLSAg
ICBtQXBwQ3JlYXRlZFNoYXJlSGFuZGxlID0gbVNoYXJlSGFuZGxlICE9IE5VTEw7Ci0gICAgbVBh
c3NUaHJvdWdoUmVzb3VyY2VzSW5pdCA9IGZhbHNlOwotfQotCi1Td2FwQ2hhaW4xMTo6flN3YXBD
aGFpbjExKCkKLXsKLSAgICByZWxlYXNlKCk7Ci19Ci0KLXZvaWQgU3dhcENoYWluMTE6OnJlbGVh
c2UoKQotewotICAgIGlmIChtU3dhcENoYWluKQotICAgIHsKLSAgICAgICAgbVN3YXBDaGFpbi0+
UmVsZWFzZSgpOwotICAgICAgICBtU3dhcENoYWluID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAo
bUJhY2tCdWZmZXJUZXh0dXJlKQotICAgIHsKLSAgICAgICAgbUJhY2tCdWZmZXJUZXh0dXJlLT5S
ZWxlYXNlKCk7Ci0gICAgICAgIG1CYWNrQnVmZmVyVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQotCi0g
ICAgaWYgKG1CYWNrQnVmZmVyUlRWaWV3KQotICAgIHsKLSAgICAgICAgbUJhY2tCdWZmZXJSVFZp
ZXctPlJlbGVhc2UoKTsKLSAgICAgICAgbUJhY2tCdWZmZXJSVFZpZXcgPSBOVUxMOwotICAgIH0K
LQotICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1PZmZzY3JlZW5U
ZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsKLSAg
ICB9Ci0KLSAgICBpZiAobU9mZnNjcmVlblJUVmlldykKLSAgICB7Ci0gICAgICAgIG1PZmZzY3Jl
ZW5SVFZpZXctPlJlbGVhc2UoKTsKLSAgICAgICAgbU9mZnNjcmVlblJUVmlldyA9IE5VTEw7Ci0g
ICAgfQotCi0gICAgaWYgKG1PZmZzY3JlZW5TUlZpZXcpCi0gICAgewotICAgICAgICBtT2Zmc2Ny
ZWVuU1JWaWV3LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1PZmZzY3JlZW5TUlZpZXcgPSBOVUxMOwot
ICAgIH0KLQotICAgIGlmIChtRGVwdGhTdGVuY2lsVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1E
ZXB0aFN0ZW5jaWxUZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxUZXh0
dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobURlcHRoU3RlbmNpbERTVmlldykKLSAgICB7
Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxEU1ZpZXctPlJlbGVhc2UoKTsKLSAgICAgICAgbURlcHRo
U3RlbmNpbERTVmlldyA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1RdWFkVkIpCi0gICAgewot
ICAgICAgICBtUXVhZFZCLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1RdWFkVkIgPSBOVUxMOwotICAg
IH0KLQotICAgIGlmIChtUGFzc1Rocm91Z2hTYW1wbGVyKQotICAgIHsKLSAgICAgICAgbVBhc3NU
aHJvdWdoU2FtcGxlci0+UmVsZWFzZSgpOwotICAgICAgICBtUGFzc1Rocm91Z2hTYW1wbGVyID0g
TlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVBhc3NUaHJvdWdoSUwpCi0gICAgewotICAgICAgICBt
UGFzc1Rocm91Z2hJTC0+UmVsZWFzZSgpOwotICAgICAgICBtUGFzc1Rocm91Z2hJTCA9IE5VTEw7
Ci0gICAgfQotCi0gICAgaWYgKG1QYXNzVGhyb3VnaFZTKQotICAgIHsKLSAgICAgICAgbVBhc3NU
aHJvdWdoVlMtPlJlbGVhc2UoKTsKLSAgICAgICAgbVBhc3NUaHJvdWdoVlMgPSBOVUxMOwotICAg
IH0KLQotICAgIGlmIChtUGFzc1Rocm91Z2hQUykKLSAgICB7Ci0gICAgICAgIG1QYXNzVGhyb3Vn
aFBTLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1QYXNzVGhyb3VnaFBTID0gTlVMTDsKLSAgICB9Ci0K
LSAgICBpZiAoIW1BcHBDcmVhdGVkU2hhcmVIYW5kbGUpCi0gICAgewotICAgICAgICBtU2hhcmVI
YW5kbGUgPSBOVUxMOwotICAgIH0KLX0KLQotdm9pZCBTd2FwQ2hhaW4xMTo6cmVsZWFzZU9mZnNj
cmVlblRleHR1cmUoKQotewotICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkKLSAgICB7Ci0gICAg
ICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1PZmZzY3JlZW5UZXh0
dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobU9mZnNjcmVlblJUVmlldykKLSAgICB7Ci0g
ICAgICAgIG1PZmZzY3JlZW5SVFZpZXctPlJlbGVhc2UoKTsKLSAgICAgICAgbU9mZnNjcmVlblJU
VmlldyA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1PZmZzY3JlZW5TUlZpZXcpCi0gICAgewot
ICAgICAgICBtT2Zmc2NyZWVuU1JWaWV3LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1PZmZzY3JlZW5T
UlZpZXcgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtRGVwdGhTdGVuY2lsVGV4dHVyZSkKLSAg
ICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxUZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1E
ZXB0aFN0ZW5jaWxUZXh0dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobURlcHRoU3RlbmNp
bERTVmlldykKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxEU1ZpZXctPlJlbGVhc2UoKTsK
LSAgICAgICAgbURlcHRoU3RlbmNpbERTVmlldyA9IE5VTEw7Ci0gICAgfQotfQotCi1FR0xpbnQg
U3dhcENoYWluMTE6OnJlc2V0T2Zmc2NyZWVuVGV4dHVyZShpbnQgYmFja2J1ZmZlcldpZHRoLCBp
bnQgYmFja2J1ZmZlckhlaWdodCkKLXsKLSAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5k
ZXJlci0+Z2V0RGV2aWNlKCk7Ci0KLSAgICBBU1NFUlQoZGV2aWNlICE9IE5VTEwpOwotCi0gICAg
Ly8gRDNEMTEgZG9lcyBub3QgYWxsb3cgemVybyBzaXplIHRleHR1cmVzCi0gICAgQVNTRVJUKGJh
Y2tidWZmZXJXaWR0aCA+PSAxKTsKLSAgICBBU1NFUlQoYmFja2J1ZmZlckhlaWdodCA+PSAxKTsK
LQotICAgIC8vIFByZXNlcnZlIHRoZSByZW5kZXIgdGFyZ2V0IGNvbnRlbnQKLSAgICBJRDNEMTFU
ZXh0dXJlMkQgKnByZXZpb3VzT2Zmc2NyZWVuVGV4dHVyZSA9IG1PZmZzY3JlZW5UZXh0dXJlOwot
ICAgIGlmIChwcmV2aW91c09mZnNjcmVlblRleHR1cmUpCi0gICAgewotICAgICAgICBwcmV2aW91
c09mZnNjcmVlblRleHR1cmUtPkFkZFJlZigpOwotICAgIH0KLSAgICBjb25zdCBpbnQgcHJldmlv
dXNXaWR0aCA9IG1XaWR0aDsKLSAgICBjb25zdCBpbnQgcHJldmlvdXNIZWlnaHQgPSBtSGVpZ2h0
OwotCi0gICAgcmVsZWFzZU9mZnNjcmVlblRleHR1cmUoKTsKLQotICAgIC8vIElmIHRoZSBhcHAg
cGFzc2VkIGluIGEgc2hhcmUgaGFuZGxlLCBvcGVuIHRoZSByZXNvdXJjZQotICAgIC8vIFNlZSBF
R0xfQU5HTEVfZDNkX3NoYXJlX2hhbmRsZV9jbGllbnRfYnVmZmVyCi0gICAgaWYgKG1BcHBDcmVh
dGVkU2hhcmVIYW5kbGUpCi0gICAgewotICAgICAgICBJRDNEMTFSZXNvdXJjZSAqdGVtcFJlc291
cmNlMTE7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5PcGVuU2hhcmVkUmVzb3Vy
Y2UobVNoYXJlSGFuZGxlLCBfX3V1aWRvZihJRDNEMTFSZXNvdXJjZSksICh2b2lkKiopJnRlbXBS
ZXNvdXJjZTExKTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEVSUigiRmFpbGVkIHRvIG9wZW4gdGhlIHN3YXAgY2hhaW4gcGJ1ZmZlciBzaGFy
ZSBoYW5kbGU6ICUwOGxYIiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJlbGVhc2UoKTsKLSAgICAg
ICAgICAgIHJldHVybiBFR0xfQkFEX1BBUkFNRVRFUjsKLSAgICAgICAgfQotCi0gICAgICAgIHJl
c3VsdCA9IHRlbXBSZXNvdXJjZTExLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRDNEMTFUZXh0
dXJlMkQpLCAodm9pZCoqKSZtT2Zmc2NyZWVuVGV4dHVyZSk7Ci0gICAgICAgIHRlbXBSZXNvdXJj
ZTExLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBxdWVyeSB0ZXh0dXJlMmQgaW50ZXJmYWNlIGlu
IHBidWZmZXIgc2hhcmUgaGFuZGxlOiAlMDhsWCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZWxl
YXNlKCk7Ci0gICAgICAgICAgICByZXR1cm4gRUdMX0JBRF9QQVJBTUVURVI7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBWYWxpZGF0ZSBvZmZzY3JlZW4gdGV4dHVyZSBwYXJhbWV0ZXJzCi0gICAg
ICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIG9mZnNjcmVlblRleHR1cmVEZXNjID0gezB9OwotICAg
ICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+R2V0RGVzYygmb2Zmc2NyZWVuVGV4dHVyZURlc2MpOwot
Ci0gICAgICAgIGlmIChvZmZzY3JlZW5UZXh0dXJlRGVzYy5XaWR0aCAhPSAoVUlOVCliYWNrYnVm
ZmVyV2lkdGgKLSAgICAgICAgICAgIHx8IG9mZnNjcmVlblRleHR1cmVEZXNjLkhlaWdodCAhPSAo
VUlOVCliYWNrYnVmZmVySGVpZ2h0Ci0gICAgICAgICAgICB8fCBvZmZzY3JlZW5UZXh0dXJlRGVz
Yy5Gb3JtYXQgIT0gZ2xfZDNkMTE6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobUJhY2tCdWZm
ZXJGb3JtYXQpCi0gICAgICAgICAgICB8fCBvZmZzY3JlZW5UZXh0dXJlRGVzYy5NaXBMZXZlbHMg
IT0gMQotICAgICAgICAgICAgfHwgb2Zmc2NyZWVuVGV4dHVyZURlc2MuQXJyYXlTaXplICE9IDEp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiSW52YWxpZCB0ZXh0dXJlIHBhcmFtZXRlcnMg
aW4gdGhlIHNoYXJlZCBvZmZzY3JlZW4gdGV4dHVyZSBwYnVmZmVyIik7Ci0gICAgICAgICAgICBy
ZWxlYXNlKCk7Ci0gICAgICAgICAgICByZXR1cm4gRUdMX0JBRF9QQVJBTUVURVI7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgY29uc3QgYm9vbCB1c2VTaGFyZWRS
ZXNvdXJjZSA9ICFtV2luZG93ICYmIG1SZW5kZXJlci0+Z2V0U2hhcmVIYW5kbGVTdXBwb3J0KCk7
Ci0KLSAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0Mgb2Zmc2NyZWVuVGV4dHVyZURlc2MgPSB7
MH07Ci0gICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLldpZHRoID0gYmFja2J1ZmZlcldpZHRo
OwotICAgICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5IZWlnaHQgPSBiYWNrYnVmZmVySGVpZ2h0
OwotICAgICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5Gb3JtYXQgPSBnbF9kM2QxMTo6Q29udmVy
dFJlbmRlcmJ1ZmZlckZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCk7Ci0gICAgICAgIG9mZnNjcmVl
blRleHR1cmVEZXNjLk1pcExldmVscyA9IDE7Ci0gICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNj
LkFycmF5U2l6ZSA9IDE7Ci0gICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLlNhbXBsZURlc2Mu
Q291bnQgPSAxOwotICAgICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5TYW1wbGVEZXNjLlF1YWxp
dHkgPSAwOwotICAgICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdF
X0RFRkFVTFQ7Ci0gICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLkJpbmRGbGFncyA9IEQzRDEx
X0JJTkRfUkVOREVSX1RBUkdFVCB8IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFOwotICAgICAg
ICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7Ci0gICAgICAgIG9mZnNj
cmVlblRleHR1cmVEZXNjLk1pc2NGbGFncyA9IHVzZVNoYXJlZFJlc291cmNlID8gRDNEMTFfUkVT
T1VSQ0VfTUlTQ19TSEFSRUQgOiAwOwotCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVUZXh0dXJlMkQoJm9mZnNjcmVlblRleHR1cmVEZXNjLCBOVUxMLCAmbU9mZnNjcmVl
blRleHR1cmUpOwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAg
ICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG9mZnNjcmVlbiB0ZXh0dXJlOiAlMDhsWCIs
IHJlc3VsdCk7Ci0gICAgICAgICAgICByZWxlYXNlKCk7Ci0KLSAgICAgICAgICAgIGlmIChkM2Qx
MTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gRUdMX0NPTlRFWFRfTE9TVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gRUdMX0JBRF9BTExP
QzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05h
bWUobU9mZnNjcmVlblRleHR1cmUsICJPZmZzY3JlZW4gdGV4dHVyZSIpOwotCi0gICAgICAgIC8v
IEVHTF9BTkdMRV9zdXJmYWNlX2QzZF90ZXh0dXJlXzJkX3NoYXJlX2hhbmRsZSByZXF1aXJlcyB0
aGF0IHdlIHN0b3JlIGEgc2hhcmUgaGFuZGxlIGZvciB0aGUgY2xpZW50Ci0gICAgICAgIGlmICh1
c2VTaGFyZWRSZXNvdXJjZSkKLSAgICAgICAgewotICAgICAgICAgICAgSURYR0lSZXNvdXJjZSAq
b2Zmc2NyZWVuVGV4dHVyZVJlc291cmNlID0gTlVMTDsKLSAgICAgICAgICAgIHJlc3VsdCA9IG1P
ZmZzY3JlZW5UZXh0dXJlLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRFhHSVJlc291cmNlKSwg
KHZvaWQqKikmb2Zmc2NyZWVuVGV4dHVyZVJlc291cmNlKTsKLQotICAgICAgICAgICAgLy8gRmFs
bCBiYWNrIHRvIG5vIHNoYXJlIGhhbmRsZSBvbiBmYWlsdXJlCi0gICAgICAgICAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRVJSKCJDb3VsZCBu
b3QgcXVlcnkgb2Zmc2NyZWVuIHRleHR1cmUgcmVzb3VyY2U6ICUwOGxYIiwgcmVzdWx0KTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXN1bHQgPSBvZmZzY3JlZW5UZXh0dXJlUmVzb3VyY2UtPkdldFNoYXJlZEhhbmRsZSgm
bVNoYXJlSGFuZGxlKTsKLSAgICAgICAgICAgICAgICBvZmZzY3JlZW5UZXh0dXJlUmVzb3VyY2Ut
PlJlbGVhc2UoKTsKLQotICAgICAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1TaGFyZUhhbmRsZSA9IE5VTEw7Ci0g
ICAgICAgICAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGdldCBvZmZzY3JlZW4gdGV4dHVyZSBz
aGFyZWQgaGFuZGxlOiAlMDhsWCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgICAgICAKLSAgICBIUkVTVUxUIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0VmlldyhtT2Zmc2NyZWVuVGV4dHVyZSwgTlVMTCwg
Jm1PZmZzY3JlZW5SVFZpZXcpOwotCi0gICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAg
ICBkM2QxMTo6U2V0RGVidWdOYW1lKG1PZmZzY3JlZW5SVFZpZXcsICJPZmZzY3JlZW4gcmVuZGVy
IHRhcmdldCIpOwotCi0gICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZp
ZXcobU9mZnNjcmVlblRleHR1cmUsIE5VTEwsICZtT2Zmc2NyZWVuU1JWaWV3KTsKLSAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobU9mZnNjcmVl
blNSVmlldywgIk9mZnNjcmVlbiBzaGFkZXIgcmVzb3VyY2UiKTsKLQotICAgIGlmIChtRGVwdGhC
dWZmZXJGb3JtYXQgIT0gR0xfTk9ORSkKLSAgICB7Ci0gICAgICAgIEQzRDExX1RFWFRVUkUyRF9E
RVNDIGRlcHRoU3RlbmNpbERlc2MgPSB7MH07Ci0gICAgICAgIGRlcHRoU3RlbmNpbERlc2MuV2lk
dGggPSBiYWNrYnVmZmVyV2lkdGg7Ci0gICAgICAgIGRlcHRoU3RlbmNpbERlc2MuSGVpZ2h0ID0g
YmFja2J1ZmZlckhlaWdodDsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5Gb3JtYXQgPSBnbF9k
M2QxMTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtRGVwdGhCdWZmZXJGb3JtYXQpOwotICAg
ICAgICBkZXB0aFN0ZW5jaWxEZXNjLk1pcExldmVscyA9IDE7Ci0gICAgICAgIGRlcHRoU3RlbmNp
bERlc2MuQXJyYXlTaXplID0gMTsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5TYW1wbGVEZXNj
LkNvdW50ID0gMTsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkg
PSAwOwotICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVM
VDsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX0RFUFRI
X1NURU5DSUw7Ci0gICAgICAgIGRlcHRoU3RlbmNpbERlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOwot
ICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLk1pc2NGbGFncyA9IDA7Ci0KLSAgICAgICAgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRlcHRoU3RlbmNpbERlc2MsIE5VTEwsICZtRGVw
dGhTdGVuY2lsVGV4dHVyZSk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAg
ewotICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGRlcHRoc3RlbmNpbCBzdXJmYWNl
IGZvciBuZXcgc3dhcCBjaGFpbjogMHglMDhYIiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJlbGVh
c2UoKTsKLQotICAgICAgICAgICAgaWYgKGQzZDExOjppc0RldmljZUxvc3RFcnJvcihyZXN1bHQp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBFR0xfQ09OVEVYVF9MT1NU
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBFR0xfQkFEX0FMTE9DOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobURlcHRoU3RlbmNpbFRleHR1cmUsICJEZXB0
aCBzdGVuY2lsIHRleHR1cmUiKTsKLQotICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURl
cHRoU3RlbmNpbFZpZXcobURlcHRoU3RlbmNpbFRleHR1cmUsIE5VTEwsICZtRGVwdGhTdGVuY2ls
RFNWaWV3KTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNk
MTE6OlNldERlYnVnTmFtZShtRGVwdGhTdGVuY2lsRFNWaWV3LCAiRGVwdGggc3RlbmNpbCB2aWV3
Iik7Ci0gICAgfQotCi0gICAgbVdpZHRoID0gYmFja2J1ZmZlcldpZHRoOwotICAgIG1IZWlnaHQg
PSBiYWNrYnVmZmVySGVpZ2h0OwotCi0gICAgaWYgKHByZXZpb3VzT2Zmc2NyZWVuVGV4dHVyZSAh
PSBOVUxMKQotICAgIHsKLSAgICAgICAgRDNEMTFfQk9YIHNvdXJjZUJveCA9IHswfTsKLSAgICAg
ICAgc291cmNlQm94LmxlZnQgPSAwOwotICAgICAgICBzb3VyY2VCb3gucmlnaHQgPSBzdGQ6Om1p
bihwcmV2aW91c1dpZHRoLCBtV2lkdGgpOwotICAgICAgICBzb3VyY2VCb3gudG9wID0gc3RkOjpt
YXgocHJldmlvdXNIZWlnaHQgLSBtSGVpZ2h0LCAwKTsKLSAgICAgICAgc291cmNlQm94LmJvdHRv
bSA9IHByZXZpb3VzSGVpZ2h0OwotICAgICAgICBzb3VyY2VCb3guZnJvbnQgPSAwOwotICAgICAg
ICBzb3VyY2VCb3guYmFjayA9IDE7Ci0KLSAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqZGV2
aWNlQ29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotICAgICAgICBjb25z
dCBpbnQgeW9mZnNldCA9IHN0ZDo6bWF4KG1IZWlnaHQgLSBwcmV2aW91c0hlaWdodCwgMCk7Ci0g
ICAgICAgIGRldmljZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihtT2Zmc2NyZWVuVGV4
dHVyZSwgMCwgMCwgeW9mZnNldCwgMCwgcHJldmlvdXNPZmZzY3JlZW5UZXh0dXJlLCAwLCAmc291
cmNlQm94KTsKLQotICAgICAgICBwcmV2aW91c09mZnNjcmVlblRleHR1cmUtPlJlbGVhc2UoKTsK
LQotICAgICAgICBpZiAobVN3YXBDaGFpbikKLSAgICAgICAgewotICAgICAgICAgICAgc3dhcFJl
Y3QoMCwgMCwgbVdpZHRoLCBtSGVpZ2h0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biBFR0xfU1VDQ0VTUzsKLX0KLQotRUdMaW50IFN3YXBDaGFpbjExOjpyZXNpemUoRUdMaW50IGJh
Y2tidWZmZXJXaWR0aCwgRUdMaW50IGJhY2tidWZmZXJIZWlnaHQpCi17Ci0gICAgSUQzRDExRGV2
aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0gICAgaWYgKGRldmljZSA9
PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEVHTF9CQURfQUNDRVNTOwotICAgIH0KLQot
ICAgIC8vIENhbiBvbmx5IGNhbGwgcmVzaXplIGlmIHdlIGhhdmUgYWxyZWFkeSBjcmVhdGVkIG91
ciBzd2FwIGJ1ZmZlciBhbmQgcmVzb3VyY2VzCi0gICAgQVNTRVJUKG1Td2FwQ2hhaW4gJiYgbUJh
Y2tCdWZmZXJUZXh0dXJlICYmIG1CYWNrQnVmZmVyUlRWaWV3KTsKLQotICAgIGlmIChtQmFja0J1
ZmZlclRleHR1cmUpCi0gICAgewotICAgICAgICBtQmFja0J1ZmZlclRleHR1cmUtPlJlbGVhc2Uo
KTsKLSAgICAgICAgbUJhY2tCdWZmZXJUZXh0dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAo
bUJhY2tCdWZmZXJSVFZpZXcpCi0gICAgewotICAgICAgICBtQmFja0J1ZmZlclJUVmlldy0+UmVs
ZWFzZSgpOwotICAgICAgICBtQmFja0J1ZmZlclJUVmlldyA9IE5VTEw7Ci0gICAgfQotCi0gICAg
Ly8gUmVzaXplIHN3YXAgY2hhaW4KLSAgICBEWEdJX0ZPUk1BVCBiYWNrYnVmZmVyRFhHSUZvcm1h
dCA9IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0
KTsKLSAgICBIUkVTVUxUIHJlc3VsdCA9IG1Td2FwQ2hhaW4tPlJlc2l6ZUJ1ZmZlcnMoMiwgYmFj
a2J1ZmZlcldpZHRoLCBiYWNrYnVmZmVySGVpZ2h0LCBiYWNrYnVmZmVyRFhHSUZvcm1hdCwgMCk7
Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIoIkVycm9yIHJl
c2l6aW5nIHN3YXAgY2hhaW4gYnVmZmVyczogMHglMDhYIiwgcmVzdWx0KTsKLSAgICAgICAgcmVs
ZWFzZSgpOwotCi0gICAgICAgIGlmIChkM2QxMTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEVHTF9DT05URVhUX0xPU1Q7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRUdMX0JBRF9B
TExPQzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlc3VsdCA9IG1Td2FwQ2hhaW4tPkdldEJ1
ZmZlcigwLCBfX3V1aWRvZihJRDNEMTFUZXh0dXJlMkQpLCAoTFBWT0lEKikmbUJhY2tCdWZmZXJU
ZXh0dXJlKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIGlmIChTVUNDRUVE
RUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUJhY2tCdWZm
ZXJUZXh0dXJlLCAiQmFjayBidWZmZXIgdGV4dHVyZSIpOwotICAgIH0KLQotICAgIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0VmlldyhtQmFja0J1ZmZlclRleHR1cmUsIE5VTEws
ICZtQmFja0J1ZmZlclJUVmlldyk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAg
ICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBkM2QxMTo6U2V0RGVidWdO
YW1lKG1CYWNrQnVmZmVyUlRWaWV3LCAiQmFjayBidWZmZXIgcmVuZGVyIHRhcmdldCIpOwotICAg
IH0KLQotICAgIHJldHVybiByZXNldE9mZnNjcmVlblRleHR1cmUoYmFja2J1ZmZlcldpZHRoLCBi
YWNrYnVmZmVySGVpZ2h0KTsKLX0KLQotRUdMaW50IFN3YXBDaGFpbjExOjpyZXNldChpbnQgYmFj
a2J1ZmZlcldpZHRoLCBpbnQgYmFja2J1ZmZlckhlaWdodCwgRUdMaW50IHN3YXBJbnRlcnZhbCkK
LXsKLSAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0K
LSAgICBpZiAoZGV2aWNlID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gRUdMX0JBRF9B
Q0NFU1M7Ci0gICAgfQotCi0gICAgLy8gUmVsZWFzZSBzcGVjaWZpYyByZXNvdXJjZXMgdG8gZnJl
ZSB1cCBtZW1vcnkgZm9yIHRoZSBuZXcgcmVuZGVyIHRhcmdldCwgd2hpbGUgdGhlCi0gICAgLy8g
b2xkIHJlbmRlciB0YXJnZXQgc3RpbGwgZXhpc3RzIGZvciB0aGUgcHVycG9zZSBvZiBwcmVzZXJ2
aW5nIGl0cyBjb250ZW50cy4KLSAgICBpZiAobVN3YXBDaGFpbikKLSAgICB7Ci0gICAgICAgIG1T
d2FwQ2hhaW4tPlJlbGVhc2UoKTsKLSAgICAgICAgbVN3YXBDaGFpbiA9IE5VTEw7Ci0gICAgfQot
Ci0gICAgaWYgKG1CYWNrQnVmZmVyVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1CYWNrQnVmZmVy
VGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICBtQmFja0J1ZmZlclRleHR1cmUgPSBOVUxMOwot
ICAgIH0KLQotICAgIGlmIChtQmFja0J1ZmZlclJUVmlldykKLSAgICB7Ci0gICAgICAgIG1CYWNr
QnVmZmVyUlRWaWV3LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1CYWNrQnVmZmVyUlRWaWV3ID0gTlVM
TDsKLSAgICB9Ci0KLSAgICBtU3dhcEludGVydmFsID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50
Pihzd2FwSW50ZXJ2YWwpOwotICAgIGlmIChtU3dhcEludGVydmFsID4gNCkKLSAgICB7Ci0gICAg
ICAgIC8vIElEWEdJU3dhcENoYWluOjpQcmVzZW50IGRvY3VtZW50YXRpb24gc3RhdGVzIHRoYXQg
dmFsaWQgc3luYyBpbnRlcnZhbHMgYXJlIGluIHRoZSBbMCw0XSByYW5nZQotICAgICAgICByZXR1
cm4gRUdMX0JBRF9QQVJBTUVURVI7Ci0gICAgfQotCi0gICAgLy8gRUdMIGFsbG93cyBjcmVhdGlu
ZyBhIHN1cmZhY2Ugd2l0aCAweDAgZGltZW5zaW9uLCBob3dldmVyLCBEWEdJIGRvZXMgbm90IGxp
a2UgMHgwIHN3YXBjaGFpbnMKLSAgICBpZiAoYmFja2J1ZmZlcldpZHRoIDwgMSB8fCBiYWNrYnVm
ZmVySGVpZ2h0IDwgMSkKLSAgICB7Ci0gICAgICAgIHJlbGVhc2VPZmZzY3JlZW5UZXh0dXJlKCk7
Ci0gICAgICAgIHJldHVybiBFR0xfU1VDQ0VTUzsKLSAgICB9Ci0KLSAgICBpZiAobVdpbmRvdykK
LSAgICB7Ci0gICAgICAgIElEWEdJRmFjdG9yeSAqZmFjdG9yeSA9IG1SZW5kZXJlci0+Z2V0RHhn
aUZhY3RvcnkoKTsKLQotICAgICAgICBEWEdJX1NXQVBfQ0hBSU5fREVTQyBzd2FwQ2hhaW5EZXNj
ID0gezB9OwotICAgICAgICBzd2FwQ2hhaW5EZXNjLkJ1ZmZlckNvdW50ID0gMjsKLSAgICAgICAg
c3dhcENoYWluRGVzYy5CdWZmZXJEZXNjLkZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVy
YnVmZmVyRm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0KTsKLSAgICAgICAgc3dhcENoYWluRGVzYy5C
dWZmZXJEZXNjLldpZHRoID0gYmFja2J1ZmZlcldpZHRoOwotICAgICAgICBzd2FwQ2hhaW5EZXNj
LkJ1ZmZlckRlc2MuSGVpZ2h0ID0gYmFja2J1ZmZlckhlaWdodDsKLSAgICAgICAgc3dhcENoYWlu
RGVzYy5CdWZmZXJEZXNjLlNjYWxpbmcgPSBEWEdJX01PREVfU0NBTElOR19VTlNQRUNJRklFRDsK
LSAgICAgICAgc3dhcENoYWluRGVzYy5CdWZmZXJEZXNjLlNjYW5saW5lT3JkZXJpbmcgPSBEWEdJ
X01PREVfU0NBTkxJTkVfT1JERVJfVU5TUEVDSUZJRUQ7Ci0gICAgICAgIHN3YXBDaGFpbkRlc2Mu
QnVmZmVyRGVzYy5SZWZyZXNoUmF0ZS5OdW1lcmF0b3IgPSAwOwotICAgICAgICBzd2FwQ2hhaW5E
ZXNjLkJ1ZmZlckRlc2MuUmVmcmVzaFJhdGUuRGVub21pbmF0b3IgPSAxOwotICAgICAgICBzd2Fw
Q2hhaW5EZXNjLkJ1ZmZlclVzYWdlID0gRFhHSV9VU0FHRV9SRU5ERVJfVEFSR0VUX09VVFBVVDsK
LSAgICAgICAgc3dhcENoYWluRGVzYy5GbGFncyA9IDA7Ci0gICAgICAgIHN3YXBDaGFpbkRlc2Mu
T3V0cHV0V2luZG93ID0gbVdpbmRvdzsKLSAgICAgICAgc3dhcENoYWluRGVzYy5TYW1wbGVEZXNj
LkNvdW50ID0gMTsKLSAgICAgICAgc3dhcENoYWluRGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAw
OwotICAgICAgICBzd2FwQ2hhaW5EZXNjLldpbmRvd2VkID0gVFJVRTsKLQotICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IGZhY3RvcnktPkNyZWF0ZVN3YXBDaGFpbihkZXZpY2UsICZzd2FwQ2hhaW5E
ZXNjLCAmbVN3YXBDaGFpbik7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYWRkaXRpb25hbCBzd2FwIGNo
YWlucyBvciBvZmZzY3JlZW4gc3VyZmFjZXM6ICUwOGxYIiwgcmVzdWx0KTsKLSAgICAgICAgICAg
IHJlbGVhc2UoKTsKLQotICAgICAgICAgICAgaWYgKGQzZDExOjppc0RldmljZUxvc3RFcnJvcihy
ZXN1bHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBFR0xfQ09OVEVY
VF9MT1NUOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIC8vIFdlIGNhbm5vdCBjcmVhdGUgYSBzd2FwIGNoYWluIGZvciBhbiBI
V05EIHRoYXQgaXMgb3duZWQgYnkgYSBkaWZmZXJlbnQgcHJvY2VzcyBvbiBzb21lIHZlcnNpb25z
IG9mCi0gICAgICAgICAgICAgICAgLy8gd2luZG93cwotICAgICAgICAgICAgICAgIERXT1JEIGN1
cnJlbnRQcm9jZXNzSWQgPSBHZXRDdXJyZW50UHJvY2Vzc0lkKCk7Ci0gICAgICAgICAgICAgICAg
RFdPUkQgd25kUHJvY2Vzc0lkOwotICAgICAgICAgICAgICAgIEdldFdpbmRvd1RocmVhZFByb2Nl
c3NJZChtV2luZG93LCAmd25kUHJvY2Vzc0lkKTsKLQotICAgICAgICAgICAgICAgIGlmIChjdXJy
ZW50UHJvY2Vzc0lkICE9IHduZFByb2Nlc3NJZCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBzd2FwIGNoYWluLCB3aW5kb3cgb3du
ZWQgYnkgZGlmZmVyZW50IHByb2Nlc3MiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVH
TF9CQURfTkFUSVZFX1dJTkRPVzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVHTF9C
QURfQUxMT0M7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgcmVzdWx0ID0gbVN3YXBDaGFpbi0+R2V0QnVmZmVyKDAsIF9fdXVpZG9mKElEM0Qx
MVRleHR1cmUyRCksIChMUFZPSUQqKSZtQmFja0J1ZmZlclRleHR1cmUpOwotICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1CYWNr
QnVmZmVyVGV4dHVyZSwgIkJhY2sgYnVmZmVyIHRleHR1cmUiKTsKLQotICAgICAgICByZXN1bHQg
PSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobUJhY2tCdWZmZXJUZXh0dXJlLCBOVUxM
LCAmbUJhY2tCdWZmZXJSVFZpZXcpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkp
OwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1CYWNrQnVmZmVyUlRWaWV3LCAiQmFjayBi
dWZmZXIgcmVuZGVyIHRhcmdldCIpOwotICAgIH0KLQotICAgIC8vIElmIHdlIGFyZSByZXNpemlu
ZyB0aGUgc3dhcCBjaGFpbiwgd2UgZG9uJ3Qgd2lzaCB0byByZWNyZWF0ZSBhbGwgdGhlIHN0YXRp
YyByZXNvdXJjZXMKLSAgICBpZiAoIW1QYXNzVGhyb3VnaFJlc291cmNlc0luaXQpCi0gICAgewot
ICAgICAgICBtUGFzc1Rocm91Z2hSZXNvdXJjZXNJbml0ID0gdHJ1ZTsKLSAgICAgICAgaW5pdFBh
c3NUaHJvdWdoUmVzb3VyY2VzKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc2V0T2Zmc2NyZWVu
VGV4dHVyZShiYWNrYnVmZmVyV2lkdGgsIGJhY2tidWZmZXJIZWlnaHQpOwotfQotCi12b2lkIFN3
YXBDaGFpbjExOjppbml0UGFzc1Rocm91Z2hSZXNvdXJjZXMoKQotewotICAgIElEM0QxMURldmlj
ZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLQotICAgIEFTU0VSVChkZXZpY2Ug
IT0gTlVMTCk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgb3VyIHJlc291cmNlcyBhcmUgYWxsIG5vdCBh
bGxvY2F0ZWQsIHdoZW4gd2UgY3JlYXRlCi0gICAgQVNTRVJUKG1RdWFkVkIgPT0gTlVMTCAmJiBt
UGFzc1Rocm91Z2hTYW1wbGVyID09IE5VTEwpOwotICAgIEFTU0VSVChtUGFzc1Rocm91Z2hJTCA9
PSBOVUxMICYmIG1QYXNzVGhyb3VnaFZTID09IE5VTEwgJiYgbVBhc3NUaHJvdWdoUFMgPT0gTlVM
TCk7Ci0KLSAgICBEM0QxMV9CVUZGRVJfREVTQyB2YkRlc2M7Ci0gICAgdmJEZXNjLkJ5dGVXaWR0
aCA9IHNpemVvZihkM2QxMTo6UG9zaXRpb25UZXhDb29yZFZlcnRleCkgKiA0OwotICAgIHZiRGVz
Yy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZTkFNSUM7Ci0gICAgdmJEZXNjLkJpbmRGbGFncyA9IEQz
RDExX0JJTkRfVkVSVEVYX0JVRkZFUjsKLSAgICB2YkRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSBEM0Qx
MV9DUFVfQUNDRVNTX1dSSVRFOwotICAgIHZiRGVzYy5NaXNjRmxhZ3MgPSAwOwotICAgIHZiRGVz
Yy5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKLQotICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVCdWZmZXIoJnZiRGVzYywgTlVMTCwgJm1RdWFkVkIpOwotICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7Ci0gICAgZDNkMTE6OlNldERlYnVnTmFtZShtUXVhZFZCLCAiU3dhcCBj
aGFpbiBxdWFkIHZlcnRleCBidWZmZXIiKTsKLQotICAgIEQzRDExX1NBTVBMRVJfREVTQyBzYW1w
bGVyRGVzYzsKLSAgICBzYW1wbGVyRGVzYy5GaWx0ZXIgPSBEM0QxMV9GSUxURVJfTUlOX01BR19N
SVBfUE9JTlQ7Ci0gICAgc2FtcGxlckRlc2MuQWRkcmVzc1UgPSBEM0QxMV9URVhUVVJFX0FERFJF
U1NfQ0xBTVA7Ci0gICAgc2FtcGxlckRlc2MuQWRkcmVzc1YgPSBEM0QxMV9URVhUVVJFX0FERFJF
U1NfQ0xBTVA7Ci0gICAgc2FtcGxlckRlc2MuQWRkcmVzc1cgPSBEM0QxMV9URVhUVVJFX0FERFJF
U1NfQ0xBTVA7Ci0gICAgc2FtcGxlckRlc2MuTWlwTE9EQmlhcyA9IDAuMGY7Ci0gICAgc2FtcGxl
ckRlc2MuTWF4QW5pc290cm9weSA9IDA7Ci0gICAgc2FtcGxlckRlc2MuQ29tcGFyaXNvbkZ1bmMg
PSBEM0QxMV9DT01QQVJJU09OX05FVkVSOwotICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzBd
ID0gMC4wZjsKLSAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclsxXSA9IDAuMGY7Ci0gICAgc2Ft
cGxlckRlc2MuQm9yZGVyQ29sb3JbMl0gPSAwLjBmOwotICAgIHNhbXBsZXJEZXNjLkJvcmRlckNv
bG9yWzNdID0gMC4wZjsKLSAgICBzYW1wbGVyRGVzYy5NaW5MT0QgPSAwOwotICAgIHNhbXBsZXJE
ZXNjLk1heExPRCA9IEQzRDExX0ZMT0FUMzJfTUFYOwotCi0gICAgcmVzdWx0ID0gZGV2aWNlLT5D
cmVhdGVTYW1wbGVyU3RhdGUoJnNhbXBsZXJEZXNjLCAmbVBhc3NUaHJvdWdoU2FtcGxlcik7Ci0g
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Q
YXNzVGhyb3VnaFNhbXBsZXIsICJTd2FwIGNoYWluIHBhc3MgdGhyb3VnaCBzYW1wbGVyIik7Ci0K
LSAgICBEM0QxMV9JTlBVVF9FTEVNRU5UX0RFU0MgcXVhZExheW91dFtdID0KLSAgICB7Ci0gICAg
ICAgIHsgIlBPU0lUSU9OIiwgMCwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCAwLCAwLCBEM0Qx
MV9JTlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAgfSwKLSAgICAgICAgeyAiVEVYQ09PUkQiLCAwLCBE
WEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDAsIDgsIEQzRDExX0lOUFVUX1BFUl9WRVJURVhfREFU
QSwgMCB9LAotICAgIH07Ci0KLSAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUlucHV0TGF5b3V0
KHF1YWRMYXlvdXQsIDIsIGdfVlNfUGFzc3Rocm91Z2gsIHNpemVvZihnX1ZTX1Bhc3N0aHJvdWdo
KSwgJm1QYXNzVGhyb3VnaElMKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAg
IGQzZDExOjpTZXREZWJ1Z05hbWUobVBhc3NUaHJvdWdoSUwsICJTd2FwIGNoYWluIHBhc3MgdGhy
b3VnaCBsYXlvdXQiKTsKLQotICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVy
KGdfVlNfUGFzc3Rocm91Z2gsIHNpemVvZihnX1ZTX1Bhc3N0aHJvdWdoKSwgTlVMTCwgJm1QYXNz
VGhyb3VnaFZTKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIGQzZDExOjpT
ZXREZWJ1Z05hbWUobVBhc3NUaHJvdWdoVlMsICJTd2FwIGNoYWluIHBhc3MgdGhyb3VnaCB2ZXJ0
ZXggc2hhZGVyIik7Ci0KLSAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdf
UFNfUGFzc3Rocm91Z2hSR0JBLCBzaXplb2YoZ19QU19QYXNzdGhyb3VnaFJHQkEpLCBOVUxMLCAm
bVBhc3NUaHJvdWdoUFMpOwotICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgZDNk
MTE6OlNldERlYnVnTmFtZShtUGFzc1Rocm91Z2hQUywgIlN3YXAgY2hhaW4gcGFzcyB0aHJvdWdo
IHBpeGVsIHNoYWRlciIpOwotfQotCi0vLyBwYXJhbWV0ZXJzIHNob3VsZCBiZSB2YWxpZGF0ZWQv
Y2xhbXBlZCBieSBjYWxsZXIKLUVHTGludCBTd2FwQ2hhaW4xMTo6c3dhcFJlY3QoRUdMaW50IHgs
IEVHTGludCB5LCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQpCi17Ci0gICAgaWYgKCFtU3dh
cENoYWluKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEVHTF9TVUNDRVNTOwotICAgIH0KLQotICAg
IElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLSAgICBJRDNE
MTFEZXZpY2VDb250ZXh0ICpkZXZpY2VDb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250
ZXh0KCk7Ci0KLSAgICAvLyBTZXQgdmVydGljZXMKLSAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VS
Q0UgbWFwcGVkUmVzb3VyY2U7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2VDb250ZXh0LT5N
YXAobVF1YWRWQiwgMCwgRDNEMTFfTUFQX1dSSVRFX0RJU0NBUkQsIDAsICZtYXBwZWRSZXNvdXJj
ZSk7Ci0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEVHTF9C
QURfQUNDRVNTOwotICAgIH0KLQotICAgIGQzZDExOjpQb3NpdGlvblRleENvb3JkVmVydGV4ICp2
ZXJ0aWNlcyA9IHN0YXRpY19jYXN0PGQzZDExOjpQb3NpdGlvblRleENvb3JkVmVydGV4Kj4obWFw
cGVkUmVzb3VyY2UucERhdGEpOwotCi0gICAgLy8gQ3JlYXRlIGEgcXVhZCBpbiBob21vZ2VuZW91
cyBjb29yZGluYXRlcwotICAgIGZsb2F0IHgxID0gKHggLyBmbG9hdChtV2lkdGgpKSAqIDIuMGYg
LSAxLjBmOwotICAgIGZsb2F0IHkxID0gKHkgLyBmbG9hdChtSGVpZ2h0KSkgKiAyLjBmIC0gMS4w
ZjsKLSAgICBmbG9hdCB4MiA9ICgoeCArIHdpZHRoKSAvIGZsb2F0KG1XaWR0aCkpICogMi4wZiAt
IDEuMGY7Ci0gICAgZmxvYXQgeTIgPSAoKHkgKyBoZWlnaHQpIC8gZmxvYXQobUhlaWdodCkpICog
Mi4wZiAtIDEuMGY7Ci0KLSAgICBmbG9hdCB1MSA9IHggLyBmbG9hdChtV2lkdGgpOwotICAgIGZs
b2F0IHYxID0geSAvIGZsb2F0KG1IZWlnaHQpOwotICAgIGZsb2F0IHUyID0gKHggKyB3aWR0aCkg
LyBmbG9hdChtV2lkdGgpOwotICAgIGZsb2F0IHYyID0gKHkgKyBoZWlnaHQpIC8gZmxvYXQobUhl
aWdodCk7Ci0KLSAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNb
MF0sIHgxLCB5MSwgdTEsIHYxKTsKLSAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRl
eCgmdmVydGljZXNbMV0sIHgxLCB5MiwgdTEsIHYyKTsKLSAgICBkM2QxMTo6U2V0UG9zaXRpb25U
ZXhDb29yZFZlcnRleCgmdmVydGljZXNbMl0sIHgyLCB5MSwgdTIsIHYxKTsKLSAgICBkM2QxMTo6
U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNbM10sIHgyLCB5MiwgdTIsIHYyKTsK
LQotICAgIGRldmljZUNvbnRleHQtPlVubWFwKG1RdWFkVkIsIDApOwotCi0gICAgc3RhdGljIFVJ
TlQgc3RyaWRlID0gc2l6ZW9mKGQzZDExOjpQb3NpdGlvblRleENvb3JkVmVydGV4KTsKLSAgICBz
dGF0aWMgVUlOVCBzdGFydElkeCA9IDA7Ci0gICAgZGV2aWNlQ29udGV4dC0+SUFTZXRWZXJ0ZXhC
dWZmZXJzKDAsIDEsICZtUXVhZFZCLCAmc3RyaWRlLCAmc3RhcnRJZHgpOwotCi0gICAgLy8gQXBw
bHkgc3RhdGUKLSAgICBkZXZpY2VDb250ZXh0LT5PTVNldERlcHRoU3RlbmNpbFN0YXRlKE5VTEws
IDB4RkZGRkZGRkYpOwotCi0gICAgc3RhdGljIGNvbnN0IGZsb2F0IGJsZW5kRmFjdG9yWzRdID0g
eyAxLjBmLCAxLjBmLCAxLjBmLCAxLjBmIH07Ci0gICAgZGV2aWNlQ29udGV4dC0+T01TZXRCbGVu
ZFN0YXRlKE5VTEwsIGJsZW5kRmFjdG9yLCAweEZGRkZGRkYpOwotCi0gICAgZGV2aWNlQ29udGV4
dC0+UlNTZXRTdGF0ZShOVUxMKTsKLQotICAgIC8vIEFwcGx5IHNoYWRlcnMKLSAgICBkZXZpY2VD
b250ZXh0LT5JQVNldElucHV0TGF5b3V0KG1QYXNzVGhyb3VnaElMKTsKLSAgICBkZXZpY2VDb250
ZXh0LT5JQVNldFByaW1pdGl2ZVRvcG9sb2d5KEQzRF9QUklNSVRJVkVfVE9QT0xPR1lfVFJJQU5H
TEVTVFJJUCk7Ci0gICAgZGV2aWNlQ29udGV4dC0+VlNTZXRTaGFkZXIobVBhc3NUaHJvdWdoVlMs
IE5VTEwsIDApOwotICAgIGRldmljZUNvbnRleHQtPlBTU2V0U2hhZGVyKG1QYXNzVGhyb3VnaFBT
LCBOVUxMLCAwKTsKLSAgICBkZXZpY2VDb250ZXh0LT5HU1NldFNoYWRlcihOVUxMLCBOVUxMLCAw
KTsKLQotICAgIC8vIEFwcGx5IHJlbmRlciB0YXJnZXRzCi0gICAgbVJlbmRlcmVyLT5zZXRPbmVU
aW1lUmVuZGVyVGFyZ2V0KG1CYWNrQnVmZmVyUlRWaWV3KTsKLQotICAgIC8vIFNldCB0aGUgdmll
d3BvcnQKLSAgICBEM0QxMV9WSUVXUE9SVCB2aWV3cG9ydDsKLSAgICB2aWV3cG9ydC5Ub3BMZWZ0
WCA9IDA7Ci0gICAgdmlld3BvcnQuVG9wTGVmdFkgPSAwOwotICAgIHZpZXdwb3J0LldpZHRoID0g
bVdpZHRoOwotICAgIHZpZXdwb3J0LkhlaWdodCA9IG1IZWlnaHQ7Ci0gICAgdmlld3BvcnQuTWlu
RGVwdGggPSAwLjBmOwotICAgIHZpZXdwb3J0Lk1heERlcHRoID0gMS4wZjsKLSAgICBkZXZpY2VD
b250ZXh0LT5SU1NldFZpZXdwb3J0cygxLCAmdmlld3BvcnQpOwotCi0gICAgLy8gQXBwbHkgdGV4
dHVyZXMKLSAgICBkZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlclJlc291cmNlcygwLCAxLCAmbU9m
ZnNjcmVlblNSVmlldyk7Ci0gICAgZGV2aWNlQ29udGV4dC0+UFNTZXRTYW1wbGVycygwLCAxLCAm
bVBhc3NUaHJvdWdoU2FtcGxlcik7Ci0KLSAgICAvLyBEcmF3Ci0gICAgZGV2aWNlQ29udGV4dC0+
RHJhdyg0LCAwKTsKLQotI2lmIEFOR0xFX0ZPUkNFX1ZTWU5DX09GRgotICAgIHJlc3VsdCA9IG1T
d2FwQ2hhaW4tPlByZXNlbnQoMCwgMCk7Ci0jZWxzZQotICAgIHJlc3VsdCA9IG1Td2FwQ2hhaW4t
PlByZXNlbnQobVN3YXBJbnRlcnZhbCwgMCk7Ci0jZW5kaWYKLQotICAgIGlmIChyZXN1bHQgPT0g
RFhHSV9FUlJPUl9ERVZJQ0VfUkVNT1ZFRCkKLSAgICB7Ci0gICAgICAgIEhSRVNVTFQgcmVtb3Zl
ZFJlYXNvbiA9IGRldmljZS0+R2V0RGV2aWNlUmVtb3ZlZFJlYXNvbigpOwotICAgICAgICBFUlIo
IlByZXNlbnQgZmFpbGVkOiB0aGUgRDNEMTEgZGV2aWNlIHdhcyByZW1vdmVkOiAweCUwOFgiLCBy
ZW1vdmVkUmVhc29uKTsKLSAgICAgICAgcmV0dXJuIEVHTF9DT05URVhUX0xPU1Q7Ci0gICAgfQot
ICAgIGVsc2UgaWYgKHJlc3VsdCA9PSBEWEdJX0VSUk9SX0RFVklDRV9SRVNFVCkKLSAgICB7Ci0g
ICAgICAgIEVSUigiUHJlc2VudCBmYWlsZWQ6IHRoZSBEM0QxMSBkZXZpY2Ugd2FzIHJlc2V0IGZy
b20gYSBiYWQgY29tbWFuZC4iKTsKLSAgICAgICAgcmV0dXJuIEVHTF9DT05URVhUX0xPU1Q7Ci0g
ICAgfQotICAgIGVsc2UgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgRVJSKCJQ
cmVzZW50IGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgMHglMDhYIiwgcmVzdWx0KTsKLSAgICB9Ci0K
LSAgICAvLyBVbmJpbmQKLSAgICBzdGF0aWMgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpjb25z
dCBudWxsU1JWID0gTlVMTDsKLSAgICBkZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlclJlc291cmNl
cygwLCAxLCAmbnVsbFNSVik7Ci0KLSAgICBtUmVuZGVyZXItPnVuYXBwbHlSZW5kZXJUYXJnZXRz
KCk7Ci0gICAgbVJlbmRlcmVyLT5tYXJrQWxsU3RhdGVEaXJ0eSgpOwotCi0gICAgcmV0dXJuIEVH
TF9TVUNDRVNTOwotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHRleHR1cmUuCi0vLyBj
YWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHRleHR1cmUKLUlEM0QxMVRleHR1cmUy
RCAqU3dhcENoYWluMTE6OmdldE9mZnNjcmVlblRleHR1cmUoKQotewotICAgIGlmIChtT2Zmc2Ny
ZWVuVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5BZGRSZWYoKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gbU9mZnNjcmVlblRleHR1cmU7Ci19Ci0KLS8vIEluY3JlbWVu
dHMgcmVmY291bnQgb24gdmlldy4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJu
ZWQgdmlldwotSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqU3dhcENoYWluMTE6OmdldFJlbmRlclRh
cmdldCgpCi17Ci0gICAgaWYgKG1PZmZzY3JlZW5SVFZpZXcpCi0gICAgewotICAgICAgICBtT2Zm
c2NyZWVuUlRWaWV3LT5BZGRSZWYoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbU9mZnNjcmVlblJU
VmlldzsKLX0KLQotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiB2aWV3LgotLy8gY2FsbGVyIG11
c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCB2aWV3Ci1JRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcg
KlN3YXBDaGFpbjExOjpnZXRSZW5kZXJUYXJnZXRTaGFkZXJSZXNvdXJjZSgpCi17Ci0gICAgaWYg
KG1PZmZzY3JlZW5TUlZpZXcpCi0gICAgewotICAgICAgICBtT2Zmc2NyZWVuU1JWaWV3LT5BZGRS
ZWYoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbU9mZnNjcmVlblNSVmlldzsKLX0KLQotLy8gSW5j
cmVtZW50cyByZWZjb3VudCBvbiB2aWV3LgotLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSBy
ZXR1cm5lZCB2aWV3Ci1JRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpTd2FwQ2hhaW4xMTo6Z2V0RGVw
dGhTdGVuY2lsKCkKLXsKLSAgICBpZiAobURlcHRoU3RlbmNpbERTVmlldykKLSAgICB7Ci0gICAg
ICAgIG1EZXB0aFN0ZW5jaWxEU1ZpZXctPkFkZFJlZigpOwotICAgIH0KLQotICAgIHJldHVybiBt
RGVwdGhTdGVuY2lsRFNWaWV3OwotfQotCi1JRDNEMTFUZXh0dXJlMkQgKlN3YXBDaGFpbjExOjpn
ZXREZXB0aFN0ZW5jaWxUZXh0dXJlKCkKLXsKLSAgICBpZiAobURlcHRoU3RlbmNpbFRleHR1cmUp
Ci0gICAgewotICAgICAgICBtRGVwdGhTdGVuY2lsVGV4dHVyZS0+QWRkUmVmKCk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWxUZXh0dXJlOwotfQotCi1Td2FwQ2hhaW4xMSAqU3dh
cENoYWluMTE6Om1ha2VTd2FwQ2hhaW4xMShTd2FwQ2hhaW4gKnN3YXBDaGFpbikKLXsKLSAgICBB
U1NFUlQoSEFTX0RZTkFNSUNfVFlQRShyeDo6U3dhcENoYWluMTEqLCBzd2FwQ2hhaW4pKTsKLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8cng6OlN3YXBDaGFpbjExKj4oc3dhcENoYWluKTsKLX0KLQot
dm9pZCBTd2FwQ2hhaW4xMTo6cmVjcmVhdGUoKQotewotICAgIC8vIHBvc3NpYmx5IHNob3VsZCB1
c2UgdGhpcyBtZXRob2QgaW5zdGVhZCBvZiByZXNldAotfQotCi19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1N3YXBDaGFpbjExLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1N3YXBDaGFp
bjExLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwMDEwNDYwMmUzNWIwYmNiYTEx
MDM5YTE2ZWJmYzYxMTE2MWVmNjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9Td2FwQ2hhaW4xMS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
LS8vCi0KLS8vIFN3YXBDaGFpbjExLmg6IERlZmluZXMgYSBiYWNrLWVuZCBzcGVjaWZpYyBjbGFz
cyBmb3IgdGhlIEQzRDExIHN3YXAgY2hhaW4uCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVS
X1NXQVBDSEFJTjExX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9TV0FQQ0hBSU4xMV9I
XwotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvU3dhcENoYWluLmgiCi0KLW5hbWVzcGFjZSByeAotewotY2xhc3MgUmVuZGVyZXIx
MTsKLQotY2xhc3MgU3dhcENoYWluMTEgOiBwdWJsaWMgU3dhcENoYWluCi17Ci0gIHB1YmxpYzoK
LSAgICBTd2FwQ2hhaW4xMShSZW5kZXJlcjExICpyZW5kZXJlciwgSFdORCB3aW5kb3csIEhBTkRM
RSBzaGFyZUhhbmRsZSwKLSAgICAgICAgICAgICAgICBHTGVudW0gYmFja0J1ZmZlckZvcm1hdCwg
R0xlbnVtIGRlcHRoQnVmZmVyRm9ybWF0KTsKLSAgICB2aXJ0dWFsIH5Td2FwQ2hhaW4xMSgpOwot
Ci0gICAgRUdMaW50IHJlc2l6ZShFR0xpbnQgYmFja2J1ZmZlcldpZHRoLCBFR0xpbnQgYmFja2J1
ZmZlckhlaWdodCk7Ci0gICAgdmlydHVhbCBFR0xpbnQgcmVzZXQoRUdMaW50IGJhY2tidWZmZXJX
aWR0aCwgRUdMaW50IGJhY2tidWZmZXJIZWlnaHQsIEVHTGludCBzd2FwSW50ZXJ2YWwpOwotICAg
IHZpcnR1YWwgRUdMaW50IHN3YXBSZWN0KEVHTGludCB4LCBFR0xpbnQgeSwgRUdMaW50IHdpZHRo
LCBFR0xpbnQgaGVpZ2h0KTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjcmVhdGUoKTsKLQotICAgIHZp
cnR1YWwgSUQzRDExVGV4dHVyZTJEICpnZXRPZmZzY3JlZW5UZXh0dXJlKCk7Ci0gICAgdmlydHVh
bCBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpnZXRSZW5kZXJUYXJnZXQoKTsKLSAgICB2aXJ0dWFs
IElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0UmVuZGVyVGFyZ2V0U2hhZGVyUmVzb3VyY2Uo
KTsKLQotICAgIHZpcnR1YWwgSUQzRDExVGV4dHVyZTJEICpnZXREZXB0aFN0ZW5jaWxUZXh0dXJl
KCk7Ci0gICAgdmlydHVhbCBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpnZXREZXB0aFN0ZW5jaWwo
KTsKLQotICAgIEVHTGludCBnZXRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1XaWR0aDsgfQotICAg
IEVHTGludCBnZXRIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtSGVpZ2h0OyB9Ci0KLSAgICBzdGF0
aWMgU3dhcENoYWluMTEgKm1ha2VTd2FwQ2hhaW4xMShTd2FwQ2hhaW4gKnN3YXBDaGFpbik7Ci0K
LSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU3dhcENoYWluMTEpOwot
Ci0gICAgdm9pZCByZWxlYXNlKCk7Ci0gICAgdm9pZCBpbml0UGFzc1Rocm91Z2hSZXNvdXJjZXMo
KTsKLSAgICB2b2lkIHJlbGVhc2VPZmZzY3JlZW5UZXh0dXJlKCk7Ci0gICAgRUdMaW50IHJlc2V0
T2Zmc2NyZWVuVGV4dHVyZShpbnQgYmFja2J1ZmZlcldpZHRoLCBpbnQgYmFja2J1ZmZlckhlaWdo
dCk7Ci0KLSAgICBSZW5kZXJlcjExICptUmVuZGVyZXI7Ci0gICAgRUdMaW50IG1IZWlnaHQ7Ci0g
ICAgRUdMaW50IG1XaWR0aDsKLSAgICBib29sIG1BcHBDcmVhdGVkU2hhcmVIYW5kbGU7Ci0gICAg
dW5zaWduZWQgaW50IG1Td2FwSW50ZXJ2YWw7Ci0gICAgYm9vbCBtUGFzc1Rocm91Z2hSZXNvdXJj
ZXNJbml0OwotCi0gICAgSURYR0lTd2FwQ2hhaW4gKm1Td2FwQ2hhaW47Ci0KLSAgICBJRDNEMTFU
ZXh0dXJlMkQgKm1CYWNrQnVmZmVyVGV4dHVyZTsKLSAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3
ICptQmFja0J1ZmZlclJUVmlldzsKLQotICAgIElEM0QxMVRleHR1cmUyRCAqbU9mZnNjcmVlblRl
eHR1cmU7Ci0gICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqbU9mZnNjcmVlblJUVmlldzsKLSAg
ICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKm1PZmZzY3JlZW5TUlZpZXc7Ci0KLSAgICBJRDNE
MTFUZXh0dXJlMkQgKm1EZXB0aFN0ZW5jaWxUZXh0dXJlOwotICAgIElEM0QxMURlcHRoU3RlbmNp
bFZpZXcgKm1EZXB0aFN0ZW5jaWxEU1ZpZXc7Ci0KLSAgICBJRDNEMTFCdWZmZXIgKm1RdWFkVkI7
Ci0gICAgSUQzRDExU2FtcGxlclN0YXRlICptUGFzc1Rocm91Z2hTYW1wbGVyOwotICAgIElEM0Qx
MUlucHV0TGF5b3V0ICptUGFzc1Rocm91Z2hJTDsKLSAgICBJRDNEMTFWZXJ0ZXhTaGFkZXIgKm1Q
YXNzVGhyb3VnaFZTOwotICAgIElEM0QxMVBpeGVsU2hhZGVyICptUGFzc1Rocm91Z2hQUzsKLX07
Ci0KLX0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfU1dBUENIQUlOMTFfSF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvU3dh
cENoYWluOS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL1N3YXBDaGFpbjkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTdjZTFj
YjAzNWI2MDNlZjYxYzQ5MTYxYzM5ZDA0MDEwZmM0MDEzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvU3dhcENoYWluOS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MzggKzAs
MCBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEy
LTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBT
d2FwQ2hhaW45LmNwcDogSW1wbGVtZW50cyBhIGJhY2stZW5kIHNwZWNpZmljIGNsYXNzIGZvciB0
aGUgRDNEOSBzd2FwIGNoYWluLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1N3YXBD
aGFpbjkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXI5X3V0aWxzLmgi
Ci0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyOS5oIgotCi1uYW1lc3BhY2Ug
cngKLXsKLQotU3dhcENoYWluOTo6U3dhcENoYWluOShSZW5kZXJlcjkgKnJlbmRlcmVyLCBIV05E
IHdpbmRvdywgSEFORExFIHNoYXJlSGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICBHTGVu
dW0gYmFja0J1ZmZlckZvcm1hdCwgR0xlbnVtIGRlcHRoQnVmZmVyRm9ybWF0KQotICAgIDogbVJl
bmRlcmVyKHJlbmRlcmVyKSwgU3dhcENoYWluKHdpbmRvdywgc2hhcmVIYW5kbGUsIGJhY2tCdWZm
ZXJGb3JtYXQsIGRlcHRoQnVmZmVyRm9ybWF0KQotewotICAgIG1Td2FwQ2hhaW4gPSBOVUxMOwot
ICAgIG1CYWNrQnVmZmVyID0gTlVMTDsKLSAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICBt
UmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICBtT2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7Ci0gICAg
bVdpZHRoID0gLTE7Ci0gICAgbUhlaWdodCA9IC0xOwotICAgIG1Td2FwSW50ZXJ2YWwgPSAtMTsK
LX0KLQotU3dhcENoYWluOTo6flN3YXBDaGFpbjkoKQotewotICAgIHJlbGVhc2UoKTsKLX0KLQot
dm9pZCBTd2FwQ2hhaW45OjpyZWxlYXNlKCkKLXsKLSAgICBpZiAobVN3YXBDaGFpbikKLSAgICB7
Ci0gICAgICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsKLSAgICAgICAgbVN3YXBDaGFpbiA9IE5V
TEw7Ci0gICAgfQotCi0gICAgaWYgKG1CYWNrQnVmZmVyKQotICAgIHsKLSAgICAgICAgbUJhY2tC
dWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJhY2tCdWZmZXIgPSBOVUxMOwotICAgIH0KLQot
ICAgIGlmIChtRGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbURlcHRoU3RlbmNpbC0+UmVs
ZWFzZSgpOwotICAgICAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAo
bVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsK
LSAgICAgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1PZmZzY3Jl
ZW5UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUtPlJlbGVhc2UoKTsK
LSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtV2lu
ZG93KQotICAgICAgICBtU2hhcmVIYW5kbGUgPSBOVUxMOwotfQotCi1zdGF0aWMgRFdPUkQgY29u
dmVydEludGVydmFsKEVHTGludCBpbnRlcnZhbCkKLXsKLSNpZiBBTkdMRV9GT1JDRV9WU1lOQ19P
RkYKLSAgICByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9JTU1FRElBVEU7Ci0jZWxzZQotICAg
IHN3aXRjaChpbnRlcnZhbCkKLSAgICB7Ci0gICAgICBjYXNlIDA6IHJldHVybiBEM0RQUkVTRU5U
X0lOVEVSVkFMX0lNTUVESUFURTsKLSAgICAgIGNhc2UgMTogcmV0dXJuIEQzRFBSRVNFTlRfSU5U
RVJWQUxfT05FOwotICAgICAgY2FzZSAyOiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9UV087
Ci0gICAgICBjYXNlIDM6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX1RIUkVFOwotICAgICAg
Y2FzZSA0OiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9GT1VSOwotICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9E
RUZBVUxUOwotI2VuZGlmCi19Ci0KLUVHTGludCBTd2FwQ2hhaW45OjpyZXNpemUoaW50IGJhY2ti
dWZmZXJXaWR0aCwgaW50IGJhY2tidWZmZXJIZWlnaHQpCi17Ci0gICAgLy8gRDNEOSBkb2VzIG5v
dCBzdXBwb3J0IHJlc2l6aW5nIHN3YXAgY2hhaW5zIHdpdGhvdXQgcmVjcmVhdGluZyB0aGVtCi0g
ICAgcmV0dXJuIHJlc2V0KGJhY2tidWZmZXJXaWR0aCwgYmFja2J1ZmZlckhlaWdodCwgbVN3YXBJ
bnRlcnZhbCk7Ci19Ci0KLUVHTGludCBTd2FwQ2hhaW45OjpyZXNldChpbnQgYmFja2J1ZmZlcldp
ZHRoLCBpbnQgYmFja2J1ZmZlckhlaWdodCwgRUdMaW50IHN3YXBJbnRlcnZhbCkKLXsKLSAgICBJ
RGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0gICAg
aWYgKGRldmljZSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEVHTF9CQURfQUNDRVNT
OwotICAgIH0KLQotICAgIC8vIEV2aWN0IGFsbCBub24tcmVuZGVyIHRhcmdldCB0ZXh0dXJlcyB0
byBzeXN0ZW0gbWVtb3J5IGFuZCByZWxlYXNlIGFsbCByZXNvdXJjZXMKLSAgICAvLyBiZWZvcmUg
cmVhbGxvY2F0aW5nIHRoZW0gdG8gZnJlZSB1cCBhcyBtdWNoIHZpZGVvIG1lbW9yeSBhcyBwb3Nz
aWJsZS4KLSAgICBkZXZpY2UtPkV2aWN0TWFuYWdlZFJlc291cmNlcygpOwotCi0gICAgSFJFU1VM
VCByZXN1bHQ7Ci0KLSAgICAvLyBSZWxlYXNlIHNwZWNpZmljIHJlc291cmNlcyB0byBmcmVlIHVw
IG1lbW9yeSBmb3IgdGhlIG5ldyByZW5kZXIgdGFyZ2V0LCB3aGlsZSB0aGUKLSAgICAvLyBvbGQg
cmVuZGVyIHRhcmdldCBzdGlsbCBleGlzdHMgZm9yIHRoZSBwdXJwb3NlIG9mIHByZXNlcnZpbmcg
aXRzIGNvbnRlbnRzLgotICAgIGlmIChtU3dhcENoYWluKQotICAgIHsKLSAgICAgICAgbVN3YXBD
aGFpbi0+UmVsZWFzZSgpOwotICAgICAgICBtU3dhcENoYWluID0gTlVMTDsKLSAgICB9Ci0KLSAg
ICBpZiAobUJhY2tCdWZmZXIpCi0gICAgewotICAgICAgICBtQmFja0J1ZmZlci0+UmVsZWFzZSgp
OwotICAgICAgICBtQmFja0J1ZmZlciA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1PZmZzY3Jl
ZW5UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUtPlJlbGVhc2UoKTsK
LSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtRGVw
dGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbURlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOwotICAg
ICAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICB9Ci0KLSAgICBIQU5ETEUgKnBTaGFyZUhh
bmRsZSA9IE5VTEw7Ci0gICAgaWYgKCFtV2luZG93ICYmIG1SZW5kZXJlci0+Z2V0U2hhcmVIYW5k
bGVTdXBwb3J0KCkpCi0gICAgewotICAgICAgICBwU2hhcmVIYW5kbGUgPSAmbVNoYXJlSGFuZGxl
OwotICAgIH0KLQotICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZShiYWNrYnVmZmVy
V2lkdGgsIGJhY2tidWZmZXJIZWlnaHQsIDEsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6Q29udmVydFJlbmRlcmJ1ZmZl
ckZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCksIEQzRFBPT0xfREVGQVVMVCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJm1PZmZzY3JlZW5UZXh0dXJlLCBwU2hhcmVIYW5kbGUp
OwotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEVSUigiQ291bGQgbm90
IGNyZWF0ZSBvZmZzY3JlZW4gdGV4dHVyZTogJTA4bFgiLCByZXN1bHQpOwotICAgICAgICByZWxl
YXNlKCk7Ci0KLSAgICAgICAgaWYgKGQzZDk6OmlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFR0xfQ09OVEVYVF9MT1NUOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEVHTF9CQURfQUxM
T0M7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqb2xkUmVuZGVy
VGFyZ2V0ID0gbVJlbmRlclRhcmdldDsKLQotICAgIHJlc3VsdCA9IG1PZmZzY3JlZW5UZXh0dXJl
LT5HZXRTdXJmYWNlTGV2ZWwoMCwgJm1SZW5kZXJUYXJnZXQpOwotICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7Ci0KLSAgICBpZiAob2xkUmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAg
UkVDVCByZWN0ID0KLSAgICAgICAgewotICAgICAgICAgICAgMCwgMCwKLSAgICAgICAgICAgIG1X
aWR0aCwgbUhlaWdodAotICAgICAgICB9OwotCi0gICAgICAgIGlmIChyZWN0LnJpZ2h0ID4gc3Rh
dGljX2Nhc3Q8TE9ORz4oYmFja2J1ZmZlcldpZHRoKSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmVjdC5yaWdodCA9IGJhY2tidWZmZXJXaWR0aDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChy
ZWN0LmJvdHRvbSA+IHN0YXRpY19jYXN0PExPTkc+KGJhY2tidWZmZXJIZWlnaHQpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZWN0LmJvdHRvbSA9IGJhY2tidWZmZXJIZWlnaHQ7Ci0gICAgICAg
IH0KLQotICAgICAgICBtUmVuZGVyZXItPmVuZFNjZW5lKCk7Ci0KLSAgICAgICAgcmVzdWx0ID0g
ZGV2aWNlLT5TdHJldGNoUmVjdChvbGRSZW5kZXJUYXJnZXQsICZyZWN0LCBtUmVuZGVyVGFyZ2V0
LCAmcmVjdCwgRDNEVEVYRl9OT05FKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKLQotICAgICAgICBvbGRSZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBp
ZiAobVdpbmRvdykKLSAgICB7Ci0gICAgICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50
UGFyYW1ldGVycyA9IHswfTsKLSAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQXV0b0RlcHRoU3Rl
bmNpbEZvcm1hdCA9IGdsX2QzZDk6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobURlcHRoQnVm
ZmVyRm9ybWF0KTsKLSAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckNvdW50ID0g
MTsKLSAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1hdCA9IGdsX2QzZDk6
OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQpOwotICAgICAgICBw
cmVzZW50UGFyYW1ldGVycy5FbmFibGVBdXRvRGVwdGhTdGVuY2lsID0gRkFMU0U7Ci0gICAgICAg
IHByZXNlbnRQYXJhbWV0ZXJzLkZsYWdzID0gMDsKLSAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMu
aERldmljZVdpbmRvdyA9IG1XaW5kb3c7Ci0gICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRp
U2FtcGxlUXVhbGl0eSA9IDA7ICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFVuaW1wbGVtZW50
ZWQKLSAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVUeXBlID0gRDNETVVMVElT
QU1QTEVfTk9ORTsgICAvLyBGSVhNRTogVW5pbXBsZW1lbnRlZAotICAgICAgICBwcmVzZW50UGFy
YW1ldGVycy5QcmVzZW50YXRpb25JbnRlcnZhbCA9IGNvbnZlcnRJbnRlcnZhbChzd2FwSW50ZXJ2
YWwpOwotICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5Td2FwRWZmZWN0ID0gRDNEU1dBUEVGRkVD
VF9ESVNDQVJEOwotICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5XaW5kb3dlZCA9IFRSVUU7Ci0g
ICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCA9IGJhY2tidWZmZXJXaWR0
aDsKLSAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCA9IGJhY2tidWZm
ZXJIZWlnaHQ7Ci0KLSAgICAgICAgLy8gaHR0cDovL2NyYnVnLmNvbS8xNDAyMzkKLSAgICAgICAg
Ly8gaHR0cDovL2NyYnVnLmNvbS8xNDM0MzQKLSAgICAgICAgLy8KLSAgICAgICAgLy8gU29tZSBB
TUQvSW50ZWwgc3dpdGNoYWJsZSBzeXN0ZW1zIC8gZHJpdmVycyBhcHBlYXIgdG8gcm91bmQgc3dh
cCBjaGFpbiBzdXJmYWNlcyB0byBhIG11bHRpcGxlIG9mIDY0IHBpeGVscyBpbiB3aWR0aAotICAg
ICAgICAvLyB3aGVuIHVzaW5nIHRoZSBpbnRlZ3JhdGVkIEludGVsLiBUaGlzIHJvdW5kcyB0aGUg
d2lkdGggdXAgcmF0aGVyIHRoYW4gZG93bi4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gU29tZSBu
b24tc3dpdGNoYWJsZSBBTUQgR1BVcyAvIGRyaXZlcnMgZG8gbm90IHJlc3BlY3QgdGhlIHNvdXJj
ZSByZWN0YW5nbGUgdG8gUHJlc2VudC4gVGhlcmVmb3JlLCB3aGVuIHRoZSB2ZW5kb3IgSUQKLSAg
ICAgICAgLy8gaXMgbm90IEludGVsLCB0aGUgYmFjayBidWZmZXIgd2lkdGggbXVzdCBiZSBleGFj
dGx5IHRoZSBzYW1lIHdpZHRoIGFzIHRoZSB3aW5kb3cgb3IgaG9yaXpvbnRhbCBzY2FsaW5nIHdp
bGwgb2NjdXIuCi0gICAgICAgIGlmIChtUmVuZGVyZXItPmdldEFkYXB0ZXJWZW5kb3IoKSA9PSBW
RU5ET1JfSURfSU5URUwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJz
LkJhY2tCdWZmZXJXaWR0aCA9IChwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGggKyA2
MykgLyA2NCAqIDY0OwotICAgICAgICB9Ci0KLSAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVh
dGVBZGRpdGlvbmFsU3dhcENoYWluKCZwcmVzZW50UGFyYW1ldGVycywgJm1Td2FwQ2hhaW4pOwot
Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNT
RVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRP
Rk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0lOVkFMSURDQUxMIHx8IHJlc3VsdCA9PSBEM0RF
UlJfREVWSUNFTE9TVCk7Ci0KLSAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBhZGRp
dGlvbmFsIHN3YXAgY2hhaW5zIG9yIG9mZnNjcmVlbiBzdXJmYWNlczogJTA4bFgiLCByZXN1bHQp
OwotICAgICAgICAgICAgcmVsZWFzZSgpOwotCi0gICAgICAgICAgICBpZiAoZDNkOTo6aXNEZXZp
Y2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gRUdMX0NPTlRFWFRfTE9TVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gRUdMX0JBRF9BTExPQzsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJlc3VsdCA9IG1Td2FwQ2hhaW4tPkdldEJh
Y2tCdWZmZXIoMCwgRDNEQkFDS0JVRkZFUl9UWVBFX01PTk8sICZtQmFja0J1ZmZlcik7Ci0gICAg
ICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIEludmFsaWRhdGVSZWN0KG1X
aW5kb3csIE5VTEwsIEZBTFNFKTsKLSAgICB9Ci0KLSAgICBpZiAobURlcHRoQnVmZmVyRm9ybWF0
ICE9IEdMX05PTkUpCi0gICAgewotICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURlcHRo
U3RlbmNpbFN1cmZhY2UoYmFja2J1ZmZlcldpZHRoLCBiYWNrYnVmZmVySGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6Q29u
dmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtRGVwdGhCdWZmZXJGb3JtYXQpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNETVVMVElTQU1QTEVfTk9O
RSwgMCwgRkFMU0UsICZtRGVwdGhTdGVuY2lsLCBOVUxMKTsKLQotICAgICAgICBpZiAoRkFJTEVE
KHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJS
X09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcmVzdWx0ID09
IEQzREVSUl9JTlZBTElEQ0FMTCk7Ci0KLSAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0
ZSBkZXB0aHN0ZW5jaWwgc3VyZmFjZSBmb3IgbmV3IHN3YXAgY2hhaW46IDB4JTA4WCIsIHJlc3Vs
dCk7Ci0gICAgICAgICAgICByZWxlYXNlKCk7Ci0KLSAgICAgICAgICAgIGlmIChkM2Q5Ojppc0Rl
dmljZUxvc3RFcnJvcihyZXN1bHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiBFR0xfQ09OVEVYVF9MT1NUOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBFR0xfQkFEX0FMTE9DOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgbVdpZHRoID0gYmFja2J1ZmZlcldp
ZHRoOwotICAgIG1IZWlnaHQgPSBiYWNrYnVmZmVySGVpZ2h0OwotICAgIG1Td2FwSW50ZXJ2YWwg
PSBzd2FwSW50ZXJ2YWw7Ci0KLSAgICByZXR1cm4gRUdMX1NVQ0NFU1M7Ci19Ci0KLS8vIHBhcmFt
ZXRlcnMgc2hvdWxkIGJlIHZhbGlkYXRlZC9jbGFtcGVkIGJ5IGNhbGxlcgotRUdMaW50IFN3YXBD
aGFpbjk6OnN3YXBSZWN0KEVHTGludCB4LCBFR0xpbnQgeSwgRUdMaW50IHdpZHRoLCBFR0xpbnQg
aGVpZ2h0KQotewotICAgIGlmICghbVN3YXBDaGFpbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBF
R0xfU1VDQ0VTUzsKLSAgICB9Ci0KLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVu
ZGVyZXItPmdldERldmljZSgpOwotCi0gICAgLy8gRGlzYWJsZSBhbGwgcGlwZWxpbmUgb3BlcmF0
aW9ucwotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRDNEWkJfRkFM
U0UpOwotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfRklMTE1PREUsIEQzREZJTExf
U09MSUQpOwotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFURVNURU5BQkxF
LCBGQUxTRSk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5B
QkxFLCBGQUxTRSk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwg
RDNEQ1VMTF9OT05FKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxF
TkFCTEUsIEZBTFNFKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NMSVBQTEFO
RUVOQUJMRSwgMCk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRF
RU5BQkxFLCBEM0RDT0xPUldSSVRFRU5BQkxFX0FMUEhBIHwgRDNEQ09MT1JXUklURUVOQUJMRV9C
TFVFIHwgRDNEQ09MT1JXUklURUVOQUJMRV9HUkVFTiB8IEQzRENPTE9SV1JJVEVFTkFCTEVfUkVE
KTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NSR0JXUklURUVOQUJMRSwgRkFM
U0UpOwotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NPUlRFU1RFTkFCTEUs
IEZBTFNFKTsKLSAgICBkZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5VTEwpOwotICAgIGRldmljZS0+
U2V0VmVydGV4U2hhZGVyKE5VTEwpOwotCi0gICAgZGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwg
bUJhY2tCdWZmZXIpOwotICAgIGRldmljZS0+U2V0RGVwdGhTdGVuY2lsU3VyZmFjZShOVUxMKTsK
LQotICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCBtT2Zmc2NyZWVuVGV4dHVyZSk7Ci0gICAgZGV2
aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JPUCwgRDNEVE9QX1NFTEVD
VEFSRzEpOwotICAgIGRldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9S
QVJHMSwgRDNEVEFfVEVYVFVSRSk7Ci0gICAgZGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgx
LCBEM0RUU1NfQ09MT1JPUCwgRDNEVE9QX0RJU0FCTEUpOwotICAgIGRldmljZS0+U2V0U2FtcGxl
clN0YXRlKDAsIEQzRFNBTVBfTUFHRklMVEVSLCBEM0RURVhGX1BPSU5UKTsKLSAgICBkZXZpY2Ut
PlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01JTkZJTFRFUiwgRDNEVEVYRl9QT0lOVCk7Ci0g
ICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9BRERSRVNTVSwgRDNEVEFERFJF
U1NfQ0xBTVApOwotICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfQUREUkVT
U1YsIEQzRFRBRERSRVNTX0NMQU1QKTsKLSAgICBkZXZpY2UtPlNldEZWRihEM0RGVkZfWFlaUkhX
IHwgRDNERlZGX1RFWDEpOwotCi0gICAgRDNEVklFV1BPUlQ5IHZpZXdwb3J0ID0gezAsIDAsIG1X
aWR0aCwgbUhlaWdodCwgMC4wZiwgMS4wZn07Ci0gICAgZGV2aWNlLT5TZXRWaWV3cG9ydCgmdmll
d3BvcnQpOwotCi0gICAgZmxvYXQgeDEgPSB4IC0gMC41ZjsKLSAgICBmbG9hdCB5MSA9IChtSGVp
Z2h0IC0geSAtIGhlaWdodCkgLSAwLjVmOwotICAgIGZsb2F0IHgyID0gKHggKyB3aWR0aCkgLSAw
LjVmOwotICAgIGZsb2F0IHkyID0gKG1IZWlnaHQgLSB5KSAtIDAuNWY7Ci0KLSAgICBmbG9hdCB1
MSA9IHggLyBmbG9hdChtV2lkdGgpOwotICAgIGZsb2F0IHYxID0geSAvIGZsb2F0KG1IZWlnaHQp
OwotICAgIGZsb2F0IHUyID0gKHggKyB3aWR0aCkgLyBmbG9hdChtV2lkdGgpOwotICAgIGZsb2F0
IHYyID0gKHkgKyBoZWlnaHQpIC8gZmxvYXQobUhlaWdodCk7Ci0KLSAgICBmbG9hdCBxdWFkWzRd
WzZdID0ge3t4MSwgeTEsIDAuMGYsIDEuMGYsIHUxLCB2Mn0sCi0gICAgICAgICAgICAgICAgICAg
ICAgICB7eDIsIHkxLCAwLjBmLCAxLjBmLCB1MiwgdjJ9LAotICAgICAgICAgICAgICAgICAgICAg
ICAge3gyLCB5MiwgMC4wZiwgMS4wZiwgdTIsIHYxfSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IHt4MSwgeTIsIDAuMGYsIDEuMGYsIHUxLCB2MX19OyAgIC8vIHgsIHksIHosIHJodywgdSwgdgot
Ci0gICAgbVJlbmRlcmVyLT5zdGFydFNjZW5lKCk7Ci0gICAgZGV2aWNlLT5EcmF3UHJpbWl0aXZl
VVAoRDNEUFRfVFJJQU5HTEVGQU4sIDIsIHF1YWQsIDYgKiBzaXplb2YoZmxvYXQpKTsKLSAgICBt
UmVuZGVyZXItPmVuZFNjZW5lKCk7Ci0KLSAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwgTlVMTCk7
Ci0KLSAgICBSRUNUIHJlY3QgPQotICAgIHsKLSAgICAgICAgeCwgbUhlaWdodCAtIHkgLSBoZWln
aHQsCi0gICAgICAgIHggKyB3aWR0aCwgbUhlaWdodCAtIHkKLSAgICB9OwotCi0gICAgSFJFU1VM
VCByZXN1bHQgPSBtU3dhcENoYWluLT5QcmVzZW50KCZyZWN0LCAmcmVjdCwgTlVMTCwgTlVMTCwg
MCk7Ci0KLSAgICBtUmVuZGVyZXItPm1hcmtBbGxTdGF0ZURpcnR5KCk7Ci0KLSAgICBpZiAoZDNk
OTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBFR0xf
Q09OVEVYVF9MT1NUOwotICAgIH0KLQotICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcmVzdWx0ID09IEQzREVSUl9E
UklWRVJJTlRFUk5BTEVSUk9SKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEVHTF9CQURfQUxMT0M7
Ci0gICAgfQotCi0gICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgIHJldHVybiBF
R0xfU1VDQ0VTUzsKLX0KLQotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgotLy8g
Y2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCi1JRGlyZWN0M0RTdXJm
YWNlOSAqU3dhcENoYWluOTo6Z2V0UmVuZGVyVGFyZ2V0KCkKLXsKLSAgICBpZiAobVJlbmRlclRh
cmdldCkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXQtPkFkZFJlZigpOwotICAgIH0KLQot
ICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OwotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9u
IHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UK
LUlEaXJlY3QzRFN1cmZhY2U5ICpTd2FwQ2hhaW45OjpnZXREZXB0aFN0ZW5jaWwoKQotewotICAg
IGlmIChtRGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbURlcHRoU3RlbmNpbC0+QWRkUmVm
KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7Ci19Ci0KLS8vIEluY3JlbWVu
dHMgcmVmY291bnQgb24gdGV4dHVyZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0
dXJuZWQgdGV4dHVyZQotSURpcmVjdDNEVGV4dHVyZTkgKlN3YXBDaGFpbjk6OmdldE9mZnNjcmVl
blRleHR1cmUoKQotewotICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkKLSAgICB7Ci0gICAgICAg
IG1PZmZzY3JlZW5UZXh0dXJlLT5BZGRSZWYoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbU9mZnNj
cmVlblRleHR1cmU7Ci19Ci0KLVN3YXBDaGFpbjkgKlN3YXBDaGFpbjk6Om1ha2VTd2FwQ2hhaW45
KFN3YXBDaGFpbiAqc3dhcENoYWluKQotewotICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKHJ4
OjpTd2FwQ2hhaW45Kiwgc3dhcENoYWluKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHJ4OjpT
d2FwQ2hhaW45Kj4oc3dhcENoYWluKTsKLX0KLQotdm9pZCBTd2FwQ2hhaW45OjpyZWNyZWF0ZSgp
Ci17Ci0gICAgaWYgKCFtU3dhcENoYWluKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7
Ci0gICAgaWYgKGRldmljZSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50UGFyYW1ldGVyczsKLSAgICBIUkVT
VUxUIHJlc3VsdCA9IG1Td2FwQ2hhaW4tPkdldFByZXNlbnRQYXJhbWV0ZXJzKCZwcmVzZW50UGFy
YW1ldGVycyk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgIElEaXJlY3Qz
RFN3YXBDaGFpbjkqIG5ld1N3YXBDaGFpbiA9IE5VTEw7Ci0gICAgcmVzdWx0ID0gZGV2aWNlLT5D
cmVhdGVBZGRpdGlvbmFsU3dhcENoYWluKCZwcmVzZW50UGFyYW1ldGVycywgJm5ld1N3YXBDaGFp
bik7Ci0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsKLSAgICBtU3dhcENoYWluID0gbmV3U3dh
cENoYWluOwotCi0gICAgbUJhY2tCdWZmZXItPlJlbGVhc2UoKTsKLSAgICByZXN1bHQgPSBtU3dh
cENoYWluLT5HZXRCYWNrQnVmZmVyKDAsIEQzREJBQ0tCVUZGRVJfVFlQRV9NT05PLCAmbUJhY2tC
dWZmZXIpOwotICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci19Ci0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvU3dhcENo
YWluOS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9T
d2FwQ2hhaW45LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2YTYyYmQ4NmY2YTY1
YjdkZDhiN2JkNDIyMDc2NDE0ZjQ5MGQ0NWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9Td2FwQ2hhaW45LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLQotLy8gU3dhcENoYWluOS5oOiBEZWZpbmVzIGEgYmFjay1lbmQgc3BlY2lmaWMg
Y2xhc3MgZm9yIHRoZSBEM0Q5IHN3YXAgY2hhaW4uCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JFTkRF
UkVSX1NXQVBDSEFJTjlfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1NXQVBDSEFJTjlf
SF8KLQotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL1N3YXBDaGFpbi5oIgotCi1uYW1lc3BhY2UgcngKLXsKLWNsYXNzIFJlbmRlcmVy
OTsKLQotY2xhc3MgU3dhcENoYWluOSA6IHB1YmxpYyBTd2FwQ2hhaW4KLXsKLSAgcHVibGljOgot
ICAgIFN3YXBDaGFpbjkoUmVuZGVyZXI5ICpyZW5kZXJlciwgSFdORCB3aW5kb3csIEhBTkRMRSBz
aGFyZUhhbmRsZSwKLSAgICAgICAgICAgICAgIEdMZW51bSBiYWNrQnVmZmVyRm9ybWF0LCBHTGVu
dW0gZGVwdGhCdWZmZXJGb3JtYXQpOwotICAgIHZpcnR1YWwgflN3YXBDaGFpbjkoKTsKLQotICAg
IEVHTGludCByZXNpemUoRUdMaW50IGJhY2tidWZmZXJXaWR0aCwgRUdMaW50IGJhY2tidWZmZXJI
ZWlnaHQpOwotICAgIHZpcnR1YWwgRUdMaW50IHJlc2V0KEVHTGludCBiYWNrYnVmZmVyV2lkdGgs
IEVHTGludCBiYWNrYnVmZmVySGVpZ2h0LCBFR0xpbnQgc3dhcEludGVydmFsKTsKLSAgICB2aXJ0
dWFsIEVHTGludCBzd2FwUmVjdChFR0xpbnQgeCwgRUdMaW50IHksIEVHTGludCB3aWR0aCwgRUdM
aW50IGhlaWdodCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlY3JlYXRlKCk7Ci0KLSAgICB2aXJ0dWFs
IElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoKTsKLSAgICB2aXJ0dWFsIElEaXJl
Y3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5jaWwoKTsKLSAgICB2aXJ0dWFsIElEaXJlY3QzRFRl
eHR1cmU5ICpnZXRPZmZzY3JlZW5UZXh0dXJlKCk7Ci0KLSAgICBzdGF0aWMgU3dhcENoYWluOSAq
bWFrZVN3YXBDaGFpbjkoU3dhcENoYWluICpzd2FwQ2hhaW4pOwotCi0gIHByaXZhdGU6Ci0gICAg
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFN3YXBDaGFpbjkpOwotCi0gICAgdm9pZCByZWxlYXNl
KCk7Ci0KLSAgICBSZW5kZXJlcjkgKm1SZW5kZXJlcjsKLSAgICBFR0xpbnQgbUhlaWdodDsKLSAg
ICBFR0xpbnQgbVdpZHRoOwotICAgIEVHTGludCBtU3dhcEludGVydmFsOwotCi0gICAgSURpcmVj
dDNEU3dhcENoYWluOSAqbVN3YXBDaGFpbjsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbUJhY2tC
dWZmZXI7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKm1SZW5kZXJUYXJnZXQ7Ci0gICAgSURpcmVj
dDNEU3VyZmFjZTkgKm1EZXB0aFN0ZW5jaWw7Ci0gICAgSURpcmVjdDNEVGV4dHVyZTkqIG1PZmZz
Y3JlZW5UZXh0dXJlOwotfTsKLQotfQotI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9TV0FQ
Q0hBSU45X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlMTEuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZTExLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNDE1MTVlZDc2OTYyNDk1OThlNTMzNDM0OTYwYTMyMjFhYjRm
MjM1Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdl
MTEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjY3ICswLDAgQEAKLSNpbmNsdWRlICJwcmVjb21w
aWxlZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRleHR1cmVTdG9yYWdlMTEuY3BwOiBJbXBsZW1l
bnRzIHRoZSBhYnN0cmFjdCByeDo6VGV4dHVyZVN0b3JhZ2UxMSBjbGFzcyBhbmQgaXRzIGNvbmNy
ZXRlIGRlcml2ZWQKLS8vIGNsYXNzZXMgVGV4dHVyZVN0b3JhZ2UxMV8yRCBhbmQgVGV4dHVyZVN0
b3JhZ2UxMV9DdWJlLCB3aGljaCBhY3QgYXMgdGhlIGludGVyZmFjZSB0byB0aGUgRDNEMTEgdGV4
dHVyZS4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZTExLmgi
Ci0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIxMS5oIgotI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQxMS5oIgotI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9Td2FwQ2hhaW4xMS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9y
ZW5kZXJlcjExX3V0aWxzLmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLVRleHR1cmVT
dG9yYWdlMTE6OlRleHR1cmVTdG9yYWdlMTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBVSU5UIGJpbmRG
bGFncykKLSAgICA6IG1CaW5kRmxhZ3MoYmluZEZsYWdzKSwKLSAgICAgIG1Mb2RPZmZzZXQoMCks
Ci0gICAgICBtTWlwTGV2ZWxzKDApLAotICAgICAgbVRleHR1cmUoTlVMTCksCi0gICAgICBtVGV4
dHVyZUZvcm1hdChEWEdJX0ZPUk1BVF9VTktOT1dOKSwKLSAgICAgIG1TaGFkZXJSZXNvdXJjZUZv
cm1hdChEWEdJX0ZPUk1BVF9VTktOT1dOKSwKLSAgICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQoRFhH
SV9GT1JNQVRfVU5LTk9XTiksCi0gICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFU
X1VOS05PV04pLAotICAgICAgbVNSVihOVUxMKSwKLSAgICAgIG1UZXh0dXJlV2lkdGgoMCksCi0g
ICAgICBtVGV4dHVyZUhlaWdodCgwKQotewotICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyMTE6Om1h
a2VSZW5kZXJlcjExKHJlbmRlcmVyKTsKLX0KLQotVGV4dHVyZVN0b3JhZ2UxMTo6flRleHR1cmVT
dG9yYWdlMTEoKQotewotfQotCi1UZXh0dXJlU3RvcmFnZTExICpUZXh0dXJlU3RvcmFnZTExOjpt
YWtlVGV4dHVyZVN0b3JhZ2UxMShUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSkKLXsKLSAgICBBU1NF
UlQoSEFTX0RZTkFNSUNfVFlQRShUZXh0dXJlU3RvcmFnZTExKiwgc3RvcmFnZSkpOwotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlU3RvcmFnZTExKj4oc3RvcmFnZSk7Ci19Ci0KLURXT1JE
IFRleHR1cmVTdG9yYWdlMTE6OkdldFRleHR1cmVCaW5kRmxhZ3MoRFhHSV9GT1JNQVQgZm9ybWF0
LCBHTGVudW0gZ2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUpCi17Ci0gICAgVUlOVCBiaW5k
RmxhZ3MgPSBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRTsKLSAgICAKLSAgICBpZiAoZDNkMTE6
OklzRGVwdGhTdGVuY2lsRm9ybWF0KGZvcm1hdCkpCi0gICAgewotICAgICAgICBiaW5kRmxhZ3Mg
fD0gRDNEMTFfQklORF9ERVBUSF9TVEVOQ0lMOwotICAgIH0KLSAgICBlbHNlIGlmKGZvcmNlUmVu
ZGVyYWJsZSB8fCAoVGV4dHVyZVN0b3JhZ2UxMTo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShm
b3JtYXQpICYmIChnbHVzYWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpKSkK
LSAgICB7Ci0gICAgICAgIGJpbmRGbGFncyB8PSBEM0QxMV9CSU5EX1JFTkRFUl9UQVJHRVQ7Ci0g
ICAgfQotICAgIHJldHVybiBiaW5kRmxhZ3M7Ci19Ci0KLWJvb2wgVGV4dHVyZVN0b3JhZ2UxMTo6
SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEWEdJX0ZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dp
dGNoKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9BOF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjMyRzMyQjMyQTMyX0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZB
MTZfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SOF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9V
Tk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X0ZMT0FUOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SMTZHMTZfRkxPQVQ6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9CQzFfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STTog
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjMyRzMyQjMyX0ZMT0FUOiAvLyBub3QgcmVuZGVyYWJsZSBvbiBhbGwgZGV2aWNlcwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1VSU5UIFRleHR1cmVTdG9yYWdl
MTE6OmdldEJpbmRGbGFncygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1CaW5kRmxhZ3M7Ci19Ci0K
LUlEM0QxMVRleHR1cmUyRCAqVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0QmFzZVRleHR1cmUoKSBjb25z
dAotewotICAgIHJldHVybiBtVGV4dHVyZTsKLX0KLQotaW50IFRleHR1cmVTdG9yYWdlMTE6Omdl
dExvZE9mZnNldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1Mb2RPZmZzZXQ7Ci19Ci0KLWJvb2wg
VGV4dHVyZVN0b3JhZ2UxMTo6aXNSZW5kZXJUYXJnZXQoKSBjb25zdAotewotICAgIHJldHVybiAo
bUJpbmRGbGFncyAmIChEM0QxMV9CSU5EX1JFTkRFUl9UQVJHRVQgfCBEM0QxMV9CSU5EX0RFUFRI
X1NURU5DSUwpKSAhPSAwOwotfQotICAgIAotYm9vbCBUZXh0dXJlU3RvcmFnZTExOjppc01hbmFn
ZWQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotaW50IFRleHR1cmVTdG9yYWdl
MTE6OmxldmVsQ291bnQoKQotewotICAgIGludCBsZXZlbHMgPSAwOwotICAgIGlmIChnZXRCYXNl
VGV4dHVyZSgpKQotICAgIHsKLSAgICAgICAgbGV2ZWxzID0gbU1pcExldmVscyAtIGdldExvZE9m
ZnNldCgpOwotICAgIH0KLSAgICByZXR1cm4gbGV2ZWxzOwotfQotCi1VSU5UIFRleHR1cmVTdG9y
YWdlMTE6OmdldFN1YnJlc291cmNlSW5kZXgoaW50IGxldmVsLCBpbnQgZmFjZUluZGV4KQotewot
ICAgIFVJTlQgaW5kZXggPSAwOwotICAgIGlmIChnZXRCYXNlVGV4dHVyZSgpKQotICAgIHsKLSAg
ICAgICAgaW5kZXggPSBEM0QxMUNhbGNTdWJyZXNvdXJjZShsZXZlbCwgZmFjZUluZGV4LCBtTWlw
TGV2ZWxzKTsKLSAgICB9Ci0gICAgcmV0dXJuIGluZGV4OwotfQotCi1ib29sIFRleHR1cmVTdG9y
YWdlMTE6OnVwZGF0ZVN1YnJlc291cmNlTGV2ZWwoSUQzRDExVGV4dHVyZTJEICpzcmNUZXh0dXJl
LCB1bnNpZ25lZCBpbnQgc291cmNlU3VicmVzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxldmVsLCBpbnQgZmFjZSwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBpZiAoc3JjVGV4
dHVyZSkKLSAgICB7Ci0gICAgICAgIC8vIFJvdW5kIHVwIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IHRv
IHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIGRpbWVuc2lvbiBhbGlnbm1lbnQKLSAgICAgICAgdW5z
aWduZWQgaW50IGRpbWVuc2lvbkFsaWdubWVudCA9IGQzZDExOjpHZXRUZXh0dXJlRm9ybWF0RGlt
ZW5zaW9uQWxpZ25tZW50KG1UZXh0dXJlRm9ybWF0KTsKLSAgICAgICAgd2lkdGggPSB3aWR0aCAr
IGRpbWVuc2lvbkFsaWdubWVudCAtIDEgLSAod2lkdGggLSAxKSAlIGRpbWVuc2lvbkFsaWdubWVu
dDsKLSAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0ICsgZGltZW5zaW9uQWxpZ25tZW50IC0gMSAtICho
ZWlnaHQgLSAxKSAlIGRpbWVuc2lvbkFsaWdubWVudDsKLQotICAgICAgICBEM0QxMV9CT1ggc3Jj
Qm94OwotICAgICAgICBzcmNCb3gubGVmdCA9IHhvZmZzZXQ7Ci0gICAgICAgIHNyY0JveC50b3Ag
PSB5b2Zmc2V0OwotICAgICAgICBzcmNCb3gucmlnaHQgPSB4b2Zmc2V0ICsgd2lkdGg7Ci0gICAg
ICAgIHNyY0JveC5ib3R0b20gPSB5b2Zmc2V0ICsgaGVpZ2h0OwotICAgICAgICBzcmNCb3guZnJv
bnQgPSAwOwotICAgICAgICBzcmNCb3guYmFjayA9IDE7Ci0KLSAgICAgICAgSUQzRDExRGV2aWNl
Q29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotICAgICAg
ICAKLSAgICAgICAgQVNTRVJUKGdldEJhc2VUZXh0dXJlKCkpOwotICAgICAgICBjb250ZXh0LT5D
b3B5U3VicmVzb3VyY2VSZWdpb24oZ2V0QmFzZVRleHR1cmUoKSwgZ2V0U3VicmVzb3VyY2VJbmRl
eChsZXZlbCArIG1Mb2RPZmZzZXQsIGZhY2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeG9mZnNldCwgeW9mZnNldCwgMCwgc3JjVGV4dHVyZSwgc291cmNlU3VicmVz
b3VyY2UsICZzcmNCb3gpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLXZvaWQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2VuZXJhdGVNaXBtYXBMYXll
cihSZW5kZXJUYXJnZXQxMSAqc291cmNlLCBSZW5kZXJUYXJnZXQxMSAqZGVzdCkKLXsKLSAgICBp
ZiAoc291cmNlICYmIGRlc3QpCi0gICAgewotICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZp
ZXcgKnNvdXJjZVNSViA9IHNvdXJjZS0+Z2V0U2hhZGVyUmVzb3VyY2VWaWV3KCk7Ci0gICAgICAg
IElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmRlc3RSVFYgPSBkZXN0LT5nZXRSZW5kZXJUYXJnZXRW
aWV3KCk7Ci0KLSAgICAgICAgaWYgKHNvdXJjZVNSViAmJiBkZXN0UlRWKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBnbDo6UmVjdGFuZ2xlIHNvdXJjZUFyZWE7Ci0gICAgICAgICAgICBzb3VyY2VB
cmVhLnggPSAwOwotICAgICAgICAgICAgc291cmNlQXJlYS55ID0gMDsKLSAgICAgICAgICAgIHNv
dXJjZUFyZWEud2lkdGggPSBzb3VyY2UtPmdldFdpZHRoKCk7Ci0gICAgICAgICAgICBzb3VyY2VB
cmVhLmhlaWdodCA9IHNvdXJjZS0+Z2V0SGVpZ2h0KCk7Ci0KLSAgICAgICAgICAgIGdsOjpSZWN0
YW5nbGUgZGVzdEFyZWE7Ci0gICAgICAgICAgICBkZXN0QXJlYS54ID0gMDsKLSAgICAgICAgICAg
IGRlc3RBcmVhLnkgPSAwOwotICAgICAgICAgICAgZGVzdEFyZWEud2lkdGggPSBkZXN0LT5nZXRX
aWR0aCgpOwotICAgICAgICAgICAgZGVzdEFyZWEuaGVpZ2h0ID0gZGVzdC0+Z2V0SGVpZ2h0KCk7
Ci0KLSAgICAgICAgICAgIG1SZW5kZXJlci0+Y29weVRleHR1cmUoc291cmNlU1JWLCBzb3VyY2VB
cmVhLCBzb3VyY2UtPmdldFdpZHRoKCksIHNvdXJjZS0+Z2V0SGVpZ2h0KCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSVFYsIGRlc3RBcmVhLCBkZXN0LT5nZXRXaWR0
aCgpLCBkZXN0LT5nZXRIZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xfUkdCQSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVRleHR1cmVTdG9yYWdlMTFfMkQ6
OlRleHR1cmVTdG9yYWdlMTFfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBTd2FwQ2hhaW4xMSAqc3dh
cGNoYWluKQotICAgIDogVGV4dHVyZVN0b3JhZ2UxMShyZW5kZXJlciwgRDNEMTFfQklORF9SRU5E
RVJfVEFSR0VUIHwgRDNEMTFfQklORF9TSEFERVJfUkVTT1VSQ0UpCi17Ci0gICAgbVRleHR1cmUg
PSBzd2FwY2hhaW4tPmdldE9mZnNjcmVlblRleHR1cmUoKTsKLSAgICBtU1JWID0gc3dhcGNoYWlu
LT5nZXRSZW5kZXJUYXJnZXRTaGFkZXJSZXNvdXJjZSgpOwotCi0gICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKysp
Ci0gICAgewotICAgICAgICBtUmVuZGVyVGFyZ2V0W2ldID0gTlVMTDsKLSAgICB9Ci0KLSAgICBE
M0QxMV9URVhUVVJFMkRfREVTQyB0ZXhEZXNjOwotICAgIG1UZXh0dXJlLT5HZXREZXNjKCZ0ZXhE
ZXNjKTsKLSAgICBtTWlwTGV2ZWxzID0gdGV4RGVzYy5NaXBMZXZlbHM7Ci0gICAgbVRleHR1cmVG
b3JtYXQgPSB0ZXhEZXNjLkZvcm1hdDsKLSAgICBtVGV4dHVyZVdpZHRoID0gdGV4RGVzYy5XaWR0
aDsKLSAgICBtVGV4dHVyZUhlaWdodCA9IHRleERlc2MuSGVpZ2h0OwotCi0gICAgRDNEMTFfU0hB
REVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOwotICAgIG1TUlYtPkdldERlc2MoJnNydkRl
c2MpOwotICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IHNydkRlc2MuRm9ybWF0OwotCi0gICAg
SUQzRDExUmVuZGVyVGFyZ2V0Vmlldyogb2Zmc2NyZWVuUlRWID0gc3dhcGNoYWluLT5nZXRSZW5k
ZXJUYXJnZXQoKTsKLSAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOwot
ICAgIG9mZnNjcmVlblJUVi0+R2V0RGVzYygmcnR2RGVzYyk7Ci0gICAgbVJlbmRlclRhcmdldEZv
cm1hdCA9IHJ0dkRlc2MuRm9ybWF0OwotICAgIG9mZnNjcmVlblJUVi0+UmVsZWFzZSgpOwotCi0g
ICAgbURlcHRoU3RlbmNpbEZvcm1hdCA9IERYR0lfRk9STUFUX1VOS05PV047Ci19Ci0KLVRleHR1
cmVTdG9yYWdlMTFfMkQ6OlRleHR1cmVTdG9yYWdlMTFfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBp
bnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3Jj
ZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotICAgIDogVGV4dHVy
ZVN0b3JhZ2UxMShyZW5kZXJlciwgR2V0VGV4dHVyZUJpbmRGbGFncyhnbF9kM2QxMTo6Q29udmVy
dFRleHR1cmVGb3JtYXQoaW50ZXJuYWxmb3JtYXQpLCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlKSkK
LXsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXRbaV0g
PSBOVUxMOwotICAgIH0KLQotICAgIERYR0lfRk9STUFUIGNvbnZlcnRlZEZvcm1hdCA9IGdsX2Qz
ZDExOjpDb252ZXJ0VGV4dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgaWYgKGQzZDEx
OjpJc0RlcHRoU3RlbmNpbEZvcm1hdChjb252ZXJ0ZWRGb3JtYXQpKQotICAgIHsKLSAgICAgICAg
bVRleHR1cmVGb3JtYXQgPSBkM2QxMTo6R2V0RGVwdGhUZXh0dXJlRm9ybWF0KGNvbnZlcnRlZEZv
cm1hdCk7Ci0gICAgICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IGQzZDExOjpHZXREZXB0aFNo
YWRlclJlc291cmNlRm9ybWF0KGNvbnZlcnRlZEZvcm1hdCk7Ci0gICAgICAgIG1EZXB0aFN0ZW5j
aWxGb3JtYXQgPSBjb252ZXJ0ZWRGb3JtYXQ7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQg
PSBEWEdJX0ZPUk1BVF9VTktOT1dOOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBt
VGV4dHVyZUZvcm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKLSAgICAgICAgbVNoYWRlclJlc291cmNl
Rm9ybWF0ID0gY29udmVydGVkRm9ybWF0OwotICAgICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0ID0g
RFhHSV9GT1JNQVRfVU5LTk9XTjsKLSAgICAgICAgbVJlbmRlclRhcmdldEZvcm1hdCA9IGNvbnZl
cnRlZEZvcm1hdDsKLSAgICB9Ci0KLSAgICAvLyBpZiB0aGUgd2lkdGggb3IgaGVpZ2h0IGlzIG5v
dCBwb3NpdGl2ZSB0aGlzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGluY29tcGxldGUgdGV4dHVy
ZQotICAgIC8vIHdlIGhhbmRsZSB0aGF0IGhlcmUgYnkgc2tpcHBpbmcgdGhlIGQzZCB0ZXh0dXJl
IGNyZWF0aW9uCi0gICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKQotICAgIHsKLSAgICAg
ICAgLy8gYWRqdXN0IHNpemUgaWYgbmVlZGVkIGZvciBjb21wcmVzc2VkIHRleHR1cmVzCi0gICAg
ICAgIGdsOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBnbDo6SXNDb21wcmVzc2VkKGludGVybmFsZm9y
bWF0KSwgJndpZHRoLCAmaGVpZ2h0LCAmbUxvZE9mZnNldCk7Ci0KLSAgICAgICAgSUQzRDExRGV2
aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0gICAgICAgIEQzRDExX1RF
WFRVUkUyRF9ERVNDIGRlc2M7Ci0gICAgICAgIGRlc2MuV2lkdGggPSB3aWR0aDsgICAgICAvLyBD
b21wcmVzc2VkIHRleHR1cmUgc2l6ZSBjb25zdHJhaW50cz8KLSAgICAgICAgZGVzYy5IZWlnaHQg
PSBoZWlnaHQ7Ci0gICAgICAgIGRlc2MuTWlwTGV2ZWxzID0gKGxldmVscyA+IDApID8gbGV2ZWxz
ICsgbUxvZE9mZnNldCA6IDA7Ci0gICAgICAgIGRlc2MuQXJyYXlTaXplID0gMTsKLSAgICAgICAg
ZGVzYy5Gb3JtYXQgPSBtVGV4dHVyZUZvcm1hdDsKLSAgICAgICAgZGVzYy5TYW1wbGVEZXNjLkNv
dW50ID0gMTsKLSAgICAgICAgZGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOwotICAgICAgICBk
ZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKLSAgICAgICAgZGVzYy5CaW5kRmxhZ3Mg
PSBnZXRCaW5kRmxhZ3MoKTsKLSAgICAgICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7Ci0gICAg
ICAgIGRlc2MuTWlzY0ZsYWdzID0gMDsKLQotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXNjLCBOVUxMLCAmbVRleHR1cmUpOwotCi0gICAgICAgIC8v
IHRoaXMgY2FuIGhhcHBlbiBmcm9tIHdpbmRvd3MgVERSCi0gICAgICAgIGlmIChkM2QxMTo6aXNE
ZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgbVJlbmRlcmVy
LT5ub3RpZnlEZXZpY2VMb3N0KCk7Ci0gICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAg
ICAgICAgICBFUlIoIkNyZWF0aW5nIGltYWdlIGZhaWxlZC4iKTsKLSAgICAgICAgICAgIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1UZXh0dXJlLT5HZXREZXNjKCZkZXNjKTsKLSAgICAgICAgICAgIG1N
aXBMZXZlbHMgPSBkZXNjLk1pcExldmVsczsKLSAgICAgICAgICAgIG1UZXh0dXJlV2lkdGggPSBk
ZXNjLldpZHRoOwotICAgICAgICAgICAgbVRleHR1cmVIZWlnaHQgPSBkZXNjLkhlaWdodDsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotVGV4dHVyZVN0b3JhZ2UxMV8yRDo6flRleHR1cmVTdG9yYWdl
MTFfMkQoKQotewotICAgIGlmIChtVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1UZXh0dXJlLT5S
ZWxlYXNlKCk7Ci0gICAgICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVNS
VikKLSAgICB7Ci0gICAgICAgIG1TUlYtPlJlbGVhc2UoKTsKLSAgICAgICAgbVNSViA9IE5VTEw7
Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5U
QVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCi0gICAgewotICAgICAgICBkZWxldGUgbVJl
bmRlclRhcmdldFtpXTsKLSAgICAgICAgbVJlbmRlclRhcmdldFtpXSA9IE5VTEw7Ci0gICAgfQot
fQotCi1UZXh0dXJlU3RvcmFnZTExXzJEICpUZXh0dXJlU3RvcmFnZTExXzJEOjptYWtlVGV4dHVy
ZVN0b3JhZ2UxMV8yRChUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSkKLXsKLSAgICBBU1NFUlQoSEFT
X0RZTkFNSUNfVFlQRShUZXh0dXJlU3RvcmFnZTExXzJEKiwgc3RvcmFnZSkpOwotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxUZXh0dXJlU3RvcmFnZTExXzJEKj4oc3RvcmFnZSk7Ci19Ci0KLVJlbmRl
clRhcmdldCAqVGV4dHVyZVN0b3JhZ2UxMV8yRDo6Z2V0UmVuZGVyVGFyZ2V0KGludCBsZXZlbCkK
LXsKLSAgICBpZiAobGV2ZWwgPj0gMCAmJiBsZXZlbCA8IHN0YXRpY19jYXN0PGludD4obU1pcExl
dmVscykpCi0gICAgewotICAgICAgICBpZiAoIW1SZW5kZXJUYXJnZXRbbGV2ZWxdKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2
aWNlKCk7Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdDsKLQotICAgICAgICAgICAgRDNEMTFf
U0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOwotICAgICAgICAgICAgc3J2RGVzYy5G
b3JtYXQgPSBtU2hhZGVyUmVzb3VyY2VGb3JtYXQ7Ci0gICAgICAgICAgICBzcnZEZXNjLlZpZXdE
aW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyRDsKLSAgICAgICAgICAgIHNy
dkRlc2MuVGV4dHVyZTJELk1vc3REZXRhaWxlZE1pcCA9IGxldmVsOwotICAgICAgICAgICAgc3J2
RGVzYy5UZXh0dXJlMkQuTWlwTGV2ZWxzID0gMTsKLQotICAgICAgICAgICAgSUQzRDExU2hhZGVy
UmVzb3VyY2VWaWV3ICpzcnY7Ci0gICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNo
YWRlclJlc291cmNlVmlldyhtVGV4dHVyZSwgJnNydkRlc2MsICZzcnYpOwotCi0gICAgICAgICAg
ICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5k
ZXJUYXJnZXQqPihOVUxMKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgICAgICBpZiAobVJlbmRlclRhcmdldEZvcm1hdCAh
PSBEWEdJX0ZPUk1BVF9VTktOT1dOKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEQz
RDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7Ci0gICAgICAgICAgICAgICAgcnR2
RGVzYy5Gb3JtYXQgPSBtUmVuZGVyVGFyZ2V0Rm9ybWF0OwotICAgICAgICAgICAgICAgIHJ0dkRl
c2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJEOwotICAgICAg
ICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJELk1pcFNsaWNlID0gbGV2ZWw7Ci0KLSAgICAgICAg
ICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpydHY7Ci0gICAgICAgICAgICAgICAgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1UZXh0dXJlLCAmcnR2RGVzYywg
JnJ0dik7Ci0KLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzcnYtPlJlbGVhc2UoKTsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0
aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihOVUxMKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAgICAgICAgICAv
LyBSZW5kZXJUYXJnZXQxMSBleHBlY3RzIHRvIGJlIHRoZSBvd25lciBvZiB0aGUgcmVzb3VyY2Vz
IGl0IGlzIGdpdmVuIGJ1dCBUZXh0dXJlU3RvcmFnZTExCi0gICAgICAgICAgICAgICAgLy8gYWxz
byBuZWVkcyB0byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0dXJlLgotICAgICAgICAgICAg
ICAgIG1UZXh0dXJlLT5BZGRSZWYoKTsKLQotICAgICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRb
bGV2ZWxdID0gbmV3IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwgcnR2LCBtVGV4dHVyZSwgc3J2
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6bWF4KG1UZXh0dXJlV2lkdGggPj4gbGV2ZWwsIDFVKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4
dHVyZUhlaWdodCA+PiBsZXZlbCwgMVUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UgaWYgKG1EZXB0aFN0ZW5jaWxGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBEM0QxMV9ERVBUSF9TVEVOQ0lMX1ZJRVdfREVTQyBk
c3ZEZXNjOwotICAgICAgICAgICAgICAgIGRzdkRlc2MuRm9ybWF0ID0gbURlcHRoU3RlbmNpbEZv
cm1hdDsKLSAgICAgICAgICAgICAgICBkc3ZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9EU1Zf
RElNRU5TSU9OX1RFWFRVUkUyRDsKLSAgICAgICAgICAgICAgICBkc3ZEZXNjLlRleHR1cmUyRC5N
aXBTbGljZSA9IGxldmVsOwotICAgICAgICAgICAgICAgIGRzdkRlc2MuRmxhZ3MgPSAwOwotCi0g
ICAgICAgICAgICAgICAgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZHN2OwotICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsVmlldyhtVGV4dHVyZSwgJmRz
dkRlc2MsICZkc3YpOwotCi0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVN
T1JZKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3J2LT5SZWxlYXNl
KCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgICAg
ICAgICAgLy8gUmVuZGVyVGFyZ2V0MTEgZXhwZWN0cyB0byBiZSB0aGUgb3duZXIgb2YgdGhlIHJl
c291cmNlcyBpdCBpcyBnaXZlbiBidXQgVGV4dHVyZVN0b3JhZ2UxMQotICAgICAgICAgICAgICAg
IC8vIGFsc28gbmVlZHMgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgdGV4dHVyZS4KLSAgICAg
ICAgICAgICAgICBtVGV4dHVyZS0+QWRkUmVmKCk7Ci0KLSAgICAgICAgICAgICAgICBtUmVuZGVy
VGFyZ2V0W2xldmVsXSA9IG5ldyBSZW5kZXJUYXJnZXQxMShtUmVuZGVyZXIsIGRzdiwgbVRleHR1
cmUsIHNydiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVyZVdpZHRoID4+IGxldmVsLCAxVSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpt
YXgobVRleHR1cmVIZWlnaHQgPj4gbGV2ZWwsIDFVKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0
W2xldmVsXTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0g
ICAgfQotfQotCi1JRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlRleHR1cmVTdG9yYWdlMTFfMkQ6
OmdldFNSVigpCi17Ci0gICAgaWYgKCFtU1JWKQotICAgIHsKLSAgICAgICAgSUQzRDExRGV2aWNl
ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0gICAgICAgIEQzRDExX1NIQURF
Ul9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKLSAgICAgICAgc3J2RGVzYy5Gb3JtYXQgPSBt
U2hhZGVyUmVzb3VyY2VGb3JtYXQ7Ci0gICAgICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQz
RDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTJEOwotICAgICAgICBzcnZEZXNjLlRleHR1cmUyRC5N
aXBMZXZlbHMgPSAobU1pcExldmVscyA9PSAwID8gLTEgOiBtTWlwTGV2ZWxzKTsKLSAgICAgICAg
c3J2RGVzYy5UZXh0dXJlMkQuTW9zdERldGFpbGVkTWlwID0gMDsKLQotICAgICAgICBIUkVTVUxU
IHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KG1UZXh0dXJlLCAmc3J2
RGVzYywgJm1TUlYpOwotCi0gICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBz
dGF0aWNfY2FzdDxJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcqPihOVUxMKSk7Ci0gICAgICAgIH0K
LSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
bVNSVjsKLX0KLQotdm9pZCBUZXh0dXJlU3RvcmFnZTExXzJEOjpnZW5lcmF0ZU1pcG1hcChpbnQg
bGV2ZWwpCi17Ci0gICAgUmVuZGVyVGFyZ2V0MTEgKnNvdXJjZSA9IFJlbmRlclRhcmdldDExOjpt
YWtlUmVuZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFyZ2V0KGxldmVsIC0gMSkpOwotICAgIFJlbmRl
clRhcmdldDExICpkZXN0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShnZXRS
ZW5kZXJUYXJnZXQobGV2ZWwpKTsKLQotICAgIGdlbmVyYXRlTWlwbWFwTGF5ZXIoc291cmNlLCBk
ZXN0KTsKLX0KLQotVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpUZXh0dXJlU3RvcmFnZTExX0N1YmUo
UmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdM
ZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKQotICAgIDogVGV4dHVy
ZVN0b3JhZ2UxMShyZW5kZXJlciwgR2V0VGV4dHVyZUJpbmRGbGFncyhnbF9kM2QxMTo6Q29udmVy
dFRleHR1cmVGb3JtYXQoaW50ZXJuYWxmb3JtYXQpLCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlKSkK
LXsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IDY7IGkrKykKLSAgICB7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9U
RVhUVVJFX0xFVkVMUzsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtUmVuZGVyVGFyZ2V0
W2ldW2pdID0gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIERYR0lfRk9STUFUIGNvbnZl
cnRlZEZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0VGV4dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1h
dCk7Ci0gICAgaWYgKGQzZDExOjpJc0RlcHRoU3RlbmNpbEZvcm1hdChjb252ZXJ0ZWRGb3JtYXQp
KQotICAgIHsKLSAgICAgICAgbVRleHR1cmVGb3JtYXQgPSBkM2QxMTo6R2V0RGVwdGhUZXh0dXJl
Rm9ybWF0KGNvbnZlcnRlZEZvcm1hdCk7Ci0gICAgICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9
IGQzZDExOjpHZXREZXB0aFNoYWRlclJlc291cmNlRm9ybWF0KGNvbnZlcnRlZEZvcm1hdCk7Ci0g
ICAgICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBjb252ZXJ0ZWRGb3JtYXQ7Ci0gICAgICAgIG1S
ZW5kZXJUYXJnZXRGb3JtYXQgPSBEWEdJX0ZPUk1BVF9VTktOT1dOOwotICAgIH0KLSAgICBlbHNl
Ci0gICAgewotICAgICAgICBtVGV4dHVyZUZvcm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKLSAgICAg
ICAgbVNoYWRlclJlc291cmNlRm9ybWF0ID0gY29udmVydGVkRm9ybWF0OwotICAgICAgICBtRGVw
dGhTdGVuY2lsRm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5LTk9XTjsKLSAgICAgICAgbVJlbmRlclRh
cmdldEZvcm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKLSAgICB9Ci0KLSAgICAvLyBpZiB0aGUgc2l6
ZSBpcyBub3QgcG9zaXRpdmUgdGhpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBsZXRl
IHRleHR1cmUKLSAgICAvLyB3ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBkM2Qg
dGV4dHVyZSBjcmVhdGlvbgotICAgIGlmIChzaXplID4gMCkKLSAgICB7Ci0gICAgICAgIC8vIGFk
anVzdCBzaXplIGlmIG5lZWRlZCBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlcwotICAgICAgICBpbnQg
aGVpZ2h0ID0gc2l6ZTsKLSAgICAgICAgZ2w6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIGdsOjpJc0Nv
bXByZXNzZWQoaW50ZXJuYWxmb3JtYXQpLCAmc2l6ZSwgJmhlaWdodCwgJm1Mb2RPZmZzZXQpOwot
Ci0gICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsK
LQotICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXNjOwotICAgICAgICBkZXNjLldpZHRo
ID0gc2l6ZTsKLSAgICAgICAgZGVzYy5IZWlnaHQgPSBzaXplOwotICAgICAgICBkZXNjLk1pcExl
dmVscyA9IChsZXZlbHMgPiAwKSA/IGxldmVscyArIG1Mb2RPZmZzZXQgOiAwOwotICAgICAgICBk
ZXNjLkFycmF5U2l6ZSA9IDY7Ci0gICAgICAgIGRlc2MuRm9ybWF0ID0gbVRleHR1cmVGb3JtYXQ7
Ci0gICAgICAgIGRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7Ci0gICAgICAgIGRlc2MuU2FtcGxl
RGVzYy5RdWFsaXR5ID0gMDsKLSAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFV
TFQ7Ci0gICAgICAgIGRlc2MuQmluZEZsYWdzID0gZ2V0QmluZEZsYWdzKCk7Ci0gICAgICAgIGRl
c2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOwotICAgICAgICBkZXNjLk1pc2NGbGFncyA9IEQzRDExX1JF
U09VUkNFX01JU0NfVEVYVFVSRUNVQkU7Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZp
Y2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJm1UZXh0dXJlKTsKLQotICAgICAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQg
PT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgICAgICBFUlIoIkNyZWF0aW5nIGltYWdlIGZhaWxl
ZC4iKTsKLSAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAg
fQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1UZXh0dXJlLT5HZXREZXNj
KCZkZXNjKTsKLSAgICAgICAgICAgIG1NaXBMZXZlbHMgPSBkZXNjLk1pcExldmVsczsKLSAgICAg
ICAgICAgIG1UZXh0dXJlV2lkdGggPSBkZXNjLldpZHRoOwotICAgICAgICAgICAgbVRleHR1cmVI
ZWlnaHQgPSBkZXNjLkhlaWdodDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotVGV4dHVyZVN0b3Jh
Z2UxMV9DdWJlOjp+VGV4dHVyZVN0b3JhZ2UxMV9DdWJlKCkKLXsKLSAgICBpZiAobVRleHR1cmUp
Ci0gICAgewotICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICBtVGV4dHVyZSA9
IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1TUlYpCi0gICAgewotICAgICAgICBtU1JWLT5SZWxl
YXNlKCk7Ci0gICAgICAgIG1TUlYgPSBOVUxMOwotICAgIH0KLQotICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgNjsgaSsrKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aiA9IDA7IGogPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBqKyspCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGRlbGV0ZSBtUmVuZGVyVGFyZ2V0W2ldW2pdOwotICAgICAg
ICAgICAgbVJlbmRlclRhcmdldFtpXVtqXSA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LVRleHR1cmVTdG9yYWdlMTFfQ3ViZSAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjptYWtlVGV4dHVy
ZVN0b3JhZ2UxMV9DdWJlKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKQotewotICAgIEFTU0VSVChI
QVNfRFlOQU1JQ19UWVBFKFRleHR1cmVTdG9yYWdlMTFfQ3ViZSosIHN0b3JhZ2UpKTsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZVN0b3JhZ2UxMV9DdWJlKj4oc3RvcmFnZSk7Ci19Ci0K
LVJlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXRSZW5kZXJUYXJnZXQoR0xl
bnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgZmFjZUlkeCA9
IGdsOjpUZXh0dXJlQ3ViZU1hcDo6ZmFjZUluZGV4KGZhY2VUYXJnZXQpOwotICAgIGlmIChsZXZl
bCA+PSAwICYmIGxldmVsIDwgc3RhdGljX2Nhc3Q8aW50PihtTWlwTGV2ZWxzKSkKLSAgICB7Ci0g
ICAgICAgIGlmICghbVJlbmRlclRhcmdldFtmYWNlSWR4XVtsZXZlbF0pCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsK
LSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0OwotCi0gICAgICAgICAgICBEM0QxMV9TSEFERVJf
UkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7Ci0gICAgICAgICAgICBzcnZEZXNjLkZvcm1hdCA9
IG1TaGFkZXJSZXNvdXJjZUZvcm1hdDsKLSAgICAgICAgICAgIHNydkRlc2MuVmlld0RpbWVuc2lv
biA9IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTJEQVJSQVk7IC8vIFdpbGwgYmUgdXNlZCB3
aXRoIFRleHR1cmUyRCBzYW1wbGVyLCBub3QgVGV4dHVyZUN1YmUKLSAgICAgICAgICAgIHNydkRl
c2MuVGV4dHVyZTJEQXJyYXkuTW9zdERldGFpbGVkTWlwID0gbGV2ZWw7Ci0gICAgICAgICAgICBz
cnZEZXNjLlRleHR1cmUyREFycmF5Lk1pcExldmVscyA9IDE7Ci0gICAgICAgICAgICBzcnZEZXNj
LlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9IGZhY2VJZHg7Ci0gICAgICAgICAgICBz
cnZEZXNjLlRleHR1cmUyREFycmF5LkFycmF5U2l6ZSA9IDE7Ci0KLSAgICAgICAgICAgIElEM0Qx
MVNoYWRlclJlc291cmNlVmlldyAqc3J2OwotICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5D
cmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcobVRleHR1cmUsICZzcnZEZXNjLCAmc3J2KTsKLQotICAg
ICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nh
c3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgICAgICAgICAgaWYgKG1SZW5kZXJUYXJnZXRG
b3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOwotICAgICAgICAgICAg
ICAgIHJ0dkRlc2MuRm9ybWF0ID0gbVJlbmRlclRhcmdldEZvcm1hdDsKLSAgICAgICAgICAgICAg
ICBydHZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyREFS
UkFZOwotICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlwU2xpY2UgPSBs
ZXZlbDsKLSAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlT
bGljZSA9IGZhY2VJZHg7Ci0gICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlMkRBcnJheS5B
cnJheVNpemUgPSAxOwotCi0gICAgICAgICAgICAgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAq
cnR2OwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0
VmlldyhtVGV4dHVyZSwgJnJ0dkRlc2MsICZydHYpOwotCi0gICAgICAgICAgICAgICAgaWYgKHJl
c3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgc3J2LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOwotCi0gICAgICAgICAgICAgICAgLy8gUmVuZGVyVGFyZ2V0MTEgZXhwZWN0cyB0byBiZSB0
aGUgb3duZXIgb2YgdGhlIHJlc291cmNlcyBpdCBpcyBnaXZlbiBidXQgVGV4dHVyZVN0b3JhZ2Ux
MQotICAgICAgICAgICAgICAgIC8vIGFsc28gbmVlZHMgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0
aGUgdGV4dHVyZS4KLSAgICAgICAgICAgICAgICBtVGV4dHVyZS0+QWRkUmVmKCk7Ci0KLSAgICAg
ICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2ZhY2VJZHhdW2xldmVsXSA9IG5ldyBSZW5kZXJUYXJn
ZXQxMShtUmVuZGVyZXIsIHJ0diwgbVRleHR1cmUsIHNydiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heCht
VGV4dHVyZVdpZHRoID4+IGxldmVsLCAxVSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobVRleHR1cmVI
ZWlnaHQgPj4gbGV2ZWwsIDFVKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlm
IChtRGVwdGhTdGVuY2lsRm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgRDNEMTFfREVQVEhfU1RFTkNJTF9WSUVXX0RFU0MgZHN2RGVz
YzsKLSAgICAgICAgICAgICAgICBkc3ZEZXNjLkZvcm1hdCA9IG1SZW5kZXJUYXJnZXRGb3JtYXQ7
Ci0gICAgICAgICAgICAgICAgZHN2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfRFNWX0RJTUVO
U0lPTl9URVhUVVJFMkRBUlJBWTsKLSAgICAgICAgICAgICAgICBkc3ZEZXNjLlRleHR1cmUyREFy
cmF5Lk1pcFNsaWNlID0gbGV2ZWw7Ci0gICAgICAgICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkRB
cnJheS5GaXJzdEFycmF5U2xpY2UgPSBmYWNlSWR4OwotICAgICAgICAgICAgICAgIGRzdkRlc2Mu
VGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0gMTsKLQotICAgICAgICAgICAgICAgIElEM0QxMURl
cHRoU3RlbmNpbFZpZXcgKmRzdjsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZURlcHRoU3RlbmNpbFZpZXcobVRleHR1cmUsICZkc3ZEZXNjLCAmZHN2KTsKLQotICAgICAg
ICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHNydi0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PFJlbmRlclRh
cmdldCo+KE5VTEwpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdldDEx
IGV4cGVjdHMgdG8gYmUgdGhlIG93bmVyIG9mIHRoZSByZXNvdXJjZXMgaXQgaXMgZ2l2ZW4gYnV0
IFRleHR1cmVTdG9yYWdlMTEKLSAgICAgICAgICAgICAgICAvLyBhbHNvIG5lZWRzIHRvIGtlZXAg
YSByZWZlcmVuY2UgdG8gdGhlIHRleHR1cmUuCi0gICAgICAgICAgICAgICAgbVRleHR1cmUtPkFk
ZFJlZigpOwotCi0gICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldFtmYWNlSWR4XVtsZXZlbF0g
PSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJlbmRlcmVyLCBkc3YsIG1UZXh0dXJlLCBzcnYsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RkOjptYXgobVRleHR1cmVXaWR0aCA+PiBsZXZlbCwgMVUpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ZDo6bWF4KG1UZXh0dXJlSGVpZ2h0ID4+IGxldmVsLCAxVSkpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbVJlbmRlclRh
cmdldFtmYWNlSWR4XVtsZXZlbF07Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBOVUxMOwotICAgIH0KLX0KLQotSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJl
U3RvcmFnZTExX0N1YmU6OmdldFNSVigpCi17Ci0gICAgaWYgKCFtU1JWKQotICAgIHsKLSAgICAg
ICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0gICAg
ICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKLSAgICAgICAgc3J2
RGVzYy5Gb3JtYXQgPSBtU2hhZGVyUmVzb3VyY2VGb3JtYXQ7Ci0gICAgICAgIHNydkRlc2MuVmll
d0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRUNVQkU7Ci0gICAgICAgIHNy
dkRlc2MuVGV4dHVyZUN1YmUuTWlwTGV2ZWxzID0gKG1NaXBMZXZlbHMgPT0gMCA/IC0xIDogbU1p
cExldmVscyk7Ci0gICAgICAgIHNydkRlc2MuVGV4dHVyZUN1YmUuTW9zdERldGFpbGVkTWlwID0g
MDsKLQotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3Vy
Y2VWaWV3KG1UZXh0dXJlLCAmc3J2RGVzYywgJm1TUlYpOwotCi0gICAgICAgIGlmIChyZXN1bHQg
PT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcq
PihOVUxMKSk7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gbVNSVjsKLX0KLQotdm9pZCBUZXh0dXJlU3RvcmFnZTExX0N1
YmU6OmdlbmVyYXRlTWlwbWFwKGludCBmYWNlLCBpbnQgbGV2ZWwpCi17Ci0gICAgUmVuZGVyVGFy
Z2V0MTEgKnNvdXJjZSA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoZ2V0UmVu
ZGVyVGFyZ2V0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsIC0g
MSkpOwotICAgIFJlbmRlclRhcmdldDExICpkZXN0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5k
ZXJUYXJnZXQxMShnZXRSZW5kZXJUYXJnZXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
ICsgZmFjZSwgbGV2ZWwpKTsKLQotICAgIGdlbmVyYXRlTWlwbWFwTGF5ZXIoc291cmNlLCBkZXN0
KTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZTExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlMTEuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggM2M1ZGVkMDViODg5NzY5N2QzOTM2ZDA1MDk3ZGY0ZGU5OGI3OWJj
ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlMTEu
aAorKysgL2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAy
MDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVGV4
dHVyZVN0b3JhZ2UxMS5oOiBEZWZpbmVzIHRoZSBhYnN0cmFjdCByeDo6VGV4dHVyZVN0b3JhZ2Ux
MSBjbGFzcyBhbmQgaXRzIGNvbmNyZXRlIGRlcml2ZWQKLS8vIGNsYXNzZXMgVGV4dHVyZVN0b3Jh
Z2UxMV8yRCBhbmQgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlLCB3aGljaCBhY3QgYXMgdGhlIGludGVy
ZmFjZSB0byB0aGUgRDNEMTEgdGV4dHVyZS4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJf
VEVYVFVSRVNUT1JBR0UxMV9IXwotI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfVEVYVFVSRVNU
T1JBR0UxMV9IXwotCi0jaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKLSNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0b3JhZ2UuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci1j
bGFzcyBSZW5kZXJUYXJnZXQ7Ci1jbGFzcyBSZW5kZXJUYXJnZXQxMTsKLWNsYXNzIFJlbmRlcmVy
OwotY2xhc3MgUmVuZGVyZXIxMTsKLWNsYXNzIFN3YXBDaGFpbjExOwotCi1jbGFzcyBUZXh0dXJl
U3RvcmFnZTExIDogcHVibGljIFRleHR1cmVTdG9yYWdlCi17Ci0gIHB1YmxpYzoKLSAgICBUZXh0
dXJlU3RvcmFnZTExKFJlbmRlcmVyICpyZW5kZXJlciwgVUlOVCBiaW5kRmxhZ3MpOwotICAgIHZp
cnR1YWwgflRleHR1cmVTdG9yYWdlMTEoKTsKLQotICAgIHN0YXRpYyBUZXh0dXJlU3RvcmFnZTEx
ICptYWtlVGV4dHVyZVN0b3JhZ2UxMShUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSk7Ci0KLSAgICBz
dGF0aWMgRFdPUkQgR2V0VGV4dHVyZUJpbmRGbGFncyhEWEdJX0ZPUk1BVCBkM2RmbXQsIEdMZW51
bSBnbHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSk7Ci0gICAgc3RhdGljIGJvb2wgSXNUZXh0
dXJlRm9ybWF0UmVuZGVyYWJsZShEWEdJX0ZPUk1BVCBmb3JtYXQpOwotCi0gICAgVUlOVCBnZXRC
aW5kRmxhZ3MoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgSUQzRDExVGV4dHVyZTJEICpnZXRCYXNl
VGV4dHVyZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpn
ZXRTUlYoKSA9IDA7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgp
IHsgcmV0dXJuIGdldFJlbmRlclRhcmdldCgwKTsgfQotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0
ICpnZXRSZW5kZXJUYXJnZXQoaW50IGxldmVsKSB7IHJldHVybiBOVUxMOyB9Ci0gICAgdmlydHVh
bCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVudW0gZmFjZVRhcmdldCkgeyByZXR1
cm4gZ2V0UmVuZGVyVGFyZ2V0KGZhY2VUYXJnZXQsIDApOyB9Ci0gICAgdmlydHVhbCBSZW5kZXJU
YXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsKSB7IHJl
dHVybiBOVUxMOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVs
KSB7fTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZl
bCkge307Ci0KLSAgICB2aXJ0dWFsIGludCBnZXRMb2RPZmZzZXQoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGJvb2wgaXNSZW5kZXJUYXJnZXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNNYW5h
Z2VkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgbGV2ZWxDb3VudCgpOwotICAgIFVJTlQgZ2V0
U3VicmVzb3VyY2VJbmRleChpbnQgbGV2ZWwsIGludCBmYWNlVGFyZ2V0KTsKLQotICAgIGJvb2wg
dXBkYXRlU3VicmVzb3VyY2VMZXZlbChJRDNEMTFUZXh0dXJlMkQgKnRleHR1cmUsIHVuc2lnbmVk
IGludCBzb3VyY2VTdWJyZXNvdXJjZSwgaW50IGxldmVsLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgZmFjZVRhcmdldCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotCi0gIHByb3RlY3RlZDoKLSAgICB2b2lk
IGdlbmVyYXRlTWlwbWFwTGF5ZXIoUmVuZGVyVGFyZ2V0MTEgKnNvdXJjZSwgUmVuZGVyVGFyZ2V0
MTEgKmRlc3QpOwotCi0gICAgUmVuZGVyZXIxMSAqbVJlbmRlcmVyOwotICAgIGludCBtTG9kT2Zm
c2V0OwotICAgIHVuc2lnbmVkIGludCBtTWlwTGV2ZWxzOwotCi0gICAgSUQzRDExVGV4dHVyZTJE
ICptVGV4dHVyZTsKLSAgICBEWEdJX0ZPUk1BVCBtVGV4dHVyZUZvcm1hdDsKLSAgICBEWEdJX0ZP
Uk1BVCBtU2hhZGVyUmVzb3VyY2VGb3JtYXQ7Ci0gICAgRFhHSV9GT1JNQVQgbVJlbmRlclRhcmdl
dEZvcm1hdDsKLSAgICBEWEdJX0ZPUk1BVCBtRGVwdGhTdGVuY2lsRm9ybWF0OwotICAgIHVuc2ln
bmVkIGludCBtVGV4dHVyZVdpZHRoOwotICAgIHVuc2lnbmVkIGludCBtVGV4dHVyZUhlaWdodDsK
LQotICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqbVNSVjsKLQotICBwcml2YXRlOgotICAg
IERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZTExKTsKLQotICAgIGNvbnN0
IFVJTlQgbUJpbmRGbGFnczsKLX07Ci0KLWNsYXNzIFRleHR1cmVTdG9yYWdlMTFfMkQgOiBwdWJs
aWMgVGV4dHVyZVN0b3JhZ2UxMQotewotICBwdWJsaWM6Ci0gICAgVGV4dHVyZVN0b3JhZ2UxMV8y
RChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBDaGFpbjExICpzd2FwY2hhaW4pOwotICAgIFRleHR1
cmVTdG9yYWdlMTFfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTExXzJE
KCk7Ci0KLSAgICBzdGF0aWMgVGV4dHVyZVN0b3JhZ2UxMV8yRCAqbWFrZVRleHR1cmVTdG9yYWdl
MTFfMkQoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpOwotCi0gICAgdmlydHVhbCBJRDNEMTFTaGFk
ZXJSZXNvdXJjZVZpZXcgKmdldFNSVigpOwotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRS
ZW5kZXJUYXJnZXQoaW50IGxldmVsKTsKLQotICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1h
cChpbnQgbGV2ZWwpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KFRleHR1cmVTdG9yYWdlMTFfMkQpOwotCi0gICAgUmVuZGVyVGFyZ2V0MTEgKm1SZW5kZXJUYXJn
ZXRbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107Ci19OwotCi1jbGFzcyBU
ZXh0dXJlU3RvcmFnZTExX0N1YmUgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UxMQotewotICBwdWJs
aWM6Ci0gICAgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxl
dmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5k
ZXJhYmxlLCBpbnQgc2l6ZSk7Ci0gICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2UxMV9DdWJlKCk7
Ci0KLSAgICBzdGF0aWMgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlICptYWtlVGV4dHVyZVN0b3JhZ2Ux
MV9DdWJlKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKTsKLQotICAgIHZpcnR1YWwgSUQzRDExU2hh
ZGVyUmVzb3VyY2VWaWV3ICpnZXRTUlYoKTsKLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0
UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpOwotCi0gICAgdmlydHVh
bCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBmYWNlLCBpbnQgbGV2ZWwpOwotCi0gIHByaXZhdGU6
Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlMTFfQ3ViZSk7Ci0K
LSAgICBSZW5kZXJUYXJnZXQxMSAqbVJlbmRlclRhcmdldFs2XVtnbDo6SU1QTEVNRU5UQVRJT05f
TUFYX1RFWFRVUkVfTEVWRUxTXTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5E
RVJFUl9URVhUVVJFU1RPUkFHRTExX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlOS5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlOS5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhYTc0YTdjYmExYjQzNzA4ZTMwYTNh
ZjllNzVhNzEwYjk3ODY0YTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9U
ZXh0dXJlU3RvcmFnZTkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLSNpbmNs
dWRlICJwcmVjb21waWxlZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQot
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRleHR1cmVTdG9yYWdlOS5j
cHA6IEltcGxlbWVudHMgdGhlIGFic3RyYWN0IHJ4OjpUZXh0dXJlU3RvcmFnZTkgY2xhc3MgYW5k
IGl0cyBjb25jcmV0ZSBkZXJpdmVkCi0vLyBjbGFzc2VzIFRleHR1cmVTdG9yYWdlOV8yRCBhbmQg
VGV4dHVyZVN0b3JhZ2U5X0N1YmUsIHdoaWNoIGFjdCBhcyB0aGUgaW50ZXJmYWNlIHRvIHRoZQot
Ly8gRDNEOSB0ZXh0dXJlLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXI5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL1RleHR1cmVTdG9yYWdlOS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9T
d2FwQ2hhaW45LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldDku
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXI5X3V0aWxzLmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci1UZXh0dXJlU3Rv
cmFnZTk6OlRleHR1cmVTdG9yYWdlOShSZW5kZXJlciAqcmVuZGVyZXIsIERXT1JEIHVzYWdlKQot
ICAgIDogbUxvZE9mZnNldCgwKSwKLSAgICAgIG1SZW5kZXJlcihSZW5kZXJlcjk6Om1ha2VSZW5k
ZXJlcjkocmVuZGVyZXIpKSwKLSAgICAgIG1EM0RVc2FnZSh1c2FnZSksCi0gICAgICBtRDNEUG9v
bChtUmVuZGVyZXItPmdldFRleHR1cmVQb29sKHVzYWdlKSkKLXsKLX0KLQotVGV4dHVyZVN0b3Jh
Z2U5Ojp+VGV4dHVyZVN0b3JhZ2U5KCkKLXsKLX0KLQotVGV4dHVyZVN0b3JhZ2U5ICpUZXh0dXJl
U3RvcmFnZTk6Om1ha2VUZXh0dXJlU3RvcmFnZTkoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpCi17
Ci0gICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoVGV4dHVyZVN0b3JhZ2U5Kiwgc3RvcmFnZSkp
OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlU3RvcmFnZTkqPihzdG9yYWdlKTsKLX0K
LQotRFdPUkQgVGV4dHVyZVN0b3JhZ2U5OjpHZXRUZXh0dXJlVXNhZ2UoRDNERk9STUFUIGQzZGZt
dCwgR0xlbnVtIGdsdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlKQotewotICAgIERXT1JEIGQz
ZHVzYWdlID0gMDsKLQotICAgIGlmIChkM2RmbXQgPT0gRDNERk1UX0lOVFopCi0gICAgewotICAg
ICAgICBkM2R1c2FnZSB8PSBEM0RVU0FHRV9ERVBUSFNURU5DSUw7Ci0gICAgfQotICAgIGVsc2Ug
aWYoZm9yY2VSZW5kZXJhYmxlIHx8IChUZXh0dXJlU3RvcmFnZTk6OklzVGV4dHVyZUZvcm1hdFJl
bmRlcmFibGUoZDNkZm10KSAmJiAoZ2x1c2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X0FOR0xFKSkpCi0gICAgewotICAgICAgICBkM2R1c2FnZSB8PSBEM0RVU0FHRV9SRU5ERVJUQVJH
RVQ7Ci0gICAgfQotICAgIHJldHVybiBkM2R1c2FnZTsKLX0KLQotYm9vbCBUZXh0dXJlU3RvcmFn
ZTk6OklzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoRDNERk9STUFUIGZvcm1hdCkKLXsKLSAgICBp
ZiAoZm9ybWF0ID09IEQzREZNVF9JTlRaKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotICAgIHN3aXRjaChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfTDg6Ci0g
ICAgICBjYXNlIEQzREZNVF9BOEw4OgotICAgICAgY2FzZSBEM0RGTVRfRFhUMToKLSAgICAgIGNh
c2UgRDNERk1UX0RYVDM6Ci0gICAgICBjYXNlIEQzREZNVF9EWFQ1OgotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgIGNhc2UgRDNERk1UX1g4
UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKLSAgICAgIGNhc2UgRDNE
Rk1UX0EzMkIzMkczMlIzMkY6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWJvb2wgVGV4dHVyZVN0b3JhZ2U5Ojppc1JlbmRlclRhcmdldCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIChtRDNEVXNhZ2UgJiAoRDNEVVNBR0VfUkVOREVSVEFSR0VUIHwgRDNEVVNBR0VfREVQVEhT
VEVOQ0lMKSkgIT0gMDsKLX0KLQotYm9vbCBUZXh0dXJlU3RvcmFnZTk6OmlzTWFuYWdlZCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIChtRDNEUG9vbCA9PSBEM0RQT09MX01BTkFHRUQpOwotfQotCi1E
M0RQT09MIFRleHR1cmVTdG9yYWdlOTo6Z2V0UG9vbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1E
M0RQb29sOwotfQotCi1EV09SRCBUZXh0dXJlU3RvcmFnZTk6OmdldFVzYWdlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbUQzRFVzYWdlOwotfQotCi1pbnQgVGV4dHVyZVN0b3JhZ2U5OjpnZXRMb2RP
ZmZzZXQoKSBjb25zdAotewotICAgIHJldHVybiBtTG9kT2Zmc2V0OwotfQotCi1pbnQgVGV4dHVy
ZVN0b3JhZ2U5OjpsZXZlbENvdW50KCkKLXsKLSAgICByZXR1cm4gZ2V0QmFzZVRleHR1cmUoKSA/
IGdldEJhc2VUZXh0dXJlKCktPkdldExldmVsQ291bnQoKSAtIGdldExvZE9mZnNldCgpIDogMDsK
LX0KLQotVGV4dHVyZVN0b3JhZ2U5XzJEOjpUZXh0dXJlU3RvcmFnZTlfMkQoUmVuZGVyZXIgKnJl
bmRlcmVyLCBTd2FwQ2hhaW45ICpzd2FwY2hhaW4pIDogVGV4dHVyZVN0b3JhZ2U5KHJlbmRlcmVy
LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQpCi17Ci0gICAgSURpcmVjdDNEVGV4dHVyZTkgKnN1cmZh
Y2VUZXh0dXJlID0gc3dhcGNoYWluLT5nZXRPZmZzY3JlZW5UZXh0dXJlKCk7Ci0gICAgbVRleHR1
cmUgPSBzdXJmYWNlVGV4dHVyZTsKLSAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKLQotICAgIGlu
aXRpYWxpemVSZW5kZXJUYXJnZXQoKTsKLX0KLQotVGV4dHVyZVN0b3JhZ2U5XzJEOjpUZXh0dXJl
U3RvcmFnZTlfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KQotICAgIDogVGV4dHVyZVN0b3JhZ2U5KHJlbmRlcmVyLCBHZXRU
ZXh0dXJlVXNhZ2UoUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5KHJlbmRlcmVyKS0+Q29udmVydFRl
eHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCksIHVzYWdlLCBmb3JjZVJlbmRlcmFi
bGUpKQotewotICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsK
LSAgICAvLyBpZiB0aGUgd2lkdGggb3IgaGVpZ2h0IGlzIG5vdCBwb3NpdGl2ZSB0aGlzIHNob3Vs
ZCBiZSB0cmVhdGVkIGFzIGFuIGluY29tcGxldGUgdGV4dHVyZQotICAgIC8vIHdlIGhhbmRsZSB0
aGF0IGhlcmUgYnkgc2tpcHBpbmcgdGhlIGQzZCB0ZXh0dXJlIGNyZWF0aW9uCi0gICAgaWYgKHdp
ZHRoID4gMCAmJiBoZWlnaHQgPiAwKQotICAgIHsKLSAgICAgICAgSURpcmVjdDNERGV2aWNlOSAq
ZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLSAgICAgICAgZ2w6Ok1ha2VWYWxpZFNp
emUoZmFsc2UsIGdsOjpJc0NvbXByZXNzZWQoaW50ZXJuYWxmb3JtYXQpLCAmd2lkdGgsICZoZWln
aHQsICZtTG9kT2Zmc2V0KTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZVRleHR1cmUod2lkdGgsIGhlaWdodCwgbGV2ZWxzID8gbGV2ZWxzICsgbUxvZE9mZnNldCA6IDAs
IGdldFVzYWdlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1SZW5kZXJlci0+Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1h
dCksIGdldFBvb2woKSwgJm1UZXh0dXJlLCBOVUxMKTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09V
VE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICAgICAg
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaW5p
dGlhbGl6ZVJlbmRlclRhcmdldCgpOwotfQotCi1UZXh0dXJlU3RvcmFnZTlfMkQ6On5UZXh0dXJl
U3RvcmFnZTlfMkQoKQotewotICAgIGlmIChtVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1UZXh0
dXJlLT5SZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgZGVsZXRlIG1SZW5kZXJUYXJnZXQ7Ci19Ci0K
LVRleHR1cmVTdG9yYWdlOV8yRCAqVGV4dHVyZVN0b3JhZ2U5XzJEOjptYWtlVGV4dHVyZVN0b3Jh
Z2U5XzJEKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKQotewotICAgIEFTU0VSVChIQVNfRFlOQU1J
Q19UWVBFKFRleHR1cmVTdG9yYWdlOV8yRCosIHN0b3JhZ2UpKTsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VGV4dHVyZVN0b3JhZ2U5XzJEKj4oc3RvcmFnZSk7Ci19Ci0KLS8vIEluY3JlbWVudHMg
cmVmY291bnQgb24gc3VyZmFjZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJu
ZWQgc3VyZmFjZQotSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVTdG9yYWdlOV8yRDo6Z2V0U3Vy
ZmFjZUxldmVsKGludCBsZXZlbCwgYm9vbCBkaXJ0eSkKLXsKLSAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqc3VyZmFjZSA9IE5VTEw7Ci0KLSAgICBpZiAobVRleHR1cmUpCi0gICAgewotICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWwgKyBtTG9kT2Zm
c2V0LCAmc3VyZmFjZSk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAg
ICAgICAgLy8gV2l0aCBtYW5hZ2VkIHRleHR1cmVzIHRoZSBkcml2ZXIgbmVlZHMgdG8gYmUgaW5m
b3JtZWQgb2YgdXBkYXRlcyB0byB0aGUgbG93ZXIgbWlwbWFwIGxldmVscwotICAgICAgICBpZiAo
bGV2ZWwgKyBtTG9kT2Zmc2V0ICE9IDAgJiYgaXNNYW5hZ2VkKCkgJiYgZGlydHkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1UZXh0dXJlLT5BZGREaXJ0eVJlY3QoTlVMTCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gc3VyZmFjZTsKLX0KLQotUmVuZGVyVGFyZ2V0ICpUZXh0dXJl
U3RvcmFnZTlfMkQ6OmdldFJlbmRlclRhcmdldCgpCi17Ci0gICAgcmV0dXJuIG1SZW5kZXJUYXJn
ZXQ7Ci19Ci0KLXZvaWQgVGV4dHVyZVN0b3JhZ2U5XzJEOjpnZW5lcmF0ZU1pcG1hcChpbnQgbGV2
ZWwpCi17Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnVwcGVyID0gZ2V0U3VyZmFjZUxldmVsKGxl
dmVsIC0gMSwgZmFsc2UpOwotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpsb3dlciA9IGdldFN1cmZh
Y2VMZXZlbChsZXZlbCwgdHJ1ZSk7Ci0KLSAgICBpZiAodXBwZXIgIT0gTlVMTCAmJiBsb3dlciAh
PSBOVUxMKQotICAgIHsKLSAgICAgICAgbVJlbmRlcmVyLT5ib3hGaWx0ZXIodXBwZXIsIGxvd2Vy
KTsKLSAgICB9Ci0KLSAgICBpZiAodXBwZXIgIT0gTlVMTCkgdXBwZXItPlJlbGVhc2UoKTsKLSAg
ICBpZiAobG93ZXIgIT0gTlVMTCkgbG93ZXItPlJlbGVhc2UoKTsKLX0KLQotSURpcmVjdDNEQmFz
ZVRleHR1cmU5ICpUZXh0dXJlU3RvcmFnZTlfMkQ6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbVRleHR1cmU7Ci19Ci0KLXZvaWQgVGV4dHVyZVN0b3JhZ2U5XzJEOjppbml0
aWFsaXplUmVuZGVyVGFyZ2V0KCkKLXsKLSAgICBBU1NFUlQobVJlbmRlclRhcmdldCA9PSBOVUxM
KTsKLQotICAgIGlmIChtVGV4dHVyZSAhPSBOVUxMICYmIGlzUmVuZGVyVGFyZ2V0KCkpCi0gICAg
ewotICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IGdldFN1cmZhY2VMZXZlbCgw
LCBmYWxzZSk7Ci0KLSAgICAgICAgbVJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQ5KG1S
ZW5kZXJlciwgc3VyZmFjZSk7Ci0gICAgfQotfQotCi1UZXh0dXJlU3RvcmFnZTlfQ3ViZTo6VGV4
dHVyZVN0b3JhZ2U5X0N1YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIGludCBz
aXplKQotICAgIDogVGV4dHVyZVN0b3JhZ2U5KHJlbmRlcmVyLCBHZXRUZXh0dXJlVXNhZ2UoUmVu
ZGVyZXI5OjptYWtlUmVuZGVyZXI5KHJlbmRlcmVyKS0+Q29udmVydFRleHR1cmVJbnRlcm5hbEZv
cm1hdChpbnRlcm5hbGZvcm1hdCksIHVzYWdlLCBmb3JjZVJlbmRlcmFibGUpKQotewotICAgIG1U
ZXh0dXJlID0gTlVMTDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7ICsraSkKLSAgICB7Ci0g
ICAgICAgIG1SZW5kZXJUYXJnZXRbaV0gPSBOVUxMOwotICAgIH0KLQotICAgIC8vIGlmIHRoZSBz
aXplIGlzIG5vdCBwb3NpdGl2ZSB0aGlzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGluY29tcGxl
dGUgdGV4dHVyZQotICAgIC8vIHdlIGhhbmRsZSB0aGF0IGhlcmUgYnkgc2tpcHBpbmcgdGhlIGQz
ZCB0ZXh0dXJlIGNyZWF0aW9uCi0gICAgaWYgKHNpemUgPiAwKQotICAgIHsKLSAgICAgICAgSURp
cmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLSAgICAgICAg
aW50IGhlaWdodCA9IHNpemU7Ci0gICAgICAgIGdsOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBnbDo6
SXNDb21wcmVzc2VkKGludGVybmFsZm9ybWF0KSwgJnNpemUsICZoZWlnaHQsICZtTG9kT2Zmc2V0
KTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUN1YmVUZXh0dXJlKHNp
emUsIGxldmVscyA/IGxldmVscyArIG1Mb2RPZmZzZXQgOiAwLCBnZXRVc2FnZSgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJlbmRlcmVyLT5D
b252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0KSwgZ2V0UG9vbCgpLCAm
bVRleHR1cmUsIE5VTEwpOwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAg
ewotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8
fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpbml0aWFsaXplUmVuZGVyVGFy
Z2V0KCk7Ci19Ci0KLVRleHR1cmVTdG9yYWdlOV9DdWJlOjp+VGV4dHVyZVN0b3JhZ2U5X0N1YmUo
KQotewotICAgIGlmIChtVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1UZXh0dXJlLT5SZWxlYXNl
KCk7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyArK2kpCi0gICAgewotICAg
ICAgICBkZWxldGUgbVJlbmRlclRhcmdldFtpXTsKLSAgICB9Ci19Ci0KLVRleHR1cmVTdG9yYWdl
OV9DdWJlICpUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlOV9DdWJlKFRl
eHR1cmVTdG9yYWdlICpzdG9yYWdlKQotewotICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKFRl
eHR1cmVTdG9yYWdlOV9DdWJlKiwgc3RvcmFnZSkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
ZXh0dXJlU3RvcmFnZTlfQ3ViZSo+KHN0b3JhZ2UpOwotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNv
dW50IG9uIHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1
cmZhY2UKLUlEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6Z2V0Q3ViZU1h
cFN1cmZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCwgYm9vbCBkaXJ0eSkKLXsKLSAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IE5VTEw7Ci0KLSAgICBpZiAobVRleHR1cmUp
Ci0gICAgewotICAgICAgICBEM0RDVUJFTUFQX0ZBQ0VTIGZhY2UgPSBnbF9kM2Q5OjpDb252ZXJ0
Q3ViZUZhY2UoZmFjZVRhcmdldCk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVRleHR1cmUt
PkdldEN1YmVNYXBTdXJmYWNlKGZhY2UsIGxldmVsICsgbUxvZE9mZnNldCwgJnN1cmZhY2UpOwot
ICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgIC8vIFdpdGggbWFu
YWdlZCB0ZXh0dXJlcyB0aGUgZHJpdmVyIG5lZWRzIHRvIGJlIGluZm9ybWVkIG9mIHVwZGF0ZXMg
dG8gdGhlIGxvd2VyIG1pcG1hcCBsZXZlbHMKLSAgICAgICAgaWYgKGxldmVsICE9IDAgJiYgaXNN
YW5hZ2VkKCkgJiYgZGlydHkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1UZXh0dXJlLT5BZGRE
aXJ0eVJlY3QoZmFjZSwgTlVMTCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gc3Vy
ZmFjZTsKLX0KLQotUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6Z2V0UmVuZGVy
VGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0KQotewotICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0W2ds
OjpUZXh0dXJlQ3ViZU1hcDo6ZmFjZUluZGV4KGZhY2VUYXJnZXQpXTsKLX0KLQotdm9pZCBUZXh0
dXJlU3RvcmFnZTlfQ3ViZTo6Z2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCkKLXsK
LSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqdXBwZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShHTF9URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCAtIDEsIGZhbHNlKTsKLSAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqbG93ZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCwgdHJ1ZSk7Ci0KLSAgICBpZiAodXBwZXIg
IT0gTlVMTCAmJiBsb3dlciAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgbVJlbmRlcmVyLT5ib3hG
aWx0ZXIodXBwZXIsIGxvd2VyKTsKLSAgICB9Ci0KLSAgICBpZiAodXBwZXIgIT0gTlVMTCkgdXBw
ZXItPlJlbGVhc2UoKTsKLSAgICBpZiAobG93ZXIgIT0gTlVMTCkgbG93ZXItPlJlbGVhc2UoKTsK
LX0KLQotSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6Z2V0QmFz
ZVRleHR1cmUoKSBjb25zdAotewotICAgIHJldHVybiBtVGV4dHVyZTsKLX0KLQotdm9pZCBUZXh0
dXJlU3RvcmFnZTlfQ3ViZTo6aW5pdGlhbGl6ZVJlbmRlclRhcmdldCgpCi17Ci0gICAgaWYgKG1U
ZXh0dXJlICE9IE5VTEwgJiYgaXNSZW5kZXJUYXJnZXQoKSkKLSAgICB7Ci0gICAgICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gTlVMTDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IDY7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1SZW5kZXJUYXJnZXRb
aV0gPT0gTlVMTCk7Ci0KLSAgICAgICAgICAgIHN1cmZhY2UgPSBnZXRDdWJlTWFwU3VyZmFjZShH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBpLCAwLCBmYWxzZSk7Ci0KLSAgICAgICAg
ICAgIG1SZW5kZXJUYXJnZXRbaV0gPSBuZXcgUmVuZGVyVGFyZ2V0OShtUmVuZGVyZXIsIHN1cmZh
Y2UpOwotICAgICAgICB9Ci0gICAgfQotfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9UZXh0dXJlU3RvcmFnZTkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0b3JhZ2U5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDg2ZjU1MWExMzE1ZGE0NTM3MTNmYTE5NmQ3NzI4ZjcyNTdlMmJkODYuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZTkuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDEwOSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVGV4dHVyZVN0b3JhZ2U5
Lmg6IERlZmluZXMgdGhlIGFic3RyYWN0IHJ4OjpUZXh0dXJlU3RvcmFnZTkgY2xhc3MgYW5kIGl0
cyBjb25jcmV0ZSBkZXJpdmVkCi0vLyBjbGFzc2VzIFRleHR1cmVTdG9yYWdlOV8yRCBhbmQgVGV4
dHVyZVN0b3JhZ2U5X0N1YmUsIHdoaWNoIGFjdCBhcyB0aGUgaW50ZXJmYWNlIHRvIHRoZQotLy8g
RDNEOSB0ZXh0dXJlLgotCi0jaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9URVhUVVJFU1RPUkFH
RTlfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1RFWFRVUkVTVE9SQUdFOV9IXwotCi0j
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlLmgiCi0jaW5jbHVkZSAi
Y29tbW9uL2RlYnVnLmgiCi0KLW5hbWVzcGFjZSByeAotewotY2xhc3MgUmVuZGVyZXI5OwotY2xh
c3MgU3dhcENoYWluOTsKLWNsYXNzIFJlbmRlclRhcmdldDsKLWNsYXNzIFJlbmRlclRhcmdldDk7
Ci1jbGFzcyBCbGl0OwotCi1jbGFzcyBUZXh0dXJlU3RvcmFnZTkgOiBwdWJsaWMgVGV4dHVyZVN0
b3JhZ2UKLXsKLSAgcHVibGljOgotICAgIFRleHR1cmVTdG9yYWdlOShSZW5kZXJlciAqcmVuZGVy
ZXIsIERXT1JEIHVzYWdlKTsKLSAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTkoKTsKLQotICAg
IHN0YXRpYyBUZXh0dXJlU3RvcmFnZTkgKm1ha2VUZXh0dXJlU3RvcmFnZTkoVGV4dHVyZVN0b3Jh
Z2UgKnN0b3JhZ2UpOwotCi0gICAgc3RhdGljIERXT1JEIEdldFRleHR1cmVVc2FnZShEM0RGT1JN
QVQgZDNkZm10LCBHTGVudW0gZ2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUpOwotICAgIHN0
YXRpYyBib29sIElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoRDNERk9STUFUIGZvcm1hdCk7Ci0K
LSAgICBEM0RQT09MIGdldFBvb2woKSBjb25zdDsKLSAgICBEV09SRCBnZXRVc2FnZSgpIGNvbnN0
OwotCi0gICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkg
Y29uc3QgPSAwOwotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoKSB7
IHJldHVybiBOVUxMOyB9Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdl
dChHTGVudW0gZmFjZVRhcmdldCkgeyByZXR1cm4gTlVMTDsgfQotICAgIHZpcnR1YWwgdm9pZCBn
ZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpIHt9OwotICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1p
cG1hcChpbnQgZmFjZSwgaW50IGxldmVsKSB7fTsKLQotICAgIHZpcnR1YWwgaW50IGdldExvZE9m
ZnNldCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlclRhcmdldCgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgYm9vbCBpc01hbmFnZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBsZXZl
bENvdW50KCk7Ci0KLSAgcHJvdGVjdGVkOgotICAgIGludCBtTG9kT2Zmc2V0OwotICAgIFJlbmRl
cmVyOSAqbVJlbmRlcmVyOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKFRleHR1cmVTdG9yYWdlOSk7Ci0KLSAgICBjb25zdCBEV09SRCBtRDNEVXNhZ2U7Ci0gICAg
Y29uc3QgRDNEUE9PTCBtRDNEUG9vbDsKLX07Ci0KLWNsYXNzIFRleHR1cmVTdG9yYWdlOV8yRCA6
IHB1YmxpYyBUZXh0dXJlU3RvcmFnZTkKLXsKLSAgcHVibGljOgotICAgIFRleHR1cmVTdG9yYWdl
OV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBDaGFpbjkgKnN3YXBjaGFpbik7Ci0gICAgVGV4
dHVyZVN0b3JhZ2U5XzJEKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2U5XzJE
KCk7Ci0KLSAgICBzdGF0aWMgVGV4dHVyZVN0b3JhZ2U5XzJEICptYWtlVGV4dHVyZVN0b3JhZ2U5
XzJEKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKTsKLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpn
ZXRTdXJmYWNlTGV2ZWwoaW50IGxldmVsLCBib29sIGRpcnR5KTsKLSAgICB2aXJ0dWFsIFJlbmRl
clRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KCk7Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4
dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGdlbmVyYXRl
TWlwbWFwKGludCBsZXZlbCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9B
U1NJR04oVGV4dHVyZVN0b3JhZ2U5XzJEKTsKLQotICAgIHZvaWQgaW5pdGlhbGl6ZVJlbmRlclRh
cmdldCgpOwotCi0gICAgSURpcmVjdDNEVGV4dHVyZTkgKm1UZXh0dXJlOwotICAgIFJlbmRlclRh
cmdldDkgKm1SZW5kZXJUYXJnZXQ7Ci19OwotCi1jbGFzcyBUZXh0dXJlU3RvcmFnZTlfQ3ViZSA6
IHB1YmxpYyBUZXh0dXJlU3RvcmFnZTkKLXsKLSAgcHVibGljOgotICAgIFRleHR1cmVTdG9yYWdl
OV9DdWJlKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9y
bWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBpbnQgc2l6ZSk7Ci0gICAg
dmlydHVhbCB+VGV4dHVyZVN0b3JhZ2U5X0N1YmUoKTsKLQotICAgIHN0YXRpYyBUZXh0dXJlU3Rv
cmFnZTlfQ3ViZSAqbWFrZVRleHR1cmVTdG9yYWdlOV9DdWJlKFRleHR1cmVTdG9yYWdlICpzdG9y
YWdlKTsKLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRDdWJlTWFwU3VyZmFjZShHTGVudW0g
ZmFjZVRhcmdldCwgaW50IGxldmVsLCBib29sIGRpcnR5KTsKLSAgICB2aXJ0dWFsIFJlbmRlclRh
cmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0KTsKLSAgICB2aXJ0dWFsIElE
aXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCk7Ci0KLSAgcHJpdmF0ZToK
LSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2U5X0N1YmUpOwotCi0g
ICAgdm9pZCBpbml0aWFsaXplUmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBJRGlyZWN0M0RDdWJlVGV4
dHVyZTkgKm1UZXh0dXJlOwotICAgIFJlbmRlclRhcmdldDkgKm1SZW5kZXJUYXJnZXRbNl07Ci19
OwotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfVEVYVFVSRVNUT1JBR0U5X0hf
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvVmVydGV4QnVmZmVyMTEuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXIxMS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDUyMWRhODBjM2Q3ZTlmNzdiZjI2YjEzMTU0ODlmODliMjZhY2IyZDQuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXIxMS5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw0NDAgKzAsMCBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLQotLy8gVmVydGV4QnVmZmVyMTEuY3BwOiBEZWZpbmVzIHRoZSBEM0QxMSBWZXJ0
ZXhCdWZmZXIgaW1wbGVtZW50YXRpb24uCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
VmVydGV4QnVmZmVyMTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3Rv
cmFnZS5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgotI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9SZW5kZXJlcjExLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQu
aCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLVZlcnRleEJ1ZmZlcjExOjpWZXJ0ZXhCdWZmZXIxMShy
eDo6UmVuZGVyZXIxMSAqY29uc3QgcmVuZGVyZXIpIDogbVJlbmRlcmVyKHJlbmRlcmVyKQotewot
ICAgIG1CdWZmZXIgPSBOVUxMOwotICAgIG1CdWZmZXJTaXplID0gMDsKLSAgICBtRHluYW1pY1Vz
YWdlID0gZmFsc2U7Ci19Ci0KLVZlcnRleEJ1ZmZlcjExOjp+VmVydGV4QnVmZmVyMTEoKQotewot
ICAgIGlmIChtQnVmZmVyKQotICAgIHsKLSAgICAgICAgbUJ1ZmZlci0+UmVsZWFzZSgpOwotICAg
ICAgICBtQnVmZmVyID0gTlVMTDsKLSAgICB9Ci19Ci0KLWJvb2wgVmVydGV4QnVmZmVyMTE6Omlu
aXRpYWxpemUodW5zaWduZWQgaW50IHNpemUsIGJvb2wgZHluYW1pY1VzYWdlKQotewotICAgIGlm
IChtQnVmZmVyKQotICAgIHsKLSAgICAgICAgbUJ1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBt
QnVmZmVyID0gTlVMTDsKLSAgICB9Ci0KLSAgICB1cGRhdGVTZXJpYWwoKTsKLQotICAgIGlmIChz
aXplID4gMCkKLSAgICB7Ci0gICAgICAgIElEM0QxMURldmljZSogZHhEZXZpY2UgPSBtUmVuZGVy
ZXItPmdldERldmljZSgpOwotCi0gICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIGJ1ZmZlckRlc2M7
Ci0gICAgICAgIGJ1ZmZlckRlc2MuQnl0ZVdpZHRoID0gc2l6ZTsKLSAgICAgICAgYnVmZmVyRGVz
Yy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZTkFNSUM7Ci0gICAgICAgIGJ1ZmZlckRlc2MuQmluZEZs
YWdzID0gRDNEMTFfQklORF9WRVJURVhfQlVGRkVSOwotICAgICAgICBidWZmZXJEZXNjLkNQVUFj
Y2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsKLSAgICAgICAgYnVmZmVyRGVzYy5N
aXNjRmxhZ3MgPSAwOwotICAgICAgICBidWZmZXJEZXNjLlN0cnVjdHVyZUJ5dGVTdHJpZGUgPSAw
OwotCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZHhEZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmYnVm
ZmVyRGVzYywgTlVMTCwgJm1CdWZmZXIpOwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIG1CdWZmZXJTaXplID0gc2l6ZTsKLSAgICBtRHluYW1pY1VzYWdlID0gZHluYW1pY1VzYWdl
OwotICAgIHJldHVybiB0cnVlOwotfQotCi1WZXJ0ZXhCdWZmZXIxMSAqVmVydGV4QnVmZmVyMTE6
Om1ha2VWZXJ0ZXhCdWZmZXIxMShWZXJ0ZXhCdWZmZXIgKnZldGV4QnVmZmVyKQotewotICAgIEFT
U0VSVChIQVNfRFlOQU1JQ19UWVBFKFZlcnRleEJ1ZmZlcjExKiwgdmV0ZXhCdWZmZXIpKTsKLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8VmVydGV4QnVmZmVyMTEqPih2ZXRleEJ1ZmZlcik7Ci19Ci0K
LWJvb2wgVmVydGV4QnVmZmVyMTE6OnN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVy
dGV4QXR0cmlidXRlICZhdHRyaWIsIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgaW5zdGFuY2VzLCB1
bnNpZ25lZCBpbnQgb2Zmc2V0KQotewotICAgIGlmIChtQnVmZmVyKQotICAgIHsKLSAgICAgICAg
Z2w6OkJ1ZmZlciAqYnVmZmVyID0gYXR0cmliLm1Cb3VuZEJ1ZmZlci5nZXQoKTsKLQotICAgICAg
ICBpbnQgaW5wdXRTdHJpZGUgPSBhdHRyaWIuc3RyaWRlKCk7Ci0gICAgICAgIGNvbnN0IFZlcnRl
eENvbnZlcnRlciAmY29udmVydGVyID0gZ2V0VmVydGV4Q29udmVyc2lvbihhdHRyaWIpOwotCi0g
ICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmR4Q29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2
aWNlQ29udGV4dCgpOwotCi0gICAgICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRS
ZXNvdXJjZTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkeENvbnRleHQtPk1hcChtQnVmZmVy
LCAwLCBEM0QxMV9NQVBfV1JJVEVfTk9fT1ZFUldSSVRFLCAwLCAmbWFwcGVkUmVzb3VyY2UpOwot
ICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigi
VmVydGV4IGJ1ZmZlciBtYXAgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGNoYXIqIG91dHB1
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1hcHBlZFJlc291cmNlLnBEYXRhKSArIG9mZnNl
dDsKLQotICAgICAgICBjb25zdCBjaGFyICppbnB1dCA9IE5VTEw7Ci0gICAgICAgIGlmIChidWZm
ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2UgKnN0b3JhZ2UgPSBidWZm
ZXItPmdldFN0b3JhZ2UoKTsKLSAgICAgICAgICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
Y2hhcio+KHN0b3JhZ2UtPmdldERhdGEoKSkgKyBzdGF0aWNfY2FzdDxpbnQ+KGF0dHJpYi5tT2Zm
c2V0KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlu
cHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGF0dHJpYi5tUG9pbnRlcik7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoaW5zdGFuY2VzID09IDAgfHwgYXR0cmliLm1EaXZpc29yID09IDAp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlucHV0ICs9IGlucHV0U3RyaWRlICogc3RhcnQ7Ci0g
ICAgICAgIH0KLQotICAgICAgICBjb252ZXJ0ZXIuY29udmVyc2lvbkZ1bmMoaW5wdXQsIGlucHV0
U3RyaWRlLCBjb3VudCwgb3V0cHV0KTsKLQotICAgICAgICBkeENvbnRleHQtPlVubWFwKG1CdWZm
ZXIsIDApOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewot
ICAgICAgICBFUlIoIlZlcnRleCBidWZmZXIgbm90IGluaXRpYWxpemVkLiIpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFZlcnRleEJ1ZmZlcjExOjpzdG9yZVJhd0Rh
dGEoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBvZmZz
ZXQpCi17Ci0gICAgaWYgKG1CdWZmZXIpCi0gICAgewotICAgICAgICBJRDNEMTFEZXZpY2VDb250
ZXh0ICpkeENvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKLQotICAgICAg
ICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7Ci0gICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gZHhDb250ZXh0LT5NYXAobUJ1ZmZlciwgMCwgRDNEMTFfTUFQX1dSSVRFX05P
X09WRVJXUklURSwgMCwgJm1hcHBlZFJlc291cmNlKTsKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1
bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIlZlcnRleCBidWZmZXIgbWFwIGZhaWxl
ZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLQotICAgICAgICBjaGFyKiBidWZmZXJEYXRhID0gc3RhdGljX2Nhc3Q8Y2hh
cio+KG1hcHBlZFJlc291cmNlLnBEYXRhKTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlckRhdGEgKyBv
ZmZzZXQsIGRhdGEsIHNpemUpOwotCi0gICAgICAgIGR4Q29udGV4dC0+VW5tYXAobUJ1ZmZlciwg
MCk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAg
ICAgIEVSUigiVmVydGV4IGJ1ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgVmVydGV4QnVmZmVyMTE6OmdldFNwYWNlUmVxdWly
ZWQoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTHNpemVpIGNvdW50LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlcywgdW5z
aWduZWQgaW50ICpvdXRTcGFjZVJlcXVpcmVkKSBjb25zdAotewotICAgIHVuc2lnbmVkIGludCBl
bGVtZW50U2l6ZSA9IGdldFZlcnRleENvbnZlcnNpb24oYXR0cmliKS5vdXRwdXRFbGVtZW50U2l6
ZTsKLQotICAgIHVuc2lnbmVkIGludCBlbGVtZW50Q291bnQgPSAwOwotICAgIGlmIChpbnN0YW5j
ZXMgPT0gMCB8fCBhdHRyaWIubURpdmlzb3IgPT0gMCkKLSAgICB7Ci0gICAgICAgIGVsZW1lbnRD
b3VudCA9IGNvdW50OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgaW50PihpbnN0YW5jZXMpIDwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZCBpbnQ+OjptYXgoKSAtIChhdHRyaWIubURpdmlzb3IgLSAxKSkKLSAgICAgICAgewotICAg
ICAgICAgICAgLy8gUm91bmQgdXAKLSAgICAgICAgICAgIGVsZW1lbnRDb3VudCA9IChzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBpbnQ+KGluc3RhbmNlcykgKyAoYXR0cmliLm1EaXZpc29yIC0gMSkpIC8g
YXR0cmliLm1EaXZpc29yOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAg
ICAgICAgICAgZWxlbWVudENvdW50ID0gaW5zdGFuY2VzIC8gYXR0cmliLm1EaXZpc29yOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGVsZW1lbnRTaXplIDw9IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLyBlbGVtZW50Q291bnQpCi0gICAgewotICAgICAgICBp
ZiAob3V0U3BhY2VSZXF1aXJlZCkKLSAgICAgICAgewotICAgICAgICAgICAgKm91dFNwYWNlUmVx
dWlyZWQgPSBlbGVtZW50U2l6ZSAqIGVsZW1lbnRDb3VudDsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLX0KLQotYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6cmVxdWlyZXNDb252ZXJzaW9uKGNv
bnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QKLXsKLSAgICByZXR1cm4gIWdl
dFZlcnRleENvbnZlcnNpb24oYXR0cmliKS5pZGVudGl0eTsKLX0KLQotdW5zaWduZWQgaW50IFZl
cnRleEJ1ZmZlcjExOjpnZXRCdWZmZXJTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUJ1ZmZl
clNpemU7Ci19Ci0KLWJvb2wgVmVydGV4QnVmZmVyMTE6OnNldEJ1ZmZlclNpemUodW5zaWduZWQg
aW50IHNpemUpCi17Ci0gICAgaWYgKHNpemUgPiBtQnVmZmVyU2l6ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBpbml0aWFsaXplKHNpemUsIG1EeW5hbWljVXNhZ2UpOwotICAgIH0KLSAgICBlbHNl
Ci0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgVmVydGV4QnVm
ZmVyMTE6OmRpc2NhcmQoKQotewotICAgIGlmIChtQnVmZmVyKQotICAgIHsKLSAgICAgICAgSUQz
RDExRGV2aWNlQ29udGV4dCAqZHhDb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0
KCk7Ci0KLSAgICAgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwot
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGR4Q29udGV4dC0+TWFwKG1CdWZmZXIsIDAsIEQzRDEx
X01BUF9XUklURV9ESVNDQVJELCAwLCAmbWFwcGVkUmVzb3VyY2UpOwotICAgICAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiVmVydGV4IGJ1ZmZlciBt
YXAgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGR4Q29udGV4dC0+VW5tYXAobUJ1ZmZlciwg
MCk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAg
ICAgIEVSUigiVmVydGV4IGJ1ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci19Ci0KLXVuc2lnbmVkIGludCBWZXJ0ZXhCdWZmZXIxMTo6Z2V0VmVy
dGV4U2l6ZShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGdldFZlcnRleENvbnZlcnNpb24oYXR0cmliKS5vdXRwdXRFbGVtZW50U2l6ZTsKLX0K
LQotRFhHSV9GT1JNQVQgVmVydGV4QnVmZmVyMTE6OmdldERYR0lGb3JtYXQoY29uc3QgZ2w6OlZl
cnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdAotewotICAgIHJldHVybiBnZXRWZXJ0ZXhDb252
ZXJzaW9uKGF0dHJpYikuZHhnaUZvcm1hdDsKLX0KLQotSUQzRDExQnVmZmVyICpWZXJ0ZXhCdWZm
ZXIxMTo6Z2V0QnVmZmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUJ1ZmZlcjsKLX0KLQotdGVt
cGxhdGUgPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGludCBjb21wb25lbnRDb3VudCwgYm9vbCB3aWRl
biwgYm9vbCBub3JtYWxpemVkPgotc3RhdGljIHZvaWQgY29weVZlcnRleERhdGEoY29uc3Qgdm9p
ZCAqaW5wdXQsIHVuc2lnbmVkIGludCBzdHJpZGUsIHVuc2lnbmVkIGludCBjb3VudCwgdm9pZCAq
b3V0cHV0KQotewotICAgIHVuc2lnbmVkIGludCBhdHRyaWJTaXplID0gc2l6ZW9mKFQpICogY29t
cG9uZW50Q291bnQ7Ci0KLSAgICBpZiAoYXR0cmliU2l6ZSA9PSBzdHJpZGUgJiYgIXdpZGVuKQot
ICAgIHsKLSAgICAgICAgbWVtY3B5KG91dHB1dCwgaW5wdXQsIGNvdW50ICogYXR0cmliU2l6ZSk7
Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBvdXRwdXRTdHJp
ZGUgPSB3aWRlbiA/IDQgOiBjb21wb25lbnRDb3VudDsKLSAgICAgICAgVCBkZWZhdWx0VmFsID0g
bm9ybWFsaXplZCA/IHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCgpIDogVCgxKTsKLQotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGNvbnN0IFQgKm9mZnNldElucHV0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBUKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaW5wdXQpICsgaSAqIHN0cmlkZSk7
Ci0gICAgICAgICAgICBUICpvZmZzZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PFQqPihvdXRw
dXQpICsgaSAqIG91dHB1dFN0cmlkZTsKLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aiA9IDA7IGogPCBjb21wb25lbnRDb3VudDsgaisrKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG9mZnNldE91dHB1dFtqXSA9IG9mZnNldElucHV0W2pdOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBpZiAod2lkZW4pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
b2Zmc2V0T3V0cHV0WzNdID0gZGVmYXVsdFZhbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLX0KLQotdGVtcGxhdGUgPHVuc2lnbmVkIGludCBjb21wb25lbnRDb3VudD4KLXN0YXRp
YyB2b2lkIGNvcHlGaXhlZFZlcnRleERhdGEoY29uc3Qgdm9pZCogaW5wdXQsIHVuc2lnbmVkIGlu
dCBzdHJpZGUsIHVuc2lnbmVkIGludCBjb3VudCwgdm9pZCogb3V0cHV0KQotewotICAgIHN0YXRp
YyBjb25zdCBmbG9hdCBkaXZpc29yID0gMS4wZiAvICgxIDw8IDE2KTsKLQotICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIGNvbnN0IEdM
Zml4ZWQqIG9mZnNldElucHV0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBHTGZpeGVkKj4ocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaW5wdXQpICsgc3RyaWRlICogaSk7Ci0gICAgICAg
IGZsb2F0KiBvZmZzZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4ob3V0cHV0KSAr
IGkgKiBjb21wb25lbnRDb3VudDsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsg
aiA8IGNvbXBvbmVudENvdW50OyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIG9mZnNldE91
dHB1dFtqXSA9IHN0YXRpY19jYXN0PGZsb2F0PihvZmZzZXRJbnB1dFtqXSkgKiBkaXZpc29yOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW50
IGNvbXBvbmVudENvdW50LCBib29sIG5vcm1hbGl6ZWQ+Ci1zdGF0aWMgdm9pZCBjb3B5VG9GbG9h
dFZlcnRleERhdGEoY29uc3Qgdm9pZCogaW5wdXQsIHVuc2lnbmVkIGludCBzdHJpZGUsIHVuc2ln
bmVkIGludCBjb3VudCwgdm9pZCogb3V0cHV0KQotewotICAgIHR5cGVkZWYgc3RkOjpudW1lcmlj
X2xpbWl0czxUPiBOTDsKLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKLSAgICB7Ci0gICAgICAgIGNvbnN0IFQgKm9mZnNldElucHV0ID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBUKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaW5wdXQpICsgc3Ry
aWRlICogaSk7Ci0gICAgICAgIGZsb2F0ICpvZmZzZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0
PGZsb2F0Kj4ob3V0cHV0KSArIGkgKiBjb21wb25lbnRDb3VudDsKLQotICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBqID0gMDsgaiA8IGNvbXBvbmVudENvdW50OyBqKyspCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChub3JtYWxpemVkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGlmIChOTDo6aXNfc2lnbmVkKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZmxvYXQgZGl2aXNvciA9IDEuMGYgLyAoMiAqIHN0YXRpY19jYXN0PGZsb2F0PihO
TDo6bWF4KCkpICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgIG9mZnNldE91dHB1dFtqXSA9ICgy
ICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KG9mZnNldElucHV0W2pdKSArIDEpICogZGl2aXNvcjsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0T3V0cHV0W2pdID0gIHN0YXRpY19jYXN0PGZsb2F0
PihvZmZzZXRJbnB1dFtqXSkgLyBOTDo6bWF4KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IG9mZnNldE91dHB1dFtqXSA9ICBzdGF0aWNfY2FzdDxmbG9hdD4ob2Zmc2V0SW5wdXRbal0pOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1jb25zdCBWZXJ0ZXhCdWZmZXIx
MTo6VmVydGV4Q29udmVydGVyIFZlcnRleEJ1ZmZlcjExOjptUG9zc2libGVUcmFuc2xhdGlvbnNb
TlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVNdWzJdWzRdID0KLXsKLSAgICB7IC8vIEdMX0JZVEUK
LSAgICAgICAgeyAvLyB1bm5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVy
dGV4RGF0YTxHTGJ5dGUsIDEsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMl9GTE9BVCwg
NCB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMYnl0ZSwgMiwgZmFs
c2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCA4IH0sCi0gICAgICAgICAgICB7
ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xieXRlLCAzLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZP
Uk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZl
cnRleERhdGE8R0xieXRlLCA0LCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJB
MzJfRkxPQVQsIDE2IH0sCi0gICAgICAgIH0sCi0gICAgICAgIHsgLy8gbm9ybWFsaXplZAotICAg
ICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xieXRlLCAxLCBmYWxzZSwgdHJ1ZT4sIHRydWUs
IERYR0lfRk9STUFUX1I4X1NOT1JNLCAxIH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0
YTxHTGJ5dGUsIDIsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjhHOF9TTk9STSwg
MiB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xieXRlLCAzLCB0cnVlLCB0cnVl
PiwgZmFsc2UsIERYR0lfRk9STUFUX1I4RzhCOEE4X1NOT1JNLCA0IH0sCi0gICAgICAgICAgICB7
ICZjb3B5VmVydGV4RGF0YTxHTGJ5dGUsIDQsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JN
QVRfUjhHOEI4QThfU05PUk0sIDQgfSwKLSAgICAgICAgfSwKLSAgICB9LAotICAgIHsgLy8gR0xf
VU5TSUdORURfQllURQotICAgICAgICB7IC8vIHVubm9ybWFsaXplZAotICAgICAgICAgICAgeyAm
Y29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDEsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9S
TUFUX1IzMl9GTE9BVCwgNCB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRh
PEdMdWJ5dGUsIDIsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgOCB9
LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDMsIGZhbHNl
PiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAg
IHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVieXRlLCA0LCBmYWxzZT4sIGZhbHNlLCBEWEdJ
X0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsIDE2IH0sCi0gICAgICAgIH0sCi0gICAgICAgIHsg
Ly8gbm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1Ynl0ZSwgMSwg
ZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SOF9VTk9STSwgMSB9LAotICAgICAgICAg
ICAgeyAmY29weVZlcnRleERhdGE8R0x1Ynl0ZSwgMiwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJ
X0ZPUk1BVF9SOEc4X1VOT1JNLCAyIH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxH
THVieXRlLCAzLCB0cnVlLCB0cnVlPiwgZmFsc2UsIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JN
LCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHVieXRlLCA0LCBmYWxzZSwg
dHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNLCA0IH0sCi0gICAgICAgIH0s
Ci0gICAgfSwKLSAgICB7IC8vIEdMX1NIT1JUCi0gICAgICAgIHsgLy8gdW5ub3JtYWxpemVkCi0g
ICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xzaG9ydCwgMSwgZmFsc2U+LCBm
YWxzZSwgRFhHSV9GT1JNQVRfUjMyX0ZMT0FULCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9G
bG9hdFZlcnRleERhdGE8R0xzaG9ydCwgMiwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMy
RzMyX0ZMT0FULCA4IH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xz
aG9ydCwgMywgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAxMiB9
LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMc2hvcnQsIDQsIGZhbHNl
PiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCwgMTYgfSwKLSAgICAgICAg
fSwKLSAgICAgICAgeyAvLyBub3JtYWxpemVkCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0
YTxHTHNob3J0LCAxLCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1IxNl9TTk9STSwg
MiB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xzaG9ydCwgMiwgZmFsc2UsIHRy
dWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMTZHMTZfU05PUk0sIDQgfSwKLSAgICAgICAgICAgIHsg
JmNvcHlWZXJ0ZXhEYXRhPEdMc2hvcnQsIDMsIHRydWUsIHRydWU+LCBmYWxzZSwgRFhHSV9GT1JN
QVRfUjE2RzE2QjE2QTE2X1NOT1JNLCA4IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0
YTxHTHNob3J0LCA0LCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1IxNkcxNkIxNkEx
Nl9TTk9STSwgOCB9LAotICAgICAgICB9LAotICAgIH0sCi0gICAgeyAvLyBHTF9VTlNJR05FRF9T
SE9SVAotICAgICAgICB7IC8vIHVubm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29weVRvRmxv
YXRWZXJ0ZXhEYXRhPEdMdXNob3J0LCAxLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJf
RkxPQVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVzaG9y
dCwgMiwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCA4IH0sCi0gICAg
ICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0x1c2hvcnQsIDMsIGZhbHNlPiwgZmFs
c2UsIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsgJmNv
cHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVzaG9ydCwgNCwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JN
QVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAgICAgICB9LAotICAgICAgICB7IC8vIG5v
cm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdXNob3J0LCAxLCBmYWxz
ZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1IxNl9VTk9STSwgMiB9LAotICAgICAgICAgICAg
eyAmY29weVZlcnRleERhdGE8R0x1c2hvcnQsIDIsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9G
T1JNQVRfUjE2RzE2X1VOT1JNLCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxH
THVzaG9ydCwgMywgdHJ1ZSwgdHJ1ZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZf
VU5PUk0sIDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdXNob3J0LCA0LCBm
YWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9VTk9STSwgOCB9LAot
ICAgICAgICB9LAotICAgIH0sCi0gICAgeyAvLyBHTF9GSVhFRAotICAgICAgICB7IC8vIHVubm9y
bWFsaXplZAotICAgICAgICAgICAgeyAmY29weUZpeGVkVmVydGV4RGF0YTwxPiwgZmFsc2UsIERY
R0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9LAotICAgICAgICAgICAgeyAmY29weUZpeGVkVmVydGV4
RGF0YTwyPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAotICAgICAgICAg
ICAgeyAmY29weUZpeGVkVmVydGV4RGF0YTwzPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIz
Ml9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8ND4sIGZh
bHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsIDE2IH0sCi0gICAgICAgIH0sCi0g
ICAgICAgIHsgLy8gbm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29weUZpeGVkVmVydGV4RGF0
YTwxPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9LAotICAgICAgICAgICAgeyAm
Y29weUZpeGVkVmVydGV4RGF0YTwyPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwg
OCB9LAotICAgICAgICAgICAgeyAmY29weUZpeGVkVmVydGV4RGF0YTwzPiwgZmFsc2UsIERYR0lf
Rk9STUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZl
cnRleERhdGE8ND4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsIDE2IH0s
Ci0gICAgICAgIH0sCi0gICAgfSwKLSAgICB7IC8vIEdMX0ZMT0FUCi0gICAgICAgIHsgLy8gdW5u
b3JtYWxpemVkCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCAxLCBmYWxz
ZSwgZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAg
IHsgJmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDIsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lf
Rk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8
R0xmbG9hdCwgMywgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZM
T0FULCAxMiB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xmbG9hdCwgNCwgZmFs
c2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAot
ICAgICAgICB9LAotICAgICAgICB7IC8vIG5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlW
ZXJ0ZXhEYXRhPEdMZmxvYXQsIDEsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lfRk9STUFUX1Iz
Ml9GTE9BVCwgNCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xmbG9hdCwgMiwg
ZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCA4IH0sCi0gICAg
ICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCAzLCBmYWxzZSwgZmFsc2U+LCB0cnVl
LCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0sCi0gICAgICAgICAgICB7ICZjb3B5
VmVydGV4RGF0YTxHTGZsb2F0LCA0LCBmYWxzZSwgZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9S
MzJHMzJCMzJBMzJfRkxPQVQsIDE2IH0sCi0gICAgICAgIH0sCi0gICAgfSwKLX07Ci0KLWNvbnN0
IFZlcnRleEJ1ZmZlcjExOjpWZXJ0ZXhDb252ZXJ0ZXIgJlZlcnRleEJ1ZmZlcjExOjpnZXRWZXJ0
ZXhDb252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSkKLXsKLSAg
ICB1bnNpZ25lZCBpbnQgdHlwZUluZGV4ID0gMDsKLSAgICBzd2l0Y2ggKGF0dHJpYnV0ZS5tVHlw
ZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0JZVEU6ICAgICAgICAgICAgIHR5cGVJbmRleCA9IDA7
IGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOiAgICB0eXBlSW5kZXggPSAxOyBi
cmVhazsKLSAgICAgIGNhc2UgR0xfU0hPUlQ6ICAgICAgICAgICAgdHlwZUluZGV4ID0gMjsgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOiAgIHR5cGVJbmRleCA9IDM7IGJyZWFr
OwotICAgICAgY2FzZSBHTF9GSVhFRDogICAgICAgICAgICB0eXBlSW5kZXggPSA0OyBicmVhazsK
LSAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgICAgICAgdHlwZUluZGV4ID0gNTsgYnJlYWs7Ci0g
ICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7IGJyZWFrOwotICAg
IH0KLQotICAgIHJldHVybiBtUG9zc2libGVUcmFuc2xhdGlvbnNbdHlwZUluZGV4XVthdHRyaWJ1
dGUubU5vcm1hbGl6ZWQgPyAxIDogMF1bYXR0cmlidXRlLm1TaXplIC0gMV07Ci19Ci0KLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
VmVydGV4QnVmZmVyMTEuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvVmVydGV4QnVmZmVyMTEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZWNlYjQyNmU4MmQ0MmI1NTY2NmM1NzljM2ZlZTFmZTJhYjdiYTgwMS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlcjExLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw3NCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVmVydGV4QnVmZmVyMTEuaDogRGVmaW5l
cyB0aGUgRDNEMTEgVmVydGV4QnVmZmVyIGltcGxlbWVudGF0aW9uLgotCi0jaWZuZGVmIExJQkdM
RVNWMl9SRU5ERVJFUl9WRVJURVhCVUZGRVIxMV9IXwotI2RlZmluZSBMSUJHTEVTVjJfUkVOREVS
RVJfVkVSVEVYQlVGRkVSMTFfSF8KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0
ZXhCdWZmZXIuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci1jbGFzcyBSZW5kZXJlcjExOwotCi1jbGFz
cyBWZXJ0ZXhCdWZmZXIxMSA6IHB1YmxpYyBWZXJ0ZXhCdWZmZXIKLXsKLSAgcHVibGljOgotICAg
IGV4cGxpY2l0IFZlcnRleEJ1ZmZlcjExKHJ4OjpSZW5kZXJlcjExICpjb25zdCByZW5kZXJlcik7
Ci0gICAgdmlydHVhbCB+VmVydGV4QnVmZmVyMTEoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBpbml0
aWFsaXplKHVuc2lnbmVkIGludCBzaXplLCBib29sIGR5bmFtaWNVc2FnZSk7Ci0KLSAgICBzdGF0
aWMgVmVydGV4QnVmZmVyMTEgKm1ha2VWZXJ0ZXhCdWZmZXIxMShWZXJ0ZXhCdWZmZXIgKnZldGV4
QnVmZmVyKTsKLQotICAgIHZpcnR1YWwgYm9vbCBzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3Qg
Z2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwg
R0xzaXplaSBpbnN0YW5jZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKLSAgICB2aXJ0dWFsIGJvb2wgc3RvcmVSYXdEYXRhKGNv
bnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsK
LQotICAgIHZpcnR1YWwgYm9vbCBnZXRTcGFjZVJlcXVpcmVkKGNvbnN0IGdsOjpWZXJ0ZXhBdHRy
aWJ1dGUgJmF0dHJpYiwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTcGFjZVJlcXVpcmVk
KSBjb25zdDsKLQotICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0NvbnZlcnNpb24oY29uc3QgZ2w6
OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQg
aW50IGdldEJ1ZmZlclNpemUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgc2V0QnVmZmVyU2l6
ZSh1bnNpZ25lZCBpbnQgc2l6ZSk7Ci0gICAgdmlydHVhbCBib29sIGRpc2NhcmQoKTsKLQotICAg
IHVuc2lnbmVkIGludCBnZXRWZXJ0ZXhTaXplKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0
dHJpYikgY29uc3Q7Ci0gICAgRFhHSV9GT1JNQVQgZ2V0RFhHSUZvcm1hdChjb25zdCBnbDo6VmVy
dGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0OwotCi0gICAgSUQzRDExQnVmZmVyICpnZXRCdWZm
ZXIoKSBjb25zdDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihW
ZXJ0ZXhCdWZmZXIxMSk7Ci0KLSAgICByeDo6UmVuZGVyZXIxMSAqY29uc3QgbVJlbmRlcmVyOwot
Ci0gICAgSUQzRDExQnVmZmVyICptQnVmZmVyOwotICAgIHVuc2lnbmVkIGludCBtQnVmZmVyU2l6
ZTsKLSAgICBib29sIG1EeW5hbWljVXNhZ2U7Ci0KLSAgICB0eXBlZGVmIHZvaWQgKCpWZXJ0ZXhD
b252ZXJzaW9uRnVuY3Rpb24pKGNvbnN0IHZvaWQgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBp
bnQsIHZvaWQgKik7Ci0gICAgc3RydWN0IFZlcnRleENvbnZlcnRlcgotICAgIHsKLSAgICAgICAg
VmVydGV4Q29udmVyc2lvbkZ1bmN0aW9uIGNvbnZlcnNpb25GdW5jOwotICAgICAgICBib29sIGlk
ZW50aXR5OwotICAgICAgICBEWEdJX0ZPUk1BVCBkeGdpRm9ybWF0OwotICAgICAgICB1bnNpZ25l
ZCBpbnQgb3V0cHV0RWxlbWVudFNpemU7Ci0gICAgfTsKLQotICAgIGVudW0geyBOVU1fR0xfVkVS
VEVYX0FUVFJJQl9UWVBFUyA9IDYgfTsKLQotICAgIC8vIFRoaXMgdGFibGUgaXMgdXNlZCB0byBn
ZW5lcmF0ZSBtQXR0cmlidXRlVHlwZXMuCi0gICAgc3RhdGljIGNvbnN0IFZlcnRleENvbnZlcnRl
ciBtUG9zc2libGVUcmFuc2xhdGlvbnNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVNdWzJdWzRd
OyAvLyBbR0wgdHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXplZF1b
c2l6ZSAtIDFdCi0KLSAgICBzdGF0aWMgY29uc3QgVmVydGV4Q29udmVydGVyICZnZXRWZXJ0ZXhD
b252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSk7Ci19OwotCi19
Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfVkVSVEVYQlVGRkVSMTFfSF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVmVy
dGV4QnVmZmVyOS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL1ZlcnRleEJ1ZmZlcjkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1
YTc5MmI5N2YyNTRhNmI0ZjgwN2E5MTliZjY4N2JhZGIyZDM2YzM5Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4QnVmZmVyOS5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw1MzAgKzAsMCBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwotCi0vLyBWZXJ0ZXhCdWZmZXI5LmNwcDogRGVmaW5lcyB0aGUgRDNEOSBWZXJ0ZXhCdWZmZXIg
aW1wbGVtZW50YXRpb24uCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4QnVm
ZmVyOS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci92ZXJ0ZXhjb252ZXJzaW9uLmgi
Ci0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvQ29udGV4dC5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5k
ZXJlcjkuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKLQotbmFtZXNwYWNlIHJ4
Ci17Ci0KLWJvb2wgVmVydGV4QnVmZmVyOTo6bVRyYW5zbGF0aW9uc0luaXRpYWxpemVkID0gZmFs
c2U7Ci1WZXJ0ZXhCdWZmZXI5OjpGb3JtYXRDb252ZXJ0ZXIgVmVydGV4QnVmZmVyOTo6bUZvcm1h
dENvbnZlcnRlcnNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVNdWzJdWzRdOwotCi1WZXJ0ZXhC
dWZmZXI5OjpWZXJ0ZXhCdWZmZXI5KHJ4OjpSZW5kZXJlcjkgKmNvbnN0IHJlbmRlcmVyKSA6IG1S
ZW5kZXJlcihyZW5kZXJlcikKLXsKLSAgICBtVmVydGV4QnVmZmVyID0gTlVMTDsKLSAgICBtQnVm
ZmVyU2l6ZSA9IDA7Ci0gICAgbUR5bmFtaWNVc2FnZSA9IGZhbHNlOwotCi0gICAgaWYgKCFtVHJh
bnNsYXRpb25zSW5pdGlhbGl6ZWQpCi0gICAgewotICAgICAgICBpbml0aWFsaXplVHJhbnNsYXRp
b25zKHJlbmRlcmVyLT5nZXRDYXBzRGVjbFR5cGVzKCkpOwotICAgICAgICBtVHJhbnNsYXRpb25z
SW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KLX0KLQotVmVydGV4QnVmZmVyOTo6flZlcnRleEJ1
ZmZlcjkoKQotewotICAgIGlmIChtVmVydGV4QnVmZmVyKQotICAgIHsKLSAgICAgICAgbVZlcnRl
eEJ1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtVmVydGV4QnVmZmVyID0gTlVMTDsKLSAgICB9
Ci19Ci0KLWJvb2wgVmVydGV4QnVmZmVyOTo6aW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgc2l6ZSwg
Ym9vbCBkeW5hbWljVXNhZ2UpCi17Ci0gICAgaWYgKG1WZXJ0ZXhCdWZmZXIpCi0gICAgewotICAg
ICAgICBtVmVydGV4QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1WZXJ0ZXhCdWZmZXIgPSBO
VUxMOwotICAgIH0KLQotICAgIHVwZGF0ZVNlcmlhbCgpOwotCi0gICAgaWYgKHNpemUgPiAwKQot
ICAgIHsKLSAgICAgICAgRFdPUkQgZmxhZ3MgPSBEM0RVU0FHRV9XUklURU9OTFk7Ci0gICAgICAg
IGlmIChkeW5hbWljVXNhZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZsYWdzIHw9IEQzRFVT
QUdFX0RZTkFNSUM7Ci0gICAgICAgIH0KLQotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1SZW5k
ZXJlci0+Y3JlYXRlVmVydGV4QnVmZmVyKHNpemUsIGZsYWdzLCAmbVZlcnRleEJ1ZmZlcik7Ci0K
LSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIo
Ik91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBhIHZlcnRleCBidWZmZXIgb2Ygc2l6ZSAlbHUuIiwg
c2l6ZSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBtQnVmZmVyU2l6ZSA9IHNpemU7Ci0gICAgbUR5bmFtaWNVc2FnZSA9IGR5bmFtaWNVc2FnZTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotVmVydGV4QnVmZmVyOSAqVmVydGV4QnVmZmVyOTo6bWFr
ZVZlcnRleEJ1ZmZlcjkoVmVydGV4QnVmZmVyICp2ZXJ0ZXhCdWZmZXIpCi17Ci0gICAgQVNTRVJU
KEhBU19EWU5BTUlDX1RZUEUoVmVydGV4QnVmZmVyOSosIHZlcnRleEJ1ZmZlcikpOwotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxWZXJ0ZXhCdWZmZXI5Kj4odmVydGV4QnVmZmVyKTsKLX0KLQotYm9v
bCBWZXJ0ZXhCdWZmZXI5OjpzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0
dHJpYnV0ZSAmYXR0cmliLCBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNp
Z25lZCBpbnQgb2Zmc2V0KQotewotICAgIGlmIChtVmVydGV4QnVmZmVyKQotICAgIHsKLSAgICAg
ICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gYXR0cmliLm1Cb3VuZEJ1ZmZlci5nZXQoKTsKLQotICAg
ICAgICBpbnQgaW5wdXRTdHJpZGUgPSBhdHRyaWIuc3RyaWRlKCk7Ci0gICAgICAgIGludCBlbGVt
ZW50U2l6ZSA9IGF0dHJpYi50eXBlU2l6ZSgpOwotICAgICAgICBjb25zdCBGb3JtYXRDb252ZXJ0
ZXIgJmNvbnZlcnRlciA9IGZvcm1hdENvbnZlcnRlcihhdHRyaWIpOwotCi0gICAgICAgIERXT1JE
IGxvY2tGbGFncyA9IG1EeW5hbWljVXNhZ2UgPyBEM0RMT0NLX05PT1ZFUldSSVRFIDogMDsKLQot
ICAgICAgICB2b2lkICptYXBQdHIgPSBOVUxMOwotCi0gICAgICAgIHVuc2lnbmVkIGludCBtYXBT
aXplOwotICAgICAgICBpZiAoIXNwYWNlUmVxdWlyZWQoYXR0cmliLCBjb3VudCwgaW5zdGFuY2Vz
LCAmbWFwU2l6ZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVZlcnRleEJ1ZmZlci0+TG9jayhvZmZz
ZXQsIG1hcFNpemUsICZtYXBQdHIsIGxvY2tGbGFncyk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChy
ZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkxvY2sgZmFpbGVkIHdpdGggZXJy
b3IgMHglMDh4IiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotCi0gICAgICAgIGNvbnN0IGNoYXIgKmlucHV0ID0gTlVMTDsKLSAgICAgICAgaWYgKGJ1ZmZl
cikKLSAgICAgICAgewotICAgICAgICAgICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGJ1ZmZl
ci0+Z2V0U3RvcmFnZSgpOwotICAgICAgICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBj
aGFyKj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSArIHN0YXRpY19jYXN0PGludD4oYXR0cmliLm1PZmZz
ZXQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgaW5w
dXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYXR0cmliLm1Qb2ludGVyKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBhdHRyaWIubURpdmlzb3IgPT0gMCkK
LSAgICAgICAgewotICAgICAgICAgICAgaW5wdXQgKz0gaW5wdXRTdHJpZGUgKiBzdGFydDsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChjb252ZXJ0ZXIuaWRlbnRpdHkgJiYgaW5wdXRTdHJpZGUg
PT0gZWxlbWVudFNpemUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1lbWNweShtYXBQdHIsIGlu
cHV0LCBjb3VudCAqIGlucHV0U3RyaWRlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGNvbnZlcnRlci5jb252ZXJ0QXJyYXkoaW5wdXQsIGlucHV0U3Ry
aWRlLCBjb3VudCwgbWFwUHRyKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1WZXJ0ZXhCdWZmZXIt
PlVubG9jaygpOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAg
ewotICAgICAgICBFUlIoIlZlcnRleCBidWZmZXIgbm90IGluaXRpYWxpemVkLiIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFZlcnRleEJ1ZmZlcjk6OnN0b3JlUmF3
RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9m
ZnNldCkKLXsKLSAgICBpZiAobVZlcnRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIERXT1JEIGxv
Y2tGbGFncyA9IG1EeW5hbWljVXNhZ2UgPyBEM0RMT0NLX05PT1ZFUldSSVRFIDogMDsKLQotICAg
ICAgICB2b2lkICptYXBQdHIgPSBOVUxMOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1WZXJ0
ZXhCdWZmZXItPkxvY2sob2Zmc2V0LCBzaXplLCAmbWFwUHRyLCBsb2NrRmxhZ3MpOwotCi0gICAg
ICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJMb2Nr
IGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBtZW1jcHkobWFwUHRyLCBkYXRhLCBzaXplKTsK
LQotICAgICAgICBtVmVydGV4QnVmZmVyLT5VbmxvY2soKTsKLQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgRVJSKCJWZXJ0ZXggYnVmZmVyIG5v
dCBpbml0aWFsaXplZC4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9v
bCBWZXJ0ZXhCdWZmZXI5OjpnZXRTcGFjZVJlcXVpcmVkKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1
dGUgJmF0dHJpYiwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTcGFjZVJlcXVpcmVk
KSBjb25zdAotewotICAgIHJldHVybiBzcGFjZVJlcXVpcmVkKGF0dHJpYiwgY291bnQsIGluc3Rh
bmNlcywgb3V0U3BhY2VSZXF1aXJlZCk7Ci19Ci0KLWJvb2wgVmVydGV4QnVmZmVyOTo6cmVxdWly
ZXNDb252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QKLXsK
LSAgICByZXR1cm4gIWZvcm1hdENvbnZlcnRlcihhdHRyaWIpLmlkZW50aXR5OwotfQotCi11bnNp
Z25lZCBpbnQgVmVydGV4QnVmZmVyOTo6Z2V0VmVydGV4U2l6ZShjb25zdCBnbDo6VmVydGV4QXR0
cmlidXRlICZhdHRyaWIpIGNvbnN0Ci17Ci0gICAgdW5zaWduZWQgaW50IHNwYWNlUmVxdWlyZWQ7
Ci0gICAgcmV0dXJuIGdldFNwYWNlUmVxdWlyZWQoYXR0cmliLCAxLCAwLCAmc3BhY2VSZXF1aXJl
ZCkgPyBzcGFjZVJlcXVpcmVkIDogMDsKLX0KLQotRDNEREVDTFRZUEUgVmVydGV4QnVmZmVyOTo6
Z2V0RGVjbFR5cGUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdAotewot
ICAgIHJldHVybiBmb3JtYXRDb252ZXJ0ZXIoYXR0cmliKS5kM2REZWNsVHlwZTsKLX0KLQotdW5z
aWduZWQgaW50IFZlcnRleEJ1ZmZlcjk6OmdldEJ1ZmZlclNpemUoKSBjb25zdAotewotICAgIHJl
dHVybiBtQnVmZmVyU2l6ZTsKLX0KLQotYm9vbCBWZXJ0ZXhCdWZmZXI5OjpzZXRCdWZmZXJTaXpl
KHVuc2lnbmVkIGludCBzaXplKQotewotICAgIGlmIChzaXplID4gbUJ1ZmZlclNpemUpCi0gICAg
ewotICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZShzaXplLCBtRHluYW1pY1VzYWdlKTsKLSAgICB9
Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfQotCi1ib29s
IFZlcnRleEJ1ZmZlcjk6OmRpc2NhcmQoKQotewotICAgIGlmIChtVmVydGV4QnVmZmVyKQotICAg
IHsKLSAgICAgICAgdm9pZCAqZHVtbXk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0OwotCi0gICAg
ICAgIHJlc3VsdCA9IG1WZXJ0ZXhCdWZmZXItPkxvY2soMCwgMSwgJmR1bW15LCBEM0RMT0NLX0RJ
U0NBUkQpOwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEVSUigiRGlzY2FyZCBsb2NrIGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHQg
PSBtVmVydGV4QnVmZmVyLT5VbmxvY2soKTsKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkRpc2NhcmQgdW5sb2NrIGZhaWxlZCB3aXRoIGVy
cm9yIDB4JTA4eCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAg
ICAgRVJSKCJWZXJ0ZXggYnVmZmVyIG5vdCBpbml0aWFsaXplZC4iKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLX0KLQotSURpcmVjdDNEVmVydGV4QnVmZmVyOSAqIFZlcnRleEJ1ZmZl
cjk6OmdldEJ1ZmZlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1WZXJ0ZXhCdWZmZXI7Ci19Ci0K
LS8vIE1hcHBpbmcgZnJvbSBPcGVuR0wtRVMgdmVydGV4IGF0dHJpYiB0eXBlIHRvIEQzRCBkZWNs
IHR5cGU6Ci0vLwotLy8gQllURSAgICAgICAgICAgICAgICAgU0hPUlQgKENhc3QpCi0vLyBCWVRF
LW5vcm0gICAgICAgICAgICBGTE9BVCAoTm9ybWFsaXplKSAoY2FuJ3QgYmUgZXhhY3RseSByZXBy
ZXNlbnRlZCBhcyBTSE9SVC1ub3JtKQotLy8gVU5TSUdORURfQllURSAgICAgICAgVUJZVEU0IChJ
ZGVudGl0eSkgb3IgU0hPUlQgKENhc3QpCi0vLyBVTlNJR05FRF9CWVRFLW5vcm0gICBVQllURTRO
IChJZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1hbGl6ZSkKLS8vIFNIT1JUICAgICAgICAgICAgICAg
IFNIT1JUIChJZGVudGl0eSkKLS8vIFNIT1JULW5vcm0gICAgICAgICAgIFNIT1JULW5vcm0gKElk
ZW50aXR5KSBvciBGTE9BVCAoTm9ybWFsaXplKQotLy8gVU5TSUdORURfU0hPUlQgICAgICAgRkxP
QVQgKENhc3QpCi0vLyBVTlNJR05FRF9TSE9SVC1ub3JtICBVU0hPUlQtbm9ybSAoSWRlbnRpdHkp
IG9yIEZMT0FUIChOb3JtYWxpemUpCi0vLyBGSVhFRCAobm90IGluIFdlYkdMKSBGTE9BVCAoRml4
ZWRUb0Zsb2F0KQotLy8gRkxPQVQgICAgICAgICAgICAgICAgRkxPQVQgKElkZW50aXR5KQotCi0v
LyBHTFRvQ1R5cGUgbWFwcyBmcm9tIEdMIHR5cGUgKGFzIEdMZW51bSkgdG8gdGhlIEMgdHlwZWRl
Zi4KLXRlbXBsYXRlIDxHTGVudW0gR0xUeXBlPiBzdHJ1Y3QgR0xUb0NUeXBlIHsgfTsKLQotdGVt
cGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9CWVRFPiAgICAgICAgICAgeyB0eXBlZGVmIEdM
Ynl0ZSB0eXBlOyAgICAgIH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX1VOU0lH
TkVEX0JZVEU+ICB7IHR5cGVkZWYgR0x1Ynl0ZSB0eXBlOyAgICAgfTsKLXRlbXBsYXRlIDw+IHN0
cnVjdCBHTFRvQ1R5cGU8R0xfU0hPUlQ+ICAgICAgICAgIHsgdHlwZWRlZiBHTHNob3J0IHR5cGU7
ICAgICB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9VTlNJR05FRF9TSE9SVD4g
eyB0eXBlZGVmIEdMdXNob3J0IHR5cGU7ICAgIH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NU
eXBlPEdMX0ZJWEVEPiAgICAgICAgICB7IHR5cGVkZWYgR0x1aW50IHR5cGU7ICAgICAgfTsKLXRl
bXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfRkxPQVQ+ICAgICAgICAgIHsgdHlwZWRlZiBH
TGZsb2F0IHR5cGU7ICAgICB9OwotCi0vLyBUaGlzIGRpZmZlcnMgZnJvbSBEM0RERUNMVFlQRSBp
biB0aGF0IGl0IGlzIHVuc2l6ZWQuIChTaXplIGV4cGFuc2lvbiBpcyBhcHBsaWVkIGxhc3QuKQot
ZW51bSBEM0RWZXJ0ZXhUeXBlCi17Ci0gICAgRDNEVlRfRkxPQVQsCi0gICAgRDNEVlRfU0hPUlQs
Ci0gICAgRDNEVlRfU0hPUlRfTk9STSwKLSAgICBEM0RWVF9VQllURSwKLSAgICBEM0RWVF9VQllU
RV9OT1JNLAotICAgIEQzRFZUX1VTSE9SVF9OT1JNCi19OwotCi0vLyBEM0RUb0NUeXBlIG1hcHMg
ZnJvbSBEM0QgdmVydGV4IHR5cGUgKGFzIGVudW0gRDNEVmVydGV4VHlwZSkgdG8gdGhlIGNvcnJl
c3BvbmRpbmcgQyB0eXBlLgotdGVtcGxhdGUgPHVuc2lnbmVkIGludCBEM0RUeXBlPiBzdHJ1Y3Qg
RDNEVG9DVHlwZSB7IH07Ci0KLXRlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX0ZM
T0FUPiB7IHR5cGVkZWYgZmxvYXQgdHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NU
eXBlPEQzRFZUX1NIT1JUPiB7IHR5cGVkZWYgc2hvcnQgdHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0
cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1NIT1JUX05PUk0+IHsgdHlwZWRlZiBzaG9ydCB0eXBlOyB9
OwotdGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfVUJZVEU+IHsgdHlwZWRlZiB1
bnNpZ25lZCBjaGFyIHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RW
VF9VQllURV9OT1JNPiB7IHR5cGVkZWYgdW5zaWduZWQgY2hhciB0eXBlOyB9OwotdGVtcGxhdGUg
PD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfVVNIT1JUX05PUk0+IHsgdHlwZWRlZiB1bnNpZ25l
ZCBzaG9ydCB0eXBlOyB9OwotCi0vLyBFbmNvZGUgdGhlIHR5cGUvc2l6ZSBjb21iaW5hdGlvbnMg
dGhhdCBEM0QgcGVybWl0cy4gRm9yIGVhY2ggdHlwZS9zaXplIGl0IGV4cGFuZHMgdG8gYSB3aWRl
bmVyIHRoYXQgd2lsbCBwcm92aWRlIHRoZSBhcHByb3ByaWF0ZSBmaW5hbCBzaXplLgotdGVtcGxh
dGUgPHVuc2lnbmVkIGludCB0eXBlLCBpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZSB7IH07Ci0K
LXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9GTE9BVCwgc2l6ZT4g
ICAgICAgICAgOiBOb1dpZGVuPHNpemU+IHsgfTsKLXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0
IFdpZGVuUnVsZTxEM0RWVF9TSE9SVCwgc2l6ZT4gICAgICAgICAgOiBXaWRlblRvRXZlbjxzaXpl
PiB7IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfU0hPUlRf
Tk9STSwgc2l6ZT4gICAgIDogV2lkZW5Ub0V2ZW48c2l6ZT4geyB9OwotdGVtcGxhdGUgPGludCBz
aXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1VCWVRFLCBzaXplPiAgICAgICAgICA6IFdpZGVu
VG9Gb3VyPHNpemU+IHsgfTsKLXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxE
M0RWVF9VQllURV9OT1JNLCBzaXplPiAgICAgOiBXaWRlblRvRm91cjxzaXplPiB7IH07Ci10ZW1w
bGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfVVNIT1JUX05PUk0sIHNpemU+
ICAgIDogV2lkZW5Ub0V2ZW48c2l6ZT4geyB9OwotCi0vLyBWZXJ0ZXhUeXBlRmxhZ3MgZW5jb2Rl
cyB0aGUgRDNEQ0FQUzk6OkRlY2xUeXBlIGZsYWcgYW5kIHZlcnRleCBkZWNsYXJhdGlvbiBmbGFn
IGZvciBlYWNoIEQzRCB2ZXJ0ZXggdHlwZSAmIHNpemUgY29tYmluYXRpb24uCi10ZW1wbGF0ZSA8
dW5zaWduZWQgaW50IGQzZHR5cGUsIGludCBzaXplPiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzIHsg
fTsKLQotdGVtcGxhdGUgPHVuc2lnbmVkIGludCBfY2FwZmxhZywgdW5zaWduZWQgaW50IF9kZWNs
ZmxhZz4KLXN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXIKLXsKLSAgICBlbnVtIHsgY2FwZmxh
ZyA9IF9jYXBmbGFnIH07Ci0gICAgZW51bSB7IGRlY2xmbGFnID0gX2RlY2xmbGFnIH07Ci19Owot
Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FULCAxPiA6IFZl
cnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9GTE9BVDE+IHsgfTsKLXRlbXBsYXRl
IDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfRkxPQVQsIDI+IDogVmVydGV4VHlwZUZs
YWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FUMj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0
IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwgMz4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8
MCwgRDNEREVDTFRZUEVfRkxPQVQzPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlw
ZUZsYWdzPEQzRFZUX0ZMT0FULCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNM
VFlQRV9GTE9BVDQ+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNE
VlRfU0hPUlQsIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX1NIT1JU
Mj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVCwg
ND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfU0hPUlQ0PiB7IH07Ci10
ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JUX05PUk0sIDI+IDog
VmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19TSE9SVDJOLCBEM0RERUNMVFlQRV9TSE9S
VDJOPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JU
X05PUk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19TSE9SVDROLCBEM0RE
RUNMVFlQRV9TSE9SVDROPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdz
PEQzRFZUX1VCWVRFLCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfVUJZVEU0
LCBEM0RERUNMVFlQRV9VQllURTQ+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBl
RmxhZ3M8RDNEVlRfVUJZVEVfTk9STSwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRD
QVBTX1VCWVRFNE4sIEQzRERFQ0xUWVBFX1VCWVRFNE4+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVj
dCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVVNIT1JUX05PUk0sIDI+IDogVmVydGV4VHlwZUZsYWdz
SGVscGVyPEQzRERUQ0FQU19VU0hPUlQyTiwgRDNEREVDTFRZUEVfVVNIT1JUMk4+IHsgfTsKLXRl
bXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVVNIT1JUX05PUk0sIDQ+IDog
VmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VU0hPUlQ0TiwgRDNEREVDTFRZUEVfVVNI
T1JUNE4+IHsgfTsKLQotCi0vLyBWZXJ0ZXhUeXBlTWFwcGluZyBtYXBzIEdMIHR5cGUgJiBub3Jt
YWxpemVkIGZsYWcgdG8gcHJlZmVycmVkIGFuZCBmYWxsYmFjayBEM0QgdmVydGV4IHR5cGVzIChh
cyBEM0RWZXJ0ZXhUeXBlIGVudW1zKS4KLXRlbXBsYXRlIDxHTGVudW0gR0x0eXBlLCBib29sIG5v
cm1hbGl6ZWQ+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZyB7IH07Ci0KLXRlbXBsYXRlIDxEM0RW
ZXJ0ZXhUeXBlIFByZWZlcnJlZCwgRDNEVmVydGV4VHlwZSBGYWxsYmFjayA9IFByZWZlcnJlZD4K
LXN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2UKLXsKLSAgICBlbnVtIHsgcHJlZmVycmVkID0g
UHJlZmVycmVkIH07Ci0gICAgZW51bSB7IGZhbGxiYWNrID0gRmFsbGJhY2sgfTsKLX07Ci0KLXRl
bXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9CWVRFLCBmYWxzZT4gICAgICAg
ICAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9TSE9SVD4geyB9
OyAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FzdAotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRl
eFR5cGVNYXBwaW5nPEdMX0JZVEUsIHRydWU+ICAgICAgICAgICAgICAgICAgICAgICAgIDogVmVy
dGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgICAgICAgICAgICAg
ICAvLyBOb3JtYWxpemUKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9V
TlNJR05FRF9CWVRFLCBmYWxzZT4gICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFz
ZTxEM0RWVF9VQllURSwgRDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgLy8gSWRlbnRpdHksIENh
c3QKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9CWVRF
LCB0cnVlPiAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9VQllU
RV9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAgICAgLy8gSWRlbnRpdHksIE5vcm1hbGl6ZQotdGVt
cGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1NIT1JULCBmYWxzZT4gICAgICAg
ICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1NIT1JUPiB7IH07
ICAgICAgICAgICAgICAgICAgICAgICAvLyBJZGVudGl0eQotdGVtcGxhdGUgPD4gc3RydWN0IFZl
cnRleFR5cGVNYXBwaW5nPEdMX1NIT1JULCB0cnVlPiAgICAgICAgICAgICAgICAgICAgICAgIDog
VmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1NIT1JUX05PUk0sIEQzRFZUX0ZMT0FUPiB7IH07
ICAgICAvLyBDYXN0LCBOb3JtYWxpemUKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFw
cGluZzxHTF9VTlNJR05FRF9TSE9SVCwgZmFsc2U+ICAgICAgICAgICAgICA6IFZlcnRleFR5cGVN
YXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2Fz
dAotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1VOU0lHTkVEX1NIT1JU
LCB0cnVlPiAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1VTSE9S
VF9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAgICAvLyBDYXN0LCBOb3JtYWxpemUKLXRlbXBsYXRl
IDxib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9GSVhFRCwgbm9y
bWFsaXplZD4gICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4geyB9OyAgICAg
ICAgICAgICAgICAgICAgICAgLy8gRml4ZWRUb0Zsb2F0Ci10ZW1wbGF0ZSA8Ym9vbCBub3JtYWxp
emVkPiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfRkxPQVQsIG5vcm1hbGl6ZWQ+ICAgOiBW
ZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgICAgICAgICAg
ICAgIC8vIElkZW50aXR5Ci0KLQotLy8gR2l2ZW4gYSBHTCB0eXBlICYgbm9ybSBmbGFnIGFuZCBh
IEQzRCB0eXBlLCBDb252ZXJzaW9uUnVsZSBwcm92aWRlcyB0aGUgdHlwZSBjb252ZXJzaW9uIHJ1
bGUgKENhc3QsIE5vcm1hbGl6ZSwgSWRlbnRpdHksIEZpeGVkVG9GbG9hdCkuCi0vLyBUaGUgY29u
dmVyc2lvbiBydWxlcyB0aGVtc2VsdmVzIGFyZSBkZWZpbmVkIGluIHZlcnRleGNvbnZlcnNpb24u
aC4KLQotLy8gQWxtb3N0IGFsbCBjYXNlcyBhcmUgY292ZXJlZCBieSBDYXN0IChpbmNsdWRpbmcg
dGhvc2UgdGhhdCBhcmUgYWN0dWFsbHkgSWRlbnRpdHkgc2luY2UgQ2FzdDxULFQ+IGtub3dzIGl0
J3MgYW4gaWRlbnRpdHkgbWFwcGluZykuCi10ZW1wbGF0ZSA8R0xlbnVtIGZyb21UeXBlLCBib29s
IG5vcm1hbGl6ZWQsIHVuc2lnbmVkIGludCB0b1R5cGU+Ci1zdHJ1Y3QgQ29udmVyc2lvblJ1bGUg
OiBDYXN0PHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5cGUsIHR5cGVuYW1lIEQzRFRv
Q1R5cGU8dG9UeXBlPjo6dHlwZT4geyB9OwotCi0vLyBBbGwgY29udmVyc2lvbnMgZnJvbSBub3Jt
YWxpemVkIHR5cGVzIHRvIGZsb2F0IHVzZSB0aGUgTm9ybWFsaXplIG9wZXJhdG9yLgotdGVtcGxh
dGUgPEdMZW51bSBmcm9tVHlwZT4gc3RydWN0IENvbnZlcnNpb25SdWxlPGZyb21UeXBlLCB0cnVl
LCBEM0RWVF9GTE9BVD4gOiBOb3JtYWxpemU8dHlwZW5hbWUgR0xUb0NUeXBlPGZyb21UeXBlPjo6
dHlwZT4geyB9OwotCi0vLyBVc2UgYSBmdWxsIHNwZWNpYWxpemF0aW9uIGZvciB0aGlzIHNvIHRo
YXQgaXQgcHJlZmVyZW50aWFsbHkgbWF0Y2hlcyBhaGVhZCBvZiB0aGUgZ2VuZXJpYyBub3JtYWxp
emUtdG8tZmxvYXQgcnVsZXMuCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xf
RklYRUQsIHRydWUsIEQzRFZUX0ZMT0FUPiAgOiBGaXhlZFRvRmxvYXQ8R0xpbnQsIDE2PiB7IH07
Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklYRUQsIGZhbHNlLCBEM0RW
VF9GTE9BVD4gOiBGaXhlZFRvRmxvYXQ8R0xpbnQsIDE2PiB7IH07Ci0KLS8vIEEgMi1zdGFnZSBj
b25zdHJ1Y3Rpb24gaXMgdXNlZCBmb3IgRGVmYXVsdFZlcnRleFZhbHVlcyBiZWNhdXNlIGZsb2F0
IG11c3QgdXNlIFNpbXBsZURlZmF1bHRWYWx1ZXMgKGkuZS4gMC8xKQotLy8gd2hldGhlciBpdCBp
cyBub3JtYWxpemVkIG9yIG5vdC4KLXRlbXBsYXRlIDxjbGFzcyBULCBib29sIG5vcm1hbGl6ZWQ+
IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyIHsgfTsKLQotdGVtcGxhdGUgPGNsYXNz
IFQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyPFQsIHRydWU+ICA6IE5vcm1hbGl6
ZWREZWZhdWx0VmFsdWVzPFQ+IHsgfTsKLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgRGVmYXVs
dFZlcnRleFZhbHVlc1N0YWdlMjxULCBmYWxzZT4gOiBTaW1wbGVEZWZhdWx0VmFsdWVzPFQ+IHsg
fTsKLQotLy8gV29yayBvdXQgdGhlIGRlZmF1bHQgdmFsdWUgcnVsZSBmb3IgYSBEM0QgdHlwZSAo
ZXhwcmVzc2VkIGFzIHRoZSBDIHR5cGUpIGFuZAotdGVtcGxhdGUgPGNsYXNzIFQsIGJvb2wgbm9y
bWFsaXplZD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXMgOiBEZWZhdWx0VmVydGV4VmFsdWVz
U3RhZ2UyPFQsIG5vcm1hbGl6ZWQ+IHsgfTsKLXRlbXBsYXRlIDxib29sIG5vcm1hbGl6ZWQ+IHN0
cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzPGZsb2F0LCBub3JtYWxpemVkPiA6IFNpbXBsZURlZmF1
bHRWYWx1ZXM8ZmxvYXQ+IHsgfTsKLQotLy8gUG9saWN5IHJ1bGVzIGZvciB1c2Ugd2l0aCBDb252
ZXJ0ZXIsIHRvIGNob29zZSB3aGV0aGVyIHRvIHVzZSB0aGUgcHJlZmVycmVkIG9yIGZhbGxiYWNr
IGNvbnZlcnNpb24uCi0vLyBUaGUgZmFsbGJhY2sgY29udmVyc2lvbiBwcm9kdWNlcyBhbiBvdXRw
dXQgdGhhdCBhbGwgRDNEOSBkZXZpY2VzIG11c3Qgc3VwcG9ydC4KLXRlbXBsYXRlIDxjbGFzcyBU
PiBzdHJ1Y3QgVXNlUHJlZmVycmVkIHsgZW51bSB7IHR5cGUgPSBUOjpwcmVmZXJyZWQgfTsgfTsK
LXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgVXNlRmFsbGJhY2sgeyBlbnVtIHsgdHlwZSA9IFQ6
OmZhbGxiYWNrIH07IH07Ci0KLS8vIENvbnZlcnRlciB0aWVzIGl0IGFsbCB0b2dldGhlci4gR2l2
ZW4gYW4gT3BlbkdMIHR5cGUvbm9ybS9zaXplIGFuZCBjaG9pY2Ugb2YgcHJlZmVycmVkL2ZhbGxi
YWNrIGNvbnZlcnNpb24sCi0vLyBpdCBwcm92aWRlcyBhbGwgdGhlIG1lbWJlcnMgb2YgdGhlIGFw
cHJvcHJpYXRlIFZlcnRleERhdGFDb252ZXJ0ZXIsIHRoZSBEM0RDQVBTOTo6RGVjbFR5cGVzIGZs
YWcgaW4gY2FwIGZsYWcKLS8vIGFuZCB0aGUgRDNEREVDTFRZUEUgbWVtYmVyIG5lZWRlZCBmb3Ig
dGhlIHZlcnRleCBkZWNsYXJhdGlvbiBpbiBkZWNsZmxhZy4KLXRlbXBsYXRlIDxHTGVudW0gZnJv
bVR5cGUsIGJvb2wgbm9ybWFsaXplZCwgaW50IHNpemUsIHRlbXBsYXRlIDxjbGFzcyBUPiBjbGFz
cyBQcmVmZXJlbmNlUnVsZT4KLXN0cnVjdCBDb252ZXJ0ZXIKLSAgICA6IFZlcnRleERhdGFDb252
ZXJ0ZXI8dHlwZW5hbWUgR0xUb0NUeXBlPGZyb21UeXBlPjo6dHlwZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgV2lkZW5SdWxlPFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBlTWFwcGluZzxm
cm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6dHlwZSwgc2l6ZT4sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIENvbnZlcnNpb25SdWxlPGZyb21UeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBub3JtYWxpemVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQcmVmZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUs
IG5vcm1hbGl6ZWQ+ID46OnR5cGU+LAotICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0
VmVydGV4VmFsdWVzPHR5cGVuYW1lIEQzRFRvQ1R5cGU8UHJlZmVyZW5jZVJ1bGU8IFZlcnRleFR5
cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBlPjo6dHlwZSwgbm9ybWFsaXpl
ZCA+ID4KLXsKLXByaXZhdGU6Ci0gICAgZW51bSB7IGQzZHR5cGUgPSBQcmVmZXJlbmNlUnVsZTwg
VmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6ZWQ+ID46OnR5cGUgfTsKLSAgICBl
bnVtIHsgZDNkc2l6ZSA9IFdpZGVuUnVsZTxkM2R0eXBlLCBzaXplPjo6ZmluYWxXaWR0aCB9Owot
Ci1wdWJsaWM6Ci0gICAgZW51bSB7IGNhcGZsYWcgPSBWZXJ0ZXhUeXBlRmxhZ3M8ZDNkdHlwZSwg
ZDNkc2l6ZT46OmNhcGZsYWcgfTsKLSAgICBlbnVtIHsgZGVjbGZsYWcgPSBWZXJ0ZXhUeXBlRmxh
Z3M8ZDNkdHlwZSwgZDNkc2l6ZT46OmRlY2xmbGFnIH07Ci19OwotCi0vLyBJbml0aWFsaXplIGEg
VHJhbnNsYXRpb25JbmZvCi0jZGVmaW5lIFRSQU5TTEFUSU9OKHR5cGUsIG5vcm0sIHNpemUsIHBy
ZWZlcnJlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBw
cmVmZXJyZWQ+OjppZGVudGl0eSwgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
IENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQ+OjpmaW5hbFNpemUsICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXpl
LCBwcmVmZXJyZWQ+Ojpjb252ZXJ0QXJyYXksICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgIHN0YXRpY19jYXN0PEQzRERFQ0xUWVBFPihDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwg
cHJlZmVycmVkPjo6ZGVjbGZsYWcpICBcCi0gICAgfQotCi0jZGVmaW5lIFRSQU5TTEFUSU9OX0ZP
Ul9UWVBFX05PUk1fU0laRSh0eXBlLCBub3JtLCBzaXplKSAgICBcCi0gICAgeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIENv
bnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBVc2VQcmVmZXJyZWQ+OjpjYXBmbGFnLCBcCi0gICAg
ICAgIFRSQU5TTEFUSU9OKHR5cGUsIG5vcm0sIHNpemUsIFVzZVByZWZlcnJlZCksICAgICAgICBc
Ci0gICAgICAgIFRSQU5TTEFUSU9OKHR5cGUsIG5vcm0sIHNpemUsIFVzZUZhbGxiYWNrKSAgICAg
ICAgICBcCi0gICAgfQotCi0jZGVmaW5lIFRSQU5TTEFUSU9OU19GT1JfVFlQRSh0eXBlKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHsgVFJBTlNMQVRJT05fRk9S
X1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAxKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9S
TV9TSVpFKHR5cGUsIGZhbHNlLCAyKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5
cGUsIGZhbHNlLCAzKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNl
LCA0KSB9LCBcCi0gICAgICAgIHsgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUs
IHRydWUsIDEpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgdHJ1ZSwgMiks
IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCB0cnVlLCAzKSwgVFJBTlNMQVRJ
T05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRydWUsIDQpIH0sICAgICBcCi0gICAgfQotCi0j
ZGVmaW5lIFRSQU5TTEFUSU9OU19GT1JfVFlQRV9OT19OT1JNKHR5cGUpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgIHsgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5
cGUsIGZhbHNlLCAxKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNl
LCAyKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAzKSwgVFJB
TlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCA0KSB9LCBcCi0gICAgICAg
IHsgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAxKSwgVFJBTlNM
QVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAyKSwgVFJBTlNMQVRJT05fRk9S
X1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAzKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9S
TV9TSVpFKHR5cGUsIGZhbHNlLCA0KSB9LCBcCi0gICAgfQotCi1jb25zdCBWZXJ0ZXhCdWZmZXI5
OjpUcmFuc2xhdGlvbkRlc2NyaXB0aW9uIFZlcnRleEJ1ZmZlcjk6Om1Qb3NzaWJsZVRyYW5zbGF0
aW9uc1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFU11bMl1bNF0gPSAvLyBbR0wgdHlwZXMgYXMg
ZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXplZF1bc2l6ZS0xXQotewotICAgIFRS
QU5TTEFUSU9OU19GT1JfVFlQRShHTF9CWVRFKSwKLSAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUo
R0xfVU5TSUdORURfQllURSksCi0gICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKEdMX1NIT1JUKSwK
LSAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xfVU5TSUdORURfU0hPUlQpLAotICAgIFRSQU5T
TEFUSU9OU19GT1JfVFlQRV9OT19OT1JNKEdMX0ZJWEVEKSwKLSAgICBUUkFOU0xBVElPTlNfRk9S
X1RZUEVfTk9fTk9STShHTF9GTE9BVCkKLX07Ci0KLXZvaWQgVmVydGV4QnVmZmVyOTo6aW5pdGlh
bGl6ZVRyYW5zbGF0aW9ucyhEV09SRCBkZWNsVHlwZXMpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFUzsgaSsrKQotICAgIHsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCAyOyBqKyspCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGsgPSAwOyBrIDwgNDsgaysrKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGlmIChtUG9zc2libGVUcmFuc2xhdGlvbnNbaV1bal1ba10u
Y2Fwc0ZsYWcgPT0gMCB8fCAoZGVjbFR5cGVzICYgbVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pd
W2tdLmNhcHNGbGFnKSAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgbUZvcm1hdENvbnZlcnRlcnNbaV1bal1ba10gPSBtUG9zc2libGVUcmFuc2xhdGlvbnNbaV1b
al1ba10ucHJlZmVycmVkQ29udmVyc2lvbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbUZvcm1h
dENvbnZlcnRlcnNbaV1bal1ba10gPSBtUG9zc2libGVUcmFuc2xhdGlvbnNbaV1bal1ba10uZmFs
bGJhY2tDb252ZXJzaW9uOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLX0KLQotdW5zaWduZWQgaW50IFZlcnRleEJ1ZmZlcjk6OnR5cGVJbmRleChH
TGVudW0gdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9C
WVRFOiByZXR1cm4gMDsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURTogcmV0dXJuIDE7Ci0g
ICAgICBjYXNlIEdMX1NIT1JUOiByZXR1cm4gMjsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hP
UlQ6IHJldHVybiAzOwotICAgICAgY2FzZSBHTF9GSVhFRDogcmV0dXJuIDQ7Ci0gICAgICBjYXNl
IEdMX0ZMT0FUOiByZXR1cm4gNTsKLQotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgcmV0
dXJuIDU7Ci0gICAgfQotfQotCi1jb25zdCBWZXJ0ZXhCdWZmZXI5OjpGb3JtYXRDb252ZXJ0ZXIg
JlZlcnRleEJ1ZmZlcjk6OmZvcm1hdENvbnZlcnRlcihjb25zdCBnbDo6VmVydGV4QXR0cmlidXRl
ICZhdHRyaWJ1dGUpCi17Ci0gICAgcmV0dXJuIG1Gb3JtYXRDb252ZXJ0ZXJzW3R5cGVJbmRleChh
dHRyaWJ1dGUubVR5cGUpXVthdHRyaWJ1dGUubU5vcm1hbGl6ZWRdW2F0dHJpYnV0ZS5tU2l6ZSAt
IDFdOwotfQotCi1ib29sIFZlcnRleEJ1ZmZlcjk6OnNwYWNlUmVxdWlyZWQoY29uc3QgZ2w6OlZl
cnRleEF0dHJpYnV0ZSAmYXR0cmliLCBzdGQ6OnNpemVfdCBjb3VudCwgR0xzaXplaSBpbnN0YW5j
ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRT
cGFjZVJlcXVpcmVkKQotewotICAgIHVuc2lnbmVkIGludCBlbGVtZW50U2l6ZSA9IGZvcm1hdENv
bnZlcnRlcihhdHRyaWIpLm91dHB1dEVsZW1lbnRTaXplOwotCi0gICAgaWYgKGF0dHJpYi5tQXJy
YXlFbmFibGVkKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgaW50IGVsZW1lbnRDb3VudCA9IDA7
Ci0gICAgICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBhdHRyaWIubURpdmlzb3IgPT0gMCkKLSAg
ICAgICAgewotICAgICAgICAgICAgZWxlbWVudENvdW50ID0gY291bnQ7Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgaW50PihpbnN0YW5jZXMpIDwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+Ojpt
YXgoKSAtIChhdHRyaWIubURpdmlzb3IgLSAxKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAvLyBSb3VuZCB1cAotICAgICAgICAgICAgICAgIGVsZW1lbnRDb3VudCA9IChzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBpbnQ+KGluc3RhbmNlcykgKyAoYXR0cmliLm1EaXZpc29yIC0gMSkpIC8g
YXR0cmliLm1EaXZpc29yOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGVsZW1lbnRDb3VudCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGludD4oaW5zdGFuY2VzKSAvIGF0dHJpYi5tRGl2aXNvcjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChlbGVtZW50U2l6ZSA8PSBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkIGludD46Om1heCgpIC8gZWxlbWVudENvdW50KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAob3V0U3BhY2VSZXF1aXJlZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAqb3V0U3BhY2VSZXF1aXJlZCA9IGVsZW1lbnRTaXplICogZWxlbWVudENvdW50OwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGVsZW1lbnRTaXpl
ID0gNDsKLSAgICAgICAgaWYgKG91dFNwYWNlUmVxdWlyZWQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgICpvdXRTcGFjZVJlcXVpcmVkID0gZWxlbWVudFNpemUgKiA0OwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXI5LmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlcjku
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY4ODExN2JkYTI1MGVjOTExNzA2N2I4
YTY4YTg0NGQ2NDBlMzBiMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1Zl
cnRleEJ1ZmZlcjkuaAorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCi0KLS8vIFZlcnRleEJ1ZmZlcjkuaDogRGVmaW5lcyB0aGUgRDNEOSBWZXJ0ZXhCdWZm
ZXIgaW1wbGVtZW50YXRpb24uCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX1ZFUlRFWEJV
RkZFUjlfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1ZFUlRFWEJVRkZFUjlfSF8KLQot
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXIuaCIKLQotbmFtZXNwYWNl
IHJ4Ci17Ci1jbGFzcyBSZW5kZXJlcjk7Ci0KLWNsYXNzIFZlcnRleEJ1ZmZlcjkgOiBwdWJsaWMg
VmVydGV4QnVmZmVyCi17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBWZXJ0ZXhCdWZmZXI5KHJ4
OjpSZW5kZXJlcjkgKmNvbnN0IHJlbmRlcmVyKTsKLSAgICB2aXJ0dWFsIH5WZXJ0ZXhCdWZmZXI5
KCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgc2l6ZSwgYm9v
bCBkeW5hbWljVXNhZ2UpOwotCi0gICAgc3RhdGljIFZlcnRleEJ1ZmZlcjkgKm1ha2VWZXJ0ZXhC
dWZmZXI5KFZlcnRleEJ1ZmZlciAqdmVydGV4QnVmZmVyKTsKLQotICAgIHZpcnR1YWwgYm9vbCBz
dG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBH
TGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKLSAgICB2
aXJ0dWFsIGJvb2wgc3RvcmVSYXdEYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGludCBz
aXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKLQotICAgIHZpcnR1YWwgYm9vbCBnZXRTcGFjZVJl
cXVpcmVkKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xzaXplaSBjb3VudCwg
R0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCAqb3V0U3BhY2VSZXF1aXJlZCkgY29uc3Q7
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNDb252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhB
dHRyaWJ1dGUgJmF0dHJpYikgY29uc3Q7Ci0KLSAgICB1bnNpZ25lZCBpbnQgZ2V0VmVydGV4U2l6
ZShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0OwotICAgIEQzRERFQ0xU
WVBFIGdldERlY2xUeXBlKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3Q7
Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRCdWZmZXJTaXplKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBib29sIHNldEJ1ZmZlclNpemUodW5zaWduZWQgaW50IHNpemUpOwotICAgIHZpcnR1
YWwgYm9vbCBkaXNjYXJkKCk7Ci0KLSAgICBJRGlyZWN0M0RWZXJ0ZXhCdWZmZXI5ICpnZXRCdWZm
ZXIoKSBjb25zdDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihW
ZXJ0ZXhCdWZmZXI5KTsKLQotICAgIHJ4OjpSZW5kZXJlcjkgKmNvbnN0IG1SZW5kZXJlcjsKLQot
ICAgIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKm1WZXJ0ZXhCdWZmZXI7Ci0gICAgdW5zaWduZWQg
aW50IG1CdWZmZXJTaXplOwotICAgIGJvb2wgbUR5bmFtaWNVc2FnZTsKLQotICAgIC8vIEF0dHJp
YnV0ZSBmb3JtYXQgY29udmVyc2lvbgotICAgIGVudW0geyBOVU1fR0xfVkVSVEVYX0FUVFJJQl9U
WVBFUyA9IDYgfTsKLQotICAgIHN0cnVjdCBGb3JtYXRDb252ZXJ0ZXIKLSAgICB7Ci0gICAgICAg
IGJvb2wgaWRlbnRpdHk7Ci0gICAgICAgIHN0ZDo6c2l6ZV90IG91dHB1dEVsZW1lbnRTaXplOwot
ICAgICAgICB2b2lkICgqY29udmVydEFycmF5KShjb25zdCB2b2lkICppbiwgc3RkOjpzaXplX3Qg
c3RyaWRlLCBzdGQ6OnNpemVfdCBuLCB2b2lkICpvdXQpOwotICAgICAgICBEM0RERUNMVFlQRSBk
M2REZWNsVHlwZTsKLSAgICB9OwotCi0gICAgc3RhdGljIGJvb2wgbVRyYW5zbGF0aW9uc0luaXRp
YWxpemVkOwotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVUcmFuc2xhdGlvbnMoRFdPUkQgZGVj
bFR5cGVzKTsKLQotICAgIC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRleCgp
XVtub3JtYWxpemVkXVtzaXplIC0gMV0KLSAgICBzdGF0aWMgRm9ybWF0Q29udmVydGVyIG1Gb3Jt
YXRDb252ZXJ0ZXJzW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsKLQotICAgIHN0
cnVjdCBUcmFuc2xhdGlvbkRlc2NyaXB0aW9uCi0gICAgewotICAgICAgICBEV09SRCBjYXBzRmxh
ZzsKLSAgICAgICAgRm9ybWF0Q29udmVydGVyIHByZWZlcnJlZENvbnZlcnNpb247Ci0gICAgICAg
IEZvcm1hdENvbnZlcnRlciBmYWxsYmFja0NvbnZlcnNpb247Ci0gICAgfTsKLQotICAgIC8vIFRo
aXMgdGFibGUgaXMgdXNlZCB0byBnZW5lcmF0ZSBtRm9ybWF0Q29udmVydGVycy4KLSAgICAvLyBb
R0wgdHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXplZF1bc2l6ZSAt
IDFdCi0gICAgc3RhdGljIGNvbnN0IFRyYW5zbGF0aW9uRGVzY3JpcHRpb24gbVBvc3NpYmxlVHJh
bnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsKLQotICAgIHN0YXRp
YyB1bnNpZ25lZCBpbnQgdHlwZUluZGV4KEdMZW51bSB0eXBlKTsKLSAgICBzdGF0aWMgY29uc3Qg
Rm9ybWF0Q29udmVydGVyICZmb3JtYXRDb252ZXJ0ZXIoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0
ZSAmYXR0cmlidXRlKTsKLQotICAgIHN0YXRpYyBib29sIHNwYWNlUmVxdWlyZWQoY29uc3QgZ2w6
OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBzdGQ6OnNpemVfdCBjb3VudCwgR0xzaXplaSBpbnN0
YW5jZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm91dFNw
YWNlUmVxdWlyZWQpOwotfTsKLQotfQotCi0jZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1ZF
UlRFWEJVRkZFUjlfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGVjbGFyYXRpb25DYWNoZS5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERlY2xhcmF0aW9uQ2Fj
aGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjgzYTY0NzZlYmNjNmJiOGQ2
MTU1ZGU1NmJiMjYwMzYzMWQ5ZGY3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvVmVydGV4RGVjbGFyYXRpb25DYWNoZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMTcgKzAs
MCBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVmVydGV4
RGVjbGFyYXRpb25DYWNoZS5jcHA6IEltcGxlbWVudHMgYSBoZWxwZXIgY2xhc3MgdG8gY29uc3Ry
dWN0IGFuZCBjYWNoZSB2ZXJ0ZXggZGVjbGFyYXRpb25zLgotCi0jaW5jbHVkZSAibGliR0xFU3Yy
L1Byb2dyYW1CaW5hcnkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXI5LmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL1ZlcnRleERlY2xhcmF0aW9uQ2FjaGUuaCIKLQotbmFtZXNwYWNlIHJ4Ci17
Ci0KLVZlcnRleERlY2xhcmF0aW9uQ2FjaGU6OlZlcnRleERlY2xhcmF0aW9uQ2FjaGUoKSA6IG1N
YXhMcnUoMCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9WRVJURVhfREVDTF9DQUNI
RV9FTlRSSUVTOyBpKyspCi0gICAgewotICAgICAgICBtVmVydGV4RGVjbENhY2hlW2ldLnZlcnRl
eERlY2xhcmF0aW9uID0gTlVMTDsKLSAgICAgICAgbVZlcnRleERlY2xDYWNoZVtpXS5scnVDb3Vu
dCA9IDA7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9B
VFRSSUJTOyBpKyspCi0gICAgewotICAgICAgICBtQXBwbGllZFZCc1tpXS5zZXJpYWwgPSAwOwot
ICAgIH0KLQotICAgIG1MYXN0U2V0VkRlY2wgPSBOVUxMOwotICAgIG1JbnN0YW5jaW5nRW5hYmxl
ZCA9IHRydWU7Ci19Ci0KLVZlcnRleERlY2xhcmF0aW9uQ2FjaGU6On5WZXJ0ZXhEZWNsYXJhdGlv
bkNhY2hlKCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9WRVJURVhfREVDTF9DQUNI
RV9FTlRSSUVTOyBpKyspCi0gICAgewotICAgICAgICBpZiAobVZlcnRleERlY2xDYWNoZVtpXS52
ZXJ0ZXhEZWNsYXJhdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgbVZlcnRleERlY2xDYWNo
ZVtpXS52ZXJ0ZXhEZWNsYXJhdGlvbi0+UmVsZWFzZSgpOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci1HTGVudW0gVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6YXBwbHlEZWNsYXJhdGlvbihJRGlyZWN0
M0REZXZpY2U5ICpkZXZpY2UsIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0cmlidXRlc1tdLCBnbDo6
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgR0xzaXplaSBpbnN0YW5jZXMsIEdMc2l6ZWkg
KnJlcGVhdERyYXcpCi17Ci0gICAgKnJlcGVhdERyYXcgPSAxOwotCi0gICAgaW50IGluZGV4ZWRB
dHRyaWJ1dGUgPSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOwotICAgIGludCBpbnN0YW5jZWRBdHRy
aWJ1dGUgPSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOwotCi0gICAgaWYgKGluc3RhbmNlcyA+IDAp
Ci0gICAgewotICAgICAgICAvLyBGaW5kIGFuIGluZGV4ZWQgYXR0cmlidXRlIHRvIGJlIG1hcHBl
ZCB0byBEM0Qgc3RyZWFtIDAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZF
UlRFWF9BVFRSSUJTOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVz
W2ldLmFjdGl2ZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoaW5kZXhlZEF0
dHJpYnV0ZSA9PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTICYmIGF0dHJpYnV0ZXNbaV0uZGl2aXNv
ciA9PSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW5kZXhlZEF0
dHJpYnV0ZSA9IGk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYg
KGluc3RhbmNlZEF0dHJpYnV0ZSA9PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTICYmIGF0dHJpYnV0
ZXNbaV0uZGl2aXNvciAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgaW5zdGFuY2VkQXR0cmlidXRlID0gaTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgaWYgKGluZGV4ZWRBdHRyaWJ1dGUgIT0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUyAmJiBp
bnN0YW5jZWRBdHRyaWJ1dGUgIT0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7ICAgLy8gRm91bmQgYm90aCBhbiBpbmRleGVkIGFuZCBpbnN0YW5jZWQg
YXR0cmlidXRlCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaW5kZXhl
ZEF0dHJpYnV0ZSA9PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBEM0RWRVJURVhFTEVNRU5UOSBlbGVtZW50c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTICsgMV07
Ci0gICAgRDNEVkVSVEVYRUxFTUVOVDkgKmVsZW1lbnQgPSAmZWxlbWVudHNbMF07Ci0KLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICB7Ci0g
ICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmFjdGl2ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
Ly8gRGlyZWN0bHkgYmluZGluZyB0aGUgc3RvcmFnZSBidWZmZXIgaXMgbm90IHN1cHBvcnRlZCBm
b3IgZDNkOQotICAgICAgICAgICAgQVNTRVJUKGF0dHJpYnV0ZXNbaV0uc3RvcmFnZSA9PSBOVUxM
KTsKLQotICAgICAgICAgICAgaW50IHN0cmVhbSA9IGk7Ci0KLSAgICAgICAgICAgIGlmIChpbnN0
YW5jZXMgPiAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIER1ZSB0byBhIGJ1
ZyBvbiBBVEkgY2FyZHMgd2UgY2FuJ3QgZW5hYmxlIGluc3RhbmNpbmcgd2hlbiBub25lIG9mIHRo
ZSBhdHRyaWJ1dGVzIGFyZSBpbnN0YW5jZWQuCi0gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNl
ZEF0dHJpYnV0ZSA9PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgKnJlcGVhdERyYXcgPSBpbnN0YW5jZXM7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChpID09IGluZGV4ZWRBdHRyaWJ1dGUpCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9IDA7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaSA9PSAwKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSBpbmRleGVkQXR0
cmlidXRlOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgVUlO
VCBmcmVxdWVuY3kgPSAxOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGF0dHJpYnV0ZXNbaV0uZGl2aXNvciA9PSAwKQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcmVxdWVuY3kgPSBEM0RTVFJFQU1TT1VSQ0VfSU5E
RVhFRERBVEEgfCBpbnN0YW5jZXM7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBmcmVxdWVuY3kgPSBEM0RTVFJFQU1TT1VSQ0VfSU5TVEFOQ0VEQVRBIHwgYXR0cmlidXRl
c1tpXS5kaXZpc29yOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoc3RyZWFt
LCBmcmVxdWVuY3kpOwotICAgICAgICAgICAgICAgICAgICBtSW5zdGFuY2luZ0VuYWJsZWQgPSB0
cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgVmVy
dGV4QnVmZmVyOSAqdmVydGV4QnVmZmVyID0gVmVydGV4QnVmZmVyOTo6bWFrZVZlcnRleEJ1ZmZl
cjkoYXR0cmlidXRlc1tpXS52ZXJ0ZXhCdWZmZXIpOwotCi0gICAgICAgICAgICBpZiAobUFwcGxp
ZWRWQnNbc3RyZWFtXS5zZXJpYWwgIT0gYXR0cmlidXRlc1tpXS5zZXJpYWwgfHwKLSAgICAgICAg
ICAgICAgICBtQXBwbGllZFZCc1tzdHJlYW1dLnN0cmlkZSAhPSBhdHRyaWJ1dGVzW2ldLnN0cmlk
ZSB8fAotICAgICAgICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVhbV0ub2Zmc2V0ICE9IGF0dHJp
YnV0ZXNbaV0ub2Zmc2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRldmljZS0+
U2V0U3RyZWFtU291cmNlKHN0cmVhbSwgdmVydGV4QnVmZmVyLT5nZXRCdWZmZXIoKSwgYXR0cmli
dXRlc1tpXS5vZmZzZXQsIGF0dHJpYnV0ZXNbaV0uc3RyaWRlKTsKLSAgICAgICAgICAgICAgICBt
QXBwbGllZFZCc1tzdHJlYW1dLnNlcmlhbCA9IGF0dHJpYnV0ZXNbaV0uc2VyaWFsOwotICAgICAg
ICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVhbV0uc3RyaWRlID0gYXR0cmlidXRlc1tpXS5zdHJp
ZGU7Ci0gICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5vZmZzZXQgPSBhdHRyaWJ1
dGVzW2ldLm9mZnNldDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZWxlbWVudC0+U3Ry
ZWFtID0gc3RyZWFtOwotICAgICAgICAgICAgZWxlbWVudC0+T2Zmc2V0ID0gMDsKLSAgICAgICAg
ICAgIGVsZW1lbnQtPlR5cGUgPSBhdHRyaWJ1dGVzW2ldLmF0dHJpYnV0ZS0+bUFycmF5RW5hYmxl
ZCA/IHZlcnRleEJ1ZmZlci0+Z2V0RGVjbFR5cGUoKmF0dHJpYnV0ZXNbaV0uYXR0cmlidXRlKSA6
IEQzRERFQ0xUWVBFX0ZMT0FUNDsKLSAgICAgICAgICAgIGVsZW1lbnQtPk1ldGhvZCA9IEQzRERF
Q0xNRVRIT0RfREVGQVVMVDsKLSAgICAgICAgICAgIGVsZW1lbnQtPlVzYWdlID0gRDNEREVDTFVT
QUdFX1RFWENPT1JEOwotICAgICAgICAgICAgZWxlbWVudC0+VXNhZ2VJbmRleCA9IHByb2dyYW1C
aW5hcnktPmdldFNlbWFudGljSW5kZXgoaSk7Ci0gICAgICAgICAgICBlbGVtZW50Kys7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoaW5zdGFuY2VzID09IDAgfHwgaW5zdGFuY2VkQXR0cmli
dXRlID09IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgewotICAgICAgICBpZiAobUluc3Rh
bmNpbmdFbmFibGVkKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoaSwgMSk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIG1JbnN0YW5jaW5nRW5hYmxlZCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgc3RhdGljIGNvbnN0IEQzRFZFUlRFWEVMRU1FTlQ5IGVuZCA9IEQzRERFQ0xfRU5E
KCk7Ci0gICAgKihlbGVtZW50KyspID0gZW5kOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBO
VU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUzsgaSsrKQotICAgIHsKLSAgICAgICAgVmVydGV4
RGVjbENhY2hlRW50cnkgKmVudHJ5ID0gJm1WZXJ0ZXhEZWNsQ2FjaGVbaV07Ci0gICAgICAgIGlm
IChtZW1jbXAoZW50cnktPmNhY2hlZEVsZW1lbnRzLCBlbGVtZW50cywgKGVsZW1lbnQgLSBlbGVt
ZW50cykgKiBzaXplb2YoRDNEVkVSVEVYRUxFTUVOVDkpKSA9PSAwICYmIGVudHJ5LT52ZXJ0ZXhE
ZWNsYXJhdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgZW50cnktPmxydUNvdW50ID0gKytt
TWF4THJ1OwotICAgICAgICAgICAgaWYoZW50cnktPnZlcnRleERlY2xhcmF0aW9uICE9IG1MYXN0
U2V0VkRlY2wpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRWZXJ0
ZXhEZWNsYXJhdGlvbihlbnRyeS0+dmVydGV4RGVjbGFyYXRpb24pOwotICAgICAgICAgICAgICAg
IG1MYXN0U2V0VkRlY2wgPSBlbnRyeS0+dmVydGV4RGVjbGFyYXRpb247Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIHJldHVybiBHTF9OT19FUlJPUjsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIFZlcnRleERlY2xDYWNoZUVudHJ5ICpsYXN0Q2FjaGUgPSBtVmVydGV4RGVjbENhY2hlOwot
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUzsg
aSsrKQotICAgIHsKLSAgICAgICAgaWYgKG1WZXJ0ZXhEZWNsQ2FjaGVbaV0ubHJ1Q291bnQgPCBs
YXN0Q2FjaGUtPmxydUNvdW50KQotICAgICAgICB7Ci0gICAgICAgICAgICBsYXN0Q2FjaGUgPSAm
bVZlcnRleERlY2xDYWNoZVtpXTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChsYXN0Q2Fj
aGUtPnZlcnRleERlY2xhcmF0aW9uICE9IE5VTEwpCi0gICAgewotICAgICAgICBsYXN0Q2FjaGUt
PnZlcnRleERlY2xhcmF0aW9uLT5SZWxlYXNlKCk7Ci0gICAgICAgIGxhc3RDYWNoZS0+dmVydGV4
RGVjbGFyYXRpb24gPSBOVUxMOwotICAgICAgICAvLyBtTGFzdFNldFZEZWNsIGlzIHNldCB0byB0
aGUgcmVwbGFjZW1lbnQsIHNvIHdlIGRvbid0IGhhdmUgdG8gd29ycnkKLSAgICAgICAgLy8gYWJv
dXQgaXQuCi0gICAgfQotCi0gICAgbWVtY3B5KGxhc3RDYWNoZS0+Y2FjaGVkRWxlbWVudHMsIGVs
ZW1lbnRzLCAoZWxlbWVudCAtIGVsZW1lbnRzKSAqIHNpemVvZihEM0RWRVJURVhFTEVNRU5UOSkp
OwotICAgIGRldmljZS0+Q3JlYXRlVmVydGV4RGVjbGFyYXRpb24oZWxlbWVudHMsICZsYXN0Q2Fj
aGUtPnZlcnRleERlY2xhcmF0aW9uKTsKLSAgICBkZXZpY2UtPlNldFZlcnRleERlY2xhcmF0aW9u
KGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24pOwotICAgIG1MYXN0U2V0VkRlY2wgPSBsYXN0
Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uOwotICAgIGxhc3RDYWNoZS0+bHJ1Q291bnQgPSArK21N
YXhMcnU7Ci0KLSAgICByZXR1cm4gR0xfTk9fRVJST1I7Ci19Ci0KLXZvaWQgVmVydGV4RGVjbGFy
YXRpb25DYWNoZTo6bWFya1N0YXRlRGlydHkoKQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Z2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAgICAgICAgbUFwcGxpZWRWQnNb
aV0uc2VyaWFsID0gMDsKLSAgICB9Ci0KLSAgICBtTGFzdFNldFZEZWNsID0gTlVMTDsKLSAgICBt
SW5zdGFuY2luZ0VuYWJsZWQgPSB0cnVlOyAgIC8vIEZvcmNlcyBpdCB0byBiZSBkaXNhYmxlZCB3
aGVuIG5vdCB1c2VkCi19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGVjbGFyYXRpb25DYWNoZS5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhEZWNsYXJhdGlv
bkNhY2hlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmYzAyNGE5YmFiNDhiMTlj
MDZhYjk3NTcwZThiNWQ1NDg3MTMxODcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCww
IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotLy8KLQotLy8gVmVydGV4RGVjbGFyYXRpb25DYWNoZS5oOiBEZWZpbmVz
IGEgaGVscGVyIGNsYXNzIHRvIGNvbnN0cnVjdCBhbmQgY2FjaGUgdmVydGV4IGRlY2xhcmF0aW9u
cy4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfVkVSVEVYREVDTEFSQVRJT05DQUNIRV9I
XwotI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfVkVSVEVYREVDTEFSQVRJT05DQUNIRV9IXwot
Ci0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERhdGFNYW5hZ2VyLmgiCi0KLW5h
bWVzcGFjZSBnbAotewotY2xhc3MgVmVydGV4RGF0YU1hbmFnZXI7Ci19Ci0KLW5hbWVzcGFjZSBy
eAotewotCi1jbGFzcyBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlCi17Ci0gIHB1YmxpYzoKLSAgICBW
ZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKCk7Ci0gICAgflZlcnRleERlY2xhcmF0aW9uQ2FjaGUoKTsK
LQotICAgIEdMZW51bSBhcHBseURlY2xhcmF0aW9uKElEaXJlY3QzRERldmljZTkgKmRldmljZSwg
VHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW10sIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5LCBHTHNpemVpIGluc3RhbmNlcywgR0xzaXplaSAqcmVwZWF0RHJhdyk7Ci0KLSAg
ICB2b2lkIG1hcmtTdGF0ZURpcnR5KCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBVSU5UIG1NYXhMcnU7
Ci0KLSAgICBlbnVtIHsgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVMgPSAzMiB9OwotCi0g
ICAgc3RydWN0IFZCRGF0YQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgaW50IHNlcmlhbDsKLSAg
ICAgICAgdW5zaWduZWQgaW50IHN0cmlkZTsKLSAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldDsK
LSAgICB9OwotCi0gICAgVkJEYXRhIG1BcHBsaWVkVkJzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNd
OwotICAgIElEaXJlY3QzRFZlcnRleERlY2xhcmF0aW9uOSAqbUxhc3RTZXRWRGVjbDsKLSAgICBi
b29sIG1JbnN0YW5jaW5nRW5hYmxlZDsKLQotICAgIHN0cnVjdCBWZXJ0ZXhEZWNsQ2FjaGVFbnRy
eQotICAgIHsKLSAgICAgICAgRDNEVkVSVEVYRUxFTUVOVDkgY2FjaGVkRWxlbWVudHNbZ2w6Ok1B
WF9WRVJURVhfQVRUUklCUyArIDFdOwotICAgICAgICBVSU5UIGxydUNvdW50OwotICAgICAgICBJ
RGlyZWN0M0RWZXJ0ZXhEZWNsYXJhdGlvbjkgKnZlcnRleERlY2xhcmF0aW9uOwotICAgIH0gbVZl
cnRleERlY2xDYWNoZVtOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFU107Ci19OwotCi19Ci0K
LSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfVkVSVEVYREVDTEFSQVRJT05DQUNIRV9IXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9CdWZmZXJTdG9yYWdlMTEuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9CdWZmZXJTdG9yYWdlMTEuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjMxZDViOGI4ODY4ZWNiOGY4ZTdmNjI2MWQwZTI5MWMwZDUxZmM1YjkKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L0J1ZmZlclN0b3JhZ2UxMS5jcHAKQEAgLTAsMCArMSwzNjYgQEAKKyNpbmNsdWRlICJwcmVjb21w
aWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIEJ1ZmZlclN0b3JhZ2UxMS5jcHAgRGVmaW5lcyB0
aGUgQnVmZmVyU3RvcmFnZTExIGNsYXNzLgorCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL0J1ZmZlclN0b3JhZ2UxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKKworbmFtZXNw
YWNlIHJ4Cit7CisKK0J1ZmZlclN0b3JhZ2UxMTo6QnVmZmVyU3RvcmFnZTExKFJlbmRlcmVyMTEg
KnJlbmRlcmVyKQoreworICAgIG1SZW5kZXJlciA9IHJlbmRlcmVyOworCisgICAgbVN0YWdpbmdC
dWZmZXIgPSBOVUxMOworICAgIG1TdGFnaW5nQnVmZmVyU2l6ZSA9IDA7CisKKyAgICBtU2l6ZSA9
IDA7CisKKyAgICBtUmVzb2x2ZWREYXRhID0gTlVMTDsKKyAgICBtUmVzb2x2ZWREYXRhU2l6ZSA9
IDA7CisgICAgbVJlc29sdmVkRGF0YVZhbGlkID0gZmFsc2U7CisKKyAgICBtUmVhZFVzYWdlQ291
bnQgPSAwOworICAgIG1Xcml0ZVVzYWdlQ291bnQgPSAwOworfQorCitCdWZmZXJTdG9yYWdlMTE6
On5CdWZmZXJTdG9yYWdlMTEoKQoreworICAgIFNhZmVSZWxlYXNlKG1TdGFnaW5nQnVmZmVyKTsK
KworICAgIGlmIChtUmVzb2x2ZWREYXRhKQorICAgIHsKKyAgICAgICAgZnJlZShtUmVzb2x2ZWRE
YXRhKTsKKyAgICAgICAgbVJlc29sdmVkRGF0YSA9IE5VTEw7CisgICAgfQorCisgICAgZm9yIChh
dXRvIGl0ID0gbURpcmVjdEJ1ZmZlcnMuYmVnaW4oKTsgaXQgIT0gbURpcmVjdEJ1ZmZlcnMuZW5k
KCk7IGl0KyspCisgICAgeworICAgICAgICBTYWZlRGVsZXRlKGl0LT5zZWNvbmQpOworICAgIH0K
K30KKworQnVmZmVyU3RvcmFnZTExICpCdWZmZXJTdG9yYWdlMTE6Om1ha2VCdWZmZXJTdG9yYWdl
MTEoQnVmZmVyU3RvcmFnZSAqYnVmZmVyU3RvcmFnZSkKK3sKKyAgICBBU1NFUlQoSEFTX0RZTkFN
SUNfVFlQRShCdWZmZXJTdG9yYWdlMTEqLCBidWZmZXJTdG9yYWdlKSk7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEJ1ZmZlclN0b3JhZ2UxMSo+KGJ1ZmZlclN0b3JhZ2UpOworfQorCit2b2lkICpC
dWZmZXJTdG9yYWdlMTE6OmdldERhdGEoKQoreworICAgIEFTU0VSVChtU3RhZ2luZ0J1ZmZlcik7
CisKKyAgICBpZiAoIW1SZXNvbHZlZERhdGFWYWxpZCkKKyAgICB7CisgICAgICAgIElEM0QxMURl
dmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICAgICAgSUQzRDExRGV2
aWNlQ29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworICAg
ICAgICBIUkVTVUxUIHJlc3VsdDsKKworICAgICAgICBpZiAoIW1SZXNvbHZlZERhdGEgfHwgbVJl
c29sdmVkRGF0YVNpemUgPCBtU3RhZ2luZ0J1ZmZlclNpemUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGZyZWUobVJlc29sdmVkRGF0YSk7CisgICAgICAgICAgICBtUmVzb2x2ZWREYXRhID0gbWFs
bG9jKG1TaXplKTsKKyAgICAgICAgICAgIG1SZXNvbHZlZERhdGFTaXplID0gbVNpemU7CisgICAg
ICAgIH0KKworICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7
CisgICAgICAgIHJlc3VsdCA9IGNvbnRleHQtPk1hcChtU3RhZ2luZ0J1ZmZlciwgMCwgRDNEMTFf
TUFQX1JFQUQsIDAsICZtYXBwZWRSZXNvdXJjZSk7CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZLCAodm9pZCopTlVMTCk7CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHkobVJlc29sdmVk
RGF0YSwgbWFwcGVkUmVzb3VyY2UucERhdGEsIG1TaXplKTsKKworICAgICAgICBjb250ZXh0LT5V
bm1hcChtU3RhZ2luZ0J1ZmZlciwgMCk7CisKKyAgICAgICAgbVJlc29sdmVkRGF0YVZhbGlkID0g
dHJ1ZTsKKyAgICB9CisKKyAgICBtUmVhZFVzYWdlQ291bnQgPSAwOworCisgICAgcmV0dXJuIG1S
ZXNvbHZlZERhdGE7Cit9CisKK3ZvaWQgQnVmZmVyU3RvcmFnZTExOjpzZXREYXRhKGNvbnN0IHZv
aWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworICAg
IElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBJRDNE
MTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7
CisgICAgSFJFU1VMVCByZXN1bHQ7CisKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgcmVxdWlyZWRT
dGFnaW5nQnVmZmVyU2l6ZSA9IHNpemUgKyBvZmZzZXQ7CisgICAgY29uc3QgYm9vbCBjcmVhdGVT
dGFnaW5nQnVmZmVyID0gIW1TdGFnaW5nQnVmZmVyIHx8IG1TdGFnaW5nQnVmZmVyU2l6ZSA8IHJl
cXVpcmVkU3RhZ2luZ0J1ZmZlclNpemU7CisKKyAgICBpZiAoY3JlYXRlU3RhZ2luZ0J1ZmZlcikK
KyAgICB7CisgICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIGJ1ZmZlckRlc2M7CisgICAgICAgIGJ1
ZmZlckRlc2MuQnl0ZVdpZHRoID0gcmVxdWlyZWRTdGFnaW5nQnVmZmVyU2l6ZTsKKyAgICAgICAg
YnVmZmVyRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX1NUQUdJTkc7CisgICAgICAgIGJ1ZmZlckRl
c2MuQmluZEZsYWdzID0gMDsKKyAgICAgICAgYnVmZmVyRGVzYy5DUFVBY2Nlc3NGbGFncyA9IEQz
RDExX0NQVV9BQ0NFU1NfUkVBRCB8IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7CisgICAgICAgIGJ1
ZmZlckRlc2MuTWlzY0ZsYWdzID0gMDsKKyAgICAgICAgYnVmZmVyRGVzYy5TdHJ1Y3R1cmVCeXRl
U3RyaWRlID0gMDsKKworICAgICAgICBIUkVTVUxUIHJlc3VsdDsKKyAgICAgICAgSUQzRDExRGV2
aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworICAgICAgICBJRDNEMTFEZXZp
Y2VDb250ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisgICAg
ICAgIElEM0QxMUJ1ZmZlciAqbmV3U3RhZ2luZ0J1ZmZlcjsKKworICAgICAgICBpZiAoZGF0YSAm
JiBvZmZzZXQgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgRDNEMTFfU1VCUkVTT1VSQ0Vf
REFUQSBpbml0aWFsRGF0YTsKKyAgICAgICAgICAgIGluaXRpYWxEYXRhLnBTeXNNZW0gPSBkYXRh
OworICAgICAgICAgICAgaW5pdGlhbERhdGEuU3lzTWVtUGl0Y2ggPSByZXF1aXJlZFN0YWdpbmdC
dWZmZXJTaXplOworICAgICAgICAgICAgaW5pdGlhbERhdGEuU3lzTWVtU2xpY2VQaXRjaCA9IDA7
CisKKyAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJEZXNj
LCAmaW5pdGlhbERhdGEsICZuZXdTdGFnaW5nQnVmZmVyKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVy
KCZidWZmZXJEZXNjLCBOVUxMLCAmbmV3U3RhZ2luZ0J1ZmZlcik7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TdGFnaW5n
QnVmZmVyU2l6ZSA9IDA7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgICAgICB9CisKKyAgICAgICAgbVN0YWdpbmdCdWZmZXJTaXplID0gcmVxdWly
ZWRTdGFnaW5nQnVmZmVyU2l6ZTsKKworICAgICAgICBpZiAobVN0YWdpbmdCdWZmZXIgJiYgb2Zm
c2V0ID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gSWYgb2Zmc2V0IGlzIGdyZWF0ZXIg
dGhhbiB6ZXJvIGFuZCB0aGUgYnVmZmVyIGlzIG5vbi1udWxsLCBuZWVkIHRvIHByZXNlcnZlIHRo
ZSBkYXRhIGZyb20KKyAgICAgICAgICAgIC8vIHRoZSBvbGQgYnVmZmVyIHVwIHRvIG9mZnNldAor
ICAgICAgICAgICAgRDNEMTFfQk9YIHNyY0JveDsKKyAgICAgICAgICAgIHNyY0JveC5sZWZ0ID0g
MDsKKyAgICAgICAgICAgIHNyY0JveC5yaWdodCA9IHN0ZDo6bWluKG9mZnNldCwgcmVxdWlyZWRT
dGFnaW5nQnVmZmVyU2l6ZSk7CisgICAgICAgICAgICBzcmNCb3gudG9wID0gMDsKKyAgICAgICAg
ICAgIHNyY0JveC5ib3R0b20gPSAxOworICAgICAgICAgICAgc3JjQm94LmZyb250ID0gMDsKKyAg
ICAgICAgICAgIHNyY0JveC5iYWNrID0gMTsKKworICAgICAgICAgICAgY29udGV4dC0+Q29weVN1
YnJlc291cmNlUmVnaW9uKG5ld1N0YWdpbmdCdWZmZXIsIDAsIDAsIDAsIDAsIG1TdGFnaW5nQnVm
ZmVyLCAwLCAmc3JjQm94KTsKKyAgICAgICAgfQorCisgICAgICAgIFNhZmVSZWxlYXNlKG1TdGFn
aW5nQnVmZmVyKTsKKyAgICAgICAgbVN0YWdpbmdCdWZmZXIgPSBuZXdTdGFnaW5nQnVmZmVyOwor
ICAgIH0KKworICAgIGlmIChkYXRhICYmIChvZmZzZXQgIT0gMCB8fCAhY3JlYXRlU3RhZ2luZ0J1
ZmZlcikpCisgICAgeworICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVz
b3VyY2U7CisgICAgICAgIHJlc3VsdCA9IGNvbnRleHQtPk1hcChtU3RhZ2luZ0J1ZmZlciwgMCwg
RDNEMTFfTUFQX1dSSVRFLCAwLCAmbWFwcGVkUmVzb3VyY2UpOworICAgICAgICBpZiAoRkFJTEVE
KHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBjaGFyICpvZmZzZXRC
dWZmZXJQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyICo+KG1hcHBlZFJl
c291cmNlLnBEYXRhKSArIG9mZnNldDsKKyAgICAgICAgbWVtY3B5KG9mZnNldEJ1ZmZlclBvaW50
ZXIsIGRhdGEsIHNpemUpOworCisgICAgICAgIGNvbnRleHQtPlVubWFwKG1TdGFnaW5nQnVmZmVy
LCAwKTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8gaXQgPSBtRGlyZWN0QnVmZmVycy5iZWdpbigp
OyBpdCAhPSBtRGlyZWN0QnVmZmVycy5lbmQoKTsgaXQrKykKKyAgICB7CisgICAgICAgIGl0LT5z
ZWNvbmQtPm1hcmtEaXJ0eSgpOworICAgIH0KKworICAgIG1TaXplID0gc3RkOjptYXgobVNpemUs
IHJlcXVpcmVkU3RhZ2luZ0J1ZmZlclNpemUpOworICAgIG1Xcml0ZVVzYWdlQ291bnQgPSAwOwor
CisgICAgbVJlc29sdmVkRGF0YVZhbGlkID0gZmFsc2U7Cit9CisKK3ZvaWQgQnVmZmVyU3RvcmFn
ZTExOjpjb3B5RGF0YShCdWZmZXJTdG9yYWdlKiBzb3VyY2VTdG9yYWdlLCB1bnNpZ25lZCBpbnQg
c2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNl
T2Zmc2V0LCB1bnNpZ25lZCBpbnQgZGVzdE9mZnNldCkKK3sKKyAgICBCdWZmZXJTdG9yYWdlMTEq
IHNvdXJjZSA9IG1ha2VCdWZmZXJTdG9yYWdlMTEoc291cmNlU3RvcmFnZSk7CisgICAgaWYgKHNv
dXJjZSkKKyAgICB7CisgICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQgPSBtUmVu
ZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKKworICAgICAgICBEM0QxMV9CT1ggc3JjQm94Owor
ICAgICAgICBzcmNCb3gubGVmdCA9IHNvdXJjZU9mZnNldDsKKyAgICAgICAgc3JjQm94LnJpZ2h0
ID0gc291cmNlT2Zmc2V0ICsgc2l6ZTsKKyAgICAgICAgc3JjQm94LnRvcCA9IDA7CisgICAgICAg
IHNyY0JveC5ib3R0b20gPSAxOworICAgICAgICBzcmNCb3guZnJvbnQgPSAwOworICAgICAgICBz
cmNCb3guYmFjayA9IDE7CisKKyAgICAgICAgQVNTRVJUKG1TdGFnaW5nQnVmZmVyICYmIHNvdXJj
ZS0+bVN0YWdpbmdCdWZmZXIpOworICAgICAgICBjb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdp
b24obVN0YWdpbmdCdWZmZXIsIDAsIGRlc3RPZmZzZXQsIDAsIDAsIHNvdXJjZS0+bVN0YWdpbmdC
dWZmZXIsIDAsICZzcmNCb3gpOworICAgIH0KK30KKwordm9pZCBCdWZmZXJTdG9yYWdlMTE6OmNs
ZWFyKCkKK3sKKyAgICBtUmVzb2x2ZWREYXRhVmFsaWQgPSBmYWxzZTsKKyAgICBtU2l6ZSA9IDA7
Cit9CisKK3Vuc2lnbmVkIGludCBCdWZmZXJTdG9yYWdlMTE6OmdldFNpemUoKSBjb25zdAorewor
ICAgIHJldHVybiBtU2l6ZTsKK30KKworYm9vbCBCdWZmZXJTdG9yYWdlMTE6OnN1cHBvcnRzRGly
ZWN0QmluZGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQnVmZmVy
U3RvcmFnZTExOjptYXJrQnVmZmVyVXNhZ2UoKQoreworICAgIG1SZWFkVXNhZ2VDb3VudCsrOwor
ICAgIG1Xcml0ZVVzYWdlQ291bnQrKzsKKworICAgIGNvbnN0IHVuc2lnbmVkIGludCB1c2FnZUxp
bWl0ID0gNTsKKworICAgIGlmIChtUmVhZFVzYWdlQ291bnQgPiB1c2FnZUxpbWl0ICYmIG1SZXNv
bHZlZERhdGEpCisgICAgeworICAgICAgICBmcmVlKG1SZXNvbHZlZERhdGEpOworICAgICAgICBt
UmVzb2x2ZWREYXRhID0gTlVMTDsKKyAgICAgICAgbVJlc29sdmVkRGF0YVNpemUgPSAwOworICAg
ICAgICBtUmVzb2x2ZWREYXRhVmFsaWQgPSBmYWxzZTsKKyAgICB9Cit9CisKK0lEM0QxMUJ1ZmZl
ciAqQnVmZmVyU3RvcmFnZTExOjpnZXRCdWZmZXIoQnVmZmVyVXNhZ2UgdXNhZ2UpCit7CisgICAg
bWFya0J1ZmZlclVzYWdlKCk7CisKKyAgICBEaXJlY3RCdWZmZXJTdG9yYWdlMTEgKmRpcmVjdEJ1
ZmZlciA9IE5VTEw7CisKKyAgICBhdXRvIGRpcmVjdEJ1ZmZlckl0ID0gbURpcmVjdEJ1ZmZlcnMu
ZmluZCh1c2FnZSk7CisgICAgaWYgKGRpcmVjdEJ1ZmZlckl0ICE9IG1EaXJlY3RCdWZmZXJzLmVu
ZCgpKQorICAgIHsKKyAgICAgICAgZGlyZWN0QnVmZmVyID0gZGlyZWN0QnVmZmVySXQtPnNlY29u
ZDsKKyAgICB9CisKKyAgICBpZiAoZGlyZWN0QnVmZmVyKQorICAgIHsKKyAgICAgICAgaWYgKGRp
cmVjdEJ1ZmZlci0+aXNEaXJ0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBpZiB1cGRh
dGVGcm9tU3RhZ2luZ0J1ZmZlciByZXR1cm5zIHRydWUsIHRoZSBEM0QgYnVmZmVyIGhhcyBiZWVu
IHJlY3JlYXRlZAorICAgICAgICAgICAgLy8gYW5kIHdlIHNob3VsZCB1cGRhdGUgb3VyIHNlcmlh
bAorICAgICAgICAgICAgaWYgKGRpcmVjdEJ1ZmZlci0+dXBkYXRlRnJvbVN0YWdpbmdCdWZmZXIo
bVN0YWdpbmdCdWZmZXIsIG1TaXplLCAwKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICB1cGRhdGVTZXJpYWwoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICAvLyBidWZmZXIgaXMgbm90IGFsbG9jYXRlZCwgY3JlYXRlIGl0
CisgICAgICAgIGRpcmVjdEJ1ZmZlciA9IG5ldyBEaXJlY3RCdWZmZXJTdG9yYWdlMTEobVJlbmRl
cmVyLCB1c2FnZSk7CisgICAgICAgIGRpcmVjdEJ1ZmZlci0+dXBkYXRlRnJvbVN0YWdpbmdCdWZm
ZXIobVN0YWdpbmdCdWZmZXIsIG1TaXplLCAwKTsKKworICAgICAgICBtRGlyZWN0QnVmZmVycy5p
bnNlcnQoc3RkOjptYWtlX3BhaXIodXNhZ2UsIGRpcmVjdEJ1ZmZlcikpOworICAgICAgICB1cGRh
dGVTZXJpYWwoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZGlyZWN0QnVmZmVyLT5nZXREM0RCdWZm
ZXIoKTsKK30KKworRGlyZWN0QnVmZmVyU3RvcmFnZTExOjpEaXJlY3RCdWZmZXJTdG9yYWdlMTEo
UmVuZGVyZXIxMSAqcmVuZGVyZXIsIEJ1ZmZlclVzYWdlIHVzYWdlKQorICAgIDogbVJlbmRlcmVy
KHJlbmRlcmVyKSwKKyAgICAgIG1Vc2FnZSh1c2FnZSksCisgICAgICBtRGlyZWN0QnVmZmVyKE5V
TEwpLAorICAgICAgbUJ1ZmZlclNpemUoMCksCisgICAgICBtRGlydHkoZmFsc2UpCit7Cit9CisK
K0RpcmVjdEJ1ZmZlclN0b3JhZ2UxMTo6fkRpcmVjdEJ1ZmZlclN0b3JhZ2UxMSgpCit7CisgICAg
U2FmZVJlbGVhc2UobURpcmVjdEJ1ZmZlcik7Cit9CisKK0J1ZmZlclVzYWdlIERpcmVjdEJ1ZmZl
clN0b3JhZ2UxMTo6Z2V0VXNhZ2UoKSBjb25zdAoreworICAgIHJldHVybiBtVXNhZ2U7Cit9CisK
Ky8vIFJldHVybnMgdHJ1ZSBpZiBpdCByZWNyZWF0ZXMgdGhlIGRpcmVjdCBidWZmZXIKK2Jvb2wg
RGlyZWN0QnVmZmVyU3RvcmFnZTExOjp1cGRhdGVGcm9tU3RhZ2luZ0J1ZmZlcihJRDNEMTFCdWZm
ZXIgKnN0YWdpbmdCdWZmZXIsIHNpemVfdCBzaXplLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIElE
M0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBJRDNEMTFE
ZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisK
KyAgICAvLyB1bnVzZWQgZm9yIG5vdworICAgIEFTU0VSVChvZmZzZXQgPT0gMCk7CisKKyAgICB1
bnNpZ25lZCBpbnQgcmVxdWlyZWRCdWZmZXJTaXplID0gc2l6ZSArIG9mZnNldDsKKyAgICBib29s
IGNyZWF0ZUJ1ZmZlciA9ICFtRGlyZWN0QnVmZmVyIHx8IG1CdWZmZXJTaXplIDwgcmVxdWlyZWRC
dWZmZXJTaXplOworCisgICAgLy8gKFJlKWluaXRpYWxpemUgRDNEIGJ1ZmZlciBpZiBuZWVkZWQK
KyAgICBpZiAoY3JlYXRlQnVmZmVyKQorICAgIHsKKyAgICAgICAgRDNEMTFfQlVGRkVSX0RFU0Mg
YnVmZmVyRGVzYzsKKyAgICAgICAgZmlsbEJ1ZmZlckRlc2MoJmJ1ZmZlckRlc2MsIG1SZW5kZXJl
ciwgbVVzYWdlLCByZXF1aXJlZEJ1ZmZlclNpemUpOworCisgICAgICAgIElEM0QxMUJ1ZmZlciAq
bmV3QnVmZmVyOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVy
KCZidWZmZXJEZXNjLCBOVUxMLCAmbmV3QnVmZmVyKTsKKworICAgICAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgLy8gTm8gbG9uZ2VyIG5lZWQg
dGhlIG9sZCBidWZmZXIKKyAgICAgICAgU2FmZVJlbGVhc2UobURpcmVjdEJ1ZmZlcik7CisgICAg
ICAgIG1EaXJlY3RCdWZmZXIgPSBuZXdCdWZmZXI7CisKKyAgICAgICAgbUJ1ZmZlclNpemUgPSBi
dWZmZXJEZXNjLkJ5dGVXaWR0aDsKKyAgICB9CisKKyAgICAvLyBDb3B5IGRhdGEgdmlhIHN0YWdp
bmcgYnVmZmVyCisgICAgRDNEMTFfQk9YIHNyY0JveDsKKyAgICBzcmNCb3gubGVmdCA9IDA7Cisg
ICAgc3JjQm94LnJpZ2h0ID0gc2l6ZTsKKyAgICBzcmNCb3gudG9wID0gMDsKKyAgICBzcmNCb3gu
Ym90dG9tID0gMTsKKyAgICBzcmNCb3guZnJvbnQgPSAwOworICAgIHNyY0JveC5iYWNrID0gMTsK
KworICAgIGNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihtRGlyZWN0QnVmZmVyLCAwLCBv
ZmZzZXQsIDAsIDAsIHN0YWdpbmdCdWZmZXIsIDAsICZzcmNCb3gpOworCisgICAgbURpcnR5ID0g
ZmFsc2U7CisKKyAgICByZXR1cm4gY3JlYXRlQnVmZmVyOworfQorCit2b2lkIERpcmVjdEJ1ZmZl
clN0b3JhZ2UxMTo6ZmlsbEJ1ZmZlckRlc2MoRDNEMTFfQlVGRkVSX0RFU0MqIGJ1ZmZlckRlc2Ms
IFJlbmRlcmVyICpyZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2UsIHVuc2lnbmVkIGludCBidWZm
ZXJTaXplKQoreworICAgIGJ1ZmZlckRlc2MtPkJ5dGVXaWR0aCA9IGJ1ZmZlclNpemU7CisgICAg
YnVmZmVyRGVzYy0+TWlzY0ZsYWdzID0gMDsKKyAgICBidWZmZXJEZXNjLT5TdHJ1Y3R1cmVCeXRl
U3RyaWRlID0gMDsKKworICAgIHN3aXRjaCAodXNhZ2UpCisgICAgeworICAgICAgY2FzZSBCVUZG
RVJfVVNBR0VfVkVSVEVYOgorICAgICAgICBidWZmZXJEZXNjLT5Vc2FnZSA9IEQzRDExX1VTQUdF
X0RFRkFVTFQ7CisgICAgICAgIGJ1ZmZlckRlc2MtPkJpbmRGbGFncyA9IEQzRDExX0JJTkRfVkVS
VEVYX0JVRkZFUjsKKyAgICAgICAgYnVmZmVyRGVzYy0+Q1BVQWNjZXNzRmxhZ3MgPSAwOworICAg
ICAgICBicmVhazsKKworICAgICAgY2FzZSBCVUZGRVJfVVNBR0VfSU5ERVg6CisgICAgICAgIGJ1
ZmZlckRlc2MtPlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKKyAgICAgICAgYnVmZmVyRGVz
Yy0+QmluZEZsYWdzID0gRDNEMTFfQklORF9JTkRFWF9CVUZGRVI7CisgICAgICAgIGJ1ZmZlckRl
c2MtPkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9CdWZmZXJTdG9y
YWdlMTEuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkMTEvQnVmZmVyU3RvcmFnZTExLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTZhZmFmZTFiNDQ3ZTc3YTFkMmE2
ZTI2NTk1ZmM3NjIyZDYwNmRiMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvQnVmZmVyU3RvcmFnZTExLmgKQEAg
LTAsMCArMSw5MiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIEJ1ZmZlclN0b3JhZ2UxMS5oIERlZmlu
ZXMgdGhlIEJ1ZmZlclN0b3JhZ2UxMSBjbGFzcy4KKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVS
RVJfQlVGRkVSU1RPUkFHRTExX0hfCisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9CVUZGRVJT
VE9SQUdFMTFfSF8KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdl
LmgiCisKK25hbWVzcGFjZSByeAoreworY2xhc3MgUmVuZGVyZXI7CitjbGFzcyBSZW5kZXJlcjEx
OworY2xhc3MgRGlyZWN0QnVmZmVyU3RvcmFnZTExOworCitlbnVtIEJ1ZmZlclVzYWdlCit7Cisg
ICAgQlVGRkVSX1VTQUdFX1ZFUlRFWCwKKyAgICBCVUZGRVJfVVNBR0VfSU5ERVgsCit9OworCitj
bGFzcyBCdWZmZXJTdG9yYWdlMTEgOiBwdWJsaWMgQnVmZmVyU3RvcmFnZQoreworICBwdWJsaWM6
CisgICAgZXhwbGljaXQgQnVmZmVyU3RvcmFnZTExKFJlbmRlcmVyMTEgKnJlbmRlcmVyKTsKKyAg
ICB2aXJ0dWFsIH5CdWZmZXJTdG9yYWdlMTEoKTsKKworICAgIHN0YXRpYyBCdWZmZXJTdG9yYWdl
MTEgKm1ha2VCdWZmZXJTdG9yYWdlMTEoQnVmZmVyU3RvcmFnZSAqYnVmZmVyU3RvcmFnZSk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgKmdldERhdGEoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShj
b25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNldCk7
CisgICAgdmlydHVhbCB2b2lkIGNvcHlEYXRhKEJ1ZmZlclN0b3JhZ2UqIHNvdXJjZVN0b3JhZ2Us
IHVuc2lnbmVkIGludCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgc291cmNlT2Zmc2V0LCB1bnNpZ25lZCBpbnQgZGVzdE9mZnNldCk7CisgICAgdmlydHVhbCB2
b2lkIGNsZWFyKCk7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2l6ZSgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0RpcmVjdEJpbmRpbmcoKSBjb25zdDsKKworICAgIElE
M0QxMUJ1ZmZlciAqZ2V0QnVmZmVyKEJ1ZmZlclVzYWdlIHVzYWdlKTsKKworICBwcml2YXRlOgor
ICAgIFJlbmRlcmVyMTEgKm1SZW5kZXJlcjsKKworICAgIElEM0QxMUJ1ZmZlciAqbVN0YWdpbmdC
dWZmZXI7CisgICAgdW5zaWduZWQgaW50IG1TdGFnaW5nQnVmZmVyU2l6ZTsKKworICAgIHN0ZDo6
bWFwPEJ1ZmZlclVzYWdlLCBEaXJlY3RCdWZmZXJTdG9yYWdlMTEqPiBtRGlyZWN0QnVmZmVyczsK
KworICAgIHVuc2lnbmVkIGludCBtU2l6ZTsKKworICAgIHZvaWQgKm1SZXNvbHZlZERhdGE7Cisg
ICAgdW5zaWduZWQgaW50IG1SZXNvbHZlZERhdGFTaXplOworICAgIGJvb2wgbVJlc29sdmVkRGF0
YVZhbGlkOworCisgICAgdW5zaWduZWQgaW50IG1SZWFkVXNhZ2VDb3VudDsKKyAgICB1bnNpZ25l
ZCBpbnQgbVdyaXRlVXNhZ2VDb3VudDsKKworICAgIHZvaWQgbWFya0J1ZmZlclVzYWdlKCk7Cit9
OworCisvLyBFYWNoIGluc3RhbmNlIG9mIEJ1ZmZlclN0b3JhZ2VEM0RCdWZmZXIxMSBpcyBzcGVj
aWFsaXplZCBmb3IgYSBjbGFzcyBvZiBEM0QgYmluZGluZyBwb2ludHMKKy8vIC0gdmVydGV4IGJ1
ZmZlcnMKKy8vIC0gaW5kZXggYnVmZmVycworY2xhc3MgRGlyZWN0QnVmZmVyU3RvcmFnZTExCit7
CisgIHB1YmxpYzoKKyAgICBEaXJlY3RCdWZmZXJTdG9yYWdlMTEoUmVuZGVyZXIxMSAqcmVuZGVy
ZXIsIEJ1ZmZlclVzYWdlIHVzYWdlKTsKKyAgICB+RGlyZWN0QnVmZmVyU3RvcmFnZTExKCk7CisK
KyAgICBCdWZmZXJVc2FnZSBnZXRVc2FnZSgpIGNvbnN0OworICAgIGJvb2wgdXBkYXRlRnJvbVN0
YWdpbmdCdWZmZXIoSUQzRDExQnVmZmVyICpzdGFnaW5nQnVmZmVyLCBzaXplX3Qgc2l6ZSwgc2l6
ZV90IG9mZnNldCk7CisKKyAgICBJRDNEMTFCdWZmZXIgKmdldEQzREJ1ZmZlcigpIHsgcmV0dXJu
IG1EaXJlY3RCdWZmZXI7IH0KKyAgICBib29sIGlzRGlydHkoKSBjb25zdCB7IHJldHVybiBtRGly
dHk7IH0KKyAgICB2b2lkIG1hcmtEaXJ0eSgpIHsgbURpcnR5ID0gdHJ1ZTsgfQorCisgIHByaXZh
dGU6CisgICAgUmVuZGVyZXIxMSAqbVJlbmRlcmVyOworICAgIGNvbnN0IEJ1ZmZlclVzYWdlIG1V
c2FnZTsKKyAgICBJRDNEMTFCdWZmZXIgKm1EaXJlY3RCdWZmZXI7CisgICAgc2l6ZV90IG1CdWZm
ZXJTaXplOworICAgIGJvb2wgbURpcnR5OworCisgICAgc3RhdGljIHZvaWQgZmlsbEJ1ZmZlckRl
c2MoRDNEMTFfQlVGRkVSX0RFU0MqIGJ1ZmZlckRlc2MsIFJlbmRlcmVyICpyZW5kZXJlciwgQnVm
ZmVyVXNhZ2UgdXNhZ2UsIHVuc2lnbmVkIGludCBidWZmZXJTaXplKTsKK307CisKK30KKworI2Vu
ZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9CVUZGRVJTVE9SQUdFMTFfSF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvRmVu
Y2UxMS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL0ZlbmNlMTEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJhN2Q0ZDQzZWYzYTdlZGU5NWZkZmZlNGE0
NGM0MjE0OWM1OWY5NjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ZlbmNlMTEuY3BwCkBAIC0wLDAgKzEsMTM0
IEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBGZW5jZTEx
LmNwcDogRGVmaW5lcyB0aGUgcng6OkZlbmNlMTEgY2xhc3Mgd2hpY2ggaW1wbGVtZW50cyByeDo6
RmVuY2VJbXBsLgorCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ZlbmNlMTEu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9SZW5kZXJlcjExLmgiCisKK25hbWVzcGFjZSByeAoreworCitGZW5jZTExOjpG
ZW5jZTExKHJ4OjpSZW5kZXJlcjExICpyZW5kZXJlcikKK3sKKyAgICBtUmVuZGVyZXIgPSByZW5k
ZXJlcjsKKyAgICBtUXVlcnkgPSBOVUxMOworfQorCitGZW5jZTExOjp+RmVuY2UxMSgpCit7Cisg
ICAgaWYgKG1RdWVyeSkKKyAgICB7CisgICAgICAgIG1RdWVyeS0+UmVsZWFzZSgpOworICAgICAg
ICBtUXVlcnkgPSBOVUxMOworICAgIH0KK30KKworR0xib29sZWFuIEZlbmNlMTE6OmlzRmVuY2Uo
KQoreworICAgIC8vIEdMX05WX2ZlbmNlIHNwZWM6CisgICAgLy8gQSBuYW1lIHJldHVybmVkIGJ5
IEdlbkZlbmNlc05WLCBidXQgbm90IHlldCBzZXQgdmlhIFNldEZlbmNlTlYsIGlzIG5vdCB0aGUg
bmFtZSBvZiBhbiBleGlzdGluZyBmZW5jZS4KKyAgICByZXR1cm4gbVF1ZXJ5ICE9IE5VTEw7Cit9
CisKK3ZvaWQgRmVuY2UxMTo6c2V0RmVuY2UoR0xlbnVtIGNvbmRpdGlvbikKK3sKKyAgICBpZiAo
IW1RdWVyeSkKKyAgICB7CisgICAgICAgIEQzRDExX1FVRVJZX0RFU0MgcXVlcnlEZXNjOworICAg
ICAgICBxdWVyeURlc2MuUXVlcnkgPSBEM0QxMV9RVUVSWV9FVkVOVDsKKyAgICAgICAgcXVlcnlE
ZXNjLk1pc2NGbGFncyA9IDA7CisKKyAgICAgICAgaWYgKEZBSUxFRChtUmVuZGVyZXItPmdldERl
dmljZSgpLT5DcmVhdGVRdWVyeSgmcXVlcnlEZXNjLCAmbVF1ZXJ5KSkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKS0+RW5kKG1RdWVyeSk7
CisKKyAgICBzZXRDb25kaXRpb24oY29uZGl0aW9uKTsKKyAgICBzZXRTdGF0dXMoR0xfRkFMU0Up
OworfQorCitHTGJvb2xlYW4gRmVuY2UxMTo6dGVzdEZlbmNlKCkKK3sKKyAgICBpZiAobVF1ZXJ5
ID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OLCBHTF9UUlVFKTsKKyAgICB9CisKKyAgICBIUkVTVUxUIHJlc3VsdCA9IG1SZW5kZXJl
ci0+Z2V0RGV2aWNlQ29udGV4dCgpLT5HZXREYXRhKG1RdWVyeSwgTlVMTCwgMCwgMCk7CisKKyAg
ICBpZiAobVJlbmRlcmVyLT5pc0RldmljZUxvc3QoKSkKKyAgICB7CisgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9UUlVFKTsKKyAgICB9CisKKyAgICBBU1NFUlQo
cmVzdWx0ID09IFNfT0sgfHwgcmVzdWx0ID09IFNfRkFMU0UpOworICAgIHNldFN0YXR1cyhyZXN1
bHQgPT0gU19PSyk7CisgICAgcmV0dXJuIGdldFN0YXR1cygpOworfQorCit2b2lkIEZlbmNlMTE6
OmZpbmlzaEZlbmNlKCkKK3sKKyAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCisgICAgeworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICB9CisKKyAgICB3
aGlsZSAoIXRlc3RGZW5jZSgpKQorICAgIHsKKyAgICAgICAgU2xlZXAoMCk7CisgICAgfQorfQor
Cit2b2lkIEZlbmNlMTE6OmdldEZlbmNlaXYoR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKQor
eworICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgIH0KKworICAgIHN3aXRjaCAocG5hbWUpCisg
ICAgeworICAgICAgY2FzZSBHTF9GRU5DRV9TVEFUVVNfTlY6CisgICAgICAgIHsKKyAgICAgICAg
ICAgIC8vIEdMX05WX2ZlbmNlIHNwZWM6CisgICAgICAgICAgICAvLyBPbmNlIHRoZSBzdGF0dXMg
b2YgYSBmZW5jZSBoYXMgYmVlbiBmaW5pc2hlZCAodmlhIEZpbmlzaEZlbmNlTlYpIG9yIHRlc3Rl
ZCBhbmQgdGhlIHJldHVybmVkIHN0YXR1cyBpcyBUUlVFICh2aWEgZWl0aGVyIFRlc3RGZW5jZU5W
CisgICAgICAgICAgICAvLyBvciBHZXRGZW5jZWl2TlYgcXVlcnlpbmcgdGhlIEZFTkNFX1NUQVRV
U19OViksIHRoZSBzdGF0dXMgcmVtYWlucyBUUlVFIHVudGlsIHRoZSBuZXh0IFNldEZlbmNlTlYg
b2YgdGhlIGZlbmNlLgorICAgICAgICAgICAgaWYgKGdldFN0YXR1cygpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9IEdMX1RSVUU7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1S
ZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpLT5HZXREYXRhKG1RdWVyeSwgTlVMTCwgMCwgRDNE
MTFfQVNZTkNfR0VUREFUQV9ET05PVEZMVVNIKTsKKworICAgICAgICAgICAgaWYgKG1SZW5kZXJl
ci0+aXNEZXZpY2VMb3N0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGFyYW1z
WzBdID0gR0xfVFJVRTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09
IFNfT0sgfHwgcmVzdWx0ID09IFNfRkFMU0UpOworICAgICAgICAgICAgc2V0U3RhdHVzKHJlc3Vs
dCA9PSBTX09LKTsKKyAgICAgICAgICAgIHBhcmFtc1swXSA9IGdldFN0YXR1cygpOworCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgY2FzZSBHTF9GRU5DRV9DT05ESVRJT05f
TlY6CisgICAgICAgIHBhcmFtc1swXSA9IGdldENvbmRpdGlvbigpOworICAgICAgICBicmVhazsK
KyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ZlbmNlMTEuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvRmVuY2Ux
MS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmE1Mzk4YmNhMTQ5MDA2NDdiMDNkZjI3YTEwMTkxZDkwNjkxOTExMTIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL0ZlbmNlMTEuaApAQCAtMCwwICsxLDM5IEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworLy8gRmVuY2UxMS5oOiBEZWZpbmVzIHRoZSByeDo6RmVuY2UxMSBjbGFzcyB3aGljaCBpbXBs
ZW1lbnRzIHJ4OjpGZW5jZUltcGwuCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0ZlbmNl
MTFfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX0ZlbmNlMTFfSF8KKworI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZUltcGwuaCIKKworbmFtZXNwYWNlIHJ4Cit7CitjbGFz
cyBSZW5kZXJlcjExOworCitjbGFzcyBGZW5jZTExIDogcHVibGljIEZlbmNlSW1wbAoreworICBw
dWJsaWM6CisgICAgZXhwbGljaXQgRmVuY2UxMShyeDo6UmVuZGVyZXIxMSAqcmVuZGVyZXIpOwor
ICAgIHZpcnR1YWwgfkZlbmNlMTEoKTsKKworICAgIEdMYm9vbGVhbiBpc0ZlbmNlKCk7CisgICAg
dm9pZCBzZXRGZW5jZShHTGVudW0gY29uZGl0aW9uKTsKKyAgICBHTGJvb2xlYW4gdGVzdEZlbmNl
KCk7CisgICAgdm9pZCBmaW5pc2hGZW5jZSgpOworICAgIHZvaWQgZ2V0RmVuY2VpdihHTGVudW0g
cG5hbWUsIEdMaW50ICpwYXJhbXMpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKEZlbmNlMTEpOworCisgICAgcng6OlJlbmRlcmVyMTEgKm1SZW5kZXJlcjsKKyAg
ICBJRDNEMTFRdWVyeSAqbVF1ZXJ5OworfTsKKworfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1JF
TkRFUkVSX0ZFTkNFMTFfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW1hZ2UxMS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ltYWdlMTEuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjJiMDdiOWQxODI4YThiMzE2Y2U4ZGViMzRhNTY0ZDM0OWNiM2I4ZGMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDExL0ltYWdlMTEuY3BwCkBAIC0wLDAgKzEsNDk1IEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQu
aCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisvLyBJbWFnZTExLmg6IEltcGxlbWVudHMgdGhlIHJ4OjpJbWFn
ZTExIGNsYXNzLCB3aGljaCBhY3RzIGFzIHRoZSBpbnRlcmZhY2UgdG8KKy8vIHRoZSBhY3R1YWwg
dW5kZXJseWluZyByZXNvdXJjZXMgb2YgYSBUZXh0dXJlCisKKyNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvUmVuZGVyZXIxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9JbWFnZTExLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1Rl
eHR1cmVTdG9yYWdlMTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIv
bWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9nZW5lcmF0ZW1pcC5oIgorCituYW1lc3BhY2UgcngKK3sKKworSW1hZ2Ux
MTo6SW1hZ2UxMSgpCit7CisgICAgbVN0YWdpbmdUZXh0dXJlID0gTlVMTDsKKyAgICBtUmVuZGVy
ZXIgPSBOVUxMOworICAgIG1EWEdJRm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5LTk9XTjsKK30KKwor
SW1hZ2UxMTo6fkltYWdlMTEoKQoreworICAgIGlmIChtU3RhZ2luZ1RleHR1cmUpCisgICAgewor
ICAgICAgICBtU3RhZ2luZ1RleHR1cmUtPlJlbGVhc2UoKTsKKyAgICB9Cit9CisKK0ltYWdlMTEg
KkltYWdlMTE6Om1ha2VJbWFnZTExKEltYWdlICppbWcpCit7CisgICAgQVNTRVJUKEhBU19EWU5B
TUlDX1RZUEUocng6OkltYWdlMTEqLCBpbWcpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8cng6
OkltYWdlMTEqPihpbWcpOworfQorCit2b2lkIEltYWdlMTE6OmdlbmVyYXRlTWlwbWFwKEltYWdl
MTEgKmRlc3QsIEltYWdlMTEgKnNyYykKK3sKKyAgICBBU1NFUlQoc3JjLT5nZXREWEdJRm9ybWF0
KCkgPT0gZGVzdC0+Z2V0RFhHSUZvcm1hdCgpKTsKKyAgICBBU1NFUlQoc3JjLT5nZXRXaWR0aCgp
ID09IDEgfHwgc3JjLT5nZXRXaWR0aCgpIC8gMiA9PSBkZXN0LT5nZXRXaWR0aCgpKTsKKyAgICBB
U1NFUlQoc3JjLT5nZXRIZWlnaHQoKSA9PSAxIHx8IHNyYy0+Z2V0SGVpZ2h0KCkgLyAyID09IGRl
c3QtPmdldEhlaWdodCgpKTsKKworICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBkZXN0TWFw
cGVkLCBzcmNNYXBwZWQ7CisgICAgZGVzdC0+bWFwKEQzRDExX01BUF9XUklURSwgJmRlc3RNYXBw
ZWQpOworICAgIHNyYy0+bWFwKEQzRDExX01BUF9SRUFELCAmc3JjTWFwcGVkKTsKKworICAgIGNv
bnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVu
c2lnbmVkIGNoYXIqPihzcmNNYXBwZWQucERhdGEpOworICAgIHVuc2lnbmVkIGNoYXIgKmRlc3RE
YXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZGVzdE1hcHBlZC5wRGF0YSk7
CisKKyAgICBpZiAoc291cmNlRGF0YSAmJiBkZXN0RGF0YSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAoc3JjLT5nZXREWEdJRm9ybWF0KCkpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIERYR0lf
Rk9STUFUX1I4RzhCOEE4X1VOT1JNOgorICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4
QThfVU5PUk06CisgICAgICAgICAgICBHZW5lcmF0ZU1pcDxSOEc4QjhBOD4oc3JjLT5nZXRXaWR0
aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRl
c3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQThfVU5PUk06CisgICAgICAgICAgICBHZW5lcmF0ZU1pcDxB
OD4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBw
ZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVU5PUk06CisgICAgICAgICAg
ICBHZW5lcmF0ZU1pcDxSOD4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3Vy
Y2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMy
QjMyQTMyX0ZMT0FUOgorICAgICAgICAgICAgR2VuZXJhdGVNaXA8QTMyQjMyRzMyUjMyRj4oc3Jj
LT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93
UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FUOgorICAgICAgICAg
ICAgR2VuZXJhdGVNaXA8UjMyRzMyQjMyRj4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdo
dCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVk
LlJvd1BpdGNoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjE2RzE2QjE2QTE2X0ZMT0FUOgorICAgICAgICAgICAgR2VuZXJhdGVNaXA8QTE2QjE2RzE2
UjE2Rj4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRhLCBzcmNN
YXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9VTk9STToKKyAgICAg
ICAgICAgIEdlbmVyYXRlTWlwPFI4Rzg+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQo
KSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5S
b3dQaXRjaCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIERYR0lfRk9STUFU
X1IxNl9GTE9BVDoKKyAgICAgICAgICAgIEdlbmVyYXRlTWlwPFIxNkY+KHNyYy0+Z2V0V2lkdGgo
KSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0
RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9GTE9BVDoKKyAgICAgICAgICAgIEdlbmVyYXRlTWlw
PFIxNkcxNkY+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwg
c3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMl9GTE9BVDoKKyAg
ICAgICAgICAgIEdlbmVyYXRlTWlwPFIzMkY+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWln
aHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBl
ZC5Sb3dQaXRjaCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIERYR0lfRk9S
TUFUX1IzMkczMl9GTE9BVDoKKyAgICAgICAgICAgIEdlbmVyYXRlTWlwPFIzMkczMkY+KHNyYy0+
Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1Bp
dGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVzdC0+dW5tYXAoKTsKKyAgICAgICAg
c3JjLT51bm1hcCgpOworICAgIH0KKworICAgIGRlc3QtPm1hcmtEaXJ0eSgpOworfQorCitzdGF0
aWMgYm9vbCBGb3JtYXRSZXF1aXJlc0luaXRpYWxpemF0aW9uKERYR0lfRk9STUFUIGR4Z2lGb3Jt
YXQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCkKK3sKKyAgICByZXR1cm4gKGR4Z2lGb3JtYXQgPT0g
RFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk0gJiYgZ2w6OkdldEFscGhhU2l6ZShpbnRlcm5hbEZv
cm1hdCkgPT0gMCkgfHwKKyAgICAgICAgICAgKGR4Z2lGb3JtYXQgPT0gRFhHSV9GT1JNQVRfUjMy
RzMyQjMyQTMyX0ZMT0FUICYmIGdsOjpHZXRBbHBoYVNpemUoaW50ZXJuYWxGb3JtYXQpID09IDAp
OworfQorCitib29sIEltYWdlMTE6OmlzRGlydHkoKSBjb25zdAoreworICAgIHJldHVybiAoKG1T
dGFnaW5nVGV4dHVyZSB8fCBGb3JtYXRSZXF1aXJlc0luaXRpYWxpemF0aW9uKG1EWEdJRm9ybWF0
LCBtSW50ZXJuYWxGb3JtYXQpKSAmJiBtRGlydHkpOworfQorCitib29sIEltYWdlMTE6OnVwZGF0
ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCkKK3sKKyAgICBUZXh0dXJlU3RvcmFnZTExXzJEICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFn
ZTExXzJEOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yRChzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFu
Y2UoKSk7CisgICAgcmV0dXJuIHN0b3JhZ2UxMS0+dXBkYXRlU3VicmVzb3VyY2VMZXZlbChnZXRT
dGFnaW5nVGV4dHVyZSgpLCBnZXRTdGFnaW5nU3VicmVzb3VyY2UoKSwgbGV2ZWwsIDAsIHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOworfQorCitib29sIEltYWdlMTE6OnVwZGF0ZVN1
cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCkKK3sKKyAgICBUZXh0dXJlU3RvcmFnZTExX0N1YmUgKnN0b3JhZ2UxMSA9IFRl
eHR1cmVTdG9yYWdlMTFfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlMTFfQ3ViZShzdG9yYWdlLT5n
ZXRTdG9yYWdlSW5zdGFuY2UoKSk7CisgICAgcmV0dXJuIHN0b3JhZ2UxMS0+dXBkYXRlU3VicmVz
b3VyY2VMZXZlbChnZXRTdGFnaW5nVGV4dHVyZSgpLCBnZXRTdGFnaW5nU3VicmVzb3VyY2UoKSwg
bGV2ZWwsIGZhY2UsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOworfQorCitib29s
IEltYWdlMTE6OnJlZGVmaW5lKFJlbmRlcmVyICpyZW5kZXJlciwgR0xpbnQgaW50ZXJuYWxmb3Jt
YXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBib29sIGZvcmNlUmVsZWFzZSkKK3sK
KyAgICBpZiAobVdpZHRoICE9IHdpZHRoIHx8CisgICAgICAgIG1IZWlnaHQgIT0gaGVpZ2h0IHx8
CisgICAgICAgIG1JbnRlcm5hbEZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCB8fAorICAgICAgICBm
b3JjZVJlbGVhc2UpCisgICAgeworICAgICAgICBtUmVuZGVyZXIgPSBSZW5kZXJlcjExOjptYWtl
UmVuZGVyZXIxMShyZW5kZXJlcik7CisKKyAgICAgICAgbVdpZHRoID0gd2lkdGg7CisgICAgICAg
IG1IZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGludGVybmFsZm9y
bWF0OworICAgICAgICAvLyBjb21wdXRlIHRoZSBkM2QgZm9ybWF0IHRoYXQgd2lsbCBiZSB1c2Vk
CisgICAgICAgIG1EWEdJRm9ybWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlRm9ybWF0KGlu
dGVybmFsZm9ybWF0KTsKKyAgICAgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDExX2dsOjpDb252ZXJ0
VGV4dHVyZUludGVybmFsRm9ybWF0KG1EWEdJRm9ybWF0KTsKKworICAgICAgICBpZiAobVN0YWdp
bmdUZXh0dXJlKQorICAgICAgICB7CisgICAgICAgICAgICBtU3RhZ2luZ1RleHR1cmUtPlJlbGVh
c2UoKTsKKyAgICAgICAgICAgIG1TdGFnaW5nVGV4dHVyZSA9IE5VTEw7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBJbWFnZTExOjppc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdAoreworICAgIHJl
dHVybiBUZXh0dXJlU3RvcmFnZTExOjpJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKG1EWEdJRm9y
bWF0KTsKK30KKworRFhHSV9GT1JNQVQgSW1hZ2UxMTo6Z2V0RFhHSUZvcm1hdCgpIGNvbnN0Cit7
CisgICAgLy8gdGhpcyBzaG91bGQgb25seSBoYXBwZW4gaWYgdGhlIGltYWdlIGhhc24ndCBiZWVu
IHJlZGVmaW5lZCBmaXJzdAorICAgIC8vIHdoaWNoIHdvdWxkIGJlIGEgYnVnIGJ5IHRoZSBjYWxs
ZXIKKyAgICBBU1NFUlQobURYR0lGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTik7CisKKyAg
ICByZXR1cm4gbURYR0lGb3JtYXQ7Cit9CisKKy8vIFN0b3JlIHRoZSBwaXhlbCByZWN0YW5nbGUg
ZGVzaWduYXRlZCBieSB4b2Zmc2V0LHlvZmZzZXQsd2lkdGgsaGVpZ2h0IHdpdGggcGl4ZWxzIHN0
b3JlZCBhcyBmb3JtYXQvdHlwZSBhdCBpbnB1dAorLy8gaW50byB0aGUgdGFyZ2V0IHBpeGVsIHJl
Y3RhbmdsZS4KK3ZvaWQgSW1hZ2UxMTo6bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAg
ICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQpCit7CisgICAgRDNE
MTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZEltYWdlOworICAgIEhSRVNVTFQgcmVzdWx0ID0g
bWFwKEQzRDExX01BUF9XUklURSwgJm1hcHBlZEltYWdlKTsKKyAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCisgICAgeworICAgICAgICBFUlIoIkNvdWxkIG5vdCBtYXAgaW1hZ2UgZm9yIGxvYWRpbmcu
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgR0xzaXplaSBpbnB1dFBpdGNo
ID0gZ2w6OkNvbXB1dGVQaXRjaCh3aWR0aCwgbUludGVybmFsRm9ybWF0LCB1bnBhY2tBbGlnbm1l
bnQpOworICAgIHNpemVfdCBwaXhlbFNpemUgPSBkM2QxMTo6Q29tcHV0ZVBpeGVsU2l6ZUJpdHMo
bURYR0lGb3JtYXQpIC8gODsKKyAgICB2b2lkKiBvZmZzZXRNYXBwZWREYXRhID0gKHZvaWQqKSgo
QllURSAqKW1hcHBlZEltYWdlLnBEYXRhICsgKHlvZmZzZXQgKiBtYXBwZWRJbWFnZS5Sb3dQaXRj
aCArIHhvZmZzZXQgKiBwaXhlbFNpemUpKTsKKworICAgIHN3aXRjaCAobUludGVybmFsRm9ybWF0
KQorICAgIHsKKyAgICAgIGNhc2UgR0xfQUxQSEE4X0VYVDoKKyAgICAgICAgbG9hZEFscGhhRGF0
YVRvTmF0aXZlKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5S
b3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0U4X0VYVDoKKyAgICAgICAgbG9hZEx1bWluYW5jZURhdGFUb05hdGl2ZU9yQkdS
QSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gs
IG9mZnNldE1hcHBlZERhdGEsIGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X0FMUEhBMzJGX0VYVDoKKyAgICAgICAgbG9hZEFscGhhRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFw
cGVkRGF0YSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UzMkZfRVhU
OgorICAgICAgICBsb2FkTHVtaW5hbmNlRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9BTFBIQTE2Rl9FWFQ6CisgICAgICAgIGxv
YWRBbHBoYUhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6CisgICAgICAgIGxvYWRMdW1pbmFu
Y2VIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBt
YXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQ6CisgICAgICAgIGxvYWRMdW1pbmFu
Y2VBbHBoYURhdGFUb05hdGl2ZU9yQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1
dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEsIGZhbHNlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQ6CisgICAgICAg
IGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBp
dGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOworICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVDoKKyAgICAg
ICAgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBp
bnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEp
OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUkdCOF9PRVM6CisgICAgICAgIGxvYWRS
R0JVQnl0ZURhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBl
ZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX1JHQjU2NToKKyAgICAgICAgbG9hZFJHQjU2NURhdGFUb1JHQkEod2lkdGgsIGhl
aWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBw
ZWREYXRhKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JHQkE4X09FUzoKKyAgICAg
ICAgbG9hZFJHQkFVQnl0ZURhdGFUb05hdGl2ZSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOworICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfUkdCQTQ6CisgICAgICAgIGxvYWRSR0JBNDQ0NERhdGFUb1JH
QkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNo
LCBvZmZzZXRNYXBwZWREYXRhKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JHQjVf
QTE6CisgICAgICAgIGxvYWRSR0JBNTU1MURhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JHUkE4X0VYVDoKKyAgICAgICAgbG9hZEJHUkFE
YXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5S
b3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9SR0IzMkZfRVhUOgorICAgICAgICBsb2FkUkdCRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWln
aHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVk
RGF0YSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9SR0IxNkZfRVhUOgorICAgICAg
ICBsb2FkUkdCSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOworICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfUkdCQTMyRl9FWFQ6CisgICAgICAgIGxvYWRSR0JBRmxvYXRE
YXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5S
b3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9SR0JBMTZGX0VYVDoKKyAgICAgICAgbG9hZFJHQkFIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRo
LCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0
TWFwcGVkRGF0YSk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsgCisgICAgfQorCisgICAgdW5tYXAoKTsKK30KKwordm9pZCBJbWFnZTExOjpsb2FkQ29tcHJl
c3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQg
KmlucHV0KQoreworICAgIEFTU0VSVCh4b2Zmc2V0ICUgNCA9PSAwKTsKKyAgICBBU1NFUlQoeW9m
ZnNldCAlIDQgPT0gMCk7CisKKyAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkSW1h
Z2U7CisgICAgSFJFU1VMVCByZXN1bHQgPSBtYXAoRDNEMTFfTUFQX1dSSVRFLCAmbWFwcGVkSW1h
Z2UpOworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEVSUigiQ291bGQg
bm90IG1hcCBpbWFnZSBmb3IgbG9hZGluZy4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIC8vIFNpemUgY29tcHV0YXRpb24gYXNzdW1lcyBhIDR4NCBibG9jayBjb21wcmVzc2VkIHRl
eHR1cmUgZm9ybWF0CisgICAgc2l6ZV90IGJsb2NrU2l6ZSA9IGQzZDExOjpDb21wdXRlQmxvY2tT
aXplQml0cyhtRFhHSUZvcm1hdCkgLyA4OworICAgIHZvaWQqIG9mZnNldE1hcHBlZERhdGEgPSAo
dm9pZCopKChCWVRFICopbWFwcGVkSW1hZ2UucERhdGEgKyAoKHlvZmZzZXQgLyA0KSAqIG1hcHBl
ZEltYWdlLlJvd1BpdGNoICsgKHhvZmZzZXQgLyA0KSAqIGJsb2NrU2l6ZSkpOworCisgICAgR0xz
aXplaSBpbnB1dFNpemUgPSBnbDo6Q29tcHV0ZUNvbXByZXNzZWRTaXplKHdpZHRoLCBoZWlnaHQs
IG1JbnRlcm5hbEZvcm1hdCk7CisgICAgR0xzaXplaSBpbnB1dFBpdGNoID0gZ2w6OkNvbXB1dGVD
b21wcmVzc2VkUGl0Y2god2lkdGgsIG1JbnRlcm5hbEZvcm1hdCk7CisgICAgaW50IHJvd3MgPSBp
bnB1dFNpemUgLyBpbnB1dFBpdGNoOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgKytp
KQorICAgIHsKKyAgICAgICAgbWVtY3B5KCh2b2lkKikoKEJZVEUqKW9mZnNldE1hcHBlZERhdGEg
KyBpICogbWFwcGVkSW1hZ2UuUm93UGl0Y2gpLCAodm9pZCopKChCWVRFKilpbnB1dCArIGkgKiBp
bnB1dFBpdGNoKSwgaW5wdXRQaXRjaCk7CisgICAgfQorCisgICAgdW5tYXAoKTsKK30KKwordm9p
ZCBJbWFnZTExOjpjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdM
aW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBnbDo6RnJhbWVidWZmZXIgKnNv
dXJjZSkKK3sKKyAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IHNvdXJjZS0+Z2V0
UmVhZENvbG9yYnVmZmVyKCk7CisKKyAgICBpZiAoY29sb3JidWZmZXIgJiYgY29sb3JidWZmZXIt
PmdldEFjdHVhbEZvcm1hdCgpID09IChHTHVpbnQpbUFjdHVhbEZvcm1hdCkKKyAgICB7CisgICAg
ICAgIC8vIE5vIGNvbnZlcnNpb24gbmVlZGVkLS0gdXNlIGNvcHliYWNrIGZhc3RwYXRoCisgICAg
ICAgIElEM0QxMVRleHR1cmUyRCAqY29sb3JCdWZmZXJUZXh0dXJlID0gTlVMTDsKKyAgICAgICAg
dW5zaWduZWQgaW50IHN1YnJlc291cmNlSW5kZXggPSAwOworCisgICAgICAgIGlmIChtUmVuZGVy
ZXItPmdldFJlbmRlclRhcmdldFJlc291cmNlKGNvbG9yYnVmZmVyLCAmc3VicmVzb3VyY2VJbmRl
eCwgJmNvbG9yQnVmZmVyVGV4dHVyZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEQzRDExX1RF
WFRVUkUyRF9ERVNDIHRleHR1cmVEZXNjOworICAgICAgICAgICAgY29sb3JCdWZmZXJUZXh0dXJl
LT5HZXREZXNjKCZ0ZXh0dXJlRGVzYyk7CisKKyAgICAgICAgICAgIElEM0QxMURldmljZSAqZGV2
aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICAgICAgICAgIElEM0QxMURldmljZUNv
bnRleHQgKmRldmljZUNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKKwor
ICAgICAgICAgICAgSUQzRDExVGV4dHVyZTJEKiBzcmNUZXggPSBOVUxMOworICAgICAgICAgICAg
aWYgKHRleHR1cmVEZXNjLlNhbXBsZURlc2MuQ291bnQgPiAxKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHJlc29sdmVEZXNjOworICAgICAgICAg
ICAgICAgIHJlc29sdmVEZXNjLldpZHRoID0gdGV4dHVyZURlc2MuV2lkdGg7CisgICAgICAgICAg
ICAgICAgcmVzb2x2ZURlc2MuSGVpZ2h0ID0gdGV4dHVyZURlc2MuSGVpZ2h0OworICAgICAgICAg
ICAgICAgIHJlc29sdmVEZXNjLk1pcExldmVscyA9IDE7CisgICAgICAgICAgICAgICAgcmVzb2x2
ZURlc2MuQXJyYXlTaXplID0gMTsKKyAgICAgICAgICAgICAgICByZXNvbHZlRGVzYy5Gb3JtYXQg
PSB0ZXh0dXJlRGVzYy5Gb3JtYXQ7CisgICAgICAgICAgICAgICAgcmVzb2x2ZURlc2MuU2FtcGxl
RGVzYy5Db3VudCA9IDE7CisgICAgICAgICAgICAgICAgcmVzb2x2ZURlc2MuU2FtcGxlRGVzYy5R
dWFsaXR5ID0gMDsKKyAgICAgICAgICAgICAgICByZXNvbHZlRGVzYy5Vc2FnZSA9IEQzRDExX1VT
QUdFX0RFRkFVTFQ7CisgICAgICAgICAgICAgICAgcmVzb2x2ZURlc2MuQmluZEZsYWdzID0gMDsK
KyAgICAgICAgICAgICAgICByZXNvbHZlRGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7CisgICAgICAg
ICAgICAgICAgcmVzb2x2ZURlc2MuTWlzY0ZsYWdzID0gMDsKKworICAgICAgICAgICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJnJlc29sdmVEZXNjLCBOVUxM
LCAmc3JjVGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBjcmVhdGUgcmVz
b2x2ZSB0ZXh0dXJlIGZvciBJbWFnZTExOjpjb3B5LCBIUkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBkZXZpY2VDb250ZXh0LT5SZXNvbHZlU3VicmVzb3VyY2Uoc3JjVGV4LCAwLCBj
b2xvckJ1ZmZlclRleHR1cmUsIHN1YnJlc291cmNlSW5kZXgsIHRleHR1cmVEZXNjLkZvcm1hdCk7
CisgICAgICAgICAgICAgICAgc3VicmVzb3VyY2VJbmRleCA9IDA7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3JjVGV4ID0g
Y29sb3JCdWZmZXJUZXh0dXJlOworICAgICAgICAgICAgICAgIHNyY1RleC0+QWRkUmVmKCk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEQzRDExX0JPWCBzcmNCb3g7CisgICAgICAgICAg
ICBzcmNCb3gubGVmdCA9IHg7CisgICAgICAgICAgICBzcmNCb3gucmlnaHQgPSB4ICsgd2lkdGg7
CisgICAgICAgICAgICBzcmNCb3gudG9wID0geTsKKyAgICAgICAgICAgIHNyY0JveC5ib3R0b20g
PSB5ICsgaGVpZ2h0OworICAgICAgICAgICAgc3JjQm94LmZyb250ID0gMDsKKyAgICAgICAgICAg
IHNyY0JveC5iYWNrID0gMTsKKworICAgICAgICAgICAgZGV2aWNlQ29udGV4dC0+Q29weVN1YnJl
c291cmNlUmVnaW9uKG1TdGFnaW5nVGV4dHVyZSwgMCwgeG9mZnNldCwgeW9mZnNldCwgMCwgc3Jj
VGV4LCBzdWJyZXNvdXJjZUluZGV4LCAmc3JjQm94KTsKKworICAgICAgICAgICAgc3JjVGV4LT5S
ZWxlYXNlKCk7CisgICAgICAgICAgICBjb2xvckJ1ZmZlclRleHR1cmUtPlJlbGVhc2UoKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBUaGlzIGZvcm1hdCBy
ZXF1aXJlcyBjb252ZXJzaW9uLCBzbyB3ZSBtdXN0IGNvcHkgdGhlIHRleHR1cmUgdG8gc3RhZ2lu
ZyBhbmQgbWFudWFsbHkgY29udmVydCB2aWEgcmVhZFBpeGVscworICAgICAgICBEM0QxMV9NQVBQ
RURfU1VCUkVTT1VSQ0UgbWFwcGVkSW1hZ2U7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbWFw
KEQzRDExX01BUF9XUklURSwgJm1hcHBlZEltYWdlKTsKKworICAgICAgICAvLyBkZXRlcm1pbmUg
dGhlIG9mZnNldCBjb29yZGluYXRlIGludG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlcgorICAgICAg
ICBHTHNpemVpIHJvd09mZnNldCA9IGdsOjpDb21wdXRlUGl4ZWxTaXplKG1BY3R1YWxGb3JtYXQp
ICogeG9mZnNldDsKKyAgICAgICAgdm9pZCAqZGF0YU9mZnNldCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihtYXBwZWRJbWFnZS5wRGF0YSkgKyBtYXBwZWRJbWFnZS5Sb3dQaXRjaCAqIHlv
ZmZzZXQgKyByb3dPZmZzZXQ7CisKKyAgICAgICAgbVJlbmRlcmVyLT5yZWFkUGl4ZWxzKHNvdXJj
ZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZ2w6OkV4dHJhY3RGb3JtYXQobUludGVybmFsRm9ybWF0
KSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RXh0cmFjdFR5cGUobUludGVy
bmFsRm9ybWF0KSwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIGZhbHNlLCA0LCBkYXRhT2Zmc2V0KTsK
KworICAgICAgICB1bm1hcCgpOworICAgIH0KK30KKworSUQzRDExVGV4dHVyZTJEICpJbWFnZTEx
OjpnZXRTdGFnaW5nVGV4dHVyZSgpCit7CisgICAgY3JlYXRlU3RhZ2luZ1RleHR1cmUoKTsKKwor
ICAgIHJldHVybiBtU3RhZ2luZ1RleHR1cmU7Cit9CisKK3Vuc2lnbmVkIGludCBJbWFnZTExOjpn
ZXRTdGFnaW5nU3VicmVzb3VyY2UoKQoreworICAgIGNyZWF0ZVN0YWdpbmdUZXh0dXJlKCk7CisK
KyAgICByZXR1cm4gbVN0YWdpbmdTdWJyZXNvdXJjZTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IFQsIHNpemVfdCBOPgorc3RhdGljIHZvaWQgc2V0RGVmYXVsdERhdGEoSUQzRDExRGV2aWNlQ29u
dGV4dCAqZGV2aWNlQ29udGV4dCwgSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCBVSU5UIHN1YnJl
c291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIGNvbnN0IFQgKCZkZWZhdWx0RGF0YSlbTl0pCit7CisgICAgRDNEMTFfTUFQUEVE
X1NVQlJFU09VUkNFIG1hcDsKKyAgICBkZXZpY2VDb250ZXh0LT5NYXAodGV4dHVyZSwgc3VicmVz
b3VyY2UsIEQzRDExX01BUF9XUklURSwgMCwgJm1hcCk7CisKKyAgICB1bnNpZ25lZCBjaGFyKiBw
dHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihtYXAucERhdGEpOworICAgIHNp
emVfdCBwaXhlbFNpemUgPSBzaXplb2YoVCkgKiBOOworCisgICAgZm9yIChHTHNpemVpIHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBmb3IgKEdMc2l6ZWkgeCA9IDA7IHgg
PCB3aWR0aDsgeCsrKQorICAgICAgICB7CisgICAgICAgICAgICBtZW1jcHkocHRyICsgKHkgKiBt
YXAuUm93UGl0Y2gpICsgKHggKiBwaXhlbFNpemUpLCBkZWZhdWx0RGF0YSwgcGl4ZWxTaXplKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGRldmljZUNvbnRleHQtPlVubWFwKHRleHR1cmUsIHN1
YnJlc291cmNlKTsKK30KKwordm9pZCBJbWFnZTExOjpjcmVhdGVTdGFnaW5nVGV4dHVyZSgpCit7
CisgICAgaWYgKG1TdGFnaW5nVGV4dHVyZSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBJRDNEMTFUZXh0dXJlMkQgKm5ld1RleHR1cmUgPSBOVUxMOworICAgIGludCBsb2RP
ZmZzZXQgPSAxOworICAgIGNvbnN0IERYR0lfRk9STUFUIGR4Z2lGb3JtYXQgPSBnZXREWEdJRm9y
bWF0KCk7CisgICAgQVNTRVJUKCFkM2QxMTo6SXNEZXB0aFN0ZW5jaWxGb3JtYXQoZHhnaUZvcm1h
dCkpOyAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgZm9yIGRlcHRoIHRleHR1cmVzCisKKyAg
ICBpZiAobVdpZHRoICE9IDAgJiYgbUhlaWdodCAhPSAwKQorICAgIHsKKyAgICAgICAgR0xzaXpl
aSB3aWR0aCA9IG1XaWR0aDsKKyAgICAgICAgR0xzaXplaSBoZWlnaHQgPSBtSGVpZ2h0OworCisg
ICAgICAgIC8vIGFkanVzdCBzaXplIGlmIG5lZWRlZCBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlcwor
ICAgICAgICBnbDo6TWFrZVZhbGlkU2l6ZShmYWxzZSwgZDNkMTE6OklzQ29tcHJlc3NlZChkeGdp
Rm9ybWF0KSwgJndpZHRoLCAmaGVpZ2h0LCAmbG9kT2Zmc2V0KTsKKyAgICAgICAgSUQzRDExRGV2
aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgIEQzRDExX1RF
WFRVUkUyRF9ERVNDIGRlc2M7CisgICAgICAgIGRlc2MuV2lkdGggPSB3aWR0aDsKKyAgICAgICAg
ZGVzYy5IZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIGRlc2MuTWlwTGV2ZWxzID0gbG9kT2Zmc2V0
ICsgMTsKKyAgICAgICAgZGVzYy5BcnJheVNpemUgPSAxOworICAgICAgICBkZXNjLkZvcm1hdCA9
IGR4Z2lGb3JtYXQ7CisgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAg
IGRlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKKyAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDEx
X1VTQUdFX1NUQUdJTkc7CisgICAgICAgIGRlc2MuQmluZEZsYWdzID0gMDsKKyAgICAgICAgZGVz
Yy5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfUkVBRCB8IEQzRDExX0NQVV9BQ0NF
U1NfV1JJVEU7CisgICAgICAgIGRlc2MuTWlzY0ZsYWdzID0gMDsKKworICAgICAgICBIUkVTVUxU
IHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXNjLCBOVUxMLCAmbmV3VGV4dHVy
ZSk7CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAg
ICBBU1NFUlQocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgRVJSKCJDcmVh
dGluZyBpbWFnZSBmYWlsZWQuIik7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgfQorCisgICAgbVN0YWdpbmdUZXh0dXJlID0g
bmV3VGV4dHVyZTsKKyAgICBtU3RhZ2luZ1N1YnJlc291cmNlID0gRDNEMTFDYWxjU3VicmVzb3Vy
Y2UobG9kT2Zmc2V0LCAwLCBsb2RPZmZzZXQgKyAxKTsKKyAgICBtRGlydHkgPSBmYWxzZTsKKwor
ICAgIGlmIChtRFhHSUZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSAmJiBnbDo6
R2V0QWxwaGFTaXplKG1JbnRlcm5hbEZvcm1hdCkgPT0gMCkKKyAgICB7CisgICAgICAgIHVuc2ln
bmVkIGNoYXIgZGVmYXVsdFBpeGVsWzRdID0geyAwLCAwLCAwLCAyNTUgfTsKKyAgICAgICAgc2V0
RGVmYXVsdERhdGEobVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCksIG1TdGFnaW5nVGV4dHVy
ZSwgbVN0YWdpbmdTdWJyZXNvdXJjZSwgbVdpZHRoLCBtSGVpZ2h0LCBkZWZhdWx0UGl4ZWwpOwor
ICAgIH0KKyAgICBlbHNlIGlmIChtRFhHSUZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJB
MzJfRkxPQVQgJiYgZ2w6OkdldEFscGhhU2l6ZShtSW50ZXJuYWxGb3JtYXQpID09IDApCisgICAg
eworICAgICAgICBmbG9hdCBkZWZhdWx0UGl4ZWxbNF0gPSB7IDAuMGYsIDAuMGYsIDAuMGYsIDEu
MGYgfTsKKyAgICAgICAgc2V0RGVmYXVsdERhdGEobVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0
KCksIG1TdGFnaW5nVGV4dHVyZSwgbVN0YWdpbmdTdWJyZXNvdXJjZSwgbVdpZHRoLCBtSGVpZ2h0
LCBkZWZhdWx0UGl4ZWwpOworICAgIH0KK30KKworSFJFU1VMVCBJbWFnZTExOjptYXAoRDNEMTFf
TUFQIG1hcFR5cGUsIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSAqbWFwKQoreworICAgIGNyZWF0
ZVN0YWdpbmdUZXh0dXJlKCk7CisKKyAgICBIUkVTVUxUIHJlc3VsdCA9IEVfRkFJTDsKKworICAg
IGlmIChtU3RhZ2luZ1RleHR1cmUpCisgICAgeworICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0
ICpkZXZpY2VDb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisgICAgICAg
IHJlc3VsdCA9IGRldmljZUNvbnRleHQtPk1hcChtU3RhZ2luZ1RleHR1cmUsIG1TdGFnaW5nU3Vi
cmVzb3VyY2UsIG1hcFR5cGUsIDAsIG1hcCk7CisKKyAgICAgICAgLy8gdGhpcyBjYW4gZmFpbCBp
ZiB0aGUgZGV2aWNlIGlzIHJlbW92ZWQgKGZyb20gVERSKQorICAgICAgICBpZiAoZDNkMTE6Omlz
RGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1SZW5kZXJl
ci0+bm90aWZ5RGV2aWNlTG9zdCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKFNVQ0NF
RURFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBtRGlydHkgPSB0cnVlOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBJbWFnZTExOjp1
bm1hcCgpCit7CisgICAgaWYgKG1TdGFnaW5nVGV4dHVyZSkKKyAgICB7CisgICAgICAgIElEM0Qx
MURldmljZUNvbnRleHQgKmRldmljZUNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRl
eHQoKTsKKyAgICAgICAgZGV2aWNlQ29udGV4dC0+VW5tYXAobVN0YWdpbmdUZXh0dXJlLCBtU3Rh
Z2luZ1N1YnJlc291cmNlKTsKKyAgICB9Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW1hZ2UxMS5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbWFnZTEx
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMTFhNjQ5MmRjODYzYTkxNjQxOWI1YmNkMTY0Y2E3ZDdiYjVkOTVkYgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvSW1hZ2UxMS5oCkBAIC0wLDAgKzEsNzYgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisvLyBJbWFnZTExLmg6IERlZmluZXMgdGhlIHJ4OjpJbWFnZTExIGNsYXNzLCB3aGljaCBhY3Rz
IGFzIHRoZSBpbnRlcmZhY2UgdG8KKy8vIHRoZSBhY3R1YWwgdW5kZXJseWluZyByZXNvdXJjZXMg
b2YgYSBUZXh0dXJlCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0lNQUdFMTFfSF8KKyNk
ZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX0lNQUdFMTFfSF8KKworI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9JbWFnZS5oIgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKK25hbWVz
cGFjZSBnbAoreworY2xhc3MgRnJhbWVidWZmZXI7Cit9CisKK25hbWVzcGFjZSByeAoreworY2xh
c3MgUmVuZGVyZXI7CitjbGFzcyBSZW5kZXJlcjExOworY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UyRDsKK2NsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTsKKworY2xhc3MgSW1h
Z2UxMSA6IHB1YmxpYyBJbWFnZQoreworICBwdWJsaWM6CisgICAgSW1hZ2UxMSgpOworICAgIHZp
cnR1YWwgfkltYWdlMTEoKTsKKworICAgIHN0YXRpYyBJbWFnZTExICptYWtlSW1hZ2UxMShJbWFn
ZSAqaW1nKTsKKworICAgIHN0YXRpYyB2b2lkIGdlbmVyYXRlTWlwbWFwKEltYWdlMTEgKmRlc3Qs
IEltYWdlMTEgKnNyYyk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNEaXJ0eSgpIGNvbnN0OworCisg
ICAgdmlydHVhbCBib29sIHVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAq
c3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAgdmlydHVhbCBib29sIHVwZGF0ZVN1cmZhY2Uo
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgcmVkZWZpbmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBH
TGludCBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGJvb2wg
Zm9yY2VSZWxlYXNlKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlcmFibGVGb3JtYXQoKSBj
b25zdDsKKyAgICBEWEdJX0ZPUk1BVCBnZXREWEdJRm9ybWF0KCkgY29uc3Q7CisgICAgCisgICAg
dmlydHVhbCB2b2lkIGxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNr
QWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCk7CisgICAgdmlydHVhbCB2b2lkIGxvYWRDb21w
cmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHZvaWQgKmlucHV0KTsKKworICAgIHZpcnR1YWwgdm9pZCBjb3B5KEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSk7CisKKyAgcHJvdGVjdGVkOgorICAgIEhSRVNV
TFQgbWFwKEQzRDExX01BUCBtYXBUeXBlLCBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgKm1hcCk7
CisgICAgdm9pZCB1bm1hcCgpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRf
QVNTSUdOKEltYWdlMTEpOworCisgICAgSUQzRDExVGV4dHVyZTJEICpnZXRTdGFnaW5nVGV4dHVy
ZSgpOworICAgIHVuc2lnbmVkIGludCBnZXRTdGFnaW5nU3VicmVzb3VyY2UoKTsKKyAgICB2b2lk
IGNyZWF0ZVN0YWdpbmdUZXh0dXJlKCk7CisKKyAgICBSZW5kZXJlcjExICptUmVuZGVyZXI7CisK
KyAgICBEWEdJX0ZPUk1BVCBtRFhHSUZvcm1hdDsKKyAgICBJRDNEMTFUZXh0dXJlMkQgKm1TdGFn
aW5nVGV4dHVyZTsKKyAgICB1bnNpZ25lZCBpbnQgbVN0YWdpbmdTdWJyZXNvdXJjZTsKK307CisK
K30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9JTUFHRTExX0hfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0lu
ZGV4QnVmZmVyMTEuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9JbmRleEJ1ZmZlcjExLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NGY5OTc2ZDQzZDFk
YjRjYTQwMDJkNDc1YjlmNjE1NDRiZmMzMjA3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbmRleEJ1ZmZlcjEx
LmNwcApAQCAtMCwwICsxLDE4MyBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworLy8gSW5kZXhCdWZmZXIxMS5jcHA6IERlZmluZXMgdGhlIEQzRDExIEluZGV4QnVm
ZmVyIGltcGxlbWVudGF0aW9uLgorCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L0luZGV4QnVmZmVyMTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVu
ZGVyZXIxMS5oIgorCituYW1lc3BhY2UgcngKK3sKKworSW5kZXhCdWZmZXIxMTo6SW5kZXhCdWZm
ZXIxMShSZW5kZXJlcjExICpjb25zdCByZW5kZXJlcikgOiBtUmVuZGVyZXIocmVuZGVyZXIpCit7
CisgICAgbUJ1ZmZlciA9IE5VTEw7CisgICAgbUJ1ZmZlclNpemUgPSAwOworICAgIG1EeW5hbWlj
VXNhZ2UgPSBmYWxzZTsKK30KKworSW5kZXhCdWZmZXIxMTo6fkluZGV4QnVmZmVyMTEoKQorewor
ICAgIGlmIChtQnVmZmVyKQorICAgIHsKKyAgICAgICAgbUJ1ZmZlci0+UmVsZWFzZSgpOworICAg
ICAgICBtQnVmZmVyID0gTlVMTDsKKyAgICB9Cit9CisKK2Jvb2wgSW5kZXhCdWZmZXIxMTo6aW5p
dGlhbGl6ZSh1bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSwgR0xlbnVtIGluZGV4VHlwZSwgYm9vbCBk
eW5hbWljKQoreworICAgIGlmIChtQnVmZmVyKQorICAgIHsKKyAgICAgICAgbUJ1ZmZlci0+UmVs
ZWFzZSgpOworICAgICAgICBtQnVmZmVyID0gTlVMTDsKKyAgICB9CisKKyAgICB1cGRhdGVTZXJp
YWwoKTsKKworICAgIGlmIChidWZmZXJTaXplID4gMCkKKyAgICB7CisgICAgICAgIElEM0QxMURl
dmljZSogZHhEZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgIEQzRDEx
X0JVRkZFUl9ERVNDIGJ1ZmZlckRlc2M7CisgICAgICAgIGJ1ZmZlckRlc2MuQnl0ZVdpZHRoID0g
YnVmZmVyU2l6ZTsKKyAgICAgICAgYnVmZmVyRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZTkFN
SUM7CisgICAgICAgIGJ1ZmZlckRlc2MuQmluZEZsYWdzID0gRDNEMTFfQklORF9JTkRFWF9CVUZG
RVI7CisgICAgICAgIGJ1ZmZlckRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUNDRVNT
X1dSSVRFOworICAgICAgICBidWZmZXJEZXNjLk1pc2NGbGFncyA9IDA7CisgICAgICAgIGJ1ZmZl
ckRlc2MuU3RydWN0dXJlQnl0ZVN0cmlkZSA9IDA7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQg
PSBkeERldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJEZXNjLCBOVUxMLCAmbUJ1ZmZlcik7Cisg
ICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgbUJ1ZmZlclNpemUgPSBidWZmZXJTaXpl
OworICAgIG1JbmRleFR5cGUgPSBpbmRleFR5cGU7CisgICAgbUR5bmFtaWNVc2FnZSA9IGR5bmFt
aWM7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworSW5kZXhCdWZmZXIxMSAqSW5kZXhCdWZmZXIx
MTo6bWFrZUluZGV4QnVmZmVyMTEoSW5kZXhCdWZmZXIgKmluZGV4QnVmZmVyKQoreworICAgIEFT
U0VSVChIQVNfRFlOQU1JQ19UWVBFKEluZGV4QnVmZmVyMTEqLCBpbmRleEJ1ZmZlcikpOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxJbmRleEJ1ZmZlcjExKj4oaW5kZXhCdWZmZXIpOworfQorCiti
b29sIEluZGV4QnVmZmVyMTE6Om1hcEJ1ZmZlcih1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25l
ZCBpbnQgc2l6ZSwgdm9pZCoqIG91dE1hcHBlZE1lbW9yeSkKK3sKKyAgICBpZiAobUJ1ZmZlcikK
KyAgICB7CisgICAgICAgIC8vIENoZWNrIGZvciBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgb3V0LW91
dC1ib3VuZHMgbWFwIHJlcXVlc3RzCisgICAgICAgIGlmIChvZmZzZXQgKyBzaXplIDwgb2Zmc2V0
IHx8IG9mZnNldCArIHNpemUgPiBtQnVmZmVyU2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
RVJSKCJJbmRleCBidWZmZXIgbWFwIHJhbmdlIGlzIG5vdCBpbnNpZGUgdGhlIGJ1ZmZlci4iKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIElEM0QxMURl
dmljZUNvbnRleHQgKmR4Q29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwor
CisgICAgICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJjZTsKKyAgICAg
ICAgSFJFU1VMVCByZXN1bHQgPSBkeENvbnRleHQtPk1hcChtQnVmZmVyLCAwLCBEM0QxMV9NQVBf
V1JJVEVfTk9fT1ZFUldSSVRFLCAwLCAmbWFwcGVkUmVzb3VyY2UpOworICAgICAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiSW5kZXggYnVmZmVyIG1h
cCBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgiLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgKm91dE1hcHBlZE1lbW9yeSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KG1hcHBlZFJlc291cmNlLnBEYXRhKSArIG9mZnNldDsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEVSUigiSW5kZXgg
YnVmZmVyIG5vdCBpbml0aWFsaXplZC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworYm9vbCBJbmRleEJ1ZmZlcjExOjp1bm1hcEJ1ZmZlcigpCit7CisgICAgaWYgKG1CdWZm
ZXIpCisgICAgeworICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpkeENvbnRleHQgPSBtUmVu
ZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKKyAgICAgICAgZHhDb250ZXh0LT5Vbm1hcChtQnVm
ZmVyLCAwKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIEVSUigiSW5kZXggYnVmZmVyIG5vdCBpbml0aWFsaXplZC4iKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KK30KKworR0xlbnVtIEluZGV4QnVmZmVyMTE6OmdldEluZGV4VHlw
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1JbmRleFR5cGU7Cit9CisKK3Vuc2lnbmVkIGludCBJ
bmRleEJ1ZmZlcjExOjpnZXRCdWZmZXJTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUJ1ZmZl
clNpemU7Cit9CisKK2Jvb2wgSW5kZXhCdWZmZXIxMTo6c2V0U2l6ZSh1bnNpZ25lZCBpbnQgYnVm
ZmVyU2l6ZSwgR0xlbnVtIGluZGV4VHlwZSkKK3sKKyAgICBpZiAoYnVmZmVyU2l6ZSA+IG1CdWZm
ZXJTaXplIHx8IGluZGV4VHlwZSAhPSBtSW5kZXhUeXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGluaXRpYWxpemUoYnVmZmVyU2l6ZSwgaW5kZXhUeXBlLCBtRHluYW1pY1VzYWdlKTsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQorCitib29s
IEluZGV4QnVmZmVyMTE6OmRpc2NhcmQoKQoreworICAgIGlmIChtQnVmZmVyKQorICAgIHsKKyAg
ICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqZHhDb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZp
Y2VDb250ZXh0KCk7CisKKyAgICAgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJl
c291cmNlOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGR4Q29udGV4dC0+TWFwKG1CdWZmZXIs
IDAsIEQzRDExX01BUF9XUklURV9ESVNDQVJELCAwLCAmbWFwcGVkUmVzb3VyY2UpOworICAgICAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiSW5kZXgg
YnVmZmVyIG1hcCBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgiLCByZXN1bHQpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgZHhDb250ZXh0LT5Vbm1hcCht
QnVmZmVyLCAwKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgRVJSKCJJbmRleCBidWZmZXIgbm90IGluaXRpYWxpemVkLiIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitEWEdJX0ZPUk1BVCBJbmRleEJ1ZmZlcjExOjpn
ZXRJbmRleEZvcm1hdCgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtSW5kZXhUeXBlKQorICAgIHsK
KyAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURTogICAgcmV0dXJuIERYR0lfRk9STUFUX1IxNl9V
SU5UOworICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDogICByZXR1cm4gRFhHSV9GT1JNQVRf
UjE2X1VJTlQ7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDogICAgIHJldHVybiBEWEdJX0ZP
Uk1BVF9SMzJfVUlOVDsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgcmV0dXJuIERY
R0lfRk9STUFUX1VOS05PV047CisgICAgfQorfQorCitJRDNEMTFCdWZmZXIgKkluZGV4QnVmZmVy
MTE6OmdldEJ1ZmZlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1CdWZmZXI7Cit9CisKK30KXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0luZGV4QnVmZmVyMTEuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5kZXhCdWZm
ZXIxMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjM5YTYxOTQ2YWQ2ZWY4OTJjNGNhNjZiNjA3ZTY1OWEzNWNjMDlk
ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL0luZGV4QnVmZmVyMTEuaApAQCAtMCwwICsxLDUzIEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworLy8gSW5kZXhCdWZmZXIxMS5oOiBEZWZpbmVzIHRoZSBEM0QxMSBJbmRleEJ1
ZmZlciBpbXBsZW1lbnRhdGlvbi4KKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfSU5ERVhC
VUZGRVIxMV9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfSU5ERVhCVUZGRVIxMV9IXwor
CisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0luZGV4QnVmZmVyLmgiCisKK25hbWVzcGFj
ZSByeAoreworY2xhc3MgUmVuZGVyZXIxMTsKKworY2xhc3MgSW5kZXhCdWZmZXIxMSA6IHB1Ymxp
YyBJbmRleEJ1ZmZlcgoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgSW5kZXhCdWZmZXIxMShS
ZW5kZXJlcjExICpjb25zdCByZW5kZXJlcik7CisgICAgdmlydHVhbCB+SW5kZXhCdWZmZXIxMSgp
OworCisgICAgdmlydHVhbCBib29sIGluaXRpYWxpemUodW5zaWduZWQgaW50IGJ1ZmZlclNpemUs
IEdMZW51bSBpbmRleFR5cGUsIGJvb2wgZHluYW1pYyk7CisKKyAgICBzdGF0aWMgSW5kZXhCdWZm
ZXIxMSAqbWFrZUluZGV4QnVmZmVyMTEoSW5kZXhCdWZmZXIgKmluZGV4QnVmZmVyKTsKKworICAg
IHZpcnR1YWwgYm9vbCBtYXBCdWZmZXIodW5zaWduZWQgaW50IG9mZnNldCwgdW5zaWduZWQgaW50
IHNpemUsIHZvaWQqKiBvdXRNYXBwZWRNZW1vcnkpOworICAgIHZpcnR1YWwgYm9vbCB1bm1hcEJ1
ZmZlcigpOworCisgICAgdmlydHVhbCBHTGVudW0gZ2V0SW5kZXhUeXBlKCkgY29uc3Q7CisgICAg
dmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0QnVmZmVyU2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwg
Ym9vbCBzZXRTaXplKHVuc2lnbmVkIGludCBidWZmZXJTaXplLCBHTGVudW0gaW5kZXhUeXBlKTsK
KworICAgIHZpcnR1YWwgYm9vbCBkaXNjYXJkKCk7CisKKyAgICBEWEdJX0ZPUk1BVCBnZXRJbmRl
eEZvcm1hdCgpIGNvbnN0OworICAgIElEM0QxMUJ1ZmZlciAqZ2V0QnVmZmVyKCkgY29uc3Q7CisK
KyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oSW5kZXhCdWZmZXIxMSk7
CisKKyAgICByeDo6UmVuZGVyZXIxMSAqY29uc3QgbVJlbmRlcmVyOworCisgICAgSUQzRDExQnVm
ZmVyICptQnVmZmVyOworICAgIHVuc2lnbmVkIGludCBtQnVmZmVyU2l6ZTsKKyAgICBHTGVudW0g
bUluZGV4VHlwZTsKKyAgICBib29sIG1EeW5hbWljVXNhZ2U7Cit9OworCit9CisKKyNlbmRpZiAv
LyBMSUJHTEVTVjJfUkVOREVSRVJfSU5ERVhCVUZGRVIxMV9IXwpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkMTEvSW5wdXRMYXlvdXRDYWNoZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjM0MThlODk0MmM4ODVkYjdjZjIyZjE2NjcxZThiYWViMzBhMGUyNTkKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuY3BwCkBAIC0wLDAgKzEsMjEzIEBACisjaW5j
bHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBJbnB1dExheW91dENhY2hl
LmNwcDogRGVmaW5lcyBJbnB1dExheW91dENhY2hlLCBhIGNsYXNzIHRoYXQgYnVpbGRzIGFuZCBj
YWNoZXMKKy8vIEQzRDExIGlucHV0IGxheW91dHMuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvSW5wdXRMYXlvdXRDYWNoZS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9WZXJ0ZXhCdWZmZXIxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9CdWZmZXJTdG9yYWdlMTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
ZDNkMTEvU2hhZGVyRXhlY3V0YWJsZTExLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1C
aW5hcnkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9WZXJ0ZXhEYXRhTWFuYWdlci5oIgorCisjaW5jbHVkZSAidGhpcmRfcGFy
dHkvbXVybXVyaGFzaC9NdXJtdXJIYXNoMy5oIgorCituYW1lc3BhY2UgcngKK3sKKworY29uc3Qg
dW5zaWduZWQgaW50IElucHV0TGF5b3V0Q2FjaGU6OmtNYXhJbnB1dExheW91dHMgPSAxMDI0Owor
CitJbnB1dExheW91dENhY2hlOjpJbnB1dExheW91dENhY2hlKCkgOiBtSW5wdXRMYXlvdXRNYXAo
a01heElucHV0TGF5b3V0cywgaGFzaElucHV0TGF5b3V0LCBjb21wYXJlSW5wdXRMYXlvdXRzKQor
eworICAgIG1Db3VudGVyID0gMDsKKyAgICBtRGV2aWNlID0gTlVMTDsKKyAgICBtRGV2aWNlQ29u
dGV4dCA9IE5VTEw7CisgICAgbUN1cnJlbnRJTCA9IE5VTEw7CisgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgeworICAgICAg
ICBtQ3VycmVudEJ1ZmZlcnNbaV0gPSAtMTsKKyAgICAgICAgbUN1cnJlbnRWZXJ0ZXhTdHJpZGVz
W2ldID0gLTE7CisgICAgICAgIG1DdXJyZW50VmVydGV4T2Zmc2V0c1tpXSA9IC0xOworICAgIH0K
K30KKworSW5wdXRMYXlvdXRDYWNoZTo6fklucHV0TGF5b3V0Q2FjaGUoKQoreworICAgIGNsZWFy
KCk7Cit9CisKK3ZvaWQgSW5wdXRMYXlvdXRDYWNoZTo6aW5pdGlhbGl6ZShJRDNEMTFEZXZpY2Ug
KmRldmljZSwgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCkKK3sKKyAgICBjbGVhcigpOwor
ICAgIG1EZXZpY2UgPSBkZXZpY2U7CisgICAgbURldmljZUNvbnRleHQgPSBjb250ZXh0OworfQor
Cit2b2lkIElucHV0TGF5b3V0Q2FjaGU6OmNsZWFyKCkKK3sKKyAgICBmb3IgKElucHV0TGF5b3V0
TWFwOjppdGVyYXRvciBpID0gbUlucHV0TGF5b3V0TWFwLmJlZ2luKCk7IGkgIT0gbUlucHV0TGF5
b3V0TWFwLmVuZCgpOyBpKyspCisgICAgeworICAgICAgICBpLT5zZWNvbmQuaW5wdXRMYXlvdXQt
PlJlbGVhc2UoKTsKKyAgICB9CisgICAgbUlucHV0TGF5b3V0TWFwLmNsZWFyKCk7CisgICAgbWFy
a0RpcnR5KCk7Cit9CisKK3ZvaWQgSW5wdXRMYXlvdXRDYWNoZTo6bWFya0RpcnR5KCkKK3sKKyAg
ICBtQ3VycmVudElMID0gTlVMTDsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGds
OjpNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKKyAgICB7CisgICAgICAgIG1DdXJyZW50QnVmZmVy
c1tpXSA9IC0xOworICAgICAgICBtQ3VycmVudFZlcnRleFN0cmlkZXNbaV0gPSAtMTsKKyAgICAg
ICAgbUN1cnJlbnRWZXJ0ZXhPZmZzZXRzW2ldID0gLTE7CisgICAgfQorfQorCitHTGVudW0gSW5w
dXRMYXlvdXRDYWNoZTo6YXBwbHlWZXJ0ZXhCdWZmZXJzKFRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0
cmlidXRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpCit7
CisgICAgaW50IHNvcnRlZFNlbWFudGljSW5kaWNlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsK
KyAgICBwcm9ncmFtQmluYXJ5LT5zb3J0QXR0cmlidXRlc0J5TGF5b3V0KGF0dHJpYnV0ZXMsIHNv
cnRlZFNlbWFudGljSW5kaWNlcyk7CisKKyAgICBpZiAoIW1EZXZpY2UgfHwgIW1EZXZpY2VDb250
ZXh0KQorICAgIHsKKyAgICAgICAgRVJSKCJJbnB1dExheW91dENhY2hlIGlzIG5vdCBpbml0aWFs
aXplZC4iKTsKKyAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOworICAgIH0KKwor
ICAgIElucHV0TGF5b3V0S2V5IGlsS2V5ID0geyAwIH07CisKKyAgICBJRDNEMTFCdWZmZXIgKnZl
cnRleEJ1ZmZlcnNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10gPSB7IE5VTEwgfTsKKyAgICB1bnNp
Z25lZCBpbnQgdmVydGV4QnVmZmVyU2VyaWFsc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSA9IHsg
MCB9OworICAgIFVJTlQgdmVydGV4U3RyaWRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSA9IHsg
MCB9OworICAgIFVJTlQgdmVydGV4T2Zmc2V0c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSA9IHsg
MCB9OworCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHNlbWFudGljTmFtZSA9ICJURVhDT09SRCI7
CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJ
QlM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmFjdGl2ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgVmVydGV4QnVmZmVyMTEgKnZlcnRleEJ1ZmZlciA9IFZlcnRleEJ1
ZmZlcjExOjptYWtlVmVydGV4QnVmZmVyMTEoYXR0cmlidXRlc1tpXS52ZXJ0ZXhCdWZmZXIpOwor
ICAgICAgICAgICAgQnVmZmVyU3RvcmFnZTExICpidWZmZXJTdG9yYWdlID0gYXR0cmlidXRlc1tp
XS5zdG9yYWdlID8gQnVmZmVyU3RvcmFnZTExOjptYWtlQnVmZmVyU3RvcmFnZTExKGF0dHJpYnV0
ZXNbaV0uc3RvcmFnZSkgOiBOVUxMOworCisgICAgICAgICAgICBEM0QxMV9JTlBVVF9DTEFTU0lG
SUNBVElPTiBpbnB1dENsYXNzID0gYXR0cmlidXRlc1tpXS5kaXZpc29yID4gMCA/IEQzRDExX0lO
UFVUX1BFUl9JTlNUQU5DRV9EQVRBIDogRDNEMTFfSU5QVVRfUEVSX1ZFUlRFWF9EQVRBOworCisg
ICAgICAgICAgICAvLyBSZWNvcmQgdGhlIHR5cGUgb2YgdGhlIGFzc29jaWF0ZWQgdmVydGV4IHNo
YWRlciB2ZWN0b3IgaW4gb3VyIGtleQorICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHByZXZlbnQg
bWlzbWF0Y2hlZCB2ZXJ0ZXggc2hhZGVycyBmcm9tIHVzaW5nIHRoZSBzYW1lIGlucHV0IGxheW91
dAorICAgICAgICAgICAgR0xpbnQgYXR0cmlidXRlU2l6ZTsKKyAgICAgICAgICAgIHByb2dyYW1C
aW5hcnktPmdldEFjdGl2ZUF0dHJpYnV0ZShpbEtleS5lbGVtZW50Q291bnQsIDAsIE5VTEwsICZh
dHRyaWJ1dGVTaXplLCAmaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5nbHNsRWxl
bWVudFR5cGUsIE5VTEwpOworCisgICAgICAgICAgICBpbEtleS5lbGVtZW50c1tpbEtleS5lbGVt
ZW50Q291bnRdLmRlc2MuU2VtYW50aWNOYW1lID0gc2VtYW50aWNOYW1lOworICAgICAgICAgICAg
aWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5kZXNjLlNlbWFudGljSW5kZXggPSBz
b3J0ZWRTZW1hbnRpY0luZGljZXNbaV07CisgICAgICAgICAgICBpbEtleS5lbGVtZW50c1tpbEtl
eS5lbGVtZW50Q291bnRdLmRlc2MuRm9ybWF0ID0gYXR0cmlidXRlc1tpXS5hdHRyaWJ1dGUtPm1B
cnJheUVuYWJsZWQgPyB2ZXJ0ZXhCdWZmZXItPmdldERYR0lGb3JtYXQoKmF0dHJpYnV0ZXNbaV0u
YXR0cmlidXRlKSA6IERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDsKKyAgICAgICAgICAg
IGlsS2V5LmVsZW1lbnRzW2lsS2V5LmVsZW1lbnRDb3VudF0uZGVzYy5JbnB1dFNsb3QgPSBpOwor
ICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5kZXNjLkFsaWdu
ZWRCeXRlT2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIGlsS2V5LmVsZW1lbnRzW2lsS2V5LmVsZW1l
bnRDb3VudF0uZGVzYy5JbnB1dFNsb3RDbGFzcyA9IGlucHV0Q2xhc3M7CisgICAgICAgICAgICBp
bEtleS5lbGVtZW50c1tpbEtleS5lbGVtZW50Q291bnRdLmRlc2MuSW5zdGFuY2VEYXRhU3RlcFJh
dGUgPSBhdHRyaWJ1dGVzW2ldLmRpdmlzb3I7CisgICAgICAgICAgICBpbEtleS5lbGVtZW50Q291
bnQrKzsKKworICAgICAgICAgICAgdmVydGV4QnVmZmVyc1tpXSA9IGJ1ZmZlclN0b3JhZ2UgPyBi
dWZmZXJTdG9yYWdlLT5nZXRCdWZmZXIoQlVGRkVSX1VTQUdFX1ZFUlRFWCkgOiB2ZXJ0ZXhCdWZm
ZXItPmdldEJ1ZmZlcigpOworICAgICAgICAgICAgdmVydGV4QnVmZmVyU2VyaWFsc1tpXSA9IGJ1
ZmZlclN0b3JhZ2UgPyBidWZmZXJTdG9yYWdlLT5nZXRTZXJpYWwoKSA6IHZlcnRleEJ1ZmZlci0+
Z2V0U2VyaWFsKCk7CisgICAgICAgICAgICB2ZXJ0ZXhTdHJpZGVzW2ldID0gYXR0cmlidXRlc1tp
XS5zdHJpZGU7CisgICAgICAgICAgICB2ZXJ0ZXhPZmZzZXRzW2ldID0gYXR0cmlidXRlc1tpXS5v
ZmZzZXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBJRDNEMTFJbnB1dExheW91dCAqaW5wdXRM
YXlvdXQgPSBOVUxMOworCisgICAgSW5wdXRMYXlvdXRNYXA6Oml0ZXJhdG9yIGkgPSBtSW5wdXRM
YXlvdXRNYXAuZmluZChpbEtleSk7CisgICAgaWYgKGkgIT0gbUlucHV0TGF5b3V0TWFwLmVuZCgp
KQorICAgIHsKKyAgICAgICAgaW5wdXRMYXlvdXQgPSBpLT5zZWNvbmQuaW5wdXRMYXlvdXQ7Cisg
ICAgICAgIGktPnNlY29uZC5sYXN0VXNlZFRpbWUgPSBtQ291bnRlcisrOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBTaGFkZXJFeGVjdXRhYmxlMTEgKnNoYWRlciA9IFNoYWRlckV4
ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0
ZXhFeGVjdXRhYmxlKCkpOworCisgICAgICAgIEQzRDExX0lOUFVUX0VMRU1FTlRfREVTQyBkZXNj
c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9
IDA7IGogPCBpbEtleS5lbGVtZW50Q291bnQ7ICsraikKKyAgICAgICAgeworICAgICAgICAgICAg
ZGVzY3Nbal0gPSBpbEtleS5lbGVtZW50c1tqXS5kZXNjOworICAgICAgICB9CisKKyAgICAgICAg
SFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVJbnB1dExheW91dChkZXNjcywgaWxLZXku
ZWxlbWVudENvdW50LCBzaGFkZXItPmdldEZ1bmN0aW9uKCksIHNoYWRlci0+Z2V0TGVuZ3RoKCks
ICZpbnB1dExheW91dCk7CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgewor
ICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gY3JhdGUgaW5wdXQgbGF5b3V0LCByZXN1bHQ6IDB4
JTA4eCIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047
CisgICAgICAgIH0KKworICAgICAgICBpZiAobUlucHV0TGF5b3V0TWFwLnNpemUoKSA+PSBrTWF4
SW5wdXRMYXlvdXRzKQorICAgICAgICB7CisgICAgICAgICAgICBUUkFDRSgiT3ZlcmZsb3dlZCB0
aGUgbGltaXQgb2YgJXUgaW5wdXQgbGF5b3V0cywgcmVtb3ZpbmcgdGhlIGxlYXN0IHJlY2VudGx5
IHVzZWQgIgorICAgICAgICAgICAgICAgICAgInRvIG1ha2Ugcm9vbS4iLCBrTWF4SW5wdXRMYXlv
dXRzKTsKKworICAgICAgICAgICAgSW5wdXRMYXlvdXRNYXA6Oml0ZXJhdG9yIGxlYXN0UmVjZW50
bHlVc2VkID0gbUlucHV0TGF5b3V0TWFwLmJlZ2luKCk7CisgICAgICAgICAgICBmb3IgKElucHV0
TGF5b3V0TWFwOjppdGVyYXRvciBpID0gbUlucHV0TGF5b3V0TWFwLmJlZ2luKCk7IGkgIT0gbUlu
cHV0TGF5b3V0TWFwLmVuZCgpOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aWYgKGktPnNlY29uZC5sYXN0VXNlZFRpbWUgPCBsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmxh
c3RVc2VkVGltZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGxlYXN0
UmVjZW50bHlVc2VkID0gaTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmlucHV0TGF5b3V0LT5SZWxlYXNlKCk7
CisgICAgICAgICAgICBtSW5wdXRMYXlvdXRNYXAuZXJhc2UobGVhc3RSZWNlbnRseVVzZWQpOwor
ICAgICAgICB9CisKKyAgICAgICAgSW5wdXRMYXlvdXRDb3VudGVyUGFpciBpbnB1dENvdW50ZXJQ
YWlyOworICAgICAgICBpbnB1dENvdW50ZXJQYWlyLmlucHV0TGF5b3V0ID0gaW5wdXRMYXlvdXQ7
CisgICAgICAgIGlucHV0Q291bnRlclBhaXIubGFzdFVzZWRUaW1lID0gbUNvdW50ZXIrKzsKKwor
ICAgICAgICBtSW5wdXRMYXlvdXRNYXAuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGlsS2V5LCBpbnB1
dENvdW50ZXJQYWlyKSk7CisgICAgfQorCisgICAgaWYgKGlucHV0TGF5b3V0ICE9IG1DdXJyZW50
SUwpCisgICAgeworICAgICAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRJbnB1dExheW91dChpbnB1
dExheW91dCk7CisgICAgICAgIG1DdXJyZW50SUwgPSBpbnB1dExheW91dDsKKyAgICB9CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGkr
KykKKyAgICB7CisgICAgICAgIGlmICh2ZXJ0ZXhCdWZmZXJTZXJpYWxzW2ldICE9IG1DdXJyZW50
QnVmZmVyc1tpXSB8fCB2ZXJ0ZXhTdHJpZGVzW2ldICE9IG1DdXJyZW50VmVydGV4U3RyaWRlc1tp
XSB8fAorICAgICAgICAgICAgdmVydGV4T2Zmc2V0c1tpXSAhPSBtQ3VycmVudFZlcnRleE9mZnNl
dHNbaV0pCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldFZlcnRl
eEJ1ZmZlcnMoaSwgMSwgJnZlcnRleEJ1ZmZlcnNbaV0sICZ2ZXJ0ZXhTdHJpZGVzW2ldLCAmdmVy
dGV4T2Zmc2V0c1tpXSk7CisgICAgICAgICAgICBtQ3VycmVudEJ1ZmZlcnNbaV0gPSB2ZXJ0ZXhC
dWZmZXJTZXJpYWxzW2ldOworICAgICAgICAgICAgbUN1cnJlbnRWZXJ0ZXhTdHJpZGVzW2ldID0g
dmVydGV4U3RyaWRlc1tpXTsKKyAgICAgICAgICAgIG1DdXJyZW50VmVydGV4T2Zmc2V0c1tpXSA9
IHZlcnRleE9mZnNldHNbaV07CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gR0xfTk9f
RVJST1I7Cit9CisKK3N0ZDo6c2l6ZV90IElucHV0TGF5b3V0Q2FjaGU6Omhhc2hJbnB1dExheW91
dChjb25zdCBJbnB1dExheW91dEtleSAmaW5wdXRMYXlvdXQpCit7CisgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGludCBzZWVkID0gMHhERUFEQkVFRjsKKworICAgIHN0ZDo6c2l6ZV90IGhhc2gg
PSAwOworICAgIE11cm11ckhhc2gzX3g4Nl8zMihpbnB1dExheW91dC5iZWdpbigpLCBpbnB1dExh
eW91dC5lbmQoKSAtIGlucHV0TGF5b3V0LmJlZ2luKCksIHNlZWQsICZoYXNoKTsKKyAgICByZXR1
cm4gaGFzaDsKK30KKworYm9vbCBJbnB1dExheW91dENhY2hlOjpjb21wYXJlSW5wdXRMYXlvdXRz
KGNvbnN0IElucHV0TGF5b3V0S2V5ICZhLCBjb25zdCBJbnB1dExheW91dEtleSAmYikKK3sKKyAg
ICBpZiAoYS5lbGVtZW50Q291bnQgIT0gYi5lbGVtZW50Q291bnQpCisgICAgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHN0ZDo6ZXF1YWwoYS5iZWdpbigpLCBh
LmVuZCgpLCBiLmJlZ2luKCkpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5w
dXRMYXlvdXRDYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiMWE4ZWViY2Y3YTZjYTk5MGNhYjkzODI1NThm
MzM5NzgxNDdhMDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuaApAQCAtMCwwICsx
LDk1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gSW5wdXRMYXlvdXRDYWNoZS5oOiBEZWZpbmVzIElu
cHV0TGF5b3V0Q2FjaGUsIGEgY2xhc3MgdGhhdCBidWlsZHMgYW5kIGNhY2hlcworLy8gRDNEMTEg
aW5wdXQgbGF5b3V0cy4KKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfSU5QVVRMQVlPVVRD
QUNIRV9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfSU5QVVRMQVlPVVRDQUNIRV9IXwor
CisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnN0YW50cy5oIgorI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCisKK25hbWVzcGFjZSBnbAoreworY2xhc3MgUHJvZ3JhbUJpbmFyeTsKK30KKwor
bmFtZXNwYWNlIHJ4Cit7CitzdHJ1Y3QgVHJhbnNsYXRlZEF0dHJpYnV0ZTsKKworY2xhc3MgSW5w
dXRMYXlvdXRDYWNoZQoreworICBwdWJsaWM6CisgICAgSW5wdXRMYXlvdXRDYWNoZSgpOworICAg
IHZpcnR1YWwgfklucHV0TGF5b3V0Q2FjaGUoKTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZShJRDNE
MTFEZXZpY2UgKmRldmljZSwgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCk7CisgICAgdm9p
ZCBjbGVhcigpOworICAgIHZvaWQgbWFya0RpcnR5KCk7CisKKyAgICBHTGVudW0gYXBwbHlWZXJ0
ZXhCdWZmZXJzKFRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0cmlidXRlc1tnbDo6TUFYX1ZFUlRFWF9B
VFRSSUJTXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5
ICpwcm9ncmFtQmluYXJ5KTsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihJbnB1dExheW91dENhY2hlKTsKKworICAgIHN0cnVjdCBJbnB1dExheW91dEVsZW1lbnQK
KyAgICB7CisgICAgICAgIEQzRDExX0lOUFVUX0VMRU1FTlRfREVTQyBkZXNjOworICAgICAgICBH
TGVudW0gZ2xzbEVsZW1lbnRUeXBlOworICAgIH07CisKKyAgICBzdHJ1Y3QgSW5wdXRMYXlvdXRL
ZXkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBlbGVtZW50Q291bnQ7CisgICAgICAgIElu
cHV0TGF5b3V0RWxlbWVudCBlbGVtZW50c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKworICAg
ICAgICBjb25zdCBjaGFyICpiZWdpbigpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigmZWxlbWVudENvdW50KTsKKyAgICAg
ICAgfQorCisgICAgICAgIGNvbnN0IGNoYXIgKmVuZCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigmZWxlbWVudHNbZWxl
bWVudENvdW50XSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgc3RydWN0IElucHV0TGF5b3V0
Q291bnRlclBhaXIKKyAgICB7CisgICAgICAgIElEM0QxMUlucHV0TGF5b3V0ICppbnB1dExheW91
dDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGxhc3RVc2VkVGltZTsKKyAgICB9OworCisg
ICAgSUQzRDExSW5wdXRMYXlvdXQgKm1DdXJyZW50SUw7CisgICAgdW5zaWduZWQgaW50IG1DdXJy
ZW50QnVmZmVyc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICBVSU5UIG1DdXJyZW50VmVy
dGV4U3RyaWRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICBVSU5UIG1DdXJyZW50VmVy
dGV4T2Zmc2V0c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKworICAgIHN0YXRpYyBzdGQ6OnNp
emVfdCBoYXNoSW5wdXRMYXlvdXQoY29uc3QgSW5wdXRMYXlvdXRLZXkgJmlucHV0TGF5b3V0KTsK
KyAgICBzdGF0aWMgYm9vbCBjb21wYXJlSW5wdXRMYXlvdXRzKGNvbnN0IElucHV0TGF5b3V0S2V5
ICZhLCBjb25zdCBJbnB1dExheW91dEtleSAmYik7CisKKyAgICB0eXBlZGVmIHN0ZDo6c2l6ZV90
ICgqSW5wdXRMYXlvdXRIYXNoRnVuY3Rpb24pKGNvbnN0IElucHV0TGF5b3V0S2V5ICYpOworICAg
IHR5cGVkZWYgYm9vbCAoKklucHV0TGF5b3V0RXF1YWxpdHlGdW5jdGlvbikoY29uc3QgSW5wdXRM
YXlvdXRLZXkgJiwgY29uc3QgSW5wdXRMYXlvdXRLZXkgJik7CisgICAgdHlwZWRlZiBzdGQ6OnVu
b3JkZXJlZF9tYXA8SW5wdXRMYXlvdXRLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSW5wdXRMYXlvdXRDb3VudGVyUGFpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJbnB1dExheW91dEhhc2hGdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJbnB1dExheW91dEVxdWFsaXR5RnVuY3Rpb24+IElucHV0TGF5b3V0TWFwOworICAgIElucHV0
TGF5b3V0TWFwIG1JbnB1dExheW91dE1hcDsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBp
bnQga01heElucHV0TGF5b3V0czsKKworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBtQ291bnRlcjsK
KworICAgIElEM0QxMURldmljZSAqbURldmljZTsKKyAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpt
RGV2aWNlQ29udGV4dDsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9J
TlBVVExBWU9VVENBQ0hFX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1F1ZXJ5MTEuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9RdWVyeTExLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4yNGMwMzMwYTFlMmMyYTQ3OTE0YzM3OWZjNzM1OTE5MTU3NDJhMjMxCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9RdWVyeTExLmNwcApAQCAtMCwwICsxLDEyMiBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVk
LmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworLy8gUXVlcnkxMS5jcHA6IERlZmluZXMgdGhlIHJ4OjpRdWVy
eTExIGNsYXNzIHdoaWNoIGltcGxlbWVudHMgcng6OlF1ZXJ5SW1wbC4KKworI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9RdWVyeTExLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgor
CituYW1lc3BhY2UgcngKK3sKKworUXVlcnkxMTo6UXVlcnkxMShyeDo6UmVuZGVyZXIxMSAqcmVu
ZGVyZXIsIEdMZW51bSB0eXBlKSA6IFF1ZXJ5SW1wbCh0eXBlKQoreworICAgIG1SZW5kZXJlciA9
IHJlbmRlcmVyOworICAgIG1RdWVyeSA9IE5VTEw7Cit9CisKK1F1ZXJ5MTE6On5RdWVyeTExKCkK
K3sKKyAgICBpZiAobVF1ZXJ5KQorICAgIHsKKyAgICAgICAgbVF1ZXJ5LT5SZWxlYXNlKCk7Cisg
ICAgICAgIG1RdWVyeSA9IE5VTEw7CisgICAgfQorfQorCit2b2lkIFF1ZXJ5MTE6OmJlZ2luKCkK
K3sKKyAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCisgICAgeworICAgICAgICBEM0QxMV9RVUVSWV9E
RVNDIHF1ZXJ5RGVzYzsKKyAgICAgICAgcXVlcnlEZXNjLlF1ZXJ5ID0gRDNEMTFfUVVFUllfT0ND
TFVTSU9OOworICAgICAgICBxdWVyeURlc2MuTWlzY0ZsYWdzID0gMDsKKworICAgICAgICBpZiAo
RkFJTEVEKG1SZW5kZXJlci0+Z2V0RGV2aWNlKCktPkNyZWF0ZVF1ZXJ5KCZxdWVyeURlc2MsICZt
UXVlcnkpKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1SZW5kZXJlci0+Z2V0RGV2aWNl
Q29udGV4dCgpLT5CZWdpbihtUXVlcnkpOworfQorCit2b2lkIFF1ZXJ5MTE6OmVuZCgpCit7Cisg
ICAgaWYgKG1RdWVyeSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgfQorCisgICAgbVJlbmRlcmVyLT5nZXREZXZpY2VD
b250ZXh0KCktPkVuZChtUXVlcnkpOworCisgICAgbVN0YXR1cyA9IEdMX0ZBTFNFOworICAgIG1S
ZXN1bHQgPSBHTF9GQUxTRTsKK30KKworR0x1aW50IFF1ZXJ5MTE6OmdldFJlc3VsdCgpCit7Cisg
ICAgaWYgKG1RdWVyeSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgd2hpbGUgKCF0ZXN0UXVlcnko
KSkKKyAgICAgICAgeworICAgICAgICAgICAgU2xlZXAoMCk7CisgICAgICAgICAgICAvLyBleHBs
aWNpdGx5IGNoZWNrIGZvciBkZXZpY2UgbG9zcywgc29tZSBkcml2ZXJzIHNlZW0gdG8gcmV0dXJu
IFNfRkFMU0UKKyAgICAgICAgICAgIC8vIGlmIHRoZSBkZXZpY2UgaXMgbG9zdAorICAgICAgICAg
ICAgaWYgKG1SZW5kZXJlci0+dGVzdERldmljZUxvc3QodHJ1ZSkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAwKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBtUmVzdWx0OworfQor
CitHTGJvb2xlYW4gUXVlcnkxMTo6aXNSZXN1bHRBdmFpbGFibGUoKQoreworICAgIGlmIChtUXVl
cnkgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIHRlc3RRdWVyeSgpOworICAgIH0KKworICAgIHJl
dHVybiBtU3RhdHVzOworfQorCitHTGJvb2xlYW4gUXVlcnkxMTo6dGVzdFF1ZXJ5KCkKK3sKKyAg
ICBpZiAobVF1ZXJ5ICE9IE5VTEwgJiYgbVN0YXR1cyAhPSBHTF9UUlVFKQorICAgIHsKKyAgICAg
ICAgVUlOVDY0IG51bVBpeGVscyA9IDA7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVJlbmRl
cmVyLT5nZXREZXZpY2VDb250ZXh0KCktPkdldERhdGEobVF1ZXJ5LCAmbnVtUGl4ZWxzLCBzaXpl
b2YoVUlOVDY0KSwgMCk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gU19PSykKKyAgICAgICAgewor
ICAgICAgICAgICAgbVN0YXR1cyA9IEdMX1RSVUU7CisKKyAgICAgICAgICAgIHN3aXRjaCAoZ2V0
VHlwZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVT
X1BBU1NFRF9FWFQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NP
TlNFUlZBVElWRV9FWFQ6CisgICAgICAgICAgICAgICAgbVJlc3VsdCA9IChudW1QaXhlbHMgPiAw
KSA/IEdMX1RSVUUgOiBHTF9GQUxTRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG1SZW5kZXJlci0+dGVzdERldmljZUxv
c3QodHJ1ZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSwgR0xfVFJVRSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbVN0YXR1
czsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfVFJVRTsgLy8gcHJldmVudCBibG9ja2luZyB3aGVu
IHF1ZXJ5IGlzIG51bGwKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9RdWVyeTExLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1F1ZXJ5MTEuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wYTAzZGU3N2NhMzI4NTVkYmNkMTliMTNiYzQ0ZDk3ODM3OTRhNjc1Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9RdWVyeTExLmgKQEAgLTAsMCArMSw0MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAx
MyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFF1ZXJ5
MTEuaDogRGVmaW5lcyB0aGUgcng6OlF1ZXJ5MTEgY2xhc3Mgd2hpY2ggaW1wbGVtZW50cyByeDo6
UXVlcnlJbXBsLgorCisjaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9RVUVSWTExX0hfCisjZGVm
aW5lIExJQkdMRVNWMl9SRU5ERVJFUl9RVUVSWTExX0hfCisKKyNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvUXVlcnlJbXBsLmgiCisKK25hbWVzcGFjZSByeAoreworY2xhc3MgUmVuZGVyZXIx
MTsKKworY2xhc3MgUXVlcnkxMSA6IHB1YmxpYyBRdWVyeUltcGwKK3sKKyAgcHVibGljOgorICAg
IFF1ZXJ5MTEocng6OlJlbmRlcmVyMTEgKnJlbmRlcmVyLCBHTGVudW0gdHlwZSk7CisgICAgdmly
dHVhbCB+UXVlcnkxMSgpOworCisgICAgdm9pZCBiZWdpbigpOworICAgIHZvaWQgZW5kKCk7Cisg
ICAgR0x1aW50IGdldFJlc3VsdCgpOworICAgIEdMYm9vbGVhbiBpc1Jlc3VsdEF2YWlsYWJsZSgp
OworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFF1ZXJ5MTEpOwor
CisgICAgR0xib29sZWFuIHRlc3RRdWVyeSgpOworCisgICAgcng6OlJlbmRlcmVyMTEgKm1SZW5k
ZXJlcjsKKyAgICBJRDNEMTFRdWVyeSAqbVF1ZXJ5OworfTsKKworfQorCisjZW5kaWYgLy8gTElC
R0xFU1YyX1JFTkRFUkVSX1FVRVJZMTFfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyU3RhdGVDYWNoZS5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1Jl
bmRlclN0YXRlQ2FjaGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAwNDdlMDRlODE4MGFmOWYxYzJjMzE0MGE3
YjAzMmIzMmVhMjUwMDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclN0YXRlQ2FjaGUuY3BwCkBAIC0w
LDAgKzEsNDM4IEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKy8vIFJlbmRlclN0YXRlQ2FjaGUuY3BwOiBEZWZpbmVzIHJ4OjpSZW5kZXJTdGF0ZUNhY2hl
LCBhIGNhY2hlIG9mIERpcmVjdDNEIHJlbmRlcgorLy8gc3RhdGUgb2JqZWN0cy4KKworI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaCIKKworI2luY2x1
ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJi
dWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiY29t
bW9uL2RlYnVnLmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJtdXJIYXNo
My5oIgorCituYW1lc3BhY2UgcngKK3sKKworLy8gTVNETidzIGRvY3VtZW50YXRpb24gb2YgSUQz
RDExRGV2aWNlOjpDcmVhdGVCbGVuZFN0YXRlLCBJRDNEMTFEZXZpY2U6OkNyZWF0ZVJhc3Rlcml6
ZXJTdGF0ZSwKKy8vIElEM0QxMURldmljZTo6Q3JlYXRlRGVwdGhTdGVuY2lsU3RhdGUgYW5kIElE
M0QxMURldmljZTo6Q3JlYXRlU2FtcGxlclN0YXRlIGNsYWltcyB0aGUgbWF4aW11bQorLy8gbnVt
YmVyIG9mIHVuaXF1ZSBzdGF0ZXMgb2YgZWFjaCB0eXBlIGFuIGFwcGxpY2F0aW9uIGNhbiBjcmVh
dGUgaXMgNDA5NgorY29uc3QgdW5zaWduZWQgaW50IFJlbmRlclN0YXRlQ2FjaGU6OmtNYXhCbGVu
ZFN0YXRlcyA9IDQwOTY7Citjb25zdCB1bnNpZ25lZCBpbnQgUmVuZGVyU3RhdGVDYWNoZTo6a01h
eFJhc3Rlcml6ZXJTdGF0ZXMgPSA0MDk2OworY29uc3QgdW5zaWduZWQgaW50IFJlbmRlclN0YXRl
Q2FjaGU6OmtNYXhEZXB0aFN0ZW5jaWxTdGF0ZXMgPSA0MDk2OworY29uc3QgdW5zaWduZWQgaW50
IFJlbmRlclN0YXRlQ2FjaGU6OmtNYXhTYW1wbGVyU3RhdGVzID0gNDA5NjsKKworUmVuZGVyU3Rh
dGVDYWNoZTo6UmVuZGVyU3RhdGVDYWNoZSgpIDogbURldmljZShOVUxMKSwgbUNvdW50ZXIoMCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQmxlbmRTdGF0ZUNhY2hl
KGtNYXhCbGVuZFN0YXRlcywgaGFzaEJsZW5kU3RhdGUsIGNvbXBhcmVCbGVuZFN0YXRlcyksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUmFzdGVyaXplclN0YXRlQ2Fj
aGUoa01heFJhc3Rlcml6ZXJTdGF0ZXMsIGhhc2hSYXN0ZXJpemVyU3RhdGUsIGNvbXBhcmVSYXN0
ZXJpemVyU3RhdGVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1E
ZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlKGtNYXhEZXB0aFN0ZW5jaWxTdGF0ZXMsIGhhc2hEZXB0aFN0
ZW5jaWxTdGF0ZSwgY29tcGFyZURlcHRoU3RlbmNpbFN0YXRlcyksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtU2FtcGxlclN0YXRlQ2FjaGUoa01heFNhbXBsZXJTdGF0
ZXMsIGhhc2hTYW1wbGVyU3RhdGUsIGNvbXBhcmVTYW1wbGVyU3RhdGVzKQoreworfQorCitSZW5k
ZXJTdGF0ZUNhY2hlOjp+UmVuZGVyU3RhdGVDYWNoZSgpCit7CisgICAgY2xlYXIoKTsKK30KKwor
dm9pZCBSZW5kZXJTdGF0ZUNhY2hlOjppbml0aWFsaXplKElEM0QxMURldmljZSAqZGV2aWNlKQor
eworICAgIGNsZWFyKCk7CisgICAgbURldmljZSA9IGRldmljZTsKK30KKwordm9pZCBSZW5kZXJT
dGF0ZUNhY2hlOjpjbGVhcigpCit7CisgICAgZm9yIChCbGVuZFN0YXRlTWFwOjppdGVyYXRvciBp
ID0gbUJsZW5kU3RhdGVDYWNoZS5iZWdpbigpOyBpICE9IG1CbGVuZFN0YXRlQ2FjaGUuZW5kKCk7
IGkrKykKKyAgICB7CisgICAgICAgIGktPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOworICAgIH0K
KyAgICBtQmxlbmRTdGF0ZUNhY2hlLmNsZWFyKCk7CisKKyAgICBmb3IgKFJhc3Rlcml6ZXJTdGF0
ZU1hcDo6aXRlcmF0b3IgaSA9IG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5iZWdpbigpOyBpICE9IG1S
YXN0ZXJpemVyU3RhdGVDYWNoZS5lbmQoKTsgaSsrKQorICAgIHsKKyAgICAgICAgaS0+c2Vjb25k
LmZpcnN0LT5SZWxlYXNlKCk7CisgICAgfQorICAgIG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5jbGVh
cigpOworCisgICAgZm9yIChEZXB0aFN0ZW5jaWxTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1EZXB0
aFN0ZW5jaWxTdGF0ZUNhY2hlLmJlZ2luKCk7IGkgIT0gbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUu
ZW5kKCk7IGkrKykKKyAgICB7CisgICAgICAgIGktPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOwor
ICAgIH0KKyAgICBtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5jbGVhcigpOworCisgICAgZm9yIChT
YW1wbGVyU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtU2FtcGxlclN0YXRlQ2FjaGUuYmVnaW4oKTsg
aSAhPSBtU2FtcGxlclN0YXRlQ2FjaGUuZW5kKCk7IGkrKykKKyAgICB7CisgICAgICAgIGktPnNl
Y29uZC5maXJzdC0+UmVsZWFzZSgpOworICAgIH0KKyAgICBtU2FtcGxlclN0YXRlQ2FjaGUuY2xl
YXIoKTsKK30KKworc3RkOjpzaXplX3QgUmVuZGVyU3RhdGVDYWNoZTo6aGFzaEJsZW5kU3RhdGUo
Y29uc3QgQmxlbmRTdGF0ZUtleSAmYmxlbmRTdGF0ZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgaW50IHNlZWQgPSAweEFCQ0RFRjk4OworCisgICAgc3RkOjpzaXplX3QgaGFzaCA9IDA7
CisgICAgTXVybXVySGFzaDNfeDg2XzMyKCZibGVuZFN0YXRlLCBzaXplb2YoQmxlbmRTdGF0ZUtl
eSksIHNlZWQsICZoYXNoKTsKKyAgICByZXR1cm4gaGFzaDsKK30KKworYm9vbCBSZW5kZXJTdGF0
ZUNhY2hlOjpjb21wYXJlQmxlbmRTdGF0ZXMoY29uc3QgQmxlbmRTdGF0ZUtleSAmYSwgY29uc3Qg
QmxlbmRTdGF0ZUtleSAmYikKK3sKKyAgICByZXR1cm4gbWVtY21wKCZhLCAmYiwgc2l6ZW9mKGds
OjpCbGVuZFN0YXRlKSkgPT0gMDsKK30KKworSUQzRDExQmxlbmRTdGF0ZSAqUmVuZGVyU3RhdGVD
YWNoZTo6Z2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBn
bDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSkKK3sKKyAgICBpZiAoIW1EZXZpY2UpCisgICAgewor
ICAgICAgICBFUlIoIlJlbmRlclN0YXRlQ2FjaGUgaXMgbm90IGluaXRpYWxpemVkLiIpOworICAg
ICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBib29sIG1ydCA9IGZhbHNlOworCisgICAg
QmxlbmRTdGF0ZUtleSBrZXkgPSB7IDAgfTsKKyAgICBrZXkuYmxlbmRTdGF0ZSA9IGJsZW5kU3Rh
dGU7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBEM0QxMV9TSU1VTFRBTkVPVVNf
UkVOREVSX1RBUkdFVF9DT1VOVDsgaSsrKQorICAgIHsKKyAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZl
ciAqcmVuZGVyQnVmZmVyID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKGkpOworICAgICAg
ICBpZiAocmVuZGVyQnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaSA+IDApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbXJ0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgR0xlbnVtIGludGVybmFsRm9ybWF0ID0gcmVuZGVyQnVmZmVyLT5nZXRJ
bnRlcm5hbEZvcm1hdCgpOworICAgICAgICAgICAga2V5LnJ0Q2hhbm5lbHNbaV1bMF0gPSBnbDo6
R2V0UmVkU2l6ZShpbnRlcm5hbEZvcm1hdCkgPiAwOworICAgICAgICAgICAga2V5LnJ0Q2hhbm5l
bHNbaV1bMV0gPSBnbDo6R2V0R3JlZW5TaXplKGludGVybmFsRm9ybWF0KSA+IDA7CisgICAgICAg
ICAgICBrZXkucnRDaGFubmVsc1tpXVsyXSA9IGdsOjpHZXRCbHVlU2l6ZShpbnRlcm5hbEZvcm1h
dCkgPiAwOzsKKyAgICAgICAgICAgIGtleS5ydENoYW5uZWxzW2ldWzNdID0gZ2w6OkdldEFscGhh
U2l6ZShpbnRlcm5hbEZvcm1hdCkgPiAwOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAga2V5LnJ0Q2hhbm5lbHNbaV1bMF0gPSBmYWxzZTsKKyAgICAgICAg
ICAgIGtleS5ydENoYW5uZWxzW2ldWzFdID0gZmFsc2U7CisgICAgICAgICAgICBrZXkucnRDaGFu
bmVsc1tpXVsyXSA9IGZhbHNlOworICAgICAgICAgICAga2V5LnJ0Q2hhbm5lbHNbaV1bM10gPSBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEJsZW5kU3RhdGVNYXA6Oml0ZXJhdG9yIGkg
PSBtQmxlbmRTdGF0ZUNhY2hlLmZpbmQoa2V5KTsKKyAgICBpZiAoaSAhPSBtQmxlbmRTdGF0ZUNh
Y2hlLmVuZCgpKQorICAgIHsKKyAgICAgICAgQmxlbmRTdGF0ZUNvdW50ZXJQYWlyICZzdGF0ZSA9
IGktPnNlY29uZDsKKyAgICAgICAgc3RhdGUuc2Vjb25kID0gbUNvdW50ZXIrKzsKKyAgICAgICAg
cmV0dXJuIHN0YXRlLmZpcnN0OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAo
bUJsZW5kU3RhdGVDYWNoZS5zaXplKCkgPj0ga01heEJsZW5kU3RhdGVzKQorICAgICAgICB7Cisg
ICAgICAgICAgICBUUkFDRSgiT3ZlcmZsb3dlZCB0aGUgbGltaXQgb2YgJXUgYmxlbmQgc3RhdGVz
LCByZW1vdmluZyB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCAiCisgICAgICAgICAgICAgICAgICAi
dG8gbWFrZSByb29tLiIsIGtNYXhCbGVuZFN0YXRlcyk7CisKKyAgICAgICAgICAgIEJsZW5kU3Rh
dGVNYXA6Oml0ZXJhdG9yIGxlYXN0UmVjZW50bHlVc2VkID0gbUJsZW5kU3RhdGVDYWNoZS5iZWdp
bigpOworICAgICAgICAgICAgZm9yIChCbGVuZFN0YXRlTWFwOjppdGVyYXRvciBpID0gbUJsZW5k
U3RhdGVDYWNoZS5iZWdpbigpOyBpICE9IG1CbGVuZFN0YXRlQ2FjaGUuZW5kKCk7IGkrKykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaS0+c2Vjb25kLnNlY29uZCA8IGxlYXN0
UmVjZW50bHlVc2VkLT5zZWNvbmQuc2Vjb25kKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQgPSBpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuZmlyc3Qt
PlJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1CbGVuZFN0YXRlQ2FjaGUuZXJhc2UobGVhc3RSZWNl
bnRseVVzZWQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IGJsZW5kIHN0
YXRlIGFuZCBpbnNlcnQgaXQgaW50byB0aGUgY2FjaGUKKyAgICAgICAgRDNEMTFfQkxFTkRfREVT
QyBibGVuZERlc2MgPSB7IDAgfTsKKyAgICAgICAgYmxlbmREZXNjLkFscGhhVG9Db3ZlcmFnZUVu
YWJsZSA9IGJsZW5kU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlOworICAgICAgICBibGVuZERl
c2MuSW5kZXBlbmRlbnRCbGVuZEVuYWJsZSA9IG1ydCA/IFRSVUUgOiBGQUxTRTsKKworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEQzRDExX1NJTVVMVEFORU9VU19SRU5ERVJf
VEFSR0VUX0NPVU5UOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIEQzRDExX1JFTkRFUl9U
QVJHRVRfQkxFTkRfREVTQyAmcnRCbGVuZCA9IGJsZW5kRGVzYy5SZW5kZXJUYXJnZXRbaV07CisK
KyAgICAgICAgICAgIHJ0QmxlbmQuQmxlbmRFbmFibGUgPSBibGVuZFN0YXRlLmJsZW5kOworICAg
ICAgICAgICAgaWYgKGJsZW5kU3RhdGUuYmxlbmQpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcnRCbGVuZC5TcmNCbGVuZCA9IGdsX2QzZDExOjpDb252ZXJ0QmxlbmRGdW5jKGJsZW5k
U3RhdGUuc291cmNlQmxlbmRSR0IsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBydEJsZW5kLkRl
c3RCbGVuZCA9IGdsX2QzZDExOjpDb252ZXJ0QmxlbmRGdW5jKGJsZW5kU3RhdGUuZGVzdEJsZW5k
UkdCLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgcnRCbGVuZC5CbGVuZE9wID0gZ2xfZDNkMTE6
OkNvbnZlcnRCbGVuZE9wKGJsZW5kU3RhdGUuYmxlbmRFcXVhdGlvblJHQik7CisKKyAgICAgICAg
ICAgICAgICBydEJsZW5kLlNyY0JsZW5kQWxwaGEgPSBnbF9kM2QxMTo6Q29udmVydEJsZW5kRnVu
YyhibGVuZFN0YXRlLnNvdXJjZUJsZW5kQWxwaGEsIHRydWUpOworICAgICAgICAgICAgICAgIHJ0
QmxlbmQuRGVzdEJsZW5kQWxwaGEgPSBnbF9kM2QxMTo6Q29udmVydEJsZW5kRnVuYyhibGVuZFN0
YXRlLmRlc3RCbGVuZEFscGhhLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBydEJsZW5kLkJsZW5k
T3BBbHBoYSA9IGdsX2QzZDExOjpDb252ZXJ0QmxlbmRPcChibGVuZFN0YXRlLmJsZW5kRXF1YXRp
b25BbHBoYSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJ0QmxlbmQuUmVuZGVyVGFy
Z2V0V3JpdGVNYXNrID0gZ2xfZDNkMTE6OkNvbnZlcnRDb2xvck1hc2soa2V5LnJ0Q2hhbm5lbHNb
aV1bMF0gJiYgYmxlbmRTdGF0ZS5jb2xvck1hc2tSZWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleS5ydENo
YW5uZWxzW2ldWzFdICYmIGJsZW5kU3RhdGUuY29sb3JNYXNrR3JlZW4sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGtleS5ydENoYW5uZWxzW2ldWzJdICYmIGJsZW5kU3RhdGUuY29sb3JNYXNrQmx1ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAga2V5LnJ0Q2hhbm5lbHNbaV1bM10gJiYgYmxlbmRTdGF0ZS5jb2xvck1hc2tBbHBo
YSk7CisgICAgICAgIH0KKworICAgICAgICBJRDNEMTFCbGVuZFN0YXRlICpkeDExQmxlbmRTdGF0
ZSA9IE5VTEw7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlQmxlbmRT
dGF0ZSgmYmxlbmREZXNjLCAmZHgxMUJsZW5kU3RhdGUpOworICAgICAgICBpZiAoRkFJTEVEKHJl
c3VsdCkgfHwgIWR4MTFCbGVuZFN0YXRlKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIlVu
YWJsZSB0byBjcmVhdGUgYSBJRDNEMTFCbGVuZFN0YXRlLCBIUkVTVUxUOiAweCVYLiIsIHJlc3Vs
dCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIG1CbGVu
ZFN0YXRlQ2FjaGUuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGtleSwgc3RkOjptYWtlX3BhaXIoZHgx
MUJsZW5kU3RhdGUsIG1Db3VudGVyKyspKSk7CisKKyAgICAgICAgcmV0dXJuIGR4MTFCbGVuZFN0
YXRlOworICAgIH0KK30KKworc3RkOjpzaXplX3QgUmVuZGVyU3RhdGVDYWNoZTo6aGFzaFJhc3Rl
cml6ZXJTdGF0ZShjb25zdCBSYXN0ZXJpemVyU3RhdGVLZXkgJnJhc3RlclN0YXRlKQoreworICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2VlZCA9IDB4QUJDREVGOTg7CisKKyAgICBzdGQ6
OnNpemVfdCBoYXNoID0gMDsKKyAgICBNdXJtdXJIYXNoM194ODZfMzIoJnJhc3RlclN0YXRlLCBz
aXplb2YoUmFzdGVyaXplclN0YXRlS2V5KSwgc2VlZCwgJmhhc2gpOworICAgIHJldHVybiBoYXNo
OworfQorCitib29sIFJlbmRlclN0YXRlQ2FjaGU6OmNvbXBhcmVSYXN0ZXJpemVyU3RhdGVzKGNv
bnN0IFJhc3Rlcml6ZXJTdGF0ZUtleSAmYSwgY29uc3QgUmFzdGVyaXplclN0YXRlS2V5ICZiKQor
eworICAgIHJldHVybiBtZW1jbXAoJmEsICZiLCBzaXplb2YoUmFzdGVyaXplclN0YXRlS2V5KSkg
PT0gMDsKK30KKworSUQzRDExUmFzdGVyaXplclN0YXRlICpSZW5kZXJTdGF0ZUNhY2hlOjpnZXRS
YXN0ZXJpemVyU3RhdGUoY29uc3QgZ2w6OlJhc3Rlcml6ZXJTdGF0ZSAmcmFzdGVyU3RhdGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIHNjaXNzb3JFbmFibGVkLCB1bnNpZ25lZCBpbnQgZGVwdGhTaXplKQoreworICAgIGlm
ICghbURldmljZSkKKyAgICB7CisgICAgICAgIEVSUigiUmVuZGVyU3RhdGVDYWNoZSBpcyBub3Qg
aW5pdGlhbGl6ZWQuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIFJhc3Rl
cml6ZXJTdGF0ZUtleSBrZXk7CisgICAga2V5LnJhc3Rlcml6ZXJTdGF0ZSA9IHJhc3RlclN0YXRl
OworICAgIGtleS5zY2lzc29yRW5hYmxlZCA9IHNjaXNzb3JFbmFibGVkOworICAgIGtleS5kZXB0
aFNpemUgPSBkZXB0aFNpemU7CisKKyAgICBSYXN0ZXJpemVyU3RhdGVNYXA6Oml0ZXJhdG9yIGkg
PSBtUmFzdGVyaXplclN0YXRlQ2FjaGUuZmluZChrZXkpOworICAgIGlmIChpICE9IG1SYXN0ZXJp
emVyU3RhdGVDYWNoZS5lbmQoKSkKKyAgICB7CisgICAgICAgIFJhc3Rlcml6ZXJTdGF0ZUNvdW50
ZXJQYWlyICZzdGF0ZSA9IGktPnNlY29uZDsKKyAgICAgICAgc3RhdGUuc2Vjb25kID0gbUNvdW50
ZXIrKzsKKyAgICAgICAgcmV0dXJuIHN0YXRlLmZpcnN0OworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICBpZiAobVJhc3Rlcml6ZXJTdGF0ZUNhY2hlLnNpemUoKSA+PSBrTWF4UmFzdGVy
aXplclN0YXRlcykKKyAgICAgICAgeworICAgICAgICAgICAgVFJBQ0UoIk92ZXJmbG93ZWQgdGhl
IGxpbWl0IG9mICV1IHJhc3Rlcml6ZXIgc3RhdGVzLCByZW1vdmluZyB0aGUgbGVhc3QgcmVjZW50
bHkgdXNlZCAiCisgICAgICAgICAgICAgICAgICAidG8gbWFrZSByb29tLiIsIGtNYXhSYXN0ZXJp
emVyU3RhdGVzKTsKKworICAgICAgICAgICAgUmFzdGVyaXplclN0YXRlTWFwOjppdGVyYXRvciBs
ZWFzdFJlY2VudGx5VXNlZCA9IG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5iZWdpbigpOworICAgICAg
ICAgICAgZm9yIChSYXN0ZXJpemVyU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtUmFzdGVyaXplclN0
YXRlQ2FjaGUuYmVnaW4oKTsgaSAhPSBtUmFzdGVyaXplclN0YXRlQ2FjaGUuZW5kKCk7IGkrKykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaS0+c2Vjb25kLnNlY29uZCA8IGxl
YXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuc2Vjb25kKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQgPSBpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuZmly
c3QtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5lcmFzZShs
ZWFzdFJlY2VudGx5VXNlZCk7CisgICAgICAgIH0KKworICAgICAgICBEM0QxMV9DVUxMX01PREUg
Y3VsbE1vZGUgPSBnbF9kM2QxMTo6Q29udmVydEN1bGxNb2RlKHJhc3RlclN0YXRlLmN1bGxGYWNl
LCByYXN0ZXJTdGF0ZS5jdWxsTW9kZSk7CisKKyAgICAgICAgLy8gRGlzYWJsZSBjdWxsaW5nIGlm
IGRyYXdpbmcgcG9pbnRzCisgICAgICAgIGlmIChyYXN0ZXJTdGF0ZS5wb2ludERyYXdNb2RlKQor
ICAgICAgICB7CisgICAgICAgICAgICBjdWxsTW9kZSA9IEQzRDExX0NVTExfTk9ORTsKKyAgICAg
ICAgfQorCisgICAgICAgIEQzRDExX1JBU1RFUklaRVJfREVTQyByYXN0ZXJEZXNjOworICAgICAg
ICByYXN0ZXJEZXNjLkZpbGxNb2RlID0gRDNEMTFfRklMTF9TT0xJRDsKKyAgICAgICAgcmFzdGVy
RGVzYy5DdWxsTW9kZSA9IGN1bGxNb2RlOworICAgICAgICByYXN0ZXJEZXNjLkZyb250Q291bnRl
ckNsb2Nrd2lzZSA9IChyYXN0ZXJTdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXKSA/IEZBTFNFOiBU
UlVFOworICAgICAgICByYXN0ZXJEZXNjLkRlcHRoQmlhcyA9IGxkZXhwKHJhc3RlclN0YXRlLnBv
bHlnb25PZmZzZXRVbml0cywgLXN0YXRpY19jYXN0PGludD4oZGVwdGhTaXplKSk7CisgICAgICAg
IHJhc3RlckRlc2MuRGVwdGhCaWFzQ2xhbXAgPSAwLjBmOyAvLyBNU0ROIGRvY3VtZW50YXRpb24g
b2YgRGVwdGhCaWFzQ2xhbXAgaW1wbGllcyBhIHZhbHVlIG9mIHplcm8gd2lsbCBwcmVmb3JtIG5v
IGNsYW1waW5nLCBtdXN0IGJlIHRlc3RlZCB0aG91Z2guCisgICAgICAgIHJhc3RlckRlc2MuU2xv
cGVTY2FsZWREZXB0aEJpYXMgPSByYXN0ZXJTdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yOworICAg
ICAgICByYXN0ZXJEZXNjLkRlcHRoQ2xpcEVuYWJsZSA9IFRSVUU7CisgICAgICAgIHJhc3RlckRl
c2MuU2Npc3NvckVuYWJsZSA9IHNjaXNzb3JFbmFibGVkID8gVFJVRSA6IEZBTFNFOworICAgICAg
ICByYXN0ZXJEZXNjLk11bHRpc2FtcGxlRW5hYmxlID0gcmFzdGVyU3RhdGUubXVsdGlTYW1wbGU7
CisgICAgICAgIHJhc3RlckRlc2MuQW50aWFsaWFzZWRMaW5lRW5hYmxlID0gRkFMU0U7CisKKyAg
ICAgICAgSUQzRDExUmFzdGVyaXplclN0YXRlICpkeDExUmFzdGVyaXplclN0YXRlID0gTlVMTDsK
KyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVSYXN0ZXJpemVyU3RhdGUo
JnJhc3RlckRlc2MsICZkeDExUmFzdGVyaXplclN0YXRlKTsKKyAgICAgICAgaWYgKEZBSUxFRChy
ZXN1bHQpIHx8ICFkeDExUmFzdGVyaXplclN0YXRlKQorICAgICAgICB7CisgICAgICAgICAgICBF
UlIoIlVuYWJsZSB0byBjcmVhdGUgYSBJRDNEMTFSYXN0ZXJpemVyU3RhdGUsIEhSRVNVTFQ6IDB4
JVguIiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAg
ICAgICAgbVJhc3Rlcml6ZXJTdGF0ZUNhY2hlLmluc2VydChzdGQ6Om1ha2VfcGFpcihrZXksIHN0
ZDo6bWFrZV9wYWlyKGR4MTFSYXN0ZXJpemVyU3RhdGUsIG1Db3VudGVyKyspKSk7CisKKyAgICAg
ICAgcmV0dXJuIGR4MTFSYXN0ZXJpemVyU3RhdGU7CisgICAgfQorfQorCitzdGQ6OnNpemVfdCBS
ZW5kZXJTdGF0ZUNhY2hlOjpoYXNoRGVwdGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6OkRlcHRoU3Rl
bmNpbFN0YXRlICZkc1N0YXRlKQoreworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2Vl
ZCA9IDB4QUJDREVGOTg7CisKKyAgICBzdGQ6OnNpemVfdCBoYXNoID0gMDsKKyAgICBNdXJtdXJI
YXNoM194ODZfMzIoJmRzU3RhdGUsIHNpemVvZihnbDo6RGVwdGhTdGVuY2lsU3RhdGUpLCBzZWVk
LCAmaGFzaCk7CisgICAgcmV0dXJuIGhhc2g7Cit9CisKK2Jvb2wgUmVuZGVyU3RhdGVDYWNoZTo6
Y29tcGFyZURlcHRoU3RlbmNpbFN0YXRlcyhjb25zdCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmEs
IGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmYikKK3sKKyAgICByZXR1cm4gbWVtY21wKCZh
LCAmYiwgc2l6ZW9mKGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSkpID09IDA7Cit9CisKK0lEM0QxMURl
cHRoU3RlbmNpbFN0YXRlICpSZW5kZXJTdGF0ZUNhY2hlOjpnZXREZXB0aFN0ZW5jaWxTdGF0ZShj
b25zdCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmRzU3RhdGUpCit7CisgICAgaWYgKCFtRGV2aWNl
KQorICAgIHsKKyAgICAgICAgRVJSKCJSZW5kZXJTdGF0ZUNhY2hlIGlzIG5vdCBpbml0aWFsaXpl
ZC4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgRGVwdGhTdGVuY2lsU3Rh
dGVNYXA6Oml0ZXJhdG9yIGkgPSBtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5maW5kKGRzU3RhdGUp
OworICAgIGlmIChpICE9IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmVuZCgpKQorICAgIHsKKyAg
ICAgICAgRGVwdGhTdGVuY2lsU3RhdGVDb3VudGVyUGFpciAmc3RhdGUgPSBpLT5zZWNvbmQ7Cisg
ICAgICAgIHN0YXRlLnNlY29uZCA9IG1Db3VudGVyKys7CisgICAgICAgIHJldHVybiBzdGF0ZS5m
aXJzdDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKG1EZXB0aFN0ZW5jaWxT
dGF0ZUNhY2hlLnNpemUoKSA+PSBrTWF4RGVwdGhTdGVuY2lsU3RhdGVzKQorICAgICAgICB7Cisg
ICAgICAgICAgICBUUkFDRSgiT3ZlcmZsb3dlZCB0aGUgbGltaXQgb2YgJXUgZGVwdGggc3RlbmNp
bCBzdGF0ZXMsIHJlbW92aW5nIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkICIKKyAgICAgICAgICAg
ICAgICAgICJ0byBtYWtlIHJvb20uIiwga01heERlcHRoU3RlbmNpbFN0YXRlcyk7CisKKyAgICAg
ICAgICAgIERlcHRoU3RlbmNpbFN0YXRlTWFwOjppdGVyYXRvciBsZWFzdFJlY2VudGx5VXNlZCA9
IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmJlZ2luKCk7CisgICAgICAgICAgICBmb3IgKERlcHRo
U3RlbmNpbFN0YXRlTWFwOjppdGVyYXRvciBpID0gbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuYmVn
aW4oKTsgaSAhPSBtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5lbmQoKTsgaSsrKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGlmIChpLT5zZWNvbmQuc2Vjb25kIDwgbGVhc3RSZWNlbnRs
eVVzZWQtPnNlY29uZC5zZWNvbmQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBsZWFzdFJlY2VudGx5VXNlZCA9IGk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQtPnNlY29uZC5maXJzdC0+UmVsZWFz
ZSgpOworICAgICAgICAgICAgbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuZXJhc2UobGVhc3RSZWNl
bnRseVVzZWQpOworICAgICAgICB9CisKKyAgICAgICAgRDNEMTFfREVQVEhfU1RFTkNJTF9ERVND
IGRzRGVzYyA9IHsgMCB9OworICAgICAgICBkc0Rlc2MuRGVwdGhFbmFibGUgPSBkc1N0YXRlLmRl
cHRoVGVzdCA/IFRSVUUgOiBGQUxTRTsKKyAgICAgICAgZHNEZXNjLkRlcHRoV3JpdGVNYXNrID0g
Z2xfZDNkMTE6OkNvbnZlcnREZXB0aE1hc2soZHNTdGF0ZS5kZXB0aE1hc2spOworICAgICAgICBk
c0Rlc2MuRGVwdGhGdW5jID0gZ2xfZDNkMTE6OkNvbnZlcnRDb21wYXJpc29uKGRzU3RhdGUuZGVw
dGhGdW5jKTsKKyAgICAgICAgZHNEZXNjLlN0ZW5jaWxFbmFibGUgPSBkc1N0YXRlLnN0ZW5jaWxU
ZXN0ID8gVFJVRSA6IEZBTFNFOworICAgICAgICBkc0Rlc2MuU3RlbmNpbFJlYWRNYXNrID0gZ2xf
ZDNkMTE6OkNvbnZlcnRTdGVuY2lsTWFzayhkc1N0YXRlLnN0ZW5jaWxNYXNrKTsKKyAgICAgICAg
ZHNEZXNjLlN0ZW5jaWxXcml0ZU1hc2sgPSBnbF9kM2QxMTo6Q29udmVydFN0ZW5jaWxNYXNrKGRz
U3RhdGUuc3RlbmNpbFdyaXRlbWFzayk7CisgICAgICAgIGRzRGVzYy5Gcm9udEZhY2UuU3RlbmNp
bEZhaWxPcCA9IGdsX2QzZDExOjpDb252ZXJ0U3RlbmNpbE9wKGRzU3RhdGUuc3RlbmNpbEZhaWwp
OworICAgICAgICBkc0Rlc2MuRnJvbnRGYWNlLlN0ZW5jaWxEZXB0aEZhaWxPcCA9IGdsX2QzZDEx
OjpDb252ZXJ0U3RlbmNpbE9wKGRzU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwpOworICAgICAg
ICBkc0Rlc2MuRnJvbnRGYWNlLlN0ZW5jaWxQYXNzT3AgPSBnbF9kM2QxMTo6Q29udmVydFN0ZW5j
aWxPcChkc1N0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzKTsKKyAgICAgICAgZHNEZXNjLkZyb250
RmFjZS5TdGVuY2lsRnVuYyA9IGdsX2QzZDExOjpDb252ZXJ0Q29tcGFyaXNvbihkc1N0YXRlLnN0
ZW5jaWxGdW5jKTsKKyAgICAgICAgZHNEZXNjLkJhY2tGYWNlLlN0ZW5jaWxGYWlsT3AgPSBnbF9k
M2QxMTo6Q29udmVydFN0ZW5jaWxPcChkc1N0YXRlLnN0ZW5jaWxCYWNrRmFpbCk7CisgICAgICAg
IGRzRGVzYy5CYWNrRmFjZS5TdGVuY2lsRGVwdGhGYWlsT3AgPSBnbF9kM2QxMTo6Q29udmVydFN0
ZW5jaWxPcChkc1N0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCk7CisgICAgICAgIGRzRGVz
Yy5CYWNrRmFjZS5TdGVuY2lsUGFzc09wID0gZ2xfZDNkMTE6OkNvbnZlcnRTdGVuY2lsT3AoZHNT
dGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MpOworICAgICAgICBkc0Rlc2MuQmFja0ZhY2Uu
U3RlbmNpbEZ1bmMgPSBnbF9kM2QxMTo6Q29udmVydENvbXBhcmlzb24oZHNTdGF0ZS5zdGVuY2ls
QmFja0Z1bmMpOworCisgICAgICAgIElEM0QxMURlcHRoU3RlbmNpbFN0YXRlICpkeDExRGVwdGhT
dGVuY2lsU3RhdGUgPSBOVUxMOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNy
ZWF0ZURlcHRoU3RlbmNpbFN0YXRlKCZkc0Rlc2MsICZkeDExRGVwdGhTdGVuY2lsU3RhdGUpOwor
ICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkgfHwgIWR4MTFEZXB0aFN0ZW5jaWxTdGF0ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgRVJSKCJVbmFibGUgdG8gY3JlYXRlIGEgSUQzRDExRGVwdGhT
dGVuY2lsU3RhdGUsIEhSRVNVTFQ6IDB4JVguIiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVy
biBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuaW5z
ZXJ0KHN0ZDo6bWFrZV9wYWlyKGRzU3RhdGUsIHN0ZDo6bWFrZV9wYWlyKGR4MTFEZXB0aFN0ZW5j
aWxTdGF0ZSwgbUNvdW50ZXIrKykpKTsKKworICAgICAgICByZXR1cm4gZHgxMURlcHRoU3RlbmNp
bFN0YXRlOworICAgIH0KK30KKworc3RkOjpzaXplX3QgUmVuZGVyU3RhdGVDYWNoZTo6aGFzaFNh
bXBsZXJTdGF0ZShjb25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpCit7CisgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZWVkID0gMHhBQkNERUY5ODsKKworICAgIHN0ZDo6
c2l6ZV90IGhhc2ggPSAwOworICAgIE11cm11ckhhc2gzX3g4Nl8zMigmc2FtcGxlclN0YXRlLCBz
aXplb2YoZ2w6OlNhbXBsZXJTdGF0ZSksIHNlZWQsICZoYXNoKTsKKyAgICByZXR1cm4gaGFzaDsK
K30KKworYm9vbCBSZW5kZXJTdGF0ZUNhY2hlOjpjb21wYXJlU2FtcGxlclN0YXRlcyhjb25zdCBn
bDo6U2FtcGxlclN0YXRlICZhLCBjb25zdCBnbDo6U2FtcGxlclN0YXRlICZiKQoreworICAgIHJl
dHVybiBtZW1jbXAoJmEsICZiLCBzaXplb2YoZ2w6OlNhbXBsZXJTdGF0ZSkpID09IDA7Cit9CisK
K0lEM0QxMVNhbXBsZXJTdGF0ZSAqUmVuZGVyU3RhdGVDYWNoZTo6Z2V0U2FtcGxlclN0YXRlKGNv
bnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkKK3sKKyAgICBpZiAoIW1EZXZpY2Up
CisgICAgeworICAgICAgICBFUlIoIlJlbmRlclN0YXRlQ2FjaGUgaXMgbm90IGluaXRpYWxpemVk
LiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBTYW1wbGVyU3RhdGVNYXA6
Oml0ZXJhdG9yIGkgPSBtU2FtcGxlclN0YXRlQ2FjaGUuZmluZChzYW1wbGVyU3RhdGUpOworICAg
IGlmIChpICE9IG1TYW1wbGVyU3RhdGVDYWNoZS5lbmQoKSkKKyAgICB7CisgICAgICAgIFNhbXBs
ZXJTdGF0ZUNvdW50ZXJQYWlyICZzdGF0ZSA9IGktPnNlY29uZDsKKyAgICAgICAgc3RhdGUuc2Vj
b25kID0gbUNvdW50ZXIrKzsKKyAgICAgICAgcmV0dXJuIHN0YXRlLmZpcnN0OworICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICBpZiAobVNhbXBsZXJTdGF0ZUNhY2hlLnNpemUoKSA+PSBr
TWF4U2FtcGxlclN0YXRlcykKKyAgICAgICAgeworICAgICAgICAgICAgVFJBQ0UoIk92ZXJmbG93
ZWQgdGhlIGxpbWl0IG9mICV1IHNhbXBsZXIgc3RhdGVzLCByZW1vdmluZyB0aGUgbGVhc3QgcmVj
ZW50bHkgdXNlZCAiCisgICAgICAgICAgICAgICAgICAidG8gbWFrZSByb29tLiIsIGtNYXhTYW1w
bGVyU3RhdGVzKTsKKworICAgICAgICAgICAgU2FtcGxlclN0YXRlTWFwOjppdGVyYXRvciBsZWFz
dFJlY2VudGx5VXNlZCA9IG1TYW1wbGVyU3RhdGVDYWNoZS5iZWdpbigpOworICAgICAgICAgICAg
Zm9yIChTYW1wbGVyU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtU2FtcGxlclN0YXRlQ2FjaGUuYmVn
aW4oKTsgaSAhPSBtU2FtcGxlclN0YXRlQ2FjaGUuZW5kKCk7IGkrKykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBpZiAoaS0+c2Vjb25kLnNlY29uZCA8IGxlYXN0UmVjZW50bHlVc2Vk
LT5zZWNvbmQuc2Vjb25kKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
bGVhc3RSZWNlbnRseVVzZWQgPSBpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsK
KyAgICAgICAgICAgIG1TYW1wbGVyU3RhdGVDYWNoZS5lcmFzZShsZWFzdFJlY2VudGx5VXNlZCk7
CisgICAgICAgIH0KKworICAgICAgICBEM0QxMV9TQU1QTEVSX0RFU0Mgc2FtcGxlckRlc2M7Cisg
ICAgICAgIHNhbXBsZXJEZXNjLkZpbHRlciA9IGdsX2QzZDExOjpDb252ZXJ0RmlsdGVyKHNhbXBs
ZXJTdGF0ZS5taW5GaWx0ZXIsIHNhbXBsZXJTdGF0ZS5tYWdGaWx0ZXIsIHNhbXBsZXJTdGF0ZS5t
YXhBbmlzb3Ryb3B5KTsKKyAgICAgICAgc2FtcGxlckRlc2MuQWRkcmVzc1UgPSBnbF9kM2QxMTo6
Q29udmVydFRleHR1cmVXcmFwKHNhbXBsZXJTdGF0ZS53cmFwUyk7CisgICAgICAgIHNhbXBsZXJE
ZXNjLkFkZHJlc3NWID0gZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlV3JhcChzYW1wbGVyU3RhdGUu
d3JhcFQpOworICAgICAgICBzYW1wbGVyRGVzYy5BZGRyZXNzVyA9IEQzRDExX1RFWFRVUkVfQURE
UkVTU19DTEFNUDsKKyAgICAgICAgc2FtcGxlckRlc2MuTWlwTE9EQmlhcyA9IHN0YXRpY19jYXN0
PGZsb2F0PihzYW1wbGVyU3RhdGUubG9kT2Zmc2V0KTsKKyAgICAgICAgc2FtcGxlckRlc2MuTWF4
QW5pc290cm9weSA9IHNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5OworICAgICAgICBzYW1wbGVy
RGVzYy5Db21wYXJpc29uRnVuYyA9IEQzRDExX0NPTVBBUklTT05fTkVWRVI7CisgICAgICAgIHNh
bXBsZXJEZXNjLkJvcmRlckNvbG9yWzBdID0gMC4wZjsKKyAgICAgICAgc2FtcGxlckRlc2MuQm9y
ZGVyQ29sb3JbMV0gPSAwLjBmOworICAgICAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclsyXSA9
IDAuMGY7CisgICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzNdID0gMC4wZjsKKyAgICAg
ICAgc2FtcGxlckRlc2MuTWluTE9EID0gZ2xfZDNkMTE6OkNvbnZlcnRNaW5MT0Qoc2FtcGxlclN0
YXRlLm1pbkZpbHRlciwgc2FtcGxlclN0YXRlLmxvZE9mZnNldCk7CisgICAgICAgIHNhbXBsZXJE
ZXNjLk1heExPRCA9IGdsX2QzZDExOjpDb252ZXJ0TWF4TE9EKHNhbXBsZXJTdGF0ZS5taW5GaWx0
ZXIsIHNhbXBsZXJTdGF0ZS5sb2RPZmZzZXQpOworCisgICAgICAgIElEM0QxMVNhbXBsZXJTdGF0
ZSAqZHgxMVNhbXBsZXJTdGF0ZSA9IE5VTEw7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURl
dmljZS0+Q3JlYXRlU2FtcGxlclN0YXRlKCZzYW1wbGVyRGVzYywgJmR4MTFTYW1wbGVyU3RhdGUp
OworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkgfHwgIWR4MTFTYW1wbGVyU3RhdGUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEVSUigiVW5hYmxlIHRvIGNyZWF0ZSBhIElEM0QxMURlcHRoU3Rl
bmNpbFN0YXRlLCBIUkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4g
TlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIG1TYW1wbGVyU3RhdGVDYWNoZS5pbnNlcnQoc3Rk
OjptYWtlX3BhaXIoc2FtcGxlclN0YXRlLCBzdGQ6Om1ha2VfcGFpcihkeDExU2FtcGxlclN0YXRl
LCBtQ291bnRlcisrKSkpOworCisgICAgICAgIHJldHVybiBkeDExU2FtcGxlclN0YXRlOworICAg
IH0KK30KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyU3Rh
dGVDYWNoZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjRiODcxYTRiZDg1NzExNGFi
OGE3MGMwYzc1ODk1ZDBlMjEwODM2OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyU3RhdGVDYWNoZS5o
CkBAIC0wLDAgKzEsMTExIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBSZW5kZXJTdGF0ZUNh
Y2hlLmg6IERlZmluZXMgcng6OlJlbmRlclN0YXRlQ2FjaGUsIGEgY2FjaGUgb2YgRGlyZWN0M0Qg
cmVuZGVyCisvLyBzdGF0ZSBvYmplY3RzLgorCisjaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9S
RU5ERVJTVEFURUNBQ0hFX0hfCisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJTVEFU
RUNBQ0hFX0hfCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgorI2luY2x1ZGUg
ImNvbW1vbi9hbmdsZXV0aWxzLmgiCisKK25hbWVzcGFjZSBnbAoreworY2xhc3MgRnJhbWVidWZm
ZXI7Cit9CisKK25hbWVzcGFjZSByeAoreworCitjbGFzcyBSZW5kZXJTdGF0ZUNhY2hlCit7Cisg
IHB1YmxpYzoKKyAgICBSZW5kZXJTdGF0ZUNhY2hlKCk7CisgICAgdmlydHVhbCB+UmVuZGVyU3Rh
dGVDYWNoZSgpOworCisgICAgdm9pZCBpbml0aWFsaXplKElEM0QxMURldmljZSAqZGV2aWNlKTsK
KyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICAvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHRoZSBy
ZXR1cm5lZCBibGVuZCBzdGF0ZSwgUmVsZWFzZSgpIG11c3QgYmUgY2FsbGVkLgorICAgIElEM0Qx
MUJsZW5kU3RhdGUgKmdldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwg
Y29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUpOworICAgIElEM0QxMVJhc3Rlcml6ZXJT
dGF0ZSAqZ2V0UmFzdGVyaXplclN0YXRlKGNvbnN0IGdsOjpSYXN0ZXJpemVyU3RhdGUgJnJhc3Rl
clN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgc2Npc3NvckVuYWJsZWQsIHVuc2lnbmVkIGludCBkZXB0aFNpemUpOworICAgIElEM0QxMURl
cHRoU3RlbmNpbFN0YXRlICpnZXREZXB0aFN0ZW5jaWxTdGF0ZShjb25zdCBnbDo6RGVwdGhTdGVu
Y2lsU3RhdGUgJmRzU3RhdGUpOworICAgIElEM0QxMVNhbXBsZXJTdGF0ZSAqZ2V0U2FtcGxlclN0
YXRlKGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSk7CisKKyAgcHJpdmF0ZToK
KyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyU3RhdGVDYWNoZSk7CisKKyAgICB1
bnNpZ25lZCBsb25nIGxvbmcgbUNvdW50ZXI7CisKKyAgICAvLyBCbGVuZCBzdGF0ZSBjYWNoZQor
ICAgIHN0cnVjdCBCbGVuZFN0YXRlS2V5CisgICAgeworICAgICAgICBnbDo6QmxlbmRTdGF0ZSBi
bGVuZFN0YXRlOworICAgICAgICBib29sIHJ0Q2hhbm5lbHNbRDNEMTFfU0lNVUxUQU5FT1VTX1JF
TkRFUl9UQVJHRVRfQ09VTlRdWzRdOworICAgIH07CisgICAgc3RhdGljIHN0ZDo6c2l6ZV90IGhh
c2hCbGVuZFN0YXRlKGNvbnN0IEJsZW5kU3RhdGVLZXkgJmJsZW5kU3RhdGUpOworICAgIHN0YXRp
YyBib29sIGNvbXBhcmVCbGVuZFN0YXRlcyhjb25zdCBCbGVuZFN0YXRlS2V5ICZhLCBjb25zdCBC
bGVuZFN0YXRlS2V5ICZiKTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGtNYXhCbGVu
ZFN0YXRlczsKKworICAgIHR5cGVkZWYgc3RkOjpzaXplX3QgKCpCbGVuZFN0YXRlSGFzaEZ1bmN0
aW9uKShjb25zdCBCbGVuZFN0YXRlS2V5ICYpOworICAgIHR5cGVkZWYgYm9vbCAoKkJsZW5kU3Rh
dGVFcXVhbGl0eUZ1bmN0aW9uKShjb25zdCBCbGVuZFN0YXRlS2V5ICYsIGNvbnN0IEJsZW5kU3Rh
dGVLZXkgJik7CisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8SUQzRDExQmxlbmRTdGF0ZSosIHVuc2ln
bmVkIGxvbmcgbG9uZz4gQmxlbmRTdGF0ZUNvdW50ZXJQYWlyOworICAgIHR5cGVkZWYgc3RkOjp1
bm9yZGVyZWRfbWFwPEJsZW5kU3RhdGVLZXksIEJsZW5kU3RhdGVDb3VudGVyUGFpciwgQmxlbmRT
dGF0ZUhhc2hGdW5jdGlvbiwgQmxlbmRTdGF0ZUVxdWFsaXR5RnVuY3Rpb24+IEJsZW5kU3RhdGVN
YXA7CisgICAgQmxlbmRTdGF0ZU1hcCBtQmxlbmRTdGF0ZUNhY2hlOworCisgICAgLy8gUmFzdGVy
aXplciBzdGF0ZSBjYWNoZQorICAgIHN0cnVjdCBSYXN0ZXJpemVyU3RhdGVLZXkKKyAgICB7Cisg
ICAgICAgIGdsOjpSYXN0ZXJpemVyU3RhdGUgcmFzdGVyaXplclN0YXRlOworICAgICAgICBib29s
IHNjaXNzb3JFbmFibGVkOworICAgICAgICB1bnNpZ25lZCBpbnQgZGVwdGhTaXplOworICAgIH07
CisgICAgc3RhdGljIHN0ZDo6c2l6ZV90IGhhc2hSYXN0ZXJpemVyU3RhdGUoY29uc3QgUmFzdGVy
aXplclN0YXRlS2V5ICZyYXN0ZXJTdGF0ZSk7CisgICAgc3RhdGljIGJvb2wgY29tcGFyZVJhc3Rl
cml6ZXJTdGF0ZXMoY29uc3QgUmFzdGVyaXplclN0YXRlS2V5ICZhLCBjb25zdCBSYXN0ZXJpemVy
U3RhdGVLZXkgJmIpOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQga01heFJhc3Rlcml6
ZXJTdGF0ZXM7CisKKyAgICB0eXBlZGVmIHN0ZDo6c2l6ZV90ICgqUmFzdGVyaXplclN0YXRlSGFz
aEZ1bmN0aW9uKShjb25zdCBSYXN0ZXJpemVyU3RhdGVLZXkgJik7CisgICAgdHlwZWRlZiBib29s
ICgqUmFzdGVyaXplclN0YXRlRXF1YWxpdHlGdW5jdGlvbikoY29uc3QgUmFzdGVyaXplclN0YXRl
S2V5ICYsIGNvbnN0IFJhc3Rlcml6ZXJTdGF0ZUtleSAmKTsKKyAgICB0eXBlZGVmIHN0ZDo6cGFp
cjxJRDNEMTFSYXN0ZXJpemVyU3RhdGUqLCB1bnNpZ25lZCBsb25nIGxvbmc+IFJhc3Rlcml6ZXJT
dGF0ZUNvdW50ZXJQYWlyOworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPFJhc3Rlcml6
ZXJTdGF0ZUtleSwgUmFzdGVyaXplclN0YXRlQ291bnRlclBhaXIsIFJhc3Rlcml6ZXJTdGF0ZUhh
c2hGdW5jdGlvbiwgUmFzdGVyaXplclN0YXRlRXF1YWxpdHlGdW5jdGlvbj4gUmFzdGVyaXplclN0
YXRlTWFwOworICAgIFJhc3Rlcml6ZXJTdGF0ZU1hcCBtUmFzdGVyaXplclN0YXRlQ2FjaGU7CisK
KyAgICAvLyBEZXB0aCBzdGVuY2lsIHN0YXRlIGNhY2hlCisgICAgc3RhdGljIHN0ZDo6c2l6ZV90
IGhhc2hEZXB0aFN0ZW5jaWxTdGF0ZShjb25zdCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmRzU3Rh
dGUpOworICAgIHN0YXRpYyBib29sIGNvbXBhcmVEZXB0aFN0ZW5jaWxTdGF0ZXMoY29uc3QgZ2w6
OkRlcHRoU3RlbmNpbFN0YXRlICZhLCBjb25zdCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmIpOwor
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQga01heERlcHRoU3RlbmNpbFN0YXRlczsKKwor
ICAgIHR5cGVkZWYgc3RkOjpzaXplX3QgKCpEZXB0aFN0ZW5jaWxTdGF0ZUhhc2hGdW5jdGlvbiko
Y29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICYpOworICAgIHR5cGVkZWYgYm9vbCAoKkRlcHRo
U3RlbmNpbFN0YXRlRXF1YWxpdHlGdW5jdGlvbikoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRl
ICYsIGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmKTsKKyAgICB0eXBlZGVmIHN0ZDo6cGFp
cjxJRDNEMTFEZXB0aFN0ZW5jaWxTdGF0ZSosIHVuc2lnbmVkIGxvbmcgbG9uZz4gRGVwdGhTdGVu
Y2lsU3RhdGVDb3VudGVyUGFpcjsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxnbDo6
RGVwdGhTdGVuY2lsU3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwdGhT
dGVuY2lsU3RhdGVDb3VudGVyUGFpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
ZXB0aFN0ZW5jaWxTdGF0ZUhhc2hGdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBEZXB0aFN0ZW5jaWxTdGF0ZUVxdWFsaXR5RnVuY3Rpb24+IERlcHRoU3RlbmNpbFN0YXRl
TWFwOworICAgIERlcHRoU3RlbmNpbFN0YXRlTWFwIG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlOwor
CisgICAgLy8gU2FtcGxlIHN0YXRlIGNhY2hlCisgICAgc3RhdGljIHN0ZDo6c2l6ZV90IGhhc2hT
YW1wbGVyU3RhdGUoY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKTsKKyAgICBz
dGF0aWMgYm9vbCBjb21wYXJlU2FtcGxlclN0YXRlcyhjb25zdCBnbDo6U2FtcGxlclN0YXRlICZh
LCBjb25zdCBnbDo6U2FtcGxlclN0YXRlICZiKTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
aW50IGtNYXhTYW1wbGVyU3RhdGVzOworCisgICAgdHlwZWRlZiBzdGQ6OnNpemVfdCAoKlNhbXBs
ZXJTdGF0ZUhhc2hGdW5jdGlvbikoY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmKTsKKyAgICB0eXBl
ZGVmIGJvb2wgKCpTYW1wbGVyU3RhdGVFcXVhbGl0eUZ1bmN0aW9uKShjb25zdCBnbDo6U2FtcGxl
clN0YXRlICYsIGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJik7CisgICAgdHlwZWRlZiBzdGQ6OnBh
aXI8SUQzRDExU2FtcGxlclN0YXRlKiwgdW5zaWduZWQgbG9uZyBsb25nPiBTYW1wbGVyU3RhdGVD
b3VudGVyUGFpcjsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxnbDo6U2FtcGxlclN0
YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhbXBsZXJTdGF0ZUNvdW50ZXJQ
YWlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhbXBsZXJTdGF0ZUhhc2hGdW5j
dGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYW1wbGVyU3RhdGVFcXVhbGl0
eUZ1bmN0aW9uPiBTYW1wbGVyU3RhdGVNYXA7CisgICAgU2FtcGxlclN0YXRlTWFwIG1TYW1wbGVy
U3RhdGVDYWNoZTsKKworICAgIElEM0QxMURldmljZSAqbURldmljZTsKK307CisKK30KKworI2Vu
ZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJTVEFURUNBQ0hFX0hfClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJUYXJnZXQxMS5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclRhcmdldDEx
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4zNzA3MDk3YWE0NTQ0OThhMDYwMDRlZDg1NTgyZWE5M2E5OGM2NWVm
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJUYXJnZXQxMS5jcHAKQEAgLTAsMCArMSwzNTUgQEAKKyNp
bmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFJlbmRlclRhcmdldDEx
LmNwcDogSW1wbGVtZW50cyBhIERYMTEtc3BlY2lmaWMgd3JhcHBlciBmb3IgSUQzRDExVmlldyBw
b2ludGVycworLy8gcmV0YWluZWQgYnkgUmVuZGVyYnVmZmVycy4KKworI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJUYXJnZXQxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWlu
LmgiCisKK25hbWVzcGFjZSByeAoreworCitzdGF0aWMgdW5zaWduZWQgaW50IGdldFJUVlN1YnJl
c291cmNlSW5kZXgoSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCBJRDNEMTFSZW5kZXJUYXJnZXRW
aWV3ICp2aWV3KQoreworICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7
CisgICAgdmlldy0+R2V0RGVzYygmcnR2RGVzYyk7CisKKyAgICBEM0QxMV9URVhUVVJFMkRfREVT
QyB0ZXhEZXNjOworICAgIHRleHR1cmUtPkdldERlc2MoJnRleERlc2MpOworCisgICAgdW5zaWdu
ZWQgaW50IG1pcFNsaWNlID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgYXJyYXlTbGljZSA9IDA7Cisg
ICAgdW5zaWduZWQgaW50IG1pcExldmVscyA9IHRleERlc2MuTWlwTGV2ZWxzOworCisgICAgc3dp
dGNoIChydHZEZXNjLlZpZXdEaW1lbnNpb24pCisgICAgeworICAgICAgY2FzZSBEM0QxMV9SVFZf
RElNRU5TSU9OX1RFWFRVUkUxRDoKKyAgICAgICAgbWlwU2xpY2UgPSBydHZEZXNjLlRleHR1cmUx
RC5NaXBTbGljZTsKKyAgICAgICAgYXJyYXlTbGljZSA9IDA7CisgICAgICAgIGJyZWFrOworCisg
ICAgICBjYXNlIEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTFEQVJSQVk6CisgICAgICAgIG1p
cFNsaWNlID0gcnR2RGVzYy5UZXh0dXJlMURBcnJheS5NaXBTbGljZTsKKyAgICAgICAgYXJyYXlT
bGljZSA9IHJ0dkRlc2MuVGV4dHVyZTFEQXJyYXkuRmlyc3RBcnJheVNsaWNlOworICAgICAgICBi
cmVhazsKKworICAgICAgY2FzZSBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyRDoKKyAgICAg
ICAgbWlwU2xpY2UgPSBydHZEZXNjLlRleHR1cmUyRC5NaXBTbGljZTsKKyAgICAgICAgYXJyYXlT
bGljZSA9IDA7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEQzRDExX1JUVl9ESU1FTlNJ
T05fVEVYVFVSRTJEQVJSQVk6CisgICAgICAgIG1pcFNsaWNlID0gcnR2RGVzYy5UZXh0dXJlMkRB
cnJheS5NaXBTbGljZTsKKyAgICAgICAgYXJyYXlTbGljZSA9IHJ0dkRlc2MuVGV4dHVyZTJEQXJy
YXkuRmlyc3RBcnJheVNsaWNlOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBEM0QxMV9S
VFZfRElNRU5TSU9OX1RFWFRVUkUyRE1TOgorICAgICAgICBtaXBTbGljZSA9IDA7CisgICAgICAg
IGFycmF5U2xpY2UgPSAwOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBEM0QxMV9SVFZf
RElNRU5TSU9OX1RFWFRVUkUyRE1TQVJSQVk6CisgICAgICAgIG1pcFNsaWNlID0gMDsKKyAgICAg
ICAgYXJyYXlTbGljZSA9IHJ0dkRlc2MuVGV4dHVyZTJETVNBcnJheS5GaXJzdEFycmF5U2xpY2U7
CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVS
RTNEOgorICAgICAgICBtaXBTbGljZSA9IHJ0dkRlc2MuVGV4dHVyZTNELk1pcFNsaWNlOworICAg
ICAgICBhcnJheVNsaWNlID0gMDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRDNEMTFf
UlRWX0RJTUVOU0lPTl9VTktOT1dOOgorICAgICAgY2FzZSBEM0QxMV9SVFZfRElNRU5TSU9OX0JV
RkZFUjoKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAgICBicmVhazsKKworICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgcmV0dXJuIEQzRDExQ2FsY1N1YnJlc291cmNlKG1pcFNsaWNlLCBhcnJheVNsaWNlLCBt
aXBMZXZlbHMpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGdldERTVlN1YnJlc291cmNlSW5k
ZXgoSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICp2aWV3
KQoreworICAgIEQzRDExX0RFUFRIX1NURU5DSUxfVklFV19ERVNDIGRzdkRlc2M7CisgICAgdmll
dy0+R2V0RGVzYygmZHN2RGVzYyk7CisKKyAgICBEM0QxMV9URVhUVVJFMkRfREVTQyB0ZXhEZXNj
OworICAgIHRleHR1cmUtPkdldERlc2MoJnRleERlc2MpOworCisgICAgdW5zaWduZWQgaW50IG1p
cFNsaWNlID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgYXJyYXlTbGljZSA9IDA7CisgICAgdW5zaWdu
ZWQgaW50IG1pcExldmVscyA9IHRleERlc2MuTWlwTGV2ZWxzOworCisgICAgc3dpdGNoIChkc3ZE
ZXNjLlZpZXdEaW1lbnNpb24pCisgICAgeworICAgICAgY2FzZSBEM0QxMV9EU1ZfRElNRU5TSU9O
X1RFWFRVUkUxRDoKKyAgICAgICAgbWlwU2xpY2UgPSBkc3ZEZXNjLlRleHR1cmUxRC5NaXBTbGlj
ZTsKKyAgICAgICAgYXJyYXlTbGljZSA9IDA7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNl
IEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTFEQVJSQVk6CisgICAgICAgIG1pcFNsaWNlID0g
ZHN2RGVzYy5UZXh0dXJlMURBcnJheS5NaXBTbGljZTsKKyAgICAgICAgYXJyYXlTbGljZSA9IGRz
dkRlc2MuVGV4dHVyZTFEQXJyYXkuRmlyc3RBcnJheVNsaWNlOworICAgICAgICBicmVhazsKKwor
ICAgICAgY2FzZSBEM0QxMV9EU1ZfRElNRU5TSU9OX1RFWFRVUkUyRDoKKyAgICAgICAgbWlwU2xp
Y2UgPSBkc3ZEZXNjLlRleHR1cmUyRC5NaXBTbGljZTsKKyAgICAgICAgYXJyYXlTbGljZSA9IDA7
CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVS
RTJEQVJSQVk6CisgICAgICAgIG1pcFNsaWNlID0gZHN2RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBT
bGljZTsKKyAgICAgICAgYXJyYXlTbGljZSA9IGRzdkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RB
cnJheVNsaWNlOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBEM0QxMV9EU1ZfRElNRU5T
SU9OX1RFWFRVUkUyRE1TOgorICAgICAgICBtaXBTbGljZSA9IDA7CisgICAgICAgIGFycmF5U2xp
Y2UgPSAwOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBEM0QxMV9EU1ZfRElNRU5TSU9O
X1RFWFRVUkUyRE1TQVJSQVk6CisgICAgICAgIG1pcFNsaWNlID0gMDsKKyAgICAgICAgYXJyYXlT
bGljZSA9IGRzdkRlc2MuVGV4dHVyZTJETVNBcnJheS5GaXJzdEFycmF5U2xpY2U7CisgICAgICAg
IGJyZWFrOworCisgICAgICBjYXNlIEQzRDExX1JUVl9ESU1FTlNJT05fVU5LTk9XTjoKKyAgICAg
ICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJu
IEQzRDExQ2FsY1N1YnJlc291cmNlKG1pcFNsaWNlLCBhcnJheVNsaWNlLCBtaXBMZXZlbHMpOwor
fQorCitSZW5kZXJUYXJnZXQxMTo6UmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBJ
RDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpydHYsIElEM0QxMVRleHR1cmUyRCAqdGV4LCBJRDNEMTFT
aGFkZXJSZXNvdXJjZVZpZXcgKnNydiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7
CisgICAgbVJlbmRlcmVyID0gUmVuZGVyZXIxMTo6bWFrZVJlbmRlcmVyMTEocmVuZGVyZXIpOwor
ICAgIG1UZXh0dXJlID0gdGV4OworICAgIG1SZW5kZXJUYXJnZXQgPSBydHY7CisgICAgbURlcHRo
U3RlbmNpbCA9IE5VTEw7CisgICAgbVNoYWRlclJlc291cmNlID0gc3J2OworICAgIG1TdWJyZXNv
dXJjZUluZGV4ID0gMDsKKworICAgIGlmIChtUmVuZGVyVGFyZ2V0ICYmIG1UZXh0dXJlKQorICAg
IHsKKyAgICAgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgZGVzYzsKKyAgICAgICAg
bVJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzYyk7CisKKyAgICAgICAgRDNEMTFfVEVYVFVSRTJE
X0RFU0MgdGV4RGVzYzsKKyAgICAgICAgbVRleHR1cmUtPkdldERlc2MoJnRleERlc2MpOworCisg
ICAgICAgIG1TdWJyZXNvdXJjZUluZGV4ID0gZ2V0UlRWU3VicmVzb3VyY2VJbmRleChtVGV4dHVy
ZSwgbVJlbmRlclRhcmdldCk7CisgICAgICAgIG1XaWR0aCA9IHdpZHRoOworICAgICAgICBtSGVp
Z2h0ID0gaGVpZ2h0OworICAgICAgICBtU2FtcGxlcyA9ICh0ZXhEZXNjLlNhbXBsZURlc2MuQ291
bnQgPiAxKSA/IHRleERlc2MuU2FtcGxlRGVzYy5Db3VudCA6IDA7CisKKyAgICAgICAgbUludGVy
bmFsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoZGVzYy5G
b3JtYXQpOworICAgICAgICBtQWN0dWFsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRUZXh0dXJl
SW50ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQpOworICAgIH0KK30KKworUmVuZGVyVGFyZ2V0MTE6
OlJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgSUQzRDExRGVwdGhTdGVuY2lsVmll
dyAqZHN2LCBJRDNEMTFUZXh0dXJlMkQgKnRleCwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpz
cnYsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIG1SZW5kZXJlciA9IFJl
bmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKHJlbmRlcmVyKTsKKyAgICBtVGV4dHVyZSA9IHRleDsK
KyAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICBtRGVwdGhTdGVuY2lsID0gZHN2OworICAg
IG1TaGFkZXJSZXNvdXJjZSA9IHNydjsKKyAgICBtU3VicmVzb3VyY2VJbmRleCA9IDA7CisKKyAg
ICBpZiAobURlcHRoU3RlbmNpbCAmJiBtVGV4dHVyZSkKKyAgICB7CisgICAgICAgIEQzRDExX0RF
UFRIX1NURU5DSUxfVklFV19ERVNDIGRlc2M7CisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPkdldERl
c2MoJmRlc2MpOworCisgICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleERlc2M7CisgICAg
ICAgIG1UZXh0dXJlLT5HZXREZXNjKCZ0ZXhEZXNjKTsKKworICAgICAgICBtU3VicmVzb3VyY2VJ
bmRleCA9IGdldERTVlN1YnJlc291cmNlSW5kZXgobVRleHR1cmUsIG1EZXB0aFN0ZW5jaWwpOwor
ICAgICAgICBtV2lkdGggPSB3aWR0aDsKKyAgICAgICAgbUhlaWdodCA9IGhlaWdodDsKKyAgICAg
ICAgbVNhbXBsZXMgPSAodGV4RGVzYy5TYW1wbGVEZXNjLkNvdW50ID4gMSkgPyB0ZXhEZXNjLlNh
bXBsZURlc2MuQ291bnQgOiAwOworCisgICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGQzZDExX2ds
OjpDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGRlc2MuRm9ybWF0KTsKKyAgICAgICAgbUFj
dHVhbEZvcm1hdCA9IGQzZDExX2dsOjpDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGRlc2Mu
Rm9ybWF0KTsKKyAgICB9Cit9CisKK1JlbmRlclRhcmdldDExOjpSZW5kZXJUYXJnZXQxMShSZW5k
ZXJlciAqcmVuZGVyZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBHTHNpemVpIHNhbXBsZXMsIGJvb2wgZGVwdGgpCit7CisgICAgbVJlbmRlcmVyID0gUmVu
ZGVyZXIxMTo6bWFrZVJlbmRlcmVyMTEocmVuZGVyZXIpOworICAgIG1UZXh0dXJlID0gTlVMTDsK
KyAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKKyAg
ICBtU2hhZGVyUmVzb3VyY2UgPSBOVUxMOworCisgICAgRFhHSV9GT1JNQVQgcmVxdWVzdGVkRm9y
bWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoZm9ybWF0KTsKKworICAg
IGludCBzdXBwb3J0ZWRTYW1wbGVzID0gbVJlbmRlcmVyLT5nZXROZWFyZXN0U3VwcG9ydGVkU2Ft
cGxlcyhyZXF1ZXN0ZWRGb3JtYXQsIHNhbXBsZXMpOworICAgIGlmIChzdXBwb3J0ZWRTYW1wbGVz
IDwgMCkKKyAgICB7CisgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkKKyAg
ICB7CisgICAgICAgIC8vIENyZWF0ZSB0ZXh0dXJlIHJlc291cmNlCisgICAgICAgIEQzRDExX1RF
WFRVUkUyRF9ERVNDIGRlc2M7CisgICAgICAgIGRlc2MuV2lkdGggPSB3aWR0aDsgCisgICAgICAg
IGRlc2MuSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICBkZXNjLk1pcExldmVscyA9IDE7CisgICAg
ICAgIGRlc2MuQXJyYXlTaXplID0gMTsKKyAgICAgICAgZGVzYy5Gb3JtYXQgPSByZXF1ZXN0ZWRG
b3JtYXQ7CisgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IChzdXBwb3J0ZWRTYW1wbGVz
ID09IDApID8gMSA6IHN1cHBvcnRlZFNhbXBsZXM7CisgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5R
dWFsaXR5ID0gMDsKKyAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7Cisg
ICAgICAgIGRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOworICAgICAgICBkZXNjLk1pc2NGbGFncyA9
IDA7CisgICAgICAgIGRlc2MuQmluZEZsYWdzID0gKGRlcHRoID8gRDNEMTFfQklORF9ERVBUSF9T
VEVOQ0lMIDogKEQzRDExX0JJTkRfUkVOREVSX1RBUkdFVCB8IEQzRDExX0JJTkRfU0hBREVSX1JF
U09VUkNFKSk7CisKKyAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdl
dERldmljZSgpOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVy
ZTJEKCZkZXNjLCBOVUxMLCAmbVRleHR1cmUpOworCisgICAgICAgIGlmIChyZXN1bHQgPT0gRV9P
VVRPRk1FTU9SWSkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgaWYgKGRlcHRoKQorICAgICAgICB7CisgICAg
ICAgICAgICBEM0QxMV9ERVBUSF9TVEVOQ0lMX1ZJRVdfREVTQyBkc3ZEZXNjOworICAgICAgICAg
ICAgZHN2RGVzYy5Gb3JtYXQgPSByZXF1ZXN0ZWRGb3JtYXQ7CisgICAgICAgICAgICBkc3ZEZXNj
LlZpZXdEaW1lbnNpb24gPSAoc3VwcG9ydGVkU2FtcGxlcyA9PSAwKSA/IEQzRDExX0RTVl9ESU1F
TlNJT05fVEVYVFVSRTJEIDogRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMkRNUzsKKyAgICAg
ICAgICAgIGRzdkRlc2MuVGV4dHVyZTJELk1pcFNsaWNlID0gMDsKKyAgICAgICAgICAgIGRzdkRl
c2MuRmxhZ3MgPSAwOworICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0
ZW5jaWxWaWV3KG1UZXh0dXJlLCAmZHN2RGVzYywgJm1EZXB0aFN0ZW5jaWwpOworCisgICAgICAg
ICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICBtVGV4dHVyZSA9
IE5VTEw7CisgICAgICAgICAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEQzRDExX1JFTkRFUl9U
QVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CisgICAgICAgICAgICBydHZEZXNjLkZvcm1hdCA9IHJl
cXVlc3RlZEZvcm1hdDsKKyAgICAgICAgICAgIHJ0dkRlc2MuVmlld0RpbWVuc2lvbiA9IChzdXBw
b3J0ZWRTYW1wbGVzID09IDApID8gRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMkQgOiBEM0Qx
MV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyRE1TOworICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJl
MkQuTWlwU2xpY2UgPSAwOworICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5k
ZXJUYXJnZXRWaWV3KG1UZXh0dXJlLCAmcnR2RGVzYywgJm1SZW5kZXJUYXJnZXQpOworCisgICAg
ICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICBtVGV4dHVy
ZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VS
VChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgICAgIEQzRDExX1NIQURFUl9SRVNPVVJD
RV9WSUVXX0RFU0Mgc3J2RGVzYzsKKyAgICAgICAgICAgIHNydkRlc2MuRm9ybWF0ID0gcmVxdWVz
dGVkRm9ybWF0OworICAgICAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gKHN1cHBvcnRl
ZFNhbXBsZXMgPT0gMCkgPyBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyRCA6IEQzRDExX1NS
Vl9ESU1FTlNJT05fVEVYVFVSRTJETVM7CisgICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyRC5N
b3N0RGV0YWlsZWRNaXAgPSAwOworICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkQuTWlwTGV2
ZWxzID0gMTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3Vy
Y2VWaWV3KG1UZXh0dXJlLCAmc3J2RGVzYywgJm1TaGFkZXJSZXNvdXJjZSk7CisKKyAgICAgICAg
ICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgIG1UZXh0dXJlID0g
TlVMTDsKKyAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7CisgICAgICAg
ICAgICAgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7CisgICAgICAgICAgICAgICAgZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBtV2lkdGggPSB3aWR0aDsKKyAgICBtSGVpZ2h0ID0gaGVpZ2h0OworICAgIG1J
bnRlcm5hbEZvcm1hdCA9IGZvcm1hdDsKKyAgICBtU2FtcGxlcyA9IHN1cHBvcnRlZFNhbXBsZXM7
CisgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDExX2dsOjpDb252ZXJ0VGV4dHVyZUludGVybmFsRm9y
bWF0KHJlcXVlc3RlZEZvcm1hdCk7CisgICAgbVN1YnJlc291cmNlSW5kZXggPSBEM0QxMUNhbGNT
dWJyZXNvdXJjZSgwLCAwLCAxKTsKK30KKworUmVuZGVyVGFyZ2V0MTE6On5SZW5kZXJUYXJnZXQx
MSgpCit7CisgICAgaWYgKG1UZXh0dXJlKQorICAgIHsKKyAgICAgICAgbVRleHR1cmUtPlJlbGVh
c2UoKTsKKyAgICAgICAgbVRleHR1cmUgPSBOVUxMOworICAgIH0KKworICAgIGlmIChtUmVuZGVy
VGFyZ2V0KQorICAgIHsKKyAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworICAgICAg
ICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAobURlcHRoU3RlbmNpbCkK
KyAgICB7CisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKKyAgICAgICAgbURlcHRo
U3RlbmNpbCA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKG1TaGFkZXJSZXNvdXJjZSkKKyAgICB7
CisgICAgICAgIG1TaGFkZXJSZXNvdXJjZS0+UmVsZWFzZSgpOworICAgICAgICBtU2hhZGVyUmVz
b3VyY2UgPSBOVUxMOworICAgIH0KK30KKworUmVuZGVyVGFyZ2V0MTEgKlJlbmRlclRhcmdldDEx
OjptYWtlUmVuZGVyVGFyZ2V0MTEoUmVuZGVyVGFyZ2V0ICp0YXJnZXQpCit7CisgICAgQVNTRVJU
KEhBU19EWU5BTUlDX1RZUEUocng6OlJlbmRlclRhcmdldDExKiwgdGFyZ2V0KSk7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PHJ4OjpSZW5kZXJUYXJnZXQxMSo+KHRhcmdldCk7Cit9CisKK0lEM0Qx
MVRleHR1cmUyRCAqUmVuZGVyVGFyZ2V0MTE6OmdldFRleHR1cmUoKSBjb25zdAoreworICAgIHJl
dHVybiBtVGV4dHVyZTsKK30KKworSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqUmVuZGVyVGFyZ2V0
MTE6OmdldFJlbmRlclRhcmdldFZpZXcoKSBjb25zdAoreworICAgIHJldHVybiBtUmVuZGVyVGFy
Z2V0OworfQorCitJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpSZW5kZXJUYXJnZXQxMTo6Z2V0RGVw
dGhTdGVuY2lsVmlldygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7Cit9CisK
K0lEM0QxMVNoYWRlclJlc291cmNlVmlldyAqUmVuZGVyVGFyZ2V0MTE6OmdldFNoYWRlclJlc291
cmNlVmlldygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TaGFkZXJSZXNvdXJjZTsKK30KKwordW5z
aWduZWQgaW50IFJlbmRlclRhcmdldDExOjpnZXRTdWJyZXNvdXJjZUluZGV4KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbVN1YnJlc291cmNlSW5kZXg7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFy
Z2V0MTEuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkMTEvUmVuZGVyVGFyZ2V0MTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NzgyN2YyNjM5NzA3Mjk0Mjg0YTJj
Y2QzNDgxYzk3YmVkZTg5YjA3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJUYXJnZXQxMS5oCkBAIC0w
LDAgKzEsNTEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBSZW5kZXJUYXJnZXQxMS5oOiBEZWZpbmVz
IGEgRFgxMS1zcGVjaWZpYyB3cmFwcGVyIGZvciBJRDNEMTFWaWV3IHBvaW50ZXJzCisvLyByZXRh
aW5lZCBieSBSZW5kZXJidWZmZXJzLgorCisjaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5E
RVJUQVJHRVQxMV9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSVEFSR0VUMTFf
SF8KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQuaCIKKworbmFt
ZXNwYWNlIHJ4Cit7CitjbGFzcyBSZW5kZXJlcjsKK2NsYXNzIFJlbmRlcmVyMTE7CisKK2NsYXNz
IFJlbmRlclRhcmdldDExIDogcHVibGljIFJlbmRlclRhcmdldAoreworICBwdWJsaWM6CisgICAg
UmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3
ICpydHYsIElEM0QxMVRleHR1cmUyRCAqdGV4LCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNy
diwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAgIFJlbmRlclRhcmdldDExKFJl
bmRlcmVyICpyZW5kZXJlciwgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZHN2LCBJRDNEMTFUZXh0
dXJlMkQgKnRleCwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICBSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNh
bXBsZXMsIGJvb2wgZGVwdGgpOworICAgIHZpcnR1YWwgflJlbmRlclRhcmdldDExKCk7CisKKyAg
ICBzdGF0aWMgUmVuZGVyVGFyZ2V0MTEgKm1ha2VSZW5kZXJUYXJnZXQxMShSZW5kZXJUYXJnZXQg
KnJlbmRlclRhcmdldCk7CisKKyAgICBJRDNEMTFUZXh0dXJlMkQgKmdldFRleHR1cmUoKSBjb25z
dDsKKyAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpnZXRSZW5kZXJUYXJnZXRWaWV3KCkgY29u
c3Q7CisgICAgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZ2V0RGVwdGhTdGVuY2lsVmlldygpIGNv
bnN0OworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0U2hhZGVyUmVzb3VyY2VWaWV3
KCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBpbnQgZ2V0U3VicmVzb3VyY2VJbmRleCgpIGNvbnN0
OworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlclRhcmdl
dDExKTsKKworICAgIHVuc2lnbmVkIGludCBtU3VicmVzb3VyY2VJbmRleDsKKyAgICBJRDNEMTFU
ZXh0dXJlMkQgKm1UZXh0dXJlOworICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKm1SZW5kZXJU
YXJnZXQ7CisgICAgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqbURlcHRoU3RlbmNpbDsKKyAgICBJ
RDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKm1TaGFkZXJSZXNvdXJjZTsKKworICAgIFJlbmRlcmVy
MTEgKm1SZW5kZXJlcjsKK307CisKK30KKworI2VuZGlmIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5E
RVJUQVJHRVQxMV9IXwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVy
ZXIxMS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL1JlbmRlcmVyMTEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcyMmYwYzVhNDU1M2Q4MDUzMGFkN2Vk
OWI4YjU3NDU4NTVlNWUyMDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuY3BwCkBAIC0wLDAg
KzEsMzYyMyBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisvLyBSZW5kZXJlcjExLmNwcDogSW1wbGVtZW50cyBhIGJhY2stZW5kIHNwZWNpZmljIGNsYXNz
IGZvciB0aGUgRDNEMTEgcmVuZGVyZXIuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgor
I2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQnVm
ZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVy
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFyZ2V0MTEuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dhcENoYWluMTEuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW1hZ2UxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9WZXJ0ZXhCdWZmZXIxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9JbmRleEJ1ZmZlcjExLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL0J1ZmZlclN0b3JhZ2UxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9W
ZXJ0ZXhEYXRhTWFuYWdlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbmRleERh
dGFNYW5hZ2VyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1RleHR1cmVT
dG9yYWdlMTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUXVlcnkxMS5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9GZW5jZTExLmgiCisKKyNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3Vn
aDExdnMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21w
aWxlZC9wYXNzdGhyb3VnaHJnYmExMXBzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2IxMXBzLmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hsdW0x
MXBzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGls
ZWQvcGFzc3Rocm91Z2hsdW1hbHBoYTExcHMuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyMTF2cy5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyc2luZ2xlMTFwcy5oIgor
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFy
bXVsdGlwbGUxMXBzLmgiCisKKyNpbmNsdWRlICJsaWJFR0wvRGlzcGxheS5oIgorCisvLyBFbmFi
bGUgQU5HTEVfU0tJUF9EWEdJXzFfMl9DSEVDSyBpZiB0aGVyZSBpcyBub3QgYSBwb3NzaWJpbGl0
eSBvZiB1c2luZyBjcm9zcy1wcm9jZXNzCisvLyBIV05EcyBvciB0aGUgV2luZG93cyA3IFBsYXRm
b3JtIFVwZGF0ZSAoS0IyNjcwODM4KSBpcyBleHBlY3RlZCB0byBiZSBpbnN0YWxsZWQuCisjaWZu
ZGVmIEFOR0xFX1NLSVBfRFhHSV8xXzJfQ0hFQ0sKKyNkZWZpbmUgQU5HTEVfU0tJUF9EWEdJXzFf
Ml9DSEVDSyAwCisjZW5kaWYKKworI2lmZGVmIF9ERUJVRworLy8gdGhpcyBmbGFnIGVuYWJsZXMg
c3VwcHJlc3Npbmcgc29tZSBzcHVyaW91cyB3YXJuaW5ncyB0aGF0IHBvcCB1cCBpbiBjZXJ0YWlu
IFdlYkdMIHNhbXBsZXMKKy8vIGFuZCBjb25mb3JtYW5jZSB0ZXN0cy4gdG8gZW5hYmxlIGFsbCB3
YXJuaW5ncywgcmVtb3ZlIHRoaXMgZGVmaW5lLgorI2RlZmluZSBBTkdMRV9TVVBQUkVTU19EM0Qx
MV9IQVpBUkRfV0FSTklOR1MgMQorI2VuZGlmCisKK25hbWVzcGFjZSByeAoreworc3RhdGljIGNv
bnN0IERYR0lfRk9STUFUIFJlbmRlclRhcmdldEZvcm1hdHNbXSA9CisgICAgeworICAgICAgICBE
WEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STSwKKyAgICAgICAgRFhHSV9GT1JNQVRfUjhHOEI4QThf
VU5PUk0KKyAgICB9OworCitzdGF0aWMgY29uc3QgRFhHSV9GT1JNQVQgRGVwdGhTdGVuY2lsRm9y
bWF0c1tdID0KKyAgICB7CisgICAgICAgIERYR0lfRk9STUFUX1VOS05PV04sCisgICAgICAgIERY
R0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5ULAorICAgICAgICBEWEdJX0ZPUk1BVF9EMTZfVU5P
Uk0KKyAgICB9OworCitlbnVtCit7CisgICAgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGX1NN
NCA9IDE2Cit9OworCitSZW5kZXJlcjExOjpSZW5kZXJlcjExKGVnbDo6RGlzcGxheSAqZGlzcGxh
eSwgSERDIGhEYykgOiBSZW5kZXJlcihkaXNwbGF5KSwgbURjKGhEYykKK3sKKyAgICBtVmVydGV4
RGF0YU1hbmFnZXIgPSBOVUxMOworICAgIG1JbmRleERhdGFNYW5hZ2VyID0gTlVMTDsKKworICAg
IG1MaW5lTG9vcElCID0gTlVMTDsKKyAgICBtVHJpYW5nbGVGYW5JQiA9IE5VTEw7CisKKyAgICBt
Q29weVJlc291cmNlc0luaXRpYWxpemVkID0gZmFsc2U7CisgICAgbUNvcHlWQiA9IE5VTEw7Cisg
ICAgbUNvcHlTYW1wbGVyID0gTlVMTDsKKyAgICBtQ29weUlMID0gTlVMTDsKKyAgICBtQ29weVZT
ID0gTlVMTDsKKyAgICBtQ29weVJHQkFQUyA9IE5VTEw7CisgICAgbUNvcHlSR0JQUyA9IE5VTEw7
CisgICAgbUNvcHlMdW1QUyA9IE5VTEw7CisgICAgbUNvcHlMdW1BbHBoYVBTID0gTlVMTDsKKwor
ICAgIG1DbGVhclJlc291cmNlc0luaXRpYWxpemVkID0gZmFsc2U7CisgICAgbUNsZWFyVkIgPSBO
VUxMOworICAgIG1DbGVhcklMID0gTlVMTDsKKyAgICBtQ2xlYXJWUyA9IE5VTEw7CisgICAgbUNs
ZWFyU2luZ2xlUFMgPSBOVUxMOworICAgIG1DbGVhck11bHRpcGxlUFMgPSBOVUxMOworICAgIG1D
bGVhclNjaXNzb3JSUyA9IE5VTEw7CisgICAgbUNsZWFyTm9TY2lzc29yUlMgPSBOVUxMOworCisg
ICAgbVN5bmNRdWVyeSA9IE5VTEw7CisKKyAgICBtRDNkMTFNb2R1bGUgPSBOVUxMOworICAgIG1E
eGdpTW9kdWxlID0gTlVMTDsKKworICAgIG1EZXZpY2VMb3N0ID0gZmFsc2U7CisKKyAgICBtTWF4
U3VwcG9ydGVkU2FtcGxlcyA9IDA7CisKKyAgICBtRGV2aWNlID0gTlVMTDsKKyAgICBtRGV2aWNl
Q29udGV4dCA9IE5VTEw7CisgICAgbUR4Z2lBZGFwdGVyID0gTlVMTDsKKyAgICBtRHhnaUZhY3Rv
cnkgPSBOVUxMOworCisgICAgbURyaXZlckNvbnN0YW50QnVmZmVyVlMgPSBOVUxMOworICAgIG1E
cml2ZXJDb25zdGFudEJ1ZmZlclBTID0gTlVMTDsKKworICAgIG1CR1JBVGV4dHVyZVN1cHBvcnQg
PSBmYWxzZTsKKworICAgIG1Jc0dlb21ldHJ5U2hhZGVyQWN0aXZlID0gZmFsc2U7Cit9CisKK1Jl
bmRlcmVyMTE6On5SZW5kZXJlcjExKCkKK3sKKyAgICByZWxlYXNlKCk7Cit9CisKK1JlbmRlcmVy
MTEgKlJlbmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKFJlbmRlcmVyICpyZW5kZXJlcikKK3sKKyAg
ICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShyeDo6UmVuZGVyZXIxMSosIHJlbmRlcmVyKSk7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHJ4OjpSZW5kZXJlcjExKj4ocmVuZGVyZXIpOworfQorCisj
aWZuZGVmIF9fZDNkMTFfMV9oX18KKyNkZWZpbmUgRDNEMTFfTUVTU0FHRV9JRF9ERVZJQ0VfRFJB
V19SRU5ERVJUQVJHRVRWSUVXX05PVF9TRVQgKChEM0QxMV9NRVNTQUdFX0lEKTMxNDYwODEpCisj
ZW5kaWYKKworRUdMaW50IFJlbmRlcmVyMTE6OmluaXRpYWxpemUoKQoreworICAgIGlmICghaW5p
dGlhbGl6ZUNvbXBpbGVyKCkpCisgICAgeworICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFM
SVpFRDsKKyAgICB9CisKKyAgICBtRHhnaU1vZHVsZSA9IExvYWRMaWJyYXJ5KFRFWFQoImR4Z2ku
ZGxsIikpOworICAgIG1EM2QxMU1vZHVsZSA9IExvYWRMaWJyYXJ5KFRFWFQoImQzZDExLmRsbCIp
KTsKKworICAgIGlmIChtRDNkMTFNb2R1bGUgPT0gTlVMTCB8fCBtRHhnaU1vZHVsZSA9PSBOVUxM
KQorICAgIHsKKyAgICAgICAgRVJSKCJDb3VsZCBub3QgbG9hZCBEM0QxMSBvciBEWEdJIGxpYnJh
cnkgLSBhYm9ydGluZyFcbiIpOworICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsK
KyAgICB9CisKKyAgICAvLyBjcmVhdGUgdGhlIEQzRDExIGRldmljZQorICAgIEFTU0VSVChtRGV2
aWNlID09IE5VTEwpOworICAgIFBGTl9EM0QxMV9DUkVBVEVfREVWSUNFIEQzRDExQ3JlYXRlRGV2
aWNlID0gKFBGTl9EM0QxMV9DUkVBVEVfREVWSUNFKUdldFByb2NBZGRyZXNzKG1EM2QxMU1vZHVs
ZSwgIkQzRDExQ3JlYXRlRGV2aWNlIik7CisKKyAgICBpZiAoRDNEMTFDcmVhdGVEZXZpY2UgPT0g
TlVMTCkKKyAgICB7CisgICAgICAgIEVSUigiQ291bGQgbm90IHJldHJpZXZlIEQzRDExQ3JlYXRl
RGV2aWNlIGFkZHJlc3MgLSBhYm9ydGluZyFcbiIpOworICAgICAgICByZXR1cm4gRUdMX05PVF9J
TklUSUFMSVpFRDsKKyAgICB9CisKKyAgICBEM0RfRkVBVFVSRV9MRVZFTCBmZWF0dXJlTGV2ZWxz
W10gPQorICAgIHsKKyAgICAgICAgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMCwKKyAgICAgICAgRDNE
X0ZFQVRVUkVfTEVWRUxfMTBfMSwKKyAgICAgICAgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMCwKKyAg
ICB9OworCisgICAgSFJFU1VMVCByZXN1bHQgPSBTX09LOworCisjaWZkZWYgX0RFQlVHCisgICAg
cmVzdWx0ID0gRDNEMTFDcmVhdGVEZXZpY2UoTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBEM0RfRFJJVkVSX1RZUEVfSEFSRFdBUkUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0QxMV9DUkVB
VEVfREVWSUNFX0RFQlVHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVM
ZXZlbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlTaXplKGZlYXR1cmVM
ZXZlbHMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRDExX1NES19WRVJTSU9O
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtRGV2aWNlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZtRmVhdHVyZUxldmVsLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZtRGV2aWNlQ29udGV4dCk7CisKKyAgICBpZiAoIW1EZXZpY2UgfHwgRkFJTEVE
KHJlc3VsdCkpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCBjcmVhdGluZyBEZWJ1ZyBEM0Qx
MSBkZXZpY2UgLSBmYWxsaW5nIGJhY2sgdG8gcmVsZWFzZSBydW50aW1lLlxuIik7CisgICAgfQor
CisgICAgaWYgKCFtRGV2aWNlIHx8IEZBSUxFRChyZXN1bHQpKQorI2VuZGlmCisgICAgeworICAg
ICAgICByZXN1bHQgPSBEM0QxMUNyZWF0ZURldmljZShOVUxMLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBEM0RfRFJJVkVSX1RZUEVfSEFSRFdBUkUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVMZXZl
bHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5U2l6ZShmZWF0dXJl
TGV2ZWxzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEMTFfU0RLX1ZF
UlNJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtRGV2aWNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbUZlYXR1cmVMZXZlbCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1EZXZpY2VDb250ZXh0KTsKKworICAgICAgICBp
ZiAoIW1EZXZpY2UgfHwgRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVS
UigiQ291bGQgbm90IGNyZWF0ZSBEM0QxMSBkZXZpY2UgLSBhYm9ydGluZyFcbiIpOworICAgICAg
ICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7ICAgLy8gQ2xlYW51cCBkb25lIGJ5IGRl
c3RydWN0b3IgdGhyb3VnaCBnbERlc3Ryb3lSZW5kZXJlcgorICAgICAgICB9CisgICAgfQorCisj
aWYgIUFOR0xFX1NLSVBfRFhHSV8xXzJfQ0hFQ0sKKyAgICAvLyBJbiBvcmRlciB0byBjcmVhdGUg
YSBzd2FwIGNoYWluIGZvciBhbiBIV05EIG93bmVkIGJ5IGFub3RoZXIgcHJvY2VzcywgRFhHSSAx
LjIgaXMgcmVxdWlyZWQuCisgICAgLy8gVGhlIGVhc2llc3Qgd2F5IHRvIGNoZWNrIGlzIHRvIHF1
ZXJ5IGZvciBhIElEWEdJRGV2aWNlMi4KKyAgICBib29sIHJlcXVpcmVEWEdJMV8yID0gZmFsc2U7
CisgICAgSFdORCBod25kID0gV2luZG93RnJvbURDKG1EYyk7CisgICAgaWYgKGh3bmQpCisgICAg
eworICAgICAgICBEV09SRCBjdXJyZW50UHJvY2Vzc0lkID0gR2V0Q3VycmVudFByb2Nlc3NJZCgp
OworICAgICAgICBEV09SRCB3bmRQcm9jZXNzSWQ7CisgICAgICAgIEdldFdpbmRvd1RocmVhZFBy
b2Nlc3NJZChod25kLCAmd25kUHJvY2Vzc0lkKTsKKyAgICAgICAgcmVxdWlyZURYR0kxXzIgPSAo
Y3VycmVudFByb2Nlc3NJZCAhPSB3bmRQcm9jZXNzSWQpOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICByZXF1aXJlRFhHSTFfMiA9IHRydWU7CisgICAgfQorCisgICAgaWYgKHJlcXVp
cmVEWEdJMV8yKQorICAgIHsKKyAgICAgICAgSURYR0lEZXZpY2UyICpkeGdpRGV2aWNlMiA9IE5V
TEw7CisgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElE
WEdJRGV2aWNlMiksICh2b2lkKiopJmR4Z2lEZXZpY2UyKTsKKyAgICAgICAgaWYgKEZBSUxFRChy
ZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkRYR0kgMS4yIHJlcXVpcmVkIHRv
IHByZXNlbnQgdG8gSFdORHMgb3duZWQgYnkgYW5vdGhlciBwcm9jZXNzLlxuIik7CisgICAgICAg
ICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsKKyAgICAgICAgfQorICAgICAgICBTYWZl
UmVsZWFzZShkeGdpRGV2aWNlMik7CisgICAgfQorI2VuZGlmCisKKyAgICBJRFhHSURldmljZSAq
ZHhnaURldmljZSA9IE5VTEw7CisgICAgcmVzdWx0ID0gbURldmljZS0+UXVlcnlJbnRlcmZhY2Uo
X191dWlkb2YoSURYR0lEZXZpY2UpLCAodm9pZCoqKSZkeGdpRGV2aWNlKTsKKworICAgIGlmIChG
QUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEVSUigiQ291bGQgbm90IHF1ZXJ5IERYR0kg
ZGV2aWNlIC0gYWJvcnRpbmchXG4iKTsKKyAgICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElBTEla
RUQ7CisgICAgfQorCisgICAgcmVzdWx0ID0gZHhnaURldmljZS0+R2V0UGFyZW50KF9fdXVpZG9m
KElEWEdJQWRhcHRlciksICh2b2lkKiopJm1EeGdpQWRhcHRlcik7CisKKyAgICBpZiAoRkFJTEVE
KHJlc3VsdCkpCisgICAgeworICAgICAgICBFUlIoIkNvdWxkIG5vdCByZXRyaWV2ZSBEWEdJIGFk
YXB0ZXIgLSBhYm9ydGluZyFcbiIpOworICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpF
RDsKKyAgICB9CisKKyAgICBkeGdpRGV2aWNlLT5SZWxlYXNlKCk7CisKKyAgICBtRHhnaUFkYXB0
ZXItPkdldERlc2MoJm1BZGFwdGVyRGVzY3JpcHRpb24pOworICAgIG1lbXNldChtRGVzY3JpcHRp
b24sIDAsIHNpemVvZihtRGVzY3JpcHRpb24pKTsKKyAgICB3Y3N0b21icyhtRGVzY3JpcHRpb24s
IG1BZGFwdGVyRGVzY3JpcHRpb24uRGVzY3JpcHRpb24sIHNpemVvZihtRGVzY3JpcHRpb24pIC0g
MSk7CisKKyAgICByZXN1bHQgPSBtRHhnaUFkYXB0ZXItPkdldFBhcmVudChfX3V1aWRvZihJRFhH
SUZhY3RvcnkpLCAodm9pZCoqKSZtRHhnaUZhY3RvcnkpOworCisgICAgaWYgKCFtRHhnaUZhY3Rv
cnkgfHwgRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVh
dGUgRFhHSSBmYWN0b3J5IC0gYWJvcnRpbmchXG4iKTsKKyAgICAgICAgcmV0dXJuIEVHTF9OT1Rf
SU5JVElBTElaRUQ7CisgICAgfQorCisgICAgLy8gRGlzYWJsZSBzb21lIHNwdXJpb3VzIEQzRDEx
IGRlYnVnIHdhcm5pbmdzIHRvIHByZXZlbnQgdGhlbSBmcm9tIGZsb29kaW5nIHRoZSBvdXRwdXQg
bG9nCisjaWYgZGVmaW5lZChBTkdMRV9TVVBQUkVTU19EM0QxMV9IQVpBUkRfV0FSTklOR1MpICYm
IGRlZmluZWQoX0RFQlVHKQorICAgIElEM0QxMUluZm9RdWV1ZSAqaW5mb1F1ZXVlOworICAgIHJl
c3VsdCA9IG1EZXZpY2UtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEM0QxMUluZm9RdWV1ZSks
ICAodm9pZCAqKikmaW5mb1F1ZXVlKTsKKworICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAg
ICB7CisgICAgICAgIEQzRDExX01FU1NBR0VfSUQgaGlkZU1lc3NhZ2VzW10gPQorICAgICAgICB7
CisgICAgICAgICAgICBEM0QxMV9NRVNTQUdFX0lEX0RFVklDRV9EUkFXX1JFTkRFUlRBUkdFVFZJ
RVdfTk9UX1NFVAorICAgICAgICB9OworCisgICAgICAgIEQzRDExX0lORk9fUVVFVUVfRklMVEVS
IGZpbHRlciA9IHswfTsKKyAgICAgICAgZmlsdGVyLkRlbnlMaXN0Lk51bUlEcyA9IEFycmF5U2l6
ZShoaWRlTWVzc2FnZXMpOworICAgICAgICBmaWx0ZXIuRGVueUxpc3QucElETGlzdCA9IGhpZGVN
ZXNzYWdlczsKKworICAgICAgICBpbmZvUXVldWUtPkFkZFN0b3JhZ2VGaWx0ZXJFbnRyaWVzKCZm
aWx0ZXIpOworCisgICAgICAgIGluZm9RdWV1ZS0+UmVsZWFzZSgpOworICAgIH0KKyNlbmRpZgor
CisgICAgdW5zaWduZWQgaW50IG1heFN1cHBvcnRlZFNhbXBsZXMgPSAwOworICAgIHVuc2lnbmVk
IGludCBydEZvcm1hdENvdW50ID0gQXJyYXlTaXplKFJlbmRlclRhcmdldEZvcm1hdHMpOworICAg
IHVuc2lnbmVkIGludCBkc0Zvcm1hdENvdW50ID0gQXJyYXlTaXplKERlcHRoU3RlbmNpbEZvcm1h
dHMpOworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcnRGb3JtYXRDb3VudCArIGRz
Rm9ybWF0Q291bnQ7ICsraSkKKyAgICB7CisgICAgICAgIERYR0lfRk9STUFUIGZvcm1hdCA9IChp
IDwgcnRGb3JtYXRDb3VudCkgPyBSZW5kZXJUYXJnZXRGb3JtYXRzW2ldIDogRGVwdGhTdGVuY2ls
Rm9ybWF0c1tpIC0gcnRGb3JtYXRDb3VudF07CisgICAgICAgIGlmIChmb3JtYXQgIT0gRFhHSV9G
T1JNQVRfVU5LTk9XTikKKyAgICAgICAgeworICAgICAgICAgICAgVUlOVCBmb3JtYXRTdXBwb3J0
OworICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KGZvcm1h
dCwgJmZvcm1hdFN1cHBvcnQpOworICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpICYm
IChmb3JtYXRTdXBwb3J0ICYgRDNEMTFfRk9STUFUX1NVUFBPUlRfTVVMVElTQU1QTEVfUkVOREVS
VEFSR0VUKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNdWx0aXNhbXBsZVN1cHBv
cnRJbmZvIHN1cHBvcnRJbmZvOworCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aiA9IDE7IGogPD0gRDNEMTFfTUFYX01VTFRJU0FNUExFX1NBTVBMRV9DT1VOVDsgaisrKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q2hl
Y2tNdWx0aXNhbXBsZVF1YWxpdHlMZXZlbHMoZm9ybWF0LCBqLCAmc3VwcG9ydEluZm8ucXVhbGl0
eUxldmVsc1tqIC0gMV0pOworICAgICAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3Vs
dCkgJiYgc3VwcG9ydEluZm8ucXVhbGl0eUxldmVsc1tqIC0gMV0gPiAwKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXhTdXBwb3J0ZWRTYW1wbGVzID0g
c3RkOjptYXgoaiwgbWF4U3VwcG9ydGVkU2FtcGxlcyk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzdXBwb3J0SW5mby5xdWFsaXR5TGV2ZWxzW2ogLSAxXSA9IDA7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBtTXVsdGlzYW1wbGVTdXBwb3J0TWFwLmluc2VydChzdGQ6Om1ha2VfcGFpcihmb3JtYXQsIHN1
cHBvcnRJbmZvKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgbU1heFN1
cHBvcnRlZFNhbXBsZXMgPSBtYXhTdXBwb3J0ZWRTYW1wbGVzOworCisgICAgaW5pdGlhbGl6ZURl
dmljZSgpOworCisgICAgLy8gQkdSQSB0ZXh0dXJlIHN1cHBvcnQgaXMgb3B0aW9uYWwgaW4gZmVh
dHVyZSBsZXZlbHMgMTAgYW5kIDEwXzEKKyAgICBVSU5UIGZvcm1hdFN1cHBvcnQ7CisgICAgcmVz
dWx0ID0gbURldmljZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KERYR0lfRk9STUFUX0I4RzhSOEE4X1VO
T1JNLCAmZm9ybWF0U3VwcG9ydCk7CisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAg
ICAgICAgRVJSKCJFcnJvciBjaGVja2luZyBCR1JBIGZvcm1hdCBzdXBwb3J0OiAweCUwOFgiLCBy
ZXN1bHQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjb25zdCBpbnQgZmxhZ3Mg
PSAoRDNEMTFfRk9STUFUX1NVUFBPUlRfVEVYVFVSRTJEIHwgRDNEMTFfRk9STUFUX1NVUFBPUlRf
UkVOREVSX1RBUkdFVCk7CisgICAgICAgIG1CR1JBVGV4dHVyZVN1cHBvcnQgPSAoZm9ybWF0U3Vw
cG9ydCAmIGZsYWdzKSA9PSBmbGFnczsKKyAgICB9CisKKyAgICAvLyBDaGVjayBmbG9hdGluZyBw
b2ludCB0ZXh0dXJlIHN1cHBvcnQKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHJlcXVp
cmVkVGV4dHVyZUZsYWdzID0gRDNEMTFfRk9STUFUX1NVUFBPUlRfVEVYVFVSRTJEIHwgRDNEMTFf
Rk9STUFUX1NVUFBPUlRfVEVYVFVSRUNVQkU7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGlu
dCByZXF1aXJlZFJlbmRlcmFibGVGbGFncyA9IEQzRDExX0ZPUk1BVF9TVVBQT1JUX1JFTkRFUl9U
QVJHRVQ7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCByZXF1aXJlZEZpbHRlckZsYWdz
ID0gRDNEMTFfRk9STUFUX1NVUFBPUlRfU0hBREVSX1NBTVBMRTsKKworICAgIERYR0lfRk9STUFU
IGZsb2F0MTZGb3JtYXRzW10gPQorICAgIHsKKyAgICAgICAgRFhHSV9GT1JNQVRfUjE2X0ZMT0FU
LAorICAgICAgICBEWEdJX0ZPUk1BVF9SMTZHMTZfRkxPQVQsCisgICAgICAgIERYR0lfRk9STUFU
X1IxNkcxNkIxNkExNl9GTE9BVCwKKyAgICB9OworCisgICAgRFhHSV9GT1JNQVQgZmxvYXQzMkZv
cm1hdHNbXSA9CisgICAgeworICAgICAgICBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsCisgICAgICAg
IERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwKKyAgICAgICAgRFhHSV9GT1JNQVRfUjMyRzMyQjMy
QTMyX0ZMT0FULAorICAgIH07CisKKyAgICBtRmxvYXQxNlRleHR1cmVTdXBwb3J0ID0gdHJ1ZTsK
KyAgICBtRmxvYXQxNkZpbHRlclN1cHBvcnQgPSB0cnVlOworICAgIG1GbG9hdDE2UmVuZGVyU3Vw
cG9ydCA9IHRydWU7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUo
ZmxvYXQxNkZvcm1hdHMpOyBpKyspCisgICAgeworICAgICAgICBpZiAoU1VDQ0VFREVEKG1EZXZp
Y2UtPkNoZWNrRm9ybWF0U3VwcG9ydChmbG9hdDE2Rm9ybWF0c1tpXSwgJmZvcm1hdFN1cHBvcnQp
KSkKKyAgICAgICAgeworICAgICAgICAgICAgbUZsb2F0MTZUZXh0dXJlU3VwcG9ydCA9IG1GbG9h
dDE2VGV4dHVyZVN1cHBvcnQgJiYgKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZFRleHR1cmVGbGFn
cykgPT0gcmVxdWlyZWRUZXh0dXJlRmxhZ3M7CisgICAgICAgICAgICBtRmxvYXQxNkZpbHRlclN1
cHBvcnQgPSBtRmxvYXQxNkZpbHRlclN1cHBvcnQgJiYgKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJl
ZEZpbHRlckZsYWdzKSA9PSByZXF1aXJlZEZpbHRlckZsYWdzOworICAgICAgICAgICAgbUZsb2F0
MTZSZW5kZXJTdXBwb3J0ID0gbUZsb2F0MTZSZW5kZXJTdXBwb3J0ICYmIChmb3JtYXRTdXBwb3J0
ICYgcmVxdWlyZWRSZW5kZXJhYmxlRmxhZ3MpID09IHJlcXVpcmVkUmVuZGVyYWJsZUZsYWdzOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbUZsb2F0MTZU
ZXh0dXJlU3VwcG9ydCA9IGZhbHNlOworICAgICAgICAgICAgbUZsb2F0MTZSZW5kZXJTdXBwb3J0
ID0gZmFsc2U7CisgICAgICAgICAgICBtRmxvYXQxNkZpbHRlclN1cHBvcnQgPSBmYWxzZTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQgPSB0cnVlOworICAg
IG1GbG9hdDMyRmlsdGVyU3VwcG9ydCA9IHRydWU7CisgICAgbUZsb2F0MzJSZW5kZXJTdXBwb3J0
ID0gdHJ1ZTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShmbG9h
dDMyRm9ybWF0cyk7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChTVUNDRUVERUQobURldmljZS0+
Q2hlY2tGb3JtYXRTdXBwb3J0KGZsb2F0MzJGb3JtYXRzW2ldLCAmZm9ybWF0U3VwcG9ydCkpKQor
ICAgICAgICB7CisgICAgICAgICAgICBtRmxvYXQzMlRleHR1cmVTdXBwb3J0ID0gbUZsb2F0MzJU
ZXh0dXJlU3VwcG9ydCAmJiAoZm9ybWF0U3VwcG9ydCAmIHJlcXVpcmVkVGV4dHVyZUZsYWdzKSA9
PSByZXF1aXJlZFRleHR1cmVGbGFnczsKKyAgICAgICAgICAgIG1GbG9hdDMyRmlsdGVyU3VwcG9y
dCA9IG1GbG9hdDMyRmlsdGVyU3VwcG9ydCAmJiAoZm9ybWF0U3VwcG9ydCAmIHJlcXVpcmVkRmls
dGVyRmxhZ3MpID09IHJlcXVpcmVkRmlsdGVyRmxhZ3M7CisgICAgICAgICAgICBtRmxvYXQzMlJl
bmRlclN1cHBvcnQgPSBtRmxvYXQzMlJlbmRlclN1cHBvcnQgJiYgKGZvcm1hdFN1cHBvcnQgJiBy
ZXF1aXJlZFJlbmRlcmFibGVGbGFncykgPT0gcmVxdWlyZWRSZW5kZXJhYmxlRmxhZ3M7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtRmxvYXQzMlRleHR1
cmVTdXBwb3J0ID0gZmFsc2U7CisgICAgICAgICAgICBtRmxvYXQzMkZpbHRlclN1cHBvcnQgPSBm
YWxzZTsKKyAgICAgICAgICAgIG1GbG9hdDMyUmVuZGVyU3VwcG9ydCA9IGZhbHNlOworICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gQ2hlY2sgY29tcHJlc3NlZCB0ZXh0dXJlIHN1cHBvcnQKKyAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgcmVxdWlyZWRDb21wcmVzc2VkVGV4dHVyZUZsYWdzID0gRDNE
MTFfRk9STUFUX1NVUFBPUlRfVEVYVFVSRTJEOworCisgICAgaWYgKFNVQ0NFRURFRChtRGV2aWNl
LT5DaGVja0Zvcm1hdFN1cHBvcnQoRFhHSV9GT1JNQVRfQkMxX1VOT1JNLCAmZm9ybWF0U3VwcG9y
dCkpKQorICAgIHsKKyAgICAgICAgbURYVDFUZXh0dXJlU3VwcG9ydCA9IChmb3JtYXRTdXBwb3J0
ICYgcmVxdWlyZWRDb21wcmVzc2VkVGV4dHVyZUZsYWdzKSA9PSByZXF1aXJlZENvbXByZXNzZWRU
ZXh0dXJlRmxhZ3M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1EWFQxVGV4dHVy
ZVN1cHBvcnQgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoU1VDQ0VFREVEKG1EZXZpY2UtPkNo
ZWNrRm9ybWF0U3VwcG9ydChEWEdJX0ZPUk1BVF9CQzNfVU5PUk0sICZmb3JtYXRTdXBwb3J0KSkp
CisgICAgeworICAgICAgICBtRFhUM1RleHR1cmVTdXBwb3J0ID0gKGZvcm1hdFN1cHBvcnQgJiBy
ZXF1aXJlZENvbXByZXNzZWRUZXh0dXJlRmxhZ3MpID09IHJlcXVpcmVkQ29tcHJlc3NlZFRleHR1
cmVGbGFnczsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbURYVDNUZXh0dXJlU3Vw
cG9ydCA9IGZhbHNlOworICAgIH0KKworICAgIGlmIChTVUNDRUVERUQobURldmljZS0+Q2hlY2tG
b3JtYXRTdXBwb3J0KERYR0lfRk9STUFUX0JDNV9VTk9STSwgJmZvcm1hdFN1cHBvcnQpKSkKKyAg
ICB7CisgICAgICAgIG1EWFQ1VGV4dHVyZVN1cHBvcnQgPSAoZm9ybWF0U3VwcG9ydCAmIHJlcXVp
cmVkQ29tcHJlc3NlZFRleHR1cmVGbGFncykgPT0gcmVxdWlyZWRDb21wcmVzc2VkVGV4dHVyZUZs
YWdzOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRFhUNVRleHR1cmVTdXBwb3J0
ID0gZmFsc2U7CisgICAgfQorCisgICAgLy8gQ2hlY2sgZGVwdGggdGV4dHVyZSBzdXBwb3J0Cisg
ICAgRFhHSV9GT1JNQVQgZGVwdGhUZXh0dXJlRm9ybWF0c1tdID0KKyAgICB7CisgICAgICAgIERY
R0lfRk9STUFUX0QxNl9VTk9STSwKKyAgICAgICAgRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJ
TlQsCisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcmVxdWlyZWREZXB0
aFRleHR1cmVGbGFncyA9IEQzRDExX0ZPUk1BVF9TVVBQT1JUX0RFUFRIX1NURU5DSUwgfAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQz
RDExX0ZPUk1BVF9TVVBQT1JUX1RFWFRVUkUyRDsKKworICAgIG1EZXB0aFRleHR1cmVTdXBwb3J0
ID0gdHJ1ZTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShkZXB0
aFRleHR1cmVGb3JtYXRzKTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKFNVQ0NFRURFRChtRGV2
aWNlLT5DaGVja0Zvcm1hdFN1cHBvcnQoZGVwdGhUZXh0dXJlRm9ybWF0c1tpXSwgJmZvcm1hdFN1
cHBvcnQpKSkKKyAgICAgICAgeworICAgICAgICAgICAgbURlcHRoVGV4dHVyZVN1cHBvcnQgPSBt
RGVwdGhUZXh0dXJlU3VwcG9ydCAmJiAoKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZERlcHRoVGV4
dHVyZUZsYWdzKSA9PSByZXF1aXJlZERlcHRoVGV4dHVyZUZsYWdzKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXB0aFRleHR1cmVTdXBwb3J0ID0g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gRUdMX1NVQ0NFU1M7Cit9CisK
Ky8vIGRvIGFueSBvbmUtdGltZSBkZXZpY2UgaW5pdGlhbGl6YXRpb24KKy8vIE5PVEU6IHRoaXMg
aXMgYWxzbyBuZWVkZWQgYWZ0ZXIgYSBkZXZpY2UgbG9zdC9yZXNldAorLy8gdG8gcmVzZXQgdGhl
IHNjZW5lIHN0YXR1cyBhbmQgZW5zdXJlIHRoZSBkZWZhdWx0IHN0YXRlcyBhcmUgcmVzZXQuCit2
b2lkIFJlbmRlcmVyMTE6OmluaXRpYWxpemVEZXZpY2UoKQoreworICAgIG1TdGF0ZUNhY2hlLmlu
aXRpYWxpemUobURldmljZSk7CisgICAgbUlucHV0TGF5b3V0Q2FjaGUuaW5pdGlhbGl6ZShtRGV2
aWNlLCBtRGV2aWNlQ29udGV4dCk7CisKKyAgICBBU1NFUlQoIW1WZXJ0ZXhEYXRhTWFuYWdlciAm
JiAhbUluZGV4RGF0YU1hbmFnZXIpOworICAgIG1WZXJ0ZXhEYXRhTWFuYWdlciA9IG5ldyBWZXJ0
ZXhEYXRhTWFuYWdlcih0aGlzKTsKKyAgICBtSW5kZXhEYXRhTWFuYWdlciA9IG5ldyBJbmRleERh
dGFNYW5hZ2VyKHRoaXMpOworCisgICAgbWFya0FsbFN0YXRlRGlydHkoKTsKK30KKworaW50IFJl
bmRlcmVyMTE6OmdlbmVyYXRlQ29uZmlncyhDb25maWdEZXNjICoqY29uZmlnRGVzY0xpc3QpCit7
CisgICAgdW5zaWduZWQgaW50IG51bVJlbmRlckZvcm1hdHMgPSBBcnJheVNpemUoUmVuZGVyVGFy
Z2V0Rm9ybWF0cyk7CisgICAgdW5zaWduZWQgaW50IG51bURlcHRoRm9ybWF0cyA9IEFycmF5U2l6
ZShEZXB0aFN0ZW5jaWxGb3JtYXRzKTsKKyAgICAoKmNvbmZpZ0Rlc2NMaXN0KSA9IG5ldyBDb25m
aWdEZXNjW251bVJlbmRlckZvcm1hdHMgKiBudW1EZXB0aEZvcm1hdHNdOworICAgIGludCBudW1D
b25maWdzID0gMDsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGludCBmb3JtYXRJbmRleCA9IDA7
IGZvcm1hdEluZGV4IDwgbnVtUmVuZGVyRm9ybWF0czsgZm9ybWF0SW5kZXgrKykKKyAgICB7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGRlcHRoU3RlbmNpbEluZGV4ID0gMDsgZGVwdGhTdGVu
Y2lsSW5kZXggPCBudW1EZXB0aEZvcm1hdHM7IGRlcHRoU3RlbmNpbEluZGV4KyspCisgICAgICAg
IHsKKyAgICAgICAgICAgIERYR0lfRk9STUFUIHJlbmRlclRhcmdldEZvcm1hdCA9IFJlbmRlclRh
cmdldEZvcm1hdHNbZm9ybWF0SW5kZXhdOworCisgICAgICAgICAgICBVSU5UIGZvcm1hdFN1cHBv
cnQgPSAwOworICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DaGVja0Zvcm1h
dFN1cHBvcnQocmVuZGVyVGFyZ2V0Rm9ybWF0LCAmZm9ybWF0U3VwcG9ydCk7CisKKyAgICAgICAg
ICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSAmJiAoZm9ybWF0U3VwcG9ydCAmIEQzRDExX0ZPUk1B
VF9TVVBQT1JUX1JFTkRFUl9UQVJHRVQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IERYR0lfRk9STUFUIGRlcHRoU3RlbmNpbEZvcm1hdCA9IERlcHRoU3RlbmNpbEZvcm1hdHNbZGVw
dGhTdGVuY2lsSW5kZXhdOworCisgICAgICAgICAgICAgICAgYm9vbCBkZXB0aFN0ZW5jaWxGb3Jt
YXRPSyA9IHRydWU7CisKKyAgICAgICAgICAgICAgICBpZiAoZGVwdGhTdGVuY2lsRm9ybWF0ICE9
IERYR0lfRk9STUFUX1VOS05PV04pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBVSU5UIGZvcm1hdFN1cHBvcnQgPSAwOworICAgICAgICAgICAgICAgICAgICByZXN1bHQg
PSBtRGV2aWNlLT5DaGVja0Zvcm1hdFN1cHBvcnQoZGVwdGhTdGVuY2lsRm9ybWF0LCAmZm9ybWF0
U3VwcG9ydCk7CisgICAgICAgICAgICAgICAgICAgIGRlcHRoU3RlbmNpbEZvcm1hdE9LID0gU1VD
Q0VFREVEKHJlc3VsdCkgJiYgKGZvcm1hdFN1cHBvcnQgJiBEM0QxMV9GT1JNQVRfU1VQUE9SVF9E
RVBUSF9TVEVOQ0lMKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAo
ZGVwdGhTdGVuY2lsRm9ybWF0T0spCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBDb25maWdEZXNjIG5ld0NvbmZpZzsKKyAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmln
LnJlbmRlclRhcmdldEZvcm1hdCA9IGQzZDExX2dsOjpDb252ZXJ0QmFja0J1ZmZlckZvcm1hdChy
ZW5kZXJUYXJnZXRGb3JtYXQpOworICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcuZGVwdGhT
dGVuY2lsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnREZXB0aFN0ZW5jaWxGb3JtYXQoZGVwdGhT
dGVuY2lsRm9ybWF0KTsKKyAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLm11bHRpU2FtcGxl
ID0gMDsgICAgIC8vIEZJWE1FOiBlbnVtZXJhdGUgbXVsdGktc2FtcGxpbmcKKyAgICAgICAgICAg
ICAgICAgICAgbmV3Q29uZmlnLmZhc3RDb25maWcgPSB0cnVlOyAgIC8vIEFzc3VtZSBhbGwgRFgx
MSBmb3JtYXQgY29udmVyc2lvbnMgdG8gYmUgZmFzdAorCisgICAgICAgICAgICAgICAgICAgICgq
Y29uZmlnRGVzY0xpc3QpW251bUNvbmZpZ3MrK10gPSBuZXdDb25maWc7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG51bUNv
bmZpZ3M7Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6ZGVsZXRlQ29uZmlncyhDb25maWdEZXNjICpj
b25maWdEZXNjTGlzdCkKK3sKKyAgICBkZWxldGUgW10gKGNvbmZpZ0Rlc2NMaXN0KTsKK30KKwor
dm9pZCBSZW5kZXJlcjExOjpzeW5jKGJvb2wgYmxvY2spCit7CisgICAgaWYgKGJsb2NrKQorICAg
IHsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQ7CisKKyAgICAgICAgaWYgKCFtU3luY1F1ZXJ5KQor
ICAgICAgICB7CisgICAgICAgICAgICBEM0QxMV9RVUVSWV9ERVNDIHF1ZXJ5RGVzYzsKKyAgICAg
ICAgICAgIHF1ZXJ5RGVzYy5RdWVyeSA9IEQzRDExX1FVRVJZX0VWRU5UOworICAgICAgICAgICAg
cXVlcnlEZXNjLk1pc2NGbGFncyA9IDA7CisKKyAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2Ut
PkNyZWF0ZVF1ZXJ5KCZxdWVyeURlc2MsICZtU3luY1F1ZXJ5KTsKKyAgICAgICAgICAgIEFTU0VS
VChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIH0KKworICAgICAgICBtRGV2aWNlQ29udGV4
dC0+RW5kKG1TeW5jUXVlcnkpOworICAgICAgICBtRGV2aWNlQ29udGV4dC0+Rmx1c2goKTsKKwor
ICAgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlQ29udGV4
dC0+R2V0RGF0YShtU3luY1F1ZXJ5LCBOVUxMLCAwLCBEM0QxMV9BU1lOQ19HRVREQVRBX0RPTk9U
RkxVU0gpOworCisgICAgICAgICAgICAvLyBLZWVwIHBvbGxpbmcsIGJ1dCBhbGxvdyBvdGhlciB0
aHJlYWRzIHRvIGRvIHNvbWV0aGluZyB1c2VmdWwgZmlyc3QKKyAgICAgICAgICAgIFNsZWVwKDAp
OworCisgICAgICAgICAgICBpZiAodGVzdERldmljZUxvc3QodHJ1ZSkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHdoaWxlIChyZXN1bHQgPT0gU19GQUxTRSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIG1EZXZpY2VDb250ZXh0LT5GbHVzaCgpOworICAgIH0KK30KKworU3dhcENoYWluICpS
ZW5kZXJlcjExOjpjcmVhdGVTd2FwQ2hhaW4oSFdORCB3aW5kb3csIEhBTkRMRSBzaGFyZUhhbmRs
ZSwgR0xlbnVtIGJhY2tCdWZmZXJGb3JtYXQsIEdMZW51bSBkZXB0aEJ1ZmZlckZvcm1hdCkKK3sK
KyAgICByZXR1cm4gbmV3IHJ4OjpTd2FwQ2hhaW4xMSh0aGlzLCB3aW5kb3csIHNoYXJlSGFuZGxl
LCBiYWNrQnVmZmVyRm9ybWF0LCBkZXB0aEJ1ZmZlckZvcm1hdCk7Cit9CisKK3ZvaWQgUmVuZGVy
ZXIxMTo6c2V0U2FtcGxlclN0YXRlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGNv
bnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkKK3sKKyAgICBpZiAodHlwZSA9PSBn
bDo6U0FNUExFUl9QSVhFTCkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXgg
Pj0gZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKQorICAgICAgICB7CisgICAgICAgICAgICBF
UlIoIlBpeGVsIHNoYWRlciBzYW1wbGVyIGluZGV4ICVpIGlzIG5vdCB2YWxpZC4iLCBpbmRleCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAobUZvcmNlU2V0
UGl4ZWxTYW1wbGVyU3RhdGVzW2luZGV4XSB8fCBtZW1jbXAoJnNhbXBsZXJTdGF0ZSwgJm1DdXJQ
aXhlbFNhbXBsZXJTdGF0ZXNbaW5kZXhdLCBzaXplb2YoZ2w6OlNhbXBsZXJTdGF0ZSkpICE9IDAp
CisgICAgICAgIHsKKyAgICAgICAgICAgIElEM0QxMVNhbXBsZXJTdGF0ZSAqZHhTYW1wbGVyU3Rh
dGUgPSBtU3RhdGVDYWNoZS5nZXRTYW1wbGVyU3RhdGUoc2FtcGxlclN0YXRlKTsKKworICAgICAg
ICAgICAgaWYgKCFkeFNhbXBsZXJTdGF0ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBFUlIoIk5VTEwgc2FtcGxlciBzdGF0ZSByZXR1cm5lZCBieSBSZW5kZXJTdGF0ZUNhY2hlOjpn
ZXRTYW1wbGVyU3RhdGUsIHNldHRpbmcgdGhlIGRlZmF1bHQiCisgICAgICAgICAgICAgICAgICAg
ICJzYW1wbGVyIHN0YXRlIGZvciBwaXhlbCBzaGFkZXJzIGF0IHNsb3QgJWkuIiwgaW5kZXgpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTYW1wbGVy
cyhpbmRleCwgMSwgJmR4U2FtcGxlclN0YXRlKTsKKworICAgICAgICAgICAgbUN1clBpeGVsU2Ft
cGxlclN0YXRlc1tpbmRleF0gPSBzYW1wbGVyU3RhdGU7CisgICAgICAgIH0KKworICAgICAgICBt
Rm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0ZXNbaW5kZXhdID0gZmFsc2U7CisgICAgfQorICAgIGVs
c2UgaWYgKHR5cGUgPT0gZ2w6OlNBTVBMRVJfVkVSVEVYKQorICAgIHsKKyAgICAgICAgaWYgKGlu
ZGV4IDwgMCB8fCBpbmRleCA+PSAoaW50KWdldE1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiVmVydGV4IHNoYWRlciBzYW1wbGVyIGluZGV4
ICVpIGlzIG5vdCB2YWxpZC4iLCBpbmRleCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpZiAobUZvcmNlU2V0VmVydGV4U2FtcGxlclN0YXRlc1tpbmRleF0gfHwg
bWVtY21wKCZzYW1wbGVyU3RhdGUsICZtQ3VyVmVydGV4U2FtcGxlclN0YXRlc1tpbmRleF0sIHNp
emVvZihnbDo6U2FtcGxlclN0YXRlKSkgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgSUQz
RDExU2FtcGxlclN0YXRlICpkeFNhbXBsZXJTdGF0ZSA9IG1TdGF0ZUNhY2hlLmdldFNhbXBsZXJT
dGF0ZShzYW1wbGVyU3RhdGUpOworCisgICAgICAgICAgICBpZiAoIWR4U2FtcGxlclN0YXRlKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEVSUigiTlVMTCBzYW1wbGVyIHN0YXRlIHJl
dHVybmVkIGJ5IFJlbmRlclN0YXRlQ2FjaGU6OmdldFNhbXBsZXJTdGF0ZSwgc2V0dGluZyB0aGUg
ZGVmYXVsdCIKKyAgICAgICAgICAgICAgICAgICAgInNhbXBsZXIgc3RhdGUgZm9yIHZlcnRleCBz
aGFkZXJzIGF0IHNsb3QgJWkuIiwgaW5kZXgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBtRGV2aWNlQ29udGV4dC0+VlNTZXRTYW1wbGVycyhpbmRleCwgMSwgJmR4U2FtcGxlclN0YXRl
KTsKKworICAgICAgICAgICAgbUN1clZlcnRleFNhbXBsZXJTdGF0ZXNbaW5kZXhdID0gc2FtcGxl
clN0YXRlOworICAgICAgICB9CisKKyAgICAgICAgbUZvcmNlU2V0VmVydGV4U2FtcGxlclN0YXRl
c1tpbmRleF0gPSBmYWxzZTsKKyAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworfQorCit2
b2lkIFJlbmRlcmVyMTE6OnNldFRleHR1cmUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRl
eCwgZ2w6OlRleHR1cmUgKnRleHR1cmUpCit7CisgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3
ICp0ZXh0dXJlU1JWID0gTlVMTDsKKyAgICB1bnNpZ25lZCBpbnQgc2VyaWFsID0gMDsKKyAgICBi
b29sIGZvcmNlU2V0VGV4dHVyZSA9IGZhbHNlOworCisgICAgaWYgKHRleHR1cmUpCisgICAgewor
ICAgICAgICBUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqdGV4U3RvcmFnZSA9IHRleHR1cmUtPmdl
dE5hdGl2ZVRleHR1cmUoKTsKKyAgICAgICAgaWYgKHRleFN0b3JhZ2UpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIFRleHR1cmVTdG9yYWdlMTEgKnN0b3JhZ2UxMSA9IFRleHR1cmVTdG9yYWdlMTE6
Om1ha2VUZXh0dXJlU3RvcmFnZTExKHRleFN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsK
KyAgICAgICAgICAgIHRleHR1cmVTUlYgPSBzdG9yYWdlMTEtPmdldFNSVigpOworICAgICAgICB9
CisKKyAgICAgICAgLy8gSWYgd2UgZ2V0IE5VTEwgYmFjayBmcm9tIGdldFNSViBoZXJlLCBzb21l
dGhpbmcgd2VudCB3cm9uZyBpbiB0aGUgdGV4dHVyZSBjbGFzcyBhbmQgd2UncmUgdW5leHBlY3Rl
ZGx5CisgICAgICAgIC8vIG1pc3NpbmcgdGhlIHNoYWRlciByZXNvdXJjZSB2aWV3CisgICAgICAg
IEFTU0VSVCh0ZXh0dXJlU1JWICE9IE5VTEwpOworCisgICAgICAgIHNlcmlhbCA9IHRleHR1cmUt
PmdldFRleHR1cmVTZXJpYWwoKTsKKyAgICAgICAgZm9yY2VTZXRUZXh0dXJlID0gdGV4dHVyZS0+
aGFzRGlydHlJbWFnZXMoKTsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSBnbDo6U0FNUExFUl9Q
SVhFTCkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gZ2w6Ok1BWF9U
RVhUVVJFX0lNQUdFX1VOSVRTKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIlBpeGVsIHNo
YWRlciBzYW1wbGVyIGluZGV4ICVpIGlzIG5vdCB2YWxpZC4iLCBpbmRleCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoZm9yY2VTZXRUZXh0dXJlIHx8IG1D
dXJQaXhlbFRleHR1cmVTZXJpYWxzW2luZGV4XSAhPSBzZXJpYWwpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlclJlc291cmNlcyhpbmRleCwgMSwgJnRl
eHR1cmVTUlYpOworICAgICAgICB9CisKKyAgICAgICAgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNb
aW5kZXhdID0gc2VyaWFsOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlID09IGdsOjpTQU1QTEVS
X1ZFUlRFWCkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gKGludCln
ZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpKQorICAgICAgICB7CisgICAgICAgICAgICBF
UlIoIlZlcnRleCBzaGFkZXIgc2FtcGxlciBpbmRleCAlaSBpcyBub3QgdmFsaWQuIiwgaW5kZXgp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZvcmNlU2V0
VGV4dHVyZSB8fCBtQ3VyVmVydGV4VGV4dHVyZVNlcmlhbHNbaW5kZXhdICE9IHNlcmlhbCkKKyAg
ICAgICAgeworICAgICAgICAgICAgbURldmljZUNvbnRleHQtPlZTU2V0U2hhZGVyUmVzb3VyY2Vz
KGluZGV4LCAxLCAmdGV4dHVyZVNSVik7CisgICAgICAgIH0KKworICAgICAgICBtQ3VyVmVydGV4
VGV4dHVyZVNlcmlhbHNbaW5kZXhdID0gc2VyaWFsOworICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6c2V0UmFzdGVyaXplclN0YXRlKGNvbnN0IGds
OjpSYXN0ZXJpemVyU3RhdGUgJnJhc3RlclN0YXRlKQoreworICAgIGlmIChtRm9yY2VTZXRSYXN0
ZXJTdGF0ZSB8fCBtZW1jbXAoJnJhc3RlclN0YXRlLCAmbUN1clJhc3RlclN0YXRlLCBzaXplb2Yo
Z2w6OlJhc3Rlcml6ZXJTdGF0ZSkpICE9IDApCisgICAgeworICAgICAgICBJRDNEMTFSYXN0ZXJp
emVyU3RhdGUgKmR4UmFzdGVyU3RhdGUgPSBtU3RhdGVDYWNoZS5nZXRSYXN0ZXJpemVyU3RhdGUo
cmFzdGVyU3RhdGUsIG1TY2lzc29yRW5hYmxlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1DdXJE
ZXB0aFNpemUpOworICAgICAgICBpZiAoIWR4UmFzdGVyU3RhdGUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEVSUigiTlVMTCByYXN0ZXJpemVyIHN0YXRlIHJldHVybmVkIGJ5IFJlbmRlclN0YXRl
Q2FjaGU6OmdldFJhc3Rlcml6ZXJTdGF0ZSwgc2V0dGluZyB0aGUgZGVmYXVsdCIKKyAgICAgICAg
ICAgICAgICAicmFzdGVyaXplciBzdGF0ZS4iKTsKKyAgICAgICAgfQorCisgICAgICAgIG1EZXZp
Y2VDb250ZXh0LT5SU1NldFN0YXRlKGR4UmFzdGVyU3RhdGUpOworCisgICAgICAgIG1DdXJSYXN0
ZXJTdGF0ZSA9IHJhc3RlclN0YXRlOworICAgIH0KKworICAgIG1Gb3JjZVNldFJhc3RlclN0YXRl
ID0gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6c2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVi
dWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29u
c3QgZ2w6OkNvbG9yICZibGVuZENvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGludCBzYW1wbGVNYXNrKQoreworICAgIGlmIChtRm9yY2VTZXRCbGVuZFN0YXRl
IHx8CisgICAgICAgIG1lbWNtcCgmYmxlbmRTdGF0ZSwgJm1DdXJCbGVuZFN0YXRlLCBzaXplb2Yo
Z2w6OkJsZW5kU3RhdGUpKSAhPSAwIHx8CisgICAgICAgIG1lbWNtcCgmYmxlbmRDb2xvciwgJm1D
dXJCbGVuZENvbG9yLCBzaXplb2YoZ2w6OkNvbG9yKSkgIT0gMCB8fAorICAgICAgICBzYW1wbGVN
YXNrICE9IG1DdXJTYW1wbGVNYXNrKQorICAgIHsKKyAgICAgICAgSUQzRDExQmxlbmRTdGF0ZSAq
ZHhCbGVuZFN0YXRlID0gbVN0YXRlQ2FjaGUuZ2V0QmxlbmRTdGF0ZShmcmFtZWJ1ZmZlciwgYmxl
bmRTdGF0ZSk7CisgICAgICAgIGlmICghZHhCbGVuZFN0YXRlKQorICAgICAgICB7CisgICAgICAg
ICAgICBFUlIoIk5VTEwgYmxlbmQgc3RhdGUgcmV0dXJuZWQgYnkgUmVuZGVyU3RhdGVDYWNoZTo6
Z2V0QmxlbmRTdGF0ZSwgc2V0dGluZyB0aGUgZGVmYXVsdCAiCisgICAgICAgICAgICAgICAgImJs
ZW5kIHN0YXRlLiIpOworICAgICAgICB9CisKKyAgICAgICAgZmxvYXQgYmxlbmRDb2xvcnNbNF0g
PSB7MC4wZn07CisgICAgICAgIGlmIChibGVuZFN0YXRlLnNvdXJjZUJsZW5kUkdCICE9IEdMX0NP
TlNUQU5UX0FMUEhBICYmIGJsZW5kU3RhdGUuc291cmNlQmxlbmRSR0IgIT0gR0xfT05FX01JTlVT
X0NPTlNUQU5UX0FMUEhBICYmCisgICAgICAgICAgICBibGVuZFN0YXRlLmRlc3RCbGVuZFJHQiAh
PSBHTF9DT05TVEFOVF9BTFBIQSAmJiBibGVuZFN0YXRlLmRlc3RCbGVuZFJHQiAhPSBHTF9PTkVf
TUlOVVNfQ09OU1RBTlRfQUxQSEEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJsZW5kQ29sb3Jz
WzBdID0gYmxlbmRDb2xvci5yZWQ7CisgICAgICAgICAgICBibGVuZENvbG9yc1sxXSA9IGJsZW5k
Q29sb3IuZ3JlZW47CisgICAgICAgICAgICBibGVuZENvbG9yc1syXSA9IGJsZW5kQ29sb3IuYmx1
ZTsKKyAgICAgICAgICAgIGJsZW5kQ29sb3JzWzNdID0gYmxlbmRDb2xvci5hbHBoYTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGJsZW5kQ29sb3JzWzBd
ID0gYmxlbmRDb2xvci5hbHBoYTsKKyAgICAgICAgICAgIGJsZW5kQ29sb3JzWzFdID0gYmxlbmRD
b2xvci5hbHBoYTsKKyAgICAgICAgICAgIGJsZW5kQ29sb3JzWzJdID0gYmxlbmRDb2xvci5hbHBo
YTsKKyAgICAgICAgICAgIGJsZW5kQ29sb3JzWzNdID0gYmxlbmRDb2xvci5hbHBoYTsKKyAgICAg
ICAgfQorCisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldEJsZW5kU3RhdGUoZHhCbGVuZFN0
YXRlLCBibGVuZENvbG9ycywgc2FtcGxlTWFzayk7CisKKyAgICAgICAgbUN1ckJsZW5kU3RhdGUg
PSBibGVuZFN0YXRlOworICAgICAgICBtQ3VyQmxlbmRDb2xvciA9IGJsZW5kQ29sb3I7CisgICAg
ICAgIG1DdXJTYW1wbGVNYXNrID0gc2FtcGxlTWFzazsKKyAgICB9CisKKyAgICBtRm9yY2VTZXRC
bGVuZFN0YXRlID0gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6c2V0RGVwdGhTdGVuY2ls
U3RhdGUoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZkZXB0aFN0ZW5jaWxTdGF0ZSwgaW50
IHN0ZW5jaWxSZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBz
dGVuY2lsQmFja1JlZiwgYm9vbCBmcm9udEZhY2VDQ1cpCit7CisgICAgaWYgKG1Gb3JjZVNldERl
cHRoU3RlbmNpbFN0YXRlIHx8CisgICAgICAgIG1lbWNtcCgmZGVwdGhTdGVuY2lsU3RhdGUsICZt
Q3VyRGVwdGhTdGVuY2lsU3RhdGUsIHNpemVvZihnbDo6RGVwdGhTdGVuY2lsU3RhdGUpKSAhPSAw
IHx8CisgICAgICAgIHN0ZW5jaWxSZWYgIT0gbUN1clN0ZW5jaWxSZWYgfHwgc3RlbmNpbEJhY2tS
ZWYgIT0gbUN1clN0ZW5jaWxCYWNrUmVmKQorICAgIHsKKyAgICAgICAgaWYgKGRlcHRoU3RlbmNp
bFN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sgIT0gZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbEJhY2tX
cml0ZW1hc2sgfHwKKyAgICAgICAgICAgIHN0ZW5jaWxSZWYgIT0gc3RlbmNpbEJhY2tSZWYgfHwK
KyAgICAgICAgICAgIGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxNYXNrICE9IGRlcHRoU3RlbmNp
bFN0YXRlLnN0ZW5jaWxCYWNrTWFzaykKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJTZXBh
cmF0ZSBmcm9udC9iYWNrIHN0ZW5jaWwgd3JpdGVtYXNrcywgcmVmZXJlbmNlIHZhbHVlcywgb3Ig
c3RlbmNpbCBtYXNrIHZhbHVlcyBhcmUgIgorICAgICAgICAgICAgICAgICJpbnZhbGlkIHVuZGVy
IFdlYkdMLiIpOworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgIH0KKworICAgICAgICBJRDNEMTFEZXB0aFN0ZW5jaWxTdGF0ZSAqZHhE
ZXB0aFN0ZW5jaWxTdGF0ZSA9IG1TdGF0ZUNhY2hlLmdldERlcHRoU3RlbmNpbFN0YXRlKGRlcHRo
U3RlbmNpbFN0YXRlKTsKKyAgICAgICAgaWYgKCFkeERlcHRoU3RlbmNpbFN0YXRlKQorICAgICAg
ICB7CisgICAgICAgICAgICBFUlIoIk5VTEwgZGVwdGggc3RlbmNpbCBzdGF0ZSByZXR1cm5lZCBi
eSBSZW5kZXJTdGF0ZUNhY2hlOjpnZXREZXB0aFN0ZW5jaWxTdGF0ZSwgIgorICAgICAgICAgICAg
ICAgICJzZXR0aW5nIHRoZSBkZWZhdWx0IGRlcHRoIHN0ZW5jaWwgc3RhdGUuIik7CisgICAgICAg
IH0KKworICAgICAgICBtRGV2aWNlQ29udGV4dC0+T01TZXREZXB0aFN0ZW5jaWxTdGF0ZShkeERl
cHRoU3RlbmNpbFN0YXRlLCBzdGF0aWNfY2FzdDxVSU5UPihzdGVuY2lsUmVmKSk7CisKKyAgICAg
ICAgbUN1ckRlcHRoU3RlbmNpbFN0YXRlID0gZGVwdGhTdGVuY2lsU3RhdGU7CisgICAgICAgIG1D
dXJTdGVuY2lsUmVmID0gc3RlbmNpbFJlZjsKKyAgICAgICAgbUN1clN0ZW5jaWxCYWNrUmVmID0g
c3RlbmNpbEJhY2tSZWY7CisgICAgfQorCisgICAgbUZvcmNlU2V0RGVwdGhTdGVuY2lsU3RhdGUg
PSBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJlcjExOjpzZXRTY2lzc29yUmVjdGFuZ2xlKGNvbnN0
IGdsOjpSZWN0YW5nbGUgJnNjaXNzb3IsIGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAobUZvcmNl
U2V0U2Npc3NvciB8fCBtZW1jbXAoJnNjaXNzb3IsICZtQ3VyU2Npc3Nvciwgc2l6ZW9mKGdsOjpS
ZWN0YW5nbGUpKSAhPSAwIHx8CisgICAgICAgIGVuYWJsZWQgIT0gbVNjaXNzb3JFbmFibGVkKQor
ICAgIHsKKyAgICAgICAgaWYgKGVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEQzRDEx
X1JFQ1QgcmVjdDsKKyAgICAgICAgICAgIHJlY3QubGVmdCA9IHN0ZDo6bWF4KDAsIHNjaXNzb3Iu
eCk7CisgICAgICAgICAgICByZWN0LnRvcCA9IHN0ZDo6bWF4KDAsIHNjaXNzb3IueSk7CisgICAg
ICAgICAgICByZWN0LnJpZ2h0ID0gc2Npc3Nvci54ICsgc3RkOjptYXgoMCwgc2Npc3Nvci53aWR0
aCk7CisgICAgICAgICAgICByZWN0LmJvdHRvbSA9IHNjaXNzb3IueSArIHN0ZDo6bWF4KDAsIHNj
aXNzb3IuaGVpZ2h0KTsKKworICAgICAgICAgICAgbURldmljZUNvbnRleHQtPlJTU2V0U2Npc3Nv
clJlY3RzKDEsICZyZWN0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlbmFibGVkICE9IG1T
Y2lzc29yRW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAgbUZvcmNlU2V0UmFzdGVyU3Rh
dGUgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgbUN1clNjaXNzb3IgPSBzY2lzc29yOwor
ICAgICAgICBtU2Npc3NvckVuYWJsZWQgPSBlbmFibGVkOworICAgIH0KKworICAgIG1Gb3JjZVNl
dFNjaXNzb3IgPSBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJlcjExOjpzZXRWaWV3cG9ydChjb25z
dCBnbDo6UmVjdGFuZ2xlICZ2aWV3cG9ydCwgZmxvYXQgek5lYXIsIGZsb2F0IHpGYXIsIEdMZW51
bSBkcmF3TW9kZSwgR0xlbnVtIGZyb250RmFjZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgaWdub3JlVmlld3BvcnQpCit7CisgICAgZ2w6OlJlY3RhbmdsZSBhY3R1YWxWaWV3
cG9ydCA9IHZpZXdwb3J0OworICAgIGZsb2F0IGFjdHVhbFpOZWFyID0gZ2w6OmNsYW1wMDEoek5l
YXIpOworICAgIGZsb2F0IGFjdHVhbFpGYXIgPSBnbDo6Y2xhbXAwMSh6RmFyKTsKKyAgICBpZiAo
aWdub3JlVmlld3BvcnQpCisgICAgeworICAgICAgICBhY3R1YWxWaWV3cG9ydC54ID0gMDsKKyAg
ICAgICAgYWN0dWFsVmlld3BvcnQueSA9IDA7CisgICAgICAgIGFjdHVhbFZpZXdwb3J0LndpZHRo
ID0gbVJlbmRlclRhcmdldERlc2Mud2lkdGg7CisgICAgICAgIGFjdHVhbFZpZXdwb3J0LmhlaWdo
dCA9IG1SZW5kZXJUYXJnZXREZXNjLmhlaWdodDsKKyAgICAgICAgYWN0dWFsWk5lYXIgPSAwLjBm
OworICAgICAgICBhY3R1YWxaRmFyID0gMS4wZjsKKyAgICB9CisKKyAgICAvLyBHZXQgRDNEIHZp
ZXdwb3J0IGJvdW5kcywgd2hpY2ggZGVwZW5kcyBvbiB0aGUgZmVhdHVyZSBsZXZlbAorICAgIGNv
bnN0IFJhbmdlJiB2aWV3cG9ydEJvdW5kcyA9IGdldFZpZXdwb3J0Qm91bmRzKCk7CisKKyAgICAv
LyBDbGFtcCB3aWR0aCBhbmQgaGVpZ2h0IGZpcnN0IHRvIHRoZSBnbCBtYXhpbXVtLCB0aGVuIGNs
YW1wIGZ1cnRoZXIgaWYgd2UgZXh0ZW5kIHBhc3QgdGhlIEQzRCBtYXhpbXVtIGJvdW5kcworICAg
IEQzRDExX1ZJRVdQT1JUIGR4Vmlld3BvcnQ7CisgICAgZHhWaWV3cG9ydC5Ub3BMZWZ0WCA9IGds
OjpjbGFtcChhY3R1YWxWaWV3cG9ydC54LCB2aWV3cG9ydEJvdW5kcy5zdGFydCwgdmlld3BvcnRC
b3VuZHMuZW5kKTsKKyAgICBkeFZpZXdwb3J0LlRvcExlZnRZID0gZ2w6OmNsYW1wKGFjdHVhbFZp
ZXdwb3J0LnksIHZpZXdwb3J0Qm91bmRzLnN0YXJ0LCB2aWV3cG9ydEJvdW5kcy5lbmQpOworICAg
IGR4Vmlld3BvcnQuV2lkdGggPSBnbDo6Y2xhbXAoYWN0dWFsVmlld3BvcnQud2lkdGgsIDAsIGdl
dE1heFZpZXdwb3J0RGltZW5zaW9uKCkpOworICAgIGR4Vmlld3BvcnQuSGVpZ2h0ID0gZ2w6OmNs
YW1wKGFjdHVhbFZpZXdwb3J0LmhlaWdodCwgMCwgZ2V0TWF4Vmlld3BvcnREaW1lbnNpb24oKSk7
CisgICAgZHhWaWV3cG9ydC5XaWR0aCA9IHN0ZDo6bWluKChpbnQpZHhWaWV3cG9ydC5XaWR0aCwg
dmlld3BvcnRCb3VuZHMuZW5kIC0gc3RhdGljX2Nhc3Q8aW50PihkeFZpZXdwb3J0LlRvcExlZnRY
KSk7CisgICAgZHhWaWV3cG9ydC5IZWlnaHQgPSBzdGQ6Om1pbigoaW50KWR4Vmlld3BvcnQuSGVp
Z2h0LCB2aWV3cG9ydEJvdW5kcy5lbmQgLSBzdGF0aWNfY2FzdDxpbnQ+KGR4Vmlld3BvcnQuVG9w
TGVmdFkpKTsKKyAgICBkeFZpZXdwb3J0Lk1pbkRlcHRoID0gYWN0dWFsWk5lYXI7CisgICAgZHhW
aWV3cG9ydC5NYXhEZXB0aCA9IGFjdHVhbFpGYXI7CisKKyAgICBpZiAoZHhWaWV3cG9ydC5XaWR0
aCA8PSAwIHx8IGR4Vmlld3BvcnQuSGVpZ2h0IDw9IDApCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7ICAgLy8gTm90aGluZyB0byByZW5kZXIKKyAgICB9CisKKyAgICBib29sIHZpZXdwb3J0
Q2hhbmdlZCA9IG1Gb3JjZVNldFZpZXdwb3J0IHx8IG1lbWNtcCgmYWN0dWFsVmlld3BvcnQsICZt
Q3VyVmlld3BvcnQsIHNpemVvZihnbDo6UmVjdGFuZ2xlKSkgIT0gMCB8fAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWN0dWFsWk5lYXIgIT0gbUN1ck5lYXIgfHwgYWN0dWFsWkZhciAhPSBt
Q3VyRmFyOworCisgICAgaWYgKHZpZXdwb3J0Q2hhbmdlZCkKKyAgICB7CisgICAgICAgIG1EZXZp
Y2VDb250ZXh0LT5SU1NldFZpZXdwb3J0cygxLCAmZHhWaWV3cG9ydCk7CisKKyAgICAgICAgbUN1
clZpZXdwb3J0ID0gYWN0dWFsVmlld3BvcnQ7CisgICAgICAgIG1DdXJOZWFyID0gYWN0dWFsWk5l
YXI7CisgICAgICAgIG1DdXJGYXIgPSBhY3R1YWxaRmFyOworCisgICAgICAgIG1QaXhlbENvbnN0
YW50cy52aWV3Q29vcmRzWzBdID0gYWN0dWFsVmlld3BvcnQud2lkdGggICogMC41ZjsKKyAgICAg
ICAgbVBpeGVsQ29uc3RhbnRzLnZpZXdDb29yZHNbMV0gPSBhY3R1YWxWaWV3cG9ydC5oZWlnaHQg
KiAwLjVmOworICAgICAgICBtUGl4ZWxDb25zdGFudHMudmlld0Nvb3Jkc1syXSA9IGFjdHVhbFZp
ZXdwb3J0LnggKyAoYWN0dWFsVmlld3BvcnQud2lkdGggICogMC41Zik7CisgICAgICAgIG1QaXhl
bENvbnN0YW50cy52aWV3Q29vcmRzWzNdID0gYWN0dWFsVmlld3BvcnQueSArIChhY3R1YWxWaWV3
cG9ydC5oZWlnaHQgKiAwLjVmKTsKKworICAgICAgICBtUGl4ZWxDb25zdGFudHMuZGVwdGhGcm9u
dFswXSA9IChhY3R1YWxaRmFyIC0gYWN0dWFsWk5lYXIpICogMC41ZjsKKyAgICAgICAgbVBpeGVs
Q29uc3RhbnRzLmRlcHRoRnJvbnRbMV0gPSAoYWN0dWFsWk5lYXIgKyBhY3R1YWxaRmFyKSAqIDAu
NWY7CisKKyAgICAgICAgbVZlcnRleENvbnN0YW50cy5kZXB0aFJhbmdlWzBdID0gYWN0dWFsWk5l
YXI7CisgICAgICAgIG1WZXJ0ZXhDb25zdGFudHMuZGVwdGhSYW5nZVsxXSA9IGFjdHVhbFpGYXI7
CisgICAgICAgIG1WZXJ0ZXhDb25zdGFudHMuZGVwdGhSYW5nZVsyXSA9IGFjdHVhbFpGYXIgLSBh
Y3R1YWxaTmVhcjsKKworICAgICAgICBtUGl4ZWxDb25zdGFudHMuZGVwdGhSYW5nZVswXSA9IGFj
dHVhbFpOZWFyOworICAgICAgICBtUGl4ZWxDb25zdGFudHMuZGVwdGhSYW5nZVsxXSA9IGFjdHVh
bFpGYXI7CisgICAgICAgIG1QaXhlbENvbnN0YW50cy5kZXB0aFJhbmdlWzJdID0gYWN0dWFsWkZh
ciAtIGFjdHVhbFpOZWFyOworICAgIH0KKworICAgIG1Gb3JjZVNldFZpZXdwb3J0ID0gZmFsc2U7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6YXBwbHlQcmltaXRpdmVU
eXBlKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50KQoreworICAgIEQzRDExX1BSSU1JVElWRV9U
T1BPTE9HWSBwcmltaXRpdmVUb3BvbG9neSA9IEQzRF9QUklNSVRJVkVfVE9QT0xPR1lfVU5ERUZJ
TkVEOworCisgICAgR0xzaXplaSBtaW5Db3VudCA9IDA7CisKKyAgICBzd2l0Y2ggKG1vZGUpCisg
ICAgeworICAgICAgY2FzZSBHTF9QT0lOVFM6ICAgICAgICAgcHJpbWl0aXZlVG9wb2xvZ3kgPSBE
M0QxMV9QUklNSVRJVkVfVE9QT0xPR1lfUE9JTlRMSVNUOyAgIG1pbkNvdW50ID0gMTsgYnJlYWs7
CisgICAgICBjYXNlIEdMX0xJTkVTOiAgICAgICAgICBwcmltaXRpdmVUb3BvbG9neSA9IEQzRF9Q
UklNSVRJVkVfVE9QT0xPR1lfTElORUxJU1Q7ICAgICAgbWluQ291bnQgPSAyOyBicmVhazsKKyAg
ICAgIGNhc2UgR0xfTElORV9MT09QOiAgICAgIHByaW1pdGl2ZVRvcG9sb2d5ID0gRDNEX1BSSU1J
VElWRV9UT1BPTE9HWV9MSU5FU1RSSVA7ICAgICBtaW5Db3VudCA9IDI7IGJyZWFrOworICAgICAg
Y2FzZSBHTF9MSU5FX1NUUklQOiAgICAgcHJpbWl0aXZlVG9wb2xvZ3kgPSBEM0RfUFJJTUlUSVZF
X1RPUE9MT0dZX0xJTkVTVFJJUDsgICAgIG1pbkNvdW50ID0gMjsgYnJlYWs7CisgICAgICBjYXNl
IEdMX1RSSUFOR0xFUzogICAgICBwcmltaXRpdmVUb3BvbG9neSA9IEQzRF9QUklNSVRJVkVfVE9Q
T0xPR1lfVFJJQU5HTEVMSVNUOyAgbWluQ291bnQgPSAzOyBicmVhazsKKyAgICAgIGNhc2UgR0xf
VFJJQU5HTEVfU1RSSVA6IHByaW1pdGl2ZVRvcG9sb2d5ID0gRDNEX1BSSU1JVElWRV9UT1BPTE9H
WV9UUklBTkdMRVNUUklQOyBtaW5Db3VudCA9IDM7IGJyZWFrOworICAgICAgICAgIC8vIGVtdWxh
dGUgZmFucyB2aWEgcmV3cml0aW5nIGluZGV4IGJ1ZmZlcgorICAgICAgY2FzZSBHTF9UUklBTkdM
RV9GQU46ICAgcHJpbWl0aXZlVG9wb2xvZ3kgPSBEM0RfUFJJTUlUSVZFX1RPUE9MT0dZX1RSSUFO
R0xFTElTVDsgIG1pbkNvdW50ID0gMzsgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgZmFsc2UpOworICAgIH0KKworICAgIGlm
IChwcmltaXRpdmVUb3BvbG9neSAhPSBtQ3VycmVudFByaW1pdGl2ZVRvcG9sb2d5KQorICAgIHsK
KyAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0UHJpbWl0aXZlVG9wb2xvZ3kocHJpbWl0aXZl
VG9wb2xvZ3kpOworICAgICAgICBtQ3VycmVudFByaW1pdGl2ZVRvcG9sb2d5ID0gcHJpbWl0aXZl
VG9wb2xvZ3k7CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50ID49IG1pbkNvdW50OworfQorCiti
b29sIFJlbmRlcmVyMTE6OmFwcGx5UmVuZGVyVGFyZ2V0KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIpCit7CisgICAgLy8gR2V0IHRoZSBjb2xvciByZW5kZXIgYnVmZmVyIGFuZCBzZXJpYWwK
KyAgICAvLyBBbHNvIGV4dHJhY3QgdGhlIHJlbmRlciB0YXJnZXQgZGltZW5zaW9ucyBhbmQgdmll
dworICAgIHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRXaWR0aCA9IDA7CisgICAgdW5zaWduZWQg
aW50IHJlbmRlclRhcmdldEhlaWdodCA9IDA7CisgICAgR0xlbnVtIHJlbmRlclRhcmdldEZvcm1h
dCA9IDA7CisgICAgdW5zaWduZWQgaW50IHJlbmRlclRhcmdldFNlcmlhbHNbZ2w6OklNUExFTUVO
VEFUSU9OX01BWF9EUkFXX0JVRkZFUlNdID0gezB9OworICAgIElEM0QxMVJlbmRlclRhcmdldFZp
ZXcqIGZyYW1lYnVmZmVyUlRWc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSU10g
PSB7TlVMTH07CisgICAgYm9vbCBtaXNzaW5nQ29sb3JSZW5kZXJUYXJnZXQgPSB0cnVlOworCisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gMDsgY29sb3JBdHRhY2htZW50
IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsr
KQorICAgIHsKKyAgICAgICAgY29uc3QgR0xlbnVtIGRyYXdCdWZmZXJTdGF0ZSA9IGZyYW1lYnVm
ZmVyLT5nZXREcmF3QnVmZmVyU3RhdGUoY29sb3JBdHRhY2htZW50KTsKKworICAgICAgICBpZiAo
ZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlwZShjb2xvckF0dGFjaG1lbnQpICE9IEdMX05P
TkUgJiYgZHJhd0J1ZmZlclN0YXRlICE9IEdMX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IC8vIHRoZSBkcmF3IGJ1ZmZlciBtdXN0IGJlIGVpdGhlciAibm9uZSIsICJiYWNrIiBmb3IgdGhl
IGRlZmF1bHQgYnVmZmVyIG9yIHRoZSBzYW1lIGluZGV4IGFzIHRoaXMgY29sb3IgKGluIG9yZGVy
KQorICAgICAgICAgICAgQVNTRVJUKGRyYXdCdWZmZXJTdGF0ZSA9PSBHTF9CQUNLIHx8IGRyYXdC
dWZmZXJTdGF0ZSA9PSAoR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUICsgY29sb3JBdHRhY2htZW50
KSk7CisKKyAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gZnJhbWVi
dWZmZXItPmdldENvbG9yYnVmZmVyKGNvbG9yQXR0YWNobWVudCk7CisKKyAgICAgICAgICAgIGlm
ICghY29sb3JidWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRVJSKCJyZW5k
ZXIgdGFyZ2V0IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBjaGVjayBmb3Ig
emVyby1zaXplZCBkZWZhdWx0IGZyYW1lYnVmZmVyLCB3aGljaCBpcyBhIHNwZWNpYWwgY2FzZS4K
KyAgICAgICAgICAgIC8vIGluIHRoaXMgY2FzZSB3ZSBkbyBub3Qgd2lzaCB0byBtb2RpZnkgYW55
IHN0YXRlIGFuZCBqdXN0IHNpbGVudGx5IHJldHVybiBmYWxzZS4KKyAgICAgICAgICAgIC8vIHRo
aXMgd2lsbCBub3QgcmVwb3J0IGFueSBnbCBlcnJvciBidXQgd2lsbCBjYXVzZSB0aGUgY2FsbGlu
ZyBtZXRob2QgdG8gcmV0dXJuLgorICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyLT5nZXRXaWR0
aCgpID09IDAgfHwgY29sb3JidWZmZXItPmdldEhlaWdodCgpID09IDApCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICByZW5kZXJUYXJnZXRTZXJpYWxzW2NvbG9yQXR0YWNobWVudF0gPSBjb2xvcmJ1ZmZlci0+
Z2V0U2VyaWFsKCk7CisKKyAgICAgICAgICAgIC8vIEV4dHJhY3QgdGhlIHJlbmRlciB0YXJnZXQg
ZGltZW5zaW9ucyBhbmQgdmlldworICAgICAgICAgICAgUmVuZGVyVGFyZ2V0MTEgKnJlbmRlclRh
cmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoY29sb3JidWZmZXItPmdl
dFJlbmRlclRhcmdldCgpKTsKKyAgICAgICAgICAgIGlmICghcmVuZGVyVGFyZ2V0KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIEVSUigicmVuZGVyIHRhcmdldCBwb2ludGVyIHVuZXhw
ZWN0ZWRseSBudWxsLiIpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgZnJhbWVidWZmZXJSVFZzW2NvbG9yQXR0YWNobWVudF0gPSBy
ZW5kZXJUYXJnZXQtPmdldFJlbmRlclRhcmdldFZpZXcoKTsKKyAgICAgICAgICAgIGlmICghZnJh
bWVidWZmZXJSVFZzW2NvbG9yQXR0YWNobWVudF0pCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHZpZXcgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4i
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChtaXNzaW5nQ29sb3JSZW5kZXJUYXJnZXQpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmVuZGVyVGFyZ2V0V2lkdGggPSBjb2xvcmJ1ZmZlci0+Z2V0V2lkdGgoKTsK
KyAgICAgICAgICAgICAgICByZW5kZXJUYXJnZXRIZWlnaHQgPSBjb2xvcmJ1ZmZlci0+Z2V0SGVp
Z2h0KCk7CisgICAgICAgICAgICAgICAgcmVuZGVyVGFyZ2V0Rm9ybWF0ID0gY29sb3JidWZmZXIt
PmdldEFjdHVhbEZvcm1hdCgpOworICAgICAgICAgICAgICAgIG1pc3NpbmdDb2xvclJlbmRlclRh
cmdldCA9IGZhbHNlOworICAgICAgICAgICAgfQorCisjaWZkZWYgX0RFQlVHCisgICAgICAgICAg
ICAvLyBXb3JrYXJvdW5kIGZvciBEZWJ1ZyBTRVRTSEFERVJSRVNPVVJDRVNfSEFaQVJEIEQzRDEx
IHdhcm5pbmdzCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB2ZXJ0ZXhTZXJpYWxJbmRl
eCA9IDA7IHZlcnRleFNlcmlhbEluZGV4IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhf
VEVYVFVSRV9JTUFHRV9VTklUUzsgdmVydGV4U2VyaWFsSW5kZXgrKykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBpZiAoY29sb3JidWZmZXItPmdldFRleHR1cmVTZXJpYWwoKSAhPSAw
ICYmIG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1t2ZXJ0ZXhTZXJpYWxJbmRleF0gPT0gY29sb3Ji
dWZmZXItPmdldFRleHR1cmVTZXJpYWwoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHNldFRleHR1cmUoZ2w6OlNBTVBMRVJfVkVSVEVYLCB2ZXJ0ZXhTZXJpYWxJbmRl
eCwgTlVMTCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBwaXhlbFNlcmlhbEluZGV4ID0gMDsgcGl4ZWxTZXJpYWxJbmRl
eCA8IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgcGl4ZWxTZXJpYWxJbmRleCsrKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlci0+Z2V0VGV4dHVyZVNl
cmlhbCgpICE9IDAgJiYgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbcGl4ZWxTZXJpYWxJbmRleF0g
PT0gY29sb3JidWZmZXItPmdldFRleHR1cmVTZXJpYWwoKSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHNldFRleHR1cmUoZ2w6OlNBTVBMRVJfUElYRUwsIHBpeGVsU2Vy
aWFsSW5kZXgsIE5VTEwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyNlbmRp
ZgorICAgICAgICB9CisgICAgfQorCisgICAgLy8gR2V0IHRoZSBkZXB0aCBzdGVuY2lsIHJlbmRl
ciBidWZmZXIgYW5kIHNlcmlhbHMKKyAgICBnbDo6UmVuZGVyYnVmZmVyICpkZXB0aFN0ZW5jaWwg
PSBOVUxMOworICAgIHVuc2lnbmVkIGludCBkZXB0aGJ1ZmZlclNlcmlhbCA9IDA7CisgICAgdW5z
aWduZWQgaW50IHN0ZW5jaWxidWZmZXJTZXJpYWwgPSAwOworICAgIGlmIChmcmFtZWJ1ZmZlci0+
Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKKyAgICB7CisgICAgICAgIGRlcHRoU3Rl
bmNpbCA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOworICAgICAgICBpZiAoIWRlcHRo
U3RlbmNpbCkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJEZXB0aCBzdGVuY2lsIHBvaW50
ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7CisgICAgICAgICAgICBTYWZlUmVsZWFzZShmcmFtZWJ1
ZmZlclJUVnMpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAg
ICAgZGVwdGhidWZmZXJTZXJpYWwgPSBkZXB0aFN0ZW5jaWwtPmdldFNlcmlhbCgpOworICAgIH0K
KyAgICBlbHNlIGlmIChmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKSAhPSBHTF9O
T05FKQorICAgIHsKKyAgICAgICAgZGVwdGhTdGVuY2lsID0gZnJhbWVidWZmZXItPmdldFN0ZW5j
aWxidWZmZXIoKTsKKyAgICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwor
ICAgICAgICAgICAgU2FmZVJlbGVhc2UoZnJhbWVidWZmZXJSVFZzKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHN0ZW5jaWxidWZmZXJTZXJpYWwgPSBk
ZXB0aFN0ZW5jaWwtPmdldFNlcmlhbCgpOworICAgIH0KKworICAgIC8vIEV4dHJhY3QgdGhlIGRl
cHRoIHN0ZW5jaWwgc2l6ZXMgYW5kIHZpZXcKKyAgICB1bnNpZ25lZCBpbnQgZGVwdGhTaXplID0g
MDsKKyAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbFNpemUgPSAwOworICAgIElEM0QxMURlcHRoU3Rl
bmNpbFZpZXcqIGZyYW1lYnVmZmVyRFNWID0gTlVMTDsKKyAgICBpZiAoZGVwdGhTdGVuY2lsKQor
ICAgIHsKKyAgICAgICAgUmVuZGVyVGFyZ2V0MTEgKmRlcHRoU3RlbmNpbFJlbmRlclRhcmdldCA9
IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoZGVwdGhTdGVuY2lsLT5nZXREZXB0
aFN0ZW5jaWwoKSk7CisgICAgICAgIGlmICghZGVwdGhTdGVuY2lsUmVuZGVyVGFyZ2V0KQorICAg
ICAgICB7CisgICAgICAgICAgICBFUlIoInJlbmRlciB0YXJnZXQgcG9pbnRlciB1bmV4cGVjdGVk
bHkgbnVsbC4iKTsKKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKGZyYW1lYnVmZmVyUlRWcyk7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBmcmFtZWJ1ZmZl
ckRTViA9IGRlcHRoU3RlbmNpbFJlbmRlclRhcmdldC0+Z2V0RGVwdGhTdGVuY2lsVmlldygpOwor
ICAgICAgICBpZiAoIWZyYW1lYnVmZmVyRFNWKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIo
ImRlcHRoIHN0ZW5jaWwgdmlldyBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOworICAgICAg
ICAgICAgU2FmZVJlbGVhc2UoZnJhbWVidWZmZXJSVFZzKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIHJlbmRlciBidWZm
ZXIsIHRoZSB3aWR0aCwgaGVpZ2h0IGFuZCBmb3JtYXQgdmFsdWVzIGNvbWUgZnJvbQorICAgICAg
ICAvLyB0aGUgZGVwdGggc3RlbmNpbAorICAgICAgICBpZiAobWlzc2luZ0NvbG9yUmVuZGVyVGFy
Z2V0KQorICAgICAgICB7CisgICAgICAgICAgICByZW5kZXJUYXJnZXRXaWR0aCA9IGRlcHRoU3Rl
bmNpbC0+Z2V0V2lkdGgoKTsKKyAgICAgICAgICAgIHJlbmRlclRhcmdldEhlaWdodCA9IGRlcHRo
U3RlbmNpbC0+Z2V0SGVpZ2h0KCk7CisgICAgICAgICAgICByZW5kZXJUYXJnZXRGb3JtYXQgPSBk
ZXB0aFN0ZW5jaWwtPmdldEFjdHVhbEZvcm1hdCgpOworICAgICAgICB9CisKKyAgICAgICAgZGVw
dGhTaXplID0gZGVwdGhTdGVuY2lsLT5nZXREZXB0aFNpemUoKTsKKyAgICAgICAgc3RlbmNpbFNp
emUgPSBkZXB0aFN0ZW5jaWwtPmdldFN0ZW5jaWxTaXplKCk7CisgICAgfQorCisgICAgLy8gQXBw
bHkgdGhlIHJlbmRlciB0YXJnZXQgYW5kIGRlcHRoIHN0ZW5jaWwKKyAgICBpZiAoIW1SZW5kZXJU
YXJnZXREZXNjSW5pdGlhbGl6ZWQgfHwgIW1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCB8fAorICAg
ICAgICBtZW1jbXAocmVuZGVyVGFyZ2V0U2VyaWFscywgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJp
YWxzLCBzaXplb2YocmVuZGVyVGFyZ2V0U2VyaWFscykpICE9IDAgfHwKKyAgICAgICAgZGVwdGhi
dWZmZXJTZXJpYWwgIT0gbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCB8fAorICAgICAgICBzdGVu
Y2lsYnVmZmVyU2VyaWFsICE9IG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCkKKyAgICB7Cisg
ICAgICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldFJlbmRlclRhcmdldHMoZ2V0TWF4UmVuZGVyVGFy
Z2V0cygpLCBmcmFtZWJ1ZmZlclJUVnMsIGZyYW1lYnVmZmVyRFNWKTsKKworICAgICAgICBtUmVu
ZGVyVGFyZ2V0RGVzYy53aWR0aCA9IHJlbmRlclRhcmdldFdpZHRoOworICAgICAgICBtUmVuZGVy
VGFyZ2V0RGVzYy5oZWlnaHQgPSByZW5kZXJUYXJnZXRIZWlnaHQ7CisgICAgICAgIG1SZW5kZXJU
YXJnZXREZXNjLmZvcm1hdCA9IHJlbmRlclRhcmdldEZvcm1hdDsKKyAgICAgICAgbUZvcmNlU2V0
Vmlld3BvcnQgPSB0cnVlOworICAgICAgICBtRm9yY2VTZXRTY2lzc29yID0gdHJ1ZTsKKworICAg
ICAgICBpZiAoIW1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCB8fCBkZXB0aFNpemUgIT0gbUN1ckRl
cHRoU2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbUN1ckRlcHRoU2l6ZSA9IGRlcHRoU2l6
ZTsKKyAgICAgICAgICAgIG1Gb3JjZVNldFJhc3RlclN0YXRlID0gdHJ1ZTsKKyAgICAgICAgfQor
CisgICAgICAgIG1DdXJTdGVuY2lsU2l6ZSA9IHN0ZW5jaWxTaXplOworCisgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IHJ0SW5kZXggPSAwOyBydEluZGV4IDwgZ2w6OklNUExFTUVOVEFUSU9OX01B
WF9EUkFXX0JVRkZFUlM7IHJ0SW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgbUFwcGxp
ZWRSZW5kZXJUYXJnZXRTZXJpYWxzW3J0SW5kZXhdID0gcmVuZGVyVGFyZ2V0U2VyaWFsc1tydElu
ZGV4XTsKKyAgICAgICAgfQorICAgICAgICBtQXBwbGllZERlcHRoYnVmZmVyU2VyaWFsID0gZGVw
dGhidWZmZXJTZXJpYWw7CisgICAgICAgIG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCA9IHN0
ZW5jaWxidWZmZXJTZXJpYWw7CisgICAgICAgIG1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQg
PSB0cnVlOworICAgICAgICBtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitHTGVudW0gUmVuZGVyZXIxMTo6YXBwbHlWZXJ0ZXhC
dWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGdsOjpWZXJ0ZXhBdHRyaWJ1
dGUgdmVydGV4QXR0cmlidXRlc1tdLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXpl
aSBpbnN0YW5jZXMpCit7CisgICAgVHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW2dsOjpN
QVhfVkVSVEVYX0FUVFJJQlNdOworICAgIEdMZW51bSBlcnIgPSBtVmVydGV4RGF0YU1hbmFnZXIt
PnByZXBhcmVWZXJ0ZXhEYXRhKHZlcnRleEF0dHJpYnV0ZXMsIHByb2dyYW1CaW5hcnksIGZpcnN0
LCBjb3VudCwgYXR0cmlidXRlcywgaW5zdGFuY2VzKTsKKyAgICBpZiAoZXJyICE9IEdMX05PX0VS
Uk9SKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICByZXR1cm4gbUlu
cHV0TGF5b3V0Q2FjaGUuYXBwbHlWZXJ0ZXhCdWZmZXJzKGF0dHJpYnV0ZXMsIHByb2dyYW1CaW5h
cnkpOworfQorCitHTGVudW0gUmVuZGVyZXIxMTo6YXBwbHlJbmRleEJ1ZmZlcihjb25zdCBHTHZv
aWQgKmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgR0xzaXplaSBjb3Vu
dCwgR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleElu
Zm8pCit7CisgICAgR0xlbnVtIGVyciA9IG1JbmRleERhdGFNYW5hZ2VyLT5wcmVwYXJlSW5kZXhE
YXRhKHR5cGUsIGNvdW50LCBlbGVtZW50QXJyYXlCdWZmZXIsIGluZGljZXMsIGluZGV4SW5mbyk7
CisKKyAgICBpZiAoZXJyID09IEdMX05PX0VSUk9SKQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4
SW5mby0+c3RvcmFnZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGluZGV4SW5mby0+c2Vy
aWFsICE9IG1BcHBsaWVkU3RvcmFnZUlCU2VyaWFsIHx8IGluZGV4SW5mby0+c3RhcnRPZmZzZXQg
IT0gbUFwcGxpZWRJQk9mZnNldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBCdWZm
ZXJTdG9yYWdlMTEgKnN0b3JhZ2UgPSBCdWZmZXJTdG9yYWdlMTE6Om1ha2VCdWZmZXJTdG9yYWdl
MTEoaW5kZXhJbmZvLT5zdG9yYWdlKTsKKyAgICAgICAgICAgICAgICBJbmRleEJ1ZmZlcjExKiBp
bmRleEJ1ZmZlciA9IEluZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1ZmZlcjExKGluZGV4SW5mby0+
aW5kZXhCdWZmZXIpOworCisgICAgICAgICAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0SW5k
ZXhCdWZmZXIoc3RvcmFnZS0+Z2V0QnVmZmVyKEJVRkZFUl9VU0FHRV9JTkRFWCksIGluZGV4QnVm
ZmVyLT5nZXRJbmRleEZvcm1hdCgpLCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0KTsKKworICAgICAg
ICAgICAgICAgIG1BcHBsaWVkSUJTZXJpYWwgPSAwOworICAgICAgICAgICAgICAgIG1BcHBsaWVk
U3RvcmFnZUlCU2VyaWFsID0gc3RvcmFnZS0+Z2V0U2VyaWFsKCk7CisgICAgICAgICAgICAgICAg
bUFwcGxpZWRJQk9mZnNldCA9IGluZGV4SW5mby0+c3RhcnRPZmZzZXQ7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaW5kZXhJbmZvLT5zZXJpYWwgIT0gbUFwcGxp
ZWRJQlNlcmlhbCB8fCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0ICE9IG1BcHBsaWVkSUJPZmZzZXQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEluZGV4QnVmZmVyMTEqIGluZGV4QnVmZmVyID0gSW5k
ZXhCdWZmZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEoaW5kZXhJbmZvLT5pbmRleEJ1ZmZlcik7CisK
KyAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldEluZGV4QnVmZmVyKGluZGV4QnVmZmVy
LT5nZXRCdWZmZXIoKSwgaW5kZXhCdWZmZXItPmdldEluZGV4Rm9ybWF0KCksIGluZGV4SW5mby0+
c3RhcnRPZmZzZXQpOworCisgICAgICAgICAgICBtQXBwbGllZElCU2VyaWFsID0gaW5kZXhJbmZv
LT5zZXJpYWw7CisgICAgICAgICAgICBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbCA9IDA7CisgICAg
ICAgICAgICBtQXBwbGllZElCT2Zmc2V0ID0gaW5kZXhJbmZvLT5zdGFydE9mZnNldDsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiBlcnI7Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6ZHJh
d0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpCit7
CisgICAgaWYgKG1vZGUgPT0gR0xfTElORV9MT09QKQorICAgIHsKKyAgICAgICAgZHJhd0xpbmVM
b29wKGNvdW50LCBHTF9OT05FLCBOVUxMLCAwLCBOVUxMKTsKKyAgICB9CisgICAgZWxzZSBpZiAo
bW9kZSA9PSBHTF9UUklBTkdMRV9GQU4pCisgICAgeworICAgICAgICBkcmF3VHJpYW5nbGVGYW4o
Y291bnQsIEdMX05PTkUsIE5VTEwsIDAsIE5VTEwsIGluc3RhbmNlcyk7CisgICAgfQorICAgIGVs
c2UgaWYgKGluc3RhbmNlcyA+IDApCisgICAgeworICAgICAgICBtRGV2aWNlQ29udGV4dC0+RHJh
d0luc3RhbmNlZChjb3VudCwgaW5zdGFuY2VzLCAwLCAwKTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgbURldmljZUNvbnRleHQtPkRyYXcoY291bnQsIDApOworICAgIH0KK30KKwor
dm9pZCBSZW5kZXJlcjExOjpkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQs
IEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRB
cnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvLCBHTHNpemVp
IGluc3RhbmNlcykKK3sKKyAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCisgICAgeworICAg
ICAgICBkcmF3TGluZUxvb3AoY291bnQsIHR5cGUsIGluZGljZXMsIGluZGV4SW5mby5taW5JbmRl
eCwgZWxlbWVudEFycmF5QnVmZmVyKTsKKyAgICB9CisgICAgZWxzZSBpZiAobW9kZSA9PSBHTF9U
UklBTkdMRV9GQU4pCisgICAgeworICAgICAgICBkcmF3VHJpYW5nbGVGYW4oY291bnQsIHR5cGUs
IGluZGljZXMsIGluZGV4SW5mby5taW5JbmRleCwgZWxlbWVudEFycmF5QnVmZmVyLCBpbnN0YW5j
ZXMpOworICAgIH0KKyAgICBlbHNlIGlmIChpbnN0YW5jZXMgPiAwKQorICAgIHsKKyAgICAgICAg
bURldmljZUNvbnRleHQtPkRyYXdJbmRleGVkSW5zdGFuY2VkKGNvdW50LCBpbnN0YW5jZXMsIDAs
IC1zdGF0aWNfY2FzdDxpbnQ+KGluZGV4SW5mby5taW5JbmRleCksIDApOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBtRGV2aWNlQ29udGV4dC0+RHJhd0luZGV4ZWQoY291bnQsIDAs
IC1zdGF0aWNfY2FzdDxpbnQ+KGluZGV4SW5mby5taW5JbmRleCkpOworICAgIH0KK30KKwordm9p
ZCBSZW5kZXJlcjExOjpkcmF3TGluZUxvb3AoR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNv
bnN0IEdMdm9pZCAqaW5kaWNlcywgaW50IG1pbkluZGV4LCBnbDo6QnVmZmVyICplbGVtZW50QXJy
YXlCdWZmZXIpCit7CisgICAgLy8gR2V0IHRoZSByYXcgaW5kaWNlcyBmb3IgYW4gaW5kZXhlZCBk
cmF3CisgICAgaWYgKHR5cGUgIT0gR0xfTk9ORSAmJiBlbGVtZW50QXJyYXlCdWZmZXIpCisgICAg
eworICAgICAgICBnbDo6QnVmZmVyICppbmRleEJ1ZmZlciA9IGVsZW1lbnRBcnJheUJ1ZmZlcjsK
KyAgICAgICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGluZGV4QnVmZmVyLT5nZXRTdG9yYWdl
KCk7CisgICAgICAgIGludHB0cl90IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+
KGluZGljZXMpOworICAgICAgICBpbmRpY2VzID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+
KHN0b3JhZ2UtPmdldERhdGEoKSkgKyBvZmZzZXQ7CisgICAgfQorCisgICAgaWYgKCFtTGluZUxv
b3BJQikKKyAgICB7CisgICAgICAgIG1MaW5lTG9vcElCID0gbmV3IFN0cmVhbWluZ0luZGV4QnVm
ZmVySW50ZXJmYWNlKHRoaXMpOworICAgICAgICBpZiAoIW1MaW5lTG9vcElCLT5yZXNlcnZlQnVm
ZmVyU3BhY2UoSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwgR0xfVU5TSUdORURfSU5UKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgZGVsZXRlIG1MaW5lTG9vcElCOworICAgICAgICAgICAgbUxp
bmVMb29wSUIgPSBOVUxMOworCisgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSAz
Mi1iaXQgbG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKKyAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBDaGVja2VkIGJ5IFJlbmRlcmVyMTE6OmFwcGx5UHJpbWl0aXZlVHlwZQorICAg
IEFTU0VSVChjb3VudCA+PSAwKTsKKworICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+
KGNvdW50KSArIDEgPiAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSAv
IHNpemVvZih1bnNpZ25lZCBpbnQpKSkKKyAgICB7CisgICAgICAgIEVSUigiQ291bGQgbm90IGNy
ZWF0ZSBhIDMyLWJpdCBsb29waW5nIGluZGV4IGJ1ZmZlciBmb3IgR0xfTElORV9MT09QLCB0b28g
bWFueSBpbmRpY2VzIHJlcXVpcmVkLiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KKworICAgIGNvbnN0IHVuc2lnbmVkIGludCBzcGFjZU5lZWRl
ZCA9IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGNvdW50KSArIDEpICogc2l6ZW9mKHVuc2ln
bmVkIGludCk7CisgICAgaWYgKCFtTGluZUxvb3BJQi0+cmVzZXJ2ZUJ1ZmZlclNwYWNlKHNwYWNl
TmVlZGVkLCBHTF9VTlNJR05FRF9JTlQpKQorICAgIHsKKyAgICAgICAgRVJSKCJDb3VsZCBub3Qg
cmVzZXJ2ZSBlbm91Z2ggc3BhY2UgaW4gbG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVf
TE9PUC4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9CisKKyAgICB2b2lkKiBtYXBwZWRNZW1vcnkgPSBOVUxMOworICAgIHVuc2lnbmVkIGludCBv
ZmZzZXQ7CisgICAgaWYgKCFtTGluZUxvb3BJQi0+bWFwQnVmZmVyKHNwYWNlTmVlZGVkLCAmbWFw
cGVkTWVtb3J5LCAmb2Zmc2V0KSkKKyAgICB7CisgICAgICAgIEVSUigiQ291bGQgbm90IG1hcCBp
bmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBpbnQgKmRhdGEgPSBy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KG1hcHBlZE1lbW9yeSk7CisgICAgdW5zaWdu
ZWQgaW50IGluZGV4QnVmZmVyT2Zmc2V0ID0gb2Zmc2V0OworCisgICAgc3dpdGNoICh0eXBlKQor
ICAgIHsKKyAgICAgIGNhc2UgR0xfTk9ORTogICAvLyBOb24taW5kZXhlZCBkcmF3CisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAg
ZGF0YVtpXSA9IGk7CisgICAgICAgIH0KKyAgICAgICAgZGF0YVtjb3VudF0gPSAwOworICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBkYXRhW2ldID0g
c3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpW2ldOworICAgICAgICB9CisgICAg
ICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpWzBd
OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6CisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAg
ZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNlcylbaV07CisgICAg
ICAgIH0KKyAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+
KGluZGljZXMpWzBdOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5U
OgorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVtp
XTsKKyAgICAgICAgfQorICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNvbnN0IEdM
dWludCo+KGluZGljZXMpWzBdOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgfQorCisgICAgaWYgKCFtTGluZUxvb3BJQi0+dW5tYXBCdWZmZXIoKSkK
KyAgICB7CisgICAgICAgIEVSUigiQ291bGQgbm90IHVubWFwIGluZGV4IGJ1ZmZlciBmb3IgR0xf
TElORV9MT09QLiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KKworICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9IG1MaW5lTG9vcElCLT5nZXRT
ZXJpYWwoKSB8fCBtQXBwbGllZElCT2Zmc2V0ICE9IGluZGV4QnVmZmVyT2Zmc2V0KQorICAgIHsK
KyAgICAgICAgSW5kZXhCdWZmZXIxMSAqaW5kZXhCdWZmZXIgPSBJbmRleEJ1ZmZlcjExOjptYWtl
SW5kZXhCdWZmZXIxMShtTGluZUxvb3BJQi0+Z2V0SW5kZXhCdWZmZXIoKSk7CisKKyAgICAgICAg
bURldmljZUNvbnRleHQtPklBU2V0SW5kZXhCdWZmZXIoaW5kZXhCdWZmZXItPmdldEJ1ZmZlcigp
LCBpbmRleEJ1ZmZlci0+Z2V0SW5kZXhGb3JtYXQoKSwgaW5kZXhCdWZmZXJPZmZzZXQpOworICAg
ICAgICBtQXBwbGllZElCU2VyaWFsID0gbUxpbmVMb29wSUItPmdldFNlcmlhbCgpOworICAgICAg
ICBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbCA9IDA7CisgICAgICAgIG1BcHBsaWVkSUJPZmZzZXQg
PSBpbmRleEJ1ZmZlck9mZnNldDsKKyAgICB9CisKKyAgICBtRGV2aWNlQ29udGV4dC0+RHJhd0lu
ZGV4ZWQoY291bnQgKyAxLCAwLCAtbWluSW5kZXgpOworfQorCit2b2lkIFJlbmRlcmVyMTE6OmRy
YXdUcmlhbmdsZUZhbihHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICpp
bmRpY2VzLCBpbnQgbWluSW5kZXgsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgaW50
IGluc3RhbmNlcykKK3sKKyAgICAvLyBHZXQgdGhlIHJhdyBpbmRpY2VzIGZvciBhbiBpbmRleGVk
IGRyYXcKKyAgICBpZiAodHlwZSAhPSBHTF9OT05FICYmIGVsZW1lbnRBcnJheUJ1ZmZlcikKKyAg
ICB7CisgICAgICAgIGdsOjpCdWZmZXIgKmluZGV4QnVmZmVyID0gZWxlbWVudEFycmF5QnVmZmVy
OworICAgICAgICBCdWZmZXJTdG9yYWdlICpzdG9yYWdlID0gaW5kZXhCdWZmZXItPmdldFN0b3Jh
Z2UoKTsKKyAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4oaW5kaWNlcyk7CisgICAgICAgIGluZGljZXMgPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRl
Kj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSArIG9mZnNldDsKKyAgICB9CisKKyAgICBpZiAoIW1Ucmlh
bmdsZUZhbklCKQorICAgIHsKKyAgICAgICAgbVRyaWFuZ2xlRmFuSUIgPSBuZXcgU3RyZWFtaW5n
SW5kZXhCdWZmZXJJbnRlcmZhY2UodGhpcyk7CisgICAgICAgIGlmICghbVRyaWFuZ2xlRmFuSUIt
PnJlc2VydmVCdWZmZXJTcGFjZShJTklUSUFMX0lOREVYX0JVRkZFUl9TSVpFLCBHTF9VTlNJR05F
RF9JTlQpKQorICAgICAgICB7CisgICAgICAgICAgICBkZWxldGUgbVRyaWFuZ2xlRmFuSUI7Cisg
ICAgICAgICAgICBtVHJpYW5nbGVGYW5JQiA9IE5VTEw7CisKKyAgICAgICAgICAgIEVSUigiQ291
bGQgbm90IGNyZWF0ZSBhIHNjcmF0Y2ggaW5kZXggYnVmZmVyIGZvciBHTF9UUklBTkdMRV9GQU4u
Iik7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gQ2hlY2tlZCBieSBSZW5kZXJlcjExOjphcHBseVByaW1p
dGl2ZVR5cGUKKyAgICBBU1NFUlQoY291bnQgPj0gMyk7CisKKyAgICBjb25zdCB1bnNpZ25lZCBp
bnQgbnVtVHJpcyA9IGNvdW50IC0gMjsKKworICAgIGlmIChudW1UcmlzID4gKHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLyAoc2l6ZW9mKHVuc2lnbmVkIGludCkgKiAz
KSkpCisgICAgeworICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSBzY3JhdGNoIGluZGV4
IGJ1ZmZlciBmb3IgR0xfVFJJQU5HTEVfRkFOLCB0b28gbWFueSBpbmRpY2VzIHJlcXVpcmVkLiIp
OworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KKwor
ICAgIGNvbnN0IHVuc2lnbmVkIGludCBzcGFjZU5lZWRlZCA9IChudW1UcmlzICogMykgKiBzaXpl
b2YodW5zaWduZWQgaW50KTsKKyAgICBpZiAoIW1UcmlhbmdsZUZhbklCLT5yZXNlcnZlQnVmZmVy
U3BhY2Uoc3BhY2VOZWVkZWQsIEdMX1VOU0lHTkVEX0lOVCkpCisgICAgeworICAgICAgICBFUlIo
IkNvdWxkIG5vdCByZXNlcnZlIGVub3VnaCBzcGFjZSBpbiBzY3JhdGNoIGluZGV4IGJ1ZmZlciBm
b3IgR0xfVFJJQU5HTEVfRkFOLiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KKworICAgIHZvaWQqIG1hcHBlZE1lbW9yeSA9IE5VTEw7CisgICAg
dW5zaWduZWQgaW50IG9mZnNldDsKKyAgICBpZiAoIW1UcmlhbmdsZUZhbklCLT5tYXBCdWZmZXIo
c3BhY2VOZWVkZWQsICZtYXBwZWRNZW1vcnksICZvZmZzZXQpKQorICAgIHsKKyAgICAgICAgRVJS
KCJDb3VsZCBub3QgbWFwIHNjcmF0Y2ggaW5kZXggYnVmZmVyIGZvciBHTF9UUklBTkdMRV9GQU4u
Iik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
CisgICAgdW5zaWduZWQgaW50ICpkYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQq
PihtYXBwZWRNZW1vcnkpOworICAgIHVuc2lnbmVkIGludCBpbmRleEJ1ZmZlck9mZnNldCA9IG9m
ZnNldDsKKworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX05PTkU6ICAg
Ly8gTm9uLWluZGV4ZWQgZHJhdworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IG51bVRyaXM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgZGF0YVtpKjMgKyAwXSA9IDA7
CisgICAgICAgICAgICBkYXRhW2kqMyArIDFdID0gaSArIDE7CisgICAgICAgICAgICBkYXRhW2kq
MyArIDJdID0gaSArIDI7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0JZVEU6CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVt
VHJpczsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBkYXRhW2kqMyArIDBdID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpWzBdOworICAgICAgICAgICAgZGF0YVtpKjMg
KyAxXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKVtpICsgMV07CisgICAg
ICAgICAgICBkYXRhW2kqMyArIDJdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGlj
ZXMpW2kgKyAyXTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlQ6CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtVHJp
czsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBkYXRhW2kqMyArIDBdID0gc3RhdGljX2Nh
c3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVswXTsKKyAgICAgICAgICAgIGRhdGFbaSozICsg
MV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpW2kgKyAxXTsKKyAgICAg
ICAgICAgIGRhdGFbaSozICsgMl0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGlj
ZXMpW2kgKyAyXTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5T
SUdORURfSU5UOgorICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVRyaXM7
IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgZGF0YVtpKjMgKyAwXSA9IHN0YXRpY19jYXN0
PGNvbnN0IEdMdWludCo+KGluZGljZXMpWzBdOworICAgICAgICAgICAgZGF0YVtpKjMgKyAxXSA9
IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMpW2kgKyAxXTsKKyAgICAgICAgICAg
IGRhdGFbaSozICsgMl0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVtpICsg
Ml07CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOworICAgIH0KKworICAgIGlmICghbVRyaWFuZ2xlRmFuSUItPnVubWFwQnVmZmVyKCkpCisg
ICAgeworICAgICAgICBFUlIoIkNvdWxkIG5vdCB1bm1hcCBzY3JhdGNoIGluZGV4IGJ1ZmZlciBm
b3IgR0xfVFJJQU5HTEVfRkFOLiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KKworICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9IG1Ucmlhbmds
ZUZhbklCLT5nZXRTZXJpYWwoKSB8fCBtQXBwbGllZElCT2Zmc2V0ICE9IGluZGV4QnVmZmVyT2Zm
c2V0KQorICAgIHsKKyAgICAgICAgSW5kZXhCdWZmZXIxMSAqaW5kZXhCdWZmZXIgPSBJbmRleEJ1
ZmZlcjExOjptYWtlSW5kZXhCdWZmZXIxMShtVHJpYW5nbGVGYW5JQi0+Z2V0SW5kZXhCdWZmZXIo
KSk7CisKKyAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0SW5kZXhCdWZmZXIoaW5kZXhCdWZm
ZXItPmdldEJ1ZmZlcigpLCBpbmRleEJ1ZmZlci0+Z2V0SW5kZXhGb3JtYXQoKSwgaW5kZXhCdWZm
ZXJPZmZzZXQpOworICAgICAgICBtQXBwbGllZElCU2VyaWFsID0gbVRyaWFuZ2xlRmFuSUItPmdl
dFNlcmlhbCgpOworICAgICAgICBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbCA9IDA7CisgICAgICAg
IG1BcHBsaWVkSUJPZmZzZXQgPSBpbmRleEJ1ZmZlck9mZnNldDsKKyAgICB9CisKKyAgICBpZiAo
aW5zdGFuY2VzID4gMCkKKyAgICB7CisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5EcmF3SW5kZXhl
ZEluc3RhbmNlZChudW1UcmlzICogMywgaW5zdGFuY2VzLCAwLCAtbWluSW5kZXgsIDApOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRGV2aWNlQ29udGV4dC0+RHJhd0luZGV4ZWQo
bnVtVHJpcyAqIDMsIDAsIC1taW5JbmRleCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlcmVyMTE6
OmFwcGx5U2hhZGVycyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSkKK3sKKyAgICB1
bnNpZ25lZCBpbnQgcHJvZ3JhbUJpbmFyeVNlcmlhbCA9IHByb2dyYW1CaW5hcnktPmdldFNlcmlh
bCgpOworICAgIGNvbnN0IGJvb2wgdXBkYXRlUHJvZ3JhbVN0YXRlID0gKHByb2dyYW1CaW5hcnlT
ZXJpYWwgIT0gbUFwcGxpZWRQcm9ncmFtQmluYXJ5U2VyaWFsKTsKKworICAgIGlmICh1cGRhdGVQ
cm9ncmFtU3RhdGUpCisgICAgeworICAgICAgICBTaGFkZXJFeGVjdXRhYmxlICp2ZXJ0ZXhFeGUg
PSBwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlKCk7CisgICAgICAgIFNoYWRlckV4
ZWN1dGFibGUgKnBpeGVsRXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxFeGVjdXRhYmxlKCk7
CisKKyAgICAgICAgSUQzRDExVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIgPSBOVUxMOworICAg
ICAgICBpZiAodmVydGV4RXhlKSB2ZXJ0ZXhTaGFkZXIgPSBTaGFkZXJFeGVjdXRhYmxlMTE6Om1h
a2VTaGFkZXJFeGVjdXRhYmxlMTEodmVydGV4RXhlKS0+Z2V0VmVydGV4U2hhZGVyKCk7CisKKyAg
ICAgICAgSUQzRDExUGl4ZWxTaGFkZXIgKnBpeGVsU2hhZGVyID0gTlVMTDsKKyAgICAgICAgaWYg
KHBpeGVsRXhlKSBwaXhlbFNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4
ZWN1dGFibGUxMShwaXhlbEV4ZSktPmdldFBpeGVsU2hhZGVyKCk7CisKKyAgICAgICAgbURldmlj
ZUNvbnRleHQtPlBTU2V0U2hhZGVyKHBpeGVsU2hhZGVyLCBOVUxMLCAwKTsKKyAgICAgICAgbURl
dmljZUNvbnRleHQtPlZTU2V0U2hhZGVyKHZlcnRleFNoYWRlciwgTlVMTCwgMCk7CisKKyAgICAg
ICAgcHJvZ3JhbUJpbmFyeS0+ZGlydHlBbGxVbmlmb3JtcygpOworCisgICAgICAgIG1BcHBsaWVk
UHJvZ3JhbUJpbmFyeVNlcmlhbCA9IHByb2dyYW1CaW5hcnlTZXJpYWw7CisgICAgfQorCisgICAg
Ly8gT25seSB1c2UgdGhlIGdlb21ldHJ5IHNoYWRlciBjdXJyZW50bHkgZm9yIHBvaW50IHNwcml0
ZSBkcmF3aW5nCisgICAgY29uc3QgYm9vbCB1c2VzR2VvbWV0cnlTaGFkZXIgPSAocHJvZ3JhbUJp
bmFyeS0+dXNlc0dlb21ldHJ5U2hhZGVyKCkgJiYgbUN1clJhc3RlclN0YXRlLnBvaW50RHJhd01v
ZGUpOworCisgICAgaWYgKHVwZGF0ZVByb2dyYW1TdGF0ZSB8fCB1c2VzR2VvbWV0cnlTaGFkZXIg
IT0gbUlzR2VvbWV0cnlTaGFkZXJBY3RpdmUpCisgICAgeworICAgICAgICBpZiAodXNlc0dlb21l
dHJ5U2hhZGVyKQorICAgICAgICB7CisgICAgICAgICAgICBTaGFkZXJFeGVjdXRhYmxlICpnZW9t
ZXRyeUV4ZSA9IHByb2dyYW1CaW5hcnktPmdldEdlb21ldHJ5RXhlY3V0YWJsZSgpOworICAgICAg
ICAgICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmdlb21ldHJ5U2hhZGVyID0gU2hhZGVyRXhlY3V0
YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKGdlb21ldHJ5RXhlKS0+Z2V0R2VvbWV0cnlT
aGFkZXIoKTsKKyAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldFNoYWRlcihnZW9tZXRy
eVNoYWRlciwgTlVMTCwgMCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIoTlVMTCwgTlVMTCwgMCk7Cisg
ICAgICAgIH0KKworICAgICAgICBtSXNHZW9tZXRyeVNoYWRlckFjdGl2ZSA9IHVzZXNHZW9tZXRy
eVNoYWRlcjsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6YXBwbHlVbmlmb3JtcyhnbDo6
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlVuaWZvcm1BcnJheSAqdW5pZm9ybUFy
cmF5KQoreworICAgIFNoYWRlckV4ZWN1dGFibGUxMSAqdmVydGV4RXhlY3V0YWJsZSA9IFNoYWRl
ckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShwcm9ncmFtQmluYXJ5LT5nZXRW
ZXJ0ZXhFeGVjdXRhYmxlKCkpOworICAgIFNoYWRlckV4ZWN1dGFibGUxMSAqcGl4ZWxFeGVjdXRh
YmxlID0gU2hhZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKHByb2dyYW1C
aW5hcnktPmdldFBpeGVsRXhlY3V0YWJsZSgpKTsKKworICAgIHVuc2lnbmVkIGludCB0b3RhbFJl
Z2lzdGVyQ291bnRWUyA9IDA7CisgICAgdW5zaWduZWQgaW50IHRvdGFsUmVnaXN0ZXJDb3VudFBT
ID0gMDsKKworICAgIGJvb2wgdmVydGV4VW5pZm9ybXNEaXJ0eSA9IGZhbHNlOworICAgIGJvb2wg
cGl4ZWxVbmlmb3Jtc0RpcnR5ID0gZmFsc2U7CisKKyAgICBmb3IgKGdsOjpVbmlmb3JtQXJyYXk6
OmNvbnN0X2l0ZXJhdG9yIHVuaWZvcm1faXRlcmF0b3IgPSB1bmlmb3JtQXJyYXktPmJlZ2luKCk7
IHVuaWZvcm1faXRlcmF0b3IgIT0gdW5pZm9ybUFycmF5LT5lbmQoKTsgdW5pZm9ybV9pdGVyYXRv
cisrKQorICAgIHsKKyAgICAgICAgY29uc3QgZ2w6OlVuaWZvcm0gKnVuaWZvcm0gPSAqdW5pZm9y
bV9pdGVyYXRvcjsKKworICAgICAgICBpZiAodW5pZm9ybS0+dnNSZWdpc3RlckluZGV4ID49IDAp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHRvdGFsUmVnaXN0ZXJDb3VudFZTICs9IHVuaWZvcm0t
PnJlZ2lzdGVyQ291bnQ7CisgICAgICAgICAgICB2ZXJ0ZXhVbmlmb3Jtc0RpcnR5ID0gdmVydGV4
VW5pZm9ybXNEaXJ0eSB8fCB1bmlmb3JtLT5kaXJ0eTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICh1bmlmb3JtLT5wc1JlZ2lzdGVySW5kZXggPj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAg
dG90YWxSZWdpc3RlckNvdW50UFMgKz0gdW5pZm9ybS0+cmVnaXN0ZXJDb3VudDsKKyAgICAgICAg
ICAgIHBpeGVsVW5pZm9ybXNEaXJ0eSA9IHBpeGVsVW5pZm9ybXNEaXJ0eSB8fCB1bmlmb3JtLT5k
aXJ0eTsKKyAgICAgICAgfQorICAgIH0KKworICAgIElEM0QxMUJ1ZmZlciAqdmVydGV4Q29uc3Rh
bnRCdWZmZXIgPSB2ZXJ0ZXhFeGVjdXRhYmxlLT5nZXRDb25zdGFudEJ1ZmZlcihtRGV2aWNlLCB0
b3RhbFJlZ2lzdGVyQ291bnRWUyk7CisgICAgSUQzRDExQnVmZmVyICpwaXhlbENvbnN0YW50QnVm
ZmVyID0gcGl4ZWxFeGVjdXRhYmxlLT5nZXRDb25zdGFudEJ1ZmZlcihtRGV2aWNlLCB0b3RhbFJl
Z2lzdGVyQ291bnRQUyk7CisKKyAgICBmbG9hdCAoKm1hcFZTKVs0XSA9IE5VTEw7CisgICAgZmxv
YXQgKCptYXBQUylbNF0gPSBOVUxMOworCisgICAgaWYgKHRvdGFsUmVnaXN0ZXJDb3VudFZTID4g
MCAmJiB2ZXJ0ZXhVbmlmb3Jtc0RpcnR5KQorICAgIHsKKyAgICAgICAgRDNEMTFfTUFQUEVEX1NV
QlJFU09VUkNFIG1hcCA9IHswfTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlQ29u
dGV4dC0+TWFwKHZlcnRleENvbnN0YW50QnVmZmVyLCAwLCBEM0QxMV9NQVBfV1JJVEVfRElTQ0FS
RCwgMCwgJm1hcCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAg
IG1hcFZTID0gKGZsb2F0KCopWzRdKW1hcC5wRGF0YTsKKyAgICB9CisKKyAgICBpZiAodG90YWxS
ZWdpc3RlckNvdW50UFMgPiAwICYmIHBpeGVsVW5pZm9ybXNEaXJ0eSkKKyAgICB7CisgICAgICAg
IEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXAgPSB7MH07CisgICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gbURldmljZUNvbnRleHQtPk1hcChwaXhlbENvbnN0YW50QnVmZmVyLCAwLCBEM0QxMV9N
QVBfV1JJVEVfRElTQ0FSRCwgMCwgJm1hcCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CisgICAgICAgIG1hcFBTID0gKGZsb2F0KCopWzRdKW1hcC5wRGF0YTsKKyAgICB9CisK
KyAgICBmb3IgKGdsOjpVbmlmb3JtQXJyYXk6Oml0ZXJhdG9yIHVuaWZvcm1faXRlcmF0b3IgPSB1
bmlmb3JtQXJyYXktPmJlZ2luKCk7IHVuaWZvcm1faXRlcmF0b3IgIT0gdW5pZm9ybUFycmF5LT5l
bmQoKTsgdW5pZm9ybV9pdGVyYXRvcisrKQorICAgIHsKKyAgICAgICAgZ2w6OlVuaWZvcm0gKnVu
aWZvcm0gPSAqdW5pZm9ybV9pdGVyYXRvcjsKKworICAgICAgICBpZiAodW5pZm9ybS0+dHlwZSAh
PSAgR0xfU0FNUExFUl8yRCAmJiB1bmlmb3JtLT50eXBlICE9IEdMX1NBTVBMRVJfQ1VCRSkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKHVuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleCA+PSAwICYm
IG1hcFZTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1lbWNweShtYXBWUyArIHVu
aWZvcm0tPnZzUmVnaXN0ZXJJbmRleCwgdW5pZm9ybS0+ZGF0YSwgdW5pZm9ybS0+cmVnaXN0ZXJD
b3VudCAqIHNpemVvZihmbG9hdFs0XSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAodW5pZm9ybS0+cHNSZWdpc3RlckluZGV4ID49IDAgJiYgbWFwUFMpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgbWVtY3B5KG1hcFBTICsgdW5pZm9ybS0+cHNSZWdpc3RlckluZGV4
LCB1bmlmb3JtLT5kYXRhLCB1bmlmb3JtLT5yZWdpc3RlckNvdW50ICogc2l6ZW9mKGZsb2F0WzRd
KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB1bmlmb3JtLT5kaXJ0eSA9
IGZhbHNlOworICAgIH0KKworICAgIGlmIChtYXBWUykKKyAgICB7CisgICAgICAgIG1EZXZpY2VD
b250ZXh0LT5Vbm1hcCh2ZXJ0ZXhDb25zdGFudEJ1ZmZlciwgMCk7CisgICAgfQorCisgICAgaWYg
KG1hcFBTKQorICAgIHsKKyAgICAgICAgbURldmljZUNvbnRleHQtPlVubWFwKHBpeGVsQ29uc3Rh
bnRCdWZmZXIsIDApOworICAgIH0KKworICAgIGlmIChtQ3VycmVudFZlcnRleENvbnN0YW50QnVm
ZmVyICE9IHZlcnRleENvbnN0YW50QnVmZmVyKQorICAgIHsKKyAgICAgICAgbURldmljZUNvbnRl
eHQtPlZTU2V0Q29uc3RhbnRCdWZmZXJzKDAsIDEsICZ2ZXJ0ZXhDb25zdGFudEJ1ZmZlcik7Cisg
ICAgICAgIG1DdXJyZW50VmVydGV4Q29uc3RhbnRCdWZmZXIgPSB2ZXJ0ZXhDb25zdGFudEJ1ZmZl
cjsKKyAgICB9CisKKyAgICBpZiAobUN1cnJlbnRQaXhlbENvbnN0YW50QnVmZmVyICE9IHBpeGVs
Q29uc3RhbnRCdWZmZXIpCisgICAgeworICAgICAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRDb25z
dGFudEJ1ZmZlcnMoMCwgMSwgJnBpeGVsQ29uc3RhbnRCdWZmZXIpOworICAgICAgICBtQ3VycmVu
dFBpeGVsQ29uc3RhbnRCdWZmZXIgPSBwaXhlbENvbnN0YW50QnVmZmVyOworICAgIH0KKworICAg
IC8vIERyaXZlciB1bmlmb3JtcworICAgIGlmICghbURyaXZlckNvbnN0YW50QnVmZmVyVlMpCisg
ICAgeworICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9u
ID0gezB9OworICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLkJ5dGVXaWR0aCA9IHNp
emVvZihkeF9WZXJ0ZXhDb25zdGFudHMpOworICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0
aW9uLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKKyAgICAgICAgY29uc3RhbnRCdWZmZXJE
ZXNjcmlwdGlvbi5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX0NPTlNUQU5UX0JVRkZFUjsKKyAgICAg
ICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5DUFVBY2Nlc3NGbGFncyA9IDA7CisgICAgICAg
IGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uTWlzY0ZsYWdzID0gMDsKKyAgICAgICAgY29uc3Rh
bnRCdWZmZXJEZXNjcmlwdGlvbi5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKKworICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmY29uc3RhbnRCdWZmZXJEZXNj
cmlwdGlvbiwgTlVMTCwgJm1Ecml2ZXJDb25zdGFudEJ1ZmZlclZTKTsKKyAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICBtRGV2aWNlQ29udGV4dC0+VlNTZXRDb25z
dGFudEJ1ZmZlcnMoMSwgMSwgJm1Ecml2ZXJDb25zdGFudEJ1ZmZlclZTKTsKKyAgICB9CisKKyAg
ICBpZiAoIW1Ecml2ZXJDb25zdGFudEJ1ZmZlclBTKQorICAgIHsKKyAgICAgICAgRDNEMTFfQlVG
RkVSX0RFU0MgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbiA9IHswfTsKKyAgICAgICAgY29uc3Rh
bnRCdWZmZXJEZXNjcmlwdGlvbi5CeXRlV2lkdGggPSBzaXplb2YoZHhfUGl4ZWxDb25zdGFudHMp
OworICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLlVzYWdlID0gRDNEMTFfVVNBR0Vf
REVGQVVMVDsKKyAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5CaW5kRmxhZ3MgPSBE
M0QxMV9CSU5EX0NPTlNUQU5UX0JVRkZFUjsKKyAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlw
dGlvbi5DUFVBY2Nlc3NGbGFncyA9IDA7CisgICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRp
b24uTWlzY0ZsYWdzID0gMDsKKyAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5TdHJ1
Y3R1cmVCeXRlU3RyaWRlID0gMDsKKworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2Ut
PkNyZWF0ZUJ1ZmZlcigmY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbiwgTlVMTCwgJm1Ecml2ZXJD
b25zdGFudEJ1ZmZlclBTKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKwor
ICAgICAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRDb25zdGFudEJ1ZmZlcnMoMSwgMSwgJm1Ecml2
ZXJDb25zdGFudEJ1ZmZlclBTKTsKKyAgICB9CisKKyAgICBpZiAobWVtY21wKCZtVmVydGV4Q29u
c3RhbnRzLCAmbUFwcGxpZWRWZXJ0ZXhDb25zdGFudHMsIHNpemVvZihkeF9WZXJ0ZXhDb25zdGFu
dHMpKSAhPSAwKQorICAgIHsKKyAgICAgICAgbURldmljZUNvbnRleHQtPlVwZGF0ZVN1YnJlc291
cmNlKG1Ecml2ZXJDb25zdGFudEJ1ZmZlclZTLCAwLCBOVUxMLCAmbVZlcnRleENvbnN0YW50cywg
MTYsIDApOworICAgICAgICBtZW1jcHkoJm1BcHBsaWVkVmVydGV4Q29uc3RhbnRzLCAmbVZlcnRl
eENvbnN0YW50cywgc2l6ZW9mKGR4X1ZlcnRleENvbnN0YW50cykpOworICAgIH0KKworICAgIGlm
IChtZW1jbXAoJm1QaXhlbENvbnN0YW50cywgJm1BcHBsaWVkUGl4ZWxDb25zdGFudHMsIHNpemVv
ZihkeF9QaXhlbENvbnN0YW50cykpICE9IDApCisgICAgeworICAgICAgICBtRGV2aWNlQ29udGV4
dC0+VXBkYXRlU3VicmVzb3VyY2UobURyaXZlckNvbnN0YW50QnVmZmVyUFMsIDAsIE5VTEwsICZt
UGl4ZWxDb25zdGFudHMsIDE2LCAwKTsKKyAgICAgICAgbWVtY3B5KCZtQXBwbGllZFBpeGVsQ29u
c3RhbnRzLCAmbVBpeGVsQ29uc3RhbnRzLCBzaXplb2YoZHhfUGl4ZWxDb25zdGFudHMpKTsKKyAg
ICB9CisKKyAgICAvLyBuZWVkZWQgZm9yIHRoZSBwb2ludCBzcHJpdGUgZ2VvbWV0cnkgc2hhZGVy
CisgICAgaWYgKG1DdXJyZW50R2VvbWV0cnlDb25zdGFudEJ1ZmZlciAhPSBtRHJpdmVyQ29uc3Rh
bnRCdWZmZXJQUykKKyAgICB7CisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldENvbnN0YW50
QnVmZmVycygwLCAxLCAmbURyaXZlckNvbnN0YW50QnVmZmVyUFMpOworICAgICAgICBtQ3VycmVu
dEdlb21ldHJ5Q29uc3RhbnRCdWZmZXIgPSBtRHJpdmVyQ29uc3RhbnRCdWZmZXJQUzsKKyAgICB9
Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6Y2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyYW1ldGVycyAm
Y2xlYXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpCit7CisgICAgIGdsOjpS
ZW5kZXJidWZmZXIgKmZpcnN0UmVuZGVyYnVmZmVyID0gZnJhbWVCdWZmZXItPmdldEZpcnN0Q29s
b3JidWZmZXIoKTsKKyAgICAgR0xlbnVtIGludGVybmFsRm9ybWF0ID0gZmlyc3RSZW5kZXJidWZm
ZXIgPyBmaXJzdFJlbmRlcmJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSA6IEdMX05PTkU7CisK
KyAgICAgYm9vbCBuZWVkTWFza2VkQ29sb3JDbGVhciA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xf
Q09MT1JfQlVGRkVSX0JJVCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgo
IWNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCAmJiBnbDo6R2V0UmVkU2l6ZShpbnRlcm5hbEZvcm1h
dCkgPiAwKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghY2xlYXJQYXJh
bXMuY29sb3JNYXNrR3JlZW4gJiYgZ2w6OkdldEdyZWVuU2l6ZShpbnRlcm5hbEZvcm1hdCkgPiAw
KSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghY2xlYXJQYXJhbXMuY29s
b3JNYXNrQmx1ZSAmJiBnbDo6R2V0Qmx1ZVNpemUoaW50ZXJuYWxGb3JtYXQpID4gMCkgfHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIWNsZWFyUGFyYW1zLmNvbG9yTWFza0Fs
cGhhICYmIGdsOjpHZXRBbHBoYVNpemUoaW50ZXJuYWxGb3JtYXQpID4gMCkpOworCisgICAgIHVu
c2lnbmVkIGludCBzdGVuY2lsVW5tYXNrZWQgPSAweDA7CisgICAgIGlmIChmcmFtZUJ1ZmZlci0+
aGFzU3RlbmNpbCgpKQorICAgICB7CisgICAgICAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbFNpemUg
PSBnbDo6R2V0U3RlbmNpbFNpemUoZnJhbWVCdWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0
QWN0dWFsRm9ybWF0KCkpOworICAgICAgICAgc3RlbmNpbFVubWFza2VkID0gKDB4MSA8PCBzdGVu
Y2lsU2l6ZSkgLSAxOworICAgICB9CisgICAgIGJvb2wgbmVlZE1hc2tlZFN0ZW5jaWxDbGVhciA9
IChjbGVhclBhcmFtcy5tYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKSAmJgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xlYXJQYXJhbXMuc3RlbmNpbFdyaXRlTWFzayAm
IHN0ZW5jaWxVbm1hc2tlZCkgIT0gc3RlbmNpbFVubWFza2VkOworCisgICAgIGJvb2wgbmVlZFNj
aXNzb3JlZENsZWFyID0gbVNjaXNzb3JFbmFibGVkICYmIChtQ3VyU2Npc3Nvci54ID4gMCB8fCBt
Q3VyU2Npc3Nvci55ID4gMCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbUN1clNjaXNzb3IueCArIG1DdXJTY2lzc29yLndpZHRoIDwgbVJlbmRl
clRhcmdldERlc2Mud2lkdGggfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1DdXJTY2lzc29yLnkgKyBtQ3VyU2Npc3Nvci5oZWlnaHQgPCBtUmVu
ZGVyVGFyZ2V0RGVzYy5oZWlnaHQpOworCisgICAgIGlmIChuZWVkTWFza2VkQ29sb3JDbGVhciB8
fCBuZWVkTWFza2VkU3RlbmNpbENsZWFyIHx8IG5lZWRTY2lzc29yZWRDbGVhcikKKyAgICAgewor
ICAgICAgICAgbWFza2VkQ2xlYXIoY2xlYXJQYXJhbXMsIGZyYW1lQnVmZmVyKTsKKyAgICAgfQor
ICAgICBlbHNlCisgICAgIHsKKyAgICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09M
T1JfQlVGRkVSX0JJVCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBjb2xvckF0dGFjaG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQgPCBnbDo6SU1QTEVNRU5UQVRJ
T05fTUFYX0RSQVdfQlVGRkVSUzsgY29sb3JBdHRhY2htZW50KyspCisgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICBpZiAoZnJhbWVCdWZmZXItPmlzRW5hYmxlZENvbG9yQXR0YWNobWVu
dChjb2xvckF0dGFjaG1lbnQpKQorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXJPYmplY3QgPSBmcmFtZUJ1ZmZlci0+
Z2V0Q29sb3JidWZmZXIoY29sb3JBdHRhY2htZW50KTsKKyAgICAgICAgICAgICAgICAgICAgIGlm
IChyZW5kZXJidWZmZXJPYmplY3QpCisgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBSZW5kZXJUYXJnZXQxMSAqcmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0
MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShyZW5kZXJidWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdl
dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVuZGVyVGFyZ2V0KQorICAgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVSUigicmVu
ZGVyIHRhcmdldCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZnJhbWVidWZmZXJSVFYg
PSByZW5kZXJUYXJnZXQtPmdldFJlbmRlclRhcmdldFZpZXcoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghZnJhbWVidWZmZXJSVFYpCisgICAgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHZpZXcgcG9pbnRl
ciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IEdMZW51bSBmb3JtYXQgPSByZW5kZXJidWZmZXJPYmplY3QtPmdldEludGVybmFsRm9ybWF0KCk7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGNsZWFyVmFsdWVzWzRdID0g
eyAoZ2w6OkdldFJlZFNpemUoZm9ybWF0KSA+IDApICAgPyBjbGVhclBhcmFtcy5jb2xvckNsZWFy
VmFsdWUucmVkICAgOiAwLjBmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChnbDo6R2V0R3JlZW5TaXplKGZvcm1hdCkgPiAwKSA/IGNsZWFy
UGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5ncmVlbiA6IDAuMGYsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdsOjpHZXRCbHVlU2l6ZShmb3Jt
YXQpID4gMCkgID8gY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLmJsdWUgIDogMC4wZiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2w6
OkdldEFscGhhU2l6ZShmb3JtYXQpID4gMCkgPyBjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUu
YWxwaGEgOiAxLjBmIH07CisgICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+
Q2xlYXJSZW5kZXJUYXJnZXRWaWV3KGZyYW1lYnVmZmVyUlRWLCBjbGVhclZhbHVlcyk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0RFUFRIX0JVRkZFUl9C
SVQgfHwgY2xlYXJQYXJhbXMubWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkKKyAgICAgICAg
eworICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0ID0gZnJh
bWVCdWZmZXItPmdldERlcHRoT3JTdGVuY2lsYnVmZmVyKCk7CisgICAgICAgICAgICBpZiAocmVu
ZGVyYnVmZmVyT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFJlbmRlclRh
cmdldDExICpyZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDEx
KHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhTdGVuY2lsKCkpOworICAgICAgICAgICAgICAg
IGlmICghcmVuZGVyVGFyZ2V0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpmcmFtZWJ1ZmZlckRTViA9IHJlbmRlclRhcmdl
dC0+Z2V0RGVwdGhTdGVuY2lsVmlldygpOworICAgICAgICAgICAgICAgIGlmICghZnJhbWVidWZm
ZXJEU1YpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBFUlIoImRlcHRo
IHN0ZW5jaWwgdmlldyBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgVUlO
VCBjbGVhckZsYWdzID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAm
IEdMX0RFUFRIX0JVRkZFUl9CSVQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBjbGVhckZsYWdzIHw9IEQzRDExX0NMRUFSX0RFUFRIOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX1NURU5DSUxfQlVGRkVS
X0JJVCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNsZWFyRmxhZ3Mg
fD0gRDNEMTFfQ0xFQVJfU1RFTkNJTDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBmbG9hdCBkZXB0aENsZWFyID0gZ2w6OmNsYW1wMDEoY2xlYXJQYXJhbXMuZGVwdGhDbGVh
clZhbHVlKTsKKyAgICAgICAgICAgICAgICBVSU5UOCBzdGVuY2lsQ2xlYXIgPSBjbGVhclBhcmFt
cy5zdGVuY2lsQ2xlYXJWYWx1ZSAmIDB4MDAwMDAwRkY7CisKKyAgICAgICAgICAgICAgICBtRGV2
aWNlQ29udGV4dC0+Q2xlYXJEZXB0aFN0ZW5jaWxWaWV3KGZyYW1lYnVmZmVyRFNWLCBjbGVhckZs
YWdzLCBkZXB0aENsZWFyLCBzdGVuY2lsQ2xlYXIpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorfQorCit2b2lkIFJlbmRlcmVyMTE6Om1hc2tlZENsZWFyKGNvbnN0IGdsOjpDbGVh
clBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKQor
eworICAgIEhSRVNVTFQgcmVzdWx0OworCisgICAgaWYgKCFtQ2xlYXJSZXNvdXJjZXNJbml0aWFs
aXplZCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbUNsZWFyVkIgJiYgIW1DbGVhclZTICYmICFt
Q2xlYXJTaW5nbGVQUyAmJiAhbUNsZWFyTXVsdGlwbGVQUyAmJiAhbUNsZWFyU2Npc3NvclJTICYm
ICFtQ2xlYXJOb1NjaXNzb3JSUyk7CisKKyAgICAgICAgRDNEMTFfQlVGRkVSX0RFU0MgdmJEZXNj
OworICAgICAgICB2YkRlc2MuQnl0ZVdpZHRoID0gc2l6ZW9mKGQzZDExOjpQb3NpdGlvbkRlcHRo
Q29sb3JWZXJ0ZXgpICogNDsKKyAgICAgICAgdmJEZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfRFlO
QU1JQzsKKyAgICAgICAgdmJEZXNjLkJpbmRGbGFncyA9IEQzRDExX0JJTkRfVkVSVEVYX0JVRkZF
UjsKKyAgICAgICAgdmJEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19XUklU
RTsKKyAgICAgICAgdmJEZXNjLk1pc2NGbGFncyA9IDA7CisgICAgICAgIHZiRGVzYy5TdHJ1Y3R1
cmVCeXRlU3RyaWRlID0gMDsKKworICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVCdWZm
ZXIoJnZiRGVzYywgTlVMTCwgJm1DbGVhclZCKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKKyAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ2xlYXJWQiwgIlJlbmRlcmVy
MTEgbWFza2VkIGNsZWFyIHZlcnRleCBidWZmZXIiKTsKKworICAgICAgICBEM0QxMV9JTlBVVF9F
TEVNRU5UX0RFU0MgcXVhZExheW91dFtdID0KKyAgICAgICAgeworICAgICAgICAgICAgeyAiUE9T
SVRJT04iLCAwLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsICAgIDAsICAwLCBEM0QxMV9J
TlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAgfSwKKyAgICAgICAgICAgIHsgIkNPTE9SIiwgICAgMCwg
RFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAwLCAxMiwgRDNEMTFfSU5QVVRfUEVSX1ZF
UlRFWF9EQVRBLCAwIH0sCisgICAgICAgIH07CisKKyAgICAgICAgcmVzdWx0ID0gbURldmljZS0+
Q3JlYXRlSW5wdXRMYXlvdXQocXVhZExheW91dCwgMiwgZ19WU19DbGVhciwgc2l6ZW9mKGdfVlNf
Q2xlYXIpLCAmbUNsZWFySUwpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwor
ICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhcklMLCAiUmVuZGVyZXIxMSBtYXNrZWQg
Y2xlYXIgaW5wdXQgbGF5b3V0Iik7CisKKyAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRl
VmVydGV4U2hhZGVyKGdfVlNfQ2xlYXIsIHNpemVvZihnX1ZTX0NsZWFyKSwgTlVMTCwgJm1DbGVh
clZTKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgZDNkMTE6
OlNldERlYnVnTmFtZShtQ2xlYXJWUywgIlJlbmRlcmVyMTEgbWFza2VkIGNsZWFyIHZlcnRleCBz
aGFkZXIiKTsKKworICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihn
X1BTX0NsZWFyU2luZ2xlLCBzaXplb2YoZ19QU19DbGVhclNpbmdsZSksIE5VTEwsICZtQ2xlYXJT
aW5nbGVQUyk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIGQz
ZDExOjpTZXREZWJ1Z05hbWUobUNsZWFyU2luZ2xlUFMsICJSZW5kZXJlcjExIG1hc2tlZCBjbGVh
ciBwaXhlbCBzaGFkZXIgKDEgUlQpIik7CisKKyAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3Jl
YXRlUGl4ZWxTaGFkZXIoZ19QU19DbGVhck11bHRpcGxlLCBzaXplb2YoZ19QU19DbGVhck11bHRp
cGxlKSwgTlVMTCwgJm1DbGVhck11bHRpcGxlUFMpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOworICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhck11bHRpcGxlUFMs
ICJSZW5kZXJlcjExIG1hc2tlZCBjbGVhciBwaXhlbCBzaGFkZXIgKE1SVCkiKTsKKworICAgICAg
ICBEM0QxMV9SQVNURVJJWkVSX0RFU0MgcnNTY2lzc29yRGVzYzsKKyAgICAgICAgcnNTY2lzc29y
RGVzYy5GaWxsTW9kZSA9IEQzRDExX0ZJTExfU09MSUQ7CisgICAgICAgIHJzU2Npc3NvckRlc2Mu
Q3VsbE1vZGUgPSBEM0QxMV9DVUxMX05PTkU7CisgICAgICAgIHJzU2Npc3NvckRlc2MuRnJvbnRD
b3VudGVyQ2xvY2t3aXNlID0gRkFMU0U7CisgICAgICAgIHJzU2Npc3NvckRlc2MuRGVwdGhCaWFz
ID0gMDsKKyAgICAgICAgcnNTY2lzc29yRGVzYy5EZXB0aEJpYXNDbGFtcCA9IDAuMGY7CisgICAg
ICAgIHJzU2Npc3NvckRlc2MuU2xvcGVTY2FsZWREZXB0aEJpYXMgPSAwLjBmOworICAgICAgICBy
c1NjaXNzb3JEZXNjLkRlcHRoQ2xpcEVuYWJsZSA9IEZBTFNFOworICAgICAgICByc1NjaXNzb3JE
ZXNjLlNjaXNzb3JFbmFibGUgPSBUUlVFOworICAgICAgICByc1NjaXNzb3JEZXNjLk11bHRpc2Ft
cGxlRW5hYmxlID0gRkFMU0U7CisgICAgICAgIHJzU2Npc3NvckRlc2MuQW50aWFsaWFzZWRMaW5l
RW5hYmxlID0gRkFMU0U7CisKKyAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUmFzdGVy
aXplclN0YXRlKCZyc1NjaXNzb3JEZXNjLCAmbUNsZWFyU2Npc3NvclJTKTsKKyAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ2xl
YXJTY2lzc29yUlMsICJSZW5kZXJlcjExIG1hc2tlZCBjbGVhciBzY2lzc29yIHJhc3Rlcml6ZXIg
c3RhdGUiKTsKKworICAgICAgICBEM0QxMV9SQVNURVJJWkVSX0RFU0MgcnNOb1NjaXNzb3JEZXNj
OworICAgICAgICByc05vU2Npc3NvckRlc2MuRmlsbE1vZGUgPSBEM0QxMV9GSUxMX1NPTElEOwor
ICAgICAgICByc05vU2Npc3NvckRlc2MuQ3VsbE1vZGUgPSBEM0QxMV9DVUxMX05PTkU7CisgICAg
ICAgIHJzTm9TY2lzc29yRGVzYy5Gcm9udENvdW50ZXJDbG9ja3dpc2UgPSBGQUxTRTsKKyAgICAg
ICAgcnNOb1NjaXNzb3JEZXNjLkRlcHRoQmlhcyA9IDA7CisgICAgICAgIHJzTm9TY2lzc29yRGVz
Yy5EZXB0aEJpYXNDbGFtcCA9IDAuMGY7CisgICAgICAgIHJzTm9TY2lzc29yRGVzYy5TbG9wZVNj
YWxlZERlcHRoQmlhcyA9IDAuMGY7CisgICAgICAgIHJzTm9TY2lzc29yRGVzYy5EZXB0aENsaXBF
bmFibGUgPSBGQUxTRTsKKyAgICAgICAgcnNOb1NjaXNzb3JEZXNjLlNjaXNzb3JFbmFibGUgPSBG
QUxTRTsKKyAgICAgICAgcnNOb1NjaXNzb3JEZXNjLk11bHRpc2FtcGxlRW5hYmxlID0gRkFMU0U7
CisgICAgICAgIHJzTm9TY2lzc29yRGVzYy5BbnRpYWxpYXNlZExpbmVFbmFibGUgPSBGQUxTRTsK
KworICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVSYXN0ZXJpemVyU3RhdGUoJnJzTm9T
Y2lzc29yRGVzYywgJm1DbGVhck5vU2Npc3NvclJTKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURF
RChyZXN1bHQpKTsKKyAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ2xlYXJOb1NjaXNzb3JS
UywgIlJlbmRlcmVyMTEgbWFza2VkIGNsZWFyIG5vIHNjaXNzb3IgcmFzdGVyaXplciBzdGF0ZSIp
OworCisgICAgICAgIG1DbGVhclJlc291cmNlc0luaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9CisK
KyAgICAvLyBQcmVwYXJlIHRoZSBkZXB0aCBzdGVuY2lsIHN0YXRlIHRvIHdyaXRlIGRlcHRoIHZh
bHVlcyBpZiB0aGUgZGVwdGggc2hvdWxkIGJlIGNsZWFyZWQKKyAgICAvLyBhbmQgc3RlbmNpbCB2
YWx1ZXMgaWYgdGhlIHN0ZW5jaWwgc2hvdWxkIGJlIGNsZWFyZWQKKyAgICBnbDo6RGVwdGhTdGVu
Y2lsU3RhdGUgZ2xEU1N0YXRlOworICAgIGdsRFNTdGF0ZS5kZXB0aFRlc3QgPSAoY2xlYXJQYXJh
bXMubWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpICE9IDA7CisgICAgZ2xEU1N0YXRlLmRlcHRo
RnVuYyA9IEdMX0FMV0FZUzsKKyAgICBnbERTU3RhdGUuZGVwdGhNYXNrID0gKGNsZWFyUGFyYW1z
Lm1hc2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUKSAhPSAwOworICAgIGdsRFNTdGF0ZS5zdGVuY2ls
VGVzdCA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKSAhPSAwOwor
ICAgIGdsRFNTdGF0ZS5zdGVuY2lsRnVuYyA9IEdMX0FMV0FZUzsKKyAgICBnbERTU3RhdGUuc3Rl
bmNpbE1hc2sgPSAwOworICAgIGdsRFNTdGF0ZS5zdGVuY2lsRmFpbCA9IEdMX1JFUExBQ0U7Cisg
ICAgZ2xEU1N0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsID0gR0xfUkVQTEFDRTsKKyAgICBnbERT
U3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MgPSBHTF9SRVBMQUNFOworICAgIGdsRFNTdGF0ZS5z
dGVuY2lsV3JpdGVtYXNrID0gY2xlYXJQYXJhbXMuc3RlbmNpbFdyaXRlTWFzazsKKyAgICBnbERT
U3RhdGUuc3RlbmNpbEJhY2tGdW5jID0gR0xfQUxXQVlTOworICAgIGdsRFNTdGF0ZS5zdGVuY2ls
QmFja01hc2sgPSAwOworICAgIGdsRFNTdGF0ZS5zdGVuY2lsQmFja0ZhaWwgPSBHTF9SRVBMQUNF
OworICAgIGdsRFNTdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwgPSBHTF9SRVBMQUNFOwor
ICAgIGdsRFNTdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MgPSBHTF9SRVBMQUNFOworICAg
IGdsRFNTdGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzayA9IGNsZWFyUGFyYW1zLnN0ZW5jaWxXcml0
ZU1hc2s7CisKKyAgICBpbnQgc3RlbmNpbENsZWFyID0gY2xlYXJQYXJhbXMuc3RlbmNpbENsZWFy
VmFsdWUgJiAweDAwMDAwMEZGOworCisgICAgSUQzRDExRGVwdGhTdGVuY2lsU3RhdGUgKmRzU3Rh
dGUgPSBtU3RhdGVDYWNoZS5nZXREZXB0aFN0ZW5jaWxTdGF0ZShnbERTU3RhdGUpOworCisgICAg
Ly8gUHJlcGFyZSB0aGUgYmxlbmQgc3RhdGUgdG8gdXNlIGEgd3JpdGUgbWFzayBpZiB0aGUgY29s
b3IgYnVmZmVyIHNob3VsZCBiZSBjbGVhcmVkCisgICAgZ2w6OkJsZW5kU3RhdGUgZ2xCbGVuZFN0
YXRlOworICAgIGdsQmxlbmRTdGF0ZS5ibGVuZCA9IGZhbHNlOworICAgIGdsQmxlbmRTdGF0ZS5z
b3VyY2VCbGVuZFJHQiA9IEdMX09ORTsKKyAgICBnbEJsZW5kU3RhdGUuZGVzdEJsZW5kUkdCID0g
R0xfWkVSTzsKKyAgICBnbEJsZW5kU3RhdGUuc291cmNlQmxlbmRBbHBoYSA9IEdMX09ORTsKKyAg
ICBnbEJsZW5kU3RhdGUuZGVzdEJsZW5kQWxwaGEgPSBHTF9aRVJPOworICAgIGdsQmxlbmRTdGF0
ZS5ibGVuZEVxdWF0aW9uUkdCID0gR0xfRlVOQ19BREQ7CisgICAgZ2xCbGVuZFN0YXRlLmJsZW5k
RXF1YXRpb25BbHBoYSA9IEdMX0ZVTkNfQUREOworICAgIGdsQmxlbmRTdGF0ZS5jb2xvck1hc2tS
ZWQgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpID8gY2xlYXJQYXJh
bXMuY29sb3JNYXNrUmVkIDogZmFsc2U7CisgICAgZ2xCbGVuZFN0YXRlLmNvbG9yTWFza0dyZWVu
ID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSA/IGNsZWFyUGFyYW1z
LmNvbG9yTWFza0dyZWVuIDogZmFsc2U7CisgICAgZ2xCbGVuZFN0YXRlLmNvbG9yTWFza0JsdWUg
PSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpID8gY2xlYXJQYXJhbXMu
Y29sb3JNYXNrQmx1ZSA6IGZhbHNlOworICAgIGdsQmxlbmRTdGF0ZS5jb2xvck1hc2tBbHBoYSA9
IChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkgPyBjbGVhclBhcmFtcy5j
b2xvck1hc2tBbHBoYSA6IGZhbHNlOworICAgIGdsQmxlbmRTdGF0ZS5zYW1wbGVBbHBoYVRvQ292
ZXJhZ2UgPSBmYWxzZTsKKyAgICBnbEJsZW5kU3RhdGUuZGl0aGVyID0gZmFsc2U7CisKKyAgICBz
dGF0aWMgY29uc3QgZmxvYXQgYmxlbmRGYWN0b3JzWzRdID0geyAxLjBmLCAxLjBmLCAxLjBmLCAx
LjBmIH07CisgICAgc3RhdGljIGNvbnN0IFVJTlQgc2FtcGxlTWFzayA9IDB4RkZGRkZGRkY7CisK
KyAgICBJRDNEMTFCbGVuZFN0YXRlICpibGVuZFN0YXRlID0gbVN0YXRlQ2FjaGUuZ2V0QmxlbmRT
dGF0ZShmcmFtZUJ1ZmZlciwgZ2xCbGVuZFN0YXRlKTsKKworICAgIC8vIFNldCB0aGUgdmVydGlj
ZXMKKyAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7CisgICAgcmVz
dWx0ID0gbURldmljZUNvbnRleHQtPk1hcChtQ2xlYXJWQiwgMCwgRDNEMTFfTUFQX1dSSVRFX0RJ
U0NBUkQsIDAsICZtYXBwZWRSZXNvdXJjZSk7CisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAg
IHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gbWFwIG1hc2tlZCBjbGVhciB2ZXJ0ZXggYnVmZmVy
LCBIUkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBkM2QxMTo6UG9zaXRpb25EZXB0aENvbG9yVmVydGV4ICp2ZXJ0aWNlcyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8ZDNkMTE6OlBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCo+KG1hcHBlZFJlc291cmNlLnBE
YXRhKTsKKworICAgIGZsb2F0IGRlcHRoQ2xlYXIgPSBnbDo6Y2xhbXAwMShjbGVhclBhcmFtcy5k
ZXB0aENsZWFyVmFsdWUpOworICAgIGQzZDExOjpTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgo
JnZlcnRpY2VzWzBdLCAtMS4wZiwgIDEuMGYsIGRlcHRoQ2xlYXIsIGNsZWFyUGFyYW1zLmNvbG9y
Q2xlYXJWYWx1ZSk7CisgICAgZDNkMTE6OlNldFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCgmdmVy
dGljZXNbMV0sIC0xLjBmLCAtMS4wZiwgZGVwdGhDbGVhciwgY2xlYXJQYXJhbXMuY29sb3JDbGVh
clZhbHVlKTsKKyAgICBkM2QxMTo6U2V0UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KCZ2ZXJ0aWNl
c1syXSwgIDEuMGYsICAxLjBmLCBkZXB0aENsZWFyLCBjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFs
dWUpOworICAgIGQzZDExOjpTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgoJnZlcnRpY2VzWzNd
LCAgMS4wZiwgLTEuMGYsIGRlcHRoQ2xlYXIsIGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZSk7
CisKKyAgICBtRGV2aWNlQ29udGV4dC0+VW5tYXAobUNsZWFyVkIsIDApOworCisgICAgLy8gQXBw
bHkgc3RhdGUKKyAgICBtRGV2aWNlQ29udGV4dC0+T01TZXRCbGVuZFN0YXRlKGJsZW5kU3RhdGUs
IGJsZW5kRmFjdG9ycywgc2FtcGxlTWFzayk7CisgICAgbURldmljZUNvbnRleHQtPk9NU2V0RGVw
dGhTdGVuY2lsU3RhdGUoZHNTdGF0ZSwgc3RlbmNpbENsZWFyKTsKKyAgICBtRGV2aWNlQ29udGV4
dC0+UlNTZXRTdGF0ZShtU2Npc3NvckVuYWJsZWQgPyBtQ2xlYXJTY2lzc29yUlMgOiBtQ2xlYXJO
b1NjaXNzb3JSUyk7CisKKyAgICAvLyBBcHBseSBzaGFkZXJzCisgICAgSUQzRDExUGl4ZWxTaGFk
ZXIgKnBpeGVsU2hhZGVyID0gZnJhbWVCdWZmZXItPnVzaW5nRXh0ZW5kZWREcmF3QnVmZmVycygp
ID8gbUNsZWFyTXVsdGlwbGVQUyA6IG1DbGVhclNpbmdsZVBTOworCisgICAgbURldmljZUNvbnRl
eHQtPklBU2V0SW5wdXRMYXlvdXQobUNsZWFySUwpOworICAgIG1EZXZpY2VDb250ZXh0LT5WU1Nl
dFNoYWRlcihtQ2xlYXJWUywgTlVMTCwgMCk7CisgICAgbURldmljZUNvbnRleHQtPlBTU2V0U2hh
ZGVyKHBpeGVsU2hhZGVyLCBOVUxMLCAwKTsKKyAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFk
ZXIoTlVMTCwgTlVMTCwgMCk7CisKKyAgICAvLyBBcHBseSB2ZXJ0ZXggYnVmZmVyCisgICAgc3Rh
dGljIFVJTlQgc3RyaWRlID0gc2l6ZW9mKGQzZDExOjpQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgp
OworICAgIHN0YXRpYyBVSU5UIHN0YXJ0SWR4ID0gMDsKKyAgICBtRGV2aWNlQ29udGV4dC0+SUFT
ZXRWZXJ0ZXhCdWZmZXJzKDAsIDEsICZtQ2xlYXJWQiwgJnN0cmlkZSwgJnN0YXJ0SWR4KTsKKyAg
ICBtRGV2aWNlQ29udGV4dC0+SUFTZXRQcmltaXRpdmVUb3BvbG9neShEM0RfUFJJTUlUSVZFX1RP
UE9MT0dZX1RSSUFOR0xFU1RSSVApOworCisgICAgLy8gRHJhdyB0aGUgY2xlYXIgcXVhZAorICAg
IG1EZXZpY2VDb250ZXh0LT5EcmF3KDQsIDApOworCisgICAgLy8gQ2xlYW4gdXAKKyAgICBtYXJr
QWxsU3RhdGVEaXJ0eSgpOworfQorCit2b2lkIFJlbmRlcmVyMTE6Om1hcmtBbGxTdGF0ZURpcnR5
KCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGludCBydEluZGV4ID0gMDsgcnRJbmRleCA8IGdsOjpJ
TVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTOyBydEluZGV4KyspCisgICAgeworICAgICAg
ICBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbHNbcnRJbmRleF0gPSAwOworICAgIH0KKyAgICBt
QXBwbGllZERlcHRoYnVmZmVyU2VyaWFsID0gMDsKKyAgICBtQXBwbGllZFN0ZW5jaWxidWZmZXJT
ZXJpYWwgPSAwOworICAgIG1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCA9IGZhbHNlOworICAgIG1S
ZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzsg
aSsrKQorICAgIHsKKyAgICAgICAgbUZvcmNlU2V0VmVydGV4U2FtcGxlclN0YXRlc1tpXSA9IHRy
dWU7CisgICAgICAgIG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1tpXSA9IDA7CisgICAgfQorICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyBpKyspCisg
ICAgeworICAgICAgICBtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0ZXNbaV0gPSB0cnVlOworICAg
ICAgICBtQ3VyUGl4ZWxUZXh0dXJlU2VyaWFsc1tpXSA9IDA7CisgICAgfQorCisgICAgbUZvcmNl
U2V0QmxlbmRTdGF0ZSA9IHRydWU7CisgICAgbUZvcmNlU2V0UmFzdGVyU3RhdGUgPSB0cnVlOwor
ICAgIG1Gb3JjZVNldERlcHRoU3RlbmNpbFN0YXRlID0gdHJ1ZTsKKyAgICBtRm9yY2VTZXRTY2lz
c29yID0gdHJ1ZTsKKyAgICBtRm9yY2VTZXRWaWV3cG9ydCA9IHRydWU7CisKKyAgICBtQXBwbGll
ZElCU2VyaWFsID0gMDsKKyAgICBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbCA9IDA7CisgICAgbUFw
cGxpZWRJQk9mZnNldCA9IDA7CisKKyAgICBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWwgPSAw
OworICAgIG1lbXNldCgmbUFwcGxpZWRWZXJ0ZXhDb25zdGFudHMsIDAsIHNpemVvZihkeF9WZXJ0
ZXhDb25zdGFudHMpKTsKKyAgICBtZW1zZXQoJm1BcHBsaWVkUGl4ZWxDb25zdGFudHMsIDAsIHNp
emVvZihkeF9QaXhlbENvbnN0YW50cykpOworCisgICAgbUlucHV0TGF5b3V0Q2FjaGUubWFya0Rp
cnR5KCk7CisKKyAgICBtQ3VycmVudFZlcnRleENvbnN0YW50QnVmZmVyID0gTlVMTDsKKyAgICBt
Q3VycmVudFBpeGVsQ29uc3RhbnRCdWZmZXIgPSBOVUxMOworICAgIG1DdXJyZW50R2VvbWV0cnlD
b25zdGFudEJ1ZmZlciA9IE5VTEw7CisKKyAgICBtQ3VycmVudFByaW1pdGl2ZVRvcG9sb2d5ID0g
RDNEX1BSSU1JVElWRV9UT1BPTE9HWV9VTkRFRklORUQ7Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6
cmVsZWFzZURldmljZVJlc291cmNlcygpCit7CisgICAgbVN0YXRlQ2FjaGUuY2xlYXIoKTsKKyAg
ICBtSW5wdXRMYXlvdXRDYWNoZS5jbGVhcigpOworCisgICAgZGVsZXRlIG1WZXJ0ZXhEYXRhTWFu
YWdlcjsKKyAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBOVUxMOworCisgICAgZGVsZXRlIG1JbmRl
eERhdGFNYW5hZ2VyOworICAgIG1JbmRleERhdGFNYW5hZ2VyID0gTlVMTDsKKworICAgIGRlbGV0
ZSBtTGluZUxvb3BJQjsKKyAgICBtTGluZUxvb3BJQiA9IE5VTEw7CisKKyAgICBkZWxldGUgbVRy
aWFuZ2xlRmFuSUI7CisgICAgbVRyaWFuZ2xlRmFuSUIgPSBOVUxMOworCisgICAgU2FmZVJlbGVh
c2UobUNvcHlWQik7CisgICAgU2FmZVJlbGVhc2UobUNvcHlTYW1wbGVyKTsKKyAgICBTYWZlUmVs
ZWFzZShtQ29weUlMKTsKKyAgICBTYWZlUmVsZWFzZShtQ29weUlMKTsKKyAgICBTYWZlUmVsZWFz
ZShtQ29weVZTKTsKKyAgICBTYWZlUmVsZWFzZShtQ29weVJHQkFQUyk7CisgICAgU2FmZVJlbGVh
c2UobUNvcHlSR0JQUyk7CisgICAgU2FmZVJlbGVhc2UobUNvcHlMdW1QUyk7CisgICAgU2FmZVJl
bGVhc2UobUNvcHlMdW1BbHBoYVBTKTsKKworICAgIG1Db3B5UmVzb3VyY2VzSW5pdGlhbGl6ZWQg
PSBmYWxzZTsKKworICAgIFNhZmVSZWxlYXNlKG1DbGVhclZCKTsKKyAgICBTYWZlUmVsZWFzZSht
Q2xlYXJJTCk7CisgICAgU2FmZVJlbGVhc2UobUNsZWFyVlMpOworICAgIFNhZmVSZWxlYXNlKG1D
bGVhclNpbmdsZVBTKTsKKyAgICBTYWZlUmVsZWFzZShtQ2xlYXJNdWx0aXBsZVBTKTsKKyAgICBT
YWZlUmVsZWFzZShtQ2xlYXJTY2lzc29yUlMpOworICAgIFNhZmVSZWxlYXNlKG1DbGVhck5vU2Np
c3NvclJTKTsKKworICAgIG1DbGVhclJlc291cmNlc0luaXRpYWxpemVkID0gZmFsc2U7CisKKyAg
ICBTYWZlUmVsZWFzZShtRHJpdmVyQ29uc3RhbnRCdWZmZXJWUyk7CisgICAgU2FmZVJlbGVhc2Uo
bURyaXZlckNvbnN0YW50QnVmZmVyUFMpOworICAgIFNhZmVSZWxlYXNlKG1TeW5jUXVlcnkpOwor
fQorCit2b2lkIFJlbmRlcmVyMTE6Om5vdGlmeURldmljZUxvc3QoKQoreworICAgIG1EZXZpY2VM
b3N0ID0gdHJ1ZTsKKyAgICBtRGlzcGxheS0+bm90aWZ5RGV2aWNlTG9zdCgpOworfQorCitib29s
IFJlbmRlcmVyMTE6OmlzRGV2aWNlTG9zdCgpCit7CisgICAgcmV0dXJuIG1EZXZpY2VMb3N0Owor
fQorCisvLyBzZXQgbm90aWZ5IHRvIHRydWUgdG8gYnJvYWRjYXN0IGEgbWVzc2FnZSB0byBhbGwg
Y29udGV4dHMgb2YgdGhlIGRldmljZSBsb3NzCitib29sIFJlbmRlcmVyMTE6OnRlc3REZXZpY2VM
b3N0KGJvb2wgbm90aWZ5KQoreworICAgIGJvb2wgaXNMb3N0ID0gZmFsc2U7CisKKyAgICAvLyBH
ZXRSZW1vdmVkUmVhc29uIGlzIHVzZWQgdG8gdGVzdCBpZiB0aGUgZGV2aWNlIGlzIHJlbW92ZWQK
KyAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkdldERldmljZVJlbW92ZWRSZWFzb24oKTsK
KyAgICBpc0xvc3QgPSBkM2QxMTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KTsKKworICAgIGlm
IChpc0xvc3QpCisgICAgeworICAgICAgICAvLyBMb2cgZXJyb3IgaWYgdGhpcyBpcyBhIG5ldyBk
ZXZpY2UgbG9zdCBldmVudAorICAgICAgICBpZiAobURldmljZUxvc3QgPT0gZmFsc2UpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEVSUigiVGhlIEQzRDExIGRldmljZSB3YXMgcmVtb3ZlZDogMHgl
MDhYIiwgcmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGVuc3VyZSB3ZSBub3RlIHRo
ZSBkZXZpY2UgbG9zcyAtLQorICAgICAgICAvLyB3ZSdsbCBwcm9iYWJseSBnZXQgdGhpcyBkb25l
IGFnYWluIGJ5IG5vdGlmeURldmljZUxvc3QKKyAgICAgICAgLy8gYnV0IGJlc3QgdG8gcmVtZW1i
ZXIgaXQhCisgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCB3YW50IHRvIGNsZWFyIHRoZSBk
ZXZpY2UgbG9zcyBzdGF0dXMgaGVyZQorICAgICAgICAvLyAtLSB0aGlzIG5lZWRzIHRvIGJlIGRv
bmUgYnkgcmVzZXREZXZpY2UKKyAgICAgICAgbURldmljZUxvc3QgPSB0cnVlOworICAgICAgICBp
ZiAobm90aWZ5KQorICAgICAgICB7CisgICAgICAgICAgICBub3RpZnlEZXZpY2VMb3N0KCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gaXNMb3N0OworfQorCitib29sIFJlbmRlcmVy
MTE6OnRlc3REZXZpY2VSZXNldHRhYmxlKCkKK3sKKyAgICAvLyBkZXRlcm1pbmUgaWYgdGhlIGRl
dmljZSBpcyByZXNldHRhYmxlIGJ5IGNyZWF0aW5nIGEgZHVtbXkgZGV2aWNlCisgICAgUEZOX0Qz
RDExX0NSRUFURV9ERVZJQ0UgRDNEMTFDcmVhdGVEZXZpY2UgPSAoUEZOX0QzRDExX0NSRUFURV9E
RVZJQ0UpR2V0UHJvY0FkZHJlc3MobUQzZDExTW9kdWxlLCAiRDNEMTFDcmVhdGVEZXZpY2UiKTsK
KworICAgIGlmIChEM0QxMUNyZWF0ZURldmljZSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIEQzRF9GRUFUVVJFX0xFVkVMIGZlYXR1cmVMZXZlbHNb
XSA9CisgICAgeworICAgICAgICBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wLAorICAgICAgICBEM0Rf
RkVBVFVSRV9MRVZFTF8xMF8xLAorICAgICAgICBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wLAorICAg
IH07CisKKyAgICBJRDNEMTFEZXZpY2UqIGR1bW15RGV2aWNlOworICAgIEQzRF9GRUFUVVJFX0xF
VkVMIGR1bW15RmVhdHVyZUxldmVsOworICAgIElEM0QxMURldmljZUNvbnRleHQqIGR1bW15Q29u
dGV4dDsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gRDNEMTFDcmVhdGVEZXZpY2UoTlVMTCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRF9EUklWRVJfVFlQRV9IQVJE
V0FSRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjaWYgZGVmaW5lZChfREVCVUcpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0QxMV9DUkVBVEVfREVWSUNF
X0RFQlVHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2Vsc2UKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZlYXR1cmVMZXZlbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBcnJheVNpemUoZmVhdHVyZUxldmVscyksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBEM0QxMV9TREtfVkVSU0lPTiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZkdW1teURldmljZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZkdW1teUZlYXR1cmVMZXZlbCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZkdW1teUNvbnRleHQpOworCisgICAgaWYgKCFtRGV2aWNl
IHx8IEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGR1bW15Q29udGV4dC0+UmVsZWFzZSgpOworICAgIGR1bW15RGV2aWNlLT5SZWxlYXNl
KCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJlcjExOjpyZWxlYXNlKCkK
K3sKKyAgICByZWxlYXNlRGV2aWNlUmVzb3VyY2VzKCk7CisKKyAgICBpZiAobUR4Z2lGYWN0b3J5
KQorICAgIHsKKyAgICAgICAgbUR4Z2lGYWN0b3J5LT5SZWxlYXNlKCk7CisgICAgICAgIG1EeGdp
RmFjdG9yeSA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKG1EeGdpQWRhcHRlcikKKyAgICB7Cisg
ICAgICAgIG1EeGdpQWRhcHRlci0+UmVsZWFzZSgpOworICAgICAgICBtRHhnaUFkYXB0ZXIgPSBO
VUxMOworICAgIH0KKworICAgIGlmIChtRGV2aWNlQ29udGV4dCkKKyAgICB7CisgICAgICAgIG1E
ZXZpY2VDb250ZXh0LT5DbGVhclN0YXRlKCk7CisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5GbHVz
aCgpOworICAgICAgICBtRGV2aWNlQ29udGV4dC0+UmVsZWFzZSgpOworICAgICAgICBtRGV2aWNl
Q29udGV4dCA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKG1EZXZpY2UpCisgICAgeworICAgICAg
ICBtRGV2aWNlLT5SZWxlYXNlKCk7CisgICAgICAgIG1EZXZpY2UgPSBOVUxMOworICAgIH0KKwor
ICAgIGlmIChtRDNkMTFNb2R1bGUpCisgICAgeworICAgICAgICBGcmVlTGlicmFyeShtRDNkMTFN
b2R1bGUpOworICAgICAgICBtRDNkMTFNb2R1bGUgPSBOVUxMOworICAgIH0KKworICAgIGlmICht
RHhnaU1vZHVsZSkKKyAgICB7CisgICAgICAgIEZyZWVMaWJyYXJ5KG1EeGdpTW9kdWxlKTsKKyAg
ICAgICAgbUR4Z2lNb2R1bGUgPSBOVUxMOworICAgIH0KK30KKworYm9vbCBSZW5kZXJlcjExOjpy
ZXNldERldmljZSgpCit7CisgICAgLy8gcmVjcmVhdGUgZXZlcnl0aGluZworICAgIHJlbGVhc2Uo
KTsKKyAgICBFR0xpbnQgcmVzdWx0ID0gaW5pdGlhbGl6ZSgpOworCisgICAgaWYgKHJlc3VsdCAh
PSBFR0xfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIEVSUigiQ291bGQgbm90IHJlaW5pdGlhbGl6
ZSBEM0QxMSBkZXZpY2U6ICUwOFgiLCByZXN1bHQpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgbURldmljZUxvc3QgPSBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQor
CitEV09SRCBSZW5kZXJlcjExOjpnZXRBZGFwdGVyVmVuZG9yKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbUFkYXB0ZXJEZXNjcmlwdGlvbi5WZW5kb3JJZDsKK30KKworc3RkOjpzdHJpbmcgUmVuZGVy
ZXIxMTo6Z2V0UmVuZGVyZXJEZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgc3RkOjpvc3RyaW5n
c3RyZWFtIHJlbmRlcmVyU3RyaW5nOworCisgICAgcmVuZGVyZXJTdHJpbmcgPDwgbURlc2NyaXB0
aW9uOworICAgIHJlbmRlcmVyU3RyaW5nIDw8ICIgRGlyZWN0M0QxMSI7CisKKyAgICByZW5kZXJl
clN0cmluZyA8PCAiIHZzXyIgPDwgZ2V0TWFqb3JTaGFkZXJNb2RlbCgpIDw8ICJfIiA8PCBnZXRN
aW5vclNoYWRlck1vZGVsKCk7CisgICAgcmVuZGVyZXJTdHJpbmcgPDwgIiBwc18iIDw8IGdldE1h
am9yU2hhZGVyTW9kZWwoKSA8PCAiXyIgPDwgZ2V0TWlub3JTaGFkZXJNb2RlbCgpOworCisgICAg
cmV0dXJuIHJlbmRlcmVyU3RyaW5nLnN0cigpOworfQorCitHVUlEIFJlbmRlcmVyMTE6OmdldEFk
YXB0ZXJJZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICAvLyBVc2UgdGhlIGFkYXB0ZXIgTFVJRCBh
cyBvdXIgYWRhcHRlciBJRAorICAgIC8vIFRoaXMgbnVtYmVyIGlzIGxvY2FsIHRvIGEgbWFjaGlu
ZSBpcyBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgdW5pcXVlIGJldHdlZW4gcmVzdGFydHMKKyAgICBN
RVRBX0FTU0VSVChzaXplb2YoTFVJRCkgPD0gc2l6ZW9mKEdVSUQpKTsKKyAgICBHVUlEIGFkYXB0
ZXJJZCA9IHswfTsKKyAgICBtZW1jcHkoJmFkYXB0ZXJJZCwgJm1BZGFwdGVyRGVzY3JpcHRpb24u
QWRhcHRlckx1aWQsIHNpemVvZihMVUlEKSk7CisgICAgcmV0dXJuIGFkYXB0ZXJJZDsKK30KKwor
Ym9vbCBSZW5kZXJlcjExOjpnZXRCR1JBVGV4dHVyZVN1cHBvcnQoKSBjb25zdAoreworICAgIHJl
dHVybiBtQkdSQVRleHR1cmVTdXBwb3J0OworfQorCitib29sIFJlbmRlcmVyMTE6OmdldERYVDFU
ZXh0dXJlU3VwcG9ydCgpCit7CisgICAgcmV0dXJuIG1EWFQxVGV4dHVyZVN1cHBvcnQ7Cit9CisK
K2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RFhUM1RleHR1cmVTdXBwb3J0KCkKK3sKKyAgICByZXR1cm4g
bURYVDNUZXh0dXJlU3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjExOjpnZXREWFQ1VGV4dHVy
ZVN1cHBvcnQoKQoreworICAgIHJldHVybiBtRFhUNVRleHR1cmVTdXBwb3J0OworfQorCitib29s
IFJlbmRlcmVyMTE6OmdldERlcHRoVGV4dHVyZVN1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVy
biBtRGVwdGhUZXh0dXJlU3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjExOjpnZXRGbG9hdDMy
VGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKQoreworICAg
ICpyZW5kZXJhYmxlID0gbUZsb2F0MzJSZW5kZXJTdXBwb3J0OworICAgICpmaWx0ZXJpbmcgPSBt
RmxvYXQzMkZpbHRlclN1cHBvcnQ7CisgICAgcmV0dXJuIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQ7
Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KGJvb2wgKmZp
bHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSkKK3sKKyAgICAqcmVuZGVyYWJsZSA9IG1GbG9hdDE2
UmVuZGVyU3VwcG9ydDsKKyAgICAqZmlsdGVyaW5nID0gbUZsb2F0MTZGaWx0ZXJTdXBwb3J0Owor
ICAgIHJldHVybiBtRmxvYXQxNlRleHR1cmVTdXBwb3J0OworfQorCitib29sIFJlbmRlcmVyMTE6
OmdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgUmVuZGVyZXIxMTo6Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpCit7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlcmVyMTE6OmdldFRleHR1cmVGaWx0ZXJB
bmlzb3Ryb3B5U3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Zsb2F0
IFJlbmRlcmVyMTE6OmdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkgY29uc3QKK3sKKyAgICBzd2l0
Y2ggKG1GZWF0dXJlTGV2ZWwpCisgICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8x
MV8wOgorICAgICAgICByZXR1cm4gRDNEMTFfTUFYX01BWEFOSVNPVFJPUFk7CisgICAgICBjYXNl
IEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEw
XzA6CisgICAgICAgIHJldHVybiBEM0QxMF9NQVhfTUFYQU5JU09UUk9QWTsKKyAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworYm9vbCBS
ZW5kZXJlcjExOjpnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpCit7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK1JhbmdlIFJlbmRlcmVyMTE6OmdldFZpZXdwb3J0Qm91bmRzKCkgY29uc3QKK3sKKyAgICBz
d2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCisgICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZF
TF8xMV8wOgorICAgICAgICByZXR1cm4gUmFuZ2UoRDNEMTFfVklFV1BPUlRfQk9VTkRTX01JTiwg
RDNEMTFfVklFV1BPUlRfQk9VTkRTX01BWCk7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVM
XzEwXzE6CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6CisgICAgICAgIHJldHVy
biBSYW5nZShEM0QxMF9WSUVXUE9SVF9CT1VORFNfTUlOLCBEM0QxMF9WSUVXUE9SVF9CT1VORFNf
TUFYKTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBSYW5n
ZSgwLCAwKTsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjExOjpnZXRNYXhWZXJ0
ZXhUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0Cit7CisgICAgTUVUQV9BU1NFUlQoTUFYX1RFWFRV
UkVfSU1BR0VfVU5JVFNfVlRGX1NNNCA8PSBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9U
RVhUVVJFX0lNQUdFX1VOSVRTKTsKKyAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCisgICAgewor
ICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgorICAgICAgY2FzZSBEM0RfRkVBVFVS
RV9MRVZFTF8xMF8xOgorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgorICAgICAg
ICByZXR1cm4gTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGX1NNNDsKKyAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwordW5zaWduZWQg
aW50IFJlbmRlcmVyMTE6OmdldE1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdAor
eworICAgIHJldHVybiBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKyBnZXRNYXhWZXJ0ZXhU
ZXh0dXJlSW1hZ2VVbml0cygpOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0UmVz
ZXJ2ZWRWZXJ0ZXhVbmlmb3JtVmVjdG9ycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7ICAgLy8g
RHJpdmVyIHVuaWZvcm1zIGFyZSBzdG9yZWQgaW4gYSBzZXBhcmF0ZSBjb25zdGFudCBidWZmZXIK
K30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldFJlc2VydmVkRnJhZ21lbnRVbmlmb3Jt
VmVjdG9ycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7ICAgLy8gRHJpdmVyIHVuaWZvcm1zIGFy
ZSBzdG9yZWQgaW4gYSBzZXBhcmF0ZSBjb25zdGFudCBidWZmZXIKK30KKwordW5zaWduZWQgaW50
IFJlbmRlcmVyMTE6OmdldE1heFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29uc3QKK3sKKyAgICBN
RVRBX0FTU0VSVChNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SU19EM0QxMSA8PSBEM0QxMF9SRVFf
Q09OU1RBTlRfQlVGRkVSX0VMRU1FTlRfQ09VTlQpOworICAgIEFTU0VSVChtRmVhdHVyZUxldmVs
ID49IEQzRF9GRUFUVVJFX0xFVkVMXzEwXzApOworICAgIHJldHVybiBNQVhfVkVSVEVYX1VOSUZP
Uk1fVkVDVE9SU19EM0QxMTsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldE1heEZy
YWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdAoreworICAgIE1FVEFfQVNTRVJUKE1BWF9GUkFH
TUVOVF9VTklGT1JNX1ZFQ1RPUlNfRDNEMTEgPD0gRDNEMTBfUkVRX0NPTlNUQU5UX0JVRkZFUl9F
TEVNRU5UX0NPVU5UKTsKKyAgICBBU1NFUlQobUZlYXR1cmVMZXZlbCA+PSBEM0RfRkVBVFVSRV9M
RVZFTF8xMF8wKTsKKyAgICByZXR1cm4gTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SU19EM0Qx
MTsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldE1heFZhcnlpbmdWZWN0b3JzKCkg
Y29uc3QKK3sKKyAgICBNRVRBX0FTU0VSVChnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZBUllJTkdf
VkVDVE9SUyA9PSBEM0QxMV9WU19PVVRQVVRfUkVHSVNURVJfQ09VTlQpOworICAgIHN3aXRjaCAo
bUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6
CisgICAgICAgIHJldHVybiBEM0QxMV9WU19PVVRQVVRfUkVHSVNURVJfQ09VTlQ7CisgICAgICBj
YXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVM
XzEwXzA6CisgICAgICAgIHJldHVybiBEM0QxMF9WU19PVVRQVVRfUkVHSVNURVJfQ09VTlQ7Cisg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9
CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25zdAor
eworICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFU
VVJFX0xFVkVMXzExXzA6CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAg
ICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6CisgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworYm9vbCBSZW5kZXJlcjExOjpnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKSBjb25zdAor
eworICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFU
VVJFX0xFVkVMXzExXzA6CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAg
ICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6CisgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworYm9vbCBSZW5kZXJlcjExOjpnZXRJbnN0YW5jaW5nU3VwcG9ydCgpIGNvbnN0Cit7Cisg
ICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVf
TEVWRUxfMTFfMDoKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAgICAgIGNh
c2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQor
Citib29sIFJlbmRlcmVyMTE6OmdldFNoYXJlSGFuZGxlU3VwcG9ydCgpIGNvbnN0Cit7CisgICAg
Ly8gV2Ugb25seSBjdXJyZW50bHkgc3VwcG9ydCBzaGFyZSBoYW5kbGVzIHdpdGggQkdSQSBzdXJm
YWNlcywgYmVjYXVzZQorICAgIC8vIGNocm9tZSBuZWVkcyBCR1JBLiBPbmNlIGNocm9tZSBmaXhl
cyB0aGlzLCB3ZSBzaG91bGQgYWx3YXlzIHN1cHBvcnQgdGhlbS4KKyAgICAvLyBQSVggZG9lc24n
dCBzZWVtIHRvIHN1cHBvcnQgdXNpbmcgc2hhcmUgaGFuZGxlcywgc28gZGlzYWJsZSB0aGVtLgor
ICAgIHJldHVybiBnZXRCR1JBVGV4dHVyZVN1cHBvcnQoKSAmJiAhZ2w6OnBlcmZBY3RpdmUoKTsK
K30KKworYm9vbCBSZW5kZXJlcjExOjpnZXREZXJpdmF0aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0KCkg
Y29uc3QKK3sKKyAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCisgICAgeworICAgICAgY2FzZSBE
M0RfRkVBVFVSRV9MRVZFTF8xMV8wOgorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8x
OgorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0UG9zdFN1YkJ1ZmZlclN1cHBvcnQoKSBj
b25zdAoreworICAgIC8vIEQzRDExIGRvZXMgbm90IHN1cHBvcnQgcHJlc2VudCB3aXRoIGRpcnR5
IHJlY3RhbmdsZXMgdW50aWwgRDNEMTEuMSBhbmQgRFhHSSAxLjIuCisgICAgcmV0dXJuIGZhbHNl
OworfQorCitpbnQgUmVuZGVyZXIxMTo6Z2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNvbnN0Cit7Cisg
ICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVf
TEVWRUxfMTFfMDogcmV0dXJuIEQzRDExX1NIQURFUl9NQUpPUl9WRVJTSU9OOyAgIC8vIDUKKyAg
ICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMTogcmV0dXJuIEQzRDEwXzFfU0hBREVSX01B
Sk9SX1ZFUlNJT047IC8vIDQKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDogcmV0
dXJuIEQzRDEwX1NIQURFUl9NQUpPUl9WRVJTSU9OOyAgIC8vIDQKKyAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7ICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitpbnQgUmVuZGVyZXIxMTo6
Z2V0TWlub3JTaGFkZXJNb2RlbCgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVs
KQorICAgIHsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDogcmV0dXJuIEQzRDEx
X1NIQURFUl9NSU5PUl9WRVJTSU9OOyAgIC8vIDAKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVW
RUxfMTBfMTogcmV0dXJuIEQzRDEwXzFfU0hBREVSX01JTk9SX1ZFUlNJT047IC8vIDEKKyAgICAg
IGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDogcmV0dXJuIEQzRDEwX1NIQURFUl9NSU5PUl9W
RVJTSU9OOyAgIC8vIDAKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgcmV0dXJu
IDA7CisgICAgfQorfQorCitmbG9hdCBSZW5kZXJlcjExOjpnZXRNYXhQb2ludFNpemUoKSBjb25z
dAoreworICAgIC8vIGNob29zZSBhIHJlYXNvbmFibGUgbWF4aW11bS4gd2UgZW5mb3JjZSB0aGlz
IGluIHRoZSBzaGFkZXIuCisgICAgLy8gKG5iOiBvbiBhIFJhZGVvbiAyNjAweHQsIERYOSByZXBv
cnRzIGEgMjU2IG1heCBwb2ludCBzaXplKQorICAgIHJldHVybiAxMDI0LjBmOworfQorCitpbnQg
UmVuZGVyZXIxMTo6Z2V0TWF4Vmlld3BvcnREaW1lbnNpb24oKSBjb25zdAoreworICAgIC8vIE1h
eGltdW0gdmlld3BvcnQgc2l6ZSBtdXN0IGJlIGF0IGxlYXN0IGFzIGxhcmdlIGFzIHRoZSBsYXJn
ZXN0IHJlbmRlciBidWZmZXIgKG9yIGxhcmdlcikuCisgICAgLy8gSW4gb3VyIGNhc2UgcmV0dXJu
IHRoZSBtYXhpbXVtIHRleHR1cmUgc2l6ZSwgd2hpY2ggaXMgdGhlIG1heGltdW0gcmVuZGVyIGJ1
ZmZlciBzaXplLgorICAgIE1FVEFfQVNTRVJUKEQzRDExX1JFUV9URVhUVVJFMkRfVV9PUl9WX0RJ
TUVOU0lPTiAqIDIgLSAxIDw9IEQzRDExX1ZJRVdQT1JUX0JPVU5EU19NQVgpOworICAgIE1FVEFf
QVNTRVJUKEQzRDEwX1JFUV9URVhUVVJFMkRfVV9PUl9WX0RJTUVOU0lPTiAqIDIgLSAxIDw9IEQz
RDEwX1ZJRVdQT1JUX0JPVU5EU19NQVgpOworCisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQor
ICAgIHsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDogCisgICAgICAgIHJldHVy
biBEM0QxMV9SRVFfVEVYVFVSRTJEX1VfT1JfVl9ESU1FTlNJT047ICAgLy8gMTYzODQKKyAgICAg
IGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVW
RUxfMTBfMDogCisgICAgICAgIHJldHVybiBEM0QxMF9SRVFfVEVYVFVSRTJEX1VfT1JfVl9ESU1F
TlNJT047ICAgLy8gODE5MgorICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VGV4dHVy
ZVdpZHRoKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCisgICAgeworICAg
ICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOiByZXR1cm4gRDNEMTFfUkVRX1RFWFRVUkUy
RF9VX09SX1ZfRElNRU5TSU9OOyAgIC8vIDE2Mzg0CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xF
VkVMXzEwXzE6CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6IHJldHVybiBEM0Qx
MF9SRVFfVEVYVFVSRTJEX1VfT1JfVl9ESU1FTlNJT047ICAgLy8gODE5MgorICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK2ludCBSZW5kZXJl
cjExOjpnZXRNYXhUZXh0dXJlSGVpZ2h0KCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1GZWF0dXJl
TGV2ZWwpCisgICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOiByZXR1cm4g
RDNEMTFfUkVRX1RFWFRVUkUyRF9VX09SX1ZfRElNRU5TSU9OOyAgIC8vIDE2Mzg0CisgICAgICBj
YXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVM
XzEwXzA6IHJldHVybiBEM0QxMF9SRVFfVEVYVFVSRTJEX1VfT1JfVl9ESU1FTlNJT047ICAgLy8g
ODE5MgorICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICByZXR1cm4gMDsKKyAgICB9
Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0MzJCaXRJbmRleFN1cHBvcnQoKSBjb25zdAorewor
ICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJF
X0xFVkVMXzExXzA6IAorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgorICAgICAg
Y2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOiByZXR1cm4gRDNEMTBfUkVRX0RSQVdJTkRFWEVE
X0lOREVYX0NPVU5UXzJfVE9fRVhQID49IDMyOyAgIC8vIHRydWUKKyAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW50IFJlbmRlcmVy
MTE6OmdldE1pblN3YXBJbnRlcnZhbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK2lu
dCBSZW5kZXJlcjExOjpnZXRNYXhTd2FwSW50ZXJ2YWwoKSBjb25zdAoreworICAgIHJldHVybiA0
OworfQorCitpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1NYXhTdXBwb3J0ZWRTYW1wbGVzOworfQorCitpbnQgUmVuZGVyZXIxMTo6
Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMoRFhHSV9GT1JNQVQgZm9ybWF0LCB1bnNpZ25lZCBp
bnQgcmVxdWVzdGVkKSBjb25zdAoreworICAgIGlmIChyZXF1ZXN0ZWQgPT0gMCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIE11bHRpc2FtcGxlU3VwcG9ydE1hcDo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IG1NdWx0aXNhbXBsZVN1cHBvcnRNYXAuZmluZChmb3JtYXQpOwor
ICAgIGlmIChpdGVyICE9IG1NdWx0aXNhbXBsZVN1cHBvcnRNYXAuZW5kKCkpCisgICAgeworICAg
ICAgICBjb25zdCBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvJiBpbmZvID0gaXRlci0+c2Vjb25kOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gcmVxdWVzdGVkIC0gMTsgaSA8IEQzRDExX01B
WF9NVUxUSVNBTVBMRV9TQU1QTEVfQ09VTlQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGluZm8ucXVhbGl0eUxldmVsc1tpXSA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGkgKyAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIC0xOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4UmVuZGVy
VGFyZ2V0cygpIGNvbnN0Cit7CisgICAgTUVUQV9BU1NFUlQoRDNEMTFfU0lNVUxUQU5FT1VTX1JF
TkRFUl9UQVJHRVRfQ09VTlQgPD0gZ2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlMp
OworICAgIE1FVEFfQVNTRVJUKEQzRDEwX1NJTVVMVEFORU9VU19SRU5ERVJfVEFSR0VUX0NPVU5U
IDw9IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTKTsKKworICAgIHN3aXRjaCAo
bUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6
CisgICAgICAgIHJldHVybiBEM0QxMV9TSU1VTFRBTkVPVVNfUkVOREVSX1RBUkdFVF9DT1VOVDsg
IC8vIDgKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAgICAgIGNhc2UgRDNE
X0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAgICAgICAgLy8gRmVhdHVyZSBsZXZlbCAxMC4wIGFuZCAx
MC4xIGNhcmRzIHBlcmZvcm0gdmVyeSBwb29ybHkgd2hlbiB0aGUgcGl4ZWwgc2hhZGVyCisgICAg
ICAgIC8vIG91dHB1dHMgdG8gbXVsdGlwbGUgUlRzIHRoYXQgYXJlIG5vdCBib3VuZC4KKyAgICAg
ICAgLy8gVE9ETzogUmVtb3ZlIHBpeGVsIHNoYWRlciBvdXRwdXRzIGZvciByZW5kZXIgdGFyZ2V0
cyB0aGF0IGFyZSBub3QgYm91bmQuCisgICAgICAgIHJldHVybiAxOworICAgICAgZGVmYXVsdDoK
KyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorfQorCiti
b29sIFJlbmRlcmVyMTE6OmNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTJEICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzb3VyY2UpCit7CisgICAgaWYg
KHNvdXJjZSAmJiBkZXN0KQorICAgIHsKKyAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMV8yRCAqc291
cmNlMTEgPSBUZXh0dXJlU3RvcmFnZTExXzJEOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yRChzb3Vy
Y2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMV8yRCAq
ZGVzdDExID0gVGV4dHVyZVN0b3JhZ2UxMV8yRDo6bWFrZVRleHR1cmVTdG9yYWdlMTFfMkQoZGVz
dC0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworCisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5Db3B5
UmVzb3VyY2UoZGVzdDExLT5nZXRCYXNlVGV4dHVyZSgpLCBzb3VyY2UxMS0+Z2V0QmFzZVRleHR1
cmUoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBSZW5kZXJlcjExOjpjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2VDdWJlICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnNvdXJjZSkK
K3sKKyAgICBpZiAoc291cmNlICYmIGRlc3QpCisgICAgeworICAgICAgICBUZXh0dXJlU3RvcmFn
ZTExX0N1YmUgKnNvdXJjZTExID0gVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjptYWtlVGV4dHVyZVN0
b3JhZ2UxMV9DdWJlKHNvdXJjZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAgICAgICBUZXh0
dXJlU3RvcmFnZTExX0N1YmUgKmRlc3QxMSA9IFRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6bWFrZVRl
eHR1cmVTdG9yYWdlMTFfQ3ViZShkZXN0LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CisKKyAgICAg
ICAgbURldmljZUNvbnRleHQtPkNvcHlSZXNvdXJjZShkZXN0MTEtPmdldEJhc2VUZXh0dXJlKCks
IHNvdXJjZTExLT5nZXRCYXNlVGV4dHVyZSgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlcmVyMTE6OmNvcHlJbWFnZShn
bDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VS
ZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3Jh
Z2UsIEdMaW50IGxldmVsKQoreworICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0g
ZnJhbWVidWZmZXItPmdldFJlYWRDb2xvcmJ1ZmZlcigpOworICAgIGlmICghY29sb3JidWZmZXIp
CisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgY29sb3IgYnVmZmVy
IGZyb20gdGhlIGZyYW1lIGJ1ZmZlci4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisgICAgUmVuZGVyVGFyZ2V0MTEgKnNvdXJj
ZVJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoY29sb3Ji
dWZmZXItPmdldFJlbmRlclRhcmdldCgpKTsKKyAgICBpZiAoIXNvdXJjZVJlbmRlclRhcmdldCkK
KyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0
IGZyb20gdGhlIGZyYW1lIGJ1ZmZlci4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VW
aWV3ICpzb3VyY2UgPSBzb3VyY2VSZW5kZXJUYXJnZXQtPmdldFNoYWRlclJlc291cmNlVmlldygp
OworICAgIGlmICghc291cmNlKQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmll
dmUgdGhlIHJlbmRlciB0YXJnZXQgdmlldyBmcm9tIHRoZSByZW5kZXIgdGFyZ2V0LiIpOworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CisK
KyAgICBUZXh0dXJlU3RvcmFnZTExXzJEICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFnZTExXzJE
OjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yRChzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7
CisgICAgaWYgKCFzdG9yYWdlMTEpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRy
aWV2ZSB0aGUgdGV4dHVyZSBzdG9yYWdlIGZyb20gdGhlIGRlc3RpbmF0aW9uLiIpOworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CisKKyAg
ICBSZW5kZXJUYXJnZXQxMSAqZGVzdFJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtl
UmVuZGVyVGFyZ2V0MTEoc3RvcmFnZTExLT5nZXRSZW5kZXJUYXJnZXQobGV2ZWwpKTsKKyAgICBp
ZiAoIWRlc3RSZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRy
aWV2ZSB0aGUgcmVuZGVyIHRhcmdldCBmcm9tIHRoZSBkZXN0aW5hdGlvbiBzdG9yYWdlLiIpOwor
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9
CisKKyAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpkZXN0ID0gZGVzdFJlbmRlclRhcmdldC0+
Z2V0UmVuZGVyVGFyZ2V0VmlldygpOworICAgIGlmICghZGVzdCkKKyAgICB7CisgICAgICAgIEVS
UigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0IHZpZXcgZnJvbSB0aGUgZGVz
dGluYXRpb24gcmVuZGVyIHRhcmdldC4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisgICAgZ2w6OlJlY3RhbmdsZSBkZXN0UmVj
dDsKKyAgICBkZXN0UmVjdC54ID0geG9mZnNldDsKKyAgICBkZXN0UmVjdC55ID0geW9mZnNldDsK
KyAgICBkZXN0UmVjdC53aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGg7CisgICAgZGVzdFJlY3QuaGVp
Z2h0ID0gc291cmNlUmVjdC5oZWlnaHQ7CisKKyAgICBib29sIHJldCA9IGNvcHlUZXh0dXJlKHNv
dXJjZSwgc291cmNlUmVjdCwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBzb3VyY2VS
ZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dCwgZGVzdFJlY3QsIGRlc3RSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIGRlc3RSZW5kZXJUYXJn
ZXQtPmdldEhlaWdodCgpLCBkZXN0Rm9ybWF0KTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK2Jv
b2wgUmVuZGVyZXIxMTo6Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNv
bnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCkKK3sKKyAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5n
ZXRSZWFkQ29sb3JidWZmZXIoKTsKKyAgICBpZiAoIWNvbG9yYnVmZmVyKQorICAgIHsKKyAgICAg
ICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIGNvbG9yIGJ1ZmZlciBmcm9tIHRoZSBmcmFt
ZSBidWZmZXIuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
ZmFsc2UpOworICAgIH0KKworICAgIFJlbmRlclRhcmdldDExICpzb3VyY2VSZW5kZXJUYXJnZXQg
PSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGNvbG9yYnVmZmVyLT5nZXRSZW5k
ZXJUYXJnZXQoKSk7CisgICAgaWYgKCFzb3VyY2VSZW5kZXJUYXJnZXQpCisgICAgeworICAgICAg
ICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCBmcm9tIHRoZSBmcmFt
ZSBidWZmZXIuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
ZmFsc2UpOworICAgIH0KKworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc291cmNlID0g
c291cmNlUmVuZGVyVGFyZ2V0LT5nZXRTaGFkZXJSZXNvdXJjZVZpZXcoKTsKKyAgICBpZiAoIXNv
dXJjZSkKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIg
dGFyZ2V0IHZpZXcgZnJvbSB0aGUgcmVuZGVyIHRhcmdldC4iKTsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisgICAgVGV4dHVyZVN0
b3JhZ2UxMV9DdWJlICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFnZTExX0N1YmU6Om1ha2VUZXh0
dXJlU3RvcmFnZTExX0N1YmUoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAgIGlm
ICghc3RvcmFnZTExKQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhl
IHRleHR1cmUgc3RvcmFnZSBmcm9tIHRoZSBkZXN0aW5hdGlvbi4iKTsKKyAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisgICAgUmVuZGVy
VGFyZ2V0MTEgKmRlc3RSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRh
cmdldDExKHN0b3JhZ2UxMS0+Z2V0UmVuZGVyVGFyZ2V0KHRhcmdldCwgbGV2ZWwpKTsKKyAgICBp
ZiAoIWRlc3RSZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRy
aWV2ZSB0aGUgcmVuZGVyIHRhcmdldCBmcm9tIHRoZSBkZXN0aW5hdGlvbiBzdG9yYWdlLiIpOwor
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9
CisKKyAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpkZXN0ID0gZGVzdFJlbmRlclRhcmdldC0+
Z2V0UmVuZGVyVGFyZ2V0VmlldygpOworICAgIGlmICghZGVzdCkKKyAgICB7CisgICAgICAgIEVS
UigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0IHZpZXcgZnJvbSB0aGUgZGVz
dGluYXRpb24gcmVuZGVyIHRhcmdldC4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisgICAgZ2w6OlJlY3RhbmdsZSBkZXN0UmVj
dDsKKyAgICBkZXN0UmVjdC54ID0geG9mZnNldDsKKyAgICBkZXN0UmVjdC55ID0geW9mZnNldDsK
KyAgICBkZXN0UmVjdC53aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGg7CisgICAgZGVzdFJlY3QuaGVp
Z2h0ID0gc291cmNlUmVjdC5oZWlnaHQ7CisKKyAgICBib29sIHJldCA9IGNvcHlUZXh0dXJlKHNv
dXJjZSwgc291cmNlUmVjdCwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBzb3VyY2VS
ZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dCwgZGVzdFJlY3QsIGRlc3RSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIGRlc3RSZW5kZXJUYXJn
ZXQtPmdldEhlaWdodCgpLCBkZXN0Rm9ybWF0KTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK2Jv
b2wgUmVuZGVyZXIxMTo6Y29weVRleHR1cmUoSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzb3Vy
Y2UsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZUFyZWEsIHVuc2lnbmVkIGludCBzb3VyY2VX
aWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZGVzdCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAm
ZGVzdEFyZWEsIHVuc2lnbmVkIGludCBkZXN0V2lkdGgsIHVuc2lnbmVkIGludCBkZXN0SGVpZ2h0
LCBHTGVudW0gZGVzdEZvcm1hdCkKK3sKKyAgICBIUkVTVUxUIHJlc3VsdDsKKworICAgIGlmICgh
bUNvcHlSZXNvdXJjZXNJbml0aWFsaXplZCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbUNvcHlW
QiAmJiAhbUNvcHlTYW1wbGVyICYmICFtQ29weUlMICYmICFtQ29weVZTICYmICFtQ29weVJHQkFQ
UyAmJiAhbUNvcHlSR0JQUyAmJiAhbUNvcHlMdW1QUyAmJiAhbUNvcHlMdW1BbHBoYVBTKTsKKwor
ICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyB2YkRlc2M7CisgICAgICAgIHZiRGVzYy5CeXRlV2lk
dGggPSBzaXplb2YoZDNkMTE6OlBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgpICogNDsKKyAgICAgICAg
dmJEZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfRFlOQU1JQzsKKyAgICAgICAgdmJEZXNjLkJpbmRG
bGFncyA9IEQzRDExX0JJTkRfVkVSVEVYX0JVRkZFUjsKKyAgICAgICAgdmJEZXNjLkNQVUFjY2Vz
c0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsKKyAgICAgICAgdmJEZXNjLk1pc2NGbGFn
cyA9IDA7CisgICAgICAgIHZiRGVzYy5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKKworICAgICAg
ICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVCdWZmZXIoJnZiRGVzYywgTlVMTCwgJm1Db3B5VkIp
OworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICBkM2QxMTo6U2V0
RGVidWdOYW1lKG1Db3B5VkIsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSB2ZXJ0ZXggYnVmZmVy
Iik7CisKKyAgICAgICAgRDNEMTFfU0FNUExFUl9ERVNDIHNhbXBsZXJEZXNjOworICAgICAgICBz
YW1wbGVyRGVzYy5GaWx0ZXIgPSBEM0QxMV9GSUxURVJfTUlOX01BR19NSVBfTElORUFSOworICAg
ICAgICBzYW1wbGVyRGVzYy5BZGRyZXNzVSA9IEQzRDExX1RFWFRVUkVfQUREUkVTU19DTEFNUDsK
KyAgICAgICAgc2FtcGxlckRlc2MuQWRkcmVzc1YgPSBEM0QxMV9URVhUVVJFX0FERFJFU1NfQ0xB
TVA7CisgICAgICAgIHNhbXBsZXJEZXNjLkFkZHJlc3NXID0gRDNEMTFfVEVYVFVSRV9BRERSRVNT
X0NMQU1QOworICAgICAgICBzYW1wbGVyRGVzYy5NaXBMT0RCaWFzID0gMC4wZjsKKyAgICAgICAg
c2FtcGxlckRlc2MuTWF4QW5pc290cm9weSA9IDA7CisgICAgICAgIHNhbXBsZXJEZXNjLkNvbXBh
cmlzb25GdW5jID0gRDNEMTFfQ09NUEFSSVNPTl9ORVZFUjsKKyAgICAgICAgc2FtcGxlckRlc2Mu
Qm9yZGVyQ29sb3JbMF0gPSAwLjBmOworICAgICAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclsx
XSA9IDAuMGY7CisgICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzJdID0gMC4wZjsKKyAg
ICAgICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbM10gPSAwLjBmOworICAgICAgICBzYW1wbGVy
RGVzYy5NaW5MT0QgPSAwLjBmOworICAgICAgICBzYW1wbGVyRGVzYy5NYXhMT0QgPSAwLjBmOwor
CisgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVNhbXBsZXJTdGF0ZSgmc2FtcGxlckRl
c2MsICZtQ29weVNhbXBsZXIpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwor
ICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5U2FtcGxlciwgIlJlbmRlcmVyMTEgY29w
eSBzYW1wbGVyIik7CisKKyAgICAgICAgRDNEMTFfSU5QVVRfRUxFTUVOVF9ERVNDIHF1YWRMYXlv
dXRbXSA9CisgICAgICAgIHsKKyAgICAgICAgICAgIHsgIlBPU0lUSU9OIiwgMCwgRFhHSV9GT1JN
QVRfUjMyRzMyX0ZMT0FULCAwLCAwLCBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAgfSwK
KyAgICAgICAgICAgIHsgIlRFWENPT1JEIiwgMCwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCAw
LCA4LCBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAgfSwKKyAgICAgICAgfTsKKworICAg
ICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVJbnB1dExheW91dChxdWFkTGF5b3V0LCAyLCBn
X1ZTX1Bhc3N0aHJvdWdoLCBzaXplb2YoZ19WU19QYXNzdGhyb3VnaCksICZtQ29weUlMKTsKKyAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgZDNkMTE6OlNldERlYnVn
TmFtZShtQ29weUlMLCAiUmVuZGVyZXIxMSBjb3B5IHRleHR1cmUgaW5wdXQgbGF5b3V0Iik7CisK
KyAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKGdfVlNfUGFzc3Ro
cm91Z2gsIHNpemVvZihnX1ZTX1Bhc3N0aHJvdWdoKSwgTlVMTCwgJm1Db3B5VlMpOworICAgICAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1l
KG1Db3B5VlMsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSB2ZXJ0ZXggc2hhZGVyIik7CisKKyAg
ICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19QYXNzdGhyb3Vn
aFJHQkEsIHNpemVvZihnX1BTX1Bhc3N0aHJvdWdoUkdCQSksIE5VTEwsICZtQ29weVJHQkFQUyk7
CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIGQzZDExOjpTZXRE
ZWJ1Z05hbWUobUNvcHlSR0JBUFMsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSBSR0JBIHBpeGVs
IHNoYWRlciIpOworCisgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVy
KGdfUFNfUGFzc3Rocm91Z2hSR0IsIHNpemVvZihnX1BTX1Bhc3N0aHJvdWdoUkdCKSwgTlVMTCwg
Jm1Db3B5UkdCUFMpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAg
ICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5UkdCUFMsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVy
ZSBSR0IgcGl4ZWwgc2hhZGVyIik7CisKKyAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRl
UGl4ZWxTaGFkZXIoZ19QU19QYXNzdGhyb3VnaEx1bSwgc2l6ZW9mKGdfUFNfUGFzc3Rocm91Z2hM
dW0pLCBOVUxMLCAmbUNvcHlMdW1QUyk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7CisgICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNvcHlMdW1QUywgIlJlbmRlcmVyMTEg
Y29weSB0ZXh0dXJlIGx1bWluYW5jZSBwaXhlbCBzaGFkZXIiKTsKKworICAgICAgICByZXN1bHQg
PSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihnX1BTX1Bhc3N0aHJvdWdoTHVtQWxwaGEsIHNp
emVvZihnX1BTX1Bhc3N0aHJvdWdoTHVtQWxwaGEpLCBOVUxMLCAmbUNvcHlMdW1BbHBoYVBTKTsK
KyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgZDNkMTE6OlNldERl
YnVnTmFtZShtQ29weUx1bUFscGhhUFMsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSBsdW1pbmFu
Y2UgYWxwaGEgcGl4ZWwgc2hhZGVyIik7CisKKyAgICAgICAgbUNvcHlSZXNvdXJjZXNJbml0aWFs
aXplZCA9IHRydWU7CisgICAgfQorCisgICAgLy8gVmVyaWZ5IHRoZSBzb3VyY2UgYW5kIGRlc3Rp
bmF0aW9uIGFyZWEgc2l6ZXMKKyAgICBpZiAoc291cmNlQXJlYS54IDwgMCB8fCBzb3VyY2VBcmVh
LnggKyBzb3VyY2VBcmVhLndpZHRoID4gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VXaWR0aCkgfHwK
KyAgICAgICAgc291cmNlQXJlYS55IDwgMCB8fCBzb3VyY2VBcmVhLnkgKyBzb3VyY2VBcmVhLmhl
aWdodCA+IHN0YXRpY19jYXN0PGludD4oc291cmNlSGVpZ2h0KSB8fAorICAgICAgICBkZXN0QXJl
YS54IDwgMCB8fCBkZXN0QXJlYS54ICsgZGVzdEFyZWEud2lkdGggPiBzdGF0aWNfY2FzdDxpbnQ+
KGRlc3RXaWR0aCkgfHwKKyAgICAgICAgZGVzdEFyZWEueSA8IDAgfHwgZGVzdEFyZWEueSArIGRl
c3RBcmVhLmhlaWdodCA+IHN0YXRpY19jYXN0PGludD4oZGVzdEhlaWdodCkpCisgICAgeworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUsIGZhbHNlKTsKKyAgICB9CisK
KyAgICAvLyBTZXQgdmVydGljZXMKKyAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVk
UmVzb3VyY2U7CisgICAgcmVzdWx0ID0gbURldmljZUNvbnRleHQtPk1hcChtQ29weVZCLCAwLCBE
M0QxMV9NQVBfV1JJVEVfRElTQ0FSRCwgMCwgJm1hcHBlZFJlc291cmNlKTsKKyAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byBtYXAgdmVydGV4IGJ1
ZmZlciBmb3IgdGV4dHVyZSBjb3B5LCBIUkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7CisgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgIH0KKworICAg
IGQzZDExOjpQb3NpdGlvblRleENvb3JkVmVydGV4ICp2ZXJ0aWNlcyA9IHN0YXRpY19jYXN0PGQz
ZDExOjpQb3NpdGlvblRleENvb3JkVmVydGV4Kj4obWFwcGVkUmVzb3VyY2UucERhdGEpOworCisg
ICAgLy8gQ3JlYXRlIGEgcXVhZCBpbiBob21vZ2VuZW91cyBjb29yZGluYXRlcworICAgIGZsb2F0
IHgxID0gKGRlc3RBcmVhLnggLyBmbG9hdChkZXN0V2lkdGgpKSAqIDIuMGYgLSAxLjBmOworICAg
IGZsb2F0IHkxID0gKChkZXN0SGVpZ2h0IC0gZGVzdEFyZWEueSAtIGRlc3RBcmVhLmhlaWdodCkg
LyBmbG9hdChkZXN0SGVpZ2h0KSkgKiAyLjBmIC0gMS4wZjsKKyAgICBmbG9hdCB4MiA9ICgoZGVz
dEFyZWEueCArIGRlc3RBcmVhLndpZHRoKSAvIGZsb2F0KGRlc3RXaWR0aCkpICogMi4wZiAtIDEu
MGY7CisgICAgZmxvYXQgeTIgPSAoKGRlc3RIZWlnaHQgLSBkZXN0QXJlYS55KSAvIGZsb2F0KGRl
c3RIZWlnaHQpKSAqIDIuMGYgLSAxLjBmOworCisgICAgZmxvYXQgdTEgPSBzb3VyY2VBcmVhLngg
LyBmbG9hdChzb3VyY2VXaWR0aCk7CisgICAgZmxvYXQgdjEgPSBzb3VyY2VBcmVhLnkgLyBmbG9h
dChzb3VyY2VIZWlnaHQpOworICAgIGZsb2F0IHUyID0gKHNvdXJjZUFyZWEueCArIHNvdXJjZUFy
ZWEud2lkdGgpIC8gZmxvYXQoc291cmNlV2lkdGgpOworICAgIGZsb2F0IHYyID0gKHNvdXJjZUFy
ZWEueSArIHNvdXJjZUFyZWEuaGVpZ2h0KSAvIGZsb2F0KHNvdXJjZUhlaWdodCk7CisKKyAgICBk
M2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNbMF0sIHgxLCB5MSwgdTEs
IHYyKTsKKyAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNbMV0s
IHgxLCB5MiwgdTEsIHYxKTsKKyAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgm
dmVydGljZXNbMl0sIHgyLCB5MSwgdTIsIHYyKTsKKyAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhD
b29yZFZlcnRleCgmdmVydGljZXNbM10sIHgyLCB5MiwgdTIsIHYxKTsKKworICAgIG1EZXZpY2VD
b250ZXh0LT5Vbm1hcChtQ29weVZCLCAwKTsKKworICAgIHN0YXRpYyBVSU5UIHN0cmlkZSA9IHNp
emVvZihkM2QxMTo6UG9zaXRpb25UZXhDb29yZFZlcnRleCk7CisgICAgc3RhdGljIFVJTlQgc3Rh
cnRJZHggPSAwOworICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldFZlcnRleEJ1ZmZlcnMoMCwgMSwg
Jm1Db3B5VkIsICZzdHJpZGUsICZzdGFydElkeCk7CisKKyAgICAvLyBBcHBseSBzdGF0ZQorICAg
IG1EZXZpY2VDb250ZXh0LT5PTVNldEJsZW5kU3RhdGUoTlVMTCwgTlVMTCwgMHhGRkZGRkZGKTsK
KyAgICBtRGV2aWNlQ29udGV4dC0+T01TZXREZXB0aFN0ZW5jaWxTdGF0ZShOVUxMLCAweEZGRkZG
RkZGKTsKKyAgICBtRGV2aWNlQ29udGV4dC0+UlNTZXRTdGF0ZShOVUxMKTsKKworICAgIC8vIEFw
cGx5IHNoYWRlcnMKKyAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRJbnB1dExheW91dChtQ29weUlM
KTsKKyAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRQcmltaXRpdmVUb3BvbG9neShEM0RfUFJJTUlU
SVZFX1RPUE9MT0dZX1RSSUFOR0xFU1RSSVApOworICAgIG1EZXZpY2VDb250ZXh0LT5WU1NldFNo
YWRlcihtQ29weVZTLCBOVUxMLCAwKTsKKworICAgIElEM0QxMVBpeGVsU2hhZGVyICpwcyA9IE5V
TEw7CisgICAgc3dpdGNoKGRlc3RGb3JtYXQpCisgICAgeworICAgICAgY2FzZSBHTF9SR0JBOiAg
ICAgICAgICAgIHBzID0gbUNvcHlSR0JBUFM7ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUkdC
OiAgICAgICAgICAgICBwcyA9IG1Db3B5UkdCUFM7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X0FMUEhBOiAgICAgICAgICAgcHMgPSBtQ29weVJHQkFQUzsgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9CR1JBX0VYVDogICAgICAgIHBzID0gbUNvcHlSR0JBUFM7ICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfTFVNSU5BTkNFOiAgICAgICBwcyA9IG1Db3B5THVtUFM7ICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTogcHMgPSBtQ29weUx1bUFscGhhUFM7IGJyZWFr
OworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgIHBzID0gTlVMTDsgICAgICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIocHMsIE5VTEws
IDApOworICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldFNoYWRlcihOVUxMLCBOVUxMLCAwKTsKKwor
ICAgIC8vIFVuc2V0IHRoZSBjdXJyZW50bHkgYm91bmQgc2hhZGVyIHJlc291cmNlIHRvIGF2b2lk
IGNvbmZsaWN0cworICAgIHN0YXRpYyBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmNvbnN0IG51
bGxTUlYgPSBOVUxMOworICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlclJlc291cmNlcygw
LCAxLCAmbnVsbFNSVik7CisKKyAgICAvLyBBcHBseSByZW5kZXIgdGFyZ2V0CisgICAgc2V0T25l
VGltZVJlbmRlclRhcmdldChkZXN0KTsKKworICAgIC8vIFNldCB0aGUgdmlld3BvcnQKKyAgICBE
M0QxMV9WSUVXUE9SVCB2aWV3cG9ydDsKKyAgICB2aWV3cG9ydC5Ub3BMZWZ0WCA9IDA7CisgICAg
dmlld3BvcnQuVG9wTGVmdFkgPSAwOworICAgIHZpZXdwb3J0LldpZHRoID0gZGVzdFdpZHRoOwor
ICAgIHZpZXdwb3J0LkhlaWdodCA9IGRlc3RIZWlnaHQ7CisgICAgdmlld3BvcnQuTWluRGVwdGgg
PSAwLjBmOworICAgIHZpZXdwb3J0Lk1heERlcHRoID0gMS4wZjsKKyAgICBtRGV2aWNlQ29udGV4
dC0+UlNTZXRWaWV3cG9ydHMoMSwgJnZpZXdwb3J0KTsKKworICAgIC8vIEFwcGx5IHRleHR1cmVz
CisgICAgbURldmljZUNvbnRleHQtPlBTU2V0U2hhZGVyUmVzb3VyY2VzKDAsIDEsICZzb3VyY2Up
OworICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNhbXBsZXJzKDAsIDEsICZtQ29weVNhbXBsZXIp
OworCisgICAgLy8gRHJhdyB0aGUgcXVhZAorICAgIG1EZXZpY2VDb250ZXh0LT5EcmF3KDQsIDAp
OworCisgICAgLy8gVW5iaW5kIHRleHR1cmVzIGFuZCByZW5kZXIgdGFyZ2V0cyBhbmQgdmVydGV4
IGJ1ZmZlcgorICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlclJlc291cmNlcygwLCAxLCAm
bnVsbFNSVik7CisKKyAgICB1bmFwcGx5UmVuZGVyVGFyZ2V0cygpOworCisgICAgVUlOVCB6ZXJv
ID0gMDsKKyAgICBJRDNEMTFCdWZmZXIgKmNvbnN0IG51bGxCdWZmZXIgPSBOVUxMOworICAgIG1E
ZXZpY2VDb250ZXh0LT5JQVNldFZlcnRleEJ1ZmZlcnMoMCwgMSwgJm51bGxCdWZmZXIsICZ6ZXJv
LCAmemVybyk7CisKKyAgICBtYXJrQWxsU3RhdGVEaXJ0eSgpOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6dW5hcHBseVJlbmRlclRhcmdldHMoKQoreworICAgIHNl
dE9uZVRpbWVSZW5kZXJUYXJnZXQoTlVMTCk7Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6c2V0T25l
VGltZVJlbmRlclRhcmdldChJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpyZW5kZXJUYXJnZXRWaWV3
KQoreworICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0dkFycmF5W2dsOjpJTVBMRU1FTlRB
VElPTl9NQVhfRFJBV19CVUZGRVJTXSA9IHtOVUxMfTsKKworICAgIHJ0dkFycmF5WzBdID0gcmVu
ZGVyVGFyZ2V0VmlldzsKKworICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldFJlbmRlclRhcmdldHMo
Z2V0TWF4UmVuZGVyVGFyZ2V0cygpLCBydHZBcnJheSwgTlVMTCk7CisKKyAgICAvLyBEbyBub3Qg
cHJlc2VydmUgdGhlIHNlcmlhbCBmb3IgdGhpcyBvbmUtdGltZS11c2UgcmVuZGVyIHRhcmdldAor
ICAgIGZvciAodW5zaWduZWQgaW50IHJ0SW5kZXggPSAwOyBydEluZGV4IDwgZ2w6OklNUExFTUVO
VEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IHJ0SW5kZXgrKykKKyAgICB7CisgICAgICAgIG1BcHBs
aWVkUmVuZGVyVGFyZ2V0U2VyaWFsc1tydEluZGV4XSA9IDA7CisgICAgfQorfQorCitSZW5kZXJU
YXJnZXQgKlJlbmRlcmVyMTE6OmNyZWF0ZVJlbmRlclRhcmdldChTd2FwQ2hhaW4gKnN3YXBDaGFp
biwgYm9vbCBkZXB0aCkKK3sKKyAgICBTd2FwQ2hhaW4xMSAqc3dhcENoYWluMTEgPSBTd2FwQ2hh
aW4xMTo6bWFrZVN3YXBDaGFpbjExKHN3YXBDaGFpbik7CisgICAgUmVuZGVyVGFyZ2V0MTEgKnJl
bmRlclRhcmdldCA9IE5VTEw7CisKKyAgICBpZiAoZGVwdGgpCisgICAgeworICAgICAgICAvLyBO
b3RlOiBkZXB0aCBzdGVuY2lsIG1heSBiZSBOVUxMIGZvciAwIHNpemVkIHN1cmZhY2VzCisgICAg
ICAgIHJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQxMSh0aGlzLCBzd2FwQ2hhaW4xMS0+
Z2V0RGVwdGhTdGVuY2lsKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzd2FwQ2hhaW4xMS0+Z2V0RGVwdGhTdGVuY2lsVGV4dHVyZSgpLCBOVUxMLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldFdpZHRo
KCksIHN3YXBDaGFpbjExLT5nZXRIZWlnaHQoKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIC8vIE5vdGU6IHJlbmRlciB0YXJnZXQgbWF5IGJlIE5VTEwgZm9yIDAgc2l6ZWQgc3Vy
ZmFjZXMKKyAgICAgICAgcmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldDExKHRoaXMsIHN3
YXBDaGFpbjExLT5nZXRSZW5kZXJUYXJnZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN3YXBDaGFpbjExLT5nZXRPZmZzY3JlZW5UZXh0dXJlKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwQ2hhaW4xMS0+Z2V0UmVu
ZGVyVGFyZ2V0U2hhZGVyUmVzb3VyY2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN3YXBDaGFpbjExLT5nZXRXaWR0aCgpLCBzd2FwQ2hhaW4xMS0+Z2V0SGVp
Z2h0KCkpOworICAgIH0KKyAgICByZXR1cm4gcmVuZGVyVGFyZ2V0OworfQorCitSZW5kZXJUYXJn
ZXQgKlJlbmRlcmVyMTE6OmNyZWF0ZVJlbmRlclRhcmdldChpbnQgd2lkdGgsIGludCBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcywgYm9vbCBkZXB0aCkKK3sKKyAgICBSZW5k
ZXJUYXJnZXQxMSAqcmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldDExKHRoaXMsIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgc2FtcGxlcywgZGVwdGgpOworICAgIHJldHVybiByZW5kZXJUYXJn
ZXQ7Cit9CisKK1NoYWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyMTE6OmxvYWRFeGVjdXRhYmxlKGNv
bnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCByeDo6U2hhZGVyVHlwZSB0eXBlKQor
eworICAgIFNoYWRlckV4ZWN1dGFibGUxMSAqZXhlY3V0YWJsZSA9IE5VTEw7CisKKyAgICBzd2l0
Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSByeDo6U0hBREVSX1ZFUlRFWDoKKyAgICAgICAg
eworICAgICAgICAgICAgSUQzRDExVmVydGV4U2hhZGVyICp2c2hhZGVyID0gTlVMTDsKKyAgICAg
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKGZ1bmN0
aW9uLCBsZW5ndGgsIE5VTEwsICZ2c2hhZGVyKTsKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7CisKKyAgICAgICAgICAgIGlmICh2c2hhZGVyKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBuZXcgU2hhZGVyRXhlY3V0YWJsZTExKGZ1bmN0
aW9uLCBsZW5ndGgsIHZzaGFkZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSByeDo6U0hBREVSX1BJWEVMOgorICAgICAgICB7CisgICAgICAg
ICAgICBJRDNEMTFQaXhlbFNoYWRlciAqcHNoYWRlciA9IE5VTEw7CisgICAgICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGZ1bmN0aW9uLCBsZW5ndGgs
IE5VTEwsICZwc2hhZGVyKTsKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7
CisKKyAgICAgICAgICAgIGlmIChwc2hhZGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGV4ZWN1dGFibGUgPSBuZXcgU2hhZGVyRXhlY3V0YWJsZTExKGZ1bmN0aW9uLCBsZW5ndGgs
IHBzaGFkZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSByeDo6U0hBREVSX0dFT01FVFJZOgorICAgICAgICB7CisgICAgICAgICAgICBJRDNE
MTFHZW9tZXRyeVNoYWRlciAqZ3NoYWRlciA9IE5VTEw7CisgICAgICAgICAgICBIUkVTVUxUIHJl
c3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUdlb21ldHJ5U2hhZGVyKGZ1bmN0aW9uLCBsZW5ndGgsIE5V
TEwsICZnc2hhZGVyKTsKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisK
KyAgICAgICAgICAgIGlmIChnc2hhZGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGV4ZWN1dGFibGUgPSBuZXcgU2hhZGVyRXhlY3V0YWJsZTExKGZ1bmN0aW9uLCBsZW5ndGgsIGdz
aGFkZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgcmV0dXJuIGV4ZWN1dGFibGU7Cit9CisKK1NoYWRlckV4ZWN1dGFibGUgKlJlbmRlcmVy
MTE6OmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIg
KnNoYWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsIEQzRFdvcmthcm91bmRUeXBlIHdvcmth
cm91bmQpCit7CisgICAgY29uc3QgY2hhciAqcHJvZmlsZSA9IE5VTEw7CisKKyAgICBzd2l0Y2gg
KHR5cGUpCisgICAgeworICAgICAgY2FzZSByeDo6U0hBREVSX1ZFUlRFWDoKKyAgICAgICAgcHJv
ZmlsZSA9ICJ2c180XzAiOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ugcng6OlNIQURFUl9Q
SVhFTDoKKyAgICAgICAgcHJvZmlsZSA9ICJwc180XzAiOworICAgICAgICBicmVhazsKKyAgICAg
IGNhc2Ugcng6OlNIQURFUl9HRU9NRVRSWToKKyAgICAgICAgcHJvZmlsZSA9ICJnc180XzAiOwor
ICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIElEM0RCbG9iICpiaW5hcnkgPSAoSUQz
REJsb2IqKWNvbXBpbGVUb0JpbmFyeShpbmZvTG9nLCBzaGFkZXJITFNMLCBwcm9maWxlLCBEM0RD
T01QSUxFX09QVElNSVpBVElPTl9MRVZFTDAsIGZhbHNlKTsKKyAgICBpZiAoIWJpbmFyeSkKKyAg
ICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBTaGFkZXJFeGVjdXRhYmxlICpleGVjdXRhYmxlID0g
bG9hZEV4ZWN1dGFibGUoKERXT1JEICopYmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksIGJpbmFy
eS0+R2V0QnVmZmVyU2l6ZSgpLCB0eXBlKTsKKyAgICBiaW5hcnktPlJlbGVhc2UoKTsKKworICAg
IHJldHVybiBleGVjdXRhYmxlOworfQorCitWZXJ0ZXhCdWZmZXIgKlJlbmRlcmVyMTE6OmNyZWF0
ZVZlcnRleEJ1ZmZlcigpCit7CisgICAgcmV0dXJuIG5ldyBWZXJ0ZXhCdWZmZXIxMSh0aGlzKTsK
K30KKworSW5kZXhCdWZmZXIgKlJlbmRlcmVyMTE6OmNyZWF0ZUluZGV4QnVmZmVyKCkKK3sKKyAg
ICByZXR1cm4gbmV3IEluZGV4QnVmZmVyMTEodGhpcyk7Cit9CisKK0J1ZmZlclN0b3JhZ2UgKlJl
bmRlcmVyMTE6OmNyZWF0ZUJ1ZmZlclN0b3JhZ2UoKQoreworICAgIHJldHVybiBuZXcgQnVmZmVy
U3RvcmFnZTExKHRoaXMpOworfQorCitRdWVyeUltcGwgKlJlbmRlcmVyMTE6OmNyZWF0ZVF1ZXJ5
KEdMZW51bSB0eXBlKQoreworICAgIHJldHVybiBuZXcgUXVlcnkxMSh0aGlzLCB0eXBlKTsKK30K
KworRmVuY2VJbXBsICpSZW5kZXJlcjExOjpjcmVhdGVGZW5jZSgpCit7CisgICAgcmV0dXJuIG5l
dyBGZW5jZTExKHRoaXMpOworfQorCitib29sIFJlbmRlcmVyMTE6OmdldFJlbmRlclRhcmdldFJl
c291cmNlKGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyLCB1bnNpZ25lZCBpbnQgKnN1YnJl
c291cmNlSW5kZXgsIElEM0QxMVRleHR1cmUyRCAqKnJlc291cmNlKQoreworICAgIEFTU0VSVChj
b2xvcmJ1ZmZlciAhPSBOVUxMKTsKKworICAgIFJlbmRlclRhcmdldDExICpyZW5kZXJUYXJnZXQg
PSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGNvbG9yYnVmZmVyLT5nZXRSZW5k
ZXJUYXJnZXQoKSk7CisgICAgaWYgKHJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgICpzdWJy
ZXNvdXJjZUluZGV4ID0gcmVuZGVyVGFyZ2V0LT5nZXRTdWJyZXNvdXJjZUluZGV4KCk7CisKKyAg
ICAgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqY29sb3JCdWZmZXJSVFYgPSByZW5kZXJUYXJn
ZXQtPmdldFJlbmRlclRhcmdldFZpZXcoKTsKKyAgICAgICAgaWYgKGNvbG9yQnVmZmVyUlRWKQor
ICAgICAgICB7CisgICAgICAgICAgICBJRDNEMTFSZXNvdXJjZSAqdGV4dHVyZVJlc291cmNlID0g
TlVMTDsKKyAgICAgICAgICAgIGNvbG9yQnVmZmVyUlRWLT5HZXRSZXNvdXJjZSgmdGV4dHVyZVJl
c291cmNlKTsKKworICAgICAgICAgICAgaWYgKHRleHR1cmVSZXNvdXJjZSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IHRleHR1cmVSZXNvdXJjZS0+UXVl
cnlJbnRlcmZhY2UoSUlEX0lEM0QxMVRleHR1cmUyRCwgKHZvaWQqKilyZXNvdXJjZSk7CisgICAg
ICAgICAgICAgICAgdGV4dHVyZVJlc291cmNlLT5SZWxlYXNlKCk7CisKKyAgICAgICAgICAgICAg
ICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRVJSKCJGYWlsZWQg
dG8gZXh0cmFjdCB0aGUgSUQzRDExVGV4dHVyZTJEIGZyb20gdGhlIHJlbmRlciB0YXJnZXQgcmVz
b3VyY2UsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJIUkVTVUxUOiAweCVYLiIsIHJlc3Vs
dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlcmVyMTE6OmJsaXRSZWN0KGdsOjpG
cmFtZWJ1ZmZlciAqcmVhZFRhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGds
OjpGcmFtZWJ1ZmZlciAqZHJhd1RhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1JlY3Qs
CisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBi
bGl0RGVwdGhTdGVuY2lsKQoreworICAgIGlmIChibGl0UmVuZGVyVGFyZ2V0KQorICAgIHsKKyAg
ICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVhZEJ1ZmZlciA9IHJlYWRUYXJnZXQtPmdldFJlYWRD
b2xvcmJ1ZmZlcigpOworCisgICAgICAgIGlmICghcmVhZEJ1ZmZlcikKKyAgICAgICAgeworICAg
ICAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlYWQgYnVmZmVyIGZyb20gdGhl
IHJlYWQgZnJhbWVidWZmZXIuIik7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlbmRlclRhcmdldCAq
cmVhZFJlbmRlclRhcmdldCA9IHJlYWRCdWZmZXItPmdldFJlbmRlclRhcmdldCgpOworCisgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNobWVu
dCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQr
KykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGRyYXdUYXJnZXQtPmlzRW5hYmxlZENvbG9y
QXR0YWNobWVudChjb2xvckF0dGFjaG1lbnQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGdsOjpSZW5kZXJidWZmZXIgKmRyYXdCdWZmZXIgPSBkcmF3VGFyZ2V0LT5nZXRDb2xvcmJ1
ZmZlcihjb2xvckF0dGFjaG1lbnQpOworCisgICAgICAgICAgICAgICAgaWYgKCFkcmF3QnVmZmVy
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8g
cmV0cmlldmUgdGhlIGRyYXcgYnVmZmVyIGZyb20gdGhlIGRyYXcgZnJhbWVidWZmZXIuIik7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFs
c2UpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIFJlbmRlclRhcmdldCAq
ZHJhd1JlbmRlclRhcmdldCA9IGRyYXdCdWZmZXItPmdldFJlbmRlclRhcmdldCgpOworCisgICAg
ICAgICAgICAgICAgaWYgKCFibGl0UmVuZGVyYnVmZmVyUmVjdChyZWFkUmVjdCwgZHJhd1JlY3Qs
IHJlYWRSZW5kZXJUYXJnZXQsIGRyYXdSZW5kZXJUYXJnZXQsIGZhbHNlKSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYmxpdERlcHRo
U3RlbmNpbCkKKyAgICB7CisgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlYWRCdWZmZXIgPSBy
ZWFkVGFyZ2V0LT5nZXREZXB0aE9yU3RlbmNpbGJ1ZmZlcigpOworICAgICAgICBnbDo6UmVuZGVy
YnVmZmVyICpkcmF3QnVmZmVyID0gZHJhd1RhcmdldC0+Z2V0RGVwdGhPclN0ZW5jaWxidWZmZXIo
KTsKKworICAgICAgICBpZiAoIXJlYWRCdWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVS
UigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZWFkIGRlcHRoLXN0ZW5jaWwgYnVmZmVyIGZyb20g
dGhlIHJlYWQgZnJhbWVidWZmZXIuIik7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghZHJhd0J1
ZmZlcikKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhl
IGRyYXcgZGVwdGgtc3RlbmNpbCBidWZmZXIgZnJvbSB0aGUgZHJhdyBmcmFtZWJ1ZmZlci4iKTsK
KyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwor
ICAgICAgICB9CisKKyAgICAgICAgUmVuZGVyVGFyZ2V0ICpyZWFkUmVuZGVyVGFyZ2V0ID0gcmVh
ZEJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7CisgICAgICAgIFJlbmRlclRhcmdldCAqZHJhd1Jl
bmRlclRhcmdldCA9IGRyYXdCdWZmZXItPmdldERlcHRoU3RlbmNpbCgpOworCisgICAgICAgIGlm
ICghYmxpdFJlbmRlcmJ1ZmZlclJlY3QocmVhZFJlY3QsIGRyYXdSZWN0LCByZWFkUmVuZGVyVGFy
Z2V0LCBkcmF3UmVuZGVyVGFyZ2V0LCB0cnVlKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgUmVuZGVyZXIxMTo6cmVhZFBpeGVscyhnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBv
dXRwdXRQaXRjaCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLCBHTGludCBwYWNrQWxpZ25tZW50
LCB2b2lkKiBwaXhlbHMpCit7CisgICAgSUQzRDExVGV4dHVyZTJEICpjb2xvckJ1ZmZlclRleHR1
cmUgPSBOVUxMOworICAgIHVuc2lnbmVkIGludCBzdWJyZXNvdXJjZUluZGV4ID0gMDsKKworICAg
IGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gZnJhbWVidWZmZXItPmdldFJlYWRDb2xv
cmJ1ZmZlcigpOworCisgICAgaWYgKGNvbG9yYnVmZmVyICYmIGdldFJlbmRlclRhcmdldFJlc291
cmNlKGNvbG9yYnVmZmVyLCAmc3VicmVzb3VyY2VJbmRleCwgJmNvbG9yQnVmZmVyVGV4dHVyZSkp
CisgICAgeworICAgICAgICBnbDo6UmVjdGFuZ2xlIGFyZWE7CisgICAgICAgIGFyZWEueCA9IHg7
CisgICAgICAgIGFyZWEueSA9IHk7CisgICAgICAgIGFyZWEud2lkdGggPSB3aWR0aDsKKyAgICAg
ICAgYXJlYS5oZWlnaHQgPSBoZWlnaHQ7CisKKyAgICAgICAgcmVhZFRleHR1cmVEYXRhKGNvbG9y
QnVmZmVyVGV4dHVyZSwgc3VicmVzb3VyY2VJbmRleCwgYXJlYSwgY29sb3JidWZmZXItPmdldEFj
dHVhbEZvcm1hdCgpLCBmb3JtYXQsIHR5cGUsIG91dHB1dFBpdGNoLAorICAgICAgICAgICAgICAg
ICAgICAgICAgcGFja1JldmVyc2VSb3dPcmRlciwgcGFja0FsaWdubWVudCwgcGl4ZWxzKTsKKwor
ICAgICAgICBjb2xvckJ1ZmZlclRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgY29sb3JCdWZm
ZXJUZXh0dXJlID0gTlVMTDsKKyAgICB9Cit9CisKK0ltYWdlICpSZW5kZXJlcjExOjpjcmVhdGVJ
bWFnZSgpCit7CisgICAgcmV0dXJuIG5ldyBJbWFnZTExKCk7Cit9CisKK3ZvaWQgUmVuZGVyZXIx
MTo6Z2VuZXJhdGVNaXBtYXAoSW1hZ2UgKmRlc3QsIEltYWdlICpzcmMpCit7CisgICAgSW1hZ2Ux
MSAqZGVzdDExID0gSW1hZ2UxMTo6bWFrZUltYWdlMTEoZGVzdCk7CisgICAgSW1hZ2UxMSAqc3Jj
MTEgPSBJbWFnZTExOjptYWtlSW1hZ2UxMShzcmMpOworICAgIEltYWdlMTE6OmdlbmVyYXRlTWlw
bWFwKGRlc3QxMSwgc3JjMTEpOworfQorCitUZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXIxMTo6Y3Jl
YXRlVGV4dHVyZVN0b3JhZ2UyRChTd2FwQ2hhaW4gKnN3YXBDaGFpbikKK3sKKyAgICBTd2FwQ2hh
aW4xMSAqc3dhcENoYWluMTEgPSBTd2FwQ2hhaW4xMTo6bWFrZVN3YXBDaGFpbjExKHN3YXBDaGFp
bik7CisgICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTExXzJEKHRoaXMsIHN3YXBDaGFpbjEx
KTsKK30KKworVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyMTE6OmNyZWF0ZVRleHR1cmVTdG9yYWdl
MkQoaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wg
Zm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBy
ZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlMTFfMkQodGhpcywgbGV2ZWxzLCBpbnRlcm5hbGZvcm1h
dCwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK1RleHR1cmVT
dG9yYWdlICpSZW5kZXJlcjExOjpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUoaW50IGxldmVscywg
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxl
LCBpbnQgc2l6ZSkKK3sKKyAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlMTFfQ3ViZSh0aGlz
LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlLCBzaXplKTsK
K30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0RmFzdFBpeGVsQ29weVNpemUoRFhH
SV9GT1JNQVQgc291cmNlRm9ybWF0LCBHTGVudW0gc291cmNlR0xGb3JtYXQsIEdMZW51bSBkZXN0
Rm9ybWF0LCBHTGVudW0gZGVzdFR5cGUpCit7CisgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBEWEdJ
X0ZPUk1BVF9BOF9VTk9STSAmJgorICAgICAgICBkZXN0Rm9ybWF0ICAgPT0gR0xfQUxQSEEgJiYK
KyAgICAgICAgZGVzdFR5cGUgICAgID09IEdMX1VOU0lHTkVEX0JZVEUpCisgICAgeworICAgICAg
ICByZXR1cm4gMTsKKyAgICB9CisgICAgZWxzZSBpZiAoc291cmNlRm9ybWF0ICAgPT0gRFhHSV9G
T1JNQVRfUjhHOEI4QThfVU5PUk0gJiYKKyAgICAgICAgICAgICBzb3VyY2VHTEZvcm1hdCA9PSBH
TF9SR0JBOF9PRVMgJiYKKyAgICAgICAgICAgICBkZXN0Rm9ybWF0ICAgICA9PSBHTF9SR0JBICYm
CisgICAgICAgICAgICAgZGVzdFR5cGUgICAgICAgPT0gR0xfVU5TSUdORURfQllURSkKKyAgICB7
CisgICAgICAgIHJldHVybiA0OworICAgIH0KKyAgICBlbHNlIGlmIChzb3VyY2VGb3JtYXQgPT0g
RFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk0gJiYKKyAgICAgICAgICAgICBkZXN0Rm9ybWF0ICAg
PT0gR0xfQkdSQV9FWFQgJiYKKyAgICAgICAgICAgICBkZXN0VHlwZSAgICAgPT0gR0xfVU5TSUdO
RURfQllURSkKKyAgICB7CisgICAgICAgIHJldHVybiA0OworICAgIH0KKyAgICBlbHNlIGlmIChz
b3VyY2VGb3JtYXQgICA9PSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQgJiYKKyAgICAg
ICAgICAgICBzb3VyY2VHTEZvcm1hdCA9PSBHTF9SR0JBMTZGX0VYVCAmJgorICAgICAgICAgICAg
IGRlc3RGb3JtYXQgICAgID09IEdMX1JHQkEgJiYKKyAgICAgICAgICAgICBkZXN0VHlwZSAgICAg
ICA9PSBHTF9IQUxGX0ZMT0FUX09FUykKKyAgICB7CisgICAgICAgIHJldHVybiA4OworICAgIH0K
KyAgICBlbHNlIGlmIChzb3VyY2VGb3JtYXQgPT0gRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FU
ICYmCisgICAgICAgICAgICAgZGVzdEZvcm1hdCAgID09IEdMX1JHQiAmJgorICAgICAgICAgICAg
IGRlc3RUeXBlICAgICA9PSBHTF9GTE9BVCkKKyAgICB7CisgICAgICAgIHJldHVybiAxMjsKKyAg
ICB9CisgICAgZWxzZSBpZiAoc291cmNlRm9ybWF0ICAgPT0gRFhHSV9GT1JNQVRfUjMyRzMyQjMy
QTMyX0ZMT0FUICYmCisgICAgICAgICAgICAgc291cmNlR0xGb3JtYXQgPT0gR0xfUkdCQTMyRl9F
WFQgJiYKKyAgICAgICAgICAgICBkZXN0Rm9ybWF0ICAgICA9PSBHTF9SR0JBICYmCisgICAgICAg
ICAgICAgZGVzdFR5cGUgICAgICAgPT0gR0xfRkxPQVQpCisgICAgeworICAgICAgICByZXR1cm4g
MTY7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30K
Kworc3RhdGljIGlubGluZSB2b2lkIHJlYWRQaXhlbENvbG9yKGNvbnN0IHVuc2lnbmVkIGNoYXIg
KmRhdGEsIERYR0lfRk9STUFUIGZvcm1hdCwgR0xlbnVtIGdsRm9ybWF0LCB1bnNpZ25lZCBpbnQg
eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgeSwgaW50
IGlucHV0UGl0Y2gsIGdsOjpDb2xvciAqb3V0Q29sb3IpCit7CisgICAgc3dpdGNoIChmb3JtYXQp
CisgICAgeworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STToKKyAgICAgICAg
eworICAgICAgICAgICAgdW5zaWduZWQgaW50IHJnYmEgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1bnNpZ25lZCBpbnQqPihkYXRhICsgNCAqIHggKyB5ICogaW5wdXRQaXRjaCk7CisgICAgICAg
ICAgICBvdXRDb2xvci0+cmVkID0gICAocmdiYSAmIDB4MDAwMDAwRkYpICogKDEuMGYgLyAweDAw
MDAwMEZGKTsKKyAgICAgICAgICAgIG91dENvbG9yLT5ncmVlbiA9IChyZ2JhICYgMHgwMDAwRkYw
MCkgKiAoMS4wZiAvIDB4MDAwMEZGMDApOworICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAg
KHJnYmEgJiAweDAwRkYwMDAwKSAqICgxLjBmIC8gMHgwMEZGMDAwMCk7CisKKyAgICAgICAgICAg
IGlmIChnbDo6R2V0QWxwaGFTaXplKGdsRm9ybWF0KSA+IDApCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gKHJnYmEgJiAweEZGMDAwMDAwKSAqICgxLjBm
IC8gMHhGRjAwMDAwMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gMS4wZjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9BOF9VTk9STToKKyAgICAgICAgeworICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAgMC4w
ZjsKKyAgICAgICAgICAgIG91dENvbG9yLT5ncmVlbiA9IDAuMGY7CisgICAgICAgICAgICBvdXRD
b2xvci0+Ymx1ZSA9ICAwLjBmOworICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gKihkYXRh
ICsgeCArIHkgKiBpbnB1dFBpdGNoKSAvIDI1NS4wZjsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQ6CisgICAgICAg
IHsKKyAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgICoocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBmbG9hdCo+KGRhdGEgKyAxNiAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAwKTsKKyAgICAgICAg
ICAgIG91dENvbG9yLT5ncmVlbiA9ICoocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KGRh
dGEgKyAxNiAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAxKTsKKyAgICAgICAgICAgIG91dENvbG9y
LT5ibHVlID0gICoocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KGRhdGEgKyAxNiAqIHgg
KyB5ICogaW5wdXRQaXRjaCkgKyAyKTsKKworICAgICAgICAgICAgaWYgKGdsOjpHZXRBbHBoYVNp
emUoZ2xGb3JtYXQpID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRDb2xv
ci0+YWxwaGEgPSAqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhICsgMTYgKiB4
ICsgeSAqIGlucHV0UGl0Y2gpICsgMyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gMS4wZjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIG91dENv
bG9yLT5yZWQgPSAgICoocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KGRhdGEgKyAxMiAq
IHggKyB5ICogaW5wdXRQaXRjaCkgKyAwKTsKKyAgICAgICAgICAgIG91dENvbG9yLT5ncmVlbiA9
ICoocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KGRhdGEgKyAxMiAqIHggKyB5ICogaW5w
dXRQaXRjaCkgKyAxKTsKKyAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gICoocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBmbG9hdCo+KGRhdGEgKyAxMiAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAy
KTsKKyAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IDEuMGY7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X0ZMT0FUOgor
ICAgICAgICB7CisgICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICBnbDo6ZmxvYXQxNlRvRmxv
YXQzMigqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgOCAq
IHggKyB5ICogaW5wdXRQaXRjaCkgKyAwKSk7CisgICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4g
PSBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQg
c2hvcnQqPihkYXRhICsgOCAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAxKSk7CisgICAgICAgICAg
ICBvdXRDb2xvci0+Ymx1ZSA9ICBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgOCAqIHggKyB5ICogaW5wdXRQaXRjaCkg
KyAyKSk7CisKKyAgICAgICAgICAgIGlmIChnbDo6R2V0QWxwaGFTaXplKGdsRm9ybWF0KSA+IDAp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gZ2w6OmZs
b2F0MTZUb0Zsb2F0MzIoKihyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4o
ZGF0YSArIDggKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMykpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dENvbG9yLT5h
bHBoYSA9IDEuMGY7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisK
KyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06CisgICAgICAgIHsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBiZ3JhID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgaW50Kj4oZGF0YSArIDQgKiB4ICsgeSAqIGlucHV0UGl0Y2gpOworICAgICAgICAgICAgb3V0
Q29sb3ItPnJlZCA9ICAgKGJncmEgJiAweDAwRkYwMDAwKSAqICgxLjBmIC8gMHgwMEZGMDAwMCk7
CisgICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAoYmdyYSAmIDB4MDAwMDAwRkYpICogKDEu
MGYgLyAweDAwMDAwMEZGKTsKKyAgICAgICAgICAgIG91dENvbG9yLT5ncmVlbiA9IChiZ3JhICYg
MHgwMDAwRkYwMCkgKiAoMS4wZiAvIDB4MDAwMEZGMDApOworICAgICAgICAgICAgb3V0Q29sb3It
PmFscGhhID0gKGJncmEgJiAweEZGMDAwMDAwKSAqICgxLjBmIC8gMHhGRjAwMDAwMCk7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVU5PUk06
CisgICAgICAgIHsKKyAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgICooZGF0YSArIHggKyB5
ICogaW5wdXRQaXRjaCkgLyAyNTUuMGY7CisgICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAw
LjBmOworICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAgMC4wZjsKKyAgICAgICAgICAgIG91
dENvbG9yLT5hbHBoYSA9IDEuMGY7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9VTk9STToKKyAgICAgICAgeworICAgICAgICAgICAgdW5z
aWduZWQgc2hvcnQgcmcgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+
KGRhdGEgKyAyICogeCArIHkgKiBpbnB1dFBpdGNoKTsKKworICAgICAgICAgICAgb3V0Q29sb3It
PnJlZCA9ICAgKHJnICYgMHhGRjAwKSAqICgxLjBmIC8gMHhGRjAwKTsKKyAgICAgICAgICAgIG91
dENvbG9yLT5ncmVlbiA9IChyZyAmIDB4MDBGRikgKiAoMS4wZiAvIDB4MDBGRik7CisgICAgICAg
ICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAwLjBmOworICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhh
ID0gMS4wZjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SMTZfRkxPQVQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAg
IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNo
b3J0Kj4oZGF0YSArIDIgKiB4ICsgeSAqIGlucHV0UGl0Y2gpKTsKKyAgICAgICAgICAgIG91dENv
bG9yLT5ncmVlbiA9IDAuMGY7CisgICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAwLjBmOwor
ICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gMS4wZjsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfRkxPQVQ6CisgICAgICAgIHsK
KyAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgIGdsOjpmbG9hdDE2VG9GbG9hdDMyKCoocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyA0ICogeCArIHkgKiBp
bnB1dFBpdGNoKSArIDApKTsKKyAgICAgICAgICAgIG91dENvbG9yLT5ncmVlbiA9IGdsOjpmbG9h
dDE2VG9GbG9hdDMyKCoocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRh
dGEgKyA0ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDEpKTsKKyAgICAgICAgICAgIG91dENvbG9y
LT5ibHVlID0gIDAuMGY7CisgICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBFUlIoIlJl
YWRQaXhlbENvbG9yIG5vdCBpbXBsZW1lbnRlZCBmb3IgRFhHSSBmb3JtYXQgJXUuIiwgZm9ybWF0
KTsKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisK
K3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZVBpeGVsQ29sb3IoY29uc3QgZ2w6OkNvbG9yICZjb2xv
ciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCB4LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgeSwgaW50IG91dHB1dFBpdGNo
LCB2b2lkICpvdXREYXRhKQoreworICAgIHVuc2lnbmVkIGNoYXIqIGJ5dGVEYXRhID0gcmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0RGF0YSk7CisgICAgdW5zaWduZWQgc2hvcnQq
IHNob3J0RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihvdXREYXRhKTsK
KworICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgR0xfUkdCQToKKyAgICAg
ICAgc3dpdGNoICh0eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9C
WVRFOgorICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAwXSA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLnJlZCAgICsgMC41Zik7Cisg
ICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDFdID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuZ3JlZW4gKyAwLjVmKTsKKyAgICAgICAg
ICAgIGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMl0gPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5ibHVlICArIDAuNWYpOworICAgICAgICAgICAgYnl0
ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAzXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KDI1NSAqIGNvbG9yLmFscGhhICsgMC41Zik7CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBFUlIoIldyaXRlUGl4ZWxDb2xvciBub3Qg
aW1wbGVtZW50ZWQgZm9yIGZvcm1hdCBHTF9SR0JBIGFuZCB0eXBlIDB4JVguIiwgdHlwZSk7Cisg
ICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKKyAgICAgICAgc3dp
dGNoICh0eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgor
ICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAwXSA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLmJsdWUgICsgMC41Zik7CisgICAgICAg
ICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDFdID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuZ3JlZW4gKyAwLjVmKTsKKyAgICAgICAgICAgIGJ5
dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMl0gPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyPigyNTUgKiBjb2xvci5yZWQgICArIDAuNWYpOworICAgICAgICAgICAgYnl0ZURhdGFb
NCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAzXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+
KDI1NSAqIGNvbG9yLmFscGhhICsgMC41Zik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhUOgorICAgICAgICAgICAg
Ly8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhlICJUcmFuc2ZlciBvZiBQ
aXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCisgICAgICAgICAgICAvLyB0aGlzIHR5cGUgaXMgcGFj
a2VkIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAgIDEyICAgMTEg
ICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAgMSAgICAwCisg
ICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgIC8vIHwg
ICAgICAgNHRoICAgICAgICAgfCAgICAgICAgM3JkICAgICAgICAgfCAgICAgICAgMm5kICAgICAg
ICB8ICAgMXN0IGNvbXBvbmVudCAgIHwKKyAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgQkdSQV9FWFQsIEIgaXMgdGhl
IGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28gZm9ydGguCisgICAgICAgICAg
ICBzaG9ydERhdGFbeCArIHkgKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCld
ID0KKyAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDE1ICogY29s
b3IuYWxwaGEgKyAwLjVmKSA8PCAxMikgfAorICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1
bnNpZ25lZCBzaG9ydD4oMTUgKiBjb2xvci5yZWQgICArIDAuNWYpIDw8ICA4KSB8CisgICAgICAg
ICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigxNSAqIGNvbG9yLmdyZWVuICsg
MC41ZikgPDwgIDQpIHwKKyAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hv
cnQ+KDE1ICogY29sb3IuYmx1ZSAgKyAwLjVmKSA8PCAgMCk7CisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUOgorICAg
ICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhlICJUcmFu
c2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCisgICAgICAgICAgICAvLyB0aGlzIHR5
cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAg
IDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAg
MSAgICAwCisgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAg
ICAgIC8vIHwgNHRoIHwgICAgICAgICAgM3JkICAgICAgICAgICB8ICAgICAgICAgICAybmQgICAg
ICAgICAgfCAgICAgIDFzdCBjb21wb25lbnQgICAgIHwKKyAgICAgICAgICAgIC8vICAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgQkdSQV9FWFQs
IEIgaXMgdGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28gZm9ydGguCisg
ICAgICAgICAgICBzaG9ydERhdGFbeCArIHkgKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25l
ZCBzaG9ydCldID0KKyAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+
KCAgICAgY29sb3IuYWxwaGEgKyAwLjVmKSA8PCAxNSkgfAorICAgICAgICAgICAgICAgIChzdGF0
aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMzEgKiBjb2xvci5yZWQgICArIDAuNWYpIDw8IDEwKSB8
CisgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigzMSAqIGNvbG9y
LmdyZWVuICsgMC41ZikgPDwgIDUpIHwKKyAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5z
aWduZWQgc2hvcnQ+KDMxICogY29sb3IuYmx1ZSAgKyAwLjVmKSA8PCAgMCk7CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBFUlIoIldyaXRlUGl4
ZWxDb2xvciBub3QgaW1wbGVtZW50ZWQgZm9yIGZvcm1hdCBHTF9CR1JBX0VYVCBhbmQgdHlwZSAw
eCVYLiIsIHR5cGUpOworICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgR0xfUkdCOgor
ICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX1NIT1JUXzVfNl81OgorICAgICAgICAgICAgc2hvcnREYXRhW3ggKyB5ICogb3V0cHV0UGl0
Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9CisgICAgICAgICAgICAgICAgKHN0YXRpY19j
YXN0PHVuc2lnbmVkIHNob3J0PigzMSAqIGNvbG9yLmJsdWUgICsgMC41ZikgPDwgIDApIHwKKyAg
ICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDYzICogY29sb3IuZ3Jl
ZW4gKyAwLjVmKSA8PCAgNSkgfAorICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBzaG9ydD4oMzEgKiBjb2xvci5yZWQgICArIDAuNWYpIDw8IDExKTsKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICAgICAgYnl0
ZURhdGFbMyAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAwXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KDI1NSAqIGNvbG9yLnJlZCArICAgMC41Zik7CisgICAgICAgICAgICBieXRlRGF0YVsz
ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDFdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4o
MjU1ICogY29sb3IuZ3JlZW4gKyAwLjVmKTsKKyAgICAgICAgICAgIGJ5dGVEYXRhWzMgKiB4ICsg
eSAqIG91dHB1dFBpdGNoICsgMl0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBj
b2xvci5ibHVlICsgIDAuNWYpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgRVJSKCJXcml0ZVBpeGVsQ29sb3Igbm90IGltcGxlbWVudGVkIGZv
ciBmb3JtYXQgR0xfUkdCIGFuZCB0eXBlIDB4JVguIiwgdHlwZSk7CisgICAgICAgICAgICBVTklN
UExFTUVOVEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgRVJSKCJXcml0ZVBpeGVsQ29sb3Igbm90IGlt
cGxlbWVudGVkIGZvciBmb3JtYXQgMHglWC4iLCBmb3JtYXQpOworICAgICAgICBVTklNUExFTUVO
VEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBSZW5kZXJlcjExOjpyZWFk
VGV4dHVyZURhdGEoSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCB1bnNpZ25lZCBpbnQgc3ViUmVz
b3VyY2UsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmFyZWEsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTGVudW0gc291cmNlRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwgR0xzaXplaSBvdXRwdXRQaXRjaCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgcGFja0FsaWdubWVudCwgdm9pZCAqcGl4
ZWxzKQoreworICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleHR1cmVEZXNjOworICAgIHRleHR1
cmUtPkdldERlc2MoJnRleHR1cmVEZXNjKTsKKworICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHN0
YWdpbmdEZXNjOworICAgIHN0YWdpbmdEZXNjLldpZHRoID0gYXJlYS53aWR0aDsKKyAgICBzdGFn
aW5nRGVzYy5IZWlnaHQgPSBhcmVhLmhlaWdodDsKKyAgICBzdGFnaW5nRGVzYy5NaXBMZXZlbHMg
PSAxOworICAgIHN0YWdpbmdEZXNjLkFycmF5U2l6ZSA9IDE7CisgICAgc3RhZ2luZ0Rlc2MuRm9y
bWF0ID0gdGV4dHVyZURlc2MuRm9ybWF0OworICAgIHN0YWdpbmdEZXNjLlNhbXBsZURlc2MuQ291
bnQgPSAxOworICAgIHN0YWdpbmdEZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7CisgICAgc3Rh
Z2luZ0Rlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9TVEFHSU5HOworICAgIHN0YWdpbmdEZXNjLkJp
bmRGbGFncyA9IDA7CisgICAgc3RhZ2luZ0Rlc2MuQ1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9DUFVf
QUNDRVNTX1JFQUQ7CisgICAgc3RhZ2luZ0Rlc2MuTWlzY0ZsYWdzID0gMDsKKworICAgIElEM0Qx
MVRleHR1cmUyRCogc3RhZ2luZ1RleCA9IE5VTEw7CisgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2
aWNlLT5DcmVhdGVUZXh0dXJlMkQoJnN0YWdpbmdEZXNjLCBOVUxMLCAmc3RhZ2luZ1RleCk7Cisg
ICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gY3Jl
YXRlIHN0YWdpbmcgdGV4dHVyZSBmb3IgcmVhZFBpeGVscywgSFJFU1VMVDogMHglWC4iLCByZXN1
bHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSUQzRDExVGV4dHVyZTJEKiBzcmNU
ZXggPSBOVUxMOworICAgIGlmICh0ZXh0dXJlRGVzYy5TYW1wbGVEZXNjLkNvdW50ID4gMSkKKyAg
ICB7CisgICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHJlc29sdmVEZXNjOworICAgICAgICBy
ZXNvbHZlRGVzYy5XaWR0aCA9IHRleHR1cmVEZXNjLldpZHRoOworICAgICAgICByZXNvbHZlRGVz
Yy5IZWlnaHQgPSB0ZXh0dXJlRGVzYy5IZWlnaHQ7CisgICAgICAgIHJlc29sdmVEZXNjLk1pcExl
dmVscyA9IDE7CisgICAgICAgIHJlc29sdmVEZXNjLkFycmF5U2l6ZSA9IDE7CisgICAgICAgIHJl
c29sdmVEZXNjLkZvcm1hdCA9IHRleHR1cmVEZXNjLkZvcm1hdDsKKyAgICAgICAgcmVzb2x2ZURl
c2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAgIHJlc29sdmVEZXNjLlNhbXBsZURlc2Mu
UXVhbGl0eSA9IDA7CisgICAgICAgIHJlc29sdmVEZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfREVG
QVVMVDsKKyAgICAgICAgcmVzb2x2ZURlc2MuQmluZEZsYWdzID0gMDsKKyAgICAgICAgcmVzb2x2
ZURlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOworICAgICAgICByZXNvbHZlRGVzYy5NaXNjRmxhZ3Mg
PSAwOworCisgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmcmVzb2x2
ZURlc2MsIE5VTEwsICZzcmNUZXgpOworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIGNyZWF0ZSByZXNvbHZlIHRleHR1cmUg
Zm9yIHJlYWRQaXhlbHMsIEhSRVNVTFQ6IDB4JVguIiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHN0
YWdpbmdUZXgtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIG1EZXZpY2VDb250ZXh0LT5SZXNvbHZlU3VicmVzb3VyY2Uoc3JjVGV4LCAwLCB0ZXh0
dXJlLCBzdWJSZXNvdXJjZSwgdGV4dHVyZURlc2MuRm9ybWF0KTsKKyAgICAgICAgc3ViUmVzb3Vy
Y2UgPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzcmNUZXggPSB0ZXh0dXJl
OworICAgICAgICBzcmNUZXgtPkFkZFJlZigpOworICAgIH0KKworICAgIEQzRDExX0JPWCBzcmNC
b3g7CisgICAgc3JjQm94LmxlZnQgPSBhcmVhLng7CisgICAgc3JjQm94LnJpZ2h0ID0gYXJlYS54
ICsgYXJlYS53aWR0aDsKKyAgICBzcmNCb3gudG9wID0gYXJlYS55OworICAgIHNyY0JveC5ib3R0
b20gPSBhcmVhLnkgKyBhcmVhLmhlaWdodDsKKyAgICBzcmNCb3guZnJvbnQgPSAwOworICAgIHNy
Y0JveC5iYWNrID0gMTsKKworICAgIG1EZXZpY2VDb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdp
b24oc3RhZ2luZ1RleCwgMCwgMCwgMCwgMCwgc3JjVGV4LCBzdWJSZXNvdXJjZSwgJnNyY0JveCk7
CisKKyAgICBzcmNUZXgtPlJlbGVhc2UoKTsKKyAgICBzcmNUZXggPSBOVUxMOworCisgICAgRDNE
MTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBpbmc7CisgICAgbURldmljZUNvbnRleHQtPk1hcChz
dGFnaW5nVGV4LCAwLCBEM0QxMV9NQVBfUkVBRCwgMCwgJm1hcHBpbmcpOworCisgICAgdW5zaWdu
ZWQgY2hhciAqc291cmNlOworICAgIGludCBpbnB1dFBpdGNoOworICAgIGlmIChwYWNrUmV2ZXJz
ZVJvd09yZGVyKQorICAgIHsKKyAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcio+KG1hcHBpbmcucERhdGEpICsgbWFwcGluZy5Sb3dQaXRjaCAqIChhcmVhLmhlaWdodCAt
IDEpOworICAgICAgICBpbnB1dFBpdGNoID0gLXN0YXRpY19jYXN0PGludD4obWFwcGluZy5Sb3dQ
aXRjaCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNvdXJjZSA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXIqPihtYXBwaW5nLnBEYXRhKTsKKyAgICAgICAgaW5wdXRQaXRjaCA9
IHN0YXRpY19jYXN0PGludD4obWFwcGluZy5Sb3dQaXRjaCk7CisgICAgfQorCisgICAgdW5zaWdu
ZWQgaW50IGZhc3RQaXhlbFNpemUgPSBnZXRGYXN0UGl4ZWxDb3B5U2l6ZSh0ZXh0dXJlRGVzYy5G
b3JtYXQsIHNvdXJjZUZvcm1hdCwgZm9ybWF0LCB0eXBlKTsKKyAgICBpZiAoZmFzdFBpeGVsU2l6
ZSAhPSAwKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihwaXhlbHMpOworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGFy
ZWEuaGVpZ2h0OyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbWNweShkZXN0ICsgaiAq
IG91dHB1dFBpdGNoLCBzb3VyY2UgKyBqICogaW5wdXRQaXRjaCwgYXJlYS53aWR0aCAqIGZhc3RQ
aXhlbFNpemUpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKHRleHR1cmVEZXNjLkZv
cm1hdCA9PSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STSAmJgorICAgICAgICAgICAgIGZvcm1h
dCA9PSBHTF9SR0JBICYmCisgICAgICAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQor
ICAgIHsKKyAgICAgICAgLy8gRmFzdCBwYXRoIGZvciBzd2FwcGluZyByZWQgd2l0aCBibHVlCisg
ICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
cGl4ZWxzKTsKKworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGFyZWEuaGVpZ2h0OyBqKysp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJlYS53aWR0aDsg
aSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdiID0g
Kih1bnNpZ25lZCBpbnQqKShzb3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBpdGNoKTsKKyAgICAg
ICAgICAgICAgICAqKHVuc2lnbmVkIGludCopKGRlc3QgKyA0ICogaSArIGogKiBvdXRwdXRQaXRj
aCkgPQorICAgICAgICAgICAgICAgICAgICAoYXJnYiAmIDB4RkYwMEZGMDApIHwgICAgICAgLy8g
S2VlcCBhbHBoYSBhbmQgZ3JlZW4KKyAgICAgICAgICAgICAgICAgICAgKGFyZ2IgJiAweDAwRkYw
MDAwKSA+PiAxNiB8IC8vIE1vdmUgcmVkIHRvIGJsdWUKKyAgICAgICAgICAgICAgICAgICAgKGFy
Z2IgJiAweDAwMDAwMEZGKSA8PCAxNjsgIC8vIE1vdmUgYmx1ZSB0byByZWQKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBnbDo6Q29sb3Ig
cGl4ZWxDb2xvcjsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBhcmVhLmhlaWdodDsgaisr
KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZWEud2lkdGg7
IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZWFkUGl4ZWxDb2xvcihzb3Vy
Y2UsIHRleHR1cmVEZXNjLkZvcm1hdCwgc291cmNlRm9ybWF0LCBpLCBqLCBpbnB1dFBpdGNoLCAm
cGl4ZWxDb2xvcik7CisgICAgICAgICAgICAgICAgd3JpdGVQaXhlbENvbG9yKHBpeGVsQ29sb3Is
IGZvcm1hdCwgdHlwZSwgaSwgaiwgb3V0cHV0UGl0Y2gsIHBpeGVscyk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtRGV2aWNlQ29udGV4dC0+VW5tYXAoc3RhZ2luZ1Rl
eCwgMCk7CisKKyAgICBzdGFnaW5nVGV4LT5SZWxlYXNlKCk7CisgICAgc3RhZ2luZ1RleCA9IE5V
TEw7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6YmxpdFJlbmRlcmJ1ZmZlclJlY3QoY29uc3QgZ2w6
OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRyYXdSZWN0LCBSZW5k
ZXJUYXJnZXQgKnJlYWRSZW5kZXJUYXJnZXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBSZW5kZXJUYXJnZXQgKmRyYXdSZW5kZXJUYXJnZXQsIGJvb2wgd2hvbGVCdWZm
ZXJDb3B5KQoreworICAgIEFTU0VSVChyZWFkUmVjdC53aWR0aCA9PSBkcmF3UmVjdC53aWR0aCAm
JiByZWFkUmVjdC5oZWlnaHQgPT0gZHJhd1JlY3QuaGVpZ2h0KTsKKworICAgIFJlbmRlclRhcmdl
dDExICpkcmF3UmVuZGVyVGFyZ2V0MTEgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdl
dDExKGRyYXdSZW5kZXJUYXJnZXQpOworICAgIGlmICghZHJhd1JlbmRlclRhcmdldCkKKyAgICB7
CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSBkcmF3IHJlbmRlciB0YXJnZXQg
ZnJvbSB0aGUgZHJhdyBmcmFtZWJ1ZmZlci4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisgICAgSUQzRDExVGV4dHVyZTJEICpk
cmF3VGV4dHVyZSA9IGRyYXdSZW5kZXJUYXJnZXQxMS0+Z2V0VGV4dHVyZSgpOworICAgIHVuc2ln
bmVkIGludCBkcmF3U3VicmVzb3VyY2UgPSBkcmF3UmVuZGVyVGFyZ2V0MTEtPmdldFN1YnJlc291
cmNlSW5kZXgoKTsKKworICAgIFJlbmRlclRhcmdldDExICpyZWFkUmVuZGVyVGFyZ2V0MTEgPSBS
ZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKHJlYWRSZW5kZXJUYXJnZXQpOworICAg
IGlmICghcmVhZFJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJl
dHJpZXZlIHRoZSByZWFkIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgcmVhZCBmcmFtZWJ1ZmZlci4i
KTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7Cisg
ICAgfQorCisgICAgSUQzRDExVGV4dHVyZTJEICpyZWFkVGV4dHVyZSA9IE5VTEw7CisgICAgdW5z
aWduZWQgaW50IHJlYWRTdWJyZXNvdXJjZSA9IDA7CisgICAgaWYgKHJlYWRSZW5kZXJUYXJnZXQt
PmdldFNhbXBsZXMoKSA+IDApCisgICAgeworICAgICAgICByZWFkVGV4dHVyZSA9IHJlc29sdmVN
dWx0aXNhbXBsZWRUZXh0dXJlKHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0VGV4dHVyZSgpLCByZWFk
UmVuZGVyVGFyZ2V0MTEtPmdldFN1YnJlc291cmNlSW5kZXgoKSk7CisgICAgICAgIHJlYWRTdWJy
ZXNvdXJjZSA9IDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJlYWRUZXh0dXJl
ID0gcmVhZFJlbmRlclRhcmdldDExLT5nZXRUZXh0dXJlKCk7CisgICAgICAgIHJlYWRUZXh0dXJl
LT5BZGRSZWYoKTsKKyAgICAgICAgcmVhZFN1YnJlc291cmNlID0gcmVhZFJlbmRlclRhcmdldDEx
LT5nZXRTdWJyZXNvdXJjZUluZGV4KCk7CisgICAgfQorCisgICAgaWYgKCFyZWFkVGV4dHVyZSkK
KyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZWFkIHJlbmRlciB0
YXJnZXQgdmlldyBmcm9tIHRoZSByZWFkIHJlbmRlciB0YXJnZXQuIik7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgIH0KKworICAgIEQzRDEx
X0JPWCByZWFkQm94OworICAgIHJlYWRCb3gubGVmdCA9IHJlYWRSZWN0Lng7CisgICAgcmVhZEJv
eC5yaWdodCA9IHJlYWRSZWN0LnggKyByZWFkUmVjdC53aWR0aDsKKyAgICByZWFkQm94LnRvcCA9
IHJlYWRSZWN0Lnk7CisgICAgcmVhZEJveC5ib3R0b20gPSByZWFkUmVjdC55ICsgcmVhZFJlY3Qu
aGVpZ2h0OworICAgIHJlYWRCb3guZnJvbnQgPSAwOworICAgIHJlYWRCb3guYmFjayA9IDE7CisK
KyAgICAvLyBEM0QxMSBuZWVkcyBkZXB0aC1zdGVuY2lsIENvcHlTdWJyZXNvdXJjZVJlZ2lvbnMg
dG8gaGF2ZSBhIE5VTEwgcFNyY0JveAorICAgIC8vIFdlIGFsc28gcmVxdWlyZSBjb21wbGV0ZSBm
cmFtZWJ1ZmZlciBjb3BpZXMgZm9yIGRlcHRoLXN0ZW5jaWwgYmxpdC4KKyAgICBEM0QxMV9CT1gg
KnBTcmNCb3ggPSB3aG9sZUJ1ZmZlckNvcHkgPyBOVUxMIDogJnJlYWRCb3g7CisKKyAgICBtRGV2
aWNlQ29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKGRyYXdUZXh0dXJlLCBkcmF3U3VicmVz
b3VyY2UsIGRyYXdSZWN0LngsIGRyYXdSZWN0LnksIDAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZWFkVGV4dHVyZSwgcmVhZFN1YnJlc291cmNlLCBwU3JjQm94
KTsKKworICAgIFNhZmVSZWxlYXNlKHJlYWRUZXh0dXJlKTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCitJRDNEMTFUZXh0dXJlMkQgKlJlbmRlcmVyMTE6OnJlc29sdmVNdWx0aXNhbXBsZWRUZXh0
dXJlKElEM0QxMVRleHR1cmUyRCAqc291cmNlLCB1bnNpZ25lZCBpbnQgc3VicmVzb3VyY2UpCit7
CisgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4dHVyZURlc2M7CisgICAgc291cmNlLT5HZXRE
ZXNjKCZ0ZXh0dXJlRGVzYyk7CisKKyAgICBpZiAodGV4dHVyZURlc2MuU2FtcGxlRGVzYy5Db3Vu
dCA+IDEpCisgICAgeworICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyByZXNvbHZlRGVzYzsK
KyAgICAgICAgcmVzb2x2ZURlc2MuV2lkdGggPSB0ZXh0dXJlRGVzYy5XaWR0aDsKKyAgICAgICAg
cmVzb2x2ZURlc2MuSGVpZ2h0ID0gdGV4dHVyZURlc2MuSGVpZ2h0OworICAgICAgICByZXNvbHZl
RGVzYy5NaXBMZXZlbHMgPSAxOworICAgICAgICByZXNvbHZlRGVzYy5BcnJheVNpemUgPSAxOwor
ICAgICAgICByZXNvbHZlRGVzYy5Gb3JtYXQgPSB0ZXh0dXJlRGVzYy5Gb3JtYXQ7CisgICAgICAg
IHJlc29sdmVEZXNjLlNhbXBsZURlc2MuQ291bnQgPSAxOworICAgICAgICByZXNvbHZlRGVzYy5T
YW1wbGVEZXNjLlF1YWxpdHkgPSAwOworICAgICAgICByZXNvbHZlRGVzYy5Vc2FnZSA9IHRleHR1
cmVEZXNjLlVzYWdlOworICAgICAgICByZXNvbHZlRGVzYy5CaW5kRmxhZ3MgPSB0ZXh0dXJlRGVz
Yy5CaW5kRmxhZ3M7CisgICAgICAgIHJlc29sdmVEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAg
ICAgICAgcmVzb2x2ZURlc2MuTWlzY0ZsYWdzID0gMDsKKworICAgICAgICBJRDNEMTFUZXh0dXJl
MkQgKnJlc29sdmVUZXh0dXJlID0gTlVMTDsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2
aWNlLT5DcmVhdGVUZXh0dXJlMkQoJnJlc29sdmVEZXNjLCBOVUxMLCAmcmVzb2x2ZVRleHR1cmUp
OworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVS
UigiRmFpbGVkIHRvIGNyZWF0ZSBhIG11bHRpc2FtcGxlIHJlc29sdmUgdGV4dHVyZSwgSFJFU1VM
VDogMHglWC4iLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0K
KworICAgICAgICBtRGV2aWNlQ29udGV4dC0+UmVzb2x2ZVN1YnJlc291cmNlKHJlc29sdmVUZXh0
dXJlLCAwLCBzb3VyY2UsIHN1YnJlc291cmNlLCB0ZXh0dXJlRGVzYy5Gb3JtYXQpOworICAgICAg
ICByZXR1cm4gcmVzb2x2ZVRleHR1cmU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IHNvdXJjZS0+QWRkUmVmKCk7CisgICAgICAgIHJldHVybiBzb3VyY2U7CisgICAgfQorfQorCiti
b29sIFJlbmRlcmVyMTE6OmdldExVSUQoTFVJRCAqYWRhcHRlckx1aWQpIGNvbnN0Cit7CisgICAg
YWRhcHRlckx1aWQtPkhpZ2hQYXJ0ID0gMDsKKyAgICBhZGFwdGVyTHVpZC0+TG93UGFydCA9IDA7
CisKKyAgICBpZiAoIW1EeGdpQWRhcHRlcikKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBEWEdJX0FEQVBURVJfREVTQyBhZGFwdGVyRGVzYzsKKyAgICBpZiAoRkFJ
TEVEKG1EeGdpQWRhcHRlci0+R2V0RGVzYygmYWRhcHRlckRlc2MpKSkKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAqYWRhcHRlckx1aWQgPSBhZGFwdGVyRGVzYy5B
ZGFwdGVyTHVpZDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjEx
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L1JlbmRlcmVyMTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYjY3NjBiOTE3OTI5NWM0Y2Q3ZTEyYmQ4OTVkOTM4
MzI4MzhjYmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgKQEAgLTAsMCArMSwzNTggQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFJlbmRlcmVyMTEuaDogRGVmaW5lcyBhIGJhY2stZW5k
IHNwZWNpZmljIGNsYXNzIGZvciB0aGUgRDNEMTEgcmVuZGVyZXIuCisKKyNpZm5kZWYgTElCR0xF
U1YyX1JFTkRFUkVSX1JFTkRFUkVSMTFfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1JF
TkRFUkVSMTFfSF8KKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIK
KworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0LmgiCisKK25hbWVzcGFjZSBnbAoreworY2xhc3Mg
UmVuZGVyYnVmZmVyOworfQorCituYW1lc3BhY2UgcngKK3sKKworY2xhc3MgVmVydGV4RGF0YU1h
bmFnZXI7CitjbGFzcyBJbmRleERhdGFNYW5hZ2VyOworY2xhc3MgU3RyZWFtaW5nSW5kZXhCdWZm
ZXJJbnRlcmZhY2U7CisKK2VudW0KK3sKKyAgICBNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SU19E
M0QxMSA9IDEwMjQsCisgICAgTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SU19EM0QxMSA9IDEw
MjQKK307CisKK2NsYXNzIFJlbmRlcmVyMTEgOiBwdWJsaWMgUmVuZGVyZXIKK3sKKyAgcHVibGlj
OgorICAgIFJlbmRlcmVyMTEoZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBIREMgaERjKTsKKyAgICB2
aXJ0dWFsIH5SZW5kZXJlcjExKCk7CisKKyAgICBzdGF0aWMgUmVuZGVyZXIxMSAqbWFrZVJlbmRl
cmVyMTEoUmVuZGVyZXIgKnJlbmRlcmVyKTsKKworICAgIHZpcnR1YWwgRUdMaW50IGluaXRpYWxp
emUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVzZXREZXZpY2UoKTsKKworICAgIHZpcnR1YWwgaW50
IGdlbmVyYXRlQ29uZmlncyhDb25maWdEZXNjICoqY29uZmlnRGVzY0xpc3QpOworICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVDb25maWdzKENvbmZpZ0Rlc2MgKmNvbmZpZ0Rlc2NMaXN0KTsKKworICAg
IHZpcnR1YWwgdm9pZCBzeW5jKGJvb2wgYmxvY2spOworCisgICAgdmlydHVhbCBTd2FwQ2hhaW4g
KmNyZWF0ZVN3YXBDaGFpbihIV05EIHdpbmRvdywgSEFORExFIHNoYXJlSGFuZGxlLCBHTGVudW0g
YmFja0J1ZmZlckZvcm1hdCwgR0xlbnVtIGRlcHRoQnVmZmVyRm9ybWF0KTsKKworICAgIHZpcnR1
YWwgdm9pZCBzZXRTYW1wbGVyU3RhdGUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRleCwg
Y29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmc2FtcGxlcik7CisgICAgdmlydHVhbCB2b2lkIHNldFRl
eHR1cmUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRleCwgZ2w6OlRleHR1cmUgKnRleHR1
cmUpOworCisgICAgdmlydHVhbCB2b2lkIHNldFJhc3Rlcml6ZXJTdGF0ZShjb25zdCBnbDo6UmFz
dGVyaXplclN0YXRlICZyYXN0ZXJTdGF0ZSk7CisgICAgdmlydHVhbCB2b2lkIHNldEJsZW5kU3Rh
dGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJs
ZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xvciAmYmxlbmRDb2xvciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlTWFzayk7CisgICAgdmlydHVhbCB2b2lk
IHNldERlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmZGVwdGhT
dGVuY2lsU3RhdGUsIGludCBzdGVuY2lsUmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgc3RlbmNpbEJhY2tSZWYsIGJvb2wgZnJvbnRGYWNlQ0NXKTsKKworICAg
IHZpcnR1YWwgdm9pZCBzZXRTY2lzc29yUmVjdGFuZ2xlKGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNj
aXNzb3IsIGJvb2wgZW5hYmxlZCk7CisgICAgdmlydHVhbCBib29sIHNldFZpZXdwb3J0KGNvbnN0
IGdsOjpSZWN0YW5nbGUgJnZpZXdwb3J0LCBmbG9hdCB6TmVhciwgZmxvYXQgekZhciwgR0xlbnVt
IGRyYXdNb2RlLCBHTGVudW0gZnJvbnRGYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGlnbm9yZVZpZXdwb3J0KTsKKworICAgIHZpcnR1YWwgYm9vbCBhcHBseVByaW1pdGl2
ZVR5cGUoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQpOworICAgIHZpcnR1YWwgYm9vbCBhcHBs
eVJlbmRlclRhcmdldChnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKTsKKyAgICB2aXJ0dWFs
IHZvaWQgYXBwbHlTaGFkZXJzKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHlVbmlmb3JtcyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSwgZ2w6OlVuaWZvcm1BcnJheSAqdW5pZm9ybUFycmF5KTsKKyAgICB2aXJ0dWFsIEdMZW51
bSBhcHBseVZlcnRleEJ1ZmZlcihnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6
OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0ZXhBdHRyaWJ1dGVzW10sIEdMaW50IGZpcnN0LCBHTHNpemVp
IGNvdW50LCBHTHNpemVpIGluc3RhbmNlcyk7CisgICAgdmlydHVhbCBHTGVudW0gYXBwbHlJbmRl
eEJ1ZmZlcihjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1
ZmZlciwgR0xzaXplaSBjb3VudCwgR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVk
SW5kZXhEYXRhICppbmRleEluZm8pOworCisgICAgdmlydHVhbCB2b2lkIGRyYXdBcnJheXMoR0xl
bnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlw
ZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIs
IGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMp
OworCisgICAgdmlydHVhbCB2b2lkIGNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNs
ZWFyUGFyYW1zLCBnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKTsKKworICAgIHZpcnR1YWwg
dm9pZCBtYXJrQWxsU3RhdGVEaXJ0eSgpOworCisgICAgLy8gbG9zdCBkZXZpY2UKKyAgICB2b2lk
IG5vdGlmeURldmljZUxvc3QoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNEZXZpY2VMb3N0KCk7Cisg
ICAgdmlydHVhbCBib29sIHRlc3REZXZpY2VMb3N0KGJvb2wgbm90aWZ5KTsKKyAgICB2aXJ0dWFs
IGJvb2wgdGVzdERldmljZVJlc2V0dGFibGUoKTsKKworICAgIC8vIFJlbmRlcmVyIGNhcGFiaWxp
dGllcworICAgIHZpcnR1YWwgRFdPUkQgZ2V0QWRhcHRlclZlbmRvcigpIGNvbnN0OworICAgIHZp
cnR1YWwgc3RkOjpzdHJpbmcgZ2V0UmVuZGVyZXJEZXNjcmlwdGlvbigpIGNvbnN0OworICAgIHZp
cnR1YWwgR1VJRCBnZXRBZGFwdGVySWRlbnRpZmllcigpIGNvbnN0OworCisgICAgdmlydHVhbCBi
b29sIGdldEJHUkFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRE
WFQxVGV4dHVyZVN1cHBvcnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUM1RleHR1cmVTdXBw
b3J0KCk7CisgICAgdmlydHVhbCBib29sIGdldERYVDVUZXh0dXJlU3VwcG9ydCgpOworICAgIHZp
cnR1YWwgYm9vbCBnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpOworICAgIHZpcnR1YWwgYm9vbCBnZXRG
bG9hdDMyVGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKTsK
KyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmlu
ZywgYm9vbCAqcmVuZGVyYWJsZSk7CisgICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZVRleHR1
cmVTdXBwb3J0KCk7CisgICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1
cHBvcnQoKTsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhUZXh0dXJlSW1h
Z2VVbml0cygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heENvbWJpbmVk
VGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRS
ZXNlcnZlZFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25l
ZCBpbnQgZ2V0UmVzZXJ2ZWRGcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgY29uc3Q7CisgICAgdmly
dHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgY29u
c3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmFyeWluZ1ZlY3RvcnMoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGJvb2wgZ2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0
VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9h
dCBnZXRUZXh0dXJlTWF4QW5pc290cm9weSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRT
aGFyZUhhbmRsZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVyaXZhdGl2
ZUluc3RydWN0aW9uU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRQb3N0U3Vi
QnVmZmVyU3VwcG9ydCgpIGNvbnN0OworCisgICAgdmlydHVhbCBpbnQgZ2V0TWFqb3JTaGFkZXJN
b2RlbCgpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgZ2V0TWF4UG9pbnRTaXplKCkgY29uc3Q7
CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4Vmlld3BvcnREaW1lbnNpb24oKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGludCBnZXRNYXhUZXh0dXJlV2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBn
ZXRNYXhUZXh0dXJlSGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldDMyQml0SW5k
ZXhTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWluU3dhcEludGVydmFsKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4U3dhcEludGVydmFsKCkgY29uc3Q7CisKKyAg
ICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpIGNvbnN0OworICAgIGlu
dCBnZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhEWEdJX0ZPUk1BVCBmb3JtYXQsIHVuc2lnbmVk
IGludCByZXF1ZXN0ZWQpIGNvbnN0OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4
UmVuZGVyVGFyZ2V0cygpIGNvbnN0OworCisgICAgLy8gUGl4ZWwgb3BlcmF0aW9ucworICAgIHZp
cnR1YWwgYm9vbCBjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAq
ZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc291cmNlKTsKKyAgICB2aXJ0dWFsIGJv
b2wgY29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqZGVzdCwg
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzb3VyY2UpOworCisgICAgdmlydHVhbCBib29s
IGNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFu
Z2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlMkQgKnN0b3JhZ2UsIEdMaW50IGxldmVsKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdl
KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJj
ZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpz
dG9yYWdlLCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCk7CisKKyAgICBib29sIGNvcHlUZXh0
dXJlKElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc291cmNlLCBjb25zdCBnbDo6UmVjdGFuZ2xl
ICZzb3VyY2VBcmVhLCB1bnNpZ25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3Vy
Y2VIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpk
ZXN0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkZXN0QXJlYSwgdW5zaWduZWQgaW50IGRlc3RXaWR0
aCwgdW5zaWduZWQgaW50IGRlc3RIZWlnaHQsIEdMZW51bSBkZXN0Rm9ybWF0KTsKKworICAgIHZp
cnR1YWwgYm9vbCBibGl0UmVjdChnbDo6RnJhbWVidWZmZXIgKnJlYWRUYXJnZXQsIGNvbnN0IGds
OjpSZWN0YW5nbGUgJnJlYWRSZWN0LCBnbDo6RnJhbWVidWZmZXIgKmRyYXdUYXJnZXQsIGNvbnN0
IGdsOjpSZWN0YW5nbGUgJmRyYXdSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERlcHRoU3RlbmNpbCk7CisgICAgdmlydHVhbCB2
b2lkIHJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2gs
IGJvb2wgcGFja1JldmVyc2VSb3dPcmRlciwgR0xpbnQgcGFja0FsaWdubWVudCwgdm9pZCogcGl4
ZWxzKTsKKworICAgIC8vIFJlbmRlclRhcmdldCBjcmVhdGlvbgorICAgIHZpcnR1YWwgUmVuZGVy
VGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJnZXQoU3dhcENoYWluICpzd2FwQ2hhaW4sIGJvb2wgZGVw
dGgpOworICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJnZXQoaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMsIGJvb2wgZGVw
dGgpOworCisgICAgLy8gU2hhZGVyIG9wZXJhdGlvbnMKKyAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1
dGFibGUgKmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3Ro
LCByeDo6U2hhZGVyVHlwZSB0eXBlKTsKKyAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1dGFibGUgKmNv
bXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRl
ckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91bmQp
OworCisgICAgLy8gSW1hZ2Ugb3BlcmF0aW9ucworICAgIHZpcnR1YWwgSW1hZ2UgKmNyZWF0ZUlt
YWdlKCk7CisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKEltYWdlICpkZXN0LCBJbWFn
ZSAqc291cmNlKTsKKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3Rv
cmFnZTJEKFN3YXBDaGFpbiAqc3dhcENoYWluKTsKKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdl
ICpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVT
dG9yYWdlQ3ViZShpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2Fn
ZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKTsKKworICAgIC8vIEJ1ZmZlciBjcmVh
dGlvbgorICAgIHZpcnR1YWwgVmVydGV4QnVmZmVyICpjcmVhdGVWZXJ0ZXhCdWZmZXIoKTsKKyAg
ICB2aXJ0dWFsIEluZGV4QnVmZmVyICpjcmVhdGVJbmRleEJ1ZmZlcigpOworICAgIHZpcnR1YWwg
QnVmZmVyU3RvcmFnZSAqY3JlYXRlQnVmZmVyU3RvcmFnZSgpOworCisgICAgLy8gUXVlcnkgYW5k
IEZlbmNlIGNyZWF0aW9uCisgICAgdmlydHVhbCBRdWVyeUltcGwgKmNyZWF0ZVF1ZXJ5KEdMZW51
bSB0eXBlKTsKKyAgICB2aXJ0dWFsIEZlbmNlSW1wbCAqY3JlYXRlRmVuY2UoKTsKKworICAgIC8v
IEQzRDExLXJlbmRlcmVyIHNwZWNpZmljIG1ldGhvZHMKKyAgICBJRDNEMTFEZXZpY2UgKmdldERl
dmljZSgpIHsgcmV0dXJuIG1EZXZpY2U7IH0KKyAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpnZXRE
ZXZpY2VDb250ZXh0KCkgeyByZXR1cm4gbURldmljZUNvbnRleHQ7IH07CisgICAgSURYR0lGYWN0
b3J5ICpnZXREeGdpRmFjdG9yeSgpIHsgcmV0dXJuIG1EeGdpRmFjdG9yeTsgfTsKKworICAgIGJv
b2wgZ2V0UmVuZGVyVGFyZ2V0UmVzb3VyY2UoZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIs
IHVuc2lnbmVkIGludCAqc3VicmVzb3VyY2VJbmRleCwgSUQzRDExVGV4dHVyZTJEICoqcmVzb3Vy
Y2UpOworICAgIHZvaWQgdW5hcHBseVJlbmRlclRhcmdldHMoKTsKKyAgICB2b2lkIHNldE9uZVRp
bWVSZW5kZXJUYXJnZXQoSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqcmVuZGVyVGFyZ2V0Vmlldyk7
CisKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0TFVJRChMVUlEICphZGFwdGVyTHVpZCkgY29uc3Q7CisK
KyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyZXIxMSk7CisK
KyAgICB2b2lkIGRyYXdMaW5lTG9vcChHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3Qg
R0x2b2lkICppbmRpY2VzLCBpbnQgbWluSW5kZXgsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1
ZmZlcik7CisgICAgdm9pZCBkcmF3VHJpYW5nbGVGYW4oR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5
cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgaW50IG1pbkluZGV4LCBnbDo6QnVmZmVyICplbGVt
ZW50QXJyYXlCdWZmZXIsIGludCBpbnN0YW5jZXMpOworCisgICAgdm9pZCByZWFkVGV4dHVyZURh
dGEoSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCB1bnNpZ25lZCBpbnQgc3ViUmVzb3VyY2UsIGNv
bnN0IGdsOjpSZWN0YW5nbGUgJmFyZWEsCisgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVt
IHNvdXJjZUZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgb3V0cHV0
UGl0Y2gsIGJvb2wgcGFja1JldmVyc2VSb3dPcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBHTGludCBwYWNrQWxpZ25tZW50LCB2b2lkICpwaXhlbHMpOworCisgICAgdm9pZCBtYXNrZWRD
bGVhcihjb25zdCBnbDo6Q2xlYXJQYXJhbWV0ZXJzICZjbGVhclBhcmFtcywgZ2w6OkZyYW1lYnVm
ZmVyICpmcmFtZUJ1ZmZlcik7CisgICAgcng6OlJhbmdlIGdldFZpZXdwb3J0Qm91bmRzKCkgY29u
c3Q7CisKKyAgICBib29sIGJsaXRSZW5kZXJidWZmZXJSZWN0KGNvbnN0IGdsOjpSZWN0YW5nbGUg
JnJlYWRSZWN0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkcmF3UmVjdCwgUmVuZGVyVGFyZ2V0ICpy
ZWFkUmVuZGVyVGFyZ2V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclRh
cmdldCAqZHJhd1JlbmRlclRhcmdldCwgYm9vbCB3aG9sZUJ1ZmZlckNvcHkpOworICAgIElEM0Qx
MVRleHR1cmUyRCAqcmVzb2x2ZU11bHRpc2FtcGxlZFRleHR1cmUoSUQzRDExVGV4dHVyZTJEICpz
b3VyY2UsIHVuc2lnbmVkIGludCBzdWJyZXNvdXJjZSk7CisKKyAgICBITU9EVUxFIG1EM2QxMU1v
ZHVsZTsKKyAgICBITU9EVUxFIG1EeGdpTW9kdWxlOworICAgIEhEQyBtRGM7CisKKyAgICBib29s
IG1EZXZpY2VMb3N0OworCisgICAgdm9pZCBpbml0aWFsaXplRGV2aWNlKCk7CisgICAgdm9pZCBy
ZWxlYXNlRGV2aWNlUmVzb3VyY2VzKCk7CisgICAgaW50IGdldE1pbm9yU2hhZGVyTW9kZWwoKSBj
b25zdDsKKyAgICB2b2lkIHJlbGVhc2UoKTsKKworICAgIFJlbmRlclN0YXRlQ2FjaGUgbVN0YXRl
Q2FjaGU7CisKKyAgICAvLyBTdXBwb3J0IGZsYWdzCisgICAgYm9vbCBtRmxvYXQxNlRleHR1cmVT
dXBwb3J0OworICAgIGJvb2wgbUZsb2F0MTZGaWx0ZXJTdXBwb3J0OworICAgIGJvb2wgbUZsb2F0
MTZSZW5kZXJTdXBwb3J0OworCisgICAgYm9vbCBtRmxvYXQzMlRleHR1cmVTdXBwb3J0OworICAg
IGJvb2wgbUZsb2F0MzJGaWx0ZXJTdXBwb3J0OworICAgIGJvb2wgbUZsb2F0MzJSZW5kZXJTdXBw
b3J0OworCisgICAgYm9vbCBtRFhUMVRleHR1cmVTdXBwb3J0OworICAgIGJvb2wgbURYVDNUZXh0
dXJlU3VwcG9ydDsKKyAgICBib29sIG1EWFQ1VGV4dHVyZVN1cHBvcnQ7CisKKyAgICBib29sIG1E
ZXB0aFRleHR1cmVTdXBwb3J0OworCisgICAgLy8gTXVsdGlzYW1wbGUgZm9ybWF0IHN1cHBvcnQK
KyAgICBzdHJ1Y3QgTXVsdGlzYW1wbGVTdXBwb3J0SW5mbworICAgIHsKKyAgICAgICAgdW5zaWdu
ZWQgaW50IHF1YWxpdHlMZXZlbHNbRDNEMTFfTUFYX01VTFRJU0FNUExFX1NBTVBMRV9DT1VOVF07
CisgICAgfTsKKworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPERYR0lfRk9STUFULCBN
dWx0aXNhbXBsZVN1cHBvcnRJbmZvLCBzdGQ6Omhhc2g8aW50PiA+IE11bHRpc2FtcGxlU3VwcG9y
dE1hcDsKKyAgICBNdWx0aXNhbXBsZVN1cHBvcnRNYXAgbU11bHRpc2FtcGxlU3VwcG9ydE1hcDsK
KworICAgIHVuc2lnbmVkIGludCBtTWF4U3VwcG9ydGVkU2FtcGxlczsKKworICAgIC8vIGN1cnJl
bnQgcmVuZGVyIHRhcmdldCBzdGF0ZXMKKyAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRSZW5kZXJU
YXJnZXRTZXJpYWxzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTXTsKKyAgICB1
bnNpZ25lZCBpbnQgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbDsKKyAgICB1bnNpZ25lZCBpbnQg
bUFwcGxpZWRTdGVuY2lsYnVmZmVyU2VyaWFsOworICAgIGJvb2wgbURlcHRoU3RlbmNpbEluaXRp
YWxpemVkOworICAgIGJvb2wgbVJlbmRlclRhcmdldERlc2NJbml0aWFsaXplZDsKKyAgICByeDo6
UmVuZGVyVGFyZ2V0OjpEZXNjIG1SZW5kZXJUYXJnZXREZXNjOworICAgIHVuc2lnbmVkIGludCBt
Q3VyRGVwdGhTaXplOworICAgIHVuc2lnbmVkIGludCBtQ3VyU3RlbmNpbFNpemU7CisKKyAgICAv
LyBDdXJyZW50bHkgYXBwbGllZCBzYW1wbGVyIHN0YXRlcworICAgIGJvb2wgbUZvcmNlU2V0VmVy
dGV4U2FtcGxlclN0YXRlc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lN
QUdFX1VOSVRTXTsKKyAgICBnbDo6U2FtcGxlclN0YXRlIG1DdXJWZXJ0ZXhTYW1wbGVyU3RhdGVz
W2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOworCisg
ICAgYm9vbCBtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0ZXNbZ2w6Ok1BWF9URVhUVVJFX0lNQUdF
X1VOSVRTXTsKKyAgICBnbDo6U2FtcGxlclN0YXRlIG1DdXJQaXhlbFNhbXBsZXJTdGF0ZXNbZ2w6
Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKKworICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIHRl
eHR1cmVzCisgICAgdW5zaWduZWQgaW50IG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1tnbDo6SU1Q
TEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKKyAgICB1bnNpZ25l
ZCBpbnQgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRT
XTsKKworICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIGJsZW5kIHN0YXRlCisgICAgYm9vbCBtRm9y
Y2VTZXRCbGVuZFN0YXRlOworICAgIGdsOjpCbGVuZFN0YXRlIG1DdXJCbGVuZFN0YXRlOworICAg
IGdsOjpDb2xvciBtQ3VyQmxlbmRDb2xvcjsKKyAgICB1bnNpZ25lZCBpbnQgbUN1clNhbXBsZU1h
c2s7CisKKyAgICAvLyBDdXJyZW50bHkgYXBwbGllZCByYXN0ZXJpemVyIHN0YXRlCisgICAgYm9v
bCBtRm9yY2VTZXRSYXN0ZXJTdGF0ZTsKKyAgICBnbDo6UmFzdGVyaXplclN0YXRlIG1DdXJSYXN0
ZXJTdGF0ZTsKKworICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIGRlcHRoIHN0ZW5jaWwgc3RhdGUK
KyAgICBib29sIG1Gb3JjZVNldERlcHRoU3RlbmNpbFN0YXRlOworICAgIGdsOjpEZXB0aFN0ZW5j
aWxTdGF0ZSBtQ3VyRGVwdGhTdGVuY2lsU3RhdGU7CisgICAgaW50IG1DdXJTdGVuY2lsUmVmOwor
ICAgIGludCBtQ3VyU3RlbmNpbEJhY2tSZWY7CisKKyAgICAvLyBDdXJyZW50bHkgYXBwbGllZCBz
Y2lzc29yIHJlY3RhbmdsZQorICAgIGJvb2wgbUZvcmNlU2V0U2Npc3NvcjsKKyAgICBib29sIG1T
Y2lzc29yRW5hYmxlZDsKKyAgICBnbDo6UmVjdGFuZ2xlIG1DdXJTY2lzc29yOworCisgICAgLy8g
Q3VycmVudGx5IGFwcGxpZWQgdmlld3BvcnQKKyAgICBib29sIG1Gb3JjZVNldFZpZXdwb3J0Owor
ICAgIGdsOjpSZWN0YW5nbGUgbUN1clZpZXdwb3J0OworICAgIGZsb2F0IG1DdXJOZWFyOworICAg
IGZsb2F0IG1DdXJGYXI7CisKKyAgICAvLyBDdXJyZW50bHkgYXBwbGllZCBwcmltaXRpdmUgdG9w
b2xvZ3kKKyAgICBEM0QxMV9QUklNSVRJVkVfVE9QT0xPR1kgbUN1cnJlbnRQcmltaXRpdmVUb3Bv
bG9neTsKKworICAgIHVuc2lnbmVkIGludCBtQXBwbGllZElCU2VyaWFsOworICAgIHVuc2lnbmVk
IGludCBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbDsKKyAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRJ
Qk9mZnNldDsKKworICAgIHVuc2lnbmVkIGludCBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWw7
CisgICAgYm9vbCBtSXNHZW9tZXRyeVNoYWRlckFjdGl2ZTsKKworICAgIGR4X1ZlcnRleENvbnN0
YW50cyBtVmVydGV4Q29uc3RhbnRzOworICAgIGR4X1ZlcnRleENvbnN0YW50cyBtQXBwbGllZFZl
cnRleENvbnN0YW50czsKKyAgICBJRDNEMTFCdWZmZXIgKm1Ecml2ZXJDb25zdGFudEJ1ZmZlclZT
OworICAgIElEM0QxMUJ1ZmZlciAqbUN1cnJlbnRWZXJ0ZXhDb25zdGFudEJ1ZmZlcjsKKworICAg
IGR4X1BpeGVsQ29uc3RhbnRzIG1QaXhlbENvbnN0YW50czsKKyAgICBkeF9QaXhlbENvbnN0YW50
cyBtQXBwbGllZFBpeGVsQ29uc3RhbnRzOworICAgIElEM0QxMUJ1ZmZlciAqbURyaXZlckNvbnN0
YW50QnVmZmVyUFM7CisgICAgSUQzRDExQnVmZmVyICptQ3VycmVudFBpeGVsQ29uc3RhbnRCdWZm
ZXI7CisKKyAgICBJRDNEMTFCdWZmZXIgKm1DdXJyZW50R2VvbWV0cnlDb25zdGFudEJ1ZmZlcjsK
KworICAgIC8vIFZlcnRleCwgaW5kZXggYW5kIGlucHV0IGxheW91dHMKKyAgICBWZXJ0ZXhEYXRh
TWFuYWdlciAqbVZlcnRleERhdGFNYW5hZ2VyOworICAgIEluZGV4RGF0YU1hbmFnZXIgKm1JbmRl
eERhdGFNYW5hZ2VyOworICAgIElucHV0TGF5b3V0Q2FjaGUgbUlucHV0TGF5b3V0Q2FjaGU7CisK
KyAgICBTdHJlYW1pbmdJbmRleEJ1ZmZlckludGVyZmFjZSAqbUxpbmVMb29wSUI7CisgICAgU3Ry
ZWFtaW5nSW5kZXhCdWZmZXJJbnRlcmZhY2UgKm1UcmlhbmdsZUZhbklCOworCisgICAgLy8gVGV4
dHVyZSBjb3B5IHJlc291cmNlcworICAgIGJvb2wgbUNvcHlSZXNvdXJjZXNJbml0aWFsaXplZDsK
KyAgICBJRDNEMTFCdWZmZXIgKm1Db3B5VkI7CisgICAgSUQzRDExU2FtcGxlclN0YXRlICptQ29w
eVNhbXBsZXI7CisgICAgSUQzRDExSW5wdXRMYXlvdXQgKm1Db3B5SUw7CisgICAgSUQzRDExVmVy
dGV4U2hhZGVyICptQ29weVZTOworICAgIElEM0QxMVBpeGVsU2hhZGVyICptQ29weVJHQkFQUzsK
KyAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUNvcHlSR0JQUzsKKyAgICBJRDNEMTFQaXhlbFNoYWRl
ciAqbUNvcHlMdW1QUzsKKyAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUNvcHlMdW1BbHBoYVBTOwor
CisgICAgLy8gTWFza2VkIGNsZWFyIHJlc291cmNlcworICAgIGJvb2wgbUNsZWFyUmVzb3VyY2Vz
SW5pdGlhbGl6ZWQ7CisgICAgSUQzRDExQnVmZmVyICptQ2xlYXJWQjsKKyAgICBJRDNEMTFJbnB1
dExheW91dCAqbUNsZWFySUw7CisgICAgSUQzRDExVmVydGV4U2hhZGVyICptQ2xlYXJWUzsKKyAg
ICBJRDNEMTFQaXhlbFNoYWRlciAqbUNsZWFyU2luZ2xlUFM7CisgICAgSUQzRDExUGl4ZWxTaGFk
ZXIgKm1DbGVhck11bHRpcGxlUFM7CisgICAgSUQzRDExUmFzdGVyaXplclN0YXRlICptQ2xlYXJT
Y2lzc29yUlM7CisgICAgSUQzRDExUmFzdGVyaXplclN0YXRlICptQ2xlYXJOb1NjaXNzb3JSUzsK
KworICAgIC8vIFN5bmMgcXVlcnkKKyAgICBJRDNEMTFRdWVyeSAqbVN5bmNRdWVyeTsKKworICAg
IElEM0QxMURldmljZSAqbURldmljZTsKKyAgICBEM0RfRkVBVFVSRV9MRVZFTCBtRmVhdHVyZUxl
dmVsOworICAgIElEM0QxMURldmljZUNvbnRleHQgKm1EZXZpY2VDb250ZXh0OworICAgIElEWEdJ
QWRhcHRlciAqbUR4Z2lBZGFwdGVyOworICAgIERYR0lfQURBUFRFUl9ERVNDIG1BZGFwdGVyRGVz
Y3JpcHRpb247CisgICAgY2hhciBtRGVzY3JpcHRpb25bMTI4XTsKKyAgICBJRFhHSUZhY3Rvcnkg
Km1EeGdpRmFjdG9yeTsKKworICAgIC8vIENhY2hlZCBkZXZpY2UgY2FwcworICAgIGJvb2wgbUJH
UkFUZXh0dXJlU3VwcG9ydDsKK307CisKK30KKyNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJf
UkVOREVSRVIxMV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRh
YmxlMTEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJlNDU1ZTNhZjVlM2IzNWYwMDhmMDE5MDgxZGFhNmUyNzA3
ZjIwNmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1dGFibGUxMS5jcHAKQEAgLTAsMCArMSwx
MDkgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAx
Mi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8g
U2hhZGVyRXhlY3V0YWJsZTExLmNwcDogSW1wbGVtZW50cyBhIEQzRDExLXNwZWNpZmljIGNsYXNz
IHRvIGNvbnRhaW4gc2hhZGVyCisvLyBleGVjdXRhYmxlIGltcGxlbWVudGF0aW9uIGRldGFpbHMu
CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU2hhZGVyRXhlY3V0YWJsZTEx
LmgiCisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKworbmFtZXNwYWNlIHJ4Cit7CisKK1No
YWRlckV4ZWN1dGFibGUxMTo6U2hhZGVyRXhlY3V0YWJsZTExKGNvbnN0IHZvaWQgKmZ1bmN0aW9u
LCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFQaXhlbFNoYWRlciAqZXhlY3V0YWJsZSkKKyAgICA6IFNo
YWRlckV4ZWN1dGFibGUoZnVuY3Rpb24sIGxlbmd0aCkKK3sKKyAgICBtUGl4ZWxFeGVjdXRhYmxl
ID0gZXhlY3V0YWJsZTsKKyAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7CisgICAgbUdlb21l
dHJ5RXhlY3V0YWJsZSA9IE5VTEw7CisKKyAgICBtQ29uc3RhbnRCdWZmZXIgPSBOVUxMOworfQor
CitTaGFkZXJFeGVjdXRhYmxlMTE6OlNoYWRlckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5j
dGlvbiwgc2l6ZV90IGxlbmd0aCwgSUQzRDExVmVydGV4U2hhZGVyICpleGVjdXRhYmxlKQorICAg
IDogU2hhZGVyRXhlY3V0YWJsZShmdW5jdGlvbiwgbGVuZ3RoKQoreworICAgIG1WZXJ0ZXhFeGVj
dXRhYmxlID0gZXhlY3V0YWJsZTsKKyAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKKyAgICBt
R2VvbWV0cnlFeGVjdXRhYmxlID0gTlVMTDsKKworICAgIG1Db25zdGFudEJ1ZmZlciA9IE5VTEw7
Cit9CisKK1NoYWRlckV4ZWN1dGFibGUxMTo6U2hhZGVyRXhlY3V0YWJsZTExKGNvbnN0IHZvaWQg
KmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZXhlY3V0YWJs
ZSkKKyAgICA6IFNoYWRlckV4ZWN1dGFibGUoZnVuY3Rpb24sIGxlbmd0aCkKK3sKKyAgICBtR2Vv
bWV0cnlFeGVjdXRhYmxlID0gZXhlY3V0YWJsZTsKKyAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5V
TEw7CisgICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7CisKKyAgICBtQ29uc3RhbnRCdWZmZXIg
PSBOVUxMOworfQorCitTaGFkZXJFeGVjdXRhYmxlMTE6On5TaGFkZXJFeGVjdXRhYmxlMTEoKQor
eworICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSkKKyAgICB7CisgICAgICAgIG1WZXJ0ZXhFeGVj
dXRhYmxlLT5SZWxlYXNlKCk7CisgICAgfQorICAgIGlmIChtUGl4ZWxFeGVjdXRhYmxlKQorICAg
IHsKKyAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFzZSgpOworICAgIH0KKyAgICBpZiAo
bUdlb21ldHJ5RXhlY3V0YWJsZSkKKyAgICB7CisgICAgICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUt
PlJlbGVhc2UoKTsKKyAgICB9CisgICAgCisgICAgaWYgKG1Db25zdGFudEJ1ZmZlcikKKyAgICB7
CisgICAgICAgIG1Db25zdGFudEJ1ZmZlci0+UmVsZWFzZSgpOworICAgIH0KK30KKworU2hhZGVy
RXhlY3V0YWJsZTExICpTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VTaGFkZXJFeGVjdXRhYmxlMTEo
U2hhZGVyRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSkKK3sKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNf
VFlQRShTaGFkZXJFeGVjdXRhYmxlMTEqLCBleGVjdXRhYmxlKSk7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFNoYWRlckV4ZWN1dGFibGUxMSo+KGV4ZWN1dGFibGUpOworfQorCitJRDNEMTFWZXJ0
ZXhTaGFkZXIgKlNoYWRlckV4ZWN1dGFibGUxMTo6Z2V0VmVydGV4U2hhZGVyKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbVZlcnRleEV4ZWN1dGFibGU7Cit9CisKK0lEM0QxMVBpeGVsU2hhZGVyICpT
aGFkZXJFeGVjdXRhYmxlMTE6OmdldFBpeGVsU2hhZGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bVBpeGVsRXhlY3V0YWJsZTsKK30KKworSUQzRDExR2VvbWV0cnlTaGFkZXIgKlNoYWRlckV4ZWN1
dGFibGUxMTo6Z2V0R2VvbWV0cnlTaGFkZXIoKSBjb25zdAoreworICAgIHJldHVybiBtR2VvbWV0
cnlFeGVjdXRhYmxlOworfQorCitJRDNEMTFCdWZmZXIgKlNoYWRlckV4ZWN1dGFibGUxMTo6Z2V0
Q29uc3RhbnRCdWZmZXIoSUQzRDExRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGludCByZWdpc3Rl
ckNvdW50KQoreworICAgIGlmICghbUNvbnN0YW50QnVmZmVyICYmIHJlZ2lzdGVyQ291bnQgPiAw
KQorICAgIHsKKyAgICAgICAgRDNEMTFfQlVGRkVSX0RFU0MgY29uc3RhbnRCdWZmZXJEZXNjcmlw
dGlvbiA9IHswfTsKKyAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5CeXRlV2lkdGgg
PSByZWdpc3RlckNvdW50ICogc2l6ZW9mKGZsb2F0WzRdKTsKKyAgICAgICAgY29uc3RhbnRCdWZm
ZXJEZXNjcmlwdGlvbi5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZTkFNSUM7CisgICAgICAgIGNvbnN0
YW50QnVmZmVyRGVzY3JpcHRpb24uQmluZEZsYWdzID0gRDNEMTFfQklORF9DT05TVEFOVF9CVUZG
RVI7CisgICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uQ1BVQWNjZXNzRmxhZ3MgPSBE
M0QxMV9DUFVfQUNDRVNTX1dSSVRFOworICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9u
Lk1pc2NGbGFncyA9IDA7CisgICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uU3RydWN0
dXJlQnl0ZVN0cmlkZSA9IDA7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZUJ1ZmZlcigmY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbiwgTlVMTCwgJm1Db25zdGFudEJ1
ZmZlcik7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgfQorCisgICAg
cmV0dXJuIG1Db25zdGFudEJ1ZmZlcjsKK30KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvU2hhZGVyRXhlY3V0YWJsZTExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1dGFibGUxMS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmM2ZWMxY2Y3ZDJjZGFlYmE0NGQ0YTViODU1NzlkMTgyOTdhNDFmYWQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL1NoYWRlckV4ZWN1dGFibGUxMS5oCkBAIC0wLDAgKzEsNDcgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKy8vIFNoYWRlckV4ZWN1dGFibGUxMS5oOiBEZWZpbmVzIGEgRDNEMTEtc3BlY2lm
aWMgY2xhc3MgdG8gY29udGFpbiBzaGFkZXIKKy8vIGV4ZWN1dGFibGUgaW1wbGVtZW50YXRpb24g
ZGV0YWlscy4KKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfU0hBREVSRVhFQ1VUQUJMRTEx
X0hfCisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9TSEFERVJFWEVDVVRBQkxFMTFfSF8KKwor
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlLmgiCisKK25hbWVz
cGFjZSByeAoreworCitjbGFzcyBTaGFkZXJFeGVjdXRhYmxlMTEgOiBwdWJsaWMgU2hhZGVyRXhl
Y3V0YWJsZQoreworICBwdWJsaWM6CisgICAgU2hhZGVyRXhlY3V0YWJsZTExKGNvbnN0IHZvaWQg
KmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFQaXhlbFNoYWRlciAqZXhlY3V0YWJsZSk7
CisgICAgU2hhZGVyRXhlY3V0YWJsZTExKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVu
Z3RoLCBJRDNEMTFWZXJ0ZXhTaGFkZXIgKmV4ZWN1dGFibGUpOworICAgIFNoYWRlckV4ZWN1dGFi
bGUxMShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSUQzRDExR2VvbWV0cnlT
aGFkZXIgKmV4ZWN1dGFibGUpOworCisgICAgdmlydHVhbCB+U2hhZGVyRXhlY3V0YWJsZTExKCk7
CisKKyAgICBzdGF0aWMgU2hhZGVyRXhlY3V0YWJsZTExICptYWtlU2hhZGVyRXhlY3V0YWJsZTEx
KFNoYWRlckV4ZWN1dGFibGUgKmV4ZWN1dGFibGUpOworCisgICAgSUQzRDExUGl4ZWxTaGFkZXIg
KmdldFBpeGVsU2hhZGVyKCkgY29uc3Q7CisgICAgSUQzRDExVmVydGV4U2hhZGVyICpnZXRWZXJ0
ZXhTaGFkZXIoKSBjb25zdDsKKyAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZ2V0R2VvbWV0cnlT
aGFkZXIoKSBjb25zdDsKKworICAgIElEM0QxMUJ1ZmZlciAqZ2V0Q29uc3RhbnRCdWZmZXIoSUQz
RDExRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGludCByZWdpc3RlckNvdW50KTsKKworICBwcml2
YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTaGFkZXJFeGVjdXRhYmxlMTEpOwor
CisgICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1QaXhlbEV4ZWN1dGFibGU7CisgICAgSUQzRDExVmVy
dGV4U2hhZGVyICptVmVydGV4RXhlY3V0YWJsZTsKKyAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAq
bUdlb21ldHJ5RXhlY3V0YWJsZTsKKworICAgIElEM0QxMUJ1ZmZlciAqbUNvbnN0YW50QnVmZmVy
OworfTsKKworfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1NIQURFUkVYRUNVVEFC
TEUxMV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9Td2FwQ2hhaW4xMS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFpbjExLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4yNjlkNDUxNjY4ZmQwMDA2YzQ2MmY4YTVlMGNjMDE0NmY3MDhhZmIxCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9Td2FwQ2hhaW4xMS5jcHAKQEAgLTAsMCArMSw2NTcgQEAKKyNpbmNsdWRlICJwcmVjb21waWxl
ZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gU3dhcENoYWluMTEuY3BwOiBJbXBsZW1lbnRz
IGEgYmFjay1lbmQgc3BlY2lmaWMgY2xhc3MgZm9yIHRoZSBEM0QxMSBzd2FwIGNoYWluLgorCisj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFpbjExLmgiCisKKyNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgiCisKKyNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaDExdnMu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9w
YXNzdGhyb3VnaHJnYmExMXBzLmgiCisKK25hbWVzcGFjZSByeAoreworCitTd2FwQ2hhaW4xMTo6
U3dhcENoYWluMTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIsIEhXTkQgd2luZG93LCBIQU5ETEUgc2hh
cmVIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGJhY2tCdWZmZXJGb3Jt
YXQsIEdMZW51bSBkZXB0aEJ1ZmZlckZvcm1hdCkKKyAgICA6IG1SZW5kZXJlcihyZW5kZXJlciks
IFN3YXBDaGFpbih3aW5kb3csIHNoYXJlSGFuZGxlLCBiYWNrQnVmZmVyRm9ybWF0LCBkZXB0aEJ1
ZmZlckZvcm1hdCkKK3sKKyAgICBtU3dhcENoYWluID0gTlVMTDsKKyAgICBtQmFja0J1ZmZlclRl
eHR1cmUgPSBOVUxMOworICAgIG1CYWNrQnVmZmVyUlRWaWV3ID0gTlVMTDsKKyAgICBtT2Zmc2Ny
ZWVuVGV4dHVyZSA9IE5VTEw7CisgICAgbU9mZnNjcmVlblJUVmlldyA9IE5VTEw7CisgICAgbU9m
ZnNjcmVlblNSVmlldyA9IE5VTEw7CisgICAgbURlcHRoU3RlbmNpbFRleHR1cmUgPSBOVUxMOwor
ICAgIG1EZXB0aFN0ZW5jaWxEU1ZpZXcgPSBOVUxMOworICAgIG1RdWFkVkIgPSBOVUxMOworICAg
IG1QYXNzVGhyb3VnaFNhbXBsZXIgPSBOVUxMOworICAgIG1QYXNzVGhyb3VnaElMID0gTlVMTDsK
KyAgICBtUGFzc1Rocm91Z2hWUyA9IE5VTEw7CisgICAgbVBhc3NUaHJvdWdoUFMgPSBOVUxMOwor
ICAgIG1XaWR0aCA9IC0xOworICAgIG1IZWlnaHQgPSAtMTsKKyAgICBtU3dhcEludGVydmFsID0g
MDsKKyAgICBtQXBwQ3JlYXRlZFNoYXJlSGFuZGxlID0gbVNoYXJlSGFuZGxlICE9IE5VTEw7Cisg
ICAgbVBhc3NUaHJvdWdoUmVzb3VyY2VzSW5pdCA9IGZhbHNlOworfQorCitTd2FwQ2hhaW4xMTo6
flN3YXBDaGFpbjExKCkKK3sKKyAgICByZWxlYXNlKCk7Cit9CisKK3ZvaWQgU3dhcENoYWluMTE6
OnJlbGVhc2UoKQoreworICAgIFNhZmVSZWxlYXNlKG1Td2FwQ2hhaW4pOworICAgIFNhZmVSZWxl
YXNlKG1CYWNrQnVmZmVyVGV4dHVyZSk7CisgICAgU2FmZVJlbGVhc2UobUJhY2tCdWZmZXJSVFZp
ZXcpOworICAgIFNhZmVSZWxlYXNlKG1PZmZzY3JlZW5UZXh0dXJlKTsKKyAgICBTYWZlUmVsZWFz
ZShtT2Zmc2NyZWVuUlRWaWV3KTsKKyAgICBTYWZlUmVsZWFzZShtT2Zmc2NyZWVuU1JWaWV3KTsK
KyAgICBTYWZlUmVsZWFzZShtRGVwdGhTdGVuY2lsVGV4dHVyZSk7CisgICAgU2FmZVJlbGVhc2Uo
bURlcHRoU3RlbmNpbERTVmlldyk7CisgICAgU2FmZVJlbGVhc2UobVF1YWRWQik7CisgICAgU2Fm
ZVJlbGVhc2UobVBhc3NUaHJvdWdoU2FtcGxlcik7CisgICAgU2FmZVJlbGVhc2UobVBhc3NUaHJv
dWdoSUwpOworICAgIFNhZmVSZWxlYXNlKG1QYXNzVGhyb3VnaFZTKTsKKyAgICBTYWZlUmVsZWFz
ZShtUGFzc1Rocm91Z2hQUyk7CisKKyAgICBpZiAoIW1BcHBDcmVhdGVkU2hhcmVIYW5kbGUpCisg
ICAgeworICAgICAgICBtU2hhcmVIYW5kbGUgPSBOVUxMOworICAgIH0KK30KKwordm9pZCBTd2Fw
Q2hhaW4xMTo6cmVsZWFzZU9mZnNjcmVlblRleHR1cmUoKQoreworICAgIFNhZmVSZWxlYXNlKG1P
ZmZzY3JlZW5UZXh0dXJlKTsKKyAgICBTYWZlUmVsZWFzZShtT2Zmc2NyZWVuUlRWaWV3KTsKKyAg
ICBTYWZlUmVsZWFzZShtT2Zmc2NyZWVuU1JWaWV3KTsKKyAgICBTYWZlUmVsZWFzZShtRGVwdGhT
dGVuY2lsVGV4dHVyZSk7CisgICAgU2FmZVJlbGVhc2UobURlcHRoU3RlbmNpbERTVmlldyk7Cit9
CisKK0VHTGludCBTd2FwQ2hhaW4xMTo6cmVzZXRPZmZzY3JlZW5UZXh0dXJlKGludCBiYWNrYnVm
ZmVyV2lkdGgsIGludCBiYWNrYnVmZmVySGVpZ2h0KQoreworICAgIElEM0QxMURldmljZSAqZGV2
aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgIEFTU0VSVChkZXZpY2UgIT0gTlVM
TCk7CisKKyAgICAvLyBEM0QxMSBkb2VzIG5vdCBhbGxvdyB6ZXJvIHNpemUgdGV4dHVyZXMKKyAg
ICBBU1NFUlQoYmFja2J1ZmZlcldpZHRoID49IDEpOworICAgIEFTU0VSVChiYWNrYnVmZmVySGVp
Z2h0ID49IDEpOworCisgICAgLy8gUHJlc2VydmUgdGhlIHJlbmRlciB0YXJnZXQgY29udGVudAor
ICAgIElEM0QxMVRleHR1cmUyRCAqcHJldmlvdXNPZmZzY3JlZW5UZXh0dXJlID0gbU9mZnNjcmVl
blRleHR1cmU7CisgICAgaWYgKHByZXZpb3VzT2Zmc2NyZWVuVGV4dHVyZSkKKyAgICB7CisgICAg
ICAgIHByZXZpb3VzT2Zmc2NyZWVuVGV4dHVyZS0+QWRkUmVmKCk7CisgICAgfQorICAgIGNvbnN0
IGludCBwcmV2aW91c1dpZHRoID0gbVdpZHRoOworICAgIGNvbnN0IGludCBwcmV2aW91c0hlaWdo
dCA9IG1IZWlnaHQ7CisKKyAgICByZWxlYXNlT2Zmc2NyZWVuVGV4dHVyZSgpOworCisgICAgLy8g
SWYgdGhlIGFwcCBwYXNzZWQgaW4gYSBzaGFyZSBoYW5kbGUsIG9wZW4gdGhlIHJlc291cmNlCisg
ICAgLy8gU2VlIEVHTF9BTkdMRV9kM2Rfc2hhcmVfaGFuZGxlX2NsaWVudF9idWZmZXIKKyAgICBp
ZiAobUFwcENyZWF0ZWRTaGFyZUhhbmRsZSkKKyAgICB7CisgICAgICAgIElEM0QxMVJlc291cmNl
ICp0ZW1wUmVzb3VyY2UxMTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPk9wZW5T
aGFyZWRSZXNvdXJjZShtU2hhcmVIYW5kbGUsIF9fdXVpZG9mKElEM0QxMVJlc291cmNlKSwgKHZv
aWQqKikmdGVtcFJlc291cmNlMTEpOworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAg
ICAgICAgeworICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gb3BlbiB0aGUgc3dhcCBjaGFpbiBw
YnVmZmVyIHNoYXJlIGhhbmRsZTogJTA4bFgiLCByZXN1bHQpOworICAgICAgICAgICAgcmVsZWFz
ZSgpOworICAgICAgICAgICAgcmV0dXJuIEVHTF9CQURfUEFSQU1FVEVSOworICAgICAgICB9CisK
KyAgICAgICAgcmVzdWx0ID0gdGVtcFJlc291cmNlMTEtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9m
KElEM0QxMVRleHR1cmUyRCksICh2b2lkKiopJm1PZmZzY3JlZW5UZXh0dXJlKTsKKyAgICAgICAg
dGVtcFJlc291cmNlMTEtPlJlbGVhc2UoKTsKKworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIHF1ZXJ5IHRleHR1cmUyZCBp
bnRlcmZhY2UgaW4gcGJ1ZmZlciBzaGFyZSBoYW5kbGU6ICUwOGxYIiwgcmVzdWx0KTsKKyAgICAg
ICAgICAgIHJlbGVhc2UoKTsKKyAgICAgICAgICAgIHJldHVybiBFR0xfQkFEX1BBUkFNRVRFUjsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIFZhbGlkYXRlIG9mZnNjcmVlbiB0ZXh0dXJlIHBhcmFt
ZXRlcnMKKyAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0Mgb2Zmc2NyZWVuVGV4dHVyZURlc2Mg
PSB7MH07CisgICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5HZXREZXNjKCZvZmZzY3JlZW5UZXh0
dXJlRGVzYyk7CisKKyAgICAgICAgaWYgKG9mZnNjcmVlblRleHR1cmVEZXNjLldpZHRoICE9IChV
SU5UKWJhY2tidWZmZXJXaWR0aAorICAgICAgICAgICAgfHwgb2Zmc2NyZWVuVGV4dHVyZURlc2Mu
SGVpZ2h0ICE9IChVSU5UKWJhY2tidWZmZXJIZWlnaHQKKyAgICAgICAgICAgIHx8IG9mZnNjcmVl
blRleHR1cmVEZXNjLkZvcm1hdCAhPSBnbF9kM2QxMTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1h
dChtQmFja0J1ZmZlckZvcm1hdCkKKyAgICAgICAgICAgIHx8IG9mZnNjcmVlblRleHR1cmVEZXNj
Lk1pcExldmVscyAhPSAxCisgICAgICAgICAgICB8fCBvZmZzY3JlZW5UZXh0dXJlRGVzYy5BcnJh
eVNpemUgIT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJJbnZhbGlkIHRleHR1cmUg
cGFyYW1ldGVycyBpbiB0aGUgc2hhcmVkIG9mZnNjcmVlbiB0ZXh0dXJlIHBidWZmZXIiKTsKKyAg
ICAgICAgICAgIHJlbGVhc2UoKTsKKyAgICAgICAgICAgIHJldHVybiBFR0xfQkFEX1BBUkFNRVRF
UjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjb25zdCBib29s
IHVzZVNoYXJlZFJlc291cmNlID0gIW1XaW5kb3cgJiYgbVJlbmRlcmVyLT5nZXRTaGFyZUhhbmRs
ZVN1cHBvcnQoKTsKKworICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBvZmZzY3JlZW5UZXh0
dXJlRGVzYyA9IHswfTsKKyAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuV2lkdGggPSBiYWNr
YnVmZmVyV2lkdGg7CisgICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLkhlaWdodCA9IGJhY2ti
dWZmZXJIZWlnaHQ7CisgICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLkZvcm1hdCA9IGdsX2Qz
ZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0KTsKKyAgICAg
ICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuTWlwTGV2ZWxzID0gMTsKKyAgICAgICAgb2Zmc2NyZWVu
VGV4dHVyZURlc2MuQXJyYXlTaXplID0gMTsKKyAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2Mu
U2FtcGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLlNhbXBs
ZURlc2MuUXVhbGl0eSA9IDA7CisgICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLlVzYWdlID0g
RDNEMTFfVVNBR0VfREVGQVVMVDsKKyAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuQmluZEZs
YWdzID0gRDNEMTFfQklORF9SRU5ERVJfVEFSR0VUIHwgRDNEMTFfQklORF9TSEFERVJfUkVTT1VS
Q0U7CisgICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAg
ICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuTWlzY0ZsYWdzID0gdXNlU2hhcmVkUmVzb3VyY2Ug
PyBEM0QxMV9SRVNPVVJDRV9NSVNDX1NIQVJFRCA6IDA7CisKKyAgICAgICAgSFJFU1VMVCByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmb2Zmc2NyZWVuVGV4dHVyZURlc2MsIE5VTEws
ICZtT2Zmc2NyZWVuVGV4dHVyZSk7CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAg
ICAgICB7CisgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgb2Zmc2NyZWVuIHRleHR1
cmU6ICUwOGxYIiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJlbGVhc2UoKTsKKworICAgICAgICAg
ICAgaWYgKGQzZDExOjppc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBFR0xfQ09OVEVYVF9MT1NUOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBF
R0xfQkFEX0FMTE9DOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZDNkMTE6
OlNldERlYnVnTmFtZShtT2Zmc2NyZWVuVGV4dHVyZSwgIk9mZnNjcmVlbiB0ZXh0dXJlIik7CisK
KyAgICAgICAgLy8gRUdMX0FOR0xFX3N1cmZhY2VfZDNkX3RleHR1cmVfMmRfc2hhcmVfaGFuZGxl
IHJlcXVpcmVzIHRoYXQgd2Ugc3RvcmUgYSBzaGFyZSBoYW5kbGUgZm9yIHRoZSBjbGllbnQKKyAg
ICAgICAgaWYgKHVzZVNoYXJlZFJlc291cmNlKQorICAgICAgICB7CisgICAgICAgICAgICBJRFhH
SVJlc291cmNlICpvZmZzY3JlZW5UZXh0dXJlUmVzb3VyY2UgPSBOVUxMOworICAgICAgICAgICAg
cmVzdWx0ID0gbU9mZnNjcmVlblRleHR1cmUtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEWEdJ
UmVzb3VyY2UpLCAodm9pZCoqKSZvZmZzY3JlZW5UZXh0dXJlUmVzb3VyY2UpOworCisgICAgICAg
ICAgICAvLyBGYWxsIGJhY2sgdG8gbm8gc2hhcmUgaGFuZGxlIG9uIGZhaWx1cmUKKyAgICAgICAg
ICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBF
UlIoIkNvdWxkIG5vdCBxdWVyeSBvZmZzY3JlZW4gdGV4dHVyZSByZXNvdXJjZTogJTA4bFgiLCBy
ZXN1bHQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IG9mZnNjcmVlblRleHR1cmVSZXNvdXJjZS0+R2V0U2hh
cmVkSGFuZGxlKCZtU2hhcmVIYW5kbGUpOworICAgICAgICAgICAgICAgIG9mZnNjcmVlblRleHR1
cmVSZXNvdXJjZS0+UmVsZWFzZSgpOworCisgICAgICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1
bHQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbVNoYXJlSGFuZGxl
ID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgZ2V0IG9mZnNjcmVl
biB0ZXh0dXJlIHNoYXJlZCBoYW5kbGU6ICUwOGxYIiwgcmVzdWx0KTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgICAgIAorICAgIEhSRVNV
TFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1PZmZzY3JlZW5UZXh0
dXJlLCBOVUxMLCAmbU9mZnNjcmVlblJUVmlldyk7CisKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOworICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobU9mZnNjcmVlblJUVmlldywgIk9mZnNj
cmVlbiByZW5kZXIgdGFyZ2V0Iik7CisKKyAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRl
clJlc291cmNlVmlldyhtT2Zmc2NyZWVuVGV4dHVyZSwgTlVMTCwgJm1PZmZzY3JlZW5TUlZpZXcp
OworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgZDNkMTE6OlNldERlYnVnTmFt
ZShtT2Zmc2NyZWVuU1JWaWV3LCAiT2Zmc2NyZWVuIHNoYWRlciByZXNvdXJjZSIpOworCisgICAg
aWYgKG1EZXB0aEJ1ZmZlckZvcm1hdCAhPSBHTF9OT05FKQorICAgIHsKKyAgICAgICAgRDNEMTFf
VEVYVFVSRTJEX0RFU0MgZGVwdGhTdGVuY2lsRGVzYyA9IHswfTsKKyAgICAgICAgZGVwdGhTdGVu
Y2lsRGVzYy5XaWR0aCA9IGJhY2tidWZmZXJXaWR0aDsKKyAgICAgICAgZGVwdGhTdGVuY2lsRGVz
Yy5IZWlnaHQgPSBiYWNrYnVmZmVySGVpZ2h0OworICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLkZv
cm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1EZXB0aEJ1ZmZlckZv
cm1hdCk7CisgICAgICAgIGRlcHRoU3RlbmNpbERlc2MuTWlwTGV2ZWxzID0gMTsKKyAgICAgICAg
ZGVwdGhTdGVuY2lsRGVzYy5BcnJheVNpemUgPSAxOworICAgICAgICBkZXB0aFN0ZW5jaWxEZXNj
LlNhbXBsZURlc2MuQ291bnQgPSAxOworICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLlNhbXBsZURl
c2MuUXVhbGl0eSA9IDA7CisgICAgICAgIGRlcHRoU3RlbmNpbERlc2MuVXNhZ2UgPSBEM0QxMV9V
U0FHRV9ERUZBVUxUOworICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLkJpbmRGbGFncyA9IEQzRDEx
X0JJTkRfREVQVEhfU1RFTkNJTDsKKyAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5DUFVBY2Nlc3NG
bGFncyA9IDA7CisgICAgICAgIGRlcHRoU3RlbmNpbERlc2MuTWlzY0ZsYWdzID0gMDsKKworICAg
ICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVwdGhTdGVuY2lsRGVzYywg
TlVMTCwgJm1EZXB0aFN0ZW5jaWxUZXh0dXJlKTsKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQp
KQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgZGVwdGhzdGVu
Y2lsIHN1cmZhY2UgZm9yIG5ldyBzd2FwIGNoYWluOiAweCUwOFgiLCByZXN1bHQpOworICAgICAg
ICAgICAgcmVsZWFzZSgpOworCisgICAgICAgICAgICBpZiAoZDNkMTE6OmlzRGV2aWNlTG9zdEVy
cm9yKHJlc3VsdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEVHTF9D
T05URVhUX0xPU1Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEVHTF9CQURfQUxMT0M7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtRGVwdGhTdGVuY2lsVGV4
dHVyZSwgIkRlcHRoIHN0ZW5jaWwgdGV4dHVyZSIpOworCisgICAgICAgIHJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlRGVwdGhTdGVuY2lsVmlldyhtRGVwdGhTdGVuY2lsVGV4dHVyZSwgTlVMTCwgJm1E
ZXB0aFN0ZW5jaWxEU1ZpZXcpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwor
ICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1EZXB0aFN0ZW5jaWxEU1ZpZXcsICJEZXB0aCBz
dGVuY2lsIHZpZXciKTsKKyAgICB9CisKKyAgICBtV2lkdGggPSBiYWNrYnVmZmVyV2lkdGg7Cisg
ICAgbUhlaWdodCA9IGJhY2tidWZmZXJIZWlnaHQ7CisKKyAgICBpZiAocHJldmlvdXNPZmZzY3Jl
ZW5UZXh0dXJlICE9IE5VTEwpCisgICAgeworICAgICAgICBEM0QxMV9CT1ggc291cmNlQm94ID0g
ezB9OworICAgICAgICBzb3VyY2VCb3gubGVmdCA9IDA7CisgICAgICAgIHNvdXJjZUJveC5yaWdo
dCA9IHN0ZDo6bWluKHByZXZpb3VzV2lkdGgsIG1XaWR0aCk7CisgICAgICAgIHNvdXJjZUJveC50
b3AgPSBzdGQ6Om1heChwcmV2aW91c0hlaWdodCAtIG1IZWlnaHQsIDApOworICAgICAgICBzb3Vy
Y2VCb3guYm90dG9tID0gcHJldmlvdXNIZWlnaHQ7CisgICAgICAgIHNvdXJjZUJveC5mcm9udCA9
IDA7CisgICAgICAgIHNvdXJjZUJveC5iYWNrID0gMTsKKworICAgICAgICBJRDNEMTFEZXZpY2VD
b250ZXh0ICpkZXZpY2VDb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7Cisg
ICAgICAgIGNvbnN0IGludCB5b2Zmc2V0ID0gc3RkOjptYXgobUhlaWdodCAtIHByZXZpb3VzSGVp
Z2h0LCAwKTsKKyAgICAgICAgZGV2aWNlQ29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKG1P
ZmZzY3JlZW5UZXh0dXJlLCAwLCAwLCB5b2Zmc2V0LCAwLCBwcmV2aW91c09mZnNjcmVlblRleHR1
cmUsIDAsICZzb3VyY2VCb3gpOworCisgICAgICAgIHByZXZpb3VzT2Zmc2NyZWVuVGV4dHVyZS0+
UmVsZWFzZSgpOworCisgICAgICAgIGlmIChtU3dhcENoYWluKQorICAgICAgICB7CisgICAgICAg
ICAgICBzd2FwUmVjdCgwLCAwLCBtV2lkdGgsIG1IZWlnaHQpOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIEVHTF9TVUNDRVNTOworfQorCitFR0xpbnQgU3dhcENoYWluMTE6OnJlc2l6
ZShFR0xpbnQgYmFja2J1ZmZlcldpZHRoLCBFR0xpbnQgYmFja2J1ZmZlckhlaWdodCkKK3sKKyAg
ICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICBp
ZiAoZGV2aWNlID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4gRUdMX0JBRF9BQ0NFU1M7
CisgICAgfQorCisgICAgLy8gRUdMIGFsbG93cyBjcmVhdGluZyBhIHN1cmZhY2Ugd2l0aCAweDAg
ZGltZW5zaW9uLCBob3dldmVyLCBEWEdJIGRvZXMgbm90IGxpa2UgMHgwIHN3YXBjaGFpbnMKKyAg
ICBpZiAoYmFja2J1ZmZlcldpZHRoIDwgMSB8fCBiYWNrYnVmZmVySGVpZ2h0IDwgMSkKKyAgICB7
CisgICAgICAgIHJldHVybiBFR0xfU1VDQ0VTUzsKKyAgICB9CisKKyAgICAvLyBDYW4gb25seSBj
YWxsIHJlc2l6ZSBpZiB3ZSBoYXZlIGFscmVhZHkgY3JlYXRlZCBvdXIgc3dhcCBidWZmZXIgYW5k
IHJlc291cmNlcworICAgIEFTU0VSVChtU3dhcENoYWluICYmIG1CYWNrQnVmZmVyVGV4dHVyZSAm
JiBtQmFja0J1ZmZlclJUVmlldyk7CisKKyAgICBTYWZlUmVsZWFzZShtQmFja0J1ZmZlclRleHR1
cmUpOworICAgIFNhZmVSZWxlYXNlKG1CYWNrQnVmZmVyUlRWaWV3KTsKKworICAgIC8vIFJlc2l6
ZSBzd2FwIGNoYWluCisgICAgRFhHSV9GT1JNQVQgYmFja2J1ZmZlckRYR0lGb3JtYXQgPSBnbF9k
M2QxMTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCk7CisgICAg
SFJFU1VMVCByZXN1bHQgPSBtU3dhcENoYWluLT5SZXNpemVCdWZmZXJzKDIsIGJhY2tidWZmZXJX
aWR0aCwgYmFja2J1ZmZlckhlaWdodCwgYmFja2J1ZmZlckRYR0lGb3JtYXQsIDApOworCisgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJFcnJvciByZXNpemluZyBz
d2FwIGNoYWluIGJ1ZmZlcnM6IDB4JTA4WCIsIHJlc3VsdCk7CisgICAgICAgIHJlbGVhc2UoKTsK
KworICAgICAgICBpZiAoZDNkMTE6OmlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBFR0xfQ09OVEVYVF9MT1NUOworICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9CQURfQUxMT0M7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXN1bHQgPSBtU3dhcENoYWluLT5HZXRCdWZmZXIoMCwg
X191dWlkb2YoSUQzRDExVGV4dHVyZTJEKSwgKExQVk9JRCopJm1CYWNrQnVmZmVyVGV4dHVyZSk7
CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICBpZiAoU1VDQ0VFREVEKHJlc3Vs
dCkpCisgICAgeworICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1CYWNrQnVmZmVyVGV4dHVy
ZSwgIkJhY2sgYnVmZmVyIHRleHR1cmUiKTsKKyAgICB9CisKKyAgICByZXN1bHQgPSBkZXZpY2Ut
PkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobUJhY2tCdWZmZXJUZXh0dXJlLCBOVUxMLCAmbUJhY2tC
dWZmZXJSVFZpZXcpOworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgaWYgKFNV
Q0NFRURFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQmFj
a0J1ZmZlclJUVmlldywgIkJhY2sgYnVmZmVyIHJlbmRlciB0YXJnZXQiKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gcmVzZXRPZmZzY3JlZW5UZXh0dXJlKGJhY2tidWZmZXJXaWR0aCwgYmFja2J1ZmZl
ckhlaWdodCk7Cit9CisKK0VHTGludCBTd2FwQ2hhaW4xMTo6cmVzZXQoaW50IGJhY2tidWZmZXJX
aWR0aCwgaW50IGJhY2tidWZmZXJIZWlnaHQsIEVHTGludCBzd2FwSW50ZXJ2YWwpCit7CisgICAg
SUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgaWYg
KGRldmljZSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEVHTF9CQURfQUNDRVNTOwor
ICAgIH0KKworICAgIC8vIFJlbGVhc2Ugc3BlY2lmaWMgcmVzb3VyY2VzIHRvIGZyZWUgdXAgbWVt
b3J5IGZvciB0aGUgbmV3IHJlbmRlciB0YXJnZXQsIHdoaWxlIHRoZQorICAgIC8vIG9sZCByZW5k
ZXIgdGFyZ2V0IHN0aWxsIGV4aXN0cyBmb3IgdGhlIHB1cnBvc2Ugb2YgcHJlc2VydmluZyBpdHMg
Y29udGVudHMuCisgICAgU2FmZVJlbGVhc2UobVN3YXBDaGFpbik7CisgICAgU2FmZVJlbGVhc2Uo
bUJhY2tCdWZmZXJUZXh0dXJlKTsKKyAgICBTYWZlUmVsZWFzZShtQmFja0J1ZmZlclJUVmlldyk7
CisKKyAgICBtU3dhcEludGVydmFsID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihzd2FwSW50
ZXJ2YWwpOworICAgIGlmIChtU3dhcEludGVydmFsID4gNCkKKyAgICB7CisgICAgICAgIC8vIElE
WEdJU3dhcENoYWluOjpQcmVzZW50IGRvY3VtZW50YXRpb24gc3RhdGVzIHRoYXQgdmFsaWQgc3lu
YyBpbnRlcnZhbHMgYXJlIGluIHRoZSBbMCw0XSByYW5nZQorICAgICAgICByZXR1cm4gRUdMX0JB
RF9QQVJBTUVURVI7CisgICAgfQorCisgICAgLy8gRUdMIGFsbG93cyBjcmVhdGluZyBhIHN1cmZh
Y2Ugd2l0aCAweDAgZGltZW5zaW9uLCBob3dldmVyLCBEWEdJIGRvZXMgbm90IGxpa2UgMHgwIHN3
YXBjaGFpbnMKKyAgICBpZiAoYmFja2J1ZmZlcldpZHRoIDwgMSB8fCBiYWNrYnVmZmVySGVpZ2h0
IDwgMSkKKyAgICB7CisgICAgICAgIHJlbGVhc2VPZmZzY3JlZW5UZXh0dXJlKCk7CisgICAgICAg
IHJldHVybiBFR0xfU1VDQ0VTUzsKKyAgICB9CisKKyAgICBpZiAobVdpbmRvdykKKyAgICB7Cisg
ICAgICAgIElEWEdJRmFjdG9yeSAqZmFjdG9yeSA9IG1SZW5kZXJlci0+Z2V0RHhnaUZhY3Rvcnko
KTsKKworICAgICAgICBEWEdJX1NXQVBfQ0hBSU5fREVTQyBzd2FwQ2hhaW5EZXNjID0gezB9Owor
ICAgICAgICBzd2FwQ2hhaW5EZXNjLkJ1ZmZlckNvdW50ID0gMjsKKyAgICAgICAgc3dhcENoYWlu
RGVzYy5CdWZmZXJEZXNjLkZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9y
bWF0KG1CYWNrQnVmZmVyRm9ybWF0KTsKKyAgICAgICAgc3dhcENoYWluRGVzYy5CdWZmZXJEZXNj
LldpZHRoID0gYmFja2J1ZmZlcldpZHRoOworICAgICAgICBzd2FwQ2hhaW5EZXNjLkJ1ZmZlckRl
c2MuSGVpZ2h0ID0gYmFja2J1ZmZlckhlaWdodDsKKyAgICAgICAgc3dhcENoYWluRGVzYy5CdWZm
ZXJEZXNjLlNjYWxpbmcgPSBEWEdJX01PREVfU0NBTElOR19VTlNQRUNJRklFRDsKKyAgICAgICAg
c3dhcENoYWluRGVzYy5CdWZmZXJEZXNjLlNjYW5saW5lT3JkZXJpbmcgPSBEWEdJX01PREVfU0NB
TkxJTkVfT1JERVJfVU5TUEVDSUZJRUQ7CisgICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyRGVz
Yy5SZWZyZXNoUmF0ZS5OdW1lcmF0b3IgPSAwOworICAgICAgICBzd2FwQ2hhaW5EZXNjLkJ1ZmZl
ckRlc2MuUmVmcmVzaFJhdGUuRGVub21pbmF0b3IgPSAxOworICAgICAgICBzd2FwQ2hhaW5EZXNj
LkJ1ZmZlclVzYWdlID0gRFhHSV9VU0FHRV9SRU5ERVJfVEFSR0VUX09VVFBVVDsKKyAgICAgICAg
c3dhcENoYWluRGVzYy5GbGFncyA9IDA7CisgICAgICAgIHN3YXBDaGFpbkRlc2MuT3V0cHV0V2lu
ZG93ID0gbVdpbmRvdzsKKyAgICAgICAgc3dhcENoYWluRGVzYy5TYW1wbGVEZXNjLkNvdW50ID0g
MTsKKyAgICAgICAgc3dhcENoYWluRGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOworICAgICAg
ICBzd2FwQ2hhaW5EZXNjLldpbmRvd2VkID0gVFJVRTsKKworICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IGZhY3RvcnktPkNyZWF0ZVN3YXBDaGFpbihkZXZpY2UsICZzd2FwQ2hhaW5EZXNjLCAmbVN3
YXBDaGFpbik7CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAg
ICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYWRkaXRpb25hbCBzd2FwIGNoYWlucyBvciBv
ZmZzY3JlZW4gc3VyZmFjZXM6ICUwOGxYIiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJlbGVhc2Uo
KTsKKworICAgICAgICAgICAgaWYgKGQzZDExOjppc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBFR0xfQ09OVEVYVF9MT1NUOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBFR0xfQkFEX0FMTE9DOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgcmVzdWx0ID0gbVN3YXBDaGFpbi0+R2V0QnVmZmVyKDAsIF9fdXVpZG9mKElEM0Qx
MVRleHR1cmUyRCksIChMUFZPSUQqKSZtQmFja0J1ZmZlclRleHR1cmUpOworICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1CYWNr
QnVmZmVyVGV4dHVyZSwgIkJhY2sgYnVmZmVyIHRleHR1cmUiKTsKKworICAgICAgICByZXN1bHQg
PSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobUJhY2tCdWZmZXJUZXh0dXJlLCBOVUxM
LCAmbUJhY2tCdWZmZXJSVFZpZXcpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkp
OworICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1CYWNrQnVmZmVyUlRWaWV3LCAiQmFjayBi
dWZmZXIgcmVuZGVyIHRhcmdldCIpOworICAgIH0KKworICAgIC8vIElmIHdlIGFyZSByZXNpemlu
ZyB0aGUgc3dhcCBjaGFpbiwgd2UgZG9uJ3Qgd2lzaCB0byByZWNyZWF0ZSBhbGwgdGhlIHN0YXRp
YyByZXNvdXJjZXMKKyAgICBpZiAoIW1QYXNzVGhyb3VnaFJlc291cmNlc0luaXQpCisgICAgewor
ICAgICAgICBtUGFzc1Rocm91Z2hSZXNvdXJjZXNJbml0ID0gdHJ1ZTsKKyAgICAgICAgaW5pdFBh
c3NUaHJvdWdoUmVzb3VyY2VzKCk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc2V0T2Zmc2NyZWVu
VGV4dHVyZShiYWNrYnVmZmVyV2lkdGgsIGJhY2tidWZmZXJIZWlnaHQpOworfQorCit2b2lkIFN3
YXBDaGFpbjExOjppbml0UGFzc1Rocm91Z2hSZXNvdXJjZXMoKQoreworICAgIElEM0QxMURldmlj
ZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgIEFTU0VSVChkZXZpY2Ug
IT0gTlVMTCk7CisKKyAgICAvLyBNYWtlIHN1cmUgb3VyIHJlc291cmNlcyBhcmUgYWxsIG5vdCBh
bGxvY2F0ZWQsIHdoZW4gd2UgY3JlYXRlCisgICAgQVNTRVJUKG1RdWFkVkIgPT0gTlVMTCAmJiBt
UGFzc1Rocm91Z2hTYW1wbGVyID09IE5VTEwpOworICAgIEFTU0VSVChtUGFzc1Rocm91Z2hJTCA9
PSBOVUxMICYmIG1QYXNzVGhyb3VnaFZTID09IE5VTEwgJiYgbVBhc3NUaHJvdWdoUFMgPT0gTlVM
TCk7CisKKyAgICBEM0QxMV9CVUZGRVJfREVTQyB2YkRlc2M7CisgICAgdmJEZXNjLkJ5dGVXaWR0
aCA9IHNpemVvZihkM2QxMTo6UG9zaXRpb25UZXhDb29yZFZlcnRleCkgKiA0OworICAgIHZiRGVz
Yy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZTkFNSUM7CisgICAgdmJEZXNjLkJpbmRGbGFncyA9IEQz
RDExX0JJTkRfVkVSVEVYX0JVRkZFUjsKKyAgICB2YkRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSBEM0Qx
MV9DUFVfQUNDRVNTX1dSSVRFOworICAgIHZiRGVzYy5NaXNjRmxhZ3MgPSAwOworICAgIHZiRGVz
Yy5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVCdWZmZXIoJnZiRGVzYywgTlVMTCwgJm1RdWFkVkIpOworICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7CisgICAgZDNkMTE6OlNldERlYnVnTmFtZShtUXVhZFZCLCAiU3dhcCBj
aGFpbiBxdWFkIHZlcnRleCBidWZmZXIiKTsKKworICAgIEQzRDExX1NBTVBMRVJfREVTQyBzYW1w
bGVyRGVzYzsKKyAgICBzYW1wbGVyRGVzYy5GaWx0ZXIgPSBEM0QxMV9GSUxURVJfTUlOX01BR19N
SVBfUE9JTlQ7CisgICAgc2FtcGxlckRlc2MuQWRkcmVzc1UgPSBEM0QxMV9URVhUVVJFX0FERFJF
U1NfQ0xBTVA7CisgICAgc2FtcGxlckRlc2MuQWRkcmVzc1YgPSBEM0QxMV9URVhUVVJFX0FERFJF
U1NfQ0xBTVA7CisgICAgc2FtcGxlckRlc2MuQWRkcmVzc1cgPSBEM0QxMV9URVhUVVJFX0FERFJF
U1NfQ0xBTVA7CisgICAgc2FtcGxlckRlc2MuTWlwTE9EQmlhcyA9IDAuMGY7CisgICAgc2FtcGxl
ckRlc2MuTWF4QW5pc290cm9weSA9IDA7CisgICAgc2FtcGxlckRlc2MuQ29tcGFyaXNvbkZ1bmMg
PSBEM0QxMV9DT01QQVJJU09OX05FVkVSOworICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzBd
ID0gMC4wZjsKKyAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclsxXSA9IDAuMGY7CisgICAgc2Ft
cGxlckRlc2MuQm9yZGVyQ29sb3JbMl0gPSAwLjBmOworICAgIHNhbXBsZXJEZXNjLkJvcmRlckNv
bG9yWzNdID0gMC4wZjsKKyAgICBzYW1wbGVyRGVzYy5NaW5MT0QgPSAwOworICAgIHNhbXBsZXJE
ZXNjLk1heExPRCA9IEQzRDExX0ZMT0FUMzJfTUFYOworCisgICAgcmVzdWx0ID0gZGV2aWNlLT5D
cmVhdGVTYW1wbGVyU3RhdGUoJnNhbXBsZXJEZXNjLCAmbVBhc3NUaHJvdWdoU2FtcGxlcik7Cisg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Q
YXNzVGhyb3VnaFNhbXBsZXIsICJTd2FwIGNoYWluIHBhc3MgdGhyb3VnaCBzYW1wbGVyIik7CisK
KyAgICBEM0QxMV9JTlBVVF9FTEVNRU5UX0RFU0MgcXVhZExheW91dFtdID0KKyAgICB7CisgICAg
ICAgIHsgIlBPU0lUSU9OIiwgMCwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCAwLCAwLCBEM0Qx
MV9JTlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAgfSwKKyAgICAgICAgeyAiVEVYQ09PUkQiLCAwLCBE
WEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDAsIDgsIEQzRDExX0lOUFVUX1BFUl9WRVJURVhfREFU
QSwgMCB9LAorICAgIH07CisKKyAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUlucHV0TGF5b3V0
KHF1YWRMYXlvdXQsIDIsIGdfVlNfUGFzc3Rocm91Z2gsIHNpemVvZihnX1ZTX1Bhc3N0aHJvdWdo
KSwgJm1QYXNzVGhyb3VnaElMKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAg
IGQzZDExOjpTZXREZWJ1Z05hbWUobVBhc3NUaHJvdWdoSUwsICJTd2FwIGNoYWluIHBhc3MgdGhy
b3VnaCBsYXlvdXQiKTsKKworICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVy
KGdfVlNfUGFzc3Rocm91Z2gsIHNpemVvZihnX1ZTX1Bhc3N0aHJvdWdoKSwgTlVMTCwgJm1QYXNz
VGhyb3VnaFZTKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgIGQzZDExOjpT
ZXREZWJ1Z05hbWUobVBhc3NUaHJvdWdoVlMsICJTd2FwIGNoYWluIHBhc3MgdGhyb3VnaCB2ZXJ0
ZXggc2hhZGVyIik7CisKKyAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdf
UFNfUGFzc3Rocm91Z2hSR0JBLCBzaXplb2YoZ19QU19QYXNzdGhyb3VnaFJHQkEpLCBOVUxMLCAm
bVBhc3NUaHJvdWdoUFMpOworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgZDNk
MTE6OlNldERlYnVnTmFtZShtUGFzc1Rocm91Z2hQUywgIlN3YXAgY2hhaW4gcGFzcyB0aHJvdWdo
IHBpeGVsIHNoYWRlciIpOworfQorCisvLyBwYXJhbWV0ZXJzIHNob3VsZCBiZSB2YWxpZGF0ZWQv
Y2xhbXBlZCBieSBjYWxsZXIKK0VHTGludCBTd2FwQ2hhaW4xMTo6c3dhcFJlY3QoRUdMaW50IHgs
IEVHTGludCB5LCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQpCit7CisgICAgaWYgKCFtU3dh
cENoYWluKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEVHTF9TVUNDRVNTOworICAgIH0KKworICAg
IElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBJRDNE
MTFEZXZpY2VDb250ZXh0ICpkZXZpY2VDb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250
ZXh0KCk7CisKKyAgICAvLyBTZXQgdmVydGljZXMKKyAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VS
Q0UgbWFwcGVkUmVzb3VyY2U7CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2VDb250ZXh0LT5N
YXAobVF1YWRWQiwgMCwgRDNEMTFfTUFQX1dSSVRFX0RJU0NBUkQsIDAsICZtYXBwZWRSZXNvdXJj
ZSk7CisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEVHTF9C
QURfQUNDRVNTOworICAgIH0KKworICAgIGQzZDExOjpQb3NpdGlvblRleENvb3JkVmVydGV4ICp2
ZXJ0aWNlcyA9IHN0YXRpY19jYXN0PGQzZDExOjpQb3NpdGlvblRleENvb3JkVmVydGV4Kj4obWFw
cGVkUmVzb3VyY2UucERhdGEpOworCisgICAgLy8gQ3JlYXRlIGEgcXVhZCBpbiBob21vZ2VuZW91
cyBjb29yZGluYXRlcworICAgIGZsb2F0IHgxID0gKHggLyBmbG9hdChtV2lkdGgpKSAqIDIuMGYg
LSAxLjBmOworICAgIGZsb2F0IHkxID0gKHkgLyBmbG9hdChtSGVpZ2h0KSkgKiAyLjBmIC0gMS4w
ZjsKKyAgICBmbG9hdCB4MiA9ICgoeCArIHdpZHRoKSAvIGZsb2F0KG1XaWR0aCkpICogMi4wZiAt
IDEuMGY7CisgICAgZmxvYXQgeTIgPSAoKHkgKyBoZWlnaHQpIC8gZmxvYXQobUhlaWdodCkpICog
Mi4wZiAtIDEuMGY7CisKKyAgICBmbG9hdCB1MSA9IHggLyBmbG9hdChtV2lkdGgpOworICAgIGZs
b2F0IHYxID0geSAvIGZsb2F0KG1IZWlnaHQpOworICAgIGZsb2F0IHUyID0gKHggKyB3aWR0aCkg
LyBmbG9hdChtV2lkdGgpOworICAgIGZsb2F0IHYyID0gKHkgKyBoZWlnaHQpIC8gZmxvYXQobUhl
aWdodCk7CisKKyAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNb
MF0sIHgxLCB5MSwgdTEsIHYxKTsKKyAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRl
eCgmdmVydGljZXNbMV0sIHgxLCB5MiwgdTEsIHYyKTsKKyAgICBkM2QxMTo6U2V0UG9zaXRpb25U
ZXhDb29yZFZlcnRleCgmdmVydGljZXNbMl0sIHgyLCB5MSwgdTIsIHYxKTsKKyAgICBkM2QxMTo6
U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNbM10sIHgyLCB5MiwgdTIsIHYyKTsK
KworICAgIGRldmljZUNvbnRleHQtPlVubWFwKG1RdWFkVkIsIDApOworCisgICAgc3RhdGljIFVJ
TlQgc3RyaWRlID0gc2l6ZW9mKGQzZDExOjpQb3NpdGlvblRleENvb3JkVmVydGV4KTsKKyAgICBz
dGF0aWMgVUlOVCBzdGFydElkeCA9IDA7CisgICAgZGV2aWNlQ29udGV4dC0+SUFTZXRWZXJ0ZXhC
dWZmZXJzKDAsIDEsICZtUXVhZFZCLCAmc3RyaWRlLCAmc3RhcnRJZHgpOworCisgICAgLy8gQXBw
bHkgc3RhdGUKKyAgICBkZXZpY2VDb250ZXh0LT5PTVNldERlcHRoU3RlbmNpbFN0YXRlKE5VTEws
IDB4RkZGRkZGRkYpOworCisgICAgc3RhdGljIGNvbnN0IGZsb2F0IGJsZW5kRmFjdG9yWzRdID0g
eyAxLjBmLCAxLjBmLCAxLjBmLCAxLjBmIH07CisgICAgZGV2aWNlQ29udGV4dC0+T01TZXRCbGVu
ZFN0YXRlKE5VTEwsIGJsZW5kRmFjdG9yLCAweEZGRkZGRkYpOworCisgICAgZGV2aWNlQ29udGV4
dC0+UlNTZXRTdGF0ZShOVUxMKTsKKworICAgIC8vIEFwcGx5IHNoYWRlcnMKKyAgICBkZXZpY2VD
b250ZXh0LT5JQVNldElucHV0TGF5b3V0KG1QYXNzVGhyb3VnaElMKTsKKyAgICBkZXZpY2VDb250
ZXh0LT5JQVNldFByaW1pdGl2ZVRvcG9sb2d5KEQzRF9QUklNSVRJVkVfVE9QT0xPR1lfVFJJQU5H
TEVTVFJJUCk7CisgICAgZGV2aWNlQ29udGV4dC0+VlNTZXRTaGFkZXIobVBhc3NUaHJvdWdoVlMs
IE5VTEwsIDApOworICAgIGRldmljZUNvbnRleHQtPlBTU2V0U2hhZGVyKG1QYXNzVGhyb3VnaFBT
LCBOVUxMLCAwKTsKKyAgICBkZXZpY2VDb250ZXh0LT5HU1NldFNoYWRlcihOVUxMLCBOVUxMLCAw
KTsKKworICAgIC8vIEFwcGx5IHJlbmRlciB0YXJnZXRzCisgICAgbVJlbmRlcmVyLT5zZXRPbmVU
aW1lUmVuZGVyVGFyZ2V0KG1CYWNrQnVmZmVyUlRWaWV3KTsKKworICAgIC8vIFNldCB0aGUgdmll
d3BvcnQKKyAgICBEM0QxMV9WSUVXUE9SVCB2aWV3cG9ydDsKKyAgICB2aWV3cG9ydC5Ub3BMZWZ0
WCA9IDA7CisgICAgdmlld3BvcnQuVG9wTGVmdFkgPSAwOworICAgIHZpZXdwb3J0LldpZHRoID0g
bVdpZHRoOworICAgIHZpZXdwb3J0LkhlaWdodCA9IG1IZWlnaHQ7CisgICAgdmlld3BvcnQuTWlu
RGVwdGggPSAwLjBmOworICAgIHZpZXdwb3J0Lk1heERlcHRoID0gMS4wZjsKKyAgICBkZXZpY2VD
b250ZXh0LT5SU1NldFZpZXdwb3J0cygxLCAmdmlld3BvcnQpOworCisgICAgLy8gQXBwbHkgdGV4
dHVyZXMKKyAgICBkZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlclJlc291cmNlcygwLCAxLCAmbU9m
ZnNjcmVlblNSVmlldyk7CisgICAgZGV2aWNlQ29udGV4dC0+UFNTZXRTYW1wbGVycygwLCAxLCAm
bVBhc3NUaHJvdWdoU2FtcGxlcik7CisKKyAgICAvLyBEcmF3CisgICAgZGV2aWNlQ29udGV4dC0+
RHJhdyg0LCAwKTsKKworI2lmIEFOR0xFX0ZPUkNFX1ZTWU5DX09GRgorICAgIHJlc3VsdCA9IG1T
d2FwQ2hhaW4tPlByZXNlbnQoMCwgMCk7CisjZWxzZQorICAgIHJlc3VsdCA9IG1Td2FwQ2hhaW4t
PlByZXNlbnQobVN3YXBJbnRlcnZhbCwgMCk7CisjZW5kaWYKKworICAgIGlmIChyZXN1bHQgPT0g
RFhHSV9FUlJPUl9ERVZJQ0VfUkVNT1ZFRCkKKyAgICB7CisgICAgICAgIEhSRVNVTFQgcmVtb3Zl
ZFJlYXNvbiA9IGRldmljZS0+R2V0RGV2aWNlUmVtb3ZlZFJlYXNvbigpOworICAgICAgICBFUlIo
IlByZXNlbnQgZmFpbGVkOiB0aGUgRDNEMTEgZGV2aWNlIHdhcyByZW1vdmVkOiAweCUwOFgiLCBy
ZW1vdmVkUmVhc29uKTsKKyAgICAgICAgcmV0dXJuIEVHTF9DT05URVhUX0xPU1Q7CisgICAgfQor
ICAgIGVsc2UgaWYgKHJlc3VsdCA9PSBEWEdJX0VSUk9SX0RFVklDRV9SRVNFVCkKKyAgICB7Cisg
ICAgICAgIEVSUigiUHJlc2VudCBmYWlsZWQ6IHRoZSBEM0QxMSBkZXZpY2Ugd2FzIHJlc2V0IGZy
b20gYSBiYWQgY29tbWFuZC4iKTsKKyAgICAgICAgcmV0dXJuIEVHTF9DT05URVhUX0xPU1Q7Cisg
ICAgfQorICAgIGVsc2UgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJQ
cmVzZW50IGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgMHglMDhYIiwgcmVzdWx0KTsKKyAgICB9CisK
KyAgICAvLyBVbmJpbmQKKyAgICBzdGF0aWMgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpjb25z
dCBudWxsU1JWID0gTlVMTDsKKyAgICBkZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlclJlc291cmNl
cygwLCAxLCAmbnVsbFNSVik7CisKKyAgICBtUmVuZGVyZXItPnVuYXBwbHlSZW5kZXJUYXJnZXRz
KCk7CisgICAgbVJlbmRlcmVyLT5tYXJrQWxsU3RhdGVEaXJ0eSgpOworCisgICAgcmV0dXJuIEVH
TF9TVUNDRVNTOworfQorCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHRleHR1cmUuCisvLyBj
YWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHRleHR1cmUKK0lEM0QxMVRleHR1cmUy
RCAqU3dhcENoYWluMTE6OmdldE9mZnNjcmVlblRleHR1cmUoKQoreworICAgIGlmIChtT2Zmc2Ny
ZWVuVGV4dHVyZSkKKyAgICB7CisgICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5BZGRSZWYoKTsK
KyAgICB9CisKKyAgICByZXR1cm4gbU9mZnNjcmVlblRleHR1cmU7Cit9CisKKy8vIEluY3JlbWVu
dHMgcmVmY291bnQgb24gdmlldy4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJu
ZWQgdmlldworSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqU3dhcENoYWluMTE6OmdldFJlbmRlclRh
cmdldCgpCit7CisgICAgaWYgKG1PZmZzY3JlZW5SVFZpZXcpCisgICAgeworICAgICAgICBtT2Zm
c2NyZWVuUlRWaWV3LT5BZGRSZWYoKTsKKyAgICB9CisKKyAgICByZXR1cm4gbU9mZnNjcmVlblJU
VmlldzsKK30KKworLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiB2aWV3LgorLy8gY2FsbGVyIG11
c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCB2aWV3CitJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcg
KlN3YXBDaGFpbjExOjpnZXRSZW5kZXJUYXJnZXRTaGFkZXJSZXNvdXJjZSgpCit7CisgICAgaWYg
KG1PZmZzY3JlZW5TUlZpZXcpCisgICAgeworICAgICAgICBtT2Zmc2NyZWVuU1JWaWV3LT5BZGRS
ZWYoKTsKKyAgICB9CisKKyAgICByZXR1cm4gbU9mZnNjcmVlblNSVmlldzsKK30KKworLy8gSW5j
cmVtZW50cyByZWZjb3VudCBvbiB2aWV3LgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSBy
ZXR1cm5lZCB2aWV3CitJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpTd2FwQ2hhaW4xMTo6Z2V0RGVw
dGhTdGVuY2lsKCkKK3sKKyAgICBpZiAobURlcHRoU3RlbmNpbERTVmlldykKKyAgICB7CisgICAg
ICAgIG1EZXB0aFN0ZW5jaWxEU1ZpZXctPkFkZFJlZigpOworICAgIH0KKworICAgIHJldHVybiBt
RGVwdGhTdGVuY2lsRFNWaWV3OworfQorCitJRDNEMTFUZXh0dXJlMkQgKlN3YXBDaGFpbjExOjpn
ZXREZXB0aFN0ZW5jaWxUZXh0dXJlKCkKK3sKKyAgICBpZiAobURlcHRoU3RlbmNpbFRleHR1cmUp
CisgICAgeworICAgICAgICBtRGVwdGhTdGVuY2lsVGV4dHVyZS0+QWRkUmVmKCk7CisgICAgfQor
CisgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWxUZXh0dXJlOworfQorCitTd2FwQ2hhaW4xMSAqU3dh
cENoYWluMTE6Om1ha2VTd2FwQ2hhaW4xMShTd2FwQ2hhaW4gKnN3YXBDaGFpbikKK3sKKyAgICBB
U1NFUlQoSEFTX0RZTkFNSUNfVFlQRShyeDo6U3dhcENoYWluMTEqLCBzd2FwQ2hhaW4pKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8cng6OlN3YXBDaGFpbjExKj4oc3dhcENoYWluKTsKK30KKwor
dm9pZCBTd2FwQ2hhaW4xMTo6cmVjcmVhdGUoKQoreworICAgIC8vIHBvc3NpYmx5IHNob3VsZCB1
c2UgdGhpcyBtZXRob2QgaW5zdGVhZCBvZiByZXNldAorfQorCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFp
bjExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDExL1N3YXBDaGFpbjExLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODAwMTA0NjAyZTM1YjBiY2JhMTEwMzlhMTZl
YmZjNjExMTYxZWY2MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dhcENoYWluMTEuaApAQCAtMCwwICsxLDc4
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworLy8gU3dhcENoYWluMTEuaDogRGVmaW5lcyBhIGJhY2stZW5k
IHNwZWNpZmljIGNsYXNzIGZvciB0aGUgRDNEMTEgc3dhcCBjaGFpbi4KKworI2lmbmRlZiBMSUJH
TEVTVjJfUkVOREVSRVJfU1dBUENIQUlOMTFfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVS
X1NXQVBDSEFJTjExX0hfCisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9Td2FwQ2hhaW4uaCIKKworbmFtZXNwYWNlIHJ4Cit7Citj
bGFzcyBSZW5kZXJlcjExOworCitjbGFzcyBTd2FwQ2hhaW4xMSA6IHB1YmxpYyBTd2FwQ2hhaW4K
K3sKKyAgcHVibGljOgorICAgIFN3YXBDaGFpbjExKFJlbmRlcmVyMTEgKnJlbmRlcmVyLCBIV05E
IHdpbmRvdywgSEFORExFIHNoYXJlSGFuZGxlLAorICAgICAgICAgICAgICAgIEdMZW51bSBiYWNr
QnVmZmVyRm9ybWF0LCBHTGVudW0gZGVwdGhCdWZmZXJGb3JtYXQpOworICAgIHZpcnR1YWwgflN3
YXBDaGFpbjExKCk7CisKKyAgICBFR0xpbnQgcmVzaXplKEVHTGludCBiYWNrYnVmZmVyV2lkdGgs
IEVHTGludCBiYWNrYnVmZmVySGVpZ2h0KTsKKyAgICB2aXJ0dWFsIEVHTGludCByZXNldChFR0xp
bnQgYmFja2J1ZmZlcldpZHRoLCBFR0xpbnQgYmFja2J1ZmZlckhlaWdodCwgRUdMaW50IHN3YXBJ
bnRlcnZhbCk7CisgICAgdmlydHVhbCBFR0xpbnQgc3dhcFJlY3QoRUdMaW50IHgsIEVHTGludCB5
LCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQpOworICAgIHZpcnR1YWwgdm9pZCByZWNyZWF0
ZSgpOworCisgICAgdmlydHVhbCBJRDNEMTFUZXh0dXJlMkQgKmdldE9mZnNjcmVlblRleHR1cmUo
KTsKKyAgICB2aXJ0dWFsIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmdldFJlbmRlclRhcmdldCgp
OworICAgIHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpnZXRSZW5kZXJUYXJnZXRT
aGFkZXJSZXNvdXJjZSgpOworCisgICAgdmlydHVhbCBJRDNEMTFUZXh0dXJlMkQgKmdldERlcHRo
U3RlbmNpbFRleHR1cmUoKTsKKyAgICB2aXJ0dWFsIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKmdl
dERlcHRoU3RlbmNpbCgpOworCisgICAgRUdMaW50IGdldFdpZHRoKCkgY29uc3QgeyByZXR1cm4g
bVdpZHRoOyB9CisgICAgRUdMaW50IGdldEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1IZWlnaHQ7
IH0KKworICAgIHN0YXRpYyBTd2FwQ2hhaW4xMSAqbWFrZVN3YXBDaGFpbjExKFN3YXBDaGFpbiAq
c3dhcENoYWluKTsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihT
d2FwQ2hhaW4xMSk7CisKKyAgICB2b2lkIHJlbGVhc2UoKTsKKyAgICB2b2lkIGluaXRQYXNzVGhy
b3VnaFJlc291cmNlcygpOworICAgIHZvaWQgcmVsZWFzZU9mZnNjcmVlblRleHR1cmUoKTsKKyAg
ICBFR0xpbnQgcmVzZXRPZmZzY3JlZW5UZXh0dXJlKGludCBiYWNrYnVmZmVyV2lkdGgsIGludCBi
YWNrYnVmZmVySGVpZ2h0KTsKKworICAgIFJlbmRlcmVyMTEgKm1SZW5kZXJlcjsKKyAgICBFR0xp
bnQgbUhlaWdodDsKKyAgICBFR0xpbnQgbVdpZHRoOworICAgIGJvb2wgbUFwcENyZWF0ZWRTaGFy
ZUhhbmRsZTsKKyAgICB1bnNpZ25lZCBpbnQgbVN3YXBJbnRlcnZhbDsKKyAgICBib29sIG1QYXNz
VGhyb3VnaFJlc291cmNlc0luaXQ7CisKKyAgICBJRFhHSVN3YXBDaGFpbiAqbVN3YXBDaGFpbjsK
KworICAgIElEM0QxMVRleHR1cmUyRCAqbUJhY2tCdWZmZXJUZXh0dXJlOworICAgIElEM0QxMVJl
bmRlclRhcmdldFZpZXcgKm1CYWNrQnVmZmVyUlRWaWV3OworCisgICAgSUQzRDExVGV4dHVyZTJE
ICptT2Zmc2NyZWVuVGV4dHVyZTsKKyAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICptT2Zmc2Ny
ZWVuUlRWaWV3OworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqbU9mZnNjcmVlblNSVmll
dzsKKworICAgIElEM0QxMVRleHR1cmUyRCAqbURlcHRoU3RlbmNpbFRleHR1cmU7CisgICAgSUQz
RDExRGVwdGhTdGVuY2lsVmlldyAqbURlcHRoU3RlbmNpbERTVmlldzsKKworICAgIElEM0QxMUJ1
ZmZlciAqbVF1YWRWQjsKKyAgICBJRDNEMTFTYW1wbGVyU3RhdGUgKm1QYXNzVGhyb3VnaFNhbXBs
ZXI7CisgICAgSUQzRDExSW5wdXRMYXlvdXQgKm1QYXNzVGhyb3VnaElMOworICAgIElEM0QxMVZl
cnRleFNoYWRlciAqbVBhc3NUaHJvdWdoVlM7CisgICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1QYXNz
VGhyb3VnaFBTOworfTsKKworfQorI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9TV0FQQ0hB
SU4xMV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9UZXh0dXJlU3RvcmFnZTExLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVGV4dHVyZVN0b3JhZ2UxMS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNWY2ZWEyMTJkNWEwNjAxNzk3OThhOGNkMGY4MDI3NGE5NWM2YjQ5ZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvVGV4dHVyZVN0b3JhZ2UxMS5jcHAKQEAgLTAsMCArMSw2NjcgQEAKKyNpbmNs
dWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFRleHR1cmVTdG9yYWdlMTEu
Y3BwOiBJbXBsZW1lbnRzIHRoZSBhYnN0cmFjdCByeDo6VGV4dHVyZVN0b3JhZ2UxMSBjbGFzcyBh
bmQgaXRzIGNvbmNyZXRlIGRlcml2ZWQKKy8vIGNsYXNzZXMgVGV4dHVyZVN0b3JhZ2UxMV8yRCBh
bmQgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlLCB3aGljaCBhY3QgYXMgdGhlIGludGVyZmFjZSB0byB0
aGUgRDNEMTEgdGV4dHVyZS4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9U
ZXh0dXJlU3RvcmFnZTExLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
UmVuZGVyZXIxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJU
YXJnZXQxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9Td2FwQ2hhaW4x
MS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxz
LmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL21haW4uaCIKKworbmFtZXNwYWNlIHJ4Cit7CisKK1RleHR1cmVTdG9yYWdlMTE6OlRleHR1
cmVTdG9yYWdlMTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBVSU5UIGJpbmRGbGFncykKKyAgICA6IG1C
aW5kRmxhZ3MoYmluZEZsYWdzKSwKKyAgICAgIG1Mb2RPZmZzZXQoMCksCisgICAgICBtTWlwTGV2
ZWxzKDApLAorICAgICAgbVRleHR1cmUoTlVMTCksCisgICAgICBtVGV4dHVyZUZvcm1hdChEWEdJ
X0ZPUk1BVF9VTktOT1dOKSwKKyAgICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdChEWEdJX0ZPUk1B
VF9VTktOT1dOKSwKKyAgICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQoRFhHSV9GT1JNQVRfVU5LTk9X
TiksCisgICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFUX1VOS05PV04pLAorICAg
ICAgbVNSVihOVUxMKSwKKyAgICAgIG1UZXh0dXJlV2lkdGgoMCksCisgICAgICBtVGV4dHVyZUhl
aWdodCgwKQoreworICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKHJl
bmRlcmVyKTsKK30KKworVGV4dHVyZVN0b3JhZ2UxMTo6flRleHR1cmVTdG9yYWdlMTEoKQorewor
fQorCitUZXh0dXJlU3RvcmFnZTExICpUZXh0dXJlU3RvcmFnZTExOjptYWtlVGV4dHVyZVN0b3Jh
Z2UxMShUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSkKK3sKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNf
VFlQRShUZXh0dXJlU3RvcmFnZTExKiwgc3RvcmFnZSkpOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUZXh0dXJlU3RvcmFnZTExKj4oc3RvcmFnZSk7Cit9CisKK0RXT1JEIFRleHR1cmVTdG9yYWdl
MTE6OkdldFRleHR1cmVCaW5kRmxhZ3MoRFhHSV9GT1JNQVQgZm9ybWF0LCBHTGVudW0gZ2x1c2Fn
ZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUpCit7CisgICAgVUlOVCBiaW5kRmxhZ3MgPSBEM0QxMV9C
SU5EX1NIQURFUl9SRVNPVVJDRTsKKyAgICAKKyAgICBpZiAoZDNkMTE6OklzRGVwdGhTdGVuY2ls
Rm9ybWF0KGZvcm1hdCkpCisgICAgeworICAgICAgICBiaW5kRmxhZ3MgfD0gRDNEMTFfQklORF9E
RVBUSF9TVEVOQ0lMOworICAgIH0KKyAgICBlbHNlIGlmKGZvcmNlUmVuZGVyYWJsZSB8fCAoVGV4
dHVyZVN0b3JhZ2UxMTo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShmb3JtYXQpICYmIChnbHVz
YWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpKSkKKyAgICB7CisgICAgICAg
IGJpbmRGbGFncyB8PSBEM0QxMV9CSU5EX1JFTkRFUl9UQVJHRVQ7CisgICAgfQorICAgIHJldHVy
biBiaW5kRmxhZ3M7Cit9CisKK2Jvb2wgVGV4dHVyZVN0b3JhZ2UxMTo6SXNUZXh0dXJlRm9ybWF0
UmVuZGVyYWJsZShEWEdJX0ZPUk1BVCBmb3JtYXQpCit7CisgICAgc3dpdGNoKGZvcm1hdCkKKyAg
ICB7CisgICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOgorICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9BOF9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMy
X0ZMT0FUOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6CisgICAg
ICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9SOF9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9VTk9STToKKyAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfUjE2X0ZMT0FUOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZf
RkxPQVQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFf
VU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STTogCisgICAgICBjYXNlIERY
R0lfRk9STUFUX0JDM19VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZM
T0FUOiAvLyBub3QgcmVuZGVyYWJsZSBvbiBhbGwgZGV2aWNlcworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCitVSU5UIFRleHR1cmVTdG9yYWdlMTE6OmdldEJpbmRGbGFn
cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1CaW5kRmxhZ3M7Cit9CisKK0lEM0QxMVRleHR1cmUy
RCAqVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0QmFzZVRleHR1cmUoKSBjb25zdAoreworICAgIHJldHVy
biBtVGV4dHVyZTsKK30KKworaW50IFRleHR1cmVTdG9yYWdlMTE6OmdldExvZE9mZnNldCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1Mb2RPZmZzZXQ7Cit9CisKK2Jvb2wgVGV4dHVyZVN0b3JhZ2Ux
MTo6aXNSZW5kZXJUYXJnZXQoKSBjb25zdAoreworICAgIHJldHVybiAobUJpbmRGbGFncyAmIChE
M0QxMV9CSU5EX1JFTkRFUl9UQVJHRVQgfCBEM0QxMV9CSU5EX0RFUFRIX1NURU5DSUwpKSAhPSAw
OworfQorICAgIAorYm9vbCBUZXh0dXJlU3RvcmFnZTExOjppc01hbmFnZWQoKSBjb25zdAorewor
ICAgIHJldHVybiBmYWxzZTsKK30KKworaW50IFRleHR1cmVTdG9yYWdlMTE6OmxldmVsQ291bnQo
KQoreworICAgIGludCBsZXZlbHMgPSAwOworICAgIGlmIChnZXRCYXNlVGV4dHVyZSgpKQorICAg
IHsKKyAgICAgICAgbGV2ZWxzID0gbU1pcExldmVscyAtIGdldExvZE9mZnNldCgpOworICAgIH0K
KyAgICByZXR1cm4gbGV2ZWxzOworfQorCitVSU5UIFRleHR1cmVTdG9yYWdlMTE6OmdldFN1YnJl
c291cmNlSW5kZXgoaW50IGxldmVsLCBpbnQgZmFjZUluZGV4KQoreworICAgIFVJTlQgaW5kZXgg
PSAwOworICAgIGlmIChnZXRCYXNlVGV4dHVyZSgpKQorICAgIHsKKyAgICAgICAgaW5kZXggPSBE
M0QxMUNhbGNTdWJyZXNvdXJjZShsZXZlbCwgZmFjZUluZGV4LCBtTWlwTGV2ZWxzKTsKKyAgICB9
CisgICAgcmV0dXJuIGluZGV4OworfQorCitib29sIFRleHR1cmVTdG9yYWdlMTE6OnVwZGF0ZVN1
YnJlc291cmNlTGV2ZWwoSUQzRDExVGV4dHVyZTJEICpzcmNUZXh0dXJlLCB1bnNpZ25lZCBpbnQg
c291cmNlU3VicmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGxldmVsLCBpbnQgZmFjZSwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBpZiAoc3JjVGV4dHVyZSkKKyAgICB7Cisg
ICAgICAgIC8vIFJvdW5kIHVwIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IHRvIHRoZSBuZWFyZXN0IG11
bHRpcGxlIG9mIGRpbWVuc2lvbiBhbGlnbm1lbnQKKyAgICAgICAgdW5zaWduZWQgaW50IGRpbWVu
c2lvbkFsaWdubWVudCA9IGQzZDExOjpHZXRUZXh0dXJlRm9ybWF0RGltZW5zaW9uQWxpZ25tZW50
KG1UZXh0dXJlRm9ybWF0KTsKKyAgICAgICAgd2lkdGggPSB3aWR0aCArIGRpbWVuc2lvbkFsaWdu
bWVudCAtIDEgLSAod2lkdGggLSAxKSAlIGRpbWVuc2lvbkFsaWdubWVudDsKKyAgICAgICAgaGVp
Z2h0ID0gaGVpZ2h0ICsgZGltZW5zaW9uQWxpZ25tZW50IC0gMSAtIChoZWlnaHQgLSAxKSAlIGRp
bWVuc2lvbkFsaWdubWVudDsKKworICAgICAgICBEM0QxMV9CT1ggc3JjQm94OworICAgICAgICBz
cmNCb3gubGVmdCA9IHhvZmZzZXQ7CisgICAgICAgIHNyY0JveC50b3AgPSB5b2Zmc2V0OworICAg
ICAgICBzcmNCb3gucmlnaHQgPSB4b2Zmc2V0ICsgd2lkdGg7CisgICAgICAgIHNyY0JveC5ib3R0
b20gPSB5b2Zmc2V0ICsgaGVpZ2h0OworICAgICAgICBzcmNCb3guZnJvbnQgPSAwOworICAgICAg
ICBzcmNCb3guYmFjayA9IDE7CisKKyAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4
dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworICAgICAgICAKKyAgICAgICAgQVNT
RVJUKGdldEJhc2VUZXh0dXJlKCkpOworICAgICAgICBjb250ZXh0LT5Db3B5U3VicmVzb3VyY2VS
ZWdpb24oZ2V0QmFzZVRleHR1cmUoKSwgZ2V0U3VicmVzb3VyY2VJbmRleChsZXZlbCArIG1Mb2RP
ZmZzZXQsIGZhY2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG9m
ZnNldCwgeW9mZnNldCwgMCwgc3JjVGV4dHVyZSwgc291cmNlU3VicmVzb3VyY2UsICZzcmNCb3gp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2VuZXJhdGVNaXBtYXBMYXllcihSZW5kZXJUYXJnZXQx
MSAqc291cmNlLCBSZW5kZXJUYXJnZXQxMSAqZGVzdCkKK3sKKyAgICBpZiAoc291cmNlICYmIGRl
c3QpCisgICAgeworICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNvdXJjZVNSViA9
IHNvdXJjZS0+Z2V0U2hhZGVyUmVzb3VyY2VWaWV3KCk7CisgICAgICAgIElEM0QxMVJlbmRlclRh
cmdldFZpZXcgKmRlc3RSVFYgPSBkZXN0LT5nZXRSZW5kZXJUYXJnZXRWaWV3KCk7CisKKyAgICAg
ICAgaWYgKHNvdXJjZVNSViAmJiBkZXN0UlRWKQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6
UmVjdGFuZ2xlIHNvdXJjZUFyZWE7CisgICAgICAgICAgICBzb3VyY2VBcmVhLnggPSAwOworICAg
ICAgICAgICAgc291cmNlQXJlYS55ID0gMDsKKyAgICAgICAgICAgIHNvdXJjZUFyZWEud2lkdGgg
PSBzb3VyY2UtPmdldFdpZHRoKCk7CisgICAgICAgICAgICBzb3VyY2VBcmVhLmhlaWdodCA9IHNv
dXJjZS0+Z2V0SGVpZ2h0KCk7CisKKyAgICAgICAgICAgIGdsOjpSZWN0YW5nbGUgZGVzdEFyZWE7
CisgICAgICAgICAgICBkZXN0QXJlYS54ID0gMDsKKyAgICAgICAgICAgIGRlc3RBcmVhLnkgPSAw
OworICAgICAgICAgICAgZGVzdEFyZWEud2lkdGggPSBkZXN0LT5nZXRXaWR0aCgpOworICAgICAg
ICAgICAgZGVzdEFyZWEuaGVpZ2h0ID0gZGVzdC0+Z2V0SGVpZ2h0KCk7CisKKyAgICAgICAgICAg
IG1SZW5kZXJlci0+Y29weVRleHR1cmUoc291cmNlU1JWLCBzb3VyY2VBcmVhLCBzb3VyY2UtPmdl
dFdpZHRoKCksIHNvdXJjZS0+Z2V0SGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RSVFYsIGRlc3RBcmVhLCBkZXN0LT5nZXRXaWR0aCgpLCBkZXN0LT5nZXRI
ZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCQSk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK1RleHR1cmVTdG9yYWdlMTFfMkQ6OlRleHR1cmVTdG9yYWdl
MTFfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBTd2FwQ2hhaW4xMSAqc3dhcGNoYWluKQorICAgIDog
VGV4dHVyZVN0b3JhZ2UxMShyZW5kZXJlciwgRDNEMTFfQklORF9SRU5ERVJfVEFSR0VUIHwgRDNE
MTFfQklORF9TSEFERVJfUkVTT1VSQ0UpCit7CisgICAgbVRleHR1cmUgPSBzd2FwY2hhaW4tPmdl
dE9mZnNjcmVlblRleHR1cmUoKTsKKyAgICBtU1JWID0gc3dhcGNoYWluLT5nZXRSZW5kZXJUYXJn
ZXRTaGFkZXJSZXNvdXJjZSgpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBn
bDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCisgICAgeworICAgICAg
ICBtUmVuZGVyVGFyZ2V0W2ldID0gTlVMTDsKKyAgICB9CisKKyAgICBEM0QxMV9URVhUVVJFMkRf
REVTQyB0ZXhEZXNjOworICAgIG1UZXh0dXJlLT5HZXREZXNjKCZ0ZXhEZXNjKTsKKyAgICBtTWlw
TGV2ZWxzID0gdGV4RGVzYy5NaXBMZXZlbHM7CisgICAgbVRleHR1cmVGb3JtYXQgPSB0ZXhEZXNj
LkZvcm1hdDsKKyAgICBtVGV4dHVyZVdpZHRoID0gdGV4RGVzYy5XaWR0aDsKKyAgICBtVGV4dHVy
ZUhlaWdodCA9IHRleERlc2MuSGVpZ2h0OworCisgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJ
RVdfREVTQyBzcnZEZXNjOworICAgIG1TUlYtPkdldERlc2MoJnNydkRlc2MpOworICAgIG1TaGFk
ZXJSZXNvdXJjZUZvcm1hdCA9IHNydkRlc2MuRm9ybWF0OworCisgICAgSUQzRDExUmVuZGVyVGFy
Z2V0Vmlldyogb2Zmc2NyZWVuUlRWID0gc3dhcGNoYWluLT5nZXRSZW5kZXJUYXJnZXQoKTsKKyAg
ICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOworICAgIG9mZnNjcmVlblJU
Vi0+R2V0RGVzYygmcnR2RGVzYyk7CisgICAgbVJlbmRlclRhcmdldEZvcm1hdCA9IHJ0dkRlc2Mu
Rm9ybWF0OworICAgIG9mZnNjcmVlblJUVi0+UmVsZWFzZSgpOworCisgICAgbURlcHRoU3RlbmNp
bEZvcm1hdCA9IERYR0lfRk9STUFUX1VOS05PV047Cit9CisKK1RleHR1cmVTdG9yYWdlMTFfMkQ6
OlRleHR1cmVTdG9yYWdlMTFfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQorICAgIDogVGV4dHVyZVN0b3JhZ2UxMShyZW5k
ZXJlciwgR2V0VGV4dHVyZUJpbmRGbGFncyhnbF9kM2QxMTo6Q29udmVydFRleHR1cmVGb3JtYXQo
aW50ZXJuYWxmb3JtYXQpLCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlKSkKK3sKKyAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZF
TFM7IGkrKykKKyAgICB7CisgICAgICAgIG1SZW5kZXJUYXJnZXRbaV0gPSBOVUxMOworICAgIH0K
KworICAgIERYR0lfRk9STUFUIGNvbnZlcnRlZEZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0VGV4
dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1hdCk7CisgICAgaWYgKGQzZDExOjpJc0RlcHRoU3RlbmNp
bEZvcm1hdChjb252ZXJ0ZWRGb3JtYXQpKQorICAgIHsKKyAgICAgICAgbVRleHR1cmVGb3JtYXQg
PSBkM2QxMTo6R2V0RGVwdGhUZXh0dXJlRm9ybWF0KGNvbnZlcnRlZEZvcm1hdCk7CisgICAgICAg
IG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IGQzZDExOjpHZXREZXB0aFNoYWRlclJlc291cmNlRm9y
bWF0KGNvbnZlcnRlZEZvcm1hdCk7CisgICAgICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBjb252
ZXJ0ZWRGb3JtYXQ7CisgICAgICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBEWEdJX0ZPUk1BVF9V
TktOT1dOOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtVGV4dHVyZUZvcm1hdCA9
IGNvbnZlcnRlZEZvcm1hdDsKKyAgICAgICAgbVNoYWRlclJlc291cmNlRm9ybWF0ID0gY29udmVy
dGVkRm9ybWF0OworICAgICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5L
Tk9XTjsKKyAgICAgICAgbVJlbmRlclRhcmdldEZvcm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKKyAg
ICB9CisKKyAgICAvLyBpZiB0aGUgd2lkdGggb3IgaGVpZ2h0IGlzIG5vdCBwb3NpdGl2ZSB0aGlz
IHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGluY29tcGxldGUgdGV4dHVyZQorICAgIC8vIHdlIGhh
bmRsZSB0aGF0IGhlcmUgYnkgc2tpcHBpbmcgdGhlIGQzZCB0ZXh0dXJlIGNyZWF0aW9uCisgICAg
aWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKQorICAgIHsKKyAgICAgICAgLy8gYWRqdXN0IHNp
emUgaWYgbmVlZGVkIGZvciBjb21wcmVzc2VkIHRleHR1cmVzCisgICAgICAgIGdsOjpNYWtlVmFs
aWRTaXplKGZhbHNlLCBnbDo6SXNDb21wcmVzc2VkKGludGVybmFsZm9ybWF0KSwgJndpZHRoLCAm
aGVpZ2h0LCAmbUxvZE9mZnNldCk7CisKKyAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBt
UmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIGRl
c2M7CisgICAgICAgIGRlc2MuV2lkdGggPSB3aWR0aDsgICAgICAvLyBDb21wcmVzc2VkIHRleHR1
cmUgc2l6ZSBjb25zdHJhaW50cz8KKyAgICAgICAgZGVzYy5IZWlnaHQgPSBoZWlnaHQ7CisgICAg
ICAgIGRlc2MuTWlwTGV2ZWxzID0gKGxldmVscyA+IDApID8gbGV2ZWxzICsgbUxvZE9mZnNldCA6
IDA7CisgICAgICAgIGRlc2MuQXJyYXlTaXplID0gMTsKKyAgICAgICAgZGVzYy5Gb3JtYXQgPSBt
VGV4dHVyZUZvcm1hdDsKKyAgICAgICAgZGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gMTsKKyAgICAg
ICAgZGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOworICAgICAgICBkZXNjLlVzYWdlID0gRDNE
MTFfVVNBR0VfREVGQVVMVDsKKyAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSBnZXRCaW5kRmxhZ3Mo
KTsKKyAgICAgICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7CisgICAgICAgIGRlc2MuTWlzY0Zs
YWdzID0gMDsKKworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVy
ZTJEKCZkZXNjLCBOVUxMLCAmbVRleHR1cmUpOworCisgICAgICAgIC8vIHRoaXMgY2FuIGhhcHBl
biBmcm9tIHdpbmRvd3MgVERSCisgICAgICAgIGlmIChkM2QxMTo6aXNEZXZpY2VMb3N0RXJyb3Io
cmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgbVJlbmRlcmVyLT5ub3RpZnlEZXZpY2VM
b3N0KCk7CisgICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEFTU0VSVChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgICAgICBFUlIoIkNy
ZWF0aW5nIGltYWdlIGZhaWxlZC4iKTsKKyAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1UZXh0dXJlLT5HZXREZXNjKCZkZXNjKTsKKyAgICAgICAgICAgIG1NaXBMZXZlbHMgPSBkZXNj
Lk1pcExldmVsczsKKyAgICAgICAgICAgIG1UZXh0dXJlV2lkdGggPSBkZXNjLldpZHRoOworICAg
ICAgICAgICAgbVRleHR1cmVIZWlnaHQgPSBkZXNjLkhlaWdodDsKKyAgICAgICAgfQorICAgIH0K
K30KKworVGV4dHVyZVN0b3JhZ2UxMV8yRDo6flRleHR1cmVTdG9yYWdlMTFfMkQoKQoreworICAg
IGlmIChtVGV4dHVyZSkKKyAgICB7CisgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7CisgICAg
ICAgIG1UZXh0dXJlID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAobVNSVikKKyAgICB7CisgICAg
ICAgIG1TUlYtPlJlbGVhc2UoKTsKKyAgICAgICAgbVNSViA9IE5VTEw7CisgICAgfQorCisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRV
UkVfTEVWRUxTOyBpKyspCisgICAgeworICAgICAgICBkZWxldGUgbVJlbmRlclRhcmdldFtpXTsK
KyAgICAgICAgbVJlbmRlclRhcmdldFtpXSA9IE5VTEw7CisgICAgfQorfQorCitUZXh0dXJlU3Rv
cmFnZTExXzJEICpUZXh0dXJlU3RvcmFnZTExXzJEOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yRChU
ZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSkKK3sKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShU
ZXh0dXJlU3RvcmFnZTExXzJEKiwgc3RvcmFnZSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
ZXh0dXJlU3RvcmFnZTExXzJEKj4oc3RvcmFnZSk7Cit9CisKK1JlbmRlclRhcmdldCAqVGV4dHVy
ZVN0b3JhZ2UxMV8yRDo6Z2V0UmVuZGVyVGFyZ2V0KGludCBsZXZlbCkKK3sKKyAgICBpZiAobGV2
ZWwgPj0gMCAmJiBsZXZlbCA8IHN0YXRpY19jYXN0PGludD4obU1pcExldmVscykpCisgICAgewor
ICAgICAgICBpZiAoIW1SZW5kZXJUYXJnZXRbbGV2ZWxdKQorICAgICAgICB7CisgICAgICAgICAg
ICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgICAg
ICAgICBIUkVTVUxUIHJlc3VsdDsKKworICAgICAgICAgICAgRDNEMTFfU0hBREVSX1JFU09VUkNF
X1ZJRVdfREVTQyBzcnZEZXNjOworICAgICAgICAgICAgc3J2RGVzYy5Gb3JtYXQgPSBtU2hhZGVy
UmVzb3VyY2VGb3JtYXQ7CisgICAgICAgICAgICBzcnZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0Qx
MV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyRDsKKyAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJE
Lk1vc3REZXRhaWxlZE1pcCA9IGxldmVsOworICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkQu
TWlwTGV2ZWxzID0gMTsKKworICAgICAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpz
cnY7CisgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmll
dyhtVGV4dHVyZSwgJnNydkRlc2MsICZzcnYpOworCisgICAgICAgICAgICBpZiAocmVzdWx0ID09
IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihOVUxM
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkp
OworCisgICAgICAgICAgICBpZiAobVJlbmRlclRhcmdldEZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9V
TktOT1dOKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEQzRDExX1JFTkRFUl9UQVJH
RVRfVklFV19ERVNDIHJ0dkRlc2M7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5Gb3JtYXQgPSBt
UmVuZGVyVGFyZ2V0Rm9ybWF0OworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVmlld0RpbWVuc2lv
biA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJEOworICAgICAgICAgICAgICAgIHJ0dkRl
c2MuVGV4dHVyZTJELk1pcFNsaWNlID0gbGV2ZWw7CisKKyAgICAgICAgICAgICAgICBJRDNEMTFS
ZW5kZXJUYXJnZXRWaWV3ICpydHY7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5D
cmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1UZXh0dXJlLCAmcnR2RGVzYywgJnJ0dik7CisKKyAgICAg
ICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBzcnYtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5kZXJU
YXJnZXQqPihOVUxMKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFTU0VS
VChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgICAgICAgICAvLyBSZW5kZXJUYXJnZXQx
MSBleHBlY3RzIHRvIGJlIHRoZSBvd25lciBvZiB0aGUgcmVzb3VyY2VzIGl0IGlzIGdpdmVuIGJ1
dCBUZXh0dXJlU3RvcmFnZTExCisgICAgICAgICAgICAgICAgLy8gYWxzbyBuZWVkcyB0byBrZWVw
IGEgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0dXJlLgorICAgICAgICAgICAgICAgIG1UZXh0dXJlLT5B
ZGRSZWYoKTsKKworICAgICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbbGV2ZWxdID0gbmV3IFJl
bmRlclRhcmdldDExKG1SZW5kZXJlciwgcnR2LCBtVGV4dHVyZSwgc3J2LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1U
ZXh0dXJlV2lkdGggPj4gbGV2ZWwsIDFVKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVyZUhlaWdodCA+PiBs
ZXZlbCwgMVUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1EZXB0aFN0
ZW5jaWxGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBEM0QxMV9ERVBUSF9TVEVOQ0lMX1ZJRVdfREVTQyBkc3ZEZXNjOworICAgICAg
ICAgICAgICAgIGRzdkRlc2MuRm9ybWF0ID0gbURlcHRoU3RlbmNpbEZvcm1hdDsKKyAgICAgICAg
ICAgICAgICBkc3ZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9EU1ZfRElNRU5TSU9OX1RFWFRV
UkUyRDsKKyAgICAgICAgICAgICAgICBkc3ZEZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IGxldmVs
OworICAgICAgICAgICAgICAgIGRzdkRlc2MuRmxhZ3MgPSAwOworCisgICAgICAgICAgICAgICAg
SUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZHN2OworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRl
dmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsVmlldyhtVGV4dHVyZSwgJmRzdkRlc2MsICZkc3YpOwor
CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3J2LT5SZWxlYXNlKCk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8
UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAgICAgICAgLy8gUmVuZGVy
VGFyZ2V0MTEgZXhwZWN0cyB0byBiZSB0aGUgb3duZXIgb2YgdGhlIHJlc291cmNlcyBpdCBpcyBn
aXZlbiBidXQgVGV4dHVyZVN0b3JhZ2UxMQorICAgICAgICAgICAgICAgIC8vIGFsc28gbmVlZHMg
dG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgdGV4dHVyZS4KKyAgICAgICAgICAgICAgICBtVGV4
dHVyZS0+QWRkUmVmKCk7CisKKyAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2xldmVsXSA9
IG5ldyBSZW5kZXJUYXJnZXQxMShtUmVuZGVyZXIsIGRzdiwgbVRleHR1cmUsIHNydiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6
Om1heChtVGV4dHVyZVdpZHRoID4+IGxldmVsLCAxVSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobVRleHR1cmVIZWln
aHQgPj4gbGV2ZWwsIDFVKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0W2xldmVsXTsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCitJRDNE
MTFTaGFkZXJSZXNvdXJjZVZpZXcgKlRleHR1cmVTdG9yYWdlMTFfMkQ6OmdldFNSVigpCit7Cisg
ICAgaWYgKCFtU1JWKQorICAgIHsKKyAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVu
ZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVX
X0RFU0Mgc3J2RGVzYzsKKyAgICAgICAgc3J2RGVzYy5Gb3JtYXQgPSBtU2hhZGVyUmVzb3VyY2VG
b3JtYXQ7CisgICAgICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJ
T05fVEVYVFVSRTJEOworICAgICAgICBzcnZEZXNjLlRleHR1cmUyRC5NaXBMZXZlbHMgPSAobU1p
cExldmVscyA9PSAwID8gLTEgOiBtTWlwTGV2ZWxzKTsKKyAgICAgICAgc3J2RGVzYy5UZXh0dXJl
MkQuTW9zdERldGFpbGVkTWlwID0gMDsKKworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KG1UZXh0dXJlLCAmc3J2RGVzYywgJm1TUlYpOwor
CisgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxJRDNE
MTFTaGFkZXJSZXNvdXJjZVZpZXcqPihOVUxMKSk7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICB9CisKKyAgICByZXR1cm4gbVNSVjsKK30KKwordm9p
ZCBUZXh0dXJlU3RvcmFnZTExXzJEOjpnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpCit7CisgICAg
UmVuZGVyVGFyZ2V0MTEgKnNvdXJjZSA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0
MTEoZ2V0UmVuZGVyVGFyZ2V0KGxldmVsIC0gMSkpOworICAgIFJlbmRlclRhcmdldDExICpkZXN0
ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShnZXRSZW5kZXJUYXJnZXQobGV2
ZWwpKTsKKworICAgIGdlbmVyYXRlTWlwbWFwTGF5ZXIoc291cmNlLCBkZXN0KTsKK30KKworVGV4
dHVyZVN0b3JhZ2UxMV9DdWJlOjpUZXh0dXJlU3RvcmFnZTExX0N1YmUoUmVuZGVyZXIgKnJlbmRl
cmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9v
bCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKQorICAgIDogVGV4dHVyZVN0b3JhZ2UxMShyZW5k
ZXJlciwgR2V0VGV4dHVyZUJpbmRGbGFncyhnbF9kM2QxMTo6Q29udmVydFRleHR1cmVGb3JtYXQo
aW50ZXJuYWxmb3JtYXQpLCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlKSkKK3sKKyAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IDY7IGkrKykKKyAgICB7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGogPSAwOyBqIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsg
aisrKQorICAgICAgICB7CisgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2ldW2pdID0gTlVMTDsK
KyAgICAgICAgfQorICAgIH0KKworICAgIERYR0lfRk9STUFUIGNvbnZlcnRlZEZvcm1hdCA9IGds
X2QzZDExOjpDb252ZXJ0VGV4dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1hdCk7CisgICAgaWYgKGQz
ZDExOjpJc0RlcHRoU3RlbmNpbEZvcm1hdChjb252ZXJ0ZWRGb3JtYXQpKQorICAgIHsKKyAgICAg
ICAgbVRleHR1cmVGb3JtYXQgPSBkM2QxMTo6R2V0RGVwdGhUZXh0dXJlRm9ybWF0KGNvbnZlcnRl
ZEZvcm1hdCk7CisgICAgICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IGQzZDExOjpHZXREZXB0
aFNoYWRlclJlc291cmNlRm9ybWF0KGNvbnZlcnRlZEZvcm1hdCk7CisgICAgICAgIG1EZXB0aFN0
ZW5jaWxGb3JtYXQgPSBjb252ZXJ0ZWRGb3JtYXQ7CisgICAgICAgIG1SZW5kZXJUYXJnZXRGb3Jt
YXQgPSBEWEdJX0ZPUk1BVF9VTktOT1dOOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICBtVGV4dHVyZUZvcm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKKyAgICAgICAgbVNoYWRlclJlc291
cmNlRm9ybWF0ID0gY29udmVydGVkRm9ybWF0OworICAgICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0
ID0gRFhHSV9GT1JNQVRfVU5LTk9XTjsKKyAgICAgICAgbVJlbmRlclRhcmdldEZvcm1hdCA9IGNv
bnZlcnRlZEZvcm1hdDsKKyAgICB9CisKKyAgICAvLyBpZiB0aGUgc2l6ZSBpcyBub3QgcG9zaXRp
dmUgdGhpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBsZXRlIHRleHR1cmUKKyAgICAv
LyB3ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBkM2QgdGV4dHVyZSBjcmVhdGlv
bgorICAgIGlmIChzaXplID4gMCkKKyAgICB7CisgICAgICAgIC8vIGFkanVzdCBzaXplIGlmIG5l
ZWRlZCBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlcworICAgICAgICBpbnQgaGVpZ2h0ID0gc2l6ZTsK
KyAgICAgICAgZ2w6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIGdsOjpJc0NvbXByZXNzZWQoaW50ZXJu
YWxmb3JtYXQpLCAmc2l6ZSwgJmhlaWdodCwgJm1Mb2RPZmZzZXQpOworCisgICAgICAgIElEM0Qx
MURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICBEM0Qx
MV9URVhUVVJFMkRfREVTQyBkZXNjOworICAgICAgICBkZXNjLldpZHRoID0gc2l6ZTsKKyAgICAg
ICAgZGVzYy5IZWlnaHQgPSBzaXplOworICAgICAgICBkZXNjLk1pcExldmVscyA9IChsZXZlbHMg
PiAwKSA/IGxldmVscyArIG1Mb2RPZmZzZXQgOiAwOworICAgICAgICBkZXNjLkFycmF5U2l6ZSA9
IDY7CisgICAgICAgIGRlc2MuRm9ybWF0ID0gbVRleHR1cmVGb3JtYXQ7CisgICAgICAgIGRlc2Mu
U2FtcGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0g
MDsKKyAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7CisgICAgICAgIGRl
c2MuQmluZEZsYWdzID0gZ2V0QmluZEZsYWdzKCk7CisgICAgICAgIGRlc2MuQ1BVQWNjZXNzRmxh
Z3MgPSAwOworICAgICAgICBkZXNjLk1pc2NGbGFncyA9IEQzRDExX1JFU09VUkNFX01JU0NfVEVY
VFVSRUNVQkU7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1
cmUyRCgmZGVzYywgTlVMTCwgJm1UZXh0dXJlKTsKKworICAgICAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRV9PVVRPRk1FTU9S
WSk7CisgICAgICAgICAgICBFUlIoIkNyZWF0aW5nIGltYWdlIGZhaWxlZC4iKTsKKyAgICAgICAg
ICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1UZXh0dXJlLT5HZXREZXNjKCZkZXNjKTsKKyAgICAg
ICAgICAgIG1NaXBMZXZlbHMgPSBkZXNjLk1pcExldmVsczsKKyAgICAgICAgICAgIG1UZXh0dXJl
V2lkdGggPSBkZXNjLldpZHRoOworICAgICAgICAgICAgbVRleHR1cmVIZWlnaHQgPSBkZXNjLkhl
aWdodDsKKyAgICAgICAgfQorICAgIH0KK30KKworVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjp+VGV4
dHVyZVN0b3JhZ2UxMV9DdWJlKCkKK3sKKyAgICBpZiAobVRleHR1cmUpCisgICAgeworICAgICAg
ICBtVGV4dHVyZS0+UmVsZWFzZSgpOworICAgICAgICBtVGV4dHVyZSA9IE5VTEw7CisgICAgfQor
CisgICAgaWYgKG1TUlYpCisgICAgeworICAgICAgICBtU1JWLT5SZWxlYXNlKCk7CisgICAgICAg
IG1TUlYgPSBOVUxMOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
NjsgaSsrKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBnbDo6
SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBqKyspCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGRlbGV0ZSBtUmVuZGVyVGFyZ2V0W2ldW2pdOworICAgICAgICAgICAgbVJlbmRlclRh
cmdldFtpXVtqXSA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1RleHR1cmVTdG9yYWdl
MTFfQ3ViZSAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV9DdWJl
KFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKQoreworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBF
KFRleHR1cmVTdG9yYWdlMTFfQ3ViZSosIHN0b3JhZ2UpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VGV4dHVyZVN0b3JhZ2UxMV9DdWJlKj4oc3RvcmFnZSk7Cit9CisKK1JlbmRlclRhcmdldCAq
VGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQs
IGludCBsZXZlbCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgZmFjZUlkeCA9IGdsOjpUZXh0dXJlQ3Vi
ZU1hcDo6ZmFjZUluZGV4KGZhY2VUYXJnZXQpOworICAgIGlmIChsZXZlbCA+PSAwICYmIGxldmVs
IDwgc3RhdGljX2Nhc3Q8aW50PihtTWlwTGV2ZWxzKSkKKyAgICB7CisgICAgICAgIGlmICghbVJl
bmRlclRhcmdldFtmYWNlSWR4XVtsZXZlbF0pCisgICAgICAgIHsKKyAgICAgICAgICAgIElEM0Qx
MURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICAgICAgICAgIEhS
RVNVTFQgcmVzdWx0OworCisgICAgICAgICAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19E
RVNDIHNydkRlc2M7CisgICAgICAgICAgICBzcnZEZXNjLkZvcm1hdCA9IG1TaGFkZXJSZXNvdXJj
ZUZvcm1hdDsKKyAgICAgICAgICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9E
SU1FTlNJT05fVEVYVFVSRTJEQVJSQVk7IC8vIFdpbGwgYmUgdXNlZCB3aXRoIFRleHR1cmUyRCBz
YW1wbGVyLCBub3QgVGV4dHVyZUN1YmUKKyAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJEQXJy
YXkuTW9zdERldGFpbGVkTWlwID0gbGV2ZWw7CisgICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUy
REFycmF5Lk1pcExldmVscyA9IDE7CisgICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5
LkZpcnN0QXJyYXlTbGljZSA9IGZhY2VJZHg7CisgICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUy
REFycmF5LkFycmF5U2l6ZSA9IDE7CisKKyAgICAgICAgICAgIElEM0QxMVNoYWRlclJlc291cmNl
VmlldyAqc3J2OworICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNv
dXJjZVZpZXcobVRleHR1cmUsICZzcnZEZXNjLCAmc3J2KTsKKworICAgICAgICAgICAgaWYgKHJl
c3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0
Kj4oTlVMTCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKKworICAgICAgICAgICAgaWYgKG1SZW5kZXJUYXJnZXRGb3JtYXQgIT0gRFhHSV9G
T1JNQVRfVU5LTk9XTikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEM0QxMV9SRU5E
RVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOworICAgICAgICAgICAgICAgIHJ0dkRlc2MuRm9y
bWF0ID0gbVJlbmRlclRhcmdldEZvcm1hdDsKKyAgICAgICAgICAgICAgICBydHZEZXNjLlZpZXdE
aW1lbnNpb24gPSBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyREFSUkFZOworICAgICAgICAg
ICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlwU2xpY2UgPSBsZXZlbDsKKyAgICAgICAg
ICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9IGZhY2VJZHg7
CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlMkRBcnJheS5BcnJheVNpemUgPSAxOwor
CisgICAgICAgICAgICAgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqcnR2OworICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0VmlldyhtVGV4dHVyZSwg
JnJ0dkRlc2MsICZydHYpOworCisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9G
TUVNT1JZKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3J2LT5SZWxl
YXNlKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAg
ICAgICAgICAgLy8gUmVuZGVyVGFyZ2V0MTEgZXhwZWN0cyB0byBiZSB0aGUgb3duZXIgb2YgdGhl
IHJlc291cmNlcyBpdCBpcyBnaXZlbiBidXQgVGV4dHVyZVN0b3JhZ2UxMQorICAgICAgICAgICAg
ICAgIC8vIGFsc28gbmVlZHMgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgdGV4dHVyZS4KKyAg
ICAgICAgICAgICAgICBtVGV4dHVyZS0+QWRkUmVmKCk7CisKKyAgICAgICAgICAgICAgICBtUmVu
ZGVyVGFyZ2V0W2ZhY2VJZHhdW2xldmVsXSA9IG5ldyBSZW5kZXJUYXJnZXQxMShtUmVuZGVyZXIs
IHJ0diwgbVRleHR1cmUsIHNydiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVyZVdpZHRoID4+
IGxldmVsLCAxVSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobVRleHR1cmVIZWlnaHQgPj4gbGV2ZWws
IDFVKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtRGVwdGhTdGVuY2ls
Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgRDNEMTFfREVQVEhfU1RFTkNJTF9WSUVXX0RFU0MgZHN2RGVzYzsKKyAgICAgICAgICAg
ICAgICBkc3ZEZXNjLkZvcm1hdCA9IG1SZW5kZXJUYXJnZXRGb3JtYXQ7CisgICAgICAgICAgICAg
ICAgZHN2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMkRB
UlJBWTsKKyAgICAgICAgICAgICAgICBkc3ZEZXNjLlRleHR1cmUyREFycmF5Lk1pcFNsaWNlID0g
bGV2ZWw7CisgICAgICAgICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5
U2xpY2UgPSBmYWNlSWR4OworICAgICAgICAgICAgICAgIGRzdkRlc2MuVGV4dHVyZTJEQXJyYXku
QXJyYXlTaXplID0gMTsKKworICAgICAgICAgICAgICAgIElEM0QxMURlcHRoU3RlbmNpbFZpZXcg
KmRzdjsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNp
bFZpZXcobVRleHR1cmUsICZkc3ZEZXNjLCAmZHN2KTsKKworICAgICAgICAgICAgICAgIGlmIChy
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHNydi0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PFJlbmRlclRhcmdldCo+KE5VTEwpKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1
bHQpKTsKKworICAgICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdldDExIGV4cGVjdHMgdG8gYmUg
dGhlIG93bmVyIG9mIHRoZSByZXNvdXJjZXMgaXQgaXMgZ2l2ZW4gYnV0IFRleHR1cmVTdG9yYWdl
MTEKKyAgICAgICAgICAgICAgICAvLyBhbHNvIG5lZWRzIHRvIGtlZXAgYSByZWZlcmVuY2UgdG8g
dGhlIHRleHR1cmUuCisgICAgICAgICAgICAgICAgbVRleHR1cmUtPkFkZFJlZigpOworCisgICAg
ICAgICAgICAgICAgbVJlbmRlclRhcmdldFtmYWNlSWR4XVtsZXZlbF0gPSBuZXcgUmVuZGVyVGFy
Z2V0MTEobVJlbmRlcmVyLCBkc3YsIG1UZXh0dXJlLCBzcnYsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgo
bVRleHR1cmVXaWR0aCA+PiBsZXZlbCwgMVUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1UZXh0dXJl
SGVpZ2h0ID4+IGxldmVsLCAxVSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbVJlbmRlclRhcmdldFtmYWNlSWR4XVts
ZXZlbF07CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAg
IH0KK30KKworSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3RvcmFnZTExX0N1YmU6
OmdldFNSVigpCit7CisgICAgaWYgKCFtU1JWKQorICAgIHsKKyAgICAgICAgSUQzRDExRGV2aWNl
ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgIEQzRDExX1NIQURF
Ul9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKKyAgICAgICAgc3J2RGVzYy5Gb3JtYXQgPSBt
U2hhZGVyUmVzb3VyY2VGb3JtYXQ7CisgICAgICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQz
RDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRUNVQkU7CisgICAgICAgIHNydkRlc2MuVGV4dHVyZUN1
YmUuTWlwTGV2ZWxzID0gKG1NaXBMZXZlbHMgPT0gMCA/IC0xIDogbU1pcExldmVscyk7CisgICAg
ICAgIHNydkRlc2MuVGV4dHVyZUN1YmUuTW9zdERldGFpbGVkTWlwID0gMDsKKworICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KG1UZXh0dXJl
LCAmc3J2RGVzYywgJm1TUlYpOworCisgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9S
WSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZLCBzdGF0aWNfY2FzdDxJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcqPihOVUxMKSk7CisgICAg
ICAgIH0KKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gbVNSVjsKK30KKwordm9pZCBUZXh0dXJlU3RvcmFnZTExX0N1YmU6OmdlbmVyYXRlTWlw
bWFwKGludCBmYWNlLCBpbnQgbGV2ZWwpCit7CisgICAgUmVuZGVyVGFyZ2V0MTEgKnNvdXJjZSA9
IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFyZ2V0KEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsIC0gMSkpOworICAgIFJlbmRl
clRhcmdldDExICpkZXN0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShnZXRS
ZW5kZXJUYXJnZXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZSwgbGV2ZWwp
KTsKKworICAgIGdlbmVyYXRlTWlwbWFwTGF5ZXIoc291cmNlLCBkZXN0KTsKK30KKworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9UZXh0dXJlU3RvcmFnZTExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL1RleHR1cmVTdG9yYWdlMTEuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYzVk
ZWQwNWI4ODk3Njk3ZDM5MzZkMDUwOTdkZjRkZTk4Yjc5YmNkCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9UZXh0
dXJlU3RvcmFnZTExLmgKQEAgLTAsMCArMSwxMjAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUZXh0
dXJlU3RvcmFnZTExLmg6IERlZmluZXMgdGhlIGFic3RyYWN0IHJ4OjpUZXh0dXJlU3RvcmFnZTEx
IGNsYXNzIGFuZCBpdHMgY29uY3JldGUgZGVyaXZlZAorLy8gY2xhc3NlcyBUZXh0dXJlU3RvcmFn
ZTExXzJEIGFuZCBUZXh0dXJlU3RvcmFnZTExX0N1YmUsIHdoaWNoIGFjdCBhcyB0aGUgaW50ZXJm
YWNlIHRvIHRoZSBEM0QxMSB0ZXh0dXJlLgorCisjaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9U
RVhUVVJFU1RPUkFHRTExX0hfCisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9URVhUVVJFU1RP
UkFHRTExX0hfCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZS5oIgorCituYW1lc3BhY2UgcngKK3sKK2Ns
YXNzIFJlbmRlclRhcmdldDsKK2NsYXNzIFJlbmRlclRhcmdldDExOworY2xhc3MgUmVuZGVyZXI7
CitjbGFzcyBSZW5kZXJlcjExOworY2xhc3MgU3dhcENoYWluMTE7CisKK2NsYXNzIFRleHR1cmVT
dG9yYWdlMTEgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UKK3sKKyAgcHVibGljOgorICAgIFRleHR1
cmVTdG9yYWdlMTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBVSU5UIGJpbmRGbGFncyk7CisgICAgdmly
dHVhbCB+VGV4dHVyZVN0b3JhZ2UxMSgpOworCisgICAgc3RhdGljIFRleHR1cmVTdG9yYWdlMTEg
Km1ha2VUZXh0dXJlU3RvcmFnZTExKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKTsKKworICAgIHN0
YXRpYyBEV09SRCBHZXRUZXh0dXJlQmluZEZsYWdzKERYR0lfRk9STUFUIGQzZGZtdCwgR0xlbnVt
IGdsdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlKTsKKyAgICBzdGF0aWMgYm9vbCBJc1RleHR1
cmVGb3JtYXRSZW5kZXJhYmxlKERYR0lfRk9STUFUIGZvcm1hdCk7CisKKyAgICBVSU5UIGdldEJp
bmRGbGFncygpIGNvbnN0OworCisgICAgdmlydHVhbCBJRDNEMTFUZXh0dXJlMkQgKmdldEJhc2VU
ZXh0dXJlKCkgY29uc3Q7CisgICAgdmlydHVhbCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmdl
dFNSVigpID0gMDsKKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KCkg
eyByZXR1cm4gZ2V0UmVuZGVyVGFyZ2V0KDApOyB9CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQg
KmdldFJlbmRlclRhcmdldChpbnQgbGV2ZWwpIHsgcmV0dXJuIE5VTEw7IH0KKyAgICB2aXJ0dWFs
IFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0KSB7IHJldHVy
biBnZXRSZW5kZXJUYXJnZXQoZmFjZVRhcmdldCwgMCk7IH0KKyAgICB2aXJ0dWFsIFJlbmRlclRh
cmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpIHsgcmV0
dXJuIE5VTEw7IH0KKworICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwp
IHt9OworICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgZmFjZSwgaW50IGxldmVs
KSB7fTsKKworICAgIHZpcnR1YWwgaW50IGdldExvZE9mZnNldCgpIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBpc1JlbmRlclRhcmdldCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc01hbmFn
ZWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBsZXZlbENvdW50KCk7CisgICAgVUlOVCBnZXRT
dWJyZXNvdXJjZUluZGV4KGludCBsZXZlbCwgaW50IGZhY2VUYXJnZXQpOworCisgICAgYm9vbCB1
cGRhdGVTdWJyZXNvdXJjZUxldmVsKElEM0QxMVRleHR1cmUyRCAqdGV4dHVyZSwgdW5zaWduZWQg
aW50IHNvdXJjZVN1YnJlc291cmNlLCBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBmYWNlVGFyZ2V0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisKKyAgcHJvdGVjdGVkOgorICAgIHZvaWQg
Z2VuZXJhdGVNaXBtYXBMYXllcihSZW5kZXJUYXJnZXQxMSAqc291cmNlLCBSZW5kZXJUYXJnZXQx
MSAqZGVzdCk7CisKKyAgICBSZW5kZXJlcjExICptUmVuZGVyZXI7CisgICAgaW50IG1Mb2RPZmZz
ZXQ7CisgICAgdW5zaWduZWQgaW50IG1NaXBMZXZlbHM7CisKKyAgICBJRDNEMTFUZXh0dXJlMkQg
Km1UZXh0dXJlOworICAgIERYR0lfRk9STUFUIG1UZXh0dXJlRm9ybWF0OworICAgIERYR0lfRk9S
TUFUIG1TaGFkZXJSZXNvdXJjZUZvcm1hdDsKKyAgICBEWEdJX0ZPUk1BVCBtUmVuZGVyVGFyZ2V0
Rm9ybWF0OworICAgIERYR0lfRk9STUFUIG1EZXB0aFN0ZW5jaWxGb3JtYXQ7CisgICAgdW5zaWdu
ZWQgaW50IG1UZXh0dXJlV2lkdGg7CisgICAgdW5zaWduZWQgaW50IG1UZXh0dXJlSGVpZ2h0Owor
CisgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICptU1JWOworCisgIHByaXZhdGU6CisgICAg
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlMTEpOworCisgICAgY29uc3Qg
VUlOVCBtQmluZEZsYWdzOworfTsKKworY2xhc3MgVGV4dHVyZVN0b3JhZ2UxMV8yRCA6IHB1Ymxp
YyBUZXh0dXJlU3RvcmFnZTExCit7CisgIHB1YmxpYzoKKyAgICBUZXh0dXJlU3RvcmFnZTExXzJE
KFJlbmRlcmVyICpyZW5kZXJlciwgU3dhcENoYWluMTEgKnN3YXBjaGFpbik7CisgICAgVGV4dHVy
ZVN0b3JhZ2UxMV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlMTFfMkQo
KTsKKworICAgIHN0YXRpYyBUZXh0dXJlU3RvcmFnZTExXzJEICptYWtlVGV4dHVyZVN0b3JhZ2Ux
MV8yRChUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSk7CisKKyAgICB2aXJ0dWFsIElEM0QxMVNoYWRl
clJlc291cmNlVmlldyAqZ2V0U1JWKCk7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJl
bmRlclRhcmdldChpbnQgbGV2ZWwpOworCisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFw
KGludCBsZXZlbCk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04o
VGV4dHVyZVN0b3JhZ2UxMV8yRCk7CisKKyAgICBSZW5kZXJUYXJnZXQxMSAqbVJlbmRlclRhcmdl
dFtnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKK307CisKK2NsYXNzIFRl
eHR1cmVTdG9yYWdlMTFfQ3ViZSA6IHB1YmxpYyBUZXh0dXJlU3RvcmFnZTExCit7CisgIHB1Ymxp
YzoKKyAgICBUZXh0dXJlU3RvcmFnZTExX0N1YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2
ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRl
cmFibGUsIGludCBzaXplKTsKKyAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTExX0N1YmUoKTsK
KworICAgIHN0YXRpYyBUZXh0dXJlU3RvcmFnZTExX0N1YmUgKm1ha2VUZXh0dXJlU3RvcmFnZTEx
X0N1YmUoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpOworCisgICAgdmlydHVhbCBJRDNEMTFTaGFk
ZXJSZXNvdXJjZVZpZXcgKmdldFNSVigpOworICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRS
ZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCk7CisKKyAgcHJpdmF0ZToK
KyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKTsKKwor
ICAgIFJlbmRlclRhcmdldDExICptUmVuZGVyVGFyZ2V0WzZdW2dsOjpJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFNdOworfTsKKworfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRF
UkVSX1RFWFRVUkVTVE9SQUdFMTFfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVydGV4QnVmZmVyMTEuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9WZXJ0ZXhC
dWZmZXIxMS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmY5YjQxODFmMTJhY2M3YzhlODU4YjYwNGQ4MzMyZjE1
Y2E0NjYyMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVydGV4QnVmZmVyMTEuY3BwCkBAIC0wLDAgKzEsNDQw
IEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBWZXJ0ZXhC
dWZmZXIxMS5jcHA6IERlZmluZXMgdGhlIEQzRDExIFZlcnRleEJ1ZmZlciBpbXBsZW1lbnRhdGlv
bi4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9WZXJ0ZXhCdWZmZXIxMS5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdlLmgiCisKKyNpbmNs
dWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDExL1JlbmRlcmVyMTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorCituYW1l
c3BhY2UgcngKK3sKKworVmVydGV4QnVmZmVyMTE6OlZlcnRleEJ1ZmZlcjExKHJ4OjpSZW5kZXJl
cjExICpjb25zdCByZW5kZXJlcikgOiBtUmVuZGVyZXIocmVuZGVyZXIpCit7CisgICAgbUJ1ZmZl
ciA9IE5VTEw7CisgICAgbUJ1ZmZlclNpemUgPSAwOworICAgIG1EeW5hbWljVXNhZ2UgPSBmYWxz
ZTsKK30KKworVmVydGV4QnVmZmVyMTE6On5WZXJ0ZXhCdWZmZXIxMSgpCit7CisgICAgaWYgKG1C
dWZmZXIpCisgICAgeworICAgICAgICBtQnVmZmVyLT5SZWxlYXNlKCk7CisgICAgICAgIG1CdWZm
ZXIgPSBOVUxMOworICAgIH0KK30KKworYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6aW5pdGlhbGl6ZSh1
bnNpZ25lZCBpbnQgc2l6ZSwgYm9vbCBkeW5hbWljVXNhZ2UpCit7CisgICAgaWYgKG1CdWZmZXIp
CisgICAgeworICAgICAgICBtQnVmZmVyLT5SZWxlYXNlKCk7CisgICAgICAgIG1CdWZmZXIgPSBO
VUxMOworICAgIH0KKworICAgIHVwZGF0ZVNlcmlhbCgpOworCisgICAgaWYgKHNpemUgPiAwKQor
ICAgIHsKKyAgICAgICAgSUQzRDExRGV2aWNlKiBkeERldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2
aWNlKCk7CisKKyAgICAgICAgRDNEMTFfQlVGRkVSX0RFU0MgYnVmZmVyRGVzYzsKKyAgICAgICAg
YnVmZmVyRGVzYy5CeXRlV2lkdGggPSBzaXplOworICAgICAgICBidWZmZXJEZXNjLlVzYWdlID0g
RDNEMTFfVVNBR0VfRFlOQU1JQzsKKyAgICAgICAgYnVmZmVyRGVzYy5CaW5kRmxhZ3MgPSBEM0Qx
MV9CSU5EX1ZFUlRFWF9CVUZGRVI7CisgICAgICAgIGJ1ZmZlckRlc2MuQ1BVQWNjZXNzRmxhZ3Mg
PSBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOworICAgICAgICBidWZmZXJEZXNjLk1pc2NGbGFncyA9
IDA7CisgICAgICAgIGJ1ZmZlckRlc2MuU3RydWN0dXJlQnl0ZVN0cmlkZSA9IDA7CisKKyAgICAg
ICAgSFJFU1VMVCByZXN1bHQgPSBkeERldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJEZXNjLCBO
VUxMLCAmbUJ1ZmZlcik7CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgbUJ1ZmZl
clNpemUgPSBzaXplOworICAgIG1EeW5hbWljVXNhZ2UgPSBkeW5hbWljVXNhZ2U7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK1ZlcnRleEJ1ZmZlcjExICpWZXJ0ZXhCdWZmZXIxMTo6bWFrZVZlcnRl
eEJ1ZmZlcjExKFZlcnRleEJ1ZmZlciAqdmV0ZXhCdWZmZXIpCit7CisgICAgQVNTRVJUKEhBU19E
WU5BTUlDX1RZUEUoVmVydGV4QnVmZmVyMTEqLCB2ZXRleEJ1ZmZlcikpOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxWZXJ0ZXhCdWZmZXIxMSo+KHZldGV4QnVmZmVyKTsKK30KKworYm9vbCBWZXJ0
ZXhCdWZmZXIxMTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1
dGUgJmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGlu
dCBvZmZzZXQpCit7CisgICAgaWYgKG1CdWZmZXIpCisgICAgeworICAgICAgICBnbDo6QnVmZmVy
ICpidWZmZXIgPSBhdHRyaWIubUJvdW5kQnVmZmVyLmdldCgpOworCisgICAgICAgIGludCBpbnB1
dFN0cmlkZSA9IGF0dHJpYi5zdHJpZGUoKTsKKyAgICAgICAgY29uc3QgVmVydGV4Q29udmVydGVy
ICZjb252ZXJ0ZXIgPSBnZXRWZXJ0ZXhDb252ZXJzaW9uKGF0dHJpYik7CisKKyAgICAgICAgSUQz
RDExRGV2aWNlQ29udGV4dCAqZHhDb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0
KCk7CisKKyAgICAgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwor
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGR4Q29udGV4dC0+TWFwKG1CdWZmZXIsIDAsIEQzRDEx
X01BUF9XUklURV9OT19PVkVSV1JJVEUsIDAsICZtYXBwZWRSZXNvdXJjZSk7CisgICAgICAgIGlm
IChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJWZXJ0ZXggYnVm
ZmVyIG1hcCBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgiLCByZXN1bHQpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgY2hhciogb3V0cHV0ID0gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4obWFwcGVkUmVzb3VyY2UucERhdGEpICsgb2Zmc2V0OworCisgICAg
ICAgIGNvbnN0IGNoYXIgKmlucHV0ID0gTlVMTDsKKyAgICAgICAgaWYgKGJ1ZmZlcikKKyAgICAg
ICAgeworICAgICAgICAgICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGJ1ZmZlci0+Z2V0U3Rv
cmFnZSgpOworICAgICAgICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oc3Rv
cmFnZS0+Z2V0RGF0YSgpKSArIHN0YXRpY19jYXN0PGludD4oYXR0cmliLm1PZmZzZXQpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaW5wdXQgPSBzdGF0
aWNfY2FzdDxjb25zdCBjaGFyKj4oYXR0cmliLm1Qb2ludGVyKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBhdHRyaWIubURpdmlzb3IgPT0gMCkKKyAgICAgICAg
eworICAgICAgICAgICAgaW5wdXQgKz0gaW5wdXRTdHJpZGUgKiBzdGFydDsKKyAgICAgICAgfQor
CisgICAgICAgIGNvbnZlcnRlci5jb252ZXJzaW9uRnVuYyhpbnB1dCwgaW5wdXRTdHJpZGUsIGNv
dW50LCBvdXRwdXQpOworCisgICAgICAgIGR4Q29udGV4dC0+VW5tYXAobUJ1ZmZlciwgMCk7CisK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEVS
UigiVmVydGV4IGJ1ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKK2Jvb2wgVmVydGV4QnVmZmVyMTE6OnN0b3JlUmF3RGF0YShjb25zdCB2
b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNldCkKK3sKKyAg
ICBpZiAobUJ1ZmZlcikKKyAgICB7CisgICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmR4Q29u
dGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworCisgICAgICAgIEQzRDExX01B
UFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJjZTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQg
PSBkeENvbnRleHQtPk1hcChtQnVmZmVyLCAwLCBEM0QxMV9NQVBfV1JJVEVfTk9fT1ZFUldSSVRF
LCAwLCAmbWFwcGVkUmVzb3VyY2UpOworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEVSUigiVmVydGV4IGJ1ZmZlciBtYXAgZmFpbGVkIHdpdGggZXJy
b3IgMHglMDh4IiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorCisgICAgICAgIGNoYXIqIGJ1ZmZlckRhdGEgPSBzdGF0aWNfY2FzdDxjaGFyKj4obWFwcGVk
UmVzb3VyY2UucERhdGEpOworICAgICAgICBtZW1jcHkoYnVmZmVyRGF0YSArIG9mZnNldCwgZGF0
YSwgc2l6ZSk7CisKKyAgICAgICAgZHhDb250ZXh0LT5Vbm1hcChtQnVmZmVyLCAwKTsKKworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgRVJSKCJW
ZXJ0ZXggYnVmZmVyIG5vdCBpbml0aWFsaXplZC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KK30KKworYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6Z2V0U3BhY2VSZXF1aXJlZChjb25zdCBn
bDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdMc2l6ZWkgY291bnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQg
Km91dFNwYWNlUmVxdWlyZWQpIGNvbnN0Cit7CisgICAgdW5zaWduZWQgaW50IGVsZW1lbnRTaXpl
ID0gZ2V0VmVydGV4Q29udmVyc2lvbihhdHRyaWIpLm91dHB1dEVsZW1lbnRTaXplOworCisgICAg
dW5zaWduZWQgaW50IGVsZW1lbnRDb3VudCA9IDA7CisgICAgaWYgKGluc3RhbmNlcyA9PSAwIHx8
IGF0dHJpYi5tRGl2aXNvciA9PSAwKQorICAgIHsKKyAgICAgICAgZWxlbWVudENvdW50ID0gY291
bnQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNp
Z25lZCBpbnQ+KGluc3RhbmNlcykgPCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46
Om1heCgpIC0gKGF0dHJpYi5tRGl2aXNvciAtIDEpKQorICAgICAgICB7CisgICAgICAgICAgICAv
LyBSb3VuZCB1cAorICAgICAgICAgICAgZWxlbWVudENvdW50ID0gKHN0YXRpY19jYXN0PHVuc2ln
bmVkIGludD4oaW5zdGFuY2VzKSArIChhdHRyaWIubURpdmlzb3IgLSAxKSkgLyBhdHRyaWIubURp
dmlzb3I7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBl
bGVtZW50Q291bnQgPSBpbnN0YW5jZXMgLyBhdHRyaWIubURpdmlzb3I7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAoZWxlbWVudFNpemUgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZCBpbnQ+OjptYXgoKSAvIGVsZW1lbnRDb3VudCkKKyAgICB7CisgICAgICAgIGlmIChvdXRTcGFj
ZVJlcXVpcmVkKQorICAgICAgICB7CisgICAgICAgICAgICAqb3V0U3BhY2VSZXF1aXJlZCA9IGVs
ZW1lbnRTaXplICogZWxlbWVudENvdW50OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
fQorCitib29sIFZlcnRleEJ1ZmZlcjExOjpyZXF1aXJlc0NvbnZlcnNpb24oY29uc3QgZ2w6OlZl
cnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdAoreworICAgIHJldHVybiAhZ2V0VmVydGV4Q29u
dmVyc2lvbihhdHRyaWIpLmlkZW50aXR5OworfQorCit1bnNpZ25lZCBpbnQgVmVydGV4QnVmZmVy
MTE6OmdldEJ1ZmZlclNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtQnVmZmVyU2l6ZTsKK30K
KworYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6c2V0QnVmZmVyU2l6ZSh1bnNpZ25lZCBpbnQgc2l6ZSkK
K3sKKyAgICBpZiAoc2l6ZSA+IG1CdWZmZXJTaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlu
aXRpYWxpemUoc2l6ZSwgbUR5bmFtaWNVc2FnZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKworYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6ZGlz
Y2FyZCgpCit7CisgICAgaWYgKG1CdWZmZXIpCisgICAgeworICAgICAgICBJRDNEMTFEZXZpY2VD
b250ZXh0ICpkeENvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKKworICAg
ICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7CisgICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gZHhDb250ZXh0LT5NYXAobUJ1ZmZlciwgMCwgRDNEMTFfTUFQX1dSSVRF
X0RJU0NBUkQsIDAsICZtYXBwZWRSZXNvdXJjZSk7CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJWZXJ0ZXggYnVmZmVyIG1hcCBmYWlsZWQg
d2l0aCBlcnJvciAweCUwOHgiLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgZHhDb250ZXh0LT5Vbm1hcChtQnVmZmVyLCAwKTsKKworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgRVJSKCJW
ZXJ0ZXggYnVmZmVyIG5vdCBpbml0aWFsaXplZC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KK30KKwordW5zaWduZWQgaW50IFZlcnRleEJ1ZmZlcjExOjpnZXRWZXJ0ZXhTaXplKGNv
bnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QKK3sKKyAgICByZXR1cm4gZ2V0
VmVydGV4Q29udmVyc2lvbihhdHRyaWIpLm91dHB1dEVsZW1lbnRTaXplOworfQorCitEWEdJX0ZP
Uk1BVCBWZXJ0ZXhCdWZmZXIxMTo6Z2V0RFhHSUZvcm1hdChjb25zdCBnbDo6VmVydGV4QXR0cmli
dXRlICZhdHRyaWIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdldFZlcnRleENvbnZlcnNpb24oYXR0
cmliKS5keGdpRm9ybWF0OworfQorCitJRDNEMTFCdWZmZXIgKlZlcnRleEJ1ZmZlcjExOjpnZXRC
dWZmZXIoKSBjb25zdAoreworICAgIHJldHVybiBtQnVmZmVyOworfQorCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgdW5zaWduZWQgaW50IGNvbXBvbmVudENvdW50LCBib29sIHdpZGVuLCBib29sIG5v
cm1hbGl6ZWQ+CitzdGF0aWMgdm9pZCBjb3B5VmVydGV4RGF0YShjb25zdCB2b2lkICppbnB1dCwg
dW5zaWduZWQgaW50IHN0cmlkZSwgdW5zaWduZWQgaW50IGNvdW50LCB2b2lkICpvdXRwdXQpCit7
CisgICAgdW5zaWduZWQgaW50IGF0dHJpYlNpemUgPSBzaXplb2YoVCkgKiBjb21wb25lbnRDb3Vu
dDsKKworICAgIGlmIChhdHRyaWJTaXplID09IHN0cmlkZSAmJiAhd2lkZW4pCisgICAgeworICAg
ICAgICBtZW1jcHkob3V0cHV0LCBpbnB1dCwgY291bnQgKiBhdHRyaWJTaXplKTsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IG91dHB1dFN0cmlkZSA9IHdpZGVu
ID8gNCA6IGNvbXBvbmVudENvdW50OworICAgICAgICBUIGRlZmF1bHRWYWwgPSBub3JtYWxpemVk
ID8gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCkgOiBUKDEpOworCisgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgY29uc3QgVCAqb2Zmc2V0SW5wdXQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IFQqPihyZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihpbnB1dCkgKyBpICogc3RyaWRlKTsKKyAgICAgICAg
ICAgIFQgKm9mZnNldE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KG91dHB1dCkgKyBpICog
b3V0cHV0U3RyaWRlOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8
IGNvbXBvbmVudENvdW50OyBqKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb2Zm
c2V0T3V0cHV0W2pdID0gb2Zmc2V0SW5wdXRbal07CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICh3aWRlbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvZmZzZXRPdXRw
dXRbM10gPSBkZWZhdWx0VmFsOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQor
Cit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IGNvbXBvbmVudENvdW50Pgorc3RhdGljIHZvaWQgY29w
eUZpeGVkVmVydGV4RGF0YShjb25zdCB2b2lkKiBpbnB1dCwgdW5zaWduZWQgaW50IHN0cmlkZSwg
dW5zaWduZWQgaW50IGNvdW50LCB2b2lkKiBvdXRwdXQpCit7CisgICAgc3RhdGljIGNvbnN0IGZs
b2F0IGRpdmlzb3IgPSAxLjBmIC8gKDEgPDwgMTYpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3QgR0xmaXhlZCogb2Zm
c2V0SW5wdXQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEdMZml4ZWQqPihyZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihpbnB1dCkgKyBzdHJpZGUgKiBpKTsKKyAgICAgICAgZmxvYXQqIG9m
ZnNldE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihvdXRwdXQpICsgaSAqIGNvbXBv
bmVudENvdW50OworCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgY29tcG9u
ZW50Q291bnQ7IGorKykKKyAgICAgICAgeworICAgICAgICAgICAgb2Zmc2V0T3V0cHV0W2pdID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG9mZnNldElucHV0W2pdKSAqIGRpdmlzb3I7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbnQgY29tcG9uZW50
Q291bnQsIGJvb2wgbm9ybWFsaXplZD4KK3N0YXRpYyB2b2lkIGNvcHlUb0Zsb2F0VmVydGV4RGF0
YShjb25zdCB2b2lkKiBpbnB1dCwgdW5zaWduZWQgaW50IHN0cmlkZSwgdW5zaWduZWQgaW50IGNv
dW50LCB2b2lkKiBvdXRwdXQpCit7CisgICAgdHlwZWRlZiBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+
IE5MOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAg
IHsKKyAgICAgICAgY29uc3QgVCAqb2Zmc2V0SW5wdXQgPSByZWludGVycHJldF9jYXN0PGNvbnN0
IFQqPihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihpbnB1dCkgKyBzdHJpZGUgKiBpKTsK
KyAgICAgICAgZmxvYXQgKm9mZnNldE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihv
dXRwdXQpICsgaSAqIGNvbXBvbmVudENvdW50OworCisgICAgICAgIGZvciAodW5zaWduZWQgaW50
IGogPSAwOyBqIDwgY29tcG9uZW50Q291bnQ7IGorKykKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKG5vcm1hbGl6ZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKE5MOjpp
c19zaWduZWQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBm
bG9hdCBkaXZpc29yID0gMS4wZiAvICgyICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KE5MOjptYXgoKSkg
KyAxKTsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0T3V0cHV0W2pdID0gKDIgKiBzdGF0aWNf
Y2FzdDxmbG9hdD4ob2Zmc2V0SW5wdXRbal0pICsgMSkgKiBkaXZpc29yOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG9mZnNldElu
cHV0W2pdKSAvIE5MOjptYXgoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb2Zmc2V0T3V0
cHV0W2pdID0gIHN0YXRpY19jYXN0PGZsb2F0PihvZmZzZXRJbnB1dFtqXSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK2NvbnN0IFZlcnRleEJ1ZmZlcjExOjpWZXJ0ZXhD
b252ZXJ0ZXIgVmVydGV4QnVmZmVyMTE6Om1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tOVU1fR0xfVkVS
VEVYX0FUVFJJQl9UWVBFU11bMl1bNF0gPQoreworICAgIHsgLy8gR0xfQllURQorICAgICAgICB7
IC8vIHVubm9ybWFsaXplZAorICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdM
Ynl0ZSwgMSwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyX0ZMT0FULCA0IH0sCisgICAg
ICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xieXRlLCAyLCBmYWxzZT4sIGZhbHNl
LCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKKyAgICAgICAgICAgIHsgJmNvcHlUb0Zs
b2F0VmVydGV4RGF0YTxHTGJ5dGUsIDMsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkcz
MkIzMl9GTE9BVCwgMTIgfSwKKyAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxH
TGJ5dGUsIDQsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCwg
MTYgfSwKKyAgICAgICAgfSwKKyAgICAgICAgeyAvLyBub3JtYWxpemVkCisgICAgICAgICAgICB7
ICZjb3B5VmVydGV4RGF0YTxHTGJ5dGUsIDEsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JN
QVRfUjhfU05PUk0sIDEgfSwKKyAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMYnl0ZSwg
MiwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SOEc4X1NOT1JNLCAyIH0sCisgICAg
ICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGJ5dGUsIDMsIHRydWUsIHRydWU+LCBmYWxzZSwg
RFhHSV9GT1JNQVRfUjhHOEI4QThfU05PUk0sIDQgfSwKKyAgICAgICAgICAgIHsgJmNvcHlWZXJ0
ZXhEYXRhPEdMYnl0ZSwgNCwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SOEc4QjhB
OF9TTk9STSwgNCB9LAorICAgICAgICB9LAorICAgIH0sCisgICAgeyAvLyBHTF9VTlNJR05FRF9C
WVRFCisgICAgICAgIHsgLy8gdW5ub3JtYWxpemVkCisgICAgICAgICAgICB7ICZjb3B5VG9GbG9h
dFZlcnRleERhdGE8R0x1Ynl0ZSwgMSwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyX0ZM
T0FULCA0IH0sCisgICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0x1Ynl0ZSwg
MiwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCA4IH0sCisgICAgICAg
ICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0x1Ynl0ZSwgMywgZmFsc2U+LCBmYWxzZSwg
RFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAxMiB9LAorICAgICAgICAgICAgeyAmY29weVRv
RmxvYXRWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDQsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1Iz
MkczMkIzMkEzMl9GTE9BVCwgMTYgfSwKKyAgICAgICAgfSwKKyAgICAgICAgeyAvLyBub3JtYWxp
emVkCisgICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHVieXRlLCAxLCBmYWxzZSwgdHJ1
ZT4sIHRydWUsIERYR0lfRk9STUFUX1I4X1VOT1JNLCAxIH0sCisgICAgICAgICAgICB7ICZjb3B5
VmVydGV4RGF0YTxHTHVieXRlLCAyLCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1I4
RzhfVU5PUk0sIDIgfSwKKyAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDMs
IHRydWUsIHRydWU+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk0sIDQgfSwKKyAg
ICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDQsIGZhbHNlLCB0cnVlPiwgdHJ1
ZSwgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk0sIDQgfSwKKyAgICAgICAgfSwKKyAgICB9LAor
ICAgIHsgLy8gR0xfU0hPUlQKKyAgICAgICAgeyAvLyB1bm5vcm1hbGl6ZWQKKyAgICAgICAgICAg
IHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHNob3J0LCAxLCBmYWxzZT4sIGZhbHNlLCBEWEdJ
X0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKKyAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4
RGF0YTxHTHNob3J0LCAyLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQs
IDggfSwKKyAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHNob3J0LCAzLCBm
YWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0sCisgICAgICAg
ICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xzaG9ydCwgNCwgZmFsc2U+LCBmYWxzZSwg
RFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAorICAgICAgICB9LAorICAgICAg
ICB7IC8vIG5vcm1hbGl6ZWQKKyAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMc2hvcnQs
IDEsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjE2X1NOT1JNLCAyIH0sCisgICAg
ICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHNob3J0LCAyLCBmYWxzZSwgdHJ1ZT4sIHRydWUs
IERYR0lfRk9STUFUX1IxNkcxNl9TTk9STSwgNCB9LAorICAgICAgICAgICAgeyAmY29weVZlcnRl
eERhdGE8R0xzaG9ydCwgMywgdHJ1ZSwgdHJ1ZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMTZHMTZC
MTZBMTZfU05PUk0sIDggfSwKKyAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMc2hvcnQs
IDQsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1NOT1JNLCA4
IH0sCisgICAgICAgIH0sCisgICAgfSwKKyAgICB7IC8vIEdMX1VOU0lHTkVEX1NIT1JUCisgICAg
ICAgIHsgLy8gdW5ub3JtYWxpemVkCisgICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERh
dGE8R0x1c2hvcnQsIDEsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9
LAorICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMdXNob3J0LCAyLCBmYWxz
ZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKKyAgICAgICAgICAgIHsg
JmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVzaG9ydCwgMywgZmFsc2U+LCBmYWxzZSwgRFhHSV9G
T1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAxMiB9LAorICAgICAgICAgICAgeyAmY29weVRvRmxvYXRW
ZXJ0ZXhEYXRhPEdMdXNob3J0LCA0LCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJC
MzJBMzJfRkxPQVQsIDE2IH0sCisgICAgICAgIH0sCisgICAgICAgIHsgLy8gbm9ybWFsaXplZAor
ICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1c2hvcnQsIDEsIGZhbHNlLCB0cnVlPiwg
dHJ1ZSwgRFhHSV9GT1JNQVRfUjE2X1VOT1JNLCAyIH0sCisgICAgICAgICAgICB7ICZjb3B5VmVy
dGV4RGF0YTxHTHVzaG9ydCwgMiwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMTZH
MTZfVU5PUk0sIDQgfSwKKyAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdXNob3J0LCAz
LCB0cnVlLCB0cnVlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9VTk9STSwgOCB9
LAorICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1c2hvcnQsIDQsIGZhbHNlLCB0cnVl
PiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1VOT1JNLCA4IH0sCisgICAgICAgIH0s
CisgICAgfSwKKyAgICB7IC8vIEdMX0ZJWEVECisgICAgICAgIHsgLy8gdW5ub3JtYWxpemVkCisg
ICAgICAgICAgICB7ICZjb3B5Rml4ZWRWZXJ0ZXhEYXRhPDE+LCBmYWxzZSwgRFhHSV9GT1JNQVRf
UjMyX0ZMT0FULCA0IH0sCisgICAgICAgICAgICB7ICZjb3B5Rml4ZWRWZXJ0ZXhEYXRhPDI+LCBm
YWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCA4IH0sCisgICAgICAgICAgICB7ICZjb3B5
Rml4ZWRWZXJ0ZXhEYXRhPDM+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAx
MiB9LAorICAgICAgICAgICAgeyAmY29weUZpeGVkVmVydGV4RGF0YTw0PiwgZmFsc2UsIERYR0lf
Rk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCwgMTYgfSwKKyAgICAgICAgfSwKKyAgICAgICAgeyAv
LyBub3JtYWxpemVkCisgICAgICAgICAgICB7ICZjb3B5Rml4ZWRWZXJ0ZXhEYXRhPDE+LCBmYWxz
ZSwgRFhHSV9GT1JNQVRfUjMyX0ZMT0FULCA0IH0sCisgICAgICAgICAgICB7ICZjb3B5Rml4ZWRW
ZXJ0ZXhEYXRhPDI+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCA4IH0sCisgICAg
ICAgICAgICB7ICZjb3B5Rml4ZWRWZXJ0ZXhEYXRhPDM+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMy
RzMyQjMyX0ZMT0FULCAxMiB9LAorICAgICAgICAgICAgeyAmY29weUZpeGVkVmVydGV4RGF0YTw0
PiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCwgMTYgfSwKKyAgICAgICAg
fSwKKyAgICB9LAorICAgIHsgLy8gR0xfRkxPQVQKKyAgICAgICAgeyAvLyB1bm5vcm1hbGl6ZWQK
KyAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDEsIGZhbHNlLCBmYWxzZT4s
IHRydWUsIERYR0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9LAorICAgICAgICAgICAgeyAmY29weVZl
cnRleERhdGE8R0xmbG9hdCwgMiwgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMy
RzMyX0ZMT0FULCA4IH0sCisgICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCAz
LCBmYWxzZSwgZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0s
CisgICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCA0LCBmYWxzZSwgZmFsc2U+
LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsIDE2IH0sCisgICAgICAgIH0s
CisgICAgICAgIHsgLy8gbm9ybWFsaXplZAorICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8
R0xmbG9hdCwgMSwgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMyX0ZMT0FULCA0
IH0sCisgICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCAyLCBmYWxzZSwgZmFs
c2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKKyAgICAgICAgICAgIHsg
JmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDMsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lfRk9S
TUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKKyAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRh
PEdMZmxvYXQsIDQsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lfRk9STUFUX1IzMkczMkIzMkEz
Ml9GTE9BVCwgMTYgfSwKKyAgICAgICAgfSwKKyAgICB9LAorfTsKKworY29uc3QgVmVydGV4QnVm
ZmVyMTE6OlZlcnRleENvbnZlcnRlciAmVmVydGV4QnVmZmVyMTE6OmdldFZlcnRleENvbnZlcnNp
b24oY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlKQoreworICAgIHVuc2lnbmVk
IGludCB0eXBlSW5kZXggPSAwOworICAgIHN3aXRjaCAoYXR0cmlidXRlLm1UeXBlKQorICAgIHsK
KyAgICAgIGNhc2UgR0xfQllURTogICAgICAgICAgICAgdHlwZUluZGV4ID0gMDsgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6ICAgIHR5cGVJbmRleCA9IDE7IGJyZWFrOworICAg
ICAgY2FzZSBHTF9TSE9SVDogICAgICAgICAgICB0eXBlSW5kZXggPSAyOyBicmVhazsKKyAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6ICAgdHlwZUluZGV4ID0gMzsgYnJlYWs7CisgICAgICBj
YXNlIEdMX0ZJWEVEOiAgICAgICAgICAgIHR5cGVJbmRleCA9IDQ7IGJyZWFrOworICAgICAgY2Fz
ZSBHTF9GTE9BVDogICAgICAgICAgICB0eXBlSW5kZXggPSA1OyBicmVhazsKKyAgICAgIGRlZmF1
bHQ6ICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsgYnJlYWs7CisgICAgfQorCisgICAg
cmV0dXJuIG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1t0eXBlSW5kZXhdW2F0dHJpYnV0ZS5tTm9ybWFs
aXplZCA/IDEgOiAwXVthdHRyaWJ1dGUubVNpemUgLSAxXTsKK30KKworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9WZXJ0
ZXhCdWZmZXIxMS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9WZXJ0ZXhCdWZmZXIxMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVjZWI0MjZlODJkNDJiNTU2
NjZjNTc5YzNmZWUxZmUyYWI3YmE4MDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1ZlcnRleEJ1ZmZlcjExLmgK
QEAgLTAsMCArMSw3NCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFZlcnRleEJ1ZmZlcjExLmg6IERl
ZmluZXMgdGhlIEQzRDExIFZlcnRleEJ1ZmZlciBpbXBsZW1lbnRhdGlvbi4KKworI2lmbmRlZiBM
SUJHTEVTVjJfUkVOREVSRVJfVkVSVEVYQlVGRkVSMTFfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JF
TkRFUkVSX1ZFUlRFWEJVRkZFUjExX0hfCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
VmVydGV4QnVmZmVyLmgiCisKK25hbWVzcGFjZSByeAoreworY2xhc3MgUmVuZGVyZXIxMTsKKwor
Y2xhc3MgVmVydGV4QnVmZmVyMTEgOiBwdWJsaWMgVmVydGV4QnVmZmVyCit7CisgIHB1YmxpYzoK
KyAgICBleHBsaWNpdCBWZXJ0ZXhCdWZmZXIxMShyeDo6UmVuZGVyZXIxMSAqY29uc3QgcmVuZGVy
ZXIpOworICAgIHZpcnR1YWwgflZlcnRleEJ1ZmZlcjExKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wg
aW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgc2l6ZSwgYm9vbCBkeW5hbWljVXNhZ2UpOworCisgICAg
c3RhdGljIFZlcnRleEJ1ZmZlcjExICptYWtlVmVydGV4QnVmZmVyMTEoVmVydGV4QnVmZmVyICp2
ZXRleEJ1ZmZlcik7CisKKyAgICB2aXJ0dWFsIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNv
bnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291
bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IG9mZnNldCk7CisgICAgdmlydHVhbCBib29sIHN0b3JlUmF3RGF0
YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNl
dCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0U3BhY2VSZXF1aXJlZChjb25zdCBnbDo6VmVydGV4
QXR0cmlidXRlICZhdHRyaWIsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqb3V0U3BhY2VSZXF1
aXJlZCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNDb252ZXJzaW9uKGNvbnN0
IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHVuc2ln
bmVkIGludCBnZXRCdWZmZXJTaXplKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNldEJ1ZmZl
clNpemUodW5zaWduZWQgaW50IHNpemUpOworICAgIHZpcnR1YWwgYm9vbCBkaXNjYXJkKCk7CisK
KyAgICB1bnNpZ25lZCBpbnQgZ2V0VmVydGV4U2l6ZShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRl
ICZhdHRyaWIpIGNvbnN0OworICAgIERYR0lfRk9STUFUIGdldERYR0lGb3JtYXQoY29uc3QgZ2w6
OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdDsKKworICAgIElEM0QxMUJ1ZmZlciAqZ2V0
QnVmZmVyKCkgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oVmVydGV4QnVmZmVyMTEpOworCisgICAgcng6OlJlbmRlcmVyMTEgKmNvbnN0IG1SZW5kZXJl
cjsKKworICAgIElEM0QxMUJ1ZmZlciAqbUJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBpbnQgbUJ1ZmZl
clNpemU7CisgICAgYm9vbCBtRHluYW1pY1VzYWdlOworCisgICAgdHlwZWRlZiB2b2lkICgqVmVy
dGV4Q29udmVyc2lvbkZ1bmN0aW9uKShjb25zdCB2b2lkICosIHVuc2lnbmVkIGludCwgdW5zaWdu
ZWQgaW50LCB2b2lkICopOworICAgIHN0cnVjdCBWZXJ0ZXhDb252ZXJ0ZXIKKyAgICB7CisgICAg
ICAgIFZlcnRleENvbnZlcnNpb25GdW5jdGlvbiBjb252ZXJzaW9uRnVuYzsKKyAgICAgICAgYm9v
bCBpZGVudGl0eTsKKyAgICAgICAgRFhHSV9GT1JNQVQgZHhnaUZvcm1hdDsKKyAgICAgICAgdW5z
aWduZWQgaW50IG91dHB1dEVsZW1lbnRTaXplOworICAgIH07CisKKyAgICBlbnVtIHsgTlVNX0dM
X1ZFUlRFWF9BVFRSSUJfVFlQRVMgPSA2IH07CisKKyAgICAvLyBUaGlzIHRhYmxlIGlzIHVzZWQg
dG8gZ2VuZXJhdGUgbUF0dHJpYnV0ZVR5cGVzLgorICAgIHN0YXRpYyBjb25zdCBWZXJ0ZXhDb252
ZXJ0ZXIgbVBvc3NpYmxlVHJhbnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsy
XVs0XTsgLy8gW0dMIHR5cGVzIGFzIGVudW1lcmF0ZWQgYnkgdHlwZUluZGV4KCldW25vcm1hbGl6
ZWRdW3NpemUgLSAxXQorCisgICAgc3RhdGljIGNvbnN0IFZlcnRleENvbnZlcnRlciAmZ2V0VmVy
dGV4Q29udmVyc2lvbihjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpOworfTsK
KworfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1ZFUlRFWEJVRkZFUjExX0hfCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42ZjA2MDI0ZmI1YWExMTI4YWQ1ZDFmMGU5ZDIzNDFlNzhkYTBhYTk0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9yZW5kZXJlcjExX3V0aWxzLmNwcApAQCAtMCwwICsxLDY4OCBAQAorI2luY2x1ZGUgInByZWNv
bXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gcmVuZGVyZXIxMV91dGlscy5jcHA6IENvbnZl
cnNpb24gZnVuY3Rpb25zIGFuZCBvdGhlciB1dGlsaXR5IHJvdXRpbmVzCisvLyBzcGVjaWZpYyB0
byB0aGUgRDNEMTEgcmVuZGVyZXIuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvcmVuZGVyZXIxMV91dGlscy5oIgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKK25h
bWVzcGFjZSBnbF9kM2QxMQoreworCitEM0QxMV9CTEVORCBDb252ZXJ0QmxlbmRGdW5jKEdMZW51
bSBnbEJsZW5kLCBib29sIGlzQWxwaGEpCit7CisgICAgRDNEMTFfQkxFTkQgZDNkQmxlbmQgPSBE
M0QxMV9CTEVORF9aRVJPOworCisgICAgc3dpdGNoIChnbEJsZW5kKQorICAgIHsKKyAgICAgIGNh
c2UgR0xfWkVSTzogICAgICAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzRDExX0JMRU5EX1pF
Uk87ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9PTkU6ICAgICAgICAgICAg
ICAgICAgICAgIGQzZEJsZW5kID0gRDNEMTFfQkxFTkRfT05FOyAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX1NSQ19DT0xPUjogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSAo
aXNBbHBoYSA/IEQzRDExX0JMRU5EX1NSQ19BTFBIQSA6IEQzRDExX0JMRU5EX1NSQ19DT0xPUik7
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19DT0xPUjogICAg
ICBkM2RCbGVuZCA9IChpc0FscGhhID8gRDNEMTFfQkxFTkRfSU5WX1NSQ19BTFBIQSA6IEQzRDEx
X0JMRU5EX0lOVl9TUkNfQ09MT1IpOyAgIGJyZWFrOworICAgICAgY2FzZSBHTF9EU1RfQ09MT1I6
ICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gKGlzQWxwaGEgPyBEM0QxMV9CTEVORF9ERVNUX0FM
UEhBIDogRDNEMTFfQkxFTkRfREVTVF9DT0xPUik7ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX09ORV9NSU5VU19EU1RfQ09MT1I6ICAgICAgZDNkQmxlbmQgPSAoaXNBbHBoYSA/IEQzRDEx
X0JMRU5EX0lOVl9ERVNUX0FMUEhBIDogRDNEMTFfQkxFTkRfSU5WX0RFU1RfQ09MT1IpOyBicmVh
azsKKyAgICAgIGNhc2UgR0xfU1JDX0FMUEhBOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQz
RDExX0JMRU5EX1NSQ19BTFBIQTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9PTkVf
TUlOVVNfU1JDX0FMUEhBOiAgICAgIGQzZEJsZW5kID0gRDNEMTFfQkxFTkRfSU5WX1NSQ19BTFBI
QTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0RTVF9BTFBIQTogICAgICAgICAgICAgICAg
ZDNkQmxlbmQgPSBEM0QxMV9CTEVORF9ERVNUX0FMUEhBOyAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfT05FX01JTlVTX0RTVF9BTFBIQTogICAgICBkM2RCbGVuZCA9IEQzRDExX0JMRU5E
X0lOVl9ERVNUX0FMUEhBOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9DT05TVEFOVF9DT0xP
UjogICAgICAgICAgIGQzZEJsZW5kID0gRDNEMTFfQkxFTkRfQkxFTkRfRkFDVE9SOyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUjogZDNkQmxlbmQg
PSBEM0QxMV9CTEVORF9JTlZfQkxFTkRfRkFDVE9SOyAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
Q09OU1RBTlRfQUxQSEE6ICAgICAgICAgICBkM2RCbGVuZCA9IEQzRDExX0JMRU5EX0JMRU5EX0ZB
Q1RPUjsgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQ
SEE6IGQzZEJsZW5kID0gRDNEMTFfQkxFTkRfSU5WX0JMRU5EX0ZBQ1RPUjsgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX1NSQ19BTFBIQV9TQVRVUkFURTogICAgICAgZDNkQmxlbmQgPSBEM0QxMV9C
TEVORF9TUkNfQUxQSEFfU0FUOyAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIGQzZEJsZW5kOworfQorCitEM0QxMV9CTEVORF9P
UCBDb252ZXJ0QmxlbmRPcChHTGVudW0gZ2xCbGVuZE9wKQoreworICAgIEQzRDExX0JMRU5EX09Q
IGQzZEJsZW5kT3AgPSBEM0QxMV9CTEVORF9PUF9BREQ7CisKKyAgICBzd2l0Y2ggKGdsQmxlbmRP
cCkKKyAgICB7CisgICAgICBjYXNlIEdMX0ZVTkNfQUREOiAgICAgICAgICAgICAgZDNkQmxlbmRP
cCA9IEQzRDExX0JMRU5EX09QX0FERDsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9G
VU5DX1NVQlRSQUNUOiAgICAgICAgIGQzZEJsZW5kT3AgPSBEM0QxMV9CTEVORF9PUF9TVUJUUkFD
VDsgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUOiBkM2RC
bGVuZE9wID0gRDNEMTFfQkxFTkRfT1BfUkVWX1NVQlRSQUNUOyAgYnJlYWs7CisgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBkM2RCbGVuZE9wOworfQor
CitVSU5UOCBDb252ZXJ0Q29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUs
IGJvb2wgYWxwaGEpCit7CisgICAgVUlOVDggbWFzayA9IDA7CisgICAgaWYgKHJlZCkKKyAgICB7
CisgICAgICAgIG1hc2sgfD0gRDNEMTFfQ09MT1JfV1JJVEVfRU5BQkxFX1JFRDsKKyAgICB9Cisg
ICAgaWYgKGdyZWVuKQorICAgIHsKKyAgICAgICAgbWFzayB8PSBEM0QxMV9DT0xPUl9XUklURV9F
TkFCTEVfR1JFRU47CisgICAgfQorICAgIGlmIChibHVlKQorICAgIHsKKyAgICAgICAgbWFzayB8
PSBEM0QxMV9DT0xPUl9XUklURV9FTkFCTEVfQkxVRTsKKyAgICB9CisgICAgaWYgKGFscGhhKQor
ICAgIHsKKyAgICAgICAgbWFzayB8PSBEM0QxMV9DT0xPUl9XUklURV9FTkFCTEVfQUxQSEE7Cisg
ICAgfQorICAgIHJldHVybiBtYXNrOworfQorCitEM0QxMV9DVUxMX01PREUgQ29udmVydEN1bGxN
b2RlKGJvb2wgY3VsbEVuYWJsZWQsIEdMZW51bSBjdWxsTW9kZSkKK3sKKyAgICBEM0QxMV9DVUxM
X01PREUgY3VsbCA9IEQzRDExX0NVTExfTk9ORTsKKworICAgIGlmIChjdWxsRW5hYmxlZCkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAoY3VsbE1vZGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNl
IEdMX0ZST05UOiAgICAgICAgICAgIGN1bGwgPSBEM0QxMV9DVUxMX0ZST05UOyAgICBicmVhazsK
KyAgICAgICAgICBjYXNlIEdMX0JBQ0s6ICAgICAgICAgICAgIGN1bGwgPSBEM0QxMV9DVUxMX0JB
Q0s7ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZST05UX0FORF9CQUNLOiAgIGN1bGwg
PSBEM0QxMV9DVUxMX05PTkU7ICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGN1bGwg
PSBEM0QxMV9DVUxMX05PTkU7CisgICAgfQorCisgICAgcmV0dXJuIGN1bGw7Cit9CisKK0QzRDEx
X0NPTVBBUklTT05fRlVOQyBDb252ZXJ0Q29tcGFyaXNvbihHTGVudW0gY29tcGFyaXNvbikKK3sK
KyAgICBEM0QxMV9DT01QQVJJU09OX0ZVTkMgZDNkQ29tcCA9IEQzRDExX0NPTVBBUklTT05fTkVW
RVI7CisgICAgc3dpdGNoIChjb21wYXJpc29uKQorICAgIHsKKyAgICAgIGNhc2UgR0xfTkVWRVI6
ICAgIGQzZENvbXAgPSBEM0QxMV9DT01QQVJJU09OX05FVkVSOyAgICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX0FMV0FZUzogICBkM2RDb21wID0gRDNEMTFfQ09NUEFSSVNPTl9BTFdBWVM7
ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MRVNTOiAgICAgZDNkQ29tcCA9IEQzRDEx
X0NPTVBBUklTT05fTEVTUzsgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTEVRVUFM
OiAgIGQzZENvbXAgPSBEM0QxMV9DT01QQVJJU09OX0xFU1NfRVFVQUw7ICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX0VRVUFMOiAgICBkM2RDb21wID0gRDNEMTFfQ09NUEFSSVNPTl9FUVVBTDsg
ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9HUkVBVEVSOiAgZDNkQ29tcCA9IEQzRDEx
X0NPTVBBUklTT05fR1JFQVRFUjsgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfR0VRVUFM
OiAgIGQzZENvbXAgPSBEM0QxMV9DT01QQVJJU09OX0dSRUFURVJfRVFVQUw7ICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX05PVEVRVUFMOiBkM2RDb21wID0gRDNEMTFfQ09NUEFSSVNPTl9OT1RfRVFV
QUw7ICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisK
KyAgICByZXR1cm4gZDNkQ29tcDsKK30KKworRDNEMTFfREVQVEhfV1JJVEVfTUFTSyBDb252ZXJ0
RGVwdGhNYXNrKGJvb2wgZGVwdGhXcml0ZUVuYWJsZWQpCit7CisgICAgcmV0dXJuIGRlcHRoV3Jp
dGVFbmFibGVkID8gRDNEMTFfREVQVEhfV1JJVEVfTUFTS19BTEwgOiBEM0QxMV9ERVBUSF9XUklU
RV9NQVNLX1pFUk87Cit9CisKK1VJTlQ4IENvbnZlcnRTdGVuY2lsTWFzayhHTHVpbnQgc3RlbmNp
bG1hc2spCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFVJTlQ4PihzdGVuY2lsbWFzayk7Cit9
CisKK0QzRDExX1NURU5DSUxfT1AgQ29udmVydFN0ZW5jaWxPcChHTGVudW0gc3RlbmNpbE9wKQor
eworICAgIEQzRDExX1NURU5DSUxfT1AgZDNkU3RlbmNpbE9wID0gRDNEMTFfU1RFTkNJTF9PUF9L
RUVQOworCisgICAgc3dpdGNoIChzdGVuY2lsT3ApCisgICAgeworICAgICAgY2FzZSBHTF9aRVJP
OiAgICAgIGQzZFN0ZW5jaWxPcCA9IEQzRDExX1NURU5DSUxfT1BfWkVSTzsgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfS0VFUDogICAgICBkM2RTdGVuY2lsT3AgPSBEM0QxMV9TVEVOQ0lMX09Q
X0tFRVA7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JFUExBQ0U6ICAgZDNkU3RlbmNpbE9w
ID0gRDNEMTFfU1RFTkNJTF9PUF9SRVBMQUNFOyAgIGJyZWFrOworICAgICAgY2FzZSBHTF9JTkNS
OiAgICAgIGQzZFN0ZW5jaWxPcCA9IEQzRDExX1NURU5DSUxfT1BfSU5DUl9TQVQ7ICBicmVhazsK
KyAgICAgIGNhc2UgR0xfREVDUjogICAgICBkM2RTdGVuY2lsT3AgPSBEM0QxMV9TVEVOQ0lMX09Q
X0RFQ1JfU0FUOyAgYnJlYWs7CisgICAgICBjYXNlIEdMX0lOVkVSVDogICAgZDNkU3RlbmNpbE9w
ID0gRDNEMTFfU1RFTkNJTF9PUF9JTlZFUlQ7ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9JTkNS
X1dSQVA6IGQzZFN0ZW5jaWxPcCA9IEQzRDExX1NURU5DSUxfT1BfSU5DUjsgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfREVDUl9XUkFQOiBkM2RTdGVuY2lsT3AgPSBEM0QxMV9TVEVOQ0lMX09Q
X0RFQ1I7ICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0K
KworICAgIHJldHVybiBkM2RTdGVuY2lsT3A7Cit9CisKK0QzRDExX0ZJTFRFUiBDb252ZXJ0Rmls
dGVyKEdMZW51bSBtaW5GaWx0ZXIsIEdMZW51bSBtYWdGaWx0ZXIsIGZsb2F0IG1heEFuaXNvdHJv
cHkpCit7CisgICAgaWYgKG1heEFuaXNvdHJvcHkgPiAxLjBmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEQzRDExX0VOQ09ERV9BTklTT1RST1BJQ19GSUxURVIoZmFsc2UpOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBEM0QxMV9GSUxURVJfVFlQRSBkeE1pbiA9IEQzRDExX0ZJTFRF
Ul9UWVBFX1BPSU5UOworICAgICAgICBEM0QxMV9GSUxURVJfVFlQRSBkeE1pcCA9IEQzRDExX0ZJ
TFRFUl9UWVBFX1BPSU5UOworICAgICAgICBzd2l0Y2ggKG1pbkZpbHRlcikKKyAgICAgICAgewor
ICAgICAgICAgIGNhc2UgR0xfTkVBUkVTVDogICAgICAgICAgICAgICAgZHhNaW4gPSBEM0QxMV9G
SUxURVJfVFlQRV9QT0lOVDsgIGR4TWlwID0gRDNEMTFfRklMVEVSX1RZUEVfUE9JTlQ7ICBicmVh
azsKKyAgICAgICAgICBjYXNlIEdMX0xJTkVBUjogICAgICAgICAgICAgICAgIGR4TWluID0gRDNE
MTFfRklMVEVSX1RZUEVfTElORUFSOyBkeE1pcCA9IEQzRDExX0ZJTFRFUl9UWVBFX1BPSU5UOyAg
YnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOiBkeE1pbiA9
IEQzRDExX0ZJTFRFUl9UWVBFX1BPSU5UOyAgZHhNaXAgPSBEM0QxMV9GSUxURVJfVFlQRV9QT0lO
VDsgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOiAgZHhN
aW4gPSBEM0QxMV9GSUxURVJfVFlQRV9MSU5FQVI7IGR4TWlwID0gRDNEMTFfRklMVEVSX1RZUEVf
UE9JTlQ7ICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjog
IGR4TWluID0gRDNEMTFfRklMVEVSX1RZUEVfUE9JTlQ7ICBkeE1pcCA9IEQzRDExX0ZJTFRFUl9U
WVBFX0xJTkVBUjsgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVB
UjogICBkeE1pbiA9IEQzRDExX0ZJTFRFUl9UWVBFX0xJTkVBUjsgZHhNaXAgPSBEM0QxMV9GSUxU
RVJfVFlQRV9MSU5FQVI7IGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAg
ICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorCisgICAgICAgIEQzRDExX0ZJTFRF
Ul9UWVBFIGR4TWFnID0gRDNEMTFfRklMVEVSX1RZUEVfUE9JTlQ7CisgICAgICAgIHN3aXRjaCAo
bWFnRmlsdGVyKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9ORUFSRVNUOiBkeE1hZyA9
IEQzRDExX0ZJTFRFUl9UWVBFX1BPSU5UOyAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9MSU5F
QVI6ICBkeE1hZyA9IEQzRDExX0ZJTFRFUl9UWVBFX0xJTkVBUjsgYnJlYWs7CisgICAgICAgICAg
ZGVmYXVsdDogICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIEQzRDExX0VOQ09ERV9CQVNJQ19GSUxURVIoZHhNaW4sIGR4TWFnLCBkeE1pcCwgZmFsc2Up
OworICAgIH0KK30KKworRDNEMTFfVEVYVFVSRV9BRERSRVNTX01PREUgQ29udmVydFRleHR1cmVX
cmFwKEdMZW51bSB3cmFwKQoreworICAgIHN3aXRjaCAod3JhcCkKKyAgICB7CisgICAgICBjYXNl
IEdMX1JFUEVBVDogICAgICAgICAgcmV0dXJuIEQzRDExX1RFWFRVUkVfQUREUkVTU19XUkFQOwor
ICAgICAgY2FzZSBHTF9DTEFNUF9UT19FREdFOiAgIHJldHVybiBEM0QxMV9URVhUVVJFX0FERFJF
U1NfQ0xBTVA7CisgICAgICBjYXNlIEdMX01JUlJPUkVEX1JFUEVBVDogcmV0dXJuIEQzRDExX1RF
WFRVUkVfQUREUkVTU19NSVJST1I7CisgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgVU5S
RUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gRDNEMTFfVEVYVFVSRV9BRERSRVNTX1dS
QVA7Cit9CisKK0ZMT0FUIENvbnZlcnRNaW5MT0QoR0xlbnVtIG1pbkZpbHRlciwgdW5zaWduZWQg
aW50IGxvZE9mZnNldCkKK3sKKyAgICByZXR1cm4gKG1pbkZpbHRlciA9PSBHTF9ORUFSRVNUIHx8
IG1pbkZpbHRlciA9PSBHTF9MSU5FQVIpID8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGxvZE9mZnNldCkg
OiAtRkxUX01BWDsKK30KKworRkxPQVQgQ29udmVydE1heExPRChHTGVudW0gbWluRmlsdGVyLCB1
bnNpZ25lZCBpbnQgbG9kT2Zmc2V0KQoreworICAgIHJldHVybiAobWluRmlsdGVyID09IEdMX05F
QVJFU1QgfHwgbWluRmlsdGVyID09IEdMX0xJTkVBUikgPyBzdGF0aWNfY2FzdDxmbG9hdD4obG9k
T2Zmc2V0KSA6IEZMVF9NQVg7Cit9CisKK30KKworbmFtZXNwYWNlIGQzZDExX2dsCit7CisKK0dM
ZW51bSBDb252ZXJ0QmFja0J1ZmZlckZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpCit7CisgICAg
c3dpdGNoIChmb3JtYXQpCisgICAgeworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9V
Tk9STTogcmV0dXJuIEdMX1JHQkE4X09FUzsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4
QThfVU5PUk06IHJldHVybiBHTF9CR1JBOF9FWFQ7CisgICAgICBkZWZhdWx0OgorICAgICAgICBV
TlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Cit9CisKK0dM
ZW51bSBDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKK3sKKyAg
ICBzd2l0Y2ggKGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIERYR0lfRk9STUFUX1VOS05PV046
IHJldHVybiBHTF9OT05FOworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZfVU5PUk06IHJldHVy
biBHTF9ERVBUSF9DT01QT05FTlQxNjsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JN
X1M4X1VJTlQ6IHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKKyAgICAgIGRlZmF1bHQ6
CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIEdMX0RFUFRIMjRf
U1RFTkNJTDhfT0VTOworfQorCitHTGVudW0gQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChEWEdJ
X0ZPUk1BVCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpCisgICAgeworICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STToKKyAgICAgICAgcmV0dXJuIEdMX0JHUkE4X0VY
VDsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk06CisgICAgICAgIHJldHVy
biBHTF9SR0JBOF9PRVM7CisgICAgICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9STToKKyAgICAg
ICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2OworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9E
MjRfVU5PUk1fUzhfVUlOVDoKKyAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VT
OworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gR0xfUkdCQThfT0VTOworfQorCitHTGVudW0gQ29udmVydFRleHR1cmVJbnRlcm5hbEZv
cm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpCisgICAgewor
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STToKKyAgICAgICAgcmV0dXJuIEdM
X1JHQkE4X09FUzsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQThfVU5PUk06CisgICAgICAgIHJl
dHVybiBHTF9BTFBIQThfRVhUOworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk06Cisg
ICAgICAgIHJldHVybiBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDsKKyAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNOgorICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NFRF9S
R0JBX1MzVENfRFhUM19BTkdMRTsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNOgor
ICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRTsKKyAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUOgorICAgICAgICByZXR1cm4gR0xf
UkdCQTMyRl9FWFQ7CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVDoKKyAg
ICAgICAgcmV0dXJuIEdMX1JHQjMyRl9FWFQ7CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcx
NkIxNkExNl9GTE9BVDoKKyAgICAgICAgcmV0dXJuIEdMX1JHQkExNkZfRVhUOworICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STToKKyAgICAgICAgcmV0dXJuIEdMX0JHUkE4X0VY
VDsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVU5PUk06CisgICAgICAgIHJldHVybiBHTF9S
OF9FWFQ7CisgICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfVU5PUk06CisgICAgICAgIHJldHVy
biBHTF9SRzhfRVhUOworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfRkxPQVQ6CisgICAgICAg
IHJldHVybiBHTF9SMTZGX0VYVDsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X0ZMT0FU
OgorICAgICAgICByZXR1cm4gR0xfUkcxNkZfRVhUOworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9E
MTZfVU5PUk06CisgICAgICAgIHJldHVybiBHTF9ERVBUSF9DT01QT05FTlQxNjsKKyAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ6CisgICAgICAgIHJldHVybiBHTF9ERVBU
SDI0X1NURU5DSUw4X09FUzsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfVU5LTk9XTjoKKyAgICAg
ICAgcmV0dXJuIEdMX05PTkU7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgp
OworICAgIH0KKworICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Cit9CisKK30KKworbmFtZXNwYWNl
IGdsX2QzZDExCit7CisKK0RYR0lfRk9STUFUIENvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoR0xl
bnVtIGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEdM
X1JHQkE0OgorICAgICAgY2FzZSBHTF9SR0I1X0ExOgorICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6
CisgICAgICBjYXNlIEdMX1JHQjU2NToKKyAgICAgIGNhc2UgR0xfUkdCOF9PRVM6CisgICAgICAg
IHJldHVybiBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STTsKKyAgICAgIGNhc2UgR0xfQkdSQThf
RVhUOgorICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk07CisgICAgICBj
YXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgorICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfRDE2
X1VOT1JNOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVYODoKKyAgICAgIGNhc2UgR0xfREVQ
VEgyNF9TVEVOQ0lMOF9PRVM6CisgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1f
UzhfVUlOVDsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQor
CisgICAgcmV0dXJuIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOworfQorCitEWEdJX0ZPUk1B
VCBDb252ZXJ0VGV4dHVyZUZvcm1hdChHTGVudW0gaW50ZXJuYWxmb3JtYXQpCit7CisgICAgc3dp
dGNoIChpbnRlcm5hbGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEdMX1JHQjU2NToKKyAgICAg
IGNhc2UgR0xfUkdCQTQ6CisgICAgICBjYXNlIEdMX1JHQjVfQTE6CisgICAgICBjYXNlIEdMX1JH
QjhfT0VTOgorICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6CisgICAgICBjYXNlIEdMX0xVTUlOQU5D
RThfRVhUOgorICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQ6CisgICAgICAgIHJl
dHVybiBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STTsKKyAgICAgIGNhc2UgR0xfQUxQSEE4X0VY
VDoKKyAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0E4X1VOT1JNOworICAgICAgY2FzZSBHTF9D
T01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgorICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQxX0VYVDoKKyAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0JDMV9VTk9STTsK
KyAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKKyAgICAgICAg
cmV0dXJuIERYR0lfRk9STUFUX0JDMl9VTk9STTsKKyAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9S
R0JBX1MzVENfRFhUNV9BTkdMRToKKyAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0JDM19VTk9S
TTsKKyAgICAgIGNhc2UgR0xfUkdCQTMyRl9FWFQ6CisgICAgICBjYXNlIEdMX0FMUEhBMzJGX0VY
VDoKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVDoKKyAgICAgICAgcmV0dXJu
IERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDsKKyAgICAgIGNhc2UgR0xfUkdCMzJGX0VY
VDoKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMzJGX0VYVDoKKyAgICAgICAgcmV0dXJuIERYR0lf
Rk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDsKKyAgICAgIGNhc2UgR0xfUkdCQTE2Rl9FWFQ6Cisg
ICAgICBjYXNlIEdMX0FMUEhBMTZGX0VYVDoKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhB
MTZGX0VYVDoKKyAgICAgIGNhc2UgR0xfUkdCMTZGX0VYVDoKKyAgICAgIGNhc2UgR0xfTFVNSU5B
TkNFMTZGX0VYVDoKKyAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9B
VDsKKyAgICAgIGNhc2UgR0xfQkdSQThfRVhUOgorICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRf
QjhHOFI4QThfVU5PUk07CisgICAgICBjYXNlIEdMX1I4X0VYVDoKKyAgICAgICAgcmV0dXJuIERY
R0lfRk9STUFUX1I4X1VOT1JNOworICAgICAgY2FzZSBHTF9SRzhfRVhUOgorICAgICAgICByZXR1
cm4gRFhHSV9GT1JNQVRfUjhHOF9VTk9STTsKKyAgICAgIGNhc2UgR0xfUjE2Rl9FWFQ6CisgICAg
ICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMTZfRkxPQVQ7CisgICAgICBjYXNlIEdMX1JHMTZGX0VY
VDoKKyAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1IxNkcxNl9GTE9BVDsKKyAgICAgIGNhc2Ug
R0xfREVQVEhfQ09NUE9ORU5UMTY6CisgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9EMTZfVU5P
Uk07CisgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUzoKKyAgICAgIGNhc2UgR0xf
REVQVEgyNF9TVEVOQ0lMOF9PRVM6CisgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9EMjRfVU5P
Uk1fUzhfVUlOVDsKKyAgICAgIGNhc2UgR0xfTk9ORToKKyAgICAgICAgcmV0dXJuIERYR0lfRk9S
TUFUX1VOS05PV047CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
IH0KKworICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STTsKK30KKworfQorCitu
YW1lc3BhY2UgZDNkMTEKK3sKKwordm9pZCBTZXRQb3NpdGlvblRleENvb3JkVmVydGV4KFBvc2l0
aW9uVGV4Q29vcmRWZXJ0ZXgqIHZlcnRleCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgdSwgZmxv
YXQgdikKK3sKKyAgICB2ZXJ0ZXgtPnggPSB4OworICAgIHZlcnRleC0+eSA9IHk7CisgICAgdmVy
dGV4LT51ID0gdTsKKyAgICB2ZXJ0ZXgtPnYgPSB2OworfQorCit2b2lkIFNldFBvc2l0aW9uRGVw
dGhDb2xvclZlcnRleChQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgqIHZlcnRleCwgZmxvYXQgeCwg
ZmxvYXQgeSwgZmxvYXQgeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGdsOjpDb2xvciAmY29sb3IpCit7CisgICAgdmVydGV4LT54ID0geDsKKyAgICB2ZXJ0ZXgtPnkg
PSB5OworICAgIHZlcnRleC0+eiA9IHo7CisgICAgdmVydGV4LT5yID0gY29sb3IucmVkOworICAg
IHZlcnRleC0+ZyA9IGNvbG9yLmdyZWVuOworICAgIHZlcnRleC0+YiA9IGNvbG9yLmJsdWU7Cisg
ICAgdmVydGV4LT5hID0gY29sb3IuYWxwaGE7Cit9CisKK3NpemVfdCBDb21wdXRlUGl4ZWxTaXpl
Qml0cyhEWEdJX0ZPUk1BVCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpCisgICAgewor
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMV9VTk9STToKKyAgICAgICAgcmV0dXJuIDE7CisKKyAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQThfVU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX1I4
X1NJTlQ6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1NOT1JNOgorICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SOF9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVUlOVDoKKyAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVU5PUk06CisgICAgICAgIHJldHVybiA4OworCisgICAg
ICBjYXNlIERYR0lfRk9STUFUX0I1RzVSNUExX1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9CNUc2UjVfVU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9STToKKyAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjE2X0ZMT0FUOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZf
U0lOVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X1NOT1JNOgorICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SMTZfVFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IxNl9VSU5UOgor
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfVU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFU
X1I4RzhfU0lOVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9TTk9STToKKyAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfUjhHOF9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhH
OF9VSU5UOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNOgorICAgICAgICByZXR1
cm4gMTY7CisKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4WDhfVFlQRUxFU1M6CisgICAg
ICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOFg4X1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9COEc4UjhYOF9VTk9STV9TUkdCOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1f
UzhfVUlOVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FUOgorICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9EMzJfRkxPQVRfUzhYMjRfVUlOVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
RzhSOF9HOEI4X1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTBHMTBCMTBfWFJfQklB
U19BMl9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjEwRzEwQjEwQTJfVFlQRUxFU1M6
CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IxMEcxMEIxMEEyX1VJTlQ6CisgICAgICBjYXNlIERY
R0lfRk9STUFUX1IxMEcxMEIxMEEyX1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTFH
MTFCMTBfRkxPQVQ6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9GTE9BVDoKKyAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X1NJTlQ6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1Ix
NkcxNl9TTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X1RZUEVMRVNTOgorICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfVUlOVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjE2RzE2X1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMjRfVU5PUk1fWDhfVFlQRUxF
U1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IyNEc4X1RZUEVMRVNTOgorICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9SMzJfRkxPQVQ6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMl9GTE9BVF9Y
OFgyNF9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyX1NJTlQ6CisgICAgICBj
YXNlIERYR0lfRk9STUFUX1IzMl9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMy
X1VJTlQ6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfQjhHOF9VTk9STToKKyAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfU0lOVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhH
OEI4QThfU05PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1RZUEVMRVNTOgor
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VSU5UOgorICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SOEc4QjhBOF9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5P
Uk1fU1JHQjoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVFlQRUxFU1M6CisgICAg
ICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9COEc4UjhBOF9VTk9STV9TUkdCOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOUc5QjlFNV9T
SEFSRURFWFA6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1gyNF9UWVBFTEVTU19HOF9VSU5UOgor
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9YMzJfVFlQRUxFU1NfRzhYMjRfVUlOVDoKKyAgICAgICAg
cmV0dXJuIDMyOworCisgICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9BVDoK
KyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1NJTlQ6CisgICAgICBjYXNlIERY
R0lfRk9STUFUX1IxNkcxNkIxNkExNl9TTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2
RzE2QjE2QTE2X1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZf
VUlOVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1VOT1JNOgorICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQ6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1Iz
MkczMl9TSU5UOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJfVFlQRUxFU1M6CisgICAg
ICBjYXNlIERYR0lfRk9STUFUX1IzMkczMl9VSU5UOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
MzJHOFgyNF9UWVBFTEVTUzoKKyAgICAgICAgcmV0dXJuIDY0OworCisgICAgICBjYXNlIERYR0lf
Rk9STUFUX1IzMkczMkIzMl9GTE9BVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMy
X1NJTlQ6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9UWVBFTEVTUzoKKyAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX1VJTlQ6CisgICAgICAgIHJldHVybiA5NjsKKwor
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQ6CisgICAgICBjYXNlIERY
R0lfRk9STUFUX1IzMkczMkIzMkEzMl9TSU5UOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJH
MzJCMzJBMzJfVFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9V
SU5UOgorICAgICAgICByZXR1cm4gMTI4OworCisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9U
WVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNOgorICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9CQzFfVU5PUk1fU1JHQjoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1NO
T1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVFlQRUxFU1M6CisgICAgICBjYXNlIERY
R0lfRk9STUFUX0JDNF9VTk9STToKKyAgICAgICAgcmV0dXJuIDQ7CisKKyAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkMyX1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk06
CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STV9TUkdCOgorICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9CQzNfVFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STToK
KyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNX1NSR0I6CisgICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDNV9TTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1RZUEVMRVNTOgor
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfVU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFU
X0JDNkhfU0YxNjoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9UWVBFTEVTUzoKKyAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9VRjE2OgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdf
VFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9STToKKyAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkM3X1VOT1JNX1NSR0I6CisgICAgICAgIHJldHVybiA4OworCisgICAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3NpemVfdCBDb21wdXRlQmxv
Y2tTaXplQml0cyhEWEdJX0ZPUk1BVCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpCisg
ICAgeworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVFlQRUxFU1M6CisgICAgICBjYXNlIERY
R0lfRk9STUFUX0JDMV9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNX1NS
R0I6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9TTk9STToKKyAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfQkM0X1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVU5PUk06Cisg
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkMyX1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk1fU1JHQjoKKyAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9CQzNfVU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STV9TUkdCOgorICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfU05PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JD
NV9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1VOT1JNOgorICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzZIX1NGMTY6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVFlQ
RUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVUYxNjoKKyAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkM3X1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk06
CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9STV9TUkdCOgorICAgICAgICByZXR1cm4g
Q29tcHV0ZVBpeGVsU2l6ZUJpdHMoZm9ybWF0KSAqIDE2OworICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitib29sIElz
Q29tcHJlc3NlZChEWEdJX0ZPUk1BVCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpCisg
ICAgeworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVFlQRUxFU1M6CisgICAgICBjYXNlIERY
R0lfRk9STUFUX0JDMV9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNX1NS
R0I6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9TTk9STToKKyAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfQkM0X1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVU5PUk06Cisg
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkMyX1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk1fU1JHQjoKKyAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9CQzNfVU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STV9TUkdCOgorICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfU05PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JD
NV9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1VOT1JNOgorICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzZIX1NGMTY6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVFlQ
RUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVUYxNjoKKyAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkM3X1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk06
CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9STV9TUkdCOgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfVU5LTk9XTjoKKyAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KK30KKwordW5zaWduZWQgaW50IEdldFRleHR1cmVGb3JtYXREaW1l
bnNpb25BbGlnbm1lbnQoRFhHSV9GT1JNQVQgZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0
KQorICAgIHsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1RZUEVMRVNTOgorICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9S
TV9TUkdCOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfU05PUk06CisgICAgICBjYXNlIERY
R0lfRk9STUFUX0JDNF9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1VOT1JN
OgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDMl9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNX1NSR0I6
CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfQkMzX1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk1fU1JHQjoK
KyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1NOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9CQzVfVFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9VTk9STToKKyAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9TRjE2OgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZI
X1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1VGMTY6CisgICAgICBjYXNl
IERYR0lfRk9STUFUX0JDN19UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1VO
T1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk1fU1JHQjoKKyAgICAgICAgcmV0
dXJuIDQ7CisgICAgICBjYXNlIERYR0lfRk9STUFUX1VOS05PV046CisgICAgICAgIFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIHJldHVybiAxOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IDE7CisgICAgfQorfQorCitib29sIElzRGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFUIGZv
cm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIERYR0lfRk9S
TUFUX0QzMl9GTE9BVF9TOFgyNF9VSU5UOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxP
QVQ6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOgorICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9EMTZfVU5PUk06CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworRFhHSV9GT1JNQVQgR2V0
RGVwdGhUZXh0dXJlRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZv
cm1hdCkKKyAgICB7CisgICAgICBjYXNlIERYR0lfRk9STUFUX0QzMl9GTE9BVF9TOFgyNF9VSU5U
OiByZXR1cm4gRFhHSV9GT1JNQVRfUjMyRzhYMjRfVFlQRUxFU1M7CisgICAgICBjYXNlIERYR0lf
Rk9STUFUX0QzMl9GTE9BVDogICAgICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjMyX1RZUEVM
RVNTOworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDogICAgcmV0dXJu
IERYR0lfRk9STUFUX1IyNEc4X1RZUEVMRVNTOworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZf
VU5PUk06ICAgICAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1IxNl9UWVBFTEVTUzsKKyAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgICAgICAgICAgIHJldHVybiBEWEdJX0ZPUk1B
VF9VTktOT1dOOworICAgIH0KK30KKworRFhHSV9GT1JNQVQgR2V0RGVwdGhTaGFkZXJSZXNvdXJj
ZUZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpCisgICAg
eworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVRfUzhYMjRfVUlOVDogcmV0dXJuIERY
R0lfRk9STUFUX1IzMl9GTE9BVF9YOFgyNF9UWVBFTEVTUzsKKyAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfRDMyX0ZMT0FUOiAgICAgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMzJfVUlOVDsKKyAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ6ICAgIHJldHVybiBEWEdJX0ZP
Uk1BVF9SMjRfVU5PUk1fWDhfVFlQRUxFU1M7CisgICAgICBjYXNlIERYR0lfRk9STUFUX0QxNl9V
Tk9STTogICAgICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjE2X1VOT1JNOworICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAgICAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1VO
S05PV047CisgICAgfQorfQorCitIUkVTVUxUIFNldERlYnVnTmFtZShJRDNEMTFEZXZpY2VDaGls
ZCAqcmVzb3VyY2UsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisjaWYgZGVmaW5lZChfREVCVUcpCisg
ICAgcmV0dXJuIHJlc291cmNlLT5TZXRQcml2YXRlRGF0YShXS1BESURfRDNERGVidWdPYmplY3RO
YW1lLCBzdHJsZW4obmFtZSksIG5hbWUpOworI2Vsc2UKKyAgICByZXR1cm4gU19PSzsKKyNlbmRp
ZgorfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjFiYzQ4YzFhMTM1YTVkODhhODliZDU2ODU2OWZkNmU5ZGQ2NzczZWUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaApAQCAtMCwwICsxLDk1IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworLy8gcmVuZGVyZXIxMV91dGlscy5oOiBDb252ZXJzaW9uIGZ1bmN0aW9ucyBhbmQgb3Ro
ZXIgdXRpbGl0eSByb3V0aW5lcworLy8gc3BlY2lmaWMgdG8gdGhlIEQzRDExIHJlbmRlcmVyLgor
CisjaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjExX1VUSUxTX0gKKyNkZWZpbmUg
TElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUkVSMTFfVVRJTFNfSAorCisjaW5jbHVkZSAibGliR0xF
U3YyL2FuZ2xldHlwZXMuaCIKKworbmFtZXNwYWNlIGdsX2QzZDExCit7CisKK0QzRDExX0JMRU5E
IENvbnZlcnRCbGVuZEZ1bmMoR0xlbnVtIGdsQmxlbmQsIGJvb2wgaXNBbHBoYSk7CitEM0QxMV9C
TEVORF9PUCBDb252ZXJ0QmxlbmRPcChHTGVudW0gZ2xCbGVuZE9wKTsKK1VJTlQ4IENvbnZlcnRD
b2xvck1hc2soYm9vbCBtYXNrUmVkLCBib29sIG1hc2tHcmVlbiwgYm9vbCBtYXNrQmx1ZSwgYm9v
bCBtYXNrQWxwaGEpOworCitEM0QxMV9DVUxMX01PREUgQ29udmVydEN1bGxNb2RlKGJvb2wgY3Vs
bEVuYWJsZWQsIEdMZW51bSBjdWxsTW9kZSk7CisKK0QzRDExX0NPTVBBUklTT05fRlVOQyBDb252
ZXJ0Q29tcGFyaXNvbihHTGVudW0gY29tcGFyaXNvbik7CitEM0QxMV9ERVBUSF9XUklURV9NQVNL
IENvbnZlcnREZXB0aE1hc2soYm9vbCBkZXB0aFdyaXRlRW5hYmxlZCk7CitVSU5UOCBDb252ZXJ0
U3RlbmNpbE1hc2soR0x1aW50IHN0ZW5jaWxtYXNrKTsKK0QzRDExX1NURU5DSUxfT1AgQ29udmVy
dFN0ZW5jaWxPcChHTGVudW0gc3RlbmNpbE9wKTsKKworRDNEMTFfRklMVEVSIENvbnZlcnRGaWx0
ZXIoR0xlbnVtIG1pbkZpbHRlciwgR0xlbnVtIG1hZ0ZpbHRlciwgZmxvYXQgbWF4QW5pc290cm9w
eSk7CitEM0QxMV9URVhUVVJFX0FERFJFU1NfTU9ERSBDb252ZXJ0VGV4dHVyZVdyYXAoR0xlbnVt
IHdyYXApOworRkxPQVQgQ29udmVydE1pbkxPRChHTGVudW0gbWluRmlsdGVyLCB1bnNpZ25lZCBp
bnQgbG9kT2Zmc2V0KTsKK0ZMT0FUIENvbnZlcnRNYXhMT0QoR0xlbnVtIG1pbkZpbHRlciwgdW5z
aWduZWQgaW50IGxvZE9mZnNldCk7CisKK0RYR0lfRk9STUFUIENvbnZlcnRSZW5kZXJidWZmZXJG
b3JtYXQoR0xlbnVtIGZvcm1hdCk7CitEWEdJX0ZPUk1BVCBDb252ZXJ0VGV4dHVyZUZvcm1hdChH
TGVudW0gZm9ybWF0KTsKK30KKworbmFtZXNwYWNlIGQzZDExX2dsCit7CisKK0dMZW51bSBDb252
ZXJ0QmFja0J1ZmZlckZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpOworR0xlbnVtIENvbnZlcnRE
ZXB0aFN0ZW5jaWxGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKK0dMZW51bSBDb252ZXJ0UmVu
ZGVyYnVmZmVyRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCk7CitHTGVudW0gQ29udmVydFRleHR1
cmVJbnRlcm5hbEZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpOworCit9CisKK25hbWVzcGFjZSBk
M2QxMQoreworCitzdHJ1Y3QgUG9zaXRpb25UZXhDb29yZFZlcnRleAoreworICAgIGZsb2F0IHgs
IHk7CisgICAgZmxvYXQgdSwgdjsKK307Cit2b2lkIFNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgo
UG9zaXRpb25UZXhDb29yZFZlcnRleCogdmVydGV4LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB1
LCBmbG9hdCB2KTsKKworc3RydWN0IFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleAoreworICAgIGZs
b2F0IHgsIHksIHo7CisgICAgZmxvYXQgciwgZywgYiwgYTsKK307Cit2b2lkIFNldFBvc2l0aW9u
RGVwdGhDb2xvclZlcnRleChQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgqIHZlcnRleCwgZmxvYXQg
eCwgZmxvYXQgeSwgZmxvYXQgeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGdsOjpDb2xvciAmY29sb3IpOworCitzaXplX3QgQ29tcHV0ZVBpeGVsU2l6ZUJpdHMoRFhH
SV9GT1JNQVQgZm9ybWF0KTsKK3NpemVfdCBDb21wdXRlQmxvY2tTaXplQml0cyhEWEdJX0ZPUk1B
VCBmb3JtYXQpOworCitib29sIElzQ29tcHJlc3NlZChEWEdJX0ZPUk1BVCBmb3JtYXQpOwordW5z
aWduZWQgaW50IEdldFRleHR1cmVGb3JtYXREaW1lbnNpb25BbGlnbm1lbnQoRFhHSV9GT1JNQVQg
Zm9ybWF0KTsKKworYm9vbCBJc0RlcHRoU3RlbmNpbEZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQp
OworRFhHSV9GT1JNQVQgR2V0RGVwdGhUZXh0dXJlRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCk7
CitEWEdJX0ZPUk1BVCBHZXREZXB0aFNoYWRlclJlc291cmNlRm9ybWF0KERYR0lfRk9STUFUIGZv
cm1hdCk7CisKK0hSRVNVTFQgU2V0RGVidWdOYW1lKElEM0QxMURldmljZUNoaWxkICpyZXNvdXJj
ZSwgY29uc3QgY2hhciAqbmFtZSk7CisKK2lubGluZSBib29sIGlzRGV2aWNlTG9zdEVycm9yKEhS
RVNVTFQgZXJyb3JDb2RlKQoreworICAgIHN3aXRjaCAoZXJyb3JDb2RlKQorICAgIHsKKyAgICAg
IGNhc2UgRFhHSV9FUlJPUl9ERVZJQ0VfSFVORzoKKyAgICAgIGNhc2UgRFhHSV9FUlJPUl9ERVZJ
Q0VfUkVNT1ZFRDoKKyAgICAgIGNhc2UgRFhHSV9FUlJPUl9ERVZJQ0VfUkVTRVQ6CisgICAgICBj
YXNlIERYR0lfRVJST1JfRFJJVkVSX0lOVEVSTkFMX0VSUk9SOgorICAgICAgY2FzZSBEWEdJX0VS
Uk9SX05PVF9DVVJSRU5UTFlfQVZBSUxBQkxFOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK30KKworI2VuZGlm
IC8vIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjExX1VUSUxTX0gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVy
cy9DbGVhcjExLmhsc2wgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL3NoYWRlcnMvQ2xlYXIxMS5obHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA0MmFjNjk5YjY2
YTIyMzlhZGJmNTI1MWZhYWYzYjNlNGMzZmVjNWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvQ2xl
YXIxMS5obHNsCkBAIC0wLDAgKzEsMzggQEAKK3ZvaWQgVlNfQ2xlYXIoIGluIGZsb2F0MyAgaW5Q
b3NpdGlvbiA6ICAgIFBPU0lUSU9OLCAgaW4gZmxvYXQ0ICBpbkNvbG9yIDogQ09MT1IsCisgICAg
ICAgICAgICAgIG91dCBmbG9hdDQgb3V0UG9zaXRpb24gOiBTVl9QT1NJVElPTiwgb3V0IGZsb2F0
NCBvdXRDb2xvciA6IENPTE9SKQoreworICAgIG91dFBvc2l0aW9uID0gZmxvYXQ0KGluUG9zaXRp
b24sIDEuMGYpOworICAgIG91dENvbG9yID0gaW5Db2xvcjsKK30KKworLy8gQXNzdW1lIHdlIGFy
ZSBpbiBTTTQrLCB3aGljaCBoYXMgOCBjb2xvciBvdXRwdXRzCitzdHJ1Y3QgUFNfT3V0cHV0TXVs
dGlwbGUKK3sKKwlmbG9hdDQgY29sb3IwIDogU1ZfVEFSR0VUMDsKKwlmbG9hdDQgY29sb3IxIDog
U1ZfVEFSR0VUMTsKKwlmbG9hdDQgY29sb3IyIDogU1ZfVEFSR0VUMjsKKwlmbG9hdDQgY29sb3Iz
IDogU1ZfVEFSR0VUMzsKKwlmbG9hdDQgY29sb3I0IDogU1ZfVEFSR0VUNDsKKwlmbG9hdDQgY29s
b3I1IDogU1ZfVEFSR0VUNTsKKwlmbG9hdDQgY29sb3I2IDogU1ZfVEFSR0VUNjsKKwlmbG9hdDQg
Y29sb3I3IDogU1ZfVEFSR0VUNzsKK307CisKK1BTX091dHB1dE11bHRpcGxlIFBTX0NsZWFyTXVs
dGlwbGUoaW4gZmxvYXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQ0IGluQ29s
b3IgOiBDT0xPUikKK3sKKwlQU19PdXRwdXRNdWx0aXBsZSBvdXRDb2xvcjsKKwlvdXRDb2xvci5j
b2xvcjAgPSBpbkNvbG9yOworCW91dENvbG9yLmNvbG9yMSA9IGluQ29sb3I7CisJb3V0Q29sb3Iu
Y29sb3IyID0gaW5Db2xvcjsKKwlvdXRDb2xvci5jb2xvcjMgPSBpbkNvbG9yOworCW91dENvbG9y
LmNvbG9yNCA9IGluQ29sb3I7CisJb3V0Q29sb3IuY29sb3I1ID0gaW5Db2xvcjsKKwlvdXRDb2xv
ci5jb2xvcjYgPSBpbkNvbG9yOworCW91dENvbG9yLmNvbG9yNyA9IGluQ29sb3I7CisJcmV0dXJu
IG91dENvbG9yOworfQorCitmbG9hdDQgUFNfQ2xlYXJTaW5nbGUoaW4gZmxvYXQ0IGluUG9zaXRp
b24gOiBTVl9Qb3NpdGlvbiwgaW4gZmxvYXQ0IGluQ29sb3IgOiBDT0xPUikgOiBTVl9UYXJnZXQw
Cit7CisJcmV0dXJuIGluQ29sb3I7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvUGFzc3Rocm91Z2gxMS5o
bHNsIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9zaGFkZXJzL1Bhc3N0aHJvdWdoMTEuaGxzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40M2I3ODAxZWZjMWZlZjZl
MjM5MTgwMDY3ZGQwMjM2OTk4NTViOWEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL1Bhc3N0aHJv
dWdoMTEuaGxzbApAQCAtMCwwICsxLDI5IEBACitUZXh0dXJlMkQgVGV4dHVyZSA6IHJlZ2lzdGVy
KHQwKTsKK1NhbXBsZXJTdGF0ZSBTYW1wbGVyIDogcmVnaXN0ZXIoczApOworCit2b2lkIFZTX1Bh
c3N0aHJvdWdoKCBpbiBmbG9hdDIgIGluUG9zaXRpb24gOiAgICBQT1NJVElPTiwgIGluIGZsb2F0
MiAgaW5UZXhDb29yZCA6IFRFWENPT1JEMCwKKyAgICAgICAgICAgICAgICAgICAgb3V0IGZsb2F0
NCBvdXRQb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBvdXQgZmxvYXQyIG91dFRleENvb3JkIDogVEVY
Q09PUkQwKQoreworICAgIG91dFBvc2l0aW9uID0gZmxvYXQ0KGluUG9zaXRpb24sIDAuMGYsIDEu
MGYpOworICAgIG91dFRleENvb3JkID0gaW5UZXhDb29yZDsKK30KKworZmxvYXQ0IFBTX1Bhc3N0
aHJvdWdoUkdCQShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIg
aW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgcmV0dXJuIFRleHR1
cmUuU2FtcGxlKFNhbXBsZXIsIGluVGV4Q29vcmQpLnJnYmE7Cit9CisKK2Zsb2F0NCBQU19QYXNz
dGhyb3VnaFJHQihpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIg
aW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgcmV0dXJuIGZsb2F0
NChUZXh0dXJlLlNhbXBsZShTYW1wbGVyLCBpblRleENvb3JkKS5yZ2IsIDEuMGYpOworfQorCitm
bG9hdDQgUFNfUGFzc3Rocm91Z2hMdW0oaW4gZmxvYXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJVElP
TiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDApIDogU1ZfVEFSR0VUMAoreworICAg
IHJldHVybiBmbG9hdDQoVGV4dHVyZS5TYW1wbGUoU2FtcGxlciwgaW5UZXhDb29yZCkucnJyLCAx
LjBmKTsKK30KKworZmxvYXQ0IFBTX1Bhc3N0aHJvdWdoTHVtQWxwaGEoaW4gZmxvYXQ0IGluUG9z
aXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDApIDog
U1ZfVEFSR0VUMAoreworICAgIHJldHVybiBUZXh0dXJlLlNhbXBsZShTYW1wbGVyLCBpblRleENv
b3JkKS5ycnJhOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyMTF2cy5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJz
L2NvbXBpbGVkL2NsZWFyMTF2cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZiYzc0MzEyNmVkMDZjOGY2NzU4ZTEw
ZTVkMTc3MjAxNDk1Yzk2ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXIx
MXZzLmgKQEAgLTAsMCArMSwxMzEgQEAKKyNpZiAwDQorLy8NCisvLyBHZW5lcmF0ZWQgYnkgTWlj
cm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQNCisvLw0KKy8v
DQorLy8vDQorLy8NCisvLyBJbnB1dCBzaWduYXR1cmU6DQorLy8NCisvLyBOYW1lICAgICAgICAg
ICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAgIFVzZWQNCisv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0t
LS0tLSAtLS0tLS0NCisvLyBQT1NJVElPTiAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAg
IDAgICAgIE5PTkUgICBmbG9hdCAgIHh5eiANCisvLyBDT0xPUiAgICAgICAgICAgICAgICAgICAg
MCAgIHh5encgICAgICAgIDEgICAgIE5PTkUgICBmbG9hdCAgIHh5encNCisvLw0KKy8vDQorLy8g
T3V0cHV0IHNpZ25hdHVyZToNCisvLw0KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAg
TWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KKy8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0tLQ0KKy8v
IFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgIGZs
b2F0ICAgeHl6dw0KKy8vIENPTE9SICAgICAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAg
MSAgICAgTk9ORSAgIGZsb2F0ICAgeHl6dw0KKy8vDQordnNfNF8wDQorZGNsX2lucHV0IHYwLnh5
eg0KK2RjbF9pbnB1dCB2MS54eXp3DQorZGNsX291dHB1dF9zaXYgbzAueHl6dywgcG9zaXRpb24N
CitkY2xfb3V0cHV0IG8xLnh5encNCittb3YgbzAueHl6LCB2MC54eXp4DQorbW92IG8wLncsIGwo
MS4wMDAwMDApDQorbW92IG8xLnh5encsIHYxLnh5encNCityZXQgDQorLy8gQXBwcm94aW1hdGVs
eSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCisjZW5kaWYNCisNCitjb25zdCBCWVRFIGdfVlNf
Q2xlYXJbXSA9DQorew0KKyAgICAgNjgsICA4OCwgIDY2LCAgNjcsICA5NywgICA1LCANCisgICAg
IDEzLCAxNjMsIDE2MCwgMjU0LCAgOTUsIDEyNywgDQorICAgICAzMCwgMTk0LCAxMjEsIDE0NCwg
MjM2LCAxODUsIA0KKyAgICAgNTksICAyOSwgICAxLCAgIDAsICAgMCwgICAwLCANCisgICAgIDQ4
LCAgIDIsICAgMCwgICAwLCAgIDUsICAgMCwgDQorICAgICAgMCwgICAwLCAgNTIsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAxNDAsICAgMCwgICAwLCAgIDAsIDIyMCwgICAwLCANCisgICAgICAwLCAg
IDAsICA0OCwgICAxLCAgIDAsICAgMCwgDQorICAgIDE4MCwgICAxLCAgIDAsICAgMCwgIDgyLCAg
NjgsIA0KKyAgICAgNjksICA3MCwgIDgwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgMjgsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCANCisgICAgMjU0LCAyNTUsICAg
MCwgICAxLCAgIDAsICAgMCwgDQorICAgICAyOCwgICAwLCAgIDAsICAgMCwgIDc3LCAxMDUsIA0K
KyAgICAgOTksIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCANCisgICAgMTE2LCAgMzIsICA0MCwg
IDgyLCAgNDEsICAzMiwgDQorICAgICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsIA0KKyAg
ICAxMDQsICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCANCisgICAgIDY3LCAxMTEsIDEwOSwgMTEy
LCAxMDUsIDEwOCwgDQorICAgIDEwMSwgMTE0LCAgMzIsICA1NywgIDQ2LCAgNTEsIA0KKyAgICAg
NDgsICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4LCANCisgICAgIDQ2LCAgNDksICA1NCwgIDUxLCAg
NTYsICA1MiwgDQorICAgICAgMCwgMTcxLCAgNzMsICA4MywgIDcxLCAgNzgsIA0KKyAgICAgNzIs
ICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCANCisgICAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICA1NiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDcsICAgNywgICAwLCAgIDAsIA0KKyAgICAgNjUsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDE1
LCAgMTUsICAgMCwgICAwLCANCisgICAgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgDQor
ICAgICA3OSwgIDc4LCAgIDAsICA2NywgIDc5LCAgNzYsIA0KKyAgICAgNzksICA4MiwgICAwLCAx
NzEsICA3OSwgIDgzLCANCisgICAgIDcxLCAgNzgsICA3NiwgICAwLCAgIDAsICAgMCwgDQorICAg
ICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDU2LCAgIDAs
ICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQorICAgICAg
MCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAx
NSwgICAwLCANCisgICAgICAwLCAgIDAsICA2OCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwg
ICAwLCANCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgMTUsICAgMCwgDQorICAgICAgMCwgICAw
LCAgODMsICA4NiwgIDk1LCAgODAsIA0KKyAgICAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5
LCANCisgICAgIDc4LCAgIDAsICA2NywgIDc5LCAgNzYsICA3OSwgDQorICAgICA4MiwgICAwLCAx
NzEsIDE3MSwgIDgzLCAgNzIsIA0KKyAgICAgNjgsICA4MiwgMTI0LCAgIDAsICAgMCwgICAwLCAN
CisgICAgIDY0LCAgIDAsICAgMSwgICAwLCAgMzEsICAgMCwgDQorICAgICAgMCwgICAwLCAgOTUs
ICAgMCwgICAwLCAgIDMsIA0KKyAgICAxMTQsICAxNiwgIDE2LCAgIDAsICAgMCwgICAwLCANCisg
ICAgICAwLCAgIDAsICA5NSwgICAwLCAgIDAsICAgMywgDQorICAgIDI0MiwgIDE2LCAgMTYsICAg
MCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgMTAzLCAgIDAsICAgMCwgICA0LCANCisgICAg
MjQyLCAgMzIsICAxNiwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDEsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAxMDEsICAgMCwgICAwLCAgIDMsIDI0MiwgIDMyLCANCisgICAgIDE2
LCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgICA1NCwgICAwLCAgIDAsICAgNSwgMTE0
LCAgMzIsIA0KKyAgICAgMTYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgIDcwLCAg
MTgsICAxNiwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgNTQsICAgMCwgICAwLCAg
IDUsIA0KKyAgICAxMzAsICAzMiwgIDE2LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAs
ICAgMSwgIDY0LCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAxMjgsICA2MywgIDU0LCAgIDAs
IA0KKyAgICAgIDAsICAgNSwgMjQyLCAgMzIsICAxNiwgICAwLCANCisgICAgICAxLCAgIDAsICAg
MCwgICAwLCAgNzAsICAzMCwgDQorICAgICAxNiwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAgNjIsICAgMCwgICAwLCAgIDEsICA4MywgIDg0LCANCisgICAgIDY1LCAgODQsIDExNiwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICA0LCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsIA0KKyAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQor
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMA0KK307DQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFybXVsdGlwbGUxMXBzLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGls
ZWQvY2xlYXJtdWx0aXBsZTExcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNGI0NDVhYzNmNmE3MWU0YzVlMjFh
ZGM0YmFlOWFmZGI5MjgzOWU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFy
bXVsdGlwbGUxMXBzLmgKQEAgLTAsMCArMSwxOTYgQEAKKyNpZiAwDQorLy8NCisvLyBHZW5lcmF0
ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQN
CisvLw0KKy8vDQorLy8vDQorLy8NCisvLyBJbnB1dCBzaWduYXR1cmU6DQorLy8NCisvLyBOYW1l
ICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAg
IFVzZWQNCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0t
LS0tLS0gLS0tLS0tLSAtLS0tLS0NCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5
encgICAgICAgIDAgICAgICBQT1MgICBmbG9hdCAgICAgICANCisvLyBDT0xPUiAgICAgICAgICAg
ICAgICAgICAgMCAgIHh5encgICAgICAgIDEgICAgIE5PTkUgICBmbG9hdCAgIHh5encNCisvLw0K
Ky8vDQorLy8gT3V0cHV0IHNpZ25hdHVyZToNCisvLw0KKy8vIE5hbWUgICAgICAgICAgICAgICAg
IEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KKy8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0t
LS0tLQ0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRB
UkdFVCAgIGZsb2F0ICAgeHl6dw0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAxICAgeHl6
dyAgICAgICAgMSAgIFRBUkdFVCAgIGZsb2F0ICAgeHl6dw0KKy8vIFNWX1RBUkdFVCAgICAgICAg
ICAgICAgICAyICAgeHl6dyAgICAgICAgMiAgIFRBUkdFVCAgIGZsb2F0ICAgeHl6dw0KKy8vIFNW
X1RBUkdFVCAgICAgICAgICAgICAgICAzICAgeHl6dyAgICAgICAgMyAgIFRBUkdFVCAgIGZsb2F0
ICAgeHl6dw0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICA0ICAgeHl6dyAgICAgICAgNCAg
IFRBUkdFVCAgIGZsb2F0ICAgeHl6dw0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICA1ICAg
eHl6dyAgICAgICAgNSAgIFRBUkdFVCAgIGZsb2F0ICAgeHl6dw0KKy8vIFNWX1RBUkdFVCAgICAg
ICAgICAgICAgICA2ICAgeHl6dyAgICAgICAgNiAgIFRBUkdFVCAgIGZsb2F0ICAgeHl6dw0KKy8v
IFNWX1RBUkdFVCAgICAgICAgICAgICAgICA3ICAgeHl6dyAgICAgICAgNyAgIFRBUkdFVCAgIGZs
b2F0ICAgeHl6dw0KKy8vDQorcHNfNF8wDQorZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eXp3DQor
ZGNsX291dHB1dCBvMC54eXp3DQorZGNsX291dHB1dCBvMS54eXp3DQorZGNsX291dHB1dCBvMi54
eXp3DQorZGNsX291dHB1dCBvMy54eXp3DQorZGNsX291dHB1dCBvNC54eXp3DQorZGNsX291dHB1
dCBvNS54eXp3DQorZGNsX291dHB1dCBvNi54eXp3DQorZGNsX291dHB1dCBvNy54eXp3DQorbW92
IG8wLnh5encsIHYxLnh5encNCittb3YgbzEueHl6dywgdjEueHl6dw0KK21vdiBvMi54eXp3LCB2
MS54eXp3DQorbW92IG8zLnh5encsIHYxLnh5encNCittb3YgbzQueHl6dywgdjEueHl6dw0KK21v
diBvNS54eXp3LCB2MS54eXp3DQorbW92IG82Lnh5encsIHYxLnh5encNCittb3YgbzcueHl6dywg
djEueHl6dw0KK3JldCANCisvLyBBcHByb3hpbWF0ZWx5IDkgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNl
ZA0KKyNlbmRpZg0KKw0KK2NvbnN0IEJZVEUgZ19QU19DbGVhck11bHRpcGxlW10gPQ0KK3sNCisg
ICAgIDY4LCAgODgsICA2NiwgIDY3LCAgOTIsICA1NCwgDQorICAgIDEyMCwgMTA1LCAxNjYsIDE5
NiwgMTMyLCAxNTgsIA0KKyAgICAyMDksICAzMywgMTg1LCAxMjIsICAgOCwgMTg5LCANCisgICAg
MTQ1LCAxMTQsICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgICA4OCwgICAzLCAgIDAsICAgMCwg
ICA1LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDUyLCAgIDAsICAgMCwgICAwLCANCisgICAgMTQw
LCAgIDAsICAgMCwgICAwLCAyMjQsICAgMCwgDQorICAgICAgMCwgICAwLCAxODgsICAgMSwgICAw
LCAgIDAsIA0KKyAgICAyMjAsICAgMiwgICAwLCAgIDAsICA4MiwgIDY4LCANCisgICAgIDY5LCAg
NzAsICA4MCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgIDI4LCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgNCwgDQorICAgIDI1NSwgMjU1LCAgIDAsICAgMSwgICAwLCAgIDAs
IA0KKyAgICAgMjgsICAgMCwgICAwLCAgIDAsICA3NywgMTA1LCANCisgICAgIDk5LCAxMTQsIDEx
MSwgMTE1LCAxMTEsIDEwMiwgDQorICAgIDExNiwgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsIA0K
KyAgICAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCANCisgICAgMTA0LCAgOTcsIDEwMCwg
MTAxLCAxMTQsICAzMiwgDQorICAgICA2NywgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIA0KKyAg
ICAxMDEsIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCANCisgICAgIDQ4LCAgNDYsICA1NywgIDUw
LCAgNDgsICA0OCwgDQorICAgICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsIA0KKyAgICAg
IDAsIDE3MSwgIDczLCAgODMsICA3MSwgIDc4LCANCisgICAgIDc2LCAgIDAsICAgMCwgICAwLCAg
IDIsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgNTYs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgIDE1LCAgIDAsICAgMCwgICAwLCANCisgICAgIDY4LCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDMsICAgMCwg
ICAwLCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAxNSwgIDE1LCAgIDAsICAgMCwg
DQorICAgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsIA0KKyAgICAgNzMsICA4NCwgIDcz
LCAgNzksICA3OCwgICAwLCANCisgICAgIDY3LCAgNzksICA3NiwgIDc5LCAgODIsICAgMCwgDQor
ICAgIDE3MSwgMTcxLCAgNzksICA4MywgIDcxLCAgNzgsIA0KKyAgICAyMTIsICAgMCwgICAwLCAg
IDAsICAgOCwgICAwLCANCisgICAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgDQorICAg
IDIwMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAg
MCwgICAwLCAgMTUsICAgMCwgICAwLCAgIDAsIA0KKyAgICAyMDAsICAgMCwgICAwLCAgIDAsICAg
MSwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMywg
ICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDE1LCAgIDAsICAgMCwg
ICAwLCANCisgICAgMjAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgDQorICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAw
LCANCisgICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQorICAgIDIwMCwgICAwLCAg
IDAsICAgMCwgICAzLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAN
CisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgDQorICAgICAgMCwgICAwLCAgMTUs
ICAgMCwgICAwLCAgIDAsIA0KKyAgICAyMDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCANCisg
ICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMywgICAwLCAgIDAsICAg
MCwgICA0LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDE1LCAgIDAsICAgMCwgICAwLCANCisgICAg
MjAwLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgIDMsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCANCisgICAgICAw
LCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQorICAgIDIwMCwgICAwLCAgIDAsICAgMCwgICA2
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAzLCAg
IDAsICAgMCwgICAwLCAgIDYsICAgMCwgDQorICAgICAgMCwgICAwLCAgMTUsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAyMDAsICAgMCwgICAwLCAgIDAsICAgNywgICAwLCANCisgICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMywgICAwLCAgIDAsICAgMCwgICA3LCAgIDAs
IA0KKyAgICAgIDAsICAgMCwgIDE1LCAgIDAsICAgMCwgICAwLCANCisgICAgIDgzLCAgODYsICA5
NSwgIDg0LCAgNjUsICA4MiwgDQorICAgICA3MSwgIDY5LCAgODQsICAgMCwgMTcxLCAxNzEsIA0K
KyAgICAgODMsICA3MiwgIDY4LCAgODIsICAyNCwgICAxLCANCisgICAgICAwLCAgIDAsICA2NCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICA3MCwgICAwLCAgIDAsICAgMCwgIDk4LCAgMTYsIA0KKyAg
ICAgIDAsICAgMywgMjQyLCAgMTYsICAxNiwgICAwLCANCisgICAgICAxLCAgIDAsICAgMCwgICAw
LCAxMDEsICAgMCwgDQorICAgICAgMCwgICAzLCAyNDIsICAzMiwgIDE2LCAgIDAsIA0KKyAgICAg
IDAsICAgMCwgICAwLCAgIDAsIDEwMSwgICAwLCANCisgICAgICAwLCAgIDMsIDI0MiwgIDMyLCAg
MTYsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgMTAxLCAgIDAsIA0KKyAgICAgIDAs
ICAgMywgMjQyLCAgMzIsICAxNiwgICAwLCANCisgICAgICAyLCAgIDAsICAgMCwgICAwLCAxMDEs
ICAgMCwgDQorICAgICAgMCwgICAzLCAyNDIsICAzMiwgIDE2LCAgIDAsIA0KKyAgICAgIDMsICAg
MCwgICAwLCAgIDAsIDEwMSwgICAwLCANCisgICAgICAwLCAgIDMsIDI0MiwgIDMyLCAgMTYsICAg
MCwgDQorICAgICAgNCwgICAwLCAgIDAsICAgMCwgMTAxLCAgIDAsIA0KKyAgICAgIDAsICAgMywg
MjQyLCAgMzIsICAxNiwgICAwLCANCisgICAgICA1LCAgIDAsICAgMCwgICAwLCAxMDEsICAgMCwg
DQorICAgICAgMCwgICAzLCAyNDIsICAzMiwgIDE2LCAgIDAsIA0KKyAgICAgIDYsICAgMCwgICAw
LCAgIDAsIDEwMSwgICAwLCANCisgICAgICAwLCAgIDMsIDI0MiwgIDMyLCAgMTYsICAgMCwgDQor
ICAgICAgNywgICAwLCAgIDAsICAgMCwgIDU0LCAgIDAsIA0KKyAgICAgIDAsICAgNSwgMjQyLCAg
MzIsICAxNiwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgNzAsICAzMCwgDQorICAg
ICAxNiwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgNTQsICAgMCwgICAwLCAgIDUs
IDI0MiwgIDMyLCANCisgICAgIDE2LCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgICA3
MCwgIDMwLCAgMTYsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDU0LCAgIDAsICAg
MCwgICA1LCANCisgICAgMjQyLCAgMzIsICAxNiwgICAwLCAgIDIsICAgMCwgDQorICAgICAgMCwg
ICAwLCAgNzAsICAzMCwgIDE2LCAgIDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICA1NCwg
ICAwLCANCisgICAgICAwLCAgIDUsIDI0MiwgIDMyLCAgMTYsICAgMCwgDQorICAgICAgMywgICAw
LCAgIDAsICAgMCwgIDcwLCAgMzAsIA0KKyAgICAgMTYsICAgMCwgICAxLCAgIDAsICAgMCwgICAw
LCANCisgICAgIDU0LCAgIDAsICAgMCwgICA1LCAyNDIsICAzMiwgDQorICAgICAxNiwgICAwLCAg
IDQsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgNzAsICAzMCwgIDE2LCAgIDAsICAgMSwgICAwLCAN
CisgICAgICAwLCAgIDAsICA1NCwgICAwLCAgIDAsICAgNSwgDQorICAgIDI0MiwgIDMyLCAgMTYs
ICAgMCwgICA1LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDcwLCAgMzAsICAxNiwgICAwLCANCisg
ICAgICAxLCAgIDAsICAgMCwgICAwLCAgNTQsICAgMCwgDQorICAgICAgMCwgICA1LCAyNDIsICAz
MiwgIDE2LCAgIDAsIA0KKyAgICAgIDYsICAgMCwgICAwLCAgIDAsICA3MCwgIDMwLCANCisgICAg
IDE2LCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgICA1NCwgICAwLCAgIDAsICAgNSwg
MjQyLCAgMzIsIA0KKyAgICAgMTYsICAgMCwgICA3LCAgIDAsICAgMCwgICAwLCANCisgICAgIDcw
LCAgMzAsICAxNiwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAwLCAgNjIsICAgMCwgICAw
LCAgIDEsIA0KKyAgICAgODMsICA4NCwgIDY1LCAgODQsIDExNiwgICAwLCANCisgICAgICAwLCAg
IDAsICAgOSwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICA5LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQorICAgICAgOSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMA0KK307DQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2Nv
bXBpbGVkL2NsZWFyc2luZ2xlMTFwcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyc2luZ2xlMTFwcy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjg3Y2IwODdjNzUwNTI2MmM4MDdiM2Y0YTUxNzFhMWQ4MGU2MjFmNWUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJzaW5nbGUxMXBzLmgKQEAgLTAsMCAr
MSwxMTAgQEAKKyNpZiAwDQorLy8NCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNM
IFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQNCisvLw0KKy8vDQorLy8vDQorLy8NCisv
LyBJbnB1dCBzaWduYXR1cmU6DQorLy8NCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAg
IE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAgIFVzZWQNCisvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0NCisv
LyBTVl9Qb3NpdGlvbiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgICBm
bG9hdCAgICAgICANCisvLyBDT0xPUiAgICAgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAg
IDEgICAgIE5PTkUgICBmbG9hdCAgIHh5encNCisvLw0KKy8vDQorLy8gT3V0cHV0IHNpZ25hdHVy
ZToNCisvLw0KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBT
eXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0t
LS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0tLQ0KKy8vIFNWX1RhcmdldCAgICAg
ICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIGZsb2F0ICAgeHl6dw0KKy8v
DQorcHNfNF8wDQorZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eXp3DQorZGNsX291dHB1dCBvMC54
eXp3DQorbW92IG8wLnh5encsIHYxLnh5encNCityZXQgDQorLy8gQXBwcm94aW1hdGVseSAyIGlu
c3RydWN0aW9uIHNsb3RzIHVzZWQNCisjZW5kaWYNCisNCitjb25zdCBCWVRFIGdfUFNfQ2xlYXJT
aW5nbGVbXSA9DQorew0KKyAgICAgNjgsICA4OCwgIDY2LCAgNjcsICAxMywgMTUyLCANCisgICAg
IDMyLCAgNDksIDIyMiwgMjM2LCAgOTIsICAyMCwgDQorICAgIDE4OCwgIDcxLCAgODgsICA0Niwg
MTYzLCAyNDEsIA0KKyAgICAxODgsIDIzOCwgICAxLCAgIDAsICAgMCwgICAwLCANCisgICAgMjA4
LCAgIDEsICAgMCwgICAwLCAgIDUsICAgMCwgDQorICAgICAgMCwgICAwLCAgNTIsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAxNDAsICAgMCwgICAwLCAgIDAsIDIyNCwgICAwLCANCisgICAgICAwLCAg
IDAsICAyMCwgICAxLCAgIDAsICAgMCwgDQorICAgICA4NCwgICAxLCAgIDAsICAgMCwgIDgyLCAg
NjgsIA0KKyAgICAgNjksICA3MCwgIDgwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgMjgsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCANCisgICAgMjU1LCAyNTUsICAg
MCwgICAxLCAgIDAsICAgMCwgDQorICAgICAyOCwgICAwLCAgIDAsICAgMCwgIDc3LCAxMDUsIA0K
KyAgICAgOTksIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCANCisgICAgMTE2LCAgMzIsICA0MCwg
IDgyLCAgNDEsICAzMiwgDQorICAgICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsIA0KKyAg
ICAxMDQsICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCANCisgICAgIDY3LCAxMTEsIDEwOSwgMTEy
LCAxMDUsIDEwOCwgDQorICAgIDEwMSwgMTE0LCAgMzIsICA1NywgIDQ2LCAgNTEsIA0KKyAgICAg
NDgsICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4LCANCisgICAgIDQ2LCAgNDksICA1NCwgIDUxLCAg
NTYsICA1MiwgDQorICAgICAgMCwgMTcxLCAgNzMsICA4MywgIDcxLCAgNzgsIA0KKyAgICAgNzYs
ICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCANCisgICAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICA1NiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAxLCAgIDAsICAgMCwgICAwLCANCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwLCAgMTUsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgNjgsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDE1
LCAgMTUsICAgMCwgICAwLCANCisgICAgIDgzLCAgODYsICA5NSwgIDgwLCAxMTEsIDExNSwgDQor
ICAgIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCAgIDAsIA0KKyAgICAgNjcsICA3OSwgIDc2LCAg
NzksICA4MiwgICAwLCANCisgICAgMTcxLCAxNzEsICA3OSwgIDgzLCAgNzEsICA3OCwgDQorICAg
ICA0NCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICA4LCAgIDAs
ICAgMCwgICAwLCANCisgICAgIDMyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDMsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCisgICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQorICAgICA4Mywg
IDg2LCAgOTUsICA4NCwgIDk3LCAxMTQsIA0KKyAgICAxMDMsIDEwMSwgMTE2LCAgIDAsIDE3MSwg
MTcxLCANCisgICAgIDgzLCAgNzIsICA2OCwgIDgyLCAgNTYsICAgMCwgDQorICAgICAgMCwgICAw
LCAgNjQsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgMTQsICAgMCwgICAwLCAgIDAsICA5OCwgIDE2
LCANCisgICAgICAwLCAgIDMsIDI0MiwgIDE2LCAgMTYsICAgMCwgDQorICAgICAgMSwgICAwLCAg
IDAsICAgMCwgMTAxLCAgIDAsIA0KKyAgICAgIDAsICAgMywgMjQyLCAgMzIsICAxNiwgICAwLCAN
CisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgNTQsICAgMCwgDQorICAgICAgMCwgICA1LCAyNDIs
ICAzMiwgIDE2LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICA3MCwgIDMwLCANCisg
ICAgIDE2LCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgICA2MiwgICAwLCAgIDAsICAg
MSwgIDgzLCAgODQsIA0KKyAgICAgNjUsICA4NCwgMTE2LCAgIDAsICAgMCwgICAwLCANCisgICAg
ICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAx
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDIsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwDQorfTsNCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGls
ZWQvcGFzc3Rocm91Z2gxMXZzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2gxMXZzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYmYzOTUyMTZlOTkyMGZjY2EwMzJiMWVhYzg1M2U4NWFiOGIxYjY2MAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaDExdnMuaApAQCAtMCwwICsxLDEz
NCBAQAorI2lmIDANCisvLw0KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hh
ZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NA0KKy8vDQorLy8NCisvLy8NCisvLw0KKy8vIElu
cHV0IHNpZ25hdHVyZToNCisvLw0KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFz
ayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KKy8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0tLQ0KKy8vIFBP
U0lUSU9OICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMCAgICAgTk9ORSAgIGZsb2F0
ICAgeHkgIA0KKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAg
ICAgTk9ORSAgIGZsb2F0ICAgeHkgIA0KKy8vDQorLy8NCisvLyBPdXRwdXQgc2lnbmF0dXJlOg0K
Ky8vDQorLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1Zh
bHVlICBGb3JtYXQgICBVc2VkDQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0t
IC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tDQorLy8gU1ZfUE9TSVRJT04gICAgICAg
ICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICAgZmxvYXQgICB4eXp3DQorLy8gVEVY
Q09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICAgZmxvYXQg
ICB4eSAgDQorLy8NCit2c180XzANCitkY2xfaW5wdXQgdjAueHkNCitkY2xfaW5wdXQgdjEueHkN
CitkY2xfb3V0cHV0X3NpdiBvMC54eXp3LCBwb3NpdGlvbg0KK2RjbF9vdXRwdXQgbzEueHkNCitt
b3YgbzAueHksIHYwLnh5eHgNCittb3YgbzAuencsIGwoMCwwLDAsMS4wMDAwMDApDQorbW92IG8x
Lnh5LCB2MS54eXh4DQorcmV0IA0KKy8vIEFwcHJveGltYXRlbHkgNCBpbnN0cnVjdGlvbiBzbG90
cyB1c2VkDQorI2VuZGlmDQorDQorY29uc3QgQllURSBnX1ZTX1Bhc3N0aHJvdWdoW10gPQ0KK3sN
CisgICAgIDY4LCAgODgsICA2NiwgIDY3LCAxOTcsIDIxNCwgDQorICAgIDE4NCwgIDg1LCAyNDAs
ICA5NCwgIDcxLCAgNDgsIA0KKyAgICAxNjUsICAzNCwgMTQyLCAyMzMsICAgMCwgMTM1LCANCisg
ICAgMTkzLCAxNzgsICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgICA2OCwgICAyLCAgIDAsICAg
MCwgICA1LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDUyLCAgIDAsICAgMCwgICAwLCANCisgICAg
MTQwLCAgIDAsICAgMCwgICAwLCAyMjQsICAgMCwgDQorICAgICAgMCwgICAwLCAgNTYsICAgMSwg
ICAwLCAgIDAsIA0KKyAgICAyMDAsICAgMSwgICAwLCAgIDAsICA4MiwgIDY4LCANCisgICAgIDY5
LCAgNzAsICA4MCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgIDI4LCAg
IDAsICAgMCwgICAwLCAgIDAsICAgNCwgDQorICAgIDI1NCwgMjU1LCAgIDAsICAgMSwgICAwLCAg
IDAsIA0KKyAgICAgMjgsICAgMCwgICAwLCAgIDAsICA3NywgMTA1LCANCisgICAgIDk5LCAxMTQs
IDExMSwgMTE1LCAxMTEsIDEwMiwgDQorICAgIDExNiwgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIs
IA0KKyAgICAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCANCisgICAgMTA0LCAgOTcsIDEw
MCwgMTAxLCAxMTQsICAzMiwgDQorICAgICA2NywgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIA0K
KyAgICAxMDEsIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCANCisgICAgIDQ4LCAgNDYsICA1Nywg
IDUwLCAgNDgsICA0OCwgDQorICAgICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsIA0KKyAg
ICAgIDAsIDE3MSwgIDczLCAgODMsICA3MSwgIDc4LCANCisgICAgIDc2LCAgIDAsICAgMCwgICAw
LCAgIDIsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
NTYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgICAzLCAgIDMsICAgMCwgICAwLCANCisgICAgIDY1LCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDMsICAg
MCwgICAwLCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAgMywgICAzLCAgIDAsICAg
MCwgDQorICAgICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsIA0KKyAgICAgNzksICA3OCwg
ICAwLCAgODQsICA2OSwgIDg4LCANCisgICAgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAgMCwg
DQorICAgIDE3MSwgMTcxLCAgNzksICA4MywgIDcxLCAgNzgsIA0KKyAgICAgODAsICAgMCwgICAw
LCAgIDAsICAgMiwgICAwLCANCisgICAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgDQor
ICAgICA1NiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAxLCAg
IDAsICAgMCwgICAwLCANCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAg
ICAgMCwgICAwLCAgMTUsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgNjgsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAg
MywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAzLCAgMTIsICAg
MCwgICAwLCANCisgICAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgDQorICAgICA3Mywg
IDg0LCAgNzMsICA3OSwgIDc4LCAgIDAsIA0KKyAgICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwg
IDc5LCANCisgICAgIDgyLCAgNjgsICAgMCwgMTcxLCAxNzEsIDE3MSwgDQorICAgICA4MywgIDcy
LCAgNjgsICA4MiwgMTM2LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDY0LCAgIDAsICAgMSwgICAw
LCANCisgICAgIDM0LCAgIDAsICAgMCwgICAwLCAgOTUsICAgMCwgDQorICAgICAgMCwgICAzLCAg
NTAsICAxNiwgIDE2LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICA5NSwgICAwLCAN
CisgICAgICAwLCAgIDMsICA1MCwgIDE2LCAgMTYsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAs
ICAgMCwgMTAzLCAgIDAsIA0KKyAgICAgIDAsICAgNCwgMjQyLCAgMzIsICAxNiwgICAwLCANCisg
ICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAwLCAxMDEsICAg
MCwgICAwLCAgIDMsIA0KKyAgICAgNTAsICAzMiwgIDE2LCAgIDAsICAgMSwgICAwLCANCisgICAg
ICAwLCAgIDAsICA1NCwgICAwLCAgIDAsICAgNSwgDQorICAgICA1MCwgIDMyLCAgMTYsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDcwLCAgMTYsICAxNiwgICAwLCANCisgICAgICAw
LCAgIDAsICAgMCwgICAwLCAgNTQsICAgMCwgDQorICAgICAgMCwgICA4LCAxOTQsICAzMiwgIDE2
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgIDY0LCANCisgICAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsIDEyOCwgIDYzLCANCisgICAgIDU0LCAgIDAs
ICAgMCwgICA1LCAgNTAsICAzMiwgDQorICAgICAxNiwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgNzAsICAxNiwgIDE2LCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICA2
MiwgICAwLCAgIDAsICAgMSwgDQorICAgICA4MywgIDg0LCAgNjUsICA4NCwgMTE2LCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwDQorfTsNCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hsdW0xMXBzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFz
c3Rocm91Z2hsdW0xMXBzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2YwN2I0YTNjYmQ4OTY1ZDE4Y2I0OGQwMThl
NDEyZDg0MjQyMDg5NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3Vn
aGx1bTExcHMuaApAQCAtMCwwICsxLDE1MiBAQAorI2lmIDANCisvLw0KKy8vIEdlbmVyYXRlZCBi
eSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NA0KKy8v
DQorLy8NCisvLy8NCisvLyBSZXNvdXJjZSBCaW5kaW5nczoNCisvLw0KKy8vIE5hbWUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBF
bGVtZW50cw0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0t
LS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KKy8vIFNhbXBsZXIgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0K
Ky8vIFRleHR1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAg
ICAgICAgMmQgICAgMCAgICAgICAgMQ0KKy8vDQorLy8NCisvLw0KKy8vIElucHV0IHNpZ25hdHVy
ZToNCisvLw0KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBT
eXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0t
LS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0tLQ0KKy8vIFNWX1BPU0lUSU9OICAg
ICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgIGZsb2F0ICAgICAgIA0KKy8v
IFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgIGZs
b2F0ICAgeHkgIA0KKy8vDQorLy8NCisvLyBPdXRwdXQgc2lnbmF0dXJlOg0KKy8vDQorLy8gTmFt
ZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlICBGb3JtYXQg
ICBVc2VkDQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0t
LS0tLS0tIC0tLS0tLS0gLS0tLS0tDQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4
eXp3ICAgICAgICAwICAgVEFSR0VUICAgZmxvYXQgICB4eXp3DQorLy8NCitwc180XzANCitkY2xf
c2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQorZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQs
ZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQorZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQ0KK2RjbF9v
dXRwdXQgbzAueHl6dw0KK2RjbF90ZW1wcyAxDQorc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQw
Lnh5encsIHMwDQorbW92IG8wLnh5eiwgcjAueHh4eA0KK21vdiBvMC53LCBsKDEuMDAwMDAwKQ0K
K3JldCANCisvLyBBcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KKyNlbmRp
Zg0KKw0KK2NvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaEx1bVtdID0NCit7DQorICAgICA2OCwg
IDg4LCAgNjYsICA2NywgMjQ0LCAgIDksIA0KKyAgICAyMTMsIDE0NywgIDE5LCAyNDksICA3MCwg
MTExLCANCisgICAgMTU3LCAgOTIsIDI0MywgMTYwLCAgNDAsIDE0NCwgDQorICAgIDIzOCwgMjIx
LCAgIDEsICAgMCwgICAwLCAgIDAsIA0KKyAgICAxMjgsICAgMiwgICAwLCAgIDAsICAgNSwgICAw
LCANCisgICAgICAwLCAgIDAsICA1MiwgICAwLCAgIDAsICAgMCwgDQorICAgIDIyMCwgICAwLCAg
IDAsICAgMCwgIDUyLCAgIDEsIA0KKyAgICAgIDAsICAgMCwgMTA0LCAgIDEsICAgMCwgICAwLCAN
CisgICAgICA0LCAgIDIsICAgMCwgICAwLCAgODIsICA2OCwgDQorICAgICA2OSwgIDcwLCAxNjAs
ICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisg
ICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgDQorICAgICAyOCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDQsIA0KKyAgICAyNTUsIDI1NSwgICAwLCAgIDEsICAgMCwgICAwLCANCisgICAg
MTA4LCAgIDAsICAgMCwgICAwLCAgOTIsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDMsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAx
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCisgICAgMTAwLCAg
IDAsICAgMCwgICAwLCAgIDIsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDQsICAgMCwgICAwLCAgIDAsIDI1NSwgMjU1LCANCisgICAgMjU1LCAyNTUs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDEzLCAgIDAs
IA0KKyAgICAgIDAsICAgMCwgIDgzLCAgOTcsIDEwOSwgMTEyLCANCisgICAgMTA4LCAxMDEsIDEx
NCwgICAwLCAgODQsIDEwMSwgDQorICAgIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCAgIDAsIA0K
KyAgICAgNzcsIDEwNSwgIDk5LCAxMTQsIDExMSwgMTE1LCANCisgICAgMTExLCAxMDIsIDExNiwg
IDMyLCAgNDAsICA4MiwgDQorICAgICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsIA0KKyAg
ICAgMzIsICA4MywgMTA0LCAgOTcsIDEwMCwgMTAxLCANCisgICAgMTE0LCAgMzIsICA2NywgMTEx
LCAxMDksIDExMiwgDQorICAgIDEwNSwgMTA4LCAxMDEsIDExNCwgIDMyLCAgNTcsIA0KKyAgICAg
NDYsICA1MSwgIDQ4LCAgNDYsICA1NywgIDUwLCANCisgICAgIDQ4LCAgNDgsICA0NiwgIDQ5LCAg
NTQsICA1MSwgDQorICAgICA1NiwgIDUyLCAgIDAsIDE3MSwgIDczLCAgODMsIA0KKyAgICAgNzEs
ICA3OCwgIDgwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAyLCAgIDAsICAgMCwgICAwLCAgIDgs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgNTYsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDE1LCAgIDAsIA0KKyAgICAgIDAsICAgMCwg
IDY4LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDEsICAgMCwgICAw
LCAgIDAsICAgMywgICAzLCANCisgICAgICAwLCAgIDAsICA4MywgIDg2LCAgOTUsICA4MCwgDQor
ICAgICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksIA0KKyAgICAgNzgsICAgMCwgIDg0LCAg
NjksICA4OCwgIDY3LCANCisgICAgIDc5LCAgNzksICA4MiwgIDY4LCAgIDAsIDE3MSwgDQorICAg
IDE3MSwgMTcxLCAgNzksICA4MywgIDcxLCAgNzgsIA0KKyAgICAgNDQsICAgMCwgICAwLCAgIDAs
ICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgDQorICAgICAz
MiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwg
ICAwLCAgMTUsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwg
IDgyLCANCisgICAgIDcxLCAgNjksICA4NCwgICAwLCAxNzEsIDE3MSwgDQorICAgICA4MywgIDcy
LCAgNjgsICA4MiwgMTQ4LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDY0LCAgIDAsICAgMCwgICAw
LCANCisgICAgIDM3LCAgIDAsICAgMCwgICAwLCAgOTAsICAgMCwgDQorICAgICAgMCwgICAzLCAg
IDAsICA5NiwgIDE2LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICA4OCwgIDI0LCAN
CisgICAgICAwLCAgIDQsICAgMCwgMTEyLCAgMTYsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAs
ICAgMCwgIDg1LCAgODUsIA0KKyAgICAgIDAsICAgMCwgIDk4LCAgMTYsICAgMCwgICAzLCANCisg
ICAgIDUwLCAgMTYsICAxNiwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAwLCAxMDEsICAg
MCwgICAwLCAgIDMsIA0KKyAgICAyNDIsICAzMiwgIDE2LCAgIDAsICAgMCwgICAwLCANCisgICAg
ICAwLCAgIDAsIDEwNCwgICAwLCAgIDAsICAgMiwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwg
IDY5LCAgIDAsIA0KKyAgICAgIDAsICAgOSwgMjQyLCAgIDAsICAxNiwgICAwLCANCisgICAgICAw
LCAgIDAsICAgMCwgICAwLCAgNzAsICAxNiwgDQorICAgICAxNiwgICAwLCAgIDEsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAgNzAsIDEyNiwgIDE2LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAg
IDAsICAgMCwgIDk2LCAgMTYsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDU0LCAg
IDAsIA0KKyAgICAgIDAsICAgNSwgMTE0LCAgMzIsICAxNiwgICAwLCANCisgICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDYsICAgMCwgDQorICAgICAxNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgNTQsICAgMCwgICAwLCAgIDUsIDEzMCwgIDMyLCANCisgICAgIDE2LCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMSwgIDY0LCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAxMjgsICA2MywgIDYyLCAgIDAsICAgMCwgICAxLCANCisgICAgIDgzLCAgODQsICA2NSwg
IDg0LCAxMTYsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMiwgICAw
LCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDMsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQor
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAg
IDANCit9Ow0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaGx1bWFscGhhMTFw
cy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdobHVtYWxwaGExMXBzLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YjU1ZDYwZWIzYjIyNmRkMGU3ZGFlNDhiZWQ1NTQ0N2E5OGZiMTM0MQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
c2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaGx1bWFscGhhMTFwcy5oCkBAIC0wLDAgKzEsMTQ4
IEBACisjaWYgMA0KKy8vDQorLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFk
ZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0DQorLy8NCisvLw0KKy8vLw0KKy8vIFJlc291cmNl
IEJpbmRpbmdzOg0KKy8vDQorLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQorLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0t
LS0tLS0tDQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAg
ICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQorLy8gVGV4dHVyZSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAwICAgICAgICAxDQor
Ly8NCisvLw0KKy8vDQorLy8gSW5wdXQgc2lnbmF0dXJlOg0KKy8vDQorLy8gTmFtZSAgICAgICAg
ICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlICBGb3JtYXQgICBVc2VkDQor
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0t
LS0tLS0gLS0tLS0tDQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAg
ICAwICAgICAgUE9TICAgZmxvYXQgICAgICAgDQorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAg
IDAgICB4eSAgICAgICAgICAxICAgICBOT05FICAgZmxvYXQgICB4eSAgDQorLy8NCisvLw0KKy8v
IE91dHB1dCBzaWduYXR1cmU6DQorLy8NCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAg
IE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAgIFVzZWQNCisvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0NCisv
LyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICBm
bG9hdCAgIHh5encNCisvLw0KK3BzXzRfMA0KK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQN
CitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCitk
Y2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5DQorZGNsX291dHB1dCBvMC54eXp3DQorZGNsX3RlbXBz
IDENCitzYW1wbGUgcjAueHl6dywgdjEueHl4eCwgdDAueHl6dywgczANCittb3YgbzAueHl6dywg
cjAueHh4dw0KK3JldCANCisvLyBBcHByb3hpbWF0ZWx5IDMgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNl
ZA0KKyNlbmRpZg0KKw0KK2NvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaEx1bUFscGhhW10gPQ0K
K3sNCisgICAgIDY4LCAgODgsICA2NiwgIDY3LCAxODUsICAxNCwgDQorICAgICA4NCwgMjIzLCAx
OTIsICA0MiwgIDE2LCAxMzMsIA0KKyAgICAgNDYsIDEwMCwgIDk1LCAyMjEsIDE4MywgIDk3LCAN
CisgICAgMTkyLCAgMjMsICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgIDEwOCwgICAyLCAgIDAs
ICAgMCwgICA1LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDUyLCAgIDAsICAgMCwgICAwLCANCisg
ICAgMjIwLCAgIDAsICAgMCwgICAwLCAgNTIsICAgMSwgDQorICAgICAgMCwgICAwLCAxMDQsICAg
MSwgICAwLCAgIDAsIA0KKyAgICAyNDAsICAgMSwgICAwLCAgIDAsICA4MiwgIDY4LCANCisgICAg
IDY5LCAgNzAsIDE2MCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCANCisgICAgIDI4
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgDQorICAgIDI1NSwgMjU1LCAgIDAsICAgMSwgICAw
LCAgIDAsIA0KKyAgICAxMDgsICAgMCwgICAwLCAgIDAsICA5MiwgICAwLCANCisgICAgICAwLCAg
IDAsICAgMywgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAxMDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCANCisgICAgICAwLCAgIDAsICAg
NSwgICAwLCAgIDAsICAgMCwgDQorICAgICAgNCwgICAwLCAgIDAsICAgMCwgMjU1LCAyNTUsIA0K
KyAgICAyNTUsIDI1NSwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAxLCAgIDAsICAgMCwg
ICAwLCAgMTMsICAgMCwgDQorICAgICAgMCwgICAwLCAgODMsICA5NywgMTA5LCAxMTIsIA0KKyAg
ICAxMDgsIDEwMSwgMTE0LCAgIDAsICA4NCwgMTAxLCANCisgICAgMTIwLCAxMTYsIDExNywgMTE0
LCAxMDEsICAgMCwgDQorICAgICA3NywgMTA1LCAgOTksIDExNCwgMTExLCAxMTUsIA0KKyAgICAx
MTEsIDEwMiwgMTE2LCAgMzIsICA0MCwgIDgyLCANCisgICAgIDQxLCAgMzIsICA3MiwgIDc2LCAg
ODMsICA3NiwgDQorICAgICAzMiwgIDgzLCAxMDQsICA5NywgMTAwLCAxMDEsIA0KKyAgICAxMTQs
ICAzMiwgIDY3LCAxMTEsIDEwOSwgMTEyLCANCisgICAgMTA1LCAxMDgsIDEwMSwgMTE0LCAgMzIs
ICA1NywgDQorICAgICA0NiwgIDUxLCAgNDgsICA0NiwgIDU3LCAgNTAsIA0KKyAgICAgNDgsICA0
OCwgIDQ2LCAgNDksICA1NCwgIDUxLCANCisgICAgIDU2LCAgNTIsICAgMCwgMTcxLCAgNzMsICA4
MywgDQorICAgICA3MSwgIDc4LCAgODAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDIsICAgMCwg
ICAwLCAgIDAsICAgOCwgICAwLCANCisgICAgICAwLCAgIDAsICA1NiwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAz
LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgMTUsICAgMCwgDQor
ICAgICAgMCwgICAwLCAgNjgsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgDQorICAg
ICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsIA0KKyAgICAgIDAsICAgMCwgIDgzLCAgODYs
ICA5NSwgIDgwLCANCisgICAgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgDQorICAgICA3
OCwgICAwLCAgODQsICA2OSwgIDg4LCAgNjcsIA0KKyAgICAgNzksICA3OSwgIDgyLCAgNjgsICAg
MCwgMTcxLCANCisgICAgMTcxLCAxNzEsICA3OSwgIDgzLCAgNzEsICA3OCwgDQorICAgICA0NCwg
ICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwg
ICAwLCANCisgICAgIDMyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCANCisgICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQorICAgICA4MywgIDg2LCAg
OTUsICA4NCwgIDY1LCAgODIsIA0KKyAgICAgNzEsICA2OSwgIDg0LCAgIDAsIDE3MSwgMTcxLCAN
CisgICAgIDgzLCAgNzIsICA2OCwgIDgyLCAxMjgsICAgMCwgDQorICAgICAgMCwgICAwLCAgNjQs
ICAgMCwgICAwLCAgIDAsIA0KKyAgICAgMzIsICAgMCwgICAwLCAgIDAsICA5MCwgICAwLCANCisg
ICAgICAwLCAgIDMsICAgMCwgIDk2LCAgMTYsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAg
MCwgIDg4LCAgMjQsIA0KKyAgICAgIDAsICAgNCwgICAwLCAxMTIsICAxNiwgICAwLCANCisgICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgODUsICA4NSwgDQorICAgICAgMCwgICAwLCAgOTgsICAxNiwg
ICAwLCAgIDMsIA0KKyAgICAgNTAsICAxNiwgIDE2LCAgIDAsICAgMSwgICAwLCANCisgICAgICAw
LCAgIDAsIDEwMSwgICAwLCAgIDAsICAgMywgDQorICAgIDI0MiwgIDMyLCAgMTYsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgMTA0LCAgIDAsICAgMCwgICAyLCANCisgICAgICAxLCAg
IDAsICAgMCwgICAwLCAgNjksICAgMCwgDQorICAgICAgMCwgICA5LCAyNDIsICAgMCwgIDE2LCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICA3MCwgIDE2LCANCisgICAgIDE2LCAgIDAs
ICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgICA3MCwgMTI2LCAgMTYsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgIDAsICAgMCwgICAwLCAgOTYsICAxNiwgICAwLCANCisgICAgICAwLCAgIDAsICAg
MCwgICAwLCAgNTQsICAgMCwgDQorICAgICAgMCwgICA1LCAyNDIsICAzMiwgIDE2LCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgIDEyLCANCisgICAgIDE2LCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICA2MiwgICAwLCAgIDAsICAgMSwgIDgzLCAgODQsIA0KKyAg
ICAgNjUsICA4NCwgMTE2LCAgIDAsICAgMCwgICAwLCANCisgICAgICAzLCAgIDAsICAgMCwgICAw
LCAgIDEsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
IDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQor
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAg
ICAgMCwgICAwDQorfTsNCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2Ix
MXBzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2IxMXBzLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTg2
Y2JjZjZiODJjZmQ5NjU4NjAxOGRlMTk5Nzk5NzM4NjE4NzczOQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hh
ZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYjExcHMuaApAQCAtMCwwICsxLDE1MiBAQAorI2lm
IDANCisvLw0KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBp
bGVyIDkuMzAuOTIwMC4xNjM4NA0KKy8vDQorLy8NCisvLy8NCisvLyBSZXNvdXJjZSBCaW5kaW5n
czoNCisvLw0KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBG
b3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0K
Ky8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAg
ICAgICAgTkEgICAgMCAgICAgICAgMQ0KKy8vIFRleHR1cmUgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQ0KKy8vDQorLy8N
CisvLw0KKy8vIElucHV0IHNpZ25hdHVyZToNCisvLw0KKy8vIE5hbWUgICAgICAgICAgICAgICAg
IEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KKy8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0t
LS0tLQ0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAg
IFBPUyAgIGZsb2F0ICAgICAgIA0KKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkg
ICAgICAgICAgMSAgICAgTk9ORSAgIGZsb2F0ICAgeHkgIA0KKy8vDQorLy8NCisvLyBPdXRwdXQg
c2lnbmF0dXJlOg0KKy8vDQorLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJl
Z2lzdGVyIFN5c1ZhbHVlICBGb3JtYXQgICBVc2VkDQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0g
LS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tDQorLy8gU1ZfVEFS
R0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgZmxvYXQgICB4
eXp3DQorLy8NCitwc180XzANCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQorZGNsX3Jl
c291cmNlX3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQorZGNsX2lucHV0
X3BzIGxpbmVhciB2MS54eQ0KK2RjbF9vdXRwdXQgbzAueHl6dw0KK2RjbF90ZW1wcyAxDQorc2Ft
cGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwDQorbW92IG8wLnh5eiwgcjAueHl6eA0K
K21vdiBvMC53LCBsKDEuMDAwMDAwKQ0KK3JldCANCisvLyBBcHByb3hpbWF0ZWx5IDQgaW5zdHJ1
Y3Rpb24gc2xvdHMgdXNlZA0KKyNlbmRpZg0KKw0KK2NvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3Vn
aFJHQltdID0NCit7DQorICAgICA2OCwgIDg4LCAgNjYsICA2NywgMTI1LCAxODYsIA0KKyAgICAy
NTAsIDI0MiwgMTEzLCAyNTUsICA1OSwgMjM5LCANCisgICAgMTE5LCAxNTgsIDIzNywgIDc4LCAy
MjAsICA0MywgDQorICAgIDE2MCwgIDQ2LCAgIDEsICAgMCwgICAwLCAgIDAsIA0KKyAgICAxMjgs
ICAgMiwgICAwLCAgIDAsICAgNSwgICAwLCANCisgICAgICAwLCAgIDAsICA1MiwgICAwLCAgIDAs
ICAgMCwgDQorICAgIDIyMCwgICAwLCAgIDAsICAgMCwgIDUyLCAgIDEsIA0KKyAgICAgIDAsICAg
MCwgMTA0LCAgIDEsICAgMCwgICAwLCANCisgICAgICA0LCAgIDIsICAgMCwgICAwLCAgODIsICA2
OCwgDQorICAgICA2OSwgIDcwLCAxNjAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwg
DQorICAgICAyOCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsIA0KKyAgICAyNTUsIDI1NSwgICAw
LCAgIDEsICAgMCwgICAwLCANCisgICAgMTA4LCAgIDAsICAgMCwgICAwLCAgOTIsICAgMCwgDQor
ICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAxLCAgIDAs
ICAgMCwgICAwLCANCisgICAgMTAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgDQorICAgICAg
MCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDQsICAgMCwgICAwLCAgIDAsIDI1
NSwgMjU1LCANCisgICAgMjU1LCAyNTUsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMSwg
ICAwLCAgIDAsICAgMCwgIDEzLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDgzLCAgOTcsIDEwOSwg
MTEyLCANCisgICAgMTA4LCAxMDEsIDExNCwgICAwLCAgODQsIDEwMSwgDQorICAgIDEyMCwgMTE2
LCAxMTcsIDExNCwgMTAxLCAgIDAsIA0KKyAgICAgNzcsIDEwNSwgIDk5LCAxMTQsIDExMSwgMTE1
LCANCisgICAgMTExLCAxMDIsIDExNiwgIDMyLCAgNDAsICA4MiwgDQorICAgICA0MSwgIDMyLCAg
NzIsICA3NiwgIDgzLCAgNzYsIA0KKyAgICAgMzIsICA4MywgMTA0LCAgOTcsIDEwMCwgMTAxLCAN
CisgICAgMTE0LCAgMzIsICA2NywgMTExLCAxMDksIDExMiwgDQorICAgIDEwNSwgMTA4LCAxMDEs
IDExNCwgIDMyLCAgNTcsIA0KKyAgICAgNDYsICA1MSwgIDQ4LCAgNDYsICA1NywgIDUwLCANCisg
ICAgIDQ4LCAgNDgsICA0NiwgIDQ5LCAgNTQsICA1MSwgDQorICAgICA1NiwgIDUyLCAgIDAsIDE3
MSwgIDczLCAgODMsIA0KKyAgICAgNzEsICA3OCwgIDgwLCAgIDAsICAgMCwgICAwLCANCisgICAg
ICAyLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgDQorICAgICAgMCwgICAwLCAgNTYsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCisgICAgICAw
LCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDE1
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDY4LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLCANCisgICAgICAwLCAgIDAs
ICA4MywgIDg2LCAgOTUsICA4MCwgDQorICAgICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzks
IA0KKyAgICAgNzgsICAgMCwgIDg0LCAgNjksICA4OCwgIDY3LCANCisgICAgIDc5LCAgNzksICA4
MiwgIDY4LCAgIDAsIDE3MSwgDQorICAgIDE3MSwgMTcxLCAgNzksICA4MywgIDcxLCAgNzgsIA0K
KyAgICAgNDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAgOCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAzMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAzLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgMTUsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
ODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCANCisgICAgIDcxLCAgNjksICA4NCwgICAwLCAx
NzEsIDE3MSwgDQorICAgICA4MywgIDcyLCAgNjgsICA4MiwgMTQ4LCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgIDY0LCAgIDAsICAgMCwgICAwLCANCisgICAgIDM3LCAgIDAsICAgMCwgICAwLCAgOTAs
ICAgMCwgDQorICAgICAgMCwgICAzLCAgIDAsICA5NiwgIDE2LCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICA4OCwgIDI0LCANCisgICAgICAwLCAgIDQsICAgMCwgMTEyLCAgMTYsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDg1LCAgODUsIA0KKyAgICAgIDAsICAgMCwg
IDk4LCAgMTYsICAgMCwgICAzLCANCisgICAgIDUwLCAgMTYsICAxNiwgICAwLCAgIDEsICAgMCwg
DQorICAgICAgMCwgICAwLCAxMDEsICAgMCwgICAwLCAgIDMsIA0KKyAgICAyNDIsICAzMiwgIDE2
LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsIDEwNCwgICAwLCAgIDAsICAgMiwgDQor
ICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDY5LCAgIDAsIA0KKyAgICAgIDAsICAgOSwgMjQyLCAg
IDAsICAxNiwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgNzAsICAxNiwgDQorICAg
ICAxNiwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgNzAsIDEyNiwgIDE2LCAgIDAs
ICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgIDk2LCAgMTYsICAgMCwgDQorICAgICAg
MCwgICAwLCAgIDAsICAgMCwgIDU0LCAgIDAsIA0KKyAgICAgIDAsICAgNSwgMTE0LCAgMzIsICAx
NiwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgNzAsICAgMiwgDQorICAgICAxNiwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgNTQsICAgMCwgICAwLCAgIDUsIDEzMCwg
IDMyLCANCisgICAgIDE2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMSwgIDY0
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAxMjgsICA2MywgIDYyLCAgIDAsICAgMCwgICAx
LCANCisgICAgIDgzLCAgODQsICA2NSwgIDg0LCAxMTYsICAgMCwgDQorICAgICAgMCwgICAwLCAg
IDQsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAN
CisgICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisg
ICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDANCit9Ow0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxl
ZC9wYXNzdGhyb3VnaHJnYmExMXBzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhMTFw
cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmQ3ZDJhMjVhYmEwOTZjM2ZhYTM3ZGYyMWViNTNjOTg0MzhkMDRiYTMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhMTFwcy5oCkBA
IC0wLDAgKzEsMTQxIEBACisjaWYgMA0KKy8vDQorLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAo
UikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0DQorLy8NCisvLw0KKy8vLw0K
Ky8vIFJlc291cmNlIEJpbmRpbmdzOg0KKy8vDQorLy8gTmFtZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQorLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0t
LS0tLSAtLS0tIC0tLS0tLS0tDQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQorLy8gVGV4dHVyZSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAw
ICAgICAgICAxDQorLy8NCisvLw0KKy8vDQorLy8gSW5wdXQgc2lnbmF0dXJlOg0KKy8vDQorLy8g
TmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlICBGb3Jt
YXQgICBVc2VkDQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0t
IC0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tDQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAg
ICB4eXp3ICAgICAgICAwICAgICAgUE9TICAgZmxvYXQgICAgICAgDQorLy8gVEVYQ09PUkQgICAg
ICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICAgZmxvYXQgICB4eSAgDQor
Ly8NCisvLw0KKy8vIE91dHB1dCBzaWduYXR1cmU6DQorLy8NCisvLyBOYW1lICAgICAgICAgICAg
ICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAgIFVzZWQNCisvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0t
LSAtLS0tLS0NCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAg
ICBUQVJHRVQgICBmbG9hdCAgIHh5encNCisvLw0KK3BzXzRfMA0KK2RjbF9zYW1wbGVyIHMwLCBt
b2RlX2RlZmF1bHQNCitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkIChmbG9hdCxmbG9hdCxmbG9hdCxm
bG9hdCkgdDANCitkY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5DQorZGNsX291dHB1dCBvMC54eXp3
DQorc2FtcGxlIG8wLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwDQorcmV0IA0KKy8vIEFwcHJv
eGltYXRlbHkgMiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQorI2VuZGlmDQorDQorY29uc3QgQllU
RSBnX1BTX1Bhc3N0aHJvdWdoUkdCQVtdID0NCit7DQorICAgICA2OCwgIDg4LCAgNjYsICA2Nywg
MTUxLCAxNTIsIA0KKyAgICAgIDgsIDEwMiwgMTc0LCAxMzUsICA3NiwgIDU3LCANCisgICAgMTAw
LCAxNDYsICA1OSwgIDc0LCAyMDUsICAzNSwgDQorICAgIDIwNiwgIDIxLCAgIDEsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAgODAsICAgMiwgICAwLCAgIDAsICAgNSwgICAwLCANCisgICAgICAwLCAg
IDAsICA1MiwgICAwLCAgIDAsICAgMCwgDQorICAgIDIyMCwgICAwLCAgIDAsICAgMCwgIDUyLCAg
IDEsIA0KKyAgICAgIDAsICAgMCwgMTA0LCAgIDEsICAgMCwgICAwLCANCisgICAgMjEyLCAgIDEs
ICAgMCwgICAwLCAgODIsICA2OCwgDQorICAgICA2OSwgIDcwLCAxNjAsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAg
MiwgICAwLCAgIDAsICAgMCwgDQorICAgICAyOCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsIA0K
KyAgICAyNTUsIDI1NSwgICAwLCAgIDEsICAgMCwgICAwLCANCisgICAgMTA4LCAgIDAsICAgMCwg
ICAwLCAgOTIsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAg
IDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCisgICAgMTAwLCAgIDAsICAgMCwgICAwLCAg
IDIsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDQs
ICAgMCwgICAwLCAgIDAsIDI1NSwgMjU1LCANCisgICAgMjU1LCAyNTUsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDEzLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgIDgzLCAgOTcsIDEwOSwgMTEyLCANCisgICAgMTA4LCAxMDEsIDExNCwgICAwLCAgODQsIDEw
MSwgDQorICAgIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCAgIDAsIA0KKyAgICAgNzcsIDEwNSwg
IDk5LCAxMTQsIDExMSwgMTE1LCANCisgICAgMTExLCAxMDIsIDExNiwgIDMyLCAgNDAsICA4Miwg
DQorICAgICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsIA0KKyAgICAgMzIsICA4MywgMTA0
LCAgOTcsIDEwMCwgMTAxLCANCisgICAgMTE0LCAgMzIsICA2NywgMTExLCAxMDksIDExMiwgDQor
ICAgIDEwNSwgMTA4LCAxMDEsIDExNCwgIDMyLCAgNTcsIA0KKyAgICAgNDYsICA1MSwgIDQ4LCAg
NDYsICA1NywgIDUwLCANCisgICAgIDQ4LCAgNDgsICA0NiwgIDQ5LCAgNTQsICA1MSwgDQorICAg
ICA1NiwgIDUyLCAgIDAsIDE3MSwgIDczLCAgODMsIA0KKyAgICAgNzEsICA3OCwgIDgwLCAgIDAs
ICAgMCwgICAwLCANCisgICAgICAyLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgDQorICAgICAg
MCwgICAwLCAgNTYsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MSwgICAwLCANCisgICAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgIDE1LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDY4LCAgIDAsICAgMCwg
ICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAw
LCAgIDMsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAz
LCANCisgICAgICAwLCAgIDAsICA4MywgIDg2LCAgOTUsICA4MCwgDQorICAgICA3OSwgIDgzLCAg
NzMsICA4NCwgIDczLCAgNzksIA0KKyAgICAgNzgsICAgMCwgIDg0LCAgNjksICA4OCwgIDY3LCAN
CisgICAgIDc5LCAgNzksICA4MiwgIDY4LCAgIDAsIDE3MSwgDQorICAgIDE3MSwgMTcxLCAgNzks
ICA4MywgIDcxLCAgNzgsIA0KKyAgICAgNDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCisg
ICAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgDQorICAgICAzMiwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAg
ICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgMTUsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCANCisgICAgIDcx
LCAgNjksICA4NCwgICAwLCAxNzEsIDE3MSwgDQorICAgICA4MywgIDcyLCAgNjgsICA4MiwgMTAw
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDY0LCAgIDAsICAgMCwgICAwLCANCisgICAgIDI1LCAg
IDAsICAgMCwgICAwLCAgOTAsICAgMCwgDQorICAgICAgMCwgICAzLCAgIDAsICA5NiwgIDE2LCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICA4OCwgIDI0LCANCisgICAgICAwLCAgIDQs
ICAgMCwgMTEyLCAgMTYsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDg1LCAgODUs
IA0KKyAgICAgIDAsICAgMCwgIDk4LCAgMTYsICAgMCwgICAzLCANCisgICAgIDUwLCAgMTYsICAx
NiwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAwLCAxMDEsICAgMCwgICAwLCAgIDMsIA0K
KyAgICAyNDIsICAzMiwgIDE2LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICA2OSwg
ICAwLCAgIDAsICAgOSwgDQorICAgIDI0MiwgIDMyLCAgMTYsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgIDcwLCAgMTYsICAxNiwgICAwLCANCisgICAgICAxLCAgIDAsICAgMCwgICAw
LCAgNzAsIDEyNiwgDQorICAgICAxNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
IDAsICA5NiwgIDE2LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICA2MiwgICAwLCAg
IDAsICAgMSwgDQorICAgICA4MywgIDg0LCAgNjUsICA4NCwgMTE2LCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQor
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwDQorfTsNCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMv
Z2VuZXJhdGVfc2hhZGVycy5iYXQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVycy5iYXQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYjM1N2Q0ZWY1ODczZjE3NmZiMGY5MTZhNjRmOTUzNjI5YTY1M2E2MgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvc2hhZGVycy9nZW5lcmF0ZV9zaGFkZXJzLmJhdApAQCAtMCwwICsxLDE4IEBACitARUNITyBP
RkYNCitSRU0NCitSRU0gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorUkVNIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCitSRU0gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4NCitSRU0NCisNCitQQVRIICVQQVRIJTslUHJvZ3JhbUZpbGVz
KHg4NiklXFdpbmRvd3MgS2l0c1w4LjBcYmluXHg4NjslRFhTREtfRElSJVxVdGlsaXRpZXNcYmlu
XHg4Ng0KKw0KK2Z4YyAvRSBWU19QYXNzdGhyb3VnaCAvVCB2c180XzAgL0ZoIGNvbXBpbGVkL3Bh
c3N0aHJvdWdoMTF2cy5oIFBhc3N0aHJvdWdoMTEuaGxzbA0KK2Z4YyAvRSBQU19QYXNzdGhyb3Vn
aFJHQkEgL1QgcHNfNF8wIC9GaCBjb21waWxlZC9wYXNzdGhyb3VnaHJnYmExMXBzLmggUGFzc3Ro
cm91Z2gxMS5obHNsDQorZnhjIC9FIFBTX1Bhc3N0aHJvdWdoUkdCIC9UIHBzXzRfMCAvRmggY29t
cGlsZWQvcGFzc3Rocm91Z2hyZ2IxMXBzLmggUGFzc3Rocm91Z2gxMS5obHNsDQorZnhjIC9FIFBT
X1Bhc3N0aHJvdWdoTHVtIC9UIHBzXzRfMCAvRmggY29tcGlsZWQvcGFzc3Rocm91Z2hsdW0xMXBz
LmggUGFzc3Rocm91Z2gxMS5obHNsDQorZnhjIC9FIFBTX1Bhc3N0aHJvdWdoTHVtQWxwaGEgL1Qg
cHNfNF8wIC9GaCBjb21waWxlZC9wYXNzdGhyb3VnaGx1bWFscGhhMTFwcy5oIFBhc3N0aHJvdWdo
MTEuaGxzbA0KKw0KK2Z4YyAvRSBWU19DbGVhciAvVCB2c180XzAgL0ZoIGNvbXBpbGVkL2NsZWFy
MTF2cy5oIENsZWFyMTEuaGxzbA0KK2Z4YyAvRSBQU19DbGVhclNpbmdsZSAvVCBwc180XzAgL0Zo
IGNvbXBpbGVkL2NsZWFyc2luZ2xlMTFwcy5oIENsZWFyMTEuaGxzbA0KK2Z4YyAvRSBQU19DbGVh
ck11bHRpcGxlIC9UIHBzXzRfMCAvRmggY29tcGlsZWQvY2xlYXJtdWx0aXBsZTExcHMuaCBDbGVh
cjExLmhsc2wNCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvQmxpdC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvQmxpdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDczZGY2NDE4ZGRl
YjFmZDY1ZTVjZTc5MDFkYzgwMjA2ZDI4ODViOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CbGl0LmNwcApAQCAt
MCwwICsxLDU5NSBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisvLyBCbGl0LmNwcDogU3VyZmFjZSBjb3B5IHV0aWxpdHkgY2xhc3MuCisKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CbGl0LmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIv
bWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGls
cy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1RleHR1cmVTdG9yYWdlOS5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlclRhcmdldDkuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVy
LmgiCisKK25hbWVzcGFjZQoreworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3No
YWRlcnMvY29tcGlsZWQvc3RhbmRhcmR2cy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvZmxpcHl2cy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hwcy5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvbHVtaW5hbmNlcHMuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2NvbXBv
bmVudG1hc2twcy5oIgorCitjb25zdCBCWVRFKiBjb25zdCBnX3NoYWRlckNvZGVbXSA9Cit7Cisg
ICAgZ192czIwX3N0YW5kYXJkdnMsCisgICAgZ192czIwX2ZsaXB5dnMsCisgICAgZ19wczIwX3Bh
c3N0aHJvdWdocHMsCisgICAgZ19wczIwX2x1bWluYW5jZXBzLAorICAgIGdfcHMyMF9jb21wb25l
bnRtYXNrcHMKK307CisKK2NvbnN0IHNpemVfdCBnX3NoYWRlclNpemVbXSA9Cit7CisgICAgc2l6
ZW9mKGdfdnMyMF9zdGFuZGFyZHZzKSwKKyAgICBzaXplb2YoZ192czIwX2ZsaXB5dnMpLAorICAg
IHNpemVvZihnX3BzMjBfcGFzc3Rocm91Z2hwcyksCisgICAgc2l6ZW9mKGdfcHMyMF9sdW1pbmFu
Y2VwcyksCisgICAgc2l6ZW9mKGdfcHMyMF9jb21wb25lbnRtYXNrcHMpCit9OworfQorCituYW1l
c3BhY2UgcngKK3sKK0JsaXQ6OkJsaXQocng6OlJlbmRlcmVyOSAqcmVuZGVyZXIpCisgIDogbVJl
bmRlcmVyKHJlbmRlcmVyKSwgbVF1YWRWZXJ0ZXhCdWZmZXIoTlVMTCksIG1RdWFkVmVydGV4RGVj
bGFyYXRpb24oTlVMTCksIG1TYXZlZFN0YXRlQmxvY2soTlVMTCksIG1TYXZlZFJlbmRlclRhcmdl
dChOVUxMKSwgbVNhdmVkRGVwdGhTdGVuY2lsKE5VTEwpCit7CisgICAgaW5pdEdlb21ldHJ5KCk7
CisgICAgbWVtc2V0KG1Db21waWxlZFNoYWRlcnMsIDAsIHNpemVvZihtQ29tcGlsZWRTaGFkZXJz
KSk7Cit9CisKK0JsaXQ6On5CbGl0KCkKK3sKKyAgICBpZiAobVNhdmVkU3RhdGVCbG9jaykgbVNh
dmVkU3RhdGVCbG9jay0+UmVsZWFzZSgpOworICAgIGlmIChtUXVhZFZlcnRleEJ1ZmZlcikgbVF1
YWRWZXJ0ZXhCdWZmZXItPlJlbGVhc2UoKTsKKyAgICBpZiAobVF1YWRWZXJ0ZXhEZWNsYXJhdGlv
bikgbVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbi0+UmVsZWFzZSgpOworCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBTSEFERVJfQ09VTlQ7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtQ29tcGlsZWRT
aGFkZXJzW2ldKQorICAgICAgICB7CisgICAgICAgICAgICBtQ29tcGlsZWRTaGFkZXJzW2ldLT5S
ZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQmxpdDo6aW5pdEdlb21ldHJ5
KCkKK3sKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgcXVhZFtdID0KKyAgICB7CisgICAgICAgIC0x
LCAtMSwKKyAgICAgICAgLTEsICAxLAorICAgICAgICAgMSwgLTEsCisgICAgICAgICAxLCAgMQor
ICAgIH07CisKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERl
dmljZSgpOworCisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVZlcnRleEJ1ZmZl
cihzaXplb2YocXVhZCksIEQzRFVTQUdFX1dSSVRFT05MWSwgMCwgRDNEUE9PTF9ERUZBVUxULCAm
bVF1YWRWZXJ0ZXhCdWZmZXIsIE5VTEwpOworCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBy
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorCisgICAgdm9pZCAqbG9ja1B0ciA9IE5VTEw7CisgICAgcmVz
dWx0ID0gbVF1YWRWZXJ0ZXhCdWZmZXItPkxvY2soMCwgMCwgJmxvY2tQdHIsIDApOworCisgICAg
aWYgKEZBSUxFRChyZXN1bHQpIHx8IGxvY2tQdHIgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KKworICAgIG1lbWNweShsb2NrUHRyLCBxdWFkLCBzaXplb2YocXVhZCkpOworICAgIG1R
dWFkVmVydGV4QnVmZmVyLT5VbmxvY2soKTsKKworICAgIHN0YXRpYyBjb25zdCBEM0RWRVJURVhF
TEVNRU5UOSBlbGVtZW50c1tdID0KKyAgICB7CisgICAgICAgIHsgMCwgMCwgRDNEREVDTFRZUEVf
RkxPQVQyLCBEM0RERUNMTUVUSE9EX0RFRkFVTFQsIEQzRERFQ0xVU0FHRV9QT1NJVElPTiwgMCB9
LAorICAgICAgICBEM0RERUNMX0VORCgpCisgICAgfTsKKworICAgIHJlc3VsdCA9IGRldmljZS0+
Q3JlYXRlVmVydGV4RGVjbGFyYXRpb24oZWxlbWVudHMsICZtUXVhZFZlcnRleERlY2xhcmF0aW9u
KTsKKworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEFTU0VSVChyZXN1
bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkp
OworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
KwordGVtcGxhdGUgPGNsYXNzIEQzRFNoYWRlclR5cGU+Citib29sIEJsaXQ6OnNldFNoYWRlcihT
aGFkZXJJZCBzb3VyY2UsIGNvbnN0IGNoYXIgKnByb2ZpbGUsCisgICAgICAgICAgICAgICAgICAg
ICBEM0RTaGFkZXJUeXBlICoocng6OlJlbmRlcmVyOTo6KmNyZWF0ZVNoYWRlcikoY29uc3QgRFdP
UkQgKiwgc2l6ZV90IGxlbmd0aCksCisgICAgICAgICAgICAgICAgICAgICBIUkVTVUxUIChXSU5B
UEkgSURpcmVjdDNERGV2aWNlOTo6KnNldFNoYWRlcikoRDNEU2hhZGVyVHlwZSopKQoreworICAg
IElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAg
ICBEM0RTaGFkZXJUeXBlICpzaGFkZXI7CisKKyAgICBpZiAobUNvbXBpbGVkU2hhZGVyc1tzb3Vy
Y2VdICE9IE5VTEwpCisgICAgeworICAgICAgICBzaGFkZXIgPSBzdGF0aWNfY2FzdDxEM0RTaGFk
ZXJUeXBlKj4obUNvbXBpbGVkU2hhZGVyc1tzb3VyY2VdKTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgY29uc3QgQllURSogc2hhZGVyQ29kZSA9IGdfc2hhZGVyQ29kZVtzb3VyY2Vd
OworICAgICAgICBzaXplX3Qgc2hhZGVyU2l6ZSA9IGdfc2hhZGVyU2l6ZVtzb3VyY2VdOworCisg
ICAgICAgIHNoYWRlciA9IChtUmVuZGVyZXItPipjcmVhdGVTaGFkZXIpKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgRFdPUkQqPihzaGFkZXJDb2RlKSwgc2hhZGVyU2l6ZSk7CisgICAgICAgIGlmICgh
c2hhZGVyKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBjcmVhdGUgc2hh
ZGVyIGZvciBibGl0IG9wZXJhdGlvbiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisKKyAgICAgICAgbUNvbXBpbGVkU2hhZGVyc1tzb3VyY2VdID0gc2hhZGVyOworICAg
IH0KKworICAgIEhSRVNVTFQgaHIgPSAoZGV2aWNlLT4qc2V0U2hhZGVyKShzaGFkZXIpOworCisg
ICAgaWYgKEZBSUxFRChocikpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byBzZXQgc2hh
ZGVyIGZvciBibGl0IG9wZXJhdGlvbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQmxpdDo6c2V0VmVydGV4U2hhZGVyKFNoYWRl
cklkIHNoYWRlcikKK3sKKyAgICByZXR1cm4gc2V0U2hhZGVyPElEaXJlY3QzRFZlcnRleFNoYWRl
cjk+KHNoYWRlciwgInZzXzJfMCIsICZyeDo6UmVuZGVyZXI5OjpjcmVhdGVWZXJ0ZXhTaGFkZXIs
ICZJRGlyZWN0M0REZXZpY2U5OjpTZXRWZXJ0ZXhTaGFkZXIpOworfQorCitib29sIEJsaXQ6OnNl
dFBpeGVsU2hhZGVyKFNoYWRlcklkIHNoYWRlcikKK3sKKyAgICByZXR1cm4gc2V0U2hhZGVyPElE
aXJlY3QzRFBpeGVsU2hhZGVyOT4oc2hhZGVyLCAicHNfMl8wIiwgJnJ4OjpSZW5kZXJlcjk6OmNy
ZWF0ZVBpeGVsU2hhZGVyLCAmSURpcmVjdDNERGV2aWNlOTo6U2V0UGl4ZWxTaGFkZXIpOworfQor
CitSRUNUIEJsaXQ6OmdldFN1cmZhY2VSZWN0KElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlKSBj
b25zdAoreworICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOworICAgIHN1cmZhY2UtPkdldERlc2Mo
JmRlc2MpOworCisgICAgUkVDVCByZWN0OworICAgIHJlY3QubGVmdCA9IDA7CisgICAgcmVjdC50
b3AgPSAwOworICAgIHJlY3QucmlnaHQgPSBkZXNjLldpZHRoOworICAgIHJlY3QuYm90dG9tID0g
ZGVzYy5IZWlnaHQ7CisKKyAgICByZXR1cm4gcmVjdDsKK30KKworYm9vbCBCbGl0Ojpib3hGaWx0
ZXIoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpCit7
CisgICAgSURpcmVjdDNEVGV4dHVyZTkgKnRleHR1cmUgPSBjb3B5U3VyZmFjZVRvVGV4dHVyZShz
b3VyY2UsIGdldFN1cmZhY2VSZWN0KHNvdXJjZSkpOworICAgIGlmICghdGV4dHVyZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpk
ZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgc2F2ZVN0YXRlKCk7CisKKyAg
ICBkZXZpY2UtPlNldFRleHR1cmUoMCwgdGV4dHVyZSk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJU
YXJnZXQoMCwgZGVzdCk7CisKKyAgICBzZXRWZXJ0ZXhTaGFkZXIoU0hBREVSX1ZTX1NUQU5EQVJE
KTsKKyAgICBzZXRQaXhlbFNoYWRlcihTSEFERVJfUFNfUEFTU1RIUk9VR0gpOworCisgICAgc2V0
Q29tbW9uQmxpdFN0YXRlKCk7CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FN
UF9NSU5GSUxURVIsIEQzRFRFWEZfTElORUFSKTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0
ZSgwLCBEM0RTQU1QX01BR0ZJTFRFUiwgRDNEVEVYRl9MSU5FQVIpOworCisgICAgc2V0Vmlld3Bv
cnQoZ2V0U3VyZmFjZVJlY3QoZGVzdCksIDAsIDApOworCisgICAgcmVuZGVyKCk7CisKKyAgICB0
ZXh0dXJlLT5SZWxlYXNlKCk7CisKKyAgICByZXN0b3JlU3RhdGUoKTsKKworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIEJsaXQ6OmNvcHkoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwg
Y29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIEdMaW50
IGxldmVsKQoreworICAgIFJlbmRlclRhcmdldDkgKnJlbmRlclRhcmdldCA9IE5VTEw7CisgICAg
SURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSA9IE5VTEw7CisgICAgZ2w6OlJlbmRlcmJ1ZmZlciAq
Y29sb3JidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoMCk7CisKKyAgICBpZiAo
Y29sb3JidWZmZXIpCisgICAgeworICAgICAgICByZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQ5
OjptYWtlUmVuZGVyVGFyZ2V0OShjb2xvcmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOworICAg
IH0KKyAgICAKKyAgICBpZiAocmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAgc291cmNlID0g
cmVuZGVyVGFyZ2V0LT5nZXRTdXJmYWNlKCk7CisgICAgfQorCisgICAgaWYgKCFzb3VyY2UpCisg
ICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldC4i
KTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7Cisg
ICAgfQorCisgICAgVGV4dHVyZVN0b3JhZ2U5XzJEICpzdG9yYWdlOSA9IFRleHR1cmVTdG9yYWdl
OV8yRDo6bWFrZVRleHR1cmVTdG9yYWdlOV8yRChzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2Uo
KSk7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJmYWNlID0gc3RvcmFnZTktPmdldFN1
cmZhY2VMZXZlbChsZXZlbCwgdHJ1ZSk7CisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICAg
ICAgCisgICAgaWYgKGRlc3RTdXJmYWNlKQorICAgIHsKKyAgICAgICAgcmVzdWx0ID0gY29weShz
b3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RGb3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQsIGRlc3RTdXJm
YWNlKTsKKyAgICAgICAgZGVzdFN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBzb3Vy
Y2UtPlJlbGVhc2UoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIEJsaXQ6OmNvcHko
Z2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xl
bnVtIGRlc3RGb3JtYXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpCit7
CisgICAgUmVuZGVyVGFyZ2V0OSAqcmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICBJRGlyZWN0M0RT
dXJmYWNlOSAqc291cmNlID0gTlVMTDsKKyAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZl
ciA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigwKTsKKworICAgIGlmIChjb2xvcmJ1ZmZl
cikKKyAgICB7CisgICAgICAgIHJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDk6Om1ha2VSZW5k
ZXJUYXJnZXQ5KGNvbG9yYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSk7CisgICAgfQorICAgIAor
ICAgIGlmIChyZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBzb3VyY2UgPSByZW5kZXJUYXJn
ZXQtPmdldFN1cmZhY2UoKTsKKyAgICB9CisKKyAgICBpZiAoIXNvdXJjZSkKKyAgICB7CisgICAg
ICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CisKKyAg
ICBUZXh0dXJlU3RvcmFnZTlfQ3ViZSAqc3RvcmFnZTkgPSBUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6
bWFrZVRleHR1cmVTdG9yYWdlOV9DdWJlKHN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsK
KyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdFN1cmZhY2UgPSBzdG9yYWdlOS0+Z2V0Q3ViZU1h
cFN1cmZhY2UodGFyZ2V0LCBsZXZlbCwgdHJ1ZSk7CisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsK
KworICAgIGlmIChkZXN0U3VyZmFjZSkKKyAgICB7CisgICAgICAgIHJlc3VsdCA9IGNvcHkoc291
cmNlLCBzb3VyY2VSZWN0LCBkZXN0Rm9ybWF0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBkZXN0U3VyZmFj
ZSk7CisgICAgICAgIGRlc3RTdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgfQorCisgICAgc291cmNl
LT5SZWxlYXNlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBCbGl0Ojpjb3B5KElE
aXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMZW51bSBk
ZXN0Rm9ybWF0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBJRGlyZWN0M0RTdXJmYWNl
OSAqZGVzdCkKK3sKKyAgICBpZiAoIWRlc3QpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXRE
ZXZpY2UoKTsKKworICAgIEQzRFNVUkZBQ0VfREVTQyBzb3VyY2VEZXNjOworICAgIEQzRFNVUkZB
Q0VfREVTQyBkZXN0RGVzYzsKKyAgICBzb3VyY2UtPkdldERlc2MoJnNvdXJjZURlc2MpOworICAg
IGRlc3QtPkdldERlc2MoJmRlc3REZXNjKTsKKworICAgIGlmIChzb3VyY2VEZXNjLkZvcm1hdCA9
PSBkZXN0RGVzYy5Gb3JtYXQgJiYgZGVzdERlc2MuVXNhZ2UgJiBEM0RVU0FHRV9SRU5ERVJUQVJH
RVQgJiYKKyAgICAgICAgZDNkOV9nbDo6SXNGb3JtYXRDaGFubmVsRXF1aXZhbGVudChkZXN0RGVz
Yy5Gb3JtYXQsIGRlc3RGb3JtYXQpKSAgIC8vIENhbiB1c2UgU3RyZXRjaFJlY3QKKyAgICB7Cisg
ICAgICAgIFJFQ1QgZGVzdFJlY3QgPSB7eG9mZnNldCwgeW9mZnNldCwgeG9mZnNldCArIChzb3Vy
Y2VSZWN0LnJpZ2h0IC0gc291cmNlUmVjdC5sZWZ0KSwgeW9mZnNldCArIChzb3VyY2VSZWN0LmJv
dHRvbSAtIHNvdXJjZVJlY3QudG9wKX07CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNl
LT5TdHJldGNoUmVjdChzb3VyY2UsICZzb3VyY2VSZWN0LCBkZXN0LCAmZGVzdFJlY3QsIEQzRFRF
WEZfUE9JTlQpOworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAg
ICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1
bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICByZXR1cm4gZm9ybWF0Q29udmVydChzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RGb3Jt
YXQsIHhvZmZzZXQsIHlvZmZzZXQsIGRlc3QpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBCbGl0Ojpmb3JtYXRDb252ZXJ0KElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGNv
bnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCkKK3sKKyAgICBJRGlyZWN0M0RU
ZXh0dXJlOSAqdGV4dHVyZSA9IGNvcHlTdXJmYWNlVG9UZXh0dXJlKHNvdXJjZSwgc291cmNlUmVj
dCk7CisgICAgaWYgKCF0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNl
KCk7CisKKyAgICBzYXZlU3RhdGUoKTsKKworICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCB0ZXh0
dXJlKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBkZXN0KTsKKworICAgIHNldFZp
ZXdwb3J0KHNvdXJjZVJlY3QsIHhvZmZzZXQsIHlvZmZzZXQpOworCisgICAgc2V0Q29tbW9uQmxp
dFN0YXRlKCk7CisgICAgaWYgKHNldEZvcm1hdENvbnZlcnRTaGFkZXJzKGRlc3RGb3JtYXQpKQor
ICAgIHsKKyAgICAgICAgcmVuZGVyKCk7CisgICAgfQorCisgICAgdGV4dHVyZS0+UmVsZWFzZSgp
OworCisgICAgcmVzdG9yZVN0YXRlKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBC
bGl0OjpzZXRGb3JtYXRDb252ZXJ0U2hhZGVycyhHTGVudW0gZGVzdEZvcm1hdCkKK3sKKyAgICBi
b29sIG9rYXkgPSBzZXRWZXJ0ZXhTaGFkZXIoU0hBREVSX1ZTX1NUQU5EQVJEKTsKKworICAgIHN3
aXRjaCAoZGVzdEZvcm1hdCkKKyAgICB7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKKyAgICAgIGNhc2Ug
R0xfUkdCOgorICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAgb2theSA9IG9rYXkgJiYgc2V0
UGl4ZWxTaGFkZXIoU0hBREVSX1BTX0NPTVBPTkVOVE1BU0spOworICAgICAgICBicmVhazsKKwor
ICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToK
KyAgICAgICAgb2theSA9IG9rYXkgJiYgc2V0UGl4ZWxTaGFkZXIoU0hBREVSX1BTX0xVTUlOQU5D
RSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICghb2theSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBlbnVtIHsgWCA9IDAsIFkgPSAxLCBaID0g
MiwgVyA9IDMgfTsKKworICAgIC8vIFRoZSBtZWFuaW5nIG9mIHRoaXMgY29uc3RhbnQgZGVwZW5k
cyBvbiB0aGUgc2hhZGVyIHRoYXQgd2FzIHNlbGVjdGVkLgorICAgIC8vIFNlZSB0aGUgc2hhZGVy
IGFzc2VtYmx5IGNvZGUgYWJvdmUgZm9yIGRldGFpbHMuCisgICAgZmxvYXQgcHNDb25zdDBbNF0g
PSB7IDAsIDAsIDAsIDAgfTsKKworICAgIHN3aXRjaCAoZGVzdEZvcm1hdCkKKyAgICB7CisgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgY2Fz
ZSBHTF9CR1JBX0VYVDoKKyAgICAgICAgcHNDb25zdDBbWF0gPSAxOworICAgICAgICBwc0NvbnN0
MFtaXSA9IDE7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgICAg
cHNDb25zdDBbWF0gPSAxOworICAgICAgICBwc0NvbnN0MFtXXSA9IDE7CisgICAgICAgIGJyZWFr
OworCisgICAgICBjYXNlIEdMX0FMUEhBOgorICAgICAgICBwc0NvbnN0MFtaXSA9IDE7CisgICAg
ICAgIGJyZWFrOworCisgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKKyAgICAgICAgcHNDb25zdDBb
WV0gPSAxOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6
CisgICAgICAgIHBzQ29uc3QwW1hdID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
bVJlbmRlcmVyLT5nZXREZXZpY2UoKS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYoMCwgcHNDb25z
dDAsIDEpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0lEaXJlY3QzRFRleHR1cmU5ICpCbGl0
Ojpjb3B5U3VyZmFjZVRvVGV4dHVyZShJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSwgY29uc3Qg
UkVDVCAmc291cmNlUmVjdCkKK3sKKyAgICBpZiAoIXN1cmZhY2UpCisgICAgeworICAgICAgICBy
ZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVu
ZGVyZXItPmdldERldmljZSgpOworCisgICAgRDNEU1VSRkFDRV9ERVNDIHNvdXJjZURlc2M7Cisg
ICAgc3VyZmFjZS0+R2V0RGVzYygmc291cmNlRGVzYyk7CisKKyAgICAvLyBDb3B5IHRoZSByZW5k
ZXIgdGFyZ2V0IGludG8gYSB0ZXh0dXJlCisgICAgSURpcmVjdDNEVGV4dHVyZTkgKnRleHR1cmU7
CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUoc291cmNlUmVjdC5y
aWdodCAtIHNvdXJjZVJlY3QubGVmdCwgc291cmNlUmVjdC5ib3R0b20gLSBzb3VyY2VSZWN0LnRv
cCwgMSwgRDNEVVNBR0VfUkVOREVSVEFSR0VULCBzb3VyY2VEZXNjLkZvcm1hdCwgRDNEUE9PTF9E
RUZBVUxULCAmdGV4dHVyZSwgTlVMTCk7CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAg
eworICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJl
c3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZLCAoSURpcmVjdDNEVGV4dHVyZTkqKU5VTEwpOworICAgIH0KKworICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICp0ZXh0dXJlU3VyZmFjZTsKKyAgICByZXN1bHQgPSB0ZXh0dXJlLT5HZXRT
dXJmYWNlTGV2ZWwoMCwgJnRleHR1cmVTdXJmYWNlKTsKKworICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKKyAgICB7CisgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1P
UlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICB0ZXh0dXJlLT5SZWxlYXNl
KCk7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgKElEaXJlY3Qz
RFRleHR1cmU5KilOVUxMKTsKKyAgICB9CisKKyAgICBtUmVuZGVyZXItPmVuZFNjZW5lKCk7Cisg
ICAgcmVzdWx0ID0gZGV2aWNlLT5TdHJldGNoUmVjdChzdXJmYWNlLCAmc291cmNlUmVjdCwgdGV4
dHVyZVN1cmZhY2UsIE5VTEwsIEQzRFRFWEZfTk9ORSk7CisKKyAgICB0ZXh0dXJlU3VyZmFjZS0+
UmVsZWFzZSgpOworCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRP
Rk1FTU9SWSk7CisgICAgICAgIHRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSURpcmVjdDNEVGV4dHVyZTkqKU5VTEwpOworICAg
IH0KKworICAgIHJldHVybiB0ZXh0dXJlOworfQorCit2b2lkIEJsaXQ6OnNldFZpZXdwb3J0KGNv
bnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQpCit7Cisg
ICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKwor
ICAgIEQzRFZJRVdQT1JUOSB2cDsKKyAgICB2cC5YICAgICAgPSB4b2Zmc2V0OworICAgIHZwLlkg
ICAgICA9IHlvZmZzZXQ7CisgICAgdnAuV2lkdGggID0gc291cmNlUmVjdC5yaWdodCAtIHNvdXJj
ZVJlY3QubGVmdDsKKyAgICB2cC5IZWlnaHQgPSBzb3VyY2VSZWN0LmJvdHRvbSAtIHNvdXJjZVJl
Y3QudG9wOworICAgIHZwLk1pblogICA9IDAuMGY7CisgICAgdnAuTWF4WiAgID0gMS4wZjsKKyAg
ICBkZXZpY2UtPlNldFZpZXdwb3J0KCZ2cCk7CisKKyAgICBmbG9hdCBoYWxmUGl4ZWxBZGp1c3Rb
NF0gPSB7IC0xLjBmL3ZwLldpZHRoLCAxLjBmL3ZwLkhlaWdodCwgMCwgMCB9OworICAgIGRldmlj
ZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKDAsIGhhbGZQaXhlbEFkanVzdCwgMSk7Cit9CisK
K3ZvaWQgQmxpdDo6c2V0Q29tbW9uQmxpdFN0YXRlKCkKK3sKKyAgICBJRGlyZWN0M0REZXZpY2U5
ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgZGV2aWNlLT5TZXREZXB0
aFN0ZW5jaWxTdXJmYWNlKE5VTEwpOworCisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOworICAgIGRldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIEQzRENPTE9SV1JJVEVFTkFCTEVfQUxQSEEgfCBE
M0RDT0xPUldSSVRFRU5BQkxFX0JMVUUgfCBEM0RDT0xPUldSSVRFRU5BQkxFX0dSRUVOIHwgRDNE
Q09MT1JXUklURUVOQUJMRV9SRUQpOworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
U1JHQldSSVRFRU5BQkxFLCBGQUxTRSk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19TQ0lTU09SVEVTVEVOQUJMRSwgRkFMU0UpOworCisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3Rh
dGUoMCwgRDNEU0FNUF9NQUdGSUxURVIsIEQzRFRFWEZfUE9JTlQpOworICAgIGRldmljZS0+U2V0
U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUlORklMVEVSLCBEM0RURVhGX1BPSU5UKTsKKyAgICBk
ZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX1NSR0JURVhUVVJFLCBGQUxTRSk7Cisg
ICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9BRERSRVNTVSwgRDNEVEFERFJF
U1NfQ0xBTVApOworICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfQUREUkVT
U1YsIEQzRFRBRERSRVNTX0NMQU1QKTsKKworICAgIFJFQ1Qgc2Npc3NvclJlY3QgPSB7MH07ICAg
Ly8gU2Npc3NvcmluZyBpcyBkaXNhYmxlZCBmb3IgZmxpcHBpbmcsIGJ1dCB3ZSBuZWVkIHRoaXMg
dG8gY2FwdHVyZSBhbmQgcmVzdG9yZSB0aGUgb2xkIHJlY3RhbmdsZQorICAgIGRldmljZS0+U2V0
U2Npc3NvclJlY3QoJnNjaXNzb3JSZWN0KTsKKworICAgIGZvcihpbnQgaSA9IDA7IGkgPCBnbDo6
TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgeworICAgICAgICBkZXZpY2UtPlNldFN0cmVh
bVNvdXJjZUZyZXEoaSwgMSk7CisgICAgfQorfQorCit2b2lkIEJsaXQ6OnJlbmRlcigpCit7Cisg
ICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKwor
ICAgIEhSRVNVTFQgaHIgPSBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZSgwLCBtUXVhZFZlcnRleEJ1
ZmZlciwgMCwgMiAqIHNpemVvZihmbG9hdCkpOworICAgIGhyID0gZGV2aWNlLT5TZXRWZXJ0ZXhE
ZWNsYXJhdGlvbihtUXVhZFZlcnRleERlY2xhcmF0aW9uKTsKKworICAgIG1SZW5kZXJlci0+c3Rh
cnRTY2VuZSgpOworICAgIGhyID0gZGV2aWNlLT5EcmF3UHJpbWl0aXZlKEQzRFBUX1RSSUFOR0xF
U1RSSVAsIDAsIDIpOworfQorCit2b2lkIEJsaXQ6OnNhdmVTdGF0ZSgpCit7CisgICAgSURpcmVj
dDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgIEhSRVNV
TFQgaHI7CisKKyAgICBkZXZpY2UtPkdldERlcHRoU3RlbmNpbFN1cmZhY2UoJm1TYXZlZERlcHRo
U3RlbmNpbCk7CisgICAgZGV2aWNlLT5HZXRSZW5kZXJUYXJnZXQoMCwgJm1TYXZlZFJlbmRlclRh
cmdldCk7CisKKyAgICBpZiAobVNhdmVkU3RhdGVCbG9jayA9PSBOVUxMKQorICAgIHsKKyAgICAg
ICAgaHIgPSBkZXZpY2UtPkJlZ2luU3RhdGVCbG9jaygpOworICAgICAgICBBU1NFUlQoU1VDQ0VF
REVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9G
TUVNT1JZKTsKKworICAgICAgICBzZXRDb21tb25CbGl0U3RhdGUoKTsKKworICAgICAgICBzdGF0
aWMgY29uc3QgZmxvYXQgZHVtbXlDb25zdFs0XSA9IHsgMCwgMCwgMCwgMCB9OworCisgICAgICAg
IGRldmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOworICAgICAgICBkZXZpY2UtPlNldFZlcnRl
eFNoYWRlckNvbnN0YW50RigwLCBkdW1teUNvbnN0LCAxKTsKKyAgICAgICAgZGV2aWNlLT5TZXRQ
aXhlbFNoYWRlcihOVUxMKTsKKyAgICAgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50
RigwLCBkdW1teUNvbnN0LCAxKTsKKworICAgICAgICBEM0RWSUVXUE9SVDkgZHVtbXlWcDsKKyAg
ICAgICAgZHVtbXlWcC5YID0gMDsKKyAgICAgICAgZHVtbXlWcC5ZID0gMDsKKyAgICAgICAgZHVt
bXlWcC5XaWR0aCA9IDE7CisgICAgICAgIGR1bW15VnAuSGVpZ2h0ID0gMTsKKyAgICAgICAgZHVt
bXlWcC5NaW5aID0gMDsKKyAgICAgICAgZHVtbXlWcC5NYXhaID0gMTsKKworICAgICAgICBkZXZp
Y2UtPlNldFZpZXdwb3J0KCZkdW1teVZwKTsKKworICAgICAgICBkZXZpY2UtPlNldFRleHR1cmUo
MCwgTlVMTCk7CisKKyAgICAgICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2UoMCwgbVF1YWRWZXJ0
ZXhCdWZmZXIsIDAsIDApOworCisgICAgICAgIGRldmljZS0+U2V0VmVydGV4RGVjbGFyYXRpb24o
bVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbik7CisKKyAgICAgICAgaHIgPSBkZXZpY2UtPkVuZFN0YXRl
QmxvY2soJm1TYXZlZFN0YXRlQmxvY2spOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8
fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsK
KyAgICB9CisKKyAgICBBU1NFUlQobVNhdmVkU3RhdGVCbG9jayAhPSBOVUxMKTsKKworICAgIGlm
IChtU2F2ZWRTdGF0ZUJsb2NrICE9IE5VTEwpCisgICAgeworICAgICAgICBociA9IG1TYXZlZFN0
YXRlQmxvY2stPkNhcHR1cmUoKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworICAg
IH0KK30KKwordm9pZCBCbGl0OjpyZXN0b3JlU3RhdGUoKQoreworICAgIElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICBkZXZpY2UtPlNldERl
cHRoU3RlbmNpbFN1cmZhY2UobVNhdmVkRGVwdGhTdGVuY2lsKTsKKyAgICBpZiAobVNhdmVkRGVw
dGhTdGVuY2lsICE9IE5VTEwpCisgICAgeworICAgICAgICBtU2F2ZWREZXB0aFN0ZW5jaWwtPlJl
bGVhc2UoKTsKKyAgICAgICAgbVNhdmVkRGVwdGhTdGVuY2lsID0gTlVMTDsKKyAgICB9CisKKyAg
ICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBtU2F2ZWRSZW5kZXJUYXJnZXQpOworICAgIGlm
IChtU2F2ZWRSZW5kZXJUYXJnZXQgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1TYXZlZFJlbmRl
clRhcmdldC0+UmVsZWFzZSgpOworICAgICAgICBtU2F2ZWRSZW5kZXJUYXJnZXQgPSBOVUxMOwor
ICAgIH0KKworICAgIEFTU0VSVChtU2F2ZWRTdGF0ZUJsb2NrICE9IE5VTEwpOworCisgICAgaWYg
KG1TYXZlZFN0YXRlQmxvY2sgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1TYXZlZFN0YXRlQmxv
Y2stPkFwcGx5KCk7CisgICAgfQorfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvQmxpdC5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0JsaXQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zNzE4MDI4ZTY2MmQzZDU2MWM3NmNkMGNhNmY1MmU4MTNlNjcyNWMzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L0JsaXQuaApAQCAtMCwwICsxLDk0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBCbGl0LmNw
cDogU3VyZmFjZSBjb3B5IHV0aWxpdHkgY2xhc3MuCisKKyNpZm5kZWYgTElCR0xFU1YyX0JMSVRf
SF8KKyNkZWZpbmUgTElCR0xFU1YyX0JMSVRfSF8KKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0
aWxzLmgiCisKK25hbWVzcGFjZSBnbAoreworY2xhc3MgRnJhbWVidWZmZXI7Cit9CisKK25hbWVz
cGFjZSByeAoreworY2xhc3MgUmVuZGVyZXI5OworY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UyRDsKK2NsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTsKKworY2xhc3MgQmxpdAor
eworICBwdWJsaWM6CisgICAgZXhwbGljaXQgQmxpdChSZW5kZXJlcjkgKnJlbmRlcmVyKTsKKyAg
ICB+QmxpdCgpOworCisgICAgLy8gQ29weSBmcm9tIHNvdXJjZSBzdXJmYWNlIHRvIGRlc3Qgc3Vy
ZmFjZS4KKyAgICAvLyBzb3VyY2VSZWN0LCB4b2Zmc2V0LCB5b2Zmc2V0IGFyZSBpbiBEM0QgY29v
cmRpbmF0ZXMgKDAsMCBpbiB1cHBlci1sZWZ0KQorICAgIGJvb2wgY29weShnbDo6RnJhbWVidWZm
ZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBSRUNUICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1h
dCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2Uy
RCAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpOworICAgIGJvb2wgY29weShnbDo6RnJhbWVidWZmZXIg
KmZyYW1lYnVmZmVyLCBjb25zdCBSRUNUICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJl
ICpzdG9yYWdlLCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCk7CisKKyAgICAvLyBDb3B5IGZy
b20gc291cmNlIHN1cmZhY2UgdG8gZGVzdCBzdXJmYWNlLgorICAgIC8vIHNvdXJjZVJlY3QsIHhv
ZmZzZXQsIHlvZmZzZXQgYXJlIGluIEQzRCBjb29yZGluYXRlcyAoMCwwIGluIHVwcGVyLWxlZnQp
CisgICAgLy8gc291cmNlIGlzIGludGVycHJldGVkIGFzIFJHQkEgYW5kIGRlc3RGb3JtYXQgc3Bl
Y2lmaWVzIHRoZSBkZXNpcmVkIHJlc3VsdCBmb3JtYXQuIEZvciBleGFtcGxlLCBpZiBkZXN0Rm9y
bWF0ID0gR0xfUkdCLCB0aGUgYWxwaGEgY2hhbm5lbCB3aWxsIGJlIGZvcmNlZCB0byAwLgorICAg
IGJvb2wgZm9ybWF0Q29udmVydChJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBjb25zdCBSRUNU
ICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpOworCisgICAgLy8gMngyIGJveCBmaWx0ZXIg
c2FtcGxlIGZyb20gc291cmNlIHRvIGRlc3QuCisgICAgLy8gUmVxdWlyZXMgdGhhdCBzb3VyY2Ug
aXMgUkdCKEEpIGFuZCBkZXN0IGhhcyB0aGUgc2FtZSBmb3JtYXQgYXMgc291cmNlLgorICAgIGJv
b2wgYm94RmlsdGVyKElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIElEaXJlY3QzRFN1cmZhY2U5
ICpkZXN0KTsKKworICBwcml2YXRlOgorICAgIHJ4OjpSZW5kZXJlcjkgKm1SZW5kZXJlcjsKKwor
ICAgIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKm1RdWFkVmVydGV4QnVmZmVyOworICAgIElEaXJl
Y3QzRFZlcnRleERlY2xhcmF0aW9uOSAqbVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbjsKKworICAgIHZv
aWQgaW5pdEdlb21ldHJ5KCk7CisKKyAgICBib29sIHNldEZvcm1hdENvbnZlcnRTaGFkZXJzKEdM
ZW51bSBkZXN0Rm9ybWF0KTsKKworICAgIGJvb2wgY29weShJRGlyZWN0M0RTdXJmYWNlOSAqc291
cmNlLCBjb25zdCBSRUNUICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpOworICAgIElEaXJl
Y3QzRFRleHR1cmU5ICpjb3B5U3VyZmFjZVRvVGV4dHVyZShJRGlyZWN0M0RTdXJmYWNlOSAqc3Vy
ZmFjZSwgY29uc3QgUkVDVCAmc291cmNlUmVjdCk7CisgICAgdm9pZCBzZXRWaWV3cG9ydChjb25z
dCBSRUNUICZzb3VyY2VSZWN0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0KTsKKyAgICB2
b2lkIHNldENvbW1vbkJsaXRTdGF0ZSgpOworICAgIFJFQ1QgZ2V0U3VyZmFjZVJlY3QoSURpcmVj
dDNEU3VyZmFjZTkgKnN1cmZhY2UpIGNvbnN0OworCisgICAgLy8gVGhpcyBlbnVtIGlzIHVzZWQg
dG8gaW5kZXggbUNvbXBpbGVkU2hhZGVycyBhbmQgbVNoYWRlclNvdXJjZS4KKyAgICBlbnVtIFNo
YWRlcklkCisgICAgeworICAgICAgICBTSEFERVJfVlNfU1RBTkRBUkQsCisgICAgICAgIFNIQURF
Ul9WU19GTElQWSwKKyAgICAgICAgU0hBREVSX1BTX1BBU1NUSFJPVUdILAorICAgICAgICBTSEFE
RVJfUFNfTFVNSU5BTkNFLAorICAgICAgICBTSEFERVJfUFNfQ09NUE9ORU5UTUFTSywKKyAgICAg
ICAgU0hBREVSX0NPVU5UCisgICAgfTsKKworICAgIC8vIFRoaXMgYWN0dWFsbHkgY29udGFpbnMg
SURpcmVjdDNEVmVydGV4U2hhZGVyOSBvciBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgY2FzdGVkIHRv
IElVbmtub3duLgorICAgIElVbmtub3duICptQ29tcGlsZWRTaGFkZXJzW1NIQURFUl9DT1VOVF07
CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgRDNEU2hhZGVyVHlwZT4KKyAgICBib29sIHNldFNoYWRl
cihTaGFkZXJJZCBzb3VyY2UsIGNvbnN0IGNoYXIgKnByb2ZpbGUsCisgICAgICAgICAgICAgICAg
ICAgRDNEU2hhZGVyVHlwZSAqKFJlbmRlcmVyOTo6KmNyZWF0ZVNoYWRlcikoY29uc3QgRFdPUkQg
Kiwgc2l6ZV90IGxlbmd0aCksCisgICAgICAgICAgICAgICAgICAgSFJFU1VMVCAoV0lOQVBJIElE
aXJlY3QzRERldmljZTk6OipzZXRTaGFkZXIpKEQzRFNoYWRlclR5cGUqKSk7CisKKyAgICBib29s
IHNldFZlcnRleFNoYWRlcihTaGFkZXJJZCBzaGFkZXIpOworICAgIGJvb2wgc2V0UGl4ZWxTaGFk
ZXIoU2hhZGVySWQgc2hhZGVyKTsKKyAgICB2b2lkIHJlbmRlcigpOworCisgICAgdm9pZCBzYXZl
U3RhdGUoKTsKKyAgICB2b2lkIHJlc3RvcmVTdGF0ZSgpOworICAgIElEaXJlY3QzRFN0YXRlQmxv
Y2s5ICptU2F2ZWRTdGF0ZUJsb2NrOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICptU2F2ZWRSZW5k
ZXJUYXJnZXQ7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1TYXZlZERlcHRoU3RlbmNpbDsKKwor
ICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihCbGl0KTsKK307Cit9CisKKyNlbmRpZiAgIC8v
IExJQkdMRVNWMl9CTElUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvQnVmZmVyU3RvcmFnZTkuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0J1ZmZlclN0b3JhZ2U5
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45ZmRjMTI0NmYxNzQzNmQ3ZjRjNGNjZjNlNTQ5NjA2NTIwODkzNTkw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L0J1ZmZlclN0b3JhZ2U5LmNwcApAQCAtMCwwICsxLDc4IEBACisjaW5j
bHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBCdWZmZXJTdG9yYWdlOS5j
cHAgRGVmaW5lcyB0aGUgQnVmZmVyU3RvcmFnZTkgY2xhc3MuCisKKyNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9CdWZmZXJTdG9yYWdlOS5oIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1
Zy5oIgorCituYW1lc3BhY2UgcngKK3sKKworQnVmZmVyU3RvcmFnZTk6OkJ1ZmZlclN0b3JhZ2U5
KCkKK3sKKyAgICBtTWVtb3J5ID0gTlVMTDsKKyAgICBtQWxsb2NhdGVkU2l6ZSA9IDA7CisgICAg
bVNpemUgPSAwOworfQorCitCdWZmZXJTdG9yYWdlOTo6fkJ1ZmZlclN0b3JhZ2U5KCkKK3sKKyAg
ICBkZWxldGVbXSBtTWVtb3J5OworfQorCitCdWZmZXJTdG9yYWdlOSAqQnVmZmVyU3RvcmFnZTk6
Om1ha2VCdWZmZXJTdG9yYWdlOShCdWZmZXJTdG9yYWdlICpidWZmZXJTdG9yYWdlKQoreworICAg
IEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKEJ1ZmZlclN0b3JhZ2U5KiwgYnVmZmVyU3RvcmFnZSkp
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxCdWZmZXJTdG9yYWdlOSo+KGJ1ZmZlclN0b3JhZ2Up
OworfQorCit2b2lkICpCdWZmZXJTdG9yYWdlOTo6Z2V0RGF0YSgpCit7CisgICAgcmV0dXJuIG1N
ZW1vcnk7Cit9CisKK3ZvaWQgQnVmZmVyU3RvcmFnZTk6OnNldERhdGEoY29uc3Qgdm9pZCogZGF0
YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBvZmZzZXQpCit7CisgICAgaWYgKCFt
TWVtb3J5IHx8IG9mZnNldCArIHNpemUgPiBtQWxsb2NhdGVkU2l6ZSkKKyAgICB7CisgICAgICAg
IHVuc2lnbmVkIGludCBuZXdBbGxvY2F0ZWRTaXplID0gb2Zmc2V0ICsgc2l6ZTsKKyAgICAgICAg
dm9pZCAqbmV3TWVtb3J5ID0gbmV3IGNoYXJbbmV3QWxsb2NhdGVkU2l6ZV07CisKKyAgICAgICAg
aWYgKG9mZnNldCA+IDAgJiYgbU1lbW9yeSAmJiBtQWxsb2NhdGVkU2l6ZSA+IDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1lbWNweShuZXdNZW1vcnksIG1NZW1vcnksIHN0ZDo6bWluKG9mZnNl
dCwgbUFsbG9jYXRlZFNpemUpKTsKKyAgICAgICAgfQorCisgICAgICAgIGRlbGV0ZVtdIG1NZW1v
cnk7CisgICAgICAgIG1NZW1vcnkgPSBuZXdNZW1vcnk7CisgICAgICAgIG1BbGxvY2F0ZWRTaXpl
ID0gbmV3QWxsb2NhdGVkU2l6ZTsKKyAgICB9CisKKyAgICBtU2l6ZSA9IHN0ZDo6bWF4KG1TaXpl
LCBvZmZzZXQgKyBzaXplKTsKKyAgICBpZiAoZGF0YSkKKyAgICB7CisgICAgICAgIG1lbWNweShy
ZWludGVycHJldF9jYXN0PGNoYXIqPihtTWVtb3J5KSArIG9mZnNldCwgZGF0YSwgc2l6ZSk7Cisg
ICAgfQorfQorCit2b2lkIEJ1ZmZlclN0b3JhZ2U5OjpjbGVhcigpCit7CisgICAgbVNpemUgPSAw
OworfQorCit1bnNpZ25lZCBpbnQgQnVmZmVyU3RvcmFnZTk6OmdldFNpemUoKSBjb25zdAorewor
ICAgIHJldHVybiBtU2l6ZTsKK30KKworYm9vbCBCdWZmZXJTdG9yYWdlOTo6c3VwcG9ydHNEaXJl
Y3RCaW5kaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9C
dWZmZXJTdG9yYWdlOS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L0J1ZmZlclN0b3JhZ2U5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2U4MDM5NjliYzM1ZDRl
YTExMWRhMjI4MWYyNWIzZTE3MWRkYzIzNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CdWZmZXJTdG9yYWdlOS5o
CkBAIC0wLDAgKzEsNDIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBCdWZmZXJTdG9yYWdlOS5oIERl
ZmluZXMgdGhlIEJ1ZmZlclN0b3JhZ2U5IGNsYXNzLgorCisjaWZuZGVmIExJQkdMRVNWMl9SRU5E
RVJFUl9CVUZGRVJTVE9SQUdFOV9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfQlVGRkVS
U1RPUkFHRTlfSF8KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdl
LmgiCisKK25hbWVzcGFjZSByeAoreworCitjbGFzcyBCdWZmZXJTdG9yYWdlOSA6IHB1YmxpYyBC
dWZmZXJTdG9yYWdlCit7CisgIHB1YmxpYzoKKyAgICBCdWZmZXJTdG9yYWdlOSgpOworICAgIHZp
cnR1YWwgfkJ1ZmZlclN0b3JhZ2U5KCk7CisKKyAgICBzdGF0aWMgQnVmZmVyU3RvcmFnZTkgKm1h
a2VCdWZmZXJTdG9yYWdlOShCdWZmZXJTdG9yYWdlICpidWZmZXJTdG9yYWdlKTsKKworICAgIHZp
cnR1YWwgdm9pZCAqZ2V0RGF0YSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhKGNvbnN0IHZv
aWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKKyAgICB2
aXJ0dWFsIHZvaWQgY2xlYXIoKTsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRTaXplKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRGlyZWN0QmluZGluZygpIGNvbnN0Owor
CisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEJ1ZmZlclN0b3JhZ2U5
KTsKKworICAgIHZvaWQgKm1NZW1vcnk7CisgICAgdW5zaWduZWQgaW50IG1BbGxvY2F0ZWRTaXpl
OworCisgICAgdW5zaWduZWQgaW50IG1TaXplOworfTsKKworfQorCisjZW5kaWYgLy8gTElCR0xF
U1YyX1JFTkRFUkVSX0JVRkZFUlNUT1JBR0U5X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvRmVuY2U5LmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9GZW5jZTkuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjYzOWMzN2I0ZTQzOTljYjRmZmQ4NzlmNDdmMTUxZmMwY2JhYzMwOGMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvRmVuY2U5LmNwcApAQCAtMCwwICsxLDEzNSBAQAorI2luY2x1ZGUgInByZWNv
bXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gRmVuY2U5LmNwcDogRGVmaW5lcyB0aGUgcng6
OkZlbmNlOSBjbGFzcy4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ZlbmNl
OS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvUmVuZGVyZXI5LmgiCisKK25hbWVzcGFjZSByeAoreworCitGZW5jZTk6OkZlbmNl
OShyeDo6UmVuZGVyZXI5ICpyZW5kZXJlcikKK3sKKyAgICBtUmVuZGVyZXIgPSByZW5kZXJlcjsK
KyAgICBtUXVlcnkgPSBOVUxMOworfQorCitGZW5jZTk6On5GZW5jZTkoKQoreworICAgIGlmICht
UXVlcnkpCisgICAgeworICAgICAgICBtUmVuZGVyZXItPmZyZWVFdmVudFF1ZXJ5KG1RdWVyeSk7
CisgICAgICAgIG1RdWVyeSA9IE5VTEw7CisgICAgfQorfQorCitHTGJvb2xlYW4gRmVuY2U5Ojpp
c0ZlbmNlKCkKK3sKKyAgICAvLyBHTF9OVl9mZW5jZSBzcGVjOgorICAgIC8vIEEgbmFtZSByZXR1
cm5lZCBieSBHZW5GZW5jZXNOViwgYnV0IG5vdCB5ZXQgc2V0IHZpYSBTZXRGZW5jZU5WLCBpcyBu
b3QgdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgZmVuY2UuCisgICAgcmV0dXJuIG1RdWVyeSAhPSBO
VUxMOworfQorCit2b2lkIEZlbmNlOTo6c2V0RmVuY2UoR0xlbnVtIGNvbmRpdGlvbikKK3sKKyAg
ICBpZiAoIW1RdWVyeSkKKyAgICB7CisgICAgICAgIG1RdWVyeSA9IG1SZW5kZXJlci0+YWxsb2Nh
dGVFdmVudFF1ZXJ5KCk7CisgICAgICAgIGlmICghbVF1ZXJ5KQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAg
fQorCisgICAgSFJFU1VMVCByZXN1bHQgPSBtUXVlcnktPklzc3VlKEQzRElTU1VFX0VORCk7Cisg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIHNldENvbmRpdGlvbihjb25kaXRp
b24pOworICAgIHNldFN0YXR1cyhHTF9GQUxTRSk7Cit9CisKK0dMYm9vbGVhbiBGZW5jZTk6OnRl
c3RGZW5jZSgpCit7CisgICAgaWYgKG1RdWVyeSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfVFJVRSk7CisgICAgfQorCisg
ICAgSFJFU1VMVCByZXN1bHQgPSBtUXVlcnktPkdldERhdGEoTlVMTCwgMCwgRDNER0VUREFUQV9G
TFVTSCk7CisKKyAgICBpZiAoZDNkOTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKKyAgICB7
CisgICAgICAgIG1SZW5kZXJlci0+bm90aWZ5RGV2aWNlTG9zdCgpOworICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX1RSVUUpOworICAgIH0KKworICAgIEFTU0VS
VChyZXN1bHQgPT0gU19PSyB8fCByZXN1bHQgPT0gU19GQUxTRSk7CisgICAgc2V0U3RhdHVzKHJl
c3VsdCA9PSBTX09LKTsKKyAgICByZXR1cm4gZ2V0U3RhdHVzKCk7Cit9CisKK3ZvaWQgRmVuY2U5
OjpmaW5pc2hGZW5jZSgpCit7CisgICAgaWYgKG1RdWVyeSA9PSBOVUxMKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgfQorCisgICAg
d2hpbGUgKCF0ZXN0RmVuY2UoKSkKKyAgICB7CisgICAgICAgIFNsZWVwKDApOworICAgIH0KK30K
Kwordm9pZCBGZW5jZTk6OmdldEZlbmNlaXYoR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKQor
eworICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgIH0KKworICAgIHN3aXRjaCAocG5hbWUpCisg
ICAgeworICAgICAgICBjYXNlIEdMX0ZFTkNFX1NUQVRVU19OVjoKKyAgICAgICAgeworICAgICAg
ICAgICAgLy8gR0xfTlZfZmVuY2Ugc3BlYzoKKyAgICAgICAgICAgIC8vIE9uY2UgdGhlIHN0YXR1
cyBvZiBhIGZlbmNlIGhhcyBiZWVuIGZpbmlzaGVkICh2aWEgRmluaXNoRmVuY2VOVikgb3IgdGVz
dGVkIGFuZCB0aGUgcmV0dXJuZWQgc3RhdHVzIGlzIFRSVUUgKHZpYSBlaXRoZXIgVGVzdEZlbmNl
TlYKKyAgICAgICAgICAgIC8vIG9yIEdldEZlbmNlaXZOViBxdWVyeWluZyB0aGUgRkVOQ0VfU1RB
VFVTX05WKSwgdGhlIHN0YXR1cyByZW1haW5zIFRSVUUgdW50aWwgdGhlIG5leHQgU2V0RmVuY2VO
ViBvZiB0aGUgZmVuY2UuCisgICAgICAgICAgICBpZiAoZ2V0U3RhdHVzKCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcGFyYW1zWzBdID0gR0xfVFJVRTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gbVF1ZXJ5LT5HZXREYXRhKE5VTEwsIDAsIDApOworCisgICAgICAgICAgICBp
ZiAoZDNkOTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBwYXJhbXNbMF0gPSBHTF9UUlVFOworICAgICAgICAgICAgICAgIG1SZW5kZXJl
ci0+bm90aWZ5RGV2aWNlTG9zdCgpOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEFTU0VSVChy
ZXN1bHQgPT0gU19PSyB8fCByZXN1bHQgPT0gU19GQUxTRSk7CisgICAgICAgICAgICBzZXRTdGF0
dXMocmVzdWx0ID09IFNfT0spOworICAgICAgICAgICAgcGFyYW1zWzBdID0gZ2V0U3RhdHVzKCk7
CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgR0xfRkVOQ0Vf
Q09ORElUSU9OX05WOgorICAgICAgICAgICAgcGFyYW1zWzBdID0gZ2V0Q29uZGl0aW9uKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30K
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L0ZlbmNlOS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L0ZlbmNlOS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmMTc2NDFlNTE5YWI0Nzg0
MDdlODBjY2JmZDI1MzgwYTNkY2M4YmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvRmVuY2U5LmgKQEAgLTAsMCAr
MSwzOSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIEZlbmNlOS5oOiBEZWZpbmVzIHRoZSByeDo6RmVu
Y2U5IGNsYXNzIHdoaWNoIGltcGxlbWVudHMgcng6OkZlbmNlSW1wbC4KKworI2lmbmRlZiBMSUJH
TEVTVjJfUkVOREVSRVJfRkVOQ0U5X0hfCisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9GRU5D
RTlfSF8KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZUltcGwuaCIKKworbmFt
ZXNwYWNlIHJ4Cit7CitjbGFzcyBSZW5kZXJlcjk7CisKK2NsYXNzIEZlbmNlOSA6IHB1YmxpYyBG
ZW5jZUltcGwKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IEZlbmNlOShyeDo6UmVuZGVyZXI5
ICpyZW5kZXJlcik7CisgICAgdmlydHVhbCB+RmVuY2U5KCk7CisKKyAgICBHTGJvb2xlYW4gaXNG
ZW5jZSgpOworICAgIHZvaWQgc2V0RmVuY2UoR0xlbnVtIGNvbmRpdGlvbik7CisgICAgR0xib29s
ZWFuIHRlc3RGZW5jZSgpOworICAgIHZvaWQgZmluaXNoRmVuY2UoKTsKKyAgICB2b2lkIGdldEZl
bmNlaXYoR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKTsKKworICBwcml2YXRlOgorICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihGZW5jZTkpOworCisgICAgcng6OlJlbmRlcmVyOSAqbVJl
bmRlcmVyOworICAgIElEaXJlY3QzRFF1ZXJ5OSAqbVF1ZXJ5OworfTsKKworfQorCisjZW5kaWYg
Ly8gTElCR0xFU1YyX1JFTkRFUkVSX0ZFTkNFOV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ltYWdlOS5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW1hZ2U5LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44NTExOTQ2MzZkMGIzMTk2ZjlhMjY0YWFhZmYyYTIxNzU3YTg5OWMzCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L0ltYWdlOS5jcHAKQEAgLTAsMCArMSw3MzIgQEAKKyNpbmNsdWRlICJwcmVj
b21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gSW1hZ2U5LmNwcDogSW1wbGVtZW50
cyB0aGUgcng6OkltYWdlOSBjbGFzcywgd2hpY2ggYWN0cyBhcyB0aGUgaW50ZXJmYWNlIHRvCisv
LyB0aGUgYWN0dWFsIHVuZGVybHlpbmcgc3VyZmFjZXMgb2YgYSBUZXh0dXJlLgorCisjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW1hZ2U5LmgiCisKKyNpbmNsdWRlICJsaWJHTEVT
djIvbWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9SZW5kZXJlcjkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5k
ZXJUYXJnZXQ5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0
b3JhZ2U5LmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5kZXJlcjlf
dXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZ2VuZXJhdGVtaXAuaCIKKwor
bmFtZXNwYWNlIHJ4Cit7CisKK0ltYWdlOTo6SW1hZ2U5KCkKK3sKKyAgICBtU3VyZmFjZSA9IE5V
TEw7CisgICAgbVJlbmRlcmVyID0gTlVMTDsKKworICAgIG1EM0RQb29sID0gRDNEUE9PTF9TWVNU
RU1NRU07CisgICAgbUQzREZvcm1hdCA9IEQzREZNVF9VTktOT1dOOworfQorCitJbWFnZTk6On5J
bWFnZTkoKQoreworICAgIGlmIChtU3VyZmFjZSkKKyAgICB7CisgICAgICAgIG1TdXJmYWNlLT5S
ZWxlYXNlKCk7CisgICAgfQorfQorCit2b2lkIEltYWdlOTo6Z2VuZXJhdGVNaXAoSURpcmVjdDNE
U3VyZmFjZTkgKmRlc3RTdXJmYWNlLCBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlU3VyZmFjZSkK
K3sKKyAgICBEM0RTVVJGQUNFX0RFU0MgZGVzdERlc2M7CisgICAgSFJFU1VMVCByZXN1bHQgPSBk
ZXN0U3VyZmFjZS0+R2V0RGVzYygmZGVzdERlc2MpOworICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CisKKyAgICBEM0RTVVJGQUNFX0RFU0Mgc291cmNlRGVzYzsKKyAgICByZXN1bHQgPSBz
b3VyY2VTdXJmYWNlLT5HZXREZXNjKCZzb3VyY2VEZXNjKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOworCisgICAgQVNTRVJUKHNvdXJjZURlc2MuRm9ybWF0ID09IGRlc3REZXNjLkZv
cm1hdCk7CisgICAgQVNTRVJUKHNvdXJjZURlc2MuV2lkdGggPT0gMSB8fCBzb3VyY2VEZXNjLldp
ZHRoIC8gMiA9PSBkZXN0RGVzYy5XaWR0aCk7CisgICAgQVNTRVJUKHNvdXJjZURlc2MuSGVpZ2h0
ID09IDEgfHwgc291cmNlRGVzYy5IZWlnaHQgLyAyID09IGRlc3REZXNjLkhlaWdodCk7CisKKyAg
ICBEM0RMT0NLRURfUkVDVCBzb3VyY2VMb2NrZWQgPSB7MH07CisgICAgcmVzdWx0ID0gc291cmNl
U3VyZmFjZS0+TG9ja1JlY3QoJnNvdXJjZUxvY2tlZCwgTlVMTCwgRDNETE9DS19SRUFET05MWSk7
CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIEQzRExPQ0tFRF9SRUNUIGRl
c3RMb2NrZWQgPSB7MH07CisgICAgcmVzdWx0ID0gZGVzdFN1cmZhY2UtPkxvY2tSZWN0KCZkZXN0
TG9ja2VkLCBOVUxMLCAwKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAg
Y29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgY2hhcio+KHNvdXJjZUxvY2tlZC5wQml0cyk7CisgICAgdW5zaWduZWQgY2hhciAq
ZGVzdERhdGEgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihkZXN0TG9ja2VkLnBC
aXRzKTsKKworICAgIGlmIChzb3VyY2VEYXRhICYmIGRlc3REYXRhKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChzb3VyY2VEZXNjLkZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRDNE
Rk1UX0w4OgorICAgICAgICAgICAgR2VuZXJhdGVNaXA8TDg+KHNvdXJjZURlc2MuV2lkdGgsIHNv
dXJjZURlc2MuSGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3VyY2VMb2NrZWQuUGl0Y2gsIGRlc3REYXRh
LCBkZXN0TG9ja2VkLlBpdGNoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2Ug
RDNERk1UX0E4TDg6CisgICAgICAgICAgICBHZW5lcmF0ZU1pcDxBOEw4Pihzb3VyY2VEZXNjLldp
ZHRoLCBzb3VyY2VEZXNjLkhlaWdodCwgc291cmNlRGF0YSwgc291cmNlTG9ja2VkLlBpdGNoLCBk
ZXN0RGF0YSwgZGVzdExvY2tlZC5QaXRjaCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBjYXNlIEQzREZNVF9BOFI4RzhCODoKKyAgICAgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoK
KyAgICAgICAgICAgIEdlbmVyYXRlTWlwPEE4UjhHOEI4Pihzb3VyY2VEZXNjLldpZHRoLCBzb3Vy
Y2VEZXNjLkhlaWdodCwgc291cmNlRGF0YSwgc291cmNlTG9ja2VkLlBpdGNoLCBkZXN0RGF0YSwg
ZGVzdExvY2tlZC5QaXRjaCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEQz
REZNVF9BMTZCMTZHMTZSMTZGOgorICAgICAgICAgICAgR2VuZXJhdGVNaXA8QTE2QjE2RzE2UjE2
Rj4oc291cmNlRGVzYy5XaWR0aCwgc291cmNlRGVzYy5IZWlnaHQsIHNvdXJjZURhdGEsIHNvdXJj
ZUxvY2tlZC5QaXRjaCwgZGVzdERhdGEsIGRlc3RMb2NrZWQuUGl0Y2gpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKKyAgICAgICAgICAg
IEdlbmVyYXRlTWlwPEEzMkIzMkczMlIzMkY+KHNvdXJjZURlc2MuV2lkdGgsIHNvdXJjZURlc2Mu
SGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3VyY2VMb2NrZWQuUGl0Y2gsIGRlc3REYXRhLCBkZXN0TG9j
a2VkLlBpdGNoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBkZXN0U3VyZmFjZS0+VW5sb2NrUmVjdCgpOworICAgICAgICBzb3VyY2VTdXJmYWNl
LT5VbmxvY2tSZWN0KCk7CisgICAgfQorfQorCitJbWFnZTkgKkltYWdlOTo6bWFrZUltYWdlOShJ
bWFnZSAqaW1nKQoreworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKHJ4OjpJbWFnZTkqLCBp
bWcpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8cng6OkltYWdlOSo+KGltZyk7Cit9CisKK3Zv
aWQgSW1hZ2U5OjpnZW5lcmF0ZU1pcG1hcChJbWFnZTkgKmRlc3QsIEltYWdlOSAqc291cmNlKQor
eworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2VTdXJmYWNlID0gc291cmNlLT5nZXRTdXJm
YWNlKCk7CisgICAgaWYgKHNvdXJjZVN1cmZhY2UgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0
U3VyZmFjZSA9IGRlc3QtPmdldFN1cmZhY2UoKTsKKyAgICBnZW5lcmF0ZU1pcChkZXN0U3VyZmFj
ZSwgc291cmNlU3VyZmFjZSk7CisKKyAgICBkZXN0LT5tYXJrRGlydHkoKTsKK30KKwordm9pZCBJ
bWFnZTk6OmNvcHlMb2NrYWJsZVN1cmZhY2VzKElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0LCBJRGly
ZWN0M0RTdXJmYWNlOSAqc291cmNlKQoreworICAgIEQzRExPQ0tFRF9SRUNUIHNvdXJjZUxvY2sg
PSB7MH07CisgICAgRDNETE9DS0VEX1JFQ1QgZGVzdExvY2sgPSB7MH07CisgICAgCisgICAgc291
cmNlLT5Mb2NrUmVjdCgmc291cmNlTG9jaywgTlVMTCwgMCk7CisgICAgZGVzdC0+TG9ja1JlY3Qo
JmRlc3RMb2NrLCBOVUxMLCAwKTsKKyAgICAKKyAgICBpZiAoc291cmNlTG9jay5wQml0cyAmJiBk
ZXN0TG9jay5wQml0cykKKyAgICB7CisgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOworICAg
ICAgICBzb3VyY2UtPkdldERlc2MoJmRlc2MpOworCisgICAgICAgIGludCByb3dzID0gZDNkOTo6
SXNDb21wcmVzc2VkRm9ybWF0KGRlc2MuRm9ybWF0KSA/IGRlc2MuSGVpZ2h0IC8gNCA6IGRlc2Mu
SGVpZ2h0OworICAgICAgICBpbnQgYnl0ZXMgPSBkM2Q5OjpDb21wdXRlUm93U2l6ZShkZXNjLkZv
cm1hdCwgZGVzYy5XaWR0aCk7CisgICAgICAgIEFTU0VSVChieXRlcyA8PSBzb3VyY2VMb2NrLlBp
dGNoICYmIGJ5dGVzIDw9IGRlc3RMb2NrLlBpdGNoKTsKKworICAgICAgICBmb3IoaW50IGkgPSAw
OyBpIDwgcm93czsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBtZW1jcHkoKGNoYXIqKWRl
c3RMb2NrLnBCaXRzICsgZGVzdExvY2suUGl0Y2ggKiBpLCAoY2hhciopc291cmNlTG9jay5wQml0
cyArIHNvdXJjZUxvY2suUGl0Y2ggKiBpLCBieXRlcyk7CisgICAgICAgIH0KKworICAgICAgICBz
b3VyY2UtPlVubG9ja1JlY3QoKTsKKyAgICAgICAgZGVzdC0+VW5sb2NrUmVjdCgpOworICAgIH0K
KyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Cit9CisKK2Jvb2wgSW1hZ2U5OjpyZWRlZmluZShyeDo6
UmVuZGVyZXIgKnJlbmRlcmVyLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIGJvb2wgZm9yY2VSZWxlYXNlKQoreworICAgIGlmIChtV2lkdGggIT0g
d2lkdGggfHwKKyAgICAgICAgbUhlaWdodCAhPSBoZWlnaHQgfHwKKyAgICAgICAgbUludGVybmFs
Rm9ybWF0ICE9IGludGVybmFsZm9ybWF0IHx8CisgICAgICAgIGZvcmNlUmVsZWFzZSkKKyAgICB7
CisgICAgICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShyZW5kZXJlcik7
CisKKyAgICAgICAgbVdpZHRoID0gd2lkdGg7CisgICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7Cisg
ICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGludGVybmFsZm9ybWF0OworICAgICAgICAvLyBjb21w
dXRlIHRoZSBkM2QgZm9ybWF0IHRoYXQgd2lsbCBiZSB1c2VkCisgICAgICAgIG1EM0RGb3JtYXQg
PSBtUmVuZGVyZXItPkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQp
OworICAgICAgICBtQWN0dWFsRm9ybWF0ID0gZDNkOV9nbDo6R2V0RXF1aXZhbGVudEZvcm1hdCht
RDNERm9ybWF0KTsKKworICAgICAgICBpZiAobVN1cmZhY2UpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1TdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICBtU3VyZmFjZSA9IE5VTEw7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3ZvaWQgSW1hZ2U5OjpjcmVhdGVTdXJmYWNlKCkKK3sKKyAgICBpZihtU3VyZmFj
ZSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJRGlyZWN0M0RUZXh0dXJl
OSAqbmV3VGV4dHVyZSA9IE5VTEw7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm5ld1N1cmZhY2Ug
PSBOVUxMOworICAgIGNvbnN0IEQzRFBPT0wgcG9vbFRvVXNlID0gRDNEUE9PTF9TWVNURU1NRU07
CisgICAgY29uc3QgRDNERk9STUFUIGQzZEZvcm1hdCA9IGdldEQzREZvcm1hdCgpOworICAgIEFT
U0VSVChkM2RGb3JtYXQgIT0gRDNERk1UX0lOVFopOyAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhl
cmUgZm9yIGRlcHRoIHRleHR1cmVzCisKKyAgICBpZiAobVdpZHRoICE9IDAgJiYgbUhlaWdodCAh
PSAwKQorICAgIHsKKyAgICAgICAgaW50IGxldmVsVG9GZXRjaCA9IDA7CisgICAgICAgIEdMc2l6
ZWkgcmVxdWVzdFdpZHRoID0gbVdpZHRoOworICAgICAgICBHTHNpemVpIHJlcXVlc3RIZWlnaHQg
PSBtSGVpZ2h0OworICAgICAgICBnbDo6TWFrZVZhbGlkU2l6ZSh0cnVlLCBnbDo6SXNDb21wcmVz
c2VkKG1JbnRlcm5hbEZvcm1hdCksICZyZXF1ZXN0V2lkdGgsICZyZXF1ZXN0SGVpZ2h0LCAmbGV2
ZWxUb0ZldGNoKTsKKworICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVy
ZXItPmdldERldmljZSgpOworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVh
dGVUZXh0dXJlKHJlcXVlc3RXaWR0aCwgcmVxdWVzdEhlaWdodCwgbGV2ZWxUb0ZldGNoICsgMSwg
MCwgZDNkRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBvb2xUb1VzZSwgJm5ld1RleHR1cmUsIE5VTEwpOworCisgICAgICAgIGlmIChG
QUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBE
M0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAg
ICAgICAgICBFUlIoIkNyZWF0aW5nIGltYWdlIHN1cmZhY2UgZmFpbGVkLiIpOworICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorCisgICAg
ICAgIG5ld1RleHR1cmUtPkdldFN1cmZhY2VMZXZlbChsZXZlbFRvRmV0Y2gsICZuZXdTdXJmYWNl
KTsKKyAgICAgICAgbmV3VGV4dHVyZS0+UmVsZWFzZSgpOworICAgIH0KKworICAgIG1TdXJmYWNl
ID0gbmV3U3VyZmFjZTsKKyAgICBtRGlydHkgPSBmYWxzZTsKKyAgICBtRDNEUG9vbCA9IHBvb2xU
b1VzZTsKK30KKworSFJFU1VMVCBJbWFnZTk6OmxvY2soRDNETE9DS0VEX1JFQ1QgKmxvY2tlZFJl
Y3QsIGNvbnN0IFJFQ1QgKnJlY3QpCit7CisgICAgY3JlYXRlU3VyZmFjZSgpOworCisgICAgSFJF
U1VMVCByZXN1bHQgPSBEM0RFUlJfSU5WQUxJRENBTEw7CisKKyAgICBpZiAobVN1cmZhY2UpCisg
ICAgeworICAgICAgICByZXN1bHQgPSBtU3VyZmFjZS0+TG9ja1JlY3QobG9ja2VkUmVjdCwgcmVj
dCwgMCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgbURp
cnR5ID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEltYWdl
OTo6dW5sb2NrKCkKK3sKKyAgICBpZiAobVN1cmZhY2UpCisgICAgeworICAgICAgICBIUkVTVUxU
IHJlc3VsdCA9IG1TdXJmYWNlLT5VbmxvY2tSZWN0KCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7CisgICAgfQorfQorCitib29sIEltYWdlOTo6aXNSZW5kZXJhYmxlRm9ybWF0
KCkgY29uc3QKK3sgICAgCisgICAgcmV0dXJuIFRleHR1cmVTdG9yYWdlOTo6SXNUZXh0dXJlRm9y
bWF0UmVuZGVyYWJsZShnZXREM0RGb3JtYXQoKSk7Cit9CisKK0QzREZPUk1BVCBJbWFnZTk6Omdl
dEQzREZvcm1hdCgpIGNvbnN0Cit7CisgICAgLy8gdGhpcyBzaG91bGQgb25seSBoYXBwZW4gaWYg
dGhlIGltYWdlIGhhc24ndCBiZWVuIHJlZGVmaW5lZCBmaXJzdAorICAgIC8vIHdoaWNoIHdvdWxk
IGJlIGEgYnVnIGJ5IHRoZSBjYWxsZXIKKyAgICBBU1NFUlQobUQzREZvcm1hdCAhPSBEM0RGTVRf
VU5LTk9XTik7CisKKyAgICByZXR1cm4gbUQzREZvcm1hdDsKK30KKworSURpcmVjdDNEU3VyZmFj
ZTkgKkltYWdlOTo6Z2V0U3VyZmFjZSgpCit7CisgICAgY3JlYXRlU3VyZmFjZSgpOworCisgICAg
cmV0dXJuIG1TdXJmYWNlOworfQorCit2b2lkIEltYWdlOTo6c2V0TWFuYWdlZFN1cmZhY2UoVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsKQoreworICAgIFRleHR1
cmVTdG9yYWdlOV8yRCAqc3RvcmFnZTkgPSBUZXh0dXJlU3RvcmFnZTlfMkQ6Om1ha2VUZXh0dXJl
U3RvcmFnZTlfMkQoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAgIHNldE1hbmFn
ZWRTdXJmYWNlKHN0b3JhZ2U5LT5nZXRTdXJmYWNlTGV2ZWwobGV2ZWwsIGZhbHNlKSk7Cit9CisK
K3ZvaWQgSW1hZ2U5OjpzZXRNYW5hZ2VkU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1
YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2ZWwpCit7CisgICAgVGV4dHVyZVN0b3JhZ2U5
X0N1YmUgKnN0b3JhZ2U5ID0gVGV4dHVyZVN0b3JhZ2U5X0N1YmU6Om1ha2VUZXh0dXJlU3RvcmFn
ZTlfQ3ViZShzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CisgICAgc2V0TWFuYWdlZFN1
cmZhY2Uoc3RvcmFnZTktPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWCArIGZhY2UsIGxldmVsLCBmYWxzZSkpOworfQorCit2b2lkIEltYWdlOTo6c2V0TWFu
YWdlZFN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UpCit7CisgICAgRDNEU1VSRkFD
RV9ERVNDIGRlc2M7CisgICAgc3VyZmFjZS0+R2V0RGVzYygmZGVzYyk7CisgICAgQVNTRVJUKGRl
c2MuUG9vbCA9PSBEM0RQT09MX01BTkFHRUQpOworCisgICAgaWYgKChHTHNpemVpKWRlc2MuV2lk
dGggPT0gbVdpZHRoICYmIChHTHNpemVpKWRlc2MuSGVpZ2h0ID09IG1IZWlnaHQpCisgICAgewor
ICAgICAgICBpZiAobVN1cmZhY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvcHlMb2NrYWJs
ZVN1cmZhY2VzKHN1cmZhY2UsIG1TdXJmYWNlKTsKKyAgICAgICAgICAgIG1TdXJmYWNlLT5SZWxl
YXNlKCk7CisgICAgICAgIH0KKworICAgICAgICBtU3VyZmFjZSA9IHN1cmZhY2U7CisgICAgICAg
IG1EM0RQb29sID0gZGVzYy5Qb29sOworICAgIH0KK30KKworYm9vbCBJbWFnZTk6OnVwZGF0ZVN1
cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkK
K3sKKyAgICBBU1NFUlQoZ2V0U3VyZmFjZSgpICE9IE5VTEwpOworICAgIFRleHR1cmVTdG9yYWdl
OV8yRCAqc3RvcmFnZTkgPSBUZXh0dXJlU3RvcmFnZTlfMkQ6Om1ha2VUZXh0dXJlU3RvcmFnZTlf
MkQoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAgIHJldHVybiB1cGRhdGVTdXJm
YWNlKHN0b3JhZ2U5LT5nZXRTdXJmYWNlTGV2ZWwobGV2ZWwsIHRydWUpLCB4b2Zmc2V0LCB5b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0KTsKK30KKworYm9vbCBJbWFnZTk6OnVwZGF0ZVN1cmZhY2UoVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCkKK3sKKyAgICBBU1NFUlQoZ2V0U3VyZmFjZSgpICE9IE5VTEwpOworICAgIFRleHR1cmVTdG9y
YWdlOV9DdWJlICpzdG9yYWdlOSA9IFRleHR1cmVTdG9yYWdlOV9DdWJlOjptYWtlVGV4dHVyZVN0
b3JhZ2U5X0N1YmUoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAgIHJldHVybiB1
cGRhdGVTdXJmYWNlKHN0b3JhZ2U5LT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCwgdHJ1ZSksIHhvZmZzZXQsIHlvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQpOworfQorCitib29sIEltYWdlOTo6dXBkYXRlU3VyZmFjZShJRGlyZWN0M0RT
dXJmYWNlOSAqZGVzdFN1cmZhY2UsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIGlmICghZGVzdFN1cmZhY2UpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2VTdXJmYWNl
ID0gZ2V0U3VyZmFjZSgpOworCisgICAgaWYgKHNvdXJjZVN1cmZhY2UgJiYgc291cmNlU3VyZmFj
ZSAhPSBkZXN0U3VyZmFjZSkKKyAgICB7CisgICAgICAgIFJFQ1QgcmVjdDsKKyAgICAgICAgcmVj
dC5sZWZ0ID0geG9mZnNldDsKKyAgICAgICAgcmVjdC50b3AgPSB5b2Zmc2V0OworICAgICAgICBy
ZWN0LnJpZ2h0ID0geG9mZnNldCArIHdpZHRoOworICAgICAgICByZWN0LmJvdHRvbSA9IHlvZmZz
ZXQgKyBoZWlnaHQ7CisKKyAgICAgICAgUE9JTlQgcG9pbnQgPSB7cmVjdC5sZWZ0LCByZWN0LnRv
cH07CisKKyAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXRE
ZXZpY2UoKTsKKworICAgICAgICBpZiAobUQzRFBvb2wgPT0gRDNEUE9PTF9NQU5BR0VEKQorICAg
ICAgICB7CisgICAgICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKKyAgICAgICAgICAgIHNv
dXJjZVN1cmZhY2UtPkdldERlc2MoJmRlc2MpOworCisgICAgICAgICAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqc3VyZiA9IDA7CisgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3Jl
YXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBkZXNjLkZv
cm1hdCwgRDNEUE9PTF9TWVNURU1NRU0sICZzdXJmLCBOVUxMKTsKKworICAgICAgICAgICAgaWYg
KFNVQ0NFRURFRChyZXN1bHQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvcHlM
b2NrYWJsZVN1cmZhY2VzKHN1cmYsIHNvdXJjZVN1cmZhY2UpOworICAgICAgICAgICAgICAgIHJl
c3VsdCA9IGRldmljZS0+VXBkYXRlU3VyZmFjZShzdXJmLCAmcmVjdCwgZGVzdFN1cmZhY2UsICZw
b2ludCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAg
ICAgICAgICAgICBzdXJmLT5SZWxlYXNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBVcGRhdGVTdXJmYWNlOiBzb3Vy
Y2UgbXVzdCBiZSBTWVNURU1NRU0sIGRlc3QgbXVzdCBiZSBERUZBVUxUIHBvb2xzIAorICAgICAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPlVwZGF0ZVN1cmZhY2Uoc291cmNlU3VyZmFj
ZSwgJnJlY3QsIGRlc3RTdXJmYWNlLCAmcG9pbnQpOworICAgICAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChyZXN1bHQpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGRlc3RTdXJmYWNlLT5SZWxl
YXNlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIFN0b3JlIHRoZSBwaXhlbCByZWN0YW5n
bGUgZGVzaWduYXRlZCBieSB4b2Zmc2V0LHlvZmZzZXQsd2lkdGgsaGVpZ2h0IHdpdGggcGl4ZWxz
IHN0b3JlZCBhcyBmb3JtYXQvdHlwZSBhdCBpbnB1dAorLy8gaW50byB0aGUgdGFyZ2V0IHBpeGVs
IHJlY3RhbmdsZS4KK3ZvaWQgSW1hZ2U5Ojpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAg
ICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0KQoreworICAgIFJF
Q1QgbG9ja1JlY3QgPQorICAgIHsKKyAgICAgICAgeG9mZnNldCwgeW9mZnNldCwKKyAgICAgICAg
eG9mZnNldCArIHdpZHRoLCB5b2Zmc2V0ICsgaGVpZ2h0CisgICAgfTsKKworICAgIEQzRExPQ0tF
RF9SRUNUIGxvY2tlZDsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGxvY2soJmxvY2tlZCwgJmxvY2tS
ZWN0KTsKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisKKyAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSBnbDo6Q29tcHV0ZVBpdGNoKHdpZHRo
LCBtSW50ZXJuYWxGb3JtYXQsIHVucGFja0FsaWdubWVudCk7CisKKyAgICBzd2l0Y2ggKG1JbnRl
cm5hbEZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEdMX0FMUEhBOF9FWFQ6CisgICAgICAgIGlm
IChnbDo6c3VwcG9ydHNTU0UyKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvYWRBbHBoYURh
dGFUb0JHUkFTU0UyKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0
Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBsb2FkQWxwaGFEYXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRThfRVhUOgorICAgICAgICBsb2FkTHVtaW5h
bmNlRGF0YVRvTmF0aXZlT3JCR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBs
b2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cywgZ2V0RDNERm9ybWF0KCkgPT0gRDNERk1UX0w4KTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0FMUEhBMzJGX0VYVDoKKyAgICAgICAgbG9h
ZEFscGhhRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBs
b2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0UzMkZfRVhUOgorICAgICAgICBsb2FkTHVtaW5hbmNlRmxvYXREYXRhVG9SR0JB
KHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5w
Qml0cyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9BTFBIQTE2Rl9FWFQ6CisgICAg
ICAgIGxvYWRBbHBoYUhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6CisgICAgICAgIGxvYWRMdW1pbmFuY2VIYWxm
RmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQu
UGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MVU1J
TkFOQ0U4X0FMUEhBOF9FWFQ6CisgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYURhdGFUb05hdGl2
ZU9yQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBs
b2NrZWQucEJpdHMsIGdldEQzREZvcm1hdCgpID09IEQzREZNVF9BOEw4KTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQ6CisgICAgICAgIGxvYWRM
dW1pbmFuY2VBbHBoYUZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOworICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVDoKKyAgICAgICAgbG9hZEx1bWluYW5jZUFs
cGhhSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwg
bG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfUkdCOF9PRVM6CisgICAgICAgIGxvYWRSR0JVQnl0ZURhdGFUb0JHUlgod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JHQjU2NToKKyAgICAgICAgbG9hZFJHQjU2NURhdGFU
b0JHUkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9j
a2VkLnBCaXRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JHQkE4X09FUzoKKyAg
ICAgICAgaWYgKGdsOjpzdXBwb3J0c1NTRTIoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbG9h
ZFJHQkFVQnl0ZURhdGFUb0JHUkFTU0UyKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0
LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICBsb2FkUkdCQVVCeXRlRGF0YVRvQkdSQSh3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9SR0JBNDoKKyAgICAgICAgbG9h
ZFJHQkE0NDQ0RGF0YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9j
a2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
UkdCNV9BMToKKyAgICAgICAgbG9hZFJHQkE1NTUxRGF0YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBp
bnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOworICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfQkdSQThfRVhUOgorICAgICAgICBsb2FkQkdSQURhdGFUb0JH
UkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2Vk
LnBCaXRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAvLyBmbG9hdCB0ZXh0dXJlcyBhcmUgY29u
dmVydGVkIHRvIFJHQkEsIG5vdCBCR1JBLCBhcyB0aGV5J3JlIHN0b3JlZCB0aGF0IHdheSBpbiBE
M0QKKyAgICAgIGNhc2UgR0xfUkdCMzJGX0VYVDoKKyAgICAgICAgbG9hZFJHQkZsb2F0RGF0YVRv
UkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2Nr
ZWQucEJpdHMpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUkdCMTZGX0VYVDoKKyAg
ICAgICAgbG9hZFJHQkhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX1JHQkEzMkZfRVhUOgorICAgICAgICBsb2FkUkdCQUZsb2F0RGF0YVRvUkdC
QSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQu
cEJpdHMpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUkdCQTE2Rl9FWFQ6CisgICAg
ICAgIGxvYWRSR0JBSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNo
LCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOworICAgICAgICBicmVhazsKKyAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IAorICAgIH0KKworICAgIHVubG9jaygpOworfQor
Cit2b2lkIEltYWdlOTo6bG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dCkKK3sKKyAgICBBU1NFUlQoeG9mZnNldCAl
IDQgPT0gMCk7CisgICAgQVNTRVJUKHlvZmZzZXQgJSA0ID09IDApOworCisgICAgUkVDVCBsb2Nr
UmVjdCA9IHsKKyAgICAgICAgeG9mZnNldCwgeW9mZnNldCwKKyAgICAgICAgeG9mZnNldCArIHdp
ZHRoLCB5b2Zmc2V0ICsgaGVpZ2h0CisgICAgfTsKKworICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tl
ZDsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGxvY2soJmxvY2tlZCwgJmxvY2tSZWN0KTsKKyAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
R0xzaXplaSBpbnB1dFNpemUgPSBnbDo6Q29tcHV0ZUNvbXByZXNzZWRTaXplKHdpZHRoLCBoZWln
aHQsIG1JbnRlcm5hbEZvcm1hdCk7CisgICAgR0xzaXplaSBpbnB1dFBpdGNoID0gZ2w6OkNvbXB1
dGVDb21wcmVzc2VkUGl0Y2god2lkdGgsIG1JbnRlcm5hbEZvcm1hdCk7CisgICAgaW50IHJvd3Mg
PSBpbnB1dFNpemUgLyBpbnB1dFBpdGNoOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsg
KytpKQorICAgIHsKKyAgICAgICAgbWVtY3B5KCh2b2lkKikoKEJZVEUqKWxvY2tlZC5wQml0cyAr
IGkgKiBsb2NrZWQuUGl0Y2gpLCAodm9pZCopKChCWVRFKilpbnB1dCArIGkgKiBpbnB1dFBpdGNo
KSwgaW5wdXRQaXRjaCk7CisgICAgfQorCisgICAgdW5sb2NrKCk7Cit9CisKKy8vIFRoaXMgaW1w
bGVtZW50cyBnbENvcHlUZXhbU3ViXUltYWdlMkQgZm9yIG5vbi1yZW5kZXJhYmxlIGludGVybmFs
IHRleHR1cmUgZm9ybWF0cyBhbmQgaW5jb21wbGV0ZSB0ZXh0dXJlcwordm9pZCBJbWFnZTk6OmNv
cHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAqc291cmNlKQoreworICAg
IFJlbmRlclRhcmdldDkgKnJlbmRlclRhcmdldCA9IE5VTEw7CisgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKnN1cmZhY2UgPSBOVUxMOworICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0g
c291cmNlLT5nZXRDb2xvcmJ1ZmZlcigwKTsKKworICAgIGlmIChjb2xvcmJ1ZmZlcikKKyAgICB7
CisgICAgICAgIHJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDk6Om1ha2VSZW5kZXJUYXJnZXQ5
KGNvbG9yYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSk7CisgICAgfQorICAgIAorICAgIGlmIChy
ZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBzdXJmYWNlID0gcmVuZGVyVGFyZ2V0LT5nZXRT
dXJmYWNlKCk7CisgICAgfQorCisgICAgaWYgKCFzdXJmYWNlKQorICAgIHsKKyAgICAgICAgRVJS
KCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQuIik7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorCisgICAgSURpcmVjdDNERGV2
aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpyZW5kZXJUYXJnZXREYXRhID0gTlVMTDsKKyAgICBEM0RTVVJGQUNFX0RFU0MgZGVz
Y3JpcHRpb247CisgICAgc3VyZmFjZS0+R2V0RGVzYygmZGVzY3JpcHRpb24pOworICAgIAorICAg
IEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVPZmZzY3JlZW5QbGFpblN1cmZhY2UoZGVz
Y3JpcHRpb24uV2lkdGgsIGRlc2NyaXB0aW9uLkhlaWdodCwgZGVzY3JpcHRpb24uRm9ybWF0LCBE
M0RQT09MX1NZU1RFTU1FTSwgJnJlbmRlclRhcmdldERhdGEsIE5VTEwpOworCisgICAgaWYgKEZB
SUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG1hdGNo
aW5nIGRlc3RpbmF0aW9uIHN1cmZhY2UuIik7CisgICAgICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsK
KyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisKKyAg
ICByZXN1bHQgPSBkZXZpY2UtPkdldFJlbmRlclRhcmdldERhdGEoc3VyZmFjZSwgcmVuZGVyVGFy
Z2V0RGF0YSk7CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBFUlIo
IkdldFJlbmRlclRhcmdldERhdGEgdW5leHBlY3RlZGx5IGZhaWxlZC4iKTsKKyAgICAgICAgcmVu
ZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgpOworICAgICAgICBzdXJmYWNlLT5SZWxlYXNlKCk7Cisg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorCisgICAg
UkVDVCBzb3VyY2VSZWN0ID0ge3gsIHksIHggKyB3aWR0aCwgeSArIGhlaWdodH07CisgICAgUkVD
VCBkZXN0UmVjdCA9IHt4b2Zmc2V0LCB5b2Zmc2V0LCB4b2Zmc2V0ICsgd2lkdGgsIHlvZmZzZXQg
KyBoZWlnaHR9OworCisgICAgRDNETE9DS0VEX1JFQ1Qgc291cmNlTG9jayA9IHswfTsKKyAgICBy
ZXN1bHQgPSByZW5kZXJUYXJnZXREYXRhLT5Mb2NrUmVjdCgmc291cmNlTG9jaywgJnNvdXJjZVJl
Y3QsIDApOworCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJG
YWlsZWQgdG8gbG9jayB0aGUgc291cmNlIHN1cmZhY2UgKHJlY3RhbmdsZSBtaWdodCBiZSBpbnZh
bGlkKS4iKTsKKyAgICAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgpOworICAgICAgICBz
dXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorCisgICAgRDNETE9DS0VEX1JFQ1QgZGVzdExvY2sgPSB7MH07CisgICAg
cmVzdWx0ID0gbG9jaygmZGVzdExvY2ssICZkZXN0UmVjdCk7CisgICAgCisgICAgaWYgKEZBSUxF
RChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gbG9jayB0aGUgZGVzdGlu
YXRpb24gc3VyZmFjZSAocmVjdGFuZ2xlIG1pZ2h0IGJlIGludmFsaWQpLiIpOworICAgICAgICBy
ZW5kZXJUYXJnZXREYXRhLT5VbmxvY2tSZWN0KCk7CisgICAgICAgIHJlbmRlclRhcmdldERhdGEt
PlJlbGVhc2UoKTsKKyAgICAgICAgc3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KKworICAgIGlmIChkZXN0TG9jay5w
Qml0cyAmJiBzb3VyY2VMb2NrLnBCaXRzKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciAq
c291cmNlID0gKHVuc2lnbmVkIGNoYXIqKXNvdXJjZUxvY2sucEJpdHM7CisgICAgICAgIHVuc2ln
bmVkIGNoYXIgKmRlc3QgPSAodW5zaWduZWQgY2hhciopZGVzdExvY2sucEJpdHM7CisKKyAgICAg
ICAgc3dpdGNoIChkZXNjcmlwdGlvbi5Gb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNl
IEQzREZNVF9YOFI4RzhCODoKKyAgICAgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKKyAgICAg
ICAgICAgIHN3aXRjaChnZXREM0RGb3JtYXQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6CisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhH
OEI4OgorICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2Us
IDQgKiB3aWR0aCk7CisKKyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2su
UGl0Y2g7CisgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEQzREZNVF9MODoKKyAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5
KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAw
OyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgZGVzdFt4XSA9IHNvdXJjZVt4ICogNCArIDJdOworICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7Cisg
ICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEQzREZNVF9B
OEw4OgorICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3
aWR0aDsgeCsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0W3ggKiAyICsgMF0gPSBzb3VyY2VbeCAqIDQgKyAyXTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RbeCAqIDIgKyAxXSA9IHNvdXJjZVt4ICogNCArIDNdOworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0
Y2g7CisgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6CisgICAgICAgICAgICBz
d2l0Y2goZ2V0RDNERm9ybWF0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2Ug
RDNERk1UX1g4UjhHOEI4OgorICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWln
aHQ7IHkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvcihpbnQg
eCA9IDA7IHggPCB3aWR0aDsgeCsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2IgPSAoKHVuc2lnbmVkIHNob3J0Kilzb3Vy
Y2UpW3hdOworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZWQgPSAocmdi
ICYgMHhGODAwKSA+PiA4OworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBn
cmVlbiA9IChyZ2IgJiAweDA3RTApID4+IDM7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBjaGFyIGJsdWUgPSAocmdiICYgMHgwMDFGKSA8PCAzOworICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdFt4ICsgMF0gPSBibHVlIHwgKGJsdWUgPj4gNSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0W3ggKyAxXSA9IGdyZWVuIHwgKGdyZWVuID4+IDYpOworICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdFt4ICsgMl0gPSByZWQgfCAocmVkID4+IDUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdFt4ICsgM10gPSAweEZGOworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7CisgICAgICAg
ICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEQzREZNVF9MODoKKyAg
ICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgr
KykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgY2hhciByZWQgPSBzb3VyY2VbeCAqIDIgKyAxXSAmIDB4Rjg7CisgICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0W3hdID0gcmVkIHwgKHJlZCA+PiA1KTsKKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOworICAg
ICAgICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6CisgICAgICAgICAgICBzd2l0Y2go
Z2V0RDNERm9ybWF0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRDNERk1U
X1g4UjhHOEI4OgorICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkr
KykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7
IHggPCB3aWR0aDsgeCsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBzaG9ydCBhcmdiID0gKCh1bnNpZ25lZCBzaG9ydCopc291cmNlKVt4
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVkID0gKGFyZ2IgJiAw
eDdDMDApID4+IDc7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGdyZWVu
ID0gKGFyZ2IgJiAweDAzRTApID4+IDI7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBjaGFyIGJsdWUgPSAoYXJnYiAmIDB4MDAxRikgPDwgMzsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc3RbeCArIDBdID0gYmx1ZSB8IChibHVlID4+IDUpOworICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdFt4ICsgMV0gPSBncmVlbiB8IChncmVlbiA+PiA1KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RbeCArIDJdID0gcmVkIHwgKHJlZCA+PiA1KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RbeCArIDNdID0gMHhGRjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOworICAgICAgICAg
ICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6
CisgICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRo
OyB4KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIHNob3J0IGFyZ2IgPSAoKHVuc2lnbmVkIHNob3J0Kilzb3VyY2UpW3hdOworICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZWQgPSAoYXJnYiAmIDB4N0MwMCkgPj4g
NzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZ3JlZW4gPSAoYXJnYiAm
IDB4MDNFMCkgPj4gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYmx1
ZSA9IChhcmdiICYgMHgwMDFGKSA8PCAzOworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgY2hhciBhbHBoYSA9IChzaWduZWQgc2hvcnQpYXJnYiA+PiAxNTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RbeCArIDBdID0gYmx1ZSB8IChibHVlID4+IDUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdFt4ICsgMV0gPSBncmVlbiB8IChncmVlbiA+PiA1KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RbeCArIDJdID0gcmVkIHwgKHJlZCA+PiA1KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RbeCArIDNdID0gYWxwaGE7CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5QaXRjaDsKKyAg
ICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0w4
OgorICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0
aDsgeCsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBjaGFyIHJlZCA9IHNvdXJjZVt4ICogMiArIDFdICYgMHg3QzsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3RbeF0gPSAocmVkIDw8IDEpIHwgKHJlZCA+PiA0KTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2Nr
LlBpdGNoOworICAgICAgICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBEM0RGTVRfQThMODoKKyAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0
OyB5KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHgg
PSAwOyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZWQgPSBzb3VyY2VbeCAqIDIgKyAxXSAmIDB4N0M7
CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKiAyICsgMF0gPSAocmVkIDw8IDEpIHwg
KHJlZCA+PiA0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCAqIDIgKyAxXSA9IChz
aWduZWQgY2hhcilzb3VyY2VbeCAqIDIgKyAxXSA+PiA3OworICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7CisgICAg
ICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHVubG9jaygpOworICAgIHJlbmRlclRhcmdldERhdGEtPlVubG9j
a1JlY3QoKTsKKworICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsKKyAgICBzdXJmYWNl
LT5SZWxlYXNlKCk7CisKKyAgICBtRGlydHkgPSB0cnVlOworfQorCit9ClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ltYWdlOS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ltYWdlOS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJmYmJjYTMx
MjQzZDJhYzQ3ZDU3NDhkNWExYzdmYWY3ZDVjYTgyMDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW1hZ2U5LmgK
QEAgLTAsMCArMSw3OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gSW1hZ2U5Lmg6IERlZmlu
ZXMgdGhlIHJ4OjpJbWFnZTkgY2xhc3MsIHdoaWNoIGFjdHMgYXMgdGhlIGludGVyZmFjZSB0bwor
Ly8gdGhlIGFjdHVhbCB1bmRlcmx5aW5nIHN1cmZhY2VzIG9mIGEgVGV4dHVyZS4KKworI2lmbmRl
ZiBMSUJHTEVTVjJfUkVOREVSRVJfSU1BR0U5X0hfCisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJF
Ul9JTUFHRTlfSF8KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZS5oIgorI2lu
Y2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCituYW1lc3BhY2UgZ2wKK3sKK2NsYXNzIEZyYW1lYnVm
ZmVyOworfQorCituYW1lc3BhY2UgcngKK3sKK2NsYXNzIFJlbmRlcmVyOworY2xhc3MgUmVuZGVy
ZXI5OworY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRDsKK2NsYXNzIFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlQ3ViZTsKKworY2xhc3MgSW1hZ2U5IDogcHVibGljIEltYWdlCit7CisgIHB1
YmxpYzoKKyAgICBJbWFnZTkoKTsKKyAgICB+SW1hZ2U5KCk7CisKKyAgICBzdGF0aWMgSW1hZ2U5
ICptYWtlSW1hZ2U5KEltYWdlICppbWcpOworCisgICAgc3RhdGljIHZvaWQgZ2VuZXJhdGVNaXBt
YXAoSW1hZ2U5ICpkZXN0LCBJbWFnZTkgKnNvdXJjZSk7CisgICAgc3RhdGljIHZvaWQgZ2VuZXJh
dGVNaXAoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJmYWNlLCBJRGlyZWN0M0RTdXJmYWNlOSAq
c291cmNlU3VyZmFjZSk7CisgICAgc3RhdGljIHZvaWQgY29weUxvY2thYmxlU3VyZmFjZXMoSURp
cmVjdDNEU3VyZmFjZTkgKmRlc3QsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UpOworCisgICAg
dmlydHVhbCBib29sIHJlZGVmaW5lKFJlbmRlcmVyICpyZW5kZXJlciwgR0xpbnQgaW50ZXJuYWxm
b3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBib29sIGZvcmNlUmVsZWFzZSk7
CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJhYmxlRm9ybWF0KCkgY29uc3Q7CisgICAgRDNE
Rk9STUFUIGdldEQzREZvcm1hdCgpIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIGlzRGlydHko
KSBjb25zdCB7cmV0dXJuIG1TdXJmYWNlICYmIG1EaXJ0eTt9CisgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKmdldFN1cmZhY2UoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRNYW5hZ2VkU3VyZmFjZShU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwpOworICAgIHZpcnR1
YWwgdm9pZCBzZXRNYW5hZ2VkU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0
b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2ZWwpOworICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVTdXJm
YWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwor
ICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3Vi
ZSAqc3RvcmFnZSwgaW50IGZhY2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCisgICAgdmlydHVhbCB2b2lk
IGxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBj
b25zdCB2b2lkICppbnB1dCk7CisgICAgdmlydHVhbCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0
KTsKKworICAgIHZpcnR1YWwgdm9pZCBjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBnbDo6RnJh
bWVidWZmZXIgKnNvdXJjZSk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9B
U1NJR04oSW1hZ2U5KTsKKworICAgIHZvaWQgY3JlYXRlU3VyZmFjZSgpOworICAgIHZvaWQgc2V0
TWFuYWdlZFN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UpOworICAgIGJvb2wgdXBk
YXRlU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCisgICAgSFJFU1VMVCBs
b2NrKEQzRExPQ0tFRF9SRUNUICpsb2NrZWRSZWN0LCBjb25zdCBSRUNUICpyZWN0KTsKKyAgICB2
b2lkIHVubG9jaygpOworICAgIAorICAgIFJlbmRlcmVyOSAqbVJlbmRlcmVyOworCisgICAgRDNE
UE9PTCBtRDNEUG9vbDsgICAvLyBjYW4gb25seSBiZSBEM0RQT09MX1NZU1RFTU1FTSBvciBEM0RQ
T09MX01BTkFHRUQgc2luY2UgaXQgbmVlZHMgdG8gYmUgbG9ja2FibGUuCisgICAgRDNERk9STUFU
IG1EM0RGb3JtYXQ7CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVN1cmZhY2U7Cit9OworfQor
CisjZW5kaWYgICAvLyBMSUJHTEVTVjJfUkVOREVSRVJfSU1BR0U5X0hfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW5kZXhC
dWZmZXI5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9JbmRleEJ1ZmZlcjkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdjYjVkMTNhMThiNzQ4MDBjMGNh
NDNmNzhiZDgxNWU5NDk5OWQ0MWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW5kZXhCdWZmZXI5LmNwcApAQCAt
MCwwICsxLDIwNyBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisvLyBJbmRleGZmZXI5LmNwcDogRGVmaW5lcyB0aGUgRDNEOSBJbmRleEJ1ZmZlciBpbXBs
ZW1lbnRhdGlvbi4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0luZGV4QnVm
ZmVyOS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oIgor
CituYW1lc3BhY2UgcngKK3sKKworSW5kZXhCdWZmZXI5OjpJbmRleEJ1ZmZlcjkoUmVuZGVyZXI5
ICpjb25zdCByZW5kZXJlcikgOiBtUmVuZGVyZXIocmVuZGVyZXIpCit7CisgICAgbUluZGV4QnVm
ZmVyID0gTlVMTDsKKyAgICBtQnVmZmVyU2l6ZSA9IDA7CisgICAgbUluZGV4VHlwZSA9IDA7Cisg
ICAgbUR5bmFtaWMgPSBmYWxzZTsKK30KKworSW5kZXhCdWZmZXI5Ojp+SW5kZXhCdWZmZXI5KCkK
K3sKKyAgICBpZiAobUluZGV4QnVmZmVyKQorICAgIHsKKyAgICAgICAgbUluZGV4QnVmZmVyLT5S
ZWxlYXNlKCk7CisgICAgICAgIG1JbmRleEJ1ZmZlciA9IE5VTEw7CisgICAgfQorfQorCitib29s
IEluZGV4QnVmZmVyOTo6aW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSwgR0xlbnVt
IGluZGV4VHlwZSwgYm9vbCBkeW5hbWljKQoreworICAgIGlmIChtSW5kZXhCdWZmZXIpCisgICAg
eworICAgICAgICBtSW5kZXhCdWZmZXItPlJlbGVhc2UoKTsKKyAgICAgICAgbUluZGV4QnVmZmVy
ID0gTlVMTDsKKyAgICB9CisKKyAgICB1cGRhdGVTZXJpYWwoKTsKKworICAgIGlmIChidWZmZXJT
aXplID4gMCkKKyAgICB7CisgICAgICAgIEQzREZPUk1BVCBmb3JtYXQ7CisgICAgICAgIGlmIChp
bmRleFR5cGUgPT0gR0xfVU5TSUdORURfU0hPUlQgfHwgaW5kZXhUeXBlID09IEdMX1VOU0lHTkVE
X0JZVEUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvcm1hdCA9IEQzREZNVF9JTkRFWDE2Owor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGluZGV4VHlwZSA9PSBHTF9VTlNJR05FRF9JTlQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtUmVuZGVyZXItPmdldDMyQml0SW5kZXhTdXBw
b3J0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9ybWF0ID0gRDNERk1UX0lO
REVYMzI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgRVJSKCJBdHRlbXB0ZWQgdG8gY3JlYXRlIGEgMzItYml0IGluZGV4IGJ1
ZmZlciBidXQgcmVuZGVyZXIgZG9lcyBub3Qgc3VwcG9ydCAzMi1iaXQgaW5kaWNlcy4iKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkludmFsaWQgaW5kZXggdHlw
ZSAldS4iLCBpbmRleFR5cGUpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisKKyAgICAgICAgRFdPUkQgdXNhZ2VGbGFncyA9IEQzRFVTQUdFX1dSSVRFT05MWTsKKyAgICAg
ICAgaWYgKGR5bmFtaWMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVzYWdlRmxhZ3MgfD0gRDNE
VVNBR0VfRFlOQU1JQzsKKyAgICAgICAgfQorCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVJl
bmRlcmVyLT5jcmVhdGVJbmRleEJ1ZmZlcihidWZmZXJTaXplLCB1c2FnZUZsYWdzLCBmb3JtYXQs
ICZtSW5kZXhCdWZmZXIpOworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIGNyZWF0ZSBhbiBpbmRleCBidWZmZXIgb2Ygc2l6
ZSAldSwgcmVzdWx0OiAweCUwOHguIiwgbUJ1ZmZlclNpemUsIHJlc3VsdCk7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtQnVmZmVyU2l6ZSA9IGJ1
ZmZlclNpemU7CisgICAgbUluZGV4VHlwZSA9IGluZGV4VHlwZTsKKyAgICBtRHluYW1pYyA9IGR5
bmFtaWM7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworSW5kZXhCdWZmZXI5ICpJbmRleEJ1ZmZl
cjk6Om1ha2VJbmRleEJ1ZmZlcjkoSW5kZXhCdWZmZXIgKmluZGV4QnVmZmVyKQoreworICAgIEFT
U0VSVChIQVNfRFlOQU1JQ19UWVBFKEluZGV4QnVmZmVyOSosIGluZGV4QnVmZmVyKSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEluZGV4QnVmZmVyOSo+KGluZGV4QnVmZmVyKTsKK30KKworYm9v
bCBJbmRleEJ1ZmZlcjk6Om1hcEJ1ZmZlcih1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBp
bnQgc2l6ZSwgdm9pZCoqIG91dE1hcHBlZE1lbW9yeSkKK3sKKyAgICBpZiAobUluZGV4QnVmZmVy
KQorICAgIHsKKyAgICAgICAgRFdPUkQgbG9ja0ZsYWdzID0gbUR5bmFtaWMgPyBEM0RMT0NLX05P
T1ZFUldSSVRFIDogMDsKKworICAgICAgICB2b2lkICptYXBQdHIgPSBOVUxMOworICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IG1JbmRleEJ1ZmZlci0+TG9jayhvZmZzZXQsIHNpemUsICZtYXBQdHIs
IGxvY2tGbGFncyk7CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAg
ICAgICAgICAgRVJSKCJJbmRleCBidWZmZXIgbG9jayBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgi
LCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAg
ICAgKm91dE1hcHBlZE1lbW9yeSA9IG1hcFB0cjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEVSUigiSW5kZXggYnVmZmVyIG5vdCBpbml0aWFs
aXplZC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJbmRleEJ1
ZmZlcjk6OnVubWFwQnVmZmVyKCkKK3sKKyAgICBpZiAobUluZGV4QnVmZmVyKQorICAgIHsKKyAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBtSW5kZXhCdWZmZXItPlVubG9jaygpOworICAgICAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiSW5kZXggYnVm
ZmVyIHVubG9jayBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgiLCByZXN1bHQpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEVSUigiSW5kZXggYnVmZmVyIG5vdCBpbml0aWFs
aXplZC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworR0xlbnVtIEluZGV4
QnVmZmVyOTo6Z2V0SW5kZXhUeXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUluZGV4VHlwZTsK
K30KKwordW5zaWduZWQgaW50IEluZGV4QnVmZmVyOTo6Z2V0QnVmZmVyU2l6ZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1CdWZmZXJTaXplOworfQorCitib29sIEluZGV4QnVmZmVyOTo6c2V0U2l6
ZSh1bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSwgR0xlbnVtIGluZGV4VHlwZSkKK3sKKyAgICBpZiAo
YnVmZmVyU2l6ZSA+IG1CdWZmZXJTaXplIHx8IGluZGV4VHlwZSAhPSBtSW5kZXhUeXBlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGluaXRpYWxpemUoYnVmZmVyU2l6ZSwgaW5kZXhUeXBlLCBtRHlu
YW1pYyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KK30KKworYm9vbCBJbmRleEJ1ZmZlcjk6OmRpc2NhcmQoKQoreworICAgIGlmIChtSW5kZXhC
dWZmZXIpCisgICAgeworICAgICAgICB2b2lkICpkdW1teTsKKyAgICAgICAgSFJFU1VMVCByZXN1
bHQ7CisKKyAgICAgICAgcmVzdWx0ID0gbUluZGV4QnVmZmVyLT5Mb2NrKDAsIDEsICZkdW1teSwg
RDNETE9DS19ESVNDQVJEKTsKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7
CisgICAgICAgICAgICBFUlIoIkRpc2NhcmQgbG9jayBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgi
LCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAg
ICAgcmVzdWx0ID0gbUluZGV4QnVmZmVyLT5VbmxvY2soKTsKKyAgICAgICAgaWYgKEZBSUxFRChy
ZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkRpc2NhcmQgdW5sb2NrIGZhaWxl
ZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgRVJSKCJJbmRleCBidWZmZXIgbm90IGluaXRpYWxpemVkLiIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitEM0RGT1JNQVQgSW5kZXhCdWZmZXI5OjpnZXRJ
bmRleEZvcm1hdCgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtSW5kZXhUeXBlKQorICAgIHsKKyAg
ICAgIGNhc2UgR0xfVU5TSUdORURfQllURTogICAgcmV0dXJuIEQzREZNVF9JTkRFWDE2OworICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDogICByZXR1cm4gRDNERk1UX0lOREVYMTY7CisgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0lOVDogICAgIHJldHVybiBEM0RGTVRfSU5ERVgzMjsKKyAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgcmV0dXJuIEQzREZNVF9VTktOT1dOOworICAgIH0K
K30KKworSURpcmVjdDNESW5kZXhCdWZmZXI5ICogSW5kZXhCdWZmZXI5OjpnZXRCdWZmZXIoKSBj
b25zdAoreworICAgIHJldHVybiBtSW5kZXhCdWZmZXI7Cit9CisKK30KXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvSW5kZXhCdWZmZXI5LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW5kZXhCdWZmZXI5LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNjgwMTg2NzUzMjQ1NTczYjM3YTg4ZDlhNWRkYWY1YzQwNzRlMGUyNwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
OS9JbmRleEJ1ZmZlcjkuaApAQCAtMCwwICsxLDUzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisv
LyBJbmRleGZmZXI5Lmg6IERlZmluZXMgdGhlIEQzRDkgSW5kZXhCdWZmZXIgaW1wbGVtZW50YXRp
b24uCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0lOREVYQlVGRkVSOV9IXworI2RlZmlu
ZSBMSUJHTEVTVjJfUkVOREVSRVJfSU5ERVhCVUZGRVI5X0hfCisKKyNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvSW5kZXhCdWZmZXIuaCIKKworbmFtZXNwYWNlIHJ4Cit7CitjbGFzcyBSZW5k
ZXJlcjk7CisKK2NsYXNzIEluZGV4QnVmZmVyOSA6IHB1YmxpYyBJbmRleEJ1ZmZlcgoreworICBw
dWJsaWM6CisgICAgZXhwbGljaXQgSW5kZXhCdWZmZXI5KFJlbmRlcmVyOSAqY29uc3QgcmVuZGVy
ZXIpOworICAgIHZpcnR1YWwgfkluZGV4QnVmZmVyOSgpOworCisgICAgdmlydHVhbCBib29sIGlu
aXRpYWxpemUodW5zaWduZWQgaW50IGJ1ZmZlclNpemUsIEdMZW51bSBpbmRleFR5cGUsIGJvb2wg
ZHluYW1pYyk7CisKKyAgICBzdGF0aWMgSW5kZXhCdWZmZXI5ICptYWtlSW5kZXhCdWZmZXI5KElu
ZGV4QnVmZmVyICppbmRleEJ1ZmZlcik7CisKKyAgICB2aXJ0dWFsIGJvb2wgbWFwQnVmZmVyKHVu
c2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBzaXplLCB2b2lkKiogb3V0TWFwcGVkTWVt
b3J5KTsKKyAgICB2aXJ0dWFsIGJvb2wgdW5tYXBCdWZmZXIoKTsKKworICAgIHZpcnR1YWwgR0xl
bnVtIGdldEluZGV4VHlwZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldEJ1
ZmZlclNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0U2l6ZSh1bnNpZ25lZCBpbnQg
YnVmZmVyU2l6ZSwgR0xlbnVtIGluZGV4VHlwZSk7CisKKyAgICB2aXJ0dWFsIGJvb2wgZGlzY2Fy
ZCgpOworCisgICAgRDNERk9STUFUIGdldEluZGV4Rm9ybWF0KCkgY29uc3Q7CisgICAgSURpcmVj
dDNESW5kZXhCdWZmZXI5ICpnZXRCdWZmZXIoKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihJbmRleEJ1ZmZlcjkpOworCisgICAgcng6OlJlbmRlcmVy
OSAqY29uc3QgbVJlbmRlcmVyOworCisgICAgSURpcmVjdDNESW5kZXhCdWZmZXI5ICptSW5kZXhC
dWZmZXI7CisgICAgdW5zaWduZWQgaW50IG1CdWZmZXJTaXplOworICAgIEdMZW51bSBtSW5kZXhU
eXBlOworICAgIGJvb2wgbUR5bmFtaWM7Cit9OworCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJf
UkVOREVSRVJfSU5ERVhCVUZGRVI5X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUXVlcnk5LmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9RdWVyeTkuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjcyNzgxY2JjMzlkMjVkMTRmNDMyMmRhMzUzMDc0OTUyMWUxYzg0N2IKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDkvUXVlcnk5LmNwcApAQCAtMCwwICsxLDEyNSBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVk
LmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworLy8gUXVlcnk5LmNwcDogRGVmaW5lcyB0aGUgcng6OlF1ZXJ5
OSBjbGFzcyB3aGljaCBpbXBsZW1lbnRzIHJ4OjpRdWVyeUltcGwuCisKKworI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1F1ZXJ5OS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWlu
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmgiCisKK25hbWVz
cGFjZSByeAoreworCitRdWVyeTk6OlF1ZXJ5OShyeDo6UmVuZGVyZXI5ICpyZW5kZXJlciwgR0xl
bnVtIHR5cGUpIDogUXVlcnlJbXBsKHR5cGUpCit7CisgICAgbVJlbmRlcmVyID0gcmVuZGVyZXI7
CisgICAgbVF1ZXJ5ID0gTlVMTDsKK30KKworUXVlcnk5Ojp+UXVlcnk5KCkKK3sKKyAgICBpZiAo
bVF1ZXJ5KQorICAgIHsKKyAgICAgICAgbVF1ZXJ5LT5SZWxlYXNlKCk7CisgICAgICAgIG1RdWVy
eSA9IE5VTEw7CisgICAgfQorfQorCit2b2lkIFF1ZXJ5OTo6YmVnaW4oKQoreworICAgIGlmICht
UXVlcnkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIGlmIChGQUlMRUQobVJlbmRlcmVyLT5nZXRE
ZXZpY2UoKS0+Q3JlYXRlUXVlcnkoRDNEUVVFUllUWVBFX09DQ0xVU0lPTiwgJm1RdWVyeSkpKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgICAgICB9CisgICAgfQorCisgICAgSFJFU1VMVCByZXN1bHQgPSBtUXVlcnktPklzc3Vl
KEQzRElTU1VFX0JFR0lOKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworfQorCit2
b2lkIFF1ZXJ5OTo6ZW5kKCkKK3sKKyAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCisgICAgeworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICB9CisKKyAg
ICBIUkVTVUxUIHJlc3VsdCA9IG1RdWVyeS0+SXNzdWUoRDNESVNTVUVfRU5EKTsKKyAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgbVN0YXR1cyA9IEdMX0ZBTFNFOworICAgIG1S
ZXN1bHQgPSBHTF9GQUxTRTsKK30KKworR0x1aW50IFF1ZXJ5OTo6Z2V0UmVzdWx0KCkKK3sKKyAg
ICBpZiAobVF1ZXJ5ICE9IE5VTEwpCisgICAgeworICAgICAgICB3aGlsZSAoIXRlc3RRdWVyeSgp
KQorICAgICAgICB7CisgICAgICAgICAgICBTbGVlcCgwKTsKKyAgICAgICAgICAgIC8vIGV4cGxp
Y2l0bHkgY2hlY2sgZm9yIGRldmljZSBsb3NzCisgICAgICAgICAgICAvLyBzb21lIGRyaXZlcnMg
c2VlbSB0byByZXR1cm4gU19GQUxTRSBldmVuIGlmIHRoZSBkZXZpY2UgaXMgbG9zdAorICAgICAg
ICAgICAgLy8gaW5zdGVhZCBvZiBEM0RFUlJfREVWSUNFTE9TVCBsaWtlIHRoZXkgc2hvdWxkCisg
ICAgICAgICAgICBpZiAobVJlbmRlcmVyLT50ZXN0RGV2aWNlTG9zdCh0cnVlKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlks
IDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG1SZXN1
bHQ7Cit9CisKK0dMYm9vbGVhbiBRdWVyeTk6OmlzUmVzdWx0QXZhaWxhYmxlKCkKK3sKKyAgICBp
ZiAobVF1ZXJ5ICE9IE5VTEwpCisgICAgeworICAgICAgICB0ZXN0UXVlcnkoKTsKKyAgICB9CisK
KyAgICByZXR1cm4gbVN0YXR1czsKK30KKworR0xib29sZWFuIFF1ZXJ5OTo6dGVzdFF1ZXJ5KCkK
K3sKKyAgICBpZiAobVF1ZXJ5ICE9IE5VTEwgJiYgbVN0YXR1cyAhPSBHTF9UUlVFKQorICAgIHsK
KyAgICAgICAgRFdPUkQgbnVtUGl4ZWxzID0gMDsKKworICAgICAgICBIUkVTVUxUIGhyZXMgPSBt
UXVlcnktPkdldERhdGEoJm51bVBpeGVscywgc2l6ZW9mKERXT1JEKSwgRDNER0VUREFUQV9GTFVT
SCk7CisgICAgICAgIGlmIChocmVzID09IFNfT0spCisgICAgICAgIHsKKyAgICAgICAgICAgIG1T
dGF0dXMgPSAgR0xfVFJVRTsKKworICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDoK
KyAgICAgICAgICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VY
VDoKKyAgICAgICAgICAgICAgICBtUmVzdWx0ID0gKG51bVBpeGVscyA+IDApID8gR0xfVFJVRSA6
IEdMX0ZBTFNFOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSBpZiAoZDNkOTo6aXNEZXZpY2VMb3N0RXJyb3IoaHJlcykpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1SZW5kZXJlci0+bm90aWZ5RGV2aWNlTG9zdCgpOworICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9UUlVFKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBtU3RhdHVzOworICAgIH0KKworICAgIHJldHVybiBHTF9U
UlVFOyAvLyBwcmV2ZW50IGJsb2NraW5nIHdoZW4gcXVlcnkgaXMgbnVsbAorfQorCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDkvUXVlcnk5LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvUXVlcnk5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDdlZWY4OTMzNmVmOGMzNDRhYTUxNjdiNGY0
MDIxYjEwNDFjMDcwYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9RdWVyeTkuaApAQCAtMCwwICsxLDQwIEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworLy8gUXVlcnk5Lmg6IERlZmluZXMgdGhlIHJ4OjpRdWVyeTkgY2xhc3Mg
d2hpY2ggaW1wbGVtZW50cyByeDo6UXVlcnlJbXBsLgorCisjaWZuZGVmIExJQkdMRVNWMl9SRU5E
RVJFUl9RVUVSWTlfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1FVRVJZOV9IXworCisj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1F1ZXJ5SW1wbC5oIgorCituYW1lc3BhY2UgcngK
K3sKK2NsYXNzIFJlbmRlcmVyOTsKKworY2xhc3MgUXVlcnk5IDogcHVibGljIFF1ZXJ5SW1wbAor
eworICBwdWJsaWM6CisgICAgUXVlcnk5KHJ4OjpSZW5kZXJlcjkgKnJlbmRlcmVyLCBHTGVudW0g
dHlwZSk7CisgICAgdmlydHVhbCB+UXVlcnk5KCk7CisKKyAgICB2b2lkIGJlZ2luKCk7CisgICAg
dm9pZCBlbmQoKTsKKyAgICBHTHVpbnQgZ2V0UmVzdWx0KCk7CisgICAgR0xib29sZWFuIGlzUmVz
dWx0QXZhaWxhYmxlKCk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oUXVlcnk5KTsKKworICAgIEdMYm9vbGVhbiB0ZXN0UXVlcnkoKTsKKworICAgIHJ4OjpSZW5k
ZXJlcjkgKm1SZW5kZXJlcjsKKyAgICBJRGlyZWN0M0RRdWVyeTkgKm1RdWVyeTsKK307CisKK30K
KworI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9RVUVSWTlfSF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJU
YXJnZXQ5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9SZW5kZXJUYXJnZXQ5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOTA0MzFkYjk5ODczOTBjNTAx
MmNiZmY2MTMwZjhhODkyMzgxNmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlclRhcmdldDkuY3BwCkBA
IC0wLDAgKzEsMTEzIEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisvLyBSZW5kZXJUYXJnZXQ5LmNwcDogSW1wbGVtZW50cyBhIEQzRDktc3BlY2lmaWMgd3JhcHBl
ciBmb3IgSURpcmVjdDNEU3VyZmFjZTkKKy8vIHBvaW50ZXJzIHJldGFpbmVkIGJ5IHJlbmRlcmJ1
ZmZlcnMuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJUYXJnZXQ5
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmgiCisKKyNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5kZXJlcjlfdXRpbHMuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvbWFpbi5oIgorCituYW1lc3BhY2UgcngKK3sKKworUmVuZGVyVGFyZ2V0
OTo6UmVuZGVyVGFyZ2V0OShSZW5kZXJlciAqcmVuZGVyZXIsIElEaXJlY3QzRFN1cmZhY2U5ICpz
dXJmYWNlKQoreworICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShyZW5k
ZXJlcik7CisgICAgbVJlbmRlclRhcmdldCA9IHN1cmZhY2U7CisKKyAgICBpZiAobVJlbmRlclRh
cmdldCkKKyAgICB7CisgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsKKyAgICAg
ICAgbVJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzY3JpcHRpb24pOworCisgICAgICAgIG1XaWR0
aCA9IGRlc2NyaXB0aW9uLldpZHRoOworICAgICAgICBtSGVpZ2h0ID0gZGVzY3JpcHRpb24uSGVp
Z2h0OworICAgICAgICAKKyAgICAgICAgbUludGVybmFsRm9ybWF0ID0gZDNkOV9nbDo6R2V0RXF1
aXZhbGVudEZvcm1hdChkZXNjcmlwdGlvbi5Gb3JtYXQpOworICAgICAgICBtQWN0dWFsRm9ybWF0
ID0gZDNkOV9nbDo6R2V0RXF1aXZhbGVudEZvcm1hdChkZXNjcmlwdGlvbi5Gb3JtYXQpOworICAg
ICAgICBtU2FtcGxlcyA9IGQzZDlfZ2w6OkdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKGRl
c2NyaXB0aW9uLk11bHRpU2FtcGxlVHlwZSk7CisgICAgfQorfQorCitSZW5kZXJUYXJnZXQ5OjpS
ZW5kZXJUYXJnZXQ5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcykKK3sKKyAgICBtUmVuZGVyZXIg
PSBSZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjkocmVuZGVyZXIpOworICAgIG1SZW5kZXJUYXJnZXQg
PSBOVUxMOworCisgICAgRDNERk9STUFUIHJlcXVlc3RlZEZvcm1hdCA9IGdsX2QzZDk6OkNvbnZl
cnRSZW5kZXJidWZmZXJGb3JtYXQoZm9ybWF0KTsKKyAgICBpbnQgc3VwcG9ydGVkU2FtcGxlcyA9
IG1SZW5kZXJlci0+Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMocmVxdWVzdGVkRm9ybWF0LCBz
YW1wbGVzKTsKKworICAgIGlmIChzdXBwb3J0ZWRTYW1wbGVzID09IC0xKQorICAgIHsKKyAgICAg
ICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworCisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBIUkVTVUxUIHJlc3VsdCA9IEQzREVSUl9JTlZBTElEQ0FMTDsKKyAgICAKKyAgICBp
ZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApCisgICAgeworICAgICAgICBpZiAocmVxdWVzdGVk
Rm9ybWF0ID09IEQzREZNVF9EMjRTOCkKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0ID0g
bVJlbmRlcmVyLT5nZXREZXZpY2UoKS0+Q3JlYXRlRGVwdGhTdGVuY2lsU3VyZmFjZSh3aWR0aCwg
aGVpZ2h0LCByZXF1ZXN0ZWRGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkdldE11bHRp
c2FtcGxlVHlwZUZyb21TYW1wbGVzKHN1cHBvcnRlZFNhbXBsZXMpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LCBGQUxTRSwgJm1SZW5kZXJUYXJnZXQsIE5VTEwpOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKS0+
Q3JlYXRlUmVuZGVyVGFyZ2V0KHdpZHRoLCBoZWlnaHQsIHJlcXVlc3RlZEZvcm1hdCwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2xfZDNkOTo6R2V0TXVsdGlzYW1wbGVUeXBlRnJvbVNhbXBsZXMoc3VwcG9ydGVkU2FtcGxl
cyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMCwgRkFMU0UsICZtUmVuZGVyVGFyZ2V0LCBOVUxMKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0
ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICB9CisKKyAgICBtV2lkdGggPSB3aWR0
aDsKKyAgICBtSGVpZ2h0ID0gaGVpZ2h0OworICAgIG1JbnRlcm5hbEZvcm1hdCA9IGZvcm1hdDsK
KyAgICBtU2FtcGxlcyA9IHN1cHBvcnRlZFNhbXBsZXM7CisgICAgbUFjdHVhbEZvcm1hdCA9IGQz
ZDlfZ2w6OkdldEVxdWl2YWxlbnRGb3JtYXQocmVxdWVzdGVkRm9ybWF0KTsKK30KKworUmVuZGVy
VGFyZ2V0OTo6flJlbmRlclRhcmdldDkoKQoreworICAgIGlmIChtUmVuZGVyVGFyZ2V0KQorICAg
IHsKKyAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworICAgIH0KK30KKworUmVuZGVy
VGFyZ2V0OSAqUmVuZGVyVGFyZ2V0OTo6bWFrZVJlbmRlclRhcmdldDkoUmVuZGVyVGFyZ2V0ICp0
YXJnZXQpCit7CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUocng6OlJlbmRlclRhcmdldDkq
LCB0YXJnZXQpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8cng6OlJlbmRlclRhcmdldDkqPih0
YXJnZXQpOworfQorCitJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyVGFyZ2V0OTo6Z2V0U3VyZmFj
ZSgpCit7CisgICAgLy8gQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcgdGhlIHJl
dHVybmVkIHN1cmZhY2UgcmVmZXJlbmNlLgorICAgIGlmIChtUmVuZGVyVGFyZ2V0KQorICAgIHsK
KyAgICAgICAgbVJlbmRlclRhcmdldC0+QWRkUmVmKCk7CisgICAgfQorCisgICAgcmV0dXJuIG1S
ZW5kZXJUYXJnZXQ7Cit9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
UmVuZGVyVGFyZ2V0OS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L1JlbmRlclRhcmdldDkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYWY4YWQxYzZkMmQ2MjQy
OTQwMGZlMzNjYjhjZGRlNzFmN2QzMjVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlclRhcmdldDkuaApA
QCAtMCwwICsxLDQwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUmVuZGVyVGFyZ2V0OS5oOiBEZWZp
bmVzIGEgRDNEOS1zcGVjaWZpYyB3cmFwcGVyIGZvciBJRGlyZWN0M0RTdXJmYWNlOSBwb2ludGVy
cworLy8gcmV0YWluZWQgYnkgUmVuZGVyYnVmZmVycy4KKworI2lmbmRlZiBMSUJHTEVTVjJfUkVO
REVSRVJfUkVOREVSVEFSR0VUOV9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVS
VEFSR0VUOV9IXworCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldC5o
IgorCituYW1lc3BhY2UgcngKK3sKK2NsYXNzIFJlbmRlcmVyOworY2xhc3MgUmVuZGVyZXI5Owor
CitjbGFzcyBSZW5kZXJUYXJnZXQ5IDogcHVibGljIFJlbmRlclRhcmdldAoreworICBwdWJsaWM6
CisgICAgUmVuZGVyVGFyZ2V0OShSZW5kZXJlciAqcmVuZGVyZXIsIElEaXJlY3QzRFN1cmZhY2U5
ICpzdXJmYWNlKTsKKyAgICBSZW5kZXJUYXJnZXQ5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcyk7
CisgICAgdmlydHVhbCB+UmVuZGVyVGFyZ2V0OSgpOworCisgICAgc3RhdGljIFJlbmRlclRhcmdl
dDkgKm1ha2VSZW5kZXJUYXJnZXQ5KFJlbmRlclRhcmdldCAqcmVuZGVyVGFyZ2V0KTsKKyAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqZ2V0U3VyZmFjZSgpOworCisgIHByaXZhdGU6CisgICAgRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlclRhcmdldDkpOworCisgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKm1SZW5kZXJUYXJnZXQ7CisKKyAgICBSZW5kZXJlcjkgKm1SZW5kZXJlcjsKK307CisKK30K
KworI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJUQVJHRVQ5X0hfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
UmVuZGVyZXI5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9SZW5kZXJlcjkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk3YTEwZDY0YmY3NjY2MDFjOGM4
YjNkMDE5OTQyZTI3MzNiYzI4OTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmNwcApAQCAtMCww
ICsxLDMyODcgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworLy8gUmVuZGVyZXI5LmNwcDogSW1wbGVtZW50cyBhIGJhY2stZW5kIHNwZWNpZmljIGNsYXNz
IGZvciB0aGUgRDNEOSByZW5kZXJlci4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJl
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL1JlbmRlcmJ1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5Lmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0luZGV4RGF0YU1hbmFnZXIuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5kZXJlcjlfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9TaGFkZXJFeGVjdXRhYmxlOS5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L1N3YXBDaGFpbjkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9UZXh0dXJlU3RvcmFnZTkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9JbWFnZTkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CbGl0Lmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleEJ1ZmZlcjkuaCIKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbmRleEJ1ZmZlcjkuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9CdWZmZXJTdG9yYWdlOS5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L1F1ZXJ5OS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L0ZlbmNlOS5oIgorCisjaW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIKKworI2luY2x1ZGUg
InRoaXJkX3BhcnR5L3RyYWNlX2V2ZW50L3RyYWNlX2V2ZW50LmgiCisKKy8vIENhbiBhbHNvIGJl
IGVuYWJsZWQgYnkgZGVmaW5pbmcgRk9SQ0VfUkVGX1JBU1QgaW4gdGhlIHByb2plY3QncyBwcmVk
ZWZpbmVkIG1hY3JvcworI2RlZmluZSBSRUZfUkFTVCAwCisKKy8vIFRoZSAiRGVidWcgVGhpcyBQ
aXhlbC4uLiIgZmVhdHVyZSBpbiBQSVggb2Z0ZW4gZmFpbHMgd2hlbiB1c2luZyB0aGUKKy8vIEQz
RDlFeCBpbnRlcmZhY2VzLiAgSW4gb3JkZXIgdG8gZ2V0IGRlYnVnIHBpeGVsIHRvIHdvcmsgb24g
YSBWaXN0YS9XaW4gNworLy8gbWFjaGluZSwgZGVmaW5lICJBTkdMRV9FTkFCTEVfRDNEOUVYPTAi
IGluIHlvdXIgcHJvamVjdCBmaWxlLgorI2lmICFkZWZpbmVkKEFOR0xFX0VOQUJMRV9EM0Q5RVgp
CisvLyBFbmFibGVzIHVzZSBvZiB0aGUgSURpcmVjdDNEOUV4IGludGVyZmFjZSwgd2hlbiBhdmFp
bGFibGUKKyNkZWZpbmUgQU5HTEVfRU5BQkxFX0QzRDlFWCAxCisjZW5kaWYgLy8gIWRlZmluZWQo
QU5HTEVfRU5BQkxFX0QzRDlFWCkKKworbmFtZXNwYWNlIHJ4Cit7CitzdGF0aWMgY29uc3QgRDNE
Rk9STUFUIFJlbmRlclRhcmdldEZvcm1hdHNbXSA9CisgICAgeworICAgICAgICBEM0RGTVRfQTFS
NUc1QjUsCisgICAgLy8gIEQzREZNVF9BMlIxMEcxMEIxMCwgICAvLyBUaGUgY29sb3JfcmFtcCBj
b25mb3JtYW5jZSB0ZXN0IHVzZXMgUmVhZFBpeGVscyB3aXRoIFVOU0lHTkVEX0JZVEUgY2F1c2lu
ZyBpdCB0byB0aGluayB0aGF0IHJlbmRlcmluZyBza2lwcGVkIGEgY29sb3VyIHZhbHVlLgorICAg
ICAgICBEM0RGTVRfQThSOEc4QjgsCisgICAgICAgIEQzREZNVF9SNUc2QjUsCisgICAgLy8gIEQz
REZNVF9YMVI1RzVCNSwgICAgICAvLyBIYXMgbm8gY29tcGF0aWJsZSBPcGVuR0wgRVMgcmVuZGVy
YnVmZmVyIGZvcm1hdAorICAgICAgICBEM0RGTVRfWDhSOEc4QjgKKyAgICB9OworCitzdGF0aWMg
Y29uc3QgRDNERk9STUFUIERlcHRoU3RlbmNpbEZvcm1hdHNbXSA9CisgICAgeworICAgICAgICBE
M0RGTVRfVU5LTk9XTiwKKyAgICAvLyAgRDNERk1UX0QxNl9MT0NLQUJMRSwKKyAgICAgICAgRDNE
Rk1UX0QzMiwKKyAgICAvLyAgRDNERk1UX0QxNVMxLAorICAgICAgICBEM0RGTVRfRDI0UzgsCisg
ICAgICAgIEQzREZNVF9EMjRYOCwKKyAgICAvLyAgRDNERk1UX0QyNFg0UzQsCisgICAgICAgIEQz
REZNVF9EMTYsCisgICAgLy8gIEQzREZNVF9EMzJGX0xPQ0tBQkxFLAorICAgIC8vICBEM0RGTVRf
RDI0RlM4CisgICAgfTsKKworZW51bQoreworICAgIE1BWF9WRVJURVhfQ09OU1RBTlRfVkVDVE9S
U19EM0Q5ID0gMjU2LAorICAgIE1BWF9QSVhFTF9DT05TVEFOVF9WRUNUT1JTX1NNMiA9IDMyLAor
ICAgIE1BWF9QSVhFTF9DT05TVEFOVF9WRUNUT1JTX1NNMyA9IDIyNCwKKyAgICBNQVhfVkFSWUlO
R19WRUNUT1JTX1NNMiA9IDgsCisgICAgTUFYX1ZBUllJTkdfVkVDVE9SU19TTTMgPSAxMCwKKwor
ICAgIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl9TTTMgPSA0Cit9OworCitSZW5kZXJlcjk6
OlJlbmRlcmVyOShlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIEhEQyBoRGMsIGJvb2wgc29mdHdhcmVE
ZXZpY2UpIDogUmVuZGVyZXIoZGlzcGxheSksIG1EYyhoRGMpLCBtU29mdHdhcmVEZXZpY2Uoc29m
dHdhcmVEZXZpY2UpCit7CisgICAgbUQzZDlNb2R1bGUgPSBOVUxMOworCisgICAgbUQzZDkgPSBO
VUxMOworICAgIG1EM2Q5RXggPSBOVUxMOworICAgIG1EZXZpY2UgPSBOVUxMOworICAgIG1EZXZp
Y2VFeCA9IE5VTEw7CisgICAgbURldmljZVdpbmRvdyA9IE5VTEw7CisgICAgbUJsaXQgPSBOVUxM
OworCisgICAgbUFkYXB0ZXIgPSBEM0RBREFQVEVSX0RFRkFVTFQ7CisKKyAgICAjaWYgUkVGX1JB
U1QgPT0gMSB8fCBkZWZpbmVkKEZPUkNFX1JFRl9SQVNUKQorICAgICAgICBtRGV2aWNlVHlwZSA9
IEQzRERFVlRZUEVfUkVGOworICAgICNlbHNlCisgICAgICAgIG1EZXZpY2VUeXBlID0gRDNEREVW
VFlQRV9IQUw7CisgICAgI2VuZGlmCisKKyAgICBtRGV2aWNlTG9zdCA9IGZhbHNlOworCisgICAg
bU1heFN1cHBvcnRlZFNhbXBsZXMgPSAwOworCisgICAgbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSA9
IE5VTEw7CisKKyAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBOVUxMOworICAgIG1JbmRleERhdGFN
YW5hZ2VyID0gTlVMTDsKKyAgICBtTGluZUxvb3BJQiA9IE5VTEw7CisKKyAgICBtTWF4TnVsbENv
bG9yYnVmZmVyTFJVID0gMDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9OVUxMX0NPTE9S
QlVGRkVSX0NBQ0hFX0VOVFJJRVM7IGkrKykKKyAgICB7CisgICAgICAgIG1OdWxsQ29sb3JidWZm
ZXJDYWNoZVtpXS5scnVDb3VudCA9IDA7CisgICAgICAgIG1OdWxsQ29sb3JidWZmZXJDYWNoZVtp
XS53aWR0aCA9IDA7CisgICAgICAgIG1OdWxsQ29sb3JidWZmZXJDYWNoZVtpXS5oZWlnaHQgPSAw
OworICAgICAgICBtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0uYnVmZmVyID0gTlVMTDsKKyAgICB9
Cit9CisKK1JlbmRlcmVyOTo6flJlbmRlcmVyOSgpCit7CisgICAgaWYgKG1EZXZpY2UpCisgICAg
eworICAgICAgICAvLyBJZiB0aGUgZGV2aWNlIGlzIGxvc3QsIHJlc2V0IGl0IGZpcnN0IHRvIHBy
ZXZlbnQgbGVhdmluZyB0aGUgZHJpdmVyIGluIGFuIHVuc3RhYmxlIHN0YXRlCisgICAgICAgIGlm
ICh0ZXN0RGV2aWNlTG9zdChmYWxzZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc2V0RGV2
aWNlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBkZWluaXRpYWxpemUoKTsKK30KKwordm9p
ZCBSZW5kZXJlcjk6OmRlaW5pdGlhbGl6ZSgpCit7CisgICAgcmVsZWFzZURldmljZVJlc291cmNl
cygpOworCisgICAgU2FmZVJlbGVhc2UobURldmljZSk7CisgICAgU2FmZVJlbGVhc2UobURldmlj
ZUV4KTsKKyAgICBTYWZlUmVsZWFzZShtRDNkOSk7CisgICAgU2FmZVJlbGVhc2UobUQzZDlFeCk7
CisKKyAgICBpZiAobURldmljZVdpbmRvdykKKyAgICB7CisgICAgICAgIERlc3Ryb3lXaW5kb3co
bURldmljZVdpbmRvdyk7CisgICAgICAgIG1EZXZpY2VXaW5kb3cgPSBOVUxMOworICAgIH0KKwor
ICAgIGlmIChtRDNkOU1vZHVsZSkKKyAgICB7CisgICAgICAgIG1EM2Q5TW9kdWxlID0gTlVMTDsK
KyAgICB9CisKKyAgICB3aGlsZSAoIW1NdWx0aVNhbXBsZVN1cHBvcnQuZW1wdHkoKSkKKyAgICB7
CisgICAgICAgIGRlbGV0ZSBbXSBtTXVsdGlTYW1wbGVTdXBwb3J0LmJlZ2luKCktPnNlY29uZDsK
KyAgICAgICAgbU11bHRpU2FtcGxlU3VwcG9ydC5lcmFzZShtTXVsdGlTYW1wbGVTdXBwb3J0LmJl
Z2luKCkpOworICAgIH0KK30KKworUmVuZGVyZXI5ICpSZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjko
UmVuZGVyZXIgKnJlbmRlcmVyKQoreworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKHJ4OjpS
ZW5kZXJlcjkqLCByZW5kZXJlcikpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxyeDo6UmVuZGVy
ZXI5Kj4ocmVuZGVyZXIpOworfQorCitFR0xpbnQgUmVuZGVyZXI5Ojppbml0aWFsaXplKCkKK3sK
KyAgICBpZiAoIWluaXRpYWxpemVDb21waWxlcigpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEVH
TF9OT1RfSU5JVElBTElaRUQ7CisgICAgfQorCisgICAgaWYgKG1Tb2Z0d2FyZURldmljZSkKKyAg
ICB7CisgICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgIkdldE1vZHVsZUhhbmRsZV9zd2lmdHNo
YWRlciIpOworICAgICAgICBtRDNkOU1vZHVsZSA9IEdldE1vZHVsZUhhbmRsZShURVhUKCJzd2lm
dHNoYWRlcl9kM2Q5LmRsbCIpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVFJB
Q0VfRVZFTlQwKCJncHUiLCAiR2V0TW9kdWxlSGFuZGxlX2QzZDkiKTsKKyAgICAgICAgbUQzZDlN
b2R1bGUgPSBHZXRNb2R1bGVIYW5kbGUoVEVYVCgiZDNkOS5kbGwiKSk7CisgICAgfQorCisgICAg
aWYgKG1EM2Q5TW9kdWxlID09IE5VTEwpCisgICAgeworICAgICAgICBFUlIoIk5vIEQzRDkgbW9k
dWxlIGZvdW5kIC0gYWJvcnRpbmchXG4iKTsKKyAgICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElB
TElaRUQ7CisgICAgfQorCisgICAgdHlwZWRlZiBIUkVTVUxUIChXSU5BUEkgKkRpcmVjdDNEQ3Jl
YXRlOUV4RnVuYykoVUlOVCwgSURpcmVjdDNEOUV4KiopOworICAgIERpcmVjdDNEQ3JlYXRlOUV4
RnVuYyBEaXJlY3QzRENyZWF0ZTlFeFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8RGlyZWN0M0RDcmVh
dGU5RXhGdW5jPihHZXRQcm9jQWRkcmVzcyhtRDNkOU1vZHVsZSwgIkRpcmVjdDNEQ3JlYXRlOUV4
IikpOworCisgICAgLy8gVXNlIERpcmVjdDNEOUV4IGlmIGF2YWlsYWJsZS4gQW1vbmcgb3RoZXIg
dGhpbmdzLCB0aGlzIHZlcnNpb24gaXMgbGVzcworICAgIC8vIGluY2xpbmVkIHRvIHJlcG9ydCBh
IGxvc3QgY29udGV4dCwgZm9yIGV4YW1wbGUgd2hlbiB0aGUgdXNlciBzd2l0Y2hlcworICAgIC8v
IGRlc2t0b3AuIERpcmVjdDNEOUV4IGlzIGF2YWlsYWJsZSBpbiBXaW5kb3dzIFZpc3RhIGFuZCBs
YXRlciBpZiBzdWl0YWJsZSBkcml2ZXJzIGFyZSBhdmFpbGFibGUuCisgICAgaWYgKEFOR0xFX0VO
QUJMRV9EM0Q5RVggJiYgRGlyZWN0M0RDcmVhdGU5RXhQdHIgJiYgU1VDQ0VFREVEKERpcmVjdDNE
Q3JlYXRlOUV4UHRyKEQzRF9TREtfVkVSU0lPTiwgJm1EM2Q5RXgpKSkKKyAgICB7CisgICAgICAg
IFRSQUNFX0VWRU5UMCgiZ3B1IiwgIkQzZDlFeF9RdWVyeUludGVyZmFjZSIpOworICAgICAgICBB
U1NFUlQobUQzZDlFeCk7CisgICAgICAgIG1EM2Q5RXgtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JRGly
ZWN0M0Q5LCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1EM2Q5KSk7CisgICAgICAgIEFTU0VS
VChtRDNkOSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5UMCgi
Z3B1IiwgIkRpcmVjdDNEQ3JlYXRlOSIpOworICAgICAgICBtRDNkOSA9IERpcmVjdDNEQ3JlYXRl
OShEM0RfU0RLX1ZFUlNJT04pOworICAgIH0KKworICAgIGlmICghbUQzZDkpCisgICAgeworICAg
ICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgRDNEOSBkZXZpY2UgLSBhYm9ydGluZyFcbiIpOwor
ICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsKKyAgICB9CisKKyAgICBpZiAobURj
ICE9IE5VTEwpCisgICAgeworICAgIC8vICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUU6IERl
dGVybWluZSB3aGljaCBhZGFwdGVyIGluZGV4IHRoZSBkZXZpY2UgY29udGV4dCBjb3JyZXNwb25k
cyB0bworICAgIH0KKworICAgIEhSRVNVTFQgcmVzdWx0OworCisgICAgLy8gR2l2ZSB1cCBvbiBn
ZXR0aW5nIGRldmljZSBjYXBzIGFmdGVyIGFib3V0IG9uZSBzZWNvbmQuCisgICAgeworICAgICAg
ICBUUkFDRV9FVkVOVDAoImdwdSIsICJHZXREZXZpY2VDYXBzIik7CisgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgMTA7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0ID0gbUQz
ZDktPkdldERldmljZUNhcHMobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCAmbURldmljZUNhcHMpOwor
ICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocmVz
dWx0ID09IEQzREVSUl9OT1RBVkFJTEFCTEUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgU2xlZXAoMTAwKTsgICAvLyBHaXZlIHRoZSBkcml2ZXIgc29tZSB0aW1lIHRvIGluaXRpYWxp
emUvcmVjb3ZlcgorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoRkFJTEVEKHJl
c3VsdCkpICAgLy8gRDNERVJSX09VVE9GVklERU9NRU1PUlksIEVfT1VUT0ZNRU1PUlksIEQzREVS
Ul9JTlZBTElEREVWSUNFLCBvciBhbm90aGVyIGVycm9yIHdlIGNhbid0IHJlY292ZXIgZnJvbQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEVSUigiZmFpbGVkIHRvIGdldCBkZXZpY2Ug
Y2FwcyAoMHgleClcbiIsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEVHTF9OT1Rf
SU5JVElBTElaRUQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
bURldmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJzaW9uIDwgRDNEUFNfVkVSU0lPTigyLCAwKSkKKyAg
ICB7CisgICAgICAgIEVSUigiUmVuZGVyZXIgZG9lcyBub3Qgc3VwcG9ydCBQUyAyLjAuIGFib3J0
aW5nIVxuIik7CisgICAgICAgIHJldHVybiBFR0xfTk9UX0lOSVRJQUxJWkVEOworICAgIH0KKwor
ICAgIC8vIFdoZW4gRGlyZWN0WDkgaXMgcnVubmluZyB3aXRoIGFuIG9sZGVyIERpcmVjdFg4IGRy
aXZlciwgYSBTdHJldGNoUmVjdCBmcm9tIGEgcmVndWxhciB0ZXh0dXJlIHRvIGEgcmVuZGVyIHRh
cmdldCB0ZXh0dXJlIGlzIG5vdCBzdXBwb3J0ZWQuCisgICAgLy8gVGhpcyBpcyByZXF1aXJlZCBi
eSBUZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRlclRhcmdldC4KKyAgICBpZiAoKG1EZXZpY2VDYXBz
LkRldkNhcHMyICYgRDNEREVWQ0FQUzJfQ0FOX1NUUkVUQ0hSRUNUX0ZST01fVEVYVFVSRVMpID09
IDApCisgICAgeworICAgICAgICBFUlIoIlJlbmRlcmVyIGRvZXMgbm90IHN1cHBvcnQgc3RyZXRj
dHJlY3QgZnJvbSB0ZXh0dXJlcyFcbiIpOworICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFM
SVpFRDsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgIkdldEFk
YXB0ZXJJZGVudGlmaWVyIik7CisgICAgICAgIG1EM2Q5LT5HZXRBZGFwdGVySWRlbnRpZmllciht
QWRhcHRlciwgMCwgJm1BZGFwdGVySWRlbnRpZmllcik7CisgICAgfQorCisgICAgLy8gQVRJIGNh
cmRzIG9uIFhQIGhhdmUgcHJvYmxlbXMgd2l0aCBub24tcG93ZXItb2YtdHdvIHRleHR1cmVzLgor
ICAgIG1TdXBwb3J0c05vblBvd2VyMlRleHR1cmVzID0gIShtRGV2aWNlQ2Fwcy5UZXh0dXJlQ2Fw
cyAmIEQzRFBURVhUVVJFQ0FQU19QT1cyKSAmJgorICAgICAgICAhKG1EZXZpY2VDYXBzLlRleHR1
cmVDYXBzICYgRDNEUFRFWFRVUkVDQVBTX0NVQkVNQVBfUE9XMikgJiYKKyAgICAgICAgIShtRGV2
aWNlQ2Fwcy5UZXh0dXJlQ2FwcyAmIEQzRFBURVhUVVJFQ0FQU19OT05QT1cyQ09ORElUSU9OQUwp
ICYmCisgICAgICAgICEoZ2V0Q29tcGFyYWJsZU9TVmVyc2lvbigpIDwgdmVyc2lvbldpbmRvd3NW
aXN0YSAmJiBtQWRhcHRlcklkZW50aWZpZXIuVmVuZG9ySWQgPT0gVkVORE9SX0lEX0FNRCk7CisK
KyAgICAvLyBNdXN0IHN1cHBvcnQgYSBtaW5pbXVtIG9mIDI6MSBhbmlzb3Ryb3B5IGZvciBtYXgg
YW5pc290cm9weSB0byBiZSBjb25zaWRlcmVkIHN1cHBvcnRlZCwgcGVyIHRoZSBzcGVjCisgICAg
bVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHkgPSAoKG1EZXZpY2VDYXBzLlJhc3RlckNh
cHMgJiBEM0RQUkFTVEVSQ0FQU19BTklTT1RST1BZKSAmJiAobURldmljZUNhcHMuTWF4QW5pc290
cm9weSA+PSAyKSk7CisKKyAgICBtTWluU3dhcEludGVydmFsID0gNDsKKyAgICBtTWF4U3dhcElu
dGVydmFsID0gMDsKKworICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMg
JiBEM0RQUkVTRU5UX0lOVEVSVkFMX0lNTUVESUFURSkKKyAgICB7CisgICAgICAgIG1NaW5Td2Fw
SW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dhcEludGVydmFsLCAwKTsKKyAgICAgICAgbU1heFN3
YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2YWwsIDApOworICAgIH0KKyAgICBp
ZiAobURldmljZUNhcHMuUHJlc2VudGF0aW9uSW50ZXJ2YWxzICYgRDNEUFJFU0VOVF9JTlRFUlZB
TF9PTkUpCisgICAgeworICAgICAgICBtTWluU3dhcEludGVydmFsID0gc3RkOjptaW4obU1pblN3
YXBJbnRlcnZhbCwgMSk7CisgICAgICAgIG1NYXhTd2FwSW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4
U3dhcEludGVydmFsLCAxKTsKKyAgICB9CisgICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlv
bkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfVFdPKQorICAgIHsKKyAgICAgICAgbU1p
blN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDIpOworICAgICAgICBt
TWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgMik7CisgICAgfQor
ICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVTRU5UX0lO
VEVSVkFMX1RIUkVFKQorICAgIHsKKyAgICAgICAgbU1pblN3YXBJbnRlcnZhbCA9IHN0ZDo6bWlu
KG1NaW5Td2FwSW50ZXJ2YWwsIDMpOworICAgICAgICBtTWF4U3dhcEludGVydmFsID0gc3RkOjpt
YXgobU1heFN3YXBJbnRlcnZhbCwgMyk7CisgICAgfQorICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVz
ZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX0ZPVVIpCisgICAgeworICAg
ICAgICBtTWluU3dhcEludGVydmFsID0gc3RkOjptaW4obU1pblN3YXBJbnRlcnZhbCwgNCk7Cisg
ICAgICAgIG1NYXhTd2FwSW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4U3dhcEludGVydmFsLCA0KTsK
KyAgICB9CisKKyAgICBpbnQgbWF4ID0gMDsKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5UMCgi
Z3B1IiwgImdldE11bHRpU2FtcGxlU3VwcG9ydCIpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IEFycmF5U2l6ZShSZW5kZXJUYXJnZXRGb3JtYXRzKTsgKytpKQorICAgICAg
ICB7CisgICAgICAgICAgICBib29sICptdWx0aXNhbXBsZUFycmF5ID0gbmV3IGJvb2xbRDNETVVM
VElTQU1QTEVfMTZfU0FNUExFUyArIDFdOworICAgICAgICAgICAgZ2V0TXVsdGlTYW1wbGVTdXBw
b3J0KFJlbmRlclRhcmdldEZvcm1hdHNbaV0sIG11bHRpc2FtcGxlQXJyYXkpOworICAgICAgICAg
ICAgbU11bHRpU2FtcGxlU3VwcG9ydFtSZW5kZXJUYXJnZXRGb3JtYXRzW2ldXSA9IG11bHRpc2Ft
cGxlQXJyYXk7CisKKyAgICAgICAgICAgIGZvciAoaW50IGogPSBEM0RNVUxUSVNBTVBMRV8xNl9T
QU1QTEVTOyBqID49IDA7IC0taikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAo
bXVsdGlzYW1wbGVBcnJheVtqXSAmJiBqICE9IEQzRE1VTFRJU0FNUExFX05PTk1BU0tBQkxFICYm
IGogPiBtYXgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtYXggPSBq
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiZ2V0TXVsdGlTYW1wbGVTdXBwb3J0
MiIpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShEZXB0
aFN0ZW5jaWxGb3JtYXRzKTsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoRGVwdGhT
dGVuY2lsRm9ybWF0c1tpXSA9PSBEM0RGTVRfVU5LTk9XTikKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICAgICAgYm9vbCAqbXVsdGlzYW1wbGVBcnJheSA9IG5ldyBib29sW0Qz
RE1VTFRJU0FNUExFXzE2X1NBTVBMRVMgKyAxXTsKKyAgICAgICAgICAgIGdldE11bHRpU2FtcGxl
U3VwcG9ydChEZXB0aFN0ZW5jaWxGb3JtYXRzW2ldLCBtdWx0aXNhbXBsZUFycmF5KTsKKyAgICAg
ICAgICAgIG1NdWx0aVNhbXBsZVN1cHBvcnRbRGVwdGhTdGVuY2lsRm9ybWF0c1tpXV0gPSBtdWx0
aXNhbXBsZUFycmF5OworCisgICAgICAgICAgICBmb3IgKGludCBqID0gRDNETVVMVElTQU1QTEVf
MTZfU0FNUExFUzsgaiA+PSAwOyAtLWopCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aWYgKG11bHRpc2FtcGxlQXJyYXlbal0gJiYgaiAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJM
RSAmJiBqID4gbWF4KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbWF4
ID0gajsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9IG1heDsKKworICAgIHN0YXRpYyBjb25zdCBU
Q0hBUiB3aW5kb3dOYW1lW10gPSBURVhUKCJBbmdsZUhpZGRlbldpbmRvdyIpOworICAgIHN0YXRp
YyBjb25zdCBUQ0hBUiBjbGFzc05hbWVbXSA9IFRFWFQoIlNUQVRJQyIpOworCisgICAgeworICAg
ICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJDcmVhdGVXaW5kb3dFeCIpOworICAgICAgICBtRGV2
aWNlV2luZG93ID0gQ3JlYXRlV2luZG93RXgoV1NfRVhfTk9BQ1RJVkFURSwgY2xhc3NOYW1lLCB3
aW5kb3dOYW1lLCBXU19ESVNBQkxFRCB8IFdTX1BPUFVQLCAwLCAwLCAxLCAxLCBIV05EX01FU1NB
R0UsIE5VTEwsIEdldE1vZHVsZUhhbmRsZShOVUxMKSwgTlVMTCk7CisgICAgfQorCisgICAgRDNE
UFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbWV0ZXJzID0gZ2V0RGVmYXVsdFByZXNlbnRQ
YXJhbWV0ZXJzKCk7CisgICAgRFdPUkQgYmVoYXZpb3JGbGFncyA9IEQzRENSRUFURV9GUFVfUFJF
U0VSVkUgfCBEM0RDUkVBVEVfTk9XSU5ET1dDSEFOR0VTOworCisgICAgeworICAgICAgICBUUkFD
RV9FVkVOVDAoImdwdSIsICJEM2Q5X0NyZWF0ZURldmljZSIpOworICAgICAgICByZXN1bHQgPSBt
RDNkOS0+Q3JlYXRlRGV2aWNlKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgbURldmljZVdpbmRvdywg
YmVoYXZpb3JGbGFncyB8IEQzRENSRUFURV9IQVJEV0FSRV9WRVJURVhQUk9DRVNTSU5HIHwgRDNE
Q1JFQVRFX1BVUkVERVZJQ0UsICZwcmVzZW50UGFyYW1ldGVycywgJm1EZXZpY2UpOworICAgIH0K
KyAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBF
X09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTE9TVCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBFR0xfQkFEX0FMTE9DOworICAgIH0KKworICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgIkQzZDlfQ3JlYXRlRGV2aWNl
MiIpOworICAgICAgICByZXN1bHQgPSBtRDNkOS0+Q3JlYXRlRGV2aWNlKG1BZGFwdGVyLCBtRGV2
aWNlVHlwZSwgbURldmljZVdpbmRvdywgYmVoYXZpb3JGbGFncyB8IEQzRENSRUFURV9TT0ZUV0FS
RV9WRVJURVhQUk9DRVNTSU5HLCAmcHJlc2VudFBhcmFtZXRlcnMsICZtRGV2aWNlKTsKKworICAg
ICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChy
ZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1P
UlkgfHwgcmVzdWx0ID09IEQzREVSUl9OT1RBVkFJTEFCTEUgfHwgcmVzdWx0ID09IEQzREVSUl9E
RVZJQ0VMT1NUKTsKKyAgICAgICAgICAgIHJldHVybiBFR0xfQkFEX0FMTE9DOworICAgICAgICB9
CisgICAgfQorCisgICAgaWYgKG1EM2Q5RXgpCisgICAgeworICAgICAgICBUUkFDRV9FVkVOVDAo
ImdwdSIsICJtRGV2aWNlX1F1ZXJ5SW50ZXJmYWNlIik7CisgICAgICAgIHJlc3VsdCA9IG1EZXZp
Y2UtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JRGlyZWN0M0REZXZpY2U5RXgsICh2b2lkKiopICZtRGV2
aWNlRXgpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgIH0KKworICAg
IHsKKyAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiU2hhZGVyQ2FjaGUgaW5pdGlhbGl6ZSIp
OworICAgICAgICBtVmVydGV4U2hhZGVyQ2FjaGUuaW5pdGlhbGl6ZShtRGV2aWNlKTsKKyAgICAg
ICAgbVBpeGVsU2hhZGVyQ2FjaGUuaW5pdGlhbGl6ZShtRGV2aWNlKTsKKyAgICB9CisKKyAgICAv
LyBDaGVjayBvY2NsdXNpb24gcXVlcnkgc3VwcG9ydAorICAgIElEaXJlY3QzRFF1ZXJ5OSAqb2Nj
bHVzaW9uUXVlcnkgPSBOVUxMOworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAi
ZGV2aWNlX0NyZWF0ZVF1ZXJ5Iik7CisgICAgICAgIGlmIChTVUNDRUVERUQobURldmljZS0+Q3Jl
YXRlUXVlcnkoRDNEUVVFUllUWVBFX09DQ0xVU0lPTiwgJm9jY2x1c2lvblF1ZXJ5KSkgJiYgb2Nj
bHVzaW9uUXVlcnkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG9jY2x1c2lvblF1ZXJ5LT5SZWxl
YXNlKCk7CisgICAgICAgICAgICBtT2NjbHVzaW9uUXVlcnlTdXBwb3J0ID0gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1PY2NsdXNpb25RdWVy
eVN1cHBvcnQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIENoZWNrIGV2ZW50
IHF1ZXJ5IHN1cHBvcnQKKyAgICBJRGlyZWN0M0RRdWVyeTkgKmV2ZW50UXVlcnkgPSBOVUxMOwor
ICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiZGV2aWNlX0NyZWF0ZVF1ZXJ5MiIp
OworICAgICAgICBpZiAoU1VDQ0VFREVEKG1EZXZpY2UtPkNyZWF0ZVF1ZXJ5KEQzRFFVRVJZVFlQ
RV9FVkVOVCwgJmV2ZW50UXVlcnkpKSAmJiBldmVudFF1ZXJ5KQorICAgICAgICB7CisgICAgICAg
ICAgICBldmVudFF1ZXJ5LT5SZWxlYXNlKCk7CisgICAgICAgICAgICBtRXZlbnRRdWVyeVN1cHBv
cnQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgbUV2ZW50UXVlcnlTdXBwb3J0ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBE
M0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7CisgICAgbUQzZDktPkdldEFkYXB0ZXJE
aXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnREaXNwbGF5TW9kZSk7CisKKyAgICAvLyBDaGVj
ayB2ZXJ0ZXggdGV4dHVyZSBzdXBwb3J0CisgICAgLy8gT25seSBEaXJlY3QzRCAxMCByZWFkeSBk
ZXZpY2VzIHN1cHBvcnQgYWxsIHRoZSBuZWNlc3NhcnkgdmVydGV4IHRleHR1cmUgZm9ybWF0cy4K
KyAgICAvLyBXZSB0ZXN0IHRoaXMgdXNpbmcgRDNEOSBieSBjaGVja2luZyBzdXBwb3J0IGZvciB0
aGUgUjE2RiBmb3JtYXQuCisgICAgbVZlcnRleFRleHR1cmVTdXBwb3J0ID0gbURldmljZUNhcHMu
UGl4ZWxTaGFkZXJWZXJzaW9uID49IEQzRFBTX1ZFUlNJT04oMywgMCkgJiYKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFw
dGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFVT
QUdFX1FVRVJZX1ZFUlRFWFRFWFRVUkUsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9SMTZGKSk7
CisKKyAgICAvLyBDaGVjayBkZXB0aCB0ZXh0dXJlIHN1cHBvcnQKKyAgICAvLyB3ZSB1c2UgSU5U
WiBmb3IgZGVwdGggdGV4dHVyZXMgaW4gRGlyZWN0M0Q5CisgICAgLy8gd2UgYWxzbyB3YW50IE5V
TEwgdGV4dHVyZSBzdXBwb3J0IHRvIGVuc3VyZSB0aGUgd2UgY2FuIG1ha2UgZGVwdGgtb25seSBG
Qk9zCisgICAgLy8gc2VlIGh0dHA6Ly9hcmFzLXAuaW5mby90ZXh0cy9EM0Q5R1BVSGFja3MuaHRt
bAorICAgIG1EZXB0aFRleHR1cmVTdXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0Rldmlj
ZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEQzRFVTQUdFX0RFUFRIU1RFTkNJTCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0lO
VFopKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5DaGVj
a0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5G
b3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgRDNEUlRZUEVfU1VSRkFDRSwgRDNE
Rk1UX05VTEwpKTsKKworICAgIC8vIENoZWNrIDMyIGJpdCBmbG9hdGluZyBwb2ludCB0ZXh0dXJl
IHN1cHBvcnQKKyAgICBtRmxvYXQzMkZpbHRlclN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNo
ZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2Rl
LkZvcm1hdCwgRDNEVVNBR0VfUVVFUllfRklMVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfVEVYVFVSRSwg
RDNERk1UX0EzMkIzMkczMlIzMkYpKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNV
Q0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBj
dXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9RVUVSWV9GSUxURVIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
M0RSVFlQRV9DVUJFVEVYVFVSRSwgRDNERk1UX0EzMkIzMkczMlIzMkYpKTsKKworICAgIG1GbG9h
dDMyUmVuZGVyU3VwcG9ydCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFk
YXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9S
RU5ERVJUQVJHRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfQTMyQjMyRzMyUjMy
RikpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5DaGVj
a0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5G
b3JtYXQsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX0NVQkVURVhUVVJF
LCBEM0RGTVRfQTMyQjMyRzMyUjMyRikpOworCisgICAgaWYgKCFtRmxvYXQzMkZpbHRlclN1cHBv
cnQgJiYgIW1GbG9hdDMyUmVuZGVyU3VwcG9ydCkKKyAgICB7CisgICAgICAgIG1GbG9hdDMyVGV4
dHVyZVN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVy
LCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0EzMkIzMkczMlIzMkYpKSAmJgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdCht
QWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEQzRFJUWVBFX0NVQkVURVhUVVJFLCBEM0RGTVRfQTMyQjMyRzMyUjMyRikpOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRmxvYXQzMlRleHR1cmVTdXBwb3J0ID0gdHJ1
ZTsKKyAgICB9CisKKyAgICAvLyBDaGVjayAxNiBiaXQgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZSBz
dXBwb3J0CisgICAgbUZsb2F0MTZGaWx0ZXJTdXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVj
a0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5G
b3JtYXQsIEQzRFVTQUdFX1FVRVJZX0ZJTFRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX1RFWFRVUkUsIEQz
REZNVF9BMTZCMTZHMTZSMTZGKSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUND
RUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3Vy
cmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUVVFUllfRklMVEVSLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNE
UlRZUEVfQ1VCRVRFWFRVUkUsIEQzREZNVF9BMTZCMTZHMTZSMTZGKSk7CisKKyAgICBtRmxvYXQx
NlJlbmRlclN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFw
dGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUkVO
REVSVEFSR0VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0ExNkIxNkcxNlIxNkYp
KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tE
ZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9y
bWF0LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9DVUJFVEVYVFVSRSwg
RDNERk1UX0ExNkIxNkcxNlIxNkYpKTsKKworICAgIGlmICghbUZsb2F0MTZGaWx0ZXJTdXBwb3J0
ICYmICFtRmxvYXQxNlJlbmRlclN1cHBvcnQpCisgICAgeworICAgICAgICBtRmxvYXQxNlRleHR1
cmVTdXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwg
bURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQz
RFJUWVBFX1RFWFRVUkUsIEQzREZNVF9BMTZCMTZHMTZSMTZGKSkgJiYKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFk
YXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBEM0RSVFlQRV9DVUJFVEVYVFVSRSwgRDNERk1UX0ExNkIxNkcxNlIxNkYpKTsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbUZsb2F0MTZUZXh0dXJlU3VwcG9ydCA9IHRydWU7
CisgICAgfQorCisgICAgLy8gQ2hlY2sgRFhUIHRleHR1cmUgc3VwcG9ydAorICAgIG1EWFQxVGV4
dHVyZVN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVy
LCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVY
VFVSRSwgRDNERk1UX0RYVDEpKTsKKyAgICBtRFhUM1RleHR1cmVTdXBwb3J0ID0gU1VDQ0VFREVE
KG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnRE
aXNwbGF5TW9kZS5Gb3JtYXQsIDAsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9EWFQzKSk7Cisg
ICAgbURYVDVUZXh0dXJlU3VwcG9ydCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3Jt
YXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLCBE
M0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfRFhUNSkpOworCisgICAgLy8gQ2hlY2sgbHVtaW5hbmNl
W2FscGhhXSB0ZXh0dXJlIHN1cHBvcnQKKyAgICBtTHVtaW5hbmNlVGV4dHVyZVN1cHBvcnQgPSBT
VUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwg
Y3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0w4
KSk7CisgICAgbUx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDkt
PkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlN
b2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0E4TDgpKTsKKworICAgIGlu
aXRpYWxpemVEZXZpY2UoKTsKKworICAgIHJldHVybiBFR0xfU1VDQ0VTUzsKK30KKworLy8gZG8g
YW55IG9uZS10aW1lIGRldmljZSBpbml0aWFsaXphdGlvbgorLy8gTk9URTogdGhpcyBpcyBhbHNv
IG5lZWRlZCBhZnRlciBhIGRldmljZSBsb3N0L3Jlc2V0CisvLyB0byByZXNldCB0aGUgc2NlbmUg
c3RhdHVzIGFuZCBlbnN1cmUgdGhlIGRlZmF1bHQgc3RhdGVzIGFyZSByZXNldC4KK3ZvaWQgUmVu
ZGVyZXI5Ojppbml0aWFsaXplRGV2aWNlKCkKK3sKKyAgICAvLyBQZXJtYW5lbnQgbm9uLWRlZmF1
bHQgc3RhdGVzCisgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfUE9JTlRTUFJJVEVF
TkFCTEUsIFRSVUUpOworICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0xBU1RQSVhF
TCwgRkFMU0UpOworCisgICAgaWYgKG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVyVmVyc2lvbiA+PSBE
M0RQU19WRVJTSU9OKDMsIDApKQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfUE9JTlRTSVpFX01BWCwgKERXT1JEJiltRGV2aWNlQ2Fwcy5NYXhQb2ludFNpemUp
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19QT0lOVFNJWkVfTUFYLCAweDNGODAwMDAwKTsgICAvLyAxLjBmCisgICAgfQorCisg
ICAgbWFya0FsbFN0YXRlRGlydHkoKTsKKworICAgIG1TY2VuZVN0YXJ0ZWQgPSBmYWxzZTsKKwor
ICAgIEFTU0VSVCghbUJsaXQgJiYgIW1WZXJ0ZXhEYXRhTWFuYWdlciAmJiAhbUluZGV4RGF0YU1h
bmFnZXIpOworICAgIG1CbGl0ID0gbmV3IEJsaXQodGhpcyk7CisgICAgbVZlcnRleERhdGFNYW5h
Z2VyID0gbmV3IHJ4OjpWZXJ0ZXhEYXRhTWFuYWdlcih0aGlzKTsKKyAgICBtSW5kZXhEYXRhTWFu
YWdlciA9IG5ldyByeDo6SW5kZXhEYXRhTWFuYWdlcih0aGlzKTsKK30KKworRDNEUFJFU0VOVF9Q
QVJBTUVURVJTIFJlbmRlcmVyOTo6Z2V0RGVmYXVsdFByZXNlbnRQYXJhbWV0ZXJzKCkKK3sKKyAg
ICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRlcnMgPSB7MH07CisKKyAgICAv
LyBUaGUgZGVmYXVsdCBzd2FwIGNoYWluIGlzIG5ldmVyIGFjdHVhbGx5IHVzZWQuIFN1cmZhY2Ug
d2lsbCBjcmVhdGUgYSBuZXcgc3dhcCBjaGFpbiB3aXRoIHRoZSBwcm9wZXIgcGFyYW1ldGVycy4K
KyAgICBwcmVzZW50UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVuY2lsRm9ybWF0ID0gRDNERk1UX1VO
S05PV047CisgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckNvdW50ID0gMTsKKyAgICBw
cmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyRm9ybWF0ID0gRDNERk1UX1VOS05PV047CisgICAg
cHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoID0gMTsKKyAgICBwcmVzZW50UGFyYW1l
dGVycy5CYWNrQnVmZmVySGVpZ2h0ID0gMTsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5FbmFibGVB
dXRvRGVwdGhTdGVuY2lsID0gRkFMU0U7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuRmxhZ3MgPSAw
OworICAgIHByZXNlbnRQYXJhbWV0ZXJzLmhEZXZpY2VXaW5kb3cgPSBtRGV2aWNlV2luZG93Owor
ICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVhbGl0eSA9IDA7CisgICAgcHJlc2Vu
dFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVUeXBlID0gRDNETVVMVElTQU1QTEVfTk9ORTsKKyAgICBw
cmVzZW50UGFyYW1ldGVycy5QcmVzZW50YXRpb25JbnRlcnZhbCA9IEQzRFBSRVNFTlRfSU5URVJW
QUxfREVGQVVMVDsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5Td2FwRWZmZWN0ID0gRDNEU1dBUEVG
RkVDVF9ESVNDQVJEOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLldpbmRvd2VkID0gVFJVRTsKKwor
ICAgIHJldHVybiBwcmVzZW50UGFyYW1ldGVyczsKK30KKworaW50IFJlbmRlcmVyOTo6Z2VuZXJh
dGVDb25maWdzKENvbmZpZ0Rlc2MgKipjb25maWdEZXNjTGlzdCkKK3sKKyAgICBEM0RESVNQTEFZ
TU9ERSBjdXJyZW50RGlzcGxheU1vZGU7CisgICAgbUQzZDktPkdldEFkYXB0ZXJEaXNwbGF5TW9k
ZShtQWRhcHRlciwgJmN1cnJlbnREaXNwbGF5TW9kZSk7CisKKyAgICB1bnNpZ25lZCBpbnQgbnVt
UmVuZGVyRm9ybWF0cyA9IEFycmF5U2l6ZShSZW5kZXJUYXJnZXRGb3JtYXRzKTsKKyAgICB1bnNp
Z25lZCBpbnQgbnVtRGVwdGhGb3JtYXRzID0gQXJyYXlTaXplKERlcHRoU3RlbmNpbEZvcm1hdHMp
OworICAgICgqY29uZmlnRGVzY0xpc3QpID0gbmV3IENvbmZpZ0Rlc2NbbnVtUmVuZGVyRm9ybWF0
cyAqIG51bURlcHRoRm9ybWF0c107CisgICAgaW50IG51bUNvbmZpZ3MgPSAwOworCisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgZm9ybWF0SW5kZXggPSAwOyBmb3JtYXRJbmRleCA8IG51bVJlbmRlckZv
cm1hdHM7IGZvcm1hdEluZGV4KyspCisgICAgeworICAgICAgICBEM0RGT1JNQVQgcmVuZGVyVGFy
Z2V0Rm9ybWF0ID0gUmVuZGVyVGFyZ2V0Rm9ybWF0c1tmb3JtYXRJbmRleF07CisKKyAgICAgICAg
SFJFU1VMVCByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZp
Y2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQs
IEQzRFJUWVBFX1NVUkZBQ0UsIHJlbmRlclRhcmdldEZvcm1hdCk7CisKKyAgICAgICAgaWYgKFNV
Q0NFRURFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBkZXB0aFN0ZW5jaWxJbmRleCA9IDA7IGRlcHRoU3RlbmNpbEluZGV4IDwgbnVtRGVwdGhGb3Jt
YXRzOyBkZXB0aFN0ZW5jaWxJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IEQzREZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXQgPSBEZXB0aFN0ZW5jaWxGb3JtYXRzW2RlcHRo
U3RlbmNpbEluZGV4XTsKKyAgICAgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IEQzRF9PSzsK
KworICAgICAgICAgICAgICAgIGlmKGRlcHRoU3RlbmNpbEZvcm1hdCAhPSBEM0RGTVRfVU5LTk9X
TikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1EM2Q5
LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5
TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX0RFUFRIU1RFTkNJTCwgRDNEUlRZUEVfU1VSRkFDRSwgZGVw
dGhTdGVuY2lsRm9ybWF0KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBp
ZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBpZihkZXB0aFN0ZW5jaWxGb3JtYXQgIT0gRDNERk1UX1VOS05PV04pCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1EM2Q5LT5DaGVj
a0RlcHRoU3RlbmNpbE1hdGNoKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlN
b2RlLkZvcm1hdCwgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBkZXB0aFN0ZW5jaWxGb3JtYXQpOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChy
ZXN1bHQpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBD
b25maWdEZXNjIG5ld0NvbmZpZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5y
ZW5kZXJUYXJnZXRGb3JtYXQgPSBkM2Q5X2dsOjpDb252ZXJ0QmFja0J1ZmZlckZvcm1hdChyZW5k
ZXJUYXJnZXRGb3JtYXQpOworICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmRlcHRo
U3RlbmNpbEZvcm1hdCA9IGQzZDlfZ2w6OkNvbnZlcnREZXB0aFN0ZW5jaWxGb3JtYXQoZGVwdGhT
dGVuY2lsRm9ybWF0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5tdWx0aVNh
bXBsZSA9IDA7IC8vIEZJWE1FOiBlbnVtZXJhdGUgbXVsdGktc2FtcGxpbmcKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5ld0NvbmZpZy5mYXN0Q29uZmlnID0gKGN1cnJlbnREaXNwbGF5TW9kZS5G
b3JtYXQgPT0gcmVuZGVyVGFyZ2V0Rm9ybWF0KTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
KCpjb25maWdEZXNjTGlzdClbbnVtQ29uZmlncysrXSA9IG5ld0NvbmZpZzsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiBudW1Db25maWdzOworfQorCit2b2lkIFJlbmRlcmVyOTo6ZGVs
ZXRlQ29uZmlncyhDb25maWdEZXNjICpjb25maWdEZXNjTGlzdCkKK3sKKyAgICBkZWxldGUgW10g
KGNvbmZpZ0Rlc2NMaXN0KTsKK30KKwordm9pZCBSZW5kZXJlcjk6OnN0YXJ0U2NlbmUoKQorewor
ICAgIGlmICghbVNjZW5lU3RhcnRlZCkKKyAgICB7CisgICAgICAgIGxvbmcgcmVzdWx0ID0gbURl
dmljZS0+QmVnaW5TY2VuZSgpOworICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpIHsKKyAg
ICAgICAgICAgIC8vIFRoaXMgaXMgZGVmZW5zaXZlIGNoZWNraW5nIGFnYWluc3QgdGhlIGRldmlj
ZSBiZWluZworICAgICAgICAgICAgLy8gbG9zdCBhdCB1bmV4cGVjdGVkIHRpbWVzLgorICAgICAg
ICAgICAgbVNjZW5lU3RhcnRlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
UmVuZGVyZXI5OjplbmRTY2VuZSgpCit7CisgICAgaWYgKG1TY2VuZVN0YXJ0ZWQpCisgICAgewor
ICAgICAgICAvLyBFbmRTY2VuZSBjYW4gZmFpbCBpZiB0aGUgZGV2aWNlIHdhcyBsb3N0LCBmb3Ig
ZXhhbXBsZSBkdWUKKyAgICAgICAgLy8gdG8gYSBURFIgZHVyaW5nIGEgZHJhdyBjYWxsLgorICAg
ICAgICBtRGV2aWNlLT5FbmRTY2VuZSgpOworICAgICAgICBtU2NlbmVTdGFydGVkID0gZmFsc2U7
CisgICAgfQorfQorCit2b2lkIFJlbmRlcmVyOTo6c3luYyhib29sIGJsb2NrKQoreworICAgIEhS
RVNVTFQgcmVzdWx0OworCisgICAgSURpcmVjdDNEUXVlcnk5KiBxdWVyeSA9IGFsbG9jYXRlRXZl
bnRRdWVyeSgpOworICAgIGlmICghcXVlcnkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgcmVzdWx0ID0gcXVlcnktPklzc3VlKEQzRElTU1VFX0VORCk7CisgICAgQVNTRVJU
KFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIGRvCisgICAgeworICAgICAgICByZXN1bHQgPSBx
dWVyeS0+R2V0RGF0YShOVUxMLCAwLCBEM0RHRVREQVRBX0ZMVVNIKTsKKworICAgICAgICBpZihi
bG9jayAmJiByZXN1bHQgPT0gU19GQUxTRSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gS2Vl
cCBwb2xsaW5nLCBidXQgYWxsb3cgb3RoZXIgdGhyZWFkcyB0byBkbyBzb21ldGhpbmcgdXNlZnVs
IGZpcnN0CisgICAgICAgICAgICBTbGVlcCgwKTsKKyAgICAgICAgICAgIC8vIGV4cGxpY2l0bHkg
Y2hlY2sgZm9yIGRldmljZSBsb3NzCisgICAgICAgICAgICAvLyBzb21lIGRyaXZlcnMgc2VlbSB0
byByZXR1cm4gU19GQUxTRSBldmVuIGlmIHRoZSBkZXZpY2UgaXMgbG9zdAorICAgICAgICAgICAg
Ly8gaW5zdGVhZCBvZiBEM0RFUlJfREVWSUNFTE9TVCBsaWtlIHRoZXkgc2hvdWxkCisgICAgICAg
ICAgICBpZiAodGVzdERldmljZUxvc3QoZmFsc2UpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IEQzREVSUl9ERVZJQ0VMT1NUOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIHdoaWxlKGJsb2NrICYmIHJlc3VsdCA9PSBTX0ZBTFNFKTsKKworICAg
IGZyZWVFdmVudFF1ZXJ5KHF1ZXJ5KTsKKworICAgIGlmIChkM2Q5Ojppc0RldmljZUxvc3RFcnJv
cihyZXN1bHQpKQorICAgIHsKKyAgICAgICAgbm90aWZ5RGV2aWNlTG9zdCgpOworICAgIH0KK30K
KworU3dhcENoYWluICpSZW5kZXJlcjk6OmNyZWF0ZVN3YXBDaGFpbihIV05EIHdpbmRvdywgSEFO
RExFIHNoYXJlSGFuZGxlLCBHTGVudW0gYmFja0J1ZmZlckZvcm1hdCwgR0xlbnVtIGRlcHRoQnVm
ZmVyRm9ybWF0KQoreworICAgIHJldHVybiBuZXcgcng6OlN3YXBDaGFpbjkodGhpcywgd2luZG93
LCBzaGFyZUhhbmRsZSwgYmFja0J1ZmZlckZvcm1hdCwgZGVwdGhCdWZmZXJGb3JtYXQpOworfQor
CitJRGlyZWN0M0RRdWVyeTkqIFJlbmRlcmVyOTo6YWxsb2NhdGVFdmVudFF1ZXJ5KCkKK3sKKyAg
ICBJRGlyZWN0M0RRdWVyeTkgKnF1ZXJ5ID0gTlVMTDsKKworICAgIGlmIChtRXZlbnRRdWVyeVBv
b2wuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3Jl
YXRlUXVlcnkoRDNEUVVFUllUWVBFX0VWRU5ULCAmcXVlcnkpOworICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBxdWVyeSA9
IG1FdmVudFF1ZXJ5UG9vbC5iYWNrKCk7CisgICAgICAgIG1FdmVudFF1ZXJ5UG9vbC5wb3BfYmFj
aygpOworICAgIH0KKworICAgIHJldHVybiBxdWVyeTsKK30KKwordm9pZCBSZW5kZXJlcjk6OmZy
ZWVFdmVudFF1ZXJ5KElEaXJlY3QzRFF1ZXJ5OSogcXVlcnkpCit7CisgICAgaWYgKG1FdmVudFF1
ZXJ5UG9vbC5zaXplKCkgPiAxMDAwKQorICAgIHsKKyAgICAgICAgcXVlcnktPlJlbGVhc2UoKTsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbUV2ZW50UXVlcnlQb29sLnB1c2hfYmFj
ayhxdWVyeSk7CisgICAgfQorfQorCitJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICpSZW5kZXJlcjk6
OmNyZWF0ZVZlcnRleFNoYWRlcihjb25zdCBEV09SRCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgp
Cit7CisgICAgcmV0dXJuIG1WZXJ0ZXhTaGFkZXJDYWNoZS5jcmVhdGUoZnVuY3Rpb24sIGxlbmd0
aCk7Cit9CisKK0lEaXJlY3QzRFBpeGVsU2hhZGVyOSAqUmVuZGVyZXI5OjpjcmVhdGVQaXhlbFNo
YWRlcihjb25zdCBEV09SRCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgpCit7CisgICAgcmV0dXJu
IG1QaXhlbFNoYWRlckNhY2hlLmNyZWF0ZShmdW5jdGlvbiwgbGVuZ3RoKTsKK30KKworSFJFU1VM
VCBSZW5kZXJlcjk6OmNyZWF0ZVZlcnRleEJ1ZmZlcihVSU5UIExlbmd0aCwgRFdPUkQgVXNhZ2Us
IElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKipwcFZlcnRleEJ1ZmZlcikKK3sKKyAgICBEM0RQT09M
IFBvb2wgPSBnZXRCdWZmZXJQb29sKFVzYWdlKTsKKyAgICByZXR1cm4gbURldmljZS0+Q3JlYXRl
VmVydGV4QnVmZmVyKExlbmd0aCwgVXNhZ2UsIDAsIFBvb2wsIHBwVmVydGV4QnVmZmVyLCBOVUxM
KTsKK30KKworVmVydGV4QnVmZmVyICpSZW5kZXJlcjk6OmNyZWF0ZVZlcnRleEJ1ZmZlcigpCit7
CisgICAgcmV0dXJuIG5ldyBWZXJ0ZXhCdWZmZXI5KHRoaXMpOworfQorCitIUkVTVUxUIFJlbmRl
cmVyOTo6Y3JlYXRlSW5kZXhCdWZmZXIoVUlOVCBMZW5ndGgsIERXT1JEIFVzYWdlLCBEM0RGT1JN
QVQgRm9ybWF0LCBJRGlyZWN0M0RJbmRleEJ1ZmZlcjkgKipwcEluZGV4QnVmZmVyKQoreworICAg
IEQzRFBPT0wgUG9vbCA9IGdldEJ1ZmZlclBvb2woVXNhZ2UpOworICAgIHJldHVybiBtRGV2aWNl
LT5DcmVhdGVJbmRleEJ1ZmZlcihMZW5ndGgsIFVzYWdlLCBGb3JtYXQsIFBvb2wsIHBwSW5kZXhC
dWZmZXIsIE5VTEwpOworfQorCitJbmRleEJ1ZmZlciAqUmVuZGVyZXI5OjpjcmVhdGVJbmRleEJ1
ZmZlcigpCit7CisgICAgcmV0dXJuIG5ldyBJbmRleEJ1ZmZlcjkodGhpcyk7Cit9CisKK0J1ZmZl
clN0b3JhZ2UgKlJlbmRlcmVyOTo6Y3JlYXRlQnVmZmVyU3RvcmFnZSgpCit7CisgICAgcmV0dXJu
IG5ldyBCdWZmZXJTdG9yYWdlOSgpOworfQorCitRdWVyeUltcGwgKlJlbmRlcmVyOTo6Y3JlYXRl
UXVlcnkoR0xlbnVtIHR5cGUpCit7CisgICAgcmV0dXJuIG5ldyBRdWVyeTkodGhpcywgdHlwZSk7
Cit9CisKK0ZlbmNlSW1wbCAqUmVuZGVyZXI5OjpjcmVhdGVGZW5jZSgpCit7CisgICAgcmV0dXJu
IG5ldyBGZW5jZTkodGhpcyk7Cit9CisKK3ZvaWQgUmVuZGVyZXI5OjpzZXRTYW1wbGVyU3RhdGUo
Z2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRleCwgY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAm
c2FtcGxlclN0YXRlKQoreworICAgIGJvb2wgKmZvcmNlU2V0U2FtcGxlcnMgPSAodHlwZSA9PSBn
bDo6U0FNUExFUl9QSVhFTCkgPyBtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0ZXMgOiBtRm9yY2VT
ZXRWZXJ0ZXhTYW1wbGVyU3RhdGVzOworICAgIGdsOjpTYW1wbGVyU3RhdGUgKmFwcGxpZWRTYW1w
bGVycyA9ICh0eXBlID09IGdsOjpTQU1QTEVSX1BJWEVMKSA/IG1DdXJQaXhlbFNhbXBsZXJTdGF0
ZXM6IG1DdXJWZXJ0ZXhTYW1wbGVyU3RhdGVzOworCisgICAgaWYgKGZvcmNlU2V0U2FtcGxlcnNb
aW5kZXhdIHx8IG1lbWNtcCgmc2FtcGxlclN0YXRlLCAmYXBwbGllZFNhbXBsZXJzW2luZGV4XSwg
c2l6ZW9mKGdsOjpTYW1wbGVyU3RhdGUpKSAhPSAwKQorICAgIHsKKyAgICAgICAgaW50IGQzZFNh
bXBsZXJPZmZzZXQgPSAodHlwZSA9PSBnbDo6U0FNUExFUl9QSVhFTCkgPyAwIDogRDNEVkVSVEVY
VEVYVFVSRVNBTVBMRVIwOworICAgICAgICBpbnQgZDNkU2FtcGxlciA9IGluZGV4ICsgZDNkU2Ft
cGxlck9mZnNldDsKKworICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxl
ciwgRDNEU0FNUF9BRERSRVNTVSwgZ2xfZDNkOTo6Q29udmVydFRleHR1cmVXcmFwKHNhbXBsZXJT
dGF0ZS53cmFwUykpOworICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxl
ciwgRDNEU0FNUF9BRERSRVNTViwgZ2xfZDNkOTo6Q29udmVydFRleHR1cmVXcmFwKHNhbXBsZXJT
dGF0ZS53cmFwVCkpOworCisgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1w
bGVyLCBEM0RTQU1QX01BR0ZJTFRFUiwgZ2xfZDNkOTo6Q29udmVydE1hZ0ZpbHRlcihzYW1wbGVy
U3RhdGUubWFnRmlsdGVyLCBzYW1wbGVyU3RhdGUubWF4QW5pc290cm9weSkpOworICAgICAgICBE
M0RURVhUVVJFRklMVEVSVFlQRSBkM2RNaW5GaWx0ZXIsIGQzZE1pcEZpbHRlcjsKKyAgICAgICAg
Z2xfZDNkOTo6Q29udmVydE1pbkZpbHRlcihzYW1wbGVyU3RhdGUubWluRmlsdGVyLCAmZDNkTWlu
RmlsdGVyLCAmZDNkTWlwRmlsdGVyLCBzYW1wbGVyU3RhdGUubWF4QW5pc290cm9weSk7CisgICAg
ICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01JTkZJTFRF
UiwgZDNkTWluRmlsdGVyKTsKKyAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNh
bXBsZXIsIEQzRFNBTVBfTUlQRklMVEVSLCBkM2RNaXBGaWx0ZXIpOworICAgICAgICBtRGV2aWNl
LT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9NQVhNSVBMRVZFTCwgc2FtcGxl
clN0YXRlLmxvZE9mZnNldCk7CisgICAgICAgIGlmIChtU3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5p
c290cm9weSkKKyAgICAgICAgeworICAgICAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRl
KGQzZFNhbXBsZXIsIEQzRFNBTVBfTUFYQU5JU09UUk9QWSwgKERXT1JEKXNhbXBsZXJTdGF0ZS5t
YXhBbmlzb3Ryb3B5KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvcmNlU2V0U2FtcGxlcnNb
aW5kZXhdID0gZmFsc2U7CisgICAgYXBwbGllZFNhbXBsZXJzW2luZGV4XSA9IHNhbXBsZXJTdGF0
ZTsKK30KKwordm9pZCBSZW5kZXJlcjk6OnNldFRleHR1cmUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUs
IGludCBpbmRleCwgZ2w6OlRleHR1cmUgKnRleHR1cmUpCit7CisgICAgaW50IGQzZFNhbXBsZXJP
ZmZzZXQgPSAodHlwZSA9PSBnbDo6U0FNUExFUl9QSVhFTCkgPyAwIDogRDNEVkVSVEVYVEVYVFVS
RVNBTVBMRVIwOworICAgIGludCBkM2RTYW1wbGVyID0gaW5kZXggKyBkM2RTYW1wbGVyT2Zmc2V0
OworICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZDNkVGV4dHVyZSA9IE5VTEw7CisgICAgdW5z
aWduZWQgaW50IHNlcmlhbCA9IDA7CisgICAgYm9vbCBmb3JjZVNldFRleHR1cmUgPSBmYWxzZTsK
KworICAgIHVuc2lnbmVkIGludCAqYXBwbGllZFNlcmlhbHMgPSAodHlwZSA9PSBnbDo6U0FNUExF
Ul9QSVhFTCkgPyBtQ3VyUGl4ZWxUZXh0dXJlU2VyaWFscyA6IG1DdXJWZXJ0ZXhUZXh0dXJlU2Vy
aWFsczsKKworICAgIGlmICh0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UgKnRleFN0b3JhZ2UgPSB0ZXh0dXJlLT5nZXROYXRpdmVUZXh0dXJlKCk7CisgICAg
ICAgIGlmICh0ZXhTdG9yYWdlKQorICAgICAgICB7CisgICAgICAgICAgICBUZXh0dXJlU3RvcmFn
ZTkgKnN0b3JhZ2U5ID0gVGV4dHVyZVN0b3JhZ2U5OjptYWtlVGV4dHVyZVN0b3JhZ2U5KHRleFN0
b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICAgICAgICAgIGQzZFRleHR1cmUgPSBz
dG9yYWdlOS0+Z2V0QmFzZVRleHR1cmUoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBJZiB3ZSBn
ZXQgTlVMTCBiYWNrIGZyb20gZ2V0QmFzZVRleHR1cmUgaGVyZSwgc29tZXRoaW5nIHdlbnQgd3Jv
bmcKKyAgICAgICAgLy8gaW4gdGhlIHRleHR1cmUgY2xhc3MgYW5kIHdlJ3JlIHVuZXhwZWN0ZWRs
eSBtaXNzaW5nIHRoZSBkM2QgdGV4dHVyZQorICAgICAgICBBU1NFUlQoZDNkVGV4dHVyZSAhPSBO
VUxMKTsKKworICAgICAgICBzZXJpYWwgPSB0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCk7Cisg
ICAgICAgIGZvcmNlU2V0VGV4dHVyZSA9IHRleHR1cmUtPmhhc0RpcnR5SW1hZ2VzKCk7CisgICAg
fQorCisgICAgaWYgKGZvcmNlU2V0VGV4dHVyZSB8fCBhcHBsaWVkU2VyaWFsc1tpbmRleF0gIT0g
c2VyaWFsKQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZShkM2RTYW1wbGVyLCBk
M2RUZXh0dXJlKTsKKyAgICB9CisKKyAgICBhcHBsaWVkU2VyaWFsc1tpbmRleF0gPSBzZXJpYWw7
Cit9CisKK3ZvaWQgUmVuZGVyZXI5OjpzZXRSYXN0ZXJpemVyU3RhdGUoY29uc3QgZ2w6OlJhc3Rl
cml6ZXJTdGF0ZSAmcmFzdGVyU3RhdGUpCit7CisgICAgYm9vbCByYXN0ZXJTdGF0ZUNoYW5nZWQg
PSBtRm9yY2VTZXRSYXN0ZXJTdGF0ZSB8fCBtZW1jbXAoJnJhc3RlclN0YXRlLCAmbUN1clJhc3Rl
clN0YXRlLCBzaXplb2YoZ2w6OlJhc3Rlcml6ZXJTdGF0ZSkpICE9IDA7CisKKyAgICBpZiAocmFz
dGVyU3RhdGVDaGFuZ2VkKQorICAgIHsKKyAgICAgICAgLy8gU2V0IHRoZSBjdWxsIG1vZGUKKyAg
ICAgICAgaWYgKHJhc3RlclN0YXRlLmN1bGxGYWNlKQorICAgICAgICB7CisgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgZ2xfZDNkOTo6Q29udmVydEN1
bGxNb2RlKHJhc3RlclN0YXRlLmN1bGxNb2RlLCByYXN0ZXJTdGF0ZS5mcm9udEZhY2UpKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKHJhc3RlclN0YXRlLnBvbHlnb25PZmZzZXRGaWxsKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAobUN1ckRlcHRoU2l6ZSA+IDApCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0xPUEVTQ0FMRURFUFRIQklB
UywgKihEV09SRCopJnJhc3RlclN0YXRlLnBvbHlnb25PZmZzZXRGYWN0b3IpOworCisgICAgICAg
ICAgICAgICAgZmxvYXQgZGVwdGhCaWFzID0gbGRleHAocmFzdGVyU3RhdGUucG9seWdvbk9mZnNl
dFVuaXRzLCAtc3RhdGljX2Nhc3Q8aW50PihtQ3VyRGVwdGhTaXplKSk7CisgICAgICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVQVEhCSUFTLCAqKERXT1JEKikmZGVw
dGhCaWFzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NMT1BFU0NBTEVE
RVBUSEJJQVMsIDApOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
REVQVEhCSUFTLCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIG1DdXJSYXN0ZXJTdGF0ZSA9IHJh
c3RlclN0YXRlOworICAgIH0KKworICAgIG1Gb3JjZVNldFJhc3RlclN0YXRlID0gZmFsc2U7Cit9
CisKK3ZvaWQgUmVuZGVyZXI5OjpzZXRCbGVuZFN0YXRlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIsIGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRlLCBjb25zdCBnbDo6Q29sb3Ig
JmJsZW5kQ29sb3IsIHVuc2lnbmVkIGludCBzYW1wbGVNYXNrKQoreworICAgIGJvb2wgYmxlbmRT
dGF0ZUNoYW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0YXRlIHx8IG1lbWNtcCgmYmxlbmRTdGF0ZSwg
Jm1DdXJCbGVuZFN0YXRlLCBzaXplb2YoZ2w6OkJsZW5kU3RhdGUpKSAhPSAwOworICAgIGJvb2wg
YmxlbmRDb2xvckNoYW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0YXRlIHx8IG1lbWNtcCgmYmxlbmRD
b2xvciwgJm1DdXJCbGVuZENvbG9yLCBzaXplb2YoZ2w6OkNvbG9yKSkgIT0gMDsKKyAgICBib29s
IHNhbXBsZU1hc2tDaGFuZ2VkID0gbUZvcmNlU2V0QmxlbmRTdGF0ZSB8fCBzYW1wbGVNYXNrICE9
IG1DdXJTYW1wbGVNYXNrOworCisgICAgaWYgKGJsZW5kU3RhdGVDaGFuZ2VkIHx8IGJsZW5kQ29s
b3JDaGFuZ2VkKQorICAgIHsKKyAgICAgICAgaWYgKGJsZW5kU3RhdGUuYmxlbmQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRF
TkFCTEUsIFRSVUUpOworCisgICAgICAgICAgICBpZiAoYmxlbmRTdGF0ZS5zb3VyY2VCbGVuZFJH
QiAhPSBHTF9DT05TVEFOVF9BTFBIQSAmJiBibGVuZFN0YXRlLnNvdXJjZUJsZW5kUkdCICE9IEdM
X09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSAmJgorICAgICAgICAgICAgICAgIGJsZW5kU3RhdGUu
ZGVzdEJsZW5kUkdCICE9IEdMX0NPTlNUQU5UX0FMUEhBICYmIGJsZW5kU3RhdGUuZGVzdEJsZW5k
UkdCICE9IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVOREZBQ1RPUiwgZ2xf
ZDNkOTo6Q29udmVydENvbG9yKGJsZW5kQ29sb3IpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19CTEVOREZBQ1RPUiwgRDNEQ09MT1JfUkdCQShnbDo6dW5vcm08OD4oYmxl
bmRDb2xvci5hbHBoYSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGJsZW5kQ29sb3Iu
YWxwaGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4PihibGVuZENvbG9yLmFscGhhKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oYmxlbmRDb2xvci5hbHBoYSkpKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JD
QkxFTkQsIGdsX2QzZDk6OkNvbnZlcnRCbGVuZEZ1bmMoYmxlbmRTdGF0ZS5zb3VyY2VCbGVuZFJH
QikpOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVTVEJMRU5E
LCBnbF9kM2Q5OjpDb252ZXJ0QmxlbmRGdW5jKGJsZW5kU3RhdGUuZGVzdEJsZW5kUkdCKSk7Cisg
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVORE9QLCBnbF9kM2Q5
OjpDb252ZXJ0QmxlbmRPcChibGVuZFN0YXRlLmJsZW5kRXF1YXRpb25SR0IpKTsKKworICAgICAg
ICAgICAgaWYgKGJsZW5kU3RhdGUuc291cmNlQmxlbmRSR0IgIT0gYmxlbmRTdGF0ZS5zb3VyY2VC
bGVuZEFscGhhIHx8CisgICAgICAgICAgICAgICAgYmxlbmRTdGF0ZS5kZXN0QmxlbmRSR0IgIT0g
YmxlbmRTdGF0ZS5kZXN0QmxlbmRBbHBoYSB8fAorICAgICAgICAgICAgICAgIGJsZW5kU3RhdGUu
YmxlbmRFcXVhdGlvblJHQiAhPSBibGVuZFN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19T
RVBBUkFURUFMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOworCisgICAgICAgICAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JDQkxFTkRBTFBIQSwgZ2xfZDNkOTo6Q29udmVydEJs
ZW5kRnVuYyhibGVuZFN0YXRlLnNvdXJjZUJsZW5kQWxwaGEpKTsKKyAgICAgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ERVNUQkxFTkRBTFBIQSwgZ2xfZDNkOTo6Q29u
dmVydEJsZW5kRnVuYyhibGVuZFN0YXRlLmRlc3RCbGVuZEFscGhhKSk7CisgICAgICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRPUEFMUEhBLCBnbF9kM2Q5OjpD
b252ZXJ0QmxlbmRPcChibGVuZFN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NFUEFSQVRFQUxQSEFCTEVOREVOQUJMRSwgRkFM
U0UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJM
RSwgRkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGJsZW5kU3RhdGUuc2FtcGxlQWxw
aGFUb0NvdmVyYWdlKQorICAgICAgICB7CisgICAgICAgICAgICBGSVhNRSgiU2FtcGxlIGFscGhh
IHRvIGNvdmVyYWdlIGlzIHVuaW1wbGVtZW50ZWQuIik7CisgICAgICAgIH0KKworICAgICAgICAv
LyBTZXQgdGhlIGNvbG9yIG1hc2sKKyAgICAgICAgYm9vbCB6ZXJvQ29sb3JNYXNrQWxsb3dlZCA9
IGdldEFkYXB0ZXJWZW5kb3IoKSAhPSBWRU5ET1JfSURfQU1EOworICAgICAgICAvLyBBcHBhcmVu
dGx5IHNvbWUgQVRJIGNhcmRzIGhhdmUgYSBidWcgd2hlcmUgYSBkcmF3IHdpdGggYSB6ZXJvIGNv
bG9yCisgICAgICAgIC8vIHdyaXRlIG1hc2sgY2FuIGNhdXNlIGxhdGVyIGRyYXdzIHRvIGhhdmUg
aW5jb3JyZWN0IHJlc3VsdHMuIEluc3RlYWQsCisgICAgICAgIC8vIHNldCBhIG5vbnplcm8gY29s
b3Igd3JpdGUgbWFzayBidXQgbW9kaWZ5IHRoZSBibGVuZCBzdGF0ZSBzbyB0aGF0IG5vCisgICAg
ICAgIC8vIGRyYXdpbmcgaXMgZG9uZS4KKyAgICAgICAgLy8gaHR0cDovL2NvZGUuZ29vZ2xlLmNv
bS9wL2FuZ2xlcHJvamVjdC9pc3N1ZXMvZGV0YWlsP2lkPTE2OQorCisgICAgICAgIERXT1JEIGNv
bG9yTWFzayA9IGdsX2QzZDk6OkNvbnZlcnRDb2xvck1hc2soYmxlbmRTdGF0ZS5jb2xvck1hc2tS
ZWQsIGJsZW5kU3RhdGUuY29sb3JNYXNrR3JlZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRTdGF0ZS5jb2xvck1hc2tCbHVlLCBibGVu
ZFN0YXRlLmNvbG9yTWFza0FscGhhKTsKKyAgICAgICAgaWYgKGNvbG9yTWFzayA9PSAwICYmICF6
ZXJvQ29sb3JNYXNrQWxsb3dlZCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRW5hYmxlIGdy
ZWVuIGNoYW5uZWwsIGJ1dCBzZXQgYmxlbmRpbmcgc28gbm90aGluZyB3aWxsIGJlIGRyYXduLgor
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJM
RSwgRDNEQ09MT1JXUklURUVOQUJMRV9HUkVFTik7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsKKworICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JDQkxFTkQsIEQzREJMRU5EX1pFUk8pOwor
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVTVEJMRU5ELCBEM0RC
TEVORF9PTkUpOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxF
TkRPUCwgRDNEQkxFTkRPUF9BREQpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVO
QUJMRSwgY29sb3JNYXNrKTsKKyAgICAgICAgfQorCisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX0RJVEhFUkVOQUJMRSwgYmxlbmRTdGF0ZS5kaXRoZXIgPyBUUlVFIDogRkFM
U0UpOworCisgICAgICAgIG1DdXJCbGVuZFN0YXRlID0gYmxlbmRTdGF0ZTsKKyAgICAgICAgbUN1
ckJsZW5kQ29sb3IgPSBibGVuZENvbG9yOworICAgIH0KKworICAgIGlmIChzYW1wbGVNYXNrQ2hh
bmdlZCkKKyAgICB7CisgICAgICAgIC8vIFNldCB0aGUgbXVsdGlzYW1wbGUgbWFzaworICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRUFOVElBTElBUywgVFJV
RSk7CisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExFTUFT
Sywgc3RhdGljX2Nhc3Q8RFdPUkQ+KHNhbXBsZU1hc2spKTsKKworICAgICAgICBtQ3VyU2FtcGxl
TWFzayA9IHNhbXBsZU1hc2s7CisgICAgfQorCisgICAgbUZvcmNlU2V0QmxlbmRTdGF0ZSA9IGZh
bHNlOworfQorCit2b2lkIFJlbmRlcmVyOTo6c2V0RGVwdGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6
OkRlcHRoU3RlbmNpbFN0YXRlICZkZXB0aFN0ZW5jaWxTdGF0ZSwgaW50IHN0ZW5jaWxSZWYsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0ZW5jaWxCYWNrUmVmLCBi
b29sIGZyb250RmFjZUNDVykKK3sKKyAgICBib29sIGRlcHRoU3RlbmNpbFN0YXRlQ2hhbmdlZCA9
IG1Gb3JjZVNldERlcHRoU3RlbmNpbFN0YXRlIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtZW1jbXAoJmRlcHRoU3RlbmNpbFN0YXRlLCAmbUN1ckRlcHRoU3RlbmNpbFN0
YXRlLCBzaXplb2YoZ2w6OkRlcHRoU3RlbmNpbFN0YXRlKSkgIT0gMDsKKyAgICBib29sIHN0ZW5j
aWxSZWZDaGFuZ2VkID0gbUZvcmNlU2V0RGVwdGhTdGVuY2lsU3RhdGUgfHwgc3RlbmNpbFJlZiAh
PSBtQ3VyU3RlbmNpbFJlZiB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVuY2ls
QmFja1JlZiAhPSBtQ3VyU3RlbmNpbEJhY2tSZWY7CisgICAgYm9vbCBmcm9udEZhY2VDQ1dDaGFu
Z2VkID0gbUZvcmNlU2V0RGVwdGhTdGVuY2lsU3RhdGUgfHwgZnJvbnRGYWNlQ0NXICE9IG1DdXJG
cm9udEZhY2VDQ1c7CisKKyAgICBpZiAoZGVwdGhTdGVuY2lsU3RhdGVDaGFuZ2VkKQorICAgIHsK
KyAgICAgICAgaWYgKGRlcHRoU3RlbmNpbFN0YXRlLmRlcHRoVGVzdCkKKyAgICAgICAgeworICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRDNEWkJfVFJV
RSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRlVOQywgZ2xf
ZDNkOTo6Q29udmVydENvbXBhcmlzb24oZGVwdGhTdGVuY2lsU3RhdGUuZGVwdGhGdW5jKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBEM0RaQl9GQUxTRSk7CisgICAgICAgIH0KKwor
ICAgICAgICBtQ3VyRGVwdGhTdGVuY2lsU3RhdGUgPSBkZXB0aFN0ZW5jaWxTdGF0ZTsKKyAgICB9
CisKKyAgICBpZiAoZGVwdGhTdGVuY2lsU3RhdGVDaGFuZ2VkIHx8IHN0ZW5jaWxSZWZDaGFuZ2Vk
IHx8IGZyb250RmFjZUNDV0NoYW5nZWQpCisgICAgeworICAgICAgICBpZiAoZGVwdGhTdGVuY2ls
U3RhdGUuc3RlbmNpbFRlc3QgJiYgbUN1clN0ZW5jaWxTaXplID4gMCkKKyAgICAgICAgeworICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgVFJV
RSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19UV09TSURFRFNU
RU5DSUxNT0RFLCBUUlVFKTsKKworICAgICAgICAgICAgLy8gRklYTUU6IFVuc3VwcG9ydGVkIGJ5
IEQzRDkKKyAgICAgICAgICAgIGNvbnN0IEQzRFJFTkRFUlNUQVRFVFlQRSBEM0RSU19DQ1dfU1RF
TkNJTFJFRiA9IEQzRFJTX1NURU5DSUxSRUY7CisgICAgICAgICAgICBjb25zdCBEM0RSRU5ERVJT
VEFURVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxNQVNLID0gRDNEUlNfU1RFTkNJTE1BU0s7CisgICAg
ICAgICAgICBjb25zdCBEM0RSRU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxXUklURU1B
U0sgPSBEM0RSU19TVEVOQ0lMV1JJVEVNQVNLOworICAgICAgICAgICAgaWYgKGRlcHRoU3RlbmNp
bFN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sgIT0gZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbEJhY2tX
cml0ZW1hc2sgfHwKKyAgICAgICAgICAgICAgICBzdGVuY2lsUmVmICE9IHN0ZW5jaWxCYWNrUmVm
IHx8CisgICAgICAgICAgICAgICAgZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbE1hc2sgIT0gZGVw
dGhTdGVuY2lsU3RhdGUuc3RlbmNpbEJhY2tNYXNrKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIEVSUigiU2VwYXJhdGUgZnJvbnQvYmFjayBzdGVuY2lsIHdyaXRlbWFza3MsIHJlZmVy
ZW5jZSB2YWx1ZXMsIG9yIHN0ZW5jaWwgbWFzayB2YWx1ZXMgYXJlIGludmFsaWQgdW5kZXIgV2Vi
R0wuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGdldCB0aGUgbWF4aW11bSBz
aXplIG9mIHRoZSBzdGVuY2lsIHJlZgorICAgICAgICAgICAgdW5zaWduZWQgaW50IG1heFN0ZW5j
aWwgPSAoMSA8PCBtQ3VyU3RlbmNpbFNpemUpIC0gMTsKKworICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoZnJvbnRGYWNlQ0NXID8gRDNEUlNfU1RFTkNJTFdSSVRFTUFTSyA6IEQz
RFJTX0NDV19TVEVOQ0lMV1JJVEVNQVNLLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbFdyaXRlbWFzayk7CisgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShmcm9udEZhY2VDQ1cgPyBEM0RSU19TVEVOQ0lMRlVOQyA6
IEQzRFJTX0NDV19TVEVOQ0lMRlVOQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsX2QzZDk6OkNvbnZlcnRDb21wYXJpc29uKGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxG
dW5jKSk7CisKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGZyb250RmFjZUND
VyA/IEQzRFJTX1NURU5DSUxSRUYgOiBEM0RSU19DQ1dfU1RFTkNJTFJFRiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChzdGVuY2lsUmVmIDwgKGludCltYXhTdGVuY2lsKSA/
IHN0ZW5jaWxSZWYgOiBtYXhTdGVuY2lsKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKGZyb250RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxNQVNLIDogRDNEUlNfQ0NXX1NURU5D
SUxNQVNLLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGhTdGVuY2ls
U3RhdGUuc3RlbmNpbE1hc2spOworCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShmcm9udEZhY2VDQ1cgPyBEM0RSU19TVEVOQ0lMRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMRkFJ
TCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRT
dGVuY2lsT3AoZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbEZhaWwpKTsKKyAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKGZyb250RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxaRkFJTCA6
IEQzRFJTX0NDV19TVEVOQ0lMWkZBSUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbF9kM2Q5OjpDb252ZXJ0U3RlbmNpbE9wKGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxQ
YXNzRGVwdGhGYWlsKSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShmcm9u
dEZhY2VDQ1cgPyBEM0RSU19TVEVOQ0lMUEFTUyA6IEQzRFJTX0NDV19TVEVOQ0lMUEFTUywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRTdGVuY2ls
T3AoZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MpKTsKKworICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoIWZyb250RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxX
UklURU1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTFdSSVRFTUFTSywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNr
KTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKCFmcm9udEZhY2VDQ1cgPyBE
M0RSU19TVEVOQ0lMRlVOQyA6IEQzRFJTX0NDV19TVEVOQ0lMRlVOQywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRDb21wYXJpc29uKGRlcHRoU3Rl
bmNpbFN0YXRlLnN0ZW5jaWxCYWNrRnVuYykpOworCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZSghZnJvbnRGYWNlQ0NXID8gRDNEUlNfU1RFTkNJTFJFRiA6IEQzRFJTX0NDV19T
VEVOQ0lMUkVGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0ZW5jaWxC
YWNrUmVmIDwgKGludCltYXhTdGVuY2lsKSA/IHN0ZW5jaWxCYWNrUmVmIDogbWF4U3RlbmNpbCk7
CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZSghZnJvbnRGYWNlQ0NXID8gRDNE
UlNfU1RFTkNJTE1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTE1BU0ssCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsQmFja01hc2spOwor
CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZSghZnJvbnRGYWNlQ0NXID8gRDNE
UlNfU1RFTkNJTEZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTEZBSUwsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbF9kM2Q5OjpDb252ZXJ0U3RlbmNpbE9wKGRlcHRoU3RlbmNp
bFN0YXRlLnN0ZW5jaWxCYWNrRmFpbCkpOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoIWZyb250RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxaRkFJTCA6IEQzRFJTX0NDV19TVEVO
Q0lMWkZBSUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9kM2Q5OjpD
b252ZXJ0U3RlbmNpbE9wKGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFp
bCkpOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoIWZyb250RmFjZUNDVyA/
IEQzRFJTX1NURU5DSUxQQVNTIDogRDNEUlNfQ0NXX1NURU5DSUxQQVNTLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6Q29udmVydFN0ZW5jaWxPcChkZXB0aFN0
ZW5jaWxTdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MpKTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX1NURU5DSUxFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX1pXUklURUVOQUJMRSwgZGVwdGhTdGVuY2lsU3RhdGUuZGVw
dGhNYXNrID8gVFJVRSA6IEZBTFNFKTsKKworICAgICAgICBtQ3VyU3RlbmNpbFJlZiA9IHN0ZW5j
aWxSZWY7CisgICAgICAgIG1DdXJTdGVuY2lsQmFja1JlZiA9IHN0ZW5jaWxCYWNrUmVmOworICAg
ICAgICBtQ3VyRnJvbnRGYWNlQ0NXID0gZnJvbnRGYWNlQ0NXOworICAgIH0KKworICAgIG1Gb3Jj
ZVNldERlcHRoU3RlbmNpbFN0YXRlID0gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyZXI5OjpzZXRT
Y2lzc29yUmVjdGFuZ2xlKGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNjaXNzb3IsIGJvb2wgZW5hYmxl
ZCkKK3sKKyAgICBib29sIHNjaXNzb3JDaGFuZ2VkID0gbUZvcmNlU2V0U2Npc3NvciB8fAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBtZW1jbXAoJnNjaXNzb3IsICZtQ3VyU2Npc3Nvciwgc2l6
ZW9mKGdsOjpSZWN0YW5nbGUpKSAhPSAwIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgIGVu
YWJsZWQgIT0gbVNjaXNzb3JFbmFibGVkOworCisgICAgaWYgKHNjaXNzb3JDaGFuZ2VkKQorICAg
IHsKKyAgICAgICAgaWYgKGVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJFQ1QgcmVj
dDsKKyAgICAgICAgICAgIHJlY3QubGVmdCA9IGdsOjpjbGFtcChzY2lzc29yLngsIDAsIHN0YXRp
Y19jYXN0PGludD4obVJlbmRlclRhcmdldERlc2Mud2lkdGgpKTsKKyAgICAgICAgICAgIHJlY3Qu
dG9wID0gZ2w6OmNsYW1wKHNjaXNzb3IueSwgMCwgc3RhdGljX2Nhc3Q8aW50PihtUmVuZGVyVGFy
Z2V0RGVzYy5oZWlnaHQpKTsKKyAgICAgICAgICAgIHJlY3QucmlnaHQgPSBnbDo6Y2xhbXAoc2Np
c3Nvci54ICsgc2Npc3Nvci53aWR0aCwgMCwgc3RhdGljX2Nhc3Q8aW50PihtUmVuZGVyVGFyZ2V0
RGVzYy53aWR0aCkpOworICAgICAgICAgICAgcmVjdC5ib3R0b20gPSBnbDo6Y2xhbXAoc2Npc3Nv
ci55ICsgc2Npc3Nvci5oZWlnaHQsIDAsIHN0YXRpY19jYXN0PGludD4obVJlbmRlclRhcmdldERl
c2MuaGVpZ2h0KSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRTY2lzc29yUmVjdCgmcmVjdCk7
CisgICAgICAgIH0KKworICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TQ0lT
U09SVEVTVEVOQUJMRSwgZW5hYmxlZCA/IFRSVUUgOiBGQUxTRSk7CisKKyAgICAgICAgbVNjaXNz
b3JFbmFibGVkID0gZW5hYmxlZDsKKyAgICAgICAgbUN1clNjaXNzb3IgPSBzY2lzc29yOworICAg
IH0KKworICAgIG1Gb3JjZVNldFNjaXNzb3IgPSBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJlcjk6
OnNldFZpZXdwb3J0KGNvbnN0IGdsOjpSZWN0YW5nbGUgJnZpZXdwb3J0LCBmbG9hdCB6TmVhciwg
ZmxvYXQgekZhciwgR0xlbnVtIGRyYXdNb2RlLCBHTGVudW0gZnJvbnRGYWNlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgaWdub3JlVmlld3BvcnQpCit7CisgICAgZ2w6OlJlY3Rh
bmdsZSBhY3R1YWxWaWV3cG9ydCA9IHZpZXdwb3J0OworICAgIGZsb2F0IGFjdHVhbFpOZWFyID0g
Z2w6OmNsYW1wMDEoek5lYXIpOworICAgIGZsb2F0IGFjdHVhbFpGYXIgPSBnbDo6Y2xhbXAwMSh6
RmFyKTsKKyAgICBpZiAoaWdub3JlVmlld3BvcnQpCisgICAgeworICAgICAgICBhY3R1YWxWaWV3
cG9ydC54ID0gMDsKKyAgICAgICAgYWN0dWFsVmlld3BvcnQueSA9IDA7CisgICAgICAgIGFjdHVh
bFZpZXdwb3J0LndpZHRoID0gbVJlbmRlclRhcmdldERlc2Mud2lkdGg7CisgICAgICAgIGFjdHVh
bFZpZXdwb3J0LmhlaWdodCA9IG1SZW5kZXJUYXJnZXREZXNjLmhlaWdodDsKKyAgICAgICAgYWN0
dWFsWk5lYXIgPSAwLjBmOworICAgICAgICBhY3R1YWxaRmFyID0gMS4wZjsKKyAgICB9CisKKyAg
ICBEM0RWSUVXUE9SVDkgZHhWaWV3cG9ydDsKKyAgICBkeFZpZXdwb3J0LlggPSBnbDo6Y2xhbXAo
YWN0dWFsVmlld3BvcnQueCwgMCwgc3RhdGljX2Nhc3Q8aW50PihtUmVuZGVyVGFyZ2V0RGVzYy53
aWR0aCkpOworICAgIGR4Vmlld3BvcnQuWSA9IGdsOjpjbGFtcChhY3R1YWxWaWV3cG9ydC55LCAw
LCBzdGF0aWNfY2FzdDxpbnQ+KG1SZW5kZXJUYXJnZXREZXNjLmhlaWdodCkpOworICAgIGR4Vmll
d3BvcnQuV2lkdGggPSBnbDo6Y2xhbXAoYWN0dWFsVmlld3BvcnQud2lkdGgsIDAsIHN0YXRpY19j
YXN0PGludD4obVJlbmRlclRhcmdldERlc2Mud2lkdGgpIC0gc3RhdGljX2Nhc3Q8aW50PihkeFZp
ZXdwb3J0LlgpKTsKKyAgICBkeFZpZXdwb3J0LkhlaWdodCA9IGdsOjpjbGFtcChhY3R1YWxWaWV3
cG9ydC5oZWlnaHQsIDAsIHN0YXRpY19jYXN0PGludD4obVJlbmRlclRhcmdldERlc2MuaGVpZ2h0
KSAtIHN0YXRpY19jYXN0PGludD4oZHhWaWV3cG9ydC5ZKSk7CisgICAgZHhWaWV3cG9ydC5NaW5a
ID0gYWN0dWFsWk5lYXI7CisgICAgZHhWaWV3cG9ydC5NYXhaID0gYWN0dWFsWkZhcjsKKworICAg
IGlmIChkeFZpZXdwb3J0LldpZHRoIDw9IDAgfHwgZHhWaWV3cG9ydC5IZWlnaHQgPD0gMCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBOb3RoaW5nIHRvIHJlbmRlcgorICAgIH0K
KworICAgIGZsb2F0IGRlcHRoRnJvbnQgPSAhZ2w6OklzVHJpYW5nbGVNb2RlKGRyYXdNb2RlKSA/
IDAuMGYgOiAoZnJvbnRGYWNlID09IEdMX0NDVyA/IDEuMGYgOiAtMS4wZik7CisKKyAgICBib29s
IHZpZXdwb3J0Q2hhbmdlZCA9IG1Gb3JjZVNldFZpZXdwb3J0IHx8IG1lbWNtcCgmYWN0dWFsVmll
d3BvcnQsICZtQ3VyVmlld3BvcnQsIHNpemVvZihnbDo6UmVjdGFuZ2xlKSkgIT0gMCB8fAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsWk5lYXIgIT0gbUN1ck5lYXIgfHwgYWN0dWFs
WkZhciAhPSBtQ3VyRmFyIHx8IG1DdXJEZXB0aEZyb250ICE9IGRlcHRoRnJvbnQ7CisgICAgaWYg
KHZpZXdwb3J0Q2hhbmdlZCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFZpZXdwb3J0KCZk
eFZpZXdwb3J0KTsKKworICAgICAgICBtQ3VyVmlld3BvcnQgPSBhY3R1YWxWaWV3cG9ydDsKKyAg
ICAgICAgbUN1ck5lYXIgPSBhY3R1YWxaTmVhcjsKKyAgICAgICAgbUN1ckZhciA9IGFjdHVhbFpG
YXI7CisgICAgICAgIG1DdXJEZXB0aEZyb250ID0gZGVwdGhGcm9udDsKKworICAgICAgICBkeF9W
ZXJ0ZXhDb25zdGFudHMgdmMgPSB7MH07CisgICAgICAgIGR4X1BpeGVsQ29uc3RhbnRzIHBjID0g
ezB9OworCisgICAgICAgIHZjLnZpZXdBZGp1c3RbMF0gPSAoZmxvYXQpKChhY3R1YWxWaWV3cG9y
dC53aWR0aCAtIChpbnQpZHhWaWV3cG9ydC5XaWR0aCkgKyAyICogKGFjdHVhbFZpZXdwb3J0Lngg
LSAoaW50KWR4Vmlld3BvcnQuWCkgLSAxKSAvIGR4Vmlld3BvcnQuV2lkdGg7CisgICAgICAgIHZj
LnZpZXdBZGp1c3RbMV0gPSAoZmxvYXQpKChhY3R1YWxWaWV3cG9ydC5oZWlnaHQgLSAoaW50KWR4
Vmlld3BvcnQuSGVpZ2h0KSArIDIgKiAoYWN0dWFsVmlld3BvcnQueSAtIChpbnQpZHhWaWV3cG9y
dC5ZKSAtIDEpIC8gZHhWaWV3cG9ydC5IZWlnaHQ7CisgICAgICAgIHZjLnZpZXdBZGp1c3RbMl0g
PSAoZmxvYXQpYWN0dWFsVmlld3BvcnQud2lkdGggLyBkeFZpZXdwb3J0LldpZHRoOworICAgICAg
ICB2Yy52aWV3QWRqdXN0WzNdID0gKGZsb2F0KWFjdHVhbFZpZXdwb3J0LmhlaWdodCAvIGR4Vmll
d3BvcnQuSGVpZ2h0OworCisgICAgICAgIHBjLnZpZXdDb29yZHNbMF0gPSBhY3R1YWxWaWV3cG9y
dC53aWR0aCAgKiAwLjVmOworICAgICAgICBwYy52aWV3Q29vcmRzWzFdID0gYWN0dWFsVmlld3Bv
cnQuaGVpZ2h0ICogMC41ZjsKKyAgICAgICAgcGMudmlld0Nvb3Jkc1syXSA9IGFjdHVhbFZpZXdw
b3J0LnggKyAoYWN0dWFsVmlld3BvcnQud2lkdGggICogMC41Zik7CisgICAgICAgIHBjLnZpZXdD
b29yZHNbM10gPSBhY3R1YWxWaWV3cG9ydC55ICsgKGFjdHVhbFZpZXdwb3J0LmhlaWdodCAqIDAu
NWYpOworCisgICAgICAgIHBjLmRlcHRoRnJvbnRbMF0gPSAoYWN0dWFsWkZhciAtIGFjdHVhbFpO
ZWFyKSAqIDAuNWY7CisgICAgICAgIHBjLmRlcHRoRnJvbnRbMV0gPSAoYWN0dWFsWk5lYXIgKyBh
Y3R1YWxaRmFyKSAqIDAuNWY7CisgICAgICAgIHBjLmRlcHRoRnJvbnRbMl0gPSBkZXB0aEZyb250
OworCisgICAgICAgIHZjLmRlcHRoUmFuZ2VbMF0gPSBhY3R1YWxaTmVhcjsKKyAgICAgICAgdmMu
ZGVwdGhSYW5nZVsxXSA9IGFjdHVhbFpGYXI7CisgICAgICAgIHZjLmRlcHRoUmFuZ2VbMl0gPSBh
Y3R1YWxaRmFyIC0gYWN0dWFsWk5lYXI7CisKKyAgICAgICAgcGMuZGVwdGhSYW5nZVswXSA9IGFj
dHVhbFpOZWFyOworICAgICAgICBwYy5kZXB0aFJhbmdlWzFdID0gYWN0dWFsWkZhcjsKKyAgICAg
ICAgcGMuZGVwdGhSYW5nZVsyXSA9IGFjdHVhbFpGYXIgLSBhY3R1YWxaTmVhcjsKKworICAgICAg
ICBpZiAobWVtY21wKCZ2YywgJm1WZXJ0ZXhDb25zdGFudHMsIHNpemVvZihkeF9WZXJ0ZXhDb25z
dGFudHMpKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBtVmVydGV4Q29uc3RhbnRzID0g
dmM7CisgICAgICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChtZW1jbXAoJnBjLCAmbVBpeGVsQ29uc3RhbnRzLCBzaXplb2YoZHhfUGl4ZWxD
b25zdGFudHMpKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBtUGl4ZWxDb25zdGFudHMg
PSBwYzsKKyAgICAgICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgbUZvcmNlU2V0Vmlld3BvcnQgPSBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBSZW5kZXJlcjk6OmFwcGx5UHJpbWl0aXZlVHlwZShHTGVudW0gbW9kZSwgR0xz
aXplaSBjb3VudCkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpCisgICAgeworICAgICAgY2FzZSBHTF9Q
T0lOVFM6CisgICAgICAgIG1QcmltaXRpdmVUeXBlID0gRDNEUFRfUE9JTlRMSVNUOworICAgICAg
ICBtUHJpbWl0aXZlQ291bnQgPSBjb3VudDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X0xJTkVTOgorICAgICAgICBtUHJpbWl0aXZlVHlwZSA9IEQzRFBUX0xJTkVMSVNUOworICAgICAg
ICBtUHJpbWl0aXZlQ291bnQgPSBjb3VudCAvIDI7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9MSU5FX0xPT1A6CisgICAgICAgIG1QcmltaXRpdmVUeXBlID0gRDNEUFRfTElORVNUUklQ
OworICAgICAgICBtUHJpbWl0aXZlQ291bnQgPSBjb3VudCAtIDE7ICAgLy8gRDNEIGRvZXNuJ3Qg
c3VwcG9ydCBsaW5lIGxvb3BzLCBzbyB3ZSBkcmF3IHRoZSBsYXN0IGxpbmUgc2VwYXJhdGVseQor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTElORV9TVFJJUDoKKyAgICAgICAgbVByaW1p
dGl2ZVR5cGUgPSBEM0RQVF9MSU5FU1RSSVA7CisgICAgICAgIG1QcmltaXRpdmVDb3VudCA9IGNv
dW50IC0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RSSUFOR0xFUzoKKyAgICAg
ICAgbVByaW1pdGl2ZVR5cGUgPSBEM0RQVF9UUklBTkdMRUxJU1Q7CisgICAgICAgIG1QcmltaXRp
dmVDb3VudCA9IGNvdW50IC8gMzsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RSSUFO
R0xFX1NUUklQOgorICAgICAgICBtUHJpbWl0aXZlVHlwZSA9IEQzRFBUX1RSSUFOR0xFU1RSSVA7
CisgICAgICAgIG1QcmltaXRpdmVDb3VudCA9IGNvdW50IC0gMjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX1RSSUFOR0xFX0ZBTjoKKyAgICAgICAgbVByaW1pdGl2ZVR5cGUgPSBEM0RQ
VF9UUklBTkdMRUZBTjsKKyAgICAgICAgbVByaW1pdGl2ZUNvdW50ID0gY291bnQgLSAyOworICAg
ICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNLCBmYWxzZSk7CisgICAgfQorCisgICAgcmV0dXJuIG1QcmltaXRpdmVDb3Vu
dCA+IDA7Cit9CisKKworZ2w6OlJlbmRlcmJ1ZmZlciAqUmVuZGVyZXI5OjpnZXROdWxsQ29sb3Ji
dWZmZXIoZ2w6OlJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIpCit7CisgICAgaWYgKCFkZXB0aGJ1
ZmZlcikKKyAgICB7CisgICAgICAgIEVSUigiVW5leHBlY3RlZCBudWxsIGRlcHRoYnVmZmVyIGZv
ciBkZXB0aC1vbmx5IEZCTy4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAg
R0xzaXplaSB3aWR0aCAgPSBkZXB0aGJ1ZmZlci0+Z2V0V2lkdGgoKTsKKyAgICBHTHNpemVpIGhl
aWdodCA9IGRlcHRoYnVmZmVyLT5nZXRIZWlnaHQoKTsKKworICAgIC8vIHNlYXJjaCBjYWNoZWQg
bnVsbGNvbG9yYnVmZmVycworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX05VTExfQ09MT1JC
VUZGRVJfQ0FDSEVfRU5UUklFUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1OdWxsQ29sb3Ji
dWZmZXJDYWNoZVtpXS5idWZmZXIgIT0gTlVMTCAmJgorICAgICAgICAgICAgbU51bGxDb2xvcmJ1
ZmZlckNhY2hlW2ldLndpZHRoID09IHdpZHRoICYmCisgICAgICAgICAgICBtTnVsbENvbG9yYnVm
ZmVyQ2FjaGVbaV0uaGVpZ2h0ID09IGhlaWdodCkKKyAgICAgICAgeworICAgICAgICAgICAgbU51
bGxDb2xvcmJ1ZmZlckNhY2hlW2ldLmxydUNvdW50ID0gKyttTWF4TnVsbENvbG9yYnVmZmVyTFJV
OworICAgICAgICAgICAgcmV0dXJuIG1OdWxsQ29sb3JidWZmZXJDYWNoZVtpXS5idWZmZXI7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBnbDo6UmVuZGVyYnVmZmVyICpudWxsYnVmZmVyID0gbmV3
IGdsOjpSZW5kZXJidWZmZXIodGhpcywgMCwgbmV3IGdsOjpDb2xvcmJ1ZmZlcih0aGlzLCB3aWR0
aCwgaGVpZ2h0LCBHTF9OT05FLCAwKSk7CisKKyAgICAvLyBhZGQgbnVsbGJ1ZmZlciB0byB0aGUg
Y2FjaGUKKyAgICBOdWxsQ29sb3JidWZmZXJDYWNoZUVudHJ5ICpvbGRlc3QgPSAmbU51bGxDb2xv
cmJ1ZmZlckNhY2hlWzBdOworICAgIGZvciAoaW50IGkgPSAxOyBpIDwgTlVNX05VTExfQ09MT1JC
VUZGRVJfQ0FDSEVfRU5UUklFUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1OdWxsQ29sb3Ji
dWZmZXJDYWNoZVtpXS5scnVDb3VudCA8IG9sZGVzdC0+bHJ1Q291bnQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG9sZGVzdCA9ICZtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV07CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBkZWxldGUgb2xkZXN0LT5idWZmZXI7CisgICAgb2xkZXN0LT5idWZmZXIg
PSBudWxsYnVmZmVyOworICAgIG9sZGVzdC0+bHJ1Q291bnQgPSArK21NYXhOdWxsQ29sb3JidWZm
ZXJMUlU7CisgICAgb2xkZXN0LT53aWR0aCA9IHdpZHRoOworICAgIG9sZGVzdC0+aGVpZ2h0ID0g
aGVpZ2h0OworCisgICAgcmV0dXJuIG51bGxidWZmZXI7Cit9CisKK2Jvb2wgUmVuZGVyZXI5Ojph
cHBseVJlbmRlclRhcmdldChnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyKQoreworICAgIC8v
IGlmIHRoZXJlIGlzIG5vIGNvbG9yIGF0dGFjaG1lbnQgd2UgbXVzdCBzeW50aGVzaXplIGEgTlVM
TCBjb2xvcmF0dGFjaG1lbnQKKyAgICAvLyB0byBrZWVwIHRoZSBEM0QgcnVudGltZSBoYXBweS4g
IFRoaXMgc2hvdWxkIG9ubHkgYmUgcG9zc2libGUgaWYgZGVwdGggdGV4dHVyaW5nLgorICAgIGds
OjpSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9IE5VTEw7CisgICAgaWYgKGZyYW1l
YnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoMCkgIT0gR0xfTk9ORSkKKyAgICB7CisgICAgICAg
IHJlbmRlcmJ1ZmZlck9iamVjdCA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigwKTsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmVuZGVyYnVmZmVyT2JqZWN0ID0gZ2V0TnVs
bENvbG9yYnVmZmVyKGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpKTsKKyAgICB9CisgICAg
aWYgKCFyZW5kZXJidWZmZXJPYmplY3QpCisgICAgeworICAgICAgICBFUlIoInVuYWJsZSB0byBs
b2NhdGUgcmVuZGVyYnVmZmVyIGZvciBGQk8uIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBib29sIHJlbmRlclRhcmdldENoYW5nZWQgPSBmYWxzZTsKKyAgICB1bnNpZ25l
ZCBpbnQgcmVuZGVyVGFyZ2V0U2VyaWFsID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRTZXJpYWwo
KTsKKyAgICBpZiAocmVuZGVyVGFyZ2V0U2VyaWFsICE9IG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2Vy
aWFsKQorICAgIHsKKyAgICAgICAgLy8gQXBwbHkgdGhlIHJlbmRlciB0YXJnZXQgb24gdGhlIGRl
dmljZQorICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0U3VyZmFjZSA9IE5V
TEw7CisKKyAgICAgICAgUmVuZGVyVGFyZ2V0ICpyZW5kZXJUYXJnZXQgPSByZW5kZXJidWZmZXJP
YmplY3QtPmdldFJlbmRlclRhcmdldCgpOworICAgICAgICBpZiAocmVuZGVyVGFyZ2V0KQorICAg
ICAgICB7CisgICAgICAgICAgICByZW5kZXJUYXJnZXRTdXJmYWNlID0gUmVuZGVyVGFyZ2V0OTo6
bWFrZVJlbmRlclRhcmdldDkocmVuZGVyVGFyZ2V0KS0+Z2V0U3VyZmFjZSgpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKCFyZW5kZXJUYXJnZXRTdXJmYWNlKQorICAgICAgICB7CisgICAgICAg
ICAgICBFUlIoInJlbmRlciB0YXJnZXQgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBDb250ZXh0IG11c3QgYmUgbG9zdAorICAgICAg
ICB9CisKKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIHJlbmRlclRhcmdldFN1
cmZhY2UpOworICAgICAgICByZW5kZXJUYXJnZXRTdXJmYWNlLT5SZWxlYXNlKCk7CisKKyAgICAg
ICAgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwgPSByZW5kZXJUYXJnZXRTZXJpYWw7CisgICAg
ICAgIHJlbmRlclRhcmdldENoYW5nZWQgPSB0cnVlOworICAgIH0KKworICAgIGdsOjpSZW5kZXJi
dWZmZXIgKmRlcHRoU3RlbmNpbCA9IE5VTEw7CisgICAgdW5zaWduZWQgaW50IGRlcHRoYnVmZmVy
U2VyaWFsID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbGJ1ZmZlclNlcmlhbCA9IDA7Cisg
ICAgaWYgKGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQorICAg
IHsKKyAgICAgICAgZGVwdGhTdGVuY2lsID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCk7
CisgICAgICAgIGlmICghZGVwdGhTdGVuY2lsKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIo
IkRlcHRoIHN0ZW5jaWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGRlcHRoYnVmZmVyU2VyaWFsID0g
ZGVwdGhTdGVuY2lsLT5nZXRTZXJpYWwoKTsKKyAgICB9CisgICAgZWxzZSBpZiAoZnJhbWVidWZm
ZXItPmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKKyAgICB7CisgICAgICAgIGRl
cHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCk7CisgICAgICAgIGlm
ICghZGVwdGhTdGVuY2lsKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkRlcHRoIHN0ZW5j
aWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorCisgICAgICAgIHN0ZW5jaWxidWZmZXJTZXJpYWwgPSBkZXB0aFN0ZW5j
aWwtPmdldFNlcmlhbCgpOworICAgIH0KKworICAgIGlmIChkZXB0aGJ1ZmZlclNlcmlhbCAhPSBt
QXBwbGllZERlcHRoYnVmZmVyU2VyaWFsIHx8CisgICAgICAgIHN0ZW5jaWxidWZmZXJTZXJpYWwg
IT0gbUFwcGxpZWRTdGVuY2lsYnVmZmVyU2VyaWFsIHx8CisgICAgICAgICFtRGVwdGhTdGVuY2ls
SW5pdGlhbGl6ZWQpCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgZGVwdGhTaXplID0gMDsK
KyAgICAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxTaXplID0gMDsKKworICAgICAgICAvLyBBcHBs
eSB0aGUgZGVwdGggc3RlbmNpbCBvbiB0aGUgZGV2aWNlCisgICAgICAgIGlmIChkZXB0aFN0ZW5j
aWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5j
aWxTdXJmYWNlID0gTlVMTDsKKyAgICAgICAgICAgIFJlbmRlclRhcmdldCAqZGVwdGhTdGVuY2ls
UmVuZGVyVGFyZ2V0ID0gZGVwdGhTdGVuY2lsLT5nZXREZXB0aFN0ZW5jaWwoKTsKKworICAgICAg
ICAgICAgaWYgKGRlcHRoU3RlbmNpbFJlbmRlclRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBkZXB0aFN0ZW5jaWxTdXJmYWNlID0gUmVuZGVyVGFyZ2V0OTo6bWFrZVJlbmRl
clRhcmdldDkoZGVwdGhTdGVuY2lsUmVuZGVyVGFyZ2V0KS0+Z2V0U3VyZmFjZSgpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWRlcHRoU3RlbmNpbFN1cmZhY2UpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgRVJSKCJkZXB0aCBzdGVuY2lsIHBvaW50ZXIgdW5leHBl
Y3RlZGx5IG51bGwuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIENvbnRl
eHQgbXVzdCBiZSBsb3N0CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1EZXZpY2UtPlNl
dERlcHRoU3RlbmNpbFN1cmZhY2UoZGVwdGhTdGVuY2lsU3VyZmFjZSk7CisgICAgICAgICAgICBk
ZXB0aFN0ZW5jaWxTdXJmYWNlLT5SZWxlYXNlKCk7CisKKyAgICAgICAgICAgIGRlcHRoU2l6ZSA9
IGRlcHRoU3RlbmNpbC0+Z2V0RGVwdGhTaXplKCk7CisgICAgICAgICAgICBzdGVuY2lsU2l6ZSA9
IGRlcHRoU3RlbmNpbC0+Z2V0U3RlbmNpbFNpemUoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2Uo
TlVMTCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1EZXB0aFN0ZW5jaWxJbml0aWFsaXpl
ZCB8fCBkZXB0aFNpemUgIT0gbUN1ckRlcHRoU2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
bUN1ckRlcHRoU2l6ZSA9IGRlcHRoU2l6ZTsKKyAgICAgICAgICAgIG1Gb3JjZVNldFJhc3RlclN0
YXRlID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbURlcHRoU3RlbmNpbEluaXRp
YWxpemVkIHx8IHN0ZW5jaWxTaXplICE9IG1DdXJTdGVuY2lsU2l6ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgbUN1clN0ZW5jaWxTaXplID0gc3RlbmNpbFNpemU7CisgICAgICAgICAgICBtRm9y
Y2VTZXREZXB0aFN0ZW5jaWxTdGF0ZSA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBtQXBw
bGllZERlcHRoYnVmZmVyU2VyaWFsID0gZGVwdGhidWZmZXJTZXJpYWw7CisgICAgICAgIG1BcHBs
aWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCA9IHN0ZW5jaWxidWZmZXJTZXJpYWw7CisgICAgICAgIG1E
ZXB0aFN0ZW5jaWxJbml0aWFsaXplZCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKHJlbmRlclRh
cmdldENoYW5nZWQgfHwgIW1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQpCisgICAgeworICAg
ICAgICBtRm9yY2VTZXRTY2lzc29yID0gdHJ1ZTsKKyAgICAgICAgbUZvcmNlU2V0Vmlld3BvcnQg
PSB0cnVlOworCisgICAgICAgIG1SZW5kZXJUYXJnZXREZXNjLndpZHRoID0gcmVuZGVyYnVmZmVy
T2JqZWN0LT5nZXRXaWR0aCgpOworICAgICAgICBtUmVuZGVyVGFyZ2V0RGVzYy5oZWlnaHQgPSBy
ZW5kZXJidWZmZXJPYmplY3QtPmdldEhlaWdodCgpOworICAgICAgICBtUmVuZGVyVGFyZ2V0RGVz
Yy5mb3JtYXQgPSByZW5kZXJidWZmZXJPYmplY3QtPmdldEFjdHVhbEZvcm1hdCgpOworICAgICAg
ICBtUmVuZGVyVGFyZ2V0RGVzY0luaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworR0xlbnVtIFJlbmRlcmVyOTo6YXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0
cmlidXRlc1tdLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMp
Cit7CisgICAgVHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW2dsOjpNQVhfVkVSVEVYX0FU
VFJJQlNdOworICAgIEdMZW51bSBlcnIgPSBtVmVydGV4RGF0YU1hbmFnZXItPnByZXBhcmVWZXJ0
ZXhEYXRhKHZlcnRleEF0dHJpYnV0ZXMsIHByb2dyYW1CaW5hcnksIGZpcnN0LCBjb3VudCwgYXR0
cmlidXRlcywgaW5zdGFuY2VzKTsKKyAgICBpZiAoZXJyICE9IEdMX05PX0VSUk9SKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG1WZXJ0ZXhEZWNs
YXJhdGlvbkNhY2hlLmFwcGx5RGVjbGFyYXRpb24obURldmljZSwgYXR0cmlidXRlcywgcHJvZ3Jh
bUJpbmFyeSwgaW5zdGFuY2VzLCAmbVJlcGVhdERyYXcpOworfQorCisvLyBBcHBsaWVzIHRoZSBp
bmRpY2VzIGFuZCBlbGVtZW50IGFycmF5IGJpbmRpbmdzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmlj
ZQorR0xlbnVtIFJlbmRlcmVyOTo6YXBwbHlJbmRleEJ1ZmZlcihjb25zdCBHTHZvaWQgKmluZGlj
ZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgR0xzaXplaSBjb3VudCwgR0xlbnVt
IG1vZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pCit7Cisg
ICAgR0xlbnVtIGVyciA9IG1JbmRleERhdGFNYW5hZ2VyLT5wcmVwYXJlSW5kZXhEYXRhKHR5cGUs
IGNvdW50LCBlbGVtZW50QXJyYXlCdWZmZXIsIGluZGljZXMsIGluZGV4SW5mbyk7CisKKyAgICBp
ZiAoZXJyID09IEdMX05PX0VSUk9SKQorICAgIHsKKyAgICAgICAgLy8gRGlyZWN0bHkgYmluZGlu
ZyB0aGUgc3RvcmFnZSBidWZmZXIgaXMgbm90IHN1cHBvcnRlZCBmb3IgZDNkOQorICAgICAgICBB
U1NFUlQoaW5kZXhJbmZvLT5zdG9yYWdlID09IE5VTEwpOworCisgICAgICAgIGlmIChpbmRleElu
Zm8tPnNlcmlhbCAhPSBtQXBwbGllZElCU2VyaWFsKQorICAgICAgICB7CisgICAgICAgICAgICBJ
bmRleEJ1ZmZlcjkqIGluZGV4QnVmZmVyID0gSW5kZXhCdWZmZXI5OjptYWtlSW5kZXhCdWZmZXI5
KGluZGV4SW5mby0+aW5kZXhCdWZmZXIpOworCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRJbmRp
Y2VzKGluZGV4QnVmZmVyLT5nZXRCdWZmZXIoKSk7CisgICAgICAgICAgICBtQXBwbGllZElCU2Vy
aWFsID0gaW5kZXhJbmZvLT5zZXJpYWw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
ZXJyOworfQorCit2b2lkIFJlbmRlcmVyOTo6ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXpl
aSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpCit7CisgICAgc3RhcnRTY2VuZSgpOworICAgICAg
ICAKKyAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCisgICAgeworICAgICAgICBkcmF3TGlu
ZUxvb3AoY291bnQsIEdMX05PTkUsIE5VTEwsIDAsIE5VTEwpOworICAgIH0KKyAgICBlbHNlIGlm
IChpbnN0YW5jZXMgPiAwKQorICAgIHsKKyAgICAgICAgU3RhdGljSW5kZXhCdWZmZXJJbnRlcmZh
Y2UgKmNvdW50aW5nSUIgPSBtSW5kZXhEYXRhTWFuYWdlci0+Z2V0Q291bnRpbmdJbmRpY2VzKGNv
dW50KTsKKyAgICAgICAgaWYgKGNvdW50aW5nSUIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChtQXBwbGllZElCU2VyaWFsICE9IGNvdW50aW5nSUItPmdldFNlcmlhbCgpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIEluZGV4QnVmZmVyOSAqaW5kZXhCdWZmZXIgPSBJbmRleEJ1
ZmZlcjk6Om1ha2VJbmRleEJ1ZmZlcjkoY291bnRpbmdJQi0+Z2V0SW5kZXhCdWZmZXIoKSk7CisK
KyAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRJbmRpY2VzKGluZGV4QnVmZmVyLT5nZXRCdWZm
ZXIoKSk7CisgICAgICAgICAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IGNvdW50aW5nSUItPmdl
dFNlcmlhbCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IG1SZXBlYXREcmF3OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURl
dmljZS0+RHJhd0luZGV4ZWRQcmltaXRpdmUobVByaW1pdGl2ZVR5cGUsIDAsIDAsIGNvdW50LCAw
LCBtUHJpbWl0aXZlQ291bnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGEgY291bnRp
bmcgaW5kZXggYnVmZmVyIGZvciBnbERyYXdBcnJheXNJbnN0YW5jZWQuIik7CisgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgfQor
ICAgIGVsc2UgICAvLyBSZWd1bGFyIGNhc2UKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPkRyYXdQ
cmltaXRpdmUobVByaW1pdGl2ZVR5cGUsIDAsIG1QcmltaXRpdmVDb3VudCk7CisgICAgfQorfQor
Cit2b2lkIFJlbmRlcmVyOTo6ZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50
LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50
QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbywgR0xzaXpl
aSAvKmluc3RhbmNlcyovKQoreworICAgIHN0YXJ0U2NlbmUoKTsKKworICAgIGlmIChtb2RlID09
IEdMX1BPSU5UUykKKyAgICB7CisgICAgICAgIGRyYXdJbmRleGVkUG9pbnRzKGNvdW50LCB0eXBl
LCBpbmRpY2VzLCBpbmRleEluZm8ubWluSW5kZXgsIGVsZW1lbnRBcnJheUJ1ZmZlcik7CisgICAg
fQorICAgIGVsc2UgaWYgKG1vZGUgPT0gR0xfTElORV9MT09QKQorICAgIHsKKyAgICAgICAgZHJh
d0xpbmVMb29wKGNvdW50LCB0eXBlLCBpbmRpY2VzLCBpbmRleEluZm8ubWluSW5kZXgsIGVsZW1l
bnRBcnJheUJ1ZmZlcik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbVJlcGVhdERyYXc7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgR0xz
aXplaSB2ZXJ0ZXhDb3VudCA9IGluZGV4SW5mby5tYXhJbmRleCAtIGluZGV4SW5mby5taW5JbmRl
eCArIDE7CisgICAgICAgICAgICBtRGV2aWNlLT5EcmF3SW5kZXhlZFByaW1pdGl2ZShtUHJpbWl0
aXZlVHlwZSwgLShJTlQpaW5kZXhJbmZvLm1pbkluZGV4LCBpbmRleEluZm8ubWluSW5kZXgsIHZl
cnRleENvdW50LCBpbmRleEluZm8uc3RhcnRJbmRleCwgbVByaW1pdGl2ZUNvdW50KTsKKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCBSZW5kZXJlcjk6OmRyYXdMaW5lTG9vcChHTHNpemVpIGNv
dW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBpbnQgbWluSW5kZXgsIGds
OjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlcikKK3sKKyAgICAvLyBHZXQgdGhlIHJhdyBpbmRp
Y2VzIGZvciBhbiBpbmRleGVkIGRyYXcKKyAgICBpZiAodHlwZSAhPSBHTF9OT05FICYmIGVsZW1l
bnRBcnJheUJ1ZmZlcikKKyAgICB7CisgICAgICAgIGdsOjpCdWZmZXIgKmluZGV4QnVmZmVyID0g
ZWxlbWVudEFycmF5QnVmZmVyOworICAgICAgICBCdWZmZXJTdG9yYWdlICpzdG9yYWdlID0gaW5k
ZXhCdWZmZXItPmdldFN0b3JhZ2UoKTsKKyAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gcmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4oaW5kaWNlcyk7CisgICAgICAgIGluZGljZXMgPSBzdGF0aWNf
Y2FzdDxjb25zdCBHTHVieXRlKj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSArIG9mZnNldDsKKyAgICB9
CisKKyAgICB1bnNpZ25lZCBpbnQgc3RhcnRJbmRleCA9IDA7CisKKyAgICBpZiAoZ2V0MzJCaXRJ
bmRleFN1cHBvcnQoKSkKKyAgICB7CisgICAgICAgIGlmICghbUxpbmVMb29wSUIpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1MaW5lTG9vcElCID0gbmV3IFN0cmVhbWluZ0luZGV4QnVmZmVySW50
ZXJmYWNlKHRoaXMpOworICAgICAgICAgICAgaWYgKCFtTGluZUxvb3BJQi0+cmVzZXJ2ZUJ1ZmZl
clNwYWNlKElOSVRJQUxfSU5ERVhfQlVGRkVSX1NJWkUsIEdMX1VOU0lHTkVEX0lOVCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZGVsZXRlIG1MaW5lTG9vcElCOworICAgICAgICAg
ICAgICAgIG1MaW5lTG9vcElCID0gTlVMTDsKKworICAgICAgICAgICAgICAgIEVSUigiQ291bGQg
bm90IGNyZWF0ZSBhIDMyLWJpdCBsb29waW5nIGluZGV4IGJ1ZmZlciBmb3IgR0xfTElORV9MT09Q
LiIpOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5z
aWduZWQgaW50Pihjb3VudCkgKyAxID4gKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50
Pjo6bWF4KCkgLyBzaXplb2YodW5zaWduZWQgaW50KSkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IEVSUigiQ291bGQgbm90IGNyZWF0ZSBhIDMyLWJpdCBsb29waW5nIGluZGV4IGJ1ZmZlciBmb3Ig
R0xfTElORV9MT09QLCB0b28gbWFueSBpbmRpY2VzIHJlcXVpcmVkLiIpOworICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIENoZWNrZWQgYnkgUmVuZGVyZXI5OjphcHBseVByaW1pdGl2ZVR5cGUKKyAgICAgICAgQVNT
RVJUKGNvdW50ID49IDApOworCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBzcGFjZU5lZWRl
ZCA9IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGNvdW50KSArIDEpICogc2l6ZW9mKHVuc2ln
bmVkIGludCk7CisgICAgICAgIGlmICghbUxpbmVMb29wSUItPnJlc2VydmVCdWZmZXJTcGFjZShz
cGFjZU5lZWRlZCwgR0xfVU5TSUdORURfSU5UKSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJS
KCJDb3VsZCBub3QgcmVzZXJ2ZSBlbm91Z2ggc3BhY2UgaW4gbG9vcGluZyBpbmRleCBidWZmZXIg
Zm9yIEdMX0xJTkVfTE9PUC4iKTsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkKiBtYXBwZWRNZW1vcnkgPSBO
VUxMOworICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMDsKKyAgICAgICAgaWYgKCFtTGlu
ZUxvb3BJQi0+bWFwQnVmZmVyKHNwYWNlTmVlZGVkLCAmbWFwcGVkTWVtb3J5LCAmb2Zmc2V0KSkK
KyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgbWFwIGluZGV4IGJ1ZmZlciBm
b3IgR0xfTElORV9MT09QLiIpOworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXJ0SW5kZXggPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBpbnQ+KG9mZnNldCkgLyA0OworICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEg
PSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KG1hcHBlZE1lbW9yeSk7CisKKyAgICAg
ICAgc3dpdGNoICh0eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9OT05FOiAgIC8v
IE5vbi1pbmRleGVkIGRyYXcKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkYXRhW2ldID0gaTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGRhdGFbY291bnRdID0gMDsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBk
YXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpW2ldOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVi
eXRlKj4oaW5kaWNlcylbMF07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX1NIT1JUOgorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2Fz
dDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpW2ldOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpWzBd
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6Cisg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGlu
ZGljZXMpW2ldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0
aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVswXTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIW1MaW5lTG9vcElCLT51bm1hcEJ1ZmZlcigpKQorICAgICAgICB7CisgICAgICAgICAgICBF
UlIoIkNvdWxkIG5vdCB1bm1hcCBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKKyAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKCFtTGluZUxvb3BJQikKKyAgICAg
ICAgeworICAgICAgICAgICAgbUxpbmVMb29wSUIgPSBuZXcgU3RyZWFtaW5nSW5kZXhCdWZmZXJJ
bnRlcmZhY2UodGhpcyk7CisgICAgICAgICAgICBpZiAoIW1MaW5lTG9vcElCLT5yZXNlcnZlQnVm
ZmVyU3BhY2UoSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwgR0xfVU5TSUdORURfU0hPUlQpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBtTGluZUxvb3BJQjsKKyAgICAg
ICAgICAgICAgICBtTGluZUxvb3BJQiA9IE5VTEw7CisKKyAgICAgICAgICAgICAgICBFUlIoIkNv
dWxkIG5vdCBjcmVhdGUgYSAxNi1iaXQgbG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVf
TE9PUC4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQ2hlY2tlZCBieSBS
ZW5kZXJlcjk6OmFwcGx5UHJpbWl0aXZlVHlwZQorICAgICAgICBBU1NFUlQoY291bnQgPj0gMCk7
CisKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oY291bnQpICsgMSA+IChz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0Pjo6bWF4KCkgLyBzaXplb2YodW5zaWdu
ZWQgc2hvcnQpKSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRl
IGEgMTYtYml0IGxvb3BpbmcgaW5kZXggYnVmZmVyIGZvciBHTF9MSU5FX0xPT1AsIHRvbyBtYW55
IGluZGljZXMgcmVxdWlyZWQuIik7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHNw
YWNlTmVlZGVkID0gKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oY291bnQpICsgMSkgKiBzaXpl
b2YodW5zaWduZWQgc2hvcnQpOworICAgICAgICBpZiAoIW1MaW5lTG9vcElCLT5yZXNlcnZlQnVm
ZmVyU3BhY2Uoc3BhY2VOZWVkZWQsIEdMX1VOU0lHTkVEX1NIT1JUKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgRVJSKCJDb3VsZCBub3QgcmVzZXJ2ZSBlbm91Z2ggc3BhY2UgaW4gbG9vcGluZyBp
bmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKKyAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkKiBtYXBw
ZWRNZW1vcnkgPSBOVUxMOworICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0OworICAgICAgICBp
ZiAobUxpbmVMb29wSUItPm1hcEJ1ZmZlcihzcGFjZU5lZWRlZCwgJm1hcHBlZE1lbW9yeSwgJm9m
ZnNldCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiQ291bGQgbm90IG1hcCBpbmRleCBi
dWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKworICAgICAgICBzdGFydEluZGV4ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgaW50PihvZmZzZXQpIC8gMjsKKyAgICAgICAgdW5zaWduZWQgc2hv
cnQgKmRhdGEgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4obWFwcGVkTWVtb3J5
KTsKKworICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdM
X05PTkU6ICAgLy8gTm9uLWluZGV4ZWQgZHJhdworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRhdGFbaV0g
PSBpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGF0YVtjb3VudF0gPSAwOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oaW5kaWNlcylb
aV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0
PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKVswXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGF0YVtpXSA9
IHN0YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNlcylbaV07CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4o
aW5kaWNlcylbMF07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX0lOVDoKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
R0x1aW50Kj4oaW5kaWNlcylbaV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkYXRhW2Nv
dW50XSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMpWzBdOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICghbUxpbmVMb29wSUItPnVubWFwQnVmZmVyKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEVSUigiQ291bGQgbm90IHVubWFwIGluZGV4IGJ1ZmZlciBmb3IgR0xfTElORV9M
T09QLiIpOworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9IG1MaW5lTG9v
cElCLT5nZXRTZXJpYWwoKSkKKyAgICB7CisgICAgICAgIEluZGV4QnVmZmVyOSAqaW5kZXhCdWZm
ZXIgPSBJbmRleEJ1ZmZlcjk6Om1ha2VJbmRleEJ1ZmZlcjkobUxpbmVMb29wSUItPmdldEluZGV4
QnVmZmVyKCkpOworCisgICAgICAgIG1EZXZpY2UtPlNldEluZGljZXMoaW5kZXhCdWZmZXItPmdl
dEJ1ZmZlcigpKTsKKyAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IG1MaW5lTG9vcElCLT5nZXRT
ZXJpYWwoKTsKKyAgICB9CisKKyAgICBtRGV2aWNlLT5EcmF3SW5kZXhlZFByaW1pdGl2ZShEM0RQ
VF9MSU5FU1RSSVAsIC1taW5JbmRleCwgbWluSW5kZXgsIGNvdW50LCBzdGFydEluZGV4LCBjb3Vu
dCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIHZvaWQgZHJhd1BvaW50cyhJ
RGlyZWN0M0REZXZpY2U5KiBkZXZpY2UsIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdm9pZCAqaW5k
aWNlcywgaW50IG1pbkluZGV4KQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkr
KykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBpbmRleFZhbHVlID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgaW50PihzdGF0aWNfY2FzdDxjb25zdCBUKj4oaW5kaWNlcylbaV0pIC0gbWluSW5k
ZXg7CisgICAgICAgIGRldmljZS0+RHJhd1ByaW1pdGl2ZShEM0RQVF9QT0lOVExJU1QsIGluZGV4
VmFsdWUsIDEpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJlcjk6OmRyYXdJbmRleGVkUG9pbnRz
KEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGludCBt
aW5JbmRleCwgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyKQoreworICAgIC8vIERyYXdp
bmcgaW5kZXggcG9pbnQgbGlzdHMgaXMgdW5zdXBwb3J0ZWQgaW4gZDNkOSwgZmFsbCBiYWNrIHRv
IGEgcmVndWxhciBEcmF3UHJpbWl0aXZlIGNhbGwKKyAgICAvLyBmb3IgZWFjaCBpbmRpdmlkdWFs
IHBvaW50LiBUaGlzIGNhbGwgaXMgbm90IGV4cGVjdGVkIHRvIGhhcHBlbiBvZnRlbi4KKworICAg
IGlmIChlbGVtZW50QXJyYXlCdWZmZXIpCisgICAgeworICAgICAgICBCdWZmZXJTdG9yYWdlICpz
dG9yYWdlID0gZWxlbWVudEFycmF5QnVmZmVyLT5nZXRTdG9yYWdlKCk7CisgICAgICAgIGludHB0
cl90IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZGljZXMpOworICAgICAg
ICBpbmRpY2VzID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KHN0b3JhZ2UtPmdldERhdGEo
KSkgKyBvZmZzZXQ7CisgICAgfQorCisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9CWVRFOiAgZHJhd1BvaW50czxHTHVieXRlPihtRGV2aWNlLCBjb3Vu
dCwgaW5kaWNlcywgbWluSW5kZXgpOyAgYnJlYWs7CisgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
U0hPUlQ6IGRyYXdQb2ludHM8R0x1c2hvcnQ+KG1EZXZpY2UsIGNvdW50LCBpbmRpY2VzLCBtaW5J
bmRleCk7IGJyZWFrOworICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDogICBkcmF3UG9pbnRz
PEdMdWludD4obURldmljZSwgY291bnQsIGluZGljZXMsIG1pbkluZGV4KTsgICBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyZXI5
OjphcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpCit7CisgICAg
dW5zaWduZWQgaW50IHByb2dyYW1CaW5hcnlTZXJpYWwgPSBwcm9ncmFtQmluYXJ5LT5nZXRTZXJp
YWwoKTsKKyAgICBpZiAocHJvZ3JhbUJpbmFyeVNlcmlhbCAhPSBtQXBwbGllZFByb2dyYW1CaW5h
cnlTZXJpYWwpCisgICAgeworICAgICAgICBTaGFkZXJFeGVjdXRhYmxlICp2ZXJ0ZXhFeGUgPSBw
cm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlKCk7CisgICAgICAgIFNoYWRlckV4ZWN1
dGFibGUgKnBpeGVsRXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxFeGVjdXRhYmxlKCk7CisK
KyAgICAgICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqdmVydGV4U2hhZGVyID0gTlVMTDsKKyAg
ICAgICAgaWYgKHZlcnRleEV4ZSkgdmVydGV4U2hhZGVyID0gU2hhZGVyRXhlY3V0YWJsZTk6Om1h
a2VTaGFkZXJFeGVjdXRhYmxlOSh2ZXJ0ZXhFeGUpLT5nZXRWZXJ0ZXhTaGFkZXIoKTsKKworICAg
ICAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKnBpeGVsU2hhZGVyID0gTlVMTDsKKyAgICAgICAg
aWYgKHBpeGVsRXhlKSBwaXhlbFNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGU5OjptYWtlU2hhZGVy
RXhlY3V0YWJsZTkocGl4ZWxFeGUpLT5nZXRQaXhlbFNoYWRlcigpOworCisgICAgICAgIG1EZXZp
Y2UtPlNldFBpeGVsU2hhZGVyKHBpeGVsU2hhZGVyKTsKKyAgICAgICAgbURldmljZS0+U2V0VmVy
dGV4U2hhZGVyKHZlcnRleFNoYWRlcik7CisgICAgICAgIHByb2dyYW1CaW5hcnktPmRpcnR5QWxs
VW5pZm9ybXMoKTsKKyAgICAgICAgbUR4VW5pZm9ybXNEaXJ0eSA9IHRydWU7CisKKyAgICAgICAg
bUFwcGxpZWRQcm9ncmFtQmluYXJ5U2VyaWFsID0gcHJvZ3JhbUJpbmFyeVNlcmlhbDsKKyAgICB9
Cit9CisKK3ZvaWQgUmVuZGVyZXI5OjphcHBseVVuaWZvcm1zKGdsOjpQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5LCBnbDo6VW5pZm9ybUFycmF5ICp1bmlmb3JtQXJyYXkpCit7CisgICAgZm9y
IChzdGQ6OnZlY3RvcjxnbDo6VW5pZm9ybSo+Ojpjb25zdF9pdGVyYXRvciB1YiA9IHVuaWZvcm1B
cnJheS0+YmVnaW4oKSwgdWUgPSB1bmlmb3JtQXJyYXktPmVuZCgpOyB1YiAhPSB1ZTsgKyt1YikK
KyAgICB7CisgICAgICAgIGdsOjpVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gKnViOworCisgICAg
ICAgIGlmICh0YXJnZXRVbmlmb3JtLT5kaXJ0eSkKKyAgICAgICAgeworICAgICAgICAgICAgR0xm
bG9hdCAqZiA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhOworICAgICAgICAgICAgR0xp
bnQgKmkgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGE7CisKKyAgICAgICAgICAgIHN3aXRj
aCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9TQU1QTEVSXzJEOgorICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRVJfQ1VCRToKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CT09MOgorICAgICAg
ICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZF
QzM6CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OgorICAgICAgICAgICAgICAgIGFw
cGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9B
VF9WRUMyOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6CisgICAgICAgICAgICAg
IGNhc2UgR0xfRkxPQVRfVkVDNDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgor
ICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6CisgICAgICAgICAgICAgIGNhc2UgR0xf
RkxPQVRfTUFUNDoKKyAgICAgICAgICAgICAgICBhcHBseVVuaWZvcm1uZnYodGFyZ2V0VW5pZm9y
bSwgZik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfSU5U
OgorICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMyOgorICAgICAgICAgICAgICBjYXNlIEdM
X0lOVF9WRUMzOgorICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUM0OgorICAgICAgICAgICAg
ICAgIGFwcGx5VW5pZm9ybW5pdih0YXJnZXRVbmlmb3JtLCBpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9
IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRHJpdmVyIHVuaWZvcm1zCisgICAg
aWYgKG1EeFVuaWZvcm1zRGlydHkpCisgICAgeworICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhT
aGFkZXJDb25zdGFudEYoMCwgKGZsb2F0KikmbVZlcnRleENvbnN0YW50cywgc2l6ZW9mKGR4X1Zl
cnRleENvbnN0YW50cykgLyBzaXplb2YoZmxvYXRbNF0pKTsKKyAgICAgICAgbURldmljZS0+U2V0
UGl4ZWxTaGFkZXJDb25zdGFudEYoMCwgKGZsb2F0KikmbVBpeGVsQ29uc3RhbnRzLCBzaXplb2Yo
ZHhfUGl4ZWxDb25zdGFudHMpIC8gc2l6ZW9mKGZsb2F0WzRdKSk7CisgICAgICAgIG1EeFVuaWZv
cm1zRGlydHkgPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyZXI5OjphcHBseVVuaWZv
cm1uZnYoZ2w6OlVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMZmxvYXQgKnYpCit7Cisg
ICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleCA+PSAwKQorICAgIHsKKyAgICAg
ICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHNSZWdp
c3RlckluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT5yZWdpc3RlckNvdW50KTsKKyAgICB9CisKKyAg
ICBpZiAodGFyZ2V0VW5pZm9ybS0+dnNSZWdpc3RlckluZGV4ID49IDApCisgICAgeworICAgICAg
ICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnNSZWdp
c3RlckluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT5yZWdpc3RlckNvdW50KTsKKyAgICB9Cit9CisK
K3ZvaWQgUmVuZGVyZXI5OjphcHBseVVuaWZvcm1uaXYoZ2w6OlVuaWZvcm0gKnRhcmdldFVuaWZv
cm0sIGNvbnN0IEdMaW50ICp2KQoreworICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT5yZWdpc3Rl
ckNvdW50IDw9IE1BWF9WRVJURVhfQ09OU1RBTlRfVkVDVE9SU19EM0Q5KTsKKyAgICBHTGZsb2F0
IHZlY3RvcltNQVhfVkVSVEVYX0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOV1bNF07CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHRhcmdldFVuaWZvcm0tPnJlZ2lzdGVyQ291bnQ7IGkr
KykKKyAgICB7CisgICAgICAgIHZlY3RvcltpXVswXSA9IChHTGZsb2F0KXZbNCAqIGkgKyAwXTsK
KyAgICAgICAgdmVjdG9yW2ldWzFdID0gKEdMZmxvYXQpdls0ICogaSArIDFdOworICAgICAgICB2
ZWN0b3JbaV1bMl0gPSAoR0xmbG9hdCl2WzQgKiBpICsgMl07CisgICAgICAgIHZlY3RvcltpXVsz
XSA9IChHTGZsb2F0KXZbNCAqIGkgKyAzXTsKKyAgICB9CisKKyAgICBhcHBseVVuaWZvcm1uZnYo
dGFyZ2V0VW5pZm9ybSwgKEdMZmxvYXQqKXZlY3Rvcik7Cit9CisKK3ZvaWQgUmVuZGVyZXI5Ojph
cHBseVVuaWZvcm1uYnYoZ2w6OlVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMaW50ICp2
KQoreworICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT5yZWdpc3RlckNvdW50IDw9IE1BWF9WRVJU
RVhfQ09OU1RBTlRfVkVDVE9SU19EM0Q5KTsKKyAgICBHTGZsb2F0IHZlY3RvcltNQVhfVkVSVEVY
X0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOV1bNF07CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IHRhcmdldFVuaWZvcm0tPnJlZ2lzdGVyQ291bnQ7IGkrKykKKyAgICB7CisgICAgICAg
IHZlY3RvcltpXVswXSA9ICh2WzQgKiBpICsgMF0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7
CisgICAgICAgIHZlY3RvcltpXVsxXSA9ICh2WzQgKiBpICsgMV0gPT0gR0xfRkFMU0UpID8gMC4w
ZiA6IDEuMGY7CisgICAgICAgIHZlY3RvcltpXVsyXSA9ICh2WzQgKiBpICsgMl0gPT0gR0xfRkFM
U0UpID8gMC4wZiA6IDEuMGY7CisgICAgICAgIHZlY3RvcltpXVszXSA9ICh2WzQgKiBpICsgM10g
PT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7CisgICAgfQorCisgICAgYXBwbHlVbmlmb3JtbmZ2
KHRhcmdldFVuaWZvcm0sIChHTGZsb2F0Kil2ZWN0b3IpOworfQorCit2b2lkIFJlbmRlcmVyOTo6
Y2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyYW1ldGVycyAmY2xlYXJQYXJhbXMsIGdsOjpGcmFtZWJ1
ZmZlciAqZnJhbWVCdWZmZXIpCit7CisgICAgRDNEQ09MT1IgY29sb3IgPSBEM0RDT0xPUl9BUkdC
KGdsOjp1bm9ybTw4PihjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUuYWxwaGEpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oY2xlYXJQYXJhbXMuY29s
b3JDbGVhclZhbHVlLnJlZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGds
Ojp1bm9ybTw4PihjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUuZ3JlZW4pLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oY2xlYXJQYXJhbXMuY29sb3JD
bGVhclZhbHVlLmJsdWUpKTsKKyAgICBmbG9hdCBkZXB0aCA9IGdsOjpjbGFtcDAxKGNsZWFyUGFy
YW1zLmRlcHRoQ2xlYXJWYWx1ZSk7CisgICAgaW50IHN0ZW5jaWwgPSBjbGVhclBhcmFtcy5zdGVu
Y2lsQ2xlYXJWYWx1ZSAmIDB4MDAwMDAwRkY7CisKKyAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbFVu
bWFza2VkID0gMHgwOworICAgIGlmICgoY2xlYXJQYXJhbXMubWFzayAmIEdMX1NURU5DSUxfQlVG
RkVSX0JJVCkgJiYgZnJhbWVCdWZmZXItPmhhc1N0ZW5jaWwoKSkKKyAgICB7CisgICAgICAgIHVu
c2lnbmVkIGludCBzdGVuY2lsU2l6ZSA9IGdsOjpHZXRTdGVuY2lsU2l6ZShmcmFtZUJ1ZmZlci0+
Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXRBY3R1YWxGb3JtYXQoKSk7CisgICAgICAgIHN0ZW5jaWxV
bm1hc2tlZCA9ICgweDEgPDwgc3RlbmNpbFNpemUpIC0gMTsKKyAgICB9CisKKyAgICBib29sIGFs
cGhhVW5tYXNrZWQgPSAoZ2w6OkdldEFscGhhU2l6ZShtUmVuZGVyVGFyZ2V0RGVzYy5mb3JtYXQp
ID09IDApIHx8IGNsZWFyUGFyYW1zLmNvbG9yTWFza0FscGhhOworCisgICAgY29uc3QgYm9vbCBu
ZWVkTWFza2VkU3RlbmNpbENsZWFyID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JV
RkZFUl9CSVQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNs
ZWFyUGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2sgJiBzdGVuY2lsVW5tYXNrZWQpICE9IHN0ZW5jaWxV
bm1hc2tlZDsKKyAgICBjb25zdCBib29sIG5lZWRNYXNrZWRDb2xvckNsZWFyID0gKGNsZWFyUGFy
YW1zLm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSAmJgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAhKGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCAmJiBjbGVhclBhcmFt
cy5jb2xvck1hc2tHcmVlbiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0JsdWUgJiYgYWxwaGFVbm1hc2tlZCk7CisKKyAgICBp
ZiAobmVlZE1hc2tlZENvbG9yQ2xlYXIgfHwgbmVlZE1hc2tlZFN0ZW5jaWxDbGVhcikKKyAgICB7
CisgICAgICAgIC8vIFN0YXRlIHdoaWNoIGlzIGFsdGVyZWQgaW4gYWxsIHBhdGhzIGZyb20gdGhp
cyBwb2ludCB0byB0aGUgY2xlYXIgY2FsbCBpcyBzYXZlZC4KKyAgICAgICAgLy8gU3RhdGUgd2hp
Y2ggaXMgYWx0ZXJlZCBpbiBvbmx5IHNvbWUgcGF0aHMgd2lsbCBiZSBmbGFnZ2VkIGRpcnR5IGlu
IHRoZSBjYXNlIHRoYXQKKyAgICAgICAgLy8gIHRoYXQgcGF0aCBpcyB0YWtlbi4KKyAgICAgICAg
SFJFU1VMVCBocjsKKyAgICAgICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgPT0gTlVMTCkK
KyAgICAgICAgeworICAgICAgICAgICAgaHIgPSBtRGV2aWNlLT5CZWdpblN0YXRlQmxvY2soKTsK
KyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJ
REVPTUVNT1JZIHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOworCisgICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pGVU5DLCBEM0RDTVBfQUxXQVlTKTsKKyAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEZBTFNFKTsK
KyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RD
VUxMX05PTkUpOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfRklM
TE1PREUsIEQzREZJTExfU09MSUQpOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfQUxQSEFURVNURU5BQkxFLCBGQUxTRSk7CisgICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7CisgICAgICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOworICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwg
MCk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5B
QkxFLCBGQUxTRSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsK
KyAgICAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlcihOVUxMKTsKKyAgICAgICAgICAg
IG1EZXZpY2UtPlNldEZWRihEM0RGVkZfWFlaUkhXIHwgRDNERlZGX0RJRkZVU0UpOworICAgICAg
ICAgICAgbURldmljZS0+U2V0U3RyZWFtU291cmNlKDAsIE5VTEwsIDAsIDApOworICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5BQkxF
LCBUUlVFKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQz
RFRTU19DT0xPUk9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7CisgICAgICAgICAgICBtRGV2aWNlLT5T
ZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JBUkcxLCBEM0RUQV9URkFDVE9SKTsK
KyAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19BTFBI
QU9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJl
U3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQUxQSEFBUkcxLCBEM0RUQV9URkFDVE9SKTsKKyAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1RFWFRVUkVGQUNUT1IsIGNvbG9yKTsK
KyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExFTUFT
SywgMHhGRkZGRkZGRik7CisKKyAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBnbDo6TUFY
X1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURl
dmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpLCAxKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaHIgPSBtRGV2aWNlLT5FbmRTdGF0ZUJsb2NrKCZtTWFza2VkQ2xlYXJTYXZlZFN0YXRl
KTsKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRP
RlZJREVPTUVNT1JZIHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICB9CisKKyAgICAg
ICAgQVNTRVJUKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgIT0gTlVMTCk7CisKKyAgICAgICAgaWYg
KG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAg
aHIgPSBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlLT5DYXB0dXJlKCk7CisgICAgICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKGhyKSk7CisgICAgICAgIH0KKworICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfWkZVTkMsIEQzRENNUF9BTFdBWVMpOworICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBGQUxTRSk7CisgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOworICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7Cisg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFM
U0UpOworICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5B
QkxFLCBGQUxTRSk7CisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NMSVBQ
TEFORUVOQUJMRSwgMCk7CisKKyAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xP
Ul9CVUZGRVJfQklUKQorICAgICAgICB7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2xfZDNkOTo6Q29udmVydENvbG9yTWFzayhjbGVhclBhcmFtcy5jb2xvck1hc2tS
ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0dyZWVuLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhclBhcmFtcy5j
b2xvck1hc2tCbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tBbHBoYSkpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgMCk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoc3RlbmNpbFVubWFza2VkICE9IDB4MCAmJiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX1NU
RU5DSUxfQlVGRkVSX0JJVCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIFRSVUUpOworICAgICAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfVFdPU0lERURTVEVOQ0lMTU9ERSwgRkFMU0UpOworICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEZVTkMsIEQzRENN
UF9BTFdBWVMpOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RF
TkNJTFJFRiwgc3RlbmNpbCk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19TVEVOQ0lMV1JJVEVNQVNLLCBjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrKTsKKyAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxGQUlMLCBEM0RT
VEVOQ0lMT1BfUkVQTEFDRSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19TVEVOQ0lMWkZBSUwsIEQzRFNURU5DSUxPUF9SRVBMQUNFKTsKKyAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxQQVNTLCBEM0RTVEVOQ0lMT1BfUkVQ
TEFDRSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBGQUxTRSk7CisgICAg
ICAgIH0KKworICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsKKyAgICAgICAg
bURldmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOworICAgICAgICBtRGV2aWNlLT5TZXRGVkYo
RDNERlZGX1hZWlJIVyk7CisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NF
UEFSQVRFQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7CisgICAgICAgIG1EZXZpY2UtPlNldFRleHR1
cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUk9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7CisgICAg
ICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUkFSRzEsIEQz
RFRBX1RGQUNUT1IpOworICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBE
M0RUU1NfQUxQSEFPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOworICAgICAgICBtRGV2aWNlLT5TZXRU
ZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQUxQSEFBUkcxLCBEM0RUQV9URkFDVE9SKTsKKyAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfVEVYVFVSRUZBQ1RPUiwgY29sb3Ip
OworICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRU1BU0ss
IDB4RkZGRkZGRkYpOworCisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRF
WF9BVFRSSUJTOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVh
bVNvdXJjZUZyZXEoaSwgMSk7CisgICAgICAgIH0KKworICAgICAgICBmbG9hdCBxdWFkWzRdWzRd
OyAgIC8vIEEgcXVhZHJpbGF0ZXJhbCBjb3ZlcmluZyB0aGUgdGFyZ2V0LCBhbGlnbmVkIHRvIG1h
dGNoIHRoZSBlZGdlcworICAgICAgICBxdWFkWzBdWzBdID0gLTAuNWY7CisgICAgICAgIHF1YWRb
MF1bMV0gPSBtUmVuZGVyVGFyZ2V0RGVzYy5oZWlnaHQgLSAwLjVmOworICAgICAgICBxdWFkWzBd
WzJdID0gMC4wZjsKKyAgICAgICAgcXVhZFswXVszXSA9IDEuMGY7CisKKyAgICAgICAgcXVhZFsx
XVswXSA9IG1SZW5kZXJUYXJnZXREZXNjLndpZHRoIC0gMC41ZjsKKyAgICAgICAgcXVhZFsxXVsx
XSA9IG1SZW5kZXJUYXJnZXREZXNjLmhlaWdodCAtIDAuNWY7CisgICAgICAgIHF1YWRbMV1bMl0g
PSAwLjBmOworICAgICAgICBxdWFkWzFdWzNdID0gMS4wZjsKKworICAgICAgICBxdWFkWzJdWzBd
ID0gLTAuNWY7CisgICAgICAgIHF1YWRbMl1bMV0gPSAtMC41ZjsKKyAgICAgICAgcXVhZFsyXVsy
XSA9IDAuMGY7CisgICAgICAgIHF1YWRbMl1bM10gPSAxLjBmOworCisgICAgICAgIHF1YWRbM11b
MF0gPSBtUmVuZGVyVGFyZ2V0RGVzYy53aWR0aCAtIDAuNWY7CisgICAgICAgIHF1YWRbM11bMV0g
PSAtMC41ZjsKKyAgICAgICAgcXVhZFszXVsyXSA9IDAuMGY7CisgICAgICAgIHF1YWRbM11bM10g
PSAxLjBmOworCisgICAgICAgIHN0YXJ0U2NlbmUoKTsKKyAgICAgICAgbURldmljZS0+RHJhd1By
aW1pdGl2ZVVQKEQzRFBUX1RSSUFOR0xFU1RSSVAsIDIsIHF1YWQsIHNpemVvZihmbG9hdFs0XSkp
OworCisgICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCkK
KyAgICAgICAgeworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVO
QUJMRSwgVFJVRSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19a
V1JJVEVFTkFCTEUsIFRSVUUpOworICAgICAgICAgICAgbURldmljZS0+Q2xlYXIoMCwgTlVMTCwg
RDNEQ0xFQVJfWkJVRkZFUiwgY29sb3IsIGRlcHRoLCBzdGVuY2lsKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlICE9IE5VTEwpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1NYXNrZWRDbGVhclNhdmVkU3RhdGUtPkFwcGx5KCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgZWxzZSBpZiAoY2xlYXJQYXJhbXMubWFzaykKKyAgICB7CisgICAgICAgIERXT1JE
IGR4Q2xlYXJGbGFncyA9IDA7CisgICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09M
T1JfQlVGRkVSX0JJVCkKKyAgICAgICAgeworICAgICAgICAgICAgZHhDbGVhckZsYWdzIHw9IEQz
RENMRUFSX1RBUkdFVDsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAm
IEdMX0RFUFRIX0JVRkZFUl9CSVQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGR4Q2xlYXJGbGFn
cyB8PSBEM0RDTEVBUl9aQlVGRkVSOworICAgICAgICB9CisgICAgICAgIGlmIChjbGVhclBhcmFt
cy5tYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKQorICAgICAgICB7CisgICAgICAgICAgICBk
eENsZWFyRmxhZ3MgfD0gRDNEQ0xFQVJfU1RFTkNJTDsKKyAgICAgICAgfQorCisgICAgICAgIG1E
ZXZpY2UtPkNsZWFyKDAsIE5VTEwsIGR4Q2xlYXJGbGFncywgY29sb3IsIGRlcHRoLCBzdGVuY2ls
KTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyZXI5OjptYXJrQWxsU3RhdGVEaXJ0eSgpCit7Cisg
ICAgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwgPSAwOworICAgIG1BcHBsaWVkRGVwdGhidWZm
ZXJTZXJpYWwgPSAwOworICAgIG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCA9IDA7CisgICAg
bURlcHRoU3RlbmNpbEluaXRpYWxpemVkID0gZmFsc2U7CisgICAgbVJlbmRlclRhcmdldERlc2NJ
bml0aWFsaXplZCA9IGZhbHNlOworCisgICAgbUZvcmNlU2V0RGVwdGhTdGVuY2lsU3RhdGUgPSB0
cnVlOworICAgIG1Gb3JjZVNldFJhc3RlclN0YXRlID0gdHJ1ZTsKKyAgICBtRm9yY2VTZXRTY2lz
c29yID0gdHJ1ZTsKKyAgICBtRm9yY2VTZXRWaWV3cG9ydCA9IHRydWU7CisgICAgbUZvcmNlU2V0
QmxlbmRTdGF0ZSA9IHRydWU7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGds
OjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IGkrKykKKyAg
ICB7CisgICAgICAgIG1Gb3JjZVNldFZlcnRleFNhbXBsZXJTdGF0ZXNbaV0gPSB0cnVlOworICAg
ICAgICBtQ3VyVmVydGV4VGV4dHVyZVNlcmlhbHNbaV0gPSAwOworICAgIH0KKyAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgaSsrKQor
ICAgIHsKKyAgICAgICAgbUZvcmNlU2V0UGl4ZWxTYW1wbGVyU3RhdGVzW2ldID0gdHJ1ZTsKKyAg
ICAgICAgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbaV0gPSAwOworICAgIH0KKworICAgIG1BcHBs
aWVkSUJTZXJpYWwgPSAwOworICAgIG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbCA9IDA7Cisg
ICAgbUR4VW5pZm9ybXNEaXJ0eSA9IHRydWU7CisKKyAgICBtVmVydGV4RGVjbGFyYXRpb25DYWNo
ZS5tYXJrU3RhdGVEaXJ0eSgpOworfQorCit2b2lkIFJlbmRlcmVyOTo6cmVsZWFzZURldmljZVJl
c291cmNlcygpCit7CisgICAgd2hpbGUgKCFtRXZlbnRRdWVyeVBvb2wuZW1wdHkoKSkKKyAgICB7
CisgICAgICAgIG1FdmVudFF1ZXJ5UG9vbC5iYWNrKCktPlJlbGVhc2UoKTsKKyAgICAgICAgbUV2
ZW50UXVlcnlQb29sLnBvcF9iYWNrKCk7CisgICAgfQorCisgICAgU2FmZVJlbGVhc2UobU1hc2tl
ZENsZWFyU2F2ZWRTdGF0ZSk7CisKKyAgICBtVmVydGV4U2hhZGVyQ2FjaGUuY2xlYXIoKTsKKyAg
ICBtUGl4ZWxTaGFkZXJDYWNoZS5jbGVhcigpOworCisgICAgU2FmZURlbGV0ZShtQmxpdCk7Cisg
ICAgU2FmZURlbGV0ZShtVmVydGV4RGF0YU1hbmFnZXIpOworICAgIFNhZmVEZWxldGUobUluZGV4
RGF0YU1hbmFnZXIpOworICAgIFNhZmVEZWxldGUobUxpbmVMb29wSUIpOworCisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBOVU1fTlVMTF9DT0xPUkJVRkZFUl9DQUNIRV9FTlRSSUVTOyBpKyspCisg
ICAgeworICAgICAgICBTYWZlRGVsZXRlKG1OdWxsQ29sb3JidWZmZXJDYWNoZVtpXS5idWZmZXIp
OworICAgIH0KKworfQorCisKK3ZvaWQgUmVuZGVyZXI5Ojpub3RpZnlEZXZpY2VMb3N0KCkKK3sK
KyAgICBtRGV2aWNlTG9zdCA9IHRydWU7CisgICAgbURpc3BsYXktPm5vdGlmeURldmljZUxvc3Qo
KTsKK30KKworYm9vbCBSZW5kZXJlcjk6OmlzRGV2aWNlTG9zdCgpCit7CisgICAgcmV0dXJuIG1E
ZXZpY2VMb3N0OworfQorCisvLyBzZXQgbm90aWZ5IHRvIHRydWUgdG8gYnJvYWRjYXN0IGEgbWVz
c2FnZSB0byBhbGwgY29udGV4dHMgb2YgdGhlIGRldmljZSBsb3NzCitib29sIFJlbmRlcmVyOTo6
dGVzdERldmljZUxvc3QoYm9vbCBub3RpZnkpCit7CisgICAgSFJFU1VMVCBzdGF0dXMgPSBnZXRE
ZXZpY2VTdGF0dXNDb2RlKCk7CisgICAgYm9vbCBpc0xvc3QgPSBGQUlMRUQoc3RhdHVzKTsKKwor
ICAgIGlmIChpc0xvc3QpCisgICAgeworICAgICAgICAvLyBlbnN1cmUgd2Ugbm90ZSB0aGUgZGV2
aWNlIGxvc3MgLS0KKyAgICAgICAgLy8gd2UnbGwgcHJvYmFibHkgZ2V0IHRoaXMgZG9uZSBhZ2Fp
biBieSBub3RpZnlEZXZpY2VMb3N0CisgICAgICAgIC8vIGJ1dCBiZXN0IHRvIHJlbWVtYmVyIGl0
IQorICAgICAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byBjbGVhciB0aGUgZGV2aWNl
IGxvc3Mgc3RhdHVzIGhlcmUKKyAgICAgICAgLy8gLS0gdGhpcyBuZWVkcyB0byBiZSBkb25lIGJ5
IHJlc2V0RGV2aWNlCisgICAgICAgIG1EZXZpY2VMb3N0ID0gdHJ1ZTsKKyAgICAgICAgaWYgKG5v
dGlmeSkKKyAgICAgICAgeworICAgICAgICAgICAgbm90aWZ5RGV2aWNlTG9zdCgpOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIGlzTG9zdDsKK30KKworSFJFU1VMVCBSZW5kZXJlcjk6
OmdldERldmljZVN0YXR1c0NvZGUoKQoreworICAgIEhSRVNVTFQgc3RhdHVzID0gRDNEX09LOwor
CisgICAgaWYgKG1EZXZpY2VFeCkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IG1EZXZpY2VFeC0+
Q2hlY2tEZXZpY2VTdGF0ZShOVUxMKTsKKyAgICB9CisgICAgZWxzZSBpZiAobURldmljZSkKKyAg
ICB7CisgICAgICAgIHN0YXR1cyA9IG1EZXZpY2UtPlRlc3RDb29wZXJhdGl2ZUxldmVsKCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworYm9vbCBSZW5kZXJlcjk6OnRlc3REZXZp
Y2VSZXNldHRhYmxlKCkKK3sKKyAgICAvLyBPbiBEM0Q5RXgsIERFVklDRUxPU1QgcmVwcmVzZW50
cyBhIGh1bmcgZGV2aWNlIHRoYXQgbmVlZHMgdG8gYmUgcmVzdGFydGVkCisgICAgLy8gREVWSUNF
UkVNT1ZFRCBpbmRpY2F0ZXMgdGhlIGRldmljZSBoYXMgYmVlbiBzdG9wcGVkIGFuZCBtdXN0IGJl
IHJlY3JlYXRlZAorICAgIHN3aXRjaCAoZ2V0RGV2aWNlU3RhdHVzQ29kZSgpKQorICAgIHsKKyAg
ICAgIGNhc2UgRDNERVJSX0RFVklDRU5PVFJFU0VUOgorICAgICAgY2FzZSBEM0RFUlJfREVWSUNF
SFVORzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICBjYXNlIEQzREVSUl9ERVZJQ0VMT1NU
OgorICAgICAgICByZXR1cm4gKG1EZXZpY2VFeCAhPSBOVUxMKTsKKyAgICAgIGNhc2UgRDNERVJS
X0RFVklDRVJFTU9WRUQ6CisgICAgICAgIEFTU0VSVChtRGV2aWNlRXggIT0gTlVMTCk7CisgICAg
ICAgIHJldHVybiBpc1JlbW92ZWREZXZpY2VSZXNldHRhYmxlKCk7CisgICAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFJlbmRlcmVyOTo6cmVzZXRE
ZXZpY2UoKQoreworICAgIHJlbGVhc2VEZXZpY2VSZXNvdXJjZXMoKTsKKworICAgIEQzRFBSRVNF
TlRfUEFSQU1FVEVSUyBwcmVzZW50UGFyYW1ldGVycyA9IGdldERlZmF1bHRQcmVzZW50UGFyYW1l
dGVycygpOworCisgICAgSFJFU1VMVCByZXN1bHQgPSBEM0RfT0s7CisgICAgYm9vbCBsb3N0ID0g
dGVzdERldmljZUxvc3QoZmFsc2UpOworICAgIGJvb2wgcmVtb3ZlZERldmljZSA9IChnZXREZXZp
Y2VTdGF0dXNDb2RlKCkgPT0gRDNERVJSX0RFVklDRVJFTU9WRUQpOworCisgICAgLy8gRGV2aWNl
IFJlbW92ZWQgaXMgYSBmZWF0dXJlIHdoaWNoIGlzIG9ubHkgcHJlc2VudCB3aXRoIEQzRDlFeAor
ICAgIEFTU0VSVChtRGV2aWNlRXggIT0gTlVMTCB8fCAhcmVtb3ZlZERldmljZSk7CisKKyAgICBm
b3IgKGludCBhdHRlbXB0cyA9IDM7IGxvc3QgJiYgYXR0ZW1wdHMgPiAwOyBhdHRlbXB0cy0tKQor
ICAgIHsKKyAgICAgICAgaWYgKHJlbW92ZWREZXZpY2UpCisgICAgICAgIHsKKyAgICAgICAgICAg
IC8vIERldmljZSByZW1vdmVkLCB3aGljaCBtYXkgdHJpZ2dlciBvbiBkcml2ZXIgcmVpbnN0YWxs
YXRpb24sCisgICAgICAgICAgICAvLyBtYXkgY2F1c2UgYSBsb25nZXIgd2FpdCBvdGhlciByZXNl
dCBhdHRlbXB0cyBiZWZvcmUgdGhlCisgICAgICAgICAgICAvLyBzeXN0ZW0gaXMgcmVhZHkgdG8g
aGFuZGxlIGNyZWF0aW5nIGEgbmV3IGRldmljZS4KKyAgICAgICAgICAgIFNsZWVwKDgwMCk7Cisg
ICAgICAgICAgICBsb3N0ID0gIXJlc2V0UmVtb3ZlZERldmljZSgpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKG1EZXZpY2VFeCkKKyAgICAgICAgeworICAgICAgICAgICAgU2xlZXAoNTAw
KTsgICAvLyBHaXZlIHRoZSBncmFwaGljcyBkcml2ZXIgc29tZSBDUFUgdGltZQorICAgICAgICAg
ICAgcmVzdWx0ID0gbURldmljZUV4LT5SZXNldEV4KCZwcmVzZW50UGFyYW1ldGVycywgTlVMTCk7
CisgICAgICAgICAgICBsb3N0ID0gdGVzdERldmljZUxvc3QoZmFsc2UpOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+VGVz
dENvb3BlcmF0aXZlTGV2ZWwoKTsKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQgPT0gRDNERVJS
X0RFVklDRUxPU1QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU2xlZXAoMTAwKTsg
ICAvLyBHaXZlIHRoZSBncmFwaGljcyBkcml2ZXIgc29tZSBDUFUgdGltZQorICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IG1EZXZpY2UtPlRlc3RDb29wZXJhdGl2ZUxldmVsKCk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX0RFVklDRU5PVFJFU0VUKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPlJlc2V0KCZw
cmVzZW50UGFyYW1ldGVycyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsb3N0ID0gdGVz
dERldmljZUxvc3QoZmFsc2UpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKEZBSUxFRChy
ZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJSZXNldC9SZXNldEV4IGZhaWxlZCBtdWx0aXBs
ZSB0aW1lczogMHglMDhYIiwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGlmIChyZW1vdmVkRGV2aWNlICYmIGxvc3QpCisgICAgeworICAgICAgICBFUlIoIkRl
dmljZSBsb3N0IHJlc2V0IGZhaWxlZCBtdWx0aXBsZSB0aW1lcyIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgLy8gSWYgdGhlIGRldmljZSB3YXMgcmVtb3ZlZCwgd2UgYWxy
ZWFkeSBmaW5pc2hlZCByZS1pbml0aWFsaXphdGlvbiBpbiByZXNldFJlbW92ZWREZXZpY2UKKyAg
ICBpZiAoIXJlbW92ZWREZXZpY2UpCisgICAgeworICAgICAgICAvLyByZXNldCBkZXZpY2UgZGVm
YXVsdHMKKyAgICAgICAgaW5pdGlhbGl6ZURldmljZSgpOworICAgIH0KKworICAgIG1EZXZpY2VM
b3N0ID0gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW5kZXJlcjk6Omlz
UmVtb3ZlZERldmljZVJlc2V0dGFibGUoKSBjb25zdAoreworICAgIGJvb2wgc3VjY2VzcyA9IGZh
bHNlOworCisjaWZkZWYgQU5HTEVfRU5BQkxFX0QzRDlFWAorICAgIElEaXJlY3QzRDlFeCAqZDNk
OUV4ID0gTlVMTDsKKyAgICB0eXBlZGVmIEhSRVNVTFQgKFdJTkFQSSAqRGlyZWN0M0RDcmVhdGU5
RXhGdW5jKShVSU5ULCBJRGlyZWN0M0Q5RXgqKik7CisgICAgRGlyZWN0M0RDcmVhdGU5RXhGdW5j
IERpcmVjdDNEQ3JlYXRlOUV4UHRyID0gcmVpbnRlcnByZXRfY2FzdDxEaXJlY3QzRENyZWF0ZTlF
eEZ1bmM+KEdldFByb2NBZGRyZXNzKG1EM2Q5TW9kdWxlLCAiRGlyZWN0M0RDcmVhdGU5RXgiKSk7
CisKKyAgICBpZiAoRGlyZWN0M0RDcmVhdGU5RXhQdHIgJiYgU1VDQ0VFREVEKERpcmVjdDNEQ3Jl
YXRlOUV4UHRyKEQzRF9TREtfVkVSU0lPTiwgJmQzZDlFeCkpKQorICAgIHsKKyAgICAgICAgRDNE
Q0FQUzkgZGV2aWNlQ2FwczsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkM2Q5RXgtPkdldERl
dmljZUNhcHMobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCAmZGV2aWNlQ2Fwcyk7CisgICAgICAgIHN1
Y2Nlc3MgPSBTVUNDRUVERUQocmVzdWx0KTsKKyAgICB9CisKKyAgICBTYWZlUmVsZWFzZShkM2Q5
RXgpOworI2Vsc2UKKyAgICBBU1NFUlQoVU5SRUFDSEFCTEUoKSk7CisjZW5kaWYKKworICAgIHJl
dHVybiBzdWNjZXNzOworfQorCitib29sIFJlbmRlcmVyOTo6cmVzZXRSZW1vdmVkRGV2aWNlKCkK
K3sKKyAgICAvLyBGcm9tIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93
aW5kb3dzL2Rlc2t0b3AvYmIxNzI1NTQodj12cy44NSkuYXNweDoKKyAgICAvLyBUaGUgaGFyZHdh
cmUgYWRhcHRlciBoYXMgYmVlbiByZW1vdmVkLiBBcHBsaWNhdGlvbiBtdXN0IGRlc3Ryb3kgdGhl
IGRldmljZSwgZG8gZW51bWVyYXRpb24gb2YKKyAgICAvLyBhZGFwdGVycyBhbmQgY3JlYXRlIGFu
b3RoZXIgRGlyZWN0M0QgZGV2aWNlLiBJZiBhcHBsaWNhdGlvbiBjb250aW51ZXMgcmVuZGVyaW5n
IHdpdGhvdXQKKyAgICAvLyBjYWxsaW5nIFJlc2V0LCB0aGUgcmVuZGVyaW5nIGNhbGxzIHdpbGwg
c3VjY2VlZC4gQXBwbGllcyB0byBEaXJlY3QzRCA5RXggb25seS4KKyAgICBkZWluaXRpYWxpemUo
KTsKKyAgICByZXR1cm4gKGluaXRpYWxpemUoKSA9PSBFR0xfU1VDQ0VTUyk7Cit9CisKK0RXT1JE
IFJlbmRlcmVyOTo6Z2V0QWRhcHRlclZlbmRvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1BZGFw
dGVySWRlbnRpZmllci5WZW5kb3JJZDsKK30KKworc3RkOjpzdHJpbmcgUmVuZGVyZXI5OjpnZXRS
ZW5kZXJlckRlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gcmVu
ZGVyZXJTdHJpbmc7CisKKyAgICByZW5kZXJlclN0cmluZyA8PCBtQWRhcHRlcklkZW50aWZpZXIu
RGVzY3JpcHRpb247CisgICAgaWYgKGdldFNoYXJlSGFuZGxlU3VwcG9ydCgpKQorICAgIHsKKyAg
ICAgICAgcmVuZGVyZXJTdHJpbmcgPDwgIiBEaXJlY3QzRDlFeCI7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIHJlbmRlcmVyU3RyaW5nIDw8ICIgRGlyZWN0M0Q5IjsKKyAgICB9CisK
KyAgICByZW5kZXJlclN0cmluZyA8PCAiIHZzXyIgPDwgRDNEU0hBREVSX1ZFUlNJT05fTUFKT1Io
bURldmljZUNhcHMuVmVydGV4U2hhZGVyVmVyc2lvbikgPDwgIl8iIDw8IEQzRFNIQURFUl9WRVJT
SU9OX01JTk9SKG1EZXZpY2VDYXBzLlZlcnRleFNoYWRlclZlcnNpb24pOworICAgIHJlbmRlcmVy
U3RyaW5nIDw8ICIgcHNfIiA8PCBEM0RTSEFERVJfVkVSU0lPTl9NQUpPUihtRGV2aWNlQ2Fwcy5Q
aXhlbFNoYWRlclZlcnNpb24pIDw8ICJfIiA8PCBEM0RTSEFERVJfVkVSU0lPTl9NSU5PUihtRGV2
aWNlQ2Fwcy5QaXhlbFNoYWRlclZlcnNpb24pOworCisgICAgcmV0dXJuIHJlbmRlcmVyU3RyaW5n
LnN0cigpOworfQorCitHVUlEIFJlbmRlcmVyOTo6Z2V0QWRhcHRlcklkZW50aWZpZXIoKSBjb25z
dAoreworICAgIHJldHVybiBtQWRhcHRlcklkZW50aWZpZXIuRGV2aWNlSWRlbnRpZmllcjsKK30K
Kwordm9pZCBSZW5kZXJlcjk6OmdldE11bHRpU2FtcGxlU3VwcG9ydChEM0RGT1JNQVQgZm9ybWF0
LCBib29sICptdWx0aVNhbXBsZUFycmF5KQoreworICAgIGZvciAoaW50IG11bHRpU2FtcGxlSW5k
ZXggPSAwOyBtdWx0aVNhbXBsZUluZGV4IDw9IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7IG11
bHRpU2FtcGxlSW5kZXgrKykKKyAgICB7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQzZDkt
PkNoZWNrRGV2aWNlTXVsdGlTYW1wbGVUeXBlKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgZm9ybWF0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUUlVFLCAoRDNETVVMVElTQU1QTEVfVFlQRSltdWx0aVNhbXBsZUluZGV4LCBOVUxMKTsK
KworICAgICAgICBtdWx0aVNhbXBsZUFycmF5W211bHRpU2FtcGxlSW5kZXhdID0gU1VDQ0VFREVE
KHJlc3VsdCk7CisgICAgfQorfQorCitib29sIFJlbmRlcmVyOTo6Z2V0QkdSQVRleHR1cmVTdXBw
b3J0KCkgY29uc3QKK3sKKyAgICAvLyBEaXJlY3RYIDkgYWx3YXlzIHN1cHBvcnRzIEJHUkEKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldERYVDFUZXh0dXJlU3VwcG9y
dCgpCit7CisgICAgcmV0dXJuIG1EWFQxVGV4dHVyZVN1cHBvcnQ7Cit9CisKK2Jvb2wgUmVuZGVy
ZXI5OjpnZXREWFQzVGV4dHVyZVN1cHBvcnQoKQoreworICAgIHJldHVybiBtRFhUM1RleHR1cmVT
dXBwb3J0OworfQorCitib29sIFJlbmRlcmVyOTo6Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCkKK3sK
KyAgICByZXR1cm4gbURYVDVUZXh0dXJlU3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjk6Omdl
dERlcHRoVGV4dHVyZVN1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiBtRGVwdGhUZXh0dXJl
U3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydChi
b29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpCit7CisgICAgKmZpbHRlcmluZyA9IG1G
bG9hdDMyRmlsdGVyU3VwcG9ydDsKKyAgICAqcmVuZGVyYWJsZSA9IG1GbG9hdDMyUmVuZGVyU3Vw
cG9ydDsKKyAgICByZXR1cm4gbUZsb2F0MzJUZXh0dXJlU3VwcG9ydDsKK30KKworYm9vbCBSZW5k
ZXJlcjk6OmdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJl
bmRlcmFibGUpCit7CisgICAgKmZpbHRlcmluZyA9IG1GbG9hdDE2RmlsdGVyU3VwcG9ydDsKKyAg
ICAqcmVuZGVyYWJsZSA9IG1GbG9hdDE2UmVuZGVyU3VwcG9ydDsKKyAgICByZXR1cm4gbUZsb2F0
MTZUZXh0dXJlU3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldEx1bWluYW5jZVRleHR1
cmVTdXBwb3J0KCkKK3sKKyAgICByZXR1cm4gbUx1bWluYW5jZVRleHR1cmVTdXBwb3J0OworfQor
Citib29sIFJlbmRlcmVyOTo6Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpCit7Cisg
ICAgcmV0dXJuIG1MdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0OworfQorCitib29sIFJlbmRl
cmVyOTo6Z2V0VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHk7Cit9CisKK2Zsb2F0IFJlbmRl
cmVyOTo6Z2V0VGV4dHVyZU1heEFuaXNvdHJvcHkoKSBjb25zdAoreworICAgIGlmIChtU3VwcG9y
dHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxmbG9hdD4obURldmljZUNhcHMuTWF4QW5pc290cm9weSk7CisgICAgfQorICAgIHJldHVy
biAxLjBmOworfQorCitib29sIFJlbmRlcmVyOTo6Z2V0RXZlbnRRdWVyeVN1cHBvcnQoKQorewor
ICAgIHJldHVybiBtRXZlbnRRdWVyeVN1cHBvcnQ7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJl
cjk6OmdldE1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3QKK3sKKyAgICBNRVRBX0FT
U0VSVChNQVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZfU00zIDw9IGdsOjpJTVBMRU1FTlRBVElP
Tl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMpOworICAgIHJldHVybiBtVmVydGV4VGV4
dHVyZVN1cHBvcnQgPyBNQVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZfU00zIDogMDsKK30KKwor
dW5zaWduZWQgaW50IFJlbmRlcmVyOTo6Z2V0TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyArIGdldE1h
eFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCk7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjk6
OmdldFJlc2VydmVkVmVydGV4VW5pZm9ybVZlY3RvcnMoKSBjb25zdAoreworICAgIHJldHVybiAy
OyAgIC8vIGR4X1ZpZXdBZGp1c3QgYW5kIGR4X0RlcHRoUmFuZ2UuCit9CisKK3Vuc2lnbmVkIGlu
dCBSZW5kZXJlcjk6OmdldFJlc2VydmVkRnJhZ21lbnRVbmlmb3JtVmVjdG9ycygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIDM7ICAgLy8gZHhfVmlld0Nvb3JkcywgZHhfRGVwdGhGcm9udCBhbmQgZHhf
RGVwdGhSYW5nZS4KK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyOTo6Z2V0TWF4VmVydGV4VW5p
Zm9ybVZlY3RvcnMoKSBjb25zdAoreworICAgIHJldHVybiBNQVhfVkVSVEVYX0NPTlNUQU5UX1ZF
Q1RPUlNfRDNEOSAtIGdldFJlc2VydmVkVmVydGV4VW5pZm9ybVZlY3RvcnMoKTsKK30KKwordW5z
aWduZWQgaW50IFJlbmRlcmVyOTo6Z2V0TWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycygpIGNvbnN0
Cit7CisgICAgY29uc3QgaW50IG1heFBpeGVsQ29uc3RhbnRWZWN0b3JzID0gKGdldE1ham9yU2hh
ZGVyTW9kZWwoKSA+PSAzKSA/IE1BWF9QSVhFTF9DT05TVEFOVF9WRUNUT1JTX1NNMyA6IE1BWF9Q
SVhFTF9DT05TVEFOVF9WRUNUT1JTX1NNMjsKKworICAgIHJldHVybiBtYXhQaXhlbENvbnN0YW50
VmVjdG9ycyAtIGdldFJlc2VydmVkRnJhZ21lbnRVbmlmb3JtVmVjdG9ycygpOworfQorCit1bnNp
Z25lZCBpbnQgUmVuZGVyZXI5OjpnZXRNYXhWYXJ5aW5nVmVjdG9ycygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIChnZXRNYWpvclNoYWRlck1vZGVsKCkgPj0gMykgPyBNQVhfVkFSWUlOR19WRUNUT1JT
X1NNMyA6IE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00yOworfQorCitib29sIFJlbmRlcmVyOTo6Z2V0
Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiBtU3VwcG9ydHNO
b25Qb3dlcjJUZXh0dXJlczsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldE9jY2x1c2lvblF1ZXJ5
U3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1PY2NsdXNpb25RdWVyeVN1cHBvcnQ7Cit9
CisKK2Jvb2wgUmVuZGVyZXI5OjpnZXRJbnN0YW5jaW5nU3VwcG9ydCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVyVmVyc2lvbiA+PSBEM0RQU19WRVJTSU9OKDMs
IDApOworfQorCitib29sIFJlbmRlcmVyOTo6Z2V0U2hhcmVIYW5kbGVTdXBwb3J0KCkgY29uc3QK
K3sKKyAgICAvLyBQSVggZG9lc24ndCBzZWVtIHRvIHN1cHBvcnQgdXNpbmcgc2hhcmUgaGFuZGxl
cywgc28gZGlzYWJsZSB0aGVtLgorICAgIHJldHVybiAobUQzZDlFeCAhPSBOVUxMKSAmJiAhZ2w6
OnBlcmZBY3RpdmUoKTsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldERlcml2YXRpdmVJbnN0cnVj
dGlvblN1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiAobURldmljZUNhcHMuUFMyMENhcHMu
Q2FwcyAmIEQzRFBTMjBDQVBTX0dSQURJRU5USU5TVFJVQ1RJT05TKSAhPSAwOworfQorCitib29s
IFJlbmRlcmVyOTo6Z2V0UG9zdFN1YkJ1ZmZlclN1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVy
biB0cnVlOworfQorCitpbnQgUmVuZGVyZXI5OjpnZXRNYWpvclNoYWRlck1vZGVsKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gRDNEU0hBREVSX1ZFUlNJT05fTUFKT1IobURldmljZUNhcHMuUGl4ZWxT
aGFkZXJWZXJzaW9uKTsKK30KKworZmxvYXQgUmVuZGVyZXI5OjpnZXRNYXhQb2ludFNpemUoKSBj
b25zdAoreworICAgIC8vIFBvaW50IHNpemUgY2xhbXBlZCBhdCAxLjBmIGZvciBTTTIKKyAgICBy
ZXR1cm4gZ2V0TWFqb3JTaGFkZXJNb2RlbCgpID09IDMgPyBtRGV2aWNlQ2Fwcy5NYXhQb2ludFNp
emUgOiAxLjBmOworfQorCitpbnQgUmVuZGVyZXI5OjpnZXRNYXhWaWV3cG9ydERpbWVuc2lvbigp
IGNvbnN0Cit7CisgICAgaW50IG1heFRleHR1cmVEaW1lbnNpb24gPSBzdGQ6Om1pbihzdGQ6Om1p
bihnZXRNYXhUZXh0dXJlV2lkdGgoKSwgZ2V0TWF4VGV4dHVyZUhlaWdodCgpKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01B
WF9URVhUVVJFX1NJWkUpOworICAgIHJldHVybiBtYXhUZXh0dXJlRGltZW5zaW9uOworfQorCitp
bnQgUmVuZGVyZXI5OjpnZXRNYXhUZXh0dXJlV2lkdGgoKSBjb25zdAoreworICAgIHJldHVybiAo
aW50KW1EZXZpY2VDYXBzLk1heFRleHR1cmVXaWR0aDsKK30KKworaW50IFJlbmRlcmVyOTo6Z2V0
TWF4VGV4dHVyZUhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIChpbnQpbURldmljZUNhcHMu
TWF4VGV4dHVyZUhlaWdodDsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldDMyQml0SW5kZXhTdXBw
b3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbURldmljZUNhcHMuTWF4VmVydGV4SW5kZXggPj0g
KDEgPDwgMTYpOworfQorCitEV09SRCBSZW5kZXJlcjk6OmdldENhcHNEZWNsVHlwZXMoKSBjb25z
dAoreworICAgIHJldHVybiBtRGV2aWNlQ2Fwcy5EZWNsVHlwZXM7Cit9CisKK2ludCBSZW5kZXJl
cjk6OmdldE1pblN3YXBJbnRlcnZhbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1NaW5Td2FwSW50
ZXJ2YWw7Cit9CisKK2ludCBSZW5kZXJlcjk6OmdldE1heFN3YXBJbnRlcnZhbCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1NYXhTd2FwSW50ZXJ2YWw7Cit9CisKK2ludCBSZW5kZXJlcjk6OmdldE1h
eFN1cHBvcnRlZFNhbXBsZXMoKSBjb25zdAoreworICAgIHJldHVybiBtTWF4U3VwcG9ydGVkU2Ft
cGxlczsKK30KKworaW50IFJlbmRlcmVyOTo6Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMoRDNE
Rk9STUFUIGZvcm1hdCwgaW50IHJlcXVlc3RlZCkgY29uc3QKK3sKKyAgICBpZiAocmVxdWVzdGVk
ID09IDApCisgICAgeworICAgICAgICByZXR1cm4gcmVxdWVzdGVkOworICAgIH0KKworICAgIHN0
ZDo6bWFwPEQzREZPUk1BVCwgYm9vbCAqPjo6Y29uc3RfaXRlcmF0b3IgaXRyID0gbU11bHRpU2Ft
cGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7CisgICAgaWYgKGl0ciA9PSBtTXVsdGlTYW1wbGVTdXBw
b3J0LmVuZCgpKQorICAgIHsKKyAgICAgICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfVU5LTk9XTikK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAg
Zm9yIChpbnQgaSA9IHJlcXVlc3RlZDsgaSA8PSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTOyAr
K2kpCisgICAgeworICAgICAgICBpZiAoaXRyLT5zZWNvbmRbaV0gJiYgaSAhPSBEM0RNVUxUSVNB
TVBMRV9OT05NQVNLQUJMRSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJl
cjk6OmdldE1heFJlbmRlclRhcmdldHMoKSBjb25zdAoreworICAgIC8vIHdlIGRvIG5vdCBzdXBw
b3J0IE1SVCBpbiBkM2Q5CisgICAgcmV0dXJuIDE7Cit9CisKK0QzREZPUk1BVCBSZW5kZXJlcjk6
OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoR0xpbnQgaW50ZXJuYWxmb3JtYXQpCit7Cisg
ICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEdMX0RFUFRIX0NP
TVBPTkVOVDE2OgorICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVM6CisgICAgICBj
YXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgorICAgICAgICByZXR1cm4gRDNERk1UX0lOVFo7
CisgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6CisgICAgICBjYXNl
IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgorICAgICAgICByZXR1cm4gRDNERk1U
X0RYVDE7CisgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6Cisg
ICAgICAgIHJldHVybiBEM0RGTVRfRFhUMzsKKyAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JB
X1MzVENfRFhUNV9BTkdMRToKKyAgICAgICAgcmV0dXJuIEQzREZNVF9EWFQ1OworICAgICAgY2Fz
ZSBHTF9SR0JBMzJGX0VYVDoKKyAgICAgIGNhc2UgR0xfUkdCMzJGX0VYVDoKKyAgICAgIGNhc2Ug
R0xfQUxQSEEzMkZfRVhUOgorICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UzMkZfRVhUOgorICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhUOgorICAgICAgICByZXR1cm4gRDNERk1UX0Ez
MkIzMkczMlIzMkY7CisgICAgICBjYXNlIEdMX1JHQkExNkZfRVhUOgorICAgICAgY2FzZSBHTF9S
R0IxNkZfRVhUOgorICAgICAgY2FzZSBHTF9BTFBIQTE2Rl9FWFQ6CisgICAgICBjYXNlIEdMX0xV
TUlOQU5DRTE2Rl9FWFQ6CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6Cisg
ICAgICAgIHJldHVybiBEM0RGTVRfQTE2QjE2RzE2UjE2RjsKKyAgICAgIGNhc2UgR0xfTFVNSU5B
TkNFOF9FWFQ6CisgICAgICAgIGlmIChnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gRDNERk1UX0w4OworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQ6CisgICAgICAgIGlm
IChnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBEM0RGTVRfQThMODsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfUkdCOF9PRVM6CisgICAgICBjYXNlIEdMX1JHQjU2NToKKyAgICAgICAgcmV0dXJu
IEQzREZNVF9YOFI4RzhCODsKKyAgICB9CisKKyAgICByZXR1cm4gRDNERk1UX0E4UjhHOEI4Owor
fQorCitib29sIFJlbmRlcmVyOTo6Y29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlMkQgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnNvdXJjZSkKK3sKKyAg
ICBib29sIHJlc3VsdCA9IGZhbHNlOworCisgICAgaWYgKHNvdXJjZSAmJiBkZXN0KQorICAgIHsK
KyAgICAgICAgVGV4dHVyZVN0b3JhZ2U5XzJEICpzb3VyY2U5ID0gVGV4dHVyZVN0b3JhZ2U5XzJE
OjptYWtlVGV4dHVyZVN0b3JhZ2U5XzJEKHNvdXJjZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwor
ICAgICAgICBUZXh0dXJlU3RvcmFnZTlfMkQgKmRlc3Q5ID0gVGV4dHVyZVN0b3JhZ2U5XzJEOjpt
YWtlVGV4dHVyZVN0b3JhZ2U5XzJEKGRlc3QtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKworICAg
ICAgICBpbnQgbGV2ZWxzID0gc291cmNlOS0+bGV2ZWxDb3VudCgpOworICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGxldmVsczsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqc3JjU3VyZiA9IHNvdXJjZTktPmdldFN1cmZhY2VMZXZlbChpLCBmYWxzZSk7
CisgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZHN0U3VyZiA9IGRlc3Q5LT5nZXRTdXJm
YWNlTGV2ZWwoaSwgZmFsc2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICByZXN1bHQgPSBj
b3B5VG9SZW5kZXJUYXJnZXQoZHN0U3VyZiwgc3JjU3VyZiwgc291cmNlOS0+aXNNYW5hZ2VkKCkp
OworCisgICAgICAgICAgICBpZiAoc3JjU3VyZikgc3JjU3VyZi0+UmVsZWFzZSgpOworICAgICAg
ICAgICAgaWYgKGRzdFN1cmYpIGRzdFN1cmYtPlJlbGVhc2UoKTsKKworICAgICAgICAgICAgaWYg
KCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBSZW5kZXJlcjk6OmNvcHlUb1JlbmRl
clRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKmRlc3QsIFRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlQ3ViZSAqc291cmNlKQoreworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisKKyAg
ICBpZiAoc291cmNlICYmIGRlc3QpCisgICAgeworICAgICAgICBUZXh0dXJlU3RvcmFnZTlfQ3Vi
ZSAqc291cmNlOSA9IFRleHR1cmVTdG9yYWdlOV9DdWJlOjptYWtlVGV4dHVyZVN0b3JhZ2U5X0N1
YmUoc291cmNlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CisgICAgICAgIFRleHR1cmVTdG9yYWdl
OV9DdWJlICpkZXN0OSA9IFRleHR1cmVTdG9yYWdlOV9DdWJlOjptYWtlVGV4dHVyZVN0b3JhZ2U5
X0N1YmUoZGVzdC0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAgICAgICBpbnQgbGV2ZWxzID0g
c291cmNlOS0+bGV2ZWxDb3VudCgpOworICAgICAgICBmb3IgKGludCBmID0gMDsgZiA8IDY7IGYr
KykKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZXZlbHM7IGkr
KykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3Jj
U3VyZiA9IHNvdXJjZTktPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWCArIGYsIGksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqZHN0U3VyZiA9IGRlc3Q5LT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1ggKyBmLCBpLCB0cnVlKTsKKworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNv
cHlUb1JlbmRlclRhcmdldChkc3RTdXJmLCBzcmNTdXJmLCBzb3VyY2U5LT5pc01hbmFnZWQoKSk7
CisKKyAgICAgICAgICAgICAgICBpZiAoc3JjU3VyZikgc3JjU3VyZi0+UmVsZWFzZSgpOworICAg
ICAgICAgICAgICAgIGlmIChkc3RTdXJmKSBkc3RTdXJmLT5SZWxlYXNlKCk7CisKKyAgICAgICAg
ICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworRDNEUE9PTCBSZW5kZXJlcjk6OmdldEJ1ZmZlclBvb2woRFdPUkQgdXNhZ2UpIGNvbnN0Cit7
CisgICAgaWYgKG1EM2Q5RXggIT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBEM0RQT09M
X0RFRkFVTFQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmICghKHVzYWdlICYg
RDNEVVNBR0VfRFlOQU1JQykpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBEM0RQT09M
X01BTkFHRUQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gRDNEUE9PTF9ERUZBVUxU
OworfQorCitib29sIFJlbmRlcmVyOTo6Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBHTGludCBsZXZlbCkKK3sKKyAg
ICBSRUNUIHJlY3Q7CisgICAgcmVjdC5sZWZ0ID0gc291cmNlUmVjdC54OworICAgIHJlY3QudG9w
ID0gc291cmNlUmVjdC55OworICAgIHJlY3QucmlnaHQgPSBzb3VyY2VSZWN0LnggKyBzb3VyY2VS
ZWN0LndpZHRoOworICAgIHJlY3QuYm90dG9tID0gc291cmNlUmVjdC55ICsgc291cmNlUmVjdC5o
ZWlnaHQ7CisKKyAgICByZXR1cm4gbUJsaXQtPmNvcHkoZnJhbWVidWZmZXIsIHJlY3QsIGRlc3RG
b3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQsIHN0b3JhZ2UsIGxldmVsKTsKK30KKworYm9vbCBSZW5k
ZXJlcjk6OmNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6
UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2VDdWJlICpzdG9yYWdlLCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkKK3sKKyAg
ICBSRUNUIHJlY3Q7CisgICAgcmVjdC5sZWZ0ID0gc291cmNlUmVjdC54OworICAgIHJlY3QudG9w
ID0gc291cmNlUmVjdC55OworICAgIHJlY3QucmlnaHQgPSBzb3VyY2VSZWN0LnggKyBzb3VyY2VS
ZWN0LndpZHRoOworICAgIHJlY3QuYm90dG9tID0gc291cmNlUmVjdC55ICsgc291cmNlUmVjdC5o
ZWlnaHQ7CisKKyAgICByZXR1cm4gbUJsaXQtPmNvcHkoZnJhbWVidWZmZXIsIHJlY3QsIGRlc3RG
b3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQsIHN0b3JhZ2UsIHRhcmdldCwgbGV2ZWwpOworfQorCiti
b29sIFJlbmRlcmVyOTo6YmxpdFJlY3QoZ2w6OkZyYW1lYnVmZmVyICpyZWFkRnJhbWVidWZmZXIs
IGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRSZWN0LCBnbDo6RnJhbWVidWZmZXIgKmRyYXdGcmFt
ZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0LCBib29sIGJsaXREZXB0aFN0ZW5jaWwpCit7
CisgICAgZW5kU2NlbmUoKTsKKworICAgIGlmIChibGl0UmVuZGVyVGFyZ2V0KQorICAgIHsKKyAg
ICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVhZEJ1ZmZlciA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0
Q29sb3JidWZmZXIoMCk7CisgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmRyYXdCdWZmZXIgPSBk
cmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKDApOworICAgICAgICBSZW5kZXJUYXJnZXQ5
ICpyZWFkUmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICAgICAgUmVuZGVyVGFyZ2V0OSAqZHJhd1Jl
bmRlclRhcmdldCA9IE5VTEw7CisgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5KiByZWFkU3VyZmFj
ZSA9IE5VTEw7CisgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5KiBkcmF3U3VyZmFjZSA9IE5VTEw7
CisKKyAgICAgICAgaWYgKHJlYWRCdWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlYWRS
ZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShyZWFkQnVmZmVy
LT5nZXRSZW5kZXJUYXJnZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRyYXdCdWZmZXIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGRyYXdSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQ5
OjptYWtlUmVuZGVyVGFyZ2V0OShkcmF3QnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAocmVhZFJlbmRlclRhcmdldCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmVhZFN1cmZhY2UgPSByZWFkUmVuZGVyVGFyZ2V0LT5nZXRTdXJmYWNlKCk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGRyYXdSZW5kZXJUYXJnZXQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGRyYXdTdXJmYWNlID0gZHJhd1JlbmRlclRhcmdldC0+Z2V0U3VyZmFjZSgpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCFyZWFkU3VyZmFjZSB8fCAhZHJhd1N1cmZhY2UpCisgICAgICAg
IHsKKyAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0
LiIpOworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxz
ZSk7CisgICAgICAgIH0KKworICAgICAgICBSRUNUIHNyY1JlY3Q7CisgICAgICAgIHNyY1JlY3Qu
bGVmdCA9IHJlYWRSZWN0Lng7CisgICAgICAgIHNyY1JlY3QucmlnaHQgPSByZWFkUmVjdC54ICsg
cmVhZFJlY3Qud2lkdGg7CisgICAgICAgIHNyY1JlY3QudG9wID0gcmVhZFJlY3QueTsKKyAgICAg
ICAgc3JjUmVjdC5ib3R0b20gPSByZWFkUmVjdC55ICsgcmVhZFJlY3QuaGVpZ2h0OworCisgICAg
ICAgIFJFQ1QgZHN0UmVjdDsKKyAgICAgICAgZHN0UmVjdC5sZWZ0ID0gZHJhd1JlY3QueDsKKyAg
ICAgICAgZHN0UmVjdC5yaWdodCA9IGRyYXdSZWN0LnggKyBkcmF3UmVjdC53aWR0aDsKKyAgICAg
ICAgZHN0UmVjdC50b3AgPSBkcmF3UmVjdC55OworICAgICAgICBkc3RSZWN0LmJvdHRvbSA9IGRy
YXdSZWN0LnkgKyBkcmF3UmVjdC5oZWlnaHQ7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBt
RGV2aWNlLT5TdHJldGNoUmVjdChyZWFkU3VyZmFjZSwgJnNyY1JlY3QsIGRyYXdTdXJmYWNlLCAm
ZHN0UmVjdCwgRDNEVEVYRl9OT05FKTsKKworICAgICAgICByZWFkU3VyZmFjZS0+UmVsZWFzZSgp
OworICAgICAgICBkcmF3U3VyZmFjZS0+UmVsZWFzZSgpOworCisgICAgICAgIGlmIChGQUlMRUQo
cmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJCbGl0RnJhbWVidWZmZXJBTkdM
RSBmYWlsZWQ6IFN0cmV0Y2hSZWN0IHJldHVybmVkICV4LiIsIHJlc3VsdCk7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYmxpdERlcHRoU3Rl
bmNpbCkKKyAgICB7CisgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlYWRCdWZmZXIgPSByZWFk
RnJhbWVidWZmZXItPmdldERlcHRoT3JTdGVuY2lsYnVmZmVyKCk7CisgICAgICAgIGdsOjpSZW5k
ZXJidWZmZXIgKmRyYXdCdWZmZXIgPSBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoT3JTdGVuY2ls
YnVmZmVyKCk7CisgICAgICAgIFJlbmRlclRhcmdldDkgKnJlYWREZXB0aFN0ZW5jaWwgPSBOVUxM
OworICAgICAgICBSZW5kZXJUYXJnZXQ5ICpkcmF3RGVwdGhTdGVuY2lsID0gTlVMTDsKKyAgICAg
ICAgSURpcmVjdDNEU3VyZmFjZTkqIHJlYWRTdXJmYWNlID0gTlVMTDsKKyAgICAgICAgSURpcmVj
dDNEU3VyZmFjZTkqIGRyYXdTdXJmYWNlID0gTlVMTDsKKworICAgICAgICBpZiAocmVhZEJ1ZmZl
cikKKyAgICAgICAgeworICAgICAgICAgICAgcmVhZERlcHRoU3RlbmNpbCA9IFJlbmRlclRhcmdl
dDk6Om1ha2VSZW5kZXJUYXJnZXQ5KHJlYWRCdWZmZXItPmdldERlcHRoU3RlbmNpbCgpKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoZHJhd0J1ZmZlcikKKyAgICAgICAgeworICAgICAgICAgICAg
ZHJhd0RlcHRoU3RlbmNpbCA9IFJlbmRlclRhcmdldDk6Om1ha2VSZW5kZXJUYXJnZXQ5KGRyYXdC
dWZmZXItPmdldERlcHRoU3RlbmNpbCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZWFk
RGVwdGhTdGVuY2lsKQorICAgICAgICB7CisgICAgICAgICAgICByZWFkU3VyZmFjZSA9IHJlYWRE
ZXB0aFN0ZW5jaWwtPmdldFN1cmZhY2UoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZHJhd0Rl
cHRoU3RlbmNpbCkKKyAgICAgICAgeworICAgICAgICAgICAgZHJhd1N1cmZhY2UgPSBkcmF3RGVw
dGhTdGVuY2lsLT5nZXRTdXJmYWNlKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXJlYWRT
dXJmYWNlIHx8ICFkcmF3U3VyZmFjZSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJGYWls
ZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQuIik7CisgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAg
IEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+U3RyZXRjaFJlY3QocmVhZFN1cmZhY2UsIE5VTEws
IGRyYXdTdXJmYWNlLCBOVUxMLCBEM0RURVhGX05PTkUpOworCisgICAgICAgIHJlYWRTdXJmYWNl
LT5SZWxlYXNlKCk7CisgICAgICAgIGRyYXdTdXJmYWNlLT5SZWxlYXNlKCk7CisKKyAgICAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkJsaXRGcmFt
ZWJ1ZmZlckFOR0xFIGZhaWxlZDogU3RyZXRjaFJlY3QgcmV0dXJuZWQgJXguIiwgcmVzdWx0KTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIFJlbmRlcmVyOTo6cmVhZFBpeGVscyhnbDo6RnJhbWVidWZmZXIg
KmZyYW1lYnVmZmVyLCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xzaXplaSBvdXRwdXRQaXRjaCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLCBHTGlu
dCBwYWNrQWxpZ25tZW50LCB2b2lkKiBwaXhlbHMpCit7CisgICAgUmVuZGVyVGFyZ2V0OSAqcmVu
ZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IE5VTEw7
CisgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29s
b3JidWZmZXIoMCk7CisKKyAgICBpZiAoY29sb3JidWZmZXIpCisgICAgeworICAgICAgICByZW5k
ZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShjb2xvcmJ1ZmZlci0+
Z2V0UmVuZGVyVGFyZ2V0KCkpOworICAgIH0KKyAgICAKKyAgICBpZiAocmVuZGVyVGFyZ2V0KQor
ICAgIHsKKyAgICAgICAgc3VyZmFjZSA9IHJlbmRlclRhcmdldC0+Z2V0U3VyZmFjZSgpOworICAg
IH0KKworICAgIGlmICghc3VyZmFjZSkKKyAgICB7CisgICAgICAgIC8vIGNvbnRleHQgbXVzdCBi
ZSBsb3N0CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBEM0RTVVJGQUNFX0RFU0MgZGVz
YzsKKyAgICBzdXJmYWNlLT5HZXREZXNjKCZkZXNjKTsKKworICAgIGlmIChkZXNjLk11bHRpU2Ft
cGxlVHlwZSAhPSBEM0RNVUxUSVNBTVBMRV9OT05FKQorICAgIHsKKyAgICAgICAgVU5JTVBMRU1F
TlRFRCgpOyAgIC8vIEZJWE1FOiBSZXF1aXJlcyByZXNvbHZlIHVzaW5nIFN0cmV0Y2hSZWN0IGlu
dG8gbm9uLW11bHRpc2FtcGxlZCByZW5kZXIgdGFyZ2V0CisgICAgICAgIHN1cmZhY2UtPlJlbGVh
c2UoKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
CisKKyAgICBIUkVTVUxUIHJlc3VsdDsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3lzdGVtU3Vy
ZmFjZSA9IE5VTEw7CisgICAgYm9vbCBkaXJlY3RUb1BpeGVscyA9ICFwYWNrUmV2ZXJzZVJvd09y
ZGVyICYmIHBhY2tBbGlnbm1lbnQgPD0gNCAmJiBnZXRTaGFyZUhhbmRsZVN1cHBvcnQoKSAmJgor
ICAgICAgICAgICAgICAgICAgICAgICAgICB4ID09IDAgJiYgeSA9PSAwICYmIFVJTlQod2lkdGgp
ID09IGRlc2MuV2lkdGggJiYgVUlOVChoZWlnaHQpID09IGRlc2MuSGVpZ2h0ICYmCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc2MuRm9ybWF0ID09IEQzREZNVF9BOFI4RzhCOCAmJiBmb3Jt
YXQgPT0gR0xfQkdSQV9FWFQgJiYgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFOworICAgIGlmIChk
aXJlY3RUb1BpeGVscykKKyAgICB7CisgICAgICAgIC8vIFVzZSB0aGUgcGl4ZWxzIHB0ciBhcyBh
IHNoYXJlZCBoYW5kbGUgdG8gd3JpdGUgZGlyZWN0bHkgaW50byBjbGllbnQncyBtZW1vcnkKKyAg
ICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRlc2Mu
V2lkdGgsIGRlc2MuSGVpZ2h0LCBkZXNjLkZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFBPT0xfU1lTVEVNTUVNLCAmc3lzdGVt
U3VyZmFjZSwgJnBpeGVscyk7CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAg
eworICAgICAgICAgICAgLy8gVHJ5IGFnYWluIHdpdGhvdXQgdGhlIHNoYXJlZCBoYW5kbGUKKyAg
ICAgICAgICAgIGRpcmVjdFRvUGl4ZWxzID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAoIWRpcmVjdFRvUGl4ZWxzKQorICAgIHsKKyAgICAgICAgcmVzdWx0ID0gbURldmljZS0+
Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBkZXNj
LkZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEQzRFBPT0xfU1lTVEVNTUVNLCAmc3lzdGVtU3VyZmFjZSwgTlVMTCk7CisgICAgICAg
IGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlc3Vs
dCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7
CisgICAgICAgICAgICBzdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmVzdWx0
ID0gbURldmljZS0+R2V0UmVuZGVyVGFyZ2V0RGF0YShzdXJmYWNlLCBzeXN0ZW1TdXJmYWNlKTsK
KyAgICBzdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgc3VyZmFjZSA9IE5VTEw7CisKKyAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7
CisKKyAgICAgICAgLy8gSXQgdHVybnMgb3V0IHRoYXQgRDNEIHdpbGwgc29tZXRpbWVzIHByb2R1
Y2UgbW9yZSBlcnJvcgorICAgICAgICAvLyBjb2RlcyB0aGFuIHRob3NlIGRvY3VtZW50ZWQuCisg
ICAgICAgIGlmIChkM2Q5Ojppc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBub3RpZnlEZXZpY2VMb3N0KCk7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgfQorCisgICAgaWYgKGRpcmVjdFRvUGl4ZWxzKQorICAgIHsKKyAgICAgICAg
c3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
UkVDVCByZWN0OworICAgIHJlY3QubGVmdCA9IGdsOjpjbGFtcCh4LCAwTCwgc3RhdGljX2Nhc3Q8
TE9ORz4oZGVzYy5XaWR0aCkpOworICAgIHJlY3QudG9wID0gZ2w6OmNsYW1wKHksIDBMLCBzdGF0
aWNfY2FzdDxMT05HPihkZXNjLkhlaWdodCkpOworICAgIHJlY3QucmlnaHQgPSBnbDo6Y2xhbXAo
eCArIHdpZHRoLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVzYy5XaWR0aCkpOworICAgIHJlY3Qu
Ym90dG9tID0gZ2w6OmNsYW1wKHkgKyBoZWlnaHQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNj
LkhlaWdodCkpOworCisgICAgRDNETE9DS0VEX1JFQ1QgbG9jazsKKyAgICByZXN1bHQgPSBzeXN0
ZW1TdXJmYWNlLT5Mb2NrUmVjdCgmbG9jaywgJnJlY3QsIEQzRExPQ0tfUkVBRE9OTFkpOworCisg
ICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOworCisgICAgICAgIHJldHVybjsgICAvLyBO
byBzZW5zaWJsZSBlcnJvciB0byBnZW5lcmF0ZQorICAgIH0KKworICAgIHVuc2lnbmVkIGNoYXIg
KmRlc3QgPSAodW5zaWduZWQgY2hhciopcGl4ZWxzOworICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0
MTYgPSAodW5zaWduZWQgc2hvcnQqKXBpeGVsczsKKworICAgIHVuc2lnbmVkIGNoYXIgKnNvdXJj
ZTsKKyAgICBpbnQgaW5wdXRQaXRjaDsKKyAgICBpZiAocGFja1JldmVyc2VSb3dPcmRlcikKKyAg
ICB7CisgICAgICAgIHNvdXJjZSA9ICgodW5zaWduZWQgY2hhciopbG9jay5wQml0cykgKyBsb2Nr
LlBpdGNoICogKHJlY3QuYm90dG9tIC0gcmVjdC50b3AgLSAxKTsKKyAgICAgICAgaW5wdXRQaXRj
aCA9IC1sb2NrLlBpdGNoOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzb3VyY2Ug
PSAodW5zaWduZWQgY2hhciopbG9jay5wQml0czsKKyAgICAgICAgaW5wdXRQaXRjaCA9IGxvY2su
UGl0Y2g7CisgICAgfQorCisgICAgdW5zaWduZWQgaW50IGZhc3RQaXhlbFNpemUgPSAwOworCisg
ICAgaWYgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BOFI4RzhCOCAmJgorICAgICAgICBmb3JtYXQg
PT0gR0xfQkdSQV9FWFQgJiYKKyAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQorICAg
IHsKKyAgICAgICAgZmFzdFBpeGVsU2l6ZSA9IDQ7CisgICAgfQorICAgIGVsc2UgaWYgKChkZXNj
LkZvcm1hdCA9PSBEM0RGTVRfQTRSNEc0QjQgJiYKKyAgICAgICAgICAgICBmb3JtYXQgPT0gR0xf
QkdSQV9FWFQgJiYKKyAgICAgICAgICAgICB0eXBlID09IEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80
XzRfUkVWX0VYVCkgfHwKKyAgICAgICAgICAgICAoZGVzYy5Gb3JtYXQgPT0gRDNERk1UX0ExUjVH
NUI1ICYmCisgICAgICAgICAgICAgZm9ybWF0ID09IEdMX0JHUkFfRVhUICYmCisgICAgICAgICAg
ICAgdHlwZSA9PSBHTF9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQpKQorICAgIHsKKyAg
ICAgICAgZmFzdFBpeGVsU2l6ZSA9IDI7CisgICAgfQorICAgIGVsc2UgaWYgKGRlc2MuRm9ybWF0
ID09IEQzREZNVF9BMTZCMTZHMTZSMTZGICYmCisgICAgICAgICAgICAgZm9ybWF0ID09IEdMX1JH
QkEgJiYKKyAgICAgICAgICAgICB0eXBlID09IEdMX0hBTEZfRkxPQVRfT0VTKQorICAgIHsKKyAg
ICAgICAgZmFzdFBpeGVsU2l6ZSA9IDg7CisgICAgfQorICAgIGVsc2UgaWYgKGRlc2MuRm9ybWF0
ID09IEQzREZNVF9BMzJCMzJHMzJSMzJGICYmCisgICAgICAgICAgICAgZm9ybWF0ID09IEdMX1JH
QkEgJiYKKyAgICAgICAgICAgICB0eXBlID09IEdMX0ZMT0FUKQorICAgIHsKKyAgICAgICAgZmFz
dFBpeGVsU2l6ZSA9IDE2OworICAgIH0KKworICAgIGZvciAoaW50IGogPSAwOyBqIDwgcmVjdC5i
b3R0b20gLSByZWN0LnRvcDsgaisrKQorICAgIHsKKyAgICAgICAgaWYgKGZhc3RQaXhlbFNpemUg
IT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRmFzdCBwYXRoIGZvciBmb3JtYXRzIHdo
aWNoIHJlcXVpcmUgbm8gdHJhbnNsYXRpb246CisgICAgICAgICAgICAvLyBEM0RGTVRfQThSOEc4
QjggdG8gQkdSQS9VTlNJR05FRF9CWVRFCisgICAgICAgICAgICAvLyBEM0RGTVRfQTRSNEc0QjQg
dG8gQkdSQS9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQKKyAgICAgICAgICAgIC8vIEQz
REZNVF9BMVI1RzVCNSB0byBCR1JBL1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVAorICAg
ICAgICAgICAgLy8gRDNERk1UX0ExNkIxNkcxNlIxNkYgdG8gUkdCQS9IQUxGX0ZMT0FUX09FUwor
ICAgICAgICAgICAgLy8gRDNERk1UX0EzMkIzMkczMlIzMkYgdG8gUkdCQS9GTE9BVAorICAgICAg
ICAgICAgLy8gCisgICAgICAgICAgICAvLyBOb3RlIHRoYXQgYnVmZmVycyB3aXRoIG5vIGFscGhh
IGdvIHRocm91Z2ggdGhlIHNsb3cgcGF0aCBiZWxvdy4KKyAgICAgICAgICAgIG1lbWNweShkZXN0
ICsgaiAqIG91dHB1dFBpdGNoLAorICAgICAgICAgICAgICAgICAgIHNvdXJjZSArIGogKiBpbnB1
dFBpdGNoLAorICAgICAgICAgICAgICAgICAgIChyZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0KSAqIGZh
c3RQaXhlbFNpemUpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSBpZiAoZGVzYy5Gb3JtYXQgPT0gRDNERk1UX0E4UjhHOEI4ICYmCisgICAgICAgICAgICAg
ICAgIGZvcm1hdCA9PSBHTF9SR0JBICYmCisgICAgICAgICAgICAgICAgIHR5cGUgPT0gR0xfVU5T
SUdORURfQllURSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRmFzdCBwYXRoIGZvciBzd2Fw
cGluZyByZWQgd2l0aCBibHVlCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3Qu
cmlnaHQgLSByZWN0LmxlZnQ7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICog
aW5wdXRQaXRjaCk7CisgICAgICAgICAgICAgICAgKih1bnNpZ25lZCBpbnQqKShkZXN0ICsgNCAq
IGkgKyBqICogb3V0cHV0UGl0Y2gpID0KKyAgICAgICAgICAgICAgICAgICAgKGFyZ2IgJiAweEZG
MDBGRjAwKSB8ICAgICAgIC8vIEtlZXAgYWxwaGEgYW5kIGdyZWVuCisgICAgICAgICAgICAgICAg
ICAgIChhcmdiICYgMHgwMEZGMDAwMCkgPj4gMTYgfCAvLyBNb3ZlIHJlZCB0byBibHVlCisgICAg
ICAgICAgICAgICAgICAgIChhcmdiICYgMHgwMDAwMDBGRikgPDwgMTY7ICAvLyBNb3ZlIGJsdWUg
dG8gcmVkCisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdC5yaWdodCAtIHJlY3QubGVmdDsgaSsr
KQorICAgICAgICB7CisgICAgICAgICAgICBmbG9hdCByOworICAgICAgICAgICAgZmxvYXQgZzsK
KyAgICAgICAgICAgIGZsb2F0IGI7CisgICAgICAgICAgICBmbG9hdCBhOworCisgICAgICAgICAg
ICBzd2l0Y2ggKGRlc2MuRm9ybWF0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNl
IEQzREZNVF9SNUc2QjU6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBzaG9ydCByZ2IgPSAqKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsgMiAqIGkgKyBq
ICogaW5wdXRQaXRjaCk7CisKKyAgICAgICAgICAgICAgICAgICAgYSA9IDEuMGY7CisgICAgICAg
ICAgICAgICAgICAgIGIgPSAocmdiICYgMHgwMDFGKSAqICgxLjBmIC8gMHgwMDFGKTsKKyAgICAg
ICAgICAgICAgICAgICAgZyA9IChyZ2IgJiAweDA3RTApICogKDEuMGYgLyAweDA3RTApOworICAg
ICAgICAgICAgICAgICAgICByID0gKHJnYiAmIDB4RjgwMCkgKiAoMS4wZiAvIDB4RjgwMCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEQzREZNVF9BMVI1RzVCNToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIHNob3J0IGFyZ2IgPSAqKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsgMiAq
IGkgKyBqICogaW5wdXRQaXRjaCk7CisKKyAgICAgICAgICAgICAgICAgICAgYSA9IChhcmdiICYg
MHg4MDAwKSA/IDEuMGYgOiAwLjBmOworICAgICAgICAgICAgICAgICAgICBiID0gKGFyZ2IgJiAw
eDAwMUYpICogKDEuMGYgLyAweDAwMUYpOworICAgICAgICAgICAgICAgICAgICBnID0gKGFyZ2Ig
JiAweDAzRTApICogKDEuMGYgLyAweDAzRTApOworICAgICAgICAgICAgICAgICAgICByID0gKGFy
Z2IgJiAweDdDMDApICogKDEuMGYgLyAweDdDMDApOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Cisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9
ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7CisKKyAg
ICAgICAgICAgICAgICAgICAgYSA9IChhcmdiICYgMHhGRjAwMDAwMCkgKiAoMS4wZiAvIDB4RkYw
MDAwMDApOworICAgICAgICAgICAgICAgICAgICBiID0gKGFyZ2IgJiAweDAwMDAwMEZGKSAqICgx
LjBmIC8gMHgwMDAwMDBGRik7CisgICAgICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDAw
MEZGMDApICogKDEuMGYgLyAweDAwMDBGRjAwKTsKKyAgICAgICAgICAgICAgICAgICAgciA9IChh
cmdiICYgMHgwMEZGMDAwMCkgKiAoMS4wZiAvIDB4MDBGRjAwMDApOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfWDhS
OEc4Qjg6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgeHJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRj
aCk7CisKKyAgICAgICAgICAgICAgICAgICAgYSA9IDEuMGY7CisgICAgICAgICAgICAgICAgICAg
IGIgPSAoeHJnYiAmIDB4MDAwMDAwRkYpICogKDEuMGYgLyAweDAwMDAwMEZGKTsKKyAgICAgICAg
ICAgICAgICAgICAgZyA9ICh4cmdiICYgMHgwMDAwRkYwMCkgKiAoMS4wZiAvIDB4MDAwMEZGMDAp
OworICAgICAgICAgICAgICAgICAgICByID0gKHhyZ2IgJiAweDAwRkYwMDAwKSAqICgxLjBmIC8g
MHgwMEZGMDAwMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMlIxMEcxMEIxMDoKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdiID0gKih1bnNpZ25lZCBpbnQq
KShzb3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBpdGNoKTsKKworICAgICAgICAgICAgICAgICAg
ICBhID0gKGFyZ2IgJiAweEMwMDAwMDAwKSAqICgxLjBmIC8gMHhDMDAwMDAwMCk7CisgICAgICAg
ICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAwMDAzRkYpICogKDEuMGYgLyAweDAwMDAwM0ZG
KTsKKyAgICAgICAgICAgICAgICAgICAgZyA9IChhcmdiICYgMHgwMDBGRkMwMCkgKiAoMS4wZiAv
IDB4MDAwRkZDMDApOworICAgICAgICAgICAgICAgICAgICByID0gKGFyZ2IgJiAweDNGRjAwMDAw
KSAqICgxLjBmIC8gMHgzRkYwMDAwMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gZmxvYXQgZm9ybWF0cyBpbiBE
M0QgYXJlIHN0b3JlZCByZ2JhLCByYXRoZXIgdGhhbiB0aGUgb3RoZXIgd2F5IHJvdW5kCisgICAg
ICAgICAgICAgICAgICAgIHIgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGogKiBpbnB1
dFBpdGNoKSArIDApOworICAgICAgICAgICAgICAgICAgICBnID0gKigoZmxvYXQqKShzb3VyY2Ug
KyAxNiAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgYiA9
ICooKGZsb2F0Kikoc291cmNlICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMik7CisgICAg
ICAgICAgICAgICAgICAgIGEgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGogKiBpbnB1
dFBpdGNoKSArIDMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0IGZvcm1hdHMgaW4gRDNEIGFyZSBzdG9y
ZWQgcmdiYSwgcmF0aGVyIHRoYW4gdGhlIG90aGVyIHdheSByb3VuZAorICAgICAgICAgICAgICAg
ICAgICByID0gZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKigodW5zaWduZWQgc2hvcnQqKShzb3VyY2Ug
KyA4ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDApKTsKKyAgICAgICAgICAgICAgICAgICAgZyA9
IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCooKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsgOCAqIGkg
KyBqICogaW5wdXRQaXRjaCkgKyAxKSk7CisgICAgICAgICAgICAgICAgICAgIGIgPSBnbDo6Zmxv
YXQxNlRvRmxvYXQzMigqKCh1bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDggKiBpICsgaiAqIGlu
cHV0UGl0Y2gpICsgMikpOworICAgICAgICAgICAgICAgICAgICBhID0gZ2w6OmZsb2F0MTZUb0Zs
b2F0MzIoKigodW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyA4ICogaSArIGogKiBpbnB1dFBpdGNo
KSArIDMpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8v
IEZJWE1FCisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAgICAgICAgICAg
c3dpdGNoICh0eXBlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBv
dXRwdXRQaXRjaCArIDBdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIHIgKyAwLjVmKTsKKyAgICAg
ICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDFdID0gKHVuc2ln
bmVkIGNoYXIpKDI1NSAqIGcgKyAwLjVmKTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICog
aSArIGogKiBvdXRwdXRQaXRjaCArIDJdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGIgKyAwLjVm
KTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDNd
ID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGEgKyAwLjVmKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9CR1JBX0VYVDoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICAg
ICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMF0gPSAodW5zaWduZWQg
Y2hhcikoMjU1ICogYiArIDAuNWYpOworICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsg
aiAqIG91dHB1dFBpdGNoICsgMV0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogZyArIDAuNWYpOwor
ICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMl0gPSAo
dW5zaWduZWQgY2hhcikoMjU1ICogciArIDAuNWYpOworICAgICAgICAgICAgICAgICAgICBkZXN0
WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgM10gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYSAr
IDAuNWYpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNh
c2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhUOgorICAgICAgICAgICAgICAgICAg
ICAvLyBBY2NvcmRpbmcgdG8gdGhlIGRlc2t0b3AgR0wgc3BlYyBpbiB0aGUgIlRyYW5zZmVyIG9m
IFBpeGVsIFJlY3RhbmdsZXMiIHNlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB0
eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAvLyAgIDE1ICAg
MTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAgICAz
ICAgIDIgICAgMSAgICAwCisgICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAvLyB8ICAgICAgIDR0aCAgICAgICAgIHwgICAg
ICAgIDNyZCAgICAgICAgIHwgICAgICAgIDJuZCAgICAgICAgfCAgIDFzdCBjb21wb25lbnQgICB8
CisgICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAg
ICAgICAgICAgICAgICAvLyBpbiB0aGUgY2FzZSBvZiBCR1JBX0VYVCwgQiBpcyB0aGUgZmlyc3Qg
Y29tcG9uZW50LCBHIHRoZSBzZWNvbmQsIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgICAgICAg
ICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9
CisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIGEgKyAwLjVm
KSA8PCAxMil8CisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAq
IHIgKyAwLjVmKSA8PCA4KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNo
b3J0KSgxNSAqIGcgKyAwLjVmKSA8PCA0KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAoKHVu
c2lnbmVkIHNob3J0KSgxNSAqIGIgKyAwLjVmKSA8PCAwKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVf
UkVWX0VYVDoKKyAgICAgICAgICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9w
IEdMIHNwZWMgaW4gdGhlICJUcmFuc2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCisg
ICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgdHlwZSBpcyBwYWNrZWQgYXMgZm9sbG93czoKKyAg
ICAgICAgICAgICAgICAgICAgLy8gICAxNSAgIDE0ICAgMTMgICAxMiAgIDExICAgMTAgICAgOSAg
ICA4ICAgIDcgICAgNiAgICA1ICAgIDQgICAgMyAgICAyICAgIDEgICAgMAorICAgICAgICAgICAg
ICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAg
Ly8gfCA0dGggfCAgICAgICAgICAzcmQgICAgICAgICAgIHwgICAgICAgICAgIDJuZCAgICAgICAg
ICB8ICAgICAgMXN0IGNvbXBvbmVudCAgICAgfAorICAgICAgICAgICAgICAgICAgICAvLyAgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ug
b2YgQkdSQV9FWFQsIEIgaXMgdGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQg
c28gZm9ydGguCisgICAgICAgICAgICAgICAgICAgIGRlc3QxNltpICsgaiAqIG91dHB1dFBpdGNo
IC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KV0gPQorICAgICAgICAgICAgICAgICAgICAgICAgKCh1
bnNpZ25lZCBzaG9ydCkoICAgICBhICsgMC41ZikgPDwgMTUpIHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogciArIDAuNWYpIDw8IDEwKSB8CisgICAgICAg
ICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIGcgKyAwLjVmKSA8PCA1KSB8
CisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIGIgKyAwLjVm
KSA8PCAwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9SR0I6CisgICAgICAgICAgICAgICAgc3dp
dGNoICh0eXBlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xf
VU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgICAgICAgICAgICAgICAgIGRlc3QxNltpICsgaiAq
IG91dHB1dFBpdGNoIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KV0gPSAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogYiArIDAuNWYpIDw8IDApIHwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDYzICogZyArIDAuNWYpIDw8IDUp
IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogciArIDAu
NWYpIDw8IDExKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgICAgICAgICAgIGRlc3RbMyAqIGkg
KyBqICogb3V0cHV0UGl0Y2ggKyAwXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiByICsgMC41Zik7
CisgICAgICAgICAgICAgICAgICAgIGRlc3RbMyAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAxXSA9
ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBnICsgMC41Zik7CisgICAgICAgICAgICAgICAgICAgIGRl
c3RbMyAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAyXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBi
ICsgMC41Zik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzeXN0ZW1TdXJmYWNlLT5VbmxvY2tSZWN0
KCk7CisKKyAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7Cit9CisKK1JlbmRlclRhcmdldCAq
UmVuZGVyZXI5OjpjcmVhdGVSZW5kZXJUYXJnZXQoU3dhcENoYWluICpzd2FwQ2hhaW4sIGJvb2wg
ZGVwdGgpCit7CisgICAgU3dhcENoYWluOSAqc3dhcENoYWluOSA9IFN3YXBDaGFpbjk6Om1ha2VT
d2FwQ2hhaW45KHN3YXBDaGFpbik7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBO
VUxMOworICAgIGlmIChkZXB0aCkKKyAgICB7CisgICAgICAgIHN1cmZhY2UgPSBzd2FwQ2hhaW45
LT5nZXREZXB0aFN0ZW5jaWwoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3Vy
ZmFjZSA9IHN3YXBDaGFpbjktPmdldFJlbmRlclRhcmdldCgpOworICAgIH0KKworICAgIFJlbmRl
clRhcmdldDkgKnJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQ5KHRoaXMsIHN1cmZhY2Up
OworCisgICAgcmV0dXJuIHJlbmRlclRhcmdldDsKK30KKworUmVuZGVyVGFyZ2V0ICpSZW5kZXJl
cjk6OmNyZWF0ZVJlbmRlclRhcmdldChpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsIEdMc2l6ZWkgc2FtcGxlcywgYm9vbCBkZXB0aCkKK3sKKyAgICBSZW5kZXJUYXJnZXQ5ICpy
ZW5kZXJUYXJnZXQgPSBuZXcgUmVuZGVyVGFyZ2V0OSh0aGlzLCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHNhbXBsZXMpOworICAgIHJldHVybiByZW5kZXJUYXJnZXQ7Cit9CisKK1NoYWRlckV4ZWN1
dGFibGUgKlJlbmRlcmVyOTo6bG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNp
emVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUpCit7CisgICAgU2hhZGVyRXhlY3V0YWJs
ZTkgKmV4ZWN1dGFibGUgPSBOVUxMOworCisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAg
IGNhc2Ugcng6OlNIQURFUl9WRVJURVg6CisgICAgICAgIHsKKyAgICAgICAgICAgIElEaXJlY3Qz
RFZlcnRleFNoYWRlcjkgKnZzaGFkZXIgPSBjcmVhdGVWZXJ0ZXhTaGFkZXIoKERXT1JEKilmdW5j
dGlvbiwgbGVuZ3RoKTsKKyAgICAgICAgICAgIGlmICh2c2hhZGVyKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBuZXcgU2hhZGVyRXhlY3V0YWJsZTkoZnVuY3Rp
b24sIGxlbmd0aCwgdnNoYWRlcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIHJ4OjpTSEFERVJfUElYRUw6CisgICAgICAgIHsKKyAgICAgICAg
ICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqcHNoYWRlciA9IGNyZWF0ZVBpeGVsU2hhZGVyKChE
V09SRCopZnVuY3Rpb24sIGxlbmd0aCk7CisgICAgICAgICAgICBpZiAocHNoYWRlcikKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3IFNoYWRlckV4ZWN1dGFi
bGU5KGZ1bmN0aW9uLCBsZW5ndGgsIHBzaGFkZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGV4ZWN1dGFibGU7Cit9CisKK1No
YWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyOTo6Y29tcGlsZVRvRXhlY3V0YWJsZShnbDo6SW5mb0xv
ZyAmaW5mb0xvZywgY29uc3QgY2hhciAqc2hhZGVySExTTCwgcng6OlNoYWRlclR5cGUgdHlwZSwg
RDNEV29ya2Fyb3VuZFR5cGUgd29ya2Fyb3VuZCkKK3sKKyAgICBjb25zdCBjaGFyICpwcm9maWxl
ID0gTlVMTDsKKworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIHJ4OjpTSEFE
RVJfVkVSVEVYOgorICAgICAgICBwcm9maWxlID0gZ2V0TWFqb3JTaGFkZXJNb2RlbCgpID49IDMg
PyAidnNfM18wIiA6ICJ2c18yXzAiOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ugcng6OlNI
QURFUl9QSVhFTDoKKyAgICAgICAgcHJvZmlsZSA9IGdldE1ham9yU2hhZGVyTW9kZWwoKSA+PSAz
ID8gInBzXzNfMCIgOiAicHNfMl8wIjsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0Ogor
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAg
ICAvLyBBTkdMRSBpc3N1ZSA0ODY6CisgICAgLy8gV29yay1hcm91bmQgYSBEM0Q5IGNvbXBpbGVy
IGJ1ZyB0aGF0IHByZXNlbnRzIGl0c2VsZiB3aGVuIHVzaW5nIGNvbmRpdGlvbmFsIGRpc2NhcmQs
IGJ5IGRpc2FibGluZyBvcHRpbWl6YXRpb24KKyAgICBVSU5UIG9wdGltaXphdGlvbkZsYWdzID0g
KHdvcmthcm91bmQgPT0gQU5HTEVfRDNEX1dPUktBUk9VTkRfU00zX09QVElNSVpFUiA/IEQzRENP
TVBJTEVfU0tJUF9PUFRJTUlaQVRJT04gOiBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZF
TCk7CisKKyAgICBJRDNEQmxvYiAqYmluYXJ5ID0gKElEM0RCbG9iKiljb21waWxlVG9CaW5hcnko
aW5mb0xvZywgc2hhZGVySExTTCwgcHJvZmlsZSwgb3B0aW1pemF0aW9uRmxhZ3MsIHRydWUpOwor
ICAgIGlmICghYmluYXJ5KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFNoYWRlckV4ZWN1
dGFibGUgKmV4ZWN1dGFibGUgPSBsb2FkRXhlY3V0YWJsZShiaW5hcnktPkdldEJ1ZmZlclBvaW50
ZXIoKSwgYmluYXJ5LT5HZXRCdWZmZXJTaXplKCksIHR5cGUpOworICAgIGJpbmFyeS0+UmVsZWFz
ZSgpOworCisgICAgcmV0dXJuIGV4ZWN1dGFibGU7Cit9CisKK2Jvb2wgUmVuZGVyZXI5Ojpib3hG
aWx0ZXIoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3Qp
Cit7CisgICAgcmV0dXJuIG1CbGl0LT5ib3hGaWx0ZXIoc291cmNlLCBkZXN0KTsKK30KKworRDNE
UE9PTCBSZW5kZXJlcjk6OmdldFRleHR1cmVQb29sKERXT1JEIHVzYWdlKSBjb25zdAoreworICAg
IGlmIChtRDNkOUV4ICE9IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4gRDNEUE9PTF9ERUZB
VUxUOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoISh1c2FnZSAmIChEM0RV
U0FHRV9ERVBUSFNURU5DSUwgfCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQpKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIEQzRFBPT0xfTUFOQUdFRDsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiBEM0RQT09MX0RFRkFVTFQ7Cit9CisKK2Jvb2wgUmVuZGVyZXI5Ojpjb3B5VG9S
ZW5kZXJUYXJnZXQoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIElEaXJlY3QzRFN1cmZhY2U5ICpz
b3VyY2UsIGJvb2wgZnJvbU1hbmFnZWQpCit7CisgICAgaWYgKHNvdXJjZSAmJiBkZXN0KQorICAg
IHsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWTsKKwor
ICAgICAgICBpZiAoZnJvbU1hbmFnZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEQzRFNVUkZB
Q0VfREVTQyBkZXNjOworICAgICAgICAgICAgc291cmNlLT5HZXREZXNjKCZkZXNjKTsKKworICAg
ICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmYgPSAwOworICAgICAgICAgICAgcmVzdWx0
ID0gbURldmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRlc2MuV2lkdGgsIGRlc2Mu
SGVpZ2h0LCBkZXNjLkZvcm1hdCwgRDNEUE9PTF9TWVNURU1NRU0sICZzdXJmLCBOVUxMKTsKKwor
ICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIEltYWdlOTo6Y29weUxvY2thYmxlU3VyZmFjZXMoc3VyZiwgc291cmNlKTsKKyAg
ICAgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5VcGRhdGVTdXJmYWNlKHN1cmYsIE5VTEws
IGRlc3QsIE5VTEwpOworICAgICAgICAgICAgICAgIHN1cmYtPlJlbGVhc2UoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGVu
ZFNjZW5lKCk7CisgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5TdHJldGNoUmVjdChzb3Vy
Y2UsIE5VTEwsIGRlc3QsIE5VTEwsIEQzRFRFWEZfTk9ORSk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1
bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkp
OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK0ltYWdlICpSZW5kZXJlcjk6OmNyZWF0ZUltYWdlKCkKK3sKKyAgICBy
ZXR1cm4gbmV3IEltYWdlOSgpOworfQorCit2b2lkIFJlbmRlcmVyOTo6Z2VuZXJhdGVNaXBtYXAo
SW1hZ2UgKmRlc3QsIEltYWdlICpzcmMpCit7CisgICAgSW1hZ2U5ICpzcmM5ID0gSW1hZ2U5Ojpt
YWtlSW1hZ2U5KHNyYyk7CisgICAgSW1hZ2U5ICpkc3Q5ID0gSW1hZ2U5OjptYWtlSW1hZ2U5KGRl
c3QpOworICAgIEltYWdlOTo6Z2VuZXJhdGVNaXBtYXAoZHN0OSwgc3JjOSk7Cit9CisKK1RleHR1
cmVTdG9yYWdlICpSZW5kZXJlcjk6OmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoU3dhcENoYWluICpz
d2FwQ2hhaW4pCit7CisgICAgU3dhcENoYWluOSAqc3dhcENoYWluOSA9IFN3YXBDaGFpbjk6Om1h
a2VTd2FwQ2hhaW45KHN3YXBDaGFpbik7CisgICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTlf
MkQodGhpcywgc3dhcENoYWluOSk7Cit9CisKK1RleHR1cmVTdG9yYWdlICpSZW5kZXJlcjk6OmNy
ZWF0ZVRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBH
TGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCkKK3sKKyAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlOV8yRCh0aGlzLCBsZXZl
bHMsIGludGVybmFsZm9ybWF0LCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlLCB3aWR0aCwgaGVpZ2h0
KTsKK30KKworVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyOTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2VD
dWJlKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29s
IGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpCit7CisgICAgcmV0dXJuIG5ldyBUZXh0dXJlU3Rv
cmFnZTlfQ3ViZSh0aGlzLCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB1c2FnZSwgZm9yY2VSZW5k
ZXJhYmxlLCBzaXplKTsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldExVSUQoTFVJRCAqYWRhcHRl
ckx1aWQpIGNvbnN0Cit7CisgICAgYWRhcHRlckx1aWQtPkhpZ2hQYXJ0ID0gMDsKKyAgICBhZGFw
dGVyTHVpZC0+TG93UGFydCA9IDA7CisKKyAgICBpZiAobUQzZDlFeCkKKyAgICB7CisgICAgICAg
IG1EM2Q5RXgtPkdldEFkYXB0ZXJMVUlEKG1BZGFwdGVyLCBhZGFwdGVyTHVpZCk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L1JlbmRlcmVyOS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L1JlbmRlcmVyOS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0ZmQyYmRkODRhZWY4NGQzMmRmMWFm
NzI1NGVkMjc5MzU5NTg3NDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmgKQEAgLTAsMCArMSwz
NTYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFJlbmRlcmVyOS5oOiBEZWZpbmVzIGEgYmFj
ay1lbmQgc3BlY2lmaWMgY2xhc3MgZm9yIHRoZSBEM0Q5IHJlbmRlcmVyLgorCisjaWZuZGVmIExJ
QkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjlfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVS
X1JFTkRFUkVSOV9IXworCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvU2hh
ZGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhEZWNs
YXJhdGlvbkNhY2hlLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldC5oIgorCituYW1lc3Bh
Y2UgZ2wKK3sKK2NsYXNzIFJlbmRlcmJ1ZmZlcjsKK30KKworbmFtZXNwYWNlIHJ4Cit7CitjbGFz
cyBWZXJ0ZXhEYXRhTWFuYWdlcjsKK2NsYXNzIEluZGV4RGF0YU1hbmFnZXI7CitjbGFzcyBTdHJl
YW1pbmdJbmRleEJ1ZmZlckludGVyZmFjZTsKK3N0cnVjdCBUcmFuc2xhdGVkQXR0cmlidXRlOwor
CitjbGFzcyBSZW5kZXJlcjkgOiBwdWJsaWMgUmVuZGVyZXIKK3sKKyAgcHVibGljOgorICAgIFJl
bmRlcmVyOShlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIEhEQyBoRGMsIGJvb2wgc29mdHdhcmVEZXZp
Y2UpOworICAgIHZpcnR1YWwgflJlbmRlcmVyOSgpOworCisgICAgc3RhdGljIFJlbmRlcmVyOSAq
bWFrZVJlbmRlcmVyOShSZW5kZXJlciAqcmVuZGVyZXIpOworCisgICAgdmlydHVhbCBFR0xpbnQg
aW5pdGlhbGl6ZSgpOworICAgIHZpcnR1YWwgYm9vbCByZXNldERldmljZSgpOworCisgICAgdmly
dHVhbCBpbnQgZ2VuZXJhdGVDb25maWdzKENvbmZpZ0Rlc2MgKipjb25maWdEZXNjTGlzdCk7Cisg
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZUNvbmZpZ3MoQ29uZmlnRGVzYyAqY29uZmlnRGVzY0xpc3Qp
OworCisgICAgdm9pZCBzdGFydFNjZW5lKCk7CisgICAgdm9pZCBlbmRTY2VuZSgpOworCisgICAg
dmlydHVhbCB2b2lkIHN5bmMoYm9vbCBibG9jayk7CisKKyAgICB2aXJ0dWFsIFN3YXBDaGFpbiAq
Y3JlYXRlU3dhcENoYWluKEhXTkQgd2luZG93LCBIQU5ETEUgc2hhcmVIYW5kbGUsIEdMZW51bSBi
YWNrQnVmZmVyRm9ybWF0LCBHTGVudW0gZGVwdGhCdWZmZXJGb3JtYXQpOworCisgICAgSURpcmVj
dDNEUXVlcnk5KiBhbGxvY2F0ZUV2ZW50UXVlcnkoKTsKKyAgICB2b2lkIGZyZWVFdmVudFF1ZXJ5
KElEaXJlY3QzRFF1ZXJ5OSogcXVlcnkpOworCisgICAgLy8gcmVzb3VyY2UgY3JlYXRpb24KKyAg
ICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICpjcmVhdGVWZXJ0ZXhTaGFkZXIoY29uc3QgRFdPUkQg
KmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoKTsKKyAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKmNy
ZWF0ZVBpeGVsU2hhZGVyKGNvbnN0IERXT1JEICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCk7Cisg
ICAgSFJFU1VMVCBjcmVhdGVWZXJ0ZXhCdWZmZXIoVUlOVCBMZW5ndGgsIERXT1JEIFVzYWdlLCBJ
RGlyZWN0M0RWZXJ0ZXhCdWZmZXI5ICoqcHBWZXJ0ZXhCdWZmZXIpOworICAgIEhSRVNVTFQgY3Jl
YXRlSW5kZXhCdWZmZXIoVUlOVCBMZW5ndGgsIERXT1JEIFVzYWdlLCBEM0RGT1JNQVQgRm9ybWF0
LCBJRGlyZWN0M0RJbmRleEJ1ZmZlcjkgKipwcEluZGV4QnVmZmVyKTsKKyNpZiAwCisgICAgdm9p
ZCAqY3JlYXRlVGV4dHVyZTJEKCk7CisgICAgdm9pZCAqY3JlYXRlVGV4dHVyZUN1YmUoKTsKKyAg
ICB2b2lkICpjcmVhdGVRdWVyeSgpOworICAgIHZvaWQgKmNyZWF0ZUluZGV4QnVmZmVyKCk7Cisg
ICAgdm9pZCAqY3JlYXRlVmVydGV4YnVmZmVyKCk7CisKKyAgICAvLyBzdGF0ZSBzZXR1cAorICAg
IHZvaWQgYXBwbHlTaGFkZXJzKCk7CisgICAgdm9pZCBhcHBseUNvbnN0YW50cygpOworI2VuZGlm
CisgICAgdmlydHVhbCB2b2lkIHNldFNhbXBsZXJTdGF0ZShnbDo6U2FtcGxlclR5cGUgdHlwZSwg
aW50IGluZGV4LCBjb25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVyKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0VGV4dHVyZShnbDo6U2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBnbDo6VGV4
dHVyZSAqdGV4dHVyZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmFzdGVyaXplclN0YXRlKGNv
bnN0IGdsOjpSYXN0ZXJpemVyU3RhdGUgJnJhc3RlclN0YXRlKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6Qmxl
bmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNvbG9yICZibGVuZENvbG9yLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVNYXNrKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0RGVwdGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0
YXRlICZkZXB0aFN0ZW5jaWxTdGF0ZSwgaW50IHN0ZW5jaWxSZWYsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBzdGVuY2lsQmFja1JlZiwgYm9vbCBmcm9udEZhY2VD
Q1cpOworCisgICAgdmlydHVhbCB2b2lkIHNldFNjaXNzb3JSZWN0YW5nbGUoY29uc3QgZ2w6OlJl
Y3RhbmdsZSAmc2Npc3NvciwgYm9vbCBlbmFibGVkKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0Vmll
d3BvcnQoY29uc3QgZ2w6OlJlY3RhbmdsZSAmdmlld3BvcnQsIGZsb2F0IHpOZWFyLCBmbG9hdCB6
RmFyLCBHTGVudW0gZHJhd01vZGUsIEdMZW51bSBmcm9udEZhY2UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgaWdub3JlVmlld3BvcnQpOworCisgICAgdmlydHVhbCBib29sIGFw
cGx5UmVuZGVyVGFyZ2V0KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpOworICAgIHZpcnR1
YWwgdm9pZCBhcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpOwor
ICAgIHZpcnR1YWwgdm9pZCBhcHBseVVuaWZvcm1zKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFt
QmluYXJ5LCBnbDo6VW5pZm9ybUFycmF5ICp1bmlmb3JtQXJyYXkpOworICAgIHZpcnR1YWwgYm9v
bCBhcHBseVByaW1pdGl2ZVR5cGUoR0xlbnVtIHByaW1pdGl2ZVR5cGUsIEdMc2l6ZWkgZWxlbWVu
dENvdW50KTsKKyAgICB2aXJ0dWFsIEdMZW51bSBhcHBseVZlcnRleEJ1ZmZlcihnbDo6UHJvZ3Jh
bUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0ZXhBdHRyaWJ1
dGVzW10sIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcyk7Cisg
ICAgdmlydHVhbCBHTGVudW0gYXBwbHlJbmRleEJ1ZmZlcihjb25zdCBHTHZvaWQgKmluZGljZXMs
IGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgR0xzaXplaSBjb3VudCwgR0xlbnVtIG1v
ZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pOworCisgICAg
dmlydHVhbCB2b2lkIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6
ZWkgaW5zdGFuY2VzKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsZW1lbnRzKEdMZW51bSBtb2Rl
LCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6
QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmlu
ZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMpOworCisgICAgdmlydHVhbCB2b2lkIGNsZWFyKGNv
bnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBnbDo6RnJhbWVidWZmZXIgKmZy
YW1lQnVmZmVyKTsKKworICAgIHZpcnR1YWwgdm9pZCBtYXJrQWxsU3RhdGVEaXJ0eSgpOworCisg
ICAgLy8gbG9zdCBkZXZpY2UKKyAgICB2b2lkIG5vdGlmeURldmljZUxvc3QoKTsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNEZXZpY2VMb3N0KCk7CisgICAgdmlydHVhbCBib29sIHRlc3REZXZpY2VMb3N0
KGJvb2wgbm90aWZ5KTsKKyAgICB2aXJ0dWFsIGJvb2wgdGVzdERldmljZVJlc2V0dGFibGUoKTsK
KworICAgIC8vIFJlbmRlcmVyIGNhcGFiaWxpdGllcworICAgIElEaXJlY3QzRERldmljZTkgKmdl
dERldmljZSgpIHsgcmV0dXJuIG1EZXZpY2U7IH0KKyAgICB2aXJ0dWFsIERXT1JEIGdldEFkYXB0
ZXJWZW5kb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIGdldFJlbmRlcmVyRGVz
Y3JpcHRpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdVSUQgZ2V0QWRhcHRlcklkZW50aWZpZXIo
KSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBnZXRCR1JBVGV4dHVyZVN1cHBvcnQoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUMVRleHR1cmVTdXBwb3J0KCk7CisgICAgdmlydHVh
bCBib29sIGdldERYVDNUZXh0dXJlU3VwcG9ydCgpOworICAgIHZpcnR1YWwgYm9vbCBnZXREWFQ1
VGV4dHVyZVN1cHBvcnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RXZlbnRRdWVyeVN1cHBvcnQo
KTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRl
cmluZywgYm9vbCAqcmVuZGVyYWJsZSk7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MTZUZXh0
dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpOworICAgIHZpcnR1
YWwgYm9vbCBnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpOworICAgIHZpcnR1YWwgYm9vbCBn
ZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCk7CisgICAgdmlydHVhbCB1bnNpZ25lZCBp
bnQgZ2V0TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVu
c2lnbmVkIGludCBnZXRNYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3Q7CisgICAg
dmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVzZXJ2ZWRWZXJ0ZXhVbmlmb3JtVmVjdG9ycygpIGNv
bnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlc2VydmVkRnJhZ21lbnRVbmlmb3Jt
VmVjdG9ycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFZlcnRleFVu
aWZvcm1WZWN0b3JzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4RnJh
Z21lbnRVbmlmb3JtVmVjdG9ycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdl
dE1heFZhcnlpbmdWZWN0b3JzKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldE5vblBvd2Vy
MlRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldERlcHRoVGV4dHVy
ZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T2NjbHVzaW9uUXVlcnlTdXBw
b3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEluc3RhbmNpbmdTdXBwb3J0KCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIGdldFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5U3VwcG9ydCgp
IGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgZ2V0VGV4dHVyZU1heEFuaXNvdHJvcHkoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0U2hhcmVIYW5kbGVTdXBwb3J0KCkgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIGdldERlcml2YXRpdmVJbnN0cnVjdGlvblN1cHBvcnQoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGJvb2wgZ2V0UG9zdFN1YkJ1ZmZlclN1cHBvcnQoKSBjb25zdDsKKworICAgIHZp
cnR1YWwgaW50IGdldE1ham9yU2hhZGVyTW9kZWwoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGZsb2F0
IGdldE1heFBvaW50U2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldE1heFZpZXdwb3J0
RGltZW5zaW9uKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZVdpZHRoKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZUhlaWdodCgpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBnZXQzMkJpdEluZGV4U3VwcG9ydCgpIGNvbnN0OworICAgIERXT1JEIGdl
dENhcHNEZWNsVHlwZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBnZXRNaW5Td2FwSW50ZXJ2
YWwoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBnZXRNYXhTd2FwSW50ZXJ2YWwoKSBjb25zdDsK
KworICAgIHZpcnR1YWwgR0xzaXplaSBnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgY29uc3Q7Cisg
ICAgaW50IGdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKEQzREZPUk1BVCBmb3JtYXQsIGludCBy
ZXF1ZXN0ZWQpIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFJl
bmRlclRhcmdldHMoKSBjb25zdDsKKworICAgIEQzREZPUk1BVCBDb252ZXJ0VGV4dHVyZUludGVy
bmFsRm9ybWF0KEdMaW50IGludGVybmFsZm9ybWF0KTsKKworICAgIC8vIFBpeGVsIG9wZXJhdGlv
bnMKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlMkQgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnNvdXJjZSk7CisgICAg
dmlydHVhbCBib29sIGNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1
YmUgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc291cmNlKTsKKworICAgIHZp
cnR1YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3Qg
Z2w6OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBHTGludCBsZXZlbCk7CisgICAgdmlydHVhbCBib29s
IGNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFu
Z2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlQ3ViZSAqc3RvcmFnZSwgR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpOworCisgICAgdmly
dHVhbCBib29sIGJsaXRSZWN0KGdsOjpGcmFtZWJ1ZmZlciAqcmVhZFRhcmdldCwgY29uc3QgZ2w6
OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGdsOjpGcmFtZWJ1ZmZlciAqZHJhd1RhcmdldCwgY29uc3Qg
Z2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
YmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0RGVwdGhTdGVuY2lsKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVhZFBpeGVscyhnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBHTGludCB4LCBHTGlu
dCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBvdXRwdXRQaXRjaCwg
Ym9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLCBHTGludCBwYWNrQWxpZ25tZW50LCB2b2lkKiBwaXhl
bHMpOworCisgICAgLy8gUmVuZGVyVGFyZ2V0IGNyZWF0aW9uCisgICAgdmlydHVhbCBSZW5kZXJU
YXJnZXQgKmNyZWF0ZVJlbmRlclRhcmdldChTd2FwQ2hhaW4gKnN3YXBDaGFpbiwgYm9vbCBkZXB0
aCk7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRlclRhcmdldChpbnQgd2lk
dGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcywgYm9vbCBkZXB0
aCk7CisKKyAgICAvLyBTaGFkZXIgb3BlcmF0aW9ucworICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0
YWJsZSAqbG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgs
IHJ4OjpTaGFkZXJUeXBlIHR5cGUpOworICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqY29t
cGlsZVRvRXhlY3V0YWJsZShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqc2hhZGVy
SExTTCwgcng6OlNoYWRlclR5cGUgdHlwZSwgRDNEV29ya2Fyb3VuZFR5cGUgd29ya2Fyb3VuZCk7
CisKKyAgICAvLyBJbWFnZSBvcGVyYXRpb25zCisgICAgdmlydHVhbCBJbWFnZSAqY3JlYXRlSW1h
Z2UoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoSW1hZ2UgKmRlc3QsIEltYWdl
ICpzb3VyY2UpOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9y
YWdlMkQoU3dhcENoYWluICpzd2FwQ2hhaW4pOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2Ug
KmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCk7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0
b3JhZ2VDdWJlKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdl
LCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpOworCisgICAgLy8gQnVmZmVyIGNyZWF0
aW9uCisgICAgdmlydHVhbCBWZXJ0ZXhCdWZmZXIgKmNyZWF0ZVZlcnRleEJ1ZmZlcigpOworICAg
IHZpcnR1YWwgSW5kZXhCdWZmZXIgKmNyZWF0ZUluZGV4QnVmZmVyKCk7CisgICAgdmlydHVhbCBC
dWZmZXJTdG9yYWdlICpjcmVhdGVCdWZmZXJTdG9yYWdlKCk7CisKKyAgICAvLyBRdWVyeSBhbmQg
RmVuY2UgY3JlYXRpb24KKyAgICB2aXJ0dWFsIFF1ZXJ5SW1wbCAqY3JlYXRlUXVlcnkoR0xlbnVt
IHR5cGUpOworICAgIHZpcnR1YWwgRmVuY2VJbXBsICpjcmVhdGVGZW5jZSgpOworCisgICAgLy8g
RDNEOS1yZW5kZXJlciBzcGVjaWZpYyBtZXRob2RzCisgICAgYm9vbCBib3hGaWx0ZXIoSURpcmVj
dDNEU3VyZmFjZTkgKnNvdXJjZSwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpOworCisgICAgRDNE
UE9PTCBnZXRUZXh0dXJlUG9vbChEV09SRCB1c2FnZSkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJv
b2wgZ2V0TFVJRChMVUlEICphZGFwdGVyTHVpZCkgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBE
SVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyZXI5KTsKKworICAgIHZvaWQgZGVpbml0aWFs
aXplKCk7CisKKyAgICB2b2lkIGFwcGx5VW5pZm9ybW5mdihnbDo6VW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgdm9pZCBhcHBseVVuaWZvcm1uaXYoZ2w6OlVu
aWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMaW50ICp2KTsKKyAgICB2b2lkIGFwcGx5VW5p
Zm9ybW5idihnbDo6VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xpbnQgKnYpOworCisg
ICAgdm9pZCBkcmF3TGluZUxvb3AoR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdM
dm9pZCAqaW5kaWNlcywgaW50IG1pbkluZGV4LCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZm
ZXIpOworICAgIHZvaWQgZHJhd0luZGV4ZWRQb2ludHMoR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5
cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgaW50IG1pbkluZGV4LCBnbDo6QnVmZmVyICplbGVt
ZW50QXJyYXlCdWZmZXIpOworCisgICAgdm9pZCBnZXRNdWx0aVNhbXBsZVN1cHBvcnQoRDNERk9S
TUFUIGZvcm1hdCwgYm9vbCAqbXVsdGlTYW1wbGVBcnJheSk7CisgICAgYm9vbCBjb3B5VG9SZW5k
ZXJUYXJnZXQoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3Vy
Y2UsIGJvb2wgZnJvbU1hbmFnZWQpOworICAgIGdsOjpSZW5kZXJidWZmZXIgKmdldE51bGxDb2xv
cmJ1ZmZlcihnbDo6UmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlcik7CisKKyAgICBEM0RQT09MIGdl
dEJ1ZmZlclBvb2woRFdPUkQgdXNhZ2UpIGNvbnN0OworCisgICAgSE1PRFVMRSBtRDNkOU1vZHVs
ZTsKKyAgICBIREMgbURjOworCisgICAgdm9pZCBpbml0aWFsaXplRGV2aWNlKCk7CisgICAgRDNE
UFJFU0VOVF9QQVJBTUVURVJTIGdldERlZmF1bHRQcmVzZW50UGFyYW1ldGVycygpOworICAgIHZv
aWQgcmVsZWFzZURldmljZVJlc291cmNlcygpOworCisgICAgSFJFU1VMVCBnZXREZXZpY2VTdGF0
dXNDb2RlKCk7CisgICAgYm9vbCBpc1JlbW92ZWREZXZpY2VSZXNldHRhYmxlKCkgY29uc3Q7Cisg
ICAgYm9vbCByZXNldFJlbW92ZWREZXZpY2UoKTsKKworICAgIFVJTlQgbUFkYXB0ZXI7CisgICAg
RDNEREVWVFlQRSBtRGV2aWNlVHlwZTsKKyAgICBib29sIG1Tb2Z0d2FyZURldmljZTsgICAvLyBG
SVhNRTogRGVwcmVjYXRlCisgICAgSURpcmVjdDNEOSAqbUQzZDk7ICAvLyBBbHdheXMgdmFsaWQg
YWZ0ZXIgc3VjY2Vzc2Z1bCBpbml0aWFsaXphdGlvbi4KKyAgICBJRGlyZWN0M0Q5RXggKm1EM2Q5
RXg7ICAvLyBNaWdodCBiZSBudWxsIGlmIEQzRDlFeCBpcyBub3Qgc3VwcG9ydGVkLgorICAgIElE
aXJlY3QzRERldmljZTkgKm1EZXZpY2U7CisgICAgSURpcmVjdDNERGV2aWNlOUV4ICptRGV2aWNl
RXg7ICAvLyBNaWdodCBiZSBudWxsIGlmIEQzRDlFeCBpcyBub3Qgc3VwcG9ydGVkLgorCisgICAg
QmxpdCAqbUJsaXQ7CisKKyAgICBIV05EIG1EZXZpY2VXaW5kb3c7CisKKyAgICBib29sIG1EZXZp
Y2VMb3N0OworICAgIEQzRENBUFM5IG1EZXZpY2VDYXBzOworICAgIEQzREFEQVBURVJfSURFTlRJ
RklFUjkgbUFkYXB0ZXJJZGVudGlmaWVyOworCisgICAgRDNEUFJJTUlUSVZFVFlQRSBtUHJpbWl0
aXZlVHlwZTsKKyAgICBpbnQgbVByaW1pdGl2ZUNvdW50OworICAgIEdMc2l6ZWkgbVJlcGVhdERy
YXc7CisKKyAgICBib29sIG1TY2VuZVN0YXJ0ZWQ7CisgICAgYm9vbCBtU3VwcG9ydHNOb25Qb3dl
cjJUZXh0dXJlczsKKyAgICBib29sIG1TdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5Owor
ICAgIGludCBtTWluU3dhcEludGVydmFsOworICAgIGludCBtTWF4U3dhcEludGVydmFsOworCisg
ICAgYm9vbCBtT2NjbHVzaW9uUXVlcnlTdXBwb3J0OworICAgIGJvb2wgbUV2ZW50UXVlcnlTdXBw
b3J0OworICAgIGJvb2wgbVZlcnRleFRleHR1cmVTdXBwb3J0OworCisgICAgYm9vbCBtRGVwdGhU
ZXh0dXJlU3VwcG9ydDsKKworICAgIGJvb2wgbUZsb2F0MzJUZXh0dXJlU3VwcG9ydDsKKyAgICBi
b29sIG1GbG9hdDMyRmlsdGVyU3VwcG9ydDsKKyAgICBib29sIG1GbG9hdDMyUmVuZGVyU3VwcG9y
dDsKKworICAgIGJvb2wgbUZsb2F0MTZUZXh0dXJlU3VwcG9ydDsKKyAgICBib29sIG1GbG9hdDE2
RmlsdGVyU3VwcG9ydDsKKyAgICBib29sIG1GbG9hdDE2UmVuZGVyU3VwcG9ydDsKKworICAgIGJv
b2wgbURYVDFUZXh0dXJlU3VwcG9ydDsKKyAgICBib29sIG1EWFQzVGV4dHVyZVN1cHBvcnQ7Cisg
ICAgYm9vbCBtRFhUNVRleHR1cmVTdXBwb3J0OworCisgICAgYm9vbCBtTHVtaW5hbmNlVGV4dHVy
ZVN1cHBvcnQ7CisgICAgYm9vbCBtTHVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydDsKKworICAg
IHN0ZDo6bWFwPEQzREZPUk1BVCwgYm9vbCAqPiBtTXVsdGlTYW1wbGVTdXBwb3J0OworICAgIEdM
c2l6ZWkgbU1heFN1cHBvcnRlZFNhbXBsZXM7CisKKyAgICAvLyBjdXJyZW50IHJlbmRlciB0YXJn
ZXQgc3RhdGVzCisgICAgdW5zaWduZWQgaW50IG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsOwor
ICAgIHVuc2lnbmVkIGludCBtQXBwbGllZERlcHRoYnVmZmVyU2VyaWFsOworICAgIHVuc2lnbmVk
IGludCBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWw7CisgICAgYm9vbCBtRGVwdGhTdGVuY2ls
SW5pdGlhbGl6ZWQ7CisgICAgYm9vbCBtUmVuZGVyVGFyZ2V0RGVzY0luaXRpYWxpemVkOworICAg
IHJ4OjpSZW5kZXJUYXJnZXQ6OkRlc2MgbVJlbmRlclRhcmdldERlc2M7CisgICAgdW5zaWduZWQg
aW50IG1DdXJTdGVuY2lsU2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgbUN1ckRlcHRoU2l6ZTsKKwor
ICAgIElEaXJlY3QzRFN0YXRlQmxvY2s5ICptTWFza2VkQ2xlYXJTYXZlZFN0YXRlOworCisgICAg
Ly8gcHJldmlvdXNseSBzZXQgcmVuZGVyIHN0YXRlcworICAgIGJvb2wgbUZvcmNlU2V0RGVwdGhT
dGVuY2lsU3RhdGU7CisgICAgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlIG1DdXJEZXB0aFN0ZW5jaWxT
dGF0ZTsKKyAgICBpbnQgbUN1clN0ZW5jaWxSZWY7CisgICAgaW50IG1DdXJTdGVuY2lsQmFja1Jl
ZjsKKyAgICBib29sIG1DdXJGcm9udEZhY2VDQ1c7CisKKyAgICBib29sIG1Gb3JjZVNldFJhc3Rl
clN0YXRlOworICAgIGdsOjpSYXN0ZXJpemVyU3RhdGUgbUN1clJhc3RlclN0YXRlOworCisgICAg
Ym9vbCBtRm9yY2VTZXRTY2lzc29yOworICAgIGdsOjpSZWN0YW5nbGUgbUN1clNjaXNzb3I7Cisg
ICAgYm9vbCBtU2Npc3NvckVuYWJsZWQ7CisKKyAgICBib29sIG1Gb3JjZVNldFZpZXdwb3J0Owor
ICAgIGdsOjpSZWN0YW5nbGUgbUN1clZpZXdwb3J0OworICAgIGZsb2F0IG1DdXJOZWFyOworICAg
IGZsb2F0IG1DdXJGYXI7CisgICAgZmxvYXQgbUN1ckRlcHRoRnJvbnQ7CisKKyAgICBib29sIG1G
b3JjZVNldEJsZW5kU3RhdGU7CisgICAgZ2w6OkJsZW5kU3RhdGUgbUN1ckJsZW5kU3RhdGU7Cisg
ICAgZ2w6OkNvbG9yIG1DdXJCbGVuZENvbG9yOworICAgIEdMdWludCBtQ3VyU2FtcGxlTWFzazsK
KworICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIHNhbXBsZXIgc3RhdGVzCisgICAgYm9vbCBtRm9y
Y2VTZXRWZXJ0ZXhTYW1wbGVyU3RhdGVzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RF
WFRVUkVfSU1BR0VfVU5JVFNdOworICAgIGdsOjpTYW1wbGVyU3RhdGUgbUN1clZlcnRleFNhbXBs
ZXJTdGF0ZXNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklU
U107CisKKyAgICBib29sIG1Gb3JjZVNldFBpeGVsU2FtcGxlclN0YXRlc1tnbDo6TUFYX1RFWFRV
UkVfSU1BR0VfVU5JVFNdOworICAgIGdsOjpTYW1wbGVyU3RhdGUgbUN1clBpeGVsU2FtcGxlclN0
YXRlc1tnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOworCisgICAgLy8gQ3VycmVudGx5IGFw
cGxpZWQgdGV4dHVyZXMKKyAgICB1bnNpZ25lZCBpbnQgbUN1clZlcnRleFRleHR1cmVTZXJpYWxz
W2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOworICAg
IHVuc2lnbmVkIGludCBtQ3VyUGl4ZWxUZXh0dXJlU2VyaWFsc1tnbDo6TUFYX1RFWFRVUkVfSU1B
R0VfVU5JVFNdOworCisgICAgdW5zaWduZWQgaW50IG1BcHBsaWVkSUJTZXJpYWw7CisgICAgdW5z
aWduZWQgaW50IG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbDsKKyAgICAKKyAgICByeDo6ZHhf
VmVydGV4Q29uc3RhbnRzIG1WZXJ0ZXhDb25zdGFudHM7CisgICAgcng6OmR4X1BpeGVsQ29uc3Rh
bnRzIG1QaXhlbENvbnN0YW50czsKKyAgICBib29sIG1EeFVuaWZvcm1zRGlydHk7CisKKyAgICAv
LyBBIHBvb2wgb2YgZXZlbnQgcXVlcmllcyB0aGF0IGFyZSBjdXJyZW50bHkgdW51c2VkLgorICAg
IHN0ZDo6dmVjdG9yPElEaXJlY3QzRFF1ZXJ5OSo+IG1FdmVudFF1ZXJ5UG9vbDsKKyAgICBWZXJ0
ZXhTaGFkZXJDYWNoZSBtVmVydGV4U2hhZGVyQ2FjaGU7CisgICAgUGl4ZWxTaGFkZXJDYWNoZSBt
UGl4ZWxTaGFkZXJDYWNoZTsKKworICAgIFZlcnRleERhdGFNYW5hZ2VyICptVmVydGV4RGF0YU1h
bmFnZXI7CisgICAgVmVydGV4RGVjbGFyYXRpb25DYWNoZSBtVmVydGV4RGVjbGFyYXRpb25DYWNo
ZTsKKworICAgIEluZGV4RGF0YU1hbmFnZXIgKm1JbmRleERhdGFNYW5hZ2VyOworICAgIFN0cmVh
bWluZ0luZGV4QnVmZmVySW50ZXJmYWNlICptTGluZUxvb3BJQjsKKworICAgIGVudW0geyBOVU1f
TlVMTF9DT0xPUkJVRkZFUl9DQUNIRV9FTlRSSUVTID0gMTIgfTsKKyAgICBzdHJ1Y3QgTnVsbENv
bG9yYnVmZmVyQ2FjaGVFbnRyeQorICAgIHsKKyAgICAgICAgVUlOVCBscnVDb3VudDsKKyAgICAg
ICAgaW50IHdpZHRoOworICAgICAgICBpbnQgaGVpZ2h0OworICAgICAgICBnbDo6UmVuZGVyYnVm
ZmVyICpidWZmZXI7CisgICAgfSBtTnVsbENvbG9yYnVmZmVyQ2FjaGVbTlVNX05VTExfQ09MT1JC
VUZGRVJfQ0FDSEVfRU5UUklFU107CisgICAgVUlOVCBtTWF4TnVsbENvbG9yYnVmZmVyTFJVOwor
Cit9OworCit9CisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUkVSOV9IXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L1NoYWRlckV4ZWN1dGFibGU5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9TaGFkZXJFeGVjdXRhYmxlOS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NWRlY2Y5NjY0ZGU3MDEwMGIyYWZlNTRkNTc0YWU5YzhhOGExZjIzMAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9T
aGFkZXJFeGVjdXRhYmxlOS5jcHAKQEAgLTAsMCArMSw2MCBAQAorI2luY2x1ZGUgInByZWNvbXBp
bGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBTaGFkZXJFeGVjdXRhYmxlOS5jcHA6IElt
cGxlbWVudHMgYSBEM0Q5LXNwZWNpZmljIGNsYXNzIHRvIGNvbnRhaW4gc2hhZGVyCisvLyBleGVj
dXRhYmxlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9TaGFkZXJFeGVjdXRhYmxlOS5oIgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVn
LmgiCisKK25hbWVzcGFjZSByeAoreworCitTaGFkZXJFeGVjdXRhYmxlOTo6U2hhZGVyRXhlY3V0
YWJsZTkoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIElEaXJlY3QzRFBpeGVs
U2hhZGVyOSAqZXhlY3V0YWJsZSkKKyAgICA6IFNoYWRlckV4ZWN1dGFibGUoZnVuY3Rpb24sIGxl
bmd0aCkKK3sKKyAgICBtUGl4ZWxFeGVjdXRhYmxlID0gZXhlY3V0YWJsZTsKKyAgICBtVmVydGV4
RXhlY3V0YWJsZSA9IE5VTEw7Cit9CisKK1NoYWRlckV4ZWN1dGFibGU5OjpTaGFkZXJFeGVjdXRh
YmxlOShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSURpcmVjdDNEVmVydGV4
U2hhZGVyOSAqZXhlY3V0YWJsZSkKKyAgICA6IFNoYWRlckV4ZWN1dGFibGUoZnVuY3Rpb24sIGxl
bmd0aCkKK3sKKyAgICBtVmVydGV4RXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7CisgICAgbVBpeGVs
RXhlY3V0YWJsZSA9IE5VTEw7Cit9CisKK1NoYWRlckV4ZWN1dGFibGU5Ojp+U2hhZGVyRXhlY3V0
YWJsZTkoKQoreworICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSkKKyAgICB7CisgICAgICAgIG1W
ZXJ0ZXhFeGVjdXRhYmxlLT5SZWxlYXNlKCk7CisgICAgfQorICAgIGlmIChtUGl4ZWxFeGVjdXRh
YmxlKQorICAgIHsKKyAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFzZSgpOworICAgIH0K
K30KKworU2hhZGVyRXhlY3V0YWJsZTkgKlNoYWRlckV4ZWN1dGFibGU5OjptYWtlU2hhZGVyRXhl
Y3V0YWJsZTkoU2hhZGVyRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSkKK3sKKyAgICBBU1NFUlQoSEFT
X0RZTkFNSUNfVFlQRShTaGFkZXJFeGVjdXRhYmxlOSosIGV4ZWN1dGFibGUpKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8U2hhZGVyRXhlY3V0YWJsZTkqPihleGVjdXRhYmxlKTsKK30KKworSURp
cmVjdDNEVmVydGV4U2hhZGVyOSAqU2hhZGVyRXhlY3V0YWJsZTk6OmdldFZlcnRleFNoYWRlcigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1WZXJ0ZXhFeGVjdXRhYmxlOworfQorCitJRGlyZWN0M0RQ
aXhlbFNoYWRlcjkgKlNoYWRlckV4ZWN1dGFibGU5OjpnZXRQaXhlbFNoYWRlcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1QaXhlbEV4ZWN1dGFibGU7Cit9CisKK30KXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvU2hhZGVyRXhlY3V0YWJsZTkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9TaGFkZXJFeGVjdXRhYmxlOS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmZhMWU2YzI4NDRhOThiYTQyNjhmMGRkZjJiNDk0YTM2ZDI3NmM1YmYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvU2hhZGVyRXhlY3V0YWJsZTkuaApAQCAtMCwwICsxLDM5IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisvLyBTaGFkZXJFeGVjdXRhYmxlOS5oOiBEZWZpbmVzIGEgRDNEOS1zcGVjaWZp
YyBjbGFzcyB0byBjb250YWluIHNoYWRlcgorLy8gZXhlY3V0YWJsZSBpbXBsZW1lbnRhdGlvbiBk
ZXRhaWxzLgorCisjaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9TSEFERVJFWEVDVVRBQkxFOV9I
XworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfU0hBREVSRVhFQ1VUQUJMRTlfSF8KKworI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlLmgiCisKK25hbWVzcGFj
ZSByeAoreworCitjbGFzcyBTaGFkZXJFeGVjdXRhYmxlOSA6IHB1YmxpYyBTaGFkZXJFeGVjdXRh
YmxlCit7CisgIHB1YmxpYzoKKyAgICBTaGFkZXJFeGVjdXRhYmxlOShjb25zdCB2b2lkICpmdW5j
dGlvbiwgc2l6ZV90IGxlbmd0aCwgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpleGVjdXRhYmxlKTsK
KyAgICBTaGFkZXJFeGVjdXRhYmxlOShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0
aCwgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqZXhlY3V0YWJsZSk7CisgICAgdmlydHVhbCB+U2hh
ZGVyRXhlY3V0YWJsZTkoKTsKKworICAgIHN0YXRpYyBTaGFkZXJFeGVjdXRhYmxlOSAqbWFrZVNo
YWRlckV4ZWN1dGFibGU5KFNoYWRlckV4ZWN1dGFibGUgKmV4ZWN1dGFibGUpOworCisgICAgSURp
cmVjdDNEUGl4ZWxTaGFkZXI5ICpnZXRQaXhlbFNoYWRlcigpIGNvbnN0OworICAgIElEaXJlY3Qz
RFZlcnRleFNoYWRlcjkgKmdldFZlcnRleFNoYWRlcigpIGNvbnN0OworCisgIHByaXZhdGU6Cisg
ICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFNoYWRlckV4ZWN1dGFibGU5KTsKKworICAgIElE
aXJlY3QzRFBpeGVsU2hhZGVyOSAqbVBpeGVsRXhlY3V0YWJsZTsKKyAgICBJRGlyZWN0M0RWZXJ0
ZXhTaGFkZXI5ICptVmVydGV4RXhlY3V0YWJsZTsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdM
RVNWMl9SRU5ERVJFUl9TSEFERVJFWEVDVVRBQkxFOV9IXwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9Td2FwQ2hhaW45LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9Td2FwQ2hhaW45LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZDg4
OTVkMThkNmExZGY3ZGFlNWE0MDVhNTFlYzJkMmFkZjA3MDVhCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1N3YXBD
aGFpbjkuY3BwCkBAIC0wLDAgKzEsNDQ1IEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKy8vIFN3YXBDaGFpbjkuY3BwOiBJbXBsZW1lbnRzIGEgYmFjay1l
bmQgc3BlY2lmaWMgY2xhc3MgZm9yIHRoZSBEM0Q5IHN3YXAgY2hhaW4uCisKKyNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9Td2FwQ2hhaW45LmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvUmVuZGVyZXI5LmgiCisKK25hbWVzcGFjZSByeAoreworCitTd2FwQ2hhaW45
OjpTd2FwQ2hhaW45KFJlbmRlcmVyOSAqcmVuZGVyZXIsIEhXTkQgd2luZG93LCBIQU5ETEUgc2hh
cmVIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBiYWNrQnVmZmVyRm9ybWF0
LCBHTGVudW0gZGVwdGhCdWZmZXJGb3JtYXQpCisgICAgOiBtUmVuZGVyZXIocmVuZGVyZXIpLCBT
d2FwQ2hhaW4od2luZG93LCBzaGFyZUhhbmRsZSwgYmFja0J1ZmZlckZvcm1hdCwgZGVwdGhCdWZm
ZXJGb3JtYXQpCit7CisgICAgbVN3YXBDaGFpbiA9IE5VTEw7CisgICAgbUJhY2tCdWZmZXIgPSBO
VUxMOworICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOworICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxM
OworICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsKKyAgICBtV2lkdGggPSAtMTsKKyAgICBt
SGVpZ2h0ID0gLTE7CisgICAgbVN3YXBJbnRlcnZhbCA9IC0xOworfQorCitTd2FwQ2hhaW45Ojp+
U3dhcENoYWluOSgpCit7CisgICAgcmVsZWFzZSgpOworfQorCit2b2lkIFN3YXBDaGFpbjk6OnJl
bGVhc2UoKQoreworICAgIGlmIChtU3dhcENoYWluKQorICAgIHsKKyAgICAgICAgbVN3YXBDaGFp
bi0+UmVsZWFzZSgpOworICAgICAgICBtU3dhcENoYWluID0gTlVMTDsKKyAgICB9CisKKyAgICBp
ZiAobUJhY2tCdWZmZXIpCisgICAgeworICAgICAgICBtQmFja0J1ZmZlci0+UmVsZWFzZSgpOwor
ICAgICAgICBtQmFja0J1ZmZlciA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKG1EZXB0aFN0ZW5j
aWwpCisgICAgeworICAgICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CisgICAgICAgIG1E
ZXB0aFN0ZW5jaWwgPSBOVUxMOworICAgIH0KKworICAgIGlmIChtUmVuZGVyVGFyZ2V0KQorICAg
IHsKKyAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworICAgICAgICBtUmVuZGVyVGFy
Z2V0ID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAobU9mZnNjcmVlblRleHR1cmUpCisgICAgewor
ICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+UmVsZWFzZSgpOworICAgICAgICBtT2Zmc2NyZWVu
VGV4dHVyZSA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKG1XaW5kb3cpCisgICAgICAgIG1TaGFy
ZUhhbmRsZSA9IE5VTEw7Cit9CisKK3N0YXRpYyBEV09SRCBjb252ZXJ0SW50ZXJ2YWwoRUdMaW50
IGludGVydmFsKQoreworI2lmIEFOR0xFX0ZPUkNFX1ZTWU5DX09GRgorICAgIHJldHVybiBEM0RQ
UkVTRU5UX0lOVEVSVkFMX0lNTUVESUFURTsKKyNlbHNlCisgICAgc3dpdGNoKGludGVydmFsKQor
ICAgIHsKKyAgICAgIGNhc2UgMDogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfSU1NRURJQVRF
OworICAgICAgY2FzZSAxOiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9PTkU7CisgICAgICBj
YXNlIDI6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX1RXTzsKKyAgICAgIGNhc2UgMzogcmV0
dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfVEhSRUU7CisgICAgICBjYXNlIDQ6IHJldHVybiBEM0RQ
UkVTRU5UX0lOVEVSVkFMX0ZPVVI7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAg
IH0KKworICAgIHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX0RFRkFVTFQ7CisjZW5kaWYKK30K
KworRUdMaW50IFN3YXBDaGFpbjk6OnJlc2l6ZShpbnQgYmFja2J1ZmZlcldpZHRoLCBpbnQgYmFj
a2J1ZmZlckhlaWdodCkKK3sKKyAgICAvLyBEM0Q5IGRvZXMgbm90IHN1cHBvcnQgcmVzaXppbmcg
c3dhcCBjaGFpbnMgd2l0aG91dCByZWNyZWF0aW5nIHRoZW0KKyAgICByZXR1cm4gcmVzZXQoYmFj
a2J1ZmZlcldpZHRoLCBiYWNrYnVmZmVySGVpZ2h0LCBtU3dhcEludGVydmFsKTsKK30KKworRUdM
aW50IFN3YXBDaGFpbjk6OnJlc2V0KGludCBiYWNrYnVmZmVyV2lkdGgsIGludCBiYWNrYnVmZmVy
SGVpZ2h0LCBFR0xpbnQgc3dhcEludGVydmFsKQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRl
dmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICBpZiAoZGV2aWNlID09IE5VTEwp
CisgICAgeworICAgICAgICByZXR1cm4gRUdMX0JBRF9BQ0NFU1M7CisgICAgfQorCisgICAgLy8g
RXZpY3QgYWxsIG5vbi1yZW5kZXIgdGFyZ2V0IHRleHR1cmVzIHRvIHN5c3RlbSBtZW1vcnkgYW5k
IHJlbGVhc2UgYWxsIHJlc291cmNlcworICAgIC8vIGJlZm9yZSByZWFsbG9jYXRpbmcgdGhlbSB0
byBmcmVlIHVwIGFzIG11Y2ggdmlkZW8gbWVtb3J5IGFzIHBvc3NpYmxlLgorICAgIGRldmljZS0+
RXZpY3RNYW5hZ2VkUmVzb3VyY2VzKCk7CisKKyAgICBIUkVTVUxUIHJlc3VsdDsKKworICAgIC8v
IFJlbGVhc2Ugc3BlY2lmaWMgcmVzb3VyY2VzIHRvIGZyZWUgdXAgbWVtb3J5IGZvciB0aGUgbmV3
IHJlbmRlciB0YXJnZXQsIHdoaWxlIHRoZQorICAgIC8vIG9sZCByZW5kZXIgdGFyZ2V0IHN0aWxs
IGV4aXN0cyBmb3IgdGhlIHB1cnBvc2Ugb2YgcHJlc2VydmluZyBpdHMgY29udGVudHMuCisgICAg
aWYgKG1Td2FwQ2hhaW4pCisgICAgeworICAgICAgICBtU3dhcENoYWluLT5SZWxlYXNlKCk7Cisg
ICAgICAgIG1Td2FwQ2hhaW4gPSBOVUxMOworICAgIH0KKworICAgIGlmIChtQmFja0J1ZmZlcikK
KyAgICB7CisgICAgICAgIG1CYWNrQnVmZmVyLT5SZWxlYXNlKCk7CisgICAgICAgIG1CYWNrQnVm
ZmVyID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAobU9mZnNjcmVlblRleHR1cmUpCisgICAgewor
ICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+UmVsZWFzZSgpOworICAgICAgICBtT2Zmc2NyZWVu
VGV4dHVyZSA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKG1EZXB0aFN0ZW5jaWwpCisgICAgewor
ICAgICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CisgICAgICAgIG1EZXB0aFN0ZW5jaWwg
PSBOVUxMOworICAgIH0KKworICAgIEhBTkRMRSAqcFNoYXJlSGFuZGxlID0gTlVMTDsKKyAgICBp
ZiAoIW1XaW5kb3cgJiYgbVJlbmRlcmVyLT5nZXRTaGFyZUhhbmRsZVN1cHBvcnQoKSkKKyAgICB7
CisgICAgICAgIHBTaGFyZUhhbmRsZSA9ICZtU2hhcmVIYW5kbGU7CisgICAgfQorCisgICAgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKGJhY2tidWZmZXJXaWR0aCwgYmFja2J1ZmZlckhl
aWdodCwgMSwgRDNEVVNBR0VfUkVOREVSVEFSR0VULAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnbF9kM2Q5OjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1CYWNrQnVmZmVy
Rm9ybWF0KSwgRDNEUE9PTF9ERUZBVUxULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmbU9mZnNjcmVlblRleHR1cmUsIHBTaGFyZUhhbmRsZSk7CisgICAgaWYgKEZBSUxFRChy
ZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG9mZnNjcmVlbiB0
ZXh0dXJlOiAlMDhsWCIsIHJlc3VsdCk7CisgICAgICAgIHJlbGVhc2UoKTsKKworICAgICAgICBp
ZiAoZDNkOTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIEVHTF9DT05URVhUX0xPU1Q7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gRUdMX0JBRF9BTExPQzsKKyAgICAgICAgfQorICAg
IH0KKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpvbGRSZW5kZXJUYXJnZXQgPSBtUmVuZGVyVGFy
Z2V0OworCisgICAgcmVzdWx0ID0gbU9mZnNjcmVlblRleHR1cmUtPkdldFN1cmZhY2VMZXZlbCgw
LCAmbVJlbmRlclRhcmdldCk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAg
IGlmIChvbGRSZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBSRUNUIHJlY3QgPQorICAgICAg
ICB7CisgICAgICAgICAgICAwLCAwLAorICAgICAgICAgICAgbVdpZHRoLCBtSGVpZ2h0CisgICAg
ICAgIH07CisKKyAgICAgICAgaWYgKHJlY3QucmlnaHQgPiBzdGF0aWNfY2FzdDxMT05HPihiYWNr
YnVmZmVyV2lkdGgpKQorICAgICAgICB7CisgICAgICAgICAgICByZWN0LnJpZ2h0ID0gYmFja2J1
ZmZlcldpZHRoOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJlY3QuYm90dG9tID4gc3RhdGlj
X2Nhc3Q8TE9ORz4oYmFja2J1ZmZlckhlaWdodCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
Y3QuYm90dG9tID0gYmFja2J1ZmZlckhlaWdodDsKKyAgICAgICAgfQorCisgICAgICAgIG1SZW5k
ZXJlci0+ZW5kU2NlbmUoKTsKKworICAgICAgICByZXN1bHQgPSBkZXZpY2UtPlN0cmV0Y2hSZWN0
KG9sZFJlbmRlclRhcmdldCwgJnJlY3QsIG1SZW5kZXJUYXJnZXQsICZyZWN0LCBEM0RURVhGX05P
TkUpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgIG9sZFJl
bmRlclRhcmdldC0+UmVsZWFzZSgpOworICAgIH0KKworICAgIGlmIChtV2luZG93KQorICAgIHsK
KyAgICAgICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbWV0ZXJzID0gezB9Owor
ICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVuY2lsRm9ybWF0ID0gZ2xfZDNk
OTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtRGVwdGhCdWZmZXJGb3JtYXQpOworICAgICAg
ICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyQ291bnQgPSAxOworICAgICAgICBwcmVzZW50
UGFyYW1ldGVycy5CYWNrQnVmZmVyRm9ybWF0ID0gZ2xfZDNkOTo6Q29udmVydFJlbmRlcmJ1ZmZl
ckZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCk7CisgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkVu
YWJsZUF1dG9EZXB0aFN0ZW5jaWwgPSBGQUxTRTsKKyAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMu
RmxhZ3MgPSAwOworICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5oRGV2aWNlV2luZG93ID0gbVdp
bmRvdzsKKyAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVRdWFsaXR5ID0gMDsg
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVW5pbXBsZW1lbnRlZAorICAgICAgICBwcmVzZW50
UGFyYW1ldGVycy5NdWx0aVNhbXBsZVR5cGUgPSBEM0RNVUxUSVNBTVBMRV9OT05FOyAgIC8vIEZJ
WE1FOiBVbmltcGxlbWVudGVkCisgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLlByZXNlbnRhdGlv
bkludGVydmFsID0gY29udmVydEludGVydmFsKHN3YXBJbnRlcnZhbCk7CisgICAgICAgIHByZXNl
bnRQYXJhbWV0ZXJzLlN3YXBFZmZlY3QgPSBEM0RTV0FQRUZGRUNUX0RJU0NBUkQ7CisgICAgICAg
IHByZXNlbnRQYXJhbWV0ZXJzLldpbmRvd2VkID0gVFJVRTsKKyAgICAgICAgcHJlc2VudFBhcmFt
ZXRlcnMuQmFja0J1ZmZlcldpZHRoID0gYmFja2J1ZmZlcldpZHRoOworICAgICAgICBwcmVzZW50
UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0ID0gYmFja2J1ZmZlckhlaWdodDsKKworICAgICAg
ICAvLyBodHRwOi8vY3JidWcuY29tLzE0MDIzOQorICAgICAgICAvLyBodHRwOi8vY3JidWcuY29t
LzE0MzQzNAorICAgICAgICAvLworICAgICAgICAvLyBTb21lIEFNRC9JbnRlbCBzd2l0Y2hhYmxl
IHN5c3RlbXMgLyBkcml2ZXJzIGFwcGVhciB0byByb3VuZCBzd2FwIGNoYWluIHN1cmZhY2VzIHRv
IGEgbXVsdGlwbGUgb2YgNjQgcGl4ZWxzIGluIHdpZHRoCisgICAgICAgIC8vIHdoZW4gdXNpbmcg
dGhlIGludGVncmF0ZWQgSW50ZWwuIFRoaXMgcm91bmRzIHRoZSB3aWR0aCB1cCByYXRoZXIgdGhh
biBkb3duLgorICAgICAgICAvLworICAgICAgICAvLyBTb21lIG5vbi1zd2l0Y2hhYmxlIEFNRCBH
UFVzIC8gZHJpdmVycyBkbyBub3QgcmVzcGVjdCB0aGUgc291cmNlIHJlY3RhbmdsZSB0byBQcmVz
ZW50LiBUaGVyZWZvcmUsIHdoZW4gdGhlIHZlbmRvciBJRAorICAgICAgICAvLyBpcyBub3QgSW50
ZWwsIHRoZSBiYWNrIGJ1ZmZlciB3aWR0aCBtdXN0IGJlIGV4YWN0bHkgdGhlIHNhbWUgd2lkdGgg
YXMgdGhlIHdpbmRvdyBvciBob3Jpem9udGFsIHNjYWxpbmcgd2lsbCBvY2N1ci4KKyAgICAgICAg
aWYgKG1SZW5kZXJlci0+Z2V0QWRhcHRlclZlbmRvcigpID09IFZFTkRPUl9JRF9JTlRFTCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoID0g
KHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCArIDYzKSAvIDY0ICogNjQ7CisgICAg
ICAgIH0KKworICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUFkZGl0aW9uYWxTd2FwQ2hh
aW4oJnByZXNlbnRQYXJhbWV0ZXJzLCAmbVN3YXBDaGFpbik7CisKKyAgICAgICAgaWYgKEZBSUxF
RChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVS
Ul9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9
PSBEM0RFUlJfSU5WQUxJRENBTEwgfHwgcmVzdWx0ID09IEQzREVSUl9ERVZJQ0VMT1NUKTsKKwor
ICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGFkZGl0aW9uYWwgc3dhcCBjaGFpbnMg
b3Igb2Zmc2NyZWVuIHN1cmZhY2VzOiAlMDhsWCIsIHJlc3VsdCk7CisgICAgICAgICAgICByZWxl
YXNlKCk7CisKKyAgICAgICAgICAgIGlmIChkM2Q5Ojppc0RldmljZUxvc3RFcnJvcihyZXN1bHQp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBFR0xfQ09OVEVYVF9MT1NU
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBFR0xfQkFEX0FMTE9DOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgcmVzdWx0ID0gbVN3YXBDaGFpbi0+R2V0QmFja0J1ZmZlcigwLCBEM0RCQUNL
QlVGRkVSX1RZUEVfTU9OTywgJm1CYWNrQnVmZmVyKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURF
RChyZXN1bHQpKTsKKyAgICAgICAgSW52YWxpZGF0ZVJlY3QobVdpbmRvdywgTlVMTCwgRkFMU0Up
OworICAgIH0KKworICAgIGlmIChtRGVwdGhCdWZmZXJGb3JtYXQgIT0gR0xfTk9ORSkKKyAgICB7
CisgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsU3VyZmFjZShiYWNr
YnVmZmVyV2lkdGgsIGJhY2tidWZmZXJIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9kM2Q5OjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9y
bWF0KG1EZXB0aEJ1ZmZlckZvcm1hdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBEM0RNVUxUSVNBTVBMRV9OT05FLCAwLCBGQUxTRSwgJm1EZXB0
aFN0ZW5jaWwsIE5VTEwpOworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAg
eworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8
fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0lOVkFMSURDQUxM
KTsKKworICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGRlcHRoc3RlbmNpbCBzdXJm
YWNlIGZvciBuZXcgc3dhcCBjaGFpbjogMHglMDhYIiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJl
bGVhc2UoKTsKKworICAgICAgICAgICAgaWYgKGQzZDk6OmlzRGV2aWNlTG9zdEVycm9yKHJlc3Vs
dCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEVHTF9DT05URVhUX0xP
U1Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIEVHTF9CQURfQUxMT0M7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBtV2lkdGggPSBiYWNrYnVmZmVyV2lkdGg7CisgICAgbUhlaWdodCA9
IGJhY2tidWZmZXJIZWlnaHQ7CisgICAgbVN3YXBJbnRlcnZhbCA9IHN3YXBJbnRlcnZhbDsKKwor
ICAgIHJldHVybiBFR0xfU1VDQ0VTUzsKK30KKworLy8gcGFyYW1ldGVycyBzaG91bGQgYmUgdmFs
aWRhdGVkL2NsYW1wZWQgYnkgY2FsbGVyCitFR0xpbnQgU3dhcENoYWluOTo6c3dhcFJlY3QoRUdM
aW50IHgsIEVHTGludCB5LCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQpCit7CisgICAgaWYg
KCFtU3dhcENoYWluKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEVHTF9TVUNDRVNTOworICAgIH0K
KworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7
CisKKyAgICAvLyBEaXNhYmxlIGFsbCBwaXBlbGluZSBvcGVyYXRpb25zCisgICAgZGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBEM0RaQl9GQUxTRSk7CisgICAgZGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7CisgICAgZGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsKKyAgICBkZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKKyAgICBk
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOworICAg
IGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOworICAg
IGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsKKyAgICBk
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIEQzRENPTE9SV1JJ
VEVFTkFCTEVfQUxQSEEgfCBEM0RDT0xPUldSSVRFRU5BQkxFX0JMVUUgfCBEM0RDT0xPUldSSVRF
RU5BQkxFX0dSRUVOIHwgRDNEQ09MT1JXUklURUVOQUJMRV9SRUQpOworICAgIGRldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfU1JHQldSSVRFRU5BQkxFLCBGQUxTRSk7CisgICAgZGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSwgRkFMU0UpOworICAgIGRldmlj
ZS0+U2V0UGl4ZWxTaGFkZXIoTlVMTCk7CisgICAgZGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIoTlVM
TCk7CisKKyAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBtQmFja0J1ZmZlcik7CisgICAg
ZGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKE5VTEwpOworCisgICAgZGV2aWNlLT5TZXRU
ZXh0dXJlKDAsIG1PZmZzY3JlZW5UZXh0dXJlKTsKKyAgICBkZXZpY2UtPlNldFRleHR1cmVTdGFn
ZVN0YXRlKDAsIEQzRFRTU19DT0xPUk9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7CisgICAgZGV2aWNl
LT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JBUkcxLCBEM0RUQV9URVhUVVJF
KTsKKyAgICBkZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDEsIEQzRFRTU19DT0xPUk9QLCBE
M0RUT1BfRElTQUJMRSk7CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9N
QUdGSUxURVIsIEQzRFRFWEZfUE9JTlQpOworICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAs
IEQzRFNBTVBfTUlORklMVEVSLCBEM0RURVhGX1BPSU5UKTsKKyAgICBkZXZpY2UtPlNldFNhbXBs
ZXJTdGF0ZSgwLCBEM0RTQU1QX0FERFJFU1NVLCBEM0RUQUREUkVTU19DTEFNUCk7CisgICAgZGV2
aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9BRERSRVNTViwgRDNEVEFERFJFU1NfQ0xB
TVApOworICAgIGRldmljZS0+U2V0RlZGKEQzREZWRl9YWVpSSFcgfCBEM0RGVkZfVEVYMSk7CisK
KyAgICBmb3IgKFVJTlQgc3RyZWFtSW5kZXggPSAwOyBzdHJlYW1JbmRleCA8IGdsOjpNQVhfVkVS
VEVYX0FUVFJJQlM7IHN0cmVhbUluZGV4KyspCisgICAgeworICAgICAgICBkZXZpY2UtPlNldFN0
cmVhbVNvdXJjZUZyZXEoc3RyZWFtSW5kZXgsIDEpOworICAgIH0KKworICAgIEQzRFZJRVdQT1JU
OSB2aWV3cG9ydCA9IHswLCAwLCBtV2lkdGgsIG1IZWlnaHQsIDAuMGYsIDEuMGZ9OworICAgIGRl
dmljZS0+U2V0Vmlld3BvcnQoJnZpZXdwb3J0KTsKKworICAgIGZsb2F0IHgxID0geCAtIDAuNWY7
CisgICAgZmxvYXQgeTEgPSAobUhlaWdodCAtIHkgLSBoZWlnaHQpIC0gMC41ZjsKKyAgICBmbG9h
dCB4MiA9ICh4ICsgd2lkdGgpIC0gMC41ZjsKKyAgICBmbG9hdCB5MiA9IChtSGVpZ2h0IC0geSkg
LSAwLjVmOworCisgICAgZmxvYXQgdTEgPSB4IC8gZmxvYXQobVdpZHRoKTsKKyAgICBmbG9hdCB2
MSA9IHkgLyBmbG9hdChtSGVpZ2h0KTsKKyAgICBmbG9hdCB1MiA9ICh4ICsgd2lkdGgpIC8gZmxv
YXQobVdpZHRoKTsKKyAgICBmbG9hdCB2MiA9ICh5ICsgaGVpZ2h0KSAvIGZsb2F0KG1IZWlnaHQp
OworCisgICAgZmxvYXQgcXVhZFs0XVs2XSA9IHt7eDEsIHkxLCAwLjBmLCAxLjBmLCB1MSwgdjJ9
LAorICAgICAgICAgICAgICAgICAgICAgICAge3gyLCB5MSwgMC4wZiwgMS4wZiwgdTIsIHYyfSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHt4MiwgeTIsIDAuMGYsIDEuMGYsIHUyLCB2MX0sCisg
ICAgICAgICAgICAgICAgICAgICAgICB7eDEsIHkyLCAwLjBmLCAxLjBmLCB1MSwgdjF9fTsgICAv
LyB4LCB5LCB6LCByaHcsIHUsIHYKKworICAgIG1SZW5kZXJlci0+c3RhcnRTY2VuZSgpOworICAg
IGRldmljZS0+RHJhd1ByaW1pdGl2ZVVQKEQzRFBUX1RSSUFOR0xFRkFOLCAyLCBxdWFkLCA2ICog
c2l6ZW9mKGZsb2F0KSk7CisgICAgbVJlbmRlcmVyLT5lbmRTY2VuZSgpOworCisgICAgZGV2aWNl
LT5TZXRUZXh0dXJlKDAsIE5VTEwpOworCisgICAgUkVDVCByZWN0ID0KKyAgICB7CisgICAgICAg
IHgsIG1IZWlnaHQgLSB5IC0gaGVpZ2h0LAorICAgICAgICB4ICsgd2lkdGgsIG1IZWlnaHQgLSB5
CisgICAgfTsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gbVN3YXBDaGFpbi0+UHJlc2VudCgmcmVj
dCwgJnJlY3QsIE5VTEwsIE5VTEwsIDApOworCisgICAgbVJlbmRlcmVyLT5tYXJrQWxsU3RhdGVE
aXJ0eSgpOworCisgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBy
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0RSSVZFUklOVEVSTkFM
RVJST1IpCisgICAgeworICAgICAgICByZXR1cm4gRUdMX0JBRF9BTExPQzsKKyAgICB9CisKKyAg
ICAvLyBodHRwOi8vY3JidWcuY29tLzMxMzIxMAorICAgIC8vIElmIG91ciBzd2FwIGZhaWxlZCwg
dHJpZ2dlciBhIGRldmljZSBsb3N0IGV2ZW50LiBSZXNldHRpbmcgd2lsbCB3b3JrIGFyb3VuZCBh
biBBTUQtc3BlY2lmaWMKKyAgICAvLyBkZXZpY2UgcmVtb3ZlZCBidWcgd2l0aCBsb3N0IGNvbnRl
eHRzIHdoZW4gcmVpbnN0YWxsaW5nIGRyaXZlcnMuCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQor
ICAgIHsKKyAgICAgICAgbVJlbmRlcmVyLT5ub3RpZnlEZXZpY2VMb3N0KCk7CisgICAgICAgIHJl
dHVybiBFR0xfQ09OVEVYVF9MT1NUOworICAgIH0KKworICAgIHJldHVybiBFR0xfU1VDQ0VTUzsK
K30KKworLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3Qg
UmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJmYWNlOSAqU3dhcENo
YWluOTo6Z2V0UmVuZGVyVGFyZ2V0KCkKK3sKKyAgICBpZiAobVJlbmRlclRhcmdldCkKKyAgICB7
CisgICAgICAgIG1SZW5kZXJUYXJnZXQtPkFkZFJlZigpOworICAgIH0KKworICAgIHJldHVybiBt
UmVuZGVyVGFyZ2V0OworfQorCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisv
LyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKK0lEaXJlY3QzRFN1
cmZhY2U5ICpTd2FwQ2hhaW45OjpnZXREZXB0aFN0ZW5jaWwoKQoreworICAgIGlmIChtRGVwdGhT
dGVuY2lsKQorICAgIHsKKyAgICAgICAgbURlcHRoU3RlbmNpbC0+QWRkUmVmKCk7CisgICAgfQor
CisgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7Cit9CisKKy8vIEluY3JlbWVudHMgcmVmY291bnQg
b24gdGV4dHVyZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgdGV4dHVy
ZQorSURpcmVjdDNEVGV4dHVyZTkgKlN3YXBDaGFpbjk6OmdldE9mZnNjcmVlblRleHR1cmUoKQor
eworICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkKKyAgICB7CisgICAgICAgIG1PZmZzY3JlZW5U
ZXh0dXJlLT5BZGRSZWYoKTsKKyAgICB9CisKKyAgICByZXR1cm4gbU9mZnNjcmVlblRleHR1cmU7
Cit9CisKK1N3YXBDaGFpbjkgKlN3YXBDaGFpbjk6Om1ha2VTd2FwQ2hhaW45KFN3YXBDaGFpbiAq
c3dhcENoYWluKQoreworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKHJ4OjpTd2FwQ2hhaW45
Kiwgc3dhcENoYWluKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHJ4OjpTd2FwQ2hhaW45Kj4o
c3dhcENoYWluKTsKK30KKwordm9pZCBTd2FwQ2hhaW45OjpyZWNyZWF0ZSgpCit7CisgICAgaWYg
KCFtU3dhcENoYWluKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIElEaXJl
Y3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgaWYgKGRl
dmljZSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEQzRFBS
RVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50UGFyYW1ldGVyczsKKyAgICBIUkVTVUxUIHJlc3VsdCA9
IG1Td2FwQ2hhaW4tPkdldFByZXNlbnRQYXJhbWV0ZXJzKCZwcmVzZW50UGFyYW1ldGVycyk7Cisg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIElEaXJlY3QzRFN3YXBDaGFpbjkq
IG5ld1N3YXBDaGFpbiA9IE5VTEw7CisgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVBZGRpdGlv
bmFsU3dhcENoYWluKCZwcmVzZW50UGFyYW1ldGVycywgJm5ld1N3YXBDaGFpbik7CisgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1T
d2FwQ2hhaW4tPlJlbGVhc2UoKTsKKyAgICBtU3dhcENoYWluID0gbmV3U3dhcENoYWluOworCisg
ICAgbUJhY2tCdWZmZXItPlJlbGVhc2UoKTsKKyAgICByZXN1bHQgPSBtU3dhcENoYWluLT5HZXRC
YWNrQnVmZmVyKDAsIEQzREJBQ0tCVUZGRVJfVFlQRV9NT05PLCAmbUJhY2tCdWZmZXIpOworICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9Td2FwQ2hhaW45Lmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU3dh
cENoYWluOS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE2YTYyYmQ4NmY2YTY1YjdkZDhiN2JkNDIyMDc2NDE0ZjQ5
MGQ0NWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvU3dhcENoYWluOS5oCkBAIC0wLDAgKzEsNTUgQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisvLyBTd2FwQ2hhaW45Lmg6IERlZmluZXMgYSBiYWNrLWVuZCBzcGVjaWZpYyBj
bGFzcyBmb3IgdGhlIEQzRDkgc3dhcCBjaGFpbi4KKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVS
RVJfU1dBUENIQUlOOV9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfU1dBUENIQUlOOV9I
XworCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvU3dhcENoYWluLmgiCisKK25hbWVzcGFjZSByeAoreworY2xhc3MgUmVuZGVyZXI5
OworCitjbGFzcyBTd2FwQ2hhaW45IDogcHVibGljIFN3YXBDaGFpbgoreworICBwdWJsaWM6Cisg
ICAgU3dhcENoYWluOShSZW5kZXJlcjkgKnJlbmRlcmVyLCBIV05EIHdpbmRvdywgSEFORExFIHNo
YXJlSGFuZGxlLAorICAgICAgICAgICAgICAgR0xlbnVtIGJhY2tCdWZmZXJGb3JtYXQsIEdMZW51
bSBkZXB0aEJ1ZmZlckZvcm1hdCk7CisgICAgdmlydHVhbCB+U3dhcENoYWluOSgpOworCisgICAg
RUdMaW50IHJlc2l6ZShFR0xpbnQgYmFja2J1ZmZlcldpZHRoLCBFR0xpbnQgYmFja2J1ZmZlckhl
aWdodCk7CisgICAgdmlydHVhbCBFR0xpbnQgcmVzZXQoRUdMaW50IGJhY2tidWZmZXJXaWR0aCwg
RUdMaW50IGJhY2tidWZmZXJIZWlnaHQsIEVHTGludCBzd2FwSW50ZXJ2YWwpOworICAgIHZpcnR1
YWwgRUdMaW50IHN3YXBSZWN0KEVHTGludCB4LCBFR0xpbnQgeSwgRUdMaW50IHdpZHRoLCBFR0xp
bnQgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjcmVhdGUoKTsKKworICAgIHZpcnR1YWwg
SURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldCgpOworICAgIHZpcnR1YWwgSURpcmVj
dDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNpbCgpOworICAgIHZpcnR1YWwgSURpcmVjdDNEVGV4
dHVyZTkgKmdldE9mZnNjcmVlblRleHR1cmUoKTsKKworICAgIHN0YXRpYyBTd2FwQ2hhaW45ICpt
YWtlU3dhcENoYWluOShTd2FwQ2hhaW4gKnN3YXBDaGFpbik7CisKKyAgcHJpdmF0ZToKKyAgICBE
SVNBTExPV19DT1BZX0FORF9BU1NJR04oU3dhcENoYWluOSk7CisKKyAgICB2b2lkIHJlbGVhc2Uo
KTsKKworICAgIFJlbmRlcmVyOSAqbVJlbmRlcmVyOworICAgIEVHTGludCBtSGVpZ2h0OworICAg
IEVHTGludCBtV2lkdGg7CisgICAgRUdMaW50IG1Td2FwSW50ZXJ2YWw7CisKKyAgICBJRGlyZWN0
M0RTd2FwQ2hhaW45ICptU3dhcENoYWluOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICptQmFja0J1
ZmZlcjsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVJlbmRlclRhcmdldDsKKyAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqbURlcHRoU3RlbmNpbDsKKyAgICBJRGlyZWN0M0RUZXh0dXJlOSogbU9mZnNj
cmVlblRleHR1cmU7Cit9OworCit9CisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1NXQVBD
SEFJTjlfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9UZXh0dXJlU3RvcmFnZTkuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1RleHR1cmVTdG9yYWdlOS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMjQ4NmE5YTViZjczNzZkY2IxZmZjZDQ4NWY2ZmY5MWY1ZjQxMzQ4ZAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9UZXh0dXJlU3RvcmFnZTkuY3BwCkBAIC0wLDAgKzEsMzI4IEBACisjaW5jbHVkZSAi
cHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUZXh0dXJlU3RvcmFnZTkuY3BwOiBJ
bXBsZW1lbnRzIHRoZSBhYnN0cmFjdCByeDo6VGV4dHVyZVN0b3JhZ2U5IGNsYXNzIGFuZCBpdHMg
Y29uY3JldGUgZGVyaXZlZAorLy8gY2xhc3NlcyBUZXh0dXJlU3RvcmFnZTlfMkQgYW5kIFRleHR1
cmVTdG9yYWdlOV9DdWJlLCB3aGljaCBhY3QgYXMgdGhlIGludGVyZmFjZSB0byB0aGUKKy8vIEQz
RDkgdGV4dHVyZS4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvU3dhcENoYWluOS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L1JlbmRlclRhcmdldDkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5k
ZXJlcjlfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgorCituYW1lc3Bh
Y2UgcngKK3sKK1RleHR1cmVTdG9yYWdlOTo6VGV4dHVyZVN0b3JhZ2U5KFJlbmRlcmVyICpyZW5k
ZXJlciwgRFdPUkQgdXNhZ2UpCisgICAgOiBtTG9kT2Zmc2V0KDApLAorICAgICAgbVJlbmRlcmVy
KFJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShyZW5kZXJlcikpLAorICAgICAgbUQzRFVzYWdlKHVz
YWdlKSwKKyAgICAgIG1EM0RQb29sKG1SZW5kZXJlci0+Z2V0VGV4dHVyZVBvb2wodXNhZ2UpKQor
eworfQorCitUZXh0dXJlU3RvcmFnZTk6On5UZXh0dXJlU3RvcmFnZTkoKQoreworfQorCitUZXh0
dXJlU3RvcmFnZTkgKlRleHR1cmVTdG9yYWdlOTo6bWFrZVRleHR1cmVTdG9yYWdlOShUZXh0dXJl
U3RvcmFnZSAqc3RvcmFnZSkKK3sKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShUZXh0dXJl
U3RvcmFnZTkqLCBzdG9yYWdlKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmVTdG9y
YWdlOSo+KHN0b3JhZ2UpOworfQorCitEV09SRCBUZXh0dXJlU3RvcmFnZTk6OkdldFRleHR1cmVV
c2FnZShEM0RGT1JNQVQgZDNkZm10LCBHTGVudW0gZ2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFi
bGUpCit7CisgICAgRFdPUkQgZDNkdXNhZ2UgPSAwOworCisgICAgaWYgKGQzZGZtdCA9PSBEM0RG
TVRfSU5UWikKKyAgICB7CisgICAgICAgIGQzZHVzYWdlIHw9IEQzRFVTQUdFX0RFUFRIU1RFTkNJ
TDsKKyAgICB9CisgICAgZWxzZSBpZihmb3JjZVJlbmRlcmFibGUgfHwgKFRleHR1cmVTdG9yYWdl
OTo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShkM2RmbXQpICYmIChnbHVzYWdlID09IEdMX0ZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpKSkKKyAgICB7CisgICAgICAgIGQzZHVzYWdlIHw9
IEQzRFVTQUdFX1JFTkRFUlRBUkdFVDsKKyAgICB9CisgICAgcmV0dXJuIGQzZHVzYWdlOworfQor
Citib29sIFRleHR1cmVTdG9yYWdlOTo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEM0RGT1JN
QVQgZm9ybWF0KQoreworICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lOVFopCisgICAgeworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgc3dpdGNoKGZvcm1hdCkKKyAgICB7CisgICAg
ICBjYXNlIEQzREZNVF9MODoKKyAgICAgIGNhc2UgRDNERk1UX0E4TDg6CisgICAgICBjYXNlIEQz
REZNVF9EWFQxOgorICAgICAgY2FzZSBEM0RGTVRfRFhUMzoKKyAgICAgIGNhc2UgRDNERk1UX0RY
VDU6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4Ogor
ICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6CisgICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZS
MTZGOgorICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUZXh0dXJlU3RvcmFnZTk6OmlzUmVuZGVyVGFyZ2V0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1EM0RVc2FnZSAmIChEM0RVU0FHRV9SRU5ERVJUQVJH
RVQgfCBEM0RVU0FHRV9ERVBUSFNURU5DSUwpKSAhPSAwOworfQorCitib29sIFRleHR1cmVTdG9y
YWdlOTo6aXNNYW5hZ2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1EM0RQb29sID09IEQzRFBP
T0xfTUFOQUdFRCk7Cit9CisKK0QzRFBPT0wgVGV4dHVyZVN0b3JhZ2U5OjpnZXRQb29sKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbUQzRFBvb2w7Cit9CisKK0RXT1JEIFRleHR1cmVTdG9yYWdlOTo6
Z2V0VXNhZ2UoKSBjb25zdAoreworICAgIHJldHVybiBtRDNEVXNhZ2U7Cit9CisKK2ludCBUZXh0
dXJlU3RvcmFnZTk6OmdldExvZE9mZnNldCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1Mb2RPZmZz
ZXQ7Cit9CisKK2ludCBUZXh0dXJlU3RvcmFnZTk6OmxldmVsQ291bnQoKQoreworICAgIHJldHVy
biBnZXRCYXNlVGV4dHVyZSgpID8gZ2V0QmFzZVRleHR1cmUoKS0+R2V0TGV2ZWxDb3VudCgpIC0g
Z2V0TG9kT2Zmc2V0KCkgOiAwOworfQorCitUZXh0dXJlU3RvcmFnZTlfMkQ6OlRleHR1cmVTdG9y
YWdlOV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBDaGFpbjkgKnN3YXBjaGFpbikgOiBUZXh0
dXJlU3RvcmFnZTkocmVuZGVyZXIsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCkKK3sKKyAgICBJRGly
ZWN0M0RUZXh0dXJlOSAqc3VyZmFjZVRleHR1cmUgPSBzd2FwY2hhaW4tPmdldE9mZnNjcmVlblRl
eHR1cmUoKTsKKyAgICBtVGV4dHVyZSA9IHN1cmZhY2VUZXh0dXJlOworICAgIG1SZW5kZXJUYXJn
ZXQgPSBOVUxMOworCisgICAgaW5pdGlhbGl6ZVJlbmRlclRhcmdldCgpOworfQorCitUZXh0dXJl
U3RvcmFnZTlfMkQ6OlRleHR1cmVTdG9yYWdlOV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIGludCBs
ZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVu
ZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCisgICAgOiBUZXh0dXJlU3Rv
cmFnZTkocmVuZGVyZXIsIEdldFRleHR1cmVVc2FnZShSZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjko
cmVuZGVyZXIpLT5Db252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0KSwg
dXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSkpCit7CisgICAgbVRleHR1cmUgPSBOVUxMOworICAgIG1S
ZW5kZXJUYXJnZXQgPSBOVUxMOworICAgIC8vIGlmIHRoZSB3aWR0aCBvciBoZWlnaHQgaXMgbm90
IHBvc2l0aXZlIHRoaXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJl
CisgICAgLy8gd2UgaGFuZGxlIHRoYXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUg
Y3JlYXRpb24KKyAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApCisgICAgeworICAgICAg
ICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworICAg
ICAgICBnbDo6TWFrZVZhbGlkU2l6ZShmYWxzZSwgZ2w6OklzQ29tcHJlc3NlZChpbnRlcm5hbGZv
cm1hdCksICZ3aWR0aCwgJmhlaWdodCwgJm1Mb2RPZmZzZXQpOworICAgICAgICBIUkVTVUxUIHJl
c3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZSh3aWR0aCwgaGVpZ2h0LCBsZXZlbHMgPyBsZXZl
bHMgKyBtTG9kT2Zmc2V0IDogMCwgZ2V0VXNhZ2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbVJlbmRlcmVyLT5Db252ZXJ0VGV4dHVyZUludGVybmFs
Rm9ybWF0KGludGVybmFsZm9ybWF0KSwgZ2V0UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOworCisg
ICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJU
KHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1F
TU9SWSk7CisgICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpbml0aWFsaXplUmVuZGVyVGFyZ2V0KCk7Cit9CisKK1RleHR1cmVT
dG9yYWdlOV8yRDo6flRleHR1cmVTdG9yYWdlOV8yRCgpCit7CisgICAgaWYgKG1UZXh0dXJlKQor
ICAgIHsKKyAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBkZWxldGUg
bVJlbmRlclRhcmdldDsKK30KKworVGV4dHVyZVN0b3JhZ2U5XzJEICpUZXh0dXJlU3RvcmFnZTlf
MkQ6Om1ha2VUZXh0dXJlU3RvcmFnZTlfMkQoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpCit7Cisg
ICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoVGV4dHVyZVN0b3JhZ2U5XzJEKiwgc3RvcmFnZSkp
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlU3RvcmFnZTlfMkQqPihzdG9yYWdlKTsK
K30KKworLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3Qg
UmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVy
ZVN0b3JhZ2U5XzJEOjpnZXRTdXJmYWNlTGV2ZWwoaW50IGxldmVsLCBib29sIGRpcnR5KQorewor
ICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gTlVMTDsKKworICAgIGlmIChtVGV4dHVy
ZSkKKyAgICB7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVRleHR1cmUtPkdldFN1cmZhY2VM
ZXZlbChsZXZlbCArIG1Mb2RPZmZzZXQsICZzdXJmYWNlKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChyZXN1bHQpKTsKKworICAgICAgICAvLyBXaXRoIG1hbmFnZWQgdGV4dHVyZXMgdGhlIGRy
aXZlciBuZWVkcyB0byBiZSBpbmZvcm1lZCBvZiB1cGRhdGVzIHRvIHRoZSBsb3dlciBtaXBtYXAg
bGV2ZWxzCisgICAgICAgIGlmIChsZXZlbCArIG1Mb2RPZmZzZXQgIT0gMCAmJiBpc01hbmFnZWQo
KSAmJiBkaXJ0eSkKKyAgICAgICAgeworICAgICAgICAgICAgbVRleHR1cmUtPkFkZERpcnR5UmVj
dChOVUxMKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdXJmYWNlOworfQorCitS
ZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlOV8yRDo6Z2V0UmVuZGVyVGFyZ2V0KCkKK3sKKyAg
ICByZXR1cm4gbVJlbmRlclRhcmdldDsKK30KKwordm9pZCBUZXh0dXJlU3RvcmFnZTlfMkQ6Omdl
bmVyYXRlTWlwbWFwKGludCBsZXZlbCkKK3sKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqdXBwZXIg
PSBnZXRTdXJmYWNlTGV2ZWwobGV2ZWwgLSAxLCBmYWxzZSk7CisgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKmxvd2VyID0gZ2V0U3VyZmFjZUxldmVsKGxldmVsLCB0cnVlKTsKKworICAgIGlmICh1cHBl
ciAhPSBOVUxMICYmIGxvd2VyICE9IE5VTEwpCisgICAgeworICAgICAgICBtUmVuZGVyZXItPmJv
eEZpbHRlcih1cHBlciwgbG93ZXIpOworICAgIH0KKworICAgIGlmICh1cHBlciAhPSBOVUxMKSB1
cHBlci0+UmVsZWFzZSgpOworICAgIGlmIChsb3dlciAhPSBOVUxMKSBsb3dlci0+UmVsZWFzZSgp
OworfQorCitJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmVTdG9yYWdlOV8yRDo6Z2V0QmFz
ZVRleHR1cmUoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTsKK30KKwordm9pZCBUZXh0
dXJlU3RvcmFnZTlfMkQ6OmluaXRpYWxpemVSZW5kZXJUYXJnZXQoKQoreworICAgIEFTU0VSVCht
UmVuZGVyVGFyZ2V0ID09IE5VTEwpOworCisgICAgaWYgKG1UZXh0dXJlICE9IE5VTEwgJiYgaXNS
ZW5kZXJUYXJnZXQoKSkKKyAgICB7CisgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNl
ID0gZ2V0U3VyZmFjZUxldmVsKDAsIGZhbHNlKTsKKworICAgICAgICBtUmVuZGVyVGFyZ2V0ID0g
bmV3IFJlbmRlclRhcmdldDkobVJlbmRlcmVyLCBzdXJmYWNlKTsKKyAgICB9Cit9CisKK1RleHR1
cmVTdG9yYWdlOV9DdWJlOjpUZXh0dXJlU3RvcmFnZTlfQ3ViZShSZW5kZXJlciAqcmVuZGVyZXIs
IGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZv
cmNlUmVuZGVyYWJsZSwgaW50IHNpemUpCisgICAgOiBUZXh0dXJlU3RvcmFnZTkocmVuZGVyZXIs
IEdldFRleHR1cmVVc2FnZShSZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjkocmVuZGVyZXIpLT5Db252
ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0KSwgdXNhZ2UsIGZvcmNlUmVu
ZGVyYWJsZSkpCit7CisgICAgbVRleHR1cmUgPSBOVUxMOworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgNjsgKytpKQorICAgIHsKKyAgICAgICAgbVJlbmRlclRhcmdldFtpXSA9IE5VTEw7CisgICAg
fQorCisgICAgLy8gaWYgdGhlIHNpemUgaXMgbm90IHBvc2l0aXZlIHRoaXMgc2hvdWxkIGJlIHRy
ZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJlCisgICAgLy8gd2UgaGFuZGxlIHRoYXQgaGVy
ZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRpb24KKyAgICBpZiAoc2l6ZSA+IDAp
CisgICAgeworICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdl
dERldmljZSgpOworICAgICAgICBpbnQgaGVpZ2h0ID0gc2l6ZTsKKyAgICAgICAgZ2w6Ok1ha2VW
YWxpZFNpemUoZmFsc2UsIGdsOjpJc0NvbXByZXNzZWQoaW50ZXJuYWxmb3JtYXQpLCAmc2l6ZSwg
JmhlaWdodCwgJm1Mb2RPZmZzZXQpOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+
Q3JlYXRlQ3ViZVRleHR1cmUoc2l6ZSwgbGV2ZWxzID8gbGV2ZWxzICsgbUxvZE9mZnNldCA6IDAs
IGdldFVzYWdlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtUmVuZGVyZXItPkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxm
b3JtYXQpLCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVMTCk7CisKKyAgICAgICAgaWYgKEZBSUxF
RChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVS
Ul9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAg
ICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGluaXRpYWxpemVSZW5kZXJUYXJnZXQoKTsKK30KKworVGV4dHVyZVN0b3JhZ2U5X0N1YmU6On5U
ZXh0dXJlU3RvcmFnZTlfQ3ViZSgpCit7CisgICAgaWYgKG1UZXh0dXJlKQorICAgIHsKKyAgICAg
ICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IDY7ICsraSkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBtUmVuZGVyVGFyZ2V0W2ldOworICAgIH0K
K30KKworVGV4dHVyZVN0b3JhZ2U5X0N1YmUgKlRleHR1cmVTdG9yYWdlOV9DdWJlOjptYWtlVGV4
dHVyZVN0b3JhZ2U5X0N1YmUoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpCit7CisgICAgQVNTRVJU
KEhBU19EWU5BTUlDX1RZUEUoVGV4dHVyZVN0b3JhZ2U5X0N1YmUqLCBzdG9yYWdlKSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmVTdG9yYWdlOV9DdWJlKj4oc3RvcmFnZSk7Cit9CisK
Ky8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVh
c2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQorSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVTdG9y
YWdlOV9DdWJlOjpnZXRDdWJlTWFwU3VyZmFjZShHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVs
LCBib29sIGRpcnR5KQoreworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gTlVMTDsK
KworICAgIGlmIChtVGV4dHVyZSkKKyAgICB7CisgICAgICAgIEQzRENVQkVNQVBfRkFDRVMgZmFj
ZSA9IGdsX2QzZDk6OkNvbnZlcnRDdWJlRmFjZShmYWNlVGFyZ2V0KTsKKyAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBtVGV4dHVyZS0+R2V0Q3ViZU1hcFN1cmZhY2UoZmFjZSwgbGV2ZWwgKyBtTG9k
T2Zmc2V0LCAmc3VyZmFjZSk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisK
KyAgICAgICAgLy8gV2l0aCBtYW5hZ2VkIHRleHR1cmVzIHRoZSBkcml2ZXIgbmVlZHMgdG8gYmUg
aW5mb3JtZWQgb2YgdXBkYXRlcyB0byB0aGUgbG93ZXIgbWlwbWFwIGxldmVscworICAgICAgICBp
ZiAobGV2ZWwgIT0gMCAmJiBpc01hbmFnZWQoKSAmJiBkaXJ0eSkKKyAgICAgICAgeworICAgICAg
ICAgICAgbVRleHR1cmUtPkFkZERpcnR5UmVjdChmYWNlLCBOVUxMKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiBzdXJmYWNlOworfQorCitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9y
YWdlOV9DdWJlOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQpCit7CisgICAgcmV0
dXJuIG1SZW5kZXJUYXJnZXRbZ2w6OlRleHR1cmVDdWJlTWFwOjpmYWNlSW5kZXgoZmFjZVRhcmdl
dCldOworfQorCit2b2lkIFRleHR1cmVTdG9yYWdlOV9DdWJlOjpnZW5lcmF0ZU1pcG1hcChpbnQg
ZmFjZSwgaW50IGxldmVsKQoreworICAgIElEaXJlY3QzRFN1cmZhY2U5ICp1cHBlciA9IGdldEN1
YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVs
IC0gMSwgZmFsc2UpOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpsb3dlciA9IGdldEN1YmVNYXBT
dXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsLCB0cnVl
KTsKKworICAgIGlmICh1cHBlciAhPSBOVUxMICYmIGxvd2VyICE9IE5VTEwpCisgICAgeworICAg
ICAgICBtUmVuZGVyZXItPmJveEZpbHRlcih1cHBlciwgbG93ZXIpOworICAgIH0KKworICAgIGlm
ICh1cHBlciAhPSBOVUxMKSB1cHBlci0+UmVsZWFzZSgpOworICAgIGlmIChsb3dlciAhPSBOVUxM
KSBsb3dlci0+UmVsZWFzZSgpOworfQorCitJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmVT
dG9yYWdlOV9DdWJlOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0
dXJlOworfQorCit2b2lkIFRleHR1cmVTdG9yYWdlOV9DdWJlOjppbml0aWFsaXplUmVuZGVyVGFy
Z2V0KCkKK3sKKyAgICBpZiAobVRleHR1cmUgIT0gTlVMTCAmJiBpc1JlbmRlclRhcmdldCgpKQor
ICAgIHsKKyAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOworCisgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBB
U1NFUlQobVJlbmRlclRhcmdldFtpXSA9PSBOVUxMKTsKKworICAgICAgICAgICAgc3VyZmFjZSA9
IGdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGksIDAs
IGZhbHNlKTsKKworICAgICAgICAgICAgbVJlbmRlclRhcmdldFtpXSA9IG5ldyBSZW5kZXJUYXJn
ZXQ5KG1SZW5kZXJlciwgc3VyZmFjZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30KXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5LmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0b3Jh
Z2U5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uODZmNTUxYTEzMTVkYTQ1MzcxM2ZhMTk2ZDc3MjhmNzI1N2UyYmQ4
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9UZXh0dXJlU3RvcmFnZTkuaApAQCAtMCwwICsxLDEwOSBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKy8vIFRleHR1cmVTdG9yYWdlOS5oOiBEZWZpbmVzIHRoZSBhYnN0cmFjdCBy
eDo6VGV4dHVyZVN0b3JhZ2U5IGNsYXNzIGFuZCBpdHMgY29uY3JldGUgZGVyaXZlZAorLy8gY2xh
c3NlcyBUZXh0dXJlU3RvcmFnZTlfMkQgYW5kIFRleHR1cmVTdG9yYWdlOV9DdWJlLCB3aGljaCBh
Y3QgYXMgdGhlIGludGVyZmFjZSB0byB0aGUKKy8vIEQzRDkgdGV4dHVyZS4KKworI2lmbmRlZiBM
SUJHTEVTVjJfUkVOREVSRVJfVEVYVFVSRVNUT1JBR0U5X0hfCisjZGVmaW5lIExJQkdMRVNWMl9S
RU5ERVJFUl9URVhUVVJFU1RPUkFHRTlfSF8KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9UZXh0dXJlU3RvcmFnZS5oIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCituYW1lc3Bh
Y2UgcngKK3sKK2NsYXNzIFJlbmRlcmVyOTsKK2NsYXNzIFN3YXBDaGFpbjk7CitjbGFzcyBSZW5k
ZXJUYXJnZXQ7CitjbGFzcyBSZW5kZXJUYXJnZXQ5OworY2xhc3MgQmxpdDsKKworY2xhc3MgVGV4
dHVyZVN0b3JhZ2U5IDogcHVibGljIFRleHR1cmVTdG9yYWdlCit7CisgIHB1YmxpYzoKKyAgICBU
ZXh0dXJlU3RvcmFnZTkoUmVuZGVyZXIgKnJlbmRlcmVyLCBEV09SRCB1c2FnZSk7CisgICAgdmly
dHVhbCB+VGV4dHVyZVN0b3JhZ2U5KCk7CisKKyAgICBzdGF0aWMgVGV4dHVyZVN0b3JhZ2U5ICpt
YWtlVGV4dHVyZVN0b3JhZ2U5KFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKTsKKworICAgIHN0YXRp
YyBEV09SRCBHZXRUZXh0dXJlVXNhZ2UoRDNERk9STUFUIGQzZGZtdCwgR0xlbnVtIGdsdXNhZ2Us
IGJvb2wgZm9yY2VSZW5kZXJhYmxlKTsKKyAgICBzdGF0aWMgYm9vbCBJc1RleHR1cmVGb3JtYXRS
ZW5kZXJhYmxlKEQzREZPUk1BVCBmb3JtYXQpOworCisgICAgRDNEUE9PTCBnZXRQb29sKCkgY29u
c3Q7CisgICAgRFdPUkQgZ2V0VXNhZ2UoKSBjb25zdDsKKworICAgIHZpcnR1YWwgSURpcmVjdDNE
QmFzZVRleHR1cmU5ICpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFJl
bmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KCkgeyByZXR1cm4gTlVMTDsgfQorICAgIHZpcnR1
YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQpIHsgcmV0
dXJuIE5VTEw7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKSB7
fTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCkg
e307CisKKyAgICB2aXJ0dWFsIGludCBnZXRMb2RPZmZzZXQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGJvb2wgaXNSZW5kZXJUYXJnZXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNNYW5hZ2Vk
KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgbGV2ZWxDb3VudCgpOworCisgIHByb3RlY3RlZDoK
KyAgICBpbnQgbUxvZE9mZnNldDsKKyAgICBSZW5kZXJlcjkgKm1SZW5kZXJlcjsKKworICBwcml2
YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZTkpOworCisg
ICAgY29uc3QgRFdPUkQgbUQzRFVzYWdlOworICAgIGNvbnN0IEQzRFBPT0wgbUQzRFBvb2w7Cit9
OworCitjbGFzcyBUZXh0dXJlU3RvcmFnZTlfMkQgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2U5Cit7
CisgIHB1YmxpYzoKKyAgICBUZXh0dXJlU3RvcmFnZTlfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBT
d2FwQ2hhaW45ICpzd2FwY2hhaW4pOworICAgIFRleHR1cmVTdG9yYWdlOV8yRChSZW5kZXJlciAq
cmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdl
LCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwor
ICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlOV8yRCgpOworCisgICAgc3RhdGljIFRleHR1cmVT
dG9yYWdlOV8yRCAqbWFrZVRleHR1cmVTdG9yYWdlOV8yRChUZXh0dXJlU3RvcmFnZSAqc3RvcmFn
ZSk7CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0U3VyZmFjZUxldmVsKGludCBsZXZlbCwg
Ym9vbCBkaXJ0eSk7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgp
OworICAgIHZpcnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRCYXNlVGV4dHVyZSgpIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpOworCisgIHBy
aXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlOV8yRCk7
CisKKyAgICB2b2lkIGluaXRpYWxpemVSZW5kZXJUYXJnZXQoKTsKKworICAgIElEaXJlY3QzRFRl
eHR1cmU5ICptVGV4dHVyZTsKKyAgICBSZW5kZXJUYXJnZXQ5ICptUmVuZGVyVGFyZ2V0OworfTsK
KworY2xhc3MgVGV4dHVyZVN0b3JhZ2U5X0N1YmUgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2U5Cit7
CisgIHB1YmxpYzoKKyAgICBUZXh0dXJlU3RvcmFnZTlfQ3ViZShSZW5kZXJlciAqcmVuZGVyZXIs
IGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZv
cmNlUmVuZGVyYWJsZSwgaW50IHNpemUpOworICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlOV9D
dWJlKCk7CisKKyAgICBzdGF0aWMgVGV4dHVyZVN0b3JhZ2U5X0N1YmUgKm1ha2VUZXh0dXJlU3Rv
cmFnZTlfQ3ViZShUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSk7CisKKyAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqZ2V0Q3ViZU1hcFN1cmZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCwgYm9v
bCBkaXJ0eSk7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVu
dW0gZmFjZVRhcmdldCk7CisgICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJh
c2VUZXh0dXJlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBm
YWNlLCBpbnQgbGV2ZWwpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKFRleHR1cmVTdG9yYWdlOV9DdWJlKTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZVJlbmRlclRh
cmdldCgpOworCisgICAgSURpcmVjdDNEQ3ViZVRleHR1cmU5ICptVGV4dHVyZTsKKyAgICBSZW5k
ZXJUYXJnZXQ5ICptUmVuZGVyVGFyZ2V0WzZdOworfTsKKworfQorCisjZW5kaWYgLy8gTElCR0xF
U1YyX1JFTkRFUkVSX1RFWFRVUkVTVE9SQUdFOV9IXworCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4QnVmZmVyOS5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
VmVydGV4QnVmZmVyOS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTdmNWJjZDI1NmFjZWI3MjU3NWFmZjlhMTk4
Y2M5ZDBmN2QyNzYzMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmNwcApAQCAtMCwwICsx
LDUzMCBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisv
LyBWZXJ0ZXhCdWZmZXI5LmNwcDogRGVmaW5lcyB0aGUgRDNEOSBWZXJ0ZXhCdWZmZXIgaW1wbGVt
ZW50YXRpb24uCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZm
ZXI5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvdmVydGV4Y29udmVyc2lv
bi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdlLmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9SZW5kZXJlcjkuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKKworbmFt
ZXNwYWNlIHJ4Cit7CisKK2Jvb2wgVmVydGV4QnVmZmVyOTo6bVRyYW5zbGF0aW9uc0luaXRpYWxp
emVkID0gZmFsc2U7CitWZXJ0ZXhCdWZmZXI5OjpGb3JtYXRDb252ZXJ0ZXIgVmVydGV4QnVmZmVy
OTo6bUZvcm1hdENvbnZlcnRlcnNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVNdWzJdWzRdOwor
CitWZXJ0ZXhCdWZmZXI5OjpWZXJ0ZXhCdWZmZXI5KHJ4OjpSZW5kZXJlcjkgKmNvbnN0IHJlbmRl
cmVyKSA6IG1SZW5kZXJlcihyZW5kZXJlcikKK3sKKyAgICBtVmVydGV4QnVmZmVyID0gTlVMTDsK
KyAgICBtQnVmZmVyU2l6ZSA9IDA7CisgICAgbUR5bmFtaWNVc2FnZSA9IGZhbHNlOworCisgICAg
aWYgKCFtVHJhbnNsYXRpb25zSW5pdGlhbGl6ZWQpCisgICAgeworICAgICAgICBpbml0aWFsaXpl
VHJhbnNsYXRpb25zKHJlbmRlcmVyLT5nZXRDYXBzRGVjbFR5cGVzKCkpOworICAgICAgICBtVHJh
bnNsYXRpb25zSW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIH0KK30KKworVmVydGV4QnVmZmVyOTo6
flZlcnRleEJ1ZmZlcjkoKQoreworICAgIGlmIChtVmVydGV4QnVmZmVyKQorICAgIHsKKyAgICAg
ICAgbVZlcnRleEJ1ZmZlci0+UmVsZWFzZSgpOworICAgICAgICBtVmVydGV4QnVmZmVyID0gTlVM
TDsKKyAgICB9Cit9CisKK2Jvb2wgVmVydGV4QnVmZmVyOTo6aW5pdGlhbGl6ZSh1bnNpZ25lZCBp
bnQgc2l6ZSwgYm9vbCBkeW5hbWljVXNhZ2UpCit7CisgICAgaWYgKG1WZXJ0ZXhCdWZmZXIpCisg
ICAgeworICAgICAgICBtVmVydGV4QnVmZmVyLT5SZWxlYXNlKCk7CisgICAgICAgIG1WZXJ0ZXhC
dWZmZXIgPSBOVUxMOworICAgIH0KKworICAgIHVwZGF0ZVNlcmlhbCgpOworCisgICAgaWYgKHNp
emUgPiAwKQorICAgIHsKKyAgICAgICAgRFdPUkQgZmxhZ3MgPSBEM0RVU0FHRV9XUklURU9OTFk7
CisgICAgICAgIGlmIChkeW5hbWljVXNhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsYWdz
IHw9IEQzRFVTQUdFX0RZTkFNSUM7CisgICAgICAgIH0KKworICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IG1SZW5kZXJlci0+Y3JlYXRlVmVydGV4QnVmZmVyKHNpemUsIGZsYWdzLCAmbVZlcnRleEJ1
ZmZlcik7CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAg
ICAgICBFUlIoIk91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBhIHZlcnRleCBidWZmZXIgb2Ygc2l6
ZSAlbHUuIiwgc2l6ZSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBtQnVmZmVyU2l6ZSA9IHNpemU7CisgICAgbUR5bmFtaWNVc2FnZSA9IGR5bmFt
aWNVc2FnZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworVmVydGV4QnVmZmVyOSAqVmVydGV4QnVm
ZmVyOTo6bWFrZVZlcnRleEJ1ZmZlcjkoVmVydGV4QnVmZmVyICp2ZXJ0ZXhCdWZmZXIpCit7Cisg
ICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoVmVydGV4QnVmZmVyOSosIHZlcnRleEJ1ZmZlcikp
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxWZXJ0ZXhCdWZmZXI5Kj4odmVydGV4QnVmZmVyKTsK
K30KKworYm9vbCBWZXJ0ZXhCdWZmZXI5OjpzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6
OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgaW5zdGFu
Y2VzLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworICAgIGlmIChtVmVydGV4QnVmZmVyKQorICAg
IHsKKyAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gYXR0cmliLm1Cb3VuZEJ1ZmZlci5nZXQo
KTsKKworICAgICAgICBpbnQgaW5wdXRTdHJpZGUgPSBhdHRyaWIuc3RyaWRlKCk7CisgICAgICAg
IGludCBlbGVtZW50U2l6ZSA9IGF0dHJpYi50eXBlU2l6ZSgpOworICAgICAgICBjb25zdCBGb3Jt
YXRDb252ZXJ0ZXIgJmNvbnZlcnRlciA9IGZvcm1hdENvbnZlcnRlcihhdHRyaWIpOworCisgICAg
ICAgIERXT1JEIGxvY2tGbGFncyA9IG1EeW5hbWljVXNhZ2UgPyBEM0RMT0NLX05PT1ZFUldSSVRF
IDogMDsKKworICAgICAgICB2b2lkICptYXBQdHIgPSBOVUxMOworCisgICAgICAgIHVuc2lnbmVk
IGludCBtYXBTaXplOworICAgICAgICBpZiAoIXNwYWNlUmVxdWlyZWQoYXR0cmliLCBjb3VudCwg
aW5zdGFuY2VzLCAmbWFwU2l6ZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVZlcnRleEJ1ZmZlci0+
TG9jayhvZmZzZXQsIG1hcFNpemUsICZtYXBQdHIsIGxvY2tGbGFncyk7CisKKyAgICAgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkxvY2sgZmFpbGVk
IHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IGNoYXIgKmlucHV0ID0gTlVMTDsKKyAgICAgICAg
aWYgKGJ1ZmZlcikKKyAgICAgICAgeworICAgICAgICAgICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFn
ZSA9IGJ1ZmZlci0+Z2V0U3RvcmFnZSgpOworICAgICAgICAgICAgaW5wdXQgPSBzdGF0aWNfY2Fz
dDxjb25zdCBjaGFyKj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSArIHN0YXRpY19jYXN0PGludD4oYXR0
cmliLm1PZmZzZXQpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg
ICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYXR0cmliLm1Qb2ludGVyKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBhdHRyaWIubURpdmlz
b3IgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaW5wdXQgKz0gaW5wdXRTdHJpZGUgKiBz
dGFydDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb252ZXJ0ZXIuaWRlbnRpdHkgJiYgaW5w
dXRTdHJpZGUgPT0gZWxlbWVudFNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbWNweSht
YXBQdHIsIGlucHV0LCBjb3VudCAqIGlucHV0U3RyaWRlKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnZlcnRlci5jb252ZXJ0QXJyYXkoaW5wdXQs
IGlucHV0U3RyaWRlLCBjb3VudCwgbWFwUHRyKTsKKyAgICAgICAgfQorCisgICAgICAgIG1WZXJ0
ZXhCdWZmZXItPlVubG9jaygpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBFUlIoIlZlcnRleCBidWZmZXIgbm90IGluaXRpYWxpemVkLiIp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFZlcnRleEJ1ZmZlcjk6
OnN0b3JlUmF3RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWdu
ZWQgaW50IG9mZnNldCkKK3sKKyAgICBpZiAobVZlcnRleEJ1ZmZlcikKKyAgICB7CisgICAgICAg
IERXT1JEIGxvY2tGbGFncyA9IG1EeW5hbWljVXNhZ2UgPyBEM0RMT0NLX05PT1ZFUldSSVRFIDog
MDsKKworICAgICAgICB2b2lkICptYXBQdHIgPSBOVUxMOworICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IG1WZXJ0ZXhCdWZmZXItPkxvY2sob2Zmc2V0LCBzaXplLCAmbWFwUHRyLCBsb2NrRmxhZ3Mp
OworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAg
RVJSKCJMb2NrIGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHkobWFwUHRyLCBkYXRh
LCBzaXplKTsKKworICAgICAgICBtVmVydGV4QnVmZmVyLT5VbmxvY2soKTsKKworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgRVJSKCJWZXJ0ZXgg
YnVmZmVyIG5vdCBpbml0aWFsaXplZC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworYm9vbCBWZXJ0ZXhCdWZmZXI5OjpnZXRTcGFjZVJlcXVpcmVkKGNvbnN0IGdsOjpWZXJ0
ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTcGFj
ZVJlcXVpcmVkKSBjb25zdAoreworICAgIHJldHVybiBzcGFjZVJlcXVpcmVkKGF0dHJpYiwgY291
bnQsIGluc3RhbmNlcywgb3V0U3BhY2VSZXF1aXJlZCk7Cit9CisKK2Jvb2wgVmVydGV4QnVmZmVy
OTo6cmVxdWlyZXNDb252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikg
Y29uc3QKK3sKKyAgICByZXR1cm4gIWZvcm1hdENvbnZlcnRlcihhdHRyaWIpLmlkZW50aXR5Owor
fQorCit1bnNpZ25lZCBpbnQgVmVydGV4QnVmZmVyOTo6Z2V0VmVydGV4U2l6ZShjb25zdCBnbDo6
VmVydGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0Cit7CisgICAgdW5zaWduZWQgaW50IHNwYWNl
UmVxdWlyZWQ7CisgICAgcmV0dXJuIGdldFNwYWNlUmVxdWlyZWQoYXR0cmliLCAxLCAwLCAmc3Bh
Y2VSZXF1aXJlZCkgPyBzcGFjZVJlcXVpcmVkIDogMDsKK30KKworRDNEREVDTFRZUEUgVmVydGV4
QnVmZmVyOTo6Z2V0RGVjbFR5cGUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBj
b25zdAoreworICAgIHJldHVybiBmb3JtYXRDb252ZXJ0ZXIoYXR0cmliKS5kM2REZWNsVHlwZTsK
K30KKwordW5zaWduZWQgaW50IFZlcnRleEJ1ZmZlcjk6OmdldEJ1ZmZlclNpemUoKSBjb25zdAor
eworICAgIHJldHVybiBtQnVmZmVyU2l6ZTsKK30KKworYm9vbCBWZXJ0ZXhCdWZmZXI5OjpzZXRC
dWZmZXJTaXplKHVuc2lnbmVkIGludCBzaXplKQoreworICAgIGlmIChzaXplID4gbUJ1ZmZlclNp
emUpCisgICAgeworICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZShzaXplLCBtRHluYW1pY1VzYWdl
KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
fQorCitib29sIFZlcnRleEJ1ZmZlcjk6OmRpc2NhcmQoKQoreworICAgIGlmIChtVmVydGV4QnVm
ZmVyKQorICAgIHsKKyAgICAgICAgdm9pZCAqZHVtbXk7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0
OworCisgICAgICAgIHJlc3VsdCA9IG1WZXJ0ZXhCdWZmZXItPkxvY2soMCwgMSwgJmR1bW15LCBE
M0RMT0NLX0RJU0NBUkQpOworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIEVSUigiRGlzY2FyZCBsb2NrIGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4eCIs
IHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAg
ICByZXN1bHQgPSBtVmVydGV4QnVmZmVyLT5VbmxvY2soKTsKKyAgICAgICAgaWYgKEZBSUxFRChy
ZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkRpc2NhcmQgdW5sb2NrIGZhaWxl
ZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgRVJSKCJWZXJ0ZXggYnVmZmVyIG5vdCBpbml0aWFsaXplZC4iKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworSURpcmVjdDNEVmVydGV4QnVmZmVyOSAqIFZl
cnRleEJ1ZmZlcjk6OmdldEJ1ZmZlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1WZXJ0ZXhCdWZm
ZXI7Cit9CisKKy8vIE1hcHBpbmcgZnJvbSBPcGVuR0wtRVMgdmVydGV4IGF0dHJpYiB0eXBlIHRv
IEQzRCBkZWNsIHR5cGU6CisvLworLy8gQllURSAgICAgICAgICAgICAgICAgU0hPUlQgKENhc3Qp
CisvLyBCWVRFLW5vcm0gICAgICAgICAgICBGTE9BVCAoTm9ybWFsaXplKSAoY2FuJ3QgYmUgZXhh
Y3RseSByZXByZXNlbnRlZCBhcyBTSE9SVC1ub3JtKQorLy8gVU5TSUdORURfQllURSAgICAgICAg
VUJZVEU0IChJZGVudGl0eSkgb3IgU0hPUlQgKENhc3QpCisvLyBVTlNJR05FRF9CWVRFLW5vcm0g
ICBVQllURTROIChJZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1hbGl6ZSkKKy8vIFNIT1JUICAgICAg
ICAgICAgICAgIFNIT1JUIChJZGVudGl0eSkKKy8vIFNIT1JULW5vcm0gICAgICAgICAgIFNIT1JU
LW5vcm0gKElkZW50aXR5KSBvciBGTE9BVCAoTm9ybWFsaXplKQorLy8gVU5TSUdORURfU0hPUlQg
ICAgICAgRkxPQVQgKENhc3QpCisvLyBVTlNJR05FRF9TSE9SVC1ub3JtICBVU0hPUlQtbm9ybSAo
SWRlbnRpdHkpIG9yIEZMT0FUIChOb3JtYWxpemUpCisvLyBGSVhFRCAobm90IGluIFdlYkdMKSBG
TE9BVCAoRml4ZWRUb0Zsb2F0KQorLy8gRkxPQVQgICAgICAgICAgICAgICAgRkxPQVQgKElkZW50
aXR5KQorCisvLyBHTFRvQ1R5cGUgbWFwcyBmcm9tIEdMIHR5cGUgKGFzIEdMZW51bSkgdG8gdGhl
IEMgdHlwZWRlZi4KK3RlbXBsYXRlIDxHTGVudW0gR0xUeXBlPiBzdHJ1Y3QgR0xUb0NUeXBlIHsg
fTsKKwordGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9CWVRFPiAgICAgICAgICAgeyB0
eXBlZGVmIEdMYnl0ZSB0eXBlOyAgICAgIH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBl
PEdMX1VOU0lHTkVEX0JZVEU+ICB7IHR5cGVkZWYgR0x1Ynl0ZSB0eXBlOyAgICAgfTsKK3RlbXBs
YXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfU0hPUlQ+ICAgICAgICAgIHsgdHlwZWRlZiBHTHNo
b3J0IHR5cGU7ICAgICB9OwordGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9VTlNJR05F
RF9TSE9SVD4geyB0eXBlZGVmIEdMdXNob3J0IHR5cGU7ICAgIH07Cit0ZW1wbGF0ZSA8PiBzdHJ1
Y3QgR0xUb0NUeXBlPEdMX0ZJWEVEPiAgICAgICAgICB7IHR5cGVkZWYgR0x1aW50IHR5cGU7ICAg
ICAgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfRkxPQVQ+ICAgICAgICAgIHsg
dHlwZWRlZiBHTGZsb2F0IHR5cGU7ICAgICB9OworCisvLyBUaGlzIGRpZmZlcnMgZnJvbSBEM0RE
RUNMVFlQRSBpbiB0aGF0IGl0IGlzIHVuc2l6ZWQuIChTaXplIGV4cGFuc2lvbiBpcyBhcHBsaWVk
IGxhc3QuKQorZW51bSBEM0RWZXJ0ZXhUeXBlCit7CisgICAgRDNEVlRfRkxPQVQsCisgICAgRDNE
VlRfU0hPUlQsCisgICAgRDNEVlRfU0hPUlRfTk9STSwKKyAgICBEM0RWVF9VQllURSwKKyAgICBE
M0RWVF9VQllURV9OT1JNLAorICAgIEQzRFZUX1VTSE9SVF9OT1JNCit9OworCisvLyBEM0RUb0NU
eXBlIG1hcHMgZnJvbSBEM0QgdmVydGV4IHR5cGUgKGFzIGVudW0gRDNEVmVydGV4VHlwZSkgdG8g
dGhlIGNvcnJlc3BvbmRpbmcgQyB0eXBlLgordGVtcGxhdGUgPHVuc2lnbmVkIGludCBEM0RUeXBl
PiBzdHJ1Y3QgRDNEVG9DVHlwZSB7IH07CisKK3RlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBl
PEQzRFZUX0ZMT0FUPiB7IHR5cGVkZWYgZmxvYXQgdHlwZTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVj
dCBEM0RUb0NUeXBlPEQzRFZUX1NIT1JUPiB7IHR5cGVkZWYgc2hvcnQgdHlwZTsgfTsKK3RlbXBs
YXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1NIT1JUX05PUk0+IHsgdHlwZWRlZiBzaG9y
dCB0eXBlOyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfVUJZVEU+IHsg
dHlwZWRlZiB1bnNpZ25lZCBjaGFyIHR5cGU7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9D
VHlwZTxEM0RWVF9VQllURV9OT1JNPiB7IHR5cGVkZWYgdW5zaWduZWQgY2hhciB0eXBlOyB9Owor
dGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfVVNIT1JUX05PUk0+IHsgdHlwZWRl
ZiB1bnNpZ25lZCBzaG9ydCB0eXBlOyB9OworCisvLyBFbmNvZGUgdGhlIHR5cGUvc2l6ZSBjb21i
aW5hdGlvbnMgdGhhdCBEM0QgcGVybWl0cy4gRm9yIGVhY2ggdHlwZS9zaXplIGl0IGV4cGFuZHMg
dG8gYSB3aWRlbmVyIHRoYXQgd2lsbCBwcm92aWRlIHRoZSBhcHByb3ByaWF0ZSBmaW5hbCBzaXpl
LgordGVtcGxhdGUgPHVuc2lnbmVkIGludCB0eXBlLCBpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVs
ZSB7IH07CisKK3RlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9GTE9B
VCwgc2l6ZT4gICAgICAgICAgOiBOb1dpZGVuPHNpemU+IHsgfTsKK3RlbXBsYXRlIDxpbnQgc2l6
ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9TSE9SVCwgc2l6ZT4gICAgICAgICAgOiBXaWRlblRv
RXZlbjxzaXplPiB7IH07Cit0ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNE
VlRfU0hPUlRfTk9STSwgc2l6ZT4gICAgIDogV2lkZW5Ub0V2ZW48c2l6ZT4geyB9OwordGVtcGxh
dGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1VCWVRFLCBzaXplPiAgICAgICAg
ICA6IFdpZGVuVG9Gb3VyPHNpemU+IHsgfTsKK3RlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdp
ZGVuUnVsZTxEM0RWVF9VQllURV9OT1JNLCBzaXplPiAgICAgOiBXaWRlblRvRm91cjxzaXplPiB7
IH07Cit0ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfVVNIT1JUX05P
Uk0sIHNpemU+ICAgIDogV2lkZW5Ub0V2ZW48c2l6ZT4geyB9OworCisvLyBWZXJ0ZXhUeXBlRmxh
Z3MgZW5jb2RlcyB0aGUgRDNEQ0FQUzk6OkRlY2xUeXBlIGZsYWcgYW5kIHZlcnRleCBkZWNsYXJh
dGlvbiBmbGFnIGZvciBlYWNoIEQzRCB2ZXJ0ZXggdHlwZSAmIHNpemUgY29tYmluYXRpb24uCit0
ZW1wbGF0ZSA8dW5zaWduZWQgaW50IGQzZHR5cGUsIGludCBzaXplPiBzdHJ1Y3QgVmVydGV4VHlw
ZUZsYWdzIHsgfTsKKwordGVtcGxhdGUgPHVuc2lnbmVkIGludCBfY2FwZmxhZywgdW5zaWduZWQg
aW50IF9kZWNsZmxhZz4KK3N0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXIKK3sKKyAgICBlbnVt
IHsgY2FwZmxhZyA9IF9jYXBmbGFnIH07CisgICAgZW51bSB7IGRlY2xmbGFnID0gX2RlY2xmbGFn
IH07Cit9OworCit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FU
LCAxPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9GTE9BVDE+IHsgfTsK
K3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfRkxPQVQsIDI+IDogVmVy
dGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FUMj4geyB9OwordGVtcGxhdGUg
PD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwgMz4gOiBWZXJ0ZXhUeXBlRmxh
Z3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQzPiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
VmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FULCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjww
LCBEM0RERUNMVFlQRV9GTE9BVDQ+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBl
RmxhZ3M8RDNEVlRfU0hPUlQsIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xU
WVBFX1NIT1JUMj4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RW
VF9TSE9SVCwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfU0hPUlQ0
PiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JUX05P
Uk0sIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19TSE9SVDJOLCBEM0RERUNM
VFlQRV9TSE9SVDJOPiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQz
RFZUX1NIT1JUX05PUk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19TSE9S
VDROLCBEM0RERUNMVFlQRV9TSE9SVDROPiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4
VHlwZUZsYWdzPEQzRFZUX1VCWVRFLCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENB
UFNfVUJZVEU0LCBEM0RERUNMVFlQRV9VQllURTQ+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBW
ZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVUJZVEVfTk9STSwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxw
ZXI8RDNERFRDQVBTX1VCWVRFNE4sIEQzRERFQ0xUWVBFX1VCWVRFNE4+IHsgfTsKK3RlbXBsYXRl
IDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVVNIT1JUX05PUk0sIDI+IDogVmVydGV4
VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VU0hPUlQyTiwgRDNEREVDTFRZUEVfVVNIT1JUMk4+
IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVVNIT1JUX05P
Uk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VU0hPUlQ0TiwgRDNEREVD
TFRZUEVfVVNIT1JUNE4+IHsgfTsKKworCisvLyBWZXJ0ZXhUeXBlTWFwcGluZyBtYXBzIEdMIHR5
cGUgJiBub3JtYWxpemVkIGZsYWcgdG8gcHJlZmVycmVkIGFuZCBmYWxsYmFjayBEM0QgdmVydGV4
IHR5cGVzIChhcyBEM0RWZXJ0ZXhUeXBlIGVudW1zKS4KK3RlbXBsYXRlIDxHTGVudW0gR0x0eXBl
LCBib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZyB7IH07CisKK3RlbXBs
YXRlIDxEM0RWZXJ0ZXhUeXBlIFByZWZlcnJlZCwgRDNEVmVydGV4VHlwZSBGYWxsYmFjayA9IFBy
ZWZlcnJlZD4KK3N0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2UKK3sKKyAgICBlbnVtIHsgcHJl
ZmVycmVkID0gUHJlZmVycmVkIH07CisgICAgZW51bSB7IGZhbGxiYWNrID0gRmFsbGJhY2sgfTsK
K307CisKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9CWVRFLCBmYWxz
ZT4gICAgICAgICAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9T
SE9SVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FzdAordGVtcGxhdGUgPD4gc3Ry
dWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX0JZVEUsIHRydWU+ICAgICAgICAgICAgICAgICAgICAg
ICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgICAg
ICAgICAgICAgICAvLyBOb3JtYWxpemUKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFw
cGluZzxHTF9VTlNJR05FRF9CWVRFLCBmYWxzZT4gICAgICAgICAgICAgICA6IFZlcnRleFR5cGVN
YXBwaW5nQmFzZTxEM0RWVF9VQllURSwgRDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgLy8gSWRl
bnRpdHksIENhc3QKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJ
R05FRF9CWVRFLCB0cnVlPiAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxE
M0RWVF9VQllURV9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAgICAgLy8gSWRlbnRpdHksIE5vcm1h
bGl6ZQordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1NIT1JULCBmYWxz
ZT4gICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1NI
T1JUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBJZGVudGl0eQordGVtcGxhdGUgPD4g
c3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1NIT1JULCB0cnVlPiAgICAgICAgICAgICAgICAg
ICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1NIT1JUX05PUk0sIEQzRFZUX0ZM
T0FUPiB7IH07ICAgICAvLyBDYXN0LCBOb3JtYWxpemUKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0
ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9TSE9SVCwgZmFsc2U+ICAgICAgICAgICAgICA6IFZl
cnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQ2FzdAordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1VOU0lH
TkVEX1NIT1JULCB0cnVlPiAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQz
RFZUX1VTSE9SVF9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAgICAvLyBDYXN0LCBOb3JtYWxpemUK
K3RlbXBsYXRlIDxib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9G
SVhFRCwgbm9ybWFsaXplZD4gICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4g
eyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gRml4ZWRUb0Zsb2F0Cit0ZW1wbGF0ZSA8Ym9v
bCBub3JtYWxpemVkPiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfRkxPQVQsIG5vcm1hbGl6
ZWQ+ICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAg
ICAgICAgICAgICAgIC8vIElkZW50aXR5CisKKworLy8gR2l2ZW4gYSBHTCB0eXBlICYgbm9ybSBm
bGFnIGFuZCBhIEQzRCB0eXBlLCBDb252ZXJzaW9uUnVsZSBwcm92aWRlcyB0aGUgdHlwZSBjb252
ZXJzaW9uIHJ1bGUgKENhc3QsIE5vcm1hbGl6ZSwgSWRlbnRpdHksIEZpeGVkVG9GbG9hdCkuCisv
LyBUaGUgY29udmVyc2lvbiBydWxlcyB0aGVtc2VsdmVzIGFyZSBkZWZpbmVkIGluIHZlcnRleGNv
bnZlcnNpb24uaC4KKworLy8gQWxtb3N0IGFsbCBjYXNlcyBhcmUgY292ZXJlZCBieSBDYXN0IChp
bmNsdWRpbmcgdGhvc2UgdGhhdCBhcmUgYWN0dWFsbHkgSWRlbnRpdHkgc2luY2UgQ2FzdDxULFQ+
IGtub3dzIGl0J3MgYW4gaWRlbnRpdHkgbWFwcGluZykuCit0ZW1wbGF0ZSA8R0xlbnVtIGZyb21U
eXBlLCBib29sIG5vcm1hbGl6ZWQsIHVuc2lnbmVkIGludCB0b1R5cGU+CitzdHJ1Y3QgQ29udmVy
c2lvblJ1bGUgOiBDYXN0PHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5cGUsIHR5cGVu
YW1lIEQzRFRvQ1R5cGU8dG9UeXBlPjo6dHlwZT4geyB9OworCisvLyBBbGwgY29udmVyc2lvbnMg
ZnJvbSBub3JtYWxpemVkIHR5cGVzIHRvIGZsb2F0IHVzZSB0aGUgTm9ybWFsaXplIG9wZXJhdG9y
LgordGVtcGxhdGUgPEdMZW51bSBmcm9tVHlwZT4gc3RydWN0IENvbnZlcnNpb25SdWxlPGZyb21U
eXBlLCB0cnVlLCBEM0RWVF9GTE9BVD4gOiBOb3JtYWxpemU8dHlwZW5hbWUgR0xUb0NUeXBlPGZy
b21UeXBlPjo6dHlwZT4geyB9OworCisvLyBVc2UgYSBmdWxsIHNwZWNpYWxpemF0aW9uIGZvciB0
aGlzIHNvIHRoYXQgaXQgcHJlZmVyZW50aWFsbHkgbWF0Y2hlcyBhaGVhZCBvZiB0aGUgZ2VuZXJp
YyBub3JtYWxpemUtdG8tZmxvYXQgcnVsZXMuCit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lv
blJ1bGU8R0xfRklYRUQsIHRydWUsIEQzRFZUX0ZMT0FUPiAgOiBGaXhlZFRvRmxvYXQ8R0xpbnQs
IDE2PiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklYRUQsIGZh
bHNlLCBEM0RWVF9GTE9BVD4gOiBGaXhlZFRvRmxvYXQ8R0xpbnQsIDE2PiB7IH07CisKKy8vIEEg
Mi1zdGFnZSBjb25zdHJ1Y3Rpb24gaXMgdXNlZCBmb3IgRGVmYXVsdFZlcnRleFZhbHVlcyBiZWNh
dXNlIGZsb2F0IG11c3QgdXNlIFNpbXBsZURlZmF1bHRWYWx1ZXMgKGkuZS4gMC8xKQorLy8gd2hl
dGhlciBpdCBpcyBub3JtYWxpemVkIG9yIG5vdC4KK3RlbXBsYXRlIDxjbGFzcyBULCBib29sIG5v
cm1hbGl6ZWQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyIHsgfTsKKwordGVtcGxh
dGUgPGNsYXNzIFQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyPFQsIHRydWU+ICA6
IE5vcm1hbGl6ZWREZWZhdWx0VmFsdWVzPFQ+IHsgfTsKK3RlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1
Y3QgRGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMjxULCBmYWxzZT4gOiBTaW1wbGVEZWZhdWx0VmFs
dWVzPFQ+IHsgfTsKKworLy8gV29yayBvdXQgdGhlIGRlZmF1bHQgdmFsdWUgcnVsZSBmb3IgYSBE
M0QgdHlwZSAoZXhwcmVzc2VkIGFzIHRoZSBDIHR5cGUpIGFuZAordGVtcGxhdGUgPGNsYXNzIFQs
IGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXMgOiBEZWZhdWx0VmVy
dGV4VmFsdWVzU3RhZ2UyPFQsIG5vcm1hbGl6ZWQ+IHsgfTsKK3RlbXBsYXRlIDxib29sIG5vcm1h
bGl6ZWQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzPGZsb2F0LCBub3JtYWxpemVkPiA6IFNp
bXBsZURlZmF1bHRWYWx1ZXM8ZmxvYXQ+IHsgfTsKKworLy8gUG9saWN5IHJ1bGVzIGZvciB1c2Ug
d2l0aCBDb252ZXJ0ZXIsIHRvIGNob29zZSB3aGV0aGVyIHRvIHVzZSB0aGUgcHJlZmVycmVkIG9y
IGZhbGxiYWNrIGNvbnZlcnNpb24uCisvLyBUaGUgZmFsbGJhY2sgY29udmVyc2lvbiBwcm9kdWNl
cyBhbiBvdXRwdXQgdGhhdCBhbGwgRDNEOSBkZXZpY2VzIG11c3Qgc3VwcG9ydC4KK3RlbXBsYXRl
IDxjbGFzcyBUPiBzdHJ1Y3QgVXNlUHJlZmVycmVkIHsgZW51bSB7IHR5cGUgPSBUOjpwcmVmZXJy
ZWQgfTsgfTsKK3RlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgVXNlRmFsbGJhY2sgeyBlbnVtIHsg
dHlwZSA9IFQ6OmZhbGxiYWNrIH07IH07CisKKy8vIENvbnZlcnRlciB0aWVzIGl0IGFsbCB0b2dl
dGhlci4gR2l2ZW4gYW4gT3BlbkdMIHR5cGUvbm9ybS9zaXplIGFuZCBjaG9pY2Ugb2YgcHJlZmVy
cmVkL2ZhbGxiYWNrIGNvbnZlcnNpb24sCisvLyBpdCBwcm92aWRlcyBhbGwgdGhlIG1lbWJlcnMg
b2YgdGhlIGFwcHJvcHJpYXRlIFZlcnRleERhdGFDb252ZXJ0ZXIsIHRoZSBEM0RDQVBTOTo6RGVj
bFR5cGVzIGZsYWcgaW4gY2FwIGZsYWcKKy8vIGFuZCB0aGUgRDNEREVDTFRZUEUgbWVtYmVyIG5l
ZWRlZCBmb3IgdGhlIHZlcnRleCBkZWNsYXJhdGlvbiBpbiBkZWNsZmxhZy4KK3RlbXBsYXRlIDxH
TGVudW0gZnJvbVR5cGUsIGJvb2wgbm9ybWFsaXplZCwgaW50IHNpemUsIHRlbXBsYXRlIDxjbGFz
cyBUPiBjbGFzcyBQcmVmZXJlbmNlUnVsZT4KK3N0cnVjdCBDb252ZXJ0ZXIKKyAgICA6IFZlcnRl
eERhdGFDb252ZXJ0ZXI8dHlwZW5hbWUgR0xUb0NUeXBlPGZyb21UeXBlPjo6dHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2lkZW5SdWxlPFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBl
TWFwcGluZzxmcm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6dHlwZSwgc2l6ZT4sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIENvbnZlcnNpb25SdWxlPGZyb21UeXBlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQcmVmZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8
ZnJvbVR5cGUsIG5vcm1hbGl6ZWQ+ID46OnR5cGU+LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBEZWZhdWx0VmVydGV4VmFsdWVzPHR5cGVuYW1lIEQzRFRvQ1R5cGU8UHJlZmVyZW5jZVJ1bGU8
IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBlPjo6dHlwZSwg
bm9ybWFsaXplZCA+ID4KK3sKK3ByaXZhdGU6CisgICAgZW51bSB7IGQzZHR5cGUgPSBQcmVmZXJl
bmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6ZWQ+ID46OnR5cGUg
fTsKKyAgICBlbnVtIHsgZDNkc2l6ZSA9IFdpZGVuUnVsZTxkM2R0eXBlLCBzaXplPjo6ZmluYWxX
aWR0aCB9OworCitwdWJsaWM6CisgICAgZW51bSB7IGNhcGZsYWcgPSBWZXJ0ZXhUeXBlRmxhZ3M8
ZDNkdHlwZSwgZDNkc2l6ZT46OmNhcGZsYWcgfTsKKyAgICBlbnVtIHsgZGVjbGZsYWcgPSBWZXJ0
ZXhUeXBlRmxhZ3M8ZDNkdHlwZSwgZDNkc2l6ZT46OmRlY2xmbGFnIH07Cit9OworCisvLyBJbml0
aWFsaXplIGEgVHJhbnNsYXRpb25JbmZvCisjZGVmaW5lIFRSQU5TTEFUSU9OKHR5cGUsIG5vcm0s
IHNpemUsIHByZWZlcnJlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3Jt
LCBzaXplLCBwcmVmZXJyZWQ+OjppZGVudGl0eSwgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQ+OjpmaW5hbFNp
emUsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIENvbnZlcnRlcjx0eXBlLCBu
b3JtLCBzaXplLCBwcmVmZXJyZWQ+Ojpjb252ZXJ0QXJyYXksICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgIHN0YXRpY19jYXN0PEQzRERFQ0xUWVBFPihDb252ZXJ0ZXI8dHlwZSwgbm9y
bSwgc2l6ZSwgcHJlZmVycmVkPjo6ZGVjbGZsYWcpICBcCisgICAgfQorCisjZGVmaW5lIFRSQU5T
TEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBub3JtLCBzaXplKSAgICBcCisgICAgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBVc2VQcmVmZXJyZWQ+OjpjYXBmbGFn
LCBcCisgICAgICAgIFRSQU5TTEFUSU9OKHR5cGUsIG5vcm0sIHNpemUsIFVzZVByZWZlcnJlZCks
ICAgICAgICBcCisgICAgICAgIFRSQU5TTEFUSU9OKHR5cGUsIG5vcm0sIHNpemUsIFVzZUZhbGxi
YWNrKSAgICAgICAgICBcCisgICAgfQorCisjZGVmaW5lIFRSQU5TTEFUSU9OU19GT1JfVFlQRSh0
eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgVFJBTlNM
QVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAxKSwgVFJBTlNMQVRJT05fRk9S
X1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAyKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9S
TV9TSVpFKHR5cGUsIGZhbHNlLCAzKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5
cGUsIGZhbHNlLCA0KSB9LCBcCisgICAgICAgIHsgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9T
SVpFKHR5cGUsIHRydWUsIDEpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwg
dHJ1ZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCB0cnVlLCAzKSwg
VFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRydWUsIDQpIH0sICAgICBcCisg
ICAgfQorCisjZGVmaW5lIFRSQU5TTEFUSU9OU19GT1JfVFlQRV9OT19OT1JNKHR5cGUpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9S
TV9TSVpFKHR5cGUsIGZhbHNlLCAxKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5
cGUsIGZhbHNlLCAyKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNl
LCAzKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCA0KSB9LCBc
CisgICAgICAgIHsgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAx
KSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAyKSwgVFJBTlNM
QVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAzKSwgVFJBTlNMQVRJT05fRk9S
X1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCA0KSB9LCBcCisgICAgfQorCitjb25zdCBWZXJ0
ZXhCdWZmZXI5OjpUcmFuc2xhdGlvbkRlc2NyaXB0aW9uIFZlcnRleEJ1ZmZlcjk6Om1Qb3NzaWJs
ZVRyYW5zbGF0aW9uc1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFU11bMl1bNF0gPSAvLyBbR0wg
dHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXplZF1bc2l6ZS0xXQor
eworICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9CWVRFKSwKKyAgICBUUkFOU0xBVElPTlNf
Rk9SX1RZUEUoR0xfVU5TSUdORURfQllURSksCisgICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKEdM
X1NIT1JUKSwKKyAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xfVU5TSUdORURfU0hPUlQpLAor
ICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRV9OT19OT1JNKEdMX0ZJWEVEKSwKKyAgICBUUkFOU0xB
VElPTlNfRk9SX1RZUEVfTk9fTk9STShHTF9GTE9BVCkKK307CisKK3ZvaWQgVmVydGV4QnVmZmVy
OTo6aW5pdGlhbGl6ZVRyYW5zbGF0aW9ucyhEV09SRCBkZWNsVHlwZXMpCit7CisgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFUzsgaSsrKQor
ICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCAyOyBqKyspCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGsgPSAwOyBrIDwgNDsgaysrKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChtUG9zc2libGVUcmFuc2xhdGlvbnNb
aV1bal1ba10uY2Fwc0ZsYWcgPT0gMCB8fCAoZGVjbFR5cGVzICYgbVBvc3NpYmxlVHJhbnNsYXRp
b25zW2ldW2pdW2tdLmNhcHNGbGFnKSAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgbUZvcm1hdENvbnZlcnRlcnNbaV1bal1ba10gPSBtUG9zc2libGVUcmFuc2xh
dGlvbnNbaV1bal1ba10ucHJlZmVycmVkQ29udmVyc2lvbjsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgbUZvcm1hdENvbnZlcnRlcnNbaV1bal1ba10gPSBtUG9zc2libGVUcmFuc2xhdGlvbnNbaV1b
al1ba10uZmFsbGJhY2tDb252ZXJzaW9uOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KK30KKwordW5zaWduZWQgaW50IFZlcnRleEJ1ZmZlcjk6OnR5
cGVJbmRleChHTGVudW0gdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAg
Y2FzZSBHTF9CWVRFOiByZXR1cm4gMDsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURTogcmV0
dXJuIDE7CisgICAgICBjYXNlIEdMX1NIT1JUOiByZXR1cm4gMjsKKyAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlQ6IHJldHVybiAzOworICAgICAgY2FzZSBHTF9GSVhFRDogcmV0dXJuIDQ7Cisg
ICAgICBjYXNlIEdMX0ZMT0FUOiByZXR1cm4gNTsKKworICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsgcmV0dXJuIDU7CisgICAgfQorfQorCitjb25zdCBWZXJ0ZXhCdWZmZXI5OjpGb3JtYXRD
b252ZXJ0ZXIgJlZlcnRleEJ1ZmZlcjk6OmZvcm1hdENvbnZlcnRlcihjb25zdCBnbDo6VmVydGV4
QXR0cmlidXRlICZhdHRyaWJ1dGUpCit7CisgICAgcmV0dXJuIG1Gb3JtYXRDb252ZXJ0ZXJzW3R5
cGVJbmRleChhdHRyaWJ1dGUubVR5cGUpXVthdHRyaWJ1dGUubU5vcm1hbGl6ZWRdW2F0dHJpYnV0
ZS5tU2l6ZSAtIDFdOworfQorCitib29sIFZlcnRleEJ1ZmZlcjk6OnNwYWNlUmVxdWlyZWQoY29u
c3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBzdGQ6OnNpemVfdCBjb3VudCwgR0xzaXpl
aSBpbnN0YW5jZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
aW50ICpvdXRTcGFjZVJlcXVpcmVkKQoreworICAgIHVuc2lnbmVkIGludCBlbGVtZW50U2l6ZSA9
IGZvcm1hdENvbnZlcnRlcihhdHRyaWIpLm91dHB1dEVsZW1lbnRTaXplOworCisgICAgaWYgKGF0
dHJpYi5tQXJyYXlFbmFibGVkKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IGVsZW1lbnRD
b3VudCA9IDA7CisgICAgICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBhdHRyaWIubURpdmlzb3Ig
PT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZWxlbWVudENvdW50ID0gY291bnQ7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc3RhdGljX2Nh
c3Q8dW5zaWduZWQgaW50PihpbnN0YW5jZXMpIDwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZCBpbnQ+OjptYXgoKSAtIChhdHRyaWIubURpdmlzb3IgLSAxKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAvLyBSb3VuZCB1cAorICAgICAgICAgICAgICAgIGVsZW1lbnRDb3VudCA9
IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGluc3RhbmNlcykgKyAoYXR0cmliLm1EaXZpc29y
IC0gMSkpIC8gYXR0cmliLm1EaXZpc29yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVsZW1lbnRDb3VudCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGludD4oaW5zdGFuY2VzKSAvIGF0dHJpYi5tRGl2aXNvcjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChlbGVtZW50U2l6ZSA8PSBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpIC8gZWxlbWVudENvdW50KQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAob3V0U3BhY2VSZXF1aXJlZCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAqb3V0U3BhY2VSZXF1aXJlZCA9IGVsZW1lbnRTaXplICogZWxlbWVudENvdW50
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGVs
ZW1lbnRTaXplID0gNDsKKyAgICAgICAgaWYgKG91dFNwYWNlUmVxdWlyZWQpCisgICAgICAgIHsK
KyAgICAgICAgICAgICpvdXRTcGFjZVJlcXVpcmVkID0gZWxlbWVudFNpemUgKiA0OworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleEJ1
ZmZlcjkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9WZXJ0ZXhCdWZmZXI5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmY4ODExN2JkYTI1MGVjOTExNzA2N2I4
YTY4YTg0NGQ2NDBlMzBiMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmgKQEAgLTAsMCAr
MSw5MSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVmVydGV4QnVmZmVyOS5oOiBEZWZpbmVz
IHRoZSBEM0Q5IFZlcnRleEJ1ZmZlciBpbXBsZW1lbnRhdGlvbi4KKworI2lmbmRlZiBMSUJHTEVT
VjJfUkVOREVSRVJfVkVSVEVYQlVGRkVSOV9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJf
VkVSVEVYQlVGRkVSOV9IXworCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1
ZmZlci5oIgorCituYW1lc3BhY2UgcngKK3sKK2NsYXNzIFJlbmRlcmVyOTsKKworY2xhc3MgVmVy
dGV4QnVmZmVyOSA6IHB1YmxpYyBWZXJ0ZXhCdWZmZXIKK3sKKyAgcHVibGljOgorICAgIGV4cGxp
Y2l0IFZlcnRleEJ1ZmZlcjkocng6OlJlbmRlcmVyOSAqY29uc3QgcmVuZGVyZXIpOworICAgIHZp
cnR1YWwgflZlcnRleEJ1ZmZlcjkoKTsKKworICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplKHVu
c2lnbmVkIGludCBzaXplLCBib29sIGR5bmFtaWNVc2FnZSk7CisKKyAgICBzdGF0aWMgVmVydGV4
QnVmZmVyOSAqbWFrZVZlcnRleEJ1ZmZlcjkoVmVydGV4QnVmZmVyICp2ZXJ0ZXhCdWZmZXIpOwor
CisgICAgdmlydHVhbCBib29sIHN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4
QXR0cmlidXRlICZhdHRyaWIsIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGlu
c3RhbmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCBvZmZzZXQpOworICAgIHZpcnR1YWwgYm9vbCBzdG9yZVJhd0RhdGEoY29uc3Qgdm9pZCog
ZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBvZmZzZXQpOworCisgICAgdmly
dHVhbCBib29sIGdldFNwYWNlUmVxdWlyZWQoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0
cmliLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgdW5zaWduZWQgaW50ICpvdXRT
cGFjZVJlcXVpcmVkKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0NvbnZlcnNp
b24oY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdDsKKworICAgIHVuc2ln
bmVkIGludCBnZXRWZXJ0ZXhTaXplKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikg
Y29uc3Q7CisgICAgRDNEREVDTFRZUEUgZ2V0RGVjbFR5cGUoY29uc3QgZ2w6OlZlcnRleEF0dHJp
YnV0ZSAmYXR0cmliKSBjb25zdDsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldEJ1ZmZl
clNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0QnVmZmVyU2l6ZSh1bnNpZ25lZCBp
bnQgc2l6ZSk7CisgICAgdmlydHVhbCBib29sIGRpc2NhcmQoKTsKKworICAgIElEaXJlY3QzRFZl
cnRleEJ1ZmZlcjkgKmdldEJ1ZmZlcigpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKFZlcnRleEJ1ZmZlcjkpOworCisgICAgcng6OlJlbmRlcmVyOSAq
Y29uc3QgbVJlbmRlcmVyOworCisgICAgSURpcmVjdDNEVmVydGV4QnVmZmVyOSAqbVZlcnRleEJ1
ZmZlcjsKKyAgICB1bnNpZ25lZCBpbnQgbUJ1ZmZlclNpemU7CisgICAgYm9vbCBtRHluYW1pY1Vz
YWdlOworCisgICAgLy8gQXR0cmlidXRlIGZvcm1hdCBjb252ZXJzaW9uCisgICAgZW51bSB7IE5V
TV9HTF9WRVJURVhfQVRUUklCX1RZUEVTID0gNiB9OworCisgICAgc3RydWN0IEZvcm1hdENvbnZl
cnRlcgorICAgIHsKKyAgICAgICAgYm9vbCBpZGVudGl0eTsKKyAgICAgICAgc3RkOjpzaXplX3Qg
b3V0cHV0RWxlbWVudFNpemU7CisgICAgICAgIHZvaWQgKCpjb252ZXJ0QXJyYXkpKGNvbnN0IHZv
aWQgKmluLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90IG4sIHZvaWQgKm91dCk7Cisg
ICAgICAgIEQzRERFQ0xUWVBFIGQzZERlY2xUeXBlOworICAgIH07CisKKyAgICBzdGF0aWMgYm9v
bCBtVHJhbnNsYXRpb25zSW5pdGlhbGl6ZWQ7CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVRy
YW5zbGF0aW9ucyhEV09SRCBkZWNsVHlwZXMpOworCisgICAgLy8gW0dMIHR5cGVzIGFzIGVudW1l
cmF0ZWQgYnkgdHlwZUluZGV4KCldW25vcm1hbGl6ZWRdW3NpemUgLSAxXQorICAgIHN0YXRpYyBG
b3JtYXRDb252ZXJ0ZXIgbUZvcm1hdENvbnZlcnRlcnNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQ
RVNdWzJdWzRdOworCisgICAgc3RydWN0IFRyYW5zbGF0aW9uRGVzY3JpcHRpb24KKyAgICB7Cisg
ICAgICAgIERXT1JEIGNhcHNGbGFnOworICAgICAgICBGb3JtYXRDb252ZXJ0ZXIgcHJlZmVycmVk
Q29udmVyc2lvbjsKKyAgICAgICAgRm9ybWF0Q29udmVydGVyIGZhbGxiYWNrQ29udmVyc2lvbjsK
KyAgICB9OworCisgICAgLy8gVGhpcyB0YWJsZSBpcyB1c2VkIHRvIGdlbmVyYXRlIG1Gb3JtYXRD
b252ZXJ0ZXJzLgorICAgIC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRleCgp
XVtub3JtYWxpemVkXVtzaXplIC0gMV0KKyAgICBzdGF0aWMgY29uc3QgVHJhbnNsYXRpb25EZXNj
cmlwdGlvbiBtUG9zc2libGVUcmFuc2xhdGlvbnNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVNd
WzJdWzRdOworCisgICAgc3RhdGljIHVuc2lnbmVkIGludCB0eXBlSW5kZXgoR0xlbnVtIHR5cGUp
OworICAgIHN0YXRpYyBjb25zdCBGb3JtYXRDb252ZXJ0ZXIgJmZvcm1hdENvbnZlcnRlcihjb25z
dCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpOworCisgICAgc3RhdGljIGJvb2wgc3Bh
Y2VSZXF1aXJlZChjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIHN0ZDo6c2l6ZV90
IGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGludCAqb3V0U3BhY2VSZXF1aXJlZCk7Cit9OworCit9CisKKyNlbmRpZiAvLyBM
SUJHTEVTVjJfUkVOREVSRVJfVkVSVEVYQlVGRkVSOV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleERlY2xhcmF0
aW9uQ2FjaGUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L1ZlcnRleERlY2xhcmF0aW9uQ2FjaGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU1YzhhMTQy
MzIxMWY4MzU4NjkzZjlmNjk4MjQ2MzgxYmQyNDhlNmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4RGVj
bGFyYXRpb25DYWNoZS5jcHAKQEAgLTAsMCArMSwyMTcgQEAKKyNpbmNsdWRlICJwcmVjb21waWxl
ZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFZlcnRleERlY2xhcmF0aW9uQ2FjaGUuY3BwOiBJbXBs
ZW1lbnRzIGEgaGVscGVyIGNsYXNzIHRvIGNvbnN0cnVjdCBhbmQgY2FjaGUgdmVydGV4IGRlY2xh
cmF0aW9ucy4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNk
OS9WZXJ0ZXhCdWZmZXI5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVy
dGV4RGVjbGFyYXRpb25DYWNoZS5oIgorCituYW1lc3BhY2UgcngKK3sKKworVmVydGV4RGVjbGFy
YXRpb25DYWNoZTo6VmVydGV4RGVjbGFyYXRpb25DYWNoZSgpIDogbU1heExydSgwKQoreworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkrKykK
KyAgICB7CisgICAgICAgIG1WZXJ0ZXhEZWNsQ2FjaGVbaV0udmVydGV4RGVjbGFyYXRpb24gPSBO
VUxMOworICAgICAgICBtVmVydGV4RGVjbENhY2hlW2ldLmxydUNvdW50ID0gMDsKKyAgICB9CisK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKKyAg
ICB7CisgICAgICAgIG1BcHBsaWVkVkJzW2ldLnNlcmlhbCA9IDA7CisgICAgfQorCisgICAgbUxh
c3RTZXRWRGVjbCA9IE5VTEw7CisgICAgbUluc3RhbmNpbmdFbmFibGVkID0gdHJ1ZTsKK30KKwor
VmVydGV4RGVjbGFyYXRpb25DYWNoZTo6flZlcnRleERlY2xhcmF0aW9uQ2FjaGUoKQoreworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkrKykK
KyAgICB7CisgICAgICAgIGlmIChtVmVydGV4RGVjbENhY2hlW2ldLnZlcnRleERlY2xhcmF0aW9u
KQorICAgICAgICB7CisgICAgICAgICAgICBtVmVydGV4RGVjbENhY2hlW2ldLnZlcnRleERlY2xh
cmF0aW9uLT5SZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0dMZW51bSBWZXJ0ZXhE
ZWNsYXJhdGlvbkNhY2hlOjphcHBseURlY2xhcmF0aW9uKElEaXJlY3QzRERldmljZTkgKmRldmlj
ZSwgVHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW10sIGdsOjpQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5LCBHTHNpemVpIGluc3RhbmNlcywgR0xzaXplaSAqcmVwZWF0RHJhdykKK3sK
KyAgICAqcmVwZWF0RHJhdyA9IDE7CisKKyAgICBpbnQgaW5kZXhlZEF0dHJpYnV0ZSA9IGdsOjpN
QVhfVkVSVEVYX0FUVFJJQlM7CisgICAgaW50IGluc3RhbmNlZEF0dHJpYnV0ZSA9IGdsOjpNQVhf
VkVSVEVYX0FUVFJJQlM7CisKKyAgICBpZiAoaW5zdGFuY2VzID4gMCkKKyAgICB7CisgICAgICAg
IC8vIEZpbmQgYW4gaW5kZXhlZCBhdHRyaWJ1dGUgdG8gYmUgbWFwcGVkIHRvIEQzRCBzdHJlYW0g
MAorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGkr
KykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uYWN0aXZlKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChpbmRleGVkQXR0cmlidXRlID09IGdsOjpN
QVhfVkVSVEVYX0FUVFJJQlMgJiYgYXR0cmlidXRlc1tpXS5kaXZpc29yID09IDApCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbmRleGVkQXR0cmlidXRlID0gaTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5zdGFuY2VkQXR0cmli
dXRlID09IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMgJiYgYXR0cmlidXRlc1tpXS5kaXZpc29yICE9
IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZWRBdHRy
aWJ1dGUgPSBpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaW5kZXhl
ZEF0dHJpYnV0ZSAhPSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTICYmIGluc3RhbmNlZEF0dHJpYnV0
ZSAhPSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICAgICAgICAgICAgICBicmVhazsg
ICAvLyBGb3VuZCBib3RoIGFuIGluZGV4ZWQgYW5kIGluc3RhbmNlZCBhdHRyaWJ1dGUKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbmRleGVkQXR0cmlidXRlID09IGds
OjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHTF9J
TlZBTElEX09QRVJBVElPTjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEQzRFZFUlRFWEVMRU1F
TlQ5IGVsZW1lbnRzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlMgKyAxXTsKKyAgICBEM0RWRVJURVhF
TEVNRU5UOSAqZWxlbWVudCA9ICZlbGVtZW50c1swXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGF0dHJp
YnV0ZXNbaV0uYWN0aXZlKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBEaXJlY3RseSBiaW5k
aW5nIHRoZSBzdG9yYWdlIGJ1ZmZlciBpcyBub3Qgc3VwcG9ydGVkIGZvciBkM2Q5CisgICAgICAg
ICAgICBBU1NFUlQoYXR0cmlidXRlc1tpXS5zdG9yYWdlID09IE5VTEwpOworCisgICAgICAgICAg
ICBpbnQgc3RyZWFtID0gaTsKKworICAgICAgICAgICAgaWYgKGluc3RhbmNlcyA+IDApCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gRHVlIHRvIGEgYnVnIG9uIEFUSSBjYXJkcyB3
ZSBjYW4ndCBlbmFibGUgaW5zdGFuY2luZyB3aGVuIG5vbmUgb2YgdGhlIGF0dHJpYnV0ZXMgYXJl
IGluc3RhbmNlZC4KKyAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2VkQXR0cmlidXRlID09IGds
OjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAqcmVwZWF0RHJhdyA9IGluc3RhbmNlczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGkgPT0gaW5kZXhlZEF0dHJpYnV0ZSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgc3RyZWFtID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChpID09IDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9IGluZGV4ZWRBdHRyaWJ1dGU7CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBVSU5UIGZyZXF1ZW5jeSA9IDE7
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRl
c1tpXS5kaXZpc29yID09IDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZyZXF1ZW5jeSA9IEQzRFNUUkVBTVNPVVJDRV9JTkRFWEVEREFUQSB8IGluc3Rh
bmNlczsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyZXF1ZW5jeSA9
IEQzRFNUUkVBTVNPVVJDRV9JTlNUQU5DRURBVEEgfCBhdHRyaWJ1dGVzW2ldLmRpdmlzb3I7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShzdHJlYW0sIGZyZXF1ZW5jeSk7Cisg
ICAgICAgICAgICAgICAgICAgIG1JbnN0YW5jaW5nRW5hYmxlZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBWZXJ0ZXhCdWZmZXI5ICp2ZXJ0
ZXhCdWZmZXIgPSBWZXJ0ZXhCdWZmZXI5OjptYWtlVmVydGV4QnVmZmVyOShhdHRyaWJ1dGVzW2ld
LnZlcnRleEJ1ZmZlcik7CisKKyAgICAgICAgICAgIGlmIChtQXBwbGllZFZCc1tzdHJlYW1dLnNl
cmlhbCAhPSBhdHRyaWJ1dGVzW2ldLnNlcmlhbCB8fAorICAgICAgICAgICAgICAgIG1BcHBsaWVk
VkJzW3N0cmVhbV0uc3RyaWRlICE9IGF0dHJpYnV0ZXNbaV0uc3RyaWRlIHx8CisgICAgICAgICAg
ICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5vZmZzZXQgIT0gYXR0cmlidXRlc1tpXS5vZmZzZXQp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2Uo
c3RyZWFtLCB2ZXJ0ZXhCdWZmZXItPmdldEJ1ZmZlcigpLCBhdHRyaWJ1dGVzW2ldLm9mZnNldCwg
YXR0cmlidXRlc1tpXS5zdHJpZGUpOworICAgICAgICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVh
bV0uc2VyaWFsID0gYXR0cmlidXRlc1tpXS5zZXJpYWw7CisgICAgICAgICAgICAgICAgbUFwcGxp
ZWRWQnNbc3RyZWFtXS5zdHJpZGUgPSBhdHRyaWJ1dGVzW2ldLnN0cmlkZTsKKyAgICAgICAgICAg
ICAgICBtQXBwbGllZFZCc1tzdHJlYW1dLm9mZnNldCA9IGF0dHJpYnV0ZXNbaV0ub2Zmc2V0Owor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbGVtZW50LT5TdHJlYW0gPSBzdHJlYW07Cisg
ICAgICAgICAgICBlbGVtZW50LT5PZmZzZXQgPSAwOworICAgICAgICAgICAgZWxlbWVudC0+VHlw
ZSA9IGF0dHJpYnV0ZXNbaV0uYXR0cmlidXRlLT5tQXJyYXlFbmFibGVkID8gdmVydGV4QnVmZmVy
LT5nZXREZWNsVHlwZSgqYXR0cmlidXRlc1tpXS5hdHRyaWJ1dGUpIDogRDNEREVDTFRZUEVfRkxP
QVQ0OworICAgICAgICAgICAgZWxlbWVudC0+TWV0aG9kID0gRDNEREVDTE1FVEhPRF9ERUZBVUxU
OworICAgICAgICAgICAgZWxlbWVudC0+VXNhZ2UgPSBEM0RERUNMVVNBR0VfVEVYQ09PUkQ7Cisg
ICAgICAgICAgICBlbGVtZW50LT5Vc2FnZUluZGV4ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2VtYW50
aWNJbmRleChpKTsKKyAgICAgICAgICAgIGVsZW1lbnQrKzsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBpbnN0YW5jZWRBdHRyaWJ1dGUgPT0gZ2w6Ok1BWF9W
RVJURVhfQVRUUklCUykKKyAgICB7CisgICAgICAgIGlmIChtSW5zdGFuY2luZ0VuYWJsZWQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9WRVJURVhf
QVRUUklCUzsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRldmljZS0+U2V0
U3RyZWFtU291cmNlRnJlcShpLCAxKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbUlu
c3RhbmNpbmdFbmFibGVkID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMg
Y29uc3QgRDNEVkVSVEVYRUxFTUVOVDkgZW5kID0gRDNEREVDTF9FTkQoKTsKKyAgICAqKGVsZW1l
bnQrKykgPSBlbmQ7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9WRVJURVhfREVDTF9D
QUNIRV9FTlRSSUVTOyBpKyspCisgICAgeworICAgICAgICBWZXJ0ZXhEZWNsQ2FjaGVFbnRyeSAq
ZW50cnkgPSAmbVZlcnRleERlY2xDYWNoZVtpXTsKKyAgICAgICAgaWYgKG1lbWNtcChlbnRyeS0+
Y2FjaGVkRWxlbWVudHMsIGVsZW1lbnRzLCAoZWxlbWVudCAtIGVsZW1lbnRzKSAqIHNpemVvZihE
M0RWRVJURVhFTEVNRU5UOSkpID09IDAgJiYgZW50cnktPnZlcnRleERlY2xhcmF0aW9uKQorICAg
ICAgICB7CisgICAgICAgICAgICBlbnRyeS0+bHJ1Q291bnQgPSArK21NYXhMcnU7CisgICAgICAg
ICAgICBpZihlbnRyeS0+dmVydGV4RGVjbGFyYXRpb24gIT0gbUxhc3RTZXRWRGVjbCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFZlcnRleERlY2xhcmF0aW9uKGVu
dHJ5LT52ZXJ0ZXhEZWNsYXJhdGlvbik7CisgICAgICAgICAgICAgICAgbUxhc3RTZXRWRGVjbCA9
IGVudHJ5LT52ZXJ0ZXhEZWNsYXJhdGlvbjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
cmV0dXJuIEdMX05PX0VSUk9SOworICAgICAgICB9CisgICAgfQorCisgICAgVmVydGV4RGVjbENh
Y2hlRW50cnkgKmxhc3RDYWNoZSA9IG1WZXJ0ZXhEZWNsQ2FjaGU7CisKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IE5VTV9WRVJURVhfREVDTF9DQUNIRV9FTlRSSUVTOyBpKyspCisgICAgeworICAg
ICAgICBpZiAobVZlcnRleERlY2xDYWNoZVtpXS5scnVDb3VudCA8IGxhc3RDYWNoZS0+bHJ1Q291
bnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxhc3RDYWNoZSA9ICZtVmVydGV4RGVjbENhY2hl
W2ldOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGxhc3RDYWNoZS0+dmVydGV4RGVjbGFy
YXRpb24gIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRp
b24tPlJlbGVhc2UoKTsKKyAgICAgICAgbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbiA9IE5V
TEw7CisgICAgICAgIC8vIG1MYXN0U2V0VkRlY2wgaXMgc2V0IHRvIHRoZSByZXBsYWNlbWVudCwg
c28gd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeQorICAgICAgICAvLyBhYm91dCBpdC4KKyAgICB9CisK
KyAgICBtZW1jcHkobGFzdENhY2hlLT5jYWNoZWRFbGVtZW50cywgZWxlbWVudHMsIChlbGVtZW50
IC0gZWxlbWVudHMpICogc2l6ZW9mKEQzRFZFUlRFWEVMRU1FTlQ5KSk7CisgICAgZGV2aWNlLT5D
cmVhdGVWZXJ0ZXhEZWNsYXJhdGlvbihlbGVtZW50cywgJmxhc3RDYWNoZS0+dmVydGV4RGVjbGFy
YXRpb24pOworICAgIGRldmljZS0+U2V0VmVydGV4RGVjbGFyYXRpb24obGFzdENhY2hlLT52ZXJ0
ZXhEZWNsYXJhdGlvbik7CisgICAgbUxhc3RTZXRWRGVjbCA9IGxhc3RDYWNoZS0+dmVydGV4RGVj
bGFyYXRpb247CisgICAgbGFzdENhY2hlLT5scnVDb3VudCA9ICsrbU1heExydTsKKworICAgIHJl
dHVybiBHTF9OT19FUlJPUjsKK30KKwordm9pZCBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjptYXJr
U3RhdGVEaXJ0eSgpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9B
VFRSSUJTOyBpKyspCisgICAgeworICAgICAgICBtQXBwbGllZFZCc1tpXS5zZXJpYWwgPSAwOwor
ICAgIH0KKworICAgIG1MYXN0U2V0VkRlY2wgPSBOVUxMOworICAgIG1JbnN0YW5jaW5nRW5hYmxl
ZCA9IHRydWU7ICAgLy8gRm9yY2VzIGl0IHRvIGJlIGRpc2FibGVkIHdoZW4gbm90IHVzZWQKK30K
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L1ZlcnRleERlY2xhcmF0aW9uQ2FjaGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uM2ZjMDI0YTliYWI0OGIxOWMwNmFiOTc1NzBlOGI1ZDU0ODcxMzE4Nwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmgKQEAgLTAsMCArMSw1OCBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKy8vIFZlcnRleERlY2xhcmF0aW9uQ2FjaGUuaDogRGVmaW5lcyBhIGhl
bHBlciBjbGFzcyB0byBjb25zdHJ1Y3QgYW5kIGNhY2hlIHZlcnRleCBkZWNsYXJhdGlvbnMuCisK
KyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX1ZFUlRFWERFQ0xBUkFUSU9OQ0FDSEVfSF8KKyNk
ZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1ZFUlRFWERFQ0xBUkFUSU9OQ0FDSEVfSF8KKworI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhEYXRhTWFuYWdlci5oIgorCituYW1lc3Bh
Y2UgZ2wKK3sKK2NsYXNzIFZlcnRleERhdGFNYW5hZ2VyOworfQorCituYW1lc3BhY2UgcngKK3sK
KworY2xhc3MgVmVydGV4RGVjbGFyYXRpb25DYWNoZQoreworICBwdWJsaWM6CisgICAgVmVydGV4
RGVjbGFyYXRpb25DYWNoZSgpOworICAgIH5WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKCk7CisKKyAg
ICBHTGVudW0gYXBwbHlEZWNsYXJhdGlvbihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIFRyYW5z
bGF0ZWRBdHRyaWJ1dGUgYXR0cmlidXRlc1tdLCBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSwgR0xzaXplaSBpbnN0YW5jZXMsIEdMc2l6ZWkgKnJlcGVhdERyYXcpOworCisgICAgdm9p
ZCBtYXJrU3RhdGVEaXJ0eSgpOworCisgIHByaXZhdGU6CisgICAgVUlOVCBtTWF4THJ1OworCisg
ICAgZW51bSB7IE5VTV9WRVJURVhfREVDTF9DQUNIRV9FTlRSSUVTID0gMzIgfTsKKworICAgIHN0
cnVjdCBWQkRhdGEKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBzZXJpYWw7CisgICAgICAg
IHVuc2lnbmVkIGludCBzdHJpZGU7CisgICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQ7CisgICAg
fTsKKworICAgIFZCRGF0YSBtQXBwbGllZFZCc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAg
ICBJRGlyZWN0M0RWZXJ0ZXhEZWNsYXJhdGlvbjkgKm1MYXN0U2V0VkRlY2w7CisgICAgYm9vbCBt
SW5zdGFuY2luZ0VuYWJsZWQ7CisKKyAgICBzdHJ1Y3QgVmVydGV4RGVjbENhY2hlRW50cnkKKyAg
ICB7CisgICAgICAgIEQzRFZFUlRFWEVMRU1FTlQ5IGNhY2hlZEVsZW1lbnRzW2dsOjpNQVhfVkVS
VEVYX0FUVFJJQlMgKyAxXTsKKyAgICAgICAgVUlOVCBscnVDb3VudDsKKyAgICAgICAgSURpcmVj
dDNEVmVydGV4RGVjbGFyYXRpb245ICp2ZXJ0ZXhEZWNsYXJhdGlvbjsKKyAgICB9IG1WZXJ0ZXhE
ZWNsQ2FjaGVbTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVNdOworfTsKKworfQorCisjZW5k
aWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1ZFUlRFWERFQ0xBUkFUSU9OQ0FDSEVfSF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
OS9yZW5kZXJlcjlfdXRpbHMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjdmMmZm
YjFkOWEzY2MzZmRhY2RmNDM3YzM1YmU0ZDU4YzdhODIxNgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5kZXJl
cjlfdXRpbHMuY3BwCkBAIC0wLDAgKzEsNTAwIEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIHJlbmRlcmVyOV91dGlscy5jcHA6IENvbnZlcnNpb24g
ZnVuY3Rpb25zIGFuZCBvdGhlciB1dGlsaXR5IHJvdXRpbmVzCisvLyBzcGVjaWZpYyB0byB0aGUg
RDNEOSByZW5kZXJlci4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRl
cmVyOV91dGlscy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9Db250ZXh0LmgiCisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKworbmFt
ZXNwYWNlIGdsX2QzZDkKK3sKKworRDNEQ01QRlVOQyBDb252ZXJ0Q29tcGFyaXNvbihHTGVudW0g
Y29tcGFyaXNvbikKK3sKKyAgICBEM0RDTVBGVU5DIGQzZENvbXAgPSBEM0RDTVBfQUxXQVlTOwor
ICAgIHN3aXRjaCAoY29tcGFyaXNvbikKKyAgICB7CisgICAgICBjYXNlIEdMX05FVkVSOiAgICBk
M2RDb21wID0gRDNEQ01QX05FVkVSOyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0FMV0FZ
UzogICBkM2RDb21wID0gRDNEQ01QX0FMV0FZUzsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X0xFU1M6ICAgICBkM2RDb21wID0gRDNEQ01QX0xFU1M7ICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX0xFUVVBTDogICBkM2RDb21wID0gRDNEQ01QX0xFU1NFUVVBTDsgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX0VRVUFMOiAgICBkM2RDb21wID0gRDNEQ01QX0VRVUFMOyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX0dSRUFURVI6ICBkM2RDb21wID0gRDNEQ01QX0dSRUFURVI7ICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0dFUVVBTDogICBkM2RDb21wID0gRDNEQ01QX0dSRUFU
RVJFUVVBTDsgYnJlYWs7CisgICAgICBjYXNlIEdMX05PVEVRVUFMOiBkM2RDb21wID0gRDNEQ01Q
X05PVEVRVUFMOyAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAg
IH0KKworICAgIHJldHVybiBkM2RDb21wOworfQorCitEM0RDT0xPUiBDb252ZXJ0Q29sb3IoZ2w6
OkNvbG9yIGNvbG9yKQoreworICAgIHJldHVybiBEM0RDT0xPUl9SR0JBKGdsOjp1bm9ybTw4Pihj
b2xvci5yZWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4Pihjb2xvci5n
cmVlbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNvbG9yLmJsdWUp
LAorICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4Pihjb2xvci5hbHBoYSkpOwor
fQorCitEM0RCTEVORCBDb252ZXJ0QmxlbmRGdW5jKEdMZW51bSBibGVuZCkKK3sKKyAgICBEM0RC
TEVORCBkM2RCbGVuZCA9IEQzREJMRU5EX1pFUk87CisKKyAgICBzd2l0Y2ggKGJsZW5kKQorICAg
IHsKKyAgICAgIGNhc2UgR0xfWkVSTzogICAgICAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQz
REJMRU5EX1pFUk87ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FOiAgICAgICAg
ICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX09ORTsgICAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfU1JDX0NPTE9SOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJM
RU5EX1NSQ0NPTE9SOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19D
T0xPUjogICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVlNSQ0NPTE9SOyAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfRFNUX0NPTE9SOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5E
X0RFU1RDT0xPUjsgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9DT0xP
UjogICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVkRFU1RDT0xPUjsgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfU1JDX0FMUEhBOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX1NS
Q0FMUEhBOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19BTFBIQTog
ICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVlNSQ0FMUEhBOyAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfRFNUX0FMUEhBOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0RFU1RB
TFBIQTsgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9BTFBIQTogICAg
ICBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVkRFU1RBTFBIQTsgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfQ09OU1RBTlRfQ09MT1I6ICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0JMRU5ERkFD
VE9SOyAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SOiBk
M2RCbGVuZCA9IEQzREJMRU5EX0lOVkJMRU5ERkFDVE9SOyBicmVhazsKKyAgICAgIGNhc2UgR0xf
Q09OU1RBTlRfQUxQSEE6ICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0JMRU5ERkFDVE9S
OyAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBOiBkM2RC
bGVuZCA9IEQzREJMRU5EX0lOVkJMRU5ERkFDVE9SOyBicmVhazsKKyAgICAgIGNhc2UgR0xfU1JD
X0FMUEhBX1NBVFVSQVRFOiAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX1NSQ0FMUEhBU0FUOyAg
ICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0
dXJuIGQzZEJsZW5kOworfQorCitEM0RCTEVORE9QIENvbnZlcnRCbGVuZE9wKEdMZW51bSBibGVu
ZE9wKQoreworICAgIEQzREJMRU5ET1AgZDNkQmxlbmRPcCA9IEQzREJMRU5ET1BfQUREOworCisg
ICAgc3dpdGNoIChibGVuZE9wKQorICAgIHsKKyAgICAgIGNhc2UgR0xfRlVOQ19BREQ6ICAgICAg
ICAgICAgICBkM2RCbGVuZE9wID0gRDNEQkxFTkRPUF9BREQ7ICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX0ZVTkNfU1VCVFJBQ1Q6ICAgICAgICAgZDNkQmxlbmRPcCA9IEQzREJMRU5ET1Bf
U1VCVFJBQ1Q7ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GVU5DX1JFVkVSU0VfU1VCVFJBQ1Q6
IGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX1JFVlNVQlRSQUNUOyBicmVhazsKKyAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIGQzZEJsZW5kT3A7Cit9CisK
K0QzRFNURU5DSUxPUCBDb252ZXJ0U3RlbmNpbE9wKEdMZW51bSBzdGVuY2lsT3ApCit7CisgICAg
RDNEU1RFTkNJTE9QIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9LRUVQOworCisgICAgc3dp
dGNoIChzdGVuY2lsT3ApCisgICAgeworICAgICAgY2FzZSBHTF9aRVJPOiAgICAgIGQzZFN0ZW5j
aWxPcCA9IEQzRFNURU5DSUxPUF9aRVJPOyAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfS0VFUDog
ICAgICBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfS0VFUDsgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX1JFUExBQ0U6ICAgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX1JFUExBQ0U7IGJy
ZWFrOworICAgICAgY2FzZSBHTF9JTkNSOiAgICAgIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxP
UF9JTkNSU0FUOyBicmVhazsKKyAgICAgIGNhc2UgR0xfREVDUjogICAgICBkM2RTdGVuY2lsT3Ag
PSBEM0RTVEVOQ0lMT1BfREVDUlNBVDsgYnJlYWs7CisgICAgICBjYXNlIEdMX0lOVkVSVDogICAg
ZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0lOVkVSVDsgIGJyZWFrOworICAgICAgY2FzZSBH
TF9JTkNSX1dSQVA6IGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9JTkNSOyAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfREVDUl9XUkFQOiBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfREVD
UjsgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAg
IHJldHVybiBkM2RTdGVuY2lsT3A7Cit9CisKK0QzRFRFWFRVUkVBRERSRVNTIENvbnZlcnRUZXh0
dXJlV3JhcChHTGVudW0gd3JhcCkKK3sKKyAgICBEM0RURVhUVVJFQUREUkVTUyBkM2RXcmFwID0g
RDNEVEFERFJFU1NfV1JBUDsKKworICAgIHN3aXRjaCAod3JhcCkKKyAgICB7CisgICAgICBjYXNl
IEdMX1JFUEVBVDogICAgICAgICAgICBkM2RXcmFwID0gRDNEVEFERFJFU1NfV1JBUDsgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfQ0xBTVBfVE9fRURHRTogICAgIGQzZFdyYXAgPSBEM0RUQUREUkVT
U19DTEFNUDsgIGJyZWFrOworICAgICAgY2FzZSBHTF9NSVJST1JFRF9SRVBFQVQ6ICAgZDNkV3Jh
cCA9IEQzRFRBRERSRVNTX01JUlJPUjsgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOworICAgIH0KKworICAgIHJldHVybiBkM2RXcmFwOworfQorCitEM0RDVUxMIENvbnZlcnRD
dWxsTW9kZShHTGVudW0gY3VsbEZhY2UsIEdMZW51bSBmcm9udEZhY2UpCit7CisgICAgRDNEQ1VM
TCBjdWxsID0gRDNEQ1VMTF9DQ1c7CisgICAgc3dpdGNoIChjdWxsRmFjZSkKKyAgICB7CisgICAg
ICBjYXNlIEdMX0ZST05UOgorICAgICAgICBjdWxsID0gKGZyb250RmFjZSA9PSBHTF9DQ1cgPyBE
M0RDVUxMX0NXIDogRDNEQ1VMTF9DQ1cpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
QkFDSzoKKyAgICAgICAgY3VsbCA9IChmcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEQ1VMTF9DQ1cg
OiBEM0RDVUxMX0NXKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZST05UX0FORF9C
QUNLOgorICAgICAgICBjdWxsID0gRDNEQ1VMTF9OT05FOyAvLyBjdWxsaW5nIHdpbGwgYmUgaGFu
ZGxlZCBkdXJpbmcgZHJhdworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIGN1bGw7Cit9CisKK0QzRENVQkVNQVBfRkFDRVMg
Q29udmVydEN1YmVGYWNlKEdMZW51bSBjdWJlRmFjZSkKK3sKKyAgICBEM0RDVUJFTUFQX0ZBQ0VT
IGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfUE9TSVRJVkVfWDsKKworICAgIHN3aXRjaCAoY3ViZUZh
Y2UpCisgICAgeworICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Cisg
ICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfUE9TSVRJVkVfWDsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICAgICAgZmFj
ZSA9IEQzRENVQkVNQVBfRkFDRV9ORUdBVElWRV9YOworICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgICAgICBmYWNlID0gRDNEQ1VC
RU1BUF9GQUNFX1BPU0lUSVZFX1k7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhU
VVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0Vf
TkVHQVRJVkVfWTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWjoKKyAgICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9QT1NJVElWRV9a
OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9aOgorICAgICAgICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX05FR0FUSVZFX1o7CisgICAgICAg
IGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1
cm4gZmFjZTsKK30KKworRFdPUkQgQ29udmVydENvbG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVl
biwgYm9vbCBibHVlLCBib29sIGFscGhhKQoreworICAgIHJldHVybiAocmVkICAgPyBEM0RDT0xP
UldSSVRFRU5BQkxFX1JFRCAgIDogMCkgfAorICAgICAgICAgICAoZ3JlZW4gPyBEM0RDT0xPUldS
SVRFRU5BQkxFX0dSRUVOIDogMCkgfAorICAgICAgICAgICAoYmx1ZSAgPyBEM0RDT0xPUldSSVRF
RU5BQkxFX0JMVUUgIDogMCkgfAorICAgICAgICAgICAoYWxwaGEgPyBEM0RDT0xPUldSSVRFRU5B
QkxFX0FMUEhBIDogMCk7Cit9CisKK0QzRFRFWFRVUkVGSUxURVJUWVBFIENvbnZlcnRNYWdGaWx0
ZXIoR0xlbnVtIG1hZ0ZpbHRlciwgZmxvYXQgbWF4QW5pc290cm9weSkKK3sKKyAgICBpZiAobWF4
QW5pc290cm9weSA+IDEuMGYpCisgICAgeworICAgICAgICByZXR1cm4gRDNEVEVYRl9BTklTT1RS
T1BJQzsKKyAgICB9CisKKyAgICBEM0RURVhUVVJFRklMVEVSVFlQRSBkM2RNYWdGaWx0ZXIgPSBE
M0RURVhGX1BPSU5UOworICAgIHN3aXRjaCAobWFnRmlsdGVyKQorICAgIHsKKyAgICAgIGNhc2Ug
R0xfTkVBUkVTVDogZDNkTWFnRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9MSU5FQVI6ICBkM2RNYWdGaWx0ZXIgPSBEM0RURVhGX0xJTkVBUjsgYnJlYWs7Cisg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBkM2RNYWdG
aWx0ZXI7Cit9CisKK3ZvaWQgQ29udmVydE1pbkZpbHRlcihHTGVudW0gbWluRmlsdGVyLCBEM0RU
RVhUVVJFRklMVEVSVFlQRSAqZDNkTWluRmlsdGVyLCBEM0RURVhUVVJFRklMVEVSVFlQRSAqZDNk
TWlwRmlsdGVyLCBmbG9hdCBtYXhBbmlzb3Ryb3B5KQoreworICAgIHN3aXRjaCAobWluRmlsdGVy
KQorICAgIHsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVDoKKyAgICAgICAgKmQzZE1pbkZpbHRlciA9
IEQzRFRFWEZfUE9JTlQ7CisgICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX05PTkU7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MSU5FQVI6CisgICAgICAgICpkM2RNaW5GaWx0
ZXIgPSBEM0RURVhGX0xJTkVBUjsKKyAgICAgICAgKmQzZE1pcEZpbHRlciA9IEQzRFRFWEZfTk9O
RTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Q6
CisgICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX1BPSU5UOworICAgICAgICAqZDNkTWlw
RmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xJ
TkVBUl9NSVBNQVBfTkVBUkVTVDoKKyAgICAgICAgKmQzZE1pbkZpbHRlciA9IEQzRFRFWEZfTElO
RUFSOworICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjoKKyAgICAgICAgKmQzZE1p
bkZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7CisgICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhG
X0xJTkVBUjsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTElO
RUFSOgorICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9MSU5FQVI7CisgICAgICAgICpk
M2RNaXBGaWx0ZXIgPSBEM0RURVhGX0xJTkVBUjsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZh
dWx0OgorICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKKyAgICAgICAgKmQz
ZE1pcEZpbHRlciA9IEQzRFRFWEZfTk9ORTsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9
CisKKyAgICBpZiAobWF4QW5pc290cm9weSA+IDEuMGYpCisgICAgeworICAgICAgICAqZDNkTWlu
RmlsdGVyID0gRDNEVEVYRl9BTklTT1RST1BJQzsKKyAgICB9Cit9CisKK0QzREZPUk1BVCBDb252
ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdMZW51bSBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3Jt
YXQpCisgICAgeworICAgICAgY2FzZSBHTF9OT05FOiAgICAgICAgICAgICAgICAgcmV0dXJuIEQz
REZNVF9OVUxMOworICAgICAgY2FzZSBHTF9SR0JBNDoKKyAgICAgIGNhc2UgR0xfUkdCNV9BMToK
KyAgICAgIGNhc2UgR0xfUkdCQThfT0VTOiAgICAgICAgICAgIHJldHVybiBEM0RGTVRfQThSOEc4
Qjg7CisgICAgICBjYXNlIEdMX1JHQjU2NTogICAgICAgICAgICAgICByZXR1cm4gRDNERk1UX1I1
RzZCNTsKKyAgICAgIGNhc2UgR0xfUkdCOF9PRVM6ICAgICAgICAgICAgIHJldHVybiBEM0RGTVRf
WDhSOEc4Qjg7CisgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgorICAgICAgY2FzZSBH
TF9TVEVOQ0lMX0lOREVYODogICAgICAgCisgICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhf
T0VTOiByZXR1cm4gRDNERk1UX0QyNFM4OworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsg
ICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKKyAgICB9Cit9CisKK0QzRE1VTFRJU0FNUExF
X1RZUEUgR2V0TXVsdGlzYW1wbGVUeXBlRnJvbVNhbXBsZXMoR0xzaXplaSBzYW1wbGVzKQorewor
ICAgIGlmIChzYW1wbGVzIDw9IDEpCisgICAgICAgIHJldHVybiBEM0RNVUxUSVNBTVBMRV9OT05F
OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIChEM0RNVUxUSVNBTVBMRV9UWVBFKXNhbXBsZXM7
Cit9CisKK30KKworbmFtZXNwYWNlIGQzZDlfZ2wKK3sKKwordW5zaWduZWQgaW50IEdldFN0ZW5j
aWxTaXplKEQzREZPUk1BVCBzdGVuY2lsRm9ybWF0KQoreworICAgIGlmIChzdGVuY2lsRm9ybWF0
ID09IEQzREZNVF9JTlRaKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDg7CisgICAgfQorICAgIHN3
aXRjaChzdGVuY2lsRm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRDNERk1UX0QyNEZTODoKKyAg
ICAgIGNhc2UgRDNERk1UX0QyNFM4OgorICAgICAgICByZXR1cm4gODsKKyAgICAgIGNhc2UgRDNE
Rk1UX0QyNFg0UzQ6CisgICAgICAgIHJldHVybiA0OworICAgICAgY2FzZSBEM0RGTVRfRDE1UzE6
CisgICAgICAgIHJldHVybiAxOworICAgICAgY2FzZSBEM0RGTVRfRDE2X0xPQ0tBQkxFOgorICAg
ICAgY2FzZSBEM0RGTVRfRDMyOgorICAgICAgY2FzZSBEM0RGTVRfRDI0WDg6CisgICAgICBjYXNl
IEQzREZNVF9EMzJGX0xPQ0tBQkxFOgorICAgICAgY2FzZSBEM0RGTVRfRDE2OgorICAgICAgICBy
ZXR1cm4gMDsKKyAgICAvL2Nhc2UgRDNERk1UX0QzMl9MT0NLQUJMRTogIHJldHVybiAwOyAgIC8v
IERpcmVjdFggOUV4IG9ubHkKKyAgICAvL2Nhc2UgRDNERk1UX1M4X0xPQ0tBQkxFOiAgIHJldHVy
biA4OyAgIC8vIERpcmVjdFggOUV4IG9ubHkKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biAwOworICAgIH0KK30KKwordW5zaWduZWQgaW50IEdldEFscGhhU2l6ZShEM0RGT1JNQVQgY29s
b3JGb3JtYXQpCit7CisgICAgc3dpdGNoIChjb2xvckZvcm1hdCkKKyAgICB7CisgICAgICBjYXNl
IEQzREZNVF9BMTZCMTZHMTZSMTZGOgorICAgICAgICByZXR1cm4gMTY7CisgICAgICBjYXNlIEQz
REZNVF9BMzJCMzJHMzJSMzJGOgorICAgICAgICByZXR1cm4gMzI7CisgICAgICBjYXNlIEQzREZN
VF9BMlIxMEcxMEIxMDoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgICBjYXNlIEQzREZNVF9BOFI4
RzhCODoKKyAgICAgICAgcmV0dXJuIDg7CisgICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKKyAg
ICAgICAgcmV0dXJuIDE7CisgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKKyAgICAgIGNhc2Ug
RDNERk1UX1I1RzZCNToKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gMDsKKyAgICB9Cit9CisKK0dMc2l6ZWkgR2V0U2FtcGxlc0Zyb21NdWx0aXNhbXBs
ZVR5cGUoRDNETVVMVElTQU1QTEVfVFlQRSB0eXBlKQoreworICAgIGlmICh0eXBlID09IEQzRE1V
TFRJU0FNUExFX05PTk1BU0tBQkxFKQorICAgICAgICByZXR1cm4gMDsKKyAgICBlbHNlCisgICAg
ICAgIHJldHVybiB0eXBlOworfQorCitib29sIElzRm9ybWF0Q2hhbm5lbEVxdWl2YWxlbnQoRDNE
Rk9STUFUIGQzZGZvcm1hdCwgR0xlbnVtIGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGQzZGZvcm1h
dCkKKyAgICB7CisgICAgICBjYXNlIEQzREZNVF9MODoKKyAgICAgICAgcmV0dXJuIChmb3JtYXQg
PT0gR0xfTFVNSU5BTkNFKTsKKyAgICAgIGNhc2UgRDNERk1UX0E4TDg6CisgICAgICAgIHJldHVy
biAoZm9ybWF0ID09IEdMX0xVTUlOQU5DRV9BTFBIQSk7CisgICAgICBjYXNlIEQzREZNVF9EWFQx
OgorICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQx
X0VYVCB8fCBmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCk7CisgICAg
ICBjYXNlIEQzREZNVF9EWFQzOgorICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9DT01QUkVT
U0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFKTsKKyAgICAgIGNhc2UgRDNERk1UX0RYVDU6CisgICAg
ICAgIHJldHVybiAoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEUp
OworICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6CisgICAgICBjYXNlIEQzREZNVF9BMTZCMTZH
MTZSMTZGOgorICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKKyAgICAgICAgcmV0dXJu
IChmb3JtYXQgPT0gR0xfUkdCQSB8fCBmb3JtYXQgPT0gR0xfQkdSQV9FWFQpOworICAgICAgY2Fz
ZSBEM0RGTVRfWDhSOEc4Qjg6CisgICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX1JHQik7Cisg
ICAgICBkZWZhdWx0OgorICAgICAgICBpZiAoZDNkZm9ybWF0ID09IEQzREZNVF9JTlRaICYmIGds
OjpJc0RlcHRoVGV4dHVyZShmb3JtYXQpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK0dMZW51bSBDb252ZXJ0QmFja0J1ZmZlckZv
cm1hdChEM0RGT1JNQVQgZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsKKyAg
ICAgIGNhc2UgRDNERk1UX0E0UjRHNEI0OiByZXR1cm4gR0xfUkdCQTQ7CisgICAgICBjYXNlIEQz
REZNVF9BOFI4RzhCODogcmV0dXJuIEdMX1JHQkE4X09FUzsKKyAgICAgIGNhc2UgRDNERk1UX0Ex
UjVHNUI1OiByZXR1cm4gR0xfUkdCNV9BMTsKKyAgICAgIGNhc2UgRDNERk1UX1I1RzZCNTogICBy
ZXR1cm4gR0xfUkdCNTY1OworICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6IHJldHVybiBHTF9S
R0I4X09FUzsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQor
CisgICAgcmV0dXJuIEdMX1JHQkE0OworfQorCitHTGVudW0gQ29udmVydERlcHRoU3RlbmNpbEZv
cm1hdChEM0RGT1JNQVQgZm9ybWF0KQoreworICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lOVFop
CisgICAgeworICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7CisgICAgfQor
ICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRDNERk1UX0QxNjoKKyAgICAg
IGNhc2UgRDNERk1UX0QyNFg4OgorICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UMTY7
CisgICAgICBjYXNlIEQzREZNVF9EMjRTODoKKyAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RF
TkNJTDhfT0VTOworICAgICAgY2FzZSBEM0RGTVRfVU5LTk9XTjoKKyAgICAgICAgcmV0dXJuIEdM
X05PTkU7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKwor
ICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKK30KKworR0xlbnVtIENvbnZlcnRS
ZW5kZXJUYXJnZXRGb3JtYXQoRDNERk9STUFUIGZvcm1hdCkKK3sKKyAgICBpZiAoZm9ybWF0ID09
IEQzREZNVF9JTlRaKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhf
T0VTOworICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNl
IEQzREZNVF9BNFI0RzRCNDogcmV0dXJuIEdMX1JHQkE0OworICAgICAgY2FzZSBEM0RGTVRfQThS
OEc4Qjg6IHJldHVybiBHTF9SR0JBOF9PRVM7CisgICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNTog
cmV0dXJuIEdMX1JHQjVfQTE7CisgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6ICAgcmV0dXJuIEdM
X1JHQjU2NTsKKyAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OiByZXR1cm4gR0xfUkdCOF9PRVM7
CisgICAgICBjYXNlIEQzREZNVF9EMTY6CisgICAgICBjYXNlIEQzREZNVF9EMjRYODoKKyAgICAg
ICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2OworICAgICAgY2FzZSBEM0RGTVRfRDI0Uzg6
CisgICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKKyAgICAgIGNhc2UgRDNE
Rk1UX1VOS05PV046CisgICAgICAgIHJldHVybiBHTF9OT05FOworICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfUkdCQTQ7Cit9CisK
K0dMZW51bSBHZXRFcXVpdmFsZW50Rm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpCit7CisgICAgaWYg
KGZvcm1hdCA9PSBEM0RGTVRfSU5UWikKKyAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJ
TDhfT0VTOworICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX05VTEwpCisgICAgICAgIHJldHVybiBH
TF9OT05FOworCisgICAgc3dpdGNoIChmb3JtYXQpCisgICAgeworICAgICAgY2FzZSBEM0RGTVRf
QTRSNEc0QjQ6ICAgICAgICAgICAgIHJldHVybiBHTF9SR0JBNDsKKyAgICAgIGNhc2UgRDNERk1U
X0E4UjhHOEI4OiAgICAgICAgICAgICByZXR1cm4gR0xfUkdCQThfT0VTOworICAgICAgY2FzZSBE
M0RGTVRfQTFSNUc1QjU6ICAgICAgICAgICAgIHJldHVybiBHTF9SR0I1X0ExOworICAgICAgY2Fz
ZSBEM0RGTVRfUjVHNkI1OiAgICAgICAgICAgICAgIHJldHVybiBHTF9SR0I1NjU7CisgICAgICBj
YXNlIEQzREZNVF9YOFI4RzhCODogICAgICAgICAgICAgcmV0dXJuIEdMX1JHQjhfT0VTOworICAg
ICAgY2FzZSBEM0RGTVRfRDE2OiAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9ERVBUSF9DT01Q
T05FTlQxNjsKKyAgICAgIGNhc2UgRDNERk1UX0QyNFM4OiAgICAgICAgICAgICAgICByZXR1cm4g
R0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7CisgICAgICBjYXNlIEQzREZNVF9VTktOT1dOOiAgICAg
ICAgICAgICAgcmV0dXJuIEdMX05PTkU7CisgICAgICBjYXNlIEQzREZNVF9EWFQxOiAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOworICAgICAg
Y2FzZSBEM0RGTVRfRFhUMzogICAgICAgICAgICAgICAgIHJldHVybiBHTF9DT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQzX0FOR0xFOworICAgICAgY2FzZSBEM0RGTVRfRFhUNTogICAgICAgICAgICAg
ICAgIHJldHVybiBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOworICAgICAgY2Fz
ZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjogICAgICAgIHJldHVybiBHTF9SR0JBMzJGX0VYVDsKKyAg
ICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6ICAgICAgICByZXR1cm4gR0xfUkdCQTE2Rl9F
WFQ7CisgICAgICBjYXNlIEQzREZNVF9MODogICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0xV
TUlOQU5DRThfRVhUOworICAgICAgY2FzZSBEM0RGTVRfQThMODogICAgICAgICAgICAgICAgIHJl
dHVybiBHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQ7CisgICAgICBkZWZhdWx0OiAgICAgICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIEdMX05PTkU7CisgICAgfQorfQorCit9
CisKK25hbWVzcGFjZSBkM2Q5Cit7CisKK2Jvb2wgSXNDb21wcmVzc2VkRm9ybWF0KEQzREZPUk1B
VCBzdXJmYWNlRm9ybWF0KQoreworICAgIHN3aXRjaChzdXJmYWNlRm9ybWF0KQorICAgIHsKKyAg
ICAgIGNhc2UgRDNERk1UX0RYVDE6CisgICAgICBjYXNlIEQzREZNVF9EWFQyOgorICAgICAgY2Fz
ZSBEM0RGTVRfRFhUMzoKKyAgICAgIGNhc2UgRDNERk1UX0RYVDQ6CisgICAgICBjYXNlIEQzREZN
VF9EWFQ1OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3NpemVfdCBDb21wdXRlUm93U2l6ZShEM0RGT1JNQVQg
Zm9ybWF0LCB1bnNpZ25lZCBpbnQgd2lkdGgpCit7CisgICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRf
SU5UWikKKyAgICB7CisgICAgICAgIHJldHVybiA0ICogd2lkdGg7CisgICAgfQorICAgIHN3aXRj
aCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRDNERk1UX0w4OgorICAgICAgICAgIHJldHVy
biAxICogd2lkdGg7CisgICAgICBjYXNlIEQzREZNVF9BOEw4OgorICAgICAgICAgIHJldHVybiAy
ICogd2lkdGg7CisgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKKyAgICAgIGNhc2UgRDNERk1U
X0E4UjhHOEI4OgorICAgICAgICByZXR1cm4gNCAqIHdpZHRoOworICAgICAgY2FzZSBEM0RGTVRf
QTE2QjE2RzE2UjE2RjoKKyAgICAgICAgcmV0dXJuIDggKiB3aWR0aDsKKyAgICAgIGNhc2UgRDNE
Rk1UX0EzMkIzMkczMlIzMkY6CisgICAgICAgIHJldHVybiAxNiAqIHdpZHRoOworICAgICAgY2Fz
ZSBEM0RGTVRfRFhUMToKKyAgICAgICAgcmV0dXJuIDggKiAoKHdpZHRoICsgMykgLyA0KTsKKyAg
ICAgIGNhc2UgRDNERk1UX0RYVDM6CisgICAgICBjYXNlIEQzREZNVF9EWFQ1OgorICAgICAgICBy
ZXR1cm4gMTYgKiAoKHdpZHRoICsgMykgLyA0KTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3Jl
bmRlcmVyOV91dGlscy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmNmNkZjFlYTY1NjZm
OTEwYTk2ZWUyNTExNGI3YzQ4ZWM4Mzk0NWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxz
LmgKQEAgLTAsMCArMSw3NCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gcmVuZGVyZXI5X3V0
aWxzLmg6IENvbnZlcnNpb24gZnVuY3Rpb25zIGFuZCBvdGhlciB1dGlsaXR5IHJvdXRpbmVzIAor
Ly8gc3BlY2lmaWMgdG8gdGhlIEQzRDkgcmVuZGVyZXIKKworI2lmbmRlZiBMSUJHTEVTVjJfUkVO
REVSRVJfUkVOREVSRVI5X1VUSUxTX0gKKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRF
UkVSOV9VVElMU19ICisKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisKK2NvbnN0
IEQzREZPUk1BVCBEM0RGTVRfSU5UWiA9ICgoRDNERk9STUFUKShNQUtFRk9VUkNDKCdJJywnTics
J1QnLCdaJykpKTsKK2NvbnN0IEQzREZPUk1BVCBEM0RGTVRfTlVMTCA9ICgoRDNERk9STUFUKShN
QUtFRk9VUkNDKCdOJywnVScsJ0wnLCdMJykpKTsKKworbmFtZXNwYWNlIGdsX2QzZDkKK3sKKwor
RDNEQ01QRlVOQyBDb252ZXJ0Q29tcGFyaXNvbihHTGVudW0gY29tcGFyaXNvbik7CitEM0RDT0xP
UiBDb252ZXJ0Q29sb3IoZ2w6OkNvbG9yIGNvbG9yKTsKK0QzREJMRU5EIENvbnZlcnRCbGVuZEZ1
bmMoR0xlbnVtIGJsZW5kKTsKK0QzREJMRU5ET1AgQ29udmVydEJsZW5kT3AoR0xlbnVtIGJsZW5k
T3ApOworRDNEU1RFTkNJTE9QIENvbnZlcnRTdGVuY2lsT3AoR0xlbnVtIHN0ZW5jaWxPcCk7CitE
M0RURVhUVVJFQUREUkVTUyBDb252ZXJ0VGV4dHVyZVdyYXAoR0xlbnVtIHdyYXApOworRDNEQ1VM
TCBDb252ZXJ0Q3VsbE1vZGUoR0xlbnVtIGN1bGxGYWNlLCBHTGVudW0gZnJvbnRGYWNlKTsKK0Qz
RENVQkVNQVBfRkFDRVMgQ29udmVydEN1YmVGYWNlKEdMZW51bSBjdWJlRmFjZSk7CitEV09SRCBD
b252ZXJ0Q29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxw
aGEpOworRDNEVEVYVFVSRUZJTFRFUlRZUEUgQ29udmVydE1hZ0ZpbHRlcihHTGVudW0gbWFnRmls
dGVyLCBmbG9hdCBtYXhBbmlzb3Ryb3B5KTsKK3ZvaWQgQ29udmVydE1pbkZpbHRlcihHTGVudW0g
bWluRmlsdGVyLCBEM0RURVhUVVJFRklMVEVSVFlQRSAqZDNkTWluRmlsdGVyLCBEM0RURVhUVVJF
RklMVEVSVFlQRSAqZDNkTWlwRmlsdGVyLCBmbG9hdCBtYXhBbmlzb3Ryb3B5KTsKK0QzREZPUk1B
VCBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdMZW51bSBmb3JtYXQpOworRDNETVVMVElTQU1Q
TEVfVFlQRSBHZXRNdWx0aXNhbXBsZVR5cGVGcm9tU2FtcGxlcyhHTHNpemVpIHNhbXBsZXMpOwor
Cit9CisKK25hbWVzcGFjZSBkM2Q5X2dsCit7CisKK0dMdWludCBHZXRBbHBoYVNpemUoRDNERk9S
TUFUIGNvbG9yRm9ybWF0KTsKK0dMdWludCBHZXRTdGVuY2lsU2l6ZShEM0RGT1JNQVQgc3RlbmNp
bEZvcm1hdCk7CisKK0dMc2l6ZWkgR2V0U2FtcGxlc0Zyb21NdWx0aXNhbXBsZVR5cGUoRDNETVVM
VElTQU1QTEVfVFlQRSB0eXBlKTsKKworYm9vbCBJc0Zvcm1hdENoYW5uZWxFcXVpdmFsZW50KEQz
REZPUk1BVCBkM2Rmb3JtYXQsIEdMZW51bSBmb3JtYXQpOworR0xlbnVtIENvbnZlcnRCYWNrQnVm
ZmVyRm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpOworR0xlbnVtIENvbnZlcnREZXB0aFN0ZW5jaWxG
b3JtYXQoRDNERk9STUFUIGZvcm1hdCk7CitHTGVudW0gQ29udmVydFJlbmRlclRhcmdldEZvcm1h
dChEM0RGT1JNQVQgZm9ybWF0KTsKK0dMZW51bSBHZXRFcXVpdmFsZW50Rm9ybWF0KEQzREZPUk1B
VCBmb3JtYXQpOworCit9CisKK25hbWVzcGFjZSBkM2Q5Cit7Citib29sIElzQ29tcHJlc3NlZEZv
cm1hdChEM0RGT1JNQVQgZm9ybWF0KTsKK3NpemVfdCBDb21wdXRlUm93U2l6ZShEM0RGT1JNQVQg
Zm9ybWF0LCB1bnNpZ25lZCBpbnQgd2lkdGgpOworCitpbmxpbmUgYm9vbCBpc0RldmljZUxvc3RF
cnJvcihIUkVTVUxUIGVycm9yQ29kZSkKK3sKKyAgICBzd2l0Y2ggKGVycm9yQ29kZSkKKyAgICB7
CisgICAgICBjYXNlIEQzREVSUl9EUklWRVJJTlRFUk5BTEVSUk9SOgorICAgICAgY2FzZSBEM0RF
UlJfREVWSUNFTE9TVDoKKyAgICAgIGNhc2UgRDNERVJSX0RFVklDRUhVTkc6CisgICAgICBjYXNl
IEQzREVSUl9ERVZJQ0VSRU1PVkVEOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK30KKworI2VuZGlmIC8vIExJ
QkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjlfVVRJTFNfSApkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvQmxpdC5w
cyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9z
aGFkZXJzL0JsaXQucHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGNiM2JkMGU3NmJhOTJhMjhlNzc2ODg4YzYyOTA0
YzBjM2YwNWYzYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL0JsaXQucHMKQEAgLTAsMCArMSwzOSBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKK3NhbXBsZXIyRCB0ZXggOiBzMDsKKwordW5pZm9ybSBmbG9hdDQg
bW9kZSA6IGMwOworCisvLyBQYXNzdGhyb3VnaCBQaXhlbCBTaGFkZXIKKy8vIE91dHB1dHMgdGV4
dHVyZSAwIHNhbXBsZWQgYXQgdGV4Y29vcmQgMC4KK2Zsb2F0NCBwYXNzdGhyb3VnaHBzKGZsb2F0
NCB0ZXhjb29yZCA6IFRFWENPT1JEMCkgOiBDT0xPUgoreworCXJldHVybiB0ZXgyRCh0ZXgsIHRl
eGNvb3JkLnh5KTsKK307CisKKy8vIEx1bWluYW5jZSBDb252ZXJzaW9uIFBpeGVsIFNoYWRlcgor
Ly8gT3V0cHV0cyBzYW1wbGUodGV4MCwgdGMwKS5ycnJhLgorLy8gRm9yIExBIG91dHB1dCAocGFz
cyBBKSBzZXQgQzAuWCA9IDEsIEMwLlkgPSAwLgorLy8gRm9yIEwgb3V0cHV0IChBID0gMSkgc2V0
IEMwLlggPSAwLCBDMC5ZID0gMS4KK2Zsb2F0NCBsdW1pbmFuY2VwcyhmbG9hdDQgdGV4Y29vcmQg
OiBURVhDT09SRDApIDogQ09MT1IKK3sKKwlmbG9hdDQgdG1wID0gdGV4MkQodGV4LCB0ZXhjb29y
ZC54eSk7CisJdG1wLncgPSB0bXAudyAqIG1vZGUueCArIG1vZGUueTsKKwlyZXR1cm4gdG1wLnh4
eHc7Cit9OworCisvLyBSR0IvQSBDb21wb25lbnQgTWFzayBQaXhlbCBTaGFkZXIKKy8vIE91dHB1
dHMgc2FtcGxlKHRleDAsIHRjMCkgd2l0aCBvcHRpb25zIHRvIGZvcmNlIFJHQiA9IDAgYW5kL29y
IEEgPSAxLgorLy8gVG8gZm9yY2UgUkdCID0gMCwgc2V0IEMwLlggPSAwLCBvdGhlcndpc2UgQzAu
WCA9IDEuCisvLyBUbyBmb3JjZSBBID0gMSwgc2V0IEMwLlogPSAwLCBDMC5XID0gMSwgb3RoZXJ3
aXNlIEMwLlogPSAxLCBDMC5XID0gMC4KK2Zsb2F0NCBjb21wb25lbnRtYXNrcHMoZmxvYXQ0IHRl
eGNvb3JkIDogVEVYQ09PUkQwKSA6IENPTE9SCit7CisJZmxvYXQ0IHRtcCA9IHRleDJEKHRleCwg
dGV4Y29vcmQueHkpOworCXRtcC54eXogPSB0bXAueHl6ICogbW9kZS54OworCXRtcC53ID0gdG1w
LncgKiBtb2RlLnogKyBtb2RlLnc7CisJcmV0dXJuIHRtcDsKK307CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9C
bGl0LnZzIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L3NoYWRlcnMvQmxpdC52cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYTM2OTgwYjkzNWI1MGZhOWFlMGI2YjBm
NGE1MGUzOTM5ZDBkNTExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvQmxpdC52cwpAQCAtMCwwICsx
LDQzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworc3RydWN0IFZTX09VVFBVVAoreworICAgIGZsb2F0NCBw
b3NpdGlvbiA6IFBPU0lUSU9OOworICAgIGZsb2F0NCB0ZXhjb29yZCA6IFRFWENPT1JEMDsKK307
CisKK3VuaWZvcm0gZmxvYXQ0IGhhbGZQaXhlbFNpemUgOiBjMDsKKworLy8gU3RhbmRhcmQgVmVy
dGV4IFNoYWRlcgorLy8gSW5wdXQgMCBpcyB0aGUgaG9tb2dlbm91cyBwb3NpdGlvbi4KKy8vIE91
dHB1dHMgdGhlIGhvbW9nZW5vdXMgcG9zaXRpb24gYXMtaXMuCisvLyBPdXRwdXRzIGEgdGV4IGNv
b3JkIHdpdGggKDAsMCkgaW4gdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSBzY3JlZW4gYW5k
ICgxLDEpIGluIHRoZSBib3R0b20gcmlnaHQuCisvLyBDMC5YIG11c3QgYmUgbmVnYXRpdmUgaGFs
Zi1waXhlbCB3aWR0aCwgQzAuWSBtdXN0IGJlIGhhbGYtcGl4ZWwgaGVpZ2h0LiBDMC5aVyBtdXN0
IGJlIDAuCitWU19PVVRQVVQgc3RhbmRhcmR2cyhpbiBmbG9hdDQgcG9zaXRpb24gOiBQT1NJVElP
TikKK3sKKyAgICBWU19PVVRQVVQgT3V0OworCisgICAgT3V0LnBvc2l0aW9uID0gcG9zaXRpb24g
KyBoYWxmUGl4ZWxTaXplOworICAgIE91dC50ZXhjb29yZCA9IHBvc2l0aW9uICogZmxvYXQ0KDAu
NSwgLTAuNSwgMS4wLCAxLjApICsgZmxvYXQ0KDAuNSwgMC41LCAwLCAwKTsKKworICAgIHJldHVy
biBPdXQ7Cit9OworCisvLyBGbGlwIFkgVmVydGV4IFNoYWRlcgorLy8gSW5wdXQgMCBpcyB0aGUg
aG9tb2dlbm91cyBwb3NpdGlvbi4KKy8vIE91dHB1dHMgdGhlIGhvbW9nZW5vdXMgcG9zaXRpb24g
YXMtaXMuCisvLyBPdXRwdXRzIGEgdGV4IGNvb3JkIHdpdGggKDAsMSkgaW4gdGhlIHVwcGVyLWxl
ZnQgY29ybmVyIG9mIHRoZSBzY3JlZW4gYW5kICgxLDApIGluIHRoZSBib3R0b20gcmlnaHQuCisv
LyBDMC5YWSBtdXN0IGJlIHRoZSBoYWxmLXBpeGVsIHdpZHRoIGFuZCBoZWlnaHQuIEMwLlpXIG11
c3QgYmUgMC4KK1ZTX09VVFBVVCBmbGlweXZzKGluIGZsb2F0NCBwb3NpdGlvbiA6IFBPU0lUSU9O
KQoreworICAgIFZTX09VVFBVVCBPdXQ7CisKKyAgICBPdXQucG9zaXRpb24gPSBwb3NpdGlvbiAr
IGhhbGZQaXhlbFNpemU7CisgICAgT3V0LnRleGNvb3JkID0gcG9zaXRpb24gKiBmbG9hdDQoMC41
LCAwLjUsIDEuMCwgMS4wKSArIGZsb2F0NCgwLjUsIDAuNSwgMCwgMCk7CisKKyAgICByZXR1cm4g
T3V0OworfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2NvbXBvbmVudG1hc2twcy5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMv
Y29tcGlsZWQvY29tcG9uZW50bWFza3BzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGYyODQ3YjhlN2QzNWYxNTdj
YTFhOGQyODE4M2M1ZWI3YzRkMjZlZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2Nv
bXBvbmVudG1hc2twcy5oCkBAIC0wLDAgKzEsNzkgQEAKKyNpZiAwDQorLy8NCisvLyBHZW5lcmF0
ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQN
CisvLw0KKy8vLw0KKy8vIFBhcmFtZXRlcnM6DQorLy8NCisvLyAgIGZsb2F0NCBtb2RlOw0KKy8v
ICAgc2FtcGxlcjJEIHRleDsNCisvLw0KKy8vDQorLy8gUmVnaXN0ZXJzOg0KKy8vDQorLy8gICBO
YW1lICAgICAgICAgUmVnICAgU2l6ZQ0KKy8vICAgLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0NCisv
LyAgIG1vZGUgICAgICAgICBjMCAgICAgICAxDQorLy8gICB0ZXggICAgICAgICAgczAgICAgICAg
MQ0KKy8vDQorDQorICAgIHBzXzJfMA0KKyAgICBkY2wgdDAueHkNCisgICAgZGNsXzJkIHMwDQor
ICAgIHRleGxkIHIwLCB0MCwgczANCisgICAgbXVsIHIxLnh5eiwgcjAsIGMwLngNCisgICAgbWFk
IHIxLncsIHIwLncsIGMwLnosIGMwLncNCisgICAgbW92IG9DMCwgcjENCisNCisvLyBhcHByb3hp
bWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCAzIGFyaXRobWV0aWMp
DQorI2VuZGlmDQorDQorY29uc3QgQllURSBnX3BzMjBfY29tcG9uZW50bWFza3BzW10gPQ0KK3sN
CisgICAgICAwLCAgIDIsIDI1NSwgMjU1LCAyNTQsIDI1NSwgDQorICAgICA0NCwgICAwLCAgNjcs
ICA4NCwgIDY1LCAgNjYsIA0KKyAgICAgMjgsICAgMCwgICAwLCAgIDAsIDExOSwgICAwLCANCisg
ICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTUsIDI1NSwgDQorICAgICAgMiwgICAwLCAgIDAsICAg
MCwgIDI4LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCANCisgICAg
MTEyLCAgIDAsICAgMCwgICAwLCAgNjgsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDIsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICA3NiwgICAwLCANCisgICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICA5MiwgICAwLCAgIDAsICAgMCwgICAz
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCisgICAgIDk2LCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAxMDksIDExMSwgMTAwLCAx
MDEsIA0KKyAgICAgIDAsIDE3MSwgMTcxLCAxNzEsICAgMSwgICAwLCANCisgICAgICAzLCAgIDAs
ICAgMSwgICAwLCAgIDQsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgIDAsICAgMCwgMTE2LCAxMDEsIDEyMCwgICAwLCANCisgICAgICA0LCAgIDAsICAx
MiwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgICAwLCAgIDAsIDExMiwgMTE1LCANCisgICAgIDk1LCAgNTAsICA5NSwg
IDQ4LCAgIDAsICA3NywgDQorICAgIDEwNSwgIDk5LCAxMTQsIDExMSwgMTE1LCAxMTEsIA0KKyAg
ICAxMDIsIDExNiwgIDMyLCAgNDAsICA4MiwgIDQxLCANCisgICAgIDMyLCAgNzIsICA3NiwgIDgz
LCAgNzYsICAzMiwgDQorICAgICA4MywgMTA0LCAgOTcsIDEwMCwgMTAxLCAxMTQsIA0KKyAgICAg
MzIsICA2NywgMTExLCAxMDksIDExMiwgMTA1LCANCisgICAgMTA4LCAxMDEsIDExNCwgIDMyLCAg
NTcsICA0NiwgDQorICAgICA1MSwgIDQ4LCAgNDYsICA1NywgIDUwLCAgNDgsIA0KKyAgICAgNDgs
ICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCANCisgICAgIDUyLCAgIDAsIDE3MSwgMTcxLCAgMzEs
ICAgMCwgDQorICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAxMjgsIA0KKyAgICAgIDAsICAg
MCwgICAzLCAxNzYsICAzMSwgICAwLCANCisgICAgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIDE0
NCwgDQorICAgICAgMCwgICA4LCAgMTUsIDE2MCwgIDY2LCAgIDAsIA0KKyAgICAgIDAsICAgMywg
ICAwLCAgIDAsICAxNSwgMTI4LCANCisgICAgICAwLCAgIDAsIDIyOCwgMTc2LCAgIDAsICAgOCwg
DQorICAgIDIyOCwgMTYwLCAgIDUsICAgMCwgICAwLCAgIDMsIA0KKyAgICAgIDEsICAgMCwgICA3
LCAxMjgsICAgMCwgICAwLCANCisgICAgMjI4LCAxMjgsICAgMCwgICAwLCAgIDAsIDE2MCwgDQor
ICAgICAgNCwgICAwLCAgIDAsICAgNCwgICAxLCAgIDAsIA0KKyAgICAgIDgsIDEyOCwgICAwLCAg
IDAsIDI1NSwgMTI4LCANCisgICAgICAwLCAgIDAsIDE3MCwgMTYwLCAgIDAsICAgMCwgDQorICAg
IDI1NSwgMTYwLCAgIDEsICAgMCwgICAwLCAgIDIsIA0KKyAgICAgIDAsICAgOCwgIDE1LCAxMjgs
ICAgMSwgICAwLCANCisgICAgMjI4LCAxMjgsIDI1NSwgMjU1LCAgIDAsICAgMA0KK307DQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L3NoYWRlcnMvY29tcGlsZWQvZmxpcHl2cy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvZmxpcHl2cy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjAyNTc2ZWQ2NzQyZjJlMmY1ZWYzZmIxNGFiMGQ4M2M2OTZiNTczZDIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9mbGlweXZzLmgKQEAgLTAsMCArMSw2NyBAQAorI2lm
IDANCisvLw0KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBp
bGVyIDkuMzAuOTIwMC4xNjM4NA0KKy8vDQorLy8vDQorLy8gUGFyYW1ldGVyczoNCisvLw0KKy8v
ICAgZmxvYXQ0IGhhbGZQaXhlbFNpemU7DQorLy8NCisvLw0KKy8vIFJlZ2lzdGVyczoNCisvLw0K
Ky8vICAgTmFtZSAgICAgICAgICBSZWcgICBTaXplDQorLy8gICAtLS0tLS0tLS0tLS0tIC0tLS0t
IC0tLS0NCisvLyAgIGhhbGZQaXhlbFNpemUgYzAgICAgICAgMQ0KKy8vDQorDQorICAgIHZzXzJf
MA0KKyAgICBkZWYgYzEsIDAuNSwgMSwgMCwgMA0KKyAgICBkY2xfcG9zaXRpb24gdjANCisgICAg
YWRkIG9Qb3MsIHYwLCBjMA0KKyAgICBtYWQgb1QwLCB2MCwgYzEueHh5eSwgYzEueHh6eg0KKw0K
Ky8vIGFwcHJveGltYXRlbHkgMiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQorI2VuZGlmDQorDQor
Y29uc3QgQllURSBnX3ZzMjBfZmxpcHl2c1tdID0NCit7DQorICAgICAgMCwgICAyLCAyNTQsIDI1
NSwgMjU0LCAyNTUsIA0KKyAgICAgMzYsICAgMCwgIDY3LCAgODQsICA2NSwgIDY2LCANCisgICAg
IDI4LCAgIDAsICAgMCwgICAwLCAgODcsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMiwg
MjU0LCAyNTUsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICAyOCwgICAwLCANCisgICAgICAw
LCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgDQorICAgICA4MCwgICAwLCAgIDAsICAgMCwgIDQ4
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCANCisgICAgICAxLCAg
IDAsICAgMCwgICAwLCAgNjQsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAxMDQsICA5NywgMTA4LCAxMDIsICA4MCwgMTA1LCANCisgICAgMTIwLCAxMDEs
IDEwOCwgIDgzLCAxMDUsIDEyMiwgDQorICAgIDEwMSwgICAwLCAxNzEsIDE3MSwgICAxLCAgIDAs
IA0KKyAgICAgIDMsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCANCisgICAgICAxLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAxMTgsIDExNSwgIDk1LCAgNTAsIA0K
KyAgICAgOTUsICA0OCwgICAwLCAgNzcsIDEwNSwgIDk5LCANCisgICAgMTE0LCAxMTEsIDExNSwg
MTExLCAxMDIsIDExNiwgDQorICAgICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsIA0KKyAg
ICAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgMTA0LCANCisgICAgIDk3LCAxMDAsIDEwMSwgMTE0
LCAgMzIsICA2NywgDQorICAgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIA0KKyAgICAx
MTQsICAzMiwgIDU3LCAgNDYsICA1MSwgIDQ4LCANCisgICAgIDQ2LCAgNTcsICA1MCwgIDQ4LCAg
NDgsICA0NiwgDQorICAgICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCAgIDAsIA0KKyAgICAxNzEs
IDE3MSwgIDgxLCAgIDAsICAgMCwgICA1LCANCisgICAgICAxLCAgIDAsICAxNSwgMTYwLCAgIDAs
ICAgMCwgDQorICAgICAgMCwgIDYzLCAgIDAsICAgMCwgMTI4LCAgNjMsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAzMSwgICAwLCAgIDAsICAg
MiwgDQorICAgICAgMCwgICAwLCAgIDAsIDEyOCwgICAwLCAgIDAsIA0KKyAgICAgMTUsIDE0NCwg
ICAyLCAgIDAsICAgMCwgICAzLCANCisgICAgICAwLCAgIDAsICAxNSwgMTkyLCAgIDAsICAgMCwg
DQorICAgIDIyOCwgMTQ0LCAgIDAsICAgMCwgMjI4LCAxNjAsIA0KKyAgICAgIDQsICAgMCwgICAw
LCAgIDQsICAgMCwgICAwLCANCisgICAgIDE1LCAyMjQsICAgMCwgICAwLCAyMjgsIDE0NCwgDQor
ICAgICAgMSwgICAwLCAgODAsIDE2MCwgICAxLCAgIDAsIA0KKyAgICAxNjAsIDE2MCwgMjU1LCAy
NTUsICAgMCwgICAwDQorfTsNCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9sdW1pbmFuY2Vwcy5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3No
YWRlcnMvY29tcGlsZWQvbHVtaW5hbmNlcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMDMxM2IwODYwZWNmZTAy
Njc3ZGRiM2YwMDA5MTUxZjc4YTNiZmIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQv
bHVtaW5hbmNlcHMuaApAQCAtMCwwICsxLDc5IEBACisjaWYgMA0KKy8vDQorLy8gR2VuZXJhdGVk
IGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0DQor
Ly8NCisvLy8NCisvLyBQYXJhbWV0ZXJzOg0KKy8vDQorLy8gICBmbG9hdDQgbW9kZTsNCisvLyAg
IHNhbXBsZXIyRCB0ZXg7DQorLy8NCisvLw0KKy8vIFJlZ2lzdGVyczoNCisvLw0KKy8vICAgTmFt
ZSAgICAgICAgIFJlZyAgIFNpemUNCisvLyAgIC0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tDQorLy8g
ICBtb2RlICAgICAgICAgYzAgICAgICAgMQ0KKy8vICAgdGV4ICAgICAgICAgIHMwICAgICAgIDEN
CisvLw0KKw0KKyAgICBwc18yXzANCisgICAgZGNsIHQwLnh5DQorICAgIGRjbF8yZCBzMA0KKyAg
ICB0ZXhsZCByMCwgdDAsIHMwDQorICAgIG1hZCByMS53LCByMC53LCBjMC54LCBjMC55DQorICAg
IG1vdiByMS54eXosIHIwLngNCisgICAgbW92IG9DMCwgcjENCisNCisvLyBhcHByb3hpbWF0ZWx5
IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCAzIGFyaXRobWV0aWMpDQorI2Vu
ZGlmDQorDQorY29uc3QgQllURSBnX3BzMjBfbHVtaW5hbmNlcHNbXSA9DQorew0KKyAgICAgIDAs
ICAgMiwgMjU1LCAyNTUsIDI1NCwgMjU1LCANCisgICAgIDQ0LCAgIDAsICA2NywgIDg0LCAgNjUs
ICA2NiwgDQorICAgICAyOCwgICAwLCAgIDAsICAgMCwgMTE5LCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDIsIDI1NSwgMjU1LCANCisgICAgICAyLCAgIDAsICAgMCwgICAwLCAgMjgsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsIA0KKyAgICAxMTIsICAgMCwg
ICAwLCAgIDAsICA2OCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDc2LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCisgICAgIDkyLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgDQor
ICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgOTYsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsIDEwOSwgMTExLCAxMDAsIDEwMSwgDQorICAg
ICAgMCwgMTcxLCAxNzEsIDE3MSwgICAxLCAgIDAsIA0KKyAgICAgIDMsICAgMCwgICAxLCAgIDAs
ICAgNCwgICAwLCANCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAg
MCwgICAwLCAxMTYsIDEwMSwgMTIwLCAgIDAsIA0KKyAgICAgIDQsICAgMCwgIDEyLCAgIDAsICAg
MSwgICAwLCANCisgICAgICAxLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgMTEyLCAxMTUsIA0KKyAgICAgOTUsICA1MCwgIDk1LCAgNDgsICAgMCwg
IDc3LCANCisgICAgMTA1LCAgOTksIDExNCwgMTExLCAxMTUsIDExMSwgDQorICAgIDEwMiwgMTE2
LCAgMzIsICA0MCwgIDgyLCAgNDEsIA0KKyAgICAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMy
LCANCisgICAgIDgzLCAxMDQsICA5NywgMTAwLCAxMDEsIDExNCwgDQorICAgICAzMiwgIDY3LCAx
MTEsIDEwOSwgMTEyLCAxMDUsIA0KKyAgICAxMDgsIDEwMSwgMTE0LCAgMzIsICA1NywgIDQ2LCAN
CisgICAgIDUxLCAgNDgsICA0NiwgIDU3LCAgNTAsICA0OCwgDQorICAgICA0OCwgIDQ2LCAgNDks
ICA1NCwgIDUxLCAgNTYsIA0KKyAgICAgNTIsICAgMCwgMTcxLCAxNzEsICAzMSwgICAwLCANCisg
ICAgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIDEyOCwgDQorICAgICAgMCwgICAwLCAgIDMsIDE3
NiwgIDMxLCAgIDAsIA0KKyAgICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTQ0LCANCisgICAg
ICAwLCAgIDgsICAxNSwgMTYwLCAgNjYsICAgMCwgDQorICAgICAgMCwgICAzLCAgIDAsICAgMCwg
IDE1LCAxMjgsIA0KKyAgICAgIDAsICAgMCwgMjI4LCAxNzYsICAgMCwgICA4LCANCisgICAgMjI4
LCAxNjAsICAgNCwgICAwLCAgIDAsICAgNCwgDQorICAgICAgMSwgICAwLCAgIDgsIDEyOCwgICAw
LCAgIDAsIA0KKyAgICAyNTUsIDEyOCwgICAwLCAgIDAsICAgMCwgMTYwLCANCisgICAgICAwLCAg
IDAsICA4NSwgMTYwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAyLCAgIDEsICAgMCwgICA3LCAx
MjgsIA0KKyAgICAgIDAsICAgMCwgICAwLCAxMjgsICAgMSwgICAwLCANCisgICAgICAwLCAgIDIs
ICAgMCwgICA4LCAgMTUsIDEyOCwgDQorICAgICAgMSwgICAwLCAyMjgsIDEyOCwgMjU1LCAyNTUs
IA0KKyAgICAgIDAsICAgMA0KK307DQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91
Z2hwcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hwcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMwYTJjN2Q0
ODJiMzNiZTg2Njc0OTU0NzU1YTM5OTU4NWM4YWJlYTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9j
b21waWxlZC9wYXNzdGhyb3VnaHBzLmgKQEAgLTAsMCArMSw2MiBAQAorI2lmIDANCisvLw0KKy8v
IEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIw
MC4xNjM4NA0KKy8vDQorLy8vDQorLy8gUGFyYW1ldGVyczoNCisvLw0KKy8vICAgc2FtcGxlcjJE
IHRleDsNCisvLw0KKy8vDQorLy8gUmVnaXN0ZXJzOg0KKy8vDQorLy8gICBOYW1lICAgICAgICAg
UmVnICAgU2l6ZQ0KKy8vICAgLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0NCisvLyAgIHRleCAgICAg
ICAgICBzMCAgICAgICAxDQorLy8NCisNCisgICAgcHNfMl8wDQorICAgIGRjbCB0MC54eQ0KKyAg
ICBkY2xfMmQgczANCisgICAgdGV4bGQgcjAsIHQwLCBzMA0KKyAgICBtb3Ygb0MwLCByMA0KKw0K
Ky8vIGFwcHJveGltYXRlbHkgMiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkICgxIHRleHR1cmUsIDEg
YXJpdGhtZXRpYykNCisjZW5kaWYNCisNCitjb25zdCBCWVRFIGdfcHMyMF9wYXNzdGhyb3VnaHBz
W10gPQ0KK3sNCisgICAgICAwLCAgIDIsIDI1NSwgMjU1LCAyNTQsIDI1NSwgDQorICAgICAzMywg
ICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIA0KKyAgICAgMjgsICAgMCwgICAwLCAgIDAsICA3NSwg
ICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTUsIDI1NSwgDQorICAgICAgMSwgICAw
LCAgIDAsICAgMCwgIDI4LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAw
LCANCisgICAgIDY4LCAgIDAsICAgMCwgICAwLCAgNDgsICAgMCwgDQorICAgICAgMCwgICAwLCAg
IDMsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICA1MiwgICAwLCAN
CisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgIDExNiwgMTAxLCAxMjAs
ICAgMCwgICA0LCAgIDAsIA0KKyAgICAgMTIsICAgMCwgICAxLCAgIDAsICAgMSwgICAwLCANCisg
ICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAxMTIsIDEx
NSwgIDk1LCAgNTAsIA0KKyAgICAgOTUsICA0OCwgICAwLCAgNzcsIDEwNSwgIDk5LCANCisgICAg
MTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgDQorICAgICAzMiwgIDQwLCAgODIsICA0MSwg
IDMyLCAgNzIsIA0KKyAgICAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgMTA0LCANCisgICAgIDk3
LCAxMDAsIDEwMSwgMTE0LCAgMzIsICA2NywgDQorICAgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4
LCAxMDEsIA0KKyAgICAxMTQsICAzMiwgIDU3LCAgNDYsICA1MSwgIDQ4LCANCisgICAgIDQ2LCAg
NTcsICA1MCwgIDQ4LCAgNDgsICA0NiwgDQorICAgICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCAg
IDAsIA0KKyAgICAxNzEsIDE3MSwgIDMxLCAgIDAsICAgMCwgICAyLCANCisgICAgICAwLCAgIDAs
ICAgMCwgMTI4LCAgIDAsICAgMCwgDQorICAgICAgMywgMTc2LCAgMzEsICAgMCwgICAwLCAgIDIs
IA0KKyAgICAgIDAsICAgMCwgICAwLCAxNDQsICAgMCwgICA4LCANCisgICAgIDE1LCAxNjAsICA2
NiwgICAwLCAgIDAsICAgMywgDQorICAgICAgMCwgICAwLCAgMTUsIDEyOCwgICAwLCAgIDAsIA0K
KyAgICAyMjgsIDE3NiwgICAwLCAgIDgsIDIyOCwgMTYwLCANCisgICAgICAxLCAgIDAsICAgMCwg
ICAyLCAgIDAsICAgOCwgDQorICAgICAxNSwgMTI4LCAgIDAsICAgMCwgMjI4LCAxMjgsIA0KKyAg
ICAyNTUsIDI1NSwgICAwLCAgIDANCit9Ow0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3N0YW5k
YXJkdnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3N0YW5kYXJkdnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNmI4OTU5NWNi
YjU1Y2MzMmMzYjgzNzNkNzgxMWMwOWYwYWY0OTYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29t
cGlsZWQvc3RhbmRhcmR2cy5oCkBAIC0wLDAgKzEsNjcgQEAKKyNpZiAwDQorLy8NCisvLyBHZW5l
cmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYz
ODQNCisvLw0KKy8vLw0KKy8vIFBhcmFtZXRlcnM6DQorLy8NCisvLyAgIGZsb2F0NCBoYWxmUGl4
ZWxTaXplOw0KKy8vDQorLy8NCisvLyBSZWdpc3RlcnM6DQorLy8NCisvLyAgIE5hbWUgICAgICAg
ICAgUmVnICAgU2l6ZQ0KKy8vICAgLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tDQorLy8gICBoYWxm
UGl4ZWxTaXplIGMwICAgICAgIDENCisvLw0KKw0KKyAgICB2c18yXzANCisgICAgZGVmIGMxLCAw
LjUsIC0wLjUsIDEsIDANCisgICAgZGNsX3Bvc2l0aW9uIHYwDQorICAgIGFkZCBvUG9zLCB2MCwg
YzANCisgICAgbWFkIG9UMCwgdjAsIGMxLnh5enosIGMxLnh4d3cNCisNCisvLyBhcHByb3hpbWF0
ZWx5IDIgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KKyNlbmRpZg0KKw0KK2NvbnN0IEJZVEUgZ192
czIwX3N0YW5kYXJkdnNbXSA9DQorew0KKyAgICAgIDAsICAgMiwgMjU0LCAyNTUsIDI1NCwgMjU1
LCANCisgICAgIDM2LCAgIDAsICA2NywgIDg0LCAgNjUsICA2NiwgDQorICAgICAyOCwgICAwLCAg
IDAsICAgMCwgIDg3LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDIsIDI1NCwgMjU1LCAN
CisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgMjgsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAs
ICAgMSwgICAwLCAgIDAsIA0KKyAgICAgODAsICAgMCwgICAwLCAgIDAsICA0OCwgICAwLCANCisg
ICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAg
MCwgIDY0LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAg
MTA0LCAgOTcsIDEwOCwgMTAyLCAgODAsIDEwNSwgDQorICAgIDEyMCwgMTAxLCAxMDgsICA4Mywg
MTA1LCAxMjIsIA0KKyAgICAxMDEsICAgMCwgMTcxLCAxNzEsICAgMSwgICAwLCANCisgICAgICAz
LCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgMTE4LCAxMTUsICA5NSwgIDUwLCANCisgICAgIDk1LCAg
NDgsICAgMCwgIDc3LCAxMDUsICA5OSwgDQorICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAx
MTYsIA0KKyAgICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCANCisgICAgIDc2LCAgODMs
ICA3NiwgIDMyLCAgODMsIDEwNCwgDQorICAgICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCAgNjcs
IA0KKyAgICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCANCisgICAgMTE0LCAgMzIsICA1
NywgIDQ2LCAgNTEsICA0OCwgDQorICAgICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4LCAgNDYsIA0K
KyAgICAgNDksICA1NCwgIDUxLCAgNTYsICA1MiwgICAwLCANCisgICAgMTcxLCAxNzEsICA4MSwg
ICAwLCAgIDAsICAgNSwgDQorICAgICAgMSwgICAwLCAgMTUsIDE2MCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICA2MywgICAwLCAgIDAsICAgMCwgMTkxLCANCisgICAgICAwLCAgIDAsIDEyOCwgIDYz
LCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgMzEsICAgMCwgICAwLCAgIDIsIA0KKyAgICAg
IDAsICAgMCwgICAwLCAxMjgsICAgMCwgICAwLCANCisgICAgIDE1LCAxNDQsICAgMiwgICAwLCAg
IDAsICAgMywgDQorICAgICAgMCwgICAwLCAgMTUsIDE5MiwgICAwLCAgIDAsIA0KKyAgICAyMjgs
IDE0NCwgICAwLCAgIDAsIDIyOCwgMTYwLCANCisgICAgICA0LCAgIDAsICAgMCwgICA0LCAgIDAs
ICAgMCwgDQorICAgICAxNSwgMjI0LCAgIDAsICAgMCwgMjI4LCAxNDQsIA0KKyAgICAgIDEsICAg
MCwgMTY0LCAxNjAsICAgMSwgICAwLCANCisgICAgMjQwLCAxNjAsIDI1NSwgMjU1LCAgIDAsICAg
MA0KK307DQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVycy5iYXQgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9nZW5lcmF0
ZV9zaGFkZXJzLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYTEyNTkxNDg5MzZlNjllZDZjMDNmNGI5NzM1ZWMz
ODVjMjcyNjZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVycy5iYXQKQEAg
LTAsMCArMSwxNCBAQAorQEVDSE8gT0ZGDQorUkVNDQorUkVNIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KK1JFTSBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlDQorUkVNIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQorUkVNDQorDQorUEFU
SCAlUEFUSCU7JVByb2dyYW1GaWxlcyh4ODYpJVxXaW5kb3dzIEtpdHNcOC4wXGJpblx4ODY7JURY
U0RLX0RJUiVcVXRpbGl0aWVzXGJpblx4ODYNCisNCitmeGMgL0Ugc3RhbmRhcmR2cyAvVCB2c18y
XzAgL0ZoIGNvbXBpbGVkL3N0YW5kYXJkdnMuaCBCbGl0LnZzDQorZnhjIC9FIGZsaXB5dnMgL1Qg
dnNfMl8wIC9GaCBjb21waWxlZC9mbGlweXZzLmggQmxpdC52cw0KK2Z4YyAvRSBwYXNzdGhyb3Vn
aHBzIC9UIHBzXzJfMCAvRmggY29tcGlsZWQvcGFzc3Rocm91Z2hwcy5oIEJsaXQucHMNCitmeGMg
L0UgbHVtaW5hbmNlcHMgL1QgcHNfMl8wIC9GaCBjb21waWxlZC9sdW1pbmFuY2Vwcy5oIEJsaXQu
cHMNCitmeGMgL0UgY29tcG9uZW50bWFza3BzIC9UIHBzXzJfMCAvRmggY29tcGlsZWQvY29tcG9u
ZW50bWFza3BzLmggQmxpdC5wcw0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS92ZXJ0ZXhjb252ZXJzaW9uLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvdmVydGV4Y29udmVy
c2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjU5MGI5ZDQ4YTM4NmZmYzE3MjU3MWRhNDRkOWJlMjBkMTAyOTAx
OWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvdmVydGV4Y29udmVyc2lvbi5oCkBAIC0wLDAgKzEsMjAzIEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisvLyB2ZXJ0ZXhjb252ZXJzaW9uLmg6IEEgbGlicmFyeSBvZiB2
ZXJ0ZXggY29udmVyc2lvbiBjbGFzc2VzIHRoYXQgY2FuIGJlIHVzZWQgdG8gYnVpbGQKKy8vIHRo
ZSBGb3JtYXRDb252ZXJ0ZXIgb2JqZWN0cyB1c2VkIGJ5IHRoZSBidWZmZXIgY29udmVyc2lvbiBz
eXN0ZW0uCisKKyNpZm5kZWYgTElCR0xFU1YyX1ZFUlRFWENPTlZFUlNJT05fSF8KKyNkZWZpbmUg
TElCR0xFU1YyX1ZFUlRFWENPTlZFUlNJT05fSF8KKworbmFtZXNwYWNlIHJ4Cit7CisKKy8vIENv
bnZlcnNpb24gdHlwZXM6CisvLyBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eTogdHJ1ZSBpZiB0
aGlzIGlzIGFuIGlkZW50aXR5IHRyYW5zZm9ybSwgZmFsc2Ugb3RoZXJ3aXNlCisvLyBzdGF0aWMg
VSBjb252ZXJ0KFQpOiBjb252ZXJ0IGEgc2luZ2xlIGVsZW1lbnQgZnJvbSB0aGUgaW5wdXQgdHlw
ZSB0byB0aGUgb3V0cHV0IHR5cGUKKy8vIHR5cGVkZWYgLi4uIE91dHB1dFR5cGU6IHRoZSB0eXBl
IHByb2R1Y2VkIGJ5IHRoaXMgY29udmVyc2lvbgorCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK3N0cnVj
dCBJZGVudGl0eQoreworICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0gdHJ1ZTsKKwor
ICAgIHR5cGVkZWYgVCBPdXRwdXRUeXBlOworCisgICAgc3RhdGljIFQgY29udmVydChUIHgpCisg
ICAgeworICAgICAgICByZXR1cm4geDsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgRnJv
bVQsIGNsYXNzIFRvVD4KK3N0cnVjdCBDYXN0Cit7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaWRl
bnRpdHkgPSBmYWxzZTsKKworICAgIHR5cGVkZWYgVG9UIE91dHB1dFR5cGU7CisKKyAgICBzdGF0
aWMgVG9UIGNvbnZlcnQoRnJvbVQgeCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUb1Q+KHgpOworICAgIH0KK307CisKK3RlbXBsYXRlIDxjbGFzcyBUPgorc3RydWN0IENhc3Q8
VCwgVD4KK3sKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9IHRydWU7CisKKyAgICB0
eXBlZGVmIFQgT3V0cHV0VHlwZTsKKworICAgIHN0YXRpYyBUIGNvbnZlcnQoVCB4KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHgpOworICAgIH0KK307CisKK3RlbXBsYXRl
IDxjbGFzcyBUPgorc3RydWN0IE5vcm1hbGl6ZQoreworICAgIHN0YXRpYyBjb25zdCBib29sIGlk
ZW50aXR5ID0gZmFsc2U7CisKKyAgICB0eXBlZGVmIGZsb2F0IE91dHB1dFR5cGU7CisKKyAgICBz
dGF0aWMgZmxvYXQgY29udmVydChUIHgpCisgICAgeworICAgICAgICB0eXBlZGVmIHN0ZDo6bnVt
ZXJpY19saW1pdHM8VD4gTkw7CisgICAgICAgIGZsb2F0IGYgPSBzdGF0aWNfY2FzdDxmbG9hdD4o
eCk7CisKKyAgICAgICAgaWYgKE5MOjppc19zaWduZWQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IC8vIGNvbnN0IGZsb2F0ID0+IFZDMjAwOCBjb21wdXRlcyBpdCBhdCBjb21waWxlIHRpbWUKKyAg
ICAgICAgICAgIC8vIHN0YXRpYyBjb25zdCBmbG9hdCA9PiBWQzIwMDggY29tcHV0ZXMgaXQgdGhl
IGZpcnN0IHRpbWUgd2UgZ2V0IGhlcmUsIHN0b3JlcyBpdCB0byBtZW1vcnkgd2l0aCBzdGF0aWMg
Z3VhcmQgYW5kIGFsbCB0aGF0LgorICAgICAgICAgICAgY29uc3QgZmxvYXQgZGl2aXNvciA9IDEu
MGYvKDIqc3RhdGljX2Nhc3Q8ZmxvYXQ+KE5MOjptYXgoKSkrMSk7CisgICAgICAgICAgICByZXR1
cm4gKDIqZisxKSpkaXZpc29yOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGYvTkw6Om1heCgpOworICAgICAgICB9CisgICAgfQorfTsKKwor
dGVtcGxhdGUgPGNsYXNzIEZyb21UeXBlLCBzdGQ6OnNpemVfdCBTY2FsZUJpdHM+CitzdHJ1Y3Qg
Rml4ZWRUb0Zsb2F0Cit7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHkgPSBmYWxzZTsK
KworICAgIHR5cGVkZWYgZmxvYXQgT3V0cHV0VHlwZTsKKworICAgIHN0YXRpYyBmbG9hdCBjb252
ZXJ0KEZyb21UeXBlIHgpCisgICAgeworICAgICAgICBjb25zdCBmbG9hdCBkaXZpc29yID0gMS4w
ZiAvIHN0YXRpY19jYXN0PGZsb2F0PihzdGF0aWNfY2FzdDxGcm9tVHlwZT4oMSkgPDwgU2NhbGVC
aXRzKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih4KSAqIGRpdmlzb3I7Cisg
ICAgfQorfTsKKworLy8gV2lkZW4gdHlwZXM6CisvLyBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50
IGluaXRpYWxXaWR0aDogbnVtYmVyIG9mIGNvbXBvbmVudHMgYmVmb3JlIGNvbnZlcnNpb24KKy8v
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZmluYWxXaWR0aDogbnVtYmVyIG9mIGNvbXBvbmVu
dHMgYWZ0ZXIgY29udmVyc2lvbgorCisvLyBGbG9hdCBpcyBzdXBwb3J0ZWQgYXQgYW55IHNpemUu
Cit0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTj4KK3N0cnVjdCBOb1dpZGVuCit7CisgICAgc3RhdGlj
IGNvbnN0IHN0ZDo6c2l6ZV90IGluaXRpYWxXaWR0aCA9IE47CisgICAgc3RhdGljIGNvbnN0IHN0
ZDo6c2l6ZV90IGZpbmFsV2lkdGggPSBOOworfTsKKworLy8gU0hPUlQsIG5vcm0tU0hPUlQsIG5v
cm0tVU5TSUdORURfU0hPUlQgYXJlIHN1cHBvcnRlZCBidXQgb25seSB3aXRoIDIgb3IgNCBjb21w
b25lbnRzCit0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTj4KK3N0cnVjdCBXaWRlblRvRXZlbgorewor
ICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBpbml0aWFsV2lkdGggPSBOOworICAgIHN0YXRp
YyBjb25zdCBzdGQ6OnNpemVfdCBmaW5hbFdpZHRoID0gTisoTiYxKTsKK307CisKK3RlbXBsYXRl
IDxzdGQ6OnNpemVfdCBOPgorc3RydWN0IFdpZGVuVG9Gb3VyCit7CisgICAgc3RhdGljIGNvbnN0
IHN0ZDo6c2l6ZV90IGluaXRpYWxXaWR0aCA9IE47CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6
ZV90IGZpbmFsV2lkdGggPSA0OworfTsKKworLy8gTW9zdCB0eXBlcyBoYXZlIDAgYW5kIDEgdGhh
dCBhcmUganVzdCB0aGF0LgordGVtcGxhdGUgPGNsYXNzIFQ+CitzdHJ1Y3QgU2ltcGxlRGVmYXVs
dFZhbHVlcworeworICAgIHN0YXRpYyBUIHplcm8oKSB7IHJldHVybiBzdGF0aWNfY2FzdDxUPigw
KTsgfQorICAgIHN0YXRpYyBUIG9uZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KDEpOyB9Cit9
OworCisvLyBCdXQgbm9ybWFsaXNlZCB0eXBlcyBvbmx5IHN0b3JlIFswLDFdIG9yIFstMSwxXSBz
byAxLjAgaXMgcmVwcmVzZW50ZWQgYnkgdGhlIG1heCB2YWx1ZS4KK3RlbXBsYXRlIDxjbGFzcyBU
Pgorc3RydWN0IE5vcm1hbGl6ZWREZWZhdWx0VmFsdWVzCit7CisgICAgc3RhdGljIFQgemVybygp
IHsgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KDApOyB9CisgICAgc3RhdGljIFQgb25lKCkgeyByZXR1
cm4gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCk7IH0KK307CisKKy8vIENvbnZlcnRlcjoK
Ky8vIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5OiB0cnVlIGlmIHRoaXMgaXMgYW4gaWRlbnRp
dHkgdHJhbnNmb3JtICh3aXRoIG5vIHdpZGVuaW5nKQorLy8gc3RhdGljIGNvbnN0IHN0ZDo6c2l6
ZV90IGZpbmFsU2l6ZTogbnVtYmVyIG9mIGJ5dGVzIHBlciBvdXRwdXQgdmVydGV4CisvLyBzdGF0
aWMgdm9pZCBjb252ZXJ0QXJyYXkoY29uc3Qgdm9pZCAqaW4sIHN0ZDo6c2l6ZV90IHN0cmlkZSwg
c3RkOjpzaXplX3Qgbiwgdm9pZCAqb3V0KTogY29udmVydCBhbiBhcnJheSBvZiB2ZXJ0aWNlcy4g
SW5wdXQgbWF5IGJlIHN0cmlkZWQsIGJ1dCBvdXRwdXQgd2lsbCBiZSB1bnN0cmlkZWQuCisKK3Rl
bXBsYXRlIDxjbGFzcyBJblQsIGNsYXNzIFdpZGVuUnVsZSwgY2xhc3MgQ29udmVydGVyLCBjbGFz
cyBEZWZhdWx0VmFsdWVSdWxlID0gU2ltcGxlRGVmYXVsdFZhbHVlczxJblQ+ID4KK3N0cnVjdCBW
ZXJ0ZXhEYXRhQ29udmVydGVyCit7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDb252ZXJ0ZXI6Ok91
dHB1dFR5cGUgT3V0cHV0VHlwZTsKKyAgICB0eXBlZGVmIEluVCBJbnB1dFR5cGU7CisKKyAgICBz
dGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9IChXaWRlblJ1bGU6OmluaXRpYWxXaWR0aCA9PSBX
aWRlblJ1bGU6OmZpbmFsV2lkdGgpICYmIENvbnZlcnRlcjo6aWRlbnRpdHk7CisgICAgc3RhdGlj
IGNvbnN0IHN0ZDo6c2l6ZV90IGZpbmFsU2l6ZSA9IFdpZGVuUnVsZTo6ZmluYWxXaWR0aCAqIHNp
emVvZihPdXRwdXRUeXBlKTsKKworICAgIHN0YXRpYyB2b2lkIGNvbnZlcnRBcnJheShjb25zdCBJ
bnB1dFR5cGUgKmluLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90IG4sIE91dHB1dFR5
cGUgKm91dCkKKyAgICB7CisgICAgICAgIGZvciAoc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBuOyBp
KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IElucHV0VHlwZSAqZWluID0gcG9pbnRl
ckFkZEJ5dGVzKGluLCBpICogc3RyaWRlKTsKKworICAgICAgICAgICAgY29weUNvbXBvbmVudChv
dXQsIGVpbiwgMCwgc3RhdGljX2Nhc3Q8T3V0cHV0VHlwZT4oRGVmYXVsdFZhbHVlUnVsZTo6emVy
bygpKSk7CisgICAgICAgICAgICBjb3B5Q29tcG9uZW50KG91dCwgZWluLCAxLCBzdGF0aWNfY2Fz
dDxPdXRwdXRUeXBlPihEZWZhdWx0VmFsdWVSdWxlOjp6ZXJvKCkpKTsKKyAgICAgICAgICAgIGNv
cHlDb21wb25lbnQob3V0LCBlaW4sIDIsIHN0YXRpY19jYXN0PE91dHB1dFR5cGU+KERlZmF1bHRW
YWx1ZVJ1bGU6Onplcm8oKSkpOworICAgICAgICAgICAgY29weUNvbXBvbmVudChvdXQsIGVpbiwg
Mywgc3RhdGljX2Nhc3Q8T3V0cHV0VHlwZT4oRGVmYXVsdFZhbHVlUnVsZTo6b25lKCkpKTsKKwor
ICAgICAgICAgICAgb3V0ICs9IFdpZGVuUnVsZTo6ZmluYWxXaWR0aDsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHN0YXRpYyB2b2lkIGNvbnZlcnRBcnJheShjb25zdCB2b2lkICppbiwgc3RkOjpz
aXplX3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBuLCB2b2lkICpvdXQpCisgICAgeworICAgICAgICBy
ZXR1cm4gY29udmVydEFycmF5KHN0YXRpY19jYXN0PGNvbnN0IElucHV0VHlwZSo+KGluKSwgc3Ry
aWRlLCBuLCBzdGF0aWNfY2FzdDxPdXRwdXRUeXBlKj4ob3V0KSk7CisgICAgfQorCisgIHByaXZh
dGU6CisgICAgLy8gQWR2YW5jZSB0aGUgZ2l2ZW4gcG9pbnRlciBieSBhIG51bWJlciBvZiBieXRl
cyAobm90IHBvaW50ZWQtdG8gZWxlbWVudHMpLgorICAgIHRlbXBsYXRlIDxjbGFzcyBUPgorICAg
IHN0YXRpYyBUICpwb2ludGVyQWRkQnl0ZXMoVCAqYmFzZVB0ciwgc3RkOjpzaXplX3QgbnVtQnl0
ZXMpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUICo+KHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90PihiYXNlUHRyKSArIG51bUJ5dGVzKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgdm9pZCBjb3B5Q29tcG9uZW50KE91dHB1dFR5cGUgKm91dCwgY29uc3QgSW5wdXRUeXBl
ICppbiwgc3RkOjpzaXplX3QgZWxlbWVudGluZGV4LCBPdXRwdXRUeXBlIGRlZmF1bHR2YWx1ZSkK
KyAgICB7CisgICAgICAgIGlmIChXaWRlblJ1bGU6OmZpbmFsV2lkdGggPiBlbGVtZW50aW5kZXgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChXaWRlblJ1bGU6OmluaXRpYWxXaWR0aCA+IGVs
ZW1lbnRpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRbZWxlbWVudGlu
ZGV4XSA9IENvbnZlcnRlcjo6Y29udmVydChpbltlbGVtZW50aW5kZXhdKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRb
ZWxlbWVudGluZGV4XSA9IGRlZmF1bHR2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KK307CisKK30KKworI2VuZGlmICAgLy8gTElCR0xFU1YyX1ZFUlRFWENPTlZFUlNJT05f
SF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvcmVuZGVyZXIxMV91dGlscy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL3JlbmRlcmVyMTFfdXRpbHMuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAxMzgwMGRhMjU4Y2U1OTM5NzM1NDc4ZDVlYTg3ZmQxMzdjYjhhMDgxLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXIxMV91dGlscy5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw2ODggKzAsMCBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgi
Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgotLy8KLQotLy8gcmVuZGVyZXIxMV91dGlscy5jcHA6IENvbnZlcnNpb24gZnVu
Y3Rpb25zIGFuZCBvdGhlciB1dGlsaXR5IHJvdXRpbmVzCi0vLyBzcGVjaWZpYyB0byB0aGUgRDNE
MTEgcmVuZGVyZXIuCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXIxMV91
dGlscy5oIgotCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0KLW5hbWVzcGFjZSBnbF9kM2Qx
MQotewotCi1EM0QxMV9CTEVORCBDb252ZXJ0QmxlbmRGdW5jKEdMZW51bSBnbEJsZW5kLCBib29s
IGlzQWxwaGEpCi17Ci0gICAgRDNEMTFfQkxFTkQgZDNkQmxlbmQgPSBEM0QxMV9CTEVORF9aRVJP
OwotCi0gICAgc3dpdGNoIChnbEJsZW5kKQotICAgIHsKLSAgICAgIGNhc2UgR0xfWkVSTzogICAg
ICAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzRDExX0JMRU5EX1pFUk87ICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9PTkU6ICAgICAgICAgICAgICAgICAgICAgIGQzZEJs
ZW5kID0gRDNEMTFfQkxFTkRfT05FOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX1NSQ19DT0xPUjogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSAoaXNBbHBoYSA/IEQzRDEx
X0JMRU5EX1NSQ19BTFBIQSA6IEQzRDExX0JMRU5EX1NSQ19DT0xPUik7ICAgICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19DT0xPUjogICAgICBkM2RCbGVuZCA9IChp
c0FscGhhID8gRDNEMTFfQkxFTkRfSU5WX1NSQ19BTFBIQSA6IEQzRDExX0JMRU5EX0lOVl9TUkNf
Q09MT1IpOyAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9EU1RfQ09MT1I6ICAgICAgICAgICAgICAg
IGQzZEJsZW5kID0gKGlzQWxwaGEgPyBEM0QxMV9CTEVORF9ERVNUX0FMUEhBIDogRDNEMTFfQkxF
TkRfREVTVF9DT0xPUik7ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX09ORV9NSU5VU19E
U1RfQ09MT1I6ICAgICAgZDNkQmxlbmQgPSAoaXNBbHBoYSA/IEQzRDExX0JMRU5EX0lOVl9ERVNU
X0FMUEhBIDogRDNEMTFfQkxFTkRfSU5WX0RFU1RfQ09MT1IpOyBicmVhazsKLSAgICAgIGNhc2Ug
R0xfU1JDX0FMUEhBOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzRDExX0JMRU5EX1NSQ19B
TFBIQTsgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JDX0FMUEhB
OiAgICAgIGQzZEJsZW5kID0gRDNEMTFfQkxFTkRfSU5WX1NSQ19BTFBIQTsgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0RTVF9BTFBIQTogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0Qx
MV9CTEVORF9ERVNUX0FMUEhBOyAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfT05FX01J
TlVTX0RTVF9BTFBIQTogICAgICBkM2RCbGVuZCA9IEQzRDExX0JMRU5EX0lOVl9ERVNUX0FMUEhB
OyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DT05TVEFOVF9DT0xPUjogICAgICAgICAgIGQz
ZEJsZW5kID0gRDNEMTFfQkxFTkRfQkxFTkRfRkFDVE9SOyAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUjogZDNkQmxlbmQgPSBEM0QxMV9CTEVORF9J
TlZfQkxFTkRfRkFDVE9SOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ09OU1RBTlRfQUxQSEE6
ICAgICAgICAgICBkM2RCbGVuZCA9IEQzRDExX0JMRU5EX0JMRU5EX0ZBQ1RPUjsgICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEE6IGQzZEJsZW5kID0g
RDNEMTFfQkxFTkRfSU5WX0JMRU5EX0ZBQ1RPUjsgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NS
Q19BTFBIQV9TQVRVUkFURTogICAgICAgZDNkQmxlbmQgPSBEM0QxMV9CTEVORF9TUkNfQUxQSEFf
U0FUOyAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGQzZEJsZW5kOwotfQotCi1EM0QxMV9CTEVORF9PUCBDb252ZXJ0QmxlbmRP
cChHTGVudW0gZ2xCbGVuZE9wKQotewotICAgIEQzRDExX0JMRU5EX09QIGQzZEJsZW5kT3AgPSBE
M0QxMV9CTEVORF9PUF9BREQ7Ci0KLSAgICBzd2l0Y2ggKGdsQmxlbmRPcCkKLSAgICB7Ci0gICAg
ICBjYXNlIEdMX0ZVTkNfQUREOiAgICAgICAgICAgICAgZDNkQmxlbmRPcCA9IEQzRDExX0JMRU5E
X09QX0FERDsgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GVU5DX1NVQlRSQUNUOiAg
ICAgICAgIGQzZEJsZW5kT3AgPSBEM0QxMV9CTEVORF9PUF9TVUJUUkFDVDsgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUOiBkM2RCbGVuZE9wID0gRDNEMTFf
QkxFTkRfT1BfUkVWX1NVQlRSQUNUOyAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOwotICAgIH0KLQotICAgIHJldHVybiBkM2RCbGVuZE9wOwotfQotCi1VSU5UOCBDb252ZXJ0
Q29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpCi17
Ci0gICAgVUlOVDggbWFzayA9IDA7Ci0gICAgaWYgKHJlZCkKLSAgICB7Ci0gICAgICAgIG1hc2sg
fD0gRDNEMTFfQ09MT1JfV1JJVEVfRU5BQkxFX1JFRDsKLSAgICB9Ci0gICAgaWYgKGdyZWVuKQot
ICAgIHsKLSAgICAgICAgbWFzayB8PSBEM0QxMV9DT0xPUl9XUklURV9FTkFCTEVfR1JFRU47Ci0g
ICAgfQotICAgIGlmIChibHVlKQotICAgIHsKLSAgICAgICAgbWFzayB8PSBEM0QxMV9DT0xPUl9X
UklURV9FTkFCTEVfQkxVRTsKLSAgICB9Ci0gICAgaWYgKGFscGhhKQotICAgIHsKLSAgICAgICAg
bWFzayB8PSBEM0QxMV9DT0xPUl9XUklURV9FTkFCTEVfQUxQSEE7Ci0gICAgfQotICAgIHJldHVy
biBtYXNrOwotfQotCi1EM0QxMV9DVUxMX01PREUgQ29udmVydEN1bGxNb2RlKGJvb2wgY3VsbEVu
YWJsZWQsIEdMZW51bSBjdWxsTW9kZSkKLXsKLSAgICBEM0QxMV9DVUxMX01PREUgY3VsbCA9IEQz
RDExX0NVTExfTk9ORTsKLQotICAgIGlmIChjdWxsRW5hYmxlZCkKLSAgICB7Ci0gICAgICAgIHN3
aXRjaCAoY3VsbE1vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZST05UOiAgICAg
ICAgICAgIGN1bGwgPSBEM0QxMV9DVUxMX0ZST05UOyAgICBicmVhazsKLSAgICAgICAgICBjYXNl
IEdMX0JBQ0s6ICAgICAgICAgICAgIGN1bGwgPSBEM0QxMV9DVUxMX0JBQ0s7ICAgICBicmVhazsK
LSAgICAgICAgICBjYXNlIEdMX0ZST05UX0FORF9CQUNLOiAgIGN1bGwgPSBEM0QxMV9DVUxMX05P
TkU7ICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGN1bGwgPSBEM0QxMV9DVUxMX05P
TkU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGN1bGw7Ci19Ci0KLUQzRDExX0NPTVBBUklTT05fRlVO
QyBDb252ZXJ0Q29tcGFyaXNvbihHTGVudW0gY29tcGFyaXNvbikKLXsKLSAgICBEM0QxMV9DT01Q
QVJJU09OX0ZVTkMgZDNkQ29tcCA9IEQzRDExX0NPTVBBUklTT05fTkVWRVI7Ci0gICAgc3dpdGNo
IChjb21wYXJpc29uKQotICAgIHsKLSAgICAgIGNhc2UgR0xfTkVWRVI6ICAgIGQzZENvbXAgPSBE
M0QxMV9DT01QQVJJU09OX05FVkVSOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FM
V0FZUzogICBkM2RDb21wID0gRDNEMTFfQ09NUEFSSVNPTl9BTFdBWVM7ICAgICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9MRVNTOiAgICAgZDNkQ29tcCA9IEQzRDExX0NPTVBBUklTT05fTEVT
UzsgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTEVRVUFMOiAgIGQzZENvbXAgPSBE
M0QxMV9DT01QQVJJU09OX0xFU1NfRVFVQUw7ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0VR
VUFMOiAgICBkM2RDb21wID0gRDNEMTFfQ09NUEFSSVNPTl9FUVVBTDsgICAgICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9HUkVBVEVSOiAgZDNkQ29tcCA9IEQzRDExX0NPTVBBUklTT05fR1JF
QVRFUjsgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfR0VRVUFMOiAgIGQzZENvbXAgPSBE
M0QxMV9DT01QQVJJU09OX0dSRUFURVJfRVFVQUw7ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX05P
VEVRVUFMOiBkM2RDb21wID0gRDNEMTFfQ09NUEFSSVNPTl9OT1RfRVFVQUw7ICAgICAgIGJyZWFr
OwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZDNk
Q29tcDsKLX0KLQotRDNEMTFfREVQVEhfV1JJVEVfTUFTSyBDb252ZXJ0RGVwdGhNYXNrKGJvb2wg
ZGVwdGhXcml0ZUVuYWJsZWQpCi17Ci0gICAgcmV0dXJuIGRlcHRoV3JpdGVFbmFibGVkID8gRDNE
MTFfREVQVEhfV1JJVEVfTUFTS19BTEwgOiBEM0QxMV9ERVBUSF9XUklURV9NQVNLX1pFUk87Ci19
Ci0KLVVJTlQ4IENvbnZlcnRTdGVuY2lsTWFzayhHTHVpbnQgc3RlbmNpbG1hc2spCi17Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PFVJTlQ4PihzdGVuY2lsbWFzayk7Ci19Ci0KLUQzRDExX1NURU5D
SUxfT1AgQ29udmVydFN0ZW5jaWxPcChHTGVudW0gc3RlbmNpbE9wKQotewotICAgIEQzRDExX1NU
RU5DSUxfT1AgZDNkU3RlbmNpbE9wID0gRDNEMTFfU1RFTkNJTF9PUF9LRUVQOwotCi0gICAgc3dp
dGNoIChzdGVuY2lsT3ApCi0gICAgewotICAgICAgY2FzZSBHTF9aRVJPOiAgICAgIGQzZFN0ZW5j
aWxPcCA9IEQzRDExX1NURU5DSUxfT1BfWkVSTzsgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
S0VFUDogICAgICBkM2RTdGVuY2lsT3AgPSBEM0QxMV9TVEVOQ0lMX09QX0tFRVA7ICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX1JFUExBQ0U6ICAgZDNkU3RlbmNpbE9wID0gRDNEMTFfU1RFTkNJ
TF9PUF9SRVBMQUNFOyAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9JTkNSOiAgICAgIGQzZFN0ZW5j
aWxPcCA9IEQzRDExX1NURU5DSUxfT1BfSU5DUl9TQVQ7ICBicmVhazsKLSAgICAgIGNhc2UgR0xf
REVDUjogICAgICBkM2RTdGVuY2lsT3AgPSBEM0QxMV9TVEVOQ0lMX09QX0RFQ1JfU0FUOyAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX0lOVkVSVDogICAgZDNkU3RlbmNpbE9wID0gRDNEMTFfU1RFTkNJ
TF9PUF9JTlZFUlQ7ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9JTkNSX1dSQVA6IGQzZFN0ZW5j
aWxPcCA9IEQzRDExX1NURU5DSUxfT1BfSU5DUjsgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
REVDUl9XUkFQOiBkM2RTdGVuY2lsT3AgPSBEM0QxMV9TVEVOQ0lMX09QX0RFQ1I7ICAgICAgYnJl
YWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBk
M2RTdGVuY2lsT3A7Ci19Ci0KLUQzRDExX0ZJTFRFUiBDb252ZXJ0RmlsdGVyKEdMZW51bSBtaW5G
aWx0ZXIsIEdMZW51bSBtYWdGaWx0ZXIsIGZsb2F0IG1heEFuaXNvdHJvcHkpCi17Ci0gICAgaWYg
KG1heEFuaXNvdHJvcHkgPiAxLjBmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEQzRDExX0VOQ09E
RV9BTklTT1RST1BJQ19GSUxURVIoZmFsc2UpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAg
ICAgICBEM0QxMV9GSUxURVJfVFlQRSBkeE1pbiA9IEQzRDExX0ZJTFRFUl9UWVBFX1BPSU5UOwot
ICAgICAgICBEM0QxMV9GSUxURVJfVFlQRSBkeE1pcCA9IEQzRDExX0ZJTFRFUl9UWVBFX1BPSU5U
OwotICAgICAgICBzd2l0Y2ggKG1pbkZpbHRlcikKLSAgICAgICAgewotICAgICAgICAgIGNhc2Ug
R0xfTkVBUkVTVDogICAgICAgICAgICAgICAgZHhNaW4gPSBEM0QxMV9GSUxURVJfVFlQRV9QT0lO
VDsgIGR4TWlwID0gRDNEMTFfRklMVEVSX1RZUEVfUE9JTlQ7ICBicmVhazsKLSAgICAgICAgICBj
YXNlIEdMX0xJTkVBUjogICAgICAgICAgICAgICAgIGR4TWluID0gRDNEMTFfRklMVEVSX1RZUEVf
TElORUFSOyBkeE1pcCA9IEQzRDExX0ZJTFRFUl9UWVBFX1BPSU5UOyAgYnJlYWs7Ci0gICAgICAg
ICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOiBkeE1pbiA9IEQzRDExX0ZJTFRFUl9U
WVBFX1BPSU5UOyAgZHhNaXAgPSBEM0QxMV9GSUxURVJfVFlQRV9QT0lOVDsgIGJyZWFrOwotICAg
ICAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOiAgZHhNaW4gPSBEM0QxMV9GSUxU
RVJfVFlQRV9MSU5FQVI7IGR4TWlwID0gRDNEMTFfRklMVEVSX1RZUEVfUE9JTlQ7ICBicmVhazsK
LSAgICAgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjogIGR4TWluID0gRDNEMTFf
RklMVEVSX1RZUEVfUE9JTlQ7ICBkeE1pcCA9IEQzRDExX0ZJTFRFUl9UWVBFX0xJTkVBUjsgYnJl
YWs7Ci0gICAgICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUjogICBkeE1pbiA9IEQz
RDExX0ZJTFRFUl9UWVBFX0xJTkVBUjsgZHhNaXAgPSBEM0QxMV9GSUxURVJfVFlQRV9MSU5FQVI7
IGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEQzRDExX0ZJTFRFUl9UWVBFIGR4TWFnID0g
RDNEMTFfRklMVEVSX1RZUEVfUE9JTlQ7Ci0gICAgICAgIHN3aXRjaCAobWFnRmlsdGVyKQotICAg
ICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9ORUFSRVNUOiBkeE1hZyA9IEQzRDExX0ZJTFRFUl9U
WVBFX1BPSU5UOyAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9MSU5FQVI6ICBkeE1hZyA9IEQz
RDExX0ZJTFRFUl9UWVBFX0xJTkVBUjsgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogICAgICAg
ICBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIEQzRDExX0VOQ09E
RV9CQVNJQ19GSUxURVIoZHhNaW4sIGR4TWFnLCBkeE1pcCwgZmFsc2UpOwotICAgIH0KLX0KLQot
RDNEMTFfVEVYVFVSRV9BRERSRVNTX01PREUgQ29udmVydFRleHR1cmVXcmFwKEdMZW51bSB3cmFw
KQotewotICAgIHN3aXRjaCAod3JhcCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1JFUEVBVDogICAg
ICAgICAgcmV0dXJuIEQzRDExX1RFWFRVUkVfQUREUkVTU19XUkFQOwotICAgICAgY2FzZSBHTF9D
TEFNUF9UT19FREdFOiAgIHJldHVybiBEM0QxMV9URVhUVVJFX0FERFJFU1NfQ0xBTVA7Ci0gICAg
ICBjYXNlIEdMX01JUlJPUkVEX1JFUEVBVDogcmV0dXJuIEQzRDExX1RFWFRVUkVfQUREUkVTU19N
SVJST1I7Ci0gICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gRDNEMTFfVEVYVFVSRV9BRERSRVNTX1dSQVA7Ci19Ci0KLUZMT0FU
IENvbnZlcnRNaW5MT0QoR0xlbnVtIG1pbkZpbHRlciwgdW5zaWduZWQgaW50IGxvZE9mZnNldCkK
LXsKLSAgICByZXR1cm4gKG1pbkZpbHRlciA9PSBHTF9ORUFSRVNUIHx8IG1pbkZpbHRlciA9PSBH
TF9MSU5FQVIpID8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGxvZE9mZnNldCkgOiAtRkxUX01BWDsKLX0K
LQotRkxPQVQgQ29udmVydE1heExPRChHTGVudW0gbWluRmlsdGVyLCB1bnNpZ25lZCBpbnQgbG9k
T2Zmc2V0KQotewotICAgIHJldHVybiAobWluRmlsdGVyID09IEdMX05FQVJFU1QgfHwgbWluRmls
dGVyID09IEdMX0xJTkVBUikgPyBzdGF0aWNfY2FzdDxmbG9hdD4obG9kT2Zmc2V0KSA6IEZMVF9N
QVg7Ci19Ci0KLX0KLQotbmFtZXNwYWNlIGQzZDExX2dsCi17Ci0KLUdMZW51bSBDb252ZXJ0QmFj
a0J1ZmZlckZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQp
Ci0gICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STTogcmV0dXJuIEdM
X1JHQkE4X09FUzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06IHJldHVy
biBHTF9CR1JBOF9FWFQ7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwot
ICAgIH0KLQotICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Ci19Ci0KLUdMZW51bSBDb252ZXJ0RGVw
dGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1h
dCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1VOS05PV046IHJldHVybiBHTF9OT05F
OwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZfVU5PUk06IHJldHVybiBHTF9ERVBUSF9DT01Q
T05FTlQxNjsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ6IHJldHVy
biBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVB
Q0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwot
fQotCi1HTGVudW0gQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQp
Ci17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
OEc4UjhBOF9VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0JHUkE4X0VYVDsKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk06Ci0gICAgICAgIHJldHVybiBHTF9SR0JBOF9PRVM7
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0RF
UFRIX0NPTVBPTkVOVDE2OwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlO
VDoKLSAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotICAgICAgZGVmYXVs
dDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gR0xfUkdCQThf
T0VTOwotfQotCi1HTGVudW0gQ29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChEWEdJX0ZPUk1B
VCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SOEc4QjhBOF9VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX1JHQkE4X09FUzsKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQThfVU5PUk06Ci0gICAgICAgIHJldHVybiBHTF9BTFBIQThf
RVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk06Ci0gICAgICAgIHJldHVybiBH
TF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
QkMyX1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19B
TkdMRTsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNOgotICAgICAgICByZXR1cm4g
R0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRTsKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjMyRzMyQjMyQTMyX0ZMT0FUOgotICAgICAgICByZXR1cm4gR0xfUkdCQTMyRl9FWFQ7Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVDoKLSAgICAgICAgcmV0dXJuIEdM
X1JHQjMyRl9FWFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9BVDoK
LSAgICAgICAgcmV0dXJuIEdMX1JHQkExNkZfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
OEc4UjhBOF9VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0JHUkE4X0VYVDsKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjhfVU5PUk06Ci0gICAgICAgIHJldHVybiBHTF9SOF9FWFQ7Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX1I4RzhfVU5PUk06Ci0gICAgICAgIHJldHVybiBHTF9SRzhfRVhUOwot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfRkxPQVQ6Ci0gICAgICAgIHJldHVybiBHTF9SMTZG
X0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X0ZMT0FUOgotICAgICAgICByZXR1
cm4gR0xfUkcxNkZfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZfVU5PUk06Ci0gICAg
ICAgIHJldHVybiBHTF9ERVBUSF9DT01QT05FTlQxNjsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
RDI0X1VOT1JNX1M4X1VJTlQ6Ci0gICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09F
UzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfVU5LTk9XTjoKLSAgICAgICAgcmV0dXJuIEdMX05P
TkU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAg
IHJldHVybiBHTF9SR0JBOF9PRVM7Ci19Ci0KLX0KLQotbmFtZXNwYWNlIGdsX2QzZDExCi17Ci0K
LURYR0lfRk9STUFUIENvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCkKLXsK
LSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1JHQkE0OgotICAgICAg
Y2FzZSBHTF9SR0I1X0ExOgotICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6Ci0gICAgICBjYXNlIEdM
X1JHQjU2NToKLSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZP
Uk1BVF9SOEc4QjhBOF9VTk9STTsKLSAgICAgIGNhc2UgR0xfQkdSQThfRVhUOgotICAgICAgICBy
ZXR1cm4gRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk07Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NP
TVBPTkVOVDE2OgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfRDE2X1VOT1JNOwotICAgICAg
Y2FzZSBHTF9TVEVOQ0lMX0lOREVYODoKLSAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9P
RVM6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDsKLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIERY
R0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOwotfQotCi1EWEdJX0ZPUk1BVCBDb252ZXJ0VGV4dHVy
ZUZvcm1hdChHTGVudW0gaW50ZXJuYWxmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChpbnRlcm5hbGZv
cm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1JHQjU2NToKLSAgICAgIGNhc2UgR0xfUkdCQTQ6
Ci0gICAgICBjYXNlIEdMX1JHQjVfQTE6Ci0gICAgICBjYXNlIEdMX1JHQjhfT0VTOgotICAgICAg
Y2FzZSBHTF9SR0JBOF9PRVM6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRThfRVhUOgotICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQ6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1B
VF9SOEc4QjhBOF9VTk9STTsKLSAgICAgIGNhc2UgR0xfQUxQSEE4X0VYVDoKLSAgICAgICAgcmV0
dXJuIERYR0lfRk9STUFUX0E4X1VOT1JNOwotICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9T
M1RDX0RYVDFfRVhUOgotICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VY
VDoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0JDMV9VTk9STTsKLSAgICAgIGNhc2UgR0xf
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKLSAgICAgICAgcmV0dXJuIERYR0lfRk9S
TUFUX0JDMl9VTk9STTsKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9B
TkdMRToKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0JDM19VTk9STTsKLSAgICAgIGNhc2Ug
R0xfUkdCQTMyRl9FWFQ6Ci0gICAgICBjYXNlIEdMX0FMUEhBMzJGX0VYVDoKLSAgICAgIGNhc2Ug
R0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVDoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1Iz
MkczMkIzMkEzMl9GTE9BVDsKLSAgICAgIGNhc2UgR0xfUkdCMzJGX0VYVDoKLSAgICAgIGNhc2Ug
R0xfTFVNSU5BTkNFMzJGX0VYVDoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1IzMkczMkIz
MkEzMl9GTE9BVDsKLSAgICAgIGNhc2UgR0xfUkdCQTE2Rl9FWFQ6Ci0gICAgICBjYXNlIEdMX0FM
UEhBMTZGX0VYVDoKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVDoKLSAgICAg
IGNhc2UgR0xfUkdCMTZGX0VYVDoKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZGX0VYVDoKLSAg
ICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9BVDsKLSAgICAgIGNhc2Ug
R0xfQkdSQThfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk07
Ci0gICAgICBjYXNlIEdMX1I4X0VYVDoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1I4X1VO
T1JNOwotICAgICAgY2FzZSBHTF9SRzhfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRf
UjhHOF9VTk9STTsKLSAgICAgIGNhc2UgR0xfUjE2Rl9FWFQ6Ci0gICAgICAgIHJldHVybiBEWEdJ
X0ZPUk1BVF9SMTZfRkxPQVQ7Ci0gICAgICBjYXNlIEdMX1JHMTZGX0VYVDoKLSAgICAgICAgcmV0
dXJuIERYR0lfRk9STUFUX1IxNkcxNl9GTE9BVDsKLSAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9O
RU5UMTY6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9EMTZfVU5PUk07Ci0gICAgICBjYXNl
IEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUzoKLSAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lM
OF9PRVM6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDsKLSAg
ICAgIGNhc2UgR0xfTk9ORToKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1VOS05PV047Ci0g
ICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVy
biBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STTsKLX0KLQotfQotCi1uYW1lc3BhY2UgZDNkMTEK
LXsKLQotdm9pZCBTZXRQb3NpdGlvblRleENvb3JkVmVydGV4KFBvc2l0aW9uVGV4Q29vcmRWZXJ0
ZXgqIHZlcnRleCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgdSwgZmxvYXQgdikKLXsKLSAgICB2
ZXJ0ZXgtPnggPSB4OwotICAgIHZlcnRleC0+eSA9IHk7Ci0gICAgdmVydGV4LT51ID0gdTsKLSAg
ICB2ZXJ0ZXgtPnYgPSB2OwotfQotCi12b2lkIFNldFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleChQ
b3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgqIHZlcnRleCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQg
eiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpDb2xvciAmY29s
b3IpCi17Ci0gICAgdmVydGV4LT54ID0geDsKLSAgICB2ZXJ0ZXgtPnkgPSB5OwotICAgIHZlcnRl
eC0+eiA9IHo7Ci0gICAgdmVydGV4LT5yID0gY29sb3IucmVkOwotICAgIHZlcnRleC0+ZyA9IGNv
bG9yLmdyZWVuOwotICAgIHZlcnRleC0+YiA9IGNvbG9yLmJsdWU7Ci0gICAgdmVydGV4LT5hID0g
Y29sb3IuYWxwaGE7Ci19Ci0KLXNpemVfdCBDb21wdXRlUGl4ZWxTaXplQml0cyhEWEdJX0ZPUk1B
VCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SMV9VTk9STToKLSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfQThfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1NJTlQ6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX1I4X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOF9UWVBF
TEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjhfVU5PUk06Ci0gICAgICAgIHJldHVybiA4OwotCi0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0I1RzVSNUExX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CNUc2UjVfVU5PUk06
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjE2X0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfU0lOVDoKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfUjE2X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfVFlQ
RUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNl9VSU5UOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SMTZfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfU0lOVDoKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjhHOF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9VSU5UOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNOgotICAgICAgICByZXR1cm4gMTY7Ci0KLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4WDhfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0I4RzhSOFg4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhYOF9VTk9S
TV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDoKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJf
RkxPQVRfUzhYMjRfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRzhSOF9HOEI4X1VOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTBHMTBCMTBfWFJfQklBU19BMl9VTk9STToKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjEwRzEwQjEwQTJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX1IxMEcxMEIxMEEyX1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxMEcx
MEIxMEEyX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTFHMTFCMTBfRkxPQVQ6Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9GTE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjE2RzE2X1NJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9TTk9STToKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SMTZHMTZfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X1VOT1JNOgot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMjRfVU5PUk1fWDhfVFlQRUxFU1M6Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX1IyNEc4X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJf
RkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMl9GTE9BVF9YOFgyNF9UWVBFTEVTUzoK
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyX1NJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X1IzMl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyX1VJTlQ6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX1I4RzhfQjhHOF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjhHOEI4QThfU0lOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfU05PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SOEc4QjhBOF9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9V
Tk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk1fU1JHQjoKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0I4RzhSOEE4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9S
TV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOUc5QjlFNV9TSEFSRURFWFA6Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX1gyNF9UWVBFTEVTU19HOF9VSU5UOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9YMzJfVFlQRUxFU1NfRzhYMjRfVUlOVDoKLSAgICAgICAgcmV0dXJuIDMyOwotCi0g
ICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9BVDoKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfUjE2RzE2QjE2QTE2X1NJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcx
NkIxNkExNl9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1RZUEVM
RVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfVUlOVDoKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9SMzJHMzJfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMl9TSU5UOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1IzMkczMl9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHOFgyNF9UWVBFTEVT
UzoKLSAgICAgICAgcmV0dXJuIDY0OwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIz
Ml9GTE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX1NJTlQ6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjMyRzMyQjMyX1VJTlQ6Ci0gICAgICAgIHJldHVybiA5NjsKLQotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkcz
MkIzMkEzMl9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfVFlQRUxF
U1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9VSU5UOgotICAgICAgICBy
ZXR1cm4gMTI4OwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9UWVBFTEVTUzoKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFf
VU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1NOT1JNOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzRfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9V
Tk9STToKLSAgICAgICAgcmV0dXJuIDQ7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1RZ
UEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk06Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDMl9VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVFlQ
RUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STToKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkMzX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9TTk9S
TToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9CQzVfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfU0YxNjoKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkM2SF9VRjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVFlQRUxFU1M6Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3
X1VOT1JNX1NSR0I6Ci0gICAgICAgIHJldHVybiA4OwotCi0gICAgICBkZWZhdWx0OgotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLXNpemVfdCBDb21wdXRlQmxvY2tTaXplQml0cyhEWEdJ
X0ZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzFfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9V
Tk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX0JDNF9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1RZUEVM
RVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVU5PUk06Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDMl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNOgot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfQkMzX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzVfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9UWVBFTEVTUzoKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzZIX1NGMTY6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVFlQRUxFU1M6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0JDNkhfVUYxNjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1RZ
UEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk06Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDN19VTk9STV9TUkdCOgotICAgICAgICByZXR1cm4gQ29tcHV0ZVBpeGVsU2l6
ZUJpdHMoZm9ybWF0KSAqIDE2OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUo
KTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1ib29sIElzQ29tcHJlc3NlZChEWEdJ
X0ZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzFfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9V
Tk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX0JDNF9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1RZUEVM
RVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVU5PUk06Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDMl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNOgot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfQkMzX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzVfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9UWVBFTEVTUzoKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzZIX1NGMTY6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVFlQRUxFU1M6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0JDNkhfVUYxNjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1RZ
UEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk06Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDN19VTk9STV9TUkdCOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfVU5LTk9XTjoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLX0KLQotdW5zaWduZWQgaW50IEdldFRleHR1cmVGb3JtYXREaW1lbnNpb25BbGlnbm1lbnQo
RFhHSV9GT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkMxX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzFfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9STV9TUkdCOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9CQzRfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9U
WVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1VOT1JNOgotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9CQzJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9S
TToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDM19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkM1X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfVFlQRUxFU1M6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkM2SF9TRjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1RZUEVMRVNTOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1VGMTY6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JD
N19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1VOT1JNOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk1fU1JHQjoKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX1VOS05PV046Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAg
IHJldHVybiAxOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotfQot
Ci1ib29sIElzRGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAgICBz
d2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QzMl9GTE9BVF9T
OFgyNF9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVQ6Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9E
MTZfVU5PUk06Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotRFhHSV9GT1JNQVQgR2V0RGVwdGhUZXh0dXJlRm9y
bWF0KERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0QzMl9GTE9BVF9TOFgyNF9VSU5UOiByZXR1cm4gRFhHSV9G
T1JNQVRfUjMyRzhYMjRfVFlQRUxFU1M7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QzMl9GTE9B
VDogICAgICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjMyX1RZUEVMRVNTOwotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDogICAgcmV0dXJuIERYR0lfRk9STUFUX1Iy
NEc4X1RZUEVMRVNTOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZfVU5PUk06ICAgICAgICAg
ICAgcmV0dXJuIERYR0lfRk9STUFUX1IxNl9UWVBFTEVTUzsKLSAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7ICAgICAgICAgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9VTktOT1dOOwotICAg
IH0KLX0KLQotRFhHSV9GT1JNQVQgR2V0RGVwdGhTaGFkZXJSZXNvdXJjZUZvcm1hdChEWEdJX0ZP
Uk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9EMzJfRkxPQVRfUzhYMjRfVUlOVDogcmV0dXJuIERYR0lfRk9STUFUX1IzMl9G
TE9BVF9YOFgyNF9UWVBFTEVTUzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FUOiAg
ICAgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMzJfVUlOVDsKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ6ICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMjRfVU5PUk1f
WDhfVFlQRUxFU1M7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9STTogICAgICAgICAg
ICByZXR1cm4gRFhHSV9GT1JNQVRfUjE2X1VOT1JNOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsgICAgICAgICAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1VOS05PV047Ci0gICAgfQot
fQotCi1IUkVTVUxUIFNldERlYnVnTmFtZShJRDNEMTFEZXZpY2VDaGlsZCAqcmVzb3VyY2UsIGNv
bnN0IGNoYXIgKm5hbWUpCi17Ci0jaWYgZGVmaW5lZChfREVCVUcpCi0gICAgcmV0dXJuIHJlc291
cmNlLT5TZXRQcml2YXRlRGF0YShXS1BESURfRDNERGVidWdPYmplY3ROYW1lLCBzdHJsZW4obmFt
ZSksIG5hbWUpOwotI2Vsc2UKLSAgICByZXR1cm4gU19PSzsKLSNlbmRpZgotfQotCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3Jl
bmRlcmVyMTFfdXRpbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvcmVuZGVyZXIxMV91dGlscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAxYmM0OGMxYTEzNWE1ZDg4YTg5YmQ1Njg1NjlmZDZlOWRkNjc3M2VlLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXIxMV91dGlscy5oCisrKyAvZGV2L251bGwK
QEAgLTEsOTUgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIHJlbmRlcmVyMTFfdXRpbHMuaDog
Q29udmVyc2lvbiBmdW5jdGlvbnMgYW5kIG90aGVyIHV0aWxpdHkgcm91dGluZXMKLS8vIHNwZWNp
ZmljIHRvIHRoZSBEM0QxMSByZW5kZXJlci4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJf
UkVOREVSRVIxMV9VVElMU19ICi0jZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjEx
X1VUSUxTX0gKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgiCi0KLW5hbWVzcGFj
ZSBnbF9kM2QxMQotewotCi1EM0QxMV9CTEVORCBDb252ZXJ0QmxlbmRGdW5jKEdMZW51bSBnbEJs
ZW5kLCBib29sIGlzQWxwaGEpOwotRDNEMTFfQkxFTkRfT1AgQ29udmVydEJsZW5kT3AoR0xlbnVt
IGdsQmxlbmRPcCk7Ci1VSU5UOCBDb252ZXJ0Q29sb3JNYXNrKGJvb2wgbWFza1JlZCwgYm9vbCBt
YXNrR3JlZW4sIGJvb2wgbWFza0JsdWUsIGJvb2wgbWFza0FscGhhKTsKLQotRDNEMTFfQ1VMTF9N
T0RFIENvbnZlcnRDdWxsTW9kZShib29sIGN1bGxFbmFibGVkLCBHTGVudW0gY3VsbE1vZGUpOwot
Ci1EM0QxMV9DT01QQVJJU09OX0ZVTkMgQ29udmVydENvbXBhcmlzb24oR0xlbnVtIGNvbXBhcmlz
b24pOwotRDNEMTFfREVQVEhfV1JJVEVfTUFTSyBDb252ZXJ0RGVwdGhNYXNrKGJvb2wgZGVwdGhX
cml0ZUVuYWJsZWQpOwotVUlOVDggQ29udmVydFN0ZW5jaWxNYXNrKEdMdWludCBzdGVuY2lsbWFz
ayk7Ci1EM0QxMV9TVEVOQ0lMX09QIENvbnZlcnRTdGVuY2lsT3AoR0xlbnVtIHN0ZW5jaWxPcCk7
Ci0KLUQzRDExX0ZJTFRFUiBDb252ZXJ0RmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIsIEdMZW51bSBt
YWdGaWx0ZXIsIGZsb2F0IG1heEFuaXNvdHJvcHkpOwotRDNEMTFfVEVYVFVSRV9BRERSRVNTX01P
REUgQ29udmVydFRleHR1cmVXcmFwKEdMZW51bSB3cmFwKTsKLUZMT0FUIENvbnZlcnRNaW5MT0Qo
R0xlbnVtIG1pbkZpbHRlciwgdW5zaWduZWQgaW50IGxvZE9mZnNldCk7Ci1GTE9BVCBDb252ZXJ0
TWF4TE9EKEdMZW51bSBtaW5GaWx0ZXIsIHVuc2lnbmVkIGludCBsb2RPZmZzZXQpOwotCi1EWEdJ
X0ZPUk1BVCBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdMZW51bSBmb3JtYXQpOwotRFhHSV9G
T1JNQVQgQ29udmVydFRleHR1cmVGb3JtYXQoR0xlbnVtIGZvcm1hdCk7Ci19Ci0KLW5hbWVzcGFj
ZSBkM2QxMV9nbAotewotCi1HTGVudW0gQ29udmVydEJhY2tCdWZmZXJGb3JtYXQoRFhHSV9GT1JN
QVQgZm9ybWF0KTsKLUdMZW51bSBDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFU
IGZvcm1hdCk7Ci1HTGVudW0gQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChEWEdJX0ZPUk1BVCBm
b3JtYXQpOwotR0xlbnVtIENvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoRFhHSV9GT1JNQVQg
Zm9ybWF0KTsKLQotfQotCi1uYW1lc3BhY2UgZDNkMTEKLXsKLQotc3RydWN0IFBvc2l0aW9uVGV4
Q29vcmRWZXJ0ZXgKLXsKLSAgICBmbG9hdCB4LCB5OwotICAgIGZsb2F0IHUsIHY7Ci19Owotdm9p
ZCBTZXRQb3NpdGlvblRleENvb3JkVmVydGV4KFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgqIHZlcnRl
eCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgdSwgZmxvYXQgdik7Ci0KLXN0cnVjdCBQb3NpdGlv
bkRlcHRoQ29sb3JWZXJ0ZXgKLXsKLSAgICBmbG9hdCB4LCB5LCB6OwotICAgIGZsb2F0IHIsIGcs
IGIsIGE7Ci19Owotdm9pZCBTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgoUG9zaXRpb25EZXB0
aENvbG9yVmVydGV4KiB2ZXJ0ZXgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6Q29sb3IgJmNvbG9yKTsKLQotc2l6
ZV90IENvbXB1dGVQaXhlbFNpemVCaXRzKERYR0lfRk9STUFUIGZvcm1hdCk7Ci1zaXplX3QgQ29t
cHV0ZUJsb2NrU2l6ZUJpdHMoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLQotYm9vbCBJc0NvbXByZXNz
ZWQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLXVuc2lnbmVkIGludCBHZXRUZXh0dXJlRm9ybWF0RGlt
ZW5zaW9uQWxpZ25tZW50KERYR0lfRk9STUFUIGZvcm1hdCk7Ci0KLWJvb2wgSXNEZXB0aFN0ZW5j
aWxGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLURYR0lfRk9STUFUIEdldERlcHRoVGV4dHVy
ZUZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpOwotRFhHSV9GT1JNQVQgR2V0RGVwdGhTaGFkZXJS
ZXNvdXJjZUZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpOwotCi1IUkVTVUxUIFNldERlYnVnTmFt
ZShJRDNEMTFEZXZpY2VDaGlsZCAqcmVzb3VyY2UsIGNvbnN0IGNoYXIgKm5hbWUpOwotCi1pbmxp
bmUgYm9vbCBpc0RldmljZUxvc3RFcnJvcihIUkVTVUxUIGVycm9yQ29kZSkKLXsKLSAgICBzd2l0
Y2ggKGVycm9yQ29kZSkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRVJST1JfREVWSUNFX0hVTkc6
Ci0gICAgICBjYXNlIERYR0lfRVJST1JfREVWSUNFX1JFTU9WRUQ6Ci0gICAgICBjYXNlIERYR0lf
RVJST1JfREVWSUNFX1JFU0VUOgotICAgICAgY2FzZSBEWEdJX0VSUk9SX0RSSVZFUl9JTlRFUk5B
TF9FUlJPUjoKLSAgICAgIGNhc2UgRFhHSV9FUlJPUl9OT1RfQ1VSUkVOVExZX0FWQUlMQUJMRToK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotfQotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVS
RVIxMV9VVElMU19ICmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL3JlbmRlcmVyOV91dGlscy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3JlbmRlcmVyOV91dGlscy5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhNzVkNDY1ZTNjZjgwNWY4NjhhYjZjZTI3OTM4MGRlMmU5
YjFhYjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9yZW5kZXJlcjlfdXRp
bHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTAwICswLDAgQEAKLSNpbmNsdWRlICJwcmVjb21w
aWxlZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gcmVuZGVyZXI5X3V0aWxzLmNwcDogQ29u
dmVyc2lvbiBmdW5jdGlvbnMgYW5kIG90aGVyIHV0aWxpdHkgcm91dGluZXMKLS8vIHNwZWNpZmlj
IHRvIHRoZSBEM0Q5IHJlbmRlcmVyLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL3Jl
bmRlcmVyOV91dGlscy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCi0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLQot
bmFtZXNwYWNlIGdsX2QzZDkKLXsKLQotRDNEQ01QRlVOQyBDb252ZXJ0Q29tcGFyaXNvbihHTGVu
dW0gY29tcGFyaXNvbikKLXsKLSAgICBEM0RDTVBGVU5DIGQzZENvbXAgPSBEM0RDTVBfQUxXQVlT
OwotICAgIHN3aXRjaCAoY29tcGFyaXNvbikKLSAgICB7Ci0gICAgICBjYXNlIEdMX05FVkVSOiAg
ICBkM2RDb21wID0gRDNEQ01QX05FVkVSOyAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FM
V0FZUzogICBkM2RDb21wID0gRDNEQ01QX0FMV0FZUzsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX0xFU1M6ICAgICBkM2RDb21wID0gRDNEQ01QX0xFU1M7ICAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0xFUVVBTDogICBkM2RDb21wID0gRDNEQ01QX0xFU1NFUVVBTDsgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0VRVUFMOiAgICBkM2RDb21wID0gRDNEQ01QX0VRVUFMOyAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0dSRUFURVI6ICBkM2RDb21wID0gRDNEQ01QX0dSRUFURVI7
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0dFUVVBTDogICBkM2RDb21wID0gRDNEQ01QX0dS
RUFURVJFUVVBTDsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX05PVEVRVUFMOiBkM2RDb21wID0gRDNE
Q01QX05PVEVRVUFMOyAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwot
ICAgIH0KLQotICAgIHJldHVybiBkM2RDb21wOwotfQotCi1EM0RDT0xPUiBDb252ZXJ0Q29sb3Io
Z2w6OkNvbG9yIGNvbG9yKQotewotICAgIHJldHVybiBEM0RDT0xPUl9SR0JBKGdsOjp1bm9ybTw4
Pihjb2xvci5yZWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4Pihjb2xv
ci5ncmVlbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNvbG9yLmJs
dWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4Pihjb2xvci5hbHBoYSkp
OwotfQotCi1EM0RCTEVORCBDb252ZXJ0QmxlbmRGdW5jKEdMZW51bSBibGVuZCkKLXsKLSAgICBE
M0RCTEVORCBkM2RCbGVuZCA9IEQzREJMRU5EX1pFUk87Ci0KLSAgICBzd2l0Y2ggKGJsZW5kKQot
ICAgIHsKLSAgICAgIGNhc2UgR0xfWkVSTzogICAgICAgICAgICAgICAgICAgICBkM2RCbGVuZCA9
IEQzREJMRU5EX1pFUk87ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfT05FOiAgICAg
ICAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX09ORTsgICAgICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfU1JDX0NPTE9SOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQz
REJMRU5EX1NSQ0NPTE9SOyAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NS
Q19DT0xPUjogICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVlNSQ0NPTE9SOyAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfRFNUX0NPTE9SOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJM
RU5EX0RFU1RDT0xPUjsgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9D
T0xPUjogICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVkRFU1RDT0xPUjsgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfU1JDX0FMUEhBOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5E
X1NSQ0FMUEhBOyAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19BTFBI
QTogICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVlNSQ0FMUEhBOyAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfRFNUX0FMUEhBOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0RF
U1RBTFBIQTsgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9BTFBIQTog
ICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVkRFU1RBTFBIQTsgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfQ09OU1RBTlRfQ09MT1I6ICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0JMRU5E
RkFDVE9SOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0NPTE9S
OiBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVkJMRU5ERkFDVE9SOyBicmVhazsKLSAgICAgIGNhc2Ug
R0xfQ09OU1RBTlRfQUxQSEE6ICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0JMRU5ERkFD
VE9SOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBOiBk
M2RCbGVuZCA9IEQzREJMRU5EX0lOVkJMRU5ERkFDVE9SOyBicmVhazsKLSAgICAgIGNhc2UgR0xf
U1JDX0FMUEhBX1NBVFVSQVRFOiAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX1NSQ0FMUEhBU0FU
OyAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGQzZEJsZW5kOwotfQotCi1EM0RCTEVORE9QIENvbnZlcnRCbGVuZE9wKEdMZW51bSBi
bGVuZE9wKQotewotICAgIEQzREJMRU5ET1AgZDNkQmxlbmRPcCA9IEQzREJMRU5ET1BfQUREOwot
Ci0gICAgc3dpdGNoIChibGVuZE9wKQotICAgIHsKLSAgICAgIGNhc2UgR0xfRlVOQ19BREQ6ICAg
ICAgICAgICAgICBkM2RCbGVuZE9wID0gRDNEQkxFTkRPUF9BREQ7ICAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0ZVTkNfU1VCVFJBQ1Q6ICAgICAgICAgZDNkQmxlbmRPcCA9IEQzREJMRU5E
T1BfU1VCVFJBQ1Q7ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GVU5DX1JFVkVSU0VfU1VCVFJB
Q1Q6IGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX1JFVlNVQlRSQUNUOyBicmVhazsKLSAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGQzZEJsZW5kT3A7Ci19
Ci0KLUQzRFNURU5DSUxPUCBDb252ZXJ0U3RlbmNpbE9wKEdMZW51bSBzdGVuY2lsT3ApCi17Ci0g
ICAgRDNEU1RFTkNJTE9QIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9LRUVQOwotCi0gICAg
c3dpdGNoIChzdGVuY2lsT3ApCi0gICAgewotICAgICAgY2FzZSBHTF9aRVJPOiAgICAgIGQzZFN0
ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9aRVJPOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfS0VF
UDogICAgICBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfS0VFUDsgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX1JFUExBQ0U6ICAgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX1JFUExBQ0U7
IGJyZWFrOwotICAgICAgY2FzZSBHTF9JTkNSOiAgICAgIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5D
SUxPUF9JTkNSU0FUOyBicmVhazsKLSAgICAgIGNhc2UgR0xfREVDUjogICAgICBkM2RTdGVuY2ls
T3AgPSBEM0RTVEVOQ0lMT1BfREVDUlNBVDsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0lOVkVSVDog
ICAgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0lOVkVSVDsgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9JTkNSX1dSQVA6IGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9JTkNSOyAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfREVDUl9XUkFQOiBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1Bf
REVDUjsgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQot
ICAgIHJldHVybiBkM2RTdGVuY2lsT3A7Ci19Ci0KLUQzRFRFWFRVUkVBRERSRVNTIENvbnZlcnRU
ZXh0dXJlV3JhcChHTGVudW0gd3JhcCkKLXsKLSAgICBEM0RURVhUVVJFQUREUkVTUyBkM2RXcmFw
ID0gRDNEVEFERFJFU1NfV1JBUDsKLQotICAgIHN3aXRjaCAod3JhcCkKLSAgICB7Ci0gICAgICBj
YXNlIEdMX1JFUEVBVDogICAgICAgICAgICBkM2RXcmFwID0gRDNEVEFERFJFU1NfV1JBUDsgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfQ0xBTVBfVE9fRURHRTogICAgIGQzZFdyYXAgPSBEM0RUQURE
UkVTU19DTEFNUDsgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NSVJST1JFRF9SRVBFQVQ6ICAgZDNk
V3JhcCA9IEQzRFRBRERSRVNTX01JUlJPUjsgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBkM2RXcmFwOwotfQotCi1EM0RDVUxMIENvbnZl
cnRDdWxsTW9kZShHTGVudW0gY3VsbEZhY2UsIEdMZW51bSBmcm9udEZhY2UpCi17Ci0gICAgRDNE
Q1VMTCBjdWxsID0gRDNEQ1VMTF9DQ1c7Ci0gICAgc3dpdGNoIChjdWxsRmFjZSkKLSAgICB7Ci0g
ICAgICBjYXNlIEdMX0ZST05UOgotICAgICAgICBjdWxsID0gKGZyb250RmFjZSA9PSBHTF9DQ1cg
PyBEM0RDVUxMX0NXIDogRDNEQ1VMTF9DQ1cpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfQkFDSzoKLSAgICAgICAgY3VsbCA9IChmcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEQ1VMTF9D
Q1cgOiBEM0RDVUxMX0NXKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZST05UX0FO
RF9CQUNLOgotICAgICAgICBjdWxsID0gRDNEQ1VMTF9OT05FOyAvLyBjdWxsaW5nIHdpbGwgYmUg
aGFuZGxlZCBkdXJpbmcgZHJhdwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGN1bGw7Ci19Ci0KLUQzRENVQkVNQVBfRkFD
RVMgQ29udmVydEN1YmVGYWNlKEdMZW51bSBjdWJlRmFjZSkKLXsKLSAgICBEM0RDVUJFTUFQX0ZB
Q0VTIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfUE9TSVRJVkVfWDsKLQotICAgIHN3aXRjaCAoY3Vi
ZUZhY2UpCi0gICAgewotICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6
Ci0gICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfUE9TSVRJVkVfWDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICAgICAg
ZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9ORUdBVElWRV9YOwotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgICAgICBmYWNlID0gRDNE
Q1VCRU1BUF9GQUNFX1BPU0lUSVZFX1k7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZB
Q0VfTkVHQVRJVkVfWTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWjoKLSAgICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9QT1NJVElW
RV9aOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9aOgotICAgICAgICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX05FR0FUSVZFX1o7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gZmFjZTsKLX0KLQotRFdPUkQgQ29udmVydENvbG9yTWFzayhib29sIHJlZCwgYm9vbCBn
cmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKQotewotICAgIHJldHVybiAocmVkICAgPyBEM0RD
T0xPUldSSVRFRU5BQkxFX1JFRCAgIDogMCkgfAotICAgICAgICAgICAoZ3JlZW4gPyBEM0RDT0xP
UldSSVRFRU5BQkxFX0dSRUVOIDogMCkgfAotICAgICAgICAgICAoYmx1ZSAgPyBEM0RDT0xPUldS
SVRFRU5BQkxFX0JMVUUgIDogMCkgfAotICAgICAgICAgICAoYWxwaGEgPyBEM0RDT0xPUldSSVRF
RU5BQkxFX0FMUEhBIDogMCk7Ci19Ci0KLUQzRFRFWFRVUkVGSUxURVJUWVBFIENvbnZlcnRNYWdG
aWx0ZXIoR0xlbnVtIG1hZ0ZpbHRlciwgZmxvYXQgbWF4QW5pc290cm9weSkKLXsKLSAgICBpZiAo
bWF4QW5pc290cm9weSA+IDEuMGYpCi0gICAgewotICAgICAgICByZXR1cm4gRDNEVEVYRl9BTklT
T1RST1BJQzsKLSAgICB9Ci0KLSAgICBEM0RURVhUVVJFRklMVEVSVFlQRSBkM2RNYWdGaWx0ZXIg
PSBEM0RURVhGX1BPSU5UOwotICAgIHN3aXRjaCAobWFnRmlsdGVyKQotICAgIHsKLSAgICAgIGNh
c2UgR0xfTkVBUkVTVDogZDNkTWFnRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9MSU5FQVI6ICBkM2RNYWdGaWx0ZXIgPSBEM0RURVhGX0xJTkVBUjsgYnJlYWs7
Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBkM2RN
YWdGaWx0ZXI7Ci19Ci0KLXZvaWQgQ29udmVydE1pbkZpbHRlcihHTGVudW0gbWluRmlsdGVyLCBE
M0RURVhUVVJFRklMVEVSVFlQRSAqZDNkTWluRmlsdGVyLCBEM0RURVhUVVJFRklMVEVSVFlQRSAq
ZDNkTWlwRmlsdGVyLCBmbG9hdCBtYXhBbmlzb3Ryb3B5KQotewotICAgIHN3aXRjaCAobWluRmls
dGVyKQotICAgIHsKLSAgICAgIGNhc2UgR0xfTkVBUkVTVDoKLSAgICAgICAgKmQzZE1pbkZpbHRl
ciA9IEQzRFRFWEZfUE9JTlQ7Ci0gICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX05PTkU7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MSU5FQVI6Ci0gICAgICAgICpkM2RNaW5G
aWx0ZXIgPSBEM0RURVhGX0xJTkVBUjsKLSAgICAgICAgKmQzZE1pcEZpbHRlciA9IEQzRFRFWEZf
Tk9ORTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX05FQVJF
U1Q6Ci0gICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX1BPSU5UOwotICAgICAgICAqZDNk
TWlwRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X0xJTkVBUl9NSVBNQVBfTkVBUkVTVDoKLSAgICAgICAgKmQzZE1pbkZpbHRlciA9IEQzRFRFWEZf
TElORUFSOwotICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjoKLSAgICAgICAgKmQz
ZE1pbkZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7Ci0gICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RU
RVhGX0xJTkVBUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBf
TElORUFSOgotICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9MSU5FQVI7Ci0gICAgICAg
ICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX0xJTkVBUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBk
ZWZhdWx0OgotICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKLSAgICAgICAg
KmQzZE1pcEZpbHRlciA9IEQzRFRFWEZfTk9ORTsKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAg
ICB9Ci0KLSAgICBpZiAobWF4QW5pc290cm9weSA+IDEuMGYpCi0gICAgewotICAgICAgICAqZDNk
TWluRmlsdGVyID0gRDNEVEVYRl9BTklTT1RST1BJQzsKLSAgICB9Ci19Ci0KLUQzREZPUk1BVCBD
b252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdMZW51bSBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChm
b3JtYXQpCi0gICAgewotICAgICAgY2FzZSBHTF9OT05FOiAgICAgICAgICAgICAgICAgcmV0dXJu
IEQzREZNVF9OVUxMOwotICAgICAgY2FzZSBHTF9SR0JBNDoKLSAgICAgIGNhc2UgR0xfUkdCNV9B
MToKLSAgICAgIGNhc2UgR0xfUkdCQThfT0VTOiAgICAgICAgICAgIHJldHVybiBEM0RGTVRfQThS
OEc4Qjg7Ci0gICAgICBjYXNlIEdMX1JHQjU2NTogICAgICAgICAgICAgICByZXR1cm4gRDNERk1U
X1I1RzZCNTsKLSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6ICAgICAgICAgICAgIHJldHVybiBEM0RG
TVRfWDhSOEc4Qjg7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgY2Fz
ZSBHTF9TVEVOQ0lMX0lOREVYODogICAgICAgCi0gICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJ
TDhfT0VTOiByZXR1cm4gRDNERk1UX0QyNFM4OwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKLSAgICB9Ci19Ci0KLUQzRE1VTFRJU0FN
UExFX1RZUEUgR2V0TXVsdGlzYW1wbGVUeXBlRnJvbVNhbXBsZXMoR0xzaXplaSBzYW1wbGVzKQot
ewotICAgIGlmIChzYW1wbGVzIDw9IDEpCi0gICAgICAgIHJldHVybiBEM0RNVUxUSVNBTVBMRV9O
T05FOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIChEM0RNVUxUSVNBTVBMRV9UWVBFKXNhbXBs
ZXM7Ci19Ci0KLX0KLQotbmFtZXNwYWNlIGQzZDlfZ2wKLXsKLQotdW5zaWduZWQgaW50IEdldFN0
ZW5jaWxTaXplKEQzREZPUk1BVCBzdGVuY2lsRm9ybWF0KQotewotICAgIGlmIChzdGVuY2lsRm9y
bWF0ID09IEQzREZNVF9JTlRaKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDg7Ci0gICAgfQotICAg
IHN3aXRjaChzdGVuY2lsRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0QyNEZTODoK
LSAgICAgIGNhc2UgRDNERk1UX0QyNFM4OgotICAgICAgICByZXR1cm4gODsKLSAgICAgIGNhc2Ug
RDNERk1UX0QyNFg0UzQ6Ci0gICAgICAgIHJldHVybiA0OwotICAgICAgY2FzZSBEM0RGTVRfRDE1
UzE6Ci0gICAgICAgIHJldHVybiAxOwotICAgICAgY2FzZSBEM0RGTVRfRDE2X0xPQ0tBQkxFOgot
ICAgICAgY2FzZSBEM0RGTVRfRDMyOgotICAgICAgY2FzZSBEM0RGTVRfRDI0WDg6Ci0gICAgICBj
YXNlIEQzREZNVF9EMzJGX0xPQ0tBQkxFOgotICAgICAgY2FzZSBEM0RGTVRfRDE2OgotICAgICAg
ICByZXR1cm4gMDsKLSAgICAvL2Nhc2UgRDNERk1UX0QzMl9MT0NLQUJMRTogIHJldHVybiAwOyAg
IC8vIERpcmVjdFggOUV4IG9ubHkKLSAgICAvL2Nhc2UgRDNERk1UX1M4X0xPQ0tBQkxFOiAgIHJl
dHVybiA4OyAgIC8vIERpcmVjdFggOUV4IG9ubHkKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLX0KLQotdW5zaWduZWQgaW50IEdldEFscGhhU2l6ZShEM0RGT1JNQVQg
Y29sb3JGb3JtYXQpCi17Ci0gICAgc3dpdGNoIChjb2xvckZvcm1hdCkKLSAgICB7Ci0gICAgICBj
YXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgotICAgICAgICByZXR1cm4gMTY7Ci0gICAgICBjYXNl
IEQzREZNVF9BMzJCMzJHMzJSMzJGOgotICAgICAgICByZXR1cm4gMzI7Ci0gICAgICBjYXNlIEQz
REZNVF9BMlIxMEcxMEIxMDoKLSAgICAgICAgcmV0dXJuIDI7Ci0gICAgICBjYXNlIEQzREZNVF9B
OFI4RzhCODoKLSAgICAgICAgcmV0dXJuIDg7Ci0gICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToK
LSAgICAgICAgcmV0dXJuIDE7Ci0gICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAgICAgIGNh
c2UgRDNERk1UX1I1RzZCNToKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLUdMc2l6ZWkgR2V0U2FtcGxlc0Zyb21NdWx0aXNh
bXBsZVR5cGUoRDNETVVMVElTQU1QTEVfVFlQRSB0eXBlKQotewotICAgIGlmICh0eXBlID09IEQz
RE1VTFRJU0FNUExFX05PTk1BU0tBQkxFKQotICAgICAgICByZXR1cm4gMDsKLSAgICBlbHNlCi0g
ICAgICAgIHJldHVybiB0eXBlOwotfQotCi1ib29sIElzRm9ybWF0Q2hhbm5lbEVxdWl2YWxlbnQo
RDNERk9STUFUIGQzZGZvcm1hdCwgR0xlbnVtIGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGQzZGZv
cm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9MODoKLSAgICAgICAgcmV0dXJuIChmb3Jt
YXQgPT0gR0xfTFVNSU5BTkNFKTsKLSAgICAgIGNhc2UgRDNERk1UX0E4TDg6Ci0gICAgICAgIHJl
dHVybiAoZm9ybWF0ID09IEdMX0xVTUlOQU5DRV9BTFBIQSk7Ci0gICAgICBjYXNlIEQzREZNVF9E
WFQxOgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQxX0VYVCB8fCBmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCk7Ci0g
ICAgICBjYXNlIEQzREZNVF9EWFQzOgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9DT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFKTsKLSAgICAgIGNhc2UgRDNERk1UX0RYVDU6Ci0g
ICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5H
TEUpOwotICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9BMTZC
MTZHMTZSMTZGOgotICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKLSAgICAgICAgcmV0
dXJuIChmb3JtYXQgPT0gR0xfUkdCQSB8fCBmb3JtYXQgPT0gR0xfQkdSQV9FWFQpOwotICAgICAg
Y2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX1JHQik7
Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBpZiAoZDNkZm9ybWF0ID09IEQzREZNVF9JTlRaICYm
IGdsOjpJc0RlcHRoVGV4dHVyZShmb3JtYXQpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLUdMZW51bSBDb252ZXJ0QmFja0J1ZmZl
ckZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsK
LSAgICAgIGNhc2UgRDNERk1UX0E0UjRHNEI0OiByZXR1cm4gR0xfUkdCQTQ7Ci0gICAgICBjYXNl
IEQzREZNVF9BOFI4RzhCODogcmV0dXJuIEdMX1JHQkE4X09FUzsKLSAgICAgIGNhc2UgRDNERk1U
X0ExUjVHNUI1OiByZXR1cm4gR0xfUkdCNV9BMTsKLSAgICAgIGNhc2UgRDNERk1UX1I1RzZCNTog
ICByZXR1cm4gR0xfUkdCNTY1OwotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6IHJldHVybiBH
TF9SR0I4X09FUzsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIEdMX1JHQkE0OwotfQotCi1HTGVudW0gQ29udmVydERlcHRoU3RlbmNp
bEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KQotewotICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lO
VFopCi0gICAgewotICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAg
fQotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0QxNjoKLSAg
ICAgIGNhc2UgRDNERk1UX0QyNFg4OgotICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5U
MTY7Ci0gICAgICBjYXNlIEQzREZNVF9EMjRTODoKLSAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRf
U1RFTkNJTDhfT0VTOwotICAgICAgY2FzZSBEM0RGTVRfVU5LTk9XTjoKLSAgICAgICAgcmV0dXJu
IEdMX05PTkU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0K
LQotICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLX0KLQotR0xlbnVtIENvbnZl
cnRSZW5kZXJUYXJnZXRGb3JtYXQoRDNERk9STUFUIGZvcm1hdCkKLXsKLSAgICBpZiAoZm9ybWF0
ID09IEQzREZNVF9JTlRaKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJ
TDhfT0VTOwotICAgIH0KLSAgICAKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBj
YXNlIEQzREZNVF9BNFI0RzRCNDogcmV0dXJuIEdMX1JHQkE0OwotICAgICAgY2FzZSBEM0RGTVRf
QThSOEc4Qjg6IHJldHVybiBHTF9SR0JBOF9PRVM7Ci0gICAgICBjYXNlIEQzREZNVF9BMVI1RzVC
NTogcmV0dXJuIEdMX1JHQjVfQTE7Ci0gICAgICBjYXNlIEQzREZNVF9SNUc2QjU6ICAgcmV0dXJu
IEdMX1JHQjU2NTsKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OiByZXR1cm4gR0xfUkdCOF9P
RVM7Ci0gICAgICBjYXNlIEQzREZNVF9EMTY6Ci0gICAgICBjYXNlIEQzREZNVF9EMjRYODoKLSAg
ICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2OwotICAgICAgY2FzZSBEM0RGTVRfRDI0
Uzg6Ci0gICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLSAgICAgIGNhc2Ug
RDNERk1UX1VOS05PV046Ci0gICAgICAgIHJldHVybiBHTF9OT05FOwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gR0xfUkdCQTQ7Ci19
Ci0KLUdMZW51bSBHZXRFcXVpdmFsZW50Rm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpCi17Ci0gICAg
aWYgKGZvcm1hdCA9PSBEM0RGTVRfSU5UWikKLSAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RF
TkNJTDhfT0VTOwotICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX05VTEwpCi0gICAgICAgIHJldHVy
biBHTF9OT05FOwotCi0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RG
TVRfQTRSNEc0QjQ6ICAgICAgICAgICAgIHJldHVybiBHTF9SR0JBNDsKLSAgICAgIGNhc2UgRDNE
Rk1UX0E4UjhHOEI4OiAgICAgICAgICAgICByZXR1cm4gR0xfUkdCQThfT0VTOwotICAgICAgY2Fz
ZSBEM0RGTVRfQTFSNUc1QjU6ICAgICAgICAgICAgIHJldHVybiBHTF9SR0I1X0ExOwotICAgICAg
Y2FzZSBEM0RGTVRfUjVHNkI1OiAgICAgICAgICAgICAgIHJldHVybiBHTF9SR0I1NjU7Ci0gICAg
ICBjYXNlIEQzREZNVF9YOFI4RzhCODogICAgICAgICAgICAgcmV0dXJuIEdMX1JHQjhfT0VTOwot
ICAgICAgY2FzZSBEM0RGTVRfRDE2OiAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9ERVBUSF9D
T01QT05FTlQxNjsKLSAgICAgIGNhc2UgRDNERk1UX0QyNFM4OiAgICAgICAgICAgICAgICByZXR1
cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgICBjYXNlIEQzREZNVF9VTktOT1dOOiAg
ICAgICAgICAgICAgcmV0dXJuIEdMX05PTkU7Ci0gICAgICBjYXNlIEQzREZNVF9EWFQxOiAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOwotICAg
ICAgY2FzZSBEM0RGTVRfRFhUMzogICAgICAgICAgICAgICAgIHJldHVybiBHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQzX0FOR0xFOwotICAgICAgY2FzZSBEM0RGTVRfRFhUNTogICAgICAgICAg
ICAgICAgIHJldHVybiBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOwotICAgICAg
Y2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjogICAgICAgIHJldHVybiBHTF9SR0JBMzJGX0VYVDsK
LSAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6ICAgICAgICByZXR1cm4gR0xfUkdCQTE2
Rl9FWFQ7Ci0gICAgICBjYXNlIEQzREZNVF9MODogICAgICAgICAgICAgICAgICAgcmV0dXJuIEdM
X0xVTUlOQU5DRThfRVhUOwotICAgICAgY2FzZSBEM0RGTVRfQThMODogICAgICAgICAgICAgICAg
IHJldHVybiBHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQ7Ci0gICAgICBkZWZhdWx0OiAgICAgICAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIEdMX05PTkU7Ci0gICAgfQotfQot
Ci19Ci0KLW5hbWVzcGFjZSBkM2Q5Ci17Ci0KLWJvb2wgSXNDb21wcmVzc2VkRm9ybWF0KEQzREZP
Uk1BVCBzdXJmYWNlRm9ybWF0KQotewotICAgIHN3aXRjaChzdXJmYWNlRm9ybWF0KQotICAgIHsK
LSAgICAgIGNhc2UgRDNERk1UX0RYVDE6Ci0gICAgICBjYXNlIEQzREZNVF9EWFQyOgotICAgICAg
Y2FzZSBEM0RGTVRfRFhUMzoKLSAgICAgIGNhc2UgRDNERk1UX0RYVDQ6Ci0gICAgICBjYXNlIEQz
REZNVF9EWFQ1OgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLXNpemVfdCBDb21wdXRlUm93U2l6ZShEM0RGT1JN
QVQgZm9ybWF0LCB1bnNpZ25lZCBpbnQgd2lkdGgpCi17Ci0gICAgaWYgKGZvcm1hdCA9PSBEM0RG
TVRfSU5UWikKLSAgICB7Ci0gICAgICAgIHJldHVybiA0ICogd2lkdGg7Ci0gICAgfQotICAgIHN3
aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0w4OgotICAgICAgICAgIHJl
dHVybiAxICogd2lkdGg7Ci0gICAgICBjYXNlIEQzREZNVF9BOEw4OgotICAgICAgICAgIHJldHVy
biAyICogd2lkdGg7Ci0gICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAgICAgIGNhc2UgRDNE
Rk1UX0E4UjhHOEI4OgotICAgICAgICByZXR1cm4gNCAqIHdpZHRoOwotICAgICAgY2FzZSBEM0RG
TVRfQTE2QjE2RzE2UjE2RjoKLSAgICAgICAgcmV0dXJuIDggKiB3aWR0aDsKLSAgICAgIGNhc2Ug
RDNERk1UX0EzMkIzMkczMlIzMkY6Ci0gICAgICAgIHJldHVybiAxNiAqIHdpZHRoOwotICAgICAg
Y2FzZSBEM0RGTVRfRFhUMToKLSAgICAgICAgcmV0dXJuIDggKiAoKHdpZHRoICsgMykgLyA0KTsK
LSAgICAgIGNhc2UgRDNERk1UX0RYVDM6Ci0gICAgICBjYXNlIEQzREZNVF9EWFQ1OgotICAgICAg
ICByZXR1cm4gMTYgKiAoKHdpZHRoICsgMykgLyA0KTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9yZW5k
ZXJlcjlfdXRpbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvcmVuZGVyZXI5X3V0aWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJm
NmNkZjFlYTY1NjZmOTEwYTk2ZWUyNTExNGI3YzQ4ZWM4Mzk0NWUuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9yZW5kZXJlcjlfdXRpbHMuaAorKysgL2Rldi9udWxsCkBAIC0x
LDc0ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIHJlbmRlcmVyOV91dGlscy5oOiBD
b252ZXJzaW9uIGZ1bmN0aW9ucyBhbmQgb3RoZXIgdXRpbGl0eSByb3V0aW5lcyAKLS8vIHNwZWNp
ZmljIHRvIHRoZSBEM0Q5IHJlbmRlcmVyCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX1JF
TkRFUkVSOV9VVElMU19ICi0jZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjlfVVRJ
TFNfSAotCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgotCi1jb25zdCBEM0RGT1JN
QVQgRDNERk1UX0lOVFogPSAoKEQzREZPUk1BVCkoTUFLRUZPVVJDQygnSScsJ04nLCdUJywnWicp
KSk7Ci1jb25zdCBEM0RGT1JNQVQgRDNERk1UX05VTEwgPSAoKEQzREZPUk1BVCkoTUFLRUZPVVJD
QygnTicsJ1UnLCdMJywnTCcpKSk7Ci0KLW5hbWVzcGFjZSBnbF9kM2Q5Ci17Ci0KLUQzRENNUEZV
TkMgQ29udmVydENvbXBhcmlzb24oR0xlbnVtIGNvbXBhcmlzb24pOwotRDNEQ09MT1IgQ29udmVy
dENvbG9yKGdsOjpDb2xvciBjb2xvcik7Ci1EM0RCTEVORCBDb252ZXJ0QmxlbmRGdW5jKEdMZW51
bSBibGVuZCk7Ci1EM0RCTEVORE9QIENvbnZlcnRCbGVuZE9wKEdMZW51bSBibGVuZE9wKTsKLUQz
RFNURU5DSUxPUCBDb252ZXJ0U3RlbmNpbE9wKEdMZW51bSBzdGVuY2lsT3ApOwotRDNEVEVYVFVS
RUFERFJFU1MgQ29udmVydFRleHR1cmVXcmFwKEdMZW51bSB3cmFwKTsKLUQzRENVTEwgQ29udmVy
dEN1bGxNb2RlKEdMZW51bSBjdWxsRmFjZSwgR0xlbnVtIGZyb250RmFjZSk7Ci1EM0RDVUJFTUFQ
X0ZBQ0VTIENvbnZlcnRDdWJlRmFjZShHTGVudW0gY3ViZUZhY2UpOwotRFdPUkQgQ29udmVydENv
bG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKTsKLUQz
RFRFWFRVUkVGSUxURVJUWVBFIENvbnZlcnRNYWdGaWx0ZXIoR0xlbnVtIG1hZ0ZpbHRlciwgZmxv
YXQgbWF4QW5pc290cm9weSk7Ci12b2lkIENvbnZlcnRNaW5GaWx0ZXIoR0xlbnVtIG1pbkZpbHRl
ciwgRDNEVEVYVFVSRUZJTFRFUlRZUEUgKmQzZE1pbkZpbHRlciwgRDNEVEVYVFVSRUZJTFRFUlRZ
UEUgKmQzZE1pcEZpbHRlciwgZmxvYXQgbWF4QW5pc290cm9weSk7Ci1EM0RGT1JNQVQgQ29udmVy
dFJlbmRlcmJ1ZmZlckZvcm1hdChHTGVudW0gZm9ybWF0KTsKLUQzRE1VTFRJU0FNUExFX1RZUEUg
R2V0TXVsdGlzYW1wbGVUeXBlRnJvbVNhbXBsZXMoR0xzaXplaSBzYW1wbGVzKTsKLQotfQotCi1u
YW1lc3BhY2UgZDNkOV9nbAotewotCi1HTHVpbnQgR2V0QWxwaGFTaXplKEQzREZPUk1BVCBjb2xv
ckZvcm1hdCk7Ci1HTHVpbnQgR2V0U3RlbmNpbFNpemUoRDNERk9STUFUIHN0ZW5jaWxGb3JtYXQp
OwotCi1HTHNpemVpIEdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKEQzRE1VTFRJU0FNUExF
X1RZUEUgdHlwZSk7Ci0KLWJvb2wgSXNGb3JtYXRDaGFubmVsRXF1aXZhbGVudChEM0RGT1JNQVQg
ZDNkZm9ybWF0LCBHTGVudW0gZm9ybWF0KTsKLUdMZW51bSBDb252ZXJ0QmFja0J1ZmZlckZvcm1h
dChEM0RGT1JNQVQgZm9ybWF0KTsKLUdMZW51bSBDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KEQz
REZPUk1BVCBmb3JtYXQpOwotR0xlbnVtIENvbnZlcnRSZW5kZXJUYXJnZXRGb3JtYXQoRDNERk9S
TUFUIGZvcm1hdCk7Ci1HTGVudW0gR2V0RXF1aXZhbGVudEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0
KTsKLQotfQotCi1uYW1lc3BhY2UgZDNkOQotewotYm9vbCBJc0NvbXByZXNzZWRGb3JtYXQoRDNE
Rk9STUFUIGZvcm1hdCk7Ci1zaXplX3QgQ29tcHV0ZVJvd1NpemUoRDNERk9STUFUIGZvcm1hdCwg
dW5zaWduZWQgaW50IHdpZHRoKTsKLQotaW5saW5lIGJvb2wgaXNEZXZpY2VMb3N0RXJyb3IoSFJF
U1VMVCBlcnJvckNvZGUpCi17Ci0gICAgc3dpdGNoIChlcnJvckNvZGUpCi0gICAgewotICAgICAg
Y2FzZSBEM0RFUlJfRFJJVkVSSU5URVJOQUxFUlJPUjoKLSAgICAgIGNhc2UgRDNERVJSX0RFVklD
RUxPU1Q6Ci0gICAgICBjYXNlIEQzREVSUl9ERVZJQ0VIVU5HOgotICAgICAgY2FzZSBEM0RFUlJf
REVWSUNFUkVNT1ZFRDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJf
UkVOREVSRVJfUkVOREVSRVI5X1VUSUxTX0gKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9CbGl0LnBzIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL0JsaXQucHMKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjYjNiZDBlNzZiYTkyYTI4ZTc3Njg4OGM2Mjkw
NGMwYzNmMDVmM2MuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJz
L0JsaXQucHMKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
c2FtcGxlcjJEIHRleCA6IHMwOwotCi11bmlmb3JtIGZsb2F0NCBtb2RlIDogYzA7Ci0KLS8vIFBh
c3N0aHJvdWdoIFBpeGVsIFNoYWRlcgotLy8gT3V0cHV0cyB0ZXh0dXJlIDAgc2FtcGxlZCBhdCB0
ZXhjb29yZCAwLgotZmxvYXQ0IHBhc3N0aHJvdWdocHMoZmxvYXQ0IHRleGNvb3JkIDogVEVYQ09P
UkQwKSA6IENPTE9SCi17Ci0JcmV0dXJuIHRleDJEKHRleCwgdGV4Y29vcmQueHkpOwotfTsKLQot
Ly8gTHVtaW5hbmNlIENvbnZlcnNpb24gUGl4ZWwgU2hhZGVyCi0vLyBPdXRwdXRzIHNhbXBsZSh0
ZXgwLCB0YzApLnJycmEuCi0vLyBGb3IgTEEgb3V0cHV0IChwYXNzIEEpIHNldCBDMC5YID0gMSwg
QzAuWSA9IDAuCi0vLyBGb3IgTCBvdXRwdXQgKEEgPSAxKSBzZXQgQzAuWCA9IDAsIEMwLlkgPSAx
LgotZmxvYXQ0IGx1bWluYW5jZXBzKGZsb2F0NCB0ZXhjb29yZCA6IFRFWENPT1JEMCkgOiBDT0xP
UgotewotCWZsb2F0NCB0bXAgPSB0ZXgyRCh0ZXgsIHRleGNvb3JkLnh5KTsKLQl0bXAudyA9IHRt
cC53ICogbW9kZS54ICsgbW9kZS55OwotCXJldHVybiB0bXAueHh4dzsKLX07Ci0KLS8vIFJHQi9B
IENvbXBvbmVudCBNYXNrIFBpeGVsIFNoYWRlcgotLy8gT3V0cHV0cyBzYW1wbGUodGV4MCwgdGMw
KSB3aXRoIG9wdGlvbnMgdG8gZm9yY2UgUkdCID0gMCBhbmQvb3IgQSA9IDEuCi0vLyBUbyBmb3Jj
ZSBSR0IgPSAwLCBzZXQgQzAuWCA9IDAsIG90aGVyd2lzZSBDMC5YID0gMS4KLS8vIFRvIGZvcmNl
IEEgPSAxLCBzZXQgQzAuWiA9IDAsIEMwLlcgPSAxLCBvdGhlcndpc2UgQzAuWiA9IDEsIEMwLlcg
PSAwLgotZmxvYXQ0IGNvbXBvbmVudG1hc2twcyhmbG9hdDQgdGV4Y29vcmQgOiBURVhDT09SRDAp
IDogQ09MT1IKLXsKLQlmbG9hdDQgdG1wID0gdGV4MkQodGV4LCB0ZXhjb29yZC54eSk7Ci0JdG1w
Lnh5eiA9IHRtcC54eXogKiBtb2RlLng7Ci0JdG1wLncgPSB0bXAudyAqIG1vZGUueiArIG1vZGUu
dzsKLQlyZXR1cm4gdG1wOwotfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9CbGl0LnZzIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL0JsaXQudnMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhMzY5ODBiOTM1YjUwZmE5YWUwYjZiMGY0YTUwZTM5Mzlk
MGQ1MTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL0JsaXQu
dnMKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAy
MDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotc3RydWN0
IFZTX09VVFBVVAotewotICAgIGZsb2F0NCBwb3NpdGlvbiA6IFBPU0lUSU9OOwotICAgIGZsb2F0
NCB0ZXhjb29yZCA6IFRFWENPT1JEMDsKLX07Ci0KLXVuaWZvcm0gZmxvYXQ0IGhhbGZQaXhlbFNp
emUgOiBjMDsKLQotLy8gU3RhbmRhcmQgVmVydGV4IFNoYWRlcgotLy8gSW5wdXQgMCBpcyB0aGUg
aG9tb2dlbm91cyBwb3NpdGlvbi4KLS8vIE91dHB1dHMgdGhlIGhvbW9nZW5vdXMgcG9zaXRpb24g
YXMtaXMuCi0vLyBPdXRwdXRzIGEgdGV4IGNvb3JkIHdpdGggKDAsMCkgaW4gdGhlIHVwcGVyLWxl
ZnQgY29ybmVyIG9mIHRoZSBzY3JlZW4gYW5kICgxLDEpIGluIHRoZSBib3R0b20gcmlnaHQuCi0v
LyBDMC5YIG11c3QgYmUgbmVnYXRpdmUgaGFsZi1waXhlbCB3aWR0aCwgQzAuWSBtdXN0IGJlIGhh
bGYtcGl4ZWwgaGVpZ2h0LiBDMC5aVyBtdXN0IGJlIDAuCi1WU19PVVRQVVQgc3RhbmRhcmR2cyhp
biBmbG9hdDQgcG9zaXRpb24gOiBQT1NJVElPTikKLXsKLSAgICBWU19PVVRQVVQgT3V0OwotCi0g
ICAgT3V0LnBvc2l0aW9uID0gcG9zaXRpb24gKyBoYWxmUGl4ZWxTaXplOwotICAgIE91dC50ZXhj
b29yZCA9IHBvc2l0aW9uICogZmxvYXQ0KDAuNSwgLTAuNSwgMS4wLCAxLjApICsgZmxvYXQ0KDAu
NSwgMC41LCAwLCAwKTsKLQotICAgIHJldHVybiBPdXQ7Ci19OwotCi0vLyBGbGlwIFkgVmVydGV4
IFNoYWRlcgotLy8gSW5wdXQgMCBpcyB0aGUgaG9tb2dlbm91cyBwb3NpdGlvbi4KLS8vIE91dHB1
dHMgdGhlIGhvbW9nZW5vdXMgcG9zaXRpb24gYXMtaXMuCi0vLyBPdXRwdXRzIGEgdGV4IGNvb3Jk
IHdpdGggKDAsMSkgaW4gdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSBzY3JlZW4gYW5kICgx
LDApIGluIHRoZSBib3R0b20gcmlnaHQuCi0vLyBDMC5YWSBtdXN0IGJlIHRoZSBoYWxmLXBpeGVs
IHdpZHRoIGFuZCBoZWlnaHQuIEMwLlpXIG11c3QgYmUgMC4KLVZTX09VVFBVVCBmbGlweXZzKGlu
IGZsb2F0NCBwb3NpdGlvbiA6IFBPU0lUSU9OKQotewotICAgIFZTX09VVFBVVCBPdXQ7Ci0KLSAg
ICBPdXQucG9zaXRpb24gPSBwb3NpdGlvbiArIGhhbGZQaXhlbFNpemU7Ci0gICAgT3V0LnRleGNv
b3JkID0gcG9zaXRpb24gKiBmbG9hdDQoMC41LCAwLjUsIDEuMCwgMS4wKSArIGZsb2F0NCgwLjUs
IDAuNSwgMCwgMCk7Ci0KLSAgICByZXR1cm4gT3V0OwotfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9DbGVhcjExLmhs
c2wgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRl
cnMvQ2xlYXIxMS5obHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDJhYzY5OWI2
NmEyMjM5YWRiZjUyNTFmYWFmM2IzZTRjM2ZlYzVmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvc2hhZGVycy9DbGVhcjExLmhsc2wKKysrIC9kZXYvbnVsbApAQCAtMSwzOCAr
MCwwIEBACi12b2lkIFZTX0NsZWFyKCBpbiBmbG9hdDMgIGluUG9zaXRpb24gOiAgICBQT1NJVElP
TiwgIGluIGZsb2F0NCAgaW5Db2xvciA6IENPTE9SLAotICAgICAgICAgICAgICBvdXQgZmxvYXQ0
IG91dFBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIG91dCBmbG9hdDQgb3V0Q29sb3IgOiBDT0xPUikK
LXsKLSAgICBvdXRQb3NpdGlvbiA9IGZsb2F0NChpblBvc2l0aW9uLCAxLjBmKTsKLSAgICBvdXRD
b2xvciA9IGluQ29sb3I7Ci19Ci0KLS8vIEFzc3VtZSB3ZSBhcmUgaW4gU000Kywgd2hpY2ggaGFz
IDggY29sb3Igb3V0cHV0cwotc3RydWN0IFBTX091dHB1dE11bHRpcGxlCi17Ci0JZmxvYXQ0IGNv
bG9yMCA6IFNWX1RBUkdFVDA7Ci0JZmxvYXQ0IGNvbG9yMSA6IFNWX1RBUkdFVDE7Ci0JZmxvYXQ0
IGNvbG9yMiA6IFNWX1RBUkdFVDI7Ci0JZmxvYXQ0IGNvbG9yMyA6IFNWX1RBUkdFVDM7Ci0JZmxv
YXQ0IGNvbG9yNCA6IFNWX1RBUkdFVDQ7Ci0JZmxvYXQ0IGNvbG9yNSA6IFNWX1RBUkdFVDU7Ci0J
ZmxvYXQ0IGNvbG9yNiA6IFNWX1RBUkdFVDY7Ci0JZmxvYXQ0IGNvbG9yNyA6IFNWX1RBUkdFVDc7
Ci19OwotCi1QU19PdXRwdXRNdWx0aXBsZSBQU19DbGVhck11bHRpcGxlKGluIGZsb2F0NCBpblBv
c2l0aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0NCBpbkNvbG9yIDogQ09MT1IpCi17Ci0JUFNf
T3V0cHV0TXVsdGlwbGUgb3V0Q29sb3I7Ci0Jb3V0Q29sb3IuY29sb3IwID0gaW5Db2xvcjsKLQlv
dXRDb2xvci5jb2xvcjEgPSBpbkNvbG9yOwotCW91dENvbG9yLmNvbG9yMiA9IGluQ29sb3I7Ci0J
b3V0Q29sb3IuY29sb3IzID0gaW5Db2xvcjsKLQlvdXRDb2xvci5jb2xvcjQgPSBpbkNvbG9yOwot
CW91dENvbG9yLmNvbG9yNSA9IGluQ29sb3I7Ci0Jb3V0Q29sb3IuY29sb3I2ID0gaW5Db2xvcjsK
LQlvdXRDb2xvci5jb2xvcjcgPSBpbkNvbG9yOwotCXJldHVybiBvdXRDb2xvcjsKLX0KLQotZmxv
YXQ0IFBTX0NsZWFyU2luZ2xlKGluIGZsb2F0NCBpblBvc2l0aW9uIDogU1ZfUG9zaXRpb24sIGlu
IGZsb2F0NCBpbkNvbG9yIDogQ09MT1IpIDogU1ZfVGFyZ2V0MAotewotCXJldHVybiBpbkNvbG9y
OwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9zaGFkZXJzL1Bhc3N0aHJvdWdoMTEuaGxzbCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9QYXNzdGhyb3VnaDExLmhsc2wKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzYjc4MDFlZmMxZmVmNmUyMzkxODAwNjdkZDAy
MzY5OTg1NWI5YTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJz
L1Bhc3N0aHJvdWdoMTEuaGxzbAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLVRleHR1
cmUyRCBUZXh0dXJlIDogcmVnaXN0ZXIodDApOwotU2FtcGxlclN0YXRlIFNhbXBsZXIgOiByZWdp
c3RlcihzMCk7Ci0KLXZvaWQgVlNfUGFzc3Rocm91Z2goIGluIGZsb2F0MiAgaW5Qb3NpdGlvbiA6
ICAgIFBPU0lUSU9OLCAgaW4gZmxvYXQyICBpblRleENvb3JkIDogVEVYQ09PUkQwLAotICAgICAg
ICAgICAgICAgICAgICBvdXQgZmxvYXQ0IG91dFBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIG91dCBm
bG9hdDIgb3V0VGV4Q29vcmQgOiBURVhDT09SRDApCi17Ci0gICAgb3V0UG9zaXRpb24gPSBmbG9h
dDQoaW5Qb3NpdGlvbiwgMC4wZiwgMS4wZik7Ci0gICAgb3V0VGV4Q29vcmQgPSBpblRleENvb3Jk
OwotfQotCi1mbG9hdDQgUFNfUGFzc3Rocm91Z2hSR0JBKGluIGZsb2F0NCBpblBvc2l0aW9uIDog
U1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNWX1RBUkdF
VDAKLXsKLSAgICByZXR1cm4gVGV4dHVyZS5TYW1wbGUoU2FtcGxlciwgaW5UZXhDb29yZCkucmdi
YTsKLX0KLQotZmxvYXQ0IFBTX1Bhc3N0aHJvdWdoUkdCKGluIGZsb2F0NCBpblBvc2l0aW9uIDog
U1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNWX1RBUkdF
VDAKLXsKLSAgICByZXR1cm4gZmxvYXQ0KFRleHR1cmUuU2FtcGxlKFNhbXBsZXIsIGluVGV4Q29v
cmQpLnJnYiwgMS4wZik7Ci19Ci0KLWZsb2F0NCBQU19QYXNzdGhyb3VnaEx1bShpbiBmbG9hdDQg
aW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JE
MCkgOiBTVl9UQVJHRVQwCi17Ci0gICAgcmV0dXJuIGZsb2F0NChUZXh0dXJlLlNhbXBsZShTYW1w
bGVyLCBpblRleENvb3JkKS5ycnIsIDEuMGYpOwotfQotCi1mbG9hdDQgUFNfUGFzc3Rocm91Z2hM
dW1BbHBoYShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5U
ZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCi17Ci0gICAgcmV0dXJuIFRleHR1cmUu
U2FtcGxlKFNhbXBsZXIsIGluVGV4Q29vcmQpLnJycmE7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQv
Y2xlYXIxMXZzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL3NoYWRlcnMvY29tcGlsZWQvY2xlYXIxMXZzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDZiYzc0MzEyNmVkMDZjOGY2NzU4ZTEwZTVkMTc3MjAxNDk1Yzk2ZGIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyMTF2cy5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0
ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQN
Ci0vLw0KLS8vDQotLy8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1l
ICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAg
IFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0t
LS0tLS0gLS0tLS0tLSAtLS0tLS0NCi0vLyBQT1NJVElPTiAgICAgICAgICAgICAgICAgMCAgIHh5
eiAgICAgICAgIDAgICAgIE5PTkUgICBmbG9hdCAgIHh5eiANCi0vLyBDT0xPUiAgICAgICAgICAg
ICAgICAgICAgMCAgIHh5encgICAgICAgIDEgICAgIE5PTkUgICBmbG9hdCAgIHh5encNCi0vLw0K
LS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAg
IEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0t
LS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAg
IFBPUyAgIGZsb2F0ICAgeHl6dw0KLS8vIENPTE9SICAgICAgICAgICAgICAgICAgICAwICAgeHl6
dyAgICAgICAgMSAgICAgTk9ORSAgIGZsb2F0ICAgeHl6dw0KLS8vDQotdnNfNF8wDQotZGNsX2lu
cHV0IHYwLnh5eg0KLWRjbF9pbnB1dCB2MS54eXp3DQotZGNsX291dHB1dF9zaXYgbzAueHl6dywg
cG9zaXRpb24NCi1kY2xfb3V0cHV0IG8xLnh5encNCi1tb3YgbzAueHl6LCB2MC54eXp4DQotbW92
IG8wLncsIGwoMS4wMDAwMDApDQotbW92IG8xLnh5encsIHYxLnh5encNCi1yZXQgDQotLy8gQXBw
cm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBC
WVRFIGdfVlNfQ2xlYXJbXSA9DQotew0KLSAgICAgNjgsICA4OCwgIDY2LCAgNjcsICA5NywgICA1
LCANCi0gICAgIDEzLCAxNjMsIDE2MCwgMjU0LCAgOTUsIDEyNywgDQotICAgICAzMCwgMTk0LCAx
MjEsIDE0NCwgMjM2LCAxODUsIA0KLSAgICAgNTksICAyOSwgICAxLCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgIDQ4LCAgIDIsICAgMCwgICAwLCAgIDUsICAgMCwgDQotICAgICAgMCwgICAwLCAgNTIs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAxNDAsICAgMCwgICAwLCAgIDAsIDIyMCwgICAwLCANCi0g
ICAgICAwLCAgIDAsICA0OCwgICAxLCAgIDAsICAgMCwgDQotICAgIDE4MCwgICAxLCAgIDAsICAg
MCwgIDgyLCAgNjgsIA0KLSAgICAgNjksICA3MCwgIDgwLCAgIDAsICAgMCwgICAwLCANCi0gICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KLSAgICAgMjgsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCANCi0gICAgMjU0
LCAyNTUsICAgMCwgICAxLCAgIDAsICAgMCwgDQotICAgICAyOCwgICAwLCAgIDAsICAgMCwgIDc3
LCAxMDUsIA0KLSAgICAgOTksIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCANCi0gICAgMTE2LCAg
MzIsICA0MCwgIDgyLCAgNDEsICAzMiwgDQotICAgICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAg
ODMsIA0KLSAgICAxMDQsICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCANCi0gICAgIDY3LCAxMTEs
IDEwOSwgMTEyLCAxMDUsIDEwOCwgDQotICAgIDEwMSwgMTE0LCAgMzIsICA1NywgIDQ2LCAgNTEs
IA0KLSAgICAgNDgsICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4LCANCi0gICAgIDQ2LCAgNDksICA1
NCwgIDUxLCAgNTYsICA1MiwgDQotICAgICAgMCwgMTcxLCAgNzMsICA4MywgIDcxLCAgNzgsIA0K
LSAgICAgNzIsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgOCwg
ICAwLCAgIDAsICAgMCwgDQotICAgICA1NiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAzLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDcsICAgNywgICAwLCAgIDAsIA0KLSAgICAg
NjUsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQotICAgICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgIDE1LCAgMTUsICAgMCwgICAwLCANCi0gICAgIDgwLCAgNzksICA4MywgIDczLCAgODQs
ICA3MywgDQotICAgICA3OSwgIDc4LCAgIDAsICA2NywgIDc5LCAgNzYsIA0KLSAgICAgNzksICA4
MiwgICAwLCAxNzEsICA3OSwgIDgzLCANCi0gICAgIDcxLCAgNzgsICA3NiwgICAwLCAgIDAsICAg
MCwgDQotICAgICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
IDU2LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwg
DQotICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAxNSwgICAwLCANCi0gICAgICAwLCAgIDAsICA2OCwgICAwLCAgIDAsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAzLCAg
IDAsICAgMCwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgMTUsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgODMsICA4NiwgIDk1LCAgODAsIA0KLSAgICAgNzksICA4MywgIDczLCAgODQs
ICA3MywgIDc5LCANCi0gICAgIDc4LCAgIDAsICA2NywgIDc5LCAgNzYsICA3OSwgDQotICAgICA4
MiwgICAwLCAxNzEsIDE3MSwgIDgzLCAgNzIsIA0KLSAgICAgNjgsICA4MiwgMTI0LCAgIDAsICAg
MCwgICAwLCANCi0gICAgIDY0LCAgIDAsICAgMSwgICAwLCAgMzEsICAgMCwgDQotICAgICAgMCwg
ICAwLCAgOTUsICAgMCwgICAwLCAgIDMsIA0KLSAgICAxMTQsICAxNiwgIDE2LCAgIDAsICAgMCwg
ICAwLCANCi0gICAgICAwLCAgIDAsICA5NSwgICAwLCAgIDAsICAgMywgDQotICAgIDI0MiwgIDE2
LCAgMTYsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgMTAzLCAgIDAsICAgMCwgICA0
LCANCi0gICAgMjQyLCAgMzIsICAxNiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAg
IDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAxMDEsICAgMCwgICAwLCAgIDMsIDI0MiwgIDMyLCAN
Ci0gICAgIDE2LCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQotICAgICA1NCwgICAwLCAgIDAs
ICAgNSwgMTE0LCAgMzIsIA0KLSAgICAgMTYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0g
ICAgIDcwLCAgMTgsICAxNiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgNTQsICAg
MCwgICAwLCAgIDUsIA0KLSAgICAxMzAsICAzMiwgIDE2LCAgIDAsICAgMCwgICAwLCANCi0gICAg
ICAwLCAgIDAsICAgMSwgIDY0LCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAxMjgsICA2Mywg
IDU0LCAgIDAsIA0KLSAgICAgIDAsICAgNSwgMjQyLCAgMzIsICAxNiwgICAwLCANCi0gICAgICAx
LCAgIDAsICAgMCwgICAwLCAgNzAsICAzMCwgDQotICAgICAxNiwgICAwLCAgIDEsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAgNjIsICAgMCwgICAwLCAgIDEsICA4MywgIDg0LCANCi0gICAgIDY1LCAg
ODQsIDExNiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICA0LCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsIA0KLSAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAg
MA0KLX07DQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL2NsZWFybXVsdGlwbGUxMXBzLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQv
Y2xlYXJtdWx0aXBsZTExcHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTRiNDQ1
YWMzZjZhNzFlNGM1ZTIxYWRjNGJhZTlhZmRiOTI4MzllNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJtdWx0aXBsZTExcHMuaAorKysg
L2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5
IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0DQotLy8N
Ci0vLw0KLS8vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAg
ICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlICBGb3JtYXQgICBVc2Vk
DQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0t
IC0tLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAg
ICAgICAwICAgICAgUE9TICAgZmxvYXQgICAgICAgDQotLy8gQ09MT1IgICAgICAgICAgICAgICAg
ICAgIDAgICB4eXp3ICAgICAgICAxICAgICBOT05FICAgZmxvYXQgICB4eXp3DQotLy8NCi0vLw0K
LS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRl
eCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0N
Ci0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQg
ICBmbG9hdCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMSAgIHh5encgICAg
ICAgIDEgICBUQVJHRVQgICBmbG9hdCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAg
ICAgMiAgIHh5encgICAgICAgIDIgICBUQVJHRVQgICBmbG9hdCAgIHh5encNCi0vLyBTVl9UQVJH
RVQgICAgICAgICAgICAgICAgMyAgIHh5encgICAgICAgIDMgICBUQVJHRVQgICBmbG9hdCAgIHh5
encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgNCAgIHh5encgICAgICAgIDQgICBUQVJH
RVQgICBmbG9hdCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgNSAgIHh5encg
ICAgICAgIDUgICBUQVJHRVQgICBmbG9hdCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAg
ICAgICAgNiAgIHh5encgICAgICAgIDYgICBUQVJHRVQgICBmbG9hdCAgIHh5encNCi0vLyBTVl9U
QVJHRVQgICAgICAgICAgICAgICAgNyAgIHh5encgICAgICAgIDcgICBUQVJHRVQgICBmbG9hdCAg
IHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHl6dw0KLWRjbF9v
dXRwdXQgbzAueHl6dw0KLWRjbF9vdXRwdXQgbzEueHl6dw0KLWRjbF9vdXRwdXQgbzIueHl6dw0K
LWRjbF9vdXRwdXQgbzMueHl6dw0KLWRjbF9vdXRwdXQgbzQueHl6dw0KLWRjbF9vdXRwdXQgbzUu
eHl6dw0KLWRjbF9vdXRwdXQgbzYueHl6dw0KLWRjbF9vdXRwdXQgbzcueHl6dw0KLW1vdiBvMC54
eXp3LCB2MS54eXp3DQotbW92IG8xLnh5encsIHYxLnh5encNCi1tb3YgbzIueHl6dywgdjEueHl6
dw0KLW1vdiBvMy54eXp3LCB2MS54eXp3DQotbW92IG80Lnh5encsIHYxLnh5encNCi1tb3YgbzUu
eHl6dywgdjEueHl6dw0KLW1vdiBvNi54eXp3LCB2MS54eXp3DQotbW92IG83Lnh5encsIHYxLnh5
encNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA5IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0j
ZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfQ2xlYXJNdWx0aXBsZVtdID0NCi17DQotICAgICA2
OCwgIDg4LCAgNjYsICA2NywgIDkyLCAgNTQsIA0KLSAgICAxMjAsIDEwNSwgMTY2LCAxOTYsIDEz
MiwgMTU4LCANCi0gICAgMjA5LCAgMzMsIDE4NSwgMTIyLCAgIDgsIDE4OSwgDQotICAgIDE0NSwg
MTE0LCAgIDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgODgsICAgMywgICAwLCAgIDAsICAgNSwg
ICAwLCANCi0gICAgICAwLCAgIDAsICA1MiwgICAwLCAgIDAsICAgMCwgDQotICAgIDE0MCwgICAw
LCAgIDAsICAgMCwgMjI0LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgMTg4LCAgIDEsICAgMCwgICAw
LCANCi0gICAgMjIwLCAgIDIsICAgMCwgICAwLCAgODIsICA2OCwgDQotICAgICA2OSwgIDcwLCAg
ODAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAyOCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDQsIA0KLSAgICAyNTUsIDI1NSwgICAwLCAgIDEsICAgMCwgICAwLCANCi0g
ICAgIDI4LCAgIDAsICAgMCwgICAwLCAgNzcsIDEwNSwgDQotICAgICA5OSwgMTE0LCAxMTEsIDEx
NSwgMTExLCAxMDIsIA0KLSAgICAxMTYsICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCANCi0gICAg
IDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgDQotICAgIDEwNCwgIDk3LCAxMDAsIDEwMSwg
MTE0LCAgMzIsIA0KLSAgICAgNjcsIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCANCi0gICAgMTAx
LCAxMTQsICAzMiwgIDU3LCAgNDYsICA1MSwgDQotICAgICA0OCwgIDQ2LCAgNTcsICA1MCwgIDQ4
LCAgNDgsIA0KLSAgICAgNDYsICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCANCi0gICAgICAwLCAx
NzEsICA3MywgIDgzLCAgNzEsICA3OCwgDQotICAgICA3NiwgICAwLCAgIDAsICAgMCwgICAyLCAg
IDAsIA0KLSAgICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCANCi0gICAgIDU2LCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAs
IA0KLSAgICAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAx
NSwgICAwLCAgIDAsICAgMCwgDQotICAgICA2OCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAzLCAgIDAsICAgMCwg
ICAwLCAgIDEsICAgMCwgDQotICAgICAgMCwgICAwLCAgMTUsICAxNSwgICAwLCAgIDAsIA0KLSAg
ICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCANCi0gICAgIDczLCAgODQsICA3MywgIDc5
LCAgNzgsICAgMCwgDQotICAgICA2NywgIDc5LCAgNzYsICA3OSwgIDgyLCAgIDAsIA0KLSAgICAx
NzEsIDE3MSwgIDc5LCAgODMsICA3MSwgIDc4LCANCi0gICAgMjEyLCAgIDAsICAgMCwgICAwLCAg
IDgsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsIA0KLSAgICAyMDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQotICAgICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgIDE1LCAgIDAsICAgMCwgICAwLCANCi0gICAgMjAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAg
MCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDMsICAgMCwg
ICAwLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwg
DQotICAgIDIwMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgMTUsICAgMCwgICAwLCAgIDAsIA0KLSAgICAyMDAsICAgMCwgICAwLCAg
IDAsICAgMywgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMywgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDE1LCAgIDAs
ICAgMCwgICAwLCANCi0gICAgMjAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDMsICAgMCwgICAwLCAgIDAsICAg
NCwgICAwLCANCi0gICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQotICAgIDIwMCwg
ICAwLCAgIDAsICAgMCwgICA1LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCANCi0gICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgDQotICAgICAgMCwgICAw
LCAgMTUsICAgMCwgICAwLCAgIDAsIA0KLSAgICAyMDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAw
LCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMywgICAwLCAg
IDAsICAgMCwgICA2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDE1LCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgMjAwLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDMsICAgMCwgICAwLCAgIDAsICAgNywgICAwLCANCi0g
ICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQotICAgICA4MywgIDg2LCAgOTUsICA4
NCwgIDY1LCAgODIsIA0KLSAgICAgNzEsICA2OSwgIDg0LCAgIDAsIDE3MSwgMTcxLCANCi0gICAg
IDgzLCAgNzIsICA2OCwgIDgyLCAgMjQsICAgMSwgDQotICAgICAgMCwgICAwLCAgNjQsICAgMCwg
ICAwLCAgIDAsIA0KLSAgICAgNzAsICAgMCwgICAwLCAgIDAsICA5OCwgIDE2LCANCi0gICAgICAw
LCAgIDMsIDI0MiwgIDE2LCAgMTYsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgMTAx
LCAgIDAsIA0KLSAgICAgIDAsICAgMywgMjQyLCAgMzIsICAxNiwgICAwLCANCi0gICAgICAwLCAg
IDAsICAgMCwgICAwLCAxMDEsICAgMCwgDQotICAgICAgMCwgICAzLCAyNDIsICAzMiwgIDE2LCAg
IDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsIDEwMSwgICAwLCANCi0gICAgICAwLCAgIDMs
IDI0MiwgIDMyLCAgMTYsICAgMCwgDQotICAgICAgMiwgICAwLCAgIDAsICAgMCwgMTAxLCAgIDAs
IA0KLSAgICAgIDAsICAgMywgMjQyLCAgMzIsICAxNiwgICAwLCANCi0gICAgICAzLCAgIDAsICAg
MCwgICAwLCAxMDEsICAgMCwgDQotICAgICAgMCwgICAzLCAyNDIsICAzMiwgIDE2LCAgIDAsIA0K
LSAgICAgIDQsICAgMCwgICAwLCAgIDAsIDEwMSwgICAwLCANCi0gICAgICAwLCAgIDMsIDI0Miwg
IDMyLCAgMTYsICAgMCwgDQotICAgICAgNSwgICAwLCAgIDAsICAgMCwgMTAxLCAgIDAsIA0KLSAg
ICAgIDAsICAgMywgMjQyLCAgMzIsICAxNiwgICAwLCANCi0gICAgICA2LCAgIDAsICAgMCwgICAw
LCAxMDEsICAgMCwgDQotICAgICAgMCwgICAzLCAyNDIsICAzMiwgIDE2LCAgIDAsIA0KLSAgICAg
IDcsICAgMCwgICAwLCAgIDAsICA1NCwgICAwLCANCi0gICAgICAwLCAgIDUsIDI0MiwgIDMyLCAg
MTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDcwLCAgMzAsIA0KLSAgICAgMTYs
ICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAgIDU0LCAgIDAsICAgMCwgICA1LCAyNDIs
ICAzMiwgDQotICAgICAxNiwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgNzAsICAz
MCwgIDE2LCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICA1NCwgICAwLCAgIDAsICAg
NSwgDQotICAgIDI0MiwgIDMyLCAgMTYsICAgMCwgICAyLCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
IDcwLCAgMzAsICAxNiwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgNTQsICAgMCwg
DQotICAgICAgMCwgICA1LCAyNDIsICAzMiwgIDE2LCAgIDAsIA0KLSAgICAgIDMsICAgMCwgICAw
LCAgIDAsICA3MCwgIDMwLCANCi0gICAgIDE2LCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQot
ICAgICA1NCwgICAwLCAgIDAsICAgNSwgMjQyLCAgMzIsIA0KLSAgICAgMTYsICAgMCwgICA0LCAg
IDAsICAgMCwgICAwLCANCi0gICAgIDcwLCAgMzAsICAxNiwgICAwLCAgIDEsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgNTQsICAgMCwgICAwLCAgIDUsIA0KLSAgICAyNDIsICAzMiwgIDE2LCAgIDAs
ICAgNSwgICAwLCANCi0gICAgICAwLCAgIDAsICA3MCwgIDMwLCAgMTYsICAgMCwgDQotICAgICAg
MSwgICAwLCAgIDAsICAgMCwgIDU0LCAgIDAsIA0KLSAgICAgIDAsICAgNSwgMjQyLCAgMzIsICAx
NiwgICAwLCANCi0gICAgICA2LCAgIDAsICAgMCwgICAwLCAgNzAsICAzMCwgDQotICAgICAxNiwg
ICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgNTQsICAgMCwgICAwLCAgIDUsIDI0Miwg
IDMyLCANCi0gICAgIDE2LCAgIDAsICAgNywgICAwLCAgIDAsICAgMCwgDQotICAgICA3MCwgIDMw
LCAgMTYsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDYyLCAgIDAsICAgMCwgICAx
LCANCi0gICAgIDgzLCAgODQsICA2NSwgIDg0LCAxMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAg
IDksICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgICAwLCAgIDAsICAgOSwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0g
ICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAgIDksICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDANCi19Ow0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9jbGVh
cnNpbmdsZTExcHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvc2hhZGVycy9jb21waWxlZC9jbGVhcnNpbmdsZTExcHMuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggODdjYjA4N2M3NTA1MjYyYzgwN2IzZjRhNTE3MWExZDgwZTYyMWY1ZS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvY2xl
YXJzaW5nbGUxMXBzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotI2lmIDANCi0v
Lw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDku
MzAuOTIwMC4xNjM4NA0KLS8vDQotLy8NCi0vLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToN
Ci0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNW
YWx1ZSAgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0t
LSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1Bvc2l0aW9uICAgICAg
ICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgIGZsb2F0ICAgICAgIA0KLS8vIENP
TE9SICAgICAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMSAgICAgTk9ORSAgIGZsb2F0
ICAgeHl6dw0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAg
ICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlICBGb3JtYXQgICBV
c2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0t
LS0tIC0tLS0tLS0gLS0tLS0tDQotLy8gU1ZfVGFyZ2V0ICAgICAgICAgICAgICAgIDAgICB4eXp3
ICAgICAgICAwICAgVEFSR0VUICAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfaW5w
dXRfcHMgbGluZWFyIHYxLnh5encNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1tb3YgbzAueHl6dywg
djEueHl6dw0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDIgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNl
ZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19DbGVhclNpbmdsZVtdID0NCi17DQotICAg
ICA2OCwgIDg4LCAgNjYsICA2NywgIDEzLCAxNTIsIA0KLSAgICAgMzIsICA0OSwgMjIyLCAyMzYs
ICA5MiwgIDIwLCANCi0gICAgMTg4LCAgNzEsICA4OCwgIDQ2LCAxNjMsIDI0MSwgDQotICAgIDE4
OCwgMjM4LCAgIDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAyMDgsICAgMSwgICAwLCAgIDAsICAg
NSwgICAwLCANCi0gICAgICAwLCAgIDAsICA1MiwgICAwLCAgIDAsICAgMCwgDQotICAgIDE0MCwg
ICAwLCAgIDAsICAgMCwgMjI0LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDIwLCAgIDEsICAgMCwg
ICAwLCANCi0gICAgIDg0LCAgIDEsICAgMCwgICAwLCAgODIsICA2OCwgDQotICAgICA2OSwgIDcw
LCAgODAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAyOCwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDQsIA0KLSAgICAyNTUsIDI1NSwgICAwLCAgIDEsICAgMCwgICAwLCAN
Ci0gICAgIDI4LCAgIDAsICAgMCwgICAwLCAgNzcsIDEwNSwgDQotICAgICA5OSwgMTE0LCAxMTEs
IDExNSwgMTExLCAxMDIsIA0KLSAgICAxMTYsICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCANCi0g
ICAgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgDQotICAgIDEwNCwgIDk3LCAxMDAsIDEw
MSwgMTE0LCAgMzIsIA0KLSAgICAgNjcsIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCANCi0gICAg
MTAxLCAxMTQsICAzMiwgIDU3LCAgNDYsICA1MSwgDQotICAgICA0OCwgIDQ2LCAgNTcsICA1MCwg
IDQ4LCAgNDgsIA0KLSAgICAgNDYsICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCANCi0gICAgICAw
LCAxNzEsICA3MywgIDgzLCAgNzEsICA3OCwgDQotICAgICA3NiwgICAwLCAgIDAsICAgMCwgICAy
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCANCi0gICAgIDU2LCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAg
IDAsIA0KLSAgICAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAs
ICAxNSwgICAwLCAgIDAsICAgMCwgDQotICAgICA2OCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAzLCAgIDAsICAg
MCwgICAwLCAgIDEsICAgMCwgDQotICAgICAgMCwgICAwLCAgMTUsICAxNSwgICAwLCAgIDAsIA0K
LSAgICAgODMsICA4NiwgIDk1LCAgODAsIDExMSwgMTE1LCANCi0gICAgMTA1LCAxMTYsIDEwNSwg
MTExLCAxMTAsICAgMCwgDQotICAgICA2NywgIDc5LCAgNzYsICA3OSwgIDgyLCAgIDAsIA0KLSAg
ICAxNzEsIDE3MSwgIDc5LCAgODMsICA3MSwgIDc4LCANCi0gICAgIDQ0LCAgIDAsICAgMCwgICAw
LCAgIDEsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
MzIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQotICAgICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgIDE1LCAgIDAsICAgMCwgICAwLCANCi0gICAgIDgzLCAgODYsICA5NSwgIDg0LCAgOTcs
IDExNCwgDQotICAgIDEwMywgMTAxLCAxMTYsICAgMCwgMTcxLCAxNzEsIA0KLSAgICAgODMsICA3
MiwgIDY4LCAgODIsICA1NiwgICAwLCANCi0gICAgICAwLCAgIDAsICA2NCwgICAwLCAgIDAsICAg
MCwgDQotICAgICAxNCwgICAwLCAgIDAsICAgMCwgIDk4LCAgMTYsIA0KLSAgICAgIDAsICAgMywg
MjQyLCAgMTYsICAxNiwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAxMDEsICAgMCwg
DQotICAgICAgMCwgICAzLCAyNDIsICAzMiwgIDE2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAw
LCAgIDAsICA1NCwgICAwLCANCi0gICAgICAwLCAgIDUsIDI0MiwgIDMyLCAgMTYsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDcwLCAgMzAsIA0KLSAgICAgMTYsICAgMCwgICAxLCAg
IDAsICAgMCwgICAwLCANCi0gICAgIDYyLCAgIDAsICAgMCwgICAxLCAgODMsICA4NCwgDQotICAg
ICA2NSwgIDg0LCAxMTYsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDIsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQotICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAN
Ci0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0g
ICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAg
ICAwLCAgIDANCi19Ow0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9jb21wb25lbnRtYXNrcHMuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21w
aWxlZC9jb21wb25lbnRtYXNrcHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYy
ODQ3YjhlN2QzNWYxNTdjYTFhOGQyODE4M2M1ZWI3YzRkMjZlZS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvY29tcG9uZW50bWFza3BzLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5
IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0DQotLy8N
Ci0vLy8NCi0vLyBQYXJhbWV0ZXJzOg0KLS8vDQotLy8gICBmbG9hdDQgbW9kZTsNCi0vLyAgIHNh
bXBsZXIyRCB0ZXg7DQotLy8NCi0vLw0KLS8vIFJlZ2lzdGVyczoNCi0vLw0KLS8vICAgTmFtZSAg
ICAgICAgIFJlZyAgIFNpemUNCi0vLyAgIC0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tDQotLy8gICBt
b2RlICAgICAgICAgYzAgICAgICAgMQ0KLS8vICAgdGV4ICAgICAgICAgIHMwICAgICAgIDENCi0v
Lw0KLQ0KLSAgICBwc18yXzANCi0gICAgZGNsIHQwLnh5DQotICAgIGRjbF8yZCBzMA0KLSAgICB0
ZXhsZCByMCwgdDAsIHMwDQotICAgIG11bCByMS54eXosIHIwLCBjMC54DQotICAgIG1hZCByMS53
LCByMC53LCBjMC56LCBjMC53DQotICAgIG1vdiBvQzAsIHIxDQotDQotLy8gYXBwcm94aW1hdGVs
eSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVyZSwgMyBhcml0aG1ldGljKQ0KLSNl
bmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19wczIwX2NvbXBvbmVudG1hc2twc1tdID0NCi17DQotICAg
ICAgMCwgICAyLCAyNTUsIDI1NSwgMjU0LCAyNTUsIA0KLSAgICAgNDQsICAgMCwgIDY3LCAgODQs
ICA2NSwgIDY2LCANCi0gICAgIDI4LCAgIDAsICAgMCwgICAwLCAxMTksICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDAsICAgMiwgMjU1LCAyNTUsIA0KLSAgICAgIDIsICAgMCwgICAwLCAgIDAsICAy
OCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgDQotICAgIDExMiwg
ICAwLCAgIDAsICAgMCwgIDY4LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwg
ICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgNzYsICAgMCwgDQotICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgOTIsICAgMCwgICAwLCAgIDAsICAgMywgICAw
LCANCi0gICAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQotICAgICA5NiwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgMTA5LCAxMTEsIDEwMCwgMTAxLCAN
Ci0gICAgICAwLCAxNzEsIDE3MSwgMTcxLCAgIDEsICAgMCwgDQotICAgICAgMywgICAwLCAgIDEs
ICAgMCwgICA0LCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0g
ICAgICAwLCAgIDAsIDExNiwgMTAxLCAxMjAsICAgMCwgDQotICAgICAgNCwgICAwLCAgMTIsICAg
MCwgICAxLCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAg
ICAwLCAgIDAsICAgMCwgICAwLCAxMTIsIDExNSwgDQotICAgICA5NSwgIDUwLCAgOTUsICA0OCwg
ICAwLCAgNzcsIA0KLSAgICAxMDUsICA5OSwgMTE0LCAxMTEsIDExNSwgMTExLCANCi0gICAgMTAy
LCAxMTYsICAzMiwgIDQwLCAgODIsICA0MSwgDQotICAgICAzMiwgIDcyLCAgNzYsICA4MywgIDc2
LCAgMzIsIA0KLSAgICAgODMsIDEwNCwgIDk3LCAxMDAsIDEwMSwgMTE0LCANCi0gICAgIDMyLCAg
NjcsIDExMSwgMTA5LCAxMTIsIDEwNSwgDQotICAgIDEwOCwgMTAxLCAxMTQsICAzMiwgIDU3LCAg
NDYsIA0KLSAgICAgNTEsICA0OCwgIDQ2LCAgNTcsICA1MCwgIDQ4LCANCi0gICAgIDQ4LCAgNDYs
ICA0OSwgIDU0LCAgNTEsICA1NiwgDQotICAgICA1MiwgICAwLCAxNzEsIDE3MSwgIDMxLCAgIDAs
IA0KLSAgICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTI4LCANCi0gICAgICAwLCAgIDAsICAg
MywgMTc2LCAgMzEsICAgMCwgDQotICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAxNDQsIA0K
LSAgICAgIDAsICAgOCwgIDE1LCAxNjAsICA2NiwgICAwLCANCi0gICAgICAwLCAgIDMsICAgMCwg
ICAwLCAgMTUsIDEyOCwgDQotICAgICAgMCwgICAwLCAyMjgsIDE3NiwgICAwLCAgIDgsIA0KLSAg
ICAyMjgsIDE2MCwgICA1LCAgIDAsICAgMCwgICAzLCANCi0gICAgICAxLCAgIDAsICAgNywgMTI4
LCAgIDAsICAgMCwgDQotICAgIDIyOCwgMTI4LCAgIDAsICAgMCwgICAwLCAxNjAsIA0KLSAgICAg
IDQsICAgMCwgICAwLCAgIDQsICAgMSwgICAwLCANCi0gICAgICA4LCAxMjgsICAgMCwgICAwLCAy
NTUsIDEyOCwgDQotICAgICAgMCwgICAwLCAxNzAsIDE2MCwgICAwLCAgIDAsIA0KLSAgICAyNTUs
IDE2MCwgICAxLCAgIDAsICAgMCwgICAyLCANCi0gICAgICAwLCAgIDgsICAxNSwgMTI4LCAgIDEs
ICAgMCwgDQotICAgIDIyOCwgMTI4LCAyNTUsIDI1NSwgICAwLCAgIDANCi19Ow0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVy
cy9jb21waWxlZC9mbGlweXZzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvZmxpcHl2cy5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMjU3NmVkNjc0MmYyZTJmNWVmM2ZiMTRhYjBkODNjNjk2YjU3M2QyLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9mbGlw
eXZzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0jaWYgMA0KLS8vDQotLy8gR2Vu
ZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2
Mzg0DQotLy8NCi0vLy8NCi0vLyBQYXJhbWV0ZXJzOg0KLS8vDQotLy8gICBmbG9hdDQgaGFsZlBp
eGVsU2l6ZTsNCi0vLw0KLS8vDQotLy8gUmVnaXN0ZXJzOg0KLS8vDQotLy8gICBOYW1lICAgICAg
ICAgIFJlZyAgIFNpemUNCi0vLyAgIC0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQ0KLS8vICAgaGFs
ZlBpeGVsU2l6ZSBjMCAgICAgICAxDQotLy8NCi0NCi0gICAgdnNfMl8wDQotICAgIGRlZiBjMSwg
MC41LCAxLCAwLCAwDQotICAgIGRjbF9wb3NpdGlvbiB2MA0KLSAgICBhZGQgb1BvcywgdjAsIGMw
DQotICAgIG1hZCBvVDAsIHYwLCBjMS54eHl5LCBjMS54eHp6DQotDQotLy8gYXBwcm94aW1hdGVs
eSAyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfdnMy
MF9mbGlweXZzW10gPQ0KLXsNCi0gICAgICAwLCAgIDIsIDI1NCwgMjU1LCAyNTQsIDI1NSwgDQot
ICAgICAzNiwgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIA0KLSAgICAgMjgsICAgMCwgICAwLCAg
IDAsICA4NywgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTQsIDI1NSwgDQotICAg
ICAgMSwgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDEs
ICAgMCwgICAwLCANCi0gICAgIDgwLCAgIDAsICAgMCwgICAwLCAgNDgsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICA2
NCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgIDEwNCwg
IDk3LCAxMDgsIDEwMiwgIDgwLCAxMDUsIA0KLSAgICAxMjAsIDEwMSwgMTA4LCAgODMsIDEwNSwg
MTIyLCANCi0gICAgMTAxLCAgIDAsIDE3MSwgMTcxLCAgIDEsICAgMCwgDQotICAgICAgMywgICAw
LCAgIDEsICAgMCwgICA0LCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCANCi0gICAgICAwLCAgIDAsIDExOCwgMTE1LCAgOTUsICA1MCwgDQotICAgICA5NSwgIDQ4LCAg
IDAsICA3NywgMTA1LCAgOTksIA0KLSAgICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAN
Ci0gICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgDQotICAgICA3NiwgIDgzLCAgNzYs
ICAzMiwgIDgzLCAxMDQsIA0KLSAgICAgOTcsIDEwMCwgMTAxLCAxMTQsICAzMiwgIDY3LCANCi0g
ICAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgDQotICAgIDExNCwgIDMyLCAgNTcsICA0
NiwgIDUxLCAgNDgsIA0KLSAgICAgNDYsICA1NywgIDUwLCAgNDgsICA0OCwgIDQ2LCANCi0gICAg
IDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAgMCwgDQotICAgIDE3MSwgMTcxLCAgODEsICAgMCwg
ICAwLCAgIDUsIA0KLSAgICAgIDEsICAgMCwgIDE1LCAxNjAsICAgMCwgICAwLCANCi0gICAgICAw
LCAgNjMsICAgMCwgICAwLCAxMjgsICA2MywgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDMxLCAgIDAsICAgMCwgICAyLCANCi0gICAgICAwLCAg
IDAsICAgMCwgMTI4LCAgIDAsICAgMCwgDQotICAgICAxNSwgMTQ0LCAgIDIsICAgMCwgICAwLCAg
IDMsIA0KLSAgICAgIDAsICAgMCwgIDE1LCAxOTIsICAgMCwgICAwLCANCi0gICAgMjI4LCAxNDQs
ICAgMCwgICAwLCAyMjgsIDE2MCwgDQotICAgICAgNCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAs
IA0KLSAgICAgMTUsIDIyNCwgICAwLCAgIDAsIDIyOCwgMTQ0LCANCi0gICAgICAxLCAgIDAsICA4
MCwgMTYwLCAgIDEsICAgMCwgDQotICAgIDE2MCwgMTYwLCAyNTUsIDI1NSwgICAwLCAgIDANCi19
Ow0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvc2hhZGVycy9jb21waWxlZC9sdW1pbmFuY2Vwcy5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL2x1bWluYW5jZXBz
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwMzEzYjA4NjBlY2ZlMDI2NzdkZGIz
ZjAwMDkxNTFmNzhhM2JmYjIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9z
aGFkZXJzL2NvbXBpbGVkL2x1bWluYW5jZXBzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCww
IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFk
ZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0DQotLy8NCi0vLy8NCi0vLyBQYXJhbWV0ZXJzOg0K
LS8vDQotLy8gICBmbG9hdDQgbW9kZTsNCi0vLyAgIHNhbXBsZXIyRCB0ZXg7DQotLy8NCi0vLw0K
LS8vIFJlZ2lzdGVyczoNCi0vLw0KLS8vICAgTmFtZSAgICAgICAgIFJlZyAgIFNpemUNCi0vLyAg
IC0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tDQotLy8gICBtb2RlICAgICAgICAgYzAgICAgICAgMQ0K
LS8vICAgdGV4ICAgICAgICAgIHMwICAgICAgIDENCi0vLw0KLQ0KLSAgICBwc18yXzANCi0gICAg
ZGNsIHQwLnh5DQotICAgIGRjbF8yZCBzMA0KLSAgICB0ZXhsZCByMCwgdDAsIHMwDQotICAgIG1h
ZCByMS53LCByMC53LCBjMC54LCBjMC55DQotICAgIG1vdiByMS54eXosIHIwLngNCi0gICAgbW92
IG9DMCwgcjENCi0NCi0vLyBhcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAo
MSB0ZXh0dXJlLCAzIGFyaXRobWV0aWMpDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX3BzMjBf
bHVtaW5hbmNlcHNbXSA9DQotew0KLSAgICAgIDAsICAgMiwgMjU1LCAyNTUsIDI1NCwgMjU1LCAN
Ci0gICAgIDQ0LCAgIDAsICA2NywgIDg0LCAgNjUsICA2NiwgDQotICAgICAyOCwgICAwLCAgIDAs
ICAgMCwgMTE5LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDIsIDI1NSwgMjU1LCANCi0g
ICAgICAyLCAgIDAsICAgMCwgICAwLCAgMjgsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAg
MSwgICAwLCAgIDAsIA0KLSAgICAxMTIsICAgMCwgICAwLCAgIDAsICA2OCwgICAwLCANCi0gICAg
ICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwg
IDc2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgIDky
LCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAgOTYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAg
IDAsIDEwOSwgMTExLCAxMDAsIDEwMSwgDQotICAgICAgMCwgMTcxLCAxNzEsIDE3MSwgICAxLCAg
IDAsIA0KLSAgICAgIDMsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCANCi0gICAgICAxLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAxMTYsIDEwMSwgMTIwLCAgIDAs
IA0KLSAgICAgIDQsICAgMCwgIDEyLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAxLCAgIDAsICAg
MSwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgMTEyLCAxMTUsIA0K
LSAgICAgOTUsICA1MCwgIDk1LCAgNDgsICAgMCwgIDc3LCANCi0gICAgMTA1LCAgOTksIDExNCwg
MTExLCAxMTUsIDExMSwgDQotICAgIDEwMiwgMTE2LCAgMzIsICA0MCwgIDgyLCAgNDEsIA0KLSAg
ICAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCANCi0gICAgIDgzLCAxMDQsICA5NywgMTAw
LCAxMDEsIDExNCwgDQotICAgICAzMiwgIDY3LCAxMTEsIDEwOSwgMTEyLCAxMDUsIA0KLSAgICAx
MDgsIDEwMSwgMTE0LCAgMzIsICA1NywgIDQ2LCANCi0gICAgIDUxLCAgNDgsICA0NiwgIDU3LCAg
NTAsICA0OCwgDQotICAgICA0OCwgIDQ2LCAgNDksICA1NCwgIDUxLCAgNTYsIA0KLSAgICAgNTIs
ICAgMCwgMTcxLCAxNzEsICAzMSwgICAwLCANCi0gICAgICAwLCAgIDIsICAgMCwgICAwLCAgIDAs
IDEyOCwgDQotICAgICAgMCwgICAwLCAgIDMsIDE3NiwgIDMxLCAgIDAsIA0KLSAgICAgIDAsICAg
MiwgICAwLCAgIDAsICAgMCwgMTQ0LCANCi0gICAgICAwLCAgIDgsICAxNSwgMTYwLCAgNjYsICAg
MCwgDQotICAgICAgMCwgICAzLCAgIDAsICAgMCwgIDE1LCAxMjgsIA0KLSAgICAgIDAsICAgMCwg
MjI4LCAxNzYsICAgMCwgICA4LCANCi0gICAgMjI4LCAxNjAsICAgNCwgICAwLCAgIDAsICAgNCwg
DQotICAgICAgMSwgICAwLCAgIDgsIDEyOCwgICAwLCAgIDAsIA0KLSAgICAyNTUsIDEyOCwgICAw
LCAgIDAsICAgMCwgMTYwLCANCi0gICAgICAwLCAgIDAsICA4NSwgMTYwLCAgIDEsICAgMCwgDQot
ICAgICAgMCwgICAyLCAgIDEsICAgMCwgICA3LCAxMjgsIA0KLSAgICAgIDAsICAgMCwgICAwLCAx
MjgsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDIsICAgMCwgICA4LCAgMTUsIDEyOCwgDQotICAg
ICAgMSwgICAwLCAyMjgsIDEyOCwgMjU1LCAyNTUsIA0KLSAgICAgIDAsICAgMA0KLX07DQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9z
aGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdoMTF2cy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdoMTF2
cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM5NTIxNmU5OTIwZmNjYTAzMmIx
ZWFjODUzZTg1YWI4YjFiNjYwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
c2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaDExdnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEz
NCArMCwwIEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExT
TCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0DQotLy8NCi0vLw0KLS8vLw0KLS8vDQot
Ly8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXgg
ICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlICBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tDQot
Ly8gUE9TSVRJT04gICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAwICAgICBOT05FICAg
ZmxvYXQgICB4eSAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAg
ICAxICAgICBOT05FICAgZmxvYXQgICB4eSAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1
cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIg
U3lzVmFsdWUgIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAt
LS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAg
ICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgICBmbG9hdCAgIHh5encNCi0v
LyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgICBm
bG9hdCAgIHh5ICANCi0vLw0KLXZzXzRfMA0KLWRjbF9pbnB1dCB2MC54eQ0KLWRjbF9pbnB1dCB2
MS54eQ0KLWRjbF9vdXRwdXRfc2l2IG8wLnh5encsIHBvc2l0aW9uDQotZGNsX291dHB1dCBvMS54
eQ0KLW1vdiBvMC54eSwgdjAueHl4eA0KLW1vdiBvMC56dywgbCgwLDAsMCwxLjAwMDAwMCkNCi1t
b3YgbzEueHksIHYxLnh5eHgNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9u
IHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfVlNfUGFzc3Rocm91Z2hbXSA9
DQotew0KLSAgICAgNjgsICA4OCwgIDY2LCAgNjcsIDE5NywgMjE0LCANCi0gICAgMTg0LCAgODUs
IDI0MCwgIDk0LCAgNzEsICA0OCwgDQotICAgIDE2NSwgIDM0LCAxNDIsIDIzMywgICAwLCAxMzUs
IA0KLSAgICAxOTMsIDE3OCwgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAgIDY4LCAgIDIsICAg
MCwgICAwLCAgIDUsICAgMCwgDQotICAgICAgMCwgICAwLCAgNTIsICAgMCwgICAwLCAgIDAsIA0K
LSAgICAxNDAsICAgMCwgICAwLCAgIDAsIDIyNCwgICAwLCANCi0gICAgICAwLCAgIDAsICA1Niwg
ICAxLCAgIDAsICAgMCwgDQotICAgIDIwMCwgICAxLCAgIDAsICAgMCwgIDgyLCAgNjgsIA0KLSAg
ICAgNjksICA3MCwgIDgwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
MjgsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCANCi0gICAgMjU0LCAyNTUsICAgMCwgICAxLCAg
IDAsICAgMCwgDQotICAgICAyOCwgICAwLCAgIDAsICAgMCwgIDc3LCAxMDUsIA0KLSAgICAgOTks
IDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCANCi0gICAgMTE2LCAgMzIsICA0MCwgIDgyLCAgNDEs
ICAzMiwgDQotICAgICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsIA0KLSAgICAxMDQsICA5
NywgMTAwLCAxMDEsIDExNCwgIDMyLCANCi0gICAgIDY3LCAxMTEsIDEwOSwgMTEyLCAxMDUsIDEw
OCwgDQotICAgIDEwMSwgMTE0LCAgMzIsICA1NywgIDQ2LCAgNTEsIA0KLSAgICAgNDgsICA0Niwg
IDU3LCAgNTAsICA0OCwgIDQ4LCANCi0gICAgIDQ2LCAgNDksICA1NCwgIDUxLCAgNTYsICA1Miwg
DQotICAgICAgMCwgMTcxLCAgNzMsICA4MywgIDcxLCAgNzgsIA0KLSAgICAgNzYsICAgMCwgICAw
LCAgIDAsICAgMiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgDQot
ICAgICA1NiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCi0gICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsIA0KLSAgICAgNjUsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAzLCAgIDMsICAg
MCwgICAwLCANCi0gICAgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgDQotICAgICA3OSwg
IDc4LCAgIDAsICA4NCwgIDY5LCAgODgsIA0KLSAgICAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwg
ICAwLCANCi0gICAgMTcxLCAxNzEsICA3OSwgIDgzLCAgNzEsICA3OCwgDQotICAgICA4MCwgICAw
LCAgIDAsICAgMCwgICAyLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAw
LCANCi0gICAgIDU2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAg
IDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQotICAgICA2OCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0g
ICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDMsICAx
MiwgICAwLCAgIDAsIA0KLSAgICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCANCi0gICAg
IDczLCAgODQsICA3MywgIDc5LCAgNzgsICAgMCwgDQotICAgICA4NCwgIDY5LCAgODgsICA2Nywg
IDc5LCAgNzksIA0KLSAgICAgODIsICA2OCwgICAwLCAxNzEsIDE3MSwgMTcxLCANCi0gICAgIDgz
LCAgNzIsICA2OCwgIDgyLCAxMzYsICAgMCwgDQotICAgICAgMCwgICAwLCAgNjQsICAgMCwgICAx
LCAgIDAsIA0KLSAgICAgMzQsICAgMCwgICAwLCAgIDAsICA5NSwgICAwLCANCi0gICAgICAwLCAg
IDMsICA1MCwgIDE2LCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDk1LCAg
IDAsIA0KLSAgICAgIDAsICAgMywgIDUwLCAgMTYsICAxNiwgICAwLCANCi0gICAgICAxLCAgIDAs
ICAgMCwgICAwLCAxMDMsICAgMCwgDQotICAgICAgMCwgICA0LCAyNDIsICAzMiwgIDE2LCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsIDEw
MSwgICAwLCAgIDAsICAgMywgDQotICAgICA1MCwgIDMyLCAgMTYsICAgMCwgICAxLCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgIDU0LCAgIDAsICAgMCwgICA1LCANCi0gICAgIDUwLCAgMzIsICAxNiwg
ICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgNzAsICAxNiwgIDE2LCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICA1NCwgICAwLCANCi0gICAgICAwLCAgIDgsIDE5NCwgIDMy
LCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgNjQsIA0KLSAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgMTI4LCAgNjMsIA0KLSAgICAgNTQs
ICAgMCwgICAwLCAgIDUsICA1MCwgIDMyLCANCi0gICAgIDE2LCAgIDAsICAgMSwgICAwLCAgIDAs
ICAgMCwgDQotICAgICA3MCwgIDE2LCAgMTYsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgIDYyLCAgIDAsICAgMCwgICAxLCANCi0gICAgIDgzLCAgODQsICA2NSwgIDg0LCAxMTYsICAg
MCwgDQotICAgICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDQsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDANCi19Ow0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
c2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaGx1bTExcHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3Vn
aGx1bTExcHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YwN2I0YTNjYmQ4OTY1
ZDE4Y2I0OGQwMThlNDEyZDg0MjQyMDg5NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hsdW0xMXBzLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxNTIgKzAsMCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3Nv
ZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NA0KLS8vDQotLy8NCi0v
Ly8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0t
LS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1
cmUgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgMmQg
ICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0K
LS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAg
Rm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0t
LS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAg
ICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgIGZsb2F0ICAgICAgIA0KLS8vIFRFWENPT1JE
ICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgIGZsb2F0ICAgeHkg
IA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAg
ICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlICBGb3JtYXQgICBVc2VkDQot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0t
LS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAg
ICAwICAgVEFSR0VUICAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBz
MCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxv
YXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQ0KLWRjbF9vdXRwdXQgbzAu
eHl6dw0KLWRjbF90ZW1wcyAxDQotc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMw
DQotbW92IG8wLnh5eiwgcjAueHh4eA0KLW1vdiBvMC53LCBsKDEuMDAwMDAwKQ0KLXJldCANCi0v
LyBBcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNv
bnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaEx1bVtdID0NCi17DQotICAgICA2OCwgIDg4LCAgNjYs
ICA2NywgMjQ0LCAgIDksIA0KLSAgICAyMTMsIDE0NywgIDE5LCAyNDksICA3MCwgMTExLCANCi0g
ICAgMTU3LCAgOTIsIDI0MywgMTYwLCAgNDAsIDE0NCwgDQotICAgIDIzOCwgMjIxLCAgIDEsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAxMjgsICAgMiwgICAwLCAgIDAsICAgNSwgICAwLCANCi0gICAg
ICAwLCAgIDAsICA1MiwgICAwLCAgIDAsICAgMCwgDQotICAgIDIyMCwgICAwLCAgIDAsICAgMCwg
IDUyLCAgIDEsIA0KLSAgICAgIDAsICAgMCwgMTA0LCAgIDEsICAgMCwgICAwLCANCi0gICAgICA0
LCAgIDIsICAgMCwgICAwLCAgODIsICA2OCwgDQotICAgICA2OSwgIDcwLCAxNjAsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAg
IDAsICAgMiwgICAwLCAgIDAsICAgMCwgDQotICAgICAyOCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDQsIA0KLSAgICAyNTUsIDI1NSwgICAwLCAgIDEsICAgMCwgICAwLCANCi0gICAgMTA4LCAgIDAs
ICAgMCwgICAwLCAgOTIsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAgMTAwLCAgIDAsICAgMCwg
ICAwLCAgIDIsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsIA0KLSAg
ICAgIDQsICAgMCwgICAwLCAgIDAsIDI1NSwgMjU1LCANCi0gICAgMjU1LCAyNTUsICAgMCwgICAw
LCAgIDAsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDEzLCAgIDAsIA0KLSAgICAg
IDAsICAgMCwgIDgzLCAgOTcsIDEwOSwgMTEyLCANCi0gICAgMTA4LCAxMDEsIDExNCwgICAwLCAg
ODQsIDEwMSwgDQotICAgIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCAgIDAsIA0KLSAgICAgNzcs
IDEwNSwgIDk5LCAxMTQsIDExMSwgMTE1LCANCi0gICAgMTExLCAxMDIsIDExNiwgIDMyLCAgNDAs
ICA4MiwgDQotICAgICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsIA0KLSAgICAgMzIsICA4
MywgMTA0LCAgOTcsIDEwMCwgMTAxLCANCi0gICAgMTE0LCAgMzIsICA2NywgMTExLCAxMDksIDEx
MiwgDQotICAgIDEwNSwgMTA4LCAxMDEsIDExNCwgIDMyLCAgNTcsIA0KLSAgICAgNDYsICA1MSwg
IDQ4LCAgNDYsICA1NywgIDUwLCANCi0gICAgIDQ4LCAgNDgsICA0NiwgIDQ5LCAgNTQsICA1MSwg
DQotICAgICA1NiwgIDUyLCAgIDAsIDE3MSwgIDczLCAgODMsIA0KLSAgICAgNzEsICA3OCwgIDgw
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAyLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgNTYsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgIDE1LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDY4LCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAg
MywgICAzLCANCi0gICAgICAwLCAgIDAsICA4MywgIDg2LCAgOTUsICA4MCwgDQotICAgICA3OSwg
IDgzLCAgNzMsICA4NCwgIDczLCAgNzksIA0KLSAgICAgNzgsICAgMCwgIDg0LCAgNjksICA4OCwg
IDY3LCANCi0gICAgIDc5LCAgNzksICA4MiwgIDY4LCAgIDAsIDE3MSwgDQotICAgIDE3MSwgMTcx
LCAgNzksICA4MywgIDcxLCAgNzgsIA0KLSAgICAgNDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAw
LCANCi0gICAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgDQotICAgICAzMiwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgMTUs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCANCi0g
ICAgIDcxLCAgNjksICA4NCwgICAwLCAxNzEsIDE3MSwgDQotICAgICA4MywgIDcyLCAgNjgsICA4
MiwgMTQ4LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDY0LCAgIDAsICAgMCwgICAwLCANCi0gICAg
IDM3LCAgIDAsICAgMCwgICAwLCAgOTAsICAgMCwgDQotICAgICAgMCwgICAzLCAgIDAsICA5Niwg
IDE2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICA4OCwgIDI0LCANCi0gICAgICAw
LCAgIDQsICAgMCwgMTEyLCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDg1
LCAgODUsIA0KLSAgICAgIDAsICAgMCwgIDk4LCAgMTYsICAgMCwgICAzLCANCi0gICAgIDUwLCAg
MTYsICAxNiwgICAwLCAgIDEsICAgMCwgDQotICAgICAgMCwgICAwLCAxMDEsICAgMCwgICAwLCAg
IDMsIA0KLSAgICAyNDIsICAzMiwgIDE2LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAs
IDEwNCwgICAwLCAgIDAsICAgMiwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDY5LCAgIDAs
IA0KLSAgICAgIDAsICAgOSwgMjQyLCAgIDAsICAxNiwgICAwLCANCi0gICAgICAwLCAgIDAsICAg
MCwgICAwLCAgNzAsICAxNiwgDQotICAgICAxNiwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0K
LSAgICAgNzAsIDEyNiwgIDE2LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwg
IDk2LCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDU0LCAgIDAsIA0KLSAg
ICAgIDAsICAgNSwgMTE0LCAgMzIsICAxNiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDYsICAgMCwgDQotICAgICAxNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
NTQsICAgMCwgICAwLCAgIDUsIDEzMCwgIDMyLCANCi0gICAgIDE2LCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQotICAgICAgMSwgIDY0LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAxMjgs
ICA2MywgIDYyLCAgIDAsICAgMCwgICAxLCANCi0gICAgIDgzLCAgODQsICA2NSwgIDg0LCAxMTYs
ICAgMCwgDQotICAgICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDEsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAg
MCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDMsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDANCi19Ow0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaGx1bWFscGhhMTFwcy5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL3Bh
c3N0aHJvdWdobHVtYWxwaGExMXBzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1
NWQ2MGViM2IyMjZkZDBlN2RhZTQ4YmVkNTU0NDdhOThmYjEzNDEuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdobHVtYWxwaGEx
MXBzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotI2lmIDANCi0vLw0KLS8vIEdl
bmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4x
NjM4NA0KLS8vDQotLy8NCi0vLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5h
bWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBE
aW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0t
LS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAg
ICAgICAgMQ0KLS8vIFRleHR1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBm
bG9hdDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0
IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBS
ZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
IC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BP
U0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgIGZsb2F0ICAg
ICAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAg
Tk9ORSAgIGZsb2F0ICAgeHkgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8v
DQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVl
ICBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0t
LS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAg
ICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180
XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUy
ZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2MS54
eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotc2FtcGxlIHIwLnh5encsIHYx
Lnh5eHgsIHQwLnh5encsIHMwDQotbW92IG8wLnh5encsIHIwLnh4eHcNCi1yZXQgDQotLy8gQXBw
cm94aW1hdGVseSAzIGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBC
WVRFIGdfUFNfUGFzc3Rocm91Z2hMdW1BbHBoYVtdID0NCi17DQotICAgICA2OCwgIDg4LCAgNjYs
ICA2NywgMTg1LCAgMTQsIA0KLSAgICAgODQsIDIyMywgMTkyLCAgNDIsICAxNiwgMTMzLCANCi0g
ICAgIDQ2LCAxMDAsICA5NSwgMjIxLCAxODMsICA5NywgDQotICAgIDE5MiwgIDIzLCAgIDEsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAxMDgsICAgMiwgICAwLCAgIDAsICAgNSwgICAwLCANCi0gICAg
ICAwLCAgIDAsICA1MiwgICAwLCAgIDAsICAgMCwgDQotICAgIDIyMCwgICAwLCAgIDAsICAgMCwg
IDUyLCAgIDEsIA0KLSAgICAgIDAsICAgMCwgMTA0LCAgIDEsICAgMCwgICAwLCANCi0gICAgMjQw
LCAgIDEsICAgMCwgICAwLCAgODIsICA2OCwgDQotICAgICA2OSwgIDcwLCAxNjAsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAg
IDAsICAgMiwgICAwLCAgIDAsICAgMCwgDQotICAgICAyOCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDQsIA0KLSAgICAyNTUsIDI1NSwgICAwLCAgIDEsICAgMCwgICAwLCANCi0gICAgMTA4LCAgIDAs
ICAgMCwgICAwLCAgOTIsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAgMTAwLCAgIDAsICAgMCwg
ICAwLCAgIDIsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsIA0KLSAg
ICAgIDQsICAgMCwgICAwLCAgIDAsIDI1NSwgMjU1LCANCi0gICAgMjU1LCAyNTUsICAgMCwgICAw
LCAgIDAsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDEzLCAgIDAsIA0KLSAgICAg
IDAsICAgMCwgIDgzLCAgOTcsIDEwOSwgMTEyLCANCi0gICAgMTA4LCAxMDEsIDExNCwgICAwLCAg
ODQsIDEwMSwgDQotICAgIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCAgIDAsIA0KLSAgICAgNzcs
IDEwNSwgIDk5LCAxMTQsIDExMSwgMTE1LCANCi0gICAgMTExLCAxMDIsIDExNiwgIDMyLCAgNDAs
ICA4MiwgDQotICAgICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsIA0KLSAgICAgMzIsICA4
MywgMTA0LCAgOTcsIDEwMCwgMTAxLCANCi0gICAgMTE0LCAgMzIsICA2NywgMTExLCAxMDksIDEx
MiwgDQotICAgIDEwNSwgMTA4LCAxMDEsIDExNCwgIDMyLCAgNTcsIA0KLSAgICAgNDYsICA1MSwg
IDQ4LCAgNDYsICA1NywgIDUwLCANCi0gICAgIDQ4LCAgNDgsICA0NiwgIDQ5LCAgNTQsICA1MSwg
DQotICAgICA1NiwgIDUyLCAgIDAsIDE3MSwgIDczLCAgODMsIA0KLSAgICAgNzEsICA3OCwgIDgw
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAyLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgNTYsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgIDE1LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDY4LCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAg
MywgICAzLCANCi0gICAgICAwLCAgIDAsICA4MywgIDg2LCAgOTUsICA4MCwgDQotICAgICA3OSwg
IDgzLCAgNzMsICA4NCwgIDczLCAgNzksIA0KLSAgICAgNzgsICAgMCwgIDg0LCAgNjksICA4OCwg
IDY3LCANCi0gICAgIDc5LCAgNzksICA4MiwgIDY4LCAgIDAsIDE3MSwgDQotICAgIDE3MSwgMTcx
LCAgNzksICA4MywgIDcxLCAgNzgsIA0KLSAgICAgNDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAw
LCANCi0gICAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgDQotICAgICAzMiwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgMTUs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCANCi0g
ICAgIDcxLCAgNjksICA4NCwgICAwLCAxNzEsIDE3MSwgDQotICAgICA4MywgIDcyLCAgNjgsICA4
MiwgMTI4LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDY0LCAgIDAsICAgMCwgICAwLCANCi0gICAg
IDMyLCAgIDAsICAgMCwgICAwLCAgOTAsICAgMCwgDQotICAgICAgMCwgICAzLCAgIDAsICA5Niwg
IDE2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICA4OCwgIDI0LCANCi0gICAgICAw
LCAgIDQsICAgMCwgMTEyLCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDg1
LCAgODUsIA0KLSAgICAgIDAsICAgMCwgIDk4LCAgMTYsICAgMCwgICAzLCANCi0gICAgIDUwLCAg
MTYsICAxNiwgICAwLCAgIDEsICAgMCwgDQotICAgICAgMCwgICAwLCAxMDEsICAgMCwgICAwLCAg
IDMsIA0KLSAgICAyNDIsICAzMiwgIDE2LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAs
IDEwNCwgICAwLCAgIDAsICAgMiwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDY5LCAgIDAs
IA0KLSAgICAgIDAsICAgOSwgMjQyLCAgIDAsICAxNiwgICAwLCANCi0gICAgICAwLCAgIDAsICAg
MCwgICAwLCAgNzAsICAxNiwgDQotICAgICAxNiwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0K
LSAgICAgNzAsIDEyNiwgIDE2LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwg
IDk2LCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDU0LCAgIDAsIA0KLSAg
ICAgIDAsICAgNSwgMjQyLCAgMzIsICAxNiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDYsICAxMiwgDQotICAgICAxNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
NjIsICAgMCwgICAwLCAgIDEsICA4MywgIDg0LCANCi0gICAgIDY1LCAgODQsIDExNiwgICAwLCAg
IDAsICAgMCwgDQotICAgICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAyLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMA0KLX07DQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFk
ZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHBzLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwYTJjN2Q0ODJiMzNiZTg2Njc0OTU0NzU1YTM5
OTU4NWM4YWJlYTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJz
L2NvbXBpbGVkL3Bhc3N0aHJvdWdocHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAK
LSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBD
b21waWxlciA5LjMwLjkyMDAuMTYzODQNCi0vLw0KLS8vLw0KLS8vIFBhcmFtZXRlcnM6DQotLy8N
Ci0vLyAgIHNhbXBsZXIyRCB0ZXg7DQotLy8NCi0vLw0KLS8vIFJlZ2lzdGVyczoNCi0vLw0KLS8v
ICAgTmFtZSAgICAgICAgIFJlZyAgIFNpemUNCi0vLyAgIC0tLS0tLS0tLS0tLSAtLS0tLSAtLS0t
DQotLy8gICB0ZXggICAgICAgICAgczAgICAgICAgMQ0KLS8vDQotDQotICAgIHBzXzJfMA0KLSAg
ICBkY2wgdDAueHkNCi0gICAgZGNsXzJkIHMwDQotICAgIHRleGxkIHIwLCB0MCwgczANCi0gICAg
bW92IG9DMCwgcjANCi0NCi0vLyBhcHByb3hpbWF0ZWx5IDIgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNl
ZCAoMSB0ZXh0dXJlLCAxIGFyaXRobWV0aWMpDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX3Bz
MjBfcGFzc3Rocm91Z2hwc1tdID0NCi17DQotICAgICAgMCwgICAyLCAyNTUsIDI1NSwgMjU0LCAy
NTUsIA0KLSAgICAgMzMsICAgMCwgIDY3LCAgODQsICA2NSwgIDY2LCANCi0gICAgIDI4LCAgIDAs
ICAgMCwgICAwLCAgNzUsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU1LCAyNTUs
IA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAyOCwgICAwLCANCi0gICAgICAwLCAgIDAsICAg
MCwgICAxLCAgIDAsICAgMCwgDQotICAgICA2OCwgICAwLCAgIDAsICAgMCwgIDQ4LCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwg
ICAwLCAgNTIsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAg
ICAxMTYsIDEwMSwgMTIwLCAgIDAsICAgNCwgICAwLCANCi0gICAgIDEyLCAgIDAsICAgMSwgICAw
LCAgIDEsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
IDAsICAgMCwgMTEyLCAxMTUsICA5NSwgIDUwLCANCi0gICAgIDk1LCAgNDgsICAgMCwgIDc3LCAx
MDUsICA5OSwgDQotICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIA0KLSAgICAgMzIs
ICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCANCi0gICAgIDc2LCAgODMsICA3NiwgIDMyLCAgODMs
IDEwNCwgDQotICAgICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCAgNjcsIA0KLSAgICAxMTEsIDEw
OSwgMTEyLCAxMDUsIDEwOCwgMTAxLCANCi0gICAgMTE0LCAgMzIsICA1NywgIDQ2LCAgNTEsICA0
OCwgDQotICAgICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4LCAgNDYsIA0KLSAgICAgNDksICA1NCwg
IDUxLCAgNTYsICA1MiwgICAwLCANCi0gICAgMTcxLCAxNzEsICAzMSwgICAwLCAgIDAsICAgMiwg
DQotICAgICAgMCwgICAwLCAgIDAsIDEyOCwgICAwLCAgIDAsIA0KLSAgICAgIDMsIDE3NiwgIDMx
LCAgIDAsICAgMCwgICAyLCANCi0gICAgICAwLCAgIDAsICAgMCwgMTQ0LCAgIDAsICAgOCwgDQot
ICAgICAxNSwgMTYwLCAgNjYsICAgMCwgICAwLCAgIDMsIA0KLSAgICAgIDAsICAgMCwgIDE1LCAx
MjgsICAgMCwgICAwLCANCi0gICAgMjI4LCAxNzYsICAgMCwgICA4LCAyMjgsIDE2MCwgDQotICAg
ICAgMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDgsIA0KLSAgICAgMTUsIDEyOCwgICAwLCAgIDAs
IDIyOCwgMTI4LCANCi0gICAgMjU1LCAyNTUsICAgMCwgICAwDQotfTsNCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29t
cGlsZWQvcGFzc3Rocm91Z2hyZ2IxMXBzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2IxMXBzLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NmNiY2Y2YjgyY2ZkOTY1ODYwMThkZTE5
OTc5OTczODYxODc3MzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFk
ZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiMTFwcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTUy
ICswLDAgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNM
IFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQNCi0vLw0KLS8vDQotLy8vDQotLy8gUmVz
b3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0t
LS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxl
ciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDJkICAgIDAgICAgICAg
IDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAg
ICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAgIFVz
ZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0t
LS0gLS0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encg
ICAgICAgIDAgICAgICBQT1MgICBmbG9hdCAgICAgICANCi0vLyBURVhDT09SRCAgICAgICAgICAg
ICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgICBmbG9hdCAgIHh5ICANCi0vLw0KLS8v
DQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIElu
ZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0t
LQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdF
VCAgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVm
YXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0
MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xf
dGVtcHMgMQ0KLXNhbXBsZSByMC54eXp3LCB2MS54eXh4LCB0MC54eXp3LCBzMA0KLW1vdiBvMC54
eXosIHIwLnh5engNCi1tb3YgbzAudywgbCgxLjAwMDAwMCkNCi1yZXQgDQotLy8gQXBwcm94aW1h
dGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdf
UFNfUGFzc3Rocm91Z2hSR0JbXSA9DQotew0KLSAgICAgNjgsICA4OCwgIDY2LCAgNjcsIDEyNSwg
MTg2LCANCi0gICAgMjUwLCAyNDIsIDExMywgMjU1LCAgNTksIDIzOSwgDQotICAgIDExOSwgMTU4
LCAyMzcsICA3OCwgMjIwLCAgNDMsIA0KLSAgICAxNjAsICA0NiwgICAxLCAgIDAsICAgMCwgICAw
LCANCi0gICAgMTI4LCAgIDIsICAgMCwgICAwLCAgIDUsICAgMCwgDQotICAgICAgMCwgICAwLCAg
NTIsICAgMCwgICAwLCAgIDAsIA0KLSAgICAyMjAsICAgMCwgICAwLCAgIDAsICA1MiwgICAxLCAN
Ci0gICAgICAwLCAgIDAsIDEwNCwgICAxLCAgIDAsICAgMCwgDQotICAgICAgNCwgICAyLCAgIDAs
ICAgMCwgIDgyLCAgNjgsIA0KLSAgICAgNjksICA3MCwgMTYwLCAgIDAsICAgMCwgICAwLCANCi0g
ICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDIsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAgMjgsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCANCi0gICAg
MjU1LCAyNTUsICAgMCwgICAxLCAgIDAsICAgMCwgDQotICAgIDEwOCwgICAwLCAgIDAsICAgMCwg
IDkyLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAg
IDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQotICAgIDEwMCwgICAwLCAgIDAsICAgMCwgICAyLCAg
IDAsIA0KLSAgICAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCANCi0gICAgICA0LCAgIDAs
ICAgMCwgICAwLCAyNTUsIDI1NSwgDQotICAgIDI1NSwgMjU1LCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAxMywgICAwLCANCi0gICAgICAwLCAgIDAsICA4
MywgIDk3LCAxMDksIDExMiwgDQotICAgIDEwOCwgMTAxLCAxMTQsICAgMCwgIDg0LCAxMDEsIA0K
LSAgICAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgICAwLCANCi0gICAgIDc3LCAxMDUsICA5OSwg
MTE0LCAxMTEsIDExNSwgDQotICAgIDExMSwgMTAyLCAxMTYsICAzMiwgIDQwLCAgODIsIA0KLSAg
ICAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCANCi0gICAgIDMyLCAgODMsIDEwNCwgIDk3
LCAxMDAsIDEwMSwgDQotICAgIDExNCwgIDMyLCAgNjcsIDExMSwgMTA5LCAxMTIsIA0KLSAgICAx
MDUsIDEwOCwgMTAxLCAxMTQsICAzMiwgIDU3LCANCi0gICAgIDQ2LCAgNTEsICA0OCwgIDQ2LCAg
NTcsICA1MCwgDQotICAgICA0OCwgIDQ4LCAgNDYsICA0OSwgIDU0LCAgNTEsIA0KLSAgICAgNTYs
ICA1MiwgICAwLCAxNzEsICA3MywgIDgzLCANCi0gICAgIDcxLCAgNzgsICA4MCwgICAwLCAgIDAs
ICAgMCwgDQotICAgICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgIDU2LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAg
MCwgDQotICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAxNSwgICAwLCANCi0gICAgICAwLCAgIDAsICA2OCwgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAz
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgDQot
ICAgICAgMCwgICAwLCAgODMsICA4NiwgIDk1LCAgODAsIA0KLSAgICAgNzksICA4MywgIDczLCAg
ODQsICA3MywgIDc5LCANCi0gICAgIDc4LCAgIDAsICA4NCwgIDY5LCAgODgsICA2NywgDQotICAg
ICA3OSwgIDc5LCAgODIsICA2OCwgICAwLCAxNzEsIA0KLSAgICAxNzEsIDE3MSwgIDc5LCAgODMs
ICA3MSwgIDc4LCANCi0gICAgIDQ0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgMzIsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMywg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDE1LCAgIDAsICAgMCwg
ICAwLCANCi0gICAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgDQotICAgICA3MSwgIDY5
LCAgODQsICAgMCwgMTcxLCAxNzEsIA0KLSAgICAgODMsICA3MiwgIDY4LCAgODIsIDE0OCwgICAw
LCANCi0gICAgICAwLCAgIDAsICA2NCwgICAwLCAgIDAsICAgMCwgDQotICAgICAzNywgICAwLCAg
IDAsICAgMCwgIDkwLCAgIDAsIA0KLSAgICAgIDAsICAgMywgICAwLCAgOTYsICAxNiwgICAwLCAN
Ci0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgODgsICAyNCwgDQotICAgICAgMCwgICA0LCAgIDAs
IDExMiwgIDE2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICA4NSwgIDg1LCANCi0g
ICAgICAwLCAgIDAsICA5OCwgIDE2LCAgIDAsICAgMywgDQotICAgICA1MCwgIDE2LCAgMTYsICAg
MCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgMTAxLCAgIDAsICAgMCwgICAzLCANCi0gICAg
MjQyLCAgMzIsICAxNiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAxMDQsICAgMCwg
ICAwLCAgIDIsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICA2OSwgICAwLCANCi0gICAgICAw
LCAgIDksIDI0MiwgICAwLCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDcw
LCAgMTYsIA0KLSAgICAgMTYsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAgIDcwLCAx
MjYsICAxNiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICA5NiwgIDE2LCAg
IDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICA1NCwgICAwLCANCi0gICAgICAwLCAgIDUs
IDExNCwgIDMyLCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDcwLCAgIDIs
IA0KLSAgICAgMTYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgIDU0LCAgIDAsICAg
MCwgICA1LCAxMzAsICAzMiwgDQotICAgICAxNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
LSAgICAgIDEsICA2NCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgMTI4LCAgNjMsICA2Miwg
ICAwLCAgIDAsICAgMSwgDQotICAgICA4MywgIDg0LCAgNjUsICA4NCwgMTE2LCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwDQotfTsNCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMv
Y29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhMTFwcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTEx
cHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdkMmEyNWFiYTA5NmMzZmFhMzdk
ZjIxZWI1M2M5ODQzOGQwNGJhMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhMTFwcy5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTQxICswLDAgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChS
KSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQNCi0vLw0KLS8vDQotLy8vDQot
Ly8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0t
LS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDJkICAgIDAg
ICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBO
YW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1h
dCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0g
LS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAg
IHh5encgICAgICAgIDAgICAgICBQT1MgICBmbG9hdCAgICAgICANCi0vLyBURVhDT09SRCAgICAg
ICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgICBmbG9hdCAgIHh5ICANCi0v
Lw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAg
ICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0t
IC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAg
IFRBUkdFVCAgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1v
ZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZs
b2F0KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkNCi1kY2xfb3V0cHV0IG8wLnh5encN
Ci1zYW1wbGUgbzAueHl6dywgdjEueHl4eCwgdDAueHl6dywgczANCi1yZXQgDQotLy8gQXBwcm94
aW1hdGVseSAyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRF
IGdfUFNfUGFzc3Rocm91Z2hSR0JBW10gPQ0KLXsNCi0gICAgIDY4LCAgODgsICA2NiwgIDY3LCAx
NTEsIDE1MiwgDQotICAgICAgOCwgMTAyLCAxNzQsIDEzNSwgIDc2LCAgNTcsIA0KLSAgICAxMDAs
IDE0NiwgIDU5LCAgNzQsIDIwNSwgIDM1LCANCi0gICAgMjA2LCAgMjEsICAgMSwgICAwLCAgIDAs
ICAgMCwgDQotICAgICA4MCwgICAyLCAgIDAsICAgMCwgICA1LCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgIDUyLCAgIDAsICAgMCwgICAwLCANCi0gICAgMjIwLCAgIDAsICAgMCwgICAwLCAgNTIsICAg
MSwgDQotICAgICAgMCwgICAwLCAxMDQsICAgMSwgICAwLCAgIDAsIA0KLSAgICAyMTIsICAgMSwg
ICAwLCAgIDAsICA4MiwgIDY4LCANCi0gICAgIDY5LCAgNzAsIDE2MCwgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAy
LCAgIDAsICAgMCwgICAwLCANCi0gICAgIDI4LCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgDQot
ICAgIDI1NSwgMjU1LCAgIDAsICAgMSwgICAwLCAgIDAsIA0KLSAgICAxMDgsICAgMCwgICAwLCAg
IDAsICA5MiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAxMDAsICAgMCwgICAwLCAgIDAsICAg
MiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgDQotICAgICAgNCwg
ICAwLCAgIDAsICAgMCwgMjU1LCAyNTUsIA0KLSAgICAyNTUsIDI1NSwgICAwLCAgIDAsICAgMCwg
ICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgMTMsICAgMCwgDQotICAgICAgMCwgICAw
LCAgODMsICA5NywgMTA5LCAxMTIsIA0KLSAgICAxMDgsIDEwMSwgMTE0LCAgIDAsICA4NCwgMTAx
LCANCi0gICAgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsICAgMCwgDQotICAgICA3NywgMTA1LCAg
OTksIDExNCwgMTExLCAxMTUsIA0KLSAgICAxMTEsIDEwMiwgMTE2LCAgMzIsICA0MCwgIDgyLCAN
Ci0gICAgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgDQotICAgICAzMiwgIDgzLCAxMDQs
ICA5NywgMTAwLCAxMDEsIA0KLSAgICAxMTQsICAzMiwgIDY3LCAxMTEsIDEwOSwgMTEyLCANCi0g
ICAgMTA1LCAxMDgsIDEwMSwgMTE0LCAgMzIsICA1NywgDQotICAgICA0NiwgIDUxLCAgNDgsICA0
NiwgIDU3LCAgNTAsIA0KLSAgICAgNDgsICA0OCwgIDQ2LCAgNDksICA1NCwgIDUxLCANCi0gICAg
IDU2LCAgNTIsICAgMCwgMTcxLCAgNzMsICA4MywgDQotICAgICA3MSwgIDc4LCAgODAsICAgMCwg
ICAwLCAgIDAsIA0KLSAgICAgIDIsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCANCi0gICAgICAw
LCAgIDAsICA1NiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAx
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAg
IDAsICAgMCwgICAwLCAgMTUsICAgMCwgDQotICAgICAgMCwgICAwLCAgNjgsICAgMCwgICAwLCAg
IDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAs
ICAgMywgICAwLCAgIDAsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMs
IA0KLSAgICAgIDAsICAgMCwgIDgzLCAgODYsICA5NSwgIDgwLCANCi0gICAgIDc5LCAgODMsICA3
MywgIDg0LCAgNzMsICA3OSwgDQotICAgICA3OCwgICAwLCAgODQsICA2OSwgIDg4LCAgNjcsIA0K
LSAgICAgNzksICA3OSwgIDgyLCAgNjgsICAgMCwgMTcxLCANCi0gICAgMTcxLCAxNzEsICA3OSwg
IDgzLCAgNzEsICA3OCwgDQotICAgICA0NCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCANCi0gICAgIDMyLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
IDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAxNSwgICAwLCAg
IDAsICAgMCwgDQotICAgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsIA0KLSAgICAgNzEs
ICA2OSwgIDg0LCAgIDAsIDE3MSwgMTcxLCANCi0gICAgIDgzLCAgNzIsICA2OCwgIDgyLCAxMDAs
ICAgMCwgDQotICAgICAgMCwgICAwLCAgNjQsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgMjUsICAg
MCwgICAwLCAgIDAsICA5MCwgICAwLCANCi0gICAgICAwLCAgIDMsICAgMCwgIDk2LCAgMTYsICAg
MCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDg4LCAgMjQsIA0KLSAgICAgIDAsICAgNCwg
ICAwLCAxMTIsICAxNiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgODUsICA4NSwg
DQotICAgICAgMCwgICAwLCAgOTgsICAxNiwgICAwLCAgIDMsIA0KLSAgICAgNTAsICAxNiwgIDE2
LCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsIDEwMSwgICAwLCAgIDAsICAgMywgDQot
ICAgIDI0MiwgIDMyLCAgMTYsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDY5LCAg
IDAsICAgMCwgICA5LCANCi0gICAgMjQyLCAgMzIsICAxNiwgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgNzAsICAxNiwgIDE2LCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAs
ICA3MCwgMTI2LCANCi0gICAgIDE2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MCwgIDk2LCAgMTYsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDYyLCAgIDAsICAg
MCwgICAxLCANCi0gICAgIDgzLCAgODQsICA2NSwgIDg0LCAxMTYsICAgMCwgDQotICAgICAgMCwg
ICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCANCi0gICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAs
ICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0g
ICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDANCi19Ow0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxl
ZC9zdGFuZGFyZHZzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvc3RhbmRhcmR2cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAyNmI4OTU5NWNiYjU1Y2MzMmMzYjgzNzNkNzgxMWMwOWYwYWY0OTYwLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9zdGFuZGFy
ZHZzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0jaWYgMA0KLS8vDQotLy8gR2Vu
ZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2
Mzg0DQotLy8NCi0vLy8NCi0vLyBQYXJhbWV0ZXJzOg0KLS8vDQotLy8gICBmbG9hdDQgaGFsZlBp
eGVsU2l6ZTsNCi0vLw0KLS8vDQotLy8gUmVnaXN0ZXJzOg0KLS8vDQotLy8gICBOYW1lICAgICAg
ICAgIFJlZyAgIFNpemUNCi0vLyAgIC0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQ0KLS8vICAgaGFs
ZlBpeGVsU2l6ZSBjMCAgICAgICAxDQotLy8NCi0NCi0gICAgdnNfMl8wDQotICAgIGRlZiBjMSwg
MC41LCAtMC41LCAxLCAwDQotICAgIGRjbF9wb3NpdGlvbiB2MA0KLSAgICBhZGQgb1BvcywgdjAs
IGMwDQotICAgIG1hZCBvVDAsIHYwLCBjMS54eXp6LCBjMS54eHd3DQotDQotLy8gYXBwcm94aW1h
dGVseSAyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdf
dnMyMF9zdGFuZGFyZHZzW10gPQ0KLXsNCi0gICAgICAwLCAgIDIsIDI1NCwgMjU1LCAyNTQsIDI1
NSwgDQotICAgICAzNiwgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIA0KLSAgICAgMjgsICAgMCwg
ICAwLCAgIDAsICA4NywgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTQsIDI1NSwg
DQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAw
LCAgIDEsICAgMCwgICAwLCANCi0gICAgIDgwLCAgIDAsICAgMCwgICAwLCAgNDgsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAg
IDAsICA2NCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAg
IDEwNCwgIDk3LCAxMDgsIDEwMiwgIDgwLCAxMDUsIA0KLSAgICAxMjAsIDEwMSwgMTA4LCAgODMs
IDEwNSwgMTIyLCANCi0gICAgMTAxLCAgIDAsIDE3MSwgMTcxLCAgIDEsICAgMCwgDQotICAgICAg
MywgICAwLCAgIDEsICAgMCwgICA0LCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCi0gICAgICAwLCAgIDAsIDExOCwgMTE1LCAgOTUsICA1MCwgDQotICAgICA5NSwg
IDQ4LCAgIDAsICA3NywgMTA1LCAgOTksIA0KLSAgICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwg
MTE2LCANCi0gICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgDQotICAgICA3NiwgIDgz
LCAgNzYsICAzMiwgIDgzLCAxMDQsIA0KLSAgICAgOTcsIDEwMCwgMTAxLCAxMTQsICAzMiwgIDY3
LCANCi0gICAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgDQotICAgIDExNCwgIDMyLCAg
NTcsICA0NiwgIDUxLCAgNDgsIA0KLSAgICAgNDYsICA1NywgIDUwLCAgNDgsICA0OCwgIDQ2LCAN
Ci0gICAgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAgMCwgDQotICAgIDE3MSwgMTcxLCAgODEs
ICAgMCwgICAwLCAgIDUsIA0KLSAgICAgIDEsICAgMCwgIDE1LCAxNjAsICAgMCwgICAwLCANCi0g
ICAgICAwLCAgNjMsICAgMCwgICAwLCAgIDAsIDE5MSwgDQotICAgICAgMCwgICAwLCAxMjgsICA2
MywgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDMxLCAgIDAsICAgMCwgICAyLCANCi0gICAg
ICAwLCAgIDAsICAgMCwgMTI4LCAgIDAsICAgMCwgDQotICAgICAxNSwgMTQ0LCAgIDIsICAgMCwg
ICAwLCAgIDMsIA0KLSAgICAgIDAsICAgMCwgIDE1LCAxOTIsICAgMCwgICAwLCANCi0gICAgMjI4
LCAxNDQsICAgMCwgICAwLCAyMjgsIDE2MCwgDQotICAgICAgNCwgICAwLCAgIDAsICAgNCwgICAw
LCAgIDAsIA0KLSAgICAgMTUsIDIyNCwgICAwLCAgIDAsIDIyOCwgMTQ0LCANCi0gICAgICAxLCAg
IDAsIDE2NCwgMTYwLCAgIDEsICAgMCwgDQotICAgIDI0MCwgMTYwLCAyNTUsIDI1NSwgICAwLCAg
IDANCi19Ow0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvc2hhZGVycy9nZW5lcmF0ZV9zaGFkZXJzLmJhdCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9nZW5lcmF0ZV9zaGFkZXJz
LmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFlMjk4ZTgzZjQzMDMwMmY2NWFh
MzM2MjQxNWE3MDNiMGVmYjkzMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVycy5iYXQKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCww
IEBACi1ARUNITyBPRkYNCi1SRU0NCi1SRU0gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotUkVNIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUN
Ci1SRU0gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi1SRU0NCi0NCi1QQVRIICVQQVRIJTsl
UHJvZ3JhbUZpbGVzKHg4NiklXFdpbmRvd3MgS2l0c1w4LjBcYmluXHg4NjslRFhTREtfRElSJVxV
dGlsaXRpZXNcYmluXHg4Ng0KLQ0KLWZ4YyAvRSBzdGFuZGFyZHZzIC9UIHZzXzJfMCAvRmggY29t
cGlsZWQvc3RhbmRhcmR2cy5oIEJsaXQudnMNCi1meGMgL0UgZmxpcHl2cyAvVCB2c18yXzAgL0Zo
IGNvbXBpbGVkL2ZsaXB5dnMuaCBCbGl0LnZzDQotZnhjIC9FIHBhc3N0aHJvdWdocHMgL1QgcHNf
Ml8wIC9GaCBjb21waWxlZC9wYXNzdGhyb3VnaHBzLmggQmxpdC5wcw0KLWZ4YyAvRSBsdW1pbmFu
Y2VwcyAvVCBwc18yXzAgL0ZoIGNvbXBpbGVkL2x1bWluYW5jZXBzLmggQmxpdC5wcw0KLWZ4YyAv
RSBjb21wb25lbnRtYXNrcHMgL1QgcHNfMl8wIC9GaCBjb21waWxlZC9jb21wb25lbnRtYXNrcHMu
aCBCbGl0LnBzDQotDQotZnhjIC9FIFZTX1Bhc3N0aHJvdWdoIC9UIHZzXzRfMCAvRmggY29tcGls
ZWQvcGFzc3Rocm91Z2gxMXZzLmggUGFzc3Rocm91Z2gxMS5obHNsDQotZnhjIC9FIFBTX1Bhc3N0
aHJvdWdoUkdCQSAvVCBwc180XzAgL0ZoIGNvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTExcHMuaCBQ
YXNzdGhyb3VnaDExLmhsc2wNCi1meGMgL0UgUFNfUGFzc3Rocm91Z2hSR0IgL1QgcHNfNF8wIC9G
aCBjb21waWxlZC9wYXNzdGhyb3VnaHJnYjExcHMuaCBQYXNzdGhyb3VnaDExLmhsc2wNCi1meGMg
L0UgUFNfUGFzc3Rocm91Z2hMdW0gL1QgcHNfNF8wIC9GaCBjb21waWxlZC9wYXNzdGhyb3VnaGx1
bTExcHMuaCBQYXNzdGhyb3VnaDExLmhsc2wNCi1meGMgL0UgUFNfUGFzc3Rocm91Z2hMdW1BbHBo
YSAvVCBwc180XzAgL0ZoIGNvbXBpbGVkL3Bhc3N0aHJvdWdobHVtYWxwaGExMXBzLmggUGFzc3Ro
cm91Z2gxMS5obHNsDQotDQotZnhjIC9FIFZTX0NsZWFyIC9UIHZzXzRfMCAvRmggY29tcGlsZWQv
Y2xlYXIxMXZzLmggQ2xlYXIxMS5obHNsDQotZnhjIC9FIFBTX0NsZWFyU2luZ2xlIC9UIHBzXzRf
MCAvRmggY29tcGlsZWQvY2xlYXJzaW5nbGUxMXBzLmggQ2xlYXIxMS5obHNsDQotZnhjIC9FIFBT
X0NsZWFyTXVsdGlwbGUgL1QgcHNfNF8wIC9GaCBjb21waWxlZC9jbGVhcm11bHRpcGxlMTFwcy5o
IENsZWFyMTEuaGxzbA0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvdmVydGV4Y29udmVyc2lvbi5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci92ZXJ0ZXhjb252ZXJzaW9uLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5MGI5ZDQ4YTM4NmZmYzE3MjU3MWRhNDRkOWJlMjBkMTAy
OTAxOWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci92ZXJ0ZXhjb252ZXJz
aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMDMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LQotLy8gdmVydGV4Y29udmVyc2lvbi5oOiBBIGxpYnJhcnkgb2YgdmVydGV4IGNvbnZlcnNpb24g
Y2xhc3NlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGJ1aWxkCi0vLyB0aGUgRm9ybWF0Q29udmVydGVy
IG9iamVjdHMgdXNlZCBieSB0aGUgYnVmZmVyIGNvbnZlcnNpb24gc3lzdGVtLgotCi0jaWZuZGVm
IExJQkdMRVNWMl9WRVJURVhDT05WRVJTSU9OX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9WRVJURVhD
T05WRVJTSU9OX0hfCi0KLW5hbWVzcGFjZSByeAotewotCi0vLyBDb252ZXJzaW9uIHR5cGVzOgot
Ly8gc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHk6IHRydWUgaWYgdGhpcyBpcyBhbiBpZGVudGl0
eSB0cmFuc2Zvcm0sIGZhbHNlIG90aGVyd2lzZQotLy8gc3RhdGljIFUgY29udmVydChUKTogY29u
dmVydCBhIHNpbmdsZSBlbGVtZW50IGZyb20gdGhlIGlucHV0IHR5cGUgdG8gdGhlIG91dHB1dCB0
eXBlCi0vLyB0eXBlZGVmIC4uLiBPdXRwdXRUeXBlOiB0aGUgdHlwZSBwcm9kdWNlZCBieSB0aGlz
IGNvbnZlcnNpb24KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgSWRlbnRpdHkKLXsKLSAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9IHRydWU7Ci0KLSAgICB0eXBlZGVmIFQgT3V0
cHV0VHlwZTsKLQotICAgIHN0YXRpYyBUIGNvbnZlcnQoVCB4KQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHg7Ci0gICAgfQotfTsKLQotdGVtcGxhdGUgPGNsYXNzIEZyb21ULCBjbGFzcyBUb1Q+Ci1z
dHJ1Y3QgQ2FzdAotewotICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0gZmFsc2U7Ci0K
LSAgICB0eXBlZGVmIFRvVCBPdXRwdXRUeXBlOwotCi0gICAgc3RhdGljIFRvVCBjb252ZXJ0KEZy
b21UIHgpCi0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VG9UPih4KTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBDYXN0PFQsIFQ+Ci17Ci0gICAgc3Rh
dGljIGNvbnN0IGJvb2wgaWRlbnRpdHkgPSB0cnVlOwotCi0gICAgdHlwZWRlZiBUIE91dHB1dFR5
cGU7Ci0KLSAgICBzdGF0aWMgVCBjb252ZXJ0KFQgeCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUPih4KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVj
dCBOb3JtYWxpemUKLXsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9IGZhbHNlOwot
Ci0gICAgdHlwZWRlZiBmbG9hdCBPdXRwdXRUeXBlOwotCi0gICAgc3RhdGljIGZsb2F0IGNvbnZl
cnQoVCB4KQotICAgIHsKLSAgICAgICAgdHlwZWRlZiBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+IE5M
OwotICAgICAgICBmbG9hdCBmID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHgpOwotCi0gICAgICAgIGlm
IChOTDo6aXNfc2lnbmVkKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBjb25zdCBmbG9hdCA9
PiBWQzIwMDggY29tcHV0ZXMgaXQgYXQgY29tcGlsZSB0aW1lCi0gICAgICAgICAgICAvLyBzdGF0
aWMgY29uc3QgZmxvYXQgPT4gVkMyMDA4IGNvbXB1dGVzIGl0IHRoZSBmaXJzdCB0aW1lIHdlIGdl
dCBoZXJlLCBzdG9yZXMgaXQgdG8gbWVtb3J5IHdpdGggc3RhdGljIGd1YXJkIGFuZCBhbGwgdGhh
dC4KLSAgICAgICAgICAgIGNvbnN0IGZsb2F0IGRpdmlzb3IgPSAxLjBmLygyKnN0YXRpY19jYXN0
PGZsb2F0PihOTDo6bWF4KCkpKzEpOwotICAgICAgICAgICAgcmV0dXJuICgyKmYrMSkqZGl2aXNv
cjsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBmL05MOjptYXgoKTsKLSAgICAgICAgfQotICAgIH0KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBG
cm9tVHlwZSwgc3RkOjpzaXplX3QgU2NhbGVCaXRzPgotc3RydWN0IEZpeGVkVG9GbG9hdAotewot
ICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0gZmFsc2U7Ci0KLSAgICB0eXBlZGVmIGZs
b2F0IE91dHB1dFR5cGU7Ci0KLSAgICBzdGF0aWMgZmxvYXQgY29udmVydChGcm9tVHlwZSB4KQot
ICAgIHsKLSAgICAgICAgY29uc3QgZmxvYXQgZGl2aXNvciA9IDEuMGYgLyBzdGF0aWNfY2FzdDxm
bG9hdD4oc3RhdGljX2Nhc3Q8RnJvbVR5cGU+KDEpIDw8IFNjYWxlQml0cyk7Ci0gICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oeCkgKiBkaXZpc29yOwotICAgIH0KLX07Ci0KLS8vIFdp
ZGVuIHR5cGVzOgotLy8gc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpbml0aWFsV2lkdGg6IG51
bWJlciBvZiBjb21wb25lbnRzIGJlZm9yZSBjb252ZXJzaW9uCi0vLyBzdGF0aWMgY29uc3QgdW5z
aWduZWQgaW50IGZpbmFsV2lkdGg6IG51bWJlciBvZiBjb21wb25lbnRzIGFmdGVyIGNvbnZlcnNp
b24KLQotLy8gRmxvYXQgaXMgc3VwcG9ydGVkIGF0IGFueSBzaXplLgotdGVtcGxhdGUgPHN0ZDo6
c2l6ZV90IE4+Ci1zdHJ1Y3QgTm9XaWRlbgotewotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVf
dCBpbml0aWFsV2lkdGggPSBOOwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5hbFdp
ZHRoID0gTjsKLX07Ci0KLS8vIFNIT1JULCBub3JtLVNIT1JULCBub3JtLVVOU0lHTkVEX1NIT1JU
IGFyZSBzdXBwb3J0ZWQgYnV0IG9ubHkgd2l0aCAyIG9yIDQgY29tcG9uZW50cwotdGVtcGxhdGUg
PHN0ZDo6c2l6ZV90IE4+Ci1zdHJ1Y3QgV2lkZW5Ub0V2ZW4KLXsKLSAgICBzdGF0aWMgY29uc3Qg
c3RkOjpzaXplX3QgaW5pdGlhbFdpZHRoID0gTjsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzaXpl
X3QgZmluYWxXaWR0aCA9IE4rKE4mMSk7Ci19OwotCi10ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTj4K
LXN0cnVjdCBXaWRlblRvRm91cgotewotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBpbml0
aWFsV2lkdGggPSBOOwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5hbFdpZHRoID0g
NDsKLX07Ci0KLS8vIE1vc3QgdHlwZXMgaGF2ZSAwIGFuZCAxIHRoYXQgYXJlIGp1c3QgdGhhdC4K
LXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IFNpbXBsZURlZmF1bHRWYWx1ZXMKLXsKLSAgICBz
dGF0aWMgVCB6ZXJvKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oMCk7IH0KLSAgICBzdGF0aWMg
VCBvbmUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxUPigxKTsgfQotfTsKLQotLy8gQnV0IG5vcm1h
bGlzZWQgdHlwZXMgb25seSBzdG9yZSBbMCwxXSBvciBbLTEsMV0gc28gMS4wIGlzIHJlcHJlc2Vu
dGVkIGJ5IHRoZSBtYXggdmFsdWUuCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBOb3JtYWxp
emVkRGVmYXVsdFZhbHVlcwotewotICAgIHN0YXRpYyBUIHplcm8oKSB7IHJldHVybiBzdGF0aWNf
Y2FzdDxUPigwKTsgfQotICAgIHN0YXRpYyBUIG9uZSgpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19s
aW1pdHM8VD46Om1heCgpOyB9Ci19OwotCi0vLyBDb252ZXJ0ZXI6Ci0vLyBzdGF0aWMgY29uc3Qg
Ym9vbCBpZGVudGl0eTogdHJ1ZSBpZiB0aGlzIGlzIGFuIGlkZW50aXR5IHRyYW5zZm9ybSAod2l0
aCBubyB3aWRlbmluZykKLS8vIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5hbFNpemU6IG51
bWJlciBvZiBieXRlcyBwZXIgb3V0cHV0IHZlcnRleAotLy8gc3RhdGljIHZvaWQgY29udmVydEFy
cmF5KGNvbnN0IHZvaWQgKmluLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90IG4sIHZv
aWQgKm91dCk6IGNvbnZlcnQgYW4gYXJyYXkgb2YgdmVydGljZXMuIElucHV0IG1heSBiZSBzdHJp
ZGVkLCBidXQgb3V0cHV0IHdpbGwgYmUgdW5zdHJpZGVkLgotCi10ZW1wbGF0ZSA8Y2xhc3MgSW5U
LCBjbGFzcyBXaWRlblJ1bGUsIGNsYXNzIENvbnZlcnRlciwgY2xhc3MgRGVmYXVsdFZhbHVlUnVs
ZSA9IFNpbXBsZURlZmF1bHRWYWx1ZXM8SW5UPiA+Ci1zdHJ1Y3QgVmVydGV4RGF0YUNvbnZlcnRl
cgotewotICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udmVydGVyOjpPdXRwdXRUeXBlIE91dHB1dFR5
cGU7Ci0gICAgdHlwZWRlZiBJblQgSW5wdXRUeXBlOwotCi0gICAgc3RhdGljIGNvbnN0IGJvb2wg
aWRlbnRpdHkgPSAoV2lkZW5SdWxlOjppbml0aWFsV2lkdGggPT0gV2lkZW5SdWxlOjpmaW5hbFdp
ZHRoKSAmJiBDb252ZXJ0ZXI6OmlkZW50aXR5OwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVf
dCBmaW5hbFNpemUgPSBXaWRlblJ1bGU6OmZpbmFsV2lkdGggKiBzaXplb2YoT3V0cHV0VHlwZSk7
Ci0KLSAgICBzdGF0aWMgdm9pZCBjb252ZXJ0QXJyYXkoY29uc3QgSW5wdXRUeXBlICppbiwgc3Rk
OjpzaXplX3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBuLCBPdXRwdXRUeXBlICpvdXQpCi0gICAgewot
ICAgICAgICBmb3IgKHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwgbjsgaSsrKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBjb25zdCBJbnB1dFR5cGUgKmVpbiA9IHBvaW50ZXJBZGRCeXRlcyhpbiwgaSAq
IHN0cmlkZSk7Ci0KLSAgICAgICAgICAgIGNvcHlDb21wb25lbnQob3V0LCBlaW4sIDAsIHN0YXRp
Y19jYXN0PE91dHB1dFR5cGU+KERlZmF1bHRWYWx1ZVJ1bGU6Onplcm8oKSkpOwotICAgICAgICAg
ICAgY29weUNvbXBvbmVudChvdXQsIGVpbiwgMSwgc3RhdGljX2Nhc3Q8T3V0cHV0VHlwZT4oRGVm
YXVsdFZhbHVlUnVsZTo6emVybygpKSk7Ci0gICAgICAgICAgICBjb3B5Q29tcG9uZW50KG91dCwg
ZWluLCAyLCBzdGF0aWNfY2FzdDxPdXRwdXRUeXBlPihEZWZhdWx0VmFsdWVSdWxlOjp6ZXJvKCkp
KTsKLSAgICAgICAgICAgIGNvcHlDb21wb25lbnQob3V0LCBlaW4sIDMsIHN0YXRpY19jYXN0PE91
dHB1dFR5cGU+KERlZmF1bHRWYWx1ZVJ1bGU6Om9uZSgpKSk7Ci0KLSAgICAgICAgICAgIG91dCAr
PSBXaWRlblJ1bGU6OmZpbmFsV2lkdGg7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMg
dm9pZCBjb252ZXJ0QXJyYXkoY29uc3Qgdm9pZCAqaW4sIHN0ZDo6c2l6ZV90IHN0cmlkZSwgc3Rk
OjpzaXplX3Qgbiwgdm9pZCAqb3V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRBcnJh
eShzdGF0aWNfY2FzdDxjb25zdCBJbnB1dFR5cGUqPihpbiksIHN0cmlkZSwgbiwgc3RhdGljX2Nh
c3Q8T3V0cHV0VHlwZSo+KG91dCkpOwotICAgIH0KLQotICBwcml2YXRlOgotICAgIC8vIEFkdmFu
Y2UgdGhlIGdpdmVuIHBvaW50ZXIgYnkgYSBudW1iZXIgb2YgYnl0ZXMgKG5vdCBwb2ludGVkLXRv
IGVsZW1lbnRzKS4KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgICBzdGF0aWMgVCAqcG9pbnRl
ckFkZEJ5dGVzKFQgKmJhc2VQdHIsIHN0ZDo6c2l6ZV90IG51bUJ5dGVzKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCAqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4oYmFzZVB0cikgKyBudW1CeXRlcyk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgY29weUNv
bXBvbmVudChPdXRwdXRUeXBlICpvdXQsIGNvbnN0IElucHV0VHlwZSAqaW4sIHN0ZDo6c2l6ZV90
IGVsZW1lbnRpbmRleCwgT3V0cHV0VHlwZSBkZWZhdWx0dmFsdWUpCi0gICAgewotICAgICAgICBp
ZiAoV2lkZW5SdWxlOjpmaW5hbFdpZHRoID4gZWxlbWVudGluZGV4KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAoV2lkZW5SdWxlOjppbml0aWFsV2lkdGggPiBlbGVtZW50aW5kZXgpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0W2VsZW1lbnRpbmRleF0gPSBDb252ZXJ0ZXI6
OmNvbnZlcnQoaW5bZWxlbWVudGluZGV4XSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0W2VsZW1lbnRpbmRleF0gPSBk
ZWZhdWx0dmFsdWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19OwotCi19Ci0K
LSNlbmRpZiAgIC8vIExJQkdMRVNWMl9WRVJURVhDT05WRVJTSU9OX0hfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvY29tcGlsZXIvQXJyYXlCb3Vu
ZHNDbGFtcGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvY29t
cGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmgKaW5kZXggMGQ0ZTFhMzc0Y2E4MTgyMjIxMjhiYWFk
Yzk4N2I1ZDhkMjAxYTg0My4uZjcyNWY1NWI1NzRiZDZhZDg4YjQwZWVkN2Y5NGI1OGRmMjMyNTZl
YyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L2Nv
bXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy90aGlyZF9wYXJ0eS9jb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIuaApAQCAtMjgsOCAr
MjgsOCBAQAogCiAjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCiAKLSNpbmNsdWRlICJj
b21waWxlci9JbmZvU2luay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgogCiBjbGFzcyBBcnJheUJvdW5kc0NsYW1w
ZXIgewogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3Ro
aXJkX3BhcnR5L211cm11cmhhc2gvTXVybXVySGFzaDMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL3RoaXJkX3BhcnR5L211cm11cmhhc2gvTXVybXVySGFzaDMuY3BwCmluZGV4IGYx
MWZiMjMzMmYxZjE1MDkyM2ZiMGM0ZmI2NTFkZTc5MTNlODc4MjYuLmRkODYyOTI2NDllYzUyZDg0
YWU0NzJhMWJlN2NlYWNhNTUyODBhNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy90aGlyZF9wYXJ0eS9tdXJtdXJoYXNoL011cm11ckhhc2gzLmNwcAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJtdXJIYXNo
My5jcHAKQEAgLTE2LDIwICsxNiwyMCBAQAogCiAjaWYgZGVmaW5lZChfTVNDX1ZFUikKIAotI2Rl
ZmluZSBGT1JDRV9JTkxJTkUgICAgX19mb3JjZWlubGluZQorI2RlZmluZSBGT1JDRV9JTkxJTkUJ
X19mb3JjZWlubGluZQogCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAKLSNkZWZpbmUgUk9UTDMyKHgs
eSkgICAgX3JvdGwoeCx5KQotI2RlZmluZSBST1RMNjQoeCx5KSAgICBfcm90bDY0KHgseSkKKyNk
ZWZpbmUgUk9UTDMyKHgseSkJX3JvdGwoeCx5KQorI2RlZmluZSBST1RMNjQoeCx5KQlfcm90bDY0
KHgseSkKIAogI2RlZmluZSBCSUdfQ09OU1RBTlQoeCkgKHgpCiAKIC8vIE90aGVyIGNvbXBpbGVy
cwogCi0jZWxzZSAgICAvLyBkZWZpbmVkKF9NU0NfVkVSKQorI2Vsc2UJLy8gZGVmaW5lZChfTVND
X1ZFUikKIAotI2RlZmluZSAgICBGT1JDRV9JTkxJTkUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lu
bGluZSkpCisjZGVmaW5lCUZPUkNFX0lOTElORSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5l
KSkKIAogaW5saW5lIHVpbnQzMl90IHJvdGwzMiAoIHVpbnQzMl90IHgsIGludDhfdCByICkKIHsK
QEAgLTQxLDggKzQxLDggQEAgaW5saW5lIHVpbnQ2NF90IHJvdGw2NCAoIHVpbnQ2NF90IHgsIGlu
dDhfdCByICkKICAgcmV0dXJuICh4IDw8IHIpIHwgKHggPj4gKDY0IC0gcikpOwogfQogCi0jZGVm
aW5lICAgIFJPVEwzMih4LHkpICAgIHJvdGwzMih4LHkpCi0jZGVmaW5lIFJPVEw2NCh4LHkpICAg
IHJvdGw2NCh4LHkpCisjZGVmaW5lCVJPVEwzMih4LHkpCXJvdGwzMih4LHkpCisjZGVmaW5lIFJP
VEw2NCh4LHkpCXJvdGw2NCh4LHkpCiAKICNkZWZpbmUgQklHX0NPTlNUQU5UKHgpICh4IyNMTFUp
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0eS9t
dXJtdXJoYXNoL011cm11ckhhc2gzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhp
cmRfcGFydHkvbXVybXVyaGFzaC9NdXJtdXJIYXNoMy5oCmluZGV4IDc1Y2Q0YmE1ODE1NGE5NWI3
ZjE0YWE4NWE2ZTMyMmRkMmY1NGQzMzQuLmMwOGY0ZjI1ODUyYzA3NmUzNzMxOGMyYTkzMzU3NjE2
YjViOTRiMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9w
YXJ0eS9tdXJtdXJoYXNoL011cm11ckhhc2gzLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL3RoaXJkX3BhcnR5L211cm11cmhhc2gvTXVybXVySGFzaDMuaApAQCAtMTgsNyArMTgs
NyBAQCB0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgdWludDY0X3Q7CiAKIC8vIE90aGVyIGNvbXBp
bGVycwogCi0jZWxzZSAgICAvLyBkZWZpbmVkKF9NU0NfVkVSKQorI2Vsc2UJLy8gZGVmaW5lZChf
TVNDX1ZFUikKIAogI2luY2x1ZGUgPHN0ZGludC5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4
IDE3ZjEzNDExZDcyNjQxOGFiZDRkNzg3MmRiOGZlMjA3Yzc3MDdlMmQuLmQwYmUwMDJjYTE1YzY5
NDJhOGE1NTMyYzFjNTkyOWY2OTM4OTg2YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yODQ3
LDU1ICsyODQ3LDU2IEBAIGlmIChXVEZfVVNFXzNEX0dSQVBISUNTKQogICAgIGVuZGlmICgpCiAK
ICAgICBsaXN0KEFQUEVORCBBTkdMRVN1cHBvcnRfU09VUkNFUwotICAgICAgICAke0RFUklWRURf
U09VUkNFU19XRUJDT1JFX0RJUn0vZ2xzbGFuZy5jcHAKLSAgICAgICAgJHtERVJJVkVEX1NPVVJD
RVNfV0VCQ09SRV9ESVJ9L2dsc2xhbmdfdGFiLmNwcAotCi0gICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAKLSAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW4uY3BwCi0gICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAKLSAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdENhbGxEZXB0
aC5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVj
dERpc2NvbnRpbnVpdHkuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9j
b21waWxlci9EaWFnbm9zdGljcy5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci9Gb3JMb29wVW5yb2xsLmNwcAotICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvSW5mb1NpbmsuY3BwCi0gICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcAotICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5jcHAKLSAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVHTFBv
c2l0aW9uLmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
SW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL0ludGVybVRyYXZlcnNlLmNwcAotICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvSW50ZXJtZWRpYXRlLmNwcAotICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwCi0g
ICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRFU1NMLmNw
cAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xT
TC5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1
dEdMU0xCYXNlLmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvT3V0cHV0SExTTC5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL1BhcnNlQ29udGV4dC5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmNwcAotICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5jcHAKLSAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1NlYXJjaFN5bWJvbC5jcHAKLSAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwCi0gICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAKLSAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JFU1NM
LmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNs
YXRvckdMU0wuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxl
ci9UcmFuc2xhdG9ySExTTC5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3Jj
L2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAKLSAgICAgICAg
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1VuaWZvcm0uY3BwCi0gICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25z
LmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFi
bGVJbmZvLmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
VmFyaWFibGVQYWNrZXIuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9j
b21waWxlci9WZXJzaW9uR0xTTC5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL2RlYnVnLmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvaW50ZXJtT3V0LmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvcGFyc2VDb25zdC5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL3V0aWwuY3BwCi0KLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAKLSAgICAgICAg
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lH
cmFwaEJ1aWxkZXIuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwCi0gICAgICAgICR7VEhJUkRQ
QVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2
ZXJzZS5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCisgICAgICAgICR7VEhJUkRQQVJU
WV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvZGVHZW4uY3BwCisgICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVy
LmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9EZXRlY3RDYWxsRGVwdGguY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RldGVjdERpc2NvbnRpbnVpdHkuY3BwCisgICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RpYWdub3N0
aWNzLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Gb3JMb29wVW5yb2xsLmNwcAorICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5j
cHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvSW5pdGlhbGl6ZS5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZURsbC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVBhcnNlQ29udGV4
dC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvSW5pdGlhbGl6ZVZhcmlhYmxlcy5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtZWRpYXRlLmNwcAorICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1UcmF2
ZXJzZS5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvSW50ZXJtZWRpYXRlLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAKKyAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0
RVNTTC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvT3V0cHV0R0xTTC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuY3BwCisgICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuY3Bw
CisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1BhcnNlQ29udGV4dC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvUG9vbEFsbG9jLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElS
fS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9RdWFsaWZpZXJBbGl2ZS5jcHAKKyAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUmVtb3Zl
VHJlZS5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvUmV3cml0ZUVsc2VCbG9ja3MuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1NlYXJjaFN5bWJvbC5jcHAKKyAgICAgICAg
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU2hhZGVyTGFu
Zy5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvU3ltYm9sVGFibGUuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JFU1NMLmNwcAorICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yR0xTTC5j
cHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvckhMU0wuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1VuZm9sZFNob3J0Q2lyY3VpdC5jcHAKKyAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRD
aXJjdWl0QVNULmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcAorICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJs
ZUluZm8uY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1ZhcmlhYmxlUGFja2VyLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WZXJzaW9uR0xTTC5jcHAKKyAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvY29tcGlsZXJkZWJ1
Zy5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvZ2xzbGFuZ19sZXguY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmNwcAorICAgICAgICAke1RISVJEUEFS
VFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1PdXQuY3BwCisgICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3BhcnNl
Q29uc3QuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL3V0aWwuY3BwCisKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNwcAorICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFw
aC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRw
dXQuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcAogCiAgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3Rp
Y3NCYXNlLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcApAQCAtMjkwOSwxOSArMjkxMCwx
OSBAQCBpZiAoV1RGX1VTRV8zRF9HUkFQSElDUykKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbi5jcHAKICAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuY3Bw
CiAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9S
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElS
fS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNw
cAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAKKyAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0
VmVydGV4U2hhZGVyVGltaW5nLmNwcAogCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy90aGlyZF9wYXJ0eS9jb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIuY3BwCiAgICAgKQog
CiAgICAgaWYgKFdJTjMyKQogICAgICAgICBsaXN0KEFQUEVORCBBTkdMRVN1cHBvcnRfU09VUkNF
UwotICAgICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL29zc291
cmNlX3dpbi5jcHAKKyAgICAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL29zc291cmNlX3dpbi5jcHAKICAgICAgICAgKQogICAgIGVsc2UgKCkK
ICAgICAgICAgbGlzdChBUFBFTkQgQU5HTEVTdXBwb3J0X1NPVVJDRVMKLSAgICAgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9vc3NvdXJjZV9wb3NpeC5jcHAKKyAg
ICAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L29zc291cmNlX3Bvc2l4LmNwcAogICAgICAgICApCiAgICAgZW5kaWYgKCkKIApAQCAtMjk4OSwy
MiArMjk5MCw2IEBAIHNldChJRExfQVRUUklCVVRFU19GSUxFICR7V0VCQ09SRV9ESVJ9L2JpbmRp
bmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQpCiAKIFdFQktJVF9JTkNMVURFX0NPTkZJR19G
SUxFU19JRl9FWElTVFMoKQogCi0jIEFOR0xFIHRva2VuaXplciAmIHBhcnNlcgotYWRkX2N1c3Rv
bV9jb21tYW5kKAotICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vZ2xz
bGFuZy5jcHAKLSAgICBNQUlOX0RFUEVOREVOQ1kgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3Jj
L2NvbXBpbGVyL2dsc2xhbmcubAotICAgIENPTU1BTkQgJHtGTEVYX0VYRUNVVEFCTEV9IC0tbm9s
aW5lIC0tbm91bmlzdGQgLS1vdXRmaWxlPWdsc2xhbmcuY3BwICR7VEhJUkRQQVJUWV9ESVJ9L0FO
R0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmwKLSAgICBXT1JLSU5HX0RJUkVDVE9SWSAke0RFUklW
RURfU09VUkNFU19XRUJDT1JFX0RJUn0KLSAgICBWRVJCQVRJTSkKLQotYWRkX2N1c3RvbV9jb21t
YW5kKAotICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vZ2xzbGFuZ190
YWIuY3BwICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9nbHNsYW5nX3RhYi5oCi0gICAg
TUFJTl9ERVBFTkRFTkNZICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9nbHNs
YW5nLnkKLSAgICBDT01NQU5EICR7QklTT05fRVhFQ1VUQUJMRX0gLS1uby1saW5lcyAtLWRlZmlu
ZXM9Z2xzbGFuZ190YWIuaCAtLXNrZWxldG9uPXlhY2MuYyAtLW91dHB1dD1nbHNsYW5nX3RhYi5j
cHAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcueQotICAgIFdP
UktJTkdfRElSRUNUT1JZICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfQotICAgIFZFUkJB
VElNKQotCi0KICMgR2VuZXJhdGUgSW5zcGVjdG9yV2ViLmpzb24KIGFkZF9jdXN0b21fY29tbWFu
ZCgKICAgICBPVVRQVVQgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3Rvcldl
Yi5qc29uCkBAIC0zMjg1LDQgKzMyNzAsNCBAQCBlbmRpZiAoKQogaWYgKFNIQVJFRF9DT1JFKQog
ICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhXZWJDb3JlIFBST1BFUlRJRVMgVkVSU0lPTiAke1BS
T0pFQ1RfVkVSU0lPTn0gU09WRVJTSU9OICR7UFJPSkVDVF9WRVJTSU9OX01BSk9SfSkKICAgICBp
bnN0YWxsKFRBUkdFVFMgV2ViQ29yZSBERVNUSU5BVElPTiAiJHtMSUJfSU5TVEFMTF9ESVJ9IikK
LWVuZGlmICgpCitlbmRpZiAoKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>225004</attachid>
            <date>2014-02-23 09:09:57 -0800</date>
            <delta_ts>2014-02-23 09:09:57 -0800</delta_ts>
            <desc>Archive of layout-test-results from webkit-ews-10 for mac-mountainlion-wk2</desc>
            <filename>layout-test-results.zip</filename>
            <type>application/zip</type>
            <size>471328</size>
            <attacher name="Build Bot">buildbot</attacher>
            
              <data encoding="base64">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
Hfb7splZu1MnmFEAPbdrpoAWzEBbFLdQTL1GveLKJx8dHyf9UDmXZ79fnb794ydHholSuh4L+A37
x/8DUEsDBAoAAAAAAMJEV0QAAAAAAAAAAAAAAAAFABwAZmFzdC9VVAkAA+wjClMJJQpTdXgLAAEE
9QEAAAQUAAAAUEsDBAoAAAAAAI1EV0QAAAAAAAAAAAAAAAAJABwAZmFzdC9jc3MvVVQJAAOKIwpT
CSUKU3V4CwABBPUBAAAEFAAAAFBLAwQUAAIACACNRFdE2wjTQjsAAAA/AAAAKQAcAGZhc3QvY3Nz
L2NvbXBhcmUtY29udGVudC1zdHlsZS1zdGRlcnIudHh0VVQJAAOKIwpTiiMKU3V4CwABBPUBAAAE
FAAAAHMsKUnNLShRKMlXSM0rLE0tTVVIVCjPL8pWyARKKJRnZOakKkDEM4sVklIz89IVCoryk1OL
i1NT9LgAUEsDBAoAAAAAAKFEV0QAAAAAAAAAAAAAAAAMABwAZmFzdC9mcmFtZXMvVVQJAAOuIwpT
CSUKU3V4CwABBPUBAAAEFAAAAFBLAwQUAAIACAChRFdE2wjTQjsAAAA/AAAALwAcAGZhc3QvZnJh
bWVzL2ZyYW1lLWRpc3BsYXktbm9uZS1mb2N1cy1zdGRlcnIudHh0VVQJAAOuIwpTriMKU3V4CwAB
BPUBAAAEFAAAAHMsKUnNLShRKMlXSM0rLE0tTVVIVCjPL8pWyARKKJRnZOakKkDEM4sVklIz89IV
Coryk1OLi1NT9LgAUEsDBAoAAAAAAKtEV0QAAAAAAAAAAAAAAAAMABwAZmFzdC9sb2FkZXIvVVQJ
AAPCIwpTCSUKU3V4CwABBPUBAAAEFAAAAFBLAwQUAAIACACmRFdE2wjTQjsAAAA/AAAAUgAcAGZh
c3QvbG9hZGVyL2Rpc3BsYXktaW1hZ2UtdW5zZXQtY2FuLWJsb2NrLWltYWdlLWFuZC1jYW4tcmVs
b2FkLWluLXBsYWNlLXN0ZGVyci50eHRVVAkAA7cjClO3IwpTdXgLAAEE9QEAAAQUAAAAcywpSc0t
KFEoyVdIzSssTS1NVUhUKM8vylbIBEoolGdk5qQqQMQzixWSUjPz0hUKivKTU4uLU1P0uABQSwME
FAACAAgAp0RXRNsI00I7AAAAPwAAAFMAHABmYXN0L2xvYWRlci9pbWFnZXMtZW5hYmxlZC11bnNl
dC1jYW4tYmxvY2staW1hZ2UtYW5kLWNhbi1yZWxvYWQtaW4tcGxhY2Utc3RkZXJyLnR4dFVUCQAD
uSMKU7kjClN1eAsAAQT1AQAABBQAAABzLClJzS0oUSjJV0jNKyxNLU1VSFQozy/KVsgESiiUZ2Tm
pCpAxDOLFZJSM/PSFQqK8pNTi4tTU/S4AFBLAwQUAAIACACrRFdE2wjTQjsAAAA/AAAALQAcAGZh
c3QvbG9hZGVyL3JlbG9hZC1wb2xpY3ktZGVsZWdhdGUtc3RkZXJyLnR4dFVUCQADwiMKU8IjClN1
eAsAAQT1AQAABBQAAABzLClJzS0oUSjJV0jNKyxNLU1VSFQozy/KVsgESiiUZ2TmpCpAxDOLFZJS
M/PSFQqK8pNTi4tTU/S4AFBLAwQKAAAAAADDRFdEAAAAAAAAAAAAAAAACQAcAGZhc3QveHNsL1VU
CQAD7SMKUwklClN1eAsAAQT1AQAABBQAAABQSwMEFAACAAgAwkRXRHL9ZfKFAAAA6QAAACUAHABm
YXN0L3hzbC90cmFuc2Zvcm0teGhyLWRvYy1zdGRlcnIudHh0VVQJAAPsIwpT7CMKU3V4CwABBPUB
AAAEFAAAAK1OMQ7CQAzb+4p8oGRguxkm2EB0TttUnJS7VLmc1P6eg36BxbJsy/akaY1CHjUDm6kF
WKLwDwIivlRq4oIXcsLr8MCBx1t0vNOu1Z9cvOBCxXErgsZFq00tvr2tn3U6NRUkZoYzsHDi7BDT
quZdc8JBIUDNNLZRVxCl+U/j/VHP8/dF9wFQSwMEFAACAAgAwkRXRAWPVY6TAAAA0AIAACcAHABm
YXN0L3hzbC94c2x0LWJhZC1pbXBvcnQtdXJpLXN0ZGVyci50eHRVVAkAA+wjClPsIwpTdXgLAAEE
9QEAAAQUAAAA7U87DsIwDN17Cl+geGDLDBNsIDo7qSsiOXGVOBLcnkCPwIZYLNvvo/eCpjUKWdQM
XIoWB0sU/gyHiDeVlrjigYzwOF1wYn+Khmd6arMrV6u4UDV8VMHCVVsJnd4vGz3NY0yrFhtbibv+
A4mZYQ8snDgbbOjQEbet4KBl8j2AKYjS/G2QrLWF+9uk60SG8O/7031fUEsDBBQAAgAIAMNEV0SB
SnetSwAAAKwAAAA0ABwAZmFzdC94c2wveHNsdC10cmFuc2Zvcm0tdG8tZnJhZ21lbnQtY3Jhc2gt
c3RkZXJyLnR4dFVUCQAD7SMKU+0jClN1eAsAAQT1AQAABBQAAAC1zLENgDAMRNE+U9wKtGzjwAVZ
cmxkLOZHomAD6q/3t5inmpSGg5mRK4YaAVMnFtA46YVbUqUbW3LnUNdXxMBh0cW+juJVbfvl+gBQ
SwMEFAACAAgAWEVXRJGbyiQyAQAAwwEAABEAHABmdWxsX3Jlc3VsdHMuanNvblVUCQADByUKUwkl
ClN1eAsAAQT1AQAABBQAAABNUEtPwzAM/i8+gdSte6AhldOkVQgxAVoL41Z5mdtGS9socceqaf+d
JOVALk6c72WvN5til2af2zy7uwKTZQvJFX7oUCl/mU9n04W/iK4tO9NgK8g/K2XDfyOt8NXWeCQz
OaMZZFtNNIqTr8YJGilYdq2d1twEjiHdGYYEdumz885e3t8gArpoEkxH1/9YZ5nroOAeHQPy9DuH
23gisCeptcctH1erCNq+KQxVzsl6F0jmEciWyZheB7kSlaUR59JaFwuSWQQKh67nIoxcHKVxPvFX
p/qGbLxBxjjdZ/GeDq+S423A5mE7EZzJeCsXYFTVaC054+VitXyIQMsLqT9davGg/oWo0RbaEPPg
WCxqSNj0rl/KiweGmR5H1VLhaQhJe6dejOvBsMmilB7rqbf7p19QSwMECgAAAAAAZ0RXRAAAAAAA
AAAAAAAAAAUAHABodHRwL1VUCQADQiMKUwklClN1eAsAAQT1AQAABBQAAABQSwMECgAAAAAAu0RX
RAAAAAAAAAAAAAAAAAsAHABodHRwL3Rlc3RzL1VUCQAD4iMKUwklClN1eAsAAQT1AQAABBQAAABQ
SwMECgAAAAAAZ0RXRAAAAAAAAAAAAAAAABEAHABodHRwL3Rlc3RzL2NhY2hlL1VUCQADQiMKUwkl
ClN1eAsAAQT1AQAABBQAAABQSwMEFAACAAgAZ0RXRENjbk8/AAAAvQAAADsAHABodHRwL3Rlc3Rz
L2NhY2hlL3N1YnJlc291cmNlLWZhaWxvdmVyLXRvLW5ldHdvcmstc3RkZXJyLnR4dFVUCQADQiMK
U0IjClN1eAsAAQT1AQAABBQAAABzLClJzS0oUSjJV0jNKyxNLU1VSFQozy/KVsgESiiUZ2TmpCpA
xDOLFZJSM/PSFQqK8pNTi4tTU/S4HAdUOwBQSwMECgAAAAAAoERXRAAAAAAAAAAAAAAAABAAHABo
dHRwL3Rlc3RzL21pc2MvVVQJAAOrIwpTCSUKU3V4CwABBPUBAAAEFAAAAFBLAwQUAAIACACgRFdE
FTU1knoAAAC8AAAAKgAcAGh0dHAvdGVzdHMvbWlzYy94c2x0LWJhZC1pbXBvcnQtc3RkZXJyLnR4
dFVUCQADqyMKU6sjClN1eAsAAQT1AQAABBQAAACNjkEOwyAMBO95hT9AIO2hFb8hxFUsGYyMkfr8
EuUD1V5WO4fZLKURJyOpgKqiET7ECKdZi95vj9caZrb4DiH4Qj17xS5DM3b/7WxuT4ej0kTNDaV1
bsBUEZ6AjAWrwU2XSeJdIcKoaZ8aE2BJx3+6Kn3k87qXLDEvP1BLAwQKAAAAAACkRFdEAAAAAAAA
AAAAAAAAFgAcAGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9VVAkAA7QjClMJJQpTdXgLAAEE9QEAAAQU
AAAAUEsDBBQAAgAIAKREV0TbCNNCOwAAAD8AAAA3ABwAaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2Zh
bGxiYWNrLWFuY2hvci1yZWxvYWQtc3RkZXJyLnR4dFVUCQADtCMKU7QjClN1eAsAAQT1AQAABBQA
AABzLClJzS0oUSjJV0jNKyxNLU1VSFQozy/KVsgESiiUZ2TmpCpAxDOLFZJSM/PSFQqK8pNTi4tT
U/S4AFBLAwQKAAAAAADFRFdEAAAAAAAAAAAAAAAAFAAcAGh0dHAvdGVzdHMvc2VjdXJpdHkvVVQJ
AAPxIwpTCSUKU3V4CwABBPUBAAAEFAAAAFBLAwQKAAAAAADFRFdEAAAAAAAAAAAAAAAAKgAcAGh0
dHAvdGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L1VUCQAD8SMKUwklClN1eAsA
AQT1AQAABBQAAABQSwMEFAACAAgAxURXRGOqrGyCAAAAqAAAAEAAHABodHRwL3Rlc3RzL3NlY3Vy
aXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS94c2wtYWxsb3dlZC1zdGRlcnIudHh0VVQJAAPxIwpT
8SMKU3V4CwABBPUBAAAEFAAAAC2NQQrDMAwE73mFXhA7vaT4FYW+ILgbYlAsIyml/n1NKXtahtnN
crbCmxepBFXRRHth0OHeUgjLbZ3jyJLuMcZgyJcW7yFLdVR//vtDuOQeFCaXZlgw74z5Y0xcKmgl
MM4h0A/YAfg0aHpDbVwnksqdljnSjs2vMUSbguxqTdTxmr5QSwMEFAACAAgAxURXRGOqrGyCAAAA
qAAAAFIAHABodHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS94c2wtdW5h
ZmZlY3RlZC1ieS1zdHlsZS1zcmMtMi1zdGRlcnIudHh0VVQJAAPxIwpT8SMKU3V4CwABBPUBAAAE
FAAAAC2NQQrDMAwE73mFXhA7vaT4FYW+ILgbYlAsIyml/n1NKXtahtnNcrbCmxepBFXRRHth0OHe
UgjLbZ3jyJLuMcZgyJcW7yFLdVR//vtDuOQeFCaXZlgw74z5Y0xcKmglMM4h0A/YAfg0aHpDbVwn
ksqdljnSjs2vMUSbguxqTdTxmr5QSwMEFAACAAgAu0RXRGBLZhCRAAAA+wEAAEUAHABodHRwL3Rl
c3RzL3NlY3VyaXR5L3hzcy1ERU5JRUQteHNsLWRvY3VtZW50LXNlY3VyaXR5T3JpZ2luLXN0ZGVy
ci50eHRVVAkAA+IjClPiIwpTdXgLAAEE9QEAAAQUAAAA7Y4xDoMwDEV3TuELhASWVplh6NKeAQVT
Ipkksp0Kbl869AYdq7++r/dC3kqkSWNOgMyZPSyREFbV4q3t+kvrznX+6pyzgqFy1MPuImYY77dx
MLuQmXOoGyY1X+DB8RlTu28EFBNCD0j4IUD0IJQVUZvz6V/Icro95EQHdK2DBSetjAITI0gtJbPi
3IR/6I9D31BLAwQUAAIACABkRFdE6op8QmEFAAAFDwAACgAcAGh0dHBkLmNvbmZVVAkAAzsjClOu
JApTdXgLAAEE9QEAAAQUAAAArVdtb9s2EP6uX0G4MLAVk5y4cecNgQHXcZosSZ1ZTgMsSQ1aoiTW
EsmRVBJn6377jrTlF8kRCmwOYJPH57k7Ho/Hi0/kI5FjzjVqtHIlG45zyYP5KU0JCHQmWrdkdkF1
K9FahF4Kaw3nmoavAQQNG44fcEk+cCxfhSmDmBkEGJzQjPBco3cHB84FIaKf0keCRsy5ws/r+Zj8
mROlFTrcRhXUw47jXFHmCyyJb7cEQMPfkXQcX2OpdwCDlBJm1HYOzLQwc03kIKFpaMzBx0QFh1c8
zGE/ONfJyzThSk+zpSSlM/JMghYWOEhIuwXi6QblKb5NpyxI85DUcVeQEjHl8TTgLKJxHXeDKtET
gkPYdh13BSkRlUrrSLBcImRwKnUMs16iYEVrPTPrJUoQ0zoGLJcIjMRcU6wpZ3XELVj55DIckwyL
2qNbYcr7C4y++i0uIWViSnE9zQBKJEmeJNW1Z7CClIgiEZ2CtfqUyTA3KEN0ljfpE84IOmz/7B3A
36HjHJ9QSQLN5QK1eo7RMRJ2a+ichaBLoVOepvzJX2SXlM0VuspTTT9T8qTQEEwNPp4D0t4AZel9
gx6BJUlDYmZLpRJyFeIDaz+FhC02UBRJnpkV57i19qXnOP0gIEqZmmRd9hKNrQRcNkKF/kGNL/fe
D3dnycPdRD/8fXcSPtz56mFqvn5s9F63ewKDjVkj8SGDVLSw7h63rH5w4UaRAWac0QCn1gkocyck
whCByUIQpMmzbokUU+acQelgALnkfJ4LhUZRZMpQfEkeSYqesGRmdsplhqF4NxPUTFEzR02N7htN
ed9AzZ5CzZmZ/TUmEZFEfqMgNnNwQ7r9GCqfETVQwLMZZST8Lo0WnvFd8xsTyO2h5k0DktAKdlHW
MF4abiA7KNLIpzHDOpc2Js7xeVRUk3WSBz2IZCHvlTG2qgTLM+qH4SVmcQ4GUIiRF84rYpYij6UV
MWHII6wq1iAmFXEkkRfJqklIrrCKhmPzSNVkYlJxjR4kWCowd+6P3G6384vbRR5VfDmscCn4RXVF
/BX2/BXvU9k+aLfd365hmaoKbQ7bmctXaRdj64o7r+6YQdhYNWyMg5hXxAICIfirO24vzYhqqARs
V+g9YncmzQr8VBZT/YK8NK/IA4hRgKuHpOCQqqFRj8hTj1UlgA5Af1BlyBx5smr2JXEnt8iDH/1U
jsAHGneKuou8YubNYFCG3p5/Ohnd+u5hu3MI5oUdlEGD6+7792t9gYDZq0E3pmzYNz4XmIvRedcd
F2rmnHbdSpLcDHw4twKTB6q9D3G0jTiqICankO1rhI66joXs3vPt93l13c2nCPC1pBxetoW5yXD1
4ZqDZrinob1/cF/gbkCeQ2ZCFkI+LXMHDsvkCeQEnD+c9epsdsrNyltbp7EQKdRw40Tr2YWuEnk6
flljhizgIWUxenahVgoJjwzy/tizGr9Qgbz4ZZd+hlmYwiMDPYyrAklN2sMYMjzddcM+F4nO4D4p
81NWoGxldYWJb1hgqiAWuli5VNk2rK7G2pd/U2P3hML29y7gwNlEfB9whvX3AF3FcxkQq1jty4yQ
yu2MWD/9tu2Avhu+PRus5bDwr3LIsDCNUhzbjhu6Dg7/LHC2u6QSLvWUC8KmGqawXBO2otlaOTde
TocshjfXvHZbwgFnIYLXdPj7zdCfTK+Gk7PRyTf0ZTLuD4bbwLFR7r1FLro7fSgZ/0ylznFqOgj0
9tfu0dG7peG9/Zpd8C833hy3tvig7o3zBvXhSIirBAloRAMUmXZmoTTJkJBcE9u6eoBcNVINqWTw
f/RLW72k6c68t/fevWe6ojDicv5fLGw1hv8CUEsDBAoAAAAAAOpEV0QAAAAAAAAAAAAAAAAGABwA
bWVkaWEvVVQJAAM3JApTCSUKU3V4CwABBPUBAAAEFAAAAFBLAwQKAAAAAADqRFdEAAAAAAAAAAAA
AAAADAAcAG1lZGlhL3RyYWNrL1VUCQADNyQKUwklClN1eAsAAQT1AQAABBQAAABQSwMEFAACAAgA
6kRXRD6h3/O2AAAAAwEAADgAHABtZWRpYS90cmFjay90cmFjay1jdWVzLXNvcnRlZC1iZWZvcmUt
ZGlzcGF0Y2gtc3RkZXJyLnR4dFVUCQADNyQKUzckClN1eAsAAQT1AQAABBQAAABVzstuwjAUhOE9
TzEvkMgXpIR0xZJdpKp0gVicOidgcbAj2xLl7QkXoXY/+uY3Si8rZSpjodrOrjrd1qYx+OafPkXH
Oe/0UlvVWWX3WG97oSunTeEz1G8zjqSI7Eo3CgOTSHRUeMDl6IVBmDgMPhyQmU/wGbl4EfiAKcVD
mvEPCNPpPnHxPAkXHwOOFAbhVOMrMypHwbH0T+lzhjJK/PMGCv+7Mo0s13fD4ztOnOiBvytebfXi
BlBLAwQUAAIACADuRFdEHj06dDcCAABmDgAAKwAcAHB5d2Vic29ja2V0LndzLmxvZy0yM0ZlYjIw
MTQtMDgzNTA5LWVyci50eHRVVAkAAz8kClM9IwpTdXgLAAEE9QEAAAQUAAAA7ZRbb5swFIDf8yuO
+tJEI5hbQsrbLuk2beqmpGofosgycGisGMxspxn79XMuXamUTZO29gmBhIxtzudzDt8i8Pxo6AXD
IARvkoSTZBQ5ceAvYXH7enb18er9EigtGa8odW8xnctsjWaG3zaozQdW5QJVAr7r/dPF67HLVM1g
CJnMESIvdKBErdkdwqVUKc9zrHqL07ChhZ3OZl9mp1DnqO53iNPvGdaGywp4BbWSmf06r+5AHY4C
hZJlAv3zJPHPHRhF8WjigGfvQe9asQxTlq2hX0q7VGGGlYGMCQGCaTNIegCXXCCckXmjDZbkM08V
Uw25VKzErVRrTb42ZiUrt3h4Q25QacujSeDGRPCU1PsVu1Eb3a2bMwcErxBGk8Bp4dMjOzUrhSy3
EAAaReEWvOJ69TDdPz4dyAS34JTlubLbBy9EHQbhnvop1SPt02Z6azOqf4fs7He0wG+k2Ng+Ie+Y
YWR6Oye27p+4IddSCk3mmeK10WSL6ZqbuiFmxVVeM2UaUsqc1o2d0Xtqoo2Nz4SssIU+Hh8STqll
N5T+gnbgD4S7879UcseRf5rw2AT9FwO5iFpVfsTYFja4W4jNc7AcatfuNe/Ya7t4jxB0t9DVuKuw
6N9z3C62ihuksig0mqQ9eJVuigIV1fwHLgc9VEpafSymSlXS9vIS3ii5RvsT8hp7p5Q0cfw4+J9K
8oN4b8mDmC6iUaekTkmdkjol/bWSLpw49p5RSeGkU1KnpE5JnZJOK+knUEsDBBQAAgAIANxEV0Sg
tb8iCwEAAI8CAAArABwAcHl3ZWJzb2NrZXQud3MubG9nLTIzRmViMjAxNC0wODM1MDktb3V0LnR4
dFVUCQADICQKUz0jClN1eAsAAQT1AQAABBQAAAC1kEtvgkAUhfeTzH9gbyxiQ21JWChF8IFCebXu
ZJgCAjPITEH4P/2ffS7bxMb07G7uufnOPabn2aJ0JQnSSBLcNuMozUgi2DXlFNGCQeBXSb2PsSK0
OGIU5ZhDoFFCMOIZJYrwvYfAxWgY4sj99AynCOGKK8KsLr2QB+k63RYvxrRpgt2+6A9lHucqBK8K
BBAA879TyKclc7Tanz83evdkFuJDqR+wnMRkpP528/gunmYsY21NSfIxXhD2Z0ZhladyIg4m265f
HNOjEWjrvErakFjqWbBLi6kXm828YpqzvMsC0Zcjx+ar3ri5dnT1zG//QOskW7tf6XxmWSgYJ7uc
TIgzjgdad/tFewNQSwMEFAACAAgAWEVXRGfPCNF+JgAAI6QAAAwAHAByZXN1bHRzLmh0bWxVVAkA
AwclClMHJQpTdXgLAAEE9QEAAAQUAAAAzX1rdxvJjeh3/Yo2naTJiA/JM5OdiBJ9HI0da9evY8mb
5Gq0Ok2yKPaoyeZ2N/XIRP99AdT70U3S45xzZ7O2WV2FQqFQAAqFQh0/++nj6cU/Pr2O5tUiG+0d
l9VjxkZ743z6GP26F8F/i6S4SZdH0cGQfs7yZdWbJYs0ezyK3rLsjlXpJOlGZbIseyUr0plRr0z/
yY6iw8NVNdx72uNQR9EfLci9jM2qo+j71cPQLK3ylSiEhvND0cSE+j1CdVsc9n9gC2qzsnsZ51WV
L2AY/e9Ehao4WuZVu1+wcp1VZa/I7ztRNRXN7udpxXrlKplAX8v8vkhWTa2OZmlRVr181qseVywM
o1gkGYcxJRh2m45oVLGHqlcVQM4ZtDiKsvyeFZOkZKKpqLZKptN0eQMjXj0oOlXzI7ZYVY9dxIj+
5dY+EPVEee+ejW/TqreGmYPZy9ikQkyXjFO2t8j/GfoGIPoTmAoGs4F/J+mSFZLeQOw5S2/mleyt
D4OVJJnkWV4cRTdF8ujxSQn0yVjB2xj0FU3HyeT2psjXy2lPQCH6+tXTWZEsWDeyCxc3clbSKdAp
+vHgQLKcRPdPvMiBdzlNqqTHHlbJcsqmJ61ZkpWsdSWgTdNylSWPBmWeV3mejRNJj1VeplWawwqa
pQ9synskXn0h+y949+o3sUCSpTfQiL5xnGZZnlQwiz3AhGXuzKoF5NOpuBkn7Rc//NCN9B8H/T93
RP28mLKCM1KZZ+k0KlNY1oX5tVck03Rd6hXZ5/TojdewrJabZsggOwgDh+qHatw+JppPFJ3TZQbc
1htn+eR2aEuo6DtoeCAllSZ8wTIg3J1AZLIuSsRtymYJzLHg5nVRADfbXFrgdJlfw6PmFHLbWFV7
OKUeQyRjGOVaEoh4oifkExZwwXgo1zZJT2CC5KaW9agOVblh03BdTj6OYgldrti0V6yXS+QrlhTZ
Y2/ByjK5Ydbojoi0fE6eTw9MXXAvpnGcZ9ONU6W49Tt7oXlSpAFGE5dIVvi+FrwjHMwvSkLIHsQw
YS2gjsvkkgSq8YWer3Aeyy3kk6wKxF2unV7UOALaTK4MRbcXUtpzCA+9cp5M83v+Qf7/8x9//HFo
yXfSJ4LrctBHKWiG/ovSFzfIc8NGNhXCqkHc1A07S8ZKbKn5FROLczVPp1O2NEm0ylNQMkWP3cHq
K03NJAahVIwJWxBLGBbfSURruNVVQHWjkkIRe1uBJM96/8zzhce49eL+wFzVB5ZQ/POffm/z7+GB
N/O6SNFOzi7wgfsFFbcqridj/TADsv/FwTaC2mRKkMXRD1CHFNABKB3+v/5//NBpIKS2EI0B9mYZ
e4AeDcPEK/XRGmeJqyUU4+YwTlCpgCZnvM3sHEa3X4JsACmaLkBqNvCDrYXCvUsleXDwe1tJfq9N
k5ruRoYAa1QxIT7kwEDHAf2I2yTlcQEvYHFQR0VScnX5XKgYUGtltd0SkPb3947Ro36Lof8gR452
pCj7Xptq2xo3ksPqMB1F8xfuBgf+73s0IPyGpWdGI1sPQ/sjOWH/IbW4nOgeLMtyUuQZ7QGOB2Kn
xXdcUQqG5XoJNgNY2dApFbZGqhZUmxTpqhrtpbOofZ8uYXn1EbPPoLpZ0RFyXP7uT9eL1avyAgR7
G+iwdwfW6M11WSXICLP1coLTE91k+TjJzrG03dnjI0Twz0RVuSPB/0RRdGKUkaUEPDG/QBIdRZdX
XesbUPD28VNSljXf50n5tqpW4iuZ1V6FM2TMN0marUFf11XCcTbWWaRlCfP2mRv1PiaF/PDrk/2h
nOfrbHqR39xkjFCBOlWxdsDPoG8AXzNMYqC/pdX8vILVVQQqpAuWr6ua5porLFKqOk97+s+CVeti
qaca+FjN9quffrr+/Pr8y7uL83a6XK0rOeUWG8iND0w0VRK8KphPsmFUFhPYCK2z7FrU7/9S5kti
WKfqSGMAuimtXj/ArrGEn22ki8QBGRSYmj1Av1gO+ryszrDg46wd92OxVRHju6Qq5XpcViitULNQ
4043cr5wmPvRYefKpgZ+X4VxEZ2EsL08cMAskmoyZ+U57Y7zor3Mp2BbluKnuajwS58L1fd2o86e
ZkPqub5qW0GGRW1BBn24FVi/ngnTHNoqwS3Px9nF44rVjAs0I4gu+gjzRvB5qw/wT1N6IJobSNVx
FqRCeejz93LNhahGtmALkLMEUyLnoNPnVU4B5SmvZ0OY5cXrZDKnT+/SsuqCYFlOM6YG+6oAE6e/
KvIqR3dNXzTogzbOAq1c/HCVnNHeow2LRwIdDKI3Z39///ooWpcsStbTNI+q5KZEdKJXX346+8jF
x0u1SsC8k7LiTCwYgNdP5Vp5p7/LVYPNltDxULGMB+TZSdQ7NGcM26BkLZKJ2wOYARPBnv28uIk7
vPXQarsqGCh/aCqBvIzchoN+vz+Io6MojnVbxBNaieb71LNezh7e+5E54EHcz9jyppqLgT9FDFSB
MyqULD+B0jKpZ0mbHnReVY+SeppmVjsimMWzmwGbIMVA3fGZIFBsSe5XEwnc8YE3bXsd9FdLnA6O
G1Kcb3aJxmAcxobQkGBg6uiTHgpAjfah9CW6H5PqpHqoYkv6xsfT9C6aQM/libuJHhnfaEs2imEY
NFaYquMBfB0dY5HsH0q5Mon5ZGMBqhGnzog3je1VVaFeBrqRZm5znnGk+LbItvgGkuxgNCdaosdj
NKp5lWQJX0ENU28ROQV5l4S8op9iXRoHNG/Anb0m1Z7QJrkNohD2vpZO5E6kd+nyFiZcfNfLWH/t
E4pqRn3fkzHBNkwN4n/XrHhU4jnuh4AYHGS0xG+n3B2MzBfve73Z41QtBXvjKlUNwKzPklXJ6puY
ZNxUW9CyDlnEdWhQG0S4thM/5/coikw9qOF0QZ6hty3ueIQzfMdyxXOCudA1ldYr4CccBPmYuS3m
1+9y29YhQahtgZXTUhaqRQG7hpJVryoQNzCvrB1bvu3YasMx59CJ5y/EcrsAe7VoO1gkqxXsHt9e
vH8nNDseKHkGULosWVG9mv6STICoWFvToKZCOx4zEEXs9RLxI6gBrhGNYVVjGxRgWNNGsZkVjVVX
bJr4wlStvN4FuWdPiMTa6tiKt6jpNlykgS1RSyD7/rx+cXD4neDhWi7n9RtZ0dCS2zIjboQMjcYl
rmmuaeuD3fMBT/PJGmVYf1Iw7INLtLZBUV7VkGcwSJMUQxPoKcuyJqhTAyrW7YO4OIdhiXmySP4K
zDhqIWyIoda5vH+ka1nbUvqTYYHcmtyB9o+pphACrWLpfSyiNu1+oPxgCH8dm91JXKJ0f981zzIu
wY3al+mVbYXxb44dE5LYpPfAYHR29yHkcdaHgd0zfrL0MXV040sbriDjjsE6T/ZitoBapjPBnAMA
qYnwP1P08HnuiladoWJDYUIJ9uJNxGaAt+lIf6tekk4tXCai29AS4TXUsthJetbXM8QSzMZ/p2U6
ztgryxQxFkCDEHGPMRHN1lXUt8waU189q+nPZJJJxpLiDJ3Ld0nWtj0JFjfIOsakb1Ebd5Vr6ZL3
ZYzhsdqiZwPtynDotHdGCTSoGrIJqRu9ODg4UCa7pR3Lx+WkjT+7UVLclHJaAdQF9/60Zd02IBrh
D2S/7LGNBBCNhtFTF33DDvPc8UmiLVA7X1XXysI1uUf7Pk8iq1L0r38pBtKzny+zx/N5fv9FuZ+k
h63d8VwLClZIpOJS4jETElInDqnwbWHF4eG/VsqvtLyZOw0kvJBqxxHVGMl1Y2sAXwPJt1+gtmXC
hLcLKKlDhAlpnW4EWsbaCxh6B/QR/JsrIC1xiZ19e6obXRpAQB1d1Zjr//8MIrSB2DgM7hb+UjJ0
bdgsJ2b6WdCr2ucOjGvy6VxPU1p7z7J8Qv2CwDnnfoCO9rbM0owdDQZ8W39go2G4Q/6SlOxTUs0t
So5FoV7VIcRdu6JgSPMciRkehKyg5absCI21eVWtAGHXSxSovH+i+3oZteMBED0vKtr7yw8d9F0M
xqC/YF9QAySGztbL24HlCTI9QCE8t5wf2MYPbPeHJqq1nYcWSM+QJzk+ToQLgQ6hyG5DG4Y7PYKT
iN4PKOFehNj4dTxIRsclmrAcIoV45MtJlk5u8QQJf7ereVp2WqMINgd/+vPh8QDru/4HURX/MFmG
M8gbhGrZqYjfh+QuvUlAYFFgCZa0rT0SluptcdeA1QkTCw9F+ML+C0m9MPGM0drhN2rYAV+KIEFt
YxKwo31BG0kiQWg9kSEvrvr6iQxZGOd6Rn+LiLiydvqNLYLBABoUusAIFs2752KyawrGkJ1K5oic
eU5Loe5eC6XVltoLjIpJtU4y6wymlNUsSx9FB69M7qXz/zr7FLtiQ4IlPzkXxPS7Twcp7TgyvZ/Y
gAOU1fmvYOXQHsloXLdHsvv57yRbM9UPNbS2S4ZbSw9DiWEDhvCvRn/4g9UW/6tpHL95dfZO+mVB
4nvtIhM+Ufji9d8vYugicj+cvX/119f7tZ/pyAC2Vh2vD2tmjYVdc4SoqzunQkU+YWX5Vy0938BG
Axnz4/gXqG8yE8ksfp7HP/btUwjjA2w1rks6Hu3UGeP2KWp/tS7nZr9iw2U3Mk+YPZlvfQQ9TEeH
as5QjWmtu2czkz0qXja0PTTGMtI1VSl0F396dX4ea2qEFdK6ZOU1MyTbNRoEmkgGcGuGt1j2hi9X
jgo46P3Z+fnZh79ay1ufUi2SWwYyqmBRNU8q3E1j8KCKMiNSlqsU/gSdFoHo7Yl1XT1UEWKOi9mE
y5vcw7xGomd5GN+vYQT7LD/ABw17RT2DF/ktW5b1coc79sqSTZHnaH/3ETYSgqhny8+sKrTY4tAu
D66IhM7qFB8P+UdawLErVnUd1UyzIjGKOGVDzmnXGJcUnSRsF7ZMwGqeIriNw7AsQBu0HcKxG7Ed
xqJRID5qETyTpe5RsVWDE4zGvf2wxXIWKwNUJv66pjB7V0XYQAPRFg2jftph/KefX52/jetJrSNp
fhOZL87ev/745aKhIzPcZOuulHBz+MOIfAnA8g+8pM/FtDmkZ7Fpdxz0UqnWeGK3CYKqGDfuHzk2
4a2jY/GkwvvGm3jOVwr5PjEQtGpwBfhQea5YJcTFUB129duA1ufTzxs4Jg2W9fFgVWDS5JFFG1IK
bDxKdh20W6DiYP9bkVFGpINOwMWGiHzWvnDnOJj8p9Uisxzmok7X7AiPu7t0gkq/EY892yfttNQK
DtvxX5tbTdPZTLbBf1tHq2E5hzYSD024XmEsjTYCaGD7NSPjTXiHWBF75GXRDh3fY90te7y3+rq3
ehHmpX84R/wglDq64w1B0o3M3ZawXiL3uC6OPYNGq1CuRDrhOBeErgK90L/rR34Z9msHtHSdx9gN
WFSbKGfZBzUT6saaT3ogz05CoxBnu86MNHkWPnmc3wPDimK0+nKrqUjQxSO4WSQrmHuzcM92D4ZE
MVbIBuHyWwl1Ukuob0GsOhqxgi0nzCXQkzcym238KNPtcLZxw3VWqmUnT/QcTEKk3ga4JYgt+Tjc
GdYmfjCMG3OZ4vjs7RSN8RrLr1esmKjzi10oJtEg6G2cVvoXKJ/fd+KOr3JqRYzeOD0T/gF7c3Yt
Ni7XhLVx8rATteAvUdUVqQDHiWgE2z1dwmYdz/7HeVJMv3x+B7t1fk6kcSvdPTsGMgKhW636I2qj
tTKV9vdT64xNQto35wyNIOEGsGRiilTzoUa9yImyM8G2ui3LFJYON+GCNnalPanLktWqXOVVf5Iv
BlNJl3KgaHWtCmklPYeleQ/24+f1sjxBUf4H2mecIJ/ASs+n7Mvns9N8scqXGHEgkXNNX9yUfM7v
bT+J5S8QOuyYO09/o1NAsFQsY9sQ23bYU/DSWMoUikl2VysOeml+i7bykZPqRDQl8kpXu6gzOq6K
kdTrsvC4mlqe2qAX2VTY3DWKrQxHjuFLPQlFg5sAhn7/TkBOg1uoVmCQmyCgozyTwrze4AVgCKxc
61cPr+Nt4ULICMehj83WiuE+uTMVAw9mNiXoloJOwBEUtaBsL31dj0JYEhPwztfYMhJJCtjW8nhz
lzhPX9Wj2CvYfW3p1hr8XO4PjD3zhIdN7WhyKyeXGSNCoBxXl5TdI1N2b9MnjA4WIisHsWN4OU6y
jisRcHFLsUAduSt+V1mKDiSXxaJ6WSb7Fkz7W3uv76CB7/npwsugu1kJdgstE/hxYpxINVsOl7qH
K64tRnPQeXnxSIeTwR4GIMfhD1RuI/s41Tdb+L0KOl4Ulym6FLBSFYzxf/lbe/wm4lronzB9YYKT
+jZcvFIDaLDkm5cDULbPLXuM0iX1424fl+xeKRIB4mXU1mHgxM3QHo+y4S9bSkjzVwK/hBpXoVMs
TXRSAaLm0LONDL2F0VMSt6ET10d0rXFq+sF4wTlRSHR1N8HgJ1BhOviG+nSPSKmsX+YLpsKguADF
WCgZUcHPZ/S5VPQUDKJDJDPgx9N8vay0p1He72lyEYrjebooCo3xDFtFZVGJO/VmTJV1FE61aVdx
5x57Yiensl1pc8N2sUpyqjUU6P5rQ7C8UKWvgx6bAZk0esczaINUMbbELR1333KDgOcsmbLCjc2u
xFmeFfRm0V63kxOgHb7EAgTCmFrOkc7UWoEQtslVEwshwFpRD4HhyT3CW0LzLWwyBMZe2MD8kGQ+
/0o3ZdpmPIPDrTKIoXMUKWH+vGWEifQSUIwqZkJSWQRKUBwJVOAiHHseBrGWo+RIdfnW5kxdMJAL
ueD3jh3PK13GITVGwaWeUKA9BQdIRz/8RLhHRTFdaNKhHO6WBW9Q80tDvD1eGjKv5dSTnfQiNVN6
Sx94JtNpVM2ZPrSa8QWJkWzrBWkrJBvVofNunJASF/MuCt+4lsWxx4MAOrcr5eg91yvgjAMAu2c+
wp5Bvc7ph4sq/zDgtT3F5mzqGyPObR2EtQOHHvVn/g72JDZs+fd1RpIF19rz1mx6N7JZw5bY6oz2
p8Z+0PzYMJfCStNhRtBNc0xUiIDK6HXdy0a/9tCCFDM2HqFL0bgF4VDkFoT/cvXHtuxrdh0wVTcA
pUNSHmegiPnr1w6LA8vyGzkyKoigwPVG7kKrZLHKmKIV/Qo4u92BiUPZxqFpqYR2AliMk2w9ZTJ9
gNh8DMh9KW/xz1lBfd0z8RnaYXwGhWfISigLJBAuA2pmy3YxhChgOUwbePbfs91w+/L2HNwJYlYh
sa8uaDaeUFU5hXWpu96Ovnbvh5egZ5l9O9x1Cxbpos1v/rq5B6gQBOAqSyasPfify5/Lnx+Sg6v9
f6l//W6AwZYiRhxY4z/XIHkTumtLGQdpWtFDGS2SJWy6yeilTCAXOOhz0NFkt/76BNQzivrX0PAe
JgEGJJyS5d1NRIlITlo8IwvlIhKZTvDfrdHxKs8ebzBADHMNgfw96B5Eh/jHD93Dg5ZsDoI7O3o+
mUwoVcTdDU2d1TkmePkWvR9S94fY/y7do+nCpqcyqPJEW4nS4kkQMWe+qIysEDJBcF55ddMI7qgK
VJ3mzeqb71+4gXIq779ZOMA+661lK5KlCs15adNNIF3LvOOjS12PmQmV9pF+NR00+ior4OvjZ3YH
tj3Fn+nm/Cofsn9f7CLKdlyImq6gpaMAF5wfzBiELnJA1ML2djm1kMDoC4MJHp8ZIOwtT/jDcG/r
kfhz9tUEeHIuwYXHbHfo8qc9Or19QglLN9+4Tezu7cXnmtuWl7zRlU2ip8CyBBjhxYC3/SSnOBtF
AmIuixtWieuhf3k8o1nmF+SExjXubRJo8rcLua8BhoYyV9tMuSZP+Q7hRIJSTju9mMw7pnx023XG
d9yGG1TsuRRtkm40diI4Me4PZh5WZ5VH5XqFVy2ijD2kk/ymSFbzdEJYk9pYwnTZsdoXPJipjh+w
Qz1mx+Mx3tR4XNPYCkDlSonjyP4X3ax3GPZcRuNHvutAzdf3ZJiYBXRRczROOD7BSHG+syfPWdNI
D5zVKAa5ue3Yb0uHGbrtiQbkiz2xog6GoVw5GsixgcxLdAqrBHmOXYZ9F0Ehq2ECyY7FDL6MEJSZ
6SVwazfYzsThqdOwBSVWNneg1v5dLAjzWi42gE2oL62sFWh48bDkw3oxtnWoWpI7yIoaKXBp9iF2
x54ss2SAgzl3sJ6im8ZEndXhC5uNpABctVbX8h2vlmUqLQiiF4zv3Ak/qtBolWxh1Vgd2Cfh2ogI
6al6G0LKXWk5KkAvowYL8yiqtX2HjrLU6SVOogaj0VRMCh9zlEHNFlRnRHsc1yeMcf5/eb7QJrtR
hAFE9x+XP7GMrtJwb6X5/RpTVr5JkE/h+59ERsBbvpv7GxrVUPwjpvU1yt+ShY318QP/QvCmdjsL
zB+jmn6HPgDVgd1hAwh/UBQudWq44RVXrous7vpzXb4Iw1uvHd5WJgpK/elk3rSiCtKK7A3ovE/B
De3Bz7325f/83Lv6Y+dnDOIZ6PhBI6cX5h7aCi+qauNERbH52RSQDkwUyJiYpE2YdrzRmk0JmLs8
U5fgWyBtt7GxD2czjUO9conAI4vbJmgRUgxEtwpxz9e/l1zqsy5sx1YPsd9krvgywK11jXjuWRyR
k302DtLApDMPCGuaCbuxOSXupXmSGNYq4dMSXCKWSqlEAhs77Y3QLfpa59AJWapCyWvsBDmE/U/p
bNacQSW5RJfQ705auExaV17Sm2+zgkMpfF1uk8cVbrmVEEIk0PLGYgzECMnU4yHPnwvI9bSrc2mv
ZlPI/NA4gQux0QbpaZxZ2/GenW8J2Yhn7PixSSGj0OafsHn4dWjZkDE0kXLLSAtVcZmXDWbirEWr
o2mRYMygyPHifTJXoLOw3VsxMmDmNHz82uap+4b+EvkLZkgu/ebAPPQJOAoMTBjaZwDkyFISZ5gd
GnMMOhCFOB1EL6KePWgRgPt3UN++qO3Uis0qX4W6ESK4vp9/uP1w8aw7ClH+FYUg6UQrO4QG7JL5
G+MGvL59ZuB2/vt8XbKP6yool+kyXJ8Sh7PpBUliukFnF/XNZI5nbz6/ev86YOfLg82zmds+SsuI
Z5m5Z/EdixaI0pSOCPIZnWwqyjQLY9fnGJS1hhg08tRobMmHZa6verK9h6o23SJNN2sGFrK6yLbT
sTMYyRw8zW2MaK46JVkz5JrZ+CaEdLKUmYpeYWaqQJVPzQQVvdR7etEGdka1o/QBGCGBLh6Y4sQp
C4ox1wMd4I4aDtlw45fj/U5kWTF2zM3iMCzeiKoTqvx3kE02bBKbHRBbTjFJzXqo/zCh/sOHCkIy
AJTLSIMpn2maOKSs2Su6PrBG9ueJr0LZqjw/VZP92WbuTY8u5vfvhHxaQafV1sBrLrA2qGq1/pLp
9DW+lYEeB4ZwY6IGMl5sy3ZHGukMnZtgARHrQYE+0JD4mZ0Zc6RO7axAJFhjzFIjcmrsauItIyyU
mYqlS88PbLoBHSECrrDHJ7dPjvN/sUcaoiWL74xUtqTHsKC/YFUC1VEo8IJyns4qq2RSFRkU1MjM
8j6FbXXU5pmS+rMiX5zOk+IU97SivfhpCRR8QC2K0/jIYjN7MNf8eYaL/A2+y0YxXQ5bjoHdbocO
0F+2A/oBdt5bw7zdDuYnTJMEDLM13Gw7uO+SHcbPmmHytDunmuu2AjppBiqzdu0KtmoGy++o7wp0
tiPQN3xhNcB+8leaz5whUxYXmtuOVeaADgxjpKYHZ/z1qEg2CWEiM5R6sZqGqdCMaWbs9uge2LdD
XK7F7UjoS0z7FsC2UkQF/jSPe0Pn+9+UEqYE+bdSwxUp34YY34YtDLDCq7MzOws/HFW5bEb6agMK
r8387B4ioqPmEbQ7W2Zz9xHxxHUIiUAm7W3G0+6Eye8L81CnwVTvv6FbTy6HOg2klvuWXQpVUMdx
lebITRPemKZPwunyWxT6xQDnSE2YfHFHRZWJgMMLfsAu7U8e476Mq+h2md9HyfKxmoM1FiVj3CgQ
FDTOorNKVMW8YeNknD1GE4pCx0jDPNIUKCKECmYwwenvhcdhRZ3Ab8rSbEXcO7QTTl9V11sVKiFj
3OHHe3g+MrSvShrgnevNHKYTQ6No2HRhQNrVlxLLK0DzsObVklBXMtYn0NsUhlexrTq1tsp2A35s
+8ZoFpSdfrU6XjYwQCKP84ems3br9TXLveDDcZ3nRo0dD6rEq2Ve636KSzQOvyUXb2hrHT/Yb/hu
amqeOMfH8xcjKS+I0scDKDleFfz1OItiLZkX8vU0lTGuUNGMU693bodQMa/3fIOZNLwzzjZTxIPf
skeexNPiXHmRxyhSl01UCABbJYXYJdciBXvs3pLd49OygBNsGdnklt+G/3lJQf9R7HUlxmpNioXJ
L3m6bKvuBUpb0cX0pAnHuHjK0+1DmMOAKKGJL3nGQfvOMqNcwUl2yC6WumoUHUcHMrsaLxidRKal
7qXUFrkmtcPTQmtLg0n5BPUnw4WrCwMSUnxVF9Q2ekPU0ESDr0Y4jBcpCRcpGStJkRv11voGY8Vw
du5iNJBY1e0anNVFfv9Z3P5R1ZudqGBCyEZpiZdcuZMTxFNeTMuonfZZX72MijbBXcruMTQR8wfn
eG/hF4xrv0+WZDHgdSzMLonHRvATzybk29ycRurx0X7gBE+ScUV3OThaffmas02r+puYp/Nk2WCy
2dxS69E3GEC7b0PMHTi+ydd2N2M2Qe3C35Glpy9YZZJG8WV/q6T4eMIUZl1tKOr0P1+5DbZCU2Ee
8sVq7RktLv7e8yd1Imurdc6llgzKNYlvOGEa3LigokCllmXcjZqcooYjV1/9aKK/vdGrV2H6tVgR
mKgV2dC5f4346K5k+gViZNXfR3qq+29FStGTyZ0KsVFvnTh41rxCFR7NNsMgxRd3nCj6RlbVx1ax
znbwq34Hm166jp7kK4PGeNxr4qH900Yh0NYReib5pH/eIuk1phDAwzcnX25PvJEeuw1wDuqkjHx5
vjHlpXjSDp9xNYMEMGREYFifBlN0sFUeTF5XN7IuhWJvl/wDWNFXqpZmVX0+Q9Gq54A+xQew6qxi
i7ZHxG70n+cfP/T5Hal09tjGLsSO1apM76fUURDfq0UhYHZ5U9elKaWxof9aFhCct7JkUM2BpJgB
GgZYiyVrE1B3PqaoL2lwbuJRnNIG8zadOrloxHu/Vtw5FinD94TPE0yQOR+hoflr3vy+fUTFc8Es
Pfi+lkxqXMrnKMNa5ojmy4kQV37eBy7fePq8LyX7IOz6zZJtyx1vsCOep283GWq/pRWmplvHe5uB
d9+0ueFepp7MAGivtE2ZB/GY1ygM+kL4J5Mrt5hw2oZSEornIhkSD6TvRDo9xaWTE+yqE3lRgfTO
wh0rqotc0uqtSGeimEckiHEzZIqMM3X5WJuSJz517AcJ/k2jTRc3l2Ux2W64Vmxgp+7N2y2QrQtY
NPr+kC/d7jUdd6SNm8y5uRudECYZl3kGVqL97kbjLItn4+yW6pmN0Pw+7fZwG6y9z3Zsi/UItUCG
P36pnu6lrOZ/pTwAgVe2Q+E10ZF4C9t+TGkbxngjqjso6dsbzlvdKGnWBQbK1WNNHzDomqNFUZO2
xtEB8HYs6e/iTjCcp46OoSwDJmwdTfq7uBO60yUflA7Que79VtMpXHtxsw7hfg58Jt1DwYlwL85T
isFOc3Lrzevwa6ZZRRnTJG4VWLzVsG2MQlm2vSyy9ORTTaumfLFPgRzzwhp5D4aFpT/J0mjQm6ZF
IuHjvy0PbtstwSevaOct2infnFkasiMo0uen/N6J93xWF3X33MaPB4KKQLaUZzKRNTjz+q7e5hHb
nmoP/U0RTVMYCr7Qaw/O2P7qDE/GqwF0GUpmFaJLKV2wfC2CmHlpPPdibF6/WdKlu3zmb9gomtxw
kvGErG/tQP/tkuIYBzMmGMyQYeZ5FdcSTaH4TJYbyWhsaVg/gP19bxsxlzcAeV4l++VOL7mSkUFI
JJQ68fMpCVoaNYxUq1byJH5/yEiwJHIo0VkEtkmn4g10maaosPIxxVbeIvcLQUHZK30bPY5SayR+
17fiwdhuMx5ObzX+zckZDSrhYETyRyvrUl06pgChse4OaVFExqxAPhR7aCnPL0MPudjZZerGIfAs
axEViVWsfFIya4rMVWYvjUCqlac9y4oCMQLE/5QYmykz6WDw2alAhjHMWb1hVlN8urVYr6y1J1PC
tI5XYknEQNLVCp1r6+USzXeWFNkjiMOyRKN1hGjhkTd7SHFy6Wv/eLAateoQMB54cWWZmRCJsqzV
tQQ1wA/K6PklKqdn20OJkeTMCdi+0K1/yqWrl5XRHdbA9AGwLAcUkT7g+W/pgYdu5OdS2Kl/+12n
MAbzZAq2ik7GJjMYtVV4wZLddxAXa9PV8MaF9RjOjtNitrUnBr/QBQpEJZjaqR4h552zXXGym3c9
8vHsXYjbam2k8/paprHehzIm7Q1+EMka25Jx5iya4WlABGsqAjNBPE0V0dOK+BAV4hOQVF+bxBcs
pM2vO+1I4AAIRWTFl1VOlIvAlBZjpNz9Vka02kGZ79KZFrtOW7UaYYb7aZRMUChiwjIj5yMvvBZp
zVoj+zfXEStLdXL1KYECM4AZZMOkMg3S+qkgWvZJrcm5gE1DTwQnyKAbsW2YK10hdIQi0LYpGUxy
bZ3GwTdnKUUmHuuEszJok1adNQUTT7QPXPvv6/MbWpuCnc6EuvKGuB9ZIMMHGnB00s/bSNV7IH3L
zTvXiTd2bD2l4+7ta/sO2X+NnW9PXsexugNln3zfkn8AFfBJ01mudCL7hxvcG3U8KCdFuqpGe8d0
hztfZnkClrBtVbVG2pWL+wWZKFOsRe1tEhVVPTLF8zwbJ4VMJ9uyw5jcFqLSMq9Ya/SlZCT50270
Sze6JbmfYSJsPMWXMYWw6YP/TbCEx5ZSNRnx2aVfMxKrWXLD5YPuUkqpX5K7hFPi6C5PpzBkne62
5u301kh2x1Pf7ga09jXz1kh+2gkwUNrcwbsPHFt+jdZIVLWhywkzd/Zq1owtvTFl1I4YeXTMT5YQ
gC9KWhHmNYRR43HCOH8AsOL0SB7OQA/NR82tEWWh0rD1jowjsAEpawFuj0/oxKY1EgcpHFgDAtwr
cdJCRpYxY1G6BGUB5lQ+iyjbIjGziP1iMmSL2z8ti6xG4NmuA7DOtvjCMvBRnaJQOR5QlwZj6DUj
/rmneMVUya2R+jygzJl7/wdQSwMECgAAAAAAV0VXRAAAAAAAAAAAAAAAAAgAHAByZXRyaWVzL1VU
CQADBSUKUwklClN1eAsAAQT1AQAABBQAAABQSwMECgAAAAAAV0VXRAAAAAAAAAAAAAAAAA4AHABy
ZXRyaWVzL3dlYmdsL1VUCQADBSUKUwklClN1eAsAAQT1AQAABBQAAABQSwMECgAAAAAAV0VXRAAA
AAAAAAAAAAAAABQAHAByZXRyaWVzL3dlYmdsLzEuMC4yL1VUCQADBSUKUwklClN1eAsAAQT1AQAA
BBQAAABQSwMECgAAAAAAV0VXRAAAAAAAAAAAAAAAACAAHAByZXRyaWVzL3dlYmdsLzEuMC4yL2Nv
bmZvcm1hbmNlL1VUCQADBSUKUwklClN1eAsAAQT1AQAABBQAAABQSwMECgAAAAAAV0VXRAAAAAAA
AAAAAAAAACUAHAByZXRyaWVzL3dlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL2dsc2wvVVQJAAMFJQpT
CSUKU3V4CwABBPUBAAAEFAAAAFBLAwQKAAAAAABXRVdEAAAAAAAAAAAAAAAAKgAcAHJldHJpZXMv
d2ViZ2wvMS4wLjIvY29uZm9ybWFuY2UvZ2xzbC9taXNjL1VUCQADBiUKUwklClN1eAsAAQT1AQAA
BBQAAABQSwMEFAACAAgAV0VXRAgIormZAAAAwgAAAFgAHAByZXRyaWVzL3dlYmdsLzEuMC4yL2Nv
bmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItdmFyeWluZy1wYWNraW5nLXJlc3RyaWN0aW9ucy1h
Y3R1YWwudHh0VVQJAAMFJQpTBSUKU3V4CwABBPUBAAAEFAAAACWNvQrDMBCDdz/FvUDtvVuWlkKG
QgIdg+Nc4qP+CXdOQ9++NgWBxAeSRk8CBaUAH6kmj/DC+d7D2FggKbjAjCGfQAlsAlrZRqxpAcY9
cxF4dsMAmeHWPXqtVGteQWvzF6Pkgx2KOXHewtTOppVCBS6nNXO0yaHZggQTSZwRbxfky8fyl9J2
2a17N687hckVykm0LzGo9qfUD1BLAwQUAAIACABXRVdEN/nAvwABAAAbAgAAVgAcAHJldHJpZXMv
d2ViZ2wvMS4wLjIvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3NoYWRlci12YXJ5aW5nLXBhY2tpbmct
cmVzdHJpY3Rpb25zLWRpZmYudHh0VVQJAAMFJQpTBiUKU3V4CwABBPUBAAAEFAAAAM2PQU4DMQxF
93MK74fEFIkNqykqIEQXiFZ0WaUZTyfCk1SJQ9vbkxS4ACsky/6yZL//lVKA74HzRAkXRgw+bFa4
od2Lk59xnx33+EZMJhGyOYcsSiiJipQyS8JIEl25P9JuzzjT1/oGbfBDiJPxlnDPiXFyyWIaTU9R
fZp4dn6vDsZ+1FkelQ9WXPBJ0elAVqjXcpKmbdv/5s9YyYYv7roO1OzqFtrauq6B9egSVDbE7Isa
CYrJpyWs645dKrlgRxyO4DwYD26IZqKieoh0CFESvM5XKwgRHufPS91Ac7m9A63xu4qZkKP9zbOt
uO3guCz+HEqPMnGjKrppK7hwvwBQSwMEFAACAAgAV0VXRDi680SZAAAAwgAAAFoAHAByZXRyaWVz
L3dlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItdmFyeWluZy1wYWNraW5n
LXJlc3RyaWN0aW9ucy1leHBlY3RlZC50eHRVVAkAAwUlClMFJQpTdXgLAAEE9QEAAAQUAAAAJY29
CsMwEIN3P8W9QO29W5aWQoZCAh2D41zio/4Jd05D3742BYHEB5JGTwIFpQAfqSaP8ML53sPYWCAp
uMCMIZ9ACWwCWtlGrGkBxj1zEXh2wwCZ4dY9eq1Ua15Ba/MXo+SDHYo5cd7C1M6mlUIFLqc1c7TJ
odmCBBNJnBFvF+TLx/KX0nbZrXs3rzuFyRXKSbQvMaj2q9QPUEsDBBQAAgAIAFdFV0QejL2BBAgA
AN4aAABeABwAcmV0cmllcy93ZWJnbC8xLjAuMi9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVy
LXZhcnlpbmctcGFja2luZy1yZXN0cmljdGlvbnMtcHJldHR5LWRpZmYuaHRtbFVUCQADBiUKUwYl
ClN1eAsAAQT1AQAABBQAAAC9WWtz27gV/e5fwbFn65kdk5QsKbUkR53Ej7bTtJOpM7sfMyAJiohB
gguAlpS2/70XL4qkSEm73WmchCSe93nOBXyfyZyuLu4zjBJ45FgiL84QF1i+v65k6t9dQ7OQO4pX
FwtKitcbb/FGBJE48f514cEfibfST3DMOJKEFQuvYAVe6q6I8QRzP2JSsnzhjcutl8A7TpYX/7kw
y9lFYkYZX3hXo8lc9wXPhOJHkqa2P0Lx65qzqkh8NzS9Uz/NjcwOglGSeFdJkpi+lBXST1FO6G7h
5axgokSxFTBHfE1A5DHOvZFpKhkop/XgmIJGb1gLlI07kk4mk571BSqELzAnaaNTkO9Y79Hc1Kc4
lQtvFMxce0JESREsIlFEsR9jSk3HhiQygwVGox+sjChJSLGuZxv5rHvUW9tDVmRSZCCYrIdn7A3z
jlaz2Ww5ZHCMjSkC5ZdPsJewk1PKEKjCyTqTbe+pUQ9gAkSKeisG5icS1BydUNtq6et1W5baZKCd
r/2owm3DUbmX7AXHyn+DgaMnt8OmGzI2bp3dIahG5dbs8LQtwcWwPqiGb7xAPboaDoonSIKjnfrf
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
I/c2Pw18fNvgBwyLYFOyXwNbEGhzgUSCgRNjwfRawhFRYvVjknr1B1BLAwQKAAAAAAAwRVdEAAAA
AAAAAAAAAAAADAAcAHRyYW5zaXRpb25zL1VUCQADuyQKUwklClN1eAsAAQT1AQAABBQAAABQSwME
FAACAAgAMEVXRNQhmPmGAAAALAIAADcAHAB0cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZs
b3ctc3ZnLWxlbmd0aC1zdGRlcnIudHh0VVQJAAO7JApTuyQKU3V4CwABBPUBAAAEFAAAAO3OsQrC
MBhF4d2nuC/Q0pgOEsSlWBcHwaGDOKTtRYMhgeS38fEVfAkH1+8sp+eItUazMa0yWqFwfDipWHKl
mtrHyXoMHE8pTsz5olql9RXbfUox7Qy6QxeD8CVnytEFDm6Wu4ELi/Vuhv8QytcCb1bcQnzSkxk2
ESEKrPexcK5X/X/lt1feUEsDBAoAAAAAADxFV0QAAAAAAAAAAAAAAAAGABwAd2ViZ2wvVVQJAAPU
JApTCSUKU3V4CwABBPUBAAAEFAAAAFBLAwQKAAAAAAA8RVdEAAAAAAAAAAAAAAAADAAcAHdlYmds
LzEuMC4yL1VUCQAD1CQKUwklClN1eAsAAQT1AQAABBQAAABQSwMECgAAAAAAPEVXRAAAAAAAAAAA
AAAAABgAHAB3ZWJnbC8xLjAuMi9jb25mb3JtYW5jZS9VVAkAA9QkClMJJQpTdXgLAAEE9QEAAAQU
AAAAUEsDBAoAAAAAADxFV0QAAAAAAAAAAAAAAAAdABwAd2ViZ2wvMS4wLjIvY29uZm9ybWFuY2Uv
Z2xzbC9VVAkAA9QkClMJJQpTdXgLAAEE9QEAAAQUAAAAUEsDBAoAAAAAADxFV0QAAAAAAAAAAAAA
AAAiABwAd2ViZ2wvMS4wLjIvY29uZm9ybWFuY2UvZ2xzbC9taXNjL1VUCQAD1CQKUwklClN1eAsA
AQT1AQAABBQAAABQSwMEFAACAAgAPEVXRAgIormZAAAAwgAAAFAAHAB3ZWJnbC8xLjAuMi9jb25m
b3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVyLXZhcnlpbmctcGFja2luZy1yZXN0cmljdGlvbnMtYWN0
dWFsLnR4dFVUCQAD1CQKU9QkClN1eAsAAQT1AQAABBQAAAAljb0KwzAQg3c/xb1A7b1blpZChkIC
HYPjXOKj/gl3TkPfvjYFgcQHkkZPAgWlAB+pJo/wwvnew9hYICm4wIwhn0AJbAJa2UasaQHGPXMR
eHbDAJnh1j16rVRrXkFr8xej5IMdijlx3sLUzqaVQgUupzVztMmh2YIEE0mcEW8X5MvH8pfSdtmt
ezevO4XJFcpJtC8xqPan1A9QSwMEFAACAAgAPEVXRHxdI677AAAACwIAAE4AHAB3ZWJnbC8xLjAu
Mi9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVyLXZhcnlpbmctcGFja2luZy1yZXN0cmljdGlv
bnMtZGlmZi50eHRVVAkAA9QkClPUJApTdXgLAAEE9QEAAAQUAAAAzY9BTgMxDEX3cwrvh8QUiQ2r
KSogRBeIVnRZpRlPJ8KTVIlD29uTlJ6AFZJlf1my3/9KKcDPwHmihAsjBp82K9zQ7s3JdTxmxz1+
EJNJhGzOIYsSSqIipcyS8Ei7PeNM3+o7tMEPIU7GW8I9J8bJJYtpND1F9W3i2fm9Ohj7VWd5INFZ
ccEnRacDWaFey0matm3/iy9jJRu+uOo6ULObe2hr67oG1qNLUJkQsy9qJCjmXpawrjt2qeSBHXE4
gvNgPLghmomK6iHSIURJ8D5frSBEeJ6/LnUDzeX2AbTG3ypmQo6Wrnm2FbcdHJfFn0PpUSZuVEU3
bQUX7g9QSwMEFAACAAgAPEVXRDi680SZAAAAwgAAAFIAHAB3ZWJnbC8xLjAuMi9jb25mb3JtYW5j
ZS9nbHNsL21pc2Mvc2hhZGVyLXZhcnlpbmctcGFja2luZy1yZXN0cmljdGlvbnMtZXhwZWN0ZWQu
dHh0VVQJAAPUJApT1CQKU3V4CwABBPUBAAAEFAAAACWNvQrDMBCDdz/FvUDtvVuWlkKGQgIdg+Nc
4qP+CXdOQ9++NgWBxAeSRk8CBaUAH6kmj/DC+d7D2FggKbjAjCGfQAlsAlrZRqxpAcY9cxF4dsMA
meHWPXqtVGteQWvzF6Pkgx2KOXHewtTOppVCBS6nNXO0yaHZggQTSZwRbxfky8fyl9J22a17N687
hckVykm0LzGo9qvUD1BLAwQUAAIACAA8RVdEk4FQNwAIAADWGgAAVgAcAHdlYmdsLzEuMC4yL2Nv
bmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItdmFyeWluZy1wYWNraW5nLXJlc3RyaWN0aW9ucy1w
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
AAAApIGOvQAAZmFzdC9jc3MvY29tcGFyZS1jb250ZW50LXN0eWxlLXN0ZGVyci50eHRVVAUAA4oj
ClN1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAAChRFdEAAAAAAAAAAAAAAAADAAYAAAAAAAAABAA
7UEsvgAAZmFzdC9mcmFtZXMvVVQFAAOuIwpTdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAoURX
RNsI00I7AAAAPwAAAC8AGAAAAAAAAQAAAKSBcr4AAGZhc3QvZnJhbWVzL2ZyYW1lLWRpc3BsYXkt
bm9uZS1mb2N1cy1zdGRlcnIudHh0VVQFAAOuIwpTdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAA
q0RXRAAAAAAAAAAAAAAAAAwAGAAAAAAAAAAQAO1BFr8AAGZhc3QvbG9hZGVyL1VUBQADwiMKU3V4
CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAKZEV0TbCNNCOwAAAD8AAABSABgAAAAAAAEAAACkgVy/
AABmYXN0L2xvYWRlci9kaXNwbGF5LWltYWdlLXVuc2V0LWNhbi1ibG9jay1pbWFnZS1hbmQtY2Fu
LXJlbG9hZC1pbi1wbGFjZS1zdGRlcnIudHh0VVQFAAO3IwpTdXgLAAEE9QEAAAQUAAAAUEsBAh4D
FAACAAgAp0RXRNsI00I7AAAAPwAAAFMAGAAAAAAAAQAAAKSBI8AAAGZhc3QvbG9hZGVyL2ltYWdl
cy1lbmFibGVkLXVuc2V0LWNhbi1ibG9jay1pbWFnZS1hbmQtY2FuLXJlbG9hZC1pbi1wbGFjZS1z
dGRlcnIudHh0VVQFAAO5IwpTdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAq0RXRNsI00I7AAAA
PwAAAC0AGAAAAAAAAQAAAKSB68AAAGZhc3QvbG9hZGVyL3JlbG9hZC1wb2xpY3ktZGVsZWdhdGUt
c3RkZXJyLnR4dFVUBQADwiMKU3V4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAMNEV0QAAAAAAAAA
AAAAAAAJABgAAAAAAAAAEADtQY3BAABmYXN0L3hzbC9VVAUAA+0jClN1eAsAAQT1AQAABBQAAABQ
SwECHgMUAAIACADCRFdEcv1l8oUAAADpAAAAJQAYAAAAAAABAAAApIHQwQAAZmFzdC94c2wvdHJh
bnNmb3JtLXhoci1kb2Mtc3RkZXJyLnR4dFVUBQAD7CMKU3V4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIAMJEV0QFj1WOkwAAANACAAAnABgAAAAAAAEAAACkgbTCAABmYXN0L3hzbC94c2x0LWJhZC1p
bXBvcnQtdXJpLXN0ZGVyci50eHRVVAUAA+wjClN1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADD
RFdEgUp3rUsAAACsAAAANAAYAAAAAAABAAAApIGowwAAZmFzdC94c2wveHNsdC10cmFuc2Zvcm0t
dG8tZnJhZ21lbnQtY3Jhc2gtc3RkZXJyLnR4dFVUBQAD7SMKU3V4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIAFhFV0SRm8okMgEAAMMBAAARABgAAAAAAAEAAACkgWHEAABmdWxsX3Jlc3VsdHMuanNv
blVUBQADByUKU3V4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAGdEV0QAAAAAAAAAAAAAAAAFABgA
AAAAAAAAEADtQd7FAABodHRwL1VUBQADQiMKU3V4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAALtE
V0QAAAAAAAAAAAAAAAALABgAAAAAAAAAEADtQR3GAABodHRwL3Rlc3RzL1VUBQAD4iMKU3V4CwAB
BPUBAAAEFAAAAFBLAQIeAwoAAAAAAGdEV0QAAAAAAAAAAAAAAAARABgAAAAAAAAAEADtQWLGAABo
dHRwL3Rlc3RzL2NhY2hlL1VUBQADQiMKU3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAGdEV0RD
Y25PPwAAAL0AAAA7ABgAAAAAAAEAAACkga3GAABodHRwL3Rlc3RzL2NhY2hlL3N1YnJlc291cmNl
LWZhaWxvdmVyLXRvLW5ldHdvcmstc3RkZXJyLnR4dFVUBQADQiMKU3V4CwABBPUBAAAEFAAAAFBL
AQIeAwoAAAAAAKBEV0QAAAAAAAAAAAAAAAAQABgAAAAAAAAAEADtQWHHAABodHRwL3Rlc3RzL21p
c2MvVVQFAAOrIwpTdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAoERXRBU1NZJ6AAAAvAAAACoA
GAAAAAAAAQAAAKSBq8cAAGh0dHAvdGVzdHMvbWlzYy94c2x0LWJhZC1pbXBvcnQtc3RkZXJyLnR4
dFVUBQADqyMKU3V4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAKREV0QAAAAAAAAAAAAAAAAWABgA
AAAAAAAAEADtQYnIAABodHRwL3Rlc3RzL25hdmlnYXRpb24vVVQFAAO0IwpTdXgLAAEE9QEAAAQU
AAAAUEsBAh4DFAACAAgApERXRNsI00I7AAAAPwAAADcAGAAAAAAAAQAAAKSB2cgAAGh0dHAvdGVz
dHMvbmF2aWdhdGlvbi9mYWxsYmFjay1hbmNob3ItcmVsb2FkLXN0ZGVyci50eHRVVAUAA7QjClN1
eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAADFRFdEAAAAAAAAAAAAAAAAFAAYAAAAAAAAABAA7UGF
yQAAaHR0cC90ZXN0cy9zZWN1cml0eS9VVAUAA/EjClN1eAsAAQT1AQAABBQAAABQSwECHgMKAAAA
AADFRFdEAAAAAAAAAAAAAAAAKgAYAAAAAAAAABAA7UHTyQAAaHR0cC90ZXN0cy9zZWN1cml0eS9j
b250ZW50U2VjdXJpdHlQb2xpY3kvVVQFAAPxIwpTdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA
xURXRGOqrGyCAAAAqAAAAEAAGAAAAAAAAQAAAKSBN8oAAGh0dHAvdGVzdHMvc2VjdXJpdHkvY29u
dGVudFNlY3VyaXR5UG9saWN5L3hzbC1hbGxvd2VkLXN0ZGVyci50eHRVVAUAA/EjClN1eAsAAQT1
AQAABBQAAABQSwECHgMUAAIACADFRFdEY6qsbIIAAACoAAAAUgAYAAAAAAABAAAApIEzywAAaHR0
cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kveHNsLXVuYWZmZWN0ZWQtYnkt
c3R5bGUtc3JjLTItc3RkZXJyLnR4dFVUBQAD8SMKU3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAI
ALtEV0RgS2YQkQAAAPsBAABFABgAAAAAAAEAAACkgUHMAABodHRwL3Rlc3RzL3NlY3VyaXR5L3hz
cy1ERU5JRUQteHNsLWRvY3VtZW50LXNlY3VyaXR5T3JpZ2luLXN0ZGVyci50eHRVVAUAA+IjClN1
eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABkRFdE6op8QmEFAAAFDwAACgAYAAAAAAABAAAApIFR
zQAAaHR0cGQuY29uZlVUBQADOyMKU3V4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAOpEV0QAAAAA
AAAAAAAAAAAGABgAAAAAAAAAEADtQfbSAABtZWRpYS9VVAUAAzckClN1eAsAAQT1AQAABBQAAABQ
SwECHgMKAAAAAADqRFdEAAAAAAAAAAAAAAAADAAYAAAAAAAAABAA7UE20wAAbWVkaWEvdHJhY2sv
VVQFAAM3JApTdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA6kRXRD6h3/O2AAAAAwEAADgAGAAA
AAAAAQAAAKSBfNMAAG1lZGlhL3RyYWNrL3RyYWNrLWN1ZXMtc29ydGVkLWJlZm9yZS1kaXNwYXRj
aC1zdGRlcnIudHh0VVQFAAM3JApTdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA7kRXRB49OnQ3
AgAAZg4AACsAGAAAAAAAAQAAAKSBpNQAAHB5d2Vic29ja2V0LndzLmxvZy0yM0ZlYjIwMTQtMDgz
NTA5LWVyci50eHRVVAUAAz8kClN1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADcRFdEoLW/IgsB
AACPAgAAKwAYAAAAAAABAAAApIFA1wAAcHl3ZWJzb2NrZXQud3MubG9nLTIzRmViMjAxNC0wODM1
MDktb3V0LnR4dFVUBQADICQKU3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAFhFV0RnzwjRfiYA
ACOkAAAMABgAAAAAAAEAAACkgbDYAAByZXN1bHRzLmh0bWxVVAUAAwclClN1eAsAAQT1AQAABBQA
AABQSwECHgMKAAAAAABXRVdEAAAAAAAAAAAAAAAACAAYAAAAAAAAABAA7UF0/wAAcmV0cmllcy9V
VAUAAwUlClN1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAABXRVdEAAAAAAAAAAAAAAAADgAYAAAA
AAAAABAA7UG2/wAAcmV0cmllcy93ZWJnbC9VVAUAAwUlClN1eAsAAQT1AQAABBQAAABQSwECHgMK
AAAAAABXRVdEAAAAAAAAAAAAAAAAFAAYAAAAAAAAABAA7UH+/wAAcmV0cmllcy93ZWJnbC8xLjAu
Mi9VVAUAAwUlClN1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAABXRVdEAAAAAAAAAAAAAAAAIAAY
AAAAAAAAABAA7UFMAAEAcmV0cmllcy93ZWJnbC8xLjAuMi9jb25mb3JtYW5jZS9VVAUAAwUlClN1
eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAABXRVdEAAAAAAAAAAAAAAAAJQAYAAAAAAAAABAA7UGm
AAEAcmV0cmllcy93ZWJnbC8xLjAuMi9jb25mb3JtYW5jZS9nbHNsL1VUBQADBSUKU3V4CwABBPUB
AAAEFAAAAFBLAQIeAwoAAAAAAFdFV0QAAAAAAAAAAAAAAAAqABgAAAAAAAAAEADtQQUBAQByZXRy
aWVzL3dlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9VVAUAAwYlClN1eAsAAQT1AQAA
BBQAAABQSwECHgMUAAIACABXRVdECAiiuZkAAADCAAAAWAAYAAAAAAABAAAApIFpAQEAcmV0cmll
cy93ZWJnbC8xLjAuMi9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVyLXZhcnlpbmctcGFja2lu
Zy1yZXN0cmljdGlvbnMtYWN0dWFsLnR4dFVUBQADBSUKU3V4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIAFdFV0Q3+cC/AAEAABsCAABWABgAAAAAAAEAAACkgZQCAQByZXRyaWVzL3dlYmdsLzEuMC4y
L2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItdmFyeWluZy1wYWNraW5nLXJlc3RyaWN0aW9u
cy1kaWZmLnR4dFVUBQADBSUKU3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAFdFV0Q4uvNEmQAA
AMIAAABaABgAAAAAAAEAAACkgSQEAQByZXRyaWVzL3dlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL2ds
c2wvbWlzYy9zaGFkZXItdmFyeWluZy1wYWNraW5nLXJlc3RyaWN0aW9ucy1leHBlY3RlZC50eHRV
VAUAAwUlClN1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABXRVdEHoy9gQQIAADeGgAAXgAYAAAA
AAABAAAApIFRBQEAcmV0cmllcy93ZWJnbC8xLjAuMi9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc2hh
ZGVyLXZhcnlpbmctcGFja2luZy1yZXN0cmljdGlvbnMtcHJldHR5LWRpZmYuaHRtbFVUBQADBiUK
U3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAFhFV0Qmfs2to/cFACzaIgAKABgAAAAAAAEAAACk
ge0NAQBzdGF0cy5qc29uVVQFAAMHJQpTdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAIkVXRAAA
AAAAAAAAAAAAAAQAGAAAAAAAAAAQAO1B1AUHAHN2Zy9VVAUAA6AkClN1eAsAAQT1AQAABBQAAABQ
SwECHgMKAAAAAAAiRVdEAAAAAAAAAAAAAAAACwAYAAAAAAAAABAA7UESBgcAc3ZnL3N0cm9rZS9V
VAUAA6AkClN1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAiRVdER5I/qoIAAACQAAAAJQAYAAAA
AAABAAAApIFXBgcAc3ZnL3N0cm9rZS96ZXJvLXdpZHRoLWhhbmctc3RkZXJyLnR4dFVUBQADoCQK
U3V4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAADBFV0QAAAAAAAAAAAAAAAAMABgAAAAAAAAAEADt
QTgHBwB0cmFuc2l0aW9ucy9VVAUAA7skClN1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAwRVdE
1CGY+YYAAAAsAgAANwAYAAAAAAABAAAApIF+BwcAdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92
ZXJmbG93LXN2Zy1sZW5ndGgtc3RkZXJyLnR4dFVUBQADuyQKU3V4CwABBPUBAAAEFAAAAFBLAQIe
AwoAAAAAADxFV0QAAAAAAAAAAAAAAAAGABgAAAAAAAAAEADtQXUIBwB3ZWJnbC9VVAUAA9QkClN1
eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAAA8RVdEAAAAAAAAAAAAAAAADAAYAAAAAAAAABAA7UG1
CAcAd2ViZ2wvMS4wLjIvVVQFAAPUJApTdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAPEVXRAAA
AAAAAAAAAAAAABgAGAAAAAAAAAAQAO1B+wgHAHdlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL1VUBQAD
1CQKU3V4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAADxFV0QAAAAAAAAAAAAAAAAdABgAAAAAAAAA
EADtQU0JBwB3ZWJnbC8xLjAuMi9jb25mb3JtYW5jZS9nbHNsL1VUBQAD1CQKU3V4CwABBPUBAAAE
FAAAAFBLAQIeAwoAAAAAADxFV0QAAAAAAAAAAAAAAAAiABgAAAAAAAAAEADtQaQJBwB3ZWJnbC8x
LjAuMi9jb25mb3JtYW5jZS9nbHNsL21pc2MvVVQFAAPUJApTdXgLAAEE9QEAAAQUAAAAUEsBAh4D
FAACAAgAPEVXRAgIormZAAAAwgAAAFAAGAAAAAAAAQAAAKSBAAoHAHdlYmdsLzEuMC4yL2NvbmZv
cm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItdmFyeWluZy1wYWNraW5nLXJlc3RyaWN0aW9ucy1hY3R1
YWwudHh0VVQFAAPUJApTdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAPEVXRHxdI677AAAACwIA
AE4AGAAAAAAAAQAAAKSBIwsHAHdlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFk
ZXItdmFyeWluZy1wYWNraW5nLXJlc3RyaWN0aW9ucy1kaWZmLnR4dFVUBQAD1CQKU3V4CwABBPUB
AAAEFAAAAFBLAQIeAxQAAgAIADxFV0Q4uvNEmQAAAMIAAABSABgAAAAAAAEAAACkgaYMBwB3ZWJn
bC8xLjAuMi9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVyLXZhcnlpbmctcGFja2luZy1yZXN0
cmljdGlvbnMtZXhwZWN0ZWQudHh0VVQFAAPUJApTdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA
PEVXRJOBUDcACAAA1hoAAFYAGAAAAAAAAQAAAKSByw0HAHdlYmdsLzEuMC4yL2NvbmZvcm1hbmNl
L2dsc2wvbWlzYy9zaGFkZXItdmFyeWluZy1wYWNraW5nLXJlc3RyaWN0aW9ucy1wcmV0dHktZGlm
Zi5odG1sVVQFAAPUJApTdXgLAAEE9QEAAAQUAAAAUEsFBgAAAABAAEAArxoAAFsWBwAAAA==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>225006</attachid>
            <date>2014-02-23 09:26:45 -0800</date>
            <delta_ts>2014-02-23 09:26:45 -0800</delta_ts>
            <desc>Archive of layout-test-results from webkit-ews-06 for mac-mountainlion</desc>
            <filename>layout-test-results.zip</filename>
            <type>application/zip</type>
            <size>498309</size>
            <attacher name="Build Bot">buildbot</attacher>
            
              <data encoding="base64">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
NioKU3V4CwABBPUBAAAEUAAAAFBLAwQKAAAAAAAZSFdEAAAAAAAAAAAAAAAAKgAcAGh0dHAvdGVz
dHMvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L1VUCQADQikKUzYqClN1eAsAAQT1AQAA
BFAAAABQSwMEFAACAAgAGUhXRGOqrGyCAAAAqAAAAEAAHABodHRwL3Rlc3RzL3NlY3VyaXR5L2Nv
bnRlbnRTZWN1cml0eVBvbGljeS94c2wtYWxsb3dlZC1zdGRlcnIudHh0VVQJAANCKQpTQikKU3V4
CwABBPUBAAAEUAAAAC2NQQrDMAwE73mFXhA7vaT4FYW+ILgbYlAsIyml/n1NKXtahtnNcrbCmxep
BFXRRHth0OHeUgjLbZ3jyJLuMcZgyJcW7yFLdVR//vtDuOQeFCaXZlgw74z5Y0xcKmglMM4h0A/Y
Afg0aHpDbVwnksqdljnSjs2vMUSbguxqTdTxmr5QSwMEFAACAAgAGUhXRGOqrGyCAAAAqAAAAFIA
HABodHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS94c2wtdW5hZmZlY3Rl
ZC1ieS1zdHlsZS1zcmMtMi1zdGRlcnIudHh0VVQJAANCKQpTQikKU3V4CwABBPUBAAAEUAAAAC2N
QQrDMAwE73mFXhA7vaT4FYW+ILgbYlAsIyml/n1NKXtahtnNcrbCmxepBFXRRHth0OHeUgjLbZ3j
yJLuMcZgyJcW7yFLdVR//vtDuOQeFCaXZlgw74z5Y0xcKmglMM4h0A/YAfg0aHpDbVwnksqdljnS
js2vMUSbguxqTdTxmr5QSwMEFAACAAgAD0hXRGBLZhCRAAAA+wEAAEUAHABodHRwL3Rlc3RzL3Nl
Y3VyaXR5L3hzcy1ERU5JRUQteHNsLWRvY3VtZW50LXNlY3VyaXR5T3JpZ2luLXN0ZGVyci50eHRV
VAkAAy0pClMtKQpTdXgLAAEE9QEAAARQAAAA7Y4xDoMwDEV3TuELhASWVplh6NKeAQVTIpkksp0K
bl869AYdq7++r/dC3kqkSWNOgMyZPSyREFbV4q3t+kvrznX+6pyzgqFy1MPuImYY77dxMLuQmXOo
GyY1X+DB8RlTu28EFBNCD0j4IUD0IJQVUZvz6V/Icro95EQHdK2DBSetjAITI0gtJbPi3IR/6I9D
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
NioKU3V4CwABBPUBAAAEUAAAAFBLAwQKAAAAAACaSFdEAAAAAAAAAAAAAAAAKgAcAHJldHJpZXMv
d2ViZ2wvMS4wLjIvY29uZm9ybWFuY2UvZ2xzbC9taXNjL1VUCQADNCoKUzYqClN1eAsAAQT1AQAA
BFAAAABQSwMEFAACAAgAmkhXRAgIormZAAAAwgAAAFgAHAByZXRyaWVzL3dlYmdsLzEuMC4yL2Nv
bmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItdmFyeWluZy1wYWNraW5nLXJlc3RyaWN0aW9ucy1h
Y3R1YWwudHh0VVQJAAM0KgpTNCoKU3V4CwABBPUBAAAEUAAAACWNvQrDMBCDdz/FvUDtvVuWlkKG
QgIdg+Nc4qP+CXdOQ9++NgWBxAeSRk8CBaUAH6kmj/DC+d7D2FggKbjAjCGfQAlsAlrZRqxpAcY9
cxF4dsMAmeHWPXqtVGteQWvzF6Pkgx2KOXHewtTOppVCBS6nNXO0yaHZggQTSZwRbxfky8fyl9J2
2a17N687hckVykm0LzGo9qfUD1BLAwQUAAIACACaSFdEN/nAvwABAAAbAgAAVgAcAHJldHJpZXMv
d2ViZ2wvMS4wLjIvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3NoYWRlci12YXJ5aW5nLXBhY2tpbmct
cmVzdHJpY3Rpb25zLWRpZmYudHh0VVQJAAM0KgpTNCoKU3V4CwABBPUBAAAEUAAAAM2PQU4DMQxF
93MK74fEFIkNqykqIEQXiFZ0WaUZTyfCk1SJQ9vbkxS4ACsky/6yZL//lVKA74HzRAkXRgw+bFa4
od2Lk59xnx33+EZMJhGyOYcsSiiJipQyS8JIEl25P9JuzzjT1/oGbfBDiJPxlnDPiXFyyWIaTU9R
fZp4dn6vDsZ+1FkelQ9WXPBJ0elAVqjXcpKmbdv/5s9YyYYv7roO1OzqFtrauq6B9egSVDbE7Isa
CYrJpyWs645dKrlgRxyO4DwYD26IZqKieoh0CFESvM5XKwgRHufPS91Ac7m9A63xu4qZkKP9zbOt
uO3guCz+HEqPMnGjKrppK7hwvwBQSwMEFAACAAgAmkhXRDi680SZAAAAwgAAAFoAHAByZXRyaWVz
L3dlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItdmFyeWluZy1wYWNraW5n
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
4if5LKTCS76dz0eYk61MnSuSTebQ09qb3bPRFJ48gg4fZFlbkgFKTPDFOFmzdeIpebvMd/PldoDp
je0rIawvJketuhdtp6oi90ucZHc4jXMpSDyH6NIlyfYhP2BcaK4tWJO4K0XHH/sQGgAn1RU56Nb1
t+++0K+l76xV8cBl7/uWBNib/H4OhIu1HmziVoEbtkrTdZWxVIe0wfdtK3l8E927Jx5OcslJY65Q
Mp+c6PvSSUkqFQnW7a+3eZtjYv35xd/QgD1TSy/FG3nwqje5OtutttLGebmS6i6ZM+a++whYmlTG
suYBuYokSSJG/paXAuAwqY39Eky/3fVWl1Kl8qnny+7Lw9cPr+DghZqnus1wqtWKT3fXb6fbp/31
EEdenvOWHybnYT7cH3bPD/Mhmk3Y2VNvfiuUny3qIvW+THVym2Hfdu9Xf9yv769oMLUOlpwI0R4u
hQ/6Eh2H4+twIY1JtwdbVxkT2T6fD3DB5s45hnGuYCCbB8pgzJth+i+tcRRNpiPzg/xmnBBN2l2+
Pew/d02AOCKrFyjbI+5Ts25fSw+Gk2Q4m8o24hNNLFT8cvHdOkIK/2kebHYO31B9oKJNAnPrwtkZ
8XUE+yWGFlVGL8M2DpQLDQPceDSV/9ff/uPPP/vz9aeoNgLp8yxnH87eOr1enmKHLDCuKlvZpuN3
/vD3p4dlsbN7cppV4jcwSu6RR6ovFvqlYNgPCsYgXR7XWOZyCccizcvuw+Hp4Z9f/h7SuP/55fR3
sJUub2Wssk4ooH7nvDr8tPMdA8MFdu3pvjCSE4XsJ5Ci12+706ybH66fdl0RiOT5YDOvdZacb6qg
3z8kHf3xcn5NNl0PfC8MaoncZ2BY/1wdX1izhF1nWyMkdC0ghWBQIv0+aM+WV5GCZWClhD5DG37Z
f/DVsOkl5XY4fXt4PZ/OSxe+TmTMDyimvErhD4BY4jTzQn779nD79rZPWZQPH/c7X9uPZkf0Nc/I
mbvXw/FbOIFhlrP5ELA1PnzrV/FHZmVdRnq1Hg8vYR5+S58PPtqFJMtmGSV12yPBOMQ0jRCbBmNn
sQvYHxVSpcezms+1L1UFLMvzi51mjbxTdBmY2JT3ITdPjpraP5V9OB+9Zp1PpQ8s7cESHblO/HFn
KS05wrde5qsogDscwS66ajKGvkXGqsxA9+/7/T93D3+9nNdj5BMkL4cnX0zw9/frDfs9rsyeTebq
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
SFdEAAAAAAAAAAAAAAAAHQAcAHdlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL2dsc2wvVVQJAAPtKQpT
NioKU3V4CwABBPUBAAAEUAAAAFBLAwQKAAAAAAB1SFdEAAAAAAAAAAAAAAAAIgAcAHdlYmdsLzEu
MC4yL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9VVAkAA+4pClM2KgpTdXgLAAEE9QEAAARQAAAAUEsD
BBQAAgAIAHVIV0QICKK5mQAAAMIAAABQABwAd2ViZ2wvMS4wLjIvY29uZm9ybWFuY2UvZ2xzbC9t
aXNjL3NoYWRlci12YXJ5aW5nLXBhY2tpbmctcmVzdHJpY3Rpb25zLWFjdHVhbC50eHRVVAkAA+0p
ClPtKQpTdXgLAAEE9QEAAARQAAAAJY29CsMwEIN3P8W9QO29W5aWQoZCAh2D41zio/4Jd05D3742
BYHEB5JGTwIFpQAfqSaP8ML53sPYWCApuMCMIZ9ACWwCWtlGrGkBxj1zEXh2wwCZ4dY9eq1Ua15B
a/MXo+SDHYo5cd7C1M6mlUIFLqc1c7TJodmCBBNJnBFvF+TLx/KX0nbZrXs3rzuFyRXKSbQvMaj2
p9QPUEsDBBQAAgAIAHVIV0R8XSOu+wAAAAsCAABOABwAd2ViZ2wvMS4wLjIvY29uZm9ybWFuY2Uv
Z2xzbC9taXNjL3NoYWRlci12YXJ5aW5nLXBhY2tpbmctcmVzdHJpY3Rpb25zLWRpZmYudHh0VVQJ
AAPtKQpT7ikKU3V4CwABBPUBAAAEUAAAAM2PQU4DMQxF93MK74fEFIkNqykqIEQXiFZ0WaUZTyfC
k1SJQ9vbk5SegBWSZX9Zst//SinAz8B5ooQLIwafNivc0O7NyXU8Zsc9fhCTSYRsziGLEkqiIqXM
kvBIuz3jTN/qO7TBDyFOxlvCPSfGySWLaTQ9RfVt4tn5vToY+1VneSDRWXHBJ0WnA1mhXstJmrZt
/4svYyUbvrjqOlCzm3toa+u6BtajS1CZELMvaiQo5l6WsK47dqnkgR1xOILzYDy4IZqJiuoh0iFE
SfA+X60gRHievy51A83l9gG0xt8qZkKOlq55thW3HRyXxZ9D6VEmblRFN20FF+4PUEsDBBQAAgAI
AHVIV0Q4uvNEmQAAAMIAAABSABwAd2ViZ2wvMS4wLjIvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3No
YWRlci12YXJ5aW5nLXBhY2tpbmctcmVzdHJpY3Rpb25zLWV4cGVjdGVkLnR4dFVUCQAD7SkKU+0p
ClN1eAsAAQT1AQAABFAAAAAljb0KwzAQg3c/xb1A7b1blpZChkICHYPjXOKj/gl3TkPfvjYFgcQH
kkZPAgWlAB+pJo/wwvnew9hYICm4wIwhn0AJbAJa2UasaQHGPXMReHbDAJnh1j16rVRrXkFr8xej
5IMdijlx3sLUzqaVQgUupzVztMmh2YIEE0mcEW8X5MvH8pfSdtmtezevO4XJFcpJtC8xqPar1A9Q
SwMEFAACAAgAdUhXRJOBUDcACAAA1hoAAFYAHAB3ZWJnbC8xLjAuMi9jb25mb3JtYW5jZS9nbHNs
L21pc2Mvc2hhZGVyLXZhcnlpbmctcGFja2luZy1yZXN0cmljdGlvbnMtcHJldHR5LWRpZmYuaHRt
bFVUCQAD7ikKU+4pClN1eAsAAQT1AQAABFAAAAC9WWtz27gV/e5fwbFn65kdk5QsKbUkR53Ej7bT
tJOpM7sfMyAJiohBgguAlpS2/70XL4qkSEm73WmchCSe93HuPRfwfSZzurq4zzBK4JFjibw4Q1xg
+f66kql/dw3NQu4oXl0sKCleb7zFGxFE4sT714UHfyTeSj/BMeNIElYsvIIVeKm7IsYTzP2IScny
hTcut14C7zhZXvznwixnF4kZZXzhXY0mc90XPBOKH0ma2v4Ixa9rzqoi8d3Q9E79NDcyOwhGSeJd
JUli+lJWSD9FOaG7hZezgokSxVbAHPE1AZHHOPdGpqlkoJzWg2MKGr1hLVA27kg6mUx61heoEL7A
nKSNTkG+Y71Hc1Of4lQuvFEwc+0JESVFsIhEEcV+jCk1HRuSyAwWGI1+sDKiJCHFup5t5LPuUW9t
D1mRSZGBYLIenrE3zDtazWaz5ZDBMTamCJRfPsFewk5OKUOgCifrTLa9p0Y9gAkQKeqtGJifSFBz
dEJtq6Wv121ZapOBdr72o4LbhqNyL9kLjpX/BoGjJ7dh04WMxa2zO4BqVG7NDk/bElwM64Nq+MYL
1KOr4aB4giQ42qn/PS3qR8ri18+IywBUXaSEC+nHGaHJoGHVdi8w/+bYYhzn4NqbE/vZPZz5SQHw
wX6khrRgN3OoA7RIEiPqI0rWEB+S9ajFsUL7X1CRUOzMYddRJlTfGTYO3eM5rrhQrlFid6MQReCd
ynkM9qyBYwJIi3dMihbOD+Gw5ni37AAzmJ3ylzGxF0h20sxBylneMbbNkWoPZfV/VHmEOaAJN9Fl
Wp3gh6nUonY+byVBFy59qdBF8nQ67cTeoffrHKMWmpkQMGFQJ32LAwvPPogYcVtwmtiE1VBcq9ib
cAxRDJrlSJIquYpOJaY1oMsmFjVOkVaswiTfRKvuAnvqT9CDY/TqqwYjEMnRGrc8s/Bua4NHFCkr
qoExpAaQAUSxb15X771X7qbzwdyb4nSfABSsYMWaIhvR3DM1SZP2VHC2GB4+x/PlMV6vV7JZpimH
jYphyk6SgwW8BNPhGXh+UprwR++lKkvGJbAtt0gGo+Y5LqTwfgxhP1TJjBl7G0ZWBQ2gXgJOY+cp
PUGPGagB6jFKGASQ0INdOnvngK3SDaL0wUnQO/rWcFmOtn6H3nOoDWzT7ajmne7WYPej+9SRXYd0
a5s+OQNWYkOb/gZHr0T6kquwM5YwgnvBrVg21Jhapa+ERLISH6sIOLzmw0BFT684aopkjEaIt/vd
1inFOkL3HTn7XrfWyWli4tjWUurVVQvqfbgsHMocR8u5PSxSssVmHZuPR22VAqRrEBNmhyy+IZAL
eAdq9ZrffVIkeAtJ6ohqeyJsiNCnl01GLXq7s1msUGLagO2lJtgvYtuTgr7bCzo2IHYkZL60sPa9
ZjD7WQtcV2atrUnKUW4k7MRJu4xoxMjDQKY9tM0Oak22sVyPKRSOUDOfQUzv5s97eFlOHujUhmj3
1WVkclget4tju4Yx3yGGB0uCxOVZs80HlxTccWfU7P3iOLJzLnn3R5fQDsU8EiSNE4/Ikanlmzm3
YByalwNZxuqvSjDRt7nRw8X1qG8IRRGmC5RChN0cTDftehFNyAWoeun927tcXtRE3KDv7myKoEJn
qS93Je5d6nJQIjuwc8zNMNUJsi5GkSpGBzjqKsdCuMJj0M59bmlEx4tO1OdQIVAMFERvhFXioW6B
YvY7Lh4aZNnH867k6FJMk1xULgfUaiS43G6/LRJtEpk4DjxLGgsNqHGwVDHRogtb9g0UfU2ejSqI
qqKZdxy/J+RtkbLY2pBVUuWLZvhFtNJMYrsALynIAgw2doo0yVKvAjXMlwybnULLtGuQX+kgmSeh
LzKjLdSE90aQysny7xYTIGzE2QYcDpVAhmCuLYqIDFQRVOsxndkqvi5F7LfLDqqQVf9GbRJ11zrd
Gj8nCZyyjGLKQcIdvnsYBeowJtAb2B4sgDu80jzpHVCdPw4mpmTaX3449u/xwdXj42MjpK/unh+f
Z8+9+QmKy34UPz099Um9wHkJGarlfFumdUYG8AqStiL/aX43urN5K6YY8a+6PHBHAdWij02ZGnIf
2pu3exFzUoJPefz+MpOyFIswRN/QNlgztoZJJREKurotpCQS4bdfKsx34TiYBrf2I4DSMvgmLlew
rl5v5bVXjlmCfeVDvIFxfwJPK2e+n941poBQ9rIwYskOHhAPIDcS4v21OwmoO8NsvAp/An9Czgof
kUTh088v4c84+huR9vGxIjQJ/wm8iwQOASlgTl9iyLBwfK+oFCFkijUFFUagAgA/VdRRxDhcU0HD
nIg4FBlSHPiG+E4d7iCiX/WVEazCianBfChyKkQDuZUg+rgtcePC6PqwRx/kh9rVAd+D/TlOOkPU
6cZrXQzpS1QgWzdCXwns64zr1RjsC/2r1iiI/NNjgL2vV18youp/IT1eFULnC7Dxnz95X1QbJUIV
NkBCbAOJ0YPZtqwC+ocjjkoTwvv84eXFg0PS84e/fgrsVuBs0Ot/1u72DO1uh7X7fYWZnCHM5Iip
waILLwhC8xeQxioeYwvWr8oJX1OIA/HbERuoS/mu0vrRVL2RPZSJdPehgc6DsTmKn4RxY9xRE0/P
MPEfikiUyyNOTzBdfQaN4KHfAZ7265Rl2roBXZxWzA46qtURidkZ6hutoC5ZPd+H6qHfIdjs1//T
379X2pqdYY3Z+YH9a3TuPDQZQX7Xv876L1BLAQIeAxQAAgAIAJhIV0TYB+/gV8MAANG2CQAOABgA
AAAAAAEAAACkgQAAAABhY2Nlc3NfbG9nLnR4dFVUBQADMCoKU3V4CwABBPUBAAAEUAAAAFBLAQIe
AwoAAAAAACRHV0QAAAAAAAAAAAAAAAAMABgAAAAAAAAAEADtQZ/DAABjb21wb3NpdGluZy9VVAUA
A2MoClN1eAsAAQT1AQAABFAAAABQSwECHgMKAAAAAAAkR1dEAAAAAAAAAAAAAAAAEwAYAAAAAAAA
ABAA7UHlwwAAY29tcG9zaXRpbmcvdGlsaW5nL1VUBQADYygKU3V4CwABBPUBAAAEUAAAAFBLAQIe
AxQAAgAIACRHV0TIs946gwAAAJYAAAAuABgAAAAAAAEAAACkgTLEAABjb21wb3NpdGluZy90aWxp
bmcvY3Jhc2gtaHVnZS1sYXllci1zdGRlcnIudHh0VVQFAANjKApTdXgLAAEE9QEAAARQAAAAUEsB
Ah4DFAACAAgAmEhXRCcvhfqzEwAApTYBAA0AGAAAAAAAAQAAAKSBHcUAAGVycm9yX2xvZy50eHRV
VAUAAzAqClN1eAsAAQT1AQAABFAAAABQSwECHgMKAAAAAAB2R1dEAAAAAAAAAAAAAAAABQAYAAAA
AAAAABAA7UEX2QAAZmFzdC9VVAUAA/8oClN1eAsAAQT1AQAABFAAAABQSwECHgMKAAAAAABaR1dE
AAAAAAAAAAAAAAAADAAYAAAAAAAAABAA7UFW2QAAZmFzdC9pbWFnZXMvVVQFAAPMKApTdXgLAAEE
9QEAAARQAAAAUEsBAh4DFAACAAgAWkdXRCGPvTgyAAAAMwAAACwAGAAAAAAAAQAAAKSBnNkAAGZh
c3QvaW1hZ2VzL3BkZi1hcy1pbWFnZS1jcm9wLWJveC1zdGRlcnIudHh0VVQFAAPMKApTdXgLAAEE
9QEAAARQAAAAUEsBAh4DCgAAAAAAdkdXRAAAAAAAAAAAAAAAAAkAGAAAAAAAAAAQAO1BNNoAAGZh
c3QveHNsL1VUBQADACkKU3V4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIAHZHV0Ry/WXyhQAAAOkA
AAAlABgAAAAAAAEAAACkgXfaAABmYXN0L3hzbC90cmFuc2Zvcm0teGhyLWRvYy1zdGRlcnIudHh0
VVQFAAP/KApTdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAdkdXRIkfIf6XAAAAwAMAACcAGAAA
AAAAAQAAAKSBW9sAAGZhc3QveHNsL3hzbHQtYmFkLWltcG9ydC11cmktc3RkZXJyLnR4dFVUBQAD
/ygKU3V4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIAHZHV0SBSnetSwAAAKwAAAA0ABgAAAAAAAEA
AACkgVPcAABmYXN0L3hzbC94c2x0LXRyYW5zZm9ybS10by1mcmFnbWVudC1jcmFzaC1zdGRlcnIu
dHh0VVQFAAMAKQpTdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAm0hXRHMTmMAyAQAAwwEAABEA
GAAAAAAAAQAAAKSBDN0AAGZ1bGxfcmVzdWx0cy5qc29uVVQFAAM1KgpTdXgLAAEE9QEAAARQAAAA
UEsBAh4DCgAAAAAAakdXRAAAAAAAAAAAAAAAAAUAGAAAAAAAAAAQAO1Bid4AAGh0dHAvVVQFAAPn
KApTdXgLAAEE9QEAAARQAAAAUEsBAh4DCgAAAAAAD0hXRAAAAAAAAAAAAAAAAAsAGAAAAAAAAAAQ
AO1ByN4AAGh0dHAvdGVzdHMvVVQFAAMtKQpTdXgLAAEE9QEAAARQAAAAUEsBAh4DCgAAAAAAakdX
RAAAAAAAAAAAAAAAABAAGAAAAAAAAAAQAO1BDd8AAGh0dHAvdGVzdHMvbWlzYy9VVAUAA+coClN1
eAsAAQT1AQAABFAAAABQSwECHgMUAAIACABqR1dEFTU1knoAAAC8AAAAKgAYAAAAAAABAAAApIFX
3wAAaHR0cC90ZXN0cy9taXNjL3hzbHQtYmFkLWltcG9ydC1zdGRlcnIudHh0VVQFAAPnKApTdXgL
AAEE9QEAAARQAAAAUEsBAh4DCgAAAAAAGUhXRAAAAAAAAAAAAAAAABQAGAAAAAAAAAAQAO1BNeAA
AGh0dHAvdGVzdHMvc2VjdXJpdHkvVVQFAANCKQpTdXgLAAEE9QEAAARQAAAAUEsBAh4DCgAAAAAA
GUhXRAAAAAAAAAAAAAAAACoAGAAAAAAAAAAQAO1Bg+AAAGh0dHAvdGVzdHMvc2VjdXJpdHkvY29u
dGVudFNlY3VyaXR5UG9saWN5L1VUBQADQikKU3V4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIABlI
V0RjqqxsggAAAKgAAABAABgAAAAAAAEAAACkgefgAABodHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRl
bnRTZWN1cml0eVBvbGljeS94c2wtYWxsb3dlZC1zdGRlcnIudHh0VVQFAANCKQpTdXgLAAEE9QEA
AARQAAAAUEsBAh4DFAACAAgAGUhXRGOqrGyCAAAAqAAAAFIAGAAAAAAAAQAAAKSB4+EAAGh0dHAv
dGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L3hzbC11bmFmZmVjdGVkLWJ5LXN0
eWxlLXNyYy0yLXN0ZGVyci50eHRVVAUAA0IpClN1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACAAP
SFdEYEtmEJEAAAD7AQAARQAYAAAAAAABAAAApIHx4gAAaHR0cC90ZXN0cy9zZWN1cml0eS94c3Mt
REVOSUVELXhzbC1kb2N1bWVudC1zZWN1cml0eU9yaWdpbi1zdGRlcnIudHh0VVQFAAMtKQpTdXgL
AAEE9QEAAARQAAAAUEsBAh4DFAACAAgAG0dXROqKfEJhBQAABQ8AAAoAGAAAAAAAAQAAAKSBAeQA
AGh0dHBkLmNvbmZVVAUAA1YoClN1eAsAAQT1AQAABFAAAABQSwECHgMUAAIACABLSFdEjkzimyUC
AADTCQAAKwAYAAAAAAABAAAApIGm6QAAcHl3ZWJzb2NrZXQud3MubG9nLTIzRmViMjAxNC0wODU2
NTYtZXJyLnR4dFVUBQADnSkKU3V4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIAEtIV0SYdUtrCQEA
AI8CAAArABgAAAAAAAEAAACkgTDsAABweXdlYnNvY2tldC53cy5sb2ctMjNGZWIyMDE0LTA4NTY1
Ni1vdXQudHh0VVQFAAOdKQpTdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAm0hXRGfPCNF+JgAA
I6QAAAwAGAAAAAAAAQAAAKSBnu0AAHJlc3VsdHMuaHRtbFVUBQADNSoKU3V4CwABBPUBAAAEUAAA
AFBLAQIeAwoAAAAAAJpIV0QAAAAAAAAAAAAAAAAIABgAAAAAAAAAEADtQWIUAQByZXRyaWVzL1VU
BQADNCoKU3V4CwABBPUBAAAEUAAAAFBLAQIeAwoAAAAAAJpIV0QAAAAAAAAAAAAAAAAOABgAAAAA
AAAAEADtQaQUAQByZXRyaWVzL3dlYmdsL1VUBQADNCoKU3V4CwABBPUBAAAEUAAAAFBLAQIeAwoA
AAAAAJpIV0QAAAAAAAAAAAAAAAAUABgAAAAAAAAAEADtQewUAQByZXRyaWVzL3dlYmdsLzEuMC4y
L1VUBQADNCoKU3V4CwABBPUBAAAEUAAAAFBLAQIeAwoAAAAAAJpIV0QAAAAAAAAAAAAAAAAgABgA
AAAAAAAAEADtQToVAQByZXRyaWVzL3dlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL1VUBQADNCoKU3V4
CwABBPUBAAAEUAAAAFBLAQIeAwoAAAAAAJpIV0QAAAAAAAAAAAAAAAAlABgAAAAAAAAAEADtQZQV
AQByZXRyaWVzL3dlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL2dsc2wvVVQFAAM0KgpTdXgLAAEE9QEA
AARQAAAAUEsBAh4DCgAAAAAAmkhXRAAAAAAAAAAAAAAAACoAGAAAAAAAAAAQAO1B8xUBAHJldHJp
ZXMvd2ViZ2wvMS4wLjIvY29uZm9ybWFuY2UvZ2xzbC9taXNjL1VUBQADNCoKU3V4CwABBPUBAAAE
UAAAAFBLAQIeAxQAAgAIAJpIV0QICKK5mQAAAMIAAABYABgAAAAAAAEAAACkgVcWAQByZXRyaWVz
L3dlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItdmFyeWluZy1wYWNraW5n
LXJlc3RyaWN0aW9ucy1hY3R1YWwudHh0VVQFAAM0KgpTdXgLAAEE9QEAAARQAAAAUEsBAh4DFAAC
AAgAmkhXRDf5wL8AAQAAGwIAAFYAGAAAAAAAAQAAAKSBghcBAHJldHJpZXMvd2ViZ2wvMS4wLjIv
Y29uZm9ybWFuY2UvZ2xzbC9taXNjL3NoYWRlci12YXJ5aW5nLXBhY2tpbmctcmVzdHJpY3Rpb25z
LWRpZmYudHh0VVQFAAM0KgpTdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAmkhXRDi680SZAAAA
wgAAAFoAGAAAAAAAAQAAAKSBEhkBAHJldHJpZXMvd2ViZ2wvMS4wLjIvY29uZm9ybWFuY2UvZ2xz
bC9taXNjL3NoYWRlci12YXJ5aW5nLXBhY2tpbmctcmVzdHJpY3Rpb25zLWV4cGVjdGVkLnR4dFVU
BQADNCoKU3V4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIAJpIV0QejL2BBAgAAN4aAABeABgAAAAA
AAEAAACkgT8aAQByZXRyaWVzL3dlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFk
ZXItdmFyeWluZy1wYWNraW5nLXJlc3RyaWN0aW9ucy1wcmV0dHktZGlmZi5odG1sVVQFAAM0KgpT
dXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAm0hXRJkdKmipUwYArWwjAAoAGAAAAAAAAQAAAKSB
2yIBAHN0YXRzLmpzb25VVAUAAzUqClN1eAsAAQT1AQAABFAAAABQSwECHgMKAAAAAABVSFdEAAAA
AAAAAAAAAAAABAAYAAAAAAAAABAA7UHIdgcAc3ZnL1VUBQADsikKU3V4CwABBPUBAAAEUAAAAFBL
AQIeAwoAAAAAAFVIV0QAAAAAAAAAAAAAAAALABgAAAAAAAAAEADtQQZ3BwBzdmcvc3Ryb2tlL1VU
BQADsikKU3V4CwABBPUBAAAEUAAAAFBLAQIeAxQAAgAIAFVIV0T8+tuUgwAAAJQAAAAlABgAAAAA
AAEAAACkgUt3BwBzdmcvc3Ryb2tlL3plcm8td2lkdGgtaGFuZy1zdGRlcnIudHh0VVQFAAOyKQpT
dXgLAAEE9QEAAARQAAAAUEsBAh4DCgAAAAAAdUhXRAAAAAAAAAAAAAAAAAYAGAAAAAAAAAAQAO1B
LXgHAHdlYmdsL1VUBQAD7SkKU3V4CwABBPUBAAAEUAAAAFBLAQIeAwoAAAAAAHVIV0QAAAAAAAAA
AAAAAAAMABgAAAAAAAAAEADtQW14BwB3ZWJnbC8xLjAuMi9VVAUAA+0pClN1eAsAAQT1AQAABFAA
AABQSwECHgMKAAAAAAB1SFdEAAAAAAAAAAAAAAAAGAAYAAAAAAAAABAA7UGzeAcAd2ViZ2wvMS4w
LjIvY29uZm9ybWFuY2UvVVQFAAPtKQpTdXgLAAEE9QEAAARQAAAAUEsBAh4DCgAAAAAAdUhXRAAA
AAAAAAAAAAAAAB0AGAAAAAAAAAAQAO1BBXkHAHdlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL2dsc2wv
VVQFAAPtKQpTdXgLAAEE9QEAAARQAAAAUEsBAh4DCgAAAAAAdUhXRAAAAAAAAAAAAAAAACIAGAAA
AAAAAAAQAO1BXHkHAHdlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9VVAUAA+4pClN1
eAsAAQT1AQAABFAAAABQSwECHgMUAAIACAB1SFdECAiiuZkAAADCAAAAUAAYAAAAAAABAAAApIG4
eQcAd2ViZ2wvMS4wLjIvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3NoYWRlci12YXJ5aW5nLXBhY2tp
bmctcmVzdHJpY3Rpb25zLWFjdHVhbC50eHRVVAUAA+0pClN1eAsAAQT1AQAABFAAAABQSwECHgMU
AAIACAB1SFdEfF0jrvsAAAALAgAATgAYAAAAAAABAAAApIHbegcAd2ViZ2wvMS4wLjIvY29uZm9y
bWFuY2UvZ2xzbC9taXNjL3NoYWRlci12YXJ5aW5nLXBhY2tpbmctcmVzdHJpY3Rpb25zLWRpZmYu
dHh0VVQFAAPtKQpTdXgLAAEE9QEAAARQAAAAUEsBAh4DFAACAAgAdUhXRDi680SZAAAAwgAAAFIA
GAAAAAAAAQAAAKSBXnwHAHdlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXIt
dmFyeWluZy1wYWNraW5nLXJlc3RyaWN0aW9ucy1leHBlY3RlZC50eHRVVAUAA+0pClN1eAsAAQT1
AQAABFAAAABQSwECHgMUAAIACAB1SFdEk4FQNwAIAADWGgAAVgAYAAAAAAABAAAApIGDfQcAd2Vi
Z2wvMS4wLjIvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3NoYWRlci12YXJ5aW5nLXBhY2tpbmctcmVz
dHJpY3Rpb25zLXByZXR0eS1kaWZmLmh0bWxVVAUAA+4pClN1eAsAAQT1AQAABFAAAABQSwUGAAAA
ADEAMQBcFAAAE4YHAAAA
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>225007</attachid>
            <date>2014-02-23 10:04:49 -0800</date>
            <delta_ts>2014-02-23 10:04:49 -0800</delta_ts>
            <desc>Archive of layout-test-results from webkit-ews-09 for mac-mountainlion-wk2</desc>
            <filename>layout-test-results.zip</filename>
            <type>application/zip</type>
            <size>467727</size>
            <attacher name="Build Bot">buildbot</attacher>
            
              <data encoding="base64">UEsDBBQAAgAIABdNV0TcrTCGHKcAAOBBCAAOABwAYWNjZXNzX2xvZy50eHRVVAkAA54yClM7MQpT
dXgLAAEE9QEAAAQUAAAA7F1tj9s4kv5+vyI4IP0p6pao9wGMYCaz2Z3D4W6xm/t0OASyRNtMZElD
St3t/fXHF9ltW5RMS5RbnWgySLttR09VsVgsFotVFvDvTfrHemfQP/8L7IfPcPkATMv5xQx/sZ1f
XOedYQam+X/v/v2vf/ny7iGO4g0UfyfGNkKZgSHJKxzD+025Td/97cuXvz9Y99a/vwOm+c537X+z
+kHsH0vE79EyhQZa4WgL74tNcYZj9EWJoyyGqZFUGGVrYxWhtMLQiHFENjJ+HB/oQcLwMUpREpUo
zwxSxTGECUxkkIHvDxchKXcpJBsIS9t0xpPfhLii7wzmalulJSqo3hU5KY3nDSYyVmy3NytxnpUw
K41yV1DlXmc5ppNKIksZrGWagWYRGssoMY5pkmiK41wP+o0YJaQSfIHdv1NgeP+NnEEAAAJfKwod
PgmMZf8k49ZzLlwxbPoRGkM2aEIniBRptDPQNlpDo8oILI0oTfMnYtRLmfgkzSOpubKsUIO94hiW
/PnW9Y/fIhIfL5P5togIuf9WrM8tVOBZnibygTbyxeM3iJQ53hl5lu72Y0Gq5R6Vj4jc7HqeNZyn
LDcYPuz2YoA7HAlHWZJv7+M1Ol8K3RHYMFY5foqwVJlnuXXILYPPpVTFg2CSvAiX2GCrQKvX6oUa
RCWANLuPlx8/yOwz40HtyQrnW2FbjGhVQkxHm31iPKFyQzcw9a5CNuggUJkrbjdr11DBbF8rOQ4Y
ToxQwdrSSjRRaZ1zX1HY3vXYcjTnjaBlsHzK8XcDYpxjZS/TcdzrAY8MYw1KEN0ERdREsmn5kboY
W6o/C+prZjAue1gB74I9vsSr0ao+oaOf3yIqN4sOP+uO+5BcByihC6un39VzFKhTOw/ExYGwTf+d
bc8kzSTNJM0kzSTNJM0kzSTNJN2apJH2DkWES8QcUrohE3ux9h1maDnDPeOTDfQeTLKPtkbh6CP1
wCu48F3bsR3PD+zA/DGYlIZ4Q3c4K01x8u07lu6abdsaovmdx1qWZwGVeeUfnv73//7nyeOfMCoh
RdgWxgql/JTnI3uR0dFZNPkkZVTCO7pdixZpHkfpJidlI0J7FUGKAobxJhfoklghCMaAHDym/psb
0xfUNzym/GQdwwRhuiYYa1hKnu67ngaOGJA45Ctz4xFitNpJsFRDNucDqsaNbQKllU5dVFRXMkQ2
ixJX8IwVVymU26r39BUsWxWTHc+W2z7nAO28sQix5AiQyFTCGzhI12ANsx9lXsWbK+UIguDtDF0d
349TGLE0CBEKpwaEsJChyKShby93xjcit8+uPXx619bx4HFSX+VjlaE/K/hHsrDuPvGPWYoEztPF
/tTvA33B/+GHAqNHato+bCs+x+owJ/09ejaoyVicO1kgVCA5GEAymBDJNxrhYB7h1yOZD/BpOqcs
9ysYLhQZ1rDETq2AOlT1RixSdSkKOvEunQXSTeL1EONv5y9NHhGtMPbTYUBeU3Apl64pRzZuVSrN
BLF9Z3TuVLMe5HpxlD7FMppz6u0yp7ceSHkCl29eBXfsUB1J8gJyM4Jgm64GXL452RtQCYozOYy2
4cLResuyOFFC/0YrJN/TAhOY401pusvDLzmZ9AVdsOgKlObr4bNclQYK1qDgjkc1l+uv9Cf1QDKJ
RRiRIrrhUpGJ5Y5oa5kDNtLANHXxkP2OMqoRGdscSfPibPPGzt0g/yecNCHPIq3CyAu2CBGW1idN
6DOd4ayeYUk8E6WsxEEoquucXFgbbCzzZCdVS9fXoA386f08tvDCctLyaBsMkcZjhHfGBraGQn2l
uXppRE+BOjMWbaU4zZWA9JOCqpI0EGndFs58I9z9C+LcSGG2LjfsHpN8lx5oMCpwW5S7+/K5HDRl
6kdnjxF5KDYoRcUDi8FTBxPGFUYUIcHR0x8smnsvviZX99DRAtuM+/teGOp5dEyaZwq2NfTZPNBN
jUwUf1/jvMqS+yI7dhIcandtx9cEs4PsNPkMgp8PuqMNO4eWOyRKUYprUPf+Zq1qK5Sm/2T3r+Su
eWiPC0+o7/EddhDgjExAibYoW0tlH3pgLGwM2dmTNNXZDEcDzYnctITmWIwKxe7UMari/qjoF1TM
CgJLMz4/spA7cqC/EXmCy3X6kGO0RhkPX2fMd1/leMv2M/IrS31sFj9eP1oFoyWUWEMLAKeH1hwd
JVGZ3W8L51oH2v2FrcAn8snz74g+Mckrdq/+zyovYWLw3BJxNEbgFlFZpS0Rxcv3/doxj4Ng/B1x
vs5vtEqXw0A7lvQs3zbdEZCkV4+tywlWTSSdKQkqfNAJ+Um8KYl2GToQ1qMj8IiJVgyNt8vbGdiU
ZcFO+A3xhsGOc6kFkx+veZY/5cGgYmKcRFnC2eCsicu+/AvyaLRjTnP0X2OWjMfFIcJXvyFfEK3Z
mMw8/NhG/UfDIC9LBz/KFDljsuntOoEmtZIBssMLUsLiLMEcaNPlTlDwGqD2eQhkgHwJ2h5ZZwM+
FxRMXk7JdWfr8CMt+m9ZTmdqW5+SSZ0LC8zDMavtVNQ2W5/FQuSxj9nUjj4W5QbhhKWYlvt9Iiuu
ET23xJ2BQnkNFYZ4FHLPUGNL7/kao15GVaKUR16p5/BnBfFuVWUxOyNfJDCFJazJaASedZDQId6u
Ai22nkjDzyLlt0ACHYnPeS5IaET5fy4h/Jolv+3N2bl98Wd9+In0YR6HeVKMSgJh+V+YZfu8lB1t
cW18EPQDOF5vD3mia4bSWHKDPkdst88m7k9DRzYxHwbQJ5W4PzmqqcRgPBL0pRLLtY9nThirKIEd
VfHcXibkRLcHnLRPjfC+R/kz0TPRF4imJF9caCw7/HlXgUOe5I1XgnaSUrSvVzAZkvYV5idMlT3J
hdxXyWawJrCQW122g0dEE4NsoqIlPKS05rbyye/M8jSRMkpTziQvWED+rCIMLdNkBvGOf/hruTDF
q885bpRdtUColD8C2rgtclySl1Ib8S5uyYMMLe0wzQS4y2n5TZBj5//ohLLC6eL+/joSVE9OL7BJ
oQ+3G+UhXF8ziCSV0PTHFmUHBQMEuaI2jjoddH4THHct4sAEPVXyqCIRXHK82pRwbrd5Apm1+0w/
uDuUEqm/+Q/xxU90/Sz7XP3olnlHKZPR8NUFcox9rWB6jlSKsu8G07kEEdYV6zRvl5X1qxXE4P1h
WOIgr+Iszx10hkqniVivTyk1zWsMYXaeZztYQ3tLoJks6wYjCeAAen7rxvVvMuzya6PeqKNNDeTV
N2E1j/Uth3gEHd9G5PvlrZo3zCW44U4N6Pb2mYD6bj3AuNE6czwStDr5ErXLl9+Y+7dCpZHANNrx
flhU0x9bIgXuYDtSw3xCOE7Pr7qKy4m2blZY/hz9CLY06LAGm6pYMEOhzpmxe8trlUJ+BmGoWQbf
dGfLMFsGfZaB7vZZybeXdoPGtipFhaSC7oXyjJS4kqcWO95wb6MVvbnOO26oCU+ycwSepVt+cpGp
OId2E+YR4hLFUWpEKVpnxjIikDpO+75EL2bDAH27GzZxL0du6P5Y/L+KSHkm6iX6Dsn9clvcbdEW
ftkVcMHJfM/ekgR5GjVWLN+ynbGl1b1mmK4zi00iNrtvC6yfU1qzkvUQm1zFzHCWlUTFZgUTVCf5
U8bofaCiQrERkRghaRjVHfLwIz6PYPpUD+oASREdYzr0VbkyAmnpJeBq4eEUSA8X8BFmpQA4fs37
WDONEE2sZcn3JhiGdjw2x1h0oBr1ABx9jJ00DI+pT9hS7QLYgaWLwX0hKTm42ETwD/j8K+FzKR5E
JzKG0fa9/dt7YNZff2///j9fPhvB1dXKXonYJ5QlrLm3BVzrrdDMJ9hbIfY9AFwh6M+pkmys8nwZ
YUq5ZgpPJzYmBjfz8umsFClTkgYkx2CC+yorG6ffIBwbEdwc0X51RKVqHtfoDKskDPFjW88aC2jH
y3jtDWlfLFM3mmivgSGvYhylRD45fF/3MB5D3nKKyHHBK+Har4TrTARX52SF+Uo+Q32dzDEUSS8C
f3yIYHyIUONo8Nf1BjdOc9JSP8g1tbF15FFIe1Np1DXWUqXmcY8otZuW+xa548cFrFfEvp14Fj2i
dVTSJQNHZCONhweePmeyRpf1NdGG8hQh6qZuYEbX2xKtdkaSZ7JKvp7KCDpXyrUlIUxlCN2biHAw
itJJmqsqthLv+CEWIi3HMQrlslW5Ejg1qizaoOTwKbLG2vRVbMVM6oaBcv/LcYEu9o4QSV0L5/DG
goH1WKB1AJ96BmoXKHTguie47s1wTz1OcCNc2zyt72RpxBW1ZE7WKdnssW/EaJ+aUm+SUfuEUfvH
ZdQ/6339gzLqnNhCZ7gtPF5wWNZ7VJYYLSt5jW53qH8AnxHhMUDJOsfTbOu6Je2+pOsDfS6KyLKR
EtWaa20r3eQeMtJng2yMbv4XjmXeFtA9MUyDAVlUTIdqebpVq5WwVvUCjjb1SnJIvtINzFdOQSMz
cyAOy2aDmJx6rNxWym8ouHrgGoZZfCCp3Kx0hea1lwB21yQq0MMyzZfc/qKssxOPp3Sc6clBjk5N
JXBGK6jj98cUDR+MA+AK51uDNT5nv8kTGewBcKwND4FZYrDuAAJnf53HgCSmX2krPaaUGujJGgYw
KIZ0UhbuhASW5ilLdrSt4LrhFE2onrcpOwOojcwRrKgEzdJ7eXds1utQtsk3XwET3B7TDn8OTKWi
serzhWVT8CPajDXYSNG/WvNcgRn4ryBi9xXUN/w5MIM+prdKUxKz21NHL2EKeQPUBK1WELNXon2L
VI0spVsiXlvqWpGjjB0kUGv8/eQX0dhhE+EMEiLrFAJCbbgoyyDuqroIHH1YtSPbsqoEnq15FAlv
/dgxgNYsyD3UBrHWwjvetG1/RJLzbDyD7qzXa8guEix3Bvtc7v8MQT1OjGvgszybCGUtyQpuOJDZ
MhdNVCQBf7UcgXNj1vb0j9bIzwdTp/9E+KKYUd0eC8MiZRUG6g+N+iJdvEGpvOS86erQNhkNREpE
x9R27XGlID0cCqyb8d/OuTNk8u1R6oNY3nGY8DttdOnF8tnuKW3/L7O9gVS1O4HMAUBFXvCDL7qH
o5giHamg3iqzabWLI+/rZ9uDRrWuo0IfxXij0BvDpCKl9jMh90UzZOPpkOUBtozwWp5XHHquZrbA
ULaCC2C2afXsKNz18IbMNjAtqAIW6cfmKVZoa4UaOjyXJQZuLbHz47BhEjvwYd+aj/PTLk18+Lfm
4/wwSwsf34iR5HHFHXoWuOK3f1/MmoxFpat+vXBBN66Ci2+ZfXCXcJXj9qtnIAj1IPNwCqmWW1R2
y9hRCVO3I3ZZp499zNO1zIFu5lQGElyHeGEIbS/Ug6k4R1SuIVwF1z01VKJflnMFXEQIu3V4gclg
HFQw2PxY3vWoF42Apxn3IqCpGXBD/btLQ+qPgXlhQFX4DK/FvChdVzPqfnd5QcDhSLAXZKxgj4DV
A/aimH0NwFtYRpI9lzQPw9ONB4bj2W14IiLAN7M8AF/mvJ+u1NV3XesqqNNo07FTcIRKB+8pwomI
O0pyxINgCHv9IH39EpXPCV+/POMKs3MNGV8h0C7KLjTrejR+TZ88fCvgmvePQlHaOrE90+4NUGSn
z2f35aK02ETyHBGF5QE4SkC9q2R2PR/nazo8BD1CvRjXVmGoaTrK9EExrzN/XocBfD6utezYphm0
11t2A0+lJw3wzwSUxZifErFMCJFHQndd5NJy4VjeMCxezLEqV4HBrgw3w1dWYKqkdICwHaKIKgJ5
ikyMUVEa9XFYE8txPWcY1As3MSHy1Et/GMJZGcwDViEpv6JyYcI2VbhhnMhCi0DFqHRCFCliQZNn
g10kLFkPukKym7dslatxTSDCKq3kmM35Mo/z9CGKqeiIUX8Ck44jBaB030kB8/jeiXiLn2hLTrJ9
lfODqxD50XnR0vDVC0blT97WwtWM+cf+wy9SmYahq2cU9wVn68PmQ0wqyxP5WZDp2ppZ5fOxc0Qd
AK7HrDl7sE2/vstpm3b9ip91SnMJrwMSvtge6fgcX7h8DLGOeZ36Roq3Hdp4ekHiCAzIbwPydQH5
wpPNq7KoSjmamAwDBosVzBElCzoTTYGKW9mO0VJJw+ozp/ZPFf3bEmPDZMSPWeu0Y+41sU/FNVTq
37QmV1i+p2OoSEYnFNnkkBiPxCiQtHuVY/ZaCBTQjDgvdiNAviEJK/ZR0iTcgWhwW5S7zulmBUH/
x7PT8fqOg8hRF3hUGWrPVW6IHR3iYyD8XF5gLvNkd9ZD2hkmuwZztTNOd5LHBYWkPrNljcRiA10r
y3y2fYseo5pVsaJuo2xnPG+wfHvgmjpY/RfEuZHCbF1u+rXguA6i4XQNEto+JhyRTd3Vrb3nj6tS
lKMNKqOeFEy+0pX0q9gFEFmasm3qRvgoXuuTmW4YSw5Tpx8+sv46W5ggtobUMVfJXtpUOv5twyrq
kY8KlihEjUWUyaod+irRebu1yRV3qGvbWqQfeYn6hWU2bsirCA1cmjF7lsTer1EZ3bJVGpO1wewf
znpztG6+TKW14iIjS7T+uv1TVpf7+qePMxb2RW9hS32f/kzY3YPAWhy0DoKncs/DtvsVoBcNmg7+
Hi/INIb8+BJ6avdFa4VgPN542CjiVTuO2RP9Bkabb56GZgTD6LyeyMO6sL+2GlH/xmqMlaMj3ZFP
Wx6mbuynleoxtNG+l8pxsx/ZCmCrHLrbvoKAQB8BtT15f8hgrFCGyIZuxrp2W0AlCa0N6nAIyp1b
6tEeXKjWK9JKZ+nteI1spRbkfgrRCrvNH2GdfF5fwSCiSBeWx9/AEMUgVbzhPe5OV4jBilFfQu7c
RLoDVJrPFyYV3hyr6wqyknt2lhW4RSQ+UgD6HLmjEV7/6AMD/KC0TrUnMK4wors1+BzDou0Co2W7
AwDZudNpUVuuzkuURZgB0/dJK3Bo9gc+9qgY1u9RGd0TVD43NDn0VGBCOUyVHWwQt6j7ayxxFLP3
WCj5YJzkafhKJ/xt8EcLHUOSdIqrlvvvyBMBLS28b6PjSFgfIQTX03HcQpzkaVWK6iyE2q/CeNog
uuYXEeW7sYNWKQZ2DrafLCctdPKnf7BrHRD/MWCNvgzE2+4B13x2TUlAM/TdIbK7XSOsvjS0N8Kq
dzS9QiTaiaFLNN+4S7Y9r0IPJ0bE46ZFEsvamBRB4iLvFGky6PuYRcX5yfq0KFziCKXM25qU9Paz
0AATnIdTI4rOxKmRVOs9mP5snBqNp/NxOtTVBzRgIsu0CKf0ap451sgVGGXlhBV+RRVrYoarwlE6
yek3KaLYQV+WbGCaTEtWBc6/iWa/06KrnJqrXD5ObeAQC+ZO3FbdmkDF5siOb45Hg87uyD9msGDe
n8/783l/Pu/P5/35vD+f9+cTDaLPu/N5dz7vzufd+bw7n3fnN96du8Hb2J07pqzAPs/6YAnKRcQ2
IidXLXjOg6kjy+TAQbmJSmPNLgTxZI+nDWKeTUltbEc+oQWAQqqCY43FnwNGe7ItfXK5SyHZQKqA
CWSp9uxifDMbJez7/PMao0d4WV7ygYCJTkAtonJGe7J7diP27CYsqxnxCDHrVbnZLTFKGM5HVMIt
WbCq/r/8agHbcT3/vf/p+rx1negf+Bu/8TdmYiY7Lh+mSN2n+o0gNK3JC+xHIfnDW9SUsXmc0lNe
Qd6CFvNXTjT9+QokRMs4ge/N31frDfpGf76G1v326fe/UGgqgM9//dsf/yFevtpwuL/913++d38X
Y1L/chfnGf2n5dcMPqUog6RR9ul2Y1WTJAZsUvSJgaxJEkP5Ruj7cGH8P0ydvzt+sLqw78SV8IUF
JrV8TJy8kVaUmmvrwLZjzmz/6Gy7e67tn0nH/T3X4c+k4cHBnvka2L6m6dyhHaesZoahE/ylz10z
5GJdGXMRdxhZzFf8fajiJi+BZHo9n268kP+IEpi31PsLTaU41wUE8Tu/q9pAsJT6IskldM6DCOBV
BOJoXdewFVVNOXPbwrljlycX/MsP9NdzUkIQqFw5vQEx3pXTYzw6JiUUz/JVqvo5noyWIlmJenSJ
ERGD/iafUlZvgHoibXBelml9l5UbYs7hacXLe4p/t//qImT/CdajokiRuKPOKG7UYFbp4zuTN4g8
X67JotoPr5BF30hzeXtnS6XerByiWwL392dFU8V02QvBapShsQBQKX08KVpCueh5XQVxPLY/GJO2
LDenwq7j20qqFirW5z4mRfwv6K6LArwQdajLfTChh6rcrFJRg9LQNL23QWhog6CvBvECCi+2n9fx
lvtTfl+Iq8xX+VxKzRcj7KFII5Sdn6s7SmZlpuxqylyznTJWiptVY8/ivM3mWKZKufRrQNr473SO
HFYG6cegY1nxRt6JgaOMlbwQrYTJvjHFF9RSksZSWWC6gDusf6sle4oeX5TSNe+ygu50a1ekSlD+
QL9w7lCbKr3K3g6hVjuhcZTFsL1NhuWp9BjrApBI4sCkQ5lsXbz7uSdTIgW0kyJq2EbLHMu7Bpgq
7c66AHTxagMv9LSTouKyAdfrKXf7/9l70ybHbWRt9K+c86G6jxd2keDuExUd7sUznuPtuj3LmTfe
mKBESKKbImWSqmVu3P9+AZBamSBTJEiplpl2laSq4pOZSACJRC6Pg5ZSB0IeW8ajmEQJObCTLKZm
0DhMe7qBqSlkH4U+HfG4XNF5rRqa8dQfuz8iZVHCdc5j5cBG5JgSmLa0cxAwl5FFy1uJLu4iuMKW
510IyS1LGsptd/IzsS64kx+MdKc1jRszvB+2/arAocP0GBlk6OwWqsVxc9M9SrTn45cY4CKJaS1v
ew14pfcIPkCgTikNDy+DwtdZLOmSYHd9/NEhX6AN4MYeDhw9cQajADvDGoZ3U8IUrCBqKxjcXUfn
tKwDzEseTgNRy5KGb5bpbYfJ14I5Fs5F8qZoXqBwTMPSVSgJCszwiO9hVrMGbxDGS4c6NPT3OB0Y
rBiPE/Fs3z99ZxrWmbrrw2idfgl+FinqFsYNew7S0BsKmjZheMjsDgOnTqeDaTzLimb123i1zOEE
b+l6y7088jj8COna3YRDw28Zlzgcjm+3F3t2vtH1S4iSGIkO3MIwEjEooxOiJc+DOU9VnGZpnmth
KgpSlx/TqidWGOWroJiCNfsZoqccNpd5MdrPNU1Ye5YNhMpsRhrdwtW+/S7Kzzbo6z/WKe95N13w
jgAF2CrC7/ho3h8i5B3Ql2lId26/0hW0S2gUpc3FZajY3YSpwfMFG0vI25bXkaq9Kt+chmN4LoHr
WZoCmcwmGVUQMNv6cGwPwy7nMq+xWekbdrCVcr2n67KRtoZnHWS0s8zbGB2TwbLgUmt7QstUySsA
Wg98HZTtsiEG02Wu01FyG8RRKOfedJVPZBBb4divVyuaTXkrKf5Wypqp95+tEBRQdcDtJMR8ev3u
5x+19JZmGbNWGrqEmrbVEWDHygGUWe/4Z3pqIYhCiP0H1x/b3upW8tgPP//4vpyoP4hCBqUZBzeG
9Tu0dlfdbqvORhLcRvMyovMIZNuTZduMj9j6yQ3kJYL79Lc/fZdyg5c/eHOAgu432pu/tCoVhMVO
5/ntvNZzhXQEC6ZRSLRVdE/hawJL9zvY07xhbRhlvKvxOg5395rXtTtNtw/dMMWIxuHnoHg3rIuA
+0vTJKnqQAEGfw+pmPAktoiHEYvRSLl4/rWsqirxPKUI9f6/BspgwSOA925qIeothQjKS4JBmLHF
4U1RzGrnbctTBZEzMyDN2CHhiBE+F4hpEMUwE6invDJ57Qb9rWH6puE6vmM4hjmwCtxDLbkUIdxz
bt7U8iWJrWpgbucA/aZnK6XfrNHvKn1+LaWcEJVTsL4hIy5gGQAZfqEyoV0if0im4pgS8gZrDca3
7TkdMY5MshKyAqofCglmhltSVqomKGU+CBxNYXhdIXac7MwwUX9t0+j51TKf35ivwjShtdoFDhkI
lQhUUtOJgeBMAWd0gXNbhg104vpOxyfjRuuXbz99kgwYZt5CrUUnQbjzqMVRIGnFiDIfm1uX1pFE
McTykxvPs/1/Gae3Ne0JO0vTSZCNDvv9p59hhg17BDlr48uZw35pnEPO/yI6IV+LgoL05vfg61ua
cWfxTS3HzTYHJmZdzP7l1UQwxsS6Yg87y5B/c54h59DjTy2GrHmeBs0vwx8F+xxcM61m6jW+XsdB
ESWApI0R1NpQxm3VDbk0KeC910GdVptZOoRp7oXuW515SW55JYKgKGiWaLMsXWpRMmXmLU2KIK6c
qJDP0VRSh5hb7H0ctc0iFE8WfbQhL7ljICw/A/J9cb3aZikyeWmLKAxpstXAWURjceIJ1jFodHqW
fxJ0Wf3lWEEwVEA3QqY5KN/iiupdNLfBBHmMu2AwzjFn/b6cf/zre+0vv8C8n3PUTwTvxDvf0rjt
JhOAeVa1t4YXwKdFNCv+9ZfvP8Hsn1P3McEGfdmvErgbYh4czI3JYDKwRlAB3qZgSYtFCnqHHKPr
4tuB/bf/qj76181ff/tOOzb4TMMbXhxpQiuCIGl43jlXRGXslwEZdeZvg3gNmk+Oa56RcUfNUsBZ
TNdHjIO+Xf+sC5/Rg1v+5DyJeD0IBh6Wr2WFOIhjKJncUlAgKEY3UCsKdMEwTVcPIoIhvqU5z96T
HGaIYoC3qyAvqDqY/RShpeg7Ue87hjX3QTayIF9oZX3HmK1mwTKKHzR+HTML4GRhy7M6Y9GgoB9j
cQD7iZeOXDEMA7gY8zBnzGOMnE7XWVQ81IKPxdlS7N9cfLVOI4ZrKGWIvLnvluTKUAgaBY5PMD2/
KwoPuStNnCB5kIbEuZg4MqP5Rm4XbghMet/qwUBGeVOwLQN8Jc2LLGIf8WhH8LTq+hfKT0hjWtBK
eUOm2QnvYRWED3nB1GG6EOV7SqtsWtXN22S0LlO2OYPcotZT0nYh1E5X+dMTqXP8/mNR3vOm85MT
T3uMArhKEmdESYMRn5ir2rGlmeQ8WX9Gi+lCRDhnKagJpmF4/cUHgQET1BkM6a2wkW/SpFYVZnDI
2Wx0NmdpOj6fyXhsjq833QbRPMMgQphhFsz3erzJ/e2GgcmKaeFLhT/clnHBI8e1qFyINzkJVZNB
YUDDdYA6QAI2bDChUDQfIRbpyBJdTjbDUWZusYNuHPFjDNurtwdfzpfsMGigrEAp9nv+bJqB1dPM
rk/myWhM20S48XG0Mco/DJNb5uKknyN4k0UZVI70ybxoOzttZUtZjrqlOycBSNwLIuE14UmuYYkZ
JdN4LWZlssMHIqgtuxd/0oO3j3JQgQ/mpdfYqB5Ocz7MntP1kfdFFrBDAu8/sE28ipl5teZTJJjz
ApmFRv9YR7eAjDzLGwR3GcR8ZGgIu0asYUArTwCA6brmEJAQkuN3RJoFtxED4PVNpNuNhYngB5++
m1EVzhv2pb426o/k8dptEmrLXC0Kdx1p3HfEV5atXymnc+694KsP+1EOu42NzpDZsmxMwn3V0oxj
1zL6L6UQFuCX7TxVxPOLIOM3LVuDgzf0gjcHvT9H+Vo4xrilxhvc8HBOsEhb1/Vm3/u2OcXKsr1Q
sSUtyl3xAx+Je/FQBT1wR70WCg+2KNkgShvApQz8/lO1hiw98ONMJxx7ufhAzpmrPw7O5jShWSDK
QlTbDtvKeW5pEUxi2KIzFahgGUjPDyNG/TSCCQkzoOCf+ZJ3pg/ynGaFxpZv2SyyUK7m5vAiCAse
IGFg210RyzWOm3NgXVKz42N7GolySquClutECKRsVMIsNXaY5usaL8jNE3a1zTkuzaK5pP4FJrWl
ZZCiPTfrPl1wsSuzN17LFuEa6kXL/QddxOvo5iMRb4VSVcgRJYigOW3opB/ALOaBkAmXoxnTWxpr
CcPa3HVrkzidfi49zFXaNyRVlFnYokQMlZ87S6qqsEk2tGmx2DpZwE0AFeDSjG1moVbyfjC2NdaB
gzBqfP226TNL10l4eAdZpkN7HZ9+olPK1K1+QBldBdzsEXEKfFeN40hW7IboqKAwHzMJZbjaSnLK
I4bbG5sXx6py7u4XGZyJpHeVp3C/CdXjkdDZVJNfJhmOayuDSdImJIKxToguRRIbL3z68js+eDce
bKpAAdViBuFcvA2UR8lqXZbb6eIP9Xphd/PC6phTJoyaR0lI7xs9j4aBqXLX+HixujJ9E4faCa+B
s8go2BeQOKS3dpyOahi6rZBFGMIxVUO8/W0R5V+xf8FX3FxQh/h7cBtUZ5d1FmvM1FpVxVJy2CXQ
da2Ig1yEZESziK1KbGXPJTpuGx1Wjb2Cv/s4ZfoqOwze/JgmV+T9FdGJwb78lN6yr77LvujGlfmt
brIvpsne/unH32qZ3EOSY2o/BpnGcLyz0fLbmuZh8FATz1mJgsZLKUFGd4I09iztYohhslFLDOlK
DFNm5ZKBbtN5Ji0v/6PJz4K4jazx4cz8jANhWKd5LveL2Zj0I0JanPNRvM4kwXd9+eD7hXafx2XJ
P60MWgMKq2CSWVr4aMHM68UKjL7ciZ1SREd2S7lr4ShgmtvgXfa6qrBojsJMFIa04PGKvHkK2w+Z
rERJW9hRbvRmR6Hjn0CxGewLZ+Ng2CHPBsZLfgwQ8Ni4IAknlBfWnn4+KqNVnqlJV8K3t1bryTKS
VHTRT3o4ePOybWwvisjsD0O9tIvrd2SGGY6HSzU0BFaHMW7dCrqs8DAHibYuZp62oNwU1XgUA+Sh
0bsqajoRUcMiNEU4o/Lb+bZYYB79m2oJnbPRKRcZUS6vdkHhIVKGGyR42JhiW5B825hixkRcnhXz
/T+jSRLwhIBdhwrxO1fku99XdL5rUmGZprtrVOEc15ogrq+fj/5VAtDPP9yQb9vEbyLfMHzdQzRh
IZZi+kPeT62VfMvW7Sbybc8xus6NvdNvUmT8bmuqZVxPJZFwDqbiGLH7ThIwA8LFJCuB2Ht7FgOF
OTNczPR35Zzt+a822X3SCzabdMQq2Mn9TQn4hgesvWGr/puyV+E8mh3vYJZ72TB1yYFWKybepv35
XSMV/a7g5T1UWQ1tc19QpkuBFVNdTDAGaS62dSqmibkg7YAJn20eB3tACO08ozQhtn5v60ehtMhk
BpAvXtebRxTk0TzZhFFWCbKJLCdDP22Rgs1GCFe0HdoDr1uQducBXKVxNH3giz2dM8NOm7KdjDa0
E0W18GhRlUo5KmgDPAM5jmIYAl8k6Z3lxuzi8gyhTdZFAd+SmaavQCdOOUoYncW26/YXTPjSO4mD
5DN8N2FYvQdHhtftbN/IkdjwxWk7B6vz2+qYyQu6ImDMoFoME2IEZWieAGKBsclez+FQOsI1utlH
vHRRnXDcMRhGmTHzB85o6G6B7NNePr+BdqM7Sul4Kk/XkPpbZLhnE9/q+WzhPSvvyOidLFLW9Lvu
FdV9mK3rKhbvhmhBjnAoH1v0lulHdxm9IMwues8so0LEZadZKFFWo8fusPWT7pelreXbG/13bVW1
kInXIjhJDwCr46P3EmvveU26IJZLye+NoUxKvlxKZeXrMr9b4O3lwoO14bri1aZLSCfruTZJwwdt
Ekw/z7N6ZBU2Y7IN8IgvoBmTrUCKcGf0/vI6KE7ebTYi5HOAol7PkpRHI0huxVC+8WYeMmY2p8sd
DGDVEGMUlM6CKm+MeImdYMqn4yraV9r7zgcoCCyoRUd2pZrrziYGdBOHtSnZCVew8NQo7GqThrKK
t75e0SqA7ZMrZibym4xk/or/ShEt6xXOTcPCWOym0cb1MsjBI5RnG30ev8qo2PWnPGgaLLJgYYbf
NBCiPICCD+uW1x8Mk2BRZiOQrpIrD+si+UpcOhnOhHZO7m5hp8zK/WNNswceAhUsxb3DHzdXH8mV
Z119S64+2lfehyvvWPU8XSF/8ZPmzyTw+BmWS54Ig/FTZFD4s1qm4IkYDZnxRxwOykz8dJiRTy6M
m/vyuIkfLze3G+tJeiML7smuIgPg2JYSNk2j+eRiOke2Yfe7DDbNTpLc2Ydd64GYZkvRLX7Fzp5f
74elgq8B71FBZFE/tnLWdW6y2yKyA4yaNnSmnClupt3mG1Mdrh+ImUNQr6h1Irog8DzkXeetFS/1
CGqWi6m/ajY3papDAkd1jOcJxJkcm+GYoxr4pKmyJ1FlT/pd2ZM+K3tSrOxJobInLZU9KVX2pJWy
J/2h7EmJsidlyp6UK3vSWtmTCmVPulX2pDtlT7pX9qR/K3uSoexJlrInPSh7kq3sSaayJznKnuQq
exJR9iRf2ZM8ZU/SlT0pUvakbvaT2bNHutWR2pkyvhedngTFCc+VPaks9LFvKINBTigPOvj8LG5x
bxk+JorObA6XFhFhHfx3mNo0rXzFT5IvmdPL9L1Hzlf8hPgqa81z7x6vKdPL74HxyUHlwO6iONZE
BZGMMtZzfrwv1lmSa8ma/UQklVbhblC0tW50xIXjJ0XpTTba3ULrJAwmIb/5TwtRKQAucuV2fXgW
idL36ZJXRmrqrY4pkGsOXa/N9KQ83C14vd27ICokOkZQu5Q3MAcWVKdBRA2A0Yadn7iMi/QzTaJ/
s4kZpqK+V1mtaFXPskEsPJYxtFxMLACBALoi3OdxofHOr9FylWag5puYpkIt5B/BsBUigtLBMQGg
XZDyepEv0hspSfP1dMGrXAc8566W7dQFQWQEB1lxvSm0Vd0RSGrnuMToA7LjZfuZ2DGjhG1nDP9G
fxUt58YNuSeayG0Rdy3sI3IjqxaPqgkpp2j7SpOsCKZtY9K8LKsdYVNrgef9crRN6U4JqtsHtUr8
iOZJmm3KpkER7agGm3IYUUlHWpTN87pW8lfWbFhOeg9dPPyI74A3Zpf68tZRNHAS3EZzcRd3HSTM
ssx4lacIDNY1MQZIw/P3r5jyYsqbSNVCKF0bs4GjQKqSDAQONjdc11MhLZHzxEzgyWe4HoOliJu9
EosVsgTSQNWAwDIGx+m7QzEF92HDHBvaGZqnPLYZVmxfEUOi7qasiqKBKWhjeVIYTv7mECRPkSGY
st8NKDtm6njagsYrBltf1W1MZ5v+qG9rpVusR8iswCrKsgLyQt0WarlF83aAJ8nOxLjgUIgCafNW
M3iNYcigx+xXfjcG4ZaOjtW7MmJP42DYp6OkpW5wbF0KJ8qi8pDscjgWEc2CbLp4EBlT8mIQjtsL
dWQmB4EzpHBhOl0vRbuXTZGuKbO4meZHS5qu4Tbqdj/IvdSXY3Co+6szOH9vDcUcSkBBYZLhoOp8
KQdbpuuc8u5rcBE0fVC4On/KAeXLiolxHXXFemsMjib32KIi07ti1TjrjfaQBMtouqlWsnlbFRdm
M51Rkj1I7g5Omw5l4DC4krXU6DMw7okGJjftMuQHaeKpWpT7tebAMCE/BqIKN10IF/KzH8H4vM7L
xQgQsyCOxQSszsplEhq8lOqPBSnN7oKsLEUnT9wzXEOVGtcBN94h7nQNokRSJgBT67QfAXCDGUsR
7IHty9MWRLT/DbH1WsE8BCJ51oibIWSHWTZ0os+fNosYcIN1YxBM1D+KzTZ42G9gEMwVTR85G/rY
I6sccZ5qGzdFWRdR5iZ0bVWjyRE43gaaRwB0brxyAmImEi9439B1wl5PF7L+cIS4vYAXEc/9L4tW
aIGoJ14akyIjLRc9bfZUGQ55sFUpUpkFt4+36pSaaJsYK3YIuHGZq41mUazysmTBnBfGmy4kdf9c
RUwBgJoB5RJ6qsRYzUTJNcejZQtCJCCi+aQQTfg2yekFuRdhx9DYxCsPy1UrvwUz7mLYkHSJqvFE
kbC5HwE7zVjq1p29S8IjAsRgZJKFnZiuwmFolz7bRFWtS7w4aEG1FY9xA6q8maqEuyr79DUETqqa
PHlwS7VfYH40RRhlVrhMaKQfK7tuTnGUfG6KkVAlskNEuKiNrZKnhgt/ZdO5xKDceHgrXv/11x9u
2jklmABePKdNkQD9RLr1oga5qCgchGGubazUqKBLuBmnMwJozZmrDJZ3hNPYoCK5RR1v+sPW+VUF
vImpQw6uNwYqMLoYXKsdFz+wqA23F2Kdy/6Yn2m4xZHGYjiYvI0GHF5XdZtB0LB5GL1Q9sIL9/Dg
DsiuOn4aNg7UfZHVdeNo49LARMJhuWzaNMx+MJsWSaWTpnLB8auwCBarb/qKxKrWrSlH3L3URKxr
tl5xD9HkodE347imKtRdoW1mJobruKGts91TaVfRPVtX5inUHQR1xm9gKNX2q1fDdWENog+sHh19
oxjEGofyKDxDJ/74qD6matDJoFI4x/OVaUxenqN5ohm4qrj6AJztgcq5tFAuEySXlccAPDE5zqiD
Z3jK2GI7ES9U2NAkQncfE2/VfdL+xtAQmeoSVQtMKcDivnjbwQ1hn85OQ2ye75NBMEEsrx8WbyvN
NuwugTsoE90eLXCngUeaiCLCu+g8HsNK+bGawlmDpItUj7bXfabq08x1+7EUiZIV6edIUo7R6Scy
tT7LI5yS7oNSxbR4X34I1FrTVKlZX2el3ddZiWqE0Trq4ja0bORc5n6LG4zOcf+n4MHtCuyLVLVL
VgRimS8Dc5EzFFN3pW1ghGncMC4GeRmXU8fF6LmS8RLGpm7wU+AqTXI4McuzVQls45YoXRQVJM9z
y4ugWOc3jJRXpeV/s/lVZoUJKjeFUKqEbtEP6m315mYWxDk9SB8ylA1AL0JKR7yrYpDI5QwSUTRI
5MkNknk5g2QqGiTzsQ2S0zZIbssgWSeB9Bokt9MgFdn6cIxc1BidRHMXQvBh7C1jJL8yQgX+O+jQ
zUVQ1vGHMz5MokqqwnNQDjVQY1xXoNabwgzi2sbQqnLdYAC1T6wB+NpBrup+SFvRqPUOKDxJiqDw
jAsXXlct7DtIe/KDawFaj2cyNYw/qvHFZfFBul++o/jgUJvmsp2qOuDYKA+QvA4huFZ7qjYGCBE4
RjpK5YdB9J3LZhEcu11AAS022W/A9Yrdc6tFYmHN2bMwBUG1R9EQ3x16InOpGZahUPu2KG/LTAse
7rzP7s0n8fEV0flP2DdONfs2S+M4vaMhezl5YF8C9t/mb17xTi6ziMahcfMTvRO/nS3ZN/45f5el
/N06p9nuV8nNqywIo5T3gF0ZNzO6DGL6SjhdJuk9uUmTVzmN2dM3vxAFJVCQ0cC4+THNKHtm0gx3
Rd5zThbRlLOSL9J1LDiggnrRzzMUv0AT/q38mNd75U9L+ZdFlLNvIoXq1YbfPwerFU1oCFnhuBtm
F6d67UaRYaDC79xTDiB7mVzH2ojzG6Aqs6UrrcGmJKj7opPECG9euiJ+wLixlspwqPXDHWX9QPTu
7lEtCCXBl9Xpka1ODcsSQQVEjqPaL8r3RJTvZbQe+VJBOtfEfFkqXpSvs/I1VH5BZWG5J9ywNIAR
135cil6yIvMvKRTdgDCrdb7gdz5UW69C9i1vLmnr+oqYKoMHmrBMVBGDphqopcbx+2n5rQ3qdOid
oOAMrn4oJKj8CW+kWtpIoTV4zB1fETvgqVAqyvJQ6CjjsCmTSFeG0pYcZaKcmSfq4CFqTSFNRx8a
E0xMVDN22vRhKqljY7mK+SqxNKMuQ8scBoqMBwV1j3EVjVEZEp+WoemlFSTt2e6gIh9PYlBmZdi9
NaQCWPH8pOy2Zce0HOWcFXtZIWIbreuLr24WyFkzLEWawhkKEt4Qizduu6VZvs7ZWrLkmcDS4kPE
MJQtYQJ8Q87x+44evS7AFnTVZTw1Lsmz4NJ5Flzaz1JjTd0aDOtiFp8nyaT5LNeeJzmU/rMYSvM5
DKX3LIZSfxZc+s9RYV+YfFHXF/v1ZSRfzIFLVdeYvbil7Y1VfZU4DfcLvX3+wr26LcorLTfS/xbt
8BpyV9VnFb8tHlb0RryrVTAaBnTXNJmB0/vi5rsgqnlcnzK/vwR5rpjfQ8CoQZPMgSUbgaL1n64q
dWfYP58uNUGLwqhlOAFbY5k2xTGdB2BajIuqJHwKmBTKQpWcxon0GHTFhAg31CDq2EOFZnh9AUWc
UtW1Q8BKy9SYjjqBwqiaIeka209pNilF1TKXayGXqLwCpeWomozbamcdinE08DPN0jgu5RbMCl4m
jklPo3+so1uuLQx/sesfFIXsazSL2K8RSWu/1gXA/UY3njo5kstOH0GM+XSIARdtTIc00xwuVYJx
ZZ+DqxNx92qFy+IQPBexlJn2oKJ0RmepEfSoHh+HEdWZyj6ohyyKIr7tQbBIvP71DJulydjBFh63
FYqwvfi405uv7TCJshWiOYz4GBw1IUy7vWSX+41hNKLyYp4ZRpxOL6hDcR6AwnYRhrMGeW6DO5si
Vn1VGJUNxAcwlx362gNXG9GGzv+7XPCanGHx6k+Cw6ZAWkMVSKOetie0Y2GasiEwo+WOEsWNBGKn
xmKahvTN7/mpDtVGBPT6S1Qx0rb2WsRSyFHTlDUVsQRO2VY+ES1mT+CzaeL2kyfPi2IWQQKaAAiP
TOPDqzL26YoCTZYInLmiD41Y74kzJCZsf3gDA9Z47AbJze2oPE/k1/SWn3hjBkWTJmeMbXbQyCMb
fwOq8YWRh3AfLozIVrhNML9vns2rsQT5QzKtQxi+rURoogtmGIkyfgFc9d0zTTVQcN383g/ff7et
6Lei2aZpcJJq06pRPXh0N72BKYAdBnpf1AoIPm2abt/H5wu4tQgzLUjfZ3M/+/ThOkzXk5hqMiRE
V3skkFz/DN30FYFsBr5F33zLUgsIt4hwFYFI1cDRO6jBKl7PI/bwqWgrrt161SFfSye/84t7uAdS
F4ltkPbyRSWYTReWqFnqyXgULczFxVkJpQXCZoc7KXrdkfZ5PAVTt/3uoKKwYxZrEzpLM1r11A2Z
PmbpQ66VvwXOat9RwWmLv83tzxl4REBtV63EC1ktefJc/Tqn55gwwivRiD4RyWq1HZSCTQDQ6PP0
Hlzt94BrkJzp2SokB6Bp1VEY5KzHrOLu6lgrRVoKM6PLtIB7Slo9gJJVsIq2NZS1BQ1CmsEnRx21
JaL1jwD65/SYnsJiFeKK4ORaD+XL8Y4KNNQZCNfLlbCP69mnbnfyi0WUhbwNefFQNdoRq+eKm+Jx
NH2AnQYd5FXvhlPBrYsojooHUYeabe7Zw2ydCNv8puz7UHXMqR0GVChFG/cN+6SBO47455fCkyAh
p8V3aVqScEyB9yiFkNPpOmNQ18FqJfJ1+bF0lUW3IkomS+9y3iOkWwxQA9qRJ43HkGinUuChbmwe
AwXBhL5ZJfPTvbxEbxvN/C4qpgtxx4dhCOOIlYLudU4OkmjGj2T7Un2z+bRWWUIJZl2I5RmGWKTH
80sjW2zbVdu+aRxxn1ejP9v3lLC0D1W68NgWf8MDI765Lq2kBduJv2EP0aE/F0aBzE7HWBsIEhsx
DF2t6EXNhqxZ9F4HDa4XahArrxphIwM6iCERA3dp8Plb1VZgn2aSTs+IFtoNOPumfpJOueLdcvck
eHDBxDA1cMQAuFqzkZ3mebaORXxkQwtygrnQOMZTMaqMvE/FAzOpp3nef0zbKdo+ciSK8ABicukX
jQDpFbwseT1hbgM2EdMsL2NmirtUW8javTi+oUZoe6j5elJI/I+OZymBY7upFsQiGKgIwMbhyI31
6XJGmvWj9FmU2hgGRVDGLouIP7C8FsYVdArmYc0h8bkU3de908FVrK+Q5YtbyMjABuFJkt5Jt1Qt
GpYrw5RJhgcDBzHsVUL0gsKyWun0PuIoqg0xD/OKOZ6exOt48/eAyQlT689U1EcTXn9581HTIk+M
52LBwwvko2y4hv44OL4g4YbpdC0yB8J0GcCaRHTbHJCCxsBY0xsQGkbERFLLEfeu4so7OO3Dzz9+
v1zFlEtZWsjQV7RA7eNHO+dSjQZNZumQXqsGwD4/QsKC7rLv41nm90QyJm1MBOupTIreU/R+FUfT
aDOdtG9/+OHnv4MuTEKG4v50YgzPG0keHz7+9L+g62Q4ZTidFlNXLI1FFIfH8LBeDiYFYRIeS4AH
kYLnAdVrwDov0iUcUGI6arHKSwpJSMmgi2zVpF226BhWr1MWDF/FedQiBW0Dk1N1kly3hoJ0t3ZN
e1D5HlIgF7TvjE1Gg7fS9hTvNbMoY4A8HBv2L7mq8fgbWtoO4HI5wKwCoMtgjIbbaPOJkzHGJJen
L7i2YrXahIivsrRIeVULeEWxlEuzBtw0mro+ENdrifXt6UOuXXvwDcunq3j736YAt4y1euOnjtw4
2MZQfEtG23QH3TD38eXD7WHSaomJZzvhr9nxq4CLEDiYaMpT8KqQV4b4y2aUf57BAUuoO2Gzq7xB
QhoETwaRQ+MkIz7q9rSvCHbTTcq9a/lq2V8F/G4ac8xyLH0gGYCODuIpZjTNUGx6mHSQbkOt/jR5
Iv+gpY2pSnDBw4qIkTJs23vUPMIbocGObPqQy1LTBkgsR1e8I5WdASWuXsN11cxLHqEUzZPN9Ntj
d4svZRqV9dzCcnn3tAtcbLiacQyVu04FHAHBkw002JhchEdCAxjjuAXuE+t42djdg1XP8WxwmsBH
H2cU1QRV0nUfPXa/aIvzPx8dsvxotH2aixzz+2X85h64+1KzGtyXYAzLgStuqOSGmWfLiNdoBq9v
TUv9JDpAbbDSHN9XyCicp2p3UHQVMVq7ITa6xjYPTFW3UNhBibIuUlREjagaMWy4c6NiFLDGrGMr
RjFH4qUeCN0FRLWuqNHg00AGETDpKmDrBBCr8/5nYbaFOS1+DApmk4TvP336lYe2EzgtTw1fLdjy
pgWWaQzHMrjvo7ypKMAoCek9DcNJ4/kR5amwOhvrWyJga92/dHD7JEnDtWjdHjhnZfJyJFwWURCd
m5sDsy17WGkfEAJ3AyZKCBCZgq1oFqawWxcR3302OjaR7oQHY1mPeSgPYMsyCY2Ki4q86M6tvJIO
wRRmu0BkSMDHVx5akc7nMQ0bo/x1XR9BAFUJPrBhhvGI8YFhgMOT9Rf97i7YqtbYpi5mQrMs3eWO
w4rt6R0WayV5xnXKjyoEYU9fJ44KiCXO0hirwOk8EKDCo2oS4DBpWYISY/9gqipKUduV/YgUONzr
kZPQKPv98kZVHhm83Dkv46B0HBa8gYR2l2afadZ4M2yZw7K9TwjsM3giBBwC1csTG/blw8h1CJy1
rvWiO49sUO/oJP8jbvYJDDuqJQXdI9UuDxkQMFxZWX8RbA/BlntZuwIPvaUdEAK3Z3oiBFRAe0Nc
X5p053FAyXUJjs9TM1e3yWqcsdNIwCWuvajxM1bj+zzW3v3w8/v/+fgBDsgeYMNhmEBIkUlclUxt
6xc1cucPwt2uIAbAptth7FT4iJhCTaIwpPz8+BDTfEEpoy/vckUvk8iuTlUSR4ko0Na57mkjyG9Z
kOS8fW9Oi7I6Fi9cLSthbniG0QeQFjyYL9TyIAkn6T17dZDUCV6j9zmGhynNNV6Kjt5H9dhv0f7S
6iXBzY4iqevhGWr8GEeFIMuUk6a8216jlAVzLczSlRZGM6YaHFdeWsnQfTVTfwvbucefFITm02BV
9ceudJzGocjNg8uBnej7KWu0Azw1Ak/nUc1Y7iPKTZZn2Un0Ngp22fl37Bfge0LHUmPYtILXE7a9
Xst3PWZXTGeiRhkbGio4Rp8jOd9YtGm65Al62jTIeYnrnCa5NJrWttR4ALbbWrXY5rDr3zDMPgoR
Lef7tdjKdpOa6BjfUJ0NVenFbYAU6+EsiPh1qShfyXaZ6WfxSc7LLsqaUVqotFO3VbjMlmCPuzd0
HQqN13vxV971v//0qa0DBzFQy0czzl+C2+BTeU/UAmc4xO4NF31XnkBaoHCuvRYoUWCtDcnU+zN1
G4U0Fb05+OmjZdAs1A0+BrBUxjZAC3dlLm3NJ5LoliurQ7IEiols2ioyB2X4N6G1F2DARfC4qGX3
qOhCeksz6YZs+H1wk3QvdFKIsbK0wY2MmP2gVulqvTqAYWstbL75yqFgmD6Tt0rXj9nIZJI6sYaB
Mpfa1eIIq22HxOWGnQ67f9yG3V6YncuT4JaDtqnDO3nYakmU750Ap2lSZCnspLfsoeHhzmnGELB3
LSVbbUdJA7ycF1DdvAWaQ9koA0/KHV/Gpml8mg2LSrD2pOp76H8qDTq2Zfz11x/gBr766WgNfiHu
EPnm+vq6WK6ufwge0nXxG9sD82vuLxLbYQ4eiLgbZVf6O8jm9YoQWC+RXDIz3oY627SnCuK74CHv
PAK9dcvD1fP3EPb0IWO8HnApvbclj51cgafjxukcKEOMu9PCDlpIZ8E6hot4EHdocVboZ5anpVCe
fFrmTVPB8J6FjqqXaYOmWrbxHDTVRqU4nSbVhN5K4lmswWe/wH5yEpXbs7gckF4iLcHPK1OU+xor
U7l+2taLfp4mywbNdI1noZmGQmlures4Sj7DcezDaGgrsN8FWEVTsmNKuRNySfOcBzkfDkf/s8fp
mGXWrjuACsCeTnfQ0YfbU5uXMfD1+TfcgI8z12MtSTefwtuRqpWsDclGVar1R92BfKQcN8k/Kwqn
uunDsNa2Jjg9UPd8p7sSbA35LTbKGd3O4z4uVPquiQTPVsTwUcsiTJ6VS9SM8cDJyT4+nrNe9LGd
BqJK5Q6ze5oG3fRVQVaD3JjEZTzmQd7ntgoyb5RsP6zqWiBZUPYBdy9HScQ79+1mF+nRvrRdyJVc
E3H9CcfdDcsfaMMSuz8o3baMFsOX73orpMuqSDXcYtRXIthJHMAGummo5G2rJtM0/RzR7vWYMZtO
M3bV5pQmkSzJ1lLJuYhsk136EmsYlptAiYqpsoOKktsgjuA+mrZSHVqmYTR74NWK4XL9pmMMI80W
YNNWKtCNnRbC9SwIGYjLHS7btOjKgHXHHQWcDL8iVYg8iOZW0v/LswZltoSWC9twnbHwCeyi6SPv
MkKuHuk4TTN+fo8fuicRIWwy0aC7rBdRP0xhZpCpn8pYW4AKxraVoh5FqZbxh1DmrVrONqVIooTv
KNJ2pK5rKOHtaNje8ujUmyJb09qtb382D1sibznNF+k6DrUJ5UEpzAT8t+TwYDw+jruGANuYproI
XoOYZoWAqysuJmNczt+CpxCU0aucMclhq8P821tE/1gzW1wSvkx8TI7MqA+HzlBl3/Oqx2YVUyaU
jqnEzZs31+yfhKZXwlkCKeYlkTcL4lw1fce6xdvYSGsyGYbTa55mU3ZW0aZBctikCA7xNfojcUdJ
dfRloDwLrB3X9VXginM2b7VdOUG5w4RvMZJ8EluJhkm8yW+P4cwhWITPf86QjNWimXvxte9R4xlM
cZrmNKGIOpauo2iF2Ct1ckzNdBEkcwwxju4MIoWG4ni2PgzicTlEOQkeGYaE9po7tjna0LcTg8kc
6CCFhhoqI7LfVMkFsysZWL7zgm0O82KBnPyYYOqO4E0FKc3hUFXPu25ktKs7xmHSEbxB2cx+LG/K
BWgLtqs1RhKg8j6PkZRUwMzzT5zObh0qpLwX9L7QiixgZ7K9kyloN3h2n0m1x0mw4mf6vDwbHtre
2oIGIWWnKS6fabpOihu91uhlZDJKkdwYl0LHf0+ZFjFLOWInD8VUHaRIHnbdyYJ8QTrXGDlGTNKE
5uvpAswVt4bjAL4vNPus22xVmsdVXmR5zVO9rs6WVcaRGN29kQOnGM42NzCds0rgA8S6dY5sD9aT
d5hVw1TMKo+p7MEj6cZjdf995NqDWfbdHnSMyXIZjURvmeawtSimQdbYw9dTwtYiyLUDZDhAxFbM
mKxV76NlaxVIavZgIv8uiiFekCUsU7Thg46lCuM2iNeyjuw6MfrDbFz99H5KxX6vbQN34GswNWO1
vUuRFyVyFHDHhmhFsyKi7asF7kqqnTO+3q7ZeWG5AX+A7+etAbiTdvc23UfMm2zdsFGHK9y6gWKr
jxDvmcH34eNP33/8oDF2eOvpbamHhcT+c2w1/LVAa0FRsGOWzGU1EM+ppLe25w7Osyhq1MAzqmhD
V6YTWfs13x6D8USUz2ti3h5qxLkH4/fgNqgueMGYFjUKL5wWv8hccPow/LGTI7N6kzDIwl8aVhHc
XXmvcQYoaRxyfyCJrIJicUZ138C3zPWhmK8KX5yL+U3djUbmHTIM8xmVhU84zuDqX4I372oDLfA5
M8Kmi85NUvrxXYI38405OZrtfHMvIDtg/X1z2ArgItioy0Xz1GqmcBtvNYyFdBYltGn9JgRTzQPB
lRS1cQQJ7tCHYLXKIZCszyamji6Cy73eYSKKQgqIur5AsDWnxae//enDJsq9ofO77ivhkC5XbMzy
WyjIwPIGYaosywUyZT4upmjMGOGLl0jwiJJgymtC8VN6eQwE/V+eohnAn80IiMuqs7sSyXLHjk3U
zP0KR2AyCmQpNbaiOVHB8VqJQRwFOVyv37cexWrdjLQ7YHwjIiz/64qQ7779/odvrogerFY0Cd8v
ojj8ry/Y+6/Yf2XY9/Yz8sV/b3OcJmn48IZh0OzPv/34ww374ZX5fsX+RlzL3ryepVxtaDRfFN9M
0jj8b2Zupdk3GQ1fX5kfvwuieJ1R9uu85FeUzFEEmO+vV+yPGdZ/X18f3T/ZqJOZTGxcMLULLVuR
fpVZL5u8yjIGA/b0Kp0/aFzDVGQf7NSrnLz5KpjCNcFtlPPG7FbKPUmLaAabJ56iMV3SYpGGuGXR
MJwOlt6xNhpEEeURo1VUTqX37McFOwDmYq2HL1PUrHo5m9g75PJefFncsBkfR6V9fkW+C4p0eUXe
3QOezCGJ4KEUDJ1Ol5XuqtzQTxTBbgLV5ssIIjgMUSm3vRFgpUwPK/kKvRYuMyrHDLcWlzEyAea5
CSBnIQDWuDGm2SoOaoWjrDGWuJgdHs6/xOVpjXl/jMVNVBFZBkk0YxZnl5QpS40AsjyHd7k+NOxt
8Ekqqmiw42EwiYVZsiqE4wR3hnM7kNHJVkGwUhXYbjgDOhbGtLLboTI6X8f8jvhEcaFuB2wF4kLw
cJy8C4fcWj3AQP9cLWe40alu2oqYfUimiyxN0nUusoE6tyVFMLsfUo+ANXVjAB63LYF4CMreSUvW
XEw3FVFRhRyIVgiVW10SGqgUr7yc4l4KOKfNVo+WBLfRnB1DYN+y6yhF5EXDjsax7dSsbLWTkwC7
TXX1sPK0QUv3VC9RdeDmK19FCzLb5Nkpm20nScBeJAX78Zv7ri1ZUYD5XpWlhmaPhqsrEnGsrUVe
C4Cad0vCsNUnYVT9Au67tAs4WeybX/i5jCi+h7ZAzErpnIYLATl9cJpGGRpcTEkmLFNHk6ZZlV3F
TMrB60x3Gcmza/SF04NUClDhvWF1AVIB1KVXE4uyAAHD8VXN3xKESNIblIKY4IZq9cD4h+hq93OZ
bnV9X1nCaZV+JTIqJA1jceGSONw9TmUU1FuQ9pJtM9/CnxFK+tU6A7CdrBYVqHY/S+vtarTBWA1p
whu7xLSg2uZqqzwJiUQGOLjGHGHkOWHQqHvDimJJi0ArgjkXg7iGBWOZ/JEEsCMnX0+2wyOji6CO
5CqEU9n5B/WM+UyFq12T80nrFEINj5xPfELdoVtCTJnrEaUno9PwR9I9eEIaZxMSHNprDSyMdVxE
q5hq0ziSpZvZxHuyyzRc3YY8SX4bCrtapj4CyxsCRjXBthpepfvzwN9ZHMkqUIyh6nKS6pKxyHiS
4ctz295mE/8cEtqRBsjI8c4iI9n64dvPSkSnWEbmKAavlKK6XFx9TLlIdxyPPCGxBJN0XbzjZei3
n5XZFveFPHbXdZyBIOdZkIRTHpyaiWbEEgIM27HUUADHSItf0ER1fm1DDexQMkcRREzvoyns0yK4
+n5ubxpES/gmSkwDFQuqiJI4aaHFH4MWOGMH5UDvgt3SHcnwXXswZDYtJryXtuQ0RnSU574TNh9v
GFN3h8SM4fHVURV7OqDCY+ormt/7V7a8m8L+KgffjVs9gKuUvU/V+19EbdTrSZxO+KU4M4mCYrqQ
dnXwiT8E9vSztozuRQVu8RvaIgpprt0FWRIlsFp7hnJCdnvOITFlZawc7hviuMrpqHzP5b4nwTUM
VCJpVwHsucA5AZ1c4CcynS4nUUJ3Jrmo2hvB4SGWOyTz4Xq54rkCYurXirKjHKin8p4kPPyPJ2aV
FYsEJU3lyWxUdJunhIzGDlrDksEranLwolEWqN1GBRFNkhiYiPtlzO+oM/rHmubN4kBpqDJKmmQy
ACVVO3dBSZTEfMlorOJnjUFBgwxw1SK9rkvVJhanPAU0NZNA5aGdKAkRQ8ETddmxWEQR6Abs7zIG
lAGdLtKqW4jog7eK35b9Sv6VrZObJH31R1s73DaEfNNY5hXbDG+Eul0R/csr8x3PAt0iszeved3Q
1+UP+D/xonaz5YwxEnAtVFSy+2MZCanogyA4s/RNuBIteRbSv9Ldsw+ABQ6A455tAB5oPuAImN9u
B2EEeQME1Sq8WmOMsg0HQ/lPaZS/ASbaWebU8W0JvMTZQ8u+RoZ8oZOFc540AMbNnsXHR4A7R17z
n5CdLVAbEPViCNdlch3VtkPTvcbnadA83HFbKFw0SeQVRrU0iR94H1BJ5aBh6YDNfcw88E/H3BTR
5tc9e3cQ8uwzCxWW150S+KhBhsEsp0Ou5bT4nv1S1jIKLspJqIiOBnk4hjU4Hb9FS8r1oUEcDjFH
I6PpMI6KsT6NjL16QnuzYrNQTHgsq1g54XCZM9CTTxcUnrAEVQCyMzly9TBc9XI4bi8pq5xsWgPy
3KCLQ/C8A94kdzRRQJwOw909fwQ3TMJxc0QsNrXkRGGtk7Le2pTXiM3W0yLNmpQUd92igIbGIXOV
07AtIJVHofyuBXV723WG7pLKRXoM1CxDvVHT3v4ElZraBbTJgHHJQKCzdRyXBb/vojicBlnYyPwA
O3ZJB54EYwBlX873u8HMp40th9TrfJT8LprEbrzm1bm2adlxyIAzr6RHk7owXH0sETStepYzPBW8
kGHzbaM3wjiI7nHAMNgjCaBpZcJE1ln6iUQgZ4GJkX4v8M2qME9TuJwg6hZLCQntRRoIpmq6Clrg
sRgOfH8WaneLSGSUpDwCpqoPBMdCOJiDlAKSQHH43sDYRZFFE1G8sYEKTE9BNVQ0qYY1mix4Gw1J
IUubDCyLJglgHO8nYh/VjWk0FtSj7zapo3Wp7vU/vhqueYTdoWXTZEVgghWHkU2SIm/NRxDYkh3b
gzbnhOM6AwKXrWwFPJhhisl7sYyTwJO0DKaDd3ZfPWBVzY6zy7Bbpq2JCWftTUDjum0MS0BLiJKr
Hv7oxqyiJgyKgE/OsjP3DX/7zV7Fxut7Hun2OSo0XqlcS2iRT4MV/TpO59GMFyGg4Sv2+uaXbz99
+k8xp/mBsmEGE72DapXE7afgLHl4cPmxxvDnNKsfEizDH3wMGx0X5uMaQ14KXwzhjkn5KHpDirZ1
dTCHRm9cGohy9HIp1sKU5rx+uxbMZpwakbkCex/JALo1j0QD6skDvxoQjeylNyOG6/oDUCBukIMk
1GgyS5mew3He+oDzap5qRaqJ2VWSU19XiH7a5vTLz59O8/3e0g123fGrDb2mSJFta7AR35zz+crF
pl/U+SL7CUoddYztJfUZdypIpO5gSu8/Pak7g6yvB1JnPyp7r2sNzdf1PkvdQe/1N6tk3q3h+hOc
U74+wujCA+o8T4EbQwlchJuJBmFl5B90V+p4LzuHeqFXr/k6toyEvQhfkthDUtHdr/X0xtscTNJ8
jMUcEwcSraGq1pBuizlNaMZDXdkZdSMGaPhN81maLJYz+PBXPv/mRt2oaoIWOZ/8ySDyd1HyJ73k
3yx4VHu3ztxXF/IiZAW4kHee56Ab3oCDDg4yph3c0xO0bZrKsasgu9LTuA2cjvg1arGqzElR7yGT
dGrHZM92lkdFnQgmrV7fHFDKk+rK97u6U7WCEN5ZpAb3cDbOKa2zSaapCimxR6ICLn1kDAZetYhu
Yt1yh0XvXH65I+gJ6wZxzzITinS16fEjerGddflALBj6JYhpVJGUHYvlIjFs8xwi+QR1TRxEEmUA
CL+TzKsOdOVtMhykYA1tjpwhb5sx3Cuht5vEy7IlDamLzqC2jhB2Bc4ErUiyW8XpGGuEuu8ivXLk
ZbptDHCU2xtqEbpQHealTSQs2xtyyG9FSTe2zMTcaQtFh7UP0RAmDI7ETXBfW7TLEDbW4TjCaZ3e
2ZbGc9TWGXehTG9plolahHs1AOBIEQwdZlc6tvmGYLq1rhx6L/pqU22hSpXjcUWAT8hGmSumOjWk
9yuaRbz2VRDfzII4p69alpVtbiZTWt6dePN08XqXznllfrfO4ivzA1dsUVflO95RevPH7BOu4Oyj
DfW85TJE/xGGLM2IYLLUzyu5LXlPX3J7c07UYt1c8sKFzUx/ZK0fss7J0SYsqpx0Wm0VSZxcssT3
tzvvqUjc7H72Glji+aHILcscUuTu0CK/NDkPW5vsTKpdBFkVdSWPbTV9/QKEPpB2fzmCYiuqBHfq
MC+CjOdIptnn0v+6LU7bVIcHlZ/Xmf0DkpbBZ6rdL4BMBVRhBWXiaEpzMtXvpFXB6DjKi7aSsJZ9
SVbv5ox/MH8OzNgtsZUZy6Yump4GG9Zw7Eu3/sUK9SKHBjl8+SIEJoSy5PEFiwJcneAyyZjqUJZ1
xtVJ9y9ndbIud5WuynCzf7o/tnJeqFi+fF5yKI8e7MV0kaVLKvrcJzkvO7ZBKmsnX5nvLlgq4NIF
Htct33ksuvk0tbBp13w+HG//7QwG/ckuPEgB8JX4sa0xcBl9S38sM64cgyKYps9s798xf6V7z2fa
lZfET3usuS0r/skXnDaDuHzCwfr02FYmG26Lh6o5ct7peWSNf/d8Zucx56ugWDxv7q/M7/5Y0+zh
yvyQFxlT7GcuDmIGCXt4NqoY7ItZDqoAiafJfZsSVMyPvihcogDOuy5cpESe9tKAlESxiPIoD67M
d1wmPG4+yOkymqZxmjx7wbCfiC+891ypMjqXEA8kXQVTcd1+qQICTVwHNnFR5bjsi/U+P6PdrVEM
z2ufaxXFM97x2mXzDM3iFjfGyyryTA1mjDRe1pJm8Tw/U7pNLC92NVZKF2VkO/2NbBfMqUIVnnUu
Y6wuWOKD8byfkvTsmD+an89UBPvr07ObBYcxmMzeOUsoqnOZoajPRwav85jOXj9NfltCG2pLgO5/
ub0Df2xGiAeG2aCqup53PHgZ93LGVa/2mlEwwe6qGDLLesJMase6Iu/D5XcP3//5L/HU/Fsevv/W
//5Pv97+r/m34p9/t/UflmEcfvxb/s+/G/Ek+fU9/Wv8+X/ehw///MdPxuTP/0/yP78Vm9frfy7j
h6n564fgT3H+z/f2ekJ+jf+2/C4P//7X+S+f3m1/73//8as+XcZR+I9f4+mDnfzzH7/+/L/s+f/8
GOv//Lue/sX8Nab82Z9s8r9/vzf++RtTsQ+1jpzm5a8GPNb1ZSwue3eq4vNfxkjR2unDXRG9R7GX
bTXky3Nlb1yoDJ6sRY8Xw5fPXgCXrQTQamTocEFUTMlk96LCkEYVvHsx0QSWZW6y8uHdm/2CuhI2
uJR8t7dahnSVUWZlwKngFqoSw+jquSkGdoaY7tF5TVfcAuR+9dcHvaifONtVMzz21OM9gN4Hy1VM
30zTJb+1Er93wbKAJt0yiGdptqShtqRFANZgQOUZ96ckYaOzuc2CFwDrErVjr+befibnweK9pydP
e6rAWa2H/Tu3EhKduqsqMI9s1rDFnh2BowiuU2o8IjuKrWPvzSv/uyhP0uJTmr0b25xVMhhwjWBU
mo37zDLB3ItIOC3/lewffficVsgN/5dTJ8O96DoZz22+bBXk6MWoEvB6r9A8BCeXFNnyXEc5DQMn
gTH0Cx6A4Zkf20TwLiyNg3dE3xDxrAWxczDZ5oRLBSTkaYoIlTXNBOOa7Itj8y/8lctfuYS/9fkr
i3/xn+yMQklpz0+JkMJWfvZWurNDwZr7P21wa5rKJXXFCGDIDJfRxCjib83yk561R5+yXl/yiDaY
M2BVPh/VbfRi598VMc+YlHC5YjlrrsZF2X/7xs/zUZguknnRmeOZ9LKYPIxt6fmXKoWTbqSfpshO
mTqnSuyy9YzxGqZTLUxpnhTa5GEViA4ITS3oCOr670QyxBVUQzl+E9VGvKvCTOI1fTPN81qj0YEY
bSi0bzquctATOx+Y+oCibm15QHRnDAE09Tow7KEooLdB3AhNnOFlz4kAVhdjMMWbrZMpD1jZvWjs
NOEPL4IaRYA8XGsoeTSvr6brDQZMC61gu2C6Lvo3++g5BHu0QFud+uX+fhnzW62MssMA9yFkacEW
AxpuS3uLXVAT3tMsyBegU8EfgK483i7Hq8XqeA8aQA33+tDw7egNo+A4o9n0BuFzo3QAnwNJlvdh
laPielV3lW6RBUnOg7q0IuWEAIK2THcQttdJMJuV6j150LYRPpoxouhlNJAB1Dz9HDGBM+M1mids
Hk/X3NTX1lkMrrCmCjCecKMFk3ItDZLP4J2qoStA2puvbNEMtPJzuD20roqzIpiDtQ56mmdbhGgK
xzj6Ch5ffteKBZ0VZbv4XaoU1w7YX4yw+mwdPVRRkqRTroS3EbMwliUZ1a+BQ4fhvBW/+q7dZSkP
5E6XQcR7V/y+3enWcQFMP4IJlesHfoRq6uQ/tEfPcEaDgm7XG3BYia5Cr7ZLWrqiCRy9oStVXyUr
TSveLMrK65ziocIqTSGN7R/Fm3tAmp5SLmX4wE7tYxa+rgIGNkRPBafFIsrCQ/6EMVQGnLOZItp0
g8uhS07C/+XnTxfO7zpnp46gPO2BE/VEjb58jmWTyDSUanIDCdA8wtyyP6J5BE8e9xGq0uEBGZwj
uq14EYxEOkZdRwnpgcOT5f/66w/sEJJrHz7+9P3HD2ydS5ca/5yfCTS+8KUZLc8KYh3M1xPpUuha
rgJi9jadQ+gtVcGU/TRPMy2SkmKYvWZPq2CYGMotQSNaTG8peHwyXMcchwh2bK5/Cp7oDN8fhSR4
UDx3SPA9KYC8271OLgD8vtgPSIENQcMdDl4+UzW2/opCGNp0ESRzeGRc3xxl6t5FScis1g1JoIGO
abVnG6rFBN7g6Rj3Xist2BWN0oYVzffs4cSCWs6IbxhjkLBerWg2DXIKO4r8EWiAi1f20Uvx2J+C
22guFL/0Bt4XXBt3E7R0y4HuHttUCL5TyGUUhjGtBL9PCygBfxAaiiCb06IVnRiDy3+R0RksfTIw
NIiKMqe6oFarsMxFgrpZxANnKZttaRbN2YrHIWkGXyYbg2gXAN9AheENo+NJ+SFtgPaGmeE8UAWc
zCpVOkq4v+CW7u6LmbBX6Wq90racTxdRDN6iGpbuDMO6ICCjQfjAl3kEJe4wY1Du6qVnO0q4BpYf
pMfWCJid7doKieK3tg3qb3jDDMUOVlvQeAWjWwNtckID4AOrQryGme0bj5ivkZcSbpp9+8MPP/+d
2WarIOOu/GT704YjjDPs3C0WQaExveW31HmdMDib3x5yL9mJI2w4NpiOM9DglGYbA98eNFHjxFZ7
96ktslGexrwK1N/TLA6vg3h7zl1lbFXICslNpue4A4EWafGwkoFiFiOCAp2kbGdt5hHnhzsNruSu
c8ACFq2M8RUH9Tv+iTbNV8J85uGY0AEF1cC7Dzo4n2zUDMehTuNo+lmjt5I7WttXx+DmPBLSvMhS
eBtTqDthFL6PaZD9XcyRn0V9H/h2C+VgwILmq6CYLj7KBGqgQoqwaG1X3yam8vWpYC3T37AGgWxY
AhQqjZgIMF+o2l5ImCB5mEUx3YOwdItBqFONeZxOgli7DbIomMSSodLVaUe0DOa0TTV0Tz1eg14Y
6uC2DqPxlH8fchzlT9bLCTOiRhNqVXOtBU/dXpcHSThJ7xutZ9e0leHt3QIEEehgd9VZZnmRZu1T
EOd4ORlRPn4WyoduIgEzkdreX19weEW6al3RLGVoPAjnT8w0Wmf0o3QXMnxfHX87/axh8yThNAmr
Awac6+YqIwR1djIxAcOnAea0+K3K+dhmu4COam9A5FKr4ZQnog5XnCgyuoYv2YhnWQPolXyddYj7
iPB2MdL8LvHgnUbv2W+VLpDNhcvhJTynJkyX8FHOckYmi6cZzGnxbcHUbrIuKDMReYonGHZN7DMQ
1yguYpyBonxPXDBZvnNmsn76BI+geXbC0lASJG1YF0CaRG4eGY+46OR56aN8XpZq6pompocKnFVO
UuvMxIWmD0qXRMV86/yUSeYmQZX7Gp42WHLEGEz9o0RL6F1TkCkqGQ+JvX+1ImIJ9zKx8BGnBBW6
oZqiIpX+DJYbMcenErwMsYzRCCmFtPsA1GbijCeZliggXKLU6aTUlWVDXLNsDFMnIxHUHAfoqZ1i
+6HMR3ScGH7ve8oIk4asHlGICcU3HGsIgdWH7dTgXs84k7waA30NHRU3IKOL133kgShCVH/59Ju4
pef7p5Ym5fVeEIbCrfND9ZvwoFlKiNiLw+NBV3+PisW7dVFIMst0XS1mGaLwniN3F4WF8hV0H458
kWYFM4Mkw+CPLJImcizUCmxjRPGPH3/4c1Gsfq2KjKB0kqCEYXfQyUNqJOnJarH3B6KDMEyUk0FG
z2EG20FI2Sp+OEozE5eRqNSZLiPfrP7meFJvIsREBeei2N+Gyk7jNF9nki3TddTyDSHL42Bt1Pld
CbxG4J3AUSXvjZV7yuaHu9w/faGR3Z749nBa3oF/0zcHkn7jZLdQd0hqxNA42TFNjqV0LKN7Gr4v
a/1c71W92bg2mE3YXFDA7bXTHMDvWaW72Mh9mhqO6LYqIiZxOtmY5w037Y7zaAF32YXYIe5lR7UP
8V5SquzwY5jKua+OOY1St2x9HM6r2rCQX0PZ7KbLVfEg0FbxmqcXNY350JwfE9M9uwlFQ5SIz6kW
rMMo1W6jkKbtiu945qBCgKgC1d/tYODsbSz8kLBcWQdlmixUmaZTnkl05z/IAM80fOQF/6kPdgwX
lQvinKRhU2E8Ni0qnjLQZq2awvkvBHUNcCJ+WXGyXmsZFZHWScAq9qzTgHf7pXxwbd0eZ3Dle6U5
gHpNUlmcD8rt3lXOZxhjEZrbPH/9keavoAXeGN0eFOyd89KlSJL7fTWveRAcVCxiR+G2bLuOpRx6
Z/I0JJ+hPOwKBlZu8pBeIwuzjjJ0zZGWLbmhSwx9gG1J0nPBVK9h94sModp2h1l15P4sL2VEDEKW
xrwW5iplRJSC5klnksuK05T7519++/7nnz79h9z5ekRHWeBxRwRQzqw36+OCy5QrjDIe+s8J49d6
/HuO37Q8a9CZJiFPbi50sUb3PfAlHJf4W3acuxFw31xfb5/5DTPezY4GBraa7AVaM5JxwCzGtnEW
FZEvzQaqrtTgOgIt5gNpSK99wz1ZP/LNKCheRtzLnrZ9BIWyalBFyFw1E+mYtO4T6bRROxw09oeD
ziOZsMqKRX+mQUiz6o22EO9EDjp3dMI5vqcJ5Kii6gHqXuUPppRFVUTpzXQe1WwhazhOhWMTXNUt
+wysonIOOrI6p7Ahj7qqQGHK+XzbKRinI6NiesOs6upZPcRfpXmxWVngNAn9HGpFhpM25xgWtvvY
JhBn5Ud2TgnmdO/iiSZhriXrON7AQtc+uqcKl8bRLc0eGFgoKfjkEUVY+1vV9BYwnzxXOZKYIMvy
Yy1uihMwVbEZJbdBHIWbMn3FIkvvco3eT+lKWobeRF3keQj0vRjNFec5L6J4o1VyhXJRXkvvJNHv
U7I/CpwWyRjoviIqKtkfNiNq6nDj6WRI6G25D3nVJlyIOoaCqgapfLQJru2Md86ZJgO/z/Nv12FU
pNl1kEwXbEfgqyYTq3bHfr7LTSVwSQlfDfRR29kd/Dqh+TRYsVE/qIZaM0hQBUL7yoCdf+IooWUN
pHJPmS6CHoHBJ0mmmTQRugSXVdDHFg0sEGsMMvYWyb/++gPsfPdHIASuC+QMPFua5whRNEfEus/L
IW8dwrJZgCsqdTrH3H7VtmTw1tR/3FyZ7/knV0Tnn928Bk7rujitX+lGw/O3T71+fWV+rNWAVc5P
Hsy29zR1Cw4TEeOfMmKVSwOcoIrAGsdqQ4AYMukQocan09icRP8Oq3GUUA7kk0apcWvBTSp/7Eml
DzupTpIfHy4C37+YwykJBh+VhtcRP6NBHD9oI68oHM48s6wl+MYQvA4KdbZ9IZ8u6JJqGY0DnocB
my/+2dadzpsEuN6o1gt4lbYub5XuLjJHkch4v7ddi/CYBp8bTWYD594+XYxRUtCM+y6YAGnC615q
M77pCgJvjFdCqOX0Y+IIYvbL//WpLL/Fk7Hfs735fRrS/9Lvbe9r9sUUX7744r/Zn11v/65e0XU4
MbKho1kmKzLfQRnbb8L4yMWLNC8wCoYR+xVxugpeJnfsVdvlqFCjBtmK7IdpwBb8sKkdG+oC7SSp
JauFVuJulq3phk9aiuf6H58+XfM5NN1KgB4R1jqW3je6juC/7D8ZJbyuqOy87npqwBoUR/Bd9aTc
6MySFgFfy/ntNv1jHd3eXBHyiRbae/Fr7A37adUxnv9oh/QbzYvyl26++/b7H8rfvK6rkdkenoYU
YxbkC+1uEcXc+RCEvOgm46y8sF8FshKC7Zm7pwr2CJQvVFU6302pWsYXtXz19ixpHBWbu6acF2MH
fXDEUgW1dfVIvFuIwtCddLYO/HaQ9c3wVAtKtHv4828/ws5AXx9YXIfwpdCi5ZzNyzyb3rwWCZff
iITL1+yzlP1ylmbsc7Q4X48iRZV+3lMlinV8v2Wi5QtnFF6ZH9jaV/7dD1HyuVwIuXVb/uSKmOVH
1RpR/T6X+RXx9Cvi8x+bH9+XP3x/HdSFjPCrdxayEi/28GK+kQiZf75j4ZsTloZzSh1eTt2B14dD
l/0gaypRtNnT5YSZjHynnfKiMMG2/iR8N2hjdiKjl/UkxCXIEhZRSG9qh5JZJOy7IH6T383Yb4nY
9VJUZVQ7sw/ugoecyY0LsXwYIENFzMhkKOlJfAYJcmvmG15v8ZqTdGVOuGfAsb7+5c8//T5dxnfh
B3sx+dPfHsL38/v/+e3udkp+egj+8U7/ZX5z0yZEW70Qmy+gLMMaV4QJO0/dvC5TjviGzovPs918
tWJrWtUmS7ujk89RofE8WS2hhbjffr0xCLr4bsL1cvkg9Fu3X7eMgeeoHoPDKmZwmIA77igISdZ2
oE3QyJsyaOSLNlGhDkkniao5ZODp6GrzbdBWXUfXVVjsxnNaIlplrmiNngXr++r+woCdKyNtbsym
rCwjYVyWS8EVcdnBLJ2y1aDa99gnjVaU5yqXCzmzXNyNXNzLkosJpwuPYk5yHXn/f+4WQcFOuNn/
PTLFTxcPysdEEOJJs6UWSF2VFsrYJv21htPBrWhBiSSAg/18SYtFGt7cl4tNlKzWxWaly9eTZVQc
/kAsiffshahkf/P6l5iW91n8L9i3B0YT+/bL9z+94evXqyQtotnDhzThPtN8kd59W9Jj1Pyctjrx
lzzzlqETaZVSy/RGHAchw5IYJp0djdstgt4HyxWvFJIur2HBfbf7o5rwbGMI4YkxvxDZbfRPveh0
RaLbXihpjbfNjuOolt26iOJIdFiqBzz5KCcfUXC5Lb1Ygy68T7qP7HvhffIA8hhyUci7ofWQNfwU
QF5VXhEPcDxx7+i97V2R99zvtP3m83/cpPiux8XlyQKtsnfbz5+OaZ9PrCWVle3eeiaFggbsoSSX
cBYWlP0iUMLB1a2nsKTUVv8jk668cj4w4dibFfv2/ay0PPjQUWGMLKJc2DYiJ4NbQYk4z6Xsy1/Y
wH6qzGm9fPIX4k9oUn7jX9lpjlsx33769PHDGw65giaKqXy492ZIHCWf4eJ7w04Rraowm4RauZHK
5gyNl1F4s7tVKCdR8JW41Nl9/FV1mbNj7cr89uACx/wo5A1fI5guxl42T5IyF+2mhixcjUZXg9ll
FQp2l12nXi42Xccg2jecLMeq16vEXeOitsiBpFiS1suHUy4vAVt/t49ZpreR8O5Up58u1syef6eM
+OADVpFbGzUywKiJdLVW88Y/Cfcopxg1eJ3sjtNYrZZSsaplaZ43JSEa1vm0dfzYsz6iFNE7JZPw
Ccc+uyQP/a8nzc97Xvgv3zhfpSL2jAFFDCqo+aKgNV4QJzXbGF4dDzwOIxzRUGdeBEvbqkpVbGVZ
L45K2jmYvjO4JOsHscPAq3JWVr9Qd3EbA8ulh8NbuVzahIGKv7G6CwO+oiNqQE8TBezdbhOQ34HW
44Y6qvg9FjJ8Oa8/beE2COaoAdsyzahGk2kaSgoWIuodqJHV99/9+u2PH2WRDFfEuSLmPbGvzHfE
M6AQUNS1XGdBFXfRlIpXQlpwrqPpGGdQrMPQQ34Yur4itv7tqUGITVpoqFIDnHTh7cHRzy7dQUTr
jSlaOOzOvwS9HUC0g64JO6GG3cNBVUv1wD14RVyDSZX/3xBBD+82ZvSRF750H9bCwYbce+Ddxjur
yNBXFKhd2UZLJk14KpH2p3f/01ADQRFkg2g4dk6LG0bH0U1OSeDN1Xv3Z4y0Giel7gwhO97e9nYu
D3lzB5deeV69nZf879+tHIuxlJtek9Txncx1+bSaAF2lAmRTgA2htsrSFSProXRYSJY0fxgl3BKy
jUkqiaqik468JnqzTwQVAXOqeLqvVrba1UpIpX6nx5Mfjy/12I7aNhVVLWPLuVYlcjUvYpZ3hkVs
m3vGvhl7KWfY1Wwoqe2YMI6Pw5apfmB48kfCqwlKR8cgI+nzbkTem1ffWntjso063PzEBUbAVa5F
JVptFCz1o5Ckifbtp/fffy+GgWghnQXruGg+hNvmoANzSATdH6evKkudGefkq+3EIeT6yuOXbu8k
k0aY5l0CQ09iQh9j2hwNGFyP0htt4rwMyOGA4CaQpZ91Ar1mg/N6b7Rc2Si5x0NkKF/pPpIrj1x9
+742VBizyekzVLANpQgWO3WGHQrntKH47uod+/dhjKEosmj6+QGeHOZoQ1Bt+9wKe3245eOuQuu2
mK+a9m62GHI0ttf+03S5BDtWuIY++GhM43XB3t18LQzk6W5c7vetY0L+z/999QfZVhMRe8i0VvZb
NbX3g8l/v5Qxr0/BVuuiDM4Es5LIOWbFTvr8wsN3y++G7m1eGNULw9q8cMoXll5996vvRtejy2VM
l6MQzsMRa02Dtl1j0OGDoztPi+SsLrV08T8nqN461Qjfu07tE3PzyeaFSzaf+JtP9M2LSkHuzdqT
nenmhX38nO1fEW/z55u/0je/3BZqarnuGCrAQwlBL5XtmI9k7A3dOZrohnf8QSV13z+e+JvxMAxy
tBTYXvflw+Q403T1sPd2s5o0jbkzzpg3pZO/zHnMnNf1LpP/MuY8PNvJy6irXenbB5sMM9jBckWz
nIm6+x3OeQcaTM64ZmLlOTftORo+5uDnni7XfWuJwJmolhrkQSfRRnWNkr8r3T+WNBPzlW5fb8uZ
NSkxyhY+ieXaZcKGni+OjWRU8mrPge4+h9wLnEN7I3ueOdRSycZ8bHK90nV07hjK99VBpuy0y5vV
5/wFLFb9caorRqb6MDKVVezH3b12XO+OoN/+UXmNXv9WZpCKLzwjj/8K/1aW+X/9Rc3r4g4jlZZY
Lcu0H5eiySO70NaGpQ+zUr5M5G6s7WfTNlvCJsrr7fb3TQI5tPyMYLRmybr+ADJp7b2le2cRC7NL
yrCkVql4A0il2Yk9okTKwiS18s4nZ2DzGGuH6T9b04QfynzXmpONKgHunSjY5pZUKF3zBtA1XaGu
nSgSOPbBP4sglOXzo4ohogW1okmuJfROu4uSML0Db/hQZ21v0ETK/pmnqNRJBBPLIOa1qGioySrW
4yKflWiYuI27zrPp9eHltMEXJfP98UAqFwH7kMfhFlWCYNW03IAb3HjjatGOypIsVYp11tozxLbG
GUMC10owzjyG5GUM8WNowm2//TOPofkyhvgxtOB56Jx5DK2XMcSPoQ2OITn3GNovY4gfQ+cy90Pn
2Yyh338MXXg/NNSgdx5D92UM8WPowWPonXkMvZcxxI+h390uHXIM/Zcx3BtDWgQi+lv0uMzojIl1
gciIt/xhhpGP0dbxwYn7atd8s4y1qGjkaUZV583yc/3KfPcVo1Z2YwJUFoCSjwzTH1Ky91VOcbri
MwV0jluOcSbRHhFXE3FIkwdYaIYikpN0fx1pLphn+ebgK0kY5aJi3o4oiXvpms/X60bXJMoth5JR
Uq8mzO+RpSXyCKp9GQK6KgiL7/rlevrgY5TROHhg1GS8WGAU5hpb7stsipsJZa8pr21wVDU2Cm9e
l29ej1RDtkcbsW0Z2U3fIk69eP36Mvqctde5tVXt+jUNbLwNe1E/BZ3BzqV+pxM4vvqBSudaL0rX
qy/aJS94OHVDRIsZOlrdGNVV5Ugw0UAV2pG+7cBP0bhewq1V1nOUyhHXI9PGVArvIE+185c3hz2h
s6a0AL2tXMRgzXBM5+Ozy/RRrInSoTQx6YWooVzRZK+n9CQNHzqXYO0wppuCX7s+gEcFynDBWl3K
u6GlUyZrL4IkZBQ1FCc3TXNwvQcr4vWSlK1QUrtqZZoOtx+13YFElK+CBFlZ0WAn93c8lqbm2fCt
gYRBOjcaH0kYNUmYA0kCjF+wLGvkmVOv/bonjitKrjz9KvA0jbcg3FSquL+/B8q9HnQorAWo6QrF
WFkyDbPLN8ZQqIO2HF12urIrx1vAQDGNgeQl6YGgPyZ51YSFod7oICyzc9lNw+grrK21JmxexdpF
BhKY1X02Xo7AOs1FBPmYFlU2JvhpD0xFiyrXUcTfpmYtFecDUVWJG4ySNdoZZhrtG9KbDcu+f/j3
JA4Wr44sa/ZmF1LcoetKL6nAKzHKADBUHi+2QiBfHMvAJQPLQNJawBtNM67MacgvAulWNYCjl8lv
uP5T00bSEJFD9CCZNhbK76VGOI1TBtcUoKxgMavK1ri1G1RvWBF27/g0oAjx8tOY3P5Yp0VNbNaw
YpPYPfbj0TwuuS7X9V2kFqeJxP1nnm0tZ8xeEdskL1/6ffmi1roUs2KR05UoSflEp7lWBBMtj4N8
Ie534SJLnqWGCIlibYkpNUz4Y690//rk9euV+NPyAV36JvQRJFydyh1TcEaXNb9LkcguchKE9rLN
yaC2+cYwZys5qUVTDioSSTcx80JEQrhI3HFFYnYuyjqKSEwhEvEDF1AXcxDZwDcf+uAi6WMWdbr0
OEU0DRf2A2lLlCQ007a+7b7rLepsgKJylWbFfoPpXf9hSDw+yjolahshayWV4yYPf90UF/71NnSc
VxhghsOKa/psGydeEsxeTGic3n3dLYzcOW2Mj3xsVXDwp+r9L2kcTR/2xJ4Ht7QS7JvVYnUErvUY
5TZkMeBSZF/XB1JtuHK6P7w+7/hlKlxp9/NUad97niqtaLXeW6bfRXO7obmM4Q2u1pueWZwSOOz+
H5+uPKM18h5z1jG7yabWyFQznElUaOskkrY1tRw19Mi7vgCEYMW51nVeva1dqiinryqpdu6XbZjD
ayBGWpjKY12lBQvHOp9wiH7l+fOtjJiBJcLnxlanIAyF/4jm2iSYfhavO3ea6TMhd4QcRwCYH2+D
7KtJOl/nV+aH6yv7/fVezcSyyt+7RrG5Q4otTNfckhBn3wuXHG81dkGSa67Sdjli0/WLElvOjNLH
onDu+SXXWnrSdAffBbqeLq6vF1e60dwy1x9CYrdpvC4kjYRNZ2R5bQP279gj6H/xFsPsR+zb4Wa5
DRbjaboiOGcXdygVn6ErF19jVU8LM1zWmZTtuHhns+RcNZzsSS5K8ogZ5VUzcPBIZZPhBbgL93gv
wj1EH3D27V5EsFYaVf7klbxz+H9qGm/BJoJhN01EgitzUq2Gm/4d5qSLm0HSXhzTbLbXmMBxyKhr
TmVjcqTaxqFwZCOya4enf6GwWXsvacLCJCOtEHWl5aE3s7F0VdVE3pNuS9lfffSld1vyt/HYS5QL
QoTaZjSMMsn9iul1EMaO8e2jV4vV23UWbwJo+Sk2XqR5gQmgVbZxyYRr6gTlbjzPdtts1dnKdUIE
FLf2XnROW/NURBRb7jC8Njecc+zxGR1mUEH2UDeT1viR4aex17iE2f7LEvbYlzD7JHXgHWgkFy1E
DdjeLRYEu22Oc82b43zF/gVf8Z9+VTXFuf6i0/nydCnAITaGPbAUTKQU2NnxWBCYil0n0sYgN/fK
21C63/Oau2KQAYBzl9yhB8Daq2B13IP6ihA4j2mWpqXrt35e7KCd7GnHLfG66J2ixyCGChopXM7y
iVjZdLthNbTy0lWriFjOd3l15YLeJaNtb0LV55GBcpOeJrG7qFgcXsHCq7vpDSKz1svglvtf9s02
Wy6AyQhCAzcDW9V4dRCaEI05Lb/zfrj8u1N9511sxXu/eq9X363q72j1c6P6Xj2Ht8Hd//vN7/Me
uOL7rPxuV+9tc/87cYh++HvEP6Rz8/np9HZo39N7zK3uvqORJsrrq3IwyiHYfmXDsNbtsPxqiK+e
+OqKr9bud6glPiHiqy8+KV/b4nWgXa29kLI/dgP+Y3umz9gnhhFcrR2XTNlX25ywz43Z5HWzqUqM
EUbMhks4GIOO2Mvg4AZHy9dZls6DgmqrIIL9h6hka/VDJTacD57JBP7hg/GxJYRmjLWn+73Ms9lu
xthmMNayc/pQB9NiHcQi6zoARxrlr3MUzoPrL7+81r/Wr7/8+strDbzDOba6rGFEMw3iWERJwYc/
Z2S5jOmo6SItrkGSnDEXte85Sq4Mvz6Ku7u/eW28qm4EjdcnyJF9MY0WYaIifrsLk8BdCfUzCbNN
dlzEB+IjbeLThxHfLEimD40Bx6jMSZWz90psOojVzDWGkUmU3AZxFGrTOOUhZbILaVTzcUXaxaNi
y1gL9m2yu83vs+J1SuzvIc5tQHYEJ/oTTFuIAfYJ48poVjNzGLmURLaH4dnjmhXtpbVJa/Gn123R
ZcQfVKa8dhXXN0lxoPG22Gq2fvnll1wctYm79U9zgr/5eldFie8P7UF6vjOKFOE7Fcu+cCmWoWZl
sBki4FHXRxEmvMdiBtJVPMXrAqvlfGOq0WPoksmkLUPAts4jl+5l7xCKRrxBhdoYZYsymdzR9hJE
2cWjyNvWnQXTgqmHdJO0SV3JGaTbQ1fbFNUZVpSNQYkoq8cd0erRR7J6uguUF7Evolt+Vbmgkpri
qPorysT6FRMqz3fZCfTK/FadfhqDijPnRaZ5wFP56R9rmsG17M2zLKrVArkMHib0qzBI5jRL1/lX
gsyvcnESbFVIlIdLgQThawP9HGI7vMtvk5A3rAG05rQuoyQoaCirVGn4j80GeiuxuF/t1yWs7dvm
iJIGz4UWMR6ftWlevKzhzBjDfjyybhMxXPAat9t7XaXc/bzkXY55/1rJWamDDItFRqlWREua7xWK
CBH1N1ABtZ5KdziPqKpuYjFXfPpAEsuCKObe8KrqNLyE6sNLZ88pJPeHVx40PVB0FWhY40jV7H5q
90a5aOA/5xlwmyzOk0R8fV0mfTbO+JEkbXUPqPSUXuFfX7P/VKkpGUd4Nlya0LyMyX9/Y3z5SP6v
eJ0inj2OAmh/JTrx4HuBsTfI6+ttgyVV02ikPbS742ucxf76S66d6lYnR7VYu7dBU6OAQRDsUsX3
X6+CoxRyRSJUdqa4nWtBEi0D2JPtumPtg7c8Sed+GSf5N/dsanzenibu7u7e3Jlv0mx+bfi+fy1+
Wp0XKuFOo2wai9qPN4au77pcVozxUpGbRpQ/8baa4hHfMMt/tumsmTMa3u2atl2Z3+7uwvQJnUfJ
jc4LVNIkvGGS4C9nURzfzNjp4d90r69mcJDRf9DDjVdvX32MKZ/w7x4+0ZhOmWRuKiJrKe+2ugG+
jHkyFTKh/MXm1PiPH6Lkf8RA3LwWV5AFvS+uOY1fb6IYX5d/sp0J5RvxpE5xK4iW2XdREqZ3ZYkA
vlyna9HmV8vZqzjU2JhqQZ4z8sC8KeIrIoO91JiSMSFqk4cVQ9Qm0dyGnfm2GsiTY+Qn1pU9OwpP
f7Wp6MfJbexiaNlDSYr3ENFK3zcYYWTb3mnYmPTvRjJ41dUYvDYguos663QSRP57JLkA1s+kMt6s
QWXyRTQr/sVoHk1vVllasIU4ShNtxWjgIwX73x3LUq4xbQUD9IEZBX03nu0NrhoH+2IZFbigQchM
UTJmoeltKWlptelu5aNta9hxA71DHqo67FDjZr6MW/u4gb4m1zvnfLOe4bidWK49YWLL19PFUcV0
kZHfyfLK4+sV1wfhC1gn4ia6qZCL0WlmM5QdD1I8Tdo71SB6X9QtiIAvUo2f6Y7EiC3gAgLNaMZs
HVPSdglVK/XouSWlQTanhRamvAYvM/fpfZQXx0Nvev3Fs6W/HI+aaIzuotlpr5C6VoG9mc6jY8vG
6yt+U5n4ZQIyJQIyL1lAtzRjq67GXmplN40Qarpgdng4W+7Zcnq9TbfTgoyK5DsasnVfm6aZmHZi
Zbsv1O06Fe5OeEgKNHaGXq0bFhtiumOSw9b+NAkb1j4PlauojB62TWYN5HiePSY1syjLG8bKx8S5
EV0RNcB89N0X/Bf8F/wX/Bf8F/wXfBT+7ZwhThccY8kI0fLo3xLvuIPJQoOev+MtpHHw8F7A/ZAG
YbcjXzPEPKM0+fTHmgnvDfvJsT2J8dY+YxmZ7ASLebyBkhA7IK+YysLtMAgmnBoEWvBkBi0KS8fF
iiZheZFSsQcea+yOYHtF/m7n2jqnWkhnuSZcMnX1MrvyVLBTphaE6ar4iRfrmWaSblK+7qngg8MB
5KNcO8dPX2fRdZDn0Zw7NNl4iEGJaSAGRdoWi2DOtxDUjpF90DhIZGUDLExsJoYpft/byhfq1hxC
m+a5xm+8AVeAa1t9ZbV9OntxvGSZ/QjWZnch8FhMcmDjYwnwUJN0fOg6ix+0SRYwWZR9pSXKYtt6
X1ELJzv7SNTH/uPm//3/FPFQtsMOy/xd8MbYMG2v27PFncCUrorrVcZeX2/zn96WPSwM1/bqpYmd
HlM4vqXbYh/bxESYKc/vBrMuZp6YveBjLc9WI6urD8aVZ1190K/e6eKrL76+E9L7zr36aF999G+u
Pr6/+viRverQt+uYijs6CbLpggnsepqlbL6kWTRnFmJePMQ0X1BayDcQVKx4A+BOz7f13vdwgSnb
D47f82grph/MEmre4Q2jyzoPciYBBZYjc3DEt8YZMMkZMM0zYFpnwLTPgOmowZyxk+f1rDqeavyd
dreIYqpxSMmGaugG6Q6Wx+mdFizocgtRP/UaxMLkNBEi4Yd94Q+n2QZD20aFgha4Y3UCm8fsGfob
wkYsCH+J7mmcvwvCb7N5DgfbkL4oW9MvTWZptgyS6b62/J5rG4U5LFku7jBdXRU6+/RzxPSE/7BE
XARZQvMcKpTuqYSdx//ieP+aMQ09lMIyzej1bJ2IKIwcNyCW55njEbdOInAvdUYnoj5KvoGyMlUR
UUQx1JvCQZ2zGogo6P333FVBPvz5tx9/AOegpT+ZOYieDO1iMQy/rwIwkE/rSZv4n9ASeIr42yVj
EAd1JjJr1OXp9DMthKmQXy8eJlGZusPdy/SWp20tgiRkn8AbnyrMCTNQOFC+CD43+Loc1BBgAfP1
RMTepVNeS3GvpiK8/2KatHbDpssVfHy3/MEwkzTRgnwaReDAYnpt4HCjJMgetOJhJQkQUAaUpZ9p
ovETfue4CBzQesajf8Jvl+maTY9gxmPoed1XyufMZJ3DFX88TBBYTwJAYIKyTjHA0zjiC4IUykDl
miGhuDwnlC2KVKTXwGPqKIUTRfHZIsSOSkGeJrA0bVspplhjJc4LtUhsvifBbST6MiT0TuPOGr7D
wNuJoUq0e1vuhox1Ig6kkTRsyLFUoJf71r+WwepNcV8rXYy6bDhJuhVbXIGY2k6pNp/CsnXtgaDL
uERmQ/CVaBVkMtWy9LFGF0uSa2Mosk6XCTy1UC5WPFq5XmhFmoo8LhgTdY2Ax1wn/EZk+wtw4CZR
CQk3sECthyiMdMnM7jyn4dYWk0c5YuJscah73nLYWWWp0syQzmK++JYTg7Or8cpBaZLOZpL8UH8Q
6E11dTYd2dsCtu0N4nmDoDeiElQF0Q6oOS20yYwZo7EkgcFQBCvu+sSFd5Jq9L6gSS7ZZH1d1fBu
YeCDC6YkMwqHiXLOc9LZFK3seiFcEJW4FoY9+zTY9pUBUwvjVFQ5l2wrsdThMT2NaTIvFrlkKdIV
Ye0dtRc8mowHz2Tss3Qp/LAguK0enGZZCjsWMGXqTwSbBVGsTR52czKvEttge8QdjIBlcF+OMrwS
YYrhdEWO8mVQTBc7L4BcAobhDDcG3MWlBVN+Zd5Egq5bw5KA0oUhlVFQgRkN3dQHI4JtVK1j4TqD
4rN1PalSYBsGAuVkdjrTIJkHmGq63VHXq3nGGG5kmwxGALO4ebAk2+N4aXV4QUIdzbrB32W87AVC
+WxVJBTFKk3iB6Zw6eeIAoUUjAGx3k5jGmS1KhWoEEsMoohDYhC3pc0izBfYJETlZeEgq8ZXzDCL
krXUo+QTRzFiWX9Va9hKTd1UjLkM8s9be1DjOe/sYJHdwlrruarh8/Vkd1+xYOeoKRtv2FyzUVHt
bjfwHL4MchUhilo4rZa+i3JiofE2bDasQqgrBAzgch0X0Sqme9seLFKUk9I7BbFtFA1iqsJkm9se
muREYygDE8kG3c0GFMim/YiYeCAWyreLwVpJHIm4oBMP5budUt76I8iy4KG8VAIP8pZpK0acxOkE
9hmgXCI4KOGFlt4kI4PQvJN84PugDdcbpm8/KuhNVAQiTgKbLIRkju+t3NcEWzGGq9uqsdIVtyry
HvYEBi5nNvfBzXHzfYWFuujEAzdPeMM2/YHgbiN6B0I6llLR8gWGybSqJdTk3reIcmBYdyyiEkca
MWLoylZrAZROfucZpkVa1SZke+z0M3ykUKqjqMFzCMbk9LGYxSJLYfU0dJVAsCKisjBwEPxEIg/T
cFF7AA6p0BrtOxMVRoCCipbCfC0ymYOaYHorn4AFzy5PGUN7wVgS56cqfjb30toqeJDtMT7KHMKg
NXRCMVBdS5EoB2dxyd2MrQxtFUQZ5YfgLEt5CE0u8u/3bv/h6DZnWAKqNRL2mSnDzuLm/AcbdUzF
QrFj47bovTSnFhcJjIWsqi5KCup5CpHExfCUDSRP2ZTcReuGqxpRmAvydoSGjomnMPVTIEcBY1sd
U/9ERCvzKEE2iFsnc+dceRT09sMqSrqsAwgXbcZ0ODoRdFPhIJgW0a0k99fGWIIo3H/TLK0crZqs
SpxBMIsdjs00+0yzHB+V6ZlEMfRxXNsxEfX0E4KJv+/APtfsrS0sdWe4tj2wBAA6akJwbW8oGbAp
zbe/8vPO+11fCVTw9QwoHePr78Z5A8tkEFBwhun+sNL9/9m71t+2cST+r+yX9oCiaiTqXSDYS9sU
XVx3U7Rd3OE+7EGx6FhbWTIkOXH61x8ffouUKImS5YTAbh9J6t/McDgcDudRlqntiHROaYQpHAUX
eh9ryS6biLJKebrsLY08q90WxnvqMZmgY7N1XUZLAfDIKIkAmCKxbhM0E0HNm4QnMpSjEeYB5/vo
jHJXIB9cKMjviTzPtuSaRUJ5rcXsdxvWeTE5T+TK25Fngl12FnTp4hYJ7HoiiQYtGS7hl5VbqDqo
E9O88LInMhNWEuOEhjLzoB/mubqtO/1yzFZs35TO5b7fp/Ejc0Ld3FoyfAheXltLJLZvmg2w14jN
03SFenU3IqUkhhqiGPteJJ7RRjz0zZNZQCYSkeomhvWDK/+pVegV7anQUF52DyjuFfeKe8W94l5x
r7hX3CvuFfeKe8W94l5xr7hX3CvuVXyJF9qrCPSKtMUqQTKjyQgjzQo6V5YZTbW7YJWkeQhXfu92
WymVEJoWRqRnXFLc0GzqskK3CJiWp7eSAQfLLL7Eta9vL3YN4d+if6ZLIVZw2k1LOdFvGqzneKNn
UMB4FHWkgOKpxHgsbZCUJtNaPXL1mBTB6pq0+CiLU94mXtdtIq1jP+e7spCq5i7bwJQoyC0SQw2B
fcqNuh3TvM53lLk1yUDRzQAQZial50pR19UMM5Iv0iSHjNk6hitxKWmVOmuarwf8fnB+JS1sYXH5
I408LSsZevNsZHgMUs2ZIU05SO4ybSVLJvbgv17iES7+RzLahQ518civgPxqk68fD8kQaZlUT1G+
vK1VJlOkUw4Pav3pYTpZ4o4R6A/zAOdlrafcs9+Zu+PVul+W6z43p6Sno5rF0U1yzWu/5en9eaKQ
4xC4+njWmhYCDuh2MgDJBgDdl7zGPfLszhBVfpEJrKfqrqwh6G90If9Ii+8zZCTYZS9+h9OgmEW5
hkcFIOMMkW89S5dxqCUpcpiwuWAMK7BbCH41j7GAM4hOvLy4+M/vnz+hv36lf71e4S5NvIbRnu52
xtstX5RMoyQq8BihdNFu3KnCUlgKS2EpLIX1BLGCW+Q+8usBPaFqimqIGYzjFPs3ccicsScAYAnw
sPZlJnj2UazxMnrFoiWW4PpAPBoiz9H3GXdpgcWxGjAWoq9k6eM2kPGdU0DriHQXqgHGPu7hrAvi
C5pWd5YmSG75titfEOMxjDFyPZEzipzrAhcj0+L2dD4P2vfO2CPj5sv3327++FaxjHyiyIWBtvLL
L18/IrWKX680Mp339Qugv379+pH+7SVtL7O5WGzpIxeLUjjH7izHkxFvgYGlP4fFLA0RA6+//Pn9
NZJFI2pFJnTsUYsgTkWp7krfXKTOnN5ccy3A9ZHs8JhIfEBYH7d35Uma5TUXblFJ3wZ5NFnLG5uJ
o3NE8CgcHQsv0S5E/zHV6lB1DkGr/t2uKUh+WWRLeL5iUhJSe6F+pU/FOu4ZkwRz+HYR5DlybsN/
PkdhTNMUEXF7Qqrr/Ysy5duvoJ+extHdrCCGYE3/yfT71RgEMUVm8fSSqPqZjUe70ugEcOnXruck
sUFt5qEDzP+Q8vVTNpllBOIJ9+qBc5p6+c1BGz9stfS+ui/AU6JUVHsVpee3+t2BySu1/YxkVHFu
HX2LHlHrU0gLgyLgpREYQukbEhavkkTGytrmqeTVug/NCaQkYfGqiOEFsDzgntOOF+d462NqZCjJ
JgmHDEfCY68q5rwJNeeuskW4J3cB5wuSLUJMEv4DvvFebsl6j6n6bY+od4+fKEll30rrN2pMxVYl
sMF5aBRLHoR+YKlFODn9pndKk0HfKNgmQyQztAeT8Tsl6axNhiQeTqatXPrPyWRIWoT//H79/dPN
h5HxMKzZKKI5TJfsBt1Ow/f39nbi+5qKkZiGjVAGoFiCIehErdC2d89OwO5oBCy0nV1J25mTaW02
J6HVNu68WHLUq1cSu+tTQ/Ia7tDB6bPMPhWcvIww57n4nWHbvrwLxwPacs1m2BqE4QF5DWESwVDI
hukiM8W7GxJK0eAiYA9dc/pe78G5vUMHCZnknqA7Kr9jhy/SOqH7YrOoOZSFjbNsRQZHtRHGDrUu
7OkLhT07ywMThGXCMwO9n5N1BNjeMCvBHgRlPQP2kUV4pFaYHTmyXeMspOCNYS94zZdikeYlm0R+
hEwMe1ywD0dDyF53lklKijlzUkSaLxe4HJl5evQkm4dZVECcg62tf2yT7cIe1eE3ouLLzbfGmson
iPFg5vQvFFotUiUVw3LMznQ0kMoRRS0djUZi2TmT5DjdvkVz/SzDF2m60VYmO3LWzu4qz6bkgoXu
FQW8JJfrUqpQv7u5jiYqsuNbnnU6IU1SbAcLeKw8Tt/KQ99QqpRHaPjTc1IeKjKlPJOjY5KpPK6p
lGfKKKh8Zvqyq1Ph3wENoUlJxxRM0vRHBA9mJ5KvaMsiinGnpm23qukymWD37jKEmPv39B+WiBiE
BKSYH9OUklDaM5I1dB35WhazUkov+hr1aWieXhTiIog/89LR2Mzfrb4SdSTH0o1fgHnW9IxFb1ts
XrV3Ze5dtVGe1kZZ3wIrjjhdb3ETE3yorCULn/7LvJNprz9tklSbLPMinW8yOts1kxB1fQTgrP4X
nLfebptghFrusS73YRBMi9MHmE0C9nRw3zSHumlwyep3LWTQ0+NiCcbGXMtVN1QVG2PoTn1ozPGB
0h0VGmPoTn1kzJHwXqIiY+eqLhlcQAQYkpfQwwQhXvs6Q3eNvl+2uqXLKGiBdV8/GJK+cLdp+Mi9
Owg1HO+yIWlKzpaQXryzk4LXyp5zRTeU3PuTO1wt0uonfM/3++O/kpgBhJEHSXibruBmghg/HcvW
ezT3bDIqppo5vjc0NQyDbJm9r8faMcDqkS4L9HscToIsZHcnBQPKhENY5Zrpp6fvlKvI7BDpu8ML
pWqNhienpyVZooXPop+0PJdfzm8fWZKrg39HS407CWHvnWL3x+3DBBPumEIBYfiV1NxGSZA9aisN
t9ZDYp9GCVsdPdfuDLZjHdjOGwR9fLMTqiyoYShLf8BEQ1+tHEdmC5kcUXbWoFvAFSPBpDMcLYDb
Pt1Mi92IU5Z7CHxTIoekZfG6Bm+za7ktSTTFa2Ne03uYZVHIDtEbpiORP3Snjx8ZOup4PYOYuiVB
XqfHGERYg4BYBnga0hqCkSekWs4v/rkxgqT/ZqGsibImypqMz5p4yppQX262TH6QZ5L0LsM3XHiP
y8XgagEnBQw/w+SuYD+aAFcmexs6iixI8ikz/cSwunMbpyRAmYTsyKBlyTxl9tE0bpzC8LvfU5HT
n0CSoUcnnvKfPmxDIoMSBk8pLIWlsBSWwlJYTxBrnWLPrqf2m53FNWXmuOMATmqmkDjw9+skhkF2
aXQKADZGPSmaoZ9EpEb32PwkS5H3ve6dffDiw35rM2S+bhyAL2hy/OGrE9d9NR2nL0KS9EgQhzuU
UfZSoE8bDJ9OnO8R//mCT2Zw8kPbGE/GVdBTnD9zhetsY9e1bnmRZsEd27TpR3NB5TK8O1noCCT2
0QKMvszrEX41bs9a/iv98+W//6WtZtnR2lSnU6tFUYvSv3DOdV3MJ2HBqt0yVraMZ7vKLR0L/kmF
/6xXXhvOMwW6WnO15s90zRV4l+N8rw3OIkvnC+ZEEceRyXV1KrNl2KbRp9D7gbd1cbHv6iLxlFtm
42ijEWJ9tVYFPsOoWZ35PR0yxcvx08K6TmFbHUWKmAE7o8KxJfLcJSulG3uc7rF94rIbTjvdVzKE
RTCZRckdjYCzV84XmXUkvHBwMks1PMmVdeCKhf/6wJIgPeZsa9+UKDsKiKu/uWVBEjZZmE4+pzi9
/iM3qccydZlsHQCS4bjMgKXpyOBtOccpYGE6D+gdn/3s0+x0qHlpI73LsTKymrZ3XzBS5wK37XOW
WcwxwX5DtkTqMkgHNfJ4+N8XH99n0WR2nJSlIMcKWVYc9smt6z1y9+KD/sL/+OKD8cLT8Z/fXZNf
AfnV3vv6FflVP34r9hRtvdFmVKsPSabFDe1hAjPtju0amSINzWqQ1iVg+9MeGNkRkhgqgoxzaQBC
WcF1IKsJpOMimBAm8DtD7JTmJ8xSLaZpzq3Gu9UyU2SBtgjwwV3wRisI1aruAXU4Td3OHFFHGJc2
apMgmcAYt9kJbtOMrRG6ZUtcrj3wIl3jM/tDmrIYXSYEjTBY0UMI6I5ENg+/oSE/jJLBZNWSiQyT
MIZ5jr7fpsmh/1avBsIpVWGQ3KFdt8wrx404rt8IrfdENRHeruL46/pK+onPG7Dr+x/Vou1YM4Bt
cEo0ZPB0yBCTH8PzOiNhXUCOVhhltJKBbfvtZkrx6frqQ2WMhML9j7bXo6+YyMm7rNSj9U/jH36J
3cNLUzcOMkcNCcrEQzy+h41SHKBpIu3TFod5IA7zuYvDPRCH21AcNVRWyqO74KNkmt4kX9bVctfY
HW7rDghg/Y3EXdHwxa/vCSIAgrzSAFnce0j6WrPDWW59ULwFUvkQBp5v6KaI6EAlFvaV8PDdYl3P
iNP82Xev+taPZbC/cw1HXrWd1uG/zoIsQTrx5u+8NE8OSEfJIO6AWsZCroDdCKrGbVrfKEvvgNYv
puVJWKY7PPicfSXqrgU7NijQ9gvEdKGvHTT0Ybyy4R5DveOSZXP7x41y3KEJv7NOcIPUagqkiDtf
3tIjI80eOWtNNOnoaYj+5ID8M1Z+DDScpxasvQP+qA7X8xxZKC3vcef/2UyzrT6cNWfnuX/2h+vP
19+v1cczP555m1Af/u9/fby5eXf1VQFwAb5dX319/0l9fGPHgEyt0XjTfYAL9Odxyn5IfyuU7zEa
qbCqSGzLVJ6q8lSVN6k8VeWpPitP1XxCAL34ek/l41lHXxLcR3e070k+S5dxRXqLB/zOcHtDOHfA
FTlWenfIBD7EUQJxYskutzHiTO1xJXJI89Q2eR+MwVCWcWZoyTKOt+U7xymEjtPo82seY0i2PgfK
6L5KaUKTnCDvVdMVevIxh8o0GgrIEBPbpoUqfXEMiiKLbpcFp/mX59nSgLfFN8hg8FIMgWe1ANx/
SsAZdzOYaA9BVJD0WjIr+c2bRlS9xP/6Y5pdGi/n0Rx+f1zAywKuiouTknz4woprprh0luupRPZE
D0T+nacJl8pFHJSfGAXCKoZVo3C0uyzfQIikZ9WA9DdSUIA/shzNNrJjSMJFZmqdrUDHh3B9DsN3
vZ4wyfqyMUUOGOGl7dx5UWEpLIWlsBSWwnqSWOzzmTtQzHH6cglIw4L1j7CvFo7QXcYeULQKS2Ep
LIWlsBTW08Oi5/ReeQPzYcJzJQAV0RzimdNCIUbTAd0hFzChqcNkwCjX33FFikRqsDo9IZ3ws9d9
rOAqmBTaPChIhx3milhO5yDzfhOaBxofw4PItRDGwSPNKMdlPfjN6hK8JF+9NHRdL9WlSNxiTAFU
jAI3dVtvDl+uv9l8BZHEqLwBoM2WkxyvRshyItZ2vxHrMp2tY9biy5bmrIopw5Somkcx6yCO0wfS
AISWS1LNvXxV6tLsD07DC6C/Qv+j/8ZAjO6PQSb4374wr16Aj+i/OJ0EMe6Nhr7ilS1aK/raPahV
nsIVW6qvQ7qFqvUu2Z5JpDsF/6f7o9kyYxfqAX0PDw/gzShXfqwqOeKVnZ6H4p3F3hgvcSOkbOxW
rnRumB9HTyI4AxLPg0pz/CTaZ0Ak/m38knyPb1AjIBNTsCXz8837q8+fbr59H499PKBvhPZbGwEN
r0YREdBHoc//ePWPUVwLwCv0/xh0YyR25tWBPRwfRSM0La/OIPLxip5kow/Q6KMnEVeCnIEkD+iD
q2C+iOGbBBYjkeAIyDiDG9vhx6MvbAHQnxu/j50bg2qBWr8a02I47WAiEu6NzG3XZXt6f8JdD78i
Ij761gG9rEbmet8i4UnEssEzlAhpKl+hJUYj8JpKx7MSCl9PzGcikxw3yhcyJpY5yq1jidhXp4NE
uDoi0q61BvnsBFJjSiyrEfa4tk0nmfC1xHnqInmYRQXEXhb2hBAt7Il+Iv1JhXcL7q9QHvliSURg
8RYttCAMcX0pyUpi5m4KpSQ1F+uev8lOqgT94OLvs6tnbd3qBXEnZJjTfEXci5hMtGMS4rr908HE
1fvZQBmcp/cBexO5utELZrWEDcfsfqQQI3kbp7cHk674RwmwLLcv0ILUQ5XSCQ3gGT3a6qPbaMnj
tE6HDXyFrbAVdp/Yrtrfg2Ob5nDY+9HFtxcXW9y3jLeDpoQ1ONu4U7x9VwTT7elwOyE28BS2wlbY
fWK7an8Pjm2C4bCbHW7NCOMebgcjkVmhNaGivRoJiE1fduRwRMIZt+kyCYPskd2yU6hxngyenO48
ZbhSGqkFJ2jgSQDYTTCkUIx5XEb9KCZjCGza+HAQ7BBOg2VcVIP3JnBQL3AwBDZH4OC8BB6Ej2Sk
4mSGZytrQVLRstg27Ba29cGcXAjOO3Rt4MtE4M86dGQqK4nGp3f3pTmH9rmAHGoBZy6pIQGITvU7
fAoH7ACs5zfHK8+c3c6aXfsO24Qb4jtUbcRF/PjmsARetAlHB6IAuOgOKCT1ymdD4BttXOqxib85
Ve6Q4mcmbBnu+UreG1ryXgvJkxYxYbq8jdljpIBvNkduLP+Kf9D32jQmeNClYa+J7QywJs9W7kUW
LeZRws4gNYRa4FSwmUN0C4TzhTaNYurP4j+QnhUbYDLWe5m3aHgkaHI2A+RfiuzIrTiOe3C53VZ8
/3MRRfM58rYvJXB+KolXKbQS+IlU3OwmcVNJvKGKK4EPreKgm8SBknhDFVcClynwzbg/dXKOy6wY
3SRuKIk3NCtK4MObFSVzdedUd04lcHXnVHdOJXB151R3TuUcqpNT3TnVnVMJXN05z0bJRZ51OWlV
7rm+pPsDv6T7NSKHSZEFONM5SCaQWTHtCI0hqcOZwgyyRyvrwJLw+Rsx0rztDV7Lzh6jAiMzoWCC
zBBnzpFgwrsv3hdCWxZTzWubxN8E6CFKwvQh1wxgGww8TwIc+X0rQGaepmkKjff2hyqDOCsg0xgI
yPGlawOz/QiQILk9G4FTVOFklmpB3u++oqxNs3SuLdLFcsG2FZ5AbjrQ67YwHcSzLnhKkX3KspRt
3j3PkgEob7zgibBE1YR1jCgBKiyFpbAUlsIaExb1AkgDjTz6CdnelNscqbJgjLoxpisy3VWUBThf
FI9akGXB4+1yOmXfVIHpOBJX6CfMUi2GyV0xe1OeUipTF9jxCkumDlQ61L5uSuem3LnQcGWDAAaK
JxvEHALEGgakrMY2kL8oK0aISv6qDIFiM5ZFpKeoMAq5b2pJqk1mQZbDgt2nWZ4ZwEOOSfn1rhqX
cymUyeV2vnKL+ck1IDnEteT4XND4B4PT0PQ0iRgE+SSKWFEXTw5vYVAE2n0EH5iMmfrZMoYVkdcD
wAXdr9TTND3avaSS3bTkkL9MQog8OBiS7YQng7AY8X0wVBBCGycQW4BZFMTIIdXCdLKcw6TghMKc
oXgygQSmCrRZkzvkNS7zdUvqnP06Zsh0U2lodoPHYM2SYGUjPIXnsJwzhEmEtB/eo+XLqwv9Td0c
igYmvFDPW2Bs4W++fP/t5o9vDT120b1hdGSzon7Z6h+erdG+0QvyIkvvSCtyPrbpCF1eDFErQfFz
fDM/Rkd761fSM+zYUTc9z9G94agoeWuuYws9G4AGKt6IBNAMnbn+cyRb5Acvkx+5tnVYC7hi7mnf
Mjoj7njdx2YJ2BAxX9UNOoivrQXTAmZaAouHNPvBf5TxhZwsbgeYzeejLbWMgwJh7GelhFE+SZME
TooWxqsh5iIoZpcXR/l7Io1hFZACUkAKSAEpoHME2hy20k5ahjuBrpnUn+DGUQzPMLpDLRe4wSG6
AaBvHOQAsS8DvtCLUntM7IbjP11i3/BixbgHDQMfzYM7eJHf3/3115fPf3776y8GKQNJIlgs4mgS
FFGaXORpsOBTJBT+kkDRNE0vboOsQjT2MIQY6GPfXX09PSFIIv9DEkFS+VlBjD8YMdqYiNkQMSaa
XrjXoyIHGHLI8SSRY42KHPt6VOS478ZFzodxkfN+XKpsj4sct5YcIZdVEjmOPi7pmOMixxnTYr0a
jWyIc85M0hoGn3rni+TuVPjJfRBH4TG6MaBmStq3vqQD+t24yPkwKnKANy5y/FGRY76XY2RlkXM9
JnL+OS7NeT8uzRmX1TGvxmUEx7VYAIxpX12MS3M+joucQY7P5SJOA5wqSCLc2zwEkoagBUWRRbfL
gh2GFkxh9WVkjwk4daYuxij5jfDHzAsQyZg1h6ppbMRTs7UTSdiVw6fktcOpoWsWa55mhGbHjXIt
j3nEX+OwaD0RFsk4l/VPsl+9DNcYJ681QHewYBQ5SBZnXgTIfPPNmkiJw+j05DArjp3BfIYbQCDn
0jBd5+z42raWwEl3682dZiGn6Q0w/EbAJ8inrGM7i3AaZRov8bOwli5gFmikV42uW+xiEq8z6F5l
UxW8Fk2zYM4sPXIcVyIVuPJIOySFVdLVq7Bt5pRLzxxI2HaFsF3g9Mq6w17hoVh3qvRMgrZXYbtM
UMsZiHW3atVFqjFMozXrHhPU7Q4qxrpXwbrtgl5Z95mgInUZUlj3q1ZdyLC2Zt3Q2ePLnWFYN/RK
1v3OVKxmGfL5lgnvsuNIWGQcc6lsJGd4QKI4D+DK8RuhE8qQ2mbL82XIcO+v2udvX9bO1jXx+A7/
ls/SZRxq86CYzNhuoAR7cUQRDWWR+utvpCaEEvEhyheYjGveZQI4ni1x8dENN0ZyQN8/aj4imJ9q
yWD6j7So5dsQ6lDSkJwwJHifo7yACcQ7e6MY7H1nSidhMoOTHxpusbgrxdem6GZiIff4ISqQfArt
Ng0fmRdmw+tMz171E80lLgEf6oUl1pCkjRRw8SpDDMxeJSKlWHs0fLq++lAiIkmL61VULhbth0Ua
RMeRc9rGhtMi1JK4orRdzkG7xvImF4nPN2Q1i6dYpa/i+Ou6gO8TqUvmlHd3Zxnf774E5WHydGi9
LptBpJi3URgih2MO0UYJ0Q1+NYELcq1k2g2RwFYzEkhei4Y0mIRdYajl93dv0P8lq+nYEhWKRFAi
pFAMKMvz+maSKVxXglFmcbhiVRmLBLws0ITHeYR0CBuFebRCyzgJcnZ/Lt/tjHzg8tXRUDYUvTCf
58jrJE3Ma/YQENrGogIIU5gjvYLY/JfshS+dzWVcRLiqHV9SmNwJXUibgeJuQmvLT7uX1Xk3puFI
lHCSvqfo/2/vansbt2Hw9/2Qfktry5YsDyiGbuthwG444NZi++qmzjU35wWW0/b+/Sw5adOYTmSb
UhvFwBVog0MePiIlUpRIfa5apyVi2qEVfWfKytmBWScjJG8knA2Krzqsdrzrrct2kzpQtzp18tq0
76bfXkrzgYVC+jufEIuAIfMjnY13y7FWHd1VDFX5eTCrw9BXxcVjmufT+/RlWd426nWLF3A7wD3j
ouz3UnHIsSVQCYNxngjQsKOWdn0gO6Ha28MJAGxeG3O+SZ+LA64vRBjVd+X471+fD1JEn0UiLda/
VjNGeod50ykAsQL/mGSrhswkpoYPtoLCXyfUxYiSocapMaEs6j9nIfxH2a1O/pIIkeYqNzxJptkq
h3WOsXR8EDFedb9u9S89Rr7IRndlTFIKIrsVQYZAjUOr5VvSL61jPqqaO3WVJOhikUXpueAGbNyL
e4Nu7yieqhtuMnc2uk+zRGXOfpkWaa4qsi/pmfr0knq7IYRnhLwJO2wlhTp1H69EsZjta4TnE53W
XdqK2AHsltVuz1N1g5xkCXxiE+qc2LRDXc1FMklHL+9RQUut53UwrXYPcPE9D3C95Ml2LltoNjY/
GsF2cLY2Y68dzBqbIlJOEa2/d7fyDtzgfnyk/6om1+7Fqj7fqo+r0yQ4KxhxHw1dTu+HJJ/LvMlY
iN10ETXN8/z7blaBU+bbGtwaOPGNKzZfzeflFrcGzXTa6IasadVQ7lm26RVFGRGpQgb1YOL5+UX1
T8qi1C1aa+hMfeenRX7pnbPqj6vi0juTG+ebl0LYZZZM5x3mJEfQ5GI+S+B3GiOtzD23NlkQ2dZM
SMuCYucsiHp9xnSTBRLwjS7WHv8pGO9cz4SNpgqeotAew5rFhDpvI1DPPZMh7lEKUGwkfV6W0Sc8
GWLPuhh1N+kxNCEQ1nMauGdI1D1KrI9RrhM70IygHA0cwxgxaNZmnNYdE+peYEq5W5RC72fPc4+S
38vmf8zH+/YOFE2AvtMbk2p948A10Hs59uJpOoaXUO6hYWOMMQLLepR98BYggOzC3KTuUYrco9Qr
JSH7Qm96AMDpSu4HaEIgzHDfPR/o++5RChCMcm9qhwdeezFcGNnQPUoM01j2ZED4wYt/+tJgLGXM
PVW6t+nyYwTr3JODOFhQqC8Dhk3GzimQuOdeiXt+jYQY00xtkqs/4FiWo0mCMNn6cX5Dtp72I3F7
AVywI/ecKnFv00ownGpjUor7BE0EjGnunk8N3POpAXGP0n7/8pTejZLlUlx4Hlx14bEYFUTdRu3Q
QK0VCtkTbHNOTECNEqBjl28E6c44ElzITDgqCEQjQEUYAwgUEyFoaMOBamFB05TxwyOECRuaLKCu
MmEjF2YHBnXIwM58cYw6G2kjlQgTJupWldkOo6ICVDujaoU3uEtULtwKF7gpml96a1SQRhPDXPV9
MIxhUYSKoaiUX2xcM6ArjnyKimGNDewvgxiVDujIQk0qXBcF7k0bMVQMxUS2mNpRjNx2orKh8AJA
IlSQXl5ZGwZemH2txUwT5HVfWMJVrKCHJUh/RJXlaKhdlV3ZdktXoSq7yEOT45X4Ov8yztOkAO7L
0NgApu4oVBqplyX50TsKVZfH9+LInGbK/wEVC/TXSwfqHQqq38pxuG95R1mo6omKN1HH2QIuOCQe
MaBrBddg7n7IqClIW5Nr3b8OMCCd1FdsEy30tNA2HfmSpoJbEgZoYDVq64p72GAincxYP2QINOLm
UI2q8tjRwH4ZA1xHuNsBrQ/a62HS79efr2+uB0BEQLC98ADXDe6fPz99+fLr1dcBEhny7+urr7/9
MQAiAmpEomAMqnOxWhOmHgnC0SfTins7YgIJCl/nclRnPJOKO3Y0K5HZycDdDmhDGDjEnUPcOUAO
YeAxxJ15OknzhsdWYhMx4Bqw6VQoCs1hAnX6OveStZ8DqVopb8DqWtM5AfhIYJuBFA9Jnt6/VCb3
Of3kJtT7Vr6mQ9AgChCH3/Bp25Yc73/a1slMms/edG6uWt4OEatoQYfhPHxSRRkatF2ix45mZY95
MnC3AxoOmqX95SkBWtljngqctb1leGKQlvaXpwTYOk7rfpcotBrFnAaalRjmZOBuBzQcNEvxyykB
WolhTgVuiNCGgMm9CG3PiQfxWG9Q5Az9BwKDh/P5Ia9e5JYvr08WqznYs1Sr/Kp1fLiDW7/FxJgB
1J3WIYeECEITQmw/hl5rgROhAe7nCta38eNg+zhNn9L84n41W14J+a7uxViIkSh+ZKl4SFOohjDw
GRLUVgHPW9D6gzaEI2Gq5+vlIBZ5mo7SLJ3JV6Krx5LrXEOKBDvJk1lT80+OPpwV2ughzZblMlin
FWNpcJYUD7MMMhKmc8RJNSDE4zfo+zlD+v5nqZNRkUAoTOuQUgslm87/g3gQNB6bD0fj0jOJtDTq
pXq3+hkoPObGQFfFhIOQ6DwhfXGOZXbPItu/DBKGNYhbPlVkZm19BX0/0aqx2/1+kcmfolxHk7mY
LPJZ9Yrv9+QxEeN8uixG91OR3GVw93aqU8YPYb4ZLC10gHDoWwMX9Rgw/Ol/UEsDBAoAAAAAAGFM
V0QAAAAAAAAAAAAAAAAMABwAY29tcG9zaXRpbmcvVVQJAANFMQpT3TIKU3V4CwABBPUBAAAEFAAA
AFBLAwQKAAAAAABhTFdEAAAAAAAAAAAAAAAAEwAcAGNvbXBvc2l0aW5nL3RpbGluZy9VVAkAA0Ux
ClPdMgpTdXgLAAEE9QEAAAQUAAAAUEsDBBQAAgAIAGFMV0SNyFbNfQAAAJIAAAAuABwAY29tcG9z
aXRpbmcvdGlsaW5nL2NyYXNoLWh1Z2UtbGF5ZXItc3RkZXJyLnR4dFVUCQADRTEKU0UxClN1eAsA
AQT1AQAABBQAAABdij0LwjAUAHd/xRsVTHl9L2lNEHfBwc2hdEg0CYHSSIJg/fV+jN54d4StFEiC
GFAbVgbbRncSLt6dS776Wgfudro3jDyCGPafcLKLLwbw2Qer0FkKgfAAt1Tvk11GA8c455LmCC7H
R4Xp+0NNLw9rZqWkZGrwxxb+xGb1BlBLAwQUAAIACAAXTVdEHySlCagSAAAFGgEADQAcAGVycm9y
X2xvZy50eHRVVAkAA54yClM7MQpTdXgLAAEE9QEAAAQUAAAA7Z17c9s21of/30/ByazreFKIEiX5
oq274zhu43dTxxO7TXfSTAYiIQkxCTAAKEu7s9/9PQCpmy3qYiWyQyIZWxeTh/g9uPDgdvjhKmHO
L6TteHWnetSqN1rNmuNVa42PzodbLNhH55xR1XKuiJSUM+cU+z3iUOkwrhyfsw7tJoIEzoceZfqw
qzfZkebAj3/7sMA+mKA++eicxPpY16vA/4bz/HdGB3vO5etLt1mpV7x9J+LBJynD0QFvY8LgOm61
clQ5HE4nAiFHEJlElHUhfSLCocNjIrCC9Mh5STkYJYUIwQW8+iElTDk176BShf+1jzodznsAATZb
jiMVVs/3nA8/YacnSOd4t5MwX5uv6L/s/jzz8ScX//yxZc5xOpiGkMIOF47bx8Lt8DAgQrqxcNsH
h0OvWm3W94Nq2D/4PJTtL5/r0W0V/nWZe+3GXKqKimKHMsf9g4dJRKT7Civsnr2/ct+T9r+oct/g
IU/UNZFKuj2lYleZt8CDJ8KHExRP/B5SJIpRB9JSiXuxAxkaUkacWu1HINchgoiWo89uue6YQesQ
EuL6Jo90UtAtVT1kPgdIJu3xJbTJeZSPllP+BVLkBJyk5YoMqITCtK5WH7M+BqQ9GtLYpRHuwrlt
7N90BU9YUIlZdwWZ0zZSu5L4iaBqWAkEvj3XZivpYZWeisJ7iputqrctxXI6h2XIb1HIcQBlFcke
IUrnCKIMmWQs1w7WoDjcIHiDAipxG4os6uMwIWme37/A2PgmKKQvaKyc3c3UByTEQxKcUuGnpXvX
kO3orHeg2iVM63EUNxVyJRi8/Zn4CqqLQpl1RCNQ3u8+sZz3U9GQsA11ITKI4U8kyBXY3JJA0ger
qb7pTAarn8DqJ2N1qdj5RgT5ksA1EONQeLUdOAhNHbq4RNfrWyKQVbSphEPbDa3QZ7lU9+jUWBD9
1uSuNpqraX/LmsboMaCvra1nuiGae9cBSQePKckriCQJPoPxFqDZWFmSIBHvE+TDPTRAStBuFzwd
FGMhSW6taqzQrvwuSQjOpZNI4vCOgx1wpKhp1MEx6nMaaF9QkYFywOF6uKNkfBzM4M5HBO0MUW/Y
FjSo+F2aOUvNihVgBVgBVoAVYAVYAVaAFWAFWAFWgBVgBVgBVsCTEdBsbGnISJ+P4Px0CKwSxWT5
UHREAordPg0IT4dc0R0rOWNFjynqqSdnv1Wtbik5jWoDBVQg2eNJGEwStjzfqfRd7NPAQzEdkHB+
Pn9fSnI11JZruCBdrqiZpW45AZjkUMf1ZDFoey73nAgrv6fntLOJi/UFmnRO2hKd4rorkzjmAhoV
PTHqPL/g0Ir4GoDTJg7L0kSCvcrqGOp5GGrbmjYySdFGwMYaeUiiNglOBZa9vCFq0HC4TQ2T3OpG
mIYIS0kgszgzkwSoI3BETEpXEzjPSK7Qo8cRCpbMbO0qM1x3Tq2LAIWkT0JEDZl0vrodcv9Gz1WP
Dpw7sbLf8rY1pYcD8BXgJt4mqicgbStNqxip8EuaWXc1DEk2uZ+Tfd7BNrNP9aispBPKFW2wAgYr
6Q2qSzuricvmo82KjcwTMPnH2aJiWhad9drjVMfxu3Uro5nKHM1r+pj5UC1rueoa21TXXk1Lwszy
Ju3Fo3R1CjQhMcG5CyO2rcMviA5SEB2fC6LjpiA6woLoCAqiIyqIDl4QHXFBdHwpiA5WEB2iIDpk
QXQkBdGhCqKjXxAdtwXRMSiIjv8UREetIDoaBdExLIiOZkF01AuiY78gOg4KosMriI6jgug4LIiO
akF00ILoKMr8R6cgOnrfTsdWV1x0v5mORv2xFiOM9j7C6WG47hzoQIYKtc3WW7PIJhG0MpgrsFlf
NwhFwvQu/eex3imqBmpuOIr0mKmAFOkXWUiKC+5odWaFkd4bH1BBfMXF8CEhJhju065ZvTS7G58o
guJsN+s40sRyR2PKXDpRnu5gZigxs+Soh1kQ5q/S2dpqvKl0xnSwjqzJWyj9KXqoDT0SJFAtfL0I
KVdc05aVHKj6bORzfkOJpTePnpzF12jU7+MTXErEBe1SZiE+sAhahhszlHoF3yKEB63q/reLKzNX
3WzsG2N58yAzU1easR/r+94k5M7kcnNIeNuK3TEKg+TOWaW/VOnkZKKyyFF6HSQfkGwtK8I+YJZ5
+b01lVOrpNtEr4yek5itrchjnBFda1cKXTVGnO6o0BtGiJhpj1LnwstjvLXINuOUTmBTxriv4/D0
KTRekUniZ9zHadFvYfD41PNnv5ycv2k5OI4JC051eJHne84LJ403kn1+tvePgPuQGqYqbR4MK2CZ
iNfXv705fvZT7Jj1s9BocrjULaHdnmq1eRj8w+chFy1wx3Z//gXTMBFQiSGtetX9wsv9tHq2DCAf
Xp1dnJ+9Gi1SlsJHOKRYPp0c0cwfXdKJ0mHqlGlGieiTyc1qfWUPEhMR1eNB2gJnwmLBFc8V1fgO
ROkARbKHA35r+t8gKIYGQg3XkNn8DmQK0k1CLB6ir+ltu7pRyUM9+vGeizBwMRtq92x12bOnpyHM
csU1ty1uEIX662zX0uqqQhOSjYjpAHe6tX0P+fjnb29ew9nvUpu5Wg9W2rep92sm4GFTRaHN+g8J
HBPs0Pn72cUf/332+vr68tPbd+e/nl88+5/2kn3OfKDNjMPmPK/saY9PKmFuEurhnNKb82uCgxnN
MRhWIzd4vM/zsLI6yBnDmQvQM59QhwvUJfkAjzYCCLAyLuTLRmigXp8kAYXmYzoMnt/jCNhA5cbQ
1QhTMPvrkJmyazYJTXaehgTfgB/um0y2eObiMWZE3hjc4UobNwuCJx1xAnt6Z09uiTlcaR9oQZCY
vZQILCGfB9CvU5DwdqII8iycXDgWzQwapgQPkd/DwoKZAjPpEaNEhBbNFBqWhLbA3KViWbgdnAyy
AdSaxTGNw96OZ3DUc3F45cHBRYTwYke2XDRSGDpiBnhpymK5h4WyOFHFolLy7NWOVNrrz8ZMV/Q6
y4yIaes9AgfOnaUFOvUy0jFPk+EMpPo3ueWmlGSyUDCLfPR6UdrOUmZw1mCa4QwzBR/wCFNma0EO
pHS1SxqlyzKay8i2FMXJ4MxvGM8bIByG/JYECwbJGxZO3cLJhbMJmkdbtLEc1j+/HO/UT1PRO15V
Cv94d77d3Z36GRyaAYIPtpxEq8xMlg7JbH8WRVwQRJjPzaPXLKX5lNQt9Yl5Z1ARe59alZS9aa1K
yoLKATVBFFhG7nrDks2ycUmjCaNfX/5r8Xx4WcFQZp50vKhDXTo04FYH3Lc8XP2kZM7S2NxfowZ9
5RXV8wDMiZml16+GPQ7XekiPS2uWRB2D/h/S3lfUzbpe8FKDn4zQ8c7pwdt7u3TG22/SEc+9nJ5Y
OcuU3uUGdoPvoWD9NfDrfw1w42uXr7tl6rS+c9KYKlVpMdrxDkZ/OdigDG2BU/VrAkIB6eAkVCOX
eIrXi7QGelX4eTGugp7n7hxW3Z36y5zq53m2Bk7VQL0N6uTq9PzcVEHvidfB6reqfI9QmLbSZBHv
r8Eh/GB/m7VyF6jtTmE8yMN3MI/dvq2I+ffC/adSsDp/Ddr6J/imVdKWpPVLEqTZvxk+8RJU+8Zu
lPbLd2ddqCuTmZWO4NEpVLFTaLmeVwfNwx/hV9382svzrMpVkMYLEHweRfiJF6TBV+/vhYmCT8c/
mt6ePylSg+munud9+PjDFy8rWrXUFfBLXnZ0hB2CzMZrpGNMgH+gQBCRtjGaKjn7O1796CB9rVUP
R29q2ZtaY/RmP33TqGavR9lrLaeVOngSMO+NgHxVz9MsnjRP/gUBtDPUtEkY0eAYMzhQvKHsJh2m
wS9osFN/Nfn6hY4QBd/oqmpADmppWneqRzq5O/UTk+Ad79D98+pqp9p0d7yj1MfXwvVsOn44+oJU
8ulFrAhHMRE6dFFuBS8pmJX2bJaUzdKbwmE5uSzfs1lOMBZHhiMmTCJGbsE5ZwG/tVzcCId6/xUJ
jLtpgUwB0TGgdHinbFlkFuimZhktZeRZRksZ1S2jpYwaltFSRs1cRkeWUcZo3zJayujAMlrK6NAy
WsroyDJyGZ8Gs8KGu/KgyfYprxmbq8R8lo5p1KqlhWORuJN9/yuuXy8lGwvD1WNf2cRi9sSjLNaI
ZZOymQo4X83tnNdqBdkaXytPdB1BzBPTpmJDTKIh5OZzifHkMilPNIWpsvKSdpuLV/aWnMvKuy5L
zslimcaySrevtGT6kFCVvzW31igjl2WLHspJhTJJAzLagOpZOPlw6hZOPhzLZprN8kG3UmIx/eTR
I4Ytmmk0+umIqzk15cVja1Uum1wizTISWdrEbGtzaIfzDdfeT6mSuEMaaDLmem/fuufNpwWpMBtp
5y6ctyzWY/EenB5HN0LYh4Kra4h5Lt43rh0oIOb5TLX9NlUIqmq26zetMgf7G1cZs9tsxnrdtimL
ATUtoMWAkExAfxfrh7Bjmn/X3i8tLmhDEhwu3uVZYjxwbwjb2L+Rls19NrrMoGrNoslD41k099B0
MPOHY//B8rnLhzLQQAPkh1yCgoUjW5bSeM5uQaDiEmNKr7LaqE7pKQWQUl2gbKu9FFF+z+zAIkoR
WUK5hHjSDgn6kvD8hzxbSksni0tPiHFbhpYQWjpdUXpEgoRY0T5B0u+RyJalXFBSLy3W4+Tpt18S
IoaW1lJaFlEeokTbjyjDOvbzglEkC2oGlGdBrQYqv49yWHJQFsw9MKonCEGKQnKnHy1zZ7bTcrvH
TWAa6mFKPeINkj3LaCkj2zAtZ9SwjJYyalpGSxmh372qd2hBLQVlEbkr7B8sEYx+F2FGI7xgfO2o
VDRWKB7lAaIj53RoCNZQexhj+NSm3aYFMweM/ExlscDYHJ6KjRRjYdZpLBiYsWzqlk0um8YmbNKb
krP7YOF6aQjYvMo+X/KQ+sMpBowzIhO/V4l78a5ZfN/hCQscLiBDcDskjuKQB1h97Yfcp6H9X8Hl
j2s/pIt90vhsx400tn8qfad+ts6TXU7d8WnwIYaX886OVwVGetk+IfBb9aiEF4ApcVd/gVkAvxmH
X/+H+/gqNQDfm+vumVMIS1/0b/2YAK96eXJ1dfaqoi8Z56z1P9rSvoc4XUcmukQhbUs/NgEZW3NS
5XlbStUtaXdDtwYWvalyAOVRB+fDzCdLS9SsBRxc0gEJ5UscnIhu7i33O9WnyOA8gvLovVoU5fr7
FXeVtFfQV69vSx8XN0TIOw2htoXZ8qbu/tnpN4hGOlJN2oLIymdpJW5Fom7StVdO0uZP9ngSBpNW
EFK5st5MZfqSqrzg6roH5+YV2kZjS3IHUag/CfIlgc8uNPcVNVielXdOw20TTCllFMA3gg8RZHPM
mSTXZJA7VNRYYQLyUpAIq0QQh2gnojNyYNJbu2w5+mnA4CiNVqy2saQ+0jeuDqaheUCihBIWkorf
pWsrW9V2jsDmZqHT/n528cd/n52+vbg+u7j+dP3vy7Nn/9MeLKTHx+CEYe0XOs8re9q5ytzaB/i0
d0SbvYEoc/OQGsYGXbZrr7IuwjT8XgjFkzCoBt2cB6Qftaret3Ne76Rp5v6jVW7uq965QshxAOdB
tUj167zdRPi3qO0TCiHvwvGuTNrpHmQuhusL1ibyJG64uzCtB6+vry8/vX13/uv5xTaqwQTP3FYA
hyG/RXf+xAXt0lFY6EmtOVq71swYStcGZV/p1gfLIcutRxuuObesZ1kvRH3w2DVX/7nCu/11NevO
z1A3bNCLxqxLzLPxzH3caj1qedXH0drh/CH+lwTPCIEvsrGmU+3BGT1Q8h2zYPNBaYFbKOlAZQzS
Ry4mYfh9papRe5z8B0tnpnuh07WuxtmPyO8R/8Y0amhSARB0tlEjbwDx8YTrLy+hL/9VhIuwo1vu
kzB8l/VBXqf3iDzRj+5/acNg15jdUH1EpRkkNn1XMvBJrG/Ym0gfP/wi63I5esA088Qrzks8+v74
J32Rn1tA6DT1qt8Q1lW9CtzC5YaqGB/3R0JjFJq7S8G7gFDmaqs/UlmmEdHetP5jDwumk+jLtQmM
zNwhkX2dtvV54TJB/GEJxHMWYZpbtpuFzn/eB1U0IJIMYuiz5daC5n6RKSwYfWlUW9VaobVDx2RB
DdD6C10DTAjuXOmFbv+yIeVF9wBgUNsvAYOV2kEN46gEMBY3h16jDAhMq5h+yAVRhrKwsHmsN77W
GOGfn67Prq4/vT47eXX2rraNscJb0kY4jqVbrTaQGRMaj/011h77mzaWC+vwic9SjWYaN5qtAqGr
9P6fhFAJtYcE49vgprIfqV28PyE+3Xl/KJuJtTvtgxkR0DPYZoprzjy7RTGDYuw96XVlPvno+Djp
9pRzdf7r9dm73350ZC9RSrdpAb9lf/t/UEsDBAoAAAAAALFMV0QAAAAAAAAAAAAAAAAFABwAZmFz
dC9VVAkAA90xClPdMgpTdXgLAAEE9QEAAAQUAAAAUEsDBAoAAAAAAIJMV0QAAAAAAAAAAAAAAAAJ
ABwAZmFzdC9jc3MvVVQJAAOEMQpT3TIKU3V4CwABBPUBAAAEFAAAAFBLAwQUAAIACACCTFdE2wjT
QjsAAAA/AAAAKQAcAGZhc3QvY3NzL2NvbXBhcmUtY29udGVudC1zdHlsZS1zdGRlcnIudHh0VVQJ
AAOEMQpThDEKU3V4CwABBPUBAAAEFAAAAHMsKUnNLShRKMlXSM0rLE0tTVVIVCjPL8pWyARKKJRn
ZOakKkDEM4sVklIz89IVCoryk1OLi1NT9LgAUEsDBAoAAAAAAJNMV0QAAAAAAAAAAAAAAAAMABwA
ZmFzdC9mcmFtZXMvVVQJAAOlMQpT3TIKU3V4CwABBPUBAAAEFAAAAFBLAwQUAAIACACTTFdE2wjT
QjsAAAA/AAAALwAcAGZhc3QvZnJhbWVzL2ZyYW1lLWRpc3BsYXktbm9uZS1mb2N1cy1zdGRlcnIu
dHh0VVQJAAOlMQpTpTEKU3V4CwABBPUBAAAEFAAAAHMsKUnNLShRKMlXSM0rLE0tTVVIVCjPL8pW
yARKKJRnZOakKkDEM4sVklIz89IVCoryk1OLi1NT9LgAUEsDBAoAAAAAAJtMV0QAAAAAAAAAAAAA
AAAMABwAZmFzdC9sb2FkZXIvVVQJAAO2MQpT3TIKU3V4CwABBPUBAAAEFAAAAFBLAwQUAAIACACX
TFdE2wjTQjsAAAA/AAAAUgAcAGZhc3QvbG9hZGVyL2Rpc3BsYXktaW1hZ2UtdW5zZXQtY2FuLWJs
b2NrLWltYWdlLWFuZC1jYW4tcmVsb2FkLWluLXBsYWNlLXN0ZGVyci50eHRVVAkAA60xClOtMQpT
dXgLAAEE9QEAAAQUAAAAcywpSc0tKFEoyVdIzSssTS1NVUhUKM8vylbIBEoolGdk5qQqQMQzixWS
UjPz0hUKivKTU4uLU1P0uABQSwMEFAACAAgAl0xXRNsI00I7AAAAPwAAAFMAHABmYXN0L2xvYWRl
ci9pbWFnZXMtZW5hYmxlZC11bnNldC1jYW4tYmxvY2staW1hZ2UtYW5kLWNhbi1yZWxvYWQtaW4t
cGxhY2Utc3RkZXJyLnR4dFVUCQADrjEKU64xClN1eAsAAQT1AQAABBQAAABzLClJzS0oUSjJV0jN
KyxNLU1VSFQozy/KVsgESiiUZ2TmpCpAxDOLFZJSM/PSFQqK8pNTi4tTU/S4AFBLAwQUAAIACACb
TFdE2wjTQjsAAAA/AAAALQAcAGZhc3QvbG9hZGVyL3JlbG9hZC1wb2xpY3ktZGVsZWdhdGUtc3Rk
ZXJyLnR4dFVUCQADtjEKU7YxClN1eAsAAQT1AQAABBQAAABzLClJzS0oUSjJV0jNKyxNLU1VSFQo
zy/KVsgESiiUZ2TmpCpAxDOLFZJSM/PSFQqK8pNTi4tTU/S4AFBLAwQKAAAAAACxTFdEAAAAAAAA
AAAAAAAACQAcAGZhc3QveHNsL1VUCQAD3TEKU90yClN1eAsAAQT1AQAABBQAAABQSwMEFAACAAgA
sUxXRHL9ZfKFAAAA6QAAACUAHABmYXN0L3hzbC90cmFuc2Zvcm0teGhyLWRvYy1zdGRlcnIudHh0
VVQJAAPdMQpT3TEKU3V4CwABBPUBAAAEFAAAAK1OMQ7CQAzb+4p8oGRguxkm2EB0TttUnJS7VLmc
1P6eg36BxbJsy/akaY1CHjUDm6kFWKLwDwIivlRq4oIXcsLr8MCBx1t0vNOu1Z9cvOBCxXErgsZF
q00tvr2tn3U6NRUkZoYzsHDi7BDTquZdc8JBIUDNNLZRVxCl+U/j/VHP8/dF9wFQSwMEFAACAAgA
sUxXRAWPVY6TAAAA0AIAACcAHABmYXN0L3hzbC94c2x0LWJhZC1pbXBvcnQtdXJpLXN0ZGVyci50
eHRVVAkAA90xClPdMQpTdXgLAAEE9QEAAAQUAAAA7U87DsIwDN17Cl+geGDLDBNsIDo7qSsiOXGV
OBLcnkCPwIZYLNvvo/eCpjUKWdQMXIoWB0sU/gyHiDeVlrjigYzwOF1wYn+Khmd6arMrV6u4UDV8
VMHCVVsJnd4vGz3NY0yrFhtbibv+A4mZYQ8snDgbbOjQEbet4KBl8j2AKYjS/G2QrLWF+9uk60SG
8O/7031fUEsDBBQAAgAIALFMV0SBSnetSwAAAKwAAAA0ABwAZmFzdC94c2wveHNsdC10cmFuc2Zv
cm0tdG8tZnJhZ21lbnQtY3Jhc2gtc3RkZXJyLnR4dFVUCQAD3TEKU90xClN1eAsAAQT1AQAABBQA
AAC1zLENgDAMRNE+U9wKtGzjwAVZcmxkLOZHomAD6q/3t5inmpSGg5mRK4YaAVMnFtA46YVbUqUb
W3LnUNdXxMBh0cW+juJVbfvl+gBQSwMEFAACAAgAOE1XRJGbyiQyAQAAwwEAABEAHABmdWxsX3Jl
c3VsdHMuanNvblVUCQAD3DIKU90yClN1eAsAAQT1AQAABBQAAABNUEtPwzAM/i8+gdSte6AhldOk
VQgxAVoL41Z5mdtGS9socceqaf+dJOVALk6c72WvN5til2af2zy7uwKTZQvJFX7oUCl/mU9n04W/
iK4tO9NgK8g/K2XDfyOt8NXWeCQzOaMZZFtNNIqTr8YJGilYdq2d1twEjiHdGYYEdumz885e3t8g
ArpoEkxH1/9YZ5nroOAeHQPy9DuH23gisCeptcctH1erCNq+KQxVzsl6F0jmEciWyZheB7kSlaUR
59JaFwuSWQQKh67nIoxcHKVxPvFXp/qGbLxBxjjdZ/GeDq+S423A5mE7EZzJeCsXYFTVaC054+Vi
tXyIQMsLqT9davGg/oWo0RbaEPPgWCxqSNj0rl/KiweGmR5H1VLhaQhJe6dejOvBsMmilB7rqbf7
p19QSwMECgAAAAAAXUxXRAAAAAAAAAAAAAAAAAUAHABodHRwL1VUCQADQjEKU90yClN1eAsAAQT1
AQAABBQAAABQSwMECgAAAAAAskxXRAAAAAAAAAAAAAAAAAsAHABodHRwL3Rlc3RzL1VUCQAD4DEK
U90yClN1eAsAAQT1AQAABBQAAABQSwMECgAAAAAAXUxXRAAAAAAAAAAAAAAAABEAHABodHRwL3Rl
c3RzL2NhY2hlL1VUCQADQjEKU90yClN1eAsAAQT1AQAABBQAAABQSwMEFAACAAgAXUxXRENjbk8/
AAAAvQAAADsAHABodHRwL3Rlc3RzL2NhY2hlL3N1YnJlc291cmNlLWZhaWxvdmVyLXRvLW5ldHdv
cmstc3RkZXJyLnR4dFVUCQADQjEKU0IxClN1eAsAAQT1AQAABBQAAABzLClJzS0oUSjJV0jNKyxN
LU1VSFQozy/KVsgESiiUZ2TmpCpAxDOLFZJSM/PSFQqK8pNTi4tTU/S4HAdUOwBQSwMECgAAAAAA
lkxXRAAAAAAAAAAAAAAAABAAHABodHRwL3Rlc3RzL21pc2MvVVQJAAOrMQpT3TIKU3V4CwABBPUB
AAAEFAAAAFBLAwQUAAIACACWTFdEFTU1knoAAAC8AAAAKgAcAGh0dHAvdGVzdHMvbWlzYy94c2x0
LWJhZC1pbXBvcnQtc3RkZXJyLnR4dFVUCQADqzEKU6sxClN1eAsAAQT1AQAABBQAAACNjkEOwyAM
BO95hT9AIO2hFb8hxFUsGYyMkfr8EuUD1V5WO4fZLKURJyOpgKqiET7ECKdZi95vj9caZrb4DiH4
Qj17xS5DM3b/7WxuT4ej0kTNDaV1bsBUEZ6AjAWrwU2XSeJdIcKoaZ8aE2BJx3+6Kn3k87qXLDEv
P1BLAwQKAAAAAACaTFdEAAAAAAAAAAAAAAAAFgAcAGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9VVAkA
A7MxClPdMgpTdXgLAAEE9QEAAAQUAAAAUEsDBBQAAgAIAJpMV0TbCNNCOwAAAD8AAAA3ABwAaHR0
cC90ZXN0cy9uYXZpZ2F0aW9uL2ZhbGxiYWNrLWFuY2hvci1yZWxvYWQtc3RkZXJyLnR4dFVUCQAD
szEKU7MxClN1eAsAAQT1AQAABBQAAABzLClJzS0oUSjJV0jNKyxNLU1VSFQozy/KVsgESiiUZ2Tm
pCpAxDOLFZJSM/PSFQqK8pNTi4tTU/S4AFBLAwQKAAAAAAC5TFdEAAAAAAAAAAAAAAAAFAAcAGh0
dHAvdGVzdHMvc2VjdXJpdHkvVVQJAAPtMQpT3TIKU3V4CwABBPUBAAAEFAAAAFBLAwQKAAAAAAC5
TFdEAAAAAAAAAAAAAAAAKgAcAGh0dHAvdGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9s
aWN5L1VUCQAD7TEKU90yClN1eAsAAQT1AQAABBQAAABQSwMEFAACAAgAuUxXRGOqrGyCAAAAqAAA
AEAAHABodHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS94c2wtYWxsb3dl
ZC1zdGRlcnIudHh0VVQJAAPtMQpT7TEKU3V4CwABBPUBAAAEFAAAAC2NQQrDMAwE73mFXhA7vaT4
FYW+ILgbYlAsIyml/n1NKXtahtnNcrbCmxepBFXRRHth0OHeUgjLbZ3jyJLuMcZgyJcW7yFLdVR/
/vtDuOQeFCaXZlgw74z5Y0xcKmglMM4h0A/YAfg0aHpDbVwnksqdljnSjs2vMUSbguxqTdTxmr5Q
SwMEFAACAAgAuUxXRGOqrGyCAAAAqAAAAFIAHABodHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRT
ZWN1cml0eVBvbGljeS94c2wtdW5hZmZlY3RlZC1ieS1zdHlsZS1zcmMtMi1zdGRlcnIudHh0VVQJ
AAPtMQpT7TEKU3V4CwABBPUBAAAEFAAAAC2NQQrDMAwE73mFXhA7vaT4FYW+ILgbYlAsIyml/n1N
KXtahtnNcrbCmxepBFXRRHth0OHeUgjLbZ3jyJLuMcZgyJcW7yFLdVR//vtDuOQeFCaXZlgw74z5
Y0xcKmglMM4h0A/YAfg0aHpDbVwnksqdljnSjs2vMUSbguxqTdTxmr5QSwMEFAACAAgAskxXRGBL
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
WGv0pWQk+dNu9Es3uiW5n2EibDzFlzGFsOmD/02whMeWUjUZ8dmlXzMSq1lyw+WD7lJKqV+Su4RT
4uguT6cwZJ3utubt9NZIdsdT3+4GtPY189ZIftoJMFDa3MG7Dxxbfo3WSFS1ocsJM3f2ataMLb0x
ZdSOGHl0zE+WEIAvSloR5jWEUeNxwjh/ALDi9EgezkAPzUfNrRFlodKw9Y6MI7ABKWsBbo9P6MSm
NRIHKRxYAwLcK3HSQkaWMWNRugRlAeZUPoso2yIxs4j9YjJki9s/LYusRuDZrgOwzrb4wjLwUZ2i
UDkeUJcGY+g1I/65p3jFVMmtkfo8oMyZe/8HUEsDBAoAAAAAADhNV0QAAAAAAAAAAAAAAAAIABwA
cmV0cmllcy9VVAkAA9syClPdMgpTdXgLAAEE9QEAAAQUAAAAUEsDBAoAAAAAADhNV0QAAAAAAAAA
AAAAAAAOABwAcmV0cmllcy93ZWJnbC9VVAkAA9syClPdMgpTdXgLAAEE9QEAAAQUAAAAUEsDBAoA
AAAAADhNV0QAAAAAAAAAAAAAAAAUABwAcmV0cmllcy93ZWJnbC8xLjAuMi9VVAkAA9syClPdMgpT
dXgLAAEE9QEAAAQUAAAAUEsDBAoAAAAAADhNV0QAAAAAAAAAAAAAAAAgABwAcmV0cmllcy93ZWJn
bC8xLjAuMi9jb25mb3JtYW5jZS9VVAkAA9syClPdMgpTdXgLAAEE9QEAAAQUAAAAUEsDBAoAAAAA
ADhNV0QAAAAAAAAAAAAAAAAlABwAcmV0cmllcy93ZWJnbC8xLjAuMi9jb25mb3JtYW5jZS9nbHNs
L1VUCQAD2zIKU90yClN1eAsAAQT1AQAABBQAAABQSwMECgAAAAAAOE1XRAAAAAAAAAAAAAAAACoA
HAByZXRyaWVzL3dlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9VVAkAA9syClPdMgpT
dXgLAAEE9QEAAAQUAAAAUEsDBBQAAgAIADhNV0QICKK5mQAAAMIAAABYABwAcmV0cmllcy93ZWJn
bC8xLjAuMi9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVyLXZhcnlpbmctcGFja2luZy1yZXN0
cmljdGlvbnMtYWN0dWFsLnR4dFVUCQAD2zIKU9syClN1eAsAAQT1AQAABBQAAAAljb0KwzAQg3c/
xb1A7b1blpZChkICHYPjXOKj/gl3TkPfvjYFgcQHkkZPAgWlAB+pJo/wwvnew9hYICm4wIwhn0AJ
bAJa2UasaQHGPXMReHbDAJnh1j16rVRrXkFr8xej5IMdijlx3sLUzqaVQgUupzVztMmh2YIEE0mc
EW8X5MvH8pfSdtmtezevO4XJFcpJtC8xqPan1A9QSwMEFAACAAgAOE1XRDf5wL8AAQAAGwIAAFYA
HAByZXRyaWVzL3dlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItdmFyeWlu
Zy1wYWNraW5nLXJlc3RyaWN0aW9ucy1kaWZmLnR4dFVUCQAD2zIKU9syClN1eAsAAQT1AQAABBQA
AADNj0FOAzEMRfdzCu+HxBSJDaspKiBEF4hWdFmlGU8nwpNUiUPb25MUuAArJMv+smS//5VSgO+B
80QJF0YMPmxWuKHdi5OfcZ8d9/hGTCYRsjmHLEooiYqUMkvCSBJduT/Sbs8409f6Bm3wQ4iT8ZZw
z4lxcsliGk1PUX2aeHZ+rw7GftRZHpUPVlzwSdHpQFao13KSpm3b/+bPWMmGL+66DtTs6hba2rqu
gfXoElQ2xOyLGgmKyaclrOuOXSq5YEccjuA8GA9uiGaionqIdAhRErzOVysIER7nz0vdQHO5vQOt
8buKmZCj/c2zrbjt4Lgs/hxKjzJxoyq6aSu4cL8AUEsDBBQAAgAIADhNV0Q4uvNEmQAAAMIAAABa
ABwAcmV0cmllcy93ZWJnbC8xLjAuMi9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVyLXZhcnlp
bmctcGFja2luZy1yZXN0cmljdGlvbnMtZXhwZWN0ZWQudHh0VVQJAAPbMgpT2zIKU3V4CwABBPUB
AAAEFAAAACWNvQrDMBCDdz/FvUDtvVuWlkKGQgIdg+Nc4qP+CXdOQ9++NgWBxAeSRk8CBaUAH6km
j/DC+d7D2FggKbjAjCGfQAlsAlrZRqxpAcY9cxF4dsMAmeHWPXqtVGteQWvzF6Pkgx2KOXHewtTO
ppVCBS6nNXO0yaHZggQTSZwRbxfky8fyl9J22a17N687hckVykm0LzGo9qvUD1BLAwQUAAIACAA4
TVdEHoy9gQQIAADeGgAAXgAcAHJldHJpZXMvd2ViZ2wvMS4wLjIvY29uZm9ybWFuY2UvZ2xzbC9t
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
uZkAAADCAAAAUAAcAHdlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItdmFy
eWluZy1wYWNraW5nLXJlc3RyaWN0aW9ucy1hY3R1YWwudHh0VVQJAAOuMgpTrjIKU3V4CwABBPUB
AAAEFAAAACWNvQrDMBCDdz/FvUDtvVuWlkKGQgIdg+Nc4qP+CXdOQ9++NgWBxAeSRk8CBaUAH6km
j/DC+d7D2FggKbjAjCGfQAlsAlrZRqxpAcY9cxF4dsMAmeHWPXqtVGteQWvzF6Pkgx2KOXHewtTO
ppVCBS6nNXO0yaHZggQTSZwRbxfky8fyl9J22a17N687hckVykm0LzGo9qfUD1BLAwQUAAIACAAh
TVdEfF0jrvsAAAALAgAATgAcAHdlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFk
ZXItdmFyeWluZy1wYWNraW5nLXJlc3RyaWN0aW9ucy1kaWZmLnR4dFVUCQADrjIKU64yClN1eAsA
AQT1AQAABBQAAADNj0FOAzEMRfdzCu+HxBSJDaspKiBEF4hWdFmlGU8nwpNUiUPb25OUnoAVkmV/
WbLf/0opwM/AeaKECyMGnzYr3NDuzcl1PGbHPX4Qk0mEbM4hixJKoiKlzJLwSLs940zf6ju0wQ8h
TsZbwj0nxskli2k0PUX1beLZ+b06GPtVZ3kg0VlxwSdFpwNZoV7LSZq2bf+LL2MlG7646jpQs5t7
aGvrugbWo0tQmRCzL2okKOZelrCuO3ap5IEdcTiC82A8uCGaiYrqIdIhREnwPl+tIER4nr8udQPN
5fYBtMbfKmZCjpauebYVtx0cl8WfQ+lRJm5URTdtBRfuD1BLAwQUAAIACAAhTVdEOLrzRJkAAADC
AAAAUgAcAHdlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItdmFyeWluZy1w
YWNraW5nLXJlc3RyaWN0aW9ucy1leHBlY3RlZC50eHRVVAkAA64yClOuMgpTdXgLAAEE9QEAAAQU
AAAAJY29CsMwEIN3P8W9QO29W5aWQoZCAh2D41zio/4Jd05D3742BYHEB5JGTwIFpQAfqSaP8ML5
3sPYWCApuMCMIZ9ACWwCWtlGrGkBxj1zEXh2wwCZ4dY9eq1Ua15Ba/MXo+SDHYo5cd7C1M6mlUIF
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
c3QvVVQFAAPdMQpTdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAgkxXRAAAAAAAAAAAAAAAAAkA
GAAAAAAAAAAQAO1BCrwAAGZhc3QvY3NzL1VUBQADhDEKU3V4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIAIJMV0TbCNNCOwAAAD8AAAApABgAAAAAAAEAAACkgU28AABmYXN0L2Nzcy9jb21wYXJlLWNv
bnRlbnQtc3R5bGUtc3RkZXJyLnR4dFVUBQADhDEKU3V4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAA
AJNMV0QAAAAAAAAAAAAAAAAMABgAAAAAAAAAEADtQeu8AABmYXN0L2ZyYW1lcy9VVAUAA6UxClN1
eAsAAQT1AQAABBQAAABQSwECHgMUAAIACACTTFdE2wjTQjsAAAA/AAAALwAYAAAAAAABAAAApIEx
vQAAZmFzdC9mcmFtZXMvZnJhbWUtZGlzcGxheS1ub25lLWZvY3VzLXN0ZGVyci50eHRVVAUAA6Ux
ClN1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAACbTFdEAAAAAAAAAAAAAAAADAAYAAAAAAAAABAA
7UHVvQAAZmFzdC9sb2FkZXIvVVQFAAO2MQpTdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAl0xX
RNsI00I7AAAAPwAAAFIAGAAAAAAAAQAAAKSBG74AAGZhc3QvbG9hZGVyL2Rpc3BsYXktaW1hZ2Ut
dW5zZXQtY2FuLWJsb2NrLWltYWdlLWFuZC1jYW4tcmVsb2FkLWluLXBsYWNlLXN0ZGVyci50eHRV
VAUAA60xClN1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACACXTFdE2wjTQjsAAAA/AAAAUwAYAAAA
AAABAAAApIHivgAAZmFzdC9sb2FkZXIvaW1hZ2VzLWVuYWJsZWQtdW5zZXQtY2FuLWJsb2NrLWlt
YWdlLWFuZC1jYW4tcmVsb2FkLWluLXBsYWNlLXN0ZGVyci50eHRVVAUAA64xClN1eAsAAQT1AQAA
BBQAAABQSwECHgMUAAIACACbTFdE2wjTQjsAAAA/AAAALQAYAAAAAAABAAAApIGqvwAAZmFzdC9s
b2FkZXIvcmVsb2FkLXBvbGljeS1kZWxlZ2F0ZS1zdGRlcnIudHh0VVQFAAO2MQpTdXgLAAEE9QEA
AAQUAAAAUEsBAh4DCgAAAAAAsUxXRAAAAAAAAAAAAAAAAAkAGAAAAAAAAAAQAO1BTMAAAGZhc3Qv
eHNsL1VUBQAD3TEKU3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIALFMV0Ry/WXyhQAAAOkAAAAl
ABgAAAAAAAEAAACkgY/AAABmYXN0L3hzbC90cmFuc2Zvcm0teGhyLWRvYy1zdGRlcnIudHh0VVQF
AAPdMQpTdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAsUxXRAWPVY6TAAAA0AIAACcAGAAAAAAA
AQAAAKSBc8EAAGZhc3QveHNsL3hzbHQtYmFkLWltcG9ydC11cmktc3RkZXJyLnR4dFVUBQAD3TEK
U3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIALFMV0SBSnetSwAAAKwAAAA0ABgAAAAAAAEAAACk
gWfCAABmYXN0L3hzbC94c2x0LXRyYW5zZm9ybS10by1mcmFnbWVudC1jcmFzaC1zdGRlcnIudHh0
VVQFAAPdMQpTdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAOE1XRJGbyiQyAQAAwwEAABEAGAAA
AAAAAQAAAKSBIMMAAGZ1bGxfcmVzdWx0cy5qc29uVVQFAAPcMgpTdXgLAAEE9QEAAAQUAAAAUEsB
Ah4DCgAAAAAAXUxXRAAAAAAAAAAAAAAAAAUAGAAAAAAAAAAQAO1BncQAAGh0dHAvVVQFAANCMQpT
dXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAskxXRAAAAAAAAAAAAAAAAAsAGAAAAAAAAAAQAO1B
3MQAAGh0dHAvdGVzdHMvVVQFAAPgMQpTdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAXUxXRAAA
AAAAAAAAAAAAABEAGAAAAAAAAAAQAO1BIcUAAGh0dHAvdGVzdHMvY2FjaGUvVVQFAANCMQpTdXgL
AAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAXUxXRENjbk8/AAAAvQAAADsAGAAAAAAAAQAAAKSBbMUA
AGh0dHAvdGVzdHMvY2FjaGUvc3VicmVzb3VyY2UtZmFpbG92ZXItdG8tbmV0d29yay1zdGRlcnIu
dHh0VVQFAANCMQpTdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAlkxXRAAAAAAAAAAAAAAAABAA
GAAAAAAAAAAQAO1BIMYAAGh0dHAvdGVzdHMvbWlzYy9VVAUAA6sxClN1eAsAAQT1AQAABBQAAABQ
SwECHgMUAAIACACWTFdEFTU1knoAAAC8AAAAKgAYAAAAAAABAAAApIFqxgAAaHR0cC90ZXN0cy9t
aXNjL3hzbHQtYmFkLWltcG9ydC1zdGRlcnIudHh0VVQFAAOrMQpTdXgLAAEE9QEAAAQUAAAAUEsB
Ah4DCgAAAAAAmkxXRAAAAAAAAAAAAAAAABYAGAAAAAAAAAAQAO1BSMcAAGh0dHAvdGVzdHMvbmF2
aWdhdGlvbi9VVAUAA7MxClN1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACACaTFdE2wjTQjsAAAA/
AAAANwAYAAAAAAABAAAApIGYxwAAaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ZhbGxiYWNrLWFuY2hv
ci1yZWxvYWQtc3RkZXJyLnR4dFVUBQADszEKU3V4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAALlM
V0QAAAAAAAAAAAAAAAAUABgAAAAAAAAAEADtQUTIAABodHRwL3Rlc3RzL3NlY3VyaXR5L1VUBQAD
7TEKU3V4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAALlMV0QAAAAAAAAAAAAAAAAqABgAAAAAAAAA
EADtQZLIAABodHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS9VVAUAA+0x
ClN1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAC5TFdEY6qsbIIAAACoAAAAQAAYAAAAAAABAAAA
pIH2yAAAaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kveHNsLWFsbG93
ZWQtc3RkZXJyLnR4dFVUBQAD7TEKU3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIALlMV0Rjqqxs
ggAAAKgAAABSABgAAAAAAAEAAACkgfLJAABodHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1
cml0eVBvbGljeS94c2wtdW5hZmZlY3RlZC1ieS1zdHlsZS1zcmMtMi1zdGRlcnIudHh0VVQFAAPt
MQpTdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAskxXRGBLZhCRAAAA+wEAAEUAGAAAAAAAAQAA
AKSBAMsAAGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzLURFTklFRC14c2wtZG9jdW1lbnQtc2VjdXJp
dHlPcmlnaW4tc3RkZXJyLnR4dFVUBQAD4DEKU3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAFpM
V0TqinxCYQUAAAUPAAAKABgAAAAAAAEAAACkgRDMAABodHRwZC5jb25mVVQFAAM7MQpTdXgLAAEE
9QEAAAQUAAAAUEsBAh4DCgAAAAAA4kxXRAAAAAAAAAAAAAAAAAYAGAAAAAAAAAAQAO1BtdEAAG1l
ZGlhL1VUBQADODIKU3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAOJMV0Q8Ai03twAAAAMBAAAq
ABgAAAAAAAEAAACkgfXRAABtZWRpYS92aWRlby1zZXQtcmF0ZS1mcm9tLXBhdXNlLXN0ZGVyci50
eHRVVAUAAzgyClN1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADTTFdEOsKIkUkCAADHEgAAKwAY
AAAAAAABAAAApIEQ0wAAcHl3ZWJzb2NrZXQud3MubG9nLTIzRmViMjAxNC0wOTM0NTItZXJyLnR4
dFVUBQADHTIKU3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIANNMV0Q80+PVCAEAAI8CAAArABgA
AAAAAAEAAACkgb7VAABweXdlYnNvY2tldC53cy5sb2ctMjNGZWIyMDE0LTA5MzQ1Mi1vdXQudHh0
VVQFAAMdMgpTdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAOE1XRGfPCNF+JgAAI6QAAAwAGAAA
AAAAAQAAAKSBK9cAAHJlc3VsdHMuaHRtbFVUBQAD3DIKU3V4CwABBPUBAAAEFAAAAFBLAQIeAwoA
AAAAADhNV0QAAAAAAAAAAAAAAAAIABgAAAAAAAAAEADtQe/9AAByZXRyaWVzL1VUBQAD2zIKU3V4
CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAADhNV0QAAAAAAAAAAAAAAAAOABgAAAAAAAAAEADtQTH+
AAByZXRyaWVzL3dlYmdsL1VUBQAD2zIKU3V4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAADhNV0QA
AAAAAAAAAAAAAAAUABgAAAAAAAAAEADtQXn+AAByZXRyaWVzL3dlYmdsLzEuMC4yL1VUBQAD2zIK
U3V4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAADhNV0QAAAAAAAAAAAAAAAAgABgAAAAAAAAAEADt
Qcf+AAByZXRyaWVzL3dlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL1VUBQAD2zIKU3V4CwABBPUBAAAE
FAAAAFBLAQIeAwoAAAAAADhNV0QAAAAAAAAAAAAAAAAlABgAAAAAAAAAEADtQSH/AAByZXRyaWVz
L3dlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL2dsc2wvVVQFAAPbMgpTdXgLAAEE9QEAAAQUAAAAUEsB
Ah4DCgAAAAAAOE1XRAAAAAAAAAAAAAAAACoAGAAAAAAAAAAQAO1BgP8AAHJldHJpZXMvd2ViZ2wv
MS4wLjIvY29uZm9ybWFuY2UvZ2xzbC9taXNjL1VUBQAD2zIKU3V4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIADhNV0QICKK5mQAAAMIAAABYABgAAAAAAAEAAACkgeT/AAByZXRyaWVzL3dlYmdsLzEu
MC4yL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItdmFyeWluZy1wYWNraW5nLXJlc3RyaWN0
aW9ucy1hY3R1YWwudHh0VVQFAAPbMgpTdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAOE1XRDf5
wL8AAQAAGwIAAFYAGAAAAAAAAQAAAKSBDwEBAHJldHJpZXMvd2ViZ2wvMS4wLjIvY29uZm9ybWFu
Y2UvZ2xzbC9taXNjL3NoYWRlci12YXJ5aW5nLXBhY2tpbmctcmVzdHJpY3Rpb25zLWRpZmYudHh0
VVQFAAPbMgpTdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAOE1XRDi680SZAAAAwgAAAFoAGAAA
AAAAAQAAAKSBnwIBAHJldHJpZXMvd2ViZ2wvMS4wLjIvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3No
YWRlci12YXJ5aW5nLXBhY2tpbmctcmVzdHJpY3Rpb25zLWV4cGVjdGVkLnR4dFVUBQAD2zIKU3V4
CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIADhNV0QejL2BBAgAAN4aAABeABgAAAAAAAEAAACkgcwD
AQByZXRyaWVzL3dlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItdmFyeWlu
Zy1wYWNraW5nLXJlc3RyaWN0aW9ucy1wcmV0dHktZGlmZi5odG1sVVQFAAPbMgpTdXgLAAEE9QEA
AAQUAAAAUEsBAh4DFAACAAgAOE1XRCb1xr106wUABs8iAAoAGAAAAAAAAQAAAKSBaAwBAHN0YXRz
Lmpzb25VVAUAA9wyClN1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAAAJTVdEAAAAAAAAAAAAAAAA
BAAYAAAAAAAAABAA7UEg+AYAc3ZnL1VUBQADgTIKU3V4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAA
AAlNV0QAAAAAAAAAAAAAAAALABgAAAAAAAAAEADtQV74BgBzdmcvc3Ryb2tlL1VUBQADgTIKU3V4
CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAAlNV0SnwLSkggAAAJAAAAAlABgAAAAAAAEAAACkgaP4
BgBzdmcvc3Ryb2tlL3plcm8td2lkdGgtaGFuZy1zdGRlcnIudHh0VVQFAAOBMgpTdXgLAAEE9QEA
AAQUAAAAUEsBAh4DCgAAAAAAFk1XRAAAAAAAAAAAAAAAAAwAGAAAAAAAAAAQAO1BhPkGAHRyYW5z
aXRpb25zL1VUBQADnDIKU3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIABZNV0TB/LLsiQAAAEID
AAA3ABgAAAAAAAEAAACkgcr5BgB0cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctc3Zn
LWxlbmd0aC1zdGRlcnIudHh0VVQFAAOcMgpTdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAIU1X
RAAAAAAAAAAAAAAAAAYAGAAAAAAAAAAQAO1BxPoGAHdlYmdsL1VUBQADrjIKU3V4CwABBPUBAAAE
FAAAAFBLAQIeAwoAAAAAACFNV0QAAAAAAAAAAAAAAAAMABgAAAAAAAAAEADtQQT7BgB3ZWJnbC8x
LjAuMi9VVAUAA64yClN1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAAAhTVdEAAAAAAAAAAAAAAAA
GAAYAAAAAAAAABAA7UFK+wYAd2ViZ2wvMS4wLjIvY29uZm9ybWFuY2UvVVQFAAOuMgpTdXgLAAEE
9QEAAAQUAAAAUEsBAh4DCgAAAAAAIU1XRAAAAAAAAAAAAAAAAB0AGAAAAAAAAAAQAO1BnPsGAHdl
YmdsLzEuMC4yL2NvbmZvcm1hbmNlL2dsc2wvVVQFAAOuMgpTdXgLAAEE9QEAAAQUAAAAUEsBAh4D
CgAAAAAAIU1XRAAAAAAAAAAAAAAAACIAGAAAAAAAAAAQAO1B8/sGAHdlYmdsLzEuMC4yL2NvbmZv
cm1hbmNlL2dsc2wvbWlzYy9VVAUAA64yClN1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAhTVdE
CAiiuZkAAADCAAAAUAAYAAAAAAABAAAApIFP/AYAd2ViZ2wvMS4wLjIvY29uZm9ybWFuY2UvZ2xz
bC9taXNjL3NoYWRlci12YXJ5aW5nLXBhY2tpbmctcmVzdHJpY3Rpb25zLWFjdHVhbC50eHRVVAUA
A64yClN1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAhTVdEfF0jrvsAAAALAgAATgAYAAAAAAAB
AAAApIFy/QYAd2ViZ2wvMS4wLjIvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3NoYWRlci12YXJ5aW5n
LXBhY2tpbmctcmVzdHJpY3Rpb25zLWRpZmYudHh0VVQFAAOuMgpTdXgLAAEE9QEAAAQUAAAAUEsB
Ah4DFAACAAgAIU1XRDi680SZAAAAwgAAAFIAGAAAAAAAAQAAAKSB9f4GAHdlYmdsLzEuMC4yL2Nv
bmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItdmFyeWluZy1wYWNraW5nLXJlc3RyaWN0aW9ucy1l
eHBlY3RlZC50eHRVVAUAA64yClN1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAhTVdEk4FQNwAI
AADWGgAAVgAYAAAAAAABAAAApIEaAAcAd2ViZ2wvMS4wLjIvY29uZm9ybWFuY2UvZ2xzbC9taXNj
L3NoYWRlci12YXJ5aW5nLXBhY2tpbmctcmVzdHJpY3Rpb25zLXByZXR0eS1kaWZmLmh0bWxVVAUA
A64yClN1eAsAAQT1AQAABBQAAABQSwUGAAAAAD8APwBPGgAAqggHAAAA
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>225009</attachid>
            <date>2014-02-23 10:29:18 -0800</date>
            <delta_ts>2014-02-23 10:29:18 -0800</delta_ts>
            <desc>Archive of layout-test-results from webkit-ews-08 for mac-mountainlion</desc>
            <filename>layout-test-results.zip</filename>
            <type>application/zip</type>
            <size>498391</size>
            <attacher name="Build Bot">buildbot</attacher>
            
              <data encoding="base64">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
AFIAHABodHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS94c2wtdW5hZmZl
Y3RlZC1ieS1zdHlsZS1zcmMtMi1zdGRlcnIudHh0VVQJAAMaOApTGjgKU3V4CwABBPYBAAAEUAAA
AC2NQQrDMAwE73mFXhA7vaT4FYW+ILgbYlAsIyml/n1NKXtahtnNcrbCmxepBFXRRHth0OHeUgjL
bZ3jyJLuMcZgyJcW7yFLdVR//vtDuOQeFCaXZlgw74z5Y0xcKmglMM4h0A/YAfg0aHpDbVwnksqd
ljnSjs2vMUSbguxqTdTxmr5QSwMEFAACAAgAeFBXRGBLZhCRAAAA+wEAAEUAHABodHRwL3Rlc3Rz
L3NlY3VyaXR5L3hzcy1ERU5JRUQteHNsLWRvY3VtZW50LXNlY3VyaXR5T3JpZ2luLXN0ZGVyci50
eHRVVAkAAwQ4ClMEOApTdXgLAAEE9gEAAARQAAAA7Y4xDoMwDEV3TuELhASWVplh6NKeAQVTIpkk
sp0Kbl869AYdq7++r/dC3kqkSWNOgMyZPSyREFbV4q3t+kvrznX+6pyzgqFy1MPuImYY77dxMLuQ
mXOoGyY1X+DB8RlTu28EFBNCD0j4IUD0IJQVUZvz6V/Icro95EQHdK2DBSetjAITI0gtJbPi3IR/
6I9D31BLAwQUAAIACAAHUFdE6op8QmEFAAAFDwAACgAcAGh0dHBkLmNvbmZVVAkAAy43ClP+OApT
dXgLAAEE9gEAAARQAAAArVdtb9s2EP6uX0G4MLAVk5y4cecNgQHXcZosSZ1ZTgMsSQ1aoiTWEsmR
VBJn6377jrTlF8kRCmwOYJPH57k7Ho/Hi0/kI5FjzjVqtHIlG45zyYP5KU0JCHQmWrdkdkF1K9Fa
hF4Kaw3nmoavAQQNG44fcEk+cCxfhSmDmBkEGJzQjPBco3cHB84FIaKf0keCRsy5ws/r+Zj8mROl
FTrcRhXUw47jXFHmCyyJb7cEQMPfkXQcX2OpdwCDlBJm1HYOzLQwc03kIKFpaMzBx0QFh1c8zGE/
ONfJyzThSk+zpSSlM/JMghYWOEhIuwXi6QblKb5NpyxI85DUcVeQEjHl8TTgLKJxHXeDKtETgkPY
dh13BSkRlUrrSLBcImRwKnUMs16iYEVrPTPrJUoQ0zoGLJcIjMRcU6wpZ3XELVj55DIckwyL2qNb
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
HAByZXRyaWVzL3dlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9VVAkAAwE5ClMEOQpT
dXgLAAEE9gEAAARQAAAAUEsDBBQAAgAIAAFRV0QICKK5mQAAAMIAAABYABwAcmV0cmllcy93ZWJn
bC8xLjAuMi9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVyLXZhcnlpbmctcGFja2luZy1yZXN0
cmljdGlvbnMtYWN0dWFsLnR4dFVUCQADATkKUwE5ClN1eAsAAQT2AQAABFAAAAAljb0KwzAQg3c/
xb1A7b1blpZChkICHYPjXOKj/gl3TkPfvjYFgcQHkkZPAgWlAB+pJo/wwvnew9hYICm4wIwhn0AJ
bAJa2UasaQHGPXMReHbDAJnh1j16rVRrXkFr8xej5IMdijlx3sLUzqaVQgUupzVztMmh2YIEE0mc
EW8X5MvH8pfSdtmtezevO4XJFcpJtC8xqPan1A9QSwMEFAACAAgAAVFXRDf5wL8AAQAAGwIAAFYA
HAByZXRyaWVzL3dlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItdmFyeWlu
Zy1wYWNraW5nLXJlc3RyaWN0aW9ucy1kaWZmLnR4dFVUCQADATkKUwE5ClN1eAsAAQT2AQAABFAA
AADNj0FOAzEMRfdzCu+HxBSJDaspKiBEF4hWdFmlGU8nwpNUiUPb25MUuAArJMv+smS//5VSgO+B
80QJF0YMPmxWuKHdi5OfcZ8d9/hGTCYRsjmHLEooiYqUMkvCSBJduT/Sbs8409f6Bm3wQ4iT8ZZw
z4lxcsliGk1PUX2aeHZ+rw7GftRZHpUPVlzwSdHpQFao13KSpm3b/+bPWMmGL+66DtTs6hba2rqu
gfXoElQ2xOyLGgmKyaclrOuOXSq5YEccjuA8GA9uiGaionqIdAhRErzOVysIER7nz0vdQHO5vQOt
8buKmZCj/c2zrbjt4Lgs/hxKjzJxoyq6aSu4cL8AUEsDBBQAAgAIAAFRV0Q4uvNEmQAAAMIAAABa
ABwAcmV0cmllcy93ZWJnbC8xLjAuMi9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVyLXZhcnlp
bmctcGFja2luZy1yZXN0cmljdGlvbnMtZXhwZWN0ZWQudHh0VVQJAAMBOQpTATkKU3V4CwABBPYB
AAAEUAAAACWNvQrDMBCDdz/FvUDtvVuWlkKGQgIdg+Nc4qP+CXdOQ9++NgWBxAeSRk8CBaUAH6km
j/DC+d7D2FggKbjAjCGfQAlsAlrZRqxpAcY9cxF4dsMAmeHWPXqtVGteQWvzF6Pkgx2KOXHewtTO
ppVCBS6nNXO0yaHZggQTSZwRbxfky8fyl9J22a17N687hckVykm0LzGo9qvUD1BLAwQUAAIACAAB
UVdEHoy9gQQIAADeGgAAXgAcAHJldHJpZXMvd2ViZ2wvMS4wLjIvY29uZm9ybWFuY2UvZ2xzbC9t
aXNjL3NoYWRlci12YXJ5aW5nLXBhY2tpbmctcmVzdHJpY3Rpb25zLXByZXR0eS1kaWZmLmh0bWxV
VAkAAwE5ClMBOQpTdXgLAAEE9gEAAARQAAAAvVlrc9u4Ff3uX8GxZ+uZHZOULCm1JEedxI+207ST
qTO7HzMgCYqIQYILgJaUtv+9Fy+KpEhJu91pnIQknvd5zgV8n8mcri7uM4wSeORYIi/OEBdYvr+u
ZOrfXUOzkDuKVxcLSorXG2/xRgSROPH+deHBH4m30k9wzDiShBULr2AFXuquiPEEcz9iUrJ84Y3L
rZfAO06WF/+5MMvZRWJGGV94V6PJXPcFz4TiR5Kmtj9C8euas6pIfDc0vVM/zY3MDoJRknhXSZKY
vpQV0k9RTuhu4eWsYKJEsRUwR3xNQOQxzr2RaSoZKKf14JiCRm9YC5SNO5JOJpOe9QUqhC8wJ2mj
U5DvWO/R3NSnOJULbxTMXHtCREkRLCJRRLEfY0pNx4YkMoMFRqMfrIwoSUixrmcb+ax71FvbQ1Zk
UmQgmKyHZ+wN845Ws9lsOWRwjI0pAuWXT7CXsJNTyhCowsk6k23vqVEPYAJEinorBuYnEtQcnVDb
aunrdVuW2mSgna/9qMJtw1G5l+wFx8p/g4GjJ7fDphsyNm6d3SGoRuXW7PC0LcHFsD6ohm+8QD26
Gg6KJ0iCo53639OifqQsfv2MuAxA1UVKuJB+nBGaDBpWbfcC82+OLcZxDq69ObGf3cOZnxQQPtiP
1JBW2M1c1EG0SBIj6iNK1pAfkvWoxbGK9r+gIqHYmcOuo0yovjNsHLqP57jiQrlGid3NQhSBdyrn
MdizDhyTQFq8Y1K04vwwHNYc75adwAxmp/xlTOwFkp00c5BylneMbTFS7aGs/o8qjzCHaMLN6DKt
TvBDKLVRO5+3QNClSx8UukyeTqed3Dv0fo0xaqGZSQGTBjXo2ziw4dkXIkbcVjhNLGA1FNcq9gKO
IYpBsxwBqZKr7FRiWgM6NLFR4xRp5SpM8k226i6wp/4EPThGr75qMAKRHK1xyzML77Y2eESRsqIa
GAM0gAwgin3zunrvvXI3nQ9ib4rTPQCosIIVa4psZHPP1CRN2lPB2WJ4+BzPl8d4vV7JokxTDpsV
w5SdJAcLeAmmwzPw/KQ04Y/eS1WWjEtgW24jGYya57iQwvsxhP1QJTNm7G0YWRU0EPUS4jR2ntIT
9JiBGqAeo4RBEBJ6sIOzdy6wFdwgSh+cBL2jbw2X5Wjrd+g9h9rANt2Oat7pbg12P7pPndl1Sre2
6ZMzYCU2tOlvcPRKpC+5SjtjCSO4F9yKZUONqVX6SkgkK/GxioDDaz4MVPb0iqOmSMZohHi7322d
UqwzdN+Rs+91aw1OE5PHtpZSr65aUO/DZeEQchwt5/ZhkZItNutYPB61VQqQrkFMmh2y+IYAFvBO
qNVrfvdJkeAtgNQR1fZE2BChTy8LRi16u7MoVigxbcL2UhPsF7HtSUHf7QUdmyB2JGS+tLD2vWYw
+1kLXFdmra1JylFuJOzkSbuMaOTIwwDSHtpmB7Um21iuxxQKR6iZzyCmd/PnfXhZTh7o1IZo99Vl
ZHJYHreLY7uGMd9hDA+WBInDWbPNBwcK7rgzavZ+cRzZOZe8+6MDtEMxjyRJ48QjcmRq+SbmFoxD
83IAZaz+qgQTfZsbPVxej/qGUBRhukApZNjNwXTTrhfRhFyAqpfev73L5UVNxA367s6mCCp0lvpy
V+LepS4HJbIDO8fcDFMNkHUxilQxOsBRVzkWwhUeg3buc0sjO140UJ9DhUAxUBC9EVaJh7oFitnv
uHhokGUfz7uSo0sxTXJRWA5RqyPBYbv9tpFoQWTiOPAsaWxoQI2DpcqJFl3Ysm+g6GvybFRBVhVN
3HH8npC3Rcpia0NWSYUXzfSLaKWZxHZBvKQgCzDY2CnSJEu9CtQwXzJsdgot065BfqWDZJ6EvsiM
tqEmvDeCFCbLv9uYAGEjzjbgcKgEMgRzbVFEZKCKoFqP6cxW8XUpYr8dOqhCVv0btUnUXet0a/yc
JHDKMoopBwl3+O5hFKjDmEBvYHuwAO7wSvOkd0B1/jiYmJJpf/nh2L/HB1ePj4+NlL66e358nj33
4hMUl/1R/PT01Cf1AuclIFTL+bZM64wM4BUkbWX+0/xudGdxK6YY8a+6PHBHAdWij02ZGnIf2pu3
exFzUoJPefz+MpOyFIswRN/QNlgztoZJJREqdHVbSEkkwm+/VJjvwnEwDW7tRwClZfBNXK5gXb3e
ymuvHLME+8qHeAPj/gSeVs58P71rTAGh7GVhxJIdPCAfQG4kxPtrdxJQd4bZeBX+BP4EzAofkUTh
088v4c84+huR9vGxIjQJ/wm8iwQOIVLAnL7EgLBwfK+oFCHHkhOYD4ixpqDKCFSBBEgVhRQxDtdU
0DAnIg5FhhQXviG+U4c8yOxXfXUEq3FiajEfip0K0UBuJagwbkveuDi6PuzRB/qhdnXQ92B/jpPO
EHXK8VoXRPoyFUjXjdBXA/t643o1BjtD/6o1ChDg9Bhg8evVl4yoc4CQHq8KoXEDbP3nT94X1UaJ
UAUOkBHbAEB6MNuWV1AGwFFHwYXwPn94efHgsPT84a+fArsVOB30+p+1uz1Du9th7X5fYSZnCDM5
Ymqw6MILgtD8hUhjFY9dsH5VTviaQj6I3x6xgbqc7yqtH03VGyiiTKS7Dw10XhibI/nJMG6MO2ri
6Rkm/kMRiXJ5xOkJpqvPoBE89DuEp/06ZZm2bkAbpxWzg45qdURidob6RiuoT1bP96F66HdINvv1
//T37wVbszOsMTs/sX+Nzp2HJiXAd/1rrf8CUEsDBBQAAgAIAAJRV0T/YUNqZ1MGACtrIwAKABwA
c3RhdHMuanNvblVUCQADAzkKUwM5ClN1eAsAAQT2AQAABFAAAACs/WmTK0uSJQb+lZb+OsQTt918
vnUXm2RTmuyWqpwhKSMlVxAA4gbyIYBIAHGXpPC/jy0ONzV302OIrOZy875Xzw22qOly9Kja//3v
fx5etp/74+Xf/7//3f/979PfXj5fXw/X2+XzujtsPk7b3y/b3Z/X7f3wx9v9/ZT+u+vh9nm638Lf
/3/mf/h3Shn7P/w7rYZBhP9xPvzh1b/+P//Dv/v337fH8+Zlezvu+G9HM3+rhvhvhEjf/tz+ONze
th+H6+byI8xn+/5xOmzkL3YkLYd5JOmG+IdMI50v98Pm+zXO5XJOK+LHSEuYxjDh30gr55WANZD1
i7gemdew3s/bfXu9g41080DCpT/yRr4c//a53YetPO8/trcbP4DTi/kbX2bysb1u3ze7y/l82N03
6V/Fc70dv5+3J35MW05I6jGOya3uPXx33OzetuEXTmCWpsxSWR3/GNOIl9vueDpt75drR2r0oMic
0h8aSI1GUkNOXPuyuo+4iOvmEDb+9HH5Gf56ux+uhws/kiDyF2VRynx4+9/n7ftxd9td3j/CN7fu
6tRI9mew8Y+RisHp8vP2dji9AjEYyVTikSlyZOfL/vA4pM3183QAJ2VlGcir+IclM3k9nsKepPE6
K/JkHCXjHyaNE4Txx+X0eQ+z2ryHmaU/wDDl2FUcRql87O/HX8fzdyAu5Wjy3wfTUA334zsehSxi
9PFYyK5OG/p+uH7vy4qyRFaixpDCLu/p4dfH5Xw434/b0z8HMf7L5f+7PX0e/sP9L8d3oIqtJQdm
4x9+Ncfbx+l4DxMEo5BLEfdLDpUe+n64/0/XcDMO593vfz7cwjxvYEqO6A8Z1yrzlPaHoIqj8ICL
MJCLMBbjQFTP5nz4hGuJl3re6ih6wtV3AWwD0abx79LmU9ofgx4/B4VHzggsgm5mvIzTIj4/Nllu
J2nZGAGUC7nRNhmmvIl/3f7Y3nbX48e93O2/H66XzfH88Xl/QhePjljNuD1OL2aX7mVX+ZFdVlFR
KLcU6Nvne7xff/087+J9BwJDVbIsyn0xJbhddFU+Ka+lhbkdzwdw18sASkQTJTy9AdvTqWOIqYFy
0awMywncr8ft+fsJTaIcupJxEtIv1fhkzC/XPbzPZDZSpXvYNuHAZpMDHuMQo1sOAe4gtUeWqoBd
XEUaY7Pf3rddO2KW0mrqG3k8R7OPVApR4jKOILNwbYMP9PsWLf6v3eEDC6guwjEaGf/QtUbb3HZv
h/3nCZkT5enpjsmi1WsJnx+2YFdHcqpKL+5c5ZidLpePTfY/3g7n2/EHOmgyanSz5GBWN/lwf84Y
jUtjtPRjOpeIKpUhaRb6/dvx+1vPESJ6IOoEKaoZfBy2f+IzoqoobrFe2el8Sl8x0a6t3rLH+YQ3
pQWR4ah4gyBzR/RPn9cf3Rm5YXk9V/74bfvzfrnc34CyKp5Huu9quhRkkN3n7X55B0PQuGBIwQE9
reCt7d7AWQ1tP6Pelb9sg4N2754RkTyT/lCLG/6+/ZX+AcyHnHO8CXIK5rIplcmG7S8/z5ue9yqK
0hNRfYnRrI4nbNAVWRJPdI1JCicNcT1sQ8j2fpi13+vrPVjGv+P5qKVxFZMzH/T5JgSU6b/9v2Mw
lv5X6pfjfaP1n29/bw4aBMcMZlpkGDva/8kLyZ9KGT7dhC9SOAfG0PMYOg4X1piigw+V/nMh/Z8v
H7fuTNQ8iohugIj+WhKk7S598OPlunl2LDmPFR3I6LSloabAdLvbfcYQ/Bl7oYVu+5GVTIZLct4f
Xrfhy01PPkmoYKJ2NVmLxAPsaiDy7Rgv+8Ddj1MIqgDi4alguiKYaxv2hF02RS8Kr+MfnEF8AqOg
EVr6Q3MTCxu+BwMVE5LALjU5TgWqAOCEXEIvkpnEA6j7lztG6szSosqlRe2YZBpfRoM4bfH7YX/c
Hk6H9xANpdnleXXCO+IfRKUSQuFpecFMbO/H3ebj83Ta4EEcdehcWldvRpvvCHzxS8/fclF+x1k1
ZHkR2pSDW+ptLDt6oKGzKJDSCpwCN5UJ5TPy8iNiFYf7f5xC6bDb4KrqhS8lh6wXj4eoMsLWBsOW
vtzdblnjJkBwdzl9vp/z/yH9dfPzuL+/bbYfH6fj4ba5XzbDYOPvNlSolEMxDDICzQ9Ikx9L82Mp
MhZRefxYhh+rGJvqblZjnQ/fgxz/OISRBD/SWEaKbo+0Cs9KgBV6MqukNjpjDZ4fy5KxfIlh+bEU
P5YkOy8TOt0ZS/JjiTKWiv9GjZ39AvNyZF5pjdVYL6fL7s/N6+Ua1NE9Ig/h2twPv+7oPMVIzkD5
dBB0zDjE9niOo+Xhwb6JkchGDhYa+xZsSLx92+9Yzh4AdTkD3TkDILNkrBk2ioO9ng6/Xi6/0kfT
3zcfwTBt/hqc/+Prb27UqB89iT1zMmjId/0xUPxfOIAaF8j55CNVMwlKF8+C4rwueTjVINvT8fu5
O4oi8VD+Q7XWItkB9NA2tY8Bvl8vn8EDZfRdHoKgWFFfhT1prCQlpfBaSCgTPTY5Du2pKH4qto0f
PYYI/svl846HGJdosGysJhjlQ4zJ8YLUM0NlkwYPSZl2TqASuHkcIHPESxS24I2PcS7X/THEaHmn
8UgUM1fpIqGlgT2iWajomouhJcCGPy8SJ0YkX46yNQA4cIHVwf54PSQsGa+DxPI+X6bWNMAtkmQa
EZYYZFv6wV1eZrkH5i7zy9B6uZuqfYHAEHQnossyNoS1rw1o+nZeTI4cf93TF/EvIbbZX35yG5ty
gAkBDdo1hWrRqvzrY5T5Y8d+nIDc6eMYqrv1x4b/eCgfJ898/bHnP1bdXx75j3X9sV1/rPgN8/PH
KcNs1h8L/mNbftm1d1vyH7vyy1Ff6vXHll+zKL9sI361+lgM/MdmtWEpYk0pj1uMeePlOe8z5hTF
GC8nu1XFHRV6PsI85ua63R8/b+Ei/D4doHPmSTiRfKA8yjyliKQdNtvbR0zRXEMgcGGHIvBX2l/Z
mFDl0jp2KFfc9ggUT7hFHunyujm+Bz/xxu9McYhj6Dh9zU+Ej9yELWuKl+yRQauG2p2OH9CZdq45
SNnj6+HjsL1vbkF5HYIG2++TY335xW81DUWi9lqM+O3jegke9T2s8Nv3axj7cP12D3H/t87OGd+U
Bn7n+EVbUQ9le9LAy6iTtTSY5f6FwGa7e4soySZEI8HFuO2ul9MDimyOqUeCkEbNLYYJmABTBEc8
9EXucRkNfxlLPE4Ua6UPNC/1ut6l7obzQzlVz6OS+vvlY3M6vN4fY/6IOZobnJofa1noXkh+iyxZ
5ThbACL5+S59S3fpW/6Jb/AqkbmphgL8FkLLy/XbdCvxUBbPbZOGmla6jytN/zr89XhO7v4E9fE/
MLRUfh715fB2DD/RU42mnqJoyenne1Sy8Z+O0AJ5st5iExeDvV2uUfPsobLwRJ8NZeeqkc6Xe9in
t8P1eD90RhOVvp08I3ATBl7cxv69nvQ/v0/O14M0rjVAYkTLFJK7eD1+f/vKZRyH/qkliCho08Me
4zHCUWznCYMh+JvtdHNeS0+kDJaQJ/6u6FqkzFM6DAi7b+tmdqVAHkRzqKWemMaGGocYWf+EywXW
Z2V/fQvNAG7gQs30LOvAu4J2oWR8b6iRH4ocoWeUX3WEvF/oyAKHeDPXVxoAogpc6daSPL8kV1mE
x0Yz5nC61tCI2aF2Vsen7g0QBdd03qrF7o8xdxMVTgZw4XhDba/txII9xyglm7+II+R8Unv7LXYn
v31cbscIyQSX+Xo4fHu9fF6/5ZXyF5Fg8K445PyR8tJhVUc7JD2IrjLN/vssFHGIvIRgij/Px4ne
kP6GQ9cScUujStJj+lKCL0m4nXlHE8Ty/Xrcpy/iXzbBmr+zBitBxsM00DjnIvLups8z8M+KYB7A
lAFyykwtB+D2M3+vy/cRA5bal+8f8zf85558TnJQ1edg9pYsn1Dk9sdbzJhv0jBwAFkGiIG1dL41
AFi/KgPk5J7MJ3nevh+SZsnSdNuFoDPJ9q91/jWNJMhabLq9WZpuv8/37a8gTpL9VJJVaFVobB/X
w+vxV5Jh9lfJ/HNFiat+VTj+U3J2xpXc2v6wO22vMUyPO899PYzka1u+npfL75RU7Z16LDfYBHbO
guyUKeJ6P1zfj+fgWnz/DWct9WLNdqi3C/z0uJx1fUgD2OmBzJqU6Myfjvynsv1ppBYcX0Oo9b9H
OYVrFlRFjKVoapYu8CndLlFSkvMh84IpxfJTVe+05X/VLWXa15/y2yWHpTobJ0rX/zoz8TPZzPwh
/1B/yI3cjE1ORXI7h2kRdnK08+rDt+oP/YfZDBvJfasy4DF9q2djPv2u0BuBPrbl48gDmvDc4HeL
IfyqYmfsyIfEhZh+VW3Cz1rPfj36oXwt6HrTnOVGbRw/54ecxTlH1SIeH+vw/8oh/LZlP7YP0N5W
+ML0cdgts1H8dqmHxNgJhDGrr7Mxb389lK8zCbn62oSvhWC/1taW3y5xSvlabgQ/c/0woHYCll19
XpIXknKxH9KpHt+GH1Rhzrxkq9GXb5Mr7KrDEnG/2Y+dsrWYTNst4oLDlDUvnmqot3qoNmvc+A2/
09bJ5s9O0imicPMrHkbH7Fb6WuHLrMjH0QdWC9m2/KKVG8g5pXNefSzBx4pRQY8Lrfnt9mYs2+3p
dj90X8YsGOXnmI+nS6WAiCSVT2/Fatre8mpogGooHbQFB01UoJlxG6rEgDIQslzI6CBYQb+28af5
X7ZDrXyrSyVsEDH+Y6MX0/bVxy5cDaA+haiMTdnuSQlpqMKMAVcjGY0R7DcVb90yOXIw/NdiYSbd
Wvnyv62dAJJi0FmpkVnz9LsjPKuiiYROf8x32uQ7jY7ay7Gz32bgr6U1tcVY+CRo3mK0yMpGW8Vf
6UwHnuy7oD8cwhMXtAn/u6NY/K5YCRivueWoRK2I5PJrBVSgJiqwYGyTrdJ/bDfC8ebKyPqXBbGw
Inz/3aJVMz9N1IEEImaYexGN+7foPrJHpQeoQOOOOSBg1DUYV+6Qi7qbn7b3td5XK7+C/9hpUblx
9cfJZebtlUrs8od8SupKTb6FBtttjWNuxuOkNTxpWbk1YlzJ98Bv+CgksNLoPg9OYCUWvEDe1Glp
gDZIOgxsmHeMU5PVkEfe1Gi6jhxYtB/raeul2ysU8HtH5ICaDbrQmq55bat00L0vmyMIkdTSQbCL
X0c7nps0kKslFiYHaASVGZVky9cmXkqggTWj+uevjeC/tqpj7hzvC/pRILc9enPA3g3ltJNu0QsJ
D+4F8LyHOgYfH5YjyJdAux3shq8nvYxmAeigEg7M3g6JPAvp/MgYLPOIwSXwS4xmgsKHEgThqBqV
R8oo3g5wM4g7Fi2fWZtpXoE6YispWkKgFgOgFlfDFsswB91JSbxXlZKMdbSAQqRBeyaySz/sgwrl
TaUlvkXeupYqOiJ3zpafT9HtEvXwmy0Iag2NOMYl7BEM/YiC2mXA4RemeoSWRwGIK8d3KJIfkKxE
xAXoE80FePPHAB/TC6DIrOJpB+Jpw1zsYul5uyVs0x2U6W6Ae0UgzNqtKdoEWJyRQdXiXsEwmlib
2lZNaxXgYijigCYvcC0dwoPo39Zfm1U0qkAYXX5aJNpdC0kE39MbaVc3MioEDRQCBzK5P5BsjIMC
Lkm4xwJFso6An2vXNTkGINIYvUQIk4O7bUYJzE2YuEPzJg77GpILoZkHd9G4hT9jVpqzo3uNaqNj
wcb+YUJsp8MAvDfmiNGp/fb8/wYlBH57JDkNJlaRCniCHT2kYcRhdFN/DsFUAsdb2nHszVmDrAb1
utvwljHgawf0WPzaAu/VL7zXZsQQZIUX1dwjhRgsu/SMDHCMBhCwSBkuGC/mbhwYp39ynoNmAKC3
VMgbHLEycwZEacm5AL9s6sh0kZCxYdHArSF2dm0AkskDTtloGLc/x8QSuaHEc1eK2q1yqTW41LKr
hwHANgp8qaMrCJJYRiywKr/yExS/a57akOblloMH+LFj5p7sPQZiB9e2IdkxQmGWwThq8ASBnWcD
vCAkf8S4co/8KrnY7HHlHQHAXBEEONdGLi3PDoWXgnMyHvkkXhW60TNx1nzMwDEbpOsh1yBLQG7H
OrWS1CAAJcHl6ITjSg4WZ5YFspZqXIQqfrVmDda80N5rIoABgI/lXIwZoZNAlxGfUun2b/Mms58i
VsBw6DoqbYRJHlxMBZDv7AuDrLj1KGxJ6LUG6LVlkhxz+g8YHqEwqqmQpIgRUy8EikvJx8oWkKwA
ICD1ZwaGtTFGw4Ez8iPFH9QSJUsJZmDwqEIgYpL0PoD1iCvWziUh5sOIoAOBE8turC+UWxlYINbe
CMYLfLglCrglNeS9uFARyQTJdEkhLr1aNDrfwXG+1Ox2g6Qf2a8GJ0djiCh1J+fzdg4elSEef1La
jZQMoANJx8alBmaUFSBABQs3BrsOQ1IvFCOfxYcbgA/HbVkRUF4DVTnaFtNkAjMFipJsvQFrqAps
e27EQb5egkaQG0R4MuubHSV1BPE08RDWakzA5AbVKKWgddJGMEsgLQsgTJkkhOstoJMldoucKUsS
lqQQ6sFrBJl4a5ggYWb4ATeMJqXX/l8kYIEwmDL0SvlD+WVEWVNkp2ve2JSZUEiwiAqsbesUyCJC
pSHGNaIARiw0AsKIHKFQKbP65YhjyhGkSSXCxx5pUpDppOkBtzQ6KW0HsAOCFdXB6LRw6MR5URP9
5Lhyhjzw4QakRlJuAeQHjK0RALfMawNQz42YRTVBkkBelqD7yp8yDthbifi3HuZZLVUoih5Y8YxA
Fg3mhxXEI2UVSzedDDkA4tuSf6uX6VKEX4/ENyIFz3N+JGLAKEdiwcwdNFgD5YgTMaUYAEKfbdPs
EP0PLicBU5OU2RVoDxLy2jJRzszgRdbSIp0iYcpxrpJaGZDCqgd0VtdmA5T93qPAgSqVhUbK+ANg
4RLbRWpVHyoFxld2aO4XScgDrMeg4EyiHKt0tBLAt7hrIwjsBMcHndQ3TE9Ib/DXkx9qgBvKEe9m
N9QAL55q8RaCoIACl0b3KiiAByzHEUEfMk6cv5h+YJRRx3Uepajv1Tqvo0BmRjteupP+hSZTGQwV
wRQgQbioH0tAqhdYyeAZCluhMICYXIlmRoj4KABnIuo7j7PCQi046JGx85M7K2FN01gTToYVwgWc
BDEw6rtICtDA1Nau0iOZFAAmLgeEuGvoSisp64mvXAyQufRL5pxc2x1wP5xDSW6N3VGpDeCwpRxc
ghRAIo7EbMmhNWtIYQSQgmsqw4TRAfeEAAGNwqYZCQFaWAiGITTJqYOsBAQCS5wucBS9ts3UDjA9
vp0Xirn1EPKkRYNtIx7OGvNKvG0QItM0s12FyCOu/LOiA5tjUuzQAV/EqEHpisLoi0SwVe5F0BKU
Wb4R5iU6VxuUpUqNGPqRKASgMmsg9yUGa4B8R0tXqo/DxcTSPZL4thGjegjhWIlIsTm5AiyPAr5/
Iq2ApJBZoBnrZJYCDinxhGtLX2QEIPeu3jI1NBLzIC9P6M/JxTEr3AvRn20z5hnip2i7pWWZWSnq
gIUUVqIKOoyXSZpPqmoOJ38Q8VVG6TB72SCXTBH3ZMm7zuwNxAT2JORpHHOMO7ZI8+tFDbFauXTA
5njNONEUOUKuME09jLW5fLAZUOKiJlCrJTQ7IphSSMSgNrhoXC+jPbv6aXA7KPHb0nkX5AikuA0u
A8l7DpJMC5RS2ZVC46euSbYltYC26xgZYekW0S4HrMVHDsEp18SBa+IA/pNtPaj/HjwK7h3kixoy
8drDKY4CYBUTRlrN7ZrZpuCnl37wuhgaQJS0CcUKHfUdmLBNfCwIEACAiHeT2Cd+zYVAOPrIBvYQ
7xrlAoeuS8NsuFbgYzv2mkgokOmhcXXdsUMjtIsyHSu/e66NUoBdCitIorUEyLm0AqXUDDRZWvgO
/SI4XSAyNYhelPAP4M4R8Uhb7VbCBWAysVADriKdaOzCwkrNjCMAWhSxlIl/bldhkgNhkkRRaeIV
gAoQyfH0S2UXWLZyTMq3GDuQoREoOZQsBkCcBoFNJYzQNHHL6hqnOdENXBMlurV0AL4wC22y2jMD
aOOul9QCTXy8V0yCpgQsGkBlFlA809feASaxxR6ZB4WPZuDh95zpAMXfAlZmaVzWRQtv1LoJT3CJ
BOixYhkxyewqYSFB1AD2soLlmtMTNqxngInPGnH7Jc7DjRZk2LMDCchV9okcCyrwImYr5axXlscB
cuk4IDrbCHWRtSMoecysbwfcbolr9SXqXqQFIuTmSw0qsLUCftG3mJCLmw58oyUhxK+JzCBAHRf1
uUt6AMQHpUH4YGTBADhWO2Q1NSyqUDSytQ30Bcm5XtYkr/mLIEB0sMoKNv8IqtAwfTBKmASI9gMi
2ifY/wUWBA7MUZecHCoh14BblkuOQFUxzSbaJvkbXDCpsaMRLjcACbVqYgm5sA0k9wfJJPcfATH0
UPyIW5qhogixKBhdgU4O8toWee6KCW1QwGNUx+JpAHwvmSsrbgBoQ0HrjBpNGRx0v413uFgfNpeR
/R4WIM0gJZLMjA4CLaYdNrgG/bgaRKeTkNCgwNdIDKoixS+9QEUNGhJNJVOKNxFNUdG79ZiMLKAb
6pizmiFoEGbRtE6z25SEfIaxyWd4NGUEuT+SW6FkhsxPgmZOUp3LULe3SI9o3YSupx4r8Je7Vb0W
EBa9hI1dBcqByUGjzLiECTRaOrimUOT4ClyoEVXM5wol8NsWdXSccuMoMd7tDgvMDQXMWxio6+Xl
jdUgzZEcaGCg6Zm5ZorlBbMZlB07jTjlANBnCjstQJAc2yLISiD6Oi4dolx/BqhzoA7Q6y4GAmiT
xvT40AAtI6qhpguVEkRgNIfaaNZ8Idxoa1Ce18O59R5Q4qMHOdc5twOmbqRhbsqjpA6ImdEokzjC
dJr1uiMqcgC7JkQvQvVA0EaFePcesvGs9kzit5QrgEjNdRo4w4Zyik7cN/sgdfSas1xft9mcAI6V
d2wtue4x8uSyDYlclbaMoGOXwC1UYD7NeHC5JSpJlG6EpUD+YUmAP64XoPK4qsoBesl50F44IzFA
zrVGYLiAVBSnFoCEb8gaEjTRcz0GMHPBxeaTy6T+eEGe8SA77pocHFAuFkw9EcoBmr5kwa8DP6CN
fQf5Qoihtj1+swQ+qpaoz1ky+2DHRoNbEKLaFDkOTNuaOYxBpO4FeLWuyAEtyyuW2NCm5AGqruGM
EBFSQI4m0W6CzvSqdQzAGqnt9Q3eKCqCMqNGFDWHm9aMCvS0S7XwAGscTY9Eg3Bp166MKSQBoMiV
Z9Cc2lUCuyYtyzTrhNoDCAeSGgb5DzVgRAU9vCBZLOhRjA/yVDR2NA1C9xTEALrsMgKU6zJpwFPT
kEKDGxxpNpM76xRE7GhXLCdyM8Q2BovtLeTGKY1b7aBAXxvHEA3KvQJfW/i1hv2VFeUyjrS9XEZn
wXYZ3WskIoG50wLz1yHUqO3YCSAkyDENEgb4D2WCdAnyjjInBXiFxDVLQdvaTQDtEzRJ2df11o+e
/qiZtmM6HzzKhoGpdr4X3oNyOa87XbAMSgpqN4BO8UmZgM4imia5RCOxZ5AOHi1oS5K498APXqbs
5cpBQc+LEFpIo79cAvAAG8b1igYEoIvRN3/qKzJnT8BjQ9ahmgMDoXxteu8RGMBncarnB4O0uyDH
VbfOyWXWkCVBKtMZSGMEHvjAkV1dnDe6loPt9UVFVNWBQXFmaBvxURRP3Z9SEIBDr9vHHK20gQUD
HrUUsbiexTjEWEJN/DySaI1VthKGqevT/QdgrLcMMFogJ5A0IS0P6pA0PcRiIIFxBI09Uv09oNtr
jfz1yKAGtSgjzyswOGesvHQYvIf5U2klUJoevufkufaQA86oOYl2ysK3nAz5WNlmSUQH33LCY1/I
wC54TgGNmawjYBoNuqPpQUG3NwM4KRwbDbpTpBsTkaAvph6bbIjsMit01gvOirJ1nZQBas8yPn6B
xEDtolBNHZKE00HKuQZlFBICLJJ2wmiUC8UibuAxWqE7CKQE0qEHpua+4GEgPhgVLmeGSVuFkrbJ
5wPl+loiiH7Ede+OcyKSd+9gdn10HCFq5toA+NFKUB6VMguAfqEcwABzMAWSdwqUcUzPbllQZ6p7
Jw08bDWinluJZg/QMKUBby8B9ABtWM571ehbACyNdjhYd8we8HMcywSzWwclAA5zA+4ejUrHtZVM
F44CFoM66LHXjB7ADYsdW5W/oLc89MAhrhOhVsHCXEqTbzxSgTt4CItq0RTKIMmqT2SrPQF8EIkt
N5q1N4h8Bzli6gqi4tIXfppcMI3Cfa97XWYAy35UC2xmne8DSRzKymoGGQr24LCmU4zhwO3wY6cn
vAdkyaVvotbED9DcwACrNbGAQRipOMpKaaIEfttLpIMlRlg8TQyY5bOLqYIQ9czyyDmy0PIYtki0
gA2IGNYGT6dQBXmDHZYlempBKYtQuNyfAGTMxMAUkswv+QHnhjIfmB6/IB3tUKvvxF4A+Taa1m33
kwA+glGdik8BSsfHRffVBmqKMFe2Pdpjww3Y726jRRA3UG5r2/MfwQMuYkB5hehB7zqvqFgvmiFx
Ks8Fdcx+QH2+NH4dSZF+bqn4U1RJL9W5HqPTnXdvhQbdn0znxQT0ZLkeB9wQGdUGCyHwM5kwo6wY
8JN2S0QvVDhsb8dOpZMytvfUJWCaKMGw2ApUDSiyJLZO/s66rg4oNM8Zrvj+F8KaYcbP9Xm5dokZ
r6uDASQwiLEZo+bjtuhdO+lk79Ub4B2JETxJncJb4IK7miei13YP8A1Hx/KYHw1TQA5eWgZNIAwX
9AK4x2VOCADWo+HeERwwZW9pbRuVkyDXpwyO1AzyobWTvTcbQXJVC7Y+69G+yYD2TQo/Y+VRp11F
Xx9PJRq+JgIjMNQwyqDkdYEPbIbeQ64ASCWknkjytKLdiRqUWlGwza/Qa4/xMl3HDmr9dgPIUXgJ
8DKoi8KW93LKUiLKucAcZIuupR9BP9CE/QDAS5hugRcIjmE1n4BkpsF3eipbAEM7x2gi+YeAL3dZ
gbmgDjduHSTuETP2+qwrJ0A2O/sXwP0nyowJHkYgo+RNqLXNy5Ya9PGQEtPe0GlLNeCNg4CwdBJ7
dQirk8oyt5pgdaj03QF6fqr8BCUVcqFR9Lq+F9TPjPApLN8TVloRuLphKdEDegsNBreThh2vJNuq
vTDnAPlt+eSlWoapAP2n8I9bSemIH3DsvlQvgG4ZMbg6QCVOG7A2m2qg1IFSCpnMhDKC+jKru50p
gDtLGgbkm7Z+yxbFax0XycG+s+2moI+kLaIeG/D4ucQEdycNmy7JtXyodtSBVEs+KfC1HRhd9CAz
IRdDPdN4BQiZ0aAFd/KOQJhnOtRlVHwvvcTcM4E2TZGa2RTRryvyACo7SKQGR9zukHlogzbABu0O
rUGrTql2YHkEx5kprRYB42YUqHrEwDcBFUFmY+7brB14cFzWQDnFPQutGPmnNvCbWMPYa+2GoBuS
+M1Wt/3kESovlqgVtcSJZ0EYUkmfrYBdcDdHb5GgjTCNas3YCxYB1qcFfp/agY/9MAA6a+aDgD43
o2U4BiWyR+/debZdusEce+Ul9yhiSW+BX3YobR22zOMafqYK49EXA3HauOChbBj4XQuf+JthAcDP
V3WFsF6j4RL04dboYZj0vgmou/SqW0MPshfj0GMRS/B0BVskVYo2QfpZjL3oHsQAo+y8h4PqZCWb
5yqoHUiS1c3H1dpyGtA2ne1RXOAv0PbR917CQQ+kCPyyIuI/quq5j9WTNIm5BCgShHK1rixIJhtY
H89FHzPRADDFRtjlx0MHyy4f8Vl0O4DdjS384REmTCzTP+bB21SAt6mZpOBsbAG5gY3p50QogH8G
hav9U7cd5MIPvWcCUaN5Qzu5tsw1chSc67wwhdjj9FGwusip7h4DsF3qTUefRdhGEgJ1TV9snW0b
MFSoQLmFahl0JnUKSEzG4Rw4rDcwiJWdwBzU8EBiSuRUpguCKOkQL0bj1pdSg4eAwIuxS1XcYF6B
3xxRt6IZ5wVBkFvopnENeIKX6KzvPkwJgu1h7D1XCBqgjd0XqwR6Wn0ENRMwALMKt/WAAi48ljCk
maQbGfeOpOkQb1egFxFwzzcndSdtJAAlnjbmbiSxBURVBm9wS0MHH231oF4ikpVRxYRj3h/N5ckA
tjMGuCm5OQTgpZgFELRGdyVw4/UAAAKI+gUBwzV5MAXtLTJ9sRIcvT7HVQJNdEZYPkBNZnyhtiYv
mQ5eOFr4pNiAW2bS1qa+zQsHSsgKXMaIKKAjJSozT42D/N7SRXMrMB1wAwcDtEECgQAGJGpoefVq
Nnz42i0zVQyCBbo80+jFrPAYianOYgGqq4a5BvbSeFAblMTFAHFxAp94cqvRe+UC7Z3FnV8MbriP
9IoXEjzMkLktqO09B6A9tBIAPMehB2IBgolWzZdlSgIFtegZe8EmavzFhRHFfoDafV3XBum1TgLF
KuOyEaOtWp0K2DPZ4tAJslC9MJ2svxhB2mgQTLVJQWIARktJ2rrBlEaNzJXnClHnfCpwrChTY51o
s9BsmmWn//ZD0LDTjvM95A28UzB6B71o5EZD62Vx1sg41OEnvdUCbtfoUDmWg6xIO9gOU0JBpgTq
LgcfjQrOmcDQNKwu18uyJrXqqfsC8fgRlRJYnCszzoFAD2MCgx1BvYnAnQgH6pS2evEiZFizNTaT
nAyQozfUr9etLD14d4omT9ZVCPhBh0FL0LMhsezgwwjC9qA3UHAyDEwlwOwcAYtpJKMRiiYCpBav
wNewsmiUiANkcam4cQsWaIMwBvAbOzYxo9QvDFLKB9c1tQDAX6ZbzKqEF/y07nZq9ijL5BDBIqVb
AMXaGoR3ecyako6BRmdNAuryveq9CgySB0oB0lRSvsALHTx+3gW1kNJWg0dWcrADPG+x0PpLuAp5
Nmr58ZoVCNL1C+xFDaugHHxMG8/Y0rU3v3EI4A9qLVzj9UwUmArlUUws4IwHL3s4KuqhynQdJFkx
UGktcQ8W9PayHttO9+T+eeD9WfR6T0yygOTluHDW1yQSUB44io72Aq9ke6NRYmnALyOOuufpo7SQ
R7zkEbONjMGvVY+QWay6JQMCyJeSuPeBx6lAwz4oVl5oBQ2CJdcQJbWggk98C8+8olZicIA7kC1P
7l+j+zYwkgYl8RLbFOQgdc0CIddjSEV2aM2Oe40G1ag550FiIj19BnzG5avgelV6Cm6z44owH47M
CPwYDQCtyBMFcYVpF4rR4k8QyYmR4Y0/cCXAMRUogsxsMmBnKMdUt4r3JShFVGOv8yi6EZJ7ynF+
0BZUf1L6dQXxz1oE0PTHRdJtGdKgnjNGK9RzZsBlFSNs3yxh0wJPkIb6tc+5BwqAyb0Fz/pJ+Byt
pL9c0/TH+Nu4Y/XgMQcaPj2s1YAThZA57hxudwBLQbRQ+N11CNgODncUnlgXHpAuLMP+nqgPA3wY
VgBbpWEGa1AGl8bBx7mFhC0mUhIKeBbDgIOqflE3zXa26DIaktHkKJjXj+f+6qi+wjHNvnW6YTvY
StR1SsLFAMAOodC75BhnEWzV0tzkFjS3cwN65fSRfgMMPsMh7bOcgxwzfVxcLS9JDpOApEvxTGUJ
aNKrrEG8NtOBiobFFV8b3wHgeqL3jhx4zsVrh1/ZgKVTUqO2yBJmo4Ix6Z3ZCJJREOZK70QBGGD5
hN2aBghwUNetDAS2xCpgDpJaQa39BH62D9Z8OdMLrAF/fBxRf+OIBQAvy7fjpanUGaAuto37Pmph
wJdiQCWvD6sLH+vTyENL1Fzg3pl2UJ5f00WPPQy9PH7yFkBBiutExQpWvVqLH/AE0I0alUDBnoaV
kEouupz7dQdHUEfJVpXPWgxAAarzxiusPZKyJpdqtcqqAEqxULhwNXjFqG2CRRgGfORv2fy7eUFQ
WSFddtNXAG/leejj5C5DwLOkbxw1HyZHVeHSd9p4gUIYP6oenAoW7bkkw6OlIOx7vqhHb2sG1LbB
1IyAuvrIYrh/oD2lKnSgA5UNnZIOB6Nz3IkbcXG9EChclPiBPHIrI95m/CpwAJk71c/KgCpK7Uae
+JfbN4LSDDegEnwHQ0VDf5mEXAniA2CZh6znEdfOONd7MQdg7lrzFyrjg2irFtzhpYDAqJr46wkF
WrdAcaAgbvlsw/otEaC/rEcVVrLfW7+i3JF6PJLiNYDIhUoBJSrDkG75zo9exaZA6TvLIqOP2hdw
q9QIOAAZygC0OQL4p0CFlktJ/OyX8SjJoXHnLzVwfX9nCUe90yV+cwL2HJBSo4YcBrq/WnPlMoVb
CQqEve9klSxQ/DQ6a/NoPbiao2Em/jCSoJbPiB5fbgCJnSWlaFxzn1ERBqwk15gJS5q8RS/DrOui
AWFES9x9V8KXTTQXDpc++QD7N0MPKjPgrK3nMjWZzooemXPM66JzFI946h48mmEhQjfoEWj/rE48
UCdcvUzZbQd226B8h4QpbudRcwiL0Xut8TsOsLGEpM9+rRqOjZ28wdArwzbA0PoBvHwxte1C77Cb
HnkYQEXY8R5hishai6NSdNIaFpOlX0YlzR43WUMcQ0WIrOsnuTNNHDSHg31yMm8OFOxLhCEkdA1o
71F2mQwAg1027VrXSg4ARxWWrWSYcFTUk7rd1iiFDIDjw3ZDKh0EwYydRb4cLosVBB6rS4HnCB74
Ft4CRZQxKoChOgWYXBI/x0VD4bHZuQpoMeOQbM7PcSHqL9WhMv5hVsAg4GJIRJhJCQrQkXpZmmTW
Dgbo4dF7rR4+F7Ik7tmVNgJRg1IS0NMlas8cztviX55wYPTzjjP2k+1CPQg9zTmv34yPvw/K6Ggf
D7G+YxLiNhq3DEP5EbPk9MtFnIZcSYe7+MEOtIZ7k3AmhHlQk0V2y696KqTAFmBkyiFlqHAT8CWD
ZY1zAfRZsTS40qMGlI1ojucZkyQAt+487zzRKQCrjF7LdaOzBM8BGoqHT0WNmAuytACNXkagE5Ic
O8i1AC1uRj92ns4VBnRUWPZ2s+vaJsBXGpESLoc2gkNzuJtFEHSQ1Vq8FyjWvVdQ4YshOdsGU37o
hBCK3bkHXR10UCRKvImf+w6pwhBgoAmbISugiD6NgadZP1ENerKOqtcm2oPyQRb7L4kx0HzLcxHj
g6aGnpMYmdh+xtzQc+SKwY8eBHSQPvUaV/EZ+MSAM8jRmXFhcEvp05aq4XNoiBd6B/SLxRU0VuDK
Hw9fPjVCAeJQ7rQAYCDjcZc3+D7OskWPWjVjB8kPkseMrGGzUqoOyumAH8LDTzNQ8k0dNc4OPYCC
KBnTRKW6EhUgKc4x5Jv5zRPAMrO9BvCgPs0z1TAk8wFavliGD5jAHA3boHNvmxFABbh42vbop6gZ
reDYSmp6aQAlQj3HHi3IG4i9LOdeFtMHnolxkE1iMPtUy97bDBKkcAc1PNHrE3F24WNhuRcv6CSi
0IsWmR4BqJDD0LlfQoNnzozubByoTvFGMU9YF42GWjaPyAw8HkmDPXeQdrBYZAbj8T2DD+qNIw6Y
kSpXsl2VSIJPAFKQaTea22lYw6BUx+ajtnpSafDEmkRPWsiKUNhKL8I+JnpYJIPNCtsAGSvaOb/i
00+wvOy1hRq5JpIljYIywgLsWg7EQJrQQc2UAiHAdGOfyiwaGbRCWT5Z49dnBjTyUN8QLdaFUYjQ
6TvvPgJvhW1+PBdog1yIGhiy2ZyFAZAvXXO7X9sAmjpJgR4RMcEpxt3LOi8liwGyRGzP0QIv947e
9no+AwjQorITXHkx+AFB9A+sG4Pdi2aK47qUYASlBL5X1dprvGP04txX+gVpZdonvMk4QfGMhHzU
1D0H1bR1X9cGh+4YqvfsmgPloOFDoR4+CWhVm0Rb9BLsBCkE6F+WuagAVtMSFJpmUQde6tjr1QHs
r0aNkBMkhppLQVCpZCdAucyiU4gn3U1gSxb6qJNZZvNxsD4o+A5WDKRAjb6QOJEE+xKwRTaVy4EC
SAX8tCnYB7HUsHhdaWU9AVHS99p9g2jC09Tj2vQ63KF1gGzWBIgBf8P1ko5iBJDUoHtt8EEAVy2b
efIAPFogDC7JghkKxQpqWTco5Na9Z05BbZNU+MkdB9+UVfg1E+TheeUwTpHJ8WDTjAcdo3NLB9C3
lIZgsvnWgwKeluV6d5avAWprJdp0j9vhkBNrsyHEAJBT4ZuQWLY/8DVd2nLONt7DRe2E1eh7kwYP
XFdchFaxjwGU83C52p0hHksG5GclAK4iUK3O4DwgpWZAByT+DCzdc5CraNjeVkUNAlIUhtY17Mkl
fa/WRoKeEoNEtev5a7DjcmAomqVUBxhr7Rh0oigTgLkSAK7Z3AG+Jzj63uuuIKFPYUfbspggYVeB
d+vaVPxijV1WiKqV9w+4MnoEjO/sRIOXBuiOVU5hkXBAVcdPBCVyEsiE6E49L6x59FIwLRVniwnM
htLNWC0XqALNTXJWDc1toRtsrOxAXxpUi9O+SWHyRi57PQMDPao+nQp5B4s2vuunHxHm5hk9Nidg
EF1xBI0JM1MSAEieszl5y4T64wX1VBhHhCTEtmQgA+J0Mx+cw2qHeuHK6nnSNnVAAIhUdZ8IAr3M
B8G0hZ3THwDD8NgLhQ0s5ejwU5sQrVMDBn1GcFSKVLonWGC93Qr4F3rstYAAPeCGET9qhzIffnCg
54bEfRWpCxrls4ZeHGw7bFCjE9d/ycnS4DL2eRVOtV8kciDDCC29hQknYxbZF7lKTwLCorCojbDE
nXGc67XyNQBWXhYmyJWpB/k9L0CbFANp44MWvcffEUPfjM0dS2jX0CFfB5PL4filrxsAxMehY0Ek
gG+Wr/M00thATohaidtnVu8cAFR2wdtW65bmFgARgokQS9kOAMu86ABeFrjBfsDYDQK8lNTM+yMF
8ALwC/ty43wvQVHaslHjSkzAmiXMSc5P2yFA2YKHubObA3peOURjlvgNKbfsQjq0upACf8GDIq2k
GECIayzOFcG2iVqh5+E6ZZt2RM1XcykLMJ6kOXnjfexY4wWQdJrCboE/qC2bXnSxaPhYiKM4ogpG
AaNj+oRJ3aVS4PdeRqkYT6MQ/EHvQe6lsZKdQu1EYYtdD50EqwzGglH9oR4lSJtnngKo2XQGXcoR
P+JhDUjouQ1sni+5lhLFcoCI3HOeYWHJA7Rs9N1ObCB8UGMzo0apHQAOcBI48ZE4BXqMm44qGXvq
31kNH5DSoAxFeu0ZGGQGFcDHbHuG4o6CRI016NnFAdZO0hZl6YboEpzDZymU8NxzpnOXc0BQdzhs
gI94EM2dSpV0M2oBdp62N/YrlzCGqaiijeSsI8RqGg85gWjRKwboK6wtoMRNvzoYUes9CD0szlqT
Iq11oy0J+zNKmvhtPkkKKxjtspTbro0tgBVoK1KgF0CwaOFjZ9GxA0Qc71Bx24gBaYPeuknZfsD6
0iNQKr7zphFP184oJ6ANjwJSdxHlapG5NfRZDOBfeIc7/qG2I1IZ5jHpkqIBnTAkly/OGwXbN3nu
ShU7DRQJ7ctQFWw+jghUXHouzJq7eyFCnwPhYcoMAZedzDr1NGNa3IJqMKvRhZoxK6D9PXj7VsF3
+KR3mklOPdS3hik5rlf7nNoCTc/ZFNGcYgfRDqk5qSv4SoodlMEJh/txfkcY56hNL7ZF72sMi4ou
s1o2iC+lbj4qNzfXAfk8wz2cm+8XeoNPkLLBiF2pNbEAtNvSQiJem4eRqV0252WqF4DRIcmeRCkR
dl2kC3qzjdJ1mD+Aiui1wbwISO6WWvZYFeDhilGjFvka9miQo8RcRIEwFCk9ekHcQIxSj1xB9pzZ
A/3s/NDUptMDSaDfonX4BRhMBXSGe8yA5ATBQQ8Dbg0kUG9iFn8pdhf0pBgt7pIzwtJcpQ3zPOfM
TgOw02hxOTJ8y08ri7MHBmYPRs9o8fkFdGD4qD9ZVWoWWACkFd3Qe4oVpFJJsUm7+AE0fZE9DF6A
52hGZVFVrsHveGslGTfrYXNhgK1QtkaiViAhWkON/DtdrAUNzu2qj4iDwZLxI+pZa2GwZLRF+js+
Hg4+Not2HHr1yyAJatqVEvmdDeRkWOrEN9tXg5JxythMxX7rCksLEuZuxFDCCJnci0fm5YrDDpJq
w8KRXS1aAuFcPnnOdF5Bz1yofscYUH5mJGjkl14AQhxKi5/hEahNpSIeSqTnGbeCUUaAJbTfyCjk
NtApTStc2QJBDIn6D+K3msyIYj3czsFoRK1IcR4ItuyIrbxB5Ek1tDvLPfi5FvBzJa7+hSv2BrT6
UrCdvfSqh0ED9g29FI2CrQhUjcAXHDpkjBEQqQffq3EAwHvVTFQ06P5IAaslGCAbTX7BfiucdUXY
uxoXfTXXjiDwLKTsdQgGiQ4azTOvKwMmh3SoGbTr5+jtYDAK4uFjXLJuzanqe4kyco7NqT1AfyAo
XiPCUIwOgUdlFy91+hX7BSB9QvaaWAOwy8MueBoyL5XiEktzwgBcDgGJhA5DRla0ew7mY4aJV1Uj
0KvaPJTxNYuXe1u9zYA/ZkfUlj7xqwB/3HNq0P2h8BMsgwHdq10nTcAls2abAdB+bXFiH+Et2g64
q/yIBERp1WmdgEhKo9Yde4Welx8Erk6DjAStNWNn0xulHW9KDKh5AXw/YBFq6FVDetQ3u/O02wjT
DcpI/OY5ZNxrriRuZp4ANaI0g5mb/suqXgOvd8rzgup5SvUnLJ9HRClBRKkADyH1ngHZLDP2ugQq
YOWs7r0RD4JZLZCr72CTPzMaHivJVASATXm+MiIn0gAJeZRMlVQJwUGTI/dcF1FgcmiRQbNWygHz
PraVSWYo2U5thGIKFOrae+AfLOiSDQgBZDmGEXmBGmY/peJytjNQhDjrinFr5oZ1I0DlJAIyDS5l
GTRqSKLwE5mCBFnJiKzJyIATpnXHzo/AsRnaT0mlrD6oVHUjbojocbdU0X4iOgq33gyA5u7xQyLw
2SwlRA82AC3T1DDip6l9r6GFoW8PTAjA/xPHuO2ul9PpZXu9pc/mf9y8fN7vl/OtOWLq2vYI93QV
7r1sb8fdZh6G//xhQ3UFcF7v+b/eH39s3i7X498v5/v2xI9iySTsLH/x6x+H6/24g9/aMoPyZlz8
dvtyu5w+7wfwra4XH7eT7uZmd93e3jaX8+Z6eA0fv4F9dGWoknS6hPm/ni4/N2TIy/vL8by9H/Gx
yHk4EVFzMeYByzjvx9tt8375vB3ew69s9sfb9uV02PNDPjRbqmpMf9AhDz8O5/vm+Hrdvh8258s0
4eP5O9i9MiDxst+O+/3h/BhpsZUSSBLZwKKDyvfH8/F+3J42H5fbMW4eWKgoIxWaURnp43DdxcV+
bPf7sMA8MzDcWI6iEMnLcKft9fthM5/09bC7b8/fT0DsjGxt3OMEn7p2RehJJUOZU7hzYYXbzj6Z
lfRXqiTK/WO3w7R24RKHQYE8lH0X6fWGxaSmAXr7rcvaImFsNcz+uv2+ub99vr9sfh7vb9P+d2f3
CBUmqZgMBpRWsP9lMJJ0nGVg93m7X96fH06TnSsx+mqUe5SPze5wAupQmfoQNNm9TdDLQTQ2L/ew
ab8PQL50udokn9vRFJufb4cD0tREpw0y/+npKZArek2/covzvHyCU1VjLSz5rp+Ot/vL5dfXte5A
ZhipMWJ1sX6e40qvh/P+cD10D9bYWhWppVLLu7g7HXd/bvaXwy1s6H3zcvq89gXaDLXCHJZqbnuN
d+2wvYfLm25KOKzwL5+4gqbo4ujxCDrtJIPTvK/Z9vSkm/gIdm5aWk80KJuP7e54/w0mRS5wVF3S
LDXx/Lc84vXwsT32F2uHerEaGlowv7LM1CvciKXh+X7d7o/PaEAi1DrfvjhQmME1DHb8uM9eXvh7
kpjr53nzGm52OJbv7/HiNAcXlF0fl5qClEnbxNE3t/vvcLrboCrSAYNhPBnGpD8UGSbPbPu5P16C
WO8+3zlJzlMyZKzo7Nh87Y7nMNg9T+oWdAta1uNJrzhGpKOLIeusn8fzPmjkYMGu17hB4f8/Brcw
X4rL9bRn3G1B+9KkvYp6cIpSyF7dLx95r8JPnH6DocRyKLferyf2/YEpxHFidCum8JaO83H6/H48
P7Pxbh5M5T9m4Y/jRKnaxv0P1wkMIsnOJ6VpG4MEhQmGIJsTAxKh15vz7EY7IggxmBDSr8Y6vm+D
y/DE/tgyVoy3xIQR9oVKAkkgJxhjJqHWN+fHcX946uaMZayox4TNY70ff0WPbXs7kNsDLg8ZRqY/
8jCPCWwOp0P63+2P7TFbgL5cWEcO1Sc1sbg8aVbBsf+xPR33WyZQy3tGZCx6SGKKnW/H94/Tc2t0
5C5HeymiwYxjbHe7w+12fDmegvlJn26vx23wPF6Co3XYv/xOvv01nMhtU/4v3A9JspV6hjXSd5OX
8/kR13qLtz0MGSKR/RYobCnr8bIA7i6nIHM/OU8w/Me26GeSDEjz2L0ddn9G9yj95cDeS3KR/Bz3
5Ih4u78ky7M/hDsZfNTz4WdXWq2tV+KmleSg4LA/JveW/ZocX8FOokG9TCDH5n68B1mApyN00TQE
88+OdTiN+/XyO14c1j6L6Wm6x9aW8O1++BXuw2G7uYXLsouaIP6bzTXEguyiBLm/6U2RbIqzdxk8
wM+wN9c0Dr+gsqskiEvnHFa1Ca5HVJgQBxL5Qd5Zh8cLkkYJXnhwfe4xvgruVIyZw2w+Lkf+jIVy
9XTy/mZ9+779yH5o0J7HGCZv0n7hzR6GWmry+t6DuGwfWon9VhQJtnFZ9uHI/vgefLHL58es19K0
kvywg5mitqkrf9h9Xg/piF6Ph6D4sxB+HvkDoyp7vlbpwOJh8UdUJDeRUbLUbc+X8+/onE4hSYgd
LiGUCNY/Xqzj+TOFPMESBK17w1tt6/XJOZK68Rts2qaMV6DwdiriBpj5rD+ul+9REDlAJP34WGsH
Waax3d2PPw5F0+JNcPXhZO292wYTdYv6IVnnuKHb8z4dFzeOcZXynHzsJCK3w70nucS5JhWw4ag3
wXRsCQ4wi1v3LkjidZTURDze4/3w3pF9oVtK5nj++Hz4UtsT/9ODbf00WUT0n4JF+3x/7OvPjlIw
5biji+ZGakoeluRhb/fHH6zI65ZyyV+fL6/Ha4QR9r95S2Ca3ye9HxVvUivU9oeIJlwD3hzYWmqy
kXs7bBNOmc/6eN6dPtNVOp7/ZK+mJ4al1AIcowY/b0/p27DXu7fL9Sb5g/MkPJi53pW1TWrleA6O
cBCE70gMjKkvt3vsdbAGh18P+Y0uVpCmySVD6pgYmgIX1/4NMpxEYRSE4xSM9WcS5/v9enz5vIMr
Ua5oAsvsys973Z6C+x3CgT/jDm1uny/364HX78RYkQaq+2PYlVtErR4Hv3nCaaTxVAEBP7bX7ffr
9uNtwk2P58NLMMC8EAnizJI5nS+7t+NpHwzOfGr8CKplVWJ2Js7heH4I4VMWisa+RctPche04vcU
Gm5+vgWVdvvY7vjTG0QtPUN10SYf9zW6O/kw2WvmWgpgaf5CoPR7Wi9r+mRLHouO5HfYkrOO5BAx
msk1Pme9HJ2COIfDB++TkFMiyatzxiXfglI+Ha7gkH1r8nkXoqK5fX58XCIilxxKdgvKJCIGNEw3
Muzi7KbB78UwVnZmsrnkSrIxlm55v8VpzRFbHzuNM1/oXRJ2FRwQOQ5aVruQ1VoQgOPH7XiDGs35
lsux/ZW9+OizxFlk7c0q6fLrSqTaCbKJMbVxv/CC2Jj4+fB9G92vzaznZ5D78OvjcuuFa1K0/LHJ
AuWFRf8OLKgcrZ+FKvz88fW4y65xdIEOZyjexNSUQoOsJPaHcL/ejykpMPvwMRFyzitLk0RBcdPh
PLx/3H9PnlU/NHFN5/c+wTSTIeOXZ4rcpDcBxslBi3o12LBTcLyDErhfOj7ioGpbMc6+UDTFaVuu
h6wGcoQMTk0QtJQ4nB+XjxCzUf+DDwia3kb8rzfpj4dGCXfq+P18ufIoyCjYeC2KTvJYH240q9p0
85SnObxtb2ll7Pm6Gm/ws+uexA/vpCg3OgK1ztCIJh5vOt0HCsP6gkRIZJQ36RWJAV6P0Uw9YcHF
YFpSQt2mJO89v4K4Fcl2mXIl001MzkDwLoL2Zm/e2LrVWVNfeFxT05B3xuOCiUy/d7x1pMnblqWN
gES67fwlNbXDIqd4MrrgH6fLdv+4Frdw38/ff2xPn+xg5HKl1Fy+XClfGnHULM7s1hvViuYYgWIH
IQGcikEc8d7Dl0Fb3CbFt30B8EMLGl1GxGHAawSbzsh1IImeqJGdnOzEI1+AD1VIW+/oROgIJxOt
TNDCvzI6c3n5a4S9sJNrmjFg+I9NUKB/+zyGifTjk3Fow6WVTzgRYXi3ULbiv3xFTseINiU5CwEX
AjmJc5m8K1EF2Z0A2/KeJUThbes3Z4bNLGPREXm97D5vCHomCa70PrmawdEHx2Z7KvFrEts0Jm+c
bAtKzErwcOLddNdyU6nuTO5W8q82P46PlAa7R0NLFaXhIJlsum5r63o8x5CyAh6Bs96EU/dhG+9R
g08EgwmSD17er902xPXsEZFoXM6AWY4tUwwS78wMlWaMFN5C0wqgM6r+QHdYea8x/Ql6qRyhy3mz
BKuw2SSAYDJAU1ZpjnqprxiWmf8JTrI6e4qePLIGPBDt2L25ZHAU/bDihZjqFPbHdSNIfKRver6Q
pS7qmOhDU74lMjv2NWQ+m49n3BptWnjCZM/eXy7h5PmbwG7nQ92zm0Fg4tIgIJ/i5fv3sCeTU9CP
IcxiFhP+EAzG7fVyfQ+b0wOYvWklHBseSgZFf8FYnuZ7E1Ns0k5JMOOWBq/zsP/n8E//kvwd/mCK
uKXWAp4CdbO3AuWdJjmKDVre3+kWR+jxuWxLEzqeMQeWlDLaltuaEIrk+T4cg+iNTnN6RoB9E3kO
duDjtP1NEw5P4XSKgXofkPj1E+038YCiq+rV8vM50OaHIPFjaQHxHoP1fqakXAUj5hZ2D92IFKOv
g1ZdJbizk7TfVODDU5JCMZm5IiXfhAyiADtNyTCxqFyoIR9t8g/ChnYRXL+IPmmOBMfgbkFBUCR1
+/DAeN++mUiuvJPNx/Xysf2eWDf3y+YBSvNuF+tLLnw5aL98A+YKl+Qe1eTmHJwW/vdl68pnFCun
CSa/IPz+5v77A1wRMgvS9zqtZaLTsF6faQGU5HJl7OkesfDnVAdxj0kB5+xVo/wboUJlWzZHw88h
vqaZXfjY3m5hP/ebnJGH/oRQQwuaSbB1TtY9zFbJSWFCBolKiWObkhQFf30kLHinQLZQp0eCInKw
2djH+zpcyZvy/XR5CaKdU+IzKEjIV4tLwI5uWnmvgpXn8PsZwRl9DddPUMjh9BqrbQ7hJu9mVLUk
U3hZIM5QqQOiHszL5fO8B4qOCKOf+z7n0H+T0knXrrYcFZsPuoazg8zFEjaknpKTi0/JaZlwFWnN
V2TAWiSKrDgTgeElUzJiMvrjE5jBWltKbjrvwXm+/g5nfw4igAwrCWGSIz6BLNE1JBFfEMH9rTKS
/E0jqEtp1H0OIWPEsFLhQEd1EXIdUYYZ2Z9iqYciypg18OOtb+FimYrLax/VsnLRxbn1mUTUSS75
rooSl1lO4YheUIKDxBGJZfRw3a+3e1A19wcHbTNfpqfuNyVP+zodF3b0M1Hrw/9G3JzPCdr6gFRD
CidQLYR/ESHgDV8jEfQgmD8Ye1P8ejwHdyL/yydRbdfS1tGUb4+RGpEuSsI2nlONJKdLnuOYGYZ5
2sdUnhULHBLscv6Mh8xbaVdTisRMKTrnDF1W4Z37YlrGcrv/63aXkVaC/OSFBkF+zPV1ezx9XnnH
qoWrZ7/kcgZVT2kurhW9FMvxKIB5wGQXnoNDkn1LLzGYt4+gqQA5v+WN5H2NDgVrNEwLiJtNKpuT
GV0zMJjAjBXcFd3jJ9GMJlfsFhY/qRXsUplm8m7S7y/bSBvfH/8OdfsoW9JatnJDsEZ2jLKKWIZl
PJGo98ueBGGY7atb8U/B9vO+RpHi6Ti2pag/Lpfr6fdmck5KfMkbC90K/Ynr/n68vW/vu7cHmS4R
iFNaaqqdvXUAMlfDgtK32Zwd14HSQdSMaD1q8g7nqcr1vkVZaRKtLfnr0y1+y4z806kfw5Jsk56z
TbM6TZKUajgiQ4HfHM/OqFMrgPxWGn8siT/TcQHuD/EZE7U9/PkgSJ8/N4nZiaVbjMsijWHJzgyu
L5oCDfLjbX9U//z4nsoD74cu4GJsHQXSkPRRYZigJ3xPfQttiNPo+P2E85L8frG8Vg95ixFx9wYV
sU0tPC3NjlZ+S9QY2XVhMVnLgspVKQl7DwUbjAQjsC9pg2Bk+HSvaNnlj1Ow+G+X0x54HGodCD/8
/cM1fZBQ4X2M9Tbx2/eO+1Ha6Wa+SarS1Q8IPw12+3wJ31w+r7uJhBNhlAl6u4FxXe0AK2pu0nxz
xcv/Hv247NGAwXSLmXre/jh+z/bm59sxpSteo6aI0Xz4BTQ528r9fA8+fkq0J6c3HOExNqnISwdj
Ua0arVm07UlCbzf5h0jf3Ac/qEFsdlqIzY/75v36/bwZhs1Lc9g4o4S2qmF4oK2T7xbGMZudMWLc
vFz34Yw3YdQDN4pMTtw0SqG53Ac9hLPehNB1+xG06mDBRJI2y0Ok5NKkSQYjZFyQVJspqIkaHy4p
Wf1pMqXBwl24wQ5y87JP9dmvpxAg/NxIudlzA5l0ZNOUZPFrw5p0WNUtciuD7QlmOvwTP53ExJ5G
KTXK7emIAUwnBZzTQG7WkvdhzEclzeb1dP953X7A7ckNcKdhdKH0zyduNsd05GgQaciizBxN3MNZ
ybn2SUgwC1Ukhrj9ZRY+y909TmPLy52qT8jOchem4cTm9ec+Uj9v8aqGQ3rlBspgO5E+BQ7JCHBI
Tte761iZkUhmXD0dO++OjrszuNgA5RxvpeQXJRPIMo1iyx43F6UMWBQ9bbKo4EDYMB0rM207eBtJ
aDYMNpoWRg6s9N2/i2HwQWnpzem8iY5mmN4eDJOfwZ2ueCmRuItw7lFZGKU3L9+vh4+gc8KGgZGM
cO2ltfZIoz2yZI9UdWQqHZkMBjtq42vSFrxM57rClb4I6wqqVKr0xWswO5GuEu96rK0Ofurl5yOu
Cl8mw74c2xElG6UjKeopJIrmKOJNQTiP55iVjS2kwpkw48jEaZjGKSr20bQp0hgi1BkdjRi974Mj
NgySGSznmvJgacGTrxPLkyLnNHxquXk8Nj3OI6pHqR6EuGuuwgxHd9yVGughv+rQGEopQbYmqdfK
m95meCmjTCEc49eTG/9N6ykh4/v2Ggv7tx8h+Ay28H4B+6udKkPYGY7IYEC1uW+H4/e3uEUjt0Uj
mU0xYvCoBLffGWefBitqP382jzJv9iC4LdKyXt9Qiq9iIJci3yKGmt1pIs4mYbCWspnWu8SdmTZf
2KV5NG554uE4mMqaLGf12G3DTcqSXSr9QudJrSfEyZMYx/qKaXxLFCcAyojlhcs7dfm8T6BOLG5/
TshH2xKChpA/NAh7d4ciluO83ezq2LuiZLl20qbnLFVndfnFq5ZsDkRFJihNms7xsddODk154kdS
nGRK4as9fzDi+ZEkOxIRqdIsIVmmhmRyMq6IZKbQ33LKUmhWWfpauA2ZSVO9CXYyRO2q2RmYW4M9
NR0jDFFKqYedRDaWE6D8wjUxI30bwJ6VV63rz2pJ9sYaw0jPx+W2mVIm0dV+FLJn5DJcuC03M+Nq
vev61klqVsvJasce0yOOhGMdCSKGOvWl1x0p4rWRX9yMKaN0On48bMap9ZllVOviSvXcKT3Ilinj
dT17G7Ql2jDB5w6aad4hcuRGJHfddGWZ1YXe1bLsyibl7m5PS/PgW+YVTIq11JKasqIM5wHeUznL
L+QRyWLCopM1ZmO4/33evofNjU5+RsKiLuVuk7J0o5NYI8c8zqi734I4IWPhEkD30bDuo6p3fOhY
H/aqSyFri/iUv8bdWEG8GuLW4kUObDjjW8a6fYtZUzQjAPWUpsBP6JGN8GgYkzKZnLMwTcGwQq18
yxq+pvZUOSqaiBq89ChH9KpKf7juLWOdF6rfi6FPdLHI8cnXP+UcEuUHGFejyU1RKeWgwIVj75tt
xx/TMQFtr4fVxvhnryrr5Vvd0vyHyytQPMpJsgZfdAYXrbASa3wr7O1AFerEDSfJvLQoFrlzx1k9
RiO8gs9ME2kaeHalRHgSED88gX6wTgvZf2I6mj4nbz0GErgoW6RpWl6+bc8HsFqZ1mZNrVny19vT
98v1eH97DzLBW365DKhkA1QBroO0tcWoQrvHpa/8cvaymoXj0NGLvLGXrqXgeQeLdRQN2R2VNO7Y
C6YtG0zr9ljcmUkeVNH12fdCRMmHiEMr7HjYsEGyypF8KJUuVuOJSOOFjTR8w4/hcUJWX0oS3kWO
rjRYXyoW3SGLJGRjZhg2+iVhA+VPkaCHtaeW0Rpt5ePZgJcsRCcqpum4HGwYphahk+vBL2wURHGF
BCz0/CA+4pC65Qf1ZVG/srIoeBfxa1Cj8gvzYevIo8Rn15jAhhFIkQZtS+0MtGoja9W+piN5rS0p
PqQLRwXAaKy8D7IlXRhsUCzYIFomEiBpLNAjh9rVdz0clPW2hybOA1Q3OycSRpCRWjkM1ocgzjEf
B3VjMz3UuyOfjmjZaI+ovWczImwIIJyCYvAl/FGQaInUk067vosN3D9useP8YXtFus8v/Qo9YN3H
m3By/Wrd1x7IsUpUa2afOkrU7FglWoP+PVkXbDJzcC210A5cXl53OMGq2lu/8MB7IYYSCxBv7EbN
Axs1ixZo27bxjg0wxkV2VHbdQl4Njy0UiKKKAF1Xpu1s8KbFsxlfek18OSuA+bKa1/uWDE29oB7B
rmRj8KLjyFOIfAKLXVIVNKc6Vhq5ZWpxrDzdptbbwBmg2XCbiOC2F5qwGnwkRxYdPKllxxVjrypx
vteoGIcxSPa2StHGGPhYbmDBcrJIn9/d7qJTfHrctLkIO6PFZhoxfM9OxlBahCyphAoO+FoOSasB
5JAY9cZGq1q10j6trN/AZv1Maz6LG6fYG0dh0lK30UCD5p1hAzltW3d/CXHwfrdpfc4m51i2gFF1
JtXwgCZrdijj4CuhzsiGOnZ4zoGY7RjrilDntp9w5nO8TWgL6DX23EeGMcSF8Dz5pJlKz7gtj6wT
BDu3DhSdO97NHCrZQsiQ08Ee1qhaUH0rfmDNhpNfuhfsMdFg+4l8qGTZIcSFlS49SPmEs8/OSzjR
0oHg3DQb9okWkaa12ezRW/d8TESjLFYChG0yTXjLyjpHNFWTjXSPSMNHa6Nrgu385We1LRHwFCTJ
JQfyCx46PT/S/LZAeDykQbM3aih5rA7wzy5LNbkLQCj5ZN0iDYpjWRbeJIzDijvAOo+adR5VM0nP
bRF/28aWD4p8KnaPvHwOr5mWZtl0uBZfRrYEi935pi5AmTJWrWhfD+W7PjEb+GnfzgkwtCoWiHC+
lVFiSDasURkUdGt4VIrFfmh66hk8UbIrFLqVWMDCwFop/5T1zO+pDY61nQvmmOwxGPl9Gr8AuPWt
lLHPJQXnkVie9dBmVpI8DPupG9pKHOQ9DAvUMKDGtIB83tNdziEKgHBlM2XK6XDWqHizJNcp1kNh
Q0bXxtvJ/rIJW0qLSp2Ll+BV80qwGXsvWyeNlBp7WnpsZ237TjyrmVQT3W6GgWx0bJtgbRsytKwk
+iXFpmPeNJuNaNMRetQSHvZ5DqTtYiJqcE0MIgVubNafGCAYNnY9EW1ky2/suH5svKUXaajx2RCA
ZcJZ2woCvzoxJZoANgpLWUEadTPVxgYlPJlkaCOH+ezZz5xtFwV8ET9TQn0pLcPWc0iFmOEP+yC3
bNi4UBQ9rjHvH+iliegWu/A0cPuPgMQ8EW34h5l6vNvR5IguDesg2cvqxTL8lEBH80Uq1DKnJ+1d
r3iCVYb0bgkKIfRoEixlh0T+45OpVTbp602LJ8HbIjZmo/Qo3b96kue6NJFRPo/Fov1St2sXeIiL
NfyE8it1+sO3Eg8suGrGpX7rhjGsVyzs18gM7NnLoenkMyEfa22Hf1C+DU9JU62giHOvWY+PsOor
W/QjNu/axcaRp+P3VFd9uMGs07BkAndoA4rFI5Rs2YUndMGe1QVjS2Mip5t1TKntjvGfNL5na/io
r5kV41wc9t4NvoUFg0Q0q4W9fp5OPLKMPtFWAyAeYV2eQX6JCcb7PNQO55R0t/SUvcuj/IpN71V8
CWdarjOvytnTI3TnilxaJxOzhoB3WXpY0bJmp/FsZw5ajFd5sUWT6uIz05IkGHOCZ9S4yp5f4fiP
hSu832ibFQItkIIn44419AacMr5ymOJ3OtmJVUKArxq1RBTHXPq91pS7t+11u7sfrjfEvSdJehUv
nLKmnyXnoWDTygc8EV6ySKBtc0wBEM96CN7DAusmM5Sdlx9bCExbCAZWCGjlhCnFl30byi6SYp1F
vvlgjc2AUNQqs4z49C5Pf/eMi9C7v2xyzwpQbsD2SmHjPuG/THljU09iAX8/m6pnFY3SfM3707ZZ
D+Z5Tk8/0U7KfAkclRERVpYcpTr5goa1C/FeWMSSBi6+GE4mO8T6c158rUKVJYRJQUDn8loeYpXy
gCUdizLoHmU9lUZhwRrqXET1Ih93jtgV1qOnpY60YBL4qOyZe1srSNvDHNjQd5Rf4QSxExp9sxMJ
66Oyzi7tr5RNt3g28mFbJGjbzMAB+JM9xCX3qZ+6Zt1C34zOudYArK9DAQdafcr7zuwhyhWuDlUA
uzJaulIKqngwhQVDKFVZZv0GxZONDsdmarhViM3X0VDAkG70smsTjCqoHorNItUzFbmsvdbNYi/e
UeWLuSlHJFEfNVcFBXJxlDttS8tWHhRg0d1Rt8o4eEeLpXNTSidtb/aEOmHLJnSTqf7VCmE1YHSO
d99YpgHBDp9sNMGTBOzYUnT5s2qk4geywiWejzP7Jfrma2gIW5ijaE8V2ueBIZ/yeXXjeBP6pcyz
8uZrfZhAUaP6Ep4CymjMMorqAlk8Rje0AljeULFAlhraR8cBv3wSyLWTZmzNN2+GVY1baBCysngB
rX3qtPnpFXqodsezNozJUsYG285u8ZqYPXzKPstD9RpNsqlOxVRd95U6m5PSppXW5pwxvujHLtsH
Dc+amwMLOgzPHyQrWYNeRndPtNxgC79E23fllTArpQQhSySux6OkU5T398P18riGU19mFh6TppMA
/9L9Ee4fNc8sK9Qatpy3uVKeVLZi9D5Tac72dXH6q4khHvCk7AyJWjY+MEA2+pf+a3aejWpoi1Oq
w3iSMFuToWt8u0UX+hp/WVMMfsnM+UIPSNonpERcwHHgo5ymM/NEjpbNO1LiqnymXIjvSME0BOWF
gl0mzdTS/FyHBcsStYxuaYsmBMc6pLbZ262DJbK9+bSAfUrbcspmdnSzQ2gffuX7Iz3bHoEnxbpm
lgAIPWuFqGCR15tR/ToPest25ShOhbCCtSyL7gNOLHblzdc61/KB5mie0c0Tpd3zwbn9ctNAyUMG
wxM8PD6XYloEl1pJAWn2vu178M4t6ydLt9RM/W4KPPWuyoTKZ5hNLIlU0zZ3pkH6+FpbdWEUwwYC
Dil7+r55+nVO/C1EcX+PFmzi8/RarEv3NSeXxdiVboNQHNLANwi0oK7oiw0ytJZw/1c3j834KNE0
8M3Ql8UOxapVLnxXgU3RuhEZ0fgwBkiw67ZTsGKVgsYxQ8fZ/FrDTmGaiFDOCPKl+ZqdRM+L49tM
N6UF1NfwmIJYRu/rQh/WAyd06almG7YGZ20hje5WxP8v+O96bBL0WZyNPTOaGKCKuh3n88VLrp3F
ZfLaLKa5BKefRc1HHsZo0g+bCQZWdKpuI3NGeN7t6XpeXl9vB1h1IvTXipj5HhojU6LzbH3YspPW
U/wBvv2AhT2d17l3vmNf83mRRW8QvgnG2OwLzqPPe/akLOnrM6QHJthAgXXulvnIXnKahRIEQ+4G
MQcLYi6737lVyToLjdDWK1Uh79c7Vshx/BrMwmLyWjxbZt7Psg/NfpFc1pevp7DwaYTnK/FlsyJw
Z7Ta3H/Fx7d3KTwY+JcJKIabniTrh5h8Y2fqK9EOXoyS5zukNyuTATLD9kwfHZtmRbEB685r2wpV
ufQOa8W8ZcoUeSoC+zKAYug7jOfBXjiKtj5ViwfeEGu+SdRkNfApRwYIq6qd+2XOvhU+d8wYT81b
9EHv9QVhYT4p6jToZIiaTgeflCP4sZ8pG7z1YANo6r3kEMd3gGg25KKxW0FOWkaR9RVcs6SnuTVs
0pMUFKQZ9VpT8fz/0f8DHAEWn9Lui4qNB3bGZTmBxJECm2o2X773LEPdN18pYBQR3/hGtZpc5NCS
77OoluhmpySdrySWFlRwPtdCyA1f663Kp39VK3/SvAw8tauIcOQnKN1lGbLe99iU39bWsBbZ6RYo
00xIsO6u/ULTgAmI5Am4BmISDaf1iVKYolCTKjKq91ILO5RaP0gBnq9V6Pla234OdYjvqAaH8fpx
2ry8RBwKP9BKn1WlTyeXR4bT874/8fO+xtRPoar5leE4ilWb0/F2z++EwyeP7Vg9hPt48rj9EC56
3dfo5iOvzYFGyw9kxeKRV1Pecs7Pd+v4mHN+KpZ/Tde5+hXmx7pMfE3XSJdfGhbDZsduzVi2mCSP
qoecb0H3gM3VZSkprfl4+NYM42YXX5Pe3+Dj4XPdlajQLPrY8fHx2jF+XXjuLLx4lXqWOpelLpJJ
+S2ZL6ao4v+4q/G14/jMdtzVn3csc35oPwQdn0SPG+PC9r5PjFsBnoLWvnnGjQfa4UPZ5V4nX2f5
oLSf9vglvUsNBpJDU3CDvISFbW67S7yLgt/d+V1MUVHNplfMH3L/eMWcf3HeMw+QB8cjPris4+Pj
0Xj97KmqucOcmAo1HkJj4zhCFFiXP6T5ER/0HDp6JH5+5kBUQcPibfe3tJgdrxDm/iaLt+YHEx+P
3uwv75u3CMnGQ95tjhd2T6zirmQWOju9Eb/rSB1zB0x+FTsc9u60vd1SWTp/1pp5bH5+Wtts0sva
cVG8alBtua1VJbqJc9nKUvmHf7MJRnuTwOVwgQwYg2ioQnJuK4UBKYW2eV1NxYOpiCKzPm4KsokS
2UTTfvh8acoGfozZ31uecJbbnQyr2t2PP+Lz8FFSNkdeVsa28m5aaIkstKl8hvlGPoROZ6E75SvJ
65e5Hc1yf+KZq83httt+HDrHLVR93B4symlwVmP7tfuWGRCbV3Czqf8iO46QBI6Q0WNbkpvn5cF5
SdHe5sfS7Cat7D45EbyiWCgb11YU6JKPQ9caYKM/E0sfXplDl3NAl1PVu4IGCq4EOCfZdugrA7U7
XXvXYX7EUUw1REUFhs1xQep+7sNJXW8xPxeFkL1X2rZt3TrEEMiJnsui14KTVybyOCds6hzZ6LHo
nemWH/OzFiNvoGZKWcdAjUjumOhkCpdsDpdu91NWoiB8Y1YT7EveEz3D82hr1dJZVKs7eXxcSoEv
JTmjoRooz0fmMwoixHuMbmTtVBrDPinBiroSNEa20dwZ7corJvx9UlQTq4YmdptHzCPibHhFbLhx
ltIL92Zh7IZZ+KKxC9ubhO91+348/cZhj2tbmKbCGZDCUbJ9XMUlyK5s3yWg8VzPxPgRuQQSmpgQ
Z6czi8EuODHV9q1FPPNdEsO417e/dyKxuUhqrf+yBI3T5TpNA/EaUOrn4ZFRoQ2yzx++RGZLq6Z7
sfQp49mD+cxd8kT1ykfx4WQI7qITF26ZhlskaDRPFFAKNxfIWLj1ALKhQYSbceso1kHrBCv6cTt8
7i+bw+k9pWN4gyGswvZvnGK0HjJQ1GK8ch7FARpBhwRiqMCoppPqgBQRhCCJ4xLFmZT9tWvZtaih
BtXyWR69zFBcPb+wsNxrEey72tzetud9P4DUg22b+KZXh3Sjle3phMlEL8qKzfVw2pwO5x5iNj+O
sbj6jShHAVEcm1FtxIQ27+G/O+bHpgAK2ZNlNcnySwcw1m0AUATnMhlnFa759+uhty1zA7SH5FCU
S21+HG/Hl+PpeP8NV2UG+zxa7NGNEAMGQPSkx06THwWC0aFWrI73yDphkmmfWOtudTCrEnBJRwIC
m/Y6GvqoEze7061r6Mf61JD50R5lQUS13w/F0U6nIDvG+9E+O4t682N7+p7u6RaClGWTdBJQ3pLZ
jiVjoMrW2izS9962hbKKeDyKeBib2lSHCEMwIxdvp7hH57jn+P69F6+4L3iKDu0NxXzGDgplEGDj
HOMFR/duv7kFNX/7fb5vf+FY2QqsX/UUJfyEzv1czLtwXpKiP77HxO4+Opt81GMZD3px18PKOlfd
DVx+cWm3YPgkRm5/M1gTvPGPW/THzocbdsc0cX9S45cBKESBFeLYPKz2DUVqbBTPocQSAda2adqX
Q2g0hK+A5qGVG0FAtdK1WpfsWUvko/j2rtZOikBOiq71FQuKCAyKMKdS7QdKuJIAkjonCyjukuOH
PRI01U46NdBg7AwI376NEdN7qCcD1BNNq2sSOizcto9bHGYHHTf//N3xAwpCVA9+eL3sPm/PwA8D
76yHkazcfByuu8y+6zjrsg5nPRHhTOjDTjZJ9RvyuU1yo01kA9+v2/OtO5FBVjGjspV7HEUvLud8
OR86DrJuy008q110+s9vm89zWNjpeIYpQmHbJIT6UiHcStom7E8ikDkA6QSdC6ff8yAsNAPKaQ7z
XLl8HaffuS/kWFAcIttWt9zT4Ht+jyahMyMjBZe9L2DK8Rmaka8323D5btHJd0sORc17raa97mnC
+e20JZS2dvhFh5Uw1lHRUFY2+0n7IEvnPzsXg6VQ0VwUyioQiCBRm2lmw2y29z8Pv7HbOBf2LOPg
VVTekRqKv3pir6qIQwMfTdq2Bdd5GmIulQawK4XKyRgN4F7xFk9SflwLvCWcpw54K74Qs2jEbaPu
DY1ZbJqSlpvT4R7VaHwBAmZr9CCexz2cQQ6s51PnUfSun9lnA0SJNl2pnW0cULbR1C4KCpsFokuo
dqplSQcAQ2ia81mQhZboOCRd+Ir4pJYknyl1dO+avO79NuF+b16Pv/adANwQWkF0doxl8nx4PnRh
FL1r2juU8JHyeUFWCA8wtik9ra0GLDGpfK17VhsdPv5+fN9+P3S2yIiFJeftlEp2indvSZBJnh1v
c3QR5cE9RZqwiDThWWZhWtMUGT14pMD2Mhk66kwKFPGqsW2oGq7b0HHdbHN3k/wF7/hwPd6THAZj
kZwTfqAvmAnpkCgPT1OIFGaSCs5VqqEFdORiwLyA4ZE36JA3ZDtRtObYoiS6LfIXIQuF4GePyOGU
xtxLo44a5Q1cm6U16wsX9MXrr49bj/NgiCZMsePIpL47BG0l23ndgkMeCRAJCgP085k0izwMSiMm
N7XtPSGg1jLMOptdDfXgEW/PmEqsbY2lzDnrBj8aZpqlXyihAXksyDFUmmOgr4gGOpIGAdHgKyli
NKWRiY0p4KQQ4CSfl58BpR6WvO2hRSrq8rYVAULqBCqxfQJZT7ogarIa/IQB8xNMLTWKoFWO5Bp4
ATaLLPdK6YQN/t4PtOZmIGuIX2R+/9vfp5Y4MCInKbgKGWqqCuS4e9PEGtoyg4R3QbeZz6qBdna0
MuUF1zBKbUJReE/GGAsNfBFiweieyb6ZpB6kmvhMuZ0apI4tvFvN0PwVJpgOuo0JFVN1fM5WfSGK
FcjGKM8B/slDNtlDTrAZ3J7FFUfQtkSmiikemCLQ3fbWOXCKOFC0vvbUkX+s2+nRBp0GzWNoIzEL
rWkBIm5YFGbFq+hk1UfzBaqHQL6f5gg5K2AIu9cULBtY4A/VJGnzvG80olyKWBBmbXMqSPa1bFZ1
tGEcjWCcsR1BV3kCZGilaxv8Qr36ePt9m7lXvJUcWD79EsNBUBDhJSbr5hgLgM55cBzKpmLFo1UF
FsXpKc1T4IspUQitk323Dp0urXbopExMhyXDBKeTzhZZZ++Pt49Tp/TYt5Gfyp1/PeL6KEm5NnJt
04KBL1RfHnSWI94eou46dFiaOaZaalnzhfxExyCq1VVEwb9qpwOmLGQ6m+3vZ7KQppmxq9IKQiIi
k+YgkWUlikTkGocpLQ/3p1cDveA8Qw4TKqhaovhuhcXmWB0G6pQ3PVbcjRo3QGKrNEc1jInvxzk/
GkKk1ASf6XOyXUo35Ak9W9kiRmymy4XEhS3St7PFzegEwXJMzdkQ5WYXnKD94bY7nPcJfgAgliC1
tmMzu3UsdSk4LzU8z8QwaGV+eJ6wqFEAR1OhPQhUIV6VZSKDRFsw2qa2avnRbWgbxnbR98KBRZWG
JNaml32RJd6ed28dloqwGiKplP+AGIJfSZMpdOp2eB4q0oiCa1WPKXgs9DFs9NoKMeZMgsnT0Veb
8AjIWZCyXWDaDBUMUtD++dpOg+TZi373AiiGJMtaNRFZVcRBqEaNFtPc1eZJEoZvIp81T0AhnoB5
npk8IClWA5f3ezikD38UURe94dJJq7uJHAzt2sBcU/BQmReta6DGr2aEIN9PubYVbkBgsgOBmZqq
L9gdxkRgz/hwy+ThqZs8lE8odch3JaEh5ektGQJgCL3kmHrWPVGbV5TZZyj6i6JkxFYdmf1oKnJU
9EQ9N+pKVpEUutaSdnqRnfoQi6YySry9hQPUKYYX+hmCi0Yhs2qCpo1qUoUaOiivcYRJHD/dcfy+
0nIAKU9iVRIwAFPWyL4Z8fyMNJoR5Sh0qjGAIhZWcsWkE/nCR18i9QbFiMto2/nd2oFE9H6KmLRM
CyGmILdPGY7jHOX4iQ5K8+sFS/+zIrUfz5nThBtMmOdrbxC2ZqTh6IYN0FEi0NG1VeASpENqlIDu
NC4z2WCGM47NMz8mGhuAHR1OwJPaWuhKfCF/KhAxiqOOVSAQSl8RyUuxR7sFHrS3DJjVRkyQwIyG
a3dFOuEBtESYsU3WXfOrO/WrEjVZe9ymWPXSLRFxzYEWGgboTGXaFO3FCJ6/PsqwXf1W/IMO48hw
8HLlWCFzSxk1wCFCyS//BXaPQ+zEgSGtV7glCnOU6dCDiheuOl64fb4d1IjSX8ghmkM3g0K39gE1
efMK8eb9s34VbAIpnlctHoGxQvAhl9zEgOty3Xe6iA0jEv9pbx3a27GbUsTFhBTt7Jlmi1LY3qHa
4/kmo1yT+EIzBo0oQHbEqIXIEei9S1Qh5Vm6F52gCfmxrReWyRkJiUCuzdVKhLYwipKRKbDb7rsu
h61NiBqaATESG71ILEI4BnkbC/4ZjEUNsvTOPB9RSBRJGvk0OgltmxjbLUEeMYWWqZ7qbTL4fO2G
d32jMlikJNg6WwImWmDuSdcWSqNtmftOKkzKdrMLSjN56RdO6kH3upPM+Bti7+uFSTEs5172OPdD
rSqaSWXYDtV34j43JfduneZB8guEToTSjwr3CydxCdxixaJ4z3UilbRl1FhKW2v5R8IiuxTnmeEM
s8Hy+USKR31MB/NE48aX0+5PSFqUo2ifdHWtEXFG2Xbd05jj6UlBxTqGXsNmp9oxSdNQIiLmEg/U
K6E7zlIHuw7V+qHKNxQ8XCI83LPt4BcskQ7nu2jvNCnPHzbeZElUTAoTlhfST3tz7ygIU2+xbXUM
gU0XxPNp5AGxMOUXmP4jSrsJphv1mAnfu5mRAOtyicyQ9zYWiJmAiJnlaKVkayE1ianmXoc4Ajci
ZFyPRhgpOmGkbrMhEokhcjPSjH5sO7X8jomwSZ8E1JrTWpbcRIyIRta1LfVNMgYSEmPZniWl2b5C
1CZZ97Yfm7gsLKA17aThkLgOkd79eGEX82UY7d9w6jq8Eqm4nrIrj7nD8RufwRoQ70u2qzaazg8K
2MYRdiAOuvahagUqPyPLie5dCAlaCxJoQW2vsJGYEJ3EBHMBSlfa41NNle0TryLM8gcLbAaOtitJ
ygYwS9uc95bUdSo6/dgGlpqhIwpmdRtzayJd8PkV+xQqikA3ahJbXSQJ71ZiDMRzzw8tQyTdC5Fk
mwZJRfkQ0YteQDwqziZViC8iWPsvEHVQcGKkeoJM3HMRZc3V4SkpqOMnQ0hu87wQkmfc83GOQUiK
77RwKevqvNfgFdbGdvPM0ydm5ADbSKp/omefJu9qVGFODpdSS4Xd9vxj2ysbgs9P5GofZBOWdSRm
VWL9qLBGxomWny/LJoIHYPXm83rMXTBBgcGiLl/yIAHkKA7PkC5QuEYgqgVZckmv6SFUrl1KtTa4
GsfEo+f8qxXq0HkNQbSfPXk0RAw65ni93Ten+/3awX3N8y+xeFTFztSn1GkHRE9Uguu4XqlwBEF7
x7G69OZ6udx50VfWsXFaceKRihzaYl+vH7ajIHBhfANW8E1/8eNfg2OJKxUDVnQYsIpzF+ouL+gS
M41RV5wKBEkN5pkSOUh8dW2HeSFZMEVouMrtpQpQHRXgmjd3ORdUUTMyF6XpqCCRpXptrKrI63Ql
ijy53h4t/xZVNFjXLyqzyPU3bYe9Qj6R+6e+gDxZ5P4xoH2uO9DBmB8efQ7h9Ru/0CNTIF6dbveU
acIcKAIxDteliSl8uPfb5ejauYU12ygkV2PbLW01MQBCbAbP9R8jHA2UTlBfaNct0JVU7qms8Onc
e8GCoGvLyKoyAqpjBMzzusago3Id9IRQGFHCRbkvAM3oVijBP/w5HznyuJXi6kwWkBvuMyy+UJIu
UZpEa+7NgEdh4vFRmbiFlYlMiRrp9hr7WW3PuwOGRTka7jokgeDSwJUrPyq5D7/IGxp8MDBynsjS
gA+oAkGPzDYvcBhoMssQNgK3Vo8tZ1MixFjUu2L4QAIlYo16/jZJlLbRvtst+4absRmDXmab99Wh
cgr29Z/FjewUjS5OWDc8EdTF3ww9TXckbG3wAhXzeGOr0yeW/YGdUV2zjF/EGuQzNHbkYjGtB9rG
BImb81ysSe4PinrH3gs0pEUj7H40woCevOsGYRf9RKv4h/LGrHryvEFsFjpOT8zHfuGvl+v7LX10
vnyb/823t+P92/1wux/P7WF1eptNJWJh3DYSm+5ut/ft/Xr8tZH7YBeCALxud4c/fvHDiHmYGMSM
djGMenIYOQ8j4jLF9IyD3Kf/fF5bbGZ62KdO59vj+XDl15dyRNOIRJ/OA2X+UXCYwBBki0p3wtvh
vinDRCrT/fIBBhnqfZaLeWx3u8/rdvcbjFD2JnooKq/k7XjeHzfXy317P+zBMY/zx5Ev6fLP7y7v
H+F+78tCbpsft7KtNzCgLbOJS3P1gJKOCUYx5XRiSCVkmdhnWNDUtupyPX4/nsEwbh4mgYvLzc3f
P3XWZELFK/775fK+eT+cP2PXEfCxqz8Wi2n82J4+D6kVK9gSWTY25X79YhAJTlmWW+gjccNbvb7O
cTFgK335+dgBeMh65vbje5KM2w3d3nLXkjefJVTlu/v9EARqmz982e7+jPUyQVDIW16n7W9O5PKz
GyRzEpmJUuW9ycK/0cGuHL5fD8GZOF3O34O+CT+4uR9+3cNfN/s7GJgwZE1K5eaT+wjT+TjEh68P
m8/z8Y7mRhoBRMAjeLerIc6Xc14jGIbkHCJsIbVYK1L2APMQhJ2VOAcTgXP6/ucx+ElJntUeDELj
+GTQ9XSWC2lGW0IbEycAWrSv5d+n3iFgKNLZNSoeJSex/LgEq7J5337Eyqv0adif6l9OPwLmSTiL
KloLNTG/lyOBEYhtlpln3xxhE99COHVHI3sfk0fSje3RgjN02p63QJwolTc6NGriSKyG2h8OH2AY
8txI9IGVUe1hFBiD8NmSA6OYVUkgBuSpzFiNrJxpj/ERvjxcw5VDMk6YNemNBWVdFqrgN20mvyl9
mJ+wmEzs5nz4vk3X+e+8ElXFY4gnOB3gY4TH+BIMULRwJAKO+l8fE3ss7catLX9PfIW4afn7MvXL
62v0Xx4zAQMVexj5LS5f4ai/oycXVBrxgfqjyeKFmASoFqfhdqRbAyZU/KiI3Pu8tfURJR23ezue
9tfD+bkDI15i1AFi0gFUfe9Ox48P5GOpYv4js9XnIcidnyzcM6ssTkDqlSuMaYoQP4Iu+xSpGJME
zQf3xFkRRyCe18Mxyzpn2uPte7DpYBnFH4mRkPPNRZDzAkMV0YlMAx8CjP8nm4DTZ9Tv00evKV6N
1JI/2yrfJnrgpEhUnNP85m4eabO/7D7fI0h4umz38b79iLD+fvMZ7t1tdz1+3MHAYh6YPJX2dtzv
gyAeX69hv/Jqbz9fN/n3+MEeTHY1NVpXE+7xM7j8l5+bEAqDjx/oWgyiZQqn8lzCf3f8+2Hzeg0e
QG8CtqyGuKKH95dD2pfXKMvT9m+CBtiksBps+6NviapQgo/r8Uf0316ul5+plvv9sj8wZiBvchkm
SUWONb/HeGx7Df8TZvfX7Y9tPqvN5/XED/XolaAmikQI2KkoXA/v4fqG/9nuf9+i0AJHJU9Nl6mV
2pl9EPLr5fdm/3mN6zt/fASl9JMdxT0SRHGfVMK7FNn57T04ci8hOrrl6Ajsd5nNoy5zsgP3hLql
B5pC4Hm4gUNTzUOLWu163EcLEP54P9zfLnt+DE0WVF6U/usti+G0PeAilM+TYRTzgR/eP0LggI+4
XIRE9M6K9PXzdAoCcgjX8iHB+5ievR7irQdbOpI7OdPG41TCJPLVJrI3rSy5JJ27JnwtOXa6rffP
63kT9jpcr7RZQXDCsQeJDPt2OdzOMbj5cfnz8Pit6f8ILnUR+WSDswFNj+mBZTuiTWKcPuFEWXg2
29cIV35EUG2axmEPxLvotcq4nbc/jsFUh5XOR3K8bV9OYCyvioiP6XFLsT6Ql2Cx/px0AziAhZzn
gcIsckIkHOrxFCezeTkEXXfId+/2dgh3KVmKcDMvL38NvgKQY1N+ooALj4ML0WHwybJyB5tXBJBU
qdaHvwmj7JBeKAdA4JLgy70fH/YpBHfH/SbEzofz7XgBcqvLWAnXWmiYSZEGx3yz3963m/tlc7vu
wHkWQSMlQcvhPq7B+F3DzZ/k7/Brd/i4w3mqsR6YmtJwjrdveehvH9sQSHxjXaNsW4tdTD7o5MZe
t7e3oEBuQYLLjc+3Ipvb+Lfddvd2AMdra5PriOIPshg1bk/KhiJlqYJuUtjpqyBk+dnM989gzsKG
bdKswfG6WnvmwW7n7cft7XLfBL/2sL3GCwIUjicSkv7I1/39EjyqTTKwyXuf9iv8f8lPAkcp6zkV
PDbaaKTGrKs9h/zl+eMafMYg+umbh3szSdjhb5/biE41B01NrIbJydVVg4394RQ8kcei4p0K/xMU
0H+bBmbHs+NYxiNt1d+Ce9QR9DSdB0ysp47Uhh4/tbdxlfOW3z5f+F1P4z6gWj2VstTOYGdRblBl
UaVqBM0KzMSWmRQdkc0g+Kp5TOeglw7b0+myiy7oLvwtTGDS8OH/dnv7vAcFgSYjmwub3KNgGk+n
x/YcGd84j+PKosqtnW376zb81+DrocyiGK+mDPb2aRhaC5rGyH5NMoPT2T09Q1/WJ2b9G+30fNUm
ZyfhimB+ZaNI+8700eUVXAtdPnMz53Fx2acI7Yk7L1uTmMKF/m0QY2sysx5KcnjLhvgcHNUYMYDB
yNUq3f1TNBW06uOYIu3lCNVO2dek9Mf5gCKylr9/Paas9GF33J4Q/pv3yDZ3/PwZMYM7OuFyVIt8
W39npag3w9NrNO3J6+d5h+Y9ttTLdcqTHUPs9gFMcJ7F0BKP+XzBWS6W/gBdghd6/QS/aEff0m6H
eEZ4r019LSe1U047/HbQZTdocoby4yk+m3LllzBpDunO26RWWis7Uocw53+ZVc1/zSI8+93b6x04
UK4O0FTTgZwd7U1CQwDYoIc6dHUPgUoOMuswB8sRZC3832+3Z6I/SeKrQnuYFCKUt+zXmNojmrJ+
p+PuzwSoVLOIBQTBMEXj8J2TjbyVpuWLw5A0Kq6IMSYvLmqurFC7QJNsuawP1Rfdppw6TSg/kz/L
p0UirML+4MJzjBuM9cGPVaAVkYP7FWAWg6hiPVHU6dMTkK1IbwKPNq8hHAWertYt1OYr0SwQ1hKj
EFNeQ2bQn8xQWTmqNNm8Qdv7PQRID6Sshwy5US2hhBqQOV+CGvudDz7+8/1te89bFyNRDPUI3Vrm
9MzBz+M+/kakfaRr1omj3EiAwULeSNOMVjpEhud7bfCnu9XBCr0caol3TSg73clw0D+3V7BiU8ZK
Kc2ROumTq0T9QE65ZwksUhJR8SlluMJ4QJhH7rJMf1gGBT3c8VQGVa+raIXXY7gC+BaWexxxZztM
SjBe/0is//zYx8hhkoeUxwrqH+UeSjicMs9ZEv72GYQo+X7zPfo4bXeHeHpgLGI2Ugeq8OcUXD9r
eMYWMrvCW2bkYvPzckWZFVVWF6XpceqTBdv89ZaezgxOHIn3JvQw/9TnGd9KTRD7mAh6oAkf21vE
C19fD9co8PHeAJ8pDzXWOvIZVwGMRlI/JT4GACnwOtxIBhPpD4qZZI0zzW93Omyv8RKcYp4SQmDl
eidkoGEcpwCoi5UWuYuxghkWdzu6RX+JNKfI3/5+B/iSUi3Ln2YRHf40qYfbgu3JUCQvwjwT/+Z7
9FZOj9u0+dvnARltKVqJhslYVwEv8GVsa0UPV+6Ri46PIiUF//N6vKPRmnYji0FKTKK7KGq06+ED
RFpU/Kh6oglsim6piKWF+Xk8nf7lcN7/cwieY043mjGguJq+TaVLbz1o0pJUjKxN6sPS399i8u52
+byGs0/p3IfXm+ab8gunE4DbvSBGqDxlcaRu7aMQCeygqgep0s3EHeyl4kwZJz7K42Xlks7X5FL8
cHBdhraYxl16pF/Ol6SyEKC6UCmWsJKzIUyfzdnC8n8Ap5vy/b4wMpL3NZHYUi7h10T3fzscv7/d
yaCAVukII8bOwDqZz8xGmAkt7GCOsESJ/iODBf91gtejdk7YPZnmIXqNcPkzqDxOD7XLRwlnWeuj
9zk/CGEBpdqFR6KNTDRe4UPUAR9v29sBrLhwW2hz1DJQXFNSSEHH3RAV2RHG+Ri17EjpusvBYo/s
40fsByDAZhFaUUwIGgWm1+eMzwDUODWhN/LBbo71hmTUjxDt5AkeETFIl/klTOKRswv7zn9kyI67
0joKb5IC2064wfHG+0cZeibIprK4Mjo/r7FQk0h+oTkvkMvMQqXb55YKpV+378fTzJl4Zma2rDCl
0MeH5U3eTKSFPDOKd+TwVXpifLnCQnlLfztNqYPd5ynxmrLP07vhhBtFGzq29rGADuGYrlBy6TXN
PU+XnNuP/HTm+/a+A+p3dDX7K2ufGPtOOfUt3c0N5sVbonuj66gmKClI3nX71KGYcoPEkOhMg1L8
hp0Or3ewSZ6IXQpNNT/U5zkynVK1yaCBKKvlmKvpheguSnJEn+FiHaE4qtShYPLbQghx/Qxuwt8P
18tsYcCuW3Lho8swxc8Jn8kByTNb70ihR4xdlQW79US2Kx9BkQgXzbGbFrn7fDnuNi+Hv0foOXoN
r8E72/DuVRYOWatXRZMxZJo8WypffEMUbrJxD5/jli5LrEZ528ZA8DmHgzgwpsB3jwCgo/29rHi3
dnxOQiWQ0KJvUuMAo91CrhZqradtDdl1m57k5Of41AxJMVCq/zdT/DUVkMwT7SvyROl+yL9IJjhN
OXunseQk6enYugLLliNMbkLLet/e/nxSCspdTgCBAWIOYuUs56QOrRT+h9D2kMzO6zFZSlJb07k3
nljyXKGYb3alX6KHCLW7UwtBHx/Jh4+n5Ei7SttNVPX2DvVdc2vKouLeu6wMZg8peTurawz2SNR+
b1ZTt7fL9U7blz8lC36sVyrr+xeRsBAAnlJ29DlfxZa9y6ZxAixiiuyL13kUpO4r7+HEGK8MfVl5
J37TslVwmGYWGfpvEXi9fd4+oksDXOexDGOiJTJTLcX06VcXSRzOFLitI7e2XgXBBynsNDGceWit
y8d2F6vayNh/j242KD70qq6fGxbC9pSUjaTQdKwLTdEKQeRACk/Tg5oGuV5PjUiKR1ODAWNsQ/NE
R/PyeQeld1n/uFotAvfkidCeFMqmLkpmCpNeT4dfzx2AHWp3ZDWf/TUS547AOxpqjeonPyRua6we
BebGVL89KdNZ+33Bbo11Gajg4BIgNraueB7W6i54i0+pueKwu6TUnWL2tOdWjTSOMOlPmy/I4W+f
xx/b0yNZNlnQ3CjgUeXUC1I8KSIaSDFzThlmvsxXAlpNqoBSYaFQCHiJgDkL5Wbh9uSqJH5Lvnex
uvc55WLaRUELXCRtHmw7YJoi3gZsEh0E3BbTkrN2eDInDcFwaglK2GeQFxAbkqYGCUdz0xTbPk48
i64nSJZsMTb0wA6OfPokL5vImk5t1haeE7kVz2kQX3vOjtHwqSw6/+sERIapA11viCaQ8Q8z+RWx
vf2zEbYdyRnHpO5KnRSbixWKIxWNhKu2hlsiub6DuJB6O9vClMuZZhwIQr+kI4IYdFZ3un1Zt0yi
Jqsg32oP0j9FnqWVz5FI2+AS03mKtplLkTx2cCF0K0zrOCjAqSOdDEyEFc2jkUJkzzxntDRRlcnz
H6fa2RwxXLf74+ftuZF06ya9BCWxT6VyT11HTUQ++vpmzKIaWyUkQf9xI1J/DC7XcQvkwpJYRrac
nLjnp8P7TGuJsDvHZcg3yVcNRSa/dQ2+ZKYS0DtloWnND5Qj9TbbXO5vMRF/vXwgD07VuSf1aKCQ
5kGa0EyKBs2GoC7ROzVT1D7NB8xB1xdvYh9dc6z/dPxkCOqfnhcIf1pWsScy5HPa3bUwynnMrwBl
vucvt8wtgpEGUnQcbcSEgX/VgGkKmM3F6j1N5IkYp+f2ovQk7Dx8YU7HF9IMJZxkHuPzvElM19sg
ACEgtSd55DEfLwxNzPM4QrD0N9/7/hEeihxjPpIkj++lTHVa7Pdzx57Y4s7Pcf38vbCdCdhHck1M
Tx+IialRhhh7Q4iyBqESZdYvVqF7qxjnEVIB+HIKvrsKX47Bz9a6DOA6ExjKNopEVBflIM+R/PIR
6Sq3QxLTHxFH6JyrLXJBk1+fiaIRg8bYVRRNyTyAODE98iIfAOO8qKErXOVsCUGBCCeegS+nEvNP
Yljsqu19XzY1dZeUU5xY5KJ7u8qxRg1H5CKVTxzDDe1cEPNAaVMrvEQZKZP4eXj583jvncTcJkNM
3ROVKcKR1EjiKexi0RSeChGyeO8fL9LEcY63BEb1RigykYqF3XopnYuihvqmlRlk0kv8/a5o2nG5
p6I+2G+J1fS//OV/+y/fuptbNkUXiCSOFAz8W28/xkp7arG6Ifj7sQiHyn+Un4+mPIYvsb5m6oh0
6+2LqsTVjfVaeiqDmILCLWOn8nHaRhZLBNA/z7ft66E7vsGmpndSgtwklywFUfPX4+7P333xkws9
vdBIpqdRyBR0ejauLCL4AakUc+hqFa2JXprDdaLWOt/7kslKyUC72EjbE3myCmUa9lL0RhjICCIh
UUIux+i6LmNZRoTK7OLyuO42lLNMKQXxVXntXKZySoRPWNZnuj5BMcGE8V5Ja+ec3ML+iZb56eyS
0bXEL0yg6Nmvkaj8YX1j5ND1zsg2xOzP0kPs/L4rWiMRhJy0jPHrbYSFnnJvH5wj2itGYEsnUXXl
tejXBJbqpfHs+doPilDLSQwbEIPrJyIGbYk3MYdqZBmdfSC216laC88qsD8JWTsSdBLvH4lB1ZlG
0UCpp6uVdiWYHXNSdlNG0yetIj7y+19vz6kJPRJl7kp7vnkiY1cPLi6IaB1qZxLlkqT/Xy/NWk80
iZIoxb4rr6znLS8EnCjkL/sKntM6RMY6e0JuC+1RQ6PCnrdQe0QaeZm9oWztZpqV89NTo+SIbLW5
xPHo7IjizidrYt0zBSRKjq3S3CrI7VlEsglyvQkh0u+4HSOx+LGwYzSNsLaneohoubnhEXE7Oi6g
I7FHImr6tVXuyaYRRAeL0kFznkXvKDwZwK6VuFRdcfK1PKql0uqIAlGeEX6RQmHvq3ffbSXdelw6
CT3VY4lLG32lVXTRBaJk7SgtpyC7/p4setwm17yD4HTcz7LDJvXmaklZz+WRnIf8cGE7942qUJP0
6GpTOi4sGcGnBgxuBa115kDuW05EEgfyAZJ2fAW6jFQ5alaar6e5iiWg5THUX+lJKME5oyIWRPs9
wJfecfr60o+riKtzaSnImLqrD22PpzePshmptE4udVfP21hgk34VkvQ8Js+5Kw/t13H9ikzF8IJ4
sF8OEglIqlLVk1179T1ITELdJ7sDCLuyaKmZWfr9WPAWW6w0P081Wg9dblO98JD+nJIUu9vt8p4+
Cn/Lz5On1zjfD/vjli0Do5V4JUEZRki5uv1hd9o+yqHCv4p7/Xo8b08xVXx8P6KGDrSLaSm/C6Pk
fhCxc/D2eryBqldHe5jGw7NT6/CsS9InqS3vo9tzagCXK8Ee/34juOGnlsak4HmqjmwMIvlBSGVu
SoGZPMX3y9+Pp9M2n8flepj+cvqWyt9u37af90v64386/vpvzC5G4G149PA08WWOAqynLfjGE0PS
t4+iQ5O+S4ypB4+gmsdrbw7jPI5L93A5Shjg2wca4dGLLj6sJGcYbDFCnAsYQiw2YmqOdz58uzJZ
vbwJ5buozEa6f/GC3MCnpnwaq91Mc/fiH3j7yuKjRzqRCd6Ptx1YbdnyjB887s96y4IEgXFkGUfp
gh++nC6X95fD9Tv/6aN1a2rGIksK4n17Zbs/5N8sHyb7NWVR8pbnyYM9L/Ju1Vw9sVh2T2B1GSRj
v1OgnqeQa0/RHHSR95j4mNk334JneAYHTe9bUtECHBpeQRnKi9wzO3Wy+tmZgpH1d5PIbj/4jHme
uiDylvwNTSgv4ENJdMPA6YbuFdH6mZuGVcxANj+J3XRsh9Opf+SK3BOZnE9O8MAMirpw4yw2uaZW
gCMbavUgWS0Db7oyZAWJwqqmE/z17Xb8O0c5y98OLR3ZmgIYQxMJGksf/oaxAYP45SCTPd1Pvk3u
i/hPl5Ngq4e0pRyDsYQhQWkdrvfw7U3xHxPsWAhTFO/0w0GYbv/yFpyCPyU/Bkk1ZpqcWvw+mLyj
jr8owHHsvHLe//Pl5+0//QoaYA+GoLljiqaV3wdzp9G5SU3wPF3/5QT2jhAZREQFxZTEz9/Guf/z
4eXzeEKTJ5lHEeNJMTVUW+0/2gBPNiAxsPViAzTYAL+UHrqIv7xc9r+7J2CpEKmmEPV3giTwp51Y
rsKAVRDoP4Idjw5M+ePnjsLTHEbqUGToBOIq8k4gcRqW+ctxuZtPyMTqSEy9E//z9fL5AaWaRPSJ
s+qH9lLQLMiWJus+jORmPicYht6uOIaVi2PpDkFSU3kIQ6cRNgMpJroNcSO9Wm7DdBpoL+XiSLWo
NUQ6DTCApfCKJ70tonf2PzIPZOW1yyUw45n5Iw0rlvdKNuaPBEEtTITwLXFEUyAjZG9DLxRlV8dZ
KklxE+1YrwIdgFggsJFJM7n2P47n9M2vb/fXy+X+LTbH/H7+Fh9I/NU22koSd9nMPKF4H77d45+8
ubclMkolAVlHhZ/efzvu2d8biLNo53eEwldvh+3+W55vaiPADUCi0fS2zVjE7/Ztagn07XI6/uBj
ayGKgx6xuvExifBxZKp+TPP46+cttjHkpiJJdEpqLaep8FXvaQrE402MNxpmPej3cSv3v8/b9+Pu
2/6wjc8hcRU56UT8wodVDx+OLmp3YFt5pkEcCdVd8cTTueYRrtEdZzdlLF5gIqo+6inmszlvf/z+
dv3+wk5BiuLPE8JKlJFpVznZIB5oOlf/+DBta5nAOzuEtKbhxJZTDZuQ/GFwsL66UBPmuZDPuAdA
PEk8J13xAR/XGm+CHOoL4pYH8HL6POADGIb6DCfhTFd00ikvl/ud0fZpDaOqw3C5nEV8MfLcmUZB
AiIhzFdXPQhD5yQoAqTnwCjT0b/xJcE5rnMEP0k+R/Mcfx9iGzO4CiFtfdOraUSwN5bHp56wYczP
d4AP2HIv4vbOcOJ1PpTt7XA6nnkVIaVrXa3HqhJe8E2CtYyV9h5FQ3vv3rZXXnubagnTe8WLXf34
vH4g3SnKIInIMVUuPC2bdqxt3lA03DTC+3G/B1dMLK6Yra7nE9sgdK2pp9tBPmdb6aQVOCLaw4wU
/com+7lFyJFoWT1zjBdHsf3b5xaK9zDa6pY97slSINileLcEb1bH2ZNqYQnyENmAwTVcHSlygojC
jV7No+sLWcPDFeCX4Vu+AHEpnjsUoncaFmx32saHgJlvXREqa2Y071exWezyCX4WCyweTvVKnHl5
VAunYV5+Bi+BRygJ9rSWw6Dl4+MBCDYVpl63nffs+szZE2VAyZ/T7x/3/O8SbyNdQtW6QK+fu7cb
k8NLowxF9sibpYtRroc9NjKC3gCCvCSnqVaLrGrmPdKlau7MhRg8NWvHhsEDls4sL/TClcuW6uMX
78eNTd/8ujDdwFKaltlOUoX9LzL3WJczlghnQrJ597UIcno7dKzW/IzzbXWVZ6O/fb7EDtD8b9tK
BTpR9FfOWnA/SVJ79PpSd5NriJodRdc+6paDBHOFZO1TDsG0PF8wk4Vzs4pcbsdTiMywzyqbrsEi
BoPGfSDKNGVlbG0DIlASe9ycv/OWoCj0VLiwOpP7YXvqrIPkokbq6ZXc67e0JGCPXCcQ+X7ddiLB
QS+T4KZcwyqe5eSapCSrzBI1Dx1vj3gXKZSpFOMzBzqqpXJWC/PYNVOS5LgS2mJW6h0ZOb04TVm+
fiYqViTHNDlplmbiQwj0HLjg6Wmo4qhRqWJbqeS9JPCEXwjEU0uxYplUJ+jPEwCUpISKUvxVOxus
QJONjJmuRweM5LZTBc+7usRrtzOrtjrJeKPYgxSt1DSDe/EaaklM0APZw6XbzlqOxVL8ymfveCzD
yO0FASo6l5s6j5pSFiqvHZ3p4CjdI+NG5VAAFEqSvoTHmtaPPYxhQchZa7Te3itrm/DMEjXmwx3R
gXeS1cd+4kh9VlNyMguXsz/SQEYiUDTxfLsRpJeVF+41kecUPCFfkxKkBnIesxRBB4pKoJhVwgJM
wEaO4NkJrxPL0+jFD5LED4nHsPJ93rfXy+UMLHWNqUxaMecR4nUEftsIVdK0+ztgX/3QpNml+xfG
QbuvCO1nGTw+4XArOzSjxxoR6+QRlF4ETK69+Z0THGpIae0gdJVCmyq4xjC6mp0gr1HR2LFsKtCH
NHhxrDr4+XYEORAhVVOQKS7WhQdxGuW5UQbi/Sb0uUoORSf+Y7uP5RtQtAUJCZNeEkvxhLkyM1Ye
uB9W3kYX1yICTqpKp2VEx6+ElvwixoXPJlYeF1ZwUlkmGH976pbKpqOwPguwBFWjnKsr+gQwIgkw
QtMqM9L1lA8tdJO0R/VNx4UciTOfWUqri56V7vVw4pGGoTWLBQKNAhoSFJFSyinA5H9W1OCKW6PN
ne0jIQiF3lt5HaBlDHBd6uiYd1rIMcToTqhWGgELtnC19XLVCM/qfVlDkPWWBG+0i8DSnHwZgNqe
jhdOQKQUn6p2Qh7lVKQZlrGlXdyvCX7jgeQVBdisoBeqtVngQ9RJLkOc6w6O7hgM6+1Z4+UVw6Tt
EqAd4ZGalorDllcSy0uAwCowR5EpTW4agsOTu9A1ViQDQlzJBaniLYjiIegm4JJ63UICGURykyQU
+Leqlu2V8XmgebzxMU33fmE3OlqfkFUye6rlqWJtoxdA2NDEgDAWRtJ9tZu6RIDYy0U4HsOsKvh0
evd4RCX2s+ohwTRGIQgPauoWMS4SmDCSdvW5jK4dA3coG2KgCJ0sDO46ewCBLSKoyf1XzUAMkCa8
YDIfpd7p248LSAWStDbNhRUFcjq+96grfhFEDE2TiI+UgN9Lp3cSUa55a96Hsdak45o+A0ViNC3g
PAFDz2hSIgqpHoNijNj8UAkYG45Az4DSIgo1c59qh6YXDBNyB32BpWKoKKArh+pzN7D0wE4SUy88
PLnKJvVHkWQUklVbcR15az62wr+Vj80fqKsCcafWkgTZcCQlVhErmur2gO6EpfpJVbD7lAPB5AYS
gK3j0DpBBw61Bji8bKDWUDNIWtpV6KurHCGQiLGVACDsyk4kPGpAL3wuCUOIPxH2XDt6T7DaJGG1
tfPrHRKXJPc8ATWuibJMcQPvtPql0z9WgSgWKl9fD+uX5blBHJC9q4VhVCxe1WEI6hb4PI2zP7xu
w38NNJ6rj9O2jCYwmK7W2SPnfwCBGmuXzC1lGrodhABAKIHVpUQ4ArU5Q0sQMRdcikW2XS+c6weA
zDvWsr4JprWBTyC4QtSFfGvdkiiz4CRNrRoqT7LrvQlKeY1WlOARS8+FxRtNPw8BTsLV/qeubvIz
9BfPJPvrGx1dCHCpSW4zlX8J34K2uhj4OLR8KZpRQvAaDbVsDXhiLp9epIJkk2nQsXIkS0waX7ZB
JT6w8SDXPwvk4brj2tNnqbT1VPzCJX0SMxW1aLnFKD0Em9akZ2So8itXmwu0dRPpWtP9gJpwrUrl
ZRSO0YCB0FWT6ZLNbe1AClo1Y63FYiLLB8StzVr5+tJ3XCJ6Y2MacqavJrWFIx5CJyGptxXwiNUO
wQ2r7MRDLGA2X1J0p00J6Um38fXvmyrsgi6QEr4Zcr89xwIwT2Dp3XofQfjHZP8edytNn79Ptu09
5MMH2UYCF6fQaGjnQBDOS9NrsrgO1y/4fpL4fiRV2vQewCWqU+iPpOcqjcDraqLfomcv1LBO0SHw
XS3qSpqaILIOgRcsFtUtulF11LU6NLgZVvjiZPxZBKysIrqVZuAS4Nh8mgW5RqxvNFRKVK58lU5Z
F2Cx4s3nAdq5fD7EsjUruZlj6uR3pGoWiSwQbIyFVPkdQ2zw9flqFUGrVcw8kQa3Fid4VLPGsekf
8tjMituqKbaS+lfdNtNzlqBSzbev7tKW480lXLy0Ir0SWfw9ZVVSiuuC7QuCF9XqfZP5Q1HQALJE
N8BU1ZLXJzFHs8gp6BYrsuNRkdxTwvH9cv29ShA5iHYHooY/1ckF0G4uLlF21zF1pxCJNPVJrZzM
uiKo45VQkmjuSiQKLtCphCDSQNpWLzaimwwQNBmgSDVVMWq9Em9S45N6y+silmEQIJS2F/0h/ULC
Db6yqF9AK4a2IaJgYUeqCdxI2p81DgJMwrUOYdJyH5fpsalOQZBZtVRTlebGLjZh6BKSX6PUEWyE
WdpT0u+gRzIcZJtk2KIZs05F21FvFHzySto2swnNgrWOYMkqbPJ1LhlHHIS/RGqUVrW3vF5pttxK
2h7/MMluJR9VVZPGlGvY6uG5SqeBVjpFvfJobbUon8ZUX93E/+t4GcKtJGarmyv0zo2YpwgVWlk+
7NSWEWAy2RLbSOkJEBgstLjjUz8dnH1owZOPvQN5aYKW1PXeDVopiweKJ/pCdOuyBElNJ7i6ZouD
eJcknnJ4JVuNOQA6K1q8i1rwetbU6xZJfE3zwngPUSARezfrkjBUek9g7sT3MK3aOBCvi5Ys/1oE
MWwc5GsvV7c3AF5gs6gEc+swuadCx2Vye/CshwGMgGmlv2rCSecoCemL1D6sqDf8afhmoWOlWQZw
mRYcbdJo5sF5ZLnyrtaGdX1kt2SE1s9UFI+3J0MW6VqB7Kqmkd+5sSaJiFUeGsE946J0qWb/YmeM
cBpSoNRSJPDHSdq1qpsqXj2Ga/XQym7UxTp8mGeYSsgGGsLjposiYd8SHhAf+IE5vLdnNCBJ3dMe
MNcvuYCSuoBiVaWMSF6WUd+0sh9SAK1v8mvfnt5+3cqg/KJUZ9aVKZMnPeSX0FyPcG2a9dk1Twra
EVJJQOxIi+LGu9HjsuWsJlVT0BMktcjpLq3y/T0/YLQttHjZpwtw3CQJZUjP4QZRmxfDoVbgS9Ss
m/enbY9LkP5rVcjBXkPDVJ49L0cD6jW2ri3nkyhyWREy9RR8+fyeW/WHv8TnHDzbS9+ThvzpyYCp
keDnd+NG/jP3yH+o6c1v8/gsDKgtaN4/PqAZNYH18w9a6zT/g6o8TJBe27Vlngqsb3zwROL6xvlx
8rgvQZz5JwbIOwgRint05v78rpU3/CyHxW6WX9Nu3Cjwe6bsip2fIYzLG5XRYHmubEsydI/vhDcG
nN/o6vOb1yeUU96DJxxGXw4wSoGaj36UVjt09A98LH450N0JlnXg98bY6rkHXeYqYhoW/eIDzHxs
zyxsPgiNBUK6OMfyk1J5i35wsTlFuv0owHeyrDEaCVnOcRysAMfhh6GWHDF/6YRCEkBe+nAFIg2i
qsaRlzgvfL2lbv7Ojsaye2oGYVavdkxXSkvHz1OU9SUuri2S6p3k7+JIFhij7+ltpvh7VlkPpMZ7
VR3i1JY+6YzBKLDEgeyNoT+Zrj940cTp+jBmsRFmDFEe+EVRyY0Yyd3QEiiO5S/Ox2/DmAooHF8r
xllQlRNA2obyc+m12HIY2kj+5zy9wOmJ8nl9gzIKzNNyZygG6wW4+tbVYlruhQGa37qxlrZZupU2
4Bp6M1b7WQ5QOmN58Q7XydYGcaxkDTzB48rOkAgg7oxW4CicL0eR3Mdyf6UHhntw1Z0gFmowBs1T
l98jiM/sYgALpchPxqdoZzujBumAsGldqzYiM0G5gfvriIma8hzEYoTbjSxGEYB4J0cyWWNGMFlf
W/D5ZrigM4EfZWtzUTRNXCT/nSXaND6uJoq4mQHsqRxq/2tpvMEVpoJaWkannbEjUN+avK81UF1j
Bz84YINFrTKKrvEKnIQbi2FLyUZTLlRQ30BQnScPWaWorFx+L6Et9YwnZfWAnOiBMcHeugE40brs
TPKMis3XFthuT3Y0af2io4KngISGxAh6Dtejixn8L7Shutz8yKSxxRmKvRb574j7naR73k89jEAl
Dpaz97FwE/hQ5OdGamOcjJL2i9Nror5Ltpw6chGt0rXNluUYBhBzebmY5nzs2mjgPXtnaz1qaPCk
kedFHrAjr7E/Dh4oYL3wShVRa8ArDUqG6KfUNXo+CgW0tlOm/r1iRIdx0MgvGWu1PX8oRbD3I/D0
FodBDlFZdAddHZFo4nkNBhxFEbbE5SjGMIQAG+AJ2drVK0ot+EEjsNqDqnXaPFFjLAhIxsExUEQI
8IHLTcLYpJvKCRqjgQ71JFIXVDcFnQ2wgaCzFx4iCWRUcCBQGOttZSeKHo3PiwD1JJhf1GFDwb33
IwMOSO/RPK0vR08Q2mzsvb4B70LX8Ta5ThZBCpa4bEklyrLEEBrDIM9Ur3AWMR2BZbJ6qF1LS1Qp
Uokkvq+PQkrhPNCJQW4WGqoYQy8AhDUaxcS/Qo1GIjU8jqo2h/M5hl1DQSV1oCXVwibcKRCqD5a7
+sHTQ0GCHzUDXwbPZAQxkGT8pxBaSOR0qzrocotjFEB/j1ykLiUAv4hHk7y34nf7EcS/XnFacRzA
CTptmJMQwT8GPjCBTGLJb3EVxKjBD5qBaP2k2nwdcwFfzxguwpfSAl+PBPgJ+SCIsFQI3RGivvsE
Kg8eK4BMDA97AhklyECSteKZoK+UZ3wvIZ0EfsLouUDNOYFCCleHMIbGd+D0rKzdkiLXMSwErnNR
FaldzVijekBVEPxiYfDj0xIgNrCVMtS+hKHKIbd7VMy5B4dtHBCAMQjGqnllUfQz1CBygRIicImM
oRFc+kEIPQD1y4FlQW8BGbUchhjLosEsbR3YEwRKA5/bW1sbiVnWwhF5iQ6CZMfqQE0oZHudIzom
il0x94NxwL5QmFRV2jAsAtzC0dfn4Ah+rBCmZ5k7YZUDaOcoVX2CJM42CEVyI2M/g/AqIJ/jUOt6
X5w1EInoBfxQ5MUoA6SaogGV5pVuUFDH0CylqL4M4jIq5ObRMKaK70KAgwJfy+Q3k3YCnjP1nCw9
QhNcWeBWknxTwnOLNRsEyuCOpk78lsBJI5fLEaubLj3BkIYBgReaERnjUVpsES4TD09LkKT0JLqL
XnBJw/lBSYRcqJFz053xIC9Gzq+OCXXQaSAm9AyOGxtJAWnxrbhnu3+9XHeHb8f378fbtx3DW8k6
f5GJ9YuEM4p+xzriLuGoc4NFkZNj7IwI/w6InNH1VTTFGjoEd46eQyJkCEcA1O2pa1nHI8hnswS8
qqGWUQoEQhEvPzXoKRCNlQPyS0YuCeBH4AF7YvCT9Gji5AsNkwB2Acpb4ieOwJLSs6/0opDjgHS4
I5taB78jTKiPRjDInrHGoowqUXCORngicnXBPDWn+UcJIgRvFzexaCoxKqC/lWW4LUFFYw1XnIVY
DFpSzVoEww4muoCti7MQXxgB33FZeGFiygXAHgvWhyMyIxCY5AiekDAQamzAERJUKI7gRQ2UA0fD
co6UHZwegbCNjIMZVJTXKPhV7H0alEVEgxrAKK5pDkpAqEcArPhX7+jFkAM0GbK1TB3UG0qT1ClO
LUtY4g2a52KF1AVTKLzwFG2pw6cUmCAW3cDgNH4Enq0jAF0MpiyhiwH9bS2HXtphHBGrSdZ6vwRe
AlEGSPove0eEkwg8IhKUROzEFdfGeoFu77CIZghm4iXwTUcvGMxEW4nBCHIrkpEZquwKcMSo9pb0
wyxsKC1uGSLGaBVyFkwRNfpERNT7EqUdHUk7Jty06G/voRulGJwtYpAO8v2IB1YDJ+FDOFfNeTYh
Jgfxs6i9aYJBhn8LoD1dW6gS03ilUXhpqp3RqnYwweETz60Ohb1HNFGtOJRuRAAPgRXqNG66FwCi
q0m+RURjmAROwdXK0FC2JtAz1nM8vxTng+2k0cxYk8QEYhVznonzArFKleaC0nzuW+AHD5yE5iwQ
8PZHyUSmxsAIWjLae3L2ga+wVG6G5I+AxhgHw9iZpE0BCEKji7GiFmsAZViaejCVhgr/DvnQBMGs
I0QhPLC/RHWnLqrl3oepoCTQwGAE0o2jgkDWIrgw5BBHC9MyJPCK7oYwlu4OAAeJv7dIAvsBnKFx
THDpg+pGycORMAwXJP+UPEa5BM3SUi3MCRCFWlc/xCpb8IPGMIITqT9gc4jFqF2bYPSRoC45dISh
hID9kbPc8R6CbbEDg7hGEvsAKXRjjbSTLCDKkznLgkoZq0EqVTJnkfxMMNdBcgKeVgk8VIJ/55tZ
EkIeeTWC8TJdBHmBvVEV5YAmaAbILR5HDuhxAuVkiampg8TwLxXCMhbZx+LyiwGhmQT/shV2GjQN
9NtHwaD0meuJUi2CpbgYkMRwpk5BEY5oTikgyoFlvGHhjEanoThaqgccF0uZUdVVDJpNcKRGR5Rw
sqWLGAqRBT3HVciQMohpRo4IK4Mvgb70agGgjCSzBzx+69hVWkhp9Z6LvYUcBkRzsNwSB5Qzsxyz
WAjEGXPW1LLmyTQFYl2T9HriLhBEKgSYipEbMwjNVEwlBe4AkiUZytAYPF4UB3NUszFIG/pOMnR0
MQiIthvHHUXCv74dU2dkgE7oij/vSzQlBcgsebuIMstCvcOMnAWSrQs2MXoEoC1SigVeGtFER4IT
pZMkeZoB8QjGxdWw9caCHS2KkTSLSxC/BlD9SCl8lciJURnAGiQOQ4qjDQHCgG9DeNspUCXVZBKE
7c4v8l6K2gsDIrdgahaEOlJUZIxDiI1lPgTFT8HRVLU/VDL7XqONGZjUhwxhCzBsC+KXr4MhVBfk
65opX6t9RE91TEirBg0qGbx2HDE9FZIiiGjBlqDZD2D16aX39NKbSDAHMbtmEKngmSLm5sKQFihk
FOAMvR44XpwYYSkwIYPUzlBKeyH4U1ZOJs3raYRKLUqIiSUdBhTRmMXvqQVsipAex7A3M/8WEXMM
x/s0DiT3gsIgqPIw90DI7E2AvOha5RP/O5eTgUXSgoZ4pQxxUBNSgCrX6+wXxUEBAd/6RXgiCeV/
BB74SD+sL0fErADppc57EbbwCENTOw5Mcjc+GQo+q9kyRQ/HFu3gM8sUaCacACgb4prUDMDgu6H9
JPBJWt5QB3xIwDlvUTpQSmp9nYuyFZZ1A9rU1wi4qDjGSESFZtR3rLoBPgaBQJOPUdSUHUDHArcU
UVsKpxDxdyRqsc4KWYVKFwkTs66Qt0F7AyBLai5ROjgLuZ+Ko8JLaQTi8iimU4kYvAJk2tF6pqLb
OAWoZ6OQTDYpJb2Qd7JguhRHP3bdBNrQc+lgF4ww5NOSe5geJhPDIjsAJNwODI03KTdEdRSc26cQ
t9ILzXQBCUNKVD/lK++UNDswDuDflNoe64hLuZaJpfIICVG1m6lI1xHQxWekZMeqaYF0iAxI2BUL
GljKmyH0RDFeWMZdUELC17x/4vcpwDj2WjKQtLQeWe6BcaNlMGzA/R4WeX16hsBXFOws5SAQX9wz
zV+kkIhEsIBpizMcHDqARVJ4t+79MipQJOK1YHgu06VHIAhHdEq8WuR+e6Y0QQirYIrG1JeJ5nYQ
l56op2TYfE10ArfCSCa9myFQgJz4gSsxCQEPtG6C5Y1HiB+RZeo6IUXKdIPHD+I9z2SUYsiOfpBS
1ipUCXaOcUR5pz5tNDEETp/YxBRFVZm9EWA81jJF9qn29W9AbhQDZCotgLnwxjOtv5K5AMZCc/RI
BdOsRUjTe0duUb6MOoYZRm3E9wpQvQ8L8QrI/R0so029RbWWI62fqqpaYuMQ5GOy2UtpkaIZ2SIa
YGKsUUwGIub0wLmPXIcibWD/LcOUbajRgc8Gw1APJt4JSs7oGlEiDea8RV1KHOMfhqsroHcxEqpx
sqOk0wUQGCe4cuBc4Qd82UEy3XumuSI3uK57pdRBDcILN7INo6B0e3KSNfkkBevAh7KKifLD5QVo
67jAMAopFiXYaB1qxTrSA6K2ejpJUe1mllNw7RdZ5PKTyljA5vKU7FCBOyJ4O0itKSabnzp+gYMg
KbbE+iUhvjQoxC8WJnVrtRUfHiCYimM5hRjXIVBQM7Q6g+hRTnIVFNl/Qu3lRiaPIKNvBXA2rleJ
HCEqNHIQbSpKQQUGYoULTd2vT9uPW3z4Kndgntu+RvqL5nuoD6QReXqpQRDORTBbkpGn/K2tHjPw
qv5SgS/NsmOtzQu53N8O1/TJowFwa4x0RMkflKlYQ5VezvfD7W75jxIwmj+K0Nz0+sjP7dR5+P5G
mkjzg6h5EBFzQmLq4H07bW9vp8v3C/h0KJM2Y0o6TgFCmcP0DgIYRM+DkIZo57Dyw/4vqXsw2DXf
2oB39IWdvzBqhiPiPiswRVF+Zpyf5IIPL+UfK+dDXKi8NAk+c+WzUnNF3oMDn5bNJEng+Gnu5I52
pshBep8p35z3y4/0kiv4zhAhyNc/Cf/b8R63NUw3ffZ6PJ2SSGxu9zAEQIslDQESDzErsDLC5fPO
PmeXh7B1e9VhMcDh/eP+O20oGEO3eNRljNPhxwF+X8cHq++v9xP42K3AqLmb9uZ22KVnqsLRXF9P
l5+b3en4sdldw30FI6ra/5yuyuXvYULbb4dfH2HQw/7b6/Z4+gzfpjF2l+th+sv59XTc3YH4qCIG
0e+cnv2c+n7fBLhcRfNFpvQUgoV79fl+Rr9XJJ08j5lf8rp8nvfgU0m0xjA/VxF7rINpqnI9SPns
7b4977fXPfyyqJwJHhbV3gBNoIqCTWiTqz4EGksVjUVq8OKjFNEYoF8sKis9mi3iQcZv95f39MH2
4+Nw3v9TvDv/fHj5PJ72aOllp5NE50MiQ6BvixYkAjt9ezn9z/F9DPC5LltHAsP5c/TDRSCTh583
/Xi+Ha73v0Sl31+3li01TIb4T7/CMcARRG0Dph7479vrj+M5fZHt60MHzB323477/eH8jX/CLg1v
fb1G1XjtM4wERjBlggnXJ6/dlEntj9f772/XQ/qH9KYKP6ArCoQw0R6vKCRW2LfTW/MhiPi9HUxt
bG3j+7dbWBMYQtdT0L01gdXISvLpO6jTXLYvYUiwv742q6I1l+Df7X+ft+/H3bf9YRuswo/tHYzp
PXH1yBbXrzNwj32kIUZyK4el4NQPKG6igQULVK37PY2U/f5pHOh+aF/LoQETggOZsrKkO5qH/7hd
V3Dyi01uHlx6lehxMfA+ORIZlJQ0Gq9z0bxpS0Ee8voZ3+uIUQN7TcRQK49qy1+Pvw77zQvwUU35
vHqvafnY+S9eCMdat1tWdPDW6iKCY3pGc0BnjjWqs/WuNo/pcdHY94uzch5rV0MyV7//wlDeraHW
aoZ/mIV/gDWPtFDR6jlR/HY7vpxg2OJtS/ejga/xX3SHJWbYAR3af6UoDzfWOh1qiI6xc8TN4pRE
mRn3YE4+FdEyfI/zXbwizo9SjoA0i6YG6+UALZ4Z62m4p/TeE4c41LtuVhM7obDWitoVG8nnRNfx
+6JqR8ytfn5yKvgZkAUU6iMd4cfluAffq1rbOaRZoKQ40dL8dC9iEAT2gtwnvdjL1Uw6usQN9VxM
w117ufzifTXVsgG1FUurYQcYWwFCPYHso7EjkIMlFKW2B7NJtg3YIuJ+EAZZY7C/fR6vf4JT0rb2
iGzTy2OfJcwn7XltsDxpILlPeBrbYKDZDfarIGh1RFcUEtg6fNbPmBWgiUQtMWPf/GGfwava7Hnu
zMFhE++QZIja/njCVHqCaEoQlJ5EdNih7g5HzqB0TYDBKxCohdnkPKOnvBnvWiHaQgMlm8fKFxGI
gfP51gLRvzhe847WZDJ6Rke3jMZSvUYJ41cn69Up3st+SrC0rm9jS+H+6AToi/MfeFcWu9ijbll1
dG2AhJtawnUDS7m9QddJtmJYiKV0ghHNuoTrS9dze62tN111Zwe1qFOt6IYXKyBQphYou7olV+gZ
ypXDunxmMpPc2jBdKj99YLvp8d340pVavJMj+W8fiS8xFYvQQj+GGZ2+e0StKWKNhyJKxpXrUJy4
gg/4J36oUxU8afHBdUROPynIl3GuwpGaCGs3gv9VM5Bv4ziikMjYVoBpuo+4Jn2oprQq/VEDfpSc
S9SggqTrvXNgqdLNX0YnSAykXtAznNz84UoUhmq6Fqy0/KaI6Igg3QQl80pIPheyRVE3ClGeipDc
iy1ZcEdWiNJs0bmQhUYXWAykHM/ALSKiELeLbpFyHixUkS8jCkbuWZYFD2RhXApgYZKLQUt0R/Xq
d0t5VXytjv/SaPJl7BhDypZkuANgrcPiy+k3R2cZ1nS+3VQt+PWJCvCTA/nWJeZeYfvpYXBQjanF
Fi34JlB9SqKR0h/khTnvHdhfW342wlLknibiEJJfsr9O1IsVowZaRZbrNmXzaqY/OlSzPB1ds5qR
EJJvI/ZKvs0nC+75oPG3EuwTPVhRkWkSaRwdjmB/1SnuQah8bYhERPdAkCY9Ai1UkNmmDk20aY4F
y/RE+UazQap3nEQqVJilHNFnIhQQezksFynrAwVbO5TpRtTUj9WXChwnVUjRVmj6ShdSoJLaCp0M
xhPNE/IeucrHKb1gnVQj2Fsjlj9ZqjKMG4C7oagazJ/XxXHgohmiU2zJBzxIut/AQo1fKm1fmpcq
5KqYIkapc5ul6shqILjEDsdrIwrB13LvI+RDoVpX1pKgvEabSxSgKESoqWsm2Fmhl4re1F3bkOok
30pR+XJJ5oE2GchFSy+YlpfwxuB7gpUaW5sXQfx67cFPSqqsReW1ZuIm8HK0YJ0yr0fwo4KIgkpF
BaQYSQxAhsje2vQHKevj+grnuQ5LD7u8HDRyBNz8JXWUZXWeudQS3VD6q7La3fDPHiyUHkuihw71
C+/obhcllopEyN7G9vjADA6LgItctNiwCNxRS+YbzQV5ezd859D2jksBJC/+BhuFjO+4PNNFxAWs
C9EpUaMJUxsmoMdGwzqusXwUbJKWSw9lMV9w1wazNIfFBhsUz4phGcQsWhht0LFSd8xWYphnDMRw
kOyNy3EMuq3EaxhnouxUqwi8DVEkIvpJ5R3nINsSaTK9DIZJmzYJnHMP4tIExqAg0S0DU1VHMcgl
ozbRL7ARO1rk7FLRj5/aOvACiMy4CohF9SlQaCPZqChVRHNnSQIYxyCWsq96zPtMgkc0TlNnjERN
n0csdlcDggvivQFf2pojNSxp94nn+40n+qanfh5NGBLVOsH4hXyv+c8ebWhTLUjKIUSSbt7G7fnH
Nm/dx9vxdPzIhL0wXv6Xcv/Hx/b+9sfL4e/Hw/WfPq8/Dn+5/PGyvR137GLFIi2TbWYYaXd5T4D1
4Y/P8y7isYc0+v1wPf+xTwTsbQKztyA1LEg2NcGL9jH6Y6Tj+/Z7/IX94fV4PrDZakO4Qck+TzTZ
498Pf4SRrseXz7ANf6ScCDeGs6pFwyOT2V0vt1veZHYidEUl2xAGSSv5H7f37R+Xl78edvc/Pq6X
j8P1fuTTKYpUZ6TNn7cn0rn/JS3mY3u9Hf7YfV6vh/P9j+shEufZbRKELKHL83uNAY/nSAEJA91O
/B0SJJ2xHu6f4yLv1+359nq5sji/IJnEJAINAUuDhHnFFd4un9fdAUoVod+QJixhxPvh132z+7zd
L++b18v5vjldtntAYNexQI+kxIbIrgx/WjrgH/vr9ucfkesSjiHrscP0j9yYlnIHU/+VYR7xsV/p
8vxxvdwjs3J/vGbuPTskSekmG0gv0ls4zeP9uOUZaYTznPrBDOsFxhP943376/+IJLk/bu9bnuBm
CaWR5JXWqyvCcfvz8JMXW0cSnml1rlrd7X69/BmVxPb1NVUTsOukRBI7U6zDOLe0zbdtVGNBPK6H
5VS5pZJKoOQVava63w5sXlCRgio9zv14Fuv7uH6e000H9F3CtFUjnc7363Z/jPfneA6q7ONyiusN
4hpuEzeY1IvbPT6j+qf7efm880rfMqeZimt2248/grbmN0sv2HXDRHLPIh7+47DRj9lwAkUqyCIl
zo1LVf+xPSZ1+nHY3sN6g1PCFi/QSrJU2+Xatudw/w+Pf/rj8IvVXs4s6B66vsq3/3YJU/vP5/8W
/yns/+lyAxJPBiPNbB43O5fIzbqeU4G2tq2O0Q5cZVFSCcSSufmlWbLh01Z/noOmu3w/H8GiaHkH
MfaVYMbSpCdkkWj3RKVqLG26fdBLsoRVVpucMqPbJe7xNKUjEM1ad6rVDY7/GwR9dwmX5fa2/Tiw
kikJozfdmnmj4sr+c3Kt/n64XrBLI0hNSK3j2hb6WeePcFG5Pcve3+MYg6JhRcLwfuRbFoZ8gHwk
IbkjTENsr7u82fwIirCJk/IVvHX5frq8bE//4fTxtmVlivBg6m2fJWGyLHG/wtazUmC4ebXPb3f5
+M37yIyjMG/S9vw9OJFs8KToCJVCWm9S+De7P3nLq5jzWlnebvSgiAZPy6rPPim3n8dzqqS+fb6E
zQqj8lVwitukZN/+GtR3iMB+HFhlqUilQn3yyEuXvJc+MFqg7NTuGpRvUCQdR1ESznfSvJrTTsW1
Y/dJkoKQWi7RMtnrJzyn7NaSFQ/in7Yf/NXTvDedrFVWJudLUMLJUrDR4MBIexKF93D1rj3zqwiP
u55MUeLnw/egb38csqZkd4gUWUYjbIuCetvuLz8rbyX9m38KDmJ3gpQLSsT1/jsoy2DVTyAScrQA
Q1PXouHrnC/n1yifvPerOSuwOx221xSPdgcRA+MRIKcXqUxB9bih7m65fh/BQ0lGilVQjhljLQMh
VuQFQDA6c3nj8E0jDLbk8Db8rwht5MjpGY/OcpFGEoN4V7o4FSnrS36TXsj25ONQQyd4b8Iz252d
wSxJ036za6JGZZgLDavNnm5WGBWUogjWuUmq5/2wvX0GnfYzB+YQePC0eDYCSsV1TjsdUYbkEf7B
46YEXUkP0Kq1KKrtlV8NIdcTcvw6Ethtbwc+AlAthj/nJe9+BxHa896jtBbhCwsoYPcWfBxUOjSa
Fjce2LXr95cNbyaXiKJGl3Z32r5/AF+ARgSVMVluXFdRSuLJJZ52E7RISDgvS4q5InUYfrnGmU27
j+FX4sVHONfaZ3wKw7tOinPps1bJAcpzSoUU1Cal8mj/kD2ISk2+bPe3z9fX4y8eEeNC4HILf14v
5+/JCrOBHQHNzcr6JoP0BKhG9ZxcXOgUEwTdnUOnw5kfhZRFkbr+BojCbolu1jZiGAZJpzOLUrGB
dyjTUllv0tfxgHw+fkYxLylQrDMzDTAzSNh/DPqU7V6TAirHmJmlajj87ROECKTYj9hOTszP3KM7
Schd5R3KdUh+/3n5OB7+YPWdIogvXlQyFC+HG2g+Ia1mIoxiPLGTQoD/hD/7fvjEgztet4zW/RI9
yv/PP/+XfnTiqAYvJREdQyV4Q8XhRA8XbBZ31tjR0r06o1Sc5e+HzjbLcVGcJhcTmWxTRJp5VHeU
T2FnnZBLL0KuYXXi8U5ur0+duGnKX1LxH9fL/YKUvSPRNimrWoUhcGeVtIz70MrspBwDHM8NXOKD
xDWXn1c+VBeKCx2WMnz78Z33i6TSTKb1ERonqI6XFi0Y2Laohg5STz2zVdaynWS8b693PslIDWpq
Zz6C4Pqw/w7iatVqXsfEe2/H728nVAFJK+Mrn4r6jdHwnfhj1153g+oHptXRFcTIJ15Kbpe2PZ1i
adgf7+G/PX4A0gDptZe+N2vY+HB6TVm32D8Nwcca7UsSoehA8U20qOUV7Vxk1J19l04R0keSRdlw
6Q7nGHbePl/Sv+NnNXAnBYzMlnfJJdnwGqtthEPbKR5i7Y2gcHSlPmqtmMoM0xnw56fqvKQq6dIc
slwPr8EhOwNjUbrCRGFag1fIyxSi4kFJvzS+0Zvn9Re5lEn/tZz4qHiyseKxb6rQxSrf2NJiICiw
xBtIZQ+mBJllvJzEjMOgBCQ1xGko4bh8068Ln2eytb0SmLfRDaItufQ1mlLDVlCHVS2kKsdruUmo
ONlSLb8wGEFtPHzJMK8rrzkkCSlJO4nG7Uy3POVEAfRB8Mr0TsnYxuExJqBJU4kGuhhVNJBB5QcO
fauP/Lbbnp45cQIp1LNpUjRy1pjd7bHuZdbJ7CWzDAJKwWjqRVq9M4wSPC604lb8+uPyeUdBF+3T
GYFQ43Ba53+98Ll12quvPsvpts1HsEWZWdrPhgHRVk49HzUZjgLZSjhkBYXSDSRsSe3JBy7EnPad
v3yu5goaVvXCfheWsIgqtVIC1Y/z97TY0+FXZiTd+IjVVd1ere86JnzCf6gvYknTEm13+HW88d1n
JSWiOIoQtaBZAMpC8l6hHvAwh3eM2m3dud/dO6cWDMo6zf+3z+0+Ovu7B4P4WVfQ1mn2huqbZPN4
7oimZhD24io/8vWss8xGsvHcIzv0ETdGADFEN7sIQfNBkiWiWcfXta1CMbohCEpKhy6duJdTpOuF
68a7Ahxdm/O2IwCHuAO+tsAexJBRUFlOhG+B322/YHP+ZOnCUoonB8LAvuU4GsXbxj5XjZwNTBIL
Asy0l3TMOBZdzav+Z8lVxMtoe04z367HrCfc4MSK7+MSwQfq8J9Jp7B4Vx5u/RKrj21dJurscX9K
eUkW/DdMPmQJFWseKu7gqdvr98/3oARuvE1xCw1nhhUhHkqV0Ip3VYkeP1+eY6YKhzClbL073E/X
6lYHKCP/9fU1Jml6nBHDoavTuIdz6jR0eX0FGTXSlqsONte06WQT2ABh6DHtqiQB7FskKYINVsZr
BcfxfdgU5uEXX6LhLZNiLQjr8Zy9L0CKkZYxKxxMwrsqSj3NkoxedK43YB1622Wi1BxSngpsOLrG
zEq/fPA94pQ2DABcZpJJn/80/zNLZSnc9Ni/QCGrkLiJzxoFzxnhSTQv+e7mPmQ/Dv8Xu1UUqvQz
BR8GQLwzZ7gLwxWfvMR3FnimOfWAZKLnN9g7yZgInrsztoQB5pJ/voWTgXbP2UUfVHiyJX1Hj5cP
bknSKzkTgmH2aB5TH+o2q88htXxOhab0hxWmmNIhOfcAOSLSMag2W0w0Yfa/eQiGY4ouxbdPgiF2
rPaO1vU/kOSlJAcDEKZoCrQzwZoli3IgdMded6y1Yk6STC4E74fDHiQVzMhon0Yo8XL8jqIJAubW
fC2eEgXYjL5enOQcXFwCYqneSXjJuL6BfQ4rCW37kfyv7ADyHhJ5ciY63XZcW/8xkvWwVyoG5grO
9wVeYallF1hcRzfAVOuROf4KuQkKISwNgDdllNTmr8Gpjak73koI5RjOKVP1A6thRLcyNybvbodw
2wiky3JGZfO9sQg+YEzLEX5nwiBsO4s48R6SSWSBYGLvUnMOO7SItF3InNT4k1dTVy51Rke4WMHW
rz+oxkwQBdtS4EGt3JSahdspFqOZeV2lopY5hcP9L0uzBjILproWrYKqKVPydH0+B5KRTcNrlc3Q
aulIZWV92d15XpkjD33VpQIs9aQrWG5QTPZtRV2EXAstFqu0T2S9ABdlYGbFBgAoIUCg4eVowXRE
KcBeqxgcExi1Yr8eK16RxdWhQ3OrOnRmKfvdKWipXZpxpzZYLx4bsCsIp7dGoU2LPtGkQH6ej7vL
HtBLBgYRXvNcED4mCY6bqL5+jXdC7VfDnaItAkEqIzce+IB64BmULL7FuzdEP6UOWZ3jz9qvc/4U
qa7EfZkY6Ch5VXsXloc5iuSzMMfw5Rzhk0GjZhC0xiwvvLtBO9KTzA6Mly/n028cLhvbfDYk+zB3
kLN3XjGuHeAI8RAaTYRW7m+p54TQkNEMHTV9vz+8buN/zd+Zkam5JEZ4coRYK+xa1w4ez9uBLz6g
Qe8abM8WKZMdMR2a2IKEdDGEtXQ+7PYMQ+uhBwyXgiJSgSjeSUU+MouglNx0tNz7ZX98/Z2XCbSb
ar1O1cNjAD/btyDKddIFthBy2rbewqCW5P81W8pEoxj4anBZvRbq9DP8c82vr4ngrhqDvPHGduRb
ADBdQUDorbpeXBKnZ8s9yGXhbHC8LPltDfSekqIsmCoNX/RZhnRYhaY68p2vfTZEbAw/MkEdEzyj
vXGagXBKKL89h+lEzmsYG6xN0IY+I43p+f4b/I2j0FLV9QTYIT4X7wyiLDSA8miyX1Ei1pgFN0cO
T3XfAtjMkpjtGVSFXyZ1wPzTYSwSD1E/oCdHRD7Ip8BrmaWALItLnuB80UfvajyVQ2n/Y4Q2unX4
lvEz5hx4DBGi+H7yymF0T/IrHi3nMHRIqanVbjXZjj9iP7wdKC6jnTHsCkOu+xr2sdZlelwuMv7P
lK47WoZnVgyZknfh+0l68fU+GFvE2eHkYAH65sscrhSvDDtF9fMhPlkBq55sP1DuIZ82XB7e8Ezs
x7elaaEStesQXLZE4Ofr6YRjsI1kWDM0iHt9uIGJx2oj3xVtRR/RspSg1DRjr1cQ3EnrmNR2q2VP
DElwMCtMt7DugbD8S5LQ/+UQ8168vJPopr6B9aYFU/Gbh6olg+A1GmyEtfLGa+h2Unx5FOIe94dL
OI6PNwAjEIWXXkMyTFlzvjfhGh7jq6Z//Tz/yftKBFKKvX/bsfp3UGlN4pso8qVOoEmJxziJHzlK
doluYXW15DHqlXSSjOf/xcvnoiZRMT2uFH+Ldde1LfVy58/TCRf7W/lcZzK+6da46IrgOPyuWxlG
kmYRkFeOsXZ8cEzbvq1NeMbc0xA8j1hw6d90ycr96vU1HFuYKJOb6KJVyjL836doOzxE50e0X1Nv
nGc570YDblkhxrDe3NAV7Ea0ANamWvB9+wSe4NdoUR/o2LC/3W5bjmt6uoY3MLpVLoqcu4uzZUO9
ZkLjQuQZ6tZjHEDdkt2uREsfjI9viSmva3O4iBRJlzWeqZVHNAGUvtRN6lBbvN6PZz4qcrRP6ECr
KwGYg2YmHRORtusIUQW89YskCB+QgmYHzSTh7RCCvOP99x/7FBD9Z94hUMzJESOenXFYWGWl5HqB
s9gid4/r19cl4hqlW8xbGzZntcIjnkCqSMIyTUwxvPzoFfCUfIOKMuooOOkXvuuAqMlPVvatiwQP
yjLRS7u+h0/r0kDRdWskO9VMUltmNMS2eKKQ0zJF8hxS0kmOCuOZZpHLAYmNBcpZLRgvuv22wku8
oWe+JEkz1ZxzVXtQMmeebEnS/So5jS1UvvtKgJNcy8G6ThrXbZKEIoFj66ncUEMiKZ4sYEtRNdT/
z/ZkFbBiTHrfauHVpBr0Aw03cJS4whKA/iGn3KZDeggePiVvGTCfT3b3YWmKuFZPEiyCOr69A2nM
XfvhbeXG30syUM1EWyY+OnXWbui252/h5KAxf5ElqWmtz6o3YMdblSRTQeTocdHwswNOcM2YF74W
Ij0RUCD5V/6JpDDfJMR3ugBmeTY8MK8Z550NDZ8QaNECmjrd7vjIaay1vH4q1QySJKIuRpCduhzk
K5s69CmQWrX7POr8dEuK2+/bnd8jSbyuuvZ8TcWCKpv42uly8C8Enbc8qYQ6bpVBXID88e4jkq5g
wZSq88vxvIsuFq8eaaFwaSCzlMfjnid4StsiHpdszF8/Dt//+LiGXbr+7vYJILDpSIthOJ+dxyiI
5xHDHImCyKlMnA8jHWq4mfe6n7ai76cYeiFWArS7X0CbjkV3RYUTKBNPiReAebT0fD14weZyPfNW
TXv3D3jBgEzr6ui40SrgfPj5iG1YIEE9w28j9crJAwOSQAp9k611T2WAO/lfbueWjsWzeXM7dlt3
daRCGMFTxZbxLnZODX2GRvGFCZkAE+wTnxsrA8UuEI4rtUCtd4RRqPb45fD9mNEFNvBWTKKouZrL
T0DncV1yKH0NB5laVWcNpeOeUeExALlohGh7mhfCZILxSOeaXAzmatflYGU3pONqG9ErgJoU7uQe
dR7WMiMjybgO9JmntQSqsauRoWdRHWFbifa5Q+I5KBNAj6AkxqqcaA68eobF+S6dAVHXBVu4Q4oX
t7tPkEynwMz6daEaTXyC/qO1Z+KBiqiDuhpbJltNcPcH92tSsGzZoly2Z/Ic4X3q0cRT3nWt6y3r
l/RAIyWHL75TmdrY8LRe4nPXEVyhPF5RVbky9vk6pv1hF1YMHF1f89rFusKk+0qJ5l4sqIIizfsK
dUtXK1dzgM0mqWK1FIFudxL4P3mwh3sBoPckDXynyGjPMBRaDGzQP2XBK0X5SRBdk24CicitACkE
WENLizpliowtzhslvOZ841NHpuXgLdfXUdBOaibzvXpEr08wsA4+9blqPdbpty4ZQhbyiJFDYi1j
X2siBbo7SnFN4Isuwl6NcQxAxngj02VkobKB8UZaxfR8lYx1PZZKtzbQC+bBBVDNx7stJPGw6qcQ
XcdbECb+1TxFNaxaVYKk9VzOsO5dkVx77bnUPj6C1BVJsROSSkFFepeTUtDtohHY1PwUroEUP9UN
JRrU+u/HVx5mcmxbFtrrvWf3FJdpXjymlYA48OCfR4cbC2D6D05133J4gDBT+o+NBjjvslVfC2WF
sBQSOcs3+C85H9xxuS3XKAjQHQCC5pnKlXLw/WfCCb5Up9543goPCgmLOgK36AG8M69G/j2rRcUY
iJot1waaeTp07iL1X0vjfa42UzGkLZAL4Rsnei7H3+I2QnBJdQdaP7T3nMCJQXc4hlO2z/Jqj3sR
fX0gsYXi9fUEyi/F+NQzV3PVM+48KQxDym/Zaz6pZXWXP99rRgUbUPrnOqWXm3/cBy15vIO2Tb6T
qXj0eOSZuSNs+LBgziRSLetejIwKIXYRpbmFMF0u5QSUgX70kutDimk/pk19XXFD+p0BDQFT65QG
857v/vAByNyi7ufQ6F5dEX/yIyG8ntc9nzTmWzpeqSblkoQvX+NHl5f75w105RLdF5jXtaA8zEfi
yfRGKY+xdnBNArM0nppf5P4AHDUyiQeIj/GPSJhFFYxZgRO43l1oz6hI4gjNEwFuouValuUg4nq5
gbJ9z6Sd1xcjydB/OYb/4Y24e/bVkzCA5q33wPi9Py7H/fVw/+T7Yrhh0WvFMeye52rBvH+688TL
8f7O81/NyD3W2mjMBGMdS0v5IoPBNHstdH1VS6OLAhbOncniHHA3QLfQqlI8hX/yxn4c+w59zWEF
2kcx3GXsOMBHCxyqoSwVLnzzZlolUdWZ1kEUNMlKNgusGbjvF9/KjbyAQV6irC3Gz+P9jfdgldXM
RW05efx9Z5/Ta9rTXocxqTnXs9kbrsPLVaS3UU1QbdapYhIL98hUs9riFEYFvF4u9/DAtjuPJ7RB
VRbB7PM9rGFikffj7Ra0COpyqJxAxMfShPUc7uhHtNN8jLqw8rrrM16CqAMUxgyOQR7rOi5cxaW5
DlkgvOVrSX3dP1UPbGubJ17GVeKLnbwjdmF5Z62JSELKXy8VpT1TMdXITCTd+XK4g2JOmhaKaVcj
9RMdL/i0neO0YP2QZ8LMQXGLfpJRRI+B71kzLKovnutmCpAQMzBvr1WPTMfXAwHMY5x/sg9Som6e
P99RWz0HHtXsNosTWvf6KzeiON7ocA03SLfXz/Pxb5/Abokn3+khTQd5ArdUrfKbtpuAH62Qtf5r
NOV7AhhlOPc1mempnrG6yyt8EFy7DPBRMSlP3FcGPXfdfLsLaj9c00eWu07DM6qKx0UdB5mzz6Rc
7m8AHa2aLpjCy+CSz+ghczUwK12mKj4/9lvQ7NxKxC5KKqE8dMq6EQs4Gj4mC7oQ2AG9UXp9plGn
ds1i2JJce7l8/7zBV5WtY2ZRfFhcYCXE+ESesdPtw3P1cg0yOOz3IhjvB3SiAdHHKBHzKuZge9XY
xJLU7LGmX9/vkCwYMnDD3Xk/7vdgKEP9alcac1QCWD/9y0ohefAjjORbzWfkPuMiLM2OixE+KtAt
71ZvnzTtIORpwqJXsAI6jS6CPYMNwpNIqOMewKTlq/0Ia/mAqmvHtafD+TsgdgxcdWArq5hSDTxD
8NnIITksnbIDSfCouhqCZrufiEPFkxVw98vn7o3v3ORh+476FuLHlmwF9Lrqzdr0efALLwBk4Rrq
NRye7ksgJMqofcyyqj9jlBxc1tvxhooDLEmN1k+5LNoqPEGnsgMCI0q/FvCquEf57c5bkHza3Crm
za313kO4RhIjU7PPHpXBs34BD4mpL1HoAW6n+HcB64byu7hf4HFSh59qqjttslCUYwwwefzri6CN
kJylKfS1nlU3kuEkcW1DMGBn2LccFwE5gqBp88SK59Til3QVrmSKINpiwF++wbeS9K03CSXvohom
mOd7jXTb0bCPCnSfBcS8XVouZKkSxb3h/sN5D9+JE3J8hr5dBY8wcrfNyJ0pCjyhxjKLF4TVesGv
p8v2PkHq7PrUk3x58gAFADjKbsVCSofyuR00XC9plE+E7bB7Ham7qttP167aNbba4D21suvRGfGu
Va2YYgr+ao6ilcBsi0CncxhJ54vGG5vJ9ADjNXx5hzt998e6CuwZwhhIOWuGJ1mhm9T355FcP/BF
d+sG3d2X5UmDFElDElJYBLuGCjl8xU0/XF75K8e19Fko6VwPyKpltn/SM4VliFA3MGyuZuKvS/Qe
xiebDFOcAWS3BcOzbqQJQFPmRTO6ZxJJnhd7/8WH+HJhS+cdvv7LQJQgn5wo1rWo+PHKPPECMw9k
a0SRikDPlDRjcR6FEz1zhIn9XScZP77caFjWpCx+Ajq1IIAcAkcoQ7VvuwySJ+0EmmB5hqC5fMZU
8hTboSWEZT0f5+c7KoxMxdfCZ8fdXo16muccx/0P6YVqliy4eJTYPlPdwys56xCENlcwAUBBExVS
X3pC/Oi0n1T/aAEvH0sK82QDlIpMBN7ZWDTXYLg2qcTuiHrJGqY6q1bb+MqPA35uu8gC71YsyTYw
JdGpnSDVHPWjLU2QjL/9XnBdkObcYM/MjrXj5Tqs8567JJoUK+hnPtWP2tb9qCccvYa/581j8W/f
fWKUupiAUk3bj2n0ZkfVCgn0qV+8DzByrHXQW0e0aMwzsW57C3t0zpW2PKPQ1FTfEUNc8CUaU7e2
XfIV0jucoB7CkD6Rdtl0kqBa0bhhB9wMkumltMrhov5eNIJqFSFPjRKx68GVC66L32GhOe2foZ9k
2YKAaeSao9OV4X589NmZEVGPbz++o3aUirEaTVJIPHvE+JNGoHw76VqAu3pZ4mXViBN6kVDxStK3
3t3lVgk3XhKnODUc41BpoMyIQxt9wUUf3BV432kWS6qf6+bvS4/U8B6p/OJbJxFuBU/My6fLtBBj
yYwL28Y0yO9n4pXttkxaBZGODyJdrWlN/51zXsu13xZpdWi7dYqSHeGH1YSSFg7zu6M51cAXYxJe
KeyITAC9yGEQmm+JBh8TFBZ3eqRIAq8EyEPMJFaqPRokjo6+a2qi8X6qoAa0sF6YgYZPM8kjIrsI
Y7mSwdkn7RTmkFydp+kxlqMIQGrLBNrL6A9lfaxprQj6tL0ef4RLULce4d4j+Y/g2XI7NEnX+GFV
+Iy2Mc+8/lKvGCUwjGfS3g1RhSw1veyS6tbU60ch9XYPSNdcYpl/xJG/ydIwqEez4fPL4e3Iu3aS
pvVLlcsCXQo2+RSLYM+Xe5D/F9D+l4BdhCVQhgseeBDVEBz8sb3tjkd+HM3wawuys004TH4D/XTn
pZXWh8jUu1mus8Phhm9Pp8OJDy8MIwi81ePTD7T+oXpqr9EqiyVRiGXvClOeIj6jhuEk+YF7q1TB
pOODSV27l51nQEDfJa6j3br/eCdnK9mGnZ3HDDsdnAxTAcfWj3edM0eAq5r+14gWQaMbrp9cO58O
nzyhVZDrp1hzzSL0npS1vNbMzdaf6M6iaQFeFFTT6kqcG6ugmlc5Mvm5uqCnA6FZ5Zma8lVsF83W
ZJBzxQUe2Nlu6+XSdBPXCg5cUUmjGzR4eE6Oi67HDqSRIYymuMR40bydJIxZwEy607Sbh9IN19UN
9fZ4Igtp+D6MtKtbBo3Aw9qCqS9vddzpVTEqrrafCbFhVwnrGD4rqEkAts91dMOK/AU9NDMs2vqP
azLhIfg/4O03Ll9O6D0gzBMEeay7CdeVUokMzsJZrttu6WH5oOaVBChOk8GlbqDITTKbsqBo8v0S
KAt6/fBv3XwbqgDtLZrL3JkUQNVc8St6MZbHL53mnu6ZLUFX50umhIC+Vdq1SOpJPy7CVZDnMTAV
1OujSnqbPajxK1EOBmCkbFHz6ywxGzxwzxAwLfswM1Q3e0K16I6KTyc9+ywTocLxuU7VCbKqmG0y
FZB75hyHg8PXnkFrW4PCtxy5dcXbtJwQZpVQmByJt1yi17UF83KNWiA7yrCPo5Giy+5lngMCxSgc
8b8AWU88V+cYMKt1BX/17qCrsX7Hpo37/aUlLQdrZX0S9siDHlYyKXVaLtKtISIsQpUCFV7TRbvC
KjrDUCoa+NIDHmKnJJ9hSs4hIO9qy9Z14Sw/32zANZ8/5fxZ0KZYMjnDRbs7voOT40AzhrUEXrdy
T9Z1CBgZS2LgEqKv2g++PedGEFmsnxRrVcfhtp8j9EhWaNn1fuLRMtsu8W29m1mUHdt0SDFs1lWL
HwSIC9PKOBVL0MvLOs8x+Pt1fry+Zr2Mqsyv28GEvv/naVqlUXgW32oEusSSlEpixpD6T9QHgl8j
bXNge4+GP8X5MK7bYTNnSPo9n5zi4wISSeKuVoY+LygRW6NCQ/mGKEKhNq6P9nWneJ7bKwhLh4Hp
kbOsj8cd0iRBBhP3C9S0QRKIpP6JbHa6zDAC3+jSe0YNl0jbxIpwFmoZn07G3D5fwo3e3VGPXI3a
bj4KUPvPMC2JOqqXW8ukapZAWjdesab5iALvKGnJNG5pBz8wLiDZL8LHbnArFO/Fc/XHNaz183o5
f0d5XkXbpej2Qx6JDQGgGkWfOqsy8qu+Uz9hoCubCPn8+gwORoRgeOl1Oj8S1EFdgADdKDnKCp/C
GereOmZY3+2qawDvtPlFNzYFqaYgXBiY52iaTRZgPmPUreC7lZP8PB93lz0Ikw1Pm2xQTFIelz9D
cjUiPmAbnUtwcpq+TF5RH3BhIk+E8Iy31ghrelpx+crVko95OG9fwsFdXl8RB9qjoK/EEHwLRmeY
EZZZmw4IZJ1hgFVOy+fi0v+T1/M1p7IE16TQq+dfC7l4hlQ+9dwuyGY4RM1LFrbTGUurBftN9nvi
823N2IbWxJnC4K+meZWmDFX+GKh65uq5ljFWzDZAPgJt0uIrJ331SkNMbGK2sTSu66JnhxowMqle
8+0HLGIK8nw5f1wP75+8gR0U8yxuK154vQQ3hG9ANzLKbWkADve/zPDT7c/DT9B4YuRyT/AxSj4C
sVwbilrJ8c9H2pHxQeuNh46R4NIAwCvmxVwZrlpzgUJ2lZNnuk6ANg/Q3AmpGSel8erLFuQHBK3R
mhu0hP8n8iHDoq5hgPTZT7VL/xvH2dzD5CI/+pb+1Xa/P0bpuG3ul8397bC53Q8f6R+CF3k+bLab
c3Ak0n86f7iJGMdmf9mldMHm8pN7cTZ1PX/kNXXdZWEabPqZ3dvxtL8yjbzyMHoeJrVljysN41Tz
vx2uwSM7/j2IyOZXWuxjknmx4QYcrvHfg58Z5p9JUabIPxM1fRy1tYMfH4cklXEG2/n/WG1ZXl/a
yhv/25Ls1HQLV0t8vYQDum4ywBN+tP6Z4y3MoPpPNofT4Z1jVKZffdgVXbnxdMjz5f4PDCvLsD4z
JlaLifJ2PG9er9v3SNsNfw8nmHTV+0PowtZu7tvv838Ddq+s41Hoz/3g22G7b/3YvOjHr8Y+0kFo
Nglu3FyYSCr/vCo/XxIW3w/nZCWCdFxeN+FSno6H/WN4JApl9x5VQKkqKequJGrppoYYbRMDtSx5
34N7fN5MhUtp1Pk/X/6n96jON9fLz8d/Dmbi63OcyqPwyC+X/e8nhrb1Iu0zQ/dHdeUgVH6/gZOD
NM2GHATvJ/i/+f98Z/sLZjEvaolwSrK8RAnC2ubhFuoaEP63iGHRX8nxVf8mMRRFqImvOG1PukW9
7bH1dDQdYL73vUGKXkwtM3w1i6SROwO41jaXQ4oHDb4uN+DRA4sTqCyiQI2l/wCcnm4qzYRrxsPb
nh+KN6jja/rVtPRaeyWDPJs+8GtF+ozPHa3+NXsP1JA2TB62o/GIZLIqaoh+9ENycpnGOX8ZpHgx
6Px/AicxNH2Acl/y3mTdl9+I38y5RzBXOc+VOK/zqNtoVIPh3oVD3DL7mcfR8ziktUs0+sVZ2sXU
B+ME5EHUPAjlizwmU+aR7h8YZywHoGbl2hoHmtY8li9j2dLpYHZupq2uVgpGM2WbxrXSm0YD39v5
exGVvZjevGutjb3ZeSTXFNLqZj88v5Y/+SX3bn7IR1fNpPublj8uSiiJBaeEdrfb5jNc302IIs7R
YvwOCun2djhMt4L9P4fbeLtvhkEA35h4WBE2lBNu2B9UgUGJ3xTTDnLKO/QHlWBQSXyApLOn/dof
Eos97tjiBLPUAVs4EG1Z0qSrASbt+8RuutqsaDjerEDYEDoPWuwt7bmMJ4k2kti+MeNoU4D5ftgf
t+mbH8f9IdyT0/Z38CnmBtytIU3qDjZd/3gF0vO44c+89jzQ9KLnX47v8SaHUfmhtJ6HEkPERMKf
WSTT7DanS/BQDj+4i5XGGNw8hoxsRunyZLaf++Mlbtjtfv3c3YO1vTFEmmSJjCpTiXiDmLK4eU33
sJjc/nuz/0zObdyulGPhJpa76k0jpsfjhZny/XnMH5fT5zu/z0JJsjnp+2GiQEz7HGThejndot+S
twtqobRZys9jutS8bupeN48Vb20CVi+MbUqbZcsw1Z3P00h7vuXuYhog9SWZ1jamPwxZWTioDWjp
l3e3HPvkHgoywkeKdfl9GMveKpdftExfXw8x3Ros6uW93NjzZYO2Qw2CiLFKf1SrORz+ZL3GtJah
fJ+621pLZW/m60Wn9MBPQ4iBXMz0hyLDhFVMRMfu7riyt0pnt38C4PNQ6VoGl3b/+1/Yttt5oDKj
TC8zejnMx/WQ/vfMRUVpIFvuUmrbasZhOq+U6cgH9hEszWa33b2BgR6+h4jPasn4h6m1Rb4G+0sC
TV63e574kdUGUYZx25TX9YW6xkTXZnc6hig4usxBkXBYcxrQiSIL8WpZTQ9x+3m/fECVKqksxvKZ
8OdIpekYE1WblGPqXjKiW20E1uxAJ5MKsIIXy6byshorijWnZKbLsbtub28RPUzeWTq7GCZPqiz4
7B+nz+8RXHoks/ktK0s2Nv2x0EbxJE7RXEaT9NBOQDmR8XLzeknHCzFcktifb4fz5u243zORaxrL
l+NMbUiFpFf7EQumxy42sVYy9Z7cpL3hz9iQ+xnT0w+hK4Y87GfwvTaHX7vDB/suTrbmxMqMqUR5
WCw2jff+cQjRa7wkYK2KGJe5Uz9VyAkM+s6ze/KMinHJuYTg4NA9+3UPWvowG+Br8ovwhtmih2TM
K0hFDek+6o6shsCe04ueCpCovcmpsd59GhS53DFStVOoOmufyXfa3D4/MvwPNA+RrFTLJEQ1JeKy
XIMLdb3lLQMXtWySd+kPtT5Avnoo21VBnLEYHzq7sOtQz+dOvZOyyEgYPfqo7a/H2NE9WrOH5Xg/
3Lf7mKDiZ1XuS+pA6Jxc2OfNy+/N7T1ommBmd9cDdqLGYoxcVNGuUtFE3xBPGMgEvczJgoxEJuK9
00+JQ5mUjfJpK50w+RBx8/uDKUEcmvTso5L0vrx/oo8Hoo5zjCRE7Yb0jZgjVlqkP6ZY+3D/ebn+
GQeZVpS0+Qb01chWn7ibQyLwuZbVD4e1P7AczbzNZWYpx/zwsVbRBhiCBj3pD7vQ3sH2bcOqIuZ4
eU1BHtCWxA9OXtIk2/OiwngRet4fr+CJtGxHh7ZXT44sm+gU1n8P0/q8RuXyt89j78oIQWYZ9bsT
3SuzuULfUlnim6TXsF015Olyzcb09+ePoEbAQETYbUpjUJcwrRqGoCEcIrGjTX+YpgMCXI5i81SM
jdSo1rc3hibo0hLdOaSszzAlsV4Or9FJnrRlbJux2e52hxsI0CwV0lhlLoaFIo99T/pRGnXNUuso
udQFwKUIiqBYXZ08FZ939v9Q/5Rzt/Hz9LfJGtC/f5v6896+Rb33Daqd1IvmsYOmyuuvRuPJAWmU
YZxHIRmlxygf18g7uf/+dvh1vDEhch7GlskU/kNjad+CL8+87pdXJcp8zNxifDUQNKN5oGEeiPQU
Wg0U97k3p0dgYaq6pea5gfnIMsi42uh5kPRMWXdCvqxt6jCe8ijXTLwI/0sW+MhIhPndv+Ur8G1y
5cGBynIOpFQvjxyu9vb0bX853NKYYfzv3w/Xb3EhuVKGH7XIbDBtCSWamFfVnPtiImUtb1NupoT5
01ePf/yWgbBv8UpxJjMfU9nazHe2/1oP/BgpONGd+6nLSEEWR80MFLftsO8Ic7leqcOlmIJGbrQn
rkeR6RgJ+c4y728hDvr+BsYzZYZRnQs1LEdEbWLyGEUXueSuLkd4Wh3JcvkfjLU41OF6vVxzhjT+
7RvLenepYR/Z9MJFyF+Gq57+dxfbH+3DP04XF5iYPKYj1yqK2vReRR7t2fV5V6Q0IV7+wRsKzs5k
VdJfv71uT7dK+IFSKfLqk8z+axky3PHPMkz8V2AcIglRCQsxJbomf7hcT/ov+tIxSKI7ZFId/7oc
9gsGq2iiVNI67WAQ9/8Wdukvvz/yFMk/R5vzdtn3z0ZU1mJqhU0H2n58nI67RJP8dgkBYlDL9yDl
7/yYlohN4eI/M+a36AN/i/T83e2bBL9Q7t4j2f2P/IIAv+DrHXerX8hXiE055d0tNzvxbaabPXni
/zJZwPKP2f/5dnyNRoXLqeSRZT3yxA8qIz1/O02tOIblSNFTSNPavt6D4bwd7pFv0ZleuZ6keyA/
aMzVxjGzwU8pYzB4uQ0p8TblL1MkkVOX6a/PWhfvyQ5ENSpc9uPyKLVN+fa+PX+Ci+89OZg4mKwG
63sd3jsymxgjTDB6HmByCbrTGMsockhkTUlGSX2mFvvzjGn3oyAXL67O+NWw04Z1vRc/ktsxZphz
ve9ADIgScOkPt9io/i6Rk1cJ0KczCFfoe/ji1h+GzsSlwqbWmfdlxxPHKU7H+uah5dEe0wPzIrIY
k7By6gpNr0fnaig0Aj6fsegA6XO/PvZagRkQiaPISX1EYBaezCLmsH3jOoHPi1slczvAkX4enYu+
eJA4Ii5BTOqwdWme3pZxuS30fheAuje5cSChU2qpOnWaqU6pL7nkKrvUl0SuJG1WNN3B6J6L1Hyy
Kbb9gYgEJj9B+uYmgd0hcblKpY5mogEmmOW/BzyiUh34xCWxU+NB/1V4JI+i51EStGy+DI/kYUQZ
xs3e1dfgkTyQLasq9PmvwSN5IDMPREiqX4VH8lCyzMnP3Qqfh0fyIK5emP/H4JE8liq7PZHj/zvC
I/knxjJd0urxH4dH0qiiiIkYYmAX/nRfhEfyQEMZaCzM3n8TPCKSFZ7kLxWMxBtmhn8AH8lDyXko
KXMX8H8MIcmj6Xm09AKZ0u4r+EMew5UZUQ/vH0JF8oiqzCoafjWZyn8It8kjmjJHn4rE5D+CkuSx
fJndVBHxZZRkVL4FFP6bUJJRjTU49Y9gJKMmGJApEOE/ipHkHRvK7htdnPUvoSR5JEGkP2pNJZ5B
SYi08Lok5bPHIsyZt/wgiD8LuuRRiogkwrmcNN2XQZc82lhGI8UyCHR5CnVQAAl0ddhs/3vjGqM0
NdZo/xFcY5S+lla/GiVs+LdcS3OLFwtNSRF0vBRvo8EkGKz42qTNJR1s2qPsdqOdKtc69YFw/71R
rFHaKulj19jbzCf4Fox+tKTToLGTfdC+eAGqePap04P9t0N7oywedQQ3JlbM13HHURV9F6E2J/57
IWOjKlMkFSv/NjxrVOWoyMtj/wDcNqpyxVOxgv3viIyNytSDu38bMjZqtwzh7T+MjI1ak5xiyqGL
LyFjoybZ3+jaqcF/HRmb2TwJ8baFbfZvQ8ZmkruZuZj2H0bGRkNUosmR+ReQsVGTmD4l42rQ4omA
fjTk5G2yfvYfQMZGS2aSOldo/48gY6Mp6iI9BiTs8G9BxmaikJm6EEmvvoaMjbpcNZWKyNTTyNjM
dEqYZyof+QeQsVGTpFD+Y/wKMjZa6nKqpZD1ZZQAazQi+gIyNlO8C7zo/q3I2EzeNNNbpjXg9wVk
zJb9nRja8uvI2KgJk4JyEP8RZGzUJCul9FLonkfGRk3sWeR6KGG+iIxZSbwLn558fvTXaJQg9Imk
pO7FxUDUDZYtGwFkOLPgEApKuY4cRMCuHBT5OFVfDVOT7NhQ5c9cFBf/NpPLI705V60CmnSSQUtC
k/h3ObH08ng/Dy8/7vfNfTeIcbP7PGzYTqfx+1GUwC5R0x68jzxYqpoMbsMmbx0/J6/InCI0PtWa
5WHiNJIjsok9BXrr0wXREDGfJkayc5v98RbLdPZxWrtPMCVbEJsUf/mhvU2D3Lxc3vlxRjKdITFj
1GJpMyF1E1ze1Mojb1eU2ejKnUBgbQqskQs/B7pxcbvS3wCYMZITHDJ01hYHsXk5bc9/bmLrKn68
kUA3IsKaQsp6vbepbOFy3gQP9Q5OgIAGOSsnpyKX5dyk3MQ+K/cjmpigE0uB/UAndrulwzgdXw93
jsqdpqXKlqc3EewENdbyBZZFAAY3pCSvoDOJ3QhSXVK+zvvIWj8ffm7S/xVcobJbKmJLSovlvr8f
bzc0M1NgBmFSHYuRlhXWfCPjv+tcSEMkLHHX9LgYNJJnt8dY61qGT92eOCZzvugFCDVR7xtFJW3S
1p25eUtwGlNwmjzGaXsN+jSKQ/DmmCcz0zCOypZeqsGoATunJ8vWE/rm98P9nz4P/+H2v/zlf/sv
/4QXIouaIbTN1P1s6tsQQrj4wlsOvv4SNMNf4pTC+P8lhInpX54O5+9Mj8WUxzGl6QF51jFP8j/+
/s978GXp3ZCC1ok1NM8iffQn93Bg+i3C4yAYwjvXPzN/4yqMYOI/4MrV/CFxKdzcJTuc4z8hciVh
MEX/amKCnbYvB+D/UNJL2tnJ2wi69vsn9yhE/rJ4TtbMLR3jTQffqBXYMXs2eG0jmWYyE9lNi9VM
h6ypwMfFWYzLdRMYEMX6P5FmIPGfkzjQf4ne7cjuH9mGcV4Sf9/yjAjoU57B61S75p8rayGvVHQO
mfDQMtF+mNm78ZzBh4TaOT0l8ti5/y06knSn7o/bhCIt0zr/INjzVQTfkkg1AiDSyCkDPX/8jCpJ
Y5HEehSOiaVyOYeZdE6OkpJSgnpKeV7OWYp7ny9EcamJwiXI+hKoIkKsiqmkUZRcxn89/yfOp8mf
UgJGettPli5HbAlZ/lRTDnhc+FOSTihl8fI/KFz/f9b+dEl25EgTBV9lHmC8BDDsP8lksYr3ZlXx
MrO7Z1qkJQXhjogAj4fD6cs5J1Jk3n1MVW1Rg5upwQ9rZG5UZjZhbovuy6enQ+bXvCyD2h1ThU2Q
o+mPPFdBWK0Ek5k7YrISHJRX6DUaDU3cFC0aRNWBRqLlI+mFkXXbSUYfIU9AeizX6E5a3lt+JZjN
5TAkraPraTwD2gtay2jOpbB7yEZiXkLZEG33K/P0Y7zt32FtSSSSieqtmopQwYbEWsIa3iLpwKLo
wv2IOpQW8DYRIrG0cbei2pmwt+RTsNuBYI8t4/cXP5/gonfj1WJ65ZxE5jehY1DyXsGcsca8VQQx
VF3cLWkAcRhv+/LlfhZcE/9ehI/CiTRpFhFNciMY57pUq6eGftekUUAv5a8XZ3FWhYqfp3ARgV1a
EtCJSpZFJQio1Yt93NMoa/RErKqA6mPKNetiKAba1DZxr18PMxL12udyoYEM7XSeM3CcR8MFMTZR
Albwfgfwt/PtKN58yfYEiTeViMXUdOGisBtYjQP25D1cOrq4grFGoqhjngSWJrRNEZfDtabsN31S
ksaCFG7XUjhxzA7lZd73G1gJRgDk80Cy/e5+crnLPCMyDxjso5Jbk0dt3FB0ZtR3KNHuoErmjGOI
lAvgcQ8Y+RmmVB3zCCFa25ZJZZOasETvyXzToqa/VZwZAWTuTVaoNStkQkppEiGZzgcIhPtmz4ih
kCKxWr3BCx9KRv8Qny6bcuWF26CAFPhTbE8N/qnXXHQlajIdt1punEGdCiEfxZbEIGBTchELIKfj
6bA73CkLPpEGuhL6iG2CFzAJSS6VTOFCDKBOsG21MxNHpLDgw13GdUJZQIOvfpyMBmc3gHWKgQTA
sK6nRmA0IWTD3kchCvlDgBHAHkTjpmVyF66qrev4dgCZ3QCL5SJJQfAM/jQrRYwN9QC7dUnNUiYO
Y8+ocMpCmzIEk74jKRcvQWo0XXtODzZxkEFfo+tiZyspxhVn03b3dZn3EsMzexzERxmID8OeANNB
NuEO4UbB2xUu3lMqArDZEXLWTtCr7MczwS++zpLF0XHOr3ESXP2gQScIpGUi103PVCiBFYUJDUrU
ZG69YoWeUGKpgjCxhfmSkVPp+Zh912Nxb1zKlj1ZGcQAWzUxow1gzXIog10C0r6F09OvKmjfvmU1
mtXgOwnMS05v4/5zPM8ET+HtrGQMkB6VFbiiHVLEpWLZmsPbI0sCZCg6SZ5549Ry2SYDtWVCyUU4
Y/pe+zf6Yykx1zfMl6Yivj6uDAYrvHfvWs8IJ2YWfY/Ix8GCy0XrQ31KUe4OyqcCLAK4DUDtQAEa
AZDzv3icwM3V8Ja8ICuYGsLCnbJKWBxFubvfXntBQTKzSpUe8ysipp3pInkCXmRgtWxfpNOESP9n
KscSKIBZakiu9qShst1k0PbKsyY25SccxCpvYdfbXIGipd0dILH3Ok8XyVZhcpua1dZxGTuXaksu
p/arQdg2WEtvTrQdh3JVPFytLNAtLn3FmMSPNIoRwvtymX+H3Jlk/rOC6RoLWxK6u0S4QNGpZ9yD
3an9OoNqaw+14TrfJtmOq9kxMYbfJczV3kkobWmCkJLsTJ5rZA1ujOg3EjwTxk2YVeB764i8lt0s
PCgr3y6rxvd2PqxW7NJtVbQSl18Mg5RFMUzbzBWVkCggeuakYr9PldCMzUad2K6d52LNhsvt3Yxg
ISIWqIOFHyGs3PVBFcd4G+XqDRaig1yP6rg4lR6r8xSE2LkqWogC/5QccEEHqCTX1ig6HwnIuhfM
hit632MTLPeP+7z/IpWL9N3akDepOANLhoUZ8wfWKGn+lcDbGDwe/HNnalfJWb06QM8d1YkLdVIM
to+KbSKQdqYgRoDF8tVWWKE5mNQBD/5cbtezAKnKcHXBW7UlvXwFoZaG1mDAiLwRan89716OC3j0
eCwBna0J0TVrVjNGd4Gf8f+gr/p6A483/ewsvswGiAaLbO3MYjqAYDvV41o0a0nvaxYLYViM2EKJ
rFf60CIHQb3pX1/ur6+iJcDcSzXg5IImsr3Dgf6JlhN6jQZmrTroiGCtXHWV4lU5rl00WEL7RjT5
DavszeUJR2T+jIdJid1/7nisdi91/zijVtoM69Mb3DDixxva0Wg6aSV2135WXrCSh05EwfKPuzZX
JGXJgrCsmydY0oAvCr0mtLmGGeeury5YSe5/Y3FOSwZ+BRt0NZU5P2mLp0y3qLa+kxkbTAZTfgbf
JWYEUGurb+7FGX6VKd/B36uE3/P94MaRbN13nfBdw77DAETr99k36e861oJbDgiLZWoa4UtVp79U
NesC7lHv9v7LQvjNknWHFx0W4XR+t63wZeN3azKt/nYa4XZq37GMlXu9MW9wp8IZS99+3oFJ0PV+
n5XwXeV7zQkK35ju+BoC1bS+vbymLq7G/94g/J7/DluMe6NN8Q074Q1Zez2kNiv+Dr3wDoy6ezyf
/65rhfP5d6hNy6O/l0L4zu8T84F97++llGi0ZOfrfMsP3qdwvspTKDqZvYEORToT3qFm+wR9PRT+
u174va5iXFjQXy8vCuEXSy4vWEUynlB4+arh3Is4ZexOG0EiVh5TALVjXzKeEHi38mfE4uChZJJN
uJuW3w2Gfkrlz9gLr98Oa2nhd1oKO1XqUT75vbbCrTaM73vlG+lxp8J3HftFZQKc/v1rSdL4969q
nCrhJVsrfFezuyGAXia7BUla1uw7sMJbv89GeMW6Xu/TS6hWkBgN42AIFVWN5+BBkKQdk6SEYOg5
cRAkTcf4omwQF7Bhsk2gmrZgnKhw754vhBut2AmBYqvOv2AlnLDiunDAvXtaEyRGx/R22eEJO383
nfCLjb9TbCcflH/7QZAYHdP3Cu9UNexuhNevuI2BEZii8ntthb3W3Zq+2S8K768YP4EdVTE7qhM4
uGWcjx1EjJ9a4TUaxhfYlNqxOxWophPkfifwfcP4nnelId8LL1Gyt6/wj/+uE+6zYRYGjdXw1N1I
8kkxi6b0AXr8Tnr3gllsUIDJJHAh0GjJLbYmtNiUINdUu34/Jtcki5TRGXjmVenfrxTOp5iUocI4
ZgEL0qmumAUMYCW9/66ULESmtYEBh4rpXoFeOoYRhDhlpcVvQ8oWXr7zFFojtbZMOgkv2LTsZvCW
2I1KL8/sGbilvvY3owTOVd1aEzI7SPg9xc6HlZbMw2uF72pGaZD5rQavCTthny2ToYqKAy2iSTjh
bLea3PB1vs7SiK2iKNlEC+w1aYMxN6YK4OTXFObc9PF4IO3J5LW/vc8w7/A4QzHy7f3+8UJDoMQZ
Hj2bxVNhYT0LePrZOfnhc4Xy0UJs6+yDgQu3y3i6vi6XDylwyofVQAlLO8SnGuwOl/FNnsCjn5SN
GaoqrM0Jp6bQAJ3xeH4X+m9Vv5pLUjFYhN0/7tN9ym2EzTZDROzV6BY7gCd/w5W/4baijr/1UBk3
xUPqU6dBW4qFhxGEqogFu6kg/YTXdZgP0nyMsmC9yiXmqaLDA39fFokKilqx8V345+GYH/qD+SwO
uPMR9AbkVlPzAXnYgHa5IwtSBhu+/4BK4uPyzQ5bFLqy2fg8cIHajq+enew0VGzYDJiKZR+ncz5x
SqB0NgWrLv10oNVALYSykcKLJGr80cBH65vYE9LYtPuNYsXEC++aQI7SjL+6XM8s5INsltPxc+de
5zKfrlC1nCoroYkhfFxla0DKHze7RfQUFRv3V+G81u5x/CCOnQlm0Qg5KX/aDsR/pyKy7ApBbWkK
ISPjoKXdNO7jxUNmG4a1C7kgNu6xRtu/Wc9WmU80ny8zqLHkWSVwxa0nThvyoxVpDiteXG6aKlNB
sDfbkRtIaS3wv0nirOCjxCqEnBvCoUSU0JA5U7neOJz62Jj55olXyyqggU03cx2YbGLecwTFZt3V
BB7OxSLJacCrxP4ehFsSRsv5rdVoagUDG80kP8wtE0aSQOZMP4LWr7oimHPHRhALq7BRuE2Jf5rE
eN9U4xJJGDagCSybtlUxQZgEcSMB2DAxha1xwmxHAQ6EaMDvqANntmu6YLqc3g8kqLPDY9lQIoyk
tBFVLeqcks3DQqAMO+AsNEeFa2HT3oBN20YJw68KgVOr9VhDlb5f4Wb9lTRQc9UWRXCzfv6gS2oK
98ssF/SLhzKUj4JA7Nk+QHEYC5oNZpOGXrVsWpXrlPeD+LbM4WOjJlsIKLRt/zhFEcWxpADZfOSG
/nAS89I8NxybDYlU4MypKqqUjfu088pfYOviYax1YFna5K5m6x1CAF4FNmDT9CCSXal6RX3zCWFB
yH52agMZNTN8zKR37exV7FRQtqf26xtMmJ0/VlNnsRJDepeSDb5GSK5gTtvW+cr1wN0YnKAeDEb2
JtemEbsFo9sKgtcWqZeeE0rQoCUTAGO1N/KW7O4g+vWXBn5uyHr+aYU3ZUq7wz/VStVCwQ02rOxK
QcG2bKYeSCn9t007WIgWKzggfFhqTQFzunFrahEB3C/HrAM5rMc3cppdBSgkk7kqmNdXAU3YhIE1
cxehKKnjDjV412UVRAvI8mOYsgL58Bcr1i+GF4084kpls85xyVCq8MKGXsVNCIFJuKOOf6rEkOOM
UcRGMNeY2hFMWhj2fb4LrKZYcVuDTfMxl0w4FbMb0WNqh5hR9G16kbzCjgV3XMl14A/CyM9zzr7u
mKFHgwPqlSMiGXilYgYeiNc2IF/ofYOjnLLGeVU0jBGgVqMKpmTbii+4IkHuKKYygYqDqdFQCbdL
lsIRG7B4F9BvWzQrgss5/5rWvGs30J+I6QwXuz9O40WMu3hNU2PhSzA502iazCTehg107RFqsDcD
XQ/T9c+X5eNv094Oz/1JU4+MWscDQcAFtVoRi9A+TC/EeAcy5V0wJtXoXmjx+jYfj1ct1sElE4bf
KocqgW69Q/r1OxLA5YiCmSVPyJ+cG1/vehv7yzSdDIiAIMkZK0BBTVvxdx+vZ7hotHsF0cLHp+Of
OjJA/elbqgrmLFRobZgKWFuIKwiInhmzEAYOBQ0GfsExeBmF2bbtsOKrcj19Ww6NsrrXCv9wPfCx
gAp41VpXcosrxgeVH/ITg23csWG5AjOwib/U8sQFlqmyzE2DV0zqETqrbXlazjdCSMzYIozBDZ4v
Jzs6iYmW4UmzO2KGJHhAVcNwQH0/oWA+8sndvAbR7AjrTqFcetEiefq2Gy9v9w9ZfauO2VvKw0s9
BsYFGuLD0TuckM4zNuMNLT/hnrs1B22KX0PsZ2sMm1E5aMBOcUmkPZ7xIsftOI+XnseZtbQthMRE
ajBxeWWg0Fz6TMl6r+Jj121UQLvk8x6q508uTI/Nm4Jf3LJ4OBTXmQTQw/j1vPHDbI6ybfwcs2iU
SxgfXjMdgmHmwHo+EAyJoKP9iRTEKKvi0eMSVCqLd0Do1gKOPIaSs6pQMSndI+jI6hjigCg6Cwts
F5VPF79cli9aiWaohbGAqdDvo6bx+FWeGq4G5juC8R9kTZxS1xvCLEc+08fGu3dYrGE2BprPOLIn
sOYkHcxsH6oQCoxTGJQAI9khNDblzFRmh6ET2LWrJ093itFLM6MJRHRXtaFaJ7YUZDzbwYADasp4
zPB+So9soQhNx4gOp0sErhnky3eHl+P+C/wDoEodRjlDUzEnADzqJoiLIrSyydNsd2aLhmdSC++J
mrTPd203X53oF3FSSFQzgYFGdRBe18Jmh1SAVol4f1VZcEKHohAVhl1R6c8nQL5CHTKLon+oWfgT
PKjWDC3V3ugbfVL+S/EvJU29WE6QxRtPpu8IWt7uF4Mhul/OiMhsImzQv329v5h/U0k00MY5cchx
eE+9bdLU59CeOXaiHtIBZFxFeTRS3pJMOySQqv39RXuUY6LvGlexCX7EEAKRWNYGZuHtCIfD0whH
qd3nCuwWZZSf3cbprK2DtEikLfiDNFXBcGzNGvvl4wzVJsIKhVsB0SzNTBD9HeDugyVmX0k4SenW
QC+r8E8SfV5iBPq3JJ46rdyxK8bsjntuNz1G7zAhWOmtW3/A1rkouc1R1EfYmF8Vr9Bmx8N176cZ
eGD3Mp+gn1abt2/Cmso/hYGq23aR4+Wi1R6Zzppgpm/CthnJkk3TbX8rYdneY/QCWVelX3YbXyu/
MbC7jPms+eg8f5+OV22wTbPw+4yfLXgk5wKIpQi/PXjybRzU73rvuxcwPi/iA9YhL4W8aBp2X1IN
/LSEv0kEN1Wr56HXMCabzDuKiUrfw8aliyAVakbebKTwaiMo4G9IM8mYP+3FSwiECbSmm90NLXTN
sHLlVzEtyFXqhndK2IwXKgza2S7yMYsy318q9rFWm9gnI8XLgd02ggdVFpPObAqLYsjFMxyxM3Pk
tK4SyKliYkph4arR2G/HK33xej/tMZeM/wb/eWf/k76K0+5VO0npJ3EmQeUKVav/Y9f3C+lFljQD
uvgTgmnWOO4ntshl3Es78dLTOLh1ZJFxv6Rft+g8ZWANogXCX61xnU/CGkwWEph+EVnjBAR/TCV/
8O2Kgpk6tTd1Vm80fs++ERMEZE/Grvcwg/28n4Rn8sRkin2jG1oOuzdNp5I8KAb/4qb+N3ZJH3P+
bC1bCF7M2HKPC+X31LHjMef08b7zS3l9VNdUxRVZan8cP875xXq2GAfjCRe7fizL7f16m86ZKysL
xrLoubZNjMg1Mey+fwp0zpkWy8BjN28G6Aq7KdlusFYmduvji8S1jAbAFqsqlbztDDn1bNiAaUZ6
XEo4DJMf2HjRxd5dnpWgqadkkqzHnp/Yg8NT54jHOYAVYvj51rHIWjmy8RaagQSMyVdRvPY1Oxj+
iV0PTJrQ9sC38XIQlupXTFHGBMh+mo/CGv6eGxq0GNvOYZHohT14j502MZEo6QuXCUcNiqcqE1I1
JwrZlWAWuSmje3mTNuPpv4Wqw7aNi9PTBhnI6IXXha9e6LJcJYrh/grE9ts6IauENYrIG1F25zpd
vprBxL9hDOM3Cg//y9cpMcIRfBNl+5ZqM1SVZAQt8HW8zAgPlVmicUswWBWzCSdo5DVssw8iJLj5
tXaNeToecgv0/hzKjZl95iJqv0DnZr/+9txNlP4UfpbvUxdh+7rqwNPZfg+2RxrFE32PQTJzAGsa
Q8TtdNPiKZWOpMX8pTInEL8e3/baDj4I33b+WzZP9jpCFOcSM9GNgwDu6ZyIV9DKrVvZQA4aR+Bj
vu4j62IFQAqUpGo4xC/YJ6UJoUOpwHRxzmG6RAkLkDlkNkgby918lf1xPsPrTd/Tj4iLBbDepS8E
5otBlSmcTtvW/wLPkV6NYVWXTeUheflqh9fD98wyAay0im/qOH/MkOPSXuv0HUhLXpLNEFNgzavy
8dLGy8usXcbLp180c3l8n3y2yHuyCAW/a9T6BR/P93Y8X5a/T0hX2sm/zLmXZPh5JramHsli+fjA
VMIBweXGI8xvyKDc6+dgY+HAflUWeSzYLtYdyo/ARmYZYnt8hPNl2s9AbrkHZYTbtx4d1QYPjwsN
tzZ2I9HLVXgT9pYtJS8f9mYjSB4jM7fJcj1GozCVQuAP7+fZzlO5yo/bcMBNWsh06H28TAfIvpDi
gQImjHAg9PKi6Vn/P56EZfmYjyIgYHdo0kv8zBmmqNY45qsz547KsRsxqtM9PsTXaV9pL0kL8ROk
Lu5T7iHYpiDYXnaPrzt9Byz4+QaFB7v9eL1lDsqRtVMMFxEp8kb54BWo8LHzEIJFsWCEAti5x+AI
kSxyHbIuNjbkxAu7wQo7mIqHld4xnXRzs2q0268tVWFNjk3eemzy9VOrp55axbFpQ432HPlwaEkS
NvGN1k9tlEvDxveEmed9UoA1DB6ZwMuLhz2a6tVN8pWh2JZgkVkdhQYPmRa7l8t4Sk9h0FsKBm/C
H6PnSFidpitCzk/f99N0APjm7/PH/UPYE3sG6E6NyWjTIzZfJgxrC+zb5gX+s7RXq7yYgRW0nD7f
3nPakiHrIgRR98i7T8pmPhgUZ141j0u6bgtHKBkxqOKDYVIWpLxa3a0P3ZiaQszKQvM/VBHOpy+C
0OMQkJ0vAAxewYfa9vfLBn5g2IbG1nu0XVTTQbUuRNz1f9psJfBRHXxEQ/QGq+wNMv3J0Q5WTHcH
NOANLPcgpB4pxlszVC+YEXvshXHGcFEk7NQttikfhlBR3i1itu2P98OUU3BspY4AtyMr3Z6S8Os5
vE0RN5yvnx8vyzFHgU3eMMLhG8maatoUk3vY4DII/Kqy1NavXdrH1f5xX8BT20Qcw3o6cJ9m3et+
OTvTV7i3tUHQqZjQg+EbOIHD9MdRMUzGUeW2LmvrluVpZs1yTTRVygLMRZuIQ7o1QLuKCK72hwRX
GadItBGQFG0waHcaP8TICJsKDSSlIpwCEgteCaa0T9o53k/XKyAVb+EdBn1f9lRd/sjcH8b+R+vw
tuzQoNvgCPD5VXwKVrh5ckvnE0Z3vA+e4y82TABksYpp7NfDd6j1BXT0DG1x7wKjwzHef86Mreu1
3HykV4zBP7MoH1PGZzs9bBTfih7KRzWEzfIIHE5QLUxAD0Is+4kFC/V/qYEK9P+tBML1wqWCOElV
mgihpSZCDycol8/ftAL5DRaWQ6vlUIUxalO0zlehtEZmmSIWqdYsftIe6W/oWf0Gf3IB7zDqblhz
AjjozYuUHQu7926RwwxFHrhKBatUuVXaMIfQ22E2uEQNS+TutlWx+P9puf3mT7RlL6pQYQi+Wy+0
7ZVUwV4JixHXN7PtfpvYsQKS2XA5QxtbBeZqgm7YSL6q8AF5rBZWD3S36YJL9titf2y0Cs0qt2UL
1bRNbKHwybfQjiqqMNNgGr6MQbKZL3tPOTh3qgnBFDZlkcq2izE3sgK9dY5imi4rZDasMtQxvvYU
s/VqyypGM8+xZNl7VmKThPyRtq4z9LFDMcqrDeVlhU0bXcg80hZaaarMVpTZSu6h2jorIFDVZW6G
ka5ypGuF1TYh07H8J7bEBJeyYRPNip8jz7xJFQxRnfSU9C67Pia9A4m5SQnUMWZk97rBaujK8G3q
QDlu0iKtZyByxSLPm9XRVUzaBq+zaS8DS+tiA/CDFtkmWLoY3YdHyipXFVpA5VrW5p6mGUKSLx6p
ZMtRmKVQuXJvxjjZbbSxqoFQEW4yCYsydqlH7ZH9dnsfTzkxzcSrHyfo1ehW/u2bUGe062fJCpI+
vI9mbXpt2kbHCNW3c4e8m2W8IVbZsja8ss/ShMJIRVV6VsY3MSph59kiF9s+JuTfLtOoORiJhGgu
98RdUCvTxA3SrKnexoyLwEjZ5gmVsft1ImmjrC+Z/iudyrAqXS+iFfqmK65iDkjARpsEbR81MRwz
b3snSZVu5ucyvJh6Ld+yJm0dljTVD0SX28HKXlNRIymrucqYMg/IbZsDpGJaIxQsWW1cxO50rXmy
giVa8xaQ2jYDvU7aw1uXaMtwiTJ6oKxEYAp5oHozDNtQBxt1WxKEUbK5BuM/bL6fqvGPcebo49+n
i4BWRSv06/isCQAQdJJpULvecPLytj3xAdGDHxAdriivMRTx9C80ygFW304/PeLSHHb3c3Y6sl6v
jGdGzWaW11cDCZM5Govf2dkcFV/obMpTc+vw5C+EKzRZmUigidS68kXz71SDVb9+TdJUtdYOtLHT
/egWcUl9YREvjBFrujTQA0+s4HnMzFuwmXvfWbksR2GBVdiwCTZgyyrTN0yLeCMCG0iH9R6wfCVd
e1kxDsUq+tL1zeglvpyWbye7lLAJFep9E5uFEuwD/T5+Rq2gerUbHkraVM821Xmo4qCZNI0uQ2t4
HYNDYMvHFYDLsst4ywhTeoZ8qUzEEi/UnFOySKpyHUL71SZx8GvbgJ7+vPLkgs19Nf/ccpPwecmu
tDXvDCucL8sb4Fzas7xNN9ur6CBzostiyr8zXRONK0toAmDC//Hrn3dlK3zf+++BjEpTMMp2kWQA
WkC5BZAOq9J152Kr5brMJ7Na5bfD5adezeREMt93/nuq/HDcpE9ESwioKLRGm7iS4G0kpqRlGrcM
lsIrRVsx7507yMDe1fa2ByXZpuOYAJBkKaUqLyCCCrT5ulte/p5qwaJP+1h4Qp/ed5hmfrz2oh59
AmX6vx1M+YhQAgLaK22EuZ+DG5yN2KSn/bS85q6gfbCEjIiElJqtBMicxF+jgriRCgu2XerbdCwL
C7EQFmqOwM68mhQi1K8AmsrpTboWr4BAFpjiKdTG9LS7l+l9/DprohcWYUqI8pCs22MH+HPz67wX
zuN1cVAMS1VqlwlMKbEvomILlIi1a5wAgjoWMeNpgcCe4DM6zS3gYBV4mw3XUReMYm0Vva9ZdKLa
1AcaEYdG8Hy93iehZ6lh7eWDm8O8Xkv43vdxlfTHdkSaUbibF2oDWA4vZ+l7+vy8IDoZ2q3TTToW
a1KnaptaWC+9TuvbsRSIG2VBZGisuyYB/AzXSTscZDgwkqItNc49MFYZ4LXCmN4XGIsj8BgL0RrA
Aztyfda+wVHaRBNLgeEWND2S6N66CWaTUbcILYbFPFhsobezex0Fk5mlctn0GuBwLbegyES2dVk0
lMVlPwDvEGIOu7ZpqhYqwKHCQFimikksvQu4FnsrwufFQxsUfZ4G8qD78zLOAnlQveB4m7jttR+P
R6mBomddIoDh7W9xOt0/BMuaPueFnyDo+oIZF2kgQvqYebxw9tIf3ki5DQdovYvawp10heImEuob
4esiXgbr5Y+7BeEc7br61YzpcmhYJGJJ/Ryml/ubMf+uQlBMxULLtESIWEQ4TtVtLyzGNAAZbx1b
jnZEIgkKyU6vi7BUGYsQw3APK6nRJcrYYWU9xOwwWIaQzS5aSWoB+RVhyYRrqpksA7+sNIOJYSUH
uJLsJaYlvCSCuMtgGhGhoFAvYPG9sDVCUBltz7qJXTrhY7q9Lwepn993RIdFBfDbWg4KEDE0AtxC
xAzeyrBfozUoosy4UUBVkJO1C3iMU5pFRgXw0EF/2s/Hnb4QMJlH6VaYIoUoUOnAZg1WKTTdgWGY
2SZDTPIRfM0DNsZL28sswjDIeEPcfNovF2g82Nlzb7I0aU3fQ44NrQqQSr2Cp8DA1Xzq/4sHtMmA
t5XMgABxqYyhjyCJNgpHu9WPNe7fk3XX1PLOzC1eoMeXk2GJCv+gLgKLxx0P1pqBf7bAPbJXaEEJ
GjektjDRcr7Gedx/0fQnFZXTaoX3MXGoXm2MLf4K2NDFcPMcRC16fvS/FMiZ4av5SpWHNTEGRCvb
QPD9RUawcnPbqiBWbz5HUF4eaxLWYQA4nWOVhy1qYQ21wlcEH/4YT5+ioUMrM3yCsvZRtPXawgoM
4Q6HpZg68ccLXM6wt/yWKg4m5fsIzLVhxEYWCi0TgCZZY61AV1SK/2ACJP91v/3X6x/Tti1FOzxd
K4I8ZPHGbSt4WsZoh4Ia7cCptjiTfwHwLfWnP46HP1wkx7pb2YuDxdz65f5i1vj3X//j5/QCLAlE
bVymIB/M3D/IUWHFalywucVg1tEz/UkTd3b7LGvKSkhBTPwVpUT+/N5QYA6iedX/oFbt9Nnb0ERw
SGjbbq5g4QgUvS3/8VfhS2+a4P/XGfV8/vyVP5xwbWwBGI4xuCf715xnolhFEB7aSJLrr2KwXbGS
VrTsDMo1God/QIPir+Q2Z5+MlbWibdSubl3YQx9idagVtQhftjGUD/NSc37LzCUN4Pb8Y2XXYIl9
FhkEWfZnr6Z/nsav038up/89XRbh+ctojQsO5f0jrpPnG0+8HY6ffqCg/BJMctDYOuWO9Me0OsNv
WQkW7MTIHC84hLOrkOH7FB0Kr9kEZ++ax9cUnlEJ+bhZ+NEyRkIPPJ+XmP7mQHT3j3wo7KGKHZx/
m+eEOswkBsfYfAYmtHsXXvR0k1+gCAFqYoI7z5BlUBoZyoTX/E0wDhocAPuD5s1vowkvo4jcqHAT
XrAhDHTHGElvZJsSXvFD+6hD86dgDntZ+HSUNyNyBhLJFJYCghbL0kQ07KvgUj9Pp1LYyRBmQKvH
GxGuon6QrMZzDoDA/3Gf919+ep/2X/7w17/sfhLkHAv40wRiupZwgT8Kx6l55n3wI4dXK1TCHlhO
t8OUZW+jRP/2c87EY0WZpjG/ivz8v/32F2GJhp2g8sNNwiX+9Nu/CUswVUPYBbFL+INwi30sqy7H
f+hDtnmFELRt5Jd//u0XYfOsxADCHHZAY7jEL7/9T2EJz11oBCkjJVZEoIQVmLEKhmvZV9lIFl1A
WPjdRX+4Fn44wdFv0+0nissIv/1oKf7/qDIMMPpVFKN/lfzanG6iuHEVb2CHaOp8hZUOm5fyvYgI
eGOnZT2Ra6J1WCSf/lTbk3G0QhuvQHtIDVIoS1iojkMjPJ1jpNV89ViNBm1b/2hyj9brIsBYDID6
x6c2YKzeuk0DdsbjDz45ImB3eXtp2ib9E73/CcjlDcNzYyFwDZt/GwwOYP3sWAis5LSlWlg9AHEK
v86Gw2bP2bnVoxjo74fd4Tynd1f4M7Lg+rZxCLC5sWmaUtheyV4aJzW2qt00E4MIpfWno4zuUzMx
6P4L9opsDqFDiXdBYQs7L9xW7Y8DdFtvn65B37ex7zdP16A78VfKskv/5HQNeiy/OzCkex9KYVyu
F8xdU9d5kqdiwmIIWcdtbwv/+DsPWhO2TPygS2c0CDVrPyJrcmTeeGnj7eSP+ayPtnt9WYSr8vwL
Qrcr/tlxJLQfxdmuILCQ9cQGSGwKws8fiYpjnhNaY63/f8IGe0Yhgy8G/sF5KbTjOhT5vA4QCdgR
jPAcfg14mW74b5y4Qj/AdAqB5ocS7X7GqXZb+MJzq8Lw94+QdeaVavZKtS89+vHxMPRQRVI8bDMg
+sKvgAjvaut4GHoDxq2DH8j9hNLLXBvbXWvsm3bjBBo6nt8gpGyq5gcm0NBND+E9lU9NoKG9eEMK
K83LRyMIK7MFQvUrlFhYVVZF8UNzbOhMHbOnIN27bY4NbaVkW2m8B/oDc2xoL8w+QezI6sk5NnTF
/kSYuGmfnGJDi3iR39QPiySn2NC3nkxYt+iPT7Ghu/HP3vZYutX9szNs6A09c2Az+BMjdzZo8kEx
BQCx5a5/UjiI5nrHGLIDa1D/7Z/UrBlTZGDCtfEzVLdfkCzcBs5CWKeuapN4faLFDOv6VBcvAd7U
YkYr9LGO/Jsf0ZvZAStCVp3C2j71TzSp0Zoslt25GPTGFjVaoQzTIj/coEarNWF6KHY+8hJzz+Wj
p5g5Um3o/hgr7ao3OOpVcVDvlv1V63hk9VBw86NL8yYIhgK9uaWOzs2w8htqMTHBmu09frQQD942
9Lf9J3rzKo7ggLUiWDXSPNmdV3HoknYFrvnECp1bwQxNbzZ351Uc5aNFvYzFik/251Uct6R1JX9h
n6GFLUS0tquwTuvPU6FsqIxsCMq3w7Y/GMo7XaVVG7fqgNN8hqotn2n/qzgSSYtQ86Ym9/kmudah
fZm2gNplrLY0ybUOOYq1N6jNTXKtg4ex3Q3YFVrEWxnx320Vv17623L5kqoOLnHeEgv2ghhVFlXk
iX5EWoiFalXto+6bmitphWa9FVoBtRRuQaye7lgJOeasVVevvs8dgY+vKH1R48buTlqjWkMs9/9t
swMhLEOT0ew4YdTo7VOzA3GRqmUDnfFP/dTsQFrEj5luQH02VffM7EBcQ7HZ5lhn0D01O5DW4JOf
m9SkPnl2IF0tn5sNSf6ifnp2IN2MH0veKIzGqWdnB9I6fkQ6QqQ2w4/MDqSz+RfHgR5tWT09O5AW
YnuicpTmB2YH0lL1FlLOzQ6kpQq2q8EM2f6B2YF07QWbBU8OyY/ODsT1GsaywHlNNTw5O5DovF1v
q31ydiBdlZ+73kAEtOmbJ2YH0k4YDRQICTr8wOxAWsqzSo3x2NiAPOFq6/W7N8/NDqQHZ1ei0J9o
f2R2IO2oYowGmQelnp8dSCspt1JX4Z/qidmBdDBPebXxI39gdiAt1TAixk639pnZgfTY/J4brL55
YnYgbYM9eK1SmkvUFw2TFRUGgtTTswOJk9iV9OhY98/MDqQ1PP13QC6dKn9gdiAtpZg4JZn61OxA
ul+/iBlK3j4zO5Ce2etRE71vf3x2IA1w8JgBfhDbE9MDO5wo7IvpsXBNPTc9kDbiYSUgBmZaZ7dN
D6QFGJADVa2pJ+YH0jl8ST8kjk1ZzW/P3EU1MCwH8iq6pyYI0iIMIwM2VRb8LByl/Tf78sJiHtiB
FSs/cbEe4YKieuoH5xHSHbfrZ6q2TSSkrxm5UoMLEwwv9/kIQ6auwvf+LL5+a+tMw+Mi7YzjiMA1
9THZt2E+Iq3mMU7MrKVeWg0m2gmLMcQWmlW1Rvb40WF9GFZiNYGsgHfz6EVcg9WfsxbrZwcv4lK8
nrh0YK3hZJDlZTz6EQoeRUNfyMd42wvgQKzyH0VE/d8w8YK2vYL2poWP4+VtsoMNcEpPeoWaw8OC
b9Sqf2K4Iy7JisxZUmfraE7aVRGH3RJGOaLxUUb7an50kCO9XR3C+HY/NjOG1lIxcJdnBjfSMmWs
BP/JsY30VG0YtG9/dGgj3j6bgotB+39uZCMddYgBUzwzsJHoKYrnbHr1aWuai3fIxjSOKYOTVTNA
NQxGRua7PTOAjw7bxOB2np4ERPsrQqTW4cemgOFaHJ2xclTyoxMgifDKWAvYDwzVIWUyhBKnyzyv
FuKfIlxRzYYdBCbDD06oJHWlwl0+rnh9h1TZfr7s7zOOBVvO02W8LQKeRMVR0ylSon5w0CAdvA6x
V+ofnHdJ79LHkFiemnZJjFHECPDHp61Snm2IQrH+4LBLeosit+QT46dIwa8gpOt/atAlbVLF5sc8
P+aSLpGj/dTxgXTbBo7R3rpQAsYZ+bqRh7sVD6vyx4ZpkxCMI2hvm79JSshfPBiE1gp8fvomnW7I
2RJbZm+SYCpzPP8kI9QM1CqhMeS540T7q872f2beJl2ZihmmPzhtk7bYxtyGDbOViSCigzOCA77D
iE3RC6rLKq38jFrRTKx9glXSNz0Djp6QmeCQNCmVemb0Jx2QNT45FJV/YvQnUWu04X/tOcI0QgmJ
r+Lt7M3arjfCBSFK4P/qj2EgGeoW4bh8Tg0U4kYmzz0/lJQ0qQrdZfVjI0mJYMoocz47kJRM/iLW
Vv9D40hJATTRyRxBpAFhqF6N1r/mYYcbDiVV+xKNcMSpG1dnSUdfxdsoC04GXoGCs/mx0am0VhkM
S+qK5wenkq3UxfTUj41NpQX7GELH4yH5FW46MEcpRTyU/skBqkQxdQBBMjy+wW/PqYmKtezyGUIy
tQjnrHNe3RMjVEl0rUyRf27QPZ2Z1RSWKKkD+rOa40l52DGDZ8A+/6L475jFSQqqymnPLbO96ULb
nC31IHUgSDfOiH2bg05n7b8g3iJBqXDgK8UChWtlDeEQUYpNT33SH6/5qJoyyuQOTyofGynKNSz7
46vbDASURB0k97Zn9ZsQFtR/qyQHbeFHBpj04GP86PxdemevCyH9yLOPW6fv0vuy6wNeLNV/2/Rd
eh6VCx/+yOxd0hVtLFyXtn9ypN6Usdk8T0/bJTnch0ze/DOzduki21Bll//sUFxaNZxfFRuPveQS
I9ng3zMjgGnJKkSvGWzppn7G8UgZMFz0N/OfMpTCcM6xArP64cG/tBzDRyB4tv6fG/zbuupgAwvo
RcUzg39bV6ZMy/Q1QxnbPKeqdVMwH5Cwnxkf3LopiyEw3lPjg1s368os4m3CJ8YHt268IYNGbJ4a
H4xL1B64kQX2n5r627pJSAz+snx+CFjrYGsfYF83z4hq3dgss4Zi3e3b5/W2bpDxA/Dkc/N6Wwfp
+wDSunmgXuvmpj5s5plRva0b4GqW8fpg+6je1iEdm/v1+m/bqF66kDLGQk+M6m1dyf+DcHlqVG/r
BnMKDL2NFesQXbR4flRv62Ypm0MNTnk9MbGtdf0GDHO5+4Gh4K0bIPdwN1sHnNFjNyGS8tODelvX
l/Gwkc2Dels3HtOs4cOXz83Nbt0UxyQDbDhNFZUIT038bd2oQ7NOl7iVrGRpY3t5TvozbF1kxf7p
qcGtG6SaEZTZR25iwN1bpwYTxTJe9iP5Nk8Nbt00cnMjbHrBptGNrRt0yCyE7ulxwa2bbPvQqLMW
tVk685uBfzSrbBsYTFdahWZG/+zA4NYNZzer+Lmn2wYG0zaKmCx6bmBw60b1PtiST43EpBOx6Syt
Q554anRw6+btMs6pnhgdTDejQsOgfnZ0cOuGWUom04ZB862by/BgpzwxP7h1U1wfbuWJ+cHEiUPI
ysWT84NbN7XCbMVn8p+ZH9y6bskQZf65+cFEdUW4mfb5+cGtm6z8YKxbqttyLVVUkzKy27QPNpWI
UctTk4OJfLvYI22eHNy6Jk0jKn0185MGBkOUZ8J/2+Rgutc+MEeNW/fU0PrWjTA27+OrTDcMRm9d
l/KDLl5Ta1bql6GsfXrkL62iYrbFUyN/WzcI/MGIZCJOGRGXtTL68GrVs4N/6VhVSLK1Gfz7w9Mm
seuzYq2rVJwnD3vE8CxGZTM9rRVrJ8XpbYY/7lcoCKaBiWxIxGG+7mHizYzNm28I10ZRuPRP1H7u
EQ11M9HfDZMyaYt8+JLCSvBt8xzp1ws2QBniaIb1tszZpJ/3qJc4PNc3rDw5Z5NW44CTbODfhjmb
9D2b5oyzDVxL46Y5m7QG62PG+OIwPDlnk5bx3cw4o1VV1XpS5rIcp/HkpmWygY+CgewtsAAYd+PY
TVqDDQDBqzJT8eSxm62bif6gujaO3aQVvNLC4Zc2DbxlpCLtvuPN+DRSsdo8dJP24A0KhjayfTgl
LcJmlkRK4TZN3aSFmlj8b8uMytYNh7fDWBi2xuYZorQJT1dmknq1ddQmfc92QXPU1Q8ND23deHjz
Pthm9eRgVtqR18MsPffc2E1aiM2bQhA7ZcZuLm+2r+nffiZAIWi59f/0W1GUoF2LohXaIX0Xo8K2
FP3XtBshAABlWlDHZpajAh1eZQHKX1WdgcUdj/SJ/r9+qTp9bsXGkmHHc4md2Khclm9m4OU3vcaA
SyWUFHVKMzi0tkGECCM6cIWywxWUgOjUekhC1YONqP8OfgV7nF5YgUERVjSLpzKNkcav+VWbiP8K
li9ZIav/mPsRun42VLjF3rHWjj2f3MqTWc7cmxKeoONPgLOwAgs9syVag3F2C1YcvIAfjXdZjuD6
fLPY2u4/bFuc8Qbmd1RpR6OCNYjfoKmaWQxZoe0YKxSoGwqTd8SaCz8tPscK+OAVg+9se2pps8ud
zGKnzxwrdBzjgkaS0V+TcHTAFvih+7dNvN/6ZnVVA33qv2ZZwNygLep/yC1GT+HlXYVDtPTf6LAp
92851u14R3KDb4tTh42G8uuUCrdXKmGd2rd0Ksx567/9ap2iwxxV0RfCOmyiFupg/bddr1PTddW9
cC62H0xXKTuUna0zoGAqJdKofUtnheFL/bder9OQgGuFdSrfzavajv4+7Kenc/XCuWrfZl012ELe
mMHm7L2KBs+VED0dRwdBvunQoO6q9X5kwd1xEBVK0lPnlFrvp6yIfqR3Z3PrEThD/33Yj8JzFZVw
rqpm797T34d7rokvGokvWJMwgpor2zPE1qmInmvhXBU7F1YO6L/Dw7vTfgaJv1gzcNPjdLL+gS9k
IdxxzApqfgZl2ZRrfi9auudOumffUE4T6mG6g51tDFlb6immPG7m4VC1BhB8A3VQd6yUeZN+rvgA
XXx91YeLyCRNi3AbC+MNVdGGOxHlKi3iS50U6hf9N9yJTIS0CGtbayHNRyqOLSJTIC3CZq2gxCit
xHA7EcUpLdJwFEP621qHlzTZx0ZFVnnHSotSrPCx4J3YvP+bXscU7P9G1sByv/22vP5GWHfkW2/4
H/rNlIJWVWzwLfTY972dCX2meSTwDzljjix9jzVSdjRk2pQGmSXyFlLjEVxUS0bmYEH1sIELv6J/
3GQjtWzuQ4H2atEY7+b6j4vhUf0PucUqF482YIQFTq0p7EiOj/m7oYHv29wYRtgDzoMeKoO5N5pZ
L/r/biKnko0uHnpcsDfkdJi0kW9cOPPPuSUxtqMUjzeiZrPzgoHwDo4EDznJho9Qc1RkxFe2YzVx
BZmFaQUPY9xUVEnJV5DNGFyhYQMbwOtozPxtWqGsyWBohFM0HCC6RXgBvgfZdKFTMIRnjH8P/BTa
SMM9tMI9ND27B0LX43vY4CXWHhYd54J0fcX30NFNdpKfWTLo7wLlOl9BNnXoFJVED6VCUVNWAls3
DVsBG8U6fg+yZqF7YJMVaKpFsIeWDP5WuIfGv2ZTUvA/2IOoU2gPtXiKDVGDupT4QvtHeAoJSbpp
2R6AL5qAqmWHhfbAabJ64E3ZtKM9FIw3MVcdrCA7F7QHdgpCRAyo2rpv0mvWK/mg+GtmHApagUs5
zP20/BSySUmn4BIG7ErjsFmaJL7oJHXHbrJVBvKQgvu//RmAif6MwEQmC8X/0zZjwasabBWtrDdv
nfkNvjypP9+zUBUNDkawQcHrt/n33x0Ikfu3TdEalmZVOGJPWZBXto7MmLgOK48pG6Dv0oooto7M
Gq0bNWfHfjc0VrZdrZMRmK0bOWdD4ATfYHwWth+Z0Vo3etFNRsdBVbb5xK8jE2rrxtiZdXBqtP6r
1ueSWaZ1gxzt/eAkt2p4uGeZ/Vs309CGETFJWLftw/2ICrp1QxVdkB9xnU0Mh60jmyutdQcd/QCt
a92+vp+M0dK6GYf2ngtqnRnW68hqgvZTsOQHReNMDIfzl+jTEX95+lHoBOm/j/wlKl/aD8ObbtGZ
aouH95INS1qH0U/bYXK4M9b9y/yTnYVJ1qr/901hQcXCH9YHNlopWCkfcFA8MNijO9xbn2Z5Ix8L
/iHnY5HgZG5oi/jsrVFUZokNIXzWGtlClRsF4ky3CnkxY9bHJz+BQ2LXuJQtbRmZWy1l90tWgNDi
GE8TfaU9iMehPfA8NIUsTNgEV5C5lfbAagRsRKj0K8h0SHsYeJUBxn5tEf2YDbnQCgwnHSc+6b/G
iQMwTDMIdDzliIQWYwfCkkb919Td0hL5Wy39iaoeojD672ATAjefRLL/so14ObiKor+uFP6JHBTr
jWoxMolo03Tdxg0fv29LUHg4UoWFhfqmjB3ioIrwQ/dvjh6UFCjwUwtw1lhnOlrZKjJNVK7qzIQb
cGSTsqUabB35virXC2HXaXGdrrBBles1zAoG/2Wb0VXy/BuNJLGzaKaZvoF/2JbkCWJjJUXILLor
Ik+bz/Cft71xzWJKldmlDdROZxOmnbZls1sPkq1QIytlU3gv8/1P0Jv9NxgLY3QO+y9+ecEDqLxP
iaGrDoThKoO7Tt5uk5KsgqyDtJz+2zklZHVQjovJx2Dz6FosYmptZebyti1T7f1/hYlv1VmC1ILA
ypVNOfyKWRI1WqJ1bx93frNOydtp2+OyUgWcuk4MZ2oztFEyuZgh+/dtMV9mgRUN/bXh44Xiafr/
bru9htUaYBSytVFIC/lPAT/zL9uqNFhqGuOcquxdEt0OGs4GDzuOwo2WE+6v6gvWDfv9p+Xj/B/6
E2tqsP+07c25dV1hPqjyBkxll622vXnJgtY1Vp3VjRM4rkDF/PO2t2YFCdhEr/8amkR0bLpN+Kec
TKCn8SJHO1MIHmpL7Qy8k4nv4j/n/HiSBt7qonyqlbE418P2Pi+XTe9dFTzRjARkQ+yX8TCPJitv
/nnbDfICPvS/h8ZIKz8WgXjb/eu2hVlxXokITmWlQlUYaMFtZR0e8F0NqAAHS0LT97PNoWwT0xUz
RQeEZjbJZFphg+3HKkw7DBV0ZeukA1TvWuEA/5wjQNLJrH4PqhtbZTMVVjSMm2WDT07rvx3+HVw5
ja2mcdZRKVg1FhMA2hQ67DclUxK/l32XyrXo2MlSHXKpaRuiFTbYVX7GlcIWQlXWVhAbNXZYbtvu
ZWBFBGhWFHYEE4bpxrefABLcx+3Mf/CLV8L7saiGRVMHeWmEHABj2ZggzqZPj/ujEUQFozDE+CZn
aX8/HlOFnFSLzbJKqF0NaV8B00D6QeYj0h8DOHDRAuVN/FJFpiWZcuv9jAgjry9LroS8W59XueF9
u+k4UUVyMI5MWKxmDA7vbPxEBMpGuCB9qt1rYvwBLdFzpxvVP7maC8zz1EJrp+2xqgWkJECeEBZi
Ph5VVblCcDibPZqwAB9oheagmzuWnq1LXzbsThH3xw9otOPFtt5oxS1bdJytca8tZN5vsR+PR2E0
Rcf8BCi/UMHsaqrpFb5mjkFX+ulg+uvpdP8QhpPR56xSrkHLTvnPEWTHrSIswrxZhWWgip2A4OrS
HzfrA1T/h0kIGk9mVDn7L35c7CiP0unYlCJF+cuHCZP4ZAjGtVwyy7VssA9mA02gny9naqHH223c
vyfB22i5ns0Jwo7Y/mG5zOUX3M3EKlRfhDp9v9n6U4ocpgdN9KzOCeKOdjD2x3R7Xw7Ch4O3w3Dy
+vB/2K9r2XIVplv0rP4TMtOlyUzbry9aGIzXyc46henowmIs4FlgUKUwItMuh6X7yeukRbwXgUBj
bXQ/BCoqDCGktTp2OhquaXjbrud6sK678Xh+HwllDcYonfbzcadfDEh8lH6DlQF2NMPWwItSPw70
94AEyRx74K/PBgefL5PtFqQNZpZhRZI9/ulMi8F+uQB+7s6efFM/CJ2Q2Sjgk6jmkcIM70qDWHpW
d4kOu/XX9RrT6eqqeKkx46CZ7830RqWVQNszE4GGe9B5F+yAM2PAESLKj3FOr9bxSZG1nxRptwSk
YVYVtsRsjx5dmELaUnqON22JqVosftZ/h2BTcE8kmFEovwqL9cyCA++tNJO/pNtKz4On/TG7BssO
e99n5x5W+NzvCPFwK1MiCjsyaNQGsTDdv0ULsQY5Kq5q3UIgeQ/QvggG71eEQhVIqlPrzsHeOGI3
f0nzEVDfxtN8XW6X5ZxoIML12mFti3oSNaYWgVvu7vNJOqEndQwuVKaFkOgAoIz1F1dsU6NNXqub
sK2OGYHgyFatSAs0fFtYrmJ5A3Tw+jJB98IiHeu5hNxD2VtTZDxYVwX+2Y6sTwpDmq7oiyJqRWxp
ZhLyNQAKVAt/CeaVwm8+REuDoEpbGOcNJHpH7OYyDbk4wYb+J8Joag6UyIYmPyxnESexHTG7anR8
zcOarM3XWmP3lzTX09K+2hgdm5YP5Ma5uHy2bXodhmzPgNMetqglAeBWXj12p+Tj0A7Z8PGy9XMv
LMcFs3exaQ7szz1G14X9skQWje+qozsW9sVqkvmY7cdn0VJluuYPyuDzA5nOZrdnBqOzESEWW8C6
lQ69EP/BtAb/1/32X69/THtnHR/liQKvRT/RzzzetgKziDqMzzaxph8tWv4Cekr96Y/j4Q+XN8Fj
LFjTe135xlZwPv+Qxr5F0TQw06DEdjB+zX/SJJ/7+bZn8QSsCQqnFP0HDXFK776Pt5Cbz1+FnG4R
bx7XJPb56/T9l/uLuUHh+MyoqakIPr5E9hYG9ggdvm3vHuFfc5GHdujixtV8/VUcAt4OHE1gwOio
ifmBkfEHdAP+CkGw6ZKlo5IFYtDtKywQ5vfcRXYFu0gabTc4jfRXVEjCt6VIQHN+4zxGzHrsb8+8
YFe0cZsbRM2fvdv88zR+nf5zOf3v6SKZpCwghGUgJv5BIvmPuFKepviM+B4F4QNN5Rdh/IVNlYa0
4Fh/TOsxOgUjaqhFLF15tpUOwrfsOrHUy1R6RShTeNluTd6RlxWetIlfoKUs4YfZySF9WHaBYMgL
FiabwNoujbXtbz0vV+u4V2NkQp6ei/jh+QPkWYu9IvYrDbF7yBNhGRfyfC/CJjhcjAUPDgTTv//6
Hz/nL4SLCYWR2kDT5C/jQcj1j9S4bSus0IyjNxBj6cW2aV4m/MFRtFHnQPPm98LD5ljA3K7Mh5xd
Q0/MKGWofMjN3i4u9fN0EtK4JYPWAbFVFeXjrQjXwSQdFqlWtYtYIqaHrST4x33ef/npfdp/+cNf
/7L7KW2rlWysLddM4QJ/LIUVmLVXYyGv827/7WfBOCNTsWSmIj5yFfn5f/vtL8Lvs5nDkPgpbT1j
JvpalwWbyas8Skn4238QFmCbr7FkuPRgwGLIuC7YprGK2uDdrK69En6cBeVAFJcmNReu8Mtv/1O4
/IKldsFpN0JntQmho7bkw4NbbxKGK/zpt38TlmBVuyb+HNuE0M5dskg4KaLWBrJ+okCn8A5DfKpz
+Os///aL8PMsyIqhcwSSN7laTIuY2jLNENd/0Brv4Ljv36HIjPz37++XZPxCFT4aUmKladmZ4DDi
A0GS7GXcf7kKK/gCMKinqFxN4gl9/hcIzF8h7vdxvn3uJMQnXKj0G6qwsYRj402722U8XUdhNAvt
iZWUIfFF9rToreDwvlFYx0d3oMyoqk2m2e3BXdBuvi7H8UYTP46H9JKKdbsxQN/v0/5+0xf1jyPg
WqWPVg6sK8jHb8KjTd/Po3bwc4fznVpQYVN1PgjGb3l3uZ8Qx0iLnv39ctFm8/FTeD9PDiwIhKvC
nr5d5lv4irvDAhOb7qfdbdFs9T4J1FquLs+A6mD8dtq9XJZvODzxtODvnRb8NWE536OFVVrFw1vA
in/Q6nN/mw7Cm7CeNw8IielLAsW772GCyfPEUrIWUY9bvnrsbXxVMEwiTGfTHvUZCXprnxxZTTvx
LXWBP7I/LnoPh/vFIF3BMcX4aznwNkcc+mnhY8NLEliIiYjePZsReRb/67SYGKb+5zMUCM9v77fd
6zgfU3ka2h3rEMdqisiNYzyQM79w6y3rK3XcnlluM3kUTWx1uP7deNcWymX+XeImVbI3xdxyuyJc
QxpPky2TUX5Im5Ph9uTX3dt4eYFs0n45HmlouXBY3rLtosJcFv8wmyn2Sh5SHHgDo9aQn5ZYg70C
UmbkjWnSJd/sfCJITb1hYekyEFBGtxLHu1cSiLkNibmLMYr+twNOu7xfJb4oY6QWVcvAcYcZfA4g
IVpe0tUqUBiWiGM6FqbHnn16QnhQJtghi0USxr3GcYHkzisk64TqBTq3f1wMg9dcRaC23sOe4NDH
T/1n2vQurFfc40TzI/8g4ymmfNkg+AQ/C3TnFRpDjAwJRzie19KQuzNudfp4wnmah4uiesoPbvya
f9558MXTckP7DvT/bRK2ypD6KkyhGicLShC/775Mn4IlxsBEQGvY0YyaoWEPbH8ukfSxfE2MxsIF
e39vWMbWs3rI3f2aKlKgbxn6GxQSNhbRxlhu2UfrPU3C65tcI5SZQXMRkDUeSFigZtgqUG3GMliI
JKutP+0HCAswaaXcER6MuxHNseuGDXXyiWgEJw0Ch83p1xYW85RYokdKcQh9vOUbzLGX2IG5WFUZ
BFaIzHBAmURo1VpP2wYbzUE/QmhdHTvMRkIrGK6kM5CeeOauiz3zE4TWsY6X8odIvQx5Rf2ThNYN
/42E1jFDu3ZvQ2b2fMBx2f7VmSk1f3xMh1n/3FFavAotZzNywcycd4DKwgJ9ePfVdjbovbg0c4pb
W8ahyVUfTusogQeaQLMZT8j8MKvXm77PkvPRrvZvh9TTbRpnxkUITnjjwmr+reBmTcvB9HVybebj
dd7vXpbDZwbXnZYbGOirwtIpA3YNq2im2rAGq25RBtPbryF8xlB8QH0rW2FJ0ZvTdU6Oiqbv2eMS
LLstd01WftOR+e+CDjYRMilwUbKWQ+qQNKj6r+PV4AfPFqkY4wAvx+VlN14/T/tUpG1gNaEMlPoV
x9NrghLrK4eOVbh2LtqEv3o9znsKNQHGbHoFH+dG9qDQ/+WoRfk/7vNlOmR4Ewt8WcQYe+H8EeAW
oDDtZbkIp2BlsYj89vA9Ejbex3SaLum7ZLFvr13YdciXySpnKyfdTVEvxTrxn3FTO9xe+mmps9K3
9rABxXwV2pu8iO/uYQTysEhuKx4yDmJGpZkX/XAieZWW9Tr56VVmkfF81o4IbgYI6LYk47+m7dR3
LdVMnWMHilny6zy6BYWVWH96QVrV2Oqwj+v+Mp+h+BMcJ6pkojrhtCeH1MDi70hMFtyVkaXTfBkC
ZzXZ5eDUNGwOQt1pvipCvnJz6XbTabm/vW9gTV5Pj1lgXEK/C1TtnbWzMOH9prfgxQOLMPA7OIDn
aeohc3w+xDbzSDbzx1tyjZblJXon8YINzVBXvlw+cw/Mk1XuUfhKV20yvSzfdzM2X6TvuI5Jne3c
gJtZSS7TFYDlf36RzIH8PpDDH86D/5ziJDyJCq+kYOMaLvPbfNoJ3Ue4QKiPLHQZ7N/NEl2EW+CQ
yi4vEBzh9fWQ/vUyRl+X6evyZZLFCH7Nk2bAcT59kJH1+LWnJjuMiByt5ctsLAI0n2mt/XjCzJT5
f06lxsuKFWuDTrLQnPvjTP28Qne1dvZYIQnWs+CJimIQPuFFfc5BSXXB0ydV+AkRTVE26U8aXh/l
DIZU7y/9Cm+scG8rgALpX2miv1IKZ2lYD5/yMXhjRGlz+gJECB3k9+sOHkFYir1c4ez9VH8snZEX
NTpBctI2y3T4FWJY5/EynfafP8k/3IWr9ObYwg+z9lSIe5mgpdDeXVa8F5b/Sid80saOJ+C/6htp
go0p++oC0fOuYL+x1BMuHy/zaUzndIkJ2ZI9YwqBwmtesuSZohCuhzexMgpPd+nrT7rwV+rMWc+L
9qYS6UQ6qX9VTCcO0oKv83eYDgNrCj01elEVvYuyEA42BI9oPlnuNzQO7X4yfBCKMpkQMEQMtUbi
7VQP1Ejhlv3iukHex5Nm0hnUzVuldq97BRef6okvCzbCnmkdsPHeb7fzDpywr2Sxnm7pVdioaq/6
v38coRrjAormfntN4+mVJUOF0d+7SqMRckVkP6d/m42C9r991Dx1KnfftDkP/yR8rWLn5zPZeuHy
+vBjE7e9TveDNrf08av0kdkwKCyRMQl9uC7qsL3uuiL9eeHfDY5gcLXguneWHtL7ZoPoTXNla8Nh
5+O411wFmz9M++MotB/Ty3PkSucjQKfb5TQ658eQwb98T1/lah1TA3h73WkqPs63G3Z+A3KK5pw0
PZd8kI5yNkd0ndMCK31PLcTe1lvVmnUv4/QdW8t2l7tAGipClfpGFwxHHEECUJkR3Ex6mbYNqUS5
ZwauMmQqPLT4+f00w36Ez/vgECUn79v4Bt04LAIp0HoVYzJ4lLLdvcxv5kWEV62CcazG799Dxtuc
5SAJuZZPcHNEGjDL7mPcCxfhFzC5CMsvH+Nt/64ZZoK2olHgOTbbdnB3OV334xla1y7j/sskCDk2
R5kpE/MZPIP42wF8qqPlf/vj/039TC9fUt38yg1sDZXn/vr2oqr0DARVVjUDa3J8+K//46fdT/8p
fOWxA1j2moLTepsmx5Gq/KclPPYDE0jfd+Ipa4/JYCM4SCBa2ydKA+i3GGbW4D7LXk0b+2q+Lrv5
smt64cMhdqffd9N9v9ufhNP5W/VsbJ8wAdtMP9jE7vLt5Tf4cCd+2cW2uj/pZxA+qsKPTCBdkzZS
+Hw7ToKIKGKiDo0IsLku9yNgGtxvi2ALMCbz/juXMtNXi+O4+o9Jv5wBGqF7VbvZoNZw1ewPuxQk
h4qdDDIF2A+Zuxg+sNF/HhgajWRo+F/HGHIbqJAvy9zvBDXYdDHJz+RWzrqrwzcxzGLMCv39+zQe
hLMPoeALNy8bpQWb3p26uDRWuX42Ntuyd7UgqHTQDpAtNH/rZnAUSXycZXzWJlqOZqqItgms2p0S
jBeGDufFodHXgREl8GMdToSvH25PeDY2thVHgxLVLB/w4llnhIOXV07bQfzyHZA54Aq17actl+t+
noUDRD2DT/3TwnzVsmRAnP7m/z6eR1AlzNxItLa2dththvJqiWXZcPTBWUvzAWJ++/tlvn0KT8+8
KZBfxdqlUcKz1VmXZpC2zX4a/j9bBYN1anmvpmQji1mWwzyYsO2qiln6KOFHtO1eRNuSof6WrPiH
WA3LBHcvnzdTdQ9R6PvHWfapuiEqNAG0Y9Yr7P5+trg/gufARxP4aFfwGJX0GMwjB7uB9vA+v71r
g/22I/9aOELz6NAD9YAM6XcGojPpe3EkZZ9kCfauNyhsnoUjapgKzJ1A72/kPMA2aVFktW7RdzFe
sGShf1L41F891H6YbmLGgrXAA22MlqEi3Og8qFD91CIQyipIiSarQEmRNDFatKvtz6VqBDJomphF
dZjM9FRAZ/m6zBBwcBIy5xB74Y5NMiQkPsd3RMKYjwKbxz1ypMQdBia8jEnHKdouIt6RJmyMI/2u
dWQDmNqzDAEbEHiKySlfpvBI1XJ8ZPWe9aMnbZkzfQeK4fq6LEVg2WTcac/frJnltGw064qhjQV5
Dlqw/uH6q4WYM+aKpv0Ek4N6q3izHjmcJKrG/WX50JfpFLas9dUQu9b36eUy0cDlvm+GXXI4xsCG
pz58n/6IJdcL9xH90m5Of6Ziv7W//uWX/4Jv+7+kv6zDH+ws2vm8H9MuEB+g2rokivF3y0q4lDao
Dar48dLpcDbX1EqsUH4K0rOTJD4Uswnc7Rmrc9wNfHWcT1/ywqFtYiQNEu227MbjNwACReUp7IDJ
B589D63mnM/DBzW1zoY6T5c9FtFDuEq2wcrYHsCDR7P7ML/NEheVgXCNmL1lKan9PlT7pijxvv9y
wZ8XRGsRu/2VwSHIoz4WjB/ftWzfLRctmAVPLxjZ5DW28/Nuy3G6QAe68PMru7t83H0rXZunGzA9
jKnHVIJAtdHsUfDLvfTLjGcaV0VqFdH3+xWxqF7n0yQog7YISS5yemGmmN7EwFxtwE8NmB61oKAL
+36t1O3lvUGpILauGN4zEALLDfDyLtoTPU63VCgT+a9k80oIS7C39Sy2iyf5cdP5gjuWULkhhC6W
ZWtlu0AXCjgll5O0j8rvA6fMFGK5BP6YLWRog9qHw2V8oy6h9Je9L8vDvhSjCdF7ouK89LdDG2zU
/CoVMOzw6FcD7Da9Akg0NUJZ0ZiubqLxXKzKr3FOiQnDHceEVKSHZMWPkOgaDIAIFHctlzkVzaD7
KNjPIhC+CtIwkDieqbXoq7RQazvq2qBDyuwf3Ao8w/f09wzlvcPBKY1YpoG7t7n3NmBONLbNAaAN
6u0CGCHQC7kIFD2wDQDbqcGGtTSn3zRdfer3fZ9MJ4ZZPveo/lJYXgXLMw2NEMforeWWqpqQ+Gqx
SoO4hNGrdxJJRBzHTwD+fl32UDsh/3QZkqbqxQoHepgirFmlnx5frssROsBtcFqz3HU+TFnOYxOh
kd9NBU+iOowOr2LMmqoOo098PTNLD32dr7N+o5+Ijf99Pmj/8q9QqSQwQ8Vu3lfpmOLfA6bBP4Xu
V6JHNjihZaWgXrSDAjHSh6hJWMy/Bxpeim9Ib2e+3cALQelFYovASHP0zQqmaxdLoDZaK/dwzS2r
Nb3nQObOE4eEIvV9Ph524+GQ3plSwVpGMlCqjzjgNL0hNi0BDQu7qlghNwOoTdW6ESnVMW6lo2jb
QRsN9kBalsiqtlVNWEluh9W+DWVTd8LGy5iqs+EZKuA1b73klV/fJRSFzzMxWfs+U2tHloDYqpSt
NEOu6Xac7tT/dz7dTTf/+5gouSHLpAotk1YspSTx0sbEtNkD0e8Wi6rpmvCnu7gqFSStCp+64wbZ
CULF393VzoJJ0HRMmSlfnlkKArMtY9oCGRdEw+pFqPUOOng+RuxlyPD2UMfsRUcmD9assFITfd9C
4ATWHcIcb5JJgUAFSa8Pe7WVAFiun7MKPb2hgd8yVt9Px+Pq5gQ+r0MZXZpRkrfLzjQSCu+9EneF
DcxC6yCTegIntuEKcmk0XWsTbNgVpFPpN9EJXiBOrhAOzpTT4AJ+dIOX5dsOZMqZW9aC4i1iBiFJ
OayIFOifaX+Am+vZp4TPTtqSyyLhQUqmvTGKaWrgxiPVYUo9P/o1mCBAjKT/wxo6D/PX3etl+dBa
dfo+o3bUcsHrWeqxfcL3KENTQw0JEt6ufavwRRWTYxtNvo7vSZk5H16aWmBp6gkVjsYM0d7ZdGva
yrN5q4YYZQmDqzR/9DETVMtLaDUJjCSBEJj1gfNqTdiJ0WUgwTYZWmymFxP1MNkAitl6geV7FRri
ps33POFMql+X5fjrfN6NV3CZhLssQ++gEXsqiDub2PX7d3yaQrtA5at67W7vsEMXnD+pR5dojLX6
4TA50xos2urk+Qk3PYQbLMT2Drojr0Cwri7w5MfT/CHLrLZgLNe5nmGzazKa/fCr8zhfBL4r6jj7
UqQFnWmDpSdo1i62n28vlyDKkmWhavXUa/WyTbGUoXIuxLYTeo4q6vy73yVaPWWDCKqNuaVWtJ8v
MKUYREnmNnv2IjT6qmRm7h9eiUj138Oyv3+IJljXhuK9eSR3pjwQ4/S2I+mfMxNV2IFbCGwu3Fgf
taTwiIe79nb3aGrSf0DvV3jFPnTlO7ajH3NNq1XQqop5PA/2NdRCQ1nRpmvs6qgtzx/oBEEoY+9m
X6V86EAOPT+wSP4J+6Pwdwy5W5OwPUy3cT5ed9f7h76Dz21v3/RNjFFZYDrL6SHbqpJFzQj4boDh
jII6qB7CZTbqRzNz58M3bYvuXi7T+MWe6nq/XJY3aIcFwZoug1K85pG59dqceB+vM43xgXwpFQRd
AJwvmZwYWPmFceoZpYA9ZLowq9Q4C+XgjeqgSSsVmqNP2GB5HxxMBfzpEzYJpKJXtVjQf5wP868p
vFg8Zb+qN6Tf+/td+9CvnzsYCPV2Gc/vOwMblL56VsqFQ2Qqi7FjLx+RATXN6+s/Tq+37PWzKew4
2NTg2E8fLyCeblj2v7wCzOLum97ijsJ1BCcE/3wVDu0zRyZs1fHg8+3bNJ12t2+LJkMs8wVMT/0L
IqIGylLWGsRysOPtep93WlAhoinEKo6zJuf7RdpjXYYldZb4ThRL+jZeDtf0axS8NA4bFwsDFGYg
D4GVTiDor9MZOo1SCD6tHaDn7stF2ZBRMVOavpC6DgtnBv8lsfh10aTw/nl+n07pVdgsZiz0s1Uv
2s+b7x/w2vfvu1eLW5cWqLgD1s/BoKAIFgJ7Qm1YCxBiX8XTsay3mftput4BvPgI4lA7T5+almD8
uy3+Ep58iKVTcWevl/ENfbpAT93Ph9FK3vQuyyLG4p4S3mEeGXAMvohABaxAgWCpDdIfGAk7hqvx
PbkES5czKKjr7bJ8EWobFC/oRggTYy9ev775Z6JXM1wmvBkr8esdyiCxKI4evi3L6+vVzmrd7d+E
B+ONhOjzFcq3m1H/Xr7BlEQSqzofnJrXqnnrsbi4xHnSppVzOS1UzfBtPuDwtP17mqKDjL7nV7qQ
Py+Xv9rclEWRe5XQFGlFppIbj5s7nucbTGydQIBrj/jrtDu9XM8C2zaxNixweNBhOqSvhheI+Y5i
L7023nBdxZUGgKBYw96+dIYleSklM5zhMIjQmmVp3mrpJcWj1rYGj6C2WT3fgCqLDFgSyYKGYdWM
LAXnsVnRhH4fESkNpoUKl6HCwyg/jZp0xGj8LxpQLZY/q6KuojUp1krQTzSjWa9ZSxB1ZWwRprbQ
Q0CZuXxH4M/DjH4m2sAf4ywpsyq4OBNQpPvefdD7v04XwN9Clk3vkrUXBWmn+XS+3zDuGeoOq94y
EEj0vNF6PG5e2XCalgTjRRAprDqvIh/dSH2v+XeNIPr9UzAPn+T15Uam/AWCpk6hCfK6ZRfm7Jj9
2+7rdYcrCuKH2cmdCzob9x1cucsicBmrDWcqGFUXDFDc/Z4aTEVf17E+B/xayh/Qtyosr2PWDg2E
dKlem+bRItGluxf4l3TPiuJFhyyX9sC7FNA1HCyU1hIHr5pJDOm9L/fjYXe/TvJTKV7szZBDKPWC
G/nb/SSwflTPOH2H5tfbUZOtTXzgA+zGw1exUnBgIiXwZwyUxnzbv1s6wuK/cX+bLoL85eWePotO
YshcNLwySIGMQcxQHFhyx7/h1Qpgq1bmPXD9x7hbLrtX6KS/3paz4JSvhGnKxSThIqgqJkiUwyVn
lsQLpNfHyyy5VawfvWkdCvZhumKVLeD6UGvkeIRXSSGw0r0xDYj+umnQjFv/012w/FmX+ND5Jvf5
ZMcp0yhdEHiCyG5DXmxD/xsE5XEULCxmnKPzWTPFBG7Gcf6Yb7JrrTdRhcTUeWJyrHICWC2EqPim
b0lajaFl2HmgUdL89g4DPmRflDd2MqOLq6FaUEPRUlcqFLnexsvN2NcmbvplPp/No6UvvGKeqE9k
escMh6RjzYjoHLGmJbTmTOh6PswWwh3w8I1EP013bQIdBVJkiq4ib8LIzze9J/1oOAZ2vGnev35+
LC9H4fkYEgcDvgUppy0kBOMAzmAJZIFxA+/TA3zyU2Jo6CDHbOmMqyaW/oESnrLDWJd4RX/oypAq
kShpPKw1PcnrMMFNsvkxGEb3IZENXiIbelmBN1sVtomHTFwKs0NM/H6z/8leeXLVik1iC2pM47s2
0yDO42lXCjtlI/NaTC8Z4C/VpjfSlSF4k/2kEz6Jw0ylQeUUx89ipHm+WLsFbP3013wErwcwFeD1
FAe+U37ElPNLHDiVbMbStbKZex76V0DqUxxViwXGBaQ+FUCfDQyw3IZbxyuBCwm31IW3NAQwr445
cD3obdmlwd00fXI8OPzTrDZEJs/1JmxoCFG8TLGiEi6OoTCi0dHkztALR2AgYjRYrdzGYkqgBc62
BfKuOZSwkY7hNvIO2eShKmEtvgHFa9MFZmj5nFSGzyiIBYZPx0LrEjEJ3M8G3aoW0/BDDiFSBbCO
PnAswHCqANjPOxMQ6Np9LIfJ5AJOE2z6Kmx3xUh97uyCrOwZ4GNYyp9cTRASfcFWY+jxhRJev1th
gNbZpxTWYi8JDKoqJskxHUwNz65CDSM0woJsKDiDAndSBndmzU79cNuyTsSqKs7+7MRAD6YGCn+N
fmZbKSn9xhByiSsF8j7lDlH5pX02cToXhADDjmW1ueKlCb9fhbqqzZGHIDV6pioh6Kq6LLULEqBj
EqCtfeEiCml4Mx9T3o93GJAhpgzptHXs6opSEN/tikTbhCLcRpfVwCU4wjf3ORBYFUDNspK/UiAS
jsrpDQrtMQon7aMwxlUhvFETNR9LQSRylFIvpQV0WsUxcFmMyeSJH8JfOfeUnqEMCKEq+JJsBZxb
p9WFtNSDpKnNYigKbXEVroz7TPmXxEOe6uEfhyqHxKs43i+zrgUMXLUGIs7rOIE4u5TfUQiqjKMH
MydCCcds29iePSMu4HWjTNimIJgy7fBPVjMKWpbNol85X8IldEWUrQtBGjHgbPzE61+rHikTIRrm
bfzuhTduQwBki5msBNHQNk+iEasASNwDfxjWwTEzlAYRjhaCUrN8VNo8EY491A/Y4mFqSkg8tSF+
S8/r5iEDYcdFXcT4eBWNot1GTd9QavSzaZ7EGnwqVkhpewqesF2hY2wHRpqIO8aGpw+Yk3S/sn6D
rWF3FS/RCAvNSCLiP1NtZsqvbd34koewVqLK7H5KdVZQ0LWNZ5W/vVyElyzCZJS1aRD594ZhOpoE
BdGxn//0x53a/fuv//FzsoTMjTmtDWBe5YNrYHxqBk5/a0v66rAvCwNzpxNAhiaCWfTLXfh1my+R
sxxVG1zH1v/gH/7TPOXPwudhuZzxPc1ZTRHMTtqAG9BdB+XnDyso4c6KcA/tw30LSS5aQfkV+nAP
H9PpfkwNJKOP6+AAtpmUl0DNHzCbLCm1cRkrHGs3XM3g/RG48Q53cz5ioZlEAy2nIGSo2p/mZ4Vj
ui8TtiilDBV62fBdjGgyktXtY6dZ1I42Te+pYnRJ4aYNlZiDZyOWqyY5j8E9Bo2R/mnFiMO7xy/6
LkzwntS/sHs3r71Gne6rgW7vAGN3v1yXi4zeT+8b5ZTgdW3o3TRCkMCnAHTmzQv25rWXe6acy5Ty
3RbMNC4iWCm9l+eHoFkW21VcnwpWi13Tq9SeMQKbibiCwLUuX64b7k41sTred0ieMENOOE/rScmP
G9cu/Mu835ncqfD+/hwMqg1fzNJQSsmTgGAvr0rP2TjHZnriPpv4K1MRL+6H2l2082xJKR3hoItZ
cQcdDSpBuI9kbXCBuD2vsko3rfdfX+6//757ucMsaYNfLNxUVYXL9J7PXsb32y7zzA1jVF8MRIqA
DClAQyMoK6E+k9SSfzSWxxcL1AfPNZCfaDqGfZbJRNDpGb+g+l6X5lorDgUvtGictQhPd3cR6zBW
RrfKhpOW8+6uHdb77aYXwhUxYYa1TRA5o/Ff4oZrf0csdXIAfM/cU6kh5GgV1y6XyTycGcBK09EM
1wmsUvVrVmkFZYowmPr/jpokBCHrb5JlfdB3+en/+r9lI6eNCjAS+m/aaQFpD/UfTOILbaJEoG2S
2HnlC1TMTtSEdN397//1i7AgMxx8pPL6ebq9T1BXpbcEpSF7uQ6SGJFRMhCJlg9+d7bGTBCYQyhw
iWK/vH9AMUCej2rGh374Tkx3IYre9/RC7EYqnGbZ5e5klx7TQjfjl4SkacMszekODXYjkOLlA4Yp
LReBwgt2xb3zWvZ//6LPiAWKY0al+o1A/qYfAj8xiG8DcUqVybSeJ0fsrIooyRkqAb5PTLSgMZpR
UaUX6hxEGG/sO3TYzTdfqyDcVxNyL3MSyKej6kNsKctUjNF6KubkPQgwlFvbMCdIcA1rS7lmNhNU
6/GAaObqVB2oU1vYDPF1O8wTxiJpI+Qkyeq6ZGyARSwNt580pX2bpuPu74tA+OXAJCAVWxjQI8s4
eF0f0+0y768Zm76tQ3OufPS4NvkGTRuzfvTjnSbB3ay7mNZjlPTTL5KU9RYXBNdN1gosLjCGhb0W
IRt4P0Zzk8PdBYzN1GgIegamNcAj0a5D1g8RSgnpOcqEtF+O0IN+etMSUiBSFi1RDiMfUFUFqFl6
iCKMdvSPIsdJGr2F2ydQxWjKI6HKTBA6bcyetU2moEru4NFTzXFeI6kurkjQsn3sBzHAFU4MCVTB
nPQ6HTyphJOWwQplYLR+Xb5NopnVhD9fxq+JYBrvLzBqSbgkZrMVGFEefBcECj0wS5eXv0Mhn8X2
2Obm1G3Kzdlrm0+gg5qJY58cNBlYI2uwOiwQY8J7qdhGKNA0Xy7aBHzXxxQevGQ37mcDGEmMqLRX
gfmZPdPgn5bhE2n7cDkdP435ubxu9iE9BRkkcdYDprkMIstb2gnC5kZDykzZuVZS8n4O8AJ/F3ql
WD9ZwHR77e9DOB149zAC4HmmonsFY9+znglX728L/V+nbCtqFXbtKWbPuJJL8M4Q/PF+1ZwDiMNK
KMCMTiWzppwvvDT41lSAKRWHstLlxgFsPtYJm+pOU2F1uuvdC3H+etX2ypqEbbBfaMhjH/PKA1v3
LnW7accm2uDFuwpRQnEDQiAHnrJBwcfHy4YKNNe4Vsd6M3yNOLmDmFkJK6EztdlshFTg/bLqfqqH
84apMI+aKv3DNhDjbvAi30qoqR5iPSTU95EJRVN3Rhfro3woDPjHHcDqtP5MWlJEiPVqBt66tX7C
8uGMVGBlyqzcnNWsiCRZ8mr1GlOPVSST9j5K18LnOvlrmc+jNgNdG6XUXTBE242wkcnywnkB90/O
4NWsmr8E57ssjVkbdLghII9AJBxtAr20VhDXgjhk/fU4Y9HhclCVLV6v7wW5yNFNkj5qLX1sX7K+
44lavo1DJppsJD/qWGOJj4l71/uqvTPwzDY34zP0dxDczVqFSr0hVaxRy4ui7ME0lw6xZpV1x0sW
W4VIU4X9sKzRzrTB6n+8QCJbe693AVSAj3KirBpDRvYdxlpnf5m1qkWQ1N+1OBJW5DAFQAxmIJqz
AC9HbKXMYwDwwTwsCPrYy2XjntP3MyB7LkJBAZvaxRrEEehiCzhEwRQthSLcbf3lBqpiufznfPyb
YR3hZEXYXdZ4S57E/pamPDaRitEkwTT85/Ttz0t6eJri82FYfEzEOxF4dggfqk018puqCv0DchNq
G/bOmhjC5f7yadJR0BQEKwqFC3zEWaDmofP9LDQRByOBfbqb4qsZkyXeZbXC+2CtWzn4NZKvvB24
9GX3q2DE95v3aV/H+Xi/CE/GRv5ivK9jVvsTxnofzlRg3ZyXu7YbbT/ZJqgcxcdIGaw6k0QAXxaL
hujyMjgwfKxYaIz9e4a9GQ4QAmPUUjBVe29X5BThlptYMzWexPVjCyAQbTgTkwP88ESG8D5FlBxt
CwhPYiqBH1RYy9XmXU/BGurill0CIkOwm8uadzljNaCJ70DNuQHMatLufsdiBb4xJdWVQehXVYix
JRci0ycq/omEsVXGMk1iMUinYjU+6L/Mey0NPuajBSYUAiA9C0LzStpW+OEwEuggxHrhkz4M8gxi
Rxl9UseqVFIdZXSWOjxLJ3bN0a+waJbnltUlYmu/8LNtbI1U/TJ9UsQylWIqvavC5+7Ekmf6pAsf
qsjXvnWPVQuuaiaHYFOwWfCK/oR+pOA6egmBvmj/ED8QYG3JfKiCWIoxHyzy045FNgRVwFFzEIIw
jBuhrMtAVmiXw4twlvYLFYAkenmQDsnY8CQ1MwOMAGALanP6ep6PgiKoQgwgFUkJHWYoQkHYr2Sd
DZkjTUwdIDAX1OQadJqMqueAh4VLTvhaLK2ibtfd6/z9LgSuimifPDMUNpjRJR8jzBBALNoXs1xy
QEl8Hm/pRiE/BgYBBh7th/tpf7vnCLHuY4gWpvzjRLEhW6cMUDzZWLL20Rh/dBhs7JKGgWAWVKEJ
2a4QBaDMKqyc3lFfv2Cy9yG71GyMCeTyckGn+FOSR4ze7PG+J2C7o4Bt0Vfh3EuDS2abpsVgSMER
/xpEHjUN/9PtTxCe2cQdfRQSisUKsDROiA/UMe+OhyMFXFMGWMkGEPhO9WxEqBz4sGSIBKphFUQc
vy7zYQcOnfCaRfgMgYvyoSXFbj+er5yLRHtaW8NdGGIfOHnA/FDtMgnXskIKMpNkYDxwFkGtjCEy
8XCN/nWbo05PxyLebWJRTYxgmFqwjIvKxm+vS9Ivk6bxq/HdcsiWRSxfkcvTCK6SJ1kwVUyENIOP
QDtRIb1WaWAc4efLWAzeKnuqaLppKxCT9gzjUFD9Kw3X+Ie63K/XeZTCTGzaIMzVLn8IJUkELy5i
wKS4u3ecrCXCyegdsiSYckYakjTO6ZqPMpTXEO+UoUgc5o8F07KIDUi2b7W9W4dj4w2IKLD2RB2g
pRBs4Lh4DUK6RzIVUXBp4XV6senHZdZlyJ+hDL1/nhOcEY3XqmqI+B3eJDisMjYK+mU8+FnaadZS
W9N4gkIrwwtpGMwaTpuEtNYCeG1amkoGRh0G4VvrGczn/9Rs8+fL8vGrSPfcOVFuiqid957Vy30S
oTgS+pD8gmINnNQ8VpDa2KDwNEN8GRtjP48kxw8zXNHL/SYH1/uY1cFOZ+NEGfwlzVRMU1MlRvfo
sPiGv6xh3sYqAGxN19fxMhvzARlC0r7MsML2ZOWl1pfxJOCOFhzgnRUuhuFse99aeGQYgnXlgZVp
hM4jZKZgz/AOTbDfK6YDDvO4v8yUsJHTxQwLuKZa1ML31uDVQqlTDoJcC/UmDlkY9eZcqb/QqUN8
wk0+5TurIkJQuGuVhMrGmIKHO571Xg+LQNgMmxN5uKyrWL7ttJxcLDWHcx1MM/dTu8hOdhC5Np0r
BfP9MSHyY/rBV0idrqInh9ZZ8OisD8JA7MVkzW0KRBtqE6M4CUq/DC298iEyhPIzHFKYqTFpgssz
MgsLlCnEsyk9zDPLkDcoPSfh9KJXbTWK0TKeQvepTlyARiEJn3ZhwZSIOC2gDpbs/bG0X9UcvzUg
A4HAVZgRMg3G+iDay4HzCEJfhfnMwQLmuqjQi3yN2hVoY6aGLbjUr6D9d7gFU4duc2eGagjp4pBr
mSPjMdTkxiDxxQljtkKmjQYrmM2Inag5QMayqqOjG0Ytlaj3QrAPhxCZsNtQUphFxOZJ1w6xoilq
TBXn+I1+C6g2hhzz/HqB6r3bGD9hh8FXs80mAF9wQNO0cPpzizTaBDElbbrSNuKCFb+0YbImqEbF
/z11m+M/ncDdevm0hmx6vcZq3CbwW+yUp923CwTd5pOf1LgTJ0DhHq2Ca4I2ZK2WRrpgqCk204Rv
ZMLpRyyKUouV+ZIQaZ2b6G0WLnjVJO4VYnv4dOmdWZehCeIlL6AvEdLfrvM+aS+iTq9jKxWaoMzB
IOcu5/QOGmsj4RGw9tYiVL3t3iEyACw/JwtGOjdhi9YYHDK5gbGwYxQhJzQf7lDHC/l8YUPssbwd
Oh6WM3lhb9qZsrjuiWwfXknBroTDYpjm1j12tFEzzfcb7MsxC1y2cFh/YaziTa8BUA/HHTIMAB5/
T+zLCsXGlToDv2gegZjWaWcYLvnzg/95FlBmpCJYe0RyjGErHxjA+wRMir9S1wvdz79LV1FXfcj7
JtoHxDv/bmL42tm8Y/Q9ZOH0AXt2v74cAAXYLoXBQYSjQsKpHSA8jRHRGxI4qG8iz5IXEYJsqGKy
YSWR4VZgsrogmavYHQenKoVTqcip3rVPYMnUIMykj1Ew+dDzWb2Ok06LaQSjgWXLQaDeMkoxRtdx
IhZlRN22sadeiU1BNpRdRGCtdMxy0q7hAfuXUrYFrtUUMTlDpK+NJGjOvy2IDSUwUhFTA6sNQbZt
D9Wrwl7akOaUxwg4gQkBdrbwOHUoGVpLahPmUbPT8YjivEaDuUCFf2CgNlBl+kvhZT3BYidXzeZn
2PZq27hDXqkdriucq4hRS0i2fx+/jubfD/MV2uEFFaBWWjvNE8Kmhsg9IUagDbkwTx6go63Y2Z0k
i6Jh6oW5f7Qxc0A0JpJdjZ2b0G2EMBuPwYUXuQhMrOtrhMyKVmWnqyDPmvDuSjNmGGdbUCOFTGFN
2cSsOTyUYX3h1z2DQP6E2arjkbCapqwGb5hQZQFKTY2vLmu9Ypr0YZouZj4nDMBKMADrmNVER7t+
ngD+4bTcrzsYUwlzLeQr7j1xsiClsegw3oIRifQCdVRrmQX29wuWUOBCMKpG//N3wSWohrWJ6pGv
4aPGKtOcuV55ysHAJMsYUeeR6VZAaUsd8HJbC9GjCji5jL1gK7xcUmAGGhFzqILcjFmVfkbdSoZ/
zFcKCAmcUkYWhFwGmKqYMxTUq0qYuBO2J6Itr387xV/c5BkeLWwrprfZk3U3xHSiZLrVRRWa+L0d
LQGWILU2UpgEImqfm3dS9LGdrChF2FbZRq7V/ThZHCZWAKaL4A8XsY24lbS/iIUp91NmGRUTxGYH
xnxabQ917folK8H6bGLW58owsg2ihmlMGlHee1PF1NCDFwfX8P16vKW9uWhoAWjdtI1/nUhLfggu
nQpVdiACgOS+f5zl6E8Xl/478xRGr5Lsn/ijZNRAGQsqYYUszk3VJgk5QhmbUEVZEO6VCAJNwqQ0
qEN/UNSQAvcoFZGzaY0k6LYiwoZmISdYLSMa9TbbFleRKhvOUV5tgp5jebx0QxApuToMEER9o0a4
p9jxDDIq+UJQUiRIKfZerROeKzkQXlJGzJSxSyHXHMAYBM5iWpEVXoNCh/b/DzRgP4TDNDysWjqX
KO4pIviscIwhZukdljvO+saFEKIVL+iQjRxyw9HzJgqeaX8cqXQX6BHt0Yk6TJJZys4NTqclkRDp
og1YgutuRg9MxPIhH6kRhBq3ayTMLDJtulhkhlTHx3KgFPybfob7TQhxN43fEKvFMhYyrnaVwtIr
SrLTBrFVyzC5tWvSvnEXk4OXiV5fJMSmjEWTVlwt+Acs8OKl30PUcAec8eVTCFSoSOAkCEYJUZe+
iuxhxUsmWJiRCHUs2p22hFYWgnC8KI9CKNwYLpqzPkwVApxXcKC7MCrUsiJdU5Z8Xe6XvWTSFzGl
nrB9LBaTMWAEubEyFeiIp+v9nA09qyq2oWyMVJFfJgjZVTRvWCUvdiSwhY3xZ2t9g+7qrrDlSaCq
VWDclk/tqIEASjQz9lLlDwJoPWqVhEO6vKI39rGDsrtrqoyG2GWIyL1EHkTg/KKNxSdJ7vEopYnp
SDKQO/XAwdWDpeoUhGyusuhS40SxIWGqeEDmhcI1oY2FBGM0BYcuzOZ4cqO6mLLaQNnjUdha28Ss
jzAPloZnIIPQ0wB2uXS2TP7X+WOCaBscVLicPiKuk7lZ6em7WGjYGL0m+sKNaOFEdUwHWvVjJa0f
wCVGGpqmTYe9gsgk+hgG+Ek6Z6hZ3Ewre1e4FKDhIAahiTxLdkOx0igGEwHWIg5c0SjlSwWHOKaA
ubfqCVRI2rdlTNTdxpf5dAC4HyMK0tqN+RitG/wK/HJ6m2xOiwZR33CslhK4JGrerxk4ayY2KhH4
zvGwsLMuFnxY2VxCSpGF+Nktc2mJfRGyqFwppTomQ0iMG1ziE5GQEAatm7iiS69JjH7IEWfdbrBY
jLckIvaQpVLGtGnK0d7qYZcxuyxqx0uWbBuxZM3Xy6s1xkwgSi4n4BUgPpmAPSFHOxjIDMMQM6tV
NN0sWovC1Tex5NRKPEhMzciWBSFYku1+ORr5gHP3hOh6GcZim7XnkncgWUSEucqJCJIUGQnjr82P
hTsF2d7G+dIEB7TVKCjCIvbt6vlfAZQKwwHLq2AHNzEuxsuxLw+tQJ2QOwgtV5MepQwLjt6msEsm
k8lSWl7VbajfEaiyDEOJDhZXk+F/gJqCaC8FI9PEFA34JjMtZn/CXUWT049xklw8qK1jgu20vC4L
qT6TNHfwpcLFFzFRss0azpfM1XFLMlA+Yri89ooegmBtJAghuEPcwmM1S+PL1YdBhO13TbSqh+sP
4bf7CF9ISVEtYoW0KE8n9b5yD9obEIQFWVYfyjugsvvK81NlEGhNWHVS9VM0xfQ9a/gKpnmTr/m5
7r5enZAS9UqtulgcxPBd2IImVDN00YKbd+0g5Aqk6cbD3G/NKxlIfhiUTPhPSChSaGfoeHHD4Bcz
fgqOB/gc37VEOB/HT7EeuH9cam3HnW9SUWjdqA3GYLZOpmbczhSbnW6zqqbLVY74C8KpJcrMA0IG
NJHHrO/DsrAMvGR7pr5qIuUC48d5ulwhxDRd9yPAc+KJ/j//8fOfrVZLq6QiWjG7p1zfk9nytRcV
DdLSuAmsc8fxsbdvy+ULhhAEVqmj1g151VtYpYo5Y2FpWzZQyIvVvZK0gaejNikOnwTrDcR1HN8C
8blJsDQss5wN20k1CHXM7k0WrU2nXM2ayjijJIVlZzQaNjA7AEH+9Q3b4oXLqTekMawpLjhgqoow
UZC0z5hxvDoX/S4TmeEX4mJSwo0UW4IX25IrjYpGag93UOegi5BXwAt0Av0vfxIYrumjCe+Ilw/q
Sv/TSQrbxWWMUbuCtGujfSmL+BErAeeYbhgJBiaiNIozPoUITBEzNo3Ldp1uV2tp3ZZd6JwKgmgV
FTIM7i1hxHCEa82ptjJaXoHIwYjC/j59zyWsmlgV6fMVOIInX9SxlNj1Q8tI03WHOk9gkqaJln+Y
St7dYf4qSMEhFtSL1ItvS1+yiLwza1Kum2AcxSpJkC+v78v9qHX4d5gPT6YbyQK4eoEQmtgFUXSQ
SuYy1bqD4EOissYZqkzNpgVj99AHgULoUytZgxeoHUnNhza6haPDMLCEXjnrKo3ut3LIvAonrTJk
VwL9oTkCsNQR5hglMVUrh21FCzEcZJgScZmcF3WFMUb73Wd6GTuDrOWRhlSFYOVgMeiLsvLlALB3
sBC0OLEDCRM6uXLt3OvfjS+SYFFapvab8SGJ8bScPgHuwbRgLZfz+wgrpWEFKgeIwVazmCNYf0QN
rof5Cg6EhMlaubZ3f0tuY5T5xEEzL9flmBLhuJ2+D5+4FyEKKzdswXxSMmjIXnjPwe+0c4QUHJrY
Gca4YhlNwnuqXKOyWY3jPdbCBppwz0ZTIav94fD3ERC5/lVodCC+qgJ6KkUASLqqNjy3abbyZAeu
kU+isf8HLIO9TAKXV+xOWT8W8jdWOpEaz3B4E1uEzGc+Eut+uqVfRBM1W8Z7D9pB2n+B0b4e5CXt
QVYOsZ9RNJ99YgI54wv8lU9VlpGH8sX1NOtGxFyoHOCM2Y3XG6aPXKvEBYq0LsIkLIKcrANqtZMR
IEAAkFvaLnzD2NYbzJOTxJnyD86aRvzdvmvL5ohzEcYDYEsIApkdTK1IB6yNAIKPGvgNe45BlaQk
NYs2vLzKtcE7WIRsswTRBLs/b7anwGsrN//jQQGmkpGVG6hiPikcFrVVdSc3lveyLJtUXhfjK60y
qOv/ZTxoJXEVSM8zgnfAiGb0myDFyfdmcH4eycWc6AWa+sfL5+48XfbUlQukI5woKinoJv6/KLJN
eAfjhJfpTS9wFdmrjjK7WVH4rAqJlx4XqxOhvxYMcuFeq5guNw6PUZasdgPRUAhbKo1zReTuWapq
EZHUppdg+jSUqRMynnCuIqTzNmpmEA1oe/cmcEwRuyFNd192GDrN2RVVEZN7JB4oUQ0AV9/Gy+GK
MU8ju8THLhg18rlWJs/kJn3Aekzs4LQr6eYNggSzYJqAzsl+3k/HY57Ch5A2enZsUBmHy/gtER+u
HNrwg6DHkSpwZSjsBHYtYmJurYlxSr1wF23sCLgF61BYGyOC/i/ZwF3Iq40IOl65ISrM9uFU5PUe
bM00PAjEM8RYIwWsXjnQ44eb8FJi/hB+r6pjDFSUhXDalUrtua1wwUG0T5gMVUT6pyDQ6bhdeEND
YGh60aZ9AqqtyiiPqoveeCn4bP3KKucJ5XGvfRIKaBPFXd+n6ZYuQ67cECjGT72IjU97YGa+x3t6
3rARSLGLMXnoSACBCYzepO32BxtX9EuLcCGL5HCH/obpKyh18CTHmyR2KsYnID5Lk7Xnw0YFQi1j
Z3m8DSi2wXY+Yx8It+MfnRQin3648Ymi3LuW4+LNqph9nIK2rxwWExOQKwYkAZu1Aao+pnm1R/++
gNLffxFI38tIRJWkDXydp287ixotvKOKXVnTd6rtJJbvQhFf8AHLt8WYLDk7dQMN/SraXirqalgL
gBnugqxpt/jBGJAVtG9UaILLM9LcMHMfovmll6lit2qPcz/BSSQ/sYmab171aeU75UIdVRPxoMmO
IImu7drxuM+9bTnERPhWe0RYt49FvtbPlbEb+5iF8Pf/5z5pr2g8zR9jPmKhaS9qGOk9/ERh7j9N
AM/4+VM2nFO2Dwu52mh4NhMbPln7JV2vBAzcstEj7HT+++t52mPLjq2xTq/UxQay+JXM8L9UioLW
qMKRuM1qDRzE+D39eRMO1m5E+w8/4QNe2sj5k1At9INlbNbLhhQWfT3E7h5gVWnMtYX+S3dN0DKF
fARW1C/Ac9JSbXiBVW6ojr5ANoimHvzEcHaFtlHZpcDOl+UMOcRUcTztZTUmKDtZSO+FzwTCpGB2
Po3+iE3BqUs/5AnixOnd8RE1zZYRNfoTNuWnKn3Zi7+p+2XGhrTjXZpBrq+mD1nNyAAwkw1soUmt
XvbWojgtEO47gLRbdu8zBP7TCTrVRjuoVnXD2lA2jRzJdXi7Zu9t/fuLbbujvkCYADfl2rqqKtpu
SOgIclluVRex/KVFwgaEH+hxWlwCE3cClTV4o8L5VHBPlRuVqv9X42mCcAxVwl9zDVQVqzpA6Md1
nRbEol2OFK4/XbSiWHMP4sasqocOoGvuFAyGdfMYE4o15dFdOghRuDgskkp/XK0aHToT8aKe0OU4
7z93MH/1bRSKCCrWxoGw7sHzb6waqOoV3oTii7x/aqmE4a8bDM6VeoirOtoVYXL9gM9y3b/DTFOI
U8klw1URBVISXr4S3qmNVUUYfofNQDTOVvakl+miaKIkVDASB6STK4RUrLgH+wvti8HVHO5oHJox
IGTTZYiwYodjkI8M/zgLQVqtUBEqZzPT2civvu7mG8BICaKoiD2ZiVG6Rpg//dd/GOvuZ5Ajwn3z
hueWySeAW7NFRthcj9WEGUGpGF4Im6WANXpUkEUMe9AyKVegpYZor7wB38GDaq1iO2MA99jQmHBW
hv2l/4MZpgFFly8LRJzOx/vbfMopAxUFvQH6+cvpr5cFswrpPQzR9zPc+20+Hn+ZToe/TTiFnBoz
t/BxtE/NhPa8yQMaXnMjls1qe9g/a3pl1gcEsrTqfKBeO2n/428/C7QQrUm5TGdNqjjlxltlp/Er
QN9L1cSVKmO1cR/TbYTqNf2/fofSb7EbtmLV1ljF21jkNsuFZiOuFvhjpPLPHERJxRrQMZ/HQDr1
4gjCsZw4MJF2AgXrhRVMYa5P8bIuciIZtgeF3NOcxJs1+TgPfVAyo6742Xk543+zAceF8PTOOJ4c
q5vkgrvawewrTHlwAJv79Z3WtiCBkiGIC9kUDy7U+JZ+t8vXGSqQqSpBpuTaTZcy6zXoovn8oD7y
ed65fO9kBUxaEtAWG7ckA6o1Czq0RrdhDHgKqw1+NaZjgpubT345bV0fjlCWkjbv6OADO7gHK8Q1
QKdjFSRw9BVnEqVsj9oNVBH2eIOhaZrFjzCa6DZKhGJDYuFS/FtazS0u3FzlT8g6KN2uEJfn6myQ
LOnZ6rTBjC+vo+9qYHGgJeYq7M3zA0M6EFkNnCUgFag0gkiRwGxt+LR9hGQCA+6KIBaA6i3Er2o3
3ZuWBmFkeqz80nJDWu2mwJije18geOENq1SMbzsU/OtT0iz3K44VSuoQ2hETToW/L+kxjBLdIvkY
n9VBsQCnGmsQv2FNmXBs9rTec8mLaBO42bJf/8IMAO+ByiG9vcDg00mLmVl7rb9nLrny66LuqmJi
G4uB6CZulxHm6SXMeXq3IqSkckUB21hRrcR180jSAK6MQvEwnWZJEComcry3E9D2drKsGKPUrvRv
zSjLSfBSajcaxKzjx4+FzvfyqbWbM3PQbg6lBKWABbLxm2WDVHI/IqznX8VaTsZ0srxHiUJjIuf6
M1WzKqU2LXVO5JnlWCAwbTeVIZDdsA77QGrgBrlQbdC8HMfTF8Fvi+KevyLuzmW5LftlQ/+y4qCV
zQq6f7+cPzGFo6/bqDrQIII7xDs6MI68Ao0lIaP9BQSyBJF1JYrR/49iDE/FvG+3DtIbVsU7u1sJ
fnPHbHbQRoq1+xJzGLfGEfKH9KgMMAbir138UYWHHGJxHOIanypynhZY/RJMXqWiETPL7DvvQuS6
d6syCtRvS7XRSdjdTxA1248nO5YD/ysiW40nEzEEYYOiRwj2qMAtrC1c0nIGav6K00K0y4/xR+Ho
K54wHevg9F6MB0wkuPKLBQcvHj0S3DDxsVVbxHrweBQ55rILxBPt8+BPvU2YdLE2PE4qepnL7Zrt
ZVVtFHzECF60m6XPqyYKrGHICGfS4cgfCqwIhMBGmoDQrbrKi8f/8befbe355WZgugX2XsXFWZfo
7v8av46/UKgWAyD4X4VQjQo5fVuoJtPzVRV97MbvV5tZprqjV6j2OY/CXI6Kn9TH2sz2TGyb+nQ3
hZDaWL5Ev782/8jMhK4N4bYYUBmH1sCvaAXbXw3PSNLnNn9Ib8nTLjSVko2z2P30yy/bnrEMJxnU
GQErKSPejeZF7HJi5oU3na3/JkhA3lvnbfC3BRpjqKRmPr3CmCuxMIc4eZXwsrVWANwwX0H0wZDK
5QDzsrQZv7wJ22Lw7aw6nYkmMxgq7UPS+6kwb9Lk7ABhRwzyA16xMc9IpLC/Xl39FsJJILyv2KWt
hlUneB9GAt0wB2FT69ldBo+dOuUsLNX0XTs4QYB6p5/zQ2CkPpZroEgNNFLoM6K0eNNi534RtlcP
MUmzTqXy9ANYK9ZsFwK7XWjeDX7+IYMJGOWJN1UVRQNw27E16Xx0hZwoZH2LzL1zHp2dwCyPn1Es
X4v9BCaWhJhJ0IgpkCgnKDTxB0ai0Bnvcx/63/5F/39xwmxjOcuHtPoTKXV/MZiedY0jIPJQ/AX4
n5L8q6oYba5I6n2eLuNl/45jcafv+inFyL7qGyG7noFzq+o6ll9fW3wmS4R2n1k4p8+aPpbPRGiI
nbWSc2lDDjHjBQQRxPxnelEyIzcpsqiywGjFiFkQNNpR1MigmVXdRYsjMj4MzNulKLt05BXuWxVX
HV+ms+SZVrFcz9tF+ymmpdcEvXAcNTzJ1bmpAh+wpAr8o3nRd23puihXQCKkJ4WzNmGWpvYjnV/h
JbBpR6CwOlSPXUJggbBIy6sylnjCvJUTxrAamIDwfu+32znnlxVFzKoXygJqYX9dzJRAbQbj5LXJ
tdOK9ja+CIZuEfO4l/OoLW+AdJ7kwgsGsgDeTtt6eWrSR7YIgxIqCGewITeqGDooI3X0qK8WjuW/
y+HuVvnFNiZ4HcUoQdhWsXw/Gb4kQQh93Yxa3zJKRbHYFittWJXX7EbbA2qaA39flg9JkpQruP4h
OgQIvEMxwkqsVsYEnjulVakbnWaGjcUFsXUM0XfO7qmqm9ic27RaLtMZ3qoKsX2MX7IOegrkpQI4
37r0pLyVGzqOioXvla0mEsiUXQ6bIUIbAiMISV2qa+m6aLnVxVSgCDVsFTPAMV3eSbwmcFodlk70
tsFWs8SrtiUBmuv+cr3NN3QWRUOCgT4z55qaQqePF1hKX0oeD0c1cTwcd69QPjifYVLgWZZHUevI
VkqEbPVkAWgddxqtQ2AkkrXiMiHRNqTrOF9oi1x7GcJhVzWctQmSJSJA55zN2kRn47lrgwCJIHw4
nnhJf3sxIg56B6CbuQsqZwaaLgbPb+xWpJVN9mojR7p2FOoKC3L3Zq6MYJ40UbzwuF+bq1fz9IH1
mRZ04326QDjIFJlqsiVWk4MUiqFWgQVb9dEST0HwPI4B86YKfuFr1ex0KYysprvVKtYyDIGwoeJu
NhWbJj9WvFmx8H7CehOs1sXoqjRyjqpYoy6qrZ7ZY9MtaN5J76xlAEJ+CLbZjxmpdNVLTBbM6Sqs
1QXACtYvWJ8S2Ou6M9Gd9PFYZy7a5nVkZ/rCpE5rKoJn/VV1fEdE7njfdXpDrFUXdcfARLWt8Ezi
MON2WLc9WtB1GCqjMugrIXqLvUhVW4QoLGUO9kKVa+AWrmlsbusErturNjSEV2bYJOQzxe9UxCMl
jvLkQg1spWui01f5v9D8++3PF/FGGdYAq5HwMR5Zk+MSrIeOoZBu4c0mfTbW6cgQOagbDoP1mQem
wmvbI4ZCbVgh7lHppz6kIHY8C7EczkrAg6YF3+Jmq/XS68XxWbZcVSdcFWMr770HYdocM7Bj+jiq
gZwxBE4pkwxps8Y8RtrfISh+P8wAtEWu7XWHCTWoAxN2xRbz0ULcjoGfkkq2iDTbGIQJowAtmDGw
8WVKd/wqxmcs9/q4yh6nMwntpoq16cdXylIkA4Kpvc6Cb0m7u4pR0e0jcexZH50cB/sAcyOcs2RI
UluqO1bxnl6VYRmxcQsbSDyNj6EqJjKZD+WUD2jX8Xw+zmDZf5v3AkXw3nOfN4OmBSR2OZRKVkMR
kwlbDiiYIipKYg+L2ko1oSiMVL9/BEjONpzOjtPpjfzfPbVYCuqWAT31zh6hEI0zkyD7aSHCTS3T
pyAhihiQkb0zgr7QsnWaTkiFJFYFKV+HaiJBbb6sX5vQZ0GjNpuegeBLocbktKQzc/QSitk8JdbG
eRRmPzBGG/ZCvw2ZH12sP9y0nmG9nFbXLEl1/BRYv42ZMqaZyTq2hiUyuoPhx7GwqvgCaOsnHRC6
No4vhEk5TsLoTCLuN0DFYEhzMsAxtg9H3wvao6flb/S/AjSX8XiVlAWjdt9hQr/InXwlLFGGcsow
jHYg7ojngpOGBGOMIZkBKCwHG4bcBwE9TIe/aHr5k9TnRQQzxNrt90FbgQxWqHfEhB0OdtfKsIyF
LAWbp4tamGBIoNyAVI8153bZICFZ0HXMG7StrFYyCVtixmWLBTUlF0Om+8pk/QiRPz+mmtQL9xEw
mc+C/GQ97V6O98sVg9Bfpyy6hKr4Xl38MbCCckZQE8PIgEoFM+GEDemdr8tRNhsUQ4plNlVG5MJs
ev3Y19tofDwlCGFPcxAzaFxFs5tfbbmRtM4hxwkV2zIrnyURTIOOsWvxsDvkmaqNcXhYu0ASiJqq
RdboQu+65A7xGRr4xo8PRE+0sk4gkz6m8XEm8UyMSkNlHDKKbOQwiD4UaqqpOI8JrMXQcWqCkuc2
LiZ27cD2jF/JdAD04nZr450DU/lJg2nLeYgh34QA5eYBseQGcCwzzF7FFIbNYOFKc+A9me6AzHA4
4jKO9MOGAqyZS7g+L3fhIQwbYQIFymJf5iMCl8vanUF4YSCxM6kDoz9eUKEJPlyx8k0tTqB+sAlg
fgipxUhH9193xglBRCZTDACJStsrnQxcFizVge5RUMvDfoCA3b7NB5gcBY1IiHdIhaJJRsNf6IZY
suzxF7bg+NKW21iIW9yysFgZSzY5W53vz/d7Zw7MgOrh/0sdmL/ZSDMrFqECuWD5X2xqHxLrGiuP
8iNosAhr+r22YI22xhwlnoTKp2x7fNFFB7P801xNa/NBRPine45ANec5GSr8TC9UtGV/RLjeIpZH
eVw3Q/E8QVusvfnn7sAMn8GWyj0AymfkQ9fFCkoef5qGOgk3odK9F9gIncWFKRguDMY3qip1D1cY
oyZwaB8dGR1l+sxKrD/bxjbi8f7bchHAVVXFbE4wsI19HfTIZ0tHSYEwBwSR1gD4LxrIzQa8FIO6
ZmHOhzieYEL0YQKDJ79tWiVjQCqlnnbjv6evuYtZo5ItTkUhSXACMsC9WYoo88OwOYiXxl1VlVKx
uQLOj3TV2JsIQ3HvFnFC9d9uRfjwD2SiIK7jZT5MV2OzCCElb3nBezcmvnfZ67el1Cf+I4YdxBJl
dP9YBzd7IdITaAfvzHLOwySoJOiceRvnU3pl3nLd+256Wo0WkcbH0O7qsLe3scSIsROzlkVvEmmb
ttSHvajFejm9hn6B0wL4AW/COqw72kOwme28aFftmgyS07GK6LHMRU+vI/yvISIE/ugBsbmTJfq0
YBXDkjALJrMY9GkTvRNPQy9Y2PSP++VLdhelsAt3LcmJpXS1Q4hQ0CckfCR8LWR2OQr64LJ1RiTS
wMg3UTSz+DczBrlkFbMiaiXZe9uB9PkTDWb6y+kvf87kLcIYQWUHTX+xYRsMFGQSThUTHpAWbVKC
835baNVsJL+MZT4eqy/MI5E7DOUi4/4memY1h89F8TmsgpVofgmhQbazrvFwCPbVp7Oxona52AWb
voBZ/eh4TgfQYH11IQy7hjxt03rBVNhACb6gEnjSAo3q/sEpOGSTkeVK/wUBCBwcCUauFFxpGXw/
w7QLoWI25GCimQRtu0JIcEa4k1lK8taxFBovY+YXjC51GKIXQpWsGqFzVXKeJC8wiUMgScbDVPk5
RCoi5lxJxJCMyq2p52VZcDTY1/F4l2JPDVtSYYN7ly2kESKkLM3A6kJnmxzBst9Mpp7BUdfYypbJ
dAkSihVaQBeh9iJyQ8tUyQohWG2lHFusWhZ5pr4mnhSytXIuL4QCO58M4Bk6n88157fFRMcZ6ScV
eyHu7MMztXYQjUf3Y6iTgmXrjwkpqSZ4XV5oJGyliY0dm1n2jFGxQCR9zGF6NtQv6KAyXL9bO3YI
C5vuk6NNqtgiWwyaQvBV2thwhJxKqgShOcRg8jdc5Ym0qWwl1FHVAimT2Uw2cMVpuXRunU5JPOFq
s5dlJed+mctyG20ThrBKtNTisfAGVxPYgTm0qDefzCXbvPjyuiERw4schWq4+EMLL7xatmQG8n4B
OK18QoXX1NXOSra1G4s2HSEjUAqakZWVdGCs+bKBKawTQ3aQs7gVnxzh7Yg5mSlysxmEyDJJhCKm
XEzGQurSolsK56LYQZ6CphbqelhtJKuGMtBYJnA8n67zYdqgqfro9Kb5B1JrbAIPqIp2eHxIGvzn
p/Dk5EYVS7E+r0S5NbEtomXa7QUDpQsDOqv6hfP9FvK5oJmjA0CZAX/JmBrtKqnHbed8IwnJFxUO
fakCWGLwR7YAURKls+3UhEZJ6T1ok4PiBH0hZhqHKRrLZQtVkHKshy1aU9hf8aNF/0IpIVPEyJFN
JA0Mfthh+YABmLbkRsgCq3RN53H+kPQbmxzSAUt2/fZAq+AeMPeXtYNKEkwoxG7qWGjF1ahTuBrn
U+Vsgq4UOiXMStTZs1xmKMBBzhbWK8JSWD6H5hsAdlK9qm+a2AMGHpnjRk3d/Xtf5xeUnr7c9WM6
zNDZe5FcaS+uwHdtNxeDpocGq4proCqtgSKLCiE6zkz1Y/TddchRZTZVYgqSkNVmVy7P/miZyeZd
9JzM25+OKIcEg6Re+54GSBPt3tmq/P2XNzlyUBV9rI6UKoScmt5SpNnHRp5tebpeeLp6W4NFBrCL
ZEMbrwq5QNJlPJ+n08GXBqSz7XRpQ+ywj0RQSRXxVWial+vKbpfkzVl9bG42n71jBPuZlWJ8T69R
h8Ws5EviZFObnbMWkRCmUJtMmIhDKsh0PqG2dl5uUAaIifLM4E7FMobMTlv7AEJslQ/14zaMZKLR
3QkWGreragxgRBq7SLJ/pJJipK2GmLbKeV9Z9zoa8Vy1AY1XY8JfcqO+FJtaxurqXREhXRfppxmg
JeSmuG5Vo9UIXYPCGzBbRF9irziIW1j3krMC61iBqG30BHCmfCckGwbPoafsbiwzcp0tMGQVFpSq
rD0k2I/M/maNaevaY4SFAd6eDmJtNFPKLf7pVzrQjJyWii1UUa1SOaWp23gfLzA6m6YhjdfbB1hU
e5wafb3N+6tUo4LZwq6MIUmvp3AgXr0BixEyoR3LDvPiJ5uah3b110k/LNhpSliniWWHbxhaxXhh
7lS9CsG3lfF+8X8l/C6DxfchmPlEMCAbLrOKZaXd6X///XfBf6QVuhjK+odmzsvnfHpd8luow/fs
bSP8hsEF+t54FhwvrvI4Q9+oOOtlOR6E32e40KikzQpY8kHPf8EqrtPbfXyTtlJHU+GAoMSRBYUF
yvVZrFSACikYaPEBw2ChWik5f5gW8rUGNR7JkJNmXPySuE9T5hV4WdtFWvgh8B5V3KfRBQo2oIXR
23olCReqYIiTaGx3bms7wytWTnmhINSZDWFxrQHIjvGvQALtA/c6GwtVFNXYfJm+WUik+XaErjBI
JKbGwfl+YTspr/8/4aq0GCD9pNeo2BzIjsEWjx9LwndQ3Heog2yz+2kHYwbxZLibWwK7T/FGwDoY
Tm3mokLvs1s2rYUVr9yuA0hjG0Kl63CLpZcpm9h8Rr8LcV6u4qmUOkA8opD9gZ1nfH2FATAskFkK
22IDCwvfqIefQnfU/4QqZLf2JLxe6V+P3j9KOMYwFminCq+7Wd2TA5t6Pc7ayxI2pKrY/Mnru3ZG
v12Fz/wETAYg4jeQwm5T3LvAwADcp5my4XZ9hJ496rQVSG6IMYIvhH8BH/xqhovbl8GCceF5/Jo8
eKtFlbbdMvxcljEW0HL9Mn/fpWdo+mC2/dBUCR/AKtfeEa0gfF6EckSteeZkhmMID9LEyGkL00jH
6oIhqUb32vuQuG01hrQLD8Qap8R+NsULmkIiMZvYIKTLOmQPI5CW8wdMQHjRSvEDizxvtwX/i0HC
FkrmFS9OtRf+eEQsqDCTknc4lk44pJKlwQ0g+XYXUWwO4RjgNRGZrJET6EJ4RPEgUh20P/ED7rVT
JZ2piGlH5Glq09jfMk9XtNGRrdCJqK3oC5xorw03TT8AlXo1U5zt/wNlZF+P03eELU6bGC4qOATA
N6Z7wJZHUc2OsIi369Crbl3XJD5e+udd3+0QFpSsDrJfjveP07bzVLE5NusFxxccmjtJC5Wx8S7U
YLH1XkoV84I+5pPQmkQ/3rP5U5goMT2K43fT43E/Yd3IBSydg7AQG2TVIixfF70QhLmUbiM6pGa9
igGz3Xa/3jMFV60v2f2OXxeIDxyXUfAxXdsf7gmfSfk1hM/43B66YLpbANHTlCZs2RMrxoNt2atI
4g7FIaRIOuj1/YIj3DYeuIqNQvI0sY0i2sjxPQQqfsMDT1l4fcUmETPT4dv08nYEBYDrKgH0kQ0U
YZnQ8+ntN81kv2nB/9t4PL+Pvx2mHHgjAx8ta6cHPvcv+wupy/3H5xeQJoj3t0D2RtiW9+DAme8N
4+wRCjKzk5KBD7JBz5e3l93fz9PbbtJ6YDztzvP36ShMvWH4+QyaDi/0YzzDuIjPN70dqo4WZ36U
fCyGzz8IRW34FUe191OL3Qb282V/nDb9fh+dgaSp4xUymBC1E3FXSzbyBJukqnAnmQbKcog2Krr3
QOLQTsPLpA3WyxeIi52OAtwlny1dhECnsBt/IdDpifUrSHTC9XSxuQZvl/HTQPacbWpnG/WW7aqt
kUOxUiUURCEFAo6+F6H/7pbXV8xZSb2wis1ZQP5pLVs/cw7FBjCzXv3xpE9ihnWgRWARmhH+QyQk
NtG7akOeYpVYO5ogKw/2KrsuhniOXA1i0wFH+6zqTovFL+Aoel8z6Sd2zoQw5wefuzFKjpGGp+Ct
tNHFYKkJ0/rDLEU0kmokIZ5qY4DKZ72lGzhez740mwLFKljo46ePyNBGMVVaJxkUa+4tl8od42Uf
nQK0FmIYJ1zSM1lpg3wpaEnr1Eq2jsIQk7JfgY7SxzBH/ixJYT5CwMdLzodXyMgRrWpBetYu4Xfh
oRjKM4qJckjdrkA8ZSBfjIeEI6pxIqa1PnDRP1k/5yesvMgBCJdDE+VLfszjeDpo9jlLBLkarmQ7
WAG4mYY3p1/X3/OA4WDjAN6xxwcLZG13nzaaT7IOjk7kNoUWbu4AkAtiHp0ggPp1FkYYlAyMGAFk
KiNTggsilXg6meJjwUop+OgbNMZLVliCY9ekAQ8MJRvSem0f1GObz3dvl1kwIdm4wQfgcYObBEMQ
r7MgzvjcSOVcHHMnt/lowJiF6pjOmfsPw+KikkcrU4IVEvh8WN+t4gqQb8nxr8gabPIKhocqyxwI
c6FllnEA0mkc7e0zZxASlarnLsQOjpkMbtCpolPhbe2QyFqKj7loPCCC+2WHhY6VK2n0/ZKBk7CG
DRr85DD06R+yQBglH57pS0WotWacj9LEJ+pyf8BOfzyRcJ9FAmEB6i0MbtkPSVIqg38021EGOgkG
4ZARp0X4gBR0DJsHFRM5JC7b9A3YaoGMudrGoPYdl7xpDU25CbRcrwJ/tDHIGiMFtvA/Hw7nUziP
HrVw511M4GPL4et4mExtuNEd1E6ZYXo+dND3QhpjHky+jCW/Qkg3Y0yetcmG1WiFQZSMwjpRZBXw
5bzJ+Yyfz5ajIi07NOrTFXfaGljc7FbWqWJII8YDg6FkxtOAd3ydZWuJY40w2xhO+bxpXMQ8qsPi
Qj3U5QNzEYBtMpN5y9UwUTvBkEpxLAxNRqaXUX3waFdfpX0wo6Z3uUmgCBLpFxiNKr9YGZ3wwK0i
ge2HWIDhGRumYPUHhW8IcJO51y6qcBV8WhBIkLbm9tD1WjlRlJGqKjamzWsmM+0Sa8cvk+B0c5Cl
xrFsYG/elmX3MgvBvaLLing3+wzbWV9e5eE3JZ/lQ63q7bY4DvKs6aG1v6b/94KCbmMXeQG0hzPM
jIVK4uV193J/fZVGq5arZSxwIZQbmkvcnaZvG+wVPgyJIPPoSeAWj4v2AGXwsJJPJ0S2KVdXZ+dp
jvqQu/tZ05kkRDgUnc9CvY5fMdya5b6yrWLTYj/GK3iT37dZxkMX4/7r/Uyjby/Ll8nZg2Y6liD8
m/TEHm1WisTCQOTQmqONHC7j226TLCobhkJXw8B0/7RYmqCZYv9lurws40WIULCRPtyHfZDKm01k
7hgxEA184gL5SqAQNgaQadOsjqb/wetlmiQDh01zZ0+fFwPT9/Nx3s+34+dz0qCJRY/hfa7vQGvj
+QxKiyxpnLgn2QZtG/qtBqUG01LkzGECnXKoV5Ppg4k9Uuk1ls3XKlaEuZ9g3ORlejVZJ2Ogp+P3
NeYv6xBLxzpIUEH4G6rJ9D54GtUXqheqS/8cyy7y0n20b8bTcvr8gNG0dDMCDh6uxQox0R7vbLkP
VvvgGngnaDcZlE9TVJEuacaUcsVyoKVDbTUAjJq0bj/ho6W3xiszvbdiCpAwt0gzfUUwTNxK3YYJ
3sZ0N2LAamXN4ZHTS7Vt+FyDT5PurvqSACd94iNLIWyZeYSuZ4lsiIMro6spTm0Wf1/ux8MOcYig
Ry45DI1Ktwq2zQ7/i6knP5shirdvAK1vGCf9CDWjtRoL8Bt2YrA7DUg89diRSCKVmD5v28SKdv2S
1IVruvZOmSfpmiGsZe48J5uM+/22CMzbhMBslTgACD6pWakv6583ogh+1wLn0zmMOTpSJCtzmkrF
qL5QvSAPulCUmYq/g+FXEudyMzj+9FDGRNGHZriZSo2hKWyGfgQ6lGkJRqGbJsWGXZbvkzBZNmi6
mU/74z0DyEe85x+a+diGPUxpIUoWgdOKoHDeTuQmP2TnJd0W0F4SUv7uaXw4JwUEE9/dMObvQnf4
r4JeamKP8Lflm+Z4gy+0+wDiur0D7uD94wUSuq/AN1fQXFcBmE81DIQO6L7hXZJXV51JUh4uAhoJ
4Va0hXA7pl8m6IiARzZD3QwsBSyQ3tPgRSqCGBmKr+r0J6xYhLF8UfW7r5AiTc0ApG/7mLI2HY+4
1TTnN1UZlnSVgVTV9s378gajVLDFHZgDgPwgAiXAHGohG2XgtSrXUh9AK9BE00bJm6A6FXuPCtM7
ZqxZ1Wy5oRUYpLld1QgiSIXghiVjA+qctzIRpo36k8myo2OymVVmPQraraqiqmN0cx4PWLloLABo
AnetDEIbJVE+43+P62Eblr0ZIMVmcSEmfFnO0D4WPbh/f/Cu/34X8hjdsILOrA0BCMRdhlswt2MA
cfylC2doYxCXZPKZnLuVqtpC/6Ms7pt1e5c5QSko5qEIG7oqqzw3UD2vHWN6ypbVOkfjOJ6h+tdK
SbL2QIACCVlldHz1/01bf5JW64pAq9nZSssRgvFnEOn7CaZ5AZoWyZn0GdoyagngpjzTEefc0wKp
47iprUf2QxhumHlvTABBqresxJQ35zkbz+AMGJ6jsOw0Ha4/6c39DUdtWmIR7Mg2ZkfSNq3MPNFx
tWxIVVnTdptYQ1z29S094xu7Jxce28tJkMuNqwPRVji9tynnZv9JeO4+dv4HFysBR0b2SxHrJDRk
nLGl4vypSoE/+1jDpS2oNbc83oyDKei3NqZu+MMT9o1x7awvjzd7mL8KZNDHpLAZvAR+BK5usEM+
xu/H5Q2kiux/NlXUXDG8cDt6Krql5UTXcV2II1iLoJzdnBX99qy0a6sVhzcmTDOebsbWTIvZll0/
U3pF0QguUxWTKJeA0SFTBK0bWCIj9/jjNnrmD3iQBmuMTSfErLyiLgdhgw3iUIUsGGJtvOq6KGrh
aCqmdJ7xBkXR1HGbs3IhB7LZHyUSoydBDPXMawGbu2VOs+8kgQDW/DpP2QhG07Dq7Qp7PBpjb7SC
vdHGBAioFXB13u8AQ4P+jSAB6/Dum7AJAREjTY9VLrLTsN1AuV5ZtE9IFZANuV/gfvrgQ33VIAi6
IiY5TN+P8SwNeX3MVxPRonw8jVG7Cio6jo5eJOAwidY94eCrSbEgvcGMed9WMVfMZle0V67v+QDo
oR78IGeQN4MK+whMMbTenBGUwhxvMmKHmG4JTnZaTrsw7KA9CGsjyPGCuggcyICZZQfcuQJHwZjs
eWMPQsSYirM7zNqFGBAkr8j2Sgv4rljh9xs7uuwF1d7GECLoTizu6O3zPF0x5r8X7ArmDTMctafk
aYbuVsqvHNa/sApAZpZTfRAOrIqED3i9jfsvonnIiJc1facAlPHeWeiFmVRGiP7HfPpfsmnSdjEB
YwUJdv+Q1NNmk3FihQBdF294Q+uJP12y1ZzC9So0axuD+YJdl2G4/io4wG3MFyqKQZBuXUwgfiy/
z1rLgsdUFmpodyunvBR0ShdaPaVvxoJQoDFVDKZmJVwsb7Pq8Gr7Yu1QmcJs6sE05oGcA2PvhTP2
yh9xen7E5a0Cw80ETRPXouJljnS/Q9wFEYyOoooRlxEbz0WT+DAQX/jBbWhB94ZxI2PLbyXulsOe
+KJINEICGyWnLasupuyYx/zD1kXTlElTwYci8BfESEQZu+OiKgWzsgh+WEnEVQs8V7K+X0jL6798
GgletmnexT4LLSHn9NQWbZlE4Yo2qH6BDJjZDUlW1T04HxknvhrS/n/MosuwBLfHPUM+WF+Cbzn0
MZEZSfKYIn5uBAjO8xByfbslzX3BHWey3G2Y5bZaphK0TBnjuaISwutlkxZacLmUdoXCLUq9HoSb
qONxYSFGVKpYPmAaL8fPjVUGQxWLrsUCw+RtmQALkMofLpfxUwgStzGmcg4SF+sxESbolnKId4WD
noVh9Dub3XC9dDswqwVS6WN2LZDdfDpM3wVJ2sVe/00/PARL/7xc/gLFPP/Pfb4IaViWEmI1Rs+F
twWNXsZCMfYZMnpEeoSVy9zY/hlqxd+o5tqhDp3C/hk1l95e00QB5Hz4AVAi0HnIBh+qOCSeQQiF
kbd3oRFfPy8zqYBeqs4g8ULACzMTQn1MGabFDG0UZSe4e9Hgr+XiLawnWg8dBxZonX2EX7/O0/Hg
UmGCA1CnqzRWGcidqwCQDeZyiFkj60StvQXTwCBYX0WsmKgoBXePxTyZV0NOqw2jo7IWQhBDLEt3
MRUGZI/IqbmuaGJs6QQi/UMYJzOiBQtGaGbSP0BgyaPuVNesRt11KXNAiGZ0fezVIib/tuolFcVO
JMUljIulEKCK2KZU0parYYvmc+Hh/wLaA0pAvAVzmF8RgM/OEpXM9DaEcVEPQU+jjG/L2xupiMxO
GeoONuSoeBj1CiCkIZEIEqqMFmnVghsQSERXViLYTM8ZlNEwI72kZSVZmLS80qdjgwZXpnc0zJUL
rBYxi6Goun/5nrLxulju/3ZgM4Og2FKQtipahWfT2CKEO0WiommUxyiaqTyTBpBqhV/ExGRZFI7g
fH2gQEJ1zGsw2uuoDeBffJnY2nISTNborNXHkjEhQtqmq23geubTncrXbUX3pmhQvYqM2KlAF+zv
8aVHSI/EPRRIFo5arNNC3do/dTNGrrfxAjnVC018gMgaPJSkhioOAEU+MHsh9iNBsYGQDFfplwli
2MIlDqHR0fmYEBjrULYrGtJ8SqwPTQdSEiPo020viJa+jZk+8VU2JItZpp/pCIgIjzBbGIIMo1TI
3YfX2ifKFITSJF5g2PpBh5IzJsQY1lGv4rm4ZyTW+UNR0Cb0mfoQWM7YTSwisTOFasJNN2FivuHj
nAJhLhjOLfPW0VE1g/QQj2VVNO9sO4ElimHNpWpdZCIYb72KvdXN1PxrZ+D19um2c5ne9PdXsWiI
nw7kkzIxG3PHJCqkinhvioDKautQ0QErYFk0/us147c1PAXqRbmtuTYYseQ10VR0Ma9fR538bRls
+l/Rf8p4q2WRLjMzEdG36QTA1pB0DL0jQXQyZQGVTVaaF3WxoXxPRSEN196ei7OKMWcVS2UWZSu4
w6FOl6s3BdrsY2H9dGIyl6AYYoE7Y9XfLt5RFWq7O+4g8FrilaAShJJfAEdhNxYjEIlFVB3dMMS6
IcyFuEg+XsfXGaZA5BLwnYoG047QqErVL6/OfgeFoFXAGbjZVqXIBbB1AtrS1iRdplyktO7/2bhK
OlzVleEUB1U+4XFsqP/t2jLmA2jDTn8J/eHZ8Eq0BNfvj/UqZrrqWGUkW4lMDjolVR+DUPXRZ8H+
qKJayItU0h5YYEF9LQgyIKi1QSp9sfQCZSVGe/NAhRCR5I6Pr9yI1AgK1lEZqv8QMP7f58NhkkrL
GLfDDHf1LI0Jj6pivBF/hMzt9zEJ/80X3iY/7Vln3cMm4HyByyWcZSWah1Tf0PQdpjFAADfjE0Yz
wk8WFsldPrztDW5QDUFS9ynVVHaxetBCCU0/RRmT3Enjxpg1juYztXltLKhXFEIInNc/d4/FHau+
0ksKtJ+SzU3ItuqhKUmIIquwZrl+wugj+BAKW8mF0dFKC2szmiZLB9Ui1z5wqN9mFZh/x8bWjf4/
ay1kM6rDfiNv+1moJuEZmG3P7OeiEpovy2hmuVBSl8oQC/tbi/mQbfNoWVyKpSZjymOj1mDaiMGP
FKrb0jdTx1RtUQi1gswiZLJKcwgmQqGS6YPAgw5SqKVQsdKFohSq0Hkemv0w73B6mQnGPtPptEqA
GFQlTfb/RUbj36Zc338Vs8W0ryO4OCr2ShTgWrSNdRVDS01TpOvUhYC4JaFsRLxKOoV/QWHzU4as
u3jQ9rS8SD3BK0OPh2hdnRo1aVhJvDfwGat2I8H4W7kM1aayQCH+1PQx6nnMueDH58uEWmC2xRFp
TYaGZGUgMyqAm/x//786tQ7E0wz7tClOqxRuFWYh5QAJgvINYfHaLW7cpJr1QcFJbRQBtwwoN9RC
u3u8I+FXKv8rNQLnVJ5hfnBNi5teOYD5ku/8n9uv8mtT8wmnC1sSQz9k3dFvl+UkINzRuo1bFzH6
ec/ZD++1ZC+If9q1MZ7P7NFKXbg7M0sMqq6yTbPNuq7DYNtQvwfNxcHWLcHZWdk1Qm3NhkC56mMm
Ku8/QdxN+neqPMDIw8a+7rZOwHoQX8oocHRhXSguDS0cZ72T0zReNkfrGi7DGGYRVuax6orlO4QA
g16nbbXJ8ZoUOOKWxhchCFKU0Vo0Gn/3M6mK/+WjoKQmfiFVktMU7SpNUWXrIgTjto6pa6YNtj5V
y8rah8aDXYnlGtuKM6pY+dPLyIalGNnCRjoaZUxJKMGriSp2Zq3kij6EGHUEYyYHRNDHygxDtrVx
Q+FMQ0zvP5YmmzSNUBfH6mwZDgX6YDzJnetLrWPCL1IJlBd93doNaNc5HutyZgIDfRUje+PTsQBS
poWkimMHCG2cvHFMudyZ5OFuUAisdLbyi9pUkyuJwm8fE474AoCprj1XGhaHkzqT4QAwpcqmiA1q
nP5xH48WTACW059BtRjYx+IxaE0/B485nIhAebDJdWdhmtOlaQ+XrMMpYna+pVkScx0Y/UivwGer
+ZqgcFNGUbj7FiZulnUTG0h3nF5vdgEeKdueRcHF24LNqUTeL8XOYvyIDf+Dko+GTjge/j5StlNz
A2UZhSU69nIseyMfizely8fyb2DswCb2CuRZb6OLOjYxrxCmNJZ85KtvGeAn3N5qT+TOpmByPLbD
gsM/1owqLFSGvDjE2V97piPMFVxuwiH9GEBeELucH17xcnyaONl5m9pb8+Da1qoTKJTPAmTRL2GG
ZMkGeTLRLMgn4XrrcPhrZ1lqg0hjYxBxFrwNW1VbvlUBwa1klxOHGym+6sM7ND0zt+PukVDye2uZ
qOYIVcHeyAPetLmVUHTsuOWaPHGw4XAyX4p02gxsbiRyup2KvNacWkYuhE5nFr5y/hCkD+ME1qOR
lmY5nVLFpVkl3Fp8gLDE6JsFW8susMLJr33kgGhlbRPWKqYytzyHsCbfI8PggEMaucYo6D2djqQT
N0y04VzBapXwf1ztWfHZtHHxaW61HdTQChwWnYPLDSHKAAsrRAdF23QAf0mpYJOOomKzXdPSI0P+
VR3bmb9eBC38QBNbrm6it+T33KN5nTP5cvTbhkPWW5kbcsxexjh3u6Uls65fXNWIj16k9YSwTB2z
5DdLF5EPuiI+PDypGHPU022RLs4l2wU1eMIzdflHp9bZzRttQzOvSyi67RKFW+04eCJrOW7Rx165
Iak2G7y43MmHuH4rN2yn7GOyJuLdEHaqcK527YS0K4AtWGu7mGGXP+BEGRuHv/w36gyml1qM5A4U
+E40qjdCCowHLnocmNcPIh7AhqxuFUXPwD53VwonBnD7dbmGTYwLaEeFEFN2GKj2eilJmQ0jR+vp
beN3UK8tJAlUrKjfzyaGKM0bwPCaGikh8xftY7KZbyG6Fm1meuxf34bMXoUVzE0OVTUHp1PF4NVp
veyVdM0D+Hln8F5eLtP4hYLUOL6ZgtJC/riJdT0kGEoKrlZCFa4prtg2oIoqTtuwPqd8LDoQoSmH
Ll17aEpWEUs7k0+oojVvjyS0CfXAB3vBKOuKJNhTPnDMa2Z9u+B+PH2l5pJIRlgon1UxCcLT1luR
UVaVx0F3HvRjn8fL7Wqr/QT5EwWUfGxNQn8E1NSPIaGuxLWS0P5NlhoOkSl2bGreQs1T6NraMt/T
YtlMLUPqgb6Xrn8OyE7gVlVGMbNKAYFjKGPZAZPEcXi0el+o5/G/o+nwVajNESr3kdE364iO44P4
rBrPpNheSEgN0BjCjAjqk7As/zSKYFesmti7GADZBoujbWPv6HEVWQXE1koWsmQywyYyADldGa0y
q4Q6rWJI/6K1XqC2DZBuz8uGXHgXzdpv985okQS2KfIgSR0Ha2hlOE/Z7abj9CH2kresQI0F/IpC
aJxZU2aVaj8305022Z5tEU0iso7D3fo1bKQlUwnWx1RxiPexEW20XgF+hJrBCO5t9kUTU+wrDNRt
KCR+JXB8yqJadfqAyZttoq1CULkmLE7V15xtYxzKWHH4c/ASgsEZ7fLdiFUjI6qWUa/pn2os3YC9
40kJZ15aR0tAdCpWM1nqSAMfytgfaePjjXhYj95Jxog3Q7K2HXMzWoxdtQHEza+wr7/Cdf1RHmVL
T9XEmpJjOKmloPu6WCG2K87DqgEGcpEp5GdNAOxV5pPrbEPfbMPZ6ug8MtAUuATvAs4VyHW8MYLl
uqLDxiJFVIIsLaNd4YGsyXUW1gyiz3WFG9G+HRKtj+JQf+AoQ+vi+wKmZLEliVAVu65CCZjKQ5cG
d3tEL/hRB6GJ4Xs81R50kVqDWISEh35ZDwKbPyHjE6kuZnH9475ATxQIYlNOOCM4lrCnPjYmbzM0
XEbS9zFQ9tWQk0wtZh8Lm4BrRSSHMmT6rv8Kl9UWofdcUhTx7TIeYIrlFT/CsN2FshnTeSJAMPs/
EVHryr6LoWl6IQQDu6FFPb2AigsQGNQLhhLWnL5hg6jZcnqpaoiVbt5PwJxUJE0LXswcn43LttGu
H7asvzRYTLPClkVXpqLBIafvqbFJurUm2lWDt7beg0qvEg+HuJfXNKrtkPthMaa9TLF6U/6i9Grs
IWnE3PW2nKXX66KFt7EjCSeqY8KBvdU/Q+tttMmNpIG+q/L8PWNcamr3S6AFTZmg+Xrbzbfpw21E
uOMYQhinxe0U2MS64x65ZTufFGG1fcVzUjQpN38+FZsgQETgngsKnF/ndP+VJoMmsop7ZartvWkq
uBL+WfbZmiK1K0/adhisQOH8xjGt1aZpvBJOV8UB0JNEIKzV1ukZQeDvC5fC4vr+UtguNnF9E8VU
jwpXQ495GuI486wRbvVc99MsKpPVUNguvBgjRw7zXVqjzhPzE7ItChAb5a8dxGWuxnm6nAS8Mc1x
XRx3+nKd1pvLKoAqIt1W5129oqie2tT1uQ3BNmdJZrO0BmbGugfz4klroI6OXPHduVuWGHL8+4So
a9uIQnBkelrYfIlJ39Z4WySWLmXt8oymaqPgt25nQtUSbUXFPBK2l6euvOnTET+9mcNkV9twMAbL
2jkqp2nem7bSxEyUDJcIxBQdDhoVwzmR10RntPAr38x2zWr2Vp1UdDmZUpeZTT1h77aPMC3UNLVo
Hpsu1GYxYqD3TVO6FqvHaYxnlEGvlDbAUAYmFF41rQlPaQARp9uv88eU6pqE5ZTt+S5p+l+tXOvZ
CE6oQ46g7V6FfXVuIfT6jCBeTtfb5b5PSQD6tPefqsckOWgUjx573S8AP+Zd99f7yQ3wPAobtKn4
MshYGB97tVwibIEbtIHKMkQ6gKKn25xw/umYg385LPwsbeWnuV2b8tDr3I6TsAN/EpbYI7BKuKwV
MUBk4X3aXQG2216WQBAl2yU4x2rgHaPTV+OzHI6T8KSDJysGHmIuO7pTYTVV+D2x4X5G/On7Oupd
HaVCUlplWJ3M0OjLfT7esJc9oKTd/QpgTJrjIamZvbiyr8JXMS354+nTrMffAalYuD7P5AyORJ90
+j7t7w5zdvoucLbFoigDIQbx1WcWWb1juUIXX13Z9DWRTsVTdUPI5620GNz5ZflgnG82K7B4123b
rZsfZYLO+kUkycYY3pv2D5eIBA0XAModHzlZhkFvrGKC3LMtnn606JbHZT/KjFuwwyv8U1vEnuOn
cLoyfBRjGMZo3zzyA79cBWnSxkS7lXeOL+bT/niHicLwn4Uj1jEdIyuKzeqhDdcu12s/EhEn0+0S
thy6zeJbP4LbASgX6aaLUEY2m8hJP+ZtrS+0vUAp9nfCVk0ZXfQk/tpKeB47onKrnihjeuKw7O8Y
/DssNxxbL7FREaNfeBqB5puYnIBvaCyFf0X9L+ONFBZE4t8n/zB0oadF/8dLTp737JY6nBnQy4L0
CR4rO2Y++aTC7VtEW0j00wSrGPoH0Xj4Qbk5DKGhZEE2T4flG76sqC1U2YX22moiG2ZapF/vBZuB
qFMkElWwBfz8GGJT4JrDclqzjnAYFd5uK1oejiwEilKhUmq9G6AJcrWisK86fKNuRZYb2bhbiXmD
mPIKFYQfywvI+uv+siB/4QLkRrkwgQn2R38AwvqtQWRpAlda20Pxda7phXq3UE/hHeq8+pwulJey
8hH/yy7dm1/0Q6xsGlJPULJzu1KsF1J7erk0KETBkZxaitKuV6J8uJRLLbpovngBaHcoM7VbSWcP
i6GNhQiM1U+QpL8b5AWIyAgr9WWsuDgsJMkVqZZFNHgCRVGQ3MMlbAmL6XYYD2BAsDi7CMdQMGSv
ClnS2CZU4oL1DZqnIXV6f5FR04v4IHE/sxopn7AarlqACij5xdDFIsA+7ES7oxVfxksmn1t00YFh
vxOm3fucgV0ty2jZpykTp60cNMttyCyXRTTtZ4BklxOMbXufr2bRzLibsogOyzXHmk9aIc/SqVQs
/SCR1vt4OXyDeMi43+vzXkaZGRlsR1UjgFTlKg/ogKZgwnrD8gjeolvB7hhVRmSFSzl6zwD8l0UU
zpiW+uPnz5olr/704FlnlovG8c2r/shRhyEGYGqrjdiK5mUolya8dRFkB0oehjAyvhIYuw+TOg2T
EBYnmEmKzOiRoo9Gp+PvaEfn2n0Kb+Bju5iCNOOS9SLaFTVUnGH0Yj1eoTXXfpjyJOBfDPJqBv0r
vOJSuJM2ltpYC2Hhe88bgPZosptW8W0guCamxs2baAZwhW7mucHys//NT4MXrofdbI2mERER6fTd
3/T30+VnJvWcMSNo2C466c72/rx8WpUj2W20uzIOb/mElp0zspBPYcSJtQW/YZzjc3PXLOy0Dkt4
rWJcPqbb5XP3MZ4Z8+hnh8Is+Pcjubkf8/VjFDUvR5IenP9jCSlnrxRDHRvoFjcHhYftY0ZYyEyC
Ldl3MenOWjNM8fwFmnNR4JipHsK5VnaYoRA3IYmecQPN9itG67jOvszam/pyPy7pzLaW5Y8V9ET2
b/DL+MnVDr/i/wYuPcTntJ+lduZ/vXtfLvPvu5c0nmRnXQVEgcRhaENwnQD3ZXolqLU4VY2IqzV+
NSiCMe1p0g6zS3YF22CDA9j5ouAOnQ746GagLa0sLOhhWtn0N1NiYr7e+dVluFYa0mGxQ72Hmjvx
8SI8iYc6rUr806aeJHt7rYc2hbIL083+uL2NV6eCq1NJUjEOlVUnpxSYIe2RId763o71Ht+0rseq
DnqgDZTNsG577ErtVoQjt6TTiRsGt8qQL2LsIRDJsOUVVifM0wnbW48B3WrDusJ6HVsPQ2zN5n2K
NMgZDv80GREjnbrxu8ShNiq2x9v7Zbm/8XGcZrOg5K/CczOaAS2l+kJkPfF5PFIv6xwXJIOwLQb6
C+JLdSnOE7ZTbdiOfG8JpUxbZJjPNNxLWcWFbhK14bxfIIGcFqmQIerLwofBWuZEv7HY1862NY03
bfy+75KNnR1ubvAr+rIg6zDA/F59k94IFBgFlmstlTSB/eI+12/6dbzMbJScFf1MLNpJkelNlz4a
qLraj0v7Nr180TvHn8IOnN39hL+lDczzXbrYuoyvaKx0dx9Y8ZY+fumji4ySjPmGO5oOuTuk2XRm
Ly2GdmtTdIc4Cu4yoR1ied0RBEjuYZSnHNUMrBnCDmieT24eqtwPTAet2H1hnX+9NjWpC9i9LJjk
mijnE4GfCHzdcRFBZg1oelPlv3zXbtd+oRAMUablRNPDJ4pduoyaXUaL+otY/v5yu0ymDEOSYsSM
7J0QuMzgH7KAgIAE1rnyc7NEjUsMIcPQ40JSkJrxc9fG36XCmH7lcWKO0w28NjtbT69PUid9UbWn
Z4U2nDHiqELf7G6bPdNxK6lZdxAsH5QV0HvC6jFazDt0L9DXgSMwjjPJ3n0al7IoGMSXj7MY6WAy
WhTfOvlZRkmCxyXbKKrc2+TeBLxuFxISCBBXY+hAKHlq9+oAmoEYI2YgtXaKJeysgsM8+X09HpXy
ONIIMFyOgYMqyscW0kGJDoRzrsAwlbw7aKcWnpWhCKuq8agsBPTwV6qqn09coQoX57eG6cHq8QmE
j7sYPObjufi15e6K4WuxqoDUXZ0WURjgigw8mHFbakUjRPH+pu8gZ+1lZAD6CgZepmjr4t6FK4hi
mPpLpEWwkeaKZQHAtwAHfwVkuMtLSlzj4gzai3WKWKPJ/IA9MgWQNsBzlsOwQjCrpE1zZ1J4uWII
EfEaaU3R36OjlwFOrzFLEsuhtSspP1qyDp+qt23PXH7HpDZtF+alH8U9F0UMSTtFvGm7mSi0DiFU
O0GoKUGclTGZkWYoMu+xiG35EHbHoY7d7h6XhSb9DFBcwfAe2VqJp3bJc+GdixiMIEncnwGJhv7x
V2xFYr8xbtCCDKiZjcfdxO63F+B4kUCHkN3rrQQqkGQVk/rx/QpExBCIeweavV0qa8m/WTAzEEJu
vqV+DDPUApYGLVrFTYTkoocD2B2yeVWrmDh5XBIr7MizEGy1Jnyn/ilJv3OxbWMvwxQpwQbTGoBp
bl9NluER53hp63P/5ZN4UaAaBrVeueq+BK9wY1zSMiuLo0yZyamWdrrtMvZ0iZ1ZZ/CrYNKWVQze
+3Fb+AfTUYJF0cQGT0hmuyRT2OwDzEGlLszQlnBnjIdaVxVr7osahSFuBeye0WxVHxtZ8bglLTbn
19n8m7CxImYyJh6TY3YIVNaH3KE2axDh1GXMPgr9J4q6CGs0sTkIgS+BIGSbHYpqm6/DiE+g25VJ
0GdNAmNavqHMkpyCIqbEthhuW8Dqi6KMyUJZGkD1jyAO1DYKh9+QBkLSvbah8i2zqkEQ+yuR3D19
k8I1qtgrJZjmiFU73lKQiimJVFXMFdpix2a0OLO5kGyVbC66Wt4sPzCYaPC9qyHnwQj01MQo1Dzb
Kjv3pH3YbFNcjGlz0n2IwYIn1Bf5gbcX4RarWNgpvpywCnP3faNERD9jdJB7vLs0ojBxZx06BEP+
uJILyUaioNGaitLYBLds57BBH0yPJUgw6/uU/hLR9pV8CW8riq5aEUV8F83e503dNryEInsJoo/W
xi7h8YFsYVPGdqlj549ItW0R32ZloxksdJMRCpJ2plQvdXOUMfGhfnTLBm7yuXg/emCrkqt0OL1n
6YO29eljajG/TIa6A5GWTMEJWQCW1POhmHdMvUBH9tHkMFFDJI1BXKpnORPKhfLFIM/xd+wH+zpf
YfbS1ptoO3YTfHpvJB8FEFYnn6SXclANy0FhSVj9kGY8LHcEfhzf5hNVmlHwQ043VvwaMCBlK/ig
GtDyEv3bJKWgynh+xizAxrdbhWZwz15vwrJdz9I0vho0mtvbls1rhnj2kZ7dm/1vWnIchJJeoiGe
ynQhrlW1PdJ3ld5RxVKAfLDxYYKkOSMPg5jop8cCaKnELK1nFl+auSkvmqXHIp629Dl0sqgAro1u
NpvI7QaW4aP6iX6DYJKqNYmC2LJQR6e60g11WSewr5OmzmxavOcvRhONOr5TPksIM9mI0KuEk7P1
evwzrJ/q6+UIl2rwmrwKEZ6oCzmnccalcybh2zT5tHWsHsMTNzRemENSgtAUOIud3Li1ulk/icWU
m8EmGI+msm8xE2gvMEBk8X2t2fdpQi1RbiP8tThOAkZ3vGgPDgFdFrYQC4XuFWZWEy89q+L4uhCO
t5OMgooA0cAmeczIviFhl9OVnh00bwhCzxNWVeIfk3GBLkjNj9O33UoCCsqSH7bwqNvf3qfp6LqV
sPInfdSmZsoRp+lZdsQeL/yGRp4f7QQB80gZUad4O5uNtNWc1V0TGY5gcG0ScAnCinxWJfTktFV0
za/zKE2aV7zBLXQh6ZENNJaA0kXbqcKMFB3w76PmhgkwsI6sztZOJ990ccwHLQcPAuArSggbM8in
GCTuTet30Um+xsnQKzBD27ktFDqQA9xskBqfOGmOboWDqNAU78ULw9F+g8Y1/W779vVDE9OgOBL2
t0oft7Ha6PwcecX7uUK3fk2JjLSzEZ2OxUeoXKpIcAzud5STiH0RDZHgpYVPLIga2pfaTi7sUSzl
CM/RhVP82uQW9y9GYR6EzC4fE8cn2dmdhlRCm+S0JGx0iBXoWELxN0F9GbYCT1C2ineShQNr5eML
p2d5bTCpsRUWHUn4EuiGS4u0Yqke3JEgBGZDBJfx7SMH6NU53FGrY3wL/9c3amBxCLEUT5vShWy9
8nVxLDS3oZhQKCJk9hTEwVS1avvNpjLQolHcZMCha0XwllSr9/iw6Y015dq5NOjdUNhhmzhw4EQu
ot85eD5rJ7tZSL5HlIpbs86LatmuSu/yUle0NmvxK/g3gylO1pLZL6Z0yHkdj9/GTwHHgqP1UClv
537ILo0eB1/aQJ6kV+0YTgKv1GermvVO2hT7GL8LaXRcsF2BwJSJ5ebTXm/wCnjgp+yadRT+SLpT
jATQlW7ZNcd5aDE08HANGwgCl2r6GIwaWwgqXlduKBIL7vuKvRYJlsf1a4ZrxNmA/YKtlBfazXGp
ikGjUPgi8VpkOJo+TpvdyOD2dB7Io4HETFM1OVJIjyAgMmhiwCmP65nEzpZnL0JibUTC4q8l8GnF
3od1bmwWAVs4giOOUdfKw8tRo3Suu4FIlq1GAZiHLes9ufvcGbCZdDEprVqF0DDVljVPS25VLwtY
wQisSi4xO7ZePENRDMnHmJcP1zgej1mWVwzRBweMmhAEW0YrY0yRWuW5XHaU3lQCezIoHB4ZYstS
SUA67EnbYxKJhqwWD5d20pbbcdxPB3KZ/C0Kl8eX7cJl/QsHrClItX51he2w2qNp2aGFtAE3C6sx
CLog7MFlJGHA2edBU/K03A7TLW1y0avU61dp0yQIlsglDVNUMSxDBcAtaqgf7tCxSPYO2c6oVCMl
IbVxuF35Mn3jJ30m7AP33l+PAkG2fajPC9uyAw+cUrkCfVcZ8yAgHWEdpl947DwgaKwsHS+AkHfc
YAx4yYCp2laUgbQ68fRXgWxUw20Al1Bmy+Ys4NLOL3bIgMo3O8WF6XyShWlV8E2VPgcWpeWt4r5u
mYR2VvpaApr0z7fLcnrL0XNVxOByYUUMQhtqhrCzFjHoNyWnEJGsKdb2WL1V+AubZLqTBvUOT9m8
guXAHx35uY8KWuHAbG+UYEiIBLC8L8LbdlUgWaoH5gCov/N4vfpxlEA033dFIWhNhoHICqQTXpKw
uWZ1yqHY+AIEPSGs3K8NxIf7y/cSEJUwu63A+rw2zXFMuAjs5p8EKxeaR3l1ONgzC8t0aV/1weLI
Exwn2TKUU3HLf4MBXaakwFryCQKPMwK20DdRWWKQIbOCpIxbkTa0AQkRq9CgSPUrZR9sHURy0Bft
lZnNvtBsgyISlJC3Xdg0CEna54ivySjLh9DBhnBEFK9bsIhyPqiKmi4JoWBdZXLtBZlVpjVxaMOY
ZmmckyxYMnUMiffBjjH2lRWreWvGPxD8I3NHkNytAaetcwhhMLAIyRhkIPlYw/tgNBCBr/2SvDXM
9XIR6uX0doV9DqEd3GVt6w3UWYRw6N0W21pYbsgQZyyUJ1uaLQuMDTH7Kxkh2RrP4oCvXRONawbU
mqfSNsC3rQvBZMxZSxWXyYPBuNhowb9Lqrv2T9VghGy9LFaZBrZFbqvspShH36VjGdbwloIa7Vom
rf1cxpiCVmvXyruKvseTAVs1ZD38RJxVeBO1vsEH0xihR6aDSTfmRAafdhAyDy2XTqHQ50020pu2
kEuB40JboN5O0qJX3xRhZK4VnclscK7i80h4WVjMzRUVTLuOcj8cGB/isinIUjHrHbFqyv5xNexo
FNZgBi0VqgSQb7Y42ADdyNg5Xe/zWIgsWjOUH1aCmEPgqcIqJ7W5vkeo7enXRbGKY69TywDVb1Jx
iVDXWPRr8JgqWR5ZCuWRrEQI/llVj6WvtvHE5a5NiT70TAiFQ3UXTwQG4D1we9n0cO3fgtnqT1ec
CdVm7AcgAlkV7ZN4RgJ+TBcUi9Webx9QjJ6/YvZ65CGVMkEJlFCwvC3cso2wWG+LAEqowmSXnmhJ
JZcsldw2fl/syWxxgK9ZFqqKy3jq3HTUmkqsLP/1JTtiXfvp8B/j7f3jmJMrBStS8FPH+CPaOm4B
SbdzI/osZzQ+4KFv9gIUsMc8eT7X3g6scN3nfhzVat8fnuxlCijs2ZrJjhdAtNgl0YWQUuA1QI2G
l65Ce0SzLuDPFS0IFQu8vtFllmMSUB/5E8tb8MQCF3B8MKwPMv0bvNBDP9Oym2+Icy/TTNsOQTmK
cUAOmvY9tPsVaqNzPNByaYrsWYuYcFTenili5gX2PjJo+9aNaUdBZCNMZA7pmM7sk6h1pplYf6yp
fS8DwHUMZ+2hEZvBv0EXxoTwAww+S2DAhwL7YSPpCHXmgTBuPJvQDq/HeY8wyxju3ovRJCKdciXb
TQLwPF1ggjcMZDWYvsYihQaNw6ItyfG0AUCM0xPtdggKHTnaHMXVtpWGDZxOe0+n62op0puC0BnW
KrmRVZvwMgU/KytmueED7yeogr5miYYXNnGiQehnAB40qHQpS5cq5+q4xt5rTX+zo0m0KLyMe3Mw
MxiVl1Pvpu9nICdwb+gz7d/EJ5hUqOqM0946aG7TDm1+xw1ehXXa9DrKr4ORGus4xNYpS2Gd1q9T
N14P/9C5G+Hcyp+7xPFAVfrcVXodiyiFj176prMf2q9wLxX7HV57Ft3vINxvzd6p8vQeXacX1qnY
Okyi2XVO948XPDhY2h4mAod8XJdEjy2dlO2QV3JEdyjcWMkoiTj7n3gZJex3YBRrHdTYTUAm/O0y
nt8xIZFbVbH3ZlC72d3LVNSwVQdfCmVXvZ9S6wqcxCgBrAbVq63nl3bK5Ana9UaiRuWJwJ+K8Q03
UKPU1AnrsPfg9Q7R/Qhyx2bU21WcKrofgT5s77h/SUHeFsK5GEXwssboOsJ+VPeD9BrjNuE9a39/
wVid6P0Jeq9kXMtNqA38Jeyu4rfAojgCLwiLMcbiNSIbtigJFiYWeeg7eoECIStGyBDNVI1AgMJD
qPVDdMXDPDZjF/7+F5wTAXFb7Voefrl9JtpPqfXOeBxlAPNiszo+vrqpe5JWVG5FE55njYeuZ+Cy
fCw363CkfH1ar/Tr1ZUfC7PeUTawQqvVfjUEAmhNAwePVN1PM2Lp5kGEuS/Onnf+eNGe2XizhjbB
H1xzzi5vtK1WYFdh07LUhlCU8Y7i/fXqiF9bGmC6S4DGPGbhCsICt4F6SLe0RrQtv6jeB6DsIAaT
TYIkn/7/m0pKwe+uYm33GSxoaoK0RVg5xIhSrXHOOz6xCxpi5tPrYiYOCq8xhMH04jlwbiEs2qoq
HtEgnP3DdIZo2mn/6WIatHeh3ZWB5vsJU67VamZYfBQyvG6IGfI4e9X6sOj20PCLENnkEUleO2s8
0/GMfaFbnNMmjovxSPEClXfr3ujSNI5jQI72lC9BpdBcu26QNsjr7+N5MmFuGt3D/sNuOcXmBHhm
9fEZ/ApBBhBnKt3yNjCoIW4bpn6XyipcaMGFUi2CFX4n9M0ODHKLM17i94SFGMYWT/BsvLDzcvx8
s6Gb8fD3+/Umd5YycMtAxgW/d5n298t1ppl/Uut0yYDNAjG+3j5ICyDy8Zi/kp6j+5a+nnu9pp/l
/VCBKSzOwa1xIuHwuDjepi1CIBkiXAFr/eb8tO0FhZfqt5H0GnXNTmi0E70sDwl3wmiQu33bmOfH
ebZY/2z8nQNAka3XVzLkwsAryF6fLTXbwEx9v6b+IvobQZR16/v3DO2XKw1x8eBphLUZlDwPQW2U
Oj8gL9v1D7Y/Ip/N27AE4/YdcCTtLiH4kjt4Xs4yqcDDyM/e8D9z4mabbA75axsFlQzPPajaTcpR
qQFb8YmQAYmg96jdT6iof2rWSccdDO71BJkkjjIkWExFfJrQhgk+MvQBpUqHdYqmT2apXmdX6yQU
ezAjkUaU1hE3xrgv4Mkky8PIjanD9GHDF3PDqXCAKBUXCnm+NgAAMEnXLW6GryMQPA0OV9BiCVSk
yAVTOLlKFO8NYHNZa5I3xJsOW/S2eFeV7mE8Hj8FDGvKDfE6EbzQKrm8GcyTrRDgg4d4q4ADZNsG
ytVypDhKKZijx4AjdrXwFkO8loNnGg0nyvBw3dDGXPzHCi28LxmtMKhXKSLFVMwRz06d6vjUKWov
LR9KHIRiU/LnupjfbUcDbK1ia5s+lpGPCRABRZtkRxdbKVKDtTe4Q9urr5puDRpYJgDaNiGztWFw
pTY8hNAhCMq2FV+D+bDsDa6fHy/LcQ2+gs9w/foWf0wZ640Tlwh2S9Sl1rSqwjjHE7GNRK4egFds
ucZp2Ya7wusIcRBskyKQ83SB0M68vx/Hi5mquAkVkQGRgfCt6n6zlshea8sPQDnpMHypDQLYKIkm
cGKw40S6kqKJx7c8ooq+2v+uEq0uLp5Z86bVICeunwSNzErLevwzpMK5whWouKnFKT6Po0Yiuo9P
0IvW32WEWd8Ua8IPEgcfcLjxu7n86/18XoQYadd7OcHQjZPmpFCp0gb4qSxxEzulcLxybec1Sbmv
xQbW71k7StAAfbxA1A0XcjWAm8CLVljDgfG4RgV28wEFa0DFAYdF1FChvpqVVgYxiLjBIzwpZ00e
V3sseLx+jDBh3SEMC9HVIgbUbGxCsri3zWlk9YkM7O5xPKaUsAkmjrLqmK1WsQH9FnI5RRzG0hOe
H4ngR7BKtNet62+7eOYBW0zltbpVt0G5qna7HX9EnnMsLt6iYZ7YtPdvnMVZhFWy3f/JJAzt6whp
izqetohWBG+RBmxB1pW6UuKb4dKHRHknwaVDo7CBASOs3k0pQNaDENRLZgDNBcJh4hTChWooE+I0
55s17Qodvl2Nxg5Hqv0AOTaJC03Woh5vl2dqUdu19dLEbC+45OVy1gJYcJwKT0lAmU37XDvLhqrz
OnHdkh6UVD7rPfGgD5GiUnvFgsOi4myJKd8Vsrk9/oMTk46bVTEvJgEWn6UoTv0DgjyTWLrfqIVn
NqSas1MDZPzaI+NL2ue0ZKGTWR8AO+yjziZlKyAZkIrsY6GKdUn0BiunKuKWHdGe9dncQlSEJPcV
eAsA9Wz7RBW4ZPbw6Ew9eNOfY08LFmwTL36PwHQLTl3P58c/ytjQhXfSUkJRJY4t4u07L6HVZfjp
e9oyZPGFxiHGbjWbNP9qUSXGE4d42XtCUBmfNBtSDN6G1dwKxTVCBL0VQ7OW1z61kvmOU2sELmOS
lMEhMl/HFeTteEmDQD48qIGgQwZ9+H5EEp4m0PeHaaE+xpyeZu0xGDwOxhpg2EyKPXcdi38QeK+x
QPQ93bTZmwGgbZlHz4C3XXJpnFm0LlvqFZYF2VQ59di6PFRefPdrwy85TICU1tOdndw24rHFRFNS
JuHTsfEzDPAj7hNWgk+YGMYRX6gRWJwHMpDm1aYL3KSiq7hVZnwQUg1mntRGT6SMWfkPe3Upz5ec
ScJwoxnm9nrYjBnrcf0y+yF6zhoSUh4li4CtakuvLDYxSyKEGU0mAmbQHk7zB40RYhjprNud8m/L
7V2fJJPQbIO2VlZnks5eSN3KvCyPr7YyxrF+dUuMOdFza+bWnAinyb7RYX59nS7TBqeh7VmA0s86
Z8RE0YvL0a69NX/Qhz21ww86EGLMJChPbX1qNwADZ8YJVUULOlmtW3S95X+IWSVpK78OTdWevZYf
LYb7m2kmyQYPtRviwTRXP76hxLErilVrbpPOZl2WG5Uv56OaQ3xVLihNYmVDg/nabA0Ry44AGYJh
AjDOif21PXxy9cw7KDG/nwBIWgg3NwEaAqua3f24G8ConrUCr5h0w0vzmoDCr2NNlCyhtLFtJAoe
hEdt12qR6M1ZJof5QjNXtJdzs2r/h0IjLMvDkoSRwMizC3OQAM7SscsQel+rSkp1hGX5glroOfeR
n909WQctpcxL3u1bYMtvcpdScpR3H/O6O8hgjtpwYVGQHCkGxTKtTwjmDyzo1jKe3kkULaD6F4xw
nvJgpXOCBynEAVS8Nugh5CFkJaqYLQ/J5MOy99NAtmaU2V1VlHPimvhFmx9vF1C5O4qVSTPRep67
4m1WW+zkTXMP63ipVsxsyEXX+5o7etD6HkjjB/ChHJUUcXc9Jds3SfkqnMzYp4fX/QCX8FA7r4N6
jL7lYWGJlAax3yYnuQR+LuL6Piajgy6KvF2SgqhIzoAUhOIQx29Zj36UASk6PtKVV40+66zLg/94
dAlK8u20xnDOZXZObN/GB69GFDMw+NMk2sfrLSCyjJRJnT8CEkRXFrExirG4fw7UjdRVFdd82ydK
yu/ChFJQ6irm1wWgnaESooheS9sJlYLlWsViAFZM3D4BtQo/DEOKl7vUV9r5LlBMynTrRe0oPa6G
luNyUULvZu/WbMDLaoqWt+Qdp9ebySX6Yuukr0Ziwa+IcIrl4y7hmC60LazUsK5X5qBtOLFw4MFf
Ik2ObB8XBWvAVNiAm3JZzkDtiep12ivrgeVd+lC8C/qGyqBv07aXbprwDpVbi0VD/V0KC7VuIXQE
1ONZ5w+QO9svsC3ZBaJp3EeIe6f9u3n8x326fApLdeyYAzewKURgfUaz0Q31pbTswLqbXW0Bu/iw
XzB3hXyTIFWHNkHR1/O0n18BUkA6c8uWY2NewuHb+/sVavVp8SQ+P0mFgi2IQ2kjcgHbdI/3j5NE
wqzJPCJM7UKkRLaTS5U6L1s1twY7Yt969XudbqiLnqSPjlMwYeZhepEiR1iMm3cFWqYr7BBE1JXj
6etI4AHq8C/oABwu47d/eZ2Px3/5GL//L4RT1SL182et6uN0p4/oqln0r8AL21g8rk48+8vHoq1s
zWv/ekr3neulXLi3AvHuUYz3++l63f0+XRaD7EeLp3fUuWVYTYA2Juezi76Z/b2OACKXABzWaw22
M7gyc1IHfrrz/fYXOOCfxttI+xuP5/cxeb6KbQyurTJN1mY50F/HBaAC4CFw5T9rF+Vv+n2TS7L9
oXFuSrFmgGbe32BS/GEGyUS3d1vOyWsbbKy5MrnsJjjqCNlrGhDwujuNEHXTIu+aNPTwvOw9Id8T
kIab27qD3dqZsMlHbf1BMfwbrPX7snwkd2FduCqoMbMEoH/7r3A2fcDbdDlB99chEaSEbdhODlgM
YkxlEyynyft0IKtQCwoqpkYeSC5Y+90RHpMlMQDsndy2Dst0Jd8/KTLwrOwNfZLUbO5tYuTqG1mX
+2Wf3t/g2RvTpkWcYrWE+0W8OVfFUQUJocjW0lthh2vXJOC3Ak/6ayqegTvx62CYtArI8jiNF4nl
OmuY4Yu5guXHG7ldli+TuJGqYPLAYaKuSYnsng2k1Pjl8K6068oXvGoniJgNjpchdNerpReDkHk/
ZMW6pdW0PLC9g1ZVGKeSPrNSYBqTFzaUQ/hygYja3y8QpQduTl5R56kZHPIhuHEX8b9uvqXerwe6
vw1I6cV4iFrsXsCevl/Tb6f8ycBubYOTke/1s7Zn/iQxf+/VC+yrJ+Z3KkD7xLZfTTuvl9tuwn9K
dLDjdReh/B6i9Ol+YIu0YyxsSrvjOiGj4lsmlbCz1di6Vp+Ljbao7JhqGuDOfQXBJMIcoZSt2K+v
+ZZR0eF+IdDnm/BoVSCxGwcRADN+qNV/1yaPwTRsqXB2dkCBVFkH/2dKn6auw6tooqcBnZ8+BBNk
gxsBYOWOE4R2rvrOmZepBdsuvOHWmtH42d/gPH+A2sE/Ixjs39AlSdtwbUDGbZkxutKKY3VTwV0f
c+xZegsGqpf7rOGQdjaABaqeKWZW5G63A0Y7HCktjktGPLWbOu9eDcwPbZEBUhnVaXJzN7lo4y+b
jW2wi36Zx930Hex5ND1SZZ+4ELO8lR9dr1lTGkSMvO1vBuSEidfC2Cy44Ol0/5gu6RYRWKH25Ie5
mMCMmq9/XfS9/OX0V7KJT8n+e9R5ksoi1kBFAwb6L/o+/s1I0zRrMIu/XRtkjoZZJCetDP1KCMne
RgnSWqBIkuZf0iYIo3F4hs5MwL0tQDT/428/yx7SwDwkCPi1oTMJg7ogzjJm3QXXPoi2EAi5B2dG
C3l9/fe9Vs6CB1OGruQQaitg1f1x/DgLFNC1KpRlils95FPJtcuoij1Ng74bAoocL3s4zgmS8vrF
klkXNDSYDKtdDZ6nGwpuYy+VltX3SfAXvdBHWOQyorma9EszRwrsjLKsNlgXOfpjjGvgF5uIPjTi
DCED4bwQbBcQmVBJekLAAUvBsiiUpu/QCXS7yh6aywNZpmviWkCqZ0XpzxQkn5qZVWIDM8LBGmuK
R4G0XRg1TAkVa1fKl8Efj9ckEiVyaxtavw/UjeELoOsEogZSNosQdA8HQ+eHiPOPx/sl/dD+faDm
fSjj1pCphflMrtMNQbwi3A2+c8ZUrvhxMOJRxlj17bi8jMc/iHGnwRMLGFadylkeb5l3d3Vf1jsM
HuxjGq/3i7H4DtOCRePz/pdk/TkaI4NgN1hKkiVSzxR/Cb51aWTtP+7jATT+/qf75ev06/Iv3xOG
YhlSkHLBNMsYmGBEc1q06oeiDpS0evSec54lk67gtHY9l67vd8iECGQ8qJUiJcZUh38xTukv4JP+
df4+Hf8GplDyoZn5YoPHLL74W45QhmK1jzIX4siSXs0ZC1Y3HcEgHcaLlVgQppxP4ElmtBgPFnsj
CFYZj08vplRIQPHTGoISBKKbhoHXDnHnMPAcxt2QNH+SnIWehRcgDletg28/mSS2YbR0CK4IY8R0
Wy40b0O56ejZwOJKbbuWRTZ0t1kBdX3PFP46JujFtRZDp1sq3YXi2pMBZK+7dfAbbbWsmeaAOysD
4mv6wYC8DxB1Na0i191d2x49mo76/+FyGT/TBCplIFycavuFNaFrU8bkLEm7jM7uwmCeSoaa0RXN
mEUDI/hqfUofFpJVZstvv/JFb876w8xlGnIa9X8R+vh1qHRtQuY3UL6/Wq/mD9dfxCj6UKgwBxFY
AyRsvKV7PUPHwn9M2jBN58qYBsbETxgKRTV1FwRMW4QCoU3ltdIbYMoWIs9lU8mmdvrKow7SKqyS
E009y0OikRMabiBUXsbrJPlGfafCaG6dCGNt99WH0EUqcoZX1r9hFgrGUuuoOEhzfyvYJY7N0lTD
3hyMrbKsH2JOZO6nn0mFEfgq4jXWaa+xZBuA7HZZxsMfmTRe1zJxg3HTQFJYhIhrOgLNcjfMj7bi
z7Ky9S4lY7EbVpmxmsEtwHWAe5m27bmbALfTBU9CKdvjcXrTEkY/T/phuCYt3eBsWuY37YP9hq87
QvlsehEmxh/zj/GQkhzlbPyCDTh4jRoiBNOlCaZeGVIqEpvGQF7GHmdRHAwoBcs4o/59PpzntIfa
hrpXWaPcpSyz1m/JUmjw/wVy+7Zk8iZ9Vwmi1vjIm6+E5RtR4lpQOxccTdvJEvOwoKhXiZnH4Ulq
NhZRJLzsXTcsNYMJiS7qga8y6buDNpwkDCLkkyFMSRRR6TEeDr8AWNp0uQgswrx7VgprXCrbEpoh
jIHlAlgwLyCMrcK1Z0k+SEOXRSLH58xpMFfSOodFuqiePXzb6fcZ6vqhIkq/MlJfWmiXQpaV1PB1
umhjbP5dfD838hZYsIE3CBc6f6JrLeQvh6CqwrQAZOqwfoGobFoysIh3uxZQzBMiV1bwhJg26tZ1
GjmJ4K8FPaEiXzTgfMe0o6EEj4Ul/TMeBhd9HtnSJyZcGe2vn2fBxWf+AajeoY+ooyqtjoq1OioS
6gjzJNn7ZtEZcAjK8LWsuPtYDvNr+sVZpJENcF8XSG2UxW6AOD4XohtY6LeJuhqgpHqLg8Eqjx5D
R3g93sV8md7Hr7MgJFlkBlz9MPlKduuGgjamfVnpj2bb2e7k3/+UZlBGx83axV21Zuxch3s6pMN4
rcE/bS62JptaLDJTI88VgXgkItpNH+fbp6TcexZFZcrd+IPf3mewMUaAVNqD1kzbCFUoq2szTWV/
XK6uBjTRu4mM6skHOOOh6k/2j5kUfDSUqDYvX7DWFTFyQVl8hOy6VGQyMK8YW7ranIqwdkiaAKu1
91Y+ZEXJYEiLCiVksx3J+RKYtG3FPElYqXyQx1DsiMSWFqZDGGzr1nEDvJewhsEbl2kmb4UqD5bb
SDMAe/Z+nfpB8iXrmloRZYulZRJncCmJhwsXtuMAojGHjaPXG0tK3uPnaSQr8tOExMz3yqHEcbMV
o9Fou5qaYYorigJoYNKVta9zlt0c5WTZN9ZZka4jSMuRvogmzLVDXLVF+oaiJShWy0+3X7OR5GYV
FKvi5tz1y/RNqKhn5coogZpkkDYb+S9jDsJaHJdpcVaF5Tz1hmx/Rl/5hzFd72EFgZA8rwWLMrGX
fF6qiRmGkUK83TmbduvXtxUvQKLMT1qQFULa1wvav5+nt0xZOQ+X1ZgGbGLhj7T11Yc1S3Thf7IO
5S8oCdFl0keabntB9LDyMjhfFZaNMAN6P553f9f3lA4aMCnWrrsTXt7EpoKOF162LpTDo82IcP4h
RYc7z1LAXaaEdc1SaWeCURzr3eQaVLJOBh7Ab9dc4IMakmumJPHiGQl1i1z51TGKx+pIFb2MdGSY
BR0wUd2sXpPNo/pYvo5pP5oXJnXIe9my/GxVHAvaQZi1C6tKTG0BGjuo59JKYRXqCcN3YFTrD7Da
HNWuWHjMqAfvbkjw0eYYHFMQwYyTWA17NpvDEhWYJi6Sigub+6RSKRYhZ7aAXuOvzAv96zhfftV3
l87gsbIDYv42Lk4zknRV1ZoqB93k/rMolCoR9KeLuu45j70Ki3kCQUhUScSeo/NuVeyhLIrH29FO
q4QE7GGCstTD7uVzR719QktlUfOZvT5jZeoV0BPDeVCnAwZeoaBT6NUuh541GuMswLIs2D5RdmsD
f/diyoXPoLMvKYT1xo1AM0s26N23bMHLBJUamVbPovetwFiSMpjAEK0BJdM4zPQqrMDaf3uXa7yf
9AEI2Co3vLnoWfdq464aqxNe7oAsZ+xOQJJ4xeUuifEVeNOdb6jtW9dBpE8DiAzT950mpsv8kt5O
6V8KCwwadiE+iIyo3MKZajbiuvaDOPQa8MJmE7vjsic6uqVkAK5W+NUweanMWlfYEcGSnfaTcCQP
OVDhYDb9t/NZk7Syxa8r/zXv7zmCPNSUn5KB9Mv+bVG9FgEbaR17E1jG06Ypq/NFEbb1/WqntBGO
X3qxoWOLgQQM5ag67AI+FMirD09ksImhNdpQq2Hh6+5+GvV/gC5pGg0oX3NRMHbGP41BdYbR6qi2
iFb2y3lG2LPDvJdoULEFq9Lfnx0ccB2hUP9yzRAfO3AJ1WWlUdkriQXHnZ44LsM2KDEuaZWIxTXR
Lzxep939jIuBMBNe1x8VEXNbMxvCHhWFyU6bUG8Qa5IQAenIDXsKkNUmUQaUp49qpdIkUe/AYD5A
MCrjfRDf7AAOWni7wn8NlGtzWS9aoo+XtzuRvrwBfogOrcoueDeKg+LzCa/E1BY265RdVJxSPmW+
Xu8SRZZsSxDqLQuH0G5UPU2SQ5xF1K23z7NAQwycpYIUQmUyP253tDkUcpOg7EsuHDCfUa32BXu5
3l/MvymDU2q97LeXsWmaUrAmOA+hN9s++QNN2wjLc+OCRVhzy9O/5bffeOSLEmpxSmMXw+sciLkQ
2+rbAmM9BQLo6rjJQvwJQYqN4pxDmPhEpl/GRv4cswhLMSLqXfIwqu/F9h/S+9UaDKV3L+Hvf39/
AdSSs3BTDBYkqMQ9AYq5Sa+b7NNdoGzFdCjwcmnr04yURdt1+ZwyhqJWxl2IGdMyUBYzSuWr/pcF
Q92gDgRqrRikkoPbyNEqQrYLJOpFS40N+2ETupzupRN6IseAq8ECRJLeYRXt13n6llGWA7P7KkdM
+mzo8f0qfsvgnNgG0NoxLLbV1mHiAPLhZTWE7HETmFQrjjL2PvSxUX0ZYmF4NAwxgVYA7XsBKJRU
bzCt0MUAnrAgBZhwudwEs1PfADcda2/tEVcftFPznrP0zMTuwH7qg9dUf3JufOZhPVGwngrwr073
DyQoyRLwN4EFYM2Tkr3W/z+BbZgPCdssHcqgtjQwYAwJuv2XTFiR+JqtpTDQ0BkDdr9cEBbGSp3t
8qtkch6BBYciYRRj2SKe3dAoXMohFYgk4chwjnz7uLYZT/MNi3EAz122jRlYWot/akbq0JcnP69m
NqZae+yG7hmlPrrRu1mKCPjFIKIyPGEFCCTCNBEoyLL2yh92pfn5mndhmVdegUdRGay6bYJVczRD
fKNSO8dFRKYQfpwFQvJXA+JxGJ418GQ+qpkFiQXChRkvdT/tacDpZdLS5kS4HBkFWbC9Nm6vRBFE
Wda8uSACtiDCmE7ztSxw3SBCNXmZsTnWy5Jdtt7zCyzc18wGMEznWGcUoQuLWq19e4eCfL2Nor3G
Qissx2nCERjpE6CF6H5Z0Au9EGMTXW24WKpaJGqsQoQ0omXm/+d8MwZyx1LOLCxiI+qC09szp6Jo
Pc1Z4jiP1yuByI8fUpigC+NdtddOCK7qlJRwof44Q+UySt6E1v/7K8pS8jwxJ3mcP2bJkG4YD0Dn
ua1VXc6fuzTbCk/GtBPlErlR9KF3SKHm61W0LDg8IUTSlLl0wMmy53sfj69m5jCTIkKAjXlFoPBs
sThdoONWfMgJbLdN0eEq7mvHNypsrmO2HP5pbCLDhhAyxMFcogITfkUQm3ExUBOeQcKQfEju7GJN
UWsp1tgVG+IrpaeGFhzI1niQlgUpcHC/Tabkz9iM19t02s9aCp9QykkighGwGaVWrxRexohmrgSr
r/YuLpIWVX4KgqaIpTE0+dhGcjqd/IIVM8J4ii1wCfyRaDqGtiA1KyWHbRMz8QyGQ4Jh0SBgAMEy
YUoX0oqlBfsXeDHjRlaeuFowGdoyEYTFxUhhHswVCCL2gRd7rjCQJPhlCu/ZxeIeD7vTNtn8CkHi
27LsPsbT54ZoMdPIZel7rMLIhZJihSo0D5pYxuNjPEPMCKbkSBZQs4p+qCK6mZ0JiEqBlDIuB23u
k8qvr7k0lWZoz0pYt2HkPokczC3iYPS8T1OVDEcWH7EMArOn8yIZ0iyqD2/mKhiBa07n+43RgXAr
xcpeLYtgD5hxMyOYjBvIvCJhd/5s4INb0wqjVmuBL9wQz1w0PoBhLZv/8eufd2Ur0HIbM8/WXCJ8
X6+Db9wpszDGgu5l+4dEcll3z3ntYrS3Yat3GNNzuUVzxR+j5rXv9etXQQHWQZbUuNWS5My4idVD
uqGNVKJldB7zp7vWRUp4ci1ja3jyw/4YHngyk75E3CTcBENAD+xqezEiwBVx1xDPbSUUpqAgVagg
bYqMm9Tyw2i5xewvjw2wTkBvMr70A4Vk0/erm4FWpvNleZ2P0vVwxwX/1E9444JTOay1Rv1A1UTQ
BNohEDPzm8E/akwAkh7w7Yk8RROzv8KDWrloSz9e7pI+Y4j1FURJqy7hveaSFdrCZIDmVeknpc5X
qR6fJOQqC77tAWGqUC7axEWv8mYIiV7EUJBw+Mh3ZDMbfJ34jJGF/aRfTRYi6iFLWbtmK6i6u2jx
jxEvylMK9NgwJwMKyozxDchEOZe6LtYx/D6WKn27TJ/UJpm7V84bnbeoPEXjk+n/+4EAEGK9IpF2
HZsi8L+ml3/72cC6/OvXSSI/Zr4/duPK8RMWicJonmj3Z5ndC8iW/jRRB1WwejrGkwj9zuU9Q/wT
brMKDftupdJNCkhQ6NVa5xiCuczYPC/sXoUZBiPqsEvEMs0h8/v6NZlQh3qjEhzWSNsyy8wK/fy9
gODuWmzSFegMkbh1YA8Qxd2ZGSHp9i9Wo69w6HJoelpgBLnecijbEB8oXiC5pdqyYyC3Bvo9KL99
nyExnRso0A1DrGg7CZvzn8sJaia0oDr+Kduf2DFgYubHryuXM+dsODZGn2wqlR0sbBarQ1yLCATe
dZF6ThiaUgW2ShXCMikDoYe3ZfDyT4uB6kr3IhQCACMr4x1xHM4VrhyDax/6+pNVMFjaW8caFi2v
LJqN56+ZMkzkmX5d1Nuv0RCrtsjhznaKN/tRiC7SqZzu11H9Cll6hRVzRaDL3z/TxcBlDPsGg3ob
MAuHqhVgbk3Xt4h51jE0n6508fSgktlMuk1LDwnGj0Fj49w/HDT2IiBmsc5olEWPQNvo6O8/0QTI
ovH0IpSXgyR5AjW3U50w7IEBIBl8sGx9eh9W3q8ApmkWDmvOFPmCNdOioWDgZv2mPmZMGYgKbahW
aGp9vP4+faQ2lGkqPmFhC3wKw6qFOMUQNDI9tLbfhd72MqakQ0ZP90kzaECqFgihkPjgO3qlDFJu
UwttRQ7gbysSfNd34YyMNgp/l1PdTDQPrhMuQGnaSSAkA+vdh/MlYCwDeJnMrA42NQkiU11gmfyJ
6lv/crotv0zH17R5VsaGB8RAIv+sbyoDEdmF2B2lQ/oklhdveGB42zHASmNx2voTGYiKjcLo160/
2D/pxtwZAJ5A/O72N6GrdgXjbKtE9hnwkHKI6XY+ItyH1yahp798gMdyg7X3C31iO+9+wjFoaeYA
h5gkrMIUFe+q1daGHThoR0DagWhaSmpfeS+hpeDKGLqllT18AhtWmp5mjJ/jI5qNedRKnD53e5/3
UMp300Jl9zae04tgrwAtomoaMW98gPfpMt/MpDgJlBWXaaKX9AoQ25AzgmsC8/2W9nWVm4Jslqmd
5e6Gs+uTaFl9+zbpuz6Pb+KGKr8S1FxYRPi36eflDWaV/hcJbTu6NL1Sx26oJIvRTuyGm6G5olBz
KRxL+c1UriMtfayduTjheCp2PLMlIAHhajDjYA7k6w1hE8DlIsQFfl97smXJWj5k937DAXDYwZQe
NEhE7F9cIby5wTfHUb9GG47Hb1AR+rLcYA4iTcUVuCp62R9YWGY3SaVJZnbQcklNNiH+b+McQnOS
L4AnM81v7zeyAsdr+uYIstouhX9Wg575CGaBIv2OmL529cnsJaAq5nLLyaEhlEPKjrkdoQ7jDXDW
bCLgu0AV/toZLhUbYQ3IeUgNojzCTg5zRWBHhDOccQrtmHTK6DSl34h3PtmlkCmCgSptqev/QO8n
rMgYhiZd91aaGBC63dfsDGSi9jYUk4Y27Zhs2hlOO6fX/BljwFr9UbpTIFImpKhsofHJyON4vf0Z
nxPHYsI8VfxXfY3/RfOw/zileoToUQpRLI8vMB5Yb/JFXqbuYgqLdOj4fb5uu8NyCDdjwo9uILMZ
7Y1DrjOEX7axpUzyd7PqY/vBCDZjn/HrMh+S/YokjYdQkhsXZQL88vfLfPqSDHWRtKuZMEYosIH5
4GYSpxlxa9QwFQ5npF7TRWyTYEK8nf4Kiwoij725x+M0VwuD13cm8w4xm/l0ZxXOwp2VMQ3ECOl9
ucy/L+iP316E91+ZGz17OsBGsrOHM9upmcTxcxVWxg9dOGk04WRdTK8zvsCvQtmcHEtb9X6COxsd
8oRkx1VsoroxFrWp56Hz2DHwXhYKC6lwO812w4OO479H6VlxWtovd+tmpu0f2kbjt8FmU9IyZHcQ
i4xHzbopXUNLsZnz3pSiNTKTwun7KtxKt1l20OedvxAfB8Djcy43WMvCxfobWRsAt8v9tM+8qw26
NUHAxwgdyQKkr9kd9u4O6detZhSuoHdfs0qlf0L60Z6q4EJ+RPrROq2/GZYsyJnpdDL/LQhjwEjb
eK1kEXi9gqUQ9NM41YRzjKABvCUGYAm+ZFSzmbF4sdMsJ6trvowpvXKmAyQonJtAb4P3mjPJ6iHm
bwYG2UYd0DehgirZ1Hlji5EtgWZszpJuYts6Td+C8INBpUvi5GMstzRKBWPi+MeYSyiVpjb5JYlZ
86WfV23HXe0AMU5sC8dF+s4vwu1w8/Mq/aWNl7SBNDDf9cK2a/+Lvk/AfFcWwoet/7ByagWF8HVX
WU5JgDzRYdlPk19mZ3x/d+4BoeOZ7aSXGiq/VEMOg6F4LYlgPn3OxsXHLwq3SlXjnz6xofGeGNdF
u2FEVCMib8NvVbgSKz7aoBprU3CKTsDop8bnrHxFCMymxB4c6KeSeMBfg+oxu9EFRCFs3/984LGY
R2Cy4eUmXJ+/hKpE/R4wwSDQZOO/VH587Qarngiyid+epeWrPgDE9g5ijp+W8mdQoCxtBa45A2QH
iJ4Elu6GkKWHzWYKXSNjLyz4UIFM6IQfrkJR1rgxVLu3y3zgUYWrQIvsNoEwtEDjv18Lv1+EXBDs
m9IPV+FrT4RoOLfryJbwaozyCYbMNmzq/+Vy/Io2iDYv96CN9RNKCpNYid0BQbzXMWeAoKjggoVz
DYy3yZjvEjLuchRexcumqsI/Axfcygtu7R5kjHG6M6b3gOlUFTuicKyeHavA6rgtd75Twq3X61sn
PsbavqsxLMb9ZbleN5Dxg2qha18uZy0KrpjR/jYflm/XrJqqizbgaAuRzgzTHdc1wqWzS4MaS2Xm
vT++orBGtVa/bUpX5C2XumACrym8Bt7gURAZME4BklKmucMZUCscceFcbZznuPxCDyX/9IyOIGCk
6qeDtHQ2tiPAaVH/f9r+tMmR5EgTBn8RRvw+PnbzmKYI2c1lcY5dkVdKPACPCDARcNAdyMygyP73
NVU1c1NzqKl51Mx+6OqsZLnBTj0ffdQSJ5/OVLOO5i4PzsS6IdBoTEiBt+DiouKDSQoodgkASVw0
bWow9eUxYQDzLGzu376MWpHaXi4xh8C+2PM1fYOI2T2wnQvdnFQWUvbcmm+Y8kQ1onj2dAWZAQi4
DNeu7TeGw2l5nfxAniwKxT5ruyf77DkltsbzFCe1CsKU2dYNfN9h6pEbKIa45Qj/rGQLuzYeDU7E
UsixraV5MG3j5KkedyXeShYiLdSdUR3kXMpZgHQgZxbFBCChPsbTGaUQSpG38Qot4B0aLxJpwKJw
lxfIg56wbuAw4EGjx8dyeV/Hc2ERed6D94mCHzPU52kELzRis47IdjK2bBv1+1Qx5bTqzq+6Wslh
yQD7ajaDBszWATkUjIAK1G2N8qkuipMYr2QL91Y/AMjAxtsXH6cd7P1A/k7TxF6NvjLDKbPwl4OZ
4Lj9lAmGm3EZblEviKZQ+832HblP0wO0ysc4YxlHuOep3QkX5UqW10HoyPYNVYY37CljSVfrCzte
leGLymJ3lj+q9JWt/Q1DOdWzRDiqxTW0mLgQXXhTrWNkOwLiXPxGusB8VN7RHlZ+SJ9bsCuCEOOa
ZMVdSO1fHd7YJ6VJNUPLl87EzxALNXU5Yk05ukZ39W5X/p2y9JMmPg+nz+vwEanqpBMq/HZ2a1Vp
4gIpw+XrcAgOrJhUtpH0H/MEaSSgA9n1aGpRLlzOy/1LV7FiC/URBqq62ojL4H4mhm38S2Hxn82Z
8BxCcgf97cHutjmTocvjw4jCT+VxdIEkd94efrwVe4T0w4ntWmnpnwq8wfIpHc93zeV6E0OyM2EA
JW9Q7I/K0xnnwRSrYpc0TL6RymsAbGVbkw0r4Rk0i7Fglieve/1aOpKGYigQf5lXozrOfkK2dC4l
L6x0D1StBnEqA4yHtZZWl3lHrIMQJ2WIJip/S7CKDOqNIVxag3rfeqgnKdsUOp1UBoe2Imdor9Ue
2xGNonkzrJhvJx/LcKmuTSWhXBZzEpcLj2coaS2PkwDFYONOBKmbbsPxjE0VfmoUcrSZbE116UMz
gVuyD0hVSE7JjhAP7a1/cvjHIHtoVkGlt4lcX9tLnpoNwEEszsbllAvSKdMwm4Ef/TuiHv8+/X26
xU4Z08W1TxezLNifx9f736e/oeeofd14pAgIdBuKxe/+PsEgMRFGX/vfRnOd9AufufZ17VP4DDnI
v74oqfq6DWZuv+br1r5ucgl8wL9W180ALZ7N38z47xNNP+ZYU4I/l77me67O3GM2mKPLf1ubeevP
G7Vj87RubeaNh0egxdk+zVy9a1X42/XTzNV1MzSSfzT8t9WZ+9uCfmD+9NvqzDvpxPhN1X679jN3
muir+CXS8gy11q7WHEd2QPQsIb3qRpJeMoROUy55Gyq5NrDsEWyQAGz3WcG0Auss7fIa86iUQ5Eo
ziUd/zWEGm1tHmLHG0HRJVQcwy93lBTBMQAqQ+Umv1NhN33GcDvZFp1GmRmHXFfW4Qdh4vx4wVIs
CPVr16uWjEhmyn4JgtgzMVUwbOTXIIg9Exm+USeWumCNY/TLKstCiFzxW8GLHcPa+cDufvBi34bg
xfq3gRd7BdK5AzHYF9Iq9gMWOy8Bmez5TdjJrg9Nju63gRerLJc2dj96sRcxenvRi30vqYS96MW+
DFVh9X8Fvdh3EsD16/DFKiuky7YPvtjnTzbCV/A/5HeUoSja1B0wbZUsmKo6ycte/VItR0Eqhrku
1OIk0zzbPWlPGtcrP16w/iWcD+EsyxDvaaOACDY6rCiZNfsI3FVphdhn3lMCf6fPFH9NTYuJXviX
MP+1UKT0VRwFqeg8rH8rA+/P3qp5vF2Go3aj2k4CjsrIVsUOyyTA/y6BTNq6lPKNX0ZO0HMr5Dvu
SNnxArmLfaEySneh4J5Ob9PV/M2P+QwBa2wjopxnI9W9kHRarxQy8Su3098JNAuCqnzcQ71SrJcK
IT3nhJXA1vBTptHIBuxOzABdShaS6NZGFMZUe5h3Dz1C92OQq6f6Rxjq58fl/X6/zeM/H+Z64pfh
X0Fd9W26LsjAcjhNx4faAqFl9HisW3FkzP/9lz8fYKR13PDXgCZeoWBrObWcP6nf9lv/fJznb4vy
W4yVrSw9G9nm10ATH+fxNCI98hrnNi82Tp7Vcn5C7y1tRl4+r8fD6bzAUzgpYxUSi9ZmLMcBoRSx
4be8u1S7MhNsBgMCWpWih4ZiawSdUVjCvM1gp/F1MN8x9mllSH8k+DjUq4aHrHZhbHkXRs+bk7pO
1yn4DeUGMdrCavV5lOHdKZn/RBm1/cIbwE34xzJdD/EesPSK25Axs5ZGfTsqZ8M6+XhmFG1au15K
u+elGM9rNNYfZudUGs6WMSNDwNCWCW2XOd7/28/4Qv2porKpkwsFfoEBTEBs1AB+93jWeOzblveu
XEuXk0f8uL8qDMEtI5FnsT6sDF4l5OY39LNhLdKIbSM5TdbgVJkna7mRrzybwsxsXvaMXLmH6YrN
X23FzhLjcqFrUIQbHJn5qnRBEo/fVTXIyQwLSiP34rmhDHG7YszD43TS2om2NSdaXGM4m0EdIRPc
ft/CVhm0D56VLvno6Iy3qVkBWaA45FkayYkTpFbEyl6yXlrtii9RBOfPmJZXfqPboTa3v2G7dO4a
v//C+CQm4JbZ/0XZaNZ+ySMKdsrZvb9RhFzi4j0GqbZvKxhzKSJXu33iTOtbTtOswzbMlnzzPn0b
r+d/jVQjbU5snMEdWY7z+Xb31wTck6hfUhQ8rVevqDfzY/FPOEOID5O4p0kkbOAO3oe3CNIXh2F8
Pr7oNMsq5YdZmLdfrTYb27Hrxp9f3scxufKuFoGeOMyvZjvn4dfjZVqUEfoNvUVjA0/mJD5savWf
j+kO4ScjE2hkZbRO8hCzTNnCZoO+rdgSrNZApREjkKLfDSMNlVeXkNCIGZb0qffGu/UIcdsPtgmJ
O5eoS2+c7iK8gR0LChLkQfUAi4Il/DH+VwcRzeH4DuV7iVkUjEYFI72F55a8XYZ4Psd8uaF8cFjL
ozWKhvn4rpB40Svc8BtVbCe3LztqrNBuZiEgJWMjARd8rNcyfVxKT0LcSeKUXh+bsj2ZdLyytFCE
DiNO6teZZVmpPI5OWgz4r8jzpn3KGIcYSWcoUg/zAAF/I2g/NEVP421QQvlmKsq620rk/hhOKXHS
ijj2mLBUNr6Rrreubn7VxH4mySy/F8qnnCzJY4ReL48FaIQGcyB3G4Daq/26DXlWu5mMoowYTxrL
naYnYwzs80WZUS6t0T7B3UK1YLFNpITvmRgI70BCnOSSUho+bmZtIAHOV+qZAkUVw5uyWyLqz1y+
BTn7Vo25wDAkXCBSoqxwW3nSsBXehhkpjfAgP5XVVdKsondb3aqiFTkBUZH+1IQDD2B6AgFaiLVp
ValdsLguY4A7v13hU9xOc0rkPSrbuck9cQ30uKIh5GS/sp/PJhUTOphpwO/21x6gWcVBiV4GupTn
cEZY3493M9XlNijkU41sLwHgArnWGOB9vl9Ss2I6u1trsfKq6rt1oD9O8++maT7R1VbmJQI6FCM8
bxhdCQay2v9nu9ObtELcFDe/30ky3mcLYzy2tA+5hLfMslqZfEgCZo0txdQ1nzRSgZftAkEcefuu
QB1eAZ4+f5nu7/sGqSSbRvFdzPw7yQTIskb5lSx8km1A17VvonLWaT4fv30eXoZlVCG9TVtK2BjF
6jLrbGOZTyNBx9OZMl7pn27En1butzJUL1qgTpfihlqowZ495aqMCTljHJs5EXTrQN3MzSGlw/15
yxoTMgWwApap7BD/DfdumMfBF2UDIcrh+3k5vxgxaHwlpUib+okVIcN7xn7MD2+LAfQkKo7XMn53
rze241Ho0pLsGvH6hQm3jPHd5wHEH4gP0m0GyZVZIssTcpSDFaKAT2hkv36mm+SR91TS05o9NzTD
s9GgL8N8ANU5nqYfV/rT46act185Jmd6cX7rzPBgLspO9rvWG17P03kxPvQn5i/AFqGyGGVPe6kL
gbynHtd/Fd6BUmZEv1QEHQDKesdqnn9kx5IYrToDkqk/pAxWs34eq2zcPev0GVdBz4ai/eIZKyNn
UjcIf7GNPP/2McxEnh1FnqKQzLKgGUjR77okn8bD2DdVRvCvCLZ1E6AyUuFpN0tvwq4DdXTp6JWf
lJXn4RMsEiJnPmPx3W+Qvaw/EQu47niI/4c/m4c9UrqdP6uMWMbl/1agQmOepFT1Eop56fIMvy6U
mnDwbO/NVoasQy3Qfk1i0HGetIfNNjjzYP8f0/xtnBcyYd7Nj5wO9Fd65zViM2olRkf7OZAWxz9t
RchbOIFIkp9+WnaG6UPXR1wbgHmshXdwwglgovVwwXx+nCPXTCaTkI5uMmqGouQuBPYdNP9cLXLX
uQ6Ad/cpPgiDIjLJZSdAxce3WNK04OxwVVB15PgoPoabupddvYXp5cJuLmfA1MdHqUWYfzjGnpNl
/NW4GcHVsChK240q2R2w4NQw8l2DmmV9c7kvXYOdm9cWtmrHWGNrgIIFcKSy1WIvAXfS47IMb4nZ
sHA1Chorus0OmE/xC9v4B0CaCKg1Rjb0FRiNxLXnEM+EFqyHMEB029CTQyjjcLxHG9rhIKzlPTZe
sdBoSBtDt3ZwTTHpS7knN0/IKMfHrDwqAukJemFMpLRfUgMV4eQaG5Ecj+BD/vOCqQZIv0zXi5HL
EMaFdmMYntRHLqsAbLAiLqHLOjCpYaSP7+DhBL0Q5wdUNb2N93ftYCrvwkLMoJX21PjW4Rmh3WyR
u8rQPvsN5kjnAgHmWs8PiM7a8ZWV12zlcFCto3YBMv/HHUu/QIToJ9Nv2p+XX11j6gf8AUGc0pJo
iZcbMnmnM8CLEHOPTyg1fMlaskLH2ozx7+y+Q3l4hyzNp/Ki9fFYq2Gw0Dprw5trDjt6gARqctfY
srp1WeuuuZNZDm/D/DJQzeBlPOqwIRaRATega9Z5rZgjM84pPTm2vg56fglXBrtM4oC2z2dqzCyA
9rlzJAlxQBExvyUvQyHJq81BJobIpC7z+6+rMrLfNQi0Np28wpSyYL1/Gb5u8+gV6Bjr0lxhPqfx
eHn/uPm/6htW54Hy6jLhMnxJ57DHWBPp0ZNdZh72fH/cFH3NsTwYzymZXLBjXScdgVGyNg48jBIY
V+SvXM6v4/HzqFlqrLOObdAemDOacdaKrZ5O4+l8RDSO8z3Sk2DlGgXGTM0/A8vMC4LTY0b3c/h+
fku4NDz/1KIvL5myOq6R9igPCl4tC8DGw9qx1aygpPdMdFujOG3ElhtqB8nhon9TDNkqbGRUuW6c
oDr/sRxIAKjbwpNEWYZa2oGSnmxY/SJxIAz1ixZWdNUyqiXj7IdUYdtJTuQe94mnQhofbAimks7w
ltUGJmXLJBdguzm+n8mUjHMsFiVLYaHAKfiC6I5Ae3a7x4qXscl2ii5UFNhccIbuMCP8Rcea4xh9
WYRbD+X+MZGjLIXVC3arjtneEhQM2jA177i1Bly3/psyDd79DwRCnlV5KDQLZR/6gHyo7IRF7DuW
upBO1i0AhCVm2fD52WuiAANZKvHZ1d4lllhendUbu309f4wKzYJvk1AFBsRGqO26Jrw7I9kS0lh2
R+j6LtNjPmqvuQsjTEFU6DR9POLlqUXJWRti4anfEsvglFrd9lmiDeHatlIBUDoIyDPtPl2/DSUa
HzZxAlUjrXh3LJJhPViywVk25+t5SXQ/9X1Cwm5w+2UE78tpY5pU+jrC+i0KPM4OgRRubciqZ+dw
OV8VpsmmD5kmCwbPXeZjLOdB3zYS0+cDWv0ZXXM9LQgEiCLHaM51SHzYSlhMFV1NU2Eke177bYYp
lO89qZ4xKtC0cDik84zFgrQQ6Nh9JZ7pSBCKhqvCnRGHSgzBNqbc4NeV7SxDlluXWxmuh5fp9GnM
9OkDS7gOyZEK6WDSJ9Ey3l6eXXyewfkjahjRSHlIEpnZ0FCsdSRtWydtW7y1Nn3UhgSpnXB7lK9L
fncK/KdlAOeR0WWcz0Ys/msF2lEZa1Qk5KyfY5t7mlEa8nAa74TYThiGed4+0U7QPqKQxk9UKBov
g/BITGN/Rz9ps0oKNKsAKl697jHZWR6HmbV5JnAoOOT56e5g5/EBivyLJRlmmq0EKb2vvQ+ISVf5
yV6Dy7sZ/4x/X0gECYQffi8X5YdrCc9sRJ2yv5V08G6uw+mErltyl/NeKn7I8kb5JJcqb7K8Uq5c
L32C4aAjClxoH34wB7W8Tw9LP43ZtcPpgs5EfGjWYZrVjqy1ihBGT181sYG3CrVjBUOsm2KWd8q+
leFM8/B2HObhdj79GAclS2SmWklXLMtLZfM7+bwK5ROxe26Wt8rqxLuvYSxbGd/uSIPwxUKjiM8D
/VWKN6ctxIamWZ4rU9iITwcmVRbKS6bY3hTZf/sZ2xqx2E0D6baZWKhhrB7lABrpJZv/6nx6AJ4+
ap3S3nF/nPp34ff/eFy/YYg0vrqQ7WgF1yovgZU6MQyVbXIeTDiBA28LkWrJas9f/ud//+OkXZic
42XxLO35R1oA0uRrCUy8arbLDnETqkbrTAANDIE1XL32QQVhFQ1D6jF+tWE5HyFUEGXew48zBr7z
JBy2YO54OR+/YfYMvND36aKhMOtGBoMNwFOPyS2jjabb/T+nk3acOFS9wX3ZnuXj9YFk6xbcpIJi
q7Z6QsNA1czjPr0ak3GBQpJ5OMTMHRgiZxg8Vk2Cti10nLmM1zdwpD8cm+BdQYyt1KtlwF1DB3Sg
snc0uIHaD2oh4tispmAn7s0Empcd8Mf48u18PzwWiI/QX6lQu5LjGX3Y3o15RyvYjhTz0hvOOViG
zM90oUK0+IeG1qxbhnsr1ogY5pwh1fN9JJoRCmnBo7lO9i/GBLirKtlafS8IiAXjf45BYcsx9TYr
fb9y1m0LfeTcJt2pZNUyPTocN2X2lMFYizuclnMCYDTEhq3nAAEcgLjPI7jxGjQ6b6RXsL6k5fHy
cb6v46XPt2JoXU6++nSNcXhq2rJj2KbopKcGpBiAjbKlPHExVnUiHNMWzkQC6vjDVR0+S0c/Nl5O
ZruJd9T+i06QhJ2GM0+uiB0QcitQ2VU14tQNqIzDeHv9KyLBxQbYMyPGntn5mh03gDkZeIaLMkAV
UGVb8Po6QFyS09e5RP65fh0lc6CPW5F41H0cTf3Qx01IfZyHHyPbmschGKv7ZP4f6Kaon0HDsk7u
3gV+OpBIGIuGKEIa7dz5+qdRzzOggC036t527hmW5cc0n7iqJgqRBahlYhWYKGkLrrjxH5aZ+XG/
2wsLNkkKtYEPMRfFv5GEVgggqbE6RM5wwixAaiWMGyX+oPNun94vFL3P6nO8QyLemIN+ZfDEuI1V
r8Bf+AbkIzwBEpmY749L3qaRtJbVrA7VDFS8lwOdnGKqVQG62ZlqpAzu0+HlMhhz3+NIjIkTtyGb
xq8P6+WaplQ9G9xjfo0rZrGDvYGsZwnNVrKaJHZIq6oh2AUa4YCvA6hefAWlv7UBI+r1Pk9IoIRc
gck28aSKmrhxxh+nrVL7fh7jRmzJUfjUPDNnw2GV1Mquai53/PIw/cpC7+4O7tD77MqAZWbjnJPF
YRFoybYoSb7ROqskdf0/QUkaSfULOgto6fzFulPqc+WWom8FQVsE8OZhxh6RP86ne9znKGtxTnYU
kB7ni1YRUtbekGDxAGeOW35SanoKW2aE/GOOND6jO1mEtSresiRbEOsGUrexzVrJXFuVHVppP94h
wobizZoDPm6NiYDT9HGfx7hOqtmdZ/jpWMCa3n8t1ZfBJMz63kZG0kig3UOhqER/ARAEHArYF3Op
lPJUvN3s8BkxOG6JUazT8YzQJbc7WtM6lAFcgfgET3i/Z3gy/wOknOrH5ky6sq4J9l65dkSK+qk3
ZW/uYj7e3ojQIp7gaNby5aeDetZex8/ZvJBI8yoSIf7IIbRkEcCW9tY41Bf4IzBsDPM3pfCnzGup
js+JIlZTsUMQ1fLm3n/3WO7Thzuxg6V8PCr7VPltpmoRy67xBiqIyGkO30ZFv3PFUTPPGQ/6fB8/
DoBMNQ7pwwwYpQOgI28lHWSHWtW6s/0JD4D1VofTHIlY4Rr5dsFlyF3Ua/UnKVg3XaZZcSHz0Nfz
7rd96nH6Q5wFi+zwOk7+IuxlSEjHmlVMMZkN1/BjNB7x6StCqNjI68p2kLtb69mYVcMLaHw0rhRh
Vkia+kmb7QjF1JvC2kYeaY1kxUeq+rAYteOmp9Eixm+xsPvAACXfW3t/jb8KCF/kqtvCG9AojU+t
YVcdccJZySZnc7oUzbQ9FR+zRitCoZgsbBUdBLGWd+T4jtOy0RC8fXrlu2CfjU0JSY2jYyVDs4Se
4Gk8TjNFCcJuIfGf4U2tGZUADQ1mi7MTyD9gvwDbAc2359RmtKy5PavbXP2O8TeNyrqEs4CP2+L/
40l3voU5B2bY4cc7at/ECZYsuFf54J4bBNgJNse2KKPVrHE9PSElnmmFmR4mr5jKYTxzFPl3hqIW
+2cKp0FBHLVT/ut70kzJpSzEaq5yz8c1VwLTCgLCigxrWZ01evNVoBSN9QTOy/2u5SVYZJvdNHDq
gJvJO4zE1aj0faLUhFcZrKWuV4DjzYhVLOg09zTaRJf0YBZOrGb2EMo+azW8fMZDXWQQVZLKsO48
GbE6BUqzssbQKLBI2yeRgiZ0z23NfryDC16rrpbyQFYjoJZf2x3EBylELxoIXM+AOvR6WfMM6zqX
7HA151NuwgrcDURLeViuj48Xc1Me1+VxA3CUouAqZhUwzQm7gCFDl982WvNdMZkopf1kqNyGBS0T
Y1q4h6ZE+SppJpu37tpKU+RDee2ltLG0S3jEQDSkmIDZhoiBG6j4gTHgwNK92UBQ7B0hDsxlYnt7
VzrmDywkJMyaEp1NaKTWj+TT7c7XoXQoSGfHWRAdqXV4rD5oI7SuSo3b01SqdQBG6L/KGZZpeTUr
VMYppc2hnR4ugCn++IDa07iqwWFyPx32LKwcNnIcyM2AZk+ZSOdHqFhczJlDH+ertYWMbXo5u45c
1AgmHrupVjIWu9tUQVVs01LWSU2skm0Wt6awGzpY8EFvC2UcdiOfYkE2WIYniKnLWOCOtq33Qz15
hYt9tajKlOkU/i750jB3rcHlI3bk6+obKlstzsf6W1aZqo918zDCufxfuQ6dAxThTaC+2eHrWbM0
Si6CRirYbBF5XW7mG3R+VwbK1oGwZUUr+qwoHJRz9OvCHEXehwJqXZa1nwEncVXSztVKTsUOlAuI
HXIqzyQ59TQjoGFbvRFlMl4AI5FlmbXOTkYgwn28GekJ/w+IYhT9kkkMa+v52+sK7BcKgKQNGXB6
nqEYIFBlS04dM8vi/mK1TpTsRStlL558cz2qX1ZtaPjRrfqPv//lz/+FK/wDRXh+vQwv4yUCZkN9
zkIFCN7KNmaKTZ0phjFhV1n8vAoTo/SWrxPUEt6N+3R+Rc5a87/HraeiZaYkZYE3UXA9rNswDjfm
INm7HacDpzzixgIlQVU1RVdFUNW4k1WtBKfeoBhuuFsLS4W/cOyRN0X8wq/ARHwnbxHjZQvem+tJ
DU3gyrjf8bQrp+kB8DtVbtAEM5Egjjkd1mmY4bEwix3/Gm43aC3433e8l6buwkBR/v/IyJhEuKjN
Q+hPGaxdv001R5Q1HipCtKVEEqwiO+hKiw9/xWun0DdduOkrnzry1JyhXSc5Worbz4FoaBqYf9Zb
Q1eRi3Uj33AKBjqBn0y61iyxgWWxzdaHcPDDRWO9qrJCco1omAsyCi/j4+RASNOsiFOWSGSl2DyW
efj9f/1FAT9scAMV/z5tq5HjW0i8f2xXoPqTLAa4MDq6qcrzMDEXBG7DWC0JEcWXbiT6tpiuUTxs
Fkxmu0QrpOKrix7RKZsw1epUDeooH8+J1yBRmIIdVov/aAQrfc1zTYfbBLYHpl+MuFKyL0y+MrIw
Cx8hSIHLJOoBvjJjbjZIQKOV/FhujLdx+hjv86cyjJca2IE+CxE1EEi7Kvvd5L2S2rZNsBKoniYv
Rc7SVCSWUmslmz/MpS2Ee3zGNj7Eq6nj2ug+s0VRCeAWQfJjnq5vUYQaJen9zkIK2Zr1PNgJitr1
HdQzrXXJiTlL39OTD7fwzLgyFE/7Y9VnEUnbKhY5JW07CaeDFxByW3Bw8d4sFJ0s5PzzPkPBeKXY
xcwZDIqJ0EsJOH+cK/ZCOU5mHVBXVR9oQ5t/QaY8Xp1ECQnUe09AAeX2cTHPmE3pQq/xUTV11ksW
0QfGaI9QcfjxRrs7j29nqJ9JWBatFL+3egdCFVYgmrVOVxK138bPl2mYlegnt7b8KsOYIzhzfzkv
H4PxCpSAo4jOWe0/HdtDNYTMT3L9Tqg9UPo9FRxi5O/Ws/JziAMFrcQSCE+4NbfJpGqMznHvdY/W
KaWI+daFm7WMRFuIph0BHZFbHediMyf78Kp1VUmh4vXk0tnnhqFpGBMYBU3Wce7TG2DP1IAFlct0
cXyeM1qtFaFUOTDb1bejZK+FiGVcDEt5IcpsaIzk/lQM44WkdVk89QbqQ9dCbcbxB/jUvM0Bml6D
QNSSy7wm687YDyYJ5q8ZSzNrX8B8PSfRb+DCz991ydbmIgzCnM3/gqP5K/UWVwRjIznizmj2npfi
FnBXHv9Rs1N27sH5X0pyrmTJOZa94Uf7RfOnZGTBQH3jLITgtoDEuWlKqOzVx80HY1TGhXL7KgmQ
Bfjx4XraaWvmPMDB6AVwu7Ei6mM6nV8VKBYzeAH+1vQqHBCN+EJBA/JICVjxPcv0enMHzAnWqUoZ
rxXjENrsSmW0XKq1c86B7U+VigY1eRtHLTFnfnrcE958Kb19l16Is1rgbcwzBcLrg6oJVFjJiome
Ar/8RmOG/6D3piiZWmaWAxzW/mAxK9BgmAPkJba4NGdBA3GhKt6LqpDehvWdEb1ng4iK51xJQEWf
XBnt5XncTpplULW5hH8wV4RUMbo6DiFyeB3Omlqv+QX0TcWfyz6UkoQtUKQLXR3KjQ2zcnNYuIXt
DMGYOPEymQiTAzgR8gS3C2I68RMsOeNIwxk17Ej7kE05qzTMPVE8lDeAgbdS0NveoyTKbTUjcXxj
KYRSblDzKFbrHSmpdtZocehJpITlivBo283R2gMmMmYFoptzH6feoBb0Z1MxDwJDg6Ua/VIuWZ1J
5oSLC6mR16KqpQdjX9t6ajb5t3Z9UIR2JpWSeZPa/CFhe7bbaqtCLJW6TJOK6ObdNHwugeTHBsDk
9Fp8Sjz2wVo33B+vr5Bv/0hkWimWILqbLGJm7296pEIMBrozMxdvej28gHdnkSoK+LqXJXe41Suo
W9dLBe+ewfp7qG6o4nxW8SA807wuEPbyTYeIl9XGDOy5GUCZHnMfPqjBPfYKU0xdnsnzRuoOSH7O
asywUXzbFOq7V+pd5LKwTTkPtEFJVvR0khCzWwPRGY+c0qtUao7/ZDXXzs9PGn0Fx5+GNzJSwwMj
Kcj3XOq4hRcco4ULEjIjV7djkPgZV8WiY70WvJGMJMXrkGIW/abEQjNJvTP9cVgG8HL/lYi1cZng
w1FBgijVn6dhRiorN7ka12E+Hw8epRCfRd9IcdnnCPGb0c9KiokB8CFFVPe+msNpNe+x6/mOpi3E
+BOZgukavJrDGFiSIdhYaHeiYk8blqBCOvs8Yv/v8mhL3kmowtNm5cRPQW9FR7bSa3U6Esr01uI9
IsMGowpThMj5qfjc3In3u8Z8N8KZ7olEcRWFJGYbvMY8/cA6cqVNEpNKcLWs7+2KN6hUyUiXM0I7
ETybqHYuWPqoIGqiIA2aaPVVN52EjXl2C5Q7wPaFGQE28kO4NkARKFlhnvdHHdazqw0cO2BHrFWb
Kfxuw1Hsvt4RjunfzDH92Rj3/0FlxbvM/YZDpUqseOm/djtz5XZ2kkx4Mi38Y1SCaGV4khXPRFmb
53Ue3lT7sqkbOWCyrRk0l/ShB+GaKgtagtkczrPTWipOaymJBRcwgQBeqqEq2UiFtCgLDd2DLy+a
PB4Bug2Q0FdyhJ2YX9lYR+Ziq9nYlrnfSBnU7mUIxQXUncw7AUKCUihkmimWZltIttnXAvA1u/AF
FlAUvTfM1tulXYqiLGVHUYB9UMwHyJy1mE9dd9KIHH/ljHsyhMiySqQaGCaAZVE8xm2eoamj3tOB
EG2llGeM1FbZIDISd5xdqxylVoGpR7xVG8sdYzkJF6Qtwp6bQUgR+e4UnZqH7mwRWulMBFoJ9vJJ
uTotCcZ8ZFvb1ti38gEyw8hlRz2uW2xF3UvhjA2ls05sUrDcRu/ZUrHIBv97W2+DG201Cq4RVxuv
FcaKtlxkWbcj7kbiF2ux8FOTODvUBDJ7jrpLOBdGd8jCuHaA5Xa+OqSZ3vOek6j6LReGcex9Ovew
GbBT5nWZFroOxMdycAMrw+XKlrPrOt8v8c3uOqkvhB3kuxOCuOEqFWCxUgI9daqwg9EjpKugX6aa
kSyjliojO2/MwoXVGMw6GLJYQ3HuDGrM6lhPyg7/cnmYJ/DjrHRFr/tC6i7yvPNsqvvwmnQkIivy
8+rRJlVWumnLGUySq0q0ix9XaraHnKAqFbe5eKy5SoXuVhPc5DzTQIG0g36NEKitwxNOBdeLlSMh
dtnCm/tQ2T+KFXr31PRgO9rLcNIX1jCKU5D95fM4pBwTjWMsLD62PPmOXYZPhcqYgORPpNduz8OK
D3IlVHKoYkUbumYfLQa7wjcfsQyovFSZaxu2aQm28QJBL7Vkny5IphzpngoXWqG/7KA/Q2Gxj+qg
WKujPRt1vr0YvuA1PhfGd86sd69AlgtEWqHDx0WLjdHuFFL7knVdH+CqUQ2eLq16vz9QBdLlEWm1
p4KLNtyrNUy9BeLvx/toTOqELcLoxVmp1PYtgzXyoeHhaKxcEfXrWHCNdozFLqQnlhMMiuF2f8z6
3d5IhyItHRKOe7FSGLnVsgiOMEcy6QAswrhkFmXGrdQs1w78bfxEF1y9sjXjgHdmAYyR51WhOO4s
KoUXvXzyFa+2Xh6dT8Vf3JAlh2zA6PLdqAnAYk5wVDMeJQsnsCblDmQAJVyWb84zCjyx0SKSBRvi
nA7xnh4UCZfhPk8BkEYJgDRSqZ8IQTLejSsDV8gA+07iL3hCwpYKfKiSRoijRZVbUlcSLNdvkLVe
FwfeSKRs8q5XIHrXSU8ZNJxNzteArMgPvW6ozeJQR7XumEAAIjvWcxS2VNAZmXTZLIhw/KMZ6vco
3v5mqed/iVLlE7C1lJDxXVFnyqMvomj6d6wg1YMBJYuYoKjuvlhG3KxuwhMCWcjYoNMxawiCVuSW
I/aSlwQyioPtGfv/ClhGfJMSUiml8rH13R/nSJM8ChjVMkJQNAspYKYEiArlTTnSlCv1Cf+k1gbT
5btys/gj9cG21WC5ojs4Gece+zsrwFMxaPcUOk+W6pWcR6UPjipMXitZHb8k7Fqdx6W0q9dTX1+b
ZVJS32Uvk7nrigWuWPdlS0bISryTQfxSLhT293gF5rxYcF4KGNeWmzSoDaqZBV2omQ2r/krE56o+
DoVlVyANyBCrC7weMkbFm5KuznsxdW6vtF53W+RivfIGsZ+olO9zKU0SZobvE5pcsCjXzyGRKWbv
AjeoeU6+PK5n6FKeBqmwCcLddjx2tubTAQxSCfRa5JAMlsnazSuZqVaKOieqVM62ijQZU6+7QmJZ
2gNAVF50qBvLtY3QSnB5ArqBWWOy7mNpUZxCUMd3uIwDIiKv4w+YuKJsGjV3IpTyK2PlIhEUVOBR
uQjctVwxWvKAK7mUU0sKmJ3Lpi7MhgsoNCUlnklPhzkaitPQSpfHC1yftUxWA7VFJbV/4OSGNl2W
tgNqVpbM/Htb5TGYt6PdkpKnlb1Hj2JNOQ7GcAE51K78EtMr/bvDP2GU5m7eLhajKF6A3zMWJPV4
kQAvrNf1VdygBZVcWIQdCak3jUmBM39ubuKOij7m5eH922ptKPh2PRXU3BBp7JBQ3zpGVr3ZonYg
j99V314EZZOYQrGVDAsxHuq4ri3Cf8Mc9iU2+6oV0YYE70N6cEAveXSeopmyeH8hZojYm/rHefr4
63S+alUaotmF1jv2moK6a5fcSIqjnDPFeMVpHEooF2JVNbaiNoGszDeYlVKUsrkiZXPpbrMOR+kb
XvW1gmFOyqO6baSw0k8jIoaHWQBQt0zj4ixQeCO3ae0oFH8pnGm92jD/OV4mguYakzJl7mQb9Hkt
1BerLPS12B5JbUSgBGvaXEKe72tZVSj+ZSWBYxyAKlHv02wwTzmnJV8+hhUFS6A6R2Rj+Yffp/n8
Lyhxv6BloRhf+abgo1EX7+t6yCmiPYinN2kfMqmXgVqXpQIzGeQJdElhC2efs2FYNmDlZ/xmy52k
njFMZuNR9B7NX2tMRVlYtspXqztMZVVI5RRfDOLuDOCWu/zL24yG7e/JgFaMoI2rl4ehFKhvMzIZ
XAwz4istRnGqujbmtToHT4mU7nCllm/nG3lSYDspfqJo7D51X9GEAHvHhBoMIKSA8DvoEL+iEKuf
7N66uZA3b4NWasfAJsuUTn8xcAcZyq3ERyPX+ShEVr3Yxs9iDfdSBPNd8flspDyg/x7JDyxrq4M1
nUbqMRGzeEreXr4JQL9sPOVTX6DHYpv46a8atqvk3eWbDTcvY2ug3lXxIeo2JGev2dTTZDYl77fe
PO+r3U2odV7bzMTCLDRWHdLxC9vxq+2yqGxLFU6Iey2M4QJApsOLsjWdRCyvWAyprfbVnOwSW4wi
zctFyVBnKgvkzSjX0ADfcUfYksbO0bazqXnAGw1oJ7i+WWVanomfqUUa5bKlvY/GfGlCfu9ZYTYN
pUZ8aSKs44AX6PQ1LEGpmKNfz9K3MOqZ0QzYPQYfPw+2FMewqD30XmKtWGg2hXTaoXraJWta/9YR
3sqndJ0O9/fxY9zRh4Jtjs8pBff3Ou29d7n0xOyMqGcRltsp3RaaXjqrBOwn+VT9oDzPz9sSr9aT
eRiHx3X8eaOeh9iQdlYC5FUrZsMuw78+bUz1gh2IAO1wnCgJrZBuVZXYjQy3Df97/JMx9o0dZIw/
Rxtie7jAFQTRhditl0jICyda8KPCcy/8Dy2HI1ZE6Dl3GqcJX3bHR1nDWDBJmFfq9AsvJ1hsx44G
XCLWhkwtzmsMJHdrtsPAl3+c5uQ4ZThOy8exgnTnUKV/9VAmUPZ8KLsqkB17d6r0z5Yh8OWp6SEH
Gs5fB4wMBpcBkhhfGcvvvuuS6sYakhQ3tO9+szBY1AmL23cTSu0ErVD7wtKKWtn16ccVITQn2y9d
M/WKXjKy7EDYMixeU04DtOEA9abjdDK30VdSKWtoDpEU+MM8KwnGnBWYPAWVjdH6MfxUsCG1BFpi
1NPpAjsW7cLmDxbHcDOi8HzfE+Asy4ZF4jtAHDZBBzgeZFn7oLu+kHpwhRPSlJgb2DamME5Xklq2
qjm7IcQFbGUriLKAWcmmyo4sJaX4yYWUWQ2SqNPrq+uUxBNoED8kEkWYv/ILlRQ6jriLZMVpbEyl
BM4yNv8LHIRtPRavmKA8YRcG+qSw4X2a/jxZLm61ci5nHRaZpJNH00ltc56CKtZOD2HgOZHGKjgu
x9dvbPpF2vvseLeVrarVyr4A8D8Pt5vKT8j6DwYPAR+3Iz6n/I1rMqU8eREd81SB4PjqfBpBya7y
Mq8aQ6ERcuODTnnDGzRXlS9l2PT22leeW7Bto3KyrNh2EU6lXFkBMzVYySMdNfa2+a5YrSRWHfHM
JcQdMdOVuFxb6CuPPlJbQiXU2Euhf/utW00CFcMIIahqkx1Skoc9E9sWq7kHhVW7FdtGpolr1y7A
YC4oYbJSoUbf0/Wz0CLFCF2wnQcSjOacINDHttVdU9iY2lJhtsZtAf2KciDZS7SX6tQtdQJ4MBj0
911Olb3eJBI2XLeOSBPzB2k6zabrpEfC8Gk2ckIvRqXSLKPM5k/9Uu+jkispN83Iyg0cEDTBjhRn
W4iXPg60VszPWqpjFV376YoACr0BTRsmFq0iXreaVZ4qCVyxZ/t1hGro7+NXSRoqbviAtCqsxFnt
ZGupOuTG4wp47htEZ91/kYD0FrwzL+c2pm6kLwvc1rD+XKk43xgOZQCBYGpasZs58UeLfLaB3Uy5
sBRStOElzoWnb1VTwWUrNTlw3eDxd1+n6z31402ZK0kb1g9aTdXUbS2nanCU7+flMUAn+Zd5/KHM
RCYtspUDAJb9k6ZBmqyJkyetKM5EjyjK2zK7DUOfhZpqtqlHjdeJMy5se25w9rIUmqysNnznvdiY
Is2lwbm8iTE2CxXTV9qaNIzRGWGdnWhKQgz0226LkndBxT5dHctbnFz/0iVdblNzpKlXT6TctCxi
UfRaJx0K7KxCO9FJtxPhP2sXs9HT4arNEupWPn9gehruw2G8HicVxFpmjeR8ZVrvripXO0Xd5+F8
2YNTbfNe6Rp/hEQd7MSn0WHzdE2RnNXcvdpSAhKomTjYLuMrEAxjrYmCE1TQEAloddlvMGz9tmWv
e5h6R7CqFS9cjAtQKVljYBnP4OptDeI9SXhkrVh9FJGBHmekCEGRQHe9RnB10CzTEq0UEsykGIQv
FUjbdTlHTFcbXRFhYMsVhVHLlvkzTkABTheNpIjR58H/PsYCqLhFLUL97W7VQebjSfeoo/TO96it
x5D7yaVZC3CAzg9gxU6UytE6fTqXYyF2J4m9FaVdBlMP7CqsdJcaY2qdtapkxBi701hILLACPBK4
w76JlzKuQWNLEXs5f6iRHs7shkXvbQyFliiIq/IogFyxNBoJJPphVMad8C/YhmbbKCVF54lTqDIp
jYsgUWIVhKIF2w0QOT7AGJ5jEpgysFWYwm/8kNT80Fgx46zkGas+TFPTcuF+Q80JsRWlhmAAEF+R
q21ToSSWegmTgAtas54QmFkOxlv58YPwFo/5goaElhmqC2mWw+k7SJNTFFhPk2qkScEmYXnUcjyf
2QkqO+XHARs2C6cQC4HQFFoJ3SBvckoe0YBd9DJuNnrPyupc2l1fh/xbT60qJBRFuPPD5cfwuRwe
99dDp4xUxS76OpLycSscnLC6XZeAbZVHsksbv5ZwH1aDWTmBLLyjvSRclM9rCeAWu+KHC2QXIiYG
rXIzXhXZMmWEUjowYZ+URZVPk+DNTR2oXjHZmU2JyjZvN7HCy7Dcbezqh/HuoJmKmshoi03f1kxs
A/C4Lo/bbZo1L71sSylhQEErwrRQ/ErHEpa12Psg1bJGISjNSgmWLuhvb84pSjyTeh2o4W3F0eDx
OH/Nhamdr5gwQ7/hZTp9KhMspF4kLhEAnhiQmCc6IhX5tiMSafKiNpdYsQVFthAZrz+rcbV2G3Wo
lKFS7PctmxdznVyF9sunXrBVbHvbhcFw/MQXi65ulC1Cspgt/DsVodf1ksjz5QnJ9rTUEMzLGLwJ
Sjo31R6HxssljCnnFd3Rz6RnarNG7d7smpZmmfUZQ29XyGu8KdtNnARZtglEa9cFvVxyEkYrIHGn
b1pvkPhPqTXrLiVSolXWKSHeTX8RpatILjtHxxnfg9moXTw8ZSm2PFuJT/c1VS1KMahlVQUn51Ci
eiLVBJ29I0zBclGtVwIr3Gawk6CjBQD34kA0KiwUQxlruhphzLhDjgJMYV0tEp0HsfQVQj5KVG4z
Rh+NrJRKZKUL6/Zzlzil4ltKCxMseg3VKTvUS3EaVYF2igKtRdqIbR8Ypf1LHS97RUMqXcJXboip
nY++omJDxMVCDDEQalFygWJ9qW0iZYnTrolkR1nGyvBtmnqlX1Ny072Y5HsK9Nm0+UkbrOQ4MYBD
FK1lMUexZy81CGXfJ/FFSWbWucwHrrUHV0rRRAKS1wF4cwD2bxkbdyANCw712N4pW7wOS73Pj+tx
UE3qpoxR1zjti3dJDfW1eSWF179Wbaggj+o4bCTdkaJkFnCJzRKt4F0pDa8AhnkZbWGBUpOfi0Hk
kHhDqTNjdjM2+q7LIk7KjgAD7TaxRBOmQ+pQD9hBdZxJITe5siqJCgT2N1nKRCGl3gLl0Bvphqdb
hiswRK/DYe9sdfIzlkIRmZXI7U/tY9fFGaNwTe8jJQqaB1oj8D70p2opLX46f2i9wMuuVwPdBEJK
Y7lbyfxTHUzmrvabpuHO/TGHM8AFVyPqZSN2TqBIHyJNran9wGYF8/n6LdXzu9zwQjpmegSZJaLi
TZbuI/QyT9/Ga5JHyc8CY0Q7MlkKg2G3OaGg9xcKjQR/UJ2JeZmn5iXKggoJ8vivafrwfWcUopR6
Q0pRBWSlLhGbaH5VavkXrI1PlK2XPFfiwZ8rffsVOF/tetRWvIz7jcWkfMsy7OhLYIhkX98y76XE
qTM4LmfzsRUzROPjDMBo/SUZHk0c3AL8wIDSoFeh7Hev9Qj27RDtvO680YZiG3OXCJ5ol3OVGDwP
Ij9Do0tr1cSOA7fQ4sO/TC9YM+nBaIH9DX01thVa2wpgyg8BWGNLbPTMbau4H70IUbc3y2ga4PdO
NyxiVh4jLdeq4nMuPEPbPuwPpfD9dErfS2Kv9PA1JSTdSsal8f1dw9wRqIL+kADmF9yFb4M+5Zbs
cUJ4/ohcT9TU/XxN2E9tufHtSiWGmMR8tVUnk8dsaIexxeOVbhBKfMU7byST1XGDDT+TziuPbHO4
LwY+aDZmad/GT+SXVmIffvch3d2yEnAPP0chqQJia17U6m9l6Nvb4MNfNNZzKpXJ1OZDX8TY9blE
J0Yf4vo+oFmdxqpWbuoRqhAxTJcywa5UcUHt2QRCohGjIRUIGzfEmoTXqy6obkOlsYVAu9Ihoywh
jaSYLCJ1qBWC1/PFKgfyfBWSBJKFWrf7FfBPDHm6kVhz4Zyz2BAqr4D2dyfimclpX4O4XsiPEWjb
tCvIaxkyvFKBmlZvH4c3+cXIGFEFFup9pB7RTRZGf76uAY59blHV1YmelEhfqGPws1p6UfaAyGJV
bi970D7R4ZyaBA6+EcOG80ig1C/iYzeoQ0stSAkMgnila90CojRWv2XvBjG5QgDbCHPlirF4L2Qu
LCpZqnBFS/A3comxFRc5ZbZV9JiWMewkGP4KtdxXAMDR2LwA4HzFkh7jbkzWcqCdUNyOTAwCuvKK
BA9yW0oEY1QHe3VcjCsCFA1wKPFaSEBq+nlDzp1xb4haL6G5rAxRiFxMku9CXXJ01dHVkuGxOjzb
ltDmEd2tXZ4wiTgNdYEmRKHUyb2MgHCgTjPQ4uVqScGpsn5J9LWrC1HXYLWU8YsUN5+HvxJlVvvA
mHnopVbreF9ilCyLLragw6CnZYpOzLenPUiSmIreKlXSPe74kYw8fD9rVS6BAYVKo4hZ9WC1UKW8
BpfopY4ZMchCjH6GhmqkDOIa812L0hI5l4J3wc03QTvmaCh+RSsxgz5XOWjki7yM0/sma3LX9S5k
nGVKireT8rOuwZ1NE9/P94vWKmHTjafg6h5Saus7sdSdAcrTn6diE4h8tdsHrWihSlplENlIlYLW
pViM78z5dwgqjEYQJmyjqu4kYb+L51SpP2gkCuXncInC5trnUvFMivXJXTrFIMmkl7el862UGyri
sOganYBlEzosq51fCl71VjL2MfNSWf3BTMT88/SGHZ/MAwIWD63+oGTIf6LctKEusy5zp5AcAJS1
EsDHcRo/jndeaDp7etrhGE4y1TZY3rFBeAhk9SELZax6HYs9l9m5nsmSCDOCr8x4KkIJGuMpWDNy
gvxAiBRr43uzo78hza1YhwSrsI11dsHfiFXR0fk3/vyRuNd2Ery/m7XZS5A4+tavD3BMylSUabTh
cfX8EuJcsEc15DajgVu6h+zcWTMeGshJuBhQjkbYnDt7aTtAR3TihTSEW40ZakEo+0mZRBsug0+C
4h0YOFUXUvOnTbR4AeelHWtP6086I19lFBAoUlQSeTOoNsw80HjolDaoiUqLKO0hfVgFlU4rBWRM
RCi708RXs2pCYoBRyA9pUuzOca5TVukPIZAYhxWNkbMKLLSI+lBiJWwEGqSPTyTcncT51K20OfYC
J/ej8YcUkEHiNPAtW1/QZs/VW1ezwdqtZLAueEo3seeYb+YTr/mkHfVviAGl/E0lt/A+vb2BDa5W
iNN4XsUx4AYXttfJkdLRXyhy118ZX6YRikwjKweluSbtjvQW7TC8AlHf45qVILJ8jzumdJNVmotf
Eux8LXHigK504f2kWqmZCPRuJ83Kx9ajDhNNqpQMAboDyQ6hdOr+ObEAizOx4tY2/XwfvqaCywUA
5OI9NBbkeFLfkd9axzIWGtiehCFdoLshuwkwX+s4enik7MW2XhvfCuLnP5H59GjjPmcFpMVxAd7o
E7t8QdnKHsRCw3CyINcaS8R1Ga7f0hRPrRDR31Bl+byeVsta1CIdvfl1GiSZX6wZCwRz2ra9MpSc
cC3yx2MkmzwQjGnvQ+znvcRRTuFYiGVa/TC9eorwuMYiJstMKlqkOY1APWlpdG0XsMXqw6hQo2l2
T+TcWlMLQjqtvS0UXzeXkHex9pPYX+Xl09JsAQ5/Pmvxcw7M5bEVvGZB88Cd9c5FKSLgMQ9DaTeX
zEv2pyulhf84Xy7JAEHL4laML83XY3hVpYLWG0ZYyVQwI8HkWwR9ddGVVvmscobuBW3R2FwncK1B
UFkJSLcS96PvHWpx/enKsbrrpGyXGDROVG9TrLeUIJiuzktPQxe8rbPYEvNx16lI2APBh9c/Bbvo
VVCNjWs/aqT5fNVSyfK7k4swHNoIXt4/tMaNYiRTjvAmQ01ttYFc0EsLKJoO/t0pj6WQcXa8CYQP
+SrkKZwbqdk2gowF7pV4fRUM58pgruuA8P80gEKdiWfIO2ID/8Zp5e0zg1HR0vmmNQDrumhAeo3x
2baWFngEsLkPRWZq6Bsl46GnlhtOeedjnFTcC9YoMs9DV6cdPc9ahokGa7srwii87RSqpeoKntLc
ZhM4oyNDd74Nt8PLQyFBavIvd+XqlWWKzC221iVV21mWG1HGOnZjcXairJ+AnZtOhWWkQ7AiD0sJ
Bvfl3vb1trOwveW2iA34/tKTKbZluI4NHfK6UL+vqDv50wAsg/g2a6y4hiWKWdwozHbo2x82hVJY
IlUd4N7wv1NAD6LlvaFnNkJ09UnNlVBgZ11oxVi9Cmiqd+M3/Ujbd0UmMteSdbirorGR2S6dcjfv
Xcv0ZxLk+T68pBGTTdNKwmLD+ZuCcJViK2qXVlcsGhFK+nq+kPsCfziwwrxkWCD3gSlYV+PHc9HQ
86zcLRqDxSc4gbGx1K4AvfpAKA14Re5aLErdA4U8WCCRCpdbPzFmJK9haIg4ja+vZqqLMlEfQiuq
0hNS46j0zgDklYi5FozsKkOfvwtq13Asm/5QRumkXAEbI15ES983UmpovYUwxEKJmPczxAy0Ztm0
5WUYZSq3N8HFk5X9ZQHXwl9qPwRCbDH9oU4l78JQZ+XHIQFxvr6P8/ke9SVohwop5sp2GPDSRtdc
10I+4IZ/zNqQfoHYHrW2wemg5hTGVobgYXYQ9j272ftyekUuRSmDN5uK4OZNsDdBCTbYIjjYy2P5
PFym6aaMk4UnZbscjUd46Qc2JfOuHlewNbQ+aXQP/bExnHWgXR836OuoQVFpcrmUwMJJrb0rHE+w
QgpMe85eR9l7SA27Tol0WtE/sdPBg7U9biBI5Bxlv23KLlVSNoBteCIlkPNIN3b3fXoeRCSGgkSZ
RyalsvD7NeQTnF3y0Eop7QIkRDgoHb2yy35fHLMLY7VzQMDjaHwLozESNeuMNBmLL4p6Ux5u8dt6
vKjNRXLY1VuikJ55M8PlqMRYRJZwxYAbgf9OMeGY35RDRyAfDdvDhN+0jVRnGYRyde++5oUZte9h
4okNHblqile12fbQ7MKRNp1D9OCejFAiDDneIi1SnovUI2QS3+fRWGM/jQx8zFqtpdiXXkInMyjy
zg48/B5i90ibWkVThSIy+u7UVSfRRB0f84JNozAhQS/MIuVfIME/zAqFB5+V5w59hkwp5MF9K5XU
+OjVXxRQAAWasjCA+VzQiYEvlQ+q7MUYmoAovJq/MnOz1KpoEz+UOtFMbAy1lq+scUNOThMVklQe
k4f+pthEd/U4zUPEk5g1zucmE6khvpt5YXW7uQ+vZvtQBlNoGqWeDUYpJ5NL5Czr036HRqArq6+e
q2sYfJexfoXGbao7QCkjIG30lZ7Q5ayQHuSlWHBDioQKDoZF4wCopOfiInJqPWjDnEfmc6s9qJQ0
pZ8IA4RZOx9r9c3LnxRSCxFUvAY9MCyU6r/T8Li1N4PUYrpdPH15LeaG1eidgulseikP4WNn1wkv
8Yu50t8UGkI2SoOZvIaHPHyPJwUh3Auk3Zh6B//HGKFpWn9WW4fWTEcW1sVMfcEPYjtRrDmRokfP
x4vqWMqWPinWTwDV1liTDjEzb/PZ0ia6fzu4NlrKgK2fg5cpfgSIWpxGC/NYlHE6P44P4vtxEgdS
rKkSO4YH1foxFEaXYuVLZmtptnMY5kXdjMrvblBsaQYgEoIZk9gAy9C2ovbTaFfLh2/pfaKTUQZx
XMuVzdJk0iDpU+nDBbXbBSFXf2o9/lh4I1s/SHJfXefPKqjpwBGW63DbcTBVuI5usxu299WiODHF
SiHCjsY+n/fz6XbmkIf5CPEvtFTsn9GA0oxeEIx5LnqiK46C93cxUn0c4k5pnuUh8q/gQ9GcXudB
j0bmLHjES9ClRSqDFFIEKhjEFkzY/TGWPbJ/xyLWOCoP3HiVF4xqO5cUcZBlzmKjmPpvUnNTJlSE
Abv6eSioNAJl6TAnszJcFQYDpK1fvr8VytLY2WE4wTqFwRArx6sZS1lau4311qmLucYBo8lCuqVs
lZ7SMVzlfGSpwlw7zEY5zLVZlS21pcuhzKxKzuxmTJXjYK6Hdit8iLIE1oOyK+MP8ZD/t1pZHwsJ
86oTyNFZOrwDSqJ4RKevJOTgdlHKalhtADg+RVOK11I5Ix4ra1isLLyVCLux4PHhcvmk6Ps/tI32
1510n3b40Ih2mM+LJvuyQgrrWpInGuZ8nNJbnpZ+rtve83LV6571+oqHJUWoQhPspFYhGxHo0k/6
a2aBUO7GBJcDWOMOy+P19fzTmOpOECoXpkrLQRwTTZFdI/oTQfYbh6g5jdOK/ky/pZyVdLDaJEV0
qXqoZWLCs6JHrAnlBGrptpn/Cgu2EAyVXFcuFZq8QS0qRBkswGpAFNr1iBha5XK1gRQNTy/UG1ob
IRqrV16STTfaSFlqrDyrpci4H8t6cHoiI88aMVm7jrLqwNt4hEt5SqRq86x7irgHAyaVVhtms+qk
qWXuxIzRDs2C41naiBmoyDDt3rOcV8yKQ+Q4vKR0uUvOMxb1+rQtmt14CErypW+SqnFBaskLBEDI
aAJk1csEkDKdwpLm5q8vvva4waraONkTaH87yh4ZyFJwbKOCYTQQE51dIxXWBQqShAXInpSWLCXH
5zR+P4O2AGlzeB2AcYnY2pWB/MNu1xKYiBWQlhKliCuI+Xh7PYVcRAeIanJG2Tie9im2Wiolep7u
aDYUurgmlYmoCYR53uZxtzovQ1Fii06IpXJ6zEfC3rB/B6G+3OfHUVE0PS/o8pw4fBQflL1g9Yji
fPWs6MjdRmqCtXwzQgS/sCGHA/zdwf5ElKus4v1c+kDU8XGUb6v1W8Yc6L5FD+A2wFN7H9QpFOsw
4It0ZWSY83xWBsn9OjLfL4VeFkUt7SsDk+GB8KSV8idSE1+tNhANzCIW8/2yflzEP+790ljt0Mf5
J+C16XNirLGzUobqynAeJedXsmtabhek8oyC1qvV0rQjVd6FoJGGKzTtPg/RyFW1ug80BBr5NR/C
PsULCMlJYwmv1jiMnY1HFAVDBYtUJlX7kTyANtwhY9WBDxeJX1erErI3yUcXw7WhoRkfIuv8ED7M
GQyhzID8Yfu5D02GC9GCi9Wq2GkQPHA+yN9wjL+dT2+jthPt5mikDQ2ekTJW6dcU8G5jtBPFFWRJ
AUMSp8Sld+AnxTyvcFLgSF/Gn9RhQNmiLNxnSyR9+2kXpNy1rmGzgPV02dP+/n6638eTJltqf2PR
Um9TG6zIh5Ld/m6tqd6OBclHj+FVD6wPpIS1Mjb7fJ6PF+Ws8j58kX1ETCzKEGUo1+0dRGLW52sD
HlLMeKCnlYW3p3qS5spx8XdZRN7l8f18USRD3gWv0v6+ekrxwSq/GG7qBlcQKhu0NTV5+C7z5zGG
5d1cY+WqVE14VbqnMf5ENujvooAjkjdZ/AoH6+mU9dThmy5j6ymV9XTKU8KADmXM0PMyntYdWrKe
X19HLIc/6ovMG2nD+Q1UZtaX0g0kPE5KZhGGxv6yj1TYGjfjQd7eB2I8VoQvu74tuozdVma6TLet
jVVEKDupBhPeghVB73mnYZPl8XsoilNlp0sm4D3NUziW1V7RKpRqzVJ4GVg0qUnVyqS68MHbsc6n
M5QWDcpeb260q2cJ7mz6BrVtYM6K8vw4Dx8vunW00Sxt9NihRu59mu+AIVJkei+p8WC8eSL0pKsl
UCbHbqUvbPwxvnw733caokSHzhbYxOSYos7rPhQTz3Lsl8lIVO0Kt8wi8KSiXNIoMr3PJbdHkKON
soY8vHWFcDDxfHG1xjqebrzrh+IWEo9fVmubdl1P0lqUp1dnybUYc2TBpCV4B8p1bUPJUqgWjTJO
HpoyuSDOUxKz87cMOhC1XeSWKRe19UaRxxsJZrBy1+pCFGvPYyiXva7ipqazQYxI0abR9KG7I1nj
7w/kQ45WflVrPpJ5/aXiiCo7W1TxJ3igGAKesmJr+KsGWLyufL60l+n6lhCvTajAnh2df7tcfsEo
hvnD7zCbowhHHjQyIzd57LC1x9iELrqk6FWWyWpFWVhjxifmBTHdK3emUUzFqAnji1MuiqWYZdKz
iLrM7ofWsSPlnfTws7gmp7X/F46mhgdyJXLjToGYs5RDyJRoi3VTqWQ3pXWr0JMRjROws+bx9Djq
NyPfBAbagP/639kuKbvD4i++gxFXWOnNYcFZlg/hp/TfUYxoUqTpUs6ZVX6Kk1hpfrw9aW9M0uIy
NcZWhNZNFnt6rbKwKnx6daD/ptdXLKo+X5PimsUEUM5G3WhNhXUpc4kUqfacyqgi3RfcIGyI+qjt
QhQ92mRhvKWKXTlNkbZJA59yE8oLrKQLkpJ9irzLxRtMnlOhOE6tZGSFpwKwfhsQgGCWoknFS2LZ
J/LVhU5e2JaFlwmt1D03W7AFtMpsStFtwi3JtS3ZuFudGICF5BjkRBUJWeTxjEZgCWguBjsfX2G2
cTEwxfq5JlySHiWh7JjnVMbSG+s6NX83F90gBBBguaRTCUiyojsyYgRnG5SwSBH1PRRd4OZadgTu
GyrmV7/xkZtYVktZiR8CzO42GqZTNFvVKnksm1ZDq0sZomDxrK2Stq2e5sfHbUlaH3ktRVgsIokP
qGxrE7engveghQ3KeNQ+UAHKm2rKePbKGvzzcVEDwnU6EEegBCeyLufbTU1nlaW0OfFMqnL1qmB5
RXSLlBfQFEmxQ/CQPRGnRoo4PZsOin3WNqFcqGMpy4MDzCnT8a8Kc3aZ4rwqdkRRP7loHvtAWAVs
5oNxD8jz388fxm+UrzYivB30PMfSNOQrsqWp0BHUVhs+rufrGTPY/4qIZIS3ONBezgkvaQSHwzh8
TN9hXo57cImOtnbgzoN87coO5ChQoyy5VKFf+0E8eYDtsEyoNaoCi29R6djU8pA37opcClRZ7KkU
L9OClZ/L48WME7fHcGTXnTP3JWGOgQvIxhHKRvtntRnSDRur6G2ciZuOepXFC2zxXFwLozxweCyD
xxV8QdyI4Trd34F9AloJxW9MxrYDDIXctlM29+WG9bPEWYF/WjnTEHRifwz+w+jwa8O3PGAYsp/S
RTdH9mJESfzI6oJt7Lbt6Up/ueGdgmq+yzh812gs8WLyU/PAS4u7Neee2L/GL5Ah+9m7BSYLOI/H
1WhJJP4gDjV7E64AxX2f4pe+cjDqPCACh/ViHed9sueicBzhQvMseM+l+J6Hm7EF34GxIrFtNZM0
Pn5/m5D41J2sIqkKf4shPmT5TSzVgVkT7QoyiFkSM62TMA7ZlqF0sEjE6QMaU4LJB7WuUD23vm+3
ieOJCOCIAiCmY2kXW79uVvh8pSeivLNcusNW7Nja8Is5h1jMhSRMH25663tpodN3gV7awzybzboO
389vcQJHEoWdn1O/4YNc7sOM11OnccS1dbV0Q4U38Dp801ox0sXogge1gu3eRuOU/MDGdu8QogI6
jMG8oyNRCqNrgG9VGZsdXoNUX0/KMX7wTJIxnCtwpZFkTzzjOvNyhuW0aZOQ19JtkqVfOpCSBoGh
z6wqmFassE6y5Y+JnvhpGhekeiJpqwg0dscKaldjuxsR9SlWwSFaHzo3mrnO06diRpTsoWO+OHf7
RgxxtHlAbHLQ7lidF0y5QiLD/NMGe6lZ3nRF7RnljaNiup5t1eqVGZWBrNK4NdrrL5nuZaVlZMYC
26zdctJvyh6LCg3IPuwARovRnxC1cHbtAA/sL0/n73EboeaHiFwUTexNpndtJaF2T7JYnyTvdW9n
eTLyAtLIMYo0eoj+MYE3Zk/SUURapTQdLWk2BBAG1bpktipLMVgzwx0v1abCiOdrvNE63raqCa3V
ANQ+zeAdMEJvRWgw3V0zbnQ+ry4+jbINLUpSNlCjAREw4onFQwzVePxetOI+bR6jMcnPV+Ul+tuQ
E9dM86Q3gO4q1vuFVAZ7zj7BixQM8I5Os7E+oYm37Q1r/gFmQHyjizzcKYr6GAvbTIrknyNwBKw/
WgK0c3Smymrb0Dy0PjX5PcQTRQ0m7WzNvGkBA1IVkSGkqGA2vI8jbLbS8puS3UiFGe/nV+V5cTFV
sUmDd7HWDavJP2KcDG1b3qRU7clDojYPr5qNw1EbWetQuF4iyOhqTe34Zq18q0jUtUoNyZlQfIk2
3BoSvdC343B6ueiuV82MXlYluXHSXb9DKxAVsdoxU7LAnrLMJveFSdYrXcVXfM+rQnoFy9lsMhoS
wCkdJ53ESfVeYjXwMht76rSqXabOyr+dB9Ej8+O0MqsoqFT4lBChZdZJ7u5zTYjZnzsUY6+2JvzI
BSSkMfedwaJozFqS1M7ogct+HS+Ht2N8ormXrdgYJt8qdSsowAhD79rIIrMnSAaq3Hn2jNARNv/s
A7vn5R9EzKX6H0XrtxG7Gkj+mmJiVqJ+9eIVmeEUKVoHRuCai3mDpKiRmX9AzlpLXftvZA0rWsy/
YUxoV18OtBiNp1xfv1jsrFnKze6VMJXfayzWKYKmHXhquhO09qDIKeZe9oGXSZStxv+ZTp/xWTCb
CNLArecHB611ncB4Rz2jhAC9PAFf0YaGQk/gEuP6IOs/l1SI63JknVRFi5QbTVYLBlSeKRZUH8YE
unAj0YO8T+hVkiep7GcbnIkN+qJShUrh02jGS8aLyqqXghR0W0F+KXtRMw/Sp67ZI1wdBIzJKv5B
zWQVttw1yoh0O15O7Dk6fHwYO+GYuKlFW4UxhJKZGkSIGN8LFtmiNGLhFIXT5o6G/KAK76LvJL2M
Mzdb8T/wrMfTH9WTKRrR0rOEFneA1+AO22hzXFYyky6w+Y0GmM2yhguxLrn4aaIAmYyWWvIXIw4Y
zVd3v5hSgbucWwET2N+Ksc3OvEP2vVXDY+NT13tHfwlZKwXiP8bTeVijuiTLNWldMncE4ZltRHEf
SmWMjRWeP1nhpweEBQ9emyvGN9OVCLJyFJh4OtYWwEgYvZJExKJmug7Ecd4Eew2lFgSsMH+jOBpZ
HdrOLb/dWJBzcDEH5WpvbHrO+X9eFSQ2U1+jV0q81r9aqKKzjW/BNPqruX4DRS+1/kQUVyskD0qw
D1FTScbhf/sZtwoLKdprkwMpo4kHYXpsOJlbjNwMyvNGvewSYUeWX6ghalJb0JOYGayUzKBfCSrl
sih3BVYVIbIxzNunR3ObSS/tCSE3kltGdgKYK+j1Hi/joMQAyiKIsFr9+DEtj5G4Ha+W8ym0xGGm
eusQUlaZJIONlHoc3FskSiGgwLfyS5E4dWgiupd0t4YrGEcPbcP6LNAyVlsxYwCFC/77YW1Gp6yv
LopQkbs00/eUBcDjQT4TJAjgStkOdpc8zPjpbioOit+OBl0cMnbnEZ5Y2Brv4Nv76W8vZ2YFT7ds
VuYFzHk+Gkd7Ppi7YB7j+/mm2MWZFNljzuJz4ive5I1EVSOn/uk2oMyJc+JQ9KCShJ3Lkf3hu95c
kO5CLtk+kkGnEOCTScdDnwj7CLyodW8mtk+JkFTebaR5E7HMwK/aZ5eVUnb7K7pnR2AiD6x+B4ik
5uVWwipiuuAJfs7kfvxGDCDOByPKMSUQ4W8H+N9t7w19ig1ZExnMRxdaVHMpVS7FFCx9CktdKTKw
luJMNJvj9NCedseNdHjbNpgIhu+/AEKQZaWiaVioBx+yRysSZAvjwLQh0Iz3OCLnEHRuUC3rkkXf
GEqGTapQJtWFk7Ld5Gwe3RUemm01F/HnIR44yHnyw2sCayracoN3SJfrwqCqy/CAre9vo6yH4XRC
mfLnVNaiyHJJMGHOkBwEB0Uhtc7+h5Qezrl57RkgbpfhjmHu3+JcVzzmQZ6NBWGB+UIJDT0Im7OE
Oo/jHqfbSDzP0GAAY82T8dKvJ4UPh/N/wSH0GYHM/rGsHdmsyYHKUg0v9xuoDHOzHYtYQj80dZgE
z7ahNaQ9R9tWCa+10u6IBnGjGMQVT2PRP9vfLL8VqEvOsgYsnoiSE81GS7QNF8Nao948PQ4YSNFD
5FUh7erWLUulI3hUtfZBFDAcAiRB6k0VPGSNhrgYqWJ9O3jzhsN811AALLNQ1h7VH0zw9h5rHUDr
zCXElm09QEB4ohtP5pKyUtI/xtJ9ncfxX5ZDbS97FXn7PCaC/2AMYwDOuk62TUkK1ZZJYUaCBkGg
IBk+zisZ6ORsrZTzy+INLMG7SWz6+SieIXs91eoaUPt4CqlYw8OmFjGum9idVgSvrS+FmvLCL8R7
95Ak6pn9B5PLXP3h2TlyFlFqjWjlwIpQSFTPoXZCVpxWd0bxLqow2VPLMBW7f+o9qJjdx1yzMALf
KAH4OnTse97fYt3xhCXRNlI+GzPZZj/o/BU7JJMCjdGruIYtrI2tTKuXIsYalJiS97vAxK1kCYbb
3ivbvgnO9HxqFk+AkEGwINS71DNp7snRf2P+VVWTlSiXx7sgQg8baE/i/nSiI0+WGF0Dpe6EjGuW
kPPknbSfmFf4na6ie1FVhNCF43CL9l0kd1NMhaO5a63z2zCnvfScPacQBXRwekbReX0whyqXIAtK
jMHvI/g6feeSko4n0tY9QAYK7o41TXfwSNa5RMC7tXF3DFR5clQI/9Y1WyGfaHyAMmSpprN+nL+y
GDYH3/7sx/jydlmf0hdGC6mcrd0Or/XbV0appA2+Uf3XcCWP/yv73EttLn7TUHUdchHbUBGK3P2j
MIJ7Fs0JSmd2rYtRkDKsBLHj/LbliROzIw7X88fw1QE7iZmdG1Bf2LVObMPKQBi7No1dLm/lOfPn
C+Ow1rTdypyx3Mbx+A6BmOntanef9MaezSokZu7QEN43t+6JQBdl34cLl31lrEx6jMDo/rX9qr2s
QrFF+04FIKxz9r45ia/Q+OUHlunaNyuRtdyiePfPp3gS5GFA3BlpqDyHi6K1WNjCM4yrRT57Srkq
ZhyXqCrKPpFEw1aJrhtVYnRuQnofUEjMKNVyeRMigHIGevmOBYAEf1EQrl7jYxWzpT23hNsxBgyK
N+VSuR+abVDpogAUOgmwfp0oNAhN4pDWB8rD4hPnIH3/XAGJfhouWGVGVOQWy+R6firh6jaMNTZS
BZaZnL42npJmvRTW/VTC1v0GTCWh0XOlDo8Zb6zpYvh9rfgkIojQuoKpqFLFaz/RIyrKoPoTqvkx
jJb0jrmj4TWWz7vZMuDbSoO/vwJNzLXYkS2EBKHGiUxVxZDOjHdic1KlclKFWCNqvaXrlJSf5IOq
mFgH/1s0+B+/rAUW33MUImbP16SE33A9UpmzLAlL9D9uJ6Nl/jx8mpvwx2n+j/P97xoIqs79KLDQ
rmP4IzJf4C74507/S/p6sXERU1Y0/aZUDMv0zletAxX5Wp2UJA5vQau8t0aKk2/kDXwN5Ub0B+hP
+1h0jHkXxgPK9UDP18cEdFb/J8mTvH965tX6A2YASh2ZCzxdE2XSfRPOk6+eUtC25cwfUoK7YKFQ
rFYKaz5dLML4rLdxviuhNLUY2r1qJZbGzZDuuRLYIrFH2mNX2aqk1WopPyfmUXLFhmEoJxgmd3J9
G21MhBlLKd7lkDXXx8dtOKUgbo2EAQm3t1KeSxmp9FmbAVv+GcTUwMLu02Pd9nRwv6zDUOjGx0Fx
er4CTOf7Hi3GiuJZ53qwRt6oB7rDFirphlJEfHgUEtTJ7aMRYJXJ2OaiFPAsalNdCgG20gWP4Fxv
DCSYgLsWUgrBdZwiXXxy+llN0OfcJPU+Dlvn4/ZjmE8Ln52CqWDqsUDHogicSzc1myH0LgDUig+3
ZGaw4sUzPvWIkb6FlBHWkipkWqQqM9FiGu+/N9ftT9RQ7+pj3e65JCbX51KRJUwOW5BD+hNP/TLu
iEsy5BGmKZzFQ0ENK6lxxbCfCWgyTxF6NCIW7Zw/0A64j7tOuOIQMg85Wh7LDaoDSbgqBkDFUrLw
Z4tSEQLimBxKV6TmDJSBRmLljegRS4Hwj5Y5IxGQLisxZB/W+Jk/vxB+bQclQc5A+Mj9X/O8hWOY
pvHNvx0nbXaseiVagegSMqnSQ1bmwEoPLbhm/LgZsZQo6eHK29sjzJFPESM0heR9cR6Q18eVxAOu
ah8rCIvncxq3YJP+MRgz9Tifb/ddZ9iKZaPrRJ3CW+4kb4f7oEyP+cwlYV5tSjxGL4Hoc8uhoGB0
eIF859GSKwr657vxxW+as5fzIn4MDNbc3aPQEp0saCiQuVBkrRwwW2u/FhCeyF3E1NpMXcBsr67T
qlGTsEyxfsQVHx44gkcxr/pQ9bXCTbFpKDCOhtOOcqicSVr4Y9uIg5qzvP5PteYu5+QvXjF7uUYS
jeoJUiVaot9EZKn/25Km/r8V5ZFJcSMMEyECMHFWhei3CLfdGbbqJWU+IOOPpFu5i3MrZ0BzlrkM
5wMVdAAIfLkMVy3c2YZUIJlQ9B+YjNek4VnwqltK0q60P2hKg6ZeAIUJzfjmy6ev0LY5y8UKSsVR
Yi+9gahgYz36GKAiSf9RS5AKD4bA6cGflUtWypfM7CBFUOCmQUc4zfpvQtukleID8IfDx+OegAZu
yxqLZ98GK/0Vf6aVVhQrvzsQn5MKWa5qkS6Oqo43y7Tx05Rm68KAWLuF5yrBbM7lAZq2sFkEx5py
Jx4jt0RwexUAEwOedytslQCmEIjehzJtJNqmL1JbaMkDVpJAoeNQ7TgCAKDnUsJpuYTdsKYpaVYV
/pN3ItiLV6hCPClNg1OyAAFSUeStiCSyXMXGurk50g4N3pZL0Ka9iNyKWfOw2f0mGVAryYBN9Mda
tEQqg0QR4+WVCJ4eWo04mwL2bcqDqDeAOu2GJLJVLcfjoubL8ihp0XktpjRGqaJwcomuyYXBzx9v
1krTaB1YOSdDiLP0XpLjhWOHPB7EwTgsbxWGuVL1SGKl1XP9yt6IVF1UYs0XUu5wPsUk5LeIE3OS
KPKQMGWfWsmbXGu2UAmNO8M0rRRpfUaqK+UUTSUBMtO0mGsU5Md8VolW+nCKMqkWFAGafx8Va4LX
3/lsCDYuNzfiy8X0FQucQ87N9rvZAH9xdRRn1Mryskoqzt0ukoFiEoG8SooYWbQ23XprMIBOScHm
m1K6tLvpE3OeCfHZPin9gSbZabwY3+1f4zylAmOFmEbEd2TOMBGqKJghxQLDMXeZ6vBSwpkbZ/X6
njaZB6AUSYWtC06D6E2o0OEbTtONNu183cUL1YSOc5VSG/NR0RmFTBFIZs9doyfuxDhzSMNI0su8
GvM2T+aBTgpJGoepE0FU7d+PzVLvwplw0Ga+ToyEwRcqwwpO7ORpuLmVr9j3bA4V/qPaYuXTwq7o
Sgn9gE/DYl9Va7IoxbqI9SIvn9f7+wi0JxQ5SMTOxOCuGBE538GcUjwLkbkLgkak/1CCuBZqGjyX
1bOVq7XiDcJKMQirdHZSgRzwd8NkM8hh62lTsDTaPJNkskiPs0mRKhgTHpH2Mt1sS9PkvSLKCyky
cUZW3g08b9HdPGbP8/i6daBXHpEbxv/jjXDJf+rDLeUO+kJlQD7Np8Qv6kqirt0CZxIV2WUtqkuX
oV1jz4kcrVjmYpP5NtgwzN9UKZtLpQ2WNoFKbpWtEHPeNr8Afu5yuP84q4UZnVQPwc4hoL9J2SAs
e44YxaCExEgRs6hZ4/gKWSCs7WcnsJMUtKoLyRNkaDlKDKXuRyOiEzB24D2cH+8YmAL/32epU1wA
7B2whtDE6WEvbyLkVjDtw3yL7bOkoJJNMCkrzSSL22yYlVMqE1/ZiGYji3tueR9c+0HNAspkJ5xN
aEd5SS/Fg6arLY1MsyP3YuA8YBMjkj4AoDF0sVKk28bZ0laJc59+ueuk7VXIve0s9T3c22jKJziI
Kh6zRzaBZlPYfBuW5cc0n1L1hJUmYr+arykl9BisLORZTlWShiBAKzFDbNfaTnF/JS8vkodHXZRb
IKvim28zu09l5MN8fE/tNXMaujXbtoYBXf0eChlAOq9LUxJHreTST1dWoaXMp5CueljjaAEMiTfT
h14IT9ggE6ZF3KYwqFUdRm8l9KECFi5FdAcJfAuvTIE6ylJsUAD9WKyk5BGNPSRODS9qBoVZdj5x
4uI4W57WHSyVtYSj2litCvSsKiXVGc196BZKxZmAeGsOAddXK8fPPS00LnJHgCSF9SAHuAcpVrKs
E4Mme45isgSNRza8aEm5igdDGdZ6wx6H+uZl+ql4TLmkzFcd/EW+virjOY/K8/XFedaMGksxrfVK
CJoyGJhcw503f6FsvoghESIl72eoJfoEtnC1rQnzpxmxr70hz4mQ4G2RGLoSG+0JpMJM6A33v6jM
srx2JluRQluLbh5vFyAUIoZDJVfViKkCZpWhBw5AadaDgUIOilnG7ijo4HxVwkZo/R0XPoJuoWIk
cp5Q1R+NszwqBUnM7gePpuYdkUi4QjDucTN7vlZeKV4RZ0PyObb1DUBIBlO4xD3h0Gbalc1ayZKx
kVpe9qycSBWGMhqWLl2x9EqKlBmjWEiWSeUqGPEZftpywHRfiFZSaq+X4Q0ABthU8nrwES0lu1BK
pRWhxLdM/8i3ZDtaKUK/C7W+4/fEtBAWHKDutwhIBZsgMrj5JWm3qApaOjW9QJCs53qrThJPW91w
nIwlraRUex5LQ8q0Pg5yVCZTSzA28/DHS+LulXkhbeJEzUc0NtsqKyUT8skDsEWBv08wVJRZJTED
MeN9Tx1QnTeSGRZkCKer80oSSDSx+97GUsqVB7jh8qhC1B5YNVo1YsWJ6Ets35gLICSXc0C43d+x
PaXafIT1MmtXpvX1sGxUQWcxFjlKohbgaRw1Bmqx68wzGF/3kPKaR7pgnMIJlSMwSZ5WbZVySDoJ
07vZ8dFiVhDgaNab6ie5zZH1TDvsgdMW3N8qY8zyinuTRd0b2JNfz9df93iMohow2nX4NPuLzVpX
8NVhl7uelVKpMu/eYSupFMBMLyH+6NfBFNgRcKlbyQXZQ9qkZeTF3MDP5eKaX/yMiw3xU9ElKpWL
zLE6uWfND4Mhd2fQKsGPTLp77jnlijznbY4KXx1npDjGPA6JDGVfS3kO1WhWDLRCqpJ4IoxTDrTY
msdVNBu8imTwMynoq9jdjOy8gcp1Zh77Msyvmci9FNsMI2k+zJ3qaZNJj3QtKEQcH1C08eIV5VA3
5MmSfOWK7HD/vGEzwBQSOZOMB4Z2VJKJvHVUFbKCnK+ahi4akauJTsxlVsy/jEsKOVgwWECer/P3
55+o5q6zVurnC7h2j+pAwzYFesg516RvzG1cDagcce7u4JzMH/NEEAEA+SvI7KqXkOIBi10iBtrJ
lRoTdt8D8pzLsCRdmTyeEAsoIjSgqJ8HZPc6lziwmIm93WKqKuSJK7M4iV4iSsUAbehg09ljUYjN
VeqPp+auTAQQDQmjGTLBisAuum03zl5CaRsvMaGQS6kCZFux98d5+vgrtIRSTltEdD21dUtXfjRi
K07ErZOgttkvIEK/6v1I6u6pPBGNnoXIxKgr7sUoxitWA4BVtRiVfT/I4U+Udxh9KPo+LHk8jeZS
HikxdBl/Hl6mn4To+nE+AUDjCnbRAvCR4Sf9XfQXKOhrf8FzPFg4jpnczegASkpiRiQ6UIPynwZi
6dGP89XOiuIIN6B7MbplhGjm+ecYH7Dt/drZi34FsfAKdgGoOGKJAiM5PrHCrxAMwrrnvFUfw2If
0eH8AVo4kmAjvHzrZ+SDtB43+Ovybl4UBPB/tdsWHSur23B1tF14SVzUOR4FortR+3Vla9L+hZqN
zcPp/CCn7473w0ZwXBDtMl7flGtBuUQ3OBqHFnn6TgXiyNqIdzg6Ro9vyy7RAz4g2vw2Tw9G0G7G
ex/n+M7nhC61Q3k/i5DLLj7I447x1mi4+Ri/tpe+RaMx6MGMd+zn+whVkfGXU/oLz+jXXT33xWi/
BzLzfF6HD0hLXj6hGk258dRNg71F1xuFXqARJGua2FYtrhV5S3TQrvLXBC2ZevPAzf/dlZuatxmb
Vc+qtykVaLQiyu6PKLEs7nheBE/HWkGP69mc3jJcDu+opP/5OM/f4oNgVNCKGI+5eWolCpzJ4E1Z
uBrdVYvLs6fhqj7il7dk28ZDIeiTnNbicic0DtCLJz5a5Z8Tw5velvFxmg56qplImNn2+VSz9JQW
85DMeMpkKCFkL26/0jriLtGdX99U/FLUfnvQKnVe108MrIdaiP59/Hm8PE7G4l8DEvFL2+S5pPew
tcH0ip7DwW7e0RiHyu0vmAKt1yjC/Gasb6M74q+bKOnsh9mmL9g/H+MMeHYjZIa7yvuKe9X14uGz
Z708jAp7w3L+4aw95trfA9b9z8p8etOvUIihz6hiKpFBRqf5ZnTXePrVPMv78qs+Rle04ZWkCOYV
GiRhlguSa2fLEfcxLfGt7vKW3SWKivnjpsF2HrZfFoatSWWRaHFxYpIMJBTi96/z15tlfQA7AybM
MZS9iM4EOyxa0YACPa/Z7LC28OkVr/aDM7cOj/miPGT2CD2r9RVg6tC/hOxO/6+HcTkOxuf+bz+f
x8O4hzuIyt552r8sa+JflP4LH6QD+rfoF9n6BSsFZpO0VNDKLGs/Qru+TBCfsS+y3n/hnXkA0Ea/
6IIvrLyFSrborAr/hcdA8s0Heob4543/vGGLauNfVOGiuu0PuitkpFx0jC7cSrfMKv5F/rT5Tphh
3gNexgqJS0gQ5noAUebKQ2o0tWPFSpiY1MDdvqlu7TZj3HzUZlQkf0jY4nlXtqEyq7lUpYrK8arY
baXX7gzEFat7pHaXVaheLL0Ywuqud/Rv5odapk+tmDNJTlGq52/wPSqsuGrKu1DPtushPMC7JI3C
/LfbOB/hWBK2MXWfdAY2rK8tA1wdKAdyCMGAcpxCkAgfjXK9HuNH3hahKeVQdyCVgf5E1epdUUuq
GAHf5/v44fSMFpQk34vdGHyv7r0TtAASJ/NiCVBA/cRnlLHl4DvOHfDZ0f7NpxU/pFuZHbcSvU9p
njJ6I4fzG/TtwMBItIkbaaoufA+VC6mbbboYdwHBMXdV3eVNlodb3XGTl7hqeO42vqo+lyIUCNHB
mJz2tfEZ2P4CWMtYdi4Ae6E3tiQY43GYrGeqtsO47FZ5u8dizvxlMMtUNXce+rOdzeobnwpY5l40
j66tsiCg0QhGIOXskk5+LR1RrLCE5Jb/bUbUc7ycb5Rx8sSlMX5F/OVm88v9Kv6MPDA2UKygn4Qe
uxDe6AgDH/B8ruMbOobKBrTiNKYLknLPs6c63p5zfMxWdpeDUMV4MRu2nBfgtbt+Qmia7NIlfgFL
Nixkk4raeb/DCQ1lelloIQMbyzwkPMo+dAHqVLhOCdTVkm8fnscK3vpufkLRpF6C1R3uYLlG/bB9
9qylyPA1savF4pBCCCwxlYpPBaRg3/qTPAH4ALOV2MPIikawOcB4B+NlOEPfQTrW+Knyq8xPNXJd
XqE08T4DVtP4ijFkO90XpoEb/EfFNRSJP+pna1n8Tgc6MsXBytklLPEfdDzIJjxBKTq1NI0HVozH
kIUXz2VFzbJOaD2CBl9SPjW7vgzNAfFuG8KAc0iHv1vm6DFP2PnmhMcDpIk5ik/FLa/CYNHWFzb7
Mn8CXOr1/FPZ3T6M1DVPcYJ1RGUqmaRZnqPdmJMDLX4Z3xTj1vhrtSRtj4RgM8bc2/UwvCzTBXgA
WUAXH4N6+3NqTW2H7rCSt1lpVYhADiTRU3wPBpTHa4L4oPUGfMYA4clgbsK/KSKk4IHrxvdOp6zd
LsOcSQ8WsMZ2oKPtLmP/xQz38knKEzPukbdTIfzJjtoHt9UNdJ8HiKaO9nFHhTYN1axDscTXOhRM
BxMbgJZRRqn8KDnLT403rXyNPu38p97IfFrL9PIPLBOJbjcNVvuN8R4+yLqY44efNWU4/XAO1IUv
Zg7hAFUX/m64i+frcaYwMRBKLNK9pVH8LkLxWt8L01geL/d5HB2ML7UfuZ9Xs6rkt/H+Oxo0TmNH
++I/Z/WxKzvVaLuyH9wUowgIGq0IJpN3kU3Sdzrbc1SFMkAfDlCLA2TKAG24p8Xzi1mg7uEcId+m
g/E3jgWv3CBr5IRyWcpqSjaZfDXfXFbCthKxt+Rn/GT8prIYrjwbZS7sJZc+xk6l4Xhp53Ga31J3
tqkU4YYX9o/T/Ada4b9//kkTk35zEFBCyyqsu7nEPyza4HRCqc1uqpofocvCzrl+Omc/Est8yuMU
2rWn6kBy9hK7WzJR5xETbiCLnFjDMKnBmLgtVnE7jzbJZvUPGCrm352VSaoveQvq8BbUDu4ENhDI
Ge34VJXCBY0mJ/Jwx+kODMZqns/Lt1XkUZ8HewIXbPeQ3DX22hBFY8sjkN1s+lyHTsn2XtK50ioV
YVayQbqn62Bszb/Hgjv0ObMePJJ1VQcYwUiJjYqdNAslBALZPo/Dy+Pt0FdNpZxbzRREh2UbfZCQ
N76Wsp5CE4Sxi504qKqRBRoli1L2UcnuYb/q4M2DdYujZJs9ec2CLKtwoXTuliWYumfE+abokfWh
BrOdvFfT30VdDlC0+jHMb4qT3bWdFDoIajocOuwPCvsbmdzMm+gRR0ij/e6XX/46nz/OMClUI5CK
HtHDWJRAVxeGcQqGMPvFisn/uv7OCKTUxCqW38R2TmWzJ860KCGmPHQ3y9DHm//5GEcWWkqwkJGX
V8r+ygbMgpGmH+/nOyWZFChLF4xXOCobDLxQghPtWPSlrpMVpwoIpQ6Pg17DWvFPfiiEXdHvnKcf
ELoyIrCLOItF1jbMr20xT8Ej1PMIYBSA2rxHfTLc/4xdFEKK5N7thHh9Og7Z1JvdYjy6z0GrIR5C
qBlqocZFdRZsYPM2Fprx8QbsY1rtPb3OSkKduICE9cxeFdxW12TSCMsdGIvJbAlNjkM89Ny3vTQW
ZRIUCk7cFx62rpkLsrnetrPKjuvdS+AHMadwgOd8W1ItpSjLIIIx4wCntZI1hnOK72bRSQgbCmRS
0MpJYQvkNt4fOOTxPe426IuSnY+dHMcY+ZhpLJ5TN6J2IJ1yeJnuhNWbP1Y0loofy9vtfbbEuXDU
q0J9h0y2ggtqRdymNAa0ogaw70UZrJGC8DzipzXGpiR6K6FkXQb8ijySf9awLh2LFDPRT6/zvuFg
jS+lE/MJWwGNt9aelpLs6LiCw8RMtyIT4hq7lG40ZDRO4/fzEfrL3EBgYdxeyWYwTYgryTfRj7Vv
q5akaksOMfUIdZ9GglzsbRzuKawWT+r6jV1jc4dpPsNzSAOOxe2BxjZw15wYXpTLWkroZ5aZ2Rte
Zc+aYR+civJdJoYEjteoFxFhHEmeAGb2eFcyJrWEJfHRY9CYKShJw6AgDEqStlP6uJ3CoAYlRmur
NfGH5L5B5i/uc5HULyUdagRNibmF+/RtvC5JbcoBe80aX/kLGZ7U+jDa9JCeai8qH7SYVggcMoDo
rGNkPDG94zkHArQCy8/pcIyagQ1Q5TTPg21ytqlMQNdICgPvKN0Gh+VWDfQsryVMxj7sM9B4LHel
RqLnOsATmpp7YY7Alrv5g1FbDBI0vpayc1DzpsOke34vsFlSJhtqH1CwhB0/rNdj1jxoQDGeo24C
4WVt9OH635bvb/IFC6+7o6uxWhpPkoKdKsisEQHFBJwLsBtWLSANbQpBl4fHtmENSh5UV4pIn7S4
yqPiiolkDPwXzbNRo6cFOw6W94rG+mUrC8HpDG7zwSkwDbXSc/SOL6yw5hoFP3YhjKu8kfP1eJHc
dps/nKdoGoCuVBHC0jtvc1FN2HhFX2IZzdU/sbIxaMwMNU/R7sz0jmoR3EGG89q1zwdoKPMIYsKh
8uIci2RJd1vIdrfRlpghgridAvJn5j1cxNyW0CSvX57H5WSgWhhEwUYSx1V8nQGT+1Mv+cpbXojA
evCtBIP6A+0bsaInYqAwnTBr8EpjqvQSxmi+X0AiulCBUtvQiSAu9PpsMsFsM0xwBjoT4Mi/OyII
BdNVSj5xgJmHY3wxhss3BXvIhG2NNawdx60MFDJSMCrMh2ZtjYDoGMsYQcSm0CVd00iOp/mvQFUk
M9K0x5lY/GYxxQznDxSfUK+zw9Spyo2p0+x8L4XianFIT8tULkBOx7XywvkHyvGLqDxKZFpaiBul
cZTXVktOkxcq2DaT5PU83s9aXK6puB+XMz8OY5CDGfIfy3rHlcCjf2qMSdveRoxe2ogLym3lWvai
hQXASUBPadtS8evIiEatj398zDABjCYrmn4jyJqNG3kiEidYzfAx3uM2cpGxQDtEHywS9miuHUZ1
sRgWqEvXCBjplO/KCgMTq/RWgxxR86E05WKzuCwLkj+rWLLtvYZNaNZcsk2Oy8LVynYrFChrJ5ml
mwdNMF6jt2+fmkI1b7mQ3Ko1dOyK++jeKMOI9WqepGS1c6C866GohJoXOXtYTupQFe3OK7D9ftkY
sJF1SgSYVYoA/XuZNQ4T81e7HkoOkYiOyxU+kCevQQQki+5YI/5nXNHxykRClOfbG2q08InwNpj4
1uAcdDkzSQM/OU8XLdNS8bJ7f8PNWt6htyK5hLruK3sxjA3/OZ43vQ/3OlQ7uWcgXGTByOpN62Gf
PyDQ7Vrhe53WQKNqt5R9GxrLNmPiHeoNC2tcxjJdyrfOoSPJwBLqaFxnbe/Nxxk9yVhmD91n7+ld
hbhrKkdYwc/Ky2J2QFWEYaYovlxxuQLjXmBvYMHCj/PlrMULOfQ9YHjyMRlqXKiEdTKpDDiMEQHu
2BoXehVRzW4lUy3IUvOFctWWVeYTHbE1LWz+fAfYlx1awFLkNhlCN8pbb8rwrRc+5PmXEaKla69r
ulPQLIQyiDuCE01TSNJIAuKnqsl4wQtB8StOx4T9zkYdd268zSIIdVT58xWw4TJ660bbrYAPPcLX
s/K/fDURg+L+x3W4mQG1PDIPLfjOo2vfuTd40KyL13z+jgBMzeiruQ3kE15fSYfUnD6iqDz9ondW
lZhlJ90ACrp9TBM01lLCAxwdXikxkq0B50IkukHe92IofH19FyP3VF+Fxyqz4O1YehqgkHzM5zRz
Tt5L0pyJky9mYlsOPveoZOd7TnAhIRYHbdlPbxAeRhd00BzPKsztds+Px/VR1TlOGiayOE2Qq9TQ
s4xt10rVDda5/2W9Gn80p/CLWirJU8s+Ks8ECuonFAe2xyC0GFxbTCiHGWbJnNSj/nZJQdeKlDLA
EOHMHMDWG21MDqjiWPg71ULUoLVHJhhODirwM2YfdaJjv2WIUow4PxeoF6hTtC2JyAovAK6w+p2W
BtppejUe0uvrmArM1e2GFadjiCwdRVBxzJr35Jntj049Zi6VF8XjAU/sVsYi+jxQauDb+AkhNCXO
waRHm/tS621ltREe6TRx3reVFPpCYfQl5pWW3WWMw9nI6Ub1I9WIEj9tpCjab2H8UXJfYsp2w3tm
x99RCrYLB/GcUaniCWCeKwBFWLdpy7xU3k8W1cqouMwQVzhnxWwspfCzxXMRB2BAEZbQxF0nhaYC
qaeWmtfMQQC53tomOoMRdT8BRbCTkKJlCCamFHx9pEeGHaAnNlicWPCMCwdGvstRCeKJoR4fgFsn
CQxfM7rI5kDHWUkD1Jm0cbyK/EASCZpfKFAVMd5jy7khfEuwuMAVIPdSKWwNlUa5Ag2Kw/K5ANUC
XLhFwRgUErcNM4qC66aIoUZC/tlVHKfr6+V8XJknXWWAXCzOdrtFziuBF+E43M53jOefjHF1XmlV
UyCBTnJxn2JToFmUyFQph382KGMGMUYkrvq2qqaXwDo2FWJGvVKxnuWudrcZWCZUrGPeV6IpF2fJ
zBU2jkxywJinuVr1e+kP2ZPAIGbR5SuXBpuTY5H7GY/yiaZ4fJWlsspCeu1pzdLGNQtLt3SVr7+V
T1c5yl7kCwnhPD9s9NloLMXnq6U4DQZXz2sgPC3TzL73EpiL40/xDPTQYMugRRDz6Z+wOyvm/o7p
LTQ40G5TnOINHsgxaBgr5j/BxbAd37DU+G/pSuOKUdEw2C3M8XerLPqDcfN+Z26GIrCrTnqOgrsw
/hyO9y9HWatMZDwJ74hyL1iIBf7YuzoRS5T6uENTX3pHSiyjlWD2ErBTeYbc+GFs1RJWP0G9yy57
DUZoYQ0XsHyM2U9E84lQcL2l8rPJmvP3X2+Xx/Lrdfj+68vjrWr7Nldmkkuag7VRRGcvhXXIJVGH
NcdEJ4X+uS19twRTpMSTCGOqDNwUHuXi+IcNP0d0vDL3BWMAiGiKkPuKpoZNzhGyYIP08fm1lVQ0
Lc8vWUBa5rlcYRfMjtdaKRMrw2rNXp6Yiw8RViM+XJ+HJWSFOpzNQ+hvHMft/PlimKCVVoymKOgD
Zbms+pdclMhJgBv5OSklimXWhTvXqEuNNfij1W1KZmt5KMoOWZIspbCM7gi7cVDhUrbiLeHoQuV5
+W1jJHaRtf6NTlUpx+yrkF9CPE0W7lDOM5e4HZ4mZpFs6YtWZv49MJrQpwEtWmXXiH7v0HKMHK7A
16tcGFaS6pNMz+IkSdJR5kVYFh25xSFrorLYKixMLfXh9mxfHR6ILlFs5PES6z5Ku8dOxKPAnob8
15+up/En2A+Tsn+1TPIRXGXr56WZAVpWOu2hn08zQ05C5+MmZWfvZSfDwDvQWyIIQ4tsn8p6U2eg
7H4XHmjkilh7HmKAytL8WGBhNJHXij4C+BmcTjeWAqAV+4NgNHrPEplMfONGPz6uexRZmZfhAyme
QruvA9hVGE/UnlrR5btu8d4lF10VypQqpmKBzcC12VSu8r6jWYlU917mjbxq05pIGYzJlm5N+8a0
h8VlaJcb0UPP+sgW5v9ppV9w22j/B+VQsoAqJO90deT03OPldv45XjSSR5puE7KziNLLWPpAPTuo
ND5duJORR00PJQ4Mo1NpmOWSPBVdPGdZSC+UMG933L8sFAz65JL7n0uMC7HpxV1GmhozXXzb6thg
FPrbY3o3kpwJ74giBvrQ+onsl5L8pLVtNFBILbjLRyzzLuRoyhNW5+Fjuk7xWm9aXhYq7D7mTSzT
BRLgSuaPLoTfLnBp2zwt1HecoL8Y4P90oiPgIarKauuAO6noYzuoDOEFJDamqYkh5AvVLSnoRhPW
LxQc52gDDI4XRYso8NvC1aH7dv4YFAa9vJf1AH39z8d0H5NsR0Ujm5bBGBotWpGFS8jFAWplgEqS
ntsBSmWAYsc2aIRLRR7qP3mARhmglkMl4QCVMkD5pIEjwU+0yr8e+yxFLpnHW9U1mWfPtOgHgvxM
2BvRMyBhvFnnmWGpLkZ7tpfMnWAPy8d00vj2/UqQtLBlVG+Oc3qwafh9vAHVpjCzfcZBnM3Wv83D
TcEaskwoQpXKfSWDGj9yJuU0HBoACz/04vS2FIOq8dSPQibAGx+Vq9p/yuw9wHJ9c0etEQjVYVKP
U3WwWulE0pI1p2MvHxHeKZhJ2YvU41iITgl2Y1kBABY8OgCuK4niXmphILxdbO785acrVlIaE5+Q
K6Cx5mlSdBUv0fWYAmyr+Xl4DLYMAmvd/zF8HxKl9y0Hq3tAjLuWHJmjnH+75WC2IheKQC0OOlUB
WvHOhJB/LWz83JMeT6fT/kqYLhe5Xmyd1UZSwabbRlwKNroNhW6+t8Q2UQBUyRiRTY2FuWD275RK
i1bCSASYF9uyR0m6iOQHBAH5TpiBZVEz/G21ES51BHuQ8OsIgiC3FsPpoO6cXu2NT0BxWGE6smt3
dYBKOcFmM0mliPIiYykyS4VebiBPaxc3pBGIm7fEDl2H1S1t8ASBmMCWUhtz+818vBwghabW1OUt
B5c0q4lwer2uhXmUKlWlVV01Ept5kE90aS3IKv5NLd4qxCJY1qNB+bSQCoDoGnjOhdQVaCUltemZ
p1Wg5BLAexWVa6QnTZPQcjSTX48VTigwqWH5BpbIfkQrWBapKbZ4UtdHIQUrFVsZCSluZd8rKUtO
VPgQ7wAI1mk8XhRwbSthoOPcYgouqpJ4Ejxobk8j0iKrRRDOluhvQkpI8/x3FGtslUv1xHHheq3F
WS7EAimJE5KopdX6LWPSlVJNkqUP+zIzWcVL2bxrHGmAp1TzN3IXiq8geBXkbif39kEp/isIml9T
xRdtu7HPAu/z90oPmzoLjagnHO1a4UZVWIdleswqLxajDEMCHYY2UonFCb/TSP1KPUqfjAHwKF2h
RkL8Zn42wMncdL+Vi1A5P5GVET41CnMteNpV395y3LXXVu/jz9/hizovvz+/gRutQmrzpts0Hq3F
Emq9RrjIuk6i/bBFvdPlYt+2bmk2IkDS6S9LpYqOKHGpxrLJpMFEkr+oCNTZdHKxtNNbYxsIzsFz
r6Cfk7gWDReuPuDKLhzUnT/pWnvnEswenETUP5OoVamUonMbp0ZVGyko97y8nH1HsaEbsXoau5gO
r6/m7iyJutCGq80q4NF4pupLVd8yADBLztN0lsdLkhik6TZ0f42lcuwUfriNl1uzAoPx+vgYZ8ZD
oM2+5zvha+tYl1qHoBqI+UJxUBup3g8jFkclh00xinJLatPHohQzSPoFZmQZ5rGn8/3fUi3qjOlX
ifBv6m1vo4ikBVKwG1JvjTSciHNMdUpn9lcNOeOiLzxliA5gIXYQzleElJzZTuxzEcc+ZzLPkLFt
ToVSed+GDTdt3Moc2ZSOetXMpUENvzUZfkyvr0qlVx0GOS13OyvjPXhSukXxz8pe1HLmDh8Bgfxy
Pp0Pa9hYjXIa21psxMUoe+ygs2roN6zEm7VuilnDihm8eQQkPMef+EDJOLlOh5/JKyszVKL9S2hQ
7D9pw3jDBWp2TgnnrMjzXO4pH/IrKrHESqK2Ci6AfeiD1kK17EVWMiFM8PG4Y7efRBPaWnKvjlAi
Nf5qw6y/Uqn4z7iI3Dgc9TNtV4r/pGOt/yAk2ZTR3mdvj3lUyPBFAkJe3AKDKW+ikkLSIVFkkiTQ
mPSVCMkHAXVA7IcippqQoinf9LlNV+/nbdNJtJe2NciO61rzovHcowqC5m6vZh0eDek6Nls4s6wM
SukRhWjjHVBGKumS2x+DTjdP22iTQ6H0Ic1FOvGnULDNORgh4eIdSitpJplxz+poC3s1rdZ0jRgO
wJrKe1hXmXrenDks8yEl5n/MI8Y54QBz4FpRnMrNtAI3xBXh+YzNWoCQaKIc0LugLV5t7DyM8CJ+
YbwpNp6Y0RL7dCQpdYwuChlH7O2yix2uShEx4/dBIdBIoc9KCX2WUkWnNduc7a94nrWkZ/YzbyQy
KEW6Eujwcf7Je2NFsr6VlPBOs2tS80qFXrMRqdL9+m2/J5tFJxV1G85arIMnewp8kTmL0JBdrlZd
t1lYeLQSLNJ94Blz42YyIlY9zMMLFH0LZK2ThcIhVW2pyq0PMlyOD2AdOznI77CsOb1EeRuvcfZn
oda+Kw+jEGuUbEGxEztrNuj+Mp0+lRRoIR2ISzFvmfUV96gPnlvlKBfYx7Zhum9U/jMevm/CJYaA
nhQbQtW1cWgAdBRdvSwFF8D3BWs/AsnnElpajKnrKpkhfuVn2anim3zjxtapwFejBL4aCRPifC4s
FVPTo10jpqQ8UAYE4I/Du0ZIWle8MVXl+1Lz7l2/0zU6p8gFFGkfjVyDtbJAj5W9fhwzFiAj0fKs
ht6AwehLkSJVaRakwHe6TNKAO5rRbGBQ8gUXWSgDoMmQjNf0jagHeQ7pxzwoxgo3hP12AVnzy/li
HAtzj6jxbFxgczRJt+GkpzM7Q7fLeaew7jjxlCeWpsdGJ+ibJ6h+fJ+3Ej+PEC97/7y9j9ffAOwR
26okOk/v8k82iKFe8E92M9+xDEmd9T7InI58lfHIF+85j/8obfhn/AmRBEjiQJwDbt8NrqKNmlwP
nmdVMQJqHu7F1m90dhgw4eSmer8L/sZKbJbpskPfEdOis4C3bSZ5duu+s+y/DXShRa8WbJvnwjmU
c8+RuWGF+BhP5wGi00dwiq5vGj1ELkkSJYUAHVaU1EErAU2RaQUAFxgDm8ePFPqmacMm8kUp3OGV
BViHQVaFzJPn2s875TcrnlTdiXi1Z649BbSThXwQrpXY8s24GsuyjTHFKYJEKIHYXGAe5lGXcm1e
SNHKIMv+Mt5/jKNLb2nBRe4MwWBdCHhxMWp3bCm/IJfswOVjAOLP4Za6Qj2DmGI5cRZl/9RZEirG
494UGBYpbQKpVBJIoW51xJdmxi/TMAM98xu0/7R0xIn4Ry8FBZZ/PuB8LbGfR30pO9LJ0BwU3C72
gf+itkgwt2ZDr7yivPJfjaX2w6zvVxBqRnUZJ+7XZFKCRaVZOXSa4UeJU4tcIljJs6K/FOoWsTPh
ynZPpuR4eSWPG4FXJDtk3vtIaChkK3ubsbEREbj4PveKfdlGO49FmWEUTpg20pbrOVqn3FMG2PDV
mKxxKDZN1IELvdikSGKBMdv1dZsr0g0FKp3HOx7lcTCbv+i8tma//DRBIHf1b2iGtYMYsJSyZGp8
1xFCxeO7RQiQLYKYwS5mxZpZWAzzG4a91D5wRcaFarWCexZXuI9s5O/joLzxrtb6TkLFpjUXIWiq
wOB4BwQvXV0nrDVZkuQY9a45yWsc5v8zztN/gSK9f/55+BznRcvsilzaQStqjjZ0ZLwJ5VFnEoBR
DV/VSviqkABTqzOQjnz+47Hcz69KzqnbtJlrNpYWQuswxAh++UVj+mUni3nvLBbC0Q2AhncE6tZo
NM8wr37LqHFI8aZJHcbrMm7W7jH/qqKId83lpKOO1wioaHWsUy2hLPD5gLxW2+VVcp6Snt3beEWU
zClZh1A3tWRdr7F4iP885hTyuG8LSVqyrXGlo2vzet91Xt8iToyOb6iP5HXvJ8U8zkTD/QTRDXp/
dlbMkUsErBqmLRGb0QWNTKG92qqSbHcKs14bcXpcIW1/ftVgxl2bi/kom4LFFmuKPVBKiEi6HfsU
DYN+Aby0ZmC5AN1n/m0xSz4NalPfnEPvSMEK4JnDCllVVtZIzj3fd8qnoNp/sgqU7S6k8omX6e2x
OLtT6zFT5SK4cMOS7pIh2kzqvpcEvROY7+fTCVxCI3/fjNhPNMktC9F/ITCddTuCAoGEZ9eJkTMG
qVPyq7VYDIfxEswkG1NyR/v1lgVioGaXhCZw7WMD23Qv5EbsERdl3Fdqp8Q3pmQXlJB1Vkgh60jg
8PvH8FMJG/r9wfpIV5yHLphvU5nYprwUxY/DEtrWdSxpm1ARbS4GYaynaTsSDD/PipKpc8nq5Ago
/Iy4z5XSfUYRV2FYdcWbAcmP8iErNSfUoE++oHjXvmVELKByi6alOnOCbyPX52rVKJsox/iMMIC0
dJr5vsslIYdqAYkn/j4osQIOr+u3kJc/RUmhKOtUSKBeI54BMgDhZRRJp1UmJcQQD8swn3nrneHC
FH+sFEH2CG75FfTHrxBbf8wXJS+/iVdEob2kenVpXfabvgC9R24lGrflbbPh4e3W7PvBFgItDquo
xNvYIOBpFpb/ZgPS2RGo6rZlEGtl6R+hZA5D23+c5v+hQacbZgIhRrQNbT8MiBu1PI4nCm8bayRN
ZFDkWaW2yovkB/R0TZFxHFKFbNmFBklJRDl4/AHsy8I1usB7BNgENb1n7LdcggJwpMh9Hs6IUniB
AJ8xed8eCnSnYeKXhTC/1I7h2zjelkQda1+2UsuRtU29bh3UQZPm9WtXrcmtMeo5iAXvicxmtin7
bsTyKge2P4A4RnH4i2LHtpmIB2ZlGvD/zOmcVKhfIzaO8v7xv8Z5OrzDxL6NCvU2LyBrmODxSfIT
lDAbrxSOF5tcm+f3qRdLt+zGAFih92CvX50d8qtCtEML3ASrerGbdZaXxuI6PY56IRSvruE5PLDR
PijifTWvAoCyqjrrCn7Lei8n6XU+OaeKTvXLg3EaF5/GGAmy1xxeztdBaTrSd/nOsO3L+PabWiQ2
kvO8p5+4chBcWQGOxbpxdoSX6X7HfMH84YGhuj/etmJMkm7vBQrxVwC0ApxlIrxH6dFxjUOn6wuQ
b8DgOH8fy0Q9pdE4mdj/A4F2LEKnr9F40SKrTNBm2TatI76GRJpvW9VELvkHuj9HCB5RxbDiiskd
elaK/mTcqK6lntZBIBmCjrrnXvQSinGFbawUS3pjx47XnXm327ZQiGQaG+nOxZvlHtb+00rQWOxZ
wvTCafpxRbMZq/IVyem1FmgJKzk3cAWP390HWRCRVVxP4OGrTVnqRmplwaFPxh8YluP5rGCNekkm
ycBVjN77BsMKgpUj/DqP0iWr4UsNsBrW4YvsGW5Gu6y8CoLsRZX8nmPTIYtFdwJcsaB7sRZkesOc
wXo/kb/wkVCehcSp487Nisid/R27ppICxs+cxcD1o2Kru2ZTMNzaeNCFzhzhjMZkuftqNJ1Wp8ia
WspUQpfCrzTPbDtuNSJTYfFE7rGnur3Kxc7CjMAGQwg68L4p/DYhuUtddGoDIyWG0Icyu1O8HCUJ
mUmlg0IZWqr+rJI6crgXBpQHe1n1CflSS67htghEgbE2ImeJU8q2lxjF9TQwPW/3U6IL6A/dNtPJ
FdGfScVXzwgYcwfHV7TpV2h+ikygrjIphLRKtgRGuOPcb97tEWqcFCutlc/IsXb8L3Pgv4NIrnlb
SkQql0Cmv4HiYrWoU/n/nr1B1iTkY7h+kle7bKhaFFkswn8t23TqycjhD4wf/n/+Cy6mjiBvOcKn
33IzsZxfktWYLoQYhDuNN8iWEMXS+BPiL/vyonVVSS2R5vvlgNNRe1nVrfR6rVMCHo51TFLokZb7
ZH4gl6QigPH54831fkcv3f2vEEynysg1sKwYrSxMhIe5KecmXQfvsns5kxOl5kaeGsHXkuFynRxI
KmHDdFKYNgT/pSKbRcZEBusmgh7638+X0WI8lEiLvxGcHjlAe69OAk8UyhDvQuK3mt9eBqPOF7gd
Orid1a0xE1orPSm5a+tf+1NFTakEYxvJpIHmF9TyHtTK92E+q55J20m0UM4JpqL4Na9NPRku4/fx
QpSN4LIoE8zFqrs1u5QqmM57ni4PGOsobKiTptQsOcmqYjDJbhmpwUa+o3DWUSK8RKf7Ql3iZXxV
PP+yC43vmtkVO3o3kVGRSxk4HhF+eZyNtXxV/ImqFW3RKP2P4iGJ/eG1AvH4k6wkAUE2BRGpKMYE
T7l0WG8Q+DVUYkLUoB9nWqSCaKtbKRhnnSNn2S4JGr4i5/Yf+MuOMyZyjV5G421ZMkLFquTF3Nhz
7qn463HFmOOJoF7KNchZbAH6p1ki+9+GwkxbTmUhyS8/b+MljmgsaMm6pmSPHGzX0hqvToQS94lx
QfT6kpqtnjUr+wISL1WDzAsgfapFAxCUvLDHE0cJcB1LeUsyYxd2h9OT8riI86kwKuqOUk+5dv3X
2BhVQKQMn7OIApuTASj8rN2supBCmB7QkjL1ulzsh+2v5vL9DU8AAxuJkB1PfXlnNnDR9SBm3ZfS
NZCZIJU6YJkXERNctKW4mH8+FBlRZ7UEIOFOwQFJYRUkSys2K2dUovugbAzXymIN9luo5QdiYtVt
7bNMsmTtEFeFA7zre7mG/et+5lqZ618tfbOk4ezbQixX9fftOv24bqIjVLeg+wmM1Auh7LVDooDC
JrPE8iRg3bjtXxTT4A0n3C87Tx4glQzp6CeumTKkv4sg9+FNDEYaAvMbarzzor0IkWGSxSnpjBBE
80uigUknHQWu9PwvTMevHSVXqer6P9n/KWHUVJwsrFmtWQkzGy+jNkZIL1myLjljfEGIOqYjRp1c
ShHvhVApIJdSKsJfnTdnX7h2GQcN8l/KtUGb6gMFANyGUqWJ1+/RK1XwyVyHsK6lAelL8o3nIhWX
zJdsTS6lkjfXWmBglfiMb+rn3c7PWLe4ePKPjNqTA6yt9JAoNQ11RTbm8TXgVJWHMCzndMHSKQkI
+X1zIK+PqxrANetupHTCk69dKK7sJsKZb3Gu5iCVlGomtTeCwn4SUubRvA+aaGbipcLn0rRrBMyb
NWHYXwfb1Y2kyIMRSGkpZonoFj3L5LBjhObvVwxfBs+3rrcMCCs0AS8/1WoqVq6cb7uilbLaG4Tg
VlLR2ZYEp+CEWfT0EtK7ZRS4THoLJV4HqqfBbP37dFGL+5hexC6kRdvHOT2hXFDJUFds51lLhYBT
Y0LuiJPW9oCZ3hgO73Q63lrxUJqt+ZAJOHeb4U5C3EvJ1GOtHbACGm016Cp0HDR+n5IbDh4wv7YX
vg/zXa1c6niijLf/sQydvqVTsm0nPZtaqpUj6UQ0/+aOwzVTAqpdJ8koT157gt7ajsKWeNwUy1RE
FWP0EFGO+vdFzs4e1bAl/bw9XvZwBNftBgNjueMeHy+jL0tJMc50RRTM51K0B68AlCRtyDFUNtxl
StGFFLnEJxCIaZ1Jr+7Fhgvvy2XQ0arGFsolW8jJd5eXyvIsGsNjEeoSLpWr9LcEqeRYkG+fVFhV
Kfn0adqUOk6bwrvIIGilEUtVqYJZ2ac6NKmFIiHyAlFnIRpxuixJVD/jJS7W3gGJBMcuOhsRQ7zx
Fifgvjr9TJFKdF0vJT42yaBkjbrIc82iLZ9GY4/mnM1IwPwIaIajEnBhkqzAf9huNePbcPyEpUFq
yTonSka0lwpnBX8LHGPF4eokE2SLtDQnac4QyMvpf4mdXts+sQ4WT3raUaArWlrMp8ZYaqhhhbm1
3zSmmk5CeKNtvJr9ai91Mks5tAneZ1s/vyacz+s8vO2oKmky0btkMQhsMc5rspTYVRfEiJtsy1rD
OjspCiGXOkMp4VKF/pCn/aUYOk8EQYQJetFpMp8pboYDIsXtIU4UmT98Kgqcp3eRpS/3I9lC+/t8
fnsjEUthJWU4EQ+WFP55Fhc6/L6Sei++GvGf9doRzijS8/4CHg21s9K95g62x6SGDKFYu6dkd8QI
FfNgzeUYx+vvx9v9/a/jDK2Lp6sKq+oLyaaOZbPOp7OSxNKq8OnRL9/ONxfXVWVIkxWSOgkTqqtx
vR53IhhRiu0tbQ+PI0Z9T7NSaNd0hYQTYtEMwqPtqCIvMoawRtugDnlKiZdvxcr+86EZ/nWTSYIb
gxK7iEPappHAE09MHYo7JdaAbl43gdkUX78rd8HxsZZMQeNn0lxYtOB8vY4zfK5YDqJQXhuTcGf4
vLa50fFxHU8ew8QKCxiJdHXU0MO1qKifmBFdQ06YI+3iWkOtW+pc9kMeuWizJxMF9cAbNk9KtqQn
i6WVaNQDpo/r43LZSfpRSZGr9YCm+WY01JKsIMslj+QVkvZXOGIE3ykGfiHVUgaQeXJYAaGuoRNy
EUnlgrrGlrBw0ES/rSJElVe9Jy3+gEDJyXgVziJEJIHKWVxLPYYCgX6DsO0jRZsgWpUuXZE0dLtS
5CfY1Evcz/fL3loJMRU7vfwDsOOvZ+pV7//18N2IzwneVAwaUCCG3K6y4oXkwbjA1P0DYqqnOM69
4O3jkUe4wJKn7VCAUVy+vxXKIIUfpGs8QQsfBGOV8Yq6gvdxx2sJD60thMko31dsX9AuqMV9AV9z
HiJFxwVvSQ82LQYzyu3JGXdgjoHtaYjWDwHS2CUh2RCjea+n+AiOTQTgJaC36+ppBPqjMomG7Wjt
mbifj1cZo2RjtJZXkjml6fhly2vqGKbhmQkqEWLi2S1vOjxV1ChBul5sjxoIGqtg0R41Cuyc7I/R
i90Swn5tDu6kGHwbLqF+VzkTMbInSwm4ewXnaKvoVfYjJYJVSUlhC1pAlw/Vx3zVzLiO0ybwqg2C
O3ga1XS9XJuLHWu/CERjBJBpZkARqhrBCyq6uFMQJQg8PSD7uRJQ43n1GlMfz0TnWVbuYjUXqw4Z
E4I1xhCED0HYE0XnaWgFn16LyZRYwl4x/KttxXUh9UVplfS43FHJx0VdK8kDpEoTfSrLTmzcvDbY
hiqfnVyKjWR2RLNglZIFq7fg/WprTCtGcxdSbVjHCv0ER0AC/vQLPPElSeDdSWQkUELn4o4aq0HL
9qRf80tK1KtUol6llH+Lbm+pbG+1jVPZy4xinngRnOC/O7rzFIlU2XUJGgjWrRMqhHZX/7aSnLZx
zJPxqJbjdNMaFFRSo3vmHCeiSMY93vRTqr8aM9MR8Z1YvO7EMK9oMGdrbP/HrHpGofx7yitYyB0M
vbMZBmOLxFhwHtYjIFlZigulZrgWRs8c0vEr0FSRYN76ZRRDGk7ACqrkW3opmnp6fNz+DXkI8aON
j3Q7Y92lEaRGk18m4yNFSLEaRoplqfx8teVlHL5pHBwVr9f3hYiLuV3fPu0HNipBfyeOhB+6fGGz
+g58rPWSxtBgNEbPxmh9JON8JWMyMQWXLmhWflILG3KvHyMEix1HEb8lZzttQtvC9apxYZvkvmR+
Uj72YafwYz4jaTOYFUbuzed/AXLLGKT3+IC1X2UJgtn5RXZIqLBbJYInzVRTQTRu7SfK2+JIU10F
0GVWBuzZRKEeKOvSA0ZKD0pekYvIG+qNFPT/3HWsrsNKE+Au/OYp62nZz7P+AGzjyaNblDEqtsn4
j56Pkfy+Ylec8+7Z721p5Xr+DDIcGY8deoviI3i1aHqlF8XOpcMYRnBzrAtmpqNvrz+YEnRdmQej
gCJjrGLKkho2GxZMCWZzB3syMZ9y+x7CrblbQn8L4FQGytUzh05uVpi44eL1qrRCdokISPG0U8rH
/BZjNCLnj2jFt+56S35lLCIrCCJlc5rtLndWgWGyH/I0VBBqSW5/QK8iy+qllE2I/aU4PNwcHvR5
WKgUA3Bt4+tZg8RXkg4PO9IqwMFaqvpcl3i+wiwuI0YmlMKUbNNJnoH9PEKZsv/KXGRquC2MNNnk
suobCYVs7xGjztKZ6qpCceE9VrhSXPhWwgq/L5ck4CqTDMMgluWhsEr+s5JK+TlDiTHLE123WSwH
5E69wcGPB/P1PCjgd059S7OSKCXWGF+C8bivZDo0iKP9epmgp939V6xwUSjPKqngOuw6uIIDqQJC
ySuIJFksnaA4YZ0UG3Ab8T7+TCZqSgkc6ZgGgEzBcxEs8zHlrXatSEXDO7cuuLW2nibZJyiTukz7
PvY/kXPtfVCYZPKuKcTGjD50dUUxdR/fVCIFkTfS4XSvUxpa23FSWoYgHz5cQk1BkHHUfrt2TFoz
fHv5Zzq5bbh3Fi0bjg11nr9j5DNMnytYWRb57EtvZtMLWAlZwfnDLHiKbafsizAfqVEJES8GVD8i
UTzmlN7Pd73HYdFHu6VI0Z9GGamVGR+DsrQ0fLGQ5P1TeXiKTTCXgrVGe631Yos5TZXppMpklNCa
lUEdqjION7zpWL+qdFsOzFqnKHiSUhInEvhagV4XUhzIR24sW1KqptGbpngzK6yp1hnzjFAg+R3P
Aedi2SWVf9sol8g8Euk5zJU+Syumkc1NHNlcbRmfs5VADWyy4W7puRPEMZWkqTixwANC4sv0mLGR
zHDSusdUhdTjgVIFr2sVNFwOI8KUmHYmpgztvRp/3ua9JQ8dh1H5bh//F3rubEu+feDxLyOwgYZ4
UwKuJGCszXMxArkQp0/MrQ1viKTAb5mphwl6/EtjskLJ+gUqYwEyEcVuFL2IW9Q4gYpexJRrVnLR
b4pvK8fMecCZxedXZhu+fEe208d1Ul5IJjGk0RI/VvSbXFeXZG0oOPmVDztnWb1v/0veVM3Twpj3
vvf7ze9n9vsuvbO91D3YLDa9TUXkzqS/DNlHi3QvyEJ29OA0d17wSr6tdXqDxDRxlmfJL/NSnrPC
ECVTYajctbzYgB99u/fqiPWSGmFHmYXkH25LzG1NbmYlkfWZd5zezE0ds5MAVfq2hc3p/NtQZIdI
86xgy/OSZ8la2hP0Na1SsfJY3lRk9YXvjRwoN69phwSHz7Eohz4PmGba2A+2KHLsDzbsB5t9P4hC
0n5espuaR1eIMAf7RcdefRXfkzz8otj/6PEHG/95oKG0K4O/y7aGM0jXyQ/9Ehm+M6Hg8MM+nGq7
R5biGotgqkwupj5s/VR9XjkmnHCObXjFGlUt4m/U4T72qpzHLzr5N5rkBoZnve5DvfM2F+H+d3u0
IE6YPducHVy783e74BXlVmrwwB2EDFTpQYxnuaxr9hqArQjo3yHSi24DzOi+ZroU3SZ20KdNz3ZD
4rPftGsrqSf6Hmun/c36p20lJ2iH6VF0mcxkrxiibSEbop1ydfrfasc1vWxiKy5A20ll2ppNVHD+
bY8P2GHbFl0nmzZ7jcagWpjJSMVObWt5/1tlfa0EfNztOxRtLz/dNr0/jVSOsNt0LLqw5yj8Moqv
n7fh/o5fcLjracTKBOyoEEvGFU3us8vszKAV3Pl4vtMww/y2xEcofHaR3Rec02G5DrflfUISUEjq
mD8/LieIeH47nO8LDh9jVCMwuh+cJUlo8NN4J55RyxKiJBRwLAY1YUulsSDaTFzSylyqEB1i0/CP
F9t2BuI9FIwi/Gw0KEWz8Wl4pkFoNvfR7D+EyrRIMM2pC+dkW+F+vJzfHtPD9ke+x0LodAP8RDC6
WTqYM0xFOfZaAlXQ/B1dEMLVFm36HgCAbXxspOkTkXb+WsMflBV0PifNKmrhbsGvax9mDH/A+N7v
Q/ybliXTfTuH4eVlHr+fMUCk/GBbhx8XjgqYnqk2Vb9TvHzTbrT2k/7WY+7eUn/91H6s9Rl6xqQD
gT+o3tF/jkGVLFlu+EowEKk8i1J6ZNsHT6W92H3ju8prQWN20lNT48b4HYODMQAAe/DD9ZAehUE3
2K9jrBPFn/KlPwaW9Vh3wUzkPo+j70M7QpumOcqrQ882C4Sgnc11WffSlsf8jO+KKO/tlsSTzLSi
Qno8q/A9fF+YzlKmwBbhPc3qf//VCYx/n+YZOjZSY9P5V+gMAR1M4zNr2Cmx3NACn+ZZV+bKp6W0
pcd/wadlpv4qw8uxnj7fTvSrVVEqv5pJE/ZbmbhbTR58bic94S8b8zBiwNKnDLXVknSAb383zRQG
B6H768s0Xcbh+isIDWUoLw/xsTkQvxnAmgaJAdoN1LL0AxDXnvKpX0aQmjCfLvfxpnxYSc+SftNd
3l+jtJg0RCmpbRzigm/4kto4/wgZQIEGsI2/ftX1dxMKRVfLjVv/+Bjn8zG19f4GgUndZ+HZ/apr
/qYPVS9bwNFcpF93aLbGi0d4DNAD8P9LCV0jx4DwRdVxDMjGanqZIBx/HkcsldAEUR0KonZ9hJRx
Wp+jIpA3VmnnzC+lHzN92IRiJ2eacrq/A7sgPaHfbnzXgf4rn3TFSgup7FATagvyeUbQE6Cw7j/O
6uZUEiDbwjJI46zqWBmF4X990p7wdz8P55NiG/eS7g6PFpBWUbIC2gOG4PUVzRubJiGvOeDWj3Ga
jg8ik4riJ2gH8tCS6dgM7O0wj+Z6B6k1XtMWFYdwgltUWMfMFwbGOpLTtjbiswFfE98O8lmm2Cxp
a5lB4ZFQ5svH/PQE45e0KKU3+LgSZ8h1tdWUITjG1sd3HeRshzQr2CVpfQNe+4TX3ojKCGUp6UI6
ZP5klGPNw3Ph3rYzLX+7NCmDo3qWJi/DaYf1WYVvubESF/oMHazRoWxRLkkjiJrsEdV5K/lg0HBp
RLQbXnrlimRPJhdu70L/ufn/UBJ+B+K08XqUqn+Ic1nk3nExEIR5WN766BDbTlbWsYEBHO1E7MtO
6oWyiiGvEGLfZxKThkcy/3yHRp3HODSozkUeo+vLcsMuDclS7IIjxbk49tsf3/pS+m38kiE478Pb
AnOBv48P1UaHsiwZSpfzmtVS87AYfG37VFAHIboV0UmUldS9B4cxh2CetHYPcxHDQtsIyOWDw5cP
xHQQ3QmRyHS9En+f/uho6P73X/7sI6UKGXXNecF9mbyxFChukGqNawbIJPI+e0WOh+PnHF9OJjET
+RtuxBSFiWM/nUvoQPu8IcS4Pra4RqJrLrbjpDtCphNQ+H9Af/JFuWm18liOeXOf8ia+ll4iRsWP
oeFM9Fp20d+0hAn+mS/xg+gDUWM18uP+2h2O74/rt/iX+YaroQqe+UKhH2b96Q+9k5DFOBie3Rrs
jW9HL6E93RHEfziXkNkjbSOYWqCto3JapFLDb1dWyLOrpgWBHb1A286g9TrSr7YiODqJSoSF4CTs
ezgBlV58BxpJ2aCaS/10JtbvrpJRlYuNJNk/pn+dL5fhQBHp6M/6byGybzGlpzsyhFkQqHv/8UFy
qVE0zt3TewzKvvHGE1W4+FU3+WsbFx0bkB1TEGDq2SN8zGdFDotEanYpSJut2Bpy8yv8WKvMMR82
gfoo+o3Mix99F6YG2cYFCmAfsaqZiNj0gbTr5dUp1rgGKCUuA1dgpRHsFVX/nGsOSV3xK6KC838Z
x2tx1lNeGQxdC+5sBIXDkD1nlAyWZnZYALif+pg3KmxXWgHGUburp3S5JRZoxUWkWG7LYjMba6AY
V8I8jLV2/Qo48jgJYlluKvnb7ZrWS6eAxkvmT6AtyZakfNRLhNzspx1a3HrAykiZRGPnFgClFMax
mu/n1+GozKesJOgGmw/W72C/2OTZcBQCvuKA3dQCyl/Ob8otaSSQ7/Z4E1tcikQdNIjyVSc1HbGb
8PJ4faUKEZXItuSSs2axiMPL5cGYVaigT9nKMlTgrvuTfSOJDvVlWUrE5/zJXs5ImrhczsdRe/st
67qI/yDRARcUaIfOP42rlBJgMjutF+uvYFJrhTJl2UtYHLae6WUxUggYcVY8mrYqNhxxE+RMGNkh
sVOcPSjlyqcESfLN5FK9GM0EXx7qLPOAztdh/sThzowVXBm4k2YGZVrIpJXWO8xTdgW/tvbZOEEP
oExfqKDjMr1ApR8mDuZ5+PQdug6vw9nce4WMiJEGMSwE+w2o+HexkUQZStl0T9fexliQpRS/sf/i
pKw4GJZiuXQ60kHVeG3IJkHXA48G//hxy/ODHVX2KWm42jPP9KtbEAMPVvzd9IEsdAtQTBj6wdx/
3QY4U4wR2ybK6ha4Z9cHElHYgGLPBjT7BtszVOuH8sXSMTRfxYV7b42yOthL8McUvBD9aOFHKJMQ
x4rroe0RlMonbGke6w4FgTu2pQu3JVxjGN+MD5Kxa78OgqfkZhD/tvJ33KYUEGpzGX8agUPss9/H
GSq+kTELmwdj8a5tx5tInqyF+2HmPiua6Ccrz33Did1izw6/4Pn9bK2eN/rWqCkwmH0N+3C7XYAz
Eq8v9YvB/yG+gKwNc1GlWh1G0+kl2hBiw6AWY1DG+zbGY/crpVYTlEpago/RVaon+Ud8L5Qm7CRf
FMr+lxJ0MMvr+CdtLR1A7KWVvDtoE0gEWyX+Bnk57Lh5HX8c7G1UZixuOOwWaeEL0Po+bsouFWHq
k5/YcJ2unx+AL1Tn0LdhOsle9Fy5JwytxgszcuVtMLAaf055pXxSSRudKUidjMH+AuYTtGFts62X
YVZefRUmCAPqVuS9N+5nSnRkjYS9oiEug1E71B0UhaQrq1WmJIJn4Gohv7Crz6XFQQLwQ5lZKWXq
bdNEGlG5KHWYWLPM88g7q2aSs14Uc09P5jRClg7/mH45nZQEpZdzxm7QKK+UOZXhSReqwqSXL+KB
srxTLqSI36H3adcIlfaumzAchHJ6YuI3y5UpcwgTk6K5It9aEYcBk4335qTpFSHiqtxee6d5LY/D
cLl8KteegSHQvfUlIsoJieKc4l8rL8zK06oshSHeMnRKrPAplB/vGunHOXmgOWw0RJICpJJtD0VY
drUkLOle/cc6hX83M0j9difh5rJcsWLaXJJ3sfIOOqhWumSZAqXMOhGhe7yMgzcnVq5vEoZKL9KS
d0UNgQZZoay1E7V/zB8oOXvE5pMiX6lplJ8ToRCZAvzMmk5UzpminBlGjxltgd1HlDRAkI00Ksqe
dtJYTAqk7l8v3/1M2aRM2mDB/LcCSBE6ZTh5y6INtOCW2pnsbyMMlR3gILAMm2WoldL0hkQtv3Kf
oOjgXROVNdQS/iU4TEgwRfuM0SlkT6qGKNgud9dmBr/jfyGOBphTV4Zab/oG848xaBkfofIj1PiP
9nmEWK8HHKD2A1AJWrvSpUD/zT2raNchQOC11fMMhqv5/1HMAg5SroOAWGhs2OiMza4gBLU8bpBw
w28f1+PwgEt3mj5KhnSNNbRY2xdUQd2tRbxgqwXlW98YhL07PoV81xR8Tw2O4lyW//G3P/+/HtNd
nUIWTqF9mkK3awq+2UpQ+hBjO6SPWKcXi2ZwBuVpPE6EZTm8zOPwjSKRwv+gBvqQXcCX7rOcrziU
zl2Jg/nqbEs2amMgAA+lAOTl7HqgXW7vw+H9Ye4okd7HhXCBzTUr6TJMl4NFba+455/RIXrf44UR
10GDcdbV+RDH8hW8o1q1UX+9rjrpW3abvF8LSEhAMZKdwJtJxEfq2N3wEhUpAGl7sWtJYku7THoY
ZkstWAaHcwxnEJOf491vWvZYmSs2XWzLGu0eFrxjV2UjxOXT+bJZKdPwnYCYOxkLMdGpMDHjjWS/
DeC/Lsovsl30IZ514fP0MVyVZRfSj8eMN/zBOpeOjezLkYC1mKuL5cjod9k+9ey4cNLKZ2X4hHRu
CZxu1T2JsfgtI3NI2exCkgI/ygPy/Pv7v5B8eYHOxMpq/NSQ0cJoq/DwtN40NEIWqre1TH6HNKgr
SZJYTlxYij3JV3OFMHLG+umAzXW+Uoe2xDPvskbaMzs4WQnx3hYkKMq9u758frxMF23HcvbOO981
jr3z1Ka3PW9dlmSioEvYhM+sjUmX1GMX9xKYCtLnXXn1g6mRzO0i20Bl3/xtAa++sygYM13X/AGH
Qa/mxzzcbpq0bVv2jjgXQbFnHW0ofxo1TFVwYsAqANEYWwBVv7LfbXjUZViBizyvDxUORS+gDvVu
E97f6QeQQ84f4/Wsieq8CG5umUVfga2DU4by+4Gwv9q5dWgU4VBwhorOKsO55O4+Ox7QeGNKetGt
pLR8eD7xDJoq/Pki2ArjL+zb0FKyxwRRoJW00bOsJOMD9xFfSKojE921JlRUkjmkTKEMX1QQpre2
3Qpsxzg7To/EsDKpTNLT0M4YEldT8vumY80VV6aCWOiFHmstmSTMtsSEqjsahcGabloevr3WUc7C
C7HTX9bWXfoed42kbZ3BM4+vRo+RBRRtQkHjiNeFzurfp5//C8TnOP/n43L53ft4/KacTh6q8N4C
JY9GrV6gow6W9wB6TDmhjSVm23ACvMVZR6jyr9PB3MX7oNnQbF0Vo3E1DpyyhlJaQyymTTeklM40
Fl0teI9gpzRaf6ns+eEi9z3UPpxxG7TYtsMlfJ+mlwQgUOrsMNwaafkbh2G3Sdv10vkDrdMOVSzG
FWKxWJp8H2pUi1E8v+2TR00dyux6xdXs2Lci4mhtXfi4kO0kjSGp4NcB0qrGXNaDLF3GtqNGqV8/
3UxrkqcCFJ3klgH91Y6dYVLaV03EblTKFe86KWjFV7TRR9jnRllZK63MiW4oMMA2IloErO1qSbmS
vYMtDgHel7IGm9BqzS2BxHIbAJZ6uA7fz4xqeTH/7hlfEPT/nTeTUJjyC44uzgEUlNsAMQ66jMN8
fMeGiB/nf+klYRz/CVab678D4yCs2Hb2tWcRH4f1hUFvpvfjoBP3MVAPnQs1BDfrGxZlfbySE/ww
a5PjeNCnIMziH97Pp9OorJLTE7colBu2X4SXTXSb4RDksFcRjLGCh5Oj8OqRDDsnsJ2CnJGyK7wE
B9MCNfuWrpLRwxRrweZQyWPjaNuu943mcMjH9cz4zAHX6jATV3MIieYTxQrSzC2RBVvoqzFePokT
ffQNJy6fykRZeXCByb0qvBFs1S8PMkoAIYDJt517wduP9L7nOP6EA2W77UDnLjEg50TuMdzHNvdj
PJ0Hh2zUnoIH4bY5/oNdO9YV72o29Mf7GdoURUPENCs/INjSdeeHg/oheJnKmbKyBtivMi+jj4D2
Xm0UwIHQiLYuC3al6VXbm62cGxM9xVpA8/y04+Y7vUxOvd+wpnjsdaEVCDL6OI9mZv5yJXqbFCGU
HAqFqu5poV8YjpUC80obLghQNysj+OVig6OyZ/cKkOyTslWcpRpRuznfc7CSVu2tAhdpNFYdmEG1
jqA64FZiJGndI2WrmahAuzNnd8ofXvL5Mox9hVGQ+E03ujaOO6RJsdYzDf6jkmT3V8QV00fYHbBn
l+D+Y1plywGSLVrvlqLkrctKKjDwY+Vot07K4lhNNp4gu0kol7bCc8fe+wmhGqk3d/OQ2G5WZIPn
WHJ14aXmPoHJyWYJe8A2+nxdOzHOAzgKShPkFfefr2n5LqYUPQxKVYuMMQGCBXXRP12r18twN7uN
rEJxD4aGYxoL7J3Argwfo1OwcQwA3fsyqm0C8U7WJkCeldlVUkkf2arYwOmnsvNcZLUot9gh7j2/
oNaJOt0I+5Pa5aLe2gW1Ld8BP/Hu+ijjv62N85DZYO1ihv9B8L/F/b+K1771QVg8MroyDKsi6LCV
e60NhIlVbThfx8M95mBdGMHDDt7KODkr4HFWdbCjDDBg2fyCvzss38636P/gujdGfb+i7KSsgzgW
QJn1dlo4YsUzzugtVOqYykg8Gt96RSGO5LrjmWM73qm/+cl4bfpUqy9MFQSaH3RRRm3ZqKxrbXRT
CbH1MRiB/DbclJFLH1XBqbfxcQkbTX/xuM1q5K9g8a4AtiWOjHWQ9/l8U8bzkTzwR9pSX/91cn3p
Y9QnNKoPU6AvYOx4fdzz9X2cz9q6fRbAO06sjsC1X8eagqefUSNgRSmmgmKDxcvcabBayivGBtMv
fdk8RSqlXYwOUvEi9X7tA07i9G28/276uD2MBf8L7A9+vP3LL29lGaY5M/GnvroN/uwZ3Wh6qmuP
UEwlaNngomSS0DOs7f8JZWQRp5QcOXHLClG8yKOuglBnXKbZVk/nJ77b6C2oOA9AH6w5MhmvEZ//
txSGpeIl2H2AKYuPeFGGar4wcforSNwZj+8Q9T8rTvrQB01fonN83CdlrE6qKlUnqVg1vtzToR9j
IuZAtePKxLyFhC6arKHv7+fjN6OVF2UgZgFSSqJyNApG6x7MffgB3jU4oKjigDnO/MrLFKOtrXjV
P7VSxQirOMHHVWlvXnEOEhSpKJxlsyH+iCvO34GGLrrYjofX9163JP7X8YI+dhx4Woc9sjIH8bWO
B0aV/LDxcSoGYGX9kXECZsPjH7K2Rl7v0Y8fx8ijww9ZIyUPsmf2vZIMxe837aGKTff6+Ie+BRby
G3gHyXj+55Ot/yK1CP+OOApiMiFlHidgAFmaM7xuASAEx4aCg9nACRYTQ/FTvG4Yx2L5ZtZpwk+L
Wj7TtLEP64gtXjVZnzciGNhMCOYD/+fCa34wuNGPDwVYkHe9lB0Nlmy9LWgVqzKZ0MKZYmZULsSg
CsG6I0Tkb0A94StrASWoWKcc+emz58EcLWPNusHxCXJwp38wwWBmkeMANZX3Q4xLhNbqzb0a23rw
A6Hy8sv0hqUntvAFIl/KWYgIV39pgEqMLg5GW7Ci5nYZjvG4MN2bTDoScOpwaHtF6HyTa+ZoZfDG
ctuH3M+ScKg2X5scj+WgWUGIHw0z2dC3OFisVpRGw9YhcpG9PxwpWPSex8f8Q4bSjgyYXDULDaAn
3m5WTS3Yba2lvTtnsjPcv+J/vGfmDHvC0Mzr8X/10jNAA+fQcl2UcP04zz1zY/AodjXtC4LG1Bih
/Io8Y6A2AG/U7A0BFejxvjoXCXREzgoWGMrFHvaToJ1jlGw4ViGWYEhSdr1HSUHLXrUnHMXSEDat
HQKx6ESHZ72Lw+lElul9BnQKVNZA5UnqBTKACEP/xrYvea5FLd0UNkuQiGmJLbphWJb95TMtRUge
U/HjGxFQYhRaiWrlDDHJdPD6pFbXYCeAMWfIFQyYWYyfxdnSWxjxqSury6KrW1t2JbebofABSl6z
q+Wxj05FokWlWSreskDxmQvakR3eaXqAKQtCRFGNufTGJcviBs/ACI09FkYvIcDxQ3MGYGCfDi+f
yfhxzisAPO2BX7C3y9LSohHrIXTbUb/+rIiIdGP8+hNbzfjT3uf9misPNVfjXytEiezsv/5wC+lq
O23rDtqCnL4kSwsOZ/W61m/KmiOOzl05wjYcu3fMa5C3hBlTsQ38mCZH2eWssISySencxD3wS2bJ
PKclkK9os4fK5PwSkaTdN3rivlLaRPHyD3y6tgsO2J+GOd7gL0nBbf5WOeyNiHTKZBowSUJlkYnj
4BFjApBt1e/TPVRuSCMh53euW1ln+F7KPGKif80+YLULUNXZbZ8KWQQo3ZIHzoo7UJk6KF/Uv1kf
oiJ9eRk4kiL0cR8erY9dR9RFFc6zG5HaQp5j8azTgfb6gtqqK8kxVt3EHdvIy88qpLJoN0tG8Efy
iHnq01fQOQXm0ajrvfmKz8AsC0/puZnhntPlabRifYCbgZKnWkpFW+7BflEf1ZJEWC1Ld6b7/bUq
aS+F+lO5brV0eb+ghVMbWfDKX6+MMYaAEU4wwuIIERqikZwsP4XRmCFUGpWWUX692P81ai+t5v4u
E6kI44zbUcl4/dotZuU1rHMlC/A82wjKYK1UJ7Dr3SbsjiIUVxHreB02ZSAXUcvN3WxS6DNC1WBQ
5W4XUcv9a3EiXi3TYKpA8FjBxnIDHx4QWf0+nC82i6BGqVnuG6EVRa2Gtb52jcpWeuBidJS4LBLB
0U2YoouFKb4YKazb6G13/jYNseiMP3Re4ppBh37diO3D+EmvhQhdVsLGBlP16HmXSTGfvRZyUvDm
0ug7/Lakpi5FKyAWv0kPV4YhBZs9d5BUImdCrjnUQRdfxR0ds9+G+tqg/ttefM+ljjBYDerQN2Lp
4gqbtUdO09xHzYvDViKXgy3mgOKJd6huXd4jWXKaGrPh6/WO2tA/6UU/T0J2Mia/H/MZHaUP6NBz
f4n/TM5r6OBC2RtlhDo88xNRPh7yLHsKmWOJLu05Q/giYn+tYYkl72mJdWgbduHuz/fLWqoCwDDN
5OmrTbS7CMdCnPdBxb30lWiqqju+Ti/Y7/mi7Hcvq4Vgyxj64QVfXFwg9BwJ6augVyZZeLN3swDl
VW3LlhthQnpNYM8zOIw7SDpJZf9bqWaemWzUdEi5T5UkHsKGG2mZUORy5WahHGouRSX9GXgAii7d
+1YkkIE5Q83ifbHPzfVHVRZRScryMkF1wquxal4u1FWF+AgmLYTel7zOHpJ/uYsBTFcr04zuNlu8
jJdXgERitwJlvE0BacU4UNfaUfPC3t4vKv6zL8Us0nrrqIR8QnbCtRPGYbhDp1w1q9szhAH6mvWG
IlKZUi05NTsVSqm8jY2/ZalbrUnymNdig/PreXRwDeV6dCJ92iotcX6L2ahvusQUkyv2TthiZcbO
QrfEqHu1RomecisVLa8TRHDR+/mOfdDUKdaZTI22sn2C1ZQyZnqWj2K16jdzY0+Hn6jRLQ8T+glv
CldLz2xi8EBqznD9/xctWxSSeJel4kERcoXfSeRV67LsWcpbiaITmdPdEXlFCOAArv//DeOGe9vU
2yZjB/cJB6dcwVxiKXpc59HID14ydoi2qKdJtKFlUiUW+nWbgoOreAsfOoW/jd/H4fLvcbZxWm0f
Cq7wwf2qFHzTrW5UA4D0njfNlYFE7eu8xdQ0ijpEr3fBcWPcY1KOigcqCt5WmPqHkViECx5jfqfj
aKSb7Vnk16iM7kSwhA3rBrRu6ad9ZMpW1lKkhAkt5dNOIifjL1152F2I5smDn90tJxmyisV7+fML
BM/LQ1ECbacaCt/PYBCNrhf5+e3qKbqVPWKXhTevZ4LKakLyHV60RFDPvO8KS4V3MO/0+YZO1/an
ITkSuACxOj+6ab3MOtkqv9xI3ELA+vYz9kURwrKaJLVlzxjBuDUMqvKP4M/9zTzK312Uip6+KGV6
1k750Vb6UWdrhCW1UZ5rOtJMEkYa2Vaf/5+Yj4ruZskTRnl3D58RDqs8IoZ8yX2J8HhHJUW37e/T
zd72HREOFl9nd8gJiqSwZngjzL/04V79PHwq31ZSYZInOUlbvr0EmTpfX8/X833829pUNn45Spk6
MlcuR8gXXHAl760GuBZeBCnytXu6nYR5+LgNR0J6x0gcqb9cIzWriy2APqnCLny6Z02f1OEntiRj
frx80n9v/uAYEOZ4G6KKN2vyJQGOgZ/vnmPNiTcgqVi/BHZxcSrO/rWsyy5EfrI1BzyWpNXk4890
m24uRThnpmf2zZr1K6nXIAXOGt0pxwKFnshiPEllatseCvU61u//6y+WkQpHjTeqqFkLE14ciLt4
uYxvZl3mMr6cr0o/hKoTW7oYi/n8+sldT79MvbtDVYvdRfBzS/wF/UuHZVTm1EeHIBjR0+2Ij8Xb
4+Sr4HYbbWcEkHAcON6cpM43G1U973auTKOWWpuQHlovJDITrxutbHEt3Wvh8hTK5WnCJ9izPYaO
jh/jjC0bYFfCrlgH7Yn4k2NxPJIx399SV6ffzKmTzirxKFh/Dxa3C46pVW5eHrYm6dXbomxvnkst
WvZsr3KHsvAGFqy/hSa6We8Xlj3elpcBRRYVYw9AwQJTVZbHhqzxH+z+2FS0coFZ3zc8pO75kGrl
617qwsS1RzzYTqfM+qd41nUbblMXXtWbC85+O8W1ST/dRh8I1yE7FRxv7FcGwm3dx0aZSybdC+G5
afe8klrRCCpWuZ5F2KYtly0LZYA60MtWlNEWnqZxuaZ1Via1XcN9XOeRGKITmyIFR1EpVzr+dUTj
/RZ7iPd960IlhIiZHZqnCTbKamY7C5rpzh3Ppa55ummmqNfGHyBLhAa7r2gt3rnS20B2VeTj7VxV
Kb1HH7haeUIf1y9czlbaqiedpOn6PrTd843QAZyZKmb62PNg9sYercj7B27emULrS3PIpM6MkoGq
3JJOElb084/rovx4KXUse9oAZeGVNPunM9SM/U6y+SybW0JZR83Fg4vMKr+bSY6Kvcg7L7By6mbb
EbKnbX4hdnyN3D5tC3Opk25sIMUVYD1Wmf0QsxI1YzWL6m+zM9QnStmYXNLf1qd4+QdcjJ0HVIUK
lElPhRmM5lAHK2CHY4UdqiZF9OYxG2QV3KXydSv1TtSCEpoO8adKkBBvJhuL9n3QWvjWeRs292vS
EQ3FlqjCB8Ns68t4fbtrZkgTE3Eb11C73q0mag+JE2V9PzFoaokQ1sZ59qN/PiAYvP7tgTj1iFpP
1iCYxa5sSzS4K/j23I2JDHh0vOWRWhkctGzXQbl4jwwJhhdAg+3I8WHRqrRzRYGzNquWBz6NAKxw
iF5tE/zAYPs26nyV+eVsfmjNNer8Ps4L0NMehvntEecAphlWfkeZyI8e0vU4XpQFl93/yU4q0/Q7
AHGitt4xTWWW/WaWK/eXPN59mg7zcNNuZuWHxHbJuXN21fejjFey54Mov0Kf4vnD/PXwcVsOw+k7
rF8Z278iPH79zF0TgMtZP6HGD+qpktPTVUbkd4n1CY2NqdD31GvPCDvD0su7eXwbfxIr5nQlQJcG
N+tyCZ70z8dwvRMgiVqpm2kp+TLezY0J7iN4MbA0JTXCCmZriFHUfcE6uKuJGAbXZmwyp+kD/2uA
l9+AznW+QtXDPBzvMbI/kulZyMFe26z1+Tidxt8Ny/gno8OuoIq+j8ooBaOthXtuOZqP87QsTDWo
vMwFIyxmBUrLp/FLf1KPN20hjD878wDCYbn/SSV+LRjDPTypOnMNZL8PF6hNxsoRUEBmLOUy8A4R
PscyDjNQ9h7Pp/LQKXnUTm6IlYSddSJ24TTdAa6jfOZvLtNoi/pTvBVugSz75ea+K5lx3gs3w0Di
ytMIRCPYUPfwY7icxg9t3ozQY1OWeBxud0IVgpGApQlqPrQT8XofwwXQPub9j4sZUQOZcrYSX3J0
n36566BtVo/MiKsH6Hl8pZovsjlB/QOBx+My6PKg3WR2axemNoL+fVzUNfhPsXcybed4/ID6VSNP
D+PPAfwRbYjqCYO+JfZEc9wDXG3n8DZGreZbhfS2TGyDzZoed0uTFS/jwnFaxi3oc6j4rfqy8OM6
Cz62toVNXhO80WgqCAc4oGh8rL6XSA4J8wq5+7sD71B3l/hApWcPhOBKy6MSOCGqgYgOUGVdlCMR
+q5cgZVivlNwfYkPU1chi2EhIPAZbJb+wrV4jS+vYfvkHQNfH+OKCyiFE59ew6bncfWE5rW3R9lj
RoTtRSpS0r0PJ7MYraAKgXg12+TWk9phdMIeunVS11QURRESJUU4eMUG9+hMi7fFVPj06nGL0E4O
7D6KWCsIMRy7a8N9q9m+2bFTu8f5Lf3u0RDAX59+tVu2TcakcLiOP+Be4VbGR8jqcAS+/x6vD2SU
ZqwEySEdKLsSPhfNcEjUvSDAvybm2BbhMZbsJbvZuXHZ4cbvfF6HG5+xe7HGEvBeoGo4foaY7Pji
+zwkhrfS2AphCHEoh9k04Y2yWG5f3WA2H6oAYceooAJpN9NvrGKE7h1aTc1GWFh6HfviUMoqEmMz
T0uJA4wGx2nHpa3bUHJZbfH9zT14gIa51vH3+6wV1hAbSyU9RVf/glc5rcPyJmTP79md+IJY6DOR
o9dCyonB8WS5keIr4ifGYOUkU32/FOJlSyQycUDGjc00NE3rHTbnQNy335Q5leGcgl129Vt7xHJA
1O3fM29aVyi3pwjVab7F5b4wHOcSizhUvO9PH+SeZBOsV0ywlvVL8O3soeWCsQ5sOf103YPFJDlQ
SbTHkkg2DxWu1XB8HxWBXAXPreD1a7RErgHJFk4YadVGa+S+UBmx1mAApF9cVkjrtNBbrFqJL6rt
pCuEvRawF9jdyTKdCrzineBCSwo5oA83rFt7n7WXUfZVqENDJnxXwKULjpKrDo/KYdLf+Di2nY0i
6f1M4NjrdofyjQNSSPmW0rzss08fchEuS9TdYf9BRYrlbXhjaLCqbZu2qeO7UjLRzkBG1Bzsp7n9
5sLe79MH9EH6oQhAUfL4pcya/M1Cq6iwpJPzeF8bIutWUNFm4ZUvFGmlyM/KD4OBo5bpOSSz2Qhy
GnenN1H0XaCKHWV7iEV3vYquT3+VdHuqij1WXxUhuD3AwMB7x9vqOsWsqSVxtDxe7vM4WpvkG74f
xRIppTGs8beubm3hlbB7qz60JnuLBbN8NwwfsakZVCqpSId2osQDYDx0Yj8PRxAQR8Wp5a0I+sRl
zBX/sQ8uo43P0mVEAazctFLyM+imLfZFJsVTVYletC3E3ucHluGFrAQBt9cXzzfudC0zFa5PU+Ez
JZGx8XMK/tbDN/mvOKETbbfonLhqN+xPn3aPWlHTvjze/nU2lvGhrLO4mVU0RSjFeZkLV2jL4bsS
jCklY2gTEfiy0d+F6wpaAhjpDvVhKYO/Cr2PrVhbGTvIB1BeJlMTzLtiIZl3xVRkzzFbdYPsaO++
05UaD8Cbo6EDyQhppOikjSmis87c1/gwXSe558d5tPYiNgDXvdei7aXeb9I1fFeuYREaVX34EFoj
opWH0H7V9tWNad7lA3e3WN/2+foYPLAiGdEq2lZULOsFomEUPB1dmSyMCW47bDw50knDsayl+yP6
K3vc6TLLJcHKPFhF94p6y5kZLACTKKgmNcwuY/bM7oLcIuHQyhvLRHdsuH4flsPtcf8ThJx+P9wH
5Wb66fC+5dyEUm9iVW4iA6IA2hXhKyV5GglrQlkcvJRkcqKo/blDbLnelCVap/plOn1iimBQ7gH3
YD1QL8iZkERCU8qLOsWDbCUV/X/D6i7bSoqU2NBG+p4WbSFFxdYG6Oj+7AguV1kphrHAEGZ+GKAL
+TILRRCzU2hWUUMRMSNgHqfJiphFCSNVUp7I108loiD+1ADl1zTP0D5Vk9RKdOd8DWI7qaCO+Pi4
bfQVk6gWY/aR6/3lCFTJHE0GAhhnKGBKG6Ldxpak++j5yNzNobkoxlYteqNeU+mKrhS9KGbW+G6K
i2bWtFLPNZd1oKNLRuWZ+4tbEtD9rMbeV0VSLQWPvLx8115Gl0ed6Scfs1O86EbKkK+2VlO0naLR
wrftiNWNyYqhG3c+5qEhsMK6Q8YKuydbz9OuF9IGRaLZus5b21f3QWkq6bwr5Jj9ILMSHSjqTDJO
6c1CVAVDorpzzgztolpLydZbtHFglXhSuYnz9i7iZ0y6SvmMXeaSNFgAv/aELxaOmXweTGKgnK23
4VnfhBPv5RuQL8FdgL+x1A602kUJ3/IcFMb4ym0pyWk6PohUN3W1ulqKSqNJSORp5COcxotm0vHw
rzcqLKYDV2VjpztvRr8Jolqz53IGM/7+/vh4SaRHKh6u90JzZRuFtDfd+f2rLLNNH88uHaXWrAqW
S0Q/emWFMurlwBggtVAiBwd4UyfAwaikiRRfq8VsJA8rUI7CV9cqAdJe2viQQGkhK98xD+6IwDWl
5JPTcaK9YfMnKfclE7NmRA2KWkux4DjSx2fwItHMTFE1fhwEePUBvxWphNXIwGQO62ClSNNc8l5t
+FdKvVrIjGI1iq7CNr+8K7Gciwggp13rptdCeqWUUVkfmnm0I9gcKoimzSUDOHgnwI+9KzHNgQQ+
4M6FvDm4GGKRJHgtvVpH7MmiZqsKTDpfRVdJL2R7WGotMh2V6MRxZ1Db5loCfTiiQStG3i7n+1GL
L7YShGDGJutQc2rZRWFbsDgJUcXmBH9ZBXG8WozszUyKy3hbr2pL5TY2oRSomASZtVMvsz782Sow
wHfuTsnieuwp4d1RfjqTDvUp5HIoFS8kl47WarlVupD0+oqvznsbr6bb9zPoZ/+ikFcEAyaKPmWx
EgxzPblZaTVTilBAWcQ3ioT3i2Jt32kmevK4E8FdPiz/XbmY/oAYW567XoROUO9n0yWQZXhFogXK
JNmKUAq5apfLs97ZiZYru15KVVipj4kBy3uRyIx3WWi9taule0Ogb8JKKlh0ixFfcCtpo2EVa6YT
vWgqhZ5uJNrYvmt9s80TamXEwTAbl+X1PBq/Xin8oiGa8BV2HL6x2iKXeQ+Uo5T8wgApvCt4XuZ7
s5KKG7GJnNg+DChnyTUHzhhH3Rt0lFR9pk16sNzchF1ppmob7Wye8YgKayP58q0UHeZ7pKNwWeCF
Hbt9TlSJd1iDhFc1X9FLtnHoGvHw3b7wfC+FPaIg/1K5TCx86qtz2InBny4qfDSGcHLMoVSvrrgP
hQhodWofgK02ZoqQ1oS1X3JgA9VVhuPR1TnteLDM18bg9jY27CRkKi6cSUHO68TKER2ECbT7bZq1
gBdDtvKWFGHAW8vgiwItgY5UjIuCJeRQ+ldiTofnE+xfpdMmnVgXY7xaBASS3qcaRMUsZAtGcVmy
nIfN6O/w05pM8iFZGxwbo0oJpo7rSuSS7vbkYJTz7KVEAVqETFEi3l05w1oMTcQzxoqh2EhW+HNq
QIUWVwyw0K/8mf4qsQSI8u5yybQPEU6puGXFgrms9G57lcnmUry/PpxKgP2mKoSUWMtFy0g2wCvF
AC/CaH77HD88zQO0WLuMMSJH8oZrydePJaiMtHPqIAlW6TdgFQ5qA3VEilLR3WIFnAPFkeiJU5/Q
EJUESlurENjLUjyWLB6Y8+zcUUo58k79VoAYazLR+pwve6zPSoKWfAzfWGXYFbkC9XgRg8NzL38L
+fo2fr5Mw3xKJzp7Kb30LC8SFlFbSTajP6dfjFT+WwqbxCoR4J3UtZZNSuQ2y7yQzn84cSM9NZ8N
6rne2I7HiwaRqLYJreo5PWreuuZgNpLww3rNr2QHGOoDX1PJXtP9x2R2clncUOldqeo8Yvw6Zu0f
73CXx/G0JKPepVx5KxcK7QgRlhLGnOnRp3utKFIRWhvLAR62KFcluScGr73J76rIUqqxEcdxibvl
AB0779NtSScHOWCtWr01tYg1WX5cVJugYreNGGE5YRqw2GQRt132tZTSAWYawd7ZimpXCrK30pyV
QlRYp7KJ0Zadlo+vpUTdBsv8G0uqq6oWVczWXE/XEpT1Bv3yFHBbeReV8y8lqTO9LMfHDHasH+w6
7YB3sJdNJnKRiMfmirJqpam9YBeaw3J7zOfpsUrEd/12bgpGyMgNIxTp9+e3u8W26NKt+D9w5KpK
9PBJZKNdeL6c75/Ky5GLFXyEccJ3CBmiFDi2zSVDgbmDisDLpfQLfIpt2EGa2EJgjS+gEK920HEq
KZOYT8si2s9ZCyUnwDVfFqm74HGp3Xj1Ttpf2U+pFT+lDFfYRrQftvhQdF0v6Sh5NkqUjNUTk/aM
hwOxXkGRI6x8rF4BUVYHyJam8m57EY+P8dsQFzioYfeizXWGAEu4rHu5FUvjOQJtGIaj+vG7l3n6
Bkja0zgZa+H2flg+BogxDLc459Ia58CWGkjt0/qXa/bNmByDTQ8skWL+nFOOmn+BbGdP9368vl3O
yzu4UtE0Ts7pPvIArIoKklrGL4eBmKheQB8MZmLKopwpBo5Pv9Zv2agSoIFsO/r4CB3rAeJ1LhvB
xqUAXDW9TddN67Tl8M/Hef6mTLHzXFeMAsxe2NN5tjfEPUh1sm311LAkVOvMpY2PUuUBdVfFs5ku
IEeNvXFtylXwAzEMLCrvoML3Nk+34c3eLjBKIxIn56ouJ3/WZjjVQZXBPEtZENzzWc89G1Z34S1r
Ili+y/gGBBlxjEDOqeXzwFh/5SWZy+G5JZQSB8h55i8Piox5hs3XcI0acDbn7Pl5WL8gbNxlVjaO
jeITAP8YboMR/SPRUgcyW7n6viMQaxAV2zWY6Hh600QHazGEcZMQ6fjHaf7rFDMhcs4mG+4QJkWN
IaP9cB1KwFZdCYqJ1FI2h1V5mbqc/wX3k0kvuEyaRGXXyPcIMWaZuTufxqO/J15c42UCBwF7EbXz
vEuvrpA9q7HhNlQRyjXp2fTxHyW3D4m2Zt+j9wuBE2vLXc9U2Rimfz3nj38LpDht6wJS8K+TdgFb
prlAzuXOk7UlaZDsW3au1esVqAy0jvX6aZA5NkuOVgPkvFNNHnSqCQ5g5x2o+lDu1spRqmLIS1zG
Xr1fxytCoJBeC93SNeejHGEnGUOSPteWV7HleVPfWWRG8CcssjJ8sU+7s9plznlQY0c57y62YQeF
Ft52V/Q4W85bXYWbS/jeOWWmdl1g19nn5jbl5Z7alEIybTav376LD+PpUSdwW0ocD87kvEIa2U9h
dzIeryNvAy8fZnq0WVZluENcAGiuQM0mAPjwzBX+bHBGMAl/EbR3wIw275XZAOT4fbzQc1VGqLwI
gjBf2XuzjxnJu2y+RnoOm6NDWfvlg8slyw0vInupsexPzjlcctsnb2OlzZevWWldqFNsTnN6w8Gs
VLMNcKKpjpxH1PC+A9Srz8KZgS46fP+4/zw8rmfj7JtrcRg/lKkx7VRg9KBInOgO16AOpcoztcA+
vVI3Af1wtVkqAuNtkgkakukn2vs3yGqOLbPZWSmdy3nrFqeaKiFj9pUb0TJh3jJCTLEf+z7lWYRP
u9eMDHUgPzUwXTrWYWlZiSK1hFPOsW15SE62iYiYB6kbT43fd4gAdF1K6SmyrwodiU0C1laS4HDK
PWCDZOgq9RT8cVzhyzifzcX8F7TJAJPkZySKlLc8MOkJVV31NcXartMBceWxWFRebyG7tKqfH5f3
+/3m+OAZfTv1yINaNlYkFh2+ZWxjuGmVjYoAo/p4+tP1Pv3eFZqp8dK8YSlD1k0cMvFX8/0Monm4
mNmu/3obYAvuSkFO3nCKyRpzmxaV9fKP4+HlbOzC0ZiKp8NVAeHkTRtWIbpWrpg6u46zCnjO21yE
qbqtfcxnIxiM1LtePuOnmG1yOLYK8Wru5Okw3eJVmHnDoKgMaQ7/+XC5gBHncuiDo/FDBh/Eu6Fx
93iLz2tTz+9IlsdXFvAwF+pyn+MT3OY0LGvIZbrSGzn866ByCuW8TC7ATQ5GRVFi0uWGtaqPvGFg
YBZ6MS/XXZOTv8saSCmvMzGxtX5+/gBw43/C4vRGI7i8vpQyCWyD8BYY60ztgkQ7VUkV3mWVt9Fa
hZzTh2EdbVG5HMn9r/P5A9sU/E94m/E3wNBW7AW9HQ95Ht/ESuSHhf8c6VzPL+DD3D9voyL+2rDc
1j6ct/H+Byp7Xf798+/D23+CLEULEv+EzPhKIYSRqrkEq/6Pv//lz/+F2Hw7uu2Nsb4x6INu5MUb
/r9Ye6G8q1jvLYa3HVfkP71QrRGcGaSRWorZARKfbpqplfxTY+ndJ9h15fsqbFll+elXVUoh0Jdh
JoSKsSJTD6ptW6kmfX1QZsTzTX1DVZjlC6L39HTWO7WYqzB9e9xsCvV00DhJ8oa9dQYkts3JbpcH
hBAAjrOgkQx7oFzYhiEkawhd1a6rx+VsrCorh8wx4DNI1G7nvGoDgid2LCZ+ro84Js0sbWOC9KtA
pI68qzETfyl5yAZkh4CX4gwD/MxuF+qfBbv8UJ1jVDHjvWItRdGmbcNbMVwu8W9Zx2CGz4V40Xgh
bRj/tmukbn8w19PBfP/hEVMoSpQFbDrOk+57GPfRyIgYyTdNoZCaL1O6x1MFKN+L7R7foODFtwCD
4qnxzUisxDHkkqjBrfQ7ATu6KPOppfmsRwk2jnmPxly6kh2oHGwbSE8L1vOHo6yjDhv12cTq+W6m
/6YeRhYco4OoHUEz/kF5ozTf8A446J05CSoZnXDF5j2MqZFY02jW79wLydt4NM81JYZoUn4ozK6X
9mrSmtxU8JYeHlecqNaP2gzIOg/6DC/trX7Rc6kRJd5R47IuqLYp7GCRX3nWla2ySf6sIH5mqbfc
u999XcX+ge/D8kc8Mz89tS2lmU3xpCrXp5OQQZXUtJRZhZTQxsi3ciy11JvSrUOZNzvOfA0UrleN
1J52vzqpK+jmduEuaoP4zYNbYrsRWFXy8olSy9zOb9fpx9XSF6XfkNxuMxwT3OSTMkbz1GvU6U3m
aStWK6NFBzXVWBEGrTygv9hpuA8pX4YjWXyZBOjdf0d4XWChWv41zahrWVd4lgpAWYz/fUphsfbV
zhCwPb+MCw3zOlxfllt8QfmmftC6iXCqeN1R71KMFP6oevScoozVNRzNe4VDAs8xDhnLeQ0URqYD
iqsVkWWsRiSRAe8sftYtq0dg0Ib78EJG/ml8HeC/jw+wLWRzhO/LyNwksNfAo4mGm4JyQe8pLea6
+Xps20sDNxk3HS3kOBDcNslkjp/tdmVcgc87hhcgt32fVWerqKVKqhNyBRn3/nocp1flLTUSNszc
VisKlpfP+/AG1+VqhCWWb8C/LLfhqDmWjUjWB/f438z14a8LMZHnBZpiWI2OD/l2n1PKgXeit1EE
9yN/NC4J/xGsOHF14eP9xwh+lZXGigTt+S/gPxwOj0wOBJUiFkIZg1luvEcdfICYSSvN8T6Pp5T3
2/aVZAkOyzIdz9hh3h2ce+34TtYmjofX4XwplOFzSfOsY0Lz4vNVj3zSOGUo5De+x2lEZTassTXs
0Js4cNYGnMm4ry09V4YX+5wPJ3NvDnoTTLI4+nDnrFoDT22VM1Tk5t5PQknVLHrM9nC+uxABSAcI
Jn5My92CmrWq0rzNxY4w1qOxBXf/y+wa1FElplZIETz4z1k8B2IhUNKN6aX4WN1GVnhd/Kfr7XHn
7xiW57cz2gJwrQ2sNnQMN6jF2DtGJnXPtGNQIaTSMYmGYN1YvR4VhiDVcVJGYs0qS8Z1ACNhktd8
EDEvCq6+qpAxGrcCcwYv46x8Xcd/3WZc4l4njrDtbckPhCAuw0UBK9AYYmNRGoNw0XGnngbowza1
NtXwuF3ORzgEJ4qvUbuahqnD7pY2AvU+YlsHS2dLSUyl32/JGp4yRxw9FLAoYFVuzHinMBqJtUHt
GQXhhP0w2EDKEGV4U2u2t24WiSvGuo+yNAMNYaMlpDWV0nC6bRV7eC2mDf8fbwvb635X4nJ5KSX1
mGAyL+/jZmRTrJk1JQN6ia5mI+JOI0i4QS9MMSIuk8Sl1wvepAL9f1D61+WcXZ/JNjDOkZZ+fhgb
9PVxPcY7RZOVLrZ2MtNYEFA+zXcL5D+BXzcczdyWSctT9aEU71kEA4/MxlU+QZee3xB0Y07h/pky
cFvmqwH+z4X7XaL4eFLI0o0D0Ut9QX//X3/5w8/jiBYhaRboygKFEMf4Q1tbAoRqZQ35WwoT5Xum
ljyY9g8QX19no3zt3yimKumZ/w2c0z1fV6E6Ixn+v/863N/3fM1kXul9diKr93k7uDp4a5Qykpz3
lmNRFfaqMBr5J/BYv5+HeFQS7zHvcudRwc7nnQdI2s/j6wgNJkfmlo1Ksr3ZsDl00btcKNdWfPNg
1vyHcaC5VQND/ukKf1vGs0ZZHno7npOdPtUM2z40bOno38GNR7eL/NZ3s0sk65WROimE6idRK/Mv
w1Bavfm0UD7dGOa9n39qvj5cBeqp6zY/Wik/WjxtGuqghbyKLMsVsEYnUUv8pytsMvb2Gz4YFWdu
frjHR1tmWWk3reSdihab74p/XaxfY6DBauTlD/98DJf/jAU+8cvG/65vF3y+nu8QISekSfzjev0Y
3kDriIzmDxLYaAzEpTYO0fnfr1dcqg32MAeKFIgDCcSHK/1wXu6uM4p/1/vvvI40ugM2728kRVB6
x0fIw1+2Pd0frgjt8pjj37brtw48FEUPAWeKpkSbLZ3z1gI5DpiwvEJ07ruxZQolFsZIulmRynH6
IOt5uq/xgT+kMrCc0ysLIo3emCEz5G/wR71FbR5wDbCo/7L83dyRMYn/4P2PSpTZtsZknofPNUHk
bKEFyMgfF2Osv5mrRCHWuMHFO5GwlCSFF65U6oWZdkUxRVo0H82vm0u5+i/+VP9B0bT4WfJ2s8y1
+8fwfSDQABatLxc1mF5mUgSS+j0lb0AtQlBATf4dUmZ/m35wVUmX/3ejkvrpNrlbt0mjlrHqWMKY
LFl6bBaUatMj9pUp0eZM5DZwDQt8AkhFidDBiC0L1lL97yPiuW/J8l9jATcSJ6vl/7RTUxyFTkwG
nKaP+9mI4fvwcTuc1RACAR1qCaFClhgRIVgCcrKy8PJoRmTLaLsAkFOTW/C///LnX5xnMB9+fly8
soi/Kg6D9NQdfzdWwmqeuacOwu19+M4CSPFAwVoCGXrEOBxLdMW/b328gkFu7ZX8X+/TZfy7FjBZ
626qwM5WmA/oqzYM9rRO7chgoESiLROZujdetDns47vWH9d40H4ciEb1FsRIBU0MS6kFBtpc7O36
C5i/v7yPIx332zHM5xjtoRg8iPspfJ4AGxGUDr+HI8DIhx8zdKqaZUmMg5RZiNaxOWMHNiYMOo1l
DCig/HBjxuflcwWsvCcc8nA7K5MqWMjd01D4EXA+04+rzXjFp5Kz/KgvV3EQMrY4pvLXJkV6XqAv
yyfZTdt/Go+XYSZTyw4FwysbVodZ3NqNhLNaWYXsxms3wi+X6mnaSt77Q6Htfi6ikI47F+OdHxbu
XG0rbKOnIn76/DlTr51+vLM9jdalL/ihUNaThbvRC98rXzP/s11dV7+X/goqY3ThfvQrKoxd4JdP
FQ7Wl3noCJfhMtjR7n/o+QZvkwWvC4/7Nz2sIgQXOQ8EAZLMzIw+fcoVtVIrT+e6/NE6w/jpaiCt
LnJKUaLNygBmLttMDp61YW13RShWRaP0RPjQZP1G0/QSD9bo4mWYrMVAJmpFaEt00YygIky2uy5y
RDS+FnctKT+l5V6TB9QJxhT+2RoMeqUKw7Ky8IxHgv/755+wvfdipMZ4PSqx7roXvYHhdqc50V5d
cBytOiUgRPZofOPo/AlYOT8ckwthdPBcV3cYQwyPhWp0onY2RTa9kVWjIVl1zH1ZR2Qxh3lWRmMm
V4b/aIXR/g7BYnWcNgtNv8Yhk9nCIY1xvcfyDjSMnBnCyXCQscVGgEsB5rcyYB4OWITCK7nbbfkU
R5YnlJrHc2aVRcbG+T81iVQxnib0any+DFHfLyMYk9RedJVxHyOUtr0p+aJWirDgos7fA8QLFF7u
A4XlYbi1daAwythTPgyTuImOOUYIi52vsappCArcjJwc1vxR3GfqOwm5dBmvb4Cw9rs2YA2mEjuo
025uUDClSEWxE5tH88NRKI6K2DvVeqPWf1+w4YHZdPC7EPMcr09sRIIzocgj5bSwoBQa8asY/CsU
Gcw2nXb4Phi3V3OhAn5VD6b9N3NWtvRyq9KJpZAuW/wp1pWU1KIgmQXiuMAU6zwUH6/yIhRrhXPb
cwINFh8uUyZUhg5s7aGQVFV6sNcUOeuVcUTMhUWDnk+Ym4INo73SARArzWhlcdUtB5INdsPRJKct
w4HNkSSGrZkc9O41X2tqkUzRWEICDH7M4/i/hsu3ke7GfR7MzV2gdH9UU5wVQwFwviHzkoGsEp7h
n4fl/juY4N9SQ1USAOf1fLkjB3msDxB9W4aZ2n69lDeq7KFhlAH8xrLegn4flm+RBtv0NTMDPFIt
/PoAsC1liDZEu1TBRv5Ckch1L3/Rp8Oyt9738Wd8OD5meF7/qb2rleKtsmF/i7cUTBt0CX+fsq6D
Zk3dU9Xarwjz/xXrmDUweCbo8jXBQsamtYxd5kT3V5qqlgKe6DH4mNVCSWoNrkkVlmXYyjxzBeaL
D1N6LMMK9z2Mak6+4nDI0Av47+Pkaj7IpTovRn1dzayhVA/thuGCxb9xBE7OJGhWYm7GRg8g5gse
KfJsHH5Ey7dwmLIJgVI2ADFN8+l8HSB4CAVU8ytY1TviqWv/yMrGeVw4CwhiT0DV8XE2uhBROdcz
FSb6ihVbzK8MnzN5D8Zp7rqmPlCXKeusQyHsYlvm6s0D9JCdZw0IVmahTdwEFG0aPAY/L1iU2Fce
PO8GkWzjkWmbXLSShe8Xk96NQhrAfrbz4lSSBrd3T/lsAxDMLE3Vz/PH4+MQ62xCZ8820cemVmDy
fUIZ4vIlGkoxa8JLWsYuqRl7+qFh8nKWPsgxZFBEjtY+6H2bW1RSVuFoo0/u1iWsvjJj+rFY9WPi
puddaCo2jnVvI6GUETgSlWVoE2uuMikTAsmc8To93t4TPAO0b0Uwhn1n/Iq44Fr6jlShMWgbFu0X
VUUmIz7X41/BlmeNqJMm4x88okRaXaoqZ8N98tpXS6xbNCZxZmuH6CrIN4zXOFs2/XQTnm9ty30J
yn6ZljG1CxWbfIVav4pczi9tCRdk6Al6NYqpU0WY9RLW0FxZ8+lsnYQHMpwo14TpcZDruX3scQmS
lO7FZqebwCww1sykLKmVbu11oo7muqNSFkw715nngXQvV6G6oJvlv0fiACY3/uqE3uN6/qeGYq/Y
HFreSTMi279qgWS9bIF84cYVIkg+rsgKZTZe1mKbbZ6y24wCQQyU/XtqeegubMCsWeJiJjRLEZmr
s1q+sINlHppjtdds+xRszgRqQTzKtmT935yR+5+/WOhaGp3QlmJXWSySW9Mla5X3ildJlL/WUsnN
mnRhtVlYkmcs9TsCqOJ+Du/pHShmksHIwZPIarD+63iG0kLtcMh3kFpjEzI7VS7hVyqr6KXKARL7
Truz8jedW6ouG8lBwxjIeaFY8Br10SEQlOTzyWlAdjaNB5ARWQmlYCF9FBWlOBCDtqJEo52p26LO
6o629bAcjdKdz5OWkGW4XDCObGQyMk6pjJNLZB2b2BiubCFKHFeuGx+xDlPf5QoKx/3xyZz1R7TS
vj6vQhSErZsDgDo0UD+tzeuSdZF91kiMAsHMbExhDxFFn5ch8oSVff8nhv8ghA5cNISFV1eZVRJC
e50a5ZKNAnFiQplVEeTJy80iceM8l5oyo17C1cRnpF3WPA/O0GJhIpc1DqbvGJiee4p8xyGSnnqC
pUQXEO4QJWcWPRlDo3VP+W95v3VkQp4FGJ2mFIahbEPijrcibACQJxSCswxvcfwKgXkbqZeqg8q+
nn86wjCWm01GzZpGbExo1ILRc3egbkpCM+tabPIK6aU/n6/feKrP9fnZVW+6Mfhb14Pm28EyGb6M
r4AzRmtZNfwr5mCyLvKwayM4hy5fqwzALNHMMxf6yRTKt6X04/Zb3Y6rWFghbMSzfrsFwmE3yvEn
wgncxVLGz6U6VHPmb0bHQ/sbeHSfB2i/iD+Kv+B+WcN34Oi5CPhMjo6Hmx48D7e1YXEb899Oj/k4
ppygvpMKktXtXbcW+ca+tNcs6OITl/xCb38rOWKdeCLKp41U4GrncZwAWGGp/7SkDIuVsFynMQJP
2LvOL+c4Pa7aOBsvrbHuyjJdjG8FBGdIY6hxDtCdKMILZ7G6UFuj1ZBWrB4VXZTKteAbPbstJREh
O61yDzYMTIHH7Kk+IEu+pfsg7eiaocVXxrPAlkTmWRmtHLeKuK/FalkEhP3OusAnpXIiDoAI+25a
JQBIiukC4hmuA/jBSdxCVfKegWBe2su5aiKFD5E3QfZE2Jv0l8Na0SM7naFwMYQ4655UVUklGjYQ
QCOkqBbbrIpRCrlK+b9rNMEVq3xhBlMA91cA/q3k1sEV/Yu57QFRjPn3VC4KzUAGJ3WKytHuMA7r
pHdfc/rjmsFOPpC/BHKrxnj/OF8pVfYdM/A3qI3QKqYbTueZYdG0TYx+/aLXrA4eV5vlcRJrJWtA
VWhVyIfdOwYXpKKfnHsPfAcPrZSqlyparFH5hCFVQFFdWH1Wb4rizFyuxwG8c63/tmeECEFMnmhz
92ZXnQieNNbpXrAtYyOGW9/0YTlVwGs2Xi62cVzCPoVqxNpXMrJekuMwg0FzPJ/KQ1Oj/T3f4uWQ
dRWWNHJw5O+Gm1oLW7Mizmo1J47T5ZfboHxVhJWsuSMnj9ev1r74lJUTWM8lhjrBD1upzDTYoia9
RXW4z3aQj9vngTWIpv5JvoOO2YYpXklaN2EZMe9Tv5eaAytSs3UcxmR6//fpdFbqgWtWRWurUKIC
5DqllBFH+XlZHtb7ry+PIgSJEWsvBTBY1G1ZgMnbVKCDIpkgElI/7kkCfBYlZJBY8+QLJbLYSXWu
axSYBKoCuhQrApGfGxksuJQAjjJbBrfclbhIxerlfdrf9j5ForQUuWRX5WLcgJMf7+SQqXhCsMNd
ZShAKOEhGJ/iMLDUHe62ZxlHqg+jrIhwUk1zVLmIpiBHnlwgaw3bgX7GR/JeNZrcTVVy7s1hSaTO
K5Y6x7bith0MBU7e6f+luaAqlsN31bWsNv9/nkfF0mURfubCWjtsnDeGGAOO6nUqHau2YnKJhuAt
zuIjlDzSiNqlZWMAOv7j8aGYgyULOFerDAkWoXxcBfHvYPor2WuMZJ1GyCTWPhrB9TqNUsPRCI3E
0UwjIDJe2f1OqhKDi20nkI5jd1UmBezpe9t95+i6kBLDlrKUNow+8+2EOirjNF6PiIw1dz5WPkEr
8wfDoMg0EkC3YY063XZX8BI6/Ef/tDRlKWHJXDABdzOITgOd9cQzYXWSLOsXjmZ7ikP8wVLTJRbI
asQgYNtKU/wY5m+PmzJGLtXm2X2m/sifh0QRbsfKHRli9/nYZ3SezEIv4/chVslEI7Jq0IZ2n1jz
IKU/XMfpsVw+/za+LWB4jKe/g9P2x/M8/ldUNxHpay0Ri2H4eHgZL1wKXuAvMMk+TwrjAavSZV3l
iE0Vh1A+zSV6dWqnkPqUp/+oP7j93aTFQMHINowxl7a6RXN+LculeXe3Yb5r9EtNyX1g/GdehGbS
u85q0YZmIcnUf03g4VsuYwjERwOGFWdrxSQ0mPTtGrj4j/v99jfeYWrQaBhKxmOMnB1CAOSA5WBa
/4yyEek+IP453P8Ctu4vxg88KnGYMg9d5iL0L383XTbRPoQ1W0/jhFV51PPxQv8e9xqYr9ExHCob
cO9QVf/k/rjmWcS7uQqqc9JZYKEklv6DVj2Z4pT7F4+iyVXRL+ZZf9oAGBAsDqfzdHhBAvIUVU0n
chwyhkSVoCoX+5IhwTfRghgPSqFsYeGXCqszxKjVHbvXjMIzVl4t5wPChWUrfePH7XFf68RRBFgW
NuW2FlLJE5yW4lttypUrJkxtIdh4Ot91ugretcuzDq5M7IozKjIYhc/cVlkWirDowwylRcpTWuAr
IIOK84iEQeaXy3D9dlj56TXu9EqSGYjhAXlO+MyXz8Pv/+svSqM2PwiS3TcO2hY251ubEqmByIp7
wP0aFtrQkrhqxpU1X6EnyaXn6IN2l/FtOH5SmEYRz50//Qb9NLvTj3n31VvJesM7fz6CtAPZmXw1
dddI/Iw2NnuaPiA/lcBytRxIhchTMizwkni8hgXy+Ly91vGRbQ4LlW/O7GqbPymrK6V6SssU4K9z
vMw0l1So5wS4TgdXnkspFstBoBNqM8pA3POez4qofOdxfijlQKzNH+cTZh01MBc1n09qGXOVSZIL
8hqQtqY68VS2p+bZniCM3SpKspQyPKxjywmINc5Hheij4nny52Z6SkCtaiUW0YDCzDpa0+XxcVV0
YybJb6En2OF0Xm6XQetqKTL0GvWK1toZLCB4yYNO9NtkYisGbKCE13SZj4cfxn00F+xxRVre9S0k
pGhbFlIR+POlBRPnVbm5VVDCV4Tl+MpJi8hYhhUFe9O2hzZOyXHU2u5SH7xOEjEbzqvD8H04X5Kc
z0W1EYGuXu0MFcNIL6CYd1X4Ci32afh+fsMI93Gavp3HP1BdxI6oeRWSRluh56nPz6eFoVpV/7XO
mwjJIpCkzff/MDpdMyY215Ge53/NZ4HPw+avJ/8/Ko0QwdJvs6cMDKMTcFY+guCP5oaCPp0VvsW2
KCT2Mi/roZ/z+XrS+7O0wSOxW0/13WjK3qfJXMx/fSpmQSbdBjTzUTJCeMMYUtj4yKblE/qZ5TwY
MxgjoyRApGJiMnpjFsXwWZP/rZmEDe/Y6yF0vDWhdYuUJ9KKzBGrfPUpzbhJUXRRLwp7Lq1gGKfx
4ivKW4nvgbpp4Ae3abn/xdKrk2zEdLUOiKtZvU1AS2HLcF21xXKcFNqVeluJW1pnmjrUk2ZD702Z
SBeWRWzg/Zv6A52AHges/YC+cNt4JX/BCtXT7375BShfF5qc7aqwNnghxNbP+OgsfcNs2LfL9DJc
ELZvTHoVWFtwUVcFos4uGg7U8eUjQ6yyWM4yZNbdrNmkv9uTtGXfKpVxwT3LKuAmt1OiXLP36Q4/
35UjrTOJEp6XWFjWDSzRmtVpNSIRhdspR5dOHFew0KuWq6rbJgwNFnw0d2zWflkd2fE4nqItHWjB
rHoUnNq8y/nANrgEPinK0HRRaN1tMI52vPHl2/n+u+kKdC9/nc7X+//AWPqf4+YHjlZlT3C+zS0Z
739yodBEsVrN6rCfT3cLdk7kMeuqk+CTwkMgyaa0JqTz3VBJBOe7sxFnwV1VXCD+o326xFHjky5u
o13c7cqUJXHWmcZ7vMFzskBR40ArE2LYbYBD51n1fEmVHfHzwLBj68pYbyBX42zlBe+sWEmevzXG
yIccdaOTnlsR6i66gf8+zH+6vk42rEJvWOvIUHBcVBUoe9xUBwlQN5UVb9vYYqi+sKH1LhHCJ9Li
0DHFtQMfUOdihyj3SFlo6wZZD3VmldikKZTAZ2wwsxKEKLdZLCAI5aRKHU13cbO60jFbQGrYvip9
f4paep1/5gQnq+2x3sz79AtpU9eP3WYKTuPr+Tr+d73BXs9S+UykP/8K5iP/63X7I2CuxAeXUTLg
jHvwzqvNuS9KqU7FCD9BNpubFIhQ4pJcx6Sp/WM5cCyN26b4r9RhQVBZR7Zi3fA9W8CgFoylI7q/
yh40Eh9suAP238T1rz+pd3Ds6yK8EFlqF750IzjwwtMGxkdX9iOTUrmY9AYJYrxotelwX27Yoouv
Xfx9r4thvNgDiP/Il8au5KbvypNYUi8gZzzOawuV9J4ok9yAMPq9t0k5uA37b7lrTxOCqlYe1zpi
8Lx2HlIvcVonZcpO2d2FhbqFOOvNHdg57+65QTMD1Idx9qvdGcXS6qXufwsQjz6CgjCcNoDY7pBN
1foA1mUt8W2hkYRFWwiemm4HY+q8mD34ptFK1Yxvg8l+bK4LJtsvKzPwgZuHf3alJnv6I7CmliwJ
Z5ya+fMXWxTybw7rvAkAKPNuJaNzXOriQN6/8m0ue3MbX4JoMaf7uzNfFVu+lriWnB+LKWXdO6lL
xQ4T3OrpitAdxbBrFYPTZinDqiFlcmJTT0IBoPFrMwHjz/H4oE6/CWakutwU2PGWFYc16pWwGfvQ
EK5cPmF5zOMhICa1AfUdhFcVK89lWEAiBEkxk1X9hrkukEsUvTXGsGVHU/ygutrQUoYDyUtTRsul
ekp338lUOs7TYrHFGG7UglxZyEQX8DiQEjtOipPGwNKMNdM2xNwVDuA1soj5cp02r9P182OC53aZ
VsgkpBI08VSFMTvfWN1uNMoBd6+SAp9FUGCzcxu5e7lPw+F2fbuM2v1pQ2HcamGr5fGSkkudKHk5
X9YpGRGSWXYxrmSmc2LS6TF/P38Hz/OobI/fbPD1+1KLVimz6sMARulVIHBTHVzHYwtXV4QIp8DE
srcuKPDUO4XW2zr2OhIXVCRhH8D1m443/4kiQOjTTFKBsdD6+j73alhWicAuj9uYHZF/VoTPbB/M
iO3qi9SLOZH1NeAj2KvD2l6JNIcR/jdN9HXag9qxqBWBwNCwWJL9r/PlMlhbIdoukM7Fz8EipIpd
mi8puXhUGs32YMN/fu6L1LZS8+1oBHkekSrhNI43Sq4oR1iE3J0tk0SBXa4ssZQ0TySpohhE+Zax
MxcTF9ev5i2akC+y2+YFrtOeZEWZS8bkXy+Pt8P5qilCHsZrn5ZlrLxxvO67BEzKr62c/TCQpN+T
dKklYonnvJXyXEvJzOQj3Keb8nnoY4Q5OB61BYIaXVZXjZTyuY4/ONWZmpdlPkuGIZWs0C2VhKVb
M6oM9hjA8/v36fT5f+71bRjng82jxBG5WbZrM7ScVZ5GJek6K93G0+Ep/q3Izz5ifu7JSCvDhiFs
B95ALwn+WyMKUCSs8hgS+soj5pm4DgWNLkl3iVB/JpCpbnPdzVQG6qSk43CB0unHlSItSpqnL6Uc
xmK7LLEkBviSZKamtBfnkgb6FuMXWHNjejmA8a3Mxp8c5EPa0D26/hF0siIkcg074PYUPT59S2vF
SXtGK6fTclUVks+UO/wauvOqAc9lYo1pCbK955txtDz3vM4vWxfPHYtC5NsKydkBeuN1Coh8szAn
y87qioEVkBPDpPoiYPvm/2i2CY14qCUzT/c7VgV/P///aPvXJjlyI00U/kXVFrhHfGy1tLOy1Wjm
dGt29staWbIqq5jqrMxSZhbZlNn739/AJQIOhONBsnXO2IhNFukIwOHw+2X/tdnFSFOO7Xdn11rR
NOMNZPLErAXLVW6kvJausqOp9CpHsX4+Xw7/9OOTtrNpHp7P+6uvQT1cPK+Kfw3Wn5h0zvYkMdCO
k9Q8kVDR7vT0eY1ngLszXNKcHwn7HgfnxOFZ/ow5tbNd7BixP3FJXmvq4+dQznB+ezufOitpx2bp
3zHCTYJmQFPZ8XRghmlHzehn2HiPpvbp1T77dJ7Nux1F1iygE/MB1QikosH3FOzNlTOAGsaSbvM8
y6KZUUxB3KHBI7QHYE4RDyUSvrahXyExDWzmMU2nBfmzjmundH55SWWNoTAitaT2rQNPz+mAoDgm
74f4Fxf3a9LYXp9ACrYrc82zt7+YXOZNdJ+/vPuYOV3IPw2dHVKBamSooH32xAmesGhozuzz35Zo
5cvueAXNEolFRB53WCo2Vu5NzaCO9cwE14Luh6fdde87lJz8PYBxyYoOac49SotDLbOrlrOln4PN
jZxRUGI/zaHCgwZq6yL5sI67+dGENmr/+DhcfgUNAy3rA13noKUGJ6E/wuGf2NusSFKfd2MbRdaK
Lig87EqR2AVxfuds3ZgxfIDFk5IO/C5Vs+v7/nicVQugfSuS72cCS1vPECvZfDQgXFG/36eTXIAt
3w3YftYIvdfIDE2Sm5UBsAPiryeP6NMzaOFvJUdQNWUCtSqSpWsygmUV8DhY33WoZ8E8w7FGf/jq
QoBdrmG4Jch7AhqyIk4HSr7XqrLPT8nzLXbPz3ufDZSYBjjWwPWrZ5lFaiC7Fg6AG1JNF62nqS6i
qPGTc1HiW/+8vxxu91EosX1IETizTO/qK6tCtXGUZ+cB7GiOP/du8nhMmwZomzi0cS+7Jx8nzunQ
kd9guYGrH8AHBrchWCdBS7zduUea/5jVw9hl7Mfnv+98tU8QE6HiAsk8x80dLLeXFHVfEnkHuxvh
gknhaFc2xSuQXOtZP93iekRZIYqO7fMT6DK/7Lw9dlhT2HUgvj6z1F1iXlUivBWSaEBKGO9+bz4i
2pkrReM3qYcRLUhanJ64eeM04SLwRNPz3kKDVlDDTcv/coTrr37ioK+t+vfdu3cthz//ObSKh46Q
VdldTOGlsTv2XsZ+BFWfCapB+iqtr58Pt06PU133fjXFAHhS77egeRHHJ1hFIIk+GOeOTpG2f5pZ
5O1nj+vVRRM/sv25t/5DSxevvgHHRjDynONmNywlT702X9ZNJXi8hU+76+EJAJH+Ubnc57NPB7t+
h+MprjVukhnLEmuA6iq1zJT1erGFQxpLDRtxy5EtCsgrffbOmRuAFxwzzfBxkmlKPQLLWG68Vpg1
dL0hfippWohaS7nmDcTAUSylRhNK4vcHjjkuhP98ftsdTqsQ9LNur3eMT5MkUkeSS5+LoeoPrxC9
I6fhNtD7sLt+Oz2BxUwZmZ3og/kpKlo+T+x8fP4Jug7kZLnClIr+UrPJ+8hQcaO8SjZ0HxPKCPNa
klFVEbofYuvLjT8uV3x1JARj18a98cZyBMY31VvmiYUhcmDBkZtgHIPZudAWu+MlTdGMLnRZYf6O
3AZZT3Iu6KDjNZJTNdqrYhiXfXMIU/w2m/BY4TXe+zU9EMTJ45bYMQAF8fz1FzqW5AKQQxxIntm7
iSOg1PIHHHPivAmRI4VwZSo9w69iUqySGbASllmJr6v1yonNcI5IooPQ7kWT3YypTJ3q6l4PQBFh
y72ZJZBfTNNBEFOBqPXSPu93z0BPlNz0tcP1T//42B1Dx+GYoxONjB+hKyn2RK4iOnrb+iXNd10C
46AzUsaRd1ikKWN0vHcC83tr6xojaemYbLxipoGXbSB6Y0nPKILgWXSlx/np2yn22OnM79K0OLlU
QEn7bBK9uV5hu2Y1sZ2eqi5Efumvu8vz1Zset8u+N39L09TsqjdfMV4d9O2xXFQvmr9/iH6fy/7l
p06f0EhOkmvR0Zg4+Hle9eH949Ydx1e1XYpy5GU+3McFNB9bkxmngrFVwxQLHoKCn45M+CPbiNkY
0X279po8nOBQntivTpTj3WXdT/Gn8Fvw3AZuLsZx/xoaesQWQd3wj2KHa6SO9TNeQue983xnswAI
HpVPH68PsyauDSCCges+FFuheyXrLTS/3L2Clhj0qWT/ct1p6+E31KBj4MKkM1Zmq/7J9zv54bdW
l1XHRKF93q0fwvQvhridM1wceHkcH5fDg58tvXt5iY0dP32bOcI1oqvd7km22ur0m5JpMuaGTKPJ
WRNfZnI6X375+AQsfcFOaClqkFtlaJGUHTfu8r9+/st3hoxNPksIbyxvqs50mZn2R3DVzvS8X6q7
nkE6hyat20gqjQ/Ye5Z2/+AQLcv7p6PpYqXK+cGn8GUtOXTTeYMSj7RmpayElF+k0Xe9+XSapE0E
HufqdkE3n0KDOs7HHkFTSRBqmRoR3kxQk2bZC4YBxlU0R9Y5AeD6h28/eW+Sd2aFBYbBgHpMUuqY
U1gHodsg1nK90QcxcKwjQshNqZ+HGATYl+JcQ4MAAyktqVYVeV/DCECGstBTJJAJgIji9IlSh8GC
s4xcgfYwABwbthR7EOAmLXuTzx9v78uAXAA7ckXEwwCwbQi2c3r9MICxtMZwlarD4ADIxNFaSL5M
tA2+50RJELqPdyfL75k+pdqq/tb1cecGtvR1EKL9hBTXRGEQ4PjWlMcnE98eyHjVw/P+7f18aybM
R1mmS2VY5QEnH7dZWaVJLX6Rc/hp7oHv/Sz7L3hYyVQ4ZlMS+naxTvt8WmCe23qzyxye4bAC0qyB
oHy70joCBTVdiUccOYd1HHEW89pnQffrvNIRvdaR9KrwQayUM7HZGDiZLKu6yTzZnNgWtV2f2JYG
FwBlaWINreAGX5qaPAwPXgOPWVmgBSWrn8Yuqff0VrYjmwe4JIPOxB6SFEFGYoYPmduqVpZg32JN
9OvgXBuLRtFBN2hrCJp0+Q3R13F9Zn++/tmPdqbv7B7TP1y32Bbxd8YCAPvMbCfhDe2W2qBx/sBN
aaKNh715fDz82msbFtFetvfkvM+zVRsz2fpDBDUN0pF8mtDNkYQfg753/fLKH3DiWl36nP3bfMIY
XiXtGYFtpArDS7TaI/eruTWt5i4dQWQ61/xiX2IjB++TOP4Vdaw108QFVlMp1loLl2qfQb9gSlfj
tn9liK4Hr+k6irPTz3+qem6rgg+EeCtgI46OA/Ca1Ww500BtKK2MwaTn88cnui9v8QI/J8ue4tjO
3ID/jrnbmvp/BIlBzzLdR2N/nvEd4IqfBHZ8OH30UOiNuVBx55u/itSRVG6/MD+pT/vZRlyqERK3
b68p5bomEc/lmn7+8DUEkJuew7iWyfubimn2ea35dYIFxnUB4gqrEDazof2SMJz6HM2/+zSzll/B
ykO5NcFtbX5ce7CEW5fw7MhwmIo5o8sruYLFdD6pW5stVCcNrsw771EQ1E2tBSnq0OZERpZp3OMs
61oqSFzDZrrKKZzlGu3MgHgkgnDRQHi7+DDuIr+YEFPh7yxQUvD3gZVUeZ6kvFft/kmyCGjzP3Lz
N0gfeDpMEMhYoUpWP7XLXL6GSSWHC0rC0rRv5VSkcIamOOdTYVVcyxbELWVnPa3N2VnxDpKbFDe7
t6RUg/jcYkTrv31A60cfSVqiB3++/gx0/sjwp9Zwql/Choozxi3O90G0jI/T/rf36PZc+760dT1i
jYbGtkMxWjrMtAfAVeu0pLyeQ3hi9zxv5dfT+evpoanZxVUENzcsZDaUIxyAgaI590dCz/P+6RxC
ryE0kUJ7S0nj9fIEdjaWO1N0WS9/IXThG1BBxaMjOe+5nHwsHxieLMHM+ZSHWALEGG7i3LMv7L0b
t45zxsUl7tzEWEyXU4tq5ePqabbL62le5TnG2gFGFefdiVvpgNrShbIm0P7Xz3/5scskRuqQ1Ct0
eCO+A/0dOKD+GFOPFwmPJbg7wHg9x56A5gEFJgC24Iqnrig1xYTS2YT37dnojzo3y3pd44WsYSbc
HTauM5UWp6Jc6F4MG85rmnZx2d/x3Kj/L3t3IzY65EX9r8lVv40dR3sSRJANG4Ba3EVBLQCCQ5UT
lRRXgub1UW/zJa0Nzyggg+fDfibqWwnRjDuNKztaLpYZFcjoN4qW6e3w8q1nqA1VDImM2YED/DQJ
0oZKyCqPyasf/YFmVUg14eSXpfApprnOWs3u/br/2/n/LMVwexR0C/HCiRgnGUWvKV/2xxuAzKos
nbmRY48fM4J/fEVBImsGLkEjFfrifAxX1QhrZNEDg95yRctPDxbMDJJc0WUxw+K2ewUUMbJTvJcB
HvndzWR5WNpj4tGiAzvv7nA9eGfcQ8vJH+P9Ezf3aTYgIuzTcff2DqJ8hhsZVvrYso6Y0zViPkHw
4RwPT3D+JTvsB1StAy2eTW0IpYx/Q7Rm6YUNq2nCzTuaFbO2hSMMN3yFprSkzqSH08F3P5n/6xNs
OrXpynGnaldaA+8WvU0qD1896GXt5NdNj7HTyMVh/hR82j/H9i5PSz7Zblbcj9/oKLhmtcZQ9elM
4q7wBfx3apCBvYvKYKRd//Dtb7vXv8Z84uRdfHjz/WDm+5HtOza2qqHfTDPrTTEz5dSguLHIzv3c
2liwsN9dnpDvVJYyWVfT56kVl2oDgy4I/P4hfqplns2a469fZuXtTNf5ob2Azgtsuh+8HP35CrUL
N3ILSyqyZOCmiZ1679x9m1Iir0Cc8jFxMuY73bXO4gtRBS/cohmgR5WzbwVFT0Tzd6NnIughPby+
51xjXiKLq7hAahZ6H56Hcp00NTo83vs2YslZspSrT9LJm4pLuXKpQgTHFb8b02R3IeIkaKvYeHu+
S1Mwgb9vaUloPLu0lqYh8xLpGr57y4TeROzy1qDZZQgjoF3yimxNu3my4PftbyzXlAW7SMM2v3NJ
wz3290NBgW0OqCQ/nZq80N95x3qo+ZiD7+wuKicDsHPeW9ptYJDfjT5XUmJ0vUXOfd8bNhtmsjga
/+elSM+4xKm5s9T0/cfucaqOg9702PeL/3syF//j02yRfNlfUuWhT7B7RvnVksZYddF4aReCSd6k
Pb8A5TysQHvTyly5tj8e5r1860Ebw3W59JH6kFq6ToJb1gMr6U0lhfcmrbb0spIfpbsmjcCGGpp2
khArOZwjnpcceABOet3msccLeLCE/oI6YmjakNEbosvMpLzE7rJ7mp9jSBluL2PLfUx0Ee/ji9HY
59lMP7+0u7ZrWuDuVlpJDs87O9NqU5Ykp1jDcqI71GRNipoDV4nbSN2vlvsG8HWHEso27iV62nRD
rHrwc6jdPoWom68BPy71SQAdtqghS0bTSrWX/dO8k/v6B9uy9i8x71iTvbTduuMZTVxReotYHkKl
/gGyGNrJIwewV8CH16feOyRFUsTHmkafPJ/fAKQuvp3cWit612NFgx3gVnI9ZdI41/txK7nasYX2
7+kySnrkSBUsu0WdT9yt32dWm6o/jigdPGtYc3UhgqXY1vZpesB6wYt79A4EifJZjexr8DlJrewx
SRuhlXMJtrd+37Nipwncdr/ufw7bQZymKi/Xiw/xbf/sreW33XtwGsVBbaDjo2VrGGYB//O//eF/
4458pirpqwbTkJa8/c6TpIhOeC68pOPUA3aBW1Pw021vSzP8JSF0meV1fniZd9jPPXNKcC6P4I6I
xRSzLkgLq0/7sr/e8/7puHSh6U0Zllzt1szGdk+HZ9D3kUyrjgwltQ2k6XaeNHxuYyy4+LS/ffVN
qHFuScy9I3kB0RJWNC66ziyB8jV6rUtvq8wJR6ncb9Zaw+2k7MKHy/kMvIukliwQ4LTNKcNDwyfD
DbEvHNLBkwg80pbLvZgvLFofizaIXIcZJ74yPg1YnVfQ4LoHtqtmI+MjorQZa4zeM8mNl07tbX/d
f0M9sDXtBzMVmmB8ANfP+33QW5594ekyvPLh4zQ/iWc/TxxbE/FlsC7oeNjD0duNoFujpQU+uXkF
yfT0FsHSuxClDyuSN0jFvj9PiPfNL7Wwj8Br0OxjL0MAV2+qJ5//8+El9vfO4YDrGggAN6PL7plj
0T0ztc0M8VKvarzBoOVapVy24mQKp0FYbypvMvlYfdfWSMHBvr6faSqaCeqKefHxcgMfiCb2fu2X
89A0sOKa7AD5ENpL2stf75BJhu3j8345+2cV4xURb2GMZZhqFOuNCTMF1aKSa++61E/PF3l4Ofh2
qFj5i69L8bnM3x/BcI4tXwvN8OdHVjoq9i9FpeP1fPyydIuf//QeEvLOmDkEdxRNedEhzrSY6Kn5
QrD4YQZcXGfcjO9ck7lCRLhI5go/SaHi/XNI3w91wr7jjQReDVG26EvOzphsvO44jK8NvgAYig4r
kjEVJGko7W8leS/6u9PSNZmoHfTkYq3lrP/RM6RJa7lgVo3cKhFjp/OPIWod/9Qx10iXRdLaZFnw
IUZeF9Q9xzRFmv/QHWFFGm3SjtB+RFwchRSGInVbxmsluW453ofx6fxbwkAsmwJraK63fzzOlTay
D5ltcfZjrPQFa45cm8NlBFAildDO3r/CmU3GOTrLaMXeqSfOlmWvfSF0cBWSu4q1af+tV8Acd5QJ
JtdWJIoIvQg7B8ruAW9fOFfSG+4pqUkz4SCYRBMdYI3K4EytJbwynygbULNiu68yFLTMCABLuZJw
Uo3R2tg4+NPbEXzacCFXkxYOviynHnDKrSU1ZMQ3UHUUOS29/tpq9Mg2ECgVsOVN3FtapGjrlBxy
WnMlHnITQaBlsY1NQD1XCG7HKsxZZ7o9CFDgJcubsLlXybs3Wa6fZ4N9Vh7mRZ9nJJxfu31K2E7o
VDNfJ1Ac7kljs8ZwBUyewb3/dd6mT7T3mPwr1FSdrnKF1hFQqQV3iNi36bUqVxILafzP2+395/0/
Pnwzwfunf2ralLM0Qtr5JsAApEvl2qBYQJXSOVIfLFSM6ezE+UyefQeW4PIO//HSIEmXt5kCg11+
/XjHIztoLQHpo57bvPx4fDtfb35i8RNqGzFxKq7nNX/zhRq/xLdOtTLf+K8d5xpznCvEpFLX0uTL
+Rd9N6JMUrKb8RkhnX2dNYSKCx21P/KUvdXO2i+R62tub4EyKTM1+4ys1PUTtl9DPYE0sWuCNpt1
/P+8nF/nf32t6ljDz1Ze+ra7tJySQdZIW8o8vZhN5TLeyQEW0Zwusi5C7V2wCG3J5pmbrfbis+di
O+JyvBVYUpat/cZywUCDAJptyV5sZx3JAFYhBsMYvBi5x/G61h0TwLSqRpNN/E0Fiy4+qI7CJUe2
cXEoqr3MEs+7j9blW20bwkp0OFl2MzRXAgabrHp5j/why6V756zmXCuAuKdOC7K4oNtMaKgafu53
wP9Xz2cxzKBBX8/YijjGQjTJTh+a9brH5/3u+XHeDHCsEc+SP4xYaiqzr0sAX5pjZxfNqPzjn/76
5z/98eHvuy+75Kn+spu1O+ypdpPi1iOL+LE3sUnRMqQSBDdEOWZIcJn+S8JPa7p5TIRl+zGmvqBL
zt3bDuQdk46OJFD40y+//OKf5x9ncbeLbfcCNB0Ng5PtQ8tJw9p/MVxHGzx86/WItdWTy5OLvArx
EcIOcXZRS8GP+7HcFINQjH0PdNXZd1yhyVy9wnMM2o0a1rGQHOy+z5xXKMnaCMtm02c+PfWgm5Xq
aK86g7bTyIbZ65MPfgcf6bzSy96bHkAbJT39Qhruou4V1TS+E6YExTSVzVMHc/yFhUDCdR1YBPOB
J8dl9gcPbnLfeRXZN/hbv9Fqpxryr0ROqSO1hZfaI3xdMqp3B5gPNuTMROK0vn5cYn/NtavKyznM
rngCCmNMD8tZcEQShxL0aNelpq2XfatoIJ7SsomD4ZS83xotJsqcN1fv6ZM/q1+PbA4slzPgSJfN
xDdvXw9PSOrGFTSXJjxbYH9IG/kp7ONnsI1pzKmfPj9t7ToX8jXCtf12+9gdcU88v5CbSlQPBUHN
msTVX9VfW/qpXRq0LJsJBJDNrMs+HGp3+Rb69l8bMciwk3zppDNT3EknrOvBJ1fey1Lledx7Pp2W
OT2/h2208Tpw6FgexE/LexAgQ7JKpC1e6DVg4c+nn5v16hGh5aUsCcNx0E244+clKacqO2qjh2S3
Z/8IYRmRna3JMZCGp9GWqzmywYjyzDvWtJQoEvDCky3zSy09eSSogML2AqLcmWw/Lt9RP//pev9U
hoCBnEkcvOy68wCXBAXvMp6P034FriyxsJS9+FSAtcCsx2UIh8jW8VZS+J6szVK9SI22LIxQxcO8
+QzN9bbBKoLlWCyTEG30GC6VPrr20iPP2Wq+BVJnX9OYt7X4Yu66x4+T9x/MNxJmT8xqwO5y2z+3
9z1y17rhK2GMXRRIMzYeMLOaeY3kkvaVsKNu70SWSeUTuM30ZEN33UBube49TRz73ZCb74fUzrmL
hKI4cou9g0P4zNcJYv4ppoaEJc+9TRGmLrmRNGISXMo5CQKGheNmiGDKcYKSmR9OPJv8rYlu3eWT
SGZP01CSfUp/8HHjyUjXph7NXU7IC3vYqI3tVRRHgxU7Xpo+ty9KF6skhWHBYxss30eI3k5AdtX0
38anYdn2fa8KvIWhXNYU14yTO8O2ZHFWPTSEwP7d29tBQfrpDqvBlBQt6K6C97rdsiDcAPs8fX3o
0CYZwdZQUQT/1JdBkiuF45TdTmu0uFpVTFPe+fvu1BYHExEH3pAWhmpQIWnmW1+kCvYRxzXyUNU6
FayrOBCaGVdtnt5uX6iO5RJLdyR+FME9Uwh02cbRVslVUXmNLvDT+Y4J8bS1RJ6Sl1yMizMsDAwE
gSFHclJJjDBeX+rZfXpOo6V8stdnUvDjU387p6YJlrk/0U+x73nqGfF2/zgfK7hkdjARJEJVg7/W
EXtvvrbnT6f5MnsTMkhaZ0jJcWukfEYGCZbPwvDpc7P1WewBYMugu+CC7quKDGVBXG/kGiDENKvz
5cf//HOAWjpSxegK6O2Wu3EQV4Mn0zD1pPLS/dbuzZHb3hH3aJDOTjWaMUfAibQaDE2T0jhNnyVy
vb3vfApuiHkGd+oTaL03TEW7vCWtmTT6vnslWzR4lLlF6cvBT0oPbCF6d+d3A7BLuguOOStqRurf
dq//p41OMWjuWghOwDdFeRPRPEgM4udWXnj86lg2Q1ySnK6H14eFwK4zhT34kYBg9yL36IuDvWZB
qVPl/v7rcd8rg4yLkDvI8T6Puz//sX+BGQlkRk0EBlCSa01TPobeqPZI1LljYlDY3H0t5+MmMizp
2eGN8JQ8sH8mEefDKcnNBhuNqCTnyrIoofLeJzGUGJXEjPVN3kD4NsKbcg+GPgUARkgph8Yoc+ht
XOSNL50UywFPV2bCU0zGBk18yAgNufazrMsXgOefFcMz/ASKF0hbp/kw1uSh9LhzkaUtPlTNEvKE
0uBgXoaTgjwyQ6abhArhVJN9uFxvx9gOKbQDfdofj922KKLMNrJlN+LozQCRU83luWzl9Eqnuck/
UrYMP3Yn4/ohHPYhnhYgXpaTVsRmeo8fJ3n1atsdY3vYsTmNpPhlIHFZjwxy4nmC9JGww1NRFpMc
IoC2NVfqQHAXgvMnr6mGKhaEP83lBPp8mf+1/zZvjmbL/Bp+Apq9k3EUNmuFISdqVsaPOaUngM/K
U25n+n/aWZph7Sl3xSPjR2NP2jSgNbXRifmRUcX7rbWaK9vzrUOUwzXM6D8/HXa4w9+kyk6Ugmwo
lvH5lLdl/OiyReDBiauy01DyfC1vg4MGm9NQgi+ldrGLUnzyKAfNcWd6+vZ03CMo0pNTlu2Rmu6m
CGjK3S5j7uYjQrM9AlcTmE2JKYAjwU3CKIjxIdR24s1Pmms1WywDgPPJifbC0N+DBIvIsiTE0sv2
qaS+8HjmfOnpATkREWqLidKm6DuZu5nd0R5ea461vx8/XmddiuRS7++wEy1J/yFmz2nGU0iDLnKz
7w0qxRLNkcsDbeV9x2plOGclrEqTWLJu+RT08TdvzILyM8vO2MuzNrotJe1kuGmPKbe5W8lopmr2
hCwmiIAqRu3YBOLaBD+fvuzD6OT7xmBHPWHiskCeSCZa9vj8/RrsRoBhyZVqVtnrt9BBfM/lsl/2
7/NrgJlmpPlkjNn67ABScRqm3DyUXq+eMuv0xJUDxLqh+b3P2mTK+DovxgpIBnacl6uq7WyN5JxZ
FOgaEasMDFchQFseAQJkYRsuwplNHl67/WKdLPjHkkFA5paDjDTH6b4tFhF/4J3mbwFjgElYzoe3
zUkCLLbq8LlOUn0gWuBp/7U9/iDWEigO30sj6GeAGsFqs1UWYp4Uc7iejx1GryTXdDiaPB7fcVZp
z9gppwPTio+1jP+yNKt8WIc8dsfoGnbUbMT1XfOqrSjvXEpmSH3MqT0fP95OrVmo2giurD+c5PuK
PqyV3KRpI52zoFIki+MwqcLcITXBQ8hoJbnGcU5qVeqQcj97SYO2LIJXtQK9n03w92As9Edxi1JD
kGsNSso6/a5RqIZYWl6nmRTNY46UFMo4+7nM7JyIw6zlBSpa0OQJyx/5j32xbzlNaGYm/3k5vAU/
XGi3ck8fDadJwmUesnOYpVTgCM3pcrHqjR3mlnh1cgg8dVi2bQ/eXutJQPmI4d5ElH23M3YCOW25
JPMUec8CbG1skDtnJbcJ6nQytqaVxBrlsvz79rCpYPfeD1Berrh+9cxCs/QPwwX6K5JRHCTrk1nx
fEH180NZFqWby+xun5tSV1ElyhY9jZilPp/BCERHRiCGGpOiTvmyP94zKUYbbvoEtxVksq0EZ5MD
v3kiMqynjWlTLmZp3/aD712eIqGg30rcFZlwERrx+oa+bXqK3RvAvmRpaK9Dh7+PkLTmnA3L8a6+
KxU2kJ1W3GQJ5kyglbOiY5TL6RkNQuzQ9FhMLl26Yxb81rfvCOM9P1B/6bqBfXH9t/MvQeSBHlds
lcv5FCsLD2+voKRYcqBru4nDM2pUo7hi2FLAB8vbt75HB7BE9pCgb6jrWLpGewJ78ANKgfwYOSU2
TyV/C3wesHnbalHyP2eQmsknaxo0T2XnZT9/vB/9EIJ9qDS+oy9oXGs7QnntQOK1tE1d5e7tbReS
tY7fQkODqMsFHXehC9SyJc5RMeysm7DS+eTb0gIHmZs4L29/b6Fvbn9rtmxMa4uthfMB4JGVt+Rc
wFFXjgFfahfoh+NJ9r8FG+AWHOOhA+zyg0jLYHuOc27G5LClZjhELnY3NHTYlbO0lsR5csql+1Go
uegcu/JtJ//kH//j3//r57/EjIyZ4fkBJZBlWkpSxcSG72TjlkxRorT5nYLJ2sp9nhhPSPo9hEk0
T/vzi+cd/nxLSd8VLCjuPGBXZbJkzhPJEPD7OF8Or2Dwr6XztXKVeChN7KQlKeq1KZ30Hvx9d71+
PV+eAawup1sNv0vPs2QIFAnBfq+OZsngNZLo8vt0NEvGSlGe8zvUKkun9eUn/vrd1CvLkNESilwn
dT3E8T2IXlWpw4y/Wx2ydsuT7+6bIoFLU3AtCH1XMD/UcPVIeq/Fmr0dRGu/eeAwtQT+n73HlArV
6EL1TNKrN69gXKAY2MBagL9enh52n67nYxhNgyapCV3qu3RGRJAvyy1/aveNjgvRyYH+DSSbaTnQ
6XU2fe/elSjm5xUd9U+728dld+x75OJKqpzEJ6vz+e69SwA9LgnWYhWtfGMPd7Smj1rWVEoDivTd
8db2QETokTNRCMetY2TPh5n2b09I7XPcLLygA+CZlcJxA/0WlHz1dDizhlYTmLiE3Nw1sbVjp6l6
Jnr7pbG+7mTg+Ozb6xF38dWcqcEMwgKNERW1MjIDf316MCAriW0f/HX/6fA8y+H3FEG9PpzjXL/c
dgV0Qhw5hlbOg4WlsJ7TddwAkrz6nFkcmmlGR8Lfzu8P/8/H4fIrkA00I4Hk1a2T0O8XnSRfgBbc
h5WClfzx/rwDPhtL8gZilGE76atKX2x1aw3oUZabhRr3g4UcyTwhkIfn9U7Qm3JENpDWrt9TjR1v
d+T41CKhOy60wXJZLr+n+jruxZYsytUIATuZCt1Dye8su46LZEHpbbPRVKQFrlJy/Pp8il0dn6CD
Vcry1KbIfFtCSvGp/WX/cuu+tYl1ACY0ni9vOZIPUMHmAhXh5NQEOhqj/UiMolEFW5XrJzYCXpne
+McKpv3hM6Ignu2ouCUyXsHHJce8CAeE4HZkOcRrwXCClXhXi2hFZ0ou3nTD8GSwobEgEKX+Pyij
VlRUl8yF8Gq2T3zqz75WYf4j0Hu7jZai6UWLL9bxBLvl7GiwXrz9bTZk833eIwpJziJl3JQclvgx
eqGK6HPZ4Hj9vWJsEFzGYcjYWPp4hxZ1QCCNnDsrNRa/xmRnnCekaNmVjYFHM5Be4h69IV/6wSdM
gzUEF2wK3OJ6eI4lhY3GXvGBaNY2CRw0Z8ODFZwolYw179unPqxxwzsROwxcdCjuJoQEEKzjbHKP
iZTg4vXLwH1aTnVFXft1nqNPVvDv+PC8D/NDAUIs+z5jJCraeV/my2nVh0WSHziH2B2V3xEVWSyG
DPOBoLHVz0rRFJlSQDc0rXsUasd5kiIxBAGfiT1w9MD/wPYyf/LRX0PJI3l6P18AuGS9NvRiPrc7
IMcDTbwaeK/Gso4/WUwM08ZIs6dq3EmmEFJs0uTVgEmz+ds5W7UTYiQ2M5lSFO+EvBrflxlyEc09
u7hMeL4A1JQaqSw1rf6VKM7qez68eWGS26z5/mR5yAbAJzlJHmpUqVB9K7IKXbmOqgz2U0bc1XCv
ugB024FTduJm/ht6ndZWwLY5fLrunQrWypQbRtobWsHk51r5YOMOOJSnqfQED71K4vjy8gX7xFRr
1+bd5Awg5WZoJ/TGiVxr7u5M+0uveB8PW8JXD+1IXcznZTt6rwH22LYfhNVd6WmJV+Tnu5bObTDv
Q3LJorGhckjz7KaFO5IDm1vN+9C2D2Z3QkqaDkEsQ/Q+nJ0cgYt3/eG3t6PP1gM1VmycPel5sUvg
aTYPn3oZ0WUX56VqMcitH5//PpP76RYS/pb0t//Rb2IV8gBk5euP9x2jqrPxklL/rjdfru/b/L8c
z19BHR9JR4y5WxH5M2Uev6Vxty13d8waHDe17SkSlrIAXmP/hjAYwWfqN5cLyF4kpkizkJYMu2Sd
fW2E9ALson+I1NEtu3y8Pzea0Q++pvA6K4YNRSYstIinkD+6ah7rJj5OjfTyuAu7AofDpAb0l5nL
zo98wQfAgMmncGsC63X3srscvIYf5RT4/rTCk3Dt4f2LBTBD+U1VB8lmYXh7GQHGxnzoLAaf9ysT
ezmkUTJgjXz1wfc4EP83gBrKL+virsCR846DOEnP/LbzTayeO0RK6GNY0fWPj9YUxfjB6l4lpQvw
rUxOhRqLKVhlrBDB23RqxA3mUwUvoV6fD8B+PpQXJNOQzMEjumeVERFslhSwmRVyiPXFn7h0A5jW
b83K8+29R12ypJPU9WR3ON7O4JuEJjWJsXcfseLwsjJDnwRymKXIw5frA0awytsOU1TSa34+7eQw
oAeZeWFoJyDEsPABDaAy7/DJI06tVwNQlI8aEu4V3aEC38qELVyIWaVBnD7U9Rp6cl0D4Otl9xzs
0PwXD7Pm9OsOqDXDkPOk/enj4VtNz/XS625TWnY9ewYYZ4KnSnQ/K+R2voBvC1dW9Ijcytm7qffP
0fzNxwFLldH3pEXEePaDx8vHNTZDvGu1gdWSCFqvM6u9eSX0Yfdyi2VWZOFfZv2piT8+R/886/Xe
F3k+3V9MNlQDFRe/cpsMvCH/fgDnzpHRcSWGzX2EhIh70CgHrj0yXS8ude8lS7YBAjnm6lhrky+p
Qs1HvP/BTKPjqljfdlff2PG32NMCINhxOjP5/Mylj3H+1+6y32EVdxqr0X+qXu3peHiPpsWMEzSm
dCKd8WkK3EzIMQ00Vb2nVgmt1mCxp9WmgWD5MoZm/0Er2M64JbgwTXDpys5zkgH31iP3kJuLKkOa
7Pn0sdTgqtrV2F6g6vLHHWrQbZxYrsH1ciH0KP50oUnatb2XieufWx1laoOTNn2CeYABXLXvh22j
WIGLNnjuKzkx1B7w2N476dzsm9hxn7Zt4PGOnQ9tcNn9tmwDa+bYqft7cIA8eeu1fWd560F/56hX
tr+uyq+zBNMmXskSb3VnbbSTfvitj8s2vSh1BzdpMyNJmNFEU7BKxD/883x+2wP+kZmSz9R03CGG
NvcgPfdZHh9w0KY8lSlvXKG9fGmzcNHH2tCmF9Gnl6F9ZaStNemIWoG3BQBpxssJ9wDdZk+k979r
QK8h7//cX7xjKmYYtly74QJIe+2QOyDT1Bw/dpyyb+/8272GDDAJVL6qI8fYVIGShGgrQmU5vRyb
ykNbaWD1T24zMT4At0PcgFN4csmj1UYTwJLhfLVIMQYoJ+mGrMaYbYEQta8IBk4QmcgAEc8n1AaD
vnXbQ+zdFuqCo4nVvhHFaYSx2UX496f9a/TNpdBz/KsHopM3KXmYuNEYp/PPYYmfzhcf/vxpJpr2
AxPc637bXXw7mb4mNjgOnNGE4qHa25Clmri50YSUO3ZEHrfOHWK9McAjur3SyDVY/85FSMdgWthF
JlSvDoNqxhF4SgPXv455QSsJXdvUaTmWQ7J7HkKrAG9Hka2CvSku+ZXlPymvqf0QdRFYyeML/Are
bn79fPRJ6A+H65ItDziGpD6VzZueGdg/PkLSwPv7fAELWwJ4Iy4X724SSYk4f7o+fVy8WU64dhjk
lubg4ZDWIIjR500bqbvipM0opymv5quN7JQjvGuFWer5uDDx+Qe+C3Or0apeJg9s3CXhia3XA26C
FNuPq7udfRCdVn1DXd+h7/Awdd0BA5fJTkklFGcFDPXcQVPdcyHFQ768zkd78AgDhDByszZ3p3n7
/o5eDy9+jb6LZnI0JugNTEGnK3g6oqSKRFkaE7Vk2AcSTcrk60/Lxf90fm+7NKaR6wG5HuoOxEyk
QccSNGvIivvY6UTbIuUQcPD3VJY88IIRxU3b/Go59eb6efcMopoDabIhg99UbDxSa3fM4Nv99NHm
oWTM2+LcWnqHLbXEYRLdrAv67p0hd/hwCgwCh3Kp046oNb5R6eF4Xacafry9+bEqJtpmPvG6vSJp
Kktec2yAf4Fcc5yqKvel2aFvdB/C3pHt9s5E2qYSV8w6ndNHPtKoAIAXwTWQWfASyqETUtq9cifB
OqQbyNUApaw1EBowLtON23lxmnatnMq8uNBqDNWmhc9XwCmF7LT70vWjF4RLh4tFDHSn+IY1SA8m
L/2ShH45vM4Cur8D6zhioBcZ5boAZGkKD24Kprz5cbH3ERPfH/hlFj251BKQ81D21RqapBhP0ja4
JjmwjPt6eO5jcqR1Wdk/X40/O8wy7ey7AJ3fwZ2wUyuXE532V8/uBTgG2wOJw4i8h2PRmBSpevNT
dI734GXkGnSBRsDxViFvoGcY7zmDYLnuslwe7LC/9Pmn5DOZVrYVW00VRAd418QtlmZCPc/a6rMf
EOHLL1PfhbvVGCrySdvCIPWW9G88BFvTfsDlrPbltDP8qV13OKmpd4vFFYC3OdZKVQp872ORVx6g
2rs9qqxOG4Z3Oi8XB+SN0hybyLNM0wTXz+eP43MYzNfZEmkju1ptHKWDJz+wnCs29Iwm2V290MdJ
cbXk89dnu3Gf0lsBbiUXZOSOosBRNHpexcsH712XVEu1rA7rGaluk700S0fLo09Uew761vXhOOtb
H7OhdQWvMGO0yLtirvcORjZSqzTHNW67TyGjOypNO3BF5BnlPM4t9QNSU4IrYr4mK6srrom/g3Sh
q7kn7JI3kYRaQqUcTt1dwkFwru1Zg3ravd93KGtLwi8l9tt5VoN6m6Dd+fTa0YvyWTLlvb2MZucP
zPTx0NFiiUOYJG/7/Nc/vX3aP6cM98fU1eAx6tWPS3ODx+jEeMScbhyhZkNnziI1TXMuszTwYX/0
huNiEaF3CZWkyvjobsmgZ+UvDzA85ZCErXZi77Ix2R7IsZYm5Iv7VkBA91JIRMa2qoCQqTEehru4
5vO8y2KmLZTxa++ZKpOY7qY/sIpW3Bt7PlxDfWAUt32WoUo+CD0LaDOWM34p6SFebooIk2Ck/W7m
XtCEzefwXDA5Xz/vd893GW+iJDWBsADekBnQxWYzFimYbEftVT+N5fSxUzpgK8RH1r9WdQ/5843b
2dcE3lDVmtHR+caxhiCOEwyb8Rq1744eG5uE4OI76nw4EqFO4iGfvZ3yfgcRyDIFrM0v7kIY7dLC
08L6rAbAKsbiaZQ8cAlOgFuTaBNBEQVEREo+ctntMTY7AHjk/c6plCWmPC4psn2z3SKpRLF4l0ga
WHG7DEAEI5UkjVWQphLsTsB1slVeLV/jXUKW1bROH7O25CNj93JAgmcSKGpsDClFI3QarZo9WEJJ
zmiapf2voSlxtrEBCTrkL19KAaPWuDRo77lbNJBRffSSZuLDOnWWdVTfZSoYLtTV0tUA8dh7edRd
tDj0FD5wY2xPqtV02V1+9VnmMFQ/SccFJlpREoAVfS9WHLgiieSlV4jQE7AMscWJXGuBIuBUAlF/
KXnuojbHKpppvV/33z6dfSXU9fP5q0+wRzfEzrd98/mEffE8ccGRLWdBJk6lMdMB2e9hrKGPNYc/
+thcbsCyTpcGhpxESPL3jVx5kGsut7UWRnScubTJY5aZ/g3dwaiggPLHAOyE1DBPPQvyLp+/hpRX
Wyd3rWhaGuiG4wE+Z9ltXXavr3C+82Q18kyy1j4wmwyLnRQuTH0kY5TmJY3lBvc+coMYgzP5a+g+
+fDpPO/GP4tPcTzhbIEgLdBO9zIhwAcHyVGyjxkE7fH5cOnMKqHVRsHvKbggFuLEA4rYbEMHKEDp
NiZyDrKcL7GGbZDNhGwx0mxyuXoIB60+tWFI/i2RyYOaEIwos9anVBQn2yCDKrdm0tYM+IyWLIzS
AAMjl08v3AA+MxKY7MkXxjy1YVyFgXH5DvhMlQuZLkcBpNF6naywDAKAkPRyEsoaHKAaU9W8qOUs
z22YKWdSBv9Bopp2bUvqjRtBgvc3XY2dAMo0t7OhXdIwo0yXF2Or9Kp1CtHuqVnWbdfw6XJdoalR
ogs77sCOVZk6m0i2nZKfJhckkCzbfcjm4dkPkz4AMpzI1enwi0nEawHBu2qTpOp8mcz+cPE8PQzz
jnzr6fOOjrScNe7b/BcNBm9XrXBJ7M+o0OD1klIQ+nqNARi3FfXqhUYAAkidVXaDf5z+8TErzi8H
bxWHwhUwDdyu9gQp5nPpEQAmIFiWNr81cMljecIUihIO8adJcTV1wwBeziA5llZShe9gnQjCqwu3
y67dFs2uVk7a+5T5xAAevahq6NKFGgCiR/a0Frw6o0vWmpBqAHVax4ojJwGlmZGlTjOCwziuoKm8
h+odpnaI33Evgylrt0TibYB0neMUhXJfqQZj9eXdSSSZwEnqTbnympK8lHl8DxHa8rBJJlogRg1b
5FVuabUF254huzq1t1rZAGTlUEnxadGWwJPXbGnYIACpkdo5MsMniJ6U1epHcoCTCY5fMyzjX6ZX
whTITgcB1BpaK63ICwcgTnNFJoMbwQu3ohRzLlVGfFx9zU70Re7iEMXlVSwaPWDfRFf07nI5Lqof
YOBCsXQm0O6JlkPYYIwNfv++J6n6PKLqGLfnieP6BXGvSpVepIoDesLAavnDCO9Ws9LaGKAZu0rC
p6c7IQvE2vK5J0VCg8tWFaYXU08js23kOIRAktXx1qEFYtKUO0uIruTE0/kd8BVS1kxceayo+R4m
ItnmC8JacH6CMhMQsLARwFad4Rk+QBqVxy2hf0gFlKsoTM66a3oxPjp6eAavhqirOX45jA5Rpipu
IiVnDgKgTJRUtqgWDj3OSRfidlGTLHgAZuBkTy27JEBHVTi+PDogllWlNa2aOMDgJLmeG5x8OO5W
a+sOCUEu04b+8zoj4MvVdycMaX+oebddXWjkTG7x/wA0DKwibABRaMtq6FoDhYb04iCGQKUWxlHZ
AWnfq3Xq4jkspO2QVug4E+l0Pj37KoK3w8mHvp98rdOnw8lP4L4C8mNli+/w7D2OfkzQ/vS8OyHz
c+TKdIWdkH+iYk02waDHOYoSZnHcAA44yvI9y6Zi+J13NrBCfABbISDEhxRzn5dA79vueR/HBvof
g0fHeheHEbwVa1gQDQwt0pKCuvCQmDKGYzIDMuf0xH5Fa6Db6IGHAXa2rogncXYBQET5ylgF4rh/
id6p68oJvO64v4ZS0L+2KpHsmuNB1IBlS+AWSX8aqgY5KDqHvpctvIFVnv/rVhKR1rl+fNCApSne
XyyAriJYXl7aDFmWAf5lOBt7pnPkT7GcR3xW4QD/clPpq0624wgEvS19YUvy+Pv+6fByiH3oUENc
u6bYbfzdA/IwacPZn8INiDu7RvQCOYAHPuaDXAVTaeaOrLYBHl3DIQmY2sD62yrblMwwTW8q5gFe
9x/PZxjOtmvWzqIEeGZgNHI+/esv1HDeAgEZyWRKHXxxpCN1S3MXvPVw/6PdTt6u+RjkHchFXQD0
OBS2uVqiSciHPwnOVTNIIL4kH08cECIJ46d2mQWMwMjiRar1dQHeMW7EV6Dbz7v3fYzhht96F8jh
eb/5wcP149P7rNUew7SM+U2FgebNQQzSksFeKuxxGUVFF41lVS+HzuxraUw5KlIwa6W6MdS6Niyl
yQQBrznPW90u9sUX9j3tjnDco7R0QiftdVCslcJleCmjyTgPGtgrlno6XJ7ag1akofM4vPIlzbhd
xA9rCZ13juenXx/yZIhU/37a75/jvKhv5w9wdjJ0TXn+oRZxVH4ruEPez8dvr/MnWrH4uCCZNBNM
HyXayAw/BNikiJCZgRZrhWSMmfO8nsAN04FdunHKVBAaEbqUw7Y3Ryb/ps0Z9DRaLvn4MOhAYr+W
YtbKjVP8DsHboLOSm2i77F8/jrvLcqljezk6Xc+FX8bucg0fTlyPzDYxtkHeiwr0EIc2rfR9Xe7H
53CfwEuko6/jVyZu10+3g0/AzTt/GNojYaShgzRdkLHMRS0rrTwWrEdwoYcG6wmVzvtnwrPRCzR0
AGFkH4550h+fvEJxWwd7XDvM25KZWtIFF5+7Z6vvu+dnMNxqZhiUZYZfJkD7a3NyeE1k6Hh7r/Rt
ilVWAG5EHjwt6ioW9e2zrod/ohMbOvRzDC7oAe9OA84h600xj8n3xznuf7uLgRtl7pA+y0q+/Sag
brpUKMEXPP8GVEcfiMxJKDUxX/ezVn269XijpXNb/fYUh/vldIl2Mb5GwQ4eouvFdMhWok68R0Jc
YXbAZLh7PJyewrC3RK57IAXo2EyvN8tR3fNeZyb+uk8ttcCjJYf2j01a1zo2GKM7P1QytckGNe5u
Lo2uhDwwF4LyDFd9X5uIAiFCFlJx7npMTT2ed7etvh08Rw/hL30AP0xFjclOD7NpF/G7FHwA+RVa
QS1VFhqpF9z3ws/Wz/WlZfyaIF+LN8OwpHDqpA221xrIzp1qyMj+zu9GlLxj6+Xnwpyd6mLABwZy
npb+0z/PaowcL/efTZFPB3VD/56z3UsFS4WkXlmGvO9zv4vmFktBL2JwnH7P1+7F5VJCHWL6gYn9
Ljq5/3sTOV5gwneSze+7u8WIDcfT6Xhb8/p4PLxfkclFbWHP2NVd+gTQxcjsaOV1PTWY+1RcsOZE
51Hrxl36QdtRaNwhLOm8RY/PSd+nhALVzBLhYcMv4x2mtQZCdyRWbBiixzzPdMNdvdtoOh06NF9j
VosNG8HE4Fk22WL0IGdmLfoPENnG3oGsd99wa+agYU4HJBBHNc+xoXku2wLrGHOHnhP/cDy/Rl8T
9KcRpHv1k2UKCzF0fDfGTdxk84aS87D7aIyQimsRwzYkcMix4ZwDFEWN4yGIrHteerRxkEFLdOOY
iA4cBuCIlLW5Jms7xRZj598At6AT3F3DZF2oCxlvY40wxVmUt9v57WH/jBRVOtQ4Pp/pDl6jAKGS
Mek6zBVT9zFE4OWy7g6rPDqAlz12HMradB3KvPEAdjlSv94QkHufvAJr0nm3RjdcMpV/DxZoRHzS
2dFDyNW59/yAKKehfiYMKc2LpPK1NJJjn2Jjfhrx9Xz8Eqr/vSID3uNwhwt/5qhPPSqgA7BzmLl7
XwgHrnbji640AgzM2VrUivsZI1KDKB+aGqRak1Xf0WVVLTyHO5iJAMzEEBXQRxkF537/uGVpCnAp
7ria7Dy77F9mTRWwYCIUYkYh8N8gD76riJnTg1bHcLrqdZuAG5H9xea0khNaH96L++Qv+Ovhun4I
SLDpDla8VfPBk1HuDl9f6XL9fL4c/unZB3K6UiU6EJO5/+kg+UaYjwvG511+QCQ3ZDHTXNp7EArW
U7ZSMrhQYjJGl2Rd8KZphGkM0YZ7zotCIcN90ufjcvWJ+D1ldrrHo8gpHIDvWoLC6IlqKAj3hSrM
aOtQxdiK7vYXUxv8afxgkPVEZXZIJ7DtoGsU3ODJ0Y3JxpNrxucA56YGZ0j4SB4KP0I9ZjA8pAZy
YHeCMIRc9Bb3toiQjXu2/IvEz2+f57U/+8YCLdwGMlwyZMKQ4uiran4yrZyG6rT4ZVxWrsuqmD1m
mWXjJPYwLqEtFwP/XhLnQuwgDB4G28zNRWh/9Wtq8940fuKzdPlDW/fu8qEiwl8jvL24JVgJ6QiF
MnffKdqrL8nGYeu65geFAuJxsG9HGQPKlzShsNmg1kzN5RJJYH9KXDXj1wu/guvz2PVv8XMrQS6i
VRPiELV7q0Kr79a88/y60So17HIgK0YrSTErplMvuJSAfCdyNWMtj6sdJhYL39eShijYLIP1fQXC
RIp2PC3Z3RgyFHVnMXTUgbz84BDlFlt0mnvoMC9IZrZ/18NfJD58+SNBqbcS5aR6nPDL6+4d8EDC
s7aRlWrB62339OveM+sBXBRdcRP5w8xagY0K8tJ9mq/gTr5cFVjIEg7ko5TwIS6uXHRiOxKO6UO+
SpneiREx2ZGw96jHfxc5rV1xup60+Er1PSRVvwXwuCS9qTWftVwuqMzX951PJjr/Nm/0ctpfruDB
Uoknajddk0wRPyErblWsUnLUyso9IiS/gjD1lNtufxm79BcQfon5f6bP4cGZxUhI33b0qIX00/KX
picp0mxW0ULfcPf7KPYuJugIh4lq+wTe2ykMDlzJN3hyO4eZCJ5iSsTYVVIUoAVzj+jiOSLSiqkQ
W3tvYGkNuI7dPAj9nVj1kVSwXUe2GwryetqABZS8YVq/k0XepW4r8rGQLNajN8B2xD2MjGLBACyo
WpQNzcXgrgSlUNNhDCsxISE71S9o+n6NKDM2cDf0Q7r2WXD41AAN8juUoRUNQDOw9p7dlaZEPDVY
k166qJPK4Du9nd97j3S6Rypu5CzQBgbCS7cRyVpvA+zOEnYXJrGqEegpnWcoZW2G3kPwBtChqG/a
/j6GdBfRm+/Qhp4Pu7fz6XlZGPml4+IZNSETxd6tIkQxAHQEVZvA6u61MdmOWRzEgtS75StSw/Nb
8NarARzs3ohpXDczBdKb6c7nizUXNxD7cFv80qJr9OqoKhT6B4iuKoRsA/09ohTmrERcjrULz3y/
nLnPTBpr2QB2Pv9xf/H1y+Cm6Bve5BVyggtomIJwnyn0ULI9OQOu/F9QVwGHnKjcmloqW9+KsWaq
HZRdbzD1M4OVJ13rU+BtxmjKw+7lFnrIH0IgOv3wfXcFxuxAhM82r7j6TEIt5iluUIyrrXLs7089
vz6JSKo1jT4Nvo4TbNMQ7LjTbnxF0hSwtRq2XASoO3GNHLIgrL1cIwZEwBqCZCeESnhuJwnxYBlN
Ul1CswNumeP+9Hr7DIIwMkcp/WZSrnR1oju89XExGkSNHdXDvacJZs8B6JBGq4TK6ZyOFrNDwo8P
fviFHxsU/k387dMsgh8Or6fzZY8SScyaH5Zkpf9fvKVkeZyPhzQlMi6/O75/3rVfIXUgmrUUfR0w
HRf9eni+fS5OtBxnqWnJZ/DtqmOMzLcMuvqKb5IJDg5F3mkeShsXrj66TGLZg8CKJstNa5/Pt91v
yxpxyfYChMuT9kRIPhrq3JNrRPxw+rLzd5JahQcswhbhZi1EXtAx5dnmez+YzYcNZ4r75tus7AFK
iWyxeQDA4RTv8/03EDqi3iu1cpPd+/txv8zy8A/Ij6fDQUyzFqhsV/s0U6uv/0+k2y4jM2vhEXHB
RLIPZxHDsNDIp49ZL0ZOPqK0jRQpC2FArNjyHHVD5EtoBn8i76G9liKS1QvWMY1qDS6SWI/k++u/
rxpTMyPSrGl8iV4j2x1hu2SzZsGmPcjVe1yj9LrfXZ4+hzl7AK+mxKuiBLNQyD1P1xCVnUxCupsl
/W4GNBAE+rQ6S/lqa1qRWZNHEyjtpCQA5hXHd1vNl8yagEKec/zKIntS54zzy8P6rCL//7idexLF
Ksc9rXXp0IAmRBFAVktcaKyD5fH21huYAQ7/3D8Q6kJtRSIrHzlxF5/YusX+KrbAXkJ4Teq+OLNH
6K4kz5EOgriLMVsSSKcllCUbuV12p+vL+QJsfD2U7GiCzXDNWihAdj+lmy6GM/nrnqkm/TTEjLCV
rXTBy1Ku1UZXmF/k+fTNj0ZNVT4LqwQrD+U7mdhr8+zyDK5Mszw/KwOQ51eKiSvfxqfLfheG570d
frt9XNBRDPfkT+eHl/PTjJEgTyMZAcrJMtDfZOpkm4gvNIV4+Hx999N0v4T/gJVIHHVcVf1hcIB2
pjLsNN53ywAjsnyTU8krjpcAtfKzRXgQxhbFgGf5obLM/+YCs7A1aaQSuumJUhVZv0FU9/ARsKLm
MrTQromk8m4m/1/gzosfMcW2l3kmVKlce+7NasNsEs8q523Gxev+cr1D3yRZOEQb+V5bJt/8HRqQ
IZE/n8SXYmrvl/3L/uLH6QW8g5epMhv1Wt0iGGY7bulgdY3PE3BQx2v5GrwCmnKxiuF0EbNhuXt7
CE8PbJzGKDPF1Extlmcffv4j4GuqXCciIN5ZnG80mwofgbEkuXt9mylhj7Qgy+UT/M7nYdaWHxvd
f3FlvT8AhyN1sOYJZqWcBHfL2gveR7No1P7hfd1/+vXgu1Zefw2SLm4MyztDfFeBbDTDyuPbAUSQ
D+cZa0rcKdcI1h4QTZkhe+UwLRFPkC4cX46laW3ZRMyX8+njVVg3ojsS3Ao1LYcVASHL8qrM/62Z
W7R7Py7H+MQAWm0RSLCrrE+yom/4D2V4I97t+/OsWF9755ATyxs+bkGvqpVVxCEyawyejDueYc9r
RBKnQqdOw+sxgN1mzAbFU1ea/fH/C2lNe9CsOtO/JK0dVzz1/7a0zknboWWgi9I6u166ROg4zj5T
8b3wipMw613RkMyDfxtLMW9cfiEKwFsn6ND5V+/erN10iJXEW2xPn/dPv8JgkuHlwO/3JwC5ILg3
RpxL3XsznO8jbvF8Op534E4GxTmn/t+jbLPWZyVkutXSAyoHQJYrpbu602icr+p1j3wQomTCwJMc
eunBAe+R2lURpTeVlARXIksN1zW3Aj6eMe6RP9qm42I3s3DwDGz5DHTFUqANTG7drrdenqOjaWhT
Kusa9qw1azciwgD0//uxCUCdivt48pB4RfHrZRfal3yeV/UVCYAKxlKn1pVr9A5XfpGlvFrKhdEx
a44nrHBWSmsRNsK+dzuUvgv/VqP28JJ08WsCW/78sF5Te4607+Gw6vimGH952+8uz35KfFsRD9CC
QOfevGQba91WHIwN9mHzStkSvJ1fX4ObMZ+rsyFRHsfVG8JjVONW8hpBA53qNXxFW+u64gom78Ku
DulZFGQp4LOM1xWbK60xJFMMz+pY93EPU4bMTYXf96fnKBzW0wTTC6N1dRWYYkz9ebazff9wshj2
msa1XF4r95KvNhTSSlpZbfF8al2GqKZkmcCTmg0D4xp5KySreLuVeE6wjlzX8QklyekecDEzh+Ah
jWv69/jxKdQ6XQER5+VCPGPBUJiYfP9bGMaSAjR7OgCvM4bdyjfzSQ5vr126mcqTDJSL92AzR1i8
9EFi7p8PuwDw9o+Hv18fwp8f9r897d9vD0NzurEUdOrzFGaMJNs0LBCapK8D53do0LIUVpaDwzVZ
yE87uRzew1inb7NJ9NtDIwIYVjJ5RHfRFSme7eP9eef7s/uF22tMZI1xtXrnFbwM8Ol06XCDaq/h
VHMfyXJY9FiwipRkbD0tyl9XeZ+FXfNJhiVUnucurciZ+cxGNFiFTHb3CpxMmZ3zKu/n0IK2DUvm
cAd1IUXQDvuv7+fL7aEgl2+np8+X8+nc6F0Z95JRS0bbzDtJLS1O+9f+BUlBLsh7/5eS67xOWkOC
NRzBCunfEYktzW/a75czAgSLiQx3px2k56V8E/AwC29W7K8zDzyEunkLEE62RTPR57VWcQLPJclz
DLJgsdf/8bBkfyxPETyBUTdppqY8AfZCcUw6LJO9ROy+7Hc+XoUWE24kmJny6ERKg8uq868fe8Bo
yFK0zS6DI7ChkWBaDQWbOF8O3gOEGedEGARt+0VZ+XzdX2ftM20HrEWm1bsgYBxBzu3b+/6eE1ly
67RGm32f6G0RzIQiEJfeuZ+t4bf08ZZW2b0fwDWRQ2X9tfmqwIYGwjB08Gc0HwV45yORLXHs1PrO
A8HNHAOwvqVXX97DCr3zA2h85PjWiBzH26FUS7JHS9YABIHUTdZQS0egOjhyudE6iWR/PLzsb4c3
8Ow0Ifg8/bHFcAGdTqLWXgasdIBLNZo/zkaWIHk01gJAY1I1gFQzmaRquZXs0/QQSCVyEPwlczIb
yGnd1DwanBu9G7Il2p/pbVYWvMqAaMbaWhCt6Hi9zLuAlErFD6mJWGGRtCHfVcGLqToIQNJ0qCWF
avNV8IAFuRXaHu+regr//jbb4o9hW49+sUMj7htG5JAe14GxiTEljjeJ1gGiG2utZcIPEiDLEF4d
Z94RHf4YxnM/7ztyjDCa2Dp8Yt7Qw/vl0PB/x0MNpWGj8JsG/GHQta4pWowXPCNHV1GFAKmFGDCy
RkLYIsQGFM/vgF4nbFOc+gDOPXxKTLam5RUnb75a7a41KN8lrZeaZAdoxhAmRYc5bPCC3ielO9Lo
q7kfwLyMJDIuzJvWUFyCFzWpJuHU5AcIxxHth05qit/3XZLaPoz4Knnbb6uhAqxYsok41s1sdObF
/YEYMrko78NbMtq5ZZAF4IjWHY7VfNdI1FCJHZyAwCoGmoMguKHjOtoiC8nOqUEzLVK2gJRt45k2
SBlsa5L1GfXGCPR5SvipT+Rpre71dLKYHd6jZePYJbbWMbLUG1ojdXSlI/lEIV8nhFw1iqJmDdey
RIRYu6h0Jj1hsTcCsUdoiHb937BUQNRyaBrZhTaASJkskXNdmweaAHKGSpG160vFLV0i79qoo4Kx
35A7RdTMTxULHOD3paS8U2Xe6a/Czz5NFLdrBFKiCWcJ3YcQmW28PwcQMbAe4wINyLGqeDN8YXKo
Di8egjxem/0K9RGeUKJqPAi5kJzlkDSYTFSAnbm7/RLImU/91S4LkJLr55MBzBCW5NVfOSxT7f1T
ez7vY4e6w+np+OH7GDXr+eJqmeBCoKyjQAPFaiCkGxv/pKBvjJ7EWsclHP78rcO9B8J5gwo85NHh
fw6rXP87pBP/ZUbWFSxDFBq1pm99usRUjuf90/mCWcJAHGV0Xi9gAsNQfdQVUaTz6XY4fexIhxuw
f82S75qYFVP4w1lAJk5YyVWqXWRsvjW+AyexxS2kkFyKEZbNddf2UCE/JgzqvYIkj7C8VZz5ltb1
CRMpUSN+D5U0h+UMu1zIVHz4tL993e9P89v4dAGXTZ9pbEde5nGE64q7+nR4PoR8gUurMDksSUM7
ucpzAMxiILZoCISmRPe1Fm6pDV3OdF+iaMR4vtCwep2l4pnpa+hpAU7kiPtrjbMutxazb31ZwULw
aFRovDcByMDvavf8949rLuSNvAMgkATlAtkuKXzk5aUkW4AqGn3K1SZpV2+7y8ysezroQGVxHrNO
2WDA16ypn70gu3S54sQxo6fjfndKzQ5C1N0/w9t8CbFjAziiLrl/vMnjeQaP6UrPoYwP3BzBUU5g
/PT+tlz+kjiFNkGt+iizKZYiLeUpT+sNxvwCgHvFq2KED89SLXKs43H3fvUlJJ8PM9sKBVG3mW34
rIHd0kGGZC4Dypt4f2b66MIjkwlzjaw7TAIHB3Hl8yjEySqnl/G8/u3On2iluMYVCRm5nCnnaW+2
Qb6WeA4Ump4LuMWJe3Ixe25+tw/+rhLjnC0v/5M10yQdAObYReo3JbWlTkK/HgKlkrtbkPAHhATi
gQzEnwoq4tiOkN/qhWuzSjTSP/se09XkwgxwE6aUyukF+pTnOOfMZyjmUst1S2H82u0S86JvRzTX
M260ZERJ+lMW++5TrVJVcIcL0QwBvSpV+a5jn4rVUMgjUFpEAK68sgPGu0QD2Lrk9KmqXYzvKe5f
aaIFpDAYTuvNDoLd8evumx8d7HnJw7LpGQcvH8e1IU1nyySYFx5XwU+WY6/0Ckht5JwPxVMnKsas
U4SrgdRLg2qiTnr9XgYLdt5wMDAv/+l4iEzlCRAV8TaEV2uyKvyA1DLDqWXbdPNKAQILTuWCEX2e
ng8v3/wan3fXw/UhUzugQ83RNavYPQT53q5Miu8kr0dqd4Mf8PlPlRH2h58B46Ge09xYhRDav2I+
GO4eNxUMoeNgQIQ3+edv+WLRdqlxvJqRs4tXWUV1cTRYLW5z5ERj2lJWAB5mtQlc8MA9NSRfV5Wj
w2F1ycztUoPme0OEVOhobVxj+WN+apFb3kfp1J2UuykQMR13TpkR4DoDR+trd+L9i2+KNKvE4Y8M
pX0PhUkOOYuOEF0I15mknnfQ6qLJTNRTv1T60XMj401wREnNrFxq7V3cneFg8aGPnAbT19sAQbE+
A9b4iuvG9GLEeUnYJOiromIif+nltQzEsUtYbdtmve9CDOvP57nuLFBnefcAxJyypRO8MBbXGzkk
x9E9ar4uXQ/FoWfCvV3O33yBwe3bQ7yOnjUrOX5LailjvzhEwZrTubu0ASjDFvlKqZw4nOkvfpX/
cb78ucObZOWgaUuRtQnJvULEce/1+bL7+stGkIL9idJEMGAVL47/+xewluScgJBgAX2p/CyXcrXg
pP3t6fhxXYt8fGAs/wh3/5oRNllVlsTYtQ6frIL6JYZFdFno026XGNyMt8/zmV8/t5fb5vaTtoBh
iaYOEOBzWczSrS6gKhBQ3M5SmOf7yO5DsuE1xChAvZ+vV196G6vSwe1dS8u1RtdJ82n7VQxZJVNq
JP0vuYdwXCkImuh5TtbpbIG2N6jXpYvssOP+dff0LQrRuNjK3Nr+kLDXKS9IR+uEnpwBYBm9OesA
F+9VaGZYDRMZep61qtnqbIMs7ipdyKKn4+7NmyLRaA9baS8h8xx5gu2lPW304xSXF/VD/wNADWFp
S0bU0zw+MrsooMVPV7yc3x5eL16riyL9CpZVece5OKvlxJ7/xTRmzJK6+dWHlkqDQH8w/xkhyXcz
v5oRCO5HZgzQroq3y0dQCOM0eY+Ipf6YVrf/8Ftz4dFwJzrNZEzfSMAuIDhbXn1/d+GaTv6VXA+f
jsFCaj7luE8y6T6Hbj+l/p6d/UmyPxLwyTIwbhBvQQhVntKkXiWBUYYdBNbWVr7DKgNZJbuZZtMU
XD55WZkbxi/ezs1RogFWsQ87PZyw83KoZOqbxq7lMq0UtRmDNO0NLO4AXQQLKrYQym/bDDK+VvL1
0HDY9s+i22exFUtJGRWDkuAibHEWuXQ6vxxOv6ab6F2/FMV7W3LRlhGXkRAXymy5qeKjIy8iK9Yz
p2hyLyIXCB29X/ZfDt7Ts7zEZBEBPji/BXIZtBBqmUqXX30qmAwPvlb3m4pm/IbgXm3NVZZdBz4A
WjtHnA0EZ5GQGHL0xBNnRAVfX2efq+NNV+lUadHQWMJzOp8wdEJSTrCcYTDtCx04kTvr1uA5En6f
69/ptUUPSDK5n/fey3vdA35WCpDEYE7nhy0pdPjrMJTkSa7mX5MdZmBl3Pnd53+k8waTLJqPH+1q
8LhPyYmipRVnV/gT6NwdaRBD+5YNp6Y0Oeh9GhVhHjQlrJUBEpSfUorK2nvosekdSF8PQDkVVJjl
y9BCG6PMT/gi5dBUMf1w+n/uL2s7l6Z1HClCcwvtvpwPhLNEM6BhjsX96JJiXcLh1L5L9sOtjrcB
IusLObdhNnnBE7elyB/uIXfA6wfBmRPfz+mROBlKEnfEI/njEor4QzsaGJn7VC4SBeJpd7mcv6Zj
f20ltcQFDMeA4+ECbWCzS2XKDs1dDIk/r8ksS6eTjkxRqpR9hdZERN3D9fP5YzZcPX/0GhCQUrJk
/LJnns2kcXi63cdNMuaL2VutJryBm4zlCZPxpYAqKSZOQCzP9KG6qGXweqtnRHzBxFTO6TB3yByg
ruuR5QoCmHdEpORHjhRbYMo7YizHUU2mZSx35KaVHL67ukKipivgKBUXbGG9sz+ty/e6IBogh/Ay
wmgG0ZZ61LZVOWXz+RAFftDsPEqOu/f3lReCh13ymLVLumtvQHLsfKO1R+xhpZ0QO60G41SJ73n9
xJSKcaCWLbB79kFLP8Xtdni62w4YHKf/RL46Q2982tBqUkT9yhNn2hgAx6bYFLkiJB31vsyTuKe8
UpAholRrwpM/f9p/u5KkE5Q2GlUcRQ5KShFbbX0DT544GZE5atHlLPBX6BCs3pqtrOWw7qJr9Xm1
INpf6M48sfYg1UKWtxEF2ozKUi0BOhSVTnnvs1gG0smVXr2IvGUC1scpmfaX/UvHR7CmKSyi0a3P
qWAySRG4p7lXfP6Ss6ejG2mJIt/OoUmlT/O60FyXjroiJ84x0vYsCLBLapkMuTIBSUPRdvOQV0DL
ydPjuhxm7rQLftIUPjzub33BYwynu3j73j/60FS58P3DhzoOpWvXVWR9n101TJWWbqqWv/Ge47m/
i24GYoEUDWsaWtJ86z1yMZLzCX6fvEAGi2X1AjkAvUCznr21yfZrcPEe3n0g9+F2eN1fut7iqbwP
aqvG8UeXXVh7d3zoSVhD1qLFh5kzt2JV8XWycY7vYpwbIQvo2ZUS1rFfW662/lB114hFC04vQmzC
AqWZbNor0HIc7rByt21lu6Q5cqTJewpbKdlR+xjuM1xAUUHUoRXnjx4E8ugPnD8gfjrWr3mM+USC
lLTUSwiNG8k8Icydv9v7B0SydpyLvBuXytlP3aiU4m7hd9I6+IzknLaDBARNPSq2fB1etodm5/uQ
B3f7vE9yAfhW1MTZTYdT1+PuSs1ALVsH9jN9I1k6RCm2ZCAHuxNH/QT1zhEdTkzg06yzTbQ1Zupz
yp1BZ30I3IzibmZQwGkvDMc1lmodVqNGfjLZjMh5Mo2/+Xzw7ZTbHVbj+xo4naNlL/QMKlnFuEds
6CId0ta2z3gvN0Gs0pYK/lIMcnv08uUxPKfH7kOy/XBoHX8CeajxjRHVz5o88z2qfHUs/3YGXkJF
A2Qhr3V5A21P3lTZSpqjp6DFYmISnP2UFPVSV91YJj2Lylgu8jmfFrw5zV3Uv6Y0IW2Gddr/C8Yt
+BTPs9rq0TQJToFk3fPgiDWdmG0KxwMAl6Yt0TZP+uVw8dP69rdWk9FIcobDRCY5r8dcHy7nM9LN
HWdVzzo3kDKuqbli5gSUMj01YxcNbVi2jWZigrtQmyfv3SHAE5v48Lv0a6BeT80gR8Po6o7FjJsn
PvU4TkT/35zqGJdeSxeLUZQv5+PMt2Lp6m/thMdlvKMq3JJP5+P1fXd6+IgjCMNQ117Oo8k5jxnN
Cam5qif17Z9/83lmp2sNQVDcryGVJTlIesNKQzIk2XyudCajMss2CXlqABwwJdxoufkqcZVQ/n7+
9PdIL/P19dYiM85I7Cg4kb2InQltt0wLJYlh4RLBqnmaQNYXs9fg80xhx0BlyXnXXokOTaElts/n
Dx9m+J2HNmSa68rfyFrLOqeQSpamZ3RXHYtVl4yPrGb81hnnMS9B5vSK7BpmENfZC51Xm9KqaSej
w3NoNH0N7kzf7yNKzFCsiN/RSHKHSeP+Knd4tuAut42G5R3/NJO4/XAcySJ2+dKrGR7EHr0vOubX
tvlRErnU41eXfRiKsJRnzKzr2mY1A+FZpC/bbDQ8/fqNFK/WyloH80OJeV2gxGeSrzXW9yeU25xe
TVrAxe2k5eKkAp9CkhymzacfGLYhV7cm5H7aXQ+xIyaYeywcmfRGdMtWFDKAWMnNLWmlmkQQ8jZI
rLM91nHeGGEYAzGADfiK5cb4ghHx81dU+fqXQQ0fp6fUBOF2BLxDcnOm+bE3dw5hFc5V4sFBX0E8
+FSiNx1cWABCviJDvZGDHoYIZLjvhJLFOGMzeNy9SL0CpCl+OLcCt6RLWlC5V9FmGlXSLzrM2vGb
ECM4/MiOJhVg31ZzE8BaebERpNqYXCaWkXDdQ0r0BgZ+PCQrc1vBhwgylO9hcSzsj8/eHXC9Xfa3
p89eKzvuX/cnoI84zY2QjGmB9dSv7mzamWoGbhAbGI88U83IMZ24g55WQEZdUVNqANyHzPO6IwM2
fkXwXwFUaFh1pXDVQ44lWHY/AE5h2JG86ww9cDpbTvlOIfxYRRzUvPt5oix1KwczVeNDEiXI1Ka/
UKPTUa/JrO1FaS9Uzah+Ja2rqN1CMwaDPkDEd2yYK5aeGTP0NqYZVYSO6UXMoJzZG83A1orJ1ddV
R02uN1Mm/LLEd0Ntqj9vGCr19HHc3Rm4D2gYOC0mhelT7sqacrJYh2H/a9rvzJViHKOtKkliHgab
1G09P8FfnNz6sa+G3317fHtAiiK7J4lHUSb9qyjXGeW5Q8mmbpaM9fSfekNE5wgi6PSPtKOE6QDZ
eZpkaiTx9iyVm6n9YhN8HFjuEg/0cj4B9jJJTrotSgAemDpDG44REsfA4owBW5eFSEql0a/Hb+/t
Iekz1MBpHmja4Axji80uXjqMnomDAf77+CXThupjdSTjq4nu6jd6z5UQmTvW3/ZXcsf3Rfn9kdBE
52LcVO19KuYxg2+O5SjGYfPNe86u2sQcTeTn/XmWU/4Ev7VXIbO2w7ztCoPgEGqjVjTqyQgXjm5M
r4SGyhfUhjDwnInzB5Zae+DzMfVp7ebUY46W8y7UjpAon2unSUuDDQKpUVdddV0MPvkcJ8OiMztZ
Akt3BANhOrxPr/IJPbDnTTi043xCfW2kfdqMRWl17lPNl81jv1q4bCLOczpC7O+ZiMkPto7zjmEf
uIA4yZekLzXBqf1VABXtzp+i6Emnu3afpmnSZWe3lj2uaWR1Koy4VpKEpiHHqaiyAF1wRdF6l9iw
EmxMV72I0le0aYOYqotfpDSBNlb3Y9LQ26NpWXTZ8a7l7dE0fXoqrdtGIFXTIFuFMUQwtHtTrhG7
7o8vVDkkjDolESeFdWnL1mnckgua82ArDUvxNc2YKoeDfd1/+vWwvv5lD5lvt9ejM3rGkPegoSdJ
0/qgqchFaGzi6rve7XrJe5pmGi29fxJJGIAPy27lvssCV7OZ0tJdt04SCIOu7/pW1bFuKUUChzZ8
/2wFXpueOLppdeXQNCeuejpagY059isKcA5tv4OgU5z3+vDpBqhI8bOzWvnzmpZNVSi1SLAYludJ
wMD0wDXdapWdaVo+XI7cGAwAsWxfu1ZvAU1zFStmrIBgMYrn3+ArSnCtkoYB3AvpT0uYcfQDx6QN
3KZV0CbtXuQkm61DYIC66DCykbRuMIBhWsFxqVatmKZlGGVHvvsYG+gMnpONl/ZeErqINS0RKltu
z68dnFjyKhTgBKSrewChfoEifSSGuIDjfpQknp17I6LoyCiy8Vy0LRLgK7r0Nvd9/aNwpbEtoc4X
7bSpDHHhOsO4sYGPW4CviMpzq7qxt1EQK3ggQUEEovhwHboXzZ5FAiRL1tGDgiCjVJwjAkUrRyHL
2x+7ocdRDJwnH8XBRsF774EbPI44TGEYu1aqteRSPL7lPOcoADlKubn9KDIAUyBDCYg7oMGKQahL
0wqMoLkOWXMVA+BktGdlFvMCSSDS2dj/1uG4kKZ13WUL/xYv0bR8f2F+hnNpICmnWdVZImk8cVxd
IJuNdB6m+p0GX6Fd0olipcFXzMjZn8MABCwdbTMSLQnoL5Y1jLeaxVIdCrAi64bliUYsICvLjrFo
PWxN6xwXT0Y6pAYghrVlBw0okbRfJ/6SruJxR9Pe3B0gUKkJyWaRbZBaxSjdNRBvJJLvbWg3QVsm
gNCkj0yFa4ZnTjryjf8BB6ce48zB1tyu1IV9f2176SdjWBVAA3WGBNYDr+1nuYxy5A7cci1EHFUp
F1PKpwplQs+H+Tc+SlbnKMIRE/HAZSR3NXqAbOWTh7hW4WVj/D3YhpaliBclCYRzeeA0kSi2M2oH
DyYaN8nCPM8OWfwBa4pbuzdD3N/ApYFAsW0Eq4IYoE+4idNZVzkzbx/7acJWZaXFCvSawDWT4AXV
7RSgaz7DY5uq/Xy47J/wKWgwTxEjAXxdjeUTSV//uJ1T2h1/WWGzi7itPtdIZwkgi4e4TrsT4Csm
g+htj9DLsb/RxbCvcojQRg35KvWygo3qqTybhBp3/IrMGMyNqVt6QQTRJToc5JwRZMggNF9GARBR
YiwJNXiYReErd0bqAfoXtbjOvoei8ldp20Z4UZInB3A2TciBzvcDF7U4oETlGgIXpdV3X5TW5cbW
i0I7G/jDgJ0pW6Cs4+eKII4loaR7UokHEz3CBRErm/CAlUfG5jBhINNDLzlgqjwJTU7vBychvUlw
W4K+AsULN+SQ0a4Q8Skuvx3yFytaru/H2ewssrBxCumkLKeHfY5t+5KLapagG/UESFLB6ZPQ76D4
xGoFfCgkfZvOS9TgKzQrNI+xYy7++vl8ufnrB5c/Ft64xLfXqXoAcb0L0flCQlOeampWUgX2t93T
55CHtXsDd0FdYNlqfz68vOwvsSV97mkN9ELifgmN+BRQjgDOHFd9FEt0/+JHmcXf/u38/hDa986m
2ccbUHYI1SgRhgapvieJ0DuxHj8fbt7CeQjzArcaOfRAR6KXJYY0d2uzufH06zK8qFW8FhFeqYRT
36dKFFgyGxvVM4zKsBwM+SH1yKYHG/CVkXVdNjRroObTXLcccEjJrzGVEtzPwGWE8UwfbEFxxNMK
XMXTZ24Y1aOlBv9lrYrBO1euTBmfYAA5flNzyXkdYpSAGh2Xj7bp9l6Oxwst3+afP4OjGTY+YQH9
jSPHw6G7WU5FSaGF8ckoWwTr00bRGc2i3FN0ifZWRW9k/SPvIkjGdhIqcUGfyQRmOcf1HCsjUZhF
K+6qv0uFtw3lEujjxpaGg73DcCKmJ52XDLReK75b6zVbFbZrOFVG0JS03pBKc355KL0zIdu5U4Iw
iYGvGwDSgHCNqZhLF55omnyyHXqWUriB2jsRCiEKY9vnBJqURJeFZct7QEnMqBQbpdMAH9bxabHE
s7VOsN8jljVyuyU6TE7jR6tI1prJtJBmo/ppnafn7jsf2PrhmD15eD2dL3ngHXBpCs4Bloua7mqu
FFfSnKD2w2pzwxTQ5SjKa9OQ19jy+T0KN8nd9/eilmZufrxr6ZYllT6dNeswOs7WiV7Aia2iQvF9
zdcTWfAORscpY18Pp2ef5nWfLkVKxMKsTg2TqOLzm9hqUAMeeV1gKdrWQuQ0wH4hKkAw+S1MBYo7
Ntx1bF3huK5kUmz9QiuxJh5cFrhaphiSDOYw95kzVcA+SLglpviIfgaBLiuRlfs+KQJkiGZtFQMI
l9QTB5yaci9kKnGXfrUpxcdCv4AanOHMnmWWKKqNi9hnQ3VFc3jCuQAd53XCJL0q5Hfcn1592uaL
b6DwYMP/Ab4n+LwdoOUqzVVOey23Eg7RB5KPBy5jKmVXyoj3ZRRZQWo3o4posVwYrBVEjs/bcnbE
Rld/uD5dzsfjJx85/wCaO8m0IoGuVefLc1KjcXSHv7PM9lqGmkjAN0hMMpQqJ63IAiyMlneiAdvI
CS7YxpMAECEDNDPuCelYEikgxiMyMyxx+8v7zAxreBBkZriNQ75nZljFRwqAmWE1F8K4z9iMC4yb
k3XT43Tp2l0zroHT1QycJ2tmWVX7rJn/ATqduBhlK0cnPvBGnwPA5HUp8ldzGZyOBLipJWLAxlxp
5HfqXSIODZuUqYC4NGz7jYbjt1/ZN5GUxUAErpMZABg+W9yYZdj3OpFIJarMAZLBgFsjXRjIqFzO
iDt0/OskoEMTj0E3jZFqhLSeAIhdyyblcqOH77ZjB9bPk3MmgiEwLwyE7sjp1I0wGnLrSi5E0SqA
isRtOWM++Rui9rfODetkLtFMZDrBA+bvKslbd8CasVVlajqlBl+h3SIIiAS45JWpwQBcOstF65pB
MRzgmTg/BDdO5OF0zqoVuJ2ymDltbg0g54niXQ+a5HKhk8aSDpiDa3HCBNBe1Ib+7mkF1i6DJaOK
lcnddfnmaPc1QqOFsKSDbeqx8NwfpBI2psqi5O+b99zeHG31RVvzpdEei10VX3S7nJacMVuR39Hq
TbbriElhcs4ReNtfXvfNVk134NPmAmDaZeLe+dmzatxuCuJI746YsavWpku50rluGoMJ0+Y1g2tM
fxcaAHpF2d8y9f78fPBZl98CRPr98oRSn/Lrw9PHJaQ1HG77t2Z7UassN5ToOsvyh+fz00fozRll
+zUKjNAu9bJ7fUMDRS1pb+tNYUWn6j18OczX6CMzLYETl6h6hS/x53jaaMGDc5ENZI/MdfdlPofn
ZkvHl3C0h9PuC9hI7sAa9hTv9vX88Gn3FHolLEMHTi0NKCxDBtUQl8RlH5MVZ6TskBIVd6LKQ6VB
BefL28P149PbITa9Difyy51PT8cD6FlrSZt6HwZJxSK3w5sfvL5/mf956FD61MugCIuRLrvSBDZj
UuLCct9H31vCI+31cv44hXLp8wUsSCYchEKuxLdeZ7L58JNe4oyH88mrvQ8EC+DArmzSK2jcMJLF
6YwHL1gy+k0He8O4gjIDVcy7+bq7PAcZ5+XRx6d4LZ/h0rQFeu6JtCw8q6qz0nqdrf7D9WF3/XZ6
+nw5n2a+AhYcuabEacHHWfNrGQwRmk5eCMExsT3p4TSz5HlPX64PLwff3PgDzA6xZCa4j7kaUl8w
HyoRCsD9xLWvnrlqat6YWCDGsqbDfp0XMHp7rPri8Kl0OT5AAzpdN/t5fmGAUsfipElzX7a4bivo
UJjvKErzIbVf9o/boVNVDjcBzDXIiQ5/dZysWOeSPx131+v+HuJgp/J0RNn7x/Vz2DJYN4vI4C6M
t7v0wL9PmNE50NlvtXCJ54/gasCvUeZtjN67Q+NR53cwRcvSkcMidBpQBV9+3Z/2vklD7LgWYif4
MBKxqSgV/cSwSJ0LTXme5SOFgKxkSQht8QawZIoZ1z4JKNYYHXc3v1IAetvFTrmrYXUNf/x1/+0h
IdRrwLGRv2+Ccz4B7VqunaBV9icv1ldQWFNZ09Pu9GUXv7R7etofF5yHHz+Qf81+KTCBxb1nQq1W
mGyQzud7bsW1Z8r2BTsfp8PLIbKaFrakJQPgdCij9FlXwRSdN3idSfxwPNy+JZzdPr8dY77hjLfD
e7N7j6QtDr3zOY3kDYppmMV3u10On5LRnIaXzziHFoF0SpQNA1P5xWVWdL7sjh971OR+1vMN15/o
drjNH8/7+fC9W+bLmFlOuPnzpb2kk67U+c1S0Bo6mYf+Tvt/fOyO1/VZ+Z+BA5JGi7l0NxzwOBs9
l/3rfJdhiu56s/ObOn7dfZu5LuimJA2xcT0WEwcLK89c8aPlWQiwI7GWctX2W3Cfz2rh06+tPmMB
7bQt1LTiyP9zM1/+u4+Nfrx9Ao/L6rwCzagtsfKwDCR63r/sZnCAioEbGBDbv+/TDLRL8Iv5vu2x
IHTpTt++uiGvGnT0xBH3u2CdBy08dINvH1NNXAfP83tQFQIfPe4anCEiumo1tgROP+8vgce/zwDe
BZQmUPhhaVeA9NxP1FvIaRJPfKrXp1natFEhMhUTa8lzj5lWb/iREqs/oNHku76+H073TKGQZmKJ
/XR++Dj9ejp/PaVsmDR/ouYACU8A0YpjJGGPz7O6M//SGHIUNke7nuY44jILIvTOjDQ4E/SvoR3s
cxvXVljO67AqO97eApcsZZPfxHDCfha51yV5KOnWb5DREG9QkOAjoZvU5P7TZee5/RVQUCa+YCin
UtQZNTNCdn6myTVd28dhSaQAT1OUqxmyJf9A/SSS9frBpgiy8qDkFdXrCgjfZK6DIqPUglyNQw/S
iBjwQioZMa7toBPBzJb1LGPBNpw03BKpD0PUiIIAg0kWUWBl8vP+HjNUvHT3qfNW7US43pi9NLdd
Gm+eDtXRDIhs9344a1jZ7lW6Rb7vfgt/C5BkC3a8tDOMDOj6+fxxfPbrfd750Ta/Bf0D6B5TyZtT
s4E0+ebTx/Xb4kICxEOeenbVLGsc918aUeEoXIh4Gn2vUCL/gz4Xrsw/CaAHkKcdzvN/s544K85t
QNI/OqgAy6Sa3eUpGAczwQHcTRna+4NS2+KQNntNE1uWXCogzgTHJyMPWLRS8PTJXCO7qgwp3zNU
3oTc06DCnj8QLxKieDCJEFYSfQ4pwCEh6On44cPN6zAatEE72BJHNrV2vi7v5/rx8nIAWpqZSvyk
XtbeSRfn11yaeWJxA5lj+6yX1CVl/3xInD+pxKl+IuicDx19SFb6egp++2VitlNQAHefANkbMpAq
cJdkdGfHCWYCVrnSrhO8Qr57ft4/9+SQoR24cxbOZrEUdukvN3IkfZkVzvM6rStp59jssFTBz2kB
b/PteUF93IfAkLf3/P6AZMrI8uaGS9V45/MNaffKbEznFSv+ckOc/nJ4Tv6fT0kuAA1kLOgmnSaq
Z8HRfr4gXjWyvCpGP6Nt4DHy4f1R4Y8xpbqvhNhyXUJJ7+f3j/d0ZVefnXmKiQVdrmbGqVRJGhR1
h2piiFIbvaNL7dV1ho9c1ou7/W+zUjCzqaA5fzo/f/NO22DdzJLw9HxENz0S3d5jY0xkNrMCH6GK
NjyiL2KSyFXIJzHy7sMoT97xeHgLlHvb05403vf6DciYvDUvrOxASDdcOHkBgJR1icON7hsFxNGn
OSbFE0gKx5724/39fAkzxZ78WNr9rSO5hvJpy1JBuwRNGop9O5FZXjr8knS0oCj66NfyLnuq6ziW
+EnDtQj5J/q69jUqMqiLKPWz7RScxXdp45pVS94O1+v7/nj0amItlgFt5pfof+sEpc1izGFITLiu
fi+A98wYffTeTIVz6Wl38rcf6QAo6Ko0hVVptCQjyr9oL+TvonKpSgsv+dF8SfAs3r/sT4e9bxT0
tr99Pj8jAp9KPi3yXJuktPgtRRUEqOkVHRQmVV8vJFF7MYWElbH0jAXOhJFsRlN6bhpsOGn4WHo5
drRbdIAE+xe4PUotVZQGwvuMEoAI4lslpfSlb5XIps5e7KC5kaJeIfXqyDLfG+ijI+dZTR6AlQlG
hgOoY5Acx8lSFyBzKBJmqLwOKpYPYCPwStdbZ638epfeSdJ1SOZDwr3HYpSY0QwlgrmjD1snSnzY
gkQwmVvq7VYrMp/Ob/5KwwAVzLKF4vhtQGnAprd7vKwFL42EFbz6O5rysX6HtmqINhL0zlSGMMuO
mf3vvWH6vt/9Ck4zcqZFFPbBpPbq0QG5YSg+XOlHzErRKqqp0x+cauDmTeAIAmBGlcVfP4IktDFH
m0TJCizVx7+EvcTKS+D8MIYVFjGWGy3B2HcdSHviIvIqXnxSH6fETKi4f3g+7+O+Om4nOXFcKrwI
/x48e/qyL7Pq7kC7pZ7GvGy6xMhBF7JYZ5KAQq74cqby8dGoR9ZN1hm4saf9+y08TLBV6mrPLRuC
c+ZeI51mTgaEpgTHwxc6Ssz/cV0R8KiBe5W1jQDOQ03h0Eh1TGEUH6mKTvFWIkg8zMQpXNGSXdAc
677jnAB/xJlrAVGguWhDmszcESNSlzmUrmD3s+XWe3dWTtzj9UNrLjGI5AWaV29XlfLz7oqzA+Op
VJMpzJJsF/pTbexNb2q/HE6IT9BsyWz8bwMYKW3mPP/M2+90AnGYMv+cJuoAUarLi56I0+S7wyZ0
GI/PrTCm8s8220hFrp+hPQKsZXTY4AvyqZdQSJtRN3nP6+XwnBI6bjFA+vmwv/iXBfwpVnNeqpx2
ASw8MjxKh7pDxRDf7vT0+YyWMazXLbzkt937Q+pmBB6049zua/eqdW55zHfyHs9eyGMsgybabVxM
97JON7imSzGoEE/H8Hru0x1cJWOJJ+78FapSIxdGTLIFx3snxxm5LdNpB+P6PKP0HCPWKgS9eb6k
NyB5Jy5yvImMAXu7pJakMT0dD+/vS27BfQ5DKwT3EF8OIWAR8giXWFQvgKKqzHSSi0OGmgUOG1U7
r0SneZvgpANn4ZGQnbfe/YDa3x5C0flLMuW7OhXLgGK4J5p/h1OQ4meUMiK5FIR0jzMVhc15XT/l
5YBjZrXRB6ImSxWKMCXZu2KeZukerwOQOhktb0J3JbXxeICc9ogcwWlx4dZulz2Kz8giQOok7ztd
VAMcxbJEpffqSQrJtaTs7xexhsv3itly4OEMXB7MiiMvxQCeiBt88rJ4tQqXDK5+poAlrtsQdzTJ
1JiVmWjLfd4f3zFjdHLk/EDRvFz8rZ0kCluuQDw61/0tJKf5AP9p/gMw3nTpXqs0i5B2eq9pKkq/
Ya4M8GfJHSlCJox/n+FhwPQXp2RZ1uTKu174z0uwpQHNDIKN+uSMo6A13eMedYSCSDwruW6CuXtK
f1iic8hH7SoHVmpOtaanhaSRbnaaJVpdSKGT1HzODqmZyC+hFKWv2NEhnF7+Tzqn6iabJiItxCiw
p5tkkXh9QAypI9z5a4ySeAES6t+XTFG0GM1SGEsPyGJyLaOkzz676rQYQXfE22yZbZUs1SJIdrjG
rGGwQcFFW6OB2XOrGiJDgmNw6dIfk6MTsaYUyI6q74apqeqTmNXT+XidDbLQ1wqgZuIdtjGPZ9fn
VsRhHBSnpeo0ZENEek/egOtDzmsA641cweMxNrkPCaNedZoPBmyySsMZGRvVT0V49gn8mMEYW/r6
kl9i9eTeYYmTSbK19zTzKXA/pEozV9/T7FK/VM99bLkU1bCH+Z4v6OnQAtSsnRd+ketq7e+26X3I
wjOcJze1dJ55f84vP3SDna4yAKjycD4fYZ40TWXLk7o8cw6jrL1WPetGIXAR2HYn79nR7Ey1PolF
D1lza+LjeL/MovhyQw5nKzQnTMLhYhbTynHRRRLlJtdvve0Op75NU9eyqiL39SHHIS40BRYcyHCZ
6XVmuOfK3twHpmMV/AI3d58L19EgqS3zmC97P1oktJ7JgW9AVYqzKOM1AZE68slTi2JUu6aBajQU
aiQNhFFP3T3hBCu5vNNQuJ6M47uyPS3NfMo5xvvrbb7mmOl+fvUyGaBHlnmrgsjgXmhOsP6gVSPr
Js1aEi4modbvJn5iIdCSjnYqIclsiF68xdsPLt9toutBy9tdb3VBUypier7svj789umt8+QcScj0
WpVLfSFi7O367XT7vL8e4spLPG75YTIR5mf9aff8MD+fWVedLfD2t6ggF2sN7GbZ993H1T/068cb
Woz0JfAxQLFUGW52Gd0CHXcHCWyFxEnFL7aeMmaefTkf4IGJ31+GziuNI4d1ABuzhotDb5bBoVJH
kyyi1tpYJ3iIdpdvD/svUOQ7kh4gQmQj9fnZrLhP07h9RTvYIMnLD7W2/k5jmCWWC369+KkZIbf+
NC82G4HvMO2KGEfELzsbHj69f7/4xSK7QEmwjsTGiDPjf/7t3//yZ/++/hSZRgB9nuns09nrotfL
Uxxf1SojlMMSVTLLlSwnPn/6+9PDctzZGDnN7PAb2B+htNDmbOmSmlZYSnf9smAVQmZekAsvyRcR
HMslL7tPh6eHf379e8i0/ufX09/BdZLsiWBQTolJ+9vzLPHzzg/2C+LrCo35kS3Wefu2O83c+eH6
eYfJgGiTQoVemGrDpD8+JT79cjm/JWWu1QAvnm7kgno+6BwjpZnKrrOmEXKxlmaBYKfkBdAS8RJl
AFGizJBfR3v6qtQUG7kdTt8e3s6n8zImD/m/aExBhKkVKXI0H+TXbw+3b+/7lPz48LLf+Sp7tDtZ
GD9Lk//d2+H4LbzCsMtZeQhdLj59a9fTR2Qp3rZ8DfvwV/p88H4tRFnElKKJGh3COMRki+B3BhQy
cb7DtWOk7yc1v2xfNQpQZolc8nNPl05qXdIVYGOu3FhyEgRu7YNfn85Hz13nV+n9SMAadkVNKukM
EtuoXmZxFNosoAIfktxCTPIUXYxFkgHu3/b7f+4e/vNyXp+Rz228HJ583v/fP6431AcnKaupwFqs
oYhPh+fDw8vOx0BDrxDvK2/35ZKraRoX8l5Bl1hk50LA+Qeub9NvqD9YRP1UFrHViA8tE71+OWuv
J8wex3IHkeUksLjG32Zq/0toTgeWoVZgJIiwkL+b2SxZa3r3T2gRIshye4brt+tt//Y/zkhEj2wa
8Uor14/LbI744Mr77gCs/dFxfuPb593hIfN2bxN0W5bG5Qyj0gQ5cYmsN1PfLRfGvsCTEmd0CE9a
kfoc/Pj+ftz/EnzjSRVBhZSknrvwIl12QNEg1dFF21fAbYgNHKBT19ZZIp6fl44Mv51mVMx3/P7w
vI8/BjqTWXUmzx3HZLL4WOw+zvqI0dnLzCBmdTOIqEY3x6jEZsKZvMydJpVTvJ8+hxKQtNfQgyLE
jsByjuP62y2BFQjNjN7un39N4QvfrcaHYEPgOWjnYJkqJyxplp6lR4Mu2tleQdxFm4YEWkBSrSOm
NxmWECshkidzCT34HufY/hzLTFJFPADRMffQbp0Vd6O4GDM4G1iqLD9J7aS8keDTFQ6nwD2SU2Pp
l9hj05ptJ4BQj3tTmKGnsATRA8hLV6XhNlsc4d8fz6dX/7+/tfJxwitcjEnj+/itnUVmQ+0hlYSG
rJPg32pxobiOyK95Ptq4pghEPvYfMZj9eXf97+VH/6tR4xqXywaV101Gy24rxB9mg/Tj+Zx+1Mpd
iotKYqWZZDivFYzxMb0c5zvYr5OzfU2In5i1v+xbPpG49LAu7XPVffju/5czs9bVYo1PChQek4Ls
nb3tJjxx+ZHsfIqRqomWDVVLHnrrObKef7AzKga63oLg79gi6aQjvIUw/0qz00LK6bLe/HuwkqGb
s3GLrZXu2Zml60UJbsBh4x/b67mBnnSI503CMDhaAlSw/MOfZ/5wAGJwrFwHyeT3MmJWO3enB99F
6akVt49r5BOG4HGU5jPffZ/FywzuoWdMtb0scRVKFMEL5P7v6sOYV4nekHikp1k1bfo642qZHpYI
ZMr9qNwrKazwvrtcUfiG5CB5mvDkmvpQfbweTnHRNaN1id98e4C9B1M1/NLJa20zOyuaRx81e/k4
xTA0at+VPNBpEU8OMtkkwdSfzRqvinkhcexuZxTcSjUX3f/2tH9Pwzh3z80hF3LNKN80/fz7NVzq
9eDbGYPtZBvJZ1iJ8lxxbGXLEyXXRImlM+DaSHotOHraXT75KsVAUr4f/BEcRJRL2bVOLlLArKOc
9l/nX2e7ABmQk+S2dDmfb0uG8czv36LrwVeN3/ZdGso9v4wMGceGItkLreS/uwJMZbvWM2e3Rie/
xFlQ8EwjueQ8HGG9qLCNWEAYXDGxsPByxZ3MFNeT7vbZB34j5R1nygNYUQztPB+uIciaHi34em5h
6BmJFcyJvHJDjwVWI3fuFS+RMnZS0ubXw/Orr/30Vv719i2EJ5sNj+VaTFq0Dlz6Myyi/n03m0GB
wYU/GjMq1ZguGdilykLFC/tU8RoaIK2BpWvojRsD1ku8GqyYNTId4qeJLMPOgts3eOjSiRf1CVgj
cdWsQ/nHPdqcdDm/m9hzr2FWRXhVKkrJ7bKeMcYHzrNc8LY6WIcIdRf8tpHopZFyBGDUUe9yKCcW
gMTK+7IM0CNqN+sJ15hmANRLRQzaIIm3HqWg0wfggDFvJF9AmDc62/NJgyt5cGmo3S04pd93T7DD
4UR2JVfFPLjI4s1/8cFnnwHx8gLUnnmhfHNeA0qhtdUxE9qFA+isXISWQqn/z+7a6HYfgTIJBz4y
kr23rKsISDT9OLolZQyE8gaYWRHhh1oVIp8GnsUITGksKMKJyIO1mDwbl5kWZnTPVvwaYEhpWbvL
PvTl/HRpk5rI5/P3uyCmver7cXcAyppQNb5sb8VAPOChC80xiuv+yQvWgIk2rCRMYgpbSv1zwrNE
mvAwll+Nb+Wvv/xhbZL9k++RHb3iMacJLJZp1nuLR0nHMybd4Pr2/nD99vapUXMWUeHK24q0/+v5
dt5fDg+xwX7k7DO+3wJrnlWZZo1SXJM2LlWZwsGNwbBVXNQU2FuoYOkCvfTTa3vC4+1l4vS+5GS7
+SzRj2M6bTrqNZz1uvd1DLOB8d7MMom7IyxfBWVdp0zwtNzimj7tvvjg0ZqK511Xsec62HQmHBlG
MAla0pln+8UaoKuPmEFjSprSgeHWDk6z+fp02629MWOy4DGFSb6gKycuFueFQRa9i5/u8NZ/W7Z6
W0kA7r/sTrvXWRY8LJE3sJPMHl3KNpmXMMZZ25hyFd8T+XRITiax7eeYxOdJth1aiAfIlB9cjUvG
3G+g2iMCDnWv37F40PRawNlH7uyYTB6A4id1/ZCXuoxL8D0d3nwGhw9wAcQSZqCCYZPbGKausIlC
Wh2F4laoAyD4Ner8+Ni+dSlOBSuJDZJSPkl2hiUGOhs25yKXatb92gtr4hvyLlmRSjvjAJCPy/Uc
WOmn/WxehBCPH3v9cTunTPzu+oYoDv5bIuWyVet/15IZF8n4cGWvcoKH71lXk0v3LmSxtEGMVkiA
jtwlpQEKsBbRzoIb2ImyLjNU2YUXGpMPfJvC99h7Om/Zk//HNTaBPz3dPnoeIqJ02KDHJ6Pn9yKE
vCTPzpcxBFGr/66VyM5McBLkMdnkrLtbSWgB48jGo64+lV19zRsDa2myVtFpp9xiCHTdrv7+zmCx
TKJS6hzyrRaLWwvNONZCGbAo1cF1ZmzVomGEzz8+ztDPEtFXeJhDLh63YOB0oHdW3FyWBUqHzFFZ
XMU6LMHfyZVeClBQdJZvaghd6eSGeexiztvdDM8QoeX5s1jiu3eQInjwirD6YSShkPD4Fhbt49mE
RwGTh2hPOgzs0Pkpz/v7rz8/XD9CZ9OXWQdcfgoEmq6vWi0NyQ6ntBsQBYxrEFERh61s9oSmd8dz
US1bZi2brJEHW+ZBPGBTgtdhyYKRXZ2XYz50z0lCT2KtHKOYnzd39PzUV9egINZAzK7g1lL1Um+H
0+Ht4w1a3/M6spZMPtE5uuvXmTsBMpStHnwurnc9tYbu+g4OgoxWInOOQ93lP/eX88Pl49QGVoJz
+r6d/+lnKxszmcZ04wAsHOddrbfuwNbJAjnFcPn6NDgnwNfHEjg53HzVwdfd0UsJiDY6rCajrd68
BptX3Nyc8vsSfL+a5MNtH3ydTFMLOU2K3T64PDK+hOC+XgAcQJIpXMOKwN3T4VnFCAiAFYZMA1nr
IsrDg6tX1XQyw4ArAE4mt4jcZpmAvxy83fmAtjCV18ejD2xCktE2uXLm8+G3w/6hWCaN3bY//MYG
AM0g2eT52RZtQ7A5Gx7lTYiBS0X1D6wJobkKNz/KvgnhuB6isw3Xhhi5RB3PcpoQlktG9HTehBBc
7Zd/m00IxX9DtSHkJulsS03vl/Pt7DOrAFGSgJsvv07dsdeoaLKsWv6Z+DTJDKrcfX2WkN+W0V0+
JAj2ILn5U/XDAC9LDuWcSLsKhbePW5pFA96VmMrwHP8wJ/D9qZjrlMiwZC6Ar5JBeIS5bBjzDmzA
ljPPRnaFESxAJKPXzfTiZPi4nQ6/BpCfziefJ+fVnvBnIR7/9FtwM3r8ph/9YB9/fH4Oc1Af/+M9
fjn/3Q/y8W+f94+/fHxarIrH8zthWb+kf/Sjevyb/KGpBajgUSGzIVP96QoufxCPf2te+GxPqBLh
ugQPX9ftrw/VoEbDfF2Ar4tSBxo3Xxc/SPD1oRAjidjKr0vwdVkqMdXZ0b6Hkso3SNcY6ZnECHcv
kT6BK6+YRPV1+G2qPJDEcAosALDisiUo8NgGluxsvfKyEalVtyVqnCtMaqb3dfmDBV+fOLZCTw7o
VOhCW1HbCwPnJiKFjFgm55b43GR2bG77VZIqeiP4gQecG4A2BZ/Y/G3E2lhZQoHBhQl2pGp534BY
hYBYn78NTi1Yy6zEOboyC59o2DriiqbkLpq5MvT1qXwohvk6unF2IGr5dcCeBsEZJ+XXEbjlZouW
4IC/DbqQR4sqGcBFENhRpPPSWswfiAIPPChbaTiUhYrOixhG15aXy9cRfgYnOfVwXSAwEwBuZWm3
mRocyz1riwndRtTgWF6bkbMayell7/QTZ/bXC4C34di51CX60N2L8u4Nc37wdcM6XSjpTIB0pjY/
FB0ZNIyVl4ynO3ByJ9rSN2MeLTCWskBstm/B9m0xsFZvgQ0ANm2WkreOkDfABfCTIfmSGzmUMY9I
duBmXpdPFoBbDS8OanwDyT4N7GpiNw9Q5yr1QbELgMtzGvI7fPax1AG2Ny+wMIvFC/DrgOJJdikZ
G1TyGnRx1b1PDNlCPcCZUhYODLMCZzdTX1TB71vXtnIEtM6MhXwyHR0xGwv33tOZrWlbKqJvqVhV
5NbLpSRhhhfi8Q+H0+7y7fEv51efdLX1LPj/X//2x7/+cf0Xq6IS/gUStt5MkIrt/Z3hm2eI0FPZ
Q0pX0EBTiPDsgK8KHn3flj7BYbt73YbWVTdqU0HjvdM+GWNBfmTvCPOOa9Sc4dGxBddCobp0hPaq
vlpvDw6+TtqgVKo/+TraveSqh4uvA7TpapiN474OLp2OuBsLJWH9OiIZuymbrAkOkQy5t5LhrNDo
5MOG4FZ+MfO6lVX8zPIC2X+NdLrBUIjhBR5fLCnjrcyGCI+RQ0um+a9jwjCKaw9TwYPd0970sn4U
Er5HzXZ+z6CdD0/cmIwK7QhxA9fDtEA7oGgzcn2di72Db9MmgtzJe+JHIwEie+KH1shvOJHs8wIj
gPCTPV5Amo+xBItfs0GcRPa4oN2GGldmIB9/Op+i+4JoDpkXdC/Vlc2q6da6r5i0pahMZ4HfkFVc
/xGyYXATpHsMGdixwPaowLomDXbvwZmmJO5SgBPciDgCC7DlBq6/BNkzgtVNqr+DyVvdVLnueO+k
h139Zu7gdNZyfYkLaAugJ65ZJME3ojDV5JLLlw348rhpXpwe6/T4p3987I6H27etij8lX2T4F9ft
Q/Z//6MDZrEkoe7QxibvOsBabFvKKmmKEGj69AQ+XVnkYwkLvkp8u8E1XG1aY++hFK7lhpnusGcl
CQCRPBECrvHXRcuaDuDmB4TuYeOVLmHBtkmiTOU/mpItDPasW3GI6Q7XkSSRaRLLJ9sGn67TozgC
ReCmiNapoSYVgDFROi6IvEnErcF3KyKZ6u8ibI8t53Amb4TtsiK/JhIFj2xa/o4Ei76r4HcdJM4q
CXHDR9CjwNzAgeCeJBlwVTx2usMPL2nSg+W2jSjTddgIZmLDCFlBJwAjSeZApZWnZ4UQrrh8VXJq
CxAuIIE5kOAiSUrU4vlfZKQ/rU+i8X3+bkAc6scfR3ijpkzkLbiz7jN3PbSPF78N7sSogtUpUX8b
UwTJxK0SE5ZvAz3AVKFiw3wbbF2NrTh3AO9JZK3bb0F3qFGPXOp1+WkEruDOe+9Ii5ZjP4ADajZD
WwuJ1wUQZmQrHBKAwUVr1xbl2nP4NqRscxzdEWnacNmEKyy4H1UKcDkxhInAqwyKDWGiA1tIGhYe
eOKy6untAuXBaMhFeuqWmrZhg4VPGson/3jeXx9P59vjvskwDWBaXmBaOrilFiSmjeAIW87M07aE
bSE4wmpuXBb5LrQyi+EfZgs+IgPXDqQZsC2yFwKwAZCSm/NAPwuARdUXv0KXAKcdWo7PANkx6OlI
6CqMFcAVgHSt+En+MAJnh3OV4OiSZcthlOgL3bEq3BB62NwUIk7Xil8swBoAT6Xbb6oPrfGhDTcC
rnwY6K7ZwVDl1xG4bnmdArgDxzYt/0n+MCKVqoW/q4+NrmvYDChZGWbMzr6DU8q2uyNscJzaiJV9
hkW8psGBOZbgLSdP/LRpuRHTpwFeqStQVi9YQvs7fnpohUzSp9GRVfv5yrbHIsASTx4Ha+CRXQmr
mSODJ+DYobRk2+jTA8S2+QF915SR8goWQNpmkCN9FV2SLQRpfdqWMRiJg52sTBCNTju2BXjfT0zn
XHN02bJD47YdfMk9aWrlZkhP+WkAO4q2tiXbvo4IW2lqqt42ZrD1MIDNtgHsWL1kVcMiDtIMF013
hA+LSX7MtnvyrI5G2PoxI9iRm/5LTq3BqZuB9umOSDedfMnddU8JIHEn72nxRtcaO1SPP16vh9eT
b9DCJB35dK5fQttP8u9yZFEhN2KwZEmPqNDEh8SeVMcnF+Fl2ShaVvAaQ9O+BaGvpKjgW2IngucO
DS40kuU2j+BJhbxbO3kVm0fQI1epn6HRuUWJdcNtXAF4XXYBtDnzxGfZ/eT7Nn6cnhs0EUlStCtv
AloWf7xNjZmKmwlLmHYSaHDzLO45m/oYq2qFdD1jc4W1LNNyKM7Mf2qvIGV5CrU5hW7nQ4ZTEDyk
phF2s4YY2kVUicbyQQYGFfoHi69j9VLYqv8KXQPULMaj2PooZnuUdkJ4QOiSlh17W+eWm3QN2S6k
C/sY6BoqtVSs1hjb+dVhDUfW8IQmtObPAshrKYO0qSFljVHV5h8B3hDSiN1cNH8OgIsl0dyW453p
JmSrwCBsYqmNsKmPXH0d+AhDJqstJ8pvVIEXRr6v4uCPLQoEWEE6Rcgy4GDa7KJpBIQ96GoPW3Ka
Os9rItcgGTzE5GWwBUdoIbgRpdhehBjaC4jMqQJPNzy/HQG/Vb3nneQKeBJ0jdhRd8v3HaYIaTXG
ZboNDW5DkIcVfpn4hwWY3SgqqhIDdxLEtqXNa3iHAiPBOlRhHEHnyKNTd65VDeQgIjfy2TxSCwQp
EcW5kWp1EAPOQTglaTO5oSyEC20rbslcqulwfUXWoD0Na2GMKEMN5FJ8GE9oyesVAKFEKwg07ngh
CPjmNPVfmhBYOVGic6/pqQGMLrVCARn+anXjwQMKtVRFGni9QncYsKT7CK20DK/fIFWNaFmWo9LE
NcA2xrwE6XZbqQSIjVsiigSrcJoO01EbDUtwmg1aQ1CtoqlvCqDnSfpaYyNTy9EWVJ1HXYo0zVMF
wIW05TkMrzcDYWQqHa+lvANUTIQ048BgzTMuII20rFXFgec5gAmLsdT0Bo7nCMhzKGmRWcMbhgEQ
Og2lxmi5ZwoJfJiKZzpNPMNBcpmcQ4XeoENDDExADEyleTrwBwGEQQRJUA8ky8ChLJJEuK/DfTkt
BelbQ81+FS+dHRDOxE62DN8LCgLQG7fmqeX3AOib+gsca0nEOwVOi8Fiiy6RN5Bl5ImwBpH+oSOT
xUivY+R1FNlZg5ojI3ejGtXMxyVcZVgKXmsERKF6Wl/ynoAnQuh7GQu5laeAY9kNMgf+GEjzpBKV
zkPY+ArARsaNPGz4LJCh60p3lmkQuAQELjHLUe0IYTRTh56tnWQZuFNF9WfSn7zWkgC3GLGFKFGJ
d5SF1BAQYa4Hf6XooVZ2quV4HrABjOzrBaKzCSV07cdq+NMAzyJOHDIwbqM5Ay+UoCpOGDRvG7QJ
jjIQi1sZXipPHd1gdHcYqkDxNUPpCbK8+o2oe+NF0Q27DDxTQR0YYzBptt4gwHmHrvNddJybSorK
GBp4fgUc+MSn1UBmBw9irDchOE4B9Aqi6SFDBjBd4hts4UF37EqpSp1g2t4lUGs27gY18aoRwCNl
udGZpfg3DriE6FqmuoNKSlKSCcdo1OEhKiW6J0UT6wdvg6rMwaemWJc5uBHicG4YUpHXoYCOrvUS
yfM6wGmKUIpsyDDRsWJIgGsZU8YyK3AWobBFF72cwOdhbM3tBt5OBxKIekphfAsglHJdOnx1i1AF
sGG7VkjH2TpOPSPEdhiOnnoWXTJOwWMdqEgPTVVZWQoeqx5LhtGISIA9qLH244/cUwWPnYb5Ytt/
VuMFmqKrjRjFiSDALSxV8wx3iOSwAJLU2ooyJSsIASLsHfFf2XFuDvQkA6ewyq51Kzq6ZlT9wQJ2
7IUzkpGOOOeEHYuqoyW6OzR32QmEU6+gDwQLyxIW4BNWFbbxRgwJeIbBVgFH4XjPEeAzxA4L2jaj
2IDIM2G3rDkrO5FrY3o+o0QJQGxMtqYmzd0C2IXdhJQaLh/kHJAVl9KNWCOgaZpMYCJR8bYL4re6
lDysFw+cg8qdljfSdGiK5Ow01N1FJUFCWFakIRpRKcDtSCQmMn7dUPOAEUWEaEOUxyXAUYYqFMPk
Z4AbIakyLevFdvR+qp0Nlnf5TB3CGrtKke0Y9kSZaEe1hg5tTa6ruIuO4k6sIKQWAUls1L1uH+Qg
qOxazSu74EqKJ9JwSNpOVIpy4HiUlkvSAAI3pRCx/FGAdkR0ihaRT50lJtlJo5JdXwW5kqDZMA8V
CHPKKVh3e7IbgCSaZM+MUj1LzI29iJTrqFa2jjxI/joB4xU0NS+UZI78ZQDthjzThiSLiirAhVT9
lx4WAe6n2uPRSKgCl6p1L9ipOkyPxrQMfyOy886JDCLjazdkAVagWnuc1Cl5axDQhRa1z76RbQjQ
Sb2zfJqI/KEjAoTs2rWyE38eOlGtJRsKUKc2BYFzVtDYearOljHbieMWgGU53WPcpqN9E+Jm2c0S
mwN4UBuPoOMXAZxb2r5JOXbUb2oStuIwAgshQXOpoinRcP0AQUa0iyW1nyMLoO8RY4Q1KxMuUG61
6BlVC4GDe7V9hqE7uCCpxVEWDfyVAGVtGrBQTwcBGrga73EWQ+15mro5SB3SUjRA18rcMR2upaa+
rYyzPFwpijZSueP6Eaq2ATRPm+AQTmNnNQ48E0EY8lGFGXj1BuyAnIIta0lRECCApg4ak7oLxDGN
o8DXhaI5pg5hNHKTgQAgGSKNyLPrrOA6RUI4PCiGXpxV/YDdaFb0nFCqU3xgp7tS+xQKGVDVKErB
RtgB5Xw6nM6QbHQUdrgj81R3lBKpK221YYghPiGrNz7ykUqUNyr76SFj5527sZ+7LzsSjKRENIo6
XCcURKMPobeNGBtKFsBn5WxoqKuAtqjoaOXd6w7PklOpLApeNwI3Yja32tAVgY4mNy7Oho6GXLXD
RiVY6i/V43+er7eXw2/MYEK/evrbxz/uny77oqh3rdBUsNOxry+eFj+tYNie6tRphwUWpSZoAaa8
TwUHbQXwBQGCqa2JXLvNM+P3bV7Acx1hxOb7AFwT8JrlKtgkO4KT08fAu6m330GfyguEDDhdbV/h
7Yvq9KQXQ6/eLS5A8F8HulWnIUM8ACEgEzpXaQYD6ALlukBg0Y75PgJ35ABDmT6Rv48OoAkFVhHy
vAB4QktOqGDsTgW7tMcbIN/Xsiw/VbBdeAQn56+TzBRszR/BVfV8h2kDDp6vpme3PDjavCSXpxIb
XvjfjPaFx/35BHicgDTm+yIoMhWj6iar0nCGdhceRUYAkInAFFgBYFP2HNElsMDtTpQqO60YWYJr
uHEy9qDqEa26o0BUPfHBlsCd9h2KTLSoWtOkc0t8Yc3RBao7/EWRSR5kMnu5dXRlojX9RXVHxygz
tNrb5PsGWyeTY6rmkqozMipuXbb6teSvg0sjA1SqASzqjukvio4MUuyloa2rspfXFhhRW9UVaEvp
AOd0VARzZRp/eSq/TKY1uMc/HG5fD9f94y+fDy9MzxWXusD/ZT//7bX4Nyt7c+vh2y3KNGnWFR56
ZjLujnvTdEpJ2Zwof73dDUo71xobkME1AK+IzpTgkEtp0lcpsEpRnxwSnbYKfhsETuPWdauxYwY3
AJwwd+dH1m9ODr5NWjOFJkXcpY3g21OLR7o7eKS25ZtRkvk6wLuTrbkcDs/H0mZsyRV3x1QxTdqH
hR5e3IVLsG/V0iPcHUJR26HF41zqp4+J3bamCbmVv6KzuxJcMqhDV27LFqgT83UEXjVunTbEDngE
6arlGa6RG2CA9bHs3VqjzXS4I2nCWM1gyudG7K2pEGRwRDJjq/Gsu0Mh0LbZhC3TuwObH1vdzNwd
c/C0rebocWdH/FFsev0totXz9Vly/tfJd6XaPz/+fHj9fKvkLJGhqvu0DenwW01EWcDhNU/NLqEB
vMcZSJPRqvFs3jzobDg0e/zlzQMqmWz/66DnHWnpXPXszOCgmyTpylxZGnnzAHXTHWcHPVZJD9mq
I3vePOgOS5r+BnBdgiO+4tpal+qyJSOAJFN9xkBaQ2/UB9XRPYwghqUpeiwvwGjjQzmlUTL3BeTI
BFiS6uo9Zhh71II0PkO6S3MvpSPBjTBtrUt15JgR+cp8aN9M9Y1j1WdSbUGk+uKftKeOPkOGwSFq
H9uCSHXEvxGq1Ro7XxrA+iD6TxxxCFM01VRDfXJsY5Bm5uHaHIN3xN50W+1SfUWddpAfKhkaW2T/
MkvQjgkqITvy4k7QaR62Ep8SSt8ATsc9jNXDkFCARfChNQXFdWIYAZwMxqmaCufNW3D2oTVXx3V6
vsavk7FRtV4uIUOMZ5fl5g2zeQTuyukg1dnhFBVBJm1sLBIJhWcEVz2iEWBWl1DVbPnNrcMZeIKM
GKtGfeTNO7B50ZoR7qDXPgKTsT2qsgQlVFriyXWJd8VsHYFPkGQ6Q4MEHR4ottfWGXMiyACtjeYi
u5NhhNxOk9qcHbEKgnm9xbxGA14EGcITxqdWeEe7FpBDARU77npsTZZxMMYZd10NbOSeGeLNojWf
Km99BF+XrVGT6boVvm5bTHqTHLEhWp0gazcdHkHHASXTZpGf5vHf5396eD8enna3w5f91r9rfAx/
f3miTZNNR1kK+okl/aCrQlPTsagC/GiLbtQ0c8YkbQtATwS6LCgxHWswfjx3lPae4XH7bYHaiC8K
i9n0FjAduyaAu9wPO6SsSmbzoB32qApwko69bN6ArecO6JukJ9PRNOPXyQKxnSS3gAML5C7oVXa+
6RhHETzT3aZw0HSU1Yj9fPdVkZvpKOrx+6SZuSkrX0zHhxPhcwv5Te8Z03GExP1bcoOOucGmeIgE
QJqplwm+pmPaxq9n9FcZxqbjioinn8pW7mazdYC6iaCuTnMzHQdY3PxEcB+yaRSzAKIdQrtme3rd
qqSL2yfAZQGC6dho8duyZDrc2dG7zTyrrnQyHSMtfn7A/BqJiurgjnmw6OCKcBxZFsGYjuMyfp9e
e9Vf2XT8CnEHpnftkGqmzDL8VtwWHHx72nL7Rbh7//T1tr8crr8S2Y3jHCGlxco6oYy+AwFPFBZw
NKVGlyk1phPaiwuQHXiFlWamm06gKB6B5uRVnfIMDNbE7+ecuJjUVQL3EroM2b63D4RyzPnB9+1Y
JpTZ+vs4I9CQhCqvfclCCuGwRfw+SejavikB1K8APhLs65iVXx8A5wQamtK44cTN8GqEJfmEMVN5
YG4PkL/RdTqg2BzegcOT78cxLrL+Ps5nNOT1xFJNu/k+eny2TkflLh8Rn+ogEKhwcQf0BjZKZDwA
ePwjffyiTAg1nZyGeABC/p6TCGeZBRD3MO2MXgPzGuL5XUX+RjLfB+/HDTUFOOYKAQ1YUR9AMm8A
LGAIDdSdhkwn1B4XIDm13kcmNHcHiAXVSbmGo4IJIFHVPEQzR0A4oInRVbGB6aRaxCPkl1i168tS
FFCho3xoLHvqGJg6GcEzApd5TqtmIB9/Oe6un4laED0wIEHL2NYgR9PxkwZwktAYgssjAw5iADQX
s/SYmY7HLICrKuVmu3kYxScpjRx4k51FxJXJYWrYADcqgiN0/rSPTxju4CCxjaYkuiK5zEAPbwSe
WkPkTCcgErE2lXdWgYPrkro1utfcMeVQyyraJbcYR8Sim1Ft0/FzRnBRRPoYlINsFaNbuWGm42mM
J59aMzxNJx4Qt97MQTWdYEa8cNsKTBvol44nFxDrupNCoZsxdXPHTE4tHeRuMEldkyT1KvtjAQYv
1FRJkJLBOeJsqqT1sT43jqirAWK9l/MjbWueqLljVKRWopX0azphwwhuymm3hgFHXy/nRdeY72UT
KFnk7aotyQBgM/QfKqA4kiTPswmcOSObA2xNJxwSv242JLtOXBwe/3A47S7f1sTx7ZjOwesuf/3j
Nkof/6bnpRuyp8mbyY7UXg4d88rDS+Im9O4m2sJg6Fg38fvEw7zprzF0nBNxB3TQZz2Ma+j4B+Ie
TBGgoM1OBjxtU46Vh5bdvASbz/B1M+6hY9vErZPDx06NE7cD4KocBFnBls4BsgfgZhZDtcJmD50o
gSRxEmdaWAA+v0GVESbJ4UCB72efpTcT6LDXoeNgi9+fut+HQaZBExKu2yUMHR9VPIGuvfWGWwHh
gAy8nVpnAI7jITMCZ1t3iOiwCjJuGZHANDSUA3vdBl5hDKqSBtnvI04wtQKFBB7hX9ThEpMn7w7z
5v/jZ5bH91NSpRpao68jfMcCkDSltUznJd9vK2WSqIOVgCTwGsCbVg1chEdbH1u2z3J0aAJIkmhY
abJk6wpsXbcKPAi8AfC2pVES+BHAd66uo8lLkmJa1eWQ7wP8SVnib9x8X2P861bFKvm+BN9Xd5wf
wJPc5CoVb/0+MiikcK1UUXJ+hH+L6bej1McJ06whR+DR0xtaWeEEHuFvxE+3o1tLUZbqaMHdvwP7
r7K7LYd/tH/CegxDvx1fVxxrke9fTpSny8f/02Dq2LsQ202h9kRDx8EQcrZJT9B6BMvQMZYDfN0p
3XDwBnxf1bNS2RMosIIom/m4Cl7iIdsDaWdXt2AeOj65+H3TbMA5tJ1y8dPk+nyEWFiz2bzGm3d1
9x67WUGh7lIDGRJSD+YbOpZrJEFRdgNk0Y++L+rOP5JbARDAqEBb26HjSY9nkM1Gl0PHlR5JoOq3
NnG3iHBgy0b3ioNHGBibM1qGji8/7l83WxAOHZd4hJ/ac3GHjt8oLkAeQgxtbclIYhTq5lyvoeNi
jjtwYNrB0HEgxRXGTQvzlc3rx5/Ob287hs1r3/+tKTlG2fLmecCeyu6mTaVkDQ2k3liVwIkCGn22
6TdeP4uOLMrwCjGAHv/zcnjzjjCm95XPvP2PT3/fP90e/3w63A674+Gfe4Ln+a9/BMa3tFVuLaFg
DwrzA6Voei4iLHA7SZIcOJQWd4RFm1bA6eWhNfKXyLFpa3tYBGla2bTpqwhXrswFHevzou9m74LP
prG2/i7CFclIW1sSLYQ1P+8/P+9Pt8PLYX95/Hn/sr/sT097Qj2o8Wf0f7Ut/wSMDkacZzG5yZLN
2VCQ9W+X88f74fTK8JD5X3Q6odBy1soCS8AWAOum+euBAQshVZkekir+6bOAjZDa6aqKKAAjSNfk
e+mzoD1Su5ZzAQZ9fkhNYdU5ZAEGHWdorXmqdltpYGacl8vu28rbrgVvC/wYGECTacU2EiwwXqbK
eNY1LLgIWr9uKsoJsMBfRCocYzFaDQtkyNTs3ZNggbE7yab0irCI3puhvwCLICsTX5G7j+2Abp8P
18f/tf/29Xx5Jlcv2vw2XoFrX72AWxqbkesAqRAixmbxfoJFOzZtJIq2TIuwY/viYQcZOVY9f0jH
pnGWCMfdbdY2dsdt7G1c2zVdr/Ml7U5bBj2mM3cKRq0r6h4J5xk7vvsAbkjB6FDwnjHiDRSSOVJO
JQqiT7CNfJoAPMqyCm2qgUEZ2Di0KtjGjr88njnXevrwr1EMykAdl7FF4Z6svq7QXK54ZaJcwNZH
B7DOlCW2YoNzCYtFR1PW722+DQ7uqhLbzcFlp/rP9e4c1PeOGWkhl2pisA5rbO24Kb/bYg6cftRl
ia9jT4/QJ+DpFWoSHE9gy7e6eW8A1rmi8FJJ9uNg9zbfXZVlMXZiZPHRmM6Txcg3pOy0zICjbw4t
MJVsckv36OpV2VFAscgDnNKaEvuaYVho86LcPH95iOPoDu0DAePGkstrhluCN28c/LRCY1Ti3hVc
oNePwcjy7iz7fSBs7FRy3KHGHeA5boK405BZ6lY/hLGtlcQjDyW5aPaxIJQPZaEzjzPArN1QSBmV
FdMxGaaH0/W2m63l88vjeav52L4QH6f2vc7gFtXeryNndWrDq0tgTNETYGUzsEPbloNpU7PtU/NY
tkaR228L8O2KjVWnBsieVKvJQ4A0kHtNhAOoSu5ZSMijbRXcJ2R1LqpsNqDs5pbRrnVb0bJ9JXEa
yu4OYkOeElzUUGLMMt9GtyXhPVtMoM1WJAswOvXU1hBtX86NDn7b4NseS+Bhc9sIZbbVdmd5V+i6
tprhyu1c4nYcl3Ndd7ohaeiVXymDgxZjpmkVB3DQJou2F1XV23Hd5AtjbCt4nveNwKv+Yq4ER5DN
FPAAiXCV3U6+RsYMzInRTTXTNTI4+nrZIt2DrzSkkyt3d9tforPgfHnc/+ODOBYIVemOUuMTtIeB
FsaOZQA9LIHMobCCcO3CXroJUN84jXV9Y7WJXnXqONblvbZcAMGqqjRayPrjuDp1pKWxqqwNzAiA
hWUTuQUT6+vqPeDKuInUJ/q3Pltp9TVqQASksi9mUWygLSAA0a4LzJtHN0DHxVRjvdPnDfj8UFf3
bijYAWg6LMKViceUesESAzm/D7MKtcGeAtD1qJthrDcgIfXMS9BhH2E2pGIJENDwpNsjZ9IZABMR
qq6OHZknhChA1yM77IYLgfOTB6hMOdKd3iGg4WGo+yM4jg1KgIORmTrCbAJdgusQErSR4xK2Gp0i
tudAvJyAezFIC1zpDkCR60Qesw2ZSSO7xAQuQ7Xr9ZdDDOAQpgZXNTj4uNB1qTgvzhA3N3W5/Iab
434Do6u4udncIqDEwRVlxjQZIbNjRIaZn8XGM4LlJogKVT3/a2B5GjrEpuXCxLAUsIfRMA0zVk1K
VUEXpEepNvcLzZlpJkTZGmS8o7mYJkUPVQpHAIdsIywgSJeletbUeEejIj2oun5Klws0mUYAVyR/
RfrqF/YAAIGCFCDVzRXGe1rbTVWTqg24xufX7XZD4x0dyjQp/gqdnhyLAbADUv5UdZoa72j1pGn9
VT2ek+4AHEHQ0pGplj2qo8TGXbhWnza6ADpGs9fYeEfXKE3KEH2ExW2JGLxhUVQeubGERbQ31nVX
POLQxskSUX9zm60P4P0NzeSzBG3AwU3VHW8DLDD7UrLVXy7BO/Bx1+5tSOkWLCFsyXxNvYDsIJ8m
T9XVj+kEGkDTmjlV682qbTlFaNvh3FDdiuenG9C1wqew4hovkHD/eip8WgGhr5JeisU/Yn1TucAG
fxP4eIYNI4VHhm0jflNnbdr62wBYNutF6c2BzYux6u83sCsA8hHk7ZZ533QBQL1CbbqqrhqSTL6m
fXY2MbqR7Ei34NIiBTQb36UE3C0AkzYS3rZTYwnc88bJssu/HkpwqJyEBej4Ol15IGVHLMYdmFb5
G90B8Aiq5oCnhD4wBoX2D5mqaL9sU3iEFa2OCOMdPV8MLVurI/X9/h+mrjrbnBoMVyA9dqoRagkW
zF4hvWaqaYf0uhDFNYegjWRcO0Ccapa60h2AS6cdSGTlgZZYpEcXdJWHuEE9OH09otPVtw6zdg2p
dQsdNSb2tSHsW/jaNHrqtCNW2b1kwRvYuS6vXfF0AwiP9uphMIdeWjlETW3IHQx50iV7Y7eNkmWN
dJDYevEhUtwbupBt9g5CU7o5MWi8o1WOEc3pMfTGwPeVaBXWjne0qzFSt1r10O+Du1PNaU10AcAn
ScOckFmyeSyIS2V63+ROyo7iHRcYW8nuhEuhOJtox9n6HXeMrMabmpyxqx//KzTM2STr6qQVfTkf
nrfakIZNhoKxqMeWhRuAcRd6rVuqtm4ziAipahtnLGFx737T7qCuYRux+PGpLG+SG2BQ2qJd27xZ
UIbAK8fMtPk26CZihrpxvtqAI6Tbsi1PrseYdZfH/7zs/QzyP+6bM8h1qDmD5GSm0gCguDG9e7Gm
1Vd+AUYdulXbataxEqu967LLi6sgcVN1QwiibmS87BtgzOoSY7oE7vVUNwRnU2FxLVsH9GRF2SFo
e1uoJbssy+0Ms3GENtX0ESV4zHuMLRqqj9u9o4Pb2r9sN3gDtGbGsivPFhhReV0bp0cGc+jrupx+
Yckz1ssz/vMJPGPdGV6oxmruMWWvsFZWkWGmwVrTJWRvtrqTLcNc/9CvtVVOt2Z0B3A8mt01W1Pq
TogsgpvSKB4330YbH3sbB3V2bmoZlwswKA8cq665lsE4KMR0qpXUtJAZ2HhdkWU2G0dfdvC6oKar
xmYHpAUYocyUJuH2zGDbY5kF5p/W+npdUvPeDqePK/dwXQcpemgau/qOnD41NWdn65iUBxpG1uNx
RQkL6V8Pok3Crvdwp6mld+s7MvoUKVUMRlu1cQRp2tzKdR6eHlSrXXXCNbpmU5oKavNh0EW3Lsvd
oAvzuWncDIdfCTgGsW/f3n3yPEO/wQcMnqUtfSWKSg+FyywVnXlf2t4JFrxo2yyz1LgV26pCLfLO
lpDQYFx11q1bK20ZwVZe4KmGdYB1Dq3+YQkWFM/bqgfHWMMCfm9Llq2GDbIQprd1zCvdTY9/Ob8e
nnbHx7/+x984wpt6j4J4fcJVUHRO/SbHtWtZluCY+REXYzUVNn0bd+oVY1sQTj0uRKIRwVGqN8Co
tfPQlqIT7N5OJ0RLds8IuFmFn+8KgVdOVU0IKZY+P++P+9ueoyNYc62Mal/kUkkInjTNTJ8qiSA6
nJOkiAeP68B8Gu3ctDlCp75d0fTyYQuL+MHQ6oOXNo2+qlv1A7pXza/MuDntSgE26WDvR14F67bM
mGR7Y7DNhyJNBqpaTt3tLqKmZjtU3aneit8e26qM7dPPOLU6Kup+n5BJtc2AbieYSbR6Mep+b5RJ
t1mn7WuOtBeFrVShce1u3hBJY4810y6hU9EwZAFGTA6I+LEnDAUw6sY+gx2aLToyOFJux1afnACO
Pmw3PS+qQyMRLlqFPWnXWAqTdsJV6GP5NtAARNmrn7r+ZRxa/z93p+fHXw7Pe65XmAztdF4/gr/n
L4fr7brSmUw9bWB2r1R1unrGXFoAF3vIqR6D5JgFQL2NEnW9x1AvgBOUpSnnKFnm+wic5Mp79kkH
QaUFcL2PdO1xhnkHIMdZkXz/ejJpxgC6A1pzYNlLxPnJUtdlUzk/WaY402n/dcvLZOomCNzUypQe
U0O2JmFvNprNV/Zmk2sTwzawLnPxxhIYNmcjScTBwTyVsJ2wGnHy1jU0y76Bj1jZdpBJ9uNEWpZ5
p2YDjM49lS3z9QYYeOXV2OoaJ9e2mW1gGsKpiu7kHWE9UYYybX3Z6NPt0bbLxgG+Fckztilxbn04
6vF/fJyefLelx592xyNlzaqnn5A8tcqnLOGc7gBMkm7CtYgSGKtVJEcsxGqrLyPIsvGUspvPAlVQ
VrbE9sBAHWu3hZdwqHXElmzpkcu2gc5fzzgymy8DhKmhpS7JjvNJSgiJDQaa7CEKH6KEI4XjnsVm
fNpK8L6tqS8pv317/PHpaVZVlnyFX9JfdzZG9L/KpSbhXM0ATB0LtvDjyHWeYhtYtYzoZdvguQlA
QKIz002JMoSj5ObL6MzNQVEyOixQI03bfnCiM+9R0T7wlgUGXxZVIqjdHBltuzkBQMLJzfHLzfET
ErcQVEOZiqm2n0UE4uBn4YRIJYeNhVABA58t9RBOLHUhbIlWrCFRF3rK3BSwwCh8oPr8etm9Jc7Q
7CYZau+0q+e0LvpQs910hKtmZI8ZysAWAnpqFUxq0OwjgJqhqt9e5RCq+p8/aRkjLOBqmG2+/dNH
VCHOp9v+t2TghT7efzr5+e2n18cfT9t/t/4z/w+/7I7zz5+XNsDDqgSjpyamkSfbFdzblgLAV2H1
kYF3AFze8fk2+NgI6lNwA74+8HyGgmvw9YkPx1LUCzTox/HzA+nnLdi9KCsVJubzoHPsMGx6uG7A
QaPdQfBxRgoO+uUOkncr07MrgPqR7zRfoB6grsL8yICDCUUkGM5vXiLBKgnfLKIyFBycfWpM1aWo
mwC4LhUww3wdNGceygIXxT14UF8jpkYsgsKPALzhTabggN0Rn25I/2bpZgCntyXukw/ll2V2Sodd
Sa5YIHxcPP7b8fxpy8IFaMZu176qpOCI4lOANvB2bS1aNlqvj4M+rTY6cTqPePzj/uXgm3+vfswh
dL1Ph4yjD9Zjik4upF17uDJlScM6egBu1pZPfrWX6dcBptzA24ArOH6zzvLm2Lp5/HUzbpLHN18H
ZyfJa0V3NPp1AE6ij0UgmGIenN1WHv+hBsebtyWVbb8OxZyw1fB1WaNO4XuvpoMY5uwA3Fp+EDnd
PAKXvAlGiRac3VXOGo7qEOoEP1KFog6pR4LPAqBnR2SjW8pZ/jrSEIYWpxedNFy79kwu0wg2945Q
N/GOCrp59PWJd/3Q946IVvPOCgqOyMZBzPd0M1sqlmsO5BDGCvzydH7fP/70eXc4PfqoVzHJ5Ho+
BgOHSAYdZBjQCIxtmRALMFCGSHZDpcUuwABPRvJpjRkYaO9G887fDAwuWFc5wVtgxM6HNm1GYGCw
GdMmrQgM7C2SQVNp7QswICsjNjkMGbqrJqnKH0qZkegkpwnVmA8xpNkuGNi17CwRElDxRQ8cugPs
uAaFr1t9agx+DA1G/xo+lJOAwdBil6NXnss5WUKib4oikDJV34TBvnVM1xK4EiWwwYOOZavjUP42
2vhQdBwah823wZDkkXb78QqM0htwcO5RwYsCh3aGr2PJRwa7dlNRgze5EtiCDVt+PHz+LNpzs/4u
gTvwYVd3N9FbFoEeqmrraqLHnRSb8hhg1eP/3l0Ou0/H/eOfQ/Px22FXCTmFGsQK3Ug8TJCA65GK
5aJjeII0HbODFKgXvQkoOPo64HwBHHNd0oljo/z2ooVCAxWoF7MTupH5n4DRZwWbxkxFBRJSY8s3
sgAjCqysNJeyjIbx8W/f3vfRDF96+v5yC05l/xeRDGPXWhR9k1MjiBpA3Q8AsBGhSK352mD8XKx1
qxJsVbCYHGF9m5xo4EnnKoMIBuAkTzDrTgEoiQ/Txx1BwQmlbcMZgFPFDpsLYCP4Gj8qLO5SwauQ
I9shI4IOAI6vOApw9geAUaFZtpPIVAPAifUtJkD0RcsW+6zYATQu+VDnCoqIzrVpfMJXIsuO4/Sg
CD98aVG6EfC9uh7AlDtFZxRtSPTBAaIG3Ycq72MqaAB90rGcf2n9+Yfz+bjfnQqOq7A8mNmRaRxD
YV1mhtRtSIlImTi4g9vEEUCAtoFvrrE0JAWAbsMdItrG2DH1cL0VOBs7ttpA69/ItKwFUgFIXSpL
toSUAFJtPJzxEHHkTBr0ux5j/rkf4eoju35GX8qnOeyvwSHy7/vb5/PzdTmwjemdAPd2YicmrKAS
Uoot07nVQKElfGUND108HtpxVZWcH5n/psHYlhMJBJRqQYYG53WCLcOg2EJHJhoaGSkToS08NAkB
UCf8CopOTPiAby1sqjtC16vYfkfpjgw87KgaEtimzBLwWck67VdQtOMBgCoMWsY5yg0bfDuKDemu
oIiiBnbkbEYxgB0rA81VeEKkKBqMznZIgnYjMBUhYjKc2vQAvCB27bgPqB/tV7Ou+PXFIoLgDdi0
Ywe268p3vnk2QE2iE2Fr7gb1KxIw2RBDy+Vi14kgjd2GEUQAua6kotRu5Jc4NgnSLnF/V1eKc0Bn
SN2GxPzXsOOu/UFpXupttm4/fdz2RIhidmWmJubxIzR8CncCRChwm5hqxgG2GI1tsSqcVzlDbhsL
RPTFwtj/Oj37qP3+udC4BLInR5KMstBP3AxE+Di5hikhOhQwkoQzjwhLIaFOPNajwWUJib6pG/Yd
KoCdwcYGv+wEHGZIJrMyXFSs0/nrx/FY3BFWtxoz4scOux9kw46WXbtFsAkDCyQyPwZ2qPwyzuzn
/cv+sj897YvTu54iQzOmRqrjOsgbm0TqOo97HBvsxEGwul7V5u91EUdTGUdKoq5zy1Prll2H9Y2t
l+96Sg99F4WG54CUSzNzuOfkIPUThrG5DISXMtCZZZTr0//U8j46oHSkwU7sATsPnOFs8dWYxC7e
Pu0vxZMxXbcdCTEH4l/RNoNOAEw2eI0J7kxAFdqyOQ8REhM/7To9Uv+ygb5QNTacS6brX6bNQEn1
9tgxFVTLojJQv1NTgxEZqMTqFk+Id4Eu37HFZWPHiCJx8qBfUKzA7ynTUAjT3aOtmoY1Y7qud5II
EQyLiYACX7gW7duAFE5zEEitRQAEYki5NtF0XMR6bHj7Dfa9a7XJ/IqxpClwEV9/8GV/uS5BzMkr
kOf/vBzeDrfDl8Rkpm7EdWj4N6duOscw2E2wi0IiL59jSW2B1ABy20bKg05eNzn/1+F0E3Y5uVs7
WTfDdQMfms2wIPGIFt4QfWZKDb4AoGAlb/ooDscOvNkx4S5qwzQ17titHaPbn1Tt7aL2MWIY2MzF
/FEQR62T++1yzeN8zTFuulzz2ItCC8Vy4ADZOTr/chdIdHY+e2/qus7FMLGOi+WcYLc05EZk99Tt
yyGEbFDViLVIJUhQiXg2pzApfrmoxx/f34+H2aC9nR9vnCY0pZn2oGBB2tbZPOQETydNg9mMuNeU
aFQTJkBAvWJip2AkQMBT5MBWxyZAkMgo+RY9CRCkEsoqncAVgIhmRnQjIFVUKtbWyVcJbkRq1iRf
KRXt17bfMs59F0OLfjpl1kJsvcPxecxbPf/5dFNyeQD9fOJh5A2TKaqDWFKP1bAIWcB2vsvrvdMd
KdTDqNl5LtMdyd8DiU9R0zbvGcBOQ+Pl9osNhrpv7VjjGcGaxjM0PS2MxgPYrwJtanSsuTfdUVIz
OL6sJH8X6GLj2D5tpxpmIDGXoFqL5WnYpMflt2GxaiPYUVFTai4GAGVDr7H99zSZhkph+1ib+FlD
CRa/xWlsqBW2TyVTqa3n27JYXx0mxaYV5I+iDWvWKTL5c55TOsZyz7KjyA3CNDAnOwrOIDTrfgqQ
Fn6TSKsNpMG7LRU5rUpIsFs5NCwL2WnNMRCNhc5nmXrxsvmbssF/ZC/vQki2kmGCbZDsOnia41uy
l18iWrJQdkTyQIwBGrCdev7ENHKekymdsOuMW7Lb0HqgxBC4FTG2MdSx6qc2hiymvm3KX3yyM2LP
UXdfXmycNAlXUy0Lu9ceaahzMgcCqTtsR4k2LKYs6Rp4U733rlg/ygwYTKFk9Lxczm+Ppf2qghUC
yKfRhjVBYtKrk6iHAlYAP7gZ0VeFAZC8AzJBqgEoI6LhpoiQgFho5si0+SZm8dqyEZ/lpCAYYlpW
foQED9uY1rMIZhc4qVUNWz1ATuCTQ0NbUx3jezACXagEkCQ9JrgHTAkJCNfqhjxS3R5TA83/H7f7
BaRrLXwu4FpMy0umum2aBi0blk78KjgpLX4snEURcgSQE5u/t+AIkK41bE3vAgko0EEKlGC3tmWl
LM8bYdchSsLaAo35MDsGkFZCSPDJEW0XMGzd0hXiOZENKNnKyoWKwI3aoeHLiacErJNkvDLvBV1J
CVh/EiDIQgRh4V5Xf5XXCShXQwrCGhCtO90KCWxDaM0X6ib1Cav0SrfkcO/ByOZxe+q1tG2VDSt7
0rS/iZGkmpK/Z/TIsWEWLthFFKzYq5l8VZj3Cu5fs4bdG9E00DYBjtqKvVlcA53FZajsgNPHhqqt
gaBgaJ9m06YrHnqaD00rp6cwnAK4gCvf+or5CaQZKEEsAs+0rCZgKHYwsu0zAhhwx9MZq0UAAI7s
EMT4oEm2AQxEDdSwyYyLgWL3+Jf9b2FmS4gVn3InIPeDe/xP3zP3I886/cW1o4hyrViKGVKUYgJY
s5mFpI2zdcqd1yWkBZBjhlQ5636BHNuQS7dvXSrnCyQ6p8qQxPRZIBWANBmSVC8vkBJAavhNAyAd
xK0DkFMJ6SoMDQC5mRS8X0RUyJ0ApNhcqAd1P1jShWQlSNud1bgGdnxt/phHmrroN4YTLtdga6h0
9+cQsoBW+MuqLLKnX9adXUvSvbzoRZ+g8b6laH8ZdEOKu5ZsA4gMqwCsZttO5HtCsLkzgCOTjF1n
CkiENUXvB2dqTCPYqRjfuvYdT8AYWTJfsTe8ramJCx2Yb5aeYRFpDWzbiEwciLTyBXst24ka0Rp8
dyzH1drldfqI5a/7VXqY0HP99nHx6cDX/eXL/vnxv8+X5/XhmlglpAAPkZlB+/uV670k2DZvj0nd
HPtJoBKAVpyr/qoA7H1QxY4XhTyfFgmViu+5essAU2JosPjlu+C4ZMuCwZQAoNWObQVqAKhpSO3l
sECeCYORLIFwEUSiET9BPi2QhoPDe3bguK6haiRQDUCz3KfqdN4x0I2GSquqdyyARjbocss1SSHh
PwwFluVQ3xB4QqLzhAS43aG83Q3DEEC/GmTnu+DpDqKE3Txd8F0hG3rdAgsoUjj8ACXQfgXhkBOH
K/ACB4PZjQS4EgK/IguegsWfnQBo790DTA1jhzGDFygsfvgSvEChNxSZRO0so1tCVXR4tpXlhgiZ
N92OEZBYLsQVsn4TgZZPmiJBdKSTLbnf0njAg8rH/7X/9rU8vexwiHHUTWknO4zYTk1mKjtMbRzH
JuXKzoMZR9t8MLKHeFfematAAaJchajNjsFnR9fZ8QBg28Jddh7MOFY3ZCtYRGdjSWdDBQokx+h6
x0V6EPFByJL7y95LtoWzRW1AAScdCRPWJUuTHSbsRCGvVI1koFOMrvOEgPY1jplx0Tb8GRZgeRzw
cYFsH51tmgOyIznGUZVSpyZmYEqMbsScCuhfoyOPaGSoGWzZKcypAJbd0NRGZEc/dlvlK/F5/fjT
+S20z1y4vO5UXo/U422oiNN4Okx6Fttoleu1ek0H2I6uXr7pwDf5cL3D7WRGx88Mcrix2EjybdUY
PM+jEuVe0Ucndla663ZkGZ1ha7OXbyLIMqNRyfKb6E74tJjlm6AkfOS7vble1970fLY5lMs3Lfim
ZDMhXGzb1QYjwXY9BjkwukVJUo9/OZz2j3/bX94Op8KPr2A/+fAmxdTgBKFZFOBctUfeEkDQyzLA
at2QpaGxlYIbVq5kIhOBhZodceeXCv4M6FDwYTRTQ7BESPBN4xqiEI19iyiS7W9aCGlk+0YtRK0R
DeVfwZTkeC2qYRwvV4pgs/AN8a6xxC+QKLYS+WNBvZjypWkTocMYJjqZpWJAwUzoeNahYSUtOAbf
VaahRipYChFhdRtTDgWWRjOWkLbAMf4qDUoVapWCiepxx7J9P7JDjTTQuKVGTBc0MjVVt6vha9cK
sTWNvzo1lDkFowTxtKKki4qSAZ6MbvMK0/mqdm0BICEjnko2MxZHxc9H9KQO2rBpGLsKRgjjnoc2
I7cYxUMbxRpLSQAJzVwpEZKQ0BmhuEK4Fe29qh/wOVX+Ki0hXHCLxKtq36hDWQGjFWUOg6sFB6IF
zEqRgDVt/Br0ZPSEADHp6m14IOqN0+OPH7fz2+52eHr8Zf92eDofzyffFt03wFxaood/JprjM0Kz
d0vmWFsfil52F7JjJGznT4PnfpSAJLDGhxvbw6DXoXs5eK4ItIN7JvPKvW02GgI5oa9K7crgtypO
i1vqk3B/SD8qYXGqwJRjsj7QFEZf08Oiz4ILMj9A2HVEXejkr8KQdQIthlaWR6SMoZGUsdwuiJuP
JGAv8nT05bhgTAMZMR5uSBRfnfBxbSPinp4BGNNgM2hUeGR9u2MbeKhSKnQBq/H1unIkhqguSABY
K4tNT2OJZfBylSwSOdyGlsF4iEGxcylWLANEOVGPDxnLpwtuSJNBK0XuSSAMiGRBRmmENA5dMzmw
Z5LzEtJHdH1BgJgtST0ZPaprNKPbHciHQx5IcWCLXwLJH/HN/cZq04A0jGnkBy0sEtwRSVvxlocV
NcsAaSsTfPhwtss6xdTfr38MsnwIYMdKFJlFBeQI8aTJEJ6Qk1S/A0QXGcf+pnL+1gR0n7hf28ga
W24HiE1JblZWBGXbE34jMYpyx5sXBL4rqtOqihgBqHHllk1BFDjBjs4Lisym/jCgC0NUDFcJP0SI
A3rwEqKYJOb5N2hczWgGQFCCGdlTPh+EKVdyi6mAHTGnIWxZV5c7wUeg83nD1HFbQoJHYIZSFOgN
WwU3S/JFwxWJDTDA82CLvLwCUxbn9EmSS7g5b3i6gDakLvWpUvjh/Ec6ocxVNzRikTtsMglLVAH2
OFTZj6aGBa9+gNqJgtqJtG1ahpQs1Yj1GqSI0dFkwVdWsxoAbMhpXcXSJ6ihG1FZFaIERdLLlije
XC1Q7qepJIuNYoIMocpkNDWS0UwzXTM5imVkjVDu6KO8Q8nhcPIxHRxX5ACnLQNidEObkAUWuHYE
oANmj1Mj03rlcOB+XGlaF4dtg7mKqVZqFLLIZSE/RldzVED/JNPZa4+F8jZBDqNHpEYJ+NXBEGoa
Q9VBda3g3VkyW0+GMRQbEQJeQJ1SXumNAM2qskRU/VUgBkR5RUkXmkFnuD/9tnt7P+7XqGW3CUfK
PcqhW5Wxl2BRl/ShETBeYEEYfyrHnShXw4Kw+sh3Ws6wKFQ9sdNtMywIkI98z7wMC+LOU2OE3spC
gK5iVGlQ2Q2RAiWJVmvoiofYdigliu+xrSSJjnLmVMn3dMmEkNNpKsst6IMGJuso27qG/QGPQqVV
KROrhoL9DqU7sbAfBeZejmgbohLeDgozZbB9AkAN2O8EIfVUKEeuggS8UhMEa39B9eUgKhRtddtB
9CrizjOVt9YjCbBoY8sNbyQhQJOwG39P5NHj418Ot/1ld1yqfnzL4p/3rx/H3WVm3u/zQr77cPmv
fon/DJWSybWZF1f4MK6t50wbWrdKAca1xR+AJvH0MpCTdo5CXqk9VxoUELOQxvwS8vfB2ZVqpKvn
s7s2NMnWCBFjU+3e4N23ouupAzYANVXixLjdtgXQQyP1N6HMQGitG2kxY6dToVx7Y3BVGGOne6Zc
GwSBnaMkl9SLiktJyOdGO5do56IdSpFr97rmZUuYcZV6dzV3rtqqrlw74jSxJmBsOHXPa963+EFC
rAnZSPnKrAnQWp1rwFAquu+pkZU/drqeyrWxRIQ2egy/Zv/h2OkGKtd+N03MyQ7eVSu5I9MbwHsd
IbdbzKF3NuCdY1rXnXcm4LmlQzsXHeihgzUJzy2GLm8bwTuT6J3pH8C2jW6UL+XLBlJUGvxEsQwW
HTKV+LomzJKxBCeJJ8aER2aqRyZgRl5qQImfCWAwzSy1TOhI91GN8sux03hXrm0VuQSYvHOEd9Eo
ech3jgi9Yg+M3gO+rauyB739NhIoqpFJk+8bPfCOOMJMnZQYah2cczrbbFkUA8ZKszjJUE16diQO
LaJW2RGHJEuXdjF3oWF7mIK2NQDQ1BG5DuHhNRM0d0SuI1zK2pllQ8pPF9hfDk/MnvqZgtNkm9es
oP9TrhOIeQLFbaHkOu2SnMoU0BInzU7UIKquGHdplessYJ6dLkm3oJKVaHpBCJdYMx35RSqzw/TG
ElpBUypNm22eu5McPZFswDJNOX8bVA7TiqgiC3G8I0V6okn3iqYbj2teKvi2Lil1Q2sCQo+2qe0s
OwdVz8QODGqD2d43qC6ntdpF5dt4R9nKpEZ036ZjOg9VwnT9vrHopP0WxpIJL1gDOKclIZXR30/1
npo5wfm+Ac5ppeKwwbnu7HzSXd4CXmizGDV/G/AWUkFb9jEY78jentTUtAOXGwM7J5p1mMrOfBt0
b2hmnWfeAt6YHZvysV9YM1Ul+RWtaZznPJE63tos6GdJTxrSuelQC22lIjZ8rVMjNlmNXwnupDaJ
Rj76eEch1ERLksZSLVc9j0Ua2chVqGdosHPdVm77RTOTgdJfdKQB9cxNG65oOl7BYejyFvDtUWPp
D8t2JqeRJOoUdE1VeZSUW2pBeotElBp2Ds7tbKMVQsYa4Ey0CcOWp2roS52hZdMEVDCZPd53/8bA
zp1DdK47HHlSmKdq+Macwdoe1ltohc1WdwjfBtRCy/a33EF2uIPRmFIVhCZdRpj3HXaOdOSxafL3
S/ImM2GsKXjfdmq6WVTPxZMmjHIdsjKtgRc6wfctO5RKC03lRsO2PWeFQVpPpyprcqLpIOpXeE+T
6b5vcN9OIrtEQTfHfN+2pNRxa1kgXdEh6W86XHEasRzDtDZOiKfqjm0wbr+9+EPkYxqyxPhDZNfP
0rYSZde/YzYSatmTTgNQmC1paLKHvAmSxF5WNgRojfOkBQnslxljY+xfjRPc5NhIXszQqC9nK3l4
jC23O9CtFqgB2uFqO+Fa1XZjbECBs4BpKUoD5yCDUotGAU2GdgCaZswF+9VVe8flOyS9NpSVDBXe
cD9UUuFYNstNe4dFE4Jk53rv3jhV38Y7d66R5ZO/jbA+lRV4DDSgNt3KZ87QYOfaNZKp0o3h2gtS
j8BQm+skGJPc1zK/P30bQ9P0V7HZeS/blxR+lHnrmdIBNEkk85bopLd0Dm6MlAWFYiS15S6Is7VK
VhJPxtBKoRfuOtCkfLJM607QmNacbVSr5W8jrDn0QnudlkmNg/fuGYY7AN5CKlHYNwZLCwVJwh/D
G6/uu9NAvFXpkL6NsUaqHcI2xq0sAjKYpOKX2elJinbkf1VM5rYvFL1vW+YhjhWdd14oeWN2Qy22
J0sGzM87b8w1OpFnrCHoktbctMUawDkt69x+W3d0D5KlH9Ia3ZZSkd6Tz+1ti2mszo25Q12rLLc7
B/Jb60ZNeL5vhLURax5Ya6K5tlvu0CvFMK1U0iyBEVeUJUcWW70FQLsR3bfrUKobGiXEGRp9W5Rc
0W05MtA1Sea6VwQso/UAvkYqqjz6ufsGtOZMVRIstyIYsUVddHrwQjQZXPLxvz/PhtbjL++7p/1i
aslemqt049DwjsputMq5VqMs2fU/uKnV8kR2IxfjoBp+UdnLdpzP22riG+e7gkZZwjX8qbIbqXGT
a0TmZNdv74gf11OMqBEFGtIMrUZ8Emr3EbYV4JG9ZNh5y61EOdnvlDUMbTRrmFo4X5Fs5M9IaAvF
746NAKbsun0dDVAUCQaym5zgJttwvMpucMJNqv2IZOfhT0P7IeAUzhlWtplGx9nrJt1+vKJDV841
XL2yl5U2w44Nx77sBhzdNCJcYUY3tjq/yV6S8fxd0Xz6nfisG1X76YvOZ0fR5ladzA3nNLoijCo3
tdHcicu6ybRhOzlZ42Aa+SKyV2gx40q2n76B3c2ERRIQN+cjOSqh/6+tbwhhuZWxjybWxx1rxG4w
mxttm6ZUh60PspGpEDCFu88NUyNHQoJhoPG0qs3kDGxtKUxb/OkfOl8VSHRi2HqCyVjrcogqDFIV
sMgmme1LTCVopUI+/nLb3fa+83cAFJ5r/eF4fvo1aqjhz3jMsyXDeWnAJoK2R0FaOh7a5hri9ZMS
gFYTjAUFRVt1bBfwCAe+R4YBh8nbKdPVw81y6fP+8fb5cv76eC1w+Uv8azw41JIRlVSbSrASVFIr
S6ZihmbWtoZ14LsVCscCFuBQ8iN480cVgLXllYsCVoES7HnDpKe62hxWwe+qqvu7qfcMvkuGgVJO
nmERrjTb4TzDWgA7lYThalhAVGQUb3wqNa4AUSnTfM4RFuxZ2Q4sepuiHPFq8hsbwhv7erh9rtjV
L/FvoZxQylUtnwnFDnEuBQQn9g41ohM4DoYrVVVqbD6OOoIr2RipsX4bJvkoUQ4RkSU0SnVRyvIj
lfKXYWGwIllZVGPL92XBfZUlyZS7LyhrX5d0fK7puvEJHpvmB5nNt9UPI0S4rvQgW1PagGhFTiNb
i72Co/QiJS0/LnfdusZ0aksVwVXfhtQinWA7o6/fhmWiiiradnNuvO96+NJYoxy+L+NYhaygcvBx
49gC9vXjsPxcWstmm1BodN0jO6mHsiXwPqVkq1xWaAdfiYKECsvmlKtmjaktqYAvNzR3SqbggZG8
JoZYsJNh/nblKJDb5wn4EsmhC+irBQHkS3LS6ImIdlPdCE1qeyrdKUCPkNJoPvZYam1Dz+6fsaZK
95na3hh4oER2s0xthO9TV4W1soLGegOtARe+ArxmDgMWgQrLbix/pWG9jpkngo1bjXSOeeNQkCir
MJ13wKsazerrsHBdVa4PTlsCj2QUiFg6VbHSmo4swGTe19QQW5OIrUVSA5yJVA4wypr4wWEls0Oo
EFopPupCBTDiihZJkkiqSEvtaNftDrGRs/HdBtavWywFzWZqZs3ZwMntxFbvUWkCJBkdMNowShBz
Gdh8bsoXwY3LcudKbr+NHgo/A3I9t8GKpsVyUGGc60JNVQOj7oGtG40fClZ8aBuXrRgNjxQI4ZFP
RacKAHjiJA7FkovEik8VpWTsEqTmQtug0+lAOo24suhp6INCOnbkL+DktJjMNSQpMk4km8uehTiw
gmnVBPvpAZsmknWrF6QOOITpvLN2P9xIb4YNMhWbBw9NT1gNkFiQD2y9aEEy4M4HwcaoKb0ihdXg
a4POC6UUMijVDw5DV5FqRlkG/Ekb/O0RX1k1sFZuTQykgoxYiVBYGLpSnKnttwGt0lwIzuviMDQx
rczGDBcdzU1Olu0+QD+OFN47FH0kz6ZCKmzEocP0MpTG9LRV/MDWDVQDNDZQRoRzrLwQTxXrXOyg
bIC+SYX7cinSgy7Y4ePWJEQ+m6om226vC317wrruhJ+3ZXuxFWSOXAhTuXW1RRtStAe2y2SmFSTB
DfZjj9gdrNCXO23YZCMbhj5uAF3NaJdmK0mQWaaxET9iT/SAJQn2P0jVD7gApA8S+0XhK5GuI0In
7MF3RRccPWwVZfBCBRREqqd50IYuhvHBd5TVoaOzjViWTOih4AdK/aqGMW06avIw9rVFpKsSrpqi
8xtyQ/4qjeV/xwVB0jCDDmS3TwXZ0pU3nGEwiNbHDXSKmU4hZHrZ3z4uJyZoOoEm7X5lrUqliKhz
E+jRHkErraIAbSNSa91ySkygtXv8ZNN11xz1Ez+ZeQWdBh7hAHa0bcUw4lYnACpaz2wCTejjKW3L
kI6gjb7q8bOSTXLMsOCzqnxeNSkA/CrdetgT6HwfQUdADQBJ2rQsifjJEYBWeQJufU1jeE2fLvvd
r8xjGvEEAOVo6gpprRZBJ5TJ4YwoMioIZx2BphtANflqGSAcwaz7Gc5uEjEy3AgPqklCkjcCNQVF
0xlmHOWvBp1+rEA1ACUZOqUhMqKsLkeyuoJSWhxU44MO5SdtdaMA1AytHJnRV6e0P+mK3KnylAbv
VrVyzEYg2SOoKdPEBgqKrnMqBnXIsSIiRLcE1NUHFRCU5i5tKEHjg0p2OsgKijYsNje6ZC7Jx7/s
Pu2Px/1z5hvXnLrUmR2irNzuKi2tHv/09n77xrAjnL5n84pRUK8rusDkns6n2+H0sWcWdj0xTNTf
6tJdT8gI0woauo6Fp0kqQyXEXetBRTi+tVuEm7BIFC2HuOuJRGFbfg8HtSM5sG1wIhx0oetaxxTV
boE0FWPLDnRAFsSvTi1rxAEOENE7tGxX15Jc8ZOuFZ9xnZC5pml6U40jGKnXssq7KugIUcLU8tA7
oBVEBElwUIN3a1vpGK7jOtPSbFSyxDo0HUOyZRy6lydrdSnbMuPQmJk1BZvupchaw05W8lxZx5Tu
C8dchd8QnEGoR763zQIMJ/dqI9kGMQuwhcCumvZdAcNZO5rM7g0F/bYAbpe8alXNpjQFIJwUrmlP
GtL3YdkxbI6iSTsc4V+ekBWqR1Tpq8nA4dDNQBB1dcEX+PpEBhJ64hNSbr4O7oqOsyZ9YRZgByAl
O+6Y4EwBnJH5i4EtS7MBB0RSV6SrEhiWlGtDEe61Gb2lbjAxS5OCduG9LkKozdMCn9d8X5cEjC9b
V11dqtsS+NwE596YFmranBtd2VQ+TLPBOdg4aaQTihTdBhh9eShv221OjTiZY4eUZXSDD9OmKjY3
0cmw6JrpHFdP4YqhMvBtMgaTNnwg0ICnkG4RYeiYrTduwMarSZhq82HAFGhjMbOVGwITiUFfHsGW
FdsMjXBAcF4ysTpOvh0KaABJ+t7Q4YQEUwCYtKZIXGjY0gd4E46dJEtYEEL00JPuYHauJo3IEv+r
aBNgTJdsYNywAfCS6WByr2JvXhTANmkqRVtSEQoBT5FMvRahJrVi+OAhqqph3LjBNFIsxno6rKzf
MUAX6bomgnUozObj4E2Rtkx0IC6lkQFAW7bpCyFPgG8jKuVATBtwcNd04KjbCFjwXdJLMvSKUxsi
AZc1tiZKJ3BwU8p1zosexWaCsNqwXIRqWyoUW86JNEBC3OOWczosHweycUNGH2doJJll8a7qT3vy
nAB10gftyIx1St1IZIiaAzK8Gyndw4bQktFngs13eGFMPtPx6NpxaDnMDdLPIqxrlfAaxJcj7NRy
mc+wFm7Z2Zaj3sBCaCeLTxIFHk9niya37ZwVVPDS4c1lOMgguyPC2rKCt4RFgKacNi0qBCNEuZZn
wiAvv3Vj6ZYoLgZU7Tripy8joKbFAiOcZodxJ9xgGhpKtJagP3TcL6WTv0TthElBIlLAtyJKULsh
X7RlB64GVH9F4LEVMDIojmKdKmMLrvjogOletSJNpqXVx29O6KAD5mdV0HGs7hWBik1Th8Sc7eOf
fYfqW+FdvC4NK0LX5Jl5v5wvDPe2IR7SqQPVVc4v0QMCvOsUWlcppMSpnz4PXbJDM1k6QONcq3oM
RLVznN42NVPMbGxw3/5ss/bFpsb6IFtohOfFWU5aDPDAExi0qaZmxe16TyBGQGoJqtSNiOpOjdck
W2UzNnbVbyO7zLRVA/NhgG9SvxmEva3x3XscrlV6Qh4XwtvQCpDkx4Uo3LayCSM4fpnVgHKzvXF0
8mbBz0qpKBwqWiksy7tGG1fw1AIPIpy3PkJixYUEJB0/KPzVG0O9Nmwrz2hhR+h5qlY+uk0TccCW
xR1EivDVTGGM8OieZavs1MaRFe1N61ZW9YIt9Kx1iS3NcAWE7KEVCEx8tA3p4DUJ2eMHtpWJHuEH
8OmqMEhuQNGJSdmAK3J7k8xCdN2scl05ATpxM/09fbn93QnjCsXusbgSIL+RFPwt/QIWVczrub4Z
z+fDcc80vLKhHRlsMDRV6VqU6CVMgRpMy1gJkNAic8PQ6sW07BmYSVM2IUNsYiqBBU4QEpWRpTb7
BolJQ9UXyW2ADQBWLddE3Dc48dBK/LKxm2AbUkDICezWtSy75aggbXHQ8H4FwJIgdDUWCeTLd0H2
4SBbyZ0BeASQtvQRiA1FIizrVjpgPC5IBxym8rhiS8wAWqiyF57d7BpRlWo14FswjYAniGmh8CMU
mx5+FBrY4JOEkIjVjWW/O7XBFfpsxe0qPtkQk/GGx01yS40pwHGELBk0g2dEH0MrwTCMTkmG+uHE
2uoaZiZL0+ajuksAsnI5VdAOnop2LqyFloZZxsK170J3RQdpD1n5cBKy0J51y8lr07QJACvbgkN3
eQTp5RfshwpaoS+LEZ64Q7ukreXmreou7ZKGmhvOqNFLd6QrZiCuoYQE8kMSXIlKtdAwx1pM7XcK
8+acIOrM6LsbVZDgoLSV5lh5MXTbRotHHcqjjpsXiJ6v25x25Ssi8JXnc1JLOc4iALv1j2NYsmRD
63Hvliq2JxDNB/illkiEeHGIKJbwGHzJYg7goSubqz4/tIGXai3BxMUCsMXfHsnRvTZSEGGzNW6E
HTKsfwRC2s2nNdi5yOCe1wlVgYNtLwm0oX9d+EVtPo12TsB9NFfY6sINgCUIl8F6rxDuwJEJoXl3
iXDjhlDQpy05tQc3FfgIPm1qGtUVthVEmRY1xvUG42DritD4EKLHFZ0JcNuKEGkxgHAFBhtXlFQG
ZuOIMVASDXftNvcFKFwSnMuhzBNdcAa+rsj7Cj4iOWzZEroyytYsx9bAhWmy9yEifksviCcO1TOR
4+bsFpxdVWxtQy8K4k4TevM8bvNKJ/Bt8sx85uiGuWC0S7L1mJus1p7rsxL9v3eXw+4TK6pk8PsB
X4QhSe9lEAN6Tyytqyq9J/GToK+zMcUniaUqOyWBlpa7lSoV9AVYM7aUG9kpILOmckAoCoq6yqsS
TlI4cCG0Rm6q4YCZZk3V4ltVZwQxWuPK3I+JgmIzWjeb4MevAnvW6DIhYqhAAfUZ22obj01oWo0q
GDoABrSRpf1jinsBn5StWD32E+iqQ32xVYEyC0Sr/KXn1bS6GgFQnhElJAzNkQZRm75+Pdye2Ibr
ojfTgJq8VR9O0akDtqLpIUqw4EzExRPqD6cCFnumpGgZvB4WJ3eIZpFs2jPClUTfxS3ziRlXtxMS
vXEKxHism2aI3jgFYqIHvjXV50Xf1c15F6I3moDYjwttRKI1j3/d3Q5f9o//8env+6clNcT8MD7+
++72ef3TD4L89gf7+J9/TkS9/KAhHbyzcVrC0FPlx1lhBYA1JaypYTWAHTMs7RC2wioA61bYxQMU
8RVgx8df/p+f/yYLHIwguqulbaTJrLAawJa9N1cmt8JKACv5aQIrrAKwVTfjEgcu4EA8llhwcEUz
8fkrKyzCQlXGO9awAPumkWW0wgIMknZrRUQvworHPxXnF5CaHaGqgcicFRZQ5BLPnFgKEvAFurGE
HWtY9IqG8gW64vzq8S9/LSlAYQowfF/PFRZQgKkGa7gaFlGA4oc0rLCIAqr3V1KAnDEghgIFEuXO
r87HuipthVUAdqwLN3UNLQE0qcBRpBZvhRUA1laZ86LAgn78y3/8myzfgsZSQRY0Wb1JjbmzyjQp
N1JBY4kiMqze8BGN34LOex5J16gIazwOxFAioZkVHrS1peepXV0cpXBspiBHaJehS8fOCi0AtCbQ
Ey2KWqEVgLYZ2jsrhF7NdA8us77gS8p3t92JoEW2w1WhdZzMeC7yTVZYBWDz/Rb53CusBrCypA1X
w0oAO5S0IWpYA2Arep5qWNGGFVkuLPGTfAvzJXrUywL3poX70H2Wep5KT+cKLdo+WmmIz8/by8LI
DbgCX6fu4VAxJzbgYPOGbn6kPvUVXAoATrx23vEp9PbrbejCRyxYzIGT00hEcJbqDeJGgDfqIDbU
4bdCTwBa9S/NAHDiI/b0K6qH47GuAdaJf3oMT3YDLsDmDdm8VTQakcEl2Dx1Vwa8b74OyL3w63uC
s1uKGQC4rv36272DWzfUTTvR+tKMeHB0s/HUbjYPoKmfN0YG1AYa0LtxtXffbI4OiEYTojFhYusG
HEC3QyJ57+DajK73vjk6CMhIGhwoI5YrOHhtNCJjw5jpqWD5s01/OX+cngueLwxIp9XFrACaLJmB
HQAuM5fVsAEGirkb+BZLGdgCYMPnD2dgoNa7RuOiDAxsEdor11XWWAQGRhBt+ppKuOj92cfrodSW
hMWa3Jh1sVjtXSHCQjVysfBs4zF4cAvAJfl6UQucwR0AV+TrkkbKMjjSQyeihxoagc/gBnxd1F83
xWWMj/vf3ou7GEFEQwtSAcZogajz3wybnYOeGxtdwwoAW80PNTWsacOOA5/EucJK8F3HO2FXWAu+
K8pIjCufgX687E7P57fyJWjsZps2yeZ0ycfdp2u5HJZwWbMIvR8qroiVQVkrskMNjZRBImB89aRw
pVov1OP7+Wt5FNUUOsFOGEzpDa3euIJG80SAGUbbLvOIny6dqdpuoCWAFq40rNT22yOAziZdEebJ
0A5snNiSaisWFXRSTK40JplTD2DfGpmTARoZhQYZwQEamLLClre93bkAOx906djZ0gq4rqHyCjGf
Bn4DMbQ9/hHagPuaylNvKUUAnA12Y4ZX0MCvNGX/bGy/sgEGhx6GEmXMvieAMtV2wyVo4DAZqhAL
c13A7TEQl7ZjaVyAxynExhlX0zjAeL4uTvlrlnHFfavidTE4kwBnYtyEwwhnnx5fjufzpWDtU4s3
h3K7JcUkvNQwO7kkn2bX7wg9EugxeHpraAWgXYb2ITM5TjW0AdBThvaKkxw333Zt6CX2v0JPG2gJ
vm3JuQWLNQu+PazQYYyBGkobTD3uah0ex0XqmsKSmBW0gkjxZ9GufIUFClM9PkrVsMBonCQ/L2SF
BcYXnZmxFY44DkSqspeOx1Q1Gh6P59dSNRowLyBSw270Xw9sAbCGfH/AsYipHRlP00PAl0suVFtd
A1ZORDuCkoYDAWBZbluXFzA+1t5+McK4lDR8Z7gMbAHw1AMGUS2pW61IM7gB4GPdlWnYgINonrSk
KZNgTN8RBhJlDud5u8dtt97uhLWWe5BOgOQO7ePT/nAs7tBiXlDxkZKeLOQFpJfGEl8tYREvcMh9
ZDHfnJADyEK+OWm+aH6FRbze8sOKVti2r00N5YRGWXor3OPTuTRwHfS9TNnzMxnS62+FBaHLkYQu
y/qDFRr5XbLLquyGtgIDn8+YY49F7+MVFvjKxhz1LHtnrsDI1TV1z4z8bCRcG7lF5fhzj9d/XG4l
58QJNW7iu8xnYOR6dXxj/AwMHh7prBLc2W4DjFyvUOsQDrKaUSBWIxx886PcvFt6A+LxbfdbeQEC
51fZdl5XSuoDwKZssbIFRvlQYzFvTbkNMErtcps0HIoG+fhWe6BxXook3a2VbxFYbganpUjaJXWg
tQ4ZHIlBVUvRLThSAYZNOg5BhXzc1SxVYup0/GDRFRYpxbqdpgZS6SNso33MCouMAMWPUl1hASWN
ZjPncU0DienQ/3Y8f9odU4LpiknRGfdhneD7Dy2gAoCyUzA85A9qyUuZfzsv9Lx/Oj/v/+vnnM4a
f/6jaI8bDuSmhnbQY12i2Y0vLkEyaHw8UhC3z7qEgLuQqiUI1wWa+eZxAVfnH8l6CQ0XsCR6E0u8
LHOI5iy+sIYha8RaJ+YcQkNkaldLZlOvoeAClgaCXJkNVRwEIMMM3U142xbdqKEpXaZkZmkJ8wPQ
MSzRUHyYUTjD4xLsQWfNTnonmxQMYUpMmCS3LGT9CmnF9iBgBUtehwsuPsEfBNyHpmsMASPMGvgk
mt5p6HquSDpafiPoToimHBsec0fBdKHJGwlRoUmx/AaxLHIndXpSgQ2EUfJKwtCU+dcGTtFjlZTz
hfLCiUGJwSRGdfHQjd5sCQxwHUdsn7G0vVdwYDq5Ouoth+1bx9zbkHfmQmL/wPAstABBQcwjYZgv
futyrLAwbLEADCInKnCOsgUkKUXvMWSSKi1ZOYaOkV96lVO9ngLxfpI/EbKwBCcFEbOS94hyTM+a
4CGW3DYEEDiIIc9zDRszXAJdB2VWRVP4ilkhLkE4jQulXZYhbKRVDLUUZDQCh7kdleeCPYfsCDFj
6+fl+BsBvN/I+iSbNbCi6Qjj9wwjNy0gmxjxlarC1zKNrDRHWmLh6okNJzjZMeAboSqaDQ/dyu2d
4Jdm8lONA0U4Ch/xPmT90Bieh4jT1eJcM9wCsRvigppaTNO0ysojGsgLq3MvC+0IkKYe72AWAosw
RdZQIVtciWxA+1XU4/7E2VgKKpHBqeF0WS1VHlFBqRAXIEHeOkc0LdFEUViARknoQO4VXLaVlLAA
LXKJI5XE9hACH0KWuQGbBVpqdDyBLOPcGxyqzudJqU3QQc0WBZ1bzOFur48bu91BU1uMO7BlqMqx
C6Aj6DLNQDJEIAH41CqeWzHQuUHXqiqhJAB24FQrxpgPgM4/ljSgtwfoLJADpF7TsRsasBB86iFQ
w/sn4dkqCYtuH11gfsWeI7hpS0CYj5Bi4KLLANlBhxFlDIRmItbI7StGfMh0brClpEfocvtb8mmJ
uwitWgl09Pkh9Jvy+Q1b8scLuLxAFWpY9+/A/svaV8nwTwOgbSvxcYVGpKs3RyeiUWfR+NP57f18
yr0iln+AeJsMM9El3+x8XUCjKcWOFGQzlK2hjJbr8O8UBtKkMR05gMIHIMFfOmKG7AD6iZ0mPfrH
IncuY0CB75fd3pVjMYC+r1pxmLQA4K5xgbwDz+grh52G/E2uY9/TAnTuIsUAuoFmCGu9QoEXyDcQ
PG4bGjCgP7ijdf1l9H89Pv68NuWQBs1SEFog78B7ga3e7t+A/TeDNuvn8QvQZIHQls4O2w04sIGy
KbzcPAALP09CgQx/123ZEqHL6fNb4mnJtQhdji2Q0/buDSY9EukJ+rVkNgCeTrstB+W/iH1UcwiY
x9u5fUeIz3oFa9gu0eHBtnx/E/P+AQ6Ma7VGWDEIEEAbjGhOgqgO/zRqM8ydyEiZQ3S8jJQ4oGHX
9OpUlBMr3cs3IrEjx67lE6k4R5PGr3QF2K9oIs2whQyOB6k2q7Sei13L00mrXMufQoJT5B5R/tor
372EtGbXlG2mk3h1GQqskKuNGG4roWfPrk0YyBYYLMAJahOpsxJSxFYaI3OOARMVafMfiubnX+V2
FTi5ayLD+YJ7bEMPGl4nbWM1kaGCJSrAIeiwvRTHZlGBVyG96UXI7J3ZMLMVhbdS9mRWgt+GAtsw
dBuhDn1kqGvEN2JbBW0FgaN3ng/C6HMSRrbs2hmFmQRHFrB4AcV3jqz4BHrmeQtexBq75VMO8ClT
dkhjaEFgWrDlAptbtHD3sgI3291bAK3LXtuGJ0REAaRTW6iOnn8dt3swYA+NAYQlY0Ek4EoS4N8B
WiDfYRiLbtgdgNc4TvyMDsragKyjzey3hrfEwTC71qGle1RF1WFaQUFwUXbslMwrxFoHKW9tvkL8
DOg8mNDaZP5V8fwIaS6iLCtWDB7AY6JtFtljSIiHVKe1yGtv4hu5fQvgImib/637R7Y1fLu25SHa
AvMO0d6nkhVPDO6QfFZlH9WG2gmY0VB2q61STyTOrrJrYSLpc8qJdyyZyQinqo13KdyRVB1aZfGZ
GaBrMPws1+oMiCVnPIYJ6wwVCywR6WAYny09KOYMiJ84fuwQ2UHnIQ6bhrXZUpI5r9Gr8O+7y3X/
58JUismnrdbIcp0vxuaQiiUPVEB3Ip3zWfPM1GQbu2Kk7ixgOzuQou0PTUfABn1r4BxF4QRQSLKy
TfXaEgawP0BOraR8egfAI0Nm4vIL4NxZOj1TV8Gy1HkcOMOUazt00vGxL0PaVofQjH4D0K9bZZQZ
XAFw2epOSckPbF9Us0O57wPk0ypQzZ1+Qt40VTkCedIBtzc0uwCJJe8d+3KE6+BPd5z5QvSv3wH8
la7sQsyk73cOQBhYrTZnDCACqOh3ZO8AeHPJiM+qCwElQXCJUvKTUSkKNUCh4kfvlgdADLT6/sQ9
gQFsYOpg0LV1DbkOsiIbsCwRgBOIyqOv2AUQEcgODx3B7glszC4aGAYO6ibqybh2y0MQ8nTnBQfs
A+Qp8oJl5RBfdm/B7sdWKQoVIOD7kpSWhUw15vuA/EfbqmnP1AuQT0rTiz769OtA/lTFNA3uAShv
6NG+6zBA6Ur0aZb9IPz3RJjqiIChIiDNyhD0+oZ2SCo9AACt1D38F+hfUnUlAL4CMn+8SYLgBZFq
ap6BTyiep8Z2OCdr8IiATDscmj4PpJ+aOuo7FJ6Wzqxnz257+sfUVcAQ7zOtYnR69ej5ug7tQNFv
q9rDLeWb3tMpo7mkPlmElmX7L7tjYVKiAR8eA0bnFgfeHzaWDClUuLbLSo3VZZMCV0MHhLYbNBiT
F/ClCk6xC4AdGFl2lzDbBRRcwA6kuFXXGaB5DxbsIbfH8CmxzrILOLAA6d1uqgTwvIAGC9ASW0Yp
WZYYwRKkWYUP/W0OAfJ8IiWRVh3byri0h84SuVWIjzaNYkuMANpmJMTOAZr9PnoMY1El7cz2+wDa
ZlL0ORtu2EIDGrDk20PzJYDPG1InHTLX2ZcAiMiKcgeSXQDtIB/Bq2njZgcS376rmrWIaYtBtH9T
Uo/cQgNOZGmvl6XRaA0PmIAlsxsGP7+BfT+I+FTJRRyLfoA/MxW8dBy2O+jIAtLmZ15r4kkQ7UBs
cEDEk348XP+6+2shn2IKUdstbEGQJ0GDEJeV5fQqsYUGbnUyRyxkPsottAPQ1VS4DTRORqED9Laq
Qvi4BR835dbVFloDaNUOBiRosHM68m3roNWdSWeT2Q54JzSkouf8fxzPu9J3rkCoJ2R+GtKNcGv3
KmD5BXCVc5w3gabYS60lXQO4dq0+jAncwK9b0tDLVDG+AO5QdrodywR9w+z9/8/anzbJkRt54vAn
KlrgRrzUSpodrel61DP7n30hoyWrkmSqszJrMrO6yTHb7/4EjohwIOA/BDVrNlNik+UIwOHw+wDg
WhVJ0mJzdFweYAzXwHJFPEjNV4rrQbmCg/xw5QrMVQwkbR6k5hvPdXld7w1hvmpE2do8SI1XI9cE
brl2cHQ7lhSvG9cOwLXmywJmcLB3bUuic42jA8wp2792cG/K82UB8+YBuCY0u3W0p2sHNGsHrrvv
SnTg7MbyNWHz5vkGv9PuR74gR/bLkYziBpmtjBa9d8KrtmJTAS0wbb7qGtu6OfB1LbmOjSv4CMB9
5+JxIZjS5c21zg4wrweu6e16ceDJmbFzcbgMy+gSdX7LbRDNG76ICTRITbAEbUrVTWryt5F4dOWt
ucbBAaczjq+gyh8HWHfVPCvXeC7otQ2dvTtU/GVtFxrg3Q0dLmkgwVixkexEVTOTuv8vp8vpcSwU
NdNRH93AZ9ZlaKD4umoGq95CA53dmfYkZwIN1GZXJWJtoLHia117NjP5OIIe24N6CTQwlJzgc5Ay
NDDSnOJTcueDI4PBg7wZsebNhBym98vL8fPpcnwhNCX6QkUN5bRYKhXyREykggpeEwJzLSOs9Lwq
IPoSQY58cWTeODq2LGUpfaDBGfCHy+fwQL8XyOwmQbiRj8Dk+ZgofwVkEIh+AI+0tdxYEwK20Zs2
7nn3f944+rLk62CCb6d0beRpsWg3Fp1E4JNUSQCmhsVIpGOZ6oJ3AWMGCbyKv2++DvHoqgaM81jK
3Dmw82lSzjodPPRayZdgPv70uJ0uX2Z+YTLr+Cn9GTYl1LRKcrbVVh6xgmsArktD0zXA+WkJa5lf
bkJApAeBB9u3YvPWt/AKwLNa/woPwInRUGn9K7gF4KzJs4KPAHzk7GxyeABPTOXoX2nt3oDPG85Y
XcHB1RP9s2qgYTrPMYITLa5SX8nhwe6t4YwWAi8BvOxfvQAvx7LtP1Z48HlTCTnb+vwAPj/0Cd+D
z/s+5QpA+USDr2phCDz4PnHuVcOvTW6mmtbC2fCJkDyPSYUnpztqBY3VE1B4grlzgAB6GpKj46Jd
4Ro1WDVzfuA5puK7+aYtrwwjGu2uhkWoMtxcCDMnmvOwFu1ZYFjJ+TJNV4N2vnrkm00rzKMcNwso
7xuIFrf1AC8ULgmFSyzlZKw2GcvJjhR/sqc46YEkkETj1Nfg4NOqagCtaliezaate64PA4HnwWnq
LwsO4CWb+rLCOwCuuKbw5PMAXlVN5VvbB8gXbB9+08mSSV/XO+7OAviBm0ZK4AeAvcpW0A14D8A1
l3e0ghsALric0xUcEK4oU0YL/UBC1VDSme85ZbJgWxLq5ZKOfdcNziOxapiuji2ZIfAA9yRfOGpn
LeSBz8uq/Y4izM8Q5mc62RVObJr4UyIyvIiO0APJUFLFpE0DPVsJmEzhSQ0dzQYc7HxY8xpSO0ZZ
QsOkBidIflfdVTmfG32bJjW5MrEqQ4PxQwPJCQn/72tYMLFhWJMx0nzTGhYhXHGzg8wHvRrIOgzj
SFbzh7fb9XF9fH87fnhc/3h9PpyPf7z+erz99nA/EirTaWQJrKmUnquIJPCgHlIJruXCDD/ywLrs
AlLoZcvHUS3ryCUvEHgBTq8qZ+bYWgCU5qvKl9o8gAAnUCNXijkv4AH6qnSbxu5BAaRePdjBmWIa
ex8AtOVqcWdogDbN1uPPwKCGV0vO805wDuCV7H2c5fF20SpJ0EK24EEBuRp6L4ZXL+yimq7XrrZP
Fjed0euTDW4wa5obAAsox/WToAsAFOihRGHz2QDCV5rL9aIbAHyjLANX2S85L4ACx4HWxZwYHyti
Yh/a8unJ7gJiXSDOc7DLUJV4ArFl9Lfj2/nwXLF30YmQezJRNlpjFYvoOrtot9baUZDgYTqRF+yk
a7J/C/ZveHfPAq8BvOLyWsj5kaOV9gr1W1ITaEq48lIV6GtAw/wIT+c312bcAm8AvOZG6xJ4B+Bt
6SZvkg9y19HZluz9e7ABx3tf1g0ATwjtGaqbBACoT3guo4vsHlz/MPDexmX3yI1TtexuYk+C74uN
t7Gx/wEsMHKtkin6gb909D0ChrlZnk6rH5s3gP2948A1Syb8C2CQnxtPEQBcj6TjbdVOkywAYh20
Z/rQRADg/pJNdiEfB8yP9Bquur0s8IB4pCyzaE0L9+juFZfdRXEPdq/23B0QfuPYEz4wM9ALy7tR
lw2Ax0M6jUc1Z4sAwDnlwGVQz8AKS25ZYL+9eRSoGt2e6wP3Nyoum4KcANHP0OPeOEZMO+X7JvUD
ySnG8uk0nx7AHm2SPjQFp8KMS2zmHBAF0271y+fr5Zlk6affwm5iQZIiNrHMGVwA8IF3Us/gBoAD
N28CB9/2bGOYDCwBbG/fqEPsBK64fI712B4cuwoNtMBHAF71VLENcAvADVdSvIIrAC65Yc0ZHHya
tmLgPg3c8oJkQsUujLIBrwE46Uw+bDwetuNXF05wvXQyOHhndSODsUFwiNYlV0SewcGF0QQwt2HC
ltUAEnBFa5vbBmTuy9Yv29cNaNy7ZvLXwj0BY4rm+fxGogN6qL3QmmMOEXY2GMXiPi9N+5H34f77
21vLhzv2PEpGbIqw6GlH6IMllW8tFX+Ejjxa8GebwMCLQ8reqiItcmzkRqpr1/RmAeAG5MvmyNeB
59YMe3YPfM+kZtDEUTDNBYATzZd+zO0GsBuQlFum+pvm98ECptqAby4AUEhLNhsK2oj919b3bh/7
gY0qOyTbFjyIfBhZesCb8OD+9bgDHrw9o6EffMT+e1v1T2xfHljAuJLpNOkf8B1jS+oxLXjAPYzZ
sJ6tC1YDF6wiPlxSxTJvwGz59P39033NWv1p/c2Onkt6CG7SGRK8goquqtrwqQ18R/MRVRsq01oA
6B+kj1xLwJiepj6MfFQ/wUsILzVSuIXpJIQIyaahk/0D3W2wSP/K8EB1pD2IzPapmp7SLYbe9yU0
GUg2UEvGm57NIBTSXfP3gRIpqw5uje+D2yMDORjqU/D2lNhog/XXwdvR1eNt4h7gTvoduwfwpIUU
8/glpD2ayuU42gV3N1Tm5pZ5AcLTqsf5JOZcJAMwmh+2tQB4OTQhx1f5pgkesD0tkaGerw4Qrhq4
/nME9QB7tPFhQ0U10FrWAhl9s9AATJck4UXvo2uhHjw72d2AgqdXJeGpJjzkG0N5gC3xgWeny9bJ
bZYpwLujeXSCe/eA+FTJ9VST5wJ4koTYSnMwvRRSIaqnY1sHAIyDpNIxT0/ht6/GHWoTeAE0/Vc0
tR4FOadSXP9uikHwAkj32pQy0VwAoJBkAdNc6sUNoYAbwq7qbXBnCF8SEMrUTwvIZYE0i141UhzA
BrwkfpA0Q4bq1w03yDk6QcJcqsOtdIGMnUDpKCtve0mrIwqSjaRlScMKHT8q8FmH4rsjis+MSvJ1
PBHWAtgBRbbGTmBsJFWuVVvxDO7ApwVfPJU+DT6symSKDapROHEk3RqiTiQ2Bp+GBD07BaNTT65O
vfk56obB93Y+lSERkec/gosVCsbMdZKbIGpb1/mbzQIwbuUJVcYNyA28hlH/cTAwcKp7WStaw7hn
hgcYoLU+DdVBd4LmnrwtpbaRu7QBELv0dYFjG4WAM5C8q0awIC8AmBJJ3KlagtEN8Aegg3Yb0j9h
QIP4IQmet1JP8h0CFDrLDVmmC4AAtqv64owtIgCpF540k2pZzRmHgM3SGKpoXoKECQTe+B07AJcw
VvLFt1AAHqK0XHceikKwAcKwoxbcxAB4iGaACUi6l0Tgle89RJz/R1pDtVzMupOC4eUIM7gyCQAM
kHrVVv6OBuZ/IgHVu8IgTQAnsJKvQUwLAGkv2f5M9OuAAq3ewQfBExppGoplZRG4QVf28lPtBQAJ
uaojnmniADCyqly98Yo1TIQZaRZm+xZgEpxXOA1Md7RrL01PngNJJjVMYtK9HMaqn2ED/YGHakBB
ZVu+BgHgPCRPFM+qifuyAFK2q8trK0Mgjc6J3gvAaVAkiY+nHpTDXGXQtpUp8IDqfgtD8waBdUeS
QFuRPt1LZSO5VK0cTA08UYkHy5IAmu8HmASedMnbVBWuGDCAiEDTiPURgTuwpkdEOBfS62GHJECq
BG050r5EDcloHEaYi667ycykZUwqgWniANAR6XLZsJvnWwA7IF1fGBwgs0yaHboQosKxzGdsMhJk
ElhYC6KRQy+9I10aJVtOApRxksvMSFGJ2bipShGagghdf91xsa1Ng/PXnqbmDhTYAWm9kSoPWzcA
dKGxsqub2hhQJsdORrPulfNoB8sBdC+jmmRkx8Kt5gtUgAhcl5UrWFBD66HarhHgGZLV/TdJWAL0
2ar1ZZOHgjdE60E8pwtrJEl1z5wKCyBlRHLtpSkPQY4N0zOpAwUAQUba5jBiREOTZhR+xyMCVEBK
0hiFUEOTchQa1lXoXlGOJ42qGz7cmROCV9x9RBrqAuPgeq8Its4dB7lDp5aACKzvOac0lOSjMD0U
KsjISGlHvI22NgQ0Qlrc4FhdBHAy2ovWcqwYsAJS2cXcAaws9TiGkTEI4EexwzGCXoEp3YNtjVYB
fcip3hXAEg8vfe8EsBHyOAw9sx4Xd5Lu2dEz0sQg2L/eow5roA95scemABotaSTIeMkltCy93Rol
JCTUiAg9fz3cflOGhHQv/d4O3AS6DI6Tv4wqG/LYGhwEkM1YJu+YGlbDEL6tuuHozc5B+N56lDSm
ezl3ekTRe91LWzIDyp3RvYw3Y1HsX/cyPjWZW73NrdYw68galK6muRY2CVahREcNE4asRqU5upes
ZAw35jWDA2xbx80JzLCATkzVJlg3tg2SPIxAqZW6m1prHErv071aMAvLazRMrrO290IQU6pSclto
A4RmJN/gLYF/QM/DdcgUpyObbTowDeTLRiD/eLg9fy0j+bLXg89VFUiVfJTdHoC0DKkReunMT9cD
nZ/eSASQmP8OCuZfyW73Re9hAp/sNRHEZWfzBkAfPVL2FktsfGsB0EzOjUjwZvyDTnqjhmnPnfnp
E7yFqbey1waRlmoa7gZBLz6P0/Y7s2+n/RvElkVn+PkEr2DitYRT9hIGzKb7+BYD4AZJpS6PAfCC
yQBqhoJwP8CqZLWFAVQ3olGl7/yAAPqqGsr29sHxXVU3oFvoA98fB1ShLSRUCgaJCpWF7GRfD6Pj
hnfP8Ij0x5LwbBP1gPb9yHXdJwuARpRe9ZinwpTrYe64hJrFIGDNgYT6KxmanhxNpXQettL59fCo
hfPQ402mnCxfC+eh9zK1gbx5QLk9cimgIxQiWhtAzYk9rIkZ0NsYaBm92vrBB8hXBqehYjOgiK5c
yn55tjj0NCvlIF8YemzZSFhPNsCnTTTfVjR46OpF1DL122Ds0BOLRH2NUZwm5aDW1COyGTI8oFxS
lNOKQg49rk5MppZaOnQqogYz9p5eR6xV5gNDfkCx1BYyxwExx8EJqBUNyPEol4p7vhpx6IkGWprC
3h+AN2U1omp+H9k1xLtRjc4iGwBaWe0qaG4AwJPSplaG9dDTy4nN3moqNvT0aloXJrkHgLpMW78D
AYCDkMqmVmrs0CurG+zQE14Sk4CVULEekIYwuMohaltfBwyQeERnDaNBwIgDD/xggPX4gAKt6Z0A
YR93kpk/DxigFVCvH1Aqg1yaXxAC2jZAlbB/6UiL5+XaIzzDN/pUny4vx29/+Vxoea7nnCMGZHxo
JZ27Dp3IoWKUtgbHjndq/m6lhOu49iQt2t56DxzS76SE2r/rmD5ysEhDcJ2AhSTl+lFXMA28Ad/g
CKv1XSfoIEmzgTbawdOS1eyEBjDka3IQSDN1YPJ32nsP8ThoMUKumr5uwdfHztehySgH17k3A6lG
6A69G/xcDBLKDqn0Ug6d56IRwUpR8eMWnwBumhF2Z3BIFEo6rEMyLArY2iNskuWgGSilQT5811PD
5TDwY05meBD6GAUqUHad8mI5wPpqB2a9pzuvXFsbavUAcbKAbYol9M5Uj8HhkFPlmxKtz4OTD6YD
juN8o+tzd4R32d88ojmJQiquF9bFXrFENIhR+I102PaNBz2HRtL2XccfZc8h1YhcnU9103fVmeBi
7TqCJYQQfGUgKiCGIrxbh88EQ8HaFvwI4B0ZwxIuefCbFRwPPpIBNIHHiGF7ADhFxno6Byb+GDcr
sPlZaQ9kgk6j+l2gQeFpgXWoyxhH4WxxiEbCyHUkjK1G0Sw34MENWIIAGa+htQK4BLcOtIn9p0Td
/0NxCmw6wDrHJ4QBffPzAANpbHFxAtNawoAVFD8Ead0CWMArsoUxVo03lxjAHggp65in1VhiAGgk
Y6BozXr1FCQ4BLnH4PYSpokHC86gy7FIrvUSwA5GAj/9xTg0kQjYkV+REOJ5jccgITsaJUGijQO1
WisgSqDXGK5Bu9YK6AzrgwzeD7clA3AD48pPg645qiYGATfzFAOmjQEF9z9SdkC65VWbAHtw9S2I
5j0iuTAUTHFs3iJAo0eTyZYFEBq79yAhVx5XQg4ikmGK6DEP5Qaa/AjAuwqDW5aKdk/Q5zJDrhpw
YKeRN3UDjsJpJHyrMy7TE9cDHSR8bNFyo5Y1xHdbHtZzTy6CC9K9xsQfZgMOvi7I141sg/NcLx2A
zBhKk/BscwkNdjHUh9DNJYDCSnqmhIClqINVHkiPdAyCyOCPE4PbriDAGcgOQtxBmKG1A4CFgWLB
r7OWaixIsATpBx08Yhv+74FCllbQpBuSWbshFSsMAA2knZMy7YsAnxe67a+l4A6AE3dvMHyEbJIB
useBUtKwtsWulkA+Z3oJkr0E1BOLPqk4F6P9KsE9DOQe5Mgew4AViA0oRT3Zc1kB3Mag+s8a9vZa
XKxrf/MyhdK0E99/e305VsnvBncZ9muT4Bg0K1mYwQ2evUftoU2vP7PT5WzHzbdBb2Y/lN2Rx8an
wc7dgFpTG9gV3Zvy1Jttg4bovhyNWNGm4bNy7ZIYQRpKu8ahQT9tZ1AXesPVKdglUzHTiQ/jGRqf
BtflSCN43zw3bEXtfNkCXzfAQSNuZ4tphlWapul20nZjOU5xgzjwbV9NQtzAggvzqsTaBukAZd52
KBw373YOTS41vYEHTqHe4abXut/J8ut+o8gq3EmOCIGQSyDs8PetJowWqLWBOoWhJwsdkWTSbs0x
1RWFRCkK2s2kYpYTLpBSqKuP5+ubN2/bEy6a84nZGSAx33kebBE+O8Qm75UbzQJMxxXmIQmBRsf4
Q21WYN5m2oFa4X2kVL2FZ5XHtAVDthDfqW0ugU6h1yV0DI6J1hIjWEGuK4T0G1mP+0Vjh9IK611I
G0sem3tAyNQEmWNM3BlaSxh+BUWuMyTRMJtQYAVLEBG1CtM8hgbHcOsSLuZlty8UbILcZ1A1ZNWc
VfDDqxJVEvig20i13YEFBxgJDmJxwRYc0JIhtOTiWB/VOj/AoCIYHKPoadMSuEdtCWuI7aGbBO3A
CgPBQvRwNDcB8KgIHseYn7KlJbABs9lA8zkA1qJarGXbpRdJIiIHkpvfNwQJWoCOSlKrmyLDN3w6
58P98YdGNpBHanEaoUC0y5IN+56GOFYTp1UNrhG4GCQaNO97qvGoS01LNMCBvjIKZAj5nno7EiNs
+guz2bwFB7fIiPJIN02TA8iVbWCB8ZdGjrBmkO/p5CMc0u67s43GEQ2J90g3TtNOWH3e9+zWUZUn
d62tI1olg6nUpm+/B8lfdqn96BAbsmZGvwPzwLAYS6KRjd0bsHtT2kMtsgGGxSh7XGYAJDt0Tq7R
K0/1msQqad07MKlG2792Db6uN0T7f2eXkBg+/u345fff3iJk/IsPlv55MhjSLxQq/0/lrKT8i3w2
lLJkZECVWzID83kxE3RZLkrSFmfoEQDr3qc9AGbn48zAFgCLMvtMbw8tAHRZBzWPOpyh5fZijt+O
z+WlSJCbF0fbkVl3svRwzPCIG+eG4s1ZewSen/SXu8A2pcG8gAe71+W73H5dwdMr0du9ASxNjWTQ
WyzjNRt4CRhDbsJLlA/Twh44P5XhZbo8xf4IsO841jIvoOH1a7XjAAKcQNjeDUh4g3K9wcgkmvDg
+9L1KAjK5NytibhWfQuDgP71wM36oxsYAA2wUpksIMEColpAt04AaEgbzqNO4NEj9JyLlx4AvEIx
9ohQwVeoJKeY0CsACxCNtkq3nRcA6KPTDkvlgH4dHJ8opVWKNFkAbIAq86UFRJ6QBU/I9Di4xhSs
WY8zJQBwAKKdWfYNs/CeWAQRXrboByBAmd4LlBgBcuQUc7IA4CFy5cKRIfsWAgD9Dl36RfRXjwvd
0g8QIEb1js53PLRLy0RIfXz7Y7v0+4M7UBD5SpXTSpvcA8ATB0RVM0u+b8D39Q4BBK5PuXJYsGjB
I+45FtOS9dDaP8C/Wl9/koUt4gfw0pbmTYOCwNMjs2rj07EtDRCc3lTxyaYCBchXyx7311j/0H4H
8wQbGPQO5gWkh/Q94amhAqY1576j7xfQv1ClCtsUPwBeC86nQxAA4KXuMU+AfTJpunJGkdODj1PP
wtC8fQkfvxxK9Xtokh+ygLoGhMLcZyiVF1J3ERboim7LedTi50UXfr28cBWmZB4dxcMT92s0npek
x/hx1fCcHO+P0kBXnYFXyjuuFegMD8fk6KEcslGLF9Xrra+HkZvxQBbwAN6V8HIDD4DpjJj2x2Ej
VkVmXbXYu+rMO9NDNW7Mtr4P+pgqMq2LQb+AfdkV6Yve8l6pTkdnPQxcM18CPwJ4X8wIadyABdc3
cKPGKPocOL3pnR435lekG3PVposc34Dja66RLb0/sIGx3ECbgjU4ADsliWIAEBDta182NCALWADP
zsihGwAcjIw6q5KRyAKABuiUm4Z/QHWm3Cg6bc6yNKTAAdjBmPMC4P2QmZFVVeTydcB8SUN4nv7B
1r3YwT/BaBZFBuQw4gcOmFJ+6L0/OOBKkckkVUMYegCwgXHg5hoQBgBY2GC61AO4rzDcYBW6ffD6
Rt17vXDGlqZzIcbm43Fg96Lk/e3dA/FLR9yx3BdsYCj7kIfbb+h3SEMrM1er44NE4dwFf/UKleEX
R7W4TtMOZUlXI2IiZ+AP+uPr9Nun8+lyLFbthLWM4toQzsAoomb0JrhUQYOgmKmCea64lk5XBWWV
a/XHmz9tPi5pJCU6DEaH5Xp3zcDoQNt2qHRL8uOX8/XT4VzuR8IlaSMytd2PxNdD+nBtXZLug4So
qJuojfX1oCYGE/iAMInL+KfLHdHOceeICdpznT2Xd4Z2LlsNw2ekqY+nL5fr7VikquZ/gZQF8cEb
MGlLI9cmdgaGr1Rw7bAjtPh4v77fnqvTiA5pGRDRjtCItDSkS4FxUbWmClWG63E0PUVMlPbQMK6G
J5aYjfAGaiZGAs1+hgeaCT8BeIaHc2IUHaW9USwi/Aj37xwwLGb8AdXQmt7+4ZQYpT3QTGb8gfuj
Ez5UHTacvw/Uem2BYTSfH9wfmcUe5bNu7R9oZmSQeNVsdIa3cP8WGebz9wH90Jl1G7Nopj+gm2nD
zesi+Ef0O3LDQ2d4bJYpDSyL+ftg/3QA9Vj7/efzI/oR3JQisn/wfTK/ehu3iPAOvl+7h/8As9g4
YNrN/AOZxbY0jHTr/GD/qjJtxhY84B/KchPQyftFjg2nuImFdAFwAapHABIT8Nj7vsEEbErT1rfg
wfdNaZ01HpDHprHTwDReFgBXWM/Pdi0Mgg2QybNbI2TZAHCuOdmTYQ6TQFeH8PANWnaGPOFhCAGu
x0M9JCG7hwegCyQyXHEyHMAb1fu+wjqE2iFDgAxSDnjXZ/whHqy5OW8EHnyfn7RHzo/uX3KTb8n3
gQ5SDzuU1D4wVKE2nUQ6PyoQRzaRlAHwADKwTCcI6UlqdtUfcv40H4D3fgQR1AgMDk3q0Lex3wgM
tk0q4LeZewaCkrKP+d2s9yZJ/rX8IMTH3x2fT6+H8+/vz4e3wtaL/4o7vmna3ifqWeUjWZYwYAm2
OQ5dQIIFSJ8ozy7gwAJrg5rg0fa6uQDfKMqQblup6ZtoruDBCqRBT2x8NzRXEOAQim1SRFfQYIW1
1VQgewaPFixAul2l7hC6oLwP7uP/7/1weZw+n463ktIcsCfi3Ho6E2qjjsheR+jJnGIbb8/wFnQN
ndRpx02OIPsHjhHjy/aXjQVgh+FJIVe9Eyi8QD1ZZrsDA31vQvWuQMMrIG2xtybJfAAH9q978Pz8
43SAAfimZK9z7LSBgWs8SzcAEFC2f1VbeOg6Nc70LhA1MZ3g2X7D5Pvg/M724C1oMz1ZRAMolZnx
B+6v6hvcgIeNh6cDVMMHRWsBcAG2fAENeOi9NnR+jmo+YQ2/P6oeAWs0QWTCIGlerJsUbCAXs7Kc
HySbbNgCDLodPMQDDIw9DFokRqwcuTbA9AYQE5TcDBqyAJBjo+0hQGES8lyrdnIBAIF27EkRA9+w
8L39WxhEkbb3BBWaQDEhcOghwEAxaKtO/40bVJiL+O4VaPyI6lkBpnUEcALRPYGAfNyyc4AIBpAc
InOsNlH/BQEgVDOMPSIyUBDIaj6laW4AYHBQXPd8sgHARoTbcQCgTQrTIyEJVSk6X1HW3un5BgEX
8GYHG0SPUPe0YYv2b6Xn5sARCgZclE7CkinWt8U/qBcWlRhoa3KAAAbLjfugTAQpw6KnSyqoy3nL
Ta6gJwCCjE7J1E1JriEjtmRITgz2NLkQYKP8JCiyAaBK1GM6fQuD4Aa82KSZbGkYIFCaHYIIvAHB
zpKjqggQI0Jw08ToDYJXMFSTJJtEDG7Aq94j0NCgGz3IXpgxCMQImd6yjTHJ3hCUiQJ9jwIEtunJ
RD9p6vTB5QYADQymRwMGv2KpNpN+6QpdpxHpra1iKx/1d+qwsR9/c78fb4/T9VL6a7rFC5rtLzjD
K1i5750AlUNxAYsK3zxtNNhgsLZTeeRJ6VZLybKdqkevq8I/3fq+Ad+Xve/DsmNvSTcX0bwAC93m
HnnslwsE+696Yw5NeEBBVVdRJVoItGADuw4ATmA9KN2cFwAUZG1vA7B235P2oNUUe/J9D75vQOXs
TMGAArXrvUCDKUiA4sP5AsH+TXf/sHTVW1lSoGzhH+zfVQRkW9934PtV8y7V+j6AJ+1dUxVhC3+I
BY+g+cTMAVDsy4DSW9mvniPdO1pGgkUu84TAqvTbtBAADmCGHgHjyKH2PRYOi0+9H3YQEGAAVvTO
D2tPvXMgbjpfIPi+rrqnNAkY4N+ZHgHA1h2eNOJu+dpsp/uQJ12tIwNtilCBEFjKYNmWYQgDQ+8G
YPW5N3qHCAIy0KoevMUY1D0WDFtHeFK/HhHY3D/4vhk3DZcbLxiwENI9YluBO5MgQCDp8J2yQcqA
5kR/x9trqRqbHl9UHlQVy14X6ulZDuWZbAseyXUJn5XpqfZqhERhumxFbKrKKU6F/Pjbr4fb4flx
vP32fLjfm5kJvdJvT2rP4yS0Oi9B9sSfqjo/6OYC6J5J9bcNE/G2C2AFkDY/0FvqF736e0+aj4Ad
AFKRVfqL2y6AaZX2X7PtI+DHQhpgBX3O2iYOwBHEriMAciftl2IXVN1EIqJEcgvTZqzYLoBNOdLH
bZsLnhbAglAJqMiIXhcWT/qYbZtwLbcASFmU1mBrAYNfo4SSLL9GsAPSiKblrhO9TjiedOIApIxw
gO0J0WvH4Ukzom27gAUHiA4MVEdEr6OgJw39Wv4q0Wuo50XZbFTL5i2ABUhHvmCfMq8RLWBL6eOb
O0BcWXUpEdvFpClJnFkimwsgUlYb31ohQFUlQCvRqXppDqLKdapxrHqudY3KPyWe2BcXUDjMDwe5
pgVwrhKcW5iOoGCuCZ6dGFeQI4zQwKmB6Qy27O+qmguAKFlVCds6A042IJXFc0ldCwlgBRLuj068
NhJAjEHhGAEcH5mIeb2GlhcFjoNNR8BZX3AOalpAgKrGFYvoOUiYtAGniKYFcKwKToZOWLQw7QUP
Y01YqMaut9EoECkQPMZZbs0VQMxUahjvgdOR0wIKJl7AAdkJjVXhNXMP6E0PZdS0jQSUBipdlznj
sBnNAfPtN43zR7TsMmcJ70EPMHQMhxsnLOpd5AxCfzT6u6mdlh/Gj795XF9bluvYq/yTqCnLDA+q
PqQAlbMzPKg6kWoHPKh6kgOo2pnhQdWOlJvK40K7MR//fL0cX98e36Ny87fD5cuxVnGyD4WvOjDK
1pPea+mY/SB84YGRqhxw3V7Bgqz/tfQhBItsewEFKg/0UGX9m/YpQOmBXKsfQsTDMXgAuJSkcEAX
g77pCmCBgQy5nqjX2fYWHNgCKT1I02LbaygFSEKT8oUoZNoHAQOzjTDVrOOhvQ1wFEWrKFQ5v7dA
BziK1I1KjNY+AHWrlbpDJNKNbWQA4pRDOX9dtfcAaFONe/aA6mrGYoa8by8gwRuVrnweDF0JcIg1
ySKE9LxsIxKcQpBTqGL+N10B0NRAn0c1ta/YBKAHocpJ9O3b1ANgVmuZVBzDJUx7DQHWEGIfZYP7
GGQ5Tb39RAVAp6BPVIBNgCcqyBMNNCYUsw9wEiHLwjWGNgG/UqZk3e33Ad64GApkMi9UghuVYh/b
VeCRKlJDOOFkZK4DiCBhiwn3jCwH9zmQ+wwUxopicBvSlJyi/UgVQKYSnSpAg1qCpk3IkiTamBDg
NgRhmYbVKAAeBoIHzfJcDQ6hZaciM+MBULYa9mh3gGEOanObVJH10UQoFVcPckLi1DxJx6/ahtrq
k/EFlqAD1XVUskVrCX4G7OBVPRTeNjdhwCYM2URg47VfxgPnVtyEI8Nkoz96aG5CgGOsw8yTriY3
C7DxuXgIQUfTm3IGIsUkmIJIB6onvdW1NgEwKegcxShMVHMTYKavWO+zyTTQ9LM0YZfsIQp23aZK
sAc6mz6xz7GFCIRKOl04Fga4JkFY/hzjOp85/HEcmwsARNAJx6kcvo0IQJSS4CFchmheBngYlo54
Dk9LyuYxwAMfyWXYaMc3aYqxKtN9EpJIMnGLTANHVUuCy2CLMK9LAFSMhMuoSJe6uYQHS5BzBMtM
1GlwaDxfoktb30fzHICq6NTvpG6a5jEGcAwiN7RmX6gA7HKkrMpF9btJFOCJDusSwRob2wsMYAFy
jOi4k80lBHhgo6yfaJPjAsIUpp5ca1orgMchRf8YEpKEIy/UpHHyLTYB3rglwis6s0WT20mAiIHy
qiTBWksAhuvtrhWkBZuwteBoLqEAVQlCVUH7FbL5vgCXoMOMTXQJ+xZJjIAkCC6TOSha/BI8Lql2
4VIhypZ9rUxB4eNNrVw2xRdgM9bs0ogARQgiAE3sndQUgA6cwu3QAyS4zWHsS3EJ9QBHlFPfcCR6
lPqYViB7aNrVHsRe0wpUfKZB301uCzA5EkwGw9y2tgAelnN9LV9ARFq77xAjOMRYvyzTvAxka1D5
m7hEk6aAtTGsWkDLQ+FBQVNCpa/1qeZlgMt0tn8ZEj5uN9QW09haAYgtJ7u2ioJo8Bv1uEqfUR9/
d7r/4/3yvK166waIDY5s9oOzxu5YAIS4adt2w8GD2C5pCR1rZkzzACA+bUaYMtJNlqDtsNU2Qt7P
lbBiBwZRcNrC5gj9RAfjYJebbsKK9jswiHJuSLv5VtJ8P7ZtcH+JbsZM3ZW8eQUo98qV1f3tKwAo
NH7HFaC8J7NnA6jNzVCmSFSuPzGsGXrN7PYh9PeD6t5gTK201l7SIXQ2xMqWGTuab9pJZxFRM3W3
XUR3FrHUJJINoyosIns7sbUa3tiJ6e1k41j0LZxovBOySCCGjQ6aFsEOSkM0+qDd81eM9J+h1qct
g1ggdY0v1TjubsA+jOu4xhYqQUYrwUhwfIpNBtW8CMKIrPy+Q+tqsCJjZOXeCs4Q8sYVfdCq36tY
iXIMVsFyVb9VrfSg17Hqt8uWDrR7V/125XIsR+mIDTxuVasUGAOm+u3epSnb/dsNfKfbNprjpPrt
3pUEQ7xUv925tGWr3mJEjKDEhFqJxuxwMm45cObS0BC9icd+QNOiRW9evB8UKDEQvXn3fqjGlY9b
cD4x3o0OtPoVnfIKN3pQ8NWbBeXoLKgNBYrekHc/WNArWCCNJ4FXpb5uCw46FQyyu3cLTj6CMmHR
GzDvh6pTSAPtCnwcNVnoDWh1ZEArBw2qc8lk+G0aquiNFvaD35Zx5EdvP/6P6/V8PFzmZs2WDLCZ
/gxV2IARQcofY53MKuMCuOyBk1qlILitKcAVLveavm64orv8dVSzp4UYucL9FVwC8HLmN4lvr+AK
gDuOA65nB5unBUZl45MVHHxdsiXXKzi6d1k+Rte4d4S6qmdFiXnUsVwLWutZZvivaEfgpvy0qA+O
dy7ZGkcbp9UBSMf1yYiQ6Ju+JPOxcVcIXKGrlr1HJraz2Wf2kbu8p6Ukf296GRKfRw2VzQQzrAaw
ptBbCnqRfHv8BFvpfK6GVQBWl/qeIWdXK9MMmlfmpOucbIIa1duiK4eoUKJSPdSM3ASkDIuupJqe
42pYhJpychideZ5mYrJWjaSRkxQT9H8vYHnTTNLMpBhrV2MJK8B3fSMeutynIBcmehcmuHHgGRaq
4WM18aN4kaJrRY1kaFNVoLuCG7B5tnJiBQdEU488ap0d0Kuq6FWu6sjEBW+3w/flHnR2CvHpkJam
8JWZ2zOwA8Ajn0upoUMqgSu+GGAGtwDcl2nrcgNsALDjUrVnYD7l0NLkZvbcA4CXdXK02sBLsHfN
5fLOwBoA2zonert3D7ZO8oj9kvoaYLPmm/4Yq6MDLX5c2PnH+9v5RKZUzr8VHajgtCQbvabQZQV8
ZJK5HAdmyM0K4U8suDVVoQdRFecF5AcJyc2IItXWy8YhNDwESZ0miC8PAR6LdVyW7HIEeAuG1FDJ
sEbjABJyGlJ9FGK9TjeQiO9Rk4tI0XrV2IWCuyCJ17FPiWmgEbAsSxtxRide6x4Ay7S0JMGWKUXr
AoCSbIVG0X4OgBRoOZwrnMTFRYA9aNujxXgNiJoJHpfo7gYN4B6tLst9tofAdGDWewhZlCThoUAj
eBGk2GeTHFagASBS1cOAVJsvoCV8/Shk+z4BVdMsfFGUZRTIACuQSptIEbLFXgC8kWw9RLEFgAgp
+Yqjgk0DsjRDn8speBBSpZnSktoXCp4nraUriyrmFTSkSztUo74kc52IVw9VeaRss3skdN0ugYFQ
qctqU99GJWL2thxZptsrAGSSuqvoMGrLfoxMrcuCPN26UMTqiLYp44xG2VoBva5x110APJCKp+CL
HV3rfSN2q3e8b3wIUvbLCB2FNRhXlPmMLbmLnpXqKZGyg0NNOfVQWQ2UltAaqih/G4f2TSI2SXdh
y4R/cpeISdI3YdpvAjNJY1njixoFSGINpQ7DaOToVY59swITlKrKpn17D+gUbjPQcLWm4iC/2oS6
3h6lASU6vYFGMjygcvHP8O4DACcTUKKyMmzAgUSUccql5zo0rRtQYAOOS3KaweEgo7EawiPFBh5Q
SsKg46bYFCuAPQzVMCXdWEHgFdZ8wcAHlWtcg8bXwA6UKk6BKMlwU83WPUA8+JFNuVtJAV2l7W3A
feCTvUY5cOluxf4RDi3X7mxdQeAVTI+agTaRbkFzoyjmFTR+D+w0kmIHiA7K2XJKbVaA8ylHUea+
Nk7gPmgA7nuEDIRHOoDgejMRFKIDDFyvs/UADtCh6IHDoU4jHW3nm9t3HwwAH3sEoDArGstXqNqs
CK0wbKZakSV2PMMq+Xn4O5WaaiM13y/3r6fPleBUvIMhblJVcqMSfIp3GiZwU7KKsQEOLon0FGzR
SK+v4khaqFWNYNfPgxsibRmrjuwrOPi6klwrvhkcNnUcZUViW3gsLaWCL6TX+GykY8/a3zfogatK
5fKty0PHt5DFqx6Lpw34Ru776PimR3wGyVlVtSX1re0j6hm4ygBye4j2XQ8eyzfaN08UMesAP26V
8g1zGfnXHZU3Evpt6OQj5IBxAZqGKTcoHnnelD7vuM5xGRrmwDpluPDn8nEAzWciZGgNP06SERoq
5Ag1sLR72d29BZ8vg6/V0xiB6Zw+7rj01wyu8OGH8uLcdu8KQJNkha3aM/I8PUHrTbrC5uSA5EnI
vcqhWT7ueGgzlLfuGh8HJ6cRd82AI5LRHZpT8Os012HLzkfADhP4SrDVhLb162jz4+bshbIlexaL
Aup23+DxzRKfvPltjPhx/elxO12+FOxUdjIqrBtL4ipVWtnJqLBelkndvgEuAfjQAdcf0MerhyG3
0AZAjyVtqS002jnhCKKFNw14oR0HJIRkJwnHesGl4utOGmICV1za1rJ39HHH1REs0OjbBvET2XmS
1usyAahxaQ6gXZQCVBTqids8qbf3+9fiOTmUluZkdauliArTVhGjpvUxqgWNOa1wiCAd8CykvRPE
bv0zricmxIiIIh4dCGdaGqI3Sp3r8DAnoFYVPw70ElUJyLGGxloV7eWrW4jTEHESvkXXUyiFR5zA
dfivE7aLOUQz5VveQmPpTLo4tynWIkNAVsLZb6GBNlkXk7ktNLo0t1FlqRtlw0eer5f74/b+/Lje
Sk8Kl+gpaa4kY8v2bDE6YCJ778kmzWaT/7ieLsXuTOfVDmPJMsr7Mx2WYUePVEMDXeJpAV3Sj60X
gHcohk0P7hoaMA2xPtuGl8f0Xv1gEbc1vZcz6M7eVceSGwakOcUFMN8ZVIl73TgAAocc23QkpdDo
8RpYMJw+L4rb043PA84jJOK5psOy7eiQQWY6PHfovRrV8X8MsvN5EJRM+zedHUDGK0T31WODZZRc
GfCKfWAzjCOXQZ7BsZo0OKQsmK77yY6qrELWje0jcLtRErc2pQImaVOm5K/7jUy4HX853u5l4rHv
eP/H0gVaYdh3vPc4zuk77uNx7EID7ysNt8uNQPMdzz209mFTsAjuFQqx+p7n1nvkufU9x/EoUGDR
96IOlKy2vj3f85p7y01xWhAPoEfdhQbRJhKYriYPrlsHJ/eOa2Wz3jo6ud7E8zZfR7duUIaG7wVr
/NjZPA6WjJIbEBMV1GHr7t9WMQwwOzXyPOo0b+QuDLAAIK6gK1ePb6wAHZGWFuNtPYmp5wo4gqvq
lnR7A4DxE1cmgwTZQaOxvRWQ+9466F+IbVrgAawv2mc07wB7vUjkppq1XSARqF60HLOR0IVbEiUk
Vi6e7UVi5c/CGEzGIsCBq+rndPstIEKCJv9yD8CLpqACu6wAsKAkst073XrSPWjkLOs060krKGQC
LZhEPMH3XoTsWLCmehNjG5PgNonTsCG9Og2l0h5IaXTYjmhRNOCttgpKtjgjQIGr/F/NBwXYkoXe
6AWFYAUa4WKfJHrSlXAZ2mSAUDj0GBt+0k70ychgQhQoxJhvATH3Sjq1bgGvoKBDblkBPccBOWLz
GYB8tHZTHNyiJHCPSiOnyMJSkIByvT2gQLN1EoXYF1JEfHXsSQeUHmGd4Xp8kTsAn7e6J1pk5w6M
Ke/At+kICSe2z1eBRMRSXe81iQ5H0AK5NtM1IC2hTDhoytfOYxA9poiSDqzzfZVdYQyYDQ6JbaFb
LvbnQ5lKpHvWkzHI5NY9k5t2QXWb16b5WGSEtrqViVlAA6vVwkRY3WnAOlbtT6v70XwMN0FDX4Pm
48dp65ULqgEN/ENWoooC3em7OpLmwXMTug04OrngBl6vBAcMZtL6ODr/1PboCHpE8SDNpxwkxCmU
ua17jgrS9nnm7OQ92m3o/PpWPEbb8Z45i0pdbO8pW4d8QLbjsnS+83HosvRD99vgKbqx8+1OSvdo
LWJDtuf5cxpVhtie588plBJvex4oJ8te2MMWd4CH+iqdXzaIBnGiEeWp247b0cFcWdvN7xptlefe
InnwfdsnWsAOvEASwAKrLx1+6Bwei04nkJ/e9hyPzmxy7KsoSKeuToLPdyvK/KiB3gC9Hymvr5mi
n8+uGnl9f7w+H87HRnZfN59bw9epOiqKgQkIqiPntUUkojrCjvYn3zJV1dEStO9+G2EN1q90C0jo
7Pets1d1NDvtulsHz5r0pa+6uelOS01Je4uRAqVVzJu1SdHEGD+ej5cvD5oeZ2DmYUDKICR/OPNB
YmkxgWs+xDaDKwBuSh2mBY42r8rwoK/BBd58VTonG+Do60MHXAGGPYHbohhZ0VhNaBf/1/dHcZXd
6mQ9kKLWjdvJfOhWxU4LeF71yDvAKB0qdVxtF5B4AcVXpeYj4FshBc6xsaRuHgEtsB2jUC+A38Rg
eZMkH6FzjWXMvJARKxLRAvBRC+i5Swvo8mFZynUEIUvR9yMKxXuQRD8yQdNTarVIdPOqLEnC3dCT
6PviaSJrrdKJvt+JZHNuQmyiH2IUuo86BD7waVGiH90T2zzahQbkKnkCCi/HX+tujXMHWJz94oBK
Ij/sqGKvdX5bL9BpBOCprVi/VtlnONMOQIaL/LCjjJ7ae6p1hJ7y7ADXln2uPS1gmjXMeQG5Xm9Q
MYorlv0nRNKxo5wrr1juIGPPP+F1AUDIcuBd6PkIOMYrPe/FXxdAOLB81VReALvhpeE5wboAYKNS
8/7fjETMyqTg49wrDoD/WI57bgEdAWT6rQugtJWBL1VZkYhwoDp00BVmVbtbQeWqIi9L9VknSU+L
CTD0RtUOm7epIyTobcI83RrfCjp1zzN1U0iKZ9DAOkHbsrXnWMOivn2q7JC2+S5qgLg25AqJe0UP
pggLulAJV/Z2M9T5EZtfo3sATVQirAawjhsbt5IAEn3Adx4/jagPCO4Ii75bWfOGTDESH39/u+Wi
jPjfdKqR6NrLlvjgqsKlBC0x9MgOoROZdDF81V1JbeA7u2f9WDO8wvCWc2DO8J3zb5slLBdD2vuH
/9hxGNalOMN3NiM5vWiG7yCD9P3I023Wwwh6mP5RKudqQRc74KvAJJG+Mzw+Cgk0xaQis4HHqKTx
QVdUHk3wmqJC8936Y7suogbUI4NEpwYqwgvL5eZEeAk/LkYI3Ou0r+uKzIKiNBqOoKn+5GoK0PzI
jgSsuIyuGePoy0M5KUNXm9YA1HGDCRKoAqCWy2BKoOi0hmvNMF8xog9f0pfZ4BmhSpaJImSagPz4
l0//OD4/ZsEiCTuTCzfjcWlofVWZHZDBYWqiIaQXb9HV4DAdzNBqXldcRwa3EJwQYFXVv35dgK+z
JU5yYcRo86pM1RY1OHy1ZhCbMXUbzKOv29L+HBtfBxdHq7PKiKZchJgDX2f7ZazgFoCzZYEr5hHV
rVwr5ggPDbIB9y7LXhJbmleYbCSXfbdSHdg8b7av4ODBUoNVt8Bhcr4ZdOfrGp/dcG7L9d4RzVtO
3MiO6pXABy7fbb13hHnNMf9184hVsmnYKzjC/Fi+99bX0YN1ZQJ26+sIdZX0WodiSmKKSF5Nitzd
lg1Ki2fPivsE6TmjTPLDkCIkyQAgeEuA07mT/GtMpJLIsE4rr5p8CGcaSszAHZBgFcAErrd3JBdl
nki1XoYgB1hUYN6zYLznhobIRQXn3RpmFGWTZl2DSzRlx3jimzBFz/EVHGzekZEEsuijv4I78HXB
9agmuJMAnszZCc5QUchwAd902j+dL+HL+RJkCwPYguZmXMjOmKu0AeLf0cztAwSMQ9Fg26vW7gH1
+NVFFGpaxdDCnwDbN+X9mwa4B58HE0pkZ05X+n7Zqn2LPtif3DhXDHnyY+v04PjelLfXunxwe64c
WORau0fghPqDbBOidXsWbH8oabdFfOj05PHUU+5kx/2QDjCU1KMb4Oj2CPXk0Syrh1Mil6yxYxt1
8dOacHCNhUiz33cC/OA2oi386e14e3z/w/33l/fX4+3w6UzlHe5gJJepzs1Exgw+8v5NksNQ+SDn
Tw8AWHNZwXLug8PDsqkLstOwSi6zqJtxxAzuwacllx02nxk4hGneytD6sAOwYuPa2pwZqBjjuMm6
JKRltqT19XD/y6+Xv2YCK4jKoMtxtKBfVyp9hPUAVnHe9gwLKMqNhutxPQNDDJHkyI0tkcARSbG1
/Ou3wbunXQyaW3cAFlKkQS/YjWxIft02OHWj9QMhKr0lql8O5/fjXz4X1KTBCPRoqSg2tUV2KicS
uOSdOhHc87AaeDVwsUv6tOG6y8lO5UMCV1wgOIMDf0w17nQLOwJYtuI/w6LLGrny6PnI4KpIr4Po
Px4b+AIWsdK9b0N7vC7HbX0dYLyuI93QGcO70smrmnDSXUfuaLnmSG5N1SVC8r7z9IYHIMSx1epb
WZh5x3L7+DdtYmX2kqPHK0qXakmKEiOV5kHYzYVK+AbkyNUVZ1jwBuosGFXDAo4jPdcVV/ZiCkYa
xOkk5BfSNaseFzrokJ/lmufLboGXc81hQXnXdktHp/tf5z9XosRyRwwiWcxHjPNzdTmAO0MLfo62
mEkxgOso8bbgAwAfGmO4S/AR7J0MDw8FCsKIGtoDaDoCfCjHTc5bB9BmhU4j0FQNbQG0JTsP12uG
Fm9D9GFKzbcwilSLzzTLVtJvI82VpAptokcRFmhS3iDNVWHNlU8yycBAZfZQhVNYba17SG2Agd7p
q3kdavNhAFvNMwo1AbPqqD7+y/vl+XG6rhmYqdoIiG7D9rJVvQgE7aWiKXWpXHbyU/ozdP5EC01b
Lg8kgCug5kbwujrZUPCOSevdwJXk5a3DsjZvBJddnLfOej3T1tl0nvXkANxUtqmqN48z/EjVUxUz
VrAnZkKc4BqRrScH4CT3pia8rvnkrecst/xthb/NJtus5Aq+TmrNYgaCrsEVpvaxLJ3QjTsHfhQr
OR/Meufo6wq9tV7+mjdsEen6dYQ6sYnXbM4OXDlWQKLpJMFL8NZ6JEODVCNDMuilGYS2Xk2ot+x8
rJXi0NfZiKHqene8rTLLVOOdI+ZsuC6V640jejObOiMCLrvgimsPun4dPBbjEHfvJeV57ThP7frW
0NclunXZuzijOzQH+414khFYVWWs4OjrdjMRblEPNFEP+kl5hjY4MoV3QgUbCWg31rHazY5URGM8
5wpSsHFI+rYE3+4lxljdMsDzvlc9j+juh7e38/cCr0H75egrGhhuNazS2PMSPQokgUR4QwyUJepT
LuC5U8YFLLGuQlLGZGI1FtDgBKtlWQdN1VJrD0wsTS3TYKBpWS/gOAUsnUCuC6ixuYCFKJgf6Wpa
28YRAArU2MWhgziYFbG4QOCRg64XEPAIiuAgRe514wiAjhQ1sgO1i7GxALgFTT0E8YdqLAAcHJoe
IeCgEBTzNUpwjcTSlykHokHJ4AiOElKgRNU6AroFWztZXGMBcAS1OnnqmfUrCgAhGuIkqmPg5ATA
0aMJEnU6R72CgUfQrmBoY4uMgKtI6+4JBEahqhfY4BD5yZytHF3bd2A40yBdgappwDZ4AbhDS/hh
SLJrPySwA012UCcirDsAvMCSpxyuMzq9NjgAC2jCTIKJIaRp7ABxZLKAEs2X6CFDdZQKbFMsOkiH
ltJBuAUpGjsAdGiJTJCxwG6zAwHAHXnJQcZPG9qAg2fsyDOOqp9o3QBiplSkqfiWGjQArlDb2mur
WjQAzmAJCoJ4aisG4CFYU/PzzQKAAhzhRCY6VzY3ILE00PX+W6wUELEhnCAEJhoCzUCRamqRuiVi
A3mRHutLbJER2IElOKhT2lYkInZuumqFgULdDPVDEtQKmsyAhiL/fDifCz1eAxUwGgvOcKOFMjjO
5a6ns7ga3MGK5aFqZ20bXwfhwnqk1FiDswInnb2qGVeNzYOCb5rD7yvvxLx5gPlRdcBH8GnLtQHP
sLj2wZcDlbYHxza1HblpluvBQaB2NFy50Lp5cGt+5JqmrJcONk8akCtduSZ6qRJ2YEfzrt8GLgXH
9uJfEQe2PgrkkdC92gPHNmxZNw+Ixmng0Mjg4K36obN5XCTmq0Ip2/g6oDnnOkRjYZbJaLmcBrUn
GaqahaFEg9GA9hwDmxm0nh1snjRnbr837ItygmsOMp8dMfgei8WFiWRybdDNTYvFAryPQ+fWQR6L
paO/PPNcUB6MZ1tqr0cHt1YPO26xeMBqPFsJvZIcGJIwGK64TnVaZSeakVwK3npvYPMjO5x23Tzi
0kNfKQGtZEgtbpUWSogOXPzIzsZdbw7oBd70hQQQj2OVt+kaXweM0m+HvRClU7aUzk2GmYJJYjGZ
ZCAlQ9OnxvJxsclaqVpmzfpvuZ753Lb05bXcIEg0L2tgUGkxroUmQZx5vfkwLJQYSaVHsgk2C4xg
40NV5GNqYFCiNfpNfVMdjgCi37JzlBTuEWDIkI1YM2A2URAkNqsJ2WYTBUFKqgEiGyb02a2etDwB
RYhc9cqqRlXdGL1u1asLGjXXq0jxeT4JktZjRfPZlrCoEJHUQomlFioBfhCN508Rwhd6ppCY4VVA
UKyZYG0HFpAvmc+RPN1roacijRpUp9tADE1Ky/VIVp16/1RP4rkyjfXrqH5HaT4DY4YH+R9Kcl3A
Vaf0Oh1elgmntnF4VIjDdq5XnZr5CC6qcg3Rwh3YvSpxvz18gAffVyNXLrLCg7otpfjEoRkc4b7K
w6C8RKK0P68HPpNg/jBIwlADnzcz3xpIu6EtoB0DjiheGK5ASHXK/RPaFFfApTp9WRLJjp3DK/z1
kU8QnL8OUE9bSKvKbsTtPdLXNdccnBA84HXKdq5OwZtXgmt3Rm4efF64DjxOlZOOT2GR/awrWb2a
Fjj6uuiTPWAWosovdi3cgTdP23+bojWL6jTFSWTvyrwt3zg8+vrIjSEguwfIE77D6XGWoyjTFJt0
C3YvDZ86tYCD3ase4Sl8d2rbtp7kVWOt1wAvWzdlSRvWw9cLIxjJ2sw915wpjX162T2XpBF4w+is
Va9UVeWuI9DKMeQoKILben+zFjp+/N3hcZybh40kBX4MOZYDe5Swoph7h6hNS5oE7TC0WaCrBPgI
LTyCloNdoKNnc6igRwztVuhyum6Clhh6KM/tZ1NlAv7gI0pBEWz6Jf45xU/MjVHUhpFlcFbbT+AE
t6XjdgVHX9frAUsmnsExftx6NzG1wjW+jsDVenZTKB8r6hC465xdYdSN69fVygQzuNhc75fj41+v
77d7cb/C4+JVPVDPvC9UpBleQXjq6CxDYQReAvjSSUzY0AyPeNG0/5Hz05Lzg+/TJNftLQmP2ei0
f3aULfk+2v92hAG5Zqka1/zv//bbn47P18tLeddS9V6jUiVFlriWqscMFOJ18/fBi1ACMROpeu9Z
rewg6gW+tX8Ev3KjKvJJ9o/OL1d+EpZqfh/h35UMZSju2tZXPRcUhr+uHMzp9/H4Hj14znzI4AKD
680AxA24AuCsryODS/z1qve2aXxdAnB2VM+KOrB5MXClYSs4+vrWaC7lusZyXRZ0UtL59G2skUhb
6DO1RiLxGxND8cbrbw8W61Lkha6elpkZ6gYzW/S+n9bfwpejlOI8kDM8pA1FHUmldUS+L8D3BdcG
iHwfwBO7PKbQq9b3wf5VNZnUt74P8CfZiSozvMTnHzbVXPSW60ueJNX9cXt/fuS288uHevdMS3Dc
VjXoXTOdDLdV30Tvlkn9ULRbxsbXAbj2EMm9OzKsy3Ls16xN4Irzm439Gs0JXDT5VwZXmyu+s0qJ
6p60GkVb3bLq7rWeDzRu4DGq6ikNegOPL5qOWNoqkKpL5V4iKa26ZE7aWFTtm8n3wf790BxOtEob
rFNJotOJ5frmr6s2pfzpdHl/HCtKUR1TRdAW4WJ70o5rSAva9Ld0S5HvI3iJVH3VcZtM8GzLY/J9
BC+QqaM6Hh8taEqL26jvquNs0mJwm4QcyvdlQ7r/6XohEzPzr/XE41CWTpaaX4ZH4o2dzkfgkXrA
dryb4TFDkgoxBNGb+al47yuBR+e3vf1jhiD1Rr0g16y3Vsq/nV5b9onuejhkac7ZYqO6Z41ZYk2V
PZoyOFZ07QiUbJjglTY/lF5D0QBHni2BnEO6Z8nb1S0Xmyi0wNHZK0NeVDxfDtg+8YVrStnKwnDY
wjClY6vyt0qMd1HKG2ULC8O13SW/I5MT8+91mIjGNobrMQENjecAj5kAaerScJUI11U/xUaqb7+P
zu8gE3Fd5Vsi8z1/H+3flI3lfE2h2K8uVt5QjQNJVqzHVizxG4d+7I7SmLQNGgss8L+ul+NfPn+e
NJzSLWc7/YedWbOVQuLSWLnFbCerzmlfzmVrwivw/TWvLtdxq80KEp+g6n/uNvAK70CTvEBdljuR
M0iAA9oIuap6I3sAKxhV5n2ZWg/G4kQOJcXVXM1iel39JuE2rCi4mm36TSqW1r1mrbgG/TM8RpC2
Rd6osxv4DpkK0ma7qgqcV8BkpjWf1kfOgFYw5VNxrTMgHMiiUfooWt9Hd+AIDsIJlClNa9c2mDZe
MuV6n7Kiyr2s1H3XO6uxZYay3MB32NqI6E25LlPxxUgH2p6CHABxFYLs8KqEUa0jABRYwhmlKMuh
yR7QIUyJBFde98jYxxuzafrNjnUm2WqLGR5bt3Ry3Li1LseedUlGaFWT68j3wf4FDMQFeGxd0yFa
W40n7x+cn86B2waH8v7R982mg2opP7DGIl2p18pCAhhOr62d56an2JKUtobRJUzX+TyWGbBuA48V
Q2WgYmm6zmfXg8eKMckfbimmpuv891xCI4FHivXQbIi/qqYGq6aqVDMq02uQGHpoQee9j4xeWxDY
2IvbiQq/JX2M3cCbQ+gde2E/ITvgOGIqDHLdjL2IqSg9R5WDbexFTOusPdHYPDq73TRVLRkQNuoF
yvT5+BuNoaUH7pDp2zjgKWUrMD+r7r4hJP90Op9P91YWRDcnSQ+lx7rkgLKbEqVJWpDf+F5kN6lJ
jSX8sIHHloYWm8Sg7fdRFoQvkqqUb50ffV/uwB/Cv96cvwyOD5iH+TJAPVaGFqY00Qytz3sfWi7s
Rqxi+sVOWpVjK31m+E5alC/TqvQGHqc1kVr1GC7efh+nVZFC/a2Tbv4+glfcjEJyfgTP1h4TeIT/
7TwIctGGS7VpuLFNp/WXpJ1SUgu48rCm08FN0m43yazV9QKwX40kffSC62r0NbjA3xd8B7l1AYQB
0qklhGxERW6m035N0i56KvkHGjsAC5i6Z5MSZR6daCvQzcfdDdnSRrpbNUF2Q7a0u6dtwndSE8Yy
AaX5fQRfqTm69X2wf9oyfBvIlP3kBsdVNM3wnfSEbW5FqQVrLEFkK+l6NvS2rIHJv+umW1ooqLvZ
llYDVf9DN9nSjGUqlml8HYWIiJbjNhkk3VRNS1Il9Sb1upspaUmmpismuo+d9rkJfNjosvSKmwrl
1uXie3Q4KhTkUb73jkeNbFnle3yEjjxruHx8j4+N5fiUio8o33vHdARYIyHC9/hIPTnNtL6P8FfO
ENqGMfELGcbSZilcLppJcvqX9/P5/xwPZSqbFj3vkKzS5Mv3oEXPu0Vm7KhNyDXCd7xbDumTWnS9
i55rJkDOj+B10Q+lYida9LyTUnElR2T/CH/t0qPV6MDxmUGX4fqqTkd38taHkhUX5q2WW4kTkuka
CRUodUNRF4DN7TnKB6VR6oqi/g+7zCEeNiuw96yo+yeooaIY40xOIAG8W+H1JkCjUfKQog4guwSZ
RGsH6AR+xaHbhHg0Sh9S1ItjaQNTKn1sg7Fs4zu2px4YVxJV5W+3PQFvbJlC4jbwmKiNQcUgynb1
E4nSd5TtyXijgB9ghgcqhtFl8Zxu4Q/Bb/0Q9FUPjVtuy46hWwrBTumc4bFPdaj8inID31EzfOnS
ta3vo2oIiUIGeujWsaxqTuyB1tw/UhMcyqXRQ1fNGTdqWuncxIQuxtJfZgqX05b5Nzi/7LmbRstV
H2dw7O0hLbMaOcSy56yi/b7GjXCXPV/RqLm2jGNnUkcCN+XZRWPzKKt1QHFT2XNUjeWUiyopVhrO
78C5r7sBODp+qbHfbgCwGppVG+/dABwdSeO3pNYNgJHpU9XYLLJ/dP5q9JVofR/t33INTcj3Ebws
KstUWf3iOM8ikyTreopzPYm0PK7r6b2qGvAqa3CsdqsBpcy7ntVCZiDPBY+bzaOvw4R517W5SEaC
2Wg4rscYyBTlSOi69jKN2MvkQCmc0g31YFu+rbq1ZF4halbdWrBqfmRtgndr6byGLohuLRkZQdnQ
LVS3Fo6MAm8E01S3lpBOXxfN83eqZ1w5za5Mlhdjm/03CvXHnmU1yynbGKY6r4Btq4FaJrKc0EH2
wFtXiyZo4xjacr4E2QM6xWofxqQy1dqBBDsYqzNUwRYx9mzkgVqI1YSKeQVsJc/6qF1G6pbBBtEK
IzZ1fzH0MtAUSaKTG4teDL0cOEU6bg6ibME4r4DT8JQr0vCq4JIYehlwiiRthrXq7GIx9BIRlSkT
EbfwOBFReZLF58ppEmQFlLZJOo9mrwRl5rKZoNAocZNdo1Kgkhgle0axXo36YN/aYQPfie2Ppd9d
t76P4KvaDtf6PjLqB9QhQslubofrfb+TW+HL3ISNRxmX3gtbBE3q3IQBIk/4sfSIlFkwrczgTXqW
7ClFg3dcA38CDyxNOnxg64iVPY1yoF29t0WM0nVN1aG09rbf79iqsmyFOrTgkaWtuE72BB7tf1vE
WToTcPGUNCWDqApblMHQqnxeJYVxycisrTp2a7Ml8lzJXjagcjAfT47d2ugBeX5kLx9QOWxrjl1b
cSybEMrW99H+dVkFZVvfR/hbPWdzUQq98FbFbrOzUNf/RIZTtNJ9ug4oMuagEW2WXQ+UN9D/1XVB
eWjnyp4TafBlF6c6I6PrwyKjEloZHV0vFJ1nMzayijUW27LKFSjyglXLld3s9TB0bRgS3YmN6yv9
ZuiGh4gRlHRav1kBB4gGEuJKLei3e+io/6sRNHeS354BwRMTRseau+YZkCG3hvlSaY9sbQHFuERx
D2MZuxBMslTbhOlmS4nKfV6ZMN1sqTqj3G7gMRMXDtbTd7ONSF51Q2MS3Wwn2r+50aGum21Fe8Gq
bT+DbraX2JYylzoDDn1LDRtCCWxQDKLkLLKCxvrKUOkrZbE30xuv0XNCdd7kkolilwLUykRUXdeI
qN6kbS2gwALUOxMrWN1mBYm3oIvItR838ArvwJHof0SCa50BeWeob0Vt8ziF6jD4JSXJktEmVBaZ
to7acJ2absGahAVzptuOpZppNbTgUcHbUBbMbb/fKXirdAaxgcf+baG5EUVk/6gdzggL9kzPuy+2
M1VK3oCt5XHVWWJFRBlW1c1Mfs6QQW5is8xanz4W+Xf05lcaGnKUm2VQeF5hjD/UZgWWXs0y2Dav
YCM3tpsVJF7BrCsEO1xWyS0ShQvMMhU0rxBKBKTzrVMgPDhyivhDt/aATiHXFUyMWdSUI7FUEQq3
bMYW+GA2eTcL4WlCVpqb5pK2X80hoUhgBwolSF22RyI2vF7SCQ63O3UM6Q89z5nwuuxNSulbf+g5
HoVXvJzXH3p+N+FN2ehZ1+C4Abi3pZ7gG+Bo8yCVCk+1SuCgXaf+0PP5Cu/LLtXUSNdzPvok44r7
VF2tdyhHX7hiU6qnNJLurcFNpsYGONB5B3bSzNgZwJzAq6icb3wdPS7HTa5YUYcUdsnHVDXM20/g
AujbmpvTlDau+NwKDUbcTJDko3LZc95ybc8VlCS6IaR6iJco8CG64RsyjCswr1I11rCVZlpA1Au4
CqUGIMaUAVrKrhVBhOpnSdEhcLIyRONwCTTTcQIXfAq1WvqRAieRJgqjq7yJqp9mZauRlJvtS+ii
UlUGt2qcHnydjCCL/Q2GBrgGmwdt1iO4hv45U3rtZRv3YPtqLNvUixr3vcuzhteWu5NJ9CBL9G0v
L7I0sIBWHQQKiH+SCLThyOpDL31/kJ5P8ZuvD3ydTEiJwqx1+4j21pcXTQXdoD2weeP5kJH60Cvd
GJTiG6uoZewZujrDp0EpODUufZ+c3hYjhNftI3DXIdwoDRHbktyM+vXyEPYlX4msluFtaIGBjziu
TwcdQPO1O+sFogVsh/MLMB9ougFZdqZpyR3E+0Zu+jVlXUhwsHPP1wsEBESGXm5iGwrOEUun71F/
HECHno8r5d7Y+D7ifLbDunBkTLKzkOn2EfEQ7iNatx/pH51/5EvpFZyhl87vO9enITgZW8q+Pgm3
Lzaie1HgJFHgJJy9Ol1Elc5J9RcJZ69OsNsHPG/Cffzz++un422eXeWyVpn+OFkL6Z8//OkPf/74
v3/zx3///bJll2fgsvOyRqpwlqh3aARugpUc3jOsBrCGE/YOjc9NsLrkNut1uTh3OKPjz4c/F4iA
1o2kQ199of1kWAVgq3xvX8NKAGu4VtIODX6Wy7CX1YLWxAx0PP7lEo5tNp91/K3LZfZHs5l8hDRg
u2xNf4R0AFJySRYR0gJI0epFlrErl5fzm/9ovBzJXXrsByFJQ4kUzynpX3L4T9Cko0fwVwo31NCg
F4Uk7TRC0q4YVA0NemlISb4dElytLl6QmNGyteZdXxNXYz0KutxbxwqcnvfADUJ3OwYsjrw0cH1h
OoF7LvnM9WZgj7YaNKYbB0c7HzdKELkVs/C13//P3/zbH/737z/+4c//8oc//+Hf/k9xOwZNLXeC
OkrmylGyR8MRbYI2XKZwhgUuGqHYXqEZGPiHBO3KanJCdcECAIcls3CiolGxHcDXpecy9yOkB2xH
le5BQ9mOnW/yr3/56Q/8TVpMa54zeTIsEr4jZ6hnWCT0LZfcmWHRy3YbK2elcEkOjxWt6aVIbsxE
hkUPXHNKmusoaROs4nlLhAVIN2aD9OXsgpxd9PZQxWTp2UUPb8PGT7DswZA9pMDsgGSIJd2Q4lRZ
iosM73h4RSSYiz8a8AZ8n3RjCimYwsktPJLejsjA8H6s38Ij+e1JO6mhLPFY4JEEJw25QiiCltos
8Bbgb6gbehlyl3q1D/SqEPNzWtOvBfE0GJ56SMO2jc6o80SIAVAfmWNZNRgh3wcv11XZBL4Fj74v
N+1zt/sHL89VdZKy9X0Erzg7ncADDkIb/lU9qVzPuvG8Ah1tG6C213MmbA0L1G9dteKVNSyQvppt
/ZNhgXlDZmtsGHWEBfqCLk0G5UpYZMsBoyp+FZg4ukoBlKvGoBsaeXPkncuhLj4QLMdm8UmGNdvP
PK7/cvp2fCk+EVVM/q3IpcqFsfXyCgqvYAaAzNywcAAkb9gRhsUZwAra8eofOQNaYeSS65cVdOcU
ohy95osLk60Lq0rA3ZIcwfD2SBiqqmoqsZXjlgCeVkWVmWIrvLQ8vPFcVVWG5/EU4Z3g8ivI/h3Y
/8jN/V3hFciwIN3kqrIsgn8ArwzXC4+cX4Pz6yI9pZJN+fvg/KRjcDVbhJwf4J/08ov807XufwTw
VVViC3/CA/oZ+vSnBvB90h7aVz6LBR7k91jNFU2R/YP719X969b3wf1b20pjrvAPvk9bLY1F6J3Q
Hzg/HbRmufsD9EM7Xgtu/+D+STvGqjrHLQlS8P0MZW5a6/4R/1Fs03xyfkD/pkf/Cn/fVvx3834F
vj9VNhLd0p/G/MspLoWffB/xP9l/vwK8X9IxPOawNOkPnJ92DN8ojPP9I/xV3fts6/yIfoaO/FH4
+9b35bcE+DOyNWO1Oj94f6TjfcO2y/QD9AdnuKpscn/g/ZKqdFb+S/B92urOMe9XAvwbzSX8EvyB
91933G+dXwL6MZX8bdIvwJ+q5tE18Qf0B9IKOIaQW/JvAPofmRiw8egt9I/0r6qwvXV+Ab6v/Q75
CfBHWx3qlMxa2X7ITBg2McDsGFUf/+X98vw4XS8ff3f8fLqcwh+zaq9S/QJLlMpRpXB1WIgQH/rt
7Xh4TGbCuv5fPv3j+PyYqxaChRy4FmufK0366hQG2gxqQP7tBO3bngGVHKkWAtOx7bReLQOPHwQE
J/21ot0zbHcOzj0O7WK9DO1A5q7SrnLE+BUYxMWiRt5I+i12PXI5JhGa5P1GXV+X0Bbvupr3Wx1Z
ANC6+1N1zx5+l3TBJ0XD63ctvijd9gBk6BFsmknPJt8FuyY9u4t0nnxkje5JG8FveiZthDHVdvQR
IjGASHSZ0T9U1CkAdQ5dbgBOPTLjDlbqBM/ZVYNcG2d24My2bO9VbRxzMafaM3BxrnT6rm+3NVup
BHyXuNdaPAgDk5YNTe6JCYwZHT4j28FPjwbes8f7rrxpcnvPgH2S8oVCw13xDU6tx7Y/eQUGfMgM
kHviL7ty1Lys+HaHG7h293uCMUShQ3vSGciMSaxAtlzZC7Ic5n9j6X2vgLFgJx7bwotFzgv2PUhI
nALLqrqFr9p+24Nvu3ZWFWGfSMiO7SYyMzTSw3SZHVFtW2FFaoQ8DKtCZERLEd9ZGS96FpqlzRnb
FmDbsPK986QMqRsr8vXWIyO91fK3LHpKGB2pU7Nt2dOk/NDucLHyfHTNzEBLwvPRw7D8sxK9ezaK
R7fEZXITkQwQ3Vi0mw43ADzM48eMacRVPNtS2tTYQqj6LhegQO0ThldY8/0iNdtBzQ+JJ7/pc1y9
JSRVPWQfHQsQK30CK5xjZR6YjU2DPj3wqkR6xsjmFjzDzSIK7dtjETWADyv2wx110wi1eQ0Zlv1k
8l7ItktQIVUvQpIJttEvbFdIDeqklavGaa0EGWxc7Gohw0lpvFuxnCKCkbruou5FgSi+crWz1q1Q
Hu+y9DIrglIFAYl7tBjo2ZnxpVw9AkSRAzp8iUO74F512nZMp1RlsbwrvwkgaXtMGoVVQDYnwjHl
9RNAoSDJ+ZXkSlkB1Kf0SdeOmCnkwEqfNDx+DMaPKo9J6GcE97EeMVCuITuVcKMkKFnMS1fAVZYA
dXssXqYd8CCdLeM4srgOxDo8ex0aftFWkStdAKKnNbJfxCRHcy0MiTUG7Fhw+VWIaSzJxgBIpmWu
Ap6dhBvdHvmsgBKVAAHbkZh5OFbqgBNa1RrAkr7nAY8ro75qKFEKKNzr9oRn1WmXNh1w5CWVgHTj
TKuF4/JNtNuhNahgFljoHquwUqUDAEgygbNI81bIF5k2azfNUsiDRBx5YKUHpjkSvIs2uMh58X94
fTsfX4+XxyFFgE6HL5fr/XF6XntL6ZDyJz/+TnwwqEOGH9bCj8Bwlo5IegKFnTHGFXDu45jjWnGy
EAT2w1r0EQx2t1JM76trP47wtGxpcf5ODhy/idCe1Km4dUKc/zCdVn4ABS52bUTvbdHeLmA6NK0U
HwTG87pCUENcI+Nv2v8AVhBrI/igjlpVbB5U2Nj11OGlunEG9GHbANCtDfwD5kZZXjE67frJwKrn
a4p7hZ+0K2Gk4rm5Rar/YCOSwW5F844yICgicus3pYtv1KyPwGJytGXhU0lQFpxzna0Q07bnxjZ5
t+hSSKWWjcrhuH0D4LSePL1p96SJWkHKGlwu2ftAyIJ8H5zcrygLhGmpwYhPPq4PIE6YXMlRpC8j
aD8MbUZHdg0YgNflG5p3LVKbLEyYZAZEWZRJvu3At11Vm7eUhExUpmH/o3HddtB8rN9+GGzciya7
FIGy40PmIYeSyMq3CPDsNMVVKmOt06vDPbNJU4lVivK23EY2IUJZtxA0aSsL3gUObdeXGXQpLwtm
AMSSXQkkoNw3SNMDXPtySMpYfBbQlRu6nwWk5WVBHItInL4Kvjmumw2ndqLNfZDqQFiuDqy+5B+I
KAnfCs2zTSEH0QM29QOW9fNHDHssyUIXjxcJF9Wkp1q5Q7gSJa91xaeBkBhNm0kTVos2PpaEtT5g
MUyso6fkeVoSbCvVkhCJAgf3zBv2PV2A8Nqwd+FLNQs9/5VvxPHDpgAE37R0TtJY8XeL+bsr+Luj
HU4mHEEm7UnNd0guMbl0+t8vp+frSyrtz3/+aIYhWRYuVQFr2CNeadLROtR0z7akg5Ha1B5+rHvk
6xnW5tIc8GW5QkuXKIFAmw+4w78hbbBl0DbE0inXpQpmic/tG+OXKeV6LuqRPk96YBd04FLXBwsR
J1ekB+Vy5qzrxgGsIl/2MW7iNhsH4MaWg7NtgXMJxwFo0v08ROmFUfWNoS9L2rg8Nu3WQ/11AK/J
jS8dLxaU6x7KV7RFBi0IrOrB2uaw8nXXIzj1ZhyfKd6IhhhXK8aD6jCK+n2hXa8ULlNwTdT79gDb
dICeIIpwJlINQAf6NOP4PMJSeg9Trtcc3BYjRRdX8pk+S+krtmMZ3Ia+HIAnHGGMTrWB0Ijs0Qid
DBAt4rE4dOeuVpTR4XnrPSMaGUpmIjdvagDkKept+wLf6D0W4w0jD/Qb+rRg3+t9RdO0pC904I3Y
UVRpkUHd+g3+tlnvmjZBWXGG6Gxl3rEDgZRjTd7opmU9FHJDo2DfeuViUVtTNb7Bs1TkvlK3A1lT
KHqWK3TwL/nKFWGxtKzY2LC9L3xuM9bDOHXNRZHIJCyFOnBWYIQ22yEVxAltNS5EuA3akMTUG7QR
pe+jFjsVvdgO35OW/DGAI+0eRS+10h/JWIOYg2j2KXoR2q3QabKT2Knoxf7ywzoQQcSZSEILsU/R
S+cmIxmSGBx23kH6/Iq22H1+Ubd6vCJ+fNTk6CZO4NonChPiyCyIlBI47lMyEzTZeRJq4z41M6GN
zF9wMZXc7lQzE9rIEAoT+3TofYpmQpshSKeWXU/RTN9eBz9M3DUN3t2paKavr2hXMQakxD5FM6Gd
IE7EUKLZp2omaIK39GOnsplOPpBLiy5yt0/ZTFdOsD7GRPid6mbauSdYi7vxOxTGhPChpFQ5/IiA
SCcnHCqYtFLZHXpj+joll/jE5bhTb0zwhMGMMabu9umNCW1k1oqKsfWdemOCJheuRjJvpqv9JawJ
MmQlNsoTO7S/dOoVVBiZjMFhhwaXKG0kFx4LEHYqvAmaHDpFo80+wyZtnFCKi1MffkR7TGgjN27i
D7vTd5DAXc0b1T61OZ2ekKuPTgC/T4FMp3c1wYh9KmT6Nrn0OHZrHPepkIlYCbXp+EPvVCIT2shL
kbE9gNqnA6atE1kanA+y8D0AJTBB2y7JIf5m2Vcq+pLYkTlG0d5QlR44qTX79EBJlWGd2rxrv0cL
jJDCNwv5ejqgpM6ImHoaXrzx+3RASZ0osWgoYnDUO519kvrM9KYxCn6ukmrhVdZsT4OT1Nqr0qp7
+pukjhBddnXuaW+SGi269HZ1dTdJXaubA2PNTVInzFyhKvfxdUkdwpkyzU6dTVKfUzSyZOFmE310
SdFM5+7pe5I6B6s6gZ62J6nTqCqA6el6kroC5pnRYp+GLKlzL77kIf20+zRFSYMGuiy07+mJkjpi
YwWMj+bcPuktqUWt1yyr3YqipP7vPABJmH2anqT+7wk2OJDsTv+gpC7/qlS+p+VJGmeZD71Xx5PU
rblhQVhiS+qWrOpEoYInaXRF53zYH1GxJPUY6TL5t2d0S+qY1Mt8UrtPv5LUTTZXaNl92pWkrsEW
5wS6laRu3KowFlpPkrpD9WY+KVaqJA3KtJ4DUKkkdeDqst1UT6GSNLBR1cH11ClJA0F602YI+3Mk
dXjrtccU1aXMXp9aNHP92gC3dGEjXSpCWtJ6N/mwd3rUklNihZYxVFG4doA2FaDVQNrOxp5b00+5
T5tKpyZtbxMHH/a9zgg9rjiL4/+UGPYpRenktGm+jzG1fWpR2vnasL9tgXjUsX8Zu5cc0OGH26ca
pYOTjv2BboXaqRylgzumV3FPPUrfXq88mp9y9UNiFSd9e0Vb6QLHKk6CJTiLXd/lTiUn7Zue2m1J
TeFTr/2lx6AujWbYp+QkYpHo20DNSedeH0kcDyK3tOLBzm19236frpG+LZm+1NAZlg69oswHaea1
3acgpW2TQ+tYD7HTWErbpu2wBRnG0VOSEkddSaUdpGeUpLRxT1liEb0F4jdhzNUE7vZpG+nMhERV
Fe3mNKz02Q2FyB/QsRI7o+3Lg/Af9trFCZxMP0mD6O1OQZzAKSePMfudfqx0YfTjJs/63KNrJayT
65Yxd0ju8HsmvHvCU2Ia506FOhHppuO82amtJZzJWmtQP2D/pCWo4pFiI/tUvnR68kTDWYTbqfQl
aFVTzE61L125qife7DTxE+bJQ5tjwFTxU3Kn4pfwR4oa3Tr2GCt+EZJUUcWitp0Zc+mrpD+qj+Mf
xD61L/ofBanDi2bw9HPcp/ZlmilLqva+9vRx0ywe62mMdhnNmzduopVj9wnDhHDbrAXsaZsJ1jRL
UHu6ZkLXWmlZj0PGqmbClytLWM0+RdMuM7lJG8mdsdP03bWKLc5wGu24T820y8z5vOskRneqmQnb
K8bmSWh71MwE65qtm3tKpl0GcZP6RLVPSUy3bMsSTrlPRUx7JkWcdiTjT3oqol0Gt5Nmnz/iCYsL
yKFZQwp1RLtMH8+A8RBCjmKflmiXqe0JnhYU9nTEhDPdbDHc0xATbLtKv2d+pXsWJfNzO7VLuwyK
39ajQ93SLtPaM2XW3nROO8wEWcgn/SO6Ydry2C7a7mmGCdjz5wUKcUK0ata195TCdGrPUzRQCdN3
ZbOKGyqE6aPkcq2Nnny7MyqaqFJyQwewQpgwbZvX1NPl0onXpxTia0bv0+QSbNVpeWc0NO12hQ1G
uRn2aXEJWWrT4TpqcX87fpl+9b721Q3FL+HK/4YmNgsyCiz25RuWUqFYovQ3+UGhkcVCD+2ZwwX8
COD1ZhjQFp4fGizIzN2i70gBLwC8bc/MLuEHcABTTnNyrQUsgBfFFFglW/DgAunQ8ZJNheuPC4Dj
11Mmm+jT4OtjgX6SWLh8HRFfNTBd1dAK7t1z07oz4eNvC27S+PJtBD0Wz2ZJak21pn8DuyYztnmC
dwBeckO+l+eOcCbbX1+g0c5HhDHRo7ShPa+wfGjo83Yz3ZqiHFyWLmdMbp8I2rYpSbT5PD34tuJm
omekgcdFRjxWg9ryvgEsmT67DFkL0L8ePx1uz19Pv6SKuZfrcxy3xIgbM6jmQI7H8f54Or1+ebrf
nnlYOgxlbSQSYV/e386n58Pj+DQBXd9vz8c7WGfVAWN7Breucz5dfn76ejt+BtCmNVIhI+Hp+Pr2
+P70+XZ4PT6ljQBcVJq3XvfxfL9P+Hi73h5gI0PZIUmt4N9ez0/3x/fz8f71eHx8+MasQKerrKbW
4eX6Nt3GZcLFMa3y8nS5vhyf1rsGZ6K62xCbNJAbvry9Pzp3rFsDD87Xw8s8vCvdU/qLJ7Sf0FNL
kAQDcsTWGk/3908z8Txd3s/np9fT65Gl5rT6Gp3WalG8Xk+T3jQt/HJ4HACsasWJXw+nS3sXT8+3
w/0rWK+KOydW/Mvp5XidEN+7vLQESQWJ1Q0hTS8u84/DL4f78+00Ecb77fx0SgTe21HVsz29s+fD
89fpnXx7O90mwiJIBwutgfy5bVVY6fTlcr1NWLrmnZ0+P6U/BeQfL4dPE+UCSvUtbpKI//B43E6f
3h8L/X+6vnzfR/904FKUp6riLrfjhL/n6+Xp0/HztP1AheA52NLqHNbFrnEwBU9kCd6xLPMxnerw
/POX2/X9AnZgmj2q4gqRCO5HxKJk6X8aEI738xjidaBDcls8+OX6ChZSrek08zK/nh5fn94vx0vw
Zr8Eugcrmdacr8DF3w5fJqH0fkavJS1RtdgjiH4EUt51W3pszWuKi0QS3rMGnXnnS7mSHxrm4L7s
iZn7mk64UPH331N44OnT6eU0Mab79RzE9tvhdj9ysQY50GD7ojWVK+WFDl8Pt+uFX2mNkclgLsic
cnY/no9haGje5Cwxw66fXq8v0z8/KdkSpLH92hoJIVinsEKOnxjopce5KFTCAlofuU/TgcervV0A
K8F+Wojup80z+2kSPfJtYKX4T5sSZ3YDrTz3ZWtKclANjGnuw4qGeZdstHLbht21L9Cd7TQKrHmE
0fSHNvAkdD8z0JZGKldziUI7y2F7yXcURavJ8qItd2hjiy9nm4MCe+5paDoQfM3HLRCmOHyRJBli
mlLYcWBPrHyXOr1mqXPs3rOQjn3QskthXh/YT7vep73jT60Ie1t8GBTYjhzsUJ15CysGjkZ0/SQb
LNAr9si2R9pCDtyXSfYbcViVzIBnQ6rPSgbDHlr1XpXWLyx1j919C568yduILbkbfH9gUWZU96ZZ
YbeMMQHAjt23ofsuFCUCzQocU6K78a6kYMlE9tD9IlnWa0ohuz2yZHUDbUsm1kCX5tElxx0i48ju
W/SIW40HVsi6cuOipdSwLND29s0rRIrIGzKTraRtx75J12VEw8g/K1kqRA12YFjyFAXvbTxJw4o6
ysQYDjiwMtaQI8vmu2BluyJZXwyJOJbnE2WI451O8pxg7NGXY08saL714jspTjyyJ+7KVy1Ynk2+
a5q8b/QsbZmhy76cZNUCkmDH2RiDYb9tdanCta5q4L9dybkGD2Ofhfaqh2/D4pvkzjKaFEvYlDj9
Mrm2sk5YGafL77aeo+KRPZTIlg22y3Jd27XIHKv+GT/2NGYtWIZPCwHaxC0MaxgZ0VO3DSvXx1K8
tvRllkSMdj11xLGyQg4940Ro3nhWO/DFmbCG0ggjXQdezadJrwy0G57Z50xzyjljkD02lTbrMJiS
GXiWGYxdnFkeZ32TzjmWifmuSScdr5JUJl1DaLBP2ruumGQZt1KV2rpl+y+aVf9c712xCpwyK43E
IMfY4GGso4NkBnPvapC8nCxdBi2XlmNpZBy6CjPrVzJSd4EFv28qoQ0jJVnzhLzJGFNu0TZvxXrR
RZngnUPedv0sHI0t1ek8cXuWGSjd27Vlv0t8LCROWFonnne5mp66rVgxKfrcU7LKUN+vZBV7ZFGo
+WrL9Ef+jokZyiifrDakiKwi+d7Fh1lNXQ9dnm0ty7OpV8m3ZY3mLQzqoG4LG9480dQ13ub4QrMM
sPZ6Nny1mv/yeug43qnFR1ibzFd8pOVVYimMmmSyaVYJZ3gmZHrKOu+HUxX/a4kMye571N3nzNoJ
tmuejOxr1rrnU+J5thbEqBqbtD2yiqvu+mZG1s1rRM86EYInThrDYO6JJ23juy+SDb0oK3tSaqJs
ft+V5d4gkYHVhfouJdZpqb3rMU9WmVl63YAj8140LbpRCMuGMIgZynkbLK9qU9chw/RZ6Sq7vj/B
kvY49PDFxiA0CaSSUWUFgbAGLPWuGM6OZKVUV7qyglnoblRP8YacFF1HvjHsHRvZU95YdNFgpGly
PsWTte37waznKXPs+nd5Y0z7MiDZYCKedRcsXXoAkSjesyNVXzSPfExxB9dm49aG2gec0c5/23Vt
E15RV2bFeKyoaEQwWFZifFd5NAPrVrL9ADBPKGPXDydYaUNuOvID17or3suh+9kNbGqEsD36Zi0b
pftH9ryHeVR9X5plCdR0LW/JCitF9CEmIikFq+jrynXZchSz4r1mRts37VlRp2xXz2cVGkMj/QyR
sPSpafuR9nvWkvcxq55VxWr5iii9HOf3rElmxrHv/mNJZOhaNrwHz+8I7fFBIxJxikV0DYHFJt8Y
2jyEMdz5UKiR/fgvL69oY5+2oLUsBxx919nKsiHfjdB5VlVX3RQB4YYXVs51PSyTOsV71cvEnYZz
x/De6X7+jNTsq+o71Q1LYASYITAheI2IYIz5tGbTKkignlHXLe8Mo+4/2eZ/LML0WO26lXzI5kXo
bkqbtjwn6bunPWtmVD6S1j0PvNnfN75HHlir7rti3TPUR8wlx7L+fPJhRmK8CDZ4oroJVmzSjx5V
l+cr3m8pukLS835LOfYVQJZIRMk9m0ocm9Fmh6HrMuUNOyO7gVzL4nsYuhHkgbX8TTcRb+QjsZR9
GiZ1kTfBh65u4HjVQHazD0c23KTGHvvkpQ2JmivVzqwYWO5p+3kCLM8fhx62WClHLJsoqBppyLw3
3/XveGAxbUw/QZ/P/xt2vGY+zCVNV2AMvHg2tu99ZLWKoWsXsU4apbouUzaEoWSZz9s0+lnpbLvP
UWs+guG6PN/xWd9edo0b/tPS9TiBY825YewJWM8Gm2gGDOOUYtPNjRv6MWue73rfc1UINsnKSLtD
0Wf3LfuynS2lkP1DszqvUX0vHp9uLscuE2MzPY3fEQFhP6x7/izDsu2xH+VnvfJGyh5ljyxla9PF
lmBlnBddtmtZVNuuhSBYfBnTlZBsgryiynLbXcrWY9FIgmNsSDbXkjgOuXyKga+DMP0QiGTtA9pv
k+FfhneLm27Ux7GR41ofMa1wN+9eNj3KtuyXh75p4hQvproRtkndZdHd9c1Yljr77jvN2pBe9S12
3pNFM5zGtgdO86FQXRYFNLzLbAxC9TMWheYjAcp1r4p1wRlbqSPNTDjWr9PVhNgnqYgfjIn/Opbv
knAolzgz8E4hGvK2bc2R3TXxxjO8k61fU1r2bG5WWOihm/gieM+0qUskG4YvG7vQY8+O49PUtezr
2Syqve1GrdmKUtPPOHxh7SFLkB2bWm5Jk/VKC9cTkI6N9Mh+cgHLNk2/QlFo3iWjdyRl8W6/HYU2
rOLnumUQnneM1HWCLeOTT7j2PZWTNXql7NVJC8felHN9umY/TArmQmZoK6GfVZPN2CsNYp3KWnZ9
4S+KfU79ot+BfRSuy0HYKLeyZR5tizwUn8ImXN8Jz7dMGLv2jOazYVWpKbdIk3VyatHTBhwLS3Oy
1llvZR0++xZLdDWrs3n/qB56dqdmg7a+z7w0q//Ibg0CW6aihyrRp+UG54WyGHuUzWbt6aHimg3l
ic9ZEd2kPc/esqyyjhuikZWNY19EscLRkLpZxm3GepOF6plgUvDJld3M38lyZEPFZuuXDeDflqY1
/bYzimQKWdA2oS3cFWGhlo/vtyvLo0hd56gzEdS240+R0C2/bc8eeSSwnD9c8UceyyOr3a0LFFGX
bdFLa0fXGUVsX1t0Z+tXnMQXQbb9Q01nFOk/YPPTVLubziiSB2xZDwnTdEYRu9vyPu12YboinlLL
J4Eo7sPkpvhKVg7dSxYcT59toaNIFhx/VW3TVxEjweaSO7+7bYwisQubS+L13rYxitTE89ds2W0T
PsL57zTLhZYAl/3RvjGKFNFavrKybXcrEpizwLvCs5JxLMlz3Ns3RpFUYMun0LUd+Yr4afOXm/Ub
LBPT9GlwCYssygiFcihzrMQYSxJze5u3KBKKtKz2alhxQx9Gu4JWsuJGDOWB9zdvUSQLxPLZFFqy
wCXfbkYguIehKY3IJjMY2UseRI/xsvekBtd7zbxCogjHj3q/32mIKpIawDMwwx14qe2eX6Pf3TFG
kURcoJEY9k2YLhMxrEYhShVM7m03o0h1t+VT49n3NOieoGGF+pKSDzRWf2A/TAhz/IFWNYq03rOg
dYBkhZRWPX7tWBbiKnTZvUWoilRFWj6E6VnKpATCcWvJ6hNadnUopt+MIm3/LHCFDey3leuxXcNy
AkOUzna42bHam9c9+0Cz31V9bCuWXzvfJTCWfTnVvyhej5G6xzhHy1PY0DMhFctGVKnfNymEVVgN
ueX4qtzejkSKVM9aFPZl2a7pAiv2y77/qFjKXpq12tRYt1ELxSRDKNLjwbKuIaZZjSJ9McCZB8dL
yK7NrnkbUvuu+WpY6KXEcf6035tVFaWz6CmdijWK5NjnvY7lf0QjGZsSVvKmHLFeucwCz555ifuC
u2JftBElE9vd5yYi2/Zu6oXVhKgnq02ekt20GEulU+/ODVCkzaHlfZeD5Hmv7D4ry+LL97R0rlWN
Il1bgNIqWGNMjd1PO8XrUqZrswte4piunj9q1rCxvX179j1TdDMOEs0aoLZrcktei7NjjwsxIWtF
OmbxujrTq0aRmg8eX5Y1MKzp6dsjK6pEl2mzipSikqodkBxZi3voSznPesQNPXEb1aNlvzz2nqNn
1T8/9jzxTvP2xQoc9ddhbzs2RdJRgXAdPMtEVFfQsDxEEQ7EVC8wzWIUaS/GX5RizUhZGiatMij2
OQ2+Z9TwXHNJLrd5Doje2fBFkX5CFiWm8/zalehSe5uwK9Kli79lVldekhosHzke2EuWXfLiSjkV
CTvzGFPseyQqJ0ebrJNUm8pXKXY2i1EkMQoofrzvbehbNULw6kQ/ViNYt46qGKfZ3WpGkSaclq/8
YsNqtndTbORBjV1ZwZpiivpGmB4krJtB0w+3gRV7Xt+TjUx/f0XKCgGzF7yXQesuH+Bpk8gZjrCt
5wmk6w8SvFmite+Fbb3go2pdhyXX8UWRxlGIhY28Cdm1p7iOL4rUEQCRYflvK9OLPvD67tK32eZR
63ZnxxdFEvBsztB0u/vXKVKIELY9cMoyr6errqrNyQzpd8TV+Hi19v2cCNYo8kMZvfU7W74okkED
TDnPO3lNV7HgWr4oUtzDq72SFRqKaERMBiDT8iWKyrF70ZoXlTTk0+7b4llFbui6WwWrl2iadcP1
tmWBVZdAteQFfDfazSrrSohuxg7T80WR7Gf+qiQrpYXueZi14b2Wpu+T501+1ZWWgs2QWtJ5+Ycx
8sFM0Q86867HZfQGcJKwajNxNkQ+NO7s+aJIMp5l8709e82j7Uf4LcvDhjLDSYndPV8USSUG4V/B
Mm7dTV+RrEdKyH5iFktgos9IrGNVg6HH9NmMCKWqJBC5t+WLIi3Jwa5ZfGk7dD14rFvcDKUK+QO9
+hXJ+Z4j9WpvzxdF+qIBq461J5fyRuDQ0rzh3w+xafbLg+sGjwfWiye7wYAXFl/W9RNq2Q/X+oze
3fNFkZo5/kl6Pk2AJhox9Mkqzdp1U3m5ni+KlCvPSrPa3VZIkfoRhDNeWvUDdJZlJrY69bi3ZEaR
ZpyW76Uk+RiGNV2PLW8eedfTuUf2pgfVexqetVBMN+YzsOxTmm72HntPlAv9QM+XuOeh56zVmk+b
ln3vI4to0TcRFO80daqfYcArj37snZrr+aLIRBxecX1hFQPbPTVvfC9dEi0/F5B1bPmubB9ZUNvz
7zD17IoM1eIdBpoPvWjR88YxA1YUGb1r2W6Bgg0daz122QAbABlNz0Et2MIPU6dI+d0dXxTpR4me
BWs6j0PfwzKw+y59ac0WTiy2aU4ZYwqyuZba6K49xopmWWsFfm/HF0XmeaEcKTYvX3QLk9i0VmX6
0XLFy1bfFzV86ozdkc7GezlEVyewfLFLP5vD8aUftMSH0cHYBJilwSzg2mzSju+SJ1sOQGqDuGAE
65vRJKOCHdrLy1fh+5UIbNx6R0aF4f3q/U871svh+8UuihfsznR9SpKP35jKNW52NpxRZI5sxlgr
fOMUT9s72CdrkmnRS5+2bCzBdm0qzUpJXRpzLaOdrVcxsu871Hw8dKhc23bv7FxF+rkBItF8HILk
58f6SLm34YwiLdmQV523nsduwrhjBQ4Ji4bA1Q90jVFkbAgfnGRT+OqaBL2z4UwMQgxlpMvsbDgT
Ybs1naygUrZfPsa7xc0ge9Ajy3hFN6ODTxdXRC1g2hmx3ihFYqERdnfDGUXmvYHos2M5gakSd/ze
WYaKNEjkNV62LMl3S0kFyzeN7Mcy+ZxrrfuSXfLQVnSdBSwbqHJ+9necUaQ7GTAjeeBB9kKwTNsY
RfqLIb7JGghD1xHF5k37btD5hTUP+ion0/lFkeY+vAXKBruVNH3bgqcu6qJg+sZ4Pmrcd+qwiUq+
q3OOLAMauuhybPCVJEjFMITZPbsxMoIqY8jsbautSMsZFD/gyz5IJi+nBGk21r2nxQSfBlL3PFA7
27coMl0exAPZZiDaVQU+ZucA7ijixr7e98xyEdmjMLaYSpl+BNTwH+66wgVb9GvE0K+fYGVrXX1m
9nWdiUl4rmerSz6hbOjKdK7rjCKdhQgbCeDNpjPeflj+niwzMROn0rS8AY6Ne2bBozqVwZkmoPy3
48POwG1aCyFgFtqs0Jbx77Abt9FOyNDcgCvNnzsGbjK44GarHlhwp3poC0EjDlqu0IyKMQlN9uDk
xhg1QbFfjow8Aac8oHYrFg5c+/Lbrp0kxhIboZd2FqT3PKHr3o1JwSLNyJJSZbMTAgdtV0qNIxYa
9goLGy1pcmbbkkDsE1mBuQYO/JdNReK6aaKxNEr4SttZIz2PMEJmwYgf2+mu7OsyvZ2HSA73cW97
HDH4jdnnZbt8ZRJj7AMhfGHgUtzYCxvLY7dz3DjocSgIrRV+H3hgX/KzZr4Xi/CxRPjYqpdi6cz0
eEJMEmZJpeIKjVotdt9UdDKGz8gC67FkhWO7zxJLKLIkM9FM4WQxLnt3LRVPZrbceauJGC9AVkLh
Smwtz8Ot7skuASic4qytrL2w3NCNuiexPeCGSpXXJZuV6yyhrZzYB1prxGVY8VHxhHbCGavlqC6F
G/62akKxzSQo9mF3uVlMxmQfyNjVsMDHhehxlRcea2OXLzjJf7lUqGWz9zj7NEtlvtkEcuRRVu3b
t+K8rATQPSYeYtssha+3FVokyHZSJcvERZep8Dt3upL3LWiep4geT4ld/tgHZvoPjL8wqqG1Pw54
6eD6F8abT8qXn24pxLx6pwv1rlmnzKtYznYV01CfyMq+oTCeVLNkg+XjtrA5WyFyHliux2aSohTP
yKnFyDUk4m+rS2aKvy1X2dlDMxGM5WfrZTETM7Tk70r0Pq15juRLzbCZ3MQzcaJMM05HninILoFa
nkoGX4oe1yyFYp/W0FPO+DPbceyhO5ZZs2y40klVs2SZlV1Dz2C0vF9iEKXUHNrVlSwb7mvywMom
1iorQIAfy3SVLMW/EOu7B+fNNmd8z/qJfd3Yg48934QD5xZjz6ciwDOxtmcph5IEVuYPvYM7XmEQ
RHyFXbQiR7zCYEqXTLv7M/tCK7201e+VlwKqpy44nsjl0PO2aqDfed9zRAkPDDfX08YVzxGJg6Ct
WnpeGZe+a6QbHmXG9EjU8RQqV6bCNZ6wDjxN1fe0Gv55uN7DDo092euyXVNZALuv61nnVRUlu6cG
KHdjjxGHOmJWfnX9y7zglX072/LoVuXbkq3GF6xCO+ywX3iR731XFee1UuJd4FJxDK+gad2lUeSf
dr73OEMjHBZt1bnHZk8/Vmh3jUbLS59B9rwqihcBRGpGlNtWjRX75aGH8ZFXNVRpbjY1NN5tSL3q
gmvmxV+X73IkxZOp7bqnefWMmHzMTXteftTcbGzPt2BxNnQjEdYDCWK6qobjr9v6nn86zqlgXWhd
MyZMM2E54tAR+Rp4Nmhk1zYVNMUzcut6/gEJ9BwitGMa6Nhsrcrqhqpr7/LGsqrCjM3kIP62h64J
w8sv12Vogke46rrlBe9T0bprQ3ieULTvOailAOau6ppenidxR2NmA+MxBeqhc32/Iy8ItOlxYyD8
iMbRDmbwDk87ulJ8uWabQfZl696hDU+lo+36dHh9eujqdyAIIyuZrdt9eVhKkV0iD1lGrBEjehxN
86/TdR0EkpedphvZVbwLjoQEuCAlf13C9vxgCjiyXNd4cgp4RYgMCPQqmhN02MvWXbkJHNS+K3WB
xB+68TrJXxd1RDE9InhPr1MlM5RMZisrvbreP54tSN+7bA14iiydd81cSxbY9PzELzwHr3QFps0s
S6Prp4MINaKZXM/elulnHPKqhuk6W1+Ac2GUPaQp3nXnqsc1bfz/ZvCnXw630+HT+fj0cvx8upwe
p+uluU40FsmQex3nKyYU/HI6/vp2vT2e3o635+PlcfhyfDofL18eX+9xmda//3K8PU7Ph/PT4Xz6
cuG27mkiWLgymRvx/fL1afrN038deUgStArWvhyJqgF2/PTL6+Hb0+HT/Xp+f/B6zEjzQYLWSmuf
4PK/dhf3xFSWQZpI4/fu/XTZsfzQ3ntr5dNr+IkxTTzDJjZOGPZjmkcwjWPFDPq9OPjKr0nUMBXH
T4i9l8afnjiDTPyh96355fj46fH9DEhsxWsQj97tpwF+tyTjQMf8/L2v4uuON2FrurJ//787DarI
X2RrVO7n0/lxvCVOcvz8+fj8ePp0O335+rgc7/fmWtHqH1uNjNJaE+t4O5wuDw5YkoZVIZxqE47y
x7/cDt/vE+c6Pn39lV2B9I4KxrG19PPPXw+XCbW9XdCaKhUHcJjyEF84Zh2hm9U6+Qy34+fj7Xh5
Dmz/fHwcn55vh/tXdi1SL048tXmt69vh+fT4jrBBiiZNbNHSuIwJK6fzy9P58H26bP5mqoJT5lTH
b9PKl8OZXYc2mFnLVPI6z9fXT6fL8YW/3fVmgtdlFBT6fnw7HRA2SK1uSITJ3DJj43CZOG6QwnCF
tcgmOJxGRVY4vjydLudp+yy0bQ6+/foeSRLSFOk0E7LccgrK7fh6/eX4tPNtkbZCsRuecgX2Pp3f
b/yjNmVTXr3BO48yMrVoWGrha8Lh6WV9z8FCc7p9Z59v19enyxUgn9YNhgCI0MVjeLtdJ+Y7vaaJ
Bt8mXvvydGdlhMo60cxn4uaGNjXx+yHVODZaMcyTChu63k8Pfi+iGg4wFLdzeLzfDgCa1OnFfJss
7QNfeir4Jk8dQ2sC7PKmL49pLZ4uB9WsH5tP/fL08n47Xb70USpoG+XgVxV2bPG7+9fDy/XXxPAS
8+O5HqkbV7FGf2hy0HWznw/n86fD888dxl6014lyZqiZAVmV5wsEd0MUOAxPe52gTjwtEpHlopXj
2rQ4wR0f6WXsE2DSAgFG1w2c7OXp1+k2jpMWdHkJNz6tdX2fFCJeKpFxL5G7SltI6tfDfbqI8+nt
6Xp7Od74x0xYYwijK8m8RSAaaN/J5FfQ5CGdLr9M9tbL0/vtzD+jajhcuoPAl+d3+BZNgufb9Xye
uO75M/8S1gMF0WE9rwXtITNaG6/Fyjszfl4m3plfFf/KLVMluqgxv54eX/csJUbadjzoEKIQZBOq
J0YOtaL1qkIcwlIp/nR8fZs2M9H26zEgB1K3rkpfh6ZYvkykN5EzL5hlq81Dk2nx/MS1WDBDOzzZ
0OESEdUOsBOoKBFW7PTKUSLg23nGzn1+GFhWko6ZRP2pBBx8nCuDC7txbicX5/G93ln4ozFtfhHZ
TmBlaG/rUiEGmrWyQv6uiN/DR0g7xMjY0t7up9cV73uosjkRZvvioTFGm6zGoJPKL2RGUN7O+9tL
uMHpgIfH43b69B4EC1Q6pKNKh48WCkHc11+f7uH/To/nrzwjqXpO+vYlHj4/gOygswSob+76+fP0
2o7Hy0LqrxNfuH1/er8fwLGKJppBhxFIh7ldHwfEuE3VFKDBKPmDyZbizmvekB0QGpfBe986E7JA
JGlaGTQUxwmgp8vxy7Sxif/eDi+nd151oI2ydMwwlLU5BE4kyBweYglywvrtMJHSg3eaeIrr1KOp
YwxA+WZLm6kwdKKYnWXu4fKSNOBpdZ6IxrKbhsa8jmd0qjQiC46yepYg1n3p3TE9muwLKqIpmUVT
Ory87OaUwiML9+v7Mb9S/rqGcnyBbblEIJulvSwCzyitlMW0najwHoRRFiL8W1ufRlAkvW3Zc3BD
TZE2XW6UrYkd8hyw6pAht8A8rO07Hzv+CtLbI5beG4RKHoV0I7E4QbepAqJxfXjBMZq9ock6vD8d
v70dop3Ei0jR8qZSPjDd5OX++Xp75TE6tBqqXt4npjYTxNcjUJRIw7jogpHKtxDKI7Ldkn+y6d4C
KU+K9u3zeWL7mdHGU72dvh3PT5MSHn5jdpZeMhPmnzERCC7+8KV3b+a9YdWX4/15YgwH4G+zFfYF
Z/peDq/AO0N2Fe5CMj5xnoh8OUBCMFz3+Xx4fcOqqiiGNAcTVfnOavxS670GJ4txtddnwtB5WpRX
boQvhYGTu4QBLwl05T1yA9C8IgUizUu3NK9/hm758xMe42JlSMLA/ev1/fwyHXniM4dfjgXdRqcX
zzB06QocG+EGXozploXPxD34VcaGWhYWivHQFIyaUDaR2OfDy6Rf/fKl0Gi4ENdiZIv8MqWd3TPL
WsHg+3K7vk86ERt2FUTIiBxGEPVCj9OZoQxB/PBRBQrNyjb7OB95vi6IhKxystcVuka1IJxZ5LuT
cx0AwW60GfmTDOsKoemK3cL/FzrHLJ+qvI4VfnkliX7RYcZ1K7lcKD6F97cQV70DP44gMcsyN/Lz
pOk8fT4G98J0lOMjPKA7lPyChErm1j0JKbPqFQOyl8dX3u0sCHMUxVDTn8Ov11T6NHwbnj69vvFr
rdRKGFHwjE77Sc8pOEjfDo/gpQzu3efr7cIpaIJMKxTZczqnhqzrPJ9uz+eJ3x5uX06Xp0/XbzwJ
EMyvaUXRbzsx3An3T+moh/fHVXKrLNNrRfbMyOyPoevcJwYxvS3eESzIbL94eTrOrquO9jaZBuEi
0aE8IcbAIaQV9SrX8/cvk2w6/nK8XF94XjGuL4xm5C/rrGz1/X68/RSO+JfLv9/5J0uoId+dARgX
PKJIRlJMPTFjtbVISzyKfHnvNZpxsEcQWRW48BDC220aBAaDIDNxRfYsqvZF8fhUZeZEjYVgLQU/
MiQXQr3hPUgv62u+XoMIPSfHxqdwP/zzJMwsmiGTCr1e8fn99XQ5BIL5EvwjnD4sSItpscSLZRvF
M5fmDygKJG2o+Hie/giI1tsWk1jh06PGfIbi2Mc9MXSfHziPFt9eqUYLfxrdlHo1VncxGolf0W1S
vQ6XL2AzJLOQ4b+Jb/awItYrjgeUnpEJe+6K8Ci1BqQbTO/6edITfj5GZfyv0z/xx1yvn7Ra3x4z
P1f+mETj8WkuFkNGPUFDzmijbTe28bW8+v4rUwRtfnVoVu/+DdH2eosxtMUdroemwdUcTbS2Minv
/BJEXw/Ojzm3kW4m2HTP17fv/CKqllJbWro/rjfwPqiSnHyrmAk+fT29vBx5geEJBYUhCQOjGUwG
638db1d+YwLzxHmdNaOQX4qiWkdUcS+OX4PqhFEBZ+TxHoHoSvV3TmYMGsnz+XqfmMhteqz36L1O
Tp2vx/uRlYiCKhurOv18OD/n346ehjnlopP8M8fAQ76lKmJjmbWBuMMc1MmwMT4ms6v/fPyWcgun
37+HvRhnvGAqRaMDRq2bWCtFZ7E+HeV8vU3nuL7xe1HrOVSk9EGslk+0Lj5PmA6YYTL6YmBvPRBp
wzLd7+zC4VExrqiIUevZkj08nr8+vZx+OQVr+PvTwH+bXMTqHdyR4h5zLPz6+eA2n5N7FqfoPflH
z5zzPi4iVxSK+INURoS7mLYx3wl/EXPV7zwOQOXkkXgRr9fLNYonHtwSmlr66AARFLHvS6B0b1+O
j9/mRxCTpGcjrsNHUgrTsmCMiacjPGKRQ3hs/PH1Sggp1WS9h1N6l8F855+CUa2j5Ig38SkG4cFv
whBqHGPmYo485IAi0oHmVOF5AZOSMrJTM7zEr3fwhAgRjev5I+ZSPsrzpCPz+DMr5qPEUvkdT4I2
1FQcb7frDXAB36Iehh8pfpmVholEai/DL2KKB529FTUl8IiwLX7wX9fra/ISHl950JE8wWV6Uf1l
zcObkg1qcve3L5/4u2/SLuFBvHs/flYQJiajG7sg/vDunt4mTnz6xvgk54TY+fBxYlXePrk3KyXT
biEuIFvC6NP5+vxzysIL+tH58D2XtVzfH5x3ILImws+Ss1YtIrtHzXJ9C2ScE/Gazb5E6MmLuyAM
wScNu6IJ8CKJlF/VvB4H0eveSQZgvsr0mHlYgrN18ETIR3/6egxxGf7NVdLDLqKHRzJhdavbJG70
9HkSvaznJu7UlY90KS+68q9TUua8vK7EIbPeFUQkRO7K5kgdYP3Aef5mdEvpW1Qlfuu+xdKSWOXv
xLUkAn3U/Dk1IduY0J244On1C96okkR+DbmgKkC+X07P16CKnV5OT6f7NShET58O99Mzq8IT8y2m
yshB7S3GFiQzq5xX8Gn6fE7M5HV96sEd4yDndE+TIJp00ggS/px0w0k/vh25FDE7x9jy5blFoMyx
wNvjHPTs91f2IiURK5TYY4zj8O10zwHATwdeUXOE9l1M7szZne+PB3hmlrzRNSU0xkAjV0gIQKa8
nWtmsmoml8qPiEGoXspBl8/Nr4D/eL8/Tp+/d789ENm2hq7zTa4Wd7AL2TUEEa9j/JHebSrVeQqL
sbBEKyfed0I9iB973br4CLwri8TOxWwZ+WG5xJnTt+eiQFDBEKmAKOVicZPPOJwe8ZEtWZrzq6k0
HddTsM4oOydqkasb6Lthv0Y2Swz16UOHkK14D+Zg+PSky7/yFz7WarysCP92nCjnfnz69XZ462OA
aKQxD1nOKWKX6+X76/X9/pS1nOPty7GjntqVw65thhZkZlPrHgkas+pxpWpS5UiqRwM0KyIkEYWR
NdhlIwG1s62X9QaUiGvnBNiN0lJT2Hw4ntJ8i9Mm0R6pBj0UTUWXXyNuEbfxTKnIETpR7RwJJkaM
yUrC+3S1E0r4REA7p6nnt6bXasvlfq+34AU4YM1xJIv4pUhxMULjalGRjTVR9zuXwmvnGrPZOFju
eVmrhw1J9NEY4E97ieTZuU5hqQrvY7A/0Wj0JYZ0ql9PL6G++Xp7fL1+QR4mSc37tUIti+6Unj0R
/KdzwEj0WnUo1lbuO1tQ7MRcr7cQOLzdH388Ph5AxgnR4lf1M3z6z/fT7WfwGl0pZtbSmCwoTvxT
Fm7Fc6xV95nRTrbWZGRlc2tioC88dm1puIpCxcnFd6nnw9PliiUmcalFzOoZIbGk6/n9fLhNbDel
Ik1a4PFO2foT5Ou6epl+tq8n7es+s6qQvvDL6fD0uE6c/TqpR7xF4WTLXbEyjHT/gXPxybJ2Tr7d
mBV9MbViKshKMQw0zbWjlkrqgF59rhtJwjMZopzEIvV8U/FNzgViwb2+EBLMErdzVtSGc66vO13x
y+mWXO3gOVSv3dFH1RUj2rQ8QC+n+1vwPsxvPNDJF+CAcMR8t4vmSXTGjkdSEo8euaBFB+E5NnlA
qfWApErnl0mEPL5mZ1bvkl1lpOtaHHWF4Xqlxi6iiLC39OrAZdiW/GE0sa40UpWHIxHGf00s5AWw
JEt1HbfWCZUY5dV4Yv+MwbGdKSHI3afH8dsDq3ySuObJOB1CSRuRg8iDuEFqprW5lgkvT9FBwrMu
Wxv8OXaxT1dyxNMWnH5KqNpAKjVJHsnNY9WqAi91Vm4WYpmjzjh+3IJ0eQ6es7TE0+Ht7TxJ0/R+
oks0/QOPcFcqt77NCHh4wsxECiKns81OyNKMSxvLdvHx5YTvj7r9aW54beOzpcJ27s8wM8zYh2Bz
i5Ps5q9OFTzC+IrJ7FIWRyJDo/s4m0YROFPzy/fL4ZXxOEWFs+l/X1ERiKCiKB4nuvQ2mtUODTUo
6dXyd960YuMmAqN7QyYEcRYGdqdKVXd2sB5ju5ZJLPNcT7Wk8SLN070GBQW8KtM6xhy/z7cS6XVx
YQFZpNoe/R/mgEK2+OlKrDyhrpgN5q/ZOHOwI094WagEOTd+pa+9Ti0atldh0ennqjNOqvrly9ec
2IB9QyRmuOYZV14J/rWQ+ygaW8w+gMv8agNezoc3uBdB1Mk19X9lArG/HUghGGXb75P3MpN/NGb4
TVTKhqk20QmHj9Qo9DE5gnjbem4iYWkczq51TqkcObYEiHUf0+MLWWthQ9hx53QrKhuP07PCBtVy
pcymUt+75EhaiGgojr0w1kiEZmClQtWK3/3rJJp/nsy06cWDp0KDaGatyGKEJ7JOSJqGDj4eMyQJ
UxijPDd1JUJUwZVPl7f3qG11QgHE+5cb641LqkyqlIhCKkTsoftOWMe5lgkrDXxosuCPt32ejKH1
eNbOCOFgs7rOI9m1eHPqFtNzyVQSl+EAN+yJJPSSrC5RM/klNYhePM/zyb27xfu9BB5+Ph7fsvCb
SJK3gnQrEEO1CegpkAxnaetYgTkcfjmczjE0itOG/FiStaux1eV6ft1b+GMOkDMxpqevk631X4Es
u1EzEl+O3GjSH6qVM0nC2E8R0FwQT5XKvErUYnIY+dDJAY8PkNwobWfJMCb+wRCZM4SA2fRzl0k3
PYhpn4fbyx0SsBxI8CL1yFQVy+HPSDRRWQqB1Q+R+RUvSXzpghApoLxmY0Qgkpyxt1hHzYvPpcXk
YWyX62ctq9mVWpTaKma9frK4mv0v83puzfHm1kNUp2ZXxFydSfLLuPP21nOkZxAtieTW4yuC1Kzh
F6248Gq9yyV1z7TACG1O8qvRwta5QGwVTiFBLLRvfAVp0oKkgpM4146RMIK0yOOnmzCTPAVpeFV1
l1/LeosWrSuCYiFpZBCdklS9plvEzM0NXZGV6vrD5yAO2ZVpXUhyMSmw9pK83CtOWloeihxqS8QR
qoHTcjHvjj+vaSGUbCRllQdNnWSPxn8PnTgOd1BHLUi7m3l3rl6/W8yhVrwF1pGDZ+v5jt+ez+93
VB+nfVnyIvbd6eHxODx/Tc3P+JxBQZo7iewwkWpzzOzNWjs5Ll0TnnKReixQ7yBzLInT1l/Z5Pny
S5EqhfTD7sPKJO5SJWu3eImWvvjYc8Ejgj99zon6kif1Fc86pmNk51h7xdw2nK+sWRoVitx5YQSr
3ScDIPZWS80yX47P5/DfiO4kqbSjjeNX2k1rxT+zqxjRqmxb15h0n59BlY22ZYW8bm4B9NQTpHlW
OTigjaiX4+fDBBtihe98lYyQrZrVLvXlIpp+PWBRVSbWdpjrwXMaLl9HL1sFxyv810nnfDqzznxB
OnWJwhFLru70uVdNpF2rHzlDoqdQ4JhvdDJ+ut0T5IqkqNhu+MkP9UsSpIeUKFLHCdIASZih1S6g
SxJrEnO/votUrGYGIlrS8unl+gJW0c2y1fZGly6P5J9Bf3FBuiDORZ/wsWUKmtMbQp784cGvLUgZ
oF3SWBhyQpyTFAPSgqGNLOIphVzF2gJtvYj79fOj87xsW3fZqatFnxCPqKGuSvX1BmNLQ35zumjD
ATGd7g4ramLlJTH6ukt5hGr80lK/0nUJ0rKaN7eATSwzte0husyScEQUmX2ddgRpui2K5lC1gOo1
tTGm9SbrVdiqJ0H6FJXF1usS+SkDiTHs1zPDsvjC5cr5Yx6I6xIQvm057F8P9iITpNu0KBr9AcnB
8wFdbmsjgzrcUq3HCrHzcScTyBbzJCXTn3iRMdbV14Khi6fD+e3rgSevscnWfwDpypTiuq3KLXXG
/E5k661Ao/k+mUI/o2vU6zW4OIdlD3vqcLxVOwlakBm62+R3J1s2MtnSWvjMY5/owMlNWWvzlyB8
zzx7EC1VjlxfEHZAohhXNnb6EZV5T605bR1E2wjXBNbpI2NUs2AFG308EZhS7NWPL7e8hg2xmjpP
rfJ9er8BI0q17B+CmNDIIYg7IKB8y5zA7LfLPOW6rzjUxidXXqzyfL5OJvr9wzf2ulfY4E71cpmT
JOKvh4yuj2va7fp3uFOmIyWQJkdTcup4AJ7s5iu4L0dK/0whqOZw1Uc+t8GR8s0waGqil1zi8uuE
io+oKs6RajFTpOjFXeNvzrnlphjkEwFDQh7ju3Oke4LJHN3kQuEQoOzud44Jm0zXekmu+QiSzBwp
czYptWbuK5iMh6CyfQxkmEDTUh+vnz+Gle/8ms07fz5MBiMAGkrM6TUeGHaR9U4Av+JPxCzr/KxS
VtoOeHLla1nVQmorQvgV7HrsSAZztPh8eD6+7NiBWXfgFoN5DQ/u2sNK83MTxNRw5HC/LzWoEfB8
uj8+3tHEt6UIO89QzZ7MFfAjbEBoSIHqLKdMvQKvpxrSAKJk1wT88f0NQK/z32Juk6RJzzzUOuww
OUYT1/g6mTcf+cCxIS0/yGGXYvePh8vLRzbA9xEono4Uy5qcclxbE/giHNnb/CRrhwq4CEdQaYqS
FwKeHOSviMHJ9YFF9lorAx956e8IKZki/aYDs3LjpprEA67PyJhUSZYDxLUYjAxqedsTk/94P95O
/HAeQQbhhWKL3IY++dA/xlbBH2Ma5kc8Nk0oW4xpmK8krZOqPD7y+ZxqvhDSYZ1kYPC7X6OjpE1r
8VX+e6Sdv1/4Y4Z9XN/2nZtMlyFFCHmV8/HzXvRJgD445EyQKS7R4NX1DngMkBkkcrW76d33tr3e
WWTJIymbjzjswJP22/EVjXQH/GNSMw8gnYy77XTU3IooN7Qelu43+XudvUrfos98VohnQ3tALzSS
YwWJSHp4cuVsnZpW+QsayTzBZe543nTngdAm+6vombed33Rv481m1fMaOyiEtMePepDcUEj33lyJ
fbnylY+gwYOaWx5tMJBArxOBBz0a6lFq7vtDWsybzSvjb0+Vz8Nsb693etLinNi88wX0bs+Us3fq
580DDuDWsBjQ1WiHuV3m8cA/azILIybkb6iMJ6+hNYsin7CHWlMeUm14dpd9+nIIlOOEZpfGTUt8
TEbay0SkdyABhpI9DE0ZyONdALa0Cj/+/KKFwYx9/DTIEGLy6fnKdwkvOwKZS1Qffvum5CxDLRG6
FORaO4i0/rGj+KwihRh3xfH5c/vWV3uJaGQuLolBlLTao1JVziiyDYHCf1+1xC++IDK0j3ZXIfTV
vaERbRlKfduU+vRx9LjD0OL+5HH2VNOKt5leTyM1t0rMLGlYWskAr42a+5ttpDxl9929lrOTAyOK
iL4f31+uEWAOV39Mf4flriGupNJaP1yevzJapSFOD1G2UgnJ+Wc+Od8Qd0vpXE6Q3MkN8ZWVcNUh
kyEX4gBcVzVDvH1kqeTpuj8fXo4R4vQaRi1wE3EM6dY5L5LrUtIaH3n12pC2bmLVNpOFez+lLq45
ts0a5oZ0dJv96rNl/YqvWxDnTMqi1rnX6vWdreYzpNdrmYYUXVQfD/cF7Ty8Iggjtcuny9fJ9H4c
LsBHI9YbI06IGBL59ng/nHdculjpLg46ybXPL/v2vn0juZfYI09xiRp2/G92EV3del2B3gMnBLey
2PfbGYBIctfL0w6tmEMrjDRRKKQ1hkKuzsfXy4uxjznUcL1E7+Z0d8mtcr39ergFn9Dr27T8p8CG
QADEECeZSNNMvZg92ZdN7CL+3S+H2wm9S6VKNLmls93HX3nubIgrWRSOjgj5+fB6OvPOR7XebJzB
a3DTQUN8XCJT9zxNNH4O+3cVuVVVnpCthDPE1T5HY8MdRqH1eLzl2NB9IefrzzPWc07af75fQ6YI
nxM4rH6DELcJBQi5xG3JaY2Lxpowzms5rMq2H7PFMpmXaZk4ziWsEQag3Y6p/Qa7TM6NCcvErOOh
nNmbd8ODuwU8BumkdK3DHL+9Tdt44ZcZ18OYGDdOfPMf99CzIxbohHOFO5hOdf6eF+bXs8t6sT1A
jlR9Pd1ile1jXiA2O/nGPbxh9ev5MWucIovUuJUvK67D9k6Xp38AVJllpcSkksf++v6poptcYX18
PcWQ7YVfUa8rxh9jZgu/Hj/dr88/Hx8VwX79/umU4iPXNcfx6evxwInh2Nd1XDdO5rDejzGWe/00
Xcjr8X6PPV5jzjS7khaEZkO+yVz0H9d6fL0xmbkJdt0F7Z4zH+J4if0qz8fLF0aFT2chO0htB3Jb
0es11mFP1PGdbZ0U90EIgkzKzE3qj59DHebEjnkkKLO+ftIybCLE6bOgtUT8+KAJNY5rxfKv19vP
x1vmRF8Psd1B/CuUnRhXNPRKYjmay/t5PsbJM9MN89DaEugQlxzMeqGH2+3w/dN7SNz85XQEV6s9
WWWISxV7IAuBRQh9xA5L5F6mh7kSaQfFat1MTBeoqB1sgPCwWIM9D1ebt1BcDNjAuk5oYDDSG35K
ZAKuc6VOG2oR7Fhtovd1vdJDqOkWQ/H5LjWpku/m7nPXp/v7p0lNeVwnhga+TaibtqhKm4/vOzWo
OtwBV9SKyKRUeTWuy4Cvr+8y1uLMtYU1LYMVXEmCppSlBAd3sIgE1x/aRExk9HMsrj4HZheGXl9e
rq9hBCe4F0Ewa9cR49PNrA8jkOj3y/MT4+BMu1svWA5jTP4cxByGD7c06Rzvl8jK1pk9JziINTFF
297gcbKvkzyctjpZMccLWwEV17HrFcT0vMTMVrTFTuI8uFspMJRK+mG2HmCGUpILY6nUjevU3Omu
wkwNRDrD0PpwQun7ZULl0yLTARJHcjmR8Ifq+J8Pp3MYr7Fg8t6V/s4U58qDynJ/aIAOwgnWYek/
9pIV4WYxE3+ez7A90Ovp/hpHiMwvrH8uR0SpjpGd5bJTEdvErCea5ZqYJFazXpu3S1Lu59vhy2vs
5pRGZ0+7mf7q9Qg2A64/DAxEl74iOlRH53r898vbIWjcE9OZKP7L4RH7Lj7lpw6uzVbqQGbB+5ng
4FsoifDXT/8IKa2P6/0RO0zyY6STxqcKUTSOxLIAJyBX4pbvp+7bHf1U2ZXeAidwy+iomMQLxYci
ihR5/8urTdf49DjcvoAnrBVhQCGBwjD0PnHDZ0DcXhE1YKklbS7z/hbSlI/d9+LXndlx2dnL8XNs
DR/pOzDJ6X8Qo1PWEAJzUQsHR7xeLnlMU3d7sqV5BKusr3cQGzg2VB33qnyCilUfLft/QuSrkbCi
oEOIOfPk8EIlPtRbla5oN3OzSygFCT1Hws0ADUHqUu0YdqhMyg7tja/iBcASpK/1DD+k8g+VqqSo
6yH0j0EqEXE52FhzPRJNP07gAbCyJmJWLh2+9UxSR3wVOrC63FcEKRvDSnhh7/nkwSdBvSNvzFNx
lefIsLsP1uyP6Apji3vtVP/VWEqO/AyZXe2W834oNcK0apidOwnCS3TaBHv9lHqwxS8B9qxK4ZZD
1Lfrz8dJ73189uB9ukLEO+50byFdMlajBd0RnGtlpLEPD5HTP+CQoRZX7OE0zxsIvU5Plyy1wi7P
CMnEdoo0TJ5S6tVdGQeAsglxxnTnIQnh6JzZqU2NunRYuVkre50dRIAvOfK2jU6+SLd03wg8Zb9a
Z1e0xJ79vlYPO1xZOdGSalui+fUW0HN4fj6+PfovwhaSolA2V/Mt6Oefr7cwNvgZaD1EnAeOLrKq
EbTo6d0/bodTKpk8Q6eL9CX9+MK3F7B9urzz1RTpWGPpuPGtY4GTuNoz6P8JV9ZQcUBdu9NnhQap
A5aoIzL8cIs6MDHSlfXNVBjsS7AesdljTK9WuH7IlaCcqllGzt04XQ63709s0nraim0aydfn0IAE
YGRsBSkCjR0ekynx6f2BDAJX0gV1iCUD9Gn2/gLq8KV2ZQsCJeJtNfbRDVMeE+NaRs6O09svM7sE
bNu1AkjTbwXoSWnlYpSJRMmTNSmhtKHKB8350+fTBVi/ytrS9JS8Jr+XNYmSNYnyYNe3Z7ZpYzrb
uqMibF+eLTDygKSJLVw/fwbnU6WWxV46uurKEvNrcDmJothRHGgcTe1wcVKkUZH/+X68AXVVidYL
2OfhH1TpmRALUwTkaVsuzFOYpXI+Hn5Jcu8Ln4CRSIG8uGgjpA8T/geevGg6sTcMFKv5SutW4GuR
KJfDL6fgWXm6HH+d2MdzRz4ZXQdsN+pA5qE9rcCSSINK4zzb57uEvoT359MJnNHUESVZOS7ejnnw
zCS3fjkhs0iRtZRbJxks1NqjU1mLYNV4vfP72+NsICh3qf8d8o5RmQCIiyjeUS/Lk9lig5KX37xe
3yeNmWq9oYvU+x3RGYl/BdEgKv2nMOGn/7m+PiU5AdiOaNlS/CbB5sZ2iI+xy3Yyekdet0iWYkqz
eD3dU3JXIJpTNKqE5f19lLdFPcfMDogghFPCwFwTfj5cvrwHq2hWxz68fX1rrEldeaSJaBDsKcyc
GgTlse9J+zqG1mnH88vcFYrbryJuBzL3+B+HX6Z3ejtNmAvnDiO84wQfoEVQB3bKmSJWTriF+32e
5IMUX6r3xm7+4/JkZ+x/AthfMUVmVoY5RpkODhesEirCM0gxcm7azxIQdf2QnglJx0/dUiM2WXgS
rYkJ3znPLWFv0oEPoe0ql+se9k38mNHztrb1Wecvhdbf50nE3icTaskgi248EEmi/CXiNPeNDBry
Sz4WTxREMyRNZtbbVBK9pVXWR7GQU3li/+85PyEksbGSlyZpxCqCOagyS8eOQ4I6a2jaaxi4+vmQ
Iomrb/W4WNHTP/EoIXKX1FZe5yDl63XSgfLFp87tkl2KOBZigHfpBzqtE0MbM7nHWOpkmTw/+H4d
kfqJvrrOTIytDBjmRAP0AUW5VOGX08vxGlqEBY7+36VAEoSIBpvPVlpycWXePqk/rywH9VSiLbOQ
nq9v38NYses57IjNyYyIGUrTIif73OPgnyUgzDZniPzRlqa460sGViAQIaOXh7EQdWAUT9/ugW+H
1rL3r8fj48M3hsJli2OufOMlzOs45uZdl+OX6+ME9UrquJcyrD79zNNw4oJxKERY8PYcQyp8U/aI
tKHFjveJvngr/+P0xbCrk9hcTLMZfnT1P/z0lyc5SPn0v/7Kf0S2+Oen909BLLxMynZyagIeuhJO
LOucBzHHBM/FvH96O6X7ztfNskSynXW8S6Dc+Fyj+fd2PgCmSHxspIrg5ZKGvMcm+dkTxD8nosTZ
EKEVNsfdJn0rNjykpMtyZyKr3ZLMn6O6x9dPx9SuMhAzR8aJuTYXJxJZpKnZ8yS3cGehJdvMphcL
/Poe/JMwMEZd02TT/8xKJLeEMOv3SxTNROnInbb4dFfq7hSxQaCY+wp+eQ3KdJrxGWxMqLoR93Ls
ATF7S1LKbxi1cfgUGP6nib/9zAu1dTOxO54meuTc43R6naQFY9KPeHr1LdWIbiuElG5hQOAkA/h9
EaefXNLFN8wiDWTbsgqYgq2IU5CMeYiqTkB5HBPB9dCLr1pX2SNZg0waxKKjpIz4p6DAfOa6a8T3
KUq9J7FdPYinwzmiKg5vnbvPM1KKJIeSud0Ti5h+b9rT8XHIgvP4K1tDFHXrah2fa+MuLxN2Xq6P
aJ7wyoNtcav7+6fXUxzAuEcRJUYS4ZlUi0U2iWzRc37wwZHwiNG+J3We5MD5KYzfDP+ZBkIEYZmH
n0aWwL89mijjUuLs3ELm8nPI03w6TfeVU4LhMyZRU9Ii+Hd/+dNv033/MRiCLzgPSA3UGvSk42ti
SS/BoJrn5gYqJ6KLpQPCGPxiS7xdz6fn74HBH6Pz6zkED16eHr+eALZISCO+Zb3ZG7+LsXWdk7YV
euOFBv6hBI2FJlkRgVvmqdmJGCZC56+XwOklgSa3n4zDf6Ka/8+o1zTCGF/IDsX06fBl4riTtnD8
z/fTLxwDIH4kUuJ5PtyjFZKGyHXyGEvHTIi1yB9W0n7/77+F+ploPe7UQCv0cwz8Ljm5TpfnW6xY
nCQF38InqmyeZD6GO59+6lV5uExM65xeEV6HGldDTnJNjD052qHNQoJbpL9BVo8S6cD0UxoWIl26
MuuMyuIO3kkSL8nk7F9P58k8Ocacy/98D/bK7fh4v4XhQSFDdUelEPXuEn/TIaYMY2+LotJy0DHD
X6/DuI7ptl+CWxN7bRS9Zpt678/5fUHj+n0qcP1z8JOGblaSVcsV8XWQEdgllS8vmtI4T9e+JX6z
3EliIIfWX06H8zVRZUxajd71y/N0K9eJOx+f3yekfO94SohrO1inxva+9s9/iUSwzJLEENX9/66n
gSat0TbqSS6YYeClAjFF1nGdk839CKk4k9EReptHDCed/q0tHQgrGlLLo5xl+gPs7qevp8+Pj//r
Dz/xlKFaZu9kjBesmTe7XKnmD5scw9cTMNqIG2RYcrIyikNq1kQKQBMbymKl3PMg6JKzYnmf5Nb3
J1r/yO+lSbSH98fXkGidvSmLoaDiEtW/3mMW7XX9rXsg+DysI97H4pZZE7jvvH5A3c9zf3e0Kfmj
m+I/TZiiTeO38KfFrk/vyXSmZRyx8YyYO6pmBhKmAAZTLxJ/7Bx7PqHCC5rNWXSPjtZZphReZNky
tbjgAknARBZz/DZxrEcq57q9IJ2RKuchqjH99JDW9A/TGjBdaVnc3AYvfPx//OVP0Y9xO70wyZmK
7Jz0HqKo4A9dZM6lSJ1enU0p83x1oSATkJbjEPM46UC49JYGzWMDBKomhJyyZIn0FAaaYBsLguez
LGoK4x4nmbGkd/jMq5Lr+s4CqzIWtswefWQu+/Tp/fEAz2BsBtN+yEPGqywjVU5N0oEkZ10DA5ko
y8S9v9VTEzu9wrw5GmiOBpYqXeOplDl2FuVCBaoVbN36rjuO6yInInVCITT7+XROM0NeDo8DT7qm
9fiohpvjRTw6SM2KGmLHsSG3Iy18S7MhOds7/F0RRh2DItPPhOLH6XV6R7/c5zV57urqIqqBqN6/
fg2o+fVwesCIEK0s02nM5LBUWGTXUEijnrY0MUyUuVwUTUTenJ/ZlwB9mIumUmr2/RQG2QXfKn/x
9FXEdu6DSToOZbc9hkP0yehlqHyWOXtl0m143jHU9WSWNd/A4yTRC9Ix6QfU0evl2DNUCHNfOx9H
7vTboCzzgpWmkpJsix/YXWBRk/b49Qq21+yTMK91v0Q39FPsiR/+jMwLSXNXdBSJ+xJEDufALKZ3
znlaRp5pYRufZHTP41FX52p4QU9BBYmzioGLkzzpNHDNteUATN4QtuWIaayBPLWuRUvBObjka+Uk
lMlAf/l+f0wPvMPJiZFP3KE/QGM59ST/C08cusntn08v8unt9I3PclDEJUlqWz8ffoke38O942Qi
Va1z7lMtf/95i5rkmxJ3ads9ovg70GUY2DCsDNKXbCYHtRZB7qxmftc2OnVfE3d4xDcd7W3cCC6A
r5oui5/+9//8l5ClMmt1UGeijnWxCJuZfgLoPVFyJIb708vpHkQgyOFSRTZU7gS05xVmrvycQwMp
jSQqOQcQTW4mGUW+F3zqbcuG1D+R5tq5r9ekBX+5BHKIpkp6yxdQWkN70pAmKnN+SFfTI3X+pOVX
K70kDkR/+joZEPxipiQrQ4TBP/+QnSrpTK3sidc+hyJqYVeWxj/1Qh2LGqaZm36HfK/MXg/n0wFk
TBAvSvD1ylxGtpgBeU5Eck50XimpAYjmyZi7yN1S66KYgsSOfcoacpm3nbWUyWL//vTpFpLFno73
58Mb6udQZCCtJflh0sSXqLZ/Xa7yfExKPa5xov5hMUSfRLaqw1ZCfO/yQNnVqs7inydwxHSqVTSG
jlYhWgwWkq0K/ZDFFsm8rfIIqkzFSoSxiZDd2KDtF9KIkuyBijwvwryFfky365dQdBfi34ipSiKU
1ZAa6M6t0WNbp1twBHaWoJkQYczQ3KC1WiAWtLAz0IZ1JHDi8HG53M/s7bh3LyQJScQ+dLnNCgmK
pXZPwa5MeXkxa7C5GjEj6Wzpt/MppGp/S7QX+rwx4MQwdimEScTw5+vz+33ufQUPRft/aZs6DxPr
OJ4ilsMw29DU1BMkyvd2eM89lpKZnjudcuuQDlxqER7rFp75+jdZeqZigarNLuPkkZ8uN/VGzalF
Oa0PSCPaNyh3HrJ/LxZ8ggmhpINfeNp2VuRDEjnMaKJtgYKfIv701adn1h3SP8M6nSwU2gbLBkXB
zh08U97AxCwCmeSoTHsJkn8ffXgut+89v385XXLrxai0Pf3i5xtP6jN7b4bmrtmYYjMuIuocrJ2Q
XRLjkEH74W0vM1YGnCL9RdJ7yJp8ysHnN1QVSaUXdXmbxFLIPnm7Xu7HxV/Jbka2ElMbfQ6zTZQu
gV+O5DfHTeXSrYSey/Vx+vw9Ieny9hZGuz9u1++h0cLhlT8nscHDHoV2q1c1Iv10Btgm3sGYvqdI
Mdnt/S24i4KpCrzxhvpNA/ebrz7DVdHSfKinRG38sVzJURVdkofyG3M5NYH8NX49ghCr5voCW06R
16vWjt6hPXKn6oukOZAMlNxi+Piy49OqTHXwzAJJhY4m3/2eFME7qI4RJB5M1p2k1PEWsgUfn588
6E22KenIhWwh/W5pjZvKahZPbL+AmJo71i5a9efD+RyGLcXkvuxG7bhiBc33F4NPSuDcyvf9fE6j
ltNWl/+chxKv+Zedrg4kNS12Hcjm5WbBHUFKQXJeg7Azbm4CHrJ1kpI2nfxUd8adUws+zP7txK/Z
z9QW8dzMYrPKFZSmD2MzjDgvEqqIQR9c2Uqb2ewgeXYCi/j5+BPbf3jIDQy3Fur2SGlw4MQEz3g9
6qFeQ0vLei+3w69/iJsDowiHPNK1rOfT3ErQjSVomuialsBgrH8+aruugSQOX4/TK3poRP8mOSvc
Ynuuk+rjY9rezF6+JIAcFw7zNi5PpOU3f2JyEzo1AciLZj6Slk1y6ZfgVXw9vpyC2jMH1NvqLS2j
TZEIv8biZ193TF9MOa+p6LjbXFFq6nOJvkWdM+A/ny6neyhPi3Vzc+5sHM4bwkG5du0tdl/NbJPX
sIk2HNuEk+YX0zKvMeEF9l2RtJu0X6qPymBOyL5ZE0WAkiypsFxj4blw7Hnifi9Pkwj58mXS02J2
JR8+kbQWwdCpDnPENbXbSTFLPehO1EoSI5oYMpv11mQfevv8qr50ueb5R7kC8PT6BVZGSpoAPugY
Ap2rI4PfcVaP58c4EV5QTSHh6VLRIdXuqV1GlyKIKzrqBsTiywmx/TVozsxgYgvqnMccUsiPYQLm
y8fZDGlbNlJVhWS2QC0NEbMr0CyP+LoHaani9z4RdxB1l5fcFWhHGpSsO9KXV354e4vhtoldstui
jaR8bInmadJI/4Zs+WbFpm3j03/869+eQh5ryIf/W8pi5Zerahhmf+R0GlJrnZzer6Fq89vXG0DP
2PL5L/zja6j5mAtkvz/zUkQSp2I8ZTaNs4/raeGjM5fkF/JlgKYYIdAnZdmq8ksERMglJUBNFHV9
PcRBwefvPIpoSxu5dpUhwiHi55+UCSt1xCkuNMz48vQ1x5IWwZMtOVKhAJFJIs6xRZwvqD84RjHD
I0XPcZCkEMsw+Amj/GdVK19cDS7TpRpU/lOwlXlp58vaisxTXsLE+dcQasuF2z0cK9Uqqa9S4tJ+
1oS4kDx63zKaVjbdTlCeBrYtmAqxntIKwPloDovN3ZFz1nBIA8iJ8cl+mSTV+z1v+fAJVJgIS6ln
WDwBk2xLpc7vqe79bbJgU3x/GEZ+MSJkYgTHbtlgKPo8hxEtT6iTrCEckPQDzWvkEu5i3ThoA2UY
CkOqg2NDpGw5vL+FGpzpIX5b3YNRxbgDrFlar6Tjz9YWacplSsTDO3RFV1E/OyY+X/9y+Wtms7+H
DZUN4TWx9Gegu4qjssOM7ug7AP0ZjaM1nsM6uqaZqAtfuDAjdV7GQlaZI3uxzcfcB27aT1Agpt1N
rPsRogxzXVvgBAfec2KZvZ4uUVXrNHMxVGNfOVC1ufvh8vLp+i0UDczR+0soSJqjaJNkf3k+3Pi2
UoY2LovjAWT/qWmeAokIJc1K42N/uk9bOs/dLp5wx0rqbhGLu4WfyJH5VOetOUGrieIkKz3n3iM2
NwGSBAURx6UOFLD7XdEGr64zKQuBZ8T2PyE60OnM7WjaTGzNnb3LCeWLGZCrn8E6hFqjDy0zjhLN
uK2RoyHrwcWKscy5y2X++8cmUavYisk3vjJpnylHNVSsfGant6f1xpbbt1wvzV64gUUIDtNgrT0N
n50o6uN0/OnWjj3wi4q2IIgi4O9b6bsbC7KyyltY7T8VEngLfiK5lGC0bj2x11X8RhV2biGQdJzQ
BQtmNwrtTD0mJvcReEu5ItHdE3tQR9s9l+yGFOSMIiBUlWr1GF5eFg9plGupwPMULyqpMttOPTSw
NLbkkqJgcAUjmrAZ3ukBEJyhEyBEir8ugZaXkMB0u77fe2EyYYjBEzP2bO4BlFkPVghoh6w1NxiQ
COawmmT2xM7NqrXeSmbzy8gKUcQaRJom1dZpVJbHX8jo6+2btlUWS2/bgm47qLSy6aIP7X1fj0EJ
WAKfX+J4VHCjJDARx3D5FjP540+FzvdU/lcW8rEwEmjkzeo7oEfv0VJV2dtS/YDCBPQjW7fOdmvr
sLXwiIWn6RUxkd7IqgPyU6cjvyW6R9BZRw9U3sjT0vg7oPnaVgvO5ttbVPPqxYB2sSSImx5KOvB/
/OmP/zpRUfYx/b7nn5xUQFrzpNb8t4oc5yt4nag9+t9fT9+iswc8ZkvUy9iFQW4twmBoT3/8L9yA
1FCRGaPPc7u+SB8LE8hmOlR6Da1zCQaT0su8k+AuTHrvIDzQ4lwrsXcYZE+hsoQPzTHJCGkAiC/j
QTOIAyBjyxIfhAJHIn5qE4J+088ZTAIw1QowQNuFTgyhE/Mm9AEgUzJfkUHQJQ2tWoxBDABEFIkR
OVo+CANAKu9e3pgQAES2YtzDoMDxbdm8b74ZDb5iylTUmWwE+IradDppcKxFzqUI3PXle0diEKxG
00mQVsSpeAS8VVvbSyPhIfdQBZaVumVbkTdLwEpo23+Ta5e3DC/lvpHuG/dfvnyY/r+JOVJzSlrW
5rme84ohXwfsiyjA8dgmtxBreW86We7CeFVP95HsYqe3p8PLS5wOkXP37++fUqIzUGJIqjPxVmVl
KEJUCJ31pNk4/RT9bjw10tYBJtp8cyYqs3C4+OsF5WdPi9Js7yH+zDYM3u0s/u5pGjCwYzyNt/jU
l0Hu+EJXchB2No5Rm8utwXfuHGyZZHbZwJ2mnxYt3b87slkdvYnaix0rdq9P0HrQOADcw53+wL0V
1a+xsEIPu5YGa9JuSTa2NbKYhDtEQJpQTEQQA9yj3UEEsMPVRFuSDmN28ee4h2bji+uMZbUk61SP
MXV0bJs88+qd3Xra4zIoINNP2wqHJEdqCuJ2XBuWqMGp7f5AWu3WLg0cVTG22cXth7pcTNYDCfmE
5yTz6IN9rlBD0qNtCKdYOfu69pUyCpqfG/PaRt586Vh3mjzbnLc1bybL7H+ESSZ5qmbeHjDURGt6
VHX175f74fOxP0PeukId9TL9jyG3H8MRPUcL9aSvWVshZfFxO4QJjLD5tLBEW51ztGLl6PslNBFY
ouw5yebb23Sm48sf8Xg2QxzFYVNz6UTXM9Z3A1ixCbto7KiJalki3i69jM35GbW39Xr7lOpo5yfR
zcaZFDVTBjx033/ZCaHS0iYyU50iN5Tc7DRzZV2sMk+ReBxSB6zkTkHq7die61hh7/l2/hw8Vb85
n/+WX+G/4lCZNbqV9d9aA3kzVcVn1RKqX/DTDdoNVZpdh/QOP0R7ZAarXGhvRtucHA5MVZpbGjvt
W1/nOHUGLUwH9O1JcvUlpnh19MfgeTDWqFZH2lpeLnHmJDqzl5FM/AEClOpPMiq/DR/rzMjyA5sT
2FFcYGjNtaVDiGYpAnj82KqH/O+EKwydBRsUMbFMWAr5/s+x5y2WY0bTxHEZa+V+gD8D1kw0Bxcr
EZp6bJxgHMOBq9ANTDUmb86R7WDeA6KqRl5J/jvhSTc+BNaWrcqF/cEtEMMgnlO7FIPmQZghDaRb
QmKIrzi6ozQgKOyMtLo1b6pF3h2B7CqZOQ8jeQ3NUW6x3+zb4X6flHWgBRPXlAjSTHjz/yaArokp
5FYxidIfgEtUjS0/XUV3KT4WSe6nSHKJm/35+vjd6f4WAic4mcYW04Ny689Bj6XmGiaQxT5YAKnV
zYgf2O3erfpWc8KoxsUNFpnz2HAg1lVuuSR/8OXNdhx4gSTNOtZiqHmUdkgmuF468y4tzeZfS24y
qzx+C81x5pah4OWNtZwe9wVo9tU3TiTvy4wzUwRuf1gSGkOVgiGWIA9DO5uq1n1yrK9rp40tN2Yv
XthLvJOtwTPp2AGjsfEWmNNq6Jil2GFekiHnoTj5Cc41tUK1p4CxOFszOrthZcIvgyEg1P6lOyvT
TfuYl5tGlyU5mqxaaEvQ6XgpzjITIKmvAM9jaNdabZ3a4OZIUCmwKJXb1sQOVusQPJTb4Vuxg5p3
vrxE/vjHmZpWPRboF0M5MMrveUchHLCkjILLEy2SB8IOBKUsqSAhxWV5EEJKHZ+v4gSYB03d0TFz
qoXKmbv9x5/+uMecttVwW7lPgQVJFsTBG/2782zwKBOTQnU5PoLLETcrE5YOFxpiklzzbZbhrOO3
t+sO3m5I3HM0dErnbOMB3ZGEsoMrSwmzFHgQV9N0syeU6TuW07VNV5+ygMSGctDrXA55m/hUaPH5
cn1+f4UKiGgGwM7XL0gPMGaomVzTl0eKv7JOvOeBW9FKIk+4TQ1lAdupmuD6zrbg5GhL/cFrz6k8
7r7nX6L950N1pFAND1PulBDqElDZq5G0YVIapbTNHM5tBJaX8W9wyK8t/KdxINAwR06AzhgoHSiI
RHUa1xSB6gLux0f+4zzW7Qo7b01G0lCOE28vmzh95XQFlEY0nKJNRO0EJMJ/Wvv1DVVAqFa+Qyt6
S9RdoIMRUyZW+SjFX9BqzqW7AvqiLn1lc2lTagJRGB0vh/vXT1eYI0+bTKXG3uOu9FxL+yYnjqp3
BbuBEVTprGZ9se+X6XyT5H2J8QrULXZ6XHSkpFid5MFqDgtAOVHMPSN5Cr3MYENcfdHdarTdddkT
bX7PtW3gyumRVBy8XLr5/knrxpLbjzJI7Mv77GjRprXoLh+PJbU0xLHfzgecjvf2CpqST6RMFNnA
Mv2csf9DycBWtLP+7q/TS32K0aL7qtHA6exW0m6bwcVm5uYyfBXTnjor3Q4M5YnjsTd9kjOdKCqd
OZ5kVY6JXS+XZPvkQnG8H4Kx2BFEONMMhMbn3NkS1etXpQtlU5f/VCI2mq7IftKuinSa/Uy7Z7nS
BKE0BE63teM0DvApsyxqyaIeeYbEM8dEqUOjVmBPaNUSK5I84hZz35W3ROf5RB+K/fuuLDdwVlkO
fJWli7DPamhvuRAVk8M8DjFlMHQXoI1RApGK0VR7iEkQMRG6lwc9jLXQamaY/FAiMHFdBQEyiiKo
FrtyvV3f3t/ArmgiYJCG3ndKEjt8YWzWmOLw9U432lj11xqaIURwVmqrBxIVBpwVxIKJEylO11ai
EtaligueoGk53HnGB1ja2OoE2knnBDpjM+0imUOACQg6HtDE7nFJdc2G7jxG/Q6NRNnKgKxC9QB8
KMJQgsnmiyG098mye+1rB6Q+i8TMGPMmDmFAiymavBZbUNdx7Muks8A4PWUlPvpIZzTHwZC3f+mg
iMg/vXgVJiVkZ8qC0c2UBfzI9/r4xlIq2V561P4AJcmeTMXCwvOLR1ZXheH2+SU0Ha9lVhYYFXgs
3jUNf7uYb96vZwYFC6S5UAyVNK3TlB+WWCAIuxAbPztM9K6ClsJc7WSgWHL+6JfeUQeJQ1qEmZAU
BZ4vApZIFN6wlMgBx7y5RQyRJktwIpWw7SaC6Ko9uOpm9UOvfgxLFTPoyiwSXQLqKch0KA91lYX5
R6kj4EsomQ0By7i5sNfLDjeHla41T5avMwPi3bW7ak+khlNLqdtVr928Z8ieiUfboqYmbY5VycOT
Q9r4UNbIOdKbOXc13cOPDGEg5Pns8BfCUduTEBStbLDIc7Nh8H55OdyAcUCiwCIYjaKdsF2XmwBd
2pUPyO7pPNIz2m0zVA39AJ0VTQtx/43a9A5H1tTvMMQmXgNKguiROJFv4QZFFknVrcXFMWla4iCP
xXieVcp+yUwpd5EIBw+C/f2GCLQqbE7UEAfjRvci0xHfkIql8MfsW2lLLhxoMyTzL9W5y+G/4xcB
VyxbVXAbu/Qee+LFZgx7MoKJQTJusjT2F3UbOsQtRlhVrqRthUN3xxZIRvAYNJvR0Zv6J7JIrGiF
bFtWR3R3fz4fgKXqbCurtNOoqcM4RFmGPa6veJdWS7tbizh+MRfZ1nQyz6ANKgt4vUMZiKn8KpmQ
Z18ksOlJu444tFkqFH8PMbddAfhNonA20lJj1G9PwUB7yhELYA+LFhfJGuNuWiVR0+gezVGYoBIm
vhZ07k46JO2PM8QsxE7NeI7bx/mUyBQkWbG0wCepGrnNXCjRiIEZ7AbWwzY6mSIzL6dDhJhnEeHi
E0lr+qJDNkfQEnjcFKyFkp4Ot4hN2S1ZIHn6gtEQHdzh+QTf6NPz+y304v63E2izSG3Q2BohRKL/
vpyymxIgiWBKg02HWdFNWl2ULGm+N7+GpW3vPGl0lA6YbBh4W9LTjsI2+TM1WSO2YX0Jk89QuESO
tITJaDKWN7Ym3rmKo/MuQkcELchW8qCDnoNQOpp1E1sC+KVv4rqR6b/4FYh6o6NnRuc0z7STiRlN
3APEJqSnSebjWp5GSPf+fg+9V/kldItd0Jt9uR7vUSc+fjuBLpIklpHik8UzChxw0q0BqdJBDbEF
RlZgEvyORmrSF3kVKuXRkjUeX2/Xx+M8NxINM8jRVBVJ8gq9i5F1TTs37+rYL2k/weg+K7b0dj58
X1g7fzDS3iB64xR9f2+41Yb0tNOria1f6x3cHyFymQfwxNnsEDGezmwMdzX9tH+vupmLD8MHmaEP
L38N8xDv/+Pw8pvblzsYb+Dpk4jusfl5//T+KTaVl7/713/70x/5JYhciA1SZY6cTEvsgqcR/2R0
zE3Vo0mUhsckaswj8bJ5gE0Q+tjd0rg3dzWIsZdkcdHuKVGqTqL2BJ3Yvng4cXiaWqZ5Lh1tpyW+
RKf6KWa/fD7xYpr0uYiDB7KtNA+nSZ3AnhRfN0K9smtlWEbaovJFbRJ1TaZFoUFZGHPOJUk8XKcS
rnYqiyfackJFvW3tXlN1nme3VI0sEDtukd2PLlujjHNgfbWP06yjlx85JRFuJM2tJFi6ziQgJoF3
BM4OIv9J97I4gywsEMOO0VeAqdSWcRq3VBrAsO5A8zTJNPbEwYsraxvZdLz4ahzRlxGbEiRcsFE8
2jFIhyRJo4VYhmS9RZdw/25oMbdZirm/nkLG4PfgsJ4zf57o/mKInkUrSdV1cZBwDoCd7pGzJ4/W
+yWNYJys/vv8iXW8JHvxm+J3XTnetrvlGtcTTSUWn9rNNSx8YVKOH4Fc2TMTj6tM3UPEQky/BIOr
48IYqultxJ24OIBDYipzEl8yN1X2+j4fYwPJ3HY7jwZIzy/5qv/Bn4uOmYpd1e2mDm06I3+uZlN2
htTZDkQ0XB1dC9PP3JrrdD4Hd8RqJj/eb5MkiH6uUEr4OilGt0zDkLJIHlaU+MNWXE0yNRiqcRh8
4vjsYjQZzqyO8F3vauIh357CQ4AucmKHyeDNkPOI1iQSJ1GIhT8xf6JEdW0WyoK7MhFaJV0rJxpn
jSR3Z3863FLD+hQKeb7eUkAjiBWQiKZoL/mYK6SG2aIOTrzD24mOzYuu3GXgXTeHytJGSGlyzfJi
k4MrTPmKy4SPhfTh/oBVUrRJhrQ2llyCi5cwUOfcq/+31TTeZFItJw4Boc54BEFyzaVP04GXtPdE
fRGK/PdcVJz4Bm6ia2Q78kOXmy49ZejNMj9n/h27MRwalYq+rJxHHa2/2PeCfCa3uU+6WH4NnQ+M
rVZtdM2JZHMHrB1N/QWtIFqHDpTrEY2qM9Nd0DkRcmkqSHtxF8fvdAqqJj2KDRms9wR82mSWZey8
uEXZ8foZ+NxaJ6LQgar7U+xI9piM0xTaFwcnVgjSCzXaWcztX7JHCIQhqt3IzUJxktI8vwhOmBQk
VzuWNlpuV5coJkA6CrEwgvnYeJaPWzD4j8+nO6wbpMN7zdqVIGzh/9FDJD51opHRNUO1euCdnQQW
00Ne3lusWIy5vuA1uzIOpBavwuH2/PX0SxZ2RXQ+TF27fz0eezFARVJYg16TfWUxyjKrb6say69C
1Y0xV5sug2Dz8I9lS4c49ijOCkpZKSHJA1KRNEUXXhF/5ulDp8vP9LxvsSjjxptusmDnJnrcs8I6
T7jP0xapwOR9WbKsoddrQcYqbVPvwkcUOtnZHeUPqNGQTrSEQo584ICHJBlykY49v6nz6TmY6WBc
rKQDSvRSNFqtNh1rOuD782M2+sM/sUuSplRR2TXsBmfdh1+q6tzvlqskq7xffr5cf73MsdfeUD6q
7kgyZnK7vZS+HBWh/k5dexomt2rcbH9VX851zk7H+l2Ql9ZzjtL28EMcRzCPwFt13ri38yGEK68v
wXO2BE7i+Ch+t7JUTcSycrkav4DaHHepuJ80/y89Yra6fFZEn49CP03nuveGPUgjSnVWLBrxyj3y
44r3Gv6F3xRZTCeDqmokAMGJ/hjnuZiBkNbX759up5fO90ksWUUDXs7m1PfzEkvOvvCKqBCnpYX+
KbaZo+aHTzE9L6M8FCml5Kz72wEEFakuEXT8zIh6kiXFBd8m7stHWgwtFtWx+mL2x3SW55ekEXCd
pE0Sr4FQY8g5j0Vfpr+zSzXHuPJPnF9I0QEt2U0UnaH3+zLM+elzGE1/vz13Ry9L2r4q5GzMDazS
NMrPp0fgB4fvxzThMjQq5nWIOmyXvbT3MKM15DzfV08UnAcoSB5j1L7GFVthtZfT/fApuAJiht0s
BtchkU8Jm6de5gRJkycuszwshVzL6/sDG9ckO0GGgLZcqio+n3M92evh/jPxTsJx2LpsH5EjjiFt
6zn0DTmfvlyCRXKMXRoS0+77PQUd9BZUE5kDf5/SG9u3N+JQiespcsW74Enr8HjLKk9h+gH0yFZ3
Df7WomEy6zb8qqbqbOZoN/DPh9iXBOJX0upEuVYn7r04UG1DsqRj/FbmCRK7l+b7v9OJmcW5lyuN
j2zC7NcDsJfonNIxFFRNP/+pV8tvVLTid5S5JM9dCgjyG/XFdEmVJxvd7/NvR6UhDJkEBCjqMgAz
X8fp8/enaa2nSeMLZ+VyJJWsUtWLaVHT1wX4OkmfCVbVZPMmx+sy1m5vg1pFE5dybm58jJN5PM97
DCnIL0GpO64pEykFY31p8aMxV+XtDHpsS+ogV6vmV3wk+a+bi4e7DgI8p+9CA16RsEEc6uEb39p7
oPjV8PW+3UGiOGQK2fvbWxpO1Pc8qKE5b/Q/36/BLpsdfcy4YRLjDtwo89Y9CO54EBWNWOrFRtuz
crKE9uRXKhLCirFj86Pb/5GLGjch2NRj8x76H1+DjXV9XJ+vCTjrz/lfp4tI+hE/fNbW6RZrZkRs
FZFHF801gZfrC5jbTjMGwoMPLDr5zULKQ5ojS9243Eo0cz5ynZx7QJZZangmgo3pzjwK6VDRKEWy
xfOVr6ahzUJirNi3GrZBhxcdEhV8ELkCNsw0fv4efz/NTnqC+yChL2XJmDwEossZ5SPxCPJAhKKH
RV264SndppgXEBhJUeQbur10RjfTJiPzaPg9HyZpFkS1ykGcUIJ0isosKEoxdS6J3kNiu85EOzuq
1U3y7fUcevQdb+ny31/ffnMPKc7znJD0jwuHeH989h++cdMTx3L0dE7nCCoMD+NKd0aOAb6fWQii
wMbQx7BGogJveNyOx6fj+RgZQ3oL7LdlScZz+smEwafH4QsPZ8uY+lLFmJDF77xpML0eHl9f+ePK
KiNIzrVuPIQpjYxhUfVWvs8D09yRxXaM/BaMvKztmlzkdT/v+aSio0MCSkt0LrT3/DbZP4LfuS93
7nOG3jwZqEhxuZ/+CxtJJLcnOENNVjEn6vr8dHi5vj3+HMRpJ7ggm2n3uavJKaXyPYVM3JSA1Q0z
yE3jyBwLOby9rYmIwUkV7JnPvQn1RDAG+23OECwyqJZVYjJHmWcHT0+N+uBcklnPjik93b2RABJR
45Z6h+fre+jmzTO7Tag9qpEvMdaNsipoz7QQYxPCkeQyXmA0PSEwEEzTAczy0EKH79fD5fQZyBnC
RYIgNlk5ytNUOsCEhEg+UK7kTCMdL7EvOHgeJDt8cUIu9NIzm6ird93A2sW3N7HbNgcVv5xiQUWs
mI4RwC4eaKXtuHbymHTU44SKKANmKRKfaW9BIpZya5CcYnx9y0myrFFKXPrEY7Vot7/eQpV5sSPW
10Ezdswigue9dy+HlIDHUii1ds6/vb8FzT09IhYJqqr2Xkrigl9luWT2HQ3lZLyxvXv++KTYOFZ0
LrGwyBCz2YAGWVEhEl61zLmy6y2yjg0aM7OLcr5svoprsSdQhU6iZ//eN9jKnHaiXUsHU25C0C04
MFdOARUNZtArRKBlYUsKe2q1sjQJYCUanRceBFDuwdeRW8Q6dDEMMvfdXJo4orwz2drwr7drcKFN
VHJ4gKpeEuwmeQ0lwl6uv15mQ3XhimCggm3hIHGxnPI0S3f22diS6ldR0ktdp5644A+jRaLvd9Cw
lEa27Li2tcodSmMMHF28a2XqsHhkr4Pw8HCztBIHY2ysu4PrhurzFak3rtViaG6lN1394dfD91wO
lNP/H4/w/J9IjTH7nGm2R6SKQZDqHpaSiIMw+LJUDjauzItlnCQqTCx6IIL4GGUtV9OthH4ub9fo
xOqIkMq3MO4Ty/zRiHmRe/bk6tfPn5O3Pzqn2Kvw7QKROZH4gXSMsc4QblFZTyaTEENM9DXLWCY+
6bslido63i4WpQqFL9uT32+n8/n0DJubq6L9nqvJkeeJtsynl39fkql6sWISiYqVY0rPIimlRc1J
tSlPI7/Q2+EUc/Jj5y0+q62YqNxel0+ta7HaOajDUpBsCYeF5nMpAUu7zTqZzN6DSzxmLU3cKgSo
Zna71lzMn+H9c7LVnHxVxWP6/KyQrzUdaI4oafngYkWQ27NndoOqpd8kWb/HpU4Sv4KxrIa2qQPY
6gBaKv1yOqyPnylUag3Kztr0YpiH/IIbIoOx9ZiW7v8oXck0q2Ki3T+9nOPlqRZ4j/CXSHkTNNPH
x9SOimruE2sC6V6V+WgQb1seCuBtsqVDhIKB2Wrolv/ReSBiHcdBaZbFr261rY3PMOYQzprfU+Qy
YSvvvRxekv4Qr8y19FueYknWZdTMKo5DkjdPj/vxzKaY03SJVcPbw4T5POBW9iCve++5fLO5/Oy3
TO7v+3niD7fD5R7TE6O+8Y/DL4ecAtVj3sIpVTJgNXejuE+69bRHkric21qmf5pT1F/yjClewdC1
KUT721dr3lHJPymYmkMtKYPueZLvj+/bFOskjDtzDWhLrKDU5sd+vz1PquWkCX+dGNcj5xqCZEOn
K6JuDFr4cnz8KeDq+PLbn3762/v5eOe5slGtJMyU3hcfX/YUpHqDroZGW4gTv8X9+PhdvIG/Hc+H
bzF48y/zZNTpD//+tz/+BFmdo28oxke2p74fUwQo38PEf0+3ME7ulpJyn3/myZN2SowjF3Kt1LT4
737/5z/8/ncBpT8d5wysyI9OlzxAcSKtX0/hufElx6YVq0xU87+mR/RTekRx2ZQFyJs1vhWXJxs9
3ANniyT5SPGwyxz2/usttD/k5286ZwqtTo3LPnP20/VxRTqCpZXxa3F1wk4AD58/He9xxh+/i6EV
6czZU6nPYm7MNbHKl1CzOanep7kbLu9rda08mZh++TLt7Kl2m/JucV9qIrq+gjzDNfLI/Hoi6vg6
4qHUzSR34rXzL/YrE4+uG1JB5JwTFJKC3q4Txr6vOluMSrJCkLqYoqdIUsb1fLjMu5ueGjBGnGYi
2OWmkqJ8OE8aFE8ixKqLhRYswnLyaZ9y1Vgy5/bmOtsiMxTHYVFh6kXyc0AdvZyg2c0+lvHVVJaV
9v8vrRaq63n+Uw2UKZ5lKCh46RBozR4VXSDrL7Gyu/MInaWj6FxsYlKfK19Zx7fiSBl2UhlZLnHg
C2vo3KJiUkViyHG1RcaHbKFcLnzmeSidJmeWQHqbyjsTlh0xEGLfcFfjKt/A9PP4LXN+HmFNtpWE
0Cm2uN4ngKrEhpFD2DzB73QJGiPuyUECpDQRt+6vu7C/1Dqd90z7ktNoBm+x6RvRYkPaZ0omDaUH
oNpdtLIP56yjrC/fn/7jT3/81+me/8YMAORdVm4TefXLCRa1I9RAo6abA21i75YXEtaYj395nojx
5x/YWNHz266V1WHR//XTv8V5ZTEZYF76/nUySZ7BdLWBNnWlQ7S22+yvRRtc0Rma7PZ+4EpMydrX
XVa3vOPEviyhy9lHtHPtrMJ21FaaaxIz2ESOdaU5Fek951f09Li+8XqbKzPSGpPB3s7vSCmyotX1
NHGX3MJu7rPU5zHUlEsDnuf8XoKWYNeer9fJkksp5cGUTnXovAbiy1I+D3jz5QjKqx0drS2WDk6h
RcqfkoWZUsiO5+mlhhYbsHW5IG0341xCX8SeLodJMX3OnbxDYn5MyGIXE1WzassvVg2SAGuKViP5
ua1FtKZzmxOsO0+bsy0/6ZyHPQ+q+noLjXj6nUUFnVq9zkdJgxO7e6Hhz9gYJWfcEYnwFp0Fj9N5
PmT3fONmGFIRBF5lGlVSeFvDtjqG8+/g1+On+3/yiiBxfwY9zpCMtj8vk68i4CJmPr9fktEbm3QH
rrJ2ygj2F+giJOohbGbt4PXtEZOoFtvy6/QKQZOrKjg/8AthLSiMpG693KAJwI5IxLEZ7IO57x7d
wg69fvp8lbbs2JOANXxrjVB90D2GrDtWrXLsN3/841/+v0k3So8n9QJKNEqGoqV8PfAB0ypULwRJ
d48DbacaW1jV6tuyxVgRtG4PLEqM2Ni1RbvNwZP5+kOn1eWEdzX7TJuKJjaPPa3WWN2Dk3k9MSPS
8+Xx6/Xp6xVEouxAQ1Fx3JDnbKO5MoEPhZvytRhupd/95U9/CCl+QZzAu6CDzsmgtCBL/i26l0MT
/zhuMDc7QgksdJZQ9F423IJJJ+hwRjpCoTHAtom03Z4n4rGNk9c8MlVjGKtaOZEoj1FTmIkZo3m8
FO1K1WuHPNJWmWshO3Wk5hm+s+ThV6JZJSmtJEvXz6dbCteuq6V2+yHEwGQ0j8SDSjK/8xGfUkQn
4+p2/EdScNISXDTRN3Mvs/d0UYwA7Y2077NcUt+jgnb4dH0P8xwOvF9tdK5lRC5fRmJkJBUkpAUX
uCeMXL9hYz3ksliVLe9A3szj6/HzYxs6uj7z56RTklLad6MfPd9mlTQriZO1suIKezCNbmylCiDk
xvb1h2fY2pL0qCPthHrq/EiMxZ2bifcEM85GX3UszRVrgeX++9/+uPgvZml7fVo1/fdPc/rU03my
kM5AS5EtqmLWDVvOMeZMafu0KdFO29/9lW6nuoGUK8ZjbHxJ0aDdOJG6mx+JzV10qethHmxVl/VD
+p/DxapLY/1nJIWPpDChRs3yRfJ1fknbah7KLtlFyjg2I+Xsgv8UHY4j9WrrVXlgUL+PtA3TErKL
i97THGkH07XacsfCP0SPI/HixFx6vYu8n5YKZ4CbqsRKopV3deAcaUH5Gvr8ATrpcZKRNFqeW2Mz
auDxMqkAN6xFk9yfqAEk5IbGKqlTVhqEHM2GmAIU/+YeEIOSxCztQi2WDmaLxvt8fX1L/VPvsQ9x
qIwOXgI+Itbsjb1x7M8jU154VyepKYmhZZUTu0WYBjdpWxFm/U+uOXHhlEhtSIpmsascDT0RQ0vh
6FfB3k9Hc8PIMVk3za6EEadNa0JvHkswmYD12KKYC8VnM5lKA8mF9wT/m8Gy+QB5dCDvhq6mIfmt
FRa7a1yevrHVnZYUvJAkCfIC4+TQr4eJdYZUo5hO8AjpDD8SaJdlHHOxsYPzJIxhCPu8hYSZfu0W
UQxIQiLZbyj5XDC6LPeNsf5NWahdxCH/O0/aKd9UyZNfIfecikdf0gEe1/nvY4EojwHdyjIoje9o
dfcIqBwQRTLlG8xxTjb/wreYsKpJSi1TPiTM7TbjRWnG217qzf0YmnLyeS5jK1JM1qvZJE/WpkWK
S8LkfaKfNOz57Xb6JbanDv51YL6bkY5aDNmYYpMRtfQfmRB4fA792yZ6iiVW7DYJ782TJnPYJLiV
c6wrN4w8/HzE474d1XZXy2idlBXO+wuZAZUKN3jJp4oGNvPkrVWxp5bR7DJs6f6FusT9G6/bkAJI
MjizY2/8k+YTKeGK7W5FzjwqDp2vN9oD2U09pwTenoOr7jdza+Q//8R/ipQFk7hP70Prd76Q73TG
oQ4kyhHnxKkfPdSPfIxUf5HRe/8sBkHzlulTY2sSduG7v/4TluhEB0O7C9X+6wlLT5QH9r5+Irw0
/6MfqLEEaa2sALXjDjzNr2r9K/BEXauytscX0jd3rW827pl/nqQAmlwrVlNaUV0+03egkJqAqBy6
/87No1uXrdqwf+474CuinGYtd9DWHq4/NofG/ijX33Eb1aho+6O01X/ptpO0toes9rEt3RZfO2+j
78K0vlWy1Hvou/ZuaalzNEbFrsV/ZPdle+Wcif/Ps1xw5aqVHvLfkIHondM6Mr0oSOXHJgq6HH/t
VdwPJGkpGjDyBzC0Zi70HgTJOooTtvSPXTTYvt7oA9HOOZ/ePl0Pt5cU+pv/KwVTcb6Jp00vUlcd
OzeIa+SU8QlcZfevOZbNW3Nv78Cak83RWKxzpTZyes4b2vmhthZbBT5Pv/7Mty8xTYdX4+Q/UFVB
y3j14u7cVlXsy8CuRkupTaJedi3tStSjLVb02tio46PiXVSUbsK1WJZy7nM1Dm+vu1buQp3t18nz
qwbXa85g3ZPUT3w8NHW6dobGde/zOePqncoK6VrjwrjO4h22aKuOhnrYpnJOLHsXedDRJyZWuXLO
p9Wzjl1OVZLMxitBhMrhfDrwtRp0ALuNvW9HjtTiuK3JJgRdtqxqhndjp+PcZi047ngeRJI2g4va
baM9t+OX9/Ph9s/5PXXLQYT4cZ8piVZvilZSy/u05CufvFJJRzb1eMvXH9cvX+Ig9I530bCJ8Izj
LuRX8W472apxSywh7yTk1s5p17E0vOdAJ2S9ztRl0NA9bdUjQ/dOi/u5ubqTp+tLNCTMbRm3Uhh7
p/vqBeWxR91Yoagoe5c4CfkGJrE7O7YCa1kxC81FGyUu96/X9/O072PY7Olx+i+w2aIB++Loj4rl
4xZyv8gHeDlpS6fT5o7nhOpsTuFAvvO+NQOWCWWwEQzXajVbldD+7//5u9kd2/Fp03Hp45qU1Apb
rKGKRSaXF8WLk0pFADl/+xznlvQsi7q027XtmfL3TvWzNDsgOMLFNkmWlPfNOa38AAtPu3KvIXUc
FO0km5tmkhqNN+boULfKpcprYYLIsTEBqHKhPXm5KpeijqQftqqi5X4/M4vK2I3PvHU0tanQT/aR
Ek85tjAa/UCnav+UWxz8NerGqXF/HgZ7WnvsPA2WnwM90taPsfdjDmyl4GIoKZiXWbrrpHnEvFVq
admZi5H7ulAjqI4dOvLEKo2D9ESW3URlXPM2iwuEvQm8E63KylNqTZOnJi3hhLkPIbtJU4S15tG/
Mwllvo4nOI8kAErGsO8iEE/kfRRQ6TQv7yFIGpOI53vkr0u0RNztGKOtM4fOCj/bL2skmRokVp+r
g8Nl7bjysa6sGourSaTTQ4h3rT6irXdxuV4mejzxZ6KTpeLjmHlZ65GBYet0Am+8X1HM4A1Tmx/P
X59QUxqvm0M9JyvjFK32T99Dk4bI8yH1j8NY5owXmQvhnias8NCkXDqnzrkWtUyEUvgReKpRLWfO
UsS0TO+53voPoUrJMHRjcWh2tIHzU2QSokUzhycvEk5V+f7Yg5GWDsTsaBHO2+Hx9f7Ez30ZqT1k
YibD0r4tlKPHS8tPpMdSTVntrocG65t1m9T/8XyNHZPSO+ZZPs2WW53XWS6HZgfdp29tqzkyocvw
OhYCA+hSrh5oKqtL5C9NlHq6oKdYiHL5Q/dIrqWkEYrkn4UrS0TmccCHbm6Ot6rVnLtUlOZZ2gGt
vUNQDXlYPCWnS67aaNEOz5pNa2/BWikLXdNqYXeCe6gkmEQShSOGEs0El+Pj306vx6Qi4Hdhx9bo
gNwyJQwLmgygxGGfVork7120Eru3ChVPxJ42qY2NN9TYPOAfQn/rXWRhW6VCq54Sy6gzc+wpu6Ms
m8bbcrFUHjRvslyaX1K1KoPJxMZcTxdnEQLc04kMQ2yWrnmRbXiqp+2dg1YSCrWXnF1itn55xj5y
T0psSIQB0bxkab4aTb0Uoy6POVhoYWt9ijdDK7s0jdsMKyXnRlyFVyWaTToZTYvXKegIgoCteSoA
4f2nS8f/MNIe9rSd3HqirrlBW5bFvnKqVmGn+47D5fFbGwfZ4k3FOn1ZPVKfQXDDzSxgu5/uSqoV
yCi16pmkv1yvn7/zxOxbXuSGVOmhyDYb0pIbD4GQ2+nluHTdwa++2QmtzZC6mf9St/wO9fV1iUDX
tXCKImuPGCmnwizDoKL6EOadHUOrHr675yiq0Lv/O5kL3Lsg2Z5EVav5/Md1KzGS1ecUf7djbYTZ
4nbjYAL+Ml2rD25Dde4JUKNabcYDHycSgeXcqqVfUNuEmBhxNBao1RVtUb5itpcLP9IBN2FrMncd
oQrmUywfXTf4ClJKPJ0II5ba2uTA+Bz6jIQQzTIfpa8nDqWgS7jOfsPT5X4K84vub7wp2GzdWVtx
qR8h5gUk3BXqh+fBxqk5SNoP2gix/Emr/cop0uUktpzVqQD7Ll1sPILH8nX7gjVN6sNjn+I80pE2
dolUNpUtxysApO5XRfpUG82mLCHuqzeyLBf3W5axQxDY0vSRnB4v+X3YejSw6dhjPWrQVTxz47+5
Pw5zEkfHFUQqJERIlBRzWVrTuOuhnNSixV5jQAbzGDetYaPUfxDYEnX7YrXQV8Mh9NzS5vVTONji
0Y7JJSfQQo6MtSCKzx7HhifpwaSddEzQCl57/tmLUmvzW19NV6WtJIVu8sG85A6nFmlzSaoCKt/h
vB4sBxlJf2kRMCSsaykIPO3SWcjjmkxaxBV5ATGWFrptxSd6UmrceIddj211lYxmC/MWO309nEMA
bXoQr0e+SftI/AixaMnz/FnzuCYZd0GtM3lwWjcQ02mY6UkhwzZSuNtzMLYs2Zwutgx6TqY27oE1
kk5NJA5DU5Q6LmjZagzcNogn8n49PV/PoAcFER5xvLQahjZ/LnQAnkHrgqFo3lwXA78n6l40cUAi
9Lx1/VKVkSOwmcAHWUjdZFHU3zrfy3F6kSE6xpMC9ZQHWlBZNsadTCr6HBOOw0Kinfrr4XYBarsn
bYWIN3glrqWes8u8dEHwyxSKjVpieD5Dw75yHSH4T/iHbRV2Ae42z2ObhA+SJ9At5lXPtCon4W7Q
2sWmankiKAZSw+R0oN5q2rcsFxD24QmaRNF9uCMvWD+y4i+ayKigOYqsASUx+YNWmWhhqhmr6yLd
tsRSuO15E9xti6bt26I2PkJERzIEX50ZdKNNUUyqXFpTpS8s4gT6fEc3tBy1zV2O/Jug9SABX3kG
VeP+NX//vu2F4ui7RwPatfDPRiW6urFrIYpJxejqY81uaG33ePecVVMpEPfnPVfEaNBR4/SWN935
YzUnOTE6QPcNqzLXw7fcermNH/DtNXtFMdfWPZ9u2Xw/FFckfSJiaze7Ox7VD3XJZqvzPebXaNXm
5sphn/fkZAtzLPhUddr2NkWi6hyjOIomlM6dQjbrgbSx4LuLEEs71lKxhS8oO5gOe4wW0Nzor5P0
1h+0PLQ6wm8HYpwnZtydwEN9eGuHZaa9BH9W2cnhbWWlX1DKLNU8hsUILfIbe+NTLeFTcQqX3ZEH
uq+bDXHKkb6fLaylPqy723IMZb3pSOcaJIfxnlIV0QpphdtAkzV8HRGBWbiH8xEkno9jM8i/zKeJ
ibPvl9OkS3Qn1IxFh/m5l0UD1/E/OqM2LA2lx/r9zrSVL8fHX+f6kb985ksBqikNrld31618MK0J
fWmpf43cOULltTO/Di2XQS+ZiTkSx5KMMw9G2lGdLPMGykamdUyj81RznZAaCdYRVSvj7FXYrgMD
WULQqHKQAzLLge1CsSM+WIhEJoOZK0LWXVjpP+JYkb/EHu6pEe23TDDX9HeT4Xz5Hh1OqAmmF741
OQiuNXORor3V9Av8N1yzG0/1jRSo4RdR5ZQIsNE87m8OQcWUFOzi9LQYcZU79eqNg8eHwy5LJDdt
Z9HE7uzffj6f0IRXT4eXhnYf7TXrBPC46T2XRSLqpIl7vXxOluZXEXtWwRsZWvWhP0yZ+IJEM1aA
PzIt+un6AsjdNJsz9mkJo8M2m6X2rn3SmT9Psp6nfKI0xynObQxELIJpT742M8wPU2XnJalSpZOb
fvDfwszub5Mxe5nkWtDZJwb9ja3J0aU+l04dfSw/2ojR+rInTibUaHbcvx4nAzYMYOjq0c6YVpyX
HZdFCIcviGtWRbeHsnSWojO2y+YsnEqNitGJa4i0SW0pUbGjeYhw8ypU05F/uXbHfVqiFobo2zg2
ipbmLoF5XFIqSpzvEtUvyVYrjR9pTD/h9f/wRpct+wOzlaNhWEsqE56LNb93JK0lQitmZNh2Tdjr
9eX0+TuM/Dklds6bnLb5l18v8xTN3x0T3vmiOit9u0ovqbW//emnfRPXmhWjHZOYv5R9rUrL7qc/
2FGDeBqJIs6YZKEw4HGMw9P46yY+K+I1+fX46cv5/11VpTNVOFqWLfnRIEHXbyLSKWPnXykdnO5i
I0pa3jy/92VaUj+51VnXnBjRZSr8HqvpzmOP84ZoBXZmND36MU722xQmy3OK4ljm41MYUx4GPHe7
30+PkA5uCO69Ob1sXuvw/nK65l4XO9ckj1QF3UoJX66ZG+D2WhLR+b6BfUilynWWpLV9RyXGYnBn
i+zQWftup2veszOzUW6inM5BxugDfVyzoP7BXbp65E+FvPx0duySOH9jfzaFdrn/8KR0NA6SkNyl
dBcaWoZRyh8L97GetHcdlIhDqCPHOuYawF1XSqda6TjaqjzX/5+2f2uSJbfRRNEfdCzanDe/PEql
0nSdLVXpVFX3zDyMLYuM8MwMrciIVFzWRWbz3w8B0p2gBwF6qnvvbbO0qrqc4U6CuHz4AHxgg9xi
jKOZRtIvmFWrLxRBqXukfzWLPUcdv1bCzKL01w3MatUP1XkQ3j0K2HWSsI9eA5JEhzDn4SWjDlm1
fWQt0E1qUNKLrj5oRWo0SF1Nat/zsUOmyJGOhEHCaD16z+AiWWzyNhjWqFLnioeAiwm3htJAnnzI
sTi4vLVl+iN4z9iN2AeTd2iIc5G6OTk6VqNfzLQqN1wRe2HbvLdH+wHPif/Shm/a84gv820sKI7T
zAgMN6ecj/u6Uv9BvrED78Z0OTu7qQaQEDXXiY7dgmJj3Yr25nPJCr99Q6UFPT/nmG8EovNilbZ4
JLXJ1U0xas0gr6k7ebX7R5O/UJ8Myx/BroQuFbFxxdSkkf08UsxL+g8tH9+8XHwkidw+f1VD5/DN
cfx22Am5INJ0AfvDq/LSuNjxxC/T5of60IwH6PTyEMWeELEtuuZTtcyK7zye6l+qSq5gZfHaokSY
wSz0D31j57mj4eNXNnbvDVWncPqxCcTjwdRb+PWEZayxFG8iZBVPmV8mR1/XSaHYz64nWANB8akC
QOLjisl0PUnMGXDHTdOveD9+uQX2xd0LiNJr89B6as76hGMuF6vsVVdq2CKI2krdSVLRqS8HenDX
8xHYof/zfDmGtqzxYAix9Xq7CGxP1VDyTzvrwVXzAlWjFxjS3IjgCJb/Lg1bIgytbKj6tNX70b/5
+bvw27ZU9fK4ARPxT3gVV1LesY4+9I3GL9pd3zFv+e1VmDNLsj8IWaRGqFNb1tg1jl/CLJhGbbnt
nPBBtmRs5zOtdmH0X1FmDZAVqi9BNAfqyiAbMNPwf/ij9XHHj1+kXJ//Clp6YbFfVWhqd35ftws6
d3gbwihdsQVmQdNbPF4/RV3K/HoXePOBk1RdqSBzf9j/AC0H/ycu9AsGNcJBuLzGLNyzFx/QQ+fV
7eUAc4+kD1GlRkWn+9vTeFm1kcXytKCX1jxPvY4kzWun2Pjf7/MsX/9wI6tf4IpV4BHcXiUMQ2kO
0/5wfYeOSj9K+Xl/gG3pACAPu+oqN6V6t7Fy+YjXSSvV0ydXT63J7cqQvXRd8AnQAILfFG5PeAVp
kb50hXc+1PgscyL8ri3a07S8TRAW0aXfjyDEGrnrHlKFTHwXaB98dmbIizFbKWVWjw/bvIWaWZHr
WRUod6Rqh3QMJWS3fZibw9O/OjoBAVKtqnOVjqFnUX92vS15dbHnDkAAkd8ax71lbEO+MbMuVZSR
OZDAKv63HY8Ktd2iM0Uh1wIg1QzM/fEvv/zw//z4J349svXtXDNZZHlWGXNZVxo4A/XgCl+/n3av
l/PpfL9ih02ev9jmjJKHESbEiUZf36vU3Sg06K536/Ty8VdQy+P+h99++/UuGMeWlF+RsrCHEYXv
l8ObTKSgox5TuXSONXm5wvlvK3mLBDeE13RdZYh9dUFSLoIF/v1afjcPwrRZerNtHvCcvAC9Curo
XFjcKpr3Yj4l3+N04Jkb6bD5I6bs/xZLrFt5uuMUf/4S+CkcwEw0nkV8v4ovTpNXeWCxKxHbyYrw
oLc5x4CUrO4Y37fMpMxV7ZdvK5qet6Q4FsHf6C2NMAoI2ZDxRQPXsIoCO5JFJATzWRcWUu/8Uq7U
Qx36svxLHKeW9qlLFI48tbCmN7kpN8uU8x312aN9qZA00DVwtP1apgrJjZHp3dy0X1hMGB1sFqxz
xU0X5fXqwIxv+sN9f/C6GZ/BbjKhCBf427GDQSUJRrtwgLJVccZgNG9AwAwmLtR33aF87e1wAghI
qO9SmmYAQYZVFOJUnP8NjRTWEWL+IZC0hSXp0JGQWx+kVz3Bduy8Lhdekkgh3A7VtcsVt/v99bi9
vkK3rfMdpvX+4y4IjtJumZ9tU3O8ieDyP/74/8hvpkg/uywBN/oIeI8vtjvvaSmZ5teiXT9Bs06l
SPBG86btzm9vAlWf5rDBbZt2inhC3n38zC9A9JACEVax5db8QfyjdJITQHgqBnbXL/54Tl5dC8dh
GkYO4wVeTjb8egAhv4DC2UmDwhSd8xsqBWLjh3QJYUP8kWPsJ1xAkmrtMMeduJ7ketRrd5UhTGgF
FckqDj2nL7LiWqjs7uI0OrP8tvKdE76yL9+Khfx4E/QsrELuKymQ2nq33l8qOLU9zC8KKa7odwj3
gnJszbKv5vxlt8v2gDlvuCHeDDlB1ly50SI0tEknmX6AVyKKCgVsV+8ExQR8Vvy7oJV0OUTl9Img
TfpF0Y5dtCD7uzzMSilKLsAGrlO5vLcL27BH0EH4frtJq1AwP0iUeRT2WMJak3eyFEQZuulIQ4u5
sN17NZ9nueJX0215hsvz9v4tHr4SPouaDxcrkKBpy8QmHq87mMR0OqMd4pEoTdsABc2niwc1k0uN
cGSUwmSRiCOZ3lXbrmlXrDWf6n/maYNyjgsLn06gTw2JHt04UadqQae2C/JWzLlmYrZ98y8MzqEg
Y+2y1k2v8od6QUnQA1aYsRDUdHA35XBTKdoUI/SOUjENMynWw8k7Mf/++1//IqiIvHih65evVTS+
wkupsl2r7Z0WfEm7XDKWWGJ6ObXYkVxcTYlpBuddLS+FaM40KcsgtUBLk0gvk2DNKE0OqJkTP3Z5
m/AuSW6Epr3vwG1Tw8N31SJYrwSpTu3xHtLmBRgpbkCMQmgnAfOKkjvBMVZRomrn74Tz7xZL9s3y
G2MzTfAy/T8KckBnugyoctSDx3/yb/WH33746afaMXZ9mTkZ9I2XzivOgw0Bt/B9JIEGYqa7dVem
FZbsl5Hi1EY6Fuoh/fIyPvsHX9febU1bONBmdVxQd67FXwMdoaaxhV5xwWfvNn6HKnTRz9dU9sIl
b6X3Qwgl9g7y//Yf9/HyXXhXt+z0N81dWhm+a0NV45DG7RFnQxA2krSPkaEpa0FBW+iuHBnW/GjB
5mZT8IYUs5El30Pp4Bo3g7qbYIW1KguEap8Ot0kgBNNBsha4noqUwMfYQ7CQbUnzP2zZ62UcsRrv
SmLSff6mwjZS2XDJPnFekBW8IHL3oRhBxWqEKXt0RbRc+F5VqqZdfq93/u/bYwWK0N1QjrIyj6xu
VOgIrRDkPryUl68v5+NdqObygVW3dMLK+Nk07mo+R4khpXu3BKY62TwJ4q/K+ALOmNtWQjXaxQbc
gklB1MyIFcxIuwSCurLOEa4grUYMZPu2YnHnVvnVvVdUviSLtFRom//wPk4vXMd2GY81Ja0mnGS7
LKhaQqqiW66zLhkmhblcQCiEg2a5koSbgnZZgZs+iPxDNBNZDCJYSJbBAEnH8cNLr3qt69mVCWGc
DjWCDu3KUczsoIcDEPxyx3Q5gZtDpkWLMUu7jBKMrFiEW0g7ZYLbqvplrPgfv0pRos6y/+1QCp6E
nycILKDT/YP6/uPhxVXcbU1pA12bDNs3LIY/pvFxm+vfD1fhcO0SX2uX0ouEYKiyENQtwS1CQ+yy
MUELKXpl/XLm5pT4+1jk3TVlnbW8TWtAZVVGK2qmZBBiB7XcdFsHhFf14FaKYul07VV5MeFgKNYY
nLKh7o0K5pQmiui87SIIJKhNInmAi2v1aFFvF+9ZCV2YqMyVsaP5DIj8yDrCleWPvhawn06w7ZWM
Wru0L44FeWutLJTioh5Z9NZ+tmKQ0dpd6QTjP5STp9Gm1tNwmsYAmJPoypI7ddgQ8FkyxCRGrars
AwqCb5plGNZX4TNBO5FOoqDLdezjvkTPjmfJbae5kWARw2WcVf8aRUnIs/lJweaQ3qFCTySltV6C
NXbxJuv2hR46TZ+mdcBKC5kD8iI4WNoKmNGifZEgiqYcAopO3sov7pnS15Jj8ZAvXhma68zQt6T4
qmxdLuNxi22N5akl3rpQWFsnWJtYg9UZe0pkADdpylgw7zhBAYLz2T+gCLZu+zbXu1fzWML0vj0I
OE/XLccbPmStgWq8jhXTlJtN0OlGgsz35T6LKdm61v+iOTwANiclR8Yk1aIGwsM2DvuuSQQfIXxt
lkCoK945AlQJ6tYuA0i3hC0FnUICIcyXTs0ecqUknI/JyV3Z8Nk16Xna6hvrW/I5humcV3CQaLlN
o8hUzjX6RgjOmrKDUua9vJ0v4wpopKWspD55eOW4f8XHU/ILhikxCsypAIeT0GlZKRrD2aGosauB
vqYElQBLObpfkXs/uwMVVrBSFCWmMsrhgrvjObRQkuSO2iYptxFVcv2rs6Y6FhWnFHAKgXRGECM5
uqV6gClI78f7dSOMPVWKJnFoFuxfDufocPaA46wIu4T8IY0m6E1Y+ouRtypBMpSeR5lkRJuh1Z+9
AEGxka8EI6SM/FZCnEp7GQKvafJCZRdrhXtLWR/UCRCypR8Bb7slntMIam+VrWqHpUPoitmoFeou
m3c28KmoJbQsoIq0p3NBb1X4jUJukBY1gTFRsUb5NE13X65dyVQSQIW0qJ141KdAkz9V8xmq02XF
+kgvOZ2nAhFmZIpSlBZH0ZMFCikl/4dFtyjN4IdP3ogL+KFecgh0HU8QwrauFHWJyk7QdaSkUWGw
0oiBwCqa9NAsA1THuj2C1VY5c68AZ/MonWDNaHIwsL76MtQuJanc8t1qik5Qms0yiWfXaGOoXhQW
pVO0NRZirNJGgjLqyp/M2R9h90y7TPF9RK9JVMauzHlYDxqvsXJZPkCX8Bc5u6FIT4dFD5lcrQAg
VWu4YShe0oTBZjODfkW8YzKmYVdMXWZj2iq0N4besYovr2kcSh3NtLMVapqidd4hXlBrgA3J+e2W
X7SO3Cn4X5ldJ+mS3fn8+bCKZk3piXSF1SAI5bWZIdWNVPZJ2KZh4Zx1ZZ9yBZ22Z5DWFSlirdXS
R1Sr9J7Aj2kecLd2gfis0BnZzGHicS20pwBL2Got1xonlc6HblLfVtqACfYHGt1g31X/t+M+TBK9
XoW5MF6PqCqtBZdfQS81eeCqhq5soCXm2gMHuK27SYIr2FFQyz7wKwKEIDi2dqmWtETgFV7EPvBl
u4KzvaIITS3hhraMlG2S8y28FaGvgKjrWOGbruxq0qh+cIdUGX9bxxCk6TZKkVpjGikrlhIwURCD
u/DqNdnRa/sal1ObZTDS5JZN0PWuitWv2wpaDkqBb0YIJWaFLiuj5UoTe0p0Bk0Z2q+RcAUHv63S
esGJkRLvzbIjfi9/nwS26PLbsKU6UtzO8Cw+eCmUGco+H473hE73xxHLxiNoGQ7gfSs1YFOGzmsE
BlN0ANg9k2AzW8CRsjYpGPpf52Q+9lEDd4xv1EEUJ6HlVvrV1pvXEPElVenlVjh8BxziY2p0yVze
Bjl2W4FmGFjwLjAMOhKoYeeVh/EiEUGR2tr3utjcN7SkwYYKu+v1IrYyIQxl0pLmeRz3gVS8aqaE
Lk2BWHZ5rY1bIV0S3FyxxPWOwb2ZAKt1NqsbOJr8soXR8Xy+hlEV8mQK2kQx9eGNFwjJveiQPx9G
cM7E3sWEuEPQooe+PtV2PouTYAaZVGZZdURJ4Ic9dN/Zj88+Fp+Gl/DyqUodkCvtoqe2H6cz7Y/B
t7FQeV+GNqig2HTTKwh8KA4SAJroy7gRp1ba7kFOurwP4qx6ghvHLkSwZqTct8s5PcFMyoVElgBh
5DDeMSoi8sG2H6GdUYa5k8njx8hNp23blgbbXGF47WSDcG+DF5Bm2jLAryMsYZznE+GMO6ph72Js
rvcnlFZpi11rl4RcnbZnRTMVR0hZBBOHRiX+Y07s23dNqQ8XcGpmYyB3K7eU7kSp4H7Xzsfj9QZs
i+0zwExI0Bn/cT98mWk6fu0XPL0DjqHxGoZ1IxxtQNQ4DIqiVUUA1DZ283IGthh/IZrFIF0zJft3
n8HW4WmLnrVtKbmrwxKgrs+NJ2pzfzlQcfrHQStL8Ioj+bGMQwBPRv0btlGcOOkIESi2pG0fD9MH
AAc2cLQEVcExBvGizyqIwHJAXrnDzENpRLslVWnEXdl/90bksJu0+PSP+KVhoJb3Kr/zZ9CVxxaH
VzONrsiBo5VutMHbvyqyvA/tSFYBxBV5eNNwDBSUSTtUQjpHABmj0MlRqb4vfC//FmooVzLMxwmJ
ONj4+7u39GNquH+4jW/8NrZLRlFU6ffra9jEabkaCdYRmhPpYRxsA6KUvN5rM9O8vIy777sj/zB1
/GnaIjliCCJWLk2Tuzzh3aHU7rLu2jlikpB+GpkT+TwFaHAPjJhVZ2NJQgYnbw2PqqCiLCmfIyMA
gMCZxoBqez+f+BjNKV3Sa2suGX+daPRusRbc6XyzYrO4D2yVLc03i8gW0X1RW91CY25eIImZAodA
xxZD1F3yj/DhmaX+PWWqx7RSsMeblyf+7AgXijSX5z6J/5S8R0734NpU9CzFD0Kc2VIR0itESBX1
wvZyTUHAB82HowNE3dwbeJafy/h+3O7GjwhQm4/h62jhdTgr3CfFf+ZDIWObOzZrfEjbPfS2KKmi
2pn1ZUd0nv+KO+z3+uv2ssedPkjOoSE+P1yMGJenvgPJpYh7za/VUu5AKCzpmRjgzQfXI4ApvBNh
i5IFh5a2aoR/wD1n3Gc6LFnPXje5IdgNUbpjtB0OKEwVeTzZZecvevsQNMavWJw37xuQMj5MupvI
zirI7+Z+kgeQOlrqRHtzTfcIhWcb4Sp0bO9Pb4fQGNY74JNvxYs4eVkcLmD6ojNV8aWIFemwu7Ui
3fEnNOYe1GWE3PlXGkpjlrIjWKkFaNNuOvAvv7+yRDjiHAfzEwPShzg7IGJySEGwPTLWLGrIYMIx
o3A4HscXfoqNo/kaSNeYRwAhnhx/+4cSRvV480PNfsVIW3LrsJXpRBmPA33j5btU9K1ehhFmGS8d
gCV0ub8DSejpe12+adEFZD2UtY+O2ypjMOhy4m7h2q5aizYuCVycWMLg78YLyFW4dK8+FNpedq9Q
flyFlIitarDuppkSuEl5XiqYiVmyKaMSH0/7AH9OMgHvOVZSyo623KMNClARyg68YsiyrBPJq2OC
Y9flnN9ekyN2WXdDOZwhMAsxKTRj/+AZ8V9DXBIyyq6gHHmlSKfJwADCuCMv580E2wT+27sw39mS
0tbQ/3sZOweMTUDdHU0UN2FGRMErXwHVWYIYYsg61ymgS0XMIMxQH6+1q0SS/Q5Ukuu65dcJnuey
aH0RQIOXXjkhWj0ZOg8Ny4ss3x7Xlxok51ZvHYhKYA4Qe51mbH8e97PEyoaGzhoe5tlB+Smvwast
iVVJELbQv5UgnJZCUN7UvC/vEEpevqzBWGhFKWiZSYCnWoD4iZX4IOug60g34SlUkbULCS9Kg2K9
8MP0NO+YAB0ojgZ9G9/g3MRkhzPUDcMZwu0M7K9HQB1xqB2OnXZNZGFkSktehA5OAS9Vz14qcZxW
Y2O2mDd5hFFIBCveEloo1WBJeOM6GperFXF5kxuJjl6SikzTNkfAJlWqe3AH/XlB8CVO5HOUvgm+
s4qzoYjiqTnLBM1HNGkpzJXwi/ZS72eAhERO/AZ2ZY9hoR4qv9+rJZml5wJAIeyg46Fw1NcCEfkg
8tjlyOOjPaHXkb/PutSS5TH0qAQeXWkiz4OA1MN0R4fKwqup4XGnKxeP0C4MbI2JwfFCAcu6hZTx
QnJl6B62t6KbaJaox8ilEPvOgfTaIJgMSwCFYKY5E+GTVkUZtGySdtWgSYoY538sTdEtK6V0mtOS
pnPDFCqvfeSEliO1sGQqTVRXE/YAnH8xF+5IRh2ZrEbZIo4hD3dytI0T6ALdu5JEVXSRfdAiXeaR
+rOH8VC78cifvyGzdQz84ahF6VZYFFNSG2C9P5JJcXSQMYSt3nzbegDDxy8LHsrjbVvlmBpTZuyE
yMOHq1UvwNIOWQDLKIDp4rjSz95PCvNT40Ak/J/f0Iz8fL79/jpeeCYdjRVxpIj+P2lZ2mtQWEHl
aEpLV6gSsCkYg6p+oI8vphvNQ4X45YgeQb87/5434BuHrbkKawxLLzfy+rN5TvVPoxzYxiVmJ86I
rZagZq5SIE4q9mN+Of0IXouwzQ8BrCl809oNonwV8JxUaYNWSQ8Jh3F2WBwTGCZ8xlsauE/xxsK0
wJfoABx2my+H6wHwNXCY+DemyRF09zJcerHklOuvHvDSAdTSqrfDjc9FZ/3RsJmXtFRIntVern+g
oJIl4xNRrf6dEFHDsKmNpNHoDBacDbngE9DlMHu9as2+NHt4XhMb/Uwn04AiOJ/27IHTFpWl1R7e
UNdWpLMdNM6O1o1p8lWNQD3vVSkdnkHyU+5xOvVYhIDDxHnBIQiZmecto2nZ33FKbYQhb/5HXsZL
gKKlEI0WRqNYdw979whIVk+EtkMiU5mLJxKT+KukhqzaztNt38/vIUgIEFpglEdc+DL+4+5DCEFX
dLlw6xWfXxcfOu6MER+6BZMs1PeVpEbwdRW/6IrFmvza2Pob6vpdbB4+PfYxmhcOeH+43GnB9/L5
0AZ0FpmANmfyYfdbplK/W/g7piqGK3ZNl2aeT9c44f9XDKarPQFpmlPPFAX6iil5eltz87qSiiBa
iy8oIeymEr/KCHUVBLzE2R26utErdDDNkWo8et0KdmKFbGYrBharegQbMJLxkiXUVdCpcpMnI5qc
FXLVlm7jCpvBi5YTlQW9hk3tGhYnkxc/d8XB0iAUW1I3BZNNxX6NcSCE1rLg820u+8Uw51aUCT6j
R+fD4DVoV1iTVd/W5kPZ5d1aYZ/6f8k+rXhVOkJk8sX+7/+dOq1cd5dxPKWxk+GfJyvt/xfkmeGc
OAQ+QKRNAz9C/Aq6FvZ04BdAFs/DAl8O+/E8Vbj5Q7owtZthiX5egjh39B0EBAVWCLNlwwpAySl8
RYBxGP2Da6AvFNaA04xpTrpGmFdyHL/xuEf4Hj2vhPCQefweLN47Pz/7N/rL+Cy8FVqfuFbix9G1
YlYcX+7tAAU+WJ0Io0w/H27h7/I8ufD5w/xDiNbYiS2IuVRYJPbewB8KDX543zrsQ3p3ooCzU8H3
9apAGpoeXs+ktQD+7R/WSjIPQ2AlkSfCgms/LPXPn0778ZvwYTZf4fFlblvovXMVekOEhZr0VWYu
vIuX5365Qlvlu1eSr1xZI65i0hWMGOTjDfo8fn86B9YhvJqwPU36ODJIO5O4IAjX96PXjTzkG1ZL
dwE7NLaFc4PzCrLkZUA4N1Xb9bgUKAuw51MId7tsT9eDfBJNEn/MrbYlNQZoKny6cBTpQLEyWXep
W9f8WkISPUhFElCLJBT5zm+/+b/s/d9ex8PLq3SHkp4lQ8yZdaGtxEJ5zGXPiNJXbmzfLGSb1VzY
sUIYdRHevSMbC+wCcj7X93EHtST7zfXwT+lwkizGfrCPIoSSDXWS16pkE8uZwha6lnd0Qi0pCND4
TdgrNeQWw3LaTViiq90ObkB9sDNJNjA303KnVT+pJL04510z11T4lKTriZtduOjXw9ORw4DDSkT7
6Bm4LHxVTeM3xMtp56CS3x7glqBxE/YpyQ+SqHVVnSFVQXjHPr9wU+ub99t3v8b59B2I3ZPl9hJ5
ON0jHU4U9K5PBkEhWl17UeE8mtwaPG7jyV/n23ewna/bi3i2TVu7f+NxxMgA76HwfUN2ttMU3Oz7
TntE5GXlr2ymo0zDOBa1g9Qmf6HHDR+/ecv79dX/7f38fn8XhIyovNC+7fEK1DyCbkjCT2oG6RIY
zbyej3tRPpOGInyChYkVmziE3RlqHjFUf14OO755fTitdF0IPzsFVcEjodapZhG0q9nX7ftBkMP0
OOEqFU5qjXJpctfb8A7h/nCteYQmi67AtCDdJuRNx2/AB4Gu+KE78f3KkUkt5upD5D0MsXLRxWvi
JSBOawTP43Dy/tr26M35hVtKDxEZDX06Z2Z8aMIXfBRs1s121YT3mXo54yLJQd0/v2zezv70xxd9
O99eR6MA+IeuyZDRv8HV8xrZv9556h/tr7SXu4CRv6DI7NhfbWLWd8ipEPCLvIzh9kW8eshbdcAZ
4LAGbK7idb0AZIVTIFtHUfqX8du7j8r8Jz4fLtepkxgjHLh/kSU0TOhtN+/f3e9Jv71ctt/594hl
jvhVzRAIQpOsnkKvnT1cwMsLgjxXfqW2zXd0oMLgAyl+M6YeqPjzIA39/An+C4wGlCo2U/Wv8/l0
/urN1P3tiRdN05h0TBC5Dh1ZEl3M7PNgVIu4WpIWIORE7wNW88cNDcbBHKBMXrG8D9TpHgMeHOPo
L9b2dMOm6cBPOp7P7/xvNeQ+JD8SjzHU+HM94OFK9m16mtSGwJtCi4BwGF+2x/v4C6Q1vcLwfvbT
di8ISDob4ARP3Uf9bXsBgsMBEth+F9M91XBP/T8qfs2ITmKfYAMnroyjn3kAI835HviZMe0+K43w
dBCKzW48QmcTrgMTilxDbo2Z4Yx4evKdmfrbDRMgmDTWHvqofPF+0zYKKwgGrz+J3JO2F/72e3H8
jmrzBTCa7eF4v0gaPX0LGSAH77Pz/+96eHs/Hp6/e2/sEFr+YhoHWyNtbt+hy9TrCIknEN+nC7Cu
0OZCh0T+1Vud6y9FpRSa4oGNg7h/NwrCmlQGRgdueUlntbM5Xy/hlgU+1/tN2pEmFgbAwmDUY1kb
3tfjeXtrrXzCTUO0YpzNEBvP4kwHDFKnDspYvXGRZK0tauiYHj8e/EL+JK7fT7ftN34R1ZJXmr2u
WejesGoJd4w/tN6VVAusATf3Ek+f35aOPJ8q4fx/dT5+oYeFpv+6O79Lm5K+B3v8TvznQBEJ/iN4
AIL4dEnHx54h3VIKr+LReAlMgqIwaSCoS+Bv8f2Fg7JUubJsM1scLFlUUn61t8N+D2oCZlC9f0fz
sH3hu62EXyBWtkvF8XEMTsU8mGnICl4MM3dTRikKBtYrTXghTA5FzXGIOZP4X7xDQmUnvaVffyFo
9Fwmw3vFpt/4766CotclFYne4eEaXyVp3Kc7Wtkv0FyL34XGpU0ELmtUmFDWHV4xfin6lT6oGq+C
HUlfijEVo3v9i95Pe3AC8La+TApYULAuk8zI2A7vhx7F5b4D3YMz1sF/4feQ2Adkj+nk78MbPfuw
UTK2A/FIcFK6Ig7abfQO/vn5mdx+DNj8EX+RRbkZ2kxJ95kHAErRf54kGV2+80F93E/egcaUW/K7
ZI9+Glm68CXwCM/XeRVBq6ZLT+CZ8B3jF27uffgG4vimiPPwcjoD0Sn81xscUicHJX2TeyThloBx
328mkXnn7Z0hUowYbexOFq75FkggZ6GCCV9Bk7hoSA3S0J/CKYhoOGO+1V81FskJemrI3bOkp9AR
gBYZXvIPVzzn4/npCZlh4VJ4zyC4NIIhIxLdYgFvG+EHr0r24y728L1iGCxIzpDbQxsrqN9EjWHy
T3OxQ/r75uUCWcO60plYY8NU5aeJxEFz9TMq2TSkyasbqLEKQapgDBtu0x/cMTATaOW94gHPMQBQ
PpS4nD+Pwp3XJDzpZro2Vkv5V2fbbOJX00MLAwuox+A3UPAU2qUGi42g8W7vRm/xYKu2HHYaLhlx
ee2MLvoQygv54QqNCN+rSmsg/oYGjBJmqM3b7Nfxh7/d7xGFw5xv8M0n1z10mvg6gsrdHKFuI7oT
/E8O1uROdrsALCa3Ix5o9H2OR8mCKlt0/yfQJgaAj0jNB0EaN2TOzjT7KqklFPYQw3jtJLpmhgh3
P2dVI+Di1dv47TaerixiiVeXOCOk02t06G7n32TvUJNQGkA41/De4fXz4T1snRRBGkUCHVKmW7yy
2LYpdhOALRMuaXpPBGZ7Ej3dvRKvei8+gDKcKkkvtD0etjj+TGiYjhJM0BckzVFHIXxVuAoHNoUU
1BtBHdrZowp2nrhC2CcG40sSyt9et7fN4ep/CBTp9H/nX3kZKSW39fz05QBpoOSdPG8FQ0X2sZ1h
ivjOXkcA6nS4hkEtfNFWeCUSQNLGg1iBjUUPe0H0Ka6U0vNeWkcfqMWXuUrunlaLyxNENRRKbKYY
8vZ6Od9fXr3fJEiXIp9CqtwzRO84nl5ur6Gx7fl0FBBQEp0jdclFtR7Al9sIJSVbtk9U0Oppc5C5
ZOZTunpzvnvdHN7eQCPyU+uCQ+zyzyKH/byNcY2P7kC9HvYhthhDEgqSfki0iLl4BO73c6glRBlF
BP/t/M/D8bjFJ0Ikjn+NPNfbOeClQltsTFRM9jJP2XqNe4EW385o7azwdD8/DRc3Vicr92/m39y/
Kf65WNSCvzrMel41/9byz0xoogpc0KhFlf43/5j0U+kxYgSV8q+ohR9LH0aSVP4p9W9OeKqdn0oV
dBFf30UtcAixl3eCb6/f+aUm1FFlYLb/VPtvRngBm/ZIzfS0+TT9/8ENwmmmU7EJRfanaf3/r4Td
6tLPIv/UpgdFMejSfhFM1O+ylZ5y5DXtDLLF1+yFX0uijqhMENY//puSfqxvsj2JPwaaL9md8fTl
cDmf2LZLYaG0RwhnzG/tKnvU5ZKoczV6QjoFW64YfjpdARLM+J/24tQJv0z2WaVLqvBU+fum8h/r
kkqQnyM3ztHn4FQFoZ2Mr8oaJCgj6oS0p6Ebqp10iRYfS0eIqt+kDRF0ZEskSNNtVKIGatN3kRRm
D/dQODOnsx9zaqnOGysJe1fSlai2cBzFJHTeG4f1AkcbGJic+QqqLEkEetQTbgF8b0iIe5t5PL/c
R27oSHg1sh0pndP7vZC0eJP/sk66X9IvaReQWGjSzku6P31lhnQBXL9H1S/sUG6EI7cGlb30dSYz
EXYWYiWqz7YtWfx40QT725GLnRIk7xcf9OIxopj4GA1nEbK1f+Ew20yDO0vdBsnONNkrTFY5GijB
LnauZM5B9Qu/1hO5TW38o8aW3pJosiapW7zw0rnoB4s/mZrIIHnd3q+41f4ixuRLyInHIYJ+9y9v
2yPL5MCfMUm6SVfSxeJxoWzx+IPy4jZXxmq5eIwk/tWXty7Xpd0H1l/z/pYIpps5DtLm+HjuA3u/
MMQ98/rlX1j1ATYXdLfmFz5yAOROpFEUkmh+bINy186pD7z+qu3RK4T/XxUe0+dBTb9GOD+0PXZx
d+2HfmHVBi2+Qa/VDqtO15QcylXCs+rdk3UgJJj7CVIF2DLiFAb6+CAfUxIxKmNRjLDoUDI5qzTC
KplJCgehweZDGmGVzJgHs/1/swgCFgWcF/I0lwD2VtLbLuGZRAlEJlhCxQPeN0FoOFJouxEzSg2h
PS44ZjE7AtDTV4FSkkBIHOBjKH58wRatT+c78Pb8/ydAyF2JgoFchfBRFe4RISyQ/D8Cq/t95O1I
zDg9aJcD4Q3JqIdBGtA36bqKjtA4W0rClnIim+N4lSA0QkyAvEgfrwPuTJhmdNj7ePj5GVz7MIs2
/oaAWhL4FPVz7A2HG50iDSnTRnO7TZp/jq8F/IVK+sVM4xEX4HUR9Mcbs0CeBeg/7RhEmsM8qOE6
vh38jQDeKFanQ6+ePSSMhNlSITPZ5pKRifjb9vQdCEK7z+NNSpEsMtFBIH4//yxLZU/4sBBCd0kq
QwYsoP0zY0RANEmqL3WiCWSg2/bpcOTwjHBaWiBf4pkHxPsHlD6JWORKnIspRwQJvdA2no5W3goM
2fRVCIMlhPntftw8HVA/AiPzKlCeXUZiJRefXK3YzADLNibOHb9kT5glYd63oQpbtRWenSHqPmT7
mj6RAB8IOYGijmkxMAf4j0LupCmx1fZY+x5Jum8hE3UbrwK/g2r+BCVexvdxewusCH9d3yLhUVLd
SbYM1gU0C77jyqyoIbLQYk1+zGTd34/A1cLP277VOCOG5GMSFjFlG7yUT2PkkLEECf8tzIM9CJwl
kq8lRf2z0IeqCeSW4f/G3FMoZBR0CqHckwl+b+c9MKtOiBQ9j36JnUi7IDzm1KJvP06cEXjBJPuC
+SSEtH5OhKFAXTavh5fXzdP324iFD9vdTSCVT2OO5wOw1CMBVssVmCzeEGDSh/4zptHjJwseC0nj
urlTd7yaTk+N5aHPwla4RiTVjw3uWqISMfUOGaf7UXQUdE8Va0c6d6Btmf262/kMykwwL22WV446
DBtahB4UByxAjx6nfAN01+dJ6pYimqGlwxmZFoGNFn0zcWwMspgnKMFmoWDY9Ov7gaHq4aNTzszG
ebRqyezBHX8+HDnJwlVixwp8AdD6Lo6aiYTW8R/3LWsGNQUr7DzTuZ2+AbgcgS188qoKWR2okCOH
h4t48L1i/xtYFnDJ2NzycHpG5ydMp5oEnV+lS9tLkKDZc0qXWDiiyXmyGWfvAMYUv5HLGOPDE+xu
s1g5bi4YpcDREbY3fQHG3X3cB9yEHTQGft4er8IWtGkjSZVHegNvBbxWPVykfjqagi7IiQIjjgv9
AeTtj/dnOJc/bW/b/zyAJQartDmeYTbFgevvgDW+bRLibFLllAEPUoP/xH9jq9IqyFvqHl7tp9Ot
x3+e3g39+lVvmA4gzN+ehk2FbP8xMQn59+vS+xGuNy2M2QsnOCQBRJsWS+cCXSAeZCC2gXP3ZStI
U5vOMHjRj1f1en/6wC21ab1UC/9Y2MS/0eTW2cwHn134qM7Ox+9v58v7q//GMPabP6/JA7AZvzX5
h09BIMBTEQQqHTpR9x8RqHm2hShbafvMgGh7pG7vvYYipWwVCbFEWZLBEpH/AUniN6S88VT3cBRJ
V6FLFilrAaaagRo4W/Q+cXyBsIVEgff4R2ZYknRtoIbUW06ERACfuW5Pwl2ySWAe6gWm6k4fKkNH
kbB51/uboNzJN6d8b3yxl/EEAZzwdLJ9nZpDrZ/gBTLZWKFmhnQzsfJCR85ZpO5E4Kki/DO0j/cR
L4Jabk/cFTBf2/1ecAyS1iGZ31g9wkZB+BZa5Zvalz2T8+XHLVNCFN5Akzcw6NIVNF9kb1XMaNvl
ZnTI6Jji1yiiUDoyRhEqzZ7DrHjhRBqTq/6+rkmSDgm6StAfxPcKgxAt6SMRN+j9eL+KF39qHI/v
qGfIOjHkkT2PnjdpzyN8s+tyFRyuRawXBN6kcKNc/ujUFyPgUVDof38a9Svnq4fPIRoCcbTIY56a
zMboiC2ECTKcFAMpJprLvC4rPGNHTgcCcWV64sTOr5GAirfzF0hdC60rgkfXlYzu7Rw139P5fBy3
J8EbSSKJwaSu3KqKS5G+kjSj+Xd/Qn/dvs8yeA9DJmN0xEt0R5ztNhRbxFyEfxIqpBMn2K/39F30
TmxT0kNRAXIGSJCrokj4dT4FjuOnt/PpHN0UfhXncoUwZL7g23l/P54Fh2th/frJ4qj2D9G9eUKj
xxXR4y73xDan2RrEbiWd9GX254XliBl0Mwk8d+ErLkxLDDHp/sPrRkGEiEcJb6b6zJLu7tfb+S0a
VMGSWhLWhilSzdKVhPnfwhel94AgzjHOwev9RbgPPfkYnMfi/4xzU69vf79+gsv+6en+ImhU4vKn
QgQiMXEUyg1cAuFFbPY1ti+71ZUtIYICiZtm+S7rT7kn0eiAXVTL+AdfVRd8DKoikCaTlRaPgtUk
QScZ3BPVaGxmItQDakrwtbGe0JWQxlnjBaXMv5EmqtigyHUPaIFfWDItNlfmHfkmwQQQD2mYs9NZ
VLl9uq6PKol6QhXu6P1N5aI+hns7CzfYkBtMaNCPvvDhtLuMLJQb5KRd49JyhWVhCfJVGBypGUQM
ECTmGMElwOKq81XSTkT2unmSyFR1fT4e77hBdRNpiHawaeYawadC8kKIx4hiIHWpOVC3H8f3FWgd
cZgQYlLd8k4JVykJITp9BRQS0t7rhdDlXtKEzG5uX894lQRPoXUlDwuLmLDKdrULYwnAQop6Ju9q
4VZBnygBGSFgqAIbq5KRXcSrq8GxPm16j4M9/J9ZneZhH6tMYTjWeHwW/KIk0tiFJ3zpn6EHx/R2
fpk/h54c4Z8l9WwJ5mYs9hmevO/9iI1sQ8XrYURKSIgNpCNtCQyYkhJbf13nfiPnk1DrFu5tum7I
DCloSgjM1+NvKg+XuoXXhLY9NAH+fhv/ItuPacL3AlrJrdH1q6TjdF+K/Bh7JixDAkhL2pHSLlPv
7xLuTlEiO3/KQ6HjfCVlXMVRn3KYcwCTXqqaeZIFQEZ7M+mS5/P9UlUm5GJgmYAum9eP5VeIP4fV
0tPY7HIosV6GSFaKdObOru0HXHlDYFjMEptpYNtjrk1Ufo6kqYgi3b29j/+Ayw+6Bf4Ht1MQzBzN
iUS5pOtAxcGpoM4TdF1aBifJlSLw66sUws2FKnnYDW2edyNOl+X7tmrKcbVzQxxbSAxVc0JNnhtr
SqmJw4fgBJKx62YGRbAhK0M34gZbxBAbl+sPEe9zdihdVtqiRZCPJrcSzTzcbzP7is+HQE/5ArQJ
LiuvKS3TZoUw67BDATTsyn5xZmrftv7wvoExkkysyu6UbQrW7PwBl2so7l7knn6ZAqpN8C1h3lH0
lN+F0yRYJDEEUxG4INokMQ7xSLyjWPUd/eyAuAmCZEuZ13x7tt8+oLL7kmCGtvy0fwtU+MKM00D/
4Orcwyvq3K4ZGkf475t4h2T1FQAlyULQ3mF01/JFhaVs6fgKaKB3hWtooCrdpgnvhItz2AMvZAWw
m3YNHIOeMALm3pOSc0JCFdKrApKcka09/kPQbiTX7XQa5fy2vVy3L96fEUS6pzoflb5uOTpACLcF
1a9LGRWsAYV+W16BQDF75KoJAU5b1JjZ+1RfxeSAeMw3BBy8ou2VzbGGckgkvL8upZvnjg3yj2ub
p5mn/j6fxw1EJ5udQOxoG5c5yTGXn3la/q4Rf04Ol8hFg1hHT5Z3aiIgSGQSKzJXVbjuq3QIcf0S
9fyxhZiQ5iD3vZ21EG7uFANGTSnssc1yf1akXghOjc4xElfEJgTN3+YYbpP7M+icj6Lyc8RRa0ya
hh0cq5XZZRKWtQr/6GbNNdEzVrBhdNEuziYZ2D7CiTQEcZhR11n5pZ5fwhLEAdLYV1bLllSwKSZP
ksfb/woDfNd5q44kyy1i9XFCdqFbXk0PduSQSYfKJSqIpjLMMxLu30KvuWUi9s0HGO9StowEGNpA
mgn+p1+ctdgeJziFQ+nuxLsnZ+5Jqo1AgvFRMYc811FPtKS2jB+Ezrjj1X+GhGsOOZfRLXtIylyk
JK6krQW9c3P8Kdw5kyvDocyaAYT0en8SQOwhN5cTRHQEa1OQWHRn2Nas4QIUuVZlUFKwwyR2ADnR
UVAkX1YQ3jZ/p1JGs5KqbUniDfvlODn5jzUBkqIggCYkvFTTRFQZS+VGjLMr8bodXEkM8no5EcF0
xF9DD9AWEEcBHWrKv7+E5WpwXFe82NgEb1Vg3ZWSzRVmmuB/DsJysfgD+/UJ+oYmq9oUlDPsO0Hq
LNE1HWDpZtYXWCgGid7EU1ilO1yJvbqAIabLChjhL7Jtse1QisSWybTr+U3QGtQzC9Cgngttn700
7Su2gfq7qeKHSawIbjNJWYVGk5mlgDWwufVeRL0cuRekM8THKSrOZuhZzMU8CLYgh02utDRxaNZ5
iY4EqB3wZLrWPLq7+8OXDwAfi3RAG1n8iAURnqwQ5fUl3LYII2MLbwlI7kr5zvspInv7zfGwE2ix
WRIO55oNUzPZw3YP/fFW0dOI3Fk0VtOciVCS/RGWlB5KXiNrp+BqQO84kOpVbLUh5yZrJgkv0nQJ
ckFQgljLKBJXHOEhE9SsDCoKF4u8QGqjK0CxgvajKIxKyDuOopgOTvgeAh6lNp7hFPak519lkGK4
WGpZu9MJZTYbcPv9jkmGmSQ2mnnkeJHztC6/TOmABh3xKOgp4kPHEAvdJBougZlAT+sYyktg+uq3
JCU2JvzRitv49VzbRhIhm3nc1bJMQ3DSXAlXmstzYmSaMuCCfWsIPwR7JGYmRXqLlhgjnBuvBrtM
MQaAahIO0WkgfAwdyqQJ7PrGTtgKOohg+e1MlyH1EaQp7ObpuD19nufKbNj+t8E3Kmq3AkAkgENF
Zl0JY5ITZ6bE5FmlxgVBbLIkSFbQSZW3XEng8g8cqoVj64uzKP8B9bKqUqwFMemrCRsoZFyfz9Jl
ahRNAAGhaLUftAi+gwr7Oh4u+1QVHj4W7rbgPXS5lxdBtPH2eoYWuFJfkKBNKbYTJrQyERSYaJm3
Rf2p1EezFiav8TwIAIxJXee0UFz2+r6muIzScbFthFowAIKrjHlJGDzAt6sOboUqkcyO55fDDtvt
SPlJndceWfJt4TM2H8NlLakzRLbEsOS3k/WETyIkVBeSW3OzAOjxE6XsFYZiQo7o/XyQauhpExxN
RuVObYPIeBMIjL0uwsAr9msQWjmr0lC9WJsfBixVJkNoMqBAt6FXH2m5jU0/NjigazNVTZ3zf561
QJgOCk2bT9l/IXToVqWm4dgQFho9fuXAhtDOwZXmEhY7wYe5bwEdFNoHpAXR7XOFfuERCxR6Xix6
HIQTOY4v3ol98/EZjDmbC7clNzkYA9qdBXOl/b8+6gz++fwsNJIxeceChtzFAEf88vX0tzhiQ2hs
05fars+5xPG0O1em7yz6pptCK310lQLxTWijXxy0ieKFXUyqDUPavJNRV5UwIYIPIraYBpJ1+/JW
B/yj++kOZD62y2loQ0XmMzp0jpNgjCc0NzmN4lyb5eUX6/KGYYS0BKIjtBohG43gPm2KNT6fNuua
Eel+WMyWSg1CYtkdsSmb93F8h7Ex/kOxDVmteY/XwjZXN9MFn4qBoY/U7uw9ttRMSrjoqjTVBnH5
7RQH+A+/w7TM61toNnd73QLfH8aByG3GjFpMSw078ffrNEZ79Dsybj/XBw+HQS6pnwwW8TQPyZfZ
AgmGouX0bZocN3e+IZM2o4udZphM1XSTYPHvTWZWkpJObGi0336/gn+ihq6ZYX+hpVFTsjThoI7b
6w2nZP/yLAyu6vOBUbrw9bSrVJzRdK1PSVHNQimoeT7ShOmFybhhCNThutniuCTBarh8/GLLextx
LlWYD47dzoR16eyEZCCm/j3RV44fLkxKoaMqYQxadDimyTRTeirOdUiNhaQmbCoTcDvQFaFXIrQp
PPsb43WIv4P7ozi2hlqw5EIGAzRVzNUn0w52KKmbeX4BzL4KxV2XizCFSfc6t6dmArMvm60w26ov
3p00v0Rs5+YjUJX1hTNNZc6OMFyHjIgc5rYOASs5XP8gNrfrjeEGeL4C0YyAH3OLqGtQOCCS8X7z
ZO9glE0+Qbhdjoj8coY7eP/nPwXbSZrwqRapKW0+3mADrVMFX6MvtYtamBNiOnKbEuyMMO6uK/Up
8xbZ+4ZzztT/DtDedtvbTuohRWz0gEMCmgWW5v8mtDZT+dQ8m1T6n377HarHNqDSBe+w5+fwjije
ofvmPHVT8FSJWRyw+eow+ao4aei0xdkvQMET3mcxprZdMUNOYNOEK5PWRMpJ3OKnMzi9dd5uuP+6
OJBp0TLvZVd1gk1+YLo0yzcmbORJrC7fKPc4UvODE9gb4rECcyKOIQowI2i4+y2VSH3fSMP2dE9n
XCcCxzRza3/fjb8eXl6lYYI6t7r95D7TkYRXNEXX8HfBoValTnnTiKbZ88U4T+oxaziXjR1KtsKN
1n0prEp1CZMPmMuI4J62pN2hTZ0Ks4aYsTL76yvUHbxuv2ANFrqXkJUQeoAO+TyxaMvH2QlCVxTu
wojHc309349777/WNnegszDtYorqh2GTJ//3D2Iniza77dIZO8BgN7Aat4jLwJBDANS+bi9v93fB
QXOl841Bal9rcEosTdcj60jpFSrxfpqSfzthBLZXjeTK4xhss3TOzu8h++09Ua9XxIiXzAkmw8Aw
3vQ6P7F+L+NdmKk9OFNqfYsOxOELOLT6BkdtFBwLzixfjomcyGvrZ0X6nzOlSd7zfMfTmo6cJCIm
vmXaTJbTF7bPlr47uiuhhqs+3NUrzqE0TjjKG/YTOb/7S374Z6U1NzlNzNq1U1b5+rcp1OQjPB8k
543KjTBZUqCwBiElLVOxaeNiAiks510VQSValc9JTtBT9LPydmO7qzRlT+f7Wxr5Ls4+bVQuJTr5
bPfbDhXw7nh4F1RlW7pnC1aY1MrW5s6xpqI+2ZcNNNW9pR75Qnw35GNJHzZXrF8Je0rawGNb+taW
guFINhKPpxnIhHogg0cb9ffDbfMcqtmmgoOtMEig70vzKl/etgeYSLC5SHOGu5ILm8SVjKgSCNfB
W0wfQ3r4oSk/3yoIpI9SdMnyTC7UT9cfg38vQazaFFFsIEkdkPchJIvDQAbDWb90W86nYGKEK2Py
rvCGNtHfwNGCmav16yWa8UE9T7qozqkLWHgu8/k0CM5deIPR5VV3YdFEP41i9681uay1ifS6FJ+i
L3UdQz/uFSTEMJze5qm2j8GUIV0ipxnDAbcleGWK873hRZU2Wff9Tfr4lhstHQ3PqowASYfpDiuF
dO4QCC1Qgi/g8i8aaAuh94vkCfSksTRJHURPt+qka0XHu+NEwJZiZZBxhTEd8g7ongBNDRnYeT38
c8qGhFbJwoVz+bVNlz/65td/XG4fHRnSN1zgm400pnD8FDNM87BB4/BF/SEeGLLw0yYpwuvzFnu+
eMUhaIl+MWc4GmofHO1LEwsFi63zsTY6owR4Zfx3aTqKUcS5RXISOYhXb9x9wOAFUzCq3QKVCbLw
S9hWtsdCgByHkgE4nLzGB2aEl8VniBY3+9AI5H6COdSCXW5LYSKiggEDvoxe0wiGPYuo5oONn7Lz
9/ImoBpSCnNKOP7LwzCIH6XA1qoyagkA43H7/h7GgIzRbD1vrrCLcDkF3LIv8Rv25zf8r3EayFxm
Sj6jfLqgFA2mB8K4dlK7EekcPFUC/lOLqm16FmPusJ3hEDZTM9Wv58tnDt3Bd0DbEdbxsQLSefPx
ABC5eSPiY3XebrZzC8S4ElDlzTQZw1+Q7ZWUIZBznf06/gW7tCwpK/BR1NvBm2MYPgAA25apTGix
WWnaKxJ0kO6pXvldADQ8cXoAlxnSmwBMH0s1l2aWfT6UNsYNSqBcYdY5Nok4YJPiQKpGNEx6sy7t
UQLsywim5k8Qvf/4gmkE0bTV59Of78fnwxEY+dB9jH8dm14n1FXpRfnOcbsLEyO8w3h+hrpHprq0
nUsNwnK9hvjP/+mEL0RII4xU478Vk7DxMFOfBopYIDMGyXeX8/39Kgg+2bbkMC4klM1mBglNmoBQ
9vbnHX4RoC8bv3kvMGLIa5nrP+4+8thDdknme4ULpMnaXSIcR9kiGdirP9fjeGNjGvxanaSYUGq8
u/56eL4FyRWugMqvwFTsOL6ngcN8mRF+jk5LKIRZVOMajkTLu1i47X3x3kQhgNfYnO7HoxQqtnMN
YFxGEy4HLnM/HTC8ElO97dy4Ie7sYiYQLXwWZuXhBpm0DKG6xxgo8PD4AzJJlklVRnAOUhAOpUtx
IiWfPWrnfgxxPWLzp+pKInz8B6k2vxyxU2TtbMmXpGwtghgIs5+x0OlyP2EG6oLiK6jGdIlIFVeS
WaC8xUYn/CIdURSASJgJkjjHXAIBN/iYHvekHfL3mSr+r7e/wmSmA0PxDq5Dk7sdtPPm7TyBcC8Q
pfnzhXyEdDy6b3NNGt3rwBk93t/kMX3hjZJOGSD3NcSGx8AxwRRwxfdwRObx4PVAcf446G/uJEN4
iZgB82E3xIRX3sUM7hqx/5gKHUpYqkT1xmWI0gHJzrHyPA0u6Ip0rxDbSnHcnJD7fzvzE/Yk2WbS
NG1p+8br+fhFMn9drkAzEs7xfP682b5C4Ihd+AVD3JaUTXIS1nhptlm8SztXtsTEcqxpGb+fvex8
GZG6FLuxhfheUADEMTIpYTRtV3Wf3JA7snFo7QmKFSY8SWidENyBPtfwJs5H2YNszFPf+Xcg30C8
4KA9ULsGJ0JaoS/ucJhPVzFQoUNa1KEpNT7tYJxOWA17NNGfiFA0cX4nzN1Nyaq4mVeyvWIGGd/Q
JW8AhwvZXAonNxXby9wDf+ZpBELYimjINkQH6bmLxvzgNTgHuAcTUiUEf0PaBTL34CHFNHEi+Ncy
xMwn2PDr+HTYR+73Wwi6BdewJyeCTaGnmapTL1mhB2TYeJvL1eL6P3HQSNhYR2zznJt/TJPBzsIi
Gy1o+KITtfu+O6IyfJZ5mMHnKfpNYQpUrKVAqh68zuHkr+z26DWPEO8QFYuNoHuKJsbAPHbZwclG
LzEP/PYO/G0AvEGsZgbJ9XgG72n7ft0Y/iucKekrHzGDKk4jKGV2TTt3/ouXqp0B4cBBTuHLHWdk
YSgfHVRBZJO80fb72y+HF/B3YMjLy+FURT0sUcl4I9XUcR6UYE2dGeIfE2zwMZJhpwAEF4zcnZxb
8695A8KJNjlEkNysWP4I2Dz06ptFRfBhdekE5nxIxY8Kw0OmnYc4MHpS/1V5FgASEkqT1nSz+w6/
ACmwmbsvWOEmxwyyeTrpCyoFxe1cK/3wUrHRXyj8DLarJsuamIMFQPsOTviWDHk57CNNew0CQfAg
cnmTbr36uGk87USFSBxeGzJ0ZEj15Xy9ThFp3MNoxBJpK7R0i5CvED0v/AtXcmi5RhLBtSiex4Fr
qRCUURIHbEGgU51SLTomhovA0lgYCGmJ4FTeRa9CUwCjm2GZaVRw1SVrSpH23BEwgBbnU35Awl4s
AN9IVfdHBxoqujlceXQ7z4WIgGHqmE2SmDVH21iqWzCdoIxhCYtpgIag6F3J7eakdxZbQVBtyYOd
BJUnTgeEVpVu+ikUOwTHQi6JCbavKwGfs8MlcN0DBKtLLtf8+GXEQr+D7BCrroS9BcAKyXxpfLyA
UrncOeooXg1ZAuECumYoYZrTQWyPYBGBtgsHK8AymjgkpK3KbA4BqUBQ6JdnxAcu3PCndu73P6Gk
LaKkHQ/7bm/+N57utxE4p9tLKDD9LLmTFIXFdn7Rt4urk0OUb5olDhB2/s1SBc9nf8mkiDrMYnqQ
oUVAHU3/jR2XEYJrV3JWp6VAEFdFlnYB5Q+U0IUd4GHqX5yOkWfVJfCJZAg0mAjdxp5NqD1CFthL
2tF7XiLHIUQXTSmIjgGKHGUZlZQraekweYDRNZg66E0Vn7U69+BbUnWikDC9cBRicIv32qtIwVvo
c3g0dgHY/vN7zFITHT5VQUjNIoK6U7lhd1kyPkZlQO6apF+wcW0JTqZnWT9EAlQRKsdsAMD3FaS0
6MkG9PEm5qoc+V0cSTv1rEWq8ve56xdXfxGsIYH0u+yS/Be9d0G6FjD1hHUAQXMHqZH/9de//Pvt
9v4rOKNXyT8h+E6qIQNK4XZDCg+qWSPXlYxOfpHwRmdXSdAQ1IfEP5bKUPS7NAntSDIsDApfgUjT
x1PLRsyfYX3g4VTfkb60RAA9glMyt6kPTXNh0VG8s20xNXfz64Q5szXI1pF0J00jEUzZB9aHY8Dx
QByx4kvAmRaAeV80WGsMjdO5Eu+XMUPNATONLcF/URW+A9NqM4XyH4hHSbreJLrUvGNs5VN4eIF7
xVji7W3cH0AO59YNcHEhJQC8zlEIx6xeqMl2fWKokg7SxF9ASC0/S75PQUDBTb75btkz4YRgMTIF
l90TgOUlpoCHTL26qWTvDQQLp6VcxtsW0a2Ilglc6hAh6pJzFDM0cCt9tLcn5dFVspDNrkFL6gBo
V/vxLmWXDc0bpTBmDtbDeMN69kmVAs6iDxkbJlUUKVFjibT3gHrGfyFgnsRidQ8OKbyKIF269A7x
vC7bE8hRIGuf/VsIjj45eEJhf+AW+7DBS6QM8GvJXxHKWMIh6fyQ7MfQn6k4FE8RO4M+HYXbaTST
GYndKaZITPASivuWuFS/xniwRqXqF1QqlRMo/KV980GSoOSJOsaNayvwoBaUQF/K9OO7pE4J9Rca
SqJZCUu9dsFS4RWRafJDejt3JuRv83MgtQnXmRiQVK2w7K28wjJqypA0CTwHkCJ9qVfv87AXEX4x
nc1dk67UIyowL2Uk3hLgF+nzfWQ2xDD8TQSTHIkISbrrEQDBnZcAkCEjRqglTDyNdUUDdn31r/ZZ
iABVyWAt272sOTZHfBLs1t39t6XOhBwi8e6I8pdviXAp0mo9BEJ95x7QDUEJLXgVbcnMrsq6N3nG
Z3hM3k85lHr2WhMqAPHtBUAknMunT3hsnz4JjvFQyqdNBXnv3phMPqPMSHFEGaGuCx/8//3tl5+x
77xg7wxFo/A2NDSvSNvXh3JxwZbpktqOEdQaypJrVIm5vIDkw3zEzctOWMeWYBleN9cJEZqE9QRX
n7jr4T4KbugCgl4SuuolYyHh3+aaq2cTXMBCOEswBSGZh17NQ1OI4tchkUMJGwWq9AkIqZgdWkPA
X7ihDS2Yjf6WcOiWkgBCa9Nuav/zBGzWs/eId4eriJdRxdE8MNPLimPVHtE8bJpCPpXf7mCyw37M
m79P1K9adN22uRJpH+LzFZrbkFwWdLuJxEhsXDhu/uPXnyps6a4ruaGhkO7ruP3MzVcP/l4j520p
HCtTXw3JMHIaNTJOd9urBMeo3OcpWJC5Qs+L1ehdUoG62vYZE3YayfQlmFiIkMd9RrcRVICWgrWZ
CClHjm1b8qRSBmuNQuwdxwX5SKAkYAtNKU2F9VPny+EFYL77UzC/2ye4kNj9W7AJTQ4XmZj2wi7m
//ET2yY1iAPRTehdeOXS/bewQKyQ7y7CZmt3WNjZRWWFk/j/cd29sJzLnK0IAs1a95lt8B609lCC
p0heDggugsugmhIZL1wt3KUahtUvoorUuhXoTKe5h6g0XiRoUJLLd3NYQd3EeqrbNEVoGkPfGdB5
82Gkv+z+FfcSstCUiv4yeBT6KsI9YpsDBKjU5MpriIU4u+395ZWoinUuns13ae76vsNGjJ/HqRwT
m6qh6yhgH6qE9Ez5oTDLqIrtEdyWdFSX84xCOEU1PejnTlVpuQKIb3MWrmQY85mSmIJcwxehJX0J
tim63IJuTSoATEssyIyDEJ5GaF11vkvVO8moYRV7Iq2Eehk4BuwqkFo+4228nQ+i3jaEI6XBiuho
6lA/RHaDSAcjVo44pbNztZJrZJoirF3Lwa1MZw9k84HU1TEkv9v5L5ByGCucYNvakuaYCSIrS0cc
QSaJ+XqAp1MfMkFpLCgT+r/D9AqGt82LXuK0BjQkmLbBe/YKDGvEiO4XgafvHOV4QQ42VF8frqH/
8u07hPfQHGv7svm7VLzkcvuSZYGEyMPmjn33SDf5gCdL+NHkJQR/JI1rEpBalZN9s0qlp7OQdOtV
7tSpWkAs6AqSgQg15nHoTdKiFcqKJnJDcgfTSd8Ot7UnvYiEqXv+d6/yNk/3l41STlvBPVdFDP2/
AUy0giqy+Y+6WnGDwOknQeFD92p2wGD4dFuKtYFlunkbr1dQrFNL4DpkTQsgE/gXy5BCd2VBIIYS
oJnNKYYOtwdo8wg+gZzKdYS5B6LW57HfipiNVham4JGpbj/s/f8cpL1RCxnraQObmaAfYlLhs4jP
i4ainYp6dlgZOg2Uh7qCw1X4PGfzFDxxI8CgQk8hr1BCNix0S/Tewzl5ZNtaQ/3gUthS2XMwitvY
nAQ2EwhagUwSOXjCBrQlp38JV1aYVk6Vyj1jREeBfEEP6zwDtTD8UCU7HiXUxCzkyy6bHbxcxnH/
HWy+3/BX7wEIWnAo0r1pRnK/vUnkw67kxkRc+4OdL4zOvyx64jiJZHeY3UAYyB7+hsOOhGYTliR+
iX6e97p+mR1ZgSjIh2JWwXh2JYQFfX14hR+ea23o23mw0oOCJCT4GAYc3t4EjosqBmFeciOiNRui
2NQuTAmQ8WRXKiHCnEjQKYfn70JehDAHEb7rdBkmEYCRrpSF8D/95UCoy5K+d7nn2Bbamwi5PadI
WDbMg6ZmH8Bvw/2JFNbAyAUptE1nhOOh+rkABH3HPP7ELhTeJn0ZTxLbp83dN/1YW7AuA5FUBRDx
YsydauyO29PLXYrbLa0KTXVS/1VXyQkxBkHN+rmX3vht3KHIQyHr5bMYpjULcnVH73/I619GmJMU
q359pMnPkw0KoS+1QDp6ewhMNVApd5wsUZqqIWytLtXs/r9XDWoJ440kRDLkS6IV5gW6tika43BG
q+iT5G26hDvPM17jWCYyK6bWg8Lmud5Fi6IV9TSqLbkKgpuuBICkL/U3IkN6sWOJYAfJu/QhCf1A
IQudlkKN/H7z+v39dZQ6K9DUpp6bHP09kRDTlwY1JQivGUqh6fMBWiFAHgld01D+9gItVTbD0DlB
NkmGG7sa0I77Yo6snPeJrSLClByosk03cy9RuBfMwQia43hGIojzJFVMTuLNXDtiNVjgoRTHzg0O
pGyNKtLaiuN8sJGk3MbGEg8b2/WqaGqeDrevSB464fTMeQS9YLJUSd5pSCdMogz3t8uMVbsoR55q
rqQVir0p/qtNWT7Wj2UohQoEKok/kYr0Ds+jWGeiiUVcMC9n0l+MmSUivbHFYEqaEVdlOfcl3i70
M4boPUyPx8q5MLsTjRpGvuCrpjpmsSrMEqmAjeiL7cJrqRpK5jJzlBJKRrIrs6JqpC21X2Fy8mEW
ETajjINfBVynLWG5WQu6p/H2dQRRvIim2nS0OLDFMUR9LAcZ/xFaqlXo4cSnJfVBRWMvWPhFLUFY
5IOdthxl0aTu2Q8g/iqXqy1qz0XgQNhHssNBAmkC5Mc+DMjumeiC0EpUSvZ2Cy87JmMISrL5ejnc
gj7e+zjd7yBcooCu1Ds99E1W6qSL322EL21LyOGiwd6KplldiV4BKojOcvxgRwyCvBNqUqVoCdgA
f65WCVI6SGIPxjfzq162OJV3K6ygSuU0H54LI+Av/X+Jlo++i2w3SLoKnT7C0fk8fgeS8+bLtV5y
aSj63KUGP2kAa2zoHsIpYR1VhL9SyvDL3BZx1Rzy4PgRjamxnDpvgbaFSSzetxNiRFcyr/H5FVcj
66qJ5eI5koYNJcIwu7VI2qKe3VDaqdccQGcCGl3M20k4bBIBeM/B0Vgm9WA8I5n/GLSS8F5kpwz+
MdAu1sHT/FtNp2lTbnI7T49DwvHufpXInqroWs0u5/58usGYCQFr7PNCLzqADgXmLBS8902p1Um4
knAXRCovsdBEJXtZJ3OZ/zSG05ZMIqkGUQ3OlxtSKl9I3KtSq+L/jjSaE5C2IukgIzH6136GJnIn
qYKafDM2elWLvGp4V4TCQV8Kl74ptQ1GdbYP3p9whHooakTMxwHvJ/J9QHeg8ZdaED1WvE3HcUcm
iDyoS5EZRXYI2zJXs4CWgYJPVECVBvea9qdvMzovGdd9v2EhUXWwhh7IHAvqE8fPUm3ls+iUwRaZ
uF2TlvDniwmTabBUuHgwSXP+V5O7tbtVxwqbho5MD5watWKuijBLpSsNOoqriSMjyQQV4Fp1hFUz
Cdfc90IYm0D67bd5C7w/Q59JYTq0ymcqRfYBMJSFkd9G0RntHZIWu7k5pjczcATSrHmVD7l8GL45
bi/H77URC41JEzoQBLRUyfg/34R5pjoffd7+n8ItTDNWBeJkuJVkG3ssielNz+M98uhg5Yb8OIds
MN0TFPu+qMdpdB8dRKfyoSl2gpPO7xEBuG1fhEGlTWlMciwWTzvnzYp3E4U5RJYoDsxhKOsa6igi
4r/ZPW/rM6p7k40vIb0yQrJ8ngwYnel58oRwsulqQ7KRNEvGGYgzJ/I6l8piZDQV3wsLkyl8yIzU
euXII2G6UZ/PbJ5GkgtjjBQZxqqwImeqn6O9DW6vUAHr3f3r5nj47IPbxzZ3nNMeRpWZbEqr1dT6
RnOVenPu60NkvfwVpxgikrqqD2pQA7Y0wykMRJCD9fAOixFQtjDUsjrfJMxkbPORr3bR1BvB8eyf
MPqclWT8P8R/KUxmWUwlpyUPY8gHhXGehERzmhCx+H8U5hDpfOZNw/WBE/yI4iw58ja3kW+yHoyL
zRwb8hJzRwwcZPJ8uFynFhbA9IldGsM43bfx8iJ8KJ14l5oSvZ33E81XuG/FQdhYsuKdt/35TTi+
UMcZL3hqmBywpeDwSYP6NJ0Y2M/jnfB8nq4fm4/lLagpDU4uNf0T+myHlbr8zAdKUDscBQdK947s
SCq8Wuc0Cg6iLc3+ej5uvTd3ovml2TMOMPLX14O/hfATqVp689Vb5djpW9DdluhuN+vuiNuE9OFU
r/4J/5UgYsk0I8lO5+UsP357P5+AGCdobE3GW6JrT6o40Cs+S2Mt9UBGwxE6fKm/vDBfujgGe471
ENADvP00fpXUktFkECpp/5NP0yLD+jbVsVIoI64hyg7er8+DXByku32KjdIrHmSYwZF8PhJCQO3h
ZmrfDNrrejiOSHU5ChaXTPvuwdXoDQFdAuTKlkOGEyTjZ8GvUGQeNEmSTZ0G5uD3FtrK85NXwpW3
pQFnUEl4OHlH7ekCHz0z3I7bp1Ga6U1GX5PyXZwais1WYMjsS3WYZSdNMa3QtUJIrXO/fUqLXheE
ONifeV0h1xostuJmbArD4CcgQrCzDTe9Mi0bcOmQMcB6RWE5U3pLlLOfTlL8SfyRlJhJvSdW7z2Z
o4sv4Jjp9jXeZnBXyeZ0uEMxYTTNfFge32bcv4R6XOGKky0HQ0x67RLH4b8Y1nnTlX4F+yMrxv15
O8B00GjKBE/H5rjOQpFv398Ff0W5tjTdOFj22nxRv+nEvQabqNum1ksLRt8KE6TbfN5plzuXwpu4
zKJ2w8Ncy5epHZqA0hDva5i9ryRT0ezI01L1wi7rUid4pMFD3laIfPpsnQnRRMMgDazWuskf7JfY
TTX0bYhtWhR2lKekrxzu2xBEgwwvjPTbgNMLpJCgRhZq0aQW4SjqshHxWqgIg5LJmnil5emZiqBj
OBcCOnJG+zhVEKT+iUBI34ou8pCkvse2NtPchVCSCzTal/GExSSH05eYYxIcA1MSgGCx//DbT8Le
mJLNj2xo/xLQalJQJcRSmLnEIqqCvb8/bFeFcPVJVDhk0xho9wp4C3FcM3Gts+Fmr14q6mOKm9Kd
I74wbARacGH3+/wFLEOd9C62mFEKHnafe9j9Emj8b7BIfvliSA+o1AY5pJAFkqKZljii4FephsAW
HAoneMbECLhSkzJcb5pTFRsJBN9NCEMHbicTlrcKbySuLHk7NN8gq5hkfv5OqohTH86YyRtx4jaM
KAtTWwGORCJRSJHsLjjXgT+uVpW82ARqxY3ZS5PFB2IwSew2tRAG5T43KhWOnowGR7Sqy8bAAq58
JXyU/ShYcAr4q6wX90SRiklyOs8bgMQU7Au4c/raFvCC1rZFqzjTPbc3ENxrHef0xnIga0N99HJl
itRxleQh19Rl/mdP4rkLYCOQu5lx+yBHk5gF1YLeove3nu43lKpItzxI0mTJ5dcztkMGJgPrbkQi
+RfJc2tK07Q/kBuEvIYE+OgczOomDBwuf6SovOyEiMHlGUA1S6p/+hJg7RB7CPZxKI0cz0MyYqyE
PW/yzI5bJLcQveGbXISE7JCfm+PFLoz/HTeL0aeCILaZKSfpnurDEyY3ZyxtJlDbI/LHQJakQIyY
vT5DiEGpwTQN73dCoAROPVV6AvLdlVJ2/spA9dCPEKhcWeJOcKv7cmgCPw4vtBPiJKKxafeydFaJ
RfZ0h0JdIaWaZ9Di0WDjW+yA+z5KUyHxS1QOZLoMbXN6c30/hBnNu88H6VWsyU/J1jNvePcl+m5w
ANJdXTSpRMBpE1p+BSQl4bvV5GPblsK7Avmbp6eFdfrcA1jSlklx2mWiLCOBJQxB+37avk3hjoA2
Ow7+WZjD6/u4Ozz7BVfZQRKwo9aYGk1Gix15Mt6sTiPcv8P5XfzVFSx3k6vWJjbvwfowJK1P1c87
Hy/ehLiKfLPLar1PL58itVYImE0pJTChN0qygqZxRfWw/XKsxZMkcUp85ykbGHN/Uyqwnv2znOJD
yQTHEusojrFZ0xfs8lPVXnpwxcg7hnYhzStEdg0XmsVyB4SFX+7nO7b8FWj/wUAs7s+QH5RwSH2+
1yQ3Ct7ErHFeD7faLLewKW3OkLCFmABBMGnEZYg6+xzTy1Ka3mO7hbwFdV0nmjIdmlPbOQJ+EKc9
hw0xmpAyP40p7WK0zxg+xgBina0mh4IFwGahDStdiYOyM5yATfNXfPBehSMHmqEzc71r7p+JzRcC
Ut4LKAgUz1a8J0XuGp0FmSAmiAixyWCYJju+sZ2vglIoso0kjJXtcR1cdVfiFT0qmQ/pF51fJROn
NJyP45Y0JFsBaPckpiyV5WEDEUT6pmKLJ67LZoBQiFEhhRLTnEt5vmWg0qmSKY4U65wl/DNbTISf
RkSLsAMQ071svr0d0TWa86aCL+ryXIrN/eP7CXvGoMe1m8sqA4XY+4jxv4mVNJW4fKBBT64ki0S8
FbyqJuc4qGzBfnfcvs03JceZSVGCSFLxwZHJWZtTv+mn+4tAK9ADTTGmu49wmhddiDFP51rLuwCM
5CgRiaCKCPrsgK6H0k3pwmFfwoQqPW8PR+HOCu5WnAxfZerqfuGn6kVXcH9Lv7DtvsKlsFzq5iGQ
hbgilCODM3XBGTCBDbUT4m3TECYM0u4W5bBz2YWgg5sS/SsIKRTDCpfemRwXn3q6jrcb4JkH8aJ3
OS2v4fcmEyghtB9IrkFDroHkH0H3PG/9Fl93Xrl6Mfou6IWFG9EtyzUSgCj0nAo7VOQaLHPMSNCR
U8xdKQMRXmlO8gPWBA3OBJdelVJMeHf/4T25D7GwfMg1cPynFfSAFTzLQS+IKeGrQwdqpCT5/zoW
qqbslEy1UN2QqQbD+LOhsjtzYeX8nR66vpSfybtU0rIXkeFDXAWkyepGycojTFEFdOPVx0/gPUjA
LiU+YzNCN3tyMKprpvvIwYEhxohQKEpUq1AFLNp+RYHQvDA/yz88pL0xvsBpjAE3qaXD9UA4dmQm
y6MQFAIZvtIyCEGXR6OKLVo7iO5UVyTIIzrETQALN5z8fotdj6YgyHtGPgjFBI7El9akmoacwoSa
4xg9CSwvEudSJQJms0EniFF5V0pWJiZwwJ2wshbJVVuejead7r6EJsfJSsFThg67oD9X8EIoBKyy
HFlsPxsDQ+xsipH6JnSHkiMzkhjEL+6Wl/3jHEHifGBa3xBeX4KZj+c4nS8A6fsEaMYMS51SQdjw
xIGYdYiIjPmYXWXHQ/TxM5QP1YrSGvK87RDJ7gjsG2l8wvMt8YvBJ9HEKL5tv33UJhKXCIt7TKI7
1HoPhO0YSmUkpAfg09u7gFgYDgee41+SVhP854bSQLAFTIrDwkid7X4fGjDNejlUuAjgmC359VOH
uvstUhNpWahAJx9KeYcIQkAxtHCHuyKqG/07pPuN6dgF346QA8B0Tao2hPD+HnndJPG6dClGIVMk
QiLxGmINUogfpsFVskI9kWsySPcVnDFSUiv4SX0OLhja/zEkJ68xOyl5cE2dQTrhVolzG9pJTp3X
KphWyyULH2JuIagmnPseqbR90ZslLVBrhQW0ztBmLoa/fqBZBB3iSiwIWmPLz0sKJpzsiWlT7fzn
/Yj//f/A/MovvD+L8jj1tVDRvZ86Fl6FZ6Z22SqzYz5OPm5O/FNTK034pW7GmCeOvRJ+zs0PEv/z
be+Yvo5uZmyHh6BoKM6D/fvM6bfCo036vYR/il0t8D2nvg0KSLFApsDn/hQ5NP97ZNp7h2OwpW/8
kS3jDA+lbyTVUKzj5+aKsvAMThdUCcITdmSYH8LaURW/7QhQ1gyVX4UFdHrTdmZXBM/702wOPk1B
rrBQEiJk2eR9Cz/VrG84J5ME0c4RLTi9QoDuZr87/noaABXUpbDl6ffQHISn5PnU4WP7tO0dzjLL
m1F/kqNrN9OS4se6+datOLPAFolPptnqh9PT/XC8fZrfoXpm/ZB2DVkfUyGqTLoPj6YdIIDzHwMs
L1yMtOOkTxSy7tgxv25OBaerH6uKEGwQlE3fp02OdH61UDdG+M20z4RvwtbUujkHFgUxOaBz9C3I
lDK5FtbLSWifBJ/DzXXZRFUFWxxnVUnSrLLvdFkxkxYsx6CInhtm5Ug4SywVIdxaonxStiFgpzXz
2Kns+rjFNMFPtXDBzcFpvAChuco8YEJoQxokechVvC0qTmHT25Kg/Mxzs9zsVkZ5Dn/0lUYwYbOI
JKfA5EFj8CXTbmaTx90Cp1TFkHZ+viagQ7KloOqHLnM0hGvcpV8m+KssXYPSnHeihGOxuasQk87s
AFM3F6Q//FKynpV9GVS6uK2ZiZ5BuQnuV69yd2gx061ynIMij9vUBROJOhXb1RHD2cxp9Zft5Qnn
UwgSkBQG0hnCg39gw4Mg9OkgSc4NJohhCCw5VV1fetFfx5cfGd6RmyPUh/OIClGJCtGWBDUMovzk
LRz8z/1yEM6UbBDssosdhavRQl+yVT4Khl89fmJHF4e3JtcrFofPgGwglX89p9ShEG+2C+qoJVjO
53EDUS+C5HifponqQiRGWuS4eTIX4TtUJ0OEFFuO7lkyHf52PlzPNXIMZY/RKSqTlQPYUmT26Z7g
sqWBNlMtYUQba1QS0xD8BRX6Q/rubXv6Ls2FCBglQfyxvZRRi059sd0f1NNOkMxGbrBEGkGQYPKx
GnOmRyAL/CInvbuc5mq5ykbaoTJkq4VUAZvnThwt7GdzqeVhFMnhIoNCP8KoEUGS6usasgy6BCQt
grcwwfiv0Fh8TW8uCkOliVfzIQD3CM6W9b0D/7ErMfALLESsBBPuIeFOQKmEK8y0mLg3Ulq/mCHJ
B7uFpigCfkkhmj5HWFNngPo9JMSwJd+eYypjf5EVRAxFuAVxGqOlhLHtl/Nhv9nfAW2Va2nskBPM
l4O3aU+ZUCtZ6VJFK+o6OvIM+wH8EPCxP2AN+R/xFv4OmOlN4voNJUw4a0QE6Hu1vXfQFqR/gUXJ
j/W2hx3+97H5EMw1w5lmgVM7jTTgzaS2efDqIh25wo92c9F9fDbNu5jw3OocxvD7rhTfxa/JClaE
NdJ7AIwwtHSNrMpL6E7gZkZT/CJCGQ0rkbmNkL2dCRvCiy1cyph9Tv1WVsRUus1Bgoa+EgjRPpE+
XmobpUrx3cPnVfdb566VosvEzjA1Jqubqz8f4AG4IbGP+7fvdQHqS7BkLkBkx4HQUoshhjyKtfNb
URdPeCMiRJb0rMai2ndwzk7Xiq50M1Uleuw6eOzrMx1CdiNnSZG8cPIRwB6PUj+WZeMtWh0yt3j+
WCLcO4DF/EbenCE4gVIazCia7AhznlSxg8rLrtpEpS9VSUyzCkO+JkxsnkZoCLhUKCcyuZnRWQdY
b+4vI44e3IkVX0OxeCMo3tDh8y4xA/KSWNMU6BiVndE01ZhX3CxImVnRJZj5U0W4vIPHN1Q4rGIP
kOfpiOBQtfP3o9CgJuZVik3FSL2X4DzZUsUZ0wXxcKq74YQQB+mDLGz34ne4QTFmrZuM4V4K2c1Q
FHU/VvL3lPOSmM2777tjGAYXbIfU1agrJafjxlY5GZaWCWCyoFWaqUDB5lS/PAt04KFUkxaoUCCi
52ch0+9KfIjYqAQyW3gw8uUhjS0XjQUpZ6behEUPpJ6EcMNIPTIWOcThY5H0iuWPws1eo4XrfCty
Dyz6QVZ3hRNf3ZS2IWXA1gTb6FqWHBi0chh0uIYnaEvtX0MJcBjmXilG0wPTIiDUbAOzbHwTmwOQ
zkTgdkzpt8my4KDwH8LsBuGmtw8kP8R1Toe3sC341OfxO05y2Wzvt3Oooni6cOWCOrgfNrBtsK/q
/8nWxAoy6L6W+l9wC03cDZslu4/n08srtuUAS/Eij3TQgfgeV8EWr0N00ELTFzwuxr/TIbsYH8YC
k+XHBMZ86AXnRfPKbsqEoOEYYYDj/J99bTFsc8fXu2vc4GmHFIYjKn4fGVAHe5V+xLBvOBHZ8BVB
PUSYOT17fT1fbq+hGyPUVe25tUw6ORLMRtBmkqcr+3SXTgz7Gvk/I2/97q0PHP0kOunD2B1Ki+EQ
Nh3h5Gmsd1AkODpjfjNurenW2diOYojT5LCFbwxCpDBGB8x/+jYUi7QENuGpiJFz5MBRx6k400AS
I6/Z919hisv5fbvjWpujCKTV2/nCTTsVr0qtb40O7I24DiAR3dRd+2XjLb94WibtMCb245Pn/fcg
clupaFhPbcHC9tp5Pt8MEe2T8GE0zC1jk84IEwTDMlN5+e279wpfxzGwVzmPTEcGZdxQzFX1U9Ye
mgs+b6F+bHz6DAHZ9vp583SGyg5u0KmO4BV5L1s9+hNOSQzHzx57UtikXyl5x6fQAwFfbXM93y+8
8rdpLTQpXfUNF2r8Wn9dk+yLmce8TFI6W6v6XezTuwLVLF7nwruyb0LEJI2RSAtA7fbljP209xco
rTyw25bEFgvs/J8Td+E0vo6Hl9dbXdV1Lru+8RyTxB9Oz5AFG1NLSXZrWmpYEvazUODiHTJpc3CS
sZvG2U31eD4C3bKqqCcqBGAVvd5WVgWoJyKKEyt4O4e4K+8C6xDPTkcHhkvNM0an1/GqEom8mj38
gdg7g8NtHkTJ/8/l8C0VM17BwdtgIwj/79mXSxJB+mGaPf6nyYiGBqd0PlZZMMwsqMgKDZni5G7g
Wv7OQYTIdjSCjO68Bt6abiIVwQemhRBclGUeLsq8FlFdYbrvNgyOCoXWsrMJyFZ6KSzLmgfLhEJo
OM4wWaOyjk4b1GLTCkevTvo8KHif3o5bq5nXaiG4ah8c9CSp7C2kTt1c4J5ucDXK08GGEzUXneDr
AUDE7WmE1hRhTlfVox+IA5UakRGF6S3O5X6Uqhr1LD+TEVQfNjGsPre5/7M0CNAkDA8sjFYWhg/r
WRBsJPkuTXUSzb0Phi5ncHBO/hD4BRXxZDHWjiI6W7wHS1o9j5boBztTyNJLfh2PMHljc90+by+s
8TKGWC+NVEq9dEqjCyEWPev5FtqINltO0o7j840VsrRIxmlF1/cjoUM/ZDYotjhPdyf6g+zmJstA
Jj6u8dNZCVDEULhE1kuvBJeHvcYm91aWqmD2CkLFFLqO0rAAHXjOc0AEOZkIFr5vIfkreupDijWw
Z78aLAMUsBeMqDaVqqTn57G1wGl7vEqOlyaym+Zye6F/IoFOCFvG/w8aXdaKpw/CwQMqv5zX8Thi
A8TZhHtLufP3X3D3W1NAUqKhhO9kjyVpCuw87RYnjdNA/Ru9A/zFR/FtlwuwnaZc+TgqdvgI8Ti/
RENc9R70f2wsf8QRzqEd//3KPz9Q84XwfhsBfiaEksMnl3u11cgBuBjj9iZEeH0xZE5CeH5+hoL/
EZv8ep2Mf2eFMbnMcPSRERsK3b6MJdXFm7IkAXauRbifwoM41e47L8pzwi4Pox9dWtZCk3MHx3OY
KmrSoR0P11t4i8qZmcyBiVDSnL9MO7EWD+wJRJAIQQuQg71ZJC4inQqTVf8ShweMXKpfhzTVbMgT
m67gGqB7tyJcU31u8iwb0MTx9IJE6yE/+4WJYXfGytYOFXLoBiuZBd1lVyAST2kM+2V7PCCOw79K
k78KHztObbiquNsCD9IPqJ0IhzpLLBV44VHoWM+NDRVbW/J904sssbrqsTmK12A2InZtX+kyD0Ty
UrmwpFLXXlPiWjQzVY586aQB6p9I/B4depEv1qr6ya5dQgZFEDlM1aqiyOl9CJm7CvW7jryDwyTQ
NHrZX25WYNTaYCnM6mHvFE1fdGiNmwySh//8jejjqApZuSE76pDUqlOdQf1M7QJGn8ZYh3fAWWbv
W5xKsnvlkyeapAZ6zDovXcjZJf5YqKbJhTdhmrScldG8KW4IOIv8qSyZAo1tJFfQpI3CFmm9NbLq
YQUpxzptI3nbH7idWpfMMbtRij3MZLZaTB1MAyBXv0lPLljKsyct8S/ER44oMY3MLEvurGwJWxIg
Yb0RA22xG+KWmn1pkuNw9Q9JttF5Tnbg3DF2l9vcVXFzheu96pdaEg2kfoNfD/vb6+aOinjkk1Kq
Mfn56jIwF3zS/T12tKpgBIZ6SwoHuAaMDsYRjvdDoNuG8ZJ3r2v/4e3ETTw3bWn2VM99b++HrXxD
/YMqT3X34VVGiB9OL/hILDXI/mnzdNn8436G7W+alqML9GSCB6HkoJr95xlID2ecz8ZPd6HttMiA
GIhCXy7b99cpIvVBcsO28s+GZA4zdcIp19pGbdjnuqEvdRNOO9A0PfvptB2JnVHU+CyMC2majn24
W+xb9nD6+MayK5DyA0Q6+oefV5r/eZd3BTP0YXhI5h/R4RHg+qhhsW9eF922T9f37cnvAv8azsjb
ny1j+GVsSQhBwgMocRv9EruRb3Xc60Vnq46+CIzhWfkq2TSaFMY5f/1s37A/r+jo45kAEH8+eC6R
mtk0/EeYvshA+v4OSkt4kPbxReJRfgyh34mP0j4LG7ikfIUl4rPhCw4nKJ3ynyHxqHqtSsxNKtaa
10ak9x9J0bddY/qOFx/dlC6Dc3bwymnDP0eah6OXEi6B865w0w680umbYnOYx7vPr0CYYiF0zA7s
BbUuf1RaOO2ww7zWoS0fk6XOlB6/YW1bEtDplm2f5JtlBY0Z9B0vnmRoH+EeZa898A/r0oSpKFXC
OdOJIem5kmWDcV9YBcXfUdI47VFo0FLxL2JtiXhrh9abiIb/zY70vCUCbr31UP0gWVVV+vBstx0v
JH1pcEwsqcNWU7EBYkWT0IlLhNj6cM3SKYgmb6Dlss3sZ1IT4f3+s3j1aOMpwhqOGhougPe4ocw8
wqn8ELCsl7CZd2n2tja747i9XCPkE9bnvWhUgkOpbXemFXgB613Jjru+MV4VClZDqVJhdPxR0zrb
t3bzfPjGm7ym+ta8pPV9qaOua1yvWiOJd1e6TtNbd13fuEF+a1NqeJupMl4b9bpUmsC6KrzPXB7v
G+OCWKjkX+bKi0yf1zlknxGjUUkrNaUqomn7Ba3UChuQ7vXTePuKKRZhiOLQSH6sGZrOai0fZVea
UtS2zWC7QZJ8UoGcAPVi1MObRGNK3fQmUXjdHuiQAskBXPbrVo8Kmz/H1pUMs2t77wkpwX1S6fyR
3eay5/itI6UP5Dn2AvBfrdqSF+Ws8n6k8PNNzUFVfNjXFx+O4YHkSphSwfqjy8i/NulzSQRuclaF
z3X5G8dN8gJhrXBHXfa+CyWFnp6gmExJv05WDCM5ZBwfYLYANKQE7ocPT3hjmb4d/NfBPPhOvLol
w0UIoSC+zPYC3d/DEryc0VlAqGV05tN8HqE56DZCb7w7o0pqD9Q1eo4YtFeDK1dqfDnZaUH89CqV
mzm0WESKCBKvfTsZRZjxJz4eoSOK2mJUoPnbSAdpPfjUqfTpcIpJnGOoBZahkbY4mcUOznuQHX9h
dOl6zqcbs6TV821z1fgY2ikehOiM4Na8b6/Qf/awP0wEZv76Nnl5W3bbjNefxrayTXW5TeWwMd6z
G4ozgcl9CzMxkX0DoLekjawRPieoMsvvhcsvzlQuf4G6kLPQWQFP0whBK+ocXrTtIAB8sr6iXXmI
X9yqxhoR11h8rBpy/In3YwiS2oFX2Dn18Lq8H2GLwUfRlRLCa5U7oz2nigQwc1E415bFFkUPAzWc
wrrdfX4JVgTa/lx4XTnwwoB28Qi9AWIX+vvlOI99rRlHYhPw4N1i4dtlezgmywsvfeS7O+CKBOZx
iPMEsXem63sr6MAh14EFYIrXXv3CFzbxyu/P/JkvcLgg51Z3fTuwsH/X96uOOSmX8/2GhwJ60yvv
SafzJ008tWbO8S3CKgEFLg7NzXx5/uF2gTJlHxcEADjqITbkR5wPNLB/APaD0hT8cl1ykmNMxWuf
YiqH6Py3w35/xEnb4G3x+r7Yh32i/Pv9/3K4HsAm4+QfYfonbZOBPfwLiCVvwrri5zinGn+NeG9d
lSZ0SIaP18q0nVGad5G9Pq+USSepxyippJtBKMRzIWEf9jKxDyaCzwvYYjuHKfgREP6uNLqxYBX4
EyGjiIljl+0i7912nQCYh1sIj/J+UHEKKd0zXgBtxwysz08w5Ham00PzICMuTemViIRCEYW/qSM4
3eNxz9+uoSTqmZ4T0tZD3nzGLIDHwfWd7KOq/HIwAXlU117ngP/Ob4oSohhkwl7DHIpx862WmTUl
1Ht2wgQ/dyj1bCvIupCH7dZ6YnPCQ0jpu5JBp7LL3xvblsyYpAaF5KjORwSbMu6Pf5MllqY2H0Cc
4N/wlpk0d+CQbv5gaE+H1Kowuyv8ZmazaB5s+bwBQR0FNtV4qyRTSGoMt6LLUq5C6lSKUamQ8hu5
nGMxzCW1cqPGQXc5XPiI2gtkEdqYys35mpQzcEZVgmJdYijMHCt4/2uU6FEQwRwuKSSx8Gacxq+4
IL9Oepsu1exN5yegiRLenhRFDGNY9i3qTFMyJAqa2/O+e1d6bcEr2d4qQtE4wcISrIK/m4OUFPcR
U2vaSgoibztppiytbdpW2IohV2sqQ9+FGzjkVJUHDzNyPp5QyYsenekFxbL0MIBYOcNhMEJ3+iHJ
28gGo6VqpbT2FJudgIC3F9NdA8k1klK5zJPj739fbIk0peCFXKPNlM4iBS8A8E3mdupHwoPivSPS
RvnR9JreKVVLy7aCE7LSJ3LFNnc58B6aT4jY+0JRZYcGug5qnccTdDDC3l8AWvNaz5bg1QiM8YFp
WzrCiKagbIdKEdB2WwH/70q4csH08S49bSebOu6hgiNwfUY448FJXYIZilQG/nDaHKTMur+CDXg5
HZ4PO+hjjbZJ9nzJ6RDYMiFgYch6wF5hXiEU50xK5D9+/Qu/8cR5sktu4JKkKPgdWko2nN8mOJgQ
FnmXjLSMbrAYpgusXoTpn87bS+jmEJoqw22zbK8Eq1J3AswxBcFSQ2sto5jgMd2l5ggkpk6/yINc
4VeH1BMhEQbHt+3uutndLsfN5813dj9hBdOnFcj4Kmd91G5a/rEmdZogl9j5aLFj0CX83CF9Lu09
eDm/B9mMRX5gTcbnZ+An8dIaXp9se2IOhDxLSPacoCLvyqILuI1tageB5jRswj/uh8vna6hQ8BLK
b6LT5BhSniC8RfIHA/2dFwbXpGVImURxGX4RlbaYFCyGCxyW4uJXfHwyOm02RMk2XavbTpDjLj2W
kH/XtX7FRtg6Q76ZgEP7wxULmeNg6eACXflVXFoFSTSxkaN3UKJ186HVAjkGx+rAV5Phsl2bf9U0
UyZfCAAFfkeNbkjfEkLun09VOg/bp40FOsBAn04+wClw3Y7H81dQx9/XpDpxeaPzL4z32HjXqOuF
U0vNajCKo5IK4NV1e/Jq+J+C5jKKKD5sweHSmaFCCIfjzfqzf/a1pgjadFRx2tLEhGn99RyET+nT
gymI7pV1gtjqlohtAhL85bOdk34sfTVJloR922ElFOJT/LZZmytQugBxPhBLIP8sCJhtSip5d37/
HtXF5e7liY0P8LNskiJsdhKdBoyjJxmU9CcRBoKShp//9fc//4l/e6J5CQ07qI8dNh4PzSjxH1/P
R64XT9Ai6a5lRTR4U/Gqc7hduKo2dwFWno3gVJB9Jd7O/RRLyYAzw2+qU/nBDg96R/WCLSJmJJFs
Q7nVX7eXz/f3zfYKXte/feN2M9cRUzcAdG2qzjF+PrmaD1+w3EU0jfvzDtuxh8wwnwrG1R0x+skj
vd6fgt4BRXRCRSQIru1KTbLIHq8oeAnb3RX1SdOpprOCP0V2iBSrwC/PuKzw9kP+dFuQd8k0mZLN
D4+T+xZKVvhlusW1aWNQ712DvpV0cN+WjJDfs74zkg5uSq5r7iCZlLCvBBJBf3VF/XUJBaDBiQFw
BLMHkh/Zl/xI1MVgGPyF+3qGIUksQB4cjiE/l7yMT/LFiuqG7szhFGNIgb0URMuW3MgJEZ2QB5xf
hHMOLjORZ9wL2p6oFMr3LXj7gty6FLuQ2gisso4lq/E9N4KyJ/qRxMl2sJ3fR+HCUgcA7tyM10FZ
V1Bi0fc9QQH6/vCFP6+hLQWPmWfJh3CWvAq2gTCPsSO+D4T4QgCWRJaMDkleHJBoZOeh0/lOxvvf
GjV0QuTcN6XH8K74//R8/OLFzP+4EDRYlyvvdhF7C6evFOs07e7TZYnB7PPhggWUI7SEuIJale6u
KxlN4o35m/fFW13o1nbYff7Or2TSSmRaYFjES2/vwzkWfQyXrcuaSWbR6OTfb6QhucFIqFwRZLmm
e5AwlFUYYBibAIDkCzevGE+5pnUtg9qFm5cuC/Zt6tLOTh4qvozf4OcjzKnBIQY5ryxUArGd4MIJ
EksO90rPI5Qf9Yuwb1QXD7MCxdelCkJ4j7akK2MgL8i2JkGvxehc9ZS8E/wrf7/xLwF03RCXFENR
OVhzpmiCg2hNxKDr7nJ4vwk4h8vBErUMH1GjgmhtvdMqBI59yfOKavB0O1YBtCJGkClhwcMn8Bve
UupDfb1s32FA4jJ28OdeoYWHDSp6z/HmoYMc4CS4xhCz766CrhyGksKbLO/1JkdGJDgnk5iyUER4
mji5xLvyptZ2XSOBq0PDv3Q8GiUcTZu5CXpuSQ/9KUMPC+zQACIn7VxRAYaXCONAAi4ouixluKEW
WgqBpclx40ehVY1wIMRwutlz4KIewd9tFv2Kh4UFdoIFNvy2RoEUzra1JbQ+91pWgK2GwPckhkz6
J+zGDpBkIBbIixGPhnBiyyiyFe69KkF6MMNmv71tw0pek3tXHt5TEFydu8nU/r/CuKKIg14FMSPY
Wip72m2hLyvOtd2gQUPtc79Jfa3wjVSXm7Ri5CZYnfQ2ZBR9eDCly8K42Dkc2Vw/H95THl34VldS
F0mWBWmkuP9SlteBeMTZo7ORQZ7xMvgQ9k2QYoJiQBNxl7uKQ9fVXEUSBKTJ222j+tYZ4TxNjj9Q
PXI6Bwdgc/3yImAHRNaH2cl1jdHNIPmCrhQ7LH0HYF74H/f/r+w4dKU9R7/uecSkaCidheQm1ChA
q8j7cY/zgy9jaNqM3zrfJEFCXH5CVDVMDA6J+huExOSO8yMgKKKb5C4DMKdi09yEta7DWBdwe7DJ
trOWI36FaI8ooz6Nvcniohv29YTyv9Bfah/hgI1XOF+2gl4hG0Mi4cPpNF5+D8w8PFU5F2sGW0KP
I3iD/JhXBeC+1zAQm74KPiX1jxPBy1st1RjBcyexVrCP8UF8h4mmUccFjdP5GT3grgEchOGBklKi
AHSXQpjjuD3d3yGpJyMLJLdNnAO8n2wpTrCjKtPzc+Ub3GmEziQMjKqGImq+oi9A8G3aXDXForUY
k8gxBUWoUlrf9k3bS2gwAWQfvESSXhfemVxOE5Rc2vRnbEstaGPTFXO5C33+Dbn233iVnoQPvN6O
gpCzhhaMvOX3YAERDoJ/SBJaah40Dy3Td9vruBmcwCZwxOsh2Cdu3ySEEEMIM5CDJCYlQMbfEpUX
nJVr6FICek4EC82Qu7wRFdbWOSWh5YSgkqZqgSf5O/b1C2Oh/wSe5Uv4X0Gs05UIdVkRLDyjTcQv
u3ulC9sCI4LDMCgptd4WMcAFe0ZSUSRGJp4PJn8l0k6Ta3qVZSwkzLLj8eupvRcKaXDy69n7Jud6
TO5P53xwLLg/Qyn6s4P2XyaQd3qXf3bDXy0hcCMOAMFtQo4kIB6X62YWAsE8tLnPGbum4uB6ECXE
72C6GUZNCckTVrQlHyNQuIQ0VLdA6lS6p6e7t5Cpe4hwOZPJQoLlw13Hjwi9TYHIBxCkhGyT5C0h
7Ebfw18y76KFhuFiitRRCNgR/ssjNyDuMkv8DK9FvlLPEGwJGJWCJZWfkioHS+E6rcFCSPLuAQvB
OBm/735FTYeMBhmfJvgpIWRHbnQYCk5gbxGctLqYkUMzCP5tClYCy2lNcWxQnKaUIqQeXsRN50oG
nmYcbrXJMpfxVFznXZahk1Q44U0SjC6pcEl5NyWIPObMRVywyw20e/SSYY7HObbfqFGPiJ9LQhrY
zNQCChuLPG+Pxyuqok3cYuHqNZIfc62wxlqXK0f1iO85wQ1sMnzPddkHhcZxwpsvMqN97K7sLdp+
TrW8IYVE8KHaJT2sXVBFPxDPEMOFKmMdeirl/6zi709073sBPyU+Fey1aixHLBTyO+QVGtnRFbQp
Iek8gHyTyy6oOnrUfWrGnm2E4AsQFxd8Qzc84IMIrqdm2oIe6cs+TUgSSCySId9HCkKh8ruMeyhR
P92qzNu2TG6eUCWc8V5hnJKLq7TBHvxZRokk2oLgC69jS3lSzg7JnBJLL3WyuvhtU7kcy7QVAkYS
b8KWqSh/OaQrhVq6lOQmBTp5aakQbPV5tB6kwAydj7ilSMCWHPAyZC8oXGoELemhqHtrBdL1EnFS
KXqR8ruqxDLPt1wgBhLf8oGkHvhO59Pxu/9jJ+WfutKbZ/ZJsG7EfqN7S3cdE9JgpircbtsNpSi9
qD8FEo0bShy4dOffzvvDM8xmeecGMYWL0JT8POv1qR6MGHwUc6OE+O516PYJ7OTTcXv6XFM/Hc0j
wMHMHXIefXQhq93kLOW4yOQNCsAX5dU0M4YqAwSCMlWl9FMRxxROWGfybgikevt63qRaoTBZ08ec
/sZ/PV+EOIgwTx/KRSa3JtIFBZ1RLAwgsVnstgZHFWl7MhGCxkFmwQY9nd+P95eDkFwgEkyyjt3g
hDQMoV6QKtipaEQKGpoclLIkaAjewprATxdhnADY491B5b093iq2Q9OURhv+7AtKVcjZUnAuzdXC
V/Hf472PI5ABY5AnRyO2LbEbk0byYo954PvlKOgBcnM0eiEtE2b7EI10i2WrvEOk3efZ8mWKFOIa
IdwT5HOhsAXV5LpS0JhZHuFpgpyReu+YQj7fsaqaOFhhj6Za7jW8jLacCY6DQARZdiUtVdocidjR
LnCj/oEQDrpSSPiTSAvZoNQ5gDIpMRYhaWiStykxZSRmR5+zFklsX7k4hFzcaqSyDhmuKyXeep7P
9q8JghlKdT6BbRkSB5jYPB7e0fYg/s5Pdg5WJ4do9GPMKuQBHDHpBLYte7oCB4NobhJt5YBWABg+
imjZYjg8QZ6pMwmpmluZfXeESonfTqjG6dMntt5tK2TI7MCyOqPRBka8YKMX9R6FFL6Q1SLxAmRO
uubBbMoamEAOaDCXrCnxaUM4bKj92wxVwsIGCPh90OY/5LKVAUenXQmsf6wuEjm2RRywaFEENId4
mRgb5WgZ5IqFr7Cl+p1kEcNsb0HhUhZs4oyhQAHOGPpZonyO952g+0gA2uAfQ7EyW8DYaLUXhPLR
Bbqf9me0HAvKsLAprikxakmFBFKED0eYOR6anAlxfVfKWTmnAVcRsp5tKQGf3TOhnJww58K8vEwi
MPJ4bSkdCHwG/68EOVkkPQpei/A0SZlA4O10wTmVqjNdDnI4tibh+fBNKm4guXms0lb8fROwV5JF
JmOL86o1idarS6k2oQWBIPMmT6lbTgdJ6aw2S7HZuamicr0Ri7WK9LOJ3y9hVq6k9XJpELAqUi9M
xp7aoR86sVKRIHX4zaqEOwlCTCD3B+FJabrTGeyw4GO6kgkjRU9baJkhHHlXwkGLgZrgBeSObvyU
EkMXP0/QboYzqbNaEMBTUmKCNO72McUkhEKE/mjtzKa9Ht7ej88HzL6HHA/Vc9fb5fBe97eMKQUz
6GcE6gw0ypuSJDWShCEYLV6UoeycCxrHtKVtzuNWMVHZ5lFjU34DQUuYRS31QArska0c9HCl6kbn
AYB9lBbhFUj9FM3VJCvwfolavHa+hqqQ1JQqrPJNIoc52u8mkawjTiqovIG9taklv2C3KBMex1fY
Uh7+gwFLkTYSXkeQJd2WcDbiMa4ILklmCOt0e76yTzKkTQ4920WkHd1O8OVP4/l+9YGXv/5Pd0mh
kTQTLRjII63E5ZHpK4YQ8UACelPt6ReieVuivGXu2/uD9ybksolzTUAjIn3783jFfgXoRsXKThQs
dKhStdHldtgeEQcXhLUtZQRCYD6XLwreN6ljID15KYQjSCdJRzykk3HjtqfdK/SplgBVa4v8tKft
Soq5ciVlSclU3kW4pgoPH6Gdj6JYkmr2qdHxvKn4AJbTPW/fDsepKy7bMACAbjXFwirHe8Mw40A6
efbbFPEupjgurOTmlYgb+Hp4eT36/3fjH5zMosqKx8NvyxVp+LhNv4uOlCViZtreR3HYb5P1xXHu
9oQGqSzSu76dz9fXif7JxQK4QDPkC/RRUhZlu5fx5r0pJjQJn2PSQorUGPowtu/4xyboP39sLoqd
aHYwyOd83Avf0c7rEK6va2zbdxwVFV9gMk0qwl7RublfoRnK1xNQBo+H3eE27WZsvIAei3d6+YX7
9GVQCDlM5CrVtcqIb5TOlFze5ZkKQtGkXwY8uu1STxNSIx6mtYeUJL+WTsfaY8u/gpC3glQk8SJw
9sPxbneX8/Wadd6tnbeaFwaEQjVhZSirQ9AImYEYQb5ehCucDp/McIuvFxphfqg7Jy46pO0n2jM2
4zqfjmeo/Iv2/SS8W5cEM1VG3kagsGLuFgooeIc1nF76PlJPAJtDBGFqPnt+9idy9dJ+q8cFYfX0
hrQvG3t1xOsyJKlXoA/VNKuhsG/3E1NLFzYuqQLSeKmkWLWgWJN8kXFL5NsIzfwqfBURUwOiKpup
RjBTuqQo4ZJMnZve4mUWXsfpzGTNfa+/bI+H/WYe2yootSaX7b6gDpSgDmyu2oakmQ5eGYjClswl
CQG37+/eYbi9eqX88jplJaYmVsJ7LDYzWIu/373j+PydvfHf+G0h0mLn/MY/7qO/p9Wxt0FQyMmk
Jnrh89I4Xe//za3WoU2EcNQmaSGkoPZ5OidFvvvDRaB/hs9z+bFNcwyOXoGgopzH/QaCi+j3DGSx
YY6/gvBMs2xkn0W1ucfWipdKehdni6Z2+S6SA0ZWSNVu4dzCOn8/Q5X26+EYJpKEc6sobmWTQDk1
l9Xk90zwaW2by+OwzuwK5jaJJ5g31agpNxGW4p80aYNIlQmIDEqMoCw64tu2KY5a5ZmJlrUfih8D
rd0Pp9fxEnGxmm7vF0cfDXR4VuRUB4WmSrJXMnei3exIGAEpZtWE63A7v7xMH4G+1MZ/lt+vzRtG
xAFewRSQ8IrEkQR8s5cvmnCWLrmRpFCde0fhjdLR4fSldr5uc8nXBGu+ST6CIa5Ln6AX7st6wS43
JW9vDh83yzkCwkmaXJ4mKi6tZ/t2Axt3uUt+I9kibDcfyxR1r6xwQobI0TC7iuyOCMrHLQLqku6y
gu7q8kiuz9y3oekavul/UMlJV2FXssrZCq/ikhp9QIJmXZ7chbnqYHsRXRlFYm6Lk5t01aAKbzmk
DQP/LtoKJMqE4P3p++bEkVaDyKj8dsbembobnJZEZmGHh7L1tMJOkBhnWco4nY8TRIX4OGle+BRi
C29O1EgIkWS3XPAgWpt7M0oWNgEJcUN+CC5DMKRjULmnN0TTHBRqLZA2SetgSSFziFKo5PIgMxtN
XbcNmuAdJJlHhOBa2TiVIzi29PuCO0kQIGLlls6S4BslISYDAB6dLUQj1vhaNgOO+iUiFbTDipC6
bwm6YTGTJ0vnIMi5yo1TppWHoe8HXdHKpnRK5a+Svbe03YgeqtqdE+Ap1+d3rqVHF3moayP9oYQ6
FEE3wb2xpSD3bft5ogh63zT0KYgx2/R28o4RxwKTfqap4ECX81lOwIW3bfOYderv9m1zQasVkiV+
qWQaK2FPS84WpTbqwN5q0XexuQbRc0PLQYJUiOojXWseVJ8ThJoYoNS2vXb1V6Cbhjj1pL4xcwYh
UQqgvIRv9otIp3kIT7e385vgcSsz5GFKrM+Rp+qEw2xr+ZH3y/nFP1WNhl2T6w5TdZcE93RoM2GJ
sTFr+wWxa01JJ0qvJSw2LK6+pqK0qP0lTGG2YVWQo6aU20r1mKvGfofXM3l4oMuSjlc+qMrXcRR8
4CY5DRDBdn3JaAtOB3V69AxvUcGuISxN7noSGAq2d3e9riyQDqqwmLOJSc0d7BDPKAiy1OfZwNWa
X/YACP4/YDq5kW2l4Gw7EjJ3Mz/cemMyaOG6kSTBVNufMW/woTANK/HK8ZODQJGRLOF1vfKEJP9h
tz1uWAUEuSb06/wXuwzsdr12xnEFzfAceirxOT3XIsTQ27/GlJCcx4/zYHMH8XdfWi6eHgDMQH44
jtvnABKy62B8ENYhmF58rQTnskQcWANvTViDJBHSp82dVtiwDb/Izqtg2DWFi7bRrWO3tUlPYeue
CCYdD+FMn/0+Ym/vMCSNsEOwO1PlEsIPYLQef8CRzt95S4DpB8HVYZdC6DEu1cx+SHj0afQCubnc
hK7s+DZuXgJnVC74ZljWKlXUdOD5N/kXxXIvULn+sK7wWacdb1dgiSa9BsHK44nHrno37EN1vryF
1hpftxdeCnVbeiUyEfO0xtmDlYg80Mnyduhaa3gpSreAtndHnNT/9lpZ6dIdx+xx3Fg8k3jFZw/w
MOva9GVnJMte2Y/r00VDWMDSeT7b45FVtXBmrs8U1zS2MvwyakrNi0x6Nhvh7e/0CZhP+PiFI2XD
q7cq0zMxHA+yH2egkgI9Xv5N8aDC2MNQpRIdWEywXT6g19t85XgrlrD2ZmA/EVPrcYU0WJR0huBc
jw5G7ZIdTrXHAZk0/Mk4uq+J6/6nX/7626wU/hRtye/f3/nPVy5/eU1FC9wVbz+xCGrcyzXLIC6d
K+4lOnXvgXA2lWWxIAisoxcia5gzUYo/FHKzE7GcXJlVDaTgZVpi+FMxYYhJr/cL+rs/xNbLwZd+
9zdiROLISZC83vT51ttMHyfj2bIfOVB1bPD4YqeMqJK9Ggb9C+thQZdfOx86zGtmsnRyQaeXw8W+
HK53v5OxrdrT+Rv7pSodBu0WO7lp4GTMITJ/UYnEdxhvdYONjvEO6KxA/K2NYoBPs+nGk5DNNZ33
8Qzvybm+LV2Vl/H2K8jCH3gd6FTuq3R0fgNxtni7a5MMkgnxtuvalveRsPb90WWNlE/cNN5t1U1+
fyYwvFfadYJeGoq+jmuGwTSGf0rlvxa29vX8Nk5eBZzoZC9lyXVFybWDv2+u5w+X+LKJZltQOZq3
0k3pmMvuMH+nVZs7MrH3jHHWOsdvfEsMCfFXQ8HTn30c/adKZNGS1ye0jHWxVAhePhpRmfzQG+Ia
AA3YH/n3NyCqT72kRQ+wbReSp4nGGl8gwjrxjii521nHn8aHJ5IZ7nVuvpdnTrxqXnDoXSM9XbF/
QdiOv2/ft95PGuUgoU9qlnRP9YcBfigIMfpG4+v2ywEVwCUc5Iu3Zffj9sIl78FNIWEnzV0W3YQ1
JRfoLRR9OmKihZZBaJibPITt6d6jpSM9fv1ZYHmIHEXoIY9vbMKBYp72PHnvh1PFZdXk81I3lXif
joB3hsmIl3RdxNOl75Z68Ty6C0L81g1FrZ6g5NBg7f70nXdaTB4R9MxbPF3uNyS97nhNPaRL1zUt
RnGdKeMQ88I8GJFuIlr4LlbAhSAj9RvgPeG+pI4KFoCPdYbcbQ0rUEcTpDrAra+H5xt/28jG2BnO
LDtfIViFVtgbPgZUaXNM04U/h5KjGHbrOgKYew3tZPC/4J0bbYsh/DevsNAFns+QD2+bhbuv6ZuF
NwI7MNYj8Y4E9KQqdYaF3rd7fKkwSG/iPgbhOH8br3z8WRQOqqLTXMqKnRqKbkK6gyvUcW/oec6A
QNyx4/jsg3KkCy3AB/4QiXpPRcTp+pnO9qrlmTLwThSk6MhICIzKr5N/fxA2ue1y7evKumBBpGWz
lagVknQi8VoJV9KvOCF6/M3sSuG6HdpGKdanc12fmwK31ExskTQqpqEEbcXXl8KuNn08aQ0YItd5
Ggpu4fY0ZaZ5ketK93w2XZcjgpiTCOKNiugfNxUZ9lOrEnYyaTpcRvKchqGET1UVJaRjcBL1ttZv
BpUnMeQNoq+6+u2TPn3nv9zmkmRz6BGdlaimbiGjLrT8QBDS5kG2olHmnty/jeHjzNwNnsYegxNs
eBRVFWO+5SWrKu+BYFEk/10+za+Xs1cASdXxWJIpYVLTewXKMnS3xS6ZwVe0PJaqS/g3vqHpO+d9
CElFdj1xnlKKd45rIVUhWElTipEXV6XlofviPth+cFb3/Cc74qW7buaDocZjOrbgU0PpXoeS7Nh2
Cw2T5JF1ritdkbI8RO0dDDD0fJDqjVAukubBG94rcphr5IpgncgBh6oL1iXn01+DKXksUT4xAQ5R
QZiT4wMt0CpXXuP31UQBf/lJxgsbucSU7NA5pRs+Am5ytRNT+bfjJnANZrMdPBLYWV79pNeHL+my
vQiqUcpOta4EgaC9+8FrP/53TREsXmXbBAWvswunM9ATTf/n8TtU0PAqnbplqdEFyc7KUzTQK7M5
sBFhoSnvv8WQJrwOtIbaRHvBYwy6ZGW4RAzBhXgYqCvGXQG3CU5KGFIOtViH5+cR6NAkIhM8yo4g
IqQdVxmSczwkR9Ma2AGft618Ls2mVRDOnYZ3HI/bdxrbILIgpN1bAusSMDhiVfw9NSX0Ohzc8XaR
tV1LAGhCpctyXIrPcXW5YlGZ6eEBd5I3J1X5sY/ueLuNF4oQiMCOtSW/PSZeN95Q3MHpEvGXboHi
kyGFkZd53PLZi6Eo5V60tIAuEgNIAIU5mn3bXl4gtIoQ+exHcHOnMJDtSns6ByH8y3TEtmAerHsI
gZ9GfI/dheeRoQoh+ZdAeVTr3HbeL1PFDIvTRis38JA5eUqHxjTTc9b0RgLbF6Sebu6tJ8vh0Cxy
SKrujQoGW+XeekOyYUuiioyldraY6M8cB16zkYwL5k7Cw0/32202+2JUje1dCxEuTHrNKCACUaEt
3ZTXwy1IzpxL4H1NXUJGb+ffbheu7TeepynRkB5BQz7f0+X4WdTm1PcA7VyKLSXQYCA5BYLGJMuH
l0xMSujcL9XztMhV7ClVSsaEn+fBmr5k2MrWmkdhiS4gfXWnk9wIZkqX3EfS1AtbrkdSUIVqRWEN
0CxTqT6a2xgACQND0C8qMtyyK8m7ws7mat4xkQnRrjV2R0dNmE0pYTU47xVJKeG+FHmGWSVplAyo
CPifbxvBiBZvedxUIBEE3wDQrON2dhJ4/9oQxZXGBtGZLu+CLzwQVJ0QOGalEx2KgOLgzX0dJSer
IyQn9Ley6A2XgqzWMxAGx+Px8H498JEgISWR+i/cleCUy3Bf15pS9GIH62+pEPZ3PJvo5/N+/EEa
UY7hykJt6RwhwfAC75/fXB8+Qa0PD5ioEotoTVcHfDrJGlLEVHQ+/ePfxxPUK4Qx0nlX3zlRiyXp
vLlNkoPATB/LrB30tuL5HGlzyBwwLIkJp/l0/pbG/yD/10tyRVXZruQ6YX5Ktto9QS6werpuueao
WTRdBO8mk3qdMabTAiG4LSXRZzLqSDMIEPxeeTtgc1fAVk6eP+XFBsVS+gsmnVJO6sJrGMq3TbPb
bO9Dp4HnspA8JM3ETMQK6GoUYwc+xlw4uJkqQlXLVY0jEEP4sLZLudj4fND6sdoDxVcW0a4tORN2
MFq3De8fu65oLkRnW3Bym1y1RYM+W1JsFTtj9XIK0C5I/Ga6/KpTrRAQDwuDQ9pnhZal8s/qtnSo
lJFZIwQPupgFCqKFoCmU+92OgeY5tc7ivcShlHacDlYABmxunFQ5UQg+Lu9s0lQHtijQ5FuCiPqP
kYxkWwYcRQETeNomt9jdA1uPj0e1KtGXIj3bH0cF3GlL4M719YKlE/N2Rm4AWgYYgSIZ336wJU9g
IlkKMFWfm6MhMQGl0MHRVCfgkv0yhY1dPXgImMJj6SidttAXgDc6CwHoOM5Iw8d/fU7kNnT+MrKJ
Y1/MMTi1YllPm2UlUqkJtOW5jvf9eS76gxpCHupqS4U9M8hLHUih8sn0JcBsIgT8LFEDqQWzy5Q3
mR2CG3R+xy0aNzmqzVuntDgo1MExh8YDwiQnRnO3wcDGuudVaBzN0Cda3VRUxt93UjNFOOnpvmsx
z9ISNJQYVKebYeh595Mk2+l5hoQGcogAeJLgktYUmY4pPuBdgDzRnzHIwcusfXBTqpojykFmKPU0
65H6ck0INh/6Usy4JSxq5z0iKWSmWRu1ZMIkXsWHWf0kUx8qsRmS8DQuYfrH83stjmi7onSUGVJ8
gK9L9wGrYdTA+7vpOpKGzmxVWsTPeOSrKwlpXO52nuhiFUoVSWuRVrgYRcTxf4jRXs5HPn5QpXhv
Viw4w7qS5u6aBWOhzxBuXnlTMCzZ4f397X2zvU6jBGA/ZQ9vWJBWe8GS8OrOFImVKWkhUDK7Epv+
GQqhAYDit74plVc92oiOtxGuVHY3q2heVXWlezTFBkIJRdEnznIqYmVnV8S/SZUg/+wyt6WFdA6S
LmVcrSdMXG1x7Kk1E5J0++P2Ov7htP8RWaneuw4t2muAdD8Uq7gOJ9D8X9YwS11fIj6H5/5wPP4Q
0RbegvWlyGmq6xAuYlfiRITg2f/ur3yPVkR3FF/zSxmAV28/RFS973JKclcOuaqOega5Yq88xVwt
njLT6RJA47rBDlosxdelHCyVcT7XNiwwFZXSIaEEBhp1fPfOHx/s6mKsINwSkY9JmKheNwxhalh0
S9q27fjoue1LiB++CPTjB1PpTwCo2+ItpUm7bm6jcnvdHsLHbG/JfxAkYmhUqYyD0H2jjKUSfnzV
GF6Hc4MSeKZzBbpvpDCmmXNZZFr6xluRw/4oZB5cCTqZtLKQ+zB5ilYRryhCgASvmDovTzASn0J3
JWIQxQp4tqbWpeOfj6r+20VW8dT12Rv1XzF78p+H8Stvlos8yhKfRqiJtCWfvEoi4BE+2gxASfCY
4eGxYsi74GjyNAaasTA5xSTKKa/cBluCiqvbIXgEfYmq4EXeR+c81X1YQAc2NsPdx1Hw26PwkyQ8
JGIx4YFCmFWsO49upRwRkZxK180zaWKExsdnReduyXh+316uEnlAFaM8skC14L4txpfeKAGwPv7j
vqK1Qte6EoskK706hcH1ORM9GD0UsF3N+ekXeUGpU4zho9ekTEP/MVPqpfPButGOGtLEXk8tycAz
wnvPa8Qi+0jZQTDCBPombKoQD8FQ5zW8mY6mh1S584TjpU/lD7frFAbvIqliceGaKgmpQMTwLNrj
7cKHUcUE1mPNfSU5Sks/sLXLkHh7wuG2PByPaBX/2qqEPZQY5Tw6SSNBrPuPcoHkiF9nKjUf+7pS
zJART/gyg7Jc4wdg/48g4SRnLVYwkSKZ1PbogcTERy1CeRHWa1gl12vYUlLgMVThWVSEwkomKkWK
nnwKA6+WN2+HMHCcH2yJIWfx6wmKzj/Z5M4Ebbq9u1+u3ssE0BEmnMs1/vQA7TyxZOEQ8Tmxpuir
ZgqOd8aaocT5rRAhydUNk4DCp6OkrSmU1269Vq2ad11s+1HSBkKJnMqZYEao3McUJS8UVuxvETvH
3l75mel4JQnJKY3nnuveVhBP2gW0poZHqbC82WtWlFEJFfR9qdxl6osiNI8ZSq696zpIuUiYRZFI
GftD8SG+zplkLsu+CnmHTjI/C4xCCLgVZRrgPTKNkkqmD28vtbJpVUKSM6sk1O0VK8kWhUV8ZEgb
6STPBuMyaOcmapSWQgCpYiZOol7qlVWJgbYrEmVLLvvT8X75F9z1tsQGP0LGdcYJQs00KVqRWiB2
JNFJpgq0tuNjLOdKnt8yxgolhR8o4Dal+LSkUvk4hGDJ2OS+zyvdMdit9KpJB9iThoFfIkXOC8V1
lX/Tu1J1l+1Vr6zQF6qT+lEiN3k7d14Qw+fW2SLfoMyK4r3egdAhwe6tC0Wq9lPZUl3fA2g9JTsT
KMfD10V/LmKnUweHBHvuJWye0LEwbWkfLdHu+w462EPCUGyl09hSwLHd739l5zGicelKiNdlfEEO
BQxR85Hb7XwR8guLPFlstmUGGPbBC2DRr56Y5AL/rajGlel51e9csbKFmiH5qmYmEUcQD4+tFhGL
xobKtS5bquXTSDM5J4lSLc3ct8W83ftl/HIACASlaGIQ8bibLWU7rW206QQ1UmS/PXKNeDPWZaXl
La1fejrv+dy67UoNY0Ip3vmDpU8t8ehIq/QyNsW72SS3hPHzZDJf/D2a9p/ng9OSTv2ABBaJhAIw
PmTM9ViO9VhNJSR0XalPQQbi8s6SUSWbtHCweRSpaUqw/twgodrLZmiKKqnYkk0oIlo0AuuWldeh
uE3iPvTLJE2f07Bjtzwpgm9bVcoZFlISfFWTLvquU+ZKYHu59Un9CcnBLyJ8xVoPBlJYPcBZDZPm
icQqgdqty6Vij12n+CvbdMVmHg/oDu8IEoAFXXtTqpGr2BfXlIDKx7fo+bdoq7XN+LcVfax16V1m
Y4KHPjeyjmopTaHkNQIlpQ5pGC8O7Ni+vXnncEf2KyRzN4drInQehS4JPe3gjIPnYOBlubd5tedI
3xSvS4kw8V0YnI2++aJlYkzmxQ61sZOp2M7RlNx0fJUJVJ/G28e+ZmA2L3uh4q0nTQQVCL3Kiyz5
JltCtN+RnoBkcBra8U+TtfkED/OoW1Mso613eplaqdeavTQkc4R/9IQIlnxB/hPpvgWyxUKbe3+l
WlSz4CC5JdMhGwHxY+Wb+mJfd+rYxs2JDROA2rGyNWdL1gbXpO2X/GI+lHPF/r9amaEV+vDnowmm
9noZ25DX402JQZ8jnPVmpLrchQR7+N/f4YhX17V0vX7o6RMu2bj74ez13WmPT4WWoniBd4x+awko
ZzJbF7EcnE8bRmOFjuSikm9Jwx4TtstN/A0YmD0144dVr0zROijIST5M5q/eQd4+cw/NTRNMnGxn
IgZkLVdigXWXJvv6mAehX3+4jW+MA9SSzs4mc+WCA8f+6pS3MFkFxMOeTzyt+Bb8GU7saBNLASPp
Znze+v+KxHvXEf5+Y2YnoW1K0oBTuVUMWJw1WjvLb4Shh6ZmxzwePEphAELqaXPsmp6+iBhKq3Tf
9I3wFi6dp9IuNd2YpgTg+L5I9sKY5fWw9284qXh+i01a2GnEGSMa1lrV9xx9BF+JXLDkQDnrzQYz
iwjDKiKYqSShdI8cf4/IL6fGF2Fs8eGf4x+//yD2vW3jpz6+/NWf5+41SCZm6fB8D6cTdpy83vjb
QoSETGYMy5GOqZPEy1IyN3Y3MdsTkR4vrLbTG2Fz08ZgSxGaJXrwVSRCf3Dncg0Qp9/tZyH3ntzt
/I7x7eHKq3ZYq2vI9ZttuOu6pjfC5bMqbQTJWUWFAjz67U2IBVtC2zRZh3rtBaDlJZt8uZ2Dae0M
09ANn1H5F2YDwIOKZ73BlthyUHV2rnoO9VoZ/pDqVnk1rEt2xtv0x0tm2Y2zZOO6GQ/BghAfq47L
Ev7xLnybLp0iFHUIfWLgQ6a0sskKkP5xHy/fN8upnvgWdHYdLxI63+rYvqjtXdtIwth02SWPqmu6
lbzuHpKuIchSGP/2F8H0W5M+v0eMZrFvPtLz4eQBY5orv4ku30Q3+Zb+X/Havaxjg2f35/Nl/AFG
Fa7StEPpMim/1QP74zb3XuZ+warVhjULpk1XENs7T+Hy4cQrbrI5JNyM5iixbnjFRuwy6QPhj+fz
eHu9nO8vrzAz57oJ/8oHsC+8EXEll2tmjFzv7+/ni/ApRAMl5ilsmm34cyaXgWTmD6crFIgkD+v2
9bAbyUALMkE0qBIwa+yrqaRLEIROCiA6T1L/RJTh9JakVi1q19357R3HZwrjgVvCKsezwphJsc4H
rwV6k5v6juikNG10vTZyxHXoyLAwfCe0bVfe4tuuLRnpmCaPvEhxRC0+P5Rsl2tdPxgj/HjTlrZC
Da0zgjokhgXr8/rMOpG2DJCt5AMU6tGnPMq0TD2gI0aexFXe7BmneddgSBEOaTbkoIutZW2pIadE
Ckhn9g5gCzh7LcYQP6bWxrzPaU1REHmfk78XOtfQ0+gf3XRWsmvt4gSGh+jsbWQbSeEX9KVgSDnT
C9Kjs/ghXpdl8urvd6+Rnr/7O/3tVhn3jg5TV9qB8eTXggu8pX4zr6OI1wglCXqeF426lNTfn0/H
85Z1vF3Tl2wKDKv+rfoSmrqh+Efu/NGcg+hEOrLR5HCYa2r4azrkHxN0iw8eByHY1RnWEqGpw8kb
DGhYcBmBTIk5Aq/577cR2LneJ/l1fN9Ktp4gKYRVaV3fOLZtJb7Owi7n6lHwF23uj5ioHm3DR3C2
LTlrMdKJo4I/AFtZN5S8+Gy9WVXM9+QqNViCVVuiOzEZnHnC/E4Obe5tdY9v4/8iOlxl1KH1h9T1
PPKmdG7hBnozEfyPlp93YbqStqUwkGzmG5X7010GPwl++FCK5eLvvl8qNoK6PAgsRybkwl3hjSS5
veAeqrm9ueoaJ7jiC7fa5ZrwOntboRXJ5f11exp5jUiODxu0x2xs15qm1/yhJynFwV4F3z5WsY7H
I+9h2ZICy2QWP+LJx0G882lbW1KncQY47giu8ip4aS4Pitzs3zsrGGmTRwU0hN4FVH3zZXu8j+vm
0Lekv7LJJkEW4QXeLtiFyZ3ITK3tBt796m3mcsR8wyTN6Uj42L9Z4sCqACnNKnGCT9lpOS1pV4KX
rMVsLfXCY3kV9tQA8UfgAodtoz3GPhsrQB2rSjHxYloAnGH4Qa5ZAtpksgmp8A/QD6MEb9+UHG5n
26Fve17lq8wAxbpXeE8Usgpcrpv88k2GpnOqUZLpbXL9Y5fICa81XPEz2X2GuH7Hmw2jqtpj6bs+
b49XIRLuS/emFMJ2fAg7lGxZpD+DWPLn4XLPzNE4PCTm+CtP0Gkyzza/eZMpSHELf+1MhiqmWauN
kdwyQxQ6hfGUv2FmkBJBJofxovw3duDaBuCv5djnVE4TVAGlYQfZqpEh0ZVIXtQwu4jZNt4EUHXu
Nisdw0SdFU3j3DHTZMRS5xWrFSwSSerhjtjC74OOJNiuXC7Qkt6G+UdtLy/3oL+9qXs6nLY8nxAd
hiFPuzx6LSEfJDgqphRIZvdD8/ejze1qmnMUhmKfZtJQ1JrfWFuxOGKVRSy87msWWTG9cDZ5PzM9
SKjo8btruQ9HQBVwWIfHsIB3q7ocGIwNlzv//zshWbNIxJcwN36XOpcLcJMZJWF3VckpDigQAgMz
bygE1rEDtuDe66EUDIUVCd4QMNbooPH+ZdJUACU7s8oxks6VZv3A6VVzP2xtJQ3R5kGr1aIJ5m2v
LsGa9DpH6hDTahAv9MJVikq/axqrrHTWizx/Q6BRPtiz5MNTgxLrI1vbSEEi8WqJ9oO2NMHz9Ee3
iwFqKGvifXtbStQu0CMxUKa5m6R7IvAVaUW47VULbzUlPTSJAcmAULxmXQKNDVVPi0SigJMS85CG
wEzacQZPeCWpSk7p/DGpNaeMJNBAICnp/J5WaR9Ubyr8o6UxS3BMDtCyG5rj8EFJU1KFQQGFjQGd
Vj9pU9ya/JsgC06b91U4FNTxSui0Vz19K+QQu0Xqf+oj5yMRJWHhfVNyRl+BhDyK0bRti5qCaqlv
b0fW1DvlSo/n8f31thWAXpJk1watiOUDej4fY12JAjP1qohydTpvrrvLWYBbCF+DSDd+TyQB/gZf
s2n4NyGQB5boZFm+uix2C2VhHnw4QUWkZ4FA19MMwL///te/rGl1jklzlb+DwODgtR7BkhE10wkw
6nkEurWl4BDmSAtsy5Zg3YRtmcW5a7KhlsJVyd6S2zDP7dqezrfXGi9LETgd3K+p+U0pXuaRD5qY
T9VnzvbKSUw3nSV2463y0X7ovRiM8eRG3c44/Ys3HjpJFmiMrKHhmiRfrxcEwmm2UTHJJXg2xEeJ
c8hM5v8KAJLOqFjRV4+aIYSbgUo0p60lE2YtScWm2rF4sqEPUK0WF61ym9uJbgmwr7HstpRZ2h0P
709nnA+/241X4WzbErshvgIMb4kiL8YCxN6RWMD7NsjP2X9Cgfu0vcJN4tGlIosNmsB/jxK7pF3J
+B3JmhDUOxwwyPtUGMcfcl/yiCdFGMKRmaQi+6XEs8XUmsrC+3iTgqoK9ylsOswa9b+1vU3VvWLM
QQBLwDliP31vHHttBVZBUyIpEp7b9ghttSTHvaXwMMS0UxeK8fIy/hfIckTvZNcDLdr5cvgnsEuO
v96lJXLgzKoshhJA3D5PXeiHlMmHUqGG6IthbmdJMGFecznLb0L0laGs8fwepq3O/fRFUqyjaMuw
pF7h9wXnDQgd/CJDTi0x2QW5jC/QImNVvn8o5ReWjGje82nEJAjpdbu9VnwAEkGST5qiYIE2MJTM
dFSjVy/8fjeTsjic1mRdCGZNAhz/r9u+4fGlTpWc8gnJm9zyrz488C7At3F3x38f7+P0f5Y1q21L
eeEpUBHyycU8dJXvt7tfb/6u1Zl+Rb7B3O+Zd09srgELPAXZjBMeI8RwnS6j4kFlBDAZRUAsaHGU
XmcSkOpgnBtPXx2GEt85AMhTJVTQGpUogAhfahMyEUL5gI64eqBDlVIFMrqQ0WwJUtlirVjBaU6X
h3dsOia2XZAm+BCG5vHMbP5hsroT+EMkw0Gn6CjTdp1wafsyEzZBTSAwsg+mqlFQsLxTr+gnARdw
pTxkKXCxfODS5iEIaaI0VeN5EwFrrArOrCt93urQnjLKUtp54l8Jet2W7KR3tTrT8peQfntKlCot
8TQJtEbs/KMS4QW2K9YVgQt5CzSLawxKTtsvh5etXHJo8gCnp/15gzce1gpCUcH3HQnRVYu56Hib
XDt0Aho/9CVAYMqz8pamKwJCDHYr1KE09RKg1dSVti3FI6er/8/ez9AGL+4ljyTbYtFb02rT8f49
SVUTlrYarEChIjk8OpxbDc0g8JMJVBHcsIlUOzR9x/+Wrenp+2nmJ8g2qynCrtB547QPucs77nMt
y22VK/mj9KhqAk8IU4R7Qf1rr89P5/Rl+O+8DyQtSirSSIldrpbDFZVSiASNIZ1CT/fjMV5seZMN
hbXm9oYYJMI3sXPkcV8X9IfYbxgpYHDUkKNZ04WjJYPcTGjIlpdTwFkjrHWE0b7nWmFsk+9IkJvI
4+Y9JKrk0STZxwKc3+rF3WQ/Lbb0ckI9KOGo8CsOJdrTA5WASl8EvHjJs7kv5BbYMr9JOneHDENL
r1pw1ywcUptVCgj5yb5sFRN4yaP5XbEOMb9wQgbX9kWyW8iN8r9KWGDE53jw5OCyYA8LWbjbIqt7
CtZ4CLnXpbegtAqJl0hJGT00ccwKuwV/qy2RWMCCCBV7LgcOuzz2rmEzxMdAe28fCRm8092VUm+I
WeJBTenCL4frwd+zqdGSP0tY/1sNwexLbjhFRNfF6yQTQZhzJXdesBq2xAAOF/knsQqaNGYgYy7K
VksofVMCwOLt5u0AkJeMtuuSVw4axPY8iXTptjUPScH/RPt1P8UiSRjkHf4PQgq8mDmtlUbwd5wy
PcFRjQmJQuqSDx9I8m2iGIQWIfsz/ufwF8lFhcGcqPD0AIkI4mxeRv9kjPK4/kvwNO4KeXrqUbI/
Rw7dOCVz2SUwExGWQMy+S0uEJ/8nN2EYnyYv4NBJIa8AHdzfxyPEzld+A9S8AunLiM9f32BAMeki
zC9i50VIFniahPAU0xe31zHmMPjtQKpF/KBUSY2vk2fH+S1JK5D0ANlQueElLmHSEqmBLy4RTOFX
+JI4YfCK86K8I3lh+6DiFqVzJpWrwDLsdMc+5cj5Jq4S+Rj+G2z2e/TJFYLdFwV79uUWLu/m6f5i
dM8OXcYvGZKIpFCnviL/jq4oKog2MhR7fKpN79GSCBnkncVzUDLThhK+Kz4Ym/uOty2Te8Dn00Uj
rB3btD72Fz4yiaLCuGz1xml+zT5XOS2rtVZcFfJVKRs73fypegPDG8wNXr6A6EG3rfEiNXbBHevZ
axjnhI8BYcJ4jH/FhYonnxuhbW++tqSpOb9SX9KVtnGDlSWVbFKqbQwyFwI+2CeMcaQUL+4Jr5rm
UPIkdiLDDyGXkXQ/iB8iSI7Or1wG+WFX3sv5HQB3TMbFf1+5Vuk+km4HdfG2/IoNq/kyi4ZzPa9j
rVoZ1SG5hQ2ScxvdLKUxtMCHvR95S9mmnSeMLWe63naC8rT5U0NRgE7clBT84XR0CGCxhnXFnW8f
LOzcug//+2AZeXARyV5xEcXMFwgt63AhBBOwkSfHC8EFu3nBKY8RVtzdL2NoaBwfA6mE5Ob1il0f
xYkkztnS3Lf84TAOEZME3i4fnp9HQMU2Yk9oR2Z1YsGlkxbmVzGl1uOLVYJa2/M56Y50RHGpYgfj
Z1ThXr6hY1x47nZchXlZcruHWIKoljSCtND+cAWdtefXaua1yJSZ2HnSWwLojOJfrfJCel6EVOE8
ba+HXfxKTg9YYjmH2HSxSfNI48gikC0WqbXEwR0yryXQMrz0YMZ1tkegRY/j6eUmfJCd10ODYJbd
YsTJCJZ4ZvkbzRPgQQCm899kuy3vtEsfqhDlmFwtf0bZMpmE1Y7PpXdN/ZEqzbEs8b5gmxrs8Wgf
xSdrPswvZdI7RN84RPaThslASmwmE7QZLo/DxE8QNx85VaaawSVdRpPSIfrADRtDE+rYc8+/faxI
PI1fWc6VwsJ2onhTmnNOuW2wggy0Bggfql5xBgauqe28JgrhNGv1y7g9TuNznwNAgBAqr3LDK/b5
K9KBfFDv9jri2AtYU16pGfS8Ep1MhcAtXDdc5vCc1f/MNI55xsaalrb44iqdG7Yqcq3K9fG4e8UY
8gq22gg7kN4bxwy2Mdwo7sHa12sGlXZDzT4AmXQT2oqH438bb6/nvXDmzYO9TWcO75IkKbWSFrbO
lJYDPme4ojhQaHO5H8fqmZOVaA6UE8bVp9skD4NMcfioMNVvk0o3FOt2XddGJuh252Om2+W4OQuf
n54mIwEe37LQEPa/Jvtpd3D2ctdGXPotNh0LSHKQMR8LworCV6TVaI/QgCEHTbe/owdR0SWaqDtL
pixsvcL0ojUeIxYNYWoayCp85pDWG2Z7W77gWpCldBW99sS0ZF5BO3OfpibkdcFphqQ3CfR1fsd9
fwcKVWx+KyyRPg/rGm3x8mBjSwB/p4F+MReGVk/ICYdPTz9BBsdJP7HacKiFThJt2wo8MUhQ0sUk
2Rov1JfD+BUw9HXbq1Q6IRKFBbM+Dw4IU0yhfdMBu9HH7sR1xdEQt6Fdar5JJYcfW6WSbWaGda5I
F40YPrayFmxHYeUPmBFVkgB6OFFUr8I2LqTI8qZoxZ1Mm0hINJK7VVNohpHx26wN49K77Wk3wvi6
TAELK7tSSF5WbcLukffT2FVNm7awEmxdZSVLV7JkJWb7qjdZ5Te5jRBBTJKEhvnxHypzPAAHsQkH
gfAiEj/nBeiwN2jeJCVQLMkCpXYZuNTudYSJN3C32McNhesxjjPZu/DAUpOjQuXfxSt5ON1hQIsY
puO7EIQyEdIj4ss+pdNeArllCE+F0S2XGS/2mvD9wK/RlDI/5GO2Nx8kPt2ljUxILQ4Y7efmZyAO
n6b9/FT9nHQgeLRtLhrzi4DHheqEf6OeQLWo1IfS1vBvokpoaOFNKti3GQjQP2DFXr7S/XTw7pS/
3N5ab0U01ZIMHXAtTCRbzEvNeBVXEKLjMCcqZ/rhtK/fTzv+e4iw2NBOINtXNJfinVUERDeYw44D
PVLa1euAm78y0LtqGg42fofKChy/yZ9Z2iAcdmPpm/FPmVKCaX6VMMTnftrd7gFcqsPeti/lpskW
/+M+CokX0xKthGlh9Tg26np/eRmvfC8B3OmulCMg7xF90ODUy0klo0sJq3mXxm/b3Q3YKrg5VbVN
tpwS1wLpeFpzpfay+fG5TBxl/a9JXsZiCXSETLBZLr7DQij5vU6vgaUhtnitptwOD3Hja6UbAqmz
Xj5+//cndA/qgqmSZEECsjPLl7yOXjS993O6v/GS0JGkDs4S6nJZwKb9GH1NY7mQ88NLQ0NUtUZ9
HTn/EFbiEPsNecfz8zP/gX0p2fxgl+vGmCStE1WMPQEMtNaegSOcD8RZmoLCIfO3V+ibIU9uPnz1
9v1Qud6amMtErZvf6XU7X4NwK/l3STuHEHazMHcxTGdHjuEaLlMPwMakJSX4SEy6bQsTWQ84/c1x
/uxA8Cg6djZm8bBHNk7kqjQnUyQtojLlE9KlUyXeJGwsjTKg1S7HW6bB1cfj9v06Unkwru/aRvmg
6hub1OvTe4GrGtss0V6RYFS/Xtm5qfhOJJDA29Q+rMINdoe96ck2px490GCFppP5X2+HDMqKvNQs
FR3nHKaxJbMACBud4izCXIO5KxxJFjbUNTkEbEqNR1a1ew0NIkxpb5wdXKf5l+hyhDam0oloQCcB
JcTU6SPQ9cvG3fM3qWePmOBGxCnIBESxnzMMC4hxKIhXxz/dPASlaz6Gl1ea4CFnoofGGfapviXg
dpo6npQJN09XEX6LygoP8+1T/AaQ29kv73icFU8G2fKCMZD0C+HZkG9QmteATa5Me3KdFE866HPB
yX8x0GKxp8DUoMO/A6/QDYHuu6UYZv1Pr+J5kNQMifnCi9Ca7tt586qCnd4fLhtBg7qhtDvBCfzZ
+zWRsrsROmbgOl2b33xbfDNMgr+TmldeoflXszkgr+mm+Si1N40TbQy9gKQ43BrTt5rflL5boEnd
irPnVZAZSmlZeocCNhwvBNaFHZGqJ5XCBPOncoWwQhx4zlYwaSq/siV9ySsomtt5+FRm4/hLb3QJ
YMXoBEcGszzX8CUk1dwsq3SXZnmaWkgUMW/klnm47tHsC3fY2/em5EhRhczvsNO5IlwhmprfYatL
aSXnbNu1gpFfAN+mYBV5Fda3pdzDdKvbpremkT1H4mMo99BigxEz/oVM+hycgGNXbCm/mrUfvwID
v5okKpEqCwT8r+Jl6Om9TJ5Ibf5p8AO73CMzrPYKgTSZnhH0DdBwK0qHcCJIdBgJ+bFRwOkaso/r
ipyDSdKlV1+ZHGwMYXzoeWwCs/WCshhK3xaXsY3pbdPLRix9BXxQl4mn/3H/7P1dVji6z2PA9uHK
eXMoXjmXuy9uxRXhdZh1wuug/uOdORLlEJY0fZY3xK5ITC2GnMKFIFkw7J9kiM1NDFGhQSKuQi92
8m2K7tJrS/0lwZWzQ26X4rzO1tvCzkmRY5FWMz3HaxUSHDwOXTNd51RXEauFz9iVWyWJx0ESziXv
KvTpqYAIhJWDBaNxYOL9hHmUwLXEkxHeg0S+xDPP+shKdr1zJW9lEb1vKeITeYKCAtO5iKlFn0FZ
ZxDSDz5tP4JtSFLaLwApW/AeeI+lt7nION7jrbS1CiFGX4orHVD2TSNFCF3Oxyh2ef08fhdOx5bi
LhrR8j4GcdJJqW8SDQlbagWHAjhkgSQmz4oLRoXgTe3SPmbBvUgvG6ig6cWJ3k9emYapVAgfCd7+
Qrc/2BQhznBDiZE2XV1Eg6+wRtAEQqssRSqJ8qBFNpW8ubMLFM5mxuZLMBDBDVkR3FkpriWuhBVO
fcgvjF2HafEeLqH1kI5nmZYSXoewrh69q/JuNy2PrnSZaiqBhQJo3/cl/mA6q0joTm2LhIPSOezm
cuTDDba1stOo8pjG8O7Fdr+Xqm/8y/SCpiINcSrfRJjkxFuYVC3vZXSLm73iiFXDB3sE3+hm7811
emj7hn8HV4K14zu8XnhloITbEtEUXqAI6ZN0K5jgK2HHivxtWQXxb2HbkrGZbvzxOJeC4v8G3m0A
CwVK2kCZeIQ8l2MokrvVl3Y2fNYj11kww0PJ+uQnxKtnUs1BmCrOtIOg8nqaNuqXjhlgrVC7x++c
Lv1m1tAz1uOOP1cqRhoiKYSwW9PmgiklXH9UXIMESArWXOc7pB+iPAHTKtK4HXST6IQz6QX3HUly
L0iSk6PDgSyDkH9TyXjwoqXaksqZiZbkzdju4OGIVR5YPGROhASWk7Iu0R7yln3QghqaWz/Wwm3K
0SYYfjMMRkBdqEtHxyr6oLZteSFQpYoCf6FCz5zvMX3KDmYNGqUtbXhAsM7XmIIVHPTcB1kD8AqA
PAGxCFQt+0c8gKIHgZZgev+okd0S+nGJVXUZX6am4vvDDspVJHl2JT7DhBncL5fzy/YGE5AFYFBR
ABvoPD0NOrzt+OX5b/UAiPrmjzB+eW+FzJ7NVpvG8elOW8s7JjTsIUP8dNMapQQXoU2/Rrhg8d3f
Dt+A7bnMjcioWJerimgJG+Nfhb9wJPyGL2n7uUA1sAW2X86HPZiz3biX+7KidKk8jsuEHSGTmroc
yH4SnVX0m1dHXW5R8CTYRG62XDCKRiIFleWNty/alHRdFndJqJvLorYYKbWNbo1xvGM6lFCT9Sk5
Ho+hjliqlQ45fv4pCpim9BeXlee1LK0+eACWg6F/Ph+P56/QL/r75vb1zHU8VqQJQ/Fk+BCbP2pC
knr0NwlEKl1vl4dNhRyZjPKQHg6YISuIm4AZEmfoMY4inCb+Xg+lE3rbHrCMO+siXM0L9TnPypaA
Xt5D7Mp1y3ngI2xFN5SKQJN0XG9bnOUOZox3Lm12EXWZN4BF7rfDKY7drFchk0MG7obrxPsk+L7D
h0N+zYf8VgnwHuNR8e9GeHEkZLLeEnPjb9HQFcGPil2Z2+4txpYIpmahOtq8M/l+kvE//fJX4Pb8
GhqmCNe+LwUh4bVzUp9gtjqBorl73eJcHjmkI0sUEndbLNzD6vaKFljan2BBsTQvy+uGftxSDqMY
Lbp+aNqeJ+ItoeFm6e1k6Z0n7xWfTkKGp+8bNmaFK3sZoVrniz+eWB+IKPq4g+6UsRmooOWUAKxG
XKQTBKcpgRSk4WCQ9fsJNS/fuTaEgC7fN73OIPI4b9ML5sT0rfP3VY5jFgrqUaUEETpuL9jI4fk6
Ck6nXeB861AYIW5vBiFJDr2oQ1+IijbXCxHoswHhvFe1BG9cyUDyCrbL3dwciSEdLWR/ZSgtEhQX
etrBaQjaX1jHWsEXw7QSb3dIcPPodnk3EK+BtBOtE5hSRxibAP2vxGxpOkKIc/s12Dl/bSgVqF2m
atIHCXrc5v5Bfm0wr0bpPUFWwPPgVzQl2z5RF3gZdZpPOj7Ih0S5yGsi8jPOhFVKtasSkBBe5iSF
Cv732xLYSaBk6Mlxur/zqqKYKGLKQ7gh18EmLlycUikGL1t9jsPnt56kJoWz0Aumml3FjRYclybH
shdp4ch94/VYV6rmf/wiCftsS3DZ+nhZIATa0svV2doSkdwIYDHxa+qQNXH/iZ4pvhxGrxIJhl70
B+c/+jG8Ch8WHRncA3jOSzRx+QupgLLu5U06iTofReEhtBISNL2QyeQzPvwWKV2qLqkT2YQjkyh+
vDvEfzNl7D1w2m3TGxjgI2bTTYmsN6GsgidEKKTdTCxj4g1Bsw6CQxXifZQA4UYZwXJ7C7GvZ2KG
vpEIS2X4kU8OmaZeWMTfraGYiLB951TP5/iclAzJjLUERTUlnH6OHVzXOVmYaOzoFtZ+SZ4u854F
k1VMjlTVunAXXSl4L1EjJcgqp7rlTlJs0yiOI1ek13PuidtBa9N2/JF3UiXPReTzUIPG+xNRswlb
qIRc9hQO8XkhunkL7GPqZRMZ+FPW/5pKiGoMeXILsVNtu+JOCzC4KyU65NV4i6f70h13SrlWqHSg
xX6JMHf9fHjffDlctm/bCq0kyQvcpZiQWqCzAh+tV0I8wGwBL4G6FZ2XOQDkQ0hCtn0EBJH5b+US
OuLVY6wxnULbu6HnT8EIrBrehPO3oHFVIpW0CwtydVd4ms96D6pUPGMH1Woj0uPbD+POgvld9qrr
eDaFFCMZoRx6WdQipNv6cmGld6U6gUVHCCFplN9SoZJoI8y1vov1ilbIxqCC530Q14k+yHy9hFo2
4lm6kNWaJhxvn/yJ3L6HtsEIJsyNN/Hj4DN3V3aOjjFDPtsuttx8OZ0vlcpQbHlE5q9Df5aGDJyf
30PIdOEbdKVZVos14mS6zeXw8sq/junzjzHTPB86pwi/CJ9Gb6BSSWlJVm/IQs40pg4Fmn26S13H
CXweIlV8PPC1+OdTG2wiPuH5FS/fpYbXpDHc4nHFP556VZPOSfnO8U+3qd05MfzX3eXwfsOuRvf3
zXgKqE9sQMi/ic67jLvFKdS2MfXvpsPd0jFUTjH1oSeB8WIbNf+4fTjENFxgur8xwT1e2Z5luiPj
UhT2RozhxfZ+O0OPxpDugg65fksjzsmvRoZJEHsHzRGhceomW7Ta+86/nC6NxkmfBTAj3ENhheZh
bBAOpsSxXvjE/BpXbhCBCu54HLnQwcn5P+NYEMyR8E9OU8rgSQtRvLIxjueUaPjBYX6sHXCE92Tx
nsfLhUl9hh9MQxMs8t4mx3172wpPNfNTvUWKSTg5nCAiPEZmPfSg+XVvp5Zal1H4vD49pyDi83/G
mG97OrxL7frC76YRGC3iLv7PqT23V+9XtndbeDrNuejBVe2ju+u9EZi/Igy3UP00yg7eXAeqFYQ2
8UC/hg5KYBNQps6Xa5Cx/flpDM08709vh5s3HOGfXrfv4zX9FWbiXg/78fHfbJ6P5613td63+30Y
lcUPc9Rkzp/FP2LzpNKCXmm+HE4snx+TUGSUr+1SLzdxvYZdT5PBlhr4S3rqRCB/MD/6XdFxvNgf
V61ZkB+hqcj4UEji63ZY8cWG/2KynsWWeMIX746H9/eRT7G1qGjJF2PbEuFIEHwZYfrR7rY9wexR
YWlDZ/IaRTq3FjfzfPz+gqWu/OlovRTHll/w9Xw5/BP4O8fsdfmt7emYcgxZ7Aph5ydwN+0Hjmo+
+p4/ejI712KFrF5z9PwHk3mpGlWnEW739bbFVr/S+RginKBLtdNrbg8vQXREtdUV/ZMW5OeHajpc
2tQ++R/3LVQrnC97pOcIH/6gNoQPD/9yPnBB3Afy9dj5Un1Y3BUv7uSwOvRwVuj2puPFk0gTACXa
DmtuO686tWFGesuHb3lpapeH36644Px6jV3qtzUKg5f2hkpRi6K05oN5c6u65Q6aFS/IuwMNEUjA
drRbY8x4ERzUB96vZHv4s9F00DgSPFe8quKFsaGv6irKHNpoQkNI4XJrOkKZTreVX5CfEN6Q20Ib
Epetw+Gyq6iHjupyUGmtrr+fFjwronmRy2OaNdZLeEG3NK/CbZ7GK2TSI+hzuzS15oNr87fctMuD
EjYCau9v6xbW/fAB9VE3P3poPiDypdvJC6smiin09NcfW1qwGm7pMtgPG03L73H7gT2J/oMoaOoD
PuejMAjqpVvaujXO58ALw/ABT2xWVx2vrroPBFqzehHiLLWUqBXrCZeJjqcP6rldY4v5aED1H4gG
iiqF/3hDIxe9NnLhpbJpPqD+5vV4r7vpPyDlSffz0t3ZDyy48LeFbWwWobCkQNNrtvwlbD6g5tKC
vPrpyEZiLlyvOBjhBYd2YZT18GFlKRgk+wGxTHeINxvqX4KP+O0cqAPfV7CP9IK8VlNES2LGU69C
Z3iAqxs+4DUxByQYCark4PvbD7kiQmzZf8AVmZ1R4b7rpTOq1sSWAjRlC5FM+P8QOr69xufenmHU
wh4r3jfH7XcmD4NkjynHl/es+RHShX9FQsovXq//gC3+v/GL6HkRTOfSnOPb9f50vb8LYwLCEi69
B5lSFB+eJprDZJ7LeBJexZq0DukwEtd5vv/zn/w7WJU+IzEOt5enw+2yvXyPGTbhG9JvI1G+jY0I
vmyPh/0mpOmu1Y3o0ku4eS/9IXyPdSnX22W87V6/b2CyO192H74onS5WakdOLh6s39DLw8byK9l5
JZLvm77Jq5kf2KlJ4fk27U2Pf1giaX++bHdVIUunAwmpeO2nTdi8Hv4OJVmbKPs4yUwQEyJuds4C
g5hstqfz6fsbdA2Jc+Wwl1nt2KbUvcoHTMX9Cdtc26J08vh+QwSjJuE9nTcvl+1pH+ZTCd+m8yug
6W1EnbCrbXU6bNLd6+202V4T50/qLR5WGfJVushCHK/jKYzAxsfigb0dOL6G7mhlFGC0xk0V/qfd
EbpznM63OKB7Hp8VtpxfU9NOifi+kdgC5ZvTuU01eFd+HdqCJqwzjUaN13Q/vt9eN68jUC021+9v
b6N/xR2/YG9LROrpjfwBfuWfpf0oB2RHqEyEUBGHYV7l48dVaBsWwNt1JKIE4fEH+Lz5etjfXvn3
oLVxHSZGCT/Ae7cHSILzj1PuFiaguqZ63t7Qa+G0yRhVDN26XIERN8Qr65eTVGbp94R2i0YYesr0
v21PPgi6bqxwvpTcR8Lx/eEijOMJ94BQnyDrZ1RQMymJv7rPsm4pG2zAOartmk1WwiaTviAaLE7g
K9xfBmcbYUcaWjuIf8Q+qlBkjHOQog3ll6BU+QbL9lR2vnNwuuZ0aQUgVvA1y10W+df+g8iUHIU5
pY7Z2ssWeucc+aXoQJcO0x7dYm+ezt+EfSHVoMByMC2xdE/b67hGHdC9bRC2DZf5/Hk8/RhKkq+b
/ffT9k3Sa7TZR6h6U4VlwI39sr0cttIJ0QEvLd7myA+pvQMdZI+kmKj0ydHCC1wP/5ROlxRBBCNr
8gu8AddqexROtaE1ojad6iwg3qGSnbJw4WiLkAbzY5m6X3vAtLe/S28TWwTuxdsy2OVtUYysT46w
2ErLC7laKlfHLLgfn7f+0c3xfHoRStH9kk1O+Owz3fAM4yDlIyccWJwAr/vh0VkY/3E/+C8Ed0Zw
F+gwIFzJTUeG5nm8xOVeD8/CrrdFRjCo2m4YGkHwyGll2bCStyLYsCS/IDBdv9BJp/sbKlq/3Okc
/iroKLolyCfUC6flaY0Qd2WdkF7qIzaAdqgFD8TEkYZvsNzmNF5vo2CNSJt4B86Ui6E/ERf4qnUn
bUudY97OUxwovEXaVzivoaEumHcO7m+nysnQSTzhZJbu5LpvoDX1qQrIfwPSIp+9qmR5leFLaENW
dGtTZLRWPOxSx8WNjOHHrHAF/4a25WsCRhxZe0HtV80P7c2A9dKxKiHw5tFf21z/cZEuXk88i5aA
SrPnaYSHqVuNdSUd/fm4h/zjNGIK+ZVHJXg6x78JEt0tg5SmZISrXgAdoxQt+iRXb4fTXXgD0h8C
c9CmcZlFqEQ33VBTNXKUptwyZByWUdpaM1Cckyd58F7OBfmkbkmbLkmSLiHEyvraYNA2EJUJ9Tq3
18Pus9edV2EVWjGNMzoneDseDbo0a5x4ctXgzUyvk51d6RfRxqItXra4HQDGVEwAqf4F7RfRqklh
rdOa5bLQ9XE8belC/bo56K1Y+aynS5/C8CmKf99KwAgtv6a3ZBYmYfNofxCSyHxQ1pIgtWVX/91v
2+38Jtwp2obHIKEvbrw0y8BvsCpjHpOZm1wsQS3R0R99Qm+SXlmBRynaibZPYdZ06DP2K5x7tzRT
y3hchhY60l2gdeQdktfyPXljT1thJdKbrg0m15HDQCwK50xUNLZrlqbCZJsSFK+wI6Slhwl1Xpxu
E+wv6VruUELiWxDDtz9c34/b7wJqQ7E5laCnwptIngzZVmWJQyVYjqBvNj7CuUuwKnXm2xQpBR8j
0lKntGS9ON7rAlqPSfJ9h1OoBUFbixpdapru92rIe2E2SSIDSfjl+P39VXIaiDpusW6JA6FPZ0QA
jltBokxxVsS81pq8TFiHosX4h6M+qXBQpAgS/aEIQwYVK+xjs3SCh8wJvp1fXiRsjFbEgjc7xxRZ
bLTaASoOJQtqEgZObt/GfUVv0xYFCGBEiU3aLrtVws5QJARrgnqqq+pnSRvbkvZ7M6yESJngDxMl
haWRZpbxCXqpVHuFtyDQAlbDT+FaDBOu11XL0BY+wf62D87DCtCQNgIiSfT89tdNq35smYAjrsNU
dpoV49NqJJ2VOgNFj4S01byOUBUNedlqqrfNc946jqM/v4UKqC+hnuo4fhmPBv/67d0HRvi3//U3
/7dfccFP8XR/uoVU6G9eDY2f/uPnX37904+//vinTz//8qcfP/30+4+//uH3X3799Pv//tuP/zYt
ndcLqi7VL5KmF/SnTve3p/Hyn2gDmEUm581mc+l+OJ/AC9r63fp0uP42FRD7BY9HbiVLqhdTE43s
y/GTx5/Hb7dPP/38n3/4y09/+vTb73/4/cdPP/76K/uCqeaT+NW47I9g3WAPP43hb+OnqWY6ItTc
om7IazX7h69+3V7/PGJx+ifDrTIhDDab2rJ4td1lhG/+ze/B+ejtzPyK7Lup0ongqmSV4/n8+f7+
s9eYKMf/8etPn8C9Onzjlp2gTJs1BmA+OYC+3GeTlYZ5+AKzkiQxk19jY8uIluzfN8g8Q21kOtuf
f/n902//8be//fLr7/6eCCLTNqXTLZ4L+Z2f//DXH3/72x9+QGn81GhWztNbk6k6H73hv/38h7/9
9u/+i6Qb3pMrleYuVn/qj7/88pcf//CzrDxMaY9+h6sJXYuv7Neb/MzsWun89sbKQduVKqdZOVh5
x1uTV1Nz+uh8QYX0cf3b63wrzMMPXE/b9+vr+eaP500UAPGaDE2u51W8b2/w9fJpGf1QUS4oz//5
6y8//49Pf/rlh//4648//y7dMEdubuobxFkNWZsMtV0syviff/r1t9/zQxPF3SYRc7P2+6BKUOyl
aFmVXdjm1XrMLexLs25rfvv915/8OYrb0bM3riS6guBiiMjekJ4Vv+lnvGt6ehE9lMHk5katOrrT
+dPPv7HnNWTSEJtd/+1y3sHTp5dPP538i93Rj6+oQ50bA73KBdjyl93lKl8/nszT+Qz9ZnHPPj1v
j1d259qB1dXT9h+AaAtfGJb7w8//e6mnRA3o2FslCejHDWGXW4i1N+Ff8Knb/DybdaaIPQHNbpBs
LSV70Lp/yQH54Nl2una2a1WE9C19l/9Kv/5bxJdXtZfPbpG/6+wlIk1ZcLfDJfrDFFNX7G96mDQQ
Km3iX8bTy+31X/ISB5179u6/4IfszndemvuB99d5TTxFej/+r7/9+uNvv/30y8+SzbOudtMXO/Yv
7JdiZa5krakPwGptW4oEo4NasSAkvk0EUklJf9D16Vs2Goo/EB74/fs7jxKQ74O+S+2HIt1aMK5L
L7i4YRA/nPh7pkpqm/NH+YC+L/midJkk1/y7JH8FA9xH9Yw3TYpf+xxJMaKAfux+OfMvxca8K9XX
1/the70JzrPgmhdM7vogpVWsLZdsy8//8dc//ljxElxJg1A5+elPrHhY1qmvuASH6+3T/u1627Ef
bHNDICu2mhS6lo/KeeCNXe0x4giVUCkhjsipik2pLqGv1OvuE9SGYBqr6dnseW/y4dHxZePTYbx8
aJF3GZ8R2kenhF2OcJyJVMNykKKANd+2XjRv98tJXIgmiYlhiO8FjE3439Rcjn0hXZyR4teZhztB
z7TQiw/+9jLejmgft6c9dlPjVm7dYpSqnVaO44tCbmt+RWwUGPQD/9WEOUVuXvxqKEmJ3cvw7/xH
q4ZZJvvo7fv7WP1I7oXgu8IXRoYCuwSdUpNsQ1wCRz49H8Z9yLfyiwylidwFMT2NX/GF9ofn5/lq
sfs99KX0ZHy3sD+RLce+GaHkk9a30+eNN/ww4XmS+n8UdPIKH/swQmZ/3K/pcbxK4Lywy3SL2WYm
e7lJtNddRUr0IaBG3Knd8XzChYSt0oqRJHgOLq43l3UdlaXamxl6iMu8bq9hCXQ9ecHJB5SabI2o
AGb9K7yKzgdn6IUO8R8V/3Z9+u6VE2hRfrVmkE4riZJfFf6NvJiTVBGeFkIop/Pu/P4dFDK/FG24
/bDhVMThH70TcPUGUngxW5p3Mauk96M3+7VLax3zcXG3o38zq8vx2258R6IB+1qU3q2oOVh8JP4x
fvP6WxAvO5QmMk5XZZZPQeuSTHB+V6bLH0xR/N7d9grlioFOwC/ad6X5LNTk4e7j1/nYa9YJL7V7
oB0jIdPbepHFYrq3qaaSf0k6Fqf0kulOBXidv059abJfUjcnL/Qwed1/aUXh9KW5zcSqB4cIh03g
mAnevepLMyKjXFAzaPn9MUaW/XiI8+FBL3DvcDwLp8cZm/35LT+155DclLeLFB6RAasF2yUrMEJm
I985Pc/e8HAv3g+CxdeCml1jPJzkzISBKvh5oqdN3oKEUnCM/uNuh/EavDP0u0GoeG2YlSJltw9k
AKVSqMVGZdOu9M7mIMKbD1ASkg/TN7o0ohBXDdJ09e7Viu/rTXHY2UNQkm2XsFs987Gom1F6JiF7
vmxfRD+t1VyYA4ut80VaUvSbq5elUhDMRVaNNmdPinFbXU3RwqClQlh1+6YBsLyO7wWPYhcSvCu8
24ZxSGmMKSqZvjz99UG1g2da0ewDEzjDe1zfj9BO+tsNpk2yS9CQOXuXLOqDQsdvUAY4Xi4p7EX4
+jS+bGUHgBRi5DeJ2Gn/V3Hb2744H2vde4ZO7CteVAtHm92rkAjkHX3LKPvJLx9vWRwkmzZdnPy6
uGZQ1JPMr/98QRdx6M1iK0EHwN/eDvv9Udi2zqz0L1pBlRR9ubU3H/yPZ8H2Nus+OMkOcN4xV75W
xHsh7vHi7bXgl8P5fl3l+VFe5wP2IWqW1vRCsEvDnBVKavEWLWeehQ9xUgiXXQA5quQ8BSHg3e6A
XTApVCEC41AvernmLbsAzV+4WUZw8jLAaU3Q2hOf9vFirQ0kWjNwVjrzPEm0KQTlDQOM4hsBHH+E
WnE+hG4Yr6MMf/KNilAvci41o8fS+HleleX4xQpNES/VR8zhKvVL1gVtN+6vAWE+P8vYa8dF2wtE
wavWqqNJS4MWPnBBnmV1QgpSSU6zoJnOx/16b18bQVUm2ZaQ2IHZL1jhI2q7tYu5vF31XE9CdES6
FeVbvzSqRrj5mgGEGEQf/DAZ2NdC0BBs8eQBSygTm+4pGkvBvqj8dQwDxAt+h+pLI2AfEK/1sVm/
8O2dZIHrJoBWxTcCZCwb0L4Rzo1slAAAUaTyAYcnOR0JPzWl5l1ZztEJ8fhC9izzDU74hm5NhivF
DTXH13WCeiR78iGVploZadter+fdYYtvWM2eNEbwSzMzKwe9tIFIdvoTFIz1j/OCFeC2sQK0SQLx
yjLEWOf2n8SVD37h7XzbHoMpFZACJbspLx+K35qOAflBV75vL1dvSm9ncFPPz9P7CgE7B5NkQlxX
5X3mFaagMoMObl/PwptYxnSudGS2F8kTawUZSXCncI9q0hE0e/0StT3nZNTyPgJ6qjjzPgGx61BK
WiqbwzdCaITp8+2xcrvUKndmZj4IkiZ5WC/1XLfuVkRoofbu/FwB0U3H+N5Lr6oTvKq2CuVOTpDw
UZbxO+ZEKThCQcxF5dJaKa8w5ccreFXrmMtWB0gCtvaCn30RrjOLmpJDpDJ/e/UL1hKejoEoMh32
fL4LDpblfMglPUDwrpzgBiw9xxUAs5T4PmKS1J/D+I/79vhPL/JCyGXzZE9Xy7BB0RhvxTh9CntM
RWOKgOP8S96h69d4Y0ysvVLsWinHRL1xwY50AggzqS8p2unX6FEJuK5/pVpzfcnuIRIiAyGWeWvB
rkA3O2i6xpsUJdAGUVdBacAKakiXB0VLgxyU8Gn8usZDdky+sIxICWhUsy67RPoD8B/Yc97BFPFF
pE0Lm70ITlzZwXu9jFJ2aDH1vq0Kb4Lb1govx7yA1wMaAYgV9pbn39IJxjTnXAhavCupig9lIAQn
phkkWI7GEhW3jPrthjOkIX8YMFkJQaXQsKXHu2RFSUzNViB7UpdK2B3TMEY4yvvXC3QxjUch57Y4
OH/lQc5HIbzt4Jiz/OhvCD/R5lrpX7CNK4DoLtfx87WJ2srfnPg3ITbSzIsu8Kk1Wq8bODIc4yMG
Ma9cGBqlthJXfRUiPrRyou/89eTPpsq07Yc1qYvruAIGabuhRs3yWz9+GatMUN0LfmwC0ysEONoY
cMgIODRcO4NbDt3WpLvcsu5CpPKsZiv1pq1w5PEu+YUrLnXHsotyYYoqoO7tD52Ac3iBWsGkyloC
PnDfArCqBYh5EByX8LQVNlYJ7x+eboWnzQqS1XrtbzmkjQF4636wMwzVKkeR6npSCtOztEBk7Fdi
316v4jSkT82wN+F7XcV+ruRa9a2MS61SACQ3R5oRRddifH6G1l9faupxyRI2tei8QhDVKyT2hRgp
Qb9ZIQ9GIgb5hdpB+L4ZAMKaa36NSs6hntnPmoI39KySHjCCHmiYsqjl9VirV3vVr4mJZxirIkSk
OzRfoXZdderWSEynRIXzi96E/DAhdefJtMcCqVoz3NY1gg4vXZFaYsauuHIr6386x8T6ZMegQ50M
tw6SEzihtbJAaa5Ug5ZsSXESl3B5DNyqxE/a9L2oXj/ABlSWUWh17Hcl0te2g5C6XUldb61aV6e0
2vNyWsAGZ5ewnuDoCYSUCxeTLRTAKKnIjF6c2gXs5YwVV3IjxAZWjnuSm1qparHMF07Z7f1+JW6n
mRdawtFBOM/32/n5CTwOwaeicMhDMEvy+ZXEoxMUBRFUQVeQO4kVpv2azHbFhLGs0iSl1QhRmWqo
0Anba2vkvxCobo/HNXCBbiswTGmTqpn/ZoWhkHe61zlZwlTh+CrBuhd5Jo/Bw6py314NpWVX1zpJ
pDq1ImVL3SXEecevNSinZWoASuBLhWPdCKgluaQCu07lap9lWgrfU4H55wvh36lWCylRkcLNFNAR
gvyQOTo0hkgXcnd+P4wSRVgz6u9jZTwS/toJRbNETa+pWO6VlIgnAKbsS/RcZostZoQm6Fe5JHVY
A1nN/sn5GYE5uccD62CszuesgJWtkOUjxyOciWGqFLm+DTWiwDCsYSoRsERi5jq7Jm89O8kReKkF
mM3KGhqB3sjaV4YPL/OPNSvRFAiqM136nsGD4cvq7IrWdA+hN3aywf41+rF/TVYThZoGri6jTrBB
2ZC3zezk6DciIfyCumlKrXwE3Pp0lVbTpe5HYff/FN8OmolxIC1+YltqKMYVxcqvY0oNlcLrzE3E
fv6NA33xbWyp4RZfhCy9jxq6Ukes2ulp4QNVqXM3w8yTX63Y9jU/Oa7LEj7vSp/mf57ss2qEL3ns
fYWfMv3n//77X//yO0wciB3jOIBOE77i1Bc+2FxY4Zenv4+7qemc4o99ToHnnWXxJbwS+YPfluk9
HLtIzy/y54s/lGkF/jUsuQsk6wkrxIcdLxym16UjJQ8rxT9tSftaUj31cAy8SMwkE5sl7GGF37zx
SsfAn2RLm/En80U+QQ/89y8fTtv/G04kmT6h43/fttwS8WHLi7Qh7UHRUe3iaM/b7XwSxLcnve/x
Uqd9+/dxC+N2phfnr7Nr2pIizs7eCmdvuW3Hs/8tjDGZXoNfqOu6igjqTji/rjRMAB6eFJIWdl+b
0swJePqP5/336d0F3UoaxRIWKLMJSrgHpKkoaeczq4Hfxlv9QC0x/FB+bPridRQ07FyBaDOPC1b4
6fR+n28jvyPOdqUemNvT7vV8EXZy7lBncxrQPAlC+O7ethUJcoIE0RbCXVkD8g+T7qskzUMe7vk7
bJXJdd+QH9cP4/G4Qv2RCSyk8xqs8pft03ism0LXFttwL2+BEW6BLjXdfbSlghJVDSd4uBe/nr/W
F+lIw3KSWqFHaXlLbDtXEwQrCIItGeEo9oLoEg200OM/UfsvyKDTpnRz6HsL0m9Z6f/zYTzuid4R
3ACiwQldg7xBx2s+2/TcG0waXPDBjBpKrjengPmFOtKcmoQB9CY3wk0uTox5vABKcCZZc/rX8bZd
cYtpM/2FN0qUv+ALdVZxjgxdwQhWzDXcaVBvmBdH3erS0BWcImZ5ARxoSGmyWxQ06XlWg8LnNwPn
DNS/3JCey4vdjw8Pgt3WilN+8xVwwhXoK/6voH+MWRgwLXpxTvDievboUQnWr4Cm8teW/FEtKALS
bpj4HVQLCn6gbdZGclaI5Hru9ZeL8ELYE5+A5MG58xCuIpl7RrLzaFjeti9j/VUcHf5TUK3JJAvy
1TnD7WweXwlhtnXcvs63wwi3YzFtjPgm73QrteCbFIdMoFLSgkfb6xLuQlVCJ6iETtz8SSMJBs32
Kz0qSSe2i7DESuKoBbhlaLk4LVMPkpdJGuPjMQxFCymEJn1xygIs8P+7n2/jCkkwQynQQEkQNHRP
psKQwwyPNcJjxVbvJCQS8AHLKiNvDI/h2KTNHnTFqEhOGYnHFrAQ1YKt4AYoLiJZRkaaV8gtgWUX
MvcQXwmOWc9apSyoFsISPZTG8FFFILiWS4DsUYsIvrXuOaf2NxjvWtffbZvHB0stQk9CiFGHPEQx
Zc9SsiPKcNpsxiSETSR+Kc39pJskXF76bFGNK8GntgRfJGWHGJ0fTp/rV8F1bSUuER42y1GbD4GZ
E5yivugUodYSfrPvGg6MyRBdwXdpyTicsswrIwCTra2pLsFdWM6nNBSPFeJ4Mst1EYTnboagrtQg
YokkiBHcvqbn/Mf6w4bOr3GPcD55AyEQaFzp8PbnnYjgOc40Z95qJ3irrNhl4a/gMNGvT6UwZwzg
pXd3WjRWBLoSQPC2rQSfnQAkNqxnlCdRBD3vFnqe2MrDbY2G7omhkrdBOMXODbVIWLhBpunlG0SM
lRBv8K7qhAQJyTgSbqCzaIiTerqvSMr0LJZKHLdecNw6zl4sEkNWSAwNFZMnHKExxfnG8RoJHitV
+kMG3mYRj+AjWFNS/MTKC8EawUEX0PEf3t+PCQV1AnwxcI4iNfXC0Xes17s4OgEFpPrflY5OsJyG
WE4CBsWjE5AP58RUIL13gtUfehF+JKsIG9B2Zu27CBFb27uK16WkjLxhfbZ0h6WsUsPCyX+7rHHa
DQ/qn+dxesIm2p71eZcmTcgltvoDUJbgvXdD0fePuRVBLHW7Jq8loNE0bh8ewxYqS4I96VvOt/nT
4eI34Xz5vgKobapEDeFuWbdAZ9tyECsgQUug+DHRLnmWSlXcG2WE8K1tONMwMSwEe9R13Pb/+Xx5
q0uB7YtUi6gVBSiX92X+tr1sXy7b99c1d1lzuoBiKQJFwXUcyyNzjAWPvmzRlysILJfO6apbJyQ4
aGLGZMKbx1bCLqpWBHHoTW6EmywnqamdE1Ldw4Ky8nAXnLAXyyyfZpMMgqveOA7UIT6mkKgZmlKW
7iHdKWGxA+sy5Gcq+AvayCBhilaFoI9woDD+Y91lAaIhyo1jkAjJP8t6fTT0FcTSGTZn9O+/rjiK
Rq+9G0K2oyWAMRLZ2ocAVqBeNEVpiKiLgDXZhk0XC8jWUE7XR43eCxq955KllB0l5dSs5cLsOZcl
kBW1XpMUEvyAbpnoNGW6iRRhEOLswhHI8T3BR7cDd2GyJQSfsKV4SR7q/7SSN+tU8TQD12AQuAYD
d1/z7xc8QqfX6U/BiDQ83LWwA52QbFYlrCFcHyNcH8P5A7MQC/4YxYkK3sQiwy2o7m7gBDGpPQnk
sJza++P2uiLK0m2VLyZsg7Us6xV+nsZpgm9HWScF3guJ0wSd0DXcd+SpWSukZi0XLwZrfl3lV8yd
TR6dguxOC9g/rcTIWQ85jCNkPunB5Htaf9iYYjFJtCzCTXRsun+OjwT+HY20c7whcyEEH8C4ik/a
CaLcsJBjzvGQLIKuUH8kApR1K9k7AgDfK5YukevkQdDJxWqIYFAEb6RhgfN/90+swA2V5uIjGuEK
Lmg5xR3sgBLsgBLcKAFrdazjTt9XuOW95Uiz8eFWsD+L+ioJIBSSdb0tEb+jxyqAAtZUoPVOwBWb
HEnKiEgCj2SJ5j1sl2DsDaWX61IKWQBuTMt6KbmXJgn34vcp+iKRZ9qmyuYWbkSn2CzKr2tQeDk0
XUG80nlhCYEeCXYpkSnJoS8qE3JLKHgXtKwiyU2UcUGVmloOQgkZeGtlAH+SOoFrRuwB6arwUBEh
+IZtrTKqFUrqBl35/EFQbZr1Sn/5y+G6wpS6gS0HANjxbQ3LzXJ4ApU9QXAo9zS1IIiCI8TXVS9A
KN8wpHxjATFnOyeomkHVmD6CG20J427henof+H9czvf3NTilrWgtwR6bngXZS5GVoHxIDnqBc/wR
z3CFF92zcpxHyUIOzrGwWq7BhASOUxXLpwQ9YltTc0oFt852zRo9JgW4AkAhZHH7wYpMmEVJjCAG
g64UFrUCVkWbENjHjBPN5gowR8c6a1QVCSXjHZuEyYVIKktg+efL0kwJZG0y7aAfLrZAbDCt4hTy
OpzAdgN3Dx7jc8Hp1VVygSAQrVypRf1uIcYiZVpYtp++5K/n/ZoqqWHNrRT8k047Ltpa8py0kBCz
HAK4DFkFxoxi0/y5mhYUZN+vc9B7ofyQTQZloLSwo2ZtTkvi2CuWaJth8xIG0nG3LC/iE2CMhiW+
Z+XTgudpF5/xoCeskGWnNVj5z89pViEwVqyK+sv4Mp72K/zmruEch4k6JySBFEuhzVmMgsvQKpHx
X09jdcaypRoSea0tcpe2XnQlIMQUY7Rg4IXHlgHGo5MoyEjfV5hNwk01zpTuemTiCNtDgV37iFOv
AKkNm3qn5DpJNFmvKHcEBJTb9iKTYuFYCQqvb+XClPOKGLVbNsNxSeQklu4gOofpp4X4rlN6lWsr
8HwVT+nIdK3gjPCo84ODKaTiquUVSvBGrGWb92S0dcHo8CmPWY4ElcmnoJYxp1TeyHIdM6MlBM62
5baBXk4hLd7Viu+tUOTStZXSaytotG4V2iRdBm1L3dbQI92+r6lKVKI/Sf1igQzTs+RZ4hdLb8F2
YXi4TcJbdOwqlHEpFP51jvNg6AICCZuqecd3YpB4AQPbEupPx1VAkmnsGvhXuNidXeQDGdKeQIYn
mUgyZ7uUGhYMVctyPUoWT9D3wzowRLI5lgdDhLBgcKLNpuQmwa8c3NruNMKZklLKhX87e+cCqsyH
FpmiEuAk3Zf8+1CFLHibnSuhojEBI+x861iXWOprpirIeyfAHI3m1E8ewQimrO1KV3cPF1+sX2Nv
PLWATrCArtQ/iNSuCCw4xzIIs3yHoP3bYtQT/XrhjHUnUwe3a/m5XVPpodcLx660qKVW+NKqWH0X
oj6BtcEX7EwqXrjQ7bpWawLvk+a58vIEKnQCdMOb68x9FWzlIpwo8FYERNBWi/0Ej8doVUGnpcZ/
pKibDJuhDwuZJudW9UkS5G3ZMrIR8FgheDHN2lonIUnfNQ2He+X0HSGEsGzmKQPfhPDcDKU2LZFL
IlXntyURDm6BQMMYhpotFkAio1nCUXZ1BXW/aEhAKds57VxYQzWcqczxMuHcHAsYEgEU4OOhKMfR
NxDMZZsniE2xQE5yhlTpdwMRRsgvkyCnrDJ6gRJC2E7oUHcsSi18uHJrakQFS93VUuRCSyDTsmBH
5ihI7hFLbMnCK4m5TQk9bbFdsVCh2lv24CWgdel68zkbAYJsmzXgshQBVJo6EfBN6oSiPlBWKdVn
9mZNNYMQHjrLNr1bcpgFpkCbZzxIoPqXn9ZIpOLougT4kOrti6KBYYpEcdKVNI0S7qFdFi/w5bWC
HLSGo+wS3S2QdAb1gf7NUnkgqdte0K0y4y9YMr793qM7JJAFyrFjUA6SMVrQ3PpiXzFJhAwbdhKl
Ltyjjl0g20Gh+4llK0oyT17qIssSdrIVhGjCqA/wTiQz3bB9SH+6/gSTXFbYScc208lxQEEqh77G
IBVuhXUsdEZJzgKfbJGa5wYDCCuQD8Cha215BYHZT7jSyGnjuhMLQSqtWcu1Q94XVODw2KbGJ7UC
o3LRRY9qBeGxobGchn/USYKHrdt1BAvJz+9KDlMEZwRYiGfrQIyxZj6AW1sYKlVFdGzG8T8oL1Nq
DS8XqC4UixB2D0WGRwxXpOy+YQtcskhL2IUlkv7Yv07YQ2sWKYnH9gmC22mt+0jFnZAOWGba+OJz
4TQbth1Gxk8WWDaG3UtauSeVzbVsZzuhKGBo1Ko29xLMMbCd0gtHIYA2fWMqGdNOEKeGrZzMs+9C
FNewedP8Sgjo1bI/jGLqDgeh7pDVLTkDTuKqGw5FWVmhYokjvTCzSzaHkN5q9Ee8cSEsGKx42Umo
K1z0CsKZFpHa9nSak/U8GyNNphgqTKdWwHiHZh31V0hHuyI0GlJmArrYDav7YQkmY2ALzWlUIJyA
I8eIksn3wxNzMzLgQIRBEMuOLSPLhUFKUrFcVepRC2F3366a0iAW17BLELKHFCo2nDc8CbTAVRkM
i3ULctT3C/L3wIVT0kVkXfBc0UoFabrGtBJcN+ssn7yWMnSdyMRYqFVhoaaoTEKeQTDTQ/MByqBk
H5bVTY51vQQ/tukqRQhKoEpZHqXIW/YIKk1brijkl3WxgOO5r3POUICPVW3W0yCoD93WRo1JPf2U
FWnyC89Pat5kORCZRKQCQ2pgmyvnzp9wjIqf0iLYgL6vpctbYf+GYkVuuIAClkRBnHK9tVDC1TSr
+tRIc60WNWSFXilSO4nFhSUZ/nXTJXXL6p9UxywhAOojjGdBffVOZC8RH1nwShvDsjSEqoih6dnO
hYcva9h8gtkVLAZtGwjDT9kSHwnD4QdLZTknAfPQLcubE+xtTxNtpjrdUWD+9Q3b/XLKtEvNhNkq
9tzmCGGmLtaABsUhKKtBreJwCvGPZWlJGaIueF2anSy6zuBrt+gP9Nj/X6Dn9MMaMq/g8dFqoDzd
Th12AadYeq4943UKNRt9cbZhyAkJZqNjB9tmo2Kkvp19JXQVeoyZctVq8Halt+5XMfmFHI4zlT6t
rUAvENkggq5pbYX8p6TaVqNXmhYpF67YDGReri4cuO240K6kMaVQ2XKjYEtGV1iot2LgvmIFbUSn
lZhtYZFGifRMgkgJSWbXcYvkYKHQGd/061BPIZtT7lMZjKlgxXngIZcuweVephMtDykJMjqw9ZE0
1S3g131bEojY2UOg6RkWyKO2RNDjnanMNVFSP3NjKlVWTlBrfa2+SBpJYdhhNBmIJ/jgruUKm+t1
JKZ1FbxJGSH921bDZUEva82997p5itoNYvBB9IZQ9LBsfC5AoMK9590B6skIKbjerfImhQjKWpYj
k4GXQnVWo2o5SIFyadmeMDlLWKjYtLUZXr1AZlB9Zb6nVDyz9BH6MsFGuIWGH+EnFEz3fW02s9B/
xrRmbccMadc7y+WOS+6EEEn2bP0SIe0KNI5lRxh2vInURqUrwTkhmBMM8NBWkCeBCWI6u3Y4rOCa
K80hn3kySvBfnC4FcwH+ELr1NoZLm8wBuGD8NF/hvJJE5JZzzSyrxwXhc2y/59yFEi6CY2uM8k8R
xG8J4pbhGMGkdqTmBQtPmO5sUmBpaj2tpNaZpthgLDpwAppl2d5o2SRJwYa2PRda5mCqcIJtU1oi
vrzUZ2Ol/y1VuPScEM9hlAAk22bVt0vkVlcJxUiZuLBKv3qcpxQG9ZrlfWe4jABM9+0qVpjUyYKl
m2bwmkCs46ejZm2TJa/AVnhZ0lgTvu3RfAQC68SxHUoXWV0ptOhXDZkWWsQ5VekO2woVfDzBdlX5
mx4cX/slqLKhY5uhZZ601CmyilgJNtW6lhvGlGtCgX61XIKhN0sdIxTbd2LlJAhL+AikiDJgqxLc
N6xhuwvMMbeyM6TkjDpbGacl1f85lrmWZyUEDqNi53PntGipPS/bZzYzycJLLE6iMOlSAAcUS2Vc
5xLrtubI9EJqQLEUxiyiE4TIqgqsI+gQ03bcwxQQkCbssXwoWjYldajuudxIrgGErhZNz1Hcsz0U
ElQUUk0V6CEkcUJI4ipjqQdh5zTLfM2RYKFs1bAWINNAQsMiZzk/6qeVoyqcalelB4UVluWETOdF
Ie1hdM2rFcAN61g858+H8bj/bVwlx+266SOCIjSa88JycyCkKt2iyYlj3kJYwrA18MtiSGmmjDBr
UGrS0lbJdVKZD7kPZPJ1Mbkg+CSE6wYBl3nkNgogy7Bo71O+klL5meWr8H5awy6tdW23gkPQ6Yo/
KKR2jClCLKT1i+BL2WHtoFYBWi6P/c2ER4ht+c6My7p4QX5Vy70CLaEUQKaO7UQzo1xCKKb7Wt9S
AVKhoFB+e3JXTpo5xA5wzx1KIbLXNflthe8f2D6CK5ExO7DZnjw9ICXQG668ph7NGMuO78ljKiEg
ai33CY8Vf4JTrdl5q5lzIciyY5U5dS6Fw+D792eOgQBTGr5temYPhejctCzvShjXOzTdikaGUoVV
tVhUiOys0zykIKR5BraVApEZoY6pjISEvWqFvWrlZq4kQSSEAZ2rTpYWfAeemDEbDyGrZ6o11lJW
lRYC5u7rzMgW6oOUKQWwIaUnUBl6t2IkgXTYXc+RMFZ14ddU2GxhHPJ1FQ+81QMns7PFFHKTesFK
eMxCCACOtW1F1QvIp3FqFaVCag6QZBYg0PbB3AvMWONYb2np7wh1Ifycl5kWLjGSHTcPfT464QP4
sDGPXYXwV7Owb+7ySM207Qdai0od2wdXq4QVfDdaTJGDoLmdEzIZxtUMjlCfYNueH72nhdF7mkN/
cndLuP/Wih1/FwcgUGyGQfQ2CElQcDiajlsk94AlhdZwTvTKTgt2cFxrqnWD1bVrS13sKLAlQJq6
iIs/eaMipcGMXZeLE4DYfqj0XBWK4k1XywApgWVvWyXKDolfhSRUp1hDLo1i7Myafl4SKVV1Ylvg
BbVGWKhno5c//roGNbIVemMnHEGjRD2woq2GaWvZMCvNJtKlzrdLf0oQ366rOTIS+sIPT53NuLB5
RtVamEqejLYfkB+pxLdhE/KzIyygV3TwijQ0WfBpnamokEFQuytmIAhqk08nLlWIYMOW81se+8EK
2APfRTNXwUKw3Hfs5OsU8ksMk4EtVcx4RQK5xhTLW5+21/H5LDMxCowkeHT84n/xig/sD9f37W33
+uOXSmamnBY9nA638Kjgh5XNZ/bLUkJYF29y/riggnWx2Gvn3YbbGF5dgP+aQf5qwY3WxbkP+X4L
v7yIQ6LcpV+WvtjVf1lI2qhiGi/fb+HFl1M33MN+C6JSpj7Qh4UXb/pS7EofFo6rXM9JHxZ2vCkm
h9JhSdvVlTCe/LAEE6uKfXbSL0swYHH49GSW8PEftlf5u13prPOXF95AFXtApJcXzrpcPJv/svDi
qojJ42O/by8vY/3Li3OI89+XpK0IVeWPC0adTvZLgHh+RaXNMyWaU/7r0iV9xI/RrBy9XTkafGJ3
voz4l/9/a3/a5MiNpIvCv4htgT3io6Repu2VWjoqTc/MNRt7jUlGZnKKSbK5VFXK7Pz3iy0CDgTc
Eam5x+ZUl9QdIBbf/XH303k/Hk638Xp/strqik5Dd3coZchaObsX6Nr9+e12vx5OL27Uw+E+vmHv
4tYIg2XDGiAGd3+/2G08nw+3/Xg9fBn3z9fzG3ZFbh3tO5GFdXz6I6iNMWjr23g/7Ld3u6unx308
3aiVQluHeKqE5dlHPrNLTX99XA+YpHALsT4dDfC6u+Hr+Hb+Mu5eD8c9tZXQFjhtpb4CFlP2K3ho
ULzeZJGWr4wlc8Ird2mJlFCeLsHy3sEFC8fT7uxKD6jHZpzlV9vhjy2Jm9UeeBi3lAJv1cdmFPEZ
nhFfTDhaAj68XcJiW+c3XMcXS8rXd4zJ/FreagKv3aebvo3/emyP7q+YjPEX7UvM4gop7GJ3szuf
ng8vj6vfzG5rH+5+cbboeB/RvpV+T0zW7ql+3wQVhcLTBaO7A+3Ob3Yr40QNl/Pt4DYpiJsSuqtR
wXzOnX08ayt7j+1GUdOQv16Uqm5XligflrrdQtSbSd7l52KQjuwit93r+Lad7ou8ag3kWIp4zYc6
2dey4no33ijR0wHRk1R8PNF9/Ha3i92JnKc/FBO1R/cMcTvsO+LTTg05q4dPLcWdT4fd9mhFxRt1
n52WK3iAUy/SixptuNu3RE/tPYySANQQftte1uH+vhBSxCOIDpCVC0lz0WeboL4FBAUCaHUtZK+C
Edo1tPlaCP+6ZuwozQgeJfljFPMOFPOKGssElXQ5WgL3Ooni/9D6bXGwaRfb/fly93RCKCXWDRm7
Rck9EzmjiLxKYqVKpJhd8h5bwlLacwAbUYo9wEQWPAp0qv2re2lSmzJTkxae4g/jjbS6gAIFr1il
LU0oYgO3MMwi2Emqr6/n4+j+QvGLBgYOuIdc4AhK4ABeVVDqIgqcoGwuRO06q3fCibsNKABgcoma
0Ua9ThjhA8QwR9QAaU10Xa6QBiCL9+Pz1v6PZ6XUUfafUlUlOQnWb2/HL+P1RqTaPcWzqq9QvV3q
bjTcTQrQOsb/kL7uVLfCtKbkapjVCsw1Q8hnRcnn4rUFQXeUnDeydjORalz00forjBLtQOFAa9HS
WxTtiac1xdMyv5fCEkpvRAmorq9dbmlJcMqS4DVbBHVbOOW2gIvh2cXYzQQxEzny66t1eANLUURc
ipp0ulvO4JTs7ICdl6rIK4sYapHqPf+RQ/G6Xv06Hr0YH/eUIA/T4he+cpX2SH3S5fpgKBHAghJR
ZrWI0oTANJzXNlGaSJTPHcY4g7vktF7jhOTlQE6B2sSFuUXJum5AIj1hjevoNInnSGIRZliN6lFv
i3K2dYdEnur3wwSl9zUWpjmez58fl8t1fD58o1RkaC8HBMRQ304yDiki5rwaN6rToabosAjcxMj+
67j7vHvdXre7+3g9WdbcHg+/b6nxG54ETJVDc5N1VVis3Jao3jepeqH93bghioy0ogytSWVSoQwD
7FeHhbOEubRgGXmtFFOUcUuSbHqJ0THi51ESSEAtDpJSC46ntAtT/Wo3Q3Eq/qRXm0iaWofpXGWa
7FATL8wXRZ5Nqpp9DcLELgjuWOx6vnqea1kZvaBuPLnF1KaAOgeWSmE2UfQoDcf9++S9UMIQUA7I
CVYfS1D2bF+1Z6coDOVrAAVcGo/Qwyds4QBHWTiWuWNKRdJ0HuPgRXyCCqIpUzMfAGEBj4ukp35N
+oHyQ6XBfSQQ66GWGDgaEYT5B+opJHiKVBUUaPo2SSEqWgOCLZSCp9IoZXDRVBMxmkrE8Fqeq+63
UtQhqyprISUEpYFBhLiICN5A4JzgcV03UZaZP0pfKZQ0MuqSFHWpNQRKRcuV6bFdJBOA9Bq0qV0F
atVSlihQl4U5cluX0AjNEBYvixhplPBgQy0WABwpKrrJPhAZkVRkpDAfeNOApeK+ppoXoewj6tkl
X53KpILhuh+wMF1GwhQXGIVl5+ASVLBE9dXYJxoskZR5Lz8UUSD5ARXcwJOiDIHeEBnCaQHKCh5Y
zk8ij2XNWVgfSSWjI51enc2hjqSBjBB8bhVTWniMsvAYJjQzlUxpVNHXPMv6YQaKwVFFlGlmSq9y
1OvJTiOo06iaai7FLnUOzusZbWiy3e7b0357PJ/opE6vcK2YrDZKo4E4HAB5TXYz5c1ygadvFykD
isRkIbhLF39exfnXlGhjZNxp4bBRdM/k+ji7pGKMg64lyQk9QkXnBJ6HWF4VyQidqhkPjSA1pZmE
wdiiyEIxSoCamhNXT25QYs/0mKTIjEXKLx0GKiEwW85k1gj4VEXMPYtdUe8k5CqPiEJ4iMI403Wx
KSixyWpaenkZlEHVC+pCU4iI5EpdBfHgkW4KMSFFLfOUx+JIC7FDvBokm0zpe+AxOuBuzAJXExoU
3UteC96XGCcSq8AwcQU5pyMNTFZjPgRaQwm7TmK4iYpeoMIKrKvHSBZoK9IkQ4zeuEjUmOQKrIbY
K40xipVNPedUIxMqjSfr4CcMd0RSrlkXh6T0dgchPknsO1p1oj/z2agodFfHQBXeOYk1BKJShf5U
dWFJAZbqdlFdiVGZ8b7DWLHQqJTjOQyrHU9OYWhLypONWPhAmVYmV4stwWmodFxVM1U5gkyxg4cf
Mj+pYldRwq9DwwaZ5UF514NY7ftpCoYLRTnPrA8IiqDETV8NmNX5ksJdmWrQq74OaU91tTD7wp6i
3B1RP1KBmn6BkGkqKsk0nZ3M6IYyNzvzAcOekj5AaQI7fGmqUfK41/k9Y+beQMl0VrN9K+YehQHQ
bFXEluImIzCc09JLZSTevqsvFCXfHGK8kapXdLVMT8Pvoky+Oh5hGeFXVPhWrc7BqYFKmKJ3XWCM
qGQBwOqCRSCAcDYeKcVXZ6h6BoXKuEuN+XAg6U8FBXuYG9R+vk4rBED6yILXPHcMAkBBWIePgAlI
8PmAp1CXoSAK0A+zPMASRJE6FJIJRiRSMVOWdbJPaKnp5f5KQ9U6zA+BSW5KKEteCwzXVTqjGAy4
iW6wvKaEGVWLp0yN43ETrKfumWMJhUwrU9oPCDHQzxi3LilhVkJRSP4goV5FvhCB/pP3LHjN06og
4agciVF4ah5kbCizp+8/WNVBld0IxSgwy/K5qNIMIF89SWNxNgo+0Q8rCiw6yksSWCoVVuNRMWxY
Oakz07QiAan0gqri3arkSzpGuq9J0ikG9Lo97Y/WtpUUyJatQDGQ8XjVUfnlFBugnMWO1TBKS/qg
UBC9wcPB80kodJHSek0WjKxVk2iAHABTKMoYqOjGlJ6kLIdeYmCtivagjqIZdp9FZIJapHxYjRmL
VFiiq1YPVI1F6mY6tRK+SCkepWtSCFM8ZL2VwPzcTOBTGrVfl76gYj6sk6sR7opCFrOuFpVGMS+k
KaZrTBSkmcdO0kgTiRVSZEg/sgbY1IIq9bQg5bYNPRacAcxMFbAOHWZ1QZVFRXe0IcqZC01DmUla
rsL9UfmlsokCJ0CMZDrc1OAOdYpVFIJ4qFHstI4Tci5utUaf67LOBamnIEshOr5KB5Kxs6H/QIBp
oAJMPZVkfynRCxRsDBY2pcmKC36kyg1BPCUgPwlsCRWX0VXoThkspTJnQLuCR8oxwFTyQkMgr2/9
0kpuUoFJWY1zVhUjmYKrPvZcNEw2RukxeydTYpRY6CUWVsiSkVTqT/dERnRyDUhIQlW65TXLFP/X
cSTL+BxZus0Iy2KpQEm3oGpE4qk/ai2s7Gzh3FJWk9FUggqIWhrnxvIAQtjK7XI83LMGIXQSiNeM
yYWRTwWJy2hh3U8gzXyuqg7gxHIkt3YrymApSpMQsZJiZjm1U1coDQblgiluysAyCnsEiJ2nIv6q
X2EZkT2MTFVXlr4zVTrEh1pAaxETo/QsDF/6LmJUItl01GZkvhkCXEIF5qWmKk2SJKMsGdbVEbIL
kUGFjKDcUYuUB1iEkqmGN3pq5GYM5SeJQk3pWoqAylUYjUVaoPFB8i2aKLutRt/pjqOpMij/SCin
qHW0WSTsKLrvO1QKA/alLDGzvqDAUFXm3FAkAlKYVPyqRIlVK0aoPguQUJ1o45o1dDZllRmJ2UPZ
A1GxMNOI92ewLGqhrhqjmKDHmoIeV1GRVYlGYVZLBOBQhXJTLMPQkFrFq6LsVNh/xQlaLglpL6lC
yKFaUFl366n0mVbY0UCEgpJqva55vgsHgLqVnmMFqkWHM8omY9Uo9O785i+ELgKqGqfzo+7H3XEb
ECM3utHXgMFEYAaR7O2IAr+hVKQKI4HWLOFA0DSlqn15NbVWd7YpS0Lz2ovUSZ0KLHZdbT94FpMi
d9gkII9FvKxusiKG/oOdD6mknVCijrrGkuFUhh7YKM54E0UXRR87jYYt2XKwWw8ZaKCMOLR68lo2
oBkp11yvcRVItJ7M0YNFLCsllyhwW1/dRR1oQsV/FFpKj9EOldGUek36j8Ia8L4OxZgN5FrHArKd
K9nFLkVCNRUJLfxLAhspKb0NUvs+UKyr0XNKFuJRb6xPIkXKyuDi/bYi+SSHdXUi1ImEXN9bmYp4
wUBmkUyHioZKTfChpiDmfghkp7Z+df6cFJimGnPLw7kUhlILEmiKYf3IDrZmZQUNFW+DmeyewuhR
hnOnV2mmdXlpDlv8CLoNKglEAuj9Sha3iHqTHdzyKn8M0USFrkW15QFSBEOmptkK05GMosO2RQmD
BIrzqZ9nCiseA7ENyoiBmG3t/0DdaAoDpdXKAAdVUQG1Rx4fxWQ2WYtZ7a1RV/xkG+WVSGlSMRqz
DmpDWTKDavPPlIUl42EDlmbP2IcyzES12wfM85NEW22YCHoLUqFbIVYVvFNRMLBEGc+DGpBaAhQR
OVEi0hLby2U87ZseoxBotRlcgUQaU6GrlS0jZbeqAzRlyyp8MgKQQdRBYNBL86UMun0kad2vjy5S
aQptdA3/hHt3lAYVCtHHsUc+3gOFtDcEFivEWqBQjyCrWp5qz0KWFKkPtq8jwTRC1zKZJdSRwlsp
mTsUqmkRkdMhBB1WDBKUZBrRr0bGke3tdS1qVFHeFMvgXeBh8IrCUddrradQMVV+AZptAl1Q0a7U
AUwVH1wvYCOBytXmZIlPY0ySZEq5GrXlnUbKYO47HF+RbEsqWaPVipaYVCQfRCWLigbIeVRthWIf
jZtQ9C779Y2aKEBCCbgXdHqRenEcllDJt1COAGPtIAPJhUUxcenTJgOL0lVsnXVIpQWK4TntMCvp
ochqvTaG26UimvSoipePN/nk1fzDakRLB1N14K6r+QtKd/P+g8EuTjZDG9Y3DiLtbBjrSXWqwM6n
4puCU/HNZREL5Z1KtDNV5jNQWSpgggDoKt67iCIbRQxzmKOJ1MUOXb2IGLdmKIBwvd9VoSSoYDZU
vw7YyCVSkUwq3wFt35ylvqluPMZgOTRM8JC6hrULOkjcyKBXDzZrBZB5eTRZoxnK0Rs0Vs+ROXrU
9fYGa55QpHsp2u0MBkGBPXAoBB5D5/VgYSJKvWi+Io9OVdvVMXlFnowKVOm+Vk4yGc8UgdUn8JUA
CcoOYmZdeTrZXZTX41KYp0xhVmVHdbJaj4xmIDiyThRQlC8UJ0a5zRdNpkx4LU48p0yoEnclCTkE
2Y5KQDFWLduvBvHJyXh51TZvAZSpAveercGSUm69liukIgUlHYjE3sLWIetCq8P26qUt1LgRxj8q
3CjNrHQNbFQJEVJ4vY5jIwg/VBzWwbZWPcQ4IHAQcqpGNWxQ3xOVBpRIFn1KA0ZYN+nxV63cel6W
ynnrD3T9InHmvNdruv5TcQOpPui0UwpCqL7WVKVSvkldMxDBXs1iAxUopdCpD7WvoK1ms7qNmKL8
nE7VB/qANhiOSbcH2gfksnrJSBiCCtjU+8lP5ggFheWmPiusNCaoJ4JDbhcRqxXzdkRfvDEhiKma
R92bGnittK2odCYbsBe5rbN0NdOrOiqTvRWrvRdAdpkc89dXZ1JWjQZywJNeVe1MjtYZJF0gGe+C
kmqcBGjkZawURmPo1mE0SHFfj/ZVEX+k9hlqPFdvXUN1k2D9ukQCaXTXW7xPooNMCSP18PE2vmyP
jtbIIYPlAFVVQQRRBKar1iimf6md9ILqv1I4MRShCVZPjmAVpxQPyup82fx6KOtNV1M8swNDJQOV
Wh8hJ/scd1XYQX4Gqukd9LSFx7wPaJc4Si5zvQZCR/pj9e5XhIVFFRWIYlQ3hdjWVIc4nnebF5QR
QaY32ZpxRZStpnRXF0hYVIFyWsVQjSpU84NUoxpDjutZ4MbIuXnwpp25zwtQQHV3VBhm0Fi2MMWh
SEwyFFt9Nur4tnpQse7UaviFpPzgsqdCtTsq6baWSMpqnSmVPZW9qRPxUlhQNwKtDrGYxpIcF0oR
dHplCIgCEHdVD6HusVD1qp2sFXPXn5hCqQ4D/kCLnlxUbA2CO1J39tpMaxLJua4TAFkkgHV9WVIM
dTG8X9fuiBweaNZnyjXVa4UV11Jv8kBRr+r1xwplqJihrGbb66KcCvzUJ4U1Gr1S3p7osVBbhZop
qaOQnsVLGqLga6CaA5h79Vowah1F4dHXRL51CR/X1BQzss1GT2SOpjwl5c7CHFoqtM8nSlBzk3V1
ulc90kfdCKhdgKPZq+tQJGe6FU1xBDlWfVjfC586EQROJWsWZPrJRoaKyD+vyWJJNtS639dlHaXZ
WLWjGuYCUtCtocMmoBPiheJDITEfCgNUkuBjgVEOyFmSuLAOb4kwJ14oyhsYFbdYtPCiIimqmp+o
qX+y+VyHz5bI+itQp5LoSBRoc1IYrn5FPwIStQCQt97HrIM5qVSWESt8N3JOrDYfaohE5TLUsKa5
LtkcdGD1wsZyvAyEW5FzYjiVo76trsPoh/XztKlBEmX7KUHkwqgwjTSYPX5b7WRoho8IBn4bZf/o
oSZa6pYL2dnPfLCnMolxghNIBNo5hYxemW59/Q7Zlq//wGA/ykNWomZplkXIVAsW0WEtaUC2hkoZ
gaa5ICdcN0ColgV9tZH3IjtABZw4r6FWccAh9USSUay90G5k6zRZa9lVTkSxRuxt9VAUhkUvMWgM
WTdi1nTfp5qfS3JE1fLiybGQHQ4pASBCyls1aNwI0DRlG/XVCRkN24+SZEKtRkCTeYmi5nk52LSG
fyY1mFw9CklQE1cH8bGxEpTlLRkyOoEIq5IJNkV1M1tUCpDpHL1as1HmlQYpbgAYrAtNKs5khrpv
v4w0ULvhEsPGwRIRSjHKoV5hG59s2SaStM6GNU1JBYVzBaCwllIiQ0K6wwIWFUgGJSFZMX4SwQFQ
DYp4h059dG0ryTkbw+q2Qory80H8GVRX1cMelLQwRe1trZMv1YJCK0oMpoA8JRW6qsSas6FU5FGh
fbcKM5vqIsY63NG8rUjVywEZ91qDHZGNjAcCPj1FEij8tVnMX+prZ6E8Brx3dua4Uz6vLFBYVE9C
sitPFeNIOR2UdSzXD/6iwny61yuSaWT5i5H1Fue0FUrCNbrV7WyoJJ3uRc0+xmJ2lJzr1UfbT1BW
oK62PKasbKpMto4Br8BzqCYU6qPlMWTlrkCrQaCnT4GvdY+htyv6kYKBM/0Bj5iM3xFefoItUMEm
tRLqRsEMoP2h6DwDNSNdD3x1G06yRfoHx0lRHoPkHyVBSj6KnhqEuSzKo3amGGUVgKQrtQgUk2bZ
xg8Rk5RQYtRUoTk5QtE0M1iHogI7QLFqCcuVdESXshiKXmq5xbDS/pEAEOEtYqxpETnoWHfrUBWk
8VFiyjnqRFGuAh9a7SBWRJRFvcin1qyfDJwWCVuzJkxAjn3hDdjUyjlQrA4wR+Q8Zc6oagisbu6R
feR1LexYl9RU/nRg9fZQU4piSU2kC6wwvQpdYLJLccdqTj0uWamm8rKv2dapq0aWf6ciMcUlqTpG
+PAchBFpfPaUll4EdchCQ5XDu9q195RGU2p1RE1RgfmuMPXqcVCKJtXQE1Pk1nTflmxVyTEZGYQN
bfO2v5i9QAFA8CR6oXooV7FD69QrVitVjkDX3q4GrjGBlDXg3QAorCyXVDQ+GbAUVnwQ+MixZEZT
GWRF5SIn4iMjJJwadr3GcNJMEa1KP4Te4Apt/5o1VaHSEkKsn+FMjl/QfGWbUsqV1GbV9CiK/Idu
VRiOMktZ1xG5GsjQlAXH1PqWTSRwk/frawKpY2k4U0JnUaSsQSFl4dRLFFJM3avI43nXyn/wbmVX
W3KKsEKhvhm5UOnZXq0e30kWnRuS7NZPsGd8IHoCQO+B8qvgDM+hpUyonAVbGSCiWJL13TofmHSk
tVw/f4TMC3ea0o9gNxQMWvcfa05BsTcOvMCMESpAKBQGoStkFyXMQXigyAzB5BtFOHhfe6irKc2k
2YeumJNVzKtGCpLZRIPkI5cOOSWCBSMGwE55DQqHh9W8YrXmZP3SSr4kMSlqTZdHKggt+ypDYoqS
avNCjz8GrE0pFZ0LYFrQULnRjiGlZmTUjkItMkGWs8YVX1bnShTVCy0V1lMWG9PUXFhAQ2SQVNZi
dxgFUCTd91j2AAouyn5Uqpb4qcdeqNDb0K1G9UuqdhKkhH2rTEO1lKeieJ1YMwOMpGg9rCmWp4Cc
SnQfm0RKBbGNWuVTkuXZfdVSwvdDEZ/p13WrJ+doAB6fOiHZ/+eaK0xfHMcv45H5v+6sve7/8rr7
/88ayHmgh9N+/Hazemm8Xu3rWFHg/u35+dnu5OVq/fXx+idkC31Rkj31dih+Ia1qqdCati93h+x0
/4wuXI9C2YXdFYP25AJdoT54za5QOjGWEP1Sp8fx+Cf08btq/63lXbp13d/eDvv9cUR3Z3hNkcXd
OeiDPaWLvPi/E7saiGUyanTSBFtnUBq57ZRemcj86d2+opPU291uvN2m7aJLd/XuH2GHUJrgh2S6
FjOLS0ws/HzdvoTA8H78sj0+8MPCXpEJ0lC7s/kf8IuTtfYIbi17Q3u3xtv28vVqFe20T8tk6Gqy
2q2xtjP6hKrqMFdIH11hkDV8X1whNqF2f3XHRBfRPUKc010cTj5iPnPQ+G03Xryh48VOJDmUh4bq
GKGSJYOwiMKHljkMYfHi0A3y6hCCh0X6mQGOH5DX0HsFdVkp7f/xcB/fcMriyKYKcapxcVoNh8YV
wnuVrIiuxbGLTuImo3ZcuKhaV/71FNZk8H7A9FBGY+4NWoTRm55QSFASno/hMU7n0/jNylbiKlnH
OcIEbtV4n5n4uOGUi/Frdta4U/dXSzX4aWUNxxL35SIVYVuE1Cf7cDYe9nJgOCVXcaieaArPOCYr
KMOgH6pg35zdr+czedi+yFZEe3vJnhw/lKA1+OH0uCUaoJQQE4TCBnvx/3iyNsD9jC+mBKKJZsqM
MRF8O4aQXBm4Er0b0dW8GbuEs7MtKd6sTryfnRVzfp7MHJwuxYAIwvhpcB7XyS/OEFKczCpvm89G
s93e2+X+3jAJFcLFbku3y7g7PB/GPS2qZE8YECkF37AqDWZVQvV1HS2LnSgWGySrTRiLJ3rd3mZy
vOEap8fstElsd5J48m6FlRcO4rZEPrnArrakZ4nTMycOAzgUv1BDkAhYQOHiRiO6bIVnuTs/LPGM
L1bEfsFJUFVbF8ZDrnr0oQ4+jMd8Plxvd/Kaeq4Q0R5jsOevJ3vOiRsoCu4xmVFEmwhtSKn5FXeh
esSgn+ovwi5mS5LhBFztigU1DaKZ8SWZROhxynR7nX4av7Ydsk5iMsfdk4PSJENod75YSYi7L4xQ
hOnK1zCcGlbGIuwZ/Ure7iMouyc8FacegjA6bq0GIdwCqyx6xLV2t2RF2pfD+XG7HZ6Oh9MLaQZJ
Rsgk4DuRCkNTbJLx/PP2eCO8V0GcytrU9zUnKsdjmbrl/3gK5Sq0Qu2rfVIWtOTVO349HW3j2Ue/
HkZrexyPK6x9rtZY+ymgRRr7jDbzavEjnIV7IqZlVwIPiAtcNGS00NgtJhngWDo1D26r+G0T8+4P
z8+TWiAkeo+Il3hT2/1+ncRjRNDIIa6aim6ol67XlqC1XM52Scq5Q4zPz6508kvDSebVKh/KB7Xq
ZdzfJgOZDPAYvc61eRnbwS3VIRSGWkBg0yuD6woJri8Ib4UrxjreEc5GsIEVYQM3YjZxP15xWc5s
0y0XGJsDFj2d78/WXNxTDmvZvIlhFjWeKxBU5A/6O+1jGYlI+lJI25XoQGI5YEB/LACC2+65sE73
hcU/vr3hPN91hCsRtuK8bJ/Yx5meN+OBC/VxOr9trUzCbcqOiD/VkgYktxtGpCCmA1IrWPaTmE8N
6H19mAYAiUGZJxEb/nq4v1qFQtOcRF0esOrLmohzHSwaCQPienCTstobZhFBpNN2jOJsKEMjP7Vs
VLuiQaJJqOBPNtRKuc+J6Au4ug/FiZkiKBgsukL32cUE4VlD9AT+uFgMw0epxrsnU4I2DPGsuY1I
myxYpix7zDkAh0cresLtLEMF+G56hLSKuAweGmKr0hXAEnkaXw4nwpLuYbY0FTjiGf7mgoqvuXLI
P7OPNQWNAhvh/NN/bMuZCYnvWxJO5UukWJzg69q8Elb/gBMxKI7EYkrypfOeBolOTL8f9Hj04nEf
V9QKNCtGVCN/aoiom4/geBl9JZbQCgu3ZN5fFvDCFRklaoLZzAitb2jPeDU2gBfxUN3S98G7bah7
UWsMHjMjkAXXcZ71EhrHxbyElwZR1Dv8pHVvRcaYFPq8JwAgkFBpk1CtsQOAlCHiJ4oyllyAgg5U
C02EF+c0kkfY/j5ez0Q4UBCWBxBSa2KUcm2iA88yCGo7k9XddMksE2KWZD1lt322jxdkHk5DrRoO
+9fQ5Gt/xx+uM0RUfzogyRn2cJq0xUBtC25NUYmOLDy9JudbnwdEBLtXqboBUwvJR2wFFhkGgllt
uTezVnolA630NgbFVsQxT4+3J8vWz3QGSOgGUGEd6KpXCC+FzGcjnd+LgbCiUiCcQG/0RI4A4F1o
fVLO/ayhNhYhh4aB2A/rcqITSXlLmba9O4K102URqBBsS/NFtcNrrDqfMtoIvjGe+4tdhgg9yu6D
bkkLPWsIUzPYZIYwUigmdb7ethkwlwheJzdzZo3iYi+38fiMqxNOBPFnDW6fq6G/NaFPlngSYiFZ
a7hXyJ2ZAq/b0wuBeOBI6hk6TkRw0KAoUgSudY4l6zjcCkfihZVu0JAmrHtUpkZK+kAGdRiwHNrH
0LK45Bx0bSzlyozFOtCGlg3s61rYZc9rfRsKw4iO06H5zY9iQ4kblSv8TEhK91e7cMNspsIMOXzL
7tzyHW5dygFR1flrTNeJP4ZBhFMJ4uO4EtGEyxUEtibYDAsZlW5qsNLOj/v5+cnpNQrG1xN45nXR
5V52mJScTyUIAh2Q4E3+PKtR1X2OuBW8lfGgwXu8Vtu2PhG7vRJ2jSIykQAssgLFALtAiBIbeGtG
5aT+GBKdlOAd5oYX4VvCuMUj/1ExrYVpWQLH4hOLYhI6z42J0cz8u79eR0IWS96QxTVzmwYKDAU6
qxRK29vtvDtsfeylCaHgiIlbV+O4Cu9a0a8szoBLS6qqy4dAQ91uC3aoxUcxCmX9X1vjM6qxWstk
cVfyjLMDiQQq4xJ0xgrkqXPLeJmnxi1RQQQ25sg0DU3TEsHITDjMVZbnIFitQd6qJMrKHGR1BEqD
Y+9WSh0bXvLQEVld4L/TsdcGBj9YRjOj0bGAThBOUw3fRVtwrKvPAitFpiUXQmBShQEgwdoooZGE
3ZRk91fCo5SCqMOFLGjwkI9aA6Ss0upKr8MQxYoJDetRbA04rFmz1SQkG2EKpQm9Ai/PMlXLvBsG
1QyAxr/RKNJubUENkctssB8q9nGNRxWtzKKV2FGH7Kga3Nxtb+NtPLkOOQRZ9brW2AYFAEf7t1ED
OCCp6WXmAN9Xj8gGpOwVJ8+OEA8eLnR+214/Py6EeJBrAnskCrLN3prAVkCCXRtUH/TKdMfcGWAN
wKbsV9pTaM0GVIzVum9XWBQv1xWSCJMH17QnfAeJIE/LnBLhWTVqOmr2gw9vbI+0umZsXQKAJIEe
kxfR+7S7a8Idin2oj1u+uOE7rMAKrtRqgxhaZqsDU+zOl3fH97jlSrFhoChOkHRP2BEUN/SiAfWa
o/U00ItKcQLffI0mlgON3J8gvq18JDetWiXvS5zO7bcpWrT3/x36wPj2Lzxv/2JF7neTYfyPT6yr
LmqtPuVjsNxLy9x6qbkqJyRl5xbysPuwUI7pR2rPyLVU2lTijMBU4FhINNGvkI4FVHBY4c+Re3+z
sgMpCPVLyLSJRbHTMtIWo6PEofq0nsKg8FGiOLFGrGTylZoBJOquvZCMN1WUhVTSJORKLG0rUXp+
54g+8qcS+X3rVffN8fWGnIhc3yTYNenffvvpx9+2T8fxU5j29ZfA1xw9YOwwDqgq3NW80K/nr3GR
bsAXYYm4vdTr5kWmS2IG+1qDSwKRUPfxz0//Y88x/T5K1gFsEK8lKUW3wl/tnTb3HzC9gF5M+t61
mJsWUPgCPXb++C0TKF+HXHf89eTGw8vDKUzrxNGg0wr4ZY1Sk5EK++Fp1/ir9V2X/7BMr+bNhdsP
5+MxUGGHbmEAnAqkItwCxy+uG/ItiCXVCfzihpzqVJVmUJoL2h3ohkS1f3/bvsw0g75cwKPEBVLv
PLfA99bLm75Hr05DsuHZA3x32r2er9MF4tpgMDnZY4w34Iync02bKOi7y+U4zivgAnboMTKqyDHW
E3JMYTycXQexlV7W9OtCCuD0KMGLmOxFJzmM3qRhHCPH+K1C39EAUgSVW4kVm7QUqoSA9o0j3NwL
MFTqxd6qpABBjbQwt7TKvDUFJvCHV2ATaTRitgmUbMzAaqbivIsfxuNxWgUVhTHouTBeaqtwYhWo
xZLj6QXCef/eJD/Ne+w1oETDJbrsarYOuMgeJ1+Dku/3j/s9kSC+++LXgQ4Pd3ieH4LjV6h1bRFP
x0LidAxtoGEmoa2XGx1hO0Gjtc+oZ2Ja/MagzVHlHYn+sOESE9wzyeNaH+idguRzqa9xqS8yOSc6
5LFx3SV0jdT8Oymc1bk2GJWVtirxaJ3JL17Ax9b4d9CrrD42buIZoKsLPflv49Y1tW0rF61QdW+9
kel73N5hLBeTCxNVo5LBQBGb//ZsaDHc0DIYof82fruDzROahkEfQadhUe7VeUcoKInd+8RkOJ9w
VXMq/E9KQ9Aow+TYT+d9kzwHiboyQAkQty0Epg0hmUicTHjNlggXTXCmQCVh+cj4a4V5A1WLOLcm
cSIHTkkh2yb9i/586EGNmwLNq7eCxdSsKO8SuAbWTYN8AFtA5LoQuBupUT6D+xfE/oc1bjTDXSLZ
MCBwG8p0qCn5aTwmrYRfXkwaVx/w77e/u0ROm/sg9SvUBMO5j6M0lLkQuA0GJW3ug8zWD+5RQhGP
+PO4ihqGmlrMbArcIIGuk86CSIV+w4lHd1gcqukDmE5jPz9TPR67YX3tzYKcJySeMthLZf4/fmAQ
Oy2sqIzi8ahT7Ji4UG9nb8YRJhDvdOutcTnZQyGVHxxqGJxHuiJu0SPn1sS5dW6vB3vETRZ5PtPG
X29alIILeDPIpruL2/sDx2yoQkNSNqiWWJDj335tU5xSmHwvuBRXMhr1WvIoi8KjLD0a7c2CFbj7
ATIpRZil9LZxxz9Cs6sn+b59lZqZ3MpTkPMIqdH1GOdBJU1QcKcNZtLmipIINMDNp6Br2Dxhn3Gg
YL0Dl+jn5x8Pt3s7zCQ1Zt/kjiNu4IlqyDIIa0Lg4ZQ/KReFK5ce+/bPaYIr6vxozByvRbmIDItC
r24RqCKIR6icbAP5PfnLp/I7Q+HDFY73D9uMdYkNgMhFEe8vbDSciJjAwmSTH46/ZV3XwxAX/i30
TmTdNMONjA6NzWVBF9w6H4B95EFdWdiC8Jx7tsokxa1KEJYE4jbSDKGrBtm4L8IL7YvkikKuC7fk
VU9FXFboygEj1IWSITwqbrDL//PhS1vLwPRK7lXnsp4wEZnCfDL//J9W5Gj6It4HFC7I8Sk8spur
GyBA/56RIGF1DDXah2Ec3LEEOYq66B9wn6iSbk9anhNa3uS5jZ5MahEREYE6GXNqeMB1j8JSw+nZ
iEiSKiJJHA3IU9YKSn7Qocb1PQjCeUs/bGJrrWVceliZpxvJtB438qGJnWvsPDxOhPB6THhNeh5P
5XWtjILGvWCpMUrPbMuBCABVzaSoYzgRne3X/DInYjdDwaWYVUs4hQy1kLLoG65hO45lJJvf6qFI
PNF2HnGVcsCI58fD6XPbOuIoEeQOGo5ZGtAA9szveNB8KCAlsk6DhMIy7Z/HbZWO5YpClh8bXFHA
AFQ9NIDb5z3jaFJtgYbB4789x7zDNWAaLSX29p9218NlhYMGnq+WyE4JNiIOy3jX4COB5+M5Q/0D
EFXDCTD0MlnwT3AQCY2tULZZvp/B3081pHePn9ww7O2hpsStLG6w+BLYOq7tpcDs5Ux64lCgrpq8
ibYSgSFhrbjvgKdsILwyty7WsJuWqHldE9oE9kgVudmFSzrgEtMULjmH7hWhKAY0YfLj+DKeVqQa
OYo3KcKBuFsLjaXc0Pr7yoQHTOxyVGFQer/nDZ+e4T9vBjRh+PeV7rFBsRh5OJswu3AcY4rq4kBE
1WNZR5gxxkNUgmMBWcBEOABVoTjQWVXg0pqjGMjMXCBeHwCPChEwR+dwD8ko7OJzhYnbjMDuK5Mh
GQiTAEA2k6Y4cqlnhsxZ5xKMyovwalw6AKeIcLYsHN2Ib9/e/ho6GpFJqEKAgVAu4dvxMsVKA0aJ
I4sc+F6GZoF/2xH+LZoSyiELOO6tQxVvmRciMJAAdFKTooUmI4J2SpAIq4KgCPXEC3j1Ivon8FQZ
5zVnyjv9VGpPYDHqSQnjv9ijUqS0ewkrgBfmd12VCUNA0wSGKc+pCa+l6CRq/nIKyDtgSiz/YVwN
dGigZ2lAK9yAFvkVVlxwPDHNBApfOYzH/apQJx8a0UKDR46U/IAwpsBuEBqaQ/X+z+N8H1e4cQKD
sZRoLEKmAIfEAXuErltmRJ4RcuSQRRBnyYpHwvqqagOqhcqyon50HsPD9brqsBUydwgnxgEt6oEL
EKb1ILFAUKGeqHSbWu3PE+TIGZmzBqhbYhHGsADfZKfhRWraoOmg7DV63Dk1WC7qt8N9TdqdGYma
ipmZTySDOjRxCeF1uLEsFHYL/74q/W4PobFD5HyBRzhwGQeLlgjcRF8z+mBSEI+x9rrh6Gk8uqIY
GZeE6XPC2ZAdlsmCwVmcDAXH2LEZGTadwqwLd/N/PZ/uK+CJHcoGxS0IwuZVEkU4j/e2tTqIAbNy
SqFEGKqcY27A31dWaxnU783QLPg5ZI4BAg4EsHVw5xOS5JB9DsQBoWGkWBftxYFUQEcBmy2GngjL
YGDrnB488gbi9KBAe5mlEDiMTBMYJsJ9ZEVyziAQJNzSBdYZEOPBxCZ+WKzLkRFhokFhkRboJeIb
Z1XU59N5/066VT3mWk4WMS6zFFpqNKev8WyGqlpQ8YWJuAJAPFQBhtATwZm7Z5jtCk0OTsCU0gLu
GtQyMIX74bqvpiIDjRFHF6gTlhmduIkBOTs3EHLOxtMQHe1JA7OVyAGqAdMwOfwHF21aYCtk2gF3
BKXE0hK5qUSAHYePuIME+A6iJnP4TY6Yxe0OY+jaSlCfSlg/CrV+FjYUkekXfQvnj+NxOrSMDspQ
SQBqOo3J0JkrCVRahwXHcrLE4xuaY0ogc2TwnE3XYSmrf7NfrKiyqCLnIZIKv30+NHAteKDaFHjp
aqaOEbpA4vWiBGAZRGfBlKjIOX+7nh+XNhvrAfPayvgs4f1qUdNl+/OO0rzDgLnMtVgsYSsLgTnw
cPt4ULHAEBKlC0RsEyDBXA9YgfTLwDOFvcQeAhRWEuKYY2myXLXhzXeGoYVMwdXigFY9ZIkuol7B
oMjpHCFFRINgDEZm7JBb3fgV9HkTK6JdAgkCV7Qbel5TvwErUVL5VHReCFYcBOZ6zOASnAZZR9ZY
wvMTcVHBGn1Cehzkp/XaQAZhKHZSNZKOEsfB86JuLUmTH7dPYxsVPTAUWj2nbHHL2HCi7VAm0nEl
CpD8YAOh2wmBESpTWol9ftlao7LdpmpAmx2txEEDS7DAQecMbHAZ1mE4xcxDwIFuQ09yQGHVEkqp
DF9UfEOieVNHilMQkibCGF0r18MkkShC48E5/AanBrwUZmFOEx1PRBXDBNIkREgCr3iH4Uw8GAzl
mKZax1H957hZ24GH6D/QlTUGrGYcEKE8Qb9F0kiEZ6N6bBGI4MONXJykJqGMqwWOQtlyHxF/TKOb
ZW54aAlmR0ytuQjuEWq8C1kmVolQDdrJrYyME3UGvKEQFa4QBVpqlEtlvBFbjzaOWOVfaNZMm+M+
cQ8ANS4/ITAMH+FUmlbbCjwlMRSUU29ahUfxRdU9i2YgAVIG5djFqedAAM6poN7B+zLLxoPEY2ne
6NjIcD/CDFWUbcBpEU1pFMP7YhHxxMJMxKJouLWg0lndX5Wspopwpw2yVu7A504Pka1iXSNqMeDo
0B7txpGZukQQGK03zXM0uK0K4YF5yvCn8fRofy90o8Fmj4fvtVoTrSKgqaWvZRDRgqMgIAgllZzH
JABhq5fFQItjaxxVjifWmmatHoZVNViEFWG6hiolsIQ9mlmdaB23IIxu9h7CQdAcxR/m6AjCkO04
Fl2efx/PW8D+w3ndT3bthE9uxGprnEjRSRTiAS1qvIhCCBpF12SYwaDJ+UxkES2QTKO8XuECQygy
Pg/MaIIQlF4bY6F6WQn0GCXIgPBNmMECp0WFBE6ZGm9NXdRf42sotLsSdCxwC5trzOKYbR08+Nuj
fVp//PsKalJ5yBHYK1QBNS+wh0j2DQcfDrrlTDGcesygV/VYoWKcHcPiVDnOAH810a+kYCr0X2/n
l0U7cV2G1o9niAWCCaE+KpLoUP8TIBejSTw6jA4Q+WQ5YFGv2T/CjRhuGgYkw8MbfSdb9dx4zkya
Bt6NwHrgfY3zuhQcYDOghuPP65q9DKZDgTKKcDq0+kBHcKKfMlNFZdZQDyzgB+hNI+HT466D6dCu
ckT5Nwfmeph+s7SCcGJjcp3MIbqHKtRPpEp5eIfFH6CCwqlVdJi1XtoNhO2lBWl8FHRDhAYUwxrU
TRYQrjmExgxReBO4tuXDuqaAhCXboan2XHfiXmuJvCJyTITjLdF8bU6NeKRE0D142t0Uur5HkwxH
gPEkmqCYVbBvyhJlogH67XFXVKOZ+1yBEl0m0wG8c6JBfO20wvYUKGIlvwCCMdmAgjeI6hEuWMuC
w+u5YAGIrmVYGU41fb2rpi8/I7D1fYGMX5oJeE615/2a3r3U8IBBrAk8UMCsHm3An6qQ8dQkYJQC
W5AVvxFit1tVckOEoUFus4jK/rRdAfSB5RWVVn3TCQhpU8+NBu3ZE9qzcM+WjeVwGWn6vsYlsWUP
1SKpFWbCcVVGrKI1QbglHV+Zv6WaY7HqdLYQ1CZMLIkatp/u78dxTVc3NMpTJpyIZB8je08Ak4dg
es0atfeEpTF0a4IKePmCqIb8Yr+PgYjMirU1KFTZvyiwqIDVBFHnKtEm17lTg2ftjWj4BAYHUCo6
OFxgJwjPRkrS1AWhAUJh4a1om6LOsFajG41LLNmTqIEV/KcHou01IWhBMMQHVxgqdYi75+uQ5bh5
IdH2xRkQEk+q9ZqOsgIOIpQVRAzkZmkGRcYjbABK7VSnqOIxcUaSspGYUjgjiaEW1YoEQAFeUARz
MnGIMKzGsvQzQgKP5plulXVBUP3wkXoCIqvLAE7Fp751NeWOm3pCY8o7cwko35B3KzuR42E5vbpv
BlFaUQ4UQiZ24OmWTpKNkQuMNtE8QtCY2GIhQj4JWWvbGTOmVB8uvHEapc65WQV+Iab1DujEmrJZ
AWHOGt4YAqfxvg2w1CcVYgZbgji5alkCOObG1OeEhJ8k6hkkmtTIzRc8wQg7ddLlWYQkgkGRqu8g
8ULsulcf4qKaOHlrsM+Ax9HLKW1I5SVhbQ7tFmP4W/conWRl+1TvAbRN1S/XcQWEhKEtoNdg43oh
Go0xcWVjmET79QvCUlOc7AsGc8CElhFyXdN13Egph3lh7eGI/G8BFZPVyydmKjGSYYuoNuEtS4NO
UJOElNO0rw9cDUInsaqujiA94juYgVStPtoU1Ft0GHC+NBYIHaM52WQLuA/ETspJgJo8ElHHItAe
N6XaJCRL2VgddSSp+lSuMHVQ9l0iwswdHiMmFCKImwo9+yDRESBiyyyvwFmaC0TgY2gN7sSNeFPC
0hahPjzEaxjeqhL6jbjF3KOiJFsAfyQzkGXEK1IBPVqbn1uLRBGeWlcajhdD46jGWhSGCKAIdAB3
dp84drkXKNET3WZ5vQEFJF487NjTEhXGDohnFAKLO2aZdWLse18LPoCqFcIUBOkZjw2qY+zwcgG8
4AT2SyVm16I9b+Hv4y4jbDGXwggxYk/1Yxtacge3QZn4SKdjQusoXosdBCuCcC7VgIVOEoiMQFFr
MmJY6ExCU4HIhZ+z2qNmAOGpa90KuuMZ7b7Hev7keHAqvd+RsLB2t+quPcYOF+F9x1stXQjW0X1j
LofGU7rQJUBGoeDRN2DHF6nBKWqP/3A58m7Z3BuPdZt+9RQhAr4GQSH50XOd1+GIDtN6NU4QbdVY
CrYZoaZEy2k2uJ2kNOb/OQXzct1eXlfAt6rd7vYO+EG2Xegx0OLC9yTeTAyYsZUDeQg+7VDwSl5i
Sqg6GtQOCjQJx5HrBv7R4NEePEFZs7UI30uyFroCNxkMhKHm/VRhwBtHZ4geS5XkvYBwm1MpFNsA
TUU8BtOj4IisJSwRBEInG89CH4+gDQbD9+VxR5wSDT4fBV4hTocDPvcyS6AQtkvZdE5Xi9GIUqoC
4mIQliYwNp2sjQ1deFCEUOhlCxSMg9n6avg4hmEIi2dAJQDkH7w6SKKOZ271EJ0T0PLunANxq1vx
dYMecPfZdE0DBEdbaLTUHlqduOXECrwD0o8Yb4jWFegmWhITbohE5z3kgEAi9cw40XeSakU4oLkD
oucXVxLFoVMxIq5qSebQLAj0EMSLukXDzDa4wK3bax6CSDxNr+jkDrBcCAkj+fpO7gT4f6DxTQBD
TFCKLMZrLLUWfh+m16tAlUQRT4/qnJlRcE+J4xIHdpDENV5X7WsQyJ0AOai+1dsHpzs8NpI1ySLq
+SGqKE/EZihO3NIpc22LO+9xQ08PK2Zg4UJarvSz8PQqiA0U2Z4mtZl6qVAolyHgjPhP/rwqvThI
tbbBHYUpQdMaa7qtaqnWxNRw7QbTBwqvFCByhXVhASKSRHSrQ20yaFgSUKgOi441xbXpUJR8dnLC
Ux0+4qMR6ASmTEPh4XlGIzg9bBYESgjzmveYn/Lnw9We43x9X1HyUYX/B7FLhDs0x4KUkISJaWyq
5qsDAqTmDbMPzESiUpxiFTURmXtWAqIqdbd4mHpomkx4qE214KwDLnrx3oqZdY1HqMu5o0jtAt5Y
cNCNACVeMWmEXJPXI4pse7RiLA80EVNnOeZaL21GXIr3EkNbgCax+CA7mJsQWdH4wuQkcluq2f0D
b8PVl7GyoVaCQkQY5Jr+3Zwot686ZyFUS4A8ygax4DNqzA5HM+Gl5UBkUXWH9SxZ6ZdLg6U01xCd
lv1aLD0h9ZjEWvVmXTeIZoBdy+rFjfZ1kTHKITf9mjGM1EwQPEQ0Jxhw688MjYwans0yDJ1FMUdl
CFXft3B9+K57iH93qVBTr2Mgrl3TYMwVCDejUZ9BEil03a1pU0NQa49FQuckIJ5OMqiNkcXC8XA8
PvAVihyc41l1Tl+QdsSlcbkWCUcYWAzt354Vn1HNk1nNWYj4bkJYM0MjP85ryq50C4bL8C50PUeb
J+eRQyI2xfDOvUS5IVddo1xpwAVMvzJ4jYeeh+qA3gDzIZSyRGG3ef08Ec9Au3LljSkHHG3FV9I8
hZMqR+4sOosp/PYlWiaZB6Rwq7AzWFDn7yubGBqF4rygcY/jvAaFzqqCC+AJlAGd7Z73rsdBi52u
cX+gQSIGjmducgrSeBR8WD16hOB7xRvN6XCxY/ChZxP54d/KVpW0wZ1ZhTqzf7/9/bQfv63olI42
f8w8Oxw9XuLsEMOOgExBtF3eJ3XmfNw078ya4e5ErVoHKB9r04qzfqN51AoUR49XaRcga2rqYof1
Icp0PlWrSYthyEREdEy2EgMaj6xXhhm5j8cv9rOb/+BwOtz/8gUXBtzJk7iKzBz8/eF22d53r+Fr
gX49gRhldgv51wz/mqWvEy/lXw/418XOK7/N8N/m6beBKNhZ8rmPrX1Pkltmtjb8Fr+xKRkjM3Mp
3zXHd83b941/zXjttyeu9V//sL2RJ5fp1th8a4nOJL5zk75MacP83B3+dZdTiil+F79vrjMqYZXf
JXbNZO3G0u8S9CVrvwtpROG/Wj0t/BbfcTfU6DrtGP9VDigzxSzym8LlCNNtyiROrNKuU6wi/9rg
X5vab8P7wnmiM7UX9l/9tr2+jE2OULks0BW6JqizkJ+ycu4eP3ef35os3pqQI2pBne7/2a9vX178
B3erTOe/bA6n+/W86dTm/qfpfwBWdKQuJziZIx3jjbNA8tfx7fxl3PhlTuf9uHm+nt82d3vCOk7D
LzbplSGzMW7eJ/VL/TieXu6vG7vK7nB62dz+9RjH38cNR7c3SZAhuG5ikiDHwylubj/e7CHfN9v7
/Xp4etzH22Z33d5e//QN3eYkDoesQfLtbXs8bp7PVg0TG5pipEOomZDhiE+H/SFsx57o+o59LYZ0
HBcA0CFi435zczvYi7ifz5ujo994BnSdIV1LivOldU4Pe5Tt7TZePbAGXabPLiJKu7fz/vD8Ht56
cznfDm6NzdPjBX/4Li3EB68nolvkriRcaccIKtTwVn3uPbr2fg+OsY7b983T8bz7jG5CdUNGK7zY
wuZxPViO+LI9Hvb4RnRaQ+VrTDfhCDdyx+71cNzTTyUNuJrks6M88d1p/7fj++X1toY5iqXNvFkr
h15XX1tiWm/b9+UG7aXdDlYCnCwV3O7b+2E33wUhCgyQKzOYIq76beOg45uvB7tL/8QkxyWeAd1R
3Gae3i7xc/TjyVb12zBJvPlzfbVUyXGqVB3LuVWufrr7dbSKYCPRfYkkgpzJEd3h/HoE/rXJHx6c
6Tpetlbsb1yS/kbIwD6dzedZP0yW+O444MN+zsDiT4+vJNMmPZYubHJ7vG9ejpf3142lgWcrtJ+2
u8+BxWmp2adL9yuLdG2vn8frya33xYnM3fbo7wBn6i4/IgdagCRIMaQjOaSPDl+6X7e3jP7eZK4M
WYbE79z/0UlCuPZJTLgqAt2XHxviY7BfXyMYfvlmb2jc+zvHWU9lfBt7RNn/9eZ6D9cbnwulUcVq
Ws5/aaXv9fl4/rqxDvvhcjtYuvzy4kkgXqUlsxeP9rjh6xuZ32r/UR5gOA8AhWbS4ceYRbUS4v04
Uvwp0+051G2kE392q8BeTs6qe0J/Xpmcu2WuGa7j83gdT94GAw+BykGgFBMgJOzF2xi4Ok18AhFA
4BSSOkX6XdevRSUK+v1sjdFgKFl9/hiJi1Qc23x2FWODGBVgQZ9PMIXJ9TQ6crycnfB9Pnwh9LYY
0rm8+9ADW8e5Lue3i7Vj97/NFIi+DCs4RC2sLk5ZXUkwON3YR2z05TKe9sDyv58bdr/odVVIAIOa
kPF9pgmhLgvSifJe+qRqfGiITcNLZ3s8VANbW+gaQeaockhL+SolxJiydsdIEAmQKM4ZEgxKaktr
zgzGCX4QOdvGfrn7/UeMcdEDg075VlqAYffj7kxvQieGcX/VQemOb7f8DlDiTlfgQAG6K9+zpy4g
/bYT/koWYtO6eBf79+PBGrQoQQFi1LPoDRvwt0g/Qfpa+RR3g83xezCZWR3h25AnDqeNe0OFKyg5
5LJLxc1cRys7A5I6ym+rBC9OmjvC+IY5abg69SRO3otJ9+Kw4QZ8/HywRzo7HXl/x6lK5EeRUBPc
X5xepTeg0l04XKkagC3oPra3srk9rtezVfujPdDhirO6At6qu4lBlEQqiJ306WXdbBTDGvYt7gVI
nuuUvrESbm+IIXO3JIcegV3sYv883EiPre9yId4nSXodz9f9eA261m8LN3CBteksn0lpW4PR0adn
JH+kl/H8Nlp+3q3ZG0vU50IoA9BzX5zBh7PzkAuDeC+e3t02zo9A/LjtY1AN+5UOaqiuy23ADoY0
3k/bN+BIE8a/Yl3uSod1xm9rBbLKnUVg/n85jF+fzt/s+3qDHr9/KMxkKlx3a7wd9kEa2q0c7l4A
oTIkyQCnl5SCRNrYQc9rl0CEFpsuONe5D5fO9IsliO/Pj9P+9j1+GtXxmuGyO47b68a6Jtv7rRXE
A9qeJfqY41Vb+6zvb+fHzVKoNVHvhJGrZR4m7RZ2NilaRc3Ohl9T4lApXN96Waop9xIERJVL9aeP
vYvUDNgBnx6kE6fotee1ELl27jwuX2QtZOG38XLd7g/29tewqtRDThN9qfTxW+yy2AQ02b5MsQlr
yB5+t6u0ohMgrOsh8DpJ8vHtadzvreu+wiA2ue8mCvKcXgYnSuAxOcIYPho+w2OCgtek8hQThJFa
UlnJumj1Z/RR0yzCS7Afwx3kwECaYqA+D0MMK7MmhGgDJrx21SArhSUR01P5RdVsHiLaCdMDczji
zf5vDrtXKy69BYcHv4bMJFfQpYo7sG7uM84OhYASWZZjdnOtOd5Ib5W2wNqHws02NmRRHvVhFiFi
xAJLDgRr3+rtvZWvnj5xjW1q0pWOwBHxNpUlV8RSz3CKTYBvPWQOelQVVqBtj7tWUBEY/z6zEPtu
Od/cY3A8LY8na+02gmJ9LbQF0ybN+2BpCZ9WDK9/9E/+3f5/Hre4ULCTiUAmCNC5CoA+omKs1eDE
tNtIUBioBBPA8QYB7eR478+Pp6bjXQ2nvh5eXh2TW3MoJSTxkySqBdiiQLXX88V+/h7ch1XxGGmG
PAatV3IsIQhBPFwUgd1JEBJuWsEB/KP8TizNajmhfGOEQtX5RXXF+7sUy8vV2cSb3fl4vlKRa5Hz
qawELWKWCg9VdHlOEvJ6fCrSogUhMOD2eTXjGN1a09ad9SzuwCYtkQEsfQA2+UCegNCMOb4BRj9f
ScfWsBrUwrrSlsWs5ftkD/Z589W67YT44cBMdEqdi5V2ApGSlrVkLXAGyFfTeW6sX7kdIg0j8qjV
UDEdyGigzBOQJoA1/0P8sPn0z7/ZH2b+s4u/9OvNOwsbZuor+gym0DlILOyoWEBSC4gaIm97Orw5
SrZnettIJCrB4ZFc5EonXeGY2otY9EK4j0X02fYnirlfH/Yq99bPwixdv3eTozejuf22vX12z0kG
If2v9+nyAADdixK3wNv2ankGNQb9EkM6AGi7GQKy/vI64vWU5vkG+nwDPhKKJebCz+sc5ydqzz9Q
z1/A/aKr8X4Zb1ZI3w67P//8E3mJ82hxGU15VdtCT23B1HC00yu6/2y8YoFGlZCGDg6OjxqC/vf7
9AhexvRLDhCC4IC+r11A9vusw7+f533JrETdUe9ts9/et/TXEDOpZh7Idt9z/HsFsNt+91FIvm4d
BQRbfETTfn4HSuXoRbbcgX1//P6MyGlYroV6efKDaGYeoL6V9yd+X5fvx+EN7A7XnfUFqC3M5e05
Ac9c7PCEn0cUFuGXgPjRBCG0/H93PBQPQTGBTIIANJuZFgjimFwAcCFIleVcICkuGGrY3WkDL9vH
7dY4QboC75YPC0VCMKGC0PB+hsVl2++o7ashl+MKyPH9eNuRLKAACwAzpZCBlCYDQhT4KYUiIPY/
d1+XWRvO7Py8o5iwugH78+N1a9nIAyQoJlCmsCNMKcXs8z3j9F9gmHVGPffH9cn9Oq6GVfp1F2cc
GJQBz9ftCy3C4OaBs3N/90mmnSNdSeweGgFdwisECXKNViH+67qrFd/kAkxRCqz69ruztdbt3V1d
po/mHVUzInIVQn0PyiNA1BMqMEEpMKD+xQydz35dD8SvA+g+yFVAwhuoX6/uPTchJWV8ALkBoCrA
gKVeznQ1AzS4k/7o9MtpyWt3N7FNiGnsRpp1wBreS1qa4ITU1lrnxpep0I6iaCcvouLL16M4B5Rg
+bdnS76lNl8KTVlX3JLagazJzYl+IoqhYb+qmuzLlQflRWhQ3ASiG/EFd+fTviF+eE1z56qDsJ/n
oK7MRofkHiSleoeq/Zg9IsVDw1C7vjYc1VuPsB4N2H6Z6KXurmc1AsxtX8p30H1N9OfCz1DCr239
s4FS+3ll2xR1hndPmC2m6/Kn7xeyg3K8tMn1jlqLSQ2/nZcSysrROeH5Sug2FqEyGksafj0PHUSn
Lepch4Nw9UPk8RWIvPhQd78IHQjia5Uox+cdKvY6RfkScD1w/CfVYS/g9d7QG+n+nfOhOqi7XGz3
0lJepsY7sNCMOL8BZoNbSBVS02qQu0tzk/JfDDXPe6L+w+l1vB7udPSjYzXrA1JRT3095EZzv7Cc
KKuV6VrwrFAcVPCH9xQN3A/HhtMJHF+fh83Nj7fzNYDwCBpK53drqWrsiBIhgtVMV8hDpNtWSP+K
5hKU9BzS+R3sWPG1cOlAwYn/nSQ0pmK2a8ps76txs/G+9aQzftu+XVovOKT78wnjfsGDijoBqL1n
oTC9on84JYVMTfcXQoRiYRj3kLMWiJf4OB3uN1qMQgIaZhEw+70Bp0iuYFaYT5QgBuFHoAVzMqCI
uCgxjxa0lWDeAnVFiqTzB34eVKjnFhDlQMG4T5LikAMp90kNtdhf/uuU+Q2UeFCnKwuZgvEn84iT
WVkqED5OlpdDM7JO1qQvFfeGtmfKkU/S8+k4BsOdoF1A+0Nef0bWBoT9D3nF+7CQXYLi/GrMPSd6
RRE9iHnrPK9HVhSEH2dVrZnfvKBunueKMxMa/j/oWBfoGgKGXmTxHkpva5arnZrRT8X6uqL9h8g4
ftsQV8BocBUuam05Q0j2FBq/IuwoupHAaoUg10zYUUfn1Z4r7WqQQPJ9jW5SjPzNA/3GhtXeZxIn
2gwLw5/kW55bzlW7jbJ6SvqL6Arf9W7zuj05IBa5gByaET9BJX3LxGl+k7fLuHsct9dGyJblkbNh
EfmheAh6f0OOsG3WfwQh0tWiFlHz3N7fns7HRvCI5YSAZH0oD6gTNe9/Nj5awTdVRg/4wn1QlPsw
5FKwIoZ6ihdh5jHpr1yMkciB3PmpyRJNGT5dkTetKmAq6cJV23KjAldmqKU8ci6ici4g8Adc+KB9
IwVT969VNe2Yn5+i4DJnJiqxb0qVwMRpkiJRDV7Ox3ffVYVOnaYrdDgvlS0RPRDye11LvOX2o6bs
R11PHhQIEEEhQIZ69gaE0ChbZDC1fkt5CoDKHEtZ48LcASL1WZczQZb/X/GApkZDORNT8X8gAjEh
IikeGkQeQdCr6qmCLSNy36GrC3BSCxVBtEyJ7MfnWyPyrmrye5b/u8f1dm5oUeBAe8uElbYg9fYw
6etsQbnQH5Tvxfqa45n7/tTTaVWj/IxxKBsGQp+SFb14PjJ9VHUkwOVRlGv6mt9eiF8qccFz3zXK
rjL0QL4fqyUvk0F7+tIIv3V5DFUts+aU+QKSBxKU0GYGBOVGAegOqBAtzFgKuwhMSGCGZhswHSV8
qvHPXAFS999XkWtW9jjX/bR9Gx2ytJF+hfA5NouQGfbyTH8NouDADy9wI5QRBeSnzyD3ayv9Qvy6
Kr2L+G1H8cBQ88ShE0Bp7yIQICqhL/L5cvKpxO6pBEQdspUTj6Lshi6/ebUIvVKxKyB8fT8XVjEb
KNAbQFv5dgIL14E0OkrOzTLOj1sDrzIUJotYWeEZnPjCYqsYHFJTBkP63jcp6RbXTqINVS4xu6XJ
TnGbFm2sCxWsLbNNNZerp77XKNSyiZY2PI/ZSVbDSZJAUUGC3CZjm5J3dWs5VzmUxGespnIyiUFC
Nbqays6QFpTC1EXUNA+brErYyMJozbBiPmFCbwGcAFQIrqiZCzKvmmuYXzCKH9LphF57QluvqG0N
G+hz0VHR+JTRJnVXI8H8+iiL0RQ2r6yZLJS7p7qayZEfgAJLQwkCjeaEuKAMJl1Nt+QmOxXx0EPN
Ycm/p3Jdhtd2X5grlMk48JrSnG3m0PW8ETQb6ntImo/Sm0zUOCDXu5TJAvgX4OXygAWleftCANZi
TtQLgKhlWYHbKn4OTjOrImVzBiATtlWvsaw3IEMOsha2gw9IAvaGGuKrMFkp60UUQrzCwZzi4F7k
dqNc1UA0XH5Vf+TCg8q2K1PL3hQuKyU/ykbVNfuDgix0VLAqpn8on5sXDlftAijjD2beWB2qqKgL
BOaHu8upmxfIILlDNLI/Q61SoyBASoWA9BFIW0+Ox2zE4kZUX9UhsNKCqngDaQPgcuYSkGJf2dU8
DxA1fjmfGgKgz3YgliY8ZcOwolKmFvWnaKgvaEgtfB9q70CBLS3IEHKh1AfE2nIQLYDRXor4eB5v
l3r581TKyBSIs8rdMeruQMAKAK4hWISSHprV6Ram7UmkDM8pr6tBHiUVL+trcDUQL6TSNeDpgOmZ
0x2VOjc9rrmpHnPBdwNhcj13Ucx/nMrVGV3DaYWH+xxxlsTDpa9Bo648Tke5rSBX61tIVq5Ok0mC
vpYsTmUSz8+Rb4mnT7QHW0dnmoeCCmpZyxLlUpPyncHvg1BjfoUkUDwxvssaG77gPOoBla4FmnO+
p8gHEMCScxNoggTqyVqst4yWU7LPdM06VUEpf2B6g6bZ+SVQvqfpqpYvlL2U4VpU6PFFpod6fjMQ
bqMnfipoMIga5gUSD2W0AZ+7wn3PE/URMY+q1Zj7TGTMA2w/Nc/Oiwspiwc4HL40tlrdSeLMu9oG
oNNO2Xu6J6uUgtNMRQ1BvNWjdPv13U+C8ih8PrMkXDJmwmsGVxY0I9FyolYjl4dsqDxhSfp5YfL5
+fk23hsw964G854Sla5HCh007ngNLpgFjanng6oDzBnLnCbS5hN5ipiv7KES3p7nRSpLlBYJMeqa
CBtBBuu73Fw16/utBIe5q8W7gMwk9YVcBOtDA6r7fbyFqUiuE5aTnmMY0xdaQ/r2pdU2OY76xeQ/
+IS7/0POfehj/KPeDcl/PW2KxaFmbIrA2K+jD+XnqrjupzEHjm9lMil9p3MnGcRiK8vViL3xtBwL
I+Rhr6ZNGIUMej/Vrj6sBO/I9+4KRPv7aL27Y+za86/H9jpudttL6LiL76tPd+b///KQHrPbPp9I
63jId5eu3rfkbOxjkkQsDgC0lzQvEGfiTG3I/PxXaimFbiWu1FxBA0KSqW8GvOLYoGvFDQvw8qF5
/ryfy3a/dz1Oia2Y+Wv38EYU1xrbClO/380rOCutHxZHeXrc76tOwnNaUYHpA234LyaGACCTWGyG
tz4FvdR6b8WAu/562Nv9vW5PVAt+nrU+VZnput8st0QsBTuE+QnWPb7Y9dv1HV8KdMPjyq8Xh496
pWS5/i0MIJ3/0Vrph5fDyWN7pvZ7+FvMPWydzeUjXTHUZb/bOWmb1vWNxG/EUhIQaMdSucbO3fu4
WezQNz47ueFU9jbmUXDUDyS68e6qirz9v19ZAVnorG82pcymlcc4XMMbglN74T/h64GdCg8/H8ir
sI9FnTvtLsyYmXR0dXcTo+CbS+/kg816Cq99CYiwRFnUnhS4Mf+HmRax/zfp6nkpTAvNkx+Yd8C9
LQpi9a5rpG9O5f/me2K2V0ySjilvDvJixaludZLi4BrdealTQ2XeOcXZIWt/ZMNAZWnftVUi7+Fn
RjSk69zSk8VRsCyPJOwDCuEPnL0D9+rOrqLcjmb+bKz5PkSH7enp+Lhuxv3L+JNr1bt/XI6Hnd1A
7R58vMPb0KJzmB9fMqgiST2Pf45NNhxN/WT1Swij+7jE5XwMbB53gazOB5lWjx0Po+E0fu+rwGJr
7M2b3Wz9FvwyHs8elnFSPmvF97ENeas/rMR9dQSfjuvHm29uj6fr+GJXugV59mX8zhV93H91y6Pj
A/zSJp2VhT/6bOm7H7eaJOMmyiVPtM7WPpzIXuPhR0y6CTfufNr93+Lzf2+fH/1YpWv0k1lZFJDP
4w/n05fz8cv409Zu7tvmNL7Y834ZfQR0PP776RA7Sv4nurZIGwtBMdPV1/amwf7w5XA74zuV6ZmC
ApLQuXUt3kMHaoyqu/S9H4MxVK4p7mT8ctiSV+6DJGEt0AdyetWpkSgkE2vaoatp8AbBM9GNN/AB
wP/Cr6pLV+W9UjZV+nrWcu6ova7Qnt0a4OfHHb01lk7qKjiisWlZ4lfPEpv71/NmfH72AxNReZJu
3k89ZlPHt5wLQiPqwAHo0fp0V9AXcFcVK9pwcoTM6I33fBu+pbrDJIX93DZWCDV2o9OSvkWqyBYM
lPnvPlFlmfn6yQFkfz79+82RyOHt4J6y9t/iP8fARfoTqBoRzwILp9+0b+AkTvs+OgKZJM/mcdlv
iVvV4HH9FDH+Ry8heMx+dog1x7+3PhD6m10u+2H/v+DH+eTw7ebsZFQeaLBx/0dVNsdxyeuIM72P
byU+3cRfj+fzvqYs8QdKK/mpl2IQ2RlXDN4Lh0zs68ctTTv60eX/fOUB1qc9HChJcOeExyF3jtns
UaJQ2o/PW/vRxrVRxXVsumxfRN5XFpoUf7CPqNvhYFscbGtJcQua+uNE5xPxkehc170Zy7M/f93M
ZgYuSA0gNwMVbbQyxuOzPfp+c76/ghc+IJ5y0PyJD3ysTBgdM21h6M1mNjUj3QSaxsmFAZ4QKrlf
gXQDwN9VWlhzinwfYOJ5BFohGBP5zhqJWk4DA0fPN1+xRh0tb1y8krAbZaHQcqafZzOjewGa3zFU
j2jq88lzuvVQj0Fb48qaAXs4nBSy+u59h4x28l8PPSABP+Q9P5A3aPzwvQanp5cHSPG4h+2zJ57Z
WaaXGtJS2ivGglG8VvEWbotl0tl8+/hOxFk8L/5EM1VznBA7YNp7JASrv9ckewKD4JaV0MAI7X2u
OXss6xbi95LI2F3RkGLZ6Wa9q0Zdr7WmEgW6VOUA+xD9Sug7lhS101OT0hw/xQJ2rxKc7RrtoMO4
x4+S9hDGK3elXWi9omgX4gcB1kwnlvZYVMBxHJXPNuzPu4fjdpyMZV1h5e6Wmwl6bi9mVO5Y6Wyx
WbaCINIpbXqHr6uAlFV+LsK08k+jm8r79Xr22LbLgzho4g23nMqVyRTeiiYM/pAKaCXHblNTo7pm
DuOCUWbr6wT25+v58ilwf9sylWAROfsbJcvje0g0xTtnG9g/zXIfsyPVdvVkuiGh/UAwWMiwmRVQ
MDdxaxM4Hz6xOQ3hmznmcEr2Mc4zHVhmgO/1k2tAZt/s5Z22CS3zdkCs+j9M5c1vbgA4ZfgLsJXQ
i1xVlgkpZ/y9hsSvYm4Ldjs/rrvxu+PldYuLsyEjlIGvcZmJWMVQxCr0UPUGmi5h3+VhBrO08tbZ
dsAs8E74lF8szR6ccnObe3aVPeGOe78h/HqBh+jkQseLYEv8m5sci83TC4QPfCKWDKZJXXF8B13B
MczUXiQ8x40Scia9rfNWTffB8F4wVlxijvIPDHCEXayJdVl86vWw348nZz3fcZ1jP0+ndtZ9YTin
veLbkKVEn7p1nu7bgxvNBUwvIigKNLzXg8YQMa6ruyvcZtYYq05NiLZXu6e38X7Yzbrm+vK0xbkV
xAK9ZJ3uOmhQnDmHIgQ0f5fR1Dwtq8Xr8MklDO8mXYOr3g4J5gR6CTKw5ZDY702uMJc7WBvUlEMW
1DQD4mYB/xpfS9U905nvBc73QGD0ILa6Nh5NGO89FVSxm2L4LUPC6QHaY/Zow8zU4F+jjLBYRVRU
ZszvoqeAQUCetjIBjVzuEf2YFfpWF1El+7/HPY8OxKmd0cmmkhBofHhic3nZB36EAfBNgKpNwuW3
wxFnt0GVEjb2wQ3BDh/Ptn+LKb/t29h0MFU1jriIUnhkxxQ3wl+3z0W3KQj3r+GW3zdPfjwy/sAg
ZmdAiKHwiraXi0uXrXFkepFb5voPJ6EIX9toSnMhP4Kv1hfSMasfjjgSMjRtP+6zMKHJ5Ov4drEC
/gUntiGP5Vbs7FlVNagd+CSORrhZFYQgbNVEtmGAtDJ/PAC6MvWghmp8KE88fMCtUkkEiN43xZxW
/Jn2GAYBQjq+CRMP2W+fTd9ed+RsZbdED3JavjwgpuVvcFCjR1r7r8t/6VtF11cXsNe4zqKVToTk
vyCIJfS8RIHhy5dgxBIy7cKFyBWyRGbaoqsZcKZhtuDmCMhiWWJf3byS8M1QJXY/iliknxeJU6ix
G5LEImZehDkjyoqZACFxz7sgBeJuhnSi3s/tTHDAIKas53VZez8mHc27j8jBiAXEvIBPTYfNLIh4
st+3wNe5PS6X8/VOXBlLV6Y9oqdH7v3pvH8n9tiB9/N/pHXgsFQfz/cR42CY4Auq9AbSg2QEsjFO
nC4tEqAQE9rYWRKR9b+eHWDnvrVWwe0DNKLTo8QMOEf2p4lFEqF5La5qd2Ztofthe7RXtr9uvxI3
lkSMCyXmdFayALFMEjNAxSJi5joeg3pwoTxizURlQNVkcfK1uzOANb2m6csZpHzz2+H0HiBTqUDI
WjsPn+JCixW8sTPluUStWqNYh1HrsHkdj5nRxDqcWoen/cTZOGGWtdWIARYW/jqD4+xCuJoEbrtX
kxHvunvc7uc3/0VgCv+2QY5srkGQhNmytX0KWOWiZ0M+Ven84tR4tEBnC5zbW3DZ6qftbbTKHVlY
dR0DD+7HaINGU8fx7h3rUAWEbW4AJB3SEl14VvcO09z7GHqaQirofnpAysmI9P3KQz5sf37DyFd1
IvGoUbNDngM7d/c3Vc92+sOoIWfzwEv/c4umcxRrLu0cwfgCu5d5goOeCx5M3sf8GuB2Xw63w9Ph
eLi/o1cMVK938YOO2tsz3eMdHyYk7eEUWkuiOTEBq+50hBeYydI/zlOpXm9H9PNB5hIH4vmv9tmt
a399Pp6/EgbXINMW3G7iZDHnGmyPf4s45c3zeedkM+ovuJV6wB0+9MoT/U2659fz+Z78sxB82KNU
CEwCLnwjn8BuloY/PZ4+Wd/j9BJiJ+jx5i7c7vUdgpPFNdzvu+KuzfN2N5KvpLqM7YHF5XjJP/YC
rUykMgQcaKenGPGELMsGps92xKt7yNrcdAGbpegYDRC0TMKFUGJboX3/MICkjm2un3HeAAagqYjG
G5rQ8z/O0iFk8BPNlGcKdWyOVO5nexvH99jCihKGrK/dyTdXVLYJiiC1fsT2xFSfGy4yScHTeHMO
RGxlRJOPEDVh6gjQyi4XDbG8GqEKAa2Fhwf8eorX7KkFm/m9bY4Hu1EXPT9aA8bu+oYKXctvXc0o
enq8WNYecAN07m+pPfTc/aHnAsSNZZLfzvftMTIqJjwAR3iBD+ZMWVWBU12iWZBOtibSL66+b/Pm
AxS/UQh6AceM5XLY4+evo30L+7fE2x4whspTIHBCAir2u3Sqd/JhohVDC4l5+IevRnUp4dj6t/HS
5AsDachBNvfskVG/B2x/sLBcNSH6WkBUcOZF81zIMF+TF/NjgDSSfNbxvmY4W/W3Fx4VtTEGt5X7
AYhSk/JG3pY/WuU37r0ytlf9dN5e9zGyRDwg0MkevcMSMZOcaYkYuuY6xcmT3TK1zvGqDzUIUzX3
vImY1Dhb4bWhJJ8GpqQP48Tdx4ew/+uQnwnyZtoGaoj1wJYD5QqzVLd0OF5jX0qiwC7oFwO8Z//3
8NDuabbX6/b9Z1/LhFo7QBwzl26cysOulgeiBkZfZkgyGIAggxEyJ7U3B1ev/IzqAw4OEEDZsTeX
fdRQUHxbBIpxc0mpnOpTKCEUnT9b6nXOImEl8/Q4TGiAzXTdNqxN6/1pBOEuYG9ePcMy5rn2QUI5
EJ81ZO94KUcg/KEWtXMPk5yN2aL1NUhEVjo8WO5MG1BA7aAIu+PZO1b2BXFOViBmp/y88LiviQkg
ipO21PtMzHTebJtY28POfZGZh8FOttu4pa5s7jfgF9S5uVzkcW+b++v1/HgJ9WDO9cIoFAggr0UD
t2b1yq6+9h5wO2FyYmZz4sSmsrhjl2CNbsNB6s/5jdcxYvL8MQ7uAGe3d45uXABPhs2mx0JqHcft
Z/SJxJBZoBNO8eD6tf7w579i9vMAlFl0nGPDLken/l3n/ACpFRVQ2FH8BzHjQLWu9a4ftxMb6LbM
cWl6SCAgz26Nm18dhXlA/jOuV9PoEp1h0hIUxn53wMA0wb/sa0aZLww+fBuPt83+csDFNbxWgFlI
Es6q5WDgnV1DuOON0Ml9HsdnM+XZYzgrOir6oomBQukNcJ8XWCa9+CU4Ta7GqCHC57EcyfZIPBxx
w14GxkQvrfQVE6XpyCh77+nx9HREa/aD4woI0l0hE7x4gtv44vSmdcJxLZOdMgD4atEYPACj6vz1
dXz6fFjtNCumZBl9U8Cru5/nPORcXo1dNMwHdJn7PQUEnLeJm1iillUKzzQXqlla2n2ORyIM8qqL
+fR0dgjEjQPTxjFXKA12PbaZVULZL07I5ST0p1hqoB9n8/gg03VjWfi6JU18OQBjJ5T3d4RmwnB5
AnYGnuMMfPJSTW+6Dv2OAXEKe7LkE/m8XfIbiobx9AxM4gAnUcPqBuVhAciWoILL/bZLZG1O5+zN
0NeRwDgXs1U7AWrWFFsJOOOrZPA4YO33Mx7slQNIGwtnoYvYtjDJ0lcXMGmKUl7cSfRMo524eT0Q
15C+BbUt3nt/XL+MRRJnd75ao8I59YS+SSvCFrJBu5xhdC4kEZ5u5+PjnlBv435G9eC2d1fzeq12
/8fj7Wm8rtHvnAgseb7CirxDHAmGNT2qq3DuIjjMtwtA43YgpR2qgKKREGuaQijc/SexTOreNfln
YSdv55C8+DJGcyWoU6cK99sjfjZpQGI1wnC62VXzdZGxQRTunYEchphpCiSOasXS/rrRoK+G8VU3
C08rWN3s5UZsDIPRzADjxjzlMqqG8objprLJOUZPtPeXb7vRC2Ei4NLV1fkScNkx3LLsSndqGuvj
reNwDf/hZWBDchgQFihid94M8xHV5+N5e6c9vEGxmgtSxLOiVeccvZaV0UF3wEE4meqw/Iwg8jM8
w0VMhBhphoiNzh0VS+f+cHLeeOzPg34NM+RytkxO58lvtCLOBW4cioZoyRU8GVY+9lCaoZ+tsrDq
E78GYBuL0JE6vE8UxrfD747+x2+uR8jhHtQnsaUBpoW8DmfN5SZtTKzaFS8ek00xDW7FWINoZA+9
bGgbhDh0I8yloJnFQ2MsN+vK6pP9fsI7VWKimGusoHmaKslmBXEB+aVW9A+kYYXTqZOdMFPyDQ9T
QVcYprbTvdK/bq8VWI0a2J/jfbtzNHy22vv6dr7dNyHoT9lLCiY62SxxZhRk6n6EivFFQlGAeOQE
mWB4IBLEeNVs96EZv7UgBABG8lNfRH6wiXaDJPReF/5ipuaV1AiH4xTDQbzYE2L0Xn2/udANkIrH
DCDg7PAEsY1TcBet+n720NUUsb3hrqfuishOjMf7YTg+9esu1xsWrv0P+vISSIjg4qeUzpypiwBp
2hvuAHwPYBESiMErl6tr0YSDyYNb3ZVxGjkFkd9Gl76zZsGfJ6Q2ntEGLOqKKFhsQroIXgSYxM4H
R2946p+XtqlqIW0aImAAXo5w4kAYhhIlTpO6pMkuzziusNpFHpUzURKNl83+/bR9O+xiWAV3liA6
JvUCCF1qQ8dVJz+eDvvD5u1wvZ6vKJ8KVl1p4vTb/XzJnAnahpoH5+REGSDru+P2dvuHoynHK//c
HltiFhiaQJnVUk+4SEv6S/j3jyG1kI19mjquuHBLtIdwO5P3WNrduboXWFCN7gfej5x9vsPb2yNE
QFJwhnAjYBpMJVn0gTg8Hu5ROYo3rRxijmF2kA8eg466uIcJA+JD8jBdsGYwQ09ACoD/Fvopmix1
c/ON7bz4x3GU/QATQP6PZHhawRa3fyCDn6qW/0wNAD3KCzU7QBxB+CyPmGxfny50wbOAIKFCXj3w
TLjjUg7i3xGIAmLgdyp6pboskcWTZJ15vhly1AAyFhDCOvWad4Xld8cDfx6dX/DeEBhARTMXSWLa
lEdrcxXwigkA1GG/QkcAE8gRj4iGS/Fa3gBy2n63vdy8M/hmHaLr0RWo3IhkOkDuuHuL1+b8/mSr
eRbDE/xWhgDAnprnbITIxCSJ8GhZGgaus3LJZi5F4LmUrib0oyd/vnqi2j7uZxzpolRdpEVkZYwi
WdvoN58ualjn6ZIHlQLEwbZ+eri8DpAiFHKLgbQ2CC2kyKang6zDJh5zUaKvZeMWqFhCFgEr1Htj
EWF3uFvNYXWrE/F44EZ1vIpDm6LF/kD2+a2jiSNc5sGs3kcYfNXCnOI8X7b/eoxUhXaIBohanVFo
gGrpNo5jbrCBHKCHwWfXNPZ6DurPp2BwiCBwwiQIz8xyI1wpLitAgKRLUWefbt5EzOTDKfUbWk8d
vBSVo6X7lM/oO4PnM2B0p0+twelkv9czRI6/r6VFPR6Zhj7NM191VpI66UkIspkCpxn0HteguhaB
KJPo3vbGI4SmtkaUeLgx1Jm60+ff9ps11r3LdsMpdCihx0Mb4UGiO3Qm2aJ1lsQRvGX7I4QokjUX
xHVfcy6MIxevTUK9L+0SyR5iJ9lsps8pkZAAj3mRTRyAh5Og7GF2jafsmncfoneDOzQKYLRCelBP
UO2plvSHo9NIv5JgFw0lf/I9CjMg5iRCOiD8V4Tylya/pwhTfB0ditzJcFxCVJ8r1em5eXquHfOu
oRoHkPHxFdrQPXMvg94qzDSlGmlSEeKxfwFDnF2SXJEhi1XnFSk4lbUBC3UwQDnRSiHIvgab8umD
8f5dQvSRxgKASQDunPBhs3ndAoZpmI3lOnXVTVcb8nLzvv7xCU9B6Jpl7CgnVgTtHlcHTfEIabdP
IgDf1yIF0WsObQd2uAsDshigj2awOc5vt8fT/TqOcwUNTcY9QC0CavQOqSfldqkDtIFT4UxW52d9
KheSiQkft725Bw7O4yBp4v1nAeqm7m48yxzka0T3AI8AIynPTpQoASIvoWrRWHK1yWuKZ/YhEl/+
SPyKLDDLHJhk+6bvBVx+YGwTJV844EiW0Mo4Usi3jN4cz+cLjs2oOjNB5b+3AnPDwGu+WRZxfnHP
v41G2argM4iiAKIqdFH0/6AIxpkRpGIckEp0UyeW3et5Cu7gLgAIy/tuflXinFNnTeKEZlLoIp4i
a3Nr6zLBjUeOAegx9h8zWXT07tsH78FUDzQ2Wg0r+ICfveZw77iXDnER/o8eTgSbRU0YB9vOGSmw
oEdlsTgizNpFb87ln0YL+xAA4TgpDi7I2yTRLC2kX0XwxRR4CA4RQhDq9zAQJcsjYY1+QuIImH+h
3TBE18UfDxvBW/QF8KPJERy6QqVB4qnuMkk9oy6gG6bPl0ZDlhJ8fZHUAQPvbzEY7wR/IxYGWyjo
tnmP21dFELfPXDGv1WAnP9Tz6srgbT5EHYSK2rFgS2SyZv4WRBeApARpFfltjQEqOAGoYLWIbtIz
c8ECx7H7Qz1e9fVw8l06t67Q/3Af35yu+fy4ELJd56Z91hLrp7MnHZhlp8uJATA1WtYy8+ys2eir
sRxZez36hbhrmHT3o2oiGwckgu/Y85cWHEHWUT5QEljO+4ZLA5UbnTEsGNNkwdojcWWghNi7BT2C
K0sl8Tibl8adTDZsqnI9WJW1pWtldM0UDtruDktRcNQwEJI+kqdLAHKAPeHZ1WoIeApCTula+zLH
/ebpffM/rTJ2U+xHfASP0K4bkyCJ4oLykYpml8rPJabjUxoa1GzeYp7obM1KCMkPWYs7urkbljHs
6e5vXk/trufj0YfgLJdttpZnYj6DCDoAzVxG36baqVYUTpdp8wjY9ttxaQGizXxImenct9JzeLcY
p0fvxEAzzF9ZhELV9K9TulH/OlWc6V9iqx2Cb5tw2I6+HDjd0pYvhJucQpzDoY+rZ3HjsUFeSjxO
n0/nr6fN8+iaDBPlsSqHEg5R6oGJHBM640bDM6xVAJJtnohjoW0dG0uJL10iy8AARi/FwLDOucIe
Lw3IuiKohEWNL+znzjroN572ASH82JQeR2REmdEogOuAExmbWvFG5M55hCuCdz2aNX0Pg1dnUUIF
0rQcaqBvYD/9fRK+IeHeSOYqVVNvCXsd8hhNH9NqaoCHFDLl25dJ1HYO1ZQ5VOA4+Z2Fp5zbXj6N
LtVoDVOfMMY9Ko3kSXprOTMCStCXoEz1oaY9bf0EUAbOhhcxaACqvukrM2woW9ToufexFdxTbbHr
Wf3JW26/4W6iroXp/N0XtbyodaFglzOROnj7IMj1fCfNmwHi0lJn9ITUpMVdD0Dy4SrikNqdg/tv
Tm62HvrSwLIHLcyTAzX1G51ePCb40PUAOAq0pCsKhra4M2vAAqrzI2FZBeeJi1jOayGxuR9Lo4nA
AECvruJtau1j1cSMdP327sUDBVqAec5k3D2ByUPoBUI/KWhoiaIUCbFp3SRW8wMCLsAHvqJ9hFNl
UlZOZqq+RJm8HW6e6bPhHXi7GoAfB1bgop9AbEB7fG+2FtB1VejyVq786X+IGn5dq72PyRT3HyE5
4wtanewIXhOtWBjILufIh93nAHF0JlWMF879nGi3RSrY5yNJ8CkPO/lgXs1TACTFugVepGZcftyk
NBCYHWqu5Tp0DI5iHoruh1MCe5pJO40hQ2eU+I1BVu5Ti5QYismJtj1yJjAnQJU5K5VHUT1XIY54
JlqqWjuNONo+tuN0TxDyb3i8vBP1kt45exxjkX5i+uYbPmA2pI77ohxbTHkdcC/zlLZWlglUrYCA
lXP0vrzsm3hovmhWUlgdUwLO8SVuzkLjf/ADRBeu/ly0jLv7Mi/iTUbnFEkJkHPczJS5IuyK8p2v
5+t+7k+IZxBlnn0G1VBxVniwpJ+O5x1RCQQsHOEyGSLac9HHvZ8nudQEMvbAVIWlYy4WECzVRpXg
ABScz/kaKC0aQgxmMVPV6mn8GlXa4eYHKrcCq6ZH4rReO/rUo7dTos3ji3FxD0oOcLkwF1NVbBaJ
azIQJRPZleRNKOnb6SDiIPUiw6L3q0MGLE+EymoQ2tfH0QsBZxoMM/O33ejeJvqi90CsZSojSG+H
by4T3ko5a3Df8b3krGFgPsgNcsG7dRgDO1H66CZvmEhbV1KGq72uljwLFnc0QWI6FrinqKqqqpvA
ojGqktoM7Ty+h/AShlqQBz0nfkJeVs0HDp4jTj7m7qFuK9q9qL6IGeWR+xzX2OgsBXNowTwyRXsL
l6GYox/+H9wr4Cjtanu8CK5pR+FN2bFQFiYqLiNVDbLqjafx2268eY/SlYOdd7jphMASnLGyopNk
V7QC6CDOdO7RhYIaWA4IGOAIodOEvHEVG39uQG8VeFU4VfLleH5ytTTnU+i7fL4StSOwJNlRGYtk
NrkZsVJnTobg+DhVY6K5Qv9ihUMorHHTy5wZ6Bq74SodlGa5vwuVOtmG0u24UFwXbeXEq/QyYbCc
KAwRnyYGy2TPZngRwbLy2YXEv47HY2zr3TC3VScLNEHM9M3gsrkdqWXvEacoBbtVhZ5DQTXaa9rH
6OYkgWawxHX818M6onscACdyC5Ev7RiXFnJ+eiMaxlhX4pKLVIv3eth+rr56wrvAaYCZ9FYAzj6/
uVwLzjtDTe9PAT7nErj/tLe0pfo/K4AI9uZej+T5oyLBK62kNhAczFNUcjY+UrIGXSJPjsI2RMGA
JMDNHYizFYHo12TEtPoiAzfcRWhY7K9XFiIety5c1sbbFANIYrr5cHVxS5/oaE1dDvHeRRe2DO52
imOFgdlBYJOKqRYKKr7Jc1/RqseqwGpH9emNSfWpFS8zLWWLnYAiavbY0bUomu9eaTn7dLfWOV6D
JmpomglU8k6DcWQvVD1/4nfv211FsxkHfXZ1uzn6Jdvj7lNI35IgXQBqAd1RXcjDAxzfreL7hkc9
ROnTDzVPa7b19nNj8FaktpdYJ5/ZmmywYm5hDZmFdYrprlnF7FuVmwwUzgL/ZvziqgOcpsEl7aJJ
27AsM3pzs6gIo0sC/cvdihz2g043HcMX+LWKWtJ/Itq1FmQP2i3wzjc77qakxj31htydr050OzV3
wNMbskiLK1a0EfWi5UONRKtVYUultKIvRdaoRaeuSUHCPT+Ox00CfOPBelWvnYidl2IyqxF9g81+
4cDgSk/xja91f5l6GTYauYLINpd+qMCAwJo4EcpWRRF/vwjLtbKGZQRB1fD0eAcnkOsCsXQEYkCm
pEGrBRlmI4slIilko2kZVFbktdKseEIVVE0bP1tGwf5rE2fcPo9fcZe1r89sAIGoFDI4nJpV011R
VtRlSLQAS5iyiw2OVXBSi2AJ8ZxkZFBqN7se0bUPnNDPsY4d82ZD26dq3cQh0sIGss2pWM7VgpTJ
sLul5MTvWs9VRVn2u93Fi+lajRPaNRctR5aKi8LUmOpkfRvCY2pigRdf8NJLFpmXbJnU49HD1kjT
jfW1aGiwz0MfmzXWo4Y1zaB9UV0dclwf8iyO1g9/oFcoXv/U15sa+WjNGsvd6CoNWF8/CDRfKofD
kXjNuLUa8OzGnAW5SFe/Dh3S5afI+DcLLAyY+MF6Pyw2xTPccVzy3tqaO6JSTxb9L2I41g8OG/d0
W/ce1PuAUcRTXJPs3GQM4myUpbw4+g0EYYR7lanPYZkd357IxsGKwUoFEVJgSMroixsLQ8SXACTJ
LSp4vz6dsKICoO+QHMwsi9ei7rUY6tOqqlXTtMNirc2uvlhWWuMchEUTERcqxgUkdFeSM+hWTdlV
q1N9oQe6iGQ1XMk8f8T56Naqe7Ey6W51x/wgrgYN9TJZpok0HJoBGti4x/48vsfWd6iNBwsxQ28S
tehK0epFwcoG3PPUgIg6T0Fb1L43ZX3UXOg/t3yZuqgHX7MR0lZalmUCYtmZ3ecendR8subMZ6pX
Luiy1s8B8sl2OAYT3Qco8HAyzNzD7r/LSQ0jYM7GNBYYvGHL/lEwAd/G+IHxVL7VWQSG4AYKXn0P
mwt3c1BzMv7WAGmAgez4rw5MqzSoxRUWEPrOCWSwu9Xt5oJm4/OzkzsulJAqw/Bo91CLH6TqBJ89
oSo/YINO3/KRsXo99QdcZT30NdSW5x4aljiYRaf/bmXRHJVE7jNHebLqUioSzz0CzeiJIfbsg4Mt
XVHEBHT0w36i3GqMpoPCwW2Q9QxYic6EJgNssjpDrCBN11H8u9P+ly1uC8ImAUanbfgtOAx+Enfk
UIVOyFoI12dVE0Jp05nN89QkBYf1m3rn4yW4HJppFKpck0Up+Yjz2GeiFX+xLp3Okx3lDKpWD1oD
pwJBaVxt39lu/MpAyMv9XYp6Vu5DnJzOqFPdXKUQUBFWYaIMZ26rrAsF0c1AsW6opctm4ByNAGGy
x7q3ghJzN+b3xwNVqjMAEekyBGpKTpwe1i54DxdB9PxFkx7S1IuIwpgru6qv7/ZtJfHwnawDKRPu
0fm+wSpA3cG+Pm3XahGHH566LMXJiR79RbaW0UBqWgXnzPShk2XrG2+TbU/B0mz2vhF4lGm9S403
+oUZG5NKDpe9A1dW/gNoP3eygUdxmIRD6jLiUu2ku85V3bsgqitXte4Xpc2cxRF8EppqumhAWtLn
QniZHz+5bjI4al+qmmOyYqSCtaxVrfrChSAOcR6bfX+fdbAshHfIkTAk26ear1nCOJmJyxdZn5NH
tNLAS53ZohGvRNtP4MHqtCPukMzclDtyYABiFhaM5sJ2oJ4mVs1qMjCElizSuUEQWIJqRW5k0XZZ
owUN9BsNaJuRWf1bo3uyIVGzFDi8w6yIonm9rmZ0AC8M+xFX28jls+JQLtA5OKhsgk80L+gNqzU7
CWHbKZsa9Efwl4KCW9E3V8mujJeXw7AmQNwUKPM4Bqo3rKjZunlNccwK7rY3nDY14HfuNB3vFqDE
07kFRxS1tgbb4z2cAs20sqJvt+K1hGQ7C8mqfddSNsyjGD3mjsxGwREKMMdeY1QcbNEV47Vj091l
GTOOqtY1ZLf1qb+EcJ6HfuCBt3J8q5kUwRcXSmyOm1SwWRxPoMUsYEnFI2UNMJt6kK0b66lFX2tV
MJtam2ywhPWgJ80ymVOWLa30eCMaNC9QUBoN2RGGHQy/wlGJ/guP+HHARB8XI6p8FQNtwUL+m8He
g7Ft+YMYAKnzzHdfa5PXtNKUqCKUp6slZx5oXYyG6JdTStu8XIgSkypt7Y0QlbZwKrRDbTCgpV3z
xznk7MmY0NVFe7Y4xvT8djht4awFJwaoQGc27hp0Gqz4iZLwE0XuZwli5JLAY9N9XowpsWY6Ad3c
6qYjinhUpNRGe6M/ktwwwNfO+574QH0RpHD/+Nv5e/tCaeo6MV1a1Av52h0A2mEH0DXEEfTU5GxO
MHwevyZexLGxveC1tkwzMiLmYFfNsLTOzSJJ2uVx5GW7p7HVfQVg2qQPUU0FQPOmohbG20Sq+mjf
IoffGloOx5+H6fIprxDzAL7KMY4RQK98AME/X61rUNjvj1YMbPFusD2CAslwl62ha1lvBHc7khX1
8GNzGpg11ftaVG4p08j5McoUFeEpITphfq2jad1MnybDDVdQQucMN9G1SsZwSAGrjSdLVHxYMUVX
1HnC78ZV/M+DglMWCKcdgKsCE0v/5zYbJdeYxkgauWEKdsWUzThE3L63vegc1m69Bx/hcILK2jDb
I9mYuoc+KYeBtty3XtE3r4dBC5mm17lbawHJB5PPkVzEhFzg78WZrA2zG3aME34GkJzJc5rjOUE2
ceQDr5XdVoY54A1IdIk/kFnf7m+tvt19rXQtua+U/9Lr6pSYRZd/QbiVytSqpZY3gF8AmHrjArEi
ClBP8b7dT6D4MCQPBUr2tV6mAXsRKPz+9bAjpAwgSeECeWJKIzgBE2donl/sVzdrkDj45v1yGx/7
c6Mvh+qAfeyjHmLZJ+v68rTFu2QV5YRsMcmHmDbbSV6KKwmqHvJ21eGYr5+J5i8atmtM9sUMl509
aA+bxSO7pooQK7MB7VGAeFpA17qhAMDq+TmABsK0cyrt1dXgSXgqXeKmjyxD0A0cLNmOQAN/wTth
SrJaZgdv2CJNvfakMmTaCcMVSDJwQOc2MC1b/eb8y1oXj6oZXiQyMdB4q5usBq0EweDelP8g5vYw
6OeK2c/0YjoyY3OCupXWOg/CydzA8wz4RLT20goFM5EdPxgeievrU69mzyNEoHCHo6uNLcwBNe5x
cBj/UGZQGDrYue1HmRL5Ug7GDRA8L2BwD6PacRLkZFyE+UGhloxktV5nL9fz49Jq/6NBQNAbFX3N
3PV/a1bqqBztVNystf6u90ZjYlBOkvXXKvGRtzX1TENu9k0stL26TcSAU/wnYoZ7dcBEytpNWtWb
9VF44aFLhfSgBNGG5nT0AVTxAetjimNNrNQOZan6wOy6QMbFMFjGhbd5x+p2HafsumpaZNIFvvQa
bxQsERRFSTQuPfnNCocVXZQ4Eov4aIvOVQBZXutukFq2uGWma2yOspI9ELFOAUVxErCUXnd0w+YJ
py3gIDjxJtiwzFDhpTcZFgxUSRVNi7Km6alvPdG+yNTav4a5EXOU0bfVpAeZg2SpV2gKdvf97fA2
/hDbCp62rSZICvZyD13nOyzhideD8Vo+HeS2GsJAdXWPrCwz3l63T4fdhi5xE6WPKnqqkScO49Sy
J/ruRPmCu9wqwy9p2CXH0p/liIYSyYa76zQnfKqP+8WhP08hRllOsMFrbAsuXcQRX06uU2dA3DSD
itWmUfHJJwEO2gj+dN57yqSQaaBqPmQZ1cKyAov7Wle8TGHIh/4kL9Ce9at1hZxcxQc8wLYifQqZ
hjBccIGCCRzbgRMGaHWyTrJG5v5udPmdgK1vXdijV/U2pGTPMWkY0qDIieg5XXJ/vxBjUIBhD+K3
kwXrfM3t9YoPcNFwpFhyiQG4NU3v/jo+ba/2QF+IlJiqt2KLfS1Sv7tJjZPSFaZ2e1AJOFX/OVzb
4bQ7PpzD6TpA4LJ1oUfQUQT4Y3W1qHKlI8WDmrlRH7R8OIb81ov3yl/Hb9uXc7sSnfNajwzQeujs
R8y22hNqaLnB8QNPjxcXMsbBUxC9ClsNRI+OmLSrGKuqqhiQmCy1JvpgKHGLBm10mQFqPCKLLonq
ZF3p+FllgZ4nHsXd7irgZx7yfGu1Gujqo7ycs3ylAQV919c60n50JguVqxxqA7Y/mhWlfsDUe56E
8vHN23jfehNtbI3GqLb29UaRK7fOTfjGiwzVGZm1dNnftm9veFy0N2WRAyuYN0w3xXlW54E9CUF6
DXgeTNULkKr35t2nx9On+5XsLglb+9V6jIE2uDj7V2sFQJL4J3uUv24PR9wsgD2jUzSpaNQ6J8Xw
PhoA0sKdKOJ92ZwSd2+6mq/1P4/TZ+894Okbg7UOJwNheCvIjpU9HIa1wzKo4KWu9UpJvpsPWRI1
2b1WjQnosNkebv6ruveMhJ6nKgfcSgEVZl6HxqDdRDpTZjc0B3ic/H8S3QFUfaraAgY9QYApXLOB
kGKPneTz2JOqo4GeEqQIofW0qOglskogueVUkdCikT7ATQVe2HJCooqa6lLY6Vp3sWTGeZ51HuEK
nIDhvMSypejg3mqXHa4HIFDBG7osd48CVgF3iIBy5vN0+mmO+2T5E7Bma/ro0nfo4SI+9xiRII5L
dtsLoRHgGIIuwVqKkruPhln6rMAdwOPn7g5kPwdTR8oEHXc+nq+k02myoSl9yg2k1oIlrgzPQ6r6
cC1Id/gQKEtosgaIX0Q0JRXR7DN3fADtsFyJH1W7JGqdKCZCXT/4V/ZwSqMAs6wzIsk7MhO0MWSm
8QIJ4TgZv1CkcCVnv80LQfQ9Lxoe6nlkQ9G1bjao8Bgpr9eIAg2wJZtQGIiY9youYrHn5NrD+rln
X2T2eHJsg4fdlCigYdzMcUQXD/ITUj3/4GHEagc6sm0yp8wIUTMj8mIAX/c8t3Cb+l7gsCpeZqMV
GLA9Y6Jw+7voTl0dOk6aNqCsRHo5ZwBLTgCoEJ1oY+AHY+r9UD79828/bS0dfgujIIje81L2rC4w
k0+x21qNv7f86Tq84q4FLwwH/oGJD6tQrrza4cm1GpsE0W/nxsBDDYMfXQZe2nxLlUEOznZzDjMZ
iBsGqADdXUb70mVH/n4f374Pc5P8VIPTFOg5Xw+u1S6artf1mr0MXB4NcqJGvKvV0YP4HMDDOqpv
jDgDcG/uBCcv641BVrWZr4Zo2IBr7bERdg04iIFhSJPV0WVJyA8166t2x6+bNJSeEqU9rqbgmOl7
0RMYfVlPXqVekxTeU3XQT4cBqDXth9e5GjxPG8Son3uwUxo9k8DReBywy6+6zxuq+04NeGGvwpID
sdTs3Tdwer2eT4fft82CHsVAVB0U/AXN8DZeX4jexaLmzgdm8yMOH9cDrnd1HYtSmzj3Nt5fz3s8
tJGtJVIc3QPvrE74JWqXhkpQWeN80Esjl0Hez8BzJkNp/MZY01Ricj/cj/MRcRY3phb6Ts1F9ntv
8xH5xHpX9jlfG6YRtGAlfb/wKzhVOuxwxk6T3Ky03RFVZItGP6bwNr6+joHh6Up3622YWqXp6jr3
Ly9EkXtRbqSok3OiwDOtI30P0gR79XLN2j3nq0d/h9QGboSLHC2UUMxx8CfVDakq4D2LtIYFKOgU
pebEYGDR4+rSij8QZrJUsPSPzYtMd2AN2ou1kBsjimHqFgorhx31dX9TU2LnLRJ9irIm5z5iLrIY
WTbWCeF0qOpc5G4aWWA97hDuO1vD8XDaEvNDjCmLU9m60KbGQz5VZ2RqB9qCSMEx5qmKY4q00Fg2
o6pjqCGAxk/S9F3F3BDy65ppVwN0XkMHKFkFWTgz6untgstDUbf38/FBAgcliVoY//Z+89PUrYh6
bF9aOIYBRFl8TCBKFMA+odPHkWhhomAxKOzQPyfKYhnTNbSLKXt+42q0r6mcSsBiKkdPnepXxTD6
xQCGmMUJzY03lziSZmU7IQUqxIWzhUQUKZFcfQg4mERkcaxRol6kGzrN+s5LjbHloLYC4P5DpD0F
RrxnSbUJHEAQDwwiq/VAaVa86HonPXz0ebPRnAC3LRKKAyShEo7juH27pNHPaEqqq/WqngsMrFOV
Li8256bgAr0aautlE4qOW8KiHYAP4gPNcBTAdk8mqfqy9RIrwjZWwTlGOsXmDbi8q64zQVRgQ0W8
VQEvHx/UGVFh8kEX6C8A3XJ4H4f+Oh3f250ce6Zq8N9XF2mYx1NQZWNaVadOAQOTALBoVpP1YczX
NLDH2/T+Yx+Gyf99dWXmC4Uip/sEe5/KHiqLIBZhWMakZULUsQ8b/HrY7cOuQuDo+bj9bHnhVjfs
9JwcF54/hR9tHd/6FjJWPnvprLsX3/st7A2JP+pZrIb1/Fwps2I9Rq3Xzev5mvnohzhjPB7y5XrY
Ewv0el4gdAJn4IhwnSdqkWFeJA7bFvVFttQi/byIt4O7+Ggz1GsmqNvuerjcXfjZO1xIOEDP89Wm
47m2/zNBOaPEWgTTIldyFZGowO0SiJ8xdvVetYxcLANm9vlPfEbJwew22+PltSoQmZ+AmWhceidN
dSkj5b93iCsEShpWGNIK3rhUuljh+PBVynWfPqzRgzV6H7ANR3o9fDuE97J63v9n17GasR+WkYlh
vcMQhzN0Hce/0fM3PmrOpy9C0Sv6mUo/NXf3jRVtz3GjuvZ15xvChzvzPdQcgryLPyrwL/T8hatG
UdM2Gf6FnL/oU3at6xT+RZ925cHt8QuDfhFTPO6L0Oo+anPkwsOvqPRNiN/o+I3EvzFpZ86G5OGu
Xdrn1qQKBl44wb8pmmBQ8KuEjkYeKHwDdM6cT4W9Qpv75HAFHlP3k0UQvxa4hlFJIzDuxxdPLy6e
ar+p50EkUay5zlGGIis9z7+MP+Oeg1O3GX4jqRaQiLD/vMU/4fMng4wed3Bzoknj+xwc46VIQhnI
pAzcq3LRPqDMv2gfUCbd4NtFmfYBpck+4UAA4EdJGtbBxESkjhg1oGSOt2YGmQs61SJpMblubBpR
yhl1e/6bPmkDEF5ApE74FQF+xSQcM8GgYsptsaxBFSJBwhc8/UqwLCJJgeAgpCmc0Xk6YcTn6tav
S9GVZxSte5Ei3f4gYkbRv7fDh3oAfUuiiN7kjwEkH2r09n1p9JoohSYXsq2G04tyd3Iuom4ME979
N85baS8EHs1du0dY+ZVi1ndaYRMSPPhFKPQisC90+WIynMF3rm0zG7hF3xdvskQY/uBdefOzWYC/
8ADMEFhtQbI10G6ha1LY2/7xdvnu9ltSNjg9MyAZINyWomcGHnMu7Ax3gjNbB87HdcKAdgzX3p3E
GJQQKOC5Yc1zxzT+O0DUKWBg9fgXQGylWWtdN+BfwItmQHCwDv8mXTTo/9Yx/DmBowsKZhDDL9wX
OHufcnkdw5m5A3JeyNSEtWMGpxkgN2EVhz0MbZ53enGiMMPm27hvMa/kkFJ1wuZSl84BATnrfvJc
KY7grBRvqklCXJYEoZtExIH0MymmTryv5CKnVN18Xm6KH2nqZMnT6/pQtmwb2UD3zsCFWLJ0dc2d
d6SdHNYAIsXZmUwloxf/CBCvMynTR5z4aCGI4m7jwNCgCJdzNii9GMzjZNRm7iNhgyer3T0tj7Yj
+SMy/xHR/hEQI+mDgYq/Z/hC139D4l+Y3DrvJoPgdotxj28ReV97FvdFGMlul1DZVOjQCSI09ELB
HcY3Plfz90BaxjDQdbwcEfRC+LibPw75SJ1XN/qsEg4GCWvodIAutW3+AqYkTzDp2G8fvwwm037C
vK4JOfB2OTtw5TyUBCl88zvq05VkYOKX8e6qiOyG9mG87tPW8mjd+gxHE/NCXHuHNDY4dEiV22g5
3Ge53DndONqYWcSG1oe9pRsHzTscncSpefhmhvlLIATzLts0rYRc0XQxAC81B8eIX0+fgp4ni3cJ
jeNi0he/hEQyPi/ag6zv8XDx2VXnWhOp0XAenV+JmpoMXG8Z7+ALpAcOluM0dtInis/Xw1QMEoag
+D5hIzbHItwToOBgI8TYbLgfIgcXNtSVpDvkUKDA2LfWzXTgYC4tyCbK9UAZN1/hZTy5bHoLoRfe
y2T3POdMp/EXLRHVZ7QT6xjLfACanvFrmL6QDJ2BE9UdWHrtdno2L+UzpizNPy6rphr81Gnw2O6W
lQZ9Cz64FiCcEOUbIOEEBPc0nhnvpxCoKOkUAPiLOmHuak1qhj5Jm6zvoCMdN138zZWrk5qt7/ua
Zpsq2tY9Fc+lpZylZUjNCoID0isLl6EQqdXvqt8euqRFAG7otjv44fKH3eb0eHsaCVkfepfE3aey
2KBTL9ez7zFO83HfJz4G3tNC7I7ftr6WFV8nUZfvpA1oPsJRAoDkG34YoDtgDGF7vU7k2XhMk1Zw
mBatC+z8l+31sD3dW1cycMAofd6YF+T+XQevqw+iEeJflfqQR+Txs4M47EHSGhdMiVEgHCvRKCcI
JEn7bDY05HmPPvCD2B+E2mA5w3O4jId04zissBNwigLrH1eZNBBBIgzKaJYK5kB5RONpGVhgqtHI
WvCmbOLUbmduzut8gcrxPOFPBeo+l+SrkHnR2jfWVVOLTKHWwaV8XLEmF8UiYSTE1GF2QkGhC055
RregkxVi6p+dduWhe1NfGSd3nTeCbpCDDTqZHfPC5QajzsRPOgV7y4Wwixf4xQtwRN+hua9uCc6Y
IzYm4Tu6TEX0V7AnII6o00rOJuc9p+6K4Qt1aaHYg7pYaCrq9P+GuqwO7MnwNFlo6liXeolhK+i0
gnDhaiFKCnAt7X1V5/kU6B0/mQInM54/S/L08oGiSAkp3O0nRuYyvnuhiRpcihNNfOD0/eJvPoVv
3W6c6BesJEb/t+vj6C7GYOvwAQgC2HKtpB0XWNkg8+rD9UhAzkNNLMUbVvgSQ4uO4ZkEfiYFHtsH
QDTJWQRDgJV6rxcksSON76gHD9/XGKsmHfF9saFOSF6oFWyRkRTZ+zWwHXxH5mVTsdU0/oqUAAyc
2ZlsvNcIsQfmJVYCItznZwX1Cj3OM1C8sTRkD9sRzn2sA7LAGeSdIXbEcboAl638jXOSUvE7mtBG
/myeUoe6dMKJigP95rwuwRbXDGcZ0gQK12LVtRAcZngpAU4jvDYCA2sWrAJJHCdsUb8hzBDA5ZSC
UsHRUS8QOponYuInBe/mqg+4qRsVGFg0PL4E5CiSasKOhmsoJUsWoa0lnNkUZP8w1pJkNnxPDJiC
zkIRQpB2lyvEvVNCHai8LhB7nVVwbuOqtAUkeTh8Mx3Uv9Jb44QkUbgkgfw/1DRMuKQpKElYk6L+
cBgJaJwEdEnbhtwT8WS89C4YuSfCEGQrrTic/bkpla+oWzqE7Q9vJnSSWqW/ceGWCFJ6L75HnUJC
AQALl/WJFrFbNvgtm9KSIzQ263DuAD6S05V8MGv1wBpThzftzdwcJ9hYFv6FKaUd0ZU1SDlVd6Dr
l3/Znnz3I2pPumsZnZklR1g7C9uirxM8LjAlWEL7FFSPXPXtHSsBDRcNaNRl6ZeBCygvGS4voZRT
qY0bbZETARVgEfqEKx+IfQ34+WC4Qqd1MB7EV1KIN9UiKPyMmgE6UE2CIqzDJP78lBUt6ooBb4MS
iAq8oTNcuNIr3pDQ6qwl2P3f4t2FITsoffF1PmhutBAao1tnJ2bBJ/wFJCv50TRsfUI8yNJJpkwY
iV+ZLiMIrK6aCS6Udb9hIamIm4HBgy7GMWLtVF405SpuXVOFFz/l3je4blRPSVXgA1nqsrfbWgVx
C/2WXGGIz2GMe3wxCOEMDdNNMXMubIpYAdSXeHpNrcbiCn505m67ex1j9R++FoA+Ol6cYDyxMGyu
om3cUAbnBW1wbg6SEPZ0/3p23OJbY9zwlTI4l0lTpWMf8CU2yDWIxspoBIQ2SZZPUAsrRuQR8fjp
aKH5Up9NGo2TnyKROUn67DtmzfgrfHRgKKlLjxkCeTzR1to1pAAE4ethpp4mL9Ubuz0uvkE3UekH
kGghFRzhn25J14rOn9pXCt9ex/FOLJT2poSfA9VDAmvQFagAgd1AsisPHEisAZGsQ0hrFxOA3dW4
TmAv4yfHe3/dOgQNviKsbOFgVsBMEs5iT/tDE05hsXRBmvk/ZGKdaUjFwScDXYk8jtAJh1WAWnmi
VvduMzM3F0kwzKzzvZd38xCb0D/Pjy6wK5+3lMRSJUpRlgI0jJZ2S99J2QfEg/YtLIZyJSeF2+uI
SvVDeU84uCBcU5LkoQYiiqq6ZEiikKCFxHVhjijjqxiZEUsm+RJmSHNWo/39+MWaReuoHxYCyAr1
r2NtgJj3aU0hGK55Qh56/HY5HnaHe0McwnoUOJIkCf3YRWD2XdxyeAEIKIhkLifGjEJEtDffXE8N
1zf3i0uU2Qsl5Ha6AhP6JiZiDtYq8a2EryD9n2YpHGMXV9ALg7i3ZAsoJ7YVmO6Nn5PYIuAPn57Q
eoXYnRon4YQDcNWpX/7+un1ZS3myIOBorGQEHPua3TYO6HIc7+Px3SG8Xg/7y4FYOh2ZOxQEHxJR
xx44q5W6Bkq98+0wa1ae7xNHPAIoJObOGuJ8Ybvaq/salwwNkUnBCSD6LjrBu2hn/4f4wTUts7KI
bT79xX8bZwxbb3DTqc0d9SBAcM9PfGQqNlkKnVVuHse2YaY+gsovAfwsryKiK+N6Gd38ePNObp7R
rwHYwP2+muYLhjrVqQN2Z6glQNwclMPffVjEe2XkDkCgxSvLCH5xRW1h+4I4PAjbhUD74vCC2nm6
Os+xYNJxfDtO/Xb62gWuJkSVb1A5CSH655Pv5+VhX56cunUQ2vCdTww8+eN0sPxL3hwIUDvvJzo/
4McldfT05L7jRFcZgoh/DANZc2n5RC9O2bt7Jwgm/TgAtMaJbW7rjFFfy/zXeXluTV06iGmouUQa
khv10yBaPRVeFF9Tx4YAqETquaDgHSUoWL6AzAGRF1pSgRyCz2jLBa8M1JsnavMum843P7UhItlF
8nz/i0l99LuDaHXvHMXF16SQ0rWnm3j92TXqcm9PsJvIry81Klrx9CD/FwdELKhWUZcPKEfPnUZ8
d01rd2ymrtD28vHnzxBbM9OCDVCHB+lnJ2v0XKTivvQdhki+ASibWC3Y10Stom4w7cA3J1Ll9qnr
B1lBr+sEQrwkAQGh1829B4LE9A2caVUjQfh5FvbT5NHH9dAgvsS7flaSTnbL31n/j2SxbE+7VwdS
Dz3UfJvd66+//Rj//V9OexReLAB4NLRkAwIiLmsX+8f5NMZ//Omw3x9xCDwHNRRCpxYW4bampR5P
P4NW2Mf7NXg2RHmSVHnVioltquyKP/72K1gQXYHpsshELY6a3aBbd92ZB3CJIg3soM489eZqnhtg
0NN4t5fphR9P/0BaKYczJ/R4kEI831hY4i+ureeHNmUyYHzf12gmXd8n17wbvz1W3yNY7XT2Fu3j
gtOxrBX0Fef0z7CS3lRXPWK+IHzQ6/3YXrRkDtnRN0exLhvKsj9GPu4qLgPFF3yeCDKvOM0TvF/x
I4KHAFXlFCusuTkJmDfUTCvqhVcT8tCkPUQk0DQtQEVaKAvntYdOMrolYXRRchdN2Pn4uQxcfauA
Hn13GDa0ll19s6xWTeXPv15kC3DsMD7MNLRTQ9TIvLZoyDaV8zS+qYJHDP2yjR2ZohCma8mZtQ+g
oGaX6W2ByqRVByjzgXOKCNpYJWE4qsdX3n9WMCNSwcwKS6jBtKIoTJSqduJJxqxisCQHfHfOYe1O
G/JAwHKuoutslQopRcJVIQRF7dizHllzbjEUb8RMVZPYtXACVvXCqJxdSRoWJXfJFnetMg14eThB
a/GWcAfKwsfFZd+QcuRr8mpp3QqVRq66qCQeKgKdfozCgo+NWOfm9qH5w3a3e7w9/HSVL66Z9C0W
BM7/M7R7nuCg6xvs3zLNTwwhk9CI303MeXrH1xKpPYe3wOe8QkKqpK78+4MbQHUf8cZ+IvXumDw5
sDEfhmBqY2/yesf3BDpt+Jk7KlskFkz73C0SXvffg66zXhZnmYSfzv5A2/0+NGngW6yBqRjSkXy2
VIhspQjTigim6dLw7roCdtdVc7QjvyLdvCJTa4FrjzDBZ9KjMXQVCRrFOotd5Rf9eXz/dHF9s4nD
6HQ5TlqomXxiT4/5gp/eN4LYCCCbNHLjOl7G7f3PjzBNEe82KEFnSF/Xpopxoq4wzvlWT6MbGIUf
BrSqcRDiOeU3nh6QDRh1Ell2Bc7eN3TkT2S3w8kOdFAMVZZzajOUloMNcZwheepOCXqxTlfjEtd3
KyTG8feRoNgh7yc8b8ST/hpKUyIxI5gEMBdk/2P7Nn532s9DVX97v4w/HW523d0rftc8LeqhbnzA
XszgixjQdDN4MHNecHt6ce32k/gbX9yElyuCp/DLaZ31ulZDzhB+cFlaUeI3xtKl541zwusXC1EU
AHbkA2yQAuaBb3OUMIG80TOy1CSVOaJiBVVNIw5cam2aIUVwnc41kKnIQ9mUh6CtaQjvCZRbCDIF
FOWzjV026+TtvD88v6c2Ar6rD9r+yF+VEIC6WILXTDAHcEObr6+HRG6uU3tQ4CRvSg4UQWqLPx/7
fAlzhT4kMkBPcgX775RikBNiMJ3bzxzoMJ7yaSHLVJa3CKZKh3SBm5iDPkEF7pt3WyXTNp8k7Gcb
7G1Zaq15e5dvbnPjN6Jbfgf4S88cP2/sw8adyfl+Akxvb7dZPH4a745CfkDha4H2AJs6OABDTzk1
9PJ7pUijA/zhOG6AxOwmtP1ze6zTsZ8KRq0teWJhP6VUtEiGlsN9bphI0vrbowzccdD1zf+hlvKp
a5q0oB8yeFWc4ggzRXUmE1JywGyuaPxTFuAA+FTN4zlqUpNQVcAfCZnAYkNprqyjgT0tMhUD+kDP
x8Ne7gl/uQ5YBxxUmq+g1iB1SWoFF2eggEMeFEwfwlV+l4s5fM0f/b/46bwf/wMFQob3HbLLVLgM
iA9utxr+RtCfqAmBzB1Ky/6ff21+I/gC6AkwA2thnNw+j1//C31pBhrDh84YadxS+bw7UmYqCc6W
cAC5Y319edpudtvjzt1/2ycWwCcGg2dyAWKaAiTJMzArdFokPt4HNtUnWgODiW5vh+PmfnhzaWMH
1nXz4p6OM8vi0hZY4t3ch35uS5dCH+uMGvAKsamtqNOFt4Ibe+uGvKU/spS3e4/BfA3acLbz0N6H
gfp0HvIQS3awTLVC88NZMGnUsCV6X3m0zs1KkthZxGoW5x5DUfgM1DocWQczkN4oA0nVVHFw7j2i
KpMYKJfDHq9BnmtK8Ox+2Nw+ube0tEzxgcwdU4kZu4QHyWtOQ87fosnfaR9+TtZaO54YssGH/Gi6
ZScQYY1B5fYLIqfnoCb1kB0U133qHLSSDsBQD+6HrAycillSVA5cfzg+sEbnVpqGGesNBQJ1kZhj
Jbk3O7SIQSfhDKbAtC13ghiAHesuUPGV9EU5y8BTSS0QWyrJhRV/sxqGCCqaIZc+BuHJgfA/u9wt
zuogJtRw6OAapPPLkRASJre4FatYBR8xCIAzIGawl0fIz2fzY98IhQvdkpAtRC13SkQISnTFGZGB
4r/hgXZA8sOMvMxJvmnfgDbhccge8WJeYAW3cMXjUUHuJLomIehLPHHZlbYZ+8LMUvWXWgHkGv2h
JWL23+5+fNA6WVZE+XALbPSV24TxBUlLprroIpzeiqXnMwRlR+nqH3abT1TGBASPAXgFWezH4+af
Xzb/9kqsl06o9ez07t3g0mssHL/SISQQzvZus8ljPp6WLGWuD/qoXDoXAmYSLTefjokhJUK+pNU8
GhPY9rfxHmcDOyu/EbwEasiPlRnWs+TjfiY4shoxIwwTSRgmuqaEqokwKlypM+/KDHUZMYmHehuA
ICBkPW0zVzB5av1y2HpM9358erw0XoH1eXIrCJx4VblJj4ehodgCDZpyI7Vpl4DpaJAR4Xxd3Hxn
4BgujRprE2cR5QXKGvsPzGEITVhqBnffNLjBbLgw0TWa/uPx2b7LxfX2Pe3eW94lyFU7FTZlV2Ai
60ZEkZIkArPBaN2U2OP2eMPp0IBbCq2ZiNSsIhiMrY1cNsSSYip3cdJwZteIj6SdDtAOaFGTPzlv
PjkINqXxmbOUBTPTiTUYZTEVquhf/2dz/22FD6qJfeVBsP/ExQRQ27C+EVMibWQIr41CxGMAuzfC
+5BENL7MiRNQDInmxEt3nUI9gIGNDLr8WOh2RxxsIII/teBSFlSi9aQEDOOMWDOghuHz9nh0ExN8
Jq0N0jE5JqDCTKwpP8GUHgBEnxbxwvwvIe7/HcrYglcHdLa9UiIZIQrPb6gcrikpFEzbdqn1O04k
zaB5n3NTERc4gXCjW2u8Hnau1HB3uJGGIwi81lIv61ECwMoANFHJvsXk2wuZfTNdLWGL6rXJXnYF
3dtrODKq2AAuxuntqVHkbJbG3nDOhidMUGAQmYV7EvRJE4QFEsmgRHWZlp6OuSY3DWLAYGZNhexc
Ce1vVGBaMZk7vrHR3/n3w/G4DRjELKl2sBbP8+HkBkfYt8AbvWnYG1WlVr35am+xCdr9NSSrqAV1
vX1ovqDd0zkAWK1hRq0GG+P1aSwTdVi8nzBoA5n1uM1X80lWdAnYFJGn1o35EhMPEOuISlewDBmZ
OXcEMhL4dRy0CYk5+kRjU+I2S6K5y7ttrg/f3Y4wjHme9cqVzHTadjBQV02HdiyUiJWAzLCXdT1l
wx1/3Hz55+b131aYcUldu6xCXwMydU3NA2IdKk0AK5ykSbyskSgQkNilpmbTvuZBRG3gV+iJugyl
fRyDIwAozbd44EXU0NKFo+Fbw/0SQNFkvdWXFiHh/ZtqLj9/uGYCB6Sn/DwjjeyjJ/aRrCFQShSi
sMA+IFws4J0AyM90kgnHFuO6GfqS0HIgF8ggAxYHI7JHRq4FSyRgw7/hnbCCX2pq9z0d1cP1PwDK
HniGaSgAjdY8i7ZsZtgSjAIAyU4HCTPHpZ7O5+O4Pa1MLbKaCsdcujC+7ckaaNvrdfse5yoSkXsQ
xvQdCzgFtWG4W9aXJhkNVqVySioLrBq+glJ+vlN1ABLsDnSQme7QXdz2mrJTKSqCHhc8StZVMxcY
rCkwOBDMIpVp4zY3jZEc8uiKzkd13m7AwWhgVoFshmMmMK9CEc/Z5cpbtVztO2HOslqM3CoKj224
bd4mvDh6LpCScH3hzQwSmqUGyB/vN36IGqXFFBCNPg0wECE2TVAoz/OBmuRyMmbTEXEWlNZxSgeZ
vd6kxvX1E1IhF5NlXKY2tAGJFxPrJVLLdaxqoscliCAAsHI68YwPQs8oc+iSpkP/uF+qSq5JPd9c
g1UoHUbfvYzOvQhQ4OMQ1BEk4U/09bq9XFxAhBr5FGgegp/8H6pR3UA79sAC9D2lRHQcXBkJwN40
YuYKhPH61F9wcenX890bKmEOqOdzPP7Jyox4h8UGO4JQWQ6L62tpVAh4WROLB1ZZ1jcc3v3afAMo
Cwm1u2JoydRvhEzluCdU7MvxKsGGXV4iJMjcTopRolcGuCkbV+O9s+ioeidy2qLlKL9h1xCwdYkS
hKdCFz+B0AohtQEoBEjtdq0Ix5m1qgfW45WJ55E529ayf80aG/AmoCxzeWdEMglkfkGdH5mioBLJ
oLoGwBSx5ciVZG5ciDia0rX4dRbCNFjc3rPrsHkdw1GLxyAAAxR+rkyA7HFLG5gwcCZCXSFTCe8+
rx/t8HA04eXwWvzT4wymyBEEzW3etgRiRIKEgnfBugrIyhtol+2VdL4Ad/t6XfPBIhWCjTSF5EZd
CbzI0yywNrERTby282l/WKFRlYRIDYdkzDTMgsBw3wbgPH1uYRrsfDt4ayEWM60IO4ECZZ8Yk43E
GK7XDeltLQpCdriFBrxd7wAILEZD4E0Amoy5rCbLg9/gZOeGwQjC89r9XTNDulmE1wzuCPh+BKCG
kAwgx+qjmMkedmxj2eewI+IooHYQlL8WSjG5Wa4H8vlx91z5BenHHOSnzDGGaMODdVl84AqCxqpL
qD2RMBNVS7guiCn8UlcNjUEZ6gox8tIpnOv6XL8yCv9PHU7kMT/xsaLVphztF3IUkkmIT4Y2GdYL
/OtffnG7/9HFA6cwXOzN+O43Uv0hP31jGiIlMwyDXfMHP+1+Ws0t9c1rPHQpo9NSHobVT0v99S9/
Pjw/WyPBb9DeAVz19ri60dafAnCH+oF+an8qg+8ekUT+B74/ggikW/Zw4o3tmj6tlnSzXe1XS+Fw
qXdyIdX1PJ3bzBlmty3f3fKX6+HN0/mn+/a0315TDf9teqRvjUfSQ/5IKh380+VcffcQ8vnu/p+N
pacBEzJL81Zu4Tr+63G4jvu/WsPucUVC7P4+TNotALbaJX8bv2VL7r81bnZIDy7EbKf4c/9wfruc
T3aloE/GjFK3b9aevT/2DYIyQzev77RWz+D6py/n45fxp619rG9w8WB5/FeDVqdmuzKayxIwg32Q
T95aLt7MOoDkY/UoHfzgp2z/keey6hqwLZvRkyRxOfy2a5//l2/hDVo0lrYN8iOI3FohaYYuvRtQ
Tn7Bv20ft9the/r++MhI4nbf/3n8cojRFzd2B73lPlEdwPPZ1X/a3j5/SLyqbmoaKzPkP0Fhcd1A
ZA3m7UViXg9pFzXmjSuu598eEEQ/t5tASHdxtzRb6LRjn3Zt64hj/OepiCSqVkJLpCtXYu5s3r5y
X0/SuvB0Nd5mnwnv766BMbyTCGwnybjXOXHMq/1o/aQ//HyAObxEB/z81+P5nGnJZ/cvNufLdne4
vzeezgCykKV6v12OVom7dX/aXkoe+cFaRafx+Mmaa35IBn3HSufkx2vqIy69pzWnYvAy0mgCWgzv
31tiGFgOZq5tqIrhXeNWjQLGQwdpIKOolcbcgItyb+5XlJnHWJI77NW8KHN23RRP9cv+9rg+Pazt
tSu3ersf7rvX36zp2+DXAfCrt8jnJ/ol9NuB240teH4Is2/+3c9IoE0ImfSw9tNX9ASJdfs/X8fD
y+lnP9zkD2nPwfCcWrsVJsqs7u+u5cGloT7NMCAXVLt+t7DzFf/qjuDD0rQMEul1vXfFybtZSYd9
l4sKg4rJ9RcNyDAXPz/5KpuS/Mb7z77s5rfzdw+HmyQ0vupE0vgyRUkXawct4aFANNHxDrNbvUeQ
SWD/b9qUbPlEI8bfL6E+4A8rDJ1OHyKmhDhr+YAqd9GUrqk0b+I13LNhMLlyTLbNdn/YHv8WQVnF
qSesFujaRdpnJlGV0zvJWKhSVSjoCo9Fr8tlrncYItRWmpFqyF3rmaD+9gdf3fJTElx+5m+3QjNm
hh6tI4FczA29+vOt0JWWUFWuKw1hmH9rGeY8e6Ck04iHD4Cr1ssXFj9fLad8/LghqJJgYa4XztT2
AyWsqDDXkCywu7iWfj6v6prm+VrXVarcB8wEw/aKsLOVEvSmmcxJQtQlbVwuCNtfx1srKqIEqnJb
AZf/p+UM97nBwNZHiwKDu+UaslPzTKqpgTIqW8GnQeRGpUT8iemOvUuRZhIRIkJnGl12uNbN+I8W
EgzojR5SRJX/ruPzf7UYGgRdUqXGKgvv7loD/TNkhOi76NKL+W6AjHB6Qvj8u/3/PG73lvtTWKei
LYWfW0E54MLnxs2/30rSerXXyxpbZDx/LwZZLYSZamHjw6kVI9L5s1WjOIG2bp/XeBLA9/cjkBhu
1LXiVwrErzoYdMcCYi0rvgMGbKq59Av+/PxslcwHwq6yH4oAkFqlY9aaXAr4k3Bqd0sXvLOWLlC5
kaRWWYy7lu1l+EdUTEuaqiKE26/wpU+Pt5939+2XtivN8vDUTFd/OR4Pl9vHIhMg2OwtpJ6wtkK0
q2FxMSQtQKtqOlg7gPgJaKe+cF4+ah4b1ecGPOCon87Xy6vVby/vZQTxMl637QDXALas5oRmO6sB
tUkjr5E4wSP/ayL6Qz4iY8Cva3jIVub/Z8s/zvM6wAaqxu/X2pi9QMgfC5S0o1+DGJAsIRUfabOD
HED6MfcTfv1ovEV1vcn1iUG9btbyunVu7EHR//qHIwzA+Pc6XlL26Gvby7Le64AYpZWgYTsUb5VS
hwmnppGXko2NMJ7JTTyB6eh1sW0rR0wet+kQLg9WGHl+1g1IxM4H960rsrRJxuP4ZU3KB0jS3BDz
eumP5qgGNBqYW3drHh/EQF2sIllPpOFwbdkNBVNqLA3uKrFiBXAjHa5Rs5HMbO0PXw63ploCfo6T
noZRNmTL/O6HAlfAyFTE5C85eUxzUd8D69Hh+HS/Jml/mVqPHS+v21bqPg9VaJBFcfmMD3khQiDx
UEp9fCD7YHJLvelI/N5yJHiWPAXqLjv7So08AJ/Jp3nMx4IdLT8KII5yxq0kUJvuQwcCdwra+Yuk
xaXWx47O9MocsKBh7P74v8n2akGk/JoAg/9q5btNbv30zcxZy1MFAffVitbb1l4EtexekVnWesDs
oPUcBkzpPBtdZF0++Gpd7lPOfPtd9ZkaMhGGExjksmrIK2SwfmuJWmulm5xoDWFf8IZ9wTok3I4S
0hoAhRFIrC8S0+1w/6jI6kE8ygeqDe1Qtp7GrLNTV2YtFOY0FA7+tLuGCWlACDYPvpGWz3MzZCKR
SAwePj96TXB6sUJrDJmQRhgd2Gw6j3jVnIqayG44k8CHZtCHxsz1Fmpk6LE4EmG3PB22DWc/DMEE
aBTWZK3Xdhzd8hbL1CHvCd5yi34WjX12aZ9+eolcix9yUN4GZIgjQpoMKH40VwxiIN787hH48dpt
GwA09Np1aMUrQCCwYXbqLFxjNGrLtEys3iABgRqXfUCtMsR3pSBFo2sOSgdAQWhNQmRW6XNlOZSG
1yWQiC0tI1uiHOiupYNU4a85uNiQBh2SZ20HMm7Hc8v96kGiwZepd2uEmLVBTuPR5VhWuLnW/xI5
dFqsoI225zhImdNGv9JSzl3Hhr0MXMce4kNXlwKsin5BFG2R7sHsns+yZffoHPX8AcIZV8HADVCA
LI4rpq2h1zV4C1U4QIaCi7638qUsX6z/8PvF/Hzj/UyONxN40U0zS6NyI72vL7UuO2UgYQ1zN5J6
WLWVJwZQsDx/REWAWua5AfqIuwPz5EuvAoatQcIAq9g/j8S0yHqHD6RU82Bg1avYtd5JKQQP1san
/FfLsDa5g86Ipdc4/FCap1lYIZE2Wuf2H+f9h0JqfV8k9mUbMBC7IfhSgk/nx3U34vsF/p+jL6h9
MrjLNMIT4F0IqAsGM8TD69vfD2+Ppq4E/iVoT1HP+F5b4E1g8oM+6vWMr0NNZDBsmqVAGi13XPGK
nSYhgDozX19qmoUOAZXUWFXknKoIfdKsPjC5y6eJHF/LXuw1kqGhQRNNAJ1G0V2kVeQd00ZCoc8T
XpLe8QpUsOqAE7kOWf1r01cCyck8aEgmo8f9y+hbZzSiCEma+G61hohQf2tGqBmCf8VcctZyyXUe
45ALWPEHMcXUBgliagblAEDfYRtBlcJf/vfR+R5E54saCDomHRymRkg6re2nb4jGmzXrlntQsQ16
4NDI6iamTyJePs6q76zFqgMS467HKps2TxnsbaI7YAlSI1zSI3hZwp8SLX8qiRU/t3OgUnNx0d9b
xfoqT6f1uPRrmWXQOl+EzD6KwoYwU1ZNZ4BcBs0vsidy3AQvzj5ogx1ZJuzzICQFcN+H/9aKMW+u
tdDuMnem27HOaqFkw/ZjSG0jCdP8gNEGKsO17xlk/0zpEMvEEBTkCnNT25LD6fnoys8s670e7r+N
N7T5U/A7u9zj6tYkclpRYRCvdcH8oWuK3pbkLXIOLVn+uSnKk30I2hmTojz3YxtSfcCSbkSJT2jj
NZUENxD8LPeVKLzptRXJgBVDfX67qMBsoW1BTj/H7ldhi//Vgi3yjwet81rMRoQyccEg5oEhddcj
Nn5s+B8Sy49iqaFWOgBm9sSqCuMvawCrwLlhzk7mXDcF8+SAf7xBAM+SI3pFUcS1QRkGLfisB01a
MBxYPph1Zak0+mhVZApkqbqWWIPkBkEHz1Vr7eUVxeYANuZNcUEHSiYIZoyVNLKEQ45tGj6UJVyj
MBlHwThEB6Sm3gHBE9+KkH8MRbUq3QuKgPN6zVrpQLMTVI/gspZ26mXa/KoS6D6LTSaF9tuv43MJ
SWml9TqinQVlCWYNqxqSRiOQ34XT2jLXAewx3y3uoH3EUug0QrgIrmR1GQUIfOYtTirR39Uwf4NG
lLEA8B/VFQPELWXZJeRi3ltOrEFNMiwOOkeaGnHLRCG+96xuVVOuoQuALSlbuuE5nC8rCh4NAHAz
54AyuU5YFi/YaBjXAQcGumG/fhhsproeLdoj65da+RbgZOXtihYw8dRSmxZsgMQGKMlrhY8f6KQC
oMwhfds1ATAtGuAo/qWVco5w0AZYIX9+PbQaWe1bPZBAYbUPwKDtLd6bhTZ9bppzvIr2A1VaMnej
GUmia6qUVBGOoZrztNo3QJSWyGVfFVHXVAQD2lduYWasQZPKIUdVcArq9GFA4TB0GOCn9jiFXdR4
pUIjUqWaq0AVAscqVv2Z1G2SvmKgT3JoT8XDBWUxDS9XoSkszB74Y30MYYGxgNrwuw/ZntJIg+QY
Gw5U6hjV8KJA1skNTV4FNQ397xrQLImk9H79I0WQVqeqnB5W9J5shXxEh/gIZOj1tqb97JArVrSj
QCvbIrAOdy0k7G2Fz6EkamGSrPtfLdbFurrWYn3r/YMOjSdhvPtxG54haHS8wdyqznIA0tDHySVo
jd++pRwHjmTL6l01eKurhsh7q7QE+EISNuJTDKuKxnJxY5zPRzCuQaGlNevyrZl8N7AevMjrrmoT
28gad/nqKxuXfPCmAeChiDkvbJxVcR6Jx+6qhNEKCIOYeN4/fDVishUVByJiLd4L3vOcsWvcs1nX
82TlRVvxgDV3xfzx/1jhg7LhD/ZgbdrSSnykvaLv8dCoHuuRDnjrgpZrDHZQ+5hXVVJmTjPaCmRb
XkNQKyptZsYlgoipwnNb0SNdFGMMa6qJWwaTGdZUeKwWMEDoOhxt31FJrNWebSdQi5kIFpVJ+0aY
vUdbti9bvnygJAOEupzO6AVmJDTb4fdIKmeeW5sl4Qn/o8iyUGb8Kn+x/3i/vBbWReQ4XDlg1nbL
shIGTcpUemO1IkCDQjzj7ypWWoOdYcBhZSB7beE9E0iw8tcPJXzty2KtehZY+DiJkKZghYTTCZxZ
CxLKOsKZpoc4/GdLFegcYUz2rVkTTgNWfjkOAGmtn8MxGtFJhY4JQXtWuRt/NJps9aAEzuNUOAYC
8tnB+O9WJPSMLgAk3Urb7nFdNzJmACDEErJBG0zfPti0Hgf4400yV4JsDBJ2wGVry6QWeSs2JZqB
8VbLQDR9jAO4VnZLYwZtv4kSdTtyzHJ9pdcDr35bmYbRhbJWK7HQK4HlIMzlu1F2mHpc5axAZTtA
f76dXl57HxA8p8rJH2hcrg2Hhg5tQctVh3bZaKAR98KzzS0Q3aomuB0+JwgHvKTeW41JFR3iy1C6
cWXCmXdIbxgE391MjUt62FMNhN2EgMpcgdd6j32w8VjB1h9PNqyDEA9MIlmNXz/ezUF1AB1QZAZp
w2NNll3Lj2czVpdt9x1me9CNw5vNYgXSfJrojNzsT29Q7HrdgWzXOgJQhywhzIQSWVTcN5SJyMvW
G9WpLU5WGokJ1rJ865pvsK4ofxswP6QZaB+QhfBswFoVB+BpzGEbWK9XKrmWjuvz9+Eo7KA5VWNA
8ZWLEYpvTR1gQAzcQyp7MqfdMkthFYAsO63TzSXCv29pLI4141sVkmxh9KD7VbB/ZTxlCw2f953V
q+byrGoeAXs+aeeHrmuT3exnQmTZXv+YrpUSrUdGZ3T8x4qsM947qka1qy5VFR05GNbg74N94vCK
AzKZ+/+0sjYdEklEYfxNggVFlKGtu+5a6i/GHhoBty6vUV1RmvitWZpokFw2Uui+Bvstu//tFNg1
ASTdKI9blCDJVgnSgFjIRO/Adn82y2P5lAjZtQzOphLUWAqgDEJNEiuLQzUSKxztJof6Hqzle4j8
Zhf7/WiRnMIsF2qWYauJNLRZM51bsdWa3XN6ZJYhaf18+2DVY4fFEXAY7ioMnULa1ZTk9ceLHDGX
gzJvpt7Nja5fA5ojX+EnROOp4SNggxbaji+I1jZ8Xr0AwbgfOX8Zr8/H81f/zfQPm/PJPsBpvLqf
mSbB/8n+vVzZw1+mUsghM3rgWmcriq9v59sdruek0je33c1tdz0fj3/6Vtu7/4UpTOt+wfUl0h/9
BfvOh6fjSP1EP/+Eiw4ws/iJZ2gc4peRtuqiW7EN1we2uh+ft25Faq8q/Ya7cLb2N15O9gye3L12
3DD0GJPFiR9jQR9p5+jdgDt2IPf+j+5b4PsWiVLY3FnzA9e/fdzP1NXL/AgfpvXXw34/nqhf0OkX
3CnkH70kjl8S/2OHaD7wFHAFVONWtoefj2t5/XC5b05WoI/7qrRy51dengvfN9y/YzCd3Ga2t9t4
vW+et4ejte83FwfaPd23LyOxmM4XC+Ij7IT4SqWvunkLOx+1Ib5i81cOkB15M57aqn2rFLZH4nOe
flQUW918vVpTifhW5scMlPP07hBF49XpUuLbbv7W97oS4eWu42VrvZ74if/75uv49PkQCGMOZNoH
sB7DFV/fi9ewPrCtnx7Pbmd7u8PTfrw64OmEtji80U9q0lkHr3SGiULs/41zb7Kw5d3r4bi3v4Gv
14Nn81oG29/tvr2v2F46Lg8ldYEO4obcQtvnu4OEn+xKPtkwwn5qlkQqPBZ2ml6KOQpj8Z2dL+Xt
8qkXSMKqYEsZk1N4WCgJ9p01Hl9GqzzHr9+fv+HLJEYBusKVGHgHb/O47LeWbtEDVUl+pqnpEdHv
vfkBnk6Tp/DEam0mfD0jcw4m1vvlfHUPdtw65xNfMImf0MPULxis50CazTOa9OgAZxOXaH6caBv4
Np6CrV9sfSVPNRdrhuNLAHGcYiWoRMDXGfK3hlvxoJ5wufj3gFZiT3W3wPa2OXuzzH+0H8dLVDCb
8e1ptAp3HzZ3+H2Mv3DbnM6b4/bdKjrLKIeXl/F6sxqzxtCOpEMvQOETrcw9IotgnfCzmydLWHZ1
x9d23RBsCLEtfMlJXLv2KY6Pu7AiumNipW5eydewVxY6vL2N+4MDEYXqvhDK+9djvL4Th+7Tur6z
uF/3j9wsIzbP5h8BCL7WjxDrifRSro6QRbf7/2OCmBS177XrfiZOvv/I+sTND+nmxRyY87bYtH40
qtx/Hp6v27eR2KtKV+zKl8Nqf5hNiMdUOt1KmCAUOdT6qv4DB+bzKm/ch+xZdS0XI+AiEoY3Zdzq
yfP+p5W9zjHGP54EjTf3vMsYPnZSbnM/37fHxs+LrksrOA3HTeoL4D/98XDzFoYLvfz9Pr7VbXq/
G2nSWgGf1iOjTlxLm39uj5tjWNybApvddXsjLkqD1b17zOf0/nTXfzk93hwiyBka1cgbvjozxTNE
lEYGh70Rh+91WsDbB6k19bS9v5/u4wtiPgZaAI+h/B9BTHxxQZbZdKLvSfAebMQbeax5T4vgOr5H
DvbobBJuFsv/42H57OoIhziqTMs4gchjSxJvT0Ug6NGZG+g5Gbjw3o+XCC/mLBYHlLCq/mp9qI0i
rkrNSzBf+Wz/pIiKuJXEiMxpb5bYaE79ek6ylH/YUXRkFLhfk93vL8uCYYJdABlon6gzk3T10sHa
zi4k+Wl8+e7eEhJMoEKCYL1K0JDgP7BdFyfkEbxTvqYgXlOA13RJGfukvCLMtpeL9XNasgyI5d7L
ssCKz4/ff/dGZNwQfqIhMYq/QBH5sDyRJE6UmIT5YkHWJXBa4DL89xUHBOB8x1gOd7t7D8+L3sYZ
RJeIUWifllKVCz2cDvfD9mj1KXWhgOEdhnlSDuEuXdKxSYd8gKJNekELU8SWlv1+dsdx63zO/bqd
KSBIhI9FibSzkBKO7b/3UfZW7Pawv7SSvzoR+1u8zBUCt+/ff9u+/MPaMZvjebc9+r9ZBrL+ERL3
DwsDanQwFh4XDsna9jNCYg7OepN/Id6AYFsorVQiMnzlIhdCLA2EjvZ/iNpjr+JmBbbp/s4VqAVx
8olgIwbY2EEIWLRS7+/H8fY6jpbeLKkdnPNvzcj9GGjEPurhRLyIKblBNu4txxYRmkjXDZlJ7jsb
9/xsXbnHaX8DWoCQ/oBzXWqIpwzfJ3cJcUvBKT3c3IjpYGC7/3JOq+AlLLJWchA+Plrr/HbZEs32
jVSL8m/6Il1WMvasaV8meCbnflbI+0NKWaiCptN6v5E1V8E0AA9hvCPSQUQnYQsAN8EdicfIRhhh
tEoV8AGwo5Nzk2ybuphstv4CNtfQx6QlkZJyEtLnSznQBq2tQFt98CxdVQO0P6GAMnFeEO+iBZrg
hI1DQJ+hEKtAOzYtPgkUtYuiTrLg4AJmz0fyZQde8mZXtTsJooKXKbzQmM2Uiwv8pRAlqfwEcAy0
80G0aPodMN1OMCE4ozNqkOde56NqVtJOAnR7w6hxW6y8LT1JVz61iNtiKYhA+T3QJx6ZPafBP/n8
BxSnMSNyPG/33p4Zr9fzdTN+cZZE7SGCROxq0/ziUrvj+TTau7o+TpvbeHxGVwGlrN7b7uEq29v7
aRcABej3Ju9zpZBd4AuA9m4pVR0XmPuA+iQgfhX5QN4YiI1rXMfx27h7eMcOXQCg57o5IhwXsGfw
7/H0eHo6OvsNXSUfVee2kcmJzeVbDFE7vfSNcpv7UuSo/26ru1X2FogbiBDEj4Tz/vZ0Ps6xs++m
VA4qCKBNaHwoHcwqPlBb0NBMM17nJk4nv1RJNQofuo/d0LbxUjZ36xKcn5+trnserUVxoiI5QN4I
nxKVVcdNE45bMsJ8I94hxaqSlFkRC+iKEMdQNYG/OTyFQ8lYpny9nk+H38MDEVIQmnQ6GYle/d7G
F++qEFpnANrbI3WBWfRyHAmjHjrFfopP/W45cbfpeYy7ZxOZcnd+uxzHb870dIFTXyxzeD7sGpGb
PtGc9rPaY/z1cRujBXsdraO228zJbSczxlYUDsYzPFxowgvFksUZu0ncMngkLlPA0+2MzHqGDQyF
6ao/QjucIh5gCbowHhcLb5I2R4Wue3b27V1809HCFI1v2HCDKmIcenZ2Ntfz+R6HdN6Id4Ih1z7t
ZXu8/+34fnl1l0PJCvi58GtUTMDpkt/O+5kiSYuwL+PApm7xuKBEy+ABO3QinkfJaK/I2/3jN9cN
zimLAIiZPEOv2oh7A25x+EPWthhlSXZyNHyigeB1AVUuauE767K2YneiTKlEnEPMOjilMGcfGhTW
QyYMnJg5v3NJhotCWMH+63jz0+Fa6xqoZLSPPNUDxuPb5f4et2qp5nx0kQZSohnAXp0H54iqjGWE
jE2v64dOD93Clv/+fD6OW2IbDJzQeN9Z1FXy+K/H9ni4v1NsxkrKEK0wU1k2+NfHaef+y3bcSZax
okWwO1EjIeR43VO4vjxNVb0tH1mUsbV2ImfROo2w98oId98K6heFEsTSaefCRVdFGW4LbShdD3Qq
aAcklyNCEYnw2RrJG/ftFFsiLJUeOvkqBU6fR99TweV9DydGfG9K6Smab1AHqhMEN5QZNQ5CYK0Q
gOg06tHmCTmCVgUa4YtzU9ZYqxpsxAHh6uGQw8kBG50E/350WGNKjkNHIuSeGpcPim8I6oRehkza
tZSPhpCPBiRmXCyXdazLD4v/voQZ1L7K1y0rmpUREZnp9PKOY5CcMoN4mQNhzasGxT3EZS/yvBHj
+nY4bt7G++t5f0Nt2A58LDyYqq+UsMdPd9HKeN9cv+FBBVC56F3T2RN3tReEIDG40fvj2do1Pupt
TZMffvtpM1mfBAkAlne9vXia25SS522OU6KeAvf673imOB7mHzzUrVuR0S3L+ggK1eXL6f8uQx7E
7obSdOhLTExCaeNP1pdx1a5qBrYswHTJHq+tYt2KRyMFWKRrTHo5bPaPkFk9b/fEckM9lbfIYVpf
jEoJKrMqF/oBcavAzoT/Q1WhQCucDqkL0wX4ZROMJUH4/+e2OT2wypggCCC/6PiUbsHfzxFx5cJm
/i/u32xeD98O4+bt8M2+TNcNf/pWBzBrDgCnfMas+iXcVp/tUzqHyLe1vmz3zsDH10qgTY/jCc+x
fbImuzukg5vtrRe4e4TCJl8M9GQ1DYYC1UxlC0YHwW9ud7Z7unlP2V3jpmObJ3ydhH/2XXFZWqdZ
7BMWSDDvIDfIk1mTas3hAIo/9dieQMZ/5LYA/FjPRX2AGhK43XUlOFq6kHWKC68J0MTDjOSvEFeP
EgQbchRv1DWX7cuYKNVDx33sN5V44IfsEkCZOZ5gMRn9x6lMDSJ7CD58kDrUYHIylTkP3V+v58fL
a0Quh6O+Pl7CVokHYOkBfFXp/wdEpwaec0Lf3mp6leaG00UCeDK8yBDeJyDsQ1HBo9ISrtTBnnAc
7Sr3N7wkYwAVKIyiW1wodjmQXrI/JnfUkOSXi3aYoX3b2fNuOHHbXWIu3zbE5Itvb43aFd1pkmxn
rD2xgskptGufzxWfXQ/7SEs4KfF8ZbXY2ywoW6cEFTpyzuKtfwOK3kEtVWqF8ocFbgdqHtRyp/bM
T9vd55eri06GjWbKgriCRIagr+LEVN+79Vwvt6OLbPi49TecuXKi093H9uhTuFOZEb5fmWtb9b/U
jGqQGQ0I9nFV1nXLgpRgSt8Pn3P7y89c8cF7tDKT96nsFjTPcF9+d9q9nq9o4SsHhak+yjvMX/5y
damV+2G84T+bKridUarTxz+fnM1MbDjV24LBO+nLTw6jRPxwqmQGhe/5rokfT/XEfkaRmr/+87g7
X2O+Br2xVGgLFIL72uc3fvbtOPwa/3a+Hn53YI8jvpUOezgfDMdvYEgf+hqbPt2Aw+eTJ+hTrTkY
R+K//eHP3/32Hf4hqDHu52rHRKD4h6lyGHSFv71tj8e/nk94ZTAHJceOZHpdEDb+ocJe6S/Pz1Yo
ERzR50QdbtYysqdJ/EESC/rx4ulS55ZC6C8mNnIuo+bFIQlaBGzE5/6MiY3wU/aJ731loCjuh/hN
0FRBpohPKCq8+U+mQXsvPi2HLQTK+j2sppvMeQfB9V/EXm+thUDTAUBd2cc4TYPac6DN4scVLCK+
EuhnwaRvuaSiVN9tr/fzn05jEOhfDyek1tFDEE2qhfIIfJFANkEx4V+mkrgQ3p1Cg76Li70FF8vE
vwaVaU6ostgd53a09hXxo6luzvFcpPunx/1eT0yGyjJQFtn54YWJcp/qJcPhx1JFGmO+LMFMUIWn
M/WhHkDZnXugaJ76mJOVs77hU4hTE4nasIdUNQm6M7kM1ON6Oew+E3ele1Bj2Lk/ourZPjkb54Kf
W4Iy0jCeM3Id9CgD7/282ft8ybv14U5VeeX5fRouwuZhn2Ev9vsIG5iWmUon0ZVUWsnTfQwVLFdy
GyrMuMv5Rnlx4Qd0+oHgpIscURlvIRrdePjRrzYxPPNdt32boUCy5/07MDfR3UwTAtg0czMmKmYz
/xIV8OylTvvyJduN3U2tk12i2I3qCFfpUODH4/lrrLR0qPibs473h+u8sutTgN4gK28wFuMdDxd8
L6oDJMIA08wPe36uPTG+DXB1voNI3Mab/V8dLsexuLEbvrWpvy2bq3X5tLX/LbHxeWUX3YjEUTzl
fny+4ejdsEMOrpx7OTft8Nm7BzOZNChCyTr1T1X0gQJcHOFw2t5H6tISH0nPBRFAkO8HP1EiIuVC
cYrPwJfkPhVEiS9mwKmcKOxiAfc5lnv4l/N9E8KDzYXL00/hSyd5NHgF04GuB8TtAGp3OdupALwu
xnD6AQdzWU0WjTLgyAY/fnN53d5GQhL0pVgdVnHfH6F58FNeHTPQi+Pu+it0vB6XCjcH2NqFfiY5
4UKxxH0DBeQi6izW92bktP7R4W2xqIT+74RuCOakNeUOz9UN+Vjt5M3q0kYI8Ahne+0+uyGzz66a
3ar6+/nlur0gYLiwpJ6XjGC4QFO7x/WG1eKGD8X84RDKFIPG21pjzPWS8e0qN25n+BqTi+jP424k
PMr5dMYrgMKPm/RheJloR25P1k5qXGKfvg3vEMj/eWv94Ns78aFKH8ZwfGw34NOSxIcyXVUf5ay/
4+v75X72n4S/bl522CqMpYfyRl2QbPG7q73ueYY6vkQiH+8XaXQJD7YnFkpX6AOp+F7C4ARipfSQ
frQNjx7WNfQSij7Wy2gFxMNN8QwQ0amhF2oCd30y350FFXWka6D7+QYD/I1WJqxLprTwcfZuqqgN
BF5Z7EaslpwDIUMd1H9P+aF/uNT7X+fhbt+//32PH2/QRSuQqdbi4AyV7Wk8P27AyvM5zdiABt8c
aC8S3Zd5c5un67j9nKsX/O4ZcIGGxJwnD3P4+fmXLdXmpAPepXfXzNSUgf+JJXoIG3oKWJeu41i1
IDegBSXokQYWCf2quk7ga/CiRynH1iD2wU2+D1GuMR+GEYdJZSW+QWJXLnI43Vyyoes6YpFUIgNa
gtV2Qi3S5Ysw7EokcSVgzlIM1NTXIG4EtAz2Eb8OW4M4C2jt7euOYkHpbbz/EgURwTYpKAG67Pvf
d4Bey3j77X27knWGxDpuMwOg1evDeh/W2PDdjhr9jbpBltGLBdW79h9WWxJsDCIZDjTBIp1Mbl5a
i2JmcKAhWbpApDsz0Av126u968/EfhYBkqnz3P1xtULu6jqZx+fy6SfizdKuXGQzgoRuB9+h2vVd
37w9bi7DfLessLEPd3B2ntVt969nf25Kxqerlz4oMqS0FsjiEAukEIzz0GKMa0HQ2y/nA6EhDIhf
BSO/I1XgxgUXCIJKly/DH0tebWxoyLth8bmCx6spB6Lavjufo8VxHQgDOpqIs10SXxzGW1iFWAJ0
KGOzeeA8u+jKBQj+paGpEoe4kHwszQ49q5o7SNp2MIAxbuNjb7dx3N5urjTDC/PL9oWSGYleQDxm
yek+Ffn1sD9/pZg+XYyHdPMISAiN35p2F+sg2XkHcygZfr311fXpaD7twBBF1SC9vgPWkk7hP/9E
DnZ3o2o3wiWnc/HQmbifOquM951rvBVqmJr2JDDcXDadsaUpcfy6faeoDvSu4/MYVrBA843hHkyK
cYE3CsgF56mfr5QZCi5Wh4i8llX9R6zBS0ElCqU3JweIRaBh7bwS2ReL+KZeWJ1tWCNxZM/mRN7S
tGoRGzhP7zttLgT42/b6cnDQoONxaxmeWkzk3fImw8QnWqyQnINq56v//uSs/e1twgh4hPLVp5fs
v9keXXM9vKOeN4VAZ39QPk2sO5clrlm8zxYXMZ8GlID/zEUxpr9bmRz/0ZGTEx4+0UWEJpKT69uM
6Em0w2XQqLLL4OZOssG+99LQPiC2DvBs+7mMPF9njOE2r/lQHzkFSXxVviQ35Jw8bKUUQfBAihiF
uN7j//Z+TB1fEYrMPNg0bs99OiUXsE+BBQEm/bgvQ3B3btIdSAzniswnBzjSaSX8u8SZvqaezd8V
v01YH5l5lxBg8ALWnwQoldD5YLmhw8kH1LaU+IOee3Ehiz2hW+mBfTfjfZevg++BLS53js9aKXF0
nZsJOlcBijr3cpMpc3o5Pqy0DPHRSVI498P/a2w/oDGotxwCtbFvbLN+CWAKMZXQ9h4T4hR+ONP6
9Qq7fij5+HZ3YH3s60QrHrwRaCVswe4lbGr9XpIJ4NFJU0DSSZGQBHzyrqoL5IbNuQ4nboPY6wH0
v8paXbtivaB8AgI6KAxXQYHh4XiCafrhpnwKbbn8m18J/VJl/ahj6VDsRI4wtQ5lQdMPpuEwUWGS
B49KYgIIqoBKDZnf/RhCu/5voTn3+XiLXs7OGgIoTzsllmS18+TM1OfSLeWNsygYNqH0GF0mKTNv
0wiwjKWUO651hqS+hDPRxCCXKJppFHVsHO6MBP/f+uiAb1PnvWbyCiP4c/otL8CiBLt9jbcVNe1t
8/p16sONBttTlFzNo2vtQrEd8DQZHSyY/Tfouuk6fJSHTetWFiS1OU8v4vJwaiAWamwpGTqQ8FxK
K7zOnLP2/wqjXzC/QIsZqOhrFMLlU1Bb0CDfTxoVkFWBNELzbDpEYCYGGma0Svhtv425shZdAbBg
epyY5A0t2MkNJPYH447dFyvYH0waUAlg6vd9fvZm2WWkDDy3RJJ3povt0ufm8bfYY8+fJfQ7p6IB
SWc5SEqkruwmIj7g+YC7QiCiKWecfbYISBXv0KpDEwLdk1mRRPmcLyePkqw8T9798tNGSoMli9OD
aLNzXPbPjd8XII43jzgLdvYpIgiO75DIyeVYv9Df3j46HCdPJ4AKHGbCJ8ztf0MSjokRhOmEYoYJ
+1KbwD9eVUSNExE49hdQjjbR9JrOHbq29DHM6ovSXROHA2WdM2DUmgTdTadpbQCQn0vbRwQIONR2
v48liRHBgW6lSsih03Q8xmbqZSj2Luj2dqFONlQpwg3mvrpuefuWwPR2cqKDCVYfr2ez2+5ex02I
E+O3k57co4aHFU+On0jlPLZY7PCGe0IM5Av9vHs2xAxBCJ66cDlNKcBlcJQsJthQ9kDNVwFmdRLA
TkD5fhFzr0rRIlwQugReVODKdCX454k6fCZbZK0ym7/OdEZcErJNcxACA3J20oCZ/W0NtX89xjm4
MoluIgrCWAoWsNkhLBCIm9tnr9/QRRLwAfj8gbTuZPPTWA432Td8Fm7Rjm6ETJJBGTojAhCZJUvr
2OCRgjjrB8JSgtwI880Cf8Wpe3hEMY7sKaANvhmYe4lyOg12BTwtEdqEiHygWdxTcNn8leBQHwEM
+mJWD3oEnZuYPXoRuCCOw4YgGUhABtGFQHedgl+hO2WJVMPNDxFeD8TyYgzO7/ng2g9NM+uwH5c5
zKXOA97TIYhJLBgpIt6fN/PIrPB0aAc80P9uMN45q9hkIIqKrZNK6j1HydT81gNFIgbNj9xM/9YX
2t63V5TQB5m5NDplU914z025HrqMqhHo5GL6uYwuNYt+Du7ZhMBcysZNJ4vRPUqc6pBWmeIBSRaH
9IjX0ZMEG9ElwGA+5jws1rMs3zkHyzfWi385Ud6NSP6Rrx0JTz+e/IwtkD6lzyTBhmB07XCaWDj6
wXFbt1fE84weMKipjvVHxfdkJFUHZxPUaKohgwyHHPfxfPOBsVTwiC2WduTHfUtQjxIjmDBPQTUo
18FAX459i6u9OHxbELgNKgLV7Hqmong9kx/z7BxE4pbkUHNtj+P2y/iBxwejG30pXsT7jnaFzE3P
nhC9bJFcXocR6WfP7BRw3qtJEgQP3PAmWRAk/bXSi/rUdL23645yDqM+A5GL2Ldq+txV7lpD4ffx
ekYXkHkttGncwmbvgC7EZFBZi8NMgMdTtiJ9NDDx0ncl6ErJEz3MxuuwLCxj0ije49bHNBokl+7X
z5bOnmdGJs75idB4IbRbgQgBPC0fzcK5nj/0MCZlmtX2OD2AjikJdRM/PJwgl5DBHJWuLTaP1PWL
a90fIC826+p4noUWQVfheaePHjL+6rcUSbqC7uJLVRanXWME1WVaVdUqO1o0CdoviKVIvXgzgd6F
6upqx4cTppUoooPzWVPzFJzvOXoYnt2qai0k0IUKTdrntzK/UlMlyz6/3owHiKiNDuGn+GmAuHcU
J6KrDHkfhGkYp/tllOPAlNSsSBc6/ucXorkeaMYIIlZzBCG5C7P/XPx751AK1LUXeVyAY6s3wpF5
erVDV3k9jNft1Roo1uxuONkucgDqcWcHqbYsfj6Qje/99fXoIiExgC0E8q0JeVJb5uv49HLEVoH1
t748JNah+o9CdbP722a1DwkiIT4eGQFxfpEYFCW8Ggb8Pwdni13/ps8vaI/7yVCfsoD9jJkM31qv
bHu8vG7xj5Pz67FDMT9k/RdXAfx03l7RlnUStFs3qd367xvfFi3gcsaXUL31u9WO+/Ebvo3k1vkG
TJE9nVTwuj5KfsJrhSPRhEj1agGANNXzfwuBstPWGfg+OPL739GN6YR4ENPsgwiRjiN//QqhDM45
IiGe2vCwNYg5+3nGPrJpgJ7LN+jjP/vxZo2d/RZ3R4Yu70sWUZCTyoyR2gBOi6CsIkCE7hZ2RJK+
2YZAd/tyvmdOVLAi0U2LXJdMs6Y9ujrObcmdssMp7h7fLbCtfFuIrnYVtz96F6CpmQu4CK5h2DDf
aboXfL0u7zbFpxrs4l49cL1y4djCPZji7X5nyEcYzWmIeAuL/wInXdAEzCvCqGUu1/Nl++JmncUb
9TOhQ7q6aJSI3gVQ7E4KiigG3W3ADe7f7fkPu2mwOnYDAObhOwnyvrRIZ//a3+sMgSTwWDrAp0E/
wZj4qvFCqoz2nhi64gA7jvHUMr+25gd4y+S+VYetiS4w5HPT+zYb3dbzEWwd6Qg/q+EOuaG1D1Lt
bBc/3t5mQt9sT+f7q/2r29/99Tpu9ziVA7bs/SvHlL1zAMKCniPDtKIAcT1PP4AfGop9n8viIH2U
5otld4oeG0iiGXuDUI3f60KooA/PajIJXff8uJOr8ZyMYkM+wiDQIMHsxYz/Q6G7iC4q8GLQvaia
6zCvuT88P4OFbw3joId9PH2zZk4o3dWcAfboZ+hI/OTH8+1D6lbmyLfsKRrilIE2ln4MxDShJ4Ri
4yGBcK0r1o39x9vDNVf4gt8A/CWRdOwf+6WWuQAJLTQsiLbn42ni9PPOrUMZn2AcbkgCwSlT9uf9
N/M/rbIR846fxYgMGFYJ90FTVVdq1qm90e3dvb4bwEKAF0FSwBnWsxp9+ICBn0YQW1z78CUaIQIB
c5VGYd/8TO/tfTO6QXZfPKxlFoWkMQKfbrr1kHzzk2oOpxA5t5v8ej3QFX9q3h7LoPgwwjJFKRrG
uArVAVMr77l0dtlYJ9oFqyOHaiaLaWWZZ3rv18fbBRhL4XHQtdI2Ae5qkqZPxzC4JlRTxzjJTezJ
ZKxJKRs1z8WdcMP29G9LiPb16ErXfM+XPenr6rRjkQHQM2ZIi6GLqDwn0GV4kjUrgB7QwLSaYHyr
9gAYMrWtm2CEm48sNeSwZF1eyfH6gfvVuRPJqfvNmMo+I7qorJ01M8M9YTiBffcBKWItYJqkCNcy
ORWXRJcxedatR7aEfs9rMdDXw/0+3u6bD9Ij7DWfIovYpRN3I2p38zKe38b79X3ztr2AZbY31/4f
XWrI2t/HGQ2PEzQ1PnpKnuP1I/ioDLAt0Ed+IpIvEGngOBWIoHZpJOJiLR8Pi7WLDUlWNqtT9RXp
gCWASmZTXRbLTN4oCrgyif7VNLB5Lr2D77FY+uurtYdaVXEm8YWapzByfK9+9i+OdAMFjoMH/xHP
ga1iylaO2HZCaYEDExLVm6BroRapMeRitSnDSD4ECNiHSXyysRhNvbykXuSkgROojemVK830glZ7
pesy3mabajt83n+8LzT5WqiKzqEqKiw798paFXNXicTYTB0CQjAi4mqzjPegVjyYQZo8VYdMmsyg
HKDsu19RFXd6UQZZoJxvzmy/HNANgcm7qRaxbLv3B4xIYEWKeZxAkcIqc07TjmP0DS9EBaF8CSEK
9s5mICDxEGKK4S5QkYscUcjxNFCeoDI2C7osVwsVT40yW4DXdEw7lfiD1RphCDE5nQvI63JHu+3p
y/bGm7W/CToJUCHVLSXfAG+31QEQaOID6AmFfvXz8q61iiv/fH52SdQRjYGJGFSMqFkRmugksCiR
9xVTrDzmqvicY6sfc/a18dV4Df6LUD2+is5XEeUqvgzENQK7t/xGMaUXcixt1jN5BoOiIgOMX03j
aQqRESWkfS8rxq0Icj6HC7fitaUqaTwWUE06dz0BdNJB8BJ02bkx568nXBgZOPl5xv2GWM9pfNnE
fCK4vVgwmICaM4KdlHpgimzWGHP2nn2mLYy62O3Go5txBgERzepWMJcSBEqKQm/3iARNqYTMYhmo
foHm9qKBPrECJw6Nb80fxk+qBFdlWeHsZLa+2CVvK1YBM9xA6wUrM5zt4Hu2uzkyt8f2SNeTqwTB
zZeab2r7uMc62Pv5sXt1yfDWimDAsgf161TPFemPHCuactAejhW9ersNJ4usHXG08uASu0StxtzE
XggzZfm+7HEg2Xg9Bxxi86rS1ibgs3cOYazNR/NPMXVHW/gqQRFZ1pazkDRZRANdSdTsrih+z9tF
1weKusCAOV9BpyFyK3G6S7igQHotM0kXQZvzx5MRkygLXYjlV6TgNPPWi4Fp6mAaQCi+jyz38P13
06li9Tg+zTODMMUAwfz5CpCFUrl24TUJ90GWA/MKQab69np+HPe+udo8G2lKVLhWJtOwQP9bjmY9
s0//C2eflLty/458LcNy8V3EVqH9044AKzAo28ztx2Z2aF2KAHtRvlYpPb9Dgm+extftl8P5Mfu+
h5u/rDkN72uYgM5EqV0kjgHloTXpFPoRuI7tqeNDU0yIJFEBNr3KkCgnKKC4XTyhpDrfgiGddcas
UpQMdFmywGdSic9EpMRUqidgU9tCkcOB87TfjgLxqwR0L/hgteWnB3BLYHzBHycZ9ElNLh8LtRtu
//2jYgDit2bNG1Cd7bObmg0JE+oRUtAkVzDOF9AFalLQmFEwzRecaX8O1+5NsPPj7sFOqEkwG7fo
j0BR4WP4HUSBN20Lme4ONDaYVIxre7fGqpOF0SprmgF9+8RIYDrSBPOp3opLGj7w3QDDsJ8NsdKE
bitwMEcZ8OTMUbOc+F84DUJ9xGmYlTR6dDCs1/kjSkwNWapBI7fxPHAUrRM6fgSGgqeCgefjNurj
LE2A1nyqFBvPuQ1PlAav8mObBXtNifQQArVWud1ejO1N9ZHwv0CrtlIZSKp6mZtFhM9R1MgitRLs
HYeUixWIATW3v26/HvA+bUOKXzDje0dE0Gz07vwnU6gSz/qphJRjMU4Z+5yOX/POFXBQB7qUyT2y
XJh4Idf0VIY8Ky0yTI1rE2NXoIaMDxzM5Z5LJqYS0afx/tUNSyU70akE7mFZTTHstHaDBVfjvuHV
94WTUyjNKP/J+PQAZGyKWPmK01A+23jngeVb6AtuiwHzUhW1JJhRNbcCLDBH9kd6OjyYyw6qwa6j
60Y83uYOaK1TypqPsqBmugZIJZwny/p9ZQzlWQF/cWDRhHxTZtO0jlF1tQpkB5VVUgBdnEdsMFZA
XYS+r11F1rYoRCHo7Rhopflw/LCswI0F/w8/FsZ1y0UvqM8Vp8LWOrUZC7igqdV9WAP2saDpJd21
r3eOZ5srRZtNGlVCAucckFXiva/O8hjg2DFfIagKeL2n4aZJ3FejbKERO72DYciNQpVFH2eApJ8Z
18iRqlQswLKC8rJBamORHsjAGb8fRtkc5zTfhDiezKOn8zeiy5pO8blp6LQGbTM2593u+Lj5aJiH
Hvh2jChMos8rOgWxErrGUKsp992D0goeI7d1bdDRQ4m8dlnVt/J0fKAAPZHgOn7AyoQj+fgFq1qh
SHUv9P0KULXPQuVRFGajtbEjxpYsP+Sm1tdg7le5X3EYmaPYImox7/kY8s3Tqr+TfYRNSm7kfYkK
qx9I1bzTMyXaTKIEldv7Zah3364k5Cbv76trKzUEtkl0FVEAMaN7u2xPP8fOiD/49Aha/geadPG5
T2qxjRBdbR5J8jzLr1fefOPK1aJXE8BmrivXMSmqkteVZtE733s3rhtiBiiNga5iet4TgB7N/bdT
VS16a7LW1XjaB0BKU1Ezk6IXKquPxm8fve8+O1s0cfbjeME7uJjUhdZHfIOirW0grwuLYwDQI3V5
213RIigKkWGScpqYRXxINKCrwhkQGRLZl2I0nk3Brm4zJrQapMi2ZnUFdXUc9M3rCkMudQ84rbo2
PtSamFeo/Q+KDQCTTrUYBN1Mcz5I0gFykWcpDP8oqQEY+i5drdQblc9TbsXqrBsOhBIAC2jmKFpN
lm1jvzmilZ8SeWvEDhMcLYSi7GtdUBe7wnWIzlWZzCs+ZpkaYlaNJos8iXsAmpqRbNf7YXukshEm
BVFjalabNpuveTswIm9WtIvbRu94qPUrDFB7sW/ZNAp0M5dzLrfCgbf7YfcZhfFKgAxms6SqQmLQ
WxiydqWyQyl4Un17Qvcp8NjJU6ytRqzB87a11bBx64IlQDhrP9KsX6cb0HsC/SlTYQRmbqB2Bsus
M6mBfXxb5NVor5yBPJ/T8SLCaSZYfN6mwO/u4EEeESFepAxIHJ4BQ0WG2XufSpCejufd51vsT+fQ
+BciuKtAM8RkVPoxmdHNjTVO8wav5zMKKzMyn+kRw+y+BGCalulSUvsz3jlP8BpkcU6FJDccW0CC
eLULDPBuUV3iR+SiDWQm3y/C4xIyo9F3NXbsnlGbswioXGemcKlAdWybBZ87Rui2XmJnMx/QITJg
+oua/aopPrJ29AsYHAu7vy0PR7YzNUUr16qUzFIvc9jZj5VwNo+11zbTMHuUssGgGuN75uv/Ljvx
3Czv4fkXEYPp07Qb3z8LZnx9UfL14KYn2T0njBR9i9VptZVbBJmIdrtKoxb9JmdPf/8Yw4CQrPF2
ODtKyIBigoVbNA5pE50EENNu1hw10RLDxCtOCVibhxFdtYHsGEWY/I4YGD8xN/YMsU80F8ZALozF
WgXCnEYIeX/+iu8SvGQKqlHNkWWidACscVX4wBUJuoxubyu6mqChpRf6VGCyhJ7bsJJkji6la9sK
7xYunsYeiJjRiu/mMqnMqNViB32oRAvAVsvK4KJ1FGuWowIM6pCgUw0TrrMb46YfrZD0ulbQsFbC
667KsoQU8YGLhihRdRlaoYUF4AFdc6gVIuCvSe9Q8dpMs2ovwA+SiMzNCJ3ls7JRPEf8VSQgtNCi
YhonGNy1SFeE1xZ7ms71EL0fNk+q7zV82dUk1VQT/3I6u2RqtGcnjI21gH8nO3QJnZPggoBjMQGR
fRHRsgeNusNZX62y/t2568eJM9sMpUEj55SSJA+JHq2qEKN1/La9/usxWhY7vOGUINJmmPRxF/0H
1A9KrTrTj+R7wqx7s9pEqJrh6GZgzoMCSWMctOLufJhnaHspdC87I2o7glKoKOijGsoLWSvNmQB3
NKH2LBdk69USaUTIPnfENJiEMb49eZANhiiYsnlTKRuWaqAEIm3hiJqXOBflr2bNHoycYkm6ZuXi
VH29iNmBDys8VFbovG7M1LHYDZIQrNZ53rndcS8NQa9qAmt1f5LYYBkaNvwDHhoeI4n1+MuHJ24b
vWhQh9jNmQsvTIKli97tUGPVqohDl+hr8wXiHCu/Bc9abTOvBzYpcyEdxvqYoY2Q2o8OVGAQ9+Iz
Hn1Rkg3bUwLAiasdbDZ+VOUMga6KXsG74oPvvesUEaMv4ymCWRvoGaZqIKOAjF5zPRygpDsWZrDG
noLb+328nrLpZvHffaDTed9VOjyBGV+1BUPywGU6rMYat+jl96AfiWQpvEisHTX1dbt3RuKL+0+i
WL4HvbkdMfLY3pX4AVcyhS4HeoQo/2AKTKIMIiMVr6KYZVDoyEXy91Oj27w3QHqj1NruuTGu2/A8
v6iKX1gR7DAJj6pSr4HEx+1NgCHoIN64+DxMIKQ7PJihOS8vDd3bzHPU0OXkYjZrKqtpH2yQIPKf
fNl0IlAMxtFFWB7t5+UivnCXyAKDyfAAWRYPEQa4NQ8i8sFePTJbEpAmupSqjSFcPjaIsqBXA0ay
u5BdRIg7I+X4vlksiW7JiHzKHZycBnbkUxXo8EqTILpTmZFpHw09mcxnJktkKdCQD10KDCbks6GI
7OpA8inIqPXzdUfcJEUM6IUBfIKcg0jLrbVQryZJcJXNU6qzGkqaPEenDHD4aH7pbZloirYkA3K2
qdkgug5IoCcjvdLFtMnDOs/E9+iGdq8OXXQ+4MgwY2qD/j56RX0VG1AhcrqBVM/yzZjFZhrfVyEo
CWKw+oY16OUT/ija709GSZsxuhz1oLKZ4BTyNlmJIJg31VI7LRhMhilb+k5nkhTor5M3Sph7ZE7l
7AQ8PiH0wTiXFAdMe8OXKApewr2KfVOUKtDodCqk7AHqg/gMlF+BDtR85W+yvNxXLzbcaBrZ8bzA
jMOi19O5UQbDQNcmcOeRtWjUlALtx/NqxcmNbgEPFeg8zbIYNSnsFGjLy2qjf7anVvnP3Nx8Kgjv
8Al/qKMEOpRCXyBrfzgNXAiF8GT1XSJdn33WeTnQlJsC4A88gazmFrO+XkqmdtRgaO3b4+ZGJjiX
Ba2A4MBXngcuhKoF37zOo0vP9/PufEwFbjfw18wVCtim+oVKf4Ex8DD4dnAJARPX2lrx8f52flAr
9GmF0CZNwxXSQGTKi/YrTQgLvxffjK+DK63zx8NKbF6JM5WaVMWVHGTqhAWawgJdWkD4qsnY+20/
Pj1eXuJ0D9fQJDZ9e36cgkY7YZBRL/OnOI/7Ed95LDqOl+3jNm58u3a0LaVfYIqAegLz2b0YtE5b
ub/6unY3b/mwo5Zi81LS+3mxxfuTJZrP3sbYbIF5PX7bjRdUM4bTiXnFrOBrueJ+vG+RvFdYiaeV
pM8qTDPa95+2zpr95Xp+cgx1vB+cbXtx/3gjzgp2BttJ3Mb7L+7qfz79ZTqeJXokUuhXmpL10lVN
cfeHnFb65/Z62FqF+c/t8UHQwJTMdHsJYKC++oSv5xv1enAV11UzzpKy+/geXPfjfv7h7GQrtSMJ
qLLzPCPx27GEvn28vBJbU2k57fF90R2ZhltNgox6L5XInKs0uyI73ffv/349bm7nx3U3/vuvPxIb
SkzDlY+lqOqNNzmGA47xf5jKnZ/jRa1gmCkP6zbGWHbxYMH98wuxRKJs44whI2EkJK1CnCpRNNe+
ol0vN0FsQIHP3b+JlkFBiISfH3bRJ3ruDeiXmtYYv2yP62UROJUfTzrVWmbbsppkf2i8EQPnCz1s
y43NHfndYl6CWHOoeWIBTuy4mU1R/8r2wrGfth5ScrgQzyEUkHQySTp81TWXqcFWfee4rk6n/uRv
5/3h+X1zPFv+Iu4VMFMo9umrD+TyZMQqXfHMMXL+erhvwJG9K2TPbU07Sg4CdvQB5464u6YKk+Ah
fNf1AReqqJcWDtmX8plPLWPfQmrAnu42unl2U4eIE9oH2INJOBhFEFrHyrnW3Hfw9pUSzka62YNe
7q/EUqnYkjlFwuYwqI9iziraL0Ysk+o+mfLlzDFJMR+N+FbWByu8Hl5ej/b/xzllsVVWYyAG56DA
kblo2mSHuq3EU/kpDdRpUlqECd8DuytOQ4/PtCuAoRPSJAvoZbx/t9uNtylFYQ2hi8vnjbe/nq//
OOOjW+2KYBaw8rVbMVPmxnsQn4EEm5h6702Hyezhk++D729oTzgMChjnvoOsmjycy+MeU123i2sh
8pP1PMa/fCFtfW6S1xB6PE4ZqLDG/298b62g0wrcQziHsCGXjD7GRE4o94knfAnBp+cz3rhYwZYB
/g8RY5ZuKsc0K9TbLvgioBNmHASjsn4iYQbO4XYn9gH8SSViwiuMK3MG9Pa0ta8Xcw0h7bAj2+vY
TYEK8pBCk8tNwQsj1gL99GT4Q+Br+Q1uj8RqsKdZlyb0JDlwe91exrmS7G17fTmciPUG0Cba8YKI
hHF9nBweyn9kGTLxINoKu1ew1IRHiTu1LwnTcdw40i8E/8LS7dCPfzbU/mLFrHONfxr3hy2xAhCU
MvRJ+++5o/mn+/Zql/jxvKWG1NlFgO4IYK8oqcfT++Y/N391a/2MGxRhDSAfYSvasJHd67h/HMf9
P7ZfDi/bxkpQTk5d3yKMa3qfT4+Li6OO+x8+fWq8VZB4XamLHCTg//7f/xdQSwMECgAAAAAAw1BX
RAAAAAAAAAAAAAAAAAQAHABzdmcvVVQJAAOOOApTBDkKU3V4CwABBPYBAAAEUAAAAFBLAwQKAAAA
AADDUFdEAAAAAAAAAAAAAAAACwAcAHN2Zy9zdHJva2UvVVQJAAOOOApTBDkKU3V4CwABBPYBAAAE
UAAAAFBLAwQUAAIACADDUFdExrjFK4QAAACUAAAAJQAcAHN2Zy9zdHJva2UvemVyby13aWR0aC1o
YW5nLXN0ZGVyci50eHRVVAkAA444ClOOOApTdXgLAAEE9gEAAARQAAAADcixDoIwFIXh3ac4LwBB
NEYa4wLq4qRuxqHISWxsb82liPr0kvzL9+/ZolxgXphiNYWR7dOljGOfFevcx7v1aIbwOlE66kXJ
67KsquqGzU416tagPtRREj/pzHR0wsb2DwMnb+tdh24SrKr9GtgET9snRCHoGSgJYZhGS0iU7EeN
+ewPUEsDBAoAAAAAAOJQV0QAAAAAAAAAAAAAAAAGABwAd2ViZ2wvVVQJAAPIOApTBDkKU3V4CwAB
BPYBAAAEUAAAAFBLAwQKAAAAAADiUFdEAAAAAAAAAAAAAAAADAAcAHdlYmdsLzEuMC4yL1VUCQAD
yDgKUwQ5ClN1eAsAAQT2AQAABFAAAABQSwMECgAAAAAA4lBXRAAAAAAAAAAAAAAAABgAHAB3ZWJn
bC8xLjAuMi9jb25mb3JtYW5jZS9VVAkAA8g4ClMEOQpTdXgLAAEE9gEAAARQAAAAUEsDBAoAAAAA
AOJQV0QAAAAAAAAAAAAAAAAdABwAd2ViZ2wvMS4wLjIvY29uZm9ybWFuY2UvZ2xzbC9VVAkAA8g4
ClMEOQpTdXgLAAEE9gEAAARQAAAAUEsDBAoAAAAAAOJQV0QAAAAAAAAAAAAAAAAiABwAd2ViZ2wv
MS4wLjIvY29uZm9ybWFuY2UvZ2xzbC9taXNjL1VUCQADyDgKUwQ5ClN1eAsAAQT2AQAABFAAAABQ
SwMEFAACAAgA4lBXRAgIormZAAAAwgAAAFAAHAB3ZWJnbC8xLjAuMi9jb25mb3JtYW5jZS9nbHNs
L21pc2Mvc2hhZGVyLXZhcnlpbmctcGFja2luZy1yZXN0cmljdGlvbnMtYWN0dWFsLnR4dFVUCQAD
yDgKU8g4ClN1eAsAAQT2AQAABFAAAAAljb0KwzAQg3c/xb1A7b1blpZChkICHYPjXOKj/gl3TkPf
vjYFgcQHkkZPAgWlAB+pJo/wwvnew9hYICm4wIwhn0AJbAJa2UasaQHGPXMReHbDAJnh1j16rVRr
XkFr8xej5IMdijlx3sLUzqaVQgUupzVztMmh2YIEE0mcEW8X5MvH8pfSdtmtezevO4XJFcpJtC8x
qPan1A9QSwMEFAACAAgA4lBXRHxdI677AAAACwIAAE4AHAB3ZWJnbC8xLjAuMi9jb25mb3JtYW5j
ZS9nbHNsL21pc2Mvc2hhZGVyLXZhcnlpbmctcGFja2luZy1yZXN0cmljdGlvbnMtZGlmZi50eHRV
VAkAA8g4ClPIOApTdXgLAAEE9gEAAARQAAAAzY9BTgMxDEX3cwrvh8QUiQ2rKSogRBeIVnRZpRlP
J8KTVIlD29uTlJ6AFZJlf1my3/9KKcDPwHmihAsjBp82K9zQ7s3JdTxmxz1+EJNJhGzOIYsSSqIi
pcyS8Ei7PeNM3+o7tMEPIU7GW8I9J8bJJYtpND1F9W3i2fm9Ohj7VWd5INFZccEnRacDWaFey0ma
tm3/iy9jJRu+uOo6ULObe2hr67oG1qNLUJkQsy9qJCjmXpawrjt2qeSBHXE4gvNgPLghmomK6iHS
IURJ8D5frSBEeJ6/LnUDzeX2AbTG3ypmQo6Wrnm2FbcdHJfFn0PpUSZuVEU3bQUX7g9QSwMEFAAC
AAgA4lBXRDi680SZAAAAwgAAAFIAHAB3ZWJnbC8xLjAuMi9jb25mb3JtYW5jZS9nbHNsL21pc2Mv
c2hhZGVyLXZhcnlpbmctcGFja2luZy1yZXN0cmljdGlvbnMtZXhwZWN0ZWQudHh0VVQJAAPIOApT
yDgKU3V4CwABBPYBAAAEUAAAACWNvQrDMBCDdz/FvUDtvVuWlkKGQgIdg+Nc4qP+CXdOQ9++NgWB
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
dFVUBQAD/jgKU3V4CwABBPYBAAAEUAAAAFBLAQIeAwoAAAAAAGRQV0QAAAAAAAAAAAAAAAAFABgA
AAAAAAAAEADtQYvXAABmYXN0L1VUBQAD2zcKU3V4CwABBPYBAAAEUAAAAFBLAQIeAwoAAAAAAEdQ
V0QAAAAAAAAAAAAAAAAMABgAAAAAAAAAEADtQcrXAABmYXN0L2ltYWdlcy9VVAUAA6U3ClN1eAsA
AQT2AQAABFAAAABQSwECHgMUAAIACABHUFdEIY+9ODIAAAAzAAAALAAYAAAAAAABAAAApIEQ2AAA
ZmFzdC9pbWFnZXMvcGRmLWFzLWltYWdlLWNyb3AtYm94LXN0ZGVyci50eHRVVAUAA6U3ClN1eAsA
AQT2AQAABFAAAABQSwECHgMKAAAAAABkUFdEAAAAAAAAAAAAAAAACQAYAAAAAAAAABAA7UGo2AAA
ZmFzdC94c2wvVVQFAAPbNwpTdXgLAAEE9gEAAARQAAAAUEsBAh4DFAACAAgAZFBXRHL9ZfKFAAAA
6QAAACUAGAAAAAAAAQAAAKSB69gAAGZhc3QveHNsL3RyYW5zZm9ybS14aHItZG9jLXN0ZGVyci50
eHRVVAUAA9s3ClN1eAsAAQT2AQAABFAAAABQSwECHgMUAAIACABkUFdEiR8h/pcAAADAAwAAJwAY
AAAAAAABAAAApIHP2QAAZmFzdC94c2wveHNsdC1iYWQtaW1wb3J0LXVyaS1zdGRlcnIudHh0VVQF
AAPbNwpTdXgLAAEE9gEAAARQAAAAUEsBAh4DFAACAAgAZFBXRIFKd61LAAAArAAAADQAGAAAAAAA
AQAAAKSBx9oAAGZhc3QveHNsL3hzbHQtdHJhbnNmb3JtLXRvLWZyYWdtZW50LWNyYXNoLXN0ZGVy
ci50eHRVVAUAA9s3ClN1eAsAAQT2AQAABFAAAABQSwECHgMUAAIACAACUVdEcxOYwDIBAADDAQAA
EQAYAAAAAAABAAAApIGA2wAAZnVsbF9yZXN1bHRzLmpzb25VVAUAAwM5ClN1eAsAAQT2AQAABFAA
AABQSwECHgMKAAAAAABTUFdEAAAAAAAAAAAAAAAABQAYAAAAAAAAABAA7UH93AAAaHR0cC9VVAUA
A703ClN1eAsAAQT2AQAABFAAAABQSwECHgMKAAAAAAB4UFdEAAAAAAAAAAAAAAAACwAYAAAAAAAA
ABAA7UE83QAAaHR0cC90ZXN0cy9VVAUAAwQ4ClN1eAsAAQT2AQAABFAAAABQSwECHgMKAAAAAABT
UFdEAAAAAAAAAAAAAAAAEAAYAAAAAAAAABAA7UGB3QAAaHR0cC90ZXN0cy9taXNjL1VUBQADvTcK
U3V4CwABBPYBAAAEUAAAAFBLAQIeAxQAAgAIAFNQV0QVNTWSegAAALwAAAAqABgAAAAAAAEAAACk
gcvdAABodHRwL3Rlc3RzL21pc2MveHNsdC1iYWQtaW1wb3J0LXN0ZGVyci50eHRVVAUAA703ClN1
eAsAAQT2AQAABFAAAABQSwECHgMKAAAAAACFUFdEAAAAAAAAAAAAAAAAFAAYAAAAAAAAABAA7UGp
3gAAaHR0cC90ZXN0cy9zZWN1cml0eS9VVAUAAxk4ClN1eAsAAQT2AQAABFAAAABQSwECHgMKAAAA
AACFUFdEAAAAAAAAAAAAAAAAKgAYAAAAAAAAABAA7UH33gAAaHR0cC90ZXN0cy9zZWN1cml0eS9j
b250ZW50U2VjdXJpdHlQb2xpY3kvVVQFAAMaOApTdXgLAAEE9gEAAARQAAAAUEsBAh4DFAACAAgA
hVBXRGOqrGyCAAAAqAAAAEAAGAAAAAAAAQAAAKSBW98AAGh0dHAvdGVzdHMvc2VjdXJpdHkvY29u
dGVudFNlY3VyaXR5UG9saWN5L3hzbC1hbGxvd2VkLXN0ZGVyci50eHRVVAUAAxk4ClN1eAsAAQT2
AQAABFAAAABQSwECHgMUAAIACACFUFdEY6qsbIIAAACoAAAAUgAYAAAAAAABAAAApIFX4AAAaHR0
cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kveHNsLXVuYWZmZWN0ZWQtYnkt
c3R5bGUtc3JjLTItc3RkZXJyLnR4dFVUBQADGjgKU3V4CwABBPYBAAAEUAAAAFBLAQIeAxQAAgAI
AHhQV0RgS2YQkQAAAPsBAABFABgAAAAAAAEAAACkgWXhAABodHRwL3Rlc3RzL3NlY3VyaXR5L3hz
cy1ERU5JRUQteHNsLWRvY3VtZW50LXNlY3VyaXR5T3JpZ2luLXN0ZGVyci50eHRVVAUAAwQ4ClN1
eAsAAQT2AQAABFAAAABQSwECHgMUAAIACAAHUFdE6op8QmEFAAAFDwAACgAYAAAAAAABAAAApIF1
4gAAaHR0cGQuY29uZlVUBQADLjcKU3V4CwABBPYBAAAEUAAAAFBLAQIeAwoAAAAAAHJQV0QAAAAA
AAAAAAAAAAAGABgAAAAAAAAAEADtQRroAABtZWRpYS9VVAUAA/c3ClN1eAsAAQT2AQAABFAAAABQ
SwECHgMUAAIACAByUFdEknGJ+7sAAAAHAQAAMAAYAAAAAAABAAAApIFa6AAAbWVkaWEvY29udHJv
bHMtcmlnaHQtY2xpY2stb24tdGltZWJhci1zdGRlcnIudHh0VVQFAAP3NwpTdXgLAAEE9gEAAARQ
AAAAUEsBAh4DFAACAAgArFBXRNchqTEfAgAAoQkAACsAGAAAAAAAAQAAAKSBf+kAAHB5d2Vic29j
a2V0LndzLmxvZy0yM0ZlYjIwMTQtMTAwMDE1LWVyci50eHRVVAUAA2Q4ClN1eAsAAQT2AQAABFAA
AABQSwECHgMUAAIACACsUFdE4/SIYwcBAACPAgAAKwAYAAAAAAABAAAApIED7AAAcHl3ZWJzb2Nr
ZXQud3MubG9nLTIzRmViMjAxNC0xMDAwMTUtb3V0LnR4dFVUBQADZDgKU3V4CwABBPYBAAAEUAAA
AFBLAQIeAxQAAgAIAAJRV0RnzwjRfiYAACOkAAAMABgAAAAAAAEAAACkgW/tAAByZXN1bHRzLmh0
bWxVVAUAAwM5ClN1eAsAAQT2AQAABFAAAABQSwECHgMKAAAAAAABUVdEAAAAAAAAAAAAAAAACAAY
AAAAAAAAABAA7UEzFAEAcmV0cmllcy9VVAUAAwE5ClN1eAsAAQT2AQAABFAAAABQSwECHgMKAAAA
AAABUVdEAAAAAAAAAAAAAAAADgAYAAAAAAAAABAA7UF1FAEAcmV0cmllcy93ZWJnbC9VVAUAAwE5
ClN1eAsAAQT2AQAABFAAAABQSwECHgMKAAAAAAABUVdEAAAAAAAAAAAAAAAAFAAYAAAAAAAAABAA
7UG9FAEAcmV0cmllcy93ZWJnbC8xLjAuMi9VVAUAAwE5ClN1eAsAAQT2AQAABFAAAABQSwECHgMK
AAAAAAABUVdEAAAAAAAAAAAAAAAAIAAYAAAAAAAAABAA7UELFQEAcmV0cmllcy93ZWJnbC8xLjAu
Mi9jb25mb3JtYW5jZS9VVAUAAwE5ClN1eAsAAQT2AQAABFAAAABQSwECHgMKAAAAAAABUVdEAAAA
AAAAAAAAAAAAJQAYAAAAAAAAABAA7UFlFQEAcmV0cmllcy93ZWJnbC8xLjAuMi9jb25mb3JtYW5j
ZS9nbHNsL1VUBQADATkKU3V4CwABBPYBAAAEUAAAAFBLAQIeAwoAAAAAAAFRV0QAAAAAAAAAAAAA
AAAqABgAAAAAAAAAEADtQcQVAQByZXRyaWVzL3dlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL2dsc2wv
bWlzYy9VVAUAAwE5ClN1eAsAAQT2AQAABFAAAABQSwECHgMUAAIACAABUVdECAiiuZkAAADCAAAA
WAAYAAAAAAABAAAApIEoFgEAcmV0cmllcy93ZWJnbC8xLjAuMi9jb25mb3JtYW5jZS9nbHNsL21p
c2Mvc2hhZGVyLXZhcnlpbmctcGFja2luZy1yZXN0cmljdGlvbnMtYWN0dWFsLnR4dFVUBQADATkK
U3V4CwABBPYBAAAEUAAAAFBLAQIeAxQAAgAIAAFRV0Q3+cC/AAEAABsCAABWABgAAAAAAAEAAACk
gVMXAQByZXRyaWVzL3dlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItdmFy
eWluZy1wYWNraW5nLXJlc3RyaWN0aW9ucy1kaWZmLnR4dFVUBQADATkKU3V4CwABBPYBAAAEUAAA
AFBLAQIeAxQAAgAIAAFRV0Q4uvNEmQAAAMIAAABaABgAAAAAAAEAAACkgeMYAQByZXRyaWVzL3dl
YmdsLzEuMC4yL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItdmFyeWluZy1wYWNraW5nLXJl
c3RyaWN0aW9ucy1leHBlY3RlZC50eHRVVAUAAwE5ClN1eAsAAQT2AQAABFAAAABQSwECHgMUAAIA
CAABUVdEHoy9gQQIAADeGgAAXgAYAAAAAAABAAAApIEQGgEAcmV0cmllcy93ZWJnbC8xLjAuMi9j
b25mb3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVyLXZhcnlpbmctcGFja2luZy1yZXN0cmljdGlvbnMt
cHJldHR5LWRpZmYuaHRtbFVUBQADATkKU3V4CwABBPYBAAAEUAAAAFBLAQIeAxQAAgAIAAJRV0T/
YUNqZ1MGACtrIwAKABgAAAAAAAEAAACkgawiAQBzdGF0cy5qc29uVVQFAAMDOQpTdXgLAAEE9gEA
AARQAAAAUEsBAh4DCgAAAAAAw1BXRAAAAAAAAAAAAAAAAAQAGAAAAAAAAAAQAO1BV3YHAHN2Zy9V
VAUAA444ClN1eAsAAQT2AQAABFAAAABQSwECHgMKAAAAAADDUFdEAAAAAAAAAAAAAAAACwAYAAAA
AAAAABAA7UGVdgcAc3ZnL3N0cm9rZS9VVAUAA444ClN1eAsAAQT2AQAABFAAAABQSwECHgMUAAIA
CADDUFdExrjFK4QAAACUAAAAJQAYAAAAAAABAAAApIHadgcAc3ZnL3N0cm9rZS96ZXJvLXdpZHRo
LWhhbmctc3RkZXJyLnR4dFVUBQADjjgKU3V4CwABBPYBAAAEUAAAAFBLAQIeAwoAAAAAAOJQV0QA
AAAAAAAAAAAAAAAGABgAAAAAAAAAEADtQb13BwB3ZWJnbC9VVAUAA8g4ClN1eAsAAQT2AQAABFAA
AABQSwECHgMKAAAAAADiUFdEAAAAAAAAAAAAAAAADAAYAAAAAAAAABAA7UH9dwcAd2ViZ2wvMS4w
LjIvVVQFAAPIOApTdXgLAAEE9gEAAARQAAAAUEsBAh4DCgAAAAAA4lBXRAAAAAAAAAAAAAAAABgA
GAAAAAAAAAAQAO1BQ3gHAHdlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL1VUBQADyDgKU3V4CwABBPYB
AAAEUAAAAFBLAQIeAwoAAAAAAOJQV0QAAAAAAAAAAAAAAAAdABgAAAAAAAAAEADtQZV4BwB3ZWJn
bC8xLjAuMi9jb25mb3JtYW5jZS9nbHNsL1VUBQADyDgKU3V4CwABBPYBAAAEUAAAAFBLAQIeAwoA
AAAAAOJQV0QAAAAAAAAAAAAAAAAiABgAAAAAAAAAEADtQex4BwB3ZWJnbC8xLjAuMi9jb25mb3Jt
YW5jZS9nbHNsL21pc2MvVVQFAAPIOApTdXgLAAEE9gEAAARQAAAAUEsBAh4DFAACAAgA4lBXRAgI
ormZAAAAwgAAAFAAGAAAAAAAAQAAAKSBSHkHAHdlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL2dsc2wv
bWlzYy9zaGFkZXItdmFyeWluZy1wYWNraW5nLXJlc3RyaWN0aW9ucy1hY3R1YWwudHh0VVQFAAPI
OApTdXgLAAEE9gEAAARQAAAAUEsBAh4DFAACAAgA4lBXRHxdI677AAAACwIAAE4AGAAAAAAAAQAA
AKSBa3oHAHdlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItdmFyeWluZy1w
YWNraW5nLXJlc3RyaWN0aW9ucy1kaWZmLnR4dFVUBQADyDgKU3V4CwABBPYBAAAEUAAAAFBLAQIe
AxQAAgAIAOJQV0Q4uvNEmQAAAMIAAABSABgAAAAAAAEAAACkge57BwB3ZWJnbC8xLjAuMi9jb25m
b3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVyLXZhcnlpbmctcGFja2luZy1yZXN0cmljdGlvbnMtZXhw
ZWN0ZWQudHh0VVQFAAPIOApTdXgLAAEE9gEAAARQAAAAUEsBAh4DFAACAAgA4lBXRJOBUDcACAAA
1hoAAFYAGAAAAAAAAQAAAKSBE30HAHdlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9z
aGFkZXItdmFyeWluZy1wYWNraW5nLXJlc3RyaWN0aW9ucy1wcmV0dHktZGlmZi5odG1sVVQFAAPI
OApTdXgLAAEE9gEAAARQAAAAUEsFBgAAAAAzADMAHhUAAKOFBwAAAA==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225015</attachid>
            <date>2014-02-23 14:39:38 -0800</date>
            <delta_ts>2014-02-23 15:38:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-129232-20140224093917.patch</filename>
            <type>text/plain</type>
            <size>3892262</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY0NTUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggZTJhMTVkZjMzNmQ4ODRkNWQ3MDdiZjI4NDBiMWNlY2YxODUzOWVkYS4uMjUyNzZhYjQyNTgx
MzUyOTVkMGIxZDY1ZGUxZmQ3MGY0M2FkNTYzMyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE2IEBACisyMDE0LTAyLTIzICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxl
LmNvbT4KKworICAgICAgICBVcGRhdGUgQU5HTEUgdG8gODM2YmQyMTc2ZTU2MDdiMTQ4NDZjZjFm
YmM1OTMyZGJjOTEzMThmNAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTI5MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgSSBhbHNvIHJlYXBwbGllZCBzb21lIG9mIG91ciBjaGFuZ2VzIGJlbG93LCBpbmNs
dWRpbmcgZGlzYWJsaW5nIHRoZSBjbGFuZworICAgICAgICBkZXByZWNhdGlvbiB3YXJuaW5ncyBp
biBzb21lIGZpbGVzLCBhZGRpbmcgdGhlIEFwcGxlIG5vdGUgYWJvdXQgbGljZW5zZQorICAgICAg
ICBhbmQgZGVmaW5pbmcgWVlfTk9fSU5QVVQuCisKKyAgICAgICAgSHVnZSBsaXN0IG9mIHNvdXJj
ZSBjaGFuZ2VzIG9taXR0ZWQuCisKIDIwMTMtMTItMTggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8
Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEZpeCBtYWtlIGRpc3Rj
aGVjay4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCA1NWRjMDU2ZjAzYTRkOTA5MzhjN2YyOWQzMThhZjQzZWU1ZDNi
ZTQ1Li5iODU4MWJmZjY0NzkyMjE3N2M4YTc3OGQ3YTU0MmViNmY3ZmIyZTUwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTcgQEAKKzIwMTQtMDItMjMgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUu
Y29tPgorCisgICAgICAgIFVwZGF0ZSBBTkdMRSB0byA4MzZiZDIxNzZlNTYwN2IxNDg0NmNmMWZi
YzU5MzJkYmM5MTMxOGY0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMjkyMzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBOZXcgZmlsZXMgYWRkZWQsIGRlcml2ZWQgc291cmNlcyBjb21waWxlZCBkaXJlY3Rs
eSwgYW5kIGdlbmVyYXRlZAorICAgICAgICBzdGVwcyByZW1vdmVkIGZvciBib3RoIEVGTCBhbmQg
R1RLLCB3aXRoIG11Y2gtbmVlZGVkIGhlbHAgZnJvbQorICAgICAgICBTZXJnaW8gQ29ycmVpYS4K
KworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVU1ha2VmaWxlLmFtOgor
CiAyMDE0LTAyLTIyICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBM
ZXR0ZXJwcmVzcyBlZmZlY3QgZGlzYWJsZWQgZm9yIHN5bnRoZXRpYyBpdGFsaWMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnBsaXN0IGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQU5HTEUucGxpc3QKaW5kZXggNzFmNWFiNzVjNzA1NWVhNWE4ZTNkNGQxMDc4MTYw
ZjMzNzgyZjJjMi4uZWYyOTRiOWNkYTc0NzY3Yjg1M2U2MzRlZTJlZTViMjY3YWVjMTM1NiAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUucGxpc3QKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvQU5HTEUucGxpc3QKQEAgLTYsMTMgKzYsMTMgQEAKIAkJPGtleT5P
cGVuU291cmNlUHJvamVjdDwva2V5PgogCQk8c3RyaW5nPkFOR0xFPC9zdHJpbmc+CiAJCTxrZXk+
T3BlblNvdXJjZVZlcnNpb248L2tleT4KLQkJPHN0cmluZz5yMTY0MTwvc3RyaW5nPgorCQk8c3Ry
aW5nPjgzNmJkMjE3NmU1NjA3YjE0ODQ2Y2YxZmJjNTkzMmRiYzkxMzE4ZjQ8L3N0cmluZz4KIAkJ
PGtleT5PcGVuU291cmNlV2Vic2l0ZVVSTDwva2V5PgogCQk8c3RyaW5nPmh0dHA6Ly9jb2RlLmdv
b2dsZS5jb20vcC9hbmdsZXByb2plY3QvPC9zdHJpbmc+CiAJCTxrZXk+T3BlblNvdXJjZVNDTTwv
a2V5PgotCQk8c3RyaW5nPmdpdCBjbG9uZSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZ2xl
cHJvamVjdC8gJiYgY2QgYW5nbGVwcm9qZWN0ICYmIGdpdCBjaGVja291dCBhNjBlMDgwNTcyMWY2
MmMyOGE1NWZhZjJkZjc0NDcyY2M1ZmM5MWZjPC9zdHJpbmc+CisJCTxzdHJpbmc+Z2l0IGNsb25l
IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0LyAmJiBjZCBhbmdsZXByb2pl
Y3QgJiYgZ2l0IGNoZWNrb3V0IDgzNmJkMjE3NmU1NjA3YjE0ODQ2Y2YxZmJjNTkzMmRiYzkxMzE4
ZjQ8L3N0cmluZz4KIAkJPGtleT5PcGVuU291cmNlSW1wb3J0RGF0ZTwva2V5PgotCQk8c3RyaW5n
PjIwMTMtMTEtMDc8L3N0cmluZz4KKwkJPHN0cmluZz4yMDE0LTAyLTE4PC9zdHJpbmc+CiAJCTxr
ZXk+T3BlblNvdXJjZUxpY2Vuc2U8L2tleT4KIAkJPHN0cmluZz5CU0Q8L3N0cmluZz4KIAkJPGtl
eT5PcGVuU291cmNlTGljZW5zZUZpbGU8L2tleT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL0FOR0xFLnZjeHByb2ovbGliR0xFU3YyLnZjeHByb2ogYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9BTkdMRS52Y3hwcm9qL2xpYkdMRVN2Mi52Y3hwcm9qCmluZGV4IDljODk4MzAx
OWYzZjUxMjM4MDkyYjRmMDc5YWNjNjVkM2U2OTk1NmUuLjhkMTJkMjkyOTVkZmQwZmNlMjdkNGJh
ZjVlZmQ2OTM4OTI2NzY0M2YgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FO
R0xFLnZjeHByb2ovbGliR0xFU3YyLnZjeHByb2oKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvQU5HTEUudmN4cHJvai9saWJHTEVTdjIudmN4cHJvagpAQCAtMjA3LDQwICsyMDcsNDAgQEAK
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21tb25cUmVmQ291bnRPYmplY3QuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxSZW5kZXJidWZm
ZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5k
ZXJlclxCbGl0LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVT
djJccmVuZGVyZXJcRmVuY2UxMS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxz
cmNcbGliR0xFU3YyXHJlbmRlcmVyXEZlbmNlOS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXEZlbmNlMTEuY3BwIiAvPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XEZlbmNl
OS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRl
cmVyXEJ1ZmZlclN0b3JhZ2UuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Jj
XGxpYkdMRVN2MlxyZW5kZXJlclxCdWZmZXJTdG9yYWdlMTEuY3BwIiAvPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxCdWZmZXJTdG9yYWdlOS5jcHAi
IC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQz
ZDExXEJ1ZmZlclN0b3JhZ2UxMS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxz
cmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcQnVmZmVyU3RvcmFnZTkuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxJbWFnZS5jcHAiIC8+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEltYWdl
OS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRl
cmVyXGQzZDlcSW1hZ2U5LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xs
aWJHTEVTdjJccmVuZGVyZXJcSW5kZXhCdWZmZXIuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxJbmRleEJ1ZmZlcjExLmNwcCIgLz4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcSW5kZXhCdWZm
ZXI5LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVu
ZGVyZXJcZDNkMTFcSW5kZXhCdWZmZXIxMS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcSW5kZXhCdWZmZXI5LmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcSW5kZXhEYXRh
TWFuYWdlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXEltYWdlU1NFMi5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxz
cmNcbGliR0xFU3YyXHJlbmRlcmVyXEltYWdlMTEuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxJbWFnZTExLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcSW5wdXRMYXlv
dXRDYWNoZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXFF1ZXJ5MTEuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Jj
XGxpYkdMRVN2MlxyZW5kZXJlclxRdWVyeTkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxRdWVyeTExLmNwcCIgLz4KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxRdWVyeTku
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJl
clxSZW5kZXJlci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xF
U3YyXHJlbmRlcmVyXFJlbmRlcmVyMTEuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxyZW5kZXJlcjExX3V0aWxzLmNwcCIgLz4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUmVuZGVyZXI5LmNw
cCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJc
cmVuZGVyZXI5X3V0aWxzLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xs
aWJHTEVTdjJccmVuZGVyZXJcUmVuZGVyVGFyZ2V0MTEuY3BwIiAvPgorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxSZW5kZXJlcjExLmNwcCIg
Lz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNk
MTFccmVuZGVyZXIxMV91dGlscy5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxz
cmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcUmVuZGVyZXI5LmNwcCIgLz4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxyZW5kZXJlcjlfdXRp
bHMuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5k
ZXJlclxkM2QxMVxSZW5kZXJUYXJnZXQxMS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFJlbmRlclRhcmdldDkuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxSZW5kZXJTdGF0ZUNh
Y2hlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVu
ZGVyZXJcU2hhZGVyRXhlY3V0YWJsZTExLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcU2hhZGVyRXhlY3V0YWJsZTkuY3BwIiAvPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxTd2FwQ2hhaW4x
MS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRl
cmVyXFN3YXBDaGFpbjkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxp
YkdMRVN2MlxyZW5kZXJlclxkM2QxMVxTaGFkZXJFeGVjdXRhYmxlMTEuY3BwIiAvPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XFNoYWRlckV4
ZWN1dGFibGU5LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVT
djJccmVuZGVyZXJcZDNkMTFcU3dhcENoYWluMTEuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XFN3YXBDaGFpbjkuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxUZXh0dXJl
U3RvcmFnZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXFRleHR1cmVTdG9yYWdlMTEuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxUZXh0dXJlU3RvcmFnZTkuY3BwIiAvPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxUZXh0
dXJlU3RvcmFnZTExLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJH
TEVTdjJccmVuZGVyZXJcZDNkOVxUZXh0dXJlU3RvcmFnZTkuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxWZXJ0ZXhCdWZmZXIuY3BwIiAv
PgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxWZXJ0
ZXhCdWZmZXIxMS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xF
U3YyXHJlbmRlcmVyXFZlcnRleEJ1ZmZlcjkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxWZXJ0ZXhCdWZmZXIxMS5jcHAiIC8+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlc
VmVydGV4QnVmZmVyOS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGli
R0xFU3YyXHJlbmRlcmVyXFZlcnRleERhdGFNYW5hZ2VyLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcVmVydGV4RGVjbGFyYXRpb25DYWNo
ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXFJlc291
cmNlTWFuYWdlci5jcHAiIC8+CkBAIC0yNzUsMzcgKzI3NSwzNyBAQAogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cc3JjXGNvbW1vblxSZWZDb3VudE9iamVjdC5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxSZW5kZXJidWZmZXIuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcQmxpdC5oIiAvPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxGZW5jZTExLmgi
IC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEZl
bmNlOS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5k
ZXJlclxkM2QxMVxGZW5jZTExLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNc
bGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcRmVuY2U5LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEZlbmNlSW1wbC5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxCdWZmZXJTdG9yYWdlLmgi
IC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEJ1
ZmZlclN0b3JhZ2UxMS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdM
RVN2MlxyZW5kZXJlclxCdWZmZXJTdG9yYWdlOS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxCdWZmZXJTdG9yYWdlMTEuaCIgLz4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxC
dWZmZXJTdG9yYWdlOS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdM
RVN2MlxyZW5kZXJlclxnZW5lcmF0ZW1pcC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxJbWFnZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxJbWFnZTExLmgiIC8+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEltYWdlOS5oIiAvPgorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxJbWFn
ZTExLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRl
cmVyXGQzZDlcSW1hZ2U5LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGli
R0xFU3YyXHJlbmRlcmVyXEluZGV4QnVmZmVyLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEluZGV4QnVmZmVyMTEuaCIgLz4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcSW5kZXhCdWZmZXI5Lmgi
IC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQz
ZDExXEluZGV4QnVmZmVyMTEuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xs
aWJHTEVTdjJccmVuZGVyZXJcZDNkOVxJbmRleEJ1ZmZlcjkuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcSW5kZXhEYXRhTWFuYWdlci5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxJbnB1
dExheW91dENhY2hlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xF
U3YyXHJlbmRlcmVyXFF1ZXJ5MTEuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNy
Y1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcUXVlcnkxMS5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxRdWVyeUltcGwuaCIgLz4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUXVlcnk5LmgiIC8+
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlc
UXVlcnk5LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJl
bmRlcmVyXFJlbmRlcmVyLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGli
R0xFU3YyXHJlbmRlcmVyXFJlbmRlcmVyMTEuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJccmVuZGVyZXIxMV91dGlscy5oIiAvPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxSZW5kZXJlcjkuaCIg
Lz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJccmVu
ZGVyZXI5X3V0aWxzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xF
U3YyXHJlbmRlcmVyXGQzZDExXFJlbmRlcmVyMTEuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFccmVuZGVyZXIxMV91dGlscy5oIiAv
PgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5
XFJlbmRlcmVyOS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2
MlxyZW5kZXJlclxkM2Q5XHJlbmRlcmVyOV91dGlscy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxSZW5kZXJUYXJnZXQuaCIgLz4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUmVuZGVyVGFyZ2V0
MTEuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVy
ZXJcUmVuZGVyVGFyZ2V0OS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxp
YkdMRVN2MlxyZW5kZXJlclxkM2QxMVxSZW5kZXJUYXJnZXQxMS5oIiAvPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XFJlbmRlclRhcmdldDku
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJc
UmVuZGVyU3RhdGVDYWNoZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxp
YkdMRVN2MlxyZW5kZXJlclxTaGFkZXJDYWNoZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxTaGFkZXJFeGVjdXRhYmxlLmgiIC8+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFNoYWRlckV4ZWN1
dGFibGUxMS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2Mlxy
ZW5kZXJlclxTaGFkZXJFeGVjdXRhYmxlOS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxTaGFkZXJFeGVjdXRhYmxlMTEuaCIgLz4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxT
aGFkZXJFeGVjdXRhYmxlOS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxp
YkdMRVN2MlxyZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVkXGNsZWFyMTF2cy5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxzaGFkZXJzXGNvbXBp
bGVkXGNsZWFybXVsdGlwbGUxMXBzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxz
cmNcbGliR0xFU3YyXHJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRcY2xlYXJzaW5nbGUxMXBzLmgi
IC8+CkBAIC0zMjAsMTUgKzMyMCwxNSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGxpYkdMRVN2MlxyZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTExcHMu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJc
c2hhZGVyc1xjb21waWxlZFxzdGFuZGFyZHZzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFN3YXBDaGFpbi5oIiAvPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxTd2FwQ2hhaW4xMS5oIiAvPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxTd2FwQ2hh
aW45LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRl
cmVyXGQzZDExXFN3YXBDaGFpbjExLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxz
cmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcU3dhcENoYWluOS5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxUZXh0dXJlU3RvcmFnZS5oIiAv
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxUZXh0
dXJlU3RvcmFnZTExLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xF
U3YyXHJlbmRlcmVyXFRleHR1cmVTdG9yYWdlOS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxUZXh0dXJlU3RvcmFnZTExLmgiIC8+
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlc
VGV4dHVyZVN0b3JhZ2U5LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGli
R0xFU3YyXHJlbmRlcmVyXFZlcnRleEJ1ZmZlci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxWZXJ0ZXhCdWZmZXIxMS5oIiAvPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxWZXJ0ZXhCdWZmZXI5
LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVy
XHZlcnRleGNvbnZlcnNpb24uaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xs
aWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcVmVydGV4QnVmZmVyMTEuaCIgLz4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxWZXJ0ZXhCdWZmZXI5
LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVy
XGQzZDlcdmVydGV4Y29udmVyc2lvbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
c3JjXGxpYkdMRVN2MlxyZW5kZXJlclxWZXJ0ZXhEYXRhTWFuYWdlci5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxWZXJ0ZXhEZWNsYXJhdGlv
bkNhY2hlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJl
c291cmNlLmgiIC8+CkBAIC0zNDEsMTEgKzM0MSwxMSBAQAogICA8L0l0ZW1Hcm91cD4KICAgPEl0
ZW1Hcm91cD4KICAgICA8Tm9uZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXGxpYkdMRVN2Mi5k
ZWYiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxzaGFk
ZXJzXEJsaXQucHMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5k
ZXJlclxzaGFkZXJzXEJsaXQudnMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5cc3JjXGxpYkdM
RVN2MlxyZW5kZXJlclxzaGFkZXJzXENsZWFyMTEuaGxzbCIgLz4KLSAgICA8Tm9uZSBJbmNsdWRl
PSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXHNoYWRlcnNcZ2VuZXJhdGVfc2hhZGVycy5iYXQi
IC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxzaGFkZXJz
XFBhc3N0aHJvdWdoMTEuaGxzbCIgLz4KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xF
U3YyXHJlbmRlcmVyXGQzZDlcc2hhZGVyc1xCbGl0LnBzIiAvPgorICAgIDxOb25lIEluY2x1ZGU9
Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxzaGFkZXJzXEJsaXQudnMiIC8+CisgICAg
PE5vbmUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxzaGFkZXJzXENs
ZWFyMTEuaGxzbCIgLz4KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRl
cmVyXGQzZDlcc2hhZGVyc1xnZW5lcmF0ZV9zaGFkZXJzLmJhdCIgLz4KKyAgICA8Tm9uZSBJbmNs
dWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXHNoYWRlcnNcUGFzc3Rocm91Z2gx
MS5obHNsIiAvPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KICAgICA8UmVzb3VyY2VD
b21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJcbGliR0xFU3YyLnJjIiAvPgpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUudmN4cHJvai9saWJHTEVTdjIudmN4
cHJvai5maWx0ZXJzIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUudmN4cHJvai9saWJH
TEVTdjIudmN4cHJvai5maWx0ZXJzCmluZGV4IGRmYzA2ZjFjYmQ4YWYyZDhmYjU0NzJlYWY4Y2Zj
ZTQwNGQwNTBkZjkuLmE5NjQ5NjYxMDY5OGE5YzEyZTE3MmQ2YjU4MDMzZTFlYmVkOGJiZmEgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnZjeHByb2ovbGliR0xFU3Yy
LnZjeHByb2ouZmlsdGVycworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS52Y3hw
cm9qL2xpYkdMRVN2Mi52Y3hwcm9qLmZpbHRlcnMKQEAgLTEyOCw4OCArMTI4LDg4IEBACiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEJ1ZmZlclN0b3Jh
Z2UuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+CiAg
ICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXEJ1ZmZlclN0b3JhZ2UxMS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxCdWZmZXJTdG9yYWdlMTEuY3BwIj4KICAg
ICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4KICAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJc
RmVuY2UxMS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2Mlxy
ZW5kZXJlclxkM2QxMVxGZW5jZTExLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xS
ZW5kZXJlcjExPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEltYWdlMTEuY3BwIj4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcSW1hZ2UxMS5jcHAi
PgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgogICAgIDwv
Q2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5k
ZXJlclxJbmRleEJ1ZmZlcjExLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNc
bGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXEluZGV4QnVmZmVyMTEuY3BwIj4KICAgICAgIDxGaWx0
ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUXVlcnkxMS5j
cHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxk
M2QxMVxRdWVyeTExLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjEx
PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxz
cmNcbGliR0xFU3YyXHJlbmRlcmVyXFJlbmRlcmVyMTEuY3BwIj4KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcUmVuZGVyZXIxMS5jcHAiPgog
ICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgogICAgIDwvQ2xD
b21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJl
clxyZW5kZXJlcjExX3V0aWxzLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNc
bGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXHJlbmRlcmVyMTFfdXRpbHMuY3BwIj4KICAgICAgIDxG
aWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUmVuZGVy
VGFyZ2V0MTEuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJc
cmVuZGVyZXJcZDNkMTFcUmVuZGVyVGFyZ2V0MTEuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNl
IEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcU2hhZGVyRXhlY3V0YWJsZTEx
LmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVy
XGQzZDExXFNoYWRlckV4ZWN1dGFibGUxMS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmls
ZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxTd2FwQ2hhaW4xMS5jcHAiPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxTd2Fw
Q2hhaW4xMS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwvRmls
dGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxp
YkdMRVN2MlxyZW5kZXJlclxUZXh0dXJlU3RvcmFnZTExLmNwcCI+CisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFRleHR1cmVTdG9yYWdlMTEu
Y3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4KICAg
ICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJc
cmVuZGVyZXJcVmVydGV4QnVmZmVyMTEuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcVmVydGV4QnVmZmVyMTEuY3BwIj4KICAgICAg
IDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGls
ZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcQnVm
ZmVyU3RvcmFnZTkuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVT
djJccmVuZGVyZXJcZDNkOVxCdWZmZXJTdG9yYWdlOS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3Vy
Y2UgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEZlbmNlOS5jcHAiPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XEZlbmNl
OS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+CiAg
ICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXEltYWdlOS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxp
YkdMRVN2MlxyZW5kZXJlclxkM2Q5XEltYWdlOS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2Ug
RmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEluZGV4QnVmZmVyOS5jcHAiPgor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XElu
ZGV4QnVmZmVyOS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI5PC9G
aWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNc
bGliR0xFU3YyXHJlbmRlcmVyXFF1ZXJ5OS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XFF1ZXJ5OS5jcHAiPgogICAgICAgPEZpbHRl
cj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFJlbmRlcmVyOS5j
cHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxk
M2Q5XFJlbmRlcmVyOS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI5
PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxz
cmNcbGliR0xFU3YyXHJlbmRlcmVyXHJlbmRlcmVyOV91dGlscy5jcHAiPgorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XHJlbmRlcmVyOV91dGls
cy5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+CiAg
ICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXFJlbmRlclRhcmdldDkuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxSZW5kZXJUYXJnZXQ5LmNwcCI+CiAgICAgICA8
RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcU2hhZGVy
RXhlY3V0YWJsZTkuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVT
djJccmVuZGVyZXJcZDNkOVxTaGFkZXJFeGVjdXRhYmxlOS5jcHAiPgogICAgICAgPEZpbHRlcj5T
b3VyY2UgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFN3YXBDaGFpbjkuY3Bw
Ij4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNk
OVxTd2FwQ2hhaW45LmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjk8
L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNy
Y1xsaWJHTEVTdjJccmVuZGVyZXJcVGV4dHVyZVN0b3JhZ2U5LmNwcCI+CisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcVGV4dHVyZVN0b3JhZ2U5
LmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAg
ICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJc
cmVuZGVyZXJcVmVydGV4QnVmZmVyOS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
c3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XFZlcnRleEJ1ZmZlcjkuY3BwIj4KICAgICAgIDxG
aWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxCbGl0LmNw
cCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQz
ZDlcQmxpdC5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI5PC9GaWx0
ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcbGli
R0xFU3YyXHJlbmRlcmVyXElucHV0TGF5b3V0Q2FjaGUuY3BwIj4KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcSW5wdXRMYXlvdXRDYWNoZS5j
cHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgogICAg
IDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2Mlxy
ZW5kZXJlclxSZW5kZXJTdGF0ZUNhY2hlLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFJlbmRlclN0YXRlQ2FjaGUuY3BwIj4KICAg
ICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4KICAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJc
VmVydGV4RGVjbGFyYXRpb25DYWNoZS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
c3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XFZlcnRleERlY2xhcmF0aW9uQ2FjaGUuY3BwIj4K
ICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPgogICAgIDwvQ2xD
b21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxwcmVjb21w
aWxlZC5jcHAiPgpAQCAtMzkxLDk0ICszOTEsOTQgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcVmVydGV4RGF0YU1hbmFnZXIuaCI+CiAgICAgICA8
RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxCdWZmZXJT
dG9yYWdlMTEuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJl
bmRlcmVyXGQzZDExXEJ1ZmZlclN0b3JhZ2UxMS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZp
bGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcSW5kZXhCdWZmZXIxMS5oIj4KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcSW5k
ZXhCdWZmZXIxMS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyMTE8L0Zp
bHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xs
aWJHTEVTdjJccmVuZGVyZXJcUXVlcnkxMS5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcUXVlcnkxMS5oIj4KICAgICAgIDxGaWx0ZXI+
SGVhZGVyIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUmVuZGVyZXIxMS5o
Ij4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNk
MTFcUmVuZGVyZXIxMS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyMTE8
L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNy
Y1xsaWJHTEVTdjJccmVuZGVyZXJcUmVuZGVyVGFyZ2V0MTEuaCI+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFJlbmRlclRhcmdldDExLmgi
PgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPgogICAgIDwv
Q2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5k
ZXJlclxTaGFkZXJFeGVjdXRhYmxlMTEuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxz
cmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXFNoYWRlckV4ZWN1dGFibGUxMS5oIj4KICAgICAg
IDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVk
ZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcU3dh
cENoYWluMTEuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJl
bmRlcmVyXGQzZDExXFN3YXBDaGFpbjExLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNc
UmVuZGVyZXIxMTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxUZXh0dXJlU3RvcmFnZTExLmgiPgorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxUZXh0
dXJlU3RvcmFnZTExLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwv
RmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGxpYkdMRVN2MlxyZW5kZXJlclxWZXJ0ZXhCdWZmZXIxMS5oIj4KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcVmVydGV4QnVmZmVyMTEuaCI+
CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+CiAgICAgPC9D
bEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRl
cmVyXEJ1ZmZlclN0b3JhZ2U5LmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxp
YkdMRVN2MlxyZW5kZXJlclxkM2Q5XEJ1ZmZlclN0b3JhZ2U5LmgiPgogICAgICAgPEZpbHRlcj5I
ZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXEZlbmNlOS5oIj4KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxGZW5j
ZTkuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAg
ICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJc
cmVuZGVyZXJcSW1hZ2U5LmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdM
RVN2MlxyZW5kZXJlclxkM2Q5XEltYWdlOS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVz
XFJlbmRlcmVyOTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxJbmRleEJ1ZmZlcjkuaCI+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcSW5kZXhCdWZm
ZXI5LmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+CiAg
ICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3Yy
XHJlbmRlcmVyXFF1ZXJ5OS5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJH
TEVTdjJccmVuZGVyZXJcZDNkOVxRdWVyeTkuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxl
c1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUmVuZGVyZXI5LmgiPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XFJlbmRlcmVyOS5o
Ij4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPgogICAgIDwv
Q2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5k
ZXJlclxyZW5kZXJlcjlfdXRpbHMuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNc
bGliR0xFU3YyXHJlbmRlcmVyXGQzZDlccmVuZGVyZXI5X3V0aWxzLmgiPgogICAgICAgPEZpbHRl
cj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXFJlbmRlclRhcmdl
dDkuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVy
XGQzZDlcUmVuZGVyVGFyZ2V0OS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRl
cmVyOTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxTaGFkZXJFeGVjdXRhYmxlOS5oIj4KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkOVxTaGFkZXJFeGVj
dXRhYmxlOS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVy
PgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdM
RVN2MlxyZW5kZXJlclxTd2FwQ2hhaW45LmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
c3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XFN3YXBDaGFpbjkuaCI+CiAgICAgICA8RmlsdGVy
PkhlYWRlciBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcVGV4dHVyZVN0b3Jh
Z2U5LmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJl
clxkM2Q5XFRleHR1cmVTdG9yYWdlOS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJl
bmRlcmVyOTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxWZXJ0ZXhCdWZmZXI5LmgiPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2Q5XFZlcnRleEJ1ZmZl
cjkuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAg
ICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJc
cmVuZGVyZXJcRmVuY2UxMS5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJH
TEVTdjJccmVuZGVyZXJcZDNkMTFcRmVuY2UxMS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZp
bGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcSW1hZ2UxMS5oIj4KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFcSW1hZ2UxMS5o
Ij4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4KICAgICA8
L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVu
ZGVyZXJccmVuZGVyZXIxMV91dGlscy5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNy
Y1xsaWJHTEVTdjJccmVuZGVyZXJcZDNkMTFccmVuZGVyZXIxMV91dGlscy5oIj4KICAgICAgIDxG
aWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcRmVuY2U5
LmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxk
M2Q5XEZlbmNlOS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyXFJlbmRl
cmVyOTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxRdWVyeTExLmgiPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5kZXJlclxkM2QxMVxRdWVyeTExLmgiPgogICAgICAg
PEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXJcUmVuZGVyZXIxMTwvRmlsdGVyPgogICAgIDwv
Q2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2MlxyZW5k
ZXJlclxCbGl0LmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGxpYkdMRVN2Mlxy
ZW5kZXJlclxkM2Q5XEJsaXQuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJl
cjk8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcU2hhZGVyQ2FjaGUuaCI+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDlcU2hhZGVyQ2FjaGUuaCI+CiAg
ICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4KICAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJc
SW5wdXRMYXlvdXRDYWNoZS5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJH
TEVTdjJccmVuZGVyZXJcZDNkMTFcSW5wdXRMYXlvdXRDYWNoZS5oIj4KICAgICAgIDxGaWx0ZXI+
SGVhZGVyIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcUmVuZGVyU3RhdGVD
YWNoZS5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVy
ZXJcZDNkMTFcUmVuZGVyU3RhdGVDYWNoZS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVz
XFJlbmRlcmVyMTE8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHNyY1xsaWJHTEVTdjJccmVuZGVyZXJcVmVydGV4RGVjbGFyYXRpb25DYWNoZS5o
Ij4KQEAgLTUwNywxMCArNTA3LDEwIEBACiAgICAgPE5vbmUgSW5jbHVkZT0iLi5cc3JjXGxpYkdM
RVN2MlxyZW5kZXJlclxzaGFkZXJzXGdlbmVyYXRlX3NoYWRlcnMuYmF0Ij4KICAgICAgIDxGaWx0
ZXI+U2hhZGVyczwvRmlsdGVyPgogICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxz
cmNcbGliR0xFU3YyXHJlbmRlcmVyXHNoYWRlcnNcUGFzc3Rocm91Z2gxMS5obHNsIj4KKyAgICA8
Tm9uZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXGQzZDExXHNoYWRlcnNcUGFz
c3Rocm91Z2gxMS5obHNsIj4KICAgICAgIDxGaWx0ZXI+U2hhZGVyczwvRmlsdGVyPgogICAgIDwv
Tm9uZT4KLSAgICA8Tm9uZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJlbmRlcmVyXHNoYWRl
cnNcQ2xlYXIxMS5obHNsIj4KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xFU3YyXHJl
bmRlcmVyXGQzZDExXHNoYWRlcnNcQ2xlYXIxMS5obHNsIj4KICAgICAgIDxGaWx0ZXI+U2hhZGVy
czwvRmlsdGVyPgogICAgIDwvTm9uZT4KICAgICA8Tm9uZSBJbmNsdWRlPSIuLlxzcmNcbGliR0xF
U3YyXGxpYkdMRVN2Mi5kZWYiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9BTkdMRS52Y3hwcm9qL3RyYW5zbGF0b3JfY29tbW9uLnZjeHByb2ogYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9BTkdMRS52Y3hwcm9qL3RyYW5zbGF0b3JfY29tbW9uLnZjeHByb2oKaW5kZXgg
NzNmM2QyOTc4MDMzODFhOTBiODA0YWJhYjI0ODY4NjQ1NWMxMWM3My4uMjgyZmU3MDUyY2IxNzdi
NGY2MGZlM2RhYjQxMjI4MjU5NTQyZmNhYSAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvQU5HTEUudmN4cHJvai90cmFuc2xhdG9yX2NvbW1vbi52Y3hwcm9qCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnZjeHByb2ovdHJhbnNsYXRvcl9jb21tb24udmN4cHJv
agpAQCAtMTM5LDk2ICsxMzksOTggQEAKICAgPC9JbXBvcnRHcm91cD4KICAgPFByb3BlcnR5R3Jv
dXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CiAgIDxJdGVtR3JvdXA+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIiAvPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXENvZGVHZW4uY3BwIiAvPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXENvbXBpbGVyLmNwcCIgLz4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxkZWJ1Zy5jcHAiIC8+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcRGV0ZWN0Q2FsbERlcHRoLmNw
cCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxEaWFnbm9zdGlj
cy5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcRGlyZWN0
aXZlSGFuZGxlci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGls
ZXJcRm9yTG9vcFVucm9sbC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNc
Y29tcGlsZXJcSW5mb1NpbmsuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXEluaXRpYWxpemUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
c3JjXGNvbXBpbGVyXEluaXRpYWxpemVEbGwuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cc3JjXGNvbXBpbGVyXEluaXRpYWxpemVHTFBvc2l0aW9uLmNwcCIgLz4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxJbml0aWFsaXplUGFyc2VDb250ZXh0LmNw
cCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxJbnRlcm1lZGlh
dGUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXGludGVy
bU91dC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcSW50
ZXJtVHJhdmVyc2UuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBp
bGVyXE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHNyY1xjb21waWxlclxvc3NvdXJjZV93aW4uY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cc3JjXGNvbXBpbGVyXHBhcnNlQ29uc3QuY3BwIiAvPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFBhcnNlQ29udGV4dC5jcHAiIC8+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcUG9vbEFsbG9jLmNwcCIgLz4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxRdWFsaWZpZXJBbGl2ZS5jcHAiIC8+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcUmVtb3ZlVHJlZS5jcHAiIC8+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcU2hhZGVyTGFuZy5jcHAi
IC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcU3ltYm9sVGFibGUu
Y3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFVuZm9sZFNo
b3J0Q2lyY3VpdEFTVC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29t
cGlsZXJcdXRpbC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGls
ZXJcVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxzcmNcY29tcGlsZXJcVmFyaWFibGVJbmZvLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHNyY1xjb21waWxlclxWYXJpYWJsZVBhY2tlci5jcHAiIC8+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZ2xzbGFuZ19sZXguY3BwIiAvPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXGdsc2xhbmdfdGFiLmNwcCIgLz4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxkZXBncmFwaFxEZXBlbmRlbmN5R3Jh
cGguY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXGRlcGdy
YXBoXERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cc3JjXGNvbXBpbGVyXGRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAiIC8+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZGVwZ3JhcGhcRGVwZW5k
ZW5jeUdyYXBoVHJhdmVyc2UuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXHRpbWluZ1xSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCIgLz4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0aW1pbmdcUmVzdHJpY3RWZXJ0
ZXhTaGFkZXJUaW1pbmcuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNv
bXBpbGVyXFZlcnNpb25HTFNMLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNy
Y1xjb21waWxlclx0cmFuc2xhdG9yXEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCIgLz4KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXENvZGVHZW4u
Y3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0
b3JcQ29tcGlsZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBp
bGVyXHRyYW5zbGF0b3JcY29tcGlsZXJkZWJ1Zy5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxEZXRlY3RDYWxsRGVwdGguY3BwIiAvPgor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcRGlhZ25v
c3RpY3MuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRy
YW5zbGF0b3JcRGlyZWN0aXZlSGFuZGxlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxGb3JMb29wVW5yb2xsLmNwcCIgLz4KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXEluZm9TaW5rLmNw
cCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9y
XEluaXRpYWxpemUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBp
bGVyXHRyYW5zbGF0b3JcSW5pdGlhbGl6ZVZhcmlhYmxlcy5jcHAiIC8+CisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxJbml0aWFsaXplRGxsLmNwcCIg
Lz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXElu
aXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
c3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSW50ZXJtZWRpYXRlLmNwcCIgLz4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGludGVybU91dC5jcHAiIC8+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxJbnRl
cm1UcmF2ZXJzZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGls
ZXJcdHJhbnNsYXRvclxNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAiIC8+CisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxvc3NvdXJjZV93aW4uY3BwIiAv
PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JccGFy
c2VDb25zdC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJc
dHJhbnNsYXRvclxQYXJzZUNvbnRleHQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcUG9vbEFsbG9jLmNwcCIgLz4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFF1YWxpZmllckFsaXZlLmNw
cCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9y
XFJlbW92ZVRyZWUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBp
bGVyXHRyYW5zbGF0b3JcUmV3cml0ZUVsc2VCbG9ja3MuY3BwIiAvPgorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcU2hhZGVyTGFuZy5jcHAiIC8+Cisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxTeW1ib2xU
YWJsZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJh
bnNsYXRvclxVbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcdXRpbC5jcHAiIC8+CisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxWYWxpZGF0ZUxpbWl0YXRp
b25zLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFu
c2xhdG9yXFZhcmlhYmxlSW5mby5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxz
cmNcY29tcGlsZXJcdHJhbnNsYXRvclxWYXJpYWJsZVBhY2tlci5jcHAiIC8+CisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxnbHNsYW5nX2xleC5jcHAi
IC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxn
bHNsYW5nX3RhYi5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGls
ZXJcdHJhbnNsYXRvclxkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGguY3BwIiAvPgorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcZGVwZ3JhcGhcRGVwZW5k
ZW5jeUdyYXBoQnVpbGRlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNc
Y29tcGlsZXJcdHJhbnNsYXRvclxkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIiAv
PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcZGVw
Z3JhcGhcRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcdGltaW5nXFJlc3RyaWN0RnJhZ21lbnRT
aGFkZXJUaW1pbmcuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBp
bGVyXHRyYW5zbGF0b3JcdGltaW5nXFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCIgLz4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFZlcnNp
b25HTFNMLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1x0aGlyZF9wYXJ0
eVxjb21waWxlclxBcnJheUJvdW5kc0NsYW1wZXIuY3BwIiAvPgogICA8L0l0ZW1Hcm91cD4KICAg
PEl0ZW1Hcm91cD4KLSAgICA8Q3VzdG9tQnVpbGQgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXGds
c2xhbmcubCI+CisgICAgPEN1c3RvbUJ1aWxkIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFu
c2xhdG9yXGdsc2xhbmcubCI+CiAgICAgPC9DdXN0b21CdWlsZD4KLSAgICA8Q3VzdG9tQnVpbGQg
SW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXGdsc2xhbmcueSI+CisgICAgPEN1c3RvbUJ1aWxkIElu
Y2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGdsc2xhbmcueSI+CiAgICAgPC9DdXN0
b21CdWlsZD4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcQmFzZVR5cGVzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCIgLz4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxDb21tb24uaCIgLz4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxDb25zdGFudFVuaW9uLmgiIC8+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZGVidWcuaCIgLz4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxEZXRlY3RDYWxsRGVwdGguaCIgLz4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxEaWFnbm9zdGljcy5oIiAv
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXERpcmVjdGl2ZUhhbmRs
ZXIuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxGb3JMb29w
VW5yb2xsLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcSGFz
aE5hbWVzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcSW5m
b1NpbmsuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxJbml0
aWFsaXplLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcSW5p
dGlhbGl6ZURsbC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVy
XEluaXRpYWxpemVHbG9iYWxzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNc
Y29tcGlsZXJcSW5pdGlhbGl6ZUdMUG9zaXRpb24uaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHNyY1xjb21waWxlclxJbml0aWFsaXplUGFyc2VDb250ZXh0LmgiIC8+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcaW50ZXJtZWRpYXRlLmgiIC8+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcbG9jYWxpbnRlcm1lZGlhdGUuaCIg
Lz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxNYXBMb25nVmFyaWFi
bGVOYW1lcy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXE1N
YXAuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxvc2luY2x1
ZGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxQYXJzZUNv
bnRleHQuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxQb29s
QWxsb2MuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxRdWFs
aWZpZXJBbGl2ZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVy
XFJlbW92ZVRyZWUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxl
clxSZW5hbWVGdW5jdGlvbi5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNv
bXBpbGVyXHRyYW5zbGF0b3JcQmFzZVR5cGVzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oIiAv
PgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcQ29t
bW9uLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNs
YXRvclxDb25zdGFudFVuaW9uLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNc
Y29tcGlsZXJcdHJhbnNsYXRvclxkZWJ1Zy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcRGV0ZWN0Q2FsbERlcHRoLmgiIC8+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxEaWFnbm9zdGljcy5o
IiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3Jc
RGlyZWN0aXZlSGFuZGxlci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNv
bXBpbGVyXHRyYW5zbGF0b3JcRm9yTG9vcFVucm9sbC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSGFzaE5hbWVzLmgiIC8+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxJbmZvU2luay5oIiAv
PgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSW5p
dGlhbGl6ZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRy
YW5zbGF0b3JcSW5pdGlhbGl6ZVZhcmlhYmxlcy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSW5pdGlhbGl6ZURsbC5oIiAvPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSW5pdGlhbGl6ZUds
b2JhbHMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFu
c2xhdG9yXEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGludGVybWVkaWF0ZS5oIiAvPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcbG9jYWxpbnRlcm1l
ZGlhdGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFu
c2xhdG9yXE1hcExvbmdWYXJpYWJsZU5hbWVzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxNTWFwLmgiIC8+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxvc2luY2x1ZGUuaCIgLz4KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFBhcnNlQ29udGV4
dC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0
b3JcUG9vbEFsbG9jLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGls
ZXJcdHJhbnNsYXRvclxRdWFsaWZpZXJBbGl2ZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcUmVtb3ZlVHJlZS5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcUmVuYW1lRnVuY3Rpb24u
aCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9y
XFJld3JpdGVFbHNlQmxvY2tzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbmNs
dWRlXEdMU0xBTkdcU2hhZGVyTGFuZy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
c3JjXGNvbXBpbGVyXFNoSGFuZGxlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxz
cmNcY29tcGlsZXJcU3ltYm9sVGFibGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHNyY1xjb21waWxlclxUeXBlcy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cc3JjXGNvbXBpbGVyXHV0aWwuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHNyY1xjb21waWxlclxWYWxpZGF0ZUxpbWl0YXRpb25zLmgiIC8+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcVmFyaWFibGVJbmZvLmgiIC8+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcVmFyaWFibGVQYWNrZXIuaCIgLz4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxnbHNsYW5nX3RhYi5oIiAvPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRpbWluZ1xSZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29t
cGlsZXJcdGltaW5nXFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgiIC8+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoLmgi
IC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZGVwZ3JhcGhcRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXGRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaE91dHB1dC5oIiAvPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFZlcnNpb25HTFNMLmgiIC8+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxTaEhhbmRsZS5oIiAv
PgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcU3lt
Ym9sVGFibGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0
cmFuc2xhdG9yXFR5cGVzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29t
cGlsZXJcdHJhbnNsYXRvclxVbmZvbGRTaG9ydENpcmN1aXRBU1QuaCIgLz4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXHV0aWwuaCIgLz4KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFZhbGlkYXRlTGlt
aXRhdGlvbnMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0
cmFuc2xhdG9yXFZhcmlhYmxlSW5mby5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
c3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcVmFyaWFibGVQYWNrZXIuaCIgLz4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGdsc2xhbmdfdGFiLmgiIC8+
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclx0aW1p
bmdcUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcdGltaW5nXFJlc3RyaWN0VmVydGV4U2hh
ZGVyVGltaW5nLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJc
dHJhbnNsYXRvclxkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGguaCIgLz4KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGRlcGdyYXBoXERlcGVuZGVuY3lH
cmFwaEJ1aWxkZXIuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxl
clx0cmFuc2xhdG9yXGRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaE91dHB1dC5oIiAvPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcVmVyc2lvbkdMU0wu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1x0aGlyZF9wYXJ0eVxjb21waWxl
clxBcnJheUJvdW5kc0NsYW1wZXIuaCIgLz4KICAgPC9JdGVtR3JvdXA+CiAgIDxJbXBvcnQgUHJv
amVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS52Y3hwcm9qL3RyYW5zbGF0b3JfY29t
bW9uLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnZjeHBy
b2ovdHJhbnNsYXRvcl9jb21tb24udmN4cHJvai5maWx0ZXJzCmluZGV4IDk4ZDc3N2UzYmNkODZh
ZGQ2YWFiMDBjYWVlZTFjYjk4MDg3MDkyN2YuLjMyNThhNzQ1YTdmN2M1NmMzN2Y5NDAzNGI1OTJj
YTQ5ZWFjYTM1NTggMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnZj
eHByb2ovdHJhbnNsYXRvcl9jb21tb24udmN4cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL0FOR0xFLnZjeHByb2ovdHJhbnNsYXRvcl9jb21tb24udmN4cHJvai5maWx0
ZXJzCkBAIC0yOSwyNjMgKzI5LDI2MyBAQAogICAgIDwvRmlsdGVyPgogICA8L0l0ZW1Hcm91cD4K
ICAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxn
bHNsYW5nX2xleC5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVy
XHRyYW5zbGF0b3JcZ2xzbGFuZ19sZXguY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVz
XGdlbmVyYXRlZDwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cc3JjXGNvbXBpbGVyXGdsc2xhbmdfdGFiLmNwcCI+CisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxnbHNsYW5nX3RhYi5jcHAiPgogICAg
ICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcZ2VuZXJhdGVkPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBp
bGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZGVwZ3JhcGhcRGVw
ZW5kZW5jeUdyYXBoLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGls
ZXJcdHJhbnNsYXRvclxkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGguY3BwIj4KICAgICAgIDxGaWx0
ZXI+U291cmNlIEZpbGVzXGRlcGdyYXBoPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZGVwZ3JhcGhcRGVwZW5kZW5jeUdy
YXBoQnVpbGRlci5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVy
XHRyYW5zbGF0b3JcZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAiPgogICAgICAg
PEZpbHRlcj5Tb3VyY2UgRmlsZXNcZGVwZ3JhcGg8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxkZXBncmFwaFxEZXBlbmRl
bmN5R3JhcGhPdXRwdXQuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclx0cmFuc2xhdG9yXGRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAiPgogICAg
ICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcZGVwZ3JhcGg8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGls
ZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxkZXBncmFwaFxEZXBl
bmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXHRyYW5zbGF0b3JcZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3Bw
Ij4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGRlcGdyYXBoPC9GaWx0ZXI+CiAgICAgPC9D
bENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdGltaW5n
XFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXHRpbWluZ1xSZXN0cmljdEZyYWdtZW50U2hh
ZGVyVGltaW5nLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aW1pbmc8L0ZpbHRl
cj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclx0aW1pbmdcUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIj4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXHRpbWluZ1xSZXN0cmljdFZl
cnRleFNoYWRlclRpbWluZy5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGltaW5n
PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxz
cmNcdGhpcmRfcGFydHlcY29tcGlsZXJcQXJyYXlCb3VuZHNDbGFtcGVyLmNwcCI+CiAgICAgICA8
RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFZhcmlhYmxlUGFja2VyLmNwcCI+CisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxWYXJpYWJsZVBh
Y2tlci5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0Ns
Q29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxCdWlsdElu
RnVuY3Rpb25FbXVsYXRvci5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNv
bXBpbGVyXHRyYW5zbGF0b3JcQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIj4KICAgICAgIDxG
aWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcQ29tcGlsZXIuY3BwIj4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXENvbXBpbGVyLmNwcCI+CiAg
ICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXGRlYnVnLmNwcCI+CisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxjb21waWxlcmRlYnVn
LmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21w
aWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXERldGVjdENhbGxE
ZXB0aC5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5z
bGF0b3JcRGV0ZWN0Q2FsbERlcHRoLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwv
RmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXERpYWdub3N0aWNzLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxz
cmNcY29tcGlsZXJcdHJhbnNsYXRvclxEaWFnbm9zdGljcy5jcHAiPgogICAgICAgPEZpbHRlcj5T
b3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHNyY1xjb21waWxlclxEaXJlY3RpdmVIYW5kbGVyLmNwcCI+CisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxEaXJlY3RpdmVIYW5kbGVy
LmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21w
aWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXEZvckxvb3BVbnJv
bGwuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xh
dG9yXEZvckxvb3BVbnJvbGwuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0
ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29t
cGlsZXJcSW5mb1NpbmsuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21w
aWxlclx0cmFuc2xhdG9yXEluZm9TaW5rLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxl
czwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
c3JjXGNvbXBpbGVyXEluaXRpYWxpemUuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHNyY1xjb21waWxlclx0cmFuc2xhdG9yXEluaXRpYWxpemUuY3BwIj4KICAgICAgIDxGaWx0ZXI+
U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcSW5pdGlhbGl6ZURsbC5jcHAiPgorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSW5pdGlhbGl6ZVZhcmlhYmxl
cy5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxJbml0aWFsaXpl
UGFyc2VDb250ZXh0LmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGls
ZXJcdHJhbnNsYXRvclxJbml0aWFsaXplRGxsLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBG
aWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cc3JjXGNvbXBpbGVyXEludGVybWVkaWF0ZS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAi
PgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxpbnRlcm1PdXQuY3BwIj4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXEludGVy
bWVkaWF0ZS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8
L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxJbnRl
cm1UcmF2ZXJzZS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVy
XHRyYW5zbGF0b3JcaW50ZXJtT3V0LmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwv
RmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxJbnRlcm1UcmF2ZXJzZS5jcHAiPgogICAg
ICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxvc3NvdXJjZV93aW4uY3BwIj4KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXE1hcExvbmdW
YXJpYWJsZU5hbWVzLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgog
ICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVy
XHBhcnNlQ29uc3QuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxl
clx0cmFuc2xhdG9yXG9zc291cmNlX3dpbi5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmls
ZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHNyY1xjb21waWxlclxQb29sQWxsb2MuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHNyY1xjb21waWxlclx0cmFuc2xhdG9yXHBhcnNlQ29uc3QuY3BwIj4KICAgICAgIDxGaWx0ZXI+
U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcUXVhbGlmaWVyQWxpdmUuY3BwIj4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFBvb2xBbGxvYy5jcHAiPgog
ICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxSZW1vdmVUcmVlLmNwcCI+Cisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxRdWFsaWZp
ZXJBbGl2ZS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8
L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxTaGFk
ZXJMYW5nLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJh
bnNsYXRvclxSZW1vdmVUcmVlLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmls
dGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNv
bXBpbGVyXFN5bWJvbFRhYmxlLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNc
Y29tcGlsZXJcdHJhbnNsYXRvclxTaGFkZXJMYW5nLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJj
ZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cc3JjXGNvbXBpbGVyXHV0aWwuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFN5bWJvbFRhYmxlLmNwcCI+CiAgICAgICA8RmlsdGVy
PlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwIj4KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXHV0aWwuY3BwIj4K
ICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcVmFyaWFibGVJbmZvLmNwcCI+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxWYWxp
ZGF0ZUxpbWl0YXRpb25zLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVy
PgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBp
bGVyXEluaXRpYWxpemVHTFBvc2l0aW9uLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxWYXJpYWJsZUluZm8uY3BwIj4KICAgICAgIDxGaWx0
ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcUGFyc2VDb250ZXh0LmNwcCI+CisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxQYXJzZUNvbnRleHQuY3Bw
Ij4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcVmVyc2lvbkdMU0wuY3Bw
Ij4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFZl
cnNpb25HTFNMLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAg
IDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXENv
ZGVHZW4uY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFu
c2xhdG9yXENvZGVHZW4uY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+
CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzcmNcY29tcGls
ZXJcVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxVbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwIj4KICAg
ICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CiAgIDwv
SXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXGdsc2xhbmdfdGFiLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Jj
XGNvbXBpbGVyXHRyYW5zbGF0b3JcZ2xzbGFuZ190YWIuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRl
ciBGaWxlc1xnZW5lcmF0ZWQ8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0aW1pbmdcUmVzdHJpY3RGcmFnbWVudFNoYWRl
clRpbWluZy5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFu
c2xhdG9yXHRpbWluZ1xSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgiPgogICAgICAgPEZp
bHRlcj5IZWFkZXIgRmlsZXNcdGltaW5nPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdGltaW5nXFJlc3RyaWN0VmVydGV4
U2hhZGVyVGltaW5nLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVy
XHRyYW5zbGF0b3JcdGltaW5nXFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgiPgogICAgICAg
PEZpbHRlcj5IZWFkZXIgRmlsZXNcdGltaW5nPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZGVwZ3JhcGhcRGVwZW5kZW5j
eUdyYXBoLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5z
bGF0b3JcZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIg
RmlsZXNcZGVwZ3JhcGg8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGhCdWlsZGVy
LmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3Jc
ZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVy
IEZpbGVzXGRlcGdyYXBoPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoT3V0cHV0
LmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3Jc
ZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIg
RmlsZXNcZGVwZ3JhcGg8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1x0aGlyZF9wYXJ0eVxjb21waWxlclxBcnJheUJvdW5kc0NsYW1wZXIu
aCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRl
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFZhcmlhYmxlUGFja2Vy
LmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3Jc
VmFyaWFibGVQYWNrZXIuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgog
ICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVy
XFZhcmlhYmxlSW5mby5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxl
clx0cmFuc2xhdG9yXFZhcmlhYmxlSW5mby5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVz
PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxz
cmNcY29tcGlsZXJcVmFsaWRhdGVMaW1pdGF0aW9ucy5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFZhbGlkYXRlTGltaXRhdGlvbnMuaCI+CiAg
ICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHV0aWwuaCI+CisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclx1dGlsLmgiPgogICAgICAg
PEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxUeXBlcy5oIj4KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFR5cGVzLmgiPgogICAgICAgPEZp
bHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxTeW1ib2xUYWJsZS5oIj4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFN5bWJvbFRhYmxlLmgiPgog
ICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxTaEhhbmRsZS5oIj4KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFNoSGFuZGxlLmgi
PgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluY2x1ZGVcR0xTTEFOR1xTaGFkZXJMYW5nLmgi
PgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxSZW5hbWVGdW5jdGlvbi5o
Ij4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFJl
bmFtZUZ1bmN0aW9uLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAg
ICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxS
ZW1vdmVUcmVlLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRy
YW5zbGF0b3JcUmVtb3ZlVHJlZS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0
ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29t
cGlsZXJcUXVhbGlmaWVyQWxpdmUuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNc
Y29tcGlsZXJcdHJhbnNsYXRvclxRdWFsaWZpZXJBbGl2ZS5oIj4KICAgICAgIDxGaWx0ZXI+SGVh
ZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxzcmNcY29tcGlsZXJcUG9vbEFsbG9jLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcUG9vbEFsbG9jLmgiPgogICAgICAgPEZpbHRl
cj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxvc2luY2x1ZGUuaCI+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxvc2luY2x1ZGUuaCI+CiAgICAgICA8
RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXE1NYXAuaCI+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxNTWFwLmgiPgogICAgICAgPEZpbHRl
cj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxNYXBMb25nVmFyaWFibGVOYW1lcy5oIj4KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXE1hcExvbmdWYXJp
YWJsZU5hbWVzLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8
L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxsb2Nh
bGludGVybWVkaWF0ZS5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxl
clx0cmFuc2xhdG9yXGxvY2FsaW50ZXJtZWRpYXRlLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIg
RmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHNyY1xjb21waWxlclxpbnRlcm1lZGlhdGUuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxpbnRlcm1lZGlhdGUuaCI+CiAgICAgICA8Rmls
dGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCI+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxJbml0aWFs
aXplUGFyc2VDb250ZXh0LmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4K
ICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxl
clxJbml0aWFsaXplR2xvYmFscy5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclx0cmFuc2xhdG9yXEluaXRpYWxpemVHbG9iYWxzLmgiPgogICAgICAgPEZpbHRlcj5I
ZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHNyY1xjb21waWxlclxJbml0aWFsaXplRGxsLmgiPgorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSW5pdGlhbGl6ZURsbC5oIj4KICAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcSW5pdGlhbGl6ZS5oIj4KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXEluaXRpYWxpemUu
aCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRl
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXEluZm9TaW5rLmgiPgor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcSW5pdGlh
bGl6ZVZhcmlhYmxlcy5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAg
ICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJc
SGFzaE5hbWVzLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRy
YW5zbGF0b3JcSW5mb1NpbmsuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVy
PgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBp
bGVyXEZvckxvb3BVbnJvbGwuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29t
cGlsZXJcdHJhbnNsYXRvclxIYXNoTmFtZXMuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxl
czwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
c3JjXGNvbXBpbGVyXERpcmVjdGl2ZUhhbmRsZXIuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxzcmNcY29tcGlsZXJcdHJhbnNsYXRvclxGb3JMb29wVW5yb2xsLmgiPgogICAgICAgPEZp
bHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxEaWFnbm9zdGljcy5oIj4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXERpcmVjdGl2ZUhhbmRsZXIu
aCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRl
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXERldGVjdENhbGxEZXB0
aC5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9y
XERpYWdub3N0aWNzLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAg
ICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclxk
ZWJ1Zy5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xh
dG9yXERldGVjdENhbGxEZXB0aC5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0
ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29t
cGlsZXJcQ29uc3RhbnRVbmlvbi5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xj
b21waWxlclx0cmFuc2xhdG9yXGRlYnVnLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8
L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNy
Y1xjb21waWxlclxDb21tb24uaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29t
cGlsZXJcdHJhbnNsYXRvclxDb25zdGFudFVuaW9uLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIg
RmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHNyY1xjb21waWxlclxCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oIj4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXENvbW1vbi5oIj4KICAgICAg
IDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcQmFzZVR5cGVzLmgiPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3IuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAgIDwv
Q2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXEluaXRp
YWxpemVHTFBvc2l0aW9uLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBp
bGVyXHRyYW5zbGF0b3JcQmFzZVR5cGVzLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8
L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNy
Y1xjb21waWxlclxQYXJzZUNvbnRleHQuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxz
cmNcY29tcGlsZXJcdHJhbnNsYXRvclxQYXJzZUNvbnRleHQuaCI+CiAgICAgICA8RmlsdGVyPkhl
YWRlciBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cc3JjXGNvbXBpbGVyXFZlcnNpb25HTFNMLmgiPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcVmVyc2lvbkdMU0wuaCI+CiAgICAgICA8
RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5oIj4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXFVuZm9s
ZFNob3J0Q2lyY3VpdEFTVC5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+
CiAgICAgPC9DbEluY2x1ZGU+CiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgotICAgIDxD
dXN0b21CdWlsZCBJbmNsdWRlPSIuLlxzcmNcY29tcGlsZXJcZ2xzbGFuZy5sIj4KKyAgICA8Q3Vz
dG9tQnVpbGQgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXHRyYW5zbGF0b3JcZ2xzbGFuZy5sIj4K
ICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DdXN0b21CdWlsZD4K
LSAgICA8Q3VzdG9tQnVpbGQgSW5jbHVkZT0iLi5cc3JjXGNvbXBpbGVyXGdsc2xhbmcueSI+Cisg
ICAgPEN1c3RvbUJ1aWxkIEluY2x1ZGU9Ii4uXHNyY1xjb21waWxlclx0cmFuc2xhdG9yXGdsc2xh
bmcueSI+CiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgogICAgIDwvQ3VzdG9t
QnVpbGQ+CiAgIDwvSXRlbUdyb3VwPgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYzEyZDY3OWQ1ZmQ3OWY5
MTFlNzE0ZmNjMjMzOGZhZjc1NWY2MDBjNi4uOGUxMDU3NjYxZjA2YjVhYTNjNDAwMGExYjlhMzlm
NjVhZTEyODUxNyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdM
RS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMSw2MSArMjEsMTIxIEBACiAvKiBFbmQg
UEJYQWdncmVnYXRlVGFyZ2V0IHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNl
Y3Rpb24gKi8KKwkJMzEwMTJFMTIxOEI5N0I5QjAwMzkwNjJGIC8qIEJhc2VUeXBlcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQTAxOEI5N0I5
QjAwMzkwNjJGIC8qIEJhc2VUeXBlcy5oICovOyB9OworCQkzMTAxMkUxMzE4Qjk3QjlCMDAzOTA2
MkYgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQTExOEI5N0I5QjAwMzkwNjJGIC8qIEJ1aWx0
SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCAqLzsgfTsKKwkJMzEwMTJFMTQxOEI5N0I5QjAwMzkwNjJG
IC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRBMjE4Qjk3QjlCMDAzOTA2MkYgLyogQnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3IuaCAqLzsgfTsKKwkJMzEwMTJFMTUxOEI5N0I5QjAwMzkwNjJGIC8qIENv
ZGVHZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzEwMTJEQTMxOEI5N0I5QjAwMzkwNjJGIC8qIENvZGVHZW4uY3BwICovOyB9OworCQkzMTAxMkUx
NjE4Qjk3QjlCMDAzOTA2MkYgLyogQ29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRBNDE4Qjk3QjlCMDAzOTA2MkYgLyogQ29tbW9uLmgg
Ki87IH07CisJCTMxMDEyRTE3MThCOTdCOUIwMDM5MDYyRiAvKiBDb21waWxlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRBNTE4Qjk3QjlC
MDAzOTA2MkYgLyogQ29tcGlsZXIuY3BwICovOyB9OworCQkzMTAxMkUxQTE4Qjk3QjlCMDAzOTA2
MkYgLyogQ29uc3RhbnRVbmlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzEwMTJEQTgxOEI5N0I5QjAwMzkwNjJGIC8qIENvbnN0YW50VW5pb24uaCAq
LzsgfTsKKwkJMzEwMTJFMUIxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRBQTE4
Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLzsgfTsKKwkJMzEwMTJFMUMx
OEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQUIxOEI5N0I5QjAwMzkwNjJGIC8qIERl
cGVuZGVuY3lHcmFwaC5oICovOyB9OworCQkzMTAxMkUxRDE4Qjk3QjlCMDAzOTA2MkYgLyogRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMTAxMkRBQzE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBo
QnVpbGRlci5jcHAgKi87IH07CisJCTMxMDEyRTFFMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRl
bmN5R3JhcGhCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzMTAxMkRBRDE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRl
ci5oICovOyB9OworCQkzMTAxMkUxRjE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBo
T3V0cHV0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDMxMDEyREFFMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwICov
OyB9OworCQkzMTAxMkUyMDE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRB
RjE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggKi87IH07CisJCTMx
MDEyRTIxMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRCMDE4Qjk3
QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICovOyB9OworCQkzMTAx
MkUyMjE4Qjk3QjlCMDAzOTA2MkYgLyogRGV0ZWN0Q2FsbERlcHRoLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREIxMThCOTdCOUIwMDM5MDYy
RiAvKiBEZXRlY3RDYWxsRGVwdGguY3BwICovOyB9OworCQkzMTAxMkUyMzE4Qjk3QjlCMDAzOTA2
MkYgLyogRGV0ZWN0Q2FsbERlcHRoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMTAxMkRCMjE4Qjk3QjlCMDAzOTA2MkYgLyogRGV0ZWN0Q2FsbERlcHRo
LmggKi87IH07CisJCTMxMDEyRTI0MThCOTdCOUIwMDM5MDYyRiAvKiBEZXRlY3REaXNjb250aW51
aXR5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMx
MDEyREIzMThCOTdCOUIwMDM5MDYyRiAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCAqLzsgfTsK
KwkJMzEwMTJFMjUxOEI5N0I5QjAwMzkwNjJGIC8qIERldGVjdERpc2NvbnRpbnVpdHkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREI0MThCOTdC
OUIwMDM5MDYyRiAvKiBEZXRlY3REaXNjb250aW51aXR5LmggKi87IH07CisJCTMxMDEyRTI2MThC
OTdCOUIwMDM5MDYyRiAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRCNTE4Qjk3QjlCMDAzOTA2MkYgLyogRGlhZ25v
c3RpY3MuY3BwICovOyB9OworCQkzMTAxMkUyNzE4Qjk3QjlCMDAzOTA2MkYgLyogRGlhZ25vc3Rp
Y3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEy
REI2MThCOTdCOUIwMDM5MDYyRiAvKiBEaWFnbm9zdGljcy5oICovOyB9OworCQkzMTAxMkUyODE4
Qjk3QjlCMDAzOTA2MkYgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRCNzE4Qjk3QjlCMDAzOTA2MkYgLyog
RGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07CisJCTMxMDEyRTI5MThCOTdCOUIwMDM5MDYyRiAv
KiBEaXJlY3RpdmVIYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzMTAxMkRCODE4Qjk3QjlCMDAzOTA2MkYgLyogRGlyZWN0aXZlSGFuZGxlci5o
ICovOyB9OworCQkzMTAxMkUyQTE4Qjk3QjlCMDAzOTA2MkYgLyogRXh0ZW5zaW9uQmVoYXZpb3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREI5
MThCOTdCOUIwMDM5MDYyRiAvKiBFeHRlbnNpb25CZWhhdmlvci5oICovOyB9OworCQkzMTAxMkUy
QjE4Qjk3QjlCMDAzOTA2MkYgLyogRm9yTG9vcFVucm9sbC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRCQTE4Qjk3QjlCMDAzOTA2MkYgLyog
Rm9yTG9vcFVucm9sbC5jcHAgKi87IH07CisJCTMxMDEyRTJDMThCOTdCOUIwMDM5MDYyRiAvKiBG
b3JMb29wVW5yb2xsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMTAxMkRCQjE4Qjk3QjlCMDAzOTA2MkYgLyogRm9yTG9vcFVucm9sbC5oICovOyB9Owor
CQkzMTAxMkUyRDE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJEQkQxOEI5N0I5QjAwMzkwNjJGIC8q
IGdsc2xhbmcuaCAqLzsgfTsKKwkJMzEwMTJFMzAxOEI5N0I5QjAwMzkwNjJGIC8qIGdsc2xhbmdf
bGV4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMx
MDEyREMwMThCOTdCOUIwMDM5MDYyRiAvKiBnbHNsYW5nX2xleC5jcHAgKi87IH07CisJCTMxMDEy
RTMxMThCOTdCOUIwMDM5MDYyRiAvKiBnbHNsYW5nX3RhYi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRDMTE4Qjk3QjlCMDAzOTA2MkYgLyog
Z2xzbGFuZ190YWIuY3BwICovOyB9OworCQkzMTAxMkUzMjE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xz
bGFuZ190YWIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDMxMDEyREMyMThCOTdCOUIwMDM5MDYyRiAvKiBnbHNsYW5nX3RhYi5oICovOyB9OworCQkzMTAx
MkUzMzE4Qjk3QjlCMDAzOTA2MkYgLyogSGFzaE5hbWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRDMzE4Qjk3QjlCMDAzOTA2MkYgLyogSGFz
aE5hbWVzLmggKi87IH07CisJCTMxMDEyRTM0MThCOTdCOUIwMDM5MDYyRiAvKiBJbmZvU2luay5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRD
NDE4Qjk3QjlCMDAzOTA2MkYgLyogSW5mb1NpbmsuY3BwICovOyB9OworCQkzMTAxMkUzNTE4Qjk3
QjlCMDAzOTA2MkYgLyogSW5mb1NpbmsuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxMDEyREM1MThCOTdCOUIwMDM5MDYyRiAvKiBJbmZvU2luay5oICov
OyB9OworCQkzMTAxMkUzNjE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRDNjE4Qjk3QjlC
MDAzOTA2MkYgLyogSW5pdGlhbGl6ZS5jcHAgKi87IH07CisJCTMxMDEyRTM3MThCOTdCOUIwMDM5
MDYyRiAvKiBJbml0aWFsaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzMTAxMkRDNzE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZS5oICovOyB9
OworCQkzMTAxMkUzODE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZURsbC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRDODE4Qjk3QjlC
MDAzOTA2MkYgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi87IH07CisJCTMxMDEyRTM5MThCOTdCOUIw
MDM5MDYyRiAvKiBJbml0aWFsaXplRGxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRDOTE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZURs
bC5oICovOyB9OworCQkzMTAxMkUzQTE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZUdsb2Jh
bHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEy
RENBMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplR2xvYmFscy5oICovOyB9OworCQkzMTAx
MkUzQjE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRDQjE4Qjk3QjlC
MDAzOTA2MkYgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgKi87IH07CisJCTMxMDEyRTND
MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRDQzE4Qjk3QjlCMDAzOTA2
MkYgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICovOyB9OworCQkzMTAxMkUzRDE4Qjk3QjlC
MDAzOTA2MkYgLyogSW5pdGlhbGl6ZVZhcmlhYmxlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRDRDE4Qjk3QjlCMDAzOTA2MkYgLyogSW5p
dGlhbGl6ZVZhcmlhYmxlcy5jcHAgKi87IH07CisJCTMxMDEyRTNFMThCOTdCOUIwMDM5MDYyRiAv
KiBJbml0aWFsaXplVmFyaWFibGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMTAxMkRDRTE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZVZhcmlh
Ymxlcy5oICovOyB9OworCQkzMTAxMkUzRjE4Qjk3QjlCMDAzOTA2MkYgLyogSW50ZXJtZWRpYXRl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEy
RENGMThCOTdCOUIwMDM5MDYyRiAvKiBJbnRlcm1lZGlhdGUuY3BwICovOyB9OworCQkzMTAxMkU0
MDE4Qjk3QjlCMDAzOTA2MkYgLyogaW50ZXJtZWRpYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkREMDE4Qjk3QjlCMDAzOTA2MkYgLyogaW50
ZXJtZWRpYXRlLmggKi87IH07CisJCTMxMDEyRTQxMThCOTdCOUIwMDM5MDYyRiAvKiBpbnRlcm1P
dXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEw
MTJERDExOEI5N0I5QjAwMzkwNjJGIC8qIGludGVybU91dC5jcHAgKi87IH07CisJCTMxMDEyRTQy
MThCOTdCOUIwMDM5MDYyRiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkREMjE4Qjk3QjlCMDAzOTA2MkYgLyog
SW50ZXJtVHJhdmVyc2UuY3BwICovOyB9OworCQkzMTAxMkU0MzE4Qjk3QjlCMDAzOTA2MkYgLyog
bG9jYWxpbnRlcm1lZGlhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDMxMDEyREQzMThCOTdCOUIwMDM5MDYyRiAvKiBsb2NhbGludGVybWVkaWF0ZS5o
ICovOyB9OworCQkzMTAxMkU0NDE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxlTmFt
ZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEw
MTJERDQxOEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCAqLzsgfTsK
KwkJMzEwMTJFNDUxOEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRENTE4Qjk3
QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCAqLzsgfTsKKwkJMzEwMTJFNDYx
OEI5N0I5QjAwMzkwNjJGIC8qIE1NYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxMDEyREQ2MThCOTdCOUIwMDM5MDYyRiAvKiBNTWFwLmggKi87IH07
CisJCTMxMDEyRTQ3MThCOTdCOUIwMDM5MDYyRiAvKiBOb2RlU2VhcmNoLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRENzE4Qjk3QjlCMDAzOTA2
MkYgLyogTm9kZVNlYXJjaC5oICovOyB9OworCQkzMTAxMkU0ODE4Qjk3QjlCMDAzOTA2MkYgLyog
b3NpbmNsdWRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzMTAxMkREODE4Qjk3QjlCMDAzOTA2MkYgLyogb3NpbmNsdWRlLmggKi87IH07CisJCTMxMDEy
RTQ5MThCOTdCOUIwMDM5MDYyRiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkREOTE4Qjk3QjlCMDAzOTA2MkYg
Lyogb3Nzb3VyY2VfcG9zaXguY3BwICovOyB9OworCQkzMTAxMkU0QjE4Qjk3QjlCMDAzOTA2MkYg
LyogT3V0cHV0RVNTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzMTAxMkREQjE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0RVNTTC5jcHAgKi87IH07
CisJCTMxMDEyRTRDMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRFU1NMLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkREQzE4Qjk3QjlCMDAzOTA2
MkYgLyogT3V0cHV0RVNTTC5oICovOyB9OworCQkzMTAxMkU0RDE4Qjk3QjlCMDAzOTA2MkYgLyog
T3V0cHV0R0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMTAxMkRERDE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0R0xTTC5jcHAgKi87IH07CisJ
CTMxMDEyRTRFMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRHTFNMLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRERTE4Qjk3QjlCMDAzOTA2MkYg
LyogT3V0cHV0R0xTTC5oICovOyB9OworCQkzMTAxMkU0RjE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0
cHV0R0xTTEJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzEwMTJEREYxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLzsg
fTsKKwkJMzEwMTJFNTAxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEdMU0xCYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRFMDE4Qjk3QjlC
MDAzOTA2MkYgLyogT3V0cHV0R0xTTEJhc2UuaCAqLzsgfTsKKwkJMzEwMTJFNTExOEI5N0I5QjAw
MzkwNjJGIC8qIE91dHB1dEhMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzEwMTJERTExOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEhMU0wuY3Bw
ICovOyB9OworCQkzMTAxMkU1MjE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0SExTTC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERTIxOEI5N0I5
QjAwMzkwNjJGIC8qIE91dHB1dEhMU0wuaCAqLzsgfTsKKwkJMzEwMTJFNTMxOEI5N0I5QjAwMzkw
NjJGIC8qIHBhcnNlQ29uc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzEwMTJERTMxOEI5N0I5QjAwMzkwNjJGIC8qIHBhcnNlQ29uc3QuY3BwICov
OyB9OworCQkzMTAxMkU1NDE4Qjk3QjlCMDAzOTA2MkYgLyogUGFyc2VDb250ZXh0LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREU0MThCOTdC
OUIwMDM5MDYyRiAvKiBQYXJzZUNvbnRleHQuY3BwICovOyB9OworCQkzMTAxMkU1NTE4Qjk3QjlC
MDAzOTA2MkYgLyogUGFyc2VDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRFNTE4Qjk3QjlCMDAzOTA2MkYgLyogUGFyc2VDb250ZXh0
LmggKi87IH07CisJCTMxMDEyRTU2MThCOTdCOUIwMDM5MDYyRiAvKiBQb29sQWxsb2MuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERTYxOEI5
N0I5QjAwMzkwNjJGIC8qIFBvb2xBbGxvYy5jcHAgKi87IH07CisJCTMxMDEyRTU3MThCOTdCOUIw
MDM5MDYyRiAvKiBQb29sQWxsb2MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDMxMDEyREU3MThCOTdCOUIwMDM5MDYyRiAvKiBQb29sQWxsb2MuaCAqLzsg
fTsKKwkJMzEwMTJFNTgxOEI5N0I5QjAwMzkwNjJGIC8qIFByYWdtYS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERTgxOEI5N0I5QjAwMzkwNjJG
IC8qIFByYWdtYS5oICovOyB9OworCQkzMTAxMkU1OTE4Qjk3QjlCMDAzOTA2MkYgLyogUXVhbGlm
aWVyQWxpdmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzEwMTJERTkxOEI5N0I5QjAwMzkwNjJGIC8qIFF1YWxpZmllckFsaXZlLmNwcCAqLzsgfTsK
KwkJMzEwMTJFNUExOEI5N0I5QjAwMzkwNjJGIC8qIFF1YWxpZmllckFsaXZlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRFQTE4Qjk3QjlCMDAz
OTA2MkYgLyogUXVhbGlmaWVyQWxpdmUuaCAqLzsgfTsKKwkJMzEwMTJFNUIxOEI5N0I5QjAwMzkw
NjJGIC8qIFJlbW92ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzEwMTJERUIxOEI5N0I5QjAwMzkwNjJGIC8qIFJlbW92ZVRyZWUuY3BwICov
OyB9OworCQkzMTAxMkU1QzE4Qjk3QjlCMDAzOTA2MkYgLyogUmVtb3ZlVHJlZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERUMxOEI5N0I5QjAw
MzkwNjJGIC8qIFJlbW92ZVRyZWUuaCAqLzsgfTsKKwkJMzEwMTJFNUQxOEI5N0I5QjAwMzkwNjJG
IC8qIFJlbmFtZUZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzMTAxMkRFRDE4Qjk3QjlCMDAzOTA2MkYgLyogUmVuYW1lRnVuY3Rpb24uaCAq
LzsgfTsKKwkJMzEwMTJFNUUxOEI5N0I5QjAwMzkwNjJGIC8qIFJld3JpdGVFbHNlQmxvY2tzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREVF
MThCOTdCOUIwMDM5MDYyRiAvKiBSZXdyaXRlRWxzZUJsb2Nrcy5jcHAgKi87IH07CisJCTMxMDEy
RTVGMThCOTdCOUIwMDM5MDYyRiAvKiBSZXdyaXRlRWxzZUJsb2Nrcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERUYxOEI5N0I5QjAwMzkwNjJG
IC8qIFJld3JpdGVFbHNlQmxvY2tzLmggKi87IH07CisJCTMxMDEyRTYwMThCOTdCOUIwMDM5MDYy
RiAvKiBTZWFyY2hTeW1ib2wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzEwMTJERjAxOEI5N0I5QjAwMzkwNjJGIC8qIFNlYXJjaFN5bWJvbC5jcHAg
Ki87IH07CisJCTMxMDEyRTYxMThCOTdCOUIwMDM5MDYyRiAvKiBTZWFyY2hTeW1ib2wuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREYxMThCOTdC
OUIwMDM5MDYyRiAvKiBTZWFyY2hTeW1ib2wuaCAqLzsgfTsKKwkJMzEwMTJFNjIxOEI5N0I5QjAw
MzkwNjJGIC8qIFNoYWRlckxhbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzEwMTJERjIxOEI5N0I5QjAwMzkwNjJGIC8qIFNoYWRlckxhbmcuY3Bw
ICovOyB9OworCQkzMTAxMkU2MzE4Qjk3QjlCMDAzOTA2MkYgLyogU2hIYW5kbGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREYzMThCOTdCOUIw
MDM5MDYyRiAvKiBTaEhhbmRsZS5oICovOyB9OworCQkzMTAxMkU2NDE4Qjk3QjlCMDAzOTA2MkYg
LyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzEwMTJERjQxOEI5N0I5QjAwMzkwNjJGIC8qIFN5bWJvbFRhYmxlLmNwcCAqLzsg
fTsKKwkJMzEwMTJFNjUxOEI5N0I5QjAwMzkwNjJGIC8qIFN5bWJvbFRhYmxlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRGNTE4Qjk3QjlCMDAz
OTA2MkYgLyogU3ltYm9sVGFibGUuaCAqLzsgfTsKKwkJMzEwMTJFNjYxOEI5N0I5QjAwMzkwNjJG
IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERjcxOEI5N0I5QjAwMzkwNjJGIC8qIFJl
c3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovOyB9OworCQkzMTAxMkU2NzE4Qjk3QjlC
MDAzOTA2MkYgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERjgxOEI5N0I5QjAwMzkwNjJG
IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCAqLzsgfTsKKwkJMzEwMTJFNjgxOEI5
N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREY5MThCOTdCOUIwMDM5
MDYyRiAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgKi87IH07CisJCTMxMDEyRTY5
MThCOTdCOUIwMDM5MDYyRiAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERkExOEI5N0I5QjAw
MzkwNjJGIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggKi87IH07CisJCTMxMDEyRTZB
MThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRGQjE4Qjk3QjlCMDAzOTA2MkYgLyog
VHJhbnNsYXRvckVTU0wuY3BwICovOyB9OworCQkzMTAxMkU2QjE4Qjk3QjlCMDAzOTA2MkYgLyog
VHJhbnNsYXRvckVTU0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMxMDEyREZDMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9yRVNTTC5oICovOyB9
OworCQkzMTAxMkU2QzE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERkQxOEI5N0I5
QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLzsgfTsKKwkJMzEwMTJFNkQxOEI5N0I5
QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JHTFNMLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRGRTE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRv
ckdMU0wuaCAqLzsgfTsKKwkJMzEwMTJFNkUxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JI
TFNMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMx
MDEyREZGMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9ySExTTC5jcHAgKi87IH07CisJCTMx
MDEyRTZGMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9ySExTTC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJFMDAxOEI5N0I5QjAwMzkwNjJG
IC8qIFRyYW5zbGF0b3JITFNMLmggKi87IH07CisJCTMxMDEyRTcwMThCOTdCOUIwMDM5MDYyRiAv
KiBUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzEwMTJFMDExOEI5N0I5QjAwMzkwNjJGIC8qIFR5cGVzLmggKi87IH07CisJCTMxMDEyRTcxMThC
OTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJFMDIxOEI5N0I5QjAwMzkwNjJGIC8q
IFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi87IH07CisJCTMxMDEyRTcyMThCOTdCOUIwMDM5MDYy
RiAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxMDEyRTAzMThCOTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENp
cmN1aXQuaCAqLzsgfTsKKwkJMzEwMTJFNzMxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0
Q2lyY3VpdEFTVC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMTAxMkUwNDE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNw
cCAqLzsgfTsKKwkJMzEwMTJFNzQxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3Vp
dEFTVC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEw
MTJFMDUxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5oICovOyB9Owor
CQkzMTAxMkU3NTE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwNjE4Qjk3QjlCMDAzOTA2MkYg
LyogVW5pZm9ybS5jcHAgKi87IH07CisJCTMxMDEyRTc2MThCOTdCOUIwMDM5MDYyRiAvKiBVbmlm
b3JtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAx
MkUwNzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5oICovOyB9OworCQkzMTAxMkU3NzE4Qjk3
QjlCMDAzOTA2MkYgLyogdXRpbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMTAxMkUwODE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5jcHAgKi87IH07
CisJCTMxMDEyRTc4MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwOTE4Qjk3QjlCMDAzOTA2MkYgLyog
dXRpbC5oICovOyB9OworCQkzMTAxMkU3OTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1p
dGF0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzMTAxMkUwQTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgKi87
IH07CisJCTMxMDEyRTdBMThCOTdCOUIwMDM5MDYyRiAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwQjE4
Qjk3QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5oICovOyB9OworCQkzMTAxMkU3
QjE4Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFibGVJbmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTBDMThCOTdCOUIwMDM5MDYyRiAvKiBW
YXJpYWJsZUluZm8uY3BwICovOyB9OworCQkzMTAxMkU3QzE4Qjk3QjlCMDAzOTA2MkYgLyogVmFy
aWFibGVJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzMTAxMkUwRDE4Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFibGVJbmZvLmggKi87IH07CisJCTMx
MDEyRTdEMThCOTdCOUIwMDM5MDYyRiAvKiBWYXJpYWJsZVBhY2tlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwRTE4Qjk3QjlCMDAzOTA2
MkYgLyogVmFyaWFibGVQYWNrZXIuY3BwICovOyB9OworCQkzMTAxMkU3RTE4Qjk3QjlCMDAzOTA2
MkYgLyogVmFyaWFibGVQYWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDMxMDEyRTBGMThCOTdCOUIwMDM5MDYyRiAvKiBWYXJpYWJsZVBhY2tlci5o
ICovOyB9OworCQkzMTAxMkU3RjE4Qjk3QjlCMDAzOTA2MkYgLyogVmVyc2lvbkdMU0wuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJFMTAxOEI5
N0I5QjAwMzkwNjJGIC8qIFZlcnNpb25HTFNMLmNwcCAqLzsgfTsKKwkJMzEwMTJFODAxOEI5N0I5
QjAwMzkwNjJGIC8qIFZlcnNpb25HTFNMLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUxMTE4Qjk3QjlCMDAzOTA2MkYgLyogVmVyc2lvbkdMU0wu
aCAqLzsgfTsKKwkJMzEwMTJFODMxOEI5N0M4NjAwMzkwNjJGIC8qIGNvbXBpbGVyZGVidWcuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJFODEx
OEI5N0M4NjAwMzkwNjJGIC8qIGNvbXBpbGVyZGVidWcuY3BwICovOyB9OworCQkzMTAxMkU4NDE4
Qjk3Qzg2MDAzOTA2MkYgLyogY29tcGlsZXJkZWJ1Zy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJFODIxOEI5N0M4NjAwMzkwNjJGIC8qIGNvbXBp
bGVyZGVidWcuaCAqLzsgfTsKIAkJMzEyQkRCMEMxNUZFQ0FDOTAwOTdFQkM3IC8qIEFOR0xFLnBs
aXN0IGluIENvcHlGaWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTJC
REIwOTE1RkVDOTFFMDA5N0VCQzcgLyogQU5HTEUucGxpc3QgKi87IH07CiAJCTMxMkJEQjBFMTVG
RUNBRTUwMDk3RUJDNyAvKiBBTkdMRS50eHQgaW4gQ29weUZpbGVzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDMxMkJEQjBBMTVGRUNBM0EwMDk3RUJDNyAvKiBBTkdMRS50eHQg
Ki87IH07CiAJCTQ5OTUxQzAzMTRCN0FBQjMwMDYwRTk2RSAvKiBsZW5ndGhfbGltaXRzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTk1MUMwMjE0QjdB
QUIzMDA2MEU5NkUgLyogbGVuZ3RoX2xpbWl0cy5oICovOyB9OwotCQk0OTk1MUMwOTE0QjdBQUQ4
MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk5NTFDMDUxNEI3QUFENzAwNjBFOTZFIC8q
IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCAqLzsgfTsKLQkJNDk5NTFDMEExNEI3QUFEODAw
NjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTk1MUMwNjE0QjdBQUQ4MDA2MEU5NkUgLyogQnVp
bHRJbkZ1bmN0aW9uRW11bGF0b3IuaCAqLzsgfTsKLQkJNUNCMTNGRDQxNzlEQjNGRDAwMUY4NTFE
IC8qIERldGVjdENhbGxEZXB0aC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1Q0IxM0ZEMjE3OURCM0ZEMDAxRjg1MUQgLyogRGV0ZWN0Q2FsbERlcHRo
LmNwcCAqLzsgfTsKLQkJNUNCMTNGRDUxNzlEQjNGRDAwMUY4NTFEIC8qIERldGVjdENhbGxEZXB0
aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNCMTNG
RDMxNzlEQjNGRDAwMUY4NTFEIC8qIERldGVjdENhbGxEZXB0aC5oICovOyB9OwotCQk3MjMwOUE0
RDE4M0MyNTkzMDAzNzBCOTMgLyogQ29kZUdlbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjY1MDkzMDE4M0FBMjEzMDBEMjhCNDggLyogQ29kZUdl
bi5jcHAgKi87IH07Ci0JCTcyMzA5QTRFMTgzQzI1OUMwMDM3MEI5MyAvKiBVbmZvbGRTaG9ydENp
cmN1aXRBU1QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzI2NTA5MzYxODNBQTNDNjAwRDI4QjQ4IC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAg
Ki87IH07Ci0JCTcyMzA5QTRGMTgzQzI1OUUwMDM3MEI5MyAvKiBVbmZvbGRTaG9ydENpcmN1aXRB
U1QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNjUw
OTM3MTgzQUEzQzYwMEQyOEI0OCAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuaCAqLzsgfTsKLQkJ
NzIzMDlBNTAxODNDMjVBMTAwMzcwQjkzIC8qIFBhcnNlQ29udGV4dC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjY1MDkzNDE4M0FBM0IyMDBEMjhC
NDggLyogUGFyc2VDb250ZXh0LmNwcCAqLzsgfTsKLQkJNzIzMDlBNTExODNDMjVBNTAwMzcwQjkz
IC8qIFBhcnNlQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzI2NTA5MzUxODNBQTNCMjAwRDI4QjQ4IC8qIFBhcnNlQ29udGV4dC5oICovOyB9
OwotCQk3MjMwOUE1MjE4M0MyNUE3MDAzNzBCOTMgLyogTm9kZVNlYXJjaC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI2NTA5MzMxODNBQTI4OTAwRDI4
QjQ4IC8qIE5vZGVTZWFyY2guaCAqLzsgfTsKLQkJNzIzMDlBNTMxODNDMjVBQTAwMzcwQjkzIC8q
IEluaXRpYWxpemVHTFBvc2l0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyNjUwOTMxMTgzQUEyNDYwMEQyOEI0OCAvKiBJbml0aWFsaXplR0xQ
b3NpdGlvbi5jcHAgKi87IH07Ci0JCTcyMzA5QTU0MTgzQzI1QUQwMDM3MEI5MyAvKiBJbml0aWFs
aXplR0xQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzI2NTA5MzIxODNBQTI0NjAwRDI4QjQ4IC8qIEluaXRpYWxpemVHTFBvc2l0aW9uLmgg
Ki87IH07CiAJCTcyMzA5QTU2MTgzQzI3REUwMDM3MEI5MyAvKiBUb2tlbml6ZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzMDlBNTUxODNDMjdE
QjAwMzcwQjkzIC8qIFRva2VuaXplci5jcHAgKi87IH07CiAJCTcyMzA5QTU4MTgzQzI3RjMwMDM3
MEI5MyAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzA5QTU3MTgzQzI3RjEwMDM3MEI5MyAvKiBFeHByZXNzaW9u
UGFyc2VyLmNwcCAqLzsgfTsKLQkJNzIzMDlBNUMxODNDMjg1MzAwMzcwQjkzIC8qIGdsc2xhbmdf
bGV4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcy
MzA5QTU5MTgzQzI4NEUwMDM3MEI5MyAvKiBnbHNsYW5nX2xleC5jcHAgKi87IH07Ci0JCTcyMzA5
QTVEMTgzQzI4NTMwMDM3MEI5MyAvKiBnbHNsYW5nX3RhYi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjMwOUE1QTE4M0MyODRFMDAzNzBCOTMgLyog
Z2xzbGFuZ190YWIuY3BwICovOyB9OwotCQk3MjMwOUE1RTE4M0MyODUzMDAzNzBCOTMgLyogZ2xz
bGFuZ190YWIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcyMzA5QTVCMTgzQzI4NEUwMDM3MEI5MyAvKiBnbHNsYW5nX3RhYi5oICovOyB9OwotCQk3MjMw
OUE2MTE4M0MyQTc0MDAzNzBCOTMgLyogVHJhbnNsYXRvckhMU0wuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzMDlBNUYxODNDMkE2NDAwMzcwQjkz
IC8qIFRyYW5zbGF0b3JITFNMLmNwcCAqLzsgfTsKLQkJNzIzMDlBNjIxODNDMkE3NDAwMzcwQjkz
IC8qIFRyYW5zbGF0b3JITFNMLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MjMwOUE2MDE4M0MyQTY0MDAzNzBCOTMgLyogVHJhbnNsYXRvckhMU0wuaCAq
LzsgfTsKLQkJNzIzMDlBNjUxODNDMkFFNTAwMzcwQjkzIC8qIE91dHB1dEhMU0wuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzMDlBNjMxODNDMkFF
NTAwMzcwQjkzIC8qIE91dHB1dEhMU0wuY3BwICovOyB9OwotCQk3MjMwOUE2NjE4M0MyQUU1MDAz
NzBCOTMgLyogT3V0cHV0SExTTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzIzMDlBNjQxODNDMkFFNTAwMzcwQjkzIC8qIE91dHB1dEhMU0wuaCAqLzsg
fTsKLQkJNzIzMDlBNkQxODNDMkJFODAwMzcwQjkzIC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzMDlBNjcx
ODNDMkJFODAwMzcwQjkzIC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwICovOyB9OwotCQk3MjMw
OUE2RTE4M0MyQkU4MDAzNzBCOTMgLyogRGV0ZWN0RGlzY29udGludWl0eS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzMDlBNjgxODNDMkJFODAwMzcw
QjkzIC8qIERldGVjdERpc2NvbnRpbnVpdHkuaCAqLzsgfTsKLQkJNzIzMDlBNkYxODNDMkJFODAw
MzcwQjkzIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjMwOUE2OTE4M0MyQkU4MDAzNzBCOTMgLyogVW5mb2xk
U2hvcnRDaXJjdWl0LmNwcCAqLzsgfTsKLQkJNzIzMDlBNzAxODNDMkJFODAwMzcwQjkzIC8qIFVu
Zm9sZFNob3J0Q2lyY3VpdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzIzMDlBNkExODNDMkJFODAwMzcwQjkzIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5o
ICovOyB9OwotCQk3MjMwOUE3MTE4M0MyQkU4MDAzNzBCOTMgLyogVW5pZm9ybS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjMwOUE2QjE4M0MyQkU4
MDAzNzBCOTMgLyogVW5pZm9ybS5jcHAgKi87IH07Ci0JCTcyMzA5QTcyMTgzQzJCRTgwMDM3MEI5
MyAvKiBVbmlmb3JtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MjMwOUE2QzE4M0MyQkU4MDAzNzBCOTMgLyogVW5pZm9ybS5oICovOyB9OwotCQk5MEQ5
QjEwMjEyRTExRENCMDAyRDQyNTUgLyogQ29tcGlsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTBEOUIwRjkxMkUxMURDQjAwMkQ0MjU1IC8qIENv
bXBpbGVyLmNwcCAqLzsgfTsKLQkJOTBEOUIxMDMxMkUxMURDQjAwMkQ0MjU1IC8qIEV4dGVuc2lv
bkJlaGF2aW9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5MEQ5QjBGQTEyRTExRENCMDAyRDQyNTUgLyogRXh0ZW5zaW9uQmVoYXZpb3IuaCAqLzsgfTsK
LQkJOTBEOUIxMDcxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmcuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwRDlCMEZFMTJFMTFEQ0IwMDJENDI1NSAv
KiBnbHNsYW5nLmggKi87IH07Ci0JCTkwRDlCMTA5MTJFMTFEQ0IwMDJENDI1NSAvKiBTZWFyY2hT
eW1ib2wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTBEOUIxMDAxMkUxMURDQjAwMkQ0MjU1IC8qIFNlYXJjaFN5bWJvbC5jcHAgKi87IH07Ci0JCTkw
RDlCMTBBMTJFMTFEQ0IwMDJENDI1NSAvKiBTZWFyY2hTeW1ib2wuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwRDlCMTAxMTJFMTFEQ0IwMDJENDI1NSAv
KiBTZWFyY2hTeW1ib2wuaCAqLzsgfTsKLQkJOTBEOUIxMTMxMkUxMURENjAwMkQ0MjU1IC8qIHV0
aWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTBE
OUIxMEIxMkUxMURENjAwMkQ0MjU1IC8qIHV0aWwuY3BwICovOyB9OwotCQk5MEQ5QjExNDEyRTEx
REQ2MDAyRDQyNTUgLyogdXRpbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTBEOUIxMEMxMkUxMURENjAwMkQ0MjU1IC8qIHV0aWwuaCAqLzsgfTsKLQkJ
OTBEOUIxMTUxMkUxMURENjAwMkQ0MjU1IC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTBEOUIxMEQxMkUxMURE
NjAwMkQ0MjU1IC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwICovOyB9OwotCQk5MEQ5QjExNjEy
RTExREQ2MDAyRDQyNTUgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTBEOUIxMEUxMkUxMURENjAwMkQ0MjU1IC8q
IFZhbGlkYXRlTGltaXRhdGlvbnMuaCAqLzsgfTsKLQkJOTBEOUIxMTcxMkUxMURENjAwMkQ0MjU1
IC8qIFZhcmlhYmxlSW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5MEQ5QjEwRjEyRTExREQ2MDAyRDQyNTUgLyogVmFyaWFibGVJbmZvLmNwcCAq
LzsgfTsKLQkJOTBEOUIxMTgxMkUxMURENjAwMkQ0MjU1IC8qIFZhcmlhYmxlSW5mby5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTBEOUIxMTAxMkUxMURE
NjAwMkQ0MjU1IC8qIFZhcmlhYmxlSW5mby5oICovOyB9OwotCQk5MEQ5QjExOTEyRTExREQ2MDAy
RDQyNTUgLyogVmVyc2lvbkdMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTBEOUIxMTExMkUxMURENjAwMkQ0MjU1IC8qIFZlcnNpb25HTFNMLmNw
cCAqLzsgfTsKLQkJOTBEOUIxMUExMkUxMURENjAwMkQ0MjU1IC8qIFZlcnNpb25HTFNMLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MEQ5QjExMjEyRTEx
REQ2MDAyRDQyNTUgLyogVmVyc2lvbkdMU0wuaCAqLzsgfTsKIAkJQTA4QzNDREMxNkQ2Q0I2MTAw
M0YwQjgzIC8qIEFycmF5Qm91bmRzQ2xhbXBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMDhDM0NEQTE2RDZDQjYxMDAzRjBCODMgLyogQXJyYXlC
b3VuZHNDbGFtcGVyLmNwcCAqLzsgfTsKIAkJQTA4QzNDREQxNkQ2Q0I2MTAwM0YwQjgzIC8qIEFy
cmF5Qm91bmRzQ2xhbXBlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTA4QzNDREIxNkQ2Q0I2MTAwM0YwQjgzIC8qIEFycmF5Qm91bmRzQ2xhbXBlci5o
ICovOyB9OwotCQlBMEFBQkUyQzEzQUZFODEwMDBGMkVCRDEgLyogRm9yTG9vcFVucm9sbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkUyQTEz
QUZFODEwMDBGMkVCRDEgLyogRm9yTG9vcFVucm9sbC5jcHAgKi87IH07Ci0JCUEwQUFCRTJEMTNB
RkU4MTAwMEYyRUJEMSAvKiBGb3JMb29wVW5yb2xsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkUyQjEzQUZFODEwMDBGMkVCRDEgLyogRm9yTG9v
cFVucm9sbC5oICovOyB9OwotCQlBMEFBQkUzMDEzQUZFODMwMDBGMkVCRDEgLyogTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTBBQUJFMkUxM0FGRTgzMDAwRjJFQkQxIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNw
cCAqLzsgfTsKLQkJQTBBQUJFMzExM0FGRTgzMDAwRjJFQkQxIC8qIE1hcExvbmdWYXJpYWJsZU5h
bWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFB
QkUyRjEzQUZFODMwMDBGMkVCRDEgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCAqLzsgfTsKLQkJ
QTBBQUJFMzQxM0FGRTg0NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xCYXNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFCRTMyMTNBRkU4NDcwMEYy
RUJEMSAvKiBPdXRwdXRHTFNMQmFzZS5jcHAgKi87IH07Ci0JCUEwQUFCRTM1MTNBRkU4NDcwMEYy
RUJEMSAvKiBPdXRwdXRHTFNMQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTBBQUJFMzMxM0FGRTg0NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xCYXNl
LmggKi87IH07Ci0JCUEwQUFCRTQ0MTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFCRTQyMTNB
RkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmNwcCAqLzsgfTsKLQkJQTBBQUJFNDUxM0FGRTk0
NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEwQUFCRTQzMTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmgg
Ki87IH07Ci0JCUEwQUFCRTQ4MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkU0NjEz
QUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovOyB9OwotCQlBMEFBQkU0OTEz
QUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFu
c2xhdG9yRVNTTC5oICovOyB9OwogCQlBMjY0RjhBQzE2OTc0REVEMDA2RkFBNUEgLyogRGlhZ25v
c3RpY3NCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEEyNjRGODkzMTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9zdGljc0Jhc2UuY3BwICovOyB9
OwogCQlBMjY0RjhBRDE2OTc0REVEMDA2RkFBNUEgLyogRGlhZ25vc3RpY3NCYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0Rjg5NDE2OTc0REVE
MDA2RkFBNUEgLyogRGlhZ25vc3RpY3NCYXNlLmggKi87IH07CiAJCUEyNjRGOEFFMTY5NzRERUQw
MDZGQUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0Rjg5NTE2OTc0REVEMDA2RkFBNUEgLyogRGly
ZWN0aXZlSGFuZGxlckJhc2UuY3BwICovOyB9OwpAQCAtOTksNDQgKzE1OSw3IEBACiAJCUEyNjRG
OEMxMTY5NzRERUQwMDZGQUE1QSAvKiBUb2tlbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhBODE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW4u
Y3BwICovOyB9OwogCQlBMjY0RjhDMjE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGOEE5MTY5NzRERUQw
MDZGQUE1QSAvKiBUb2tlbi5oICovOyB9OwogCQlBMjY0RjhDNDE2OTc0REVEMDA2RkFBNUEgLyog
VG9rZW5pemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMjY0RjhBQjE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW5pemVyLmggKi87IH07Ci0JCUEyNjRG
OEM4MTY5NzRFMkEwMDZGQUE1QSAvKiBIYXNoTmFtZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGOEM1MTY5NzRFMkEwMDZGQUE1QSAvKiBIYXNo
TmFtZXMuaCAqLzsgfTsKLQkJQTI2NEY4QzkxNjk3NEUyQTAwNkZBQTVBIC8qIFZhcmlhYmxlUGFj
a2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
NjRGOEM2MTY5NzRFMkEwMDZGQUE1QSAvKiBWYXJpYWJsZVBhY2tlci5jcHAgKi87IH07Ci0JCUEy
NjRGOENBMTY5NzRFMkEwMDZGQUE1QSAvKiBWYXJpYWJsZVBhY2tlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4QzcxNjk3NEUyQTAwNkZBQTVB
IC8qIFZhcmlhYmxlUGFja2VyLmggKi87IH07CiAJCUEyNjRGOENEMTY5NzYyQUEwMDZGQUE1QSAv
KiBraHJwbGF0Zm9ybS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTI2NEY4Q0MxNjk3NjJBQTAwNkZBQTVBIC8qIGtocnBsYXRmb3JtLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwotCQlBMjY1NjdCQjE1OUMyMUIx
MDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjAxNTlDMjFCMTAwMzk4NTM5IC8qIERpYWdub3N0aWNz
LmNwcCAqLzsgfTsKLQkJQTI2NTY3QkMxNTlDMjFCMTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCMTE1
OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCAqLzsgfTsKLQkJQTI2NTY3QkQxNTlDMjFC
MTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjIxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVj
dGl2ZUhhbmRsZXIuY3BwICovOyB9OwotCQlBMjY1NjdCRTE1OUMyMUIxMDAzOTg1MzkgLyogRGly
ZWN0aXZlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTI2NTY3QjMxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLzsg
fTsKLQkJQTI2NTY3QkYxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3
QjQxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwICovOyB9Owot
CQlBMjY1NjdDMDE1OUMyMUIxMDAzOTg1MzkgLyogUHJhZ21hLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCNTE1OUMyMUIxMDAzOTg1MzkgLyog
UHJhZ21hLmggKi87IH07Ci0JCUEyNjU2N0MxMTU5QzIxQjEwMDM5ODUzOSAvKiBSZW5hbWVGdW5j
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2
NTY3QjYxNTlDMjFCMTAwMzk4NTM5IC8qIFJlbmFtZUZ1bmN0aW9uLmggKi87IH07Ci0JCUEyNjU2
ODM5MTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MkQxNTlDMjNFMTAwMzk4NTM5
IC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi87IH07Ci0JCUEyNjU2ODNBMTU5QzIzRTEwMDM5ODUz
OSAvKiBEZXBlbmRlbmN5R3JhcGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEyNjU2ODJFMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGgu
aCAqLzsgfTsKLQkJQTI2NTY4M0IxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTI2NTY4MkYxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICov
OyB9OwotCQlBMjY1NjgzQzE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4
MzAxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCAqLzsgfTsKLQkJ
QTI2NTY4M0QxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzMTE1OUMy
M0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCAqLzsgfTsKLQkJQTI2NTY4
M0UxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzIxNTlDMjNFMTAwMzk4
NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovOyB9OwotCQlBMjY1NjgzRjE1OUMyM0Ux
MDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzMxNTlDMjNFMTAwMzk4NTM5IC8q
IERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAqLzsgfTsKLQkJQTI2NTY4NDAxNTlDMjNFMTAw
Mzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzUxNTlDMjNFMTAwMzk4NTM5
IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovOyB9OwotCQlBMjY1Njg0MTE1
OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzYxNTlDMjNFMTAw
Mzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCAqLzsgfTsKLQkJQTI2NTY4
NDIxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODM3MTU5QzIz
RTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgKi87IH07Ci0JCUEy
NjU2ODQzMTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzgxNTlD
MjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggKi87IH07Ci0JCUZC
MzlEMjc1MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyNjEyMDBGMzVBMDAwODhFNjkgLyogZGVi
dWcuY3BwICovOyB9OwotCQlGQjM5RDI3OTEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1NpbmsuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMkEx
MjAwRjM1QTAwMDg4RTY5IC8qIEluZm9TaW5rLmNwcCAqLzsgfTsKLQkJRkIzOUQyN0IxMjAwRjM1
QTAwMDg4RTY5IC8qIEluaXRpYWxpemUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMkMxMjAwRjM1QTAwMDg4RTY5IC8qIEluaXRpYWxpemUu
Y3BwICovOyB9OwotCQlGQjM5RDI3RDEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIy
RTEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi87IH07Ci0JCUZCMzlEMjgx
MTIwMEYzNUEwMDA4OEU2OSAvKiBJbnRlcm1lZGlhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMzIxMjAwRjM1QTAwMDg4RTY5IC8qIElu
dGVybWVkaWF0ZS5jcHAgKi87IH07Ci0JCUZCMzlEMjgzMTIwMEYzNUEwMDA4OEU2OSAvKiBpbnRl
cm1PdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkIzOUQyMzQxMjAwRjM1QTAwMDg4RTY5IC8qIGludGVybU91dC5jcHAgKi87IH07Ci0JCUZCMzlE
Mjg0MTIwMEYzNUEwMDA4OEU2OSAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIzNTEyMDBGMzVBMDAwODhFNjkg
LyogSW50ZXJtVHJhdmVyc2UuY3BwICovOyB9OwotCQlGQjM5RDI4ODEyMDBGMzVBMDAwODhFNjkg
Lyogb3Nzb3VyY2VfcG9zaXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkIzOUQyMzkxMjAwRjM1QTAwMDg4RTY5IC8qIG9zc291cmNlX3Bvc2l4LmNw
cCAqLzsgfTsKLQkJRkIzOUQyOEExMjAwRjM1QTAwMDg4RTY5IC8qIE91dHB1dEdMU0wuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyM0IxMjAw
RjM1QTAwMDg4RTY5IC8qIE91dHB1dEdMU0wuY3BwICovOyB9OwotCQlGQjM5RDI4RTEyMDBGMzVB
MDAwODhFNjkgLyogcGFyc2VDb25zdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIzRjEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2VDb25zdC5j
cHAgKi87IH07Ci0JCUZCMzlEMjkxMTIwMEYzNUEwMDA4OEU2OSAvKiBQb29sQWxsb2MuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNDIxMjAw
RjM1QTAwMDg4RTY5IC8qIFBvb2xBbGxvYy5jcHAgKi87IH07Ci0JCUZCMzlEMkE0MTIwMEYzNUEw
MDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI1NjEyMDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVy
QWxpdmUuY3BwICovOyB9OwotCQlGQjM5RDJBNjEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJl
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5
RDI1ODEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgKi87IH07Ci0JCUZCMzlEMkE4
MTIwMEYzNUEwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjVBMTIwMEYzNUEwMDA4OEU2OSAvKiBTaGFk
ZXJMYW5nLmNwcCAqLzsgfTsKLQkJRkIzOUQyQUExMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRh
YmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZC
MzlEMjVDMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgKi87IH07Ci0JCUZCMzlE
MkFDMTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI2ODEyMDBGMzVBMDAwODhFNjkg
LyogVHJhbnNsYXRvckdMU0wuY3BwICovOyB9OwogCQlGQjM5RDc2RTEyMDExMEZDMDAwODhFNjkg
LyogU2hhZGVyTGFuZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkIzOUQyQkYxMjAwRjNFNjAwMDg4RTY5IC8qIFNoYWRlckxhbmcuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CiAvKiBFbmQgUEJYQnVpbGRGaWxl
IHNlY3Rpb24gKi8KIApAQCAtMTc0LDY1ICsxOTcsMTI1IEBACiAvKiBFbmQgUEJYQ29weUZpbGVz
QnVpbGRQaGFzZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlv
biAqLworCQkzMTAxMkRBMDE4Qjk3QjlCMDAzOTA2MkYgLyogQmFzZVR5cGVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkzMTAxMkRBMTE4Qjk3QjlCMDAzOTA2MkYgLyogQnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRB
MjE4Qjk3QjlCMDAzOTA2MkYgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQTMxOEI5N0I5QjAwMzkwNjJGIC8qIENvZGVH
ZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZUdlbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREE0MThCOTdCOUIwMDM5MDYyRiAv
KiBDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tbW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREE1MThCOTdCOUIwMDM5MDYyRiAvKiBD
b21waWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb21waWxl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREE4MThCOTdCOUIwMDM5
MDYyRiAvKiBDb25zdGFudFVuaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENvbnN0YW50VW5pb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQUEx
OEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkzMTAxMkRBQjE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBo
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRBQzE4Qjk3QjlCMDAzOTA2MkYgLyog
RGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMzEwMTJEQUQxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVp
bGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRBRTE4Qjk3QjlCMDAz
OTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTMxMDEyREFGMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3Jh
cGhPdXRwdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdy
YXBoT3V0cHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREIwMThCOTdC
OUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREIxMThCOTdCOUIwMDM5MDYyRiAvKiBEZXRl
Y3RDYWxsRGVwdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGV0
ZWN0Q2FsbERlcHRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQjIx
OEI5N0I5QjAwMzkwNjJGIC8qIERldGVjdENhbGxEZXB0aC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEZXRlY3RDYWxsRGVwdGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMzEwMTJEQjMxOEI5N0I5QjAwMzkwNjJGIC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGV0ZWN0RGlzY29udGludWl0
eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREI0MThCOTdCOUIwMDM5
MDYyRiAvKiBEZXRlY3REaXNjb250aW51aXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERldGVjdERpc2NvbnRpbnVpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMzEwMTJEQjUxOEI5N0I5QjAwMzkwNjJGIC8qIERpYWdub3N0aWNzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpYWdub3N0aWNzLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQjYxOEI5N0I5QjAwMzkwNjJGIC8qIERpYWdub3N0aWNz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpYWdub3N0aWNzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREI3MThCOTdCOUIwMDM5MDYyRiAvKiBEaXJl
Y3RpdmVIYW5kbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERp
cmVjdGl2ZUhhbmRsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRC
ODE4Qjk3QjlCMDAzOTA2MkYgLyogRGlyZWN0aXZlSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEaXJlY3RpdmVIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTMxMDEyREI5MThCOTdCOUIwMDM5MDYyRiAvKiBFeHRlbnNpb25CZWhhdmlvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbnNpb25CZWhhdmlvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRCQTE4Qjk3QjlCMDAzOTA2MkYgLyog
Rm9yTG9vcFVucm9sbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBG
b3JMb29wVW5yb2xsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQkIx
OEI5N0I5QjAwMzkwNjJGIC8qIEZvckxvb3BVbnJvbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRm9yTG9vcFVucm9sbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkzMTAxMkRCRDE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBnbHNsYW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTMxMDEyREMwMThCOTdCOUIwMDM5MDYyRiAvKiBnbHNsYW5nX2xleC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBnbHNsYW5nX2xleC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTMxMDEyREMxMThCOTdCOUIwMDM5MDYyRiAvKiBnbHNsYW5nX3RhYi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBnbHNsYW5nX3RhYi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREMyMThCOTdCOUIwMDM5MDYyRiAv
KiBnbHNsYW5nX3RhYi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBnbHNsYW5n
X3RhYi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRDMzE4Qjk3QjlCMDAz
OTA2MkYgLyogSGFzaE5hbWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhh
c2hOYW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRDNDE4Qjk3QjlC
MDAzOTA2MkYgLyogSW5mb1NpbmsuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSW5mb1NpbmsuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRD
NTE4Qjk3QjlCMDAzOTA2MkYgLyogSW5mb1NpbmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW5mb1NpbmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJE
QzYxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTMxMDEyREM3MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRpYWxpemUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMzEwMTJEQzgxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVEbGwuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZURsbC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREM5MThCOTdCOUIwMDM5MDYyRiAv
KiBJbml0aWFsaXplRGxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRp
YWxpemVEbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEQ0ExOEI5N0I5
QjAwMzkwNjJGIC8qIEluaXRpYWxpemVHbG9iYWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEluaXRpYWxpemVHbG9iYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTMxMDEyRENCMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemVQYXJzZUNv
bnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRDQzE4Qjk3QjlC
MDAzOTA2MkYgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbml0aWFsaXplUGFyc2VDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTMxMDEyRENEMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplVmFyaWFi
bGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemVW
YXJpYWJsZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRDRTE4Qjk3
QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZVZhcmlhYmxlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbml0aWFsaXplVmFyaWFibGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTMxMDEyRENGMThCOTdCOUIwMDM5MDYyRiAvKiBJbnRlcm1lZGlhdGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZXJtZWRpYXRlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERDAxOEI5N0I5QjAwMzkwNjJGIC8qIGlu
dGVybWVkaWF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBpbnRlcm1lZGlh
dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERDExOEI5N0I5QjAwMzkw
NjJGIC8qIGludGVybU91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBpbnRlcm1PdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkREMjE4
Qjk3QjlCMDAzOTA2MkYgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW50ZXJtVHJhdmVyc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkzMTAxMkREMzE4Qjk3QjlCMDAzOTA2MkYgLyogbG9jYWxpbnRlcm1lZGlhdGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbG9jYWxpbnRlcm1lZGlhdGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERDQxOEI5N0I5QjAwMzkwNjJGIC8q
IE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMzEwMTJERDUxOEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcExvbmdWYXJpYWJsZU5hbWVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREQ2MThCOTdCOUIwMDM5MDYyRiAv
KiBNTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1NYXAuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERDcxOEI5N0I5QjAwMzkwNjJGIC8qIE5vZGVT
ZWFyY2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9kZVNlYXJjaC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkREODE4Qjk3QjlCMDAzOTA2MkYgLyog
b3NpbmNsdWRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG9zaW5jbHVkZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkREOTE4Qjk3QjlCMDAzOTA2MkYg
Lyogb3Nzb3VyY2VfcG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gb3Nzb3VyY2VfcG9zaXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAx
MkREQjE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0RVNTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBPdXRwdXRFU1NMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMzEwMTJEREMxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEVTU0wuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3V0cHV0RVNTTC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkzMTAxMkRERDE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0R0xTTC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPdXRwdXRHTFNMLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJEREUxOEI5N0I5QjAwMzkwNjJGIC8qIE91
dHB1dEdMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3V0cHV0R0xTTC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRERjE4Qjk3QjlCMDAzOTA2MkYg
LyogT3V0cHV0R0xTTEJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gT3V0cHV0R0xTTEJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAx
MkRFMDE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0R0xTTEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gT3V0cHV0R0xTTEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMzEwMTJERTExOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEhMU0wuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3V0cHV0SExTTC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREUyMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRI
TFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE91dHB1dEhMU0wuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERTMxOEI5N0I5QjAwMzkwNjJGIC8qIHBh
cnNlQ29uc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gcGFyc2VD
b25zdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREU0MThCOTdCOUIw
MDM5MDYyRiAvKiBQYXJzZUNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUGFyc2VDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MzEwMTJERTUxOEI5N0I5QjAwMzkwNjJGIC8qIFBhcnNlQ29udGV4dC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQYXJzZUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMzEwMTJERTYxOEI5N0I5QjAwMzkwNjJGIC8qIFBvb2xBbGxvYy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb29sQWxsb2MuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRFNzE4Qjk3QjlCMDAzOTA2MkYgLyogUG9vbEFsbG9j
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvb2xBbGxvYy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRFODE4Qjk3QjlCMDAzOTA2MkYgLyogUHJhZ21h
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByYWdtYS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRFOTE4Qjk3QjlCMDAzOTA2MkYgLyogUXVhbGlmaWVy
QWxpdmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUXVhbGlmaWVy
QWxpdmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRFQTE4Qjk3QjlC
MDAzOTA2MkYgLyogUXVhbGlmaWVyQWxpdmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUXVhbGlmaWVyQWxpdmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEw
MTJERUIxOEI5N0I5QjAwMzkwNjJGIC8qIFJlbW92ZVRyZWUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3ZlVHJlZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTMxMDEyREVDMThCOTdCOUIwMDM5MDYyRiAvKiBSZW1vdmVUcmVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW92ZVRyZWUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMzEwMTJERUQxOEI5N0I5QjAwMzkwNjJGIC8qIFJlbmFtZUZ1bmN0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmFtZUZ1bmN0aW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREVFMThCOTdCOUIwMDM5MDYyRiAvKiBS
ZXdyaXRlRWxzZUJsb2Nrcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZXdyaXRlRWxzZUJsb2Nrcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMx
MDEyREVGMThCOTdCOUIwMDM5MDYyRiAvKiBSZXdyaXRlRWxzZUJsb2Nrcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZXdyaXRlRWxzZUJsb2Nrcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkzMTAxMkRGMDE4Qjk3QjlCMDAzOTA2MkYgLyogU2VhcmNoU3ltYm9s
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlYXJjaFN5bWJvbC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREYxMThCOTdCOUIwMDM5MDYy
RiAvKiBTZWFyY2hTeW1ib2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Vh
cmNoU3ltYm9sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREYyMThCOTdC
OUIwMDM5MDYyRiAvKiBTaGFkZXJMYW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNoYWRlckxhbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkz
MTAxMkRGMzE4Qjk3QjlCMDAzOTA2MkYgLyogU2hIYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2hIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MzEwMTJERjQxOEI5N0I5QjAwMzkwNjJGIC8qIFN5bWJvbFRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bWJvbFRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMzEwMTJERjUxOEI5N0I5QjAwMzkwNjJGIC8qIFN5bWJvbFRhYmxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5bWJvbFRhYmxlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREY3MThCOTdCOUIwMDM5MDYyRiAvKiBSZXN0cmlj
dEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkzMTAxMkRGODE4Qjk3QjlCMDAzOTA2MkYgLyogUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXN0cmlj
dEZyYWdtZW50U2hhZGVyVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMx
MDEyREY5MThCOTdCOUIwMDM5MDYyRiAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXN0cmljdFZlcnRleFNoYWRl
clRpbWluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREZBMThCOTdC
OUIwMDM5MDYyRiAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRGQjE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNs
YXRvckVTU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNs
YXRvckVTU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkRGQzE4Qjk3
QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckVTU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVHJhbnNsYXRvckVTU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MzEwMTJERkQxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5zbGF0b3JHTFNMLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJERkUxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0
b3JHTFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JHTFNM
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyREZGMThCOTdCOUIwMDM5MDYy
RiAvKiBUcmFuc2xhdG9ySExTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBUcmFuc2xhdG9ySExTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMx
MDEyRTAwMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9ySExTTC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xhdG9ySExTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkzMTAxMkUwMTE4Qjk3QjlCMDAzOTA2MkYgLyogVHlwZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMzEwMTJFMDIxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTaG9ydENpcmN1aXQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkUwMzE4Qjk3QjlCMDAzOTA2
MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFVuZm9sZFNob3J0Q2lyY3VpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkz
MTAxMkUwNDE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxMDEyRTA1MThCOTdCOUIwMDM5MDYy
RiAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0QVNULmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTMxMDEyRTA2MThCOTdCOUIwMDM5MDYyRiAvKiBVbmlmb3JtLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuaWZvcm0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkzMTAxMkUwNzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmlmb3JtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTMxMDEyRTA4MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHV0aWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkzMTAxMkUwOTE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSB1dGlsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTMxMDEyRTBBMThCOTdCOUIwMDM5MDYyRiAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZhbGlkYXRlTGltaXRhdGlvbnMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkUwQjE4Qjk3QjlCMDAzOTA2
MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBWYWxpZGF0ZUxpbWl0YXRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTMxMDEyRTBDMThCOTdCOUIwMDM5MDYyRiAvKiBWYXJpYWJsZUluZm8uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFyaWFibGVJbmZvLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJFMEQxOEI5N0I5QjAwMzkwNjJGIC8qIFZhcmlhYmxlSW5m
by5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYXJpYWJsZUluZm8uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJFMEUxOEI5N0I5QjAwMzkwNjJGIC8qIFZh
cmlhYmxlUGFja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZh
cmlhYmxlUGFja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJFMEYx
OEI5N0I5QjAwMzkwNjJGIC8qIFZhcmlhYmxlUGFja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFZhcmlhYmxlUGFja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTMxMDEyRTEwMThCOTdCOUIwMDM5MDYyRiAvKiBWZXJzaW9uR0xTTC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWZXJzaW9uR0xTTC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTMxMDEyRTExMThCOTdCOUIwMDM5MDYyRiAvKiBWZXJzaW9uR0xT
TC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWZXJzaW9uR0xTTC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTAxMkU4MTE4Qjk3Qzg2MDAzOTA2MkYgLyogY29t
cGlsZXJkZWJ1Zy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBjb21w
aWxlcmRlYnVnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEwMTJFODIxOEI5
N0M4NjAwMzkwNjJGIC8qIGNvbXBpbGVyZGVidWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gY29tcGlsZXJkZWJ1Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkz
MTJCREIwOTE1RkVDOTFFMDA5N0VCQzcgLyogQU5HTEUucGxpc3QgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnBs
aXN0LnhtbDsgcGF0aCA9IEFOR0xFLnBsaXN0OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzMTJCREIwQTE1RkVDQTNBMDA5N0VCQzcgLyogQU5HTEUudHh0ICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IEFOR0xFLnR4dDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQzQTNFMTUx
MkVDRjZDQzAwMDRGOUQ3IC8qIGlPUy54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7
IHBhdGggPSBpT1MueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5OTUx
QzAyMTRCN0FBQjMwMDYwRTk2RSAvKiBsZW5ndGhfbGltaXRzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IGxlbmd0aF9saW1pdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNDk5NTFDMDUxNEI3QUFENzAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJ1aWx0SW5GdW5jdGlv
bkVtdWxhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDk5NTFDMDYxNEI3
QUFEODAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTVDQjEzRkQyMTc5REIzRkQwMDFGODUxRCAvKiBEZXRlY3RDYWxs
RGVwdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGV0ZWN0Q2Fs
bERlcHRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUNCMTNGRDMxNzlEQjNG
RDAwMUY4NTFEIC8qIERldGVjdENhbGxEZXB0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEZXRlY3RDYWxsRGVwdGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NUQ3QzU5QzUxMjA4QzY4QjAwMUM4NzNFIC8qIEFOR0xFLnhjY29uZmlnICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC54Y2NvbmZpZzsgcGF0aCA9IEFOR0xFLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1RDdDNTlDNjEyMDhDNjhCMDAxQzg3M0UgLyogQmFzZS54Y2NvbmZpZyAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBCYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1RDdDNTlDNzEyMDhDNjhCMDAxQzg3M0UgLyogRGVidWdSZWxlYXNlLnhj
Y29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IERlYnVnUmVsZWFzZS54Y2Nv
bmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIzMDlBNTUxODNDMjdEQjAwMzcw
QjkzIC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUb2tlbml6ZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjMwOUE1NzE4M0MyN0YxMDAzNzBCOTMgLyog
RXhwcmVzc2lvblBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHByZXNzaW9uUGFyc2Vy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzIzMDlBNTkxODNDMjg0RTAwMzcw
QjkzIC8qIGdsc2xhbmdfbGV4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGdsc2xhbmdfbGV4LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzIzMDlBNUExODNDMjg0RTAwMzcwQjkz
IC8qIGdsc2xhbmdfdGFiLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGdsc2xhbmdfdGFiLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzIzMDlBNUIxODNDMjg0RTAwMzcwQjkzIC8q
IGdsc2xhbmdfdGFiLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGdsc2xhbmdfdGFiLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTcyMzA5QTVGMTgzQzJBNjQwMDM3MEI5MyAvKiBUcmFuc2xhdG9y
SExTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdG9ySExTTC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcyMzA5QTYwMTgzQzJBNjQwMDM3MEI5MyAvKiBUcmFuc2xh
dG9ySExTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xhdG9ySExTTC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk3MjMwOUE2MzE4M0MyQUU1MDAzNzBCOTMgLyogT3V0cHV0SExTTC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPdXRwdXRITFNMLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzIzMDlBNjQxODNDMkFFNTAwMzcwQjkzIC8q
IE91dHB1dEhMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3V0cHV0SExT
TC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3MjMwOUE2NzE4M0MyQkU4MDAzNzBC
OTMgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBEZXRlY3REaXNjb250aW51aXR5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNzIzMDlBNjgxODNDMkJFODAwMzcwQjkzIC8qIERldGVjdERpc2NvbnRpbnVpdHku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGV0ZWN0RGlzY29udGludWl0eS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3MjMwOUE2OTE4M0MyQkU4MDAzNzBCOTMg
LyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTcyMzA5QTZBMTgzQzJCRTgwMDM3MEI5MyAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcyMzA5QTZCMTgzQzJCRTgwMDM3MEI5MyAvKiBVbmlm
b3JtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuaWZvcm0uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3MjMwOUE2QzE4M0MyQkU4MDAzNzBCOTMg
LyogVW5pZm9ybS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmlmb3JtLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcyNjUwOTMwMTgzQUEyMTMwMEQyOEI0OCAv
KiBDb2RlR2VuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVHZW4uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk3MjY1MDkzMTE4M0FBMjQ2MDBEMjhCNDggLyogSW5pdGlhbGl6
ZUdMUG9zaXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZUdMUG9zaXRpb24u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3MjY1MDkzMjE4M0FBMjQ2MDBEMjhC
NDggLyogSW5pdGlhbGl6ZUdMUG9zaXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZUdM
UG9zaXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzI2NTA5MzMxODNBQTI4
OTAwRDI4QjQ4IC8qIE5vZGVTZWFyY2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9kZVNlYXJjaC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3MjY1MDkzNDE4M0FBM0IyMDBEMjhCNDggLyog
UGFyc2VDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhcnNlQ29udGV4dC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcyNjUwOTM1MTgzQUEzQjIwMEQyOEI0OCAvKiBQ
YXJzZUNvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2VDb250ZXh0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTcyNjUwOTM2MTgzQUEzQzYwMEQyOEI0OCAvKiBVbmZvbGRTaG9y
dENpcmN1aXRBU1QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0QVNU
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzI2NTA5MzcxODNBQTNDNjAwRDI4
QjQ4IC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmZvbGRTaG9y
dENpcmN1aXRBU1QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTBEOUIwRjkxMkUx
MURDQjAwMkQ0MjU1IC8qIENvbXBpbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENvbXBpbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdXNlc1RhYnMg
PSAwOyB9OwotCQk5MEQ5QjBGQTEyRTExRENCMDAyRDQyNTUgLyogRXh0ZW5zaW9uQmVoYXZpb3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uQmVoYXZpb3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTBEOUIwRkUxMkUxMURDQjAwMkQ0MjU1IC8q
IGdsc2xhbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZ2xzbGFuZy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5MEQ5QjEwMDEyRTExRENCMDAyRDQyNTUgLyog
U2VhcmNoU3ltYm9sLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNl
YXJjaFN5bWJvbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkwRDlCMTAxMTJF
MTFEQ0IwMDJENDI1NSAvKiBTZWFyY2hTeW1ib2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2VhcmNoU3ltYm9sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkw
RDlCMTBCMTJFMTFERDYwMDJENDI1NSAvKiB1dGlsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IHV0aWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5
MEQ5QjEwQzEyRTExREQ2MDAyRDQyNTUgLyogdXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSB1dGlsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkwRDlCMTBE
MTJFMTFERDYwMDJENDI1NSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk5MEQ5QjEwRTEyRTExREQ2MDAyRDQyNTUgLyogVmFsaWRh
dGVMaW1pdGF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYWxpZGF0
ZUxpbWl0YXRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkwRDlCMTBGMTJF
MTFERDYwMDJENDI1NSAvKiBWYXJpYWJsZUluZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVmFyaWFibGVJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJOTBEOUIxMTAxMkUxMURENjAwMkQ0MjU1IC8qIFZhcmlhYmxlSW5mby5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYXJpYWJsZUluZm8uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJOTBEOUIxMTExMkUxMURENjAwMkQ0MjU1IC8qIFZlcnNpb25HTFNMLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZlcnNpb25HTFNMLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTBEOUIxMTIxMkUxMURENjAwMkQ0MjU1IC8q
IFZlcnNpb25HTFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZlcnNpb25H
TFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEwOEMzQ0RBMTZENkNCNjEwMDNG
MEI4MyAvKiBBcnJheUJvdW5kc0NsYW1wZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQXJyYXlCb3VuZHNDbGFtcGVyLmNwcDsgcGF0aCA9IHNyYy90aGlyZF9wYXJ0
eS9jb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBMDhDM0NEQjE2RDZDQjYxMDAzRjBCODMgLyogQXJyYXlCb3VuZHNDbGFtcGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFycmF5Qm91bmRzQ2xhbXBlci5oOyBw
YXRoID0gc3JjL3RoaXJkX3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMEFBQkUyQTEzQUZFODEwMDBGMkVCRDEgLyogRm9y
TG9vcFVucm9sbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb3JM
b29wVW5yb2xsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTBBQUJFMkIxM0FG
RTgxMDAwRjJFQkQxIC8qIEZvckxvb3BVbnJvbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRm9yTG9vcFVucm9sbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlB
MEFBQkUyRTEzQUZFODMwMDBGMkVCRDEgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMEFBQkUyRjEzQUZFODMwMDBGMkVCRDEg
LyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QTBBQUJFMzIxM0FGRTg0NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE91dHB1dEdMU0xCYXNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTBBQUJFMzMxM0FGRTg0NzAwRjJFQkQxIC8qIE91dHB1dEdM
U0xCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE91dHB1dEdMU0xCYXNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEwQUFCRTQyMTNBRkU5NDUwMEYyRUJE
MSAvKiBPdXRwdXRFU1NMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE91dHB1dEVTU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMEFBQkU0MzEz
QUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBPdXRwdXRFU1NMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEwQUFC
RTQ2MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdG9yRVNTTC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNT
TC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xhdG9yRVNTTC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMjY0Rjg5MzE2OTc0REVEMDA2RkFBNUEgLyog
RGlhZ25vc3RpY3NCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERpYWdub3N0aWNzQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEyNjRG
ODk0MTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9zdGljc0Jhc2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRGlhZ25vc3RpY3NCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUEyNjRGODk1MTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFz
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVIYW5k
bGVyQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTYsNjcgKzMzOSw4
IEBACiAJCUEyNjRGOEE4MTY5NzRERUQwMDZGQUE1QSAvKiBUb2tlbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUb2tlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUEyNjRGOEE5MTY5NzRERUQwMDZGQUE1QSAvKiBUb2tlbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBUb2tlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBMjY0RjhBQjE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW5pemVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlBMjY0RjhDNTE2OTc0RTJBMDA2RkFBNUEgLyogSGFzaE5hbWVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hOYW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlBMjY0RjhDNjE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFyaWFibGVQYWNrZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY0RjhDNzE2OTc0RTJBMDA2RkFBNUEg
LyogVmFyaWFibGVQYWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFy
aWFibGVQYWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTI2NEY4Q0MxNjk3
NjJBQTAwNkZBQTVBIC8qIGtocnBsYXRmb3JtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IGtocnBsYXRmb3JtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2
N0IwMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEaWFnbm9zdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUEyNjU2N0IxMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlBMjY1NjdCMjE1OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFu
ZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVI
YW5kbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY3QjMxNTlDMjFC
MTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlBMjY1NjdCNDE1OUMyMUIxMDAzOTg1MzkgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbml0aWFsaXplUGFyc2VDb250
ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY3QjUxNTlDMjFCMTAw
Mzk4NTM5IC8qIFByYWdtYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmFn
bWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY3QjYxNTlDMjFCMTAwMzk4
NTM5IC8qIFJlbmFtZUZ1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlbmFtZUZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2ODJE
MTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQTI2NTY4MkUxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFw
aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGguaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY4MkYxNTlDMjNFMTAwMzk4NTM5IC8q
IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUEyNjU2ODMwMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWls
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY4MzExNTlDMjNFMTAw
Mzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlBMjY1NjgzMjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdy
YXBoT3V0cHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lH
cmFwaE91dHB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjgzMzE1OUMy
M0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjgzNTE1OUMyM0UxMDAzOTg1MzkgLyogUmVz
dHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY4MzYxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJh
Z21lbnRTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVz
dHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlBMjY1NjgzNzE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhT
aGFkZXJUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjgzODE1
OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQwRDExMjAwRjBFMzAwMDg4RTY5IC8qIGxp
YkFOR0xFLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9
IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYkFOR0xFLmE7IHNvdXJj
ZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07Ci0JCUZCMzlEMjIxMTIwMEYzNUEwMDA4OEU2
OSAvKiBCYXNlVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IEJhc2VU
eXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDIyNDEyMDBGMzVBMDAw
ODhFNjkgLyogQ29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRG
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBDb21t
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyMjUxMjAwRjM1QTAwMDg4
RTY5IC8qIENvbnN0YW50VW5pb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9
IENvbnN0YW50VW5pb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyMjYx
MjAwRjM1QTAwMDg4RTY5IC8qIGRlYnVnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IGRlYnVnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQy
MjcxMjAwRjM1QTAwMDg4RTY5IC8qIGRlYnVnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IGRlYnVnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjJBMTIw
MEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJbmZvU2luay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZC
MzlEMjJCMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2Rp
bmcgPSA0OyBwYXRoID0gSW5mb1NpbmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
RkIzOUQyMkMxMjAwRjM1QTAwMDg4RTY5IC8qIEluaXRpYWxpemUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUZCMzlEMjJEMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBJbml0aWFsaXplLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjJFMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXpl
RGxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemVE
bGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDIyRjEyMDBGMzVBMDAw
ODhFNjkgLyogSW5pdGlhbGl6ZURsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4
cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRo
ID0gSW5pdGlhbGl6ZURsbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDIz
MDEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVu
Y29kaW5nID0gNDsgcGF0aCA9IEluaXRpYWxpemVHbG9iYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUZCMzlEMjMxMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplUGFyc2VD
b250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBJbml0aWFsaXplUGFy
c2VDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjMyMTIwMEYz
NUEwMDA4OEU2OSAvKiBJbnRlcm1lZGlhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW50ZXJtZWRpYXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJRkIzOUQyMzMxMjAwRjM1QTAwMDg4RTY5IC8qIGludGVybWVkaWF0ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBm
aWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gaW50ZXJtZWRpYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUZCMzlEMjM0MTIwMEYzNUEwMDA4OEU2OSAvKiBpbnRlcm1PdXQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gaW50ZXJtT3V0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyMzUxMjAwRjM1QTAwMDg4RTY5IC8qIEludGVy
bVRyYXZlcnNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVy
bVRyYXZlcnNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyMzYxMjAw
RjM1QTAwMDg4RTY5IC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGlu
ZyA9IDQ7IHBhdGggPSBsb2NhbGludGVybWVkaWF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDIzNzEyMDBGMzVBMDAwODhFNjkgLyogTU1hcC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxl
RW5jb2RpbmcgPSA0OyBwYXRoID0gTU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlGQjM5RDIzODEyMDBGMzVBMDAwODhFNjkgLyogb3NpbmNsdWRlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IG9zaW5jbHVkZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDIzOTEyMDBGMzVBMDAwODhFNjkgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gb3Nzb3VyY2VfcG9zaXguY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDIzQTEyMDBGMzVBMDAwODhFNjkgLyogb3Nz
b3VyY2Vfd2luLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IG9zc291
cmNlX3dpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjNCMTIwMEYz
NUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE91dHB1dEdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
QjM5RDIzQzEyMDBGMzVBMDAwODhFNjkgLyogT3V0cHV0R0xTTC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5j
b2RpbmcgPSA0OyBwYXRoID0gT3V0cHV0R0xTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDIzRjEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2VDb25zdC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBwYXJzZUNvbnN0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyNDIxMjAwRjM1QTAwMDg4RTY5IC8qIFBvb2xBbGxvYy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb29sQWxsb2MuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI0MzEyMDBGMzVBMDAwODhFNjkgLyog
UG9vbEFsbG9jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBQb29sQWxsb2Mu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyNTYxMjAwRjM1QTAwMDg4RTY5
IC8qIFF1YWxpZmllckFsaXZlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFF1YWxpZmllckFsaXZlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIz
OUQyNTcxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVF
bmNvZGluZyA9IDQ7IHBhdGggPSBRdWFsaWZpZXJBbGl2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlGQjM5RDI1ODEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdmVUcmVlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyNTkxMjAwRjM1QTAwMDg4RTY5IC8qIFJlbW92
ZVRyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFJlbW92ZVRyZWUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyNUExMjAwRjM1QTAwMDg4RTY5IC8q
IFNoYWRlckxhbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hh
ZGVyTGFuZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjVCMTIwMEYz
NUEwMDA4OEU2OSAvKiBTaEhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4
cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRo
ID0gU2hIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyNUMxMjAw
RjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFN5bWJvbFRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJRkIzOUQyNUQxMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZp
bGVFbmNvZGluZyA9IDQ7IHBhdGggPSBTeW1ib2xUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlGQjM5RDI2ODEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckdMU0wuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI2OTEyMDBGMzVBMDAwODhFNjkg
LyogVHJhbnNsYXRvckdMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNp
dEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFRy
YW5zbGF0b3JHTFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjZDMTIw
MEYzNUEwMDA4OEU2OSAvKiBUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4
cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRo
ID0gVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyQkYxMjAwRjNF
NjAwMDg4RTY5IC8qIFNoYWRlckxhbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBl
eHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0
aCA9IFNoYWRlckxhbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIC8qIEVuZCBQQlhG
aWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIApAQCAtMzMxLDYgKzM1NSwxMzcgQEAKIC8qIEVuZCBQ
QlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEdyb3VwIHNl
Y3Rpb24gKi8KKwkJMzEwMTJEOUYxOEI5N0I5QjAwMzkwNjJGIC8qIHRyYW5zbGF0b3IgKi8gPSB7
CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTMxMDEyREE5MThCOTdC
OUIwMDM5MDYyRiAvKiBkZXBncmFwaCAqLywKKwkJCQkzMTAxMkRGNjE4Qjk3QjlCMDAzOTA2MkYg
LyogdGltaW5nICovLAorCQkJCTMxMDEyREEwMThCOTdCOUIwMDM5MDYyRiAvKiBCYXNlVHlwZXMu
aCAqLywKKwkJCQkzMTAxMkRBMTE4Qjk3QjlCMDAzOTA2MkYgLyogQnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3IuY3BwICovLAorCQkJCTMxMDEyREEyMThCOTdCOUIwMDM5MDYyRiAvKiBCdWlsdEluRnVu
Y3Rpb25FbXVsYXRvci5oICovLAorCQkJCTMxMDEyREEzMThCOTdCOUIwMDM5MDYyRiAvKiBDb2Rl
R2VuLmNwcCAqLywKKwkJCQkzMTAxMkRBNDE4Qjk3QjlCMDAzOTA2MkYgLyogQ29tbW9uLmggKi8s
CisJCQkJMzEwMTJFODExOEI5N0M4NjAwMzkwNjJGIC8qIGNvbXBpbGVyZGVidWcuY3BwICovLAor
CQkJCTMxMDEyRTgyMThCOTdDODYwMDM5MDYyRiAvKiBjb21waWxlcmRlYnVnLmggKi8sCisJCQkJ
MzEwMTJEQTUxOEI5N0I5QjAwMzkwNjJGIC8qIENvbXBpbGVyLmNwcCAqLywKKwkJCQkzMTAxMkRB
ODE4Qjk3QjlCMDAzOTA2MkYgLyogQ29uc3RhbnRVbmlvbi5oICovLAorCQkJCTMxMDEyREIxMThC
OTdCOUIwMDM5MDYyRiAvKiBEZXRlY3RDYWxsRGVwdGguY3BwICovLAorCQkJCTMxMDEyREIyMThC
OTdCOUIwMDM5MDYyRiAvKiBEZXRlY3RDYWxsRGVwdGguaCAqLywKKwkJCQkzMTAxMkRCMzE4Qjk3
QjlCMDAzOTA2MkYgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgKi8sCisJCQkJMzEwMTJEQjQx
OEI5N0I5QjAwMzkwNjJGIC8qIERldGVjdERpc2NvbnRpbnVpdHkuaCAqLywKKwkJCQkzMTAxMkRC
NTE4Qjk3QjlCMDAzOTA2MkYgLyogRGlhZ25vc3RpY3MuY3BwICovLAorCQkJCTMxMDEyREI2MThC
OTdCOUIwMDM5MDYyRiAvKiBEaWFnbm9zdGljcy5oICovLAorCQkJCTMxMDEyREI3MThCOTdCOUIw
MDM5MDYyRiAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCAqLywKKwkJCQkzMTAxMkRCODE4Qjk3QjlC
MDAzOTA2MkYgLyogRGlyZWN0aXZlSGFuZGxlci5oICovLAorCQkJCTMxMDEyREI5MThCOTdCOUIw
MDM5MDYyRiAvKiBFeHRlbnNpb25CZWhhdmlvci5oICovLAorCQkJCTMxMDEyREJBMThCOTdCOUIw
MDM5MDYyRiAvKiBGb3JMb29wVW5yb2xsLmNwcCAqLywKKwkJCQkzMTAxMkRCQjE4Qjk3QjlCMDAz
OTA2MkYgLyogRm9yTG9vcFVucm9sbC5oICovLAorCQkJCTMxMDEyREJEMThCOTdCOUIwMDM5MDYy
RiAvKiBnbHNsYW5nLmggKi8sCisJCQkJMzEwMTJEQzAxOEI5N0I5QjAwMzkwNjJGIC8qIGdsc2xh
bmdfbGV4LmNwcCAqLywKKwkJCQkzMTAxMkRDMTE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZ190
YWIuY3BwICovLAorCQkJCTMxMDEyREMyMThCOTdCOUIwMDM5MDYyRiAvKiBnbHNsYW5nX3RhYi5o
ICovLAorCQkJCTMxMDEyREMzMThCOTdCOUIwMDM5MDYyRiAvKiBIYXNoTmFtZXMuaCAqLywKKwkJ
CQkzMTAxMkRDNDE4Qjk3QjlCMDAzOTA2MkYgLyogSW5mb1NpbmsuY3BwICovLAorCQkJCTMxMDEy
REM1MThCOTdCOUIwMDM5MDYyRiAvKiBJbmZvU2luay5oICovLAorCQkJCTMxMDEyREM2MThCOTdC
OUIwMDM5MDYyRiAvKiBJbml0aWFsaXplLmNwcCAqLywKKwkJCQkzMTAxMkRDNzE4Qjk3QjlCMDAz
OTA2MkYgLyogSW5pdGlhbGl6ZS5oICovLAorCQkJCTMxMDEyREM4MThCOTdCOUIwMDM5MDYyRiAv
KiBJbml0aWFsaXplRGxsLmNwcCAqLywKKwkJCQkzMTAxMkRDOTE4Qjk3QjlCMDAzOTA2MkYgLyog
SW5pdGlhbGl6ZURsbC5oICovLAorCQkJCTMxMDEyRENBMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0
aWFsaXplR2xvYmFscy5oICovLAorCQkJCTMxMDEyRENCMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0
aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLywKKwkJCQkzMTAxMkRDQzE4Qjk3QjlCMDAzOTA2MkYg
LyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICovLAorCQkJCTMxMDEyRENEMThCOTdCOUIwMDM5
MDYyRiAvKiBJbml0aWFsaXplVmFyaWFibGVzLmNwcCAqLywKKwkJCQkzMTAxMkRDRTE4Qjk3QjlC
MDAzOTA2MkYgLyogSW5pdGlhbGl6ZVZhcmlhYmxlcy5oICovLAorCQkJCTMxMDEyRENGMThCOTdC
OUIwMDM5MDYyRiAvKiBJbnRlcm1lZGlhdGUuY3BwICovLAorCQkJCTMxMDEyREQwMThCOTdCOUIw
MDM5MDYyRiAvKiBpbnRlcm1lZGlhdGUuaCAqLywKKwkJCQkzMTAxMkREMTE4Qjk3QjlCMDAzOTA2
MkYgLyogaW50ZXJtT3V0LmNwcCAqLywKKwkJCQkzMTAxMkREMjE4Qjk3QjlCMDAzOTA2MkYgLyog
SW50ZXJtVHJhdmVyc2UuY3BwICovLAorCQkJCTMxMDEyREQzMThCOTdCOUIwMDM5MDYyRiAvKiBs
b2NhbGludGVybWVkaWF0ZS5oICovLAorCQkJCTMxMDEyREQ0MThCOTdCOUIwMDM5MDYyRiAvKiBN
YXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi8sCisJCQkJMzEwMTJERDUxOEI5N0I5QjAwMzkwNjJG
IC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmggKi8sCisJCQkJMzEwMTJERDYxOEI5N0I5QjAwMzkw
NjJGIC8qIE1NYXAuaCAqLywKKwkJCQkzMTAxMkRENzE4Qjk3QjlCMDAzOTA2MkYgLyogTm9kZVNl
YXJjaC5oICovLAorCQkJCTMxMDEyREQ4MThCOTdCOUIwMDM5MDYyRiAvKiBvc2luY2x1ZGUuaCAq
LywKKwkJCQkzMTAxMkREOTE4Qjk3QjlCMDAzOTA2MkYgLyogb3Nzb3VyY2VfcG9zaXguY3BwICov
LAorCQkJCTMxMDEyRERCMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRFU1NMLmNwcCAqLywKKwkJ
CQkzMTAxMkREQzE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0RVNTTC5oICovLAorCQkJCTMxMDEy
REREMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRHTFNMLmNwcCAqLywKKwkJCQkzMTAxMkRERTE4
Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0R0xTTC5oICovLAorCQkJCTMxMDEyRERGMThCOTdCOUIw
MDM5MDYyRiAvKiBPdXRwdXRHTFNMQmFzZS5jcHAgKi8sCisJCQkJMzEwMTJERTAxOEI5N0I5QjAw
MzkwNjJGIC8qIE91dHB1dEdMU0xCYXNlLmggKi8sCisJCQkJMzEwMTJERTExOEI5N0I5QjAwMzkw
NjJGIC8qIE91dHB1dEhMU0wuY3BwICovLAorCQkJCTMxMDEyREUyMThCOTdCOUIwMDM5MDYyRiAv
KiBPdXRwdXRITFNMLmggKi8sCisJCQkJMzEwMTJERTMxOEI5N0I5QjAwMzkwNjJGIC8qIHBhcnNl
Q29uc3QuY3BwICovLAorCQkJCTMxMDEyREU0MThCOTdCOUIwMDM5MDYyRiAvKiBQYXJzZUNvbnRl
eHQuY3BwICovLAorCQkJCTMxMDEyREU1MThCOTdCOUIwMDM5MDYyRiAvKiBQYXJzZUNvbnRleHQu
aCAqLywKKwkJCQkzMTAxMkRFNjE4Qjk3QjlCMDAzOTA2MkYgLyogUG9vbEFsbG9jLmNwcCAqLywK
KwkJCQkzMTAxMkRFNzE4Qjk3QjlCMDAzOTA2MkYgLyogUG9vbEFsbG9jLmggKi8sCisJCQkJMzEw
MTJERTgxOEI5N0I5QjAwMzkwNjJGIC8qIFByYWdtYS5oICovLAorCQkJCTMxMDEyREU5MThCOTdC
OUIwMDM5MDYyRiAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi8sCisJCQkJMzEwMTJERUExOEI5N0I5
QjAwMzkwNjJGIC8qIFF1YWxpZmllckFsaXZlLmggKi8sCisJCQkJMzEwMTJERUIxOEI5N0I5QjAw
MzkwNjJGIC8qIFJlbW92ZVRyZWUuY3BwICovLAorCQkJCTMxMDEyREVDMThCOTdCOUIwMDM5MDYy
RiAvKiBSZW1vdmVUcmVlLmggKi8sCisJCQkJMzEwMTJERUQxOEI5N0I5QjAwMzkwNjJGIC8qIFJl
bmFtZUZ1bmN0aW9uLmggKi8sCisJCQkJMzEwMTJERUUxOEI5N0I5QjAwMzkwNjJGIC8qIFJld3Jp
dGVFbHNlQmxvY2tzLmNwcCAqLywKKwkJCQkzMTAxMkRFRjE4Qjk3QjlCMDAzOTA2MkYgLyogUmV3
cml0ZUVsc2VCbG9ja3MuaCAqLywKKwkJCQkzMTAxMkRGMDE4Qjk3QjlCMDAzOTA2MkYgLyogU2Vh
cmNoU3ltYm9sLmNwcCAqLywKKwkJCQkzMTAxMkRGMTE4Qjk3QjlCMDAzOTA2MkYgLyogU2VhcmNo
U3ltYm9sLmggKi8sCisJCQkJMzEwMTJERjIxOEI5N0I5QjAwMzkwNjJGIC8qIFNoYWRlckxhbmcu
Y3BwICovLAorCQkJCTMxMDEyREYzMThCOTdCOUIwMDM5MDYyRiAvKiBTaEhhbmRsZS5oICovLAor
CQkJCTMxMDEyREY0MThCOTdCOUIwMDM5MDYyRiAvKiBTeW1ib2xUYWJsZS5jcHAgKi8sCisJCQkJ
MzEwMTJERjUxOEI5N0I5QjAwMzkwNjJGIC8qIFN5bWJvbFRhYmxlLmggKi8sCisJCQkJMzEwMTJE
RkIxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCAqLywKKwkJCQkzMTAxMkRG
QzE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckVTU0wuaCAqLywKKwkJCQkzMTAxMkRGRDE4
Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckdMU0wuY3BwICovLAorCQkJCTMxMDEyREZFMThC
OTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9yR0xTTC5oICovLAorCQkJCTMxMDEyREZGMThCOTdC
OUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9ySExTTC5jcHAgKi8sCisJCQkJMzEwMTJFMDAxOEI5N0I5
QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JITFNMLmggKi8sCisJCQkJMzEwMTJFMDExOEI5N0I5QjAw
MzkwNjJGIC8qIFR5cGVzLmggKi8sCisJCQkJMzEwMTJFMDIxOEI5N0I5QjAwMzkwNjJGIC8qIFVu
Zm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8sCisJCQkJMzEwMTJFMDMxOEI5N0I5QjAwMzkwNjJGIC8q
IFVuZm9sZFNob3J0Q2lyY3VpdC5oICovLAorCQkJCTMxMDEyRTA0MThCOTdCOUIwMDM5MDYyRiAv
KiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwICovLAorCQkJCTMxMDEyRTA1MThCOTdCOUIwMDM5
MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuaCAqLywKKwkJCQkzMTAxMkUwNjE4Qjk3QjlC
MDAzOTA2MkYgLyogVW5pZm9ybS5jcHAgKi8sCisJCQkJMzEwMTJFMDcxOEI5N0I5QjAwMzkwNjJG
IC8qIFVuaWZvcm0uaCAqLywKKwkJCQkzMTAxMkUwODE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5j
cHAgKi8sCisJCQkJMzEwMTJFMDkxOEI5N0I5QjAwMzkwNjJGIC8qIHV0aWwuaCAqLywKKwkJCQkz
MTAxMkUwQTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgKi8sCisJ
CQkJMzEwMTJFMEIxOEI5N0I5QjAwMzkwNjJGIC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuaCAqLywK
KwkJCQkzMTAxMkUwQzE4Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFibGVJbmZvLmNwcCAqLywKKwkJ
CQkzMTAxMkUwRDE4Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFibGVJbmZvLmggKi8sCisJCQkJMzEw
MTJFMEUxOEI5N0I5QjAwMzkwNjJGIC8qIFZhcmlhYmxlUGFja2VyLmNwcCAqLywKKwkJCQkzMTAx
MkUwRjE4Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFibGVQYWNrZXIuaCAqLywKKwkJCQkzMTAxMkUx
MDE4Qjk3QjlCMDAzOTA2MkYgLyogVmVyc2lvbkdMU0wuY3BwICovLAorCQkJCTMxMDEyRTExMThC
OTdCOUIwMDM5MDYyRiAvKiBWZXJzaW9uR0xTTC5oICovLAorCQkJKTsKKwkJCXBhdGggPSB0cmFu
c2xhdG9yOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJMzEwMTJEQTkxOEI5
N0I5QjAwMzkwNjJGIC8qIGRlcGdyYXBoICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQlj
aGlsZHJlbiA9ICgKKwkJCQkzMTAxMkRBQTE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdy
YXBoLmNwcCAqLywKKwkJCQkzMTAxMkRBQjE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdy
YXBoLmggKi8sCisJCQkJMzEwMTJEQUMxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXIuY3BwICovLAorCQkJCTMxMDEyREFEMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRl
bmN5R3JhcGhCdWlsZGVyLmggKi8sCisJCQkJMzEwMTJEQUUxOEI5N0I5QjAwMzkwNjJGIC8qIERl
cGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8sCisJCQkJMzEwMTJEQUYxOEI5N0I5QjAwMzkwNjJG
IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovLAorCQkJCTMxMDEyREIwMThCOTdCOUIwMDM5
MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi8sCisJCQkpOworCQkJcGF0aCA9
IGRlcGdyYXBoOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJMzEwMTJERjYx
OEI5N0I5QjAwMzkwNjJGIC8qIHRpbWluZyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJ
Y2hpbGRyZW4gPSAoCisJCQkJMzEwMTJERjcxOEI5N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0RnJh
Z21lbnRTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCTMxMDEyREY4MThCOTdCOUIwMDM5MDYyRiAv
KiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggKi8sCisJCQkJMzEwMTJERjkxOEI5N0I5
QjAwMzkwNjJGIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLywKKwkJCQkzMTAx
MkRGQTE4Qjk3QjlCMDAzOTA2MkYgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLywK
KwkJCSk7CisJCQlwYXRoID0gdGltaW5nOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJ
fTsKIAkJMzEyQkRCMDcxNUZFQzhFNjAwOTdFQkM3IC8qIG1pc2MgKi8gPSB7CiAJCQlpc2EgPSBQ
QlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMzc3LDMxICs1MzIsNiBAQAogCQkJcGF0aCA9
IGluY2x1ZGUvS0hSOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJQTI2NTY4
MkMxNTlDMjNFMTAwMzk4NTM5IC8qIGRlcGdyYXBoICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7
Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQlBMjY1NjgyRDE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5k
ZW5jeUdyYXBoLmNwcCAqLywKLQkJCQlBMjY1NjgyRTE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5k
ZW5jeUdyYXBoLmggKi8sCi0JCQkJQTI2NTY4MkYxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXIuY3BwICovLAotCQkJCUEyNjU2ODMwMTU5QzIzRTEwMDM5ODUzOSAvKiBE
ZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8sCi0JCQkJQTI2NTY4MzExNTlDMjNFMTAwMzk4NTM5
IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8sCi0JCQkJQTI2NTY4MzIxNTlDMjNFMTAw
Mzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovLAotCQkJCUEyNjU2ODMzMTU5QzIz
RTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi8sCi0JCQkpOwotCQkJ
cGF0aCA9IGRlcGdyYXBoOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJQTI2
NTY4MzQxNTlDMjNFMTAwMzk4NTM5IC8qIHRpbWluZyAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3Vw
OwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJQTI2NTY4MzUxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3Ry
aWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovLAotCQkJCUEyNjU2ODM2MTU5QzIzRTEwMDM5
ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggKi8sCi0JCQkJQTI2NTY4Mzcx
NTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLywKLQkJ
CQlBMjY1NjgzODE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
aCAqLywKLQkJCSk7Ci0JCQlwYXRoID0gdGltaW5nOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKLQkJfTsKIAkJQTI5QjE1RTkxNjk3OEI3RDAwMTExRDk3IC8qIGluY2x1ZGUgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtNDQyLDEwNSArNTcyLDggQEAK
IAkJRkIzOUQyMjAxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGVyICovID0gewogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlBMjY1NjgyQzE1OUMyM0UxMDAzOTg1Mzkg
LyogZGVwZ3JhcGggKi8sCisJCQkJMzEwMTJEOUYxOEI5N0I5QjAwMzkwNjJGIC8qIHRyYW5zbGF0
b3IgKi8sCiAJCQkJRkIzOUQyNDQxMjAwRjM1QTAwMDg4RTY5IC8qIHByZXByb2Nlc3NvciAqLywK
LQkJCQlBMjY1NjgzNDE1OUMyM0UxMDAzOTg1MzkgLyogdGltaW5nICovLAotCQkJCUZCMzlEMjIx
MTIwMEYzNUEwMDA4OEU2OSAvKiBCYXNlVHlwZXMuaCAqLywKLQkJCQk0OTk1MUMwNTE0QjdBQUQ3
MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICovLAotCQkJCTcyNjUwOTM2
MTgzQUEzQzYwMEQyOEI0OCAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwICovLAotCQkJCTcy
NjUwOTM3MTgzQUEzQzYwMEQyOEI0OCAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuaCAqLywKLQkJ
CQk3MjY1MDkzNDE4M0FBM0IyMDBEMjhCNDggLyogUGFyc2VDb250ZXh0LmNwcCAqLywKLQkJCQk3
MjMwOUE2NzE4M0MyQkU4MDAzNzBCOTMgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgKi8sCi0J
CQkJNzIzMDlBNjgxODNDMkJFODAwMzcwQjkzIC8qIERldGVjdERpc2NvbnRpbnVpdHkuaCAqLywK
LQkJCQk3MjMwOUE2OTE4M0MyQkU4MDAzNzBCOTMgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCAq
LywKLQkJCQk3MjMwOUE2QTE4M0MyQkU4MDAzNzBCOTMgLyogVW5mb2xkU2hvcnRDaXJjdWl0Lmgg
Ki8sCi0JCQkJNzIzMDlBNkIxODNDMkJFODAwMzcwQjkzIC8qIFVuaWZvcm0uY3BwICovLAotCQkJ
CTcyMzA5QTZDMTgzQzJCRTgwMDM3MEI5MyAvKiBVbmlmb3JtLmggKi8sCi0JCQkJNzI2NTA5MzUx
ODNBQTNCMjAwRDI4QjQ4IC8qIFBhcnNlQ29udGV4dC5oICovLAotCQkJCTcyNjUwOTMzMTgzQUEy
ODkwMEQyOEI0OCAvKiBOb2RlU2VhcmNoLmggKi8sCi0JCQkJNzI2NTA5MzExODNBQTI0NjAwRDI4
QjQ4IC8qIEluaXRpYWxpemVHTFBvc2l0aW9uLmNwcCAqLywKLQkJCQk3MjY1MDkzMjE4M0FBMjQ2
MDBEMjhCNDggLyogSW5pdGlhbGl6ZUdMUG9zaXRpb24uaCAqLywKLQkJCQk0OTk1MUMwNjE0QjdB
QUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCAqLywKLQkJCQk3MjY1MDkz
MDE4M0FBMjEzMDBEMjhCNDggLyogQ29kZUdlbi5jcHAgKi8sCi0JCQkJRkIzOUQyMjQxMjAwRjM1
QTAwMDg4RTY5IC8qIENvbW1vbi5oICovLAotCQkJCTkwRDlCMEY5MTJFMTFEQ0IwMDJENDI1NSAv
KiBDb21waWxlci5jcHAgKi8sCi0JCQkJRkIzOUQyMjUxMjAwRjM1QTAwMDg4RTY5IC8qIENvbnN0
YW50VW5pb24uaCAqLywKLQkJCQlGQjM5RDIyNjEyMDBGMzVBMDAwODhFNjkgLyogZGVidWcuY3Bw
ICovLAotCQkJCUZCMzlEMjI3MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5oICovLAotCQkJCTVD
QjEzRkQzMTc5REIzRkQwMDFGODUxRCAvKiBEZXRlY3RDYWxsRGVwdGguaCAqLywKLQkJCQk1Q0Ix
M0ZEMjE3OURCM0ZEMDAxRjg1MUQgLyogRGV0ZWN0Q2FsbERlcHRoLmNwcCAqLywKLQkJCQlBMjY1
NjdCMDE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwICovLAotCQkJCUEyNjU2N0Ix
MTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oICovLAotCQkJCUEyNjU2N0IyMTU5QzIx
QjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCAqLywKLQkJCQlBMjY1NjdCMzE1OUMy
MUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oICovLAotCQkJCTkwRDlCMEZBMTJFMTFE
Q0IwMDJENDI1NSAvKiBFeHRlbnNpb25CZWhhdmlvci5oICovLAotCQkJCUEwQUFCRTJBMTNBRkU4
MTAwMEYyRUJEMSAvKiBGb3JMb29wVW5yb2xsLmNwcCAqLywKLQkJCQlBMEFBQkUyQjEzQUZFODEw
MDBGMkVCRDEgLyogRm9yTG9vcFVucm9sbC5oICovLAotCQkJCTkwRDlCMEZFMTJFMTFEQ0IwMDJE
NDI1NSAvKiBnbHNsYW5nLmggKi8sCi0JCQkJNzIzMDlBNTkxODNDMjg0RTAwMzcwQjkzIC8qIGds
c2xhbmdfbGV4LmNwcCAqLywKLQkJCQk3MjMwOUE1QTE4M0MyODRFMDAzNzBCOTMgLyogZ2xzbGFu
Z190YWIuY3BwICovLAotCQkJCTcyMzA5QTVCMTgzQzI4NEUwMDM3MEI5MyAvKiBnbHNsYW5nX3Rh
Yi5oICovLAotCQkJCUEyNjRGOEM1MTY5NzRFMkEwMDZGQUE1QSAvKiBIYXNoTmFtZXMuaCAqLywK
LQkJCQlGQjM5RDIyQTEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1NpbmsuY3BwICovLAotCQkJCUZC
MzlEMjJCMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5oICovLAotCQkJCUZCMzlEMjJDMTIw
MEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplLmNwcCAqLywKLQkJCQlGQjM5RDIyRDEyMDBGMzVB
MDAwODhFNjkgLyogSW5pdGlhbGl6ZS5oICovLAotCQkJCUZCMzlEMjJFMTIwMEYzNUEwMDA4OEU2
OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLywKLQkJCQlGQjM5RDIyRjEyMDBGMzVBMDAwODhFNjkg
LyogSW5pdGlhbGl6ZURsbC5oICovLAotCQkJCUZCMzlEMjMwMTIwMEYzNUEwMDA4OEU2OSAvKiBJ
bml0aWFsaXplR2xvYmFscy5oICovLAotCQkJCUEyNjU2N0I0MTU5QzIxQjEwMDM5ODUzOSAvKiBJ
bml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLywKLQkJCQlGQjM5RDIzMTEyMDBGMzVBMDAwODhF
NjkgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICovLAotCQkJCUZCMzlEMjMyMTIwMEYzNUEw
MDA4OEU2OSAvKiBJbnRlcm1lZGlhdGUuY3BwICovLAotCQkJCUZCMzlEMjMzMTIwMEYzNUEwMDA4
OEU2OSAvKiBpbnRlcm1lZGlhdGUuaCAqLywKLQkJCQlGQjM5RDIzNDEyMDBGMzVBMDAwODhFNjkg
LyogaW50ZXJtT3V0LmNwcCAqLywKLQkJCQlGQjM5RDIzNTEyMDBGMzVBMDAwODhFNjkgLyogSW50
ZXJtVHJhdmVyc2UuY3BwICovLAotCQkJCUZCMzlEMjM2MTIwMEYzNUEwMDA4OEU2OSAvKiBsb2Nh
bGludGVybWVkaWF0ZS5oICovLAotCQkJCUEwQUFCRTJFMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBM
b25nVmFyaWFibGVOYW1lcy5jcHAgKi8sCi0JCQkJQTBBQUJFMkYxM0FGRTgzMDAwRjJFQkQxIC8q
IE1hcExvbmdWYXJpYWJsZU5hbWVzLmggKi8sCi0JCQkJRkIzOUQyMzcxMjAwRjM1QTAwMDg4RTY5
IC8qIE1NYXAuaCAqLywKLQkJCQlGQjM5RDIzODEyMDBGMzVBMDAwODhFNjkgLyogb3NpbmNsdWRl
LmggKi8sCi0JCQkJRkIzOUQyMzkxMjAwRjM1QTAwMDg4RTY5IC8qIG9zc291cmNlX3Bvc2l4LmNw
cCAqLywKLQkJCQlGQjM5RDIzQTEyMDBGMzVBMDAwODhFNjkgLyogb3Nzb3VyY2Vfd2luLmNwcCAq
LywKLQkJCQlBMEFBQkU0MjEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5jcHAgKi8sCi0J
CQkJQTBBQUJFNDMxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuaCAqLywKLQkJCQlGQjM5
RDIzQjEyMDBGMzVBMDAwODhFNjkgLyogT3V0cHV0R0xTTC5jcHAgKi8sCi0JCQkJRkIzOUQyM0Mx
MjAwRjM1QTAwMDg4RTY5IC8qIE91dHB1dEdMU0wuaCAqLywKLQkJCQlBMEFBQkUzMjEzQUZFODQ3
MDBGMkVCRDEgLyogT3V0cHV0R0xTTEJhc2UuY3BwICovLAotCQkJCUEwQUFCRTMzMTNBRkU4NDcw
MEYyRUJEMSAvKiBPdXRwdXRHTFNMQmFzZS5oICovLAotCQkJCTcyMzA5QTYzMTgzQzJBRTUwMDM3
MEI5MyAvKiBPdXRwdXRITFNMLmNwcCAqLywKLQkJCQk3MjMwOUE2NDE4M0MyQUU1MDAzNzBCOTMg
LyogT3V0cHV0SExTTC5oICovLAotCQkJCUZCMzlEMjNGMTIwMEYzNUEwMDA4OEU2OSAvKiBwYXJz
ZUNvbnN0LmNwcCAqLywKLQkJCQlGQjM5RDI0MjEyMDBGMzVBMDAwODhFNjkgLyogUG9vbEFsbG9j
LmNwcCAqLywKLQkJCQlGQjM5RDI0MzEyMDBGMzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmggKi8s
Ci0JCQkJQTI2NTY3QjUxNTlDMjFCMTAwMzk4NTM5IC8qIFByYWdtYS5oICovLAotCQkJCUZCMzlE
MjU2MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi8sCi0JCQkJRkIzOUQy
NTcxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmggKi8sCi0JCQkJRkIzOUQyNTgx
MjAwRjM1QTAwMDg4RTY5IC8qIFJlbW92ZVRyZWUuY3BwICovLAotCQkJCUZCMzlEMjU5MTIwMEYz
NUEwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmggKi8sCi0JCQkJQTI2NTY3QjYxNTlDMjFCMTAwMzk4
NTM5IC8qIFJlbmFtZUZ1bmN0aW9uLmggKi8sCi0JCQkJOTBEOUIxMDAxMkUxMURDQjAwMkQ0MjU1
IC8qIFNlYXJjaFN5bWJvbC5jcHAgKi8sCi0JCQkJOTBEOUIxMDExMkUxMURDQjAwMkQ0MjU1IC8q
IFNlYXJjaFN5bWJvbC5oICovLAotCQkJCUZCMzlEMjVBMTIwMEYzNUEwMDA4OEU2OSAvKiBTaGFk
ZXJMYW5nLmNwcCAqLywKLQkJCQlGQjM5RDI1QjEyMDBGMzVBMDAwODhFNjkgLyogU2hIYW5kbGUu
aCAqLywKLQkJCQlGQjM5RDI1QzEyMDBGMzVBMDAwODhFNjkgLyogU3ltYm9sVGFibGUuY3BwICov
LAotCQkJCUZCMzlEMjVEMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5oICovLAotCQkJ
CUEwQUFCRTQ2MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi8sCi0JCQkJ
QTBBQUJFNDcxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmggKi8sCi0JCQkJRkIz
OUQyNjgxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLywKLQkJCQlGQjM5
RDI2OTEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuaCAqLywKLQkJCQk3MjMwOUE1
RjE4M0MyQTY0MDAzNzBCOTMgLyogVHJhbnNsYXRvckhMU0wuY3BwICovLAotCQkJCTcyMzA5QTYw
MTgzQzJBNjQwMDM3MEI5MyAvKiBUcmFuc2xhdG9ySExTTC5oICovLAotCQkJCUZCMzlEMjZDMTIw
MEYzNUEwMDA4OEU2OSAvKiBUeXBlcy5oICovLAotCQkJCTkwRDlCMTBCMTJFMTFERDYwMDJENDI1
NSAvKiB1dGlsLmNwcCAqLywKLQkJCQk5MEQ5QjEwQzEyRTExREQ2MDAyRDQyNTUgLyogdXRpbC5o
ICovLAotCQkJCTkwRDlCMTBEMTJFMTFERDYwMDJENDI1NSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25z
LmNwcCAqLywKLQkJCQk5MEQ5QjEwRTEyRTExREQ2MDAyRDQyNTUgLyogVmFsaWRhdGVMaW1pdGF0
aW9ucy5oICovLAotCQkJCTkwRDlCMTBGMTJFMTFERDYwMDJENDI1NSAvKiBWYXJpYWJsZUluZm8u
Y3BwICovLAotCQkJCTkwRDlCMTEwMTJFMTFERDYwMDJENDI1NSAvKiBWYXJpYWJsZUluZm8uaCAq
LywKLQkJCQlBMjY0RjhDNjE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuY3BwICov
LAotCQkJCUEyNjRGOEM3MTY5NzRFMkEwMDZGQUE1QSAvKiBWYXJpYWJsZVBhY2tlci5oICovLAot
CQkJCTkwRDlCMTExMTJFMTFERDYwMDJENDI1NSAvKiBWZXJzaW9uR0xTTC5jcHAgKi8sCi0JCQkJ
OTBEOUIxMTIxMkUxMURENjAwMkQ0MjU1IC8qIFZlcnNpb25HTFNMLmggKi8sCiAJCQkpOwogCQkJ
bmFtZSA9IGNvbXBpbGVyOwogCQkJcGF0aCA9IHNyYy9jb21waWxlcjsKQEAgLTU0OSwxNCArNTgy
LDEzIEBACiAJCUZCMzlEMjQ0MTIwMEYzNUEwMDA4OEU2OSAvKiBwcmVwcm9jZXNzb3IgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTcyMzA5QTU3MTgzQzI3
RjEwMDM3MEI5MyAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCAqLywKLQkJCQk3MjMwOUE1NTE4M0My
N0RCMDAzNzBCOTMgLyogVG9rZW5pemVyLmNwcCAqLywKIAkJCQlBMjY0Rjg5MzE2OTc0REVEMDA2
RkFBNUEgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCAqLywKIAkJCQlBMjY0Rjg5NDE2OTc0REVEMDA2
RkFBNUEgLyogRGlhZ25vc3RpY3NCYXNlLmggKi8sCiAJCQkJQTI2NEY4OTUxNjk3NERFRDAwNkZB
QTVBIC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcCAqLywKIAkJCQlBMjY0Rjg5NjE2OTc0REVE
MDA2RkFBNUEgLyogRGlyZWN0aXZlSGFuZGxlckJhc2UuaCAqLywKIAkJCQlBMjY0Rjg5NzE2OTc0
REVEMDA2RkFBNUEgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLywKIAkJCQlBMjY0Rjg5ODE2OTc0
REVEMDA2RkFBNUEgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8sCisJCQkJNzIzMDlBNTcxODNDMjdG
MTAwMzcwQjkzIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovLAogCQkJCUEyNjRGODlBMTY5NzRE
RUQwMDZGQUE1QSAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi8sCiAJCQkJQTI2NEY4OUIxNjk3NERF
RDAwNkZBQTVBIC8qIElucHV0LmNwcCAqLywKIAkJCQlBMjY0Rjg5QzE2OTc0REVEMDA2RkFBNUEg
LyogSW5wdXQuaCAqLywKQEAgLTU3NCw2ICs2MDYsNyBAQAogCQkJCUEyNjRGOEE3MTY5NzRERUQw
MDZGQUE1QSAvKiBTb3VyY2VMb2NhdGlvbi5oICovLAogCQkJCUEyNjRGOEE4MTY5NzRERUQwMDZG
QUE1QSAvKiBUb2tlbi5jcHAgKi8sCiAJCQkJQTI2NEY4QTkxNjk3NERFRDAwNkZBQTVBIC8qIFRv
a2VuLmggKi8sCisJCQkJNzIzMDlBNTUxODNDMjdEQjAwMzcwQjkzIC8qIFRva2VuaXplci5jcHAg
Ki8sCiAJCQkJQTI2NEY4QUIxNjk3NERFRDAwNkZBQTVBIC8qIFRva2VuaXplci5oICovLAogCQkJ
KTsKIAkJCXBhdGggPSBwcmVwcm9jZXNzb3I7CkBAIC01OTUsNTkgKzYyOCw4MSBAQAogCQkJaXNh
ID0gUEJYSGVhZGVyc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3
OwogCQkJZmlsZXMgPSAoCisJCQkJMzEwMTJFM0MxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxp
emVQYXJzZUNvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUEwOEMzQ0REMTZENkNCNjEwMDNG
MEI4MyAvKiBBcnJheUJvdW5kc0NsYW1wZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5OTUxQzBB
MTRCN0FBRDgwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJQTI2NTY4M0ExNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJQTI2NTY4M0MxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lH
cmFwaEJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2ODNFMTU5QzIzRTEwMDM5ODUz
OSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2N0JD
MTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEw
MTJFM0UxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVWYXJpYWJsZXMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTMxMDEyRTE0MThCOTdCOUIwMDM5MDYyRiAvKiBCdWlsdEluRnVuY3Rpb25FbXVs
YXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNTUxOEI5N0I5QjAwMzkwNjJGIC8qIFBh
cnNlQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFMkMxOEI5N0I5QjAwMzkwNjJG
IC8qIEZvckxvb3BVbnJvbGwuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTZEMThCOTdCOUIw
MDM5MDYyRiAvKiBUcmFuc2xhdG9yR0xTTC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNDYx
OEI5N0I5QjAwMzkwNjJGIC8qIE1NYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTZCMThC
OTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9yRVNTTC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEw
MTJFMTYxOEI5N0I5QjAwMzkwNjJGIC8qIENvbW1vbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEw
MTJFMjAxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMzEwMTJFN0MxOEI5N0I5QjAwMzkwNjJGIC8qIFZhcmlhYmxlSW5mby5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNjExOEI5N0I5QjAwMzkwNjJGIC8qIFNlYXJjaFN5bWJv
bC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNDcxOEI5N0I5QjAwMzkwNjJGIC8qIE5vZGVT
ZWFyY2guaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEFEMTY5NzRERUQwMDZGQUE1QSAvKiBE
aWFnbm9zdGljc0Jhc2UuaCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2N0JFMTU5QzIxQjEwMDM5
ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkU0QzE4
Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0RVNTTC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJF
NUYxOEI5N0I5QjAwMzkwNjJGIC8qIFJld3JpdGVFbHNlQmxvY2tzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBMjY0RjhBRjE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0aXZlSGFuZGxlckJhc2UuaCBp
biBIZWFkZXJzICovLAorCQkJCTMxMDEyRTdFMThCOTdCOUIwMDM5MDYyRiAvKiBWYXJpYWJsZVBh
Y2tlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNTAxOEI5N0I5QjAwMzkwNjJGIC8qIE91
dHB1dEdMU0xCYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkU0MDE4Qjk3QjlCMDAzOTA2
MkYgLyogaW50ZXJtZWRpYXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkUyNTE4Qjk3QjlC
MDAzOTA2MkYgLyogRGV0ZWN0RGlzY29udGludWl0eS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEw
MTJFNUQxOEI5N0I5QjAwMzkwNjJGIC8qIFJlbmFtZUZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywK
KwkJCQkzMTAxMkUzQTE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTMxMDEyRTQ1MThCOTdCOUIwMDM5MDYyRiAvKiBNYXBMb25nVmFyaWFi
bGVOYW1lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFODAxOEI5N0I5QjAwMzkwNjJGIC8q
IFZlcnNpb25HTFNMLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkUyNzE4Qjk3QjlCMDAzOTA2
MkYgLyogRGlhZ25vc3RpY3MuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTMyMThCOTdCOUIw
MDM5MDYyRiAvKiBnbHNsYW5nX3RhYi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4QjExNjk3
NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEw
MTJFNTgxOEI5N0I5QjAwMzkwNjJGIC8qIFByYWdtYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEw
MTJFNjUxOEI5N0I5QjAwMzkwNjJGIC8qIFN5bWJvbFRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkzMTAxMkU3NDE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmggaW4g
SGVhZGVycyAqLywKKwkJCQkzMTAxMkU3MjE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRD
aXJjdWl0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhCMzE2OTc0REVEMDA2RkFBNUEgLyog
RXhwcmVzc2lvblBhcnNlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNzIzMDlBNEYxODNDMjU5RTAw
MzcwQjkzIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTBE
OUIxMDMxMkUxMURDQjAwMkQ0MjU1IC8qIEV4dGVuc2lvbkJlaGF2aW9yLmggaW4gSGVhZGVycyAq
LywKLQkJCQk3MjMwOUE1RTE4M0MyODUzMDAzNzBCOTMgLyogZ2xzbGFuZ190YWIuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTcyMzA5QTcyMTgzQzJCRTgwMDM3MEI5MyAvKiBVbmlmb3JtLmggaW4gSGVh
ZGVycyAqLywKLQkJCQk3MjMwOUE2NjE4M0MyQUU1MDAzNzBCOTMgLyogT3V0cHV0SExTTC5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJQTBBQUJFMkQxM0FGRTgxMDAwRjJFQkQxIC8qIEZvckxvb3BVbnJv
bGwuaCBpbiBIZWFkZXJzICovLAotCQkJCTkwRDlCMTA3MTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNs
YW5nLmggaW4gSGVhZGVycyAqLywKLQkJCQlBMjY0RjhDODE2OTc0RTJBMDA2RkFBNUEgLyogSGFz
aE5hbWVzLmggaW4gSGVhZGVycyAqLywKLQkJCQk3MjMwOUE2MjE4M0MyQTc0MDAzNzBCOTMgLyog
VHJhbnNsYXRvckhMU0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTVDMThCOTdCOUIwMDM5
MDYyRiAvKiBSZW1vdmVUcmVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkU0ODE4Qjk3QjlC
MDAzOTA2MkYgLyogb3NpbmNsdWRlLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkUzNTE4Qjk3
QjlCMDAzOTA2MkYgLyogSW5mb1NpbmsuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTFDMThC
OTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGguaCBpbiBIZWFkZXJzICovLAorCQkJCTMx
MDEyRTYzMThCOTdCOUIwMDM5MDYyRiAvKiBTaEhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MzEwMTJFNzAxOEI5N0I5QjAwMzkwNjJGIC8qIFR5cGVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkz
MTAxMkU2NzE4Qjk3QjlCMDAzOTA2MkYgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNDMxOEI5N0I5QjAwMzkwNjJGIC8qIGxvY2FsaW50
ZXJtZWRpYXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkU3ODE4Qjk3QjlCMDAzOTA2MkYg
LyogdXRpbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4QjUxNjk3NERFRDAwNkZBQTVBIC8q
IElucHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhDRDE2OTc2MkFBMDA2RkFBNUEgLyog
a2hycGxhdGZvcm0uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OTUxQzAzMTRCN0FBQjMwMDYwRTk2
RSAvKiBsZW5ndGhfbGltaXRzLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTAxMkU3NjE4Qjk3QjlC
MDAzOTA2MkYgLyogVW5pZm9ybS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFMjMxOEI5N0I5
QjAwMzkwNjJGIC8qIERldGVjdENhbGxEZXB0aC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJF
MzkxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVEbGwuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUEyNjRGOEI3MTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MzEwMTJFODQxOEI5N0M4NjAwMzkwNjJGIC8qIGNvbXBpbGVyZGVidWcuaCBpbiBIZWFkZXJzICov
LAogCQkJCUEyNjRGOEI5MTY5NzRERUQwMDZGQUE1QSAvKiBNYWNyby5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMzEwMTJFNUExOEI5N0I5QjAwMzkwNjJGIC8qIFF1YWxpZmllckFsaXZlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkzMTAxMkU1NzE4Qjk3QjlCMDAzOTA2MkYgLyogUG9vbEFsbG9jLmggaW4g
SGVhZGVycyAqLywKKwkJCQkzMTAxMkUzNzE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFNTIxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEhM
U0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTFBMThCOTdCOUIwMDM5MDYyRiAvKiBDb25z
dGFudFVuaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhCQjE2OTc0REVEMDA2RkFBNUEg
LyogTWFjcm9FeHBhbmRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNzIzMDlBNTQxODNDMjVBRDAw
MzcwQjkzIC8qIEluaXRpYWxpemVHTFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQlBMEFB
QkUzMTEzQUZFODMwMDBGMkVCRDEgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTMxMDEyRTJEMThCOTdCOUIwMDM5MDYyRiAvKiBnbHNsYW5nLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBMjY0RjhCQzE2OTc0REVEMDA2RkFBNUEgLyogbnVtZXJpY19sZXguaCBpbiBI
ZWFkZXJzICovLAotCQkJCUEwQUFCRTQ1MTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmgg
aW4gSGVhZGVycyAqLywKLQkJCQk3MjMwOUE3MDE4M0MyQkU4MDAzNzBCOTMgLyogVW5mb2xkU2hv
cnRDaXJjdWl0LmggaW4gSGVhZGVycyAqLywKLQkJCQlBMEFBQkUzNTEzQUZFODQ3MDBGMkVCRDEg
LyogT3V0cHV0R0xTTEJhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTY5MThCOTdCOUIw
MDM5MDYyRiAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTI2NEY4QkQxNjk3NERFRDAwNkZBQTVBIC8qIHBwX3V0aWxzLmggaW4gSGVhZGVycyAqLywK
LQkJCQlBMjY1NjdDMDE1OUMyMUIxMDAzOTg1MzkgLyogUHJhZ21hLmggaW4gSGVhZGVycyAqLywK
KwkJCQkzMTAxMkUyQTE4Qjk3QjlCMDAzOTA2MkYgLyogRXh0ZW5zaW9uQmVoYXZpb3IuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTMxMDEyRTZGMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9ySExT
TC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4QkYxNjk3NERFRDAwNkZBQTVBIC8qIFByZXBy
b2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2NTY3QzExNTlDMjFCMTAwMzk4NTM5IC8q
IFJlbmFtZUZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQk3MjMwOUE1MjE4M0MyNUE3MDAz
NzBCOTMgLyogTm9kZVNlYXJjaC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2NTY4NDExNTlDMjNF
MTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICov
LAotCQkJCTcyMzA5QTZFMTgzQzJCRTgwMDM3MEI5MyAvKiBEZXRlY3REaXNjb250aW51aXR5Lmgg
aW4gSGVhZGVycyAqLywKLQkJCQlBMjY1Njg0MzE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RW
ZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovLAotCQkJCTkwRDlCMTBBMTJFMTFEQ0Iw
MDJENDI1NSAvKiBTZWFyY2hTeW1ib2wuaCBpbiBIZWFkZXJzICovLAogCQkJCUZCMzlENzZFMTIw
MTEwRkMwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhD
MDE2OTc0REVEMDA2RkFBNUEgLyogU291cmNlTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJ
CTMxMDEyRTRFMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRHTFNMLmggaW4gSGVhZGVycyAqLywK
KwkJCQkzMTAxMkUxRTE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFN0ExOEI5N0I5QjAwMzkwNjJGIC8qIFZhbGlkYXRl
TGltaXRhdGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTMzMThCOTdCOUIwMDM5MDYy
RiAvKiBIYXNoTmFtZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEMyMTY5NzRERUQwMDZG
QUE1QSAvKiBUb2tlbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzEwMTJFMjkxOEI5N0I5QjAwMzkw
NjJGIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxMDEyRTEyMThC
OTdCOUIwMDM5MDYyRiAvKiBCYXNlVHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEM0
MTY5NzRERUQwMDZGQUE1QSAvKiBUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUEwQUFC
RTQ5MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJOTBEOUIxMTQxMkUxMURENjAwMkQ0MjU1IC8qIHV0aWwuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTkwRDlCMTE2MTJFMTFERDYwMDJENDI1NSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmggaW4gSGVh
ZGVycyAqLywKLQkJCQk3MjMwOUE1MTE4M0MyNUE1MDAzNzBCOTMgLyogUGFyc2VDb250ZXh0Lmgg
aW4gSGVhZGVycyAqLywKLQkJCQk5MEQ5QjExODEyRTExREQ2MDAyRDQyNTUgLyogVmFyaWFibGVJ
bmZvLmggaW4gSGVhZGVycyAqLywKLQkJCQlBMjY0RjhDQTE2OTc0RTJBMDA2RkFBNUEgLyogVmFy
aWFibGVQYWNrZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTkwRDlCMTFBMTJFMTFERDYwMDJENDI1
NSAvKiBWZXJzaW9uR0xTTC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNUNCMTNGRDUxNzlEQjNGRDAw
MUY4NTFEIC8qIERldGVjdENhbGxEZXB0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC03MjMsNjggKzc3
OCw2OSBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1h
c2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJMzEwMTJFMjYxOEI5N0I5QjAwMzkw
NjJGIC8qIERpYWdub3N0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTNEMThCOTdC
OUIwMDM5MDYyRiAvKiBJbml0aWFsaXplVmFyaWFibGVzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTMxMDEyRTdGMThCOTdCOUIwMDM5MDYyRiAvKiBWZXJzaW9uR0xTTC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBMDhDM0NEQzE2RDZDQjYxMDAzRjBCODMgLyogQXJyYXlCb3VuZHNDbGFtcGVyLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTQ5OTUxQzA5MTRCN0FBRDgwMDYwRTk2RSAvKiBCdWlsdElu
RnVuY3Rpb25FbXVsYXRvci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk3MjMwOUE1RDE4M0MyODUz
MDAzNzBCOTMgLyogZ2xzbGFuZ190YWIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOTBEOUIxMDIx
MkUxMURDQjAwMkQ0MjU1IC8qIENvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlE
Mjc1MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjY1
NjgzOTE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCUEyNjU2ODNCMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVy
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyNjU2ODNEMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBl
bmRlbmN5R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTI2NTY4M0YxNTlDMjNF
MTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCUEyNjU2N0JCMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk3MjMwOUE1NjE4M0MyN0RFMDAzNzBCOTMgLyogVG9rZW5pemVyLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTcyMzA5QTUwMTgzQzI1QTEwMDM3MEI5MyAvKiBQYXJzZUNvbnRleHQu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNzIzMDlBNzExODNDMkJFODAwMzcwQjkzIC8qIFVuaWZv
cm0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFNkMxOEI5N0I5QjAwMzkwNjJGIC8qIFRy
YW5zbGF0b3JHTFNMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEyNjRGOEFDMTY5NzRERUQwMDZG
QUE1QSAvKiBEaWFnbm9zdGljc0Jhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTI2NTY3QkQx
NTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMzEwMTJFMTUxOEI5N0I5QjAwMzkwNjJGIC8qIENvZGVHZW4uY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMzEwMTJFM0YxOEI5N0I5QjAwMzkwNjJGIC8qIEludGVybWVkaWF0ZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkzMTAxMkUzQjE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZVBhcnNl
Q29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkUzMTE4Qjk3QjlCMDAzOTA2MkYg
LyogZ2xzbGFuZ190YWIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFMjExOEI5N0I5QjAw
MzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTMxMDEyRTVFMThCOTdCOUIwMDM5MDYyRiAvKiBSZXdyaXRlRWxzZUJsb2Nrcy5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkzMTAxMkU1NDE4Qjk3QjlCMDAzOTA2MkYgLyogUGFyc2VDb250ZXh0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUEyNjRGOEFFMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3Rp
dmVIYW5kbGVyQmFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkU3NTE4Qjk3QjlCMDAz
OTA2MkYgLyogVW5pZm9ybS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkU0RDE4Qjk3QjlC
MDAzOTA2MkYgLyogT3V0cHV0R0xTTC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkUzMDE4
Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZ19sZXguY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEw
MTJFNDExOEI5N0I5QjAwMzkwNjJGIC8qIGludGVybU91dC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkzMTAxMkU2RTE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckhMU0wuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTI2NEY4QjAxNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZVBhcnNlci5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQlBMEFBQkUyQzEzQUZFODEwMDBGMkVCRDEgLyogRm9yTG9v
cFVucm9sbC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI3OTEyMDBGMzVBMDAwODhFNjkg
LyogSW5mb1NpbmsuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNzIzMDlBNjExODNDMkE3NDAwMzcw
QjkzIC8qIFRyYW5zbGF0b3JITFNMLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlEMjdCMTIw
MEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlE
MjdEMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTMxMDEyRTQ5MThCOTdCOUIwMDM5MDYyRiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkzMTAxMkU0MjE4Qjk3QjlCMDAzOTA2MkYgLyogSW50ZXJtVHJhdmVyc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFNjAxOEI5N0I5QjAwMzkwNjJGIC8qIFNlYXJj
aFN5bWJvbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MjMwOUE1ODE4M0MyN0YzMDAzNzBCOTMg
LyogRXhwcmVzc2lvblBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjY1NjdCRjE1OUMy
MUIxMDAzOTg1MzkgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkzMTAxMkUyODE4Qjk3QjlCMDAzOTA2MkYgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkzMTAxMkU1OTE4Qjk3QjlCMDAzOTA2MkYgLyogUXVhbGlmaWVyQWxp
dmUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFNzExOEI5N0I5QjAwMzkwNjJGIC8qIFVu
Zm9sZFNob3J0Q2lyY3VpdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkU2NDE4Qjk3QjlC
MDAzOTA2MkYgLyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NEY4QjQx
Njk3NERFRDAwNkZBQTVBIC8qIElucHV0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlEMjgx
MTIwMEYzNUEwMDA4OEU2OSAvKiBJbnRlcm1lZGlhdGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
RkIzOUQyODMxMjAwRjM1QTAwMDg4RTY5IC8qIGludGVybU91dC5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQlGQjM5RDI4NDEyMDBGMzVBMDAwODhFNjkgLyogSW50ZXJtVHJhdmVyc2UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTI2NEY4QjYxNjk3NERFRDAwNkZBQTVBIC8qIExleGVyLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTMxMDEyRTYyMThCOTdCOUIwMDM5MDYyRiAvKiBTaGFkZXJMYW5nLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTM4MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFs
aXplRGxsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEyNjRGOEI4MTY5NzRERUQwMDZGQUE1QSAv
KiBNYWNyby5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkU1QjE4Qjk3QjlCMDAzOTA2MkYg
LyogUmVtb3ZlVHJlZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMjY0RjhCQTE2OTc0REVEMDA2
RkFBNUEgLyogTWFjcm9FeHBhbmRlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMEFBQkUzMDEz
QUZFODMwMDBGMkVCRDEgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJRkIzOUQyODgxMjAwRjM1QTAwMDg4RTY5IC8qIG9zc291cmNlX3Bvc2l4LmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCUEwQUFCRTQ0MTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlEMjhBMTIwMEYzNUEwMDA4OEU2OSAvKiBPdXRwdXRH
TFNMLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEwQUFCRTM0MTNBRkU4NDcwMEYyRUJEMSAvKiBP
dXRwdXRHTFNMQmFzZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI4RTEyMDBGMzVBMDAw
ODhFNjkgLyogcGFyc2VDb25zdC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk3MjMwOUE2NTE4M0My
QUU1MDAzNzBCOTMgLyogT3V0cHV0SExTTC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI5
MTEyMDBGMzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTcy
MzA5QTUzMTgzQzI1QUEwMDM3MEI5MyAvKiBJbml0aWFsaXplR0xQb3NpdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQk3MjMwOUE2RDE4M0MyQkU4MDAzNzBCOTMgLyogRGV0ZWN0RGlzY29udGlu
dWl0eS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk3MjMwOUE2RjE4M0MyQkU4MDAzNzBCOTMgLyog
VW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTcyMzA5QTVDMTgzQzI4
NTMwMDM3MEI5MyAvKiBnbHNsYW5nX2xleC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkU3
MzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTMxMDEyRTI0MThCOTdCOUIwMDM5MDYyRiAvKiBEZXRlY3REaXNjb250aW51aXR5
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTY4MThCOTdCOUIwMDM5MDYyRiAvKiBSZXN0
cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkUxMzE4
Qjk3QjlCMDAzOTA2MkYgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMzEwMTJFMzQxOEI5N0I5QjAwMzkwNjJGIC8qIEluZm9TaW5rLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTMxMDEyRTUzMThCOTdCOUIwMDM5MDYyRiAvKiBwYXJzZUNvbnN0LmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTMxMDEyRTQ0MThCOTdCOUIwMDM5MDYyRiAvKiBNYXBMb25nVmFy
aWFibGVOYW1lcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTAxMkU1NjE4Qjk3QjlCMDAzOTA2
MkYgLyogUG9vbEFsbG9jLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTY2MThCOTdCOUIw
MDM5MDYyRiAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTMxMDEyRTc5MThCOTdCOUIwMDM5MDYyRiAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTgzMThCOTdDODYwMDM5MDYyRiAvKiBjb21waWxl
cmRlYnVnLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTc3MThCOTdCOUIwMDM5MDYyRiAv
KiB1dGlsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTUxMThCOTdCOUIwMDM5MDYyRiAv
KiBPdXRwdXRITFNMLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTM2MThCOTdCOUIwMDM5
MDYyRiAvKiBJbml0aWFsaXplLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTdCMThCOTdC
OUIwMDM5MDYyRiAvKiBWYXJpYWJsZUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJF
MUQxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMzEwMTJFN0QxOEI5N0I5QjAwMzkwNjJGIC8qIFZhcmlhYmxlUGFja2VyLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTFGMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRl
bmN5R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFNEIxOEI5N0I5QjAw
MzkwNjJGIC8qIE91dHB1dEVTU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NEY4QkUxNjk3
NERFRDAwNkZBQTVBIC8qIFByZXByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk3MjMw
OUE0RDE4M0MyNTkzMDAzNzBCOTMgLyogQ29kZUdlbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlG
QjM5RDJBNDEyMDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJRkIzOUQyQTYxMjAwRjM1QTAwMDg4RTY5IC8qIFJlbW92ZVRyZWUuY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJQTI2NTY4NDAxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTI2NTY4NDIxNTlDMjNFMTAw
Mzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTkwRDlCMTA5MTJFMTFEQ0IwMDJENDI1NSAvKiBTZWFyY2hTeW1ib2wuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJRkIzOUQyQTgxMjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJRkIzOUQyQUExMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTJCMThCOTdCOUIwMDM5MDYyRiAvKiBGb3JM
b29wVW5yb2xsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTIyMThCOTdCOUIwMDM5MDYy
RiAvKiBEZXRlY3RDYWxsRGVwdGguY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEwMTJFMTcxOEI5
N0I5QjAwMzkwNjJGIC8qIENvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMDEyRTZB
MThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkzMTAxMkU0RjE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0R0xTTEJhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMzEwMTJFMUIxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBMjY0RjhDMTE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW4u
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTBBQUJFNDgxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5z
bGF0b3JFU1NMLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlEMkFDMTIwMEYzNUEwMDA4OEU2
OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5MEQ5QjExMzEyRTEx
REQ2MDAyRDQyNTUgLyogdXRpbC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5MEQ5QjExNTEyRTEx
REQ2MDAyRDQyNTUgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQk5MEQ5QjExNzEyRTExREQ2MDAyRDQyNTUgLyogVmFyaWFibGVJbmZvLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCUEyNjRGOEM5MTY5NzRFMkEwMDZGQUE1QSAvKiBWYXJpYWJsZVBhY2tlci5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQk5MEQ5QjExOTEyRTExREQ2MDAyRDQyNTUgLyogVmVyc2lvbkdM
U0wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNUNCMTNGRDQxNzlEQjNGRDAwMUY4NTFEIC8qIERl
dGVjdENhbGxEZXB0aC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk3MjMwOUE0RTE4M0MyNTlDMDAz
NzBCOTMgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9HTlVtYWtlZmlsZS5hbQppbmRleCA0YzE0YWMxNzUxZTcyZDg5OWM5NTNi
MmVlZTlmZTU5N2MzYTQxYjE2Li41M2YzZTc4NjQ4OTNiNzM0ZGRiODYxMjg3YWExOWE5YTM3ZjVl
MjZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9HTlVtYWtlZmlsZS5hbQor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9HTlVtYWtlZmlsZS5hbQpAQCAtMTUsMTEgKzE1
LDYgQEAgbGliQU5HTEVfbGFfQ1BQRkxBR1MgPSBcCiAJLUkkKHNyY2RpcikvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9pbmNsdWRlL0tIUgogCi1ub2Rpc3RfbGliQU5HTEVfbGFfU09VUkNFUyA9IFwK
LQlEZXJpdmVkU291cmNlcy9BTkdMRS9nbHNsYW5nLmNwcCBcCi0JRGVyaXZlZFNvdXJjZXMvQU5H
TEUvZ2xzbGFuZ190YWIuY3BwIFwKLQlEZXJpdmVkU291cmNlcy9BTkdMRS9nbHNsYW5nX3RhYi5o
Ci0KIGxpYkFOR0xFX2xhX1NPVVJDRVMgPSBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5j
bHVkZS9FR0wvZWdsLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvRUdML2Vn
bGV4dC5oIFwKQEAgLTMwLDcxICsyNSwxMTQgQEAgbGliQU5HTEVfbGFfU09VUkNFUyA9IFwKIAlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oIFwKIAlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0tIUi9raHJwbGF0Zm9ybS5oIFwKIAlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaCBcCi0JU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Jhc2VUeXBlcy5oIFwKLQlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIFwKLQlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW4uY3Bw
IFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tbW9uLmggXAotCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAgXAotCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db25zdGFudFVuaW9uLmggXAotCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5jcHAgXAotCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgXAot
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5
R3JhcGhCdWlsZGVyLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9k
ZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmggXAotCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3Bw
IFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5k
ZW5jeUdyYXBoT3V0cHV0LmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgXAotCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3RDYWxsRGVwdGguY3BwIFwKLQlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0Q2FsbERlcHRoLmggXAotCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaWFnbm9zdGljcy5jcHAgXAotCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaWFnbm9zdGljcy5oIFwKLQlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5jcHAgXAotCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmggXAotCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmNw
cCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRp
bnVpdHkuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0V4dGVuc2lv
bkJlaGF2aW9yLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Gb3JM
b29wVW5yb2xsLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Zv
ckxvb3BVbnJvbGwuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ds
c2xhbmcuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0hhc2hOYW1l
cy5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5mb1NpbmsuY3Bw
IFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5mb1NpbmsuaCBcCi0J
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwIFwKLQlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5jcHAgXAot
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmggXAot
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplR2xvYmFscy5o
IFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZUdMUG9z
aXRpb24uY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlh
bGl6ZUdMUG9zaXRpb24uaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0luaXRpYWxpemUuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0lu
aXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvSW50ZXJtZWRpYXRlLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVkaWF0ZS5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtT3V0LmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0ludGVybVRyYXZlcnNlLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2xvY2FsaW50ZXJtZWRpYXRlLmggXAotCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgXAotCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5oIFwK
LQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvTU1hcC5oIFwKLQlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvTm9kZVNlYXJjaC5oIFwKLQlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3NpbmNsdWRlLmggXAotCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9vc3NvdXJjZV9wb3NpeC5jcHAgXAotCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRFU1NMLmNwcCBcCi0JU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEVTU0wuaCBcCi0JU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0xCYXNlLmNwcCBcCi0JU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0xCYXNlLmggXAotCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMLmNwcCBcCi0JU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuaCBcCi0JU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcGFyc2VDb25zdC5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9QYXJzZUNvbnRleHQuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvUGFyc2VDb250ZXh0LmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9QcmFnbWEuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvQmFzZVR5cGVzLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCBcCisJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvQ29kZUdlbi5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL0NvbW1vbi5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaCBcCisJU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvY29tcGlsZXJkZWJ1Zy5jcHAg
XAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2NvbXBp
bGVyZGVidWcuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgXAorCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lH
cmFwaEJ1aWxkZXIuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNwcCBcCisJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBo
LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2Rl
cGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1
dC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9k
ZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RldGVjdENhbGxEZXB0aC5jcHAgXAorCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RldGVjdENhbGxE
ZXB0aC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9EaWFnbm9zdGljcy5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0RpYWdub3N0aWNzLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL0RpcmVjdGl2ZUhhbmRsZXIuY3BwIFwKKwlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmgg
XAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RldGVj
dERpc2NvbnRpbnVpdHkuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9EZXRlY3REaXNjb250aW51aXR5LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0V4dGVuc2lvbkJlaGF2aW9yLmggXAorCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Zvckxvb3BVbnJv
bGwuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9Gb3JMb29wVW5yb2xsLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL2dsc2xhbmcuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ19sZXguY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5jcHAgXAorCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmggXAor
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0hhc2hOYW1l
cy5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9J
bmZvU2luay5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0luZm9TaW5rLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0luaXRpYWxpemUuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVEbGwuY3BwIFwKKwlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplRGxs
LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0lu
aXRpYWxpemVHbG9iYWxzLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0luaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIFwKKwlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplUGFyc2VDb250ZXh0
LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0lu
aXRpYWxpemVWYXJpYWJsZXMuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplVmFyaWFibGVzLmggXAorCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybWVkaWF0ZS5jcHAgXAorCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0
ZS5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9p
bnRlcm1PdXQuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9JbnRlcm1UcmF2ZXJzZS5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL2xvY2FsaW50ZXJtZWRpYXRlLmggXAorCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL01hcExvbmdWYXJpYWJsZU5hbWVz
LmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
TWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvTU1hcC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9Ob2RlU2VhcmNoLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL29zaW5jbHVkZS5oIFwKKwlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9vc3NvdXJjZV9wb3NpeC5jcHAgXAor
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEVT
U0wuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9PdXRwdXRFU1NMLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL091dHB1dEdMU0xCYXNlLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuaCBcCisJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTC5jcHAgXAorCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0wu
aCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0
cHV0SExTTC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL091dHB1dEhMU0wuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvcGFyc2VDb25zdC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5jcHAgXAorCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5oIFwKKwlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Qb29sQWxsb2Mu
Y3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Q
b29sQWxsb2MuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvUHJhZ21hLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1F1YWxpZmllckFsaXZlLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUXVhbGlmaWVyQWxpdmUuaCBcCisJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUmVtb3ZlVHJlZS5jcHAgXAorCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1JlbW92ZVRyZWUu
aCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUmVu
YW1lRnVuY3Rpb24uaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvUmV3cml0ZUVsc2VCbG9ja3MuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZXdyaXRlRWxzZUJsb2Nrcy5oIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TZWFyY2hTeW1ib2wuY3Bw
IFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TZWFy
Y2hTeW1ib2wuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvU2hhZGVyTGFuZy5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1NoSGFuZGxlLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmNwcCBcCisJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuaCBcCisJU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5o
IFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1p
bmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJU
aW1pbmcuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvckVTU0wuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yRVNTTC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yR0xTTC5jcHAgXAorCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JHTFNM
LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JITFNMLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvckhMU0wuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHlwZXMuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcCBcCisJ
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hv
cnRDaXJjdWl0QVNULmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1VuZm9sZFNob3J0Q2lyY3VpdC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1VuZm9sZFNob3J0Q2lyY3VpdC5oIFwKKwlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmNwcCBc
CisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5pZm9y
bS5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci91
dGlsLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvdXRpbC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1pdGF0aW9ucy5oIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZUluZm8uY3Bw
IFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJp
YWJsZUluZm8uaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVmFyaWFibGVQYWNrZXIuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZVBhY2tlci5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WZXJzaW9uR0xTTC5jcHAgXAorCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZlcnNpb25HTFNMLmgg
XAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlh
Z25vc3RpY3NCYXNlLmNwcCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9EaWFnbm9zdGljc0Jhc2UuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAgXApA
QCAtMTIxLDQzICsxNTksNSBAQCBsaWJBTkdMRV9sYV9TT1VSQ0VTID0gXAogCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW4uaCBcCiAJU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuY3Bw
IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rv
a2VuaXplci5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUXVhbGlm
aWVyQWxpdmUuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUXVh
bGlmaWVyQWxpdmUuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Jl
bW92ZVRyZWUuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVt
b3ZlVHJlZS5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1l
RnVuY3Rpb24uaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NlYXJj
aFN5bWJvbC5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TZWFy
Y2hTeW1ib2wuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRl
ckxhbmcuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5k
bGUuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxl
LmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxl
LmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIFwKLQlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hh
ZGVyVGltaW5nLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Rp
bWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuaCBcCi0JU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcCBcCi0JU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmggXAotCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAgXAotCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5oIFwKLQlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHlwZXMuaCBcCi0JU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAgXAotCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuaCBc
Ci0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3Vp
dC5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9y
dENpcmN1aXQuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuaWZv
cm0uY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5pZm9ybS5o
IFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdXRpbC5jcHAgXAotCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci91dGlsLmggXAotCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCBcCi0JU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuaCBc
Ci0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5jcHAg
XAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uaCBc
Ci0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlUGFja2VyLmNw
cCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlUGFja2Vy
LmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WZXJzaW9uR0xTTC5j
cHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WZXJzaW9uR0xTTC5o
IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvY29tcGlsZXIvQXJy
YXlCb3VuZHNDbGFtcGVyLmNwcCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3RoaXJk
X3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAppbmRleCA0MGQyZDI2
NDA0ODEzNzBlZDliNjAzMGIwMmY4NTYwM2E1OTg2M2YyLi4yZTFkY2YzMDFlZDI4ZmIzNGQzOTRi
ZDExZGQ4MmU1Mzc5NjljYzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9p
bmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKQEAgLTE4NCw4ICsxODQsOCBAQCB0eXBlZGVm
IGVudW0gewogICAvLyBUaGlzIGZsYWcgbGltaXRzIHRoZSBkZXB0aCBvZiB0aGUgY2FsbCBzdGFj
ay4KICAgU0hfTElNSVRfQ0FMTF9TVEFDS19ERVBUSCA9IDB4NDAwMCwKIAotICAvLyBUaGlzIGZs
YWcgaW5pdGlhbGl6ZXMgZ2xfUG9zaXRpb24gdG8gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApIGF0
Ci0gIC8vIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHZlcnRleCBzaGFkZXIsIGFuZCBoYXMgbm8gZWZm
ZWN0IGluIHRoZQorICAvLyBUaGlzIGZsYWcgaW5pdGlhbGl6ZXMgZ2xfUG9zaXRpb24gdG8gdmVj
NCgwLDAsMCwwKSBhdCB0aGUKKyAgLy8gYmVnaW5uaW5nIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyJ3Mg
bWFpbigpLCBhbmQgaGFzIG5vIGVmZmVjdCBpbiB0aGUKICAgLy8gZnJhZ21lbnQgc2hhZGVyLiBJ
dCBpcyBpbnRlbmRlZCBhcyBhIHdvcmthcm91bmQgZm9yIGRyaXZlcnMgd2hpY2gKICAgLy8gaW5j
b3JyZWN0bHkgZmFpbCB0byBsaW5rIHByb2dyYW1zIGlmIGdsX1Bvc2l0aW9uIGlzIG5vdCB3cml0
dGVuLgogICBTSF9JTklUX0dMX1BPU0lUSU9OID0gMHg4MDAwLApAQCAtMTk2LDYgKzE5NiwxMiBA
QCB0eXBlZGVmIGVudW0gewogICAvLyBUaGlzIGlzIHRvIHdvcmsgYXJvdW5kIGEgTWFjT1NYIGRy
aXZlciBidWcgdGhhdCB8YnwgaXMgZXhlY3V0ZWQKICAgLy8gaW5kZXBlbmRlbnQgb2YgfGF8J3Mg
dmFsdWUuCiAgIFNIX1VORk9MRF9TSE9SVF9DSVJDVUlUID0gMHgxMDAwMCwKKworICAvLyBUaGlz
IGZsYWcgaW5pdGlhbGl6ZXMgdmFyeWluZ3Mgd2l0aG91dCBzdGF0aWMgdXNlIGluIHZlcnRleCBz
aGFkZXIKKyAgLy8gYXQgdGhlIGJlZ2lubmluZyBvZiBtYWluKCksIGFuZCBoYXMgbm8gZWZmZWN0
cyBpbiB0aGUgZnJhZ21lbnQgc2hhZGVyLgorICAvLyBJdCBpcyBpbnRlbmRlZCBhcyBhIHdvcmth
cm91bmQgZm9yIGRyaXZlcnMgd2hpY2ggaW5jb3JyZWN0bHkgb3B0aW1pemUKKyAgLy8gb3V0IHN1
Y2ggdmFyeWluZ3MgYW5kIGNhdXNlIGEgbGluayBmYWlsdXJlLgorICBTSF9JTklUX1ZBUllJTkdT
X1dJVEhPVVRfU1RBVElDX1VTRSA9IDB4MjAwMDAsCiB9IFNoQ29tcGlsZU9wdGlvbnM7CiAKIC8v
IERlZmluZXMgYWx0ZXJuYXRlIHN0cmF0ZWdpZXMgZm9yIGltcGxlbWVudGluZyBhcnJheSBpbmRl
eCBjbGFtcGluZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUv
S0hSL2tocnBsYXRmb3JtLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0tIUi9r
aHJwbGF0Zm9ybS5oCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vUmVmQ291bnRPYmplY3QuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9SZWZDb3VudE9iamVjdC5jcHAKaW5k
ZXggMDM2NGFkZjJjZDU1MTU4NzA0MjViMDBkYWNkZDk4NzhmZDlhZjg0NS4uYzFlZjkwY2RjY2My
NjA5NWZmZTUxODMwMzE2YTE4MmRmMTI2ZmU3NiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbW1vbi9SZWZDb3VudE9iamVjdC5jcHAKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbW1vbi9SZWZDb3VudE9iamVjdC5jcHAKQEAgLTEsNCArMSwzIEBA
Ci0jaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKIC8vCiAvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1v
bi9hbmdsZXV0aWxzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2FuZ2xl
dXRpbHMuaAppbmRleCA5NzYxNTY3ZmIyNzQ5NzVmNDRjNTQxOTBiMTE3NDllYzM3MTE2ZGM2Li43
NzIzZjBmYjcyNzIzNjIxOThjNDIwMjE0NTRlMjZiMzBiYTUyN2Y0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaApAQCAtNDIsNiArNDIsMjAg
QEAgdm9pZCBTYWZlUmVsZWFzZShUJiByZXNvdXJjZSkKICAgICB9CiB9CiAKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPgordm9pZCBTYWZlRGVsZXRlKFQqJiByZXNvdXJjZSkKK3sKKyAgICBkZWxldGUg
cmVzb3VyY2U7CisgICAgcmVzb3VyY2UgPSBOVUxMOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK3ZvaWQgU2FmZURlbGV0ZUFycmF5KFQqJiByZXNvdXJjZSkKK3sKKyAgICBkZWxldGVbXSBy
ZXNvdXJjZTsKKyAgICByZXNvdXJjZSA9IE5VTEw7Cit9CisKICNpZiBkZWZpbmVkKF9NU0NfVkVS
KQogI2RlZmluZSBzbnByaW50ZiBfc25wcmludGYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmNwcAppbmRleCAyMzMzNzQwNWVkMTZjYTlmZDA1ZGQ3
ODIyOTQyZGY1ZjMwNjU1MDg1Li4wNWQzZGM2MmFkNDk2MTAwMDEyNTliOWI4YmE2ZTMxZGM5OWEw
NzMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVn
LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmNwcApA
QCAtNywxNyArNywyMyBAQAogLy8gZGVidWcuY3BwOiBEZWJ1Z2dpbmcgdXRpbGl0aWVzLgogCiAj
aW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0jaW5jbHVkZSAiY29tbW9uL3N5c3RlbS5oIgorI2lu
Y2x1ZGUgPHN0ZGFyZy5oPgorCisjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfUEVSRikKICNpbmNs
dWRlIDxkM2Q5Lmg+CisjZW5kaWYKIAogbmFtZXNwYWNlIGdsCiB7Ci0KKyNpZiBkZWZpbmVkKEFO
R0xFX0VOQUJMRV9QRVJGKQogdHlwZWRlZiB2b2lkIChXSU5BUEkgKlBlcmZPdXRwdXRGdW5jdGlv
bikoRDNEQ09MT1IsIExQQ1dTVFIpOworI2Vsc2UKK3R5cGVkZWYgdm9pZCAoKlBlcmZPdXRwdXRG
dW5jdGlvbikodW5zaWduZWQgaW50LCBjb25zdCB3Y2hhcl90Kik7CisjZW5kaWYKIAogc3RhdGlj
IHZvaWQgb3V0cHV0KGJvb2wgdHJhY2VGaWxlRGVidWdPbmx5LCBQZXJmT3V0cHV0RnVuY3Rpb24g
cGVyZkZ1bmMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCB2YXJhcmcpCiB7Ci0jaWYgIWRl
ZmluZWQoQU5HTEVfRElTQUJMRV9QRVJGKQorI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX1BFUkYp
CiAgICAgaWYgKHBlcmZBY3RpdmUoKSkKICAgICB7CiAgICAgICAgIGNoYXIgbWVzc2FnZVszMjc2
OF07CkBAIC0zNywxNSArNDMsMTUgQEAgc3RhdGljIHZvaWQgb3V0cHV0KGJvb2wgdHJhY2VGaWxl
RGVidWdPbmx5LCBQZXJmT3V0cHV0RnVuY3Rpb24gcGVyZkZ1bmMsIGNvbnN0IGMKIAogICAgICAg
ICBwZXJmRnVuYygwLCB3aWRlTWVzc2FnZSk7CiAgICAgfQotI2VuZGlmCisjZW5kaWYgLy8gQU5H
TEVfRU5BQkxFX1BFUkYKIAotI2lmICFkZWZpbmVkKEFOR0xFX0RJU0FCTEVfVFJBQ0UpCisjaWYg
ZGVmaW5lZChBTkdMRV9FTkFCTEVfVFJBQ0UpCiAjaWYgZGVmaW5lZChOREVCVUcpCiAgICAgaWYg
KHRyYWNlRmlsZURlYnVnT25seSkKICAgICB7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0jZW5k
aWYKKyNlbmRpZiAvLyBOREVCVUcKIAogICAgIEZJTEUqIGZpbGUgPSBmb3BlbihUUkFDRV9PVVRQ
VVRfRklMRSwgImEiKTsKICAgICBpZiAoZmlsZSkKQEAgLTUzLDUwICs1OSw1MCBAQCBzdGF0aWMg
dm9pZCBvdXRwdXQoYm9vbCB0cmFjZUZpbGVEZWJ1Z09ubHksIFBlcmZPdXRwdXRGdW5jdGlvbiBw
ZXJmRnVuYywgY29uc3QgYwogICAgICAgICB2ZnByaW50ZihmaWxlLCBmb3JtYXQsIHZhcmFyZyk7
CiAgICAgICAgIGZjbG9zZShmaWxlKTsKICAgICB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBBTkdMRV9F
TkFCTEVfVFJBQ0UKIH0KIAogdm9pZCB0cmFjZShib29sIHRyYWNlRmlsZURlYnVnT25seSwgY29u
c3QgY2hhciAqZm9ybWF0LCAuLi4pCiB7CiAgICAgdmFfbGlzdCB2YXJhcmc7CiAgICAgdmFfc3Rh
cnQodmFyYXJnLCBmb3JtYXQpOwotI2lmIGRlZmluZWQoQU5HTEVfRElTQUJMRV9QRVJGKQotICAg
IG91dHB1dCh0cmFjZUZpbGVEZWJ1Z09ubHksIE5VTEwsIGZvcm1hdCwgdmFyYXJnKTsKLSNlbHNl
CisjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfUEVSRikKICAgICBvdXRwdXQodHJhY2VGaWxlRGVi
dWdPbmx5LCBEM0RQRVJGX1NldE1hcmtlciwgZm9ybWF0LCB2YXJhcmcpOworI2Vsc2UKKyAgICBv
dXRwdXQodHJhY2VGaWxlRGVidWdPbmx5LCBOVUxMLCBmb3JtYXQsIHZhcmFyZyk7CiAjZW5kaWYK
ICAgICB2YV9lbmQodmFyYXJnKTsKIH0KIAogYm9vbCBwZXJmQWN0aXZlKCkKIHsKLSNpZiBkZWZp
bmVkKEFOR0xFX0RJU0FCTEVfUEVSRikKLSAgICByZXR1cm4gZmFsc2U7Ci0jZWxzZQorI2lmIGRl
ZmluZWQoQU5HTEVfRU5BQkxFX1BFUkYpCiAgICAgc3RhdGljIGJvb2wgYWN0aXZlID0gRDNEUEVS
Rl9HZXRTdGF0dXMoKSAhPSAwOwogICAgIHJldHVybiBhY3RpdmU7CisjZWxzZQorICAgIHJldHVy
biBmYWxzZTsKICNlbmRpZgogfQogCiBTY29wZWRQZXJmRXZlbnRIZWxwZXI6OlNjb3BlZFBlcmZF
dmVudEhlbHBlcihjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikKIHsKLSNpZiAhZGVmaW5lZChBTkdM
RV9ESVNBQkxFX1BFUkYpCi0jaWYgZGVmaW5lZChBTkdMRV9ESVNBQkxFX1RSQUNFKQorI2lmIGRl
ZmluZWQoQU5HTEVfRU5BQkxFX1BFUkYpCisjaWYgIWRlZmluZWQoQU5HTEVfRU5BQkxFX1RSQUNF
KQogICAgIGlmICghcGVyZkFjdGl2ZSgpKQogICAgIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSNlbmRpZgorI2VuZGlmIC8vICFBTkdMRV9FTkFCTEVfVFJBQ0UKICAgICB2YV9saXN0IHZhcmFy
ZzsKICAgICB2YV9zdGFydCh2YXJhcmcsIGZvcm1hdCk7CiAgICAgb3V0cHV0KHRydWUsIHJlaW50
ZXJwcmV0X2Nhc3Q8UGVyZk91dHB1dEZ1bmN0aW9uPihEM0RQRVJGX0JlZ2luRXZlbnQpLCBmb3Jt
YXQsIHZhcmFyZyk7CiAgICAgdmFfZW5kKHZhcmFyZyk7Ci0jZW5kaWYKKyNlbmRpZiAvLyBBTkdM
RV9FTkFCTEVfUEVSRgogfQogCiBTY29wZWRQZXJmRXZlbnRIZWxwZXI6On5TY29wZWRQZXJmRXZl
bnRIZWxwZXIoKQogewotI2lmICFkZWZpbmVkKEFOR0xFX0RJU0FCTEVfUEVSRikKKyNpZiBkZWZp
bmVkKEFOR0xFX0VOQUJMRV9QRVJGKQogICAgIGlmIChwZXJmQWN0aXZlKCkpCiAgICAgewogICAg
ICAgICBEM0RQRVJGX0VuZEV2ZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tbW9uL2RlYnVnLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL2RlYnVnLmgKaW5kZXggMDYwYjcyNzJlYjNjMDEyMTc1MDdlYzA0NzY2MGIxZjFkZTM2ZTc4
NS4uNzkzODQzODk1YzBiMDk3ODZiZjU4NDFlNDMyMWE1Y2IwZGIzZTI4MSAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuaApAQCAtMzksMzMgKzM5LDM1IEBAIG5h
bWVzcGFjZSBnbAogfQogCiAvLyBBIG1hY3JvIHRvIG91dHB1dCBhIHRyYWNlIG9mIGEgZnVuY3Rp
b24gY2FsbCBhbmQgaXRzIGFyZ3VtZW50cyB0byB0aGUgZGVidWdnaW5nIGxvZwotI2lmIGRlZmlu
ZWQoQU5HTEVfRElTQUJMRV9UUkFDRSkgJiYgZGVmaW5lZChBTkdMRV9ESVNBQkxFX1BFUkYpCi0j
ZGVmaW5lIFRSQUNFKG1lc3NhZ2UsIC4uLikgKHZvaWQoMCkpCi0jZWxzZQorI2lmIGRlZmluZWQo
QU5HTEVfRU5BQkxFX1RSQUNFKSB8fCBkZWZpbmVkKEFOR0xFX0VOQUJMRV9QRVJGKQogI2RlZmlu
ZSBUUkFDRShtZXNzYWdlLCAuLi4pIGdsOjp0cmFjZSh0cnVlLCAidHJhY2U6ICVzKCVkKTogIiBt
ZXNzYWdlICJcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18sICMjX19WQV9BUkdTX18pCisjZWxz
ZQorI2RlZmluZSBUUkFDRShtZXNzYWdlLCAuLi4pICh2b2lkKDApKQogI2VuZGlmCiAKIC8vIEEg
bWFjcm8gdG8gb3V0cHV0IGEgZnVuY3Rpb24gY2FsbCBhbmQgaXRzIGFyZ3VtZW50cyB0byB0aGUg
ZGVidWdnaW5nIGxvZywgdG8gZGVub3RlIGFuIGl0ZW0gaW4gbmVlZCBvZiBmaXhpbmcuCi0jaWYg
ZGVmaW5lZChBTkdMRV9ESVNBQkxFX1RSQUNFKSAmJiBkZWZpbmVkKEFOR0xFX0RJU0FCTEVfUEVS
RikKLSNkZWZpbmUgRklYTUUobWVzc2FnZSwgLi4uKSAodm9pZCgwKSkKLSNlbHNlCisjaWYgZGVm
aW5lZChBTkdMRV9FTkFCTEVfVFJBQ0UpIHx8IGRlZmluZWQoQU5HTEVfRU5BQkxFX1BFUkYpCiAj
ZGVmaW5lIEZJWE1FKG1lc3NhZ2UsIC4uLikgZ2w6OnRyYWNlKGZhbHNlLCAiZml4bWU6ICVzKCVk
KTogIiBtZXNzYWdlICJcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18sICMjX19WQV9BUkdTX18p
CisjZWxzZQorI2RlZmluZSBGSVhNRShtZXNzYWdlLCAuLi4pICh2b2lkKDApKQogI2VuZGlmCiAK
IC8vIEEgbWFjcm8gdG8gb3V0cHV0IGEgZnVuY3Rpb24gY2FsbCBhbmQgaXRzIGFyZ3VtZW50cyB0
byB0aGUgZGVidWdnaW5nIGxvZywgaW4gY2FzZSBvZiBlcnJvci4KLSNpZiBkZWZpbmVkKEFOR0xF
X0RJU0FCTEVfVFJBQ0UpICYmIGRlZmluZWQoQU5HTEVfRElTQUJMRV9QRVJGKQotI2RlZmluZSBF
UlIobWVzc2FnZSwgLi4uKSAodm9pZCgwKSkKLSNlbHNlCisjaWYgZGVmaW5lZChBTkdMRV9FTkFC
TEVfVFJBQ0UpIHx8IGRlZmluZWQoQU5HTEVfRU5BQkxFX1BFUkYpCiAjZGVmaW5lIEVSUihtZXNz
YWdlLCAuLi4pIGdsOjp0cmFjZShmYWxzZSwgImVycjogJXMoJWQpOiAiIG1lc3NhZ2UgIlxuIiwg
X19GVU5DVElPTl9fLCBfX0xJTkVfXywgIyNfX1ZBX0FSR1NfXykKKyNlbHNlCisjZGVmaW5lIEVS
UihtZXNzYWdlLCAuLi4pICh2b2lkKDApKQogI2VuZGlmCiAKIC8vIEEgbWFjcm8gdG8gbG9nIGEg
cGVyZm9ybWFuY2UgZXZlbnQgYXJvdW5kIGEgc2NvcGUuCi0jaWYgZGVmaW5lZChBTkdMRV9ESVNB
QkxFX1RSQUNFKSAmJiBkZWZpbmVkKEFOR0xFX0RJU0FCTEVfUEVSRikKLSNkZWZpbmUgRVZFTlQo
bWVzc2FnZSwgLi4uKSAodm9pZCgwKSkKLSNlbGlmIGRlZmluZWQoX01TQ19WRVIpCisjaWYgZGVm
aW5lZChBTkdMRV9FTkFCTEVfVFJBQ0UpIHx8IGRlZmluZWQoQU5HTEVfRU5BQkxFX1BFUkYpCisj
aWYgZGVmaW5lZChfTVNDX1ZFUikKICNkZWZpbmUgRVZFTlQobWVzc2FnZSwgLi4uKSBnbDo6U2Nv
cGVkUGVyZkV2ZW50SGVscGVyIHNjb3BlZFBlcmZFdmVudEhlbHBlciAjIyBfX0xJTkVfXyhfX0ZV
TkNUSU9OX18gbWVzc2FnZSAiXG4iLCBfX1ZBX0FSR1NfXyk7CiAjZWxzZQogI2RlZmluZSBFVkVO
VChtZXNzYWdlLCAuLi4pIGdsOjpTY29wZWRQZXJmRXZlbnRIZWxwZXIgc2NvcGVkUGVyZkV2ZW50
SGVscGVyKG1lc3NhZ2UgIlxuIiwgIyNfX1ZBX0FSR1NfXyk7CisjZW5kaWYgLy8gX01TQ19WRVIK
KyNlbHNlCisjZGVmaW5lIEVWRU5UKG1lc3NhZ2UsIC4uLikgKHZvaWQoMCkpCiAjZW5kaWYKIAog
Ly8gQSBtYWNybyBhc3NlcnRpbmcgYSBjb25kaXRpb24gYW5kIG91dHB1dHRpbmcgZmFpbHVyZXMg
dG8gdGhlIGRlYnVnIGxvZwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbW1vbi9ldmVudF90cmFjZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bW1vbi9ldmVudF90cmFjZXIuY3BwCmluZGV4IDk2Y2JiMDEwNjE0Y2U5NmM3ZjUwYWI2ZjAzYWNj
YmJmZjI1YTUzOWMuLjE0MjM3M2QxM2YyNDhiNzA0YWM0OGY3MGUxYmY1NmQ2YzNlODAwMGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZXZlbnRfdHJhY2Vy
LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2V2ZW50X3RyYWNl
ci5jcHAKQEAgLTE0LDcgKzE0LDcgQEAgQWRkVHJhY2VFdmVudEZ1bmMgZ19hZGRUcmFjZUV2ZW50
OwogCiBleHRlcm4gIkMiIHsKIAotdm9pZCBfX3N0ZGNhbGwgU2V0VHJhY2VGdW5jdGlvblBvaW50
ZXJzKEdldENhdGVnb3J5RW5hYmxlZEZsYWdGdW5jIGdldENhdGVnb3J5RW5hYmxlZEZsYWcsCit2
b2lkIFRSQUNFX0VOVFJZIFNldFRyYWNlRnVuY3Rpb25Qb2ludGVycyhHZXRDYXRlZ29yeUVuYWJs
ZWRGbGFnRnVuYyBnZXRDYXRlZ29yeUVuYWJsZWRGbGFnLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFkZFRyYWNlRXZlbnRGdW5jIGFkZFRyYWNlRXZlbnQpCiB7CiAg
ICAgZ2w6OmdfZ2V0Q2F0ZWdvcnlFbmFibGVkRmxhZyA9IGdldENhdGVnb3J5RW5hYmxlZEZsYWc7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2V2ZW50X3Ry
YWNlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9ldmVudF90cmFjZXIu
aAppbmRleCBhZTM5N2U3ZGI5OWFhYmU0M2E4YWU1ZGU3MDljNWNmOWVjZDJhZjE4Li4xNGI3YjI5
OGZkODQ3Y2RiYTUyMTZjMjQzZGE3NWFiYjM5MzEwNTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2V2ZW50X3RyYWNlci5oCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZXZlbnRfdHJhY2VyLmgKQEAgLTUsNiArNSwxNCBAQAog
I2lmbmRlZiBDT01NT05fRVZFTlRfVFJBQ0VSX0hfCiAjZGVmaW5lIENPTU1PTl9FVkVOVF9UUkFD
RVJfSF8KIAorI2lmICFkZWZpbmVkKFRSQUNFX0VOVFJZKQorI2lmIGRlZmluZWQoX1dJTjMyKQor
I2RlZmluZSBUUkFDRV9FTlRSWSBfX3N0ZGNhbGwKKyNlbHNlCisjZGVmaW5lIFRSQUNFX0VOVFJZ
CisjZW5kaWYgLy8gLy8gX1dJTjMyCisjZW5kaWYgLy9UUkFDRV9FTlRSWQorCiBleHRlcm4gIkMi
IHsKIAogdHlwZWRlZiBjb25zdCB1bnNpZ25lZCBjaGFyKiAoKkdldENhdGVnb3J5RW5hYmxlZEZs
YWdGdW5jKShjb25zdCBjaGFyKiBuYW1lKTsKQEAgLTE0LDggKzIyLDggQEAgdHlwZWRlZiB2b2lk
ICgqQWRkVHJhY2VFdmVudEZ1bmMpKGNoYXIgcGhhc2UsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNh
dGVnb3J5R3JvdXAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBj
aGFyIGZsYWdzKTsKIAogLy8gZXh0ZXJuICJDIiBzbyB0aGF0IGl0IGhhcyBhIHJlYXNvbmFibGUg
bmFtZSBmb3IgR2V0UHJvY0FkZHJlc3MuCi12b2lkIF9fc3RkY2FsbCBTZXRUcmFjZUZ1bmN0aW9u
UG9pbnRlcnMoR2V0Q2F0ZWdvcnlFbmFibGVkRmxhZ0Z1bmMgZ2V0X2NhdGVnb3J5X2VuYWJsZWRf
ZmxhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRUcmFjZUV2
ZW50RnVuYyBhZGRfdHJhY2VfZXZlbnRfZnVuYyk7Cit2b2lkIFRSQUNFX0VOVFJZIFNldFRyYWNl
RnVuY3Rpb25Qb2ludGVycyhHZXRDYXRlZ29yeUVuYWJsZWRGbGFnRnVuYyBnZXRfY2F0ZWdvcnlf
ZW5hYmxlZF9mbGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QWRkVHJhY2VFdmVudEZ1bmMgYWRkX3RyYWNlX2V2ZW50X2Z1bmMpOwogCiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdmVyc2lvbi5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgKaW5kZXggOWYyMjFmM2FjYzFm
MmFlMzkwZTc2YzgzMmQ5MjUwMWQzYWE4NzQ3Yi4uZjZhZTE5ZjU0MWMyNjExMWJiZGU2ZjMxMzc4
OGI5YmJkZjhmNGE5NSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bW1vbi92ZXJzaW9uLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi92
ZXJzaW9uLmgKQEAgLTEsMTIgKzEsMTIgQEAKLSNkZWZpbmUgTUFKT1JfVkVSU0lPTiAxCi0jZGVm
aW5lIE1JTk9SX1ZFUlNJT04gMgotI2RlZmluZSBCVUlMRF9WRVJTSU9OIDAKLSNkZWZpbmUgQlVJ
TERfUkVWSVNJT04gMjQ1MAorI2luY2x1ZGUgImNvbW1pdC5oIgogCi0jZGVmaW5lIFNUUklOR0lG
WSh4KSAjeAotI2RlZmluZSBNQUNST19TVFJJTkdJRlkoeCkgU1RSSU5HSUZZKHgpCisjZGVmaW5l
IEFOR0xFX01BSk9SX1ZFUlNJT04gMQorI2RlZmluZSBBTkdMRV9NSU5PUl9WRVJTSU9OIDMKIAot
I2RlZmluZSBSRVZJU0lPTl9TVFJJTkcgTUFDUk9fU1RSSU5HSUZZKEJVSUxEX1JFVklTSU9OKQot
I2RlZmluZSBWRVJTSU9OX1NUUklORyBNQUNST19TVFJJTkdJRlkoTUFKT1JfVkVSU0lPTikgIi4i
IE1BQ1JPX1NUUklOR0lGWShNSU5PUl9WRVJTSU9OKSAiLiIgTUFDUk9fU1RSSU5HSUZZKEJVSUxE
X1ZFUlNJT04pICIuIiBNQUNST19TVFJJTkdJRlkoQlVJTERfUkVWSVNJT04pCisjZGVmaW5lIEFO
R0xFX1NUUklOR0lGWSh4KSAgICAgICAjeAorI2RlZmluZSBBTkdMRV9NQUNST19TVFJJTkdJRlko
eCkgQU5HTEVfU1RSSU5HSUZZKHgpCiAKLSNkZWZpbmUgVkVSU0lPTl9EV09SRCAoKE1BSk9SX1ZF
UlNJT04gPDwgMjQpIHwgKE1JTk9SX1ZFUlNJT04gPDwgMTYpIHwgQlVJTERfUkVWSVNJT04pCisj
ZGVmaW5lIEFOR0xFX1ZFUlNJT05fU1RSSU5HICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
QU5HTEVfTUFDUk9fU1RSSU5HSUZZKEFOR0xFX01BSk9SX1ZFUlNJT04pICIuIiBcCisgICAgQU5H
TEVfTUFDUk9fU1RSSU5HSUZZKEFOR0xFX01JTk9SX1ZFUlNJT04pICIuIiBcCisgICAgQU5HTEVf
Q09NTUlUX0hBU0gKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci82NGJpdC1sZXhlci1zYWZldHkucGF0Y2ggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvNjRiaXQtbGV4ZXItc2FmZXR5LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA3YWY5MWY1NzY1MzQzMzdhZmY2ZmY3ZDZkZjQ3YWJjZGZjNmM2ZDFkLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci82NGJpdC1sZXhlci1zYWZldHkucGF0Y2gKKysrIC9kZXYv
bnVsbApAQCAtMSwxNzcgKzAsMCBAQAotLS0tIGEvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNw
cAotKysrIGIvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcAotQEAgLTY4LDYgKzY4LDcgQEAg
dHlwZWRlZiBpbnQxNl90IGZsZXhfaW50MTZfdDsKLSB0eXBlZGVmIHVpbnQxNl90IGZsZXhfdWlu
dDE2X3Q7Ci0gdHlwZWRlZiBpbnQzMl90IGZsZXhfaW50MzJfdDsKLSB0eXBlZGVmIHVpbnQzMl90
IGZsZXhfdWludDMyX3Q7Ci0rdHlwZWRlZiB1aW50NjRfdCBmbGV4X3VpbnQ2NF90OwotICNlbHNl
Ci0gdHlwZWRlZiBzaWduZWQgY2hhciBmbGV4X2ludDhfdDsKLSB0eXBlZGVmIHNob3J0IGludCBm
bGV4X2ludDE2X3Q7Ci1AQCAtMTkxLDYgKzE5MiwxMSBAQCB0eXBlZGVmIHZvaWQqIHl5c2Nhbl90
OwotIHR5cGVkZWYgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOwotICNl
bmRpZgotIAotKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpFX1QKLSsjZGVmaW5lIFlZX1RZUEVE
RUZfWVlfU0laRV9UCi0rdHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OwotKyNlbmRpZgotKwotICNk
ZWZpbmUgRU9CX0FDVF9DT05USU5VRV9TQ0FOIDAKLSAjZGVmaW5lIEVPQl9BQ1RfRU5EX09GX0ZJ
TEUgMQotICNkZWZpbmUgRU9CX0FDVF9MQVNUX01BVENIIDIKLUBAIC0yMDQsNyArMjEwLDcgQEAg
dHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7Ci0gICAgICAq
LwotICAgICAjZGVmaW5lICBZWV9MRVNTX0xJTkVOTyhuKSBcCi0gICAgICAgICAgICAgZG8geyBc
Ci0tICAgICAgICAgICAgICAgIGludCB5eWw7XAotKyAgICAgICAgICAgICAgICB5eV9zaXplX3Qg
eXlsO1wKLSAgICAgICAgICAgICAgICAgZm9yICggeXlsID0gbjsgeXlsIDwgeXlsZW5nOyArK3l5
bCApXAotICAgICAgICAgICAgICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nIClcCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgLS15eWxpbmVubztcCi1AQCAtMjI2LDExICsyMzIsNiBA
QCB0eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFURTsKLSAKLSAj
ZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQoIGMsIHl5Zy0+eXl0ZXh0X3B0ciAsIHl5c2Nhbm5lciAp
Ci0gCi0tI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAotLSNkZWZpbmUgWVlfVFlQRURFRl9Z
WV9TSVpFX1QKLS10eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7Ci0tI2VuZGlmCi0tCi0gI2lmbmRl
ZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCi0gI2RlZmluZSBZWV9TVFJVQ1RfWVlfQlVGRkVS
X1NUQVRFCi0gc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQotQEAgLTI0OCw3ICsyNDksNyBAQCBzdHJ1
Y3QgeXlfYnVmZmVyX3N0YXRlCi0gCS8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5
eV9jaF9idWYsIG5vdCBpbmNsdWRpbmcgRU9CCi0gCSAqIGNoYXJhY3RlcnMuCi0gCSAqLwotLQlp
bnQgeXlfbl9jaGFyczsKLSsJeXlfc2l6ZV90IHl5X25fY2hhcnM7Ci0gCi0gCS8qIFdoZXRoZXIg
d2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwKLSAJICog
YW5kIGNhbiByZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNob3VsZCBmcmVlKCkgaXQgdG8K
LUBAIC0zMjcsNyArMzI4LDcgQEAgc3RhdGljIHZvaWQgeXlfaW5pdF9idWZmZXIgKFlZX0JVRkZF
Ul9TVEFURSBiLEZJTEUgKmZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotIAotIFlZX0JVRkZF
Ul9TVEFURSB5eV9zY2FuX2J1ZmZlciAoY2hhciAqYmFzZSx5eV9zaXplX3Qgc2l6ZSAseXlzY2Fu
X3QgeXlzY2FubmVyICk7Ci0gWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fc3RyaW5nICh5eWNvbnN0
IGNoYXIgKnl5X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0tWVlfQlVGRkVSX1NUQVRFIHl5
X3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMsaW50IGxlbiAseXlzY2FuX3QgeXlzY2Fu
bmVyICk7Ci0rWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0
ZXMseXlfc2l6ZV90IGxlbiAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gCi0gdm9pZCAqeXlhbGxv
YyAoeXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSB2b2lkICp5eXJlYWxsb2MgKHZv
aWQgKix5eV9zaXplX3QgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotQEAgLTM3OCw3ICszNzksNyBA
QCBzdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyIG1zZ1tdICx5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKLSAgKi8KLSAjZGVmaW5lIFlZX0RPX0JFRk9SRV9BQ1RJT04gXAotIAl5
eWctPnl5dGV4dF9wdHIgPSB5eV9icDsgXAotLQl5eWxlbmcgPSAoc2l6ZV90KSAoeXlfY3AgLSB5
eV9icCk7IFwKLSsJeXlsZW5nID0gKHl5X3NpemVfdCkgKHl5X2NwIC0geXlfYnApOyBcCi0gCXl5
Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2NwOyBcCi0gCSp5eV9jcCA9ICdcMCc7IFwKLSAJeXlnLT55
eV9jX2J1Zl9wID0geXlfY3A7Ci1AQCAtMTAzNSw4ICsxMDM2LDggQEAgc3RydWN0IHl5Z3V0c190
Ci0gICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfbWF4OyAvKio8IGNhcGFjaXR5IG9mIHN0YWNr
LiAqLwotICAgICBZWV9CVUZGRVJfU1RBVEUgKiB5eV9idWZmZXJfc3RhY2s7IC8qKjwgU3RhY2sg
YXMgYW4gYXJyYXkuICovCi0gICAgIGNoYXIgeXlfaG9sZF9jaGFyOwotLSAgICBpbnQgeXlfbl9j
aGFyczsKLS0gICAgaW50IHl5bGVuZ19yOwotKyAgICB5eV9zaXplX3QgeXlfbl9jaGFyczsKLSsg
ICAgeXlfc2l6ZV90IHl5bGVuZ19yOwotICAgICBjaGFyICp5eV9jX2J1Zl9wOwotICAgICBpbnQg
eXlfaW5pdDsKLSAgICAgaW50IHl5X3N0YXJ0OwotQEAgLTEwODksNyArMTA5MCw3IEBAIEZJTEUg
Knl5Z2V0X291dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gCi0gdm9pZCB5eXNldF9vdXQgIChG
SUxFICogb3V0X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gCi0taW50IHl5Z2V0X2xlbmcg
KHl5c2Nhbl90IHl5c2Nhbm5lciApOwotK3l5X3NpemVfdCB5eWdldF9sZW5nICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKLSAKLSBjaGFyICp5eWdldF90ZXh0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
LSAKLUBAIC0xMTU4LDcgKzExNTksNyBAQCBzdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKLSAJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0
aXZlICkgXAotIAkJeyBcCi0gCQlpbnQgYyA9ICcqJzsgXAotLQkJaW50IG47IFwKLSsJCXl5X3Np
emVfdCBuOyBcCi0gCQlmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKLSAJCQkgICAgIChj
ID0gZ2V0YyggeXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyArK24gKSBcCi0gCQkJYnVmW25d
ID0gKGNoYXIpIGM7IFwKLUBAIC0xMzE3LDcgKzEzMTgsNyBAQCB5eV9maW5kX2FjdGlvbjoKLSAK
LSAJCWlmICggeXlfYWN0ICE9IFlZX0VORF9PRl9CVUZGRVIgJiYgeXlfcnVsZV9jYW5fbWF0Y2hf
ZW9sW3l5X2FjdF0gKQotIAkJCXsKLS0JCQlpbnQgeXlsOwotKwkJCXl5X3NpemVfdCB5eWw7Ci0g
CQkJZm9yICggeXlsID0gMDsgeXlsIDwgeXlsZW5nOyArK3l5bCApCi0gCQkJCWlmICggeXl0ZXh0
W3l5bF0gPT0gJ1xuJyApCi0gCQkJCQkgICAKLUBAIC0yMjAzLDcgKzIyMDQsNyBAQCBzdGF0aWMg
aW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQotIAotIAllbHNlCi0g
CQl7Ci0tCQkJaW50IG51bV90b19yZWFkID0KLSsJCQl5eV9zaXplX3QgbnVtX3RvX3JlYWQgPQot
IAkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92
ZSAtIDE7Ci0gCi0gCQl3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQotQEAgLTIyMTcsNyArMjIx
OCw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIp
Ci0gCi0gCQkJaWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKLSAJCQkJewotLQkJCQlpbnQgbmV3
X3NpemUgPSBiLT55eV9idWZfc2l6ZSAqIDI7Ci0rCQkJCXl5X3NpemVfdCBuZXdfc2l6ZSA9IGIt
Pnl5X2J1Zl9zaXplICogMjsKLSAKLSAJCQkJaWYgKCBuZXdfc2l6ZSA8PSAwICkKLSAJCQkJCWIt
Pnl5X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsKLUBAIC0yMjQ4LDcgKzIyNDksNyBA
QCBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQotIAot
IAkJLyogUmVhZCBpbiBtb3JlIGRhdGEuICovCi0gCQlZWV9JTlBVVCggKCZZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2NoX2J1ZltudW1iZXJfdG9fbW92ZV0pLAotLQkJCXl5Zy0+eXlfbl9j
aGFycywgKHNpemVfdCkgbnVtX3RvX3JlYWQgKTsKLSsJCQl5eWctPnl5X25fY2hhcnMsIG51bV90
b19yZWFkICk7Ci0gCi0gCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5
eWctPnl5X25fY2hhcnM7Ci0gCQl9Ci1AQCAtMjM3Myw3ICsyMzc0LDcgQEAgc3RhdGljIGludCB5
eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLSAKLSAJCWVsc2UKLSAJCQl7
IC8qIG5lZWQgbW9yZSBpbnB1dCAqLwotLQkJCWludCBvZmZzZXQgPSB5eWctPnl5X2NfYnVmX3Ag
LSB5eWctPnl5dGV4dF9wdHI7Ci0rCQkJeXlfc2l6ZV90IG9mZnNldCA9IHl5Zy0+eXlfY19idWZf
cCAtIHl5Zy0+eXl0ZXh0X3B0cjsKLSAJCQkrK3l5Zy0+eXlfY19idWZfcDsKLSAKLSAJCQlzd2l0
Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKLUBAIC0yNjYwLDcgKzI2NjEs
NyBAQCB2b2lkIHl5cG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQotICAqLwot
IHN0YXRpYyB2b2lkIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyKQot
IHsKLS0JaW50IG51bV90b19hbGxvYzsKLSsJeXlfc2l6ZV90IG51bV90b19hbGxvYzsKLSAgICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotIAot
IAlpZiAoIXl5Zy0+eXlfYnVmZmVyX3N0YWNrKSB7Ci1AQCAtMjc1OCwxMiArMjc1OSwxMSBAQCBZ
WV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqIHl5c3RyICwgeXlz
Y2FuX3QgeXlzY2FubmVyKQotICAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0
LgotICAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0Lgot
ICAqLwotLVlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J5dGVzICAoeXljb25zdCBjaGFyICogeXli
eXRlcywgaW50ICBfeXlieXRlc19sZW4gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi0rWVlfQlVGRkVS
X1NUQVRFIHl5X3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCB5eV9zaXplX3Qg
IF95eWJ5dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLSB7Ci0gCVlZX0JVRkZFUl9TVEFU
RSBiOwotIAljaGFyICpidWY7Ci0tCXl5X3NpemVfdCBuOwotLQlpbnQgaTsKLSsJeXlfc2l6ZV90
IG4sIGk7Ci0gICAgIAotIAkvKiBHZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwgaW5jbHVkaW5n
IHNwYWNlIGZvciB0cmFpbGluZyBFT0Incy4gKi8KLSAJbiA9IF95eWJ5dGVzX2xlbiArIDI7Ci1A
QCAtMjkxMyw3ICsyOTEzLDcgQEAgRklMRSAqeXlnZXRfb3V0ICAoeXlzY2FuX3QgeXlzY2FubmVy
KQotIC8qKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudCB0b2tlbi4KLSAgKiBAcGFyYW0g
eXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAgKi8KLS1pbnQgeXlnZXRfbGVuZyAgKHl5
c2Nhbl90IHl5c2Nhbm5lcikKLSt5eV9zaXplX3QgeXlnZXRfbGVuZyAgKHl5c2Nhbl90IHl5c2Nh
bm5lcikKLSB7Ci0gICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsKLSAgICAgcmV0dXJuIHl5bGVuZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CYXNlVHlwZXMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9CYXNlVHlwZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMTYzMWY0Zjc3OWZhN2VmYTc5M2JkNjNhYWEyMWNjNWZjOTE4ZGZmMC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvQmFzZVR5cGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAs
MCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBfQkFTSUNUWVBFU19JTkNMVURFRF8K
LSNkZWZpbmUgX0JBU0lDVFlQRVNfSU5DTFVERURfCi0KLS8vCi0vLyBQcmVjaXNpb24gcXVhbGlm
aWVycwotLy8KLWVudW0gVFByZWNpc2lvbgotewotICAgIC8vIFRoZXNlIG5lZWQgdG8gYmUga2Vw
dCBzb3J0ZWQKLSAgICBFYnBVbmRlZmluZWQsCi0gICAgRWJwTG93LAotICAgIEVicE1lZGl1bSwK
LSAgICBFYnBIaWdoCi19OwotCi1pbmxpbmUgY29uc3QgY2hhciogZ2V0UHJlY2lzaW9uU3RyaW5n
KFRQcmVjaXNpb24gcCkKLXsKLSAgICBzd2l0Y2gocCkKLSAgICB7Ci0gICAgY2FzZSBFYnBIaWdo
OgkJcmV0dXJuICJoaWdocCI7CQlicmVhazsKLSAgICBjYXNlIEVicE1lZGl1bToJCXJldHVybiAi
bWVkaXVtcCI7CWJyZWFrOwotICAgIGNhc2UgRWJwTG93OgkJcmV0dXJuICJsb3dwIjsJCWJyZWFr
OwotICAgIGRlZmF1bHQ6CQkJcmV0dXJuICJtZWRpdW1wIjsgICBicmVhazsgICAvLyBTYWZlc3Qg
ZmFsbGJhY2sKLSAgICB9Ci19Ci0KLS8vCi0vLyBCYXNpYyB0eXBlLiAgQXJyYXlzLCB2ZWN0b3Jz
LCBldGMuLCBhcmUgb3J0aG9nb25hbCB0byB0aGlzLgotLy8KLWVudW0gVEJhc2ljVHlwZQotewot
ICAgIEVidFZvaWQsCi0gICAgRWJ0RmxvYXQsCi0gICAgRWJ0SW50LAotICAgIEVidEJvb2wsCi0g
ICAgRWJ0R3VhcmRTYW1wbGVyQmVnaW4sICAvLyBub24gdHlwZTogIHNlZSBpbXBsZW1lbnRhdGlv
biBvZiBJc1NhbXBsZXIoKQotICAgIEVidFNhbXBsZXIyRCwKLSAgICBFYnRTYW1wbGVyQ3ViZSwK
LSAgICBFYnRTYW1wbGVyRXh0ZXJuYWxPRVMsICAvLyBPbmx5IHZhbGlkIGlmIE9FU19FR0xfaW1h
Z2VfZXh0ZXJuYWwgZXhpc3RzLgotICAgIEVidFNhbXBsZXIyRFJlY3QsICAgICAgIC8vIE9ubHkg
dmFsaWQgaWYgR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlIGV4aXN0cy4KLSAgICBFYnRHdWFyZFNh
bXBsZXJFbmQsICAgIC8vIG5vbiB0eXBlOiAgc2VlIGltcGxlbWVudGF0aW9uIG9mIElzU2FtcGxl
cigpCi0gICAgRWJ0U3RydWN0LAotICAgIEVidEFkZHJlc3MsICAgICAgICAgICAgLy8gc2hvdWxk
IGJlIGRlcHJlY2F0ZWQ/PwotICAgIEVidEludmFyaWFudCAgICAgICAgICAvLyB1c2VkIGFzIGEg
dHlwZSB3aGVuIHF1YWxpZnlpbmcgYSBwcmV2aW91c2x5IGRlY2xhcmVkIHZhcmlhYmxlIGFzIGJl
aW5nIGludmFyaWFudAotfTsKLQotaW5saW5lIGNvbnN0IGNoYXIqIGdldEJhc2ljU3RyaW5nKFRC
YXNpY1R5cGUgdCkKLXsKLSAgICBzd2l0Y2ggKHQpCi0gICAgewotICAgIGNhc2UgRWJ0Vm9pZDog
ICAgICAgICAgICAgIHJldHVybiAidm9pZCI7ICAgICAgICAgICAgICBicmVhazsKLSAgICBjYXNl
IEVidEZsb2F0OiAgICAgICAgICAgICByZXR1cm4gImZsb2F0IjsgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBFYnRJbnQ6ICAgICAgICAgICAgICAgcmV0dXJuICJpbnQiOyAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0Qm9vbDogICAgICAgICAgICAgIHJldHVybiAiYm9vbCI7
ICAgICAgICAgICAgICBicmVhazsKLSAgICBjYXNlIEVidFNhbXBsZXIyRDogICAgICAgICByZXR1
cm4gInNhbXBsZXIyRCI7ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRTYW1wbGVyQ3ViZTog
ICAgICAgcmV0dXJuICJzYW1wbGVyQ3ViZSI7ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0U2Ft
cGxlckV4dGVybmFsT0VTOiByZXR1cm4gInNhbXBsZXJFeHRlcm5hbE9FUyI7IGJyZWFrOwotICAg
IGNhc2UgRWJ0U2FtcGxlcjJEUmVjdDogICAgIHJldHVybiAic2FtcGxlcjJEUmVjdCI7ICAgICBi
cmVhazsKLSAgICBjYXNlIEVidFN0cnVjdDogICAgICAgICAgICByZXR1cm4gInN0cnVjdHVyZSI7
ICAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgcmV0dXJuICJ1
bmtub3duIHR5cGUiOwotICAgIH0KLX0KLQotaW5saW5lIGJvb2wgSXNTYW1wbGVyKFRCYXNpY1R5
cGUgdHlwZSkKLXsKLSAgICByZXR1cm4gdHlwZSA+IEVidEd1YXJkU2FtcGxlckJlZ2luICYmIHR5
cGUgPCBFYnRHdWFyZFNhbXBsZXJFbmQ7Ci19Ci0KLS8vCi0vLyBRdWFsaWZpZXJzIGFuZCBidWls
dC1pbnMuICBUaGVzZSBhcmUgbWFpbmx5IHVzZWQgdG8gc2VlIHdoYXQgY2FuIGJlIHJlYWQKLS8v
IG9yIHdyaXR0ZW4sIGFuZCBieSB0aGUgbWFjaGluZSBkZXBlbmRlbnQgdHJhbnNsYXRvciB0byBr
bm93IHdoaWNoIHJlZ2lzdGVycwotLy8gdG8gYWxsb2NhdGUgdmFyaWFibGVzIGluLiAgU2luY2Ug
YnVpbHQtaW5zIHRlbmQgdG8gZ28gdG8gZGlmZmVyZW50IHJlZ2lzdGVycwotLy8gdGhhbiB2YXJ5
aW5nIG9yIHVuaWZvcm0sIGl0IG1ha2VzIHNlbnNlIHRoZXkgYXJlIHBlZXJzLCBub3Qgc3ViLWNs
YXNzZXMuCi0vLwotZW51bSBUUXVhbGlmaWVyCi17Ci0gICAgRXZxVGVtcG9yYXJ5LCAgICAgLy8g
Rm9yIHRlbXBvcmFyaWVzICh3aXRoaW4gYSBmdW5jdGlvbiksIHJlYWQvd3JpdGUKLSAgICBFdnFH
bG9iYWwsICAgICAgICAvLyBGb3IgZ2xvYmFscyByZWFkL3dyaXRlCi0gICAgRXZxQ29uc3QsICAg
ICAgICAgLy8gVXNlciBkZWZpbmVkIGNvbnN0YW50cyBhbmQgbm9uLW91dHB1dCBwYXJhbWV0ZXJz
IGluIGZ1bmN0aW9ucwotICAgIEV2cUF0dHJpYnV0ZSwgICAgIC8vIFJlYWRvbmx5Ci0gICAgRXZx
VmFyeWluZ0luLCAgICAgLy8gcmVhZG9ubHksIGZyYWdtZW50IHNoYWRlcnMgb25seQotICAgIEV2
cVZhcnlpbmdPdXQsICAgIC8vIHZlcnRleCBzaGFkZXJzIG9ubHkgIHJlYWQvd3JpdGUKLSAgICBF
dnFJbnZhcmlhbnRWYXJ5aW5nSW4sICAgICAvLyByZWFkb25seSwgZnJhZ21lbnQgc2hhZGVycyBv
bmx5Ci0gICAgRXZxSW52YXJpYW50VmFyeWluZ091dCwgICAgLy8gdmVydGV4IHNoYWRlcnMgb25s
eSAgcmVhZC93cml0ZQotICAgIEV2cVVuaWZvcm0sICAgICAgIC8vIFJlYWRvbmx5LCB2ZXJ0ZXgg
YW5kIGZyYWdtZW50Ci0KLSAgICAvLyBwYXJhbWV0ZXJzCi0gICAgRXZxSW4sCi0gICAgRXZxT3V0
LAotICAgIEV2cUluT3V0LAotICAgIEV2cUNvbnN0UmVhZE9ubHksCi0KLSAgICAvLyBidWlsdC1p
bnMgd3JpdHRlbiBieSB2ZXJ0ZXggc2hhZGVyCi0gICAgRXZxUG9zaXRpb24sCi0gICAgRXZxUG9p
bnRTaXplLAotCi0gICAgLy8gYnVpbHQtaW5zIHJlYWQgYnkgZnJhZ21lbnQgc2hhZGVyCi0gICAg
RXZxRnJhZ0Nvb3JkLAotICAgIEV2cUZyb250RmFjaW5nLAotICAgIEV2cVBvaW50Q29vcmQsCi0K
LSAgICAvLyBidWlsdC1pbnMgd3JpdHRlbiBieSBmcmFnbWVudCBzaGFkZXIKLSAgICBFdnFGcmFn
Q29sb3IsCi0gICAgRXZxRnJhZ0RhdGEsCi0gICAgRXZxRnJhZ0RlcHRoLAotCi0gICAgLy8gZW5k
IG9mIGxpc3QKLSAgICBFdnFMYXN0Ci19OwotCi0vLwotLy8gVGhpcyBpcyBqdXN0IGZvciBkZWJ1
ZyBwcmludCBvdXQsIGNhcnJpZWQgYWxvbmcgd2l0aCB0aGUgZGVmaW5pdGlvbnMgYWJvdmUuCi0v
LwotaW5saW5lIGNvbnN0IGNoYXIqIGdldFF1YWxpZmllclN0cmluZyhUUXVhbGlmaWVyIHEpCi17
Ci0gICAgc3dpdGNoKHEpCi0gICAgewotICAgIGNhc2UgRXZxVGVtcG9yYXJ5OiAgICAgIHJldHVy
biAiVGVtcG9yYXJ5IjsgICAgICBicmVhazsKLSAgICBjYXNlIEV2cUdsb2JhbDogICAgICAgICBy
ZXR1cm4gIkdsb2JhbCI7ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFDb25zdDogICAgICAg
ICAgcmV0dXJuICJjb25zdCI7ICAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXZxQ29uc3RSZWFk
T25seTogIHJldHVybiAiY29uc3QiOyAgICAgICAgICBicmVhazsKLSAgICBjYXNlIEV2cUF0dHJp
YnV0ZTogICAgICByZXR1cm4gImF0dHJpYnV0ZSI7ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFW
YXJ5aW5nSW46ICAgICAgcmV0dXJuICJ2YXJ5aW5nIjsgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
RXZxVmFyeWluZ091dDogICAgIHJldHVybiAidmFyeWluZyI7ICAgICAgICBicmVhazsKLSAgICBj
YXNlIEV2cUludmFyaWFudFZhcnlpbmdJbjogcmV0dXJuICJpbnZhcmlhbnQgdmFyeWluZyI7CWJy
ZWFrOwotICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWluZ091dDpyZXR1cm4gImludmFyaWFudCB2
YXJ5aW5nIjsJYnJlYWs7Ci0gICAgY2FzZSBFdnFVbmlmb3JtOiAgICAgICAgcmV0dXJuICJ1bmlm
b3JtIjsgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXZxSW46ICAgICAgICAgICAgIHJldHVybiAi
aW4iOyAgICAgICAgICAgICBicmVhazsKLSAgICBjYXNlIEV2cU91dDogICAgICAgICAgICByZXR1
cm4gIm91dCI7ICAgICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFJbk91dDogICAgICAgICAg
cmV0dXJuICJpbm91dCI7ICAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXZxUG9zaXRpb246ICAg
ICAgIHJldHVybiAiUG9zaXRpb24iOyAgICAgICBicmVhazsKLSAgICBjYXNlIEV2cVBvaW50U2l6
ZTogICAgICByZXR1cm4gIlBvaW50U2l6ZSI7ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFGcmFn
Q29vcmQ6ICAgICAgcmV0dXJuICJGcmFnQ29vcmQiOyAgICAgIGJyZWFrOwotICAgIGNhc2UgRXZx
RnJvbnRGYWNpbmc6ICAgIHJldHVybiAiRnJvbnRGYWNpbmciOyAgICBicmVhazsKLSAgICBjYXNl
IEV2cUZyYWdDb2xvcjogICAgICByZXR1cm4gIkZyYWdDb2xvciI7ICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBFdnFGcmFnRGF0YTogICAgICAgcmV0dXJuICJGcmFnRGF0YSI7ICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBFdnFGcmFnRGVwdGg6ICAgICAgcmV0dXJuICJGcmFnRGVwdGgiOyAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDogICAgICAgICAgICAgICAgcmV0dXJuICJ1bmtub3duIHF1YWxpZmllciI7
Ci0gICAgfQotfQotCi0jZW5kaWYgLy8gX0JBU0lDVFlQRVNfSU5DTFVERURfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3IuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0J1aWx0SW5G
dW5jdGlvbkVtdWxhdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM0YjI1
ZjEzZjBjNjJmMGQxNDFjOGM2ZTVlZmU5Yzg2NDFiYTNlZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDA2
ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9CdWlsdElu
RnVuY3Rpb25FbXVsYXRvci5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvU3ltYm9sVGFibGUuaCIK
LQotbmFtZXNwYWNlIHsKLQotLy8gd2UgdXNlIG1hY3JvcyBoZXJlIGluc3RlYWQgb2YgZnVuY3Rp
b24gZGVmaW5pdGlvbnMgdG8gd29yayBhcm91bmQgbW9yZSBHTFNMCi0vLyBjb21waWxlciBidWdz
LCBpbiBwYXJ0aWN1bGFyIG9uIE5WSURJQSBoYXJkd2FyZSBvbiBNYWMgT1NYLiBNYWNyb3MgYXJl
Ci0vLyBwcm9ibGVtYXRpYyBiZWNhdXNlIGlmIHRoZSBhcmd1bWVudCBoYXMgc2lkZS1lZmZlY3Rz
IHRoZXkgd2lsbCBiZSByZXBlYXRlZGx5Ci0vLyBldmFsdWF0ZWQuIFRoaXMgaXMgdW5saWtlbHkg
dG8gc2hvdyB1cCBpbiByZWFsIHNoYWRlcnMsIGJ1dCBpcyBzb21ldGhpbmcgdG8KLS8vIGNvbnNp
ZGVyLgotY29uc3QgY2hhcioga0Z1bmN0aW9uRW11bGF0aW9uVmVydGV4U291cmNlW10gPSB7Ci0g
ICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGNvcyhmbG9hdCkiLAotICAgICIjZXJyb3Igbm8g
ZW11bGF0aW9uIGZvciBjb3ModmVjMikiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBj
b3ModmVjMykiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBjb3ModmVjNCkiLAotCi0g
ICAgIiNkZWZpbmUgd2ViZ2xfZGlzdGFuY2VfZW11KHgsIHkpICgoeCkgPj0gKHkpID8gKHgpIC0g
KHkpIDogKHkpIC0gKHgpKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRpc3RhbmNl
KHZlYzIsIHZlYzIpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UodmVj
MywgdmVjMykiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkaXN0YW5jZSh2ZWM0LCB2
ZWM0KSIsCi0KLSAgICAiI2RlZmluZSB3ZWJnbF9kb3RfZW11KHgsIHkpICgoeCkgKiAoeSkpIiwK
LSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZG90KHZlYzIsIHZlYzIpIiwKLSAgICAiI2Vy
cm9yIG5vIGVtdWxhdGlvbiBmb3IgZG90KHZlYzMsIHZlYzMpIiwKLSAgICAiI2Vycm9yIG5vIGVt
dWxhdGlvbiBmb3IgZG90KHZlYzQsIHZlYzQpIiwKLQotICAgICIjZGVmaW5lIHdlYmdsX2xlbmd0
aF9lbXUoeCkgKCh4KSA+PSAwLjAgPyAoeCkgOiAtKHgpKSIsCi0gICAgIiNlcnJvciBubyBlbXVs
YXRpb24gZm9yIGxlbmd0aCh2ZWMyKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxl
bmd0aCh2ZWMzKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2ZWM0KSIs
Ci0KLSAgICAiI2RlZmluZSB3ZWJnbF9ub3JtYWxpemVfZW11KHgpICgoeCkgPT0gMC4wID8gMC4w
IDogKCh4KSA+IDAuMCA/IDEuMCA6IC0xLjApKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24g
Zm9yIG5vcm1hbGl6ZSh2ZWMyKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1h
bGl6ZSh2ZWMzKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2ZWM0
KSIsCi0KLSAgICAiI2RlZmluZSB3ZWJnbF9yZWZsZWN0X2VtdShJLCBOKSAoKEkpIC0gMi4wICog
KE4pICogKEkpICogKE4pKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIHJlZmxlY3Qo
dmVjMiwgdmVjMikiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciByZWZsZWN0KHZlYzMs
IHZlYzMpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgcmVmbGVjdCh2ZWM0LCB2ZWM0
KSIKLX07Ci0KLWNvbnN0IGNoYXIqIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50U291cmNlW10g
PSB7Ci0gICAgIndlYmdsX2VtdV9wcmVjaXNpb24gZmxvYXQgd2ViZ2xfY29zX2VtdSh3ZWJnbF9l
bXVfcHJlY2lzaW9uIGZsb2F0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCi0gICAgIndlYmdsX2Vt
dV9wcmVjaXNpb24gdmVjMiB3ZWJnbF9jb3NfZW11KHdlYmdsX2VtdV9wcmVjaXNpb24gdmVjMiBh
KSB7IHJldHVybiBjb3MoYSk7IH0iLAotICAgICJ3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzMgd2Vi
Z2xfY29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzMgYSkgeyByZXR1cm4gY29zKGEpOyB9
IiwKLSAgICAid2ViZ2xfZW11X3ByZWNpc2lvbiB2ZWM0IHdlYmdsX2Nvc19lbXUod2ViZ2xfZW11
X3ByZWNpc2lvbiB2ZWM0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCi0KLSAgICAiI2RlZmluZSB3
ZWJnbF9kaXN0YW5jZV9lbXUoeCwgeSkgKCh4KSA+PSAoeSkgPyAoeCkgLSAoeSkgOiAoeSkgLSAo
eCkpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UodmVjMiwgdmVjMiki
LAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkaXN0YW5jZSh2ZWMzLCB2ZWMzKSIsCi0g
ICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRpc3RhbmNlKHZlYzQsIHZlYzQpIiwKLQotICAg
ICIjZGVmaW5lIHdlYmdsX2RvdF9lbXUoeCwgeSkgKCh4KSAqICh5KSkiLAotICAgICIjZXJyb3Ig
bm8gZW11bGF0aW9uIGZvciBkb3QodmVjMiwgdmVjMikiLAotICAgICIjZXJyb3Igbm8gZW11bGF0
aW9uIGZvciBkb3QodmVjMywgdmVjMykiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBk
b3QodmVjNCwgdmVjNCkiLAotCi0gICAgIiNkZWZpbmUgd2ViZ2xfbGVuZ3RoX2VtdSh4KSAoKHgp
ID49IDAuMCA/ICh4KSA6IC0oeCkpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVu
Z3RoKHZlYzIpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3RoKHZlYzMpIiwK
LSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3RoKHZlYzQpIiwKLQotICAgICIjZGVm
aW5lIHdlYmdsX25vcm1hbGl6ZV9lbXUoeCkgKCh4KSA9PSAwLjAgPyAwLjAgOiAoKHgpID4gMC4w
ID8gMS4wIDogLTEuMCkpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXpl
KHZlYzIpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzMpIiwK
LSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzQpIiwKLQotICAgICIj
ZGVmaW5lIHdlYmdsX3JlZmxlY3RfZW11KEksIE4pICgoSSkgLSAyLjAgKiAoTikgKiAoSSkgKiAo
TikpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgcmVmbGVjdCh2ZWMyLCB2ZWMyKSIs
Ci0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIHJlZmxlY3QodmVjMywgdmVjMykiLAotICAg
ICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciByZWZsZWN0KHZlYzQsIHZlYzQpIgotfTsKLQotY29u
c3QgYm9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7Ci0jaWYgZGVmaW5lZChf
X0FQUExFX18pCi0gICAgLy8gV29yayBhcm91bmQgQVRJIGRyaXZlciBidWdzIGluIE1hYy4KLSAg
ICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMQotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MyCi0g
ICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczMKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zNAot
ICAgIHRydWUsICAvLyBURnVuY3Rpb25EaXN0YW5jZTFfMQotICAgIGZhbHNlLCAvLyBURnVuY3Rp
b25EaXN0YW5jZTJfMgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTNfMwotICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTRfNAotICAgIHRydWUsICAvLyBURnVuY3Rpb25Eb3Qx
XzEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90Ml8yCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlv
bkRvdDNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3Q0XzQKLSAgICB0cnVlLCAgLy8gVEZ1
bmN0aW9uTGVuZ3RoMQotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgyCi0gICAgZmFsc2Us
IC8vIFRGdW5jdGlvbkxlbmd0aDMKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoNAotICAg
IHRydWUsICAvLyBURnVuY3Rpb25Ob3JtYWxpemUxCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5v
cm1hbGl6ZTIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMwotICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25Ob3JtYWxpemU0Ci0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvblJlZmxlY3QxXzEK
LSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDJfMgotICAgIGZhbHNlLCAvLyBURnVuY3Rp
b25SZWZsZWN0M18zCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3Q0XzQKLSNlbHNlCi0g
ICAgLy8gV29yayBhcm91bmQgRDNEIGRyaXZlciBidWcgaW4gV2luLgotICAgIGZhbHNlLCAvLyBU
RnVuY3Rpb25Db3MxCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczIKLSAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uQ29zMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3M0Ci0gICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkRpc3RhbmNlMV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlMl8y
Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlM18zCi0gICAgZmFsc2UsIC8vIFRGdW5j
dGlvbkRpc3RhbmNlNF80Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDFfMQotICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25Eb3QyXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90M18zCi0gICAg
ZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDRfNAotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgx
Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
TGVuZ3RoMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0Ci0gICAgZmFsc2UsIC8vIFRG
dW5jdGlvbk5vcm1hbGl6ZTEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMgotICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUzCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5v
cm1hbGl6ZTQKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDFfMQotICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25SZWZsZWN0Ml8yCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QzXzMK
LSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDRfNAotI2VuZGlmCi0gICAgZmFsc2UgIC8v
IFRGdW5jdGlvblVua25vd24KLX07Ci0KLWNvbnN0IGJvb2wga0Z1bmN0aW9uRW11bGF0aW9uRnJh
Z21lbnRNYXNrW10gPSB7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0gICAgLy8gV29yayBhcm91
bmQgQVRJIGRyaXZlciBidWdzIGluIE1hYy4KLSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uQ29zMQot
ICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3MyCi0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczMK
LSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uQ29zNAotICAgIHRydWUsICAvLyBURnVuY3Rpb25EaXN0
YW5jZTFfMQotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTJfMgotICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25EaXN0YW5jZTNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTRf
NAotICAgIHRydWUsICAvLyBURnVuY3Rpb25Eb3QxXzEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
RG90Ml8yCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDNfMwotICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25Eb3Q0XzQKLSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uTGVuZ3RoMQotICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25MZW5ndGgyCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDMKLSAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoNAotICAgIHRydWUsICAvLyBURnVuY3Rpb25Ob3JtYWxp
emUxCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTIKLSAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uTm9ybWFsaXplMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemU0Ci0gICAg
dHJ1ZSwgIC8vIFRGdW5jdGlvblJlZmxlY3QxXzEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVm
bGVjdDJfMgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0M18zCi0gICAgZmFsc2UsIC8v
IFRGdW5jdGlvblJlZmxlY3Q0XzQKLSNlbHNlCi0gICAgLy8gV29yayBhcm91bmQgRDNEIGRyaXZl
ciBidWcgaW4gV2luLgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MxCi0gICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkNvczIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMwotICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25Db3M0Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlMV8xCi0gICAg
ZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlMl8yCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRp
c3RhbmNlM18zCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlNF80Ci0gICAgZmFsc2Us
IC8vIFRGdW5jdGlvbkRvdDFfMQotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3QyXzIKLSAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uRG90M18zCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDRfNAot
ICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgxCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxl
bmd0aDIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMwotICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25MZW5ndGg0Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTEKLSAgICBmYWxz
ZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxp
emUzCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTQKLSAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uUmVmbGVjdDFfMQotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0Ml8yCi0gICAg
ZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QzXzMKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVm
bGVjdDRfNAotI2VuZGlmCi0gICAgZmFsc2UgIC8vIFRGdW5jdGlvblVua25vd24KLX07Ci0KLWNs
YXNzIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdGlvbk1hcmtlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVy
c2VyIHsKLXB1YmxpYzoKLSAgICBCdWlsdEluRnVuY3Rpb25FbXVsYXRpb25NYXJrZXIoQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0b3ImIGVtdWxhdG9yKQotICAgICAgICA6IG1FbXVsYXRvcihlbXVsYXRv
cikKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlz
aXQsIFRJbnRlcm1VbmFyeSogbm9kZSkKLSAgICB7Ci0gICAgICAgIGlmICh2aXNpdCA9PSBQcmVW
aXNpdCkgewotICAgICAgICAgICAgYm9vbCBuZWVkVG9FbXVsYXRlID0gbUVtdWxhdG9yLlNldEZ1
bmN0aW9uQ2FsbGVkKAotICAgICAgICAgICAgICAgIG5vZGUtPmdldE9wKCksIG5vZGUtPmdldE9w
ZXJhbmQoKS0+Z2V0VHlwZSgpKTsKLSAgICAgICAgICAgIGlmIChuZWVkVG9FbXVsYXRlKQotICAg
ICAgICAgICAgICAgIG5vZGUtPnNldFVzZUVtdWxhdGVkRnVuY3Rpb24oKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dy
ZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCi0gICAgewotICAgICAg
ICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpIHsKLSAgICAgICAgICAgIC8vIEhlcmUgd2UgaGFuZGxl
IGFsbCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zIGluc3RlYWQgb2YgdGhlIG9uZXMgd2UKLSAgICAg
ICAgICAgIC8vIGN1cnJlbnRseSBpZGVudGlmaWVkIGFzIHByb2JsZW1hdGljLgotICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BMZXNz
VGhhbjoKLSAgICAgICAgICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgotICAgICAgICAgICAg
ICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoKLSAgICAgICAgICAgICAgICBjYXNlIEVPcEdyZWF0
ZXJUaGFuRXF1YWw6Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BWZWN0b3JFcXVhbDoKLSAgICAg
ICAgICAgICAgICBjYXNlIEVPcFZlY3Rvck5vdEVxdWFsOgotICAgICAgICAgICAgICAgIGNhc2Ug
RU9wTW9kOgotICAgICAgICAgICAgICAgIGNhc2UgRU9wUG93OgotICAgICAgICAgICAgICAgIGNh
c2UgRU9wQXRhbjoKLSAgICAgICAgICAgICAgICBjYXNlIEVPcE1pbjoKLSAgICAgICAgICAgICAg
ICBjYXNlIEVPcE1heDoKLSAgICAgICAgICAgICAgICBjYXNlIEVPcENsYW1wOgotICAgICAgICAg
ICAgICAgIGNhc2UgRU9wTWl4OgotICAgICAgICAgICAgICAgIGNhc2UgRU9wU3RlcDoKLSAgICAg
ICAgICAgICAgICBjYXNlIEVPcFNtb290aFN0ZXA6Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BE
aXN0YW5jZToKLSAgICAgICAgICAgICAgICBjYXNlIEVPcERvdDoKLSAgICAgICAgICAgICAgICBj
YXNlIEVPcENyb3NzOgotICAgICAgICAgICAgICAgIGNhc2UgRU9wRmFjZUZvcndhcmQ6Ci0gICAg
ICAgICAgICAgICAgY2FzZSBFT3BSZWZsZWN0OgotICAgICAgICAgICAgICAgIGNhc2UgRU9wUmVm
cmFjdDoKLSAgICAgICAgICAgICAgICBjYXNlIEVPcE11bDoKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgY29uc3QgVEludGVybVNlcXVl
bmNlJiBzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAgICAgICAvLyBSaWdo
dCBub3cgd2Ugb25seSBoYW5kbGUgYnVpbHQtaW4gZnVuY3Rpb25zIHdpdGggdHdvIHBhcmFtZXRl
cnMuCi0gICAgICAgICAgICBpZiAoc2VxdWVuY2Uuc2l6ZSgpICE9IDIpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBUSW50ZXJtVHlwZWQqIHBhcmFtMSA9IHNlcXVl
bmNlWzBdLT5nZXRBc1R5cGVkKCk7Ci0gICAgICAgICAgICBUSW50ZXJtVHlwZWQqIHBhcmFtMiA9
IHNlcXVlbmNlWzFdLT5nZXRBc1R5cGVkKCk7Ci0gICAgICAgICAgICBpZiAoIXBhcmFtMSB8fCAh
cGFyYW0yKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgYm9vbCBu
ZWVkVG9FbXVsYXRlID0gbUVtdWxhdG9yLlNldEZ1bmN0aW9uQ2FsbGVkKAotICAgICAgICAgICAg
ICAgIG5vZGUtPmdldE9wKCksIHBhcmFtMS0+Z2V0VHlwZSgpLCBwYXJhbTItPmdldFR5cGUoKSk7
Ci0gICAgICAgICAgICBpZiAobmVlZFRvRW11bGF0ZSkKLSAgICAgICAgICAgICAgICBub2RlLT5z
ZXRVc2VFbXVsYXRlZEZ1bmN0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yJiBtRW11bGF0
b3I7Ci19OwotCi19ICAvLyBhbm9ueW1vdXMgbmFtZXBzYWNlCi0KLUJ1aWx0SW5GdW5jdGlvbkVt
dWxhdG9yOjpCdWlsdEluRnVuY3Rpb25FbXVsYXRvcihTaFNoYWRlclR5cGUgc2hhZGVyVHlwZSkK
LXsKLSAgICBpZiAoc2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpIHsKLSAgICAgICAg
bUZ1bmN0aW9uTWFzayA9IGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50TWFzazsKLSAgICAgICAg
bUZ1bmN0aW9uU291cmNlID0ga0Z1bmN0aW9uRW11bGF0aW9uRnJhZ21lbnRTb3VyY2U7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgbUZ1bmN0aW9uTWFzayA9IGtGdW5jdGlvbkVtdWxhdGlvblZlcnRl
eE1hc2s7Ci0gICAgICAgIG1GdW5jdGlvblNvdXJjZSA9IGtGdW5jdGlvbkVtdWxhdGlvblZlcnRl
eFNvdXJjZTsKLSAgICB9Ci19Ci0KLWJvb2wgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OlNldEZ1
bmN0aW9uQ2FsbGVkKAotICAgIFRPcGVyYXRvciBvcCwgY29uc3QgVFR5cGUmIHBhcmFtKQotewot
ICAgIFRCdWlsdEluRnVuY3Rpb24gZnVuY3Rpb24gPSBJZGVudGlmeUZ1bmN0aW9uKG9wLCBwYXJh
bSk7Ci0gICAgcmV0dXJuIFNldEZ1bmN0aW9uQ2FsbGVkKGZ1bmN0aW9uKTsKLX0KLQotYm9vbCBC
dWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6U2V0RnVuY3Rpb25DYWxsZWQoCi0gICAgVE9wZXJhdG9y
IG9wLCBjb25zdCBUVHlwZSYgcGFyYW0xLCBjb25zdCBUVHlwZSYgcGFyYW0yKQotewotICAgIFRC
dWlsdEluRnVuY3Rpb24gZnVuY3Rpb24gPSBJZGVudGlmeUZ1bmN0aW9uKG9wLCBwYXJhbTEsIHBh
cmFtMik7Ci0gICAgcmV0dXJuIFNldEZ1bmN0aW9uQ2FsbGVkKGZ1bmN0aW9uKTsKLX0KLQotYm9v
bCBCdWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6U2V0RnVuY3Rpb25DYWxsZWQoCi0gICAgQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0b3I6OlRCdWlsdEluRnVuY3Rpb24gZnVuY3Rpb24pIHsKLSAgICBpZiAo
ZnVuY3Rpb24gPT0gVEZ1bmN0aW9uVW5rbm93biB8fCBtRnVuY3Rpb25NYXNrW2Z1bmN0aW9uXSA9
PSBmYWxzZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbUZ1bmN0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobUZ1bmN0aW9uc1tpXSA9
PSBmdW5jdGlvbikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBtRnVuY3Rp
b25zLnB1c2hfYmFjayhmdW5jdGlvbik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQnVp
bHRJbkZ1bmN0aW9uRW11bGF0b3I6Ok91dHB1dEVtdWxhdGVkRnVuY3Rpb25EZWZpbml0aW9uKAot
ICAgIFRJbmZvU2lua0Jhc2UmIG91dCwgYm9vbCB3aXRoUHJlY2lzaW9uKSBjb25zdAotewotICAg
IGlmIChtRnVuY3Rpb25zLnNpemUoKSA9PSAwKQotICAgICAgICByZXR1cm47Ci0gICAgb3V0IDw8
ICIvLyBCRUdJTjogR2VuZXJhdGVkIGNvZGUgZm9yIGJ1aWx0LWluIGZ1bmN0aW9uIGVtdWxhdGlv
blxuXG4iOwotICAgIGlmICh3aXRoUHJlY2lzaW9uKSB7Ci0gICAgICAgIG91dCA8PCAiI2lmIGRl
ZmluZWQoR0xfRlJBR01FTlRfUFJFQ0lTSU9OX0hJR0gpXG4iCi0gICAgICAgICAgICA8PCAiI2Rl
ZmluZSB3ZWJnbF9lbXVfcHJlY2lzaW9uIGhpZ2hwXG4iCi0gICAgICAgICAgICA8PCAiI2Vsc2Vc
biIKLSAgICAgICAgICAgIDw8ICIjZGVmaW5lIHdlYmdsX2VtdV9wcmVjaXNpb24gbWVkaXVtcFxu
IgotICAgICAgICAgICAgPDwgIiNlbmRpZlxuXG4iOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG91
dCA8PCAiI2RlZmluZSB3ZWJnbF9lbXVfcHJlY2lzaW9uXG5cbiI7Ci0gICAgfQotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbUZ1bmN0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBvdXQg
PDwgbUZ1bmN0aW9uU291cmNlW21GdW5jdGlvbnNbaV1dIDw8ICJcblxuIjsKLSAgICB9Ci0gICAg
b3V0IDw8ICIvLyBFTkQ6IEdlbmVyYXRlZCBjb2RlIGZvciBidWlsdC1pbiBmdW5jdGlvbiBlbXVs
YXRpb25cblxuIjsKLX0KLQotQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OlRCdWlsdEluRnVuY3Rp
b24KLUJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpJZGVudGlmeUZ1bmN0aW9uKAotICAgIFRPcGVy
YXRvciBvcCwgY29uc3QgVFR5cGUmIHBhcmFtKQotewotICAgIGlmIChwYXJhbS5nZXROb21pbmFs
U2l6ZSgpID4gNCkKLSAgICAgICAgcmV0dXJuIFRGdW5jdGlvblVua25vd247Ci0gICAgdW5zaWdu
ZWQgaW50IGZ1bmN0aW9uID0gVEZ1bmN0aW9uVW5rbm93bjsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0g
ICAgICAgIGNhc2UgRU9wQ29zOgotICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25Db3Mx
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTGVuZ3RoOgotICAgICAgICAg
ICAgZnVuY3Rpb24gPSBURnVuY3Rpb25MZW5ndGgxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRU9wTm9ybWFsaXplOgotICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25O
b3JtYWxpemUxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKGZ1bmN0aW9uID09IFRGdW5jdGlvblVua25vd24p
Ci0gICAgICAgIHJldHVybiBURnVuY3Rpb25Vbmtub3duOwotICAgIGlmIChwYXJhbS5pc1ZlY3Rv
cigpKQotICAgICAgICBmdW5jdGlvbiArPSBwYXJhbS5nZXROb21pbmFsU2l6ZSgpIC0gMTsKLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8VEJ1aWx0SW5GdW5jdGlvbj4oZnVuY3Rpb24pOwotfQotCi1C
dWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6VEJ1aWx0SW5GdW5jdGlvbgotQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3I6OklkZW50aWZ5RnVuY3Rpb24oCi0gICAgVE9wZXJhdG9yIG9wLCBjb25zdCBUVHlw
ZSYgcGFyYW0xLCBjb25zdCBUVHlwZSYgcGFyYW0yKQotewotICAgIC8vIFJpZ2h0IG5vdyBmb3Ig
YWxsIHRoZSBlbXVsYXRlZCBmdW5jdGlvbnMgd2l0aCB0d28gcGFyYW1ldGVycywgdGhlIHR3bwot
ICAgIC8vIHBhcmFtZXRlcnMgaGF2ZSB0aGUgc2FtZSB0eXBlLgotICAgIGlmIChwYXJhbTEuaXNW
ZWN0b3IoKSAhPSBwYXJhbTIuaXNWZWN0b3IoKSB8fAotICAgICAgICBwYXJhbTEuZ2V0Tm9taW5h
bFNpemUoKSAhPSBwYXJhbTIuZ2V0Tm9taW5hbFNpemUoKSB8fAotICAgICAgICBwYXJhbTEuZ2V0
Tm9taW5hbFNpemUoKSA+IDQpCi0gICAgICAgIHJldHVybiBURnVuY3Rpb25Vbmtub3duOwotCi0g
ICAgdW5zaWduZWQgaW50IGZ1bmN0aW9uID0gVEZ1bmN0aW9uVW5rbm93bjsKLSAgICBzd2l0Y2gg
KG9wKSB7Ci0gICAgICAgIGNhc2UgRU9wRGlzdGFuY2U6Ci0gICAgICAgICAgICBmdW5jdGlvbiA9
IFRGdW5jdGlvbkRpc3RhbmNlMV8xOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RU9wRG90OgotICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25Eb3QxXzE7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BSZWZsZWN0OgotICAgICAgICAgICAgZnVuY3Rp
b24gPSBURnVuY3Rpb25SZWZsZWN0MV8xOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKGZ1bmN0aW9uID09IFRG
dW5jdGlvblVua25vd24pCi0gICAgICAgIHJldHVybiBURnVuY3Rpb25Vbmtub3duOwotICAgIGlm
IChwYXJhbTEuaXNWZWN0b3IoKSkKLSAgICAgICAgZnVuY3Rpb24gKz0gcGFyYW0xLmdldE5vbWlu
YWxTaXplKCkgLSAxOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUQnVpbHRJbkZ1bmN0aW9uPihm
dW5jdGlvbik7Ci19Ci0KLXZvaWQgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6Ok1hcmtCdWlsdElu
RnVuY3Rpb25zRm9yRW11bGF0aW9uKAotICAgIFRJbnRlcm1Ob2RlKiByb290KQotewotICAgIEFT
U0VSVChyb290KTsKLQotICAgIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdGlvbk1hcmtlciBtYXJrZXIo
KnRoaXMpOwotICAgIHJvb3QtPnRyYXZlcnNlKCZtYXJrZXIpOwotfQotCi12b2lkIEJ1aWx0SW5G
dW5jdGlvbkVtdWxhdG9yOjpDbGVhbnVwKCkKLXsKLSAgICBtRnVuY3Rpb25zLmNsZWFyKCk7Ci19
Ci0KLS8vc3RhdGljCi1UU3RyaW5nIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpHZXRFbXVsYXRl
ZEZ1bmN0aW9uTmFtZSgKLSAgICBjb25zdCBUU3RyaW5nJiBuYW1lKQotewotICAgIEFTU0VSVChu
YW1lW25hbWUubGVuZ3RoKCkgLSAxXSA9PSAnKCcpOwotICAgIHJldHVybiAid2ViZ2xfIiArIG5h
bWUuc3Vic3RyKDAsIG5hbWUubGVuZ3RoKCkgLSAxKSArICJfZW11KCI7Ci19Ci0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25F
bXVsYXRvci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0J1aWx0SW5G
dW5jdGlvbkVtdWxhdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkOTA0ZjQx
ZDA5MTZjZmY5ZThkMGMwNTg5ZjllZDg5ZDBlYzAzODIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCww
IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxJRVJfQlVJTFRfSU5fRlVOQ1RJT05f
RU1VTEFUT1JfSF8KLSNkZWZpbmUgQ09NUElMSUVSX0JVSUxUX0lOX0ZVTkNUSU9OX0VNVUxBVE9S
X0hfCi0KLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLQotI2luY2x1ZGUgImNvbXBp
bGVyL0luZm9TaW5rLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCi0KLS8v
Ci0vLyBUaGlzIGNsYXNzIGRlY2lkZXMgd2hpY2ggYnVpbHQtaW4gZnVuY3Rpb25zIG5lZWQgdG8g
YmUgcmVwbGFjZWQgd2l0aCB0aGUKLS8vIGVtdWxhdGVkIG9uZXMuCi0vLyBJdCdzIG9ubHkgYSB3
b3JrYXJvdW5kIGZvciBPcGVuR0wgZHJpdmVyIGJ1Z3MsIGFuZCBpc24ndCBuZWVkZWQgaW4gZ2Vu
ZXJhbC4KLS8vCi1jbGFzcyBCdWlsdEluRnVuY3Rpb25FbXVsYXRvciB7Ci1wdWJsaWM6Ci0gICAg
QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IoU2hTaGFkZXJUeXBlIHNoYWRlclR5cGUpOwotICAgIC8v
IFJlY29yZHMgdGhhdCBhIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgc2hhZGVyIGFuZCBtaWdo
dCBuZWVkcyB0byBiZQotICAgIC8vIGVtdWxhdGVkLiAgSWYgdGhlIGZ1bmN0aW9uJ3MgZ3JvdXAg
aXMgbm90IGluIG1GdW5jdGlvbkdyb3VwRmlsdGVyLCB0aGlzCi0gICAgLy8gYmVjb21lcyBhbiBu
by1vcC4KLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGZ1bmN0aW9uIGNhbGwgbmVlZHMgdG8g
YmUgcmVwbGFjZWQgd2l0aCBhbiBlbXVsYXRlZAotICAgIC8vIG9uZS4KLSAgICBib29sIFNldEZ1
bmN0aW9uQ2FsbGVkKFRPcGVyYXRvciBvcCwgY29uc3QgVFR5cGUmIHBhcmFtKTsKLSAgICBib29s
IFNldEZ1bmN0aW9uQ2FsbGVkKAotICAgICAgICBUT3BlcmF0b3Igb3AsIGNvbnN0IFRUeXBlJiBw
YXJhbTEsIGNvbnN0IFRUeXBlJiBwYXJhbTIpOwotCi0gICAgLy8gT3V0cHV0IGZ1bmN0aW9uIGVt
dWxhdGlvbiBkZWZpbml0aW9uLiAgVGhpcyBzaG91bGQgYmUgYmVmb3JlIGFueSBvdGhlcgotICAg
IC8vIHNoYWRlciBzb3VyY2UuCi0gICAgdm9pZCBPdXRwdXRFbXVsYXRlZEZ1bmN0aW9uRGVmaW5p
dGlvbihUSW5mb1NpbmtCYXNlJiBvdXQsIGJvb2wgd2l0aFByZWNpc2lvbikgY29uc3Q7Ci0KLSAg
ICB2b2lkIE1hcmtCdWlsdEluRnVuY3Rpb25zRm9yRW11bGF0aW9uKFRJbnRlcm1Ob2RlKiByb290
KTsKLQotICAgIHZvaWQgQ2xlYW51cCgpOwotCi0gICAgLy8gIm5hbWUoIiBiZWNvbWVzICJ3ZWJn
bF9uYW1lX2VtdSgiLgotICAgIHN0YXRpYyBUU3RyaW5nIEdldEVtdWxhdGVkRnVuY3Rpb25OYW1l
KGNvbnN0IFRTdHJpbmcmIG5hbWUpOwotCi1wcml2YXRlOgotICAgIC8vCi0gICAgLy8gQnVpbHQt
aW4gZnVuY3Rpb25zLgotICAgIC8vCi0gICAgZW51bSBUQnVpbHRJbkZ1bmN0aW9uIHsKLSAgICAg
ICAgVEZ1bmN0aW9uQ29zMSA9IDAsICAvLyBmbG9hdCBjb3MoZmxvYXQpOwotICAgICAgICBURnVu
Y3Rpb25Db3MyLCAgLy8gdmVjMiBjb3ModmVjMik7Ci0gICAgICAgIFRGdW5jdGlvbkNvczMsICAv
LyB2ZWMzIGNvcyh2ZWMzKTsKLSAgICAgICAgVEZ1bmN0aW9uQ29zNCwgIC8vIHZlYzQgY29zKHZl
YzQpOwotCi0gICAgICAgIFRGdW5jdGlvbkRpc3RhbmNlMV8xLCAgLy8gZmxvYXQgZGlzdGFuY2Uo
ZmxvYXQsIGZsb2F0KTsKLSAgICAgICAgVEZ1bmN0aW9uRGlzdGFuY2UyXzIsICAvLyB2ZWMyIGRp
c3RhbmNlKHZlYzIsIHZlYzIpOwotICAgICAgICBURnVuY3Rpb25EaXN0YW5jZTNfMywgIC8vIHZl
YzMgZGlzdGFuY2UodmVjMywgdmVjMyk7Ci0gICAgICAgIFRGdW5jdGlvbkRpc3RhbmNlNF80LCAg
Ly8gdmVjNCBkaXN0YW5jZSh2ZWM0LCB2ZWM0KTsKLQotICAgICAgICBURnVuY3Rpb25Eb3QxXzEs
ICAvLyBmbG9hdCBkb3QoZmxvYXQsIGZsb2F0KTsKLSAgICAgICAgVEZ1bmN0aW9uRG90Ml8yLCAg
Ly8gdmVjMiBkb3QodmVjMiwgdmVjMik7Ci0gICAgICAgIFRGdW5jdGlvbkRvdDNfMywgIC8vIHZl
YzMgZG90KHZlYzMsIHZlYzMpOwotICAgICAgICBURnVuY3Rpb25Eb3Q0XzQsICAvLyB2ZWM0IGRv
dCh2ZWM0LCB2ZWM0KTsKLQotICAgICAgICBURnVuY3Rpb25MZW5ndGgxLCAgLy8gZmxvYXQgbGVu
Z3RoKGZsb2F0KTsKLSAgICAgICAgVEZ1bmN0aW9uTGVuZ3RoMiwgIC8vIGZsb2F0IGxlbmd0aCh2
ZWMyKTsKLSAgICAgICAgVEZ1bmN0aW9uTGVuZ3RoMywgIC8vIGZsb2F0IGxlbmd0aCh2ZWMzKTsK
LSAgICAgICAgVEZ1bmN0aW9uTGVuZ3RoNCwgIC8vIGZsb2F0IGxlbmd0aCh2ZWM0KTsKLQotICAg
ICAgICBURnVuY3Rpb25Ob3JtYWxpemUxLCAgLy8gZmxvYXQgbm9ybWFsaXplKGZsb2F0KTsKLSAg
ICAgICAgVEZ1bmN0aW9uTm9ybWFsaXplMiwgIC8vIHZlYzIgbm9ybWFsaXplKHZlYzIpOwotICAg
ICAgICBURnVuY3Rpb25Ob3JtYWxpemUzLCAgLy8gdmVjMyBub3JtYWxpemUodmVjMyk7Ci0gICAg
ICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTQsICAvLyB2ZWM0IG5vcm1hbGl6ZSh2ZWM0KTsKLQotICAg
ICAgICBURnVuY3Rpb25SZWZsZWN0MV8xLCAgLy8gZmxvYXQgcmVmbGVjdChmbG9hdCwgZmxvYXQp
OwotICAgICAgICBURnVuY3Rpb25SZWZsZWN0Ml8yLCAgLy8gdmVjMiByZWZsZWN0KHZlYzIsIHZl
YzIpOwotICAgICAgICBURnVuY3Rpb25SZWZsZWN0M18zLCAgLy8gdmVjMyByZWZsZWN0KHZlYzMs
IHZlYzMpOwotICAgICAgICBURnVuY3Rpb25SZWZsZWN0NF80LCAgLy8gdmVjNCByZWZsZWN0KHZl
YzQsIHZlYzQpOwotCi0gICAgICAgIFRGdW5jdGlvblVua25vd24KLSAgICB9OwotCi0gICAgVEJ1
aWx0SW5GdW5jdGlvbiBJZGVudGlmeUZ1bmN0aW9uKFRPcGVyYXRvciBvcCwgY29uc3QgVFR5cGUm
IHBhcmFtKTsKLSAgICBUQnVpbHRJbkZ1bmN0aW9uIElkZW50aWZ5RnVuY3Rpb24oCi0gICAgICAg
IFRPcGVyYXRvciBvcCwgY29uc3QgVFR5cGUmIHBhcmFtMSwgY29uc3QgVFR5cGUmIHBhcmFtMik7
Ci0KLSAgICBib29sIFNldEZ1bmN0aW9uQ2FsbGVkKFRCdWlsdEluRnVuY3Rpb24gZnVuY3Rpb24p
OwotCi0gICAgc3RkOjp2ZWN0b3I8VEJ1aWx0SW5GdW5jdGlvbj4gbUZ1bmN0aW9uczsKLQotICAg
IGNvbnN0IGJvb2wqIG1GdW5jdGlvbk1hc2s7ICAvLyBhIGJvb2xlYW4gZmxhZyBmb3IgZWFjaCBm
dW5jdGlvbi4KLSAgICBjb25zdCBjaGFyKiogbUZ1bmN0aW9uU291cmNlOwotfTsKLQotI2VuZGlm
ICAvLyBDT01QSUxJRVJfQlVJTFRfSU5fRlVOQ1RJT05fRU1VTEFUT1JfSF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db2RlR2VuLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db2RlR2VuLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMjRmMjFiODc2MTczYTMxNGMwODM4ZjI3M2UyMmJmNzU1Njc0YWRk
My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29kZUdlbi5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwzOCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIv
VHJhbnNsYXRvckVTU0wuaCIKLSNpbmNsdWRlICJjb21waWxlci9UcmFuc2xhdG9yR0xTTC5oIgot
I2luY2x1ZGUgImNvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmgiCi0KLS8vCi0vLyBUaGlzIGZ1bmN0
aW9uIG11c3QgYmUgcHJvdmlkZWQgdG8gY3JlYXRlIHRoZSBhY3R1YWwKLS8vIGNvbXBpbGUgb2Jq
ZWN0IHVzZWQgYnkgaGlnaGVyIGxldmVsIGNvZGUuICBJdCByZXR1cm5zCi0vLyBhIHN1YmNsYXNz
IG9mIFRDb21waWxlci4KLS8vCi1UQ29tcGlsZXIqIENvbnN0cnVjdENvbXBpbGVyKAotICAgIFNo
U2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywgU2hTaGFkZXJPdXRwdXQgb3V0cHV0
KQotewotICAgIHN3aXRjaCAob3V0cHV0KSB7Ci0gICAgICBjYXNlIFNIX0VTU0xfT1VUUFVUOgot
ICAgICAgICByZXR1cm4gbmV3IFRyYW5zbGF0b3JFU1NMKHR5cGUsIHNwZWMpOwotICAgICAgY2Fz
ZSBTSF9HTFNMX09VVFBVVDoKLSAgICAgICAgcmV0dXJuIG5ldyBUcmFuc2xhdG9yR0xTTCh0eXBl
LCBzcGVjKTsKLSAgICAgIGNhc2UgU0hfSExTTDlfT1VUUFVUOgotICAgICAgY2FzZSBTSF9ITFNM
MTFfT1VUUFVUOgotICAgICAgICByZXR1cm4gbmV3IFRyYW5zbGF0b3JITFNMKHR5cGUsIHNwZWMs
IG91dHB1dCk7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci19
Ci0KLS8vCi0vLyBEZWxldGUgdGhlIGNvbXBpbGVyIG1hZGUgYnkgQ29uc3RydWN0Q29tcGlsZXIK
LS8vCi12b2lkIERlbGV0ZUNvbXBpbGVyKFRDb21waWxlciogY29tcGlsZXIpCi17Ci0gICAgZGVs
ZXRlIGNvbXBpbGVyOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0NvbW1vbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0NvbW1vbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmY5NDQwZmZmMWI1MGJm
OTcyOWRhNjE3MjU2MzM3NGM5ZmZjYmQzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21t
b24uaAorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0K
LSNpZm5kZWYgX0NPTU1PTl9JTkNMVURFRF8KLSNkZWZpbmUgX0NPTU1PTl9JTkNMVURFRF8KLQot
I2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxzc3RyZWFtPgotI2luY2x1ZGUgPHN0cmluZz4KLSNp
bmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJjb21waWxlci9Qb29sQWxsb2MuaCIKLQotc3Ry
dWN0IFRTb3VyY2VMb2MgewotICAgIGludCBmaXJzdF9maWxlOwotICAgIGludCBmaXJzdF9saW5l
OwotICAgIGludCBsYXN0X2ZpbGU7Ci0gICAgaW50IGxhc3RfbGluZTsKLX07Ci0KLS8vCi0vLyBQ
dXQgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSBpbiBiYXNlIGNsYXNzZXMgdG8gbWFrZSB0aGVt
IHVzZSB0aGlzIHNjaGVtZS4KLS8vCi0jZGVmaW5lIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUo
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QgcykgeyByZXR1cm4gR2V0R2xvYmFsUG9vbEFsbG9j
YXRvcigpLT5hbGxvY2F0ZShzKTsgfSAgIFwKLSAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90
LCB2b2lkICpfV2hlcmUpIHsgcmV0dXJuIChfV2hlcmUpOyB9ICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCopIHsgfSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRl
KHZvaWQgKiwgdm9pZCAqKSB7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICB2b2lkKiBvcGVyYXRvciBuZXdbXShzaXplX3QgcykgeyByZXR1cm4gR2V0R2xv
YmFsUG9vbEFsbG9jYXRvcigpLT5hbGxvY2F0ZShzKTsgfSBcCi0gICAgdm9pZCogb3BlcmF0b3Ig
bmV3W10oc2l6ZV90LCB2b2lkICpfV2hlcmUpIHsgcmV0dXJuIChfV2hlcmUpOyB9ICAgICAgICAg
ICAgICAgICAgXAotICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCopIHsgfSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB2b2lkIG9wZXJh
dG9yIGRlbGV0ZVtdKHZvaWQgKiwgdm9pZCAqKSB7IH0KLQotLy8KLS8vIFBvb2wgdmVyc2lvbiBv
ZiBzdHJpbmcuCi0vLwotdHlwZWRlZiBwb29sX2FsbG9jYXRvcjxjaGFyPiBUU3RyaW5nQWxsb2Nh
dG9yOwotdHlwZWRlZiBzdGQ6OmJhc2ljX3N0cmluZyA8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxj
aGFyPiwgVFN0cmluZ0FsbG9jYXRvcj4gVFN0cmluZzsKLXR5cGVkZWYgc3RkOjpiYXNpY19vc3Ry
aW5nc3RyZWFtPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIFRTdHJpbmdBbGxvY2F0b3I+
IFRTdHJpbmdTdHJlYW07Ci1pbmxpbmUgVFN0cmluZyogTmV3UG9vbFRTdHJpbmcoY29uc3QgY2hh
ciogcykKLXsKLQl2b2lkKiBtZW1vcnkgPSBHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCktPmFsbG9j
YXRlKHNpemVvZihUU3RyaW5nKSk7Ci0JcmV0dXJuIG5ldyhtZW1vcnkpIFRTdHJpbmcocyk7Ci19
Ci0KLS8vCi0vLyBQZXJzaXN0ZW50IHN0cmluZyBtZW1vcnkuICBTaG91bGQgb25seSBiZSB1c2Vk
IGZvciBzdHJpbmdzIHRoYXQgc3Vydml2ZQotLy8gYWNyb3NzIGNvbXBpbGVzLgotLy8KLSNkZWZp
bmUgVFBlcnNpc3RTdHJpbmcgc3RkOjpzdHJpbmcKLSNkZWZpbmUgVFBlcnNpc3RTdHJpbmdTdHJl
YW0gc3RkOjpvc3RyaW5nc3RyZWFtCi0KLS8vCi0vLyBQb29sIGFsbG9jYXRvciB2ZXJzaW9ucyBv
ZiB2ZWN0b3JzLCBsaXN0cywgYW5kIG1hcHMKLS8vCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3Mg
VFZlY3RvciA6IHB1YmxpYyBzdGQ6OnZlY3RvcjxULCBwb29sX2FsbG9jYXRvcjxUPiA+IHsKLXB1
YmxpYzoKLSAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6dmVjdG9yPFQsIHBvb2xfYWxsb2NhdG9y
PFQ+ID46OnNpemVfdHlwZSBzaXplX3R5cGU7Ci0gICAgVFZlY3RvcigpIDogc3RkOjp2ZWN0b3I8
VCwgcG9vbF9hbGxvY2F0b3I8VD4gPigpIHt9Ci0gICAgVFZlY3Rvcihjb25zdCBwb29sX2FsbG9j
YXRvcjxUPiYgYSkgOiBzdGQ6OnZlY3RvcjxULCBwb29sX2FsbG9jYXRvcjxUPiA+KGEpIHt9Ci0g
ICAgVFZlY3RvcihzaXplX3R5cGUgaSk6IHN0ZDo6dmVjdG9yPFQsIHBvb2xfYWxsb2NhdG9yPFQ+
ID4oaSkge30KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBLLCBjbGFzcyBELCBjbGFzcyBDTVAgPSBz
dGQ6Omxlc3M8Sz4gPiAKLWNsYXNzIFRNYXAgOiBwdWJsaWMgc3RkOjptYXA8SywgRCwgQ01QLCBw
b29sX2FsbG9jYXRvcjxzdGQ6OnBhaXI8Y29uc3QgSywgRD4gPiA+IHsKLXB1YmxpYzoKLSAgICB0
eXBlZGVmIHBvb2xfYWxsb2NhdG9yPHN0ZDo6cGFpcjxjb25zdCBLLCBEPiA+IHRBbGxvY2F0b3I7
Ci0KLSAgICBUTWFwKCkgOiBzdGQ6Om1hcDxLLCBELCBDTVAsIHRBbGxvY2F0b3I+KCkge30KLSAg
ICAvLyB1c2UgY29ycmVjdCB0d28tc3RhZ2UgbmFtZSBsb29rdXAgc3VwcG9ydGVkIGluIGdjYyAz
LjQgYW5kIGFib3ZlCi0gICAgVE1hcChjb25zdCB0QWxsb2NhdG9yJiBhKSA6IHN0ZDo6bWFwPEss
IEQsIENNUCwgdEFsbG9jYXRvcj4oc3RkOjptYXA8SywgRCwgQ01QLCB0QWxsb2NhdG9yPjo6a2V5
X2NvbXBhcmUoKSwgYSkge30KLX07Ci0KLSNlbmRpZiAvLyBfQ09NTU9OX0lOQ0xVREVEXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyYjRlZjYwMjU5ZDE5OWRhZTExMDFmODMxMzg2
MDcyMTkwNTBkOTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDQ1MiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVk
ZSAiY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCIKLSNpbmNsdWRlICJjb21waWxl
ci9EZXRlY3RDYWxsRGVwdGguaCIKLSNpbmNsdWRlICJjb21waWxlci9Gb3JMb29wVW5yb2xsLmgi
Ci0jaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL0lu
aXRpYWxpemVHTFBvc2l0aW9uLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNl
Q29udGV4dC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmgiCi0j
aW5jbHVkZSAiY29tcGlsZXIvUGFyc2VDb250ZXh0LmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUmVu
YW1lRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgotI2luY2x1ZGUg
ImNvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdEFTVC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1Zh
bGlkYXRlTGltaXRhdGlvbnMuaCIKLSNpbmNsdWRlICJjb21waWxlci9WYXJpYWJsZVBhY2tlci5o
IgotI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgotI2luY2x1
ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIgotI2luY2x1ZGUg
ImNvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgiCi0jaW5jbHVk
ZSAiY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgiCi0jaW5jbHVk
ZSAidGhpcmRfcGFydHkvY29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmgiCi0KLWJvb2wgaXNX
ZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNwZWMgc3BlYykKLXsKLSAgICAgcmV0dXJuIHNwZWMgPT0g
U0hfV0VCR0xfU1BFQyB8fCBzcGVjID09IFNIX0NTU19TSEFERVJTX1NQRUM7Ci19Ci0KLW5hbWVz
cGFjZSB7Ci1jbGFzcyBUU2NvcGVkUG9vbEFsbG9jYXRvciB7Ci1wdWJsaWM6Ci0gICAgVFNjb3Bl
ZFBvb2xBbGxvY2F0b3IoVFBvb2xBbGxvY2F0b3IqIGFsbG9jYXRvcikgOiBtQWxsb2NhdG9yKGFs
bG9jYXRvcikgewotICAgICAgICBtQWxsb2NhdG9yLT5wdXNoKCk7Ci0gICAgICAgIFNldEdsb2Jh
bFBvb2xBbGxvY2F0b3IobUFsbG9jYXRvcik7Ci0gICAgfQotICAgIH5UU2NvcGVkUG9vbEFsbG9j
YXRvcigpIHsKLSAgICAgICAgU2V0R2xvYmFsUG9vbEFsbG9jYXRvcihOVUxMKTsKLSAgICAgICAg
bUFsbG9jYXRvci0+cG9wKCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFRQb29sQWxsb2NhdG9y
KiBtQWxsb2NhdG9yOwotfTsKLQotY2xhc3MgVFNjb3BlZFN5bWJvbFRhYmxlTGV2ZWwgewotcHVi
bGljOgotICAgIFRTY29wZWRTeW1ib2xUYWJsZUxldmVsKFRTeW1ib2xUYWJsZSogdGFibGUpIDog
bVRhYmxlKHRhYmxlKSB7Ci0gICAgICAgIEFTU0VSVChtVGFibGUtPmF0QnVpbHRJbkxldmVsKCkp
OwotICAgICAgICBtVGFibGUtPnB1c2goKTsKLSAgICB9Ci0gICAgflRTY29wZWRTeW1ib2xUYWJs
ZUxldmVsKCkgewotICAgICAgICB3aGlsZSAoIW1UYWJsZS0+YXRCdWlsdEluTGV2ZWwoKSkKLSAg
ICAgICAgICAgIG1UYWJsZS0+cG9wKCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFRTeW1ib2xU
YWJsZSogbVRhYmxlOwotfTsKLX0gIC8vIG5hbWVzcGFjZQotCi1UU2hIYW5kbGVCYXNlOjpUU2hI
YW5kbGVCYXNlKCkgewotICAgIGFsbG9jYXRvci5wdXNoKCk7Ci0gICAgU2V0R2xvYmFsUG9vbEFs
bG9jYXRvcigmYWxsb2NhdG9yKTsKLX0KLQotVFNoSGFuZGxlQmFzZTo6flRTaEhhbmRsZUJhc2Uo
KSB7Ci0gICAgU2V0R2xvYmFsUG9vbEFsbG9jYXRvcihOVUxMKTsKLSAgICBhbGxvY2F0b3IucG9w
QWxsKCk7Ci19Ci0KLVRDb21waWxlcjo6VENvbXBpbGVyKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNo
YWRlclNwZWMgc3BlYykKLSAgICA6IHNoYWRlclR5cGUodHlwZSksCi0gICAgICBzaGFkZXJTcGVj
KHNwZWMpLAotICAgICAgbWF4VW5pZm9ybVZlY3RvcnMoMCksCi0gICAgICBtYXhWYXJ5aW5nVmVj
dG9ycygwKSwKLSAgICAgIG1heEV4cHJlc3Npb25Db21wbGV4aXR5KDApLAotICAgICAgbWF4Q2Fs
bFN0YWNrRGVwdGgoMCksCi0gICAgICBmcmFnbWVudFByZWNpc2lvbkhpZ2goZmFsc2UpLAotICAg
ICAgY2xhbXBpbmdTdHJhdGVneShTSF9DTEFNUF9XSVRIX0NMQU1QX0lOVFJJTlNJQyksCi0gICAg
ICBidWlsdEluRnVuY3Rpb25FbXVsYXRvcih0eXBlKQotewotICAgIGxvbmdOYW1lTWFwID0gTG9u
Z05hbWVNYXA6OkdldEluc3RhbmNlKCk7Ci19Ci0KLVRDb21waWxlcjo6flRDb21waWxlcigpCi17
Ci0gICAgQVNTRVJUKGxvbmdOYW1lTWFwKTsKLSAgICBsb25nTmFtZU1hcC0+UmVsZWFzZSgpOwot
fQotCi1ib29sIFRDb21waWxlcjo6SW5pdChjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291
cmNlcykKLXsKLSAgICBtYXhVbmlmb3JtVmVjdG9ycyA9IChzaGFkZXJUeXBlID09IFNIX1ZFUlRF
WF9TSEFERVIpID8KLSAgICAgICAgcmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzIDoK
LSAgICAgICAgcmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnM7Ci0gICAgbWF4VmFy
eWluZ1ZlY3RvcnMgPSByZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnM7Ci0gICAgbWF4RXhwcmVz
c2lvbkNvbXBsZXhpdHkgPSByZXNvdXJjZXMuTWF4RXhwcmVzc2lvbkNvbXBsZXhpdHk7Ci0gICAg
bWF4Q2FsbFN0YWNrRGVwdGggPSByZXNvdXJjZXMuTWF4Q2FsbFN0YWNrRGVwdGg7Ci0KLSAgICBT
ZXRHbG9iYWxQb29sQWxsb2NhdG9yKCZhbGxvY2F0b3IpOwotCi0gICAgLy8gR2VuZXJhdGUgYnVp
bHQtaW4gc3ltYm9sIHRhYmxlLgotICAgIGlmICghSW5pdEJ1aWx0SW5TeW1ib2xUYWJsZShyZXNv
dXJjZXMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgSW5pdEV4dGVuc2lvbkJlaGF2aW9y
KHJlc291cmNlcywgZXh0ZW5zaW9uQmVoYXZpb3IpOwotICAgIGZyYWdtZW50UHJlY2lzaW9uSGln
aCA9IHJlc291cmNlcy5GcmFnbWVudFByZWNpc2lvbkhpZ2ggPT0gMTsKLQotICAgIGFycmF5Qm91
bmRzQ2xhbXBlci5TZXRDbGFtcGluZ1N0cmF0ZWd5KHJlc291cmNlcy5BcnJheUluZGV4Q2xhbXBp
bmdTdHJhdGVneSk7Ci0gICAgY2xhbXBpbmdTdHJhdGVneSA9IHJlc291cmNlcy5BcnJheUluZGV4
Q2xhbXBpbmdTdHJhdGVneTsKLQotICAgIGhhc2hGdW5jdGlvbiA9IHJlc291cmNlcy5IYXNoRnVu
Y3Rpb247Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBUQ29tcGlsZXI6OmNvbXBpbGUo
Y29uc3QgY2hhciogY29uc3Qgc2hhZGVyU3RyaW5nc1tdLAotICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IG51bVN0cmluZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29tcGls
ZU9wdGlvbnMpCi17Ci0gICAgVFNjb3BlZFBvb2xBbGxvY2F0b3Igc2NvcGVkQWxsb2MoJmFsbG9j
YXRvcik7Ci0gICAgY2xlYXJSZXN1bHRzKCk7Ci0KLSAgICBpZiAobnVtU3RyaW5ncyA9PSAwKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIElmIGNvbXBpbGluZyBmb3IgV2ViR0wsIHZh
bGlkYXRlIGxvb3AgYW5kIGluZGV4aW5nIGFzIHdlbGwuCi0gICAgaWYgKGlzV2ViR0xCYXNlZFNw
ZWMoc2hhZGVyU3BlYykpCi0gICAgICAgIGNvbXBpbGVPcHRpb25zIHw9IFNIX1ZBTElEQVRFX0xP
T1BfSU5ERVhJTkc7Ci0KLSAgICAvLyBGaXJzdCBzdHJpbmcgaXMgcGF0aCBvZiBzb3VyY2UgZmls
ZSBpZiBmbGFnIGlzIHNldC4gVGhlIGFjdHVhbCBzb3VyY2UgZm9sbG93cy4KLSAgICBjb25zdCBj
aGFyKiBzb3VyY2VQYXRoID0gTlVMTDsKLSAgICBzaXplX3QgZmlyc3RTb3VyY2UgPSAwOwotICAg
IGlmIChjb21waWxlT3B0aW9ucyAmIFNIX1NPVVJDRV9QQVRIKQotICAgIHsKLSAgICAgICAgc291
cmNlUGF0aCA9IHNoYWRlclN0cmluZ3NbMF07Ci0gICAgICAgICsrZmlyc3RTb3VyY2U7Ci0gICAg
fQotCi0gICAgVEludGVybWVkaWF0ZSBpbnRlcm1lZGlhdGUoaW5mb1NpbmspOwotICAgIFRQYXJz
ZUNvbnRleHQgcGFyc2VDb250ZXh0KHN5bWJvbFRhYmxlLCBleHRlbnNpb25CZWhhdmlvciwgaW50
ZXJtZWRpYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRlclR5cGUsIHNo
YWRlclNwZWMsIGNvbXBpbGVPcHRpb25zLCB0cnVlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNvdXJjZVBhdGgsIGluZm9TaW5rKTsKLSAgICBwYXJzZUNvbnRleHQuZnJhZ21lbnRQ
cmVjaXNpb25IaWdoID0gZnJhZ21lbnRQcmVjaXNpb25IaWdoOwotICAgIFNldEdsb2JhbFBhcnNl
Q29udGV4dCgmcGFyc2VDb250ZXh0KTsKLQotICAgIC8vIFdlIHByZXNlcnZlIHN5bWJvbHMgYXQg
dGhlIGJ1aWx0LWluIGxldmVsIGZyb20gY29tcGlsZS10by1jb21waWxlLgotICAgIC8vIFN0YXJ0
IHB1c2hpbmcgdGhlIHVzZXItZGVmaW5lZCBzeW1ib2xzIGF0IGdsb2JhbCBsZXZlbC4KLSAgICBU
U2NvcGVkU3ltYm9sVGFibGVMZXZlbCBzY29wZWRTeW1ib2xMZXZlbCgmc3ltYm9sVGFibGUpOwot
Ci0gICAgLy8gUGFyc2Ugc2hhZGVyLgotICAgIGJvb2wgc3VjY2VzcyA9Ci0gICAgICAgIChQYVBh
cnNlU3RyaW5ncyhudW1TdHJpbmdzIC0gZmlyc3RTb3VyY2UsICZzaGFkZXJTdHJpbmdzW2ZpcnN0
U291cmNlXSwgTlVMTCwgJnBhcnNlQ29udGV4dCkgPT0gMCkgJiYKLSAgICAgICAgKHBhcnNlQ29u
dGV4dC50cmVlUm9vdCAhPSBOVUxMKTsKLSAgICBpZiAoc3VjY2VzcykgewotICAgICAgICBUSW50
ZXJtTm9kZSogcm9vdCA9IHBhcnNlQ29udGV4dC50cmVlUm9vdDsKLSAgICAgICAgc3VjY2VzcyA9
IGludGVybWVkaWF0ZS5wb3N0UHJvY2Vzcyhyb290KTsKLQotICAgICAgICBpZiAoc3VjY2VzcykK
LSAgICAgICAgICAgIHN1Y2Nlc3MgPSBkZXRlY3RDYWxsRGVwdGgocm9vdCwgaW5mb1NpbmssIChj
b21waWxlT3B0aW9ucyAmIFNIX0xJTUlUX0NBTExfU1RBQ0tfREVQVEgpICE9IDApOwotCi0gICAg
ICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1ZBTElEQVRFX0xPT1BfSU5E
RVhJTkcpKQotICAgICAgICAgICAgc3VjY2VzcyA9IHZhbGlkYXRlTGltaXRhdGlvbnMocm9vdCk7
Ci0KLSAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfVElNSU5HX1JF
U1RSSUNUSU9OUykpCi0gICAgICAgICAgICBzdWNjZXNzID0gZW5mb3JjZVRpbWluZ1Jlc3RyaWN0
aW9ucyhyb290LCAoY29tcGlsZU9wdGlvbnMgJiBTSF9ERVBFTkRFTkNZX0dSQVBIKSAhPSAwKTsK
LQotICAgICAgICBpZiAoc3VjY2VzcyAmJiBzaGFkZXJTcGVjID09IFNIX0NTU19TSEFERVJTX1NQ
RUMpCi0gICAgICAgICAgICByZXdyaXRlQ1NTU2hhZGVyKHJvb3QpOwotCi0gICAgICAgIC8vIFVu
cm9sbCBmb3ItbG9vcCBtYXJrdXAgbmVlZHMgdG8gaGFwcGVuIGFmdGVyIHZhbGlkYXRlTGltaXRh
dGlvbnMgcGFzcy4KLSAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hf
VU5ST0xMX0ZPUl9MT09QX1dJVEhfSU5URUdFUl9JTkRFWCkpCi0gICAgICAgICAgICBGb3JMb29w
VW5yb2xsOjpNYXJrRm9yTG9vcHNXaXRoSW50ZWdlckluZGljZXNGb3JVbnJvbGxpbmcocm9vdCk7
Ci0KLSAgICAgICAgLy8gQnVpbHQtaW4gZnVuY3Rpb24gZW11bGF0aW9uIG5lZWRzIHRvIGhhcHBl
biBhZnRlciB2YWxpZGF0ZUxpbWl0YXRpb25zIHBhc3MuCi0gICAgICAgIGlmIChzdWNjZXNzICYm
IChjb21waWxlT3B0aW9ucyAmIFNIX0VNVUxBVEVfQlVJTFRfSU5fRlVOQ1RJT05TKSkKLSAgICAg
ICAgICAgIGJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLk1hcmtCdWlsdEluRnVuY3Rpb25zRm9yRW11
bGF0aW9uKHJvb3QpOwotCi0gICAgICAgIC8vIENsYW1waW5nIHVuaWZvcm0gYXJyYXkgYm91bmRz
IG5lZWRzIHRvIGhhcHBlbiBhZnRlciB2YWxpZGF0ZUxpbWl0YXRpb25zIHBhc3MuCi0gICAgICAg
IGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX0NMQU1QX0lORElSRUNUX0FSUkFZ
X0JPVU5EUykpCi0gICAgICAgICAgICBhcnJheUJvdW5kc0NsYW1wZXIuTWFya0luZGlyZWN0QXJy
YXlCb3VuZHNGb3JDbGFtcGluZyhyb290KTsKLQotICAgICAgICAvLyBEaXNhbGxvdyBleHByZXNz
aW9ucyBkZWVtZWQgdG9vIGNvbXBsZXguCi0gICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxl
T3B0aW9ucyAmIFNIX0xJTUlUX0VYUFJFU1NJT05fQ09NUExFWElUWSkpCi0gICAgICAgICAgICBz
dWNjZXNzID0gbGltaXRFeHByZXNzaW9uQ29tcGxleGl0eShyb290KTsKLQotICAgICAgICAvLyBD
YWxsIG1hcExvbmdWYXJpYWJsZU5hbWVzKCkgYmVmb3JlIGNvbGxlY3RBdHRyaWJzVW5pZm9ybXMo
KSBzbyBpbgotICAgICAgICAvLyBjb2xsZWN0QXR0cmlic1VuaWZvcm1zKCkgd2UgYWxyZWFkeSBo
YXZlIHRoZSBtYXBwZWQgc3ltYm9sIG5hbWVzIGFuZAotICAgICAgICAvLyB3ZSBjb3VsZCBjb21w
b3NpdGUgbWFwcGVkIGFuZCBvcmlnaW5hbCB2YXJpYWJsZSBuYW1lcy4KLSAgICAgICAgLy8gQWxz
bywgaWYgd2UgaGFzaCBhbGwgdGhlIG5hbWVzLCB0aGVuIG5vIG5lZWQgdG8gZG8gdGhpcyBmb3Ig
bG9uZyBuYW1lcy4KLSAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hf
TUFQX0xPTkdfVkFSSUFCTEVfTkFNRVMpICYmIGhhc2hGdW5jdGlvbiA9PSBOVUxMKQotICAgICAg
ICAgICAgbWFwTG9uZ1ZhcmlhYmxlTmFtZXMocm9vdCk7Ci0KLSAgICAgICAgaWYgKHN1Y2Nlc3Mg
JiYgc2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSICYmIChjb21waWxlT3B0aW9ucyAmIFNI
X0lOSVRfR0xfUE9TSVRJT04pKSB7Ci0gICAgICAgICAgICBJbml0aWFsaXplR0xQb3NpdGlvbiBp
bml0R0xQb3NpdGlvbjsKLSAgICAgICAgICAgIHJvb3QtPnRyYXZlcnNlKCZpbml0R0xQb3NpdGlv
bik7Ci0gICAgICAgIH0KLQotICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNI
X1VORk9MRF9TSE9SVF9DSVJDVUlUKSkgewotICAgICAgICAgICAgVW5mb2xkU2hvcnRDaXJjdWl0
QVNUIHVuZm9sZFNob3J0Q2lyY3VpdDsKLSAgICAgICAgICAgIHJvb3QtPnRyYXZlcnNlKCZ1bmZv
bGRTaG9ydENpcmN1aXQpOwotICAgICAgICAgICAgdW5mb2xkU2hvcnRDaXJjdWl0LnVwZGF0ZVRy
ZWUoKTsKLSAgICB9Ci0KLSAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYg
U0hfVkFSSUFCTEVTKSkgewotICAgICAgICAgICAgY29sbGVjdFZhcmlhYmxlcyhyb290KTsKLSAg
ICAgICAgICAgIGlmIChjb21waWxlT3B0aW9ucyAmIFNIX0VORk9SQ0VfUEFDS0lOR19SRVNUUklD
VElPTlMpCi0gICAgICAgICAgICAgICAgc3VjY2VzcyA9IGVuZm9yY2VQYWNraW5nUmVzdHJpY3Rp
b25zKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlv
bnMgJiBTSF9JTlRFUk1FRElBVEVfVFJFRSkpCi0gICAgICAgICAgICBpbnRlcm1lZGlhdGUub3V0
cHV0VHJlZShyb290KTsKLQotICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMg
JiBTSF9PQkpFQ1RfQ09ERSkpCi0gICAgICAgICAgICB0cmFuc2xhdGUocm9vdCk7Ci0gICAgfQot
Ci0gICAgLy8gQ2xlYW51cCBtZW1vcnkuCi0gICAgaW50ZXJtZWRpYXRlLnJlbW92ZShwYXJzZUNv
bnRleHQudHJlZVJvb3QpOwotCi0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLWJvb2wgVENvbXBp
bGVyOjpJbml0QnVpbHRJblN5bWJvbFRhYmxlKGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyAmcmVz
b3VyY2VzKQotewotICAgIGNvbXBpbGVSZXNvdXJjZXMgPSByZXNvdXJjZXM7Ci0KLSAgICBhc3Nl
cnQoc3ltYm9sVGFibGUuaXNFbXB0eSgpKTsKLSAgICBzeW1ib2xUYWJsZS5wdXNoKCk7Ci0KLSAg
ICBUUHVibGljVHlwZSBpbnRlZ2VyOwotICAgIGludGVnZXIudHlwZSA9IEVidEludDsKLSAgICBp
bnRlZ2VyLnNpemUgPSAxOwotICAgIGludGVnZXIubWF0cml4ID0gZmFsc2U7Ci0gICAgaW50ZWdl
ci5hcnJheSA9IGZhbHNlOwotCi0gICAgVFB1YmxpY1R5cGUgZmxvYXRpbmdQb2ludDsKLSAgICBm
bG9hdGluZ1BvaW50LnR5cGUgPSBFYnRGbG9hdDsKLSAgICBmbG9hdGluZ1BvaW50LnNpemUgPSAx
OwotICAgIGZsb2F0aW5nUG9pbnQubWF0cml4ID0gZmFsc2U7Ci0gICAgZmxvYXRpbmdQb2ludC5h
cnJheSA9IGZhbHNlOwotCi0gICAgVFB1YmxpY1R5cGUgc2FtcGxlcjsKLSAgICBzYW1wbGVyLnNp
emUgPSAxOwotICAgIHNhbXBsZXIubWF0cml4ID0gZmFsc2U7Ci0gICAgc2FtcGxlci5hcnJheSA9
IGZhbHNlOwotCi0gICAgc3dpdGNoKHNoYWRlclR5cGUpCi0gICAgewotICAgICAgY2FzZSBTSF9G
UkFHTUVOVF9TSEFERVI6Ci0gICAgICAgIHN5bWJvbFRhYmxlLnNldERlZmF1bHRQcmVjaXNpb24o
aW50ZWdlciwgRWJwTWVkaXVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFNIX1ZFUlRF
WF9TSEFERVI6Ci0gICAgICAgIHN5bWJvbFRhYmxlLnNldERlZmF1bHRQcmVjaXNpb24oaW50ZWdl
ciwgRWJwSGlnaCk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLnNldERlZmF1bHRQcmVjaXNpb24oZmxv
YXRpbmdQb2ludCwgRWJwSGlnaCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogYXNz
ZXJ0KGZhbHNlICYmICJMYW5ndWFnZSBub3Qgc3VwcG9ydGVkIik7Ci0gICAgfQotICAgIC8vIFdl
IHNldCBkZWZhdWx0cyBmb3IgYWxsIHRoZSBzYW1wbGVyIHR5cGVzLCBldmVuIHRob3NlIHRoYXQg
YXJlCi0gICAgLy8gb25seSBhdmFpbGFibGUgaWYgYW4gZXh0ZW5zaW9uIGV4aXN0cy4KLSAgICBm
b3IgKGludCBzYW1wbGVyVHlwZSA9IEVidEd1YXJkU2FtcGxlckJlZ2luICsgMTsKLSAgICAgICAg
IHNhbXBsZXJUeXBlIDwgRWJ0R3VhcmRTYW1wbGVyRW5kOyArK3NhbXBsZXJUeXBlKSB7Ci0gICAg
ICAgIHNhbXBsZXIudHlwZSA9IHN0YXRpY19jYXN0PFRCYXNpY1R5cGU+KHNhbXBsZXJUeXBlKTsK
LSAgICAgICAgc3ltYm9sVGFibGUuc2V0RGVmYXVsdFByZWNpc2lvbihzYW1wbGVyLCBFYnBMb3cp
OwotICAgIH0KLQotICAgIEluc2VydEJ1aWx0SW5GdW5jdGlvbnMoc2hhZGVyVHlwZSwgc2hhZGVy
U3BlYywgcmVzb3VyY2VzLCBzeW1ib2xUYWJsZSk7Ci0KLSAgICBJZGVudGlmeUJ1aWx0SW5zKHNo
YWRlclR5cGUsIHNoYWRlclNwZWMsIHJlc291cmNlcywgc3ltYm9sVGFibGUpOwotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXZvaWQgVENvbXBpbGVyOjpjbGVhclJlc3VsdHMoKQotewotICAgIGFy
cmF5Qm91bmRzQ2xhbXBlci5DbGVhbnVwKCk7Ci0gICAgaW5mb1NpbmsuaW5mby5lcmFzZSgpOwot
ICAgIGluZm9TaW5rLm9iai5lcmFzZSgpOwotICAgIGluZm9TaW5rLmRlYnVnLmVyYXNlKCk7Ci0K
LSAgICBhdHRyaWJzLmNsZWFyKCk7Ci0gICAgdW5pZm9ybXMuY2xlYXIoKTsKLSAgICB2YXJ5aW5n
cy5jbGVhcigpOwotCi0gICAgYnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuQ2xlYW51cCgpOwotCi0g
ICAgbmFtZU1hcC5jbGVhcigpOwotfQotCi1ib29sIFRDb21waWxlcjo6ZGV0ZWN0Q2FsbERlcHRo
KFRJbnRlcm1Ob2RlKiByb290LCBUSW5mb1NpbmsmIGluZm9TaW5rLCBib29sIGxpbWl0Q2FsbFN0
YWNrRGVwdGgpCi17Ci0gICAgRGV0ZWN0Q2FsbERlcHRoIGRldGVjdChpbmZvU2luaywgbGltaXRD
YWxsU3RhY2tEZXB0aCwgbWF4Q2FsbFN0YWNrRGVwdGgpOwotICAgIHJvb3QtPnRyYXZlcnNlKCZk
ZXRlY3QpOwotICAgIHN3aXRjaCAoZGV0ZWN0LmRldGVjdENhbGxEZXB0aCgpKSB7Ci0gICAgICAg
IGNhc2UgRGV0ZWN0Q2FsbERlcHRoOjprRXJyb3JOb25lOgotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIGNhc2UgRGV0ZWN0Q2FsbERlcHRoOjprRXJyb3JNaXNzaW5nTWFpbjoKLSAg
ICAgICAgICAgIGluZm9TaW5rLmluZm8ucHJlZml4KEVQcmVmaXhFcnJvcik7Ci0gICAgICAgICAg
ICBpbmZvU2luay5pbmZvIDw8ICJNaXNzaW5nIG1haW4oKSI7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGNhc2UgRGV0ZWN0Q2FsbERlcHRoOjprRXJyb3JSZWN1cnNpb246Ci0g
ICAgICAgICAgICBpbmZvU2luay5pbmZvLnByZWZpeChFUHJlZml4RXJyb3IpOwotICAgICAgICAg
ICAgaW5mb1NpbmsuaW5mbyA8PCAiRnVuY3Rpb24gcmVjdXJzaW9uIGRldGVjdGVkIjsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY2FzZSBEZXRlY3RDYWxsRGVwdGg6OmtFcnJv
ck1heERlcHRoRXhjZWVkZWQ6Ci0gICAgICAgICAgICBpbmZvU2luay5pbmZvLnByZWZpeChFUHJl
Zml4RXJyb3IpOwotICAgICAgICAgICAgaW5mb1NpbmsuaW5mbyA8PCAiRnVuY3Rpb24gY2FsbCBz
dGFjayB0b28gZGVlcCI7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLX0KLQotdm9pZCBUQ29tcGlsZXI6OnJld3JpdGVDU1NTaGFkZXIoVEludGVybU5v
ZGUqIHJvb3QpCi17Ci0gICAgUmVuYW1lRnVuY3Rpb24gcmVuYW1lcigibWFpbigiLCAiY3NzX21h
aW4oIik7Ci0gICAgcm9vdC0+dHJhdmVyc2UoJnJlbmFtZXIpOwotfQotCi1ib29sIFRDb21waWxl
cjo6dmFsaWRhdGVMaW1pdGF0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCkgewotICAgIFZhbGlkYXRl
TGltaXRhdGlvbnMgdmFsaWRhdGUoc2hhZGVyVHlwZSwgaW5mb1NpbmsuaW5mbyk7Ci0gICAgcm9v
dC0+dHJhdmVyc2UoJnZhbGlkYXRlKTsKLSAgICByZXR1cm4gdmFsaWRhdGUubnVtRXJyb3JzKCkg
PT0gMDsKLX0KLQotYm9vbCBUQ29tcGlsZXI6OmVuZm9yY2VUaW1pbmdSZXN0cmljdGlvbnMoVElu
dGVybU5vZGUqIHJvb3QsIGJvb2wgb3V0cHV0R3JhcGgpCi17Ci0gICAgaWYgKHNoYWRlclNwZWMg
IT0gU0hfV0VCR0xfU1BFQykgewotICAgICAgICBpbmZvU2luay5pbmZvIDw8ICJUaW1pbmcgcmVz
dHJpY3Rpb25zIG11c3QgYmUgZW5mb3JjZWQgdW5kZXIgdGhlIFdlYkdMIHNwZWMuIjsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChzaGFkZXJUeXBlID09IFNIX0ZSQUdN
RU5UX1NIQURFUikgewotICAgICAgICBURGVwZW5kZW5jeUdyYXBoIGdyYXBoKHJvb3QpOwotCi0g
ICAgICAgIC8vIE91dHB1dCBhbnkgZXJyb3JzIGZpcnN0LgotICAgICAgICBib29sIHN1Y2Nlc3Mg
PSBlbmZvcmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoZ3JhcGgpOwotICAgICAg
ICAKLSAgICAgICAgLy8gVGhlbiwgb3V0cHV0IHRoZSBkZXBlbmRlbmN5IGdyYXBoLgotICAgICAg
ICBpZiAob3V0cHV0R3JhcGgpIHsKLSAgICAgICAgICAgIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQg
b3V0cHV0KGluZm9TaW5rLmluZm8pOwotICAgICAgICAgICAgb3V0cHV0Lm91dHB1dEFsbFNwYW5u
aW5nVHJlZXMoZ3JhcGgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gc3Vj
Y2VzczsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIHJldHVybiBlbmZvcmNlVmVydGV4U2hh
ZGVyVGltaW5nUmVzdHJpY3Rpb25zKHJvb3QpOwotICAgIH0KLX0KLQotYm9vbCBUQ29tcGlsZXI6
OmxpbWl0RXhwcmVzc2lvbkNvbXBsZXhpdHkoVEludGVybU5vZGUqIHJvb3QpCi17Ci0gICAgVElu
dGVybVRyYXZlcnNlciB0cmF2ZXJzZXI7Ci0gICAgcm9vdC0+dHJhdmVyc2UoJnRyYXZlcnNlcik7
Ci0gICAgVERlcGVuZGVuY3lHcmFwaCBncmFwaChyb290KTsKLQotICAgIGZvciAoVEZ1bmN0aW9u
Q2FsbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGdyYXBoLmJlZ2luVXNlckRlZmluZWRG
dW5jdGlvbkNhbGxzKCk7Ci0gICAgICAgICBpdGVyICE9IGdyYXBoLmVuZFVzZXJEZWZpbmVkRnVu
Y3Rpb25DYWxscygpOwotICAgICAgICAgKytpdGVyKQotICAgIHsKLSAgICAgICAgVEdyYXBoRnVu
Y3Rpb25DYWxsKiBzYW1wbGVyU3ltYm9sID0gKml0ZXI7Ci0gICAgICAgIFREZXBlbmRlbmN5R3Jh
cGhUcmF2ZXJzZXIgZ3JhcGhUcmF2ZXJzZXI7Ci0gICAgICAgIHNhbXBsZXJTeW1ib2wtPnRyYXZl
cnNlKCZncmFwaFRyYXZlcnNlcik7Ci0gICAgfQotCi0gICAgaWYgKHRyYXZlcnNlci5nZXRNYXhE
ZXB0aCgpID4gbWF4RXhwcmVzc2lvbkNvbXBsZXhpdHkpIHsKLSAgICAgICAgaW5mb1NpbmsuaW5m
byA8PCAiRXhwcmVzc2lvbiB0b28gY29tcGxleC4iOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFRDb21waWxlcjo6ZW5mb3JjZUZyYWdt
ZW50U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBo
KQotewotICAgIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcgcmVzdHJpY3RvcihpbmZvU2lu
ay5pbmZvKTsKLSAgICByZXN0cmljdG9yLmVuZm9yY2VSZXN0cmljdGlvbnMoZ3JhcGgpOwotICAg
IHJldHVybiByZXN0cmljdG9yLm51bUVycm9ycygpID09IDA7Ci19Ci0KLWJvb2wgVENvbXBpbGVy
OjplbmZvcmNlVmVydGV4U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290
KQotewotICAgIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nIHJlc3RyaWN0b3IoaW5mb1Npbmsu
aW5mbyk7Ci0gICAgcmVzdHJpY3Rvci5lbmZvcmNlUmVzdHJpY3Rpb25zKHJvb3QpOwotICAgIHJl
dHVybiByZXN0cmljdG9yLm51bUVycm9ycygpID09IDA7Ci19Ci0KLXZvaWQgVENvbXBpbGVyOjpj
b2xsZWN0VmFyaWFibGVzKFRJbnRlcm1Ob2RlKiByb290KQotewotICAgIENvbGxlY3RWYXJpYWJs
ZXMgY29sbGVjdChhdHRyaWJzLCB1bmlmb3JtcywgdmFyeWluZ3MsIGhhc2hGdW5jdGlvbik7Ci0g
ICAgcm9vdC0+dHJhdmVyc2UoJmNvbGxlY3QpOwotfQotCi1ib29sIFRDb21waWxlcjo6ZW5mb3Jj
ZVBhY2tpbmdSZXN0cmljdGlvbnMoKQotewotICAgIFZhcmlhYmxlUGFja2VyIHBhY2tlcjsKLSAg
ICBib29sIHN1Y2Nlc3MgPSBwYWNrZXIuQ2hlY2tWYXJpYWJsZXNXaXRoaW5QYWNraW5nTGltaXRz
KG1heFVuaWZvcm1WZWN0b3JzLCB1bmlmb3Jtcyk7Ci0gICAgaWYgKCFzdWNjZXNzKSB7Ci0gICAg
ICAgIGluZm9TaW5rLmluZm8ucHJlZml4KEVQcmVmaXhFcnJvcik7Ci0gICAgICAgIGluZm9TaW5r
LmluZm8gPDwgInRvbyBtYW55IHVuaWZvcm1zIjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIHN1Y2Nlc3MgPSBwYWNrZXIuQ2hlY2tWYXJpYWJsZXNXaXRoaW5QYWNraW5nTGlt
aXRzKG1heFZhcnlpbmdWZWN0b3JzLCB2YXJ5aW5ncyk7Ci0KLSAgICBpZiAoIXN1Y2Nlc3MpIHsK
LSAgICAgICAgaW5mb1NpbmsuaW5mby5wcmVmaXgoRVByZWZpeEVycm9yKTsKLSAgICAgICAgaW5m
b1NpbmsuaW5mbyA8PCAidG9vIG1hbnkgdmFyeWluZ3MiOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgVENvbXBpbGVyOjptYXBMb25n
VmFyaWFibGVOYW1lcyhUSW50ZXJtTm9kZSogcm9vdCkKLXsKLSAgICBBU1NFUlQobG9uZ05hbWVN
YXApOwotICAgIE1hcExvbmdWYXJpYWJsZU5hbWVzIG1hcChsb25nTmFtZU1hcCk7Ci0gICAgcm9v
dC0+dHJhdmVyc2UoJm1hcCk7Ci19Ci0KLWludCBUQ29tcGlsZXI6OmdldE1hcHBlZE5hbWVNYXhM
ZW5ndGgoKSBjb25zdAotewotICAgIHJldHVybiBNQVhfU0hPUlRFTkVEX0lERU5USUZJRVJfU0la
RSArIDE7Ci19Ci0KLWNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgVENvbXBpbGVyOjpnZXRFeHRl
bnNpb25CZWhhdmlvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGV4dGVuc2lvbkJlaGF2aW9yOwot
fQotCi1jb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIFRDb21waWxlcjo6Z2V0UmVzb3VyY2VzKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gY29tcGlsZVJlc291cmNlczsKLX0KLQotY29uc3QgQXJyYXlC
b3VuZHNDbGFtcGVyJiBUQ29tcGlsZXI6OmdldEFycmF5Qm91bmRzQ2xhbXBlcigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGFycmF5Qm91bmRzQ2xhbXBlcjsKLX0KLQotU2hBcnJheUluZGV4Q2xhbXBp
bmdTdHJhdGVneSBUQ29tcGlsZXI6OmdldEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gY2xhbXBpbmdTdHJhdGVneTsKLX0KLQotY29uc3QgQnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3ImIFRDb21waWxlcjo6Z2V0QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IoKSBj
b25zdAotewotICAgIHJldHVybiBidWlsdEluRnVuY3Rpb25FbXVsYXRvcjsKLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db25zdGFudFVuaW9uLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29uc3RhbnRVbmlvbi5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWUzNzg4NWY5MDFiMDI0ZDYzNDY1ODQ3NzEy
YmZiNjg4NjA3MzRjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db25zdGFudFVuaW9uLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwyNTcgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lm
bmRlZiBfQ09OU1RBTlRfVU5JT05fSU5DTFVERURfCi0jZGVmaW5lIF9DT05TVEFOVF9VTklPTl9J
TkNMVURFRF8KLQotI2luY2x1ZGUgPGFzc2VydC5oPgotCi1jbGFzcyBDb25zdGFudFVuaW9uIHsK
LXB1YmxpYzoKLSAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKCk7Ci0gICAgQ29uc3RhbnRV
bmlvbigpCi0gICAgewotICAgICAgICBpQ29uc3QgPSAwOwotICAgICAgICB0eXBlID0gRWJ0Vm9p
ZDsKLSAgICB9Ci0KLSAgICB2b2lkIHNldElDb25zdChpbnQgaSkge2lDb25zdCA9IGk7IHR5cGUg
PSBFYnRJbnQ7IH0KLSAgICB2b2lkIHNldEZDb25zdChmbG9hdCBmKSB7ZkNvbnN0ID0gZjsgdHlw
ZSA9IEVidEZsb2F0OyB9Ci0gICAgdm9pZCBzZXRCQ29uc3QoYm9vbCBiKSB7YkNvbnN0ID0gYjsg
dHlwZSA9IEVidEJvb2w7IH0KLQotICAgIGludCBnZXRJQ29uc3QoKSB7IHJldHVybiBpQ29uc3Q7
IH0KLSAgICBmbG9hdCBnZXRGQ29uc3QoKSB7IHJldHVybiBmQ29uc3Q7IH0KLSAgICBib29sIGdl
dEJDb25zdCgpIHsgcmV0dXJuIGJDb25zdDsgfQotICAgIGludCBnZXRJQ29uc3QoKSBjb25zdCB7
IHJldHVybiBpQ29uc3Q7IH0KLSAgICBmbG9hdCBnZXRGQ29uc3QoKSBjb25zdCB7IHJldHVybiBm
Q29uc3Q7IH0KLSAgICBib29sIGdldEJDb25zdCgpIGNvbnN0IHsgcmV0dXJuIGJDb25zdDsgfQot
Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGludCBpKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIGkgPT0gaUNvbnN0OwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBm
bG9hdCBmKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGYgPT0gZkNvbnN0OwotICAgIH0K
LQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBib29sIGIpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gYiA9PSBiQ29uc3Q7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGNvbnN0
YW50LnR5cGUgIT0gdHlwZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBz
d2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAgICAgICByZXR1cm4g
Y29uc3RhbnQuaUNvbnN0ID09IGlDb25zdDsKLSAgICAgICAgY2FzZSBFYnRGbG9hdDoKLSAgICAg
ICAgICAgIHJldHVybiBjb25zdGFudC5mQ29uc3QgPT0gZkNvbnN0OwotICAgICAgICBjYXNlIEVi
dEJvb2w6Ci0gICAgICAgICAgICByZXR1cm4gY29uc3RhbnQuYkNvbnN0ID09IGJDb25zdDsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpbnQgaSkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiAhb3BlcmF0b3I9PShpKTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgZmxvYXQgZikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAhb3BlcmF0b3I9PShm
KTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgYm9vbCBiKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KGIpOwotICAgIH0KLQotICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiAhb3BlcmF0b3I9PShjb25zdGFudCk7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVy
YXRvcj4oY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0Ci0gICAgeyAKLSAgICAg
ICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkg
ewotICAgICAgICBjYXNlIEVidEludDoKLSAgICAgICAgICAgIHJldHVybiBpQ29uc3QgPiBjb25z
dGFudC5pQ29uc3Q7Ci0gICAgICAgIGNhc2UgRWJ0RmxvYXQ6Ci0gICAgICAgICAgICByZXR1cm4g
ZkNvbnN0ID4gY29uc3RhbnQuZkNvbnN0OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOyAgIC8vIEludmFsaWQgb3BlcmF0aW9uLCBoYW5kbGVkIGF0IHNlbWFudGlj
IGFuYWx5c2lzCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPChjb25zdCBD
b25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKLSAgICB7IAotICAgICAgICBhc3NlcnQodHlw
ZSA9PSBjb25zdGFudC50eXBlKTsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNh
c2UgRWJ0SW50OgotICAgICAgICAgICAgcmV0dXJuIGlDb25zdCA8IGNvbnN0YW50LmlDb25zdDsK
LSAgICAgICAgY2FzZSBFYnRGbG9hdDoKLSAgICAgICAgICAgIHJldHVybiBmQ29uc3QgPCBjb25z
dGFudC5mQ29uc3Q7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
ICAgLy8gSW52YWxpZCBvcGVyYXRpb24sIGhhbmRsZWQgYXQgc2VtYW50aWMgYW5hbHlzaXMKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIENvbnN0YW50VW5pb24gb3BlcmF0b3IrKGNvbnN0IENvbnN0
YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAotICAgIHsgCi0gICAgICAgIENvbnN0YW50VW5pb24g
cmV0dXJuVmFsdWU7Ci0gICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwotICAg
ICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNl
dElDb25zdChpQ29uc3QgKyBjb25zdGFudC5pQ29uc3QpOyBicmVhazsKLSAgICAgICAgY2FzZSBF
YnRGbG9hdDogcmV0dXJuVmFsdWUuc2V0RkNvbnN0KGZDb25zdCArIGNvbnN0YW50LmZDb25zdCk7
IGJyZWFrOwotICAgICAgICBkZWZhdWx0OiBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2lu
ZyIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwotICAgIH0KLQot
ICAgIENvbnN0YW50VW5pb24gb3BlcmF0b3ItKGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50
KSBjb25zdAotICAgIHsgCi0gICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7Ci0gICAg
ICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwotICAgICAgICBzd2l0Y2ggKHR5cGUp
IHsKLSAgICAgICAgY2FzZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgLSBj
b25zdGFudC5pQ29uc3QpOyBicmVhazsKLSAgICAgICAgY2FzZSBFYnRGbG9hdDogcmV0dXJuVmFs
dWUuc2V0RkNvbnN0KGZDb25zdCAtIGNvbnN0YW50LmZDb25zdCk7IGJyZWFrOwotICAgICAgICBk
ZWZhdWx0OiBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOwotICAgICAgICB9Ci0K
LSAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwotICAgIH0KLQotICAgIENvbnN0YW50VW5pb24g
b3BlcmF0b3IqKGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAotICAgIHsgCi0g
ICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7Ci0gICAgICAgIGFzc2VydCh0eXBlID09
IGNvbnN0YW50LnR5cGUpOwotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBF
YnRJbnQ6IHJldHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgKiBjb25zdGFudC5pQ29uc3QpOyBi
cmVhazsKLSAgICAgICAgY2FzZSBFYnRGbG9hdDogcmV0dXJuVmFsdWUuc2V0RkNvbnN0KGZDb25z
dCAqIGNvbnN0YW50LmZDb25zdCk7IGJyZWFrOyAKLSAgICAgICAgZGVmYXVsdDogYXNzZXJ0KGZh
bHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBy
ZXR1cm5WYWx1ZTsKLSAgICB9Ci0KLSAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yJShjb25zdCBD
b25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKLSAgICB7IAotICAgICAgICBDb25zdGFudFVu
aW9uIHJldHVyblZhbHVlOwotICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsK
LSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1
ZS5zZXRJQ29uc3QoaUNvbnN0ICUgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7Ci0gICAgICAgIGRl
ZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOwotICAgICAgICB9
Ci0KLSAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwotICAgIH0KLQotICAgIENvbnN0YW50VW5p
b24gb3BlcmF0b3I+Pihjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKLSAgICB7
IAotICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOwotICAgICAgICBhc3NlcnQodHlw
ZSA9PSBjb25zdGFudC50eXBlKTsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNh
c2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0ID4+IGNvbnN0YW50LmlDb25z
dCk7IGJyZWFrOwotICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0
IG1pc3NpbmciKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLSAg
ICB9Ci0KLSAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yPDwoY29uc3QgQ29uc3RhbnRVbmlvbiYg
Y29uc3RhbnQpIGNvbnN0Ci0gICAgeyAKLSAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1
ZTsKLSAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7Ci0gICAgICAgIHN3aXRj
aCAodHlwZSkgewotICAgICAgICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlD
b25zdCA8PCBjb25zdGFudC5pQ29uc3QpOyBicmVhazsKLSAgICAgICAgZGVmYXVsdDogICAgIGFz
c2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7Ci0gICAgICAgIH0KLQotICAgICAgICBy
ZXR1cm4gcmV0dXJuVmFsdWU7Ci0gICAgfQotCi0gICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvciYo
Y29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0Ci0gICAgeyAKLSAgICAgICAgQ29u
c3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKLSAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQu
dHlwZSk7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEVidEludDogIHJl
dHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgJiBjb25zdGFudC5pQ29uc3QpOyBicmVhazsKLSAg
ICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci0gICAgfQotCi0gICAgQ29u
c3RhbnRVbmlvbiBvcGVyYXRvcnwoY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0
Ci0gICAgeyAKLSAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKLSAgICAgICAgYXNz
ZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAg
ICAgICBjYXNlIEVidEludDogIHJldHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgfCBjb25zdGFu
dC5pQ29uc3QpOyBicmVhazsKLSAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAi
RGVmYXVsdCBtaXNzaW5nIik7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmV0dXJuVmFs
dWU7Ci0gICAgfQotCi0gICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvcl4oY29uc3QgQ29uc3RhbnRV
bmlvbiYgY29uc3RhbnQpIGNvbnN0Ci0gICAgeyAKLSAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1
cm5WYWx1ZTsKLSAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7Ci0gICAgICAg
IHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEVidEludDogIHJldHVyblZhbHVlLnNldElD
b25zdChpQ29uc3QgXiBjb25zdGFudC5pQ29uc3QpOyBicmVhazsKLSAgICAgICAgZGVmYXVsdDog
ICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci0gICAgfQotCi0gICAgQ29uc3RhbnRVbmlvbiBvcGVy
YXRvciYmKGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAotICAgIHsgCi0gICAg
ICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7Ci0gICAgICAgIGFzc2VydCh0eXBlID09IGNv
bnN0YW50LnR5cGUpOwotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBFYnRC
b29sOiByZXR1cm5WYWx1ZS5zZXRCQ29uc3QoYkNvbnN0ICYmIGNvbnN0YW50LmJDb25zdCk7IGJy
ZWFrOwotICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3Np
bmciKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLSAgICB9Ci0K
LSAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yfHwoY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3Rh
bnQpIGNvbnN0Ci0gICAgeyAKLSAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKLSAg
ICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7Ci0gICAgICAgIHN3aXRjaCAodHlw
ZSkgewotICAgICAgICBjYXNlIEVidEJvb2w6IHJldHVyblZhbHVlLnNldEJDb25zdChiQ29uc3Qg
fHwgY29uc3RhbnQuYkNvbnN0KTsgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQo
ZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
IHJldHVyblZhbHVlOwotICAgIH0KLQotICAgIFRCYXNpY1R5cGUgZ2V0VHlwZSgpIGNvbnN0IHsg
cmV0dXJuIHR5cGU7IH0KLXByaXZhdGU6Ci0KLSAgICB1bmlvbiAgewotICAgICAgICBpbnQgaUNv
bnN0OyAgLy8gdXNlZCBmb3IgaXZlYywgc2NhbGFyIGludHMKLSAgICAgICAgYm9vbCBiQ29uc3Q7
IC8vIHVzZWQgZm9yIGJ2ZWMsIHNjYWxhciBib29scwotICAgICAgICBmbG9hdCBmQ29uc3Q7ICAg
Ly8gdXNlZCBmb3IgdmVjLCBtYXQsIHNjYWxhciBmbG9hdHMKLSAgICB9IDsKLQotICAgIFRCYXNp
Y1R5cGUgdHlwZTsKLX07Ci0KLSNlbmRpZiAvLyBfQ09OU1RBTlRfVU5JT05fSU5DTFVERURfCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0Q2Fs
bERlcHRoLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3RD
YWxsRGVwdGguY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGRmNTJjNzE1MWE4
OTZhMThiZjZjYmQyMGIzZjYzNDU5NTg5NjZmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9E
ZXRlY3RDYWxsRGVwdGguY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTg1ICswLDAgQEAKLS8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9EZXRlY3RDYWxsRGVwdGguaCIKLSNp
bmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgotCi1EZXRlY3RDYWxsRGVwdGg6OkZ1bmN0aW9u
Tm9kZTo6RnVuY3Rpb25Ob2RlKGNvbnN0IFRTdHJpbmcmIGZuYW1lKQotICAgIDogbmFtZShmbmFt
ZSksCi0gICAgICB2aXNpdChQcmVWaXNpdCkKLXsKLX0KLQotY29uc3QgVFN0cmluZyYgRGV0ZWN0
Q2FsbERlcHRoOjpGdW5jdGlvbk5vZGU6OmdldE5hbWUoKSBjb25zdAotewotICAgIHJldHVybiBu
YW1lOwotfQotCi12b2lkIERldGVjdENhbGxEZXB0aDo6RnVuY3Rpb25Ob2RlOjphZGRDYWxsZWUo
Ci0gICAgRGV0ZWN0Q2FsbERlcHRoOjpGdW5jdGlvbk5vZGUqIGNhbGxlZSkKLXsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNhbGxlZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGNh
bGxlZXNbaV0gPT0gY2FsbGVlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjYWxs
ZWVzLnB1c2hfYmFjayhjYWxsZWUpOwotfQotCi1pbnQgRGV0ZWN0Q2FsbERlcHRoOjpGdW5jdGlv
bk5vZGU6OmRldGVjdENhbGxEZXB0aChEZXRlY3RDYWxsRGVwdGgqIGRldGVjdENhbGxEZXB0aCwg
aW50IGRlcHRoKQotewotICAgIEFTU0VSVCh2aXNpdCA9PSBQcmVWaXNpdCk7Ci0gICAgQVNTRVJU
KGRldGVjdENhbGxEZXB0aCk7Ci0KLSAgICBpbnQgbWF4RGVwdGggPSBkZXB0aDsKLSAgICB2aXNp
dCA9IEluVmlzaXQ7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjYWxsZWVzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIHN3aXRjaCAoY2FsbGVlc1tpXS0+dmlzaXQpIHsKLSAgICAgICAgICAg
IGNhc2UgSW5WaXNpdDoKLSAgICAgICAgICAgICAgICAvLyBjeWNsZSBkZXRlY3RlZCwgaS5lLiwg
cmVjdXJzaW9uIGRldGVjdGVkLgotICAgICAgICAgICAgICAgIHJldHVybiBrSW5maW5pdGVDYWxs
RGVwdGg7Ci0gICAgICAgICAgICBjYXNlIFBvc3RWaXNpdDoKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgUHJlVmlzaXQ6IHsKLSAgICAgICAgICAgICAgICAvLyBDaGVj
ayBiZWZvcmUgd2UgcmVjdXJzZSBzbyB3ZSBkb24ndCBnbyB0b28gZGVwdGgKLSAgICAgICAgICAg
ICAgICBpZiAoZGV0ZWN0Q2FsbERlcHRoLT5jaGVja0V4Y2VlZHNNYXhEZXB0aChkZXB0aCkpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBkZXB0aDsKLSAgICAgICAgICAgICAgICBpbnQgY2Fs
bERlcHRoID0gY2FsbGVlc1tpXS0+ZGV0ZWN0Q2FsbERlcHRoKGRldGVjdENhbGxEZXB0aCwgZGVw
dGggKyAxKTsKLSAgICAgICAgICAgICAgICAvLyBDaGVjayBhZnRlciB3ZSByZWN1cnNlIHNvIHdl
IGNhbiBleGl0IGltbWVkaWF0ZWx5IGFuZCBwcm92aWRlIGluZm8uCi0gICAgICAgICAgICAgICAg
aWYgKGRldGVjdENhbGxEZXB0aC0+Y2hlY2tFeGNlZWRzTWF4RGVwdGgoY2FsbERlcHRoKSkgewot
ICAgICAgICAgICAgICAgICAgICBkZXRlY3RDYWxsRGVwdGgtPmdldEluZm9TaW5rKCkuaW5mbyA8
PCAiPC0iIDw8IGNhbGxlZXNbaV0tPmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGNhbGxEZXB0aDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbWF4RGVw
dGggPSBzdGQ6Om1heChjYWxsRGVwdGgsIG1heERlcHRoKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
VU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0K
LSAgICB2aXNpdCA9IFBvc3RWaXNpdDsKLSAgICByZXR1cm4gbWF4RGVwdGg7Ci19Ci0KLXZvaWQg
RGV0ZWN0Q2FsbERlcHRoOjpGdW5jdGlvbk5vZGU6OnJlc2V0KCkKLXsKLSAgICB2aXNpdCA9IFBy
ZVZpc2l0OwotfQotCi1EZXRlY3RDYWxsRGVwdGg6OkRldGVjdENhbGxEZXB0aChUSW5mb1Npbmsm
IGluZm9TaW5rLCBib29sIGxpbWl0Q2FsbFN0YWNrRGVwdGgsIGludCBtYXhDYWxsU3RhY2tEZXB0
aCkKLSAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIHRydWUsIGZhbHNlKSwKLSAg
ICAgIGN1cnJlbnRGdW5jdGlvbihOVUxMKSwKLSAgICAgIGluZm9TaW5rKGluZm9TaW5rKSwKLSAg
ICAgIG1heERlcHRoKGxpbWl0Q2FsbFN0YWNrRGVwdGggPyBtYXhDYWxsU3RhY2tEZXB0aCA6IEZ1
bmN0aW9uTm9kZTo6a0luZmluaXRlQ2FsbERlcHRoKQotewotfQotCi1EZXRlY3RDYWxsRGVwdGg6
On5EZXRlY3RDYWxsRGVwdGgoKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rp
b25zLnNpemUoKTsgKytpKQotICAgICAgICBkZWxldGUgZnVuY3Rpb25zW2ldOwotfQotCi1ib29s
IERldGVjdENhbGxEZXB0aDo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dy
ZWdhdGUqIG5vZGUpCi17Ci0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQotICAgIHsKLSAgICAg
ICAgY2FzZSBFT3BQcm90b3R5cGU6Ci0gICAgICAgICAgICAvLyBGdW5jdGlvbiBkZWNsYXJhdGlv
bi4KLSAgICAgICAgICAgIC8vIERvbid0IGFkZCBGdW5jdGlvbk5vZGUgaGVyZSBiZWNhdXNlIG5v
ZGUtPmdldE5hbWUoKSBpcyB0aGUKLSAgICAgICAgICAgIC8vIHVubWFuZ2xlZCBmdW5jdGlvbiBu
YW1lLgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wRnVuY3Rpb246IHsKLSAg
ICAgICAgICAgIC8vIEZ1bmN0aW9uIGRlZmluaXRpb24uCi0gICAgICAgICAgICBpZiAodmlzaXQg
PT0gUHJlVmlzaXQpIHsKLSAgICAgICAgICAgICAgICBjdXJyZW50RnVuY3Rpb24gPSBmaW5kRnVu
Y3Rpb25CeU5hbWUobm9kZS0+Z2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoY3VycmVu
dEZ1bmN0aW9uID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudEZ1bmN0aW9u
ID0gbmV3IEZ1bmN0aW9uTm9kZShub2RlLT5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgICAg
ICBmdW5jdGlvbnMucHVzaF9iYWNrKGN1cnJlbnRGdW5jdGlvbik7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSBlbHNlIGlmICh2aXNpdCA9PSBQb3N0VmlzaXQpIHsKLSAgICAgICAg
ICAgICAgICBjdXJyZW50RnVuY3Rpb24gPSBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBFT3BGdW5jdGlvbkNhbGw6IHsKLSAg
ICAgICAgICAgIC8vIEZ1bmN0aW9uIGNhbGwuCi0gICAgICAgICAgICBpZiAodmlzaXQgPT0gUHJl
VmlzaXQpIHsKLSAgICAgICAgICAgICAgICBGdW5jdGlvbk5vZGUqIGZ1bmMgPSBmaW5kRnVuY3Rp
b25CeU5hbWUobm9kZS0+Z2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoZnVuYyA9PSBO
VUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZ1bmMgPSBuZXcgRnVuY3Rpb25Ob2RlKG5vZGUt
PmdldE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9ucy5wdXNoX2JhY2soZnVu
Yyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50RnVuY3Rp
b24pCi0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGdW5jdGlvbi0+YWRkQ2FsbGVlKGZ1bmMp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBEZXRlY3RDYWxsRGVwdGg6OmNoZWNrRXhjZWVkc01heERlcHRoKGludCBkZXB0aCkK
LXsKLSAgICByZXR1cm4gZGVwdGggPj0gbWF4RGVwdGg7Ci19Ci0KLXZvaWQgRGV0ZWN0Q2FsbERl
cHRoOjpyZXNldEZ1bmN0aW9uTm9kZXMoKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
ZnVuY3Rpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGZ1bmN0aW9uc1tpXS0+cmVzZXQoKTsK
LSAgICB9Ci19Ci0KLURldGVjdENhbGxEZXB0aDo6RXJyb3JDb2RlIERldGVjdENhbGxEZXB0aDo6
ZGV0ZWN0Q2FsbERlcHRoRm9yRnVuY3Rpb24oRnVuY3Rpb25Ob2RlKiBmdW5jKQotewotICAgIGN1
cnJlbnRGdW5jdGlvbiA9IE5VTEw7Ci0gICAgcmVzZXRGdW5jdGlvbk5vZGVzKCk7Ci0KLSAgICBp
bnQgbWF4Q2FsbERlcHRoID0gZnVuYy0+ZGV0ZWN0Q2FsbERlcHRoKHRoaXMsIDEpOwotCi0gICAg
aWYgKG1heENhbGxEZXB0aCA9PSBGdW5jdGlvbk5vZGU6OmtJbmZpbml0ZUNhbGxEZXB0aCkKLSAg
ICAgICAgcmV0dXJuIGtFcnJvclJlY3Vyc2lvbjsKLQotICAgIGlmIChtYXhDYWxsRGVwdGggPj0g
bWF4RGVwdGgpCi0gICAgICAgIHJldHVybiBrRXJyb3JNYXhEZXB0aEV4Y2VlZGVkOwotCi0gICAg
cmV0dXJuIGtFcnJvck5vbmU7Ci19Ci0KLURldGVjdENhbGxEZXB0aDo6RXJyb3JDb2RlIERldGVj
dENhbGxEZXB0aDo6ZGV0ZWN0Q2FsbERlcHRoKCkKLXsKLSAgICBpZiAobWF4RGVwdGggIT0gRnVu
Y3Rpb25Ob2RlOjprSW5maW5pdGVDYWxsRGVwdGgpIHsKLSAgICAgICAgLy8gQ2hlY2sgYWxsIGZ1
bmN0aW9ucyBiZWNhdXNlIHRoZSBkcml2ZXIgbWF5IGZhaWwgb24gdGhlbQotICAgICAgICAvLyBU
T0RPOiBCZWZvcmUgZGV0ZWN0aW5nUmVjdXJzaW9uLCBzdHJpcCB1bnVzZWQgZnVuY3Rpb25zLgot
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9ucy5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgRXJyb3JDb2RlIGVycm9yID0gZGV0ZWN0Q2FsbERlcHRoRm9yRnVuY3Rpb24o
ZnVuY3Rpb25zW2ldKTsKLSAgICAgICAgICAgIGlmIChlcnJvciAhPSBrRXJyb3JOb25lKQotICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcjsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIEZ1bmN0aW9uTm9kZSogbWFpbiA9IGZpbmRGdW5jdGlvbkJ5TmFtZSgibWFpbigiKTsKLSAg
ICAgICAgaWYgKG1haW4gPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBrRXJyb3JNaXNzaW5n
TWFpbjsKLQotICAgICAgICByZXR1cm4gZGV0ZWN0Q2FsbERlcHRoRm9yRnVuY3Rpb24obWFpbik7
Ci0gICAgfQotCi0gICAgcmV0dXJuIGtFcnJvck5vbmU7Ci19Ci0KLURldGVjdENhbGxEZXB0aDo6
RnVuY3Rpb25Ob2RlKiBEZXRlY3RDYWxsRGVwdGg6OmZpbmRGdW5jdGlvbkJ5TmFtZSgKLSAgICBj
b25zdCBUU3RyaW5nJiBuYW1lKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rp
b25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChmdW5jdGlvbnNbaV0tPmdldE5hbWUoKSA9
PSBuYW1lKQotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uc1tpXTsKLSAgICB9Ci0gICAgcmV0
dXJuIE5VTEw7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9EZXRlY3RDYWxsRGVwdGguaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9EZXRlY3RDYWxsRGVwdGguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ODllODVmODhmNmVhMjY4ZGQ0ZTUwNTRmNjViY2ZhOWIxMTc1ZmE3Yy4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvRGV0ZWN0Q2FsbERlcHRoLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCww
IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX0RFVEVDVF9SRUNVUlNJ
T05fSF8KLSNkZWZpbmUgQ09NUElMRVJfREVURUNUX1JFQ1VSU0lPTl9IXwotCi0jaW5jbHVkZSAi
R0xTTEFORy9TaGFkZXJMYW5nLmgiCi0KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlICJj
b21waWxlci9pbnRlcm1lZGlhdGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9WYXJpYWJsZUluZm8u
aCIKLQotY2xhc3MgVEluZm9TaW5rOwotCi0vLyBUcmF2ZXJzZXMgaW50ZXJtZWRpYXRlIHRyZWUg
dG8gZGV0ZWN0IGZ1bmN0aW9uIHJlY3Vyc2lvbi4KLWNsYXNzIERldGVjdENhbGxEZXB0aCA6IHB1
YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKLXB1YmxpYzoKLSAgICBlbnVtIEVycm9yQ29kZSB7Ci0g
ICAgICAgIGtFcnJvck1pc3NpbmdNYWluLAotICAgICAgICBrRXJyb3JSZWN1cnNpb24sCi0gICAg
ICAgIGtFcnJvck1heERlcHRoRXhjZWVkZWQsCi0gICAgICAgIGtFcnJvck5vbmUKLSAgICB9Owot
Ci0gICAgRGV0ZWN0Q2FsbERlcHRoKFRJbmZvU2luayYgaW5mb1N5bmMsIGJvb2wgbGltaXRDYWxs
U3RhY2tEZXB0aCwgaW50IG1heENhbGxTdGFja0RlcHRoKTsKLSAgICB+RGV0ZWN0Q2FsbERlcHRo
KCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dy
ZWdhdGUqKTsKLQotICAgIGJvb2wgY2hlY2tFeGNlZWRzTWF4RGVwdGgoaW50IGRlcHRoKTsKLQot
ICAgIEVycm9yQ29kZSBkZXRlY3RDYWxsRGVwdGgoKTsKLQotcHJpdmF0ZToKLSAgICBjbGFzcyBG
dW5jdGlvbk5vZGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBrSW5m
aW5pdGVDYWxsRGVwdGggPSBJTlRfTUFYOwotCi0gICAgICAgIEZ1bmN0aW9uTm9kZShjb25zdCBU
U3RyaW5nJiBmbmFtZSk7Ci0KLSAgICAgICAgY29uc3QgVFN0cmluZyYgZ2V0TmFtZSgpIGNvbnN0
OwotCi0gICAgICAgIC8vIElmIGEgZnVuY3Rpb24gaXMgYWxyZWFkeSBpbiB0aGUgY2FsbGVlIGxp
c3QsIHRoaXMgYmVjb21lcyBhIG5vLW9wLgotICAgICAgICB2b2lkIGFkZENhbGxlZShGdW5jdGlv
bk5vZGUqIGNhbGxlZSk7Ci0KLSAgICAgICAgLy8gUmV0dXJucyBrSW5pZmluaXR5Q2FsbERlcHRo
IGlmIHJlY3Vyc2l2ZSBmdW5jdGlvbiBjYWxscyBhcmUgZGV0ZWN0ZWQuCi0gICAgICAgIGludCBk
ZXRlY3RDYWxsRGVwdGgoRGV0ZWN0Q2FsbERlcHRoKiBkZXRlY3RDYWxsRGVwdGgsIGludCBkZXB0
aCk7Ci0KLSAgICAgICAgLy8gUmVzZXQgc3RhdGUuCi0gICAgICAgIHZvaWQgcmVzZXQoKTsKLQot
ICAgIHByaXZhdGU6Ci0gICAgICAgIC8vIG1hbmdsZWQgZnVuY3Rpb24gbmFtZSBpcyB1bmlxdWUu
Ci0gICAgICAgIFRTdHJpbmcgbmFtZTsKLQotICAgICAgICAvLyBmdW5jdGlvbnMgdGhhdCBhcmUg
ZGlyZWN0bHkgY2FsbGVkIGJ5IHRoaXMgZnVuY3Rpb24uCi0gICAgICAgIFRWZWN0b3I8RnVuY3Rp
b25Ob2RlKj4gY2FsbGVlczsKLQotICAgICAgICBWaXNpdCB2aXNpdDsKLSAgICB9OwotCi0gICAg
RXJyb3JDb2RlIGRldGVjdENhbGxEZXB0aEZvckZ1bmN0aW9uKEZ1bmN0aW9uTm9kZSogZnVuYyk7
Ci0gICAgRnVuY3Rpb25Ob2RlKiBmaW5kRnVuY3Rpb25CeU5hbWUoY29uc3QgVFN0cmluZyYgbmFt
ZSk7Ci0gICAgdm9pZCByZXNldEZ1bmN0aW9uTm9kZXMoKTsKLQotICAgIFRJbmZvU2luayYgZ2V0
SW5mb1NpbmsoKSB7IHJldHVybiBpbmZvU2luazsgfQotCi0gICAgVFZlY3RvcjxGdW5jdGlvbk5v
ZGUqPiBmdW5jdGlvbnM7Ci0gICAgRnVuY3Rpb25Ob2RlKiBjdXJyZW50RnVuY3Rpb247Ci0gICAg
VEluZm9TaW5rJiBpbmZvU2luazsKLSAgICBpbnQgbWF4RGVwdGg7Ci0KLSAgICBEZXRlY3RDYWxs
RGVwdGgoY29uc3QgRGV0ZWN0Q2FsbERlcHRoJik7Ci0gICAgdm9pZCBvcGVyYXRvcj0oY29uc3Qg
RGV0ZWN0Q2FsbERlcHRoJik7Ci19OwotCi0jZW5kaWYgIC8vIENPTVBJTEVSX0RFVEVDVF9SRUNV
UlNJT05fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9EZXRlY3REaXNjb250aW51aXR5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggOGNmZTQ5YmEyMjQyYThkY2YyY2U2OThkOWMzZWE2MDZjOTk3OTI0ZS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwxMzkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0vLyBDb250YWlucyBhbmFseXNpcyB1dGls
aXRpZXMgZm9yIGRlYWxpbmcgd2l0aCBITFNMJ3MgbGFjayBvZiBzdXBwb3J0IGZvcgotLy8gdGhl
IHVzZSBvZiBpbnRyaW5zaWMgZnVuY3Rpb25zIHdoaWNoIChpbXBsaWNpdGx5IG9yIGV4cGxpY2l0
bHkpIGNvbXB1dGUKLS8vIGdyYWRpZW50cyBvZiBmdW5jdGlvbnMgd2l0aCBkaXNjb250aW51aXRp
ZXMuIAotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaCIKLQot
I2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlQ29udGV4dC5oIgotCi1uYW1lc3BhY2Ugc2gKLXsKLWJv
b2wgRGV0ZWN0TG9vcERpc2NvbnRpbnVpdHk6OnRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKQot
ewotICAgIG1Mb29wRGVwdGggPSAwOwotICAgIG1Mb29wRGlzY29udGludWl0eSA9IGZhbHNlOwot
ICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOwotICAgIHJldHVybiBtTG9vcERpc2NvbnRpbnVpdHk7
Ci19Ci0KLWJvb2wgRGV0ZWN0TG9vcERpc2NvbnRpbnVpdHk6OnZpc2l0TG9vcChWaXNpdCB2aXNp
dCwgVEludGVybUxvb3AgKmxvb3ApCi17Ci0gICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQotICAg
IHsKLSAgICAgICAgKyttTG9vcERlcHRoOwotICAgIH0KLSAgICBlbHNlIGlmICh2aXNpdCA9PSBQ
b3N0VmlzaXQpCi0gICAgewotICAgICAgICAtLW1Mb29wRGVwdGg7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgRGV0ZWN0TG9vcERpc2NvbnRpbnVpdHk6OnZpc2l0QnJhbmNo
KFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2RlKQotewotICAgIGlmIChtTG9vcERpc2Nv
bnRpbnVpdHkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYg
KCFtTG9vcERlcHRoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAg
c3dpdGNoIChub2RlLT5nZXRGbG93T3AoKSkKLSAgICB7Ci0gICAgICBjYXNlIEVPcEtpbGw6Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BCcmVhazoKLSAgICAgIGNhc2UgRU9wQ29udGlu
dWU6Ci0gICAgICBjYXNlIEVPcFJldHVybjoKLSAgICAgICAgbUxvb3BEaXNjb250aW51aXR5ID0g
dHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAg
IH0KLQotICAgIHJldHVybiAhbUxvb3BEaXNjb250aW51aXR5OwotfQotCi1ib29sIERldGVjdExv
b3BEaXNjb250aW51aXR5Ojp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3Jl
Z2F0ZSAqbm9kZSkKLXsKLSAgICByZXR1cm4gIW1Mb29wRGlzY29udGludWl0eTsKLX0KLQotYm9v
bCBjb250YWluc0xvb3BEaXNjb250aW51aXR5KFRJbnRlcm1Ob2RlICpub2RlKQotewotICAgIERl
dGVjdExvb3BEaXNjb250aW51aXR5IGRldGVjdExvb3BEaXNjb250aW51aXR5OwotICAgIHJldHVy
biBkZXRlY3RMb29wRGlzY29udGludWl0eS50cmF2ZXJzZShub2RlKTsKLX0KLQotYm9vbCBEZXRl
Y3RHcmFkaWVudE9wZXJhdGlvbjo6dHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpCi17Ci0gICAg
bUdyYWRpZW50T3BlcmF0aW9uID0gZmFsc2U7Ci0gICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7Ci0g
ICAgcmV0dXJuIG1HcmFkaWVudE9wZXJhdGlvbjsKLX0KLQotYm9vbCBEZXRlY3RHcmFkaWVudE9w
ZXJhdGlvbjo6dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5ICpub2RlKQotewot
ICAgIGlmIChtR3JhZGllbnRPcGVyYXRpb24pCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQotICAgIHsKLSAgICAgIGNhc2Ug
RU9wREZkeDoKLSAgICAgIGNhc2UgRU9wREZkeToKLSAgICAgICAgbUdyYWRpZW50T3BlcmF0aW9u
ID0gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJl
dHVybiAhbUdyYWRpZW50T3BlcmF0aW9uOwotfQotCi1ib29sIERldGVjdEdyYWRpZW50T3BlcmF0
aW9uOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSkK
LXsKLSAgICBpZiAobUdyYWRpZW50T3BlcmF0aW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIGlmIChub2RlLT5nZXRPcCgpID09IEVPcEZ1bmN0aW9uQ2FsbCkK
LSAgICB7Ci0gICAgICAgIGlmICghbm9kZS0+aXNVc2VyRGVmaW5lZCgpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShub2RlLT5n
ZXROYW1lKCkpOwotCi0gICAgICAgICAgICBpZiAobmFtZSA9PSAidGV4dHVyZTJEIiB8fAotICAg
ICAgICAgICAgICAgIG5hbWUgPT0gInRleHR1cmUyRFByb2oiIHx8Ci0gICAgICAgICAgICAgICAg
bmFtZSA9PSAidGV4dHVyZUN1YmUiKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1H
cmFkaWVudE9wZXJhdGlvbiA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBXaGVuIGEgdXNlciBkZWZpbmVkIGZ1
bmN0aW9uIGlzIGNhbGxlZCwgd2UgaGF2ZSB0bwotICAgICAgICAgICAgLy8gY29uc2VydmF0aXZl
bHkgYXNzdW1lIGl0IHRvIGNvbnRhaW4gZ3JhZGllbnQgb3BlcmF0aW9ucwotICAgICAgICAgICAg
bUdyYWRpZW50T3BlcmF0aW9uID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biAhbUdyYWRpZW50T3BlcmF0aW9uOwotfQotCi1ib29sIGNvbnRhaW5zR3JhZGllbnRPcGVyYXRp
b24oVEludGVybU5vZGUgKm5vZGUpCi17Ci0gICAgRGV0ZWN0R3JhZGllbnRPcGVyYXRpb24gZGV0
ZWN0R3JhZGllbnRPcGVyYXRpb247Ci0gICAgcmV0dXJuIGRldGVjdEdyYWRpZW50T3BlcmF0aW9u
LnRyYXZlcnNlKG5vZGUpOwotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGU1NTIwYmQ1YjAyZjVhMmYzNWU4OWM4OTdmMGYxNDBiM2VjMTIzZDcu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaAorKysgL2Rl
di9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotLy8gQ29udGFpbnMgYW5hbHlz
aXMgdXRpbGl0aWVzIGZvciBkZWFsaW5nIHdpdGggSExTTCdzIGxhY2sgb2Ygc3VwcG9ydCBmb3IK
LS8vIHRoZSB1c2Ugb2YgaW50cmluc2ljIGZ1bmN0aW9ucyB3aGljaCAoaW1wbGljaXRseSBvciBl
eHBsaWNpdGx5KSBjb21wdXRlCi0vLyBncmFkaWVudHMgb2YgZnVuY3Rpb25zIHdpdGggZGlzY29u
dGludWl0aWVzLiAKLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfREVURUNURElTQ09OVElOVUlUWV9I
XwotI2RlZmluZSBDT01QSUxFUl9ERVRFQ1RESVNDT05USU5VSVRZX0hfCi0KLSNpbmNsdWRlICJj
b21waWxlci9pbnRlcm1lZGlhdGUuaCIKLQotbmFtZXNwYWNlIHNoCi17Ci0vLyBDaGVja3Mgd2hl
dGhlciBhIGxvb3AgY2FuIHJ1biBmb3IgYSB2YXJpYWJsZSBudW1iZXIgb2YgaXRlcmF0aW9ucwot
Y2xhc3MgRGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgot
ewotICBwdWJsaWM6Ci0gICAgYm9vbCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7Ci0KLSAg
cHJvdGVjdGVkOgotICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFu
Y2ggKm5vZGUpOwotICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAq
bG9vcCk7Ci0gICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3Jl
Z2F0ZSAqbm9kZSk7Ci0KLSAgICBpbnQgbUxvb3BEZXB0aDsKLSAgICBib29sIG1Mb29wRGlzY29u
dGludWl0eTsKLX07Ci0KLWJvb2wgY29udGFpbnNMb29wRGlzY29udGludWl0eShUSW50ZXJtTm9k
ZSAqbm9kZSk7Ci0KLS8vIENoZWNrcyBmb3IgaW50cmluc2ljIGZ1bmN0aW9ucyB3aGljaCBjb21w
dXRlIGdyYWRpZW50cwotY2xhc3MgRGV0ZWN0R3JhZGllbnRPcGVyYXRpb24gOiBwdWJsaWMgVElu
dGVybVRyYXZlcnNlcgotewotICBwdWJsaWM6Ci0gICAgYm9vbCB0cmF2ZXJzZShUSW50ZXJtTm9k
ZSAqbm9kZSk7Ci0KLSAgcHJvdGVjdGVkOgotICAgIGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2aXNp
dCwgVEludGVybVVuYXJ5ICpub2RlKTsKLSAgICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZp
c2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKTsKLQotICAgIGJvb2wgbUdyYWRpZW50T3BlcmF0
aW9uOwotfTsKLQotYm9vbCBjb250YWluc0dyYWRpZW50T3BlcmF0aW9uKFRJbnRlcm1Ob2RlICpu
b2RlKTsKLQotfQotCi0jZW5kaWYgICAvLyBDT01QSUxFUl9ERVRFQ1RESVNDT05USU5VSVRZX0hf
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25v
c3RpY3MuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0
aWNzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGEzOGM0MWE2NTQyMzIxZTg1
NjQyNmJiOTNkMjcxNDI5MzYwOTIyNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25v
c3RpY3MuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0K
LSNpbmNsdWRlICJjb21waWxlci9EaWFnbm9zdGljcy5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIv
ZGVidWcuaCIKLSNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgotI2luY2x1ZGUgImNvbXBp
bGVyL3ByZXByb2Nlc3Nvci9Tb3VyY2VMb2NhdGlvbi5oIgotCi1URGlhZ25vc3RpY3M6OlREaWFn
bm9zdGljcyhUSW5mb1NpbmsmIGluZm9TaW5rKSA6Ci0gICAgbUluZm9TaW5rKGluZm9TaW5rKSwK
LSAgICBtTnVtRXJyb3JzKDApLAotICAgIG1OdW1XYXJuaW5ncygwKQotewotfQotCi1URGlhZ25v
c3RpY3M6On5URGlhZ25vc3RpY3MoKQotewotfQotCi12b2lkIFREaWFnbm9zdGljczo6d3JpdGVJ
bmZvKFNldmVyaXR5IHNldmVyaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgc3RkOjpzdHJpbmcmIHJlYXNvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgc3RkOjpzdHJpbmcmIHRva2VuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBzdGQ6OnN0cmluZyYgZXh0cmEpCi17Ci0gICAgVFByZWZpeFR5cGUgcHJlZml4ID0gRVBy
ZWZpeE5vbmU7Ci0gICAgc3dpdGNoIChzZXZlcml0eSkKLSAgICB7Ci0gICAgICBjYXNlIEVSUk9S
OgotICAgICAgICArK21OdW1FcnJvcnM7Ci0gICAgICAgIHByZWZpeCA9IEVQcmVmaXhFcnJvcjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFdBUk5JTkc6Ci0gICAgICAgICsrbU51bVdhcm5p
bmdzOwotICAgICAgICBwcmVmaXggPSBFUHJlZml4V2FybmluZzsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgICBUSW5mb1NpbmtCYXNlJiBzaW5rID0gbUluZm9TaW5rLmluZm87Ci0gICAgLyog
VkMrKyBmb3JtYXQ6IGZpbGUobGluZW51bSkgOiBlcnJvciAjOiAndG9rZW4nIDogZXh0cmFpbmZv
ICovCi0gICAgc2luay5wcmVmaXgocHJlZml4KTsKLSAgICBzaW5rLmxvY2F0aW9uKGxvYy5maWxl
LCBsb2MubGluZSk7Ci0gICAgc2luayA8PCAiJyIgPDwgdG9rZW4gPDwgICInIDogIiA8PCByZWFz
b24gPDwgIiAiIDw8IGV4dHJhIDw8ICJcbiI7Ci19Ci0KLXZvaWQgVERpYWdub3N0aWNzOjp3cml0
ZURlYnVnKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIpCi17Ci0gICAgbUluZm9TaW5rLmRlYnVnIDw8
IHN0cjsKLX0KLQotdm9pZCBURGlhZ25vc3RpY3M6OnByaW50KElEIGlkLAotICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAotICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KQotewotICAgIHdyaXRlSW5mbyhz
ZXZlcml0eShpZCksIGxvYywgbWVzc2FnZShpZCksIHRleHQsICIiKTsKLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaWFnbm9zdGljcy5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiNzFiYjEyMDQyMjhhNzQ3Mzc0YTI2ZWZkODljN2M2NzJi
YjU2YjguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw0NCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9E
SUFHTk9TVElDU19IXwotI2RlZmluZSBDT01QSUxFUl9ESUFHTk9TVElDU19IXwotCi0jaW5jbHVk
ZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpYWdub3N0aWNzQmFzZS5oIgotCi1jbGFzcyBUSW5m
b1Npbms7Ci0KLWNsYXNzIFREaWFnbm9zdGljcyA6IHB1YmxpYyBwcDo6RGlhZ25vc3RpY3MKLXsK
LSAgcHVibGljOgotICAgIFREaWFnbm9zdGljcyhUSW5mb1NpbmsmIGluZm9TaW5rKTsKLSAgICB2
aXJ0dWFsIH5URGlhZ25vc3RpY3MoKTsKLQotICAgIFRJbmZvU2luayYgaW5mb1NpbmsoKSB7IHJl
dHVybiBtSW5mb1Npbms7IH0KLQotICAgIGludCBudW1FcnJvcnMoKSBjb25zdCB7IHJldHVybiBt
TnVtRXJyb3JzOyB9Ci0gICAgaW50IG51bVdhcm5pbmdzKCkgY29uc3QgeyByZXR1cm4gbU51bVdh
cm5pbmdzOyB9Ci0KLSAgICB2b2lkIHdyaXRlSW5mbyhTZXZlcml0eSBzZXZlcml0eSwKLSAgICAg
ICAgICAgICAgICAgICBjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKLSAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcmVhc29uLAotICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0ZDo6c3RyaW5nJiB0b2tlbiwKLSAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0
cmluZyYgZXh0cmEpOwotCi0gICAgdm9pZCB3cml0ZURlYnVnKGNvbnN0IHN0ZDo6c3RyaW5nJiBz
dHIpOwotCi0gIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoSUQgaWQsCi0gICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAotICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdGV4dCk7Ci0KLSAgcHJpdmF0ZToK
LSAgICBUSW5mb1NpbmsmIG1JbmZvU2luazsKLSAgICBpbnQgbU51bUVycm9yczsKLSAgICBpbnQg
bU51bVdhcm5pbmdzOwotfTsKLQotI2VuZGlmICAvLyBDT01QSUxFUl9ESUFHTk9TVElDU19IXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2
ZUhhbmRsZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVj
dGl2ZUhhbmRsZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWY2YWIzYWY1
YjAxNWE2NzJhYjE2Y2JmNjg3ODM0NzBiNGJjN2ZjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9EaXJlY3RpdmVIYW5kbGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2MSArMCwwIEBACi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuaCIKLQot
I2luY2x1ZGUgPHNzdHJlYW0+Ci0KLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgotI2luY2x1
ZGUgImNvbXBpbGVyL0RpYWdub3N0aWNzLmgiCi0KLXN0YXRpYyBUQmVoYXZpb3IgZ2V0QmVoYXZp
b3IoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cikKLXsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJp
bmcga1JlcXVpcmUoInJlcXVpcmUiKTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0Vu
YWJsZSgiZW5hYmxlIik7Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXNhYmxlKCJk
aXNhYmxlIik7Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtXYXJuKCJ3YXJuIik7Ci0K
LSAgICBpZiAoc3RyID09IGtSZXF1aXJlKSByZXR1cm4gRUJoUmVxdWlyZTsKLSAgICBlbHNlIGlm
IChzdHIgPT0ga0VuYWJsZSkgcmV0dXJuIEVCaEVuYWJsZTsKLSAgICBlbHNlIGlmIChzdHIgPT0g
a0Rpc2FibGUpIHJldHVybiBFQmhEaXNhYmxlOwotICAgIGVsc2UgaWYgKHN0ciA9PSBrV2Fybikg
cmV0dXJuIEVCaFdhcm47Ci0gICAgcmV0dXJuIEVCaFVuZGVmaW5lZDsKLX0KLQotVERpcmVjdGl2
ZUhhbmRsZXI6OlREaXJlY3RpdmVIYW5kbGVyKFRFeHRlbnNpb25CZWhhdmlvciYgZXh0QmVoYXZp
b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVERpYWdub3N0aWNzJiBk
aWFnbm9zdGljcykKLSAgICA6IG1FeHRlbnNpb25CZWhhdmlvcihleHRCZWhhdmlvciksCi0gICAg
ICBtRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpCi17Ci19Ci0KLVREaXJlY3RpdmVIYW5kbGVyOjp+
VERpcmVjdGl2ZUhhbmRsZXIoKQotewotfQotCi12b2lkIFREaXJlY3RpdmVIYW5kbGVyOjpoYW5k
bGVFcnJvcihjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtc2cpCi17Ci0gICAgbURpYWdu
b3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OkVSUk9SLCBsb2MsIG1zZywgIiIsICIi
KTsKLX0KLQotdm9pZCBURGlyZWN0aXZlSGFuZGxlcjo6aGFuZGxlUHJhZ21hKGNvbnN0IHBwOjpT
b3VyY2VMb2NhdGlvbiYgbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzdGF0aWMgY29uc3Qgc3Rk
OjpzdHJpbmcga1NUREdMKCJTVERHTCIpOwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBr
T3B0aW1pemUoIm9wdGltaXplIik7Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEZWJ1
ZygiZGVidWciKTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga09uKCJvbiIpOwotICAg
IHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrT2ZmKCJvZmYiKTsKLQotICAgIGJvb2wgaW52YWxp
ZFZhbHVlID0gZmFsc2U7Ci0gICAgaWYgKG5hbWUgPT0ga1NUREdMKQotICAgIHsKLSAgICAgICAg
Ly8gVGhlIFNUREdMIHByYWdtYSBpcyB1c2VkIHRvIHJlc2VydmUgcHJhZ21hcyBmb3IgdXNlIGJ5
IGZ1dHVyZQotICAgICAgICAvLyByZXZpc2lvbnMgb2YgR0xTTC4gSWdub3JlIGl0LgotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGVsc2UgaWYgKG5hbWUgPT0ga09wdGltaXplKQotICAgIHsK
LSAgICAgICAgaWYgKHZhbHVlID09IGtPbikgbVByYWdtYS5vcHRpbWl6ZSA9IHRydWU7Ci0gICAg
ICAgIGVsc2UgaWYgKHZhbHVlID09IGtPZmYpIG1QcmFnbWEub3B0aW1pemUgPSBmYWxzZTsKLSAg
ICAgICAgZWxzZSBpbnZhbGlkVmFsdWUgPSB0cnVlOwotICAgIH0KLSAgICBlbHNlIGlmIChuYW1l
ID09IGtEZWJ1ZykKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZSA9PSBrT24pIG1QcmFnbWEuZGVi
dWcgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBrT2ZmKSBtUHJhZ21hLmRlYnVn
ID0gZmFsc2U7Ci0gICAgICAgIGVsc2UgaW52YWxpZFZhbHVlID0gdHJ1ZTsKLSAgICB9Ci0gICAg
ZWxzZQotICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6
OlVOUkVDT0dOSVpFRF9QUkFHTUEsIGxvYywgbmFtZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAoaW52YWxpZFZhbHVlKQotICAgICAgbURpYWdub3N0aWNzLndyaXRlSW5mbyhw
cDo6RGlhZ25vc3RpY3M6OkVSUk9SLCBsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJpbnZhbGlkIHByYWdtYSB2YWx1ZSIsIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiJ29uJyBvciAnb2ZmJyBleHBlY3RlZCIpOwotfQotCi12b2lkIFREaXJlY3RpdmVIYW5k
bGVyOjpoYW5kbGVFeHRlbnNpb24oY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5h
bWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpz
dHJpbmcmIGJlaGF2aW9yKQotewotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRXh0QWxs
KCJhbGwiKTsKLQotICAgIFRCZWhhdmlvciBiZWhhdmlvclZhbCA9IGdldEJlaGF2aW9yKGJlaGF2
aW9yKTsKLSAgICBpZiAoYmVoYXZpb3JWYWwgPT0gRUJoVW5kZWZpbmVkKQotICAgIHsKLSAgICAg
ICAgbURpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OkVSUk9SLCBsb2MsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlaGF2aW9yIiwgbmFtZSwgImludmFsaWQi
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChuYW1lID09IGtFeHRBbGwpCi0g
ICAgewotICAgICAgICBpZiAoYmVoYXZpb3JWYWwgPT0gRUJoUmVxdWlyZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgbURpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OkVSUk9S
LCBsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHRlbnNpb24iLCBu
YW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IGhhdmUgJ3Jl
cXVpcmUnIGJlaGF2aW9yIik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoYmVoYXZpb3JW
YWwgPT0gRUJoRW5hYmxlKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGlhZ25vc3RpY3Mud3Jp
dGVJbmZvKHBwOjpEaWFnbm9zdGljczo6RVJST1IsIGxvYywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImV4dGVuc2lvbiIsIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJjYW5ub3QgaGF2ZSAnZW5hYmxlJyBiZWhhdmlvciIpOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChURXh0ZW5zaW9uQmVo
YXZpb3I6Oml0ZXJhdG9yIGl0ZXIgPSBtRXh0ZW5zaW9uQmVoYXZpb3IuYmVnaW4oKTsKLSAgICAg
ICAgICAgICAgICAgaXRlciAhPSBtRXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCk7ICsraXRlcikKLSAg
ICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSBiZWhhdmlvclZhbDsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgVEV4dGVuc2lvbkJlaGF2aW9yOjppdGVyYXRvciBp
dGVyID0gbUV4dGVuc2lvbkJlaGF2aW9yLmZpbmQobmFtZSk7Ci0gICAgaWYgKGl0ZXIgIT0gbUV4
dGVuc2lvbkJlaGF2aW9yLmVuZCgpKQotICAgIHsKLSAgICAgICAgaXRlci0+c2Vjb25kID0gYmVo
YXZpb3JWYWw7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBwcDo6RGlhZ25vc3RpY3M6
OlNldmVyaXR5IHNldmVyaXR5ID0gcHA6OkRpYWdub3N0aWNzOjpFUlJPUjsKLSAgICBzd2l0Y2gg
KGJlaGF2aW9yVmFsKSB7Ci0gICAgICBjYXNlIEVCaFJlcXVpcmU6Ci0gICAgICAgIHNldmVyaXR5
ID0gcHA6OkRpYWdub3N0aWNzOjpFUlJPUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVC
aEVuYWJsZToKLSAgICAgIGNhc2UgRUJoV2FybjoKLSAgICAgIGNhc2UgRUJoRGlzYWJsZToKLSAg
ICAgICAgc2V2ZXJpdHkgPSBwcDo6RGlhZ25vc3RpY3M6OldBUk5JTkc7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIG1EaWFnbm9zdGljcy53cml0ZUluZm8oc2V2ZXJpdHksIGxvYywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJleHRlbnNpb24iLCBuYW1lLCAiaXMgbm90IHN1cHBvcnRl
ZCIpOwotfQotCi12b2lkIFREaXJlY3RpdmVIYW5kbGVyOjpoYW5kbGVWZXJzaW9uKGNvbnN0IHBw
OjpTb3VyY2VMb2NhdGlvbiYgbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgdmVyc2lvbikKLXsKLSAgICBzdGF0aWMgY29uc3QgaW50IGtWZXJzaW9uID0gMTAw
OwotCi0gICAgaWYgKHZlcnNpb24gIT0ga1ZlcnNpb24pCi0gICAgewotICAgICAgICBzdGQ6OnN0
cmluZ3N0cmVhbSBzdHJlYW07Ci0gICAgICAgIHN0cmVhbSA8PCB2ZXJzaW9uOwotICAgICAgICBz
dGQ6OnN0cmluZyBzdHIgPSBzdHJlYW0uc3RyKCk7Ci0gICAgICAgIG1EaWFnbm9zdGljcy53cml0
ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpFUlJPUiwgbG9jLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJ2ZXJzaW9uIG51bWJlciIsIHN0ciwgIm5vdCBzdXBwb3J0ZWQiKTsKLSAgICB9
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGly
ZWN0aXZlSGFuZGxlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Rp
cmVjdGl2ZUhhbmRsZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTVjYTU5ZDZm
ZTVkZWVhNmQ3ZmI0NTg3ZWU1MTZjODNhYjVkMDlmYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvRGlyZWN0aXZlSGFuZGxlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfRElSRUNUSVZFX0hBTkRMRVJfSF8KLSNkZWZp
bmUgQ09NUElMRVJfRElSRUNUSVZFX0hBTkRMRVJfSF8KLQotI2luY2x1ZGUgImNvbXBpbGVyL0V4
dGVuc2lvbkJlaGF2aW9yLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUHJhZ21hLmgiCi0jaW5jbHVk
ZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmgiCi0KLWNsYXNz
IFREaWFnbm9zdGljczsKLQotY2xhc3MgVERpcmVjdGl2ZUhhbmRsZXIgOiBwdWJsaWMgcHA6OkRp
cmVjdGl2ZUhhbmRsZXIKLXsKLSAgcHVibGljOgotICAgIFREaXJlY3RpdmVIYW5kbGVyKFRFeHRl
bnNpb25CZWhhdmlvciYgZXh0QmVoYXZpb3IsCi0gICAgICAgICAgICAgICAgICAgICAgVERpYWdu
b3N0aWNzJiBkaWFnbm9zdGljcyk7Ci0gICAgdmlydHVhbCB+VERpcmVjdGl2ZUhhbmRsZXIoKTsK
LQotICAgIGNvbnN0IFRQcmFnbWEmIHByYWdtYSgpIGNvbnN0IHsgcmV0dXJuIG1QcmFnbWE7IH0K
LSAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dGVuc2lvbkJlaGF2aW9yKCkgY29uc3Qg
eyByZXR1cm4gbUV4dGVuc2lvbkJlaGF2aW9yOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxl
RXJyb3IoY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtc2cpOwotCi0gICAgdmlydHVhbCB2b2lkIGhh
bmRsZVByYWdtYShjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKTsKLQotICAgIHZpcnR1YWwg
dm9pZCBoYW5kbGVFeHRlbnNpb24oY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBiZWhhdmlv
cik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlVmVyc2lvbihjb25zdCBwcDo6U291cmNlTG9j
YXRpb24mIGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmVyc2lvbik7
Ci0KLSAgcHJpdmF0ZToKLSAgICBUUHJhZ21hIG1QcmFnbWE7Ci0gICAgVEV4dGVuc2lvbkJlaGF2
aW9yJiBtRXh0ZW5zaW9uQmVoYXZpb3I7Ci0gICAgVERpYWdub3N0aWNzJiBtRGlhZ25vc3RpY3M7
Ci19OwotCi0jZW5kaWYgIC8vIENPTVBJTEVSX0RJUkVDVElWRV9IQU5ETEVSX0hfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZp
b3IuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9FeHRlbnNpb25CZWhh
dmlvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzE1OTVmYjIxMjFhOGVhNzZi
YmEyMjU3YzZmMzYzNTZlZjAwZTlkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9FeHRlbnNp
b25CZWhhdmlvci5oCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotLy8KLS8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgotLy8KLQotI2lmbmRlZiBfRVhURU5TSU9OX0JFSEFWSU9SX0lOQ0xVREVEXwotI2RlZmluZSBf
RVhURU5TSU9OX0JFSEFWSU9SX0lOQ0xVREVEXwotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUg
PHN0cmluZz4KLQotdHlwZWRlZiBlbnVtCi17Ci0gICAgRUJoUmVxdWlyZSwKLSAgICBFQmhFbmFi
bGUsCi0gICAgRUJoV2FybiwKLSAgICBFQmhEaXNhYmxlLAotICAgIEVCaFVuZGVmaW5lZAotfSBU
QmVoYXZpb3I7Ci0KLWlubGluZSBjb25zdCBjaGFyKiBnZXRCZWhhdmlvclN0cmluZyhUQmVoYXZp
b3IgYikKLXsKLSAgICBzd2l0Y2goYikKLSAgICB7Ci0gICAgICBjYXNlIEVCaFJlcXVpcmU6IHJl
dHVybiAicmVxdWlyZSI7Ci0gICAgICBjYXNlIEVCaEVuYWJsZTogcmV0dXJuICJlbmFibGUiOwot
ICAgICAgY2FzZSBFQmhXYXJuOiByZXR1cm4gIndhcm4iOwotICAgICAgY2FzZSBFQmhEaXNhYmxl
OiByZXR1cm4gImRpc2FibGUiOwotICAgICAgZGVmYXVsdDogcmV0dXJuIE5VTEw7Ci0gICAgfQot
fQotCi0vLyBNYXBwaW5nIGJldHdlZW4gZXh0ZW5zaW9uIG5hbWUgYW5kIGJlaGF2aW9yLgotdHlw
ZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgVEJlaGF2aW9yPiBURXh0ZW5zaW9uQmVoYXZpb3I7
Ci0KLSNlbmRpZiAvLyBfRVhURU5TSU9OX1RBQkxFX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJvbGwuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJvbGwuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2ExM2VhYmFiYjEyMjIwNDAwMGZjNTE5ZDY2OWRm
Zjg0YzJjM2Q3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Gb3JMb29wVW5yb2xsLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDIxNSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5j
bHVkZSAiY29tcGlsZXIvRm9yTG9vcFVucm9sbC5oIgotCi1uYW1lc3BhY2UgewotCi1jbGFzcyBJ
bnRlZ2VyRm9yTG9vcFVucm9sbE1hcmtlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKLXB1
YmxpYzoKLQotICAgIHZpcnR1YWwgYm9vbCB2aXNpdExvb3AoVmlzaXQsIFRJbnRlcm1Mb29wKiBu
b2RlKQotICAgIHsKLSAgICAgICAgLy8gVGhpcyBpcyBjYWxsZWQgYWZ0ZXIgVmFsaWRhdGVMaW1p
dGF0aW9ucyBwYXNzLCBzbyBhbGwgdGhlIEFTU0VSVAotICAgICAgICAvLyBzaG91bGQgbmV2ZXIg
ZmFpbC4KLSAgICAgICAgLy8gU2VlIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9v
cEluaXQoKS4KLSAgICAgICAgQVNTRVJUKG5vZGUpOwotICAgICAgICBBU1NFUlQobm9kZS0+Z2V0
VHlwZSgpID09IEVMb29wRm9yKTsKLSAgICAgICAgQVNTRVJUKG5vZGUtPmdldEluaXQoKSk7Ci0g
ICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGRlY2wgPSBub2RlLT5nZXRJbml0KCktPmdldEFzQWdn
cmVnYXRlKCk7Ci0gICAgICAgIEFTU0VSVChkZWNsICYmIGRlY2wtPmdldE9wKCkgPT0gRU9wRGVj
bGFyYXRpb24pOwotICAgICAgICBUSW50ZXJtU2VxdWVuY2UmIGRlY2xTZXEgPSBkZWNsLT5nZXRT
ZXF1ZW5jZSgpOwotICAgICAgICBBU1NFUlQoZGVjbFNlcS5zaXplKCkgPT0gMSk7Ci0gICAgICAg
IFRJbnRlcm1CaW5hcnkqIGRlY2xJbml0ID0gZGVjbFNlcVswXS0+Z2V0QXNCaW5hcnlOb2RlKCk7
Ci0gICAgICAgIEFTU0VSVChkZWNsSW5pdCAmJiBkZWNsSW5pdC0+Z2V0T3AoKSA9PSBFT3BJbml0
aWFsaXplKTsKLSAgICAgICAgQVNTRVJUKGRlY2xJbml0LT5nZXRMZWZ0KCkpOwotICAgICAgICBU
SW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBkZWNsSW5pdC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5v
ZGUoKTsKLSAgICAgICAgQVNTRVJUKHN5bWJvbCk7Ci0gICAgICAgIFRCYXNpY1R5cGUgdHlwZSA9
IHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCk7Ci0gICAgICAgIEFTU0VSVCh0eXBlID09IEVidEludCB8
fCB0eXBlID09IEVidEZsb2F0KTsKLSAgICAgICAgaWYgKHR5cGUgPT0gRWJ0SW50KQotICAgICAg
ICAgICAgbm9kZS0+c2V0VW5yb2xsRmxhZyh0cnVlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCi19OwotCi19ICAvLyBhbm9ueW1vdXMgbmFtZXBzYWNlCi0KLXZvaWQgRm9yTG9vcFVu
cm9sbDo6RmlsbExvb3BJbmRleEluZm8oVEludGVybUxvb3AqIG5vZGUsIFRMb29wSW5kZXhJbmZv
JiBpbmZvKQotewotICAgIEFTU0VSVChub2RlLT5nZXRUeXBlKCkgPT0gRUxvb3BGb3IpOwotICAg
IEFTU0VSVChub2RlLT5nZXRVbnJvbGxGbGFnKCkpOwotCi0gICAgVEludGVybU5vZGUqIGluaXQg
PSBub2RlLT5nZXRJbml0KCk7Ci0gICAgQVNTRVJUKGluaXQgIT0gTlVMTCk7Ci0gICAgVEludGVy
bUFnZ3JlZ2F0ZSogZGVjbCA9IGluaXQtPmdldEFzQWdncmVnYXRlKCk7Ci0gICAgQVNTRVJUKChk
ZWNsICE9IE5VTEwpICYmIChkZWNsLT5nZXRPcCgpID09IEVPcERlY2xhcmF0aW9uKSk7Ci0gICAg
VEludGVybVNlcXVlbmNlJiBkZWNsU2VxID0gZGVjbC0+Z2V0U2VxdWVuY2UoKTsKLSAgICBBU1NF
UlQoZGVjbFNlcS5zaXplKCkgPT0gMSk7Ci0gICAgVEludGVybUJpbmFyeSogZGVjbEluaXQgPSBk
ZWNsU2VxWzBdLT5nZXRBc0JpbmFyeU5vZGUoKTsKLSAgICBBU1NFUlQoKGRlY2xJbml0ICE9IE5V
TEwpICYmIChkZWNsSW5pdC0+Z2V0T3AoKSA9PSBFT3BJbml0aWFsaXplKSk7Ci0gICAgVEludGVy
bVN5bWJvbCogc3ltYm9sID0gZGVjbEluaXQtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7
Ci0gICAgQVNTRVJUKHN5bWJvbCAhPSBOVUxMKTsKLSAgICBBU1NFUlQoc3ltYm9sLT5nZXRCYXNp
Y1R5cGUoKSA9PSBFYnRJbnQpOwotCi0gICAgaW5mby5pZCA9IHN5bWJvbC0+Z2V0SWQoKTsKLQot
ICAgIEFTU0VSVChkZWNsSW5pdC0+Z2V0UmlnaHQoKSAhPSBOVUxMKTsKLSAgICBUSW50ZXJtQ29u
c3RhbnRVbmlvbiogaW5pdE5vZGUgPSBkZWNsSW5pdC0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFu
dFVuaW9uKCk7Ci0gICAgQVNTRVJUKGluaXROb2RlICE9IE5VTEwpOwotCi0gICAgaW5mby5pbml0
VmFsdWUgPSBldmFsdWF0ZUludENvbnN0YW50KGluaXROb2RlKTsKLSAgICBpbmZvLmN1cnJlbnRW
YWx1ZSA9IGluZm8uaW5pdFZhbHVlOwotCi0gICAgVEludGVybU5vZGUqIGNvbmQgPSBub2RlLT5n
ZXRDb25kaXRpb24oKTsKLSAgICBBU1NFUlQoY29uZCAhPSBOVUxMKTsKLSAgICBUSW50ZXJtQmlu
YXJ5KiBiaW5PcCA9IGNvbmQtPmdldEFzQmluYXJ5Tm9kZSgpOwotICAgIEFTU0VSVChiaW5PcCAh
PSBOVUxMKTsKLSAgICBBU1NFUlQoYmluT3AtPmdldFJpZ2h0KCkgIT0gTlVMTCk7Ci0gICAgQVNT
RVJUKGJpbk9wLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKSAhPSBOVUxMKTsKLQot
ICAgIGluZm8uaW5jcmVtZW50VmFsdWUgPSBnZXRMb29wSW5jcmVtZW50KG5vZGUpOwotICAgIGlu
Zm8uc3RvcFZhbHVlID0gZXZhbHVhdGVJbnRDb25zdGFudCgKLSAgICAgICAgYmluT3AtPmdldFJp
Z2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpKTsKLSAgICBpbmZvLm9wID0gYmluT3AtPmdldE9w
KCk7Ci19Ci0KLXZvaWQgRm9yTG9vcFVucm9sbDo6U3RlcCgpCi17Ci0gICAgQVNTRVJUKG1Mb29w
SW5kZXhTdGFjay5zaXplKCkgPiAwKTsKLSAgICBUTG9vcEluZGV4SW5mbyYgaW5mbyA9IG1Mb29w
SW5kZXhTdGFja1ttTG9vcEluZGV4U3RhY2suc2l6ZSgpIC0gMV07Ci0gICAgaW5mby5jdXJyZW50
VmFsdWUgKz0gaW5mby5pbmNyZW1lbnRWYWx1ZTsKLX0KLQotYm9vbCBGb3JMb29wVW5yb2xsOjpT
YXRpc2ZpZXNMb29wQ29uZGl0aW9uKCkKLXsKLSAgICBBU1NFUlQobUxvb3BJbmRleFN0YWNrLnNp
emUoKSA+IDApOwotICAgIFRMb29wSW5kZXhJbmZvJiBpbmZvID0gbUxvb3BJbmRleFN0YWNrW21M
b29wSW5kZXhTdGFjay5zaXplKCkgLSAxXTsKLSAgICAvLyBSZWxhdGlvbmFsIG9wZXJhdG9yIGlz
IG9uZSBvZjogPiA+PSA8IDw9ID09IG9yICE9LgotICAgIHN3aXRjaCAoaW5mby5vcCkgewotICAg
ICAgY2FzZSBFT3BFcXVhbDoKLSAgICAgICAgcmV0dXJuIChpbmZvLmN1cnJlbnRWYWx1ZSA9PSBp
bmZvLnN0b3BWYWx1ZSk7Ci0gICAgICBjYXNlIEVPcE5vdEVxdWFsOgotICAgICAgICByZXR1cm4g
KGluZm8uY3VycmVudFZhbHVlICE9IGluZm8uc3RvcFZhbHVlKTsKLSAgICAgIGNhc2UgRU9wTGVz
c1RoYW46Ci0gICAgICAgIHJldHVybiAoaW5mby5jdXJyZW50VmFsdWUgPCBpbmZvLnN0b3BWYWx1
ZSk7Ci0gICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgotICAgICAgICByZXR1cm4gKGluZm8uY3Vy
cmVudFZhbHVlID4gaW5mby5zdG9wVmFsdWUpOwotICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFs
OgotICAgICAgICByZXR1cm4gKGluZm8uY3VycmVudFZhbHVlIDw9IGluZm8uc3RvcFZhbHVlKTsK
LSAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKLSAgICAgICAgcmV0dXJuIChpbmZvLmN1
cnJlbnRWYWx1ZSA+PSBpbmZvLnN0b3BWYWx1ZSk7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBV
TlJFQUNIQUJMRSgpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRm9yTG9v
cFVucm9sbDo6TmVlZHNUb1JlcGxhY2VTeW1ib2xXaXRoVmFsdWUoVEludGVybVN5bWJvbCogc3lt
Ym9sKQotewotICAgIGZvciAoVFZlY3RvcjxUTG9vcEluZGV4SW5mbz46Oml0ZXJhdG9yIGkgPSBt
TG9vcEluZGV4U3RhY2suYmVnaW4oKTsKLSAgICAgICAgIGkgIT0gbUxvb3BJbmRleFN0YWNrLmVu
ZCgpOwotICAgICAgICAgKytpKSB7Ci0gICAgICAgIGlmIChpLT5pZCA9PSBzeW1ib2wtPmdldElk
KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1pbnQgRm9yTG9vcFVucm9sbDo6R2V0TG9vcEluZGV4VmFsdWUoVEludGVybVN5bWJvbCog
c3ltYm9sKQotewotICAgIGZvciAoVFZlY3RvcjxUTG9vcEluZGV4SW5mbz46Oml0ZXJhdG9yIGkg
PSBtTG9vcEluZGV4U3RhY2suYmVnaW4oKTsKLSAgICAgICAgIGkgIT0gbUxvb3BJbmRleFN0YWNr
LmVuZCgpOwotICAgICAgICAgKytpKSB7Ci0gICAgICAgIGlmIChpLT5pZCA9PSBzeW1ib2wtPmdl
dElkKCkpCi0gICAgICAgICAgICByZXR1cm4gaS0+Y3VycmVudFZhbHVlOwotICAgIH0KLSAgICBV
TlJFQUNIQUJMRSgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBGb3JMb29wVW5yb2xs
OjpQdXNoKFRMb29wSW5kZXhJbmZvJiBpbmZvKQotewotICAgIG1Mb29wSW5kZXhTdGFjay5wdXNo
X2JhY2soaW5mbyk7Ci19Ci0KLXZvaWQgRm9yTG9vcFVucm9sbDo6UG9wKCkKLXsKLSAgICBtTG9v
cEluZGV4U3RhY2sucG9wX2JhY2soKTsKLX0KLQotLy8gc3RhdGljCi12b2lkIEZvckxvb3BVbnJv
bGw6Ok1hcmtGb3JMb29wc1dpdGhJbnRlZ2VySW5kaWNlc0ZvclVucm9sbGluZygKLSAgICBUSW50
ZXJtTm9kZSogcm9vdCkKLXsKLSAgICBBU1NFUlQocm9vdCk7Ci0KLSAgICBJbnRlZ2VyRm9yTG9v
cFVucm9sbE1hcmtlciBtYXJrZXI7Ci0gICAgcm9vdC0+dHJhdmVyc2UoJm1hcmtlcik7Ci19Ci0K
LWludCBGb3JMb29wVW5yb2xsOjpnZXRMb29wSW5jcmVtZW50KFRJbnRlcm1Mb29wKiBub2RlKQot
ewotICAgIFRJbnRlcm1Ob2RlKiBleHByID0gbm9kZS0+Z2V0RXhwcmVzc2lvbigpOwotICAgIEFT
U0VSVChleHByICE9IE5VTEwpOwotICAgIC8vIGZvciBleHByZXNzaW9uIGhhcyBvbmUgb2YgdGhl
IGZvbGxvd2luZyBmb3JtczoKLSAgICAvLyAgICAgbG9vcF9pbmRleCsrCi0gICAgLy8gICAgIGxv
b3BfaW5kZXgtLQotICAgIC8vICAgICBsb29wX2luZGV4ICs9IGNvbnN0YW50X2V4cHJlc3Npb24K
LSAgICAvLyAgICAgbG9vcF9pbmRleCAtPSBjb25zdGFudF9leHByZXNzaW9uCi0gICAgLy8gICAg
ICsrbG9vcF9pbmRleAotICAgIC8vICAgICAtLWxvb3BfaW5kZXgKLSAgICAvLyBUaGUgbGFzdCB0
d28gZm9ybXMgYXJlIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHNwZWMsIGJ1dCBJIGFtIGFzc3VtaW5n
Ci0gICAgLy8gaXRzIGFuIG92ZXJzaWdodC4KLSAgICBUSW50ZXJtVW5hcnkqIHVuT3AgPSBleHBy
LT5nZXRBc1VuYXJ5Tm9kZSgpOwotICAgIFRJbnRlcm1CaW5hcnkqIGJpbk9wID0gdW5PcCA/IE5V
TEwgOiBleHByLT5nZXRBc0JpbmFyeU5vZGUoKTsKLQotICAgIFRPcGVyYXRvciBvcCA9IEVPcE51
bGw7Ci0gICAgVEludGVybUNvbnN0YW50VW5pb24qIGluY3JlbWVudE5vZGUgPSBOVUxMOwotICAg
IGlmICh1bk9wICE9IE5VTEwpIHsKLSAgICAgICAgb3AgPSB1bk9wLT5nZXRPcCgpOwotICAgIH0g
ZWxzZSBpZiAoYmluT3AgIT0gTlVMTCkgewotICAgICAgICBvcCA9IGJpbk9wLT5nZXRPcCgpOwot
ICAgICAgICBBU1NFUlQoYmluT3AtPmdldFJpZ2h0KCkgIT0gTlVMTCk7Ci0gICAgICAgIGluY3Jl
bWVudE5vZGUgPSBiaW5PcC0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0gICAg
ICAgIEFTU0VSVChpbmNyZW1lbnROb2RlICE9IE5VTEwpOwotICAgIH0KLQotICAgIGludCBpbmNy
ZW1lbnQgPSAwOwotICAgIC8vIFRoZSBvcGVyYXRvciBpcyBvbmUgb2Y6ICsrIC0tICs9IC09Lgot
ICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50OgotICAgICAg
ICBjYXNlIEVPcFByZUluY3JlbWVudDoKLSAgICAgICAgICAgIEFTU0VSVCgodW5PcCAhPSBOVUxM
KSAmJiAoYmluT3AgPT0gTlVMTCkpOwotICAgICAgICAgICAgaW5jcmVtZW50ID0gMTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6Ci0gICAgICAgIGNh
c2UgRU9wUHJlRGVjcmVtZW50OgotICAgICAgICAgICAgQVNTRVJUKCh1bk9wICE9IE5VTEwpICYm
IChiaW5PcCA9PSBOVUxMKSk7Ci0gICAgICAgICAgICBpbmNyZW1lbnQgPSAtMTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjoKLSAgICAgICAgICAgIEFTU0VS
VCgodW5PcCA9PSBOVUxMKSAmJiAoYmluT3AgIT0gTlVMTCkpOwotICAgICAgICAgICAgaW5jcmVt
ZW50ID0gZXZhbHVhdGVJbnRDb25zdGFudChpbmNyZW1lbnROb2RlKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjoKLSAgICAgICAgICAgIEFTU0VSVCgodW5P
cCA9PSBOVUxMKSAmJiAoYmluT3AgIT0gTlVMTCkpOwotICAgICAgICAgICAgaW5jcmVtZW50ID0g
LSBldmFsdWF0ZUludENvbnN0YW50KGluY3JlbWVudE5vZGUpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgIH0KLQot
ICAgIHJldHVybiBpbmNyZW1lbnQ7Ci19Ci0KLWludCBGb3JMb29wVW5yb2xsOjpldmFsdWF0ZUlu
dENvbnN0YW50KFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKQotewotICAgIEFTU0VSVCgobm9k
ZSAhPSBOVUxMKSAmJiAobm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSAhPSBOVUxMKSk7Ci0g
ICAgcmV0dXJuIG5vZGUtPmdldElDb25zdCgwKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJvbGwuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Gb3JMb29wVW5yb2xsLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGU4MDBlMjViMWYwYzFhNDg3YTM3MzFhZWU3MzE2MjJjYjIyOGZlMWYu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJvbGwuaAorKysgL2Rldi9udWxs
CkBAIC0xLDQ4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvaW50
ZXJtZWRpYXRlLmgiCi0KLXN0cnVjdCBUTG9vcEluZGV4SW5mbyB7Ci0gICAgaW50IGlkOwotICAg
IGludCBpbml0VmFsdWU7Ci0gICAgaW50IHN0b3BWYWx1ZTsKLSAgICBpbnQgaW5jcmVtZW50VmFs
dWU7Ci0gICAgVE9wZXJhdG9yIG9wOwotICAgIGludCBjdXJyZW50VmFsdWU7Ci19OwotCi1jbGFz
cyBGb3JMb29wVW5yb2xsIHsKLXB1YmxpYzoKLSAgICBGb3JMb29wVW5yb2xsKCkgeyB9Ci0KLSAg
ICB2b2lkIEZpbGxMb29wSW5kZXhJbmZvKFRJbnRlcm1Mb29wKiBub2RlLCBUTG9vcEluZGV4SW5m
byYgaW5mbyk7Ci0KLSAgICAvLyBVcGRhdGUgdGhlIGluZm8uY3VycmVudFZhbHVlIGZvciB0aGUg
bmV4dCBsb29wIGl0ZXJhdGlvbi4KLSAgICB2b2lkIFN0ZXAoKTsKLQotICAgIC8vIFJldHVybiBm
YWxzZSBpZiBsb29wIGNvbmRpdGlvbiBpcyBubyBsb25nZXIgc2F0aXNmaWVkLgotICAgIGJvb2wg
U2F0aXNmaWVzTG9vcENvbmRpdGlvbigpOwotCi0gICAgLy8gQ2hlY2sgaWYgdGhlIHN5bWJvbCBp
cyB0aGUgaW5kZXggb2YgYSBsb29wIHRoYXQncyB1bnJvbGxlZC4KLSAgICBib29sIE5lZWRzVG9S
ZXBsYWNlU3ltYm9sV2l0aFZhbHVlKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCk7Ci0KLSAgICAvLyBS
ZXR1cm4gdGhlIGN1cnJlbnQgdmFsdWUgb2YgYSBnaXZlbiBsb29wIGluZGV4IHN5bWJvbC4KLSAg
ICBpbnQgR2V0TG9vcEluZGV4VmFsdWUoVEludGVybVN5bWJvbCogc3ltYm9sKTsKLQotICAgIHZv
aWQgUHVzaChUTG9vcEluZGV4SW5mbyYgaW5mbyk7Ci0gICAgdm9pZCBQb3AoKTsKLQotICAgIHN0
YXRpYyB2b2lkIE1hcmtGb3JMb29wc1dpdGhJbnRlZ2VySW5kaWNlc0ZvclVucm9sbGluZyhUSW50
ZXJtTm9kZSogcm9vdCk7Ci0KLXByaXZhdGU6Ci0gICAgaW50IGdldExvb3BJbmNyZW1lbnQoVElu
dGVybUxvb3AqIG5vZGUpOwotCi0gICAgaW50IGV2YWx1YXRlSW50Q29uc3RhbnQoVEludGVybUNv
bnN0YW50VW5pb24qIG5vZGUpOwotCi0gICAgVFZlY3RvcjxUTG9vcEluZGV4SW5mbz4gbUxvb3BJ
bmRleFN0YWNrOwotfTsKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0hhc2hOYW1lcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0hhc2hOYW1lcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjE0MWUyZDg1
MzdmMDExZWNhYWMyMjA2NjU5YWQ1MjQ5ZjI3ODI3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9IYXNoTmFtZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfSEFTSF9OQU1FU19IXwotI2RlZmluZSBDT01QSUxF
Ul9IQVNIX05BTUVTX0hfCi0KLSNpbmNsdWRlIDxtYXA+Ci0KLSNpbmNsdWRlICJjb21waWxlci9p
bnRlcm1lZGlhdGUuaCIKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLQotI2RlZmlu
ZSBIQVNIRURfTkFNRV9QUkVGSVggIndlYmdsXyIKLQotdHlwZWRlZiBzdGQ6Om1hcDxUUGVyc2lz
dFN0cmluZywgVFBlcnNpc3RTdHJpbmc+IE5hbWVNYXA7Ci0KLSNlbmRpZiAgLy8gQ09NUElMRVJf
SEFTSF9OQU1FU19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL0luZm9TaW5rLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9JbmZvU2luay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyMGE2YzAxNzVh
Y2M0YmZmNDhkNzJhNGQxMmI3MjFhNjZiYTMyMDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0luZm9TaW5rLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgotCi12b2lkIFRJbmZvU2lu
a0Jhc2U6OnByZWZpeChUUHJlZml4VHlwZSBwKSB7Ci0gICAgc3dpdGNoKHApIHsKLSAgICAgICAg
Y2FzZSBFUHJlZml4Tm9uZToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVQcmVm
aXhXYXJuaW5nOgotICAgICAgICAgICAgc2luay5hcHBlbmQoIldBUk5JTkc6ICIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVByZWZpeEVycm9yOgotICAgICAgICAgICAgc2lu
ay5hcHBlbmQoIkVSUk9SOiAiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVQ
cmVmaXhJbnRlcm5hbEVycm9yOgotICAgICAgICAgICAgc2luay5hcHBlbmQoIklOVEVSTkFMIEVS
Uk9SOiAiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVQcmVmaXhVbmltcGxl
bWVudGVkOgotICAgICAgICAgICAgc2luay5hcHBlbmQoIlVOSU1QTEVNRU5URUQ6ICIpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVByZWZpeE5vdGU6Ci0gICAgICAgICAgICBz
aW5rLmFwcGVuZCgiTk9URTogIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIHNpbmsuYXBwZW5kKCJVTktPV04gRVJST1I6ICIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIFRJbmZvU2lua0Jhc2U6OmxvY2F0aW9uKGludCBm
aWxlLCBpbnQgbGluZSkgewotICAgIFRQZXJzaXN0U3RyaW5nU3RyZWFtIHN0cmVhbTsKLSAgICBp
ZiAobGluZSkKLSAgICAgICAgc3RyZWFtIDw8IGZpbGUgPDwgIjoiIDw8IGxpbmU7Ci0gICAgZWxz
ZQotICAgICAgICBzdHJlYW0gPDwgZmlsZSA8PCAiOj8gIjsKLSAgICBzdHJlYW0gPDwgIjogIjsK
LQotICAgIHNpbmsuYXBwZW5kKHN0cmVhbS5zdHIoKSk7Ci19Ci0KLXZvaWQgVEluZm9TaW5rQmFz
ZTo6bG9jYXRpb24oY29uc3QgVFNvdXJjZUxvYyYgbG9jKSB7Ci0gICAgbG9jYXRpb24obG9jLmZp
cnN0X2ZpbGUsIGxvYy5maXJzdF9saW5lKTsKLX0KLQotdm9pZCBUSW5mb1NpbmtCYXNlOjptZXNz
YWdlKFRQcmVmaXhUeXBlIHAsIGNvbnN0IFRTb3VyY2VMb2MmIGxvYywgY29uc3QgY2hhciogbSkg
ewotICAgIHByZWZpeChwKTsKLSAgICBsb2NhdGlvbihsb2MpOwotICAgIHNpbmsuYXBwZW5kKG0p
OwotICAgIHNpbmsuYXBwZW5kKCJcbiIpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luZm9TaW5rLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvSW5mb1NpbmsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YmUwZGRmZmUzMWY1YTJmZTk3ZDc4NmZkMDY4Yzc0MWU2YTVmZWE2NS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvSW5mb1NpbmsuaAorKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIF9JTkZPU0lOS19JTkNMVURFRF8KLSNkZWZpbmUg
X0lORk9TSU5LX0lOQ0xVREVEXwotCi0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0ZGxp
Yi5oPgotI2luY2x1ZGUgImNvbXBpbGVyL0NvbW1vbi5oIgotCi0vLyBSZXR1cm5zIHRoZSBmcmFj
dGlvbmFsIHBhcnQgb2YgdGhlIGdpdmVuIGZsb2F0aW5nLXBvaW50IG51bWJlci4KLWlubGluZSBm
bG9hdCBmcmFjdGlvbmFsUGFydChmbG9hdCBmKSB7Ci0gIGZsb2F0IGludFBhcnQgPSAwLjBmOwot
ICByZXR1cm4gbW9kZmYoZiwgJmludFBhcnQpOwotfQotCi0vLwotLy8gVFByZWZpeFR5cGUgaXMg
dXNlZCB0byBjZW50cmFsaXplIGhvdyBpbmZvIGxvZyBtZXNzYWdlcyBzdGFydC4KLS8vIFNlZSBi
ZWxvdy4KLS8vCi1lbnVtIFRQcmVmaXhUeXBlIHsKLSAgICBFUHJlZml4Tm9uZSwKLSAgICBFUHJl
Zml4V2FybmluZywKLSAgICBFUHJlZml4RXJyb3IsCi0gICAgRVByZWZpeEludGVybmFsRXJyb3Is
Ci0gICAgRVByZWZpeFVuaW1wbGVtZW50ZWQsCi0gICAgRVByZWZpeE5vdGUKLX07Ci0KLS8vCi0v
LyBFbmNhcHN1bGF0ZSBpbmZvIGxvZ3MgZm9yIGFsbCBvYmplY3RzIHRoYXQgaGF2ZSB0aGVtLgot
Ly8KLS8vIFRoZSBtZXRob2RzIGFyZSBhIGdlbmVyYWwgc2V0IG9mIHRvb2xzIGZvciBnZXR0aW5n
IGEgdmFyaWV0eSBvZgotLy8gbWVzc2FnZXMgYW5kIHR5cGVzIGluc2VydGVkIGludG8gdGhlIGxv
Zy4KLS8vCi1jbGFzcyBUSW5mb1NpbmtCYXNlIHsKLXB1YmxpYzoKLSAgICBUSW5mb1NpbmtCYXNl
KCkge30KLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgIFRJbmZvU2lua0Jhc2UmIG9w
ZXJhdG9yPDwoY29uc3QgVCYgdCkgewotICAgICAgICBUUGVyc2lzdFN0cmluZ1N0cmVhbSBzdHJl
YW07Ci0gICAgICAgIHN0cmVhbSA8PCB0OwotICAgICAgICBzaW5rLmFwcGVuZChzdHJlYW0uc3Ry
KCkpOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIC8vIE92ZXJyaWRlIDw8IG9w
ZXJhdG9yIGZvciBzcGVjaWZpYyB0eXBlcy4gSXQgaXMgZmFzdGVyIHRvIGFwcGVuZCBzdHJpbmdz
Ci0gICAgLy8gYW5kIGNoYXJhY3RlcnMgZGlyZWN0bHkgdG8gdGhlIHNpbmsuCi0gICAgVEluZm9T
aW5rQmFzZSYgb3BlcmF0b3I8PChjaGFyIGMpIHsKLSAgICAgICAgc2luay5hcHBlbmQoMSwgYyk7
Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgVEluZm9TaW5rQmFzZSYgb3BlcmF0
b3I8PChjb25zdCBjaGFyKiBzdHIpIHsKLSAgICAgICAgc2luay5hcHBlbmQoc3RyKTsKLSAgICAg
ICAgcmV0dXJuICp0aGlzOwotICAgIH0KLSAgICBUSW5mb1NpbmtCYXNlJiBvcGVyYXRvcjw8KGNv
bnN0IFRQZXJzaXN0U3RyaW5nJiBzdHIpIHsKLSAgICAgICAgc2luay5hcHBlbmQoc3RyKTsKLSAg
ICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLSAgICBUSW5mb1NpbmtCYXNlJiBvcGVyYXRvcjw8
KGNvbnN0IFRTdHJpbmcmIHN0cikgewotICAgICAgICBzaW5rLmFwcGVuZChzdHIuY19zdHIoKSk7
Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgLy8gTWFrZSBzdXJlIGZsb2F0cyBh
cmUgd3JpdHRlbiB3aXRoIGNvcnJlY3QgcHJlY2lzaW9uLgotICAgIFRJbmZvU2lua0Jhc2UmIG9w
ZXJhdG9yPDwoZmxvYXQgZikgewotICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhdCBsZWFzdCBv
bmUgZGVjaW1hbCBwb2ludCBpcyB3cml0dGVuLiBJZiBhIG51bWJlcgotICAgICAgICAvLyBkb2Vz
IG5vdCBoYXZlIGEgZnJhY3Rpb25hbCBwYXJ0LCB0aGUgZGVmYXVsdCBwcmVjaXNpb24gZm9ybWF0
IGRvZXMKLSAgICAgICAgLy8gbm90IHdyaXRlIHRoZSBkZWNpbWFsIHBvcnRpb24gd2hpY2ggZ2V0
cyBpbnRlcnByZXRlZCBhcyBpbnRlZ2VyIGJ5Ci0gICAgICAgIC8vIHRoZSBjb21waWxlci4KLSAg
ICAgICAgVFBlcnNpc3RTdHJpbmdTdHJlYW0gc3RyZWFtOwotICAgICAgICBpZiAoZnJhY3Rpb25h
bFBhcnQoZikgPT0gMC4wZikgewotICAgICAgICAgICAgc3RyZWFtLnByZWNpc2lvbigxKTsKLSAg
ICAgICAgICAgIHN0cmVhbSA8PCBzdGQ6OnNob3dwb2ludCA8PCBzdGQ6OmZpeGVkIDw8IGY7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdHJlYW0udW5zZXRmKHN0ZDo6aW9zOjpmaXhl
ZCk7Ci0gICAgICAgICAgICBzdHJlYW0udW5zZXRmKHN0ZDo6aW9zOjpzY2llbnRpZmljKTsKLSAg
ICAgICAgICAgIHN0cmVhbS5wcmVjaXNpb24oOCk7Ci0gICAgICAgICAgICBzdHJlYW0gPDwgZjsK
LSAgICAgICAgfQotICAgICAgICBzaW5rLmFwcGVuZChzdHJlYW0uc3RyKCkpOwotICAgICAgICBy
ZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIC8vIFdyaXRlIGJvb2xlYW4gdmFsdWVzIGFzIHRoZWly
IG5hbWVzIGluc3RlYWQgb2YgaW50ZWdyYWwgdmFsdWUuCi0gICAgVEluZm9TaW5rQmFzZSYgb3Bl
cmF0b3I8PChib29sIGIpIHsKLSAgICAgICAgY29uc3QgY2hhciogc3RyID0gYiA/ICJ0cnVlIiA6
ICJmYWxzZSI7Ci0gICAgICAgIHNpbmsuYXBwZW5kKHN0cik7Ci0gICAgICAgIHJldHVybiAqdGhp
czsKLSAgICB9Ci0KLSAgICB2b2lkIGVyYXNlKCkgeyBzaW5rLmNsZWFyKCk7IH0KLSAgICBpbnQg
c2l6ZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oc2luay5zaXplKCkpOyB9Ci0KLSAgICBj
b25zdCBUUGVyc2lzdFN0cmluZyYgc3RyKCkgY29uc3QgeyByZXR1cm4gc2luazsgfQotICAgIGNv
bnN0IGNoYXIqIGNfc3RyKCkgY29uc3QgeyByZXR1cm4gc2luay5jX3N0cigpOyB9Ci0KLSAgICB2
b2lkIHByZWZpeChUUHJlZml4VHlwZSBwKTsKLSAgICB2b2lkIGxvY2F0aW9uKGludCBmaWxlLCBp
bnQgbGluZSk7Ci0gICAgdm9pZCBsb2NhdGlvbihjb25zdCBUU291cmNlTG9jJiBsb2MpOwotICAg
IHZvaWQgbWVzc2FnZShUUHJlZml4VHlwZSBwLCBjb25zdCBUU291cmNlTG9jJiBsb2MsIGNvbnN0
IGNoYXIqIG0pOwotCi1wcml2YXRlOgotICAgIFRQZXJzaXN0U3RyaW5nIHNpbms7Ci19OwotCi1j
bGFzcyBUSW5mb1NpbmsgewotcHVibGljOgotICAgIFRJbmZvU2lua0Jhc2UgaW5mbzsKLSAgICBU
SW5mb1NpbmtCYXNlIGRlYnVnOwotICAgIFRJbmZvU2lua0Jhc2Ugb2JqOwotfTsKLQotI2VuZGlm
IC8vIF9JTkZPU0lOS19JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMmNkYmUxN2FhNmQ1ZGIwMzYwZGViNmM5MTBkMWRmMDY3NjA4M2Q1OC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NjQgKzAs
MCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8KLS8vIENyZWF0ZSBzdHJpbmdzIHRoYXQgZGVj
bGFyZSBidWlsdC1pbiBkZWZpbml0aW9ucywgYWRkIGJ1aWx0LWlucyB0aGF0Ci0vLyBjYW5ub3Qg
YmUgZXhwcmVzc2VkIGluIHRoZSBmaWxlcywgYW5kIGVzdGFibGlzaCBtYXBwaW5ncyBiZXR3ZWVu
IAotLy8gYnVpbHQtaW4gZnVuY3Rpb25zIGFuZCBvcGVyYXRvcnMuCi0vLwotCi0jaW5jbHVkZSAi
Y29tcGlsZXIvSW5pdGlhbGl6ZS5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRl
LmgiCi0KLXZvaWQgSW5zZXJ0QnVpbHRJbkZ1bmN0aW9ucyhTaFNoYWRlclR5cGUgdHlwZSwgU2hT
aGFkZXJTcGVjIHNwZWMsIGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyAmcmVzb3VyY2VzLCBUU3lt
Ym9sVGFibGUgJnN5bWJvbFRhYmxlKQotewotICAgIFRUeXBlICpmbG9hdDEgPSBuZXcgVFR5cGUo
RWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAxKTsKLSAgICBUVHlwZSAqZmxvYXQy
ID0gbmV3IFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMik7Ci0gICAg
VFR5cGUgKmZsb2F0MyA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9i
YWwsIDMpOwotICAgIFRUeXBlICpmbG9hdDQgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVm
aW5lZCwgRXZxR2xvYmFsLCA0KTsKLQotICAgIFRUeXBlICppbnQyID0gbmV3IFRUeXBlKEVidElu
dCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDIpOwotICAgIFRUeXBlICppbnQzID0gbmV3IFRU
eXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDMpOwotICAgIFRUeXBlICppbnQ0
ID0gbmV3IFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDQpOwotCi0gICAg
Ly8KLSAgICAvLyBBbmdsZSBhbmQgVHJpZ29ub21ldHJpYyBGdW5jdGlvbnMuCi0gICAgLy8KLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInJhZGlhbnMiLCBmbG9hdDEpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAicmFkaWFucyIsIGZsb2F0Mik7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJyYWRpYW5zIiwgZmxvYXQz
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInJhZGlhbnMiLCBmbG9h
dDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkZWdyZWVzIiwg
ZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImRlZ3JlZXMi
LCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZGVncmVl
cyIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJkZWdy
ZWVzIiwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAi
c2luIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInNp
biIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzaW4i
LCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAic2luIiwg
ZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiY29zIiwg
ZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImNvcyIsIGZs
b2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJjb3MiLCBmbG9h
dDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiY29zIiwgZmxvYXQ0
KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAidGFuIiwgZmxvYXQx
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInRhbiIsIGZsb2F0Mik7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJ0YW4iLCBmbG9hdDMpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGFuIiwgZmxvYXQ0KTsKLQot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiYXNpbiIsIGZsb2F0MSk7Ci0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJhc2luIiwgZmxvYXQyKTsKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImFzaW4iLCBmbG9hdDMpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiYXNpbiIsIGZsb2F0NCk7Ci0KLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImFjb3MiLCBmbG9hdDEpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiYWNvcyIsIGZsb2F0Mik7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJhY29zIiwgZmxvYXQzKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImFjb3MiLCBmbG9hdDQpOwotCi0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJhdGFuIiwgZmxvYXQxLCBmbG9hdDEp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiYXRhbiIsIGZsb2F0Miwg
ZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImF0YW4iLCBm
bG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJh
dGFuIiwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDEsICJhdGFuIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MiwgImF0YW4iLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQzLCAiYXRhbiIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDQsICJhdGFuIiwgZmxvYXQ0KTsKLQotICAgIC8vCi0gICAgLy8gRXhwb25lbnRpYWwgRnVuY3Rp
b25zLgotICAgIC8vCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJwb3ci
LCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIs
ICJwb3ciLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDMsICJwb3ciLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDQsICJwb3ciLCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MSwgImV4cCIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDIsICJleHAiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQzLCAiZXhwIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0NCwgImV4cCIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MSwgImxvZyIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDIsICJsb2ciLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQzLCAibG9nIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0NCwgImxvZyIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MSwgImV4cDIiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQyLCAiZXhwMiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDMsICJleHAyIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0NCwgImV4cDIiLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDEsICJsb2cyIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MiwgImxvZzIiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQzLCAibG9nMiIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDQsICJsb2cyIiwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQxLCAic3FydCIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDIsICJzcXJ0IiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MywgInNxcnQiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0
LCAic3FydCIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MSwgImludmVyc2VzcXJ0IiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MiwgImludmVyc2VzcXJ0IiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MywgImludmVyc2VzcXJ0IiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0NCwgImludmVyc2VzcXJ0IiwgZmxvYXQ0KTsKLQotICAgIC8vCi0g
ICAgLy8gQ29tbW9uIEZ1bmN0aW9ucy4KLSAgICAvLwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQxLCAiYWJzIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MiwgImFicyIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDMsICJhYnMiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQ0LCAiYWJzIiwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQxLCAic2lnbiIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDIsICJzaWduIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MywgInNpZ24iLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQ0LCAic2lnbiIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MSwgImZsb29yIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MiwgImZsb29yIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MywgImZsb29yIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0NCwgImZsb29yIiwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQxLCAiY2VpbCIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDIsICJjZWlsIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MywgImNlaWwiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQ0LCAiY2VpbCIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MSwgImZyYWN0IiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MiwgImZyYWN0IiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MywgImZyYWN0IiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0NCwgImZyYWN0IiwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQxLCAibW9kIiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQyLCAibW9kIiwgZmxvYXQyLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQzLCAibW9kIiwgZmxvYXQzLCBmbG9hdDEpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibW9kIiwgZmxvYXQ0LCBmbG9hdDEpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibW9kIiwgZmxvYXQyLCBmbG9hdDIpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAibW9kIiwgZmxvYXQzLCBmbG9h
dDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibW9kIiwgZmxvYXQ0
LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJtaW4i
LCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIs
ICJtaW4iLCBmbG9hdDIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDMsICJtaW4iLCBmbG9hdDMsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDQsICJtaW4iLCBmbG9hdDQsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDIsICJtaW4iLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtaW4iLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJtaW4iLCBmbG9hdDQsIGZsb2F0NCk7Ci0K
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgIm1heCIsIGZsb2F0MSwgZmxv
YXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgIm1heCIsIGZsb2F0
MiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgIm1heCIs
IGZsb2F0MywgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwg
Im1heCIsIGZsb2F0NCwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MiwgIm1heCIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MywgIm1heCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0NCwgIm1heCIsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiY2xhbXAiLCBmbG9hdDEsIGZsb2F0MSwgZmxvYXQx
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImNsYW1wIiwgZmxvYXQy
LCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMs
ICJjbGFtcCIsIGZsb2F0MywgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQ0LCAiY2xhbXAiLCBmbG9hdDQsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImNsYW1wIiwgZmxvYXQyLCBmbG9hdDIs
IGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJjbGFtcCIs
IGZsb2F0MywgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQ0LCAiY2xhbXAiLCBmbG9hdDQsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibWl4IiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJtaXgiLCBmbG9hdDIsIGZs
b2F0MiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgIm1p
eCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQ0LCAibWl4IiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJtaXgiLCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQyKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgIm1peCIsIGZsb2F0MywgZmxv
YXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibWl4
IiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MSwgInN0ZXAiLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDIsICJzdGVwIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAic3RlcCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInN0ZXAiLCBmbG9hdDQsIGZsb2F0NCk7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJzdGVwIiwgZmxvYXQxLCBm
bG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAic3RlcCIsIGZs
b2F0MSwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInN0
ZXAiLCBmbG9hdDEsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MSwgInNtb290aHN0ZXAiLCBmbG9hdDEsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInNtb290aHN0ZXAiLCBmbG9hdDIsIGZsb2F0Miwg
ZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInNtb290aHN0
ZXAiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0NCwgInNtb290aHN0ZXAiLCBmbG9hdDQsIGZsb2F0NCwgZmxvYXQ0KTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInNtb290aHN0ZXAiLCBmbG9hdDEsIGZs
b2F0MSwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInNt
b290aHN0ZXAiLCBmbG9hdDEsIGZsb2F0MSwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0NCwgInNtb290aHN0ZXAiLCBmbG9hdDEsIGZsb2F0MSwgZmxvYXQ0KTsK
LQotICAgIC8vCi0gICAgLy8gR2VvbWV0cmljIEZ1bmN0aW9ucy4KLSAgICAvLwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibGVuZ3RoIiwgZmxvYXQxKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0Mik7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJsZW5ndGgiLCBmbG9hdDMpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibGVuZ3RoIiwgZmxvYXQ0KTsKLQotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZGlzdGFuY2UiLCBmbG9hdDEsIGZs
b2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkaXN0YW5jZSIs
IGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwg
ImRpc3RhbmNlIiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQxLCAiZGlzdGFuY2UiLCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRvdCIsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRvdCIsIGZsb2F0MiwgZmxvYXQyKTsKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRvdCIsIGZsb2F0MywgZmxvYXQz
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRvdCIsIGZsb2F0NCwg
ZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiY3Jvc3Mi
LCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEs
ICJub3JtYWxpemUiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQyLCAibm9ybWFsaXplIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MywgIm5vcm1hbGl6ZSIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDQsICJub3JtYWxpemUiLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDEsICJmYWNlZm9yd2FyZCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZmFjZWZvcndhcmQiLCBm
bG9hdDIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MywgImZhY2Vmb3J3YXJkIiwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJmYWNlZm9yd2FyZCIsIGZsb2F0NCwgZmxvYXQ0
LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJyZWZs
ZWN0IiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQyLCAicmVmbGVjdCIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MywgInJlZmxlY3QiLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJyZWZsZWN0IiwgZmxvYXQ0LCBmbG9hdDQpOwotCi0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJyZWZyYWN0IiwgZmxvYXQxLCBm
bG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJy
ZWZyYWN0IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDMsICJyZWZyYWN0IiwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0MSk7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJyZWZyYWN0IiwgZmxvYXQ0LCBmbG9h
dDQsIGZsb2F0MSk7Ci0KLSAgICBUVHlwZSAqbWF0MiA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJw
VW5kZWZpbmVkLCBFdnFHbG9iYWwsIDIsIHRydWUpOwotICAgIFRUeXBlICptYXQzID0gbmV3IFRU
eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMywgdHJ1ZSk7Ci0gICAgVFR5
cGUgKm1hdDQgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCA0
LCB0cnVlKTsKLQotICAgIC8vCi0gICAgLy8gTWF0cml4IEZ1bmN0aW9ucy4KLSAgICAvLwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4obWF0MiwgIm1hdHJpeENvbXBNdWx0IiwgbWF0Miwg
bWF0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihtYXQzLCAibWF0cml4Q29tcE11
bHQiLCBtYXQzLCBtYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKG1hdDQsICJt
YXRyaXhDb21wTXVsdCIsIG1hdDQsIG1hdDQpOwotCi0gICAgVFR5cGUgKmJvb2wxID0gbmV3IFRU
eXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAxKTsKLSAgICBUVHlwZSAqYm9v
bDIgPSBuZXcgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDIpOwotICAg
IFRUeXBlICpib29sMyA9IG5ldyBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUdsb2Jh
bCwgMyk7Ci0gICAgVFR5cGUgKmJvb2w0ID0gbmV3IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5l
ZCwgRXZxR2xvYmFsLCA0KTsKLQotICAgIC8vCi0gICAgLy8gVmVjdG9yIHJlbGF0aW9uYWwgZnVu
Y3Rpb25zLgotICAgIC8vCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImxl
c3NUaGFuIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Ym9vbDMsICJsZXNzVGhhbiIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGJvb2w0LCAibGVzc1RoYW4iLCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAibGVzc1RoYW4iLCBpbnQyLCBpbnQyKTsKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAibGVzc1RoYW4iLCBpbnQzLCBpbnQz
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAibGVzc1RoYW4iLCBpbnQ0
LCBpbnQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJsZXNzVGhh
bkVxdWFsIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Ym9vbDMsICJsZXNzVGhhbkVxdWFsIiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oYm9vbDQsICJsZXNzVGhhbkVxdWFsIiwgZmxvYXQ0LCBmbG9hdDQpOwot
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImxlc3NUaGFuRXF1YWwiLCBp
bnQyLCBpbnQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAibGVzc1Ro
YW5FcXVhbCIsIGludDMsIGludDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9v
bDQsICJsZXNzVGhhbkVxdWFsIiwgaW50NCwgaW50NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGJvb2wyLCAiZ3JlYXRlclRoYW4iLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImdyZWF0ZXJUaGFuIiwgZmxvYXQzLCBmbG9h
dDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJncmVhdGVyVGhhbiIs
IGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIs
ICJncmVhdGVyVGhhbiIsIGludDIsIGludDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oYm9vbDMsICJncmVhdGVyVGhhbiIsIGludDMsIGludDMpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oYm9vbDQsICJncmVhdGVyVGhhbiIsIGludDQsIGludDQpOwotCi0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImdyZWF0ZXJUaGFuRXF1YWwiLCBmbG9hdDIs
IGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImdyZWF0ZXJU
aGFuRXF1YWwiLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihib29sNCwgImdyZWF0ZXJUaGFuRXF1YWwiLCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZ3JlYXRlclRoYW5FcXVhbCIsIGludDIsIGlu
dDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJncmVhdGVyVGhhbkVx
dWFsIiwgaW50MywgaW50Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwg
ImdyZWF0ZXJUaGFuRXF1YWwiLCBpbnQ0LCBpbnQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oYm9vbDIsICJlcXVhbCIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZXF1YWwiLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImVxdWFsIiwgZmxvYXQ0LCBmbG9hdDQpOwot
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImVxdWFsIiwgaW50MiwgaW50
Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImVxdWFsIiwgaW50Mywg
aW50Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImVxdWFsIiwgaW50
NCwgaW50NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZXF1YWwi
LCBib29sMiwgYm9vbDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJl
cXVhbCIsIGJvb2wzLCBib29sMyk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29s
NCwgImVxdWFsIiwgYm9vbDQsIGJvb2w0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oYm9vbDIsICJub3RFcXVhbCIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGJvb2wzLCAibm90RXF1YWwiLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgIm5vdEVxdWFsIiwgZmxvYXQ0LCBmbG9hdDQp
OwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgIm5vdEVxdWFsIiwgaW50
MiwgaW50Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgIm5vdEVxdWFs
IiwgaW50MywgaW50Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgIm5v
dEVxdWFsIiwgaW50NCwgaW50NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJv
b2wyLCAibm90RXF1YWwiLCBib29sMiwgYm9vbDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oYm9vbDMsICJub3RFcXVhbCIsIGJvb2wzLCBib29sMyk7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihib29sNCwgIm5vdEVxdWFsIiwgYm9vbDQsIGJvb2w0KTsKLQotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDEsICJhbnkiLCBib29sMik7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihib29sMSwgImFueSIsIGJvb2wzKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGJvb2wxLCAiYW55IiwgYm9vbDQpOwotCi0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihib29sMSwgImFsbCIsIGJvb2wyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGJvb2wxLCAiYWxsIiwgYm9vbDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oYm9vbDEsICJhbGwiLCBib29sNCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGJvb2wyLCAibm90IiwgYm9vbDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Ym9vbDMsICJub3QiLCBib29sMyk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29s
NCwgIm5vdCIsIGJvb2w0KTsKLQotICAgIFRUeXBlICpzYW1wbGVyMkQgPSBuZXcgVFR5cGUoRWJ0
U2FtcGxlcjJELCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMSk7Ci0gICAgVFR5cGUgKnNhbXBs
ZXJDdWJlID0gbmV3IFRUeXBlKEVidFNhbXBsZXJDdWJlLCBFYnBVbmRlZmluZWQsIEV2cUdsb2Jh
bCwgMSk7Ci0KLSAgICAvLwotICAgIC8vIFRleHR1cmUgRnVuY3Rpb25zIGZvciBHTFNMIEVTIDEu
MAotICAgIC8vCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJl
MkQiLCBzYW1wbGVyMkQsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlcjJELCBmbG9hdDMpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxv
YXQ0KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmVDdWJl
Iiwgc2FtcGxlckN1YmUsIGZsb2F0Myk7Ci0KLSAgICBpZiAocmVzb3VyY2VzLk9FU19FR0xfaW1h
Z2VfZXh0ZXJuYWwpCi0gICAgewotICAgICAgICBUVHlwZSAqc2FtcGxlckV4dGVybmFsT0VTID0g
bmV3IFRUeXBlKEVidFNhbXBsZXJFeHRlcm5hbE9FUywgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWws
IDEpOwotCi0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVy
ZTJEIiwgc2FtcGxlckV4dGVybmFsT0VTLCBmbG9hdDIpOwotICAgICAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVyRXh0ZXJuYWxPRVMs
IGZsb2F0Myk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4
dHVyZTJEUHJvaiIsIHNhbXBsZXJFeHRlcm5hbE9FUywgZmxvYXQ0KTsKLSAgICB9Ci0KLSAgICBp
ZiAocmVzb3VyY2VzLkFSQl90ZXh0dXJlX3JlY3RhbmdsZSkKLSAgICB7Ci0gICAgICAgIFRUeXBl
ICpzYW1wbGVyMkRSZWN0ID0gbmV3IFRUeXBlKEVidFNhbXBsZXIyRFJlY3QsIEVicFVuZGVmaW5l
ZCwgRXZxR2xvYmFsLCAxKTsKLQotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0NCwgInRleHR1cmUyRFJlY3QiLCBzYW1wbGVyMkRSZWN0LCBmbG9hdDIpOwotICAgICAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFJlY3RQcm9qIiwgc2Ft
cGxlcjJEUmVjdCwgZmxvYXQzKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDQsICJ0ZXh0dXJlMkRSZWN0UHJvaiIsIHNhbXBsZXIyRFJlY3QsIGZsb2F0NCk7Ci0gICAg
fQotCi0gICAgaWYgKHR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKQotICAgIHsKLSAgICAgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkQiLCBzYW1wbGVyMkQs
IGZsb2F0MiwgZmxvYXQxKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlcjJELCBmbG9hdDMsIGZsb2F0MSk7Ci0gICAgICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBs
ZXIyRCwgZmxvYXQ0LCBmbG9hdDEpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0NCwgInRleHR1cmVDdWJlIiwgc2FtcGxlckN1YmUsIGZsb2F0MywgZmxvYXQxKTsKLQot
ICAgICAgICBpZiAocmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcykKLSAgICAgICAg
ewotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkRmR4Iiwg
ZmxvYXQxKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAi
ZEZkeCIsIGZsb2F0Mik7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MywgImRGZHgiLCBmbG9hdDMpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDQsICJkRmR4IiwgZmxvYXQ0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkRmR5IiwgZmxvYXQxKTsKLSAgICAg
ICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZEZkeSIsIGZsb2F0Mik7
Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImRGZHkiLCBm
bG9hdDMpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJk
RmR5IiwgZmxvYXQ0KTsKLQotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDEsICJmd2lkdGgiLCBmbG9hdDEpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDIsICJmd2lkdGgiLCBmbG9hdDIpOwotICAgICAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJmd2lkdGgiLCBmbG9hdDMpOwotICAgICAgICAgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJmd2lkdGgiLCBmbG9hdDQpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgaWYodHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKQotICAgIHsK
LSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRMb2Qi
LCBzYW1wbGVyMkQsIGZsb2F0MiwgZmxvYXQxKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qTG9kIiwgc2FtcGxlcjJELCBmbG9hdDMsIGZs
b2F0MSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVy
ZTJEUHJvakxvZCIsIHNhbXBsZXIyRCwgZmxvYXQ0LCBmbG9hdDEpOwotICAgICAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmVDdWJlTG9kIiwgc2FtcGxlckN1YmUs
IGZsb2F0MywgZmxvYXQxKTsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIERlcHRoIHJhbmdlIGlu
IHdpbmRvdyBjb29yZGluYXRlcwotICAgIC8vCi0gICAgVEZpZWxkTGlzdCAqZmllbGRzID0gTmV3
UG9vbFRGaWVsZExpc3QoKTsKLSAgICBURmllbGQgKm5lYXIgPSBuZXcgVEZpZWxkKG5ldyBUVHlw
ZShFYnRGbG9hdCwgRWJwSGlnaCwgRXZxR2xvYmFsLCAxKSwgTmV3UG9vbFRTdHJpbmcoIm5lYXIi
KSk7Ci0gICAgVEZpZWxkICpmYXIgPSBuZXcgVEZpZWxkKG5ldyBUVHlwZShFYnRGbG9hdCwgRWJw
SGlnaCwgRXZxR2xvYmFsLCAxKSwgTmV3UG9vbFRTdHJpbmcoImZhciIpKTsKLSAgICBURmllbGQg
KmRpZmYgPSBuZXcgVEZpZWxkKG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwSGlnaCwgRXZxR2xvYmFs
LCAxKSwgTmV3UG9vbFRTdHJpbmcoImRpZmYiKSk7Ci0gICAgZmllbGRzLT5wdXNoX2JhY2sobmVh
cik7Ci0gICAgZmllbGRzLT5wdXNoX2JhY2soZmFyKTsKLSAgICBmaWVsZHMtPnB1c2hfYmFjayhk
aWZmKTsKLSAgICBUU3RydWN0dXJlICpkZXB0aFJhbmdlU3RydWN0ID0gbmV3IFRTdHJ1Y3R1cmUo
TmV3UG9vbFRTdHJpbmcoImdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJzIiksIGZpZWxkcyk7Ci0gICAg
VFZhcmlhYmxlICpkZXB0aFJhbmdlUGFyYW1ldGVycyA9IG5ldyBUVmFyaWFibGUoJmRlcHRoUmFu
Z2VTdHJ1Y3QtPm5hbWUoKSwgZGVwdGhSYW5nZVN0cnVjdCwgdHJ1ZSk7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0KCpkZXB0aFJhbmdlUGFyYW1ldGVycyk7Ci0gICAgVFZhcmlhYmxlICpkZXB0aFJh
bmdlID0gbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRGVwdGhSYW5nZSIpLCBUVHlw
ZShkZXB0aFJhbmdlU3RydWN0KSk7Ci0gICAgZGVwdGhSYW5nZS0+c2V0UXVhbGlmaWVyKEV2cVVu
aWZvcm0pOwotICAgIHN5bWJvbFRhYmxlLmluc2VydCgqZGVwdGhSYW5nZSk7Ci0KLSAgICAvLwot
ICAgIC8vIEltcGxlbWVudGF0aW9uIGRlcGVuZGVudCBidWlsdC1pbiBjb25zdGFudHMuCi0gICAg
Ly8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xfTWF4VmVydGV4QXR0cmlicyIs
IHJlc291cmNlcy5NYXhWZXJ0ZXhBdHRyaWJzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25z
dEludCgiZ2xfTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMiLCByZXNvdXJjZXMuTWF4VmVydGV4VW5p
Zm9ybVZlY3RvcnMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KCJnbF9NYXhWYXJ5
aW5nVmVjdG9ycyIsIHJlc291cmNlcy5NYXhWYXJ5aW5nVmVjdG9ycyk7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzIiwgcmVzb3Vy
Y2VzLk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRD
b25zdEludCgiZ2xfTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhD
b21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdElu
dCgiZ2xfTWF4VGV4dHVyZUltYWdlVW5pdHMiLCByZXNvdXJjZXMuTWF4VGV4dHVyZUltYWdlVW5p
dHMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KCJnbF9NYXhGcmFnbWVudFVuaWZv
cm1WZWN0b3JzIiwgcmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMpOwotCi0gICAg
aWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BFQykKLSAgICB7Ci0gICAgICAgIHN5bWJvbFRh
YmxlLmluc2VydENvbnN0SW50KCJnbF9NYXhEcmF3QnVmZmVycyIsIHJlc291cmNlcy5NYXhEcmF3
QnVmZmVycyk7Ci0gICAgfQotfQotCi12b2lkIElkZW50aWZ5QnVpbHRJbnMoU2hTaGFkZXJUeXBl
IHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNo
QnVpbHRJblJlc291cmNlcyAmcmVzb3VyY2VzLAotICAgICAgICAgICAgICAgICAgICAgIFRTeW1i
b2xUYWJsZSAmc3ltYm9sVGFibGUpCi17Ci0gICAgLy8KLSAgICAvLyBGaXJzdCwgaW5zZXJ0IHNv
bWUgc3BlY2lhbCBidWlsdC1pbiB2YXJpYWJsZXMgdGhhdCBhcmUgbm90IGluIAotICAgIC8vIHRo
ZSBidWlsdC1pbiBoZWFkZXIgZmlsZXMuCi0gICAgLy8KLSAgICBzd2l0Y2godHlwZSkgewotICAg
IGNhc2UgU0hfRlJBR01FTlRfU0hBREVSOgotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5l
dyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb29yZCIpLCAgICAgICAgICAgICAg
ICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0Nvb3JkLCAgIDQpKSk7
Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmlu
ZygiZ2xfRnJvbnRGYWNpbmciKSwgICAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRCb29sLCAg
RWJwVW5kZWZpbmVkLCBFdnFGcm9udEZhY2luZywgMSkpKTsKLSAgICAgICAgc3ltYm9sVGFibGUu
aW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9Qb2ludENvb3JkIiksICAg
ICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cVBvaW50Q29v
cmQsICAyKSkpOwotCi0gICAgICAgIC8vCi0gICAgICAgIC8vIEluIENTUyBTaGFkZXJzLCBnbF9G
cmFnQ29sb3IsIGdsX0ZyYWdEYXRhLCBhbmQgZ2xfTWF4RHJhd0J1ZmZlcnMgYXJlIG5vdCBhdmFp
bGFibGUuCi0gICAgICAgIC8vIEluc3RlYWQsIGNzc19NaXhDb2xvciBhbmQgY3NzX0NvbG9yTWF0
cml4IGFyZSBhdmFpbGFibGUuCi0gICAgICAgIC8vCi0gICAgICAgIGlmIChzcGVjICE9IFNIX0NT
U19TSEFERVJTX1NQRUMpIHsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRW
YXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0NvbG9yIiksICAgICAgICAgICAgICAgICAg
IFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb2xvciwgICA0KSkpOwotICAgICAg
ICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJn
bF9GcmFnRGF0YVtnbF9NYXhEcmF3QnVmZmVyc10iKSwgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1
bSwgRXZxRnJhZ0RhdGEsICAgIDQpKSk7Ci0gICAgICAgICAgICBpZiAocmVzb3VyY2VzLkVYVF9m
cmFnX2RlcHRoKSB7Ci0gICAgICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZh
cmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnRGVwdGhFWFQiKSwgICAgICAgICAgICBUVHlw
ZShFYnRGbG9hdCwgcmVzb3VyY2VzLkZyYWdtZW50UHJlY2lzaW9uSGlnaCA/IEVicEhpZ2ggOiBF
YnBNZWRpdW0sIEV2cUZyYWdEZXB0aCwgMSkpKTsKLSAgICAgICAgICAgICAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb0V4dGVuc2lvbigiZ2xfRnJhZ0RlcHRoRVhUIiwgIkdMX0VYVF9mcmFnX2RlcHRo
Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzeW1ib2xU
YWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImNzc19NaXhDb2xvciIp
LCAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFHbG9iYWws
ICAgICAgNCkpKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJs
ZShOZXdQb29sVFN0cmluZygiY3NzX0NvbG9yTWF0cml4IiksICAgICAgICAgICAgICAgIFRUeXBl
KEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUdsb2JhbCwgICAgICA0LCB0cnVlKSkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNIX1ZFUlRFWF9TSEFERVI6Ci0gICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xf
UG9zaXRpb24iKSwgICAgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cVBvc2l0aW9uLCAgICA0
KSkpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRT
dHJpbmcoImdsX1BvaW50U2l6ZSIpLCAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cVBv
aW50U2l6ZSwgICAxKSkpOwotICAgICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6IGFzc2VydChm
YWxzZSAmJiAiTGFuZ3VhZ2Ugbm90IHN1cHBvcnRlZCIpOwotICAgIH0KLQotICAgIC8vCi0gICAg
Ly8gTmV4dCwgaWRlbnRpZnkgd2hpY2ggYnVpbHQtaW5zIGZyb20gdGhlIGFscmVhZHkgbG9hZGVk
IGhlYWRlcnMgaGF2ZQotICAgIC8vIGEgbWFwcGluZyB0byBhbiBvcGVyYXRvci4gIFRob3NlIHRo
YXQgYXJlIG5vdCBpZGVudGlmaWVkIGFzIHN1Y2ggYXJlCi0gICAgLy8gZXhwZWN0ZWQgdG8gYmUg
cmVzb2x2ZWQgdGhyb3VnaCBhIGxpYnJhcnkgb2YgZnVuY3Rpb25zLCB2ZXJzdXMgYXMKLSAgICAv
LyBvcGVyYXRpb25zLgotICAgIC8vCi0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigi
bWF0cml4Q29tcE11bHQiLCAgIEVPcE11bCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKCJlcXVhbCIsICAgICAgICAgICAgRU9wVmVjdG9yRXF1YWwpOwotICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm5vdEVxdWFsIiwgICAgICAgICBFT3BWZWN0b3JOb3RFcXVh
bCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibGVzc1RoYW4iLCAgICAgICAg
IEVPcExlc3NUaGFuKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJncmVhdGVy
VGhhbiIsICAgICAgRU9wR3JlYXRlclRoYW4pOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoImxlc3NUaGFuRXF1YWwiLCAgICBFT3BMZXNzVGhhbkVxdWFsKTsKLSAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKCJncmVhdGVyVGhhbkVxdWFsIiwgRU9wR3JlYXRlclRoYW5F
cXVhbCk7Ci0gICAgCi0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigicmFkaWFucyIs
ICAgICAgRU9wUmFkaWFucyk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZGVn
cmVlcyIsICAgICAgRU9wRGVncmVlcyk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cigic2luIiwgICAgICAgICAgRU9wU2luKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKCJjb3MiLCAgICAgICAgICBFT3BDb3MpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoInRhbiIsICAgICAgICAgIEVPcFRhbik7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9P
cGVyYXRvcigiYXNpbiIsICAgICAgICAgRU9wQXNpbik7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcigiYWNvcyIsICAgICAgICAgRU9wQWNvcyk7Ci0gICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcigiYXRhbiIsICAgICAgICAgRU9wQXRhbik7Ci0KLSAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKCJwb3ciLCAgICAgICAgICBFT3BQb3cpOwotICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvT3BlcmF0b3IoImV4cDIiLCAgICAgICAgIEVPcEV4cDIpOwotICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxvZyIsICAgICAgICAgIEVPcExvZyk7Ci0gICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZXhwIiwgICAgICAgICAgRU9wRXhwKTsKLSAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJsb2cyIiwgICAgICAgICBFT3BMb2cyKTsKLSAg
ICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzcXJ0IiwgICAgICAgICBFT3BTcXJ0KTsK
LSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJpbnZlcnNlc3FydCIsICBFT3BJbnZl
cnNlU3FydCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhYnMiLCAgICAg
ICAgICBFT3BBYnMpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInNpZ24iLCAg
ICAgICAgIEVPcFNpZ24pOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImZsb29y
IiwgICAgICAgIEVPcEZsb29yKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJj
ZWlsIiwgICAgICAgICBFT3BDZWlsKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KCJmcmFjdCIsICAgICAgICBFT3BGcmFjdCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVy
YXRvcigibW9kIiwgICAgICAgICAgRU9wTW9kKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKCJtaW4iLCAgICAgICAgICBFT3BNaW4pOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoIm1heCIsICAgICAgICAgIEVPcE1heCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcigiY2xhbXAiLCAgICAgICAgRU9wQ2xhbXApOwotICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoIm1peCIsICAgICAgICAgIEVPcE1peCk7Ci0gICAgc3ltYm9sVGFibGUu
cmVsYXRlVG9PcGVyYXRvcigic3RlcCIsICAgICAgICAgRU9wU3RlcCk7Ci0gICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9PcGVyYXRvcigic21vb3Roc3RlcCIsICAgRU9wU21vb3RoU3RlcCk7Ci0KLSAg
ICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJsZW5ndGgiLCAgICAgICBFT3BMZW5ndGgp
OwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImRpc3RhbmNlIiwgICAgIEVPcERp
c3RhbmNlKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkb3QiLCAgICAgICAg
ICBFT3BEb3QpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImNyb3NzIiwgICAg
ICAgIEVPcENyb3NzKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJub3JtYWxp
emUiLCAgICBFT3BOb3JtYWxpemUpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
ImZhY2Vmb3J3YXJkIiwgIEVPcEZhY2VGb3J3YXJkKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVU
b09wZXJhdG9yKCJyZWZsZWN0IiwgICAgICBFT3BSZWZsZWN0KTsKLSAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKCJyZWZyYWN0IiwgICAgICBFT3BSZWZyYWN0KTsKLSAgICAKLSAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhbnkiLCAgICAgICAgICBFT3BBbnkpOwotICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImFsbCIsICAgICAgICAgIEVPcEFsbCk7Ci0g
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibm90IiwgICAgICAgICAgRU9wVmVjdG9y
TG9naWNhbE5vdCk7Ci0KLSAgICAvLyBNYXAgbGFuZ3VhZ2Utc3BlY2lmaWMgb3BlcmF0b3JzLgot
ICAgIHN3aXRjaCh0eXBlKSB7Ci0gICAgY2FzZSBTSF9WRVJURVhfU0hBREVSOgotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjoKLSAgICAgICAgaWYgKHJlc291cmNl
cy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMpIHsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoImRGZHgiLCAgIEVPcERGZHgpOwotICAgICAgICAgICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9PcGVyYXRvcigiZEZkeSIsICAgRU9wREZkeSk7Ci0gICAgICAgICAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJmd2lkdGgiLCBFT3BGd2lkdGgpOwotCi0gICAgICAg
ICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbigiZEZkeCIsICJHTF9PRVNfc3RhbmRh
cmRfZGVyaXZhdGl2ZXMiKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5z
aW9uKCJkRmR5IiwgIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpOwotICAgICAgICAgICAg
c3ltYm9sVGFibGUucmVsYXRlVG9FeHRlbnNpb24oImZ3aWR0aCIsICJHTF9PRVNfc3RhbmRhcmRf
ZGVyaXZhdGl2ZXMiKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OiBi
cmVhazsKLSAgICB9Ci0KLSAgICAvLyBGaW5hbGx5IGFkZCByZXNvdXJjZS1zcGVjaWZpYyB2YXJp
YWJsZXMuCi0gICAgc3dpdGNoKHR5cGUpIHsKLSAgICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjoK
LSAgICAgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BFQykgewotICAgICAgICAgICAg
Ly8gU2V0IHVwIGdsX0ZyYWdEYXRhLiAgVGhlIGFycmF5IHNpemUuCi0gICAgICAgICAgICBUVHlw
ZSBmcmFnRGF0YShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnRGF0YSwgNCwgZmFsc2UsIHRy
dWUpOwotICAgICAgICAgICAgZnJhZ0RhdGEuc2V0QXJyYXlTaXplKHJlc291cmNlcy5NYXhEcmF3
QnVmZmVycyk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUo
TmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEYXRhIiksICAgIGZyYWdEYXRhKSk7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDogYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIElu
aXRFeHRlbnNpb25CZWhhdmlvcihjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291cmNlcywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFeHRlbnNpb25CZWhhdmlvciYgZXh0QmVoYXZp
b3IpCi17Ci0gICAgaWYgKHJlc291cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMpCi0gICAg
ICAgIGV4dEJlaGF2aW9yWyJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiXSA9IEVCaFVuZGVm
aW5lZDsKLSAgICBpZiAocmVzb3VyY2VzLk9FU19FR0xfaW1hZ2VfZXh0ZXJuYWwpCi0gICAgICAg
IGV4dEJlaGF2aW9yWyJHTF9PRVNfRUdMX2ltYWdlX2V4dGVybmFsIl0gPSBFQmhVbmRlZmluZWQ7
Ci0gICAgaWYgKHJlc291cmNlcy5BUkJfdGV4dHVyZV9yZWN0YW5nbGUpCi0gICAgICAgIGV4dEJl
aGF2aW9yWyJHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUiXSA9IEVCaFVuZGVmaW5lZDsKLSAgICBp
ZiAocmVzb3VyY2VzLkVYVF9kcmF3X2J1ZmZlcnMpCi0gICAgICAgIGV4dEJlaGF2aW9yWyJHTF9F
WFRfZHJhd19idWZmZXJzIl0gPSBFQmhVbmRlZmluZWQ7Ci0gICAgaWYgKHJlc291cmNlcy5FWFRf
ZnJhZ19kZXB0aCkKLSAgICAgICAgZXh0QmVoYXZpb3JbIkdMX0VYVF9mcmFnX2RlcHRoIl0gPSBF
QmhVbmRlZmluZWQ7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvSW5pdGlhbGl6ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0luaXRpYWxpemUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFhMTM0NjZh
Y2FkMjllNjY2YzA1ZmFkNjc1OWE4ZGFmZjlkYjgwZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvSW5pdGlhbGl6ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLQotI2lmbmRlZiBfSU5JVElBTElaRV9JTkNMVURFRF8KLSNkZWZpbmUgX0lOSVRJ
QUxJWkVfSU5DTFVERURfCi0KLSNpbmNsdWRlICJjb21waWxlci9Db21tb24uaCIKLSNpbmNsdWRl
ICJjb21waWxlci9TaEhhbmRsZS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgi
Ci0KLXZvaWQgSW5zZXJ0QnVpbHRJbkZ1bmN0aW9ucyhTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFk
ZXJTcGVjIHNwZWMsIGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyAmcmVzb3VyY2VzLCBUU3ltYm9s
VGFibGUgJnRhYmxlKTsKLQotdm9pZCBJZGVudGlmeUJ1aWx0SW5zKFNoU2hhZGVyVHlwZSB0eXBl
LCBTaFNoYWRlclNwZWMgc3BlYywKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaEJ1aWx0
SW5SZXNvdXJjZXMmIHJlc291cmNlcywKLSAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFi
bGUmIHN5bWJvbFRhYmxlKTsKLQotdm9pZCBJbml0RXh0ZW5zaW9uQmVoYXZpb3IoY29uc3QgU2hC
dWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBU
RXh0ZW5zaW9uQmVoYXZpb3ImIGV4dGVuc2lvbkJlaGF2aW9yKTsKLQotI2VuZGlmIC8vIF9JTklU
SUFMSVpFX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0luaXRpYWxpemVEbGwuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0luaXRpYWxpemVEbGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA2YzdmMjdmY2VkMTc0YjBiMTRhNjdiZTdjNjUyMGYxNzk0ZTJhNzY2Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMyICsw
LDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXpl
RGxsLmgiCi0KLSNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplR2xvYmFscy5oIgotI2luY2x1
ZGUgImNvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaCIKLSNpbmNsdWRlICJjb21waWxl
ci9vc2luY2x1ZGUuaCIKLQotYm9vbCBJbml0UHJvY2VzcygpCi17Ci0gICAgaWYgKCFJbml0aWFs
aXplUG9vbEluZGV4KCkpIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRQcm9jZXNzKCk6IEZh
aWxlZCB0byBpbml0YWxpemUgZ2xvYmFsIHBvb2wiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIGlmICghSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCkpIHsKLSAgICAg
ICAgYXNzZXJ0KDAgJiYgIkluaXRQcm9jZXNzKCk6IEZhaWxlZCB0byBpbml0YWxpemUgcGFyc2Ug
Y29udGV4dCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXZvaWQgRGV0YWNoUHJvY2VzcygpCi17Ci0gICAgRnJlZVBhcnNlQ29udGV4dElu
ZGV4KCk7Ci0gICAgRnJlZVBvb2xJbmRleCgpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVEbGwuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDQzMDcwY2MzZmY3OGY3NTNhMjQ2YzQ2MDY5ODkwODZhNjNiZjA4YmEuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVEbGwuaAorKysgL2Rldi9udWxsCkBA
IC0xLDEzICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQot
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0jaWZuZGVmIF9fSU5JVElBTElaRURM
TF9ICi0jZGVmaW5lIF9fSU5JVElBTElaRURMTF9ICi0KLWJvb2wgSW5pdFByb2Nlc3MoKTsKLXZv
aWQgRGV0YWNoUHJvY2VzcygpOwotCi0jZW5kaWYgLy8gX19JTklUSUFMSVpFRExMX0gKLQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVH
TFBvc2l0aW9uLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0
aWFsaXplR0xQb3NpdGlvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwMTkz
ZTM5ZDJlOGJhMWE2ZDEwMTVjOTFhYzBkZDBiMGRhODQ3NjguLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL0luaXRpYWxpemVHTFBvc2l0aW9uLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYxICsw
LDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXpl
R0xQb3NpdGlvbi5oIgotI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCi0KLWJvb2wgSW5pdGlh
bGl6ZUdMUG9zaXRpb246OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVn
YXRlKiBub2RlKQotewotICAgIGJvb2wgdmlzaXRDaGlsZHJlbiA9ICFtQ29kZUluc2VydGVkOwot
ICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKLSAgICB7Ci0gICAgICBjYXNlIEVPcFNlcXVlbmNl
OiBicmVhazsKLSAgICAgIGNhc2UgRU9wRnVuY3Rpb246Ci0gICAgICB7Ci0gICAgICAgIC8vIEZ1
bmN0aW9uIGRlZmluaXRpb24uCi0gICAgICAgIEFTU0VSVCh2aXNpdCA9PSBQcmVWaXNpdCk7Ci0g
ICAgICAgIGlmIChub2RlLT5nZXROYW1lKCkgPT0gIm1haW4oIikKLSAgICAgICAgewotICAgICAg
ICAgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7Ci0g
ICAgICAgICAgICBBU1NFUlQoKHNlcXVlbmNlLnNpemUoKSA9PSAxKSB8fCAoc2VxdWVuY2Uuc2l6
ZSgpID09IDIpKTsKLSAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUgKmJvZHkgPSBOVUxMOwot
ICAgICAgICAgICAgaWYgKHNlcXVlbmNlLnNpemUoKSA9PSAxKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGJvZHkgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZShFT3BTZXF1ZW5jZSk7Ci0g
ICAgICAgICAgICAgICAgc2VxdWVuY2UucHVzaF9iYWNrKGJvZHkpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvZHkgPSBz
ZXF1ZW5jZVsxXS0+Z2V0QXNBZ2dyZWdhdGUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IEFTU0VSVChib2R5KTsKLSAgICAgICAgICAgIGluc2VydENvZGUoYm9keS0+Z2V0U2VxdWVuY2Uo
KSk7Ci0gICAgICAgICAgICBtQ29kZUluc2VydGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLSAgICAgIH0KLSAgICAgIGRlZmF1bHQ6IHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsg
YnJlYWs7Ci0gICAgfQotICAgIHJldHVybiB2aXNpdENoaWxkcmVuOwotfQotCi12b2lkIEluaXRp
YWxpemVHTFBvc2l0aW9uOjppbnNlcnRDb2RlKFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UpCi17
Ci0gICAgVEludGVybUJpbmFyeSAqYmluYXJ5ID0gbmV3IFRJbnRlcm1CaW5hcnkoRU9wQXNzaWdu
KTsKLSAgICBzZXF1ZW5jZS5pbnNlcnQoc2VxdWVuY2UuYmVnaW4oKSwgYmluYXJ5KTsKLQotICAg
IFRJbnRlcm1TeW1ib2wgKmxlZnQgPSBuZXcgVEludGVybVN5bWJvbCgKLSAgICAgICAgMCwgImds
X1Bvc2l0aW9uIiwgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxUG9zaXRpb24sIDQp
KTsKLSAgICBiaW5hcnktPnNldExlZnQobGVmdCk7Ci0KLSAgICBDb25zdGFudFVuaW9uICp1ID0g
bmV3IENvbnN0YW50VW5pb25bNF07Ci0gICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IDM7ICsraWkp
Ci0gICAgICAgIHVbaWldLnNldEZDb25zdCgwLjBmKTsKLSAgICB1WzNdLnNldEZDb25zdCgxLjBm
KTsKLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqcmlnaHQgPSBuZXcgVEludGVybUNvbnN0YW50
VW5pb24oCi0gICAgICAgIHUsIFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0
LCA0KSk7Ci0gICAgYmluYXJ5LT5zZXRSaWdodChyaWdodCk7Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZUdMUG9zaXRpb24uaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplR0xQb3NpdGlv
bi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjExMDc1YTEzNzk4Y2YzZTZmMWQ3
NGNiZGJmYjA0MzIwZTc3NTdiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXpl
R0xQb3NpdGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLy8KLS8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9JTklUSUFMSVpFX0dMX1BPU0lUSU9OX0hfCi0jZGVm
aW5lIENPTVBJTEVSX0lOSVRJQUxJWkVfR0xfUE9TSVRJT05fSF8KLQotI2luY2x1ZGUgImNvbXBp
bGVyL2ludGVybWVkaWF0ZS5oIgotCi1jbGFzcyBJbml0aWFsaXplR0xQb3NpdGlvbiA6IHB1Ymxp
YyBUSW50ZXJtVHJhdmVyc2VyCi17Ci1wdWJsaWM6Ci0gICAgSW5pdGlhbGl6ZUdMUG9zaXRpb24o
KSA6IG1Db2RlSW5zZXJ0ZWQoZmFsc2UpIHsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBi
b29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBub2RlKSB7IHJldHVy
biBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50
ZXJtVW5hcnkqIG5vZGUpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIHZpc2l0
U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBub2RlKSB7IHJldHVybiBm
YWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1M
b29wKiBub2RlKSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJyYW5j
aChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCogbm9kZSkgeyByZXR1cm4gZmFsc2U7IH0KLQot
ICAgIHZpcnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3Jl
Z2F0ZSogbm9kZSk7Ci0KLXByaXZhdGU6Ci0gICAgLy8gSW5zZXJ0IEFTVCBub2RlIGluIHRoZSBi
ZWdpbm5pbmcgb2YgbWFpbigpIGZvciAiZ2xfUG9zaXRpb24gPSB2ZWM0KDAuMCwgMC4wLCAwLjAs
IDEuMCk7Ii4KLSAgICB2b2lkIGluc2VydENvZGUoVEludGVybVNlcXVlbmNlJiBzZXF1ZW5jZSk7
Ci0KLSAgICBib29sIG1Db2RlSW5zZXJ0ZWQ7Ci19OwotCi0jZW5kaWYgIC8vIENPTVBJTEVSX0lO
SVRJQUxJWkVfR0xfUE9TSVRJT05fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplR2xvYmFscy5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVHbG9iYWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDA3MTU5NDE0MjQ3MTA1MzA4MDM4NjI4MTM4NmE5NTA2ZmFiZDA1NjMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVHbG9iYWxzLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxMyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIF9fSU5JVElB
TElaRV9HTE9CQUxTX0lOQ0xVREVEXwotI2RlZmluZSBfX0lOSVRJQUxJWkVfR0xPQkFMU19JTkNM
VURFRF8KLQotYm9vbCBJbml0aWFsaXplUG9vbEluZGV4KCk7Ci12b2lkIEZyZWVQb29sSW5kZXgo
KTsKLQotI2VuZGlmIC8vIF9fSU5JVElBTElaRV9HTE9CQUxTX0lOQ0xVREVEXwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNv
bnRleHQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxp
emVQYXJzZUNvbnRleHQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmFiMDI3
MzMwZGU5NTkxNjJhYmE2ZWFlODI1ODMwZDkyNTBiNDkzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQwICsw
LDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNl
Q29udGV4dC5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvb3NpbmNsdWRlLmgiCi0KLU9TX1RMU0lu
ZGV4IEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7Ci0KLWJv
b2wgSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCkKLXsKLSAgICBhc3NlcnQoR2xvYmFsUGFy
c2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpOwotCi0gICAgR2xvYmFsUGFy
c2VDb250ZXh0SW5kZXggPSBPU19BbGxvY1RMU0luZGV4KCk7Ci0gICAgcmV0dXJuIEdsb2JhbFBh
cnNlQ29udGV4dEluZGV4ICE9IE9TX0lOVkFMSURfVExTX0lOREVYOwotfQotCi12b2lkIEZyZWVQ
YXJzZUNvbnRleHRJbmRleCgpCi17Ci0gICAgYXNzZXJ0KEdsb2JhbFBhcnNlQ29udGV4dEluZGV4
ICE9IE9TX0lOVkFMSURfVExTX0lOREVYKTsKLQotICAgIE9TX0ZyZWVUTFNJbmRleChHbG9iYWxQ
YXJzZUNvbnRleHRJbmRleCk7Ci0gICAgR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19JTlZB
TElEX1RMU19JTkRFWDsKLX0KLQotdm9pZCBTZXRHbG9iYWxQYXJzZUNvbnRleHQoVFBhcnNlQ29u
dGV4dCogY29udGV4dCkKLXsKLSAgICBhc3NlcnQoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggIT0g
T1NfSU5WQUxJRF9UTFNfSU5ERVgpOwotICAgIE9TX1NldFRMU1ZhbHVlKEdsb2JhbFBhcnNlQ29u
dGV4dEluZGV4LCBjb250ZXh0KTsKLX0KLQotVFBhcnNlQ29udGV4dCogR2V0R2xvYmFsUGFyc2VD
b250ZXh0KCkKLXsKLSAgICBhc3NlcnQoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggIT0gT1NfSU5W
QUxJRF9UTFNfSU5ERVgpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUUGFyc2VDb250ZXh0Kj4o
T1NfR2V0VExTVmFsdWUoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgpKTsKLX0KLQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNv
bnRleHQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXpl
UGFyc2VDb250ZXh0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZmJhYjg3ZDA3
MjNhNjMyODQ2ODQzYzMwZDljYWMzMzAyNzA3NzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0luaXRpYWxpemVQYXJzZUNvbnRleHQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAK
LS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgX19JTklUSUFMSVpFX1BBUlNFX0NPTlRFWFRf
SU5DTFVERURfCi0jZGVmaW5lIF9fSU5JVElBTElaRV9QQVJTRV9DT05URVhUX0lOQ0xVREVEXwot
Ci1ib29sIEluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCgpOwotdm9pZCBGcmVlUGFyc2VDb250
ZXh0SW5kZXgoKTsKLQotc3RydWN0IFRQYXJzZUNvbnRleHQ7Ci1leHRlcm4gdm9pZCBTZXRHbG9i
YWxQYXJzZUNvbnRleHQoVFBhcnNlQ29udGV4dCogY29udGV4dCk7Ci1leHRlcm4gVFBhcnNlQ29u
dGV4dCogR2V0R2xvYmFsUGFyc2VDb250ZXh0KCk7Ci0KLSNlbmRpZiAvLyBfX0lOSVRJQUxJWkVf
UEFSU0VfQ09OVEVYVF9JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9JbnRlcm1UcmF2ZXJzZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvSW50ZXJtVHJhdmVyc2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA5YTY5MWRhNzFmZDAxZjQxMDczYjc0YjZjOWFjNTEwYTBhZGYwZDA2Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1UcmF2ZXJzZS5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwyNTkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVy
L2ludGVybWVkaWF0ZS5oIgotCi0vLwotLy8gVHJhdmVyc2UgdGhlIGludGVybWVkaWF0ZSByZXBy
ZXNlbnRhdGlvbiB0cmVlLCBhbmQKLS8vIGNhbGwgYSBub2RlIHR5cGUgc3BlY2lmaWMgZnVuY3Rp
b24gZm9yIGVhY2ggbm9kZS4KLS8vIERvbmUgcmVjdXJzaXZlbHkgdGhyb3VnaCB0aGUgbWVtYmVy
IGZ1bmN0aW9uIFRyYXZlcnNlKCkuCi0vLyBOb2RlIHR5cGVzIGNhbiBiZSBza2lwcGVkIGlmIHRo
ZWlyIGZ1bmN0aW9uIHRvIGNhbGwgaXMgMCwKLS8vIGJ1dCB0aGVpciBzdWJ0cmVlIHdpbGwgc3Rp
bGwgYmUgdHJhdmVyc2VkLgotLy8gTm9kZXMgd2l0aCBjaGlsZHJlbiBjYW4gaGF2ZSB0aGVpciB3
aG9sZSBzdWJ0cmVlIHNraXBwZWQKLS8vIGlmIHByZVZpc2l0IGlzIHR1cm5lZCBvbiBhbmQgdGhl
IHR5cGUgc3BlY2lmaWMgZnVuY3Rpb24KLS8vIHJldHVybnMgZmFsc2UuCi0vLwotLy8gcHJlVmlz
aXQsIHBvc3RWaXNpdCwgYW5kIHJpZ2h0VG9MZWZ0IGNvbnRyb2wgd2hhdCBvcmRlcgotLy8gbm9k
ZXMgYXJlIHZpc2l0ZWQgaW4uCi0vLwotCi0vLwotLy8gVHJhdmVyc2FsIGZ1bmN0aW9ucyBmb3Ig
dGVybWluYWxzIGFyZSBzdHJhaWdoZm9yd2FyZC4uLi4KLS8vCi12b2lkIFRJbnRlcm1TeW1ib2w6
OnRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIgKml0KQotewotICAgIGl0LT52aXNpdFN5bWJvbCh0
aGlzKTsKLX0KLQotdm9pZCBUSW50ZXJtQ29uc3RhbnRVbmlvbjo6dHJhdmVyc2UoVEludGVybVRy
YXZlcnNlciAqaXQpCi17Ci0gICAgaXQtPnZpc2l0Q29uc3RhbnRVbmlvbih0aGlzKTsKLX0KLQot
Ly8KLS8vIFRyYXZlcnNlIGEgYmluYXJ5IG5vZGUuCi0vLwotdm9pZCBUSW50ZXJtQmluYXJ5Ojp0
cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyICppdCkKLXsKLSAgICBib29sIHZpc2l0ID0gdHJ1ZTsK
LQotICAgIC8vCi0gICAgLy8gdmlzaXQgdGhlIG5vZGUgYmVmb3JlIGNoaWxkcmVuIGlmIHByZS12
aXNpdGluZy4KLSAgICAvLwotICAgIGlmIChpdC0+cHJlVmlzaXQpCi0gICAgICAgIHZpc2l0ID0g
aXQtPnZpc2l0QmluYXJ5KFByZVZpc2l0LCB0aGlzKTsKLSAgICAKLSAgICAvLwotICAgIC8vIFZp
c2l0IHRoZSBjaGlsZHJlbiwgaW4gdGhlIHJpZ2h0IG9yZGVyLgotICAgIC8vCi0gICAgaWYgKHZp
c2l0KQotICAgIHsKLSAgICAgICAgaXQtPmluY3JlbWVudERlcHRoKHRoaXMpOwotCi0gICAgICAg
IGlmIChpdC0+cmlnaHRUb0xlZnQpIAotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocmlnaHQp
Ci0gICAgICAgICAgICAgICAgcmlnaHQtPnRyYXZlcnNlKGl0KTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKGl0LT5pblZpc2l0KQotICAgICAgICAgICAgICAgIHZpc2l0ID0gaXQtPnZp
c2l0QmluYXJ5KEluVmlzaXQsIHRoaXMpOwotCi0gICAgICAgICAgICBpZiAodmlzaXQgJiYgbGVm
dCkKLSAgICAgICAgICAgICAgICBsZWZ0LT50cmF2ZXJzZShpdCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobGVmdCkKLSAgICAgICAgICAgICAg
ICBsZWZ0LT50cmF2ZXJzZShpdCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpdC0+
aW5WaXNpdCkKLSAgICAgICAgICAgICAgICB2aXNpdCA9IGl0LT52aXNpdEJpbmFyeShJblZpc2l0
LCB0aGlzKTsKLQotICAgICAgICAgICAgaWYgKHZpc2l0ICYmIHJpZ2h0KQotICAgICAgICAgICAg
ICAgIHJpZ2h0LT50cmF2ZXJzZShpdCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpdC0+ZGVjcmVt
ZW50RGVwdGgoKTsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIFZpc2l0IHRoZSBub2RlIGFmdGVy
IHRoZSBjaGlsZHJlbiwgaWYgcmVxdWVzdGVkIGFuZCB0aGUgdHJhdmVyc2FsCi0gICAgLy8gaGFz
bid0IGJlZW4gY2FuY2VsbGVkIHlldC4KLSAgICAvLwotICAgIGlmICh2aXNpdCAmJiBpdC0+cG9z
dFZpc2l0KQotICAgICAgICBpdC0+dmlzaXRCaW5hcnkoUG9zdFZpc2l0LCB0aGlzKTsKLX0KLQot
Ly8KLS8vIFRyYXZlcnNlIGEgdW5hcnkgbm9kZS4gIFNhbWUgY29tbWVudHMgaW4gYmluYXJ5IG5v
ZGUgYXBwbHkgaGVyZS4KLS8vCi12b2lkIFRJbnRlcm1VbmFyeTo6dHJhdmVyc2UoVEludGVybVRy
YXZlcnNlciAqaXQpCi17Ci0gICAgYm9vbCB2aXNpdCA9IHRydWU7Ci0KLSAgICBpZiAoaXQtPnBy
ZVZpc2l0KQotICAgICAgICB2aXNpdCA9IGl0LT52aXNpdFVuYXJ5KFByZVZpc2l0LCB0aGlzKTsK
LQotICAgIGlmICh2aXNpdCkgewotICAgICAgICBpdC0+aW5jcmVtZW50RGVwdGgodGhpcyk7Ci0g
ICAgICAgIG9wZXJhbmQtPnRyYXZlcnNlKGl0KTsKLSAgICAgICAgaXQtPmRlY3JlbWVudERlcHRo
KCk7Ci0gICAgfQotICAgIAotICAgIGlmICh2aXNpdCAmJiBpdC0+cG9zdFZpc2l0KQotICAgICAg
ICBpdC0+dmlzaXRVbmFyeShQb3N0VmlzaXQsIHRoaXMpOwotfQotCi0vLwotLy8gVHJhdmVyc2Ug
YW4gYWdncmVnYXRlIG5vZGUuICBTYW1lIGNvbW1lbnRzIGluIGJpbmFyeSBub2RlIGFwcGx5IGhl
cmUuCi0vLwotdm9pZCBUSW50ZXJtQWdncmVnYXRlOjp0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2Vy
ICppdCkKLXsKLSAgICBib29sIHZpc2l0ID0gdHJ1ZTsKLSAgICAKLSAgICBpZiAoaXQtPnByZVZp
c2l0KQotICAgICAgICB2aXNpdCA9IGl0LT52aXNpdEFnZ3JlZ2F0ZShQcmVWaXNpdCwgdGhpcyk7
Ci0gICAgCi0gICAgaWYgKHZpc2l0KQotICAgIHsKLSAgICAgICAgaXQtPmluY3JlbWVudERlcHRo
KHRoaXMpOwotCi0gICAgICAgIGlmIChpdC0+cmlnaHRUb0xlZnQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjpyZXZlcnNlX2l0ZXJhdG9yIHNpdCA9IHNlcXVl
bmNlLnJiZWdpbigpOyBzaXQgIT0gc2VxdWVuY2UucmVuZCgpOyBzaXQrKykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAoKnNpdCktPnRyYXZlcnNlKGl0KTsKLQotICAgICAgICAgICAg
ICAgIGlmICh2aXNpdCAmJiBpdC0+aW5WaXNpdCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICgqc2l0ICE9IHNlcXVlbmNlLmZyb250KCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICB2aXNpdCA9IGl0LT52aXNpdEFnZ3JlZ2F0ZShJblZpc2l0LCB0aGlzKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQot
ICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0
ID0gc2VxdWVuY2UuYmVnaW4oKTsgc2l0ICE9IHNlcXVlbmNlLmVuZCgpOyBzaXQrKykKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAoKnNpdCktPnRyYXZlcnNlKGl0KTsKLQotICAgICAg
ICAgICAgICAgIGlmICh2aXNpdCAmJiBpdC0+aW5WaXNpdCkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICgqc2l0ICE9IHNlcXVlbmNlLmJhY2soKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0QWdncmVnYXRlKEluVmlzaXQsIHRoaXMp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgaXQtPmRlY3JlbWVudERlcHRoKCk7Ci0gICAgfQotCi0gICAgaWYgKHZpc2l0ICYm
IGl0LT5wb3N0VmlzaXQpCi0gICAgICAgIGl0LT52aXNpdEFnZ3JlZ2F0ZShQb3N0VmlzaXQsIHRo
aXMpOwotfQotCi0vLwotLy8gVHJhdmVyc2UgYSBzZWxlY3Rpb24gbm9kZS4gIFNhbWUgY29tbWVu
dHMgaW4gYmluYXJ5IG5vZGUgYXBwbHkgaGVyZS4KLS8vCi12b2lkIFRJbnRlcm1TZWxlY3Rpb246
OnRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIgKml0KQotewotICAgIGJvb2wgdmlzaXQgPSB0cnVl
OwotCi0gICAgaWYgKGl0LT5wcmVWaXNpdCkKLSAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRTZWxl
Y3Rpb24oUHJlVmlzaXQsIHRoaXMpOwotICAgIAotICAgIGlmICh2aXNpdCkgewotICAgICAgICBp
dC0+aW5jcmVtZW50RGVwdGgodGhpcyk7Ci0gICAgICAgIGlmIChpdC0+cmlnaHRUb0xlZnQpIHsK
LSAgICAgICAgICAgIGlmIChmYWxzZUJsb2NrKQotICAgICAgICAgICAgICAgIGZhbHNlQmxvY2st
PnRyYXZlcnNlKGl0KTsKLSAgICAgICAgICAgIGlmICh0cnVlQmxvY2spCi0gICAgICAgICAgICAg
ICAgdHJ1ZUJsb2NrLT50cmF2ZXJzZShpdCk7Ci0gICAgICAgICAgICBjb25kaXRpb24tPnRyYXZl
cnNlKGl0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbmRpdGlvbi0+dHJhdmVy
c2UoaXQpOwotICAgICAgICAgICAgaWYgKHRydWVCbG9jaykKLSAgICAgICAgICAgICAgICB0cnVl
QmxvY2stPnRyYXZlcnNlKGl0KTsKLSAgICAgICAgICAgIGlmIChmYWxzZUJsb2NrKQotICAgICAg
ICAgICAgICAgIGZhbHNlQmxvY2stPnRyYXZlcnNlKGl0KTsKLSAgICAgICAgfQotICAgICAgICBp
dC0+ZGVjcmVtZW50RGVwdGgoKTsKLSAgICB9Ci0KLSAgICBpZiAodmlzaXQgJiYgaXQtPnBvc3RW
aXNpdCkKLSAgICAgICAgaXQtPnZpc2l0U2VsZWN0aW9uKFBvc3RWaXNpdCwgdGhpcyk7Ci19Ci0K
LS8vCi0vLyBUcmF2ZXJzZSBhIGxvb3Agbm9kZS4gIFNhbWUgY29tbWVudHMgaW4gYmluYXJ5IG5v
ZGUgYXBwbHkgaGVyZS4KLS8vCi12b2lkIFRJbnRlcm1Mb29wOjp0cmF2ZXJzZShUSW50ZXJtVHJh
dmVyc2VyICppdCkKLXsKLSAgICBib29sIHZpc2l0ID0gdHJ1ZTsKLQotICAgIGlmIChpdC0+cHJl
VmlzaXQpCi0gICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0TG9vcChQcmVWaXNpdCwgdGhpcyk7Ci0g
ICAgCi0gICAgaWYgKHZpc2l0KQotICAgIHsKLSAgICAgICAgaXQtPmluY3JlbWVudERlcHRoKHRo
aXMpOwotCi0gICAgICAgIGlmIChpdC0+cmlnaHRUb0xlZnQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmIChleHByKQotICAgICAgICAgICAgICAgIGV4cHItPnRyYXZlcnNlKGl0KTsKLQotICAg
ICAgICAgICAgaWYgKGJvZHkpCi0gICAgICAgICAgICAgICAgYm9keS0+dHJhdmVyc2UoaXQpOwot
Ci0gICAgICAgICAgICBpZiAoY29uZCkKLSAgICAgICAgICAgICAgICBjb25kLT50cmF2ZXJzZShp
dCk7Ci0KLSAgICAgICAgICAgIGlmIChpbml0KQotICAgICAgICAgICAgICAgIGluaXQtPnRyYXZl
cnNlKGl0KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGlmIChpbml0KQotICAgICAgICAgICAgICAgIGluaXQtPnRyYXZlcnNlKGl0KTsKLQotICAgICAg
ICAgICAgaWYgKGNvbmQpCi0gICAgICAgICAgICAgICAgY29uZC0+dHJhdmVyc2UoaXQpOwotCi0g
ICAgICAgICAgICBpZiAoYm9keSkKLSAgICAgICAgICAgICAgICBib2R5LT50cmF2ZXJzZShpdCk7
Ci0KLSAgICAgICAgICAgIGlmIChleHByKQotICAgICAgICAgICAgICAgIGV4cHItPnRyYXZlcnNl
KGl0KTsKLSAgICAgICAgfQotCi0gICAgICAgIGl0LT5kZWNyZW1lbnREZXB0aCgpOwotICAgIH0K
LQotICAgIGlmICh2aXNpdCAmJiBpdC0+cG9zdFZpc2l0KQotICAgICAgICBpdC0+dmlzaXRMb29w
KFBvc3RWaXNpdCwgdGhpcyk7Ci19Ci0KLS8vCi0vLyBUcmF2ZXJzZSBhIGJyYW5jaCBub2RlLiAg
U2FtZSBjb21tZW50cyBpbiBiaW5hcnkgbm9kZSBhcHBseSBoZXJlLgotLy8KLXZvaWQgVEludGVy
bUJyYW5jaDo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciAqaXQpCi17Ci0gICAgYm9vbCB2aXNp
dCA9IHRydWU7Ci0KLSAgICBpZiAoaXQtPnByZVZpc2l0KQotICAgICAgICB2aXNpdCA9IGl0LT52
aXNpdEJyYW5jaChQcmVWaXNpdCwgdGhpcyk7Ci0gICAgCi0gICAgaWYgKHZpc2l0ICYmIGV4cHJl
c3Npb24pIHsKLSAgICAgICAgaXQtPmluY3JlbWVudERlcHRoKHRoaXMpOwotICAgICAgICBleHBy
ZXNzaW9uLT50cmF2ZXJzZShpdCk7Ci0gICAgICAgIGl0LT5kZWNyZW1lbnREZXB0aCgpOwotICAg
IH0KLQotICAgIGlmICh2aXNpdCAmJiBpdC0+cG9zdFZpc2l0KQotICAgICAgICBpdC0+dmlzaXRC
cmFuY2goUG9zdFZpc2l0LCB0aGlzKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvSW50ZXJtZWRpYXRlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNDdlNGUzOTUxMGUyYjU3MjY5MDJhYzcyMWQzYjJhZDVhYzgyMWM5Mi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW50ZXJtZWRpYXRlLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDE1MDAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8KLS8vIEJ1aWxkIHRoZSBp
bnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24uCi0vLwotCi0jaW5jbHVkZSA8ZmxvYXQuaD4KLSNp
bmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLSNpbmNsdWRlICJjb21w
aWxlci9IYXNoTmFtZXMuaCIKLSNpbmNsdWRlICJjb21waWxlci9sb2NhbGludGVybWVkaWF0ZS5o
IgotI2luY2x1ZGUgImNvbXBpbGVyL1F1YWxpZmllckFsaXZlLmgiCi0jaW5jbHVkZSAiY29tcGls
ZXIvUmVtb3ZlVHJlZS5oIgotCi1ib29sIENvbXBhcmVTdHJ1Y3R1cmUoY29uc3QgVFR5cGUmIGxl
ZnROb2RlVHlwZSwgQ29uc3RhbnRVbmlvbiogcmlnaHRVbmlvbkFycmF5LCBDb25zdGFudFVuaW9u
KiBsZWZ0VW5pb25BcnJheSk7Ci0KLXN0YXRpYyBUUHJlY2lzaW9uIEdldEhpZ2hlclByZWNpc2lv
bihUUHJlY2lzaW9uIGxlZnQsIFRQcmVjaXNpb24gcmlnaHQpCi17Ci0gICAgcmV0dXJuIGxlZnQg
PiByaWdodCA/IGxlZnQgOiByaWdodDsKLX0KLQotY29uc3QgY2hhciogZ2V0T3BlcmF0b3JTdHJp
bmcoVE9wZXJhdG9yIG9wKQotewotICAgIHN3aXRjaCAob3ApIHsKLSAgICAgIGNhc2UgRU9wSW5p
dGlhbGl6ZTogcmV0dXJuICI9IjsKLSAgICAgIGNhc2UgRU9wQXNzaWduOiByZXR1cm4gIj0iOwot
ICAgICAgY2FzZSBFT3BBZGRBc3NpZ246IHJldHVybiAiKz0iOwotICAgICAgY2FzZSBFT3BTdWJB
c3NpZ246IHJldHVybiAiLT0iOwotICAgICAgY2FzZSBFT3BEaXZBc3NpZ246IHJldHVybiAiLz0i
OwotCi0gICAgICAvLyBGYWxsLXRocm91Z2guCi0gICAgICBjYXNlIEVPcE11bEFzc2lnbjogCi0g
ICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOgotICAgICAgY2FzZSBFT3BWZWN0
b3JUaW1lc1NjYWxhckFzc2lnbjoKLSAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXJBc3Np
Z246Ci0gICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4QXNzaWduOiByZXR1cm4gIio9IjsK
LQotICAgICAgLy8gRmFsbC10aHJvdWdoLgotICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDoKLSAg
ICAgIGNhc2UgRU9wSW5kZXhJbmRpcmVjdDogcmV0dXJuICJbXSI7Ci0KLSAgICAgIGNhc2UgRU9w
SW5kZXhEaXJlY3RTdHJ1Y3Q6IHJldHVybiAiLiI7Ci0gICAgICBjYXNlIEVPcFZlY3RvclN3aXp6
bGU6IHJldHVybiAiLiI7Ci0gICAgICBjYXNlIEVPcEFkZDogcmV0dXJuICIrIjsKLSAgICAgIGNh
c2UgRU9wU3ViOiByZXR1cm4gIi0iOwotICAgICAgY2FzZSBFT3BNdWw6IHJldHVybiAiKiI7Ci0g
ICAgICBjYXNlIEVPcERpdjogcmV0dXJuICIvIjsKLSAgICAgIGNhc2UgRU9wTW9kOiBVTklNUExF
TUVOVEVEKCk7IGJyZWFrOwotICAgICAgY2FzZSBFT3BFcXVhbDogcmV0dXJuICI9PSI7Ci0gICAg
ICBjYXNlIEVPcE5vdEVxdWFsOiByZXR1cm4gIiE9IjsKLSAgICAgIGNhc2UgRU9wTGVzc1RoYW46
IHJldHVybiAiPCI7Ci0gICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOiByZXR1cm4gIj4iOwotICAg
ICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOiByZXR1cm4gIjw9IjsKLSAgICAgIGNhc2UgRU9wR3Jl
YXRlclRoYW5FcXVhbDogcmV0dXJuICI+PSI7Ci0KLSAgICAgIC8vIEZhbGwtdGhyb3VnaC4KLSAg
ICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXI6Ci0gICAgICBjYXNlIEVPcFZlY3RvclRpbWVz
TWF0cml4OgotICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1ZlY3RvcjoKLSAgICAgIGNhc2UgRU9w
TWF0cml4VGltZXNTY2FsYXI6Ci0gICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4OiByZXR1
cm4gIioiOwotCi0gICAgICBjYXNlIEVPcExvZ2ljYWxPcjogcmV0dXJuICJ8fCI7Ci0gICAgICBj
YXNlIEVPcExvZ2ljYWxYb3I6IHJldHVybiAiXl4iOwotICAgICAgY2FzZSBFT3BMb2dpY2FsQW5k
OiByZXR1cm4gIiYmIjsKLSAgICAgIGNhc2UgRU9wTmVnYXRpdmU6IHJldHVybiAiLSI7Ci0gICAg
ICBjYXNlIEVPcFZlY3RvckxvZ2ljYWxOb3Q6IHJldHVybiAibm90IjsKLSAgICAgIGNhc2UgRU9w
TG9naWNhbE5vdDogcmV0dXJuICIhIjsKLSAgICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDogcmV0
dXJuICIrKyI7Ci0gICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6IHJldHVybiAiLS0iOwotICAg
ICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6IHJldHVybiAiKysiOwotICAgICAgY2FzZSBFT3BQcmVE
ZWNyZW1lbnQ6IHJldHVybiAiLS0iOwotCi0gICAgICAvLyBGYWxsLXRocm91Z2guCi0gICAgICBj
YXNlIEVPcENvbnZJbnRUb0Jvb2w6Ci0gICAgICBjYXNlIEVPcENvbnZGbG9hdFRvQm9vbDogcmV0
dXJuICJib29sIjsKLSAKLSAgICAgIC8vIEZhbGwtdGhyb3VnaC4KLSAgICAgIGNhc2UgRU9wQ29u
dkJvb2xUb0Zsb2F0OgotICAgICAgY2FzZSBFT3BDb252SW50VG9GbG9hdDogcmV0dXJuICJmbG9h
dCI7Ci0gCi0gICAgICAvLyBGYWxsLXRocm91Z2guCi0gICAgICBjYXNlIEVPcENvbnZGbG9hdFRv
SW50OgotICAgICAgY2FzZSBFT3BDb252Qm9vbFRvSW50OiByZXR1cm4gImludCI7Ci0KLSAgICAg
IGNhc2UgRU9wUmFkaWFuczogcmV0dXJuICJyYWRpYW5zIjsKLSAgICAgIGNhc2UgRU9wRGVncmVl
czogcmV0dXJuICJkZWdyZWVzIjsKLSAgICAgIGNhc2UgRU9wU2luOiByZXR1cm4gInNpbiI7Ci0g
ICAgICBjYXNlIEVPcENvczogcmV0dXJuICJjb3MiOwotICAgICAgY2FzZSBFT3BUYW46IHJldHVy
biAidGFuIjsKLSAgICAgIGNhc2UgRU9wQXNpbjogcmV0dXJuICJhc2luIjsKLSAgICAgIGNhc2Ug
RU9wQWNvczogcmV0dXJuICJhY29zIjsKLSAgICAgIGNhc2UgRU9wQXRhbjogcmV0dXJuICJhdGFu
IjsKLSAgICAgIGNhc2UgRU9wRXhwOiByZXR1cm4gImV4cCI7Ci0gICAgICBjYXNlIEVPcExvZzog
cmV0dXJuICJsb2ciOwotICAgICAgY2FzZSBFT3BFeHAyOiByZXR1cm4gImV4cDIiOwotICAgICAg
Y2FzZSBFT3BMb2cyOiByZXR1cm4gImxvZzIiOwotICAgICAgY2FzZSBFT3BTcXJ0OiByZXR1cm4g
InNxcnQiOwotICAgICAgY2FzZSBFT3BJbnZlcnNlU3FydDogcmV0dXJuICJpbnZlcnNlc3FydCI7
Ci0gICAgICBjYXNlIEVPcEFiczogcmV0dXJuICJhYnMiOwotICAgICAgY2FzZSBFT3BTaWduOiBy
ZXR1cm4gInNpZ24iOwotICAgICAgY2FzZSBFT3BGbG9vcjogcmV0dXJuICJmbG9vciI7Ci0gICAg
ICBjYXNlIEVPcENlaWw6IHJldHVybiAiY2VpbCI7Ci0gICAgICBjYXNlIEVPcEZyYWN0OiByZXR1
cm4gImZyYWN0IjsKLSAgICAgIGNhc2UgRU9wTGVuZ3RoOiByZXR1cm4gImxlbmd0aCI7Ci0gICAg
ICBjYXNlIEVPcE5vcm1hbGl6ZTogcmV0dXJuICJub3JtYWxpemUiOwotICAgICAgY2FzZSBFT3BE
RmR4OiByZXR1cm4gImRGZHgiOwotICAgICAgY2FzZSBFT3BERmR5OiByZXR1cm4gImRGZHkiOwot
ICAgICAgY2FzZSBFT3BGd2lkdGg6IHJldHVybiAiZndpZHRoIjsKLSAgICAgIGNhc2UgRU9wQW55
OiByZXR1cm4gImFueSI7Ci0gICAgICBjYXNlIEVPcEFsbDogcmV0dXJuICJhbGwiOwotCi0gICAg
ICBkZWZhdWx0OiBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuICIiOwotfQotCi0vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCi0vLwotLy8gRmlyc3Qgc2V0IG9mIGZ1bmN0aW9ucyBhcmUgdG8gaGVscCBidWls
ZCB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uLgotLy8gVGhlc2UgZnVuY3Rpb25zIGFy
ZSBub3QgbWVtYmVyIGZ1bmN0aW9ucyBvZiB0aGUgbm9kZXMuCi0vLyBUaGV5IGFyZSBjYWxsZWQg
ZnJvbSBwYXJzZXIgcHJvZHVjdGlvbnMuCi0vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotLy8K
LS8vIEFkZCBhIHRlcm1pbmFsIG5vZGUgZm9yIGFuIGlkZW50aWZpZXIgaW4gYW4gZXhwcmVzc2lv
bi4KLS8vCi0vLyBSZXR1cm5zIHRoZSBhZGRlZCBub2RlLgotLy8KLVRJbnRlcm1TeW1ib2wqIFRJ
bnRlcm1lZGlhdGU6OmFkZFN5bWJvbChpbnQgaWQsIGNvbnN0IFRTdHJpbmcmIG5hbWUsIGNvbnN0
IFRUeXBlJiB0eXBlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQotewotICAgIFRJbnRlcm1TeW1i
b2wqIG5vZGUgPSBuZXcgVEludGVybVN5bWJvbChpZCwgbmFtZSwgdHlwZSk7Ci0gICAgbm9kZS0+
c2V0TGluZShsaW5lKTsKLQotICAgIHJldHVybiBub2RlOwotfQotCi0vLwotLy8gQ29ubmVjdCB0
d28gbm9kZXMgd2l0aCBhIG5ldyBwYXJlbnQgdGhhdCBkb2VzIGEgYmluYXJ5IG9wZXJhdGlvbiBv
biB0aGUgbm9kZXMuCi0vLwotLy8gUmV0dXJucyB0aGUgYWRkZWQgbm9kZS4KLS8vCi1USW50ZXJt
VHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZEJpbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJt
VHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUs
IFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCi17Ci0gICAgc3dpdGNoIChvcCkgewotICAgICAg
ICBjYXNlIEVPcEVxdWFsOgotICAgICAgICBjYXNlIEVPcE5vdEVxdWFsOgotICAgICAgICAgICAg
aWYgKGxlZnQtPmlzQXJyYXkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcExlc3NUaGFuOgotICAgICAgICBjYXNlIEVPcEdy
ZWF0ZXJUaGFuOgotICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6Ci0gICAgICAgIGNhc2Ug
RU9wR3JlYXRlclRoYW5FcXVhbDoKLSAgICAgICAgICAgIGlmIChsZWZ0LT5pc01hdHJpeCgpIHx8
IGxlZnQtPmlzQXJyYXkoKSB8fCBsZWZ0LT5pc1ZlY3RvcigpIHx8IGxlZnQtPmdldEJhc2ljVHlw
ZSgpID09IEVidFN0cnVjdCkgewotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgotICAg
ICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6Ci0gICAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDoKLSAg
ICAgICAgICAgIGlmIChsZWZ0LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sIHx8IGxlZnQtPmlz
TWF0cml4KCkgfHwgbGVmdC0+aXNBcnJheSgpIHx8IGxlZnQtPmlzVmVjdG9yKCkpIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEVPcEFkZDoKLSAgICAgICAgY2FzZSBFT3BTdWI6Ci0gICAgICAgIGNhc2Ug
RU9wRGl2OgotICAgICAgICBjYXNlIEVPcE11bDoKLSAgICAgICAgICAgIGlmIChsZWZ0LT5nZXRC
YXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QgfHwgbGVmdC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Qm9v
bCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgZGVmYXVsdDogYnJlYWs7Ci0g
ICAgfQotCi0gICAgLy8KLSAgICAvLyBGaXJzdCB0cnkgY29udmVydGluZyB0aGUgY2hpbGRyZW4g
dG8gY29tcGF0aWJsZSB0eXBlcy4KLSAgICAvLwotICAgIGlmIChsZWZ0LT5nZXRUeXBlKCkuZ2V0
U3RydWN0KCkgJiYgcmlnaHQtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKSkgewotICAgICAgICBpZiAo
bGVmdC0+Z2V0VHlwZSgpICE9IHJpZ2h0LT5nZXRUeXBlKCkpCi0gICAgICAgICAgICByZXR1cm4g
MDsKLSAgICB9IGVsc2UgewotICAgICAgICBUSW50ZXJtVHlwZWQqIGNoaWxkID0gYWRkQ29udmVy
c2lvbihvcCwgbGVmdC0+Z2V0VHlwZSgpLCByaWdodCk7Ci0gICAgICAgIGlmIChjaGlsZCkKLSAg
ICAgICAgICAgIHJpZ2h0ID0gY2hpbGQ7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgY2hp
bGQgPSBhZGRDb252ZXJzaW9uKG9wLCByaWdodC0+Z2V0VHlwZSgpLCBsZWZ0KTsKLSAgICAgICAg
ICAgIGlmIChjaGlsZCkKLSAgICAgICAgICAgICAgICBsZWZ0ID0gY2hpbGQ7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICAvLwotICAgIC8vIE5lZWQgYSBuZXcgbm9kZSBob2xkaW5nIHRoaW5ncyB0b2dldGhlciB0aGVu
LiAgTWFrZQotICAgIC8vIG9uZSBhbmQgcHJvbW90ZSBpdCB0byB0aGUgcmlnaHQgdHlwZS4KLSAg
ICAvLwotICAgIFRJbnRlcm1CaW5hcnkqIG5vZGUgPSBuZXcgVEludGVybUJpbmFyeShvcCk7Ci0g
ICAgbm9kZS0+c2V0TGluZShsaW5lKTsKLQotICAgIG5vZGUtPnNldExlZnQobGVmdCk7Ci0gICAg
bm9kZS0+c2V0UmlnaHQocmlnaHQpOwotICAgIGlmICghbm9kZS0+cHJvbW90ZShpbmZvU2luaykp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8KLSAgICAvLyBTZWUgaWYgd2UgY2FuIGZvbGQg
Y29uc3RhbnRzLgotICAgIC8vCi0gICAgVEludGVybVR5cGVkKiB0eXBlZFJldHVybk5vZGUgPSAw
OwotICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpsZWZ0VGVtcENvbnN0YW50ID0gbGVmdC0+Z2V0
QXNDb25zdGFudFVuaW9uKCk7Ci0gICAgVEludGVybUNvbnN0YW50VW5pb24gKnJpZ2h0VGVtcENv
bnN0YW50ID0gcmlnaHQtPmdldEFzQ29uc3RhbnRVbmlvbigpOwotICAgIGlmIChsZWZ0VGVtcENv
bnN0YW50ICYmIHJpZ2h0VGVtcENvbnN0YW50KSB7Ci0gICAgICAgIHR5cGVkUmV0dXJuTm9kZSA9
IGxlZnRUZW1wQ29uc3RhbnQtPmZvbGQobm9kZS0+Z2V0T3AoKSwgcmlnaHRUZW1wQ29uc3RhbnQs
IGluZm9TaW5rKTsKLQotICAgICAgICBpZiAodHlwZWRSZXR1cm5Ob2RlKQotICAgICAgICAgICAg
cmV0dXJuIHR5cGVkUmV0dXJuTm9kZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbm9kZTsKLX0KLQot
Ly8KLS8vIENvbm5lY3QgdHdvIG5vZGVzIHRocm91Z2ggYW4gYXNzaWdubWVudC4KLS8vCi0vLyBS
ZXR1cm5zIHRoZSBhZGRlZCBub2RlLgotLy8KLVRJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6
YWRkQXNzaWduKFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBsZWZ0LCBUSW50ZXJtVHlwZWQq
IHJpZ2h0LCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQotewotICAgIC8vCi0gICAgLy8gTGlrZSBh
ZGRpbmcgYmluYXJ5IG1hdGgsIGV4Y2VwdCB0aGUgY29udmVyc2lvbiBjYW4gb25seSBnbwotICAg
IC8vIGZyb20gcmlnaHQgdG8gbGVmdC4KLSAgICAvLwotICAgIFRJbnRlcm1CaW5hcnkqIG5vZGUg
PSBuZXcgVEludGVybUJpbmFyeShvcCk7Ci0gICAgbm9kZS0+c2V0TGluZShsaW5lKTsKLQotICAg
IFRJbnRlcm1UeXBlZCogY2hpbGQgPSBhZGRDb252ZXJzaW9uKG9wLCBsZWZ0LT5nZXRUeXBlKCks
IHJpZ2h0KTsKLSAgICBpZiAoY2hpbGQgPT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBu
b2RlLT5zZXRMZWZ0KGxlZnQpOwotICAgIG5vZGUtPnNldFJpZ2h0KGNoaWxkKTsKLSAgICBpZiAo
ISBub2RlLT5wcm9tb3RlKGluZm9TaW5rKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1
cm4gbm9kZTsKLX0KLQotLy8KLS8vIENvbm5lY3QgdHdvIG5vZGVzIHRocm91Z2ggYW4gaW5kZXgg
b3BlcmF0b3IsIHdoZXJlIHRoZSBsZWZ0IG5vZGUgaXMgdGhlIGJhc2UKLS8vIG9mIGFuIGFycmF5
IG9yIHN0cnVjdCwgYW5kIHRoZSByaWdodCBub2RlIGlzIGEgZGlyZWN0IG9yIGluZGlyZWN0IG9m
ZnNldC4KLS8vCi0vLyBSZXR1cm5zIHRoZSBhZGRlZCBub2RlLgotLy8gVGhlIGNhbGxlciBzaG91
bGQgc2V0IHRoZSB0eXBlIG9mIHRoZSByZXR1cm5lZCBub2RlLgotLy8KLVRJbnRlcm1UeXBlZCog
VEludGVybWVkaWF0ZTo6YWRkSW5kZXgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGJhc2Us
IFRJbnRlcm1UeXBlZCogaW5kZXgsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCi17Ci0gICAgVElu
dGVybUJpbmFyeSogbm9kZSA9IG5ldyBUSW50ZXJtQmluYXJ5KG9wKTsKLSAgICBub2RlLT5zZXRM
aW5lKGxpbmUpOwotICAgIG5vZGUtPnNldExlZnQoYmFzZSk7Ci0gICAgbm9kZS0+c2V0UmlnaHQo
aW5kZXgpOwotCi0gICAgLy8gY2FsbGVyIHNob3VsZCBzZXQgdGhlIHR5cGUKLQotICAgIHJldHVy
biBub2RlOwotfQotCi0vLwotLy8gQWRkIG9uZSBub2RlIGFzIHRoZSBwYXJlbnQgb2YgYW5vdGhl
ciB0aGF0IGl0IG9wZXJhdGVzIG9uLgotLy8KLS8vIFJldHVybnMgdGhlIGFkZGVkIG5vZGUuCi0v
LwotVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRVbmFyeU1hdGgoVE9wZXJhdG9yIG9w
LCBUSW50ZXJtTm9kZSogY2hpbGROb2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3ltYm9s
VGFibGUmIHN5bWJvbFRhYmxlKQotewotICAgIFRJbnRlcm1VbmFyeSogbm9kZTsKLSAgICBUSW50
ZXJtVHlwZWQqIGNoaWxkID0gY2hpbGROb2RlLT5nZXRBc1R5cGVkKCk7Ci0KLSAgICBpZiAoY2hp
bGQgPT0gMCkgewotICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFs
RXJyb3IsIGxpbmUsICJCYWQgdHlwZSBpbiBBZGRVbmFyeU1hdGgiKTsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotCi0gICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIEVPcExvZ2ljYWxO
b3Q6Ci0gICAgICAgICAgICBpZiAoY2hpbGQtPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBF
YnRCb29sIHx8IGNoaWxkLT5nZXRUeXBlKCkuaXNNYXRyaXgoKSB8fCBjaGlsZC0+Z2V0VHlwZSgp
LmlzQXJyYXkoKSB8fCBjaGlsZC0+Z2V0VHlwZSgpLmlzVmVjdG9yKCkpIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDoKLSAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6
Ci0gICAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDoKLSAgICAgICAgY2FzZSBFT3BQcmVEZWNy
ZW1lbnQ6Ci0gICAgICAgIGNhc2UgRU9wTmVnYXRpdmU6Ci0gICAgICAgICAgICBpZiAoY2hpbGQt
PmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QgfHwgY2hpbGQtPmdldFR5cGUo
KS5pc0FycmF5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGRlZmF1bHQ6
IGJyZWFrOwotICAgIH0KLQotICAgIC8vCi0gICAgLy8gRG8gd2UgbmVlZCB0byBwcm9tb3RlIHRo
ZSBvcGVyYW5kPwotICAgIC8vCi0gICAgLy8gTm90ZTogSW1wbGljaXQgcHJvbW90aW9ucyB3ZXJl
IHJlbW92ZWQgZnJvbSB0aGUgbGFuZ3VhZ2UuCi0gICAgLy8KLSAgICBUQmFzaWNUeXBlIG5ld1R5
cGUgPSBFYnRWb2lkOwotICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RJbnQ6ICAgbmV3VHlwZSA9IEVidEludDsgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25z
dHJ1Y3RCb29sOiAgbmV3VHlwZSA9IEVidEJvb2w7ICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BD
b25zdHJ1Y3RGbG9hdDogbmV3VHlwZSA9IEVidEZsb2F0OyBicmVhazsKLSAgICAgICAgZGVmYXVs
dDogYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKG5ld1R5cGUgIT0gRWJ0Vm9pZCkgewotICAgICAg
ICBjaGlsZCA9IGFkZENvbnZlcnNpb24ob3AsIFRUeXBlKG5ld1R5cGUsIGNoaWxkLT5nZXRQcmVj
aXNpb24oKSwgRXZxVGVtcG9yYXJ5LAotICAgICAgICAgICAgY2hpbGQtPmdldE5vbWluYWxTaXpl
KCksCi0gICAgICAgICAgICBjaGlsZC0+aXNNYXRyaXgoKSwKLSAgICAgICAgICAgIGNoaWxkLT5p
c0FycmF5KCkpLAotICAgICAgICAgICAgY2hpbGQpOwotICAgICAgICBpZiAoY2hpbGQgPT0gMCkK
LSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vCi0gICAgLy8gRm9yIGNvbnN0
cnVjdG9ycywgd2UgYXJlIG5vdyBkb25lLCBpdCdzIGFsbCBpbiB0aGUgY29udmVyc2lvbi4KLSAg
ICAvLwotICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6Ci0g
ICAgICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDoKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RG
bG9hdDoKLSAgICAgICAgICAgIHJldHVybiBjaGlsZDsKLSAgICAgICAgZGVmYXVsdDogYnJlYWs7
Ci0gICAgfQotCi0gICAgVEludGVybUNvbnN0YW50VW5pb24gKmNoaWxkVGVtcENvbnN0YW50ID0g
MDsKLSAgICBpZiAoY2hpbGQtPmdldEFzQ29uc3RhbnRVbmlvbigpKQotICAgICAgICBjaGlsZFRl
bXBDb25zdGFudCA9IGNoaWxkLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLQotICAgIC8vCi0gICAg
Ly8gTWFrZSBhIG5ldyBub2RlIGZvciB0aGUgb3BlcmF0b3IuCi0gICAgLy8KLSAgICBub2RlID0g
bmV3IFRJbnRlcm1VbmFyeShvcCk7Ci0gICAgbm9kZS0+c2V0TGluZShsaW5lKTsKLSAgICBub2Rl
LT5zZXRPcGVyYW5kKGNoaWxkKTsKLQotICAgIGlmICghIG5vZGUtPnByb21vdGUoaW5mb1Npbmsp
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChjaGlsZFRlbXBDb25zdGFudCkgIHsKLSAg
ICAgICAgVEludGVybVR5cGVkKiBuZXdDaGlsZCA9IGNoaWxkVGVtcENvbnN0YW50LT5mb2xkKG9w
LCAwLCBpbmZvU2luayk7Ci0KLSAgICAgICAgaWYgKG5ld0NoaWxkKQotICAgICAgICAgICAgcmV0
dXJuIG5ld0NoaWxkOwotICAgIH0KLQotICAgIHJldHVybiBub2RlOwotfQotCi0vLwotLy8gVGhp
cyBpcyB0aGUgc2FmZSB3YXkgdG8gY2hhbmdlIHRoZSBvcGVyYXRvciBvbiBhbiBhZ2dyZWdhdGUs
IGFzIGl0Ci0vLyBkb2VzIGxvdHMgb2YgZXJyb3IgY2hlY2tpbmcgYW5kIGZpeGluZy4gIEVzcGVj
aWFsbHkgZm9yIGVzdGFibGlzaGluZwotLy8gYSBmdW5jdGlvbiBjYWxsJ3Mgb3BlcmF0aW9uIG9u
IGl0J3Mgc2V0IG9mIHBhcmFtZXRlcnMuICBTZXF1ZW5jZXMKLS8vIG9mIGluc3RydWN0aW9ucyBh
cmUgYWxzbyBhZ2dyZWdhdGVzLCBidXQgdGhleSBqdXN0IGRpcmVuY3RseSBzZXQKLS8vIHRoZWly
IG9wZXJhdG9yIHRvIEVPcFNlcXVlbmNlLgotLy8KLS8vIFJldHVybnMgYW4gYWdncmVnYXRlIG5v
ZGUsIHdoaWNoIGNvdWxkIGJlIHRoZSBvbmUgcGFzc2VkIGluIGlmCi0vLyBpdCB3YXMgYWxyZWFk
eSBhbiBhZ2dyZWdhdGUgYnV0IG5vIG9wZXJhdG9yIHdhcyBzZXQuCi0vLwotVEludGVybUFnZ3Jl
Z2F0ZSogVEludGVybWVkaWF0ZTo6c2V0QWdncmVnYXRlT3BlcmF0b3IoVEludGVybU5vZGUqIG5v
ZGUsIFRPcGVyYXRvciBvcCwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKLXsKLSAgICBUSW50ZXJt
QWdncmVnYXRlKiBhZ2dOb2RlOwotCi0gICAgLy8KLSAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBh
biBhZ2dyZWdhdGUuICBJZiBub3QgdHVybiBpdCBpbnRvIG9uZS4KLSAgICAvLwotICAgIGlmIChu
b2RlKSB7Ci0gICAgICAgIGFnZ05vZGUgPSBub2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpOwotICAgICAg
ICBpZiAoYWdnTm9kZSA9PSAwIHx8IGFnZ05vZGUtPmdldE9wKCkgIT0gRU9wTnVsbCkgewotICAg
ICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIE1ha2UgYW4gYWdncmVnYXRlIGNvbnRhaW5pbmcg
dGhpcyBub2RlLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGFnZ05vZGUgPSBuZXcgVElu
dGVybUFnZ3JlZ2F0ZSgpOwotICAgICAgICAgICAgYWdnTm9kZS0+Z2V0U2VxdWVuY2UoKS5wdXNo
X2JhY2sobm9kZSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgYWdnTm9kZSA9IG5l
dyBUSW50ZXJtQWdncmVnYXRlKCk7Ci0KLSAgICAvLwotICAgIC8vIFNldCB0aGUgb3BlcmF0b3Iu
Ci0gICAgLy8KLSAgICBhZ2dOb2RlLT5zZXRPcChvcCk7Ci0gICAgYWdnTm9kZS0+c2V0TGluZShs
aW5lKTsKLQotICAgIHJldHVybiBhZ2dOb2RlOwotfQotCi0vLwotLy8gQ29udmVydCBvbmUgdHlw
ZSB0byBhbm90aGVyLgotLy8KLS8vIFJldHVybnMgdGhlIG5vZGUgcmVwcmVzZW50aW5nIHRoZSBj
b252ZXJzaW9uLCB3aGljaCBjb3VsZCBiZSB0aGUgc2FtZQotLy8gbm9kZSBwYXNzZWQgaW4gaWYg
bm8gY29udmVyc2lvbiB3YXMgbmVlZGVkLgotLy8KLS8vIFJldHVybiAwIGlmIGEgY29udmVyc2lv
biBjYW4ndCBiZSBkb25lLgotLy8KLVRJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkQ29u
dmVyc2lvbihUT3BlcmF0b3Igb3AsIGNvbnN0IFRUeXBlJiB0eXBlLCBUSW50ZXJtVHlwZWQqIG5v
ZGUpCi17Ci0gICAgLy8KLSAgICAvLyBEb2VzIHRoZSBiYXNlIHR5cGUgYWxsb3cgb3BlcmF0aW9u
PwotICAgIC8vCi0gICAgc3dpdGNoIChub2RlLT5nZXRCYXNpY1R5cGUoKSkgewotICAgICAgICBj
YXNlIEVidFZvaWQ6Ci0gICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgotICAgICAgICBjYXNlIEVi
dFNhbXBsZXJDdWJlOgotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGRlZmF1bHQ6IGJy
ZWFrOwotICAgIH0KLQotICAgIC8vCi0gICAgLy8gT3RoZXJ3aXNlLCBpZiB0eXBlcyBhcmUgaWRl
bnRpY2FsLCBubyBwcm9ibGVtCi0gICAgLy8KLSAgICBpZiAodHlwZSA9PSBub2RlLT5nZXRUeXBl
KCkpCi0gICAgICAgIHJldHVybiBub2RlOwotCi0gICAgLy8KLSAgICAvLyBJZiBvbmUncyBhIHN0
cnVjdHVyZSwgdGhlbiBubyBjb252ZXJzaW9ucy4KLSAgICAvLwotICAgIGlmICh0eXBlLmdldFN0
cnVjdCgpIHx8IG5vZGUtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICAvLwotICAgIC8vIElmIG9uZSdzIGFuIGFycmF5LCB0aGVuIG5vIGNvbnZlcnNpb25z
LgotICAgIC8vCi0gICAgaWYgKHR5cGUuaXNBcnJheSgpIHx8IG5vZGUtPmdldFR5cGUoKS5pc0Fy
cmF5KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgVEJhc2ljVHlwZSBwcm9tb3RlVG87Ci0K
LSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIEV4cGxpY2l0IGNvbnZl
cnNpb25zCi0gICAgICAgIC8vCi0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDoKLSAgICAg
ICAgICAgIHByb21vdGVUbyA9IEVidEJvb2w7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBFT3BDb25zdHJ1Y3RGbG9hdDoKLSAgICAgICAgICAgIHByb21vdGVUbyA9IEVidEZsb2F0
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OgotICAg
ICAgICAgICAgcHJvbW90ZVRvID0gRWJ0SW50OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gaW1wbGljaXQgY29udmVy
c2lvbnMgd2VyZSByZW1vdmVkIGZyb20gdGhlIGxhbmd1YWdlLgotICAgICAgICAgICAgLy8KLSAg
ICAgICAgICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpICE9IG5vZGUtPmdldFR5cGUoKS5nZXRC
YXNpY1R5cGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIC8vCi0g
ICAgICAgICAgICAvLyBTaXplIGFuZCBzdHJ1Y3R1cmUgY291bGQgc3RpbGwgZGlmZmVyLCBidXQg
dGhhdCdzCi0gICAgICAgICAgICAvLyBoYW5kbGVkIGJ5IG9wZXJhdG9yIHByb21vdGlvbi4KLSAg
ICAgICAgICAgIC8vCi0gICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICB9Ci0KLSAgICBpZiAo
bm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCkpIHsKLQotICAgICAgICByZXR1cm4gKHByb21vdGVD
b25zdGFudFVuaW9uKHByb21vdGVUbywgbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCkpKTsKLSAg
ICB9IGVsc2UgewotCi0gICAgICAgIC8vCi0gICAgICAgIC8vIEFkZCBhIG5ldyBuZXdOb2RlIGZv
ciB0aGUgY29udmVyc2lvbi4KLSAgICAgICAgLy8KLSAgICAgICAgVEludGVybVVuYXJ5KiBuZXdO
b2RlID0gMDsKLQotICAgICAgICBUT3BlcmF0b3IgbmV3T3AgPSBFT3BOdWxsOwotICAgICAgICBz
d2l0Y2ggKHByb21vdGVUbykgewotICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKLSAgICAgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldEJhc2ljVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgRWJ0SW50OiAgIG5ld09wID0gRU9wQ29udkludFRvRmxvYXQ7ICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOiAgbmV3T3AgPSBFT3BDb252Qm9vbFRvRmxv
YXQ7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
ICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2Rl
LT5nZXRMaW5lKCksICJCYWQgcHJvbW90aW9uIG5vZGUiKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
PmdldEJhc2ljVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OiAgIG5l
d09wID0gRU9wQ29udkludFRvQm9vbDsgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBFYnRGbG9hdDogbmV3T3AgPSBFT3BDb252RmxvYXRUb0Jvb2w7IGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5m
by5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRMaW5lKCksICJCYWQgcHJv
bW90aW9uIG5vZGUiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRWJ0
SW50OgotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOiAgIG5ld09wID0gRU9wQ29udkJvb2xUb0lu
dDsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OiAgbmV3T3AgPSBF
T3BDb252RmxvYXRUb0ludDsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVy
bmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIkJhZCBwcm9tb3Rpb24gbm9kZSIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpbmZv
U2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwg
IkJhZCBwcm9tb3Rpb24gdHlwZSIpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICB9Ci0KLSAgICAgICAgVFR5cGUgdHlwZShwcm9tb3RlVG8sIG5vZGUtPmdldFByZWNpc2lvbigp
LCBFdnFUZW1wb3JhcnksIG5vZGUtPmdldE5vbWluYWxTaXplKCksIG5vZGUtPmlzTWF0cml4KCks
IG5vZGUtPmlzQXJyYXkoKSk7Ci0gICAgICAgIG5ld05vZGUgPSBuZXcgVEludGVybVVuYXJ5KG5l
d09wLCB0eXBlKTsKLSAgICAgICAgbmV3Tm9kZS0+c2V0TGluZShub2RlLT5nZXRMaW5lKCkpOwot
ICAgICAgICBuZXdOb2RlLT5zZXRPcGVyYW5kKG5vZGUpOwotCi0gICAgICAgIHJldHVybiBuZXdO
b2RlOwotICAgIH0KLX0KLQotLy8KLS8vIFNhZmUgd2F5IHRvIGNvbWJpbmUgdHdvIG5vZGVzIGlu
dG8gYW4gYWdncmVnYXRlLiAgV29ya3Mgd2l0aCBudWxsIHBvaW50ZXJzLAotLy8gYSBub2RlIHRo
YXQncyBub3QgYSBhZ2dyZWdhdGUgeWV0LCBldGMuCi0vLwotLy8gUmV0dXJucyB0aGUgcmVzdWx0
aW5nIGFnZ3JlZ2F0ZSwgdW5sZXNzIDAgd2FzIHBhc3NlZCBpbiBmb3IKLS8vIGJvdGggZXhpc3Rp
bmcgbm9kZXMuCi0vLwotVEludGVybUFnZ3JlZ2F0ZSogVEludGVybWVkaWF0ZTo6Z3Jvd0FnZ3Jl
Z2F0ZShUSW50ZXJtTm9kZSogbGVmdCwgVEludGVybU5vZGUqIHJpZ2h0LCBjb25zdCBUU291cmNl
TG9jJiBsaW5lKQotewotICAgIGlmIChsZWZ0ID09IDAgJiYgcmlnaHQgPT0gMCkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICBUSW50ZXJtQWdncmVnYXRlKiBhZ2dOb2RlID0gMDsKLSAgICBpZiAo
bGVmdCkKLSAgICAgICAgYWdnTm9kZSA9IGxlZnQtPmdldEFzQWdncmVnYXRlKCk7Ci0gICAgaWYg
KCFhZ2dOb2RlIHx8IGFnZ05vZGUtPmdldE9wKCkgIT0gRU9wTnVsbCkgewotICAgICAgICBhZ2dO
b2RlID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGU7Ci0gICAgICAgIGlmIChsZWZ0KQotICAgICAgICAg
ICAgYWdnTm9kZS0+Z2V0U2VxdWVuY2UoKS5wdXNoX2JhY2sobGVmdCk7Ci0gICAgfQotCi0gICAg
aWYgKHJpZ2h0KQotICAgICAgICBhZ2dOb2RlLT5nZXRTZXF1ZW5jZSgpLnB1c2hfYmFjayhyaWdo
dCk7Ci0KLSAgICBhZ2dOb2RlLT5zZXRMaW5lKGxpbmUpOwotCi0gICAgcmV0dXJuIGFnZ05vZGU7
Ci19Ci0KLS8vCi0vLyBUdXJuIGFuIGV4aXN0aW5nIG5vZGUgaW50byBhbiBhZ2dyZWdhdGUuCi0v
LwotLy8gUmV0dXJucyBhbiBhZ2dyZWdhdGUsIHVubGVzcyAwIHdhcyBwYXNzZWQgaW4gZm9yIHRo
ZSBleGlzdGluZyBub2RlLgotLy8KLVRJbnRlcm1BZ2dyZWdhdGUqIFRJbnRlcm1lZGlhdGU6Om1h
a2VBZ2dyZWdhdGUoVEludGVybU5vZGUqIG5vZGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCi17
Ci0gICAgaWYgKG5vZGUgPT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBUSW50ZXJtQWdn
cmVnYXRlKiBhZ2dOb2RlID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGU7Ci0gICAgYWdnTm9kZS0+Z2V0
U2VxdWVuY2UoKS5wdXNoX2JhY2sobm9kZSk7Ci0gICAgYWdnTm9kZS0+c2V0TGluZShsaW5lKTsK
LQotICAgIHJldHVybiBhZ2dOb2RlOwotfQotCi0vLwotLy8gRm9yICJpZiIgdGVzdCBub2Rlcy4g
IFRoZXJlIGFyZSB0aHJlZSBjaGlsZHJlbjsgYSBjb25kaXRpb24sCi0vLyBhIHRydWUgcGF0aCwg
YW5kIGEgZmFsc2UgcGF0aC4gIFRoZSB0d28gcGF0aHMgYXJlIGluIHRoZQotLy8gbm9kZVBhaXIu
Ci0vLwotLy8gUmV0dXJucyB0aGUgc2VsZWN0aW9uIG5vZGUgY3JlYXRlZC4KLS8vCi1USW50ZXJt
Tm9kZSogVEludGVybWVkaWF0ZTo6YWRkU2VsZWN0aW9uKFRJbnRlcm1UeXBlZCogY29uZCwgVElu
dGVybU5vZGVQYWlyIG5vZGVQYWlyLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQotewotICAgIC8v
Ci0gICAgLy8gRm9yIGNvbXBpbGUgdGltZSBjb25zdGFudCBzZWxlY3Rpb25zLCBwcnVuZSB0aGUg
Y29kZSBhbmQKLSAgICAvLyB0ZXN0IG5vdy4KLSAgICAvLwotCi0gICAgaWYgKGNvbmQtPmdldEFz
VHlwZWQoKSAmJiBjb25kLT5nZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRVbmlvbigpKSB7Ci0g
ICAgICAgIGlmIChjb25kLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0QkNvbnN0KDApID09IHRy
dWUpCi0gICAgICAgICAgICByZXR1cm4gbm9kZVBhaXIubm9kZTEgPyBzZXRBZ2dyZWdhdGVPcGVy
YXRvcihub2RlUGFpci5ub2RlMSwgRU9wU2VxdWVuY2UsIG5vZGVQYWlyLm5vZGUxLT5nZXRMaW5l
KCkpIDogTlVMTDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIG5vZGVQYWlyLm5v
ZGUyID8gc2V0QWdncmVnYXRlT3BlcmF0b3Iobm9kZVBhaXIubm9kZTIsIEVPcFNlcXVlbmNlLCBu
b2RlUGFpci5ub2RlMi0+Z2V0TGluZSgpKSA6IE5VTEw7Ci0gICAgfQotCi0gICAgVEludGVybVNl
bGVjdGlvbiogbm9kZSA9IG5ldyBUSW50ZXJtU2VsZWN0aW9uKGNvbmQsIG5vZGVQYWlyLm5vZGUx
LCBub2RlUGFpci5ub2RlMik7Ci0gICAgbm9kZS0+c2V0TGluZShsaW5lKTsKLQotICAgIHJldHVy
biBub2RlOwotfQotCi0KLVRJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkQ29tbWEoVElu
dGVybVR5cGVkKiBsZWZ0LCBUSW50ZXJtVHlwZWQqIHJpZ2h0LCBjb25zdCBUU291cmNlTG9jJiBs
aW5lKQotewotICAgIGlmIChsZWZ0LT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29u
c3QgJiYgcmlnaHQtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgewotICAg
ICAgICByZXR1cm4gcmlnaHQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgVEludGVybVR5cGVkICpj
b21tYUFnZ3JlZ2F0ZSA9IGdyb3dBZ2dyZWdhdGUobGVmdCwgcmlnaHQsIGxpbmUpOwotICAgICAg
ICBjb21tYUFnZ3JlZ2F0ZS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0T3AoRU9wQ29tbWEpOwotICAg
ICAgICBjb21tYUFnZ3JlZ2F0ZS0+c2V0VHlwZShyaWdodC0+Z2V0VHlwZSgpKTsKLSAgICAgICAg
Y29tbWFBZ2dyZWdhdGUtPmdldFR5cGVQb2ludGVyKCktPnNldFF1YWxpZmllcihFdnFUZW1wb3Jh
cnkpOwotICAgICAgICByZXR1cm4gY29tbWFBZ2dyZWdhdGU7Ci0gICAgfQotfQotCi0vLwotLy8g
Rm9yICI/OiIgdGVzdCBub2Rlcy4gIFRoZXJlIGFyZSB0aHJlZSBjaGlsZHJlbjsgYSBjb25kaXRp
b24sCi0vLyBhIHRydWUgcGF0aCwgYW5kIGEgZmFsc2UgcGF0aC4gIFRoZSB0d28gcGF0aHMgYXJl
IHNwZWNpZmllZAotLy8gYXMgc2VwYXJhdGUgcGFyYW1ldGVycy4KLS8vCi0vLyBSZXR1cm5zIHRo
ZSBzZWxlY3Rpb24gbm9kZSBjcmVhdGVkLCBvciAwIGlmIG9uZSBjb3VsZCBub3QgYmUuCi0vLwot
VEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRTZWxlY3Rpb24oVEludGVybVR5cGVkKiBj
b25kLCBUSW50ZXJtVHlwZWQqIHRydWVCbG9jaywgVEludGVybVR5cGVkKiBmYWxzZUJsb2NrLCBj
b25zdCBUU291cmNlTG9jJiBsaW5lKQotewotICAgIC8vCi0gICAgLy8gR2V0IGNvbXBhdGlibGUg
dHlwZXMuCi0gICAgLy8KLSAgICBUSW50ZXJtVHlwZWQqIGNoaWxkID0gYWRkQ29udmVyc2lvbihF
T3BTZXF1ZW5jZSwgdHJ1ZUJsb2NrLT5nZXRUeXBlKCksIGZhbHNlQmxvY2spOwotICAgIGlmIChj
aGlsZCkKLSAgICAgICAgZmFsc2VCbG9jayA9IGNoaWxkOwotICAgIGVsc2UgewotICAgICAgICBj
aGlsZCA9IGFkZENvbnZlcnNpb24oRU9wU2VxdWVuY2UsIGZhbHNlQmxvY2stPmdldFR5cGUoKSwg
dHJ1ZUJsb2NrKTsKLSAgICAgICAgaWYgKGNoaWxkKQotICAgICAgICAgICAgdHJ1ZUJsb2NrID0g
Y2hpbGQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAg
IC8vCi0gICAgLy8gU2VlIGlmIGFsbCB0aGUgb3BlcmFuZHMgYXJlIGNvbnN0YW50LCB0aGVuIGZv
bGQgaXQgb3RoZXJ3aXNlIG5vdC4KLSAgICAvLwotCi0gICAgaWYgKGNvbmQtPmdldEFzQ29uc3Rh
bnRVbmlvbigpICYmIHRydWVCbG9jay0+Z2V0QXNDb25zdGFudFVuaW9uKCkgJiYgZmFsc2VCbG9j
ay0+Z2V0QXNDb25zdGFudFVuaW9uKCkpIHsKLSAgICAgICAgaWYgKGNvbmQtPmdldEFzQ29uc3Rh
bnRVbmlvbigpLT5nZXRCQ29uc3QoMCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZUJsb2NrOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZmFsc2VCbG9jazsKLSAgICB9Ci0KLSAg
ICAvLwotICAgIC8vIE1ha2UgYSBzZWxlY3Rpb24gbm9kZS4KLSAgICAvLwotICAgIFRJbnRlcm1T
ZWxlY3Rpb24qIG5vZGUgPSBuZXcgVEludGVybVNlbGVjdGlvbihjb25kLCB0cnVlQmxvY2ssIGZh
bHNlQmxvY2ssIHRydWVCbG9jay0+Z2V0VHlwZSgpKTsKLSAgICBub2RlLT5nZXRUeXBlUG9pbnRl
cigpLT5zZXRRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKLSAgICBub2RlLT5zZXRMaW5lKGxpbmUp
OwotCi0gICAgcmV0dXJuIG5vZGU7Ci19Ci0KLS8vCi0vLyBDb25zdGFudCB0ZXJtaW5hbCBub2Rl
cy4gIEhhcyBhIHVuaW9uIHRoYXQgY29udGFpbnMgYm9vbCwgZmxvYXQgb3IgaW50IGNvbnN0YW50
cwotLy8KLS8vIFJldHVybnMgdGhlIGNvbnN0YW50IHVuaW9uIG5vZGUgY3JlYXRlZC4KLS8vCi0K
LVRJbnRlcm1Db25zdGFudFVuaW9uKiBUSW50ZXJtZWRpYXRlOjphZGRDb25zdGFudFVuaW9uKENv
bnN0YW50VW5pb24qIHVuaW9uQXJyYXlQb2ludGVyLCBjb25zdCBUVHlwZSYgdCwgY29uc3QgVFNv
dXJjZUxvYyYgbGluZSkKLXsKLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSA9IG5ldyBU
SW50ZXJtQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5UG9pbnRlciwgdCk7Ci0gICAgbm9kZS0+c2V0
TGluZShsaW5lKTsKLQotICAgIHJldHVybiBub2RlOwotfQotCi1USW50ZXJtVHlwZWQqIFRJbnRl
cm1lZGlhdGU6OmFkZFN3aXp6bGUoVFZlY3RvckZpZWxkcyYgZmllbGRzLCBjb25zdCBUU291cmNl
TG9jJiBsaW5lKQotewotCi0gICAgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSA9IG5ldyBUSW50ZXJt
QWdncmVnYXRlKEVPcFNlcXVlbmNlKTsKLQotICAgIG5vZGUtPnNldExpbmUobGluZSk7Ci0gICAg
VEludGVybUNvbnN0YW50VW5pb24qIGNvbnN0SW50Tm9kZTsKLSAgICBUSW50ZXJtU2VxdWVuY2Ug
JnNlcXVlbmNlVmVjdG9yID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKLSAgICBDb25zdGFudFVuaW9u
KiB1bmlvbkFycmF5OwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZHMubnVtOyBpKysp
IHsKLSAgICAgICAgdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICB1
bmlvbkFycmF5LT5zZXRJQ29uc3QoZmllbGRzLm9mZnNldHNbaV0pOwotICAgICAgICBjb25zdElu
dE5vZGUgPSBhZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5k
ZWZpbmVkLCBFdnFDb25zdCksIGxpbmUpOwotICAgICAgICBzZXF1ZW5jZVZlY3Rvci5wdXNoX2Jh
Y2soY29uc3RJbnROb2RlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbm9kZTsKLX0KLQotLy8KLS8v
IENyZWF0ZSBsb29wIG5vZGVzLgotLy8KLVRJbnRlcm1Ob2RlKiBUSW50ZXJtZWRpYXRlOjphZGRM
b29wKFRMb29wVHlwZSB0eXBlLCBUSW50ZXJtTm9kZSogaW5pdCwgVEludGVybVR5cGVkKiBjb25k
LCBUSW50ZXJtVHlwZWQqIGV4cHIsIFRJbnRlcm1Ob2RlKiBib2R5LCBjb25zdCBUU291cmNlTG9j
JiBsaW5lKQotewotICAgIFRJbnRlcm1Ob2RlKiBub2RlID0gbmV3IFRJbnRlcm1Mb29wKHR5cGUs
IGluaXQsIGNvbmQsIGV4cHIsIGJvZHkpOwotICAgIG5vZGUtPnNldExpbmUobGluZSk7Ci0KLSAg
ICByZXR1cm4gbm9kZTsKLX0KLQotLy8KLS8vIEFkZCBicmFuY2hlcy4KLS8vCi1USW50ZXJtQnJh
bmNoKiBUSW50ZXJtZWRpYXRlOjphZGRCcmFuY2goVE9wZXJhdG9yIGJyYW5jaE9wLCBjb25zdCBU
U291cmNlTG9jJiBsaW5lKQotewotICAgIHJldHVybiBhZGRCcmFuY2goYnJhbmNoT3AsIDAsIGxp
bmUpOwotfQotCi1USW50ZXJtQnJhbmNoKiBUSW50ZXJtZWRpYXRlOjphZGRCcmFuY2goVE9wZXJh
dG9yIGJyYW5jaE9wLCBUSW50ZXJtVHlwZWQqIGV4cHJlc3Npb24sIGNvbnN0IFRTb3VyY2VMb2Mm
IGxpbmUpCi17Ci0gICAgVEludGVybUJyYW5jaCogbm9kZSA9IG5ldyBUSW50ZXJtQnJhbmNoKGJy
YW5jaE9wLCBleHByZXNzaW9uKTsKLSAgICBub2RlLT5zZXRMaW5lKGxpbmUpOwotCi0gICAgcmV0
dXJuIG5vZGU7Ci19Ci0KLS8vCi0vLyBUaGlzIGlzIHRvIGJlIGV4ZWN1dGVkIG9uY2UgdGhlIGZp
bmFsIHJvb3QgaXMgcHV0IG9uIHRvcCBieSB0aGUgcGFyc2luZwotLy8gcHJvY2Vzcy4KLS8vCi1i
b29sIFRJbnRlcm1lZGlhdGU6OnBvc3RQcm9jZXNzKFRJbnRlcm1Ob2RlKiByb290KQotewotICAg
IGlmIChyb290ID09IDApCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8KLSAgICAvLyBG
aXJzdCwgZmluaXNoIG9mZiB0aGUgdG9wIGxldmVsIHNlcXVlbmNlLCBpZiBhbnkKLSAgICAvLwot
ICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ1Jvb3QgPSByb290LT5nZXRBc0FnZ3JlZ2F0ZSgpOwot
ICAgIGlmIChhZ2dSb290ICYmIGFnZ1Jvb3QtPmdldE9wKCkgPT0gRU9wTnVsbCkKLSAgICAgICAg
YWdnUm9vdC0+c2V0T3AoRU9wU2VxdWVuY2UpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8v
Ci0vLyBUaGlzIGRlbGV0ZXMgdGhlIHRyZWUuCi0vLwotdm9pZCBUSW50ZXJtZWRpYXRlOjpyZW1v
dmUoVEludGVybU5vZGUqIHJvb3QpCi17Ci0gICAgaWYgKHJvb3QpCi0gICAgICAgIFJlbW92ZUFs
bFRyZWVOb2Rlcyhyb290KTsKLX0KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8KLS8vIE1lbWJlciBmdW5jdGlvbnMg
b2YgdGhlIG5vZGVzIHVzZWQgZm9yIGJ1aWxkaW5nIHRoZSB0cmVlLgotLy8KLS8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQot
I2RlZmluZSBSRVBMQUNFX0lGX0lTKG5vZGUsIHR5cGUsIG9yaWdpbmFsLCByZXBsYWNlbWVudCkg
XAotICAgIGlmIChub2RlID09IG9yaWdpbmFsKSB7IFwKLSAgICAgICAgbm9kZSA9IHN0YXRpY19j
YXN0PHR5cGUgKj4ocmVwbGFjZW1lbnQpOyBcCi0gICAgICAgIHJldHVybiB0cnVlOyBcCi0gICAg
fQotCi1ib29sIFRJbnRlcm1Mb29wOjpyZXBsYWNlQ2hpbGROb2RlKAotICAgIFRJbnRlcm1Ob2Rl
ICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KQotewotICAgIFJFUExBQ0VfSUZf
SVMoaW5pdCwgVEludGVybU5vZGUsIG9yaWdpbmFsLCByZXBsYWNlbWVudCk7Ci0gICAgUkVQTEFD
RV9JRl9JUyhjb25kLCBUSW50ZXJtVHlwZWQsIG9yaWdpbmFsLCByZXBsYWNlbWVudCk7Ci0gICAg
UkVQTEFDRV9JRl9JUyhleHByLCBUSW50ZXJtVHlwZWQsIG9yaWdpbmFsLCByZXBsYWNlbWVudCk7
Ci0gICAgUkVQTEFDRV9JRl9JUyhib2R5LCBUSW50ZXJtTm9kZSwgb3JpZ2luYWwsIHJlcGxhY2Vt
ZW50KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVEludGVybUJyYW5jaDo6cmVwbGFj
ZUNoaWxkTm9kZSgKLSAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZXBs
YWNlbWVudCkKLXsKLSAgICBSRVBMQUNFX0lGX0lTKGV4cHJlc3Npb24sIFRJbnRlcm1UeXBlZCwg
b3JpZ2luYWwsIHJlcGxhY2VtZW50KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVElu
dGVybUJpbmFyeTo6cmVwbGFjZUNoaWxkTm9kZSgKLSAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWws
IFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCkKLXsKLSAgICBSRVBMQUNFX0lGX0lTKGxlZnQsIFRJ
bnRlcm1UeXBlZCwgb3JpZ2luYWwsIHJlcGxhY2VtZW50KTsKLSAgICBSRVBMQUNFX0lGX0lTKHJp
Z2h0LCBUSW50ZXJtVHlwZWQsIG9yaWdpbmFsLCByZXBsYWNlbWVudCk7Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1ib29sIFRJbnRlcm1VbmFyeTo6cmVwbGFjZUNoaWxkTm9kZSgKLSAgICBUSW50
ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCkKLXsKLSAgICBSRVBM
QUNFX0lGX0lTKG9wZXJhbmQsIFRJbnRlcm1UeXBlZCwgb3JpZ2luYWwsIHJlcGxhY2VtZW50KTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVEludGVybUFnZ3JlZ2F0ZTo6cmVwbGFjZUNo
aWxkTm9kZSgKLSAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNl
bWVudCkKLXsKLSAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgc2VxdWVuY2Uuc2l6ZSgpOyAr
K2lpKQotICAgIHsKLSAgICAgICAgUkVQTEFDRV9JRl9JUyhzZXF1ZW5jZVtpaV0sIFRJbnRlcm1O
b2RlLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgVEludGVybVNlbGVjdGlvbjo6cmVwbGFjZUNoaWxkTm9kZSgKLSAgICBUSW50ZXJt
Tm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCkKLXsKLSAgICBSRVBMQUNF
X0lGX0lTKGNvbmRpdGlvbiwgVEludGVybVR5cGVkLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpOwot
ICAgIFJFUExBQ0VfSUZfSVModHJ1ZUJsb2NrLCBUSW50ZXJtTm9kZSwgb3JpZ2luYWwsIHJlcGxh
Y2VtZW50KTsKLSAgICBSRVBMQUNFX0lGX0lTKGZhbHNlQmxvY2ssIFRJbnRlcm1Ob2RlLCBvcmln
aW5hbCwgcmVwbGFjZW1lbnQpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8KLS8vIFNheSB3
aGV0aGVyIG9yIG5vdCBhbiBvcGVyYXRpb24gbm9kZSBjaGFuZ2VzIHRoZSB2YWx1ZSBvZiBhIHZh
cmlhYmxlLgotLy8KLWJvb2wgVEludGVybU9wZXJhdG9yOjppc0Fzc2lnbm1lbnQoKSBjb25zdAot
ewotICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50OgotICAg
ICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6Ci0gICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50
OgotICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDoKLSAgICAgICAgY2FzZSBFT3BBc3NpZ246
Ci0gICAgICAgIGNhc2UgRU9wQWRkQXNzaWduOgotICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjoK
LSAgICAgICAgY2FzZSBFT3BNdWxBc3NpZ246Ci0gICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNN
YXRyaXhBc3NpZ246Ci0gICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXJBc3NpZ246Ci0g
ICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ246Ci0gICAgICAgIGNhc2UgRU9w
TWF0cml4VGltZXNNYXRyaXhBc3NpZ246Ci0gICAgICAgIGNhc2UgRU9wRGl2QXNzaWduOgotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotfQotCi0vLwotLy8gcmV0dXJucyB0cnVlIGlmIHRoZSBvcGVyYXRv
ciBpcyBmb3Igb25lIG9mIHRoZSBjb25zdHJ1Y3RvcnMKLS8vCi1ib29sIFRJbnRlcm1PcGVyYXRv
cjo6aXNDb25zdHJ1Y3RvcigpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChvcCkgewotICAgICAgICBj
YXNlIEVPcENvbnN0cnVjdFZlYzI6Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMzoKLSAg
ICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWM0OgotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1h
dDI6Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MzoKLSAgICAgICAgY2FzZSBFT3BDb25z
dHJ1Y3RNYXQ0OgotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OgotICAgICAgICBjYXNl
IEVPcENvbnN0cnVjdElWZWMyOgotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMzOgotICAg
ICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWM0OgotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElu
dDoKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMjoKLSAgICAgICAgY2FzZSBFT3BDb25z
dHJ1Y3RCVmVjMzoKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjNDoKLSAgICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RCb29sOgotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFN0cnVjdDoKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLX0KLQotLy8KLS8vIE1ha2Ugc3VyZSB0aGUgdHlwZSBvZiBhIHVu
YXJ5IG9wZXJhdG9yIGlzIGFwcHJvcHJpYXRlIGZvciBpdHMKLS8vIGNvbWJpbmF0aW9uIG9mIG9w
ZXJhdGlvbiBhbmQgb3BlcmFuZCB0eXBlLgotLy8KLS8vIFJldHVybnMgZmFsc2UgaW4gbm90aGlu
ZyBtYWtlcyBzZW5zZS4KLS8vCi1ib29sIFRJbnRlcm1VbmFyeTo6cHJvbW90ZShUSW5mb1Npbmsm
KQotewotICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OgotICAg
ICAgICAgICAgaWYgKG9wZXJhbmQtPmdldEJhc2ljVHlwZSgpICE9IEVidEJvb2wpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RU9wTmVnYXRpdmU6Ci0gICAgICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDoKLSAgICAgICAgY2Fz
ZSBFT3BQb3N0RGVjcmVtZW50OgotICAgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDoKLSAgICAg
ICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6Ci0gICAgICAgICAgICBpZiAob3BlcmFuZC0+Z2V0QmFz
aWNUeXBlKCkgPT0gRWJ0Qm9vbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgLy8gb3BlcmF0b3JzIGZvciBidWlsdC1pbnMg
YXJlIGFscmVhZHkgdHlwZSBjaGVja2VkIGFnYWluc3QgdGhlaXIgcHJvdG90eXBlCi0gICAgICAg
IGNhc2UgRU9wQW55OgotICAgICAgICBjYXNlIEVPcEFsbDoKLSAgICAgICAgY2FzZSBFT3BWZWN0
b3JMb2dpY2FsTm90OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIGlmIChvcGVyYW5kLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRGbG9hdCkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgc2V0VHlwZShvcGVy
YW5kLT5nZXRUeXBlKCkpOwotICAgIHR5cGUuc2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8KLS8vIEVzdGFibGlzaGVzIHRoZSB0eXBlIG9mIHRo
ZSByZXN1bHRhbnQgb3BlcmF0aW9uLCBhcyB3ZWxsIGFzCi0vLyBtYWtlcyB0aGUgb3BlcmF0b3Ig
dGhlIGNvcnJlY3Qgb25lIGZvciB0aGUgb3BlcmFuZHMuCi0vLwotLy8gUmV0dXJucyBmYWxzZSBp
ZiBvcGVyYXRvciBjYW4ndCB3b3JrIG9uIG9wZXJhbmRzLgotLy8KLWJvb2wgVEludGVybUJpbmFy
eTo6cHJvbW90ZShUSW5mb1NpbmsmIGluZm9TaW5rKQotewotICAgIC8vIFRoaXMgZnVuY3Rpb24g
b25seSBoYW5kbGVzIHNjYWxhcnMsIHZlY3RvcnMsIGFuZCBtYXRyaWNlcy4KLSAgICBpZiAobGVm
dC0+aXNBcnJheSgpIHx8IHJpZ2h0LT5pc0FycmF5KCkpIHsKLSAgICAgICAgaW5mb1NpbmsuaW5m
by5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJJbnZhbGlkIG9wZXJh
dGlvbiBmb3IgYXJyYXlzIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAv
LyBHTFNMIEVTIDIuMCBkb2VzIG5vdCBzdXBwb3J0IGltcGxpY2l0IHR5cGUgY2FzdGluZy4KLSAg
ICAvLyBTbyB0aGUgYmFzaWMgdHlwZSBzaG91bGQgYWx3YXlzIG1hdGNoLgotICAgIGlmIChsZWZ0
LT5nZXRCYXNpY1R5cGUoKSAhPSByaWdodC0+Z2V0QmFzaWNUeXBlKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIC8vCi0gICAgLy8gQmFzZSBhc3N1bXB0aW9uOiAganVzdCBtYWtlIHRo
ZSB0eXBlIHRoZSBzYW1lIGFzIHRoZSBsZWZ0Ci0gICAgLy8gb3BlcmFuZC4gIFRoZW4gb25seSBk
ZXZpYXRpb25zIGZyb20gdGhpcyBuZWVkIGJlIGNvZGVkLgotICAgIC8vCi0gICAgc2V0VHlwZShs
ZWZ0LT5nZXRUeXBlKCkpOwotCi0gICAgLy8gVGhlIHJlc3VsdCBnZXRzIHByb21vdGVkIHRvIHRo
ZSBoaWdoZXN0IHByZWNpc2lvbi4KLSAgICBUUHJlY2lzaW9uIGhpZ2hlclByZWNpc2lvbiA9IEdl
dEhpZ2hlclByZWNpc2lvbihsZWZ0LT5nZXRQcmVjaXNpb24oKSwgcmlnaHQtPmdldFByZWNpc2lv
bigpKTsKLSAgICBnZXRUeXBlUG9pbnRlcigpLT5zZXRQcmVjaXNpb24oaGlnaGVyUHJlY2lzaW9u
KTsKLQotICAgIC8vIEJpbmFyeSBvcGVyYXRpb25zIHJlc3VsdHMgaW4gdGVtcG9yYXJ5IHZhcmlh
YmxlcyB1bmxlc3MgYm90aAotICAgIC8vIG9wZXJhbmRzIGFyZSBjb25zdC4KLSAgICBpZiAobGVm
dC0+Z2V0UXVhbGlmaWVyKCkgIT0gRXZxQ29uc3QgfHwgcmlnaHQtPmdldFF1YWxpZmllcigpICE9
IEV2cUNvbnN0KSB7Ci0gICAgICAgIGdldFR5cGVQb2ludGVyKCktPnNldFF1YWxpZmllcihFdnFU
ZW1wb3JhcnkpOwotICAgIH0KLQotICAgIGludCBzaXplID0gc3RkOjptYXgobGVmdC0+Z2V0Tm9t
aW5hbFNpemUoKSwgcmlnaHQtPmdldE5vbWluYWxTaXplKCkpOwotCi0gICAgLy8KLSAgICAvLyBB
bGwgc2NhbGFycy4gQ29kZSBhZnRlciB0aGlzIHRlc3QgYXNzdW1lcyB0aGlzIGNhc2UgaXMgcmVt
b3ZlZCEKLSAgICAvLwotICAgIGlmIChzaXplID09IDEpIHsKLSAgICAgICAgc3dpdGNoIChvcCkg
ewotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFByb21vdGUgdG8gY29uZGl0aW9uYWwK
LSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBjYXNlIEVPcEVxdWFsOgotICAgICAgICAgICAg
Y2FzZSBFT3BOb3RFcXVhbDoKLSAgICAgICAgICAgIGNhc2UgRU9wTGVzc1RoYW46Ci0gICAgICAg
ICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgotICAgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVx
dWFsOgotICAgICAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgotICAgICAgICAgICAg
ICAgIHNldFR5cGUoVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkKSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBBbmQgYW5kIE9yIG9w
ZXJhdGUgb24gY29uZGl0aW9uYWxzCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgY2FzZSBF
T3BMb2dpY2FsQW5kOgotICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6Ci0gICAgICAgICAg
ICAgICAgLy8gQm90aCBvcGVyYW5kcyBtdXN0IGJlIG9mIHR5cGUgYm9vbC4KLSAgICAgICAgICAg
ICAgICBpZiAobGVmdC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Qm9vbCB8fCByaWdodC0+Z2V0QmFz
aWNUeXBlKCkgIT0gRWJ0Qm9vbCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkKSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgLy8gSWYgd2UgcmVhY2ggaGVyZSwgYXQgbGVhc3Qgb25lIG9mIHRoZSBvcGVyYW5kcyBpcyB2
ZWN0b3Igb3IgbWF0cml4LgotICAgIC8vIFRoZSBvdGhlciBvcGVyYW5kIGNvdWxkIGJlIGEgc2Nh
bGFyLCB2ZWN0b3IsIG9yIG1hdHJpeC4KLSAgICAvLyBBcmUgdGhlIHNpemVzIGNvbXBhdGlibGU/
Ci0gICAgLy8KLSAgICBpZiAobGVmdC0+Z2V0Tm9taW5hbFNpemUoKSAhPSByaWdodC0+Z2V0Tm9t
aW5hbFNpemUoKSkgewotICAgICAgICAvLyBJZiB0aGUgbm9taW5hbCBzaXplIG9mIG9wZXJhbmRz
IGRvIG5vdCBtYXRjaDoKLSAgICAgICAgLy8gT25lIG9mIHRoZW0gbXVzdCBiZSBzY2FsYXIuCi0g
ICAgICAgIGlmIChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpICE9IDEgJiYgcmlnaHQtPmdldE5vbWlu
YWxTaXplKCkgIT0gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgLy8gT3Bl
cmF0b3IgY2Fubm90IGJlIG9mIHR5cGUgcHVyZSBhc3NpZ25tZW50LgotICAgICAgICBpZiAob3Ag
PT0gRU9wQXNzaWduIHx8IG9wID09IEVPcEluaXRpYWxpemUpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBDYW4gdGhlc2UgdHdvIG9wZXJhbmRzIGJl
IGNvbWJpbmVkPwotICAgIC8vCi0gICAgVEJhc2ljVHlwZSBiYXNpY1R5cGUgPSBsZWZ0LT5nZXRC
YXNpY1R5cGUoKTsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgRU9wTXVsOgotICAg
ICAgICAgICAgaWYgKCFsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkpCi0gICAgICAgICAgICAgICAgICAg
IG9wID0gRU9wVmVjdG9yVGltZXNNYXRyaXg7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIG9wID0gRU9wTWF0cml4VGltZXNTY2FsYXI7Ci0gICAgICAgICAgICAg
ICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBv
cmFyeSwgc2l6ZSwgdHJ1ZSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKLSAgICAgICAg
ICAgICAgICBpZiAocmlnaHQtPmlzVmVjdG9yKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgb3Ag
PSBFT3BNYXRyaXhUaW1lc1ZlY3RvcjsKLSAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlw
ZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCBmYWxzZSkp
OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG9wID0gRU9w
TWF0cml4VGltZXNTY2FsYXI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNl
IGlmIChsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSB7Ci0gICAgICAgICAg
ICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc01hdHJpeDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAo
IWxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQtPmlzVmVjdG9yKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gbGVhdmUgYXMgY29tcG9uZW50IHByb2R1Y3QKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKGxlZnQtPmlzVmVjdG9yKCkgfHwgcmlnaHQtPmlzVmVjdG9yKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc1NjYWxhcjsKLSAgICAgICAgICAg
ICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVt
cG9yYXJ5LCBzaXplLCBmYWxzZSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRl
cm5hbEVycm9yLCBnZXRMaW5lKCksICJNaXNzaW5nIGVsc2VzIik7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRU9wTXVsQXNzaWduOgotICAgICAgICAgICAgaWYgKCFsZWZ0LT5pc01hdHJpeCgpICYm
IHJpZ2h0LT5pc01hdHJpeCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9y
KCkpCi0gICAgICAgICAgICAgICAgICAgIG9wID0gRU9wVmVjdG9yVGltZXNNYXRyaXhBc3NpZ247
Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzTWF0
cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJpZ2h0
LT5pc1ZlY3RvcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRp
bWVzU2NhbGFyQXNzaWduOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAobGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkgewotICAgICAgICAgICAg
ICAgIG9wID0gRU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ247Ci0gICAgICAgICAgICB9IGVsc2Ug
aWYgKCFsZWZ0LT5pc01hdHJpeCgpICYmICFyaWdodC0+aXNNYXRyaXgoKSkgewotICAgICAgICAg
ICAgICAgIGlmIChsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5pc1ZlY3RvcigpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIGxlYXZlIGFzIGNvbXBvbmVudCBwcm9kdWN0Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChsZWZ0LT5pc1ZlY3RvcigpIHx8IHJpZ2h0LT5pc1ZlY3RvcigpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghIGxlZnQtPmlzVmVjdG9yKCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIG9wID0gRU9w
VmVjdG9yVGltZXNTY2FsYXJBc3NpZ247Ci0gICAgICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5
cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwgZmFsc2Up
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgp
LCAiTWlzc2luZyBlbHNlcyIpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wQXNzaWduOgot
ICAgICAgICBjYXNlIEVPcEluaXRpYWxpemU6Ci0gICAgICAgIGNhc2UgRU9wQWRkOgotICAgICAg
ICBjYXNlIEVPcFN1YjoKLSAgICAgICAgY2FzZSBFT3BEaXY6Ci0gICAgICAgIGNhc2UgRU9wQWRk
QXNzaWduOgotICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjoKLSAgICAgICAgY2FzZSBFT3BEaXZB
c3NpZ246Ci0gICAgICAgICAgICBpZiAoKGxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzVmVj
dG9yKCkpIHx8Ci0gICAgICAgICAgICAgICAgKGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQtPmlz
TWF0cml4KCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHNl
dFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6
ZSwgbGVmdC0+aXNNYXRyaXgoKSB8fCByaWdodC0+aXNNYXRyaXgoKSkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BFcXVhbDoKLSAgICAgICAgY2FzZSBFT3BOb3RFcXVh
bDoKLSAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjoKLSAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhh
bjoKLSAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgotICAgICAgICBjYXNlIEVPcEdyZWF0
ZXJUaGFuRXF1YWw6Ci0gICAgICAgICAgICBpZiAoKGxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQt
PmlzVmVjdG9yKCkpIHx8Ci0gICAgICAgICAgICAgICAgKGxlZnQtPmlzVmVjdG9yKCkgJiYgcmln
aHQtPmlzTWF0cml4KCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIHNldFR5cGUoVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDb21wYXJlU3RydWN0KGNvbnN0
IFRUeXBlJiBsZWZ0Tm9kZVR5cGUsIENvbnN0YW50VW5pb24qIHJpZ2h0VW5pb25BcnJheSwgQ29u
c3RhbnRVbmlvbiogbGVmdFVuaW9uQXJyYXkpCi17Ci0gICAgY29uc3QgVEZpZWxkTGlzdCYgZmll
bGRzID0gbGVmdE5vZGVUeXBlLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKLQotICAgIHNpemVfdCBz
dHJ1Y3RTaXplID0gZmllbGRzLnNpemUoKTsKLSAgICBzaXplX3QgaW5kZXggPSAwOwotCi0gICAg
Zm9yIChzaXplX3QgaiA9IDA7IGogPCBzdHJ1Y3RTaXplOyBqKyspIHsKLSAgICAgICAgc2l6ZV90
IHNpemUgPSBmaWVsZHNbal0tPnR5cGUoKS0+Z2V0T2JqZWN0U2l6ZSgpOwotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAgaWYgKGZpZWxkc1tq
XS0+dHlwZSgpLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIUNvbXBhcmVTdHJ1Y3R1cmUoKihmaWVsZHNbal0tPnR5cGUoKSksICZyaWdodFVuaW9u
QXJyYXlbaW5kZXhdLCAmbGVmdFVuaW9uQXJyYXlbaW5kZXhdKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBp
ZiAobGVmdFVuaW9uQXJyYXlbaW5kZXhdICE9IHJpZ2h0VW5pb25BcnJheVtpbmRleF0pCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBpbmRleCsrOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIENvbXBhcmVTdHJ1Y3R1cmUoY29uc3QgVFR5cGUmIGxlZnROb2RlVHlwZSwgQ29uc3RhbnRV
bmlvbiogcmlnaHRVbmlvbkFycmF5LCBDb25zdGFudFVuaW9uKiBsZWZ0VW5pb25BcnJheSkKLXsK
LSAgICBpZiAobGVmdE5vZGVUeXBlLmlzQXJyYXkoKSkgewotICAgICAgICBUVHlwZSB0eXBlV2l0
aG91dEFycmF5bmVzcyA9IGxlZnROb2RlVHlwZTsKLSAgICAgICAgdHlwZVdpdGhvdXRBcnJheW5l
c3MuY2xlYXJBcnJheW5lc3MoKTsKLQotICAgICAgICBzaXplX3QgYXJyYXlTaXplID0gbGVmdE5v
ZGVUeXBlLmdldEFycmF5U2l6ZSgpOwotCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
YXJyYXlTaXplOyArK2kpIHsKLSAgICAgICAgICAgIHNpemVfdCBvZmZzZXQgPSB0eXBlV2l0aG91
dEFycmF5bmVzcy5nZXRPYmplY3RTaXplKCkgKiBpOwotICAgICAgICAgICAgaWYgKCFDb21wYXJl
U3RydWN0KHR5cGVXaXRob3V0QXJyYXluZXNzLCAmcmlnaHRVbmlvbkFycmF5W29mZnNldF0sICZs
ZWZ0VW5pb25BcnJheVtvZmZzZXRdKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJuIENvbXBhcmVTdHJ1Y3QobGVmdE5v
ZGVUeXBlLCByaWdodFVuaW9uQXJyYXksIGxlZnRVbmlvbkFycmF5KTsKLQotICAgIHJldHVybiB0
cnVlOwotfQotCi0vLwotLy8gVGhlIGZvbGQgZnVuY3Rpb25zIHNlZSBpZiBhbiBvcGVyYXRpb24g
b24gYSBjb25zdGFudCBjYW4gYmUgZG9uZSBpbiBwbGFjZSwKLS8vIHdpdGhvdXQgZ2VuZXJhdGlu
ZyBydW4tdGltZSBjb2RlLgotLy8KLS8vIFJldHVybnMgdGhlIG5vZGUgdG8ga2VlcCB1c2luZywg
d2hpY2ggbWF5IG9yIG1heSBub3QgYmUgdGhlIG5vZGUgcGFzc2VkIGluLgotLy8KLQotVEludGVy
bVR5cGVkKiBUSW50ZXJtQ29uc3RhbnRVbmlvbjo6Zm9sZChUT3BlcmF0b3Igb3AsIFRJbnRlcm1U
eXBlZCogY29uc3RhbnROb2RlLCBUSW5mb1NpbmsmIGluZm9TaW5rKQotewotICAgIENvbnN0YW50
VW5pb24gKnVuaW9uQXJyYXkgPSBnZXRVbmlvbkFycmF5UG9pbnRlcigpOwotICAgIHNpemVfdCBv
YmplY3RTaXplID0gZ2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsKLQotICAgIGlmIChjb25zdGFu
dE5vZGUpIHsgIC8vIGJpbmFyeSBvcGVyYXRpb25zCi0gICAgICAgIFRJbnRlcm1Db25zdGFudFVu
aW9uICpub2RlID0gY29uc3RhbnROb2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLSAgICAgICAg
Q29uc3RhbnRVbmlvbiAqcmlnaHRVbmlvbkFycmF5ID0gbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50
ZXIoKTsKLSAgICAgICAgVFR5cGUgcmV0dXJuVHlwZSA9IGdldFR5cGUoKTsKLQotICAgICAgICAv
LyBmb3IgYSBjYXNlIGxpa2UgZmxvYXQgZiA9IDEuMiArIHZlYzQoMiwzLDQsNSk7Ci0gICAgICAg
IGlmIChjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCkgPT0gMSAmJiBvYmpl
Y3RTaXplID4gMSkgewotICAgICAgICAgICAgcmlnaHRVbmlvbkFycmF5ID0gbmV3IENvbnN0YW50
VW5pb25bb2JqZWN0U2l6ZV07Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9i
amVjdFNpemU7ICsraSkKLSAgICAgICAgICAgICAgICByaWdodFVuaW9uQXJyYXlbaV0gPSAqbm9k
ZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKLSAgICAgICAgICAgIHJldHVyblR5cGUgPSBnZXRU
eXBlKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0T2Jq
ZWN0U2l6ZSgpID4gMSAmJiBvYmplY3RTaXplID09IDEpIHsKLSAgICAgICAgICAgIC8vIGZvciBh
IGNhc2UgbGlrZSBmbG9hdCBmID0gdmVjNCgyLDMsNCw1KSArIDEuMjsKLSAgICAgICAgICAgIHVu
aW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRP
YmplY3RTaXplKCldOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb25zdGFu
dE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICB1
bmlvbkFycmF5W2ldID0gKmdldFVuaW9uQXJyYXlQb2ludGVyKCk7Ci0gICAgICAgICAgICByZXR1
cm5UeXBlID0gbm9kZS0+Z2V0VHlwZSgpOwotICAgICAgICAgICAgb2JqZWN0U2l6ZSA9IGNvbnN0
YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsKLSAgICAgICAgfQotCi0gICAgICAg
IENvbnN0YW50VW5pb24qIHRlbXBDb25zdEFycmF5ID0gMDsKLSAgICAgICAgVEludGVybUNvbnN0
YW50VW5pb24gKnRlbXBOb2RlOwotCi0gICAgICAgIGJvb2wgYm9vbE5vZGVGbGFnID0gZmFsc2U7
Ci0gICAgICAgIHN3aXRjaChvcCkgewotICAgICAgICAgICAgY2FzZSBFT3BBZGQ6Ci0gICAgICAg
ICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsK
LSAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKLSAgICAgICAgICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCi0gICAgICAgICAgICAg
ICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gKyByaWdodFVuaW9u
QXJyYXlbaV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBFT3BTdWI6Ci0gICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBu
ZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAgICAgICAgICB7Ly8gc3VwcG9y
dCBNU1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBv
YmplY3RTaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtp
XSA9IHVuaW9uQXJyYXlbaV0gLSByaWdodFVuaW9uQXJyYXlbaV07Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIEVPcE11bDoKLSAg
ICAgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXI6Ci0gICAgICAgICAgICBjYXNlIEVP
cE1hdHJpeFRpbWVzU2NhbGFyOgotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3
IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBvcnQg
TVNWQysrNi4wCi0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2Jq
ZWN0U2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0g
PSB1bmlvbkFycmF5W2ldICogcmlnaHRVbmlvbkFycmF5W2ldOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNN
YXRyaXg6Ci0gICAgICAgICAgICAgICAgaWYgKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBF
YnRGbG9hdCB8fCBub2RlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRGbG9hdCkgewotICAgICAgICAg
ICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdl
dExpbmUoKSwgIkNvbnN0YW50IEZvbGRpbmcgY2Fubm90IGJlIGRvbmUgZm9yIG1hdHJpeCBtdWx0
aXBseSIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCi0gICAgICAgICAgICAgICAg
ICAgIGludCBzaXplID0gZ2V0Tm9taW5hbFNpemUoKTsKLSAgICAgICAgICAgICAgICAgICAgdGVt
cENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltzaXplKnNpemVdOwotICAgICAgICAgICAg
ICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBzaXplOyByb3crKykgewotICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1uIDwgc2l6ZTsgY29sdW1u
KyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtzaXplICog
Y29sdW1uICsgcm93XS5zZXRGQ29uc3QoMC4wZik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbc2l6ZSAqIGNvbHVtbiArIHJvd10uc2V0RkNvbnN0
KHRlbXBDb25zdEFycmF5W3NpemUgKiBjb2x1bW4gKyByb3ddLmdldEZDb25zdCgpICsgdW5pb25B
cnJheVtpICogc2l6ZSArIHJvd10uZ2V0RkNvbnN0KCkgKiAocmlnaHRVbmlvbkFycmF5W2NvbHVt
biAqIHNpemUgKyBpXS5nZXRGQ29uc3QoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
RU9wRGl2OgotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bb2JqZWN0U2l6ZV07Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCi0g
ICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsr
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRCYXNpY1R5
cGUoKSkgewotICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKLSAgICAgICAgICAgICAgICBpZiAo
cmlnaHRVbmlvbkFycmF5W2ldID09IDAuMGYpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5mb1Np
bmsuaW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCBnZXRMaW5lKCksICJEaXZpZGUgYnkgemVy
byBlcnJvciBkdXJpbmcgY29uc3RhbnQgZm9sZGluZyIpOwotICAgICAgICAgICAgICAgICAgICB0
ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QodW5pb25BcnJheVtpXS5nZXRGQ29uc3QoKSA8IDAg
PyAtRkxUX01BWCA6IEZMVF9NQVgpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QodW5pb25BcnJheVtpXS5nZXRG
Q29uc3QoKSAvIHJpZ2h0VW5pb25BcnJheVtpXS5nZXRGQ29uc3QoKSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgRWJ0SW50OgotICAgICAgICAgICAgICAgIGlm
IChyaWdodFVuaW9uQXJyYXlbaV0gPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBpbmZvU2lu
ay5pbmZvLm1lc3NhZ2UoRVByZWZpeFdhcm5pbmcsIGdldExpbmUoKSwgIkRpdmlkZSBieSB6ZXJv
IGVycm9yIGR1cmluZyBjb25zdGFudCBmb2xkaW5nIik7Ci0gICAgICAgICAgICAgICAgICAgIHRl
bXBDb25zdEFycmF5W2ldLnNldElDb25zdChJTlRfTUFYKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0SUNvbnN0KHVuaW9u
QXJyYXlbaV0uZ2V0SUNvbnN0KCkgLyByaWdodFVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUo
KSwgIkNvbnN0YW50IGZvbGRpbmcgY2Fubm90IGJlIGRvbmUgZm9yIFwiL1wiIik7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNWZWN0b3I6Ci0gICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmdldEJhc2ljVHlwZSgpICE9IEVidEZsb2F0KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgp
LCAiQ29uc3RhbnQgRm9sZGluZyBjYW5ub3QgYmUgZG9uZSBmb3IgbWF0cml4IHRpbWVzIHZlY3Rv
ciIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltnZXROb21p
bmFsU2l6ZSgpXTsKLQotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAg
ICAgICAgICAgICAgICAgICBmb3IgKGludCBzaXplID0gZ2V0Tm9taW5hbFNpemUoKSwgaSA9IDA7
IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5
W2ldLnNldEZDb25zdCgwLjBmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGog
PSAwOyBqIDwgc2l6ZTsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENv
bnN0QXJyYXlbaV0uc2V0RkNvbnN0KHRlbXBDb25zdEFycmF5W2ldLmdldEZDb25zdCgpICsgKCh1
bmlvbkFycmF5W2oqc2l6ZSArIGldLmdldEZDb25zdCgpKSAqIHJpZ2h0VW5pb25BcnJheVtqXS5n
ZXRGQ29uc3QoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGVtcE5vZGUgPSBu
ZXcgVEludGVybUNvbnN0YW50VW5pb24odGVtcENvbnN0QXJyYXksIG5vZGUtPmdldFR5cGUoKSk7
Ci0gICAgICAgICAgICAgICAgdGVtcE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKLQotICAgICAg
ICAgICAgICAgIHJldHVybiB0ZW1wTm9kZTsKLQotICAgICAgICAgICAgY2FzZSBFT3BWZWN0b3JU
aW1lc01hdHJpeDoKLSAgICAgICAgICAgICAgICBpZiAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgp
ICE9IEVidEZsb2F0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2Fn
ZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiQ29uc3RhbnQgRm9sZGluZyBjYW5u
b3QgYmUgZG9uZSBmb3IgdmVjdG9yIHRpbWVzIG1hdHJpeCIpOwotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW2dldE5vbWluYWxTaXplKCldOwotICAgICAgICAg
ICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAgICAgICBmb3IgKGlu
dCBzaXplID0gZ2V0Tm9taW5hbFNpemUoKSwgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCgwLjBmKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc2l6ZTsgaisrKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KHRl
bXBDb25zdEFycmF5W2ldLmdldEZDb25zdCgpICsgKCh1bmlvbkFycmF5W2pdLmdldEZDb25zdCgp
KSAqIHJpZ2h0VW5pb25BcnJheVtpKnNpemUgKyBqXS5nZXRGQ29uc3QoKSkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxB
bmQ6IC8vIHRoaXMgY29kZSBpcyB3cml0dGVuIGZvciBwb3NzaWJsZSBmdXR1cmUgdXNlLCB3aWxs
IG5vdCBnZXQgZXhlY3V0ZWQgY3VycmVudGx5Ci0gICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAgICAgICAgICB7Ly8g
c3VwcG9ydCBNU1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBvYmplY3RTaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RB
cnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gJiYgcmlnaHRVbmlvbkFycmF5W2ldOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBFT3BM
b2dpY2FsT3I6IC8vIHRoaXMgY29kZSBpcyB3cml0dGVuIGZvciBwb3NzaWJsZSBmdXR1cmUgdXNl
LCB3aWxsIG5vdCBnZXQgZXhlY3V0ZWQgY3VycmVudGx5Ci0gICAgICAgICAgICAgICAgdGVtcENv
bnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAgICAgICAg
ICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1w
Q29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gfHwgcmlnaHRVbmlvbkFycmF5W2ldOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2Fz
ZSBFT3BMb2dpY2FsWG9yOgotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bb2JqZWN0U2l6ZV07Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNW
QysrNi4wCi0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0
U2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkuZ2V0
QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogdGVtcENvbnN0QXJyYXlb
aV0uc2V0QkNvbnN0KCh1bmlvbkFycmF5W2ldID09IHJpZ2h0VW5pb25BcnJheVtpXSkgPyBmYWxz
ZSA6IHRydWUpOyBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAi
RGVmYXVsdCBtaXNzaW5nIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgRU9wTGVzc1Ro
YW46Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KG9iamVjdFNpemUgPT0gMSk7Ci0gICAgICAgICAg
ICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KCp1bmlvbkFycmF5IDwgKnJpZ2h0VW5pb25B
cnJheSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IFRUeXBlKEVidEJvb2wsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBFT3BHcmVhdGVyVGhhbjoKLSAgICAgICAgICAgICAgICBhc3NlcnQob2JqZWN0U2l6ZSA9
PSAxKTsKLSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
WzFdOwotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoKnVuaW9uQXJy
YXkgPiAqcmlnaHRVbmlvbkFycmF5KTsKLSAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gVFR5
cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6Ci0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBhc3NlcnQob2JqZWN0U2l6ZSA9PSAxKTsKLSAgICAgICAg
ICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiBjb25zdGFudDsKLSAgICAgICAgICAgICAgICAgICAg
Y29uc3RhbnQuc2V0QkNvbnN0KCp1bmlvbkFycmF5ID4gKnJpZ2h0VW5pb25BcnJheSk7Ci0gICAg
ICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0g
ICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoIWNvbnN0YW50Lmdl
dEJDb25zdCgpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IFRUeXBlKEVidEJv
b2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhc3NlcnQob2JqZWN0U2l6
ZSA9PSAxKTsKLSAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiBjb25zdGFudDsKLSAg
ICAgICAgICAgICAgICAgICAgY29uc3RhbnQuc2V0QkNvbnN0KCp1bmlvbkFycmF5IDwgKnJpZ2h0
VW5pb25BcnJheSk7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRC
Q29uc3QoIWNvbnN0YW50LmdldEJDb25zdCgpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
VHlwZSA9IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNhc2Ug
RU9wRXF1YWw6Ci0gICAgICAgICAgICAgICAgaWYgKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSA9
PSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFDb21wYXJlU3RydWN0dXJl
KG5vZGUtPmdldFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSwgdW5pb25BcnJh
eSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sTm9kZUZsYWcgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgb2JqZWN0U2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5p
b25BcnJheVtpXSAhPSByaWdodFVuaW9uQXJyYXlbaV0pIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sTm9kZUZsYWcgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOyAgLy8gYnJlYWsgb3V0IG9mIGZvciBsb29wCi0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAg
ICAgICAgIGlmICghYm9vbE5vZGVGbGFnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBDb25z
dEFycmF5LT5zZXRCQ29uc3QodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0
KGZhbHNlKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0ZW1wTm9kZSA9
IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgVFR5cGUoRWJ0Qm9vbCwg
RWJwVW5kZWZpbmVkLCBFdnFDb25zdCkpOwotICAgICAgICAgICAgICAgIHRlbXBOb2RlLT5zZXRM
aW5lKGdldExpbmUoKSk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGVtcE5vZGU7Ci0KLSAg
ICAgICAgICAgIGNhc2UgRU9wTm90RXF1YWw6Ci0gICAgICAgICAgICAgICAgaWYgKGdldFR5cGUo
KS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KENvbXBhcmVTdHJ1Y3R1cmUobm9kZS0+Z2V0VHlwZSgpLCBub2RlLT5nZXRVbmlvbkFycmF5UG9p
bnRlcigpLCB1bmlvbkFycmF5KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxh
ZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh1bmlvbkFycmF5W2ldID09IHJpZ2h0VW5pb25BcnJheVtpXSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7ICAvLyBicmVhayBvdXQgb2YgZm9yIGxvb3AKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bMV07Ci0gICAgICAgICAgICAgICAgaWYgKCFib29sTm9kZUZsYWcpIHsKLSAgICAgICAgICAg
ICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCh0cnVlKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBDb25z
dEFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5
LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSk7Ci0gICAgICAgICAgICAg
ICAgdGVtcE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKLQotICAgICAgICAgICAgICAgIHJldHVy
biB0ZW1wTm9kZTsKLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpbmZv
U2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIkludmFs
aWQgb3BlcmF0b3IgZm9yIGNvbnN0YW50IGZvbGRpbmciKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgfQotICAgICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRV
bmlvbih0ZW1wQ29uc3RBcnJheSwgcmV0dXJuVHlwZSk7Ci0gICAgICAgIHRlbXBOb2RlLT5zZXRM
aW5lKGdldExpbmUoKSk7Ci0KLSAgICAgICAgcmV0dXJuIHRlbXBOb2RlOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIERvIHVuYXJ5IG9wZXJhdGlvbnMKLSAgICAgICAgLy8K
LSAgICAgICAgVEludGVybUNvbnN0YW50VW5pb24gKm5ld05vZGUgPSAwOwotICAgICAgICBDb25z
dGFudFVuaW9uKiB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVd
OwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykgewotICAg
ICAgICAgICAgc3dpdGNoKG9wKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZToK
LSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IHRlbXBDb25zdEFycmF5W2ld
LnNldEZDb25zdCgtdW5pb25BcnJheVtpXS5nZXRGQ29uc3QoKSk7IGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0SUNvbnN0
KC11bmlvbkFycmF5W2ldLmdldElDb25zdCgpKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8u
bWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiVW5hcnkgb3BlcmF0aW9u
IG5vdCBmb2xkZWQgaW50byBjb25zdGFudCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDogLy8gdGhpcyBjb2RlIGlz
IHdyaXR0ZW4gZm9yIHBvc3NpYmxlIGZ1dHVyZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBj
dXJyZW50bHkKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkuZ2V0QmFzaWNU
eXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogIHRlbXBDb25z
dEFycmF5W2ldLnNldEJDb25zdCghdW5pb25BcnJheVtpXS5nZXRCQ29uc3QoKSk7IGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUo
KSwgIlVuYXJ5IG9wZXJhdGlvbiBub3QgZm9sZGVkIGludG8gY29uc3RhbnQiKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBuZXdOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCBnZXRU
eXBlKCkpOwotICAgICAgICBuZXdOb2RlLT5zZXRMaW5lKGdldExpbmUoKSk7Ci0gICAgICAgIHJl
dHVybiBuZXdOb2RlOwotICAgIH0KLX0KLQotVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjpw
cm9tb3RlQ29uc3RhbnRVbmlvbihUQmFzaWNUeXBlIHByb21vdGVUbywgVEludGVybUNvbnN0YW50
VW5pb24qIG5vZGUpCi17Ci0gICAgc2l6ZV90IHNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0T2Jq
ZWN0U2l6ZSgpOwotCi0gICAgQ29uc3RhbnRVbmlvbiAqbGVmdFVuaW9uQXJyYXkgPSBuZXcgQ29u
c3RhbnRVbmlvbltzaXplXTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsr
KSB7Ci0gICAgICAgIGludCBpbmRleCA9IHN0YXRpY19jYXN0PGludD4oaSk7Ci0gICAgICAgIHN3
aXRjaCAocHJvbW90ZVRvKSB7Ci0gICAgICAgICAgICBjYXNlIEVidEZsb2F0OgotICAgICAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgRWJ0SW50OgotICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVu
aW9uQXJyYXlbaV0uc2V0RkNvbnN0KHN0YXRpY19jYXN0PGZsb2F0Pihub2RlLT5nZXRJQ29uc3Qo
aW5kZXgpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBFYnRCb29sOgotICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJy
YXlbaV0uc2V0RkNvbnN0KHN0YXRpY19jYXN0PGZsb2F0Pihub2RlLT5nZXRCQ29uc3QoaW5kZXgp
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBFYnRGbG9hdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ld
LnNldEZDb25zdChzdGF0aWNfY2FzdDxmbG9hdD4obm9kZS0+Z2V0RkNvbnN0KGluZGV4KSkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZp
eEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIkNhbm5vdCBwcm9tb3RlIik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVidEludDoKLSAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgewotICAgICAgICAgICAg
ICAgICAgICBjYXNlIEVidEludDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFy
cmF5W2ldLnNldElDb25zdChzdGF0aWNfY2FzdDxpbnQ+KG5vZGUtPmdldElDb25zdChpbmRleCkp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBj
YXNlIEVidEJvb2w6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5z
ZXRJQ29uc3Qoc3RhdGljX2Nhc3Q8aW50Pihub2RlLT5nZXRCQ29uc3QoaW5kZXgpKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRG
bG9hdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldElDb25z
dChzdGF0aWNfY2FzdDxpbnQ+KG5vZGUtPmdldEZDb25zdChpbmRleCkpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVy
cm9yLCBub2RlLT5nZXRMaW5lKCksICJDYW5ub3QgcHJvbW90ZSIpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBFYnRCb29sOgotICAgICAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNh
c2UgRWJ0SW50OgotICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0
QkNvbnN0KG5vZGUtPmdldElDb25zdChpbmRleCkgIT0gMCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOgotICAgICAgICAg
ICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0QkNvbnN0KG5vZGUtPmdldEJDb25z
dChpbmRleCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgRWJ0RmxvYXQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25B
cnJheVtpXS5zZXRCQ29uc3Qobm9kZS0+Z2V0RkNvbnN0KGluZGV4KSAhPSAwLjBmKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRl
cm5hbEVycm9yLCBub2RlLT5nZXRMaW5lKCksICJDYW5ub3QgcHJvbW90ZSIpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGluZm9T
aW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAi
SW5jb3JyZWN0IGRhdGEgdHlwZSBmb3VuZCIpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwot
ICAgICAgICB9Ci0KLSAgICB9Ci0KLSAgICBjb25zdCBUVHlwZSYgdCA9IG5vZGUtPmdldFR5cGUo
KTsKLQotICAgIHJldHVybiBhZGRDb25zdGFudFVuaW9uKGxlZnRVbmlvbkFycmF5LCBUVHlwZShw
cm9tb3RlVG8sIHQuZ2V0UHJlY2lzaW9uKCksIHQuZ2V0UXVhbGlmaWVyKCksIHQuZ2V0Tm9taW5h
bFNpemUoKSwgdC5pc01hdHJpeCgpLCB0LmlzQXJyYXkoKSksIG5vZGUtPmdldExpbmUoKSk7Ci19
Ci0KLS8vIHN0YXRpYwotVFN0cmluZyBUSW50ZXJtVHJhdmVyc2VyOjpoYXNoKGNvbnN0IFRTdHJp
bmcmIG5hbWUsIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uKQotewotICAgIGlmIChoYXNo
RnVuY3Rpb24gPT0gTlVMTCB8fCBuYW1lLmVtcHR5KCkpCi0gICAgICAgIHJldHVybiBuYW1lOwot
ICAgIGtocm9ub3NfdWludDY0X3QgbnVtYmVyID0gKCpoYXNoRnVuY3Rpb24pKG5hbWUuY19zdHIo
KSwgbmFtZS5sZW5ndGgoKSk7Ci0gICAgVFN0cmluZ1N0cmVhbSBzdHJlYW07Ci0gICAgc3RyZWFt
IDw8IEhBU0hFRF9OQU1FX1BSRUZJWCA8PCBzdGQ6OmhleCA8PCBudW1iZXI7Ci0gICAgVFN0cmlu
ZyBoYXNoZWROYW1lID0gc3RyZWFtLnN0cigpOwotICAgIHJldHVybiBoYXNoZWROYW1lOwotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL01NYXAuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9NTWFwLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGEzMDg2NzE1MTRjYzYzZThlNzBhMDNlMzg2OGI1Nzk1MWI4NWU5
ODcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL01NYXAuaAorKysgL2Rldi9udWxsCkBAIC0x
LDU2ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgX01NQVBfSU5DTFVERURf
Ci0jZGVmaW5lIF9NTUFQX0lOQ0xVREVEXwotCi0vLwotLy8gRW5jYXBzdWxhdGUgbWVtb3J5IG1h
cHBlZCBmaWxlcwotLy8KLQotY2xhc3MgVE1NYXAgewotcHVibGljOgotICAgIFRNTWFwKGNvbnN0
IGNoYXIqIGZpbGVOYW1lKSA6IAotICAgICAgICBmU2l6ZSgtMSksIC8vIC0xIGlzIHRoZSBlcnJv
ciB2YWx1ZSByZXR1cm5lZCBieSBHZXRGaWxlU2l6ZSgpCi0gICAgICAgIGZwKE5VTEwpLAotICAg
ICAgICBmQnVmZigwKSAgIC8vIDAgaXMgdGhlIGVycm9yIHZhbHVlIHJldHVybmVkIGJ5IE1hcFZp
ZXdPZkZpbGUoKQotICAgIHsKLSAgICAgICAgaWYgKChmcCA9IGZvcGVuKGZpbGVOYW1lLCAiciIp
KSA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjaGFyIGMgPSBnZXRjKGZw
KTsKLSAgICAgICAgZlNpemUgPSAwOwotICAgICAgICB3aGlsZSAoYyAhPSBFT0YpIHsKLSAgICAg
ICAgICAgIGZTaXplKys7Ci0gICAgICAgICAgICBjID0gZ2V0YyhmcCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKGMgPT0gRU9GKQotICAgICAgICAgICAgZlNpemUrKzsKLSAgICAgICAgcmV3aW5k
KGZwKTsKLSAgICAgICAgZkJ1ZmYgPSAoY2hhciopbWFsbG9jKHNpemVvZihjaGFyKSAqIGZTaXpl
KTsKLSAgICAgICAgaW50IGNvdW50ID0gMDsKLSAgICAgICAgYyA9IGdldGMoZnApOwotICAgICAg
ICB3aGlsZSAoYyAhPSBFT0YpIHsKLSAgICAgICAgICAgIGZCdWZmW2NvdW50KytdID0gYzsKLSAg
ICAgICAgICAgIGMgPSBnZXRjKGZwKTsKLSAgICAgICAgfQotICAgICAgICBmQnVmZltjb3VudCsr
XSA9IGM7Ci0gICAgfQotCi0gICAgY2hhciogZ2V0RGF0YSgpIHsgcmV0dXJuIGZCdWZmOyB9Ci0g
ICAgaW50ICAgZ2V0U2l6ZSgpIHsgcmV0dXJuIGZTaXplOyB9Ci0KLSAgICB+VE1NYXAoKSB7Ci0g
ICAgICAgIGlmIChmcCAhPSBOVUxMKQotICAgICAgICAgICAgZmNsb3NlKGZwKTsKLSAgICB9Ci0g
ICAgCi1wcml2YXRlOgotICAgIGludCAgICAgICAgICAgICBmU2l6ZTsgICAgICAvLyBzaXplIG9m
IGZpbGUgdG8gbWFwIGluCi0gICAgRklMRSAqZnA7Ci0gICAgY2hhciogICAgICAgICAgIGZCdWZm
OyAgICAgIC8vIHRoZSBhY3R1YWwgZGF0YTsKLX07Ci0KLSNlbmRpZiAvLyBfTU1BUF9JTkNMVURF
RF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9NYXBM
b25nVmFyaWFibGVOYW1lcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwNzdlZjVkNzJlYjllN2ZmMmQ0YTk2YjRkNWM2OWJlMTg2ODEwYjc4Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwxMTUgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0v
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL01h
cExvbmdWYXJpYWJsZU5hbWVzLmgiCi0KLW5hbWVzcGFjZSB7Ci0KLVRTdHJpbmcgbWFwTG9uZ05h
bWUoc2l6ZV90IGlkLCBjb25zdCBUU3RyaW5nJiBuYW1lLCBib29sIGlzR2xvYmFsKQotewotICAg
IEFTU0VSVChuYW1lLnNpemUoKSA+IE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFKTsKLSAg
ICBUU3RyaW5nU3RyZWFtIHN0cmVhbTsKLSAgICBzdHJlYW0gPDwgIndlYmdsXyI7Ci0gICAgaWYg
KGlzR2xvYmFsKQotICAgICAgICBzdHJlYW0gPDwgImciOwotICAgIHN0cmVhbSA8PCBpZDsKLSAg
ICBpZiAobmFtZVswXSAhPSAnXycpCi0gICAgICAgIHN0cmVhbSA8PCAiXyI7Ci0gICAgc3RyZWFt
IDw8IG5hbWUuc3Vic3RyKDAsIE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFIC0gc3RyZWFt
LnN0cigpLnNpemUoKSk7Ci0gICAgcmV0dXJuIHN0cmVhbS5zdHIoKTsKLX0KLQotTG9uZ05hbWVN
YXAqIGdMb25nTmFtZU1hcEluc3RhbmNlID0gTlVMTDsKLQotfSAgLy8gYW5vbnltb3VzIG5hbWVz
cGFjZQotCi1Mb25nTmFtZU1hcDo6TG9uZ05hbWVNYXAoKQotICAgIDogcmVmQ291bnQoMCkKLXsK
LX0KLQotTG9uZ05hbWVNYXA6On5Mb25nTmFtZU1hcCgpCi17Ci19Ci0KLS8vIHN0YXRpYwotTG9u
Z05hbWVNYXAqIExvbmdOYW1lTWFwOjpHZXRJbnN0YW5jZSgpCi17Ci0gICAgaWYgKGdMb25nTmFt
ZU1hcEluc3RhbmNlID09IE5VTEwpCi0gICAgICAgIGdMb25nTmFtZU1hcEluc3RhbmNlID0gbmV3
IExvbmdOYW1lTWFwOwotICAgIGdMb25nTmFtZU1hcEluc3RhbmNlLT5yZWZDb3VudCsrOwotICAg
IHJldHVybiBnTG9uZ05hbWVNYXBJbnN0YW5jZTsKLX0KLQotdm9pZCBMb25nTmFtZU1hcDo6UmVs
ZWFzZSgpCi17Ci0gICAgQVNTRVJUKGdMb25nTmFtZU1hcEluc3RhbmNlID09IHRoaXMpOwotICAg
IEFTU0VSVChyZWZDb3VudCA+IDApOwotICAgIHJlZkNvdW50LS07Ci0gICAgaWYgKHJlZkNvdW50
ID09IDApIHsKLSAgICAgICAgZGVsZXRlIGdMb25nTmFtZU1hcEluc3RhbmNlOwotICAgICAgICBn
TG9uZ05hbWVNYXBJbnN0YW5jZSA9IE5VTEw7Ci0gICAgfQotfQotCi1jb25zdCBjaGFyKiBMb25n
TmFtZU1hcDo6RmluZChjb25zdCBjaGFyKiBvcmlnaW5hbE5hbWUpIGNvbnN0Ci17Ci0gICAgc3Rk
OjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtTG9u
Z05hbWVNYXAuZmluZCgKLSAgICAgICAgb3JpZ2luYWxOYW1lKTsKLSAgICBpZiAoaXQgIT0gbUxv
bmdOYW1lTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gKCppdCkuc2Vjb25kLmNfc3RyKCk7Ci0g
ICAgcmV0dXJuIE5VTEw7Ci19Ci0KLXZvaWQgTG9uZ05hbWVNYXA6Okluc2VydChjb25zdCBjaGFy
KiBvcmlnaW5hbE5hbWUsIGNvbnN0IGNoYXIqIG1hcHBlZE5hbWUpCi17Ci0gICAgbUxvbmdOYW1l
TWFwLmluc2VydChzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+Ojp2YWx1ZV90eXBl
KAotICAgICAgICBvcmlnaW5hbE5hbWUsIG1hcHBlZE5hbWUpKTsKLX0KLQotc2l6ZV90IExvbmdO
YW1lTWFwOjpTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUxvbmdOYW1lTWFwLnNpemUoKTsK
LX0KLQotTWFwTG9uZ1ZhcmlhYmxlTmFtZXM6Ok1hcExvbmdWYXJpYWJsZU5hbWVzKExvbmdOYW1l
TWFwKiBnbG9iYWxNYXApCi17Ci0gICAgQVNTRVJUKGdsb2JhbE1hcCk7Ci0gICAgbUdsb2JhbE1h
cCA9IGdsb2JhbE1hcDsKLX0KLQotdm9pZCBNYXBMb25nVmFyaWFibGVOYW1lczo6dmlzaXRTeW1i
b2woVEludGVybVN5bWJvbCogc3ltYm9sKQotewotICAgIEFTU0VSVChzeW1ib2wgIT0gTlVMTCk7
Ci0gICAgaWYgKHN5bWJvbC0+Z2V0U3ltYm9sKCkuc2l6ZSgpID4gTUFYX1NIT1JURU5FRF9JREVO
VElGSUVSX1NJWkUpIHsKLSAgICAgICAgc3dpdGNoIChzeW1ib2wtPmdldFF1YWxpZmllcigpKSB7
Ci0gICAgICAgICAgY2FzZSBFdnFWYXJ5aW5nSW46Ci0gICAgICAgICAgY2FzZSBFdnFWYXJ5aW5n
T3V0OgotICAgICAgICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWluZ0luOgotICAgICAgICAgIGNh
c2UgRXZxSW52YXJpYW50VmFyeWluZ091dDoKLSAgICAgICAgICBjYXNlIEV2cVVuaWZvcm06Ci0g
ICAgICAgICAgICBzeW1ib2wtPnNldFN5bWJvbCgKLSAgICAgICAgICAgICAgICBtYXBHbG9iYWxM
b25nTmFtZShzeW1ib2wtPmdldFN5bWJvbCgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgc3ltYm9sLT5zZXRTeW1ib2woCi0gICAgICAgICAg
ICAgICAgbWFwTG9uZ05hbWUoc3ltYm9sLT5nZXRJZCgpLCBzeW1ib2wtPmdldFN5bWJvbCgpLCBm
YWxzZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH07Ci0gICAgfQotfQotCi1UU3Ry
aW5nIE1hcExvbmdWYXJpYWJsZU5hbWVzOjptYXBHbG9iYWxMb25nTmFtZShjb25zdCBUU3RyaW5n
JiBuYW1lKQotewotICAgIEFTU0VSVChtR2xvYmFsTWFwKTsKLSAgICBjb25zdCBjaGFyKiBtYXBw
ZWROYW1lID0gbUdsb2JhbE1hcC0+RmluZChuYW1lLmNfc3RyKCkpOwotICAgIGlmIChtYXBwZWRO
YW1lICE9IE5VTEwpCi0gICAgICAgIHJldHVybiBtYXBwZWROYW1lOwotICAgIHNpemVfdCBpZCA9
IG1HbG9iYWxNYXAtPlNpemUoKTsKLSAgICBUU3RyaW5nIHJ0ID0gbWFwTG9uZ05hbWUoaWQsIG5h
bWUsIHRydWUpOwotICAgIG1HbG9iYWxNYXAtPkluc2VydChuYW1lLmNfc3RyKCksIHJ0LmNfc3Ry
KCkpOwotICAgIHJldHVybiBydDsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGZkMmZmODI2MTNjMThlMDQ3N2YyNGE0ZjY2YjBkMzdiYTYxMjEx
OWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVm
IENPTVBJTEVSX01BUF9MT05HX1ZBUklBQkxFX05BTUVTX0hfCi0jZGVmaW5lIENPTVBJTEVSX01B
UF9MT05HX1ZBUklBQkxFX05BTUVTX0hfCi0KLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcu
aCIKLQotI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotI2luY2x1ZGUgImNvbXBp
bGVyL1ZhcmlhYmxlSW5mby5oIgotCi0vLyBUaGlzIHNpemUgZG9lcyBub3QgaW5jbHVkZSAnXDAn
IGluIHRoZSBlbmQuCi0jZGVmaW5lIE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFIDMyCi0K
LS8vIFRoaXMgaXMgYSByZWYtY291bnRlZCBzaW5nbGV0b24uIEdldEluc3RhbmNlKCkgcmV0dXJu
cyBhIHBvaW50ZXIgdG8gdGhlCi0vLyBzaW5nbGV0b24sIGFuZCBhZnRlciB1c2UsIGNhbGwgUmVs
ZWFzZSgpLiBHZXRJbnN0YW5jZSgpIGFuZCBSZWxlYXNlKCkgc2hvdWxkCi0vLyBiZSBwYWlyZWQu
Ci1jbGFzcyBMb25nTmFtZU1hcCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIExvbmdOYW1lTWFwKiBH
ZXRJbnN0YW5jZSgpOwotICAgIHZvaWQgUmVsZWFzZSgpOwotCi0gICAgLy8gUmV0dXJuIHRoZSBt
YXBwZWQgbmFtZSBpZiA8b3JpZ2luYWxOYW1lLCBtYXBwZWROYW1lPiBpcyBpbiB0aGUgbWFwOwot
ICAgIC8vIG90aGVyd2lzZSwgcmV0dXJuIE5VTEwuCi0gICAgY29uc3QgY2hhciogRmluZChjb25z
dCBjaGFyKiBvcmlnaW5hbE5hbWUpIGNvbnN0OwotCi0gICAgLy8gSW5zZXJ0IGEgcGFpciBpbnRv
IHRoZSBtYXAuCi0gICAgdm9pZCBJbnNlcnQoY29uc3QgY2hhciogb3JpZ2luYWxOYW1lLCBjb25z
dCBjaGFyKiBtYXBwZWROYW1lKTsKLQotICAgIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGVudHJp
ZXMgaW4gdGhlIG1hcC4KLSAgICBzaXplX3QgU2l6ZSgpIGNvbnN0OwotCi1wcml2YXRlOgotICAg
IExvbmdOYW1lTWFwKCk7Ci0gICAgfkxvbmdOYW1lTWFwKCk7Ci0KLSAgICBzaXplX3QgcmVmQ291
bnQ7Ci0gICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBtTG9uZ05hbWVNYXA7
Ci19OwotCi0vLyBUcmF2ZXJzZXMgaW50ZXJtZWRpYXRlIHRyZWUgdG8gbWFwIGF0dHJpYnV0ZXMg
YW5kIHVuaWZvcm1zIG5hbWVzIHRoYXQgYXJlCi0vLyBsb25nZXIgdGhhbiBNQVhfU0hPUlRFTkVE
X0lERU5USUZJRVJfU0laRSB0byBNQVhfU0hPUlRFTkVEX0lERU5USUZJRVJfU0laRS4KLWNsYXNz
IE1hcExvbmdWYXJpYWJsZU5hbWVzIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewotcHVibGlj
OgotICAgIE1hcExvbmdWYXJpYWJsZU5hbWVzKExvbmdOYW1lTWFwKiBnbG9iYWxNYXApOwotCi0g
ICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKLQotcHJpdmF0ZToK
LSAgICBUU3RyaW5nIG1hcEdsb2JhbExvbmdOYW1lKGNvbnN0IFRTdHJpbmcmIG5hbWUpOwotCi0g
ICAgTG9uZ05hbWVNYXAqIG1HbG9iYWxNYXA7Ci19OwotCi0jZW5kaWYgIC8vIENPTVBJTEVSX01B
UF9MT05HX1ZBUklBQkxFX05BTUVTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvTm9kZVNlYXJjaC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL05vZGVTZWFyY2guaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MjdlNDcxZGJiYzQ5ZTFkZDkyMzUyMGRmMjQwM2Q2OTdjYmE3MjcxYy4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvTm9kZVNlYXJjaC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotLy8KLS8vIE5vZGVTZWFyY2guaDogVXRpbGl0aWVzIGZvciBzZWFyY2hp
bmcgdHJhbnNsYXRvciBub2RlIGdyYXBocwotLy8KLQotI2lmbmRlZiBUUkFOU0xBVE9SX05PREVT
RUFSQ0hfSF8KLSNkZWZpbmUgVFJBTlNMQVRPUl9OT0RFU0VBUkNIX0hfCi0KLW5hbWVzcGFjZSBz
aAotewotCi10ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgotY2xhc3MgTm9kZVNlYXJjaFRyYXZlcnNl
ciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCi17Ci0gIHB1YmxpYzoKLSAgICBOb2RlU2VhcmNo
VHJhdmVyc2VyKCkKLSAgICAgICAgOiBtRm91bmQoZmFsc2UpCi0gICAge30KLQotICAgIGJvb2wg
Zm91bmQoKSBjb25zdCB7IHJldHVybiBtRm91bmQ7IH0KLQotICAgIHN0YXRpYyBib29sIHNlYXJj
aChUSW50ZXJtTm9kZSAqbm9kZSkKLSAgICB7Ci0gICAgICAgIFBhcmVudCBzZWFyY2hUcmF2ZXJz
ZXI7Ci0gICAgICAgIG5vZGUtPnRyYXZlcnNlKCZzZWFyY2hUcmF2ZXJzZXIpOwotICAgICAgICBy
ZXR1cm4gc2VhcmNoVHJhdmVyc2VyLmZvdW5kKCk7Ci0gICAgfQotCi0gIHByb3RlY3RlZDoKLSAg
ICBib29sIG1Gb3VuZDsKLX07Ci0KLWNsYXNzIEZpbmREaXNjYXJkIDogcHVibGljIE5vZGVTZWFy
Y2hUcmF2ZXJzZXI8RmluZERpc2NhcmQ+Ci17Ci0gIHB1YmxpYzoKLSAgICB2aXJ0dWFsIGJvb2wg
dmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2ggKm5vZGUpCi0gICAgewotICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmdldEZsb3dPcCgpKQotICAgICAgICB7Ci0gICAgICAgICAgY2Fz
ZSBFT3BLaWxsOgotICAgICAgICAgICAgbUZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgICAgZGVmYXVsdDogYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1
cm4gIW1Gb3VuZDsKLSAgICB9Ci19OwotCi1jbGFzcyBGaW5kU2lkZUVmZmVjdFJld3JpdGluZyA6
IHB1YmxpYyBOb2RlU2VhcmNoVHJhdmVyc2VyPEZpbmRTaWRlRWZmZWN0UmV3cml0aW5nPgotewot
ICBwdWJsaWM6Ci0gICAgdmlydHVhbCBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50
ZXJtQmluYXJ5ICpub2RlKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6Ci0gICAgICAgICAgY2FzZSBF
T3BMb2dpY2FsQW5kOgotICAgICAgICAgICAgaWYgKG5vZGUtPmdldFJpZ2h0KCktPmhhc1NpZGVF
ZmZlY3RzKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbUZvdW5kID0gdHJ1ZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgZGVmYXVsdDog
YnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gIW1Gb3VuZDsKLSAgICB9Ci19Owot
Ci19Ci0KLSNlbmRpZiAvLyBUUkFOU0xBVE9SX05PREVTRUFSQ0hfSF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRFU1NMLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRFU1NMLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYzIwNDhmMWNlYzRhZWNlNmEzMDFhNWIwZjE0MGJjODE5MjQz
OTc5MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0RVNTTC5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwyNiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29t
cGlsZXIvT3V0cHV0RVNTTC5oIgotCi1UT3V0cHV0RVNTTDo6VE91dHB1dEVTU0woVEluZm9TaW5r
QmFzZSYgb2JqU2luaywKLSAgICAgICAgICAgICAgICAgICAgICAgICBTaEFycmF5SW5kZXhDbGFt
cGluZ1N0cmF0ZWd5IGNsYW1waW5nU3RyYXRlZ3ksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
U2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
TmFtZU1hcCYgbmFtZU1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUm
IHN5bWJvbFRhYmxlKQotICAgIDogVE91dHB1dEdMU0xCYXNlKG9ialNpbmssIGNsYW1waW5nU3Ry
YXRlZ3ksIGhhc2hGdW5jdGlvbiwgbmFtZU1hcCwgc3ltYm9sVGFibGUpCi17Ci19Ci0KLWJvb2wg
VE91dHB1dEVTU0w6OndyaXRlVmFyaWFibGVQcmVjaXNpb24oVFByZWNpc2lvbiBwcmVjaXNpb24p
Ci17Ci0gICAgaWYgKHByZWNpc2lvbiA9PSBFYnBVbmRlZmluZWQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNpbmsoKTsKLSAgICBvdXQgPDwg
Z2V0UHJlY2lzaW9uU3RyaW5nKHByZWNpc2lvbik7Ci0gICAgcmV0dXJuIHRydWU7Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0RVNTTC5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEVTU0wuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVkYjk2ZTQ5NzkxNmRiYzlmNjZkOTIwYjAyY2Nk
YjJiOThkMmIxYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0RVNTTC5oCisrKyAv
ZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEx
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBD
Uk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRFU1NMX0hfCi0jZGVmaW5lIENST1NTQ09NUElMRVJHTFNM
X09VVFBVVEVTU0xfSF8KLQotI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEdMU0xCYXNlLmgiCi0K
LWNsYXNzIFRPdXRwdXRFU1NMIDogcHVibGljIFRPdXRwdXRHTFNMQmFzZQotewotcHVibGljOgot
ICAgIFRPdXRwdXRFU1NMKFRJbmZvU2lua0Jhc2UmIG9ialNpbmssCi0gICAgICAgICAgICAgICAg
U2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAotICAgICAgICAg
ICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAotICAgICAgICAgICAgICAgIE5h
bWVNYXAmIG5hbWVNYXAsCi0gICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJs
ZSk7Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIGJvb2wgd3JpdGVWYXJpYWJsZVByZWNpc2lv
bihUUHJlY2lzaW9uIHByZWNpc2lvbik7Ci19OwotCi0jZW5kaWYgIC8vIENST1NTQ09NUElMRVJH
TFNMX09VVFBVVEVTU0xfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9PdXRwdXRHTFNMLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9PdXRwdXRHTFNMLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBh
NDUxYzBkNzZlYzBkNTAzMDBlNTJiYjNjNTA1MjY1YTNmNjcxMC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvT3V0cHV0R0xTTC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0R0xTTC5oIgotCi1U
T3V0cHV0R0xTTDo6VE91dHB1dEdMU0woVEluZm9TaW5rQmFzZSYgb2JqU2luaywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IGNsYW1waW5nU3Ry
YXRlZ3ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVu
Y3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQotICAgIDogVE91
dHB1dEdMU0xCYXNlKG9ialNpbmssIGNsYW1waW5nU3RyYXRlZ3ksIGhhc2hGdW5jdGlvbiwgbmFt
ZU1hcCwgc3ltYm9sVGFibGUpCi17Ci19Ci0KLWJvb2wgVE91dHB1dEdMU0w6OndyaXRlVmFyaWFi
bGVQcmVjaXNpb24oVFByZWNpc2lvbikKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQg
VE91dHB1dEdMU0w6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCi17Ci0gICAgVElu
Zm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOwotCi0gICAgaWYgKG5vZGUtPmdldFN5bWJvbCgp
ID09ICJnbF9GcmFnRGVwdGhFWFQiKQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJnbF9GcmFnRGVw
dGgiOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBUT3V0cHV0R0xTTEJhc2U6OnZp
c2l0U3ltYm9sKG5vZGUpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBmYTY4YWM4MTAzMGU5MzNiNDgzMjg5MzUwZWZjMzUzMjc5NGRlODY4Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9PdXRwdXRHTFNMLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBA
Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENST1NTQ09NUElMRVJHTFNMX09VVFBVVEdM
U0xfSF8KLSNkZWZpbmUgQ1JPU1NDT01QSUxFUkdMU0xfT1VUUFVUR0xTTF9IXwotCi0jaW5jbHVk
ZSAiY29tcGlsZXIvT3V0cHV0R0xTTEJhc2UuaCIKLQotY2xhc3MgVE91dHB1dEdMU0wgOiBwdWJs
aWMgVE91dHB1dEdMU0xCYXNlCi17Ci1wdWJsaWM6Ci0gICAgVE91dHB1dEdMU0woVEluZm9TaW5r
QmFzZSYgb2JqU2luaywKLSAgICAgICAgICAgICAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0
ZWd5IGNsYW1waW5nU3RyYXRlZ3ksCi0gICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBo
YXNoRnVuY3Rpb24sCi0gICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAgICAg
ICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKTsKLQotcHJvdGVjdGVkOgotICAgIHZp
cnR1YWwgYm9vbCB3cml0ZVZhcmlhYmxlUHJlY2lzaW9uKFRQcmVjaXNpb24pOwotICAgIHZpcnR1
YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKTsKLX07Ci0KLSNlbmRpZiAg
Ly8gQ1JPU1NDT01QSUxFUkdMU0xfT1VUUFVUR0xTTF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0xCYXNlLmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5MGJkNjdlY2Q3NDIwZTllNDhhMWVhZDFlNDNmZGJhZjU4
MDhlMGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0xCYXNlLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDgxNyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVk
ZSAiY29tcGlsZXIvT3V0cHV0R0xTTEJhc2UuaCIKLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5o
IgotCi0jaW5jbHVkZSA8Y2Zsb2F0PgotCi1uYW1lc3BhY2UKLXsKLVRTdHJpbmcgYXJyYXlCcmFj
a2V0cyhjb25zdCBUVHlwZSYgdHlwZSkKLXsKLSAgICBBU1NFUlQodHlwZS5pc0FycmF5KCkpOwot
ICAgIFRJbmZvU2lua0Jhc2Ugb3V0OwotICAgIG91dCA8PCAiWyIgPDwgdHlwZS5nZXRBcnJheVNp
emUoKSA8PCAiXSI7Ci0gICAgcmV0dXJuIFRTdHJpbmcob3V0LmNfc3RyKCkpOwotfQotCi1ib29s
IGlzU2luZ2xlU3RhdGVtZW50KFRJbnRlcm1Ob2RlKiBub2RlKSB7Ci0gICAgaWYgKGNvbnN0IFRJ
bnRlcm1BZ2dyZWdhdGUqIGFnZ3JlZ2F0ZSA9IG5vZGUtPmdldEFzQWdncmVnYXRlKCkpCi0gICAg
ewotICAgICAgICByZXR1cm4gKGFnZ3JlZ2F0ZS0+Z2V0T3AoKSAhPSBFT3BGdW5jdGlvbikgJiYK
LSAgICAgICAgICAgICAgIChhZ2dyZWdhdGUtPmdldE9wKCkgIT0gRU9wU2VxdWVuY2UpOwotICAg
IH0KLSAgICBlbHNlIGlmIChjb25zdCBUSW50ZXJtU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBub2Rl
LT5nZXRBc1NlbGVjdGlvbk5vZGUoKSkKLSAgICB7Ci0gICAgICAgIC8vIFRlcm5hcnkgb3BlcmF0
b3JzIGFyZSB1c3VhbGx5IHBhcnQgb2YgYW4gYXNzaWdubWVudCBvcGVyYXRvci4KLSAgICAgICAg
Ly8gVGhpcyBoYW5kbGVzIHRob3NlIHJhcmUgY2FzZXMgaW4gd2hpY2ggdGhleSBhcmUgYWxsIGJ5
IHRoZW1zZWx2ZXMuCi0gICAgICAgIHJldHVybiBzZWxlY3Rpb24tPnVzZXNUZXJuYXJ5T3BlcmF0
b3IoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobm9kZS0+Z2V0QXNMb29wTm9kZSgpKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLX0gIC8v
IG5hbWVzcGFjZQotCi1UT3V0cHV0R0xTTEJhc2U6OlRPdXRwdXRHTFNMQmFzZShUSW5mb1NpbmtC
YXNlJiBvYmpTaW5rLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hBcnJheUlu
ZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBOYW1lTWFwJiBuYW1lTWFwLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKLSAgICA6IFRJbnRl
cm1UcmF2ZXJzZXIodHJ1ZSwgdHJ1ZSwgdHJ1ZSksCi0gICAgICBtT2JqU2luayhvYmpTaW5rKSwK
LSAgICAgIG1EZWNsYXJpbmdWYXJpYWJsZXMoZmFsc2UpLAotICAgICAgbUNsYW1waW5nU3RyYXRl
Z3koY2xhbXBpbmdTdHJhdGVneSksCi0gICAgICBtSGFzaEZ1bmN0aW9uKGhhc2hGdW5jdGlvbiks
Ci0gICAgICBtTmFtZU1hcChuYW1lTWFwKSwKLSAgICAgIG1TeW1ib2xUYWJsZShzeW1ib2xUYWJs
ZSkKLXsKLX0KLQotdm9pZCBUT3V0cHV0R0xTTEJhc2U6OndyaXRlVHJpcGxldChWaXNpdCB2aXNp
dCwgY29uc3QgY2hhciogcHJlU3RyLCBjb25zdCBjaGFyKiBpblN0ciwgY29uc3QgY2hhciogcG9z
dFN0cikKLXsKLSAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7Ci0gICAgaWYgKHZp
c2l0ID09IFByZVZpc2l0ICYmIHByZVN0cikKLSAgICB7Ci0gICAgICAgIG91dCA8PCBwcmVTdHI7
Ci0gICAgfQotICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQgJiYgaW5TdHIpCi0gICAgewot
ICAgICAgICBvdXQgPDwgaW5TdHI7Ci0gICAgfQotICAgIGVsc2UgaWYgKHZpc2l0ID09IFBvc3RW
aXNpdCAmJiBwb3N0U3RyKQotICAgIHsKLSAgICAgICAgb3V0IDw8IHBvc3RTdHI7Ci0gICAgfQot
fQotCi12b2lkIFRPdXRwdXRHTFNMQmFzZTo6d3JpdGVWYXJpYWJsZVR5cGUoY29uc3QgVFR5cGUm
IHR5cGUpCi17Ci0gICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOwotICAgIFRRdWFs
aWZpZXIgcXVhbGlmaWVyID0gdHlwZS5nZXRRdWFsaWZpZXIoKTsKLSAgICAvLyBUT0RPKGFsb2tw
KTogVmFsaWRhdGUgcXVhbGlmaWVyIGZvciB2YXJpYWJsZSBkZWNsYXJhdGlvbnMuCi0gICAgaWYg
KChxdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSAmJiAocXVhbGlmaWVyICE9IEV2cUdsb2JhbCkp
Ci0gICAgICAgIG91dCA8PCB0eXBlLmdldFF1YWxpZmllclN0cmluZygpIDw8ICIgIjsKLSAgICAv
LyBEZWNsYXJlIHRoZSBzdHJ1Y3QgaWYgd2UgaGF2ZSBub3QgZG9uZSBzbyBhbHJlYWR5LgotICAg
IGlmICgodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpICYmICFzdHJ1Y3REZWNsYXJl
ZCh0eXBlLmdldFN0cnVjdCgpKSkKLSAgICB7Ci0gICAgICAgIGRlY2xhcmVTdHJ1Y3QodHlwZS5n
ZXRTdHJ1Y3QoKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmICh3cml0ZVZh
cmlhYmxlUHJlY2lzaW9uKHR5cGUuZ2V0UHJlY2lzaW9uKCkpKQotICAgICAgICAgICAgb3V0IDw8
ICIgIjsKLSAgICAgICAgb3V0IDw8IGdldFR5cGVOYW1lKHR5cGUpOwotICAgIH0KLX0KLQotdm9p
ZCBUT3V0cHV0R0xTTEJhc2U6OndyaXRlRnVuY3Rpb25QYXJhbWV0ZXJzKGNvbnN0IFRJbnRlcm1T
ZXF1ZW5jZSYgYXJncykKLXsKLSAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7Ci0g
ICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBhcmdzLmJlZ2lu
KCk7Ci0gICAgICAgICBpdGVyICE9IGFyZ3MuZW5kKCk7ICsraXRlcikKLSAgICB7Ci0gICAgICAg
IGNvbnN0IFRJbnRlcm1TeW1ib2wqIGFyZyA9ICgqaXRlciktPmdldEFzU3ltYm9sTm9kZSgpOwot
ICAgICAgICBBU1NFUlQoYXJnICE9IE5VTEwpOwotCi0gICAgICAgIGNvbnN0IFRUeXBlJiB0eXBl
ID0gYXJnLT5nZXRUeXBlKCk7Ci0gICAgICAgIHdyaXRlVmFyaWFibGVUeXBlKHR5cGUpOwotCi0g
ICAgICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUgPSBhcmctPmdldFN5bWJvbCgpOwotICAgICAgICBp
ZiAoIW5hbWUuZW1wdHkoKSkKLSAgICAgICAgICAgIG91dCA8PCAiICIgPDwgaGFzaE5hbWUobmFt
ZSk7Ci0gICAgICAgIGlmICh0eXBlLmlzQXJyYXkoKSkKLSAgICAgICAgICAgIG91dCA8PCBhcnJh
eUJyYWNrZXRzKHR5cGUpOwotCi0gICAgICAgIC8vIFB1dCBhIGNvbW1hIGlmIHRoaXMgaXMgbm90
IHRoZSBsYXN0IGFyZ3VtZW50LgotICAgICAgICBpZiAoaXRlciAhPSBhcmdzLmVuZCgpIC0gMSkK
LSAgICAgICAgICAgIG91dCA8PCAiLCAiOwotICAgIH0KLX0KLQotY29uc3QgQ29uc3RhbnRVbmlv
biogVE91dHB1dEdMU0xCYXNlOjp3cml0ZUNvbnN0YW50VW5pb24oY29uc3QgVFR5cGUmIHR5cGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBDb25zdGFudFVuaW9uKiBwQ29uc3RVbmlvbikKLXsKLSAgICBUSW5mb1NpbmtCYXNl
JiBvdXQgPSBvYmpTaW5rKCk7Ci0KLSAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRT
dHJ1Y3QpCi0gICAgewotICAgICAgICBjb25zdCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0eXBl
LmdldFN0cnVjdCgpOwotICAgICAgICBvdXQgPDwgaGFzaE5hbWUoc3RydWN0dXJlLT5uYW1lKCkp
IDw8ICIoIjsKLQotICAgICAgICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSBzdHJ1Y3R1cmUt
PmZpZWxkcygpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7
ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgVFR5cGUqIGZpZWxkVHlwZSA9IGZp
ZWxkc1tpXS0+dHlwZSgpOwotICAgICAgICAgICAgQVNTRVJUKGZpZWxkVHlwZSAhPSBOVUxMKTsK
LSAgICAgICAgICAgIHBDb25zdFVuaW9uID0gd3JpdGVDb25zdGFudFVuaW9uKCpmaWVsZFR5cGUs
IHBDb25zdFVuaW9uKTsKLSAgICAgICAgICAgIGlmIChpICE9IGZpZWxkcy5zaXplKCkgLSAxKSBv
dXQgPDwgIiwgIjsKLSAgICAgICAgfQotICAgICAgICBvdXQgPDwgIikiOwotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICBzaXplX3Qgc2l6ZSA9IHR5cGUuZ2V0T2JqZWN0U2l6ZSgpOwot
ICAgICAgICBib29sIHdyaXRlVHlwZSA9IHNpemUgPiAxOwotICAgICAgICBpZiAod3JpdGVUeXBl
KSBvdXQgPDwgZ2V0VHlwZU5hbWUodHlwZSkgPDwgIigiOwotICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHNpemU7ICsraSwgKytwQ29uc3RVbmlvbikKLSAgICAgICAgewotICAgICAgICAg
ICAgc3dpdGNoIChwQ29uc3RVbmlvbi0+Z2V0VHlwZSgpKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IG91dCA8PCBzdGQ6Om1pbihGTFRfTUFYLCBzdGQ6Om1h
eCgtRkxUX01BWCwgcENvbnN0VW5pb24tPmdldEZDb25zdCgpKSk7IGJyZWFrOwotICAgICAgICAg
ICAgICAgIGNhc2UgRWJ0SW50OiBvdXQgPDwgcENvbnN0VW5pb24tPmdldElDb25zdCgpOyBicmVh
azsKLSAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6IG91dCA8PCBwQ29uc3RVbmlvbi0+Z2V0
QkNvbnN0KCk7IGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaSAhPSBzaXplIC0gMSkgb3V0IDw8ICIs
ICI7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHdyaXRlVHlwZSkgb3V0IDw8ICIpIjsKLSAgICB9
Ci0gICAgcmV0dXJuIHBDb25zdFVuaW9uOwotfQotCi12b2lkIFRPdXRwdXRHTFNMQmFzZTo6dmlz
aXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlJiBvdXQg
PSBvYmpTaW5rKCk7Ci0gICAgaWYgKG1Mb29wVW5yb2xsLk5lZWRzVG9SZXBsYWNlU3ltYm9sV2l0
aFZhbHVlKG5vZGUpKQotICAgICAgICBvdXQgPDwgbUxvb3BVbnJvbGwuR2V0TG9vcEluZGV4VmFs
dWUobm9kZSk7Ci0gICAgZWxzZQotICAgICAgICBvdXQgPDwgaGFzaFZhcmlhYmxlTmFtZShub2Rl
LT5nZXRTeW1ib2woKSk7Ci0KLSAgICBpZiAobURlY2xhcmluZ1ZhcmlhYmxlcyAmJiBub2RlLT5n
ZXRUeXBlKCkuaXNBcnJheSgpKQotICAgICAgICBvdXQgPDwgYXJyYXlCcmFja2V0cyhub2RlLT5n
ZXRUeXBlKCkpOwotfQotCi12b2lkIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRDb25zdGFudFVuaW9u
KFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKQotewotICAgIHdyaXRlQ29uc3RhbnRVbmlvbihu
b2RlLT5nZXRUeXBlKCksIG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCkpOwotfQotCi1ib29s
IFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkq
IG5vZGUpCi17Ci0gICAgYm9vbCB2aXNpdENoaWxkcmVuID0gdHJ1ZTsKLSAgICBUSW5mb1NpbmtC
YXNlJiBvdXQgPSBvYmpTaW5rKCk7Ci0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQotICAgIHsK
LSAgICAgICAgY2FzZSBFT3BJbml0aWFsaXplOgotICAgICAgICAgICAgaWYgKHZpc2l0ID09IElu
VmlzaXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIgPSAiOwotICAg
ICAgICAgICAgICAgIC8vIFJIUyBvZiBpbml0aWFsaXplIGlzIG5vdCBiZWluZyBkZWNsYXJlZC4K
LSAgICAgICAgICAgICAgICBtRGVjbGFyaW5nVmFyaWFibGVzID0gZmFsc2U7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BBc3NpZ246IHdyaXRlVHJp
cGxldCh2aXNpdCwgIigiLCAiID0gIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQWRk
QXNzaWduOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiArPSAiLCAiKSIpOyBicmVhazsKLSAg
ICAgICAgY2FzZSBFT3BTdWJBc3NpZ246IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiIC09ICIs
ICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcERpdkFzc2lnbjogd3JpdGVUcmlwbGV0KHZp
c2l0LCAiKCIsICIgLz0gIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIC8vIE5vdGljZSB0aGUgZmFs
bC10aHJvdWdoLgotICAgICAgICBjYXNlIEVPcE11bEFzc2lnbjogCi0gICAgICAgIGNhc2UgRU9w
VmVjdG9yVGltZXNNYXRyaXhBc3NpZ246Ci0gICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2Fs
YXJBc3NpZ246Ci0gICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ246Ci0gICAg
ICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246Ci0gICAgICAgICAgICB3cml0ZVRy
aXBsZXQodmlzaXQsICIoIiwgIiAqPSAiLCAiKSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDoKLSAgICAgICAgICAgIHdyaXRlVHJpcGxldCh2aXNp
dCwgTlVMTCwgIlsiLCAiXSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9w
SW5kZXhJbmRpcmVjdDoKLSAgICAgICAgICAgIGlmIChub2RlLT5nZXRBZGRJbmRleENsYW1wKCkp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHZpc2l0ID09IEluVmlzaXQpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAobUNsYW1waW5nU3RyYXRl
Z3kgPT0gU0hfQ0xBTVBfV0lUSF9DTEFNUF9JTlRSSU5TSUMpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG91dCA8PCAiW2ludChjbGFtcChmbG9hdCgiOwotICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJbd2ViZ2xfaW50X2NsYW1w
KCI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZpc2l0KQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgaW50IG1heFNpemU7Ci0gICAgICAgICAgICAgICAgICAgIFRJbnRl
cm1UeXBlZCAqbGVmdCA9IG5vZGUtPmdldExlZnQoKTsKLSAgICAgICAgICAgICAgICAgICAgVFR5
cGUgbGVmdFR5cGUgPSBsZWZ0LT5nZXRUeXBlKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYg
KGxlZnQtPmlzQXJyYXkoKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gVGhlIHNoYWRlciB3aWxsIGZhaWwgdmFsaWRhdGlvbiBpZiB0aGUgYXJyYXkg
bGVuZ3RoIGlzIG5vdCA+IDAuCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXhTaXplID0gbGVm
dFR5cGUuZ2V0QXJyYXlTaXplKCkgLSAxOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgbWF4U2l6ZSA9IGxlZnRUeXBlLmdldE5vbWluYWxTaXplKCkgLSAxOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1DbGFtcGluZ1N0cmF0
ZWd5ID09IFNIX0NMQU1QX1dJVEhfQ0xBTVBfSU5UUklOU0lDKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBvdXQgPDwgIiksIDAuMCwgZmxvYXQoIiA8PCBtYXhTaXplIDw8ICIpKSldIjsKLSAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8
PCAiLCAwLCAiIDw8IG1heFNpemUgPDwgIildIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICB3cml0ZVRyaXBsZXQodmlzaXQsIE5VTEwsICJbIiwgIl0i
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcElu
ZGV4RGlyZWN0U3RydWN0OgotICAgICAgICAgICAgaWYgKHZpc2l0ID09IEluVmlzaXQpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gSGVyZSB3ZSBhcmUgd3JpdGluZyBvdXQgImZv
by5iYXIiLCB3aGVyZSAiZm9vIiBpcyBzdHJ1Y3QKLSAgICAgICAgICAgICAgICAvLyBhbmQgImJh
ciIgaXMgZmllbGQuIEluIEFTVCwgaXQgaXMgcmVwcmVzZW50ZWQgYXMgYSBiaW5hcnkKLSAgICAg
ICAgICAgICAgICAvLyBub2RlLCB3aGVyZSBsZWZ0IGNoaWxkIHJlcHJlc2VudHMgImZvbyIgYW5k
IHJpZ2h0IGNoaWxkICJiYXIiLgotICAgICAgICAgICAgICAgIC8vIFRoZSBub2RlIGl0c2VsZiBy
ZXByZXNlbnRzICIuIi4gVGhlIHN0cnVjdCBmaWVsZCAiYmFyIiBpcwotICAgICAgICAgICAgICAg
IC8vIGFjdHVhbGx5IHN0b3JlZCBhcyBhbiBpbmRleCBpbnRvIFRTdHJ1Y3R1cmU6OmZpZWxkcy4K
LSAgICAgICAgICAgICAgICBvdXQgPDwgIi4iOwotICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IG5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgp
OwotICAgICAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1Db25zdGFudFVuaW9uKiBpbmRleCA9IG5v
ZGUtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpOwotICAgICAgICAgICAgICAgIGNv
bnN0IFRGaWVsZCogZmllbGQgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpW2luZGV4LT5nZXRJQ29uc3Qo
MCldOwotCi0gICAgICAgICAgICAgICAgVFN0cmluZyBmaWVsZE5hbWUgPSBmaWVsZC0+bmFtZSgp
OwotICAgICAgICAgICAgICAgIGlmICghbVN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKHN0cnVjdHVy
ZS0+bmFtZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gaGFzaE5hbWUoZmll
bGROYW1lKTsKLQotICAgICAgICAgICAgICAgIG91dCA8PCBmaWVsZE5hbWU7Ci0gICAgICAgICAg
ICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wVmVjdG9yU3dpenpsZToKLSAgICAgICAgICAgIGlmICh2
aXNpdCA9PSBJblZpc2l0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAi
LiI7Ci0gICAgICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSogcmlnaHRDaGlsZCA9IG5vZGUt
PmdldFJpZ2h0KCktPmdldEFzQWdncmVnYXRlKCk7Ci0gICAgICAgICAgICAgICAgVEludGVybVNl
cXVlbmNlJiBzZXF1ZW5jZSA9IHJpZ2h0Q2hpbGQtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAgICAg
ICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNpdCA9IHNlcXVlbmNlLmJlZ2lu
KCk7IHNpdCAhPSBzZXF1ZW5jZS5lbmQoKTsgKytzaXQpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogZWxlbWVudCA9ICgqc2l0KS0+
Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50
LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
ZWxlbWVudC0+Z2V0Tm9taW5hbFNpemUoKSA9PSAxKTsKLSAgICAgICAgICAgICAgICAgICAgY29u
c3QgQ29uc3RhbnRVbmlvbiYgZGF0YSA9IGVsZW1lbnQtPmdldFVuaW9uQXJyYXlQb2ludGVyKClb
MF07Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChkYXRhLmdldFR5cGUoKSA9PSBFYnRJbnQp
OwotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGRhdGEuZ2V0SUNvbnN0KCkpCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDogb3V0IDw8ICJ4
IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IG91dCA8PCAieSI7IGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBvdXQgPDwgInoiOyBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogb3V0IDw8ICJ3IjsgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB2aXNp
dENoaWxkcmVuID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICBjYXNlIEVPcEFkZDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgKyAiLCAiKSIp
OyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BTdWI6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAi
IC0gIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTXVsOiB3cml0ZVRyaXBsZXQodmlz
aXQsICIoIiwgIiAqICIsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcERpdjogd3JpdGVU
cmlwbGV0KHZpc2l0LCAiKCIsICIgLyAiLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BN
b2Q6IFVOSU1QTEVNRU5URUQoKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wRXF1YWw6IHdyaXRl
VHJpcGxldCh2aXNpdCwgIigiLCAiID09ICIsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVP
cE5vdEVxdWFsOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAhPSAiLCAiKSIpOyBicmVhazsK
LSAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgPCAi
LCAiKSIpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjogd3JpdGVUcmlwbGV0
KHZpc2l0LCAiKCIsICIgPiAiLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BMZXNzVGhh
bkVxdWFsOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiA8PSAiLCAiKSIpOyBicmVhazsKLSAg
ICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwg
IiA+PSAiLCAiKSIpOyBicmVhazsKLQotICAgICAgICAvLyBOb3RpY2UgdGhlIGZhbGwtdGhyb3Vn
aC4KLSAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjoKLSAgICAgICAgY2FzZSBFT3BW
ZWN0b3JUaW1lc01hdHJpeDoKLSAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1ZlY3RvcjoKLSAg
ICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhcjoKLSAgICAgICAgY2FzZSBFT3BNYXRyaXhU
aW1lc01hdHJpeDoKLSAgICAgICAgICAgIHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiICogIiwg
IikiKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wTG9naWNhbE9yOiB3
cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiB8fCAiLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2Fz
ZSBFT3BMb2dpY2FsWG9yOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiBeXiAiLCAiKSIpOyBi
cmVhazsKLSAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiB3cml0ZVRyaXBsZXQodmlzaXQsICIo
IiwgIiAmJiAiLCAiKSIpOyBicmVhazsKLSAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsg
YnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZpc2l0Q2hpbGRyZW47Ci19Ci0KLWJvb2wgVE91
dHB1dEdMU0xCYXNlOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUp
Ci17Ci0gICAgVFN0cmluZyBwcmVTdHJpbmc7Ci0gICAgVFN0cmluZyBwb3N0U3RyaW5nID0gIiki
OwotCi0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQotICAgIHsKLSAgICAgICAgY2FzZSBFT3BO
ZWdhdGl2ZTogcHJlU3RyaW5nID0gIigtIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wVmVjdG9y
TG9naWNhbE5vdDogcHJlU3RyaW5nID0gIm5vdCgiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BM
b2dpY2FsTm90OiBwcmVTdHJpbmcgPSAiKCEiOyBicmVhazsKLQotICAgICAgICBjYXNlIEVPcFBv
c3RJbmNyZW1lbnQ6IHByZVN0cmluZyA9ICIoIjsgcG9zdFN0cmluZyA9ICIrKykiOyBicmVhazsK
LSAgICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OiBwcmVTdHJpbmcgPSAiKCI7IHBvc3RTdHJp
bmcgPSAiLS0pIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OiBwcmVTdHJp
bmcgPSAiKCsrIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OiBwcmVTdHJp
bmcgPSAiKC0tIjsgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BDb252SW50VG9Cb29sOgotICAg
ICAgICBjYXNlIEVPcENvbnZGbG9hdFRvQm9vbDoKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+
Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBjYXNlIDE6IHByZVN0cmluZyA9ICAiYm9vbCgiOyAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgY2FzZSAyOiBwcmVTdHJpbmcgPSAiYnZlYzIoIjsgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgY2FzZSAzOiBwcmVTdHJpbmcgPSAiYnZlYzMoIjsgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgY2FzZSA0OiBwcmVTdHJpbmcgPSAiYnZlYzQoIjsgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnZCb29sVG9GbG9hdDoKLSAgICAgICAgY2FzZSBF
T3BDb252SW50VG9GbG9hdDoKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgp
LT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBjYXNlIDE6IHByZVN0cmluZyA9ICJmbG9hdCgiOyAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgY2FzZSAyOiBwcmVTdHJpbmcgPSAidmVjMigiOyBicmVhazsKLSAgICAgICAgICAgICAgICBj
YXNlIDM6IHByZVN0cmluZyA9ICJ2ZWMzKCI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ug
NDogcHJlU3RyaW5nID0gInZlYzQoIjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEVPcENvbnZGbG9hdFRvSW50OgotICAgICAgICBjYXNlIEVPcENvbnZCb29sVG9JbnQ6
Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wZXJhbmQoKS0+Z2V0VHlwZSgpLmdldE5v
bWluYWxTaXplKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSAxOiBwcmVT
dHJpbmcgPSAiaW50KCI7ICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDI6IHByZVN0cmlu
ZyA9ICJpdmVjMigiOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDM6IHByZVN0cmluZyA9
ICJpdmVjMygiOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDQ6IHByZVN0cmluZyA9ICJp
dmVjNCgiOyBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BSYWRp
YW5zOiBwcmVTdHJpbmcgPSAicmFkaWFucygiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BEZWdy
ZWVzOiBwcmVTdHJpbmcgPSAiZGVncmVlcygiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BTaW46
IHByZVN0cmluZyA9ICJzaW4oIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29zOiBwcmVTdHJp
bmcgPSAiY29zKCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcFRhbjogcHJlU3RyaW5nID0gInRh
bigiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BBc2luOiBwcmVTdHJpbmcgPSAiYXNpbigiOyBi
cmVhazsKLSAgICAgICAgY2FzZSBFT3BBY29zOiBwcmVTdHJpbmcgPSAiYWNvcygiOyBicmVhazsK
LSAgICAgICAgY2FzZSBFT3BBdGFuOiBwcmVTdHJpbmcgPSAiYXRhbigiOyBicmVhazsKLQotICAg
ICAgICBjYXNlIEVPcEV4cDogcHJlU3RyaW5nID0gImV4cCgiOyBicmVhazsKLSAgICAgICAgY2Fz
ZSBFT3BMb2c6IHByZVN0cmluZyA9ICJsb2coIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wRXhw
MjogcHJlU3RyaW5nID0gImV4cDIoIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTG9nMjogcHJl
U3RyaW5nID0gImxvZzIoIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wU3FydDogcHJlU3RyaW5n
ID0gInNxcnQoIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wSW52ZXJzZVNxcnQ6IHByZVN0cmlu
ZyA9ICJpbnZlcnNlc3FydCgiOyBicmVhazsKLQotICAgICAgICBjYXNlIEVPcEFiczogcHJlU3Ry
aW5nID0gImFicygiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BTaWduOiBwcmVTdHJpbmcgPSAi
c2lnbigiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BGbG9vcjogcHJlU3RyaW5nID0gImZsb29y
KCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENlaWw6IHByZVN0cmluZyA9ICJjZWlsKCI7IGJy
ZWFrOwotICAgICAgICBjYXNlIEVPcEZyYWN0OiBwcmVTdHJpbmcgPSAiZnJhY3QoIjsgYnJlYWs7
Ci0KLSAgICAgICAgY2FzZSBFT3BMZW5ndGg6IHByZVN0cmluZyA9ICJsZW5ndGgoIjsgYnJlYWs7
Ci0gICAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiBwcmVTdHJpbmcgPSAibm9ybWFsaXplKCI7IGJy
ZWFrOwotCi0gICAgICAgIGNhc2UgRU9wREZkeDogcHJlU3RyaW5nID0gImRGZHgoIjsgYnJlYWs7
Ci0gICAgICAgIGNhc2UgRU9wREZkeTogcHJlU3RyaW5nID0gImRGZHkoIjsgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRU9wRndpZHRoOiBwcmVTdHJpbmcgPSAiZndpZHRoKCI7IGJyZWFrOwotCi0gICAg
ICAgIGNhc2UgRU9wQW55OiBwcmVTdHJpbmcgPSAiYW55KCI7IGJyZWFrOwotICAgICAgICBjYXNl
IEVPcEFsbDogcHJlU3RyaW5nID0gImFsbCgiOyBicmVhazsKLQotICAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOyBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQg
JiYgbm9kZS0+Z2V0VXNlRW11bGF0ZWRGdW5jdGlvbigpKQotICAgICAgICBwcmVTdHJpbmcgPSBC
dWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6R2V0RW11bGF0ZWRGdW5jdGlvbk5hbWUocHJlU3RyaW5n
KTsKLSAgICB3cml0ZVRyaXBsZXQodmlzaXQsIHByZVN0cmluZy5jX3N0cigpLCBOVUxMLCBwb3N0
U3RyaW5nLmNfc3RyKCkpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVE91dHB1dEdM
U0xCYXNlOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiogbm9k
ZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7Ci0KLSAgICBpZiAobm9k
ZS0+dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQotICAgIHsKLSAgICAgICAgLy8gTm90aWNlIHR3byBi
cmFja2V0cyBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQuIFRoZSBvdXRlciBvbmVzCi0gICAgICAg
IC8vIGVuY2Fwc3VsYXRlIHRoZSB3aG9sZSB0ZXJuYXJ5IGV4cHJlc3Npb24uIFRoaXMgcHJlc2Vy
dmVzIHRoZQotICAgICAgICAvLyBvcmRlciBvZiBwcmVjZWRlbmNlIHdoZW4gdGVybmFyeSBleHBy
ZXNzaW9ucyBhcmUgdXNlZCBpbiBhCi0gICAgICAgIC8vIGNvbXBvdW5kIGV4cHJlc3Npb24sIGku
ZS4sIGMgPSAyICogKGEgPCBiID8gMSA6IDIpLgotICAgICAgICBvdXQgPDwgIigoIjsKLSAgICAg
ICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBvdXQgPDwg
IikgPyAoIjsKLSAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOwot
ICAgICAgICBvdXQgPDwgIikgOiAoIjsKLSAgICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9jaygpLT50
cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8ICIpKSI7Ci0gICAgfQotICAgIGVsc2UKLSAg
ICB7Ci0gICAgICAgIG91dCA8PCAiaWYgKCI7Ci0gICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigp
LT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8ICIpXG4iOwotCi0gICAgICAgIGluY3Jl
bWVudERlcHRoKG5vZGUpOwotICAgICAgICB2aXNpdENvZGVCbG9jayhub2RlLT5nZXRUcnVlQmxv
Y2soKSk7Ci0KLSAgICAgICAgaWYgKG5vZGUtPmdldEZhbHNlQmxvY2soKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgb3V0IDw8ICJlbHNlXG4iOwotICAgICAgICAgICAgdmlzaXRDb2RlQmxvY2so
bm9kZS0+Z2V0RmFsc2VCbG9jaygpKTsKLSAgICAgICAgfQotICAgICAgICBkZWNyZW1lbnREZXB0
aCgpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVE91dHB1dEdMU0xCYXNl
Ojp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKLXsK
LSAgICBib29sIHZpc2l0Q2hpbGRyZW4gPSB0cnVlOwotICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9
IG9ialNpbmsoKTsKLSAgICBUU3RyaW5nIHByZVN0cmluZzsKLSAgICBib29sIGRlbGF5ZWRXcml0
ZSA9IGZhbHNlOwotICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKLSAgICB7Ci0gICAgICAgIGNh
c2UgRU9wU2VxdWVuY2U6IHsKLSAgICAgICAgICAgIC8vIFNjb3BlIHRoZSBzZXF1ZW5jZXMgZXhj
ZXB0IHdoZW4gYXQgdGhlIGdsb2JhbCBzY29wZS4KLSAgICAgICAgICAgIGlmIChkZXB0aCA+IDAp
IG91dCA8PCAie1xuIjsKLQotICAgICAgICAgICAgaW5jcmVtZW50RGVwdGgobm9kZSk7Ci0gICAg
ICAgICAgICBjb25zdCBUSW50ZXJtU2VxdWVuY2UmIHNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVu
Y2UoKTsKLSAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBp
dGVyID0gc2VxdWVuY2UuYmVnaW4oKTsKLSAgICAgICAgICAgICAgICAgaXRlciAhPSBzZXF1ZW5j
ZS5lbmQoKTsgKytpdGVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFRJbnRlcm1O
b2RlKiBub2RlID0gKml0ZXI7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUgIT0gTlVMTCk7
Ci0gICAgICAgICAgICAgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoaXNTaW5nbGVTdGF0ZW1lbnQobm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIG91dCA8
PCAiO1xuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlY3JlbWVudERlcHRoKCk7Ci0K
LSAgICAgICAgICAgIC8vIFNjb3BlIHRoZSBzZXF1ZW5jZXMgZXhjZXB0IHdoZW4gYXQgdGhlIGds
b2JhbCBzY29wZS4KLSAgICAgICAgICAgIGlmIChkZXB0aCA+IDApIG91dCA8PCAifVxuIjsKLSAg
ICAgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgRU9wUHJvdG90eXBlOiB7Ci0gICAgICAgICAgICAvLyBGdW5j
dGlvbiBkZWNsYXJhdGlvbi4KLSAgICAgICAgICAgIEFTU0VSVCh2aXNpdCA9PSBQcmVWaXNpdCk7
Ci0gICAgICAgICAgICB3cml0ZVZhcmlhYmxlVHlwZShub2RlLT5nZXRUeXBlKCkpOwotICAgICAg
ICAgICAgb3V0IDw8ICIgIiA8PCBoYXNoTmFtZShub2RlLT5nZXROYW1lKCkpOwotCi0gICAgICAg
ICAgICBvdXQgPDwgIigiOwotICAgICAgICAgICAgd3JpdGVGdW5jdGlvblBhcmFtZXRlcnMobm9k
ZS0+Z2V0U2VxdWVuY2UoKSk7Ci0gICAgICAgICAgICBvdXQgPDwgIikiOwotCi0gICAgICAgICAg
ICB2aXNpdENoaWxkcmVuID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIEVPcEZ1bmN0aW9uOiB7Ci0gICAgICAgICAgICAvLyBGdW5jdGlvbiBkZWZp
bml0aW9uLgotICAgICAgICAgICAgQVNTRVJUKHZpc2l0ID09IFByZVZpc2l0KTsKLSAgICAgICAg
ICAgIHdyaXRlVmFyaWFibGVUeXBlKG5vZGUtPmdldFR5cGUoKSk7Ci0gICAgICAgICAgICBvdXQg
PDwgIiAiIDw8IGhhc2hGdW5jdGlvbk5hbWUobm9kZS0+Z2V0TmFtZSgpKTsKLQotICAgICAgICAg
ICAgaW5jcmVtZW50RGVwdGgobm9kZSk7Ci0gICAgICAgICAgICAvLyBGdW5jdGlvbiBkZWZpbml0
aW9uIG5vZGUgY29udGFpbnMgb25lIG9yIHR3byBjaGlsZHJlbiBub2RlcwotICAgICAgICAgICAg
Ly8gcmVwcmVzZW50aW5nIGZ1bmN0aW9uIHBhcmFtZXRlcnMgYW5kIGZ1bmN0aW9uIGJvZHkuIFRo
ZSBsYXR0ZXIKLSAgICAgICAgICAgIC8vIGlzIG5vdCBwcmVzZW50IGluIGNhc2Ugb2YgZW1wdHkg
ZnVuY3Rpb24gYm9kaWVzLgotICAgICAgICAgICAgY29uc3QgVEludGVybVNlcXVlbmNlJiBzZXF1
ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAgICAgICBBU1NFUlQoKHNlcXVlbmNl
LnNpemUoKSA9PSAxKSB8fCAoc2VxdWVuY2Uuc2l6ZSgpID09IDIpKTsKLSAgICAgICAgICAgIFRJ
bnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3Igc2VxSXRlciA9IHNlcXVlbmNlLmJlZ2luKCk7
Ci0KLSAgICAgICAgICAgIC8vIFRyYXZlcnNlIGZ1bmN0aW9uIHBhcmFtZXRlcnMuCi0gICAgICAg
ICAgICBUSW50ZXJtQWdncmVnYXRlKiBwYXJhbXMgPSAoKnNlcUl0ZXIpLT5nZXRBc0FnZ3JlZ2F0
ZSgpOwotICAgICAgICAgICAgQVNTRVJUKHBhcmFtcyAhPSBOVUxMKTsKLSAgICAgICAgICAgIEFT
U0VSVChwYXJhbXMtPmdldE9wKCkgPT0gRU9wUGFyYW1ldGVycyk7Ci0gICAgICAgICAgICBwYXJh
bXMtPnRyYXZlcnNlKHRoaXMpOwotCi0gICAgICAgICAgICAvLyBUcmF2ZXJzZSBmdW5jdGlvbiBi
b2R5LgotICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSogYm9keSA9ICsrc2VxSXRlciAhPSBz
ZXF1ZW5jZS5lbmQoKSA/Ci0gICAgICAgICAgICAgICAgKCpzZXFJdGVyKS0+Z2V0QXNBZ2dyZWdh
dGUoKSA6IE5VTEw7Ci0gICAgICAgICAgICB2aXNpdENvZGVCbG9jayhib2R5KTsKLSAgICAgICAg
ICAgIGRlY3JlbWVudERlcHRoKCk7Ci0gCi0gICAgICAgICAgICAvLyBGdWxseSBwcm9jZXNzZWQ7
IG5vIG5lZWQgdG8gdmlzaXQgY2hpbGRyZW4uCi0gICAgICAgICAgICB2aXNpdENoaWxkcmVuID0g
ZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEVPcEZ1
bmN0aW9uQ2FsbDoKLSAgICAgICAgICAgIC8vIEZ1bmN0aW9uIGNhbGwuCi0gICAgICAgICAgICBp
ZiAodmlzaXQgPT0gUHJlVmlzaXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0
IDw8IGhhc2hGdW5jdGlvbk5hbWUobm9kZS0+Z2V0TmFtZSgpKSA8PCAiKCI7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiKSI7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BQYXJhbWV0ZXJz
OiB7Ci0gICAgICAgICAgICAvLyBGdW5jdGlvbiBwYXJhbWV0ZXJzLgotICAgICAgICAgICAgQVNT
RVJUKHZpc2l0ID09IFByZVZpc2l0KTsKLSAgICAgICAgICAgIG91dCA8PCAiKCI7Ci0gICAgICAg
ICAgICB3cml0ZUZ1bmN0aW9uUGFyYW1ldGVycyhub2RlLT5nZXRTZXF1ZW5jZSgpKTsKLSAgICAg
ICAgICAgIG91dCA8PCAiKSI7Ci0gICAgICAgICAgICB2aXNpdENoaWxkcmVuID0gZmFsc2U7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEVPcERlY2xhcmF0aW9u
OiB7Ci0gICAgICAgICAgICAvLyBWYXJpYWJsZSBkZWNsYXJhdGlvbi4KLSAgICAgICAgICAgIGlm
ICh2aXNpdCA9PSBQcmVWaXNpdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25z
dCBUSW50ZXJtU2VxdWVuY2UmIHNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKLSAgICAg
ICAgICAgICAgICBjb25zdCBUSW50ZXJtVHlwZWQqIHZhcmlhYmxlID0gc2VxdWVuY2UuZnJvbnQo
KS0+Z2V0QXNUeXBlZCgpOwotICAgICAgICAgICAgICAgIHdyaXRlVmFyaWFibGVUeXBlKHZhcmlh
YmxlLT5nZXRUeXBlKCkpOwotICAgICAgICAgICAgICAgIG91dCA8PCAiICI7Ci0gICAgICAgICAg
ICAgICAgbURlY2xhcmluZ1ZhcmlhYmxlcyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG91dCA8PCAiLCAiOwotICAgICAgICAgICAgICAgIG1EZWNsYXJpbmdWYXJpYWJsZXMg
PSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIG1EZWNsYXJpbmdWYXJpYWJsZXMgPSBmYWxzZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0RmxvYXQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgImZsb2F0KCIsIE5VTEwsICIpIik7IGJyZWFr
OwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzI6IHdyaXRlVHJpcGxldCh2aXNpdCwgInZl
YzIoIiwgIiwgIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMzog
d3JpdGVUcmlwbGV0KHZpc2l0LCAidmVjMygiLCAiLCAiLCAiKSIpOyBicmVhazsKLSAgICAgICAg
Y2FzZSBFT3BDb25zdHJ1Y3RWZWM0OiB3cml0ZVRyaXBsZXQodmlzaXQsICJ2ZWM0KCIsICIsICIs
ICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6IHdyaXRlVHJpcGxl
dCh2aXNpdCwgImJvb2woIiwgTlVMTCwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29u
c3RydWN0QlZlYzI6IHdyaXRlVHJpcGxldCh2aXNpdCwgImJ2ZWMyKCIsICIsICIsICIpIik7IGJy
ZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMzOiB3cml0ZVRyaXBsZXQodmlzaXQs
ICJidmVjMygiLCAiLCAiLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RC
VmVjNDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYnZlYzQoIiwgIiwgIiwgIikiKTsgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OiB3cml0ZVRyaXBsZXQodmlzaXQsICJpbnQoIiwg
TlVMTCwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6IHdyaXRl
VHJpcGxldCh2aXNpdCwgIml2ZWMyKCIsICIsICIsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNl
IEVPcENvbnN0cnVjdElWZWMzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJpdmVjMygiLCAiLCAiLCAi
KSIpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjNDogd3JpdGVUcmlwbGV0
KHZpc2l0LCAiaXZlYzQoIiwgIiwgIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29u
c3RydWN0TWF0Mjogd3JpdGVUcmlwbGV0KHZpc2l0LCAibWF0MigiLCAiLCAiLCAiKSIpOyBicmVh
azsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJt
YXQzKCIsICIsICIsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6
IHdyaXRlVHJpcGxldCh2aXNpdCwgIm1hdDQoIiwgIiwgIiwgIikiKTsgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRU9wQ29uc3RydWN0U3RydWN0OgotICAgICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZp
c2l0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlJiB0eXBlID0g
bm9kZS0+Z2V0VHlwZSgpOwotICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBlLmdldEJhc2ljVHlw
ZSgpID09IEVidFN0cnVjdCk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8IGhhc2hOYW1lKHR5cGUu
Z2V0U3RydWN0KCktPm5hbWUoKSkgPDwgIigiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBvdXQgPDwgIiwgIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIikiOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjogcHJlU3RyaW5nID0gImxl
c3NUaGFuKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEdy
ZWF0ZXJUaGFuOiBwcmVTdHJpbmcgPSAiZ3JlYXRlclRoYW4oIjsgZGVsYXllZFdyaXRlID0gdHJ1
ZTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDogcHJlU3RyaW5nID0gImxl
c3NUaGFuRXF1YWwoIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RU9wR3JlYXRlclRoYW5FcXVhbDogcHJlU3RyaW5nID0gImdyZWF0ZXJUaGFuRXF1YWwoIjsgZGVs
YXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wVmVjdG9yRXF1YWw6IHBy
ZVN0cmluZyA9ICJlcXVhbCgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKLSAgICAgICAg
Y2FzZSBFT3BWZWN0b3JOb3RFcXVhbDogcHJlU3RyaW5nID0gIm5vdEVxdWFsKCI7IGRlbGF5ZWRX
cml0ZSA9IHRydWU7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbW1hOiB3cml0ZVRyaXBsZXQo
dmlzaXQsIE5VTEwsICIsICIsIE5VTEwpOyBicmVhazsKLQotICAgICAgICBjYXNlIEVPcE1vZDog
cHJlU3RyaW5nID0gIm1vZCgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKLSAgICAgICAg
Y2FzZSBFT3BQb3c6IHByZVN0cmluZyA9ICJwb3coIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJl
YWs7Ci0gICAgICAgIGNhc2UgRU9wQXRhbjogcHJlU3RyaW5nID0gImF0YW4oIjsgZGVsYXllZFdy
aXRlID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTWluOiBwcmVTdHJpbmcgPSAibWlu
KCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcE1heDogcHJl
U3RyaW5nID0gIm1heCgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKLSAgICAgICAgY2Fz
ZSBFT3BDbGFtcDogcHJlU3RyaW5nID0gImNsYW1wKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJy
ZWFrOwotICAgICAgICBjYXNlIEVPcE1peDogcHJlU3RyaW5nID0gIm1peCgiOyBkZWxheWVkV3Jp
dGUgPSB0cnVlOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BTdGVwOiBwcmVTdHJpbmcgPSAic3Rl
cCgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BTbW9vdGhT
dGVwOiBwcmVTdHJpbmcgPSAic21vb3Roc3RlcCgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVh
azsKLQotICAgICAgICBjYXNlIEVPcERpc3RhbmNlOiBwcmVTdHJpbmcgPSAiZGlzdGFuY2UoIjsg
ZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wRG90OiBwcmVTdHJp
bmcgPSAiZG90KCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOwotICAgICAgICBjYXNlIEVP
cENyb3NzOiBwcmVTdHJpbmcgPSAiY3Jvc3MoIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7
Ci0gICAgICAgIGNhc2UgRU9wRmFjZUZvcndhcmQ6IHByZVN0cmluZyA9ICJmYWNlZm9yd2FyZCgi
OyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BSZWZsZWN0OiBw
cmVTdHJpbmcgPSAicmVmbGVjdCgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKLSAgICAg
ICAgY2FzZSBFT3BSZWZyYWN0OiBwcmVTdHJpbmcgPSAicmVmcmFjdCgiOyBkZWxheWVkV3JpdGUg
PSB0cnVlOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BNdWw6IHByZVN0cmluZyA9ICJtYXRyaXhD
b21wTXVsdCgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKLQotICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKLSAgICB9Ci0gICAgaWYgKGRlbGF5ZWRXcml0ZSAmJiB2
aXNpdCA9PSBQcmVWaXNpdCAmJiBub2RlLT5nZXRVc2VFbXVsYXRlZEZ1bmN0aW9uKCkpCi0gICAg
ICAgIHByZVN0cmluZyA9IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpHZXRFbXVsYXRlZEZ1bmN0
aW9uTmFtZShwcmVTdHJpbmcpOwotICAgIGlmIChkZWxheWVkV3JpdGUpCi0gICAgICAgIHdyaXRl
VHJpcGxldCh2aXNpdCwgcHJlU3RyaW5nLmNfc3RyKCksICIsICIsICIpIik7Ci0gICAgcmV0dXJu
IHZpc2l0Q2hpbGRyZW47Ci19Ci0KLWJvb2wgVE91dHB1dEdMU0xCYXNlOjp2aXNpdExvb3AoVmlz
aXQgdmlzaXQsIFRJbnRlcm1Mb29wKiBub2RlKQotewotICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9
IG9ialNpbmsoKTsKLQotICAgIGluY3JlbWVudERlcHRoKG5vZGUpOwotICAgIC8vIExvb3AgaGVh
ZGVyLgotICAgIFRMb29wVHlwZSBsb29wVHlwZSA9IG5vZGUtPmdldFR5cGUoKTsKLSAgICBpZiAo
bG9vcFR5cGUgPT0gRUxvb3BGb3IpICAvLyBmb3IgbG9vcAotICAgIHsKLSAgICAgICAgaWYgKCFu
b2RlLT5nZXRVbnJvbGxGbGFnKCkpIHsKLSAgICAgICAgICAgIG91dCA8PCAiZm9yICgiOwotICAg
ICAgICAgICAgaWYgKG5vZGUtPmdldEluaXQoKSkKLSAgICAgICAgICAgICAgICBub2RlLT5nZXRJ
bml0KCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAgICAgb3V0IDw8ICI7ICI7Ci0KLSAgICAg
ICAgICAgIGlmIChub2RlLT5nZXRDb25kaXRpb24oKSkKLSAgICAgICAgICAgICAgICBub2RlLT5n
ZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICBvdXQgPDwgIjsgIjsK
LQotICAgICAgICAgICAgaWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkKLSAgICAgICAgICAgICAg
ICBub2RlLT5nZXRFeHByZXNzaW9uKCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAgICAgb3V0
IDw8ICIpXG4iOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKGxvb3BUeXBlID09IEVM
b29wV2hpbGUpICAvLyB3aGlsZSBsb29wCi0gICAgewotICAgICAgICBvdXQgPDwgIndoaWxlICgi
OwotICAgICAgICBBU1NFUlQobm9kZS0+Z2V0Q29uZGl0aW9uKCkgIT0gTlVMTCk7Ci0gICAgICAg
IG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8ICIp
XG4iOwotICAgIH0KLSAgICBlbHNlICAvLyBkby13aGlsZSBsb29wCi0gICAgewotICAgICAgICBB
U1NFUlQobG9vcFR5cGUgPT0gRUxvb3BEb1doaWxlKTsKLSAgICAgICAgb3V0IDw8ICJkb1xuIjsK
LSAgICB9Ci0KLSAgICAvLyBMb29wIGJvZHkuCi0gICAgaWYgKG5vZGUtPmdldFVucm9sbEZsYWco
KSkKLSAgICB7Ci0gICAgICAgIFRMb29wSW5kZXhJbmZvIGluZGV4SW5mbzsKLSAgICAgICAgbUxv
b3BVbnJvbGwuRmlsbExvb3BJbmRleEluZm8obm9kZSwgaW5kZXhJbmZvKTsKLSAgICAgICAgbUxv
b3BVbnJvbGwuUHVzaChpbmRleEluZm8pOwotICAgICAgICB3aGlsZSAobUxvb3BVbnJvbGwuU2F0
aXNmaWVzTG9vcENvbmRpdGlvbigpKQotICAgICAgICB7Ci0gICAgICAgICAgICB2aXNpdENvZGVC
bG9jayhub2RlLT5nZXRCb2R5KCkpOwotICAgICAgICAgICAgbUxvb3BVbnJvbGwuU3RlcCgpOwot
ICAgICAgICB9Ci0gICAgICAgIG1Mb29wVW5yb2xsLlBvcCgpOwotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgICB2aXNpdENvZGVCbG9jayhub2RlLT5nZXRCb2R5KCkpOwotICAgIH0KLQot
ICAgIC8vIExvb3AgZm9vdGVyLgotICAgIGlmIChsb29wVHlwZSA9PSBFTG9vcERvV2hpbGUpICAv
LyBkby13aGlsZSBsb29wCi0gICAgewotICAgICAgICBvdXQgPDwgIndoaWxlICgiOwotICAgICAg
ICBBU1NFUlQobm9kZS0+Z2V0Q29uZGl0aW9uKCkgIT0gTlVMTCk7Ci0gICAgICAgIG5vZGUtPmdl
dENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8ICIpO1xuIjsKLSAg
ICB9Ci0gICAgZGVjcmVtZW50RGVwdGgoKTsKLQotICAgIC8vIE5vIG5lZWQgdG8gdmlzaXQgY2hp
bGRyZW4uIFRoZXkgaGF2ZSBiZWVuIGFscmVhZHkgcHJvY2Vzc2VkIGluCi0gICAgLy8gdGhpcyBm
dW5jdGlvbi4KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVE91dHB1dEdMU0xCYXNlOjp2
aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCogbm9kZSkKLXsKLSAgICBzd2l0
Y2ggKG5vZGUtPmdldEZsb3dPcCgpKQotICAgIHsKLSAgICAgICAgY2FzZSBFT3BLaWxsOiB3cml0
ZVRyaXBsZXQodmlzaXQsICJkaXNjYXJkIiwgTlVMTCwgTlVMTCk7IGJyZWFrOwotICAgICAgICBj
YXNlIEVPcEJyZWFrOiB3cml0ZVRyaXBsZXQodmlzaXQsICJicmVhayIsIE5VTEwsIE5VTEwpOyBi
cmVhazsKLSAgICAgICAgY2FzZSBFT3BDb250aW51ZTogd3JpdGVUcmlwbGV0KHZpc2l0LCAiY29u
dGludWUiLCBOVUxMLCBOVUxMKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wUmV0dXJuOiB3cml0
ZVRyaXBsZXQodmlzaXQsICJyZXR1cm4gIiwgTlVMTCwgTlVMTCk7IGJyZWFrOwotICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdm9pZCBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0Q29kZUJsb2NrKFRJbnRlcm1Ob2RlKiBu
b2RlKSB7Ci0gICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gb2JqU2luaygpOwotICAgIGlmIChub2Rl
ICE9IE5VTEwpCi0gICAgewotICAgICAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAg
Ly8gU2luZ2xlIHN0YXRlbWVudHMgbm90IHBhcnQgb2YgYSBzZXF1ZW5jZSBuZWVkIHRvIGJlIHRl
cm1pbmF0ZWQKLSAgICAgICAgLy8gd2l0aCBzZW1pLWNvbG9uLgotICAgICAgICBpZiAoaXNTaW5n
bGVTdGF0ZW1lbnQobm9kZSkpCi0gICAgICAgICAgICBvdXQgPDwgIjtcbiI7Ci0gICAgfQotICAg
IGVsc2UKLSAgICB7Ci0gICAgICAgIG91dCA8PCAie1xufVxuIjsgIC8vIEVtcHR5IGNvZGUgYmxv
Y2suCi0gICAgfQotfQotCi1UU3RyaW5nIFRPdXRwdXRHTFNMQmFzZTo6Z2V0VHlwZU5hbWUoY29u
c3QgVFR5cGUmIHR5cGUpCi17Ci0gICAgVEluZm9TaW5rQmFzZSBvdXQ7Ci0gICAgaWYgKHR5cGUu
aXNNYXRyaXgoKSkKLSAgICB7Ci0gICAgICAgIG91dCA8PCAibWF0IjsKLSAgICAgICAgb3V0IDw8
IHR5cGUuZ2V0Tm9taW5hbFNpemUoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZS5pc1ZlY3Rv
cigpKQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlLmdldEJhc2ljVHlwZSgpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBjYXNlIEVidEZsb2F0OiBvdXQgPDwgInZlYyI7IGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBFYnRJbnQ6IG91dCA8PCAiaXZlYyI7IGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBFYnRCb29sOiBvdXQgPDwgImJ2ZWMiOyBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIG91dCA8PCB0eXBlLmdl
dE5vbWluYWxTaXplKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmICh0eXBl
LmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKLSAgICAgICAgICAgIG91dCA8PCBoYXNoTmFt
ZSh0eXBlLmdldFN0cnVjdCgpLT5uYW1lKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBv
dXQgPDwgdHlwZS5nZXRCYXNpY1N0cmluZygpOwotICAgIH0KLSAgICByZXR1cm4gVFN0cmluZyhv
dXQuY19zdHIoKSk7Ci19Ci0KLVRTdHJpbmcgVE91dHB1dEdMU0xCYXNlOjpoYXNoTmFtZShjb25z
dCBUU3RyaW5nJiBuYW1lKQotewotICAgIGlmIChtSGFzaEZ1bmN0aW9uID09IE5VTEwgfHwgbmFt
ZS5lbXB0eSgpKQotICAgICAgICByZXR1cm4gbmFtZTsKLSAgICBOYW1lTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1OYW1lTWFwLmZpbmQobmFtZS5jX3N0cigpKTsKLSAgICBpZiAoaXQgIT0gbU5h
bWVNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kLmNfc3RyKCk7Ci0gICAgVFN0
cmluZyBoYXNoZWROYW1lID0gVEludGVybVRyYXZlcnNlcjo6aGFzaChuYW1lLCBtSGFzaEZ1bmN0
aW9uKTsKLSAgICBtTmFtZU1hcFtuYW1lLmNfc3RyKCldID0gaGFzaGVkTmFtZS5jX3N0cigpOwot
ICAgIHJldHVybiBoYXNoZWROYW1lOwotfQotCi1UU3RyaW5nIFRPdXRwdXRHTFNMQmFzZTo6aGFz
aFZhcmlhYmxlTmFtZShjb25zdCBUU3RyaW5nJiBuYW1lKQotewotICAgIGlmIChtU3ltYm9sVGFi
bGUuZmluZEJ1aWx0SW4obmFtZSkgIT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIG5hbWU7Ci0gICAg
cmV0dXJuIGhhc2hOYW1lKG5hbWUpOwotfQotCi1UU3RyaW5nIFRPdXRwdXRHTFNMQmFzZTo6aGFz
aEZ1bmN0aW9uTmFtZShjb25zdCBUU3RyaW5nJiBtYW5nbGVkX25hbWUpCi17Ci0gICAgVFN0cmlu
ZyBuYW1lID0gVEZ1bmN0aW9uOjp1bm1hbmdsZU5hbWUobWFuZ2xlZF9uYW1lKTsKLSAgICBpZiAo
bVN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKG1hbmdsZWRfbmFtZSkgIT0gTlVMTCB8fCBuYW1lID09
ICJtYWluIikKLSAgICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgcmV0dXJuIGhhc2hOYW1lKG5hbWUp
OwotfQotCi1ib29sIFRPdXRwdXRHTFNMQmFzZTo6c3RydWN0RGVjbGFyZWQoY29uc3QgVFN0cnVj
dHVyZSogc3RydWN0dXJlKSBjb25zdAotewotICAgIHJldHVybiBtRGVjbGFyZWRTdHJ1Y3RzLmZp
bmQoc3RydWN0dXJlLT5uYW1lKCkpICE9IG1EZWNsYXJlZFN0cnVjdHMuZW5kKCk7Ci19Ci0KLXZv
aWQgVE91dHB1dEdMU0xCYXNlOjpkZWNsYXJlU3RydWN0KGNvbnN0IFRTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7Ci0KLSAgICBvdXQg
PDwgInN0cnVjdCAiIDw8IGhhc2hOYW1lKHN0cnVjdHVyZS0+bmFtZSgpKSA8PCAie1xuIjsKLSAg
ICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKQotICAgIHsKLSAgICAgICAg
Y29uc3QgVEZpZWxkKiBmaWVsZCA9IGZpZWxkc1tpXTsKLSAgICAgICAgaWYgKHdyaXRlVmFyaWFi
bGVQcmVjaXNpb24oZmllbGQtPnR5cGUoKS0+Z2V0UHJlY2lzaW9uKCkpKQotICAgICAgICAgICAg
b3V0IDw8ICIgIjsKLSAgICAgICAgb3V0IDw8IGdldFR5cGVOYW1lKCpmaWVsZC0+dHlwZSgpKSA8
PCAiICIgPDwgaGFzaE5hbWUoZmllbGQtPm5hbWUoKSk7Ci0gICAgICAgIGlmIChmaWVsZC0+dHlw
ZSgpLT5pc0FycmF5KCkpCi0gICAgICAgICAgICBvdXQgPDwgYXJyYXlCcmFja2V0cygqZmllbGQt
PnR5cGUoKSk7Ci0gICAgICAgIG91dCA8PCAiO1xuIjsKLSAgICB9Ci0gICAgb3V0IDw8ICJ9IjsK
LQotICAgIG1EZWNsYXJlZFN0cnVjdHMuaW5zZXJ0KHN0cnVjdHVyZS0+bmFtZSgpKTsKLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNM
QmFzZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0xC
YXNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5ODY4YzA5Y2NmNzU0OTAwYzk4
NDE3NTA2YzkwN2JiYWIyMTdjYmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdM
U0xCYXNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwotCi0jaWZuZGVmIENST1NTQ09NUElMRVJHTFNMX09VVFBVVEdMU0xCQVNFX0hfCi0jZGVmaW5l
IENST1NTQ09NUElMRVJHTFNMX09VVFBVVEdMU0xCQVNFX0hfCi0KLSNpbmNsdWRlIDxzZXQ+Ci0K
LSNpbmNsdWRlICJjb21waWxlci9Gb3JMb29wVW5yb2xsLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIv
aW50ZXJtZWRpYXRlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VDb250ZXh0LmgiCi0KLWNs
YXNzIFRPdXRwdXRHTFNMQmFzZSA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCi17Ci1wdWJsaWM6
Ci0gICAgVE91dHB1dEdMU0xCYXNlKFRJbmZvU2lua0Jhc2UmIG9ialNpbmssCi0gICAgICAgICAg
ICAgICAgICAgIFNoQXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJhdGVneSwK
LSAgICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24sCi0gICAg
ICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCi0gICAgICAgICAgICAgICAgICAgIFRT
eW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgVEluZm9TaW5rQmFz
ZSYgb2JqU2luaygpIHsgcmV0dXJuIG1PYmpTaW5rOyB9Ci0gICAgdm9pZCB3cml0ZVRyaXBsZXQo
VmlzaXQgdmlzaXQsIGNvbnN0IGNoYXIqIHByZVN0ciwgY29uc3QgY2hhciogaW5TdHIsIGNvbnN0
IGNoYXIqIHBvc3RTdHIpOwotICAgIHZvaWQgd3JpdGVWYXJpYWJsZVR5cGUoY29uc3QgVFR5cGUm
IHR5cGUpOwotICAgIHZpcnR1YWwgYm9vbCB3cml0ZVZhcmlhYmxlUHJlY2lzaW9uKFRQcmVjaXNp
b24gcHJlY2lzaW9uKSA9IDA7Ci0gICAgdm9pZCB3cml0ZUZ1bmN0aW9uUGFyYW1ldGVycyhjb25z
dCBUSW50ZXJtU2VxdWVuY2UmIGFyZ3MpOwotICAgIGNvbnN0IENvbnN0YW50VW5pb24qIHdyaXRl
Q29uc3RhbnRVbmlvbihjb25zdCBUVHlwZSYgdHlwZSwgY29uc3QgQ29uc3RhbnRVbmlvbiogcENv
bnN0VW5pb24pOwotICAgIFRTdHJpbmcgZ2V0VHlwZU5hbWUoY29uc3QgVFR5cGUmIHR5cGUpOwot
Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpOwotICAg
IHZpcnR1YWwgdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qIG5v
ZGUpOwotICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJp
bmFyeSogbm9kZSk7Ci0gICAgdmlydHVhbCBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1VbmFyeSogbm9kZSk7Ci0gICAgdmlydHVhbCBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0
IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBub2RlKTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRB
Z2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpOwotICAgIHZpcnR1
YWwgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKiBub2RlKTsKLSAgICB2
aXJ0dWFsIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqIG5vZGUp
OwotCi0gICAgdm9pZCB2aXNpdENvZGVCbG9jayhUSW50ZXJtTm9kZSogbm9kZSk7Ci0KLQotICAg
IC8vIFJldHVybiB0aGUgb3JpZ2luYWwgbmFtZSBpZiBoYXNoIGZ1bmN0aW9uIHBvaW50ZXIgaXMg
TlVMTDsKLSAgICAvLyBvdGhlcndpc2UgcmV0dXJuIHRoZSBoYXNoZWQgbmFtZS4KLSAgICBUU3Ry
aW5nIGhhc2hOYW1lKGNvbnN0IFRTdHJpbmcmIG5hbWUpOwotICAgIC8vIFNhbWUgYXMgaGFzaE5h
bWUoKSwgYnV0IHdpdGhvdXQgaGFzaGluZyBidWlsdC1pbiB2YXJpYWJsZXMuCi0gICAgVFN0cmlu
ZyBoYXNoVmFyaWFibGVOYW1lKGNvbnN0IFRTdHJpbmcmIG5hbWUpOwotICAgIC8vIFNhbWUgYXMg
aGFzaE5hbWUoKSwgYnV0IHdpdGhvdXQgaGFzaGluZyBidWlsdC1pbiBmdW5jdGlvbnMuCi0gICAg
VFN0cmluZyBoYXNoRnVuY3Rpb25OYW1lKGNvbnN0IFRTdHJpbmcmIG1hbmdsZWRfbmFtZSk7Ci0K
LXByaXZhdGU6Ci0gICAgYm9vbCBzdHJ1Y3REZWNsYXJlZChjb25zdCBUU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpIGNvbnN0OwotICAgIHZvaWQgZGVjbGFyZVN0cnVjdChjb25zdCBUU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpOwotCi0gICAgVEluZm9TaW5rQmFzZSYgbU9ialNpbms7Ci0gICAgYm9vbCBtRGVj
bGFyaW5nVmFyaWFibGVzOwotCi0gICAgLy8gU3RydWN0cyBhcmUgZGVjbGFyZWQgYXMgdGhlIHRy
ZWUgaXMgdHJhdmVyc2VkLiBUaGlzIHNldCBjb250YWlucyBhbGwKLSAgICAvLyB0aGUgc3RydWN0
cyBhbHJlYWR5IGRlY2xhcmVkLiBJdCBpcyBtYWludGFpbmVkIHNvIHRoYXQgYSBzdHJ1Y3QgaXMK
LSAgICAvLyBkZWNsYXJlZCBvbmx5IG9uY2UuCi0gICAgdHlwZWRlZiBzdGQ6OnNldDxUU3RyaW5n
PiBEZWNsYXJlZFN0cnVjdHM7Ci0gICAgRGVjbGFyZWRTdHJ1Y3RzIG1EZWNsYXJlZFN0cnVjdHM7
Ci0KLSAgICBGb3JMb29wVW5yb2xsIG1Mb29wVW5yb2xsOwotCi0gICAgU2hBcnJheUluZGV4Q2xh
bXBpbmdTdHJhdGVneSBtQ2xhbXBpbmdTdHJhdGVneTsKLQotICAgIC8vIG5hbWUgaGFzaGluZy4K
LSAgICBTaEhhc2hGdW5jdGlvbjY0IG1IYXNoRnVuY3Rpb247Ci0KLSAgICBOYW1lTWFwJiBtTmFt
ZU1hcDsKLQotICAgIFRTeW1ib2xUYWJsZSYgbVN5bWJvbFRhYmxlOwotfTsKLQotI2VuZGlmICAv
LyBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRHTFNMQkFTRV9IXwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBhNzE1ZjIyOWM5ODA0YjIwYWJmODBmNzZmZDI3NTJkMzE2MDk1ZGEw
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDMxMzMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBp
bGVyL091dHB1dEhMU0wuaCIKLQotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5j
bHVkZSAiY29tcGlsZXIvZGVidWcuaCIKLSNpbmNsdWRlICJjb21waWxlci9EZXRlY3REaXNjb250
aW51aXR5LmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKLSNpbmNsdWRlICJjb21w
aWxlci9TZWFyY2hTeW1ib2wuaCIKLSNpbmNsdWRlICJjb21waWxlci9VbmZvbGRTaG9ydENpcmN1
aXQuaCIKLSNpbmNsdWRlICJjb21waWxlci9Ob2RlU2VhcmNoLmgiCi0KLSNpbmNsdWRlIDxhbGdv
cml0aG0+Ci0jaW5jbHVkZSA8Y2Zsb2F0PgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLW5hbWVzcGFj
ZSBzaAotewotLy8gSW50ZWdlciB0byBUU3RyaW5nIGNvbnZlcnNpb24KLVRTdHJpbmcgc3RyKGlu
dCBpKQotewotICAgIGNoYXIgYnVmZmVyWzIwXTsKLSAgICBzbnByaW50ZihidWZmZXIsIHNpemVv
ZihidWZmZXIpLCAiJWQiLCBpKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1PdXRwdXRITFNM
OjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNvbnRleHQsIGNvbnN0IFNoQnVpbHRJblJlc291
cmNlcyYgcmVzb3VyY2VzLCBTaFNoYWRlck91dHB1dCBvdXRwdXRUeXBlKQotICAgIDogVEludGVy
bVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwgbUNvbnRleHQoY29udGV4dCksIG1PdXRwdXRU
eXBlKG91dHB1dFR5cGUpCi17Ci0gICAgbVVuZm9sZFNob3J0Q2lyY3VpdCA9IG5ldyBVbmZvbGRT
aG9ydENpcmN1aXQoY29udGV4dCwgdGhpcyk7Ci0gICAgbUluc2lkZUZ1bmN0aW9uID0gZmFsc2U7
Ci0KLSAgICBtVXNlc1RleHR1cmUyRCA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZTJEX2JpYXMg
PSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmUyRFByb2ogPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1
cmUyRFByb2pfYmlhcyA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZTJEUHJvakxvZCA9IGZhbHNl
OwotICAgIG1Vc2VzVGV4dHVyZTJETG9kID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlQ3ViZSA9
IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZUN1YmVfYmlhcyA9IGZhbHNlOwotICAgIG1Vc2VzVGV4
dHVyZUN1YmVMb2QgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmUyRExvZDAgPSBmYWxzZTsKLSAg
ICBtVXNlc1RleHR1cmUyRExvZDBfYmlhcyA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZTJEUHJv
akxvZDAgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QwX2JpYXMgPSBmYWxzZTsK
LSAgICBtVXNlc1RleHR1cmVDdWJlTG9kMCA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZUN1YmVM
b2QwX2JpYXMgPSBmYWxzZTsKLSAgICBtVXNlc0ZyYWdDb2xvciA9IGZhbHNlOwotICAgIG1Vc2Vz
RnJhZ0RhdGEgPSBmYWxzZTsKLSAgICBtVXNlc0RlcHRoUmFuZ2UgPSBmYWxzZTsKLSAgICBtVXNl
c0ZyYWdDb29yZCA9IGZhbHNlOwotICAgIG1Vc2VzUG9pbnRDb29yZCA9IGZhbHNlOwotICAgIG1V
c2VzRnJvbnRGYWNpbmcgPSBmYWxzZTsKLSAgICBtVXNlc1BvaW50U2l6ZSA9IGZhbHNlOwotICAg
IG1Vc2VzRnJhZ0RlcHRoID0gZmFsc2U7Ci0gICAgbVVzZXNYb3IgPSBmYWxzZTsKLSAgICBtVXNl
c01vZDEgPSBmYWxzZTsKLSAgICBtVXNlc01vZDJ2ID0gZmFsc2U7Ci0gICAgbVVzZXNNb2QyZiA9
IGZhbHNlOwotICAgIG1Vc2VzTW9kM3YgPSBmYWxzZTsKLSAgICBtVXNlc01vZDNmID0gZmFsc2U7
Ci0gICAgbVVzZXNNb2Q0diA9IGZhbHNlOwotICAgIG1Vc2VzTW9kNGYgPSBmYWxzZTsKLSAgICBt
VXNlc0ZhY2Vmb3J3YXJkMSA9IGZhbHNlOwotICAgIG1Vc2VzRmFjZWZvcndhcmQyID0gZmFsc2U7
Ci0gICAgbVVzZXNGYWNlZm9yd2FyZDMgPSBmYWxzZTsKLSAgICBtVXNlc0ZhY2Vmb3J3YXJkNCA9
IGZhbHNlOwotICAgIG1Vc2VzQXRhbjJfMSA9IGZhbHNlOwotICAgIG1Vc2VzQXRhbjJfMiA9IGZh
bHNlOwotICAgIG1Vc2VzQXRhbjJfMyA9IGZhbHNlOwotICAgIG1Vc2VzQXRhbjJfNCA9IGZhbHNl
OwotICAgIG1Vc2VzRGlzY2FyZFJld3JpdGluZyA9IGZhbHNlOwotCi0gICAgbU51bVJlbmRlclRh
cmdldHMgPSByZXNvdXJjZXMuRVhUX2RyYXdfYnVmZmVycyA/IHJlc291cmNlcy5NYXhEcmF3QnVm
ZmVycyA6IDE7Ci0KLSAgICBtU2NvcGVEZXB0aCA9IDA7Ci0KLSAgICBtVW5pcXVlSW5kZXggPSAw
OwotCi0gICAgbUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkgPSBmYWxzZTsKLSAgICBtT3V0cHV0
TG9kMEZ1bmN0aW9uID0gZmFsc2U7Ci0gICAgbUluc2lkZURpc2NvbnRpbnVvdXNMb29wID0gZmFs
c2U7Ci0KLSAgICBtRXhjZXNzaXZlTG9vcEluZGV4ID0gTlVMTDsKLQotICAgIGlmIChtT3V0cHV0
VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgewotICAgICAgICBpZiAobUNvbnRleHQuc2hh
ZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1V
bmlmb3JtUmVnaXN0ZXIgPSAzOyAgIC8vIFJlc2VydmUgcmVnaXN0ZXJzIGZvciBkeF9EZXB0aFJh
bmdlLCBkeF9WaWV3Q29vcmRzIGFuZCBkeF9EZXB0aEZyb250Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtVW5pZm9ybVJlZ2lzdGVyID0gMjsgICAvLyBS
ZXNlcnZlIHJlZ2lzdGVycyBmb3IgZHhfRGVwdGhSYW5nZSBhbmQgZHhfVmlld0FkanVzdAotICAg
ICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG1Vbmlmb3JtUmVnaXN0ZXIg
PSAwOwotICAgIH0KLQotICAgIG1TYW1wbGVyUmVnaXN0ZXIgPSAwOwotfQotCi1PdXRwdXRITFNM
Ojp+T3V0cHV0SExTTCgpCi17Ci0gICAgZGVsZXRlIG1VbmZvbGRTaG9ydENpcmN1aXQ7Ci19Ci0K
LXZvaWQgT3V0cHV0SExTTDo6b3V0cHV0KCkKLXsKLSAgICBtQ29udGFpbnNMb29wRGlzY29udGlu
dWl0eSA9IG1Db250ZXh0LnNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSICYmIGNvbnRh
aW5zTG9vcERpc2NvbnRpbnVpdHkobUNvbnRleHQudHJlZVJvb3QpOwotCi0gICAgbUNvbnRleHQu
dHJlZVJvb3QtPnRyYXZlcnNlKHRoaXMpOyAgIC8vIE91dHB1dCB0aGUgYm9keSBmaXJzdCB0byBk
ZXRlcm1pbmUgd2hhdCBoYXMgdG8gZ28gaW4gdGhlIGhlYWRlcgotICAgIGhlYWRlcigpOwotCi0g
ICAgbUNvbnRleHQuaW5mb1NpbmsoKS5vYmogPDwgbUhlYWRlci5jX3N0cigpOwotICAgIG1Db250
ZXh0LmluZm9TaW5rKCkub2JqIDw8IG1Cb2R5LmNfc3RyKCk7Ci19Ci0KLVRJbmZvU2lua0Jhc2Ug
Jk91dHB1dEhMU0w6OmdldEJvZHlTdHJlYW0oKQotewotICAgIHJldHVybiBtQm9keTsKLX0KLQot
Y29uc3QgQWN0aXZlVW5pZm9ybXMgJk91dHB1dEhMU0w6OmdldFVuaWZvcm1zKCkKLXsKLSAgICBy
ZXR1cm4gbUFjdGl2ZVVuaWZvcm1zOwotfQotCi1pbnQgT3V0cHV0SExTTDo6dmVjdG9yU2l6ZShj
b25zdCBUVHlwZSAmdHlwZSkgY29uc3QKLXsKLSAgICBpbnQgZWxlbWVudFNpemUgPSB0eXBlLmlz
TWF0cml4KCkgPyB0eXBlLmdldE5vbWluYWxTaXplKCkgOiAxOwotICAgIGludCBhcnJheVNpemUg
PSB0eXBlLmlzQXJyYXkoKSA/IHR5cGUuZ2V0QXJyYXlTaXplKCkgOiAxOwotCi0gICAgcmV0dXJu
IGVsZW1lbnRTaXplICogYXJyYXlTaXplOwotfQotCi12b2lkIE91dHB1dEhMU0w6OmhlYWRlcigp
Ci17Ci0gICAgU2hTaGFkZXJUeXBlIHNoYWRlclR5cGUgPSBtQ29udGV4dC5zaGFkZXJUeXBlOwot
ICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1IZWFkZXI7Ci0KLSAgICBmb3IgKFN0cnVjdERlY2xh
cmF0aW9uczo6aXRlcmF0b3Igc3RydWN0RGVjbGFyYXRpb24gPSBtU3RydWN0RGVjbGFyYXRpb25z
LmJlZ2luKCk7IHN0cnVjdERlY2xhcmF0aW9uICE9IG1TdHJ1Y3REZWNsYXJhdGlvbnMuZW5kKCk7
IHN0cnVjdERlY2xhcmF0aW9uKyspCi0gICAgewotICAgICAgICBvdXQgPDwgKnN0cnVjdERlY2xh
cmF0aW9uOwotICAgIH0KLQotICAgIGZvciAoQ29uc3RydWN0b3JzOjppdGVyYXRvciBjb25zdHJ1
Y3RvciA9IG1Db25zdHJ1Y3RvcnMuYmVnaW4oKTsgY29uc3RydWN0b3IgIT0gbUNvbnN0cnVjdG9y
cy5lbmQoKTsgY29uc3RydWN0b3IrKykKLSAgICB7Ci0gICAgICAgIG91dCA8PCAqY29uc3RydWN0
b3I7Ci0gICAgfQotCi0gICAgVFN0cmluZyB1bmlmb3JtczsKLSAgICBUU3RyaW5nIHZhcnlpbmdz
OwotICAgIFRTdHJpbmcgYXR0cmlidXRlczsKLQotICAgIGZvciAoUmVmZXJlbmNlZFN5bWJvbHM6
OmNvbnN0X2l0ZXJhdG9yIHVuaWZvcm0gPSBtUmVmZXJlbmNlZFVuaWZvcm1zLmJlZ2luKCk7IHVu
aWZvcm0gIT0gbVJlZmVyZW5jZWRVbmlmb3Jtcy5lbmQoKTsgdW5pZm9ybSsrKQotICAgIHsKLSAg
ICAgICAgY29uc3QgVFR5cGUgJnR5cGUgPSB1bmlmb3JtLT5zZWNvbmQtPmdldFR5cGUoKTsKLSAg
ICAgICAgY29uc3QgVFN0cmluZyAmbmFtZSA9IHVuaWZvcm0tPnNlY29uZC0+Z2V0U3ltYm9sKCk7
Ci0KLSAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQgJiYgSXNTYW1w
bGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKSAgIC8vIEFsc28gZGVjbGFyZSB0aGUgdGV4dHVyZQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSBzYW1wbGVyUmVnaXN0ZXIobVJlZmVy
ZW5jZWRVbmlmb3Jtc1tuYW1lXSk7Ci0KLSAgICAgICAgICAgIHVuaWZvcm1zICs9ICJ1bmlmb3Jt
IFNhbXBsZXJTdGF0ZSBzYW1wbGVyXyIgKyBkZWNvcmF0ZVVuaWZvcm0obmFtZSwgdHlwZSkgKyBh
cnJheVN0cmluZyh0eXBlKSArIAotICAgICAgICAgICAgICAgICAgICAgICAgIiA6IHJlZ2lzdGVy
KHMiICsgc3RyKGluZGV4KSArICIpO1xuIjsKLQotICAgICAgICAgICAgdW5pZm9ybXMgKz0gInVu
aWZvcm0gIiArIHRleHR1cmVTdHJpbmcodHlwZSkgKyAiIHRleHR1cmVfIiArIGRlY29yYXRlVW5p
Zm9ybShuYW1lLCB0eXBlKSArIGFycmF5U3RyaW5nKHR5cGUpICsgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAiIDogcmVnaXN0ZXIodCIgKyBzdHIoaW5kZXgpICsgIik7XG4iOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgdW5pZm9ybXMgKz0gInVuaWZv
cm0gIiArIHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKyBkZWNvcmF0ZVVuaWZvcm0obmFtZSwgdHlw
ZSkgKyBhcnJheVN0cmluZyh0eXBlKSArIAotICAgICAgICAgICAgICAgICAgICAgICAgIiA6IHJl
Z2lzdGVyKCIgKyByZWdpc3RlclN0cmluZyhtUmVmZXJlbmNlZFVuaWZvcm1zW25hbWVdKSArICIp
O1xuIjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoUmVmZXJlbmNlZFN5bWJvbHM6OmNv
bnN0X2l0ZXJhdG9yIHZhcnlpbmcgPSBtUmVmZXJlbmNlZFZhcnlpbmdzLmJlZ2luKCk7IHZhcnlp
bmcgIT0gbVJlZmVyZW5jZWRWYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQotICAgIHsKLSAgICAg
ICAgY29uc3QgVFR5cGUgJnR5cGUgPSB2YXJ5aW5nLT5zZWNvbmQtPmdldFR5cGUoKTsKLSAgICAg
ICAgY29uc3QgVFN0cmluZyAmbmFtZSA9IHZhcnlpbmctPnNlY29uZC0+Z2V0U3ltYm9sKCk7Ci0K
LSAgICAgICAgLy8gUHJvZ3JhbSBsaW5raW5nIGRlcGVuZHMgb24gdGhpcyBleGFjdCBmb3JtYXQK
LSAgICAgICAgdmFyeWluZ3MgKz0gInN0YXRpYyAiICsgdHlwZVN0cmluZyh0eXBlKSArICIgIiAr
IGRlY29yYXRlKG5hbWUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAiID0gIiArIGluaXRpYWxpemVy
KHR5cGUpICsgIjtcbiI7Ci0gICAgfQotCi0gICAgZm9yIChSZWZlcmVuY2VkU3ltYm9sczo6Y29u
c3RfaXRlcmF0b3IgYXR0cmlidXRlID0gbVJlZmVyZW5jZWRBdHRyaWJ1dGVzLmJlZ2luKCk7IGF0
dHJpYnV0ZSAhPSBtUmVmZXJlbmNlZEF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAg
IHsKLSAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgPSBhdHRyaWJ1dGUtPnNlY29uZC0+Z2V0VHlw
ZSgpOwotICAgICAgICBjb25zdCBUU3RyaW5nICZuYW1lID0gYXR0cmlidXRlLT5zZWNvbmQtPmdl
dFN5bWJvbCgpOwotCi0gICAgICAgIGF0dHJpYnV0ZXMgKz0gInN0YXRpYyAiICsgdHlwZVN0cmlu
Zyh0eXBlKSArICIgIiArIGRlY29yYXRlKG5hbWUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAiID0g
IiArIGluaXRpYWxpemVyKHR5cGUpICsgIjtcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1Vc2VzRGlz
Y2FyZFJld3JpdGluZykKLSAgICB7Ci0gICAgICAgIG91dCA8PCAiI2RlZmluZSBBTkdMRV9VU0VT
X0RJU0NBUkRfUkVXUklUSU5HIiA8PCAiXG4iOwotICAgIH0KLQotICAgIGlmIChzaGFkZXJUeXBl
ID09IFNIX0ZSQUdNRU5UX1NIQURFUikKLSAgICB7Ci0gICAgICAgIFRFeHRlbnNpb25CZWhhdmlv
cjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1Db250ZXh0LmV4dGVuc2lvbkJlaGF2aW9yKCkuZmlu
ZCgiR0xfRVhUX2RyYXdfYnVmZmVycyIpOwotICAgICAgICBjb25zdCBib29sIHVzaW5nTVJURXh0
ZW5zaW9uID0gKGl0ZXIgIT0gbUNvbnRleHQuZXh0ZW5zaW9uQmVoYXZpb3IoKS5lbmQoKSAmJiAo
aXRlci0+c2Vjb25kID09IEVCaEVuYWJsZSB8fCBpdGVyLT5zZWNvbmQgPT0gRUJoUmVxdWlyZSkp
OwotCi0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBudW1Db2xvclZhbHVlcyA9IHVzaW5nTVJU
RXh0ZW5zaW9uID8gbU51bVJlbmRlclRhcmdldHMgOiAxOwotCi0gICAgICAgIG91dCA8PCAiLy8g
VmFyeWluZ3NcbiI7Ci0gICAgICAgIG91dCA8PCAgdmFyeWluZ3M7Ci0gICAgICAgIG91dCA8PCAi
XG4iCi0gICAgICAgICAgICAgICAic3RhdGljIGZsb2F0NCBnbF9Db2xvclsiIDw8IG51bUNvbG9y
VmFsdWVzIDw8ICJdID1cbiIKLSAgICAgICAgICAgICAgICJ7XG4iOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IG51bUNvbG9yVmFsdWVzOyBpKyspCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0NCgwLCAwLCAwLCAwKSI7Ci0gICAgICAgICAgICBp
ZiAoaSArIDEgIT0gbnVtQ29sb3JWYWx1ZXMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgb3V0IDw8ICIsIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG91dCA8PCAiXG4iOwot
ICAgICAgICB9Ci0gICAgICAgIG91dCA8PCAifTtcbiI7Ci0KLSAgICAgICAgaWYgKG1Vc2VzRnJh
Z0RlcHRoKQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgInN0YXRpYyBmbG9hdCBnbF9E
ZXB0aCA9IDAuMDtcbiI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVVzZXNGcmFnQ29vcmQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGZsb2F0NCBnbF9GcmFnQ29v
cmQgPSBmbG9hdDQoMCwgMCwgMCwgMCk7XG4iOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1V
c2VzUG9pbnRDb29yZCkKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgZmxv
YXQyIGdsX1BvaW50Q29vcmQgPSBmbG9hdDIoMC41LCAwLjUpO1xuIjsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChtVXNlc0Zyb250RmFjaW5nKQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQg
PDwgInN0YXRpYyBib29sIGdsX0Zyb250RmFjaW5nID0gZmFsc2U7XG4iOwotICAgICAgICB9Ci0K
LSAgICAgICAgb3V0IDw8ICJcbiI7Ci0KLSAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICJzdHJ1Y3QgZ2xfRGVwdGhSYW5nZVBhcmFtZXRl
cnNcbiIKLSAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAg
ZmxvYXQgbmVhcjtcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGZhcjtcbiIKLSAg
ICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGRpZmY7XG4iCi0gICAgICAgICAgICAgICAgICAg
In07XG4iCi0gICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBvdXQgPDwgImNidWZmZXIgRHJpdmVyQ29uc3RhbnRzIDogcmVnaXN0ZXIoYjEpXG4iCi0gICAg
ICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICAgICAgICAgIGlmIChtVXNlc0RlcHRoUmFuZ2Up
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQzIGR4X0Rl
cHRoUmFuZ2UgOiBwYWNrb2Zmc2V0KGMwKTtcbiI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmIChtVXNlc0ZyYWdDb29yZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBv
dXQgPDwgIiAgICBmbG9hdDQgZHhfVmlld0Nvb3JkcyA6IHBhY2tvZmZzZXQoYzEpO1xuIjsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1Vc2VzRnJhZ0Nvb3JkIHx8IG1Vc2VzRnJv
bnRGYWNpbmcpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxv
YXQzIGR4X0RlcHRoRnJvbnQgOiBwYWNrb2Zmc2V0KGMyKTtcbiI7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIG91dCA8PCAifTtcbiI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAobVVzZXNEZXB0aFJhbmdlKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIG91dCA8PCAidW5pZm9ybSBmbG9hdDMgZHhfRGVwdGhSYW5nZSA6IHJl
Z2lzdGVyKGMwKTsiOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobVVzZXNGcmFn
Q29vcmQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJ1bmlmb3JtIGZs
b2F0NCBkeF9WaWV3Q29vcmRzIDogcmVnaXN0ZXIoYzEpO1xuIjsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKG1Vc2VzRnJhZ0Nvb3JkIHx8IG1Vc2VzRnJvbnRGYWNpbmcpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJ1bmlmb3JtIGZsb2F0MyBkeF9EZXB0
aEZyb250IDogcmVnaXN0ZXIoYzIpO1xuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIG91dCA8PCAiXG4iOwotCi0gICAgICAgIGlmIChtVXNlc0RlcHRoUmFuZ2UpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJz
IGdsX0RlcHRoUmFuZ2UgPSB7ZHhfRGVwdGhSYW5nZS54LCBkeF9EZXB0aFJhbmdlLnksIGR4X0Rl
cHRoUmFuZ2Uuen07XG4iCi0gICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgb3V0IDw8ICB1bmlmb3JtczsKLSAgICAgICAgb3V0IDw8ICJcbiI7Ci0K
LSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
bU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChzYW1wbGVyMkQgcywgZmxvYXQyIHQp
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIHRleDJEKHMsIHQpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxu
IgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoVGV4dHVyZTJE
IHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDIgdXYpXG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlKHMsIHV2
KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmUyRF9iaWFzKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChzYW1w
bGVyMkQgcywgZmxvYXQyIHQsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEYmlhcyhzLCBm
bG9hdDQodC54LCB0LnksIDAsIGJpYXMpKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1c
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKFRleHR1cmUy
RCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAg
ICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0
LlNhbXBsZUJpYXMocywgdXYsIGJpYXMpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxu
IgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1Vc2VzVGV4
dHVyZTJEUHJvaikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNI
X0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZs
b2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDMgdClcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4g
dGV4MkRwcm9qKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgdC56KSk7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDQg
dClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdGV4MkRwcm9qKHMsIHQpO1xuIgotICAgICAgICAgICAgICAgICAgICAg
ICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9q
KFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dylcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5T
YW1wbGUocywgZmxvYXQyKHV2dy54IC8gdXZ3LnosIHV2dy55IC8gdXZ3LnopKTtcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVyZTJEIHQs
IFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
e1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZShzLCBmbG9h
dDIodXZ3LnggLyB1dncudywgdXZ3LnkgLyB1dncudykpO1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91
dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0MyB0
LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCAvIHQueiwg
dC55IC8gdC56LCAwLCBiaWFzKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0
NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQgYmlhcylcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAg
ICByZXR1cm4gdGV4MkRiaWFzKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAvIHQudywgMCwgYmlh
cykpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5
cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBv
dXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUg
cywgZmxvYXQzIHV2dywgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVCaWFzKHMsIGZs
b2F0Mih1dncueCAvIHV2dy56LCB1dncueSAvIHV2dy56KSwgYmlhcyk7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKFRleHR1cmUyRCB0LCBTYW1w
bGVyU3RhdGUgcywgZmxvYXQ0IHV2dywgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVC
aWFzKHMsIGZsb2F0Mih1dncueCAvIHV2dy53LCB1dncueSAvIHV2dy53KSwgYmlhcyk7XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShzYW1wbGVyQ1VCRSBz
LCBmbG9hdDMgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRShzLCB0KTtcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVy
ZUN1YmUoVGV4dHVyZUN1YmUgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncpXG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHQuU2FtcGxlKHMsIHV2dyk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVVzZXNUZXh0dXJl
Q3ViZV9iaWFzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hf
SExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxv
YXQ0IGdsX3RleHR1cmVDdWJlKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxu
IgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAi
ICAgIHJldHVybiB0ZXhDVUJFYmlhcyhzLCBmbG9hdDQodC54LCB0LnksIHQueiwgYmlhcykpO1xu
IgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
XG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0g
U0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwg
ImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShUZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxv
YXQzIHV2dywgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVCaWFzKHMsIHV2dywgYmlh
cyk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGVzZSAqTG9kMCBpbnRyaW5zaWNzIGFyZSBub3Qg
YXZhaWxhYmxlIGluIEdMIGZyYWdtZW50IHNoYWRlcnMuCi0gICAgICAgIC8vIFRoZXkgYXJlIHVz
ZWQgdG8gc2FtcGxlIHVzaW5nIGRpc2NvbnRpbnVvdXMgdGV4dHVyZSBjb29yZGluYXRlcy4KLSAg
ICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJETG9kMCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRMb2QwKHNhbXBsZXIyRCBzLCBmbG9h
dDIgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55LCAwLCAwKSk7XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJc
biI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBT
SF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAi
ZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9h
dDIgdXYpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXYsIDApO1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoc2FtcGxlcjJEIHMs
IGZsb2F0MiB0LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54
LCB0LnksIDAsIDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYg
KG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kMChUZXh0dXJlMkQgdCwgU2Ft
cGxlclN0YXRlIHMsIGZsb2F0MiB1diwgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVM
ZXZlbChzLCB1diwgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRQcm9q
TG9kMCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5
X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBn
bF90ZXh0dXJlMkRQcm9qTG9kMChzYW1wbGVyMkQgcywgZmxvYXQzIHQpXG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRl
eDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQueiwgMCwgMCkpO1xuIgotICAgICAg
ICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZChzYW1wbGVyMkQg
cywgZmxvYXQ0IHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIHQu
eSAvIHQudywgMCwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAg
ICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBp
ZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kMChUZXh0dXJlMkQg
dCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncpXG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwo
cywgZmxvYXQyKHV2dy54IC8gdXZ3LnosIHV2dy55IC8gdXZ3LnopLCAwKTtcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAg
ICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwKFRleHR1cmUyRCB0
LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQ0IHV2dylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChz
LCBmbG9hdDIodXZ3LnggLyB1dncudywgdXZ3LnkgLyB1dncudyksIDApO1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJvakxvZDBfYmlhcykKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kMF9iaWFz
KHNhbXBsZXIyRCBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2Qo
cywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCAwKSk7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kX2JpYXMoc2FtcGxlcjJEIHMs
IGZsb2F0NCB0LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54
IC8gdC53LCB0LnkgLyB0LncsIDAsIDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1c
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZF9i
aWFzKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQgYmlhcylc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIodXZ3LnggLyB1dncueiwgdXZ3Lnkg
LyB1dncueiksIDApO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAg
ICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4
dHVyZTJEUHJvakxvZF9iaWFzKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQ0IHV2
dywgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIodXZ3Lngg
LyB1dncudywgdXZ3LnkgLyB1dncudyksIDApO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAi
fVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1Vc2Vz
VGV4dHVyZUN1YmVMb2QwKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUg
PT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8
PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChzYW1wbGVyQ1VCRSBzLCBmbG9hdDMgdClcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAg
ICByZXR1cm4gdGV4Q1VCRWxvZChzLCBmbG9hdDQodC54LCB0LnksIHQueiwgMCkpO1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExT
TDExX09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0
NCBnbF90ZXh0dXJlQ3ViZUxvZDAoVGV4dHVyZUN1YmUgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0
MyB1dncpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXZ3LCAwKTtcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChzYW1wbGVy
Q1VCRSBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRWxvZChzLCBm
bG9hdDQodC54LCB0LnksIHQueiwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxu
IgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxvZDAoVGV4
dHVyZUN1YmUgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncsIGZsb2F0IGJpYXMpXG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAg
cmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXZ3LCAwKTtcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh1
c2luZ01SVEV4dGVuc2lvbiAmJiBtTnVtUmVuZGVyVGFyZ2V0cyA+IDEpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX01SVFxuIjsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChtVXNlc0ZyYWdDb2xvcikKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8
ICIjZGVmaW5lIEdMX1VTRVNfRlJBR19DT0xPUlxuIjsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChtVXNlc0ZyYWdEYXRhKQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgIiNkZWZpbmUg
R0xfVVNFU19GUkFHX0RBVEFcbiI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSAgIC8vIFZl
cnRleCBzaGFkZXIKLSAgICB7Ci0gICAgICAgIG91dCA8PCAiLy8gQXR0cmlidXRlc1xuIjsKLSAg
ICAgICAgb3V0IDw8ICBhdHRyaWJ1dGVzOwotICAgICAgICBvdXQgPDwgIlxuIgotICAgICAgICAg
ICAgICAgInN0YXRpYyBmbG9hdDQgZ2xfUG9zaXRpb24gPSBmbG9hdDQoMCwgMCwgMCwgMCk7XG4i
OwotICAgICAgICAKLSAgICAgICAgaWYgKG1Vc2VzUG9pbnRTaXplKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBvdXQgPDwgInN0YXRpYyBmbG9hdCBnbF9Qb2ludFNpemUgPSBmbG9hdCgxKTtcbiI7
Ci0gICAgICAgIH0KLQotICAgICAgICBvdXQgPDwgIlxuIgotICAgICAgICAgICAgICAgIi8vIFZh
cnlpbmdzXG4iOwotICAgICAgICBvdXQgPDwgIHZhcnlpbmdzOwotICAgICAgICBvdXQgPDwgIlxu
IjsKLQotICAgICAgICBpZiAobVVzZXNEZXB0aFJhbmdlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBvdXQgPDwgInN0cnVjdCBnbF9EZXB0aFJhbmdlUGFyYW1ldGVyc1xuIgotICAgICAgICAgICAg
ICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBuZWFyO1xuIgotICAg
ICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZmFyO1xuIgotICAgICAgICAgICAgICAgICAgICIg
ICAgZmxvYXQgZGlmZjtcbiIKLSAgICAgICAgICAgICAgICAgICAifTtcbiIKLSAgICAgICAgICAg
ICAgICAgICAiXG4iOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNI
X0hMU0wxMV9PVVRQVVQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtVXNlc0RlcHRoUmFu
Z2UpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJjYnVmZmVyIERyaXZl
ckNvbnN0YW50cyA6IHJlZ2lzdGVyKGIxKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xu
IgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0MyBkeF9EZXB0aFJhbmdlIDogcGFj
a29mZnNldChjMCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9O1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgInVuaWZvcm0gZmxvYXQzIGR4X0RlcHRoUmFu
Z2UgOiByZWdpc3RlcihjMCk7XG4iOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBvdXQg
PDwgInVuaWZvcm0gZmxvYXQ0IGR4X1ZpZXdBZGp1c3QgOiByZWdpc3RlcihjMSk7XG4iCi0gICAg
ICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtVXNlc0RlcHRo
UmFuZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGdsX0RlcHRoUmFu
Z2VQYXJhbWV0ZXJzIGdsX0RlcHRoUmFuZ2UgPSB7ZHhfRGVwdGhSYW5nZS54LCBkeF9EZXB0aFJh
bmdlLnksIGR4X0RlcHRoUmFuZ2Uuen07XG4iCi0gICAgICAgICAgICAgICAgICAgIlxuIjsKLSAg
ICAgICAgfQotCi0gICAgICAgIG91dCA8PCB1bmlmb3JtczsKLSAgICAgICAgb3V0IDw8ICJcbiI7
Ci0gICAgICAgIAotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKHNhbXBsZXIyRCBz
LCBmbG9hdDIgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55LCAwLCAw
KSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlw
ZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91
dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZs
b2F0MiB1dilcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1diwgMCk7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRMb2QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kKHNhbXBsZXIyRCBzLCBmbG9h
dDIgdCwgZmxvYXQgbG9kKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCB0Lnks
IDAsIGxvZCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAg
ICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91
dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRMb2QoVGV4dHVyZTJEIHQsIFNhbXBsZXJT
dGF0ZSBzLCBmbG9hdDIgdXYsIGZsb2F0IGxvZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChz
LCB1diwgbG9kKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2opCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVy
ZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQzIHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZs
b2F0NCh0LnggLyB0LnosIHQueSAvIHQueiwgMCwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQ0IHQpXG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIg
ICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAvIHQudywgMCwgMCkp
O1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAg
ICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUg
PT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQg
PDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywg
ZmxvYXQzIHV2dylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIodXZ3LnggLyB1
dncueiwgdXZ3LnkgLyB1dncueiksIDApO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxu
IgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJm
bG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0
NCB1dncpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3Lncs
IHV2dy55IC8gdXZ3LncpLCAwKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmUy
RFByb2pMb2QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9I
TFNMOV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9h
dDQgZ2xfdGV4dHVyZTJEUHJvakxvZChzYW1wbGVyMkQgcywgZmxvYXQzIHQsIGZsb2F0IGxvZClc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCBs
b2QpKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFBy
b2pMb2Qoc2FtcGxlcjJEIHMsIGZsb2F0NCB0LCBmbG9hdCBsb2QpXG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJE
bG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAvIHQudywgMCwgbG9kKSk7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFf
T1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGds
X3RleHR1cmUyRFByb2ooVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3LCBm
bG9hdCBsb2QpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3
LnosIHV2dy55IC8gdXZ3LnopLCBsb2QpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxu
IgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJm
bG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0
NCB1dncpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3Lncs
IHV2dy55IC8gdXZ3LncpLCBsb2QpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVy
ZUN1YmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNM
OV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQg
Z2xfdGV4dHVyZUN1YmUoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQpXG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENV
QkVsb2QocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIDApKTtcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1
YmUoVGV4dHVyZUN1YmUgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncpXG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHQuU2FtcGxlTGV2ZWwocywgdXZ3LCAwKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1c
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtVXNlc1Rl
eHR1cmVDdWJlTG9kKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0g
U0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAi
ZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0LCBmbG9hdCBs
b2QpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIGxvZCkp
O1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAg
ICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUg
PT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQg
PDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxvZChUZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUg
cywgZmxvYXQzIHV2dywgZmxvYXQgbG9kKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xu
IgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIHV2
dywgbG9kKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFC
TEUoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtVXNlc0ZyYWdDb29yZCkKLSAgICB7
Ci0gICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX0ZSQUdfQ09PUkRcbiI7Ci0gICAgfQot
Ci0gICAgaWYgKG1Vc2VzUG9pbnRDb29yZCkKLSAgICB7Ci0gICAgICAgIG91dCA8PCAiI2RlZmlu
ZSBHTF9VU0VTX1BPSU5UX0NPT1JEXG4iOwotICAgIH0KLQotICAgIGlmIChtVXNlc0Zyb250RmFj
aW5nKQotICAgIHsKLSAgICAgICAgb3V0IDw8ICIjZGVmaW5lIEdMX1VTRVNfRlJPTlRfRkFDSU5H
XG4iOwotICAgIH0KLQotICAgIGlmIChtVXNlc1BvaW50U2l6ZSkKLSAgICB7Ci0gICAgICAgIG91
dCA8PCAiI2RlZmluZSBHTF9VU0VTX1BPSU5UX1NJWkVcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1V
c2VzRnJhZ0RlcHRoKQotICAgIHsKLSAgICAgICAgb3V0IDw8ICIjZGVmaW5lIEdMX1VTRVNfRlJB
R19ERVBUSFxuIjsKLSAgICB9Ci0KLSAgICBpZiAobVVzZXNEZXB0aFJhbmdlKQotICAgIHsKLSAg
ICAgICAgb3V0IDw8ICIjZGVmaW5lIEdMX1VTRVNfREVQVEhfUkFOR0VcbiI7Ci0gICAgfQotCi0g
ICAgaWYgKG1Vc2VzWG9yKQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJib29sIHhvcihib29sIHAs
IGJvb2wgcSlcbiIKLSAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAiICAgIHJl
dHVybiAocCB8fCBxKSAmJiAhKHAgJiYgcSk7XG4iCi0gICAgICAgICAgICAgICAifVxuIgotICAg
ICAgICAgICAgICAgIlxuIjsKLSAgICB9Ci0KLSAgICBpZiAobVVzZXNNb2QxKQotICAgIHsKLSAg
ICAgICAgb3V0IDw8ICJmbG9hdCBtb2QoZmxvYXQgeCwgZmxvYXQgeSlcbiIKLSAgICAgICAgICAg
ICAgICJ7XG4iCi0gICAgICAgICAgICAgICAiICAgIHJldHVybiB4IC0geSAqIGZsb29yKHggLyB5
KTtcbiIKLSAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAiXG4iOwotICAgIH0K
LQotICAgIGlmIChtVXNlc01vZDJ2KQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJmbG9hdDIgbW9k
KGZsb2F0MiB4LCBmbG9hdDIgeSlcbiIKLSAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAg
ICAgICAiICAgIHJldHVybiB4IC0geSAqIGZsb29yKHggLyB5KTtcbiIKLSAgICAgICAgICAgICAg
ICJ9XG4iCi0gICAgICAgICAgICAgICAiXG4iOwotICAgIH0KLQotICAgIGlmIChtVXNlc01vZDJm
KQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJmbG9hdDIgbW9kKGZsb2F0MiB4LCBmbG9hdCB5KVxu
IgotICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHggLSB5
ICogZmxvb3IoeCAvIHkpO1xuIgotICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAg
ICJcbiI7Ci0gICAgfQotICAgIAotICAgIGlmIChtVXNlc01vZDN2KQotICAgIHsKLSAgICAgICAg
b3V0IDw8ICJmbG9hdDMgbW9kKGZsb2F0MyB4LCBmbG9hdDMgeSlcbiIKLSAgICAgICAgICAgICAg
ICJ7XG4iCi0gICAgICAgICAgICAgICAiICAgIHJldHVybiB4IC0geSAqIGZsb29yKHggLyB5KTtc
biIKLSAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAiXG4iOwotICAgIH0KLQot
ICAgIGlmIChtVXNlc01vZDNmKQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJmbG9hdDMgbW9kKGZs
b2F0MyB4LCBmbG9hdCB5KVxuIgotICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIHggLSB5ICogZmxvb3IoeCAvIHkpO1xuIgotICAgICAgICAgICAgICAgIn1c
biIKLSAgICAgICAgICAgICAgICJcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1Vc2VzTW9kNHYpCi0g
ICAgewotICAgICAgICBvdXQgPDwgImZsb2F0NCBtb2QoZmxvYXQ0IHgsIGZsb2F0NCB5KVxuIgot
ICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHggLSB5ICog
Zmxvb3IoeCAvIHkpO1xuIgotICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICJc
biI7Ci0gICAgfQotCi0gICAgaWYgKG1Vc2VzTW9kNGYpCi0gICAgewotICAgICAgICBvdXQgPDwg
ImZsb2F0NCBtb2QoZmxvYXQ0IHgsIGZsb2F0IHkpXG4iCi0gICAgICAgICAgICAgICAie1xuIgot
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4geCAtIHkgKiBmbG9vcih4IC8geSk7XG4iCi0gICAg
ICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgIlxuIjsKLSAgICB9Ci0KLSAgICBpZiAo
bVVzZXNGYWNlZm9yd2FyZDEpCi0gICAgewotICAgICAgICBvdXQgPDwgImZsb2F0IGZhY2Vmb3J3
YXJkKGZsb2F0IE4sIGZsb2F0IEksIGZsb2F0IE5yZWYpXG4iCi0gICAgICAgICAgICAgICAie1xu
IgotICAgICAgICAgICAgICAgIiAgICBpZihkb3QoTnJlZiwgSSkgPj0gMClcbiIKLSAgICAgICAg
ICAgICAgICIgICAge1xuIgotICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIC1OO1xuIgot
ICAgICAgICAgICAgICAgIiAgICB9XG4iCi0gICAgICAgICAgICAgICAiICAgIGVsc2VcbiIKLSAg
ICAgICAgICAgICAgICIgICAge1xuIgotICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIE47
XG4iCi0gICAgICAgICAgICAgICAiICAgIH1cbiIKLSAgICAgICAgICAgICAgICJ9XG4iCi0gICAg
ICAgICAgICAgICAiXG4iOwotICAgIH0KLQotICAgIGlmIChtVXNlc0ZhY2Vmb3J3YXJkMikKLSAg
ICB7Ci0gICAgICAgIG91dCA8PCAiZmxvYXQyIGZhY2Vmb3J3YXJkKGZsb2F0MiBOLCBmbG9hdDIg
SSwgZmxvYXQyIE5yZWYpXG4iCi0gICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAg
IiAgICBpZihkb3QoTnJlZiwgSSkgPj0gMClcbiIKLSAgICAgICAgICAgICAgICIgICAge1xuIgot
ICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIC1OO1xuIgotICAgICAgICAgICAgICAgIiAg
ICB9XG4iCi0gICAgICAgICAgICAgICAiICAgIGVsc2VcbiIKLSAgICAgICAgICAgICAgICIgICAg
e1xuIgotICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIE47XG4iCi0gICAgICAgICAgICAg
ICAiICAgIH1cbiIKLSAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAiXG4iOwot
ICAgIH0KLQotICAgIGlmIChtVXNlc0ZhY2Vmb3J3YXJkMykKLSAgICB7Ci0gICAgICAgIG91dCA8
PCAiZmxvYXQzIGZhY2Vmb3J3YXJkKGZsb2F0MyBOLCBmbG9hdDMgSSwgZmxvYXQzIE5yZWYpXG4i
Ci0gICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgIiAgICBpZihkb3QoTnJlZiwg
SSkgPj0gMClcbiIKLSAgICAgICAgICAgICAgICIgICAge1xuIgotICAgICAgICAgICAgICAgIiAg
ICAgICAgcmV0dXJuIC1OO1xuIgotICAgICAgICAgICAgICAgIiAgICB9XG4iCi0gICAgICAgICAg
ICAgICAiICAgIGVsc2VcbiIKLSAgICAgICAgICAgICAgICIgICAge1xuIgotICAgICAgICAgICAg
ICAgIiAgICAgICAgcmV0dXJuIE47XG4iCi0gICAgICAgICAgICAgICAiICAgIH1cbiIKLSAgICAg
ICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAiXG4iOwotICAgIH0KLQotICAgIGlmICht
VXNlc0ZhY2Vmb3J3YXJkNCkKLSAgICB7Ci0gICAgICAgIG91dCA8PCAiZmxvYXQ0IGZhY2Vmb3J3
YXJkKGZsb2F0NCBOLCBmbG9hdDQgSSwgZmxvYXQ0IE5yZWYpXG4iCi0gICAgICAgICAgICAgICAi
e1xuIgotICAgICAgICAgICAgICAgIiAgICBpZihkb3QoTnJlZiwgSSkgPj0gMClcbiIKLSAgICAg
ICAgICAgICAgICIgICAge1xuIgotICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIC1OO1xu
IgotICAgICAgICAgICAgICAgIiAgICB9XG4iCi0gICAgICAgICAgICAgICAiICAgIGVsc2VcbiIK
LSAgICAgICAgICAgICAgICIgICAge1xuIgotICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJu
IE47XG4iCi0gICAgICAgICAgICAgICAiICAgIH1cbiIKLSAgICAgICAgICAgICAgICJ9XG4iCi0g
ICAgICAgICAgICAgICAiXG4iOwotICAgIH0KLQotICAgIGlmIChtVXNlc0F0YW4yXzEpCi0gICAg
ewotICAgICAgICBvdXQgPDwgImZsb2F0IGF0YW55eChmbG9hdCB5LCBmbG9hdCB4KVxuIgotICAg
ICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICIgICAgaWYoeCA9PSAwICYmIHkgPT0g
MCkgeCA9IDE7XG4iICAgLy8gQXZvaWQgcHJvZHVjaW5nIGEgTmFOCi0gICAgICAgICAgICAgICAi
ICAgIHJldHVybiBhdGFuMih5LCB4KTtcbiIKLSAgICAgICAgICAgICAgICJ9XG4iOwotICAgIH0K
LQotICAgIGlmIChtVXNlc0F0YW4yXzIpCi0gICAgewotICAgICAgICBvdXQgPDwgImZsb2F0MiBh
dGFueXgoZmxvYXQyIHksIGZsb2F0MiB4KVxuIgotICAgICAgICAgICAgICAgIntcbiIKLSAgICAg
ICAgICAgICAgICIgICAgaWYoeFswXSA9PSAwICYmIHlbMF0gPT0gMCkgeFswXSA9IDE7XG4iCi0g
ICAgICAgICAgICAgICAiICAgIGlmKHhbMV0gPT0gMCAmJiB5WzFdID09IDApIHhbMV0gPSAxO1xu
IgotICAgICAgICAgICAgICAgIiAgICByZXR1cm4gZmxvYXQyKGF0YW4yKHlbMF0sIHhbMF0pLCBh
dGFuMih5WzFdLCB4WzFdKSk7XG4iCi0gICAgICAgICAgICAgICAifVxuIjsKLSAgICB9Ci0KLSAg
ICBpZiAobVVzZXNBdGFuMl8zKQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJmbG9hdDMgYXRhbnl4
KGZsb2F0MyB5LCBmbG9hdDMgeClcbiIKLSAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAg
ICAgICAiICAgIGlmKHhbMF0gPT0gMCAmJiB5WzBdID09IDApIHhbMF0gPSAxO1xuIgotICAgICAg
ICAgICAgICAgIiAgICBpZih4WzFdID09IDAgJiYgeVsxXSA9PSAwKSB4WzFdID0gMTtcbiIKLSAg
ICAgICAgICAgICAgICIgICAgaWYoeFsyXSA9PSAwICYmIHlbMl0gPT0gMCkgeFsyXSA9IDE7XG4i
Ci0gICAgICAgICAgICAgICAiICAgIHJldHVybiBmbG9hdDMoYXRhbjIoeVswXSwgeFswXSksIGF0
YW4yKHlbMV0sIHhbMV0pLCBhdGFuMih5WzJdLCB4WzJdKSk7XG4iCi0gICAgICAgICAgICAgICAi
fVxuIjsKLSAgICB9Ci0KLSAgICBpZiAobVVzZXNBdGFuMl80KQotICAgIHsKLSAgICAgICAgb3V0
IDw8ICJmbG9hdDQgYXRhbnl4KGZsb2F0NCB5LCBmbG9hdDQgeClcbiIKLSAgICAgICAgICAgICAg
ICJ7XG4iCi0gICAgICAgICAgICAgICAiICAgIGlmKHhbMF0gPT0gMCAmJiB5WzBdID09IDApIHhb
MF0gPSAxO1xuIgotICAgICAgICAgICAgICAgIiAgICBpZih4WzFdID09IDAgJiYgeVsxXSA9PSAw
KSB4WzFdID0gMTtcbiIKLSAgICAgICAgICAgICAgICIgICAgaWYoeFsyXSA9PSAwICYmIHlbMl0g
PT0gMCkgeFsyXSA9IDE7XG4iCi0gICAgICAgICAgICAgICAiICAgIGlmKHhbM10gPT0gMCAmJiB5
WzNdID09IDApIHhbM10gPSAxO1xuIgotICAgICAgICAgICAgICAgIiAgICByZXR1cm4gZmxvYXQ0
KGF0YW4yKHlbMF0sIHhbMF0pLCBhdGFuMih5WzFdLCB4WzFdKSwgYXRhbjIoeVsyXSwgeFsyXSks
IGF0YW4yKHlbM10sIHhbM10pKTtcbiIKLSAgICAgICAgICAgICAgICJ9XG4iOwotICAgIH0KLX0K
LQotdm9pZCBPdXRwdXRITFNMOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICpub2RlKQotewot
ICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OwotCi0gICAgVFN0cmluZyBuYW1lID0gbm9k
ZS0+Z2V0U3ltYm9sKCk7Ci0KLSAgICBpZiAobmFtZSA9PSAiZ2xfRnJhZ0NvbG9yIikKLSAgICB7
Ci0gICAgICAgIG91dCA8PCAiZ2xfQ29sb3JbMF0iOwotICAgICAgICBtVXNlc0ZyYWdDb2xvciA9
IHRydWU7Ci0gICAgfQotICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX0ZyYWdEYXRhIikKLSAgICB7
Ci0gICAgICAgIG91dCA8PCAiZ2xfQ29sb3IiOwotICAgICAgICBtVXNlc0ZyYWdEYXRhID0gdHJ1
ZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfRGVwdGhSYW5nZSIpCi0gICAgewot
ICAgICAgICBtVXNlc0RlcHRoUmFuZ2UgPSB0cnVlOwotICAgICAgICBvdXQgPDwgbmFtZTsKLSAg
ICB9Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfRnJhZ0Nvb3JkIikKLSAgICB7Ci0gICAgICAg
IG1Vc2VzRnJhZ0Nvb3JkID0gdHJ1ZTsKLSAgICAgICAgb3V0IDw8IG5hbWU7Ci0gICAgfQotICAg
IGVsc2UgaWYgKG5hbWUgPT0gImdsX1BvaW50Q29vcmQiKQotICAgIHsKLSAgICAgICAgbVVzZXNQ
b2ludENvb3JkID0gdHJ1ZTsKLSAgICAgICAgb3V0IDw8IG5hbWU7Ci0gICAgfQotICAgIGVsc2Ug
aWYgKG5hbWUgPT0gImdsX0Zyb250RmFjaW5nIikKLSAgICB7Ci0gICAgICAgIG1Vc2VzRnJvbnRG
YWNpbmcgPSB0cnVlOwotICAgICAgICBvdXQgPDwgbmFtZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAo
bmFtZSA9PSAiZ2xfUG9pbnRTaXplIikKLSAgICB7Ci0gICAgICAgIG1Vc2VzUG9pbnRTaXplID0g
dHJ1ZTsKLSAgICAgICAgb3V0IDw8IG5hbWU7Ci0gICAgfQotICAgIGVsc2UgaWYgKG5hbWUgPT0g
ImdsX0ZyYWdEZXB0aEVYVCIpCi0gICAgewotICAgICAgICBtVXNlc0ZyYWdEZXB0aCA9IHRydWU7
Ci0gICAgICAgIG91dCA8PCAiZ2xfRGVwdGgiOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAg
ICAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IG5vZGUtPmdldFF1YWxpZmllcigpOwotCi0gICAg
ICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxVW5pZm9ybSkKLSAgICAgICAgewotICAgICAgICAgICAg
bVJlZmVyZW5jZWRVbmlmb3Jtc1tuYW1lXSA9IG5vZGU7Ci0gICAgICAgICAgICBvdXQgPDwgZGVj
b3JhdGVVbmlmb3JtKG5hbWUsIG5vZGUtPmdldFR5cGUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZSBpZiAocXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgbVJlZmVyZW5jZWRBdHRyaWJ1dGVzW25hbWVdID0gbm9kZTsKLSAgICAgICAgICAgIG91dCA8
PCBkZWNvcmF0ZShuYW1lKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIg
PT0gRXZxVmFyeWluZ091dCB8fCBxdWFsaWZpZXIgPT0gRXZxSW52YXJpYW50VmFyeWluZ091dCB8
fCBxdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8IHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRW
YXJ5aW5nSW4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1SZWZlcmVuY2VkVmFyeWluZ3NbbmFt
ZV0gPSBub2RlOwotICAgICAgICAgICAgb3V0IDw8IGRlY29yYXRlKG5hbWUpOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8IGRlY29yYXRlKG5h
bWUpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1ib29sIE91dHB1dEhMU0w6OnZpc2l0QmluYXJ5
KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2RlKQotewotICAgIFRJbmZvU2lua0Jhc2Ug
Jm91dCA9IG1Cb2R5OwotCi0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQotICAgIHsKLSAgICAg
IGNhc2UgRU9wQXNzaWduOiAgICAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIo
IiwgIiA9ICIsICIpIik7ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wSW5pdGlhbGl6
ZToKLSAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICAvLyBHTFNMIGFsbG93cyB0byB3cml0ZSB0aGluZ3MgbGlrZSAiZmxvYXQgeCA9IHg7IiB3aGVy
ZSBhIG5ldyB2YXJpYWJsZSB4IGlzIGRlZmluZWQKLSAgICAgICAgICAgIC8vIGFuZCB0aGUgdmFs
dWUgb2YgYW4gZXhpc3RpbmcgdmFyaWFibGUgeCBpcyBhc3NpZ25lZC4gSExTTCB1c2VzIEMgc2Vt
YW50aWNzICh0aGUKLSAgICAgICAgICAgIC8vIG5ldyB2YXJpYWJsZSBpcyBjcmVhdGVkIGJlZm9y
ZSB0aGUgYXNzaWdubWVudCBpcyBldmFsdWF0ZWQpLCBzbyB3ZSBuZWVkIHRvIGNvbnZlcnQKLSAg
ICAgICAgICAgIC8vIHRoaXMgdG8gImZsb2F0IHQgPSB4LCB4ID0gdDsiLgotCi0gICAgICAgICAg
ICBUSW50ZXJtU3ltYm9sICpzeW1ib2xOb2RlID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJv
bE5vZGUoKTsKLSAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAqZXhwcmVzc2lvbiA9IG5vZGUtPmdl
dFJpZ2h0KCk7Ci0KLSAgICAgICAgICAgIHNoOjpTZWFyY2hTeW1ib2wgc2VhcmNoU3ltYm9sKHN5
bWJvbE5vZGUtPmdldFN5bWJvbCgpKTsKLSAgICAgICAgICAgIGV4cHJlc3Npb24tPnRyYXZlcnNl
KCZzZWFyY2hTeW1ib2wpOwotICAgICAgICAgICAgYm9vbCBzYW1lU3ltYm9sID0gc2VhcmNoU3lt
Ym9sLmZvdW5kTWF0Y2goKTsKLQotICAgICAgICAgICAgaWYgKHNhbWVTeW1ib2wpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gVHlwZSBhbHJlYWR5IHByaW50ZWQKLSAgICAgICAg
ICAgICAgICBvdXQgPDwgInQiICsgc3RyKG1VbmlxdWVJbmRleCkgKyAiID0gIjsKLSAgICAgICAg
ICAgICAgICBleHByZXNzaW9uLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgICAgICBvdXQg
PDwgIiwgIjsKLSAgICAgICAgICAgICAgICBzeW1ib2xOb2RlLT50cmF2ZXJzZSh0aGlzKTsKLSAg
ICAgICAgICAgICAgICBvdXQgPDwgIiA9IHQiICsgc3RyKG1VbmlxdWVJbmRleCk7Ci0KLSAgICAg
ICAgICAgICAgICBtVW5pcXVlSW5kZXgrKzsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gSW5W
aXNpdCkKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICIgPSAiOwotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BBZGRBc3NpZ246ICAgICAgICAgICAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICs9ICIsICIpIik7ICAgICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBFT3BTdWJBc3NpZ246ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
IigiLCAiIC09ICIsICIpIik7ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BNdWxBc3Np
Z246ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICo9ICIsICIpIik7
ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjog
b3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICo9ICIsICIpIik7ICAgICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbjogb3V0cHV0VHJpcGxldCh2aXNp
dCwgIigiLCAiICo9ICIsICIpIik7ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BWZWN0
b3JUaW1lc01hdHJpeEFzc2lnbjoKLSAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgIigiOwotICAgICAgICB9Ci0gICAgICAgIGVsc2Ug
aWYgKHZpc2l0ID09IEluVmlzaXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAiID0g
bXVsKCI7Ci0gICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRoaXMpOwotICAg
ICAgICAgICAgb3V0IDw8ICIsIHRyYW5zcG9zZSgiOyAgIAotICAgICAgICB9Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICIpKSkiOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjoKLSAgICAg
ICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwg
IigiOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAiID0gbXVsKCI7Ci0gICAgICAgICAgICBub2RlLT5n
ZXRMZWZ0KCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAgICAgb3V0IDw8ICIsICI7ICAgCi0g
ICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgIikp
IjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wRGl2QXNzaWduOiAg
ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAvPSAiLCAiKSIpOyAgICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6ICAgICAgICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICIiLCAiWyIsICJdIik7ICAgICAgICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgRU9wSW5kZXhJbmRpcmVjdDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIi
LCAiWyIsICJdIik7ICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wSW5kZXhEaXJl
Y3RTdHJ1Y3Q6Ci0gICAgICAgIGlmICh2aXNpdCA9PSBJblZpc2l0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBjb25zdCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBub2RlLT5nZXRMZWZ0KCktPmdl
dFR5cGUoKS5nZXRTdHJ1Y3QoKTsKLSAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1Db25zdGFudFVu
aW9uKiBpbmRleCA9IG5vZGUtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpOwotICAg
ICAgICAgICAgY29uc3QgVEZpZWxkKiBmaWVsZCA9IHN0cnVjdHVyZS0+ZmllbGRzKClbaW5kZXgt
PmdldElDb25zdCgwKV07Ci0gICAgICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3JhdGVGaWVsZChm
aWVsZC0+bmFtZSgpLCBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKSk7Ci0KLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9w
VmVjdG9yU3dpenpsZToKLSAgICAgICAgaWYgKHZpc2l0ID09IEluVmlzaXQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG91dCA8PCAiLiI7Ci0KLSAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUg
KnN3aXp6bGUgPSBub2RlLT5nZXRSaWdodCgpLT5nZXRBc0FnZ3JlZ2F0ZSgpOwotCi0gICAgICAg
ICAgICBpZiAoc3dpenpsZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUSW50ZXJt
U2VxdWVuY2UgJnNlcXVlbmNlID0gc3dpenpsZS0+Z2V0U2VxdWVuY2UoKTsKLQotICAgICAgICAg
ICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBzaXQgPSBzZXF1ZW5jZS5iZWdp
bigpOyBzaXQgIT0gc2VxdWVuY2UuZW5kKCk7IHNpdCsrKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgVEludGVybUNvbnN0YW50VW5pb24gKmVsZW1lbnQgPSAoKnNpdCkt
PmdldEFzQ29uc3RhbnRVbmlvbigpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50
KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgaSA9
IGVsZW1lbnQtPmdldElDb25zdCgwKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNo
IChpKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAwOiBvdXQgPDwgIngiOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
MTogb3V0IDw8ICJ5IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IG91
dCA8PCAieiI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvdXQgPDwg
InciOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIEZ1bGx5IHByb2Nlc3NlZAotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BBZGQ6ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgIigiLCAiICsgIiwgIikiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFN1YjogICAg
ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgLSAiLCAiKSIpOyBicmVhazsK
LSAgICAgIGNhc2UgRU9wTXVsOiAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIo
IiwgIiAqICIsICIpIik7IGJyZWFrOwotICAgICAgY2FzZSBFT3BEaXY6ICAgICAgICAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIC8gIiwgIikiKTsgYnJlYWs7Ci0gICAgICBjYXNl
IEVPcEVxdWFsOgotICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKLSAgICAgICAgaWYgKG5vZGUtPmdl
dExlZnQoKS0+aXNTY2FsYXIoKSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG5vZGUtPmdl
dE9wKCkgPT0gRU9wRXF1YWwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgIigiLCAiID09ICIsICIpIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgIigiLCAiICE9ICIsICIpIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZSBpZiAobm9kZS0+Z2V0TGVmdCgpLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3Qp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChub2RlLT5nZXRPcCgpID09IEVPcEVxdWFsKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiKCI7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8
ICIhKCI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZp
ZWxkcyA9IG5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpLT5maWVsZHMoKTsK
LQotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKysp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICpmaWVsZCA9IGZp
ZWxkc1tpXTsKLQotICAgICAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhp
cyk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGRlY29yYXRlRmllbGQoZmllbGQtPm5h
bWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkpICsgIiA9PSAiOwotICAgICAgICAgICAg
ICAgIG5vZGUtPmdldFJpZ2h0KCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAgICAgICAgIG91
dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLT5uYW1lKCksIG5vZGUtPmdldExlZnQoKS0+
Z2V0VHlwZSgpKTsKLQotICAgICAgICAgICAgICAgIGlmIChpIDwgZmllbGRzLnNpemUoKSAtIDEp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAmJiAiOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgb3V0IDw8ICIp
IjsKLQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmdldExlZnQoKS0+aXNNYXRyaXgo
KSB8fCBub2RlLT5nZXRMZWZ0KCktPmlzVmVjdG9yKCkpOwotCi0gICAgICAgICAgICBpZiAobm9k
ZS0+Z2V0T3AoKSA9PSBFT3BFcXVhbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiYWxsKCIsICIgPT0gIiwgIikiKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiIWFsbCgiLCAiID09ICIsICIpIik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcExlc3NUaGFuOiAgICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPCAiLCAiKSIpOyAgIGJyZWFrOwotICAgICAgY2Fz
ZSBFT3BHcmVhdGVyVGhhbjogICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiID4gIiwg
IikiKTsgICBicmVhazsKLSAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDogICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICIoIiwgIiA8PSAiLCAiKSIpOyAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcEdy
ZWF0ZXJUaGFuRXF1YWw6ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPj0gIiwgIikiKTsg
IGJyZWFrOwotICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjogb3V0cHV0VHJpcGxldCh2
aXNpdCwgIigiLCAiICogIiwgIikiKTsgICBicmVhazsKLSAgICAgIGNhc2UgRU9wTWF0cml4VGlt
ZXNTY2FsYXI6IG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAqICIsICIpIik7ICAgYnJlYWs7
Ci0gICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
bXVsKCIsICIsIHRyYW5zcG9zZSgiLCAiKSkiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcE1hdHJp
eFRpbWVzVmVjdG9yOiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibXVsKHRyYW5zcG9zZSgiLCAiKSwg
IiwgIikiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4OiBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAidHJhbnNwb3NlKG11bCh0cmFuc3Bvc2UoIiwgIiksIHRyYW5zcG9zZSgi
LCAiKSkpIik7IGJyZWFrOwotICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6Ci0gICAgICAgIGlmIChu
b2RlLT5nZXRSaWdodCgpLT5oYXNTaWRlRWZmZWN0cygpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBvdXQgPDwgInMiIDw8IG1VbmZvbGRTaG9ydENpcmN1aXQtPmdldE5leHRUZW1wb3JhcnlJbmRl
eCgpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgewotICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgfHwgIiwg
IikiKTsKLSAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIGNhc2UgRU9w
TG9naWNhbFhvcjoKLSAgICAgICAgbVVzZXNYb3IgPSB0cnVlOwotICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAieG9yKCIsICIsICIsICIpIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBFT3BMb2dpY2FsQW5kOgotICAgICAgICBpZiAobm9kZS0+Z2V0UmlnaHQoKS0+aGFzU2lkZUVm
ZmVjdHMoKSkKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xkU2hv
cnRDaXJjdWl0LT5nZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICYmICIsICIpIik7Ci0gICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIE91dHB1dEhMU0w6OnZpc2l0VW5hcnkoVmlzaXQg
dmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9kZSkKLXsKLSAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkp
Ci0gICAgewotICAgICAgY2FzZSBFT3BOZWdhdGl2ZTogICAgICAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAiKC0iLCAiIiwgIikiKTsgIGJyZWFrOwotICAgICAgY2FzZSBFT3BWZWN0b3JMb2dpY2Fs
Tm90OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCEiLCAiIiwgIikiKTsgIGJyZWFrOwotICAgICAg
Y2FzZSBFT3BMb2dpY2FsTm90OiAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCEiLCAiIiwg
IikiKTsgIGJyZWFrOwotICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50OiAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiKCIsICIiLCAiKyspIik7IGJyZWFrOwotICAgICAgY2FzZSBFT3BQb3N0RGVj
cmVtZW50OiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIiLCAiLS0pIik7IGJyZWFrOwot
ICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCsr
IiwgIiIsICIpIik7IGJyZWFrOwotICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6ICAgICBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAiKC0tIiwgIiIsICIpIik7IGJyZWFrOwotICAgICAgY2FzZSBFT3BD
b252SW50VG9Cb29sOgotICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0Jvb2w6Ci0gICAgICAgIHN3
aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKLSAg
ICAgICAgewotICAgICAgICAgIGNhc2UgMTogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImJvb2wo
IiwgIiIsICIpIik7ICBicmVhazsKLSAgICAgICAgICBjYXNlIDI6ICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJib29sMigiLCAiIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAzOiAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiYm9vbDMoIiwgIiIsICIpIik7IGJyZWFrOwotICAgICAgICAg
IGNhc2UgNDogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImJvb2w0KCIsICIiLCAiKSIpOyBicmVh
azsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBFT3BDb252Qm9vbFRvRmxvYXQ6Ci0gICAgICBjYXNlIEVPcENv
bnZJbnRUb0Zsb2F0OgotICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wZXJhbmQoKS0+Z2V0VHlw
ZSgpLmdldE5vbWluYWxTaXplKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIDE6ICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICJmbG9hdCgiLCAiIiwgIikiKTsgIGJyZWFrOwotICAgICAgICAg
IGNhc2UgMjogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZsb2F0MigiLCAiIiwgIikiKTsgYnJl
YWs7Ci0gICAgICAgICAgY2FzZSAzOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZmxvYXQzKCIs
ICIiLCAiKSIpOyBicmVhazsKLSAgICAgICAgICBjYXNlIDQ6ICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICJmbG9hdDQoIiwgIiIsICIpIik7IGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENvbnZG
bG9hdFRvSW50OgotICAgICAgY2FzZSBFT3BDb252Qm9vbFRvSW50OgotICAgICAgICBzd2l0Y2gg
KG5vZGUtPmdldE9wZXJhbmQoKS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpCi0gICAgICAg
IHsKLSAgICAgICAgICBjYXNlIDE6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJpbnQoIiwgIiIs
ICIpIik7ICBicmVhazsKLSAgICAgICAgICBjYXNlIDI6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICJpbnQyKCIsICIiLCAiKSIpOyBicmVhazsKLSAgICAgICAgICBjYXNlIDM6ICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICJpbnQzKCIsICIiLCAiKSIpOyBicmVhazsKLSAgICAgICAgICBjYXNlIDQ6
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJpbnQ0KCIsICIiLCAiKSIpOyBicmVhazsKLSAgICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBFT3BSYWRpYW5zOiAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAicmFk
aWFucygiLCAiIiwgIikiKTsgICBicmVhazsKLSAgICAgIGNhc2UgRU9wRGVncmVlczogICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImRlZ3JlZXMoIiwgIiIsICIpIik7ICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEVPcFNpbjogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJzaW4o
IiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BDb3M6ICAgICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiY29zKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgRU9wVGFuOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInRhbigi
LCAiIiwgIikiKTsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcEFzaW46ICAgICAgICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICJhc2luKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBFT3BBY29zOiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYWNvcygi
LCAiIiwgIikiKTsgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wQXRhbjogICAgICAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgImF0YW4oIiwgIiIsICIpIik7ICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEVPcEV4cDogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJleHAoIiwg
IiIsICIpIik7ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BMb2c6ICAgICAgICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAibG9nKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgRU9wRXhwMjogICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImV4cDIoIiwg
IiIsICIpIik7ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcExvZzI6ICAgICAgICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICJsb2cyKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBFT3BTcXJ0OiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAic3FydCgiLCAi
IiwgIikiKTsgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wSW52ZXJzZVNxcnQ6ICAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgInJzcXJ0KCIsICIiLCAiKSIpOyAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEVPcEFiczogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJhYnMoIiwgIiIs
ICIpIik7ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BTaWduOiAgICAgICAgICAgICBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAic2lnbigiLCAiIiwgIikiKTsgICAgICBicmVhazsKLSAgICAgIGNh
c2UgRU9wRmxvb3I6ICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZsb29yKCIsICIi
LCAiKSIpOyAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENlaWw6ICAgICAgICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICJjZWlsKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBFT3BGcmFjdDogICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZnJhYygiLCAiIiwg
IikiKTsgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wTGVuZ3RoOiAgICAgICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgImxlbmd0aCgiLCAiIiwgIikiKTsgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEVPcE5vcm1hbGl6ZTogICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJub3JtYWxpemUoIiwg
IiIsICIpIik7IGJyZWFrOwotICAgICAgY2FzZSBFT3BERmR4OgotICAgICAgICBpZihtSW5zaWRl
RGlzY29udGludW91c0xvb3AgfHwgbU91dHB1dExvZDBGdW5jdGlvbikKLSAgICAgICAgewotICAg
ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIiwgIiwgMC4wKSIpOwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgImRkeCgiLCAiIiwgIikiKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgRU9wREZkeToKLSAgICAgICAgaWYobUluc2lkZURpc2NvbnRpbnVvdXNMb29wIHx8IG1P
dXRwdXRMb2QwRnVuY3Rpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICIoIiwgIiIsICIsIDAuMCkiKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAg
ICAgIHsKLSAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImRkeSgiLCAiIiwgIikiKTsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wRndpZHRoOgotICAgICAg
ICBpZihtSW5zaWRlRGlzY29udGludW91c0xvb3AgfHwgbU91dHB1dExvZDBGdW5jdGlvbikKLSAg
ICAgICAgewotICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIiwgIiwgMC4w
KSIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgImZ3aWR0aCgiLCAiIiwgIikiKTsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgRU9wQW55OiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgImFueSgiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcEFsbDog
ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJhbGwoIiwgIiIsICIpIik7ICAgICAg
IGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNp
dCwgVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBt
Qm9keTsKLQotICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKLSAgICB7Ci0gICAgICBjYXNlIEVP
cFNlcXVlbmNlOgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobUluc2lkZUZ1bmN0aW9uKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+
Z2V0TGluZSgpLmZpcnN0X2xpbmUpOwotICAgICAgICAgICAgICAgIG91dCA8PCAie1xuIjsKLQot
ICAgICAgICAgICAgICAgIG1TY29wZURlcHRoKys7Ci0KLSAgICAgICAgICAgICAgICBpZiAobVNj
b3BlQnJhY2tldC5zaXplKCkgPCBtU2NvcGVEZXB0aCkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIG1TY29wZUJyYWNrZXQucHVzaF9iYWNrKDApOyAgIC8vIE5ldyBzY29w
ZSBsZXZlbAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtU2NvcGVCcmFja2V0W21TY29wZURlcHRo
IC0gMV0rKzsgICAvLyBOZXcgc2NvcGUgYXQgZXhpc3RpbmcgbGV2ZWwKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjpp
dGVyYXRvciBzaXQgPSBub2RlLT5nZXRTZXF1ZW5jZSgpLmJlZ2luKCk7IHNpdCAhPSBub2RlLT5n
ZXRTZXF1ZW5jZSgpLmVuZCgpOyBzaXQrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBvdXRwdXRMaW5lRGlyZWN0aXZlKCgqc2l0KS0+Z2V0TGluZSgpLmZpcnN0X2xpbmUpOwotCi0g
ICAgICAgICAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRzKCpzaXQpOwotCi0gICAgICAgICAgICAg
ICAgb3V0IDw8ICI7XG4iOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobUluc2lk
ZUZ1bmN0aW9uKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dHB1dExpbmVEaXJl
Y3RpdmUobm9kZS0+Z2V0TGluZSgpLmxhc3RfbGluZSk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8
ICJ9XG4iOwotCi0gICAgICAgICAgICAgICAgbVNjb3BlRGVwdGgtLTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICBjYXNlIEVPcERl
Y2xhcmF0aW9uOgotICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgp
OwotICAgICAgICAgICAgVEludGVybVR5cGVkICp2YXJpYWJsZSA9IHNlcXVlbmNlWzBdLT5nZXRB
c1R5cGVkKCk7Ci0KLSAgICAgICAgICAgIGlmICh2YXJpYWJsZSAmJiAodmFyaWFibGUtPmdldFF1
YWxpZmllcigpID09IEV2cVRlbXBvcmFyeSB8fCB2YXJpYWJsZS0+Z2V0UXVhbGlmaWVyKCkgPT0g
RXZxR2xvYmFsKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUt
PmdldFR5cGUoKS5nZXRTdHJ1Y3QoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIGFkZENvbnN0cnVjdG9yKHZhcmlhYmxlLT5nZXRUeXBlKCksIHNjb3BlZFN0cnVjdCh2
YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpLT5uYW1lKCkpLCBOVUxMKTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlLT5nZXRBc1N5bWJvbE5v
ZGUoKSB8fCB2YXJpYWJsZS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpICE9ICIiKSAg
IC8vIFZhcmlhYmxlIGRlY2xhcmF0aW9uCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoIW1JbnNpZGVGdW5jdGlvbikKLSAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgIjsKLSAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgIG91dCA8PCB0eXBlU3RyaW5nKHZhcmlhYmxlLT5n
ZXRUeXBlKCkpICsgIiAiOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVl
bmNlOjppdGVyYXRvciBzaXQgPSBzZXF1ZW5jZS5iZWdpbigpOyBzaXQgIT0gc2VxdWVuY2UuZW5k
KCk7IHNpdCsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSAoKnNpdCktPmdldEFzU3ltYm9sTm9kZSgpOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sKQotICAgICAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbC0+dHJhdmVyc2UodGhpcyk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8IGFycmF5U3RyaW5nKHN5bWJvbC0+
Z2V0VHlwZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiA9ICIgKyBp
bml0aWFsaXplcih2YXJpYWJsZS0+Z2V0VHlwZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKnNpdCktPnRyYXZlcnNlKHRoaXMpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
KnNpdCAhPSBzZXF1ZW5jZS5iYWNrKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgZWxzZSBpZiAodmFyaWFibGUtPmdldEFzU3ltYm9sTm9kZSgpICYmIHZhcmlhYmxl
LT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCkgPT0gIiIpICAgLy8gVHlwZSAoc3RydWN0
KSBkZWNsYXJhdGlvbgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
QWxyZWFkeSBhZGRlZCB0byBjb25zdHJ1Y3RvciBtYXAKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZSBpZiAodmFyaWFibGUgJiYgKHZhcmlhYmxlLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFW
YXJ5aW5nT3V0IHx8IHZhcmlhYmxlLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFJbnZhcmlhbnRWYXJ5
aW5nT3V0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1
ZW5jZTo6aXRlcmF0b3Igc2l0ID0gc2VxdWVuY2UuYmVnaW4oKTsgc2l0ICE9IHNlcXVlbmNlLmVu
ZCgpOyBzaXQrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFRJbnRl
cm1TeW1ib2wgKnN5bWJvbCA9ICgqc2l0KS0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHN5bWJvbCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gVmVydGV4IChvdXRwdXQpIHZhcnlpbmdzIHdoaWNoIGFyZSBkZWNs
YXJlZCBidXQgbm90IHdyaXR0ZW4gdG8gc2hvdWxkIHN0aWxsIGJlIGRlY2xhcmVkIHRvIGFsbG93
IHN1Y2Nlc3NmdWwgbGlua2luZwotICAgICAgICAgICAgICAgICAgICAgICAgbVJlZmVyZW5jZWRW
YXJ5aW5nc1tzeW1ib2wtPmdldFN5bWJvbCgpXSA9IHN5bWJvbDsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICgqc2l0KS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBJ
blZpc2l0KQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgIiwgIjsKLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wUHJvdG90eXBlOgotICAgICAgICBpZiAodmlz
aXQgPT0gUHJlVmlzaXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCB0eXBlU3RyaW5n
KG5vZGUtPmdldFR5cGUoKSkgPDwgIiAiIDw8IGRlY29yYXRlKG5vZGUtPmdldE5hbWUoKSkgPDwg
KG1PdXRwdXRMb2QwRnVuY3Rpb24gPyAiTG9kMCgiIDogIigiKTsKLQotICAgICAgICAgICAgVElu
dGVybVNlcXVlbmNlICZhcmd1bWVudHMgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOwotCi0gICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXplKCk7IGkrKykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBh
cmd1bWVudHNbaV0tPmdldEFzU3ltYm9sTm9kZSgpOwotCi0gICAgICAgICAgICAgICAgaWYgKHN5
bWJvbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG91dCA8PCBhcmd1
bWVudFN0cmluZyhzeW1ib2wpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChpIDwgYXJndW1l
bnRzLnNpemUoKSAtIDEpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG91dCA8PCAiLCAiOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgb3V0IDw8ICIpO1xuIjsKLQotICAgICAgICAgICAgLy8gQWxzbyBwcm90
b3R5cGUgdGhlIExvZDAgdmFyaWFudCBpZiBuZWVkZWQKLSAgICAgICAgICAgIGlmIChtQ29udGFp
bnNMb29wRGlzY29udGludWl0eSAmJiAhbU91dHB1dExvZDBGdW5jdGlvbikKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBtT3V0cHV0TG9kMEZ1bmN0aW9uID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgICAgICBtT3V0cHV0TG9k
MEZ1bmN0aW9uID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wQ29tbWE6ICAg
ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiLCAiLCAiKSIpOyAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wRnVuY3Rpb246Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5hbWUo
KSk7Ci0KLSAgICAgICAgICAgIG91dCA8PCB0eXBlU3RyaW5nKG5vZGUtPmdldFR5cGUoKSkgPDwg
IiAiOwotCi0gICAgICAgICAgICBpZiAobmFtZSA9PSAibWFpbiIpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgb3V0IDw8ICJnbF9tYWluKCI7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8IGRlY29yYXRl
KG5hbWUpIDw8IChtT3V0cHV0TG9kMEZ1bmN0aW9uID8gIkxvZDAoIiA6ICIoIik7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2UgPSBub2RlLT5n
ZXRTZXF1ZW5jZSgpOwotICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZhcmd1bWVudHMgPSBz
ZXF1ZW5jZVswXS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKTsKLQotICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyBpKyspCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gYXJn
dW1lbnRzW2ldLT5nZXRBc1N5bWJvbE5vZGUoKTsKLQotICAgICAgICAgICAgICAgIGlmIChzeW1i
b2wpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sLT5n
ZXRUeXBlKCkuZ2V0U3RydWN0KCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGFkZENvbnN0cnVjdG9yKHN5bWJvbC0+Z2V0VHlwZSgpLCBzY29wZWRTdHJ1
Y3Qoc3ltYm9sLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCktPm5hbWUoKSksIE5VTEwpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgb3V0IDw8IGFyZ3VtZW50U3Ry
aW5nKHN5bWJvbCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBhcmd1bWVudHMuc2l6
ZSgpIC0gMSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
b3V0IDw8ICIsICI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBvdXQgPDwgIilcbiIKLSAgICAgICAgICAgICAgICAie1xuIjsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKHNlcXVlbmNlLnNpemUoKSA+IDEpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgbUluc2lkZUZ1bmN0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBz
ZXF1ZW5jZVsxXS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgbUluc2lkZUZ1bmN0
aW9uID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG91
dCA8PCAifVxuIjsKLQotICAgICAgICAgICAgaWYgKG1Db250YWluc0xvb3BEaXNjb250aW51aXR5
ICYmICFtT3V0cHV0TG9kMEZ1bmN0aW9uKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGlmIChuYW1lICE9ICJtYWluIikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBub2Rl
LT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgbU91dHB1dExvZDBGdW5jdGlv
biA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBF
T3BGdW5jdGlvbkNhbGw6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFRTdHJpbmcgbmFtZSA9IFRG
dW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7Ci0gICAgICAgICAgICBib29s
IGxvZDAgPSBtSW5zaWRlRGlzY29udGludW91c0xvb3AgfHwgbU91dHB1dExvZDBGdW5jdGlvbjsK
LQotICAgICAgICAgICAgaWYgKG5vZGUtPmlzVXNlckRlZmluZWQoKSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBvdXQgPDwgZGVjb3JhdGUobmFtZSkgPDwgKGxvZDAgPyAiTG9kMCgi
IDogIigiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSAidGV4dHVyZTJEIikKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKLSAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgp
ID09IDIpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbVVzZXNUZXh0dXJlMkQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXpl
KCkgPT0gMykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtVXNlc1RleHR1cmUyRF9iaWFzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkQoIjsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUo
KSA9PSAyKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1Vc2VzVGV4dHVyZTJETG9kMCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgp
LnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUo
KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRMb2QwKCI7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJEUHJvaiIpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoIWxvZDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAy
KQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1Vc2VzVGV4dHVyZTJEUHJvaiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUo
KSA9PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRQcm9qKCI7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2Uo
KS5zaXplKCkgPT0gMikKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QwID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdl
dFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90
ZXh0dXJlMkRQcm9qTG9kMCgiOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVDdWJlIikKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVl
bmNlKCkuc2l6ZSgpID09IDIpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZSA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRT
ZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmVfYmlhcyA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZUN1
YmUoIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5n
ZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QwID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCi0gICAgICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDBfYmlh
cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8
PCAiZ2xfdGV4dHVyZUN1YmVMb2QwKCI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJETG9k
IikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRT
ZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRExvZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgICAg
ICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJETG9kKCI7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmUyRFByb2pMb2QiKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVl
bmNlKCkuc2l6ZSgpID09IDMpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJvakxvZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgICAg
ICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvakxvZCgiOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlQ3ViZUxvZCIp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2Vx
dWVuY2UoKS5zaXplKCkgPT0gMykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgICAg
ICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZUN1YmVMb2QoIjsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IG5vZGUtPmdldFNlcXVl
bmNlKCk7Ci0KLSAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBhcmcg
PSBhcmd1bWVudHMuYmVnaW4oKTsgYXJnICE9IGFyZ3VtZW50cy5lbmQoKTsgYXJnKyspCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9P
VVRQVVQgJiYgSXNTYW1wbGVyKCgqYXJnKS0+Z2V0QXNUeXBlZCgpLT5nZXRCYXNpY1R5cGUoKSkp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBvdXQgPDwgInRleHR1cmVf
IjsKLSAgICAgICAgICAgICAgICAgICAgKCphcmcpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAg
ICAgICAgICAgICAgb3V0IDw8ICIsIHNhbXBsZXJfIjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAoKmFyZyktPnRyYXZlcnNlKHRoaXMpOwotCi0gICAgICAgICAgICAgICAg
aWYgKGFyZyA8IGFyZ3VtZW50cy5lbmQoKSAtIDEpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIG91dCA8PCAiKSI7Ci0KLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wUGFyYW1ldGVyczog
ICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiLCAiLCAiKVxue1xuIik7ICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RGbG9hdDoKLSAgICAgICAgYWRkQ29u
c3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAidmVjMSIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsK
LSAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInZlYzEoIiwgIiIsICIpIik7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMyOgotICAgICAgICBhZGRDb25zdHJ1
Y3Rvcihub2RlLT5nZXRUeXBlKCksICJ2ZWMyIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOwotICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidmVjMigiLCAiLCAiLCAiKSIpOwotICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMzoKLSAgICAgICAgYWRkQ29uc3RydWN0
b3Iobm9kZS0+Z2V0VHlwZSgpLCAidmVjMyIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKLSAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInZlYzMoIiwgIiwgIiwgIikiKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzQ6Ci0gICAgICAgIGFkZENvbnN0cnVjdG9y
KG5vZGUtPmdldFR5cGUoKSwgInZlYzQiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7Ci0gICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICJ2ZWM0KCIsICIsICIsICIpIik7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29sOgotICAgICAgICBhZGRDb25zdHJ1Y3Rvcihu
b2RlLT5nZXRUeXBlKCksICJidmVjMSIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKLSAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgImJ2ZWMxKCIsICIiLCAiKSIpOwotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzI6Ci0gICAgICAgIGFkZENvbnN0cnVjdG9yKG5v
ZGUtPmdldFR5cGUoKSwgImJ2ZWMyIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOwotICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiYnZlYzIoIiwgIiwgIiwgIikiKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMzOgotICAgICAgICBhZGRDb25zdHJ1Y3Rvcihu
b2RlLT5nZXRUeXBlKCksICJidmVjMyIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKLSAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgImJ2ZWMzKCIsICIsICIsICIpIik7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjNDoKLSAgICAgICAgYWRkQ29uc3RydWN0b3Io
bm9kZS0+Z2V0VHlwZSgpLCAiYnZlYzQiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7Ci0gICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICJidmVjNCgiLCAiLCAiLCAiKSIpOwotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OgotICAgICAgICBhZGRDb25zdHJ1Y3Rvcihu
b2RlLT5nZXRUeXBlKCksICJpdmVjMSIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKLSAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgIml2ZWMxKCIsICIiLCAiKSIpOwotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6Ci0gICAgICAgIGFkZENvbnN0cnVjdG9yKG5v
ZGUtPmdldFR5cGUoKSwgIml2ZWMyIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOwotICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiaXZlYzIoIiwgIiwgIiwgIikiKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMzOgotICAgICAgICBhZGRDb25zdHJ1Y3Rvcihu
b2RlLT5nZXRUeXBlKCksICJpdmVjMyIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKLSAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgIml2ZWMzKCIsICIsICIsICIpIik7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjNDoKLSAgICAgICAgYWRkQ29uc3RydWN0b3Io
bm9kZS0+Z2V0VHlwZSgpLCAiaXZlYzQiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7Ci0gICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICJpdmVjNCgiLCAiLCAiLCAiKSIpOwotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MjoKLSAgICAgICAgYWRkQ29uc3RydWN0b3Io
bm9kZS0+Z2V0VHlwZSgpLCAibWF0MiIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKLSAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgIm1hdDIoIiwgIiwgIiwgIikiKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6Ci0gICAgICAgIGFkZENvbnN0cnVjdG9yKG5v
ZGUtPmdldFR5cGUoKSwgIm1hdDMiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7Ci0gICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICJtYXQzKCIsICIsICIsICIpIik7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQ0OiAKLSAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9k
ZS0+Z2V0VHlwZSgpLCAibWF0NCIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKLSAgICAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgIm1hdDQoIiwgIiwgIiwgIikiKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEVPcENvbnN0cnVjdFN0cnVjdDoKLSAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9k
ZS0+Z2V0VHlwZSgpLCBzY29wZWRTdHJ1Y3Qobm9kZS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpLT5u
YW1lKCkpLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7Ci0gICAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsIHN0cnVjdExvb2t1cChub2RlLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCktPm5hbWUoKSkgKyAi
X2N0b3IoIiwgIiwgIiwgIikiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcExlc3NU
aGFuOiAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA8ICIsICIpIik7ICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46ICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgIigiLCAiID4gIiwgIikiKTsgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIs
ICIgPD0gIiwgIikiKTsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcEdyZWF0
ZXJUaGFuRXF1YWw6IG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA+PSAiLCAiKSIpOyAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wVmVjdG9yRXF1YWw6ICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgIigiLCAiID09ICIsICIpIik7ICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBFT3BWZWN0b3JOb3RFcXVhbDogICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIs
ICIgIT0gIiwgIikiKTsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcE1vZDoK
LSAgICAgICAgewotICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBsb29rIGF0IHRoZSBudW1iZXIg
b2YgY29tcG9uZW50cyBpbiBib3RoIGFyZ3VtZW50cwotICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5nZXRTZXF1ZW5jZSgpWzBdLT5nZXRBc1R5cGVkKCktPmdldE5vbWluYWxTaXplKCkgKiAxMAot
ICAgICAgICAgICAgICAgICAgICAgKyBub2RlLT5nZXRTZXF1ZW5jZSgpWzFdLT5nZXRBc1R5cGVk
KCktPmdldE5vbWluYWxTaXplKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2Ug
MTE6IG1Vc2VzTW9kMSA9IHRydWU7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIDIyOiBtVXNl
c01vZDJ2ID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgMjE6IG1Vc2VzTW9kMmYg
PSB0cnVlOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSAzMzogbVVzZXNNb2QzdiA9IHRydWU7
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIDMxOiBtVXNlc01vZDNmID0gdHJ1ZTsgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgNDQ6IG1Vc2VzTW9kNHYgPSB0cnVlOyBicmVhazsKLSAgICAg
ICAgICAgICAgY2FzZSA0MTogbVVzZXNNb2Q0ZiA9IHRydWU7IGJyZWFrOwotICAgICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAibW9kKCIsICIsICIsICIpIik7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFBvdzogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJwb3coIiwgIiwgIiwgIikiKTsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgRU9wQXRhbjoKLSAgICAgICAgQVNTRVJUKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09
IDIpOyAgIC8vIGF0YW4oeCkgaXMgYSB1bmFyeSBvcGVyYXRvcgotICAgICAgICBzd2l0Y2ggKG5v
ZGUtPmdldFNlcXVlbmNlKClbMF0tPmdldEFzVHlwZWQoKS0+Z2V0Tm9taW5hbFNpemUoKSkKLSAg
ICAgICAgewotICAgICAgICAgIGNhc2UgMTogbVVzZXNBdGFuMl8xID0gdHJ1ZTsgYnJlYWs7Ci0g
ICAgICAgICAgY2FzZSAyOiBtVXNlc0F0YW4yXzIgPSB0cnVlOyBicmVhazsKLSAgICAgICAgICBj
YXNlIDM6IG1Vc2VzQXRhbjJfMyA9IHRydWU7IGJyZWFrOwotICAgICAgICAgIGNhc2UgNDogbVVz
ZXNBdGFuMl80ID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKLSAgICAgICAgfQotICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYXRhbnl4KCIsICIs
ICIsICIpIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BNaW46ICAgICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAibWluKCIsICIsICIsICIpIik7ICAgICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgRU9wTWF4OiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm1heCgi
LCAiLCAiLCAiKSIpOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENsYW1wOiAgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJjbGFtcCgiLCAiLCAiLCAiKSIpOyAgICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBFT3BNaXg6ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
bGVycCgiLCAiLCAiLCAiKSIpOyAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wU3RlcDog
ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInN0ZXAoIiwgIiwgIiwgIikiKTsgICAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFNtb290aFN0ZXA6ICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICJzbW9vdGhzdGVwKCIsICIsICIsICIpIik7ICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BE
aXN0YW5jZTogICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGlzdGFuY2UoIiwgIiwgIiwgIiki
KTsgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wRG90OiAgICAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgImRvdCgiLCAiLCAiLCAiKSIpOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEVPcENyb3NzOiAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJjcm9zcygiLCAiLCAiLCAi
KSIpOyAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BGYWNlRm9yd2FyZDoKLSAgICAgICAg
ewotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRTZXF1ZW5jZSgpWzBdLT5nZXRBc1R5cGVk
KCktPmdldE5vbWluYWxTaXplKCkpICAgLy8gTnVtYmVyIG9mIGNvbXBvbmVudHMgaW4gdGhlIGZp
cnN0IGFyZ3VtZW50Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIDE6IG1Vc2VzRmFj
ZWZvcndhcmQxID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDI6IG1Vc2VzRmFjZWZv
cndhcmQyID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDM6IG1Vc2VzRmFjZWZvcndh
cmQzID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDQ6IG1Vc2VzRmFjZWZvcndhcmQ0
ID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAiZmFjZWZvcndhcmQoIiwgIiwgIiwgIikiKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgRU9wUmVmbGVjdDogICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInJlZmxl
Y3QoIiwgIiwgIiwgIikiKTsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFJlZnJhY3Q6ICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJyZWZyYWN0KCIsICIsICIsICIpIik7ICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBFT3BNdWw6ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
KCIsICIgKiAiLCAiKSIpOyAgICAgICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgT3V0cHV0SExT
TDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpCi17
Ci0gICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7Ci0KLSAgICBpZiAobm9kZS0+dXNlc1Rl
cm5hcnlPcGVyYXRvcigpKQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xkU2hv
cnRDaXJjdWl0LT5nZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKLSAgICB9Ci0gICAgZWxzZSAgLy8g
aWYvZWxzZSBzdGF0ZW1lbnQKLSAgICB7Ci0gICAgICAgIG1VbmZvbGRTaG9ydENpcmN1aXQtPnRy
YXZlcnNlKG5vZGUtPmdldENvbmRpdGlvbigpKTsKLQotICAgICAgICBvdXQgPDwgImlmICgiOwot
Ci0gICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKLQotICAgICAg
ICBvdXQgPDwgIilcbiI7Ci0gICAgICAgIAotICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5v
ZGUtPmdldExpbmUoKS5maXJzdF9saW5lKTsKLSAgICAgICAgb3V0IDw8ICJ7XG4iOwotCi0gICAg
ICAgIGJvb2wgZGlzY2FyZCA9IGZhbHNlOwotCi0gICAgICAgIGlmIChub2RlLT5nZXRUcnVlQmxv
Y2soKSkKLSAgICAgICAgewotICAgICAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRzKG5vZGUtPmdl
dFRydWVCbG9jaygpKTsKLQotICAgICAgICAgICAgLy8gRGV0ZWN0IHRydWUgZGlzY2FyZAotICAg
ICAgICAgICAgZGlzY2FyZCA9IChkaXNjYXJkIHx8IEZpbmREaXNjYXJkOjpzZWFyY2gobm9kZS0+
Z2V0VHJ1ZUJsb2NrKCkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIG91dHB1dExpbmVEaXJlY3Rp
dmUobm9kZS0+Z2V0TGluZSgpLmZpcnN0X2xpbmUpOwotICAgICAgICBvdXQgPDwgIjtcbn1cbiI7
Ci0KLSAgICAgICAgaWYgKG5vZGUtPmdldEZhbHNlQmxvY2soKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgb3V0IDw8ICJlbHNlXG4iOwotCi0gICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZl
KG5vZGUtPmdldEZhbHNlQmxvY2soKS0+Z2V0TGluZSgpLmZpcnN0X2xpbmUpOwotICAgICAgICAg
ICAgb3V0IDw8ICJ7XG4iOwotCi0gICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUt
PmdldEZhbHNlQmxvY2soKS0+Z2V0TGluZSgpLmZpcnN0X2xpbmUpOwotICAgICAgICAgICAgdHJh
dmVyc2VTdGF0ZW1lbnRzKG5vZGUtPmdldEZhbHNlQmxvY2soKSk7Ci0KLSAgICAgICAgICAgIG91
dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0RmFsc2VCbG9jaygpLT5nZXRMaW5lKCkuZmlyc3Rf
bGluZSk7Ci0gICAgICAgICAgICBvdXQgPDwgIjtcbn1cbiI7Ci0KLSAgICAgICAgICAgIC8vIERl
dGVjdCBmYWxzZSBkaXNjYXJkCi0gICAgICAgICAgICBkaXNjYXJkID0gKGRpc2NhcmQgfHwgRmlu
ZERpc2NhcmQ6OnNlYXJjaChub2RlLT5nZXRGYWxzZUJsb2NrKCkpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIEFOR0xFIGlzc3VlIDQ4NjogRGV0ZWN0IHByb2JsZW1hdGljIGNvbmRpdGlvbmFs
IGRpc2NhcmQKLSAgICAgICAgaWYgKGRpc2NhcmQgJiYgRmluZFNpZGVFZmZlY3RSZXdyaXRpbmc6
OnNlYXJjaChub2RlKSkKLSAgICAgICAgewotICAgICAgICAgICAgbVVzZXNEaXNjYXJkUmV3cml0
aW5nID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBPdXRwdXRITFNMOjp2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24g
Km5vZGUpCi17Ci0gICAgd3JpdGVDb25zdGFudFVuaW9uKG5vZGUtPmdldFR5cGUoKSwgbm9kZS0+
Z2V0VW5pb25BcnJheVBvaW50ZXIoKSk7Ci19Ci0KLWJvb2wgT3V0cHV0SExTTDo6dmlzaXRMb29w
KFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKLXsKLSAgICBib29sIHdhc0Rpc2NvbnRp
bnVvdXMgPSBtSW5zaWRlRGlzY29udGludW91c0xvb3A7Ci0KLSAgICBpZiAobUNvbnRhaW5zTG9v
cERpc2NvbnRpbnVpdHkgJiYgIW1JbnNpZGVEaXNjb250aW51b3VzTG9vcCkKLSAgICB7Ci0gICAg
ICAgIG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCA9IGNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHko
bm9kZSk7Ci0gICAgfQotCi0gICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkK
LSAgICB7Ci0gICAgICAgIGlmIChoYW5kbGVFeGNlc3NpdmVMb29wKG5vZGUpKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBUSW5m
b1NpbmtCYXNlICZvdXQgPSBtQm9keTsKLQotICAgIGlmIChub2RlLT5nZXRUeXBlKCkgPT0gRUxv
b3BEb1doaWxlKQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJ7ZG9cbiI7Ci0KLSAgICAgICAgb3V0
cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRMaW5lKCkuZmlyc3RfbGluZSk7Ci0gICAgICAgIG91
dCA8PCAie1xuIjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJ7Zm9y
KCI7Ci0gICAgICAgIAotICAgICAgICBpZiAobm9kZS0+Z2V0SW5pdCgpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBub2RlLT5nZXRJbml0KCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICB9Ci0K
LSAgICAgICAgb3V0IDw8ICI7ICI7Ci0KLSAgICAgICAgaWYgKG5vZGUtPmdldENvbmRpdGlvbigp
KQotICAgICAgICB7Ci0gICAgICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2Uo
dGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBvdXQgPDwgIjsgIjsKLQotICAgICAgICBpZiAo
bm9kZS0+Z2V0RXhwcmVzc2lvbigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBub2RlLT5nZXRF
eHByZXNzaW9uKCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgb3V0IDw8
ICIpXG4iOwotICAgICAgICAKLSAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRM
aW5lKCkuZmlyc3RfbGluZSk7Ci0gICAgICAgIG91dCA8PCAie1xuIjsKLSAgICB9Ci0KLSAgICBp
ZiAobm9kZS0+Z2V0Qm9keSgpKQotICAgIHsKLSAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRzKG5v
ZGUtPmdldEJvZHkoKSk7Ci0gICAgfQotCi0gICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5n
ZXRMaW5lKCkuZmlyc3RfbGluZSk7Ci0gICAgb3V0IDw8ICI7fVxuIjsKLQotICAgIGlmIChub2Rl
LT5nZXRUeXBlKCkgPT0gRUxvb3BEb1doaWxlKQotICAgIHsKLSAgICAgICAgb3V0cHV0TGluZURp
cmVjdGl2ZShub2RlLT5nZXRDb25kaXRpb24oKS0+Z2V0TGluZSgpLmZpcnN0X2xpbmUpOwotICAg
ICAgICBvdXQgPDwgIndoaWxlKFxuIjsKLQotICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+
dHJhdmVyc2UodGhpcyk7Ci0KLSAgICAgICAgb3V0IDw8ICIpOyI7Ci0gICAgfQotCi0gICAgb3V0
IDw8ICJ9XG4iOwotCi0gICAgbUluc2lkZURpc2NvbnRpbnVvdXNMb29wID0gd2FzRGlzY29udGlu
dW91czsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBPdXRwdXRITFNMOjp2aXNpdEJy
YW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCAqbm9kZSkKLXsKLSAgICBUSW5mb1NpbmtC
YXNlICZvdXQgPSBtQm9keTsKLQotICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkpCi0gICAg
ewotICAgICAgY2FzZSBFT3BLaWxsOgotICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGlz
Y2FyZDtcbiIsICIiLCAiIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BCcmVhazoK
LSAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAobUV4Y2Vzc2l2ZUxvb3BJbmRleCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBv
dXQgPDwgIntCcmVhayI7Ci0gICAgICAgICAgICAgICAgbUV4Y2Vzc2l2ZUxvb3BJbmRleC0+dHJh
dmVyc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIgPSB0cnVlOyBicmVhazt9XG4i
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dCA8PCAiYnJlYWs7XG4iOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BDb250aW51ZTogb3V0cHV0VHJpcGxldCh2aXNp
dCwgImNvbnRpbnVlO1xuIiwgIiIsICIiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFJldHVybjoK
LSAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAobm9kZS0+Z2V0RXhwcmVzc2lvbigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IG91dCA8PCAicmV0dXJuICI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJyZXR1cm47XG4iOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IFBvc3RWaXNpdCkKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIjtcbiI7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIE91dHB1dEhMU0w6OnRyYXZlcnNlU3Rh
dGVtZW50cyhUSW50ZXJtTm9kZSAqbm9kZSkKLXsKLSAgICBpZiAoaXNTaW5nbGVTdGF0ZW1lbnQo
bm9kZSkpCi0gICAgewotICAgICAgICBtVW5mb2xkU2hvcnRDaXJjdWl0LT50cmF2ZXJzZShub2Rl
KTsKLSAgICB9Ci0KLSAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKLX0KLQotYm9vbCBPdXRwdXRI
TFNMOjppc1NpbmdsZVN0YXRlbWVudChUSW50ZXJtTm9kZSAqbm9kZSkKLXsKLSAgICBUSW50ZXJt
QWdncmVnYXRlICphZ2dyZWdhdGUgPSBub2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpOwotCi0gICAgaWYg
KGFnZ3JlZ2F0ZSkKLSAgICB7Ci0gICAgICAgIGlmIChhZ2dyZWdhdGUtPmdldE9wKCkgPT0gRU9w
U2VxdWVuY2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVl
bmNlOjppdGVyYXRvciBzaXQgPSBhZ2dyZWdhdGUtPmdldFNlcXVlbmNlKCkuYmVnaW4oKTsgc2l0
ICE9IGFnZ3JlZ2F0ZS0+Z2V0U2VxdWVuY2UoKS5lbmQoKTsgc2l0KyspCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgaWYgKCFpc1NpbmdsZVN0YXRlbWVudCgqc2l0KSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIEhhbmRsZSBsb29wcyB3aXRo
IG1vcmUgdGhhbiAyNTQgaXRlcmF0aW9ucyAodW5zdXBwb3J0ZWQgYnkgRDNEOSkgYnkgc3BsaXR0
aW5nIHRoZW0KLS8vIChUaGUgRDNEIGRvY3VtZW50YXRpb24gc2F5cyAyNTUgaXRlcmF0aW9ucywg
YnV0IHRoZSBjb21waWxlciBjb21wbGFpbnMgYXQgYW55dGhpbmcgbW9yZSB0aGFuIDI1NCkuCi1i
b29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxvb3AgKm5vZGUpCi17
Ci0gICAgY29uc3QgaW50IE1BWF9MT09QX0lURVJBVElPTlMgPSAyNTQ7Ci0gICAgVEluZm9TaW5r
QmFzZSAmb3V0ID0gbUJvZHk7Ci0KLSAgICAvLyBQYXJzZSBsb29wcyBvZiB0aGUgZm9ybToKLSAg
ICAvLyBmb3IoaW50IGluZGV4ID0gaW5pdGlhbDsgaW5kZXggW2NvbXBhcmF0b3JdIGxpbWl0OyBp
bmRleCArPSBpbmNyZW1lbnQpCi0gICAgVEludGVybVN5bWJvbCAqaW5kZXggPSBOVUxMOwotICAg
IFRPcGVyYXRvciBjb21wYXJhdG9yID0gRU9wTnVsbDsKLSAgICBpbnQgaW5pdGlhbCA9IDA7Ci0g
ICAgaW50IGxpbWl0ID0gMDsKLSAgICBpbnQgaW5jcmVtZW50ID0gMDsKLQotICAgIC8vIFBhcnNl
IGluZGV4IG5hbWUgYW5kIGludGlhbCB2YWx1ZQotICAgIGlmIChub2RlLT5nZXRJbml0KCkpCi0g
ICAgewotICAgICAgICBUSW50ZXJtQWdncmVnYXRlICppbml0ID0gbm9kZS0+Z2V0SW5pdCgpLT5n
ZXRBc0FnZ3JlZ2F0ZSgpOwotCi0gICAgICAgIGlmIChpbml0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBUSW50ZXJtU2VxdWVuY2UgJnNlcXVlbmNlID0gaW5pdC0+Z2V0U2VxdWVuY2UoKTsKLSAg
ICAgICAgICAgIFRJbnRlcm1UeXBlZCAqdmFyaWFibGUgPSBzZXF1ZW5jZVswXS0+Z2V0QXNUeXBl
ZCgpOwotCi0gICAgICAgICAgICBpZiAodmFyaWFibGUgJiYgdmFyaWFibGUtPmdldFF1YWxpZmll
cigpID09IEV2cVRlbXBvcmFyeSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUSW50
ZXJtQmluYXJ5ICphc3NpZ24gPSB2YXJpYWJsZS0+Z2V0QXNCaW5hcnlOb2RlKCk7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoYXNzaWduLT5nZXRPcCgpID09IEVPcEluaXRpYWxpemUpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBh
c3NpZ24tPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0gICAgICAgICAgICAgICAgICAg
IFRJbnRlcm1Db25zdGFudFVuaW9uICpjb25zdGFudCA9IGFzc2lnbi0+Z2V0UmlnaHQoKS0+Z2V0
QXNDb25zdGFudFVuaW9uKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbCAmJiBj
b25zdGFudCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmdldE5v
bWluYWxTaXplKCkgPT0gMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmRleCA9IHN5bWJvbDsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbml0aWFsID0gY29uc3RhbnQtPmdldElDb25zdCgwKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFBhcnNlIGNvbXBhcmF0b3IgYW5k
IGxpbWl0IHZhbHVlCi0gICAgaWYgKGluZGV4ICE9IE5VTEwgJiYgbm9kZS0+Z2V0Q29uZGl0aW9u
KCkpCi0gICAgewotICAgICAgICBUSW50ZXJtQmluYXJ5ICp0ZXN0ID0gbm9kZS0+Z2V0Q29uZGl0
aW9uKCktPmdldEFzQmluYXJ5Tm9kZSgpOwotICAgICAgICAKLSAgICAgICAgaWYgKHRlc3QgJiYg
dGVzdC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0SWQoKSA9PSBpbmRleC0+Z2V0
SWQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgVEludGVybUNvbnN0YW50VW5pb24gKmNvbnN0
YW50ID0gdGVzdC0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0KLSAgICAgICAg
ICAgIGlmIChjb25zdGFudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29u
c3RhbnQtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAmJiBjb25zdGFudC0+Z2V0Tm9taW5hbFNp
emUoKSA9PSAxKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY29tcGFy
YXRvciA9IHRlc3QtPmdldE9wKCk7Ci0gICAgICAgICAgICAgICAgICAgIGxpbWl0ID0gY29uc3Rh
bnQtPmdldElDb25zdCgwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICAvLyBQYXJzZSBpbmNyZW1lbnQKLSAgICBpZiAoaW5kZXggIT0g
TlVMTCAmJiBjb21wYXJhdG9yICE9IEVPcE51bGwgJiYgbm9kZS0+Z2V0RXhwcmVzc2lvbigpKQot
ICAgIHsKLSAgICAgICAgVEludGVybUJpbmFyeSAqYmluYXJ5VGVybWluYWwgPSBub2RlLT5nZXRF
eHByZXNzaW9uKCktPmdldEFzQmluYXJ5Tm9kZSgpOwotICAgICAgICBUSW50ZXJtVW5hcnkgKnVu
YXJ5VGVybWluYWwgPSBub2RlLT5nZXRFeHByZXNzaW9uKCktPmdldEFzVW5hcnlOb2RlKCk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAoYmluYXJ5VGVybWluYWwpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIFRPcGVyYXRvciBvcCA9IGJpbmFyeVRlcm1pbmFsLT5nZXRPcCgpOwotICAgICAgICAgICAg
VEludGVybUNvbnN0YW50VW5pb24gKmNvbnN0YW50ID0gYmluYXJ5VGVybWluYWwtPmdldFJpZ2h0
KCktPmdldEFzQ29uc3RhbnRVbmlvbigpOwotCi0gICAgICAgICAgICBpZiAoY29uc3RhbnQpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50LT5nZXRCYXNpY1R5cGUo
KSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmdldE5vbWluYWxTaXplKCkgPT0gMSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZSA9IGNvbnN0YW50LT5nZXRJ
Q29uc3QoMCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChvcCkKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRU9wQWRkQXNzaWduOiBpbmNy
ZW1lbnQgPSB2YWx1ZTsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRU9wU3Vi
QXNzaWduOiBpbmNyZW1lbnQgPSAtdmFsdWU7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ6IFVOSU1QTEVNRU5URUQoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh1
bmFyeVRlcm1pbmFsKQotICAgICAgICB7Ci0gICAgICAgICAgICBUT3BlcmF0b3Igb3AgPSB1bmFy
eVRlcm1pbmFsLT5nZXRPcCgpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKG9wKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6IGluY3JlbWVudCA9IDE7
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OiBpbmNyZW1lbnQg
PSAtMTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OiAgaW5jcmVt
ZW50ID0gMTsgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDogIGlu
Y3JlbWVudCA9IC0xOyBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5JTVBMRU1FTlRF
RCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGluZGV4ICE9
IE5VTEwgJiYgY29tcGFyYXRvciAhPSBFT3BOdWxsICYmIGluY3JlbWVudCAhPSAwKQotICAgIHsK
LSAgICAgICAgaWYgKGNvbXBhcmF0b3IgPT0gRU9wTGVzc1RoYW5FcXVhbCkKLSAgICAgICAgewot
ICAgICAgICAgICAgY29tcGFyYXRvciA9IEVPcExlc3NUaGFuOwotICAgICAgICAgICAgbGltaXQg
Kz0gMTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjb21wYXJhdG9yID09IEVPcExlc3NUaGFu
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgaXRlcmF0aW9ucyA9IChsaW1pdCAtIGluaXRp
YWwpIC8gaW5jcmVtZW50OwotCi0gICAgICAgICAgICBpZiAoaXRlcmF0aW9ucyA8PSBNQVhfTE9P
UF9JVEVSQVRJT05TKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsgICAvLyBOb3QgYW4gZXhjZXNzaXZlIGxvb3AKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgVEludGVybVN5bWJvbCAqcmVzdG9yZUluZGV4ID0gbUV4Y2Vzc2l2ZUxvb3BJbmRleDsKLSAg
ICAgICAgICAgIG1FeGNlc3NpdmVMb29wSW5kZXggPSBpbmRleDsKLQotICAgICAgICAgICAgb3V0
IDw8ICJ7aW50ICI7Ci0gICAgICAgICAgICBpbmRleC0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAg
ICAgICBvdXQgPDwgIjtcbiIKLSAgICAgICAgICAgICAgICAgICAiYm9vbCBCcmVhayI7Ci0gICAg
ICAgICAgICBpbmRleC0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICBvdXQgPDwgIiA9IGZh
bHNlO1xuIjsKLQotICAgICAgICAgICAgYm9vbCBmaXJzdExvb3BGcmFnbWVudCA9IHRydWU7Ci0K
LSAgICAgICAgICAgIHdoaWxlIChpdGVyYXRpb25zID4gMCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBpbnQgY2xhbXBlZExpbWl0ID0gaW5pdGlhbCArIGluY3JlbWVudCAqIHN0ZDo6
bWluKE1BWF9MT09QX0lURVJBVElPTlMsIGl0ZXJhdGlvbnMpOwotCi0gICAgICAgICAgICAgICAg
aWYgKCFmaXJzdExvb3BGcmFnbWVudCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIG91dCA8PCAiaWYgKCFCcmVhayI7Ci0gICAgICAgICAgICAgICAgICAgIGluZGV4LT50
cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIpIHtcbiI7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGl0ZXJhdGlvbnMgPD0gTUFYX0xP
T1BfSVRFUkFUSU9OUykgICAvLyBMYXN0IGxvb3AgZnJhZ21lbnQKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIG1FeGNlc3NpdmVMb29wSW5kZXggPSBOVUxMOyAgIC8vIFN0
b3BzIHNldHRpbmcgdGhlIEJyZWFrIGZsYWcKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgLy8gZm9yKGludCBpbmRleCA9IGluaXRpYWw7IGluZGV4
IDwgY2xhbXBlZExpbWl0OyBpbmRleCArPSBpbmNyZW1lbnQpCi0KLSAgICAgICAgICAgICAgICBv
dXQgPDwgImZvcigiOwotICAgICAgICAgICAgICAgIGluZGV4LT50cmF2ZXJzZSh0aGlzKTsKLSAg
ICAgICAgICAgICAgICBvdXQgPDwgIiA9ICI7Ci0gICAgICAgICAgICAgICAgb3V0IDw8IGluaXRp
YWw7Ci0KLSAgICAgICAgICAgICAgICBvdXQgPDwgIjsgIjsKLSAgICAgICAgICAgICAgICBpbmRl
eC0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIgPCAiOwotICAgICAg
ICAgICAgICAgIG91dCA8PCBjbGFtcGVkTGltaXQ7Ci0KLSAgICAgICAgICAgICAgICBvdXQgPDwg
IjsgIjsKLSAgICAgICAgICAgICAgICBpbmRleC0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAg
ICAgICAgb3V0IDw8ICIgKz0gIjsKLSAgICAgICAgICAgICAgICBvdXQgPDwgaW5jcmVtZW50Owot
ICAgICAgICAgICAgICAgIG91dCA8PCAiKVxuIjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKS5maXJzdF9saW5lKTsK
LSAgICAgICAgICAgICAgICBvdXQgPDwgIntcbiI7Ci0KLSAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+Z2V0Qm9keSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Z2V0Qm9keSgpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKS5maXJzdF9saW5l
KTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIjt9XG4iOwotCi0gICAgICAgICAgICAgICAgaWYg
KCFmaXJzdExvb3BGcmFnbWVudCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIG91dCA8PCAifVxuIjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBm
aXJzdExvb3BGcmFnbWVudCA9IGZhbHNlOwotCi0gICAgICAgICAgICAgICAgaW5pdGlhbCArPSBN
QVhfTE9PUF9JVEVSQVRJT05TICogaW5jcmVtZW50OwotICAgICAgICAgICAgICAgIGl0ZXJhdGlv
bnMgLT0gTUFYX0xPT1BfSVRFUkFUSU9OUzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgb3V0IDw8ICJ9IjsKLQotICAgICAgICAgICAgbUV4Y2Vzc2l2ZUxvb3BJbmRl
eCA9IHJlc3RvcmVJbmRleDsKLQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZSBVTklNUExFTUVOVEVEKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNl
OyAgIC8vIE5vdCBoYW5kbGVkIGFzIGFuIGV4Y2Vzc2l2ZSBsb29wCi19Ci0KLXZvaWQgT3V0cHV0
SExTTDo6b3V0cHV0VHJpcGxldChWaXNpdCB2aXNpdCwgY29uc3QgVFN0cmluZyAmcHJlU3RyaW5n
LCBjb25zdCBUU3RyaW5nICZpblN0cmluZywgY29uc3QgVFN0cmluZyAmcG9zdFN0cmluZykKLXsK
LSAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKLQotICAgIGlmICh2aXNpdCA9PSBQcmVW
aXNpdCkKLSAgICB7Ci0gICAgICAgIG91dCA8PCBwcmVTdHJpbmc7Ci0gICAgfQotICAgIGVsc2Ug
aWYgKHZpc2l0ID09IEluVmlzaXQpCi0gICAgewotICAgICAgICBvdXQgPDwgaW5TdHJpbmc7Ci0g
ICAgfQotICAgIGVsc2UgaWYgKHZpc2l0ID09IFBvc3RWaXNpdCkKLSAgICB7Ci0gICAgICAgIG91
dCA8PCBwb3N0U3RyaW5nOwotICAgIH0KLX0KLQotdm9pZCBPdXRwdXRITFNMOjpvdXRwdXRMaW5l
RGlyZWN0aXZlKGludCBsaW5lKQotewotICAgIGlmICgobUNvbnRleHQuY29tcGlsZU9wdGlvbnMg
JiBTSF9MSU5FX0RJUkVDVElWRVMpICYmIChsaW5lID4gMCkpCi0gICAgewotICAgICAgICBtQm9k
eSA8PCAiXG4iOwotICAgICAgICBtQm9keSA8PCAiI2xpbmUgIiA8PCBsaW5lOwotCi0gICAgICAg
IGlmIChtQ29udGV4dC5zb3VyY2VQYXRoKQotICAgICAgICB7Ci0gICAgICAgICAgICBtQm9keSA8
PCAiIFwiIiA8PCBtQ29udGV4dC5zb3VyY2VQYXRoIDw8ICJcIiI7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIG1Cb2R5IDw8ICJcbiI7Ci0gICAgfQotfQotCi1UU3RyaW5nIE91dHB1dEhM
U0w6OmFyZ3VtZW50U3RyaW5nKGNvbnN0IFRJbnRlcm1TeW1ib2wgKnN5bWJvbCkKLXsKLSAgICBU
UXVhbGlmaWVyIHF1YWxpZmllciA9IHN5bWJvbC0+Z2V0UXVhbGlmaWVyKCk7Ci0gICAgY29uc3Qg
VFR5cGUgJnR5cGUgPSBzeW1ib2wtPmdldFR5cGUoKTsKLSAgICBUU3RyaW5nIG5hbWUgPSBzeW1i
b2wtPmdldFN5bWJvbCgpOwotCi0gICAgaWYgKG5hbWUuZW1wdHkoKSkgICAvLyBITFNMIGRlbWFu
ZHMgbmFtZWQgYXJndW1lbnRzLCBhbHNvIGZvciBwcm90b3R5cGVzCi0gICAgewotICAgICAgICBu
YW1lID0gIngiICsgc3RyKG1VbmlxdWVJbmRleCsrKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsK
LSAgICAgICAgbmFtZSA9IGRlY29yYXRlKG5hbWUpOwotICAgIH0KLQotICAgIGlmIChtT3V0cHV0
VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUICYmIElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgp
KSkKLSAgICB7Ci0gICAgICAgcmV0dXJuIHF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpICsgIiAi
ICsgdGV4dHVyZVN0cmluZyh0eXBlKSArICIgdGV4dHVyZV8iICsgbmFtZSArIGFycmF5U3RyaW5n
KHR5cGUpICsgIiwgIiArCi0gICAgICAgICAgICAgIHF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIp
ICsgIiBTYW1wbGVyU3RhdGUgc2FtcGxlcl8iICsgbmFtZSArIGFycmF5U3RyaW5nKHR5cGUpOwot
ICAgIH0KLQotICAgIHJldHVybiBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIgIiArIHR5
cGVTdHJpbmcodHlwZSkgKyAiICIgKyBuYW1lICsgYXJyYXlTdHJpbmcodHlwZSk7Ci19Ci0KLVRT
dHJpbmcgT3V0cHV0SExTTDo6cXVhbGlmaWVyU3RyaW5nKFRRdWFsaWZpZXIgcXVhbGlmaWVyKQot
ewotICAgIHN3aXRjaChxdWFsaWZpZXIpCi0gICAgewotICAgICAgY2FzZSBFdnFJbjogICAgICAg
ICAgICByZXR1cm4gImluIjsKLSAgICAgIGNhc2UgRXZxT3V0OiAgICAgICAgICAgcmV0dXJuICJv
dXQiOwotICAgICAgY2FzZSBFdnFJbk91dDogICAgICAgICByZXR1cm4gImlub3V0IjsKLSAgICAg
IGNhc2UgRXZxQ29uc3RSZWFkT25seTogcmV0dXJuICJjb25zdCI7Ci0gICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiAiIjsKLX0KLQotVFN0cmluZyBPdXRw
dXRITFNMOjp0eXBlU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQotewotICAgIGlmICh0eXBlLmdl
dEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKLSAgICB7Ci0gICAgICAgIGNvbnN0IFRTdHJpbmcm
IHR5cGVOYW1lID0gdHlwZS5nZXRTdHJ1Y3QoKS0+bmFtZSgpOwotICAgICAgICBpZiAodHlwZU5h
bWUgIT0gIiIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzdHJ1Y3RMb29rdXAodHlw
ZU5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgICAvLyBOYW1lbGVzcyBzdHJ1Y3R1cmUs
IGRlZmluZSBpbiBwbGFjZQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBURmllbGRMaXN0
ICZmaWVsZHMgPSB0eXBlLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKLQotICAgICAgICAgICAgVFN0
cmluZyBzdHJpbmcgPSAic3RydWN0XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7
XG4iOwotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGZpZWxkcy5z
aXplKCk7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCBURmllbGQg
KmZpZWxkID0gZmllbGRzW2ldOwotCi0gICAgICAgICAgICAgICAgc3RyaW5nICs9ICIgICAgIiAr
IHR5cGVTdHJpbmcoKmZpZWxkLT50eXBlKCkpICsgIiAiICsgZGVjb3JhdGUoZmllbGQtPm5hbWUo
KSkgKyBhcnJheVN0cmluZygqZmllbGQtPnR5cGUoKSkgKyAiO1xuIjsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgc3RyaW5nICs9ICJ9ICI7Ci0KLSAgICAgICAgICAgIHJldHVybiBzdHJp
bmc7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZS5pc01hdHJpeCgpKQotICAg
IHsKLSAgICAgICAgc3dpdGNoICh0eXBlLmdldE5vbWluYWxTaXplKCkpCi0gICAgICAgIHsKLSAg
ICAgICAgICBjYXNlIDI6IHJldHVybiAiZmxvYXQyeDIiOwotICAgICAgICAgIGNhc2UgMzogcmV0
dXJuICJmbG9hdDN4MyI7Ci0gICAgICAgICAgY2FzZSA0OiByZXR1cm4gImZsb2F0NHg0IjsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0
QmFzaWNUeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEVidEZsb2F0OgotICAgICAg
ICAgICAgc3dpdGNoICh0eXBlLmdldE5vbWluYWxTaXplKCkpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgIGNhc2UgMTogcmV0dXJuICJmbG9hdCI7Ci0gICAgICAgICAgICAgIGNhc2UgMjog
cmV0dXJuICJmbG9hdDIiOwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiAiZmxvYXQzIjsK
LSAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gImZsb2F0NCI7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5h
bFNpemUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gImlu
dCI7Ci0gICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuICJpbnQyIjsKLSAgICAgICAgICAgICAg
Y2FzZSAzOiByZXR1cm4gImludDMiOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiAiaW50
NCI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSBFYnRCb29sOgotICAgICAgICAgICAg
c3dpdGNoICh0eXBlLmdldE5vbWluYWxTaXplKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgIGNhc2UgMTogcmV0dXJuICJib29sIjsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4g
ImJvb2wyIjsKLSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gImJvb2wzIjsKLSAgICAgICAg
ICAgICAgY2FzZSA0OiByZXR1cm4gImJvb2w0IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICBj
YXNlIEVidFZvaWQ6Ci0gICAgICAgICAgICByZXR1cm4gInZvaWQiOwotICAgICAgICAgIGNhc2Ug
RWJ0U2FtcGxlcjJEOgotICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkQiOwotICAgICAgICAg
IGNhc2UgRWJ0U2FtcGxlckN1YmU6Ci0gICAgICAgICAgICByZXR1cm4gInNhbXBsZXJDVUJFIjsK
LSAgICAgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzoKLSAgICAgICAgICAgIHJldHVy
biAic2FtcGxlcjJEIjsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBVTlJFQUNIQUJMRSgpOwotICAgIHJldHVybiAiPHVua25v
d24gdHlwZT4iOwotfQotCi1UU3RyaW5nIE91dHB1dEhMU0w6OnRleHR1cmVTdHJpbmcoY29uc3Qg
VFR5cGUgJnR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlLmdldEJhc2ljVHlwZSgpKQotICAgIHsK
LSAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgotICAgICAgICByZXR1cm4gIlRleHR1cmUyRCI7Ci0g
ICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgotICAgICAgICByZXR1cm4gIlRleHR1cmVDdWJlIjsK
LSAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOgotICAgICAgICByZXR1cm4gIlRleHR1
cmUyRCI7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBVTlJF
QUNIQUJMRSgpOwotICAgIHJldHVybiAiPHVua25vd24gdGV4dHVyZSB0eXBlPiI7Ci19Ci0KLVRT
dHJpbmcgT3V0cHV0SExTTDo6YXJyYXlTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpCi17Ci0gICAg
aWYgKCF0eXBlLmlzQXJyYXkoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAiIjsKLSAgICB9Ci0K
LSAgICByZXR1cm4gIlsiICsgc3RyKHR5cGUuZ2V0QXJyYXlTaXplKCkpICsgIl0iOwotfQotCi1U
U3RyaW5nIE91dHB1dEhMU0w6OmluaXRpYWxpemVyKGNvbnN0IFRUeXBlICZ0eXBlKQotewotICAg
IFRTdHJpbmcgc3RyaW5nOwotCi0gICAgc2l6ZV90IHNpemUgPSB0eXBlLmdldE9iamVjdFNpemUo
KTsKLSAgICBmb3IgKHNpemVfdCBjb21wb25lbnQgPSAwOyBjb21wb25lbnQgPCBzaXplOyBjb21w
b25lbnQrKykKLSAgICB7Ci0gICAgICAgIHN0cmluZyArPSAiMCI7Ci0KLSAgICAgICAgaWYgKGNv
bXBvbmVudCArIDEgPCBzaXplKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdHJpbmcgKz0gIiwg
IjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAieyIgKyBzdHJpbmcgKyAifSI7Ci19
Ci0KLXZvaWQgT3V0cHV0SExTTDo6YWRkQ29uc3RydWN0b3IoY29uc3QgVFR5cGUgJnR5cGUsIGNv
bnN0IFRTdHJpbmcgJm5hbWUsIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAqcGFyYW1ldGVycykKLXsK
LSAgICBpZiAobmFtZSA9PSAiIikKLSAgICB7Ci0gICAgICAgIHJldHVybjsgICAvLyBOYW1lbGVz
cyBzdHJ1Y3R1cmVzIGRvbid0IGhhdmUgY29uc3RydWN0b3JzCi0gICAgfQotCi0gICAgaWYgKHR5
cGUuZ2V0U3RydWN0KCkgJiYgbVN0cnVjdE5hbWVzLmZpbmQoZGVjb3JhdGUobmFtZSkpICE9IG1T
dHJ1Y3ROYW1lcy5lbmQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsgICAvLyBBbHJlYWR5IGFk
ZGVkCi0gICAgfQotCi0gICAgVFR5cGUgY3RvclR5cGUgPSB0eXBlOwotICAgIGN0b3JUeXBlLmNs
ZWFyQXJyYXluZXNzKCk7Ci0gICAgY3RvclR5cGUuc2V0UHJlY2lzaW9uKEVicEhpZ2gpOwotICAg
IGN0b3JUeXBlLnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwotCi0gICAgVFN0cmluZyBjdG9y
TmFtZSA9IHR5cGUuZ2V0U3RydWN0KCkgPyBkZWNvcmF0ZShuYW1lKSA6IG5hbWU7Ci0KLSAgICB0
eXBlZGVmIHN0ZDo6dmVjdG9yPFRUeXBlPiBQYXJhbWV0ZXJBcnJheTsKLSAgICBQYXJhbWV0ZXJB
cnJheSBjdG9yUGFyYW1ldGVyczsKLQotICAgIGlmICh0eXBlLmdldFN0cnVjdCgpKQotICAgIHsK
LSAgICAgICAgbVN0cnVjdE5hbWVzLmluc2VydChkZWNvcmF0ZShuYW1lKSk7Ci0KLSAgICAgICAg
VFN0cmluZyBzdHJ1Y3R1cmU7Ci0gICAgICAgIHN0cnVjdHVyZSArPSAic3RydWN0ICIgKyBkZWNv
cmF0ZShuYW1lKSArICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICJ7XG4iOwotCi0gICAgICAg
IGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHR5cGUuZ2V0U3RydWN0KCktPmZpZWxkcygpOwot
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgaSsr
KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBURmllbGQgKmZpZWxkID0gZmllbGRzW2ld
OwotCi0gICAgICAgICAgICBzdHJ1Y3R1cmUgKz0gIiAgICAiICsgdHlwZVN0cmluZygqZmllbGQt
PnR5cGUoKSkgKyAiICIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLT5uYW1lKCksIHR5cGUpICsgYXJy
YXlTdHJpbmcoKmZpZWxkLT50eXBlKCkpICsgIjtcbiI7Ci0gICAgICAgIH0KLQotICAgICAgICBz
dHJ1Y3R1cmUgKz0gIn07XG4iOwotCi0gICAgICAgIGlmIChzdGQ6OmZpbmQobVN0cnVjdERlY2xh
cmF0aW9ucy5iZWdpbigpLCBtU3RydWN0RGVjbGFyYXRpb25zLmVuZCgpLCBzdHJ1Y3R1cmUpID09
IG1TdHJ1Y3REZWNsYXJhdGlvbnMuZW5kKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1TdHJ1
Y3REZWNsYXJhdGlvbnMucHVzaF9iYWNrKHN0cnVjdHVyZSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKLSAgICAg
ICAgewotICAgICAgICAgICAgY3RvclBhcmFtZXRlcnMucHVzaF9iYWNrKCpmaWVsZHNbaV0tPnR5
cGUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAocGFyYW1ldGVycykKLSAgICB7
Ci0gICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBwYXJhbWV0ZXIg
PSBwYXJhbWV0ZXJzLT5iZWdpbigpOyBwYXJhbWV0ZXIgIT0gcGFyYW1ldGVycy0+ZW5kKCk7IHBh
cmFtZXRlcisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBjdG9yUGFyYW1ldGVycy5wdXNoX2Jh
Y2soKCpwYXJhbWV0ZXIpLT5nZXRBc1R5cGVkKCktPmdldFR5cGUoKSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgVFN0cmluZyBjb25zdHJ1Y3RvcjsK
LQotICAgIGlmIChjdG9yVHlwZS5nZXRTdHJ1Y3QoKSkKLSAgICB7Ci0gICAgICAgIGNvbnN0cnVj
dG9yICs9IGN0b3JOYW1lICsgIiAiICsgY3Rvck5hbWUgKyAiX2N0b3IoIjsKLSAgICB9Ci0gICAg
ZWxzZSAgIC8vIEJ1aWx0LWluIHR5cGUKLSAgICB7Ci0gICAgICAgIGNvbnN0cnVjdG9yICs9IHR5
cGVTdHJpbmcoY3RvclR5cGUpICsgIiAiICsgY3Rvck5hbWUgKyAiKCI7Ci0gICAgfQotCi0gICAg
Zm9yICh1bnNpZ25lZCBpbnQgcGFyYW1ldGVyID0gMDsgcGFyYW1ldGVyIDwgY3RvclBhcmFtZXRl
cnMuc2l6ZSgpOyBwYXJhbWV0ZXIrKykKLSAgICB7Ci0gICAgICAgIGNvbnN0IFRUeXBlICZ0eXBl
ID0gY3RvclBhcmFtZXRlcnNbcGFyYW1ldGVyXTsKLQotICAgICAgICBjb25zdHJ1Y3RvciArPSB0
eXBlU3RyaW5nKHR5cGUpICsgIiB4IiArIHN0cihwYXJhbWV0ZXIpICsgYXJyYXlTdHJpbmcodHlw
ZSk7Ci0KLSAgICAgICAgaWYgKHBhcmFtZXRlciA8IGN0b3JQYXJhbWV0ZXJzLnNpemUoKSAtIDEp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9ICIsICI7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBjb25zdHJ1Y3RvciArPSAiKVxuIgotICAgICAgICAgICAgICAgICAgICJ7
XG4iOwotCi0gICAgaWYgKGN0b3JUeXBlLmdldFN0cnVjdCgpKQotICAgIHsKLSAgICAgICAgY29u
c3RydWN0b3IgKz0gIiAgICAiICsgY3Rvck5hbWUgKyAiIHN0cnVjdHVyZSA9IHsiOwotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICBjb25zdHJ1Y3RvciArPSAiICAgIHJldHVybiAiICsg
dHlwZVN0cmluZyhjdG9yVHlwZSkgKyAiKCI7Ci0gICAgfQotCi0gICAgaWYgKGN0b3JUeXBlLmlz
TWF0cml4KCkgJiYgY3RvclBhcmFtZXRlcnMuc2l6ZSgpID09IDEpCi0gICAgewotICAgICAgICBp
bnQgZGltID0gY3RvclR5cGUuZ2V0Tm9taW5hbFNpemUoKTsKLSAgICAgICAgY29uc3QgVFR5cGUg
JnBhcmFtZXRlciA9IGN0b3JQYXJhbWV0ZXJzWzBdOwotCi0gICAgICAgIGlmIChwYXJhbWV0ZXIu
aXNTY2FsYXIoKSkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93
IDwgZGltOyByb3crKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBj
b2wgPSAwOyBjb2wgPCBkaW07IGNvbCsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgY29uc3RydWN0b3IgKz0gVFN0cmluZygocm93ID09IGNvbCkgPyAieDAiIDogIjAu
MCIpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJvdyA8
IGRpbSAtIDEgfHwgY29sIDwgZGltIC0gMSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gIiwgIjsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBlbHNlIGlmIChwYXJhbWV0ZXIuaXNNYXRyaXgoKSkKLSAgICAgICAgewotICAgICAgICAgICAg
Zm9yIChpbnQgcm93ID0gMDsgcm93IDwgZGltOyByb3crKykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBkaW07IGNvbCsrKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJvdyA8IHBhcmFtZXRlci5nZXROb21p
bmFsU2l6ZSgpICYmIGNvbCA8IHBhcmFtZXRlci5nZXROb21pbmFsU2l6ZSgpKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSBUU3Ry
aW5nKCJ4MCIpICsgIlsiICsgc3RyKHJvdykgKyAiXSIgKyAiWyIgKyBzdHIoY29sKSArICJdIjsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9IFRT
dHJpbmcoKHJvdyA9PSBjb2wpID8gIjEuMCIgOiAiMC4wIik7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAocm93IDwgZGltIC0gMSB8fCBjb2wgPCBkaW0g
LSAxKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25z
dHJ1Y3RvciArPSAiLCAiOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
LSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgc2l6ZV90IHJlbWFpbmluZ0NvbXBvbmVu
dHMgPSBjdG9yVHlwZS5nZXRPYmplY3RTaXplKCk7Ci0gICAgICAgIHNpemVfdCBwYXJhbWV0ZXJJ
bmRleCA9IDA7Ci0KLSAgICAgICAgd2hpbGUgKHJlbWFpbmluZ0NvbXBvbmVudHMgPiAwKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBjb25zdCBUVHlwZSAmcGFyYW1ldGVyID0gY3RvclBhcmFtZXRl
cnNbcGFyYW1ldGVySW5kZXhdOwotICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHBhcmFtZXRlclNp
emUgPSBwYXJhbWV0ZXIuZ2V0T2JqZWN0U2l6ZSgpOwotICAgICAgICAgICAgYm9vbCBtb3JlUGFy
YW1ldGVycyA9IHBhcmFtZXRlckluZGV4ICsgMSA8IGN0b3JQYXJhbWV0ZXJzLnNpemUoKTsKLQot
ICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gIngiICsgc3RyKHN0YXRpY19jYXN0PGludD4ocGFy
YW1ldGVySW5kZXgpKTsKLQotICAgICAgICAgICAgaWYgKHBhcmFtZXRlci5pc1NjYWxhcigpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEFTU0VSVChwYXJhbWV0ZXJTaXplIDw9IHJl
bWFpbmluZ0NvbXBvbmVudHMpOwotICAgICAgICAgICAgICAgIHJlbWFpbmluZ0NvbXBvbmVudHMg
LT0gcGFyYW1ldGVyU2l6ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHBh
cmFtZXRlci5pc1ZlY3RvcigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChy
ZW1haW5pbmdDb21wb25lbnRzID09IHBhcmFtZXRlclNpemUgfHwgbW9yZVBhcmFtZXRlcnMpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQocGFyYW1ldGVyU2l6
ZSA8PSByZW1haW5pbmdDb21wb25lbnRzKTsKLSAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5n
Q29tcG9uZW50cyAtPSBwYXJhbWV0ZXJTaXplOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBlbHNlIGlmIChyZW1haW5pbmdDb21wb25lbnRzIDwgc3RhdGljX2Nhc3Q8c2l6ZV90
PihwYXJhbWV0ZXIuZ2V0Tm9taW5hbFNpemUoKSkpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKHJlbWFpbmluZ0NvbXBvbmVudHMpCi0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IGNvbnN0cnVjdG9yICs9ICIu
eCI7ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogY29uc3RydWN0b3Ig
Kz0gIi54eSI7ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBjb25zdHJ1
Y3RvciArPSAiLnh5eiI7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IGNv
bnN0cnVjdG9yICs9ICIueHl6dyI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICByZW1haW5pbmdDb21wb25lbnRzID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZSBpZiAocGFyYW1ldGVyLmlzTWF0cml4KCkgfHwgcGFyYW1ldGVyLmdldFN0cnVjdCgp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEFTU0VSVChyZW1haW5pbmdDb21wb25l
bnRzID09IHBhcmFtZXRlclNpemUgfHwgbW9yZVBhcmFtZXRlcnMpOwotICAgICAgICAgICAgICAg
IEFTU0VSVChwYXJhbWV0ZXJTaXplIDw9IHJlbWFpbmluZ0NvbXBvbmVudHMpOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIHJlbWFpbmluZ0NvbXBvbmVudHMgLT0gcGFyYW1ldGVy
U2l6ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQot
ICAgICAgICAgICAgaWYgKG1vcmVQYXJhbWV0ZXJzKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHBhcmFtZXRlckluZGV4Kys7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
IChyZW1haW5pbmdDb21wb25lbnRzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNv
bnN0cnVjdG9yICs9ICIsICI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAoY3RvclR5cGUuZ2V0U3RydWN0KCkpCi0gICAgewotICAgICAgICBjb25zdHJ1Y3RvciAr
PSAifTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gc3RydWN0dXJlO1xu
IgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsK
LSAgICAgICAgY29uc3RydWN0b3IgKz0gIik7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9
XG4iOwotICAgIH0KLQotICAgIG1Db25zdHJ1Y3RvcnMuaW5zZXJ0KGNvbnN0cnVjdG9yKTsKLX0K
LQotY29uc3QgQ29uc3RhbnRVbmlvbiAqT3V0cHV0SExTTDo6d3JpdGVDb25zdGFudFVuaW9uKGNv
bnN0IFRUeXBlICZ0eXBlLCBjb25zdCBDb25zdGFudFVuaW9uICpjb25zdFVuaW9uKQotewotICAg
IFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OwotCi0gICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBl
KCkgPT0gRWJ0U3RydWN0KQotICAgIHsKLSAgICAgICAgb3V0IDw8IHN0cnVjdExvb2t1cCh0eXBl
LmdldFN0cnVjdCgpLT5uYW1lKCkpICsgIl9jdG9yKCI7Ci0gICAgICAgIAotICAgICAgICBjb25z
dCBURmllbGRMaXN0ICZmaWVsZHMgPSB0eXBlLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKLQotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKLSAgICAgICAg
ewotICAgICAgICAgICAgY29uc3QgVFR5cGUgKmZpZWxkVHlwZSA9IGZpZWxkc1tpXS0+dHlwZSgp
OwotCi0gICAgICAgICAgICBjb25zdFVuaW9uID0gd3JpdGVDb25zdGFudFVuaW9uKCpmaWVsZFR5
cGUsIGNvbnN0VW5pb24pOwotCi0gICAgICAgICAgICBpZiAoaSAhPSBmaWVsZHMuc2l6ZSgpIC0g
MSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIG91dCA8PCAiKSI7Ci0gICAgfQotICAgIGVsc2UK
LSAgICB7Ci0gICAgICAgIHNpemVfdCBzaXplID0gdHlwZS5nZXRPYmplY3RTaXplKCk7Ci0gICAg
ICAgIGJvb2wgd3JpdGVUeXBlID0gc2l6ZSA+IDE7Ci0gICAgICAgIAotICAgICAgICBpZiAod3Jp
dGVUeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgdHlwZVN0cmluZyh0eXBlKSA8
PCAiKCI7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
IGkrKywgY29uc3RVbmlvbisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0
VW5pb24tPmdldFR5cGUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBFYnRG
bG9hdDogb3V0IDw8IHN0ZDo6bWluKEZMVF9NQVgsIHN0ZDo6bWF4KC1GTFRfTUFYLCBjb25zdFVu
aW9uLT5nZXRGQ29uc3QoKSkpOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAg
b3V0IDw8IGNvbnN0VW5pb24tPmdldElDb25zdCgpOyBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBFYnRCb29sOiAgb3V0IDw8IGNvbnN0VW5pb24tPmdldEJDb25zdCgpOyBicmVhazsKLSAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKGkgIT0gc2l6ZSAtIDEpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
b3V0IDw8ICIsICI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAod3Jp
dGVUeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgIikiOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGNvbnN0VW5pb247Ci19Ci0KLVRTdHJpbmcgT3V0cHV0SExTTDo6
c2NvcGVTdHJpbmcodW5zaWduZWQgaW50IGRlcHRoTGltaXQpCi17Ci0gICAgVFN0cmluZyBzdHJp
bmc7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1TY29wZUJyYWNrZXQuc2l6
ZSgpICYmIGkgPCBkZXB0aExpbWl0OyBpKyspCi0gICAgewotICAgICAgICBzdHJpbmcgKz0gIl8i
ICsgc3RyKGkpOwotICAgIH0KLQotICAgIHJldHVybiBzdHJpbmc7Ci19Ci0KLVRTdHJpbmcgT3V0
cHV0SExTTDo6c2NvcGVkU3RydWN0KGNvbnN0IFRTdHJpbmcgJnR5cGVOYW1lKQotewotICAgIGlm
ICh0eXBlTmFtZSA9PSAiIikKLSAgICB7Ci0gICAgICAgIHJldHVybiB0eXBlTmFtZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gdHlwZU5hbWUgKyBzY29wZVN0cmluZyhtU2NvcGVEZXB0aCk7Ci19Ci0K
LVRTdHJpbmcgT3V0cHV0SExTTDo6c3RydWN0TG9va3VwKGNvbnN0IFRTdHJpbmcgJnR5cGVOYW1l
KQotewotICAgIGZvciAoaW50IGRlcHRoID0gbVNjb3BlRGVwdGg7IGRlcHRoID49IDA7IGRlcHRo
LS0pCi0gICAgewotICAgICAgICBUU3RyaW5nIHNjb3BlZE5hbWUgPSBkZWNvcmF0ZSh0eXBlTmFt
ZSArIHNjb3BlU3RyaW5nKGRlcHRoKSk7Ci0KLSAgICAgICAgZm9yIChTdHJ1Y3ROYW1lczo6aXRl
cmF0b3Igc3RydWN0TmFtZSA9IG1TdHJ1Y3ROYW1lcy5iZWdpbigpOyBzdHJ1Y3ROYW1lICE9IG1T
dHJ1Y3ROYW1lcy5lbmQoKTsgc3RydWN0TmFtZSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoKnN0cnVjdE5hbWUgPT0gc2NvcGVkTmFtZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gc2NvcGVkTmFtZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LQotICAgIFVOUkVBQ0hBQkxFKCk7ICAgLy8gU2hvdWxkIGhhdmUgZm91bmQgYSBtYXRjaGluZyBj
b25zdHJ1Y3RvcgotCi0gICAgcmV0dXJuIHR5cGVOYW1lOwotfQotCi1UU3RyaW5nIE91dHB1dEhM
U0w6OmRlY29yYXRlKGNvbnN0IFRTdHJpbmcgJnN0cmluZykKLXsKLSAgICBpZiAoc3RyaW5nLmNv
bXBhcmUoMCwgMywgImdsXyIpICE9IDAgJiYgc3RyaW5nLmNvbXBhcmUoMCwgMywgImR4XyIpICE9
IDApCi0gICAgewotICAgICAgICByZXR1cm4gIl8iICsgc3RyaW5nOwotICAgIH0KLSAgICAKLSAg
ICByZXR1cm4gc3RyaW5nOwotfQotCi1UU3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlVW5pZm9y
bShjb25zdCBUU3RyaW5nICZzdHJpbmcsIGNvbnN0IFRUeXBlICZ0eXBlKQotewotICAgIGlmICh0
eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFNhbXBsZXJFeHRlcm5hbE9FUykKLSAgICB7Ci0gICAg
ICAgIHJldHVybiAiZXhfIiArIHN0cmluZzsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGRlY29y
YXRlKHN0cmluZyk7Ci19Ci0KLVRTdHJpbmcgT3V0cHV0SExTTDo6ZGVjb3JhdGVGaWVsZChjb25z
dCBUU3RyaW5nICZzdHJpbmcsIGNvbnN0IFRUeXBlICZzdHJ1Y3R1cmUpCi17Ci0gICAgaWYgKHN0
cnVjdHVyZS5nZXRTdHJ1Y3QoKS0+bmFtZSgpLmNvbXBhcmUoMCwgMywgImdsXyIpICE9IDApCi0g
ICAgewotICAgICAgICByZXR1cm4gZGVjb3JhdGUoc3RyaW5nKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gc3RyaW5nOwotfQotCi1UU3RyaW5nIE91dHB1dEhMU0w6OnJlZ2lzdGVyU3RyaW5nKFRJbnRl
cm1TeW1ib2wgKm9wZXJhbmQpCi17Ci0gICAgQVNTRVJUKG9wZXJhbmQtPmdldFF1YWxpZmllcigp
ID09IEV2cVVuaWZvcm0pOwotCi0gICAgaWYgKElzU2FtcGxlcihvcGVyYW5kLT5nZXRCYXNpY1R5
cGUoKSkpCi0gICAgewotICAgICAgICByZXR1cm4gInMiICsgc3RyKHNhbXBsZXJSZWdpc3Rlcihv
cGVyYW5kKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuICJjIiArIHN0cih1bmlmb3JtUmVnaXN0ZXIo
b3BlcmFuZCkpOwotfQotCi1pbnQgT3V0cHV0SExTTDo6c2FtcGxlclJlZ2lzdGVyKFRJbnRlcm1T
eW1ib2wgKnNhbXBsZXIpCi17Ci0gICAgY29uc3QgVFR5cGUgJnR5cGUgPSBzYW1wbGVyLT5nZXRU
eXBlKCk7Ci0gICAgQVNTRVJUKElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSk7Ci0KLSAg
ICBpbnQgaW5kZXggPSBtU2FtcGxlclJlZ2lzdGVyOwotICAgIG1TYW1wbGVyUmVnaXN0ZXIgKz0g
c2FtcGxlci0+dG90YWxSZWdpc3RlckNvdW50KCk7Ci0KLSAgICBkZWNsYXJlVW5pZm9ybSh0eXBl
LCBzYW1wbGVyLT5nZXRTeW1ib2woKSwgaW5kZXgpOwotCi0gICAgcmV0dXJuIGluZGV4OwotfQot
Ci1pbnQgT3V0cHV0SExTTDo6dW5pZm9ybVJlZ2lzdGVyKFRJbnRlcm1TeW1ib2wgKnVuaWZvcm0p
Ci17Ci0gICAgY29uc3QgVFR5cGUgJnR5cGUgPSB1bmlmb3JtLT5nZXRUeXBlKCk7Ci0gICAgQVNT
RVJUKCFJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpOwotCi0gICAgaW50IGluZGV4ID0g
bVVuaWZvcm1SZWdpc3RlcjsKLSAgICBtVW5pZm9ybVJlZ2lzdGVyICs9IHVuaWZvcm0tPnRvdGFs
UmVnaXN0ZXJDb3VudCgpOwotCi0gICAgZGVjbGFyZVVuaWZvcm0odHlwZSwgdW5pZm9ybS0+Z2V0
U3ltYm9sKCksIGluZGV4KTsKLQotICAgIHJldHVybiBpbmRleDsKLX0KLQotdm9pZCBPdXRwdXRI
TFNMOjpkZWNsYXJlVW5pZm9ybShjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFt
ZSwgaW50IGluZGV4KQotewotICAgIFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3Ry
dWN0KCk7Ci0KLSAgICBpZiAoIXN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIG1BY3RpdmVVbmlm
b3Jtcy5wdXNoX2JhY2soVW5pZm9ybShnbFZhcmlhYmxlVHlwZSh0eXBlKSwgZ2xWYXJpYWJsZVBy
ZWNpc2lvbih0eXBlKSwgbmFtZS5jX3N0cigpLCB0eXBlLmdldEFycmF5U2l6ZSgpLCBpbmRleCkp
OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBjb25zdCBURmllbGRMaXN0ICZmaWVs
ZHMgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpOwotCi0gICAgICAgIGlmICh0eXBlLmlzQXJyYXkoKSkK
LSAgICAgICAgewotICAgICAgICAgICAgaW50IGVsZW1lbnRJbmRleCA9IGluZGV4OwotCi0gICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGUuZ2V0QXJyYXlTaXplKCk7IGkrKykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGZpZWxk
cy5zaXplKCk7IGorKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNv
bnN0IFRUeXBlICZmaWVsZFR5cGUgPSAqZmllbGRzW2pdLT50eXBlKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRTdHJpbmcgdW5pZm9ybU5hbWUgPSBuYW1lICsgIlsiICsgc3RyKGkpICsg
Il0uIiArIGZpZWxkc1tqXS0+bmFtZSgpOwotICAgICAgICAgICAgICAgICAgICBkZWNsYXJlVW5p
Zm9ybShmaWVsZFR5cGUsIHVuaWZvcm1OYW1lLCBlbGVtZW50SW5kZXgpOwotICAgICAgICAgICAg
ICAgICAgICBlbGVtZW50SW5kZXggKz0gZmllbGRUeXBlLnRvdGFsUmVnaXN0ZXJDb3VudCgpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNl
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBmaWVsZEluZGV4ID0gaW5kZXg7Ci0KLSAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgaSsrKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZFR5cGUgPSAqZmllbGRz
W2ldLT50eXBlKCk7Ci0gICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyB1bmlmb3JtTmFtZSA9
IG5hbWUgKyAiLiIgKyBmaWVsZHNbaV0tPm5hbWUoKTsKLSAgICAgICAgICAgICAgICBkZWNsYXJl
VW5pZm9ybShmaWVsZFR5cGUsIHVuaWZvcm1OYW1lLCBmaWVsZEluZGV4KTsKLSAgICAgICAgICAg
ICAgICBmaWVsZEluZGV4ICs9IGZpZWxkVHlwZS50b3RhbFJlZ2lzdGVyQ291bnQoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotR0xlbnVtIE91dHB1dEhMU0w6OmdsVmFy
aWFibGVUeXBlKGNvbnN0IFRUeXBlICZ0eXBlKQotewotICAgIGlmICh0eXBlLmdldEJhc2ljVHlw
ZSgpID09IEVidEZsb2F0KQotICAgIHsKLSAgICAgICAgaWYgKHR5cGUuaXNTY2FsYXIoKSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0ZMT0FUOwotICAgICAgICB9Ci0gICAgICAg
IGVsc2UgaWYgKHR5cGUuaXNWZWN0b3IoKSkKLSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNo
KHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2Fz
ZSAyOiByZXR1cm4gR0xfRkxPQVRfVkVDMjsKLSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4g
R0xfRkxPQVRfVkVDMzsKLSAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gR0xfRkxPQVRfVkVD
NDsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh0eXBlLmlzTWF0cml4KCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHN3aXRjaCh0eXBlLmdldE5vbWluYWxTaXplKCkpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIEdMX0ZMT0FUX01BVDI7Ci0gICAgICAgICAg
ICAgIGNhc2UgMzogcmV0dXJuIEdMX0ZMT0FUX01BVDM7Ci0gICAgICAgICAgICAgIGNhc2UgNDog
cmV0dXJuIEdMX0ZMT0FUX01BVDQ7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgp
OwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidEludCkKLSAg
ICB7Ci0gICAgICAgIGlmICh0eXBlLmlzU2NhbGFyKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBHTF9JTlQ7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodHlwZS5pc1ZlY3Rv
cigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2godHlwZS5nZXROb21pbmFsU2l6ZSgp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBHTF9JTlRfVkVD
MjsKLSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gR0xfSU5UX1ZFQzM7Ci0gICAgICAgICAg
ICAgIGNhc2UgNDogcmV0dXJuIEdMX0lOVF9WRUM0OwotICAgICAgICAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBF
YnRCb29sKQotICAgIHsKLSAgICAgICAgaWYgKHR5cGUuaXNTY2FsYXIoKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIEdMX0JPT0w7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAo
dHlwZS5pc1ZlY3RvcigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2godHlwZS5nZXRO
b21pbmFsU2l6ZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDI6IHJldHVy
biBHTF9CT09MX1ZFQzI7Ci0gICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIEdMX0JPT0xfVkVD
MzsKLSAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gR0xfQk9PTF9WRUM0OwotICAgICAgICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZS5nZXRC
YXNpY1R5cGUoKSA9PSBFYnRTYW1wbGVyMkQpCi0gICAgewotICAgICAgICByZXR1cm4gR0xfU0FN
UExFUl8yRDsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRT
YW1wbGVyQ3ViZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9TQU1QTEVSX0NVQkU7Ci0gICAg
fQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgIHJldHVybiBHTF9OT05FOwotfQotCi1H
TGVudW0gT3V0cHV0SExTTDo6Z2xWYXJpYWJsZVByZWNpc2lvbihjb25zdCBUVHlwZSAmdHlwZSkK
LXsKLSAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRGbG9hdCkKLSAgICB7Ci0gICAg
ICAgIHN3aXRjaCAodHlwZS5nZXRQcmVjaXNpb24oKSkKLSAgICAgICAgewotICAgICAgICAgIGNh
c2UgRWJwSGlnaDogICByZXR1cm4gR0xfSElHSF9GTE9BVDsKLSAgICAgICAgICBjYXNlIEVicE1l
ZGl1bTogcmV0dXJuIEdMX01FRElVTV9GTE9BVDsKLSAgICAgICAgICBjYXNlIEVicExvdzogICAg
cmV0dXJuIEdMX0xPV19GTE9BVDsKLSAgICAgICAgICBjYXNlIEVicFVuZGVmaW5lZDoKLSAgICAg
ICAgICAgIC8vIFNob3VsZCBiZSBkZWZpbmVkIGFzIHRoZSBkZWZhdWx0IHByZWNpc2lvbiBieSB0
aGUgcGFyc2VyCi0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBlbHNlIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidEludCkKLSAgICB7
Ci0gICAgICAgIHN3aXRjaCAodHlwZS5nZXRQcmVjaXNpb24oKSkKLSAgICAgICAgewotICAgICAg
ICAgIGNhc2UgRWJwSGlnaDogICByZXR1cm4gR0xfSElHSF9JTlQ7Ci0gICAgICAgICAgY2FzZSBF
YnBNZWRpdW06IHJldHVybiBHTF9NRURJVU1fSU5UOwotICAgICAgICAgIGNhc2UgRWJwTG93OiAg
ICByZXR1cm4gR0xfTE9XX0lOVDsKLSAgICAgICAgICBjYXNlIEVicFVuZGVmaW5lZDoKLSAgICAg
ICAgICAgIC8vIFNob3VsZCBiZSBkZWZpbmVkIGFzIHRoZSBkZWZhdWx0IHByZWNpc2lvbiBieSB0
aGUgcGFyc2VyCi0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIC8vIE90aGVyIHR5cGVzIChib29sZWFuLCBzYW1wbGVyKSBkb24ndCBoYXZl
IGEgcHJlY2lzaW9uCi0gICAgcmV0dXJuIEdMX05PTkU7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA1ODZhNzZmYjljNzE0ZGJjZTgxM2I2Mzg0ZThiYzQ5NWNlOThhY2Vl
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmgKKysrIC9kZXYvbnVsbApA
QCAtMSwxNjcgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9P
VVRQVVRITFNMX0hfCi0jZGVmaW5lIENPTVBJTEVSX09VVFBVVEhMU0xfSF8KLQotI2luY2x1ZGUg
PGxpc3Q+Ci0jaW5jbHVkZSA8c2V0PgotI2luY2x1ZGUgPG1hcD4KLQotI2RlZmluZSBHTF9BUElD
QUxMCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0KLSNpbmNsdWRlICJjb21waWxlci9pbnRlcm1l
ZGlhdGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9QYXJzZUNvbnRleHQuaCIKLSNpbmNsdWRlICJj
b21waWxlci9Vbmlmb3JtLmgiCi0KLW5hbWVzcGFjZSBzaAotewotY2xhc3MgVW5mb2xkU2hvcnRD
aXJjdWl0OwotCi1jbGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKLXsK
LSAgcHVibGljOgotICAgIE91dHB1dEhMU0woVFBhcnNlQ29udGV4dCAmY29udGV4dCwgY29uc3Qg
U2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMsIFNoU2hhZGVyT3V0cHV0IG91dHB1dFR5cGUp
OwotICAgIH5PdXRwdXRITFNMKCk7Ci0KLSAgICB2b2lkIG91dHB1dCgpOwotCi0gICAgVEluZm9T
aW5rQmFzZSAmZ2V0Qm9keVN0cmVhbSgpOwotICAgIGNvbnN0IEFjdGl2ZVVuaWZvcm1zICZnZXRV
bmlmb3JtcygpOwotCi0gICAgVFN0cmluZyB0eXBlU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKTsK
LSAgICBUU3RyaW5nIHRleHR1cmVTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpOwotICAgIHN0YXRp
YyBUU3RyaW5nIHF1YWxpZmllclN0cmluZyhUUXVhbGlmaWVyIHF1YWxpZmllcik7Ci0gICAgc3Rh
dGljIFRTdHJpbmcgYXJyYXlTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpOwotICAgIHN0YXRpYyBU
U3RyaW5nIGluaXRpYWxpemVyKGNvbnN0IFRUeXBlICZ0eXBlKTsKLSAgICBzdGF0aWMgVFN0cmlu
ZyBkZWNvcmF0ZShjb25zdCBUU3RyaW5nICZzdHJpbmcpOyAgICAgICAgICAgICAgICAgICAgICAv
LyBQcmVwZW5kcyBhbiB1bmRlcnNjb3JlIHRvIGF2b2lkIG5hbWluZyBjbGFzaGVzCi0gICAgc3Rh
dGljIFRTdHJpbmcgZGVjb3JhdGVVbmlmb3JtKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3Qg
VFR5cGUgJnR5cGUpOwotICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlRmllbGQoY29uc3QgVFN0
cmluZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAmc3RydWN0dXJlKTsKLQotICBwcm90ZWN0ZWQ6Ci0g
ICAgdm9pZCBoZWFkZXIoKTsKLQotICAgIC8vIFZpc2l0IEFTVCBub2RlcyBhbmQgb3V0cHV0IHRo
ZWlyIGNvZGUgdG8gdGhlIGJvZHkgc3RyZWFtCi0gICAgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJt
U3ltYm9sKik7Ci0gICAgdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5p
b24qKTsKLSAgICBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7
Ci0gICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqKTsKLSAgICBi
b29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKik7Ci0gICAg
Ym9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOwotICAg
IGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCopOwotICAgIGJvb2wgdmlz
aXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqKTsKLQotICAgIHZvaWQgdHJhdmVy
c2VTdGF0ZW1lbnRzKFRJbnRlcm1Ob2RlICpub2RlKTsKLSAgICBib29sIGlzU2luZ2xlU3RhdGVt
ZW50KFRJbnRlcm1Ob2RlICpub2RlKTsKLSAgICBib29sIGhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVElu
dGVybUxvb3AgKm5vZGUpOwotICAgIHZvaWQgb3V0cHV0VHJpcGxldChWaXNpdCB2aXNpdCwgY29u
c3QgVFN0cmluZyAmcHJlU3RyaW5nLCBjb25zdCBUU3RyaW5nICZpblN0cmluZywgY29uc3QgVFN0
cmluZyAmcG9zdFN0cmluZyk7Ci0gICAgdm9pZCBvdXRwdXRMaW5lRGlyZWN0aXZlKGludCBsaW5l
KTsKLSAgICBUU3RyaW5nIGFyZ3VtZW50U3RyaW5nKGNvbnN0IFRJbnRlcm1TeW1ib2wgKnN5bWJv
bCk7Ci0gICAgaW50IHZlY3RvclNpemUoY29uc3QgVFR5cGUgJnR5cGUpIGNvbnN0OwotCi0gICAg
dm9pZCBhZGRDb25zdHJ1Y3Rvcihjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFt
ZSwgY29uc3QgVEludGVybVNlcXVlbmNlICpwYXJhbWV0ZXJzKTsKLSAgICBjb25zdCBDb25zdGFu
dFVuaW9uICp3cml0ZUNvbnN0YW50VW5pb24oY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IENvbnN0
YW50VW5pb24gKmNvbnN0VW5pb24pOwotCi0gICAgVFN0cmluZyBzY29wZVN0cmluZyh1bnNpZ25l
ZCBpbnQgZGVwdGhMaW1pdCk7Ci0gICAgVFN0cmluZyBzY29wZWRTdHJ1Y3QoY29uc3QgVFN0cmlu
ZyAmdHlwZU5hbWUpOwotICAgIFRTdHJpbmcgc3RydWN0TG9va3VwKGNvbnN0IFRTdHJpbmcgJnR5
cGVOYW1lKTsKLQotICAgIFRQYXJzZUNvbnRleHQgJm1Db250ZXh0OwotICAgIGNvbnN0IFNoU2hh
ZGVyT3V0cHV0IG1PdXRwdXRUeXBlOwotICAgIFVuZm9sZFNob3J0Q2lyY3VpdCAqbVVuZm9sZFNo
b3J0Q2lyY3VpdDsKLSAgICBib29sIG1JbnNpZGVGdW5jdGlvbjsKLQotICAgIC8vIE91dHB1dCBz
dHJlYW1zCi0gICAgVEluZm9TaW5rQmFzZSBtSGVhZGVyOwotICAgIFRJbmZvU2lua0Jhc2UgbUJv
ZHk7Ci0gICAgVEluZm9TaW5rQmFzZSBtRm9vdGVyOwotCi0gICAgdHlwZWRlZiBzdGQ6Om1hcDxU
U3RyaW5nLCBUSW50ZXJtU3ltYm9sKj4gUmVmZXJlbmNlZFN5bWJvbHM7Ci0gICAgUmVmZXJlbmNl
ZFN5bWJvbHMgbVJlZmVyZW5jZWRVbmlmb3JtczsKLSAgICBSZWZlcmVuY2VkU3ltYm9scyBtUmVm
ZXJlbmNlZEF0dHJpYnV0ZXM7Ci0gICAgUmVmZXJlbmNlZFN5bWJvbHMgbVJlZmVyZW5jZWRWYXJ5
aW5nczsKLQotICAgIC8vIFBhcmFtZXRlcnMgZGV0ZXJtaW5pbmcgd2hhdCBnb2VzIGluIHRoZSBo
ZWFkZXIgb3V0cHV0Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUyRDsKLSAgICBib29sIG1Vc2VzVGV4
dHVyZTJEX2JpYXM7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUyRExvZDsKLSAgICBib29sIG1Vc2Vz
VGV4dHVyZTJEUHJvajsKLSAgICBib29sIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzOwotICAgIGJv
b2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZTsKLSAg
ICBib29sIG1Vc2VzVGV4dHVyZUN1YmVfYmlhczsKLSAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmVM
b2Q7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUyRExvZDA7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUy
RExvZDBfYmlhczsKLSAgICBib29sIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDA7Ci0gICAgYm9vbCBt
VXNlc1RleHR1cmUyRFByb2pMb2QwX2JpYXM7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlTG9k
MDsKLSAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXM7Ci0gICAgYm9vbCBtVXNlc0Zy
YWdDb2xvcjsKLSAgICBib29sIG1Vc2VzRnJhZ0RhdGE7Ci0gICAgYm9vbCBtVXNlc0RlcHRoUmFu
Z2U7Ci0gICAgYm9vbCBtVXNlc0ZyYWdDb29yZDsKLSAgICBib29sIG1Vc2VzUG9pbnRDb29yZDsK
LSAgICBib29sIG1Vc2VzRnJvbnRGYWNpbmc7Ci0gICAgYm9vbCBtVXNlc1BvaW50U2l6ZTsKLSAg
ICBib29sIG1Vc2VzRnJhZ0RlcHRoOwotICAgIGJvb2wgbVVzZXNYb3I7Ci0gICAgYm9vbCBtVXNl
c01vZDE7Ci0gICAgYm9vbCBtVXNlc01vZDJ2OwotICAgIGJvb2wgbVVzZXNNb2QyZjsKLSAgICBi
b29sIG1Vc2VzTW9kM3Y7Ci0gICAgYm9vbCBtVXNlc01vZDNmOwotICAgIGJvb2wgbVVzZXNNb2Q0
djsKLSAgICBib29sIG1Vc2VzTW9kNGY7Ci0gICAgYm9vbCBtVXNlc0ZhY2Vmb3J3YXJkMTsKLSAg
ICBib29sIG1Vc2VzRmFjZWZvcndhcmQyOwotICAgIGJvb2wgbVVzZXNGYWNlZm9yd2FyZDM7Ci0g
ICAgYm9vbCBtVXNlc0ZhY2Vmb3J3YXJkNDsKLSAgICBib29sIG1Vc2VzQXRhbjJfMTsKLSAgICBi
b29sIG1Vc2VzQXRhbjJfMjsKLSAgICBib29sIG1Vc2VzQXRhbjJfMzsKLSAgICBib29sIG1Vc2Vz
QXRhbjJfNDsKLSAgICBib29sIG1Vc2VzRGlzY2FyZFJld3JpdGluZzsKLQotICAgIGludCBtTnVt
UmVuZGVyVGFyZ2V0czsKLQotICAgIHR5cGVkZWYgc3RkOjpzZXQ8VFN0cmluZz4gQ29uc3RydWN0
b3JzOwotICAgIENvbnN0cnVjdG9ycyBtQ29uc3RydWN0b3JzOwotCi0gICAgdHlwZWRlZiBzdGQ6
OnNldDxUU3RyaW5nPiBTdHJ1Y3ROYW1lczsKLSAgICBTdHJ1Y3ROYW1lcyBtU3RydWN0TmFtZXM7
Ci0KLSAgICB0eXBlZGVmIHN0ZDo6bGlzdDxUU3RyaW5nPiBTdHJ1Y3REZWNsYXJhdGlvbnM7Ci0g
ICAgU3RydWN0RGVjbGFyYXRpb25zIG1TdHJ1Y3REZWNsYXJhdGlvbnM7Ci0KLSAgICB0eXBlZGVm
IHN0ZDo6dmVjdG9yPGludD4gU2NvcGVCcmFja2V0OwotICAgIFNjb3BlQnJhY2tldCBtU2NvcGVC
cmFja2V0OwotICAgIHVuc2lnbmVkIGludCBtU2NvcGVEZXB0aDsKLQotICAgIGludCBtVW5pcXVl
SW5kZXg7ICAgLy8gRm9yIGNyZWF0aW5nIHVuaXF1ZSBuYW1lcwotCi0gICAgYm9vbCBtQ29udGFp
bnNMb29wRGlzY29udGludWl0eTsKLSAgICBib29sIG1PdXRwdXRMb2QwRnVuY3Rpb247Ci0gICAg
Ym9vbCBtSW5zaWRlRGlzY29udGludW91c0xvb3A7Ci0KLSAgICBUSW50ZXJtU3ltYm9sICptRXhj
ZXNzaXZlTG9vcEluZGV4OwotCi0gICAgaW50IG1Vbmlmb3JtUmVnaXN0ZXI7Ci0gICAgaW50IG1T
YW1wbGVyUmVnaXN0ZXI7Ci0KLSAgICBUU3RyaW5nIHJlZ2lzdGVyU3RyaW5nKFRJbnRlcm1TeW1i
b2wgKm9wZXJhbmQpOwotICAgIGludCBzYW1wbGVyUmVnaXN0ZXIoVEludGVybVN5bWJvbCAqc2Ft
cGxlcik7Ci0gICAgaW50IHVuaWZvcm1SZWdpc3RlcihUSW50ZXJtU3ltYm9sICp1bmlmb3JtKTsK
LSAgICB2b2lkIGRlY2xhcmVVbmlmb3JtKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5n
ICZuYW1lLCBpbnQgaW5kZXgpOwotICAgIHN0YXRpYyBHTGVudW0gZ2xWYXJpYWJsZVR5cGUoY29u
c3QgVFR5cGUgJnR5cGUpOwotICAgIHN0YXRpYyBHTGVudW0gZ2xWYXJpYWJsZVByZWNpc2lvbihj
b25zdCBUVHlwZSAmdHlwZSk7Ci0KLSAgICBBY3RpdmVVbmlmb3JtcyBtQWN0aXZlVW5pZm9ybXM7
Ci19OwotfQotCi0jZW5kaWYgICAvLyBDT01QSUxFUl9PVVRQVVRITFNMX0hfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VDb250ZXh0LmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUNvbnRleHQuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTI3OTUyM2JhNzQxNmE4NzI0NTMxNjBlNWFj
M2UzNjNkODBhZjY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUNvbnRleHQuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMTYwMiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0j
aW5jbHVkZSAiY29tcGlsZXIvUGFyc2VDb250ZXh0LmgiCi0KLSNpbmNsdWRlIDxzdGRhcmcuaD4K
LSNpbmNsdWRlIDxzdGRpby5oPgotCi0jaW5jbHVkZSAiY29tcGlsZXIvZ2xzbGFuZy5oIgotI2lu
Y2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9Tb3VyY2VMb2NhdGlvbi5oIgotCi0vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLwotLy8KLS8vIFN1Yi0gdmVjdG9yIGFuZCBtYXRyaXggZmllbGRzCi0vLwotLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCi0KLS8vCi0vLyBMb29rIGF0IGEgJy4nIGZpZWxkIHNlbGVjdG9yIHN0cmluZyBh
bmQgY2hhbmdlIGl0IGludG8gb2Zmc2V0cwotLy8gZm9yIGEgdmVjdG9yLgotLy8KLWJvb2wgVFBh
cnNlQ29udGV4dDo6cGFyc2VWZWN0b3JGaWVsZHMoY29uc3QgVFN0cmluZyYgY29tcFN0cmluZywg
aW50IHZlY1NpemUsIFRWZWN0b3JGaWVsZHMmIGZpZWxkcywgY29uc3QgVFNvdXJjZUxvYyYgbGlu
ZSkKLXsKLSAgICBmaWVsZHMubnVtID0gKGludCkgY29tcFN0cmluZy5zaXplKCk7Ci0gICAgaWYg
KGZpZWxkcy5udW0gPiA0KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHZlY3RvciBm
aWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCkpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgZW51bSB7Ci0gICAgICAgIGV4eXp3LAotICAgICAgICBlcmdiYSwK
LSAgICAgICAgZXN0cHEKLSAgICB9IGZpZWxkU2V0WzRdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBmaWVsZHMubnVtOyArK2kpIHsKLSAgICAgICAgc3dpdGNoIChjb21wU3RyaW5nW2ldKSAg
ewotICAgICAgICBjYXNlICd4JzogCi0gICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDA7
Ci0gICAgICAgICAgICBmaWVsZFNldFtpXSA9IGV4eXp3OwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgJ3InOiAKLSAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMDsKLSAg
ICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXJnYmE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSAncyc6Ci0gICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDA7Ci0gICAgICAg
ICAgICBmaWVsZFNldFtpXSA9IGVzdHBxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgJ3knOiAKLSAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMTsKLSAgICAgICAgICAg
IGZpZWxkU2V0W2ldID0gZXh5enc7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAn
Zyc6IAotICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAxOwotICAgICAgICAgICAgZmll
bGRTZXRbaV0gPSBlcmdiYTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICd0JzoK
LSAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMTsKLSAgICAgICAgICAgIGZpZWxkU2V0
W2ldID0gZXN0cHE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAneic6IAotICAg
ICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAyOwotICAgICAgICAgICAgZmllbGRTZXRbaV0g
PSBleHl6dzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdiJzogCi0gICAgICAg
ICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDI7Ci0gICAgICAgICAgICBmaWVsZFNldFtpXSA9IGVy
Z2JhOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ3AnOgotICAgICAgICAgICAg
ZmllbGRzLm9mZnNldHNbaV0gPSAyOwotICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBlc3RwcTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICAgICAgY2FzZSAndyc6IAotICAgICAg
ICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAzOwotICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBl
eHl6dzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdhJzogCi0gICAgICAgICAg
ICBmaWVsZHMub2Zmc2V0c1tpXSA9IDM7Ci0gICAgICAgICAgICBmaWVsZFNldFtpXSA9IGVyZ2Jh
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ3EnOgotICAgICAgICAgICAgZmll
bGRzLm9mZnNldHNbaV0gPSAzOwotICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBlc3RwcTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZXJyb3IobGlu
ZSwgImlsbGVnYWwgdmVjdG9yIGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGZpZWxkcy5udW07ICsraSkgewotICAgICAgICBpZiAoZmllbGRzLm9m
ZnNldHNbaV0gPj0gdmVjU2l6ZSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwgInZlY3RvciBm
aWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlIiwgIGNvbXBTdHJpbmcuY19zdHIoKSk7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaSA+IDApIHsK
LSAgICAgICAgICAgIGlmIChmaWVsZFNldFtpXSAhPSBmaWVsZFNldFtpLTFdKSB7Ci0gICAgICAg
ICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgLSB2ZWN0b3IgY29tcG9uZW50IGZpZWxkcyBu
b3QgZnJvbSB0aGUgc2FtZSBzZXQiLCBjb21wU3RyaW5nLmNfc3RyKCkpOwotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi0KLS8vCi0vLyBMb29rIGF0IGEgJy4nIGZpZWxkIHNlbGVjdG9y
IHN0cmluZyBhbmQgY2hhbmdlIGl0IGludG8gb2Zmc2V0cwotLy8gZm9yIGEgbWF0cml4LgotLy8K
LWJvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VNYXRyaXhGaWVsZHMoY29uc3QgVFN0cmluZyYgY29t
cFN0cmluZywgaW50IG1hdFNpemUsIFRNYXRyaXhGaWVsZHMmIGZpZWxkcywgY29uc3QgVFNvdXJj
ZUxvYyYgbGluZSkKLXsKLSAgICBmaWVsZHMud2hvbGVSb3cgPSBmYWxzZTsKLSAgICBmaWVsZHMu
d2hvbGVDb2wgPSBmYWxzZTsKLSAgICBmaWVsZHMucm93ID0gLTE7Ci0gICAgZmllbGRzLmNvbCA9
IC0xOwotCi0gICAgaWYgKGNvbXBTdHJpbmcuc2l6ZSgpICE9IDIpIHsKLSAgICAgICAgZXJyb3Io
bGluZSwgImlsbGVnYWwgbGVuZ3RoIG9mIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3Ry
aW5nLmNfc3RyKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGNv
bXBTdHJpbmdbMF0gPT0gJ18nKSB7Ci0gICAgICAgIGlmIChjb21wU3RyaW5nWzFdIDwgJzAnIHx8
IGNvbXBTdHJpbmdbMV0gPiAnMycpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2Fs
IG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCkpOwotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGZpZWxkcy53aG9sZUNvbCA9IHRy
dWU7Ci0gICAgICAgIGZpZWxkcy5jb2wgPSBjb21wU3RyaW5nWzFdIC0gJzAnOwotICAgIH0gZWxz
ZSBpZiAoY29tcFN0cmluZ1sxXSA9PSAnXycpIHsKLSAgICAgICAgaWYgKGNvbXBTdHJpbmdbMF0g
PCAnMCcgfHwgY29tcFN0cmluZ1swXSA+ICczJykgewotICAgICAgICAgICAgZXJyb3IobGluZSwg
ImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgZmllbGRzLndob2xl
Um93ID0gdHJ1ZTsKLSAgICAgICAgZmllbGRzLnJvdyA9IGNvbXBTdHJpbmdbMF0gLSAnMCc7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGNvbXBTdHJpbmdbMF0gPCAnMCcgfHwgY29tcFN0cmlu
Z1swXSA+ICczJyB8fAotICAgICAgICAgICAgY29tcFN0cmluZ1sxXSA8ICcwJyB8fCBjb21wU3Ry
aW5nWzFdID4gJzMnKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCBtYXRyaXgg
ZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpKTsKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBmaWVsZHMucm93ID0gY29tcFN0cmluZ1swXSAt
ICcwJzsKLSAgICAgICAgZmllbGRzLmNvbCA9IGNvbXBTdHJpbmdbMV0gLSAnMCc7Ci0gICAgfQot
Ci0gICAgaWYgKGZpZWxkcy5yb3cgPj0gbWF0U2l6ZSB8fCBmaWVsZHMuY29sID49IG1hdFNpemUp
IHsKLSAgICAgICAgZXJyb3IobGluZSwgIm1hdHJpeCBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJh
bmdlIiwgY29tcFN0cmluZy5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8KLS8vIEVycm9ycwot
Ly8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLwotCi0vLwotLy8gVHJhY2sgd2hldGhlciBlcnJvcnMgaGF2ZSBv
Y2N1cnJlZC4KLS8vCi12b2lkIFRQYXJzZUNvbnRleHQ6OnJlY292ZXIoKQotewotfQotCi0vLwot
Ly8gVXNlZCBieSBmbGV4L2Jpc29uIHRvIG91dHB1dCBhbGwgc3ludGF4IGFuZCBwYXJzaW5nIGVy
cm9ycy4KLS8vCi12b2lkIFRQYXJzZUNvbnRleHQ6OmVycm9yKGNvbnN0IFRTb3VyY2VMb2MmIGxv
YywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcmVhc29uLCBjb25zdCBj
aGFyKiB0b2tlbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJh
SW5mbykKLXsKLSAgICBwcDo6U291cmNlTG9jYXRpb24gc3JjTG9jOwotICAgIHNyY0xvYy5maWxl
ID0gbG9jLmZpcnN0X2ZpbGU7Ci0gICAgc3JjTG9jLmxpbmUgPSBsb2MuZmlyc3RfbGluZTsKLSAg
ICBkaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpFUlJPUiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3JjTG9jLCByZWFzb24sIHRva2VuLCBleHRyYUluZm8pOwotCi19
Ci0KLXZvaWQgVFBhcnNlQ29udGV4dDo6d2FybmluZyhjb25zdCBUU291cmNlTG9jJiBsb2MsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcmVhc29uLCBjb25zdCBjaGFy
KiB0b2tlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUlu
Zm8pIHsKLSAgICBwcDo6U291cmNlTG9jYXRpb24gc3JjTG9jOwotICAgIHNyY0xvYy5maWxlID0g
bG9jLmZpcnN0X2ZpbGU7Ci0gICAgc3JjTG9jLmxpbmUgPSBsb2MuZmlyc3RfbGluZTsKLSAgICBk
aWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpXQVJOSU5HLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICBzcmNMb2MsIHJlYXNvbiwgdG9rZW4sIGV4dHJhSW5mbyk7Ci19Ci0K
LXZvaWQgVFBhcnNlQ29udGV4dDo6dHJhY2UoY29uc3QgY2hhciogc3RyKQotewotICAgIGRpYWdu
b3N0aWNzLndyaXRlRGVidWcoc3RyKTsKLX0KLQotLy8KLS8vIFNhbWUgZXJyb3IgbWVzc2FnZSBm
b3IgYWxsIHBsYWNlcyBhc3NpZ25tZW50cyBkb24ndCB3b3JrLgotLy8KLXZvaWQgVFBhcnNlQ29u
dGV4dDo6YXNzaWduRXJyb3IoY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgY2hhciogb3As
IFRTdHJpbmcgbGVmdCwgVFN0cmluZyByaWdodCkKLXsKLSAgICBzdGQ6OnN0cmluZ3N0cmVhbSBl
eHRyYUluZm9TdHJlYW07Ci0gICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJjYW5ub3QgY29udmVydCBm
cm9tICciIDw8IHJpZ2h0IDw8ICInIHRvICciIDw8IGxlZnQgPDwgIiciOwotICAgIHN0ZDo6c3Ry
aW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKLSAgICBlcnJvcihsaW5lLCAi
Iiwgb3AsIGV4dHJhSW5mby5jX3N0cigpKTsKLX0KLQotLy8KLS8vIFNhbWUgZXJyb3IgbWVzc2Fn
ZSBmb3IgYWxsIHBsYWNlcyB1bmFyeSBvcGVyYXRpb25zIGRvbid0IHdvcmsuCi0vLwotdm9pZCBU
UGFyc2VDb250ZXh0Ojp1bmFyeU9wRXJyb3IoY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3Qg
Y2hhciogb3AsIFRTdHJpbmcgb3BlcmFuZCkKLXsKLSAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRy
YUluZm9TdHJlYW07Ci0gICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJubyBvcGVyYXRpb24gJyIgPDwg
b3AgPDwgIicgZXhpc3RzIHRoYXQgdGFrZXMgYW4gb3BlcmFuZCBvZiB0eXBlICIgPDwgb3BlcmFu
ZCAKLSAgICAgICAgICAgICAgICAgICAgPDwgIiAob3IgdGhlcmUgaXMgbm8gYWNjZXB0YWJsZSBj
b252ZXJzaW9uKSI7Ci0gICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFt
LnN0cigpOwotICAgIGVycm9yKGxpbmUsICIgd3Jvbmcgb3BlcmFuZCB0eXBlIiwgb3AsIGV4dHJh
SW5mby5jX3N0cigpKTsKLX0KLQotLy8KLS8vIFNhbWUgZXJyb3IgbWVzc2FnZSBmb3IgYWxsIGJp
bmFyeSBvcGVyYXRpb25zIGRvbid0IHdvcmsuCi0vLwotdm9pZCBUUGFyc2VDb250ZXh0OjpiaW5h
cnlPcEVycm9yKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5n
IGxlZnQsIFRTdHJpbmcgcmlnaHQpCi17Ci0gICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZv
U3RyZWFtOwotICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAibm8gb3BlcmF0aW9uICciIDw8IG9wIDw8
ICInIGV4aXN0cyB0aGF0IHRha2VzIGEgbGVmdC1oYW5kIG9wZXJhbmQgb2YgdHlwZSAnIiA8PCBs
ZWZ0IAotICAgICAgICAgICAgICAgICAgICA8PCAiJyBhbmQgYSByaWdodCBvcGVyYW5kIG9mIHR5
cGUgJyIgPDwgcmlnaHQgPDwgIicgKG9yIHRoZXJlIGlzIG5vIGFjY2VwdGFibGUgY29udmVyc2lv
bikiOwotICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsK
LSAgICBlcnJvcihsaW5lLCAiIHdyb25nIG9wZXJhbmQgdHlwZXMgIiwgb3AsIGV4dHJhSW5mby5j
X3N0cigpKTsgCi19Ci0KLWJvb2wgVFBhcnNlQ29udGV4dDo6cHJlY2lzaW9uRXJyb3JDaGVjayhj
b25zdCBUU291cmNlTG9jJiBsaW5lLCBUUHJlY2lzaW9uIHByZWNpc2lvbiwgVEJhc2ljVHlwZSB0
eXBlKXsKLSAgICBpZiAoIWNoZWNrc1ByZWNpc2lvbkVycm9ycykKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHN3aXRjaCggdHlwZSApewotICAgIGNhc2UgRWJ0RmxvYXQ6Ci0gICAgICAgIGlm
KCBwcmVjaXNpb24gPT0gRWJwVW5kZWZpbmVkICl7Ci0gICAgICAgICAgICBlcnJvciggbGluZSwg
Ik5vIHByZWNpc2lvbiBzcGVjaWZpZWQgZm9yIChmbG9hdCkiLCAiIiApOwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRJbnQ6
Ci0gICAgICAgIGlmKCBwcmVjaXNpb24gPT0gRWJwVW5kZWZpbmVkICl7Ci0gICAgICAgICAgICBl
cnJvciggbGluZSwgIk5vIHByZWNpc2lvbiBzcGVjaWZpZWQgKGludCkiLCAiIiApOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LS8vCi0vLyBCb3RoIHRlc3QgYW5kIGlmIG5lY2Vzc2FyeSwgc3BpdCBvdXQgYW4gZXJyb3IsIHRv
IHNlZSBpZiB0aGUgbm9kZSBpcyByZWFsbHkKLS8vIGFuIGwtdmFsdWUgdGhhdCBjYW4gYmUgb3Bl
cmF0ZWQgb24gdGhpcyB3YXkuCi0vLwotLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB3YXMgYW4gZXJy
b3IuCi0vLwotYm9vbCBUUGFyc2VDb250ZXh0OjpsVmFsdWVFcnJvckNoZWNrKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUSW50ZXJtVHlwZWQqIG5vZGUpCi17Ci0gICAg
VEludGVybVN5bWJvbCogc3ltTm9kZSA9IG5vZGUtPmdldEFzU3ltYm9sTm9kZSgpOwotICAgIFRJ
bnRlcm1CaW5hcnkqIGJpbmFyeU5vZGUgPSBub2RlLT5nZXRBc0JpbmFyeU5vZGUoKTsKLQotICAg
IGlmIChiaW5hcnlOb2RlKSB7Ci0gICAgICAgIGJvb2wgZXJyb3JSZXR1cm47Ci0KLSAgICAgICAg
c3dpdGNoKGJpbmFyeU5vZGUtPmdldE9wKCkpIHsKLSAgICAgICAgY2FzZSBFT3BJbmRleERpcmVj
dDoKLSAgICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OgotICAgICAgICBjYXNlIEVPcEluZGV4
RGlyZWN0U3RydWN0OgotICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZUVycm9yQ2hlY2sobGluZSwg
b3AsIGJpbmFyeU5vZGUtPmdldExlZnQoKSk7Ci0gICAgICAgIGNhc2UgRU9wVmVjdG9yU3dpenps
ZToKLSAgICAgICAgICAgIGVycm9yUmV0dXJuID0gbFZhbHVlRXJyb3JDaGVjayhsaW5lLCBvcCwg
YmluYXJ5Tm9kZS0+Z2V0TGVmdCgpKTsKLSAgICAgICAgICAgIGlmICghZXJyb3JSZXR1cm4pIHsK
LSAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0WzRdID0gezAsMCwwLDB9OwotCi0gICAgICAgICAg
ICAgICAgVEludGVybVR5cGVkKiByaWdodE5vZGUgPSBiaW5hcnlOb2RlLT5nZXRSaWdodCgpOwot
ICAgICAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUgKmFnZ3JOb2RlID0gcmlnaHROb2RlLT5n
ZXRBc0FnZ3JlZ2F0ZSgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZvciAo
VEludGVybVNlcXVlbmNlOjppdGVyYXRvciBwID0gYWdnck5vZGUtPmdldFNlcXVlbmNlKCkuYmVn
aW4oKTsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAg
IT0gYWdnck5vZGUtPmdldFNlcXVlbmNlKCkuZW5kKCk7IHArKykgewotICAgICAgICAgICAgICAg
ICAgICBpbnQgdmFsdWUgPSAoKnApLT5nZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRVbmlvbigp
LT5nZXRJQ29uc3QoMCk7Ci0gICAgICAgICAgICAgICAgICAgIG9mZnNldFt2YWx1ZV0rKzsgICAg
IAotICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0W3ZhbHVlXSA+IDEpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSBvZiBzd2l6emxlIGNhbm5vdCBo
YXZlIGR1cGxpY2F0ZSBjb21wb25lbnRzIiwgb3ApOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0gCi0KLSAgICAgICAgICAgIHJldHVybiBlcnJvclJldHVybjsKLSAgICAg
ICAgZGVmYXVsdDogCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBlcnJv
cihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0KLSAgICBjb25zdCBjaGFyKiBzeW1ib2wgPSAwOwotICAgIGlmIChzeW1Ob2Rl
ICE9IDApCi0gICAgICAgIHN5bWJvbCA9IHN5bU5vZGUtPmdldFN5bWJvbCgpLmNfc3RyKCk7Ci0K
LSAgICBjb25zdCBjaGFyKiBtZXNzYWdlID0gMDsKLSAgICBzd2l0Y2ggKG5vZGUtPmdldFF1YWxp
ZmllcigpKSB7Ci0gICAgY2FzZSBFdnFDb25zdDogICAgICAgICAgbWVzc2FnZSA9ICJjYW4ndCBt
b2RpZnkgYSBjb25zdCI7ICAgICAgICBicmVhazsKLSAgICBjYXNlIEV2cUNvbnN0UmVhZE9ubHk6
ICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhIGNvbnN0IjsgICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRXZxQXR0cmlidXRlOiAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGFuIGF0dHJpYnV0
ZSI7ICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFVbmlmb3JtOiAgICAgICAgbWVzc2FnZSA9ICJjYW4n
dCBtb2RpZnkgYSB1bmlmb3JtIjsgICAgICBicmVhazsKLSAgICBjYXNlIEV2cVZhcnlpbmdJbjog
ICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhIHZhcnlpbmciOyAgICAgIGJyZWFrOwotICAg
IGNhc2UgRXZxRnJhZ0Nvb3JkOiAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGdsX0ZyYWdD
b29yZCI7ICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFGcm9udEZhY2luZzogICAgbWVzc2FnZSA9ICJj
YW4ndCBtb2RpZnkgZ2xfRnJvbnRGYWNpbmciOyBicmVhazsKLSAgICBjYXNlIEV2cVBvaW50Q29v
cmQ6ICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBnbF9Qb2ludENvb3JkIjsgIGJyZWFrOwot
ICAgIGRlZmF1bHQ6Ci0KLSAgICAgICAgLy8KLSAgICAgICAgLy8gVHlwZSB0aGF0IGNhbid0IGJl
IHdyaXR0ZW4gdG8/Ci0gICAgICAgIC8vCi0gICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNU
eXBlKCkpIHsKLSAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6Ci0gICAgICAgIGNhc2UgRWJ0U2Ft
cGxlckN1YmU6Ci0gICAgICAgICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhIHNhbXBsZXIi
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRWJ0Vm9pZDoKLSAgICAgICAgICAg
IG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IHZvaWQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGRlZmF1bHQ6IAotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAobWVzc2FnZSA9PSAwICYmIGJpbmFyeU5vZGUgPT0gMCAmJiBzeW1Ob2RlID09IDApIHsK
LSAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIHJlcXVpcmVkIiwgb3ApOwotCi0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotCi0gICAgLy8KLSAgICAvLyBFdmVyeXRoaW5nIGVsc2Ug
aXMgb2theSwgbm8gZXJyb3IuCi0gICAgLy8KLSAgICBpZiAobWVzc2FnZSA9PSAwKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLwotICAgIC8vIElmIHdlIGdldCBoZXJlLCB3ZSBoYXZl
IGFuIGVycm9yIGFuZCBhIG1lc3NhZ2UuCi0gICAgLy8KLSAgICBpZiAoc3ltTm9kZSkgewotICAg
ICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07Ci0gICAgICAgIGV4dHJhSW5m
b1N0cmVhbSA8PCAiXCIiIDw8IHN5bWJvbCA8PCAiXCIgKCIgPDwgbWVzc2FnZSA8PCAiKSI7Ci0g
ICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKLSAg
ICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIHJlcXVpcmVkIiwgb3AsIGV4dHJhSW5mby5jX3N0
cigpKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJh
SW5mb1N0cmVhbTsKLSAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICIoIiA8PCBtZXNzYWdlIDw8
ICIpIjsKLSAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0
cigpOwotICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCwgZXh0cmFJ
bmZvLmNfc3RyKCkpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLwotLy8gQm90
aCB0ZXN0LCBhbmQgaWYgbmVjZXNzYXJ5IHNwaXQgb3V0IGFuIGVycm9yLCB0byBzZWUgaWYgdGhl
IG5vZGUgaXMgcmVhbGx5Ci0vLyBhIGNvbnN0YW50LgotLy8KLS8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgd2FzIGFuIGVycm9yLgotLy8KLWJvb2wgVFBhcnNlQ29udGV4dDo6Y29uc3RFcnJvckNoZWNr
KFRJbnRlcm1UeXBlZCogbm9kZSkKLXsKLSAgICBpZiAobm9kZS0+Z2V0UXVhbGlmaWVyKCkgPT0g
RXZxQ29uc3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGVycm9yKG5vZGUtPmdldExp
bmUoKSwgImNvbnN0YW50IGV4cHJlc3Npb24gcmVxdWlyZWQiLCAiIik7Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotLy8KLS8vIEJvdGggdGVzdCwgYW5kIGlmIG5lY2Vzc2FyeSBzcGl0IG91dCBh
biBlcnJvciwgdG8gc2VlIGlmIHRoZSBub2RlIGlzIHJlYWxseQotLy8gYW4gaW50ZWdlci4KLS8v
Ci0vLyBSZXR1cm5zIHRydWUgaWYgdGhlIHdhcyBhbiBlcnJvci4KLS8vCi1ib29sIFRQYXJzZUNv
bnRleHQ6OmludGVnZXJFcnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSwgY29uc3QgY2hhciog
dG9rZW4pCi17Ci0gICAgaWYgKG5vZGUtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAmJiBub2Rl
LT5nZXROb21pbmFsU2l6ZSgpID09IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGVy
cm9yKG5vZGUtPmdldExpbmUoKSwgImludGVnZXIgZXhwcmVzc2lvbiByZXF1aXJlZCIsIHRva2Vu
KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLwotLy8gQm90aCB0ZXN0LCBhbmQgaWYgbmVj
ZXNzYXJ5IHNwaXQgb3V0IGFuIGVycm9yLCB0byBzZWUgaWYgd2UgYXJlIGN1cnJlbnRseQotLy8g
Z2xvYmFsbHkgc2NvcGVkLgotLy8KLS8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgd2FzIGFuIGVycm9y
LgotLy8KLWJvb2wgVFBhcnNlQ29udGV4dDo6Z2xvYmFsRXJyb3JDaGVjayhjb25zdCBUU291cmNl
TG9jJiBsaW5lLCBib29sIGdsb2JhbCwgY29uc3QgY2hhciogdG9rZW4pCi17Ci0gICAgaWYgKGds
b2JhbCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZXJyb3IobGluZSwgIm9ubHkgYWxs
b3dlZCBhdCBnbG9iYWwgc2NvcGUiLCB0b2tlbik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ly8KLS8vIEZvciBub3csIGtlZXAgaXQgc2ltcGxlOiAgaWYgaXQgc3RhcnRzICJnbF8iLCBpdCdz
IHJlc2VydmVkLCBpbmRlcGVuZGVudAotLy8gb2Ygc2NvcGUuICBFeGNlcHQsIGlmIHRoZSBzeW1i
b2wgdGFibGUgaXMgYXQgdGhlIGJ1aWx0LWluIHB1c2gtbGV2ZWwsCi0vLyB3aGljaCBpcyB3aGVu
IHdlIGFyZSBwYXJzaW5nIGJ1aWx0LWlucy4KLS8vIEFsc28gY2hlY2tzIGZvciAid2ViZ2xfIiBh
bmQgIl93ZWJnbF8iIHJlc2VydmVkIGlkZW50aWZpZXJzIGlmIHBhcnNpbmcgYQotLy8gd2ViZ2wg
c2hhZGVyLgotLy8KLS8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCi0vLwot
Ym9vbCBUUGFyc2VDb250ZXh0OjpyZXNlcnZlZEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYg
bGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllcikKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hh
ciogcmVzZXJ2ZWRFcnJNc2cgPSAicmVzZXJ2ZWQgYnVpbHQtaW4gbmFtZSI7Ci0gICAgaWYgKCFz
eW1ib2xUYWJsZS5hdEJ1aWx0SW5MZXZlbCgpKSB7Ci0gICAgICAgIGlmIChpZGVudGlmaWVyLmNv
bXBhcmUoMCwgMywgImdsXyIpID09IDApIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlc2Vy
dmVkRXJyTXNnLCAiZ2xfIik7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoaXNXZWJHTEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkgewotICAgICAgICAgICAg
aWYgKGlkZW50aWZpZXIuY29tcGFyZSgwLCA2LCAid2ViZ2xfIikgPT0gMCkgewotICAgICAgICAg
ICAgICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAid2ViZ2xfIik7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaWRlbnRp
Zmllci5jb21wYXJlKDAsIDcsICJfd2ViZ2xfIikgPT0gMCkgewotICAgICAgICAgICAgICAgIGVy
cm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAiX3dlYmdsXyIpOwotICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHNoYWRlclNwZWMgPT0g
U0hfQ1NTX1NIQURFUlNfU1BFQyAmJiBpZGVudGlmaWVyLmNvbXBhcmUoMCwgNCwgImNzc18iKSA9
PSAwKSB7Ci0gICAgICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJjc3Nf
Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKGlkZW50aWZpZXIuZmluZCgiX18iKSAhPSBUU3RyaW5nOjpucG9zKSB7
Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiaWRlbnRpZmllcnMgY29udGFpbmluZyB0d28gY29u
c2VjdXRpdmUgdW5kZXJzY29yZXMgKF9fKSBhcmUgcmVzZXJ2ZWQgYXMgcG9zc2libGUgZnV0dXJl
IGtleXdvcmRzIiwgaWRlbnRpZmllci5jX3N0cigpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLwotLy8gTWFr
ZSBzdXJlIHRoZXJlIGlzIGVub3VnaCBkYXRhIHByb3ZpZGVkIHRvIHRoZSBjb25zdHJ1Y3RvciB0
byBidWlsZAotLy8gc29tZXRoaW5nIG9mIHRoZSB0eXBlIG9mIHRoZSBjb25zdHJ1Y3Rvci4gIEFs
c28gcmV0dXJucyB0aGUgdHlwZSBvZgotLy8gdGhlIGNvbnN0cnVjdG9yLgotLy8KLS8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaW4gY29uc3RydWN0aW9uLgotLy8KLWJvb2wg
VFBhcnNlQ29udGV4dDo6Y29uc3RydWN0b3JFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIFRJbnRlcm1Ob2RlKiBub2RlLCBURnVuY3Rpb24mIGZ1bmN0aW9uLCBUT3BlcmF0b3Igb3As
IFRUeXBlKiB0eXBlKQotewotICAgICp0eXBlID0gZnVuY3Rpb24uZ2V0UmV0dXJuVHlwZSgpOwot
Ci0gICAgYm9vbCBjb25zdHJ1Y3RpbmdNYXRyaXggPSBmYWxzZTsKLSAgICBzd2l0Y2gob3ApIHsK
LSAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQzOgot
ICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0NDoKLSAgICAgICAgY29uc3RydWN0aW5nTWF0cml4ID0g
dHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDogCi0gICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIC8vCi0gICAgLy8gTm90ZTogSXQncyBva2F5IHRvIGhhdmUgdG9vIG1hbnkgY29t
cG9uZW50cyBhdmFpbGFibGUsIGJ1dCBub3Qgb2theSB0byBoYXZlIHVudXNlZAotICAgIC8vIGFy
Z3VtZW50cy4gICdmdWxsJyB3aWxsIGdvIHRvIHRydWUgd2hlbiBlbm91Z2ggYXJncyBoYXZlIGJl
ZW4gc2Vlbi4gIElmIHdlIGxvb3AKLSAgICAvLyBhZ2FpbiwgdGhlcmUgaXMgYW4gZXh0cmEgYXJn
dW1lbnQsIHNvICdvdmVyZnVsbCcgd2lsbCBiZWNvbWUgdHJ1ZS4KLSAgICAvLwotCi0gICAgc2l6
ZV90IHNpemUgPSAwOwotICAgIGJvb2wgY29uc3RUeXBlID0gdHJ1ZTsKLSAgICBib29sIGZ1bGwg
PSBmYWxzZTsKLSAgICBib29sIG92ZXJGdWxsID0gZmFsc2U7Ci0gICAgYm9vbCBtYXRyaXhJbk1h
dHJpeCA9IGZhbHNlOwotICAgIGJvb2wgYXJyYXlBcmcgPSBmYWxzZTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKTsgKytpKSB7Ci0gICAgICAgIGNv
bnN0IFRQYXJhbWV0ZXImIHBhcmFtID0gZnVuY3Rpb24uZ2V0UGFyYW0oaSk7Ci0gICAgICAgIHNp
emUgKz0gcGFyYW0udHlwZS0+Z2V0T2JqZWN0U2l6ZSgpOwotICAgICAgICAKLSAgICAgICAgaWYg
KGNvbnN0cnVjdGluZ01hdHJpeCAmJiBwYXJhbS50eXBlLT5pc01hdHJpeCgpKQotICAgICAgICAg
ICAgbWF0cml4SW5NYXRyaXggPSB0cnVlOwotICAgICAgICBpZiAoZnVsbCkKLSAgICAgICAgICAg
IG92ZXJGdWxsID0gdHJ1ZTsKLSAgICAgICAgaWYgKG9wICE9IEVPcENvbnN0cnVjdFN0cnVjdCAm
JiAhdHlwZS0+aXNBcnJheSgpICYmIHNpemUgPj0gdHlwZS0+Z2V0T2JqZWN0U2l6ZSgpKQotICAg
ICAgICAgICAgZnVsbCA9IHRydWU7Ci0gICAgICAgIGlmIChwYXJhbS50eXBlLT5nZXRRdWFsaWZp
ZXIoKSAhPSBFdnFDb25zdCkKLSAgICAgICAgICAgIGNvbnN0VHlwZSA9IGZhbHNlOwotICAgICAg
ICBpZiAocGFyYW0udHlwZS0+aXNBcnJheSgpKQotICAgICAgICAgICAgYXJyYXlBcmcgPSB0cnVl
OwotICAgIH0KLSAgICAKLSAgICBpZiAoY29uc3RUeXBlKQotICAgICAgICB0eXBlLT5zZXRRdWFs
aWZpZXIoRXZxQ29uc3QpOwotCi0gICAgaWYgKHR5cGUtPmlzQXJyYXkoKSAmJiBzdGF0aWNfY2Fz
dDxzaXplX3Q+KHR5cGUtPmdldEFycmF5U2l6ZSgpKSAhPSBmdW5jdGlvbi5nZXRQYXJhbUNvdW50
KCkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImFycmF5IGNvbnN0cnVjdG9yIG5lZWRzIG9uZSBh
cmd1bWVudCBwZXIgYXJyYXkgZWxlbWVudCIsICJjb25zdHJ1Y3RvciIpOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoYXJyYXlBcmcgJiYgb3AgIT0gRU9wQ29uc3RydWN0
U3RydWN0KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3RpbmcgZnJvbSBhIG5vbi1k
ZXJlZmVyZW5jZWQgYXJyYXkiLCAiY29uc3RydWN0b3IiKTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgaWYgKG1hdHJpeEluTWF0cml4ICYmICF0eXBlLT5pc0FycmF5KCkpIHsK
LSAgICAgICAgaWYgKGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKSAhPSAxKSB7Ci0gICAgICAgICAg
ZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBtYXRyaXggZnJvbSBtYXRyaXggY2FuIG9ubHkgdGFr
ZSBvbmUgYXJndW1lbnQiLCAiY29uc3RydWN0b3IiKTsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChvdmVyRnVsbCkgewotICAgICAgICBlcnJvcihs
aW5lLCAidG9vIG1hbnkgYXJndW1lbnRzIiwgImNvbnN0cnVjdG9yIik7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0ICYm
ICF0eXBlLT5pc0FycmF5KCkgJiYgaW50KHR5cGUtPmdldFN0cnVjdCgpLT5maWVsZHMoKS5zaXpl
KCkpICE9IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKSkgewotICAgICAgICBlcnJvcihsaW5lLCAi
TnVtYmVyIG9mIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMgZG9lcyBub3QgbWF0Y2ggdGhlIG51bWJl
ciBvZiBzdHJ1Y3R1cmUgZmllbGRzIiwgImNvbnN0cnVjdG9yIik7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLQotICAgIGlmICghdHlwZS0+aXNNYXRyaXgoKSB8fCAhbWF0cml4SW5NYXRy
aXgpIHsKLSAgICAgICAgaWYgKChvcCAhPSBFT3BDb25zdHJ1Y3RTdHJ1Y3QgJiYgc2l6ZSAhPSAx
ICYmIHNpemUgPCB0eXBlLT5nZXRPYmplY3RTaXplKCkpIHx8Ci0gICAgICAgICAgICAob3AgPT0g
RU9wQ29uc3RydWN0U3RydWN0ICYmIHNpemUgPCB0eXBlLT5nZXRPYmplY3RTaXplKCkpKSB7Ci0g
ICAgICAgICAgICBlcnJvcihsaW5lLCAibm90IGVub3VnaCBkYXRhIHByb3ZpZGVkIGZvciBjb25z
dHJ1Y3Rpb24iLCAiY29uc3RydWN0b3IiKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgVEludGVybVR5cGVkICp0eXBlZCA9IG5vZGUgPyBub2RlLT5n
ZXRBc1R5cGVkKCkgOiAwOwotICAgIGlmICh0eXBlZCA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxp
bmUsICJjb25zdHJ1Y3RvciBhcmd1bWVudCBkb2VzIG5vdCBoYXZlIGEgdHlwZSIsICJjb25zdHJ1
Y3RvciIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKG9wICE9IEVPcENv
bnN0cnVjdFN0cnVjdCAmJiBJc1NhbXBsZXIodHlwZWQtPmdldEJhc2ljVHlwZSgpKSkgewotICAg
ICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGNvbnZlcnQgYSBzYW1wbGVyIiwgImNvbnN0cnVjdG9y
Iik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAodHlwZWQtPmdldEJhc2lj
VHlwZSgpID09IEVidFZvaWQpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBjb252ZXJ0
IGEgdm9pZCIsICJjb25zdHJ1Y3RvciIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRvIHNlZSBp
ZiBhIHZvaWQgdmFyaWFibGUgaGFzIGJlZW4gZGVjbGFyZWQgYW5kIHJhaXNlIGFuIGVycm9yIG1l
c3NhZ2UgZm9yIHN1Y2ggYSBjYXNlCi0vLwotLy8gcmV0dXJucyB0cnVlIGluIGNhc2Ugb2YgYW4g
ZXJyb3IKLS8vCi1ib29sIFRQYXJzZUNvbnRleHQ6OnZvaWRFcnJvckNoZWNrKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IFRQdWJsaWNUeXBl
JiBwdWJUeXBlKQotewotICAgIGlmIChwdWJUeXBlLnR5cGUgPT0gRWJ0Vm9pZCkgewotICAgICAg
ICBlcnJvcihsaW5lLCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9pZCciLCBpZGVudGlmaWVyLmNf
c3RyKCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IAotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi0vLyBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0byBzZWUgaWYgdGhlIG5vZGUgKGZvciB0
aGUgZXhwcmVzc2lvbikgY29udGFpbnMgYSBzY2FsYXIgYm9vbGVhbiBleHByZXNzaW9uIG9yIG5v
dAotLy8KLS8vIHJldHVybnMgdHJ1ZSBpbiBjYXNlIG9mIGFuIGVycm9yCi0vLwotYm9vbCBUUGFy
c2VDb250ZXh0Ojpib29sRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBU
SW50ZXJtVHlwZWQqIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVi
dEJvb2wgfHwgdHlwZS0+aXNBcnJheSgpIHx8IHR5cGUtPmlzTWF0cml4KCkgfHwgdHlwZS0+aXNW
ZWN0b3IoKSkgewotICAgICAgICBlcnJvcihsaW5lLCAiYm9vbGVhbiBleHByZXNzaW9uIGV4cGVj
dGVkIiwgIiIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IAotCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi0vLyBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0byBzZWUgaWYgdGhlIG5vZGUgKGZv
ciB0aGUgZXhwcmVzc2lvbikgY29udGFpbnMgYSBzY2FsYXIgYm9vbGVhbiBleHByZXNzaW9uIG9y
IG5vdAotLy8KLS8vIHJldHVybnMgdHJ1ZSBpbiBjYXNlIG9mIGFuIGVycm9yCi0vLwotYm9vbCBU
UGFyc2VDb250ZXh0Ojpib29sRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25z
dCBUUHVibGljVHlwZSYgcFR5cGUpCi17Ci0gICAgaWYgKHBUeXBlLnR5cGUgIT0gRWJ0Qm9vbCB8
fCBwVHlwZS5hcnJheSB8fCBwVHlwZS5tYXRyaXggfHwgKHBUeXBlLnNpemUgPiAxKSkgewotICAg
ICAgICBlcnJvcihsaW5lLCAiYm9vbGVhbiBleHByZXNzaW9uIGV4cGVjdGVkIiwgIiIpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IAotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29s
IFRQYXJzZUNvbnRleHQ6OnNhbXBsZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUs
IGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZSwgY29uc3QgY2hhciogcmVhc29uKQotewotICAgIGlm
IChwVHlwZS50eXBlID09IEVidFN0cnVjdCkgewotICAgICAgICBpZiAoY29udGFpbnNTYW1wbGVy
KCpwVHlwZS51c2VyRGVmKSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwgcmVhc29uLCBnZXRC
YXNpY1N0cmluZyhwVHlwZS50eXBlKSwgIihzdHJ1Y3R1cmUgY29udGFpbnMgYSBzYW1wbGVyKSIp
OwotICAgICAgICAKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlIGlmIChJc1NhbXBsZXIocFR5cGUu
dHlwZSkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgcmVhc29uLCBnZXRCYXNpY1N0cmluZyhwVHlw
ZS50eXBlKSk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1ib29sIFRQYXJzZUNvbnRleHQ6OnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2so
Y29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlKQotewotICAg
IGlmICgocFR5cGUucXVhbGlmaWVyID09IEV2cVZhcnlpbmdJbiB8fCBwVHlwZS5xdWFsaWZpZXIg
PT0gRXZxVmFyeWluZ091dCB8fCBwVHlwZS5xdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlKSAmJgot
ICAgICAgICBwVHlwZS50eXBlID09IEVidFN0cnVjdCkgewotICAgICAgICBlcnJvcihsaW5lLCAi
Y2Fubm90IGJlIHVzZWQgd2l0aCBhIHN0cnVjdHVyZSIsIGdldFF1YWxpZmllclN0cmluZyhwVHlw
ZS5xdWFsaWZpZXIpKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIGlmIChwVHlwZS5xdWFsaWZpZXIgIT0gRXZxVW5pZm9ybSAmJiBzYW1wbGVyRXJyb3JDaGVj
ayhsaW5lLCBwVHlwZSwgInNhbXBsZXJzIG11c3QgYmUgdW5pZm9ybSIpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBUUGFyc2VDb250ZXh0Ojpw
YXJhbWV0ZXJTYW1wbGVyRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUXVhbGlm
aWVyIHF1YWxpZmllciwgY29uc3QgVFR5cGUmIHR5cGUpCi17Ci0gICAgaWYgKChxdWFsaWZpZXIg
PT0gRXZxT3V0IHx8IHF1YWxpZmllciA9PSBFdnFJbk91dCkgJiYgCi0gICAgICAgICAgICAgdHlw
ZS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRTdHJ1Y3QgJiYgSXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNU
eXBlKCkpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJzYW1wbGVycyBjYW5ub3QgYmUgb3V0cHV0
IHBhcmFtZXRlcnMiLCB0eXBlLmdldEJhc2ljU3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVFBhcnNlQ29udGV4dDo6
Y29udGFpbnNTYW1wbGVyKFRUeXBlJiB0eXBlKQotewotICAgIGlmIChJc1NhbXBsZXIodHlwZS5n
ZXRCYXNpY1R5cGUoKSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKHR5cGUuZ2V0
QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgIGNvbnN0IFRGaWVsZExpc3QmIGZp
ZWxkcyA9IHR5cGUuZ2V0U3RydWN0KCktPmZpZWxkcygpOwotICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKGNv
bnRhaW5zU2FtcGxlcigqZmllbGRzW2ldLT50eXBlKCkpKQotICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLwot
Ly8gRG8gc2l6ZSBjaGVja2luZyBmb3IgYW4gYXJyYXkgdHlwZSdzIHNpemUuCi0vLwotLy8gUmV0
dXJucyB0cnVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KLS8vCi1ib29sIFRQYXJzZUNvbnRleHQ6
OmFycmF5U2l6ZUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVEludGVybVR5cGVk
KiBleHByLCBpbnQmIHNpemUpCi17Ci0gICAgVEludGVybUNvbnN0YW50VW5pb24qIGNvbnN0YW50
ID0gZXhwci0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0gICAgaWYgKGNvbnN0YW50ID09IDAgfHwg
Y29uc3RhbnQtPmdldEJhc2ljVHlwZSgpICE9IEVidEludCkgewotICAgICAgICBlcnJvcihsaW5l
LCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgY29uc3RhbnQgaW50ZWdlciBleHByZXNzaW9uIiwgIiIp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBzaXplID0gY29uc3RhbnQtPmdl
dElDb25zdCgwKTsKLQotICAgIGlmIChzaXplIDw9IDApIHsKLSAgICAgICAgZXJyb3IobGluZSwg
ImFycmF5IHNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIiLCAiIik7Ci0gICAgICAgIHNp
emUgPSAxOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLS8vCi0vLyBTZWUgaWYgdGhpcyBxdWFsaWZpZXIgY2FuIGJlIGFuIGFycmF5LgotLy8K
LS8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhbiBlcnJvci4KLS8vCi1ib29sIFRQYXJzZUNv
bnRleHQ6OmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBU
UHVibGljVHlwZSB0eXBlKQotewotICAgIGlmICgodHlwZS5xdWFsaWZpZXIgPT0gRXZxQXR0cmli
dXRlKSB8fCAodHlwZS5xdWFsaWZpZXIgPT0gRXZxQ29uc3QpKSB7Ci0gICAgICAgIGVycm9yKGxp
bmUsICJjYW5ub3QgZGVjbGFyZSBhcnJheXMgb2YgdGhpcyBxdWFsaWZpZXIiLCBUVHlwZSh0eXBl
KS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vCi0vLyBTZWUgaWYgdGhpcyB0eXBlIGNh
biBiZSBhbiBhcnJheS4KLS8vCi0vLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYW4gZXJyb3Iu
Ci0vLwotYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVR5cGVFcnJvckNoZWNrKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpCi17Ci0gICAgLy8KLSAgICAvLyBDYW4gdGhl
IHR5cGUgYmUgYW4gYXJyYXk/Ci0gICAgLy8KLSAgICBpZiAodHlwZS5hcnJheSkgewotICAgICAg
ICBlcnJvcihsaW5lLCAiY2Fubm90IGRlY2xhcmUgYXJyYXlzIG9mIGFycmF5cyIsIFRUeXBlKHR5
cGUpLmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8KLS8vIERvIGFsbCB0aGUgc2VtYW50
aWMgY2hlY2tpbmcgZm9yIGRlY2xhcmluZyBhbiBhcnJheSwgd2l0aCBhbmQgCi0vLyB3aXRob3V0
IGEgc2l6ZSwgYW5kIG1ha2UgdGhlIHJpZ2h0IGNoYW5nZXMgdG8gdGhlIHN5bWJvbCB0YWJsZS4K
LS8vCi0vLyBzaXplID09IDAgbWVhbnMgbm8gc3BlY2lmaWVkIHNpemUuCi0vLwotLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KLS8vCi1ib29sIFRQYXJzZUNvbnRleHQ6OmFy
cmF5RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVy
LCBUUHVibGljVHlwZSB0eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSkKLXsKLSAgICAvLwotICAg
IC8vIERvbid0IGNoZWNrIGZvciByZXNlcnZlZCB3b3JkIHVzZSB1bnRpbCBhZnRlciB3ZSBrbm93
IGl0J3Mgbm90IGluIHRoZSBzeW1ib2wgdGFibGUsCi0gICAgLy8gYmVjYXVzZSByZXNlcnZlZCBh
cnJheXMgY2FuIGJlIHJlZGVjbGFyZWQuCi0gICAgLy8KLQotICAgIGJvb2wgYnVpbHRJbiA9IGZh
bHNlOyAKLSAgICBib29sIHNhbWVTY29wZSA9IGZhbHNlOwotICAgIFRTeW1ib2wqIHN5bWJvbCA9
IHN5bWJvbFRhYmxlLmZpbmQoaWRlbnRpZmllciwgJmJ1aWx0SW4sICZzYW1lU2NvcGUpOwotICAg
IGlmIChzeW1ib2wgPT0gMCB8fCAhc2FtZVNjb3BlKSB7Ci0gICAgICAgIGlmIChyZXNlcnZlZEVy
cm9yQ2hlY2sobGluZSwgaWRlbnRpZmllcikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgCi0gICAgICAgIHZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgmaWRlbnRpZmllciwgVFR5
cGUodHlwZSkpOwotCi0gICAgICAgIGlmICh0eXBlLmFycmF5U2l6ZSkKLSAgICAgICAgICAgIHZh
cmlhYmxlLT5nZXRUeXBlKCkuc2V0QXJyYXlTaXplKHR5cGUuYXJyYXlTaXplKTsKLQotICAgICAg
ICBpZiAoISBzeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgewotICAgICAgICAgICAgZGVs
ZXRlIHZhcmlhYmxlOwotICAgICAgICAgICAgZXJyb3IobGluZSwgIklOVEVSTkFMIEVSUk9SIGlu
c2VydGluZyBuZXcgc3ltYm9sIiwgaWRlbnRpZmllci5jX3N0cigpKTsKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCEgc3ltYm9s
LT5pc1ZhcmlhYmxlKCkpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJ2YXJpYWJsZSBleHBl
Y3RlZCIsIGlkZW50aWZpZXIuY19zdHIoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4oc3lt
Ym9sKTsKLSAgICAgICAgaWYgKCEgdmFyaWFibGUtPmdldFR5cGUoKS5pc0FycmF5KCkpIHsKLSAg
ICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlY2xhcmluZyBub24tYXJyYXkgYXMgYXJyYXkiLCBp
ZGVudGlmaWVyLmNfc3RyKCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkgPiAwKSB7Ci0g
ICAgICAgICAgICBlcnJvcihsaW5lLCAicmVkZWNsYXJhdGlvbiBvZiBhcnJheSB3aXRoIHNpemUi
LCBpZGVudGlmaWVyLmNfc3RyKCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGlmICghIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2FtZUVsZW1l
bnRUeXBlKFRUeXBlKHR5cGUpKSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFy
YXRpb24gb2YgYXJyYXkgd2l0aCBhIGRpZmZlcmVudCB0eXBlIiwgaWRlbnRpZmllci5jX3N0cigp
KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHR5
cGUuYXJyYXlTaXplKQotICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5zZXRBcnJheVNp
emUodHlwZS5hcnJheVNpemUpOwotICAgIH0gCi0KLSAgICBpZiAodm9pZEVycm9yQ2hlY2sobGlu
ZSwgaWRlbnRpZmllciwgdHlwZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi0vLwotLy8gRW5mb3JjZSBub24taW5pdGlhbGl6ZXIgdHlwZS9xdWFsaWZp
ZXIgcnVsZXMuCi0vLwotLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KLS8v
Ci1ib29sIFRQYXJzZUNvbnRleHQ6Om5vbkluaXRDb25zdEVycm9yQ2hlY2soY29uc3QgVFNvdXJj
ZUxvYyYgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHR5cGUsIGJvb2wg
YXJyYXkpCi17Ci0gICAgaWYgKHR5cGUucXVhbGlmaWVyID09IEV2cUNvbnN0KQotICAgIHsKLSAg
ICAgICAgLy8gTWFrZSB0aGUgcXVhbGlmaWVyIG1ha2Ugc2Vuc2UuCi0gICAgICAgIHR5cGUucXVh
bGlmaWVyID0gRXZxVGVtcG9yYXJ5OwotICAgICAgICAKLSAgICAgICAgaWYgKGFycmF5KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXlzIG1heSBub3QgYmUgZGVjbGFy
ZWQgY29uc3RhbnQgc2luY2UgdGhleSBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQiLCBpZGVudGlmaWVy
LmNfc3RyKCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHR5cGUuaXNTdHJ1Y3R1cmVD
b250YWluaW5nQXJyYXlzKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJz
dHJ1Y3R1cmVzIGNvbnRhaW5pbmcgYXJyYXlzIG1heSBub3QgYmUgZGVjbGFyZWQgY29uc3RhbnQg
c2luY2UgdGhleSBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQiLCBpZGVudGlmaWVyLmNfc3RyKCkpOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgZXJyb3IobGlu
ZSwgInZhcmlhYmxlcyB3aXRoIHF1YWxpZmllciAnY29uc3QnIG11c3QgYmUgaW5pdGlhbGl6ZWQi
LCBpZGVudGlmaWVyLmNfc3RyKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLwotLy8gRG8gc2VtYW50aWMgY2hl
Y2tpbmcgZm9yIGEgdmFyaWFibGUgZGVjbGFyYXRpb24gdGhhdCBoYXMgbm8gaW5pdGlhbGl6ZXIs
Ci0vLyBhbmQgdXBkYXRlIHRoZSBzeW1ib2wgdGFibGUuCi0vLwotLy8gUmV0dXJucyB0cnVlIGlm
IHRoZXJlIHdhcyBhbiBlcnJvci4KLS8vCi1ib29sIFRQYXJzZUNvbnRleHQ6Om5vbkluaXRFcnJv
ckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJs
aWNUeXBlJiB0eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSkKLXsKLSAgICBpZiAocmVzZXJ2ZWRF
cnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIpKQotICAgICAgICByZWNvdmVyKCk7Ci0KLSAgICB2
YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50aWZpZXIsIFRUeXBlKHR5cGUpKTsKLQotICAg
IGlmICghIHN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7Ci0gICAgICAgIGVycm9yKGxp
bmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwotICAgICAg
ICBkZWxldGUgdmFyaWFibGU7Ci0gICAgICAgIHZhcmlhYmxlID0gMDsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHZvaWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIs
IHR5cGUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Ym9vbCBUUGFyc2VDb250ZXh0OjpwYXJhbUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGlu
ZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIFRRdWFsaWZpZXIgcGFyYW1RdWFsaWZpZXIsIFRUeXBl
KiB0eXBlKQoteyAgICAKLSAgICBpZiAocXVhbGlmaWVyICE9IEV2cUNvbnN0ICYmIHF1YWxpZmll
ciAhPSBFdnFUZW1wb3JhcnkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgInF1YWxpZmllciBub3Qg
YWxsb3dlZCBvbiBmdW5jdGlvbiBwYXJhbWV0ZXIiLCBnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlm
aWVyKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAocXVhbGlmaWVyID09
IEV2cUNvbnN0ICYmIHBhcmFtUXVhbGlmaWVyICE9IEV2cUluKSB7Ci0gICAgICAgIGVycm9yKGxp
bmUsICJxdWFsaWZpZXIgbm90IGFsbG93ZWQgd2l0aCAiLCBnZXRRdWFsaWZpZXJTdHJpbmcocXVh
bGlmaWVyKSwgZ2V0UXVhbGlmaWVyU3RyaW5nKHBhcmFtUXVhbGlmaWVyKSk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxQ29uc3QpCi0gICAg
ICAgIHR5cGUtPnNldFF1YWxpZmllcihFdnFDb25zdFJlYWRPbmx5KTsKLSAgICBlbHNlCi0gICAg
ICAgIHR5cGUtPnNldFF1YWxpZmllcihwYXJhbVF1YWxpZmllcik7Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgVFBhcnNlQ29udGV4dDo6ZXh0ZW5zaW9uRXJyb3JDaGVjayhjb25zdCBU
U291cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBleHRlbnNpb24pCi17Ci0gICAgY29uc3Qg
VEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciA9IGV4dGVuc2lvbkJlaGF2aW9yKCk7Ci0g
ICAgVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0QmVoYXZpb3Iu
ZmluZChleHRlbnNpb24uY19zdHIoKSk7Ci0gICAgaWYgKGl0ZXIgPT0gZXh0QmVoYXZpb3IuZW5k
KCkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImV4dGVuc2lvbiIsIGV4dGVuc2lvbi5jX3N0cigp
LCAiaXMgbm90IHN1cHBvcnRlZCIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAg
Ly8gSW4gR0xTTCBFUywgYW4gZXh0ZW5zaW9uJ3MgZGVmYXVsdCBiZWhhdmlvciBpcyAiZGlzYWJs
ZSIuCi0gICAgaWYgKGl0ZXItPnNlY29uZCA9PSBFQmhEaXNhYmxlIHx8IGl0ZXItPnNlY29uZCA9
PSBFQmhVbmRlZmluZWQpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImV4dGVuc2lvbiIsIGV4dGVu
c2lvbi5jX3N0cigpLCAiaXMgZGlzYWJsZWQiKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIGlmIChpdGVyLT5zZWNvbmQgPT0gRUJoV2FybikgewotICAgICAgICB3YXJuaW5nKGxp
bmUsICJleHRlbnNpb24iLCBleHRlbnNpb24uY19zdHIoKSwgImlzIGJlaW5nIHVzZWQiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBUUGFyc2VDb250ZXh0OjpzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBjaGFyKiBleHRlbnNpb24p
Ci17Ci0gICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRiZWhhdmlvciA9IGV4dGVuc2lv
bkJlaGF2aW9yKCk7Ci0gICAgVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVy
ID0gZXh0YmVoYXZpb3IuZmluZChleHRlbnNpb24pOwotICAgIHJldHVybiAoaXRlciAhPSBleHRi
ZWhhdmlvci5lbmQoKSk7Ci19Ci0KLWJvb2wgVFBhcnNlQ29udGV4dDo6aXNFeHRlbnNpb25FbmFi
bGVkKGNvbnN0IGNoYXIqIGV4dGVuc2lvbikgY29uc3QKLXsKLSAgICBjb25zdCBURXh0ZW5zaW9u
QmVoYXZpb3ImIGV4dGJlaGF2aW9yID0gZXh0ZW5zaW9uQmVoYXZpb3IoKTsKLSAgICBURXh0ZW5z
aW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRiZWhhdmlvci5maW5kKGV4dGVu
c2lvbik7Ci0KLSAgICBpZiAoaXRlciA9PSBleHRiZWhhdmlvci5lbmQoKSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gKGl0ZXItPnNlY29uZCA9PSBF
QmhFbmFibGUgfHwgaXRlci0+c2Vjb25kID09IEVCaFJlcXVpcmUpOwotfQotCi0vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KLS8vCi0vLyBOb24tRXJyb3JzLgotLy8KLS8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLwotCi0vLwotLy8gTG9vayB1cCBhIGZ1bmN0aW9uIG5hbWUgaW4gdGhlIHN5bWJvbCB0
YWJsZSwgYW5kIG1ha2Ugc3VyZSBpdCBpcyBhIGZ1bmN0aW9uLgotLy8KLS8vIFJldHVybiB0aGUg
ZnVuY3Rpb24gc3ltYm9sIGlmIGZvdW5kLCBvdGhlcndpc2UgMC4KLS8vCi1jb25zdCBURnVuY3Rp
b24qIFRQYXJzZUNvbnRleHQ6OmZpbmRGdW5jdGlvbihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBU
RnVuY3Rpb24qIGNhbGwsIGJvb2wgKmJ1aWx0SW4pCi17Ci0gICAgLy8gRmlyc3QgZmluZCBieSB1
bm1hbmdsZWQgbmFtZSB0byBjaGVjayB3aGV0aGVyIHRoZSBmdW5jdGlvbiBuYW1lIGhhcyBiZWVu
Ci0gICAgLy8gaGlkZGVuIGJ5IGEgdmFyaWFibGUgbmFtZSBvciBzdHJ1Y3QgdHlwZW5hbWUuCi0g
ICAgLy8gSWYgYSBmdW5jdGlvbiBpcyBmb3VuZCwgY2hlY2sgZm9yIG9uZSB3aXRoIGEgbWF0Y2hp
bmcgYXJndW1lbnQgbGlzdC4KLSAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJs
ZS5maW5kKGNhbGwtPmdldE5hbWUoKSwgYnVpbHRJbik7Ci0gICAgaWYgKHN5bWJvbCA9PSAwIHx8
IHN5bWJvbC0+aXNGdW5jdGlvbigpKSB7Ci0gICAgICAgIHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZp
bmQoY2FsbC0+Z2V0TWFuZ2xlZE5hbWUoKSwgYnVpbHRJbik7Ci0gICAgfQotCi0gICAgaWYgKHN5
bWJvbCA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJubyBtYXRjaGluZyBvdmVybG9hZGVk
IGZ1bmN0aW9uIGZvdW5kIiwgY2FsbC0+Z2V0TmFtZSgpLmNfc3RyKCkpOwotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAoIXN5bWJvbC0+aXNGdW5jdGlvbigpKSB7Ci0gICAgICAg
IGVycm9yKGxpbmUsICJmdW5jdGlvbiBuYW1lIGV4cGVjdGVkIiwgY2FsbC0+Z2V0TmFtZSgpLmNf
c3RyKCkpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgVEZ1bmN0aW9uKj4oc3ltYm9sKTsKLX0KLQotLy8KLS8vIEluaXRpYWxpemVycyBz
aG93IHVwIGluIHNldmVyYWwgcGxhY2VzIGluIHRoZSBncmFtbWFyLiAgSGF2ZSBvbmUgc2V0IG9m
Ci0vLyBjb2RlIHRvIGhhbmRsZSB0aGVtIGhlcmUuCi0vLwotYm9vbCBUUGFyc2VDb250ZXh0Ojpl
eGVjdXRlSW5pdGlhbGl6ZXIoY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFN0cmluZyYgaWRlbnRp
ZmllciwgVFB1YmxpY1R5cGUmIHBUeXBlLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5pdGlhbGl6ZXIsIFRJbnRlcm1Ob2RlKiYgaW50ZXJt
Tm9kZSwgVFZhcmlhYmxlKiB2YXJpYWJsZSkKLXsKLSAgICBUVHlwZSB0eXBlID0gVFR5cGUocFR5
cGUpOwotCi0gICAgaWYgKHZhcmlhYmxlID09IDApIHsKLSAgICAgICAgaWYgKHJlc2VydmVkRXJy
b3JDaGVjayhsaW5lLCBpZGVudGlmaWVyKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgICAgIGlmICh2b2lkRXJyb3JDaGVjayhsaW5lLCBpZGVudGlmaWVyLCBwVHlwZSkpCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICAvLwotICAgICAgICAvLyBhZGQgdmFyaWFi
bGUgdG8gc3ltYm9sIHRhYmxlCi0gICAgICAgIC8vCi0gICAgICAgIHZhcmlhYmxlID0gbmV3IFRW
YXJpYWJsZSgmaWRlbnRpZmllciwgdHlwZSk7Ci0gICAgICAgIGlmICghIHN5bWJvbFRhYmxlLmlu
c2VydCgqdmFyaWFibGUpKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAicmVkZWZpbml0aW9u
IiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICAgICAgLy8gZG9uJ3QgZGVsZXRlIHZhcmlhYmxlLCBpdCdzIHVzZWQgYnkgZXJy
b3IgcmVjb3ZlcnksIGFuZCB0aGUgcG9vbCAKLSAgICAgICAgICAgIC8vIHBvcCB3aWxsIHRha2Ug
Y2FyZSBvZiB0aGUgbWVtb3J5Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIGlk
ZW50aWZpZXIgbXVzdCBiZSBvZiB0eXBlIGNvbnN0YW50LCBhIGdsb2JhbCwgb3IgYSB0ZW1wb3Jh
cnkKLSAgICAvLwotICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gdmFyaWFibGUtPmdldFR5cGUo
KS5nZXRRdWFsaWZpZXIoKTsKLSAgICBpZiAoKHF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpICYm
IChxdWFsaWZpZXIgIT0gRXZxR2xvYmFsKSAmJiAocXVhbGlmaWVyICE9IEV2cUNvbnN0KSkgewot
ICAgICAgICBlcnJvcihsaW5lLCAiIGNhbm5vdCBpbml0aWFsaXplIHRoaXMgdHlwZSBvZiBxdWFs
aWZpZXIgIiwgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXJTdHJpbmcoKSk7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAvLwotICAgIC8vIHRlc3QgZm9yIGFuZCBwcm9w
YWdhdGUgY29uc3RhbnQKLSAgICAvLwotCi0gICAgaWYgKHF1YWxpZmllciA9PSBFdnFDb25zdCkg
ewotICAgICAgICBpZiAocXVhbGlmaWVyICE9IGluaXRpYWxpemVyLT5nZXRUeXBlKCkuZ2V0UXVh
bGlmaWVyKCkpIHsKLSAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVh
bTsKLSAgICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiJyIgPDwgdmFyaWFibGUtPmdldFR5
cGUoKS5nZXRDb21wbGV0ZVN0cmluZygpIDw8ICInIjsKLSAgICAgICAgICAgIHN0ZDo6c3RyaW5n
IGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKLSAgICAgICAgICAgIGVycm9yKGxp
bmUsICIgYXNzaWduaW5nIG5vbi1jb25zdGFudCB0byIsICI9IiwgZXh0cmFJbmZvLmNfc3RyKCkp
OwotICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5zZXRRdWFsaWZpZXIoRXZxVGVtcG9y
YXJ5KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmICh0
eXBlICE9IGluaXRpYWxpemVyLT5nZXRUeXBlKCkpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUs
ICIgbm9uLW1hdGNoaW5nIHR5cGVzIGZvciBjb25zdCBpbml0aWFsaXplciAiLCAKLSAgICAgICAg
ICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllclN0cmluZygpKTsKLSAgICAg
ICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5pdGlhbGl6
ZXItPmdldEFzQ29uc3RhbnRVbmlvbigpKSB7IAotICAgICAgICAgICAgdmFyaWFibGUtPnNoYXJl
Q29uc3RQb2ludGVyKGluaXRpYWxpemVyLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25B
cnJheVBvaW50ZXIoKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoaW5pdGlhbGl6ZXItPmdldEFzU3lt
Ym9sTm9kZSgpKSB7Ci0gICAgICAgICAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xU
YWJsZS5maW5kKGluaXRpYWxpemVyLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCkpOwot
ICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlKiB0VmFyID0gc3RhdGljX2Nhc3Q8Y29uc3QgVFZh
cmlhYmxlKj4oc3ltYm9sKTsKLQotICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiogY29uc3RBcnJh
eSA9IHRWYXItPmdldENvbnN0UG9pbnRlcigpOwotICAgICAgICAgICAgdmFyaWFibGUtPnNoYXJl
Q29uc3RQb2ludGVyKGNvbnN0QXJyYXkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
c3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOwotICAgICAgICAgICAgZXh0cmFJbmZv
U3RyZWFtIDw8ICInIiA8PCB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldENvbXBsZXRlU3RyaW5nKCkg
PDwgIiciOwotICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3Ry
ZWFtLnN0cigpOwotICAgICAgICAgICAgZXJyb3IobGluZSwgIiBjYW5ub3QgYXNzaWduIHRvIiwg
Ij0iLCBleHRyYUluZm8uY19zdHIoKSk7Ci0gICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgp
LnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gCi0gICAgaWYgKHF1YWxpZmllciAhPSBFdnFDb25zdCkgewotICAg
ICAgICBUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wgPSBpbnRlcm1lZGlhdGUuYWRkU3ltYm9s
KHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLCB2YXJpYWJsZS0+
Z2V0VHlwZSgpLCBsaW5lKTsKLSAgICAgICAgaW50ZXJtTm9kZSA9IGludGVybWVkaWF0ZS5hZGRB
c3NpZ24oRU9wSW5pdGlhbGl6ZSwgaW50ZXJtU3ltYm9sLCBpbml0aWFsaXplciwgbGluZSk7Ci0g
ICAgICAgIGlmIChpbnRlcm1Ob2RlID09IDApIHsKLSAgICAgICAgICAgIGFzc2lnbkVycm9yKGxp
bmUsICI9IiwgaW50ZXJtU3ltYm9sLT5nZXRDb21wbGV0ZVN0cmluZygpLCBpbml0aWFsaXplci0+
Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgIH0gZWxzZSAKLSAgICAgICAgaW50ZXJtTm9kZSA9IDA7Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgVFBhcnNlQ29udGV4dDo6YXJlQWxsQ2hpbGRDb25zdChUSW50ZXJtQWdn
cmVnYXRlKiBhZ2dyTm9kZSkKLXsKLSAgICBBU1NFUlQoYWdnck5vZGUgIT0gTlVMTCk7Ci0gICAg
aWYgKCFhZ2dyTm9kZS0+aXNDb25zdHJ1Y3RvcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBib29sIGFsbENvbnN0YW50ID0gdHJ1ZTsKLQotICAgIC8vIGNoZWNrIGlmIGFsbCB0aGUg
Y2hpbGQgbm9kZXMgYXJlIGNvbnN0YW50cyBzbyB0aGF0IHRoZXkgY2FuIGJlIGluc2VydGVkIGlu
dG8gCi0gICAgLy8gdGhlIHBhcmVudCBub2RlCi0gICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5j
ZSA9IGFnZ3JOb2RlLT5nZXRTZXF1ZW5jZSgpIDsKLSAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6
aXRlcmF0b3IgcCA9IHNlcXVlbmNlLmJlZ2luKCk7IHAgIT0gc2VxdWVuY2UuZW5kKCk7ICsrcCkg
ewotICAgICAgICBpZiAoISgqcCktPmdldEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIGFsbENvbnN0
YW50OwotfQotCi0vLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdGVzdCBmb3IgdGhlIGNvcnJl
Y3RuZXNzIG9mIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byB2YXJpb3VzIGNvbnN0cnVjdG9yIGZ1
bmN0aW9ucwotLy8gYW5kIGFsc28gY29udmVydCB0aGVtIHRvIHRoZSByaWdodCBkYXRhdHlwZSBp
ZiBpdCBpcyBhbGxvd2VkIGFuZCByZXF1aXJlZC4gCi0vLwotLy8gUmV0dXJucyAwIGZvciBhbiBl
cnJvciBvciB0aGUgY29uc3RydWN0ZWQgbm9kZSAoYWdncmVnYXRlIG9yIHR5cGVkKSBmb3Igbm8g
ZXJyb3IuCi0vLwotVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdHJ1Y3RvcihU
SW50ZXJtTm9kZSogbm9kZSwgY29uc3QgVFR5cGUqIHR5cGUsIFRPcGVyYXRvciBvcCwgVEZ1bmN0
aW9uKiBmbkNhbGwsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCi17Ci0gICAgaWYgKG5vZGUgPT0g
MCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBUSW50ZXJtQWdncmVnYXRlKiBhZ2dyTm9kZSA9
IG5vZGUtPmdldEFzQWdncmVnYXRlKCk7Ci0gICAgCi0gICAgVEZpZWxkTGlzdDo6Y29uc3RfaXRl
cmF0b3IgbWVtYmVyRmllbGRzOwotICAgIGlmIChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QpCi0g
ICAgICAgIG1lbWJlckZpZWxkcyA9IHR5cGUtPmdldFN0cnVjdCgpLT5maWVsZHMoKS5iZWdpbigp
OwotICAgIAotICAgIFRUeXBlIGVsZW1lbnRUeXBlID0gKnR5cGU7Ci0gICAgaWYgKHR5cGUtPmlz
QXJyYXkoKSkKLSAgICAgICAgZWxlbWVudFR5cGUuY2xlYXJBcnJheW5lc3MoKTsKLQotICAgIGJv
b2wgc2luZ2xlQXJnOwotICAgIGlmIChhZ2dyTm9kZSkgewotICAgICAgICBpZiAoYWdnck5vZGUt
PmdldE9wKCkgIT0gRU9wTnVsbCB8fCBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0g
MSkKLSAgICAgICAgICAgIHNpbmdsZUFyZyA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHNpbmdsZUFyZyA9IGZhbHNlOwotICAgIH0gZWxzZQotICAgICAgICBzaW5nbGVBcmcgPSB0
cnVlOwotCi0gICAgVEludGVybVR5cGVkICpuZXdOb2RlOwotICAgIGlmIChzaW5nbGVBcmcpIHsK
LSAgICAgICAgLy8gSWYgc3RydWN0dXJlIGNvbnN0cnVjdG9yIG9yIGFycmF5IGNvbnN0cnVjdG9y
IGlzIGJlaW5nIGNhbGxlZCAKLSAgICAgICAgLy8gZm9yIG9ubHkgb25lIHBhcmFtZXRlciBpbnNp
ZGUgdGhlIHN0cnVjdHVyZSwgd2UgbmVlZCB0byBjYWxsIGNvbnN0cnVjdFN0cnVjdCBmdW5jdGlv
biBvbmNlLgotICAgICAgICBpZiAodHlwZS0+aXNBcnJheSgpKQotICAgICAgICAgICAgbmV3Tm9k
ZSA9IGNvbnN0cnVjdFN0cnVjdChub2RlLCAmZWxlbWVudFR5cGUsIDEsIG5vZGUtPmdldExpbmUo
KSwgZmFsc2UpOwotICAgICAgICBlbHNlIGlmIChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QpCi0g
ICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0U3RydWN0KG5vZGUsICgqbWVtYmVyRmllbGRz
KS0+dHlwZSgpLCAxLCBub2RlLT5nZXRMaW5lKCksIGZhbHNlKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdEJ1aWx0SW4odHlwZSwgb3AsIG5vZGUsIG5vZGUt
PmdldExpbmUoKSwgZmFsc2UpOwotCi0gICAgICAgIGlmIChuZXdOb2RlICYmIG5ld05vZGUtPmdl
dEFzQWdncmVnYXRlKCkpIHsKLSAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogY29uc3RDb25zdHJ1
Y3RvciA9IGZvbGRDb25zdENvbnN0cnVjdG9yKG5ld05vZGUtPmdldEFzQWdncmVnYXRlKCksICp0
eXBlKTsKLSAgICAgICAgICAgIGlmIChjb25zdENvbnN0cnVjdG9yKQotICAgICAgICAgICAgICAg
IHJldHVybiBjb25zdENvbnN0cnVjdG9yOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG5l
d05vZGU7Ci0gICAgfQotICAgIAotICAgIC8vCi0gICAgLy8gSGFuZGxlIGxpc3Qgb2YgYXJndW1l
bnRzLgotICAgIC8vCi0gICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZVZlY3RvciA9IGFnZ3JO
b2RlLT5nZXRTZXF1ZW5jZSgpIDsgICAgLy8gU3RvcmVzIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0
aGUgcGFyYW1ldGVyIHRvIHRoZSBjb25zdHJ1Y3RvcgotICAgIC8vIGlmIHRoZSBzdHJ1Y3R1cmUg
Y29uc3RydWN0b3IgY29udGFpbnMgbW9yZSB0aGFuIG9uZSBwYXJhbWV0ZXIsIHRoZW4gY29uc3Ry
dWN0Ci0gICAgLy8gZWFjaCBwYXJhbWV0ZXIKLSAgICAKLSAgICBpbnQgcGFyYW1Db3VudCA9IDA7
ICAvLyBrZWVwcyBhIHRyYWNrIG9mIHRoZSBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIgbnVtYmVyIGJl
aW5nIGNoZWNrZWQgICAgCi0gICAgCi0gICAgLy8gZm9yIGVhY2ggcGFyYW1ldGVyIHRvIHRoZSBj
b25zdHJ1Y3RvciBjYWxsLCBjaGVjayB0byBzZWUgaWYgdGhlIHJpZ2h0IHR5cGUgaXMgcGFzc2Vk
IG9yIGNvbnZlcnQgdGhlbSAKLSAgICAvLyB0byB0aGUgcmlnaHQgdHlwZSBpZiBwb3NzaWJsZSAo
YW5kIGFsbG93ZWQpLgotICAgIC8vIGZvciBzdHJ1Y3R1cmUgY29uc3RydWN0b3JzLCBqdXN0IGNo
ZWNrIGlmIHRoZSByaWdodCB0eXBlIGlzIHBhc3NlZCwgbm8gY29udmVyc2lvbiBpcyBhbGxvd2Vk
LgotICAgIAotICAgIGZvciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBwID0gc2VxdWVuY2VW
ZWN0b3IuYmVnaW4oKTsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgIT0g
c2VxdWVuY2VWZWN0b3IuZW5kKCk7IHArKywgcGFyYW1Db3VudCsrKSB7Ci0gICAgICAgIGlmICh0
eXBlLT5pc0FycmF5KCkpCi0gICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0U3RydWN0KCpw
LCAmZWxlbWVudFR5cGUsIHBhcmFtQ291bnQrMSwgbm9kZS0+Z2V0TGluZSgpLCB0cnVlKTsKLSAg
ICAgICAgZWxzZSBpZiAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0KQotICAgICAgICAgICAgbmV3
Tm9kZSA9IGNvbnN0cnVjdFN0cnVjdCgqcCwgbWVtYmVyRmllbGRzW3BhcmFtQ291bnRdLT50eXBl
KCksIHBhcmFtQ291bnQrMSwgbm9kZS0+Z2V0TGluZSgpLCB0cnVlKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdEJ1aWx0SW4odHlwZSwgb3AsICpwLCBub2Rl
LT5nZXRMaW5lKCksIHRydWUpOwotICAgICAgICAKLSAgICAgICAgaWYgKG5ld05vZGUpIHsKLSAg
ICAgICAgICAgICpwID0gbmV3Tm9kZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFRJbnRlcm1U
eXBlZCogY29uc3RydWN0b3IgPSBpbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IoYWdn
ck5vZGUsIG9wLCBsaW5lKTsKLSAgICBUSW50ZXJtVHlwZWQqIGNvbnN0Q29uc3RydWN0b3IgPSBm
b2xkQ29uc3RDb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rvci0+Z2V0QXNBZ2dyZWdhdGUoKSwgKnR5cGUp
OwotICAgIGlmIChjb25zdENvbnN0cnVjdG9yKQotICAgICAgICByZXR1cm4gY29uc3RDb25zdHJ1
Y3RvcjsKLQotICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKLX0KLQotVEludGVybVR5cGVkKiBUUGFy
c2VDb250ZXh0Ojpmb2xkQ29uc3RDb25zdHJ1Y3RvcihUSW50ZXJtQWdncmVnYXRlKiBhZ2dyTm9k
ZSwgY29uc3QgVFR5cGUmIHR5cGUpCi17Ci0gICAgYm9vbCBjYW5CZUZvbGRlZCA9IGFyZUFsbENo
aWxkQ29uc3QoYWdnck5vZGUpOwotICAgIGFnZ3JOb2RlLT5zZXRUeXBlKHR5cGUpOwotICAgIGlm
IChjYW5CZUZvbGRlZCkgewotICAgICAgICBib29sIHJldHVyblZhbCA9IGZhbHNlOwotICAgICAg
ICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bdHlwZS5nZXRP
YmplY3RTaXplKCldOwotICAgICAgICBpZiAoYWdnck5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgp
ID09IDEpICB7Ci0gICAgICAgICAgICByZXR1cm5WYWwgPSBpbnRlcm1lZGlhdGUucGFyc2VDb25z
dFRyZWUoYWdnck5vZGUtPmdldExpbmUoKSwgYWdnck5vZGUsIHVuaW9uQXJyYXksIGFnZ3JOb2Rl
LT5nZXRPcCgpLCBzeW1ib2xUYWJsZSwgIHR5cGUsIHRydWUpOwotICAgICAgICB9Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuVmFsID0gaW50ZXJtZWRpYXRlLnBhcnNlQ29uc3RU
cmVlKGFnZ3JOb2RlLT5nZXRMaW5lKCksIGFnZ3JOb2RlLCB1bmlvbkFycmF5LCBhZ2dyTm9kZS0+
Z2V0T3AoKSwgc3ltYm9sVGFibGUsICB0eXBlKTsKLSAgICAgICAgfQotICAgICAgICBpZiAocmV0
dXJuVmFsKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgcmV0dXJuIGludGVybWVk
aWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIHR5cGUsIGFnZ3JOb2RlLT5nZXRMaW5l
KCkpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi0vLyBGdW5jdGlvbiBmb3IgY29uc3Ry
dWN0b3IgaW1wbGVtZW50YXRpb24uIENhbGxzIGFkZFVuYXJ5TWF0aCB3aXRoIGFwcHJvcHJpYXRl
IEVPcCB2YWx1ZQotLy8gZm9yIHRoZSBwYXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yIChwYXNz
ZWQgdG8gdGhpcyBmdW5jdGlvbikuIEVzc2VudGlhbGx5LCBpdCBjb252ZXJ0cwotLy8gdGhlIHBh
cmFtZXRlciB0eXBlcyBjb3JyZWN0bHkuIElmIGEgY29uc3RydWN0b3IgZXhwZWN0cyBhbiBpbnQg
KGxpa2UgaXZlYzIpIGFuZCBpcyBwYXNzZWQgYSAKLS8vIGZsb2F0LCB0aGVuIGZsb2F0IGlzIGNv
bnZlcnRlZCB0byBpbnQuCi0vLwotLy8gUmV0dXJucyAwIGZvciBhbiBlcnJvciBvciB0aGUgY29u
c3RydWN0ZWQgbm9kZS4KLS8vCi1USW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVj
dEJ1aWx0SW4oY29uc3QgVFR5cGUqIHR5cGUsIFRPcGVyYXRvciBvcCwgVEludGVybU5vZGUqIG5v
ZGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGJvb2wgc3Vic2V0KQotewotICAgIFRJbnRlcm1U
eXBlZCogbmV3Tm9kZTsKLSAgICBUT3BlcmF0b3IgYmFzaWNPcDsKLQotICAgIC8vCi0gICAgLy8g
Rmlyc3QsIGNvbnZlcnQgdHlwZXMgYXMgbmVlZGVkLgotICAgIC8vCi0gICAgc3dpdGNoIChvcCkg
ewotICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMjoKLSAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzM6
Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWM0OgotICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MjoK
LSAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQ0Ogot
ICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6Ci0gICAgICAgIGJhc2ljT3AgPSBFT3BDb25zdHJ1
Y3RGbG9hdDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMyOgot
ICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzM6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjNDoK
LSAgICBjYXNlIEVPcENvbnN0cnVjdEludDoKLSAgICAgICAgYmFzaWNPcCA9IEVPcENvbnN0cnVj
dEludDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMyOgotICAg
IGNhc2UgRU9wQ29uc3RydWN0QlZlYzM6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjNDoKLSAg
ICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6Ci0gICAgICAgIGJhc2ljT3AgPSBFT3BDb25zdHJ1Y3RC
b29sOwotICAgICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVycm9yKGxpbmUs
ICJ1bnN1cHBvcnRlZCBjb25zdHJ1Y3Rpb24iLCAiIik7Ci0gICAgICAgIHJlY292ZXIoKTsKLQot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgbmV3Tm9kZSA9IGludGVybWVkaWF0ZS5hZGRV
bmFyeU1hdGgoYmFzaWNPcCwgbm9kZSwgbm9kZS0+Z2V0TGluZSgpLCBzeW1ib2xUYWJsZSk7Ci0g
ICAgaWYgKG5ld05vZGUgPT0gMCkgewotICAgICAgICBlcnJvcihsaW5lLCAiY2FuJ3QgY29udmVy
dCIsICJjb25zdHJ1Y3RvciIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLwot
ICAgIC8vIE5vdywgaWYgdGhlcmUgc3RpbGwgaXNuJ3QgYW4gb3BlcmF0aW9uIHRvIGRvIHRoZSBj
b25zdHJ1Y3Rpb24sIGFuZCB3ZSBuZWVkIG9uZSwgYWRkIG9uZS4KLSAgICAvLwotICAgIAotICAg
IC8vIE90aGVyd2lzZSwgc2tpcCBvdXQgZWFybHkuCi0gICAgaWYgKHN1YnNldCB8fCAobmV3Tm9k
ZSAhPSBub2RlICYmIG5ld05vZGUtPmdldFR5cGUoKSA9PSAqdHlwZSkpCi0gICAgICAgIHJldHVy
biBuZXdOb2RlOwotCi0gICAgLy8gc2V0QWdncmVnYXRlT3BlcmF0b3Igd2lsbCBpbnNlcnQgYSBu
ZXcgbm9kZSBmb3IgdGhlIGNvbnN0cnVjdG9yLCBhcyBuZWVkZWQuCi0gICAgcmV0dXJuIGludGVy
bWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcihuZXdOb2RlLCBvcCwgbGluZSk7Ci19Ci0KLS8v
IFRoaXMgZnVuY3Rpb24gdGVzdHMgZm9yIHRoZSB0eXBlIG9mIHRoZSBwYXJhbWV0ZXJzIHRvIHRo
ZSBzdHJ1Y3R1cmVzIGNvbnN0cnVjdG9ycy4gUmFpc2VzCi0vLyBhbiBlcnJvciBtZXNzYWdlIGlm
IHRoZSBleHBlY3RlZCB0eXBlIGRvZXMgbm90IG1hdGNoIHRoZSBwYXJhbWV0ZXIgcGFzc2VkIHRv
IHRoZSBjb25zdHJ1Y3Rvci4KLS8vCi0vLyBSZXR1cm5zIDAgZm9yIGFuIGVycm9yIG9yIHRoZSBp
bnB1dCBub2RlIGl0c2VsZiBpZiB0aGUgZXhwZWN0ZWQgYW5kIHRoZSBnaXZlbiBwYXJhbWV0ZXIg
dHlwZXMgbWF0Y2guCi0vLwotVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RT
dHJ1Y3QoVEludGVybU5vZGUqIG5vZGUsIFRUeXBlKiB0eXBlLCBpbnQgcGFyYW1Db3VudCwgY29u
c3QgVFNvdXJjZUxvYyYgbGluZSwgYm9vbCBzdWJzZXQpCi17Ci0gICAgaWYgKCp0eXBlID09IG5v
ZGUtPmdldEFzVHlwZWQoKS0+Z2V0VHlwZSgpKSB7Ci0gICAgICAgIGlmIChzdWJzZXQpCi0gICAg
ICAgICAgICByZXR1cm4gbm9kZS0+Z2V0QXNUeXBlZCgpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICByZXR1cm4gaW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5vZGUtPmdldEFz
VHlwZWQoKSwgRU9wQ29uc3RydWN0U3RydWN0LCBsaW5lKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07Ci0gICAgICAgIGV4dHJhSW5mb1N0
cmVhbSA8PCAiY2Fubm90IGNvbnZlcnQgcGFyYW1ldGVyICIgPDwgcGFyYW1Db3VudCAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIDw8ICIgZnJvbSAnIiA8PCBub2RlLT5nZXRBc1R5cGVkKCktPmdl
dFR5cGUoKS5nZXRCYXNpY1N0cmluZygpCi0gICAgICAgICAgICAgICAgICAgICAgICA8PCAiJyB0
byAnIiA8PCB0eXBlLT5nZXRCYXNpY1N0cmluZygpIDw8ICInIjsKLSAgICAgICAgc3RkOjpzdHJp
bmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOwotICAgICAgICBlcnJvcihsaW5l
LCAiIiwgImNvbnN0cnVjdG9yIiwgZXh0cmFJbmZvLmNfc3RyKCkpOwotICAgICAgICByZWNvdmVy
KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8vCi0vLyBUaGlzIGZ1bmN0aW9uIHJl
dHVybnMgdGhlIHRyZWUgcmVwcmVzZW50YXRpb24gZm9yIHRoZSB2ZWN0b3IgZmllbGQocykgYmVp
bmcgYWNjZXNzZWQgZnJvbSBjb250YW50IHZlY3Rvci4KLS8vIElmIG9ubHkgb25lIGNvbXBvbmVu
dCBvZiB2ZWN0b3IgaXMgYWNjZXNzZWQgKHYueCBvciB2WzBdIHdoZXJlIHYgaXMgYSBjb250YW50
IHZlY3RvciksIHRoZW4gYSBjb250YW50IG5vZGUgaXMKLS8vIHJldHVybmVkLCBlbHNlIGFuIGFn
Z3JlZ2F0ZSBub2RlIGlzIHJldHVybmVkIChmb3Igdi54eSkuIFRoZSBpbnB1dCB0byB0aGlzIGZ1
bmN0aW9uIGNvdWxkIGVpdGhlciBiZSB0aGUgc3ltYm9sCi0vLyBub2RlIG9yIGl0IGNvdWxkIGJl
IHRoZSBpbnRlcm1lZGlhdGUgdHJlZSByZXByZXNlbnRhdGlvbiBvZiBhY2Nlc3NpbmcgZmllbGRz
IGluIGEgY29uc3RhbnQgc3RydWN0dXJlIG9yIGNvbHVtbiBvZiAKLS8vIGEgY29uc3RhbnQgbWF0
cml4LgotLy8KLVRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RWZWN0b3JOb2Rl
KFRWZWN0b3JGaWVsZHMmIGZpZWxkcywgVEludGVybVR5cGVkKiBub2RlLCBjb25zdCBUU291cmNl
TG9jJiBsaW5lKQotewotICAgIFRJbnRlcm1UeXBlZCogdHlwZWROb2RlOwotICAgIFRJbnRlcm1D
b25zdGFudFVuaW9uKiB0ZW1wQ29uc3RhbnROb2RlID0gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9u
KCk7Ci0KLSAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5OwotICAgIGlmICh0ZW1wQ29uc3Rh
bnROb2RlKSB7Ci0gICAgICAgIHVuaW9uQXJyYXkgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRVbmlv
bkFycmF5UG9pbnRlcigpOwotCi0gICAgICAgIGlmICghdW5pb25BcnJheSkgewotICAgICAgICAg
ICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgeyAvLyBUaGUgbm9kZSBoYXMg
dG8gYmUgZWl0aGVyIGEgc3ltYm9sIG5vZGUgb3IgYW4gYWdncmVnYXRlIG5vZGUgb3IgYSB0ZW1w
Q29uc3RhbnQgbm9kZSwgZWxzZSwgaXRzIGFuIGVycm9yCi0gICAgICAgIGVycm9yKGxpbmUsICJD
YW5ub3Qgb2Zmc2V0IGludG8gdGhlIHZlY3RvciIsICJFcnJvciIpOwotICAgICAgICByZWNvdmVy
KCk7Ci0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQ29uc3RhbnRVbmlvbiogY29u
c3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW2ZpZWxkcy5udW1dOwotCi0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBmaWVsZHMubnVtOyBpKyspIHsKLSAgICAgICAgaWYgKGZpZWxkcy5vZmZzZXRz
W2ldID49IG5vZGUtPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKSB7Ci0gICAgICAgICAgICBz
dGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07Ci0gICAgICAgICAgICBleHRyYUluZm9T
dHJlYW0gPDwgInZlY3RvciBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICciIDw8IGZpZWxk
cy5vZmZzZXRzW2ldIDw8ICInIjsKLSAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9
IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIs
IGV4dHJhSW5mby5jX3N0cigpKTsKLSAgICAgICAgICAgIHJlY292ZXIoKTsKLSAgICAgICAgICAg
IGZpZWxkcy5vZmZzZXRzW2ldID0gMDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgY29u
c3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbZmllbGRzLm9mZnNldHNbaV1dOwotCi0gICAgfSAKLSAg
ICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbihjb25zdEFycmF5LCBu
b2RlLT5nZXRUeXBlKCksIGxpbmUpOwotICAgIHJldHVybiB0eXBlZE5vZGU7Ci19Ci0KLS8vCi0v
LyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNvbHVtbiBiZWluZyBhY2Nlc3NlZCBmcm9tIGEg
Y29uc3RhbnQgbWF0cml4LiBUaGUgdmFsdWVzIGFyZSByZXRyaWV2ZWQgZnJvbQotLy8gdGhlIHN5
bWJvbCB0YWJsZSBhbmQgcGFyc2UtdHJlZSBpcyBidWlsdCBmb3IgYSB2ZWN0b3IgKGVhY2ggY29s
dW1uIG9mIGEgbWF0cml4IGlzIGEgdmVjdG9yKS4gVGhlIGlucHV0IAotLy8gdG8gdGhlIGZ1bmN0
aW9uIGNvdWxkIGVpdGhlciBiZSBhIHN5bWJvbCBub2RlIChtWzBdIHdoZXJlIG0gaXMgYSBjb25z
dGFudCBtYXRyaXgpdGhhdCByZXByZXNlbnRzIGEgCi0vLyBjb25zdGFudCBtYXRyaXggb3IgaXQg
Y291bGQgYmUgdGhlIHRyZWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbnN0YW50IG1hdHJpeCAo
cy5tMVswXSB3aGVyZSBzIGlzIGEgY29uc3RhbnQgc3RydWN0dXJlKQotLy8KLVRJbnRlcm1UeXBl
ZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RNYXRyaXhOb2RlKGludCBpbmRleCwgVEludGVybVR5
cGVkKiBub2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQotewotICAgIFRJbnRlcm1UeXBlZCog
dHlwZWROb2RlOwotICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiB0ZW1wQ29uc3RhbnROb2RlID0g
bm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0KLSAgICBpZiAoaW5kZXggPj0gbm9kZS0+Z2V0
VHlwZSgpLmdldE5vbWluYWxTaXplKCkpIHsKLSAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0
cmFJbmZvU3RyZWFtOwotICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgIm1hdHJpeCBmaWVsZCBz
ZWxlY3Rpb24gb3V0IG9mIHJhbmdlICciIDw8IGluZGV4IDw8ICInIjsKLSAgICAgICAgc3RkOjpz
dHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOwotICAgICAgICBlcnJvcihs
aW5lLCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7Ci0gICAgICAgIHJlY292ZXIoKTsKLSAg
ICAgICAgaW5kZXggPSAwOwotICAgIH0KLQotICAgIGlmICh0ZW1wQ29uc3RhbnROb2RlKSB7Ci0g
ICAgICAgICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0
VW5pb25BcnJheVBvaW50ZXIoKTsKLSAgICAgICAgIGludCBzaXplID0gdGVtcENvbnN0YW50Tm9k
ZS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCk7Ci0gICAgICAgICB0eXBlZE5vZGUgPSBpbnRl
cm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbigmdW5pb25BcnJheVtzaXplKmluZGV4XSwgdGVtcENv
bnN0YW50Tm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsKLSAgICB9IGVsc2UgewotICAgICAgICBlcnJv
cihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSBtYXRyaXgiLCAiRXJyb3IiKTsKLSAgICAg
ICAgcmVjb3ZlcigpOwotCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiB0
eXBlZE5vZGU7Ci19Ci0KLQotLy8KLS8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBlbGVtZW50
IG9mIGFuIGFycmF5IGFjY2Vzc2VkIGZyb20gYSBjb25zdGFudCBhcnJheS4gVGhlIHZhbHVlcyBh
cmUgcmV0cmlldmVkIGZyb20KLS8vIHRoZSBzeW1ib2wgdGFibGUgYW5kIHBhcnNlLXRyZWUgaXMg
YnVpbHQgZm9yIHRoZSB0eXBlIG9mIHRoZSBlbGVtZW50LiBUaGUgaW5wdXQgCi0vLyB0byB0aGUg
ZnVuY3Rpb24gY291bGQgZWl0aGVyIGJlIGEgc3ltYm9sIG5vZGUgKGFbMF0gd2hlcmUgYSBpcyBh
IGNvbnN0YW50IGFycmF5KXRoYXQgcmVwcmVzZW50cyBhIAotLy8gY29uc3RhbnQgYXJyYXkgb3Ig
aXQgY291bGQgYmUgdGhlIHRyZWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbnN0YW50IGFycmF5
IChzLmExWzBdIHdoZXJlIHMgaXMgYSBjb25zdGFudCBzdHJ1Y3R1cmUpCi0vLwotVEludGVybVR5
cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdEFycmF5Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1U
eXBlZCogbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKLXsKLSAgICBUSW50ZXJtVHlwZWQq
IHR5cGVkTm9kZTsKLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0YW50Tm9kZSA9
IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOwotICAgIFRUeXBlIGFycmF5RWxlbWVudFR5cGUg
PSBub2RlLT5nZXRUeXBlKCk7Ci0gICAgYXJyYXlFbGVtZW50VHlwZS5jbGVhckFycmF5bmVzcygp
OwotCi0gICAgaWYgKGluZGV4ID49IG5vZGUtPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSkgewot
ICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07Ci0gICAgICAgIGV4dHJh
SW5mb1N0cmVhbSA8PCAiYXJyYXkgZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnIiA8PCBp
bmRleCA8PCAiJyI7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0
cmVhbS5zdHIoKTsKLSAgICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwgZXh0cmFJbmZvLmNfc3Ry
KCkpOwotICAgICAgICByZWNvdmVyKCk7Ci0gICAgICAgIGluZGV4ID0gMDsKLSAgICB9Ci0KLSAg
ICBpZiAodGVtcENvbnN0YW50Tm9kZSkgewotICAgICAgICAgc2l6ZV90IGFycmF5RWxlbWVudFNp
emUgPSBhcnJheUVsZW1lbnRUeXBlLmdldE9iamVjdFNpemUoKTsKLSAgICAgICAgIENvbnN0YW50
VW5pb24qIHVuaW9uQXJyYXkgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRVbmlvbkFycmF5UG9pbnRl
cigpOwotICAgICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24o
JnVuaW9uQXJyYXlbYXJyYXlFbGVtZW50U2l6ZSAqIGluZGV4XSwgdGVtcENvbnN0YW50Tm9kZS0+
Z2V0VHlwZSgpLCBsaW5lKTsKLSAgICB9IGVsc2UgewotICAgICAgICBlcnJvcihsaW5lLCAiQ2Fu
bm90IG9mZnNldCBpbnRvIHRoZSBhcnJheSIsICJFcnJvciIpOwotICAgICAgICByZWNvdmVyKCk7
Ci0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIHR5cGVkTm9kZTsKLX0K
LQotCi0vLwotLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHBhcnRpY3Vs
YXIgZmllbGQgaW5zaWRlIGEgY29uc3RhbnQgc3RydWN0dXJlIGZyb20gdGhlIHN5bWJvbCB0YWJs
ZS4gCi0vLyBJZiB0aGVyZSBpcyBhbiBlbWJlZGRlZC9uZXN0ZWQgc3RydWN0LCBpdCBhcHByb3By
aWF0ZWx5IGNhbGxzIGFkZENvbnN0U3RydWN0TmVzdGVkIG9yIGFkZENvbnN0U3RydWN0RnJvbUFn
Z3IKLS8vIGZ1bmN0aW9uIGFuZCByZXR1cm5zIHRoZSBwYXJzZS10cmVlIHdpdGggdGhlIHZhbHVl
cyBvZiB0aGUgZW1iZWRkZWQvbmVzdGVkIHN0cnVjdC4KLS8vCi1USW50ZXJtVHlwZWQqIFRQYXJz
ZUNvbnRleHQ6OmFkZENvbnN0U3RydWN0KFRTdHJpbmcmIGlkZW50aWZpZXIsIFRJbnRlcm1UeXBl
ZCogbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKLXsKLSAgICBjb25zdCBURmllbGRMaXN0
JiBmaWVsZHMgPSBub2RlLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCktPmZpZWxkcygpOwotCi0gICAg
c2l6ZV90IGluc3RhbmNlU2l6ZSA9IDA7Ci0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRl
eCA8IGZpZWxkcy5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgaWYgKGZpZWxkc1tpbmRleF0t
Pm5hbWUoKSA9PSBpZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGluc3RhbmNlU2l6ZSArPSBmaWVsZHNbaW5kZXhdLT50eXBlKCkt
PmdldE9iamVjdFNpemUoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFRJbnRlcm1UeXBlZCog
dHlwZWROb2RlID0gMDsKLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0YW50Tm9k
ZSA9IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOwotICAgIGlmICh0ZW1wQ29uc3RhbnROb2Rl
KSB7Ci0gICAgICAgICBDb25zdGFudFVuaW9uKiBjb25zdEFycmF5ID0gdGVtcENvbnN0YW50Tm9k
ZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKLQotICAgICAgICAgdHlwZWROb2RlID0gaW50ZXJt
ZWRpYXRlLmFkZENvbnN0YW50VW5pb24oY29uc3RBcnJheStpbnN0YW5jZVNpemUsIHRlbXBDb25z
dGFudE5vZGUtPmdldFR5cGUoKSwgbGluZSk7IC8vIHR5cGUgd2lsbCBiZSBjaGFuZ2VkIGluIHRo
ZSBjYWxsaW5nIGZ1bmN0aW9uCi0gICAgfSBlbHNlIHsKLSAgICAgICAgZXJyb3IobGluZSwgIkNh
bm5vdCBvZmZzZXQgaW50byB0aGUgc3RydWN0dXJlIiwgIkVycm9yIik7Ci0gICAgICAgIHJlY292
ZXIoKTsKLQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHlwZWROb2Rl
OwotfQotCi1ib29sIFRQYXJzZUNvbnRleHQ6OmVudGVyU3RydWN0RGVjbGFyYXRpb24oY29uc3Qg
VFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllcikKLXsKLSAgICArK3N0
cnVjdE5lc3RpbmdMZXZlbDsKLQotICAgIC8vIEVtYmVkZGVkIHN0cnVjdHVyZSBkZWZpbml0aW9u
cyBhcmUgbm90IHN1cHBvcnRlZCBwZXIgR0xTTCBFUyBzcGVjLgotICAgIC8vIFRoZXkgYXJlbid0
IGFsbG93ZWQgaW4gR0xTTCBlaXRoZXIsIGJ1dCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzIGhlcmUK
LSAgICAvLyBzbyB3ZSBkb24ndCByZWx5IG9uIHRoZSBHTFNMIGNvbXBpbGVyIHRvIGNhdGNoIGl0
LgotICAgIGlmIChzdHJ1Y3ROZXN0aW5nTGV2ZWwgPiAxKSB7Ci0gICAgICAgIGVycm9yKGxpbmUs
ICIiLCAiRW1iZWRkZWQgc3RydWN0IGRlZmluaXRpb25zIGFyZSBub3QgYWxsb3dlZCIpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQg
VFBhcnNlQ29udGV4dDo6ZXhpdFN0cnVjdERlY2xhcmF0aW9uKCkKLXsKLSAgICAtLXN0cnVjdE5l
c3RpbmdMZXZlbDsKLX0KLQotbmFtZXNwYWNlIHsKLQotY29uc3QgaW50IGtXZWJHTE1heFN0cnVj
dE5lc3RpbmcgPSA0OwotCi19ICAvLyBuYW1lc3BhY2UKLQotYm9vbCBUUGFyc2VDb250ZXh0Ojpz
dHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBURmll
bGQmIGZpZWxkKQotewotICAgIGlmICghaXNXZWJHTEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGZpZWxkLnR5cGUoKS0+Z2V0
QmFzaWNUeXBlKCkgIT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICAvLyBXZSdyZSBhbHJlYWR5IGluc2lkZSBhIHN0cnVjdHVyZSBkZWZpbml0aW9uIGF0
IHRoaXMgcG9pbnQsIHNvIGFkZAotICAgIC8vIG9uZSB0byB0aGUgZmllbGQncyBzdHJ1Y3QgbmVz
dGluZy4KLSAgICBpZiAoMSArIGZpZWxkLnR5cGUoKS0+Z2V0RGVlcGVzdFN0cnVjdE5lc3Rpbmco
KSA+IGtXZWJHTE1heFN0cnVjdE5lc3RpbmcpIHsKLSAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0g
cmVhc29uU3RyZWFtOwotICAgICAgICByZWFzb25TdHJlYW0gPDwgIlJlZmVyZW5jZSBvZiBzdHJ1
Y3QgdHlwZSAiCi0gICAgICAgICAgICAgICAgICAgICA8PCBmaWVsZC50eXBlKCktPmdldFN0cnVj
dCgpLT5uYW1lKCkuY19zdHIoKQotICAgICAgICAgICAgICAgICAgICAgPDwgIiBleGNlZWRzIG1h
eGltdW0gYWxsb3dlZCBuZXN0aW5nIGxldmVsIG9mICIKLSAgICAgICAgICAgICAgICAgICAgIDw8
IGtXZWJHTE1heFN0cnVjdE5lc3Rpbmc7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIHJlYXNvbiA9IHJl
YXNvblN0cmVhbS5zdHIoKTsKLSAgICAgICAgZXJyb3IobGluZSwgcmVhc29uLmNfc3RyKCksIGZp
ZWxkLm5hbWUoKS5jX3N0cigpLCAiIik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8KLS8vIFBhcnNlIGFuIGFycmF5IGluZGV4IGV4cHJl
c3Npb24KLS8vCi1USW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZEluZGV4RXhwcmVzc2lv
bihUSW50ZXJtVHlwZWQgKmJhc2VFeHByZXNzaW9uLCBjb25zdCBUU291cmNlTG9jJiBsb2NhdGlv
biwgVEludGVybVR5cGVkICppbmRleEV4cHJlc3Npb24pCi17Ci0gICAgVEludGVybVR5cGVkICpp
bmRleGVkRXhwcmVzc2lvbiA9IE5VTEw7Ci0KLSAgICBpZiAoIWJhc2VFeHByZXNzaW9uLT5pc0Fy
cmF5KCkgJiYgIWJhc2VFeHByZXNzaW9uLT5pc01hdHJpeCgpICYmICFiYXNlRXhwcmVzc2lvbi0+
aXNWZWN0b3IoKSkKLSAgICB7Ci0gICAgICAgIGlmIChiYXNlRXhwcmVzc2lvbi0+Z2V0QXNTeW1i
b2xOb2RlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVycm9yKGxvY2F0aW9uLCAiIGxlZnQg
b2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCBiYXNlRXhw
cmVzc2lvbi0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3RyKCkpOwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgZXJyb3IobG9jYXRpb24s
ICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIs
ICJleHByZXNzaW9uIik7Ci0gICAgICAgIH0KLSAgICAgICAgcmVjb3ZlcigpOwotICAgIH0KLQot
ICAgIGlmIChpbmRleEV4cHJlc3Npb24tPmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQotICAg
IHsKLSAgICAgICAgaW50IGluZGV4ID0gaW5kZXhFeHByZXNzaW9uLT5nZXRBc0NvbnN0YW50VW5p
b24oKS0+Z2V0SUNvbnN0KDApOwotICAgICAgICBpZiAoaW5kZXggPCAwKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBpbmZvU3RyZWFtOwotICAgICAgICAgICAgaW5m
b1N0cmVhbSA8PCBpbmRleDsKLSAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGluZm8gPSBpbmZvU3Ry
ZWFtLnN0cigpOwotICAgICAgICAgICAgZXJyb3IobG9jYXRpb24sICJuZWdhdGl2ZSBpbmRleCIs
IGluZm8uY19zdHIoKSk7Ci0gICAgICAgICAgICByZWNvdmVyKCk7Ci0gICAgICAgICAgICBpbmRl
eCA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGJhc2VFeHByZXNzaW9uLT5nZXRUeXBlKCku
Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChi
YXNlRXhwcmVzc2lvbi0+aXNBcnJheSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IC8vIGNvbnN0YW50IGZvbGRpbmcgZm9yIGFycmF5cwotICAgICAgICAgICAgICAgIGluZGV4ZWRF
eHByZXNzaW9uID0gYWRkQ29uc3RBcnJheU5vZGUoaW5kZXgsIGJhc2VFeHByZXNzaW9uLCBsb2Nh
dGlvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChiYXNlRXhwcmVzc2lv
bi0+aXNWZWN0b3IoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBjb25zdGFu
dCBmb2xkaW5nIGZvciB2ZWN0b3JzCi0gICAgICAgICAgICAgICAgVFZlY3RvckZpZWxkcyBmaWVs
ZHM7Ci0gICAgICAgICAgICAgICAgZmllbGRzLm51bSA9IDE7Ci0gICAgICAgICAgICAgICAgZmll
bGRzLm9mZnNldHNbMF0gPSBpbmRleDsgLy8gbmVlZCB0byBkbyBpdCB0aGlzIHdheSBiZWNhdXNl
IHYueHkgc2VuZHMgZmllbGRzIGludGVnZXIgYXJyYXkKLSAgICAgICAgICAgICAgICBpbmRleGVk
RXhwcmVzc2lvbiA9IGFkZENvbnN0VmVjdG9yTm9kZShmaWVsZHMsIGJhc2VFeHByZXNzaW9uLCBs
b2NhdGlvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChiYXNlRXhwcmVz
c2lvbi0+aXNNYXRyaXgoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBjb25z
dGFudCBmb2xkaW5nIGZvciBtYXRyaWNlcwotICAgICAgICAgICAgICAgIGluZGV4ZWRFeHByZXNz
aW9uID0gYWRkQ29uc3RNYXRyaXhOb2RlKGluZGV4LCBiYXNlRXhwcmVzc2lvbiwgbG9jYXRpb24p
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKGJhc2VFeHByZXNzaW9uLT5pc0FycmF5KCkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGJhc2VFeHByZXNzaW9uLT5nZXRUeXBlKCkuZ2V0
QXJyYXlTaXplKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzdGQ6
OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07Ci0gICAgICAgICAgICAgICAgICAgIGV4dHJh
SW5mb1N0cmVhbSA8PCAiYXJyYXkgaW5kZXggb3V0IG9mIHJhbmdlICciIDw8IGluZGV4IDw8ICIn
IjsKLSAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZv
U3RyZWFtLnN0cigpOwotICAgICAgICAgICAgICAgICAgICBlcnJvcihsb2NhdGlvbiwgIiIsICJb
IiwgZXh0cmFJbmZvLmNfc3RyKCkpOwotICAgICAgICAgICAgICAgICAgICByZWNvdmVyKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGluZGV4ID0gYmFzZUV4cHJlc3Npb24tPmdldFR5cGUoKS5nZXRB
cnJheVNpemUoKSAtIDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGJhc2VFeHByZXNzaW9uLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFGcmFnRGF0YSAmJiBpbmRl
eCA+IDAgJiYgIWlzRXh0ZW5zaW9uRW5hYmxlZCgiR0xfRVhUX2RyYXdfYnVmZmVycyIpKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZXJyb3IobG9jYXRpb24sICIiLCAi
WyIsICJhcnJheSBpbmRleGVzIGZvciBnbF9GcmFnRGF0YSBtdXN0IGJlIHplcm8gd2hlbiBHTF9F
WFRfZHJhd19idWZmZXJzIGlzIGRpc2FibGVkIik7Ci0gICAgICAgICAgICAgICAgICAgIHJlY292
ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgaW5kZXggPSAwOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKChiYXNlRXhwcmVzc2lvbi0+aXNW
ZWN0b3IoKSB8fCBiYXNlRXhwcmVzc2lvbi0+aXNNYXRyaXgoKSkgJiYgYmFzZUV4cHJlc3Npb24t
PmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpIDw9IGluZGV4KQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKLSAgICAgICAg
ICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2Ug
JyIgPDwgaW5kZXggPDwgIiciOwotICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5m
byA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKLSAgICAgICAgICAgICAgICBlcnJvcihsb2NhdGlv
biwgIiIsICJbIiwgZXh0cmFJbmZvLmNfc3RyKCkpOwotICAgICAgICAgICAgICAgIHJlY292ZXIo
KTsKLSAgICAgICAgICAgICAgICBpbmRleCA9IGJhc2VFeHByZXNzaW9uLT5nZXRUeXBlKCkuZ2V0
Tm9taW5hbFNpemUoKSAtIDE7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGluZGV4RXhw
cmVzc2lvbi0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPnNl
dElDb25zdChpbmRleCk7Ci0gICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGludGVybWVk
aWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdCwgYmFzZUV4cHJlc3Npb24sIGluZGV4RXhwcmVz
c2lvbiwgbG9jYXRpb24pOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAg
ICAgIGluZGV4ZWRFeHByZXNzaW9uID0gaW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4SW5k
aXJlY3QsIGJhc2VFeHByZXNzaW9uLCBpbmRleEV4cHJlc3Npb24sIGxvY2F0aW9uKTsKLSAgICB9
Ci0KLSAgICBpZiAoaW5kZXhlZEV4cHJlc3Npb24gPT0gMCkKLSAgICB7Ci0gICAgICAgIENvbnN0
YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgdW5p
b25BcnJheS0+c2V0RkNvbnN0KDAuMGYpOwotICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGlu
dGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEZsb2F0LCBF
YnBIaWdoLCBFdnFDb25zdCksIGxvY2F0aW9uKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoYmFzZUV4
cHJlc3Npb24tPmlzQXJyYXkoKSkKLSAgICB7Ci0gICAgICAgIGNvbnN0IFRUeXBlICZiYXNlVHlw
ZSA9IGJhc2VFeHByZXNzaW9uLT5nZXRUeXBlKCk7Ci0gICAgICAgIGlmIChiYXNlVHlwZS5nZXRT
dHJ1Y3QoKSkKLSAgICAgICAgewotICAgICAgICAgICAgVFR5cGUgY29weU9mVHlwZShiYXNlVHlw
ZS5nZXRTdHJ1Y3QoKSk7Ci0gICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0VHlwZShj
b3B5T2ZUeXBlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKFRUeXBlKGJhc2VFeHByZXNzaW9uLT5nZXRC
YXNpY1R5cGUoKSwgYmFzZUV4cHJlc3Npb24tPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3Jhcnks
IGJhc2VFeHByZXNzaW9uLT5nZXROb21pbmFsU2l6ZSgpLCBiYXNlRXhwcmVzc2lvbi0+aXNNYXRy
aXgoKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGJhc2VFeHByZXNzaW9uLT5nZXRUeXBl
KCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlu
ZGV4ZWRFeHByZXNzaW9uLT5nZXRUeXBlUG9pbnRlcigpLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3Qp
OwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKGJhc2VFeHByZXNzaW9uLT5pc01hdHJp
eCgpKQotICAgIHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBiYXNlRXhwcmVzc2lv
bi0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0ID8gRXZxQ29uc3QgOiBFdnFU
ZW1wb3Jhcnk7Ci0gICAgICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKFRUeXBlKGJhc2VF
eHByZXNzaW9uLT5nZXRCYXNpY1R5cGUoKSwgYmFzZUV4cHJlc3Npb24tPmdldFByZWNpc2lvbigp
LCBxdWFsaWZpZXIsIGJhc2VFeHByZXNzaW9uLT5nZXROb21pbmFsU2l6ZSgpKSk7Ci0gICAgfQot
ICAgIGVsc2UgaWYgKGJhc2VFeHByZXNzaW9uLT5pc1ZlY3RvcigpKQotICAgIHsKLSAgICAgICAg
VFF1YWxpZmllciBxdWFsaWZpZXIgPSBiYXNlRXhwcmVzc2lvbi0+Z2V0VHlwZSgpLmdldFF1YWxp
ZmllcigpID09IEV2cUNvbnN0ID8gRXZxQ29uc3QgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgIGlu
ZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKFRUeXBlKGJhc2VFeHByZXNzaW9uLT5nZXRCYXNpY1R5
cGUoKSwgYmFzZUV4cHJlc3Npb24tPmdldFByZWNpc2lvbigpLCBxdWFsaWZpZXIpKTsKLSAgICB9
Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoYmFz
ZUV4cHJlc3Npb24tPmdldFR5cGUoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGluZGV4ZWRFeHBy
ZXNzaW9uOwotfQotCi0vLwotLy8gUGFyc2UgYW4gYXJyYXkgb2Ygc3RyaW5ncyB1c2luZyB5eXBh
cnNlLgotLy8KLS8vIFJldHVybnMgMCBmb3Igc3VjY2Vzcy4KLS8vCi1pbnQgUGFQYXJzZVN0cmlu
Z3Moc2l6ZV90IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxl
bmd0aFtdLAotICAgICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKLSAg
ICBpZiAoKGNvdW50ID09IDApIHx8IChzdHJpbmcgPT0gTlVMTCkpCi0gICAgICAgIHJldHVybiAx
OwotCi0gICAgaWYgKGdsc2xhbmdfaW5pdGlhbGl6ZShjb250ZXh0KSkKLSAgICAgICAgcmV0dXJu
IDE7Ci0KLSAgICBpbnQgZXJyb3IgPSBnbHNsYW5nX3NjYW4oY291bnQsIHN0cmluZywgbGVuZ3Ro
LCBjb250ZXh0KTsKLSAgICBpZiAoIWVycm9yKQotICAgICAgICBlcnJvciA9IGdsc2xhbmdfcGFy
c2UoY29udGV4dCk7Ci0KLSAgICBnbHNsYW5nX2ZpbmFsaXplKGNvbnRleHQpOwotCi0gICAgcmV0
dXJuIChlcnJvciA9PSAwKSAmJiAoY29udGV4dC0+bnVtRXJyb3JzKCkgPT0gMCkgPyAwIDogMTsK
LX0KLQotCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9QYXJzZUNvbnRleHQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Q
YXJzZUNvbnRleHQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJiM2MzZjdlYzg5
YjBkZmM3ZmExMTRjYWUzNTdiMTZkZmY1OTNiZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
UGFyc2VDb250ZXh0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLSNpZm5kZWYgX1BBUlNFUl9IRUxQRVJfSU5DTFVERURfCi0jZGVmaW5lIF9QQVJT
RVJfSEVMUEVSX0lOQ0xVREVEXwotCi0jaW5jbHVkZSAiY29tcGlsZXIvRGlhZ25vc3RpY3MuaCIK
LSNpbmNsdWRlICJjb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmgiCi0jaW5jbHVkZSAiY29tcGls
ZXIvbG9jYWxpbnRlcm1lZGlhdGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Iv
UHJlcHJvY2Vzc29yLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5kbGUuaCIKLSNpbmNsdWRl
ICJjb21waWxlci9TeW1ib2xUYWJsZS5oIgotCi1zdHJ1Y3QgVE1hdHJpeEZpZWxkcyB7Ci0gICAg
Ym9vbCB3aG9sZVJvdzsKLSAgICBib29sIHdob2xlQ29sOwotICAgIGludCByb3c7Ci0gICAgaW50
IGNvbDsKLX07Ci0KLS8vCi0vLyBUaGUgZm9sbG93aW5nIGFyZSBleHRyYSB2YXJpYWJsZXMgbmVl
ZGVkIGR1cmluZyBwYXJzaW5nLCBncm91cGVkIHRvZ2V0aGVyIHNvCi0vLyB0aGV5IGNhbiBiZSBw
YXNzZWQgdG8gdGhlIHBhcnNlciB3aXRob3V0IG5lZWRpbmcgYSBnbG9iYWwuCi0vLwotc3RydWN0
IFRQYXJzZUNvbnRleHQgewotICAgIFRQYXJzZUNvbnRleHQoVFN5bWJvbFRhYmxlJiBzeW10LCBU
RXh0ZW5zaW9uQmVoYXZpb3ImIGV4dCwgVEludGVybWVkaWF0ZSYgaW50ZXJtLCBTaFNoYWRlclR5
cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsIGludCBvcHRpb25zLCBib29sIGNoZWNrc1ByZWNF
cnJvcnMsIGNvbnN0IGNoYXIqIHNvdXJjZVBhdGgsIFRJbmZvU2luayYgaXMpIDoKLSAgICAgICAg
ICAgIGludGVybWVkaWF0ZShpbnRlcm0pLAotICAgICAgICAgICAgc3ltYm9sVGFibGUoc3ltdCks
Ci0gICAgICAgICAgICBzaGFkZXJUeXBlKHR5cGUpLAotICAgICAgICAgICAgc2hhZGVyU3BlYyhz
cGVjKSwKLSAgICAgICAgICAgIGNvbXBpbGVPcHRpb25zKG9wdGlvbnMpLAotICAgICAgICAgICAg
c291cmNlUGF0aChzb3VyY2VQYXRoKSwKLSAgICAgICAgICAgIHRyZWVSb290KDApLAotICAgICAg
ICAgICAgbG9vcE5lc3RpbmdMZXZlbCgwKSwKLSAgICAgICAgICAgIHN0cnVjdE5lc3RpbmdMZXZl
bCgwKSwKLSAgICAgICAgICAgIGN1cnJlbnRGdW5jdGlvblR5cGUoTlVMTCksCi0gICAgICAgICAg
ICBmdW5jdGlvblJldHVybnNWYWx1ZShmYWxzZSksCi0gICAgICAgICAgICBjaGVja3NQcmVjaXNp
b25FcnJvcnMoY2hlY2tzUHJlY0Vycm9ycyksCi0gICAgICAgICAgICBkaWFnbm9zdGljcyhpcyks
Ci0gICAgICAgICAgICBkaXJlY3RpdmVIYW5kbGVyKGV4dCwgZGlhZ25vc3RpY3MpLAotICAgICAg
ICAgICAgcHJlcHJvY2Vzc29yKCZkaWFnbm9zdGljcywgJmRpcmVjdGl2ZUhhbmRsZXIpLAotICAg
ICAgICAgICAgc2Nhbm5lcihOVUxMKSB7ICB9Ci0gICAgVEludGVybWVkaWF0ZSYgaW50ZXJtZWRp
YXRlOyAvLyB0byBob2xkIGFuZCBidWlsZCBhIHBhcnNlIHRyZWUKLSAgICBUU3ltYm9sVGFibGUm
IHN5bWJvbFRhYmxlOyAgIC8vIHN5bWJvbCB0YWJsZSB0aGF0IGdvZXMgd2l0aCB0aGUgbGFuZ3Vh
Z2UgY3VycmVudGx5IGJlaW5nIHBhcnNlZAotICAgIFNoU2hhZGVyVHlwZSBzaGFkZXJUeXBlOyAg
ICAgICAgICAgICAgLy8gdmVydGV4IG9yIGZyYWdtZW50IGxhbmd1YWdlIChmdXR1cmU6IHBhY2sg
b3IgdW5wYWNrKQotICAgIFNoU2hhZGVyU3BlYyBzaGFkZXJTcGVjOyAgICAgICAgICAgICAgLy8g
VGhlIGxhbmd1YWdlIHNwZWNpZmljYXRpb24gY29tcGlsZXIgY29uZm9ybXMgdG8gLSBHTEVTMiBv
ciBXZWJHTC4KLSAgICBpbnQgY29tcGlsZU9wdGlvbnM7Ci0gICAgY29uc3QgY2hhciogc291cmNl
UGF0aDsgICAgICAvLyBQYXRoIG9mIHNvdXJjZSBmaWxlIG9yIE5VTEwuCi0gICAgVEludGVybU5v
ZGUqIHRyZWVSb290OyAgICAgICAvLyByb290IG9mIHBhcnNlIHRyZWUgYmVpbmcgY3JlYXRlZAot
ICAgIGludCBsb29wTmVzdGluZ0xldmVsOyAgICAgICAgLy8gMCBpZiBvdXRzaWRlIGFsbCBsb29w
cwotICAgIGludCBzdHJ1Y3ROZXN0aW5nTGV2ZWw7ICAgICAgLy8gaW5jcmVtZW50ZWQgd2hpbGUg
cGFyc2luZyBhIHN0cnVjdCBkZWNsYXJhdGlvbgotICAgIGNvbnN0IFRUeXBlKiBjdXJyZW50RnVu
Y3Rpb25UeXBlOyAgLy8gdGhlIHJldHVybiB0eXBlIG9mIHRoZSBmdW5jdGlvbiB0aGF0J3MgY3Vy
cmVudGx5IGJlaW5nIHBhcnNlZAotICAgIGJvb2wgZnVuY3Rpb25SZXR1cm5zVmFsdWU7ICAgLy8g
dHJ1ZSBpZiBhIG5vbi12b2lkIGZ1bmN0aW9uIGhhcyBhIHJldHVybgotICAgIGJvb2wgY2hlY2tz
UHJlY2lzaW9uRXJyb3JzOyAgLy8gdHJ1ZSBpZiBhbiBlcnJvciB3aWxsIGJlIGdlbmVyYXRlZCB3
aGVuIGEgdmFyaWFibGUgaXMgZGVjbGFyZWQgd2l0aG91dCBwcmVjaXNpb24sIGV4cGxpY2l0IG9y
IGltcGxpY2l0LgotICAgIGJvb2wgZnJhZ21lbnRQcmVjaXNpb25IaWdoOyAgLy8gdHJ1ZSBpZiBo
aWdocCBwcmVjaXNpb24gaXMgc3VwcG9ydGVkIGluIHRoZSBmcmFnbWVudCBsYW5ndWFnZS4KLSAg
ICBUU3RyaW5nIEhhc2hFcnJNc2c7Ci0gICAgVERpYWdub3N0aWNzIGRpYWdub3N0aWNzOwotICAg
IFREaXJlY3RpdmVIYW5kbGVyIGRpcmVjdGl2ZUhhbmRsZXI7Ci0gICAgcHA6OlByZXByb2Nlc3Nv
ciBwcmVwcm9jZXNzb3I7Ci0gICAgdm9pZCogc2Nhbm5lcjsKLQotICAgIGludCBudW1FcnJvcnMo
KSBjb25zdCB7IHJldHVybiBkaWFnbm9zdGljcy5udW1FcnJvcnMoKTsgfQotICAgIFRJbmZvU2lu
ayYgaW5mb1NpbmsoKSB7IHJldHVybiBkaWFnbm9zdGljcy5pbmZvU2luaygpOyB9Ci0gICAgdm9p
ZCBlcnJvcihjb25zdCBUU291cmNlTG9jJiBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3Qg
Y2hhciogdG9rZW4sCi0gICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm89IiIpOwot
ICAgIHZvaWQgd2FybmluZyhjb25zdCBUU291cmNlTG9jJiBsb2MsIGNvbnN0IGNoYXIqIHJlYXNv
biwgY29uc3QgY2hhciogdG9rZW4sCi0gICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJh
SW5mbz0iIik7Ci0gICAgdm9pZCB0cmFjZShjb25zdCBjaGFyKiBzdHIpOwotICAgIHZvaWQgcmVj
b3ZlcigpOwotCi0gICAgYm9vbCBwYXJzZVZlY3RvckZpZWxkcyhjb25zdCBUU3RyaW5nJiwgaW50
IHZlY1NpemUsIFRWZWN0b3JGaWVsZHMmLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKTsKLSAgICBi
b29sIHBhcnNlTWF0cml4RmllbGRzKGNvbnN0IFRTdHJpbmcmLCBpbnQgbWF0U2l6ZSwgVE1hdHJp
eEZpZWxkcyYsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpOwotCi0gICAgYm9vbCByZXNlcnZlZEVy
cm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmll
cik7Ci0gICAgdm9pZCBhc3NpZ25FcnJvcihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBj
aGFyKiBvcCwgVFN0cmluZyBsZWZ0LCBUU3RyaW5nIHJpZ2h0KTsKLSAgICB2b2lkIHVuYXJ5T3BF
cnJvcihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVFN0cmluZyBvcGVy
YW5kKTsKLSAgICB2b2lkIGJpbmFyeU9wRXJyb3IoY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29u
c3QgY2hhciogb3AsIFRTdHJpbmcgbGVmdCwgVFN0cmluZyByaWdodCk7Ci0gICAgYm9vbCBwcmVj
aXNpb25FcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRQcmVjaXNpb24gcHJlY2lz
aW9uLCBUQmFzaWNUeXBlIHR5cGUpOwotICAgIGJvb2wgbFZhbHVlRXJyb3JDaGVjayhjb25zdCBU
U291cmNlTG9jJiBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVEludGVybVR5cGVkKik7Ci0gICAgYm9v
bCBjb25zdEVycm9yQ2hlY2soVEludGVybVR5cGVkKiBub2RlKTsKLSAgICBib29sIGludGVnZXJF
cnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSwgY29uc3QgY2hhciogdG9rZW4pOwotICAgIGJv
b2wgZ2xvYmFsRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBib29sIGdsb2JhbCwg
Y29uc3QgY2hhciogdG9rZW4pOwotICAgIGJvb2wgY29uc3RydWN0b3JFcnJvckNoZWNrKGNvbnN0
IFRTb3VyY2VMb2MmIGxpbmUsIFRJbnRlcm1Ob2RlKiwgVEZ1bmN0aW9uJiwgVE9wZXJhdG9yLCBU
VHlwZSopOwotICAgIGJvb2wgYXJyYXlTaXplRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBs
aW5lLCBUSW50ZXJtVHlwZWQqIGV4cHIsIGludCYgc2l6ZSk7Ci0gICAgYm9vbCBhcnJheVF1YWxp
ZmllckVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFB1YmxpY1R5cGUgdHlwZSk7
Ci0gICAgYm9vbCBhcnJheVR5cGVFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRQ
dWJsaWNUeXBlIHR5cGUpOwotICAgIGJvb2wgYXJyYXlFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VM
b2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlIHR5cGUsIFRWYXJpYWJs
ZSomIHZhcmlhYmxlKTsKLSAgICBib29sIHZvaWRFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2Mm
LCBjb25zdCBUU3RyaW5nJiwgY29uc3QgVFB1YmxpY1R5cGUmKTsKLSAgICBib29sIGJvb2xFcnJv
ckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmLCBjb25zdCBUSW50ZXJtVHlwZWQqKTsKLSAgICBib29s
IGJvb2xFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmLCBjb25zdCBUUHVibGljVHlwZSYpOwot
ICAgIGJvb2wgc2FtcGxlckVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3Qg
VFB1YmxpY1R5cGUmIHBUeXBlLCBjb25zdCBjaGFyKiByZWFzb24pOwotICAgIGJvb2wgc3RydWN0
UXVhbGlmaWVyRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUUHVibGlj
VHlwZSYgcFR5cGUpOwotICAgIGJvb2wgcGFyYW1ldGVyU2FtcGxlckVycm9yQ2hlY2soY29uc3Qg
VFNvdXJjZUxvYyYgbGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIGNvbnN0IFRUeXBlJiB0eXBl
KTsKLSAgICBib29sIG5vbkluaXRDb25zdEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGlu
ZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHR5cGUsIGJvb2wgYXJyYXkpOwot
ICAgIGJvb2wgbm9uSW5pdEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFN0cmlu
ZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHR5cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKTsK
LSAgICBib29sIHBhcmFtRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUXVhbGlm
aWVyIHF1YWxpZmllciwgVFF1YWxpZmllciBwYXJhbVF1YWxpZmllciwgVFR5cGUqIHR5cGUpOwot
ICAgIGJvb2wgZXh0ZW5zaW9uRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25z
dCBUU3RyaW5nJik7Ci0KLSAgICBjb25zdCBUUHJhZ21hJiBwcmFnbWEoKSBjb25zdCB7IHJldHVy
biBkaXJlY3RpdmVIYW5kbGVyLnByYWdtYSgpOyB9Ci0gICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2
aW9yJiBleHRlbnNpb25CZWhhdmlvcigpIGNvbnN0IHsgcmV0dXJuIGRpcmVjdGl2ZUhhbmRsZXIu
ZXh0ZW5zaW9uQmVoYXZpb3IoKTsgfQotICAgIGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oY29uc3Qg
Y2hhciogZXh0ZW5zaW9uKTsKLSAgICBib29sIGlzRXh0ZW5zaW9uRW5hYmxlZChjb25zdCBjaGFy
KiBleHRlbnNpb24pIGNvbnN0OwotCi0gICAgYm9vbCBjb250YWluc1NhbXBsZXIoVFR5cGUmIHR5
cGUpOwotICAgIGJvb2wgYXJlQWxsQ2hpbGRDb25zdChUSW50ZXJtQWdncmVnYXRlKiBhZ2dyTm9k
ZSk7Ci0gICAgY29uc3QgVEZ1bmN0aW9uKiBmaW5kRnVuY3Rpb24oY29uc3QgVFNvdXJjZUxvYyYg
bGluZSwgVEZ1bmN0aW9uKiBwZm5DYWxsLCBib29sICpidWlsdEluID0gMCk7Ci0gICAgYm9vbCBl
eGVjdXRlSW5pdGlhbGl6ZXIoY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFN0cmluZyYgaWRlbnRp
ZmllciwgVFB1YmxpY1R5cGUmIHBUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJ
bnRlcm1UeXBlZCogaW5pdGlhbGl6ZXIsIFRJbnRlcm1Ob2RlKiYgaW50ZXJtTm9kZSwgVFZhcmlh
YmxlKiB2YXJpYWJsZSA9IDApOwotCi0gICAgVEludGVybVR5cGVkKiBhZGRDb25zdHJ1Y3RvcihU
SW50ZXJtTm9kZSosIGNvbnN0IFRUeXBlKiwgVE9wZXJhdG9yLCBURnVuY3Rpb24qLCBjb25zdCBU
U291cmNlTG9jJik7Ci0gICAgVEludGVybVR5cGVkKiBmb2xkQ29uc3RDb25zdHJ1Y3RvcihUSW50
ZXJtQWdncmVnYXRlKiBhZ2dyTm9kZSwgY29uc3QgVFR5cGUmIHR5cGUpOwotICAgIFRJbnRlcm1U
eXBlZCogY29uc3RydWN0U3RydWN0KFRJbnRlcm1Ob2RlKiwgVFR5cGUqLCBpbnQsIGNvbnN0IFRT
b3VyY2VMb2MmLCBib29sIHN1YnNldCk7Ci0gICAgVEludGVybVR5cGVkKiBjb25zdHJ1Y3RCdWls
dEluKGNvbnN0IFRUeXBlKiwgVE9wZXJhdG9yLCBUSW50ZXJtTm9kZSosIGNvbnN0IFRTb3VyY2VM
b2MmLCBib29sIHN1YnNldCk7Ci0gICAgVEludGVybVR5cGVkKiBhZGRDb25zdFZlY3Rvck5vZGUo
VFZlY3RvckZpZWxkcyYsIFRJbnRlcm1UeXBlZCosIGNvbnN0IFRTb3VyY2VMb2MmKTsKLSAgICBU
SW50ZXJtVHlwZWQqIGFkZENvbnN0TWF0cml4Tm9kZShpbnQgLCBUSW50ZXJtVHlwZWQqLCBjb25z
dCBUU291cmNlTG9jJik7Ci0gICAgVEludGVybVR5cGVkKiBhZGRDb25zdEFycmF5Tm9kZShpbnQg
aW5kZXgsIFRJbnRlcm1UeXBlZCogbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSk7Ci0gICAg
VEludGVybVR5cGVkKiBhZGRDb25zdFN0cnVjdChUU3RyaW5nJiAsIFRJbnRlcm1UeXBlZCosIGNv
bnN0IFRTb3VyY2VMb2MmKTsKLSAgICBUSW50ZXJtVHlwZWQqIGFkZEluZGV4RXhwcmVzc2lvbihU
SW50ZXJtVHlwZWQgKmJhc2VFeHByZXNzaW9uLCBjb25zdCBUU291cmNlTG9jJiBsb2NhdGlvbiwg
VEludGVybVR5cGVkICppbmRleEV4cHJlc3Npb24pOwotCi0gICAgLy8gUGVyZm9ybXMgYW4gZXJy
b3IgY2hlY2sgZm9yIGVtYmVkZGVkIHN0cnVjdCBkZWNsYXJhdGlvbnMuCi0gICAgLy8gUmV0dXJu
cyB0cnVlIGlmIGFuIGVycm9yIHdhcyByYWlzZWQgZHVlIHRvIHRoZSBkZWNsYXJhdGlvbiBvZgot
ICAgIC8vIHRoaXMgc3RydWN0LgotICAgIGJvb2wgZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbihjb25z
dCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyKTsKLSAgICB2b2lk
IGV4aXRTdHJ1Y3REZWNsYXJhdGlvbigpOwotCi0gICAgYm9vbCBzdHJ1Y3ROZXN0aW5nRXJyb3JD
aGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBURmllbGQmIGZpZWxkKTsKLX07Ci0K
LWludCBQYVBhcnNlU3RyaW5ncyhzaXplX3QgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmlu
Z1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCi0gICAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4
dCogY29udGV4dCk7Ci0KLSNlbmRpZiAvLyBfUEFSU0VSX0hFTFBFUl9JTkNMVURFRF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViOTkzNTY3YjM1MzVlMTIxMjQ2ODk1ZTk4ZmE4
ZjRjNDEwMGRmYzguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwyOTQgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1
ZGUgImNvbXBpbGVyL1Bvb2xBbGxvYy5oIgotCi0jaWZuZGVmIF9NU0NfVkVSCi0jaW5jbHVkZSA8
c3RkaW50Lmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzdGRpby5oPgotCi0jaW5jbHVkZSAiY29tbW9u
L2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplR2xvYmFscy5oIgot
I2luY2x1ZGUgImNvbXBpbGVyL29zaW5jbHVkZS5oIgotCi1PU19UTFNJbmRleCBQb29sSW5kZXgg
PSBPU19JTlZBTElEX1RMU19JTkRFWDsKLQotYm9vbCBJbml0aWFsaXplUG9vbEluZGV4KCkKLXsK
LSAgICBhc3NlcnQoUG9vbEluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKTsKLQotICAgIFBv
b2xJbmRleCA9IE9TX0FsbG9jVExTSW5kZXgoKTsKLSAgICByZXR1cm4gUG9vbEluZGV4ICE9IE9T
X0lOVkFMSURfVExTX0lOREVYOwotfQotCi12b2lkIEZyZWVQb29sSW5kZXgoKQotewotICAgIGFz
c2VydChQb29sSW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpOwotCi0gICAgT1NfRnJlZVRM
U0luZGV4KFBvb2xJbmRleCk7Ci0gICAgUG9vbEluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7
Ci19Ci0KLVRQb29sQWxsb2NhdG9yKiBHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCkKLXsKLSAgICBh
c3NlcnQoUG9vbEluZGV4ICE9IE9TX0lOVkFMSURfVExTX0lOREVYKTsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8VFBvb2xBbGxvY2F0b3IqPihPU19HZXRUTFNWYWx1ZShQb29sSW5kZXgpKTsKLX0K
LQotdm9pZCBTZXRHbG9iYWxQb29sQWxsb2NhdG9yKFRQb29sQWxsb2NhdG9yKiBwb29sQWxsb2Nh
dG9yKQotewotICAgIGFzc2VydChQb29sSW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpOwot
ICAgIE9TX1NldFRMU1ZhbHVlKFBvb2xJbmRleCwgcG9vbEFsbG9jYXRvcik7Ci19Ci0KLS8vCi0v
LyBJbXBsZW1lbnQgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIFRQb29sQWxsb2NhdG9yIGNsYXNz
LCB3aGljaAotLy8gaXMgZG9jdW1lbnRlZCBpbiBQb29sQWxsb2MuaC4KLS8vCi1UUG9vbEFsbG9j
YXRvcjo6VFBvb2xBbGxvY2F0b3IoaW50IGdyb3d0aEluY3JlbWVudCwgaW50IGFsbG9jYXRpb25B
bGlnbm1lbnQpIDogCi0gICAgcGFnZVNpemUoZ3Jvd3RoSW5jcmVtZW50KSwKLSAgICBhbGlnbm1l
bnQoYWxsb2NhdGlvbkFsaWdubWVudCksCi0gICAgZnJlZUxpc3QoMCksCi0gICAgaW5Vc2VMaXN0
KDApLAotICAgIG51bUNhbGxzKDApLAotICAgIHRvdGFsQnl0ZXMoMCkKLXsKLSAgICAvLwotICAg
IC8vIERvbid0IGFsbG93IHBhZ2Ugc2l6ZXMgd2Uga25vdyBhcmUgc21hbGxlciB0aGFuIGFsbCBj
b21tb24KLSAgICAvLyBPUyBwYWdlIHNpemVzLgotICAgIC8vCi0gICAgaWYgKHBhZ2VTaXplIDwg
NCoxMDI0KQotICAgICAgICBwYWdlU2l6ZSA9IDQqMTAyNDsKLQotICAgIC8vCi0gICAgLy8gQSBs
YXJnZSBjdXJyZW50UGFnZU9mZnNldCBpbmRpY2F0ZXMgYSBuZXcgcGFnZSBuZWVkcyB0bwotICAg
IC8vIGJlIG9idGFpbmVkIHRvIGFsbG9jYXRlIG1lbW9yeS4KLSAgICAvLwotICAgIGN1cnJlbnRQ
YWdlT2Zmc2V0ID0gcGFnZVNpemU7Ci0KLSAgICAvLwotICAgIC8vIEFkanVzdCBhbGlnbm1lbnQg
dG8gYmUgYXQgbGVhc3QgcG9pbnRlciBhbGlnbmVkIGFuZAotICAgIC8vIHBvd2VyIG9mIDIuCi0g
ICAgLy8KLSAgICBzaXplX3QgbWluQWxpZ24gPSBzaXplb2Yodm9pZCopOwotICAgIGFsaWdubWVu
dCAmPSB+KG1pbkFsaWduIC0gMSk7Ci0gICAgaWYgKGFsaWdubWVudCA8IG1pbkFsaWduKQotICAg
ICAgICBhbGlnbm1lbnQgPSBtaW5BbGlnbjsKLSAgICBzaXplX3QgYSA9IDE7Ci0gICAgd2hpbGUg
KGEgPCBhbGlnbm1lbnQpCi0gICAgICAgIGEgPDw9IDE7Ci0gICAgYWxpZ25tZW50ID0gYTsKLSAg
ICBhbGlnbm1lbnRNYXNrID0gYSAtIDE7Ci0KLSAgICAvLwotICAgIC8vIEFsaWduIGhlYWRlciBz
a2lwCi0gICAgLy8KLSAgICBoZWFkZXJTa2lwID0gbWluQWxpZ247Ci0gICAgaWYgKGhlYWRlclNr
aXAgPCBzaXplb2YodEhlYWRlcikpIHsKLSAgICAgICAgaGVhZGVyU2tpcCA9IChzaXplb2YodEhl
YWRlcikgKyBhbGlnbm1lbnRNYXNrKSAmIH5hbGlnbm1lbnRNYXNrOwotICAgIH0KLX0KLQotVFBv
b2xBbGxvY2F0b3I6On5UUG9vbEFsbG9jYXRvcigpCi17Ci0gICAgd2hpbGUgKGluVXNlTGlzdCkg
ewotICAgICAgICB0SGVhZGVyKiBuZXh0ID0gaW5Vc2VMaXN0LT5uZXh0UGFnZTsKLSAgICAgICAg
aW5Vc2VMaXN0LT5+dEhlYWRlcigpOwotICAgICAgICBkZWxldGUgW10gcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oaW5Vc2VMaXN0KTsKLSAgICAgICAgaW5Vc2VMaXN0ID0gbmV4dDsKLSAgICB9Ci0K
LSAgICAvLyBXZSBzaG91bGQgbm90IGNoZWNrIHRoZSBndWFyZCBibG9ja3MKLSAgICAvLyBoZXJl
LCBiZWNhdXNlIHdlIGRpZCBpdCBhbHJlYWR5IHdoZW4gdGhlIGJsb2NrIHdhcwotICAgIC8vIHBs
YWNlZCBpbnRvIHRoZSBmcmVlIGxpc3QuCi0gICAgLy8KLSAgICB3aGlsZSAoZnJlZUxpc3QpIHsK
LSAgICAgICAgdEhlYWRlciogbmV4dCA9IGZyZWVMaXN0LT5uZXh0UGFnZTsKLSAgICAgICAgZGVs
ZXRlIFtdIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGZyZWVMaXN0KTsKLSAgICAgICAgZnJlZUxp
c3QgPSBuZXh0OwotICAgIH0KLX0KLQotLy8gU3VwcG9ydCBNU1ZDKysgNi4wCi1jb25zdCB1bnNp
Z25lZCBjaGFyIFRBbGxvY2F0aW9uOjpndWFyZEJsb2NrQmVnaW5WYWwgPSAweGZiOwotY29uc3Qg
dW5zaWduZWQgY2hhciBUQWxsb2NhdGlvbjo6Z3VhcmRCbG9ja0VuZFZhbCAgID0gMHhmZTsKLWNv
bnN0IHVuc2lnbmVkIGNoYXIgVEFsbG9jYXRpb246OnVzZXJEYXRhRmlsbCAgICAgICA9IDB4Y2Q7
Ci0KLSNpZmRlZiBHVUFSRF9CTE9DS1MKLSAgICBjb25zdCBzaXplX3QgVEFsbG9jYXRpb246Omd1
YXJkQmxvY2tTaXplID0gMTY7Ci0jZWxzZQotICAgIGNvbnN0IHNpemVfdCBUQWxsb2NhdGlvbjo6
Z3VhcmRCbG9ja1NpemUgPSAwOwotI2VuZGlmCi0KLS8vCi0vLyBDaGVjayBhIHNpbmdsZSBndWFy
ZCBibG9jayBmb3IgZGFtYWdlCi0vLwotdm9pZCBUQWxsb2NhdGlvbjo6Y2hlY2tHdWFyZEJsb2Nr
KHVuc2lnbmVkIGNoYXIqIGJsb2NrTWVtLCB1bnNpZ25lZCBjaGFyIHZhbCwgY29uc3QgY2hhciog
bG9jVGV4dCkgY29uc3QKLXsKLSNpZmRlZiBHVUFSRF9CTE9DS1MKLSAgICBmb3IgKHNpemVfdCB4
ID0gMDsgeCA8IGd1YXJkQmxvY2tTaXplOyB4KyspIHsKLSAgICAgICAgaWYgKGJsb2NrTWVtW3hd
ICE9IHZhbCkgewotICAgICAgICAgICAgY2hhciBhc3NlcnRNc2dbODBdOwotCi0gICAgICAgICAg
ICAvLyBXZSBkb24ndCBwcmludCB0aGUgYXNzZXJ0IG1lc3NhZ2UuICBJdCdzIGhlcmUganVzdCB0
byBiZSBoZWxwZnVsLgotI2lmIGRlZmluZWQoX01TQ19WRVIpCi0gICAgICAgICAgICBzbnByaW50
Zihhc3NlcnRNc2csIHNpemVvZihhc3NlcnRNc2cpLCAiUG9vbEFsbG9jOiBEYW1hZ2UgJXMgJUl1
IGJ5dGUgYWxsb2NhdGlvbiBhdCAweCVwXG4iLAotICAgICAgICAgICAgICAgICAgICBsb2NUZXh0
LCBzaXplLCBkYXRhKCkpOwotI2Vsc2UKLSAgICAgICAgICAgIHNucHJpbnRmKGFzc2VydE1zZywg
c2l6ZW9mKGFzc2VydE1zZyksICJQb29sQWxsb2M6IERhbWFnZSAlcyAlenUgYnl0ZSBhbGxvY2F0
aW9uIGF0IDB4JXBcbiIsCi0gICAgICAgICAgICAgICAgICAgIGxvY1RleHQsIHNpemUsIGRhdGEo
KSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGFzc2VydCgwICYmICJQb29sQWxsb2M6IERhbWFnZSBp
biBndWFyZCBibG9jayIpOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi19Ci0KLQotdm9pZCBU
UG9vbEFsbG9jYXRvcjo6cHVzaCgpCi17Ci0gICAgdEFsbG9jU3RhdGUgc3RhdGUgPSB7IGN1cnJl
bnRQYWdlT2Zmc2V0LCBpblVzZUxpc3QgfTsKLQotICAgIHN0YWNrLnB1c2hfYmFjayhzdGF0ZSk7
Ci0gICAgICAgIAotICAgIC8vCi0gICAgLy8gSW5kaWNhdGUgdGhlcmUgaXMgbm8gY3VycmVudCBw
YWdlIHRvIGFsbG9jYXRlIGZyb20uCi0gICAgLy8KLSAgICBjdXJyZW50UGFnZU9mZnNldCA9IHBh
Z2VTaXplOwotfQotCi0vLwotLy8gRG8gYSBtYXNzLWRlYWxsb2NhdGlvbiBvZiBhbGwgdGhlIGlu
ZGl2aWR1YWwgYWxsb2NhdGlvbnMKLS8vIHRoYXQgaGF2ZSBvY2N1cnJlZCBzaW5jZSB0aGUgbGFz
dCBwdXNoKCksIG9yIHNpbmNlIHRoZQotLy8gbGFzdCBwb3AoKSwgb3Igc2luY2UgdGhlIG9iamVj
dCdzIGNyZWF0aW9uLgotLy8KLS8vIFRoZSBkZWFsbG9jYXRlZCBwYWdlcyBhcmUgc2F2ZWQgZm9y
IGZ1dHVyZSBhbGxvY2F0aW9ucy4KLS8vCi12b2lkIFRQb29sQWxsb2NhdG9yOjpwb3AoKQotewot
ICAgIGlmIChzdGFjay5zaXplKCkgPCAxKQotICAgICAgICByZXR1cm47Ci0KLSAgICB0SGVhZGVy
KiBwYWdlID0gc3RhY2suYmFjaygpLnBhZ2U7Ci0gICAgY3VycmVudFBhZ2VPZmZzZXQgPSBzdGFj
ay5iYWNrKCkub2Zmc2V0OwotCi0gICAgd2hpbGUgKGluVXNlTGlzdCAhPSBwYWdlKSB7Ci0gICAg
ICAgIC8vIGludm9rZSBkZXN0cnVjdG9yIHRvIGZyZWUgYWxsb2NhdGlvbiBsaXN0Ci0gICAgICAg
IGluVXNlTGlzdC0+fnRIZWFkZXIoKTsKLSAgICAgICAgCi0gICAgICAgIHRIZWFkZXIqIG5leHRJ
blVzZSA9IGluVXNlTGlzdC0+bmV4dFBhZ2U7Ci0gICAgICAgIGlmIChpblVzZUxpc3QtPnBhZ2VD
b3VudCA+IDEpCi0gICAgICAgICAgICBkZWxldGUgW10gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
aW5Vc2VMaXN0KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpblVzZUxpc3QtPm5leHRQ
YWdlID0gZnJlZUxpc3Q7Ci0gICAgICAgICAgICBmcmVlTGlzdCA9IGluVXNlTGlzdDsKLSAgICAg
ICAgfQotICAgICAgICBpblVzZUxpc3QgPSBuZXh0SW5Vc2U7Ci0gICAgfQotCi0gICAgc3RhY2su
cG9wX2JhY2soKTsKLX0KLQotLy8KLS8vIERvIGEgbWFzcy1kZWFsbG9jYXRpb24gb2YgYWxsIHRo
ZSBpbmRpdmlkdWFsIGFsbG9jYXRpb25zCi0vLyB0aGF0IGhhdmUgb2NjdXJyZWQuCi0vLwotdm9p
ZCBUUG9vbEFsbG9jYXRvcjo6cG9wQWxsKCkKLXsKLSAgICB3aGlsZSAoc3RhY2suc2l6ZSgpID4g
MCkKLSAgICAgICAgcG9wKCk7Ci19Ci0KLXZvaWQqIFRQb29sQWxsb2NhdG9yOjphbGxvY2F0ZShz
aXplX3QgbnVtQnl0ZXMpCi17Ci0gICAgLy8KLSAgICAvLyBKdXN0IGtlZXAgc29tZSBpbnRlcmVz
dGluZyBzdGF0aXN0aWNzLgotICAgIC8vCi0gICAgKytudW1DYWxsczsKLSAgICB0b3RhbEJ5dGVz
ICs9IG51bUJ5dGVzOwotCi0gICAgLy8gSWYgd2UgYXJlIHVzaW5nIGd1YXJkIGJsb2NrcywgYWxs
IGFsbG9jYXRpb25zIGFyZSBicmFja2V0ZWQgYnkKLSAgICAvLyB0aGVtOiBbZ3VhcmRibG9ja11b
YWxsb2NhdGlvbl1bZ3VhcmRibG9ja10uICBudW1CeXRlcyBpcyBob3cKLSAgICAvLyBtdWNoIG1l
bW9yeSB0aGUgY2FsbGVyIGFza2VkIGZvci4gIGFsbG9jYXRpb25TaXplIGlzIHRoZSB0b3RhbAot
ICAgIC8vIHNpemUgaW5jbHVkaW5nIGd1YXJkIGJsb2Nrcy4gIEluIHJlbGVhc2UgYnVpbGQsCi0g
ICAgLy8gZ3VhcmRCbG9ja1NpemU9MCBhbmQgdGhpcyBhbGwgZ2V0cyBvcHRpbWl6ZWQgYXdheS4K
LSAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBUQWxsb2NhdGlvbjo6YWxsb2NhdGlvblNpemUo
bnVtQnl0ZXMpOwotICAgIC8vIERldGVjdCBpbnRlZ2VyIG92ZXJmbG93LgotICAgIGlmIChhbGxv
Y2F0aW9uU2l6ZSA8IG51bUJ5dGVzKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vCi0gICAg
Ly8gRG8gdGhlIGFsbG9jYXRpb24sIG1vc3QgbGlrZWx5IGNhc2UgZmlyc3QsIGZvciBlZmZpY2ll
bmN5LgotICAgIC8vIFRoaXMgc3RlcCBjb3VsZCBiZSBtb3ZlZCB0byBiZSBpbmxpbmUgc29tZXRp
bWUuCi0gICAgLy8KLSAgICBpZiAoYWxsb2NhdGlvblNpemUgPD0gcGFnZVNpemUgLSBjdXJyZW50
UGFnZU9mZnNldCkgewotICAgICAgICAvLwotICAgICAgICAvLyBTYWZlIHRvIGFsbG9jYXRlIGZy
b20gY3VycmVudFBhZ2VPZmZzZXQuCi0gICAgICAgIC8vCi0gICAgICAgIHVuc2lnbmVkIGNoYXIq
IG1lbW9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhciAqPihpblVzZUxpc3QpICsg
Y3VycmVudFBhZ2VPZmZzZXQ7Ci0gICAgICAgIGN1cnJlbnRQYWdlT2Zmc2V0ICs9IGFsbG9jYXRp
b25TaXplOwotICAgICAgICBjdXJyZW50UGFnZU9mZnNldCA9IChjdXJyZW50UGFnZU9mZnNldCAr
IGFsaWdubWVudE1hc2spICYgfmFsaWdubWVudE1hc2s7Ci0KLSAgICAgICAgcmV0dXJuIGluaXRp
YWxpemVBbGxvY2F0aW9uKGluVXNlTGlzdCwgbWVtb3J5LCBudW1CeXRlcyk7Ci0gICAgfQotCi0g
ICAgaWYgKGFsbG9jYXRpb25TaXplID4gcGFnZVNpemUgLSBoZWFkZXJTa2lwKSB7Ci0gICAgICAg
IC8vCi0gICAgICAgIC8vIERvIGEgbXVsdGktcGFnZSBhbGxvY2F0aW9uLiAgRG9uJ3QgbWl4IHRo
ZXNlIHdpdGggdGhlIG90aGVycy4KLSAgICAgICAgLy8gVGhlIE9TIGlzIGVmZmljaWVudCBhbmQg
YWxsb2NhdGluZyBhbmQgZnJlZS1pbmcgbXVsdGlwbGUgcGFnZXMuCi0gICAgICAgIC8vCi0gICAg
ICAgIHNpemVfdCBudW1CeXRlc1RvQWxsb2MgPSBhbGxvY2F0aW9uU2l6ZSArIGhlYWRlclNraXA7
Ci0gICAgICAgIC8vIERldGVjdCBpbnRlZ2VyIG92ZXJmbG93LgotICAgICAgICBpZiAobnVtQnl0
ZXNUb0FsbG9jIDwgYWxsb2NhdGlvblNpemUpCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAg
ICAgICB0SGVhZGVyKiBtZW1vcnkgPSByZWludGVycHJldF9jYXN0PHRIZWFkZXIqPig6Om5ldyBj
aGFyW251bUJ5dGVzVG9BbGxvY10pOwotICAgICAgICBpZiAobWVtb3J5ID09IDApCi0gICAgICAg
ICAgICByZXR1cm4gMDsKLQotICAgICAgICAvLyBVc2UgcGxhY2VtZW50LW5ldyB0byBpbml0aWFs
aXplIGhlYWRlcgotICAgICAgICBuZXcobWVtb3J5KSB0SGVhZGVyKGluVXNlTGlzdCwgKG51bUJ5
dGVzVG9BbGxvYyArIHBhZ2VTaXplIC0gMSkgLyBwYWdlU2l6ZSk7Ci0gICAgICAgIGluVXNlTGlz
dCA9IG1lbW9yeTsKLQotICAgICAgICBjdXJyZW50UGFnZU9mZnNldCA9IHBhZ2VTaXplOyAgLy8g
bWFrZSBuZXh0IGFsbG9jYXRpb24gY29tZSBmcm9tIGEgbmV3IHBhZ2UKLQotICAgICAgICAvLyBO
byBndWFyZCBibG9ja3MgZm9yIG11bHRpLXBhZ2UgYWxsb2NhdGlvbnMgKHlldCkKLSAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
PihtZW1vcnkpICsgaGVhZGVyU2tpcCk7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBOZWVkIGEg
c2ltcGxlIHBhZ2UgdG8gYWxsb2NhdGUgZnJvbS4KLSAgICAvLwotICAgIHRIZWFkZXIqIG1lbW9y
eTsKLSAgICBpZiAoZnJlZUxpc3QpIHsKLSAgICAgICAgbWVtb3J5ID0gZnJlZUxpc3Q7Ci0gICAg
ICAgIGZyZWVMaXN0ID0gZnJlZUxpc3QtPm5leHRQYWdlOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IG1lbW9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dEhlYWRlcio+KDo6bmV3IGNoYXJbcGFnZVNpemVd
KTsKLSAgICAgICAgaWYgKG1lbW9yeSA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotCi0gICAgLy8gVXNlIHBsYWNlbWVudC1uZXcgdG8gaW5pdGlhbGl6ZSBoZWFkZXIKLSAgICBu
ZXcobWVtb3J5KSB0SGVhZGVyKGluVXNlTGlzdCwgMSk7Ci0gICAgaW5Vc2VMaXN0ID0gbWVtb3J5
OwotICAgIAotICAgIHVuc2lnbmVkIGNoYXIqIHJldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQgY2hhciAqPihpblVzZUxpc3QpICsgaGVhZGVyU2tpcDsKLSAgICBjdXJyZW50UGFnZU9mZnNl
dCA9IChoZWFkZXJTa2lwICsgYWxsb2NhdGlvblNpemUgKyBhbGlnbm1lbnRNYXNrKSAmIH5hbGln
bm1lbnRNYXNrOwotCi0gICAgcmV0dXJuIGluaXRpYWxpemVBbGxvY2F0aW9uKGluVXNlTGlzdCwg
cmV0LCBudW1CeXRlcyk7Ci19Ci0KLQotLy8KLS8vIENoZWNrIGFsbCBhbGxvY2F0aW9ucyBpbiBh
IGxpc3QgZm9yIGRhbWFnZSBieSBjYWxsaW5nIGNoZWNrIG9uIGVhY2guCi0vLwotdm9pZCBUQWxs
b2NhdGlvbjo6Y2hlY2tBbGxvY0xpc3QoKSBjb25zdAotewotICAgIGZvciAoY29uc3QgVEFsbG9j
YXRpb24qIGFsbG9jID0gdGhpczsgYWxsb2MgIT0gMDsgYWxsb2MgPSBhbGxvYy0+cHJldkFsbG9j
KQotICAgICAgICBhbGxvYy0+Y2hlY2soKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZWRkMjQ5YzRkM2EzOWJiMjAxYzM4NTU0MjM5OTA4MDhmNTVmMDdlNS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMDAgKzAsMCBA
QAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBfUE9PTEFMTE9DX0lOQ0xVREVEXwotI2Rl
ZmluZSBfUE9PTEFMTE9DX0lOQ0xVREVEXwotCi0jaWZkZWYgX0RFQlVHCi0jZGVmaW5lIEdVQVJE
X0JMT0NLUyAgLy8gZGVmaW5lIHRvIGVuYWJsZSBndWFyZCBibG9jayBzYW5pdHkgY2hlY2tpbmcK
LSNlbmRpZgotCi0vLwotLy8gVGhpcyBoZWFkZXIgZGVmaW5lcyBhbiBhbGxvY2F0b3IgdGhhdCBj
YW4gYmUgdXNlZCB0byBlZmZpY2llbnRseQotLy8gYWxsb2NhdGUgYSBsYXJnZSBudW1iZXIgb2Yg
c21hbGwgcmVxdWVzdHMgZm9yIGhlYXAgbWVtb3J5LCB3aXRoIHRoZSAKLS8vIGludGVudGlvbiB0
aGF0IHRoZXkgYXJlIG5vdCBpbmRpdmlkdWFsbHkgZGVhbGxvY2F0ZWQsIGJ1dCByYXRoZXIgCi0v
LyBjb2xsZWN0aXZlbHkgZGVhbGxvY2F0ZWQgYXQgb25lIHRpbWUuCi0vLwotLy8gVGhpcyBzaW11
bHRhbmVvdXNseQotLy8KLS8vICogTWFrZXMgZWFjaCBpbmRpdmlkdWFsIGFsbG9jYXRpb24gbXVj
aCBtb3JlIGVmZmljaWVudDsgdGhlCi0vLyAgICAgdHlwaWNhbCBhbGxvY2F0aW9uIGlzIHRyaXZp
YWwuCi0vLyAqIENvbXBsZXRlbHkgYXZvaWRzIHRoZSBjb3N0IG9mIGRvaW5nIGluZGl2aWR1YWwg
ZGVhbGxvY2F0aW9uLgotLy8gKiBTYXZlcyB0aGUgdHJvdWJsZSBvZiB0cmFja2luZyBkb3duIGFu
ZCBwbHVnZ2luZyBhIGxhcmdlIGNsYXNzIG9mIGxlYWtzLgotLy8KLS8vIEluZGl2aWR1YWwgY2xh
c3NlcyBjYW4gdXNlIHRoaXMgYWxsb2NhdG9yIGJ5IHN1cHBseWluZyB0aGVpciBvd24KLS8vIG5l
dyBhbmQgZGVsZXRlIG1ldGhvZHMuCi0vLwotLy8gU1RMIGNvbnRhaW5lcnMgY2FuIHVzZSB0aGlz
IGFsbG9jYXRvciBieSB1c2luZyB0aGUgcG9vbF9hbGxvY2F0b3IKLS8vIGNsYXNzIGFzIHRoZSBh
bGxvY2F0b3IgKHNlY29uZCkgdGVtcGxhdGUgYXJndW1lbnQuCi0vLwotCi0jaW5jbHVkZSA8c3Rk
ZGVmLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0vLyBJZiB3
ZSBhcmUgdXNpbmcgZ3VhcmQgYmxvY2tzLCB3ZSBtdXN0IHRyYWNrIGVhY2ggaW5kaXZ1YWwKLS8v
IGFsbG9jYXRpb24uICBJZiB3ZSBhcmVuJ3QgdXNpbmcgZ3VhcmQgYmxvY2tzLCB0aGVzZQotLy8g
bmV2ZXIgZ2V0IGluc3RhbnRpYXRlZCwgc28gd29uJ3QgaGF2ZSBhbnkgaW1wYWN0LgotLy8gCi0K
LWNsYXNzIFRBbGxvY2F0aW9uIHsKLXB1YmxpYzoKLSAgICBUQWxsb2NhdGlvbihzaXplX3Qgc2l6
ZSwgdW5zaWduZWQgY2hhciogbWVtLCBUQWxsb2NhdGlvbiogcHJldiA9IDApIDoKLSAgICAgICAg
c2l6ZShzaXplKSwgbWVtKG1lbSksIHByZXZBbGxvYyhwcmV2KSB7Ci0gICAgICAgIC8vIEFsbG9j
YXRpb25zIGFyZSBicmFja2V0ZWQ6Ci0gICAgICAgIC8vICAgIFthbGxvY2F0aW9uSGVhZGVyXVtp
bml0aWFsR3VhcmRCbG9ja11bdXNlckRhdGFdW2ZpbmFsR3VhcmRCbG9ja10KLSAgICAgICAgLy8g
VGhpcyB3b3VsZCBiZSBjbGVhbmVyIHdpdGggaWYgKGd1YXJkQmxvY2tTaXplKS4uLiwgYnV0IHRo
YXQKLSAgICAgICAgLy8gbWFrZXMgdGhlIGNvbXBpbGVyIHByaW50IHdhcm5pbmdzIGFib3V0IDAg
bGVuZ3RoIG1lbXNldHMsCi0gICAgICAgIC8vIGV2ZW4gd2l0aCB0aGUgaWYoKSBwcm90ZWN0aW5n
IHRoZW0uCi0jaWZkZWYgR1VBUkRfQkxPQ0tTCi0gICAgICAgIG1lbXNldChwcmVHdWFyZCgpLCBn
dWFyZEJsb2NrQmVnaW5WYWwsIGd1YXJkQmxvY2tTaXplKTsKLSAgICAgICAgbWVtc2V0KGRhdGEo
KSwgICAgICB1c2VyRGF0YUZpbGwsICAgICAgIHNpemUpOwotICAgICAgICBtZW1zZXQocG9zdEd1
YXJkKCksIGd1YXJkQmxvY2tFbmRWYWwsICAgZ3VhcmRCbG9ja1NpemUpOwotI2VuZGlmCi0gICAg
fQotCi0gICAgdm9pZCBjaGVjaygpIGNvbnN0IHsKLSAgICAgICAgY2hlY2tHdWFyZEJsb2NrKHBy
ZUd1YXJkKCksICBndWFyZEJsb2NrQmVnaW5WYWwsICJiZWZvcmUiKTsKLSAgICAgICAgY2hlY2tH
dWFyZEJsb2NrKHBvc3RHdWFyZCgpLCBndWFyZEJsb2NrRW5kVmFsLCAgICJhZnRlciIpOwotICAg
IH0KLQotICAgIHZvaWQgY2hlY2tBbGxvY0xpc3QoKSBjb25zdDsKLQotICAgIC8vIFJldHVybiB0
b3RhbCBzaXplIG5lZWRlZCB0byBhY2NvbW9kYXRlIHVzZXIgYnVmZmVyIG9mICdzaXplJywKLSAg
ICAvLyBwbHVzIG91ciB0cmFja2luZyBkYXRhLgotICAgIGlubGluZSBzdGF0aWMgc2l6ZV90IGFs
bG9jYXRpb25TaXplKHNpemVfdCBzaXplKSB7Ci0gICAgICAgIHJldHVybiBzaXplICsgMiAqIGd1
YXJkQmxvY2tTaXplICsgaGVhZGVyU2l6ZSgpOwotICAgIH0KLQotICAgIC8vIE9mZnNldCBmcm9t
IHN1cnJvdW5kaW5nIGJ1ZmZlciB0byBnZXQgdG8gdXNlciBkYXRhIGJ1ZmZlci4KLSAgICBpbmxp
bmUgc3RhdGljIHVuc2lnbmVkIGNoYXIqIG9mZnNldEFsbG9jYXRpb24odW5zaWduZWQgY2hhciog
bSkgewotICAgICAgICByZXR1cm4gbSArIGd1YXJkQmxvY2tTaXplICsgaGVhZGVyU2l6ZSgpOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICB2b2lkIGNoZWNrR3VhcmRCbG9jayh1bnNpZ25lZCBjaGFy
KiBibG9ja01lbSwgdW5zaWduZWQgY2hhciB2YWwsIGNvbnN0IGNoYXIqIGxvY1RleHQpIGNvbnN0
OwotCi0gICAgLy8gRmluZCBvZmZzZXRzIHRvIHByZSBhbmQgcG9zdCBndWFyZCBibG9ja3MsIGFu
ZCB1c2VyIGRhdGEgYnVmZmVyCi0gICAgdW5zaWduZWQgY2hhciogcHJlR3VhcmQoKSAgY29uc3Qg
eyByZXR1cm4gbWVtICsgaGVhZGVyU2l6ZSgpOyB9Ci0gICAgdW5zaWduZWQgY2hhciogZGF0YSgp
ICAgICAgY29uc3QgeyByZXR1cm4gcHJlR3VhcmQoKSArIGd1YXJkQmxvY2tTaXplOyB9Ci0gICAg
dW5zaWduZWQgY2hhciogcG9zdEd1YXJkKCkgY29uc3QgeyByZXR1cm4gZGF0YSgpICsgc2l6ZTsg
fQotCi0gICAgc2l6ZV90IHNpemU7ICAgICAgICAgICAgICAgICAgLy8gc2l6ZSBvZiB0aGUgdXNl
ciBkYXRhIGFyZWEKLSAgICB1bnNpZ25lZCBjaGFyKiBtZW07ICAgICAgICAgICAvLyBiZWdpbm5p
bmcgb2Ygb3VyIGFsbG9jYXRpb24gKHB0cyB0byBoZWFkZXIpCi0gICAgVEFsbG9jYXRpb24qIHBy
ZXZBbGxvYzsgICAgICAgLy8gcHJpb3IgYWxsb2NhdGlvbiBpbiB0aGUgY2hhaW4KLQotICAgIC8v
IFN1cHBvcnQgTVNWQysrIDYuMAotICAgIGNvbnN0IHN0YXRpYyB1bnNpZ25lZCBjaGFyIGd1YXJk
QmxvY2tCZWdpblZhbDsKLSAgICBjb25zdCBzdGF0aWMgdW5zaWduZWQgY2hhciBndWFyZEJsb2Nr
RW5kVmFsOwotICAgIGNvbnN0IHN0YXRpYyB1bnNpZ25lZCBjaGFyIHVzZXJEYXRhRmlsbDsKLQot
ICAgIGNvbnN0IHN0YXRpYyBzaXplX3QgZ3VhcmRCbG9ja1NpemU7Ci0jaWZkZWYgR1VBUkRfQkxP
Q0tTCi0gICAgaW5saW5lIHN0YXRpYyBzaXplX3QgaGVhZGVyU2l6ZSgpIHsgcmV0dXJuIHNpemVv
ZihUQWxsb2NhdGlvbik7IH0KLSNlbHNlCi0gICAgaW5saW5lIHN0YXRpYyBzaXplX3QgaGVhZGVy
U2l6ZSgpIHsgcmV0dXJuIDA7IH0KLSNlbmRpZgotfTsKLQotLy8KLS8vIFRoZXJlIGFyZSBzZXZl
cmFsIHN0YWNrcy4gIE9uZSBpcyB0byB0cmFjayB0aGUgcHVzaGluZyBhbmQgcG9wcGluZwotLy8g
b2YgdGhlIHVzZXIsIGFuZCBub3QgeWV0IGltcGxlbWVudGVkLiAgVGhlIG90aGVycyBhcmUgc2lt
cGx5IGEgCi0vLyByZXBvc2l0b3JpZXMgb2YgZnJlZSBwYWdlcyBvciB1c2VkIHBhZ2VzLgotLy8K
LS8vIFBhZ2Ugc3RhY2tzIGFyZSBsaW5rZWQgdG9nZXRoZXIgd2l0aCBhIHNpbXBsZSBoZWFkZXIg
YXQgdGhlIGJlZ2lubmluZwotLy8gb2YgZWFjaCBhbGxvY2F0aW9uIG9idGFpbmVkIGZyb20gdGhl
IHVuZGVybHlpbmcgT1MuICBNdWx0aS1wYWdlIGFsbG9jYXRpb25zCi0vLyBhcmUgcmV0dXJuZWQg
dG8gdGhlIE9TLiAgSW5kaXZpZHVhbCBwYWdlIGFsbG9jYXRpb25zIGFyZSBrZXB0IGZvciBmdXR1
cmUKLS8vIHJlLXVzZS4KLS8vCi0vLyBUaGUgInBhZ2Ugc2l6ZSIgdXNlZCBpcyBub3QsIG5vciBt
dXN0IGl0IG1hdGNoLCB0aGUgdW5kZXJseWluZyBPUwotLy8gcGFnZSBzaXplLiAgQnV0LCBoYXZp
bmcgaXQgYmUgYWJvdXQgdGhhdCBzaXplIG9yIGVxdWFsIHRvIGEgc2V0IG9mIAotLy8gcGFnZXMg
aXMgbGlrZWx5IG1vc3Qgb3B0aW1hbC4KLS8vCi1jbGFzcyBUUG9vbEFsbG9jYXRvciB7Ci1wdWJs
aWM6Ci0gICAgVFBvb2xBbGxvY2F0b3IoaW50IGdyb3d0aEluY3JlbWVudCA9IDgqMTAyNCwgaW50
IGFsbG9jYXRpb25BbGlnbm1lbnQgPSAxNik7Ci0KLSAgICAvLwotICAgIC8vIERvbid0IGNhbGwg
dGhlIGRlc3RydWN0b3IganVzdCB0byBmcmVlIHVwIHRoZSBtZW1vcnksIGNhbGwgcG9wKCkKLSAg
ICAvLwotICAgIH5UUG9vbEFsbG9jYXRvcigpOwotCi0gICAgLy8KLSAgICAvLyBDYWxsIHB1c2go
KSB0byBlc3RhYmxpc2ggYSBuZXcgcGxhY2UgdG8gcG9wIG1lbW9yeSB0b28uICBEb2VzIG5vdAot
ICAgIC8vIGhhdmUgdG8gYmUgY2FsbGVkIHRvIGdldCB0aGluZ3Mgc3RhcnRlZC4KLSAgICAvLwot
ICAgIHZvaWQgcHVzaCgpOwotCi0gICAgLy8KLSAgICAvLyBDYWxsIHBvcCgpIHRvIGZyZWUgYWxs
IG1lbW9yeSBhbGxvY2F0ZWQgc2luY2UgdGhlIGxhc3QgY2FsbCB0byBwdXNoKCksCi0gICAgLy8g
b3IgaWYgbm8gbGFzdCBjYWxsIHRvIHB1c2gsIGZyZWVzIGFsbCBtZW1vcnkgc2luY2UgZmlyc3Qg
YWxsb2NhdGlvbi4KLSAgICAvLwotICAgIHZvaWQgcG9wKCk7Ci0KLSAgICAvLwotICAgIC8vIENh
bGwgcG9wQWxsKCkgdG8gZnJlZSBhbGwgbWVtb3J5IGFsbG9jYXRlZC4KLSAgICAvLwotICAgIHZv
aWQgcG9wQWxsKCk7Ci0KLSAgICAvLwotICAgIC8vIENhbGwgYWxsb2NhdGUoKSB0byBhY3R1YWxs
eSBhY3F1aXJlIG1lbW9yeS4gIFJldHVybnMgMCBpZiBubyBtZW1vcnkKLSAgICAvLyBhdmFpbGFi
bGUsIG90aGVyd2lzZSBhIHByb3Blcmx5IGFsaWduZWQgcG9pbnRlciB0byAnbnVtQnl0ZXMnIG9m
IG1lbW9yeS4KLSAgICAvLwotICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBudW1CeXRlcyk7Ci0K
LSAgICAvLwotICAgIC8vIFRoZXJlIGlzIG5vIGRlYWxsb2NhdGUuICBUaGUgcG9pbnQgb2YgdGhp
cyBjbGFzcyBpcyB0aGF0Ci0gICAgLy8gZGVhbGxvY2F0aW9uIGNhbiBiZSBza2lwcGVkIGJ5IHRo
ZSB1c2VyIG9mIGl0LCBhcyB0aGUgbW9kZWwKLSAgICAvLyBvZiB1c2UgaXMgdG8gc2ltdWx0YW5l
b3VzbHkgZGVhbGxvY2F0ZSBldmVyeXRoaW5nIGF0IG9uY2UKLSAgICAvLyBieSBjYWxsaW5nIHBv
cCgpLCBhbmQgdG8gbm90IGhhdmUgdG8gc29sdmUgbWVtb3J5IGxlYWsgcHJvYmxlbXMuCi0gICAg
Ly8KLQotcHJvdGVjdGVkOgotICAgIGZyaWVuZCBzdHJ1Y3QgdEhlYWRlcjsKLSAgICAKLSAgICBz
dHJ1Y3QgdEhlYWRlciB7Ci0gICAgICAgIHRIZWFkZXIodEhlYWRlciogbmV4dFBhZ2UsIHNpemVf
dCBwYWdlQ291bnQpIDoKLSAgICAgICAgICAgIG5leHRQYWdlKG5leHRQYWdlKSwKLSAgICAgICAg
ICAgIHBhZ2VDb3VudChwYWdlQ291bnQpCi0jaWZkZWYgR1VBUkRfQkxPQ0tTCi0gICAgICAgICAg
LCBsYXN0QWxsb2NhdGlvbigwKQotI2VuZGlmCi0gICAgICAgICAgICB7IH0KLQotICAgICAgICB+
dEhlYWRlcigpIHsKLSNpZmRlZiBHVUFSRF9CTE9DS1MKLSAgICAgICAgICAgIGlmIChsYXN0QWxs
b2NhdGlvbikKLSAgICAgICAgICAgICAgICBsYXN0QWxsb2NhdGlvbi0+Y2hlY2tBbGxvY0xpc3Qo
KTsKLSNlbmRpZgotICAgICAgICB9Ci0KLSAgICAgICAgdEhlYWRlciogbmV4dFBhZ2U7Ci0gICAg
ICAgIHNpemVfdCBwYWdlQ291bnQ7Ci0jaWZkZWYgR1VBUkRfQkxPQ0tTCi0gICAgICAgIFRBbGxv
Y2F0aW9uKiBsYXN0QWxsb2NhdGlvbjsKLSNlbmRpZgotICAgIH07Ci0KLSAgICBzdHJ1Y3QgdEFs
bG9jU3RhdGUgewotICAgICAgICBzaXplX3Qgb2Zmc2V0OwotICAgICAgICB0SGVhZGVyKiBwYWdl
OwotICAgIH07Ci0gICAgdHlwZWRlZiBzdGQ6OnZlY3Rvcjx0QWxsb2NTdGF0ZT4gdEFsbG9jU3Rh
Y2s7Ci0KLSAgICAvLyBUcmFjayBhbGxvY2F0aW9ucyBpZiBhbmQgb25seSBpZiB3ZSdyZSB1c2lu
ZyBndWFyZCBibG9ja3MKLSAgICB2b2lkKiBpbml0aWFsaXplQWxsb2NhdGlvbih0SGVhZGVyKiBi
bG9jaywgdW5zaWduZWQgY2hhciogbWVtb3J5LCBzaXplX3QgbnVtQnl0ZXMpIHsKLSNpZmRlZiBH
VUFSRF9CTE9DS1MKLSAgICAgICAgbmV3KG1lbW9yeSkgVEFsbG9jYXRpb24obnVtQnl0ZXMsIG1l
bW9yeSwgYmxvY2stPmxhc3RBbGxvY2F0aW9uKTsKLSAgICAgICAgYmxvY2stPmxhc3RBbGxvY2F0
aW9uID0gcmVpbnRlcnByZXRfY2FzdDxUQWxsb2NhdGlvbio+KG1lbW9yeSk7Ci0jZW5kaWYKLSAg
ICAgICAgLy8gVGhpcyBpcyBvcHRpbWl6ZWQgZW50aXJlbHkgYXdheSBpZiBHVUFSRF9CTE9DS1Mg
aXMgbm90IGRlZmluZWQuCi0gICAgICAgIHJldHVybiBUQWxsb2NhdGlvbjo6b2Zmc2V0QWxsb2Nh
dGlvbihtZW1vcnkpOwotICAgIH0KLQotICAgIHNpemVfdCBwYWdlU2l6ZTsgICAgICAgIC8vIGdy
YW51bGFyaXR5IG9mIGFsbG9jYXRpb24gZnJvbSB0aGUgT1MKLSAgICBzaXplX3QgYWxpZ25tZW50
OyAgICAgICAvLyBhbGwgcmV0dXJuZWQgYWxsb2NhdGlvbnMgd2lsbCBiZSBhbGlnbmVkIGF0IAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgZ3JhbnVsYXJpdHksIHdoaWNoIHdp
bGwgYmUgYSBwb3dlciBvZiAyCi0gICAgc2l6ZV90IGFsaWdubWVudE1hc2s7Ci0gICAgc2l6ZV90
IGhlYWRlclNraXA7ICAgICAgLy8gYW1vdW50IG9mIG1lbW9yeSB0byBza2lwIHRvIG1ha2Ugcm9v
bSBmb3IgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBoZWFkZXIgKGJh
c2ljYWxseSwgc2l6ZSBvZiBoZWFkZXIsIHJvdW5kZWQKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgIHVwIHRvIG1ha2UgaXQgYWxpZ25lZAotICAgIHNpemVfdCBjdXJyZW50UGFn
ZU9mZnNldDsgIC8vIG5leHQgb2Zmc2V0IGluIHRvcCBvZiBpblVzZUxpc3QgdG8gYWxsb2NhdGUg
ZnJvbQotICAgIHRIZWFkZXIqIGZyZWVMaXN0OyAgICAgIC8vIGxpc3Qgb2YgcG9wcGVkIG1lbW9y
eQotICAgIHRIZWFkZXIqIGluVXNlTGlzdDsgICAgIC8vIGxpc3Qgb2YgYWxsIG1lbW9yeSBjdXJy
ZW50bHkgYmVpbmcgdXNlZAotICAgIHRBbGxvY1N0YWNrIHN0YWNrOyAgICAgIC8vIHN0YWNrIG9m
IHdoZXJlIHRvIGFsbG9jYXRlIGZyb20sIHRvIHBhcnRpdGlvbiBwb29sCi0KLSAgICBpbnQgbnVt
Q2FsbHM7ICAgICAgICAgICAvLyBqdXN0IGFuIGludGVyZXN0aW5nIHN0YXRpc3RpYwotICAgIHNp
emVfdCB0b3RhbEJ5dGVzOyAgICAgIC8vIGp1c3QgYW4gaW50ZXJlc3Rpbmcgc3RhdGlzdGljCi1w
cml2YXRlOgotICAgIFRQb29sQWxsb2NhdG9yJiBvcGVyYXRvcj0oY29uc3QgVFBvb2xBbGxvY2F0
b3ImKTsgIC8vIGRvbnQgYWxsb3cgYXNzaWdubWVudCBvcGVyYXRvcgotICAgIFRQb29sQWxsb2Nh
dG9yKGNvbnN0IFRQb29sQWxsb2NhdG9yJik7ICAvLyBkb250IGFsbG93IGRlZmF1bHQgY29weSBj
b25zdHJ1Y3RvcgotfTsKLQotCi0vLwotLy8gVGhlcmUgY291bGQgcG90ZW50aWFsbHkgYmUgbWFu
eSBwb29scyB3aXRoIHBvcHMgaGFwcGVuaW5nIGF0Ci0vLyBkaWZmZXJlbnQgdGltZXMuICBCdXQg
YSBzaW1wbGUgdXNlIGlzIHRvIGhhdmUgYSBnbG9iYWwgcG9wCi0vLyB3aXRoIGV2ZXJ5b25lIHVz
aW5nIHRoZSBzYW1lIGdsb2JhbCBhbGxvY2F0b3IuCi0vLwotZXh0ZXJuIFRQb29sQWxsb2NhdG9y
KiBHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCk7Ci1leHRlcm4gdm9pZCBTZXRHbG9iYWxQb29sQWxs
b2NhdG9yKFRQb29sQWxsb2NhdG9yKiBwb29sQWxsb2NhdG9yKTsKLQotLy8KLS8vIFRoaXMgU1RM
IGNvbXBhdGlibGUgYWxsb2NhdG9yIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYXMgdGhlIGFsbG9j
YXRvcgotLy8gcGFyYW1ldGVyIHRvIHRlbXBsYXRpemVkIFNUTCBjb250YWluZXJzLCBsaWtlIHZl
Y3RvciBhbmQgbWFwLgotLy8KLS8vIEl0IHdpbGwgdXNlIHRoZSBwb29scyBmb3IgYWxsb2NhdGlv
biwgYW5kIG5vdAotLy8gZG8gYW55IGRlYWxsb2NhdGlvbiwgYnV0IHdpbGwgc3RpbGwgZG8gZGVz
dHJ1Y3Rpb24uCi0vLwotdGVtcGxhdGU8Y2xhc3MgVD4KLWNsYXNzIHBvb2xfYWxsb2NhdG9yIHsK
LXB1YmxpYzoKLSAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7Ci0gICAgdHlwZWRlZiBwdHJk
aWZmX3QgZGlmZmVyZW5jZV90eXBlOwotICAgIHR5cGVkZWYgVCogcG9pbnRlcjsKLSAgICB0eXBl
ZGVmIGNvbnN0IFQqIGNvbnN0X3BvaW50ZXI7Ci0gICAgdHlwZWRlZiBUJiByZWZlcmVuY2U7Ci0g
ICAgdHlwZWRlZiBjb25zdCBUJiBjb25zdF9yZWZlcmVuY2U7Ci0gICAgdHlwZWRlZiBUIHZhbHVl
X3R5cGU7Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBPdGhlcj4gCi0gICAgc3RydWN0IHJlYmluZCB7
Ci0gICAgICAgIHR5cGVkZWYgcG9vbF9hbGxvY2F0b3I8T3RoZXI+IG90aGVyOwotICAgIH07Ci0g
ICAgcG9pbnRlciBhZGRyZXNzKHJlZmVyZW5jZSB4KSBjb25zdCB7IHJldHVybiAmeDsgfQotICAg
IGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgeCkgY29uc3QgeyByZXR1cm4g
Jng7IH0KLQotICAgIHBvb2xfYWxsb2NhdG9yKCkgOiBhbGxvY2F0b3IoR2V0R2xvYmFsUG9vbEFs
bG9jYXRvcigpKSB7IH0KLSAgICBwb29sX2FsbG9jYXRvcihUUG9vbEFsbG9jYXRvciYgYSkgOiBh
bGxvY2F0b3IoJmEpIHsgfQotICAgIHBvb2xfYWxsb2NhdG9yKGNvbnN0IHBvb2xfYWxsb2NhdG9y
PFQ+JiBwKSA6IGFsbG9jYXRvcihwLmFsbG9jYXRvcikgeyB9Ci0KLSAgICB0ZW1wbGF0ZSA8Y2xh
c3MgT3RoZXI+Ci0gICAgcG9vbF9hbGxvY2F0b3I8VD4mIG9wZXJhdG9yPShjb25zdCBwb29sX2Fs
bG9jYXRvcjxPdGhlcj4mIHApIHsKLSAgICAgIGFsbG9jYXRvciA9IHAuYWxsb2NhdG9yOwotICAg
ICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIHRlbXBsYXRlPGNsYXNzIE90aGVyPgotICAg
IHBvb2xfYWxsb2NhdG9yKGNvbnN0IHBvb2xfYWxsb2NhdG9yPE90aGVyPiYgcCkgOiBhbGxvY2F0
b3IoJnAuZ2V0QWxsb2NhdG9yKCkpIHsgfQotCi0jaWYgZGVmaW5lZChfX1NVTlBST19DQykgJiYg
IWRlZmluZWQoX1JXU1REX0FMTE9DQVRPUikKLSAgICAvLyBsaWJDU3RkIG9uIHNvbWUgcGxhdGZv
cm1zIGhhdmUgYSBkaWZmZXJlbnQgYWxsb2NhdGUvZGVhbGxvY2F0ZSBpbnRlcmZhY2UuCi0gICAg
Ly8gQ2FsbGVyIHByZS1iYWtlcyBzaXplb2YoVCkgaW50byAnbicgd2hpY2ggaXMgdGhlIG51bWJl
ciBvZiBieXRlcyB0byBiZQotICAgIC8vIGFsbG9jYXRlZCwgbm90IHRoZSBudW1iZXIgb2YgZWxl
bWVudHMuCi0gICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90eXBlIG4pIHsgCi0gICAgICAgIHJldHVy
biBnZXRBbGxvY2F0b3IoKS5hbGxvY2F0ZShuKTsKLSAgICB9Ci0gICAgdm9pZCogYWxsb2NhdGUo
c2l6ZV90eXBlIG4sIGNvbnN0IHZvaWQqKSB7Ci0gICAgICAgIHJldHVybiBnZXRBbGxvY2F0b3Io
KS5hbGxvY2F0ZShuKTsKLSAgICB9Ci0gICAgdm9pZCBkZWFsbG9jYXRlKHZvaWQqLCBzaXplX3R5
cGUpIHt9Ci0jZWxzZQotICAgIHBvaW50ZXIgYWxsb2NhdGUoc2l6ZV90eXBlIG4pIHsgCi0gICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHBvaW50ZXI+KGdldEFsbG9jYXRvcigpLmFsbG9j
YXRlKG4gKiBzaXplb2YoVCkpKTsKLSAgICB9Ci0gICAgcG9pbnRlciBhbGxvY2F0ZShzaXplX3R5
cGUgbiwgY29uc3Qgdm9pZCopIHsgCi0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHBv
aW50ZXI+KGdldEFsbG9jYXRvcigpLmFsbG9jYXRlKG4gKiBzaXplb2YoVCkpKTsKLSAgICB9Ci0g
ICAgdm9pZCBkZWFsbG9jYXRlKHBvaW50ZXIsIHNpemVfdHlwZSkge30KLSNlbmRpZiAgLy8gX1JX
U1REX0FMTE9DQVRPUgotCi0gICAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBwLCBjb25zdCBUJiB2
YWwpIHsgbmV3ICgodm9pZCAqKXApIFQodmFsKTsgfQotICAgIHZvaWQgZGVzdHJveShwb2ludGVy
IHApIHsgcC0+VDo6flQoKTsgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHBvb2xfYWxs
b2NhdG9yJiByaHMpIGNvbnN0IHsgcmV0dXJuICZnZXRBbGxvY2F0b3IoKSA9PSAmcmhzLmdldEFs
bG9jYXRvcigpOyB9Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHBvb2xfYWxsb2NhdG9yJiBy
aHMpIGNvbnN0IHsgcmV0dXJuICZnZXRBbGxvY2F0b3IoKSAhPSAmcmhzLmdldEFsbG9jYXRvcigp
OyB9Ci0KLSAgICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxzaXplX3R5cGU+KC0xKSAvIHNpemVvZihUKTsgfQotICAgIHNpemVfdHlwZSBtYXhfc2l6ZShp
bnQgc2l6ZSkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPigtMSkgLyBzaXpl
OyB9Ci0KLSAgICB2b2lkIHNldEFsbG9jYXRvcihUUG9vbEFsbG9jYXRvciogYSkgeyBhbGxvY2F0
b3IgPSBhOyB9Ci0gICAgVFBvb2xBbGxvY2F0b3ImIGdldEFsbG9jYXRvcigpIGNvbnN0IHsgcmV0
dXJuICphbGxvY2F0b3I7IH0KLQotcHJvdGVjdGVkOgotICAgIFRQb29sQWxsb2NhdG9yKiBhbGxv
Y2F0b3I7Ci19OwotCi0jZW5kaWYgLy8gX1BPT0xBTExPQ19JTkNMVURFRF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QcmFnbWEuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QcmFnbWEuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMmY3NDQxMjNiODI4OTQ5OGMzMTc5MTRlYWQzZGYxMzYzYWU4NjE2Yi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUHJhZ21hLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOSAr
MCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9QUkFHTUFfSF8KLSNkZWZp
bmUgQ09NUElMRVJfUFJBR01BX0hfCi0KLXN0cnVjdCBUUHJhZ21hIHsKLSAgICAvLyBCeSBkZWZh
dWx0IG9wdGltaXphdGlvbiBpcyB0dXJuZWQgb24gYW5kIGRlYnVnIGlzIHR1cm5lZCBvZmYuCi0g
ICAgVFByYWdtYSgpIDogb3B0aW1pemUodHJ1ZSksIGRlYnVnKGZhbHNlKSB7IH0KLSAgICBUUHJh
Z21hKGJvb2wgbywgYm9vbCBkKSA6IG9wdGltaXplKG8pLCBkZWJ1ZyhkKSB7IH0KLQotICAgIGJv
b2wgb3B0aW1pemU7Ci0gICAgYm9vbCBkZWJ1ZzsKLX07Ci0KLSNlbmRpZiAvLyBDT01QSUxFUl9Q
UkFHTUFfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9RdWFsaWZpZXJBbGl2ZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvUXVhbGlmaWVyQWxpdmUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmE2
ODc0ZWI3YmU3Y2IwZTdmZmNjZDU5ZWFkYmMwYjU0Nzg0OGMzLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9RdWFsaWZpZXJBbGl2ZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBA
Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgi
Ci0KLWNsYXNzIFRBbGl2ZVRyYXZlcnNlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKLXB1
YmxpYzoKLSAgICBUQWxpdmVUcmF2ZXJzZXIoVFF1YWxpZmllciBxKSA6IFRJbnRlcm1UcmF2ZXJz
ZXIodHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKSwgZm91bmQoZmFsc2UpLCBxdWFsaWZpZXIocSkK
LSAgICB7Ci0gICAgfQotCi0JYm9vbCB3YXNGb3VuZCgpIHsgcmV0dXJuIGZvdW5kOyB9Ci0KLXBy
b3RlY3RlZDoKLSAgICBib29sIGZvdW5kOwotICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyOwotCi0g
ICAgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7Ci0gICAgYm9vbCB2aXNpdFNlbGVj
dGlvbihWaXNpdCwgVEludGVybVNlbGVjdGlvbiopOwotfTsKLQotLy8KLS8vIFJlcG9ydCB3aGV0
aGVyIG9yIG5vdCBhIHZhcmlhYmxlIG9mIHRoZSBnaXZlbiBxdWFsaWZpZXIgdHlwZQotLy8gaXMg
Z3VhcmFudGVlZCB3cml0dGVuLiAgTm90IGFsd2F5cyBwb3NzaWJsZSB0byBkZXRlcm1pbmUgaWYK
LS8vIGl0IGlzIHdyaXR0ZW4gY29uZGl0aW9uYWxseS4KLS8vCi0vLyA/PyBJdCBkb2VzIG5vdCBk
byB0aGlzIHdlbGwgeWV0LCB0aGlzIGlzIGp1c3QgYSBwbGFjZSBob2xkZXIKLS8vIHRoYXQgc2lt
cGx5IGRldGVybWluZXMgaWYgaXQgd2FzIHJlZmVyZW5jZSBhdCBhbGwsIGFueXdoZXJlLgotLy8K
LWJvb2wgUXVhbGlmaWVyV3JpdHRlbihUSW50ZXJtTm9kZSogbm9kZSwgVFF1YWxpZmllciBxdWFs
aWZpZXIpCi17Ci0gICAgVEFsaXZlVHJhdmVyc2VyIGl0KHF1YWxpZmllcik7Ci0KLSAgICBpZiAo
bm9kZSkKLSAgICAgICAgbm9kZS0+dHJhdmVyc2UoJml0KTsKLQotICAgIHJldHVybiBpdC53YXNG
b3VuZCgpOwotfQotCi12b2lkIFRBbGl2ZVRyYXZlcnNlcjo6dmlzaXRTeW1ib2woVEludGVybVN5
bWJvbCogbm9kZSkKLXsKLSAgICAvLwotICAgIC8vIElmIGl0J3Mgd2hhdCB3ZSdyZSBsb29raW5n
IGZvciwgcmVjb3JkIGl0LgotICAgIC8vCi0gICAgaWYgKG5vZGUtPmdldFF1YWxpZmllcigpID09
IHF1YWxpZmllcikKLSAgICAgICAgZm91bmQgPSB0cnVlOwotfQotCi1ib29sIFRBbGl2ZVRyYXZl
cnNlcjo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgcHJlVmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qIG5v
ZGUpCi17Ci0gICAgaWYgKHdhc0ZvdW5kKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IHJldHVybiB0cnVlOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvUXVhbGlmaWVyQWxpdmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ODcyYTA2ZjcyMTkyYWYxZDM3OGY3MmQxZWEyMTBkYWU4OTliYmY0Yi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvUXVhbGlmaWVyQWxpdmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBA
QAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotYm9vbCBRdWFsaWZpZXJXcml0dGVuKFRJbnRlcm1Ob2Rl
KiByb290LCBUUXVhbGlmaWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9SZW1vdmVUcmVlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YTRiOGMxZTYzZTFkYWUwNTlhNDE5ZTkyYzFiNzUyNDgwYTAxZDZkOC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBA
Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgi
Ci0jaW5jbHVkZSAiY29tcGlsZXIvUmVtb3ZlVHJlZS5oIgotCi0vLwotLy8gQ29kZSB0byByZWN1
cnNpdmVseSBkZWxldGUgdGhlIGludGVybWVkaWF0ZSB0cmVlLgotLy8KLQotY2xhc3MgUmVtb3Zl
VHJlZSA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCi17Ci1wdWJsaWM6Ci0JUmVtb3ZlVHJlZSgp
IDogVEludGVybVRyYXZlcnNlcihmYWxzZSwgZmFsc2UsIHRydWUpCi0JewotCX0KLQotcHJvdGVj
dGVkOgotCXZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOwotCXZvaWQgdmlzaXRDb25z
dGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKik7Ci0JYm9vbCB2aXNpdEJpbmFyeShWaXNp
dCB2aXNpdCwgVEludGVybUJpbmFyeSopOwotCWJvb2wgdmlzaXRVbmFyeShWaXNpdCB2aXNpdCwg
VEludGVybVVuYXJ5Kik7Ci0JYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVy
bVNlbGVjdGlvbiopOwotCWJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1B
Z2dyZWdhdGUqKTsKLX07Ci0KLXZvaWQgUmVtb3ZlVHJlZTo6dmlzaXRTeW1ib2woVEludGVybVN5
bWJvbCogbm9kZSkKLXsKLQlkZWxldGUgbm9kZTsKLX0KLQotYm9vbCBSZW1vdmVUcmVlOjp2aXNp
dEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSogbm9kZSkKLXsKLQlkZWxldGUgbm9k
ZTsKLQotCXJldHVybiB0cnVlOwotfQotCi1ib29sIFJlbW92ZVRyZWU6OnZpc2l0VW5hcnkoVmlz
aXQgdmlzaXQsIFRJbnRlcm1VbmFyeSogbm9kZSkKLXsKLSAgICBkZWxldGUgbm9kZTsKLQotCXJl
dHVybiB0cnVlOwotfQotCi1ib29sIFJlbW92ZVRyZWU6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZp
c2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQotewotCWRlbGV0ZSBub2RlOwotCi0JcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgUmVtb3ZlVHJlZTo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQs
IFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUpCi17Ci0JZGVsZXRlIG5vZGU7Ci0KLQlyZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBSZW1vdmVUcmVlOjp2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0
YW50VW5pb24qIG5vZGUpCi17Ci0JZGVsZXRlIG5vZGU7Ci19Ci0KLS8vCi0vLyBFbnRyeSBwb2lu
dC4KLS8vCi12b2lkIFJlbW92ZUFsbFRyZWVOb2RlcyhUSW50ZXJtTm9kZSogcm9vdCkKLXsKLSAg
ICBSZW1vdmVUcmVlIGl0OwotCi0gICAgcm9vdC0+dHJhdmVyc2UoJml0KTsKLX0KLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3YTgyMTY3OWMyM2ZiOTI4MGIzZWRmNGE3ZThmY2Jl
NDE1NjE0NjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuaAorKysgL2Rl
di9udWxsCkBAIC0xLDcgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotdm9pZCBSZW1vdmVB
bGxUcmVlTm9kZXMoVEludGVybU5vZGUqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9SZW5hbWVGdW5jdGlvbi5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDM5MDhiZmRkYjgyMDE3MzUzZjg3YjQ1ZDU1MDJhYjc0ZWY4MWEyN2IuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwzNiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9SRU5BTUVfRlVO
Q1RJT04KLSNkZWZpbmUgQ09NUElMRVJfUkVOQU1FX0ZVTkNUSU9OCi0KLSNpbmNsdWRlICJjb21w
aWxlci9pbnRlcm1lZGlhdGUuaCIKLQotLy8KLS8vIFJlbmFtZXMgYSBmdW5jdGlvbiwgaW5jbHVk
aW5nIGl0cyBkZWNsYXJhdGlvbiBhbmQgYW55IGNhbGxzIHRvIGl0LgotLy8KLWNsYXNzIFJlbmFt
ZUZ1bmN0aW9uIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKLXsKLXB1YmxpYzoKLSAgICBSZW5h
bWVGdW5jdGlvbihjb25zdCBUU3RyaW5nJiBvbGRGdW5jdGlvbk5hbWUsIGNvbnN0IFRTdHJpbmcm
IG5ld0Z1bmN0aW9uTmFtZSkKLSAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIGZh
bHNlKQotICAgICwgbU9sZEZ1bmN0aW9uTmFtZShvbGRGdW5jdGlvbk5hbWUpCi0gICAgLCBtTmV3
RnVuY3Rpb25OYW1lKG5ld0Z1bmN0aW9uTmFtZSkge30KLQotICAgIHZpcnR1YWwgYm9vbCB2aXNp
dEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKLSAgICB7Ci0g
ICAgICAgIFRPcGVyYXRvciBvcCA9IG5vZGUtPmdldE9wKCk7Ci0gICAgICAgIGlmICgob3AgPT0g
RU9wRnVuY3Rpb24gfHwgb3AgPT0gRU9wRnVuY3Rpb25DYWxsKSAmJiBub2RlLT5nZXROYW1lKCkg
PT0gbU9sZEZ1bmN0aW9uTmFtZSkKLSAgICAgICAgICAgIG5vZGUtPnNldE5hbWUobU5ld0Z1bmN0
aW9uTmFtZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBj
b25zdCBUU3RyaW5nIG1PbGRGdW5jdGlvbk5hbWU7Ci0gICAgY29uc3QgVFN0cmluZyBtTmV3RnVu
Y3Rpb25OYW1lOwotfTsKLQotI2VuZGlmICAvLyBDT01QSUxFUl9SRU5BTUVfRlVOQ1RJT04KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TZWFyY2hTeW1i
b2wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NlYXJjaFN5bWJv
bC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzNjhmMWE0ZmFmNzY0N2M0YjU5
ZDM0MmE3ODhmY2YwMDMyYzNlYjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NlYXJjaFN5
bWJvbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwotLy8gU2VhcmNoU3ltYm9sIGlzIGFuIEFTVCB0cmF2ZXJzZXIgdG8gZGV0ZWN0IHRoZSB1c2Ug
b2YgYSBnaXZlbiBzeW1ib2wgbmFtZQotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL1NlYXJjaFN5
bWJvbC5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKLSNpbmNsdWRlICJjb21w
aWxlci9PdXRwdXRITFNMLmgiCi0KLW5hbWVzcGFjZSBzaAotewotU2VhcmNoU3ltYm9sOjpTZWFy
Y2hTeW1ib2woY29uc3QgVFN0cmluZyAmc3ltYm9sKSA6IG1TeW1ib2woc3ltYm9sKQotewotICAg
IG1hdGNoID0gZmFsc2U7Ci19Ci0KLXZvaWQgU2VhcmNoU3ltYm9sOjp0cmF2ZXJzZShUSW50ZXJt
Tm9kZSAqbm9kZSkKLXsKLSAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKLX0KLQotdm9pZCBTZWFy
Y2hTeW1ib2w6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUpCi17Ci0gICAg
aWYgKHN5bWJvbE5vZGUtPmdldFN5bWJvbCgpID09IG1TeW1ib2wpCi0gICAgewotICAgICAgICBt
YXRjaCA9IHRydWU7Ci0gICAgfQotfQotCi1ib29sIFNlYXJjaFN5bWJvbDo6Zm91bmRNYXRjaCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1hdGNoOwotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NlYXJjaFN5bWJvbC5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NlYXJjaFN5bWJvbC5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAyMjRiYzc3YzZmMmRmZTMxYzczZWQ2OTM4NWIzM2M2ZTA1YmYwNDJlLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TZWFyY2hTeW1ib2wuaAorKysgL2Rldi9udWxsCkBA
IC0xLDMzICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQot
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0vLyBTZWFyY2hTeW1ib2wgaXMgYW4g
QVNUIHRyYXZlcnNlciB0byBkZXRlY3QgdGhlIHVzZSBvZiBhIGdpdmVuIHN5bWJvbCBuYW1lCi0v
LwotCi0jaWZuZGVmIENPTVBJTEVSX1NFQVJDSFNZTUJPTF9IXwotI2RlZmluZSBDT01QSUxFUl9T
RUFSQ0hTWU1CT0xfSF8KLQotI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotI2lu
Y2x1ZGUgImNvbXBpbGVyL1BhcnNlQ29udGV4dC5oIgotCi1uYW1lc3BhY2Ugc2gKLXsKLWNsYXNz
IFNlYXJjaFN5bWJvbCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCi17Ci0gIHB1YmxpYzoKLSAg
ICBTZWFyY2hTeW1ib2woY29uc3QgVFN0cmluZyAmc3ltYm9sKTsKLQotICAgIHZvaWQgdHJhdmVy
c2UoVEludGVybU5vZGUgKm5vZGUpOwotICAgIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJv
bCAqc3ltYm9sTm9kZSk7Ci0KLSAgICBib29sIGZvdW5kTWF0Y2goKSBjb25zdDsKLQotICBwcm90
ZWN0ZWQ6Ci0gICAgY29uc3QgVFN0cmluZyAmbVN5bWJvbDsKLSAgICBib29sIG1hdGNoOwotfTsK
LX0KLQotI2VuZGlmICAgLy8gQ09NUElMRVJfU0VBUkNIU1lNQk9MX0hfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAyMjFkMzMxZWE5ZGYxM2YwMDg4YzE4ZTc2YzkxZGJhZmZhNGVkNzQwLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTcwICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgX1NISEFORExFX0lOQ0xV
REVEXwotI2RlZmluZSBfU0hIQU5ETEVfSU5DTFVERURfCi0KLS8vCi0vLyBNYWNoaW5lIGluZGVw
ZW5kZW50IHBhcnQgb2YgdGhlIGNvbXBpbGVyIHByaXZhdGUgb2JqZWN0cwotLy8gc2VudCBhcyBT
aEhhbmRsZSB0byB0aGUgZHJpdmVyLgotLy8KLS8vIFRoaXMgc2hvdWxkIG5vdCBiZSBpbmNsdWRl
ZCBieSBkcml2ZXIgY29kZS4KLS8vCi0KLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIK
LQotI2luY2x1ZGUgImNvbXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmgiCi0jaW5jbHVk
ZSAiY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaCIKLSNpbmNsdWRlICJjb21waWxlci9IYXNo
TmFtZXMuaCIKLSNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgotI2luY2x1ZGUgImNvbXBp
bGVyL1N5bWJvbFRhYmxlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvVmFyaWFibGVJbmZvLmgiCi0j
aW5jbHVkZSAidGhpcmRfcGFydHkvY29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmgiCi0KLWNs
YXNzIExvbmdOYW1lTWFwOwotY2xhc3MgVENvbXBpbGVyOwotY2xhc3MgVERlcGVuZGVuY3lHcmFw
aDsKLWNsYXNzIFRyYW5zbGF0b3JITFNMOwotCi0vLwotLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGlk
ZW50aWZ5IHNwZWNzIHRoYXQgYXJlIGJhc2VkIG9uIHRoZSBXZWJHTCBzcGVjLAotLy8gbGlrZSB0
aGUgQ1NTIFNoYWRlcnMgc3BlYy4KLS8vCi1ib29sIGlzV2ViR0xCYXNlZFNwZWMoU2hTaGFkZXJT
cGVjIHNwZWMpOwotCi0vLwotLy8gVGhlIGJhc2UgY2xhc3MgdXNlZCB0byBiYWNrIGhhbmRsZXMg
cmV0dXJuZWQgdG8gdGhlIGRyaXZlci4KLS8vCi1jbGFzcyBUU2hIYW5kbGVCYXNlIHsKLXB1Ymxp
YzoKLSAgICBUU2hIYW5kbGVCYXNlKCk7Ci0gICAgdmlydHVhbCB+VFNoSGFuZGxlQmFzZSgpOwot
ICAgIHZpcnR1YWwgVENvbXBpbGVyKiBnZXRBc0NvbXBpbGVyKCkgeyByZXR1cm4gMDsgfQotICAg
IHZpcnR1YWwgVHJhbnNsYXRvckhMU0wqIGdldEFzVHJhbnNsYXRvckhMU0woKSB7IHJldHVybiAw
OyB9Ci0KLXByb3RlY3RlZDoKLSAgICAvLyBNZW1vcnkgYWxsb2NhdG9yLiBBbGxvY2F0ZXMgYW5k
IHRyYWNrcyBtZW1vcnkgcmVxdWlyZWQgYnkgdGhlIGNvbXBpbGVyLgotICAgIC8vIERlYWxsb2Nh
dGVzIGFsbCBtZW1vcnkgd2hlbiBjb21waWxlciBpcyBkZXN0cnVjdGVkLgotICAgIFRQb29sQWxs
b2NhdG9yIGFsbG9jYXRvcjsKLX07Ci0KLS8vCi0vLyBUaGUgYmFzZSBjbGFzcyBmb3IgdGhlIG1h
Y2hpbmUgZGVwZW5kZW50IGNvbXBpbGVyIHRvIGRlcml2ZSBmcm9tCi0vLyBmb3IgbWFuYWdpbmcg
b2JqZWN0IGNvZGUgZnJvbSB0aGUgY29tcGlsZS4KLS8vCi1jbGFzcyBUQ29tcGlsZXIgOiBwdWJs
aWMgVFNoSGFuZGxlQmFzZSB7Ci1wdWJsaWM6Ci0gICAgVENvbXBpbGVyKFNoU2hhZGVyVHlwZSB0
eXBlLCBTaFNoYWRlclNwZWMgc3BlYyk7Ci0gICAgdmlydHVhbCB+VENvbXBpbGVyKCk7Ci0gICAg
dmlydHVhbCBUQ29tcGlsZXIqIGdldEFzQ29tcGlsZXIoKSB7IHJldHVybiB0aGlzOyB9Ci0KLSAg
ICBib29sIEluaXQoY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMpOwotICAgIGJv
b2wgY29tcGlsZShjb25zdCBjaGFyKiBjb25zdCBzaGFkZXJTdHJpbmdzW10sCi0gICAgICAgICAg
ICAgICAgIHNpemVfdCBudW1TdHJpbmdzLAotICAgICAgICAgICAgICAgICBpbnQgY29tcGlsZU9w
dGlvbnMpOwotCi0gICAgLy8gR2V0IHJlc3VsdHMgb2YgdGhlIGxhc3QgY29tcGlsYXRpb24uCi0g
ICAgVEluZm9TaW5rJiBnZXRJbmZvU2luaygpIHsgcmV0dXJuIGluZm9TaW5rOyB9Ci0gICAgY29u
c3QgVFZhcmlhYmxlSW5mb0xpc3QmIGdldEF0dHJpYnMoKSBjb25zdCB7IHJldHVybiBhdHRyaWJz
OyB9Ci0gICAgY29uc3QgVFZhcmlhYmxlSW5mb0xpc3QmIGdldFVuaWZvcm1zKCkgY29uc3QgeyBy
ZXR1cm4gdW5pZm9ybXM7IH0KLSAgICBjb25zdCBUVmFyaWFibGVJbmZvTGlzdCYgZ2V0VmFyeWlu
Z3MoKSBjb25zdCB7IHJldHVybiB2YXJ5aW5nczsgfQotICAgIGludCBnZXRNYXBwZWROYW1lTWF4
TGVuZ3RoKCkgY29uc3Q7Ci0KLSAgICBTaEhhc2hGdW5jdGlvbjY0IGdldEhhc2hGdW5jdGlvbigp
IGNvbnN0IHsgcmV0dXJuIGhhc2hGdW5jdGlvbjsgfQotICAgIE5hbWVNYXAmIGdldE5hbWVNYXAo
KSB7IHJldHVybiBuYW1lTWFwOyB9Ci0gICAgVFN5bWJvbFRhYmxlJiBnZXRTeW1ib2xUYWJsZSgp
IHsgcmV0dXJuIHN5bWJvbFRhYmxlOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBTaFNoYWRlclR5cGUg
Z2V0U2hhZGVyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHNoYWRlclR5cGU7IH0KLSAgICBTaFNoYWRl
clNwZWMgZ2V0U2hhZGVyU3BlYygpIGNvbnN0IHsgcmV0dXJuIHNoYWRlclNwZWM7IH0KLSAgICAv
LyBJbml0aWFsaXplIHN5bWJvbC10YWJsZSB3aXRoIGJ1aWx0LWluIHN5bWJvbHMuCi0gICAgYm9v
bCBJbml0QnVpbHRJblN5bWJvbFRhYmxlKGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyYgcmVzb3Vy
Y2VzKTsKLSAgICAvLyBDbGVhcnMgdGhlIHJlc3VsdHMgZnJvbSB0aGUgcHJldmlvdXMgY29tcGls
YXRpb24uCi0gICAgdm9pZCBjbGVhclJlc3VsdHMoKTsKLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBm
dW5jdGlvbiByZWN1cnNpb24gaXMgZGV0ZWN0ZWQgb3IgY2FsbCBkZXB0aCBleGNlZWRlZC4KLSAg
ICBib29sIGRldGVjdENhbGxEZXB0aChUSW50ZXJtTm9kZSogcm9vdCwgVEluZm9TaW5rJiBpbmZv
U2luaywgYm9vbCBsaW1pdENhbGxTdGFja0RlcHRoKTsKLSAgICAvLyBSZXdyaXRlcyBhIHNoYWRl
cidzIGludGVybWVkaWF0ZSB0cmVlIGFjY29yZGluZyB0byB0aGUgQ1NTIFNoYWRlcnMgc3BlYy4K
LSAgICB2b2lkIHJld3JpdGVDU1NTaGFkZXIoVEludGVybU5vZGUqIHJvb3QpOwotICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc2hhZGVyIGRvZXMgbm90IGV4Y2VlZCB0aGUgbWluaW11
bQotICAgIC8vIGZ1bmN0aW9uYWxpdHkgbWFuZGF0ZWQgaW4gR0xTTCAxLjAgc3BlYyBBcHBlbmRp
eCBBLgotICAgIGJvb2wgdmFsaWRhdGVMaW1pdGF0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCk7Ci0g
ICAgLy8gQ29sbGVjdCBpbmZvIGZvciBhbGwgYXR0cmlicywgdW5pZm9ybXMsIHZhcnlpbmdzLgot
ICAgIHZvaWQgY29sbGVjdFZhcmlhYmxlcyhUSW50ZXJtTm9kZSogcm9vdCk7Ci0gICAgLy8gTWFw
IGxvbmcgdmFyaWFibGUgbmFtZXMgaW50byBzaG9ydGVyIG9uZXMuCi0gICAgdm9pZCBtYXBMb25n
VmFyaWFibGVOYW1lcyhUSW50ZXJtTm9kZSogcm9vdCk7Ci0gICAgLy8gVHJhbnNsYXRlIHRvIG9i
amVjdCBjb2RlLgotICAgIHZpcnR1YWwgdm9pZCB0cmFuc2xhdGUoVEludGVybU5vZGUqIHJvb3Qp
ID0gMDsKLSAgICAvLyBSZXR1cm5zIHRydWUgaWYsIGFmdGVyIGFwcGx5aW5nIHRoZSBwYWNraW5n
IHJ1bGVzIGluIHRoZSBHTFNMIDEuMDE3IHNwZWMKLSAgICAvLyBBcHBlbmRpeCBBLCBzZWN0aW9u
IDcsIHRoZSBzaGFkZXIgZG9lcyBub3QgdXNlIHRvbyBtYW55IHVuaWZvcm1zIG9yIHZhcnlpbmdz
LgotICAgIGJvb2wgZW5mb3JjZVBhY2tpbmdSZXN0cmljdGlvbnMoKTsKLSAgICAvLyBSZXR1cm5z
IHRydWUgaWYgdGhlIHNoYWRlciBwYXNzZXMgdGhlIHJlc3RyaWN0aW9ucyB0aGF0IGFpbSB0byBw
cmV2ZW50IHRpbWluZyBhdHRhY2tzLgotICAgIGJvb2wgZW5mb3JjZVRpbWluZ1Jlc3RyaWN0aW9u
cyhUSW50ZXJtTm9kZSogcm9vdCwgYm9vbCBvdXRwdXRHcmFwaCk7Ci0gICAgLy8gUmV0dXJucyB0
cnVlIGlmIHRoZSBzaGFkZXIgZG9lcyBub3QgdXNlIHNhbXBsZXJzLgotICAgIGJvb2wgZW5mb3Jj
ZVZlcnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCk7Ci0gICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZSBzaGFkZXIgZG9lcyBub3QgdXNlIHNhbXBsZXIgZGVwZW5k
ZW50IHZhbHVlcyB0byBhZmZlY3QgY29udHJvbCAKLSAgICAvLyBmbG93IG9yIGluIG9wZXJhdGlv
bnMgd2hvc2UgdGltZSBjYW4gZGVwZW5kIG9uIHRoZSBpbnB1dCB2YWx1ZXMuCi0gICAgYm9vbCBl
bmZvcmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoY29uc3QgVERlcGVuZGVuY3lH
cmFwaCYgZ3JhcGgpOwotICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBtYXhpbXVtIGV4cHJlc3Np
b24gY29tcGxleGl0eSBiZWxvdyB0aGUgbGltaXQuCi0gICAgYm9vbCBsaW1pdEV4cHJlc3Npb25D
b21wbGV4aXR5KFRJbnRlcm1Ob2RlKiByb290KTsKLSAgICAvLyBHZXQgYnVpbHQtaW4gZXh0ZW5z
aW9ucyB3aXRoIGRlZmF1bHQgYmVoYXZpb3IuCi0gICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9y
JiBnZXRFeHRlbnNpb25CZWhhdmlvcigpIGNvbnN0OwotICAgIC8vIEdldCB0aGUgcmVzb3VyY2Vz
IHNldCBieSBJbml0QnVpbHRJblN5bWJvbFRhYmxlCi0gICAgY29uc3QgU2hCdWlsdEluUmVzb3Vy
Y2VzJiBnZXRSZXNvdXJjZXMoKSBjb25zdDsKLQotICAgIGNvbnN0IEFycmF5Qm91bmRzQ2xhbXBl
ciYgZ2V0QXJyYXlCb3VuZHNDbGFtcGVyKCkgY29uc3Q7Ci0gICAgU2hBcnJheUluZGV4Q2xhbXBp
bmdTdHJhdGVneSBnZXRBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSgpIGNvbnN0OwotICAgIGNv
bnN0IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yJiBnZXRCdWlsdEluRnVuY3Rpb25FbXVsYXRvcigp
IGNvbnN0OwotCi1wcml2YXRlOgotICAgIFNoU2hhZGVyVHlwZSBzaGFkZXJUeXBlOwotICAgIFNo
U2hhZGVyU3BlYyBzaGFkZXJTcGVjOwotCi0gICAgaW50IG1heFVuaWZvcm1WZWN0b3JzOwotICAg
IGludCBtYXhWYXJ5aW5nVmVjdG9yczsKLSAgICBpbnQgbWF4RXhwcmVzc2lvbkNvbXBsZXhpdHk7
Ci0gICAgaW50IG1heENhbGxTdGFja0RlcHRoOwotCi0gICAgU2hCdWlsdEluUmVzb3VyY2VzIGNv
bXBpbGVSZXNvdXJjZXM7Ci0KLSAgICAvLyBCdWlsdC1pbiBzeW1ib2wgdGFibGUgZm9yIHRoZSBn
aXZlbiBsYW5ndWFnZSwgc3BlYywgYW5kIHJlc291cmNlcy4KLSAgICAvLyBJdCBpcyBwcmVzZXJ2
ZWQgZnJvbSBjb21waWxlLXRvLWNvbXBpbGUuCi0gICAgVFN5bWJvbFRhYmxlIHN5bWJvbFRhYmxl
OwotICAgIC8vIEJ1aWx0LWluIGV4dGVuc2lvbnMgd2l0aCBkZWZhdWx0IGJlaGF2aW9yLgotICAg
IFRFeHRlbnNpb25CZWhhdmlvciBleHRlbnNpb25CZWhhdmlvcjsKLSAgICBib29sIGZyYWdtZW50
UHJlY2lzaW9uSGlnaDsKLQotICAgIEFycmF5Qm91bmRzQ2xhbXBlciBhcnJheUJvdW5kc0NsYW1w
ZXI7Ci0gICAgU2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5Owot
ICAgIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yIGJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOwotCi0g
ICAgLy8gUmVzdWx0cyBvZiBjb21waWxhdGlvbi4KLSAgICBUSW5mb1NpbmsgaW5mb1Npbms7ICAv
LyBPdXRwdXQgc2luay4KLSAgICBUVmFyaWFibGVJbmZvTGlzdCBhdHRyaWJzOyAgLy8gQWN0aXZl
IGF0dHJpYnV0ZXMgaW4gdGhlIGNvbXBpbGVkIHNoYWRlci4KLSAgICBUVmFyaWFibGVJbmZvTGlz
dCB1bmlmb3JtczsgIC8vIEFjdGl2ZSB1bmlmb3JtcyBpbiB0aGUgY29tcGlsZWQgc2hhZGVyLgot
ICAgIFRWYXJpYWJsZUluZm9MaXN0IHZhcnlpbmdzOyAgLy8gVmFyeWluZ3MgaW4gdGhlIGNvbXBp
bGVkIHNoYWRlci4KLQotICAgIC8vIENhY2hlZCBjb3B5IG9mIHRoZSByZWYtY291bnRlZCBzaW5n
bGV0b24uCi0gICAgTG9uZ05hbWVNYXAqIGxvbmdOYW1lTWFwOwotCi0gICAgLy8gbmFtZSBoYXNo
aW5nLgotICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uOwotICAgIE5hbWVNYXAgbmFt
ZU1hcDsKLX07Ci0KLS8vCi0vLyBUaGlzIGlzIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgbWFj
aGluZSBpbmRlcGVuZGVudCBjb2RlCi0vLyBhbmQgdGhlIG1hY2hpbmUgZGVwZW5kZW50IGNvZGUu
Ci0vLwotLy8gVGhlIG1hY2hpbmUgZGVwZW5kZW50IGNvZGUgc2hvdWxkIGRlcml2ZSBmcm9tIHRo
ZSBjbGFzc2VzCi0vLyBhYm92ZS4gVGhlbiBDb25zdHJ1Y3QqKCkgYW5kIERlbGV0ZSooKSB3aWxs
IGNyZWF0ZSBhbmQgCi0vLyBkZXN0cm95IHRoZSBtYWNoaW5lIGRlcGVuZGVudCBvYmplY3RzLCB3
aGljaCBjb250YWluIHRoZQotLy8gYWJvdmUgbWFjaGluZSBpbmRlcGVuZGVudCBpbmZvcm1hdGlv
bi4KLS8vCi1UQ29tcGlsZXIqIENvbnN0cnVjdENvbXBpbGVyKAotICAgIFNoU2hhZGVyVHlwZSB0
eXBlLCBTaFNoYWRlclNwZWMgc3BlYywgU2hTaGFkZXJPdXRwdXQgb3V0cHV0KTsKLXZvaWQgRGVs
ZXRlQ29tcGlsZXIoVENvbXBpbGVyKik7Ci0KLSNlbmRpZiAvLyBfU0hIQU5ETEVfSU5DTFVERURf
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVy
TGFuZy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVyTGFu
Zy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyY2Q1Y2M1YzE1ZmJlNzAwMjA2
YzM0NDJiOGM4Y2M4MDNlNDQ5YmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxh
bmcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzg3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLS8vCi0vLyBJbXBsZW1lbnQgdGhlIHRvcC1sZXZlbCBvZiBpbnRlcmZhY2UgdG8gdGhlIGNv
bXBpbGVyLAotLy8gYXMgZGVmaW5lZCBpbiBTaGFkZXJMYW5nLmgKLS8vCi0KLSNpbmNsdWRlICJH
TFNMQU5HL1NoYWRlckxhbmcuaCIKLQotI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVEbGwu
aCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvbGVuZ3RoX2xpbWl0cy5oIgotI2lu
Y2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvVHJhbnNsYXRv
ckhMU0wuaCIKLSNpbmNsdWRlICJjb21waWxlci9WYXJpYWJsZVBhY2tlci5oIgotCi0vLwotLy8g
VGhpcyBpcyB0aGUgcGxhdGZvcm0gaW5kZXBlbmRlbnQgaW50ZXJmYWNlIGJldHdlZW4gYW4gT0dM
IGRyaXZlcgotLy8gYW5kIHRoZSBzaGFkaW5nIGxhbmd1YWdlIGNvbXBpbGVyLgotLy8KLQotc3Rh
dGljIGJvb2wgY2hlY2tWYXJpYWJsZU1heExlbmd0aHMoY29uc3QgU2hIYW5kbGUgaGFuZGxlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGV4cGVjdGVkVmFsdWUp
Ci17Ci0gICAgc2l6ZV90IGFjdGl2ZVVuaWZvcm1MaW1pdCA9IDA7Ci0gICAgU2hHZXRJbmZvKGhh
bmRsZSwgU0hfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwgJmFjdGl2ZVVuaWZvcm1MaW1pdCk7
Ci0gICAgc2l6ZV90IGFjdGl2ZUF0dHJpYkxpbWl0ID0gMDsKLSAgICBTaEdldEluZm8oaGFuZGxl
LCBTSF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsICZhY3RpdmVBdHRyaWJMaW1pdCk7Ci0g
ICAgc2l6ZV90IHZhcnlpbmdMaW1pdCA9IDA7Ci0gICAgU2hHZXRJbmZvKGhhbmRsZSwgU0hfVkFS
WUlOR19NQVhfTEVOR1RILCAmdmFyeWluZ0xpbWl0KTsKLSAgICByZXR1cm4gKGV4cGVjdGVkVmFs
dWUgPT0gYWN0aXZlVW5pZm9ybUxpbWl0ICYmCi0gICAgICAgICAgICBleHBlY3RlZFZhbHVlID09
IGFjdGl2ZUF0dHJpYkxpbWl0ICYmCi0gICAgICAgICAgICBleHBlY3RlZFZhbHVlID09IHZhcnlp
bmdMaW1pdCk7Ci19Ci0KLXN0YXRpYyBib29sIGNoZWNrTWFwcGVkTmFtZU1heExlbmd0aChjb25z
dCBTaEhhbmRsZSBoYW5kbGUsIHNpemVfdCBleHBlY3RlZFZhbHVlKQotewotICAgIHNpemVfdCBt
YXBwZWROYW1lTWF4TGVuZ3RoID0gMDsKLSAgICBTaEdldEluZm8oaGFuZGxlLCBTSF9NQVBQRURf
TkFNRV9NQVhfTEVOR1RILCAmbWFwcGVkTmFtZU1heExlbmd0aCk7Ci0gICAgcmV0dXJuIChleHBl
Y3RlZFZhbHVlID09IG1hcHBlZE5hbWVNYXhMZW5ndGgpOwotfQotCi0vLwotLy8gRHJpdmVyIG11
c3QgY2FsbCB0aGlzIGZpcnN0LCBvbmNlLCBiZWZvcmUgZG9pbmcgYW55IG90aGVyIGNvbXBpbGVy
IG9wZXJhdGlvbnMuCi0vLyBTdWJzZXF1ZW50IGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gYXJlIG5v
LW9wLgotLy8KLWludCBTaEluaXRpYWxpemUoKQotewotICAgIHN0YXRpYyBjb25zdCBib29sIGtJ
bml0aWFsaXplZCA9IEluaXRQcm9jZXNzKCk7Ci0gICAgcmV0dXJuIGtJbml0aWFsaXplZCA/IDEg
OiAwOwotfQotCi0vLwotLy8gQ2xlYW51cCBzeW1ib2wgdGFibGVzCi0vLwotaW50IFNoRmluYWxp
emUoKQotewotICAgIERldGFjaFByb2Nlc3MoKTsKLSAgICByZXR1cm4gMTsKLX0KLQotLy8KLS8v
IEluaXRpYWxpemUgYnVpbHQtaW4gcmVzb3VyY2VzIHdpdGggbWluaW11bSBleHBlY3RlZCB2YWx1
ZXMuCi0vLwotdm9pZCBTaEluaXRCdWlsdEluUmVzb3VyY2VzKFNoQnVpbHRJblJlc291cmNlcyog
cmVzb3VyY2VzKQotewotICAgIC8vIENvbnN0YW50cy4KLSAgICByZXNvdXJjZXMtPk1heFZlcnRl
eEF0dHJpYnMgPSA4OwotICAgIHJlc291cmNlcy0+TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMgPSAx
Mjg7Ci0gICAgcmVzb3VyY2VzLT5NYXhWYXJ5aW5nVmVjdG9ycyA9IDg7Ci0gICAgcmVzb3VyY2Vz
LT5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyA9IDA7Ci0gICAgcmVzb3VyY2VzLT5NYXhDb21i
aW5lZFRleHR1cmVJbWFnZVVuaXRzID0gODsKLSAgICByZXNvdXJjZXMtPk1heFRleHR1cmVJbWFn
ZVVuaXRzID0gODsKLSAgICByZXNvdXJjZXMtPk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMgPSAx
NjsKLSAgICByZXNvdXJjZXMtPk1heERyYXdCdWZmZXJzID0gMTsKLQotICAgIC8vIEV4dGVuc2lv
bnMuCi0gICAgcmVzb3VyY2VzLT5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgPSAwOwotICAgIHJl
c291cmNlcy0+T0VTX0VHTF9pbWFnZV9leHRlcm5hbCA9IDA7Ci0gICAgcmVzb3VyY2VzLT5BUkJf
dGV4dHVyZV9yZWN0YW5nbGUgPSAwOwotICAgIHJlc291cmNlcy0+RVhUX2RyYXdfYnVmZmVycyA9
IDA7Ci0gICAgcmVzb3VyY2VzLT5FWFRfZnJhZ19kZXB0aCA9IDA7Ci0KLSAgICAvLyBEaXNhYmxl
IGhpZ2hwIHByZWNpc2lvbiBpbiBmcmFnbWVudCBzaGFkZXIgYnkgZGVmYXVsdC4KLSAgICByZXNv
dXJjZXMtPkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9IDA7Ci0KLSAgICAvLyBEaXNhYmxlIG5hbWUg
aGFzaGluZyBieSBkZWZhdWx0LgotICAgIHJlc291cmNlcy0+SGFzaEZ1bmN0aW9uID0gTlVMTDsK
LQotICAgIHJlc291cmNlcy0+QXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kgPSBTSF9DTEFNUF9X
SVRIX0NMQU1QX0lOVFJJTlNJQzsKLX0KLQotLy8KLS8vIERyaXZlciBjYWxscyB0aGVzZSB0byBj
cmVhdGUgYW5kIGRlc3Ryb3kgY29tcGlsZXIgb2JqZWN0cy4KLS8vCi1TaEhhbmRsZSBTaENvbnN0
cnVjdENvbXBpbGVyKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU2hTaGFkZXJPdXRwdXQgb3V0cHV0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMqIHJlc291cmNlcykK
LXsKLSAgICBUU2hIYW5kbGVCYXNlKiBiYXNlID0gc3RhdGljX2Nhc3Q8VFNoSGFuZGxlQmFzZSo+
KENvbnN0cnVjdENvbXBpbGVyKHR5cGUsIHNwZWMsIG91dHB1dCkpOwotICAgIFRDb21waWxlciog
Y29tcGlsZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7Ci0gICAgaWYgKGNvbXBpbGVyID09IDAp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gR2VuZXJhdGUgYnVpbHQtaW4gc3ltYm9sIHRh
YmxlLgotICAgIGlmICghY29tcGlsZXItPkluaXQoKnJlc291cmNlcykpIHsKLSAgICAgICAgU2hE
ZXN0cnVjdChiYXNlKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2UpOwotfQotCi12b2lkIFNoRGVzdHJ1Y3QoU2hIYW5k
bGUgaGFuZGxlKQotewotICAgIGlmIChoYW5kbGUgPT0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHN0YXRpY19jYXN0PFRTaEhhbmRsZUJhc2UqPihoYW5k
bGUpOwotCi0gICAgaWYgKGJhc2UtPmdldEFzQ29tcGlsZXIoKSkKLSAgICAgICAgRGVsZXRlQ29t
cGlsZXIoYmFzZS0+Z2V0QXNDb21waWxlcigpKTsKLX0KLQotLy8KLS8vIERvIGFuIGFjdHVhbCBj
b21waWxlIG9uIHRoZSBnaXZlbiBzdHJpbmdzLiAgVGhlIHJlc3VsdCBpcyBsZWZ0IAotLy8gaW4g
dGhlIGdpdmVuIGNvbXBpbGUgb2JqZWN0LgotLy8KLS8vIFJldHVybjogIFRoZSByZXR1cm4gdmFs
dWUgb2YgU2hDb21waWxlIGlzIHJlYWxseSBib29sZWFuLCBpbmRpY2F0aW5nCi0vLyBzdWNjZXNz
IG9yIGZhaWx1cmUuCi0vLwotaW50IFNoQ29tcGlsZSgKLSAgICBjb25zdCBTaEhhbmRsZSBoYW5k
bGUsCi0gICAgY29uc3QgY2hhciogY29uc3Qgc2hhZGVyU3RyaW5nc1tdLAotICAgIHNpemVfdCBu
dW1TdHJpbmdzLAotICAgIGludCBjb21waWxlT3B0aW9ucykKLXsKLSAgICBpZiAoaGFuZGxlID09
IDApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8VFNoSGFuZGxlQmFzZSo+KGhhbmRsZSk7Ci0gICAgVENvbXBpbGVyKiBjb21w
aWxlciA9IGJhc2UtPmdldEFzQ29tcGlsZXIoKTsKLSAgICBpZiAoY29tcGlsZXIgPT0gMCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBib29sIHN1Y2Nlc3MgPSBjb21waWxlci0+Y29tcGlsZShz
aGFkZXJTdHJpbmdzLCBudW1TdHJpbmdzLCBjb21waWxlT3B0aW9ucyk7Ci0gICAgcmV0dXJuIHN1
Y2Nlc3MgPyAxIDogMDsKLX0KLQotdm9pZCBTaEdldEluZm8oY29uc3QgU2hIYW5kbGUgaGFuZGxl
LCBTaFNoYWRlckluZm8gcG5hbWUsIHNpemVfdCogcGFyYW1zKQotewotICAgIGlmICghaGFuZGxl
IHx8ICFwYXJhbXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIFRTaEhhbmRsZUJhc2UqIGJhc2Ug
PSBzdGF0aWNfY2FzdDxUU2hIYW5kbGVCYXNlKj4oaGFuZGxlKTsKLSAgICBUQ29tcGlsZXIqIGNv
bXBpbGVyID0gYmFzZS0+Z2V0QXNDb21waWxlcigpOwotICAgIGlmICghY29tcGlsZXIpIHJldHVy
bjsKLQotICAgIHN3aXRjaChwbmFtZSkKLSAgICB7Ci0gICAgY2FzZSBTSF9JTkZPX0xPR19MRU5H
VEg6Ci0gICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0SW5mb1NpbmsoKS5pbmZvLnNpemUo
KSArIDE7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU0hfT0JKRUNUX0NPREVfTEVOR1RIOgot
ICAgICAgICAqcGFyYW1zID0gY29tcGlsZXItPmdldEluZm9TaW5rKCkub2JqLnNpemUoKSArIDE7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU0hfQUNUSVZFX1VOSUZPUk1TOgotICAgICAgICAq
cGFyYW1zID0gY29tcGlsZXItPmdldFVuaWZvcm1zKCkuc2l6ZSgpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFNIX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEg6Ci0gICAgICAgICpwYXJhbXMg
PSAxICsgIE1BWF9TWU1CT0xfTkFNRV9MRU47Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU0hf
QUNUSVZFX0FUVFJJQlVURVM6Ci0gICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0QXR0cmli
cygpLnNpemUoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTSF9BQ1RJVkVfQVRUUklCVVRF
X01BWF9MRU5HVEg6Ci0gICAgICAgICpwYXJhbXMgPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTSF9WQVJZSU5HUzoKLSAgICAgICAgKnBhcmFtcyA9
IGNvbXBpbGVyLT5nZXRWYXJ5aW5ncygpLnNpemUoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBTSF9WQVJZSU5HX01BWF9MRU5HVEg6Ci0gICAgICAgICpwYXJhbXMgPSAxICsgTUFYX1NZTUJP
TF9OQU1FX0xFTjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTSF9NQVBQRURfTkFNRV9NQVhf
TEVOR1RIOgotICAgICAgICAvLyBVc2UgbG9uZ2VyIGxlbmd0aCB0aGFuIE1BWF9TSE9SVEVORURf
SURFTlRJRklFUl9TSVpFIHRvCi0gICAgICAgIC8vIGhhbmRsZSBhcnJheSBhbmQgc3RydWN0IGRl
cmVmZXJlbmNlcy4KLSAgICAgICAgKnBhcmFtcyA9IDEgKyBNQVhfU1lNQk9MX05BTUVfTEVOOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFNIX05BTUVfTUFYX0xFTkdUSDoKLSAgICAgICAgKnBh
cmFtcyA9IDEgKyBNQVhfU1lNQk9MX05BTUVfTEVOOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFNIX0hBU0hFRF9OQU1FX01BWF9MRU5HVEg6Ci0gICAgICAgIGlmIChjb21waWxlci0+Z2V0SGFz
aEZ1bmN0aW9uKCkgPT0gTlVMTCkgewotICAgICAgICAgICAgKnBhcmFtcyA9IDA7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyA2NCBiaXRzIGhhc2hpbmcgb3V0cHV0IHJlcXVpcmVz
IDE2IGJ5dGVzIGZvciBoZXggCi0gICAgICAgICAgICAvLyByZXByZXNlbnRhdGlvbi4KLSAgICAg
ICAgICAgIGNvbnN0IGNoYXIgSGFzaGVkTmFtZVByZWZpeFtdID0gSEFTSEVEX05BTUVfUFJFRklY
OwotICAgICAgICAgICAgKnBhcmFtcyA9IDE2ICsgc2l6ZW9mKEhhc2hlZE5hbWVQcmVmaXgpOwot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU0hfSEFTSEVEX05BTUVTX0NPVU5U
OgotICAgICAgICAqcGFyYW1zID0gY29tcGlsZXItPmdldE5hbWVNYXAoKS5zaXplKCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotfQotCi0vLwot
Ly8gUmV0dXJuIGFueSBjb21waWxlciBsb2cgb2YgbWVzc2FnZXMgZm9yIHRoZSBhcHBsaWNhdGlv
bi4KLS8vCi12b2lkIFNoR2V0SW5mb0xvZyhjb25zdCBTaEhhbmRsZSBoYW5kbGUsIGNoYXIqIGlu
Zm9Mb2cpCi17Ci0gICAgaWYgKCFoYW5kbGUgfHwgIWluZm9Mb2cpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2FzdDxUU2hIYW5kbGVCYXNlKj4o
aGFuZGxlKTsKLSAgICBUQ29tcGlsZXIqIGNvbXBpbGVyID0gYmFzZS0+Z2V0QXNDb21waWxlcigp
OwotICAgIGlmICghY29tcGlsZXIpIHJldHVybjsKLQotICAgIFRJbmZvU2luayYgaW5mb1Npbmsg
PSBjb21waWxlci0+Z2V0SW5mb1NpbmsoKTsKLSAgICBzdHJjcHkoaW5mb0xvZywgaW5mb1Npbmsu
aW5mby5jX3N0cigpKTsKLX0KLQotLy8KLS8vIFJldHVybiBhbnkgb2JqZWN0IGNvZGUuCi0vLwot
dm9pZCBTaEdldE9iamVjdENvZGUoY29uc3QgU2hIYW5kbGUgaGFuZGxlLCBjaGFyKiBvYmpDb2Rl
KQotewotICAgIGlmICghaGFuZGxlIHx8ICFvYmpDb2RlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBUU2hIYW5kbGVCYXNlKiBiYXNlID0gc3RhdGljX2Nhc3Q8VFNoSGFuZGxlQmFzZSo+KGhhbmRs
ZSk7Ci0gICAgVENvbXBpbGVyKiBjb21waWxlciA9IGJhc2UtPmdldEFzQ29tcGlsZXIoKTsKLSAg
ICBpZiAoIWNvbXBpbGVyKSByZXR1cm47Ci0KLSAgICBUSW5mb1NpbmsmIGluZm9TaW5rID0gY29t
cGlsZXItPmdldEluZm9TaW5rKCk7Ci0gICAgc3RyY3B5KG9iakNvZGUsIGluZm9TaW5rLm9iai5j
X3N0cigpKTsKLX0KLQotdm9pZCBTaEdldFZhcmlhYmxlSW5mbyhjb25zdCBTaEhhbmRsZSBoYW5k
bGUsCi0gICAgICAgICAgICAgICAgICAgICAgIFNoU2hhZGVySW5mbyB2YXJUeXBlLAotICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCogbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHNpemUsCi0gICAgICAgICAg
ICAgICAgICAgICAgIFNoRGF0YVR5cGUqIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgIFNo
UHJlY2lzaW9uVHlwZSogcHJlY2lzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHN0
YXRpY1VzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgY2hhciogbmFtZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgY2hhciogbWFwcGVkTmFtZSkKLXsKLSAgICBpZiAoIWhhbmRsZSB8fCAhc2l6
ZSB8fCAhdHlwZSB8fCAhcHJlY2lzaW9uIHx8ICFzdGF0aWNVc2UgfHwgIW5hbWUpCi0gICAgICAg
IHJldHVybjsKLSAgICBBU1NFUlQoKHZhclR5cGUgPT0gU0hfQUNUSVZFX0FUVFJJQlVURVMpIHx8
Ci0gICAgICAgICAgICh2YXJUeXBlID09IFNIX0FDVElWRV9VTklGT1JNUykgfHwKLSAgICAgICAg
ICAgKHZhclR5cGUgPT0gU0hfVkFSWUlOR1MpKTsKLQotICAgIFRTaEhhbmRsZUJhc2UqIGJhc2Ug
PSByZWludGVycHJldF9jYXN0PFRTaEhhbmRsZUJhc2UqPihoYW5kbGUpOwotICAgIFRDb21waWxl
ciogY29tcGlsZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7Ci0gICAgaWYgKGNvbXBpbGVyID09
IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IFRWYXJpYWJsZUluZm9MaXN0JiB2YXJM
aXN0ID0KLSAgICAgICAgdmFyVHlwZSA9PSBTSF9BQ1RJVkVfQVRUUklCVVRFUyA/IGNvbXBpbGVy
LT5nZXRBdHRyaWJzKCkgOgotICAgICAgICAgICAgKHZhclR5cGUgPT0gU0hfQUNUSVZFX1VOSUZP
Uk1TID8gY29tcGlsZXItPmdldFVuaWZvcm1zKCkgOgotICAgICAgICAgICAgICAgIGNvbXBpbGVy
LT5nZXRWYXJ5aW5ncygpKTsKLSAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHN0YXRpY19j
YXN0PGludD4odmFyTGlzdC5zaXplKCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBU
VmFyaWFibGVJbmZvJiB2YXJJbmZvID0gdmFyTGlzdFtpbmRleF07Ci0gICAgaWYgKGxlbmd0aCkg
Kmxlbmd0aCA9IHZhckluZm8ubmFtZS5zaXplKCk7Ci0gICAgKnNpemUgPSB2YXJJbmZvLnNpemU7
Ci0gICAgKnR5cGUgPSB2YXJJbmZvLnR5cGU7Ci0gICAgc3dpdGNoICh2YXJJbmZvLnByZWNpc2lv
bikgewotICAgIGNhc2UgRWJwTG93OgotICAgICAgICAqcHJlY2lzaW9uID0gU0hfUFJFQ0lTSU9O
X0xPV1A7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJwTWVkaXVtOgotICAgICAgICAqcHJl
Y2lzaW9uID0gU0hfUFJFQ0lTSU9OX01FRElVTVA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
RWJwSGlnaDoKLSAgICAgICAgKnByZWNpc2lvbiA9IFNIX1BSRUNJU0lPTl9ISUdIUDsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgLy8gU29tZSB0eXBlcyBkb2VzIG5vdCBz
dXBwb3J0IHByZWNpc2lvbiwgZm9yIGV4YW1wbGUsIGJvb2xlYW4uCi0gICAgICAgICpwcmVjaXNp
b24gPSBTSF9QUkVDSVNJT05fVU5ERUZJTkVEOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
KnN0YXRpY1VzZSA9IHZhckluZm8uc3RhdGljVXNlID8gMSA6IDA7Ci0KLSAgICAvLyBUaGlzIHNp
emUgbXVzdCBtYXRjaCB0aGF0IHF1ZXJpZWQgYnkKLSAgICAvLyBTSF9BQ1RJVkVfVU5JRk9STV9N
QVhfTEVOR1RILCBTSF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsIFNIX1ZBUllJTkdfTUFY
X0xFTkdUSAotICAgIC8vIGluIFNoR2V0SW5mbywgYmVsb3cuCi0gICAgc2l6ZV90IHZhcmlhYmxl
TGVuZ3RoID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47Ci0gICAgQVNTRVJUKGNoZWNrVmFyaWFi
bGVNYXhMZW5ndGhzKGhhbmRsZSwgdmFyaWFibGVMZW5ndGgpKTsKLSAgICBzdHJuY3B5KG5hbWUs
IHZhckluZm8ubmFtZS5jX3N0cigpLCB2YXJpYWJsZUxlbmd0aCk7Ci0gICAgbmFtZVt2YXJpYWJs
ZUxlbmd0aCAtIDFdID0gMDsKLSAgICBpZiAobWFwcGVkTmFtZSkgewotICAgICAgICAvLyBUaGlz
IHNpemUgbXVzdCBtYXRjaCB0aGF0IHF1ZXJpZWQgYnkKLSAgICAgICAgLy8gU0hfTUFQUEVEX05B
TUVfTUFYX0xFTkdUSCBpbiBTaEdldEluZm8sIGJlbG93LgotICAgICAgICBzaXplX3QgbWF4TWFw
cGVkTmFtZUxlbmd0aCA9IDEgKyBNQVhfU1lNQk9MX05BTUVfTEVOOwotICAgICAgICBBU1NFUlQo
Y2hlY2tNYXBwZWROYW1lTWF4TGVuZ3RoKGhhbmRsZSwgbWF4TWFwcGVkTmFtZUxlbmd0aCkpOwot
ICAgICAgICBzdHJuY3B5KG1hcHBlZE5hbWUsIHZhckluZm8ubWFwcGVkTmFtZS5jX3N0cigpLCBt
YXhNYXBwZWROYW1lTGVuZ3RoKTsKLSAgICAgICAgbWFwcGVkTmFtZVttYXhNYXBwZWROYW1lTGVu
Z3RoIC0gMV0gPSAwOwotICAgIH0KLX0KLQotdm9pZCBTaEdldE5hbWVIYXNoaW5nRW50cnkoY29u
c3QgU2hIYW5kbGUgaGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogbmFtZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIqIGhhc2hlZE5hbWUpCi17Ci0gICAgaWYgKCFoYW5kbGUgfHwgIW5h
bWUgfHwgIWhhc2hlZE5hbWUgfHwgaW5kZXggPCAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBU
U2hIYW5kbGVCYXNlKiBiYXNlID0gc3RhdGljX2Nhc3Q8VFNoSGFuZGxlQmFzZSo+KGhhbmRsZSk7
Ci0gICAgVENvbXBpbGVyKiBjb21waWxlciA9IGJhc2UtPmdldEFzQ29tcGlsZXIoKTsKLSAgICBp
ZiAoIWNvbXBpbGVyKSByZXR1cm47Ci0KLSAgICBjb25zdCBOYW1lTWFwJiBuYW1lTWFwID0gY29t
cGlsZXItPmdldE5hbWVNYXAoKTsKLSAgICBpZiAoaW5kZXggPj0gc3RhdGljX2Nhc3Q8aW50Pihu
YW1lTWFwLnNpemUoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5hbWVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbmFtZU1hcC5iZWdpbigpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5k
ZXg7ICsraSkKLSAgICAgICAgKytpdDsKLQotICAgIHNpemVfdCBsZW4gPSBpdC0+Zmlyc3QubGVu
Z3RoKCkgKyAxOwotICAgIHNpemVfdCBtYXhfbGVuID0gMDsKLSAgICBTaEdldEluZm8oaGFuZGxl
LCBTSF9OQU1FX01BWF9MRU5HVEgsICZtYXhfbGVuKTsKLSAgICBpZiAobGVuID4gbWF4X2xlbikg
ewotICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICBsZW4gPSBtYXhfbGVuOwotICAgIH0K
LSAgICBzdHJuY3B5KG5hbWUsIGl0LT5maXJzdC5jX3N0cigpLCBsZW4pOwotICAgIC8vIFRvIGJl
IG9uIHRoZSBzYWZlIHNpZGUgaW4gY2FzZSB0aGUgc291cmNlIGlzIGxvbmdlciB0aGFuIGV4cGVj
dGVkLgotICAgIG5hbWVbbGVuIC0gMV0gPSAnXDAnOwotCi0gICAgbGVuID0gaXQtPnNlY29uZC5s
ZW5ndGgoKSArIDE7Ci0gICAgbWF4X2xlbiA9IDA7Ci0gICAgU2hHZXRJbmZvKGhhbmRsZSwgU0hf
SEFTSEVEX05BTUVfTUFYX0xFTkdUSCwgJm1heF9sZW4pOwotICAgIGlmIChsZW4gPiBtYXhfbGVu
KSB7Ci0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgICAgIGxlbiA9IG1heF9sZW47Ci0gICAg
fQotICAgIHN0cm5jcHkoaGFzaGVkTmFtZSwgaXQtPnNlY29uZC5jX3N0cigpLCBsZW4pOwotICAg
IC8vIFRvIGJlIG9uIHRoZSBzYWZlIHNpZGUgaW4gY2FzZSB0aGUgc291cmNlIGlzIGxvbmdlciB0
aGFuIGV4cGVjdGVkLgotICAgIGhhc2hlZE5hbWVbbGVuIC0gMV0gPSAnXDAnOwotfQotCi12b2lk
IFNoR2V0SW5mb1BvaW50ZXIoY29uc3QgU2hIYW5kbGUgaGFuZGxlLCBTaFNoYWRlckluZm8gcG5h
bWUsIHZvaWQqKiBwYXJhbXMpCi17Ci0gICAgaWYgKCFoYW5kbGUgfHwgIXBhcmFtcykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHN0YXRpY19jYXN0PFRTaEhh
bmRsZUJhc2UqPihoYW5kbGUpOwotICAgIFRyYW5zbGF0b3JITFNMKiB0cmFuc2xhdG9yID0gYmFz
ZS0+Z2V0QXNUcmFuc2xhdG9ySExTTCgpOwotICAgIGlmICghdHJhbnNsYXRvcikgcmV0dXJuOwot
Ci0gICAgc3dpdGNoKHBuYW1lKQotICAgIHsKLSAgICBjYXNlIFNIX0FDVElWRV9VTklGT1JNU19B
UlJBWToKLSAgICAgICAgKnBhcmFtcyA9ICh2b2lkKikmdHJhbnNsYXRvci0+Z2V0VW5pZm9ybXMo
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci19
Ci0KLWludCBTaENoZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cygKLSAgICBpbnQgbWF4
VmVjdG9ycywgU2hWYXJpYWJsZUluZm8qIHZhckluZm9BcnJheSwgc2l6ZV90IHZhckluZm9BcnJh
eVNpemUpCi17Ci0gICAgaWYgKHZhckluZm9BcnJheVNpemUgPT0gMCkKLSAgICAgICAgcmV0dXJu
IDE7Ci0gICAgQVNTRVJUKHZhckluZm9BcnJheSk7Ci0gICAgVFZhcmlhYmxlSW5mb0xpc3QgdmFy
aWFibGVzOwotICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCB2YXJJbmZvQXJyYXlTaXplOyAr
K2lpKQotICAgIHsKLSAgICAgICAgVFZhcmlhYmxlSW5mbyB2YXIodmFySW5mb0FycmF5W2lpXS50
eXBlLCB2YXJJbmZvQXJyYXlbaWldLnNpemUpOwotICAgICAgICB2YXJpYWJsZXMucHVzaF9iYWNr
KHZhcik7Ci0gICAgfQotICAgIFZhcmlhYmxlUGFja2VyIHBhY2tlcjsKLSAgICByZXR1cm4gcGFj
a2VyLkNoZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cyhtYXhWZWN0b3JzLCB2YXJpYWJs
ZXMpID8gMSA6IDA7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvU3ltYm9sVGFibGUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1N5bWJvbFRhYmxlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdj
ZTIxNjgwZjVlZWNkYjU5MGMxZDVjNmM1YjRhMDVmYjk2ZDZjNi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjE2ICswLDAgQEAK
LS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vCi0vLyBTeW1ib2wgdGFibGUgZm9yIHBhcnNpbmcuICBN
b3N0IGZ1bmN0aW9uYWxpeSBhbmQgbWFpbiBpZGVhcwotLy8gYXJlIGRvY3VtZW50ZWQgaW4gdGhl
IGhlYWRlciBmaWxlLgotLy8KLQotI2lmIGRlZmluZWQoX01TQ19WRVIpCi0jcHJhZ21hIHdhcm5p
bmcoZGlzYWJsZTogNDcxOCkKLSNlbmRpZgotCi0jaW5jbHVkZSAiY29tcGlsZXIvU3ltYm9sVGFi
bGUuaCIKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1
ZGUgPGNsaW1pdHM+Ci0KLVRUeXBlOjpUVHlwZShjb25zdCBUUHVibGljVHlwZSAmcCkgOgotICAg
ICAgICAgICAgdHlwZShwLnR5cGUpLCBwcmVjaXNpb24ocC5wcmVjaXNpb24pLCBxdWFsaWZpZXIo
cC5xdWFsaWZpZXIpLCBzaXplKHAuc2l6ZSksIG1hdHJpeChwLm1hdHJpeCksIGFycmF5KHAuYXJy
YXkpLCBhcnJheVNpemUocC5hcnJheVNpemUpLCBzdHJ1Y3R1cmUoMCkKLXsKLSAgICBpZiAocC51
c2VyRGVmKQotICAgICAgICBzdHJ1Y3R1cmUgPSBwLnVzZXJEZWYtPmdldFN0cnVjdCgpOwotfQot
Ci0vLwotLy8gUmVjdXJzaXZlbHkgZ2VuZXJhdGUgbWFuZ2xlZCBuYW1lcy4KLS8vCi1UU3RyaW5n
IFRUeXBlOjpidWlsZE1hbmdsZWROYW1lKCkgY29uc3QKLXsKLSAgICBUU3RyaW5nIG1hbmdsZWRO
YW1lOwotICAgIGlmIChpc01hdHJpeCgpKQotICAgICAgICBtYW5nbGVkTmFtZSArPSAnbSc7Ci0g
ICAgZWxzZSBpZiAoaXNWZWN0b3IoKSkKLSAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ3YnOwotCi0g
ICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBFYnRGbG9hdDogICAgICAgbWFuZ2xlZE5hbWUg
Kz0gJ2YnOyAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0SW50OiAgICAgICAgIG1hbmdsZWROYW1l
ICs9ICdpJzsgICAgICBicmVhazsKLSAgICBjYXNlIEVidEJvb2w6ICAgICAgICBtYW5nbGVkTmFt
ZSArPSAnYic7ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgbWFuZ2xlZE5h
bWUgKz0gInMyIjsgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6IG1hbmdsZWRO
YW1lICs9ICJzQyI7ICAgICBicmVhazsKLSAgICBjYXNlIEVidFN0cnVjdDogICAgICBtYW5nbGVk
TmFtZSArPSBzdHJ1Y3R1cmUtPm1hbmdsZWROYW1lKCk7IGJyZWFrOwotICAgIGRlZmF1bHQ6ICAg
ICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIG1hbmdsZWROYW1lICs9IHN0YXRpY19jYXN0
PGNoYXI+KCcwJyArIGdldE5vbWluYWxTaXplKCkpOwotICAgIGlmIChpc0FycmF5KCkpIHsKLSAg
ICAgICAgY2hhciBidWZbMjBdOwotICAgICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAi
JWQiLCBhcnJheVNpemUpOwotICAgICAgICBtYW5nbGVkTmFtZSArPSAnWyc7Ci0gICAgICAgIG1h
bmdsZWROYW1lICs9IGJ1ZjsKLSAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ10nOwotICAgIH0KLSAg
ICByZXR1cm4gbWFuZ2xlZE5hbWU7Ci19Ci0KLXNpemVfdCBUVHlwZTo6Z2V0T2JqZWN0U2l6ZSgp
IGNvbnN0Ci17Ci0gICAgc2l6ZV90IHRvdGFsU2l6ZSA9IDA7Ci0KLSAgICBpZiAoZ2V0QmFzaWNU
eXBlKCkgPT0gRWJ0U3RydWN0KQotICAgICAgICB0b3RhbFNpemUgPSBzdHJ1Y3R1cmUtPm9iamVj
dFNpemUoKTsKLSAgICBlbHNlIGlmIChtYXRyaXgpCi0gICAgICAgIHRvdGFsU2l6ZSA9IHNpemUg
KiBzaXplOwotICAgIGVsc2UKLSAgICAgICAgdG90YWxTaXplID0gc2l6ZTsKLQotICAgIGlmIChp
c0FycmF5KCkpIHsKLSAgICAgICAgc2l6ZV90IGFycmF5U2l6ZSA9IGdldEFycmF5U2l6ZSgpOwot
ICAgICAgICBpZiAoYXJyYXlTaXplID4gSU5UX01BWCAvIHRvdGFsU2l6ZSkKLSAgICAgICAgICAg
IHRvdGFsU2l6ZSA9IElOVF9NQVg7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRvdGFsU2l6
ZSAqPSBhcnJheVNpemU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRvdGFsU2l6ZTsKLX0KLQotYm9v
bCBUU3RydWN0dXJlOjpjb250YWluc0FycmF5cygpIGNvbnN0Ci17Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtRmllbGRzLT5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBUVHlwZSog
ZmllbGRUeXBlID0gKCptRmllbGRzKVtpXS0+dHlwZSgpOwotICAgICAgICBpZiAoZmllbGRUeXBl
LT5pc0FycmF5KCkgfHwgZmllbGRUeXBlLT5pc1N0cnVjdHVyZUNvbnRhaW5pbmdBcnJheXMoKSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LVRTdHJpbmcgVFN0cnVjdHVyZTo6YnVpbGRNYW5nbGVkTmFtZSgpIGNvbnN0Ci17Ci0gICAgVFN0
cmluZyBtYW5nbGVkTmFtZSgic3RydWN0LSIpOwotICAgIG1hbmdsZWROYW1lICs9ICptTmFtZTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1GaWVsZHMtPnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIG1hbmdsZWROYW1lICs9ICctJzsKLSAgICAgICAgbWFuZ2xlZE5hbWUgKz0gKCptRmllbGRz
KVtpXS0+dHlwZSgpLT5nZXRNYW5nbGVkTmFtZSgpOwotICAgIH0KLSAgICByZXR1cm4gbWFuZ2xl
ZE5hbWU7Ci19Ci0KLXNpemVfdCBUU3RydWN0dXJlOjpjYWxjdWxhdGVPYmplY3RTaXplKCkgY29u
c3QKLXsKLSAgICBzaXplX3Qgc2l6ZSA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
RmllbGRzLT5zaXplKCk7ICsraSkgewotICAgICAgICBzaXplX3QgZmllbGRTaXplID0gKCptRmll
bGRzKVtpXS0+dHlwZSgpLT5nZXRPYmplY3RTaXplKCk7Ci0gICAgICAgIGlmIChmaWVsZFNpemUg
PiBJTlRfTUFYIC0gc2l6ZSkKLSAgICAgICAgICAgIHNpemUgPSBJTlRfTUFYOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBzaXplICs9IGZpZWxkU2l6ZTsKLSAgICB9Ci0gICAgcmV0dXJuIHNp
emU7Ci19Ci0KLWludCBUU3RydWN0dXJlOjpjYWxjdWxhdGVEZWVwZXN0TmVzdGluZygpIGNvbnN0
Ci17Ci0gICAgaW50IG1heE5lc3RpbmcgPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bUZpZWxkcy0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgbWF4TmVzdGluZyA9IHN0ZDo6bWF4KG1h
eE5lc3RpbmcsICgqbUZpZWxkcylbaV0tPnR5cGUoKS0+Z2V0RGVlcGVzdFN0cnVjdE5lc3Rpbmco
KSk7Ci0gICAgfQotICAgIHJldHVybiAxICsgbWF4TmVzdGluZzsKLX0KLQotLy8KLS8vIER1bXAg
ZnVuY3Rpb25zLgotLy8KLQotdm9pZCBUVmFyaWFibGU6OmR1bXAoVEluZm9TaW5rJiBpbmZvU2lu
aykgY29uc3QKLXsKLSAgICBpbmZvU2luay5kZWJ1ZyA8PCBnZXROYW1lKCkuY19zdHIoKSA8PCAi
OiAiIDw8IHR5cGUuZ2V0UXVhbGlmaWVyU3RyaW5nKCkgPDwgIiAiIDw8IHR5cGUuZ2V0UHJlY2lz
aW9uU3RyaW5nKCkgPDwgIiAiIDw8IHR5cGUuZ2V0QmFzaWNTdHJpbmcoKTsKLSAgICBpZiAodHlw
ZS5pc0FycmF5KCkpIHsKLSAgICAgICAgaW5mb1NpbmsuZGVidWcgPDwgIlswXSI7Ci0gICAgfQot
ICAgIGluZm9TaW5rLmRlYnVnIDw8ICJcbiI7Ci19Ci0KLXZvaWQgVEZ1bmN0aW9uOjpkdW1wKFRJ
bmZvU2luayAmaW5mb1NpbmspIGNvbnN0Ci17Ci0gICAgaW5mb1NpbmsuZGVidWcgPDwgZ2V0TmFt
ZSgpLmNfc3RyKCkgPDwgIjogIiA8PCAgcmV0dXJuVHlwZS5nZXRCYXNpY1N0cmluZygpIDw8ICIg
IiA8PCBnZXRNYW5nbGVkTmFtZSgpLmNfc3RyKCkgPDwgIlxuIjsKLX0KLQotdm9pZCBUU3ltYm9s
VGFibGVMZXZlbDo6ZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdAotewotICAgIHRMZXZl
bDo6Y29uc3RfaXRlcmF0b3IgaXQ7Ci0gICAgZm9yIChpdCA9IGxldmVsLmJlZ2luKCk7IGl0ICE9
IGxldmVsLmVuZCgpOyArK2l0KQotICAgICAgICAoKml0KS5zZWNvbmQtPmR1bXAoaW5mb1Npbmsp
OwotfQotCi12b2lkIFRTeW1ib2xUYWJsZTo6ZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25z
dAotewotICAgIGZvciAoaW50IGxldmVsID0gY3VycmVudExldmVsKCk7IGxldmVsID49IDA7IC0t
bGV2ZWwpIHsKLSAgICAgICAgaW5mb1NpbmsuZGVidWcgPDwgIkxFVkVMICIgPDwgbGV2ZWwgPDwg
IlxuIjsKLSAgICAgICAgdGFibGVbbGV2ZWxdLT5kdW1wKGluZm9TaW5rKTsKLSAgICB9Ci19Ci0K
LS8vCi0vLyBGdW5jdGlvbnMgaGF2ZSBidXJpZWQgcG9pbnRlcnMgdG8gZGVsZXRlLgotLy8KLVRG
dW5jdGlvbjo6flRGdW5jdGlvbigpCi17Ci0gICAgZm9yIChUUGFyYW1MaXN0OjppdGVyYXRvciBp
ID0gcGFyYW1ldGVycy5iZWdpbigpOyBpICE9IHBhcmFtZXRlcnMuZW5kKCk7ICsraSkKLSAgICAg
ICAgZGVsZXRlICgqaSkudHlwZTsKLX0KLQotLy8KLS8vIFN5bWJvbCB0YWJsZSBsZXZlbHMgYXJl
IGEgbWFwIG9mIHBvaW50ZXJzIHRvIHN5bWJvbHMgdGhhdCBoYXZlIHRvIGJlIGRlbGV0ZWQuCi0v
LwotVFN5bWJvbFRhYmxlTGV2ZWw6On5UU3ltYm9sVGFibGVMZXZlbCgpCi17Ci0gICAgZm9yICh0
TGV2ZWw6Oml0ZXJhdG9yIGl0ID0gbGV2ZWwuYmVnaW4oKTsgaXQgIT0gbGV2ZWwuZW5kKCk7ICsr
aXQpCi0gICAgICAgIGRlbGV0ZSAoKml0KS5zZWNvbmQ7Ci19Ci0KLS8vCi0vLyBDaGFuZ2UgYWxs
IGZ1bmN0aW9uIGVudHJpZXMgaW4gdGhlIHRhYmxlIHdpdGggdGhlIG5vbi1tYW5nbGVkIG5hbWUK
LS8vIHRvIGJlIHJlbGF0ZWQgdG8gdGhlIHByb3ZpZGVkIGJ1aWx0LWluIG9wZXJhdGlvbi4gIFRo
aXMgaXMgYSBsb3cKLS8vIHBlcmZvcm1hbmNlIG9wZXJhdGlvbiwgYW5kIG9ubHkgaW50ZW5kZWQg
Zm9yIHN5bWJvbCB0YWJsZXMgdGhhdAotLy8gbGl2ZSBhY3Jvc3MgYSBsYXJnZSBudW1iZXIgb2Yg
Y29tcGlsZXMuCi0vLwotdm9pZCBUU3ltYm9sVGFibGVMZXZlbDo6cmVsYXRlVG9PcGVyYXRvcihj
b25zdCBjaGFyKiBuYW1lLCBUT3BlcmF0b3Igb3ApCi17Ci0gICAgdExldmVsOjppdGVyYXRvciBp
dDsKLSAgICBmb3IgKGl0ID0gbGV2ZWwuYmVnaW4oKTsgaXQgIT0gbGV2ZWwuZW5kKCk7ICsraXQp
IHsKLSAgICAgICAgaWYgKCgqaXQpLnNlY29uZC0+aXNGdW5jdGlvbigpKSB7Ci0gICAgICAgICAg
ICBURnVuY3Rpb24qIGZ1bmN0aW9uID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oKCppdCkuc2Vj
b25kKTsKLSAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0TmFtZSgpID09IG5hbWUpCi0gICAg
ICAgICAgICAgICAgZnVuY3Rpb24tPnJlbGF0ZVRvT3BlcmF0b3Iob3ApOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi0vLwotLy8gQ2hhbmdlIGFsbCBmdW5jdGlvbiBlbnRyaWVzIGluIHRoZSB0YWJs
ZSB3aXRoIHRoZSBub24tbWFuZ2xlZCBuYW1lCi0vLyB0byBiZSByZWxhdGVkIHRvIHRoZSBwcm92
aWRlZCBidWlsdC1pbiBleHRlbnNpb24uIFRoaXMgaXMgYSBsb3cKLS8vIHBlcmZvcm1hbmNlIG9w
ZXJhdGlvbiwgYW5kIG9ubHkgaW50ZW5kZWQgZm9yIHN5bWJvbCB0YWJsZXMgdGhhdAotLy8gbGl2
ZSBhY3Jvc3MgYSBsYXJnZSBudW1iZXIgb2YgY29tcGlsZXMuCi0vLwotdm9pZCBUU3ltYm9sVGFi
bGVMZXZlbDo6cmVsYXRlVG9FeHRlbnNpb24oY29uc3QgY2hhciogbmFtZSwgY29uc3QgVFN0cmlu
ZyYgZXh0KQotewotICAgIGZvciAodExldmVsOjppdGVyYXRvciBpdCA9IGxldmVsLmJlZ2luKCk7
IGl0ICE9IGxldmVsLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIFRTeW1ib2wqIHN5bWJvbCA9IGl0
LT5zZWNvbmQ7Ci0gICAgICAgIGlmIChzeW1ib2wtPmdldE5hbWUoKSA9PSBuYW1lKQotICAgICAg
ICAgICAgc3ltYm9sLT5yZWxhdGVUb0V4dGVuc2lvbihleHQpOwotICAgIH0KLX0KLQotVFN5bWJv
bFRhYmxlOjp+VFN5bWJvbFRhYmxlKCkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRh
YmxlLnNpemUoKTsgKytpKQotICAgICAgICBkZWxldGUgdGFibGVbaV07Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBwcmVjaXNpb25TdGFjay5zaXplKCk7ICsraSkKLSAgICAgICAgZGVsZXRl
IHByZWNpc2lvblN0YWNrW2ldOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvU3ltYm9sVGFibGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YmViYWQ0YjkyZTc5MGJjNjI1M2QwMmVjMGYwNzY2MWY5OGM0MzgwYy4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvU3ltYm9sVGFibGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4MiArMCwwIEBA
Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIF9TWU1CT0xfVEFCTEVfSU5DTFVERURfCi0j
ZGVmaW5lIF9TWU1CT0xfVEFCTEVfSU5DTFVERURfCi0KLS8vCi0vLyBTeW1ib2wgdGFibGUgZm9y
IHBhcnNpbmcuICBIYXMgdGhlc2UgZGVzaWduIGNoYXJhY3RlcmlzdGljczoKLS8vCi0vLyAqIFNh
bWUgc3ltYm9sIHRhYmxlIGNhbiBiZSB1c2VkIHRvIGNvbXBpbGUgbWFueSBzaGFkZXJzLCB0byBw
cmVzZXJ2ZQotLy8gICBlZmZvcnQgb2YgY3JlYXRpbmcgYW5kIGxvYWRpbmcgd2l0aCB0aGUgbGFy
Z2UgbnVtYmVycyBvZiBidWlsdC1pbgotLy8gICBzeW1ib2xzLgotLy8KLS8vICogTmFtZSBtYW5n
bGluZyB3aWxsIGJlIHVzZWQgdG8gZ2l2ZSBlYWNoIGZ1bmN0aW9uIGEgdW5pcXVlIG5hbWUKLS8v
ICAgc28gdGhhdCBzeW1ib2wgdGFibGUgbG9va3VwcyBhcmUgbmV2ZXIgYW1iaWd1b3VzLiAgVGhp
cyBhbGxvd3MKLS8vICAgYSBzaW1wbGVyIHN5bWJvbCB0YWJsZSBzdHJ1Y3R1cmUuCi0vLwotLy8g
KiBQdXNoaW5nIGFuZCBwb3BwaW5nIG9mIHNjb3BlLCBzbyBzeW1ib2wgdGFibGUgd2lsbCByZWFs
bHkgYmUgYSBzdGFjayAKLS8vICAgb2Ygc3ltYm9sIHRhYmxlcy4gIFNlYXJjaGVkIGZyb20gdGhl
IHRvcCwgd2l0aCBuZXcgaW5zZXJ0cyBnb2luZyBpbnRvCi0vLyAgIHRoZSB0b3AuCi0vLwotLy8g
KiBDb25zdGFudHM6ICBDb21waWxlIHRpbWUgY29uc3RhbnQgc3ltYm9scyB3aWxsIGtlZXAgdGhl
aXIgdmFsdWVzCi0vLyAgIGluIHRoZSBzeW1ib2wgdGFibGUuICBUaGUgcGFyc2VyIGNhbiBzdWJz
dGl0dXRlIGNvbnN0YW50cyBhdCBwYXJzZQotLy8gICB0aW1lLCBpbmNsdWRpbmcgZG9pbmcgY29u
c3RhbnQgZm9sZGluZyBhbmQgY29uc3RhbnQgcHJvcGFnYXRpb24uCi0vLwotLy8gKiBObyB0ZW1w
b3JhcmllczogIFRlbXBvcmFyaWVzIG1hZGUgZnJvbSBvcGVyYXRpb25zICgrLCAtLSwgLnh5LCBl
dGMuKQotLy8gICBhcmUgdHJhY2tlZCBpbiB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9u
LCBub3QgdGhlIHN5bWJvbCB0YWJsZS4KLS8vCi0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLQotI2lu
Y2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5mb1Npbmsu
aCIKLSNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKLQotLy8KLS8vIFN5bWJvbCBi
YXNlIGNsYXNzLiAgKENhbiBidWlsZCBmdW5jdGlvbnMgb3IgdmFyaWFibGVzIG91dCBvZiB0aGVz
ZS4uLikKLS8vCi1jbGFzcyBUU3ltYm9sIHsgICAgCi1wdWJsaWM6Ci0gICAgUE9PTF9BTExPQ0FU
T1JfTkVXX0RFTEVURSgpOwotICAgIFRTeW1ib2woY29uc3QgVFN0cmluZyogbikgOiAgdW5pcXVl
SWQoMCksIG5hbWUobikgeyB9Ci0gICAgdmlydHVhbCB+VFN5bWJvbCgpIHsgLyogZG9uJ3QgZGVs
ZXRlIG5hbWUsIGl0J3MgZnJvbSB0aGUgcG9vbCAqLyB9Ci0KLSAgICBjb25zdCBUU3RyaW5nJiBn
ZXROYW1lKCkgY29uc3QgeyByZXR1cm4gKm5hbWU7IH0KLSAgICB2aXJ0dWFsIGNvbnN0IFRTdHJp
bmcmIGdldE1hbmdsZWROYW1lKCkgY29uc3QgeyByZXR1cm4gZ2V0TmFtZSgpOyB9Ci0gICAgdmly
dHVhbCBib29sIGlzRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1
YWwgYm9vbCBpc1ZhcmlhYmxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2b2lkIHNl
dFVuaXF1ZUlkKGludCBpZCkgeyB1bmlxdWVJZCA9IGlkOyB9Ci0gICAgaW50IGdldFVuaXF1ZUlk
KCkgY29uc3QgeyByZXR1cm4gdW5pcXVlSWQ7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZHVtcChUSW5m
b1NpbmsgJmluZm9TaW5rKSBjb25zdCA9IDA7Ci0gICAgdm9pZCByZWxhdGVUb0V4dGVuc2lvbihj
b25zdCBUU3RyaW5nJiBleHQpIHsgZXh0ZW5zaW9uID0gZXh0OyB9Ci0gICAgY29uc3QgVFN0cmlu
ZyYgZ2V0RXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gZXh0ZW5zaW9uOyB9Ci0KLXByaXZhdGU6
Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRTeW1ib2wpOwotCi0gICAgaW50IHVuaXF1
ZUlkOyAgICAgIC8vIEZvciByZWFsIGNvbXBhcmluZyBkdXJpbmcgY29kZSBnZW5lcmF0aW9uCi0g
ICAgY29uc3QgVFN0cmluZyAqbmFtZTsKLSAgICBUU3RyaW5nIGV4dGVuc2lvbjsKLX07Ci0KLS8v
Ci0vLyBWYXJpYWJsZSBjbGFzcywgbWVhbmluZyBhIHN5bWJvbCB0aGF0J3Mgbm90IGEgZnVuY3Rp
b24uCi0vLyAKLS8vIFRoZXJlIGNvdWxkIGJlIGEgc2VwYXJhdGUgY2xhc3MgaGVpcmFyY2h5IGZv
ciBDb25zdGFudCB2YXJpYWJsZXM7Ci0vLyBPbmx5IG9uZSBvZiBpbnQsIGJvb2wsIG9yIGZsb2F0
LCAob3Igbm9uZSkgaXMgY29ycmVjdCBmb3IKLS8vIGFueSBwYXJ0aWN1bGFyIHVzZSwgYnV0IGl0
J3MgZWFzeSB0byBkbyB0aGlzIHdheSwgYW5kIGRvZXNuJ3QKLS8vIHNlZW0gd29ydGggaGF2aW5n
IHNlcGFyYXRlIGNsYXNzZXMsIGFuZCAiZ2V0Q29uc3QiIGNhbid0IHNpbXBseSByZXR1cm4KLS8v
IGRpZmZlcmVudCB2YWx1ZXMgZm9yIGRpZmZlcmVudCB0eXBlcyBwb2x5bW9ycGhpY2FsbHksIHNv
IHRoaXMgaXMgCi0vLyBqdXN0IHNpbXBsZSBhbmQgcHJhZ21hdGljLgotLy8KLWNsYXNzIFRWYXJp
YWJsZSA6IHB1YmxpYyBUU3ltYm9sIHsKLXB1YmxpYzoKLSAgICBUVmFyaWFibGUoY29uc3QgVFN0
cmluZyAqbmFtZSwgY29uc3QgVFR5cGUmIHQsIGJvb2wgdVQgPSBmYWxzZSApIDogVFN5bWJvbChu
YW1lKSwgdHlwZSh0KSwgdXNlclR5cGUodVQpLCB1bmlvbkFycmF5KDApIHsgfQotICAgIHZpcnR1
YWwgflRWYXJpYWJsZSgpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBpc1ZhcmlhYmxlKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfSAgICAKLSAgICBUVHlwZSYgZ2V0VHlwZSgpIHsgcmV0dXJuIHR5cGU7
IH0gICAgCi0gICAgY29uc3QgVFR5cGUmIGdldFR5cGUoKSBjb25zdCB7IHJldHVybiB0eXBlOyB9
Ci0gICAgYm9vbCBpc1VzZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gdXNlclR5cGU7IH0KLSAgICB2
b2lkIHNldFF1YWxpZmllcihUUXVhbGlmaWVyIHF1YWxpZmllcikgeyB0eXBlLnNldFF1YWxpZmll
cihxdWFsaWZpZXIpOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHVtcChUSW5mb1NpbmsgJmluZm9T
aW5rKSBjb25zdDsKLQotICAgIENvbnN0YW50VW5pb24qIGdldENvbnN0UG9pbnRlcigpCi0gICAg
eyAKLSAgICAgICAgaWYgKCF1bmlvbkFycmF5KQotICAgICAgICAgICAgdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uW3R5cGUuZ2V0T2JqZWN0U2l6ZSgpXTsKLQotICAgICAgICByZXR1cm4g
dW5pb25BcnJheTsKLSAgICB9Ci0KLSAgICBDb25zdGFudFVuaW9uKiBnZXRDb25zdFBvaW50ZXIo
KSBjb25zdCB7IHJldHVybiB1bmlvbkFycmF5OyB9Ci0KLSAgICB2b2lkIHNoYXJlQ29uc3RQb2lu
dGVyKCBDb25zdGFudFVuaW9uICpjb25zdEFycmF5KQotICAgIHsKLSAgICAgICAgaWYgKHVuaW9u
QXJyYXkgPT0gY29uc3RBcnJheSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBkZWxl
dGVbXSB1bmlvbkFycmF5OwotICAgICAgICB1bmlvbkFycmF5ID0gY29uc3RBcnJheTsgIAotICAg
IH0KLQotcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVFZhcmlhYmxlKTsK
LQotICAgIFRUeXBlIHR5cGU7Ci0gICAgYm9vbCB1c2VyVHlwZTsKLSAgICAvLyB3ZSBhcmUgYXNz
dW1pbmcgdGhhdCBQb29sIEFsbG9jYXRvciB3aWxsIGZyZWUgdGhlIG1lbW9yeSBhbGxvY2F0ZWQg
dG8gdW5pb25BcnJheQotICAgIC8vIHdoZW4gdGhpcyBvYmplY3QgaXMgZGVzdHJveWVkCi0gICAg
Q29uc3RhbnRVbmlvbiAqdW5pb25BcnJheTsKLX07Ci0KLS8vCi0vLyBUaGUgZnVuY3Rpb24gc3Vi
LWNsYXNzIG9mIHN5bWJvbHMgYW5kIHRoZSBwYXJzZXIgd2lsbCBuZWVkIHRvCi0vLyBzaGFyZSB0
aGlzIGRlZmluaXRpb24gb2YgYSBmdW5jdGlvbiBwYXJhbWV0ZXIuCi0vLwotc3RydWN0IFRQYXJh
bWV0ZXIgewotICAgIFRTdHJpbmcgKm5hbWU7Ci0gICAgVFR5cGUqIHR5cGU7Ci19OwotCi0vLwot
Ly8gVGhlIGZ1bmN0aW9uIHN1Yi1jbGFzcyBvZiBhIHN5bWJvbC4gIAotLy8KLWNsYXNzIFRGdW5j
dGlvbiA6IHB1YmxpYyBUU3ltYm9sIHsKLXB1YmxpYzoKLSAgICBURnVuY3Rpb24oVE9wZXJhdG9y
IG8pIDoKLSAgICAgICAgVFN5bWJvbCgwKSwKLSAgICAgICAgcmV0dXJuVHlwZShUVHlwZShFYnRW
b2lkLCBFYnBVbmRlZmluZWQpKSwKLSAgICAgICAgb3AobyksCi0gICAgICAgIGRlZmluZWQoZmFs
c2UpIHsgfQotICAgIFRGdW5jdGlvbihjb25zdCBUU3RyaW5nICpuYW1lLCBUVHlwZSYgcmV0VHlw
ZSwgVE9wZXJhdG9yIHRPcCA9IEVPcE51bGwpIDogCi0gICAgICAgIFRTeW1ib2wobmFtZSksIAot
ICAgICAgICByZXR1cm5UeXBlKHJldFR5cGUpLAotICAgICAgICBtYW5nbGVkTmFtZShURnVuY3Rp
b246Om1hbmdsZU5hbWUoKm5hbWUpKSwKLSAgICAgICAgb3AodE9wKSwKLSAgICAgICAgZGVmaW5l
ZChmYWxzZSkgeyB9Ci0gICAgdmlydHVhbCB+VEZ1bmN0aW9uKCk7Ci0gICAgdmlydHVhbCBib29s
IGlzRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9ICAgIAotCi0gICAgc3RhdGljIFRT
dHJpbmcgbWFuZ2xlTmFtZShjb25zdCBUU3RyaW5nJiBuYW1lKSB7IHJldHVybiBuYW1lICsgJygn
OyB9Ci0gICAgc3RhdGljIFRTdHJpbmcgdW5tYW5nbGVOYW1lKGNvbnN0IFRTdHJpbmcmIG1hbmds
ZWROYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFRTdHJpbmcobWFuZ2xlZE5hbWUuY19zdHIo
KSwgbWFuZ2xlZE5hbWUuZmluZF9maXJzdF9vZignKCcpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGFk
ZFBhcmFtZXRlcihUUGFyYW1ldGVyJiBwKSAKLSAgICB7IAotICAgICAgICBwYXJhbWV0ZXJzLnB1
c2hfYmFjayhwKTsKLSAgICAgICAgbWFuZ2xlZE5hbWUgPSBtYW5nbGVkTmFtZSArIHAudHlwZS0+
Z2V0TWFuZ2xlZE5hbWUoKTsKLSAgICB9Ci0KLSAgICBjb25zdCBUU3RyaW5nJiBnZXRNYW5nbGVk
TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1hbmdsZWROYW1lOyB9Ci0gICAgY29uc3QgVFR5cGUmIGdl
dFJldHVyblR5cGUoKSBjb25zdCB7IHJldHVybiByZXR1cm5UeXBlOyB9Ci0KLSAgICB2b2lkIHJl
bGF0ZVRvT3BlcmF0b3IoVE9wZXJhdG9yIG8pIHsgb3AgPSBvOyB9Ci0gICAgVE9wZXJhdG9yIGdl
dEJ1aWx0SW5PcCgpIGNvbnN0IHsgcmV0dXJuIG9wOyB9Ci0KLSAgICB2b2lkIHNldERlZmluZWQo
KSB7IGRlZmluZWQgPSB0cnVlOyB9Ci0gICAgYm9vbCBpc0RlZmluZWQoKSB7IHJldHVybiBkZWZp
bmVkOyB9Ci0KLSAgICBzaXplX3QgZ2V0UGFyYW1Db3VudCgpIGNvbnN0IHsgcmV0dXJuIHBhcmFt
ZXRlcnMuc2l6ZSgpOyB9ICAKLSAgICBjb25zdCBUUGFyYW1ldGVyJiBnZXRQYXJhbShzaXplX3Qg
aSkgY29uc3QgeyByZXR1cm4gcGFyYW1ldGVyc1tpXTsgfQotCi0gICAgdmlydHVhbCB2b2lkIGR1
bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgRElTQUxMT1df
Q09QWV9BTkRfQVNTSUdOKFRGdW5jdGlvbik7Ci0KLSAgICB0eXBlZGVmIFRWZWN0b3I8VFBhcmFt
ZXRlcj4gVFBhcmFtTGlzdDsKLSAgICBUUGFyYW1MaXN0IHBhcmFtZXRlcnM7Ci0gICAgVFR5cGUg
cmV0dXJuVHlwZTsKLSAgICBUU3RyaW5nIG1hbmdsZWROYW1lOwotICAgIFRPcGVyYXRvciBvcDsK
LSAgICBib29sIGRlZmluZWQ7Ci19OwotCi0KLWNsYXNzIFRTeW1ib2xUYWJsZUxldmVsIHsKLXB1
YmxpYzoKLSAgICB0eXBlZGVmIFRNYXA8VFN0cmluZywgVFN5bWJvbCo+IHRMZXZlbDsKLSAgICB0
eXBlZGVmIHRMZXZlbDo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7Ci0gICAgdHlwZWRl
ZiBjb25zdCB0TGV2ZWw6OnZhbHVlX3R5cGUgdExldmVsUGFpcjsKLSAgICB0eXBlZGVmIHN0ZDo6
cGFpcjx0TGV2ZWw6Oml0ZXJhdG9yLCBib29sPiB0SW5zZXJ0UmVzdWx0OwotCi0gICAgVFN5bWJv
bFRhYmxlTGV2ZWwoKSB7IH0KLSAgICB+VFN5bWJvbFRhYmxlTGV2ZWwoKTsKLQotICAgIGJvb2wg
aW5zZXJ0KGNvbnN0IFRTdHJpbmcgJm5hbWUsIFRTeW1ib2wgJnN5bWJvbCkKLSAgICB7Ci0gICAg
ICAgIC8vCi0gICAgICAgIC8vIHJldHVybmluZyB0cnVlIG1lYW5zIHN5bWJvbCB3YXMgYWRkZWQg
dG8gdGhlIHRhYmxlCi0gICAgICAgIC8vCi0gICAgICAgIHRJbnNlcnRSZXN1bHQgcmVzdWx0ID0g
bGV2ZWwuaW5zZXJ0KHRMZXZlbFBhaXIobmFtZSwgJnN5bWJvbCkpOwotCi0gICAgICAgIHJldHVy
biByZXN1bHQuc2Vjb25kOwotICAgIH0KLQotICAgIGJvb2wgaW5zZXJ0KFRTeW1ib2wgJnN5bWJv
bCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpbnNlcnQoc3ltYm9sLmdldE1hbmdsZWROYW1lKCks
IHN5bWJvbCk7Ci0gICAgfQotCi0gICAgVFN5bWJvbCogZmluZChjb25zdCBUU3RyaW5nJiBuYW1l
KSBjb25zdAotICAgIHsKLSAgICAgICAgdExldmVsOjpjb25zdF9pdGVyYXRvciBpdCA9IGxldmVs
LmZpbmQobmFtZSk7Ci0gICAgICAgIGlmIChpdCA9PSBsZXZlbC5lbmQoKSkKLSAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gKCppdCkuc2Vjb25k
OwotICAgIH0KLQotICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBsZXZlbC5iZWdpbigpOwotICAgIH0KLQotICAgIGNvbnN0X2l0ZXJhdG9yIGVu
ZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbGV2ZWwuZW5kKCk7Ci0gICAgfQotCi0g
ICAgdm9pZCByZWxhdGVUb09wZXJhdG9yKGNvbnN0IGNoYXIqIG5hbWUsIFRPcGVyYXRvciBvcCk7
Ci0gICAgdm9pZCByZWxhdGVUb0V4dGVuc2lvbihjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBUU3Ry
aW5nJiBleHQpOwotICAgIHZvaWQgZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdDsKLQot
cHJvdGVjdGVkOgotICAgIHRMZXZlbCBsZXZlbDsKLX07Ci0KLWNsYXNzIFRTeW1ib2xUYWJsZSB7
Ci1wdWJsaWM6Ci0gICAgVFN5bWJvbFRhYmxlKCkgOiB1bmlxdWVJZCgwKQotICAgIHsKLSAgICAg
ICAgLy8KLSAgICAgICAgLy8gVGhlIHN5bWJvbCB0YWJsZSBjYW5ub3QgYmUgdXNlZCB1bnRpbCBw
dXNoKCkgaXMgY2FsbGVkLCBidXQKLSAgICAgICAgLy8gdGhlIGxhY2sgb2YgYW4gaW5pdGlhbCBj
YWxsIHRvIHB1c2goKSBjYW4gYmUgdXNlZCB0byBkZXRlY3QKLSAgICAgICAgLy8gdGhhdCB0aGUg
c3ltYm9sIHRhYmxlIGhhcyBub3QgYmVlbiBwcmVsb2FkZWQgd2l0aCBidWlsdC1pbnMuCi0gICAg
ICAgIC8vCi0gICAgfQotICAgIH5UU3ltYm9sVGFibGUoKTsKLQotICAgIC8vCi0gICAgLy8gV2hl
biB0aGUgc3ltYm9sIHRhYmxlIGlzIGluaXRpYWxpemVkIHdpdGggdGhlIGJ1aWx0LWlucywgdGhl
cmUgc2hvdWxkCi0gICAgLy8gJ3B1c2gnIGNhbGxzLCBzbyB0aGF0IGJ1aWx0LWlucyBhcmUgYXQg
bGV2ZWwgMCBhbmQgdGhlIHNoYWRlcgotICAgIC8vIGdsb2JhbHMgYXJlIGF0IGxldmVsIDEuCi0g
ICAgLy8KLSAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiB0YWJsZS5zaXplKCkgPT0gMDsgfQot
ICAgIGJvb2wgYXRCdWlsdEluTGV2ZWwoKSB7IHJldHVybiB0YWJsZS5zaXplKCkgPT0gMTsgfQot
ICAgIGJvb2wgYXRHbG9iYWxMZXZlbCgpIHsgcmV0dXJuIHRhYmxlLnNpemUoKSA8PSAyOyB9Ci0g
ICAgdm9pZCBwdXNoKCkKLSAgICB7Ci0gICAgICAgIHRhYmxlLnB1c2hfYmFjayhuZXcgVFN5bWJv
bFRhYmxlTGV2ZWwpOwotICAgICAgICBwcmVjaXNpb25TdGFjay5wdXNoX2JhY2sobmV3IFByZWNp
c2lvblN0YWNrTGV2ZWwpOwotICAgIH0KLQotICAgIHZvaWQgcG9wKCkKLSAgICB7Ci0gICAgICAg
IGRlbGV0ZSB0YWJsZS5iYWNrKCk7Ci0gICAgICAgIHRhYmxlLnBvcF9iYWNrKCk7Ci0KLSAgICAg
ICAgZGVsZXRlIHByZWNpc2lvblN0YWNrLmJhY2soKTsKLSAgICAgICAgcHJlY2lzaW9uU3RhY2su
cG9wX2JhY2soKTsKLSAgICB9Ci0KLSAgICBib29sIGluc2VydChUU3ltYm9sJiBzeW1ib2wpCi0g
ICAgewotICAgICAgICBzeW1ib2wuc2V0VW5pcXVlSWQoKyt1bmlxdWVJZCk7Ci0gICAgICAgIHJl
dHVybiB0YWJsZVtjdXJyZW50TGV2ZWwoKV0tPmluc2VydChzeW1ib2wpOwotICAgIH0KLQotICAg
IGJvb2wgaW5zZXJ0Q29uc3RJbnQoY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbHVlKQotICAgIHsK
LSAgICAgICAgVFZhcmlhYmxlICpjb25zdGFudCA9IG5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJp
bmcobmFtZSksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCwgMSkpOwotICAg
ICAgICBjb25zdGFudC0+Z2V0Q29uc3RQb2ludGVyKCktPnNldElDb25zdCh2YWx1ZSk7Ci0gICAg
ICAgIHJldHVybiBpbnNlcnQoKmNvbnN0YW50KTsKLSAgICB9Ci0KLSAgICBib29sIGluc2VydEJ1
aWx0SW4oVFR5cGUgKnJ2YWx1ZSwgY29uc3QgY2hhciAqbmFtZSwgVFR5cGUgKnB0eXBlMSwgVFR5
cGUgKnB0eXBlMiA9IDAsIFRUeXBlICpwdHlwZTMgPSAwKQotICAgIHsKLSAgICAgICAgVEZ1bmN0
aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oTmV3UG9vbFRTdHJpbmcobmFtZSksICpydmFs
dWUpOwotCi0gICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0xID0ge05VTEwsIHB0eXBlMX07Ci0gICAg
ICAgIGZ1bmN0aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW0xKTsKLQotICAgICAgICBpZihwdHlwZTIp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0yID0ge05VTEwsIHB0eXBl
Mn07Ci0gICAgICAgICAgICBmdW5jdGlvbi0+YWRkUGFyYW1ldGVyKHBhcmFtMik7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZihwdHlwZTMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFRQYXJhbWV0
ZXIgcGFyYW0zID0ge05VTEwsIHB0eXBlM307Ci0gICAgICAgICAgICBmdW5jdGlvbi0+YWRkUGFy
YW1ldGVyKHBhcmFtMyk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gaW5zZXJ0KCpmdW5j
dGlvbik7Ci0gICAgfQotCi0gICAgVFN5bWJvbCogZmluZChjb25zdCBUU3RyaW5nJiBuYW1lLCBi
b29sKiBidWlsdEluID0gMCwgYm9vbCAqc2FtZVNjb3BlID0gMCkgCi0gICAgewotICAgICAgICBp
bnQgbGV2ZWwgPSBjdXJyZW50TGV2ZWwoKTsKLSAgICAgICAgVFN5bWJvbCogc3ltYm9sOwotICAg
ICAgICBkbyB7Ci0gICAgICAgICAgICBzeW1ib2wgPSB0YWJsZVtsZXZlbF0tPmZpbmQobmFtZSk7
Ci0gICAgICAgICAgICAtLWxldmVsOwotICAgICAgICB9IHdoaWxlIChzeW1ib2wgPT0gMCAmJiBs
ZXZlbCA+PSAwKTsKLSAgICAgICAgbGV2ZWwrKzsKLSAgICAgICAgaWYgKGJ1aWx0SW4pCi0gICAg
ICAgICAgICAqYnVpbHRJbiA9IGxldmVsID09IDA7Ci0gICAgICAgIGlmIChzYW1lU2NvcGUpCi0g
ICAgICAgICAgICAqc2FtZVNjb3BlID0gbGV2ZWwgPT0gY3VycmVudExldmVsKCk7Ci0gICAgICAg
IHJldHVybiBzeW1ib2w7Ci0gICAgfQotCi0gICAgVFN5bWJvbCogZmluZEJ1aWx0SW4oY29uc3Qg
VFN0cmluZyAmbmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0YWJsZVswXS0+ZmluZChuYW1l
KTsKLSAgICB9Ci0KLSAgICBUU3ltYm9sVGFibGVMZXZlbCogZ2V0T3V0ZXJMZXZlbCgpIHsKLSAg
ICAgICAgYXNzZXJ0KHRhYmxlLnNpemUoKSA+PSAyKTsKLSAgICAgICAgcmV0dXJuIHRhYmxlW2N1
cnJlbnRMZXZlbCgpIC0gMV07Ci0gICAgfQotCi0gICAgdm9pZCByZWxhdGVUb09wZXJhdG9yKGNv
bnN0IGNoYXIqIG5hbWUsIFRPcGVyYXRvciBvcCkgewotICAgICAgICB0YWJsZVswXS0+cmVsYXRl
VG9PcGVyYXRvcihuYW1lLCBvcCk7Ci0gICAgfQotICAgIHZvaWQgcmVsYXRlVG9FeHRlbnNpb24o
Y29uc3QgY2hhciogbmFtZSwgY29uc3QgVFN0cmluZyYgZXh0KSB7Ci0gICAgICAgIHRhYmxlWzBd
LT5yZWxhdGVUb0V4dGVuc2lvbihuYW1lLCBleHQpOwotICAgIH0KLSAgICB2b2lkIGR1bXAoVElu
Zm9TaW5rICZpbmZvU2luaykgY29uc3Q7Ci0KLSAgICBib29sIHNldERlZmF1bHRQcmVjaXNpb24o
Y29uc3QgVFB1YmxpY1R5cGUmIHR5cGUsIFRQcmVjaXNpb24gcHJlYykgewotICAgICAgICBpZiAo
IXN1cHBvcnRzUHJlY2lzaW9uKHR5cGUudHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGlmICh0eXBlLnNpemUgIT0gMSB8fCB0eXBlLm1hdHJpeCB8fCB0eXBlLmFycmF5
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBOb3QgYWxsb3dlZCB0byBzZXQgZm9yIGFn
Z3JlZ2F0ZSB0eXBlcwotICAgICAgICBpbnQgaW5kZXhPZkxhc3RFbGVtZW50ID0gc3RhdGljX2Nh
c3Q8aW50PihwcmVjaXNpb25TdGFjay5zaXplKCkpIC0gMTsKLSAgICAgICAgKCpwcmVjaXNpb25T
dGFja1tpbmRleE9mTGFzdEVsZW1lbnRdKVt0eXBlLnR5cGVdID0gcHJlYzsgLy8gVXNlcyBtYXAg
b3BlcmF0b3IgW10sIG92ZXJ3cml0ZXMgdGhlIGN1cnJlbnQgdmFsdWUKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgLy8gU2VhcmNoZXMgZG93biB0aGUgcHJlY2lzaW9uU3RhY2sg
Zm9yIGEgcHJlY2lzaW9uIHF1YWxpZmllciBmb3IgdGhlIHNwZWNpZmllZCBUQmFzaWNUeXBlCi0g
ICAgVFByZWNpc2lvbiBnZXREZWZhdWx0UHJlY2lzaW9uKFRCYXNpY1R5cGUgdHlwZSkgewotICAg
ICAgICBpZiAoIXN1cHBvcnRzUHJlY2lzaW9uKHR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIEVi
cFVuZGVmaW5lZDsKLSAgICAgICAgaW50IGxldmVsID0gc3RhdGljX2Nhc3Q8aW50PihwcmVjaXNp
b25TdGFjay5zaXplKCkpIC0gMTsKLSAgICAgICAgYXNzZXJ0KGxldmVsID49IDApOyAvLyBKdXN0
IHRvIGJlIHNhZmUuIFNob3VsZCBub3QgaGFwcGVuLgotICAgICAgICBQcmVjaXNpb25TdGFja0xl
dmVsOjppdGVyYXRvciBpdDsKLSAgICAgICAgVFByZWNpc2lvbiBwcmVjID0gRWJwVW5kZWZpbmVk
OyAvLyBJZiB3ZSBkb250IGZpbmQgYW55dGhpbmcgd2UgcmV0dXJuIHRoaXMuIFNob3VsZCB3ZSBl
cnJvciBjaGVjayB0aGlzPwotICAgICAgICB3aGlsZSAobGV2ZWwgPj0gMCkgewotICAgICAgICAg
ICAgaXQgPSBwcmVjaXNpb25TdGFja1tsZXZlbF0tPmZpbmQodHlwZSk7Ci0gICAgICAgICAgICBp
ZiAoaXQgIT0gcHJlY2lzaW9uU3RhY2tbbGV2ZWxdLT5lbmQoKSkgewotICAgICAgICAgICAgICAg
IHByZWMgPSAoKml0KS5zZWNvbmQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBsZXZlbC0tOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBwcmVj
OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbnQgY3VycmVudExldmVsKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8aW50Pih0YWJsZS5zaXplKCkpIC0gMTsgfQotCi0gICAgYm9vbCBzdXBw
b3J0c1ByZWNpc2lvbihUQmFzaWNUeXBlIHR5cGUpIHsKLSAgICAgIC8vIE9ubHkgc3VwcG9ydHMg
cHJlY2lzaW9uIGZvciBpbnQsIGZsb2F0LCBhbmQgc2FtcGxlciB0eXBlcy4KLSAgICAgIHJldHVy
biB0eXBlID09IEVidEZsb2F0IHx8IHR5cGUgPT0gRWJ0SW50IHx8IElzU2FtcGxlcih0eXBlKTsK
LSAgICB9Ci0KLSAgICBpbnQgdW5pcXVlSWQ7ICAgICAvLyBmb3IgdW5pcXVlIGlkZW50aWZpY2F0
aW9uIGluIGNvZGUgZ2VuZXJhdGlvbgotICAgIHN0ZDo6dmVjdG9yPFRTeW1ib2xUYWJsZUxldmVs
Kj4gdGFibGU7Ci0gICAgdHlwZWRlZiBUTWFwPFRCYXNpY1R5cGUsIFRQcmVjaXNpb24+IFByZWNp
c2lvblN0YWNrTGV2ZWw7Ci0gICAgc3RkOjp2ZWN0b3I8UHJlY2lzaW9uU3RhY2tMZXZlbCo+IHBy
ZWNpc2lvblN0YWNrOwotfTsKLQotI2VuZGlmIC8vIF9TWU1CT0xfVEFCTEVfSU5DTFVERURfCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRv
ckVTU0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0
b3JFU1NMLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkwMGY4YThlZGU5ZDZh
MDc3NGE0MWZmNmI2YTAxYzRlNzFkMzY5Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJh
bnNsYXRvckVTU0wuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL1RyYW5zbGF0b3JFU1NMLmgiCi0KLSNpbmNs
dWRlICJjb21waWxlci9PdXRwdXRFU1NMLmgiCi0KLVRyYW5zbGF0b3JFU1NMOjpUcmFuc2xhdG9y
RVNTTChTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMpCi0gICAgOiBUQ29tcGls
ZXIodHlwZSwgc3BlYykgewotfQotCi12b2lkIFRyYW5zbGF0b3JFU1NMOjp0cmFuc2xhdGUoVElu
dGVybU5vZGUqIHJvb3QpIHsKLSAgICBUSW5mb1NpbmtCYXNlJiBzaW5rID0gZ2V0SW5mb1Npbmso
KS5vYmo7Ci0KLSAgICAvLyBXcml0ZSBidWlsdC1pbiBleHRlbnNpb24gYmVoYXZpb3JzLgotICAg
IHdyaXRlRXh0ZW5zaW9uQmVoYXZpb3IoKTsKLQotICAgIC8vIFdyaXRlIGVtdWxhdGVkIGJ1aWx0
LWluIGZ1bmN0aW9ucyBpZiBuZWVkZWQuCi0gICAgZ2V0QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3Io
KS5PdXRwdXRFbXVsYXRlZEZ1bmN0aW9uRGVmaW5pdGlvbigKLSAgICAgICAgc2luaywgZ2V0U2hh
ZGVyVHlwZSgpID09IFNIX0ZSQUdNRU5UX1NIQURFUik7Ci0KLSAgICAvLyBXcml0ZSBhcnJheSBi
b3VuZHMgY2xhbXBpbmcgZW11bGF0aW9uIGlmIG5lZWRlZC4KLSAgICBnZXRBcnJheUJvdW5kc0Ns
YW1wZXIoKS5PdXRwdXRDbGFtcGluZ0Z1bmN0aW9uRGVmaW5pdGlvbihzaW5rKTsKLQotICAgIC8v
IFdyaXRlIHRyYW5zbGF0ZWQgc2hhZGVyLgotICAgIFRPdXRwdXRFU1NMIG91dHB1dEVTU0woc2lu
aywgZ2V0QXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3koKSwgZ2V0SGFzaEZ1bmN0aW9uKCksIGdl
dE5hbWVNYXAoKSwgZ2V0U3ltYm9sVGFibGUoKSk7Ci0gICAgcm9vdC0+dHJhdmVyc2UoJm91dHB1
dEVTU0wpOwotfQotCi12b2lkIFRyYW5zbGF0b3JFU1NMOjp3cml0ZUV4dGVuc2lvbkJlaGF2aW9y
KCkgewotICAgIFRJbmZvU2lua0Jhc2UmIHNpbmsgPSBnZXRJbmZvU2luaygpLm9iajsKLSAgICBj
b25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dGVuc2lvbkJlaGF2aW9yID0gZ2V0RXh0ZW5zaW9u
QmVoYXZpb3IoKTsKLSAgICBmb3IgKFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IGV4dGVuc2lvbkJlaGF2aW9yLmJlZ2luKCk7Ci0gICAgICAgICBpdGVyICE9IGV4dGVu
c2lvbkJlaGF2aW9yLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKGl0ZXItPnNlY29uZCAh
PSBFQmhVbmRlZmluZWQpIHsKLSAgICAgICAgICAgIHNpbmsgPDwgIiNleHRlbnNpb24gIiA8PCBp
dGVyLT5maXJzdCA8PCAiIDogIgotICAgICAgICAgICAgICAgICA8PCBnZXRCZWhhdmlvclN0cmlu
ZyhpdGVyLT5zZWNvbmQpIDw8ICJcbiI7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTE5NmJkMDAxM2FjYWM0NGQ3OGQ1ODU4ZmU1
ODE3YTZlMjdiNWJhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5o
CisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lm
bmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SRVNTTF9IXwotI2RlZmluZSBDT01QSUxFUl9UUkFOU0xB
VE9SRVNTTF9IXwotCi0jaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5kbGUuaCIKLQotY2xhc3MgVHJh
bnNsYXRvckVTU0wgOiBwdWJsaWMgVENvbXBpbGVyIHsKLXB1YmxpYzoKLSAgICBUcmFuc2xhdG9y
RVNTTChTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMpOwotCi1wcm90ZWN0ZWQ6
Ci0gICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShUSW50ZXJtTm9kZSogcm9vdCk7Ci0KLXByaXZh
dGU6Ci0gICAgdm9pZCB3cml0ZUV4dGVuc2lvbkJlaGF2aW9yKCk7Ci19OwotCi0jZW5kaWYgIC8v
IENPTVBJTEVSX1RSQU5TTEFUT1JFU1NMX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggN2NhNDM0MWRjZGVhNzc4MzQ2ZmEzNjI3ZTIzYWNhNDE5OGYxNTY4OS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsNDQgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBp
bGVyL1RyYW5zbGF0b3JHTFNMLmgiCi0KLSNpbmNsdWRlICJjb21waWxlci9PdXRwdXRHTFNMLmgi
Ci0jaW5jbHVkZSAiY29tcGlsZXIvVmVyc2lvbkdMU0wuaCIKLQotc3RhdGljIHZvaWQgd3JpdGVW
ZXJzaW9uKFNoU2hhZGVyVHlwZSB0eXBlLCBUSW50ZXJtTm9kZSogcm9vdCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBUSW5mb1NpbmtCYXNlJiBzaW5rKSB7Ci0gICAgVFZlcnNpb25HTFNMIHZl
cnNpb25HTFNMKHR5cGUpOwotICAgIHJvb3QtPnRyYXZlcnNlKCZ2ZXJzaW9uR0xTTCk7Ci0gICAg
aW50IHZlcnNpb24gPSB2ZXJzaW9uR0xTTC5nZXRWZXJzaW9uKCk7Ci0gICAgLy8gV2UgbmVlZCB0
byB3cml0ZSB2ZXJzaW9uIGRpcmVjdGl2ZSBvbmx5IGlmIGl0IGlzIGdyZWF0ZXIgdGhhbiAxMTAu
Ci0gICAgLy8gSWYgdGhlcmUgaXMgbm8gdmVyc2lvbiBkaXJlY3RpdmUgaW4gdGhlIHNoYWRlciwg
MTEwIGlzIGltcGxpZWQuCi0gICAgaWYgKHZlcnNpb24gPiAxMTApIHsKLSAgICAgICAgc2luayA8
PCAiI3ZlcnNpb24gIiA8PCB2ZXJzaW9uIDw8ICJcbiI7Ci0gICAgfQotfQotCi1UcmFuc2xhdG9y
R0xTTDo6VHJhbnNsYXRvckdMU0woU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVj
KQotICAgIDogVENvbXBpbGVyKHR5cGUsIHNwZWMpIHsKLX0KLQotdm9pZCBUcmFuc2xhdG9yR0xT
TDo6dHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KSB7Ci0gICAgVEluZm9TaW5rQmFzZSYgc2lu
ayA9IGdldEluZm9TaW5rKCkub2JqOwotCi0gICAgLy8gV3JpdGUgR0xTTCB2ZXJzaW9uLgotICAg
IHdyaXRlVmVyc2lvbihnZXRTaGFkZXJUeXBlKCksIHJvb3QsIHNpbmspOwotCi0gICAgLy8gV3Jp
dGUgZW11bGF0ZWQgYnVpbHQtaW4gZnVuY3Rpb25zIGlmIG5lZWRlZC4KLSAgICBnZXRCdWlsdElu
RnVuY3Rpb25FbXVsYXRvcigpLk91dHB1dEVtdWxhdGVkRnVuY3Rpb25EZWZpbml0aW9uKAotICAg
ICAgICBzaW5rLCBmYWxzZSk7Ci0KLSAgICAvLyBXcml0ZSBhcnJheSBib3VuZHMgY2xhbXBpbmcg
ZW11bGF0aW9uIGlmIG5lZWRlZC4KLSAgICBnZXRBcnJheUJvdW5kc0NsYW1wZXIoKS5PdXRwdXRD
bGFtcGluZ0Z1bmN0aW9uRGVmaW5pdGlvbihzaW5rKTsKLQotICAgIC8vIFdyaXRlIHRyYW5zbGF0
ZWQgc2hhZGVyLgotICAgIFRPdXRwdXRHTFNMIG91dHB1dEdMU0woc2luaywgZ2V0QXJyYXlJbmRl
eENsYW1waW5nU3RyYXRlZ3koKSwgZ2V0SGFzaEZ1bmN0aW9uKCksIGdldE5hbWVNYXAoKSwgZ2V0
U3ltYm9sVGFibGUoKSk7Ci0gICAgcm9vdC0+dHJhdmVyc2UoJm91dHB1dEdMU0wpOwotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JH
TFNMLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdM
U0wuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJjZTA2ZDE5MmYwZmM2MWRhYmQ1
MzZkMjA0OWZmYjllZGVmM2E2My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRv
ckdMU0wuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLSNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUkdMU0xfSF8KLSNkZWZpbmUgQ09NUElMRVJf
VFJBTlNMQVRPUkdMU0xfSF8KLQotI2luY2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCi0KLWNs
YXNzIFRyYW5zbGF0b3JHTFNMIDogcHVibGljIFRDb21waWxlciB7Ci1wdWJsaWM6Ci0gICAgVHJh
bnNsYXRvckdMU0woU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjKTsKLQotcHJv
dGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCB0cmFuc2xhdGUoVEludGVybU5vZGUqIHJvb3QpOwot
fTsKLQotI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SR0xTTF9IXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3NDA4YTA3YzQ5NmY3NjE0ZTE3NmJlOWI1
YjY3MTVhYWM1OGU1NDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNM
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0K
LSNpbmNsdWRlICJjb21waWxlci9UcmFuc2xhdG9ySExTTC5oIgotCi0jaW5jbHVkZSAiY29tcGls
ZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEhM
U0wuaCIKLQotVHJhbnNsYXRvckhMU0w6OlRyYW5zbGF0b3JITFNMKFNoU2hhZGVyVHlwZSB0eXBl
LCBTaFNoYWRlclNwZWMgc3BlYywgU2hTaGFkZXJPdXRwdXQgb3V0cHV0KQotICAgIDogVENvbXBp
bGVyKHR5cGUsIHNwZWMpLCBtT3V0cHV0VHlwZShvdXRwdXQpCi17Ci19Ci0KLXZvaWQgVHJhbnNs
YXRvckhMU0w6OnRyYW5zbGF0ZShUSW50ZXJtTm9kZSAqcm9vdCkKLXsKLSAgICBUUGFyc2VDb250
ZXh0JiBwYXJzZUNvbnRleHQgPSAqR2V0R2xvYmFsUGFyc2VDb250ZXh0KCk7Ci0gICAgc2g6Ok91
dHB1dEhMU0wgb3V0cHV0SExTTChwYXJzZUNvbnRleHQsIGdldFJlc291cmNlcygpLCBtT3V0cHV0
VHlwZSk7Ci0KLSAgICBvdXRwdXRITFNMLm91dHB1dCgpOwotICAgIG1BY3RpdmVVbmlmb3JtcyA9
IG91dHB1dEhMU0wuZ2V0VW5pZm9ybXMoKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDk1NTBlMTVlOGVmNzUyMzkyYzFiMDFiZDZiMWZkYmM0NDYwOWQzYjguLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmgKKysrIC9kZXYvbnVsbApA
QCAtMSwyNyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1RS
QU5TTEFUT1JITFNMX0hfCi0jZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JITFNMX0hfCi0KLSNp
bmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1VuaWZvcm0u
aCIKLQotY2xhc3MgVHJhbnNsYXRvckhMU0wgOiBwdWJsaWMgVENvbXBpbGVyIHsKLXB1YmxpYzoK
LSAgICBUcmFuc2xhdG9ySExTTChTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMs
IFNoU2hhZGVyT3V0cHV0IG91dHB1dCk7Ci0KLSAgICB2aXJ0dWFsIFRyYW5zbGF0b3JITFNMICpn
ZXRBc1RyYW5zbGF0b3JITFNMKCkgeyByZXR1cm4gdGhpczsgfQotICAgIGNvbnN0IHNoOjpBY3Rp
dmVVbmlmb3JtcyAmZ2V0VW5pZm9ybXMoKSB7IHJldHVybiBtQWN0aXZlVW5pZm9ybXM7IH0KLQot
cHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCB0cmFuc2xhdGUoVEludGVybU5vZGUqIHJvb3Qp
OwotCi0gICAgc2g6OkFjdGl2ZVVuaWZvcm1zIG1BY3RpdmVVbmlmb3JtczsKLSAgICBTaFNoYWRl
ck91dHB1dCBtT3V0cHV0VHlwZTsKLX07Ci0KLSNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRP
UkhMU0xfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9UeXBlcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1R5cGVzLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1NTYwZGRjNmVmYTc0MGJlNjFhYTIzNDFm
NjAxODNjZGNhZjA3NjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1R5cGVzLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwzMDcgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEz
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBf
VFlQRVNfSU5DTFVERUQKLSNkZWZpbmUgX1RZUEVTX0lOQ0xVREVECi0KLSNpbmNsdWRlICJjb21t
b24vYW5nbGV1dGlscy5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvQmFzZVR5cGVzLmgiCi0jaW5j
bHVkZSAiY29tcGlsZXIvQ29tbW9uLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKLQot
c3RydWN0IFRQdWJsaWNUeXBlOwotY2xhc3MgVFR5cGU7Ci0KLWNsYXNzIFRGaWVsZAotewotcHVi
bGljOgotICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKLSAgICBURmllbGQoVFR5cGUq
IHR5cGUsIFRTdHJpbmcqIG5hbWUpIDogbVR5cGUodHlwZSksIG1OYW1lKG5hbWUpIHt9Ci0KLSAg
ICAvLyBUT0RPKGFsb2twKTogV2Ugc2hvdWxkIG9ubHkgcmV0dXJuIGNvbnN0IHR5cGUuCi0gICAg
Ly8gRml4IGl0IGJ5IHR3ZWFraW5nIGdyYW1tYXIuCi0gICAgVFR5cGUqIHR5cGUoKSB7IHJldHVy
biBtVHlwZTsgfQotICAgIGNvbnN0IFRUeXBlKiB0eXBlKCkgY29uc3QgeyByZXR1cm4gbVR5cGU7
IH0KLQotICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiAqbU5hbWU7IH0K
LQotcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVEZpZWxkKTsKLSAgICBU
VHlwZSogbVR5cGU7Ci0gICAgVFN0cmluZyogbU5hbWU7Ci19OwotCi10eXBlZGVmIFRWZWN0b3I8
VEZpZWxkKj4gVEZpZWxkTGlzdDsKLWlubGluZSBURmllbGRMaXN0KiBOZXdQb29sVEZpZWxkTGlz
dCgpCi17Ci0gICAgdm9pZCogbWVtb3J5ID0gR2V0R2xvYmFsUG9vbEFsbG9jYXRvcigpLT5hbGxv
Y2F0ZShzaXplb2YoVEZpZWxkTGlzdCkpOwotICAgIHJldHVybiBuZXcobWVtb3J5KSBURmllbGRM
aXN0OwotfQotCi1jbGFzcyBUU3RydWN0dXJlCi17Ci1wdWJsaWM6Ci0gICAgUE9PTF9BTExPQ0FU
T1JfTkVXX0RFTEVURSgpOwotICAgIFRTdHJ1Y3R1cmUoVFN0cmluZyogbmFtZSwgVEZpZWxkTGlz
dCogZmllbGRzKQotICAgICAgICA6IG1OYW1lKG5hbWUpLAotICAgICAgICAgIG1GaWVsZHMoZmll
bGRzKSwKLSAgICAgICAgICBtT2JqZWN0U2l6ZSgwKSwKLSAgICAgICAgICBtRGVlcGVzdE5lc3Rp
bmcoMCkgewotICAgIH0KLQotICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVy
biAqbU5hbWU7IH0KLSAgICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMoKSBjb25zdCB7IHJldHVy
biAqbUZpZWxkczsgfQotCi0gICAgY29uc3QgVFN0cmluZyYgbWFuZ2xlZE5hbWUoKSBjb25zdCB7
Ci0gICAgICAgIGlmIChtTWFuZ2xlZE5hbWUuZW1wdHkoKSkKLSAgICAgICAgICAgIG1NYW5nbGVk
TmFtZSA9IGJ1aWxkTWFuZ2xlZE5hbWUoKTsKLSAgICAgICAgcmV0dXJuIG1NYW5nbGVkTmFtZTsK
LSAgICB9Ci0gICAgc2l6ZV90IG9iamVjdFNpemUoKSBjb25zdCB7Ci0gICAgICAgIGlmIChtT2Jq
ZWN0U2l6ZSA9PSAwKQotICAgICAgICAgICAgbU9iamVjdFNpemUgPSBjYWxjdWxhdGVPYmplY3RT
aXplKCk7Ci0gICAgICAgIHJldHVybiBtT2JqZWN0U2l6ZTsKLSAgICB9OwotICAgIGludCBkZWVw
ZXN0TmVzdGluZygpIGNvbnN0IHsKLSAgICAgICAgaWYgKG1EZWVwZXN0TmVzdGluZyA9PSAwKQot
ICAgICAgICAgICAgbURlZXBlc3ROZXN0aW5nID0gY2FsY3VsYXRlRGVlcGVzdE5lc3RpbmcoKTsK
LSAgICAgICAgcmV0dXJuIG1EZWVwZXN0TmVzdGluZzsKLSAgICB9Ci0gICAgYm9vbCBjb250YWlu
c0FycmF5cygpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihUU3RydWN0dXJlKTsKLSAgICBUU3RyaW5nIGJ1aWxkTWFuZ2xlZE5hbWUoKSBjb25zdDsKLSAg
ICBzaXplX3QgY2FsY3VsYXRlT2JqZWN0U2l6ZSgpIGNvbnN0OwotICAgIGludCBjYWxjdWxhdGVE
ZWVwZXN0TmVzdGluZygpIGNvbnN0OwotCi0gICAgVFN0cmluZyogbU5hbWU7Ci0gICAgVEZpZWxk
TGlzdCogbUZpZWxkczsKLQotICAgIG11dGFibGUgVFN0cmluZyBtTWFuZ2xlZE5hbWU7Ci0gICAg
bXV0YWJsZSBzaXplX3QgbU9iamVjdFNpemU7Ci0gICAgbXV0YWJsZSBpbnQgbURlZXBlc3ROZXN0
aW5nOwotfTsKLQotLy8KLS8vIEJhc2UgY2xhc3MgZm9yIHRoaW5ncyB0aGF0IGhhdmUgYSB0eXBl
LgotLy8KLWNsYXNzIFRUeXBlCi17Ci1wdWJsaWM6Ci0gICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RF
TEVURSgpOwotICAgIFRUeXBlKCkge30KLSAgICBUVHlwZShUQmFzaWNUeXBlIHQsIFRQcmVjaXNp
b24gcCwgVFF1YWxpZmllciBxID0gRXZxVGVtcG9yYXJ5LCB1bnNpZ25lZCBjaGFyIHMgPSAxLCBi
b29sIG0gPSBmYWxzZSwgYm9vbCBhID0gZmFsc2UpIDoKLSAgICAgICAgICAgIHR5cGUodCksIHBy
ZWNpc2lvbihwKSwgcXVhbGlmaWVyKHEpLCBzaXplKHMpLCBtYXRyaXgobSksIGFycmF5KGEpLCBh
cnJheVNpemUoMCksIHN0cnVjdHVyZSgwKQotICAgIHsKLSAgICB9Ci0gICAgZXhwbGljaXQgVFR5
cGUoY29uc3QgVFB1YmxpY1R5cGUgJnApOwotICAgIFRUeXBlKFRTdHJ1Y3R1cmUqIHVzZXJEZWYs
IFRQcmVjaXNpb24gcCA9IEVicFVuZGVmaW5lZCkgOgotICAgICAgICAgICAgdHlwZShFYnRTdHJ1
Y3QpLCBwcmVjaXNpb24ocCksIHF1YWxpZmllcihFdnFUZW1wb3JhcnkpLCBzaXplKDEpLCBtYXRy
aXgoZmFsc2UpLCBhcnJheShmYWxzZSksIGFycmF5U2l6ZSgwKSwgc3RydWN0dXJlKHVzZXJEZWYp
Ci0gICAgewotICAgIH0KLQotICAgIFRCYXNpY1R5cGUgZ2V0QmFzaWNUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gdHlwZTsgfQotICAgIHZvaWQgc2V0QmFzaWNUeXBlKFRCYXNpY1R5cGUgdCkgeyB0eXBl
ID0gdDsgfQotCi0gICAgVFByZWNpc2lvbiBnZXRQcmVjaXNpb24oKSBjb25zdCB7IHJldHVybiBw
cmVjaXNpb247IH0KLSAgICB2b2lkIHNldFByZWNpc2lvbihUUHJlY2lzaW9uIHApIHsgcHJlY2lz
aW9uID0gcDsgfQotCi0gICAgVFF1YWxpZmllciBnZXRRdWFsaWZpZXIoKSBjb25zdCB7IHJldHVy
biBxdWFsaWZpZXI7IH0KLSAgICB2b2lkIHNldFF1YWxpZmllcihUUXVhbGlmaWVyIHEpIHsgcXVh
bGlmaWVyID0gcTsgfQotCi0gICAgLy8gT25lLWRpbWVuc2lvbmFsIHNpemUgb2Ygc2luZ2xlIGlu
c3RhbmNlIHR5cGUKLSAgICBpbnQgZ2V0Tm9taW5hbFNpemUoKSBjb25zdCB7IHJldHVybiBzaXpl
OyB9Ci0gICAgdm9pZCBzZXROb21pbmFsU2l6ZSh1bnNpZ25lZCBjaGFyIHMpIHsgc2l6ZSA9IHM7
IH0KLSAgICAvLyBGdWxsIHNpemUgb2Ygc2luZ2xlIGluc3RhbmNlIG9mIHR5cGUKLSAgICBzaXpl
X3QgZ2V0T2JqZWN0U2l6ZSgpIGNvbnN0OwotCi0gICAgaW50IGVsZW1lbnRSZWdpc3RlckNvdW50
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IGdldFN0cnVjdCgpLT5maWVsZHMoKTsK
LSAgICAgICAgICAgIGludCByZWdpc3RlckNvdW50ID0gMDsKLQotICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcmVnaXN0ZXJDb3VudCArPSBmaWVsZHNbaV0tPnR5cGUoKS0+dG90YWxSZWdp
c3RlckNvdW50KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiByZWdpc3Rl
ckNvdW50OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGlzTWF0cml4KCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBnZXROb21pbmFsU2l6ZSgpOwotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpbnQgdG90YWxSZWdpc3RlckNvdW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IGlmIChhcnJheSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFycmF5U2l6ZSAqIGVs
ZW1lbnRSZWdpc3RlckNvdW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gZWxlbWVudFJlZ2lzdGVyQ291bnQoKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGJvb2wgaXNNYXRyaXgoKSBjb25zdCB7IHJldHVybiBtYXRyaXggPyB0cnVl
IDogZmFsc2U7IH0KLSAgICB2b2lkIHNldE1hdHJpeChib29sIG0pIHsgbWF0cml4ID0gbTsgfQot
Ci0gICAgYm9vbCBpc0FycmF5KCkgY29uc3QgIHsgcmV0dXJuIGFycmF5ID8gdHJ1ZSA6IGZhbHNl
OyB9Ci0gICAgaW50IGdldEFycmF5U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGFycmF5U2l6ZTsgfQot
ICAgIHZvaWQgc2V0QXJyYXlTaXplKGludCBzKSB7IGFycmF5ID0gdHJ1ZTsgYXJyYXlTaXplID0g
czsgfQotICAgIHZvaWQgY2xlYXJBcnJheW5lc3MoKSB7IGFycmF5ID0gZmFsc2U7IGFycmF5U2l6
ZSA9IDA7IH0KLQotICAgIGJvb2wgaXNWZWN0b3IoKSBjb25zdCB7IHJldHVybiBzaXplID4gMSAm
JiAhbWF0cml4OyB9Ci0gICAgYm9vbCBpc1NjYWxhcigpIGNvbnN0IHsgcmV0dXJuIHNpemUgPT0g
MSAmJiAhbWF0cml4ICYmICFzdHJ1Y3R1cmU7IH0KLQotICAgIFRTdHJ1Y3R1cmUqIGdldFN0cnVj
dCgpIGNvbnN0IHsgcmV0dXJuIHN0cnVjdHVyZTsgfQotICAgIHZvaWQgc2V0U3RydWN0KFRTdHJ1
Y3R1cmUqIHMpIHsgc3RydWN0dXJlID0gczsgfQotCi0gICAgY29uc3QgVFN0cmluZyYgZ2V0TWFu
Z2xlZE5hbWUoKSBjb25zdCB7Ci0gICAgICAgIGlmIChtYW5nbGVkLmVtcHR5KCkpIHsKLSAgICAg
ICAgICAgIG1hbmdsZWQgPSBidWlsZE1hbmdsZWROYW1lKCk7Ci0gICAgICAgICAgICBtYW5nbGVk
ICs9ICc7JzsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbWFuZ2xlZDsKLSAgICB9Ci0KLSAg
ICBib29sIHNhbWVFbGVtZW50VHlwZShjb25zdCBUVHlwZSYgcmlnaHQpIGNvbnN0IHsKLSAgICAg
ICAgcmV0dXJuICAgICAgdHlwZSA9PSByaWdodC50eXBlICAgJiYKLSAgICAgICAgICAgICAgICAg
ICAgc2l6ZSA9PSByaWdodC5zaXplICAgJiYKLSAgICAgICAgICAgICAgICAgIG1hdHJpeCA9PSBy
aWdodC5tYXRyaXggJiYKLSAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9PSByaWdodC5zdHJ1Y3R1
cmU7Ci0gICAgfQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUVHlwZSYgcmlnaHQpIGNvbnN0
IHsKLSAgICAgICAgcmV0dXJuICAgICAgdHlwZSA9PSByaWdodC50eXBlICAgJiYKLSAgICAgICAg
ICAgICAgICAgICAgc2l6ZSA9PSByaWdodC5zaXplICAgJiYKLSAgICAgICAgICAgICAgICAgIG1h
dHJpeCA9PSByaWdodC5tYXRyaXggJiYKLSAgICAgICAgICAgICAgICAgICBhcnJheSA9PSByaWdo
dC5hcnJheSAgJiYgKCFhcnJheSB8fCBhcnJheVNpemUgPT0gcmlnaHQuYXJyYXlTaXplKSAmJgot
ICAgICAgICAgICAgICAgc3RydWN0dXJlID09IHJpZ2h0LnN0cnVjdHVyZTsKLSAgICAgICAgLy8g
ZG9uJ3QgY2hlY2sgdGhlIHF1YWxpZmllciwgaXQncyBub3QgZXZlciB3aGF0J3MgYmVpbmcgc291
Z2h0IGFmdGVyCi0gICAgfQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUVHlwZSYgcmlnaHQp
IGNvbnN0IHsKLSAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KHJpZ2h0KTsKLSAgICB9Ci0gICAg
Ym9vbCBvcGVyYXRvcjwoY29uc3QgVFR5cGUmIHJpZ2h0KSBjb25zdCB7Ci0gICAgICAgIGlmICh0
eXBlICE9IHJpZ2h0LnR5cGUpIHJldHVybiB0eXBlIDwgcmlnaHQudHlwZTsKLSAgICAgICAgaWYg
KHNpemUgIT0gcmlnaHQuc2l6ZSkgcmV0dXJuIHNpemUgPCByaWdodC5zaXplOwotICAgICAgICBp
ZiAobWF0cml4ICE9IHJpZ2h0Lm1hdHJpeCkgcmV0dXJuIG1hdHJpeCA8IHJpZ2h0Lm1hdHJpeDsK
LSAgICAgICAgaWYgKGFycmF5ICE9IHJpZ2h0LmFycmF5KSByZXR1cm4gYXJyYXkgPCByaWdodC5h
cnJheTsKLSAgICAgICAgaWYgKGFycmF5U2l6ZSAhPSByaWdodC5hcnJheVNpemUpIHJldHVybiBh
cnJheVNpemUgPCByaWdodC5hcnJheVNpemU7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUgIT0gcmln
aHQuc3RydWN0dXJlKSByZXR1cm4gc3RydWN0dXJlIDwgcmlnaHQuc3RydWN0dXJlOwotCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBjb25zdCBjaGFyKiBnZXRCYXNpY1N0cmlu
ZygpIGNvbnN0IHsgcmV0dXJuIDo6Z2V0QmFzaWNTdHJpbmcodHlwZSk7IH0KLSAgICBjb25zdCBj
aGFyKiBnZXRQcmVjaXNpb25TdHJpbmcoKSBjb25zdCB7IHJldHVybiA6OmdldFByZWNpc2lvblN0
cmluZyhwcmVjaXNpb24pOyB9Ci0gICAgY29uc3QgY2hhciogZ2V0UXVhbGlmaWVyU3RyaW5nKCkg
Y29uc3QgeyByZXR1cm4gOjpnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKTsgfQotICAgIFRT
dHJpbmcgZ2V0Q29tcGxldGVTdHJpbmcoKSBjb25zdDsKLQotICAgIC8vIElmIHRoaXMgdHlwZSBp
cyBhIHN0cnVjdCwgcmV0dXJucyB0aGUgZGVlcGVzdCBzdHJ1Y3QgbmVzdGluZyBvZgotICAgIC8v
IGFueSBmaWVsZCBpbiB0aGUgc3RydWN0LiBGb3IgZXhhbXBsZToKLSAgICAvLyAgIHN0cnVjdCBu
ZXN0aW5nMSB7Ci0gICAgLy8gICAgIHZlYzQgcG9zaXRpb247Ci0gICAgLy8gICB9OwotICAgIC8v
ICAgc3RydWN0IG5lc3RpbmcyIHsKLSAgICAvLyAgICAgbmVzdGluZzEgZmllbGQxOwotICAgIC8v
ICAgICB2ZWM0IGZpZWxkMjsKLSAgICAvLyAgIH07Ci0gICAgLy8gRm9yIHR5cGUgIm5lc3Rpbmcy
IiwgdGhpcyBtZXRob2Qgd291bGQgcmV0dXJuIDIgLS0gdGhlIG51bWJlcgotICAgIC8vIG9mIHN0
cnVjdHVyZXMgdGhyb3VnaCB3aGljaCBpbmRpcmVjdGlvbiBtdXN0IG9jY3VyIHRvIHJlYWNoIHRo
ZQotICAgIC8vIGRlZXBlc3QgZmllbGQgKG5lc3RpbmcyLmZpZWxkMS5wb3NpdGlvbikuCi0gICAg
aW50IGdldERlZXBlc3RTdHJ1Y3ROZXN0aW5nKCkgY29uc3QgewotICAgICAgICByZXR1cm4gc3Ry
dWN0dXJlID8gc3RydWN0dXJlLT5kZWVwZXN0TmVzdGluZygpIDogMDsKLSAgICB9Ci0KLSAgICBi
b29sIGlzU3RydWN0dXJlQ29udGFpbmluZ0FycmF5cygpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJu
IHN0cnVjdHVyZSA/IHN0cnVjdHVyZS0+Y29udGFpbnNBcnJheXMoKSA6IGZhbHNlOwotICAgIH0K
LQotcHJpdmF0ZToKLSAgICBUU3RyaW5nIGJ1aWxkTWFuZ2xlZE5hbWUoKSBjb25zdDsKLQotICAg
IFRCYXNpY1R5cGUgdHlwZTsKLSAgICBUUHJlY2lzaW9uIHByZWNpc2lvbjsKLSAgICBUUXVhbGlm
aWVyIHF1YWxpZmllcjsKLSAgICB1bnNpZ25lZCBjaGFyIHNpemU7Ci0gICAgYm9vbCBtYXRyaXg7
Ci0gICAgYm9vbCBhcnJheTsKLSAgICBpbnQgYXJyYXlTaXplOwotCi0gICAgVFN0cnVjdHVyZSog
c3RydWN0dXJlOyAgICAgIC8vIDAgdW5sZXNzIHRoaXMgaXMgYSBzdHJ1Y3QKLQotICAgIG11dGFi
bGUgVFN0cmluZyBtYW5nbGVkOwotfTsKLQotLy8KLS8vIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZv
ciBhIHByb2JsZW0gd2l0aCB0aGUgeWFjYyBzdGFjaywgIEl0IGNhbid0IGhhdmUKLS8vIHR5cGVz
IHRoYXQgaXQgdGhpbmtzIGhhdmUgbm9uLXRyaXZpYWwgY29uc3RydWN0b3JzLiAgSXQgc2hvdWxk
Ci0vLyBqdXN0IGJlIHVzZWQgd2hpbGUgcmVjb2duaXppbmcgdGhlIGdyYW1tYXIsIG5vdCBhbnl0
aGluZyBlbHNlLiAgUG9pbnRlcnMKLS8vIGNvdWxkIGJlIHVzZWQsIGJ1dCBhbHNvIHRyeWluZyB0
byBhdm9pZCBsb3RzIG9mIG1lbW9yeSBtYW5hZ2VtZW50IG92ZXJoZWFkLgotLy8KLS8vIE5vdCBh
cyBiYWQgYXMgaXQgbG9va3MsIHRoZXJlIGlzIG5vIGFjdHVhbCBhc3N1bXB0aW9uIHRoYXQgdGhl
IGZpZWxkcwotLy8gbWF0Y2ggdXAgb3IgYXJlIG5hbWUgdGhlIHNhbWUgb3IgYW55dGhpbmcgbGlr
ZSB0aGF0LgotLy8KLXN0cnVjdCBUUHVibGljVHlwZQotewotICAgIFRCYXNpY1R5cGUgdHlwZTsK
LSAgICBUUXVhbGlmaWVyIHF1YWxpZmllcjsKLSAgICBUUHJlY2lzaW9uIHByZWNpc2lvbjsKLSAg
ICB1bnNpZ25lZCBjaGFyIHNpemU7ICAgICAgICAgIC8vIHNpemUgb2YgdmVjdG9yIG9yIG1hdHJp
eCwgbm90IHNpemUgb2YgYXJyYXkKLSAgICBib29sIG1hdHJpeDsKLSAgICBib29sIGFycmF5Owot
ICAgIGludCBhcnJheVNpemU7Ci0gICAgVFR5cGUqIHVzZXJEZWY7Ci0gICAgVFNvdXJjZUxvYyBs
aW5lOwotCi0gICAgdm9pZCBzZXRCYXNpYyhUQmFzaWNUeXBlIGJ0LCBUUXVhbGlmaWVyIHEsIGNv
bnN0IFRTb3VyY2VMb2MmIGxuKQotICAgIHsKLSAgICAgICAgdHlwZSA9IGJ0OwotICAgICAgICBx
dWFsaWZpZXIgPSBxOwotICAgICAgICBwcmVjaXNpb24gPSBFYnBVbmRlZmluZWQ7Ci0gICAgICAg
IHNpemUgPSAxOwotICAgICAgICBtYXRyaXggPSBmYWxzZTsKLSAgICAgICAgYXJyYXkgPSBmYWxz
ZTsKLSAgICAgICAgYXJyYXlTaXplID0gMDsKLSAgICAgICAgdXNlckRlZiA9IDA7Ci0gICAgICAg
IGxpbmUgPSBsbjsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEFnZ3JlZ2F0ZSh1bnNpZ25lZCBjaGFy
IHMsIGJvb2wgbSA9IGZhbHNlKQotICAgIHsKLSAgICAgICAgc2l6ZSA9IHM7Ci0gICAgICAgIG1h
dHJpeCA9IG07Ci0gICAgfQotCi0gICAgdm9pZCBzZXRBcnJheShib29sIGEsIGludCBzID0gMCkK
LSAgICB7Ci0gICAgICAgIGFycmF5ID0gYTsKLSAgICAgICAgYXJyYXlTaXplID0gczsKLSAgICB9
Ci0KLSAgICBib29sIGlzU3RydWN0dXJlQ29udGFpbmluZ0FycmF5cygpIGNvbnN0Ci0gICAgewot
ICAgICAgICBpZiAoIXVzZXJEZWYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB1c2VyRGVmLT5pc1N0cnVjdHVyZUNvbnRh
aW5pbmdBcnJheXMoKTsKLSAgICB9Ci19OwotCi0jZW5kaWYgLy8gX1RZUEVTX0lOQ0xVREVEXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNo
b3J0Q2lyY3VpdC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5m
b2xkU2hvcnRDaXJjdWl0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWNmZGQz
MjMwZTQ4NzU2NWQzYmVkNjU2ZWI3MTkxODY5ZDcwZWNhZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE4NCArMCww
IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotLy8gVW5mb2xkU2hvcnRDaXJjdWl0IGlzIGFuIEFTVCB0
cmF2ZXJzZXIgdG8gb3V0cHV0IHNob3J0LWNpcmN1aXRpbmcgb3BlcmF0b3JzIGFzIGlmLWVsc2Ug
c3RhdGVtZW50cy4KLS8vIFRoZSByZXN1bHRzIGFyZSBhc3NpZ25lZCB0byBzIyB0ZW1wb3Jhcmll
cywgd2hpY2ggYXJlIHVzZWQgYnkgdGhlIG1haW4gdHJhbnNsYXRvciBpbnN0ZWFkIG9mCi0vLyB0
aGUgb3JpZ2luYWwgZXhwcmVzc2lvbi4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9VbmZvbGRT
aG9ydENpcmN1aXQuaCIKLQotI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCi0jaW5jbHVk
ZSAiY29tcGlsZXIvT3V0cHV0SExTTC5oIgotCi1uYW1lc3BhY2Ugc2gKLXsKLVVuZm9sZFNob3J0
Q2lyY3VpdDo6VW5mb2xkU2hvcnRDaXJjdWl0KFRQYXJzZUNvbnRleHQgJmNvbnRleHQsIE91dHB1
dEhMU0wgKm91dHB1dEhMU0wpIDogbUNvbnRleHQoY29udGV4dCksIG1PdXRwdXRITFNMKG91dHB1
dEhMU0wpCi17Ci0gICAgbVRlbXBvcmFyeUluZGV4ID0gMDsKLX0KLQotdm9pZCBVbmZvbGRTaG9y
dENpcmN1aXQ6OnRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKQotewotICAgIGludCByZXdpbmRJ
bmRleCA9IG1UZW1wb3JhcnlJbmRleDsKLSAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKLSAgICBt
VGVtcG9yYXJ5SW5kZXggPSByZXdpbmRJbmRleDsKLX0KLQotYm9vbCBVbmZvbGRTaG9ydENpcmN1
aXQ6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2RlKQotewotICAg
IFRJbmZvU2lua0Jhc2UgJm91dCA9IG1PdXRwdXRITFNMLT5nZXRCb2R5U3RyZWFtKCk7Ci0KLSAg
ICAvLyBJZiBvdXIgcmlnaHQgbm9kZSBkb2Vzbid0IGhhdmUgc2lkZSBlZmZlY3RzLCB3ZSBrbm93
IHdlIGRvbid0IG5lZWQgdG8gdW5mb2xkIHRoaXMKLSAgICAvLyBleHByZXNzaW9uOiB0aGVyZSB3
aWxsIGJlIG5vIHNob3J0LWNpcmN1aXRpbmcgc2lkZSBlZmZlY3RzIHRvIGF2b2lkCi0gICAgLy8g
KG5vdGU6IHVuZm9sZGluZyBkb2Vzbid0IGRlcGVuZCBvbiB0aGUgbGVmdCBub2RlIC0tIGl0IHdp
bGwgYWx3YXlzIGJlIGV2YWx1YXRlZCkKLSAgICBpZiAoIW5vZGUtPmdldFJpZ2h0KCktPmhhc1Np
ZGVFZmZlY3RzKCkpCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBz
d2l0Y2ggKG5vZGUtPmdldE9wKCkpCi0gICAgewotICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6Ci0g
ICAgICAgIC8vICJ4IHx8IHkiIGlzIGVxdWl2YWxlbnQgdG8gInggPyB0cnVlIDogeSIsIHdoaWNo
IHVuZm9sZHMgdG8gImJvb2wgczsgaWYoeCkgcyA9IHRydWU7IGVsc2UgcyA9IHk7IiwKLSAgICAg
ICAgLy8gYW5kIHRoZW4gZnVydGhlciBzaW1wbGlmaWVzIGRvd24gdG8gImJvb2wgcyA9IHg7IGlm
KCFzKSBzID0geTsiLgotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgaSA9IG1UZW1wb3JhcnlJ
bmRleDsKLQotICAgICAgICAgICAgb3V0IDw8ICJib29sIHMiIDw8IGkgPDwgIjtcbiI7Ci0KLSAg
ICAgICAgICAgIG91dCA8PCAie1xuIjsKLQotICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0g
aSArIDE7Ci0gICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRoaXMpOwotICAg
ICAgICAgICAgb3V0IDw8ICJzIiA8PCBpIDw8ICIgPSAiOwotICAgICAgICAgICAgbVRlbXBvcmFy
eUluZGV4ID0gaSArIDE7Ci0gICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKG1P
dXRwdXRITFNMKTsKLSAgICAgICAgICAgIG91dCA8PCAiO1xuIjsKLSAgICAgICAgICAgIG91dCA8
PCAiaWYgKCFzIiA8PCBpIDw8ICIpXG4iCi0gICAgICAgICAgICAgICAgICAgIntcbiI7Ci0gICAg
ICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAgICAgICAgIG5vZGUtPmdldFJp
Z2h0KCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8
PCAiID0gIjsKLSAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAgICAg
ICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOwotICAgICAgICAgICAg
b3V0IDw8ICI7XG4iCi0gICAgICAgICAgICAgICAgICAgIn1cbiI7Ci0KLSAgICAgICAgICAgIG91
dCA8PCAifVxuIjsKLQotICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOgot
ICAgICAgICAvLyAieCAmJiB5IiBpcyBlcXVpdmFsZW50IHRvICJ4ID8geSA6IGZhbHNlIiwgd2hp
Y2ggdW5mb2xkcyB0byAiYm9vbCBzOyBpZih4KSBzID0geTsgZWxzZSBzID0gZmFsc2U7IiwKLSAg
ICAgICAgLy8gYW5kIHRoZW4gZnVydGhlciBzaW1wbGlmaWVzIGRvd24gdG8gImJvb2wgcyA9IHg7
IGlmKHMpIHMgPSB5OyIuCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBpID0gbVRlbXBvcmFy
eUluZGV4OwotCi0gICAgICAgICAgICBvdXQgPDwgImJvb2wgcyIgPDwgaSA8PCAiO1xuIjsKLQot
ICAgICAgICAgICAgb3V0IDw8ICJ7XG4iOwotCi0gICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXgg
PSBpICsgMTsKLSAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhpcyk7Ci0g
ICAgICAgICAgICBvdXQgPDwgInMiIDw8IGkgPDwgIiA9ICI7Ci0gICAgICAgICAgICBtVGVtcG9y
YXJ5SW5kZXggPSBpICsgMTsKLSAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2Uo
bU91dHB1dEhMU0wpOwotICAgICAgICAgICAgb3V0IDw8ICI7XG4iOwotICAgICAgICAgICAgb3V0
IDw8ICJpZiAocyIgPDwgaSA8PCAiKVxuIgotICAgICAgICAgICAgICAgICAgICJ7XG4iOwotICAg
ICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgICAgICBub2RlLT5nZXRS
aWdodCgpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgIG91dCA8PCAiICAgIHMiIDw8IGkg
PDwgIiA9ICI7Ci0gICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAgICAg
ICAgIG5vZGUtPmdldFJpZ2h0KCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKLSAgICAgICAgICAg
IG91dCA8PCAiO1xuIgotICAgICAgICAgICAgICAgICAgICJ9XG4iOwotCi0gICAgICAgICAgICBv
dXQgPDwgIn1cbiI7Ci0KLSAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBVbmZvbGRTaG9ydENpcmN1aXQ6OnZpc2l0U2Vs
ZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uICpub2RlKQotewotICAgIFRJbmZv
U2lua0Jhc2UgJm91dCA9IG1PdXRwdXRITFNMLT5nZXRCb2R5U3RyZWFtKCk7Ci0KLSAgICAvLyBV
bmZvbGQgImIgPyB4IDogeSIgaW50byAidHlwZSBzOyBpZihiKSBzID0geDsgZWxzZSBzID0geTsi
Ci0gICAgaWYgKG5vZGUtPnVzZXNUZXJuYXJ5T3BlcmF0b3IoKSkKLSAgICB7Ci0gICAgICAgIGlu
dCBpID0gbVRlbXBvcmFyeUluZGV4OwotCi0gICAgICAgIG91dCA8PCBtT3V0cHV0SExTTC0+dHlw
ZVN0cmluZyhub2RlLT5nZXRUeXBlKCkpIDw8ICIgcyIgPDwgaSA8PCAiO1xuIjsKLQotICAgICAg
ICBvdXQgPDwgIntcbiI7Ci0KLSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAg
ICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8
ICJpZiAoIjsKLSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUt
PmdldENvbmRpdGlvbigpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Ci0gICAgICAgIG91dCA8PCAi
KVxuIgotICAgICAgICAgICAgICAgIntcbiI7Ci0gICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkg
KyAxOwotICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAg
ICAgIG91dCA8PCAiICAgIHMiIDw8IGkgPDwgIiA9ICI7Ci0gICAgICAgIG1UZW1wb3JhcnlJbmRl
eCA9IGkgKyAxOwotICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+dHJhdmVyc2UobU91dHB1
dEhMU0wpOwotICAgICAgICBvdXQgPDwgIjtcbiIKLSAgICAgICAgICAgICAgICJ9XG4iCi0gICAg
ICAgICAgICAgICAiZWxzZVxuIgotICAgICAgICAgICAgICAgIntcbiI7Ci0gICAgICAgIG1UZW1w
b3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZl
cnNlKHRoaXMpOwotICAgICAgICBvdXQgPDwgIiAgICBzIiA8PCBpIDw8ICIgPSAiOwotICAgICAg
ICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9jaygp
LT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Ci0gICAgICAgIG91dCA8PCAiO1xuIgotICAgICAgICAg
ICAgICAgIn1cbiI7Ci0KLSAgICAgICAgb3V0IDw8ICJ9XG4iOwotCi0gICAgICAgIG1UZW1wb3Jh
cnlJbmRleCA9IGkgKyAxOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBV
bmZvbGRTaG9ydENpcmN1aXQ6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AgKm5v
ZGUpCi17Ci0gICAgaW50IHJld2luZEluZGV4ID0gbVRlbXBvcmFyeUluZGV4OwotCi0gICAgaWYg
KG5vZGUtPmdldEluaXQoKSkKLSAgICB7Ci0gICAgICAgIG5vZGUtPmdldEluaXQoKS0+dHJhdmVy
c2UodGhpcyk7Ci0gICAgfQotICAgIAotICAgIGlmIChub2RlLT5nZXRDb25kaXRpb24oKSkKLSAg
ICB7Ci0gICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICB9
Ci0KLSAgICBpZiAobm9kZS0+Z2V0RXhwcmVzc2lvbigpKQotICAgIHsKLSAgICAgICAgbm9kZS0+
Z2V0RXhwcmVzc2lvbigpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICB9Ci0KLSAgICBtVGVtcG9yYXJ5
SW5kZXggPSByZXdpbmRJbmRleDsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotaW50IFVuZm9s
ZFNob3J0Q2lyY3VpdDo6Z2V0TmV4dFRlbXBvcmFyeUluZGV4KCkKLXsKLSAgICByZXR1cm4gbVRl
bXBvcmFyeUluZGV4Kys7Ci19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGFlMjk4OWZhNGFiNDk1MDI1YmE0YzkxNzc1YTFiMGU3ZmMyNWU5ZDcuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oCisrKyAvZGV2L251
bGwKQEAgLTEsMzkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLS8vIFVuZm9sZFNob3J0Q2ly
Y3VpdCBpcyBhbiBBU1QgdHJhdmVyc2VyIHRvIG91dHB1dCBzaG9ydC1jaXJjdWl0aW5nIG9wZXJh
dG9ycyBhcyBpZi1lbHNlIHN0YXRlbWVudHMKLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfVU5GT0xE
U0hPUlRDSVJDVUlUX0hfCi0jZGVmaW5lIENPTVBJTEVSX1VORk9MRFNIT1JUQ0lSQ1VJVF9IXwot
Ci0jaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIv
UGFyc2VDb250ZXh0LmgiCi0KLW5hbWVzcGFjZSBzaAotewotY2xhc3MgT3V0cHV0SExTTDsKLQot
Y2xhc3MgVW5mb2xkU2hvcnRDaXJjdWl0IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKLXsKLSAg
cHVibGljOgotICAgIFVuZm9sZFNob3J0Q2lyY3VpdChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBP
dXRwdXRITFNMICpvdXRwdXRITFNMKTsKLQotICAgIHZvaWQgdHJhdmVyc2UoVEludGVybU5vZGUg
Km5vZGUpOwotICAgIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkq
KTsKLSAgICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9u
ICpub2RlKTsKLSAgICBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AgKm5v
ZGUpOwotCi0gICAgaW50IGdldE5leHRUZW1wb3JhcnlJbmRleCgpOwotCi0gIHByb3RlY3RlZDoK
LSAgICBUUGFyc2VDb250ZXh0ICZtQ29udGV4dDsKLSAgICBPdXRwdXRITFNMICpjb25zdCBtT3V0
cHV0SExTTDsKLQotICAgIGludCBtVGVtcG9yYXJ5SW5kZXg7Ci19OwotfQotCi0jZW5kaWYgICAv
LyBDT01QSUxFUl9VTkZPTERTSE9SVENJUkNVSVRfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdEFTVC5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2ZDBmMmYzMGJlMTYyMWI4M2IwMWRi
NGZhYjkwNGI0YWUyOGJmNGUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0
Q2lyY3VpdEFTVC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0QVNULmgiCi0K
LW5hbWVzcGFjZQotewotCi0vLyAieCB8fCB5IiBpcyBlcXVpdmFsZW50IHRvICJ4ID8gdHJ1ZSA6
IHkiLgotVEludGVybVNlbGVjdGlvbiAqVW5mb2xkT1IoVEludGVybVR5cGVkICp4LCBUSW50ZXJt
VHlwZWQgKnkpCi17Ci0gICAgY29uc3QgVFR5cGUgYm9vbFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZp
bmVkKTsKLSAgICBDb25zdGFudFVuaW9uICp1ID0gbmV3IENvbnN0YW50VW5pb247Ci0gICAgdS0+
c2V0QkNvbnN0KHRydWUpOwotICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICp0cnVlTm9kZSA9IG5l
dyBUSW50ZXJtQ29uc3RhbnRVbmlvbigKLSAgICAgICAgdSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5k
ZWZpbmVkLCBFdnFDb25zdCwgMSkpOwotICAgIHJldHVybiBuZXcgVEludGVybVNlbGVjdGlvbih4
LCB0cnVlTm9kZSwgeSwgYm9vbFR5cGUpOwotfQotCi0vLyAieCAmJiB5IiBpcyBlcXVpdmFsZW50
IHRvICJ4ID8geSA6IGZhbHNlIi4KLVRJbnRlcm1TZWxlY3Rpb24gKlVuZm9sZEFORChUSW50ZXJt
VHlwZWQgKngsIFRJbnRlcm1UeXBlZCAqeSkKLXsKLSAgICBjb25zdCBUVHlwZSBib29sVHlwZShF
YnRCb29sLCBFYnBVbmRlZmluZWQpOwotICAgIENvbnN0YW50VW5pb24gKnUgPSBuZXcgQ29uc3Rh
bnRVbmlvbjsKLSAgICB1LT5zZXRCQ29uc3QoZmFsc2UpOwotICAgIFRJbnRlcm1Db25zdGFudFVu
aW9uICpmYWxzZU5vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24oCi0gICAgICAgIHUsIFRU
eXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QsIDEpKTsKLSAgICByZXR1cm4gbmV3
IFRJbnRlcm1TZWxlY3Rpb24oeCwgeSwgZmFsc2VOb2RlLCBib29sVHlwZSk7Ci19Ci0KLX0gIC8v
IG5hbWVzcGFjZSBhbm9ueW1vdXMKLQotYm9vbCBVbmZvbGRTaG9ydENpcmN1aXRBU1Q6OnZpc2l0
QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2RlKQotewotICAgIFRJbnRlcm1T
ZWxlY3Rpb24gKnJlcGxhY2VtZW50ID0gTlVMTDsKLQotICAgIHN3aXRjaCAobm9kZS0+Z2V0T3Ao
KSkKLSAgICB7Ci0gICAgICBjYXNlIEVPcExvZ2ljYWxPcjoKLSAgICAgICAgcmVwbGFjZW1lbnQg
PSBVbmZvbGRPUihub2RlLT5nZXRMZWZ0KCksIG5vZGUtPmdldFJpZ2h0KCkpOwotICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDoKLSAgICAgICAgcmVwbGFjZW1lbnQgPSBV
bmZvbGRBTkQobm9kZS0+Z2V0TGVmdCgpLCBub2RlLT5nZXRSaWdodCgpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKHJlcGxh
Y2VtZW50KQotICAgIHsKLSAgICAgICAgcmVwbGFjZW1lbnRzLnB1c2hfYmFjaygKLSAgICAgICAg
ICAgIE5vZGVVcGRhdGVFbnRyeShnZXRQYXJlbnROb2RlKCksIG5vZGUsIHJlcGxhY2VtZW50KSk7
Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFVuZm9sZFNob3J0Q2lyY3VpdEFT
VDo6dXBkYXRlVHJlZSgpCi17Ci0gICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHJlcGxhY2Vt
ZW50cy5zaXplKCk7ICsraWkpCi0gICAgewotICAgICAgICBjb25zdCBOb2RlVXBkYXRlRW50cnkm
IGVudHJ5ID0gcmVwbGFjZW1lbnRzW2lpXTsKLSAgICAgICAgQVNTRVJUKGVudHJ5LnBhcmVudCk7
Ci0gICAgICAgIGJvb2wgcmVwbGFjZWQgPSBlbnRyeS5wYXJlbnQtPnJlcGxhY2VDaGlsZE5vZGUo
Ci0gICAgICAgICAgICBlbnRyeS5vcmlnaW5hbCwgZW50cnkucmVwbGFjZW1lbnQpOwotICAgICAg
ICBBU1NFUlQocmVwbGFjZWQpOwotCi0gICAgICAgIC8vIEluIEFTVCB0cmF2ZXJzaW5nLCBhIHBh
cmVudCBpcyB2aXNpdGVkIGJlZm9yZSBpdHMgY2hpbGRyZW4uCi0gICAgICAgIC8vIEFmdGVyIHdl
IHJlcGxhY2UgYSBub2RlLCBpZiBhbiBpbW1lZGlhdGUgY2hpbGQgaXMgdG8KLSAgICAgICAgLy8g
YmUgcmVwbGFjZWQsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGRvbid0IHVwZGF0ZSB0aGUgcmVw
bGFjZWQKLSAgICAvLyBub2RlOyBpbnN0ZWFkLCB3ZSB1cGRhdGUgdGhlIHJlcGxhY2VtZW50IG5v
ZGUuCi0gICAgICAgIGZvciAoc2l6ZV90IGpqID0gaWkgKyAxOyBqaiA8IHJlcGxhY2VtZW50cy5z
aXplKCk7ICsramopCi0gICAgICAgIHsKLSAgICAgICAgICAgIE5vZGVVcGRhdGVFbnRyeSYgZW50
cnkyID0gcmVwbGFjZW1lbnRzW2pqXTsKLSAgICAgICAgICAgIGlmIChlbnRyeTIucGFyZW50ID09
IGVudHJ5Lm9yaWdpbmFsKQotICAgICAgICAgICAgICAgIGVudHJ5Mi5wYXJlbnQgPSBlbnRyeS5y
ZXBsYWNlbWVudDsKLSAgICAgICAgfQotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdEFTVC5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdEFTVC5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmM1MDA2NjQ4NTQ2OGFkMTYzZjM5MWI1
YzYyZjE2MTgyN2ExYjVkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENp
cmN1aXRBU1QuaAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8vCi0vLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
LS8vCi0vLyBVbmZvbGRTaG9ydENpcmN1aXRBU1QgaXMgYW4gQVNUIHRyYXZlcnNlciB0byByZXBs
YWNlIHNob3J0LWNpcmN1aXRpbmcKLS8vIG9wZXJhdGlvbnMgd2l0aCB0ZXJuYXJ5IG9wZXJhdGlv
bnMuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1VORk9MRF9TSE9SVF9DSVJDVUlUX0FTVF9IXwot
I2RlZmluZSBDT01QSUxFUl9VTkZPTERfU0hPUlRfQ0lSQ1VJVF9BU1RfSF8KLQotI2luY2x1ZGUg
ImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgi
Ci0KLS8vIFRoaXMgdHJhdmVyc2VyIGlkZW50aWZpZXMgYWxsIHRoZSBzaG9ydCBjaXJjdWl0IGJp
bmFyeSAgbm9kZXMgdGhhdCBuZWVkIHRvCi0vLyBiZSByZXBsYWNlZCwgYW5kIGNyZWF0ZXMgdGhl
IGNvcnJlc3BvbmRpbmcgcmVwbGFjZW1lbnQgbm9kZXMuIEhvd2V2ZXIsCi0vLyB0aGUgYWN0dWFs
IHJlcGxhY2VtZW50cyBoYXBwZW4gYWZ0ZXIgdGhlIHRyYXZlcnNlIHRocm91Z2ggdXBkYXRlVHJl
ZSgpLgotCi1jbGFzcyBVbmZvbGRTaG9ydENpcmN1aXRBU1QgOiBwdWJsaWMgVEludGVybVRyYXZl
cnNlcgotewotICBwdWJsaWM6Ci0gICAgVW5mb2xkU2hvcnRDaXJjdWl0QVNUKCkgeyB9Ci0KLSAg
ICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKik7
Ci0KLSAgICB2b2lkIHVwZGF0ZVRyZWUoKTsKLQotICBwcml2YXRlOgotICAgIHN0cnVjdCBOb2Rl
VXBkYXRlRW50cnkKLSAgICB7Ci0gICAgICAgIE5vZGVVcGRhdGVFbnRyeShUSW50ZXJtTm9kZSAq
X3BhcmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICpfb3JpZ2luYWws
Ci0gICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSAqX3JlcGxhY2VtZW50KQotICAg
ICAgICAgICAgOiBwYXJlbnQoX3BhcmVudCksCi0gICAgICAgICAgICAgIG9yaWdpbmFsKF9vcmln
aW5hbCksCi0gICAgICAgICAgICAgIHJlcGxhY2VtZW50KF9yZXBsYWNlbWVudCkge30KLQotICAg
ICAgICBUSW50ZXJtTm9kZSAqcGFyZW50OwotICAgICAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWw7
Ci0gICAgICAgIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudDsKLSAgICB9OwotCi0gICAgLy8gRHVy
aW5nIHRyYXZlcnNpbmcsIHNhdmUgYWxsIHRoZSByZXBsYWNlbWVudHMgdGhhdCBuZWVkIHRvIGhh
cHBlbjsKLSAgICAvLyB0aGVuIHJlcGxhY2UgdGhlbSBieSBjYWxsaW5nIHVwZGF0ZU5vZGVzKCku
Ci0gICAgc3RkOjp2ZWN0b3I8Tm9kZVVwZGF0ZUVudHJ5PiByZXBsYWNlbWVudHM7Ci0KLSAgICBE
SVNBTExPV19DT1BZX0FORF9BU1NJR04oVW5mb2xkU2hvcnRDaXJjdWl0QVNUKTsKLX07Ci0KLSNl
bmRpZiAgLy8gQ09NUElMRVJfVU5GT0xEX1NIT1JUX0NJUkNVSVRfQVNUX0hfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5pZm9ybS5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5pZm9ybS5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGYzNjdkYjJiZThlNGZmNWQxMzljMGU3MWM4YmFiODRjNzRkNDdm
ZGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuaWZvcm0uY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMjEgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9Vbmlm
b3JtLmgiCi0KLW5hbWVzcGFjZSBzaAotewotCi1Vbmlmb3JtOjpVbmlmb3JtKEdMZW51bSB0eXBl
LCBHTGVudW0gcHJlY2lzaW9uLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgYXJyYXlTaXplLCBpbnQg
cmVnaXN0ZXJJbmRleCkKLXsKLSAgICB0aGlzLT50eXBlID0gdHlwZTsKLSAgICB0aGlzLT5wcmVj
aXNpb24gPSBwcmVjaXNpb247Ci0gICAgdGhpcy0+bmFtZSA9IG5hbWU7Ci0gICAgdGhpcy0+YXJy
YXlTaXplID0gYXJyYXlTaXplOwotICAgIHRoaXMtPnJlZ2lzdGVySW5kZXggPSByZWdpc3Rlcklu
ZGV4OwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvVW5pZm9ybS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Vu
aWZvcm0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM1M2ZmYTdkMmZjNTg0ZTQw
MGMyY2YwNGQwMTJlNmFmMWUyNTJkNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5pZm9y
bS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykg
MjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5k
ZWYgQ09NUElMRVJfVU5JRk9STV9IXwotI2RlZmluZSBDT01QSUxFUl9VTklGT1JNX0hfCi0KLSNp
bmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jZGVmaW5lIEdMX0FQSUNBTEwK
LSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLQotbmFtZXNwYWNlIHNoCi17Ci0KLXN0cnVjdCBVbmlm
b3JtCi17Ci0gICAgVW5pZm9ybShHTGVudW0gdHlwZSwgR0xlbnVtIHByZWNpc2lvbiwgY29uc3Qg
Y2hhciAqbmFtZSwgaW50IGFycmF5U2l6ZSwgaW50IHJlZ2lzdGVySW5kZXgpOwotCi0gICAgR0xl
bnVtIHR5cGU7Ci0gICAgR0xlbnVtIHByZWNpc2lvbjsKLSAgICBzdGQ6OnN0cmluZyBuYW1lOwot
ICAgIHVuc2lnbmVkIGludCBhcnJheVNpemU7Ci0gICAgCi0gICAgaW50IHJlZ2lzdGVySW5kZXg7
Ci19OwotCi10eXBlZGVmIHN0ZDo6dmVjdG9yPFVuaWZvcm0+IEFjdGl2ZVVuaWZvcm1zOwotCi19
Ci0KLSNlbmRpZiAgIC8vIENPTVBJTEVSX1VOSUZPUk1fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQ5NjljNDg5ZmExZDBkOGU4OWM5Nzgz
YWNiMWE3MTliNzFkZTAzZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFsaWRhdGVMaW1p
dGF0aW9ucy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MTIgKzAsMCBAQAotLy8KLS8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuaCIKLSNpbmNs
dWRlICJjb21waWxlci9JbmZvU2luay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVQ
YXJzZUNvbnRleHQuaCIKLSNpbmNsdWRlICJjb21waWxlci9QYXJzZUNvbnRleHQuaCIKLQotbmFt
ZXNwYWNlIHsKLWJvb2wgSXNMb29wSW5kZXgoY29uc3QgVEludGVybVN5bWJvbCogc3ltYm9sLCBj
b25zdCBUTG9vcFN0YWNrJiBzdGFjaykgewotICAgIGZvciAoVExvb3BTdGFjazo6Y29uc3RfaXRl
cmF0b3IgaSA9IHN0YWNrLmJlZ2luKCk7IGkgIT0gc3RhY2suZW5kKCk7ICsraSkgewotICAgICAg
ICBpZiAoaS0+aW5kZXguaWQgPT0gc3ltYm9sLT5nZXRJZCgpKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBNYXJrTG9vcEZvclVu
cm9sbChjb25zdCBUSW50ZXJtU3ltYm9sKiBzeW1ib2wsIFRMb29wU3RhY2smIHN0YWNrKSB7Ci0g
ICAgZm9yIChUTG9vcFN0YWNrOjppdGVyYXRvciBpID0gc3RhY2suYmVnaW4oKTsgaSAhPSBzdGFj
ay5lbmQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChpLT5pbmRleC5pZCA9PSBzeW1ib2wtPmdldElk
KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChpLT5sb29wICE9IE5VTEwpOwotICAgICAgICAgICAg
aS0+bG9vcC0+c2V0VW5yb2xsRmxhZyh0cnVlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBVTlJFQUNIQUJMRSgpOwotfQotCi0vLyBUcmF2ZXJzZXMgYSBub2Rl
IHRvIGNoZWNrIGlmIGl0IHJlcHJlc2VudHMgYSBjb25zdGFudCBpbmRleCBleHByZXNzaW9uLgot
Ly8gRGVmaW5pdGlvbjoKLS8vIGNvbnN0YW50LWluZGV4LWV4cHJlc3Npb25zIGFyZSBhIHN1cGVy
c2V0IG9mIGNvbnN0YW50LWV4cHJlc3Npb25zLgotLy8gQ29uc3RhbnQtaW5kZXgtZXhwcmVzc2lv
bnMgY2FuIGluY2x1ZGUgbG9vcCBpbmRpY2VzIGFzIGRlZmluZWQgaW4KLS8vIEdMU0wgRVMgMS4w
IHNwZWMsIEFwcGVuZGl4IEEsIHNlY3Rpb24gNC4KLS8vIFRoZSBmb2xsb3dpbmcgYXJlIGNvbnN0
YW50LWluZGV4LWV4cHJlc3Npb25zOgotLy8gLSBDb25zdGFudCBleHByZXNzaW9ucwotLy8gLSBM
b29wIGluZGljZXMgYXMgZGVmaW5lZCBpbiBzZWN0aW9uIDQKLS8vIC0gRXhwcmVzc2lvbnMgY29t
cG9zZWQgb2YgYm90aCBvZiB0aGUgYWJvdmUKLWNsYXNzIFZhbGlkYXRlQ29uc3RJbmRleEV4cHIg
OiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7Ci1wdWJsaWM6Ci0gICAgVmFsaWRhdGVDb25zdElu
ZGV4RXhwcihjb25zdCBUTG9vcFN0YWNrJiBzdGFjaykKLSAgICAgICAgOiBtVmFsaWQodHJ1ZSks
IG1Mb29wU3RhY2soc3RhY2spIHt9Ci0KLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHBhcnNl
ZCBub2RlIHJlcHJlc2VudHMgYSBjb25zdGFudCBpbmRleCBleHByZXNzaW9uLgotICAgIGJvb2wg
aXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1WYWxpZDsgfQotCi0gICAgdmlydHVhbCB2b2lkIHZp
c2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCkgewotICAgICAgICAvLyBPbmx5IGNvbnN0
YW50cyBhbmQgbG9vcCBpbmRpY2VzIGFyZSBhbGxvd2VkIGluIGEKLSAgICAgICAgLy8gY29uc3Rh
bnQgaW5kZXggZXhwcmVzc2lvbi4KLSAgICAgICAgaWYgKG1WYWxpZCkgewotICAgICAgICAgICAg
bVZhbGlkID0gKHN5bWJvbC0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHx8Ci0gICAgICAg
ICAgICAgICAgICAgICBJc0xvb3BJbmRleChzeW1ib2wsIG1Mb29wU3RhY2spOwotICAgICAgICB9
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGJvb2wgbVZhbGlkOwotICAgIGNvbnN0IFRMb29wU3Rh
Y2smIG1Mb29wU3RhY2s7Ci19OwotCi0vLyBUcmF2ZXJzZXMgYSBub2RlIHRvIGNoZWNrIGlmIGl0
IHVzZXMgYSBsb29wIGluZGV4LgotLy8gSWYgYW4gaW50IGxvb3AgaW5kZXggaXMgdXNlZCBpbiBp
dHMgYm9keSBhcyBhIHNhbXBsZXIgYXJyYXkgaW5kZXgsCi0vLyBtYXJrIHRoZSBsb29wIGZvciB1
bnJvbGwuCi1jbGFzcyBWYWxpZGF0ZUxvb3BJbmRleEV4cHIgOiBwdWJsaWMgVEludGVybVRyYXZl
cnNlciB7Ci1wdWJsaWM6Ci0gICAgVmFsaWRhdGVMb29wSW5kZXhFeHByKFRMb29wU3RhY2smIHN0
YWNrKQotICAgICAgICA6IG1Vc2VzRmxvYXRMb29wSW5kZXgoZmFsc2UpLAotICAgICAgICAgIG1V
c2VzSW50TG9vcEluZGV4KGZhbHNlKSwKLSAgICAgICAgICBtTG9vcFN0YWNrKHN0YWNrKSB7fQot
Ci0gICAgYm9vbCB1c2VzRmxvYXRMb29wSW5kZXgoKSBjb25zdCB7IHJldHVybiBtVXNlc0Zsb2F0
TG9vcEluZGV4OyB9Ci0gICAgYm9vbCB1c2VzSW50TG9vcEluZGV4KCkgY29uc3QgeyByZXR1cm4g
bVVzZXNJbnRMb29wSW5kZXg7IH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50
ZXJtU3ltYm9sKiBzeW1ib2wpIHsKLSAgICAgICAgaWYgKElzTG9vcEluZGV4KHN5bWJvbCwgbUxv
b3BTdGFjaykpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoc3ltYm9sLT5nZXRCYXNpY1R5cGUoKSkg
ewotICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgotICAgICAgICAgICAgICAgIG1Vc2VzRmxv
YXRMb29wSW5kZXggPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEVidEludDoKLSAgICAgICAgICAgICAgICBtVXNlc0ludExvb3BJbmRleCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgTWFya0xvb3BGb3JVbnJvbGwoc3ltYm9sLCBtTG9vcFN0YWNrKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci1wcml2YXRlOgotICAgIGJvb2wgbVVzZXNGbG9hdExvb3BJbmRleDsKLSAgICBib29sIG1Vc2Vz
SW50TG9vcEluZGV4OwotICAgIFRMb29wU3RhY2smIG1Mb29wU3RhY2s7Ci19OwotfSAgLy8gbmFt
ZXNwYWNlCi0KLVZhbGlkYXRlTGltaXRhdGlvbnM6OlZhbGlkYXRlTGltaXRhdGlvbnMoU2hTaGFk
ZXJUeXBlIHNoYWRlclR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRJbmZvU2lua0Jhc2UmIHNpbmspCi0gICAgOiBtU2hhZGVyVHlwZShzaGFkZXJUeXBlKSwK
LSAgICAgIG1TaW5rKHNpbmspLAotICAgICAgbU51bUVycm9ycygwKQotewotfQotCi1ib29sIFZh
bGlkYXRlTGltaXRhdGlvbnM6OnZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5KiBub2Rl
KQotewotICAgIC8vIENoZWNrIGlmIGxvb3AgaW5kZXggaXMgbW9kaWZpZWQgaW4gdGhlIGxvb3Ag
Ym9keS4KLSAgICB2YWxpZGF0ZU9wZXJhdGlvbihub2RlLCBub2RlLT5nZXRMZWZ0KCkpOwotCi0g
ICAgLy8gQ2hlY2sgaW5kZXhpbmcuCi0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKSB7Ci0gICAg
ICBjYXNlIEVPcEluZGV4RGlyZWN0OgotICAgICAgICB2YWxpZGF0ZUluZGV4aW5nKG5vZGUpOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wSW5kZXhJbmRpcmVjdDoKLSNpZiBkZWZpbmVk
KF9fQVBQTEVfXykKLSAgICAgICAgLy8gTG9vcCB1bnJvbGxpbmcgaXMgYSB3b3JrLWFyb3VuZCBm
b3IgYSBNYWMgQ2cgY29tcGlsZXIgYnVnIHdoZXJlIGl0Ci0gICAgICAgIC8vIGNyYXNoZXMgd2hl
biBhIHNhbXBsZXIgYXJyYXkncyBpbmRleCBpcyBhbHNvIHRoZSBsb29wIGluZGV4LgotICAgICAg
ICAvLyBPbmNlIEFwcGxlIGZpeGVzIHRoaXMgYnVnLCB3ZSBzaG91bGQgcmVtb3ZlIHRoZSBjb2Rl
IGluIHRoaXMgQ0wuCi0gICAgICAgIC8vIFNlZSBodHRwOi8vY29kZXJldmlldy5hcHBzcG90LmNv
bS80MzMxMDQ4Ly4KLSAgICAgICAgaWYgKChub2RlLT5nZXRMZWZ0KCkgIT0gTlVMTCkgJiYgKG5v
ZGUtPmdldFJpZ2h0KCkgIT0gTlVMTCkgJiYKLSAgICAgICAgICAgIChub2RlLT5nZXRMZWZ0KCkt
PmdldEFzU3ltYm9sTm9kZSgpKSkgewotICAgICAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9s
ID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAgICAgICAgICAgIGlmIChJ
c1NhbXBsZXIoc3ltYm9sLT5nZXRCYXNpY1R5cGUoKSkgJiYgc3ltYm9sLT5pc0FycmF5KCkpIHsK
LSAgICAgICAgICAgICAgICBWYWxpZGF0ZUxvb3BJbmRleEV4cHIgdmFsaWRhdGUobUxvb3BTdGFj
ayk7Ci0gICAgICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UoJnZhbGlkYXRl
KTsKLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGUudXNlc0Zsb2F0TG9vcEluZGV4KCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAic2FtcGxlciBhcnJheSBpbmRleCBpcyBmbG9hdCBsb29wIGluZGV4IiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgImZvciIpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIHZhbGlkYXRlSW5kZXhpbmco
bm9kZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogYnJlYWs7Ci0gICAgfQotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZpc2l0VW5hcnko
VmlzaXQsIFRJbnRlcm1VbmFyeSogbm9kZSkKLXsKLSAgICAvLyBDaGVjayBpZiBsb29wIGluZGV4
IGlzIG1vZGlmaWVkIGluIHRoZSBsb29wIGJvZHkuCi0gICAgdmFsaWRhdGVPcGVyYXRpb24obm9k
ZSwgbm9kZS0+Z2V0T3BlcmFuZCgpKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFZh
bGlkYXRlTGltaXRhdGlvbnM6OnZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRl
KiBub2RlKQotewotICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkgewotICAgICAgY2FzZSBFT3BG
dW5jdGlvbkNhbGw6Ci0gICAgICAgIHZhbGlkYXRlRnVuY3Rpb25DYWxsKG5vZGUpOwotICAgICAg
ICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdExvb3AoVmlzaXQs
IFRJbnRlcm1Mb29wKiBub2RlKQotewotICAgIGlmICghdmFsaWRhdGVMb29wVHlwZShub2RlKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVExvb3BJbmZvIGluZm87Ci0gICAgbWVtc2V0
KCZpbmZvLCAwLCBzaXplb2YoVExvb3BJbmZvKSk7Ci0gICAgaW5mby5sb29wID0gbm9kZTsKLSAg
ICBpZiAoIXZhbGlkYXRlRm9yTG9vcEhlYWRlcihub2RlLCAmaW5mbykpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIFRJbnRlcm1Ob2RlKiBib2R5ID0gbm9kZS0+Z2V0Qm9keSgpOwotICAg
IGlmIChib2R5ICE9IE5VTEwpIHsKLSAgICAgICAgbUxvb3BTdGFjay5wdXNoX2JhY2soaW5mbyk7
Ci0gICAgICAgIGJvZHktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBtTG9vcFN0YWNrLnBvcF9i
YWNrKCk7Ci0gICAgfQotCi0gICAgLy8gVGhlIGxvb3AgaXMgZnVsbHkgcHJvY2Vzc2VkIC0gbm8g
bmVlZCB0byB2aXNpdCBjaGlsZHJlbi4KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgVmFs
aWRhdGVMaW1pdGF0aW9uczo6ZXJyb3IoVFNvdXJjZUxvYyBsb2MsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4pCi17
Ci0gICAgbVNpbmsucHJlZml4KEVQcmVmaXhFcnJvcik7Ci0gICAgbVNpbmsubG9jYXRpb24obG9j
KTsKLSAgICBtU2luayA8PCAiJyIgPDwgdG9rZW4gPDwgIicgOiAiIDw8IHJlYXNvbiA8PCAiXG4i
OwotICAgICsrbU51bUVycm9yczsKLX0KLQotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp3aXRo
aW5Mb29wQm9keSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFtTG9vcFN0YWNrLmVtcHR5KCk7Ci19
Ci0KLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6aXNMb29wSW5kZXgoY29uc3QgVEludGVybVN5
bWJvbCogc3ltYm9sKSBjb25zdAotewotICAgIHJldHVybiBJc0xvb3BJbmRleChzeW1ib2wsIG1M
b29wU3RhY2spOwotfQotCi1ib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlTG9vcFR5
cGUoVEludGVybUxvb3AqIG5vZGUpIHsKLSAgICBUTG9vcFR5cGUgdHlwZSA9IG5vZGUtPmdldFR5
cGUoKTsKLSAgICBpZiAodHlwZSA9PSBFTG9vcEZvcikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICAvLyBSZWplY3Qgd2hpbGUgYW5kIGRvLXdoaWxlIGxvb3BzLgotICAgIGVycm9yKG5vZGUt
PmdldExpbmUoKSwKLSAgICAgICAgICAiVGhpcyB0eXBlIG9mIGxvb3AgaXMgbm90IGFsbG93ZWQi
LAotICAgICAgICAgIHR5cGUgPT0gRUxvb3BXaGlsZSA/ICJ3aGlsZSIgOiAiZG8iKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JM
b29wSGVhZGVyKFRJbnRlcm1Mb29wKiBub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVExvb3BJbmZvKiBpbmZvKQotewotICAgIEFTU0VSVChub2Rl
LT5nZXRUeXBlKCkgPT0gRUxvb3BGb3IpOwotCi0gICAgLy8KLSAgICAvLyBUaGUgZm9yIHN0YXRl
bWVudCBoYXMgdGhlIGZvcm06Ci0gICAgLy8gICAgZm9yICggaW5pdC1kZWNsYXJhdGlvbiA7IGNv
bmRpdGlvbiA7IGV4cHJlc3Npb24gKSBzdGF0ZW1lbnQKLSAgICAvLwotICAgIGlmICghdmFsaWRh
dGVGb3JMb29wSW5pdChub2RlLCBpbmZvKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
ICghdmFsaWRhdGVGb3JMb29wQ29uZChub2RlLCBpbmZvKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmICghdmFsaWRhdGVGb3JMb29wRXhwcihub2RlLCBpbmZvKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmFsaWRhdGVMaW1pdGF0
aW9uczo6dmFsaWRhdGVGb3JMb29wSW5pdChUSW50ZXJtTG9vcCogbm9kZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTG9vcEluZm8qIGluZm8pCi17Ci0g
ICAgVEludGVybU5vZGUqIGluaXQgPSBub2RlLT5nZXRJbml0KCk7Ci0gICAgaWYgKGluaXQgPT0g
TlVMTCkgewotICAgICAgICBlcnJvcihub2RlLT5nZXRMaW5lKCksICJNaXNzaW5nIGluaXQgZGVj
bGFyYXRpb24iLCAiZm9yIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAv
LwotICAgIC8vIGluaXQtZGVjbGFyYXRpb24gaGFzIHRoZSBmb3JtOgotICAgIC8vICAgICB0eXBl
LXNwZWNpZmllciBpZGVudGlmaWVyID0gY29uc3RhbnQtZXhwcmVzc2lvbgotICAgIC8vCi0gICAg
VEludGVybUFnZ3JlZ2F0ZSogZGVjbCA9IGluaXQtPmdldEFzQWdncmVnYXRlKCk7Ci0gICAgaWYg
KChkZWNsID09IE5VTEwpIHx8IChkZWNsLT5nZXRPcCgpICE9IEVPcERlY2xhcmF0aW9uKSkgewot
ICAgICAgICBlcnJvcihpbml0LT5nZXRMaW5lKCksICJJbnZhbGlkIGluaXQgZGVjbGFyYXRpb24i
LCAiZm9yIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgLy8gVG8ga2VlcCB0
aGluZ3Mgc2ltcGxlIGRvIG5vdCBhbGxvdyBkZWNsYXJhdGlvbiBsaXN0LgotICAgIFRJbnRlcm1T
ZXF1ZW5jZSYgZGVjbFNlcSA9IGRlY2wtPmdldFNlcXVlbmNlKCk7Ci0gICAgaWYgKGRlY2xTZXEu
c2l6ZSgpICE9IDEpIHsKLSAgICAgICAgZXJyb3IoZGVjbC0+Z2V0TGluZSgpLCAiSW52YWxpZCBp
bml0IGRlY2xhcmF0aW9uIiwgImZvciIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIFRJbnRlcm1CaW5hcnkqIGRlY2xJbml0ID0gZGVjbFNlcVswXS0+Z2V0QXNCaW5hcnlOb2Rl
KCk7Ci0gICAgaWYgKChkZWNsSW5pdCA9PSBOVUxMKSB8fCAoZGVjbEluaXQtPmdldE9wKCkgIT0g
RU9wSW5pdGlhbGl6ZSkpIHsKLSAgICAgICAgZXJyb3IoZGVjbC0+Z2V0TGluZSgpLCAiSW52YWxp
ZCBpbml0IGRlY2xhcmF0aW9uIiwgImZvciIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGRlY2xJbml0LT5nZXRMZWZ0KCktPmdldEFz
U3ltYm9sTm9kZSgpOwotICAgIGlmIChzeW1ib2wgPT0gTlVMTCkgewotICAgICAgICBlcnJvcihk
ZWNsSW5pdC0+Z2V0TGluZSgpLCAiSW52YWxpZCBpbml0IGRlY2xhcmF0aW9uIiwgImZvciIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIFRoZSBsb29wIGluZGV4IGhhcyB0
eXBlIGludCBvciBmbG9hdC4KLSAgICBUQmFzaWNUeXBlIHR5cGUgPSBzeW1ib2wtPmdldEJhc2lj
VHlwZSgpOwotICAgIGlmICgodHlwZSAhPSBFYnRJbnQpICYmICh0eXBlICE9IEVidEZsb2F0KSkg
ewotICAgICAgICBlcnJvcihzeW1ib2wtPmdldExpbmUoKSwKLSAgICAgICAgICAgICAgIkludmFs
aWQgdHlwZSBmb3IgbG9vcCBpbmRleCIsIGdldEJhc2ljU3RyaW5nKHR5cGUpKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAvLyBUaGUgbG9vcCBpbmRleCBpcyBpbml0aWFsaXpl
ZCB3aXRoIGNvbnN0YW50IGV4cHJlc3Npb24uCi0gICAgaWYgKCFpc0NvbnN0RXhwcihkZWNsSW5p
dC0+Z2V0UmlnaHQoKSkpIHsKLSAgICAgICAgZXJyb3IoZGVjbEluaXQtPmdldExpbmUoKSwKLSAg
ICAgICAgICAgICAgIkxvb3AgaW5kZXggY2Fubm90IGJlIGluaXRpYWxpemVkIHdpdGggbm9uLWNv
bnN0YW50IGV4cHJlc3Npb24iLAotICAgICAgICAgICAgICBzeW1ib2wtPmdldFN5bWJvbCgpLmNf
c3RyKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaW5mby0+aW5kZXgu
aWQgPSBzeW1ib2wtPmdldElkKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmFsaWRh
dGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wQ29uZChUSW50ZXJtTG9vcCogbm9kZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTG9vcEluZm8qIGlu
Zm8pCi17Ci0gICAgVEludGVybU5vZGUqIGNvbmQgPSBub2RlLT5nZXRDb25kaXRpb24oKTsKLSAg
ICBpZiAoY29uZCA9PSBOVUxMKSB7Ci0gICAgICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgIk1p
c3NpbmcgY29uZGl0aW9uIiwgImZvciIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIC8vCi0gICAgLy8gY29uZGl0aW9uIGhhcyB0aGUgZm9ybToKLSAgICAvLyAgICAgbG9vcF9p
bmRleCByZWxhdGlvbmFsX29wZXJhdG9yIGNvbnN0YW50X2V4cHJlc3Npb24KLSAgICAvLwotICAg
IFRJbnRlcm1CaW5hcnkqIGJpbk9wID0gY29uZC0+Z2V0QXNCaW5hcnlOb2RlKCk7Ci0gICAgaWYg
KGJpbk9wID09IE5VTEwpIHsKLSAgICAgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiSW52YWxp
ZCBjb25kaXRpb24iLCAiZm9yIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
Ly8gTG9vcCBpbmRleCBzaG91bGQgYmUgdG8gdGhlIGxlZnQgb2YgcmVsYXRpb25hbCBvcGVyYXRv
ci4KLSAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBiaW5PcC0+Z2V0TGVmdCgpLT5nZXRBc1N5
bWJvbE5vZGUoKTsKLSAgICBpZiAoc3ltYm9sID09IE5VTEwpIHsKLSAgICAgICAgZXJyb3IoYmlu
T3AtPmdldExpbmUoKSwgIkludmFsaWQgY29uZGl0aW9uIiwgImZvciIpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChzeW1ib2wtPmdldElkKCkgIT0gaW5mby0+aW5kZXgu
aWQpIHsKLSAgICAgICAgZXJyb3Ioc3ltYm9sLT5nZXRMaW5lKCksCi0gICAgICAgICAgICAgICJF
eHBlY3RlZCBsb29wIGluZGV4Iiwgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAvLyBSZWxhdGlvbmFsIG9wZXJhdG9yIGlzIG9u
ZSBvZjogPiA+PSA8IDw9ID09IG9yICE9LgotICAgIHN3aXRjaCAoYmluT3AtPmdldE9wKCkpIHsK
LSAgICAgIGNhc2UgRU9wRXF1YWw6Ci0gICAgICBjYXNlIEVPcE5vdEVxdWFsOgotICAgICAgY2Fz
ZSBFT3BMZXNzVGhhbjoKLSAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46Ci0gICAgICBjYXNlIEVP
cExlc3NUaGFuRXF1YWw6Ci0gICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6Ci0gICAgICAg
IGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgZXJyb3IoYmluT3AtPmdldExpbmUoKSwK
LSAgICAgICAgICAgICAgIkludmFsaWQgcmVsYXRpb25hbCBvcGVyYXRvciIsCi0gICAgICAgICAg
ICAgIGdldE9wZXJhdG9yU3RyaW5nKGJpbk9wLT5nZXRPcCgpKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICAvLyBMb29wIGluZGV4IG11c3QgYmUgY29tcGFyZWQgd2l0aCBhIGNvbnN0YW50
LgotICAgIGlmICghaXNDb25zdEV4cHIoYmluT3AtPmdldFJpZ2h0KCkpKSB7Ci0gICAgICAgIGVy
cm9yKGJpbk9wLT5nZXRMaW5lKCksCi0gICAgICAgICAgICAgICJMb29wIGluZGV4IGNhbm5vdCBi
ZSBjb21wYXJlZCB3aXRoIG5vbi1jb25zdGFudCBleHByZXNzaW9uIiwKLSAgICAgICAgICAgICAg
c3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZh
bGlkYXRlRm9yTG9vcEV4cHIoVEludGVybUxvb3AqIG5vZGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVExvb3BJbmZvKiBpbmZvKQotewotICAgIFRJbnRl
cm1Ob2RlKiBleHByID0gbm9kZS0+Z2V0RXhwcmVzc2lvbigpOwotICAgIGlmIChleHByID09IE5V
TEwpIHsKLSAgICAgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiTWlzc2luZyBleHByZXNzaW9u
IiwgImZvciIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gZm9yIGV4
cHJlc3Npb24gaGFzIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1zOgotICAgIC8vICAgICBsb29w
X2luZGV4KysKLSAgICAvLyAgICAgbG9vcF9pbmRleC0tCi0gICAgLy8gICAgIGxvb3BfaW5kZXgg
Kz0gY29uc3RhbnRfZXhwcmVzc2lvbgotICAgIC8vICAgICBsb29wX2luZGV4IC09IGNvbnN0YW50
X2V4cHJlc3Npb24KLSAgICAvLyAgICAgKytsb29wX2luZGV4Ci0gICAgLy8gICAgIC0tbG9vcF9p
bmRleAotICAgIC8vIFRoZSBsYXN0IHR3byBmb3JtcyBhcmUgbm90IHNwZWNpZmllZCBpbiB0aGUg
c3BlYywgYnV0IEkgYW0gYXNzdW1pbmcKLSAgICAvLyBpdHMgYW4gb3ZlcnNpZ2h0LgotICAgIFRJ
bnRlcm1VbmFyeSogdW5PcCA9IGV4cHItPmdldEFzVW5hcnlOb2RlKCk7Ci0gICAgVEludGVybUJp
bmFyeSogYmluT3AgPSB1bk9wID8gTlVMTCA6IGV4cHItPmdldEFzQmluYXJ5Tm9kZSgpOwotCi0g
ICAgVE9wZXJhdG9yIG9wID0gRU9wTnVsbDsKLSAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBO
VUxMOwotICAgIGlmICh1bk9wICE9IE5VTEwpIHsKLSAgICAgICAgb3AgPSB1bk9wLT5nZXRPcCgp
OwotICAgICAgICBzeW1ib2wgPSB1bk9wLT5nZXRPcGVyYW5kKCktPmdldEFzU3ltYm9sTm9kZSgp
OwotICAgIH0gZWxzZSBpZiAoYmluT3AgIT0gTlVMTCkgewotICAgICAgICBvcCA9IGJpbk9wLT5n
ZXRPcCgpOwotICAgICAgICBzeW1ib2wgPSBiaW5PcC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5v
ZGUoKTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgb3BlcmFuZCBtdXN0IGJlIGxvb3AgaW5kZXguCi0g
ICAgaWYgKHN5bWJvbCA9PSBOVUxMKSB7Ci0gICAgICAgIGVycm9yKGV4cHItPmdldExpbmUoKSwg
IkludmFsaWQgZXhwcmVzc2lvbiIsICJmb3IiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICBpZiAoc3ltYm9sLT5nZXRJZCgpICE9IGluZm8tPmluZGV4LmlkKSB7Ci0gICAgICAg
IGVycm9yKHN5bWJvbC0+Z2V0TGluZSgpLAotICAgICAgICAgICAgICAiRXhwZWN0ZWQgbG9vcCBp
bmRleCIsIHN5bWJvbC0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgb3BlcmF0b3IgaXMgb25lIG9mOiArKyAtLSArPSAtPS4K
LSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDoKLSAgICAg
ICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OgotICAgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDoK
LSAgICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6Ci0gICAgICAgICAgICBBU1NFUlQoKHVuT3Ag
IT0gTlVMTCkgJiYgKGJpbk9wID09IE5VTEwpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEVPcEFkZEFzc2lnbjoKLSAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246Ci0gICAgICAg
ICAgICBBU1NFUlQoKHVuT3AgPT0gTlVMTCkgJiYgKGJpbk9wICE9IE5VTEwpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZXJyb3IoZXhwci0+Z2V0
TGluZSgpLCAiSW52YWxpZCBvcGVyYXRvciIsIGdldE9wZXJhdG9yU3RyaW5nKG9wKSk7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gTG9vcCBpbmRleCBtdXN0IGJl
IGluY3JlbWVudGVkL2RlY3JlbWVudGVkIHdpdGggYSBjb25zdGFudC4KLSAgICBpZiAoYmluT3Ag
IT0gTlVMTCkgewotICAgICAgICBpZiAoIWlzQ29uc3RFeHByKGJpbk9wLT5nZXRSaWdodCgpKSkg
ewotICAgICAgICAgICAgZXJyb3IoYmluT3AtPmdldExpbmUoKSwKLSAgICAgICAgICAgICAgICAg
ICJMb29wIGluZGV4IGNhbm5vdCBiZSBtb2RpZmllZCBieSBub24tY29uc3RhbnQgZXhwcmVzc2lv
biIsCi0gICAgICAgICAgICAgICAgICBzeW1ib2wtPmdldFN5bWJvbCgpLmNfc3RyKCkpOwotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGdW5jdGlvbkNhbGwo
VEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKLXsKLSAgICBBU1NFUlQobm9kZS0+Z2V0T3AoKSA9PSBF
T3BGdW5jdGlvbkNhbGwpOwotCi0gICAgLy8gSWYgbm90IHdpdGhpbiBsb29wIGJvZHksIHRoZXJl
IGlzIG5vdGhpbmcgdG8gY2hlY2suCi0gICAgaWYgKCF3aXRoaW5Mb29wQm9keSgpKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIExpc3Qgb2YgcGFyYW0gaW5kaWNlcyBmb3Igd2hpY2gg
bG9vcCBpbmRpY2VzIGFyZSB1c2VkIGFzIGFyZ3VtZW50LgotICAgIHR5cGVkZWYgc3RkOjp2ZWN0
b3I8c2l6ZV90PiBQYXJhbUluZGV4OwotICAgIFBhcmFtSW5kZXggcEluZGV4OwotICAgIFRJbnRl
cm1TZXF1ZW5jZSYgcGFyYW1zID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKLSAgICBmb3IgKFRJbnRl
cm1TZXF1ZW5jZTo6c2l6ZV90eXBlIGkgPSAwOyBpIDwgcGFyYW1zLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IHBhcmFtc1tpXS0+Z2V0QXNTeW1ib2xOb2Rl
KCk7Ci0gICAgICAgIGlmIChzeW1ib2wgJiYgaXNMb29wSW5kZXgoc3ltYm9sKSkKLSAgICAgICAg
ICAgIHBJbmRleC5wdXNoX2JhY2soaSk7Ci0gICAgfQotICAgIC8vIElmIG5vbmUgb2YgdGhlIGxv
b3AgaW5kaWNlcyBhcmUgdXNlZCBhcyBhcmd1bWVudHMsCi0gICAgLy8gdGhlcmUgaXMgbm90aGlu
ZyB0byBjaGVjay4KLSAgICBpZiAocEluZGV4LmVtcHR5KCkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgYm9vbCB2YWxpZCA9IHRydWU7Ci0gICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJs
ZSA9IEdldEdsb2JhbFBhcnNlQ29udGV4dCgpLT5zeW1ib2xUYWJsZTsKLSAgICBUU3ltYm9sKiBz
eW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKG5vZGUtPmdldE5hbWUoKSk7Ci0gICAgQVNTRVJUKHN5
bWJvbCAmJiBzeW1ib2wtPmlzRnVuY3Rpb24oKSk7Ci0gICAgVEZ1bmN0aW9uKiBmdW5jdGlvbiA9
IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KHN5bWJvbCk7Ci0gICAgZm9yIChQYXJhbUluZGV4Ojpj
b25zdF9pdGVyYXRvciBpID0gcEluZGV4LmJlZ2luKCk7Ci0gICAgICAgICBpICE9IHBJbmRleC5l
bmQoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFRQYXJhbWV0ZXImIHBhcmFtID0gZnVuY3Rpb24t
PmdldFBhcmFtKCppKTsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyYW0udHlwZS0+Z2V0
UXVhbGlmaWVyKCk7Ci0gICAgICAgIGlmICgocXVhbCA9PSBFdnFPdXQpIHx8IChxdWFsID09IEV2
cUluT3V0KSkgewotICAgICAgICAgICAgZXJyb3IocGFyYW1zWyppXS0+Z2V0TGluZSgpLAotICAg
ICAgICAgICAgICAgICAgIkxvb3AgaW5kZXggY2Fubm90IGJlIHVzZWQgYXMgYXJndW1lbnQgdG8g
YSBmdW5jdGlvbiBvdXQgb3IgaW5vdXQgcGFyYW1ldGVyIiwKLSAgICAgICAgICAgICAgICAgIHBh
cmFtc1sqaV0tPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKLSAgICAg
ICAgICAgIHZhbGlkID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdmFs
aWQ7Ci19Ci0KLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVPcGVyYXRpb24oVElu
dGVybU9wZXJhdG9yKiBub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUSW50ZXJtTm9kZSogb3BlcmFuZCkgewotICAgIC8vIENoZWNrIGlmIGxvb3AgaW5k
ZXggaXMgbW9kaWZpZWQgaW4gdGhlIGxvb3AgYm9keS4KLSAgICBpZiAoIXdpdGhpbkxvb3BCb2R5
KCkgfHwgIW5vZGUtPmlzQXNzaWdubWVudCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IGNvbnN0IFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IG9wZXJhbmQtPmdldEFzU3ltYm9sTm9kZSgp
OwotICAgIGlmIChzeW1ib2wgJiYgaXNMb29wSW5kZXgoc3ltYm9sKSkgewotICAgICAgICBlcnJv
cihub2RlLT5nZXRMaW5lKCksCi0gICAgICAgICAgICAgICJMb29wIGluZGV4IGNhbm5vdCBiZSBz
dGF0aWNhbGx5IGFzc2lnbmVkIHRvIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgbG9vcCIsCi0gICAg
ICAgICAgICAgIHN5bWJvbC0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7Ci0gICAgfQotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OmlzQ29uc3RFeHByKFRJbnRl
cm1Ob2RlKiBub2RlKQotewotICAgIEFTU0VSVChub2RlICE9IE5VTEwpOwotICAgIHJldHVybiBu
b2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKSAhPSBOVUxMOwotfQotCi1ib29sIFZhbGlkYXRlTGlt
aXRhdGlvbnM6OmlzQ29uc3RJbmRleEV4cHIoVEludGVybU5vZGUqIG5vZGUpCi17Ci0gICAgQVNT
RVJUKG5vZGUgIT0gTlVMTCk7Ci0KLSAgICBWYWxpZGF0ZUNvbnN0SW5kZXhFeHByIHZhbGlkYXRl
KG1Mb29wU3RhY2spOwotICAgIG5vZGUtPnRyYXZlcnNlKCZ2YWxpZGF0ZSk7Ci0gICAgcmV0dXJu
IHZhbGlkYXRlLmlzVmFsaWQoKTsKLX0KLQotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxp
ZGF0ZUluZGV4aW5nKFRJbnRlcm1CaW5hcnkqIG5vZGUpCi17Ci0gICAgQVNTRVJUKChub2RlLT5n
ZXRPcCgpID09IEVPcEluZGV4RGlyZWN0KSB8fAotICAgICAgICAgICAobm9kZS0+Z2V0T3AoKSA9
PSBFT3BJbmRleEluZGlyZWN0KSk7Ci0KLSAgICBib29sIHZhbGlkID0gdHJ1ZTsKLSAgICBUSW50
ZXJtVHlwZWQqIGluZGV4ID0gbm9kZS0+Z2V0UmlnaHQoKTsKLSAgICAvLyBUaGUgaW5kZXggZXhw
cmVzc2lvbiBtdXN0IGhhdmUgaW50ZWdyYWwgdHlwZS4KLSAgICBpZiAoIWluZGV4LT5pc1NjYWxh
cigpIHx8IChpbmRleC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0SW50KSkgewotICAgICAgICBlcnJv
cihpbmRleC0+Z2V0TGluZSgpLAotICAgICAgICAgICAgICAiSW5kZXggZXhwcmVzc2lvbiBtdXN0
IGhhdmUgaW50ZWdyYWwgdHlwZSIsCi0gICAgICAgICAgICAgIGluZGV4LT5nZXRDb21wbGV0ZVN0
cmluZygpLmNfc3RyKCkpOwotICAgICAgICB2YWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICAvLyBU
aGUgaW5kZXggZXhwZXNzaW9uIG11c3QgYmUgYSBjb25zdGFudC1pbmRleC1leHByZXNzaW9uIHVu
bGVzcwotICAgIC8vIHRoZSBvcGVyYW5kIGlzIGEgdW5pZm9ybSBpbiBhIHZlcnRleCBzaGFkZXIu
Ci0gICAgVEludGVybVR5cGVkKiBvcGVyYW5kID0gbm9kZS0+Z2V0TGVmdCgpOwotICAgIGJvb2wg
c2tpcCA9IChtU2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKSAmJgotICAgICAgICAgICAg
ICAgIChvcGVyYW5kLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFVbmlmb3JtKTsKLSAgICBpZiAoIXNr
aXAgJiYgIWlzQ29uc3RJbmRleEV4cHIoaW5kZXgpKSB7Ci0gICAgICAgIGVycm9yKGluZGV4LT5n
ZXRMaW5lKCksICJJbmRleCBleHByZXNzaW9uIG11c3QgYmUgY29uc3RhbnQiLCAiW10iKTsKLSAg
ICAgICAgdmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbGlkOwotfQotCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFsaWRhdGVMaW1p
dGF0aW9ucy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhbGlkYXRl
TGltaXRhdGlvbnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTgzNWNiM2MyMjZl
NjBmM2Y2ZWY4ZWMyZjY2NDkwY2ExMmFhYjRiNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
VmFsaWRhdGVMaW1pdGF0aW9ucy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLSNpbmNsdWRlICJj
b21waWxlci9pbnRlcm1lZGlhdGUuaCIKLQotY2xhc3MgVEluZm9TaW5rQmFzZTsKLQotc3RydWN0
IFRMb29wSW5mbyB7Ci0gICAgc3RydWN0IFRJbmRleCB7Ci0gICAgICAgIGludCBpZDsgIC8vIHN5
bWJvbCBpZC4KLSAgICB9IGluZGV4OwotICAgIFRJbnRlcm1Mb29wKiBsb29wOwotfTsKLXR5cGVk
ZWYgVFZlY3RvcjxUTG9vcEluZm8+IFRMb29wU3RhY2s7Ci0KLS8vIFRyYXZlcnNlcyBpbnRlcm1l
ZGlhdGUgdHJlZSB0byBlbnN1cmUgdGhhdCB0aGUgc2hhZGVyIGRvZXMgbm90IGV4Y2VlZCB0aGUK
LS8vIG1pbmltdW0gZnVuY3Rpb25hbGl0eSBtYW5kYXRlZCBpbiBHTFNMIDEuMCBzcGVjLCBBcHBl
bmRpeCBBLgotY2xhc3MgVmFsaWRhdGVMaW1pdGF0aW9ucyA6IHB1YmxpYyBUSW50ZXJtVHJhdmVy
c2VyIHsKLXB1YmxpYzoKLSAgICBWYWxpZGF0ZUxpbWl0YXRpb25zKFNoU2hhZGVyVHlwZSBzaGFk
ZXJUeXBlLCBUSW5mb1NpbmtCYXNlJiBzaW5rKTsKLQotICAgIGludCBudW1FcnJvcnMoKSBjb25z
dCB7IHJldHVybiBtTnVtRXJyb3JzOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnko
VmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRVbmFyeShWaXNp
dCwgVEludGVybVVuYXJ5Kik7Ci0gICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0
LCBUSW50ZXJtQWdncmVnYXRlKik7Ci0gICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCwg
VEludGVybUxvb3AqKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGVycm9yKFRTb3VyY2VMb2MgbG9j
LCBjb25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuKTsKLQotICAgIGJvb2wgd2l0
aGluTG9vcEJvZHkoKSBjb25zdDsKLSAgICBib29sIGlzTG9vcEluZGV4KGNvbnN0IFRJbnRlcm1T
eW1ib2wqIHN5bWJvbCkgY29uc3Q7Ci0gICAgYm9vbCB2YWxpZGF0ZUxvb3BUeXBlKFRJbnRlcm1M
b29wKiBub2RlKTsKLSAgICBib29sIHZhbGlkYXRlRm9yTG9vcEhlYWRlcihUSW50ZXJtTG9vcCog
bm9kZSwgVExvb3BJbmZvKiBpbmZvKTsKLSAgICBib29sIHZhbGlkYXRlRm9yTG9vcEluaXQoVElu
dGVybUxvb3AqIG5vZGUsIFRMb29wSW5mbyogaW5mbyk7Ci0gICAgYm9vbCB2YWxpZGF0ZUZvckxv
b3BDb25kKFRJbnRlcm1Mb29wKiBub2RlLCBUTG9vcEluZm8qIGluZm8pOwotICAgIGJvb2wgdmFs
aWRhdGVGb3JMb29wRXhwcihUSW50ZXJtTG9vcCogbm9kZSwgVExvb3BJbmZvKiBpbmZvKTsKLSAg
ICAvLyBSZXR1cm5zIHRydWUgaWYgbm9uZSBvZiB0aGUgbG9vcCBpbmRpY2VzIGlzIHVzZWQgYXMg
dGhlIGFyZ3VtZW50IHRvCi0gICAgLy8gdGhlIGdpdmVuIGZ1bmN0aW9uIG91dCBvciBpbm91dCBw
YXJhbWV0ZXIuCi0gICAgYm9vbCB2YWxpZGF0ZUZ1bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRl
KiBub2RlKTsKLSAgICBib29sIHZhbGlkYXRlT3BlcmF0aW9uKFRJbnRlcm1PcGVyYXRvciogbm9k
ZSwgVEludGVybU5vZGUqIG9wZXJhbmQpOwotCi0gICAgLy8gUmV0dXJucyB0cnVlIGlmIGluZGV4
aW5nIGRvZXMgbm90IGV4Y2VlZCB0aGUgbWluaW11bSBmdW5jdGlvbmFsaXR5Ci0gICAgLy8gbWFu
ZGF0ZWQgaW4gR0xTTCAxLjAgc3BlYywgQXBwZW5kaXggQSwgU2VjdGlvbiA1LgotICAgIGJvb2wg
aXNDb25zdEV4cHIoVEludGVybU5vZGUqIG5vZGUpOwotICAgIGJvb2wgaXNDb25zdEluZGV4RXhw
cihUSW50ZXJtTm9kZSogbm9kZSk7Ci0gICAgYm9vbCB2YWxpZGF0ZUluZGV4aW5nKFRJbnRlcm1C
aW5hcnkqIG5vZGUpOwotCi0gICAgU2hTaGFkZXJUeXBlIG1TaGFkZXJUeXBlOwotICAgIFRJbmZv
U2lua0Jhc2UmIG1TaW5rOwotICAgIGludCBtTnVtRXJyb3JzOwotICAgIFRMb29wU3RhY2sgbUxv
b3BTdGFjazsKLX07Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9WYXJpYWJsZUluZm8uY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1ZhcmlhYmxlSW5mby5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0
ZWE0YjY1OTI2NGQ2MjI0Mjg5MDZmY2E4NmI3YzlmMGZiNDczMDAuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMDggKzAsMCBA
QAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL1ZhcmlhYmxlSW5mby5o
IgotCi1uYW1lc3BhY2UgewotCi1UU3RyaW5nIGFycmF5QnJhY2tldHMoaW50IGluZGV4KQotewot
ICAgIFRTdHJpbmdTdHJlYW0gc3RyZWFtOwotICAgIHN0cmVhbSA8PCAiWyIgPDwgaW5kZXggPDwg
Il0iOwotICAgIHJldHVybiBzdHJlYW0uc3RyKCk7Ci19Ci0KLS8vIFJldHVybnMgdGhlIGRhdGEg
dHlwZSBmb3IgYW4gYXR0cmlidXRlLCB1bmlmb3JtLCBvciB2YXJ5aW5nLgotU2hEYXRhVHlwZSBn
ZXRWYXJpYWJsZURhdGFUeXBlKGNvbnN0IFRUeXBlJiB0eXBlKQotewotICAgIHN3aXRjaCAodHlw
ZS5nZXRCYXNpY1R5cGUoKSkgewotICAgICAgY2FzZSBFYnRGbG9hdDoKLSAgICAgICAgICBpZiAo
dHlwZS5pc01hdHJpeCgpKSB7Ci0gICAgICAgICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFs
U2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gU0hfRkxPQVRfTUFUMjsK
LSAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBTSF9GTE9BVF9NQVQzOwotICAgICAgICAg
ICAgICAgIGNhc2UgNDogcmV0dXJuIFNIX0ZMT0FUX01BVDQ7Ci0gICAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgIH0gZWxzZSBp
ZiAodHlwZS5pc1ZlY3RvcigpKSB7Ci0gICAgICAgICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21p
bmFsU2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gU0hfRkxPQVRfVkVD
MjsKLSAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBTSF9GTE9BVF9WRUMzOwotICAgICAg
ICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFNIX0ZMT0FUX1ZFQzQ7Ci0gICAgICAgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgIHJldHVybiBTSF9GTE9BVDsKLSAgICAgICAgICB9Ci0gICAgICBj
YXNlIEVidEludDoKLSAgICAgICAgICBpZiAodHlwZS5pc01hdHJpeCgpKSB7Ci0gICAgICAgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgfSBlbHNlIGlmICh0eXBlLmlzVmVjdG9yKCkp
IHsKLSAgICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldE5vbWluYWxTaXplKCkpIHsKLSAgICAg
ICAgICAgICAgICBjYXNlIDI6IHJldHVybiBTSF9JTlRfVkVDMjsKLSAgICAgICAgICAgICAgICBj
YXNlIDM6IHJldHVybiBTSF9JTlRfVkVDMzsKLSAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVy
biBTSF9JTlRfVkVDNDsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwot
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgcmV0dXJu
IFNIX0lOVDsKLSAgICAgICAgICB9Ci0gICAgICBjYXNlIEVidEJvb2w6Ci0gICAgICAgICAgaWYg
KHR5cGUuaXNNYXRyaXgoKSkgewotICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICAgIH0gZWxzZSBpZiAodHlwZS5pc1ZlY3RvcigpKSB7Ci0gICAgICAgICAgICAgIHN3aXRjaCAo
dHlwZS5nZXROb21pbmFsU2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4g
U0hfQk9PTF9WRUMyOwotICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFNIX0JPT0xfVkVD
MzsKLSAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBTSF9CT09MX1ZFQzQ7Ci0gICAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgfQotICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIHJldHVybiBTSF9CT09MOwotICAgICAgICAgIH0K
LSAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiByZXR1cm4gU0hfU0FNUExFUl8yRDsKLSAgICAgIGNh
c2UgRWJ0U2FtcGxlckN1YmU6IHJldHVybiBTSF9TQU1QTEVSX0NVQkU7Ci0gICAgICBjYXNlIEVi
dFNhbXBsZXJFeHRlcm5hbE9FUzogcmV0dXJuIFNIX1NBTVBMRVJfRVhURVJOQUxfT0VTOwotICAg
ICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OiByZXR1cm4gU0hfU0FNUExFUl8yRF9SRUNUX0FSQjsK
LSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotICAgIHJldHVybiBTSF9OT05F
OwotfQotCi12b2lkIGdldEJ1aWx0SW5WYXJpYWJsZUluZm8oY29uc3QgVFR5cGUmIHR5cGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyYgbmFtZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nJiBtYXBwZWROYW1lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9MaXN0JiBpbmZvTGlzdCk7Ci12b2lkIGdl
dFVzZXJEZWZpbmVkVmFyaWFibGVJbmZvKGNvbnN0IFRUeXBlJiB0eXBlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nJiBtYXBwZWROYW1lLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYgaW5mb0xpc3QsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uKTsK
LQotLy8gUmV0dXJucyBpbmZvIGZvciBhbiBhdHRyaWJ1dGUsIHVuaWZvcm0sIG9yIHZhcnlpbmcu
Ci12b2lkIGdldFZhcmlhYmxlSW5mbyhjb25zdCBUVHlwZSYgdHlwZSwKLSAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBU
U3RyaW5nJiBtYXBwZWROYW1lLAotICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xp
c3QmIGluZm9MaXN0LAotICAgICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNo
RnVuY3Rpb24pCi17Ci0gICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7
Ci0gICAgICAgIGlmICh0eXBlLmlzQXJyYXkoKSkgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCB0eXBlLmdldEFycmF5U2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBUU3Ry
aW5nIGxuYW1lID0gbmFtZSArIGFycmF5QnJhY2tldHMoaSk7Ci0gICAgICAgICAgICAgICAgVFN0
cmluZyBsbWFwcGVkTmFtZSA9IG1hcHBlZE5hbWUgKyBhcnJheUJyYWNrZXRzKGkpOwotICAgICAg
ICAgICAgICAgIGdldFVzZXJEZWZpbmVkVmFyaWFibGVJbmZvKHR5cGUsIGxuYW1lLCBsbWFwcGVk
TmFtZSwgaW5mb0xpc3QsIGhhc2hGdW5jdGlvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBnZXRVc2VyRGVmaW5lZFZhcmlhYmxlSW5mbyh0eXBlLCBuYW1l
LCBtYXBwZWROYW1lLCBpbmZvTGlzdCwgaGFzaEZ1bmN0aW9uKTsKLSAgICAgICAgfQotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGdldEJ1aWx0SW5WYXJpYWJsZUluZm8odHlwZSwgbmFtZSwgbWFwcGVk
TmFtZSwgaW5mb0xpc3QpOwotICAgIH0KLX0KLQotdm9pZCBnZXRCdWlsdEluVmFyaWFibGVJbmZv
KGNvbnN0IFRUeXBlJiB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRT
dHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyYg
bWFwcGVkTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlz
dCYgaW5mb0xpc3QpCi17Ci0gICAgQVNTRVJUKHR5cGUuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0U3Ry
dWN0KTsKLQotICAgIFRWYXJpYWJsZUluZm8gdmFySW5mbzsKLSAgICBpZiAodHlwZS5pc0FycmF5
KCkpIHsKLSAgICAgICAgdmFySW5mby5uYW1lID0gKG5hbWUgKyAiWzBdIikuY19zdHIoKTsKLSAg
ICAgICAgdmFySW5mby5tYXBwZWROYW1lID0gKG1hcHBlZE5hbWUgKyAiWzBdIikuY19zdHIoKTsK
LSAgICAgICAgdmFySW5mby5zaXplID0gdHlwZS5nZXRBcnJheVNpemUoKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICB2YXJJbmZvLm5hbWUgPSBuYW1lLmNfc3RyKCk7Ci0gICAgICAgIHZhckluZm8u
bWFwcGVkTmFtZSA9IG1hcHBlZE5hbWUuY19zdHIoKTsKLSAgICAgICAgdmFySW5mby5zaXplID0g
MTsKLSAgICB9Ci0gICAgdmFySW5mby5wcmVjaXNpb24gPSB0eXBlLmdldFByZWNpc2lvbigpOwot
ICAgIHZhckluZm8udHlwZSA9IGdldFZhcmlhYmxlRGF0YVR5cGUodHlwZSk7Ci0gICAgaW5mb0xp
c3QucHVzaF9iYWNrKHZhckluZm8pOwotfQotCi12b2lkIGdldFVzZXJEZWZpbmVkVmFyaWFibGVJ
bmZvKGNvbnN0IFRUeXBlJiB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBUU3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBUU3RyaW5nJiBtYXBwZWROYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
VmFyaWFibGVJbmZvTGlzdCYgaW5mb0xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uKQotewotICAgIEFTU0VSVCh0eXBlLmdl
dEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCk7Ci0KLSAgICBjb25zdCBURmllbGRMaXN0JiBmaWVs
ZHMgPSB0eXBlLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGZpZWxkcy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBUVHlwZSYgZmllbGRUeXBl
ID0gKihmaWVsZHNbaV0tPnR5cGUoKSk7Ci0gICAgICAgIGNvbnN0IFRTdHJpbmcmIGZpZWxkTmFt
ZSA9IGZpZWxkc1tpXS0+bmFtZSgpOwotICAgICAgICBnZXRWYXJpYWJsZUluZm8oZmllbGRUeXBl
LAotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArICIuIiArIGZpZWxkTmFtZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1hcHBlZE5hbWUgKyAiLiIgKyBUSW50ZXJtVHJhdmVyc2VyOjpo
YXNoKGZpZWxkTmFtZSwgaGFzaEZ1bmN0aW9uKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGlu
Zm9MaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgaGFzaEZ1bmN0aW9uKTsKLSAgICB9Ci19
Ci0KLVRWYXJpYWJsZUluZm8qIGZpbmRWYXJpYWJsZShjb25zdCBUVHlwZSYgdHlwZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nJiBuYW1lLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9MaXN0JiBpbmZvTGlzdCkKLXsKLSAgICAvLyBU
T0RPKHptbyk6IG9wdGltaXplIHRoaXMgZnVuY3Rpb24uCi0gICAgVFN0cmluZyBteU5hbWUgPSBu
YW1lOwotICAgIGlmICh0eXBlLmlzQXJyYXkoKSkKLSAgICAgICAgbXlOYW1lICs9ICJbMF0iOwot
ICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCBpbmZvTGlzdC5zaXplKCk7ICsraWkpCi0gICAg
ewotICAgICAgICBpZiAoaW5mb0xpc3RbaWldLm5hbWUuY19zdHIoKSA9PSBteU5hbWUpCi0gICAg
ICAgICAgICByZXR1cm4gJihpbmZvTGlzdFtpaV0pOwotICAgIH0KLSAgICByZXR1cm4gTlVMTDsK
LX0KLQotfSAgLy8gbmFtZXNwYWNlIGFub255bW91cwotCi1UVmFyaWFibGVJbmZvOjpUVmFyaWFi
bGVJbmZvKCkKLSAgICA6IHR5cGUoU0hfTk9ORSksCi0gICAgICBzaXplKDApLAotICAgICAgcHJl
Y2lzaW9uKEVicFVuZGVmaW5lZCksCi0gICAgICBzdGF0aWNVc2UoZmFsc2UpCi17Ci19Ci0KLVRW
YXJpYWJsZUluZm86OlRWYXJpYWJsZUluZm8oU2hEYXRhVHlwZSB0eXBlLCBpbnQgc2l6ZSkKLSAg
ICA6IHR5cGUodHlwZSksCi0gICAgICBzaXplKHNpemUpLAotICAgICAgcHJlY2lzaW9uKEVicFVu
ZGVmaW5lZCksCi0gICAgICBzdGF0aWNVc2UoZmFsc2UpCi17Ci19Ci0KLUNvbGxlY3RWYXJpYWJs
ZXM6OkNvbGxlY3RWYXJpYWJsZXMoVFZhcmlhYmxlSW5mb0xpc3QmIGF0dHJpYnMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9MaXN0JiB1bmlmb3JtcywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIHZh
cnlpbmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlv
bjY0IGhhc2hGdW5jdGlvbikKLSAgICA6IG1BdHRyaWJzKGF0dHJpYnMpLAotICAgICAgbVVuaWZv
cm1zKHVuaWZvcm1zKSwKLSAgICAgIG1WYXJ5aW5ncyh2YXJ5aW5ncyksCi0gICAgICBtUG9pbnRD
b29yZEFkZGVkKGZhbHNlKSwKLSAgICAgIG1Gcm9udEZhY2luZ0FkZGVkKGZhbHNlKSwKLSAgICAg
IG1GcmFnQ29vcmRBZGRlZChmYWxzZSksCi0gICAgICBtSGFzaEZ1bmN0aW9uKGhhc2hGdW5jdGlv
bikKLXsKLX0KLQotLy8gV2Ugd2FudCB0byBjaGVjayB3aGV0aGVyIGEgdW5pZm9ybS92YXJ5aW5n
IGlzIHN0YXRpY2FsbHkgdXNlZAotLy8gYmVjYXVzZSB3ZSBvbmx5IGNvdW50IHRoZSB1c2VkIG9u
ZXMgaW4gcGFja2luZyBjb21wdXRpbmcuCi0vLyBBbHNvLCBnbF9GcmFnQ29vcmQsIGdsX1BvaW50
Q29vcmQsIGFuZCBnbF9Gcm9udEZhY2luZyBjb3VudAotLy8gdG93YXJkIHZhcnlpbmcgY291bnRp
bmcgaWYgdGhleSBhcmUgc3RhdGljYWxseSB1c2VkIGluIGEgZnJhZ21lbnQKLS8vIHNoYWRlci4K
LXZvaWQgQ29sbGVjdFZhcmlhYmxlczo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogc3ltYm9s
KQotewotICAgIEFTU0VSVChzeW1ib2wgIT0gTlVMTCk7Ci0gICAgVFZhcmlhYmxlSW5mbyogdmFy
ID0gTlVMTDsKLSAgICBzd2l0Y2ggKHN5bWJvbC0+Z2V0UXVhbGlmaWVyKCkpCi0gICAgewotICAg
IGNhc2UgRXZxVmFyeWluZ091dDoKLSAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdPdXQ6Ci0g
ICAgY2FzZSBFdnFWYXJ5aW5nSW46Ci0gICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nSW46Ci0g
ICAgICAgIHZhciA9IGZpbmRWYXJpYWJsZShzeW1ib2wtPmdldFR5cGUoKSwgc3ltYm9sLT5nZXRT
eW1ib2woKSwgbVZhcnlpbmdzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFVbmlmb3Jt
OgotICAgICAgICB2YXIgPSBmaW5kVmFyaWFibGUoc3ltYm9sLT5nZXRUeXBlKCksIHN5bWJvbC0+
Z2V0U3ltYm9sKCksIG1Vbmlmb3Jtcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXZxRnJh
Z0Nvb3JkOgotICAgICAgICBpZiAoIW1GcmFnQ29vcmRBZGRlZCkgewotICAgICAgICAgICAgVFZh
cmlhYmxlSW5mbyBpbmZvOwotICAgICAgICAgICAgaW5mby5uYW1lID0gImdsX0ZyYWdDb29yZCI7
Ci0gICAgICAgICAgICBpbmZvLm1hcHBlZE5hbWUgPSAiZ2xfRnJhZ0Nvb3JkIjsKLSAgICAgICAg
ICAgIGluZm8udHlwZSA9IFNIX0ZMT0FUX1ZFQzQ7Ci0gICAgICAgICAgICBpbmZvLnNpemUgPSAx
OwotICAgICAgICAgICAgaW5mby5wcmVjaXNpb24gPSBFYnBNZWRpdW07ICAvLyBVc2UgbWVkaXVt
cCBhcyBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIuCi0gICAgICAgICAgICBpbmZvLnN0YXRpY1Vz
ZSA9IHRydWU7Ci0gICAgICAgIG1WYXJ5aW5ncy5wdXNoX2JhY2soaW5mbyk7Ci0gICAgICAgICAg
ICBtRnJhZ0Nvb3JkQWRkZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAg
ICBjYXNlIEV2cUZyb250RmFjaW5nOgotICAgICAgICBpZiAoIW1Gcm9udEZhY2luZ0FkZGVkKSB7
Ci0gICAgICAgICAgICBUVmFyaWFibGVJbmZvIGluZm87Ci0gICAgICAgICAgICBpbmZvLm5hbWUg
PSAiZ2xfRnJvbnRGYWNpbmciOwotICAgICAgICAgICAgaW5mby5tYXBwZWROYW1lID0gImdsX0Zy
b250RmFjaW5nIjsKLSAgICAgICAgICAgIGluZm8udHlwZSA9IFNIX0JPT0w7Ci0gICAgICAgICAg
ICBpbmZvLnNpemUgPSAxOwotICAgICAgICAgICAgaW5mby5wcmVjaXNpb24gPSBFYnBVbmRlZmlu
ZWQ7Ci0gICAgICAgICAgICBpbmZvLnN0YXRpY1VzZSA9IHRydWU7Ci0gICAgICAgIG1WYXJ5aW5n
cy5wdXNoX2JhY2soaW5mbyk7Ci0gICAgICAgICAgICBtRnJvbnRGYWNpbmdBZGRlZCA9IHRydWU7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRXZxUG9pbnRDb29yZDoKLSAg
ICAgICAgaWYgKCFtUG9pbnRDb29yZEFkZGVkKSB7Ci0gICAgICAgICAgICBUVmFyaWFibGVJbmZv
IGluZm87Ci0gICAgICAgICAgICBpbmZvLm5hbWUgPSAiZ2xfUG9pbnRDb29yZCI7Ci0gICAgICAg
ICAgICBpbmZvLm1hcHBlZE5hbWUgPSAiZ2xfUG9pbnRDb29yZCI7Ci0gICAgICAgICAgICBpbmZv
LnR5cGUgPSBTSF9GTE9BVF9WRUMyOwotICAgICAgICAgICAgaW5mby5zaXplID0gMTsKLSAgICAg
ICAgICAgIGluZm8ucHJlY2lzaW9uID0gRWJwTWVkaXVtOyAgLy8gVXNlIG1lZGl1bXAgYXMgaXQg
ZG9lc24ndCByZWFsbHkgbWF0dGVyLgotICAgICAgICAgICAgaW5mby5zdGF0aWNVc2UgPSB0cnVl
OwotICAgICAgICBtVmFyeWluZ3MucHVzaF9iYWNrKGluZm8pOwotICAgICAgICAgICAgbVBvaW50
Q29vcmRBZGRlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAodmFyKQotICAgICAgICB2YXItPnN0
YXRpY1VzZSA9IHRydWU7Ci19Ci0KLWJvb2wgQ29sbGVjdFZhcmlhYmxlczo6dmlzaXRBZ2dyZWdh
dGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCi17Ci0gICAgYm9vbCB2aXNpdENoaWxk
cmVuID0gdHJ1ZTsKLQotICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKLSAgICB7Ci0gICAgY2Fz
ZSBFT3BEZWNsYXJhdGlvbjogewotICAgICAgICBjb25zdCBUSW50ZXJtU2VxdWVuY2UmIHNlcXVl
bmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXIg
PSBzZXF1ZW5jZS5mcm9udCgpLT5nZXRBc1R5cGVkKCktPmdldFF1YWxpZmllcigpOwotICAgICAg
ICBpZiAocXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSB8fCBxdWFsaWZpZXIgPT0gRXZxVW5pZm9y
bSB8fAotICAgICAgICAgICAgcXVhbGlmaWVyID09IEV2cVZhcnlpbmdJbiB8fCBxdWFsaWZpZXIg
PT0gRXZxVmFyeWluZ091dCB8fAotICAgICAgICAgICAgcXVhbGlmaWVyID09IEV2cUludmFyaWFu
dFZhcnlpbmdJbiB8fCBxdWFsaWZpZXIgPT0gRXZxSW52YXJpYW50VmFyeWluZ091dCkKLSAgICAg
ICAgewotICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIGluZm9MaXN0ID0gcXVhbGlmaWVy
ID09IEV2cUF0dHJpYnV0ZSA/IG1BdHRyaWJzIDoKLSAgICAgICAgICAgICAgICAocXVhbGlmaWVy
ID09IEV2cVVuaWZvcm0gPyBtVW5pZm9ybXMgOiBtVmFyeWluZ3MpOwotICAgICAgICAgICAgZm9y
IChUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIGkgPSBzZXF1ZW5jZS5iZWdpbigpOwot
ICAgICAgICAgICAgICAgICBpICE9IHNlcXVlbmNlLmVuZCgpOyArK2kpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgY29uc3QgVEludGVybVN5bWJvbCogdmFyaWFibGUgPSAoKmkpLT5n
ZXRBc1N5bWJvbE5vZGUoKTsKLSAgICAgICAgICAgICAgICAvLyBUaGUgb25seSBjYXNlIGluIHdo
aWNoIHRoZSBzZXF1ZW5jZSB3aWxsIG5vdCBjb250YWluIGEKLSAgICAgICAgICAgICAgICAvLyBU
SW50ZXJtU3ltYm9sIG5vZGUgaXMgaW5pdGlhbGl6YXRpb24uIEl0IHdpbGwgY29udGFpbiBhCi0g
ICAgICAgICAgICAgICAgLy8gVEludGVyQmluYXJ5IG5vZGUgaW4gdGhhdCBjYXNlLiBTaW5jZSBh
dHRyaWJ1dGVzLCB1bmlmb3JtcywKLSAgICAgICAgICAgICAgICAvLyBhbmQgdmFyeWluZ3MgY2Fu
bm90IGJlIGluaXRpYWxpemVkIGluIGEgc2hhZGVyLCB3ZSBtdXN0IGhhdmUKLSAgICAgICAgICAg
ICAgICAvLyBvbmx5IFRJbnRlcm1TeW1ib2wgbm9kZXMgaW4gdGhlIHNlcXVlbmNlLgotICAgICAg
ICAgICAgICAgIEFTU0VSVCh2YXJpYWJsZSAhPSBOVUxMKTsKLSAgICAgICAgICAgICAgICBUU3Ry
aW5nIHByb2Nlc3NlZFN5bWJvbDsKLSAgICAgICAgICAgICAgICBpZiAobUhhc2hGdW5jdGlvbiA9
PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRTeW1ib2wgPSB2YXJpYWJsZS0+
Z2V0U3ltYm9sKCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBw
cm9jZXNzZWRTeW1ib2wgPSBUSW50ZXJtVHJhdmVyc2VyOjpoYXNoKHZhcmlhYmxlLT5nZXRPcmln
aW5hbFN5bWJvbCgpLCBtSGFzaEZ1bmN0aW9uKTsKLSAgICAgICAgICAgICAgICBnZXRWYXJpYWJs
ZUluZm8odmFyaWFibGUtPmdldFR5cGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyaWFibGUtPmdldE9yaWdpbmFsU3ltYm9sKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHByb2Nlc3NlZFN5bWJvbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5mb0xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1IYXNoRnVuY3Rp
b24pOwotICAgICAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDogYnJlYWs7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHZpc2l0Q2hpbGRyZW47Ci19Ci0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggM2M3ZjJhNWY4NGYyNjM4ZTUzN2FkZTNhZjkyMmZkYWZhY2Zh
ZjA2Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVJbmZvLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw1MSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJ
TEVSX1ZBUklBQkxFX0lORk9fSF8KLSNkZWZpbmUgQ09NUElMRVJfVkFSSUFCTEVfSU5GT19IXwot
Ci0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvaW50
ZXJtZWRpYXRlLmgiCi0KLS8vIFByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IGEgdmFyaWFibGUu
Ci0vLyBJdCBpcyBjdXJyZW50bHkgYmVpbmcgdXNlZCB0byBzdG9yZSBpbmZvIGFib3V0IGFjdGl2
ZSBhdHRyaWJzIGFuZCB1bmlmb3Jtcy4KLXN0cnVjdCBUVmFyaWFibGVJbmZvIHsKLSAgICBUVmFy
aWFibGVJbmZvKFNoRGF0YVR5cGUgdHlwZSwgaW50IHNpemUpOwotICAgIFRWYXJpYWJsZUluZm8o
KTsKLQotICAgIFRQZXJzaXN0U3RyaW5nIG5hbWU7Ci0gICAgVFBlcnNpc3RTdHJpbmcgbWFwcGVk
TmFtZTsKLSAgICBTaERhdGFUeXBlIHR5cGU7Ci0gICAgaW50IHNpemU7Ci0gICAgVFByZWNpc2lv
biBwcmVjaXNpb247Ci0gICAgYm9vbCBzdGF0aWNVc2U7Ci19OwotdHlwZWRlZiBzdGQ6OnZlY3Rv
cjxUVmFyaWFibGVJbmZvPiBUVmFyaWFibGVJbmZvTGlzdDsKLQotLy8gVHJhdmVyc2VzIGludGVy
bWVkaWF0ZSB0cmVlIHRvIGNvbGxlY3QgYWxsIGF0dHJpYnV0ZXMsIHVuaWZvcm1zLCB2YXJ5aW5n
cy4KLWNsYXNzIENvbGxlY3RWYXJpYWJsZXMgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7Ci1w
dWJsaWM6Ci0gICAgQ29sbGVjdFZhcmlhYmxlcyhUVmFyaWFibGVJbmZvTGlzdCYgYXR0cmlicywK
LSAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9MaXN0JiB1bmlmb3JtcywKLSAgICAg
ICAgICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9MaXN0JiB2YXJ5aW5ncywKLSAgICAgICAgICAg
ICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uKTsKLQotICAgIHZpcnR1YWwg
dm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7Ci0gICAgdmlydHVhbCBib29sIHZpc2l0
QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7Ci0KLXByaXZhdGU6Ci0gICAgVFZh
cmlhYmxlSW5mb0xpc3QmIG1BdHRyaWJzOwotICAgIFRWYXJpYWJsZUluZm9MaXN0JiBtVW5pZm9y
bXM7Ci0gICAgVFZhcmlhYmxlSW5mb0xpc3QmIG1WYXJ5aW5nczsKLQotICAgIGJvb2wgbVBvaW50
Q29vcmRBZGRlZDsKLSAgICBib29sIG1Gcm9udEZhY2luZ0FkZGVkOwotICAgIGJvb2wgbUZyYWdD
b29yZEFkZGVkOwotCi0gICAgU2hIYXNoRnVuY3Rpb242NCBtSGFzaEZ1bmN0aW9uOwotfTsKLQot
I2VuZGlmICAvLyBDT01QSUxFUl9WQVJJQUJMRV9JTkZPX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVQYWNrZXIuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlUGFja2VyLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk1NzI4Nzc2MzVlYjM4YTQ3MGQ0NzNiMjk2YjVmMTc0
NGE5ZWE2YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVQYWNrZXIuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMjk3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0jaW5jbHVk
ZSAiY29tcGlsZXIvVmFyaWFibGVQYWNrZXIuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNp
bmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgotCi1uYW1lc3BhY2UgewotaW50IEdldFNvcnRP
cmRlcihTaERhdGFUeXBlIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNh
c2UgU0hfRkxPQVRfTUFUNDoKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBjYXNlIFNI
X0ZMT0FUX01BVDI6Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgY2FzZSBTSF9GTE9B
VF9WRUM0OgotICAgICAgICBjYXNlIFNIX0lOVF9WRUM0OgotICAgICAgICBjYXNlIFNIX0JPT0xf
VkVDNDoKLSAgICAgICAgICAgIHJldHVybiAyOwotICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDM6
Ci0gICAgICAgICAgICByZXR1cm4gMzsKLSAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUMzOgotICAg
ICAgICBjYXNlIFNIX0lOVF9WRUMzOgotICAgICAgICBjYXNlIFNIX0JPT0xfVkVDMzoKLSAgICAg
ICAgICAgIHJldHVybiA0OwotICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzI6Ci0gICAgICAgIGNh
c2UgU0hfSU5UX1ZFQzI6Ci0gICAgICAgIGNhc2UgU0hfQk9PTF9WRUMyOgotICAgICAgICAgICAg
cmV0dXJuIDU7Ci0gICAgICAgIGNhc2UgU0hfRkxPQVQ6Ci0gICAgICAgIGNhc2UgU0hfSU5UOgot
ICAgICAgICBjYXNlIFNIX0JPT0w6Ci0gICAgICAgIGNhc2UgU0hfU0FNUExFUl8yRDoKLSAgICAg
ICAgY2FzZSBTSF9TQU1QTEVSX0NVQkU6Ci0gICAgICAgIGNhc2UgU0hfU0FNUExFUl9FWFRFUk5B
TF9PRVM6Ci0gICAgICAgIGNhc2UgU0hfU0FNUExFUl8yRF9SRUNUX0FSQjoKLSAgICAgICAgICAg
IHJldHVybiA2OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsK
LSAgICAgICAgICAgIHJldHVybiA3OwotICAgIH0KLX0KLX0gICAgLy8gbmFtZXNwYWNlCi0KLWlu
dCBWYXJpYWJsZVBhY2tlcjo6R2V0TnVtQ29tcG9uZW50c1BlclJvdyhTaERhdGFUeXBlIHR5cGUp
Ci17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUNDoKLSAg
ICAgICAgY2FzZSBTSF9GTE9BVF9NQVQyOgotICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzQ6Ci0g
ICAgICAgIGNhc2UgU0hfSU5UX1ZFQzQ6Ci0gICAgICAgIGNhc2UgU0hfQk9PTF9WRUM0OgotICAg
ICAgICAgICAgcmV0dXJuIDQ7Ci0gICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMzoKLSAgICAgICAg
Y2FzZSBTSF9GTE9BVF9WRUMzOgotICAgICAgICBjYXNlIFNIX0lOVF9WRUMzOgotICAgICAgICBj
YXNlIFNIX0JPT0xfVkVDMzoKLSAgICAgICAgICAgIHJldHVybiAzOwotICAgICAgICBjYXNlIFNI
X0ZMT0FUX1ZFQzI6Ci0gICAgICAgIGNhc2UgU0hfSU5UX1ZFQzI6Ci0gICAgICAgIGNhc2UgU0hf
Qk9PTF9WRUMyOgotICAgICAgICAgICAgcmV0dXJuIDI7Ci0gICAgICAgIGNhc2UgU0hfRkxPQVQ6
Ci0gICAgICAgIGNhc2UgU0hfSU5UOgotICAgICAgICBjYXNlIFNIX0JPT0w6Ci0gICAgICAgIGNh
c2UgU0hfU0FNUExFUl8yRDoKLSAgICAgICAgY2FzZSBTSF9TQU1QTEVSX0NVQkU6Ci0gICAgICAg
IGNhc2UgU0hfU0FNUExFUl9FWFRFUk5BTF9PRVM6Ci0gICAgICAgIGNhc2UgU0hfU0FNUExFUl8y
RF9SRUNUX0FSQjoKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICAgICAgICAgIHJldHVybiA1OwotICAgIH0KLX0K
LQotaW50IFZhcmlhYmxlUGFja2VyOjpHZXROdW1Sb3dzKFNoRGF0YVR5cGUgdHlwZSkKLXsKLSAg
ICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0OgotICAgICAgICAg
ICAgcmV0dXJuIDQ7Ci0gICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMzoKLSAgICAgICAgICAgIHJl
dHVybiAzOwotICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDI6Ci0gICAgICAgICAgICByZXR1cm4g
MjsKLSAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUM0OgotICAgICAgICBjYXNlIFNIX0lOVF9WRUM0
OgotICAgICAgICBjYXNlIFNIX0JPT0xfVkVDNDoKLSAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUMz
OgotICAgICAgICBjYXNlIFNIX0lOVF9WRUMzOgotICAgICAgICBjYXNlIFNIX0JPT0xfVkVDMzoK
LSAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUMyOgotICAgICAgICBjYXNlIFNIX0lOVF9WRUMyOgot
ICAgICAgICBjYXNlIFNIX0JPT0xfVkVDMjoKLSAgICAgICAgY2FzZSBTSF9GTE9BVDoKLSAgICAg
ICAgY2FzZSBTSF9JTlQ6Ci0gICAgICAgIGNhc2UgU0hfQk9PTDoKLSAgICAgICAgY2FzZSBTSF9T
QU1QTEVSXzJEOgotICAgICAgICBjYXNlIFNIX1NBTVBMRVJfQ1VCRToKLSAgICAgICAgY2FzZSBT
SF9TQU1QTEVSX0VYVEVSTkFMX09FUzoKLSAgICAgICAgY2FzZSBTSF9TQU1QTEVSXzJEX1JFQ1Rf
QVJCOgotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBBU1NFUlQoZmFsc2UpOwotICAgICAgICAgICAgcmV0dXJuIDEwMDAwMDsKLSAgICB9Ci19Ci0K
LXN0cnVjdCBUVmFyaWFibGVJbmZvQ29tcGFyZXIgewotICAgIGJvb2wgb3BlcmF0b3IoKShjb25z
dCBUVmFyaWFibGVJbmZvJiBsaHMsIGNvbnN0IFRWYXJpYWJsZUluZm8mIHJocykgY29uc3QKLSAg
ICB7Ci0gICAgICAgIGludCBsaHNTb3J0T3JkZXIgPSBHZXRTb3J0T3JkZXIobGhzLnR5cGUpOwot
ICAgICAgICBpbnQgcmhzU29ydE9yZGVyID0gR2V0U29ydE9yZGVyKHJocy50eXBlKTsKLSAgICAg
ICAgaWYgKGxoc1NvcnRPcmRlciAhPSByaHNTb3J0T3JkZXIpIHsKLSAgICAgICAgICAgIHJldHVy
biBsaHNTb3J0T3JkZXIgPCByaHNTb3J0T3JkZXI7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gU29y
dCBieSBsYXJnZXN0IGZpcnN0LgotICAgICAgICByZXR1cm4gbGhzLnNpemUgPiByaHMuc2l6ZTsK
LSAgICB9Ci19OwotCi11bnNpZ25lZCBWYXJpYWJsZVBhY2tlcjo6bWFrZUNvbHVtbkZsYWdzKGlu
dCBjb2x1bW4sIGludCBudW1Db21wb25lbnRzUGVyUm93KQotewotICAgIHJldHVybiAoKGtDb2x1
bW5NYXNrIDw8IChrTnVtQ29sdW1ucyAtIG51bUNvbXBvbmVudHNQZXJSb3cpKSAmCi0gICAgICAg
ICAgICAgICAgICAgIGtDb2x1bW5NYXNrKSA+PiBjb2x1bW47Ci19Ci0KLXZvaWQgVmFyaWFibGVQ
YWNrZXI6OmZpbGxDb2x1bW5zKGludCB0b3BSb3csIGludCBudW1Sb3dzLCBpbnQgY29sdW1uLCBp
bnQgbnVtQ29tcG9uZW50c1BlclJvdykKLXsKLSAgICB1bnNpZ25lZCBjb2x1bW5GbGFncyA9IG1h
a2VDb2x1bW5GbGFncyhjb2x1bW4sIG51bUNvbXBvbmVudHNQZXJSb3cpOwotICAgIGZvciAoaW50
IHIgPSAwOyByIDwgbnVtUm93czsgKytyKSB7Ci0gICAgICAgIGludCByb3cgPSB0b3BSb3cgKyBy
OwotICAgICAgICBBU1NFUlQoKHJvd3NfW3Jvd10gJiBjb2x1bW5GbGFncykgPT0gMCk7Ci0gICAg
ICAgIHJvd3NfW3Jvd10gfD0gY29sdW1uRmxhZ3M7Ci0gICAgfQotfQotCi1ib29sIFZhcmlhYmxl
UGFja2VyOjpzZWFyY2hDb2x1bW4oaW50IGNvbHVtbiwgaW50IG51bVJvd3MsIGludCogZGVzdFJv
dywgaW50KiBkZXN0U2l6ZSkKLXsKLSAgICBBU1NFUlQoZGVzdFJvdyk7Ci0KLSAgICBmb3IgKDsg
dG9wTm9uRnVsbFJvd18gPCBtYXhSb3dzXyAmJiByb3dzX1t0b3BOb25GdWxsUm93X10gPT0ga0Nv
bHVtbk1hc2s7Ci0gICAgICAgICArK3RvcE5vbkZ1bGxSb3dfKSB7Ci0gICAgfQotCi0gICAgZm9y
ICg7IGJvdHRvbU5vbkZ1bGxSb3dfID49IDAgJiYgcm93c19bYm90dG9tTm9uRnVsbFJvd19dID09
IGtDb2x1bW5NYXNrOwotICAgICAgICAgLS1ib3R0b21Ob25GdWxsUm93XykgewotICAgIH0KLQot
ICAgIGlmIChib3R0b21Ob25GdWxsUm93XyAtIHRvcE5vbkZ1bGxSb3dfICsgMSA8IG51bVJvd3Mp
IHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGNvbHVtbkZs
YWdzID0gbWFrZUNvbHVtbkZsYWdzKGNvbHVtbiwgMSk7Ci0gICAgaW50IHRvcEdvb2RSb3cgPSAw
OwotICAgIGludCBzbWFsbGVzdEdvb2RUb3AgPSAtMTsKLSAgICBpbnQgc21hbGxlc3RHb29kU2l6
ZSA9IG1heFJvd3NfICsgMTsKLSAgICBpbnQgYm90dG9tUm93ID0gYm90dG9tTm9uRnVsbFJvd18g
KyAxOwotICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICBmb3IgKGludCByb3cgPSB0b3BOb25G
dWxsUm93Xzsgcm93IDw9IGJvdHRvbVJvdzsgKytyb3cpIHsKLSAgICAgICAgYm9vbCByb3dFbXB0
eSA9IHJvdyA8IGJvdHRvbVJvdyA/ICgocm93c19bcm93XSAmIGNvbHVtbkZsYWdzKSA9PSAwKSA6
IGZhbHNlOwotICAgICAgICBpZiAocm93RW1wdHkpIHsKLSAgICAgICAgICAgIGlmICghZm91bmQp
IHsKLSAgICAgICAgICAgICAgICB0b3BHb29kUm93ID0gcm93OwotICAgICAgICAgICAgICAgIGZv
dW5kID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGlmIChmb3VuZCkgewotICAgICAgICAgICAgICAgIGludCBzaXplID0gcm93IC0gdG9wR29vZFJv
dzsKLSAgICAgICAgICAgICAgICBpZiAoc2l6ZSA+PSBudW1Sb3dzICYmIHNpemUgPCBzbWFsbGVz
dEdvb2RTaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNtYWxsZXN0R29vZFNpemUgPSBzaXpl
OwotICAgICAgICAgICAgICAgICAgICBzbWFsbGVzdEdvb2RUb3AgPSB0b3BHb29kUm93OwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvdW5kID0gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHNtYWxsZXN0R29vZFRvcCA8IDApIHsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgICpkZXN0Um93ID0gc21hbGxlc3RHb29kVG9w
OwotICAgIGlmIChkZXN0U2l6ZSkgewotICAgICAgICAqZGVzdFNpemUgPSBzbWFsbGVzdEdvb2RT
aXplOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBWYXJpYWJsZVBhY2tlcjo6
Q2hlY2tWYXJpYWJsZXNXaXRoaW5QYWNraW5nTGltaXRzKGludCBtYXhWZWN0b3JzLCBjb25zdCBU
VmFyaWFibGVJbmZvTGlzdCYgaW5fdmFyaWFibGVzKQotewotICAgIEFTU0VSVChtYXhWZWN0b3Jz
ID4gMCk7Ci0gICAgbWF4Um93c18gPSBtYXhWZWN0b3JzOwotICAgIHRvcE5vbkZ1bGxSb3dfID0g
MDsKLSAgICBib3R0b21Ob25GdWxsUm93XyA9IG1heFJvd3NfIC0gMTsKLSAgICBUVmFyaWFibGVJ
bmZvTGlzdCB2YXJpYWJsZXMoaW5fdmFyaWFibGVzKTsKLQotICAgIC8vIEFzIHBlciBHTFNMIDEu
MDE3IEFwcGVuZGl4IEEsIFNlY3Rpb24gNyB2YXJpYWJsZXMgYXJlIHBhY2tlZCBpbiBzcGVjaWZp
YwotICAgIC8vIG9yZGVyIGJ5IHR5cGUsIHRoZW4gYnkgc2l6ZSBvZiBhcnJheSwgbGFyZ2VzdCBm
aXJzdC4KLSAgICBzdGQ6OnNvcnQodmFyaWFibGVzLmJlZ2luKCksIHZhcmlhYmxlcy5lbmQoKSwg
VFZhcmlhYmxlSW5mb0NvbXBhcmVyKCkpOwotICAgIHJvd3NfLmNsZWFyKCk7Ci0gICAgcm93c18u
cmVzaXplKG1heFZlY3RvcnMsIDApOwotCi0gICAgLy8gUGFja3MgdGhlIDQgY29sdW1uIHZhcmlh
Ymxlcy4KLSAgICBzaXplX3QgaWkgPSAwOwotICAgIGZvciAoOyBpaSA8IHZhcmlhYmxlcy5zaXpl
KCk7ICsraWkpIHsKLSAgICAgICAgY29uc3QgVFZhcmlhYmxlSW5mbyYgdmFyaWFibGUgPSB2YXJp
YWJsZXNbaWldOwotICAgICAgICBpZiAoR2V0TnVtQ29tcG9uZW50c1BlclJvdyh2YXJpYWJsZS50
eXBlKSAhPSA0KSB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICB0b3BO
b25GdWxsUm93XyArPSBHZXROdW1Sb3dzKHZhcmlhYmxlLnR5cGUpICogdmFyaWFibGUuc2l6ZTsK
LSAgICB9Ci0KLSAgICBpZiAodG9wTm9uRnVsbFJvd18gPiBtYXhSb3dzXykgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gUGFja3MgdGhlIDMgY29sdW1uIHZhcmlhYmxl
cy4KLSAgICBpbnQgbnVtM0NvbHVtblJvd3MgPSAwOwotICAgIGZvciAoOyBpaSA8IHZhcmlhYmxl
cy5zaXplKCk7ICsraWkpIHsKLSAgICAgICAgY29uc3QgVFZhcmlhYmxlSW5mbyYgdmFyaWFibGUg
PSB2YXJpYWJsZXNbaWldOwotICAgICAgICBpZiAoR2V0TnVtQ29tcG9uZW50c1BlclJvdyh2YXJp
YWJsZS50eXBlKSAhPSAzKSB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBudW0zQ29sdW1uUm93cyArPSBHZXROdW1Sb3dzKHZhcmlhYmxlLnR5cGUpICogdmFyaWFibGUu
c2l6ZTsKLSAgICB9Ci0KLSAgICBpZiAodG9wTm9uRnVsbFJvd18gKyBudW0zQ29sdW1uUm93cyA+
IG1heFJvd3NfKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBmaWxsQ29s
dW1ucyh0b3BOb25GdWxsUm93XywgbnVtM0NvbHVtblJvd3MsIDAsIDMpOwotCi0gICAgLy8gUGFj
a3MgdGhlIDIgY29sdW1uIHZhcmlhYmxlcy4KLSAgICBpbnQgdG9wMkNvbHVtblJvdyA9IHRvcE5v
bkZ1bGxSb3dfICsgbnVtM0NvbHVtblJvd3M7Ci0gICAgaW50IHR3b0NvbHVtblJvd3NBdmFpbGFi
bGUgPSBtYXhSb3dzXyAtIHRvcDJDb2x1bW5Sb3c7Ci0gICAgaW50IHJvd3NBdmFpbGFibGVJbkNv
bHVtbnMwMSA9IHR3b0NvbHVtblJvd3NBdmFpbGFibGU7Ci0gICAgaW50IHJvd3NBdmFpbGFibGVJ
bkNvbHVtbnMyMyA9IHR3b0NvbHVtblJvd3NBdmFpbGFibGU7Ci0gICAgZm9yICg7IGlpIDwgdmFy
aWFibGVzLnNpemUoKTsgKytpaSkgewotICAgICAgICBjb25zdCBUVmFyaWFibGVJbmZvJiB2YXJp
YWJsZSA9IHZhcmlhYmxlc1tpaV07Ci0gICAgICAgIGlmIChHZXROdW1Db21wb25lbnRzUGVyUm93
KHZhcmlhYmxlLnR5cGUpICE9IDIpIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGludCBudW1Sb3dzID0gR2V0TnVtUm93cyh2YXJpYWJsZS50eXBlKSAqIHZhcmlhYmxl
LnNpemU7Ci0gICAgICAgIGlmIChudW1Sb3dzIDw9IHJvd3NBdmFpbGFibGVJbkNvbHVtbnMwMSkg
ewotICAgICAgICAgICAgcm93c0F2YWlsYWJsZUluQ29sdW1uczAxIC09IG51bVJvd3M7Ci0gICAg
ICAgIH0gZWxzZSBpZiAobnVtUm93cyA8PSByb3dzQXZhaWxhYmxlSW5Db2x1bW5zMjMpIHsKLSAg
ICAgICAgICAgIHJvd3NBdmFpbGFibGVJbkNvbHVtbnMyMyAtPSBudW1Sb3dzOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgaW50IG51bVJvd3NVc2VkSW5Db2x1bW5zMDEgPQotICAgICAgICB0d29Db2x1bW5Sb3dzQXZh
aWxhYmxlIC0gcm93c0F2YWlsYWJsZUluQ29sdW1uczAxOwotICAgIGludCBudW1Sb3dzVXNlZElu
Q29sdW1uczIzID0KLSAgICAgICAgdHdvQ29sdW1uUm93c0F2YWlsYWJsZSAtIHJvd3NBdmFpbGFi
bGVJbkNvbHVtbnMyMzsKLSAgICBmaWxsQ29sdW1ucyh0b3AyQ29sdW1uUm93LCBudW1Sb3dzVXNl
ZEluQ29sdW1uczAxLCAwLCAyKTsKLSAgICBmaWxsQ29sdW1ucyhtYXhSb3dzXyAtIG51bVJvd3NV
c2VkSW5Db2x1bW5zMjMsIG51bVJvd3NVc2VkSW5Db2x1bW5zMjMsCi0gICAgICAgICAgICAgICAg
MiwgMik7Ci0KLSAgICAvLyBQYWNrcyB0aGUgMSBjb2x1bW4gdmFyaWFibGVzLgotICAgIGZvciAo
OyBpaSA8IHZhcmlhYmxlcy5zaXplKCk7ICsraWkpIHsKLSAgICAgICAgY29uc3QgVFZhcmlhYmxl
SW5mbyYgdmFyaWFibGUgPSB2YXJpYWJsZXNbaWldOwotICAgICAgICBBU1NFUlQoMSA9PSBHZXRO
dW1Db21wb25lbnRzUGVyUm93KHZhcmlhYmxlLnR5cGUpKTsKLSAgICAgICAgaW50IG51bVJvd3Mg
PSBHZXROdW1Sb3dzKHZhcmlhYmxlLnR5cGUpICogdmFyaWFibGUuc2l6ZTsKLSAgICAgICAgaW50
IHNtYWxsZXN0Q29sdW1uID0gLTE7Ci0gICAgICAgIGludCBzbWFsbGVzdFNpemUgPSBtYXhSb3dz
XyArIDE7Ci0gICAgICAgIGludCB0b3BSb3cgPSAtMTsKLSAgICAgICAgZm9yIChpbnQgY29sdW1u
ID0gMDsgY29sdW1uIDwga051bUNvbHVtbnM7ICsrY29sdW1uKSB7Ci0gICAgICAgICAgICBpbnQg
cm93ID0gMDsKLSAgICAgICAgICAgIGludCBzaXplID0gMDsKLSAgICAgICAgICAgIGlmIChzZWFy
Y2hDb2x1bW4oY29sdW1uLCBudW1Sb3dzLCAmcm93LCAmc2l6ZSkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoc2l6ZSA8IHNtYWxsZXN0U2l6ZSkgewotICAgICAgICAgICAgICAgICAgICBzbWFsbGVz
dFNpemUgPSBzaXplOwotICAgICAgICAgICAgICAgICAgICBzbWFsbGVzdENvbHVtbiA9IGNvbHVt
bjsKLSAgICAgICAgICAgICAgICAgICAgdG9wUm93ID0gcm93OwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzbWFsbGVzdENvbHVtbiA8
IDApIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGZp
bGxDb2x1bW5zKHRvcFJvdywgbnVtUm93cywgc21hbGxlc3RDb2x1bW4sIDEpOwotICAgIH0KLQot
ICAgIEFTU0VSVCh2YXJpYWJsZXMuc2l6ZSgpID09IGlpKTsKLQotICAgIHJldHVybiB0cnVlOwot
fQotCi0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1ZhcmlhYmxlUGFja2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
VmFyaWFibGVQYWNrZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk4NzA2NmNj
MzdjZmQ3NDIzMGZhMjViYzJhZTBlNmM5OWM2ZDhmNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvVmFyaWFibGVQYWNrZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgX1ZBUklBQkxFUEFDS0VSX0lOQ0xVREVEXwotI2RlZmlu
ZSBfVkFSSUFCTEVQQUNLRVJfSU5DTFVERURfCi0KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0jaW5jbHVk
ZSAiY29tcGlsZXIvU2hIYW5kbGUuaCIKLQotY2xhc3MgVmFyaWFibGVQYWNrZXIgewotIHB1Ymxp
YzoKLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHBhc3NlZCBpbiB2YXJpYWJsZXMgcGFjayBp
biBtYXhWZWN0b3JzIGZvbGxvd2luZwotICAgIC8vIHRoZSBwYWNraW5nIHJ1bGVzIGZyb20gdGhl
IEdMU0wgMS4wMTcgc3BlYywgQXBwZW5kaXggQSwgc2VjdGlvbiA3LgotICAgIGJvb2wgQ2hlY2tW
YXJpYWJsZXNXaXRoaW5QYWNraW5nTGltaXRzKAotICAgICAgICBpbnQgbWF4VmVjdG9ycywKLSAg
ICAgICAgY29uc3QgVFZhcmlhYmxlSW5mb0xpc3QmIGluX3ZhcmlhYmxlcyk7Ci0KLSAgICAvLyBH
ZXRzIGhvdyBtYW55IGNvbXBvbmVudHMgaW4gYSByb3cgYSBkYXRhIHR5cGUgdGFrZXMuCi0gICAg
c3RhdGljIGludCBHZXROdW1Db21wb25lbnRzUGVyUm93KFNoRGF0YVR5cGUgdHlwZSk7Ci0KLSAg
ICAvLyBHZXRzIGhvdyBtYW55IHJvd3MgYSBkYXRhIHR5cGUgdGFrZXMuCi0gICAgc3RhdGljIGlu
dCBHZXROdW1Sb3dzKFNoRGF0YVR5cGUgdHlwZSk7Ci0KLSBwcml2YXRlOgotICAgIHN0YXRpYyBj
b25zdCBpbnQga051bUNvbHVtbnMgPSA0OwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBrQ29s
dW1uTWFzayA9ICgxIDw8IGtOdW1Db2x1bW5zKSAtIDE7Ci0KLSAgICB1bnNpZ25lZCBtYWtlQ29s
dW1uRmxhZ3MoaW50IGNvbHVtbiwgaW50IG51bUNvbXBvbmVudHNQZXJSb3cpOwotICAgIHZvaWQg
ZmlsbENvbHVtbnMoaW50IHRvcFJvdywgaW50IG51bVJvd3MsIGludCBjb2x1bW4sIGludCBudW1D
b21wb25lbnRzUGVyUm93KTsKLSAgICBib29sIHNlYXJjaENvbHVtbihpbnQgY29sdW1uLCBpbnQg
bnVtUm93cywgaW50KiBkZXN0Um93LCBpbnQqIGRlc3RTaXplKTsKLQotICAgIGludCB0b3BOb25G
dWxsUm93XzsKLSAgICBpbnQgYm90dG9tTm9uRnVsbFJvd187Ci0gICAgaW50IG1heFJvd3NfOwot
ICAgIHN0ZDo6dmVjdG9yPHVuc2lnbmVkPiByb3dzXzsKLX07Ci0KLSNlbmRpZiAvLyBfVkFSSUFC
TEVQQUNLRVJfSU5DTFVERURfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1ZlcnNpb25HTFNMLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
N2E4MmJiNGRjMTdkNjA1MzM1NGUxYWZlMzk0OWVjOGU1N2ZmYTlkMS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAg
QEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9WZXJzaW9uR0xTTC5o
IgotCi1zdGF0aWMgY29uc3QgaW50IEdMU0xfVkVSU0lPTl8xMTAgPSAxMTA7Ci1zdGF0aWMgY29u
c3QgaW50IEdMU0xfVkVSU0lPTl8xMjAgPSAxMjA7Ci0KLS8vIFdlIG5lZWQgdG8gc2NhbiBmb3Ig
dGhlIGZvbGxvd2luZzoKLS8vIDEuICJpbnZhcmlhbnQiIGtleXdvcmQ6IFRoaXMgY2FuIG9jY3Vy
IGluIGJvdGggLSB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMKLS8vICAgIGJ1dCBvbmx5IGF0
IHRoZSBnbG9iYWwgc2NvcGUuCi0vLyAyLiAiZ2xfUG9pbnRDb29yZCIgYnVpbHQtaW4gdmFyaWFi
bGU6IFRoaXMgY2FuIG9ubHkgb2NjdXIgaW4gZnJhZ21lbnQgc2hhZGVyCi0vLyAgICBidXQgaW5z
aWRlIGFueSBzY29wZS4KLS8vIDMuIENhbGwgdG8gYSBtYXRyaXggY29uc3RydWN0b3Igd2l0aCBh
bm90aGVyIG1hdHJpeCBhcyBhcmd1bWVudC4KLS8vICAgIChUaGVzZSBjb25zdHJ1Y3RvcnMgd2Vy
ZSByZXNlcnZlZCBpbiBHTFNMIHZlcnNpb24gMS4xMC4pCi0vLyA0LiBBcnJheXMgYXMgIm91dCIg
ZnVuY3Rpb24gcGFyYW1ldGVycy4KLS8vICAgIEdMU0wgc3BlYyBzZWN0aW9uIDYuMS4xOiAiV2hl
biBjYWxsaW5nIGEgZnVuY3Rpb24sIGV4cHJlc3Npb25zIHRoYXQgZG8KLS8vICAgIG5vdCBldmFs
dWF0ZSB0byBsLXZhbHVlcyBjYW5ub3QgYmUgcGFzc2VkIHRvIHBhcmFtZXRlcnMgZGVjbGFyZWQg
YXMKLS8vICAgIG91dCBvciBpbm91dC4iCi0vLyAgICBHTFNMIDEuMSBzZWN0aW9uIDUuODogIk90
aGVyIGJpbmFyeSBvciB1bmFyeSBleHByZXNzaW9ucywKLS8vICAgIG5vbi1kZXJlZmVyZW5jZWQg
YXJyYXlzLCBmdW5jdGlvbiBuYW1lcywgc3dpenpsZXMgd2l0aCByZXBlYXRlZCBmaWVsZHMsCi0v
LyAgICBhbmQgY29uc3RhbnRzIGNhbm5vdCBiZSBsLXZhbHVlcy4iCi0vLyAgICBHTFNMIDEuMiBy
ZWxheGVkIHRoZSByZXN0cmljdGlvbiBvbiBhcnJheXMsIHNlY3Rpb24gNS44OiAiVmFyaWFibGVz
IHRoYXQKLS8vICAgIGFyZSBidWlsdC1pbiB0eXBlcywgZW50aXJlIHN0cnVjdHVyZXMgb3IgYXJy
YXlzLi4uIGFyZSBhbGwgbC12YWx1ZXMuIgotLy8KLS8vIFRPRE8oYWxva3ApOiBUaGUgZm9sbG93
aW5nIHR3byBjYXNlcyBvZiBpbnZhcmlhbnQgZGVjYWxhcmF0aW9uIGdldCBsb3N0Ci0vLyBkdXJp
bmcgcGFyc2luZyAtIHRoZXkgZG8gbm90IGdldCBjYXJyaWVkIG92ZXIgdG8gdGhlIGludGVybWVk
aWF0ZSB0cmVlLgotLy8gSGFuZGxlIHRoZXNlIGNhc2VzOgotLy8gMS4gV2hlbiBhIHByYWdtYSBp
cyB1c2VkIHRvIGZvcmNlIGFsbCBvdXRwdXQgdmFyaWFibGVzIHRvIGJlIGludmFyaWFudDoKLS8v
ICAgIC0gI3ByYWdtYSBTVERHTCBpbnZhcmlhbnQoYWxsKQotLy8gMi4gV2hlbiBhIHByZXZpb3Vz
bHkgZGVjYWxhcmVkIG9yIGJ1aWx0LWluIHZhcmlhYmxlIGlzIG1hcmtlZCBpbnZhcmlhbnQ6Ci0v
LyAgICAtIGludmFyaWFudCBnbF9Qb3NpdGlvbjsKLS8vICAgIC0gdmFyeWluZyB2ZWMzIGNvbG9y
OyBpbnZhcmlhbnQgY29sb3I7Ci0vLwotVFZlcnNpb25HTFNMOjpUVmVyc2lvbkdMU0woU2hTaGFk
ZXJUeXBlIHR5cGUpCi0gICAgOiBtU2hhZGVyVHlwZSh0eXBlKSwKLSAgICAgIG1WZXJzaW9uKEdM
U0xfVkVSU0lPTl8xMTApCi17Ci19Ci0KLXZvaWQgVFZlcnNpb25HTFNMOjp2aXNpdFN5bWJvbChU
SW50ZXJtU3ltYm9sKiBub2RlKQotewotICAgIGlmIChub2RlLT5nZXRTeW1ib2woKSA9PSAiZ2xf
UG9pbnRDb29yZCIpCi0gICAgICAgIHVwZGF0ZVZlcnNpb24oR0xTTF9WRVJTSU9OXzEyMCk7Ci19
Ci0KLXZvaWQgVFZlcnNpb25HTFNMOjp2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50
VW5pb24qKQotewotfQotCi1ib29sIFRWZXJzaW9uR0xTTDo6dmlzaXRCaW5hcnkoVmlzaXQsIFRJ
bnRlcm1CaW5hcnkqKQotewotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFRWZXJzaW9uR0xT
TDo6dmlzaXRVbmFyeShWaXNpdCwgVEludGVybVVuYXJ5KikKLXsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBUVmVyc2lvbkdMU0w6OnZpc2l0U2VsZWN0aW9uKFZpc2l0LCBUSW50ZXJtU2Vs
ZWN0aW9uKikKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBUVmVyc2lvbkdMU0w6OnZp
c2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQotewotICAgIGJvb2wg
dmlzaXRDaGlsZHJlbiA9IHRydWU7Ci0KLSAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpIHsKLSAg
ICAgIGNhc2UgRU9wU2VxdWVuY2U6Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gdmlzaXQgc2VxdWVu
Y2UgY2hpbGRyZW4gdG8gZ2V0IHRvIGdsb2JhbCBvciBpbm5lciBzY29wZS4KLSAgICAgICAgdmlz
aXRDaGlsZHJlbiA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BEZWNsYXJh
dGlvbjogewotICAgICAgICBjb25zdCBUSW50ZXJtU2VxdWVuY2UmIHNlcXVlbmNlID0gbm9kZS0+
Z2V0U2VxdWVuY2UoKTsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBzZXF1ZW5jZS5m
cm9udCgpLT5nZXRBc1R5cGVkKCktPmdldFF1YWxpZmllcigpOwotICAgICAgICBpZiAoKHF1YWxp
ZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5aW5nSW4pIHx8Ci0gICAgICAgICAgICAocXVhbGlmaWVy
ID09IEV2cUludmFyaWFudFZhcnlpbmdPdXQpKSB7Ci0gICAgICAgICAgICB1cGRhdGVWZXJzaW9u
KEdMU0xfVkVSU0lPTl8xMjApOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQot
ICAgICAgY2FzZSBFT3BQYXJhbWV0ZXJzOiB7Ci0gICAgICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5j
ZSYgcGFyYW1zID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKLSAgICAgICAgZm9yIChUSW50ZXJtU2Vx
dWVuY2U6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBwYXJhbXMuYmVnaW4oKTsKLSAgICAgICAgICAg
ICBpdGVyICE9IHBhcmFtcy5lbmQoKTsgKytpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBj
b25zdCBUSW50ZXJtVHlwZWQqIHBhcmFtID0gKCppdGVyKS0+Z2V0QXNUeXBlZCgpOwotICAgICAg
ICAgICAgaWYgKHBhcmFtLT5pc0FycmF5KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBwYXJhbS0+Z2V0UXVhbGlmaWVyKCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKChxdWFsaWZpZXIgPT0gRXZxT3V0KSB8fCAocXVhbGlmaWVyID09ICBFdnFJ
bk91dCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB1cGRhdGVWZXJz
aW9uKEdMU0xfVkVSU0lPTl8xMjApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRnVsbHkg
cHJvY2Vzc2VkLiBObyBuZWVkIHRvIHZpc2l0IGNoaWxkcmVuLgotICAgICAgICB2aXNpdENoaWxk
cmVuID0gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBFT3BDb25z
dHJ1Y3RNYXQyOgotICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQzOgotICAgICAgY2FzZSBFT3BD
b25zdHJ1Y3RNYXQ0OiB7Ci0gICAgICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2Ug
PSBub2RlLT5nZXRTZXF1ZW5jZSgpOwotICAgICAgICBpZiAoc2VxdWVuY2Uuc2l6ZSgpID09IDEp
IHsKLSAgICAgICAgICBUSW50ZXJtVHlwZWQqIHR5cGVkID0gc2VxdWVuY2UuZnJvbnQoKS0+Z2V0
QXNUeXBlZCgpOwotICAgICAgICAgIGlmICh0eXBlZCAmJiB0eXBlZC0+aXNNYXRyaXgoKSkgewot
ICAgICAgICAgICAgdXBkYXRlVmVyc2lvbihHTFNMX1ZFUlNJT05fMTIwKTsKLSAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGRlZmF1bHQ6IGJy
ZWFrOwotICAgIH0KLQotICAgIHJldHVybiB2aXNpdENoaWxkcmVuOwotfQotCi1ib29sIFRWZXJz
aW9uR0xTTDo6dmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCopCi17Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgVFZlcnNpb25HTFNMOjp2aXNpdEJyYW5jaChWaXNpdCwgVEludGVybUJy
YW5jaCopCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgVFZlcnNpb25HTFNMOjp1cGRh
dGVWZXJzaW9uKGludCB2ZXJzaW9uKQotewotICAgIG1WZXJzaW9uID0gc3RkOjptYXgodmVyc2lv
biwgbVZlcnNpb24pOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9WZXJzaW9uR0xTTC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzFj
YjFhYjk3YjlkZTVlZDQ3YTkxMDQ4YjJlNmQzM2JlYzdlYmE2Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9WZXJzaW9uR0xTTC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9WRVJTSU9OR0xTTF9IXwotI2RlZmlu
ZSBDT01QSUxFUl9WRVJTSU9OR0xTTF9IXwotCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5n
LmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCi0KLS8vIFRyYXZlcnNlcyB0
aGUgaW50ZXJtZWRpYXRlIHRyZWUgdG8gcmV0dXJuIHRoZSBtaW5pbXVtIEdMU0wgdmVyc2lvbgot
Ly8gcmVxdWlyZWQgdG8gbGVnYWxseSBhY2Nlc3MgYWxsIGJ1aWx0LWluIGZlYXR1cmVzIHVzZWQg
aW4gdGhlIHNoYWRlci4KLS8vIEdMU0wgMS4xIHdoaWNoIGlzIG1hbmRhdGVkIGJ5IE9wZW5HTCAy
LjAgcHJvdmlkZXM6Ci0vLyAgIC0gI3ZlcnNpb24gYW5kICNleHRlbnNpb24gdG8gZGVjbGFyZSB2
ZXJzaW9uIGFuZCBleHRlbnNpb25zLgotLy8gICAtIGJ1aWx0LWluIGZ1bmN0aW9ucyByZWZyYWN0
LCBleHAsIGFuZCBsb2cuCi0vLyAgIC0gdXBkYXRlZCBzdGVwKCkgdG8gY29tcGFyZSB4IDwgZWRn
ZSBpbnN0ZWFkIG9mIHggPD0gZWRnZS4KLS8vIEdMU0wgMS4yIHdoaWNoIGlzIG1hbmRhdGVkIGJ5
IE9wZW5HTCAyLjEgcHJvdmlkZXM6Ci0vLyAgIC0gbWFueSBjaGFuZ2VzIHRvIHJlZHVjZSBkaWZm
ZXJlbmNlcyB3aGVuIGNvbXBhcmVkIHRvIHRoZSBFUyBzcGVjaWZpY2F0aW9uLgotLy8gICAtIGlu
dmFyaWFudCBrZXl3b3JkIGFuZCBpdHMgc3VwcG9ydC4KLS8vICAgLSBjKysgc3R5bGUgbmFtZSBo
aWRpbmcgcnVsZXMuCi0vLyAgIC0gYnVpbHQtaW4gdmFyaWFibGUgZ2xfUG9pbnRDb29yZCBmb3Ig
ZnJhZ21lbnQgc2hhZGVycy4KLS8vICAgLSBtYXRyaXggY29uc3RydWN0b3JzIHRha2luZyBtYXRy
aXggYXMgYXJndW1lbnQuCi0vLyAgIC0gYXJyYXkgYXMgIm91dCIgZnVuY3Rpb24gcGFyYW1ldGVy
cwotLy8KLWNsYXNzIFRWZXJzaW9uR0xTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKLXB1
YmxpYzoKLSAgICBUVmVyc2lvbkdMU0woU2hTaGFkZXJUeXBlIHR5cGUpOwotCi0gICAgLy8gUmV0
dXJucyAxMjAgaWYgdGhlIGZvbGxvd2luZyBpcyB1c2VkIHRoZSBzaGFkZXI6Ci0gICAgLy8gLSAi
aW52YXJpYW50IiwKLSAgICAvLyAtICJnbF9Qb2ludENvb3JkIiwKLSAgICAvLyAtIG1hdHJpeC9t
YXRyaXggY29uc3RydWN0b3JzCi0gICAgLy8gLSBhcnJheSAib3V0IiBwYXJhbWV0ZXJzCi0gICAg
Ly8gRWxzZSAxMTAgaXMgcmV0dXJuZWQuCi0gICAgaW50IGdldFZlcnNpb24oKSB7IHJldHVybiBt
VmVyc2lvbjsgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wq
KTsKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVu
aW9uKik7Ci0gICAgdmlydHVhbCBib29sIHZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5
Kik7Ci0gICAgdmlydHVhbCBib29sIHZpc2l0VW5hcnkoVmlzaXQsIFRJbnRlcm1VbmFyeSopOwot
ICAgIHZpcnR1YWwgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCwgVEludGVybVNlbGVjdGlvbiop
OwotICAgIHZpcnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0
ZSopOwotICAgIHZpcnR1YWwgYm9vbCB2aXNpdExvb3AoVmlzaXQsIFRJbnRlcm1Mb29wKik7Ci0g
ICAgdmlydHVhbCBib29sIHZpc2l0QnJhbmNoKFZpc2l0LCBUSW50ZXJtQnJhbmNoKik7Ci0KLXBy
b3RlY3RlZDoKLSAgICB2b2lkIHVwZGF0ZVZlcnNpb24oaW50IHZlcnNpb24pOwotCi1wcml2YXRl
OgotICAgIFNoU2hhZGVyVHlwZSBtU2hhZGVyVHlwZTsKLSAgICBpbnQgbVZlcnNpb247Ci19Owot
Ci0jZW5kaWYgIC8vIENPTVBJTEVSX1ZFUlNJT05HTFNMX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVnLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMzhkNTVhY2FmNjdhZmEyZTEwMjg5NWM0Njk0YzU5Nzk1ZDc3YjUzOS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvZGVidWcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBA
QAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gZGVidWcuY3BwOiBEZWJ1Z2dpbmcgdXRpbGl0aWVz
LgotCi0jaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKLQotI2luY2x1ZGUgPHN0ZGFyZy5oPgot
I2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplUGFyc2VD
b250ZXh0LmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VDb250ZXh0LmgiCi0KLSNpZmRlZiBU
UkFDRV9FTkFCTEVECi1zdGF0aWMgY29uc3QgaW50IGtUcmFjZUJ1ZmZlckxlbiA9IDEwMjQ7Ci0K
LWV4dGVybiAiQyIgewotdm9pZCBUcmFjZShjb25zdCBjaGFyICpmb3JtYXQsIC4uLikgewotICAg
IGlmICghZm9ybWF0KSByZXR1cm47Ci0KLSAgICBUUGFyc2VDb250ZXh0KiBwYXJzZUNvbnRleHQg
PSBHZXRHbG9iYWxQYXJzZUNvbnRleHQoKTsKLSAgICBpZiAocGFyc2VDb250ZXh0KSB7Ci0gICAg
ICAgIGNoYXIgYnVmW2tUcmFjZUJ1ZmZlckxlbl07Ci0gICAgICAgIHZhX2xpc3QgYXJnczsKLSAg
ICAgICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKLSAgICAgICAgdnNucHJpbnRmKGJ1Ziwga1Ry
YWNlQnVmZmVyTGVuLCBmb3JtYXQsIGFyZ3MpOwotICAgICAgICB2YV9lbmQoYXJncyk7Ci0KLSAg
ICAgICAgcGFyc2VDb250ZXh0LT50cmFjZShidWYpOwotICAgIH0KLX0KLX0gIC8vIGV4dGVybiAi
QyIKLSNlbmRpZiAgLy8gVFJBQ0VfRU5BQkxFRAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9kZWJ1Zy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTM3
MTUxNmFmMGZlZWM2MWY0NmVlMTE4MjFiYTI4ZDM1MWRkNDllLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9kZWJ1Zy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLQotLy8gZGVidWcuaDogRGVidWdnaW5nIHV0aWxpdGllcy4KLQotI2lmbmRlZiBD
T01QSUxFUl9ERUJVR19IXwotI2RlZmluZSBDT01QSUxFUl9ERUJVR19IXwotCi0jaW5jbHVkZSA8
YXNzZXJ0Lmg+Ci0KLSNpZmRlZiBfREVCVUcKLSNkZWZpbmUgVFJBQ0VfRU5BQkxFRCAgLy8gZGVm
aW5lIHRvIGVuYWJsZSBkZWJ1ZyBtZXNzYWdlIHRyYWNpbmcKLSNlbmRpZiAgLy8gX0RFQlVHCi0K
LS8vIE91dHB1dHMgdGV4dCB0byB0aGUgZGVidWcgbG9nCi0jaWZkZWYgVFJBQ0VfRU5BQkxFRAot
Ci0jaWZkZWYgIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZiAgLy8gX19jcGx1c3Bs
dXMKLXZvaWQgVHJhY2UoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pOwotI2lmZGVmICBfX2NwbHVz
cGx1cwotfQotI2VuZGlmICAvLyBfX2NwbHVzcGx1cwotCi0jZWxzZSAgIC8vIFRSQUNFX0VOQUJM
RUQKLQotI2RlZmluZSBUcmFjZSguLi4pICgodm9pZCkwKQotCi0jZW5kaWYgIC8vIFRSQUNFX0VO
QUJMRUQKLQotLy8gQSBtYWNybyBhc3NlcnRpbmcgYSBjb25kaXRpb24gYW5kIG91dHB1dHRpbmcg
ZmFpbHVyZXMgdG8gdGhlIGRlYnVnIGxvZwotI2RlZmluZSBBU1NFUlQoZXhwcmVzc2lvbikgZG8g
eyBcCi0gICAgaWYoIShleHByZXNzaW9uKSkgXAotICAgICAgICBUcmFjZSgiQXNzZXJ0IGZhaWxl
ZDogJXMoJWQpOiAiI2V4cHJlc3Npb24iXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsgXAot
ICAgIGFzc2VydChleHByZXNzaW9uKTsgXAotfSB3aGlsZSgwKQotCi0jZGVmaW5lIFVOSU1QTEVN
RU5URUQoKSBkbyB7IFwKLSAgICBUcmFjZSgiVW5pbXBsZW1lbnRlZCBpbnZva2VkOiAlcyglZClc
biIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOyBcCi0gICAgYXNzZXJ0KGZhbHNlKTsgXAotfSB3
aGlsZSgwKQotCi0jZGVmaW5lIFVOUkVBQ0hBQkxFKCkgZG8geyBcCi0gICAgVHJhY2UoIlVucmVh
Y2hhYmxlIHJlYWNoZWQ6ICVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7IFwKLSAg
ICBhc3NlcnQoZmFsc2UpOyBcCi19IHdoaWxlKDApCi0KLSNlbmRpZiAgIC8vIENPTVBJTEVSX0RF
QlVHX0hfCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGNhNjYxZDY3Njc4OWE2OTNjYjI2Nzg0NDAxZGRkMTcwNTU2ZTA4Mzku
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI3ByYWdtYSB3
YXJuaW5nKGRpc2FibGU6IDQ3MTgpCi0KLSNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBl
bmRlbmN5R3JhcGguaCIKLSNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyLmgiCi0KLVREZXBlbmRlbmN5R3JhcGg6OlREZXBlbmRlbmN5R3JhcGgoVEludGVy
bU5vZGUqIGludGVybU5vZGUpCi17Ci0gICAgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OmJ1aWxk
KGludGVybU5vZGUsIHRoaXMpOwotfQotCi1URGVwZW5kZW5jeUdyYXBoOjp+VERlcGVuZGVuY3lH
cmFwaCgpCi17Ci0gICAgZm9yIChUR3JhcGhOb2RlVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdGVy
ID0gbUFsbE5vZGVzLmJlZ2luKCk7IGl0ZXIgIT0gbUFsbE5vZGVzLmVuZCgpOyArK2l0ZXIpCi0g
ICAgewotICAgICAgICBUR3JhcGhOb2RlKiBub2RlID0gKml0ZXI7Ci0gICAgICAgIGRlbGV0ZSBu
b2RlOwotICAgIH0KLX0KLQotVEdyYXBoQXJndW1lbnQqIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0
ZUFyZ3VtZW50KFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXJndW1lbnROdW1i
ZXIpCi17Ci0gICAgVEdyYXBoQXJndW1lbnQqIGFyZ3VtZW50ID0gbmV3IFRHcmFwaEFyZ3VtZW50
KGludGVybUZ1bmN0aW9uQ2FsbCwgYXJndW1lbnROdW1iZXIpOwotICAgIG1BbGxOb2Rlcy5wdXNo
X2JhY2soYXJndW1lbnQpOwotICAgIHJldHVybiBhcmd1bWVudDsKLX0KLQotVEdyYXBoRnVuY3Rp
b25DYWxsKiBURGVwZW5kZW5jeUdyYXBoOjpjcmVhdGVGdW5jdGlvbkNhbGwoVEludGVybUFnZ3Jl
Z2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKQotewotICAgIFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVu
Y3Rpb25DYWxsID0gbmV3IFRHcmFwaEZ1bmN0aW9uQ2FsbChpbnRlcm1GdW5jdGlvbkNhbGwpOwot
ICAgIG1BbGxOb2Rlcy5wdXNoX2JhY2soZnVuY3Rpb25DYWxsKTsKLSAgICBpZiAoZnVuY3Rpb25D
YWxsLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKS0+aXNVc2VyRGVmaW5lZCgpKQotICAgICAgICBt
VXNlckRlZmluZWRGdW5jdGlvbkNhbGxzLnB1c2hfYmFjayhmdW5jdGlvbkNhbGwpOwotICAgIHJl
dHVybiBmdW5jdGlvbkNhbGw7Ci19Ci0KLVRHcmFwaFN5bWJvbCogVERlcGVuZGVuY3lHcmFwaDo6
Z2V0T3JDcmVhdGVTeW1ib2woVEludGVybVN5bWJvbCogaW50ZXJtU3ltYm9sKQotewotICAgIFRT
eW1ib2xJZE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1TeW1ib2xJZE1hcC5maW5kKGludGVy
bVN5bWJvbC0+Z2V0SWQoKSk7Ci0KLSAgICBUR3JhcGhTeW1ib2wqIHN5bWJvbCA9IE5VTEw7Ci0K
LSAgICBpZiAoaXRlciAhPSBtU3ltYm9sSWRNYXAuZW5kKCkpIHsKLSAgICAgICAgVFN5bWJvbElk
UGFpciBwYWlyID0gKml0ZXI7Ci0gICAgICAgIHN5bWJvbCA9IHBhaXIuc2Vjb25kOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHN5bWJvbCA9IG5ldyBUR3JhcGhTeW1ib2woaW50ZXJtU3ltYm9sKTsK
LSAgICAgICAgbUFsbE5vZGVzLnB1c2hfYmFjayhzeW1ib2wpOwotCi0gICAgICAgIFRTeW1ib2xJ
ZFBhaXIgcGFpcihpbnRlcm1TeW1ib2wtPmdldElkKCksIHN5bWJvbCk7Ci0gICAgICAgIG1TeW1i
b2xJZE1hcC5pbnNlcnQocGFpcik7Ci0KLSAgICAgICAgLy8gV2Ugc2F2ZSBhbGwgc2FtcGxlciBz
eW1ib2xzIGluIGEgY29sbGVjdGlvbiwgc28gd2UgY2FuIHN0YXJ0IGdyYXBoIHRyYXZlcnNhbHMg
ZnJvbSB0aGVtIHF1aWNrbHkuCi0gICAgICAgIGlmIChJc1NhbXBsZXIoaW50ZXJtU3ltYm9sLT5n
ZXRCYXNpY1R5cGUoKSkpCi0gICAgICAgICAgICBtU2FtcGxlclN5bWJvbHMucHVzaF9iYWNrKHN5
bWJvbCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN5bWJvbDsKLX0KLQotVEdyYXBoU2VsZWN0aW9u
KiBURGVwZW5kZW5jeUdyYXBoOjpjcmVhdGVTZWxlY3Rpb24oVEludGVybVNlbGVjdGlvbiogaW50
ZXJtU2VsZWN0aW9uKQotewotICAgIFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uID0gbmV3IFRH
cmFwaFNlbGVjdGlvbihpbnRlcm1TZWxlY3Rpb24pOwotICAgIG1BbGxOb2Rlcy5wdXNoX2JhY2so
c2VsZWN0aW9uKTsKLSAgICByZXR1cm4gc2VsZWN0aW9uOwotfQotCi1UR3JhcGhMb29wKiBURGVw
ZW5kZW5jeUdyYXBoOjpjcmVhdGVMb29wKFRJbnRlcm1Mb29wKiBpbnRlcm1Mb29wKQotewotICAg
IFRHcmFwaExvb3AqIGxvb3AgPSBuZXcgVEdyYXBoTG9vcChpbnRlcm1Mb29wKTsKLSAgICBtQWxs
Tm9kZXMucHVzaF9iYWNrKGxvb3ApOwotICAgIHJldHVybiBsb29wOwotfQotCi1UR3JhcGhMb2dp
Y2FsT3AqIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUxvZ2ljYWxPcChUSW50ZXJtQmluYXJ5KiBp
bnRlcm1Mb2dpY2FsT3ApCi17Ci0gICAgVEdyYXBoTG9naWNhbE9wKiBsb2dpY2FsT3AgPSBuZXcg
VEdyYXBoTG9naWNhbE9wKGludGVybUxvZ2ljYWxPcCk7Ci0gICAgbUFsbE5vZGVzLnB1c2hfYmFj
ayhsb2dpY2FsT3ApOwotICAgIHJldHVybiBsb2dpY2FsT3A7Ci19Ci0KLWNvbnN0IGNoYXIqIFRH
cmFwaExvZ2ljYWxPcDo6Z2V0T3BTdHJpbmcoKSBjb25zdAotewotICAgIGNvbnN0IGNoYXIqIG9w
U3RyaW5nID0gTlVMTDsKLSAgICBzd2l0Y2ggKGdldEludGVybUxvZ2ljYWxPcCgpLT5nZXRPcCgp
KSB7Ci0gICAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDogb3BTdHJpbmcgPSAiYW5kIjsgYnJlYWs7
Ci0gICAgICAgIGNhc2UgRU9wTG9naWNhbE9yOiBvcFN0cmluZyA9ICJvciI7IGJyZWFrOwotICAg
ICAgICBkZWZhdWx0OiBvcFN0cmluZyA9ICJ1bmtub3duIjsgYnJlYWs7Ci0gICAgfQotICAgIHJl
dHVybiBvcFN0cmluZzsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNWE5YzM1ZDAwYjdhMzFkOTI1NzExZWYwNWU4NTI4ZDQ0ZjFl
NzY5Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBo
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMTIgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykg
MjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5k
ZWYgQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9ICi0jZGVmaW5lIENPTVBJTEVS
X0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfSAotCi0jaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJt
ZWRpYXRlLmgiCi0KLSNpbmNsdWRlIDxzZXQ+Ci0jaW5jbHVkZSA8c3RhY2s+Ci0KLWNsYXNzIFRH
cmFwaE5vZGU7Ci1jbGFzcyBUR3JhcGhQYXJlbnROb2RlOwotY2xhc3MgVEdyYXBoQXJndW1lbnQ7
Ci1jbGFzcyBUR3JhcGhGdW5jdGlvbkNhbGw7Ci1jbGFzcyBUR3JhcGhTeW1ib2w7Ci1jbGFzcyBU
R3JhcGhTZWxlY3Rpb247Ci1jbGFzcyBUR3JhcGhMb29wOwotY2xhc3MgVEdyYXBoTG9naWNhbE9w
OwotY2xhc3MgVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjsKLWNsYXNzIFREZXBlbmRlbmN5R3Jh
cGhPdXRwdXQ7Ci0KLXR5cGVkZWYgc3RkOjpzZXQ8VEdyYXBoTm9kZSo+IFRHcmFwaE5vZGVTZXQ7
Ci10eXBlZGVmIHN0ZDo6dmVjdG9yPFRHcmFwaE5vZGUqPiBUR3JhcGhOb2RlVmVjdG9yOwotdHlw
ZWRlZiBzdGQ6OnZlY3RvcjxUR3JhcGhTeW1ib2wqPiBUR3JhcGhTeW1ib2xWZWN0b3I7Ci10eXBl
ZGVmIHN0ZDo6dmVjdG9yPFRHcmFwaEZ1bmN0aW9uQ2FsbCo+IFRGdW5jdGlvbkNhbGxWZWN0b3I7
Ci0KLS8vCi0vLyBCYXNlIGNsYXNzIGZvciBhbGwgZGVwZW5kZW5jeSBncmFwaCBub2Rlcy4KLS8v
Ci1jbGFzcyBUR3JhcGhOb2RlIHsKLXB1YmxpYzoKLSAgICBUR3JhcGhOb2RlKFRJbnRlcm1Ob2Rl
KiBub2RlKSA6IGludGVybU5vZGUobm9kZSkge30KLSAgICB2aXJ0dWFsIH5UR3JhcGhOb2RlKCkg
e30KLSAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciog
Z3JhcGhUcmF2ZXJzZXIpOwotcHJvdGVjdGVkOgotICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2Rl
OwotfTsKLQotLy8KLS8vIEJhc2UgY2xhc3MgZm9yIGRlcGVuZGVuY3kgZ3JhcGggbm9kZXMgdGhh
dCBtYXkgaGF2ZSBjaGlsZHJlbi4KLS8vCi1jbGFzcyBUR3JhcGhQYXJlbnROb2RlIDogcHVibGlj
IFRHcmFwaE5vZGUgewotcHVibGljOgotICAgIFRHcmFwaFBhcmVudE5vZGUoVEludGVybU5vZGUq
IG5vZGUpIDogVEdyYXBoTm9kZShub2RlKSB7fQotICAgIHZpcnR1YWwgflRHcmFwaFBhcmVudE5v
ZGUoKSB7fQotICAgIHZvaWQgYWRkRGVwZW5kZW50Tm9kZShUR3JhcGhOb2RlKiBub2RlKSB7IGlm
IChub2RlICE9IHRoaXMpIG1EZXBlbmRlbnROb2Rlcy5pbnNlcnQobm9kZSk7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJz
ZXIpOwotcHJpdmF0ZToKLSAgICBUR3JhcGhOb2RlU2V0IG1EZXBlbmRlbnROb2RlczsKLX07Ci0K
LS8vCi0vLyBIYW5kbGUgZnVuY3Rpb24gY2FsbCBhcmd1bWVudHMuCi0vLwotY2xhc3MgVEdyYXBo
QXJndW1lbnQgOiBwdWJsaWMgVEdyYXBoUGFyZW50Tm9kZSB7Ci1wdWJsaWM6Ci0gICAgVEdyYXBo
QXJndW1lbnQoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsLCBpbnQgYXJndW1l
bnROdW1iZXIpCi0gICAgICAgIDogVEdyYXBoUGFyZW50Tm9kZShpbnRlcm1GdW5jdGlvbkNhbGwp
Ci0gICAgICAgICwgbUFyZ3VtZW50TnVtYmVyKGFyZ3VtZW50TnVtYmVyKSB7fQotICAgIHZpcnR1
YWwgflRHcmFwaEFyZ3VtZW50KCkge30KLSAgICBjb25zdCBUSW50ZXJtQWdncmVnYXRlKiBnZXRJ
bnRlcm1GdW5jdGlvbkNhbGwoKSBjb25zdCB7IHJldHVybiBpbnRlcm1Ob2RlLT5nZXRBc0FnZ3Jl
Z2F0ZSgpOyB9Ci0gICAgaW50IGdldEFyZ3VtZW50TnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbUFy
Z3VtZW50TnVtYmVyOyB9Ci0gICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3Jh
cGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKLXByaXZhdGU6Ci0gICAgaW50IG1Bcmd1bWVu
dE51bWJlcjsKLX07Ci0KLS8vCi0vLyBIYW5kbGUgZnVuY3Rpb24gY2FsbHMuCi0vLwotY2xhc3Mg
VEdyYXBoRnVuY3Rpb25DYWxsIDogcHVibGljIFRHcmFwaFBhcmVudE5vZGUgewotcHVibGljOgot
ICAgIFRHcmFwaEZ1bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNh
bGwpCi0gICAgICAgIDogVEdyYXBoUGFyZW50Tm9kZShpbnRlcm1GdW5jdGlvbkNhbGwpIHt9Ci0g
ICAgdmlydHVhbCB+VEdyYXBoRnVuY3Rpb25DYWxsKCkge30KLSAgICBjb25zdCBUSW50ZXJtQWdn
cmVnYXRlKiBnZXRJbnRlcm1GdW5jdGlvbkNhbGwoKSBjb25zdCB7IHJldHVybiBpbnRlcm1Ob2Rl
LT5nZXRBc0FnZ3JlZ2F0ZSgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKLX07Ci0KLS8vCi0vLyBIYW5kbGUg
c3ltYm9scy4KLS8vCi1jbGFzcyBUR3JhcGhTeW1ib2wgOiBwdWJsaWMgVEdyYXBoUGFyZW50Tm9k
ZSB7Ci1wdWJsaWM6Ci0gICAgVEdyYXBoU3ltYm9sKFRJbnRlcm1TeW1ib2wqIGludGVybVN5bWJv
bCkgOiBUR3JhcGhQYXJlbnROb2RlKGludGVybVN5bWJvbCkge30KLSAgICB2aXJ0dWFsIH5UR3Jh
cGhTeW1ib2woKSB7fQotICAgIGNvbnN0IFRJbnRlcm1TeW1ib2wqIGdldEludGVybVN5bWJvbCgp
IGNvbnN0IHsgcmV0dXJuIGludGVybU5vZGUtPmdldEFzU3ltYm9sTm9kZSgpOyB9Ci0gICAgdmly
dHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVy
c2VyKTsKLX07Ci0KLS8vCi0vLyBIYW5kbGUgaWYgc3RhdGVtZW50cyBhbmQgdGVybmFyeSBvcGVy
YXRvcnMuCi0vLwotY2xhc3MgVEdyYXBoU2VsZWN0aW9uIDogcHVibGljIFRHcmFwaE5vZGUgewot
cHVibGljOgotICAgIFRHcmFwaFNlbGVjdGlvbihUSW50ZXJtU2VsZWN0aW9uKiBpbnRlcm1TZWxl
Y3Rpb24pIDogVEdyYXBoTm9kZShpbnRlcm1TZWxlY3Rpb24pIHt9Ci0gICAgdmlydHVhbCB+VEdy
YXBoU2VsZWN0aW9uKCkge30KLSAgICBjb25zdCBUSW50ZXJtU2VsZWN0aW9uKiBnZXRJbnRlcm1T
ZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBpbnRlcm1Ob2RlLT5nZXRBc1NlbGVjdGlvbk5vZGUo
KTsgfQotICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2Vy
KiBncmFwaFRyYXZlcnNlcik7Ci19OwotCi0vLwotLy8gSGFuZGxlIGZvciwgZG8td2hpbGUsIGFu
ZCB3aGlsZSBsb29wcy4KLS8vCi1jbGFzcyBUR3JhcGhMb29wIDogcHVibGljIFRHcmFwaE5vZGUg
ewotcHVibGljOgotICAgIFRHcmFwaExvb3AoVEludGVybUxvb3AqIGludGVybUxvb3ApIDogVEdy
YXBoTm9kZShpbnRlcm1Mb29wKSB7fQotICAgIHZpcnR1YWwgflRHcmFwaExvb3AoKSB7fQotICAg
IGNvbnN0IFRJbnRlcm1Mb29wKiBnZXRJbnRlcm1Mb29wKCkgY29uc3QgeyByZXR1cm4gaW50ZXJt
Tm9kZS0+Z2V0QXNMb29wTm9kZSgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBl
bmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKLX07Ci0KLS8vCi0vLyBIYW5k
bGUgbG9naWNhbCBhbmQsIG9yLgotLy8KLWNsYXNzIFRHcmFwaExvZ2ljYWxPcCA6IHB1YmxpYyBU
R3JhcGhOb2RlIHsKLXB1YmxpYzoKLSAgICBUR3JhcGhMb2dpY2FsT3AoVEludGVybUJpbmFyeSog
aW50ZXJtTG9naWNhbE9wKSA6IFRHcmFwaE5vZGUoaW50ZXJtTG9naWNhbE9wKSB7fQotICAgIHZp
cnR1YWwgflRHcmFwaExvZ2ljYWxPcCgpIHt9Ci0gICAgY29uc3QgVEludGVybUJpbmFyeSogZ2V0
SW50ZXJtTG9naWNhbE9wKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNCaW5hcnlO
b2RlKCk7IH0KLSAgICBjb25zdCBjaGFyKiBnZXRPcFN0cmluZygpIGNvbnN0OwotICAgIHZpcnR1
YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNl
cik7Ci19OwotCi0vLwotLy8gQSBkZXBlbmRlbmN5IGdyYXBoIG9mIHN5bWJvbHMsIGZ1bmN0aW9u
IGNhbGxzLCBjb25kaXRpb25zIGV0Yy4KLS8vCi0vLyBUaGlzIGNsYXNzIHByb3ZpZGVzIGFuIGlu
dGVyZmFjZSB0byB0aGUgZW50cnkgcG9pbnRzIG9mIHRoZSBkZXBlbmRlbmN5IGdyYXBoLgotLy8K
LS8vIERlcGVuZGVuY3kgZ3JhcGggbm9kZXMgc2hvdWxkIGJlIGNyZWF0ZWQgYnkgdXNpbmcgb25l
IG9mIHRoZSBwcm92aWRlZCAiY3JlYXRlLi4uIiBtZXRob2RzLgotLy8gVGhpcyBjbGFzcyAoYW5k
IG5vYm9keSBlbHNlKSBtYW5hZ2VzIHRoZSBtZW1vcnkgb2YgdGhlIGNyZWF0ZWQgbm9kZXMuCi0v
LyBOb2RlcyBtYXkgbm90IGJlIHJlbW92ZWQgYWZ0ZXIgYmVpbmcgYWRkZWQsIHNvIGFsbCBjcmVh
dGVkIG5vZGVzIHdpbGwgZXhpc3Qgd2hpbGUgdGhlCi0vLyBURGVwZW5kZW5jeUdyYXBoIGluc3Rh
bmNlIGV4aXN0cy4KLS8vCi1jbGFzcyBURGVwZW5kZW5jeUdyYXBoIHsKLXB1YmxpYzoKLSAgICBU
RGVwZW5kZW5jeUdyYXBoKFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlKTsKLSAgICB+VERlcGVuZGVu
Y3lHcmFwaCgpOwotICAgIFRHcmFwaE5vZGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gbUFsbE5vZGVzLmJlZ2luKCk7IH0KLSAgICBUR3JhcGhOb2RlVmVjdG9y
Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtQWxsTm9kZXMuZW5kKCk7IH0K
LQotICAgIFRHcmFwaFN5bWJvbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgYmVnaW5TYW1wbGVyU3lt
Ym9scygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbVNhbXBsZXJTeW1ib2xzLmJlZ2lu
KCk7Ci0gICAgfQotCi0gICAgVEdyYXBoU3ltYm9sVmVjdG9yOjpjb25zdF9pdGVyYXRvciBlbmRT
YW1wbGVyU3ltYm9scygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbVNhbXBsZXJTeW1i
b2xzLmVuZCgpOwotICAgIH0KLQotICAgIFRGdW5jdGlvbkNhbGxWZWN0b3I6OmNvbnN0X2l0ZXJh
dG9yIGJlZ2luVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBtVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzLmJlZ2luKCk7Ci0gICAgfQotCi0gICAg
VEZ1bmN0aW9uQ2FsbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kVXNlckRlZmluZWRGdW5jdGlv
bkNhbGxzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtVXNlckRlZmluZWRGdW5jdGlv
bkNhbGxzLmVuZCgpOwotICAgIH0KLQotICAgIFRHcmFwaEFyZ3VtZW50KiBjcmVhdGVBcmd1bWVu
dChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwsIGludCBhcmd1bWVudE51bWJl
cik7Ci0gICAgVEdyYXBoRnVuY3Rpb25DYWxsKiBjcmVhdGVGdW5jdGlvbkNhbGwoVEludGVybUFn
Z3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKTsKLSAgICBUR3JhcGhTeW1ib2wqIGdldE9yQ3Jl
YXRlU3ltYm9sKFRJbnRlcm1TeW1ib2wqIGludGVybVN5bWJvbCk7Ci0gICAgVEdyYXBoU2VsZWN0
aW9uKiBjcmVhdGVTZWxlY3Rpb24oVEludGVybVNlbGVjdGlvbiogaW50ZXJtU2VsZWN0aW9uKTsK
LSAgICBUR3JhcGhMb29wKiBjcmVhdGVMb29wKFRJbnRlcm1Mb29wKiBpbnRlcm1Mb29wKTsKLSAg
ICBUR3JhcGhMb2dpY2FsT3AqIGNyZWF0ZUxvZ2ljYWxPcChUSW50ZXJtQmluYXJ5KiBpbnRlcm1M
b2dpY2FsT3ApOwotcHJpdmF0ZToKLSAgICB0eXBlZGVmIFRNYXA8aW50LCBUR3JhcGhTeW1ib2wq
PiBUU3ltYm9sSWRNYXA7Ci0gICAgdHlwZWRlZiBzdGQ6OnBhaXI8aW50LCBUR3JhcGhTeW1ib2wq
PiBUU3ltYm9sSWRQYWlyOwotCi0gICAgVEdyYXBoTm9kZVZlY3RvciBtQWxsTm9kZXM7Ci0gICAg
VEdyYXBoU3ltYm9sVmVjdG9yIG1TYW1wbGVyU3ltYm9sczsKLSAgICBURnVuY3Rpb25DYWxsVmVj
dG9yIG1Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHM7Ci0gICAgVFN5bWJvbElkTWFwIG1TeW1ib2xJ
ZE1hcDsKLX07Ci0KLS8vCi0vLyBGb3IgdHJhdmVyc2luZyB0aGUgZGVwZW5kZW5jeSBncmFwaC4g
VXNlcnMgc2hvdWxkIGRlcml2ZSBmcm9tIHRoaXMsCi0vLyBwdXQgdGhlaXIgdHJhdmVyc2FsIHNw
ZWNpZmljIGRhdGEgaW4gaXQsIGFuZCB0aGVuIHBhc3MgaXQgdG8gYQotLy8gdHJhdmVyc2UgbWV0
aG9kLgotLy8KLS8vIFdoZW4gdXNpbmcgdGhpcywganVzdCBmaWxsIGluIHRoZSBtZXRob2RzIGZv
ciBub2RlcyB5b3Ugd2FudCB2aXNpdGVkLgotLy8KLWNsYXNzIFREZXBlbmRlbmN5R3JhcGhUcmF2
ZXJzZXIgewotcHVibGljOgotICAgIFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIoKSA6IG1EZXB0
aCgwKSB7fQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRHcmFwaFN5bWJvbCogc3lt
Ym9sKSB7fTsKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRBcmd1bWVudChUR3JhcGhBcmd1bWVudCog
c2VsZWN0aW9uKSB7fTsKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRGdW5jdGlvbkNhbGwoVEdyYXBo
RnVuY3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwpIHt9OwotICAgIHZpcnR1YWwgdm9pZCB2aXNpdFNl
bGVjdGlvbihUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbikge307Ci0gICAgdmlydHVhbCB2b2lk
IHZpc2l0TG9vcChUR3JhcGhMb29wKiBsb29wKSB7fTsKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRM
b2dpY2FsT3AoVEdyYXBoTG9naWNhbE9wKiBsb2dpY2FsT3ApIHt9OwotCi0gICAgaW50IGdldERl
cHRoKCkgY29uc3QgeyByZXR1cm4gbURlcHRoOyB9Ci0gICAgdm9pZCBpbmNyZW1lbnREZXB0aCgp
IHsgKyttRGVwdGg7IH0KLSAgICB2b2lkIGRlY3JlbWVudERlcHRoKCkgeyAtLW1EZXB0aDsgfQot
Ci0gICAgdm9pZCBjbGVhclZpc2l0ZWQoKSB7IG1WaXNpdGVkLmNsZWFyKCk7IH0KLSAgICB2b2lk
IG1hcmtWaXNpdGVkKFRHcmFwaE5vZGUqIG5vZGUpIHsgbVZpc2l0ZWQuaW5zZXJ0KG5vZGUpOyB9
Ci0gICAgYm9vbCBpc1Zpc2l0ZWQoVEdyYXBoTm9kZSogbm9kZSkgY29uc3QgeyByZXR1cm4gbVZp
c2l0ZWQuZmluZChub2RlKSAhPSBtVmlzaXRlZC5lbmQoKTsgfQotcHJpdmF0ZToKLSAgICBpbnQg
bURlcHRoOwotICAgIFRHcmFwaE5vZGVTZXQgbVZpc2l0ZWQ7Ci19OwotCi0jZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBl
bmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDI2ZTZkNTdhNGZmODI5Mzc4NGRjZWE1ZmRlZTIwNzFjYjEzMDZiOC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRl
ci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNp
bmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmgiCi0KLXZv
aWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OmJ1aWxkKFRJbnRlcm1Ob2RlKiBub2RlLCBURGVw
ZW5kZW5jeUdyYXBoKiBncmFwaCkKLXsKLSAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlciBidWls
ZGVyKGdyYXBoKTsKLSAgICBidWlsZGVyLmJ1aWxkKG5vZGUpOwotfQotCi1ib29sIFREZXBlbmRl
bmN5R3JhcGhCdWlsZGVyOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3Jl
Z2F0ZSogaW50ZXJtQWdncmVnYXRlKQotewotICAgIHN3aXRjaCAoaW50ZXJtQWdncmVnYXRlLT5n
ZXRPcCgpKSB7Ci0gICAgICAgIGNhc2UgRU9wRnVuY3Rpb246IHZpc2l0RnVuY3Rpb25EZWZpbml0
aW9uKGludGVybUFnZ3JlZ2F0ZSk7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEZ1bmN0aW9uQ2Fs
bDogdmlzaXRGdW5jdGlvbkNhbGwoaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7Ci0gICAgICAgIGRl
ZmF1bHQ6IHZpc2l0QWdncmVnYXRlQ2hpbGRyZW4oaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFREZXBlbmRlbmN5R3JhcGhCdWls
ZGVyOjp2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbihUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dy
ZWdhdGUpCi17Ci0gICAgLy8gQ3VycmVudGx5LCB3ZSBkbyBub3Qgc3VwcG9ydCB1c2VyIGRlZmlu
ZWQgZnVuY3Rpb25zLgotICAgIGlmIChpbnRlcm1BZ2dyZWdhdGUtPmdldE5hbWUoKSAhPSAibWFp
bigiKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2aXNpdEFnZ3JlZ2F0ZUNoaWxkcmVuKGludGVy
bUFnZ3JlZ2F0ZSk7Ci19Ci0KLS8vIFRha2VzIGFuIGV4cHJlc3Npb24gbGlrZSAiZih4KSIgYW5k
IGNyZWF0ZXMgYSBkZXBlbmRlbmN5IGdyYXBoIGxpa2UKLS8vICJ4IC0+IGFyZ3VtZW50IDAgLT4g
ZnVuY3Rpb24gY2FsbCIuCi12b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEZ1bmN0
aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpCi17Ci0gICAgVEdy
YXBoRnVuY3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwgPSBtR3JhcGgtPmNyZWF0ZUZ1bmN0aW9uQ2Fs
bChpbnRlcm1GdW5jdGlvbkNhbGwpOwotCi0gICAgLy8gUnVuIHRocm91Z2ggdGhlIGZ1bmN0aW9u
IGNhbGwgYXJndW1lbnRzLgotICAgIGludCBhcmd1bWVudE51bWJlciA9IDA7Ci0gICAgVEludGVy
bVNlcXVlbmNlJiBpbnRlcm1Bcmd1bWVudHMgPSBpbnRlcm1GdW5jdGlvbkNhbGwtPmdldFNlcXVl
bmNlKCk7Ci0gICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBp
bnRlcm1Bcmd1bWVudHMuYmVnaW4oKTsKLSAgICAgICAgIGl0ZXIgIT0gaW50ZXJtQXJndW1lbnRz
LmVuZCgpOwotICAgICAgICAgKytpdGVyLCArK2FyZ3VtZW50TnVtYmVyKQotICAgIHsKLSAgICAg
ICAgVE5vZGVTZXRNYWludGFpbmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMpOwotCi0gICAgICAg
IFRJbnRlcm1Ob2RlKiBpbnRlcm1Bcmd1bWVudCA9ICppdGVyOwotICAgICAgICBpbnRlcm1Bcmd1
bWVudC0+dHJhdmVyc2UodGhpcyk7Ci0KLSAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBhcmd1
bWVudE5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKSB7Ci0gICAgICAgICAgICBUR3JhcGhB
cmd1bWVudCogYXJndW1lbnQgPSBtR3JhcGgtPmNyZWF0ZUFyZ3VtZW50KGludGVybUZ1bmN0aW9u
Q2FsbCwgYXJndW1lbnROdW1iZXIpOwotICAgICAgICAgICAgY29ubmVjdE11bHRpcGxlTm9kZXNU
b1NpbmdsZU5vZGUoYXJndW1lbnROb2RlcywgYXJndW1lbnQpOwotICAgICAgICAgICAgYXJndW1l
bnQtPmFkZERlcGVuZGVudE5vZGUoZnVuY3Rpb25DYWxsKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIC8vIFB1c2ggdGhlIGxlZnRtb3N0IHN5bWJvbCBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwgaW50
byB0aGUgY3VycmVudCBzZXQgb2YgZGVwZW5kZW50IHN5bWJvbHMgdG8KLSAgICAvLyByZXByZXNl
bnQgdGhlIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwuCi0gICAgLy8gVGh1cywgYW4gZXhw
cmVzc2lvbiBsaWtlICJ5ID0gZih4KSIgd2lsbCB5aWVsZCBhIGRlcGVuZGVuY3kgZ3JhcGggbGlr
ZQotICAgIC8vICJ4IC0+IGFyZ3VtZW50IDAgLT4gZnVuY3Rpb24gY2FsbCAtPiB5Ii4KLSAgICAv
LyBUaGlzIGxpbmUgZXNzZW50aWFsbHkgcGFzc2VzIHRoZSBmdW5jdGlvbiBjYWxsIG5vZGUgYmFj
ayB1cCB0byBhbiBlYXJsaWVyIHZpc2l0QXNzaWdubWVudAotICAgIC8vIGNhbGwsIHdoaWNoIHdp
bGwgY3JlYXRlIHRoZSBjb25uZWN0aW9uICJmdW5jdGlvbiBjYWxsIC0+IHkiLgotICAgIG1Ob2Rl
U2V0cy5pbnNlcnRJbnRvVG9wU2V0KGZ1bmN0aW9uQ2FsbCk7Ci19Ci0KLXZvaWQgVERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdncmVnYXRlQ2hpbGRyZW4oVEludGVybUFnZ3JlZ2F0ZSog
aW50ZXJtQWdncmVnYXRlKQotewotICAgIFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBpbnRl
cm1BZ2dyZWdhdGUtPmdldFNlcXVlbmNlKCk7Ci0gICAgZm9yKFRJbnRlcm1TZXF1ZW5jZTo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IHNlcXVlbmNlLmJlZ2luKCk7IGl0ZXIgIT0gc2VxdWVuY2UuZW5k
KCk7ICsraXRlcikKLSAgICB7Ci0gICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1DaGlsZCA9ICpp
dGVyOwotICAgICAgICBpbnRlcm1DaGlsZC0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotfQotCi12
b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBp
bnRlcm1TeW1ib2wpCi17Ci0gICAgLy8gUHVzaCB0aGlzIHN5bWJvbCBpbnRvIHRoZSBzZXQgb2Yg
ZGVwZW5kZW50IHN5bWJvbHMgZm9yIHRoZSBjdXJyZW50IGFzc2lnbm1lbnQgb3IgY29uZGl0aW9u
Ci0gICAgLy8gdGhhdCB3ZSBhcmUgdHJhdmVyc2luZy4KLSAgICBUR3JhcGhTeW1ib2wqIHN5bWJv
bCA9IG1HcmFwaC0+Z2V0T3JDcmVhdGVTeW1ib2woaW50ZXJtU3ltYm9sKTsKLSAgICBtTm9kZVNl
dHMuaW5zZXJ0SW50b1RvcFNldChzeW1ib2wpOwotCi0gICAgLy8gSWYgdGhpcyBzeW1ib2wgaXMg
dGhlIGN1cnJlbnQgbGVmdG1vc3Qgc3ltYm9sIHVuZGVyIGFuIGFzc2lnbm1lbnQsIHJlcGxhY2Ug
dGhlIHByZXZpb3VzCi0gICAgLy8gbGVmdG1vc3Qgc3ltYm9sIHdpdGggdGhpcyBzeW1ib2wuCi0g
ICAgaWYgKCFtTGVmdG1vc3RTeW1ib2xzLmVtcHR5KCkgJiYgbUxlZnRtb3N0U3ltYm9scy50b3Ao
KSAhPSAmbVJpZ2h0U3VidHJlZSkgewotICAgICAgICBtTGVmdG1vc3RTeW1ib2xzLnBvcCgpOwot
ICAgICAgICBtTGVmdG1vc3RTeW1ib2xzLnB1c2goc3ltYm9sKTsKLSAgICB9Ci19Ci0KLWJvb2wg
VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJt
QmluYXJ5KiBpbnRlcm1CaW5hcnkpCi17Ci0gICAgVE9wZXJhdG9yIG9wID0gaW50ZXJtQmluYXJ5
LT5nZXRPcCgpOwotICAgIGlmIChvcCA9PSBFT3BJbml0aWFsaXplIHx8IGludGVybUJpbmFyeS0+
aXNBc3NpZ25tZW50KCkpCi0gICAgICAgIHZpc2l0QXNzaWdubWVudChpbnRlcm1CaW5hcnkpOwot
ICAgIGVsc2UgaWYgKG9wID09IEVPcExvZ2ljYWxBbmQgfHwgb3AgPT0gRU9wTG9naWNhbE9yKQot
ICAgICAgICB2aXNpdExvZ2ljYWxPcChpbnRlcm1CaW5hcnkpOwotICAgIGVsc2UKLSAgICAgICAg
dmlzaXRCaW5hcnlDaGlsZHJlbihpbnRlcm1CaW5hcnkpOwotCi0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi12b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEFzc2lnbm1lbnQoVEludGVy
bUJpbmFyeSogaW50ZXJtQXNzaWdubWVudCkKLXsKLSAgICBUSW50ZXJtVHlwZWQqIGludGVybUxl
ZnQgPSBpbnRlcm1Bc3NpZ25tZW50LT5nZXRMZWZ0KCk7Ci0gICAgaWYgKCFpbnRlcm1MZWZ0KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBUR3JhcGhTeW1ib2wqIGxlZnRtb3N0U3ltYm9sID0gTlVM
TDsKLQotICAgIHsKLSAgICAgICAgVE5vZGVTZXRNYWludGFpbmVyIG5vZGVTZXRNYWludGFpbmVy
KHRoaXMpOwotCi0gICAgICAgIHsKLSAgICAgICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50YWlu
ZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIG1MZWZ0U3VidHJlZSk7Ci0gICAgICAg
ICAgICBpbnRlcm1MZWZ0LT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgIGxlZnRtb3N0U3lt
Ym9sID0gbUxlZnRtb3N0U3ltYm9scy50b3AoKTsKLQotICAgICAgICAgICAgLy8gQWZ0ZXIgdHJh
dmVyc2luZyB0aGUgbGVmdCBzdWJ0cmVlIG9mIHRoaXMgYXNzaWdubWVudCwgd2Ugc2hvdWxkIGhh
dmUgZm91bmQgYSByZWFsCi0gICAgICAgICAgICAvLyBsZWZ0bW9zdCBzeW1ib2wsIGFuZCB0aGUg
bGVmdG1vc3Qgc3ltYm9sIHNob3VsZCBub3QgYmUgYSBwbGFjZWhvbGRlci4KLSAgICAgICAgICAg
IEFTU0VSVChsZWZ0bW9zdFN5bWJvbCAhPSAmbUxlZnRTdWJ0cmVlKTsKLSAgICAgICAgICAgIEFT
U0VSVChsZWZ0bW9zdFN5bWJvbCAhPSAmbVJpZ2h0U3VidHJlZSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1SaWdodCA9IGludGVybUFzc2lnbm1lbnQtPmdl
dFJpZ2h0KCkpIHsKLSAgICAgICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIgbGVmdG1v
c3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIG1SaWdodFN1YnRyZWUpOwotICAgICAgICAgICAgaW50
ZXJtUmlnaHQtPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFRQYXJl
bnROb2RlU2V0KiBhc3NpZ25tZW50Tm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0KCkpCi0gICAg
ICAgICAgICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShhc3NpZ25tZW50Tm9kZXMs
IGxlZnRtb3N0U3ltYm9sKTsKLSAgICB9Ci0KLSAgICAvLyBQdXNoIHRoZSBsZWZ0bW9zdCBzeW1i
b2wgb2YgdGhpcyBhc3NpZ25tZW50IGludG8gdGhlIGN1cnJlbnQgc2V0IG9mIGRlcGVuZGVudCBz
eW1ib2xzIHRvCi0gICAgLy8gcmVwcmVzZW50IHRoZSByZXN1bHQgb2YgdGhpcyBhc3NpZ25tZW50
LgotICAgIC8vIEFuIGV4cHJlc3Npb24gbGlrZSAiYSA9IChiID0gYykiIHdpbGwgeWllbGQgYSBk
ZXBlbmRlbmN5IGdyYXBoIGxpa2UgImMgLT4gYiAtPiBhIi4KLSAgICAvLyBUaGlzIGxpbmUgZXNz
ZW50aWFsbHkgcGFzc2VzIHRoZSBsZWZ0bW9zdCBzeW1ib2wgb2YgdGhlIG5lc3RlZCBhc3NpZ25t
ZW50ICgiYiIgaW4gdGhpcwotICAgIC8vIGV4YW1wbGUpIGJhY2sgdXAgdG8gdGhlIGVhcmxpZXIg
dmlzaXRBc3NpZ25tZW50IGNhbGwgZm9yIHRoZSBvdXRlciBhc3NpZ25tZW50LCB3aGljaCB3aWxs
Ci0gICAgLy8gY3JlYXRlIHRoZSBjb25uZWN0aW9uICJiIC0+IGEiLgotICAgIG1Ob2RlU2V0cy5p
bnNlcnRJbnRvVG9wU2V0KGxlZnRtb3N0U3ltYm9sKTsKLX0KLQotdm9pZCBURGVwZW5kZW5jeUdy
YXBoQnVpbGRlcjo6dmlzaXRMb2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJtTG9naWNhbE9w
KQotewotICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybUxlZnQgPSBpbnRlcm1Mb2dpY2FsT3At
PmdldExlZnQoKSkgewotICAgICAgICBUTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lciBub2Rl
U2V0TWFpbnRhaW5lcih0aGlzKTsKLQotICAgICAgICBpbnRlcm1MZWZ0LT50cmF2ZXJzZSh0aGlz
KTsKLSAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBsZWZ0Tm9kZXMgPSBtTm9kZVNldHMuZ2V0
VG9wU2V0KCkpIHsKLSAgICAgICAgICAgIFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wID0gbUdy
YXBoLT5jcmVhdGVMb2dpY2FsT3AoaW50ZXJtTG9naWNhbE9wKTsKLSAgICAgICAgICAgIGNvbm5l
Y3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGxlZnROb2RlcywgbG9naWNhbE9wKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybVJpZ2h0ID0gaW50ZXJt
TG9naWNhbE9wLT5nZXRSaWdodCgpKSB7Ci0gICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50YWlu
ZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIG1SaWdodFN1YnRyZWUpOwotICAgICAg
ICBpbnRlcm1SaWdodC0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotfQotCi12b2lkIFREZXBlbmRl
bmN5R3JhcGhCdWlsZGVyOjp2aXNpdEJpbmFyeUNoaWxkcmVuKFRJbnRlcm1CaW5hcnkqIGludGVy
bUJpbmFyeSkKLXsKLSAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1MZWZ0ID0gaW50ZXJtQmlu
YXJ5LT5nZXRMZWZ0KCkpCi0gICAgICAgIGludGVybUxlZnQtPnRyYXZlcnNlKHRoaXMpOwotCi0g
ICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtUmlnaHQgPSBpbnRlcm1CaW5hcnktPmdldFJpZ2h0
KCkpIHsKLSAgICAgICAgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lciBsZWZ0bW9zdFN5bWJvbE1h
aW50YWluZXIodGhpcywgbVJpZ2h0U3VidHJlZSk7Ci0gICAgICAgIGludGVybVJpZ2h0LT50cmF2
ZXJzZSh0aGlzKTsKLSAgICB9Ci19Ci0KLWJvb2wgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZp
c2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBpbnRlcm1TZWxlY3Rp
b24pCi17Ci0gICAgaWYgKFRJbnRlcm1Ob2RlKiBpbnRlcm1Db25kaXRpb24gPSBpbnRlcm1TZWxl
Y3Rpb24tPmdldENvbmRpdGlvbigpKSB7Ci0gICAgICAgIFROb2RlU2V0TWFpbnRhaW5lciBub2Rl
U2V0TWFpbnRhaW5lcih0aGlzKTsKLQotICAgICAgICBpbnRlcm1Db25kaXRpb24tPnRyYXZlcnNl
KHRoaXMpOwotICAgICAgICBpZiAoVFBhcmVudE5vZGVTZXQqIGNvbmRpdGlvbk5vZGVzID0gbU5v
ZGVTZXRzLmdldFRvcFNldCgpKSB7Ci0gICAgICAgICAgICBUR3JhcGhTZWxlY3Rpb24qIHNlbGVj
dGlvbiA9IG1HcmFwaC0+Y3JlYXRlU2VsZWN0aW9uKGludGVybVNlbGVjdGlvbik7Ci0gICAgICAg
ICAgICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShjb25kaXRpb25Ob2Rlcywgc2Vs
ZWN0aW9uKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChUSW50ZXJtTm9kZSogaW50ZXJt
VHJ1ZUJsb2NrID0gaW50ZXJtU2VsZWN0aW9uLT5nZXRUcnVlQmxvY2soKSkKLSAgICAgICAgaW50
ZXJtVHJ1ZUJsb2NrLT50cmF2ZXJzZSh0aGlzKTsKLQotICAgIGlmIChUSW50ZXJtTm9kZSogaW50
ZXJtRmFsc2VCbG9jayA9IGludGVybVNlbGVjdGlvbi0+Z2V0RmFsc2VCbG9jaygpKQotICAgICAg
ICBpbnRlcm1GYWxzZUJsb2NrLT50cmF2ZXJzZSh0aGlzKTsKLQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotYm9vbCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRMb29wKFZpc2l0IHZpc2l0
LCBUSW50ZXJtTG9vcCogaW50ZXJtTG9vcCkKLXsKLSAgICBpZiAoVEludGVybVR5cGVkKiBpbnRl
cm1Db25kaXRpb24gPSBpbnRlcm1Mb29wLT5nZXRDb25kaXRpb24oKSkgewotICAgICAgICBUTm9k
ZVNldE1haW50YWluZXIgbm9kZVNldE1haW50YWluZXIodGhpcyk7Ci0KLSAgICAgICAgaW50ZXJt
Q29uZGl0aW9uLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBj
b25kaXRpb25Ob2RlcyA9IG1Ob2RlU2V0cy5nZXRUb3BTZXQoKSkgewotICAgICAgICAgICAgVEdy
YXBoTG9vcCogbG9vcCA9IG1HcmFwaC0+Y3JlYXRlTG9vcChpbnRlcm1Mb29wKTsKLSAgICAgICAg
ICAgIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGNvbmRpdGlvbk5vZGVzLCBsb29w
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChUSW50ZXJtTm9kZSogaW50ZXJtQm9keSA9
IGludGVybUxvb3AtPmdldEJvZHkoKSkKLSAgICAgICAgaW50ZXJtQm9keS0+dHJhdmVyc2UodGhp
cyk7Ci0KLSAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1FeHByZXNzaW9uID0gaW50ZXJtTG9v
cC0+Z2V0RXhwcmVzc2lvbigpKQotICAgICAgICBpbnRlcm1FeHByZXNzaW9uLT50cmF2ZXJzZSh0
aGlzKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotCi12b2lkIFREZXBlbmRlbmN5R3JhcGhC
dWlsZGVyOjpjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShUUGFyZW50Tm9kZVNldCog
bm9kZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUR3JhcGhOb2RlKiBub2RlKSBjb25zdAotewotICAgIGZvciAoVFBhcmVu
dE5vZGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBub2Rlcy0+YmVnaW4oKTsgaXRlciAhPSBu
b2Rlcy0+ZW5kKCk7ICsraXRlcikKLSAgICB7Ci0gICAgICAgIFRHcmFwaFBhcmVudE5vZGUqIGN1
cnJlbnROb2RlID0gKml0ZXI7Ci0gICAgICAgIGN1cnJlbnROb2RlLT5hZGREZXBlbmRlbnROb2Rl
KG5vZGUpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRl
ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWYyMzJjYjIxZTkzNmQ5MjdhOTY3
MjVkMmYwZDE2YzlkYzRlMzljLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9E
ZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxODEgKzAsMCBAQAot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQ
SF9CVUlMREVSX0gKLSNkZWZpbmUgQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9C
VUlMREVSX0gKLQotI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5o
IgotCi0vLwotLy8gQ3JlYXRlcyBhIGRlcGVuZGVuY3kgZ3JhcGggb2Ygc3ltYm9scywgZnVuY3Rp
b24gY2FsbHMsIGNvbmRpdGlvbnMgZXRjLiBieSB0cmF2ZXJzaW5nIGEKLS8vIGludGVybWVkaWF0
ZSB0cmVlLgotLy8KLWNsYXNzIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyIDogcHVibGljIFRJbnRl
cm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGJ1aWxkKFRJbnRlcm1Ob2Rl
KiBub2RlLCBURGVwZW5kZW5jeUdyYXBoKiBncmFwaCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlz
aXRTeW1ib2woVEludGVybVN5bWJvbCopOwotICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShW
aXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSopOwotICAgIHZpcnR1YWwgYm9vbCB2aXNpdFNlbGVj
dGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiopOwotICAgIHZpcnR1YWwgYm9vbCB2
aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOwotICAgIHZpcnR1
YWwgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKik7Ci0KLXByaXZhdGU6
Ci0gICAgdHlwZWRlZiBzdGQ6OnN0YWNrPFRHcmFwaFN5bWJvbCo+IFRTeW1ib2xTdGFjazsKLSAg
ICB0eXBlZGVmIHN0ZDo6c2V0PFRHcmFwaFBhcmVudE5vZGUqPiBUUGFyZW50Tm9kZVNldDsKLQot
ICAgIC8vCi0gICAgLy8gRm9yIGNvbGxlY3RpbmcgdGhlIGRlcGVuZGVudCBub2RlcyBvZiBhc3Np
Z25tZW50cywgY29uZGl0aW9ucywgZXRjLgotICAgIC8vIHdoaWxlIHRyYXZlcnNpbmcgdGhlIGlu
dGVybWVkaWF0ZSB0cmVlLgotICAgIC8vCi0gICAgLy8gVGhpcyBkYXRhIHN0cnVjdHVyZSBpcyBz
dGFjayBvZiBzZXRzLiBFYWNoIHNldCBjb250YWlucyBkZXBlbmRlbmN5IGdyYXBoIHBhcmVudCBu
b2Rlcy4KLSAgICAvLwotICAgIGNsYXNzIFROb2RlU2V0U3RhY2sgewotICAgIHB1YmxpYzoKLSAg
ICAgICAgVE5vZGVTZXRTdGFjaygpIHt9OwotICAgICAgICB+VE5vZGVTZXRTdGFjaygpIHsgY2xl
YXIoKTsgfQotCi0gICAgICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFmdGVyIGEg
cHVzaFNldC4KLSAgICAgICAgLy8gUmV0dXJucyBOVUxMIGlmIHRoZSB0b3Agc2V0IGlzIGVtcHR5
LgotICAgICAgICBUUGFyZW50Tm9kZVNldCogZ2V0VG9wU2V0KCkgY29uc3QKLSAgICAgICAgewot
ICAgICAgICAgICAgQVNTRVJUKCFub2RlU2V0cy5lbXB0eSgpKTsKLSAgICAgICAgICAgIFRQYXJl
bnROb2RlU2V0KiB0b3BTZXQgPSBub2RlU2V0cy50b3AoKTsKLSAgICAgICAgICAgIHJldHVybiAh
dG9wU2V0LT5lbXB0eSgpID8gdG9wU2V0IDogTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIHZv
aWQgcHVzaFNldCgpIHsgbm9kZVNldHMucHVzaChuZXcgVFBhcmVudE5vZGVTZXQoKSk7IH0KLSAg
ICAgICAgdm9pZCBwb3BTZXQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIW5vZGVT
ZXRzLmVtcHR5KCkpOwotICAgICAgICAgICAgZGVsZXRlIG5vZGVTZXRzLnRvcCgpOwotICAgICAg
ICAgICAgbm9kZVNldHMucG9wKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBQb3BzIHRoZSB0
b3Agc2V0IGFuZCBhZGRzIGl0cyBjb250ZW50cyB0byB0aGUgbmV3IHRvcCBzZXQuCi0gICAgICAg
IC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFmdGVyIGEgcHVzaFNldC4KLSAgICAgICAg
Ly8gSWYgdGhlcmUgaXMgbm8gc2V0IGJlbG93IHRoZSB0b3Agc2V0LCB0aGUgdG9wIHNldCBpcyBq
dXN0IGRlbGV0ZWQuCi0gICAgICAgIHZvaWQgcG9wU2V0SW50b05leHQoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBBU1NFUlQoIW5vZGVTZXRzLmVtcHR5KCkpOwotICAgICAgICAgICAgVFBhcmVu
dE5vZGVTZXQqIG9sZFRvcFNldCA9IG5vZGVTZXRzLnRvcCgpOwotICAgICAgICAgICAgbm9kZVNl
dHMucG9wKCk7Ci0KLSAgICAgICAgICAgIGlmICghbm9kZVNldHMuZW1wdHkoKSkgewotICAgICAg
ICAgICAgICAgIFRQYXJlbnROb2RlU2V0KiBuZXdUb3BTZXQgPSBub2RlU2V0cy50b3AoKTsKLSAg
ICAgICAgICAgICAgICBuZXdUb3BTZXQtPmluc2VydChvbGRUb3BTZXQtPmJlZ2luKCksIG9sZFRv
cFNldC0+ZW5kKCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkZWxldGUgb2xkVG9w
U2V0OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRG9lcyBub3RoaW5nIGlmIHRoZXJlIGlzIG5v
IHRvcCBzZXQuCi0gICAgICAgIC8vIFRoaXMgY2FuIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGlzIG5v
IHRvcCBzZXQgaWYgd2UgYXJlIHZpc2l0aW5nCi0gICAgICAgIC8vIHN5bWJvbHMgdGhhdCBhcmUg
bm90IHVuZGVyIGFuIGFzc2lnbm1lbnQgb3IgY29uZGl0aW9uLgotICAgICAgICAvLyBXZSBkb24n
dCBuZWVkIHRvIHRyYWNrIHRob3NlIHN5bWJvbHMuCi0gICAgICAgIHZvaWQgaW5zZXJ0SW50b1Rv
cFNldChUR3JhcGhQYXJlbnROb2RlKiBub2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
bm9kZVNldHMuZW1wdHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAg
IG5vZGVTZXRzLnRvcCgpLT5pbnNlcnQobm9kZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lk
IGNsZWFyKCkKLSAgICAgICAgewotICAgICAgICAgICAgd2hpbGUgKCFub2RlU2V0cy5lbXB0eSgp
KQotICAgICAgICAgICAgICAgIHBvcFNldCgpOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgot
ICAgICAgICB0eXBlZGVmIHN0ZDo6c3RhY2s8VFBhcmVudE5vZGVTZXQqPiBUUGFyZW50Tm9kZVNl
dFN0YWNrOwotCi0gICAgICAgIFRQYXJlbnROb2RlU2V0U3RhY2sgbm9kZVNldHM7Ci0gICAgfTsK
LQotICAgIC8vCi0gICAgLy8gQW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBwdXNoZXMgYSBuZXcg
bm9kZSBzZXQgd2hlbiBpbnN0YW50aWF0ZWQuCi0gICAgLy8gV2hlbiB0aGUgaW5zdGFuY2UgZ29l
cyBvdXQgb2Ygc2NvcGUsIGl0IGFuZCBwb3BzIHRoZSBub2RlIHNldC4KLSAgICAvLwotICAgIGNs
YXNzIFROb2RlU2V0TWFpbnRhaW5lciB7Ci0gICAgcHVibGljOgotICAgICAgICBUTm9kZVNldE1h
aW50YWluZXIoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIqIGZhY3RvcnkpCi0gICAgICAgICAgICA6
IHNldHMoZmFjdG9yeS0+bU5vZGVTZXRzKSB7IHNldHMucHVzaFNldCgpOyB9Ci0gICAgICAgIH5U
Tm9kZVNldE1haW50YWluZXIoKSB7IHNldHMucG9wU2V0KCk7IH0KLSAgICBwcm90ZWN0ZWQ6Ci0g
ICAgICAgIFROb2RlU2V0U3RhY2smIHNldHM7Ci0gICAgfTsKLQotICAgIC8vCi0gICAgLy8gQW4g
aW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBwdXNoZXMgYSBuZXcgbm9kZSBzZXQgd2hlbiBpbnN0YW50
aWF0ZWQuCi0gICAgLy8gV2hlbiB0aGUgaW5zdGFuY2UgZ29lcyBvdXQgb2Ygc2NvcGUsIGl0IGFu
ZCBwb3BzIHRoZSB0b3Agbm9kZSBzZXQgYW5kIGFkZHMgaXRzIGNvbnRlbnRzIHRvCi0gICAgLy8g
dGhlIG5ldyB0b3Agbm9kZSBzZXQuCi0gICAgLy8KLSAgICBjbGFzcyBUTm9kZVNldFByb3BhZ2F0
aW5nTWFpbnRhaW5lciB7Ci0gICAgcHVibGljOgotICAgICAgICBUTm9kZVNldFByb3BhZ2F0aW5n
TWFpbnRhaW5lcihURGVwZW5kZW5jeUdyYXBoQnVpbGRlciogZmFjdG9yeSkKLSAgICAgICAgICAg
IDogc2V0cyhmYWN0b3J5LT5tTm9kZVNldHMpIHsgc2V0cy5wdXNoU2V0KCk7IH0KLSAgICAgICAg
flROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyKCkgeyBzZXRzLnBvcFNldEludG9OZXh0KCk7
IH0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIFROb2RlU2V0U3RhY2smIHNldHM7Ci0gICAgfTsK
LQotICAgIC8vCi0gICAgLy8gQW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBrZWVwcyB0cmFjayBv
ZiB0aGUgbGVmdG1vc3Qgc3ltYm9sIHdoaWxlIHdlJ3JlIGV4cGxvcmluZyBhbgotICAgIC8vIGFz
c2lnbm1lbnQuCi0gICAgLy8gSXQgd2lsbCBwdXNoIHRoZSBwbGFjZWhvbGRlciBzeW1ib2wga0xl
ZnRTdWJ0cmVlIHdoZW4gaW5zdGFudGlhdGVkIHVuZGVyIGEgbGVmdCBzdWJ0cmVlLAotICAgIC8v
IGFuZCBrUmlnaHRTdWJ0cmVlIHVuZGVyIGEgcmlnaHQgc3VidHJlZS4KLSAgICAvLyBXaGVuIGl0
IGdvZXMgb3V0IG9mIHNjb3BlLCBpdCB3aWxsIHBvcCB0aGUgbGVmdG1vc3Qgc3ltYm9sIGF0IHRo
ZSB0b3Agb2YgdGhlIHNjb3BlLgotICAgIC8vIER1cmluZyB0cmF2ZXJzYWwsIHRoZSBURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlciB3aWxsIHJlcGxhY2Uga0xlZnRTdWJ0cmVlIHdpdGggYSByZWFsIHN5
bWJvbC4KLSAgICAvLyBrUmlnaHRTdWJ0cmVlIHdpbGwgbmV2ZXIgYmUgcmVwbGFjZWQgYnkgYSBy
ZWFsIHN5bWJvbCBiZWNhdXNlIHdlIGFyZSB0cmFja2luZyB0aGUgbGVmdG1vc3QKLSAgICAvLyBz
eW1ib2wuCi0gICAgLy8KLSAgICBjbGFzcyBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIoVERlcGVuZGVuY3lH
cmFwaEJ1aWxkZXIqIGZhY3RvcnksIFRHcmFwaFN5bWJvbCYgc3VidHJlZSkKLSAgICAgICAgICAg
IDogbGVmdG1vc3RTeW1ib2xzKGZhY3RvcnktPm1MZWZ0bW9zdFN5bWJvbHMpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG5lZWRzUGxhY2Vob2xkZXJTeW1ib2wgPSBsZWZ0bW9zdFN5bWJvbHMuZW1w
dHkoKSB8fCBsZWZ0bW9zdFN5bWJvbHMudG9wKCkgIT0gJnN1YnRyZWU7Ci0gICAgICAgICAgICBp
ZiAobmVlZHNQbGFjZWhvbGRlclN5bWJvbCkKLSAgICAgICAgICAgICAgICBsZWZ0bW9zdFN5bWJv
bHMucHVzaCgmc3VidHJlZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB+VExlZnRtb3N0U3ltYm9s
TWFpbnRhaW5lcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChuZWVkc1BsYWNlaG9sZGVy
U3ltYm9sKQotICAgICAgICAgICAgICAgIGxlZnRtb3N0U3ltYm9scy5wb3AoKTsKLSAgICAgICAg
fQotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBUU3ltYm9sU3RhY2smIGxlZnRtb3N0U3ltYm9s
czsKLSAgICAgICAgYm9vbCBuZWVkc1BsYWNlaG9sZGVyU3ltYm9sOwotICAgIH07Ci0KLSAgICBU
RGVwZW5kZW5jeUdyYXBoQnVpbGRlcihURGVwZW5kZW5jeUdyYXBoKiBncmFwaCkKLSAgICAgICAg
OiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSkKLSAgICAgICAgLCBtTGVmdFN1
YnRyZWUoTlVMTCkKLSAgICAgICAgLCBtUmlnaHRTdWJ0cmVlKE5VTEwpCi0gICAgICAgICwgbUdy
YXBoKGdyYXBoKSB7fQotICAgIHZvaWQgYnVpbGQoVEludGVybU5vZGUqIGludGVybU5vZGUpIHsg
aW50ZXJtTm9kZS0+dHJhdmVyc2UodGhpcyk7IH0KLQotICAgIHZvaWQgY29ubmVjdE11bHRpcGxl
Tm9kZXNUb1NpbmdsZU5vZGUoVFBhcmVudE5vZGVTZXQqIG5vZGVzLCBUR3JhcGhOb2RlKiBub2Rl
KSBjb25zdDsKLQotICAgIHZvaWQgdmlzaXRBc3NpZ25tZW50KFRJbnRlcm1CaW5hcnkqKTsKLSAg
ICB2b2lkIHZpc2l0TG9naWNhbE9wKFRJbnRlcm1CaW5hcnkqKTsKLSAgICB2b2lkIHZpc2l0Qmlu
YXJ5Q2hpbGRyZW4oVEludGVybUJpbmFyeSopOwotICAgIHZvaWQgdmlzaXRGdW5jdGlvbkRlZmlu
aXRpb24oVEludGVybUFnZ3JlZ2F0ZSopOwotICAgIHZvaWQgdmlzaXRGdW5jdGlvbkNhbGwoVElu
dGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKTsKLSAgICB2b2lkIHZpc2l0QWdncmVn
YXRlQ2hpbGRyZW4oVEludGVybUFnZ3JlZ2F0ZSopOwotCi0gICAgVEdyYXBoU3ltYm9sIG1MZWZ0
U3VidHJlZTsKLSAgICBUR3JhcGhTeW1ib2wgbVJpZ2h0U3VidHJlZTsKLQotICAgIFREZXBlbmRl
bmN5R3JhcGgqIG1HcmFwaDsKLSAgICBUTm9kZVNldFN0YWNrIG1Ob2RlU2V0czsKLSAgICBUU3lt
Ym9sU3RhY2sgbUxlZnRtb3N0U3ltYm9sczsKLX07Ci0KLSNlbmRpZiAgLy8gQ09NUElMRVJfREVQ
R1JBUEhfREVQRU5ERU5DWV9HUkFQSF9CVUlMREVSX0gKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQu
Y3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVu
ZGVuY3lHcmFwaE91dHB1dC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmYzQ4
OWU3YjZmMzE0NmNjNmFkYjkzMzhjMzE5YWZhNDEzYTY0MmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw2NSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdy
YXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIgotCi12b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRw
dXQ6Om91dHB1dEluZGVudGF0aW9uKCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGdldERl
cHRoKCk7ICsraSkKLSAgICAgICAgbVNpbmsgPDwgIiAgIjsKLX0KLQotdm9pZCBURGVwZW5kZW5j
eUdyYXBoT3V0cHV0Ojp2aXNpdEFyZ3VtZW50KFRHcmFwaEFyZ3VtZW50KiBwYXJhbWV0ZXIpCi17
Ci0gICAgb3V0cHV0SW5kZW50YXRpb24oKTsKLSAgICBtU2luayA8PCAiYXJndW1lbnQgIiA8PCBw
YXJhbWV0ZXItPmdldEFyZ3VtZW50TnVtYmVyKCkgPDwgIiBvZiBjYWxsIHRvICIKLSAgICAgICAg
ICA8PCBwYXJhbWV0ZXItPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpLT5nZXROYW1lKCkgPDwgIlxu
IjsKLX0KLQotdm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdEZ1bmN0aW9uQ2FsbChU
R3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCkKLXsKLSAgICBvdXRwdXRJbmRlbnRhdGlv
bigpOwotICAgIG1TaW5rIDw8ICJmdW5jdGlvbiBjYWxsICIgPDwgIGZ1bmN0aW9uQ2FsbC0+Z2V0
SW50ZXJtRnVuY3Rpb25DYWxsKCktPmdldE5hbWUoKSA8PCAiXG4iOwotfQotCi12b2lkIFREZXBl
bmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0U3ltYm9sKFRHcmFwaFN5bWJvbCogc3ltYm9sKQotewot
ICAgIG91dHB1dEluZGVudGF0aW9uKCk7Ci0gICAgbVNpbmsgPDwgc3ltYm9sLT5nZXRJbnRlcm1T
eW1ib2woKS0+Z2V0U3ltYm9sKCkgPDwgIiAoc3ltYm9sIGlkOiAiCi0gICAgICAgICAgPDwgc3lt
Ym9sLT5nZXRJbnRlcm1TeW1ib2woKS0+Z2V0SWQoKSA8PCAiKVxuIjsKLX0KLQotdm9pZCBURGVw
ZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdFNlbGVjdGlvbihUR3JhcGhTZWxlY3Rpb24qIHNlbGVj
dGlvbikKLXsKLSAgICBvdXRwdXRJbmRlbnRhdGlvbigpOwotICAgIG1TaW5rIDw8ICJzZWxlY3Rp
b25cbiI7Ci19Ci0KLXZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRMb29wKFRHcmFw
aExvb3AqIGxvb3ApCi17Ci0gICAgb3V0cHV0SW5kZW50YXRpb24oKTsKLSAgICBtU2luayA8PCAi
bG9vcCBjb25kaXRpb25cbiI7Ci19Ci0KLXZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlz
aXRMb2dpY2FsT3AoVEdyYXBoTG9naWNhbE9wKiBsb2dpY2FsT3ApCi17Ci0gICAgb3V0cHV0SW5k
ZW50YXRpb24oKTsKLSAgICBtU2luayA8PCAibG9naWNhbCAiIDw8IGxvZ2ljYWxPcC0+Z2V0T3BT
dHJpbmcoKSA8PCAiXG4iOwotfQotCi12b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6Om91dHB1
dEFsbFNwYW5uaW5nVHJlZXMoVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpCi17Ci0gICAgbVNpbmsg
PDwgIlxuIjsKLQotICAgIGZvciAoVEdyYXBoTm9kZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRl
ciA9IGdyYXBoLmJlZ2luKCk7IGl0ZXIgIT0gZ3JhcGguZW5kKCk7ICsraXRlcikKLSAgICB7Ci0g
ICAgICAgIFRHcmFwaE5vZGUqIHN5bWJvbCA9ICppdGVyOwotICAgICAgICBtU2luayA8PCAiLS0t
IERlcGVuZGVuY3kgZ3JhcGggc3Bhbm5pbmcgdHJlZSAtLS1cbiI7Ci0gICAgICAgIGNsZWFyVmlz
aXRlZCgpOwotICAgICAgICBzeW1ib2wtPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBtU2luayA8
PCAiXG4iOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE0NDdkYTk4N2QyZTJlZGFlZDgzOWI2
MTJkNzNiZmI5Zjg2NTJmYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVw
ZW5kZW5jeUdyYXBoT3V0cHV0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX09V
VFBVVF9ICi0jZGVmaW5lIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfT1VUUFVU
X0gKLQotI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgotI2lu
Y2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCi0KLWNsYXNzIFREZXBlbmRlbmN5R3JhcGhPdXRw
dXQgOiBwdWJsaWMgVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciB7Ci1wdWJsaWM6Ci0gICAgVERl
cGVuZGVuY3lHcmFwaE91dHB1dChUSW5mb1NpbmtCYXNlJiBzaW5rKSA6IG1TaW5rKHNpbmspIHt9
Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRHcmFwaFN5bWJvbCogc3ltYm9sKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXRBcmd1bWVudChUR3JhcGhBcmd1bWVudCogcGFyYW1ldGVyKTsK
LSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRGdW5jdGlvbkNhbGwoVEdyYXBoRnVuY3Rpb25DYWxsKiBm
dW5jdGlvbkNhbGwpOwotICAgIHZpcnR1YWwgdm9pZCB2aXNpdFNlbGVjdGlvbihUR3JhcGhTZWxl
Y3Rpb24qIHNlbGVjdGlvbik7Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0TG9vcChUR3JhcGhMb29w
KiBsb29wKTsKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRMb2dpY2FsT3AoVEdyYXBoTG9naWNhbE9w
KiBsb2dpY2FsT3ApOwotCi0gICAgdm9pZCBvdXRwdXRBbGxTcGFubmluZ1RyZWVzKFREZXBlbmRl
bmN5R3JhcGgmIGdyYXBoKTsKLXByaXZhdGU6Ci0gICAgdm9pZCBvdXRwdXRJbmRlbnRhdGlvbigp
OwotCi0gICAgVEluZm9TaW5rQmFzZSYgbVNpbms7Ci19OwotCi0jZW5kaWYgIC8vIENPTVBJTEVS
X0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfT1VUUFVUX0gKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2
ZXJzZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgv
RGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBiMTU4NTc1Y2VjMzUxY2JjNjg5ODU5ODI5MmM0ODg5MmE4MDBmZjg1Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBp
bGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgotCi0vLyBUaGVzZSBtZXRob2RzIGRvIGEg
YnJlYWR0aC1maXJzdCB0cmF2ZXJzYWwgdGhyb3VnaCB0aGUgZ3JhcGggYW5kIG1hcmsgdmlzaXRl
ZCBub2Rlcy4KLQotdm9pZCBUR3JhcGhOb2RlOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJh
dmVyc2VyKiBncmFwaFRyYXZlcnNlcikKLXsKLSAgICBncmFwaFRyYXZlcnNlci0+bWFya1Zpc2l0
ZWQodGhpcyk7Ci19Ci0KLXZvaWQgVEdyYXBoUGFyZW50Tm9kZTo6dHJhdmVyc2UoVERlcGVuZGVu
Y3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCi17Ci0gICAgVEdyYXBoTm9kZTo6dHJh
dmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOwotCi0gICAgZ3JhcGhUcmF2ZXJzZXItPmluY3JlbWVudERl
cHRoKCk7Ci0KLSAgICAvLyBWaXNpdCB0aGUgcGFyZW50IG5vZGUncyBjaGlsZHJlbi4KLSAgICBm
b3IgKFRHcmFwaE5vZGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtRGVwZW5kZW50Tm9kZXMu
YmVnaW4oKTsKLSAgICAgICAgIGl0ZXIgIT0gbURlcGVuZGVudE5vZGVzLmVuZCgpOwotICAgICAg
ICAgKytpdGVyKQotICAgIHsKLSAgICAgICAgVEdyYXBoTm9kZSogbm9kZSA9ICppdGVyOwotICAg
ICAgICBpZiAoIWdyYXBoVHJhdmVyc2VyLT5pc1Zpc2l0ZWQobm9kZSkpCi0gICAgICAgICAgICBu
b2RlLT50cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Ci0gICAgfQotCi0gICAgZ3JhcGhUcmF2ZXJz
ZXItPmRlY3JlbWVudERlcHRoKCk7Ci19Ci0KLXZvaWQgVEdyYXBoQXJndW1lbnQ6OnRyYXZlcnNl
KFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQotewotICAgIGdyYXBo
VHJhdmVyc2VyLT52aXNpdEFyZ3VtZW50KHRoaXMpOwotICAgIFRHcmFwaFBhcmVudE5vZGU6OnRy
YXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKLX0KLQotdm9pZCBUR3JhcGhGdW5jdGlvbkNhbGw6OnRy
YXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQotewotICAg
IGdyYXBoVHJhdmVyc2VyLT52aXNpdEZ1bmN0aW9uQ2FsbCh0aGlzKTsKLSAgICBUR3JhcGhQYXJl
bnROb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Ci19Ci0KLXZvaWQgVEdyYXBoU3ltYm9s
Ojp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKLXsK
LSAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRTeW1ib2wodGhpcyk7Ci0gICAgVEdyYXBoUGFyZW50
Tm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOwotfQotCi12b2lkIFRHcmFwaFNlbGVjdGlv
bjo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCi17
Ci0gICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0U2VsZWN0aW9uKHRoaXMpOwotICAgIFRHcmFwaE5v
ZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKLX0KLQotdm9pZCBUR3JhcGhMb29wOjp0cmF2
ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKLXsKLSAgICBn
cmFwaFRyYXZlcnNlci0+dmlzaXRMb29wKHRoaXMpOwotICAgIFRHcmFwaE5vZGU6OnRyYXZlcnNl
KGdyYXBoVHJhdmVyc2VyKTsKLX0KLQotdm9pZCBUR3JhcGhMb2dpY2FsT3A6OnRyYXZlcnNlKFRE
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQotewotICAgIGdyYXBoVHJh
dmVyc2VyLT52aXNpdExvZ2ljYWxPcCh0aGlzKTsKLSAgICBUR3JhcGhOb2RlOjp0cmF2ZXJzZShn
cmFwaFRyYXZlcnNlcik7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvZ2VuZXJhdGVfcGFyc2VyLnNoIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL2dlbmVyYXRlX3BhcnNlci5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUK
aW5kZXggZTRkODhiMmU4NGNkNGE2ZWJjYmE3ZGQ2NzJjMTdkY2FmN2RkYTY0My4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvZ2VuZXJhdGVfcGFyc2VyLnNoCisrKyAvZGV2L251bGwKQEAgLTEs
MjggKzAsMCBAQAotIyEvYmluL2Jhc2gKLSMgQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMg
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIyBHZW5lcmF0ZXMgR0xTTCBFUyBwYXJzZXIg
LSBnbHNsYW5nX2xleC5jcHAsIGdsc2xhbmdfdGFiLmgsIGFuZCBnbHNsYW5nX3RhYi5jcHAKLQot
cnVuX2ZsZXgoKQotewotaW5wdXRfZmlsZT0kc2NyaXB0X2Rpci8kMS5sCi1vdXRwdXRfc291cmNl
PSRzY3JpcHRfZGlyLyQxX2xleC5jcHAKLWZsZXggLS1ub2xpbmUgLS1ub3VuaXN0ZCAtLW91dGZp
bGU9JG91dHB1dF9zb3VyY2UgJGlucHV0X2ZpbGUKLX0KLQotcnVuX2Jpc29uKCkKLXsKLWlucHV0
X2ZpbGU9JHNjcmlwdF9kaXIvJDEueQotb3V0cHV0X2hlYWRlcj0kc2NyaXB0X2Rpci8kMV90YWIu
aAotb3V0cHV0X3NvdXJjZT0kc2NyaXB0X2Rpci8kMV90YWIuY3BwCi1iaXNvbiAtLW5vLWxpbmVz
IC0tc2tlbGV0b249eWFjYy5jIC0tZGVmaW5lcz0kb3V0cHV0X2hlYWRlciAtLW91dHB1dD0kb3V0
cHV0X3NvdXJjZSAkaW5wdXRfZmlsZQotfQotCi1zY3JpcHRfZGlyPSQoZGlybmFtZSAkMCkKLQot
IyBHZW5lcmF0ZSBQYXJzZXIKLXJ1bl9mbGV4IGdsc2xhbmcKLXJ1bl9iaXNvbiBnbHNsYW5nCi1w
YXRjaCAtLXNpbGVudCAtLWZvcndhcmQgPCA2NGJpdC1sZXhlci1zYWZldHkucGF0Y2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBmMjIxMTk5MDkzYzIxYWI5N2Y4MjFhNmZiNmIxODQ4MjE2ZTIy
ODUxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmgKKysrIC9kZXYvbnVsbApA
QCAtMSwxNiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotc3RydWN0IFRQYXJzZUNvbnRleHQ7Ci1l
eHRlcm4gaW50IGdsc2xhbmdfaW5pdGlhbGl6ZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKLWV4
dGVybiBpbnQgZ2xzbGFuZ19maW5hbGl6ZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKLQotZXh0
ZXJuIGludCBnbHNsYW5nX3NjYW4oc2l6ZV90IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sCi0gICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBpbnQgbGVuZ3RoW10sCi0gICAgICAgICAgICAgICAgICAgICAgICBUUGFyc2VDb250ZXh0
KiBjb250ZXh0KTsKLWV4dGVybiBpbnQgZ2xzbGFuZ19wYXJzZShUUGFyc2VDb250ZXh0KiBjb250
ZXh0KTsKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L2dsc2xhbmcubCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5n
LmwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0MzUwZDRjMjczNTIxOGQ5YTBiMDQ5
NmI1YmZkMDc5OTkyNTM2ZmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubAor
KysgL2Rldi9udWxsCkBAIC0xLDM2NSArMCwwIEBACi0vKgotLy8KLS8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
VGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBMZXggc3BlY2lmaWNhdGlvbiBmb3IgR0xTTCBFUy4KLUJh
c2VkIG9uIEFOU0kgQyBncmFtbWFyLCBMZXggc3BlY2lmaWNhdGlvbjoKLWh0dHA6Ly93d3cubHlz
YXRvci5saXUuc2UvYy9BTlNJLUMtZ3JhbW1hci1sLmh0bWwKLQotSUYgWU9VIE1PRElGWSBUSElT
IEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNoLAotV0hJQ0ggR0VO
RVJBVEVTIFRIRSBHTFNMIEVTIExFWEVSIChnbHNsYW5nX2xleC5jcHApLgotKi8KLQotJXRvcHsK
LS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwotCi0vLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJh
dGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKLQotLy8gSWdub3JlIGVycm9ycyBpbiBhdXRvLWdl
bmVyYXRlZCBjb2RlLgotI2lmIGRlZmluZWQoX19HTlVDX18pCi0jcHJhZ21hIEdDQyBkaWFnbm9z
dGljIGlnbm9yZWQgIi1XdW51c2VkLWZ1bmN0aW9uIgotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBp
Z25vcmVkICItV3VudXNlZC12YXJpYWJsZSIKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3Jl
ZCAiLVdzd2l0Y2gtZW51bSIKLSNlbGlmIGRlZmluZWQoX01TQ19WRVIpCi0jcHJhZ21hIHdhcm5p
bmcoZGlzYWJsZTogNDA2NSkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MTg5KQotI3ByYWdt
YSB3YXJuaW5nKGRpc2FibGU6IDQ1MDUpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcwMSkK
LSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX2NsYW5nX18pCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgcHVzaAotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5rbm93bi1wcmFn
bWFzIgotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1yZWdp
c3RlciIKLSNlbmRpZgotfQotCi0lewotI2luY2x1ZGUgImNvbXBpbGVyL2dsc2xhbmcuaCIKLSNp
bmNsdWRlICJjb21waWxlci9QYXJzZUNvbnRleHQuaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVw
cm9jZXNzb3IvVG9rZW4uaCIKLSNpbmNsdWRlICJjb21waWxlci91dGlsLmgiCi0jaW5jbHVkZSAi
Z2xzbGFuZ190YWIuaCIKLQotLyogd2luZG93cyBvbmx5IHByYWdtYSAqLwotI2lmZGVmIF9NU0Nf
VkVSCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZSA6IDQxMDIpCi0jZW5kaWYKLQotI2RlZmluZSBZ
WV9VU0VSX0FDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB5eWxs
b2MtPmZpcnN0X2ZpbGUgPSB5eWxsb2MtPmxhc3RfZmlsZSA9IHl5Y29sdW1uOyBcCi0gICAgeXls
bG9jLT5maXJzdF9saW5lID0geXlsbG9jLT5sYXN0X2xpbmUgPSB5eWxpbmVubzsKLQotI2RlZmlu
ZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4X3NpemUpIFwKLSAgICByZXN1bHQgPSBzdHJpbmdf
aW5wdXQoYnVmLCBtYXhfc2l6ZSwgeXlzY2FubmVyKTsKLQotc3RhdGljIHl5X3NpemVfdCBzdHJp
bmdfaW5wdXQoY2hhciogYnVmLCB5eV9zaXplX3QgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5l
cik7Ci1zdGF0aWMgaW50IGNoZWNrX3R5cGUoeXlzY2FuX3QgeXlzY2FubmVyKTsKLXN0YXRpYyBp
bnQgcmVzZXJ2ZWRfd29yZCh5eXNjYW5fdCB5eXNjYW5uZXIpOwotc3RhdGljIGludCBpbnRfY29u
c3RhbnQoeXlzY2FuX3QgeXlzY2FubmVyKTsKLXN0YXRpYyBpbnQgZmxvYXRfY29uc3RhbnQoeXlz
Y2FuX3QgeXlzY2FubmVyKTsKLSV9Ci0KLSVvcHRpb24gbm95eXdyYXAgbm91bnB1dCBuZXZlci1p
bnRlcmFjdGl2ZQotJW9wdGlvbiB5eWxpbmVubyByZWVudHJhbnQgYmlzb24tYnJpZGdlIGJpc29u
LWxvY2F0aW9ucwotJW9wdGlvbiBleHRyYS10eXBlPSJUUGFyc2VDb250ZXh0KiIKLQotRCAgICAg
ICAgICAgWzAtOV0KLUwgICAgICAgICAgIFthLXpBLVpfXQotSCAgICAgICAgICAgW2EtZkEtRjAt
OV0KLUUgICAgICAgICAgIFtFZV1bKy1dP3tEfSsKLU8gICAgICAgICAgIFswLTddCi0KLSUlCi0K
LSJpbnZhcmlhbnQiICAgIHsgcmV0dXJuIElOVkFSSUFOVDsgfQotImhpZ2hwIiAgICAgICAgeyBy
ZXR1cm4gSElHSF9QUkVDSVNJT047IH0KLSJtZWRpdW1wIiAgICAgIHsgcmV0dXJuIE1FRElVTV9Q
UkVDSVNJT047IH0KLSJsb3dwIiAgICAgICAgIHsgcmV0dXJuIExPV19QUkVDSVNJT047IH0KLSJw
cmVjaXNpb24iICAgIHsgcmV0dXJuIFBSRUNJU0lPTjsgfQotCi0iYXR0cmlidXRlIiAgICB7IHJl
dHVybiBBVFRSSUJVVEU7IH0KLSJjb25zdCIgICAgICAgIHsgcmV0dXJuIENPTlNUX1FVQUw7IH0K
LSJ1bmlmb3JtIiAgICAgIHsgcmV0dXJuIFVOSUZPUk07IH0KLSJ2YXJ5aW5nIiAgICAgIHsgcmV0
dXJuIFZBUllJTkc7IH0KLQotImJyZWFrIiAgICAgICAgeyByZXR1cm4gQlJFQUs7IH0KLSJjb250
aW51ZSIgICAgIHsgcmV0dXJuIENPTlRJTlVFOyB9Ci0iZG8iICAgICAgICAgICB7IHJldHVybiBE
TzsgfQotImZvciIgICAgICAgICAgeyByZXR1cm4gRk9SOyB9Ci0id2hpbGUiICAgICAgICB7IHJl
dHVybiBXSElMRTsgfQotCi0iaWYiICAgICAgICAgICB7IHJldHVybiBJRjsgfQotImVsc2UiICAg
ICAgICAgeyByZXR1cm4gRUxTRTsgfQotCi0iaW4iICAgICAgICAgICB7IHJldHVybiBJTl9RVUFM
OyB9Ci0ib3V0IiAgICAgICAgICB7IHJldHVybiBPVVRfUVVBTDsgfQotImlub3V0IiAgICAgICAg
eyByZXR1cm4gSU5PVVRfUVVBTDsgfQotCi0iZmxvYXQiICAgICAgICB7IHJldHVybiBGTE9BVF9U
WVBFOyB9Ci0iaW50IiAgICAgICAgICB7IHJldHVybiBJTlRfVFlQRTsgfQotInZvaWQiICAgICAg
ICAgeyByZXR1cm4gVk9JRF9UWVBFOyB9Ci0iYm9vbCIgICAgICAgICB7IHJldHVybiBCT09MX1RZ
UEU7IH0KLSJ0cnVlIiAgICAgICAgIHsgeXlsdmFsLT5sZXguYiA9IHRydWU7ICByZXR1cm4gQk9P
TENPTlNUQU5UOyB9Ci0iZmFsc2UiICAgICAgICB7IHl5bHZhbC0+bGV4LmIgPSBmYWxzZTsgcmV0
dXJuIEJPT0xDT05TVEFOVDsgfQotCi0iZGlzY2FyZCIgICAgICB7IHJldHVybiBESVNDQVJEOyB9
Ci0icmV0dXJuIiAgICAgICB7IHJldHVybiBSRVRVUk47IH0KLQotIm1hdDIiICAgICAgICAgeyBy
ZXR1cm4gTUFUUklYMjsgfQotIm1hdDMiICAgICAgICAgeyByZXR1cm4gTUFUUklYMzsgfQotIm1h
dDQiICAgICAgICAgeyByZXR1cm4gTUFUUklYNDsgfQotCi0idmVjMiIgICAgICAgICB7IHJldHVy
biBWRUMyOyB9Ci0idmVjMyIgICAgICAgICB7IHJldHVybiBWRUMzOyB9Ci0idmVjNCIgICAgICAg
ICB7IHJldHVybiBWRUM0OyB9Ci0iaXZlYzIiICAgICAgICB7IHJldHVybiBJVkVDMjsgfQotIml2
ZWMzIiAgICAgICAgeyByZXR1cm4gSVZFQzM7IH0KLSJpdmVjNCIgICAgICAgIHsgcmV0dXJuIElW
RUM0OyB9Ci0iYnZlYzIiICAgICAgICB7IHJldHVybiBCVkVDMjsgfQotImJ2ZWMzIiAgICAgICAg
eyByZXR1cm4gQlZFQzM7IH0KLSJidmVjNCIgICAgICAgIHsgcmV0dXJuIEJWRUM0OyB9Ci0KLSJz
YW1wbGVyMkQiICAgICAgICAgIHsgcmV0dXJuIFNBTVBMRVIyRDsgfQotInNhbXBsZXJDdWJlIiAg
ICAgICAgeyByZXR1cm4gU0FNUExFUkNVQkU7IH0KLSJzYW1wbGVyRXh0ZXJuYWxPRVMiIHsgcmV0
dXJuIFNBTVBMRVJfRVhURVJOQUxfT0VTOyB9Ci0ic2FtcGxlcjJEUmVjdCIgICAgICB7IHJldHVy
biBTQU1QTEVSMkRSRUNUOyB9Ci0KLSJzdHJ1Y3QiICAgICAgIHsgcmV0dXJuIFNUUlVDVDsgfQot
Ci0iYXNtIiAgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQot
ImNsYXNzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0idW5p
b24iICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJlbnVtIiAg
ICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInR5cGVkZWYiICAg
ICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0idGVtcGxhdGUiICAgICB7
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJ0aGlzIiAgICAgICAgIHsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInBhY2tlZCIgICAgICAgeyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0KLSJnb3RvIiAgICAgICAgIHsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInN3aXRjaCIgICAgICAgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZGVmYXVsdCIgICAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLQotImlubGluZSIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9Ci0ibm9pbmxpbmUiICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KLSJ2b2xhdGlsZSIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQotInB1YmxpYyIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0ic3RhdGljIiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
LSJleHRlcm4iICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImV4
dGVybmFsIiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iaW50ZXJm
YWNlIiAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJmbGF0IiAgICAg
ICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCi0ibG9uZyIgICAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJzaG9ydCIgICAgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImRvdWJsZSIgICAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iaGFsZiIgICAgICAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJmaXhlZCIgICAgICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInVuc2lnbmVkIiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9Ci0ic3VwZXJwIiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KLQotImlucHV0IiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9Ci0ib3V0cHV0IiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KLQotImh2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9Ci0iaHZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KLSJodmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQot
ImR2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZHZl
YzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJkdmVjNCIg
ICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImZ2ZWMyIiAgICAg
ICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZnZlYzMiICAgICAgICB7
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJmdmVjNCIgICAgICAgIHsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCi0ic2FtcGxlcjFEIiAgICAgICAgICAg
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0ic2FtcGxlcjNEIiAgICAgICAg
ICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0ic2FtcGxlcjFEU2hhZG93
IiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0ic2FtcGxlcjJEU2hh
ZG93IiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0ic2FtcGxlcjNE
UmVjdCIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0ic2FtcGxl
cjJEUmVjdFNoYWRvdyIgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0KLSJz
aXplb2YiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImNhc3Qi
ICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0KLSJuYW1lc3Bh
Y2UiICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInVzaW5nIiAgICAg
ICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0KLXtMfSh7TH18e0R9KSog
ICAgICAgewotICAgeXlsdmFsLT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsg
Ci0gICByZXR1cm4gY2hlY2tfdHlwZSh5eXNjYW5uZXIpOwotfQotCi0wW3hYXXtIfSsgICAgICAg
ICB7IHJldHVybiBpbnRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQotMHtPfSsgICAgICAgICAgICAg
eyByZXR1cm4gaW50X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KLXtEfSsgICAgICAgICAgICAgIHsg
cmV0dXJuIGludF9jb25zdGFudCh5eXNjYW5uZXIpOyB9Ci0KLXtEfSt7RX0gICAgICAgICAgIHsg
cmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KLXtEfSsiLiJ7RH0qKHtFfSk/IHsg
cmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KLSIuIntEfSsoe0V9KT8gICAgIHsg
cmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KLQotIis9IiAgICAgICAgICAgIHsg
cmV0dXJuIEFERF9BU1NJR047IH0KLSItPSIgICAgICAgICAgICB7IHJldHVybiBTVUJfQVNTSUdO
OyB9Ci0iKj0iICAgICAgICAgICAgeyByZXR1cm4gTVVMX0FTU0lHTjsgfQotIi89IiAgICAgICAg
ICAgIHsgcmV0dXJuIERJVl9BU1NJR047IH0KLSIlPSIgICAgICAgICAgICB7IHJldHVybiBNT0Rf
QVNTSUdOOyB9Ci0iPDw9IiAgICAgICAgICAgeyByZXR1cm4gTEVGVF9BU1NJR047IH0KLSI+Pj0i
ICAgICAgICAgICB7IHJldHVybiBSSUdIVF9BU1NJR047IH0KLSImPSIgICAgICAgICAgICB7IHJl
dHVybiBBTkRfQVNTSUdOOyB9Ci0iXj0iICAgICAgICAgICAgeyByZXR1cm4gWE9SX0FTU0lHTjsg
fQotInw9IiAgICAgICAgICAgIHsgcmV0dXJuIE9SX0FTU0lHTjsgfQotCi0iKysiICAgICAgICAg
ICAgeyByZXR1cm4gSU5DX09QOyB9Ci0iLS0iICAgICAgICAgICAgeyByZXR1cm4gREVDX09QOyB9
Ci0iJiYiICAgICAgICAgICAgeyByZXR1cm4gQU5EX09QOyB9Ci0ifHwiICAgICAgICAgICAgeyBy
ZXR1cm4gT1JfT1A7IH0KLSJeXiIgICAgICAgICAgICB7IHJldHVybiBYT1JfT1A7IH0KLSI8PSIg
ICAgICAgICAgICB7IHJldHVybiBMRV9PUDsgfQotIj49IiAgICAgICAgICAgIHsgcmV0dXJuIEdF
X09QOyB9Ci0iPT0iICAgICAgICAgICAgeyByZXR1cm4gRVFfT1A7IH0KLSIhPSIgICAgICAgICAg
ICB7IHJldHVybiBORV9PUDsgfQotIjw8IiAgICAgICAgICAgIHsgcmV0dXJuIExFRlRfT1A7IH0K
LSI+PiIgICAgICAgICAgICB7IHJldHVybiBSSUdIVF9PUDsgfQotIjsiICAgICAgICAgICAgIHsg
cmV0dXJuIFNFTUlDT0xPTjsgfQotKCJ7InwiPCUiKSAgICAgIHsgcmV0dXJuIExFRlRfQlJBQ0U7
IH0KLSgifSJ8IiU+IikgICAgICB7IHJldHVybiBSSUdIVF9CUkFDRTsgfQotIiwiICAgICAgICAg
eyByZXR1cm4gQ09NTUE7IH0KLSI6IiAgICAgICAgIHsgcmV0dXJuIENPTE9OOyB9Ci0iPSIgICAg
ICAgICB7IHJldHVybiBFUVVBTDsgfQotIigiICAgICAgICAgeyByZXR1cm4gTEVGVF9QQVJFTjsg
fQotIikiICAgICAgICAgeyByZXR1cm4gUklHSFRfUEFSRU47IH0KLSgiWyJ8Ijw6IikgIHsgcmV0
dXJuIExFRlRfQlJBQ0tFVDsgfQotKCJdInwiOj4iKSAgeyByZXR1cm4gUklHSFRfQlJBQ0tFVDsg
fQotIi4iICAgICAgICAgeyByZXR1cm4gRE9UOyB9Ci0iISIgICAgICAgICB7IHJldHVybiBCQU5H
OyB9Ci0iLSIgICAgICAgICB7IHJldHVybiBEQVNIOyB9Ci0ifiIgICAgICAgICB7IHJldHVybiBU
SUxERTsgfQotIisiICAgICAgICAgeyByZXR1cm4gUExVUzsgfQotIioiICAgICAgICAgeyByZXR1
cm4gU1RBUjsgfQotIi8iICAgICAgICAgeyByZXR1cm4gU0xBU0g7IH0KLSIlIiAgICAgICAgIHsg
cmV0dXJuIFBFUkNFTlQ7IH0KLSI8IiAgICAgICAgIHsgcmV0dXJuIExFRlRfQU5HTEU7IH0KLSI+
IiAgICAgICAgIHsgcmV0dXJuIFJJR0hUX0FOR0xFOyB9Ci0ifCIgICAgICAgICB7IHJldHVybiBW
RVJUSUNBTF9CQVI7IH0KLSJeIiAgICAgICAgIHsgcmV0dXJuIENBUkVUOyB9Ci0iJiIgICAgICAg
ICB7IHJldHVybiBBTVBFUlNBTkQ7IH0KLSI/IiAgICAgICAgIHsgcmV0dXJuIFFVRVNUSU9OOyB9
Ci0KLVsgXHRcdlxuXGZccl0geyB9Ci08PEVPRj4+ICAgIHsgeXl0ZXJtaW5hdGUoKTsgfQotLiAg
ICAgICAgICB7IGFzc2VydChmYWxzZSk7IHJldHVybiAwOyB9Ci0KLSUlCi0KLSNpZiBkZWZpbmVk
KF9fY2xhbmdfXykKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLSNlbmRpZgotCi15eV9z
aXplX3Qgc3RyaW5nX2lucHV0KGNoYXIqIGJ1ZiwgeXlfc2l6ZV90IG1heF9zaXplLCB5eXNjYW5f
dCB5eXNjYW5uZXIpIHsKLSAgICBwcDo6VG9rZW4gdG9rZW47Ci0gICAgeXlnZXRfZXh0cmEoeXlz
Y2FubmVyKS0+cHJlcHJvY2Vzc29yLmxleCgmdG9rZW4pOwotICAgIHl5X3NpemVfdCBsZW4gPSB0
b2tlbi50eXBlID09IHBwOjpUb2tlbjo6TEFTVCA/IDAgOiB0b2tlbi50ZXh0LnNpemUoKTsKLSAg
ICBpZiAobGVuIDwgbWF4X3NpemUpCi0gICAgICAgIG1lbWNweShidWYsIHRva2VuLnRleHQuY19z
dHIoKSwgbGVuKTsKLSAgICB5eXNldF9jb2x1bW4odG9rZW4ubG9jYXRpb24uZmlsZSwgeXlzY2Fu
bmVyKTsKLSAgICB5eXNldF9saW5lbm8odG9rZW4ubG9jYXRpb24ubGluZSwgeXlzY2FubmVyKTsK
LQotICAgIGlmIChsZW4gPj0gbWF4X3NpemUpCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCJJbnB1
dCBidWZmZXIgb3ZlcmZsb3ciKTsKLSAgICBlbHNlIGlmIChsZW4gPiAwKQotICAgICAgICBidWZb
bGVuKytdID0gJyAnOwotICAgIHJldHVybiBsZW47Ci19Ci0KLWludCBjaGVja190eXBlKHl5c2Nh
bl90IHl5c2Nhbm5lcikgewotICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopIHl5c2Nhbm5lcjsKLSAgICAKLSAgICBpbnQgdG9rZW4gPSBJREVOVElGSUVSOwotICAg
IFRTeW1ib2wqIHN5bWJvbCA9IHl5ZXh0cmEtPnN5bWJvbFRhYmxlLmZpbmQoeXl0ZXh0KTsKLSAg
ICBpZiAoc3ltYm9sICYmIHN5bWJvbC0+aXNWYXJpYWJsZSgpKSB7Ci0gICAgICAgIFRWYXJpYWJs
ZSogdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPihzeW1ib2wpOwotICAgICAgICBp
ZiAodmFyaWFibGUtPmlzVXNlclR5cGUoKSkKLSAgICAgICAgICAgIHRva2VuID0gVFlQRV9OQU1F
OwotICAgIH0KLSAgICB5eWx2YWwtPmxleC5zeW1ib2wgPSBzeW1ib2w7Ci0gICAgcmV0dXJuIHRv
a2VuOwotfQotCi1pbnQgcmVzZXJ2ZWRfd29yZCh5eXNjYW5fdCB5eXNjYW5uZXIpIHsKLSAgICBz
dHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSB5eXNjYW5uZXI7Ci0KLSAg
ICB5eWV4dHJhLT5lcnJvcigqeXlsbG9jLCAiSWxsZWdhbCB1c2Ugb2YgcmVzZXJ2ZWQgd29yZCIs
IHl5dGV4dCwgIiIpOwotICAgIHl5ZXh0cmEtPnJlY292ZXIoKTsKLSAgICByZXR1cm4gMDsKLX0K
LQotdm9pZCB5eWVycm9yKFlZTFRZUEUqIGxsb2MsIFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNv
bnN0IGNoYXIqIHJlYXNvbikgewotICAgIGNvbnRleHQtPmVycm9yKCpsbG9jLCByZWFzb24sIHl5
Z2V0X3RleHQoY29udGV4dC0+c2Nhbm5lcikpOwotICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLX0K
LQotaW50IGludF9jb25zdGFudCh5eXNjYW5fdCB5eXNjYW5uZXIpIHsKLSAgICBzdHJ1Y3QgeXln
dXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSB5eXNjYW5uZXI7Ci0KLSAgICBpZiAoIWF0
b2lfY2xhbXAoeXl0ZXh0LCAmKHl5bHZhbC0+bGV4LmkpKSkKLSAgICAgICAgeXlleHRyYS0+d2Fy
bmluZygqeXlsbG9jLCAiSW50ZWdlciBvdmVyZmxvdyIsIHl5dGV4dCwgIiIpOwotICAgIHJldHVy
biBJTlRDT05TVEFOVDsKLX0KLQotaW50IGZsb2F0X2NvbnN0YW50KHl5c2Nhbl90IHl5c2Nhbm5l
cikgewotICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIHl5c2Nh
bm5lcjsKLQotICAgIGlmICghYXRvZl9jbGFtcCh5eXRleHQsICYoeXlsdmFsLT5sZXguZikpKQot
ICAgICAgICB5eWV4dHJhLT53YXJuaW5nKCp5eWxsb2MsICJGbG9hdCBvdmVyZmxvdyIsIHl5dGV4
dCwgIiIpOwotICAgIHJldHVybiBGTE9BVENPTlNUQU5UOwotfQotCi1pbnQgZ2xzbGFuZ19pbml0
aWFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKLSAgICB5eXNjYW5fdCBzY2FubmVyID0g
TlVMTDsKLSAgICBpZiAoeXlsZXhfaW5pdF9leHRyYShjb250ZXh0LCAmc2Nhbm5lcikpCi0gICAg
ICAgIHJldHVybiAxOwotCi0gICAgY29udGV4dC0+c2Nhbm5lciA9IHNjYW5uZXI7Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLWludCBnbHNsYW5nX2ZpbmFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRleHQp
IHsKLSAgICB5eXNjYW5fdCBzY2FubmVyID0gY29udGV4dC0+c2Nhbm5lcjsKLSAgICBpZiAoc2Nh
bm5lciA9PSBOVUxMKSByZXR1cm4gMDsKLSAgICAKLSAgICBjb250ZXh0LT5zY2FubmVyID0gTlVM
TDsKLSAgICB5eWxleF9kZXN0cm95KHNjYW5uZXIpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLWlu
dCBnbHNsYW5nX3NjYW4oc2l6ZV90IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwg
Y29uc3QgaW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250
ZXh0KSB7Ci0gICAgeXlyZXN0YXJ0KE5VTEwsIGNvbnRleHQtPnNjYW5uZXIpOwotICAgIHl5c2V0
X2NvbHVtbigwLCBjb250ZXh0LT5zY2FubmVyKTsKLSAgICB5eXNldF9saW5lbm8oMSwgY29udGV4
dC0+c2Nhbm5lcik7Ci0KLSAgICAvLyBJbml0aWFsaXplIHByZXByb2Nlc3Nvci4KLSAgICBpZiAo
IWNvbnRleHQtPnByZXByb2Nlc3Nvci5pbml0KGNvdW50LCBzdHJpbmcsIGxlbmd0aCkpCi0gICAg
ICAgIHJldHVybiAxOwotICAgIGNvbnRleHQtPnByZXByb2Nlc3Nvci5zZXRNYXhUb2tlbkxlbmd0
aChTSF9NQVhfVE9LRU5fTEVOR1RIKTsKLQotICAgIC8vIERlZmluZSBleHRlbnNpb24gbWFjcm9z
LgotICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0QmVoYXZpb3IgPSBjb250ZXh0LT5l
eHRlbnNpb25CZWhhdmlvcigpOwotICAgIGZvciAoVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9p
dGVyYXRvciBpdGVyID0gZXh0QmVoYXZpb3IuYmVnaW4oKTsKLSAgICAgICAgIGl0ZXIgIT0gZXh0
QmVoYXZpb3IuZW5kKCk7ICsraXRlcikgewotICAgICAgICBjb250ZXh0LT5wcmVwcm9jZXNzb3Iu
cHJlZGVmaW5lTWFjcm8oaXRlci0+Zmlyc3QuY19zdHIoKSwgMSk7Ci0gICAgfQotICAgIGlmIChj
b250ZXh0LT5mcmFnbWVudFByZWNpc2lvbkhpZ2gpCi0gICAgICAgIGNvbnRleHQtPnByZXByb2Nl
c3Nvci5wcmVkZWZpbmVNYWNybygiR0xfRlJBR01FTlRfUFJFQ0lTSU9OX0hJR0giLCAxKTsKLQot
ICAgIHJldHVybiAwOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvZ2xzbGFuZy55IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL2dsc2xhbmcueQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVkNWQ3ODcxYWEz
YjZmYTc1NGVlOWZlYTA2OTU1NmNkNTk4ZTcwNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
Z2xzbGFuZy55CisrKyAvZGV2L251bGwKQEAgLTEsMjAwMyArMCwwIEBACi0vKgotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLQotVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBZYWNjIGdyYW1tYXIgZm9yIEdMU0wg
RVMuCi1CYXNlZCBvbiBBTlNJIEMgWWFjYyBncmFtbWFyOgotaHR0cDovL3d3dy5seXNhdG9yLmxp
dS5zZS9jL0FOU0ktQy1ncmFtbWFyLXkuaHRtbAotCi1JRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZ
T1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2gsCi1XSElDSCBHRU5FUkFURVMg
VEhFIEdMU0wgRVMgUEFSU0VSIChnbHNsYW5nX3RhYi5jcHAgQU5EIGdsc2xhbmdfdGFiLmgpLgot
Ki8KLQotJXsKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVy
YXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQotCi0vLyBJZ25vcmUgZXJy
b3JzIGluIGF1dG8tZ2VuZXJhdGVkIGNvZGUuCi0jaWYgZGVmaW5lZChfX0dOVUNfXykKLSNwcmFn
bWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtZnVuY3Rpb24iCi0jcHJhZ21hIEdD
QyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLXZhcmlhYmxlIgotI3ByYWdtYSBHQ0MgZGlh
Z25vc3RpYyBpZ25vcmVkICItV3N3aXRjaC1lbnVtIgotI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikK
LSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MDY1KQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6
IDQxODkpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUwNSkKLSNwcmFnbWEgd2FybmluZyhk
aXNhYmxlOiA0NzAxKQotI2VuZGlmCi0KLSNpbmNsdWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5o
IgotI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlQ29udGV4dC5oIgotI2luY2x1ZGUgIkdMU0xBTkcv
U2hhZGVyTGFuZy5oIgotCi0jZGVmaW5lIFlZRU5BQkxFX05MUyAwCi0KLSNkZWZpbmUgWVlMRVhf
UEFSQU0gY29udGV4dC0+c2Nhbm5lcgotJX0KLQotJWV4cGVjdCAxIC8qIE9uZSBzaGlmdCByZWR1
Y2UgY29uZmxpY3QgYmVjYXVzZSBvZiBpZiB8IGVsc2UgKi8KLSVwdXJlLXBhcnNlcgotJXBhcnNl
LXBhcmFtIHtUUGFyc2VDb250ZXh0KiBjb250ZXh0fQotJWxvY2F0aW9ucwotJWxleC1wYXJhbSB7
WVlMRVhfUEFSQU19Ci0KLSVjb2RlIHJlcXVpcmVzIHsKLSNkZWZpbmUgWVlMVFlQRSBUU291cmNl
TG9jCi0jZGVmaW5lIFlZTFRZUEVfSVNfREVDTEFSRUQgMQotI2RlZmluZSBTSF9NQVhfVE9LRU5f
TEVOR1RIIDI1NiAgLy8gV2ViR0wgc3BlYy4KLX0KLQotJXVuaW9uIHsKLSAgICBzdHJ1Y3Qgewot
ICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAgICBUU3RyaW5nICpzdHJpbmc7Ci0gICAgICAgICAg
ICBmbG9hdCBmOwotICAgICAgICAgICAgaW50IGk7Ci0gICAgICAgICAgICBib29sIGI7Ci0gICAg
ICAgIH07Ci0gICAgICAgIFRTeW1ib2wqIHN5bWJvbDsKLSAgICB9IGxleDsKLSAgICBzdHJ1Y3Qg
ewotICAgICAgICBUT3BlcmF0b3Igb3A7Ci0gICAgICAgIHVuaW9uIHsKLSAgICAgICAgICAgIFRJ
bnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOwotICAgICAgICAgICAgVEludGVybU5vZGVQYWlyIG5vZGVQ
YWlyOwotICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbnRlcm1UeXBlZE5vZGU7Ci0gICAgICAg
ICAgICBUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGU7Ci0gICAgICAgIH07Ci0gICAg
ICAgIHVuaW9uIHsKLSAgICAgICAgICAgIFRQdWJsaWNUeXBlIHR5cGU7Ci0gICAgICAgICAgICBU
UHJlY2lzaW9uIHByZWNpc2lvbjsKLSAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyOwot
ICAgICAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlvbjsKLSAgICAgICAgICAgIFRQYXJhbWV0ZXIg
cGFyYW07Ci0gICAgICAgICAgICBURmllbGQqIGZpZWxkOwotICAgICAgICAgICAgVEZpZWxkTGlz
dCogZmllbGRMaXN0OwotICAgICAgICB9OwotICAgIH0gaW50ZXJtOwotfQotCi0lewotZXh0ZXJu
IGludCB5eWxleChZWVNUWVBFKiB5eWx2YWwsIFlZTFRZUEUqIHl5bGxvYywgdm9pZCogeXlzY2Fu
bmVyKTsKLWV4dGVybiB2b2lkIHl5ZXJyb3IoWVlMVFlQRSogeXlsbG9jLCBUUGFyc2VDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pOwotCi0jZGVmaW5lIFlZTExPQ19ERUZBVUxU
KEN1cnJlbnQsIFJocywgTikgICAgICAgICAgICAgICAgICAgICAgXAotICBkbyB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlm
IChOKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgIChDdXJyZW50KS5maXJzdF9maWxlID0gWVlSSFNMT0MoUmhzLCAxKS5maXJzdF9maWxl
OyAgXAotICAgICAgICAoQ3VycmVudCkuZmlyc3RfbGluZSA9IFlZUkhTTE9DKFJocywgMSkuZmly
c3RfbGluZTsgIFwKLSAgICAgICAgKEN1cnJlbnQpLmxhc3RfZmlsZSA9IFlZUkhTTE9DKFJocywg
TikubGFzdF9maWxlOyAgICBcCi0gICAgICAgIChDdXJyZW50KS5sYXN0X2xpbmUgPSBZWVJIU0xP
QyhSaHMsIE4pLmxhc3RfbGluZTsgICAgXAotICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGVsc2UgeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIChDdXJyZW50
KS5maXJzdF9maWxlID0gWVlSSFNMT0MoUmhzLCAwKS5sYXN0X2ZpbGU7ICAgXAotICAgICAgICAo
Q3VycmVudCkuZmlyc3RfbGluZSA9IFlZUkhTTE9DKFJocywgMCkubGFzdF9saW5lOyAgIFwKLSAg
ICAgICAgKEN1cnJlbnQpLmxhc3RfZmlsZSA9IFlZUkhTTE9DKFJocywgMCkubGFzdF9maWxlOyAg
ICBcCi0gICAgICAgIChDdXJyZW50KS5sYXN0X2xpbmUgPSBZWVJIU0xPQyhSaHMsIDApLmxhc3Rf
bGluZTsgICAgXAotICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBWRVJURVhfT05MWShT
LCBMKSB7ICBcCi0gICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgIT0gU0hfVkVSVEVYX1NIQURF
UikgeyAgXAotICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXgg
c2hhZGVycyBvbmx5ICIsIFMpOyAgXAotICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCi0g
ICAgfSAgXAotfQotCi0jZGVmaW5lIEZSQUdfT05MWShTLCBMKSB7ICBcCi0gICAgaWYgKGNvbnRl
eHQtPnNoYWRlclR5cGUgIT0gU0hfRlJBR01FTlRfU0hBREVSKSB7ICBcCi0gICAgICAgIGNvbnRl
eHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIGZyYWdtZW50IHNoYWRlcnMgb25seSAiLCBTKTsg
IFwKLSAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAotICAgIH0gIFwKLX0KLSV9Ci0KLSV0
b2tlbiA8bGV4PiBJTlZBUklBTlQgSElHSF9QUkVDSVNJT04gTUVESVVNX1BSRUNJU0lPTiBMT1df
UFJFQ0lTSU9OIFBSRUNJU0lPTgotJXRva2VuIDxsZXg+IEFUVFJJQlVURSBDT05TVF9RVUFMIEJP
T0xfVFlQRSBGTE9BVF9UWVBFIElOVF9UWVBFCi0ldG9rZW4gPGxleD4gQlJFQUsgQ09OVElOVUUg
RE8gRUxTRSBGT1IgSUYgRElTQ0FSRCBSRVRVUk4KLSV0b2tlbiA8bGV4PiBCVkVDMiBCVkVDMyBC
VkVDNCBJVkVDMiBJVkVDMyBJVkVDNCBWRUMyIFZFQzMgVkVDNAotJXRva2VuIDxsZXg+IE1BVFJJ
WDIgTUFUUklYMyBNQVRSSVg0IElOX1FVQUwgT1VUX1FVQUwgSU5PVVRfUVVBTCBVTklGT1JNIFZB
UllJTkcKLSV0b2tlbiA8bGV4PiBTVFJVQ1QgVk9JRF9UWVBFIFdISUxFCi0ldG9rZW4gPGxleD4g
U0FNUExFUjJEIFNBTVBMRVJDVUJFIFNBTVBMRVJfRVhURVJOQUxfT0VTIFNBTVBMRVIyRFJFQ1QK
LQotJXRva2VuIDxsZXg+IElERU5USUZJRVIgVFlQRV9OQU1FIEZMT0FUQ09OU1RBTlQgSU5UQ09O
U1RBTlQgQk9PTENPTlNUQU5UCi0ldG9rZW4gPGxleD4gTEVGVF9PUCBSSUdIVF9PUAotJXRva2Vu
IDxsZXg+IElOQ19PUCBERUNfT1AgTEVfT1AgR0VfT1AgRVFfT1AgTkVfT1AKLSV0b2tlbiA8bGV4
PiBBTkRfT1AgT1JfT1AgWE9SX09QIE1VTF9BU1NJR04gRElWX0FTU0lHTiBBRERfQVNTSUdOCi0l
dG9rZW4gPGxleD4gTU9EX0FTU0lHTiBMRUZUX0FTU0lHTiBSSUdIVF9BU1NJR04gQU5EX0FTU0lH
TiBYT1JfQVNTSUdOIE9SX0FTU0lHTgotJXRva2VuIDxsZXg+IFNVQl9BU1NJR04KLQotJXRva2Vu
IDxsZXg+IExFRlRfUEFSRU4gUklHSFRfUEFSRU4gTEVGVF9CUkFDS0VUIFJJR0hUX0JSQUNLRVQg
TEVGVF9CUkFDRSBSSUdIVF9CUkFDRSBET1QKLSV0b2tlbiA8bGV4PiBDT01NQSBDT0xPTiBFUVVB
TCBTRU1JQ09MT04gQkFORyBEQVNIIFRJTERFIFBMVVMgU1RBUiBTTEFTSCBQRVJDRU5UCi0ldG9r
ZW4gPGxleD4gTEVGVF9BTkdMRSBSSUdIVF9BTkdMRSBWRVJUSUNBTF9CQVIgQ0FSRVQgQU1QRVJT
QU5EIFFVRVNUSU9OCi0KLSV0eXBlIDxsZXg+IGlkZW50aWZpZXIKLSV0eXBlIDxpbnRlcm0+IGFz
c2lnbm1lbnRfb3BlcmF0b3IgdW5hcnlfb3BlcmF0b3IKLSV0eXBlIDxpbnRlcm0uaW50ZXJtVHlw
ZWROb2RlPiB2YXJpYWJsZV9pZGVudGlmaWVyIHByaW1hcnlfZXhwcmVzc2lvbiBwb3N0Zml4X2V4
cHJlc3Npb24KLSV0eXBlIDxpbnRlcm0uaW50ZXJtVHlwZWROb2RlPiBleHByZXNzaW9uIGludGVn
ZXJfZXhwcmVzc2lvbiBhc3NpZ25tZW50X2V4cHJlc3Npb24KLSV0eXBlIDxpbnRlcm0uaW50ZXJt
VHlwZWROb2RlPiB1bmFyeV9leHByZXNzaW9uIG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24gYWRk
aXRpdmVfZXhwcmVzc2lvbgotJXR5cGUgPGludGVybS5pbnRlcm1UeXBlZE5vZGU+IHJlbGF0aW9u
YWxfZXhwcmVzc2lvbiBlcXVhbGl0eV9leHByZXNzaW9uCi0ldHlwZSA8aW50ZXJtLmludGVybVR5
cGVkTm9kZT4gY29uZGl0aW9uYWxfZXhwcmVzc2lvbiBjb25zdGFudF9leHByZXNzaW9uCi0ldHlw
ZSA8aW50ZXJtLmludGVybVR5cGVkTm9kZT4gbG9naWNhbF9vcl9leHByZXNzaW9uIGxvZ2ljYWxf
eG9yX2V4cHJlc3Npb24gbG9naWNhbF9hbmRfZXhwcmVzc2lvbgotJXR5cGUgPGludGVybS5pbnRl
cm1UeXBlZE5vZGU+IHNoaWZ0X2V4cHJlc3Npb24gYW5kX2V4cHJlc3Npb24gZXhjbHVzaXZlX29y
X2V4cHJlc3Npb24gaW5jbHVzaXZlX29yX2V4cHJlc3Npb24KLSV0eXBlIDxpbnRlcm0uaW50ZXJt
VHlwZWROb2RlPiBmdW5jdGlvbl9jYWxsIGluaXRpYWxpemVyIGNvbmRpdGlvbiBjb25kaXRpb25v
cHQKLQotJXR5cGUgPGludGVybS5pbnRlcm1Ob2RlPiB0cmFuc2xhdGlvbl91bml0IGZ1bmN0aW9u
X2RlZmluaXRpb24KLSV0eXBlIDxpbnRlcm0uaW50ZXJtTm9kZT4gc3RhdGVtZW50IHNpbXBsZV9z
dGF0ZW1lbnQKLSV0eXBlIDxpbnRlcm0uaW50ZXJtQWdncmVnYXRlPiAgc3RhdGVtZW50X2xpc3Qg
Y29tcG91bmRfc3RhdGVtZW50Ci0ldHlwZSA8aW50ZXJtLmludGVybU5vZGU+IGRlY2xhcmF0aW9u
X3N0YXRlbWVudCBzZWxlY3Rpb25fc3RhdGVtZW50IGV4cHJlc3Npb25fc3RhdGVtZW50Ci0ldHlw
ZSA8aW50ZXJtLmludGVybU5vZGU+IGRlY2xhcmF0aW9uIGV4dGVybmFsX2RlY2xhcmF0aW9uCi0l
dHlwZSA8aW50ZXJtLmludGVybU5vZGU+IGZvcl9pbml0X3N0YXRlbWVudCBjb21wb3VuZF9zdGF0
ZW1lbnRfbm9fbmV3X3Njb3BlCi0ldHlwZSA8aW50ZXJtLm5vZGVQYWlyPiBzZWxlY3Rpb25fcmVz
dF9zdGF0ZW1lbnQgZm9yX3Jlc3Rfc3RhdGVtZW50Ci0ldHlwZSA8aW50ZXJtLmludGVybU5vZGU+
IGl0ZXJhdGlvbl9zdGF0ZW1lbnQganVtcF9zdGF0ZW1lbnQgc3RhdGVtZW50X25vX25ld19zY29w
ZSBzdGF0ZW1lbnRfd2l0aF9zY29wZQotJXR5cGUgPGludGVybT4gc2luZ2xlX2RlY2xhcmF0aW9u
IGluaXRfZGVjbGFyYXRvcl9saXN0Ci0KLSV0eXBlIDxpbnRlcm0+IHBhcmFtZXRlcl9kZWNsYXJh
dGlvbiBwYXJhbWV0ZXJfZGVjbGFyYXRvciBwYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIKLSV0eXBl
IDxpbnRlcm0ucXVhbGlmaWVyPiBwYXJhbWV0ZXJfcXVhbGlmaWVyCi0KLSV0eXBlIDxpbnRlcm0u
cHJlY2lzaW9uPiBwcmVjaXNpb25fcXVhbGlmaWVyCi0ldHlwZSA8aW50ZXJtLnR5cGU+IHR5cGVf
cXVhbGlmaWVyIGZ1bGx5X3NwZWNpZmllZF90eXBlIHR5cGVfc3BlY2lmaWVyCi0ldHlwZSA8aW50
ZXJtLnR5cGU+IHR5cGVfc3BlY2lmaWVyX25vX3ByZWMgdHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkK
LSV0eXBlIDxpbnRlcm0udHlwZT4gc3RydWN0X3NwZWNpZmllcgotJXR5cGUgPGludGVybS5maWVs
ZD4gc3RydWN0X2RlY2xhcmF0b3IKLSV0eXBlIDxpbnRlcm0uZmllbGRMaXN0PiBzdHJ1Y3RfZGVj
bGFyYXRvcl9saXN0IHN0cnVjdF9kZWNsYXJhdGlvbiBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdAot
JXR5cGUgPGludGVybS5mdW5jdGlvbj4gZnVuY3Rpb25faGVhZGVyIGZ1bmN0aW9uX2RlY2xhcmF0
b3IgZnVuY3Rpb25faWRlbnRpZmllcgotJXR5cGUgPGludGVybS5mdW5jdGlvbj4gZnVuY3Rpb25f
aGVhZGVyX3dpdGhfcGFyYW1ldGVycyBmdW5jdGlvbl9jYWxsX2hlYWRlcgotJXR5cGUgPGludGVy
bT4gZnVuY3Rpb25fY2FsbF9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIGZ1bmN0aW9uX2NhbGxfaGVh
ZGVyX25vX3BhcmFtZXRlcnMgZnVuY3Rpb25fY2FsbF9nZW5lcmljIGZ1bmN0aW9uX3Byb3RvdHlw
ZQotJXR5cGUgPGludGVybT4gZnVuY3Rpb25fY2FsbF9vcl9tZXRob2QKLQotJXN0YXJ0IHRyYW5z
bGF0aW9uX3VuaXQKLSUlCi0KLWlkZW50aWZpZXIKLSAgICA6IElERU5USUZJRVIKLSAgICB8IFRZ
UEVfTkFNRQotCi12YXJpYWJsZV9pZGVudGlmaWVyCi0gICAgOiBJREVOVElGSUVSIHsKLSAgICAg
ICAgLy8gVGhlIHN5bWJvbCB0YWJsZSBzZWFyY2ggd2FzIGRvbmUgaW4gdGhlIGxleGljYWwgcGhh
c2UKLSAgICAgICAgY29uc3QgVFN5bWJvbCogc3ltYm9sID0gJDEuc3ltYm9sOwotICAgICAgICBj
b25zdCBUVmFyaWFibGUqIHZhcmlhYmxlOwotICAgICAgICBpZiAoc3ltYm9sID09IDApIHsKLSAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIiwgJDEu
c3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgICAgIFRUeXBlIHR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCk7Ci0gICAgICAgICAgICBU
VmFyaWFibGUqIGZha2VWYXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJDEuc3RyaW5nLCB0eXBlKTsK
LSAgICAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgqZmFrZVZhcmlhYmxlKTsK
LSAgICAgICAgICAgIHZhcmlhYmxlID0gZmFrZVZhcmlhYmxlOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgLy8gVGhpcyBpZGVudGlmaWVyIGNhbiBvbmx5IGJlIGEgdmFyaWFibGUgdHlw
ZSBzeW1ib2wKLSAgICAgICAgICAgIGlmICghIHN5bWJvbC0+aXNWYXJpYWJsZSgpKSB7Ci0gICAg
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJ2YXJpYWJsZSBleHBlY3RlZCIsICQxLnN0
cmluZy0+Y19zdHIoKSk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICB2YXJpYWJsZSA9IHN0YXRpY19j
YXN0PGNvbnN0IFRWYXJpYWJsZSo+KHN5bWJvbCk7Ci0KLSAgICAgICAgICAgIGlmIChjb250ZXh0
LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbih2YXJpYWJsZS0+Z2V0TmFtZSgpKSAmJgotICAgICAg
ICAgICAgICAgICF2YXJpYWJsZS0+Z2V0RXh0ZW5zaW9uKCkuZW1wdHkoKSAmJgotICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soQDEsIHZhcmlhYmxlLT5nZXRFeHRl
bnNpb24oKSkpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBkb24ndCBkZWxldGUgJDEuc3RyaW5nLCBp
dCdzIHVzZWQgYnkgZXJyb3IgcmVjb3ZlcnksIGFuZCB0aGUgcG9vbAotICAgICAgICAvLyBwb3Ag
d2lsbCByZWNsYWltIHRoZSBtZW1vcnkKLQotICAgICAgICBpZiAodmFyaWFibGUtPmdldFR5cGUo
KS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCApIHsKLSAgICAgICAgICAgIENvbnN0YW50VW5p
b24qIGNvbnN0QXJyYXkgPSB2YXJpYWJsZS0+Z2V0Q29uc3RQb2ludGVyKCk7Ci0gICAgICAgICAg
ICBUVHlwZSB0KHZhcmlhYmxlLT5nZXRUeXBlKCkpOwotICAgICAgICAgICAgJCQgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbihjb25zdEFycmF5LCB0LCBAMSk7Ci0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3lt
Ym9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXROYW1lKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMSk7Ci0g
ICAgfQotICAgIDsKLQotcHJpbWFyeV9leHByZXNzaW9uCi0gICAgOiB2YXJpYWJsZV9pZGVudGlm
aWVyIHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICB9Ci0gICAgfCBJTlRDT05TVEFOVCB7Ci0gICAg
ICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAg
ICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KCQxLmkpOwotICAgICAgICAkJCA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwg
RWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAxKTsKLSAgICB9Ci0gICAgfCBGTE9BVENPTlNUQU5U
IHsKLSAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
WzFdOwotICAgICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3QoJDEuZik7Ci0gICAgICAgICQkID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUo
RWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMSk7Ci0gICAgfQotICAgIHwgQk9P
TENPTlNUQU5UIHsKLSAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uWzFdOwotICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoJDEuYik7Ci0gICAg
ICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJh
eSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAxKTsKLSAgICB9Ci0g
ICAgfCBMRUZUX1BBUkVOIGV4cHJlc3Npb24gUklHSFRfUEFSRU4gewotICAgICAgICAkJCA9ICQy
OwotICAgIH0KLSAgICA7Ci0KLXBvc3RmaXhfZXhwcmVzc2lvbgotICAgIDogcHJpbWFyeV9leHBy
ZXNzaW9uIHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICB9Ci0gICAgfCBwb3N0Zml4X2V4cHJlc3Np
b24gTEVGVF9CUkFDS0VUIGludGVnZXJfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKLSAgICAg
ICAgJCQgPSBjb250ZXh0LT5hZGRJbmRleEV4cHJlc3Npb24oJDEsIEAyLCAkMyk7Ci0gICAgfQot
ICAgIHwgZnVuY3Rpb25fY2FsbCB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgfQotICAgIHwgcG9z
dGZpeF9leHByZXNzaW9uIERPVCBpZGVudGlmaWVyIHsKLSAgICAgICAgaWYgKCQxLT5pc0FycmF5
KCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAzLCAiY2Fubm90IGFwcGx5IGRvdCBv
cGVyYXRvciB0byBhbiBhcnJheSIsICIuIik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoJDEtPmlzVmVjdG9yKCkpIHsKLSAgICAgICAg
ICAgIFRWZWN0b3JGaWVsZHMgZmllbGRzOwotICAgICAgICAgICAgaWYgKCEgY29udGV4dC0+cGFy
c2VWZWN0b3JGaWVsZHMoKiQzLnN0cmluZywgJDEtPmdldE5vbWluYWxTaXplKCksIGZpZWxkcywg
QDMpKSB7Ci0gICAgICAgICAgICAgICAgZmllbGRzLm51bSA9IDE7Ci0gICAgICAgICAgICAgICAg
ZmllbGRzLm9mZnNldHNbMF0gPSAwOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCQxLT5nZXRUeXBlKCkuZ2V0UXVh
bGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsgLy8gY29uc3RhbnQgZm9sZGluZyBmb3IgdmVjdG9yIGZp
ZWxkcwotICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+YWRkQ29uc3RWZWN0b3JOb2RlKGZp
ZWxkcywgJDEsIEAzKTsKLSAgICAgICAgICAgICAgICBpZiAoJCQgPT0gMCkgewotICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICQkID0g
JDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgJCQtPnNldFR5cGUoVFR5cGUoJDEtPmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJl
Y2lzaW9uKCksIEV2cUNvbnN0LCAoaW50KSAoKiQzLnN0cmluZykuc2l6ZSgpKSk7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFRTdHJpbmcgdmVjdG9yU3RyaW5nID0gKiQz
LnN0cmluZzsKLSAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZFN3aXp6bGUoZmllbGRzLCBAMyk7Ci0gICAgICAgICAgICAgICAgJCQg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wVmVjdG9yU3dpenpsZSwgJDEsIGlu
ZGV4LCBAMik7Ci0gICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoVFR5cGUoJDEtPmdldEJhc2lj
VHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgKGludCkgdmVjdG9yU3Ry
aW5nLnNpemUoKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCQxLT5pc01h
dHJpeCgpKSB7Ci0gICAgICAgICAgICBUTWF0cml4RmllbGRzIGZpZWxkczsKLSAgICAgICAgICAg
IGlmICghIGNvbnRleHQtPnBhcnNlTWF0cml4RmllbGRzKCokMy5zdHJpbmcsICQxLT5nZXROb21p
bmFsU2l6ZSgpLCBmaWVsZHMsIEAzKSkgewotICAgICAgICAgICAgICAgIGZpZWxkcy53aG9sZVJv
dyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGZpZWxkcy53aG9sZUNvbCA9IGZhbHNlOwotICAg
ICAgICAgICAgICAgIGZpZWxkcy5yb3cgPSAwOwotICAgICAgICAgICAgICAgIGZpZWxkcy5jb2wg
PSAwOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKGZpZWxkcy53aG9sZVJvdyB8fCBmaWVsZHMud2hvbGVDb2wpIHsK
LSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgIiBub24tc2NhbGFyIGZpZWxkcyBu
b3QgaW1wbGVtZW50ZWQgeWV0IiwgIi4iKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBD
b25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdCgw
KTsKLSAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRl
ZmluZWQsIEV2cUNvbnN0KSwgQDMpOwotICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAkMSwgaW5kZXgsIEAyKTsKLSAgICAg
ICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQ
cmVjaXNpb24oKSxFdnFUZW1wb3JhcnksICQxLT5nZXROb21pbmFsU2l6ZSgpKSk7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkg
PSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJ
Q29uc3QoZmllbGRzLmNvbCAqICQxLT5nZXROb21pbmFsU2l6ZSgpICsgZmllbGRzLnJvdyk7Ci0g
ICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVk
LCBFdnFDb25zdCksIEAzKTsKLSAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdCwgJDEsIGluZGV4LCBAMik7Ci0gICAgICAgICAg
ICAgICAgJCQtPnNldFR5cGUoVFR5cGUoJDEtPmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lz
aW9uKCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICgkMS0+Z2V0QmFzaWNU
eXBlKCkgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgICAgICBib29sIGZpZWxkRm91bmQgPSBmYWxz
ZTsKLSAgICAgICAgICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9ICQxLT5nZXRUeXBlKCku
Z2V0U3RydWN0KCktPmZpZWxkcygpOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IGk7Ci0gICAg
ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGZpZWxkc1tpXS0+bmFtZSgpID09ICokMy5zdHJpbmcpIHsKLSAgICAgICAgICAg
ICAgICAgICAgZmllbGRGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmaWVsZEZv
dW5kKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCQxLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkg
PT0gRXZxQ29uc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRDb25z
dFN0cnVjdCgqJDMuc3RyaW5nLCAkMSwgQDIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoJCQg
PT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICQkLT5zZXRU
eXBlKCpmaWVsZHNbaV0tPnR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFu
Z2UgdGhlIHF1YWxpZmllciBvZiB0aGUgcmV0dXJuIHR5cGUsIG5vdCBvZiB0aGUgc3RydWN0dXJl
IGZpZWxkCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBhcyB0aGUgc3RydWN0dXJlIGRlZmlu
aXRpb24gaXMgc2hhcmVkIGJldHdlZW4gdmFyaW91cyBzdHJ1Y3R1cmVzLgotICAgICAgICAgICAg
ICAgICAgICAgICAgJCQtPmdldFR5cGVQb2ludGVyKCktPnNldFF1YWxpZmllcihFdnFDb25zdCk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bMV07Ci0gICAgICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChpKTsKLSAg
ICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksICpmaWVsZHNbaV0tPnR5cGUoKSwgQDMp
OwotICAgICAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRl
eChFT3BJbmRleERpcmVjdFN0cnVjdCwgJDEsIGluZGV4LCBAMik7Ci0gICAgICAgICAgICAgICAg
ICAgICQkLT5zZXRUeXBlKCpmaWVsZHNbaV0tPnR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwg
IiBubyBzdWNoIGZpZWxkIGluIHN0cnVjdHVyZSIsICQzLnN0cmluZy0+Y19zdHIoKSk7Ci0gICAg
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICQkID0gJDE7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5l
cnJvcihAMiwgIiBmaWVsZCBzZWxlY3Rpb24gcmVxdWlyZXMgc3RydWN0dXJlLCB2ZWN0b3IsIG9y
IG1hdHJpeCBvbiBsZWZ0IGhhbmQgc2lkZSIsICQzLnN0cmluZy0+Y19zdHIoKSk7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICB9
Ci0gICAgICAgIC8vIGRvbid0IGRlbGV0ZSAkMy5zdHJpbmcsIGl0J3MgZnJvbSB0aGUgcG9vbAot
ICAgIH0KLSAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBJTkNfT1AgewotICAgICAgICBpZiAoY29u
dGV4dC0+bFZhbHVlRXJyb3JDaGVjayhAMiwgIisrIiwgJDEpKQotICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFy
eU1hdGgoRU9wUG9zdEluY3JlbWVudCwgJDEsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0g
ICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3Io
QDIsICIrKyIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgICAgICQkID0gJDE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
fCBwb3N0Zml4X2V4cHJlc3Npb24gREVDX09QIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1
ZUVycm9yQ2hlY2soQDIsICItLSIsICQxKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFBv
c3REZWNyZW1lbnQsICQxLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAo
JCQgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKEAyLCAiLS0iLCAk
MS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0gICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICB9Ci0gICAgfQotICAgIDsKLQotaW50ZWdl
cl9leHByZXNzaW9uCi0gICAgOiBleHByZXNzaW9uIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPmlu
dGVnZXJFcnJvckNoZWNrKCQxLCAiW10iKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgJCQgPSAkMTsKLSAgICB9Ci0gICAgOwotCi1mdW5jdGlvbl9jYWxsCi0gICAg
OiBmdW5jdGlvbl9jYWxsX29yX21ldGhvZCB7Ci0gICAgICAgIFRGdW5jdGlvbiogZm5DYWxsID0g
JDEuZnVuY3Rpb247Ci0gICAgICAgIFRPcGVyYXRvciBvcCA9IGZuQ2FsbC0+Z2V0QnVpbHRJbk9w
KCk7Ci0KLSAgICAgICAgaWYgKG9wICE9IEVPcE51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IC8vCi0gICAgICAgICAgICAvLyBUaGVuIHRoaXMgc2hvdWxkIGJlIGEgY29uc3RydWN0b3IuCi0g
ICAgICAgICAgICAvLyBEb24ndCBnbyB0aHJvdWdoIHRoZSBzeW1ib2wgdGFibGUgZm9yIGNvbnN0
cnVjdG9ycy4KLSAgICAgICAgICAgIC8vIFRoZWlyIHBhcmFtZXRlcnMgd2lsbCBiZSB2ZXJpZmll
ZCBhbGdvcml0aG1pY2FsbHkuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgVFR5cGUgdHlw
ZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpOyAgLy8gdXNlIHRoaXMgdG8gZ2V0IHRoZSB0eXBlIGJh
Y2sKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5jb25zdHJ1Y3RvckVycm9yQ2hlY2soQDEsICQx
LmludGVybU5vZGUsICpmbkNhbGwsIG9wLCAmdHlwZSkpIHsKLSAgICAgICAgICAgICAgICAkJCA9
IDA7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAg
ICAgICAgLy8gSXQncyBhIGNvbnN0cnVjdG9yLCBvZiB0eXBlICd0eXBlJy4KLSAgICAgICAgICAg
ICAgICAvLwotICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+YWRkQ29uc3RydWN0b3IoJDEu
aW50ZXJtTm9kZSwgJnR5cGUsIG9wLCBmbkNhbGwsIEAxKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVn
YXRlT3BlcmF0b3IoMCwgb3AsIEAxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICQkLT5z
ZXRUeXBlKHR5cGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8KLSAgICAgICAg
ICAgIC8vIE5vdCBhIGNvbnN0cnVjdG9yLiAgRmluZCBpdCBpbiB0aGUgc3ltYm9sIHRhYmxlLgot
ICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiogZm5DYW5kaWRhdGU7
Ci0gICAgICAgICAgICBib29sIGJ1aWx0SW47Ci0gICAgICAgICAgICBmbkNhbmRpZGF0ZSA9IGNv
bnRleHQtPmZpbmRGdW5jdGlvbihAMSwgZm5DYWxsLCAmYnVpbHRJbik7Ci0gICAgICAgICAgICBp
ZiAoZm5DYW5kaWRhdGUpIHsKLSAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIC8v
IEEgZGVjbGFyZWQgZnVuY3Rpb24uCi0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAg
ICBpZiAoYnVpbHRJbiAmJiAhZm5DYW5kaWRhdGUtPmdldEV4dGVuc2lvbigpLmVtcHR5KCkgJiYK
LSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjayhAMSwgZm5D
YW5kaWRhdGUtPmdldEV4dGVuc2lvbigpKSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG9wID0gZm5D
YW5kaWRhdGUtPmdldEJ1aWx0SW5PcCgpOwotICAgICAgICAgICAgICAgIGlmIChidWlsdEluICYm
IG9wICE9IEVPcE51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAg
ICAgICAgLy8gQSBmdW5jdGlvbiBjYWxsIG1hcHBlZCB0byBhIGJ1aWx0LWluIG9wZXJhdGlvbi4K
LSAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgaWYgKGZuQ2FuZGlk
YXRlLT5nZXRQYXJhbUNvdW50KCkgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8K
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyZWF0IGl0IGxpa2UgYSBidWlsdC1pbiB1bmFy
eSBvcGVyYXRvci4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAg
ICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgob3AsICQxLmlu
dGVybU5vZGUsIEAxLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoJCQgPT0gMCkgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0
cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXh0cmFJbmZvU3RyZWFtIDw8ICJidWlsdCBpbiB1bmFyeSBvcGVyYXRvciBmdW5jdGlvbi4gIFR5
cGU6ICIgPDwgc3RhdGljX2Nhc3Q8VEludGVybVR5cGVkKj4oJDEuaW50ZXJtTm9kZSktPmdldENv
bXBsZXRlU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcg
ZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmludGVybU5vZGUtPmdldExpbmUoKSwgIiB3cm9uZyBv
cGVyYW5kIHR5cGUiLCAiSW50ZXJuYWwgRXJyb3IiLCBleHRyYUluZm8uY19zdHIoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgWVlFUlJPUjsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKCQxLmludGVy
bUFnZ3JlZ2F0ZSwgb3AsIEAxKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSByZWFsIGZ1bmN0
aW9uIGNhbGwKLQotICAgICAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcigkMS5pbnRlcm1BZ2dyZWdhdGUsIEVPcEZ1bmN0aW9uQ2Fs
bCwgQDEpOwotICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShmbkNhbmRpZGF0ZS0+Z2V0
UmV0dXJuVHlwZSgpKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGhvdyB3ZSBr
bm93IHdoZXRoZXIgdGhlIGdpdmVuIGZ1bmN0aW9uIGlzIGEgYnVpbHRJbiBmdW5jdGlvbiBvciBh
IHVzZXIgZGVmaW5lZCBmdW5jdGlvbgotICAgICAgICAgICAgICAgICAgICAvLyBpZiBidWlsdElu
ID09IGZhbHNlLCBpdCdzIGEgdXNlckRlZmluZWQgLT4gY291bGQgYmUgYW4gb3ZlcmxvYWRlZCBi
dWlsdEluIGZ1bmN0aW9uIGFsc28KLSAgICAgICAgICAgICAgICAgICAgLy8gaWYgYnVpbHRJbiA9
PSB0cnVlLCBpdCdzIGRlZmluaXRlbHkgYSBidWlsdEluIGZ1bmN0aW9uIHdpdGggRU9wTnVsbAot
ICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1aWx0SW4pCi0gICAgICAgICAgICAgICAgICAgICAg
ICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0VXNlckRlZmluZWQoKTsKLSAgICAgICAgICAgICAg
ICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldE5hbWUoZm5DYW5kaWRhdGUtPmdldE1hbmds
ZWROYW1lKCkpOwotCi0gICAgICAgICAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbDsKLSAgICAg
ICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmbkNhbmRpZGF0ZS0+Z2V0UGFy
YW1Db3VudCgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHF1YWwgPSBmbkNhbmRp
ZGF0ZS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocXVhbCA9PSBFdnFPdXQgfHwgcXVhbCA9PSBFdnFJbk91dCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCQkLT5n
ZXRMaW5lKCksICJhc3NpZ24iLCAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKVtp
XS0+Z2V0QXNUeXBlZCgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigkMS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCksICJDb25zdGFudCB2YWx1ZSBjYW5u
b3QgYmUgcGFzc2VkIGZvciAnb3V0JyBvciAnaW5vdXQnIHBhcmFtZXRlcnMuIiwgIkVycm9yIik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
JCQtPnNldFR5cGUoZm5DYW5kaWRhdGUtPmdldFJldHVyblR5cGUoKSk7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIGVycm9yIG1lc3NhZ2Ugd2FzIHB1dCBvdXQgYnkg
UGFGaW5kRnVuY3Rpb24oKQotICAgICAgICAgICAgICAgIC8vIFB1dCBvbiBhIGR1bW15IG5vZGUg
Zm9yIGVycm9yIHJlY292ZXJ5Ci0gICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25B
cnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgIHVuaW9uQXJyYXkt
PnNldEZDb25zdCgwLjBmKTsKLSAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEZsb2F0LCBFYnBVbmRl
ZmluZWQsIEV2cUNvbnN0KSwgQDEpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBkZWxldGUgZm5DYWxsOwotICAg
IH0KLSAgICA7Ci0KLWZ1bmN0aW9uX2NhbGxfb3JfbWV0aG9kCi0gICAgOiBmdW5jdGlvbl9jYWxs
X2dlbmVyaWMgewotICAgICAgICAkJCA9ICQxOwotICAgIH0KLSAgICB8IHBvc3RmaXhfZXhwcmVz
c2lvbiBET1QgZnVuY3Rpb25fY2FsbF9nZW5lcmljIHsKLSAgICAgICAgY29udGV4dC0+ZXJyb3Io
QDMsICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIpOwotICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0gICAgICAgICQkID0gJDM7Ci0gICAgfQotICAgIDsKLQotZnVuY3Rpb25fY2Fs
bF9nZW5lcmljCi0gICAgOiBmdW5jdGlvbl9jYWxsX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMgUklH
SFRfUEFSRU4gewotICAgICAgICAkJCA9ICQxOwotICAgIH0KLSAgICB8IGZ1bmN0aW9uX2NhbGxf
aGVhZGVyX25vX3BhcmFtZXRlcnMgUklHSFRfUEFSRU4gewotICAgICAgICAkJCA9ICQxOwotICAg
IH0KLSAgICA7Ci0KLWZ1bmN0aW9uX2NhbGxfaGVhZGVyX25vX3BhcmFtZXRlcnMKLSAgICA6IGZ1
bmN0aW9uX2NhbGxfaGVhZGVyIFZPSURfVFlQRSB7Ci0gICAgICAgICQkLmZ1bmN0aW9uID0gJDE7
Ci0gICAgICAgICQkLmludGVybU5vZGUgPSAwOwotICAgIH0KLSAgICB8IGZ1bmN0aW9uX2NhbGxf
aGVhZGVyIHsKLSAgICAgICAgJCQuZnVuY3Rpb24gPSAkMTsKLSAgICAgICAgJCQuaW50ZXJtTm9k
ZSA9IDA7Ci0gICAgfQotICAgIDsKLQotZnVuY3Rpb25fY2FsbF9oZWFkZXJfd2l0aF9wYXJhbWV0
ZXJzCi0gICAgOiBmdW5jdGlvbl9jYWxsX2hlYWRlciBhc3NpZ25tZW50X2V4cHJlc3Npb24gewot
ICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUoJDItPmdldFR5cGUoKSkg
fTsKLSAgICAgICAgJDEtPmFkZFBhcmFtZXRlcihwYXJhbSk7Ci0gICAgICAgICQkLmZ1bmN0aW9u
ID0gJDE7Ci0gICAgICAgICQkLmludGVybU5vZGUgPSAkMjsKLSAgICB9Ci0gICAgfCBmdW5jdGlv
bl9jYWxsX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMgQ09NTUEgYXNzaWdubWVudF9leHByZXNzaW9u
IHsKLSAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBlKCQzLT5nZXRUeXBl
KCkpIH07Ci0gICAgICAgICQxLmZ1bmN0aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW0pOwotICAgICAg
ICAkJC5mdW5jdGlvbiA9ICQxLmZ1bmN0aW9uOwotICAgICAgICAkJC5pbnRlcm1Ob2RlID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJtTm9kZSwgJDMsIEAyKTsK
LSAgICB9Ci0gICAgOwotCi1mdW5jdGlvbl9jYWxsX2hlYWRlcgotICAgIDogZnVuY3Rpb25faWRl
bnRpZmllciBMRUZUX1BBUkVOIHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICB9Ci0gICAgOwotCi0v
LyBHcmFtbWFyIE5vdGU6ICBDb25zdHJ1Y3RvcnMgbG9vayBsaWtlIGZ1bmN0aW9ucywgYnV0IGFy
ZSByZWNvZ25pemVkIGFzIHR5cGVzLgotCi1mdW5jdGlvbl9pZGVudGlmaWVyCi0gICAgOiB0eXBl
X3NwZWNpZmllcl9ub25hcnJheSB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIENvbnN0cnVjdG9y
Ci0gICAgICAgIC8vCi0gICAgICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7Ci0gICAgICAgIGlm
ICgkMS51c2VyRGVmKSB7Ci0gICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdFN0cnVjdDsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN3aXRjaCAoJDEudHlwZSkgewotICAgICAgICAg
ICAgY2FzZSBFYnRGbG9hdDoKLSAgICAgICAgICAgICAgICBpZiAoJDEubWF0cml4KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHN3aXRjaCgkMS5zaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNh
c2UgMjogb3AgPSBFT3BDb25zdHJ1Y3RNYXQyOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RNYXQzOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RNYXQ0OyAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBz
d2l0Y2goJDEuc2l6ZSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IG9wID0gRU9wQ29u
c3RydWN0RmxvYXQ7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9w
Q29uc3RydWN0VmVjMjsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0g
RU9wQ29uc3RydWN0VmVjMzsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IG9w
ID0gRU9wQ29uc3RydWN0VmVjNDsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBF
YnRJbnQ6Ci0gICAgICAgICAgICAgICAgc3dpdGNoKCQxLnNpemUpIHsKLSAgICAgICAgICAgICAg
ICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0SW50OyAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IGNhc2UgMjogb3AgPSBFT3BDb25zdHJ1Y3RJVmVjMjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
Y2FzZSAzOiBvcCA9IEVPcENvbnN0cnVjdElWZWMzOyBicmVhazsKLSAgICAgICAgICAgICAgICBj
YXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0SVZlYzQ7IGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKLSAgICAg
ICAgICAgICAgICBzd2l0Y2goJDEuc2l6ZSkgewotICAgICAgICAgICAgICAgIGNhc2UgMTogb3Ag
PSBFT3BDb25zdHJ1Y3RCb29sOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9
IEVPcENvbnN0cnVjdEJWZWMyOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0g
RU9wQ29uc3RydWN0QlZlYzM7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBF
T3BDb25zdHJ1Y3RCVmVjNDsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAob3AgPT0gRU9wTnVsbCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKEAxLCAiY2Fubm90IGNvbnN0cnVjdCB0aGlzIHR5cGUiLCBnZXRCYXNpY1N0cmluZygk
MS50eXBlKSk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAg
ICAgICAgICQxLnR5cGUgPSBFYnRGbG9hdDsKLSAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0
cnVjdEZsb2F0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIFRTdHJpbmcgdGVt
cFN0cmluZzsKLSAgICAgICAgVFR5cGUgdHlwZSgkMSk7Ci0gICAgICAgIFRGdW5jdGlvbiAqZnVu
Y3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCZ0ZW1wU3RyaW5nLCB0eXBlLCBvcCk7Ci0gICAgICAgICQk
ID0gZnVuY3Rpb247Ci0gICAgfQotICAgIHwgSURFTlRJRklFUiB7Ci0gICAgICAgIGlmIChjb250
ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soQDEsICokMS5zdHJpbmcpKQotICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBUVHlwZSB0eXBlKEVidFZvaWQsIEVicFVuZGVmaW5l
ZCk7Ci0gICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCQxLnN0cmlu
ZywgdHlwZSk7Ci0gICAgICAgICQkID0gZnVuY3Rpb247Ci0gICAgfQotICAgIDsKLQotdW5hcnlf
ZXhwcmVzc2lvbgotICAgIDogcG9zdGZpeF9leHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSAkMTsK
LSAgICB9Ci0gICAgfCBJTkNfT1AgdW5hcnlfZXhwcmVzc2lvbiB7Ci0gICAgICAgIGlmIChjb250
ZXh0LT5sVmFsdWVFcnJvckNoZWNrKEAxLCAiKysiLCAkMikpCi0gICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5
TWF0aChFT3BQcmVJbmNyZW1lbnQsICQyLCBAMSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAg
ICAgICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKEAx
LCAiKysiLCAkMi0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0gICAgICAgICAgICAkJCA9ICQyOwotICAgICAgICB9Ci0gICAgfQotICAgIHwg
REVDX09QIHVuYXJ5X2V4cHJlc3Npb24gewotICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJy
b3JDaGVjayhAMSwgIi0tIiwgJDIpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUHJlRGVj
cmVtZW50LCAkMiwgQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCQkID09
IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcihAMSwgIi0tIiwgJDItPmdl
dENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICAgICAgJCQgPSAkMjsKLSAgICAgICAgfQotICAgIH0KLSAgICB8IHVuYXJ5X29wZXJhdG9y
IHVuYXJ5X2V4cHJlc3Npb24gewotICAgICAgICBpZiAoJDEub3AgIT0gRU9wTnVsbCkgewotICAg
ICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKCQxLm9wLCAk
MiwgQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKLSAgICAgICAgICAgIGlmICgkJCA9PSAwKSB7
Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXJyb3JPcCA9ICIiOwotICAgICAgICAgICAg
ICAgIHN3aXRjaCgkMS5vcCkgewotICAgICAgICAgICAgICAgIGNhc2UgRU9wTmVnYXRpdmU6ICAg
ZXJyb3JPcCA9ICItIjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90
OiBlcnJvck9wID0gIiEiOyBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OiBicmVhazsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9y
KEAxLCBlcnJvck9wLCAkMi0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICQkID0gJDI7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgJCQgPSAkMjsKLSAgICB9Ci0gICAgOwot
Ly8gR3JhbW1hciBOb3RlOiAgTm8gdHJhZGl0aW9uYWwgc3R5bGUgdHlwZSBjYXN0cy4KLQotdW5h
cnlfb3BlcmF0b3IKLSAgICA6IFBMVVMgIHsgJCQub3AgPSBFT3BOdWxsOyB9Ci0gICAgfCBEQVNI
ICB7ICQkLm9wID0gRU9wTmVnYXRpdmU7IH0KLSAgICB8IEJBTkcgIHsgJCQub3AgPSBFT3BMb2dp
Y2FsTm90OyB9Ci0gICAgOwotLy8gR3JhbW1hciBOb3RlOiAgTm8gJyonIG9yICcmJyB1bmFyeSBv
cHMuICBQb2ludGVycyBhcmUgbm90IHN1cHBvcnRlZC4KLQotbXVsdGlwbGljYXRpdmVfZXhwcmVz
c2lvbgotICAgIDogdW5hcnlfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KLSAgICB8IG11bHRpcGxp
Y2F0aXZlX2V4cHJlc3Npb24gU1RBUiB1bmFyeV9leHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BNdWwsICQxLCAkMywgQDIsIGNv
bnRleHQtPnN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAg
IGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICIqIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCks
ICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgICAgICQkID0gJDE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgfCBtdWx0aXBs
aWNhdGl2ZV9leHByZXNzaW9uIFNMQVNIIHVuYXJ5X2V4cHJlc3Npb24gewotICAgICAgICAkJCA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcERpdiwgJDEsICQzLCBAMiwg
Y29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoJCQgPT0gMCkgewotICAgICAgICAg
ICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIi8iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmco
KSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotICAgICAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgfQotICAgIH0KLSAgICA7Ci0KLWFk
ZGl0aXZlX2V4cHJlc3Npb24KLSAgICA6IG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24geyAkJCA9
ICQxOyB9Ci0gICAgfCBhZGRpdGl2ZV9leHByZXNzaW9uIFBMVVMgbXVsdGlwbGljYXRpdmVfZXhw
cmVzc2lvbiB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1h
dGgoRU9wQWRkLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlm
ICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiKyIs
ICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkJCA9ICQxOwotICAgICAg
ICB9Ci0gICAgfQotICAgIHwgYWRkaXRpdmVfZXhwcmVzc2lvbiBEQVNIIG11bHRpcGxpY2F0aXZl
X2V4cHJlc3Npb24gewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5h
cnlNYXRoKEVPcFN1YiwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAg
ICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwg
Ii0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgJCQgPSAkMTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICA7Ci0KLXNoaWZ0X2V4cHJlc3Npb24KLSAgICA6IGFkZGl0aXZl
X2V4cHJlc3Npb24geyAkJCA9ICQxOyB9Ci0gICAgOwotCi1yZWxhdGlvbmFsX2V4cHJlc3Npb24K
LSAgICA6IHNoaWZ0X2V4cHJlc3Npb24geyAkJCA9ICQxOyB9Ci0gICAgfCByZWxhdGlvbmFsX2V4
cHJlc3Npb24gTEVGVF9BTkdMRSBzaGlmdF9leHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhhbiwgJDEsICQzLCBAMiwg
Y29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoJCQgPT0gMCkgewotICAgICAgICAg
ICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIjwiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmco
KSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFu
dFVuaW9uWzFdOwotICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAg
ICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5p
b25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAyKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICB8IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiBSSUdIVF9BTkdMRSBz
aGlmdF9leHByZXNzaW9uICB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZEJpbmFyeU1hdGgoRU9wR3JlYXRlclRoYW4sICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRh
YmxlKTsKLSAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmJpbmFy
eU9wRXJyb3IoQDIsICI+IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0
ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAg
IENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAg
ICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVi
dEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMik7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgfCByZWxhdGlvbmFsX2V4cHJlc3Npb24gTEVfT1Agc2hpZnRfZXhwcmVzc2lvbiAgewotICAg
ICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExlc3NUaGFu
RXF1YWwsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCQk
ID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICI8PSIsICQx
LT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlv
bkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICB1bmlvbkFycmF5LT5z
ZXRCQ29uc3QoZmFsc2UpOwotICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQs
IEV2cUNvbnN0KSwgQDIpOwotICAgICAgICB9Ci0gICAgfQotICAgIHwgcmVsYXRpb25hbF9leHBy
ZXNzaW9uIEdFX09QIHNoaWZ0X2V4cHJlc3Npb24gIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbkVxdWFsLCAkMSwgJDMsIEAy
LCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiPj0iLCAkMS0+Z2V0Q29tcGxldGVTdHJp
bmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uWzFdOwotICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsK
LSAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24o
dW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAyKTsK
LSAgICAgICAgfQotICAgIH0KLSAgICA7Ci0KLWVxdWFsaXR5X2V4cHJlc3Npb24KLSAgICA6IHJl
bGF0aW9uYWxfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KLSAgICB8IGVxdWFsaXR5X2V4cHJlc3Np
b24gRVFfT1AgcmVsYXRpb25hbF9leHByZXNzaW9uICB7Ci0gICAgICAgICQkID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wRXF1YWwsICQxLCAkMywgQDIsIGNvbnRleHQt
PnN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgIGNvbnRl
eHQtPmJpbmFyeU9wRXJyb3IoQDIsICI9PSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+
Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25b
MV07Ci0gICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwotICAgICAgICAg
ICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5
LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDIpOwotICAgICAgICB9
Ci0gICAgfQotICAgIHwgZXF1YWxpdHlfZXhwcmVzc2lvbiBORV9PUCByZWxhdGlvbmFsX2V4cHJl
c3Npb24gewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRo
KEVPcE5vdEVxdWFsLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAg
IGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAi
IT0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgQ29uc3RhbnRVbmlv
biAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgdW5pb25B
cnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5k
ZWZpbmVkLCBFdnFDb25zdCksIEAyKTsKLSAgICAgICAgfQotICAgIH0KLSAgICA7Ci0KLWFuZF9l
eHByZXNzaW9uCi0gICAgOiBlcXVhbGl0eV9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQotICAgIDsK
LQotZXhjbHVzaXZlX29yX2V4cHJlc3Npb24KLSAgICA6IGFuZF9leHByZXNzaW9uIHsgJCQgPSAk
MTsgfQotICAgIDsKLQotaW5jbHVzaXZlX29yX2V4cHJlc3Npb24KLSAgICA6IGV4Y2x1c2l2ZV9v
cl9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQotICAgIDsKLQotbG9naWNhbF9hbmRfZXhwcmVzc2lv
bgotICAgIDogaW5jbHVzaXZlX29yX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9Ci0gICAgfCBsb2dp
Y2FsX2FuZF9leHByZXNzaW9uIEFORF9PUCBpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbiB7Ci0gICAg
ICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbEFu
ZCwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoJCQgPT0g
MCkgewotICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIiYmIiwgJDEtPmdl
dENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJy
YXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJD
b25zdChmYWxzZSk7Ci0gICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZx
Q29uc3QpLCBAMik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgOwotCi1sb2dpY2FsX3hvcl9leHBy
ZXNzaW9uCi0gICAgOiBsb2dpY2FsX2FuZF9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQotICAgIHwg
bG9naWNhbF94b3JfZXhwcmVzc2lvbiBYT1JfT1AgbG9naWNhbF9hbmRfZXhwcmVzc2lvbiAgewot
ICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2lj
YWxYb3IsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCQk
ID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICJeXiIsICQx
LT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlv
bkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICB1bmlvbkFycmF5LT5z
ZXRCQ29uc3QoZmFsc2UpOwotICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQs
IEV2cUNvbnN0KSwgQDIpOwotICAgICAgICB9Ci0gICAgfQotICAgIDsKLQotbG9naWNhbF9vcl9l
eHByZXNzaW9uCi0gICAgOiBsb2dpY2FsX3hvcl9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQotICAg
IHwgbG9naWNhbF9vcl9leHByZXNzaW9uIE9SX09QIGxvZ2ljYWxfeG9yX2V4cHJlc3Npb24gIHsK
LSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dp
Y2FsT3IsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCQk
ID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICJ8fCIsICQx
LT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlv
bkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICB1bmlvbkFycmF5LT5z
ZXRCQ29uc3QoZmFsc2UpOwotICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQs
IEV2cUNvbnN0KSwgQDIpOwotICAgICAgICB9Ci0gICAgfQotICAgIDsKLQotY29uZGl0aW9uYWxf
ZXhwcmVzc2lvbgotICAgIDogbG9naWNhbF9vcl9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQotICAg
IHwgbG9naWNhbF9vcl9leHByZXNzaW9uIFFVRVNUSU9OIGV4cHJlc3Npb24gQ09MT04gYXNzaWdu
bWVudF9leHByZXNzaW9uIHsKLSAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2soQDIs
ICQxKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRTZWxlY3Rpb24oJDEsICQzLCAkNSwgQDIpOwotICAgICAg
ICBpZiAoJDMtPmdldFR5cGUoKSAhPSAkNS0+Z2V0VHlwZSgpKQotICAgICAgICAgICAgJCQgPSAw
OwotCi0gICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlP
cEVycm9yKEAyLCAiOiIsICQzLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkNS0+Z2V0Q29tcGxldGVT
dHJpbmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAk
JCA9ICQ1OwotICAgICAgICB9Ci0gICAgfQotICAgIDsKLQotYXNzaWdubWVudF9leHByZXNzaW9u
Ci0gICAgOiBjb25kaXRpb25hbF9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQotICAgIHwgdW5hcnlf
ZXhwcmVzc2lvbiBhc3NpZ25tZW50X29wZXJhdG9yIGFzc2lnbm1lbnRfZXhwcmVzc2lvbiB7Ci0g
ICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKEAyLCAiYXNzaWduIiwgJDEpKQot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJCA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRBc3NpZ24oJDIub3AsICQxLCAkMywgQDIpOwotICAgICAgICBpZiAoJCQg
PT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+YXNzaWduRXJyb3IoQDIsICJhc3NpZ24iLCAk
MS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgJCQgPSAkMTsKLSAgICAgICAg
fQotICAgIH0KLSAgICA7Ci0KLWFzc2lnbm1lbnRfb3BlcmF0b3IKLSAgICA6IEVRVUFMICAgICAg
ICB7ICQkLm9wID0gRU9wQXNzaWduOyB9Ci0gICAgfCBNVUxfQVNTSUdOICAgeyAkJC5vcCA9IEVP
cE11bEFzc2lnbjsgfQotICAgIHwgRElWX0FTU0lHTiAgIHsgJCQub3AgPSBFT3BEaXZBc3NpZ247
IH0KLSAgICB8IEFERF9BU1NJR04gICB7ICQkLm9wID0gRU9wQWRkQXNzaWduOyB9Ci0gICAgfCBT
VUJfQVNTSUdOICAgeyAkJC5vcCA9IEVPcFN1YkFzc2lnbjsgfQotICAgIDsKLQotZXhwcmVzc2lv
bgotICAgIDogYXNzaWdubWVudF9leHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICB9
Ci0gICAgfCBleHByZXNzaW9uIENPTU1BIGFzc2lnbm1lbnRfZXhwcmVzc2lvbiB7Ci0gICAgICAg
ICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbW1hKCQxLCAkMywgQDIpOwotICAgICAg
ICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwg
IiwiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgJCQgPSAkMzsKLSAg
ICAgICAgfQotICAgIH0KLSAgICA7Ci0KLWNvbnN0YW50X2V4cHJlc3Npb24KLSAgICA6IGNvbmRp
dGlvbmFsX2V4cHJlc3Npb24gewotICAgICAgICBpZiAoY29udGV4dC0+Y29uc3RFcnJvckNoZWNr
KCQxKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgJCQgPSAkMTsK
LSAgICB9Ci0gICAgOwotCi1kZWNsYXJhdGlvbgotICAgIDogZnVuY3Rpb25fcHJvdG90eXBlIFNF
TUlDT0xPTiAgIHsKLSAgICAgICAgVEZ1bmN0aW9uICZmdW5jdGlvbiA9ICooJDEuZnVuY3Rpb24p
OwotICAgICAgICAKLSAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSAqcHJvdG90eXBlID0gbmV3IFRJ
bnRlcm1BZ2dyZWdhdGU7Ci0gICAgICAgIHByb3RvdHlwZS0+c2V0VHlwZShmdW5jdGlvbi5nZXRS
ZXR1cm5UeXBlKCkpOwotICAgICAgICBwcm90b3R5cGUtPnNldE5hbWUoZnVuY3Rpb24uZ2V0TmFt
ZSgpKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb24u
Z2V0UGFyYW1Db3VudCgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IFRQYXJh
bWV0ZXIgJnBhcmFtID0gZnVuY3Rpb24uZ2V0UGFyYW0oaSk7Ci0gICAgICAgICAgICBpZiAocGFy
YW0ubmFtZSAhPSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFRWYXJpYWJsZSB2
YXJpYWJsZShwYXJhbS5uYW1lLCAqcGFyYW0udHlwZSk7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgcHJvdG90eXBlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdh
dGUocHJvdG90eXBlLCBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLmdl
dFVuaXF1ZUlkKCksIHZhcmlhYmxlLmdldE5hbWUoKSwgdmFyaWFibGUuZ2V0VHlwZSgpLCBAMSks
IEAxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBwcm90b3R5cGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3Jl
Z2F0ZShwcm90b3R5cGUsIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsICpw
YXJhbS50eXBlLCBAMSksIEAxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgcHJvdG90eXBlLT5zZXRPcChFT3BQcm90b3R5cGUpOwotICAgICAgICAkJCA9IHBy
b3RvdHlwZTsKLQotICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKLSAgICB9Ci0g
ICAgfCBpbml0X2RlY2xhcmF0b3JfbGlzdCBTRU1JQ09MT04gewotICAgICAgICBpZiAoJDEuaW50
ZXJtQWdncmVnYXRlKQotICAgICAgICAgICAgJDEuaW50ZXJtQWdncmVnYXRlLT5zZXRPcChFT3BE
ZWNsYXJhdGlvbik7Ci0gICAgICAgICQkID0gJDEuaW50ZXJtQWdncmVnYXRlOwotICAgIH0KLSAg
ICB8IFBSRUNJU0lPTiBwcmVjaXNpb25fcXVhbGlmaWVyIHR5cGVfc3BlY2lmaWVyX25vX3ByZWMg
U0VNSUNPTE9OIHsKLSAgICAgICAgaWYgKCgkMiA9PSBFYnBIaWdoKSAmJiAoY29udGV4dC0+c2hh
ZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpICYmICFjb250ZXh0LT5mcmFnbWVudFByZWNp
c2lvbkhpZ2gpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAicHJlY2lzaW9uIGlz
IG5vdCBzdXBwb3J0ZWQgaW4gZnJhZ21lbnQgc2hhZGVyIiwgImhpZ2hwIik7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFjb250ZXh0LT5z
eW1ib2xUYWJsZS5zZXREZWZhdWx0UHJlY2lzaW9uKCAkMywgJDIgKSkgewotICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoQDEsICJpbGxlZ2FsIHR5cGUgYXJndW1lbnQgZm9yIGRlZmF1bHQgcHJl
Y2lzaW9uIHF1YWxpZmllciIsIGdldEJhc2ljU3RyaW5nKCQzLnR5cGUpKTsKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICAkJCA9IDA7Ci0gICAgfQot
ICAgIDsKLQotZnVuY3Rpb25fcHJvdG90eXBlCi0gICAgOiBmdW5jdGlvbl9kZWNsYXJhdG9yIFJJ
R0hUX1BBUkVOICB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIE11bHRpcGxlIGRlY2xhcmF0aW9u
cyBvZiB0aGUgc2FtZSBmdW5jdGlvbiBhcmUgYWxsb3dlZC4KLSAgICAgICAgLy8KLSAgICAgICAg
Ly8gSWYgdGhpcyBpcyBhIGRlZmluaXRpb24sIHRoZSBkZWZpbml0aW9uIHByb2R1Y3Rpb24gY29k
ZSB3aWxsIGNoZWNrIGZvciByZWRlZmluaXRpb25zCi0gICAgICAgIC8vICh3ZSBkb24ndCBrbm93
IGF0IHRoaXMgcG9pbnQgaWYgaXQncyBhIGRlZmluaXRpb24gb3Igbm90KS4KLSAgICAgICAgLy8K
LSAgICAgICAgLy8gUmVkZWNsYXJhdGlvbnMgYXJlIGFsbG93ZWQuICBCdXQsIHJldHVybiB0eXBl
cyBhbmQgcGFyYW1ldGVyIHF1YWxpZmllcnMgbXVzdCBtYXRjaC4KLSAgICAgICAgLy8KLSAgICAg
ICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+
c3ltYm9sVGFibGUuZmluZCgkMS0+Z2V0TWFuZ2xlZE5hbWUoKSkpOwotICAgICAgICBpZiAocHJl
dkRlYykgewotICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdldFJldHVyblR5cGUoKSAhPSAkMS0+
Z2V0UmV0dXJuVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJv
dmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0dXJuIHR5cGUiLCAkMS0+
Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcHJldkRlYy0+Z2V0UGFyYW1Db3VudCgpOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICBpZiAocHJldkRlYy0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCkgIT0gJDEtPmdl
dFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKEAyLCAib3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1l
IHBhcmFtZXRlciBxdWFsaWZpZXJzIiwgJDEtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmll
clN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vCi0g
ICAgICAgIC8vIENoZWNrIGZvciBwcmV2aW91c2x5IGRlY2xhcmVkIHZhcmlhYmxlcyB1c2luZyB0
aGUgc2FtZSBuYW1lLgotICAgICAgICAvLwotICAgICAgICBUU3ltYm9sICpwcmV2U3ltID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuZmluZCgkMS0+Z2V0TmFtZSgpKTsKLSAgICAgICAgaWYgKHByZXZT
eW0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghcHJldlN5bS0+aXNGdW5jdGlvbigpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAicmVkZWZp
bml0aW9uIiwgJDEtPmdldE5hbWUoKS5jX3N0cigpLCAiZnVuY3Rpb24iKTsKLSAgICAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBJbnNlcnQgdGhlIHVubWFuZ2xlZCBu
YW1lIHRvIGRldGVjdCBwb3RlbnRpYWwgZnV0dXJlIHJlZGVmaW5pdGlvbiBhcyBhIHZhcmlhYmxl
LgotICAgICAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUuZ2V0T3V0ZXJMZXZlbCgpLT5pbnNl
cnQoJDEtPmdldE5hbWUoKSwgKiQxKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vCi0gICAgICAg
IC8vIElmIHRoaXMgaXMgYSByZWRlY2xhcmF0aW9uLCBpdCBjb3VsZCBhbHNvIGJlIGEgZGVmaW5p
dGlvbiwKLSAgICAgICAgLy8gaW4gd2hpY2ggY2FzZSwgd2Ugd2FudCB0byB1c2UgdGhlIHZhcmlh
YmxlIG5hbWVzIGZyb20gdGhpcyBvbmUsIGFuZCBub3QgdGhlIG9uZSB0aGF0J3MKLSAgICAgICAg
Ly8gYmVpbmcgcmVkZWNsYXJlZC4gIFNvLCBwYXNzIGJhY2sgdXAgdGhpcyBkZWNsYXJhdGlvbiwg
bm90IHRoZSBvbmUgaW4gdGhlIHN5bWJvbCB0YWJsZS4KLSAgICAgICAgLy8KLSAgICAgICAgJCQu
ZnVuY3Rpb24gPSAkMTsKLQotICAgICAgICAvLyBXZSdyZSBhdCB0aGUgaW5uZXIgc2NvcGUgbGV2
ZWwgb2YgdGhlIGZ1bmN0aW9uJ3MgYXJndW1lbnRzIGFuZCBib2R5IHN0YXRlbWVudC4KLSAgICAg
ICAgLy8gQWRkIHRoZSBmdW5jdGlvbiBwcm90b3R5cGUgdG8gdGhlIHN1cnJvdW5kaW5nIHNjb3Bl
IGluc3RlYWQuCi0gICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLmdldE91dGVyTGV2ZWwoKS0+
aW5zZXJ0KCokJC5mdW5jdGlvbik7Ci0gICAgfQotICAgIDsKLQotZnVuY3Rpb25fZGVjbGFyYXRv
cgotICAgIDogZnVuY3Rpb25faGVhZGVyIHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICB9Ci0gICAg
fCBmdW5jdGlvbl9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIHsKLSAgICAgICAgJCQgPSAkMTsKLSAg
ICB9Ci0gICAgOwotCi0KLWZ1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMKLSAgICA6IGZ1
bmN0aW9uX2hlYWRlciBwYXJhbWV0ZXJfZGVjbGFyYXRpb24gewotICAgICAgICAvLyBBZGQgdGhl
IHBhcmFtZXRlcgotICAgICAgICAkJCA9ICQxOwotICAgICAgICBpZiAoJDIucGFyYW0udHlwZS0+
Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkKLSAgICAgICAgICAgICQxLT5hZGRQYXJhbWV0ZXIo
JDIucGFyYW0pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkZWxldGUgJDIucGFyYW0udHlw
ZTsKLSAgICB9Ci0gICAgfCBmdW5jdGlvbl9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIENPTU1BIHBh
cmFtZXRlcl9kZWNsYXJhdGlvbiB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIE9ubHkgZmlyc3Qg
cGFyYW1ldGVyIG9mIG9uZS1wYXJhbWV0ZXIgZnVuY3Rpb25zIGNhbiBiZSB2b2lkCi0gICAgICAg
IC8vIFRoZSBjaGVjayBmb3IgbmFtZWQgcGFyYW1ldGVycyBub3QgYmVpbmcgdm9pZCBpcyBkb25l
IGluIHBhcmFtZXRlcl9kZWNsYXJhdG9yCi0gICAgICAgIC8vCi0gICAgICAgIGlmICgkMy5wYXJh
bS50eXBlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICAvLwotICAg
ICAgICAgICAgLy8gVGhpcyBwYXJhbWV0ZXIgPiBmaXJzdCBpcyB2b2lkCi0gICAgICAgICAgICAv
LwotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJjYW5ub3QgYmUgYW4gYXJndW1lbnQg
dHlwZSBleGNlcHQgZm9yICcodm9pZCknIiwgInZvaWQiKTsKLSAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgICAgIGRlbGV0ZSAkMy5wYXJhbS50eXBlOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgLy8gQWRkIHRoZSBwYXJhbWV0ZXIKLSAgICAgICAgICAgICQk
ID0gJDE7Ci0gICAgICAgICAgICAkMS0+YWRkUGFyYW1ldGVyKCQzLnBhcmFtKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICA7Ci0KLWZ1bmN0aW9uX2hlYWRlcgotICAgIDogZnVsbHlfc3BlY2lmaWVk
X3R5cGUgSURFTlRJRklFUiBMRUZUX1BBUkVOIHsKLSAgICAgICAgaWYgKCQxLnF1YWxpZmllciAh
PSBFdnFHbG9iYWwgJiYgJDEucXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgewotICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoQDIsICJubyBxdWFsaWZpZXJzIGFsbG93ZWQgZm9yIGZ1bmN0aW9u
IHJldHVybiIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpKTsKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICAvLyBtYWtlIHN1cmUgYSBz
YW1wbGVyIGlzIG5vdCBpbnZvbHZlZCBhcyB3ZWxsLi4uCi0gICAgICAgIGlmIChjb250ZXh0LT5z
dHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAyLCAkMSkpCi0gICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0KLSAgICAgICAgLy8gQWRkIHRoZSBmdW5jdGlvbiBhcyBhIHByb3RvdHlwZSBh
ZnRlciBwYXJzaW5nIGl0ICh3ZSBkbyBub3Qgc3VwcG9ydCByZWN1cnNpb24pCi0gICAgICAgIFRG
dW5jdGlvbiAqZnVuY3Rpb247Ci0gICAgICAgIFRUeXBlIHR5cGUoJDEpOwotICAgICAgICBmdW5j
dGlvbiA9IG5ldyBURnVuY3Rpb24oJDIuc3RyaW5nLCB0eXBlKTsKLSAgICAgICAgJCQgPSBmdW5j
dGlvbjsKLSAgICAgICAgCi0gICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsKLSAg
ICB9Ci0gICAgOwotCi1wYXJhbWV0ZXJfZGVjbGFyYXRvcgotICAgIC8vIFR5cGUgKyBuYW1lCi0g
ICAgOiB0eXBlX3NwZWNpZmllciBpZGVudGlmaWVyIHsKLSAgICAgICAgaWYgKCQxLnR5cGUgPT0g
RWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJpbGxlZ2FsIHVzZSBv
ZiB0eXBlICd2b2lkJyIsICQyLnN0cmluZy0+Y19zdHIoKSk7Ci0gICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJy
b3JDaGVjayhAMiwgKiQyLnN0cmluZykpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0gICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7JDIuc3RyaW5nLCBuZXcgVFR5cGUoJDEpfTsK
LSAgICAgICAgJCQucGFyYW0gPSBwYXJhbTsKLSAgICB9Ci0gICAgfCB0eXBlX3NwZWNpZmllciBp
ZGVudGlmaWVyIExFRlRfQlJBQ0tFVCBjb25zdGFudF9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQg
ewotICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGNhbiBtYWtlIGFuIGFycmF5IG91dCBvZiB0aGlz
IHR5cGUKLSAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soQDMsICQxKSkK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+
cmVzZXJ2ZWRFcnJvckNoZWNrKEAyLCAqJDIuc3RyaW5nKSkKLSAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLQotICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgaWYgKGNvbnRleHQtPmFy
cmF5U2l6ZUVycm9yQ2hlY2soQDMsICQ0LCBzaXplKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgJDEuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7Ci0KLSAgICAgICAgVFR5
cGUqIHR5cGUgPSBuZXcgVFR5cGUoJDEpOwotICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAk
Mi5zdHJpbmcsIHR5cGUgfTsKLSAgICAgICAgJCQucGFyYW0gPSBwYXJhbTsKLSAgICB9Ci0gICAg
OwotCi1wYXJhbWV0ZXJfZGVjbGFyYXRpb24KLSAgICAvLwotICAgIC8vIFRoZSBvbmx5IHBhcmFt
ZXRlciBxdWFsaWZpZXIgYSBwYXJhbWV0ZXIgY2FuIGhhdmUgYXJlCi0gICAgLy8gSU5fUVVBTCwg
T1VUX1FVQUwsIElOT1VUX1FVQUwsIG9yIENPTlNULgotICAgIC8vCi0KLSAgICAvLwotICAgIC8v
IFR5cGUgKyBuYW1lCi0gICAgLy8KLSAgICA6IHR5cGVfcXVhbGlmaWVyIHBhcmFtZXRlcl9xdWFs
aWZpZXIgcGFyYW1ldGVyX2RlY2xhcmF0b3IgewotICAgICAgICAkJCA9ICQzOwotICAgICAgICBp
ZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKEAzLCAkMS5xdWFsaWZpZXIsICQyLCAkJC5wYXJh
bS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICB9Ci0gICAgfCBw
YXJhbWV0ZXJfcXVhbGlmaWVyIHBhcmFtZXRlcl9kZWNsYXJhdG9yIHsKLSAgICAgICAgJCQgPSAk
MjsKLSAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKEAyLCAk
MSwgKiQyLnBhcmFtLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKEAyLCBFdnFUZW1wb3JhcnksICQxLCAk
JC5wYXJhbS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICB9Ci0g
ICAgLy8KLSAgICAvLyBPbmx5IHR5cGUKLSAgICAvLwotICAgIHwgdHlwZV9xdWFsaWZpZXIgcGFy
YW1ldGVyX3F1YWxpZmllciBwYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIgewotICAgICAgICAkJCA9
ICQzOwotICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKEAzLCAkMS5xdWFsaWZp
ZXIsICQyLCAkJC5wYXJhbS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICB9Ci0gICAgfCBwYXJhbWV0ZXJfcXVhbGlmaWVyIHBhcmFtZXRlcl90eXBlX3NwZWNpZmll
ciB7Ci0gICAgICAgICQkID0gJDI7Ci0gICAgICAgIGlmIChjb250ZXh0LT5wYXJhbWV0ZXJTYW1w
bGVyRXJyb3JDaGVjayhAMiwgJDEsICokMi5wYXJhbS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjayhAMiwg
RXZxVGVtcG9yYXJ5LCAkMSwgJCQucGFyYW0udHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0gICAgfQotICAgIDsKLQotcGFyYW1ldGVyX3F1YWxpZmllcgotICAgIDogLyog
ZW1wdHkgKi8gewotICAgICAgICAkJCA9IEV2cUluOwotICAgIH0KLSAgICB8IElOX1FVQUwgewot
ICAgICAgICAkJCA9IEV2cUluOwotICAgIH0KLSAgICB8IE9VVF9RVUFMIHsKLSAgICAgICAgJCQg
PSBFdnFPdXQ7Ci0gICAgfQotICAgIHwgSU5PVVRfUVVBTCB7Ci0gICAgICAgICQkID0gRXZxSW5P
dXQ7Ci0gICAgfQotICAgIDsKLQotcGFyYW1ldGVyX3R5cGVfc3BlY2lmaWVyCi0gICAgOiB0eXBl
X3NwZWNpZmllciB7Ci0gICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7IDAsIG5ldyBUVHlwZSgk
MSkgfTsKLSAgICAgICAgJCQucGFyYW0gPSBwYXJhbTsKLSAgICB9Ci0gICAgOwotCi1pbml0X2Rl
Y2xhcmF0b3JfbGlzdAotICAgIDogc2luZ2xlX2RlY2xhcmF0aW9uIHsKLSAgICAgICAgJCQgPSAk
MTsKLSAgICB9Ci0gICAgfCBpbml0X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBpZGVudGlmaWVyIHsK
LSAgICAgICAgaWYgKCQxLnR5cGUudHlwZSA9PSBFYnRJbnZhcmlhbnQgJiYgISQzLnN5bWJvbCkK
LSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDMsICJ1bmRlY2xhcmVkIGlk
ZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgJDMuc3RyaW5nLT5jX3N0cigpKTsKLSAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIFRJbnRl
cm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQz
LnN0cmluZywgVFR5cGUoJDEudHlwZSksIEAzKTsKLSAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRl
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJtTm9kZSwgc3lt
Ym9sLCBAMyk7Ci0gICAgICAgIAotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVy
RXJyb3JDaGVjayhAMywgJCQudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soQDMsICokMy5z
dHJpbmcsICQkLnR5cGUsIGZhbHNlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LQotICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAgaWYgKGNvbnRleHQt
Pm5vbkluaXRFcnJvckNoZWNrKEAzLCAqJDMuc3RyaW5nLCAkJC50eXBlLCB2YXJpYWJsZSkpCi0g
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGlmIChzeW1ib2wgJiYgdmFy
aWFibGUpCi0gICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgp
KTsKLSAgICB9Ci0gICAgfCBpbml0X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBpZGVudGlmaWVyIExF
RlRfQlJBQ0tFVCBSSUdIVF9CUkFDS0VUIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1
YWxpZmllckVycm9yQ2hlY2soQDMsICQxLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKEAz
LCAqJDMuc3RyaW5nLCAkMS50eXBlLCB0cnVlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLQotICAgICAgICAkJCA9ICQxOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5
cGVFcnJvckNoZWNrKEA0LCAkMS50eXBlKSB8fCBjb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9y
Q2hlY2soQDQsICQxLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICQxLnR5cGUuc2V0QXJyYXkodHJ1ZSk7Ci0gICAgICAg
ICAgICBUVmFyaWFibGUqIHZhcmlhYmxlOwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5
RXJyb3JDaGVjayhANCwgKiQzLnN0cmluZywgJDEudHlwZSwgdmFyaWFibGUpKQotICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICB8IGluaXRf
ZGVjbGFyYXRvcl9saXN0IENPTU1BIGlkZW50aWZpZXIgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4
cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFs
aWZpZXJFcnJvckNoZWNrKEAzLCAkMS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjayhAMywg
KiQzLnN0cmluZywgJDEudHlwZSwgdHJ1ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0KLSAgICAgICAgJCQgPSAkMTsKLQotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBl
RXJyb3JDaGVjayhANCwgJDEudHlwZSkgfHwgY29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNo
ZWNrKEA0LCAkMS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgICAgIGlmIChjb250ZXh0
LT5hcnJheVNpemVFcnJvckNoZWNrKEA0LCAkNSwgc2l6ZSkpCi0gICAgICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgJDEudHlwZS5zZXRBcnJheSh0cnVlLCBzaXpl
KTsKLSAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwotICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmFycmF5RXJyb3JDaGVjayhANCwgKiQzLnN0cmluZywgJDEudHlwZSwgdmFyaWFi
bGUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIFRU
eXBlIHR5cGUgPSBUVHlwZSgkMS50eXBlKTsKLSAgICAgICAgICAgIHR5cGUuc2V0QXJyYXlTaXpl
KHNpemUpOwotICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJtTm9kZSwgY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZFN5bWJvbCh2YXJpYWJsZSA/IHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpIDogMCwgKiQzLnN0
cmluZywgdHlwZSwgQDMpLCBAMyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgfCBpbml0X2RlY2xh
cmF0b3JfbGlzdCBDT01NQSBpZGVudGlmaWVyIEVRVUFMIGluaXRpYWxpemVyIHsKLSAgICAgICAg
aWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soQDMsICQxLnR5cGUpKQotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgICQkID0gJDE7Ci0KLSAgICAg
ICAgVEludGVybU5vZGUqIGludGVybU5vZGU7Ci0gICAgICAgIGlmICghY29udGV4dC0+ZXhlY3V0
ZUluaXRpYWxpemVyKEAzLCAqJDMuc3RyaW5nLCAkMS50eXBlLCAkNSwgaW50ZXJtTm9kZSkpIHsK
LSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBidWlsZCB0aGUgaW50ZXJtZWRpYXRlIHJl
cHJlc2VudGF0aW9uCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgaWYgKGludGVybU5vZGUp
Ci0gICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93
QWdncmVnYXRlKCQxLmludGVybU5vZGUsIGludGVybU5vZGUsIEA0KTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAkMS5pbnRlcm1BZ2dyZWdh
dGU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAwOwotICAgICAgICB9Ci0gICAgfQotICAg
IDsKLQotc2luZ2xlX2RlY2xhcmF0aW9uCi0gICAgOiBmdWxseV9zcGVjaWZpZWRfdHlwZSB7Ci0g
ICAgICAgICQkLnR5cGUgPSAkMTsKLSAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5
bWJvbCgwLCAiIiwgVFR5cGUoJDEpLCBAMSksIEAxKTsKLSAgICB9Ci0gICAgfCBmdWxseV9zcGVj
aWZpZWRfdHlwZSBpZGVudGlmaWVyIHsKLSAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDIuc3RyaW5nLCBUVHlwZSgkMSks
IEAyKTsKLSAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
Lm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCBAMik7Ci0gICAgICAgIAotICAgICAgICBpZiAoY29udGV4
dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhAMiwgJCQudHlwZSkpCi0gICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVy
cm9yQ2hlY2soQDIsICokMi5zdHJpbmcsICQkLnR5cGUsIGZhbHNlKSkKLSAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgJCQudHlwZSA9ICQx
OwotCi0gICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwotICAgICAgICBpZiAoY29udGV4
dC0+bm9uSW5pdEVycm9yQ2hlY2soQDIsICokMi5zdHJpbmcsICQkLnR5cGUsIHZhcmlhYmxlKSkK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgaWYgKHZhcmlhYmxlICYm
IHN5bWJvbCkKLSAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUtPmdldFVuaXF1ZUlk
KCkpOwotICAgIH0KLSAgICB8IGZ1bGx5X3NwZWNpZmllZF90eXBlIGlkZW50aWZpZXIgTEVGVF9C
UkFDS0VUIFJJR0hUX0JSQUNLRVQgewotICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgInVuc2l6
ZWQgYXJyYXkgZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0ZWQiLCAkMi5zdHJpbmctPmNfc3RyKCkp
OwotICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgVEludGVybVN5bWJvbCog
c3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDIuc3RyaW5nLCBU
VHlwZSgkMSksIEAyKTsKLSAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCBAMik7Ci0gICAgICAgICQkLnR5cGUgPSAk
MTsKLSAgICB9Ci0gICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBpZGVudGlmaWVyIExFRlRfQlJB
Q0tFVCBjb25zdGFudF9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQgewotICAgICAgICBUVHlwZSB0
eXBlID0gVFR5cGUoJDEpOwotICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgaWYgKGNvbnRleHQt
PmFycmF5U2l6ZUVycm9yQ2hlY2soQDIsICQ0LCBzaXplKSkKLSAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgdHlwZS5zZXRBcnJheVNpemUoc2l6ZSk7Ci0gICAgICAgIFRJ
bnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwg
KiQyLnN0cmluZywgdHlwZSwgQDIpOwotICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsIEAyKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAyLCAkMSkpCi0g
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPm5v
bkluaXRDb25zdEVycm9yQ2hlY2soQDIsICokMi5zdHJpbmcsICQxLCB0cnVlKSkKLSAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICAkJC50eXBlID0gJDE7Ci0KLSAgICAg
ICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soQDMsICQxKSB8fCBjb250ZXh0LT5h
cnJheVF1YWxpZmllckVycm9yQ2hlY2soQDMsICQxKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKEAzLCAkNCwgc2l6ZSkpCi0gICAg
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgICAgICAkMS5zZXRBcnJh
eSh0cnVlLCBzaXplKTsKLSAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwotICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVjayhAMywgKiQyLnN0cmluZywgJDEs
IHZhcmlhYmxlKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
ICAgICBpZiAodmFyaWFibGUgJiYgc3ltYm9sKQotICAgICAgICAgICAgICAgIHN5bWJvbC0+c2V0
SWQodmFyaWFibGUtPmdldFVuaXF1ZUlkKCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIHwgZnVs
bHlfc3BlY2lmaWVkX3R5cGUgaWRlbnRpZmllciBFUVVBTCBpbml0aWFsaXplciB7Ci0gICAgICAg
IGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAyLCAkMSkpCi0gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgJCQudHlwZSA9ICQxOwotCi0gICAg
ICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOwotICAgICAgICBpZiAoIWNvbnRleHQtPmV4ZWN1
dGVJbml0aWFsaXplcihAMiwgKiQyLnN0cmluZywgJDEsICQ0LCBpbnRlcm1Ob2RlKSkgewotICAg
ICAgICAvLwotICAgICAgICAvLyBCdWlsZCBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24KLSAg
ICAgICAgLy8KLSAgICAgICAgICAgIGlmKGludGVybU5vZGUpCi0gICAgICAgICAgICAgICAgJCQu
aW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoaW50
ZXJtTm9kZSwgQDMpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICQkLmludGVy
bUFnZ3JlZ2F0ZSA9IDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0gICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAwOwotICAgICAgICB9
Ci0gICAgfQotICAgIHwgSU5WQVJJQU5UIElERU5USUZJRVIgewotICAgICAgICBWRVJURVhfT05M
WSgiaW52YXJpYW50IGRlY2xhcmF0aW9uIiwgQDEpOwotICAgICAgICBpZiAoY29udGV4dC0+Z2xv
YmFsRXJyb3JDaGVjayhAMSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAi
aW52YXJpYW50IHZhcnlpbmciKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgJCQudHlwZS5zZXRCYXNpYyhFYnRJbnZhcmlhbnQsIEV2cUludmFyaWFudFZhcnlpbmdP
dXQsIEAyKTsKLSAgICAgICAgaWYgKCEkMi5zeW1ib2wpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKEAyLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGlu
dmFyaWFudCIsICQyLnN0cmluZy0+Y19zdHIoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBUSW50ZXJt
U3ltYm9sICpzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICokMi5z
dHJpbmcsIFRUeXBlKCQkLnR5cGUpLCBAMik7Ci0gICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdh
dGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsIEAyKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICA7Ci0KLWZ1bGx5X3NwZWNpZmllZF90eXBlCi0gICAgOiB0eXBl
X3NwZWNpZmllciB7Ci0gICAgICAgICQkID0gJDE7Ci0KLSAgICAgICAgaWYgKCQxLmFycmF5KSB7
Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3Qt
Y2xhc3MgYXJyYXkiKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
ICAgICQxLnNldEFycmF5KGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICB8IHR5cGVfcXVh
bGlmaWVyIHR5cGVfc3BlY2lmaWVyICB7Ci0gICAgICAgIGlmICgkMi5hcnJheSkgewotICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFy
cmF5Iik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkMi5z
ZXRBcnJheShmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoJDEucXVhbGlmaWVyID09
IEV2cUF0dHJpYnV0ZSAmJgotICAgICAgICAgICAgKCQyLnR5cGUgPT0gRWJ0Qm9vbCB8fCAkMi50
eXBlID09IEVidEludCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAiY2Fubm90
IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikpOwotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgoJDEu
cXVhbGlmaWVyID09IEV2cVZhcnlpbmdJbiB8fCAkMS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091
dCkgJiYKLSAgICAgICAgICAgICgkMi50eXBlID09IEVidEJvb2wgfHwgJDIudHlwZSA9PSBFYnRJ
bnQpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgImNhbm5vdCBiZSBib29sIG9y
IGludCIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpKTsKLSAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICAkJCA9ICQyOwotICAgICAgICAk
JC5xdWFsaWZpZXIgPSAkMS5xdWFsaWZpZXI7Ci0gICAgfQotICAgIDsKLQotdHlwZV9xdWFsaWZp
ZXIKLSAgICA6IENPTlNUX1FVQUwgewotICAgICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFD
b25zdCwgQDEpOwotICAgIH0KLSAgICB8IEFUVFJJQlVURSB7Ci0gICAgICAgIFZFUlRFWF9PTkxZ
KCJhdHRyaWJ1dGUiLCBAMSk7Ci0gICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNr
KEAxLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJhdHRyaWJ1dGUiKSkK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0
Vm9pZCwgRXZxQXR0cmlidXRlLCBAMSk7Ci0gICAgfQotICAgIHwgVkFSWUlORyB7Ci0gICAgICAg
IGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKEAxLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCksICJ2YXJ5aW5nIikpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIp
Ci0gICAgICAgICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFWYXJ5aW5nT3V0LCBAMSk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cVZhcnlpbmdJ
biwgQDEpOwotICAgIH0KLSAgICB8IElOVkFSSUFOVCBWQVJZSU5HIHsKLSAgICAgICAgaWYgKGNv
bnRleHQtPmdsb2JhbEVycm9yQ2hlY2soQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSwgImludmFyaWFudCB2YXJ5aW5nIikpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFE
RVIpCi0gICAgICAgICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFJbnZhcmlhbnRWYXJ5aW5n
T3V0LCBAMSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQs
IEV2cUludmFyaWFudFZhcnlpbmdJbiwgQDEpOwotICAgIH0KLSAgICB8IFVOSUZPUk0gewotICAg
ICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjayhAMSwgY29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpLCAidW5pZm9ybSIpKQotICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFVbmlmb3JtLCBAMSk7Ci0g
ICAgfQotICAgIDsKLQotdHlwZV9zcGVjaWZpZXIKLSAgICA6IHR5cGVfc3BlY2lmaWVyX25vX3By
ZWMgewotICAgICAgICAkJCA9ICQxOwotCi0gICAgICAgIGlmICgkJC5wcmVjaXNpb24gPT0gRWJw
VW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICAkJC5wcmVjaXNpb24gPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5nZXREZWZhdWx0UHJlY2lzaW9uKCQxLnR5cGUpOwotICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPnByZWNpc2lvbkVycm9yQ2hlY2soQDEsICQkLnByZWNpc2lvbiwgJDEudHlwZSkpIHsKLSAg
ICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgfCBwcmVjaXNpb25fcXVhbGlmaWVyIHR5cGVfc3BlY2lmaWVyX25vX3By
ZWMgewotICAgICAgICAkJCA9ICQyOwotICAgICAgICAkJC5wcmVjaXNpb24gPSAkMTsKLSAgICB9
Ci0gICAgOwotCi1wcmVjaXNpb25fcXVhbGlmaWVyCi0gICAgOiBISUdIX1BSRUNJU0lPTiB7Ci0g
ICAgICAgICQkID0gRWJwSGlnaDsKLSAgICB9Ci0gICAgfCBNRURJVU1fUFJFQ0lTSU9OIHsKLSAg
ICAgICAgJCQgPSBFYnBNZWRpdW07Ci0gICAgfQotICAgIHwgTE9XX1BSRUNJU0lPTiAgewotICAg
ICAgICAkJCA9IEVicExvdzsKLSAgICB9Ci0gICAgOwotCi10eXBlX3NwZWNpZmllcl9ub19wcmVj
Ci0gICAgOiB0eXBlX3NwZWNpZmllcl9ub25hcnJheSB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAg
fQotICAgIHwgdHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4
cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7Ci0gICAgICAgICQkID0gJDE7Ci0KLSAgICAgICAgaWYg
KGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soQDIsICQxKSkKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpbnQgc2l6ZTsKLSAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKEAyLCAkMywgc2l6ZSkp
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgJCQuc2V0
QXJyYXkodHJ1ZSwgc2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgOwotCi10eXBlX3NwZWNp
Zmllcl9ub25hcnJheQotICAgIDogVk9JRF9UWVBFIHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBxdWFsLCBAMSk7Ci0gICAg
fQotICAgIHwgRkxPQVRfVFlQRSB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
LSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsKLSAgICB9Ci0gICAgfCBJ
TlRfVFlQRSB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgJCQu
c2V0QmFzaWMoRWJ0SW50LCBxdWFsLCBAMSk7Ci0gICAgfQotICAgIHwgQk9PTF9UWVBFIHsKLSAg
ICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRC
b29sLCBxdWFsLCBAMSk7Ci0gICAgfQotICAgIHwgVkVDMiB7Ci0gICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsK
LSAgICAgICAgJCQuc2V0QWdncmVnYXRlKDIpOwotICAgIH0KLSAgICB8IFZFQzMgewotICAgICAg
ICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkg
PyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0
LCBxdWFsLCBAMSk7Ci0gICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgzKTsKLSAgICB9Ci0gICAgfCBW
RUM0IHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRH
bG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAkJC5zZXRC
YXNpYyhFYnRGbG9hdCwgcXVhbCwgQDEpOwotICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoNCk7Ci0g
ICAgfQotICAgIHwgQlZFQzIgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0g
ICAgICAgICQkLnNldEJhc2ljKEVidEJvb2wsIHF1YWwsIEAxKTsKLSAgICAgICAgJCQuc2V0QWdn
cmVnYXRlKDIpOwotICAgIH0KLSAgICB8IEJWRUMzIHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCBAMSk7Ci0gICAg
ICAgICQkLnNldEFnZ3JlZ2F0ZSgzKTsKLSAgICB9Ci0gICAgfCBCVkVDNCB7Ci0gICAgICAgIFRR
dWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2
cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVh
bCwgQDEpOwotICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoNCk7Ci0gICAgfQotICAgIHwgSVZFQzIg
ewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2Jh
bExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICQkLnNldEJhc2lj
KEVidEludCwgcXVhbCwgQDEpOwotICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMik7Ci0gICAgfQot
ICAgIHwgSVZFQzMgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAg
ICQkLnNldEJhc2ljKEVidEludCwgcXVhbCwgQDEpOwotICAgICAgICAkJC5zZXRBZ2dyZWdhdGUo
Myk7Ci0gICAgfQotICAgIHwgSVZFQzQgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jh
cnk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidEludCwgcXVhbCwgQDEpOwotICAgICAgICAkJC5z
ZXRBZ2dyZWdhdGUoNCk7Ci0gICAgfQotICAgIHwgTUFUUklYMiB7Ci0gICAgICAgIFRRdWFsaWZp
ZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2Jh
bCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAx
KTsKLSAgICAgICAgJCQuc2V0QWdncmVnYXRlKDIsIHRydWUpOwotICAgIH0KLSAgICB8IE1BVFJJ
WDMgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICQkLnNldEJh
c2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7Ci0gICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgzLCB0cnVl
KTsKLSAgICB9Ci0gICAgfCBNQVRSSVg0IHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgQDEpOwotICAgICAgICAk
JC5zZXRBZ2dyZWdhdGUoNCwgdHJ1ZSk7Ci0gICAgfQotICAgIHwgU0FNUExFUjJEIHsKLSAgICAg
ICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgp
ID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1w
bGVyMkQsIHF1YWwsIEAxKTsKLSAgICB9Ci0gICAgfCBTQU1QTEVSQ1VCRSB7Ci0gICAgICAgIFRR
dWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2
cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxlckN1
YmUsIHF1YWwsIEAxKTsKLSAgICB9Ci0gICAgfCBTQU1QTEVSX0VYVEVSTkFMX09FUyB7Ci0gICAg
ICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNFeHRlbnNpb24oIkdMX09FU19FR0xfaW1hZ2VfZXh0
ZXJuYWwiKSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJ1bnN1cHBvcnRlZCB0
eXBlIiwgInNhbXBsZXJFeHRlcm5hbE9FUyIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotICAgICAgICB9Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAg
ICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxlckV4dGVybmFsT0VTLCBxdWFsLCBAMSk7Ci0gICAgfQot
ICAgIHwgU0FNUExFUjJEUkVDVCB7Ci0gICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNFeHRl
bnNpb24oIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIpKSB7Ci0gICAgICAgICAgICBjb250ZXh0
LT5lcnJvcihAMSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlcjJEUmVjdCIpOwotICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxlcjJEUmVjdCwgcXVh
bCwgQDEpOwotICAgIH0KLSAgICB8IHN0cnVjdF9zcGVjaWZpZXIgewotICAgICAgICAkJCA9ICQx
OwotICAgICAgICAkJC5xdWFsaWZpZXIgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgfQotICAgIHwgVFlQRV9OQU1F
IHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gVGhpcyBpcyBmb3IgdXNlciBkZWZpbmVkIHR5cGUg
bmFtZXMuICBUaGUgbGV4aWNhbCBwaGFzZSBsb29rZWQgdXAgdGhlCi0gICAgICAgIC8vIHR5cGUu
Ci0gICAgICAgIC8vCi0gICAgICAgIFRUeXBlJiBzdHJ1Y3R1cmUgPSBzdGF0aWNfY2FzdDxUVmFy
aWFibGUqPigkMS5zeW1ib2wpLT5nZXRUeXBlKCk7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKLSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U3RydWN0LCBxdWFsLCBAMSk7Ci0gICAg
ICAgICQkLnVzZXJEZWYgPSAmc3RydWN0dXJlOwotICAgIH0KLSAgICA7Ci0KLXN0cnVjdF9zcGVj
aWZpZXIKLSAgICA6IFNUUlVDVCBpZGVudGlmaWVyIExFRlRfQlJBQ0UgeyBpZiAoY29udGV4dC0+
ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbihAMiwgKiQyLnN0cmluZykpIGNvbnRleHQtPnJlY292ZXIo
KTsgfSBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCBSSUdIVF9CUkFDRSB7Ci0gICAgICAgIGlmIChj
b250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soQDIsICokMi5zdHJpbmcpKQotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIFRUeXBlKiBzdHJ1Y3R1cmUgPSBuZXcgVFR5
cGUobmV3IFRTdHJ1Y3R1cmUoJDIuc3RyaW5nLCAkNSkpOwotICAgICAgICBUVmFyaWFibGUqIHVz
ZXJUeXBlRGVmID0gbmV3IFRWYXJpYWJsZSgkMi5zdHJpbmcsICpzdHJ1Y3R1cmUsIHRydWUpOwot
ICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnVzZXJUeXBlRGVmKSkg
ewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJyZWRlZmluaXRpb24iLCAkMi5zdHJp
bmctPmNfc3RyKCksICJzdHJ1Y3QiKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgfQotICAgICAgICAkJC5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwg
QDEpOwotICAgICAgICAkJC51c2VyRGVmID0gc3RydWN0dXJlOwotICAgICAgICBjb250ZXh0LT5l
eGl0U3RydWN0RGVjbGFyYXRpb24oKTsKLSAgICB9Ci0gICAgfCBTVFJVQ1QgTEVGVF9CUkFDRSB7
IGlmIChjb250ZXh0LT5lbnRlclN0cnVjdERlY2xhcmF0aW9uKEAyLCAqJDIuc3RyaW5nKSkgY29u
dGV4dC0+cmVjb3ZlcigpOyB9IHN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IFJJR0hUX0JSQUNFIHsK
LSAgICAgICAgVFR5cGUqIHN0cnVjdHVyZSA9IG5ldyBUVHlwZShuZXcgVFN0cnVjdHVyZShOZXdQ
b29sVFN0cmluZygiIiksICQ0KSk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidFN0cnVjdCwgRXZx
VGVtcG9yYXJ5LCBAMSk7Ci0gICAgICAgICQkLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7Ci0gICAgICAg
IGNvbnRleHQtPmV4aXRTdHJ1Y3REZWNsYXJhdGlvbigpOwotICAgIH0KLSAgICA7Ci0KLXN0cnVj
dF9kZWNsYXJhdGlvbl9saXN0Ci0gICAgOiBzdHJ1Y3RfZGVjbGFyYXRpb24gewotICAgICAgICAk
JCA9ICQxOwotICAgIH0KLSAgICB8IHN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IHN0cnVjdF9kZWNs
YXJhdGlvbiB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgJDItPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBURmllbGQqIGZpZWxkID0gKCokMilb
aV07Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8ICQkLT5zaXplKCk7ICsraikg
ewotICAgICAgICAgICAgICAgIGlmICgoKiQkKVtqXS0+bmFtZSgpID09IGZpZWxkLT5uYW1lKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJkdXBsaWNhdGUgZmll
bGQgbmFtZSBpbiBzdHJ1Y3R1cmU6IiwgInN0cnVjdCIsIGZpZWxkLT5uYW1lKCkuY19zdHIoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAkJC0+cHVzaF9iYWNrKGZpZWxkKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICA7Ci0KLXN0cnVjdF9kZWNsYXJhdGlvbgotICAgIDogdHlwZV9z
cGVjaWZpZXIgc3RydWN0X2RlY2xhcmF0b3JfbGlzdCBTRU1JQ09MT04gewotICAgICAgICAkJCA9
ICQyOwotCi0gICAgICAgIGlmIChjb250ZXh0LT52b2lkRXJyb3JDaGVjayhAMSwgKCokMilbMF0t
Pm5hbWUoKSwgJDEpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCAkJC0+c2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBDYXJlZnVsIG5vdCB0byByZXBsYWNl
IGFscmVhZHkga25vd24gYXNwZWN0cyBvZiB0eXBlLCBsaWtlIGFycmF5LW5lc3MKLSAgICAgICAg
ICAgIC8vCi0gICAgICAgICAgICBUVHlwZSogdHlwZSA9ICgqJCQpW2ldLT50eXBlKCk7Ci0gICAg
ICAgICAgICB0eXBlLT5zZXRCYXNpY1R5cGUoJDEudHlwZSk7Ci0gICAgICAgICAgICB0eXBlLT5z
ZXROb21pbmFsU2l6ZSgkMS5zaXplKTsKLSAgICAgICAgICAgIHR5cGUtPnNldE1hdHJpeCgkMS5t
YXRyaXgpOwotICAgICAgICAgICAgdHlwZS0+c2V0UHJlY2lzaW9uKCQxLnByZWNpc2lvbik7Ci0K
LSAgICAgICAgICAgIC8vIGRvbid0IGFsbG93IGFycmF5cyBvZiBhcnJheXMKLSAgICAgICAgICAg
IGlmICh0eXBlLT5pc0FycmF5KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+YXJy
YXlUeXBlRXJyb3JDaGVjayhAMSwgJDEpKQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoJDEuYXJyYXkpCi0gICAg
ICAgICAgICAgICAgdHlwZS0+c2V0QXJyYXlTaXplKCQxLmFycmF5U2l6ZSk7Ci0gICAgICAgICAg
ICBpZiAoJDEudXNlckRlZikKLSAgICAgICAgICAgICAgICB0eXBlLT5zZXRTdHJ1Y3QoJDEudXNl
ckRlZi0+Z2V0U3RydWN0KCkpOwotCi0gICAgICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0TmVz
dGluZ0Vycm9yQ2hlY2soQDEsICooKiQkKVtpXSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgfQotICAgIDsKLQotc3RydWN0X2RlY2xhcmF0b3Jf
bGlzdAotICAgIDogc3RydWN0X2RlY2xhcmF0b3IgewotICAgICAgICAkJCA9IE5ld1Bvb2xURmll
bGRMaXN0KCk7Ci0gICAgICAgICQkLT5wdXNoX2JhY2soJDEpOwotICAgIH0KLSAgICB8IHN0cnVj
dF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgc3RydWN0X2RlY2xhcmF0b3IgewotICAgICAgICAkJC0+
cHVzaF9iYWNrKCQzKTsKLSAgICB9Ci0gICAgOwotCi1zdHJ1Y3RfZGVjbGFyYXRvcgotICAgIDog
aWRlbnRpZmllciB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soQDEs
ICokMS5zdHJpbmcpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAg
IFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7Ci0gICAgICAg
ICQkID0gbmV3IFRGaWVsZCh0eXBlLCAkMS5zdHJpbmcpOwotICAgIH0KLSAgICB8IGlkZW50aWZp
ZXIgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7Ci0gICAg
ICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soQDEsICokMS5zdHJpbmcpKQotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIFRUeXBlKiB0eXBlID0gbmV3
IFRUeXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7Ci0gICAgICAgIGludCBzaXplID0gMDsKLSAg
ICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soQDMsICQzLCBzaXplKSkKLSAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgdHlwZS0+c2V0QXJyYXlTaXpl
KHNpemUpOwotCi0gICAgICAgICQkID0gbmV3IFRGaWVsZCh0eXBlLCAkMS5zdHJpbmcpOwotICAg
IH0KLSAgICA7Ci0KLWluaXRpYWxpemVyCi0gICAgOiBhc3NpZ25tZW50X2V4cHJlc3Npb24geyAk
JCA9ICQxOyB9Ci0gICAgOwotCi1kZWNsYXJhdGlvbl9zdGF0ZW1lbnQKLSAgICA6IGRlY2xhcmF0
aW9uIHsgJCQgPSAkMTsgfQotICAgIDsKLQotc3RhdGVtZW50Ci0gICAgOiBjb21wb3VuZF9zdGF0
ZW1lbnQgIHsgJCQgPSAkMTsgfQotICAgIHwgc2ltcGxlX3N0YXRlbWVudCAgICB7ICQkID0gJDE7
IH0KLSAgICA7Ci0KLS8vIEdyYW1tYXIgTm90ZTogIE5vIGxhYmVsZWQgc3RhdGVtZW50czsgJ2dv
dG8nIGlzIG5vdCBzdXBwb3J0ZWQuCi0KLXNpbXBsZV9zdGF0ZW1lbnQKLSAgICA6IGRlY2xhcmF0
aW9uX3N0YXRlbWVudCB7ICQkID0gJDE7IH0KLSAgICB8IGV4cHJlc3Npb25fc3RhdGVtZW50ICB7
ICQkID0gJDE7IH0KLSAgICB8IHNlbGVjdGlvbl9zdGF0ZW1lbnQgICB7ICQkID0gJDE7IH0KLSAg
ICB8IGl0ZXJhdGlvbl9zdGF0ZW1lbnQgICB7ICQkID0gJDE7IH0KLSAgICB8IGp1bXBfc3RhdGVt
ZW50ICAgICAgICB7ICQkID0gJDE7IH0KLSAgICA7Ci0KLWNvbXBvdW5kX3N0YXRlbWVudAotICAg
IDogTEVGVF9CUkFDRSBSSUdIVF9CUkFDRSB7ICQkID0gMDsgfQotICAgIHwgTEVGVF9CUkFDRSB7
IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgfSBzdGF0ZW1lbnRfbGlzdCB7IGNvbnRleHQt
PnN5bWJvbFRhYmxlLnBvcCgpOyB9IFJJR0hUX0JSQUNFIHsKLSAgICAgICAgaWYgKCQzICE9IDAp
IHsKLSAgICAgICAgICAgICQzLT5zZXRPcChFT3BTZXF1ZW5jZSk7Ci0gICAgICAgICAgICAkMy0+
c2V0TGluZShAJCk7Ci0gICAgICAgIH0KLSAgICAgICAgJCQgPSAkMzsKLSAgICB9Ci0gICAgOwot
Ci1zdGF0ZW1lbnRfbm9fbmV3X3Njb3BlCi0gICAgOiBjb21wb3VuZF9zdGF0ZW1lbnRfbm9fbmV3
X3Njb3BlIHsgJCQgPSAkMTsgfQotICAgIHwgc2ltcGxlX3N0YXRlbWVudCAgICAgICAgICAgICAg
ICB7ICQkID0gJDE7IH0KLSAgICA7Ci0KLXN0YXRlbWVudF93aXRoX3Njb3BlCi0gICAgOiB7IGNv
bnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgfSBjb21wb3VuZF9zdGF0ZW1lbnRfbm9fbmV3X3Nj
b3BlIHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7ICQkID0gJDI7IH0KLSAgICB8IHsgY29u
dGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyB9IHNpbXBsZV9zdGF0ZW1lbnQgICAgICAgICAgICAg
ICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgJCQgPSAkMjsgfQotICAgIDsKLQotY29t
cG91bmRfc3RhdGVtZW50X25vX25ld19zY29wZQotICAgIC8vIFN0YXRlbWVudCB0aGF0IGRvZXNu
J3QgY3JlYXRlIGEgbmV3IHNjb3BlLCBmb3Igc2VsZWN0aW9uX3N0YXRlbWVudCwgaXRlcmF0aW9u
X3N0YXRlbWVudAotICAgIDogTEVGVF9CUkFDRSBSSUdIVF9CUkFDRSB7Ci0gICAgICAgICQkID0g
MDsKLSAgICB9Ci0gICAgfCBMRUZUX0JSQUNFIHN0YXRlbWVudF9saXN0IFJJR0hUX0JSQUNFIHsK
LSAgICAgICAgaWYgKCQyKSB7Ci0gICAgICAgICAgICAkMi0+c2V0T3AoRU9wU2VxdWVuY2UpOwot
ICAgICAgICAgICAgJDItPnNldExpbmUoQCQpOwotICAgICAgICB9Ci0gICAgICAgICQkID0gJDI7
Ci0gICAgfQotICAgIDsKLQotc3RhdGVtZW50X2xpc3QKLSAgICA6IHN0YXRlbWVudCB7Ci0gICAg
ICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoJDEsIEAkKTsKLSAg
ICB9Ci0gICAgfCBzdGF0ZW1lbnRfbGlzdCBzdGF0ZW1lbnQgewotICAgICAgICAkJCA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLCAkMiwgQCQpOwotICAgIH0KLSAgICA7
Ci0KLWV4cHJlc3Npb25fc3RhdGVtZW50Ci0gICAgOiBTRU1JQ09MT04gIHsgJCQgPSAwOyB9Ci0g
ICAgfCBleHByZXNzaW9uIFNFTUlDT0xPTiAgeyAkJCA9IHN0YXRpY19jYXN0PFRJbnRlcm1Ob2Rl
Kj4oJDEpOyB9Ci0gICAgOwotCi1zZWxlY3Rpb25fc3RhdGVtZW50Ci0gICAgOiBJRiBMRUZUX1BB
UkVOIGV4cHJlc3Npb24gUklHSFRfUEFSRU4gc2VsZWN0aW9uX3Jlc3Rfc3RhdGVtZW50IHsKLSAg
ICAgICAgaWYgKGNvbnRleHQtPmJvb2xFcnJvckNoZWNrKEAxLCAkMykpCi0gICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZFNlbGVjdGlvbigkMywgJDUsIEAxKTsKLSAgICB9Ci0gICAgOwotCi1zZWxlY3Rpb25fcmVzdF9z
dGF0ZW1lbnQKLSAgICA6IHN0YXRlbWVudF93aXRoX3Njb3BlIEVMU0Ugc3RhdGVtZW50X3dpdGhf
c2NvcGUgewotICAgICAgICAkJC5ub2RlMSA9ICQxOwotICAgICAgICAkJC5ub2RlMiA9ICQzOwot
ICAgIH0KLSAgICB8IHN0YXRlbWVudF93aXRoX3Njb3BlIHsKLSAgICAgICAgJCQubm9kZTEgPSAk
MTsKLSAgICAgICAgJCQubm9kZTIgPSAwOwotICAgIH0KLSAgICA7Ci0KLS8vIEdyYW1tYXIgTm90
ZTogIE5vICdzd2l0Y2gnLiAgU3dpdGNoIHN0YXRlbWVudHMgbm90IHN1cHBvcnRlZC4KLQotY29u
ZGl0aW9uCi0gICAgLy8gSW4gMTk5NiBjKysgZHJhZnQsIGNvbmRpdGlvbnMgY2FuIGluY2x1ZGUg
c2luZ2xlIGRlY2xhcmF0aW9ucwotICAgIDogZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gJDE7
Ci0gICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVjaygkMS0+Z2V0TGluZSgpLCAkMSkp
Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgfQotICAgIHwgZnVsbHlfc3Bl
Y2lmaWVkX3R5cGUgaWRlbnRpZmllciBFUVVBTCBpbml0aWFsaXplciB7Ci0gICAgICAgIFRJbnRl
cm1Ob2RlKiBpbnRlcm1Ob2RlOwotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVy
RXJyb3JDaGVjayhAMiwgJDEpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2soQDIsICQxKSkKLSAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoIWNvbnRleHQtPmV4ZWN1dGVJbml0aWFs
aXplcihAMiwgKiQyLnN0cmluZywgJDEsICQ0LCBpbnRlcm1Ob2RlKSkKLSAgICAgICAgICAgICQk
ID0gJDQ7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICAgICAgJCQgPSAwOwotICAgICAgICB9Ci0gICAgfQotICAgIDsKLQotaXRlcmF0aW9u
X3N0YXRlbWVudAotICAgIDogV0hJTEUgTEVGVF9QQVJFTiB7IGNvbnRleHQtPnN5bWJvbFRhYmxl
LnB1c2goKTsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyB9IGNvbmRpdGlvbiBSSUdIVF9Q
QVJFTiBzdGF0ZW1lbnRfbm9fbmV3X3Njb3BlIHsKLSAgICAgICAgY29udGV4dC0+c3ltYm9sVGFi
bGUucG9wKCk7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3AoRUxv
b3BXaGlsZSwgMCwgJDQsIDAsICQ2LCBAMSk7Ci0gICAgICAgIC0tY29udGV4dC0+bG9vcE5lc3Rp
bmdMZXZlbDsKLSAgICB9Ci0gICAgfCBETyB7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsg
fSBzdGF0ZW1lbnRfd2l0aF9zY29wZSBXSElMRSBMRUZUX1BBUkVOIGV4cHJlc3Npb24gUklHSFRf
UEFSRU4gU0VNSUNPTE9OIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPmJvb2xFcnJvckNoZWNrKEA4
LCAkNikpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgJCQgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkTG9vcChFTG9vcERvV2hpbGUsIDAsICQ2LCAwLCAkMywg
QDQpOwotICAgICAgICAtLWNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7Ci0gICAgfQotICAgIHwg
Rk9SIExFRlRfUEFSRU4geyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7ICsrY29udGV4dC0+
bG9vcE5lc3RpbmdMZXZlbDsgfSBmb3JfaW5pdF9zdGF0ZW1lbnQgZm9yX3Jlc3Rfc3RhdGVtZW50
IFJJR0hUX1BBUkVOIHN0YXRlbWVudF9ub19uZXdfc2NvcGUgewotICAgICAgICBjb250ZXh0LT5z
eW1ib2xUYWJsZS5wb3AoKTsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
TG9vcChFTG9vcEZvciwgJDQsIHJlaW50ZXJwcmV0X2Nhc3Q8VEludGVybVR5cGVkKj4oJDUubm9k
ZTEpLCByZWludGVycHJldF9jYXN0PFRJbnRlcm1UeXBlZCo+KCQ1Lm5vZGUyKSwgJDcsIEAxKTsK
LSAgICAgICAgLS1jb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOwotICAgIH0KLSAgICA7Ci0KLWZv
cl9pbml0X3N0YXRlbWVudAotICAgIDogZXhwcmVzc2lvbl9zdGF0ZW1lbnQgewotICAgICAgICAk
JCA9ICQxOwotICAgIH0KLSAgICB8IGRlY2xhcmF0aW9uX3N0YXRlbWVudCB7Ci0gICAgICAgICQk
ID0gJDE7Ci0gICAgfQotICAgIDsKLQotY29uZGl0aW9ub3B0Ci0gICAgOiBjb25kaXRpb24gewot
ICAgICAgICAkJCA9ICQxOwotICAgIH0KLSAgICB8IC8qIE1heSBiZSBudWxsICovIHsKLSAgICAg
ICAgJCQgPSAwOwotICAgIH0KLSAgICA7Ci0KLWZvcl9yZXN0X3N0YXRlbWVudAotICAgIDogY29u
ZGl0aW9ub3B0IFNFTUlDT0xPTiB7Ci0gICAgICAgICQkLm5vZGUxID0gJDE7Ci0gICAgICAgICQk
Lm5vZGUyID0gMDsKLSAgICB9Ci0gICAgfCBjb25kaXRpb25vcHQgU0VNSUNPTE9OIGV4cHJlc3Np
b24gIHsKLSAgICAgICAgJCQubm9kZTEgPSAkMTsKLSAgICAgICAgJCQubm9kZTIgPSAkMzsKLSAg
ICB9Ci0gICAgOwotCi1qdW1wX3N0YXRlbWVudAotICAgIDogQ09OVElOVUUgU0VNSUNPTE9OIHsK
LSAgICAgICAgaWYgKGNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPD0gMCkgewotICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoQDEsICJjb250aW51ZSBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGlu
IGxvb3BzIiwgIiIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9
Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BDb250aW51
ZSwgQDEpOwotICAgIH0KLSAgICB8IEJSRUFLIFNFTUlDT0xPTiB7Ci0gICAgICAgIGlmIChjb250
ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KEAxLCAiYnJlYWsgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIiKTsKLSAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICAkJCA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wQnJlYWssIEAxKTsKLSAgICB9Ci0gICAgfCBS
RVRVUk4gU0VNSUNPTE9OIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
QnJhbmNoKEVPcFJldHVybiwgQDEpOwotICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0
aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoQDEsICJub24tdm9pZCBmdW5jdGlvbiBtdXN0IHJldHVybiBhIHZhbHVlIiwgInJl
dHVybiIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAg
fQotICAgIHwgUkVUVVJOIGV4cHJlc3Npb24gU0VNSUNPTE9OIHsKLSAgICAgICAgJCQgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVybiwgJDIsIEAxKTsKLSAgICAgICAg
Y29udGV4dC0+ZnVuY3Rpb25SZXR1cm5zVmFsdWUgPSB0cnVlOwotICAgICAgICBpZiAoY29udGV4
dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgewotICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJ2b2lkIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4g
YSB2YWx1ZSIsICJyZXR1cm4iKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgfSBlbHNlIGlmICgqKGNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUpICE9ICQyLT5n
ZXRUeXBlKCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAiZnVuY3Rpb24gcmV0
dXJuIGlzIG5vdCBtYXRjaGluZyB0eXBlOiIsICJyZXR1cm4iKTsKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICB8IERJU0NBUkQgU0VNSUNPTE9O
IHsKLSAgICAgICAgRlJBR19PTkxZKCJkaXNjYXJkIiwgQDEpOwotICAgICAgICAkJCA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wS2lsbCwgQDEpOwotICAgIH0KLSAgICA7Ci0K
LS8vIEdyYW1tYXIgTm90ZTogIE5vICdnb3RvJy4gIEdvdG9zIGFyZSBub3Qgc3VwcG9ydGVkLgot
Ci10cmFuc2xhdGlvbl91bml0Ci0gICAgOiBleHRlcm5hbF9kZWNsYXJhdGlvbiB7Ci0gICAgICAg
ICQkID0gJDE7Ci0gICAgICAgIGNvbnRleHQtPnRyZWVSb290ID0gJCQ7Ci0gICAgfQotICAgIHwg
dHJhbnNsYXRpb25fdW5pdCBleHRlcm5hbF9kZWNsYXJhdGlvbiB7Ci0gICAgICAgICQkID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEsICQyLCBAJCk7Ci0gICAgICAgIGNv
bnRleHQtPnRyZWVSb290ID0gJCQ7Ci0gICAgfQotICAgIDsKLQotZXh0ZXJuYWxfZGVjbGFyYXRp
b24KLSAgICA6IGZ1bmN0aW9uX2RlZmluaXRpb24gewotICAgICAgICAkJCA9ICQxOwotICAgIH0K
LSAgICB8IGRlY2xhcmF0aW9uIHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICB9Ci0gICAgOwotCi1m
dW5jdGlvbl9kZWZpbml0aW9uCi0gICAgOiBmdW5jdGlvbl9wcm90b3R5cGUgewotICAgICAgICBU
RnVuY3Rpb24qIGZ1bmN0aW9uID0gJDEuZnVuY3Rpb247Ci0gICAgICAgIAotICAgICAgICBjb25z
dCBUU3ltYm9sICpidWlsdEluID0gY29udGV4dC0+c3ltYm9sVGFibGUuZmluZEJ1aWx0SW4oZnVu
Y3Rpb24tPmdldE1hbmdsZWROYW1lKCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKGJ1aWx0SW4p
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAiYnVpbHQtaW4gZnVu
Y3Rpb25zIGNhbm5vdCBiZSByZWRlZmluZWQiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkp
OwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihjb250
ZXh0LT5zeW1ib2xUYWJsZS5maW5kKGZ1bmN0aW9uLT5nZXRNYW5nbGVkTmFtZSgpKSk7Ci0gICAg
ICAgIC8vCi0gICAgICAgIC8vIE5vdGU6ICAncHJldkRlYycgY291bGQgYmUgJ2Z1bmN0aW9uJyBp
ZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3ZlIHNlZW4gZnVuY3Rpb24KLSAgICAgICAgLy8g
YXMgaXQgd291bGQgaGF2ZSBqdXN0IGJlZW4gcHV0IGluIHRoZSBzeW1ib2wgdGFibGUuICBPdGhl
cndpc2UsIHdlJ3JlIGxvb2tpbmcgdXAKLSAgICAgICAgLy8gYW4gZWFybGllciBvY2N1cmFuY2Uu
Ci0gICAgICAgIC8vCi0gICAgICAgIGlmIChwcmV2RGVjLT5pc0RlZmluZWQoKSkgewotICAgICAg
ICAgICAgLy8KLSAgICAgICAgICAgIC8vIFRoZW4gdGhpcyBmdW5jdGlvbiBhbHJlYWR5IGhhcyBh
IGJvZHkuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJm
dW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkp
OwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgIHBy
ZXZEZWMtPnNldERlZmluZWQoKTsKLQotICAgICAgICAvLwotICAgICAgICAvLyBSYWlzZSBlcnJv
ciBtZXNzYWdlIGlmIG1haW4gZnVuY3Rpb24gdGFrZXMgYW55IHBhcmFtZXRlcnMgb3IgcmV0dXJu
IGFueXRoaW5nIG90aGVyIHRoYW4gdm9pZAotICAgICAgICAvLwotICAgICAgICBpZiAoZnVuY3Rp
b24tPmdldE5hbWUoKSA9PSAibWFpbiIpIHsKLSAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0
UGFyYW1Db3VudCgpID4gMCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAi
ZnVuY3Rpb24gY2Fubm90IHRha2UgYW55IHBhcmFtZXRlcihzKSIsIGZ1bmN0aW9uLT5nZXROYW1l
KCkuY19zdHIoKSk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFz
aWNUeXBlKCkgIT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAx
LCAiIiwgZnVuY3Rpb24tPmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpLCAibWFpbiBm
dW5jdGlvbiBjYW5ub3QgcmV0dXJuIGEgdmFsdWUiKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLwotICAg
ICAgICAvLyBSZW1lbWJlciB0aGUgcmV0dXJuIHR5cGUgZm9yIGxhdGVyIGNoZWNraW5nIGZvciBS
RVRVUk4gc3RhdGVtZW50cy4KLSAgICAgICAgLy8KLSAgICAgICAgY29udGV4dC0+Y3VycmVudEZ1
bmN0aW9uVHlwZSA9ICYocHJldkRlYy0+Z2V0UmV0dXJuVHlwZSgpKTsKLSAgICAgICAgY29udGV4
dC0+ZnVuY3Rpb25SZXR1cm5zVmFsdWUgPSBmYWxzZTsKLQotICAgICAgICAvLwotICAgICAgICAv
LyBJbnNlcnQgcGFyYW1ldGVycyBpbnRvIHRoZSBzeW1ib2wgdGFibGUuCi0gICAgICAgIC8vIElm
IHRoZSBwYXJhbWV0ZXIgaGFzIG5vIG5hbWUsIGl0J3Mgbm90IGFuIGVycm9yLCBqdXN0IGRvbid0
IGluc2VydCBpdAotICAgICAgICAvLyAoY291bGQgYmUgdXNlZCBmb3IgdW51c2VkIGFyZ3MpLgot
ICAgICAgICAvLwotICAgICAgICAvLyBBbHNvLCBhY2N1bXVsYXRlIHRoZSBsaXN0IG9mIHBhcmFt
ZXRlcnMgaW50byB0aGUgSElMLCBzbyBsb3dlciBsZXZlbCBjb2RlCi0gICAgICAgIC8vIGtub3dz
IHdoZXJlIHRvIGZpbmQgcGFyYW1ldGVycy4KLSAgICAgICAgLy8KLSAgICAgICAgVEludGVybUFn
Z3JlZ2F0ZSogcGFyYW1Ob2RlcyA9IG5ldyBUSW50ZXJtQWdncmVnYXRlOwotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uLT5nZXRQYXJhbUNvdW50KCk7IGkrKykgewotICAg
ICAgICAgICAgY29uc3QgVFBhcmFtZXRlciYgcGFyYW0gPSBmdW5jdGlvbi0+Z2V0UGFyYW0oaSk7
Ci0gICAgICAgICAgICBpZiAocGFyYW0ubmFtZSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgVFZh
cmlhYmxlICp2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUocGFyYW0ubmFtZSwgKnBhcmFtLnR5cGUp
OwotICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgLy8gSW5zZXJ0IHRoZSBwYXJh
bWV0ZXJzIHdpdGggbmFtZSBpbiB0aGUgc3ltYm9sIHRhYmxlLgotICAgICAgICAgICAgICAgIC8v
Ci0gICAgICAgICAgICAgICAgaWYgKCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJp
YWJsZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJyZWRlZmlu
aXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwotICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJs
ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAg
ICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyIHRvIHRoZSBISUwKLSAgICAgICAgICAgICAgICAvLwot
ICAgICAgICAgICAgICAgIHBhcmFtTm9kZXMgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0Fn
Z3JlZ2F0ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFyYW1Ob2RlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0TmFtZSgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QDEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMSk7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHBhcmFtTm9kZXMgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShwYXJhbU5vZGVzLCBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkU3ltYm9sKDAsICIiLCAqcGFyYW0udHlwZSwgQDEpLCBAMSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY29udGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3Jl
Z2F0ZU9wZXJhdG9yKHBhcmFtTm9kZXMsIEVPcFBhcmFtZXRlcnMsIEAxKTsKLSAgICAgICAgJDEu
aW50ZXJtQWdncmVnYXRlID0gcGFyYW1Ob2RlczsKLSAgICAgICAgY29udGV4dC0+bG9vcE5lc3Rp
bmdMZXZlbCA9IDA7Ci0gICAgfQotICAgIGNvbXBvdW5kX3N0YXRlbWVudF9ub19uZXdfc2NvcGUg
ewotICAgICAgICAvLz8/IENoZWNrIHRoYXQgYWxsIHBhdGhzIHJldHVybiBhIHZhbHVlIGlmIHJl
dHVybiB0eXBlICE9IHZvaWQgPwotICAgICAgICAvLyAgIE1heSBiZSBiZXN0IGRvbmUgYXMgcG9z
dCBwcm9jZXNzIHBoYXNlIG9uIGludGVybWVkaWF0ZSBjb2RlCi0gICAgICAgIGlmIChjb250ZXh0
LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkICYmICEgY29u
dGV4dC0+ZnVuY3Rpb25SZXR1cm5zVmFsdWUpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KEAxLCAiZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIGEgdmFsdWU6IiwgIiIsICQxLmZ1bmN0aW9u
LT5nZXROYW1lKCkuY19zdHIoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdy
b3dBZ2dyZWdhdGUoJDEuaW50ZXJtQWdncmVnYXRlLCAkMywgQCQpOwotICAgICAgICBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IoJCQsIEVPcEZ1bmN0aW9uLCBAMSk7
Ci0gICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXROYW1lKCQxLmZ1bmN0aW9uLT5nZXRN
YW5nbGVkTmFtZSgpLmNfc3RyKCkpOwotICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0
VHlwZSgkMS5mdW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgpKTsKLQotICAgICAgICAvLyBzdG9yZSB0
aGUgcHJhZ21hIGluZm9ybWF0aW9uIGZvciBkZWJ1ZyBhbmQgb3B0aW1pemUgYW5kIG90aGVyIHZl
bmRvciBzcGVjaWZpYwotICAgICAgICAvLyBpbmZvcm1hdGlvbi4gVGhpcyBpbmZvcm1hdGlvbiBj
YW4gYmUgcXVlcmllZCBmcm9tIHRoZSBwYXJzZSB0cmVlCi0gICAgICAgICQkLT5nZXRBc0FnZ3Jl
Z2F0ZSgpLT5zZXRPcHRpbWl6ZShjb250ZXh0LT5wcmFnbWEoKS5vcHRpbWl6ZSk7Ci0gICAgICAg
ICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXREZWJ1Zyhjb250ZXh0LT5wcmFnbWEoKS5kZWJ1Zyk7
Ci0KLSAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7Ci0gICAgfQotICAgIDsKLQot
JSUKLQotaW50IGdsc2xhbmdfcGFyc2UoVFBhcnNlQ29udGV4dCogY29udGV4dCkgewotICAgIHJl
dHVybiB5eXBhcnNlKGNvbnRleHQpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDc5MDYyY2I3NmM5MzEyOGRiMTcyMWRhY2U1NmIzYmJkODQ4Nzk5M2IuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI5
NzQgKzAsMCBAQAotI2xpbmUgMTcgIi4vZ2xzbGFuZy5sIgotLy8KLS8vIENvcHlyaWdodCAoYykg
MjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRo
aXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBF
RElUIQotCi0vLyBJZ25vcmUgZXJyb3JzIGluIGF1dG8tZ2VuZXJhdGVkIGNvZGUuCi0jaWYgZGVm
aW5lZChfX0dOVUNfXykKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQt
ZnVuY3Rpb24iCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLXZhcmlh
YmxlIgotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3N3aXRjaC1lbnVtIgotI2Vs
aWYgZGVmaW5lZChfTVNDX1ZFUikKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MDY1KQotI3By
YWdtYSB3YXJuaW5nKGRpc2FibGU6IDQxODkpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUw
NSkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzAxKQotI2VuZGlmCi0KLSNpZiBkZWZpbmVk
KF9fY2xhbmdfXykKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21hIGNsYW5n
IGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bmtub3duLXByYWdtYXMiCi0jcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLXJlZ2lzdGVyIgotI2VuZGlmCi0KLQotCi0j
bGluZSAyNSAiLi9nbHNsYW5nX2xleC5jcHAiCi0KLSNkZWZpbmUgIFlZX0lOVF9BTElHTkVEIHNo
b3J0IGludAotCi0vKiBBIGxleGljYWwgc2Nhbm5lciBnZW5lcmF0ZWQgYnkgZmxleCAqLwotCi0j
ZGVmaW5lIEZMRVhfU0NBTk5FUgotI2RlZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJT04gMgotI2Rl
ZmluZSBZWV9GTEVYX01JTk9SX1ZFUlNJT04gNQotI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZF
UlNJT04gMzUKLSNpZiBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gPiAwCi0jZGVmaW5lIEZMRVhf
QkVUQQotI2VuZGlmCi0KLS8qIEZpcnN0LCB3ZSBkZWFsIHdpdGggIHBsYXRmb3JtLXNwZWNpZmlj
IG9yIGNvbXBpbGVyLXNwZWNpZmljIGlzc3Vlcy4gKi8KLQotLyogYmVnaW4gc3RhbmRhcmQgQyBo
ZWFkZXJzLiAqLwotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5j
bHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotLyogZW5kIHN0YW5kYXJkIEMg
aGVhZGVycy4gKi8KLQotLyogZmxleCBpbnRlZ2VyIHR5cGUgZGVmaW5pdGlvbnMgKi8KLQotI2lm
bmRlZiBGTEVYSU5UX0gKLSNkZWZpbmUgRkxFWElOVF9ICi0KLS8qIEM5OSBzeXN0ZW1zIGhhdmUg
PGludHR5cGVzLmg+LiBOb24tQzk5IHN5c3RlbXMgbWF5IG9yIG1heSBub3QuICovCi0KLSNpZiBk
ZWZpbmVkIChfX1NURENfVkVSU0lPTl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwK
LQotLyogQzk5IHNheXMgdG8gZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgYmVmb3JlIGluY2x1
ZGluZyBzdGRpbnQuaCwKLSAqIGlmIHlvdSB3YW50IHRoZSBsaW1pdCAobWF4L21pbikgbWFjcm9z
IGZvciBpbnQgdHlwZXMuIAotICovCi0jaWZuZGVmIF9fU1REQ19MSU1JVF9NQUNST1MKLSNkZWZp
bmUgX19TVERDX0xJTUlUX01BQ1JPUyAxCi0jZW5kaWYKLQotI2luY2x1ZGUgPGludHR5cGVzLmg+
Ci10eXBlZGVmIGludDhfdCBmbGV4X2ludDhfdDsKLXR5cGVkZWYgdWludDhfdCBmbGV4X3VpbnQ4
X3Q7Ci10eXBlZGVmIGludDE2X3QgZmxleF9pbnQxNl90OwotdHlwZWRlZiB1aW50MTZfdCBmbGV4
X3VpbnQxNl90OwotdHlwZWRlZiBpbnQzMl90IGZsZXhfaW50MzJfdDsKLXR5cGVkZWYgdWludDMy
X3QgZmxleF91aW50MzJfdDsKLXR5cGVkZWYgdWludDY0X3QgZmxleF91aW50NjRfdDsKLSNlbHNl
Ci10eXBlZGVmIHNpZ25lZCBjaGFyIGZsZXhfaW50OF90OwotdHlwZWRlZiBzaG9ydCBpbnQgZmxl
eF9pbnQxNl90OwotdHlwZWRlZiBpbnQgZmxleF9pbnQzMl90OwotdHlwZWRlZiB1bnNpZ25lZCBj
aGFyIGZsZXhfdWludDhfdDsgCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBmbGV4X3VpbnQx
Nl90OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxleF91aW50MzJfdDsKLSNlbmRpZiAvKiAhIEM5
OSAqLwotCi0vKiBMaW1pdHMgb2YgaW50ZWdyYWwgdHlwZXMuICovCi0jaWZuZGVmIElOVDhfTUlO
Ci0jZGVmaW5lIElOVDhfTUlOICAgICAgICAgICAgICAgKC0xMjgpCi0jZW5kaWYKLSNpZm5kZWYg
SU5UMTZfTUlOCi0jZGVmaW5lIElOVDE2X01JTiAgICAgICAgICAgICAgKC0zMjc2Ny0xKQotI2Vu
ZGlmCi0jaWZuZGVmIElOVDMyX01JTgotI2RlZmluZSBJTlQzMl9NSU4gICAgICAgICAgICAgICgt
MjE0NzQ4MzY0Ny0xKQotI2VuZGlmCi0jaWZuZGVmIElOVDhfTUFYCi0jZGVmaW5lIElOVDhfTUFY
ICAgICAgICAgICAgICAgKDEyNykKLSNlbmRpZgotI2lmbmRlZiBJTlQxNl9NQVgKLSNkZWZpbmUg
SU5UMTZfTUFYICAgICAgICAgICAgICAoMzI3NjcpCi0jZW5kaWYKLSNpZm5kZWYgSU5UMzJfTUFY
Ci0jZGVmaW5lIElOVDMyX01BWCAgICAgICAgICAgICAgKDIxNDc0ODM2NDcpCi0jZW5kaWYKLSNp
Zm5kZWYgVUlOVDhfTUFYCi0jZGVmaW5lIFVJTlQ4X01BWCAgICAgICAgICAgICAgKDI1NVUpCi0j
ZW5kaWYKLSNpZm5kZWYgVUlOVDE2X01BWAotI2RlZmluZSBVSU5UMTZfTUFYICAgICAgICAgICAg
ICg2NTUzNVUpCi0jZW5kaWYKLSNpZm5kZWYgVUlOVDMyX01BWAotI2RlZmluZSBVSU5UMzJfTUFY
ICAgICAgICAgICAgICg0Mjk0OTY3Mjk1VSkKLSNlbmRpZgotCi0jZW5kaWYgLyogISBGTEVYSU5U
X0ggKi8KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0KLS8qIFRoZSAiY29uc3QiIHN0b3JhZ2UtY2xh
c3MtbW9kaWZpZXIgaXMgdmFsaWQuICovCi0jZGVmaW5lIFlZX1VTRV9DT05TVAotCi0jZWxzZQkv
KiAhIF9fY3BsdXNwbHVzICovCi0KLS8qIEM5OSByZXF1aXJlcyBfX1NURENfXyB0byBiZSBkZWZp
bmVkIGFzIDEuICovCi0jaWYgZGVmaW5lZCAoX19TVERDX18pCi0KLSNkZWZpbmUgWVlfVVNFX0NP
TlNUCi0KLSNlbmRpZgkvKiBkZWZpbmVkIChfX1NURENfXykgKi8KLSNlbmRpZgkvKiAhIF9fY3Bs
dXNwbHVzICovCi0KLSNpZmRlZiBZWV9VU0VfQ09OU1QKLSNkZWZpbmUgeXljb25zdCBjb25zdAot
I2Vsc2UKLSNkZWZpbmUgeXljb25zdAotI2VuZGlmCi0KLS8qIFJldHVybmVkIHVwb24gZW5kLW9m
LWZpbGUuICovCi0jZGVmaW5lIFlZX05VTEwgMAotCi0vKiBQcm9tb3RlcyBhIHBvc3NpYmx5IG5l
Z2F0aXZlLCBwb3NzaWJseSBzaWduZWQgY2hhciB0byBhbiB1bnNpZ25lZAotICogaW50ZWdlciBm
b3IgdXNlIGFzIGFuIGFycmF5IGluZGV4LiAgSWYgdGhlIHNpZ25lZCBjaGFyIGlzIG5lZ2F0aXZl
LAotICogd2Ugd2FudCB0byBpbnN0ZWFkIHRyZWF0IGl0IGFzIGFuIDgtYml0IHVuc2lnbmVkIGNo
YXIsIGhlbmNlIHRoZQotICogZG91YmxlIGNhc3QuCi0gKi8KLSNkZWZpbmUgWVlfU0NfVE9fVUko
YykgKCh1bnNpZ25lZCBpbnQpICh1bnNpZ25lZCBjaGFyKSBjKQotCi0vKiBBbiBvcGFxdWUgcG9p
bnRlci4gKi8KLSNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TQ0FOTkVSX1QKLSNkZWZpbmUgWVlfVFlQ
RURFRl9ZWV9TQ0FOTkVSX1QKLXR5cGVkZWYgdm9pZCogeXlzY2FuX3Q7Ci0jZW5kaWYKLQotLyog
Rm9yIGNvbnZlbmllbmNlLCB0aGVzZSB2YXJzIChwbHVzIHRoZSBiaXNvbiB2YXJzIGZhciBiZWxv
dykKLSAgIGFyZSBtYWNyb3MgaW4gdGhlIHJlZW50cmFudCBzY2FubmVyLiAqLwotI2RlZmluZSB5
eWluIHl5Zy0+eXlpbl9yCi0jZGVmaW5lIHl5b3V0IHl5Zy0+eXlvdXRfcgotI2RlZmluZSB5eWV4
dHJhIHl5Zy0+eXlleHRyYV9yCi0jZGVmaW5lIHl5bGVuZyB5eWctPnl5bGVuZ19yCi0jZGVmaW5l
IHl5dGV4dCB5eWctPnl5dGV4dF9yCi0jZGVmaW5lIHl5bGluZW5vIChZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2JzX2xpbmVubykKLSNkZWZpbmUgeXljb2x1bW4gKFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfYnNfY29sdW1uKQotI2RlZmluZSB5eV9mbGV4X2RlYnVnIHl5Zy0+eXlf
ZmxleF9kZWJ1Z19yCi0KLS8qIEVudGVyIGEgc3RhcnQgY29uZGl0aW9uLiAgVGhpcyBtYWNybyBy
ZWFsbHkgb3VnaHQgdG8gdGFrZSBhIHBhcmFtZXRlciwKLSAqIGJ1dCB3ZSBkbyBpdCB0aGUgZGlz
Z3VzdGluZyBjcnVmdHkgd2F5IGZvcmNlZCBvbiB1cyBieSB0aGUgKCktbGVzcwotICogZGVmaW5p
dGlvbiBvZiBCRUdJTi4KLSAqLwotI2RlZmluZSBCRUdJTiB5eWctPnl5X3N0YXJ0ID0gMSArIDIg
KgotCi0vKiBUcmFuc2xhdGUgdGhlIGN1cnJlbnQgc3RhcnQgc3RhdGUgaW50byBhIHZhbHVlIHRo
YXQgY2FuIGJlIGxhdGVyIGhhbmRlZAotICogdG8gQkVHSU4gdG8gcmV0dXJuIHRvIHRoZSBzdGF0
ZS4gIFRoZSBZWVNUQVRFIGFsaWFzIGlzIGZvciBsZXgKLSAqIGNvbXBhdGliaWxpdHkuCi0gKi8K
LSNkZWZpbmUgWVlfU1RBUlQgKCh5eWctPnl5X3N0YXJ0IC0gMSkgLyAyKQotI2RlZmluZSBZWVNU
QVRFIFlZX1NUQVJUCi0KLS8qIEFjdGlvbiBudW1iZXIgZm9yIEVPRiBydWxlIG9mIGEgZ2l2ZW4g
c3RhcnQgc3RhdGUuICovCi0jZGVmaW5lIFlZX1NUQVRFX0VPRihzdGF0ZSkgKFlZX0VORF9PRl9C
VUZGRVIgKyBzdGF0ZSArIDEpCi0KLS8qIFNwZWNpYWwgYWN0aW9uIG1lYW5pbmcgInN0YXJ0IHBy
b2Nlc3NpbmcgYSBuZXcgZmlsZSIuICovCi0jZGVmaW5lIFlZX05FV19GSUxFIHl5cmVzdGFydCh5
eWluICx5eXNjYW5uZXIgKQotCi0jZGVmaW5lIFlZX0VORF9PRl9CVUZGRVJfQ0hBUiAwCi0KLS8q
IFNpemUgb2YgZGVmYXVsdCBpbnB1dCBidWZmZXIuICovCi0jaWZuZGVmIFlZX0JVRl9TSVpFCi0j
ZGVmaW5lIFlZX0JVRl9TSVpFIDE2Mzg0Ci0jZW5kaWYKLQotLyogVGhlIHN0YXRlIGJ1ZiBtdXN0
IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIG9uZSBzdGF0ZSBwZXIgY2hhcmFjdGVyIGluIHRoZSBt
YWluIGJ1ZmZlci4KLSAqLwotI2RlZmluZSBZWV9TVEFURV9CVUZfU0laRSAgICgoWVlfQlVGX1NJ
WkUgKyAyKSAqIHNpemVvZih5eV9zdGF0ZV90eXBlKSkKLQotI2lmbmRlZiBZWV9UWVBFREVGX1lZ
X0JVRkZFUl9TVEFURQotI2RlZmluZSBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQotdHlwZWRl
ZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7Ci0jZW5kaWYKLQotI2lm
bmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAotI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAot
dHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OwotI2VuZGlmCi0KLSNkZWZpbmUgRU9CX0FDVF9DT05U
SU5VRV9TQ0FOIDAKLSNkZWZpbmUgRU9CX0FDVF9FTkRfT0ZfRklMRSAxCi0jZGVmaW5lIEVPQl9B
Q1RfTEFTVF9NQVRDSCAyCi0KLSAgICAvKiBOb3RlOiBXZSBzcGVjaWZpY2FsbHkgb21pdCB0aGUg
dGVzdCBmb3IgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sIGJlY2F1c2UgaXQgcmVxdWlyZXMKLSAgICAg
KiAgICAgICBhY2Nlc3MgdG8gdGhlIGxvY2FsIHZhcmlhYmxlIHl5X2FjdC4gU2luY2UgeXlsZXNz
KCkgaXMgYSBtYWNybywgaXQgd291bGQgYnJlYWsKLSAgICAgKiAgICAgICBleGlzdGluZyBzY2Fu
bmVycyB0aGF0IGNhbGwgeXlsZXNzKCkgZnJvbSBPVVRTSURFIHl5bGV4LiAKLSAgICAgKiAgICAg
ICBPbmUgb2J2aW91cyBzb2x1dGlvbiBpdCB0byBtYWtlIHl5X2FjdCBhIGdsb2JhbC4gSSB0cmll
ZCB0aGF0LCBhbmQgc2F3Ci0gICAgICogICAgICAgYSA1JSBwZXJmb3JtYW5jZSBoaXQgaW4gYSBu
b24teXlsaW5lbm8gc2Nhbm5lciwgYmVjYXVzZSB5eV9hY3QgaXMKLSAgICAgKiAgICAgICBub3Jt
YWxseSBkZWNsYXJlZCBhcyBhIHJlZ2lzdGVyIHZhcmlhYmxlLS0gc28gaXQgaXMgbm90IHdvcnRo
IGl0LgotICAgICAqLwotICAgICNkZWZpbmUgIFlZX0xFU1NfTElORU5PKG4pIFwKLSAgICAgICAg
ICAgIGRvIHsgXAotICAgICAgICAgICAgICAgIHl5X3NpemVfdCB5eWw7XAotICAgICAgICAgICAg
ICAgIGZvciAoIHl5bCA9IG47IHl5bCA8IHl5bGVuZzsgKyt5eWwgKVwKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nIClcCi0gICAgICAgICAgICAgICAgICAgICAg
ICAtLXl5bGluZW5vO1wKLSAgICAgICAgICAgIH13aGlsZSgwKQotICAgIAotLyogUmV0dXJuIGFs
bCBidXQgdGhlIGZpcnN0ICJuIiBtYXRjaGVkIGNoYXJhY3RlcnMgYmFjayB0byB0aGUgaW5wdXQg
c3RyZWFtLiAqLwotI2RlZmluZSB5eWxlc3MobikgXAotCWRvIFwKLQkJeyBcCi0JCS8qIFVuZG8g
ZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAotICAgICAgICBpbnQgeXlsZXNzX21h
Y3JvX2FyZyA9IChuKTsgXAotICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJn
KTtcCi0JCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBcCi0JCVlZX1JFU1RPUkVfWVlfTU9S
RV9PRkZTRVQgXAotCQl5eWctPnl5X2NfYnVmX3AgPSB5eV9jcCA9IHl5X2JwICsgeXlsZXNzX21h
Y3JvX2FyZyAtIFlZX01PUkVfQURKOyBcCi0JCVlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1
cCB5eXRleHQgYWdhaW4gKi8gXAotCQl9IFwKLQl3aGlsZSAoIDAgKQotCi0jZGVmaW5lIHVucHV0
KGMpIHl5dW5wdXQoIGMsIHl5Zy0+eXl0ZXh0X3B0ciAsIHl5c2Nhbm5lciApCi0KLSNpZm5kZWYg
WVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQotI2RlZmluZSBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NU
QVRFCi1zdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlCi0JewotCUZJTEUgKnl5X2lucHV0X2ZpbGU7Ci0K
LQljaGFyICp5eV9jaF9idWY7CQkvKiBpbnB1dCBidWZmZXIgKi8KLQljaGFyICp5eV9idWZfcG9z
OwkJLyogY3VycmVudCBwb3NpdGlvbiBpbiBpbnB1dCBidWZmZXIgKi8KLQotCS8qIFNpemUgb2Yg
aW5wdXQgYnVmZmVyIGluIGJ5dGVzLCBub3QgaW5jbHVkaW5nIHJvb20gZm9yIEVPQgotCSAqIGNo
YXJhY3RlcnMuCi0JICovCi0JeXlfc2l6ZV90IHl5X2J1Zl9zaXplOwotCi0JLyogTnVtYmVyIG9m
IGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2NoX2J1Ziwgbm90IGluY2x1ZGluZyBFT0IKLQkgKiBj
aGFyYWN0ZXJzLgotCSAqLwotCXl5X3NpemVfdCB5eV9uX2NoYXJzOwotCi0JLyogV2hldGhlciB3
ZSAib3duIiB0aGUgYnVmZmVyIC0gaS5lLiwgd2Uga25vdyB3ZSBjcmVhdGVkIGl0LAotCSAqIGFu
ZCBjYW4gcmVhbGxvYygpIGl0IHRvIGdyb3cgaXQsIGFuZCBzaG91bGQgZnJlZSgpIGl0IHRvCi0J
ICogZGVsZXRlIGl0LgotCSAqLwotCWludCB5eV9pc19vdXJfYnVmZmVyOwotCi0JLyogV2hldGhl
ciB0aGlzIGlzIGFuICJpbnRlcmFjdGl2ZSIgaW5wdXQgc291cmNlOyBpZiBzbywgYW5kCi0JICog
aWYgd2UncmUgdXNpbmcgc3RkaW8gZm9yIGlucHV0LCB0aGVuIHdlIHdhbnQgdG8gdXNlIGdldGMo
KQotCSAqIGluc3RlYWQgb2YgZnJlYWQoKSwgdG8gbWFrZSBzdXJlIHdlIHN0b3AgZmV0Y2hpbmcg
aW5wdXQgYWZ0ZXIKLQkgKiBlYWNoIG5ld2xpbmUuCi0JICovCi0JaW50IHl5X2lzX2ludGVyYWN0
aXZlOwotCi0JLyogV2hldGhlciB3ZSdyZSBjb25zaWRlcmVkIHRvIGJlIGF0IHRoZSBiZWdpbm5p
bmcgb2YgYSBsaW5lLgotCSAqIElmIHNvLCAnXicgcnVsZXMgd2lsbCBiZSBhY3RpdmUgb24gdGhl
IG5leHQgbWF0Y2gsIG90aGVyd2lzZQotCSAqIG5vdC4KLQkgKi8KLQlpbnQgeXlfYXRfYm9sOwot
Ci0gICAgaW50IHl5X2JzX2xpbmVubzsgLyoqPCBUaGUgbGluZSBjb3VudC4gKi8KLSAgICBpbnQg
eXlfYnNfY29sdW1uOyAvKio8IFRoZSBjb2x1bW4gY291bnQuICovCi0gICAgCi0JLyogV2hldGhl
ciB0byB0cnkgdG8gZmlsbCB0aGUgaW5wdXQgYnVmZmVyIHdoZW4gd2UgcmVhY2ggdGhlCi0JICog
ZW5kIG9mIGl0LgotCSAqLwotCWludCB5eV9maWxsX2J1ZmZlcjsKLQotCWludCB5eV9idWZmZXJf
c3RhdHVzOwotCi0jZGVmaW5lIFlZX0JVRkZFUl9ORVcgMAotI2RlZmluZSBZWV9CVUZGRVJfTk9S
TUFMIDEKLQkvKiBXaGVuIGFuIEVPRidzIGJlZW4gc2VlbiBidXQgdGhlcmUncyBzdGlsbCBzb21l
IHRleHQgdG8gcHJvY2VzcwotCSAqIHRoZW4gd2UgbWFyayB0aGUgYnVmZmVyIGFzIFlZX0VPRl9Q
RU5ESU5HLCB0byBpbmRpY2F0ZSB0aGF0IHdlCi0JICogc2hvdWxkbid0IHRyeSByZWFkaW5nIGZy
b20gdGhlIGlucHV0IHNvdXJjZSBhbnkgbW9yZS4gIFdlIG1pZ2h0Ci0JICogc3RpbGwgaGF2ZSBh
IGJ1bmNoIG9mIHRva2VucyB0byBtYXRjaCwgdGhvdWdoLCBiZWNhdXNlIG9mCi0JICogcG9zc2li
bGUgYmFja2luZy11cC4KLQkgKgotCSAqIFdoZW4gd2UgYWN0dWFsbHkgc2VlIHRoZSBFT0YsIHdl
IGNoYW5nZSB0aGUgc3RhdHVzIHRvICJuZXciCi0JICogKHZpYSB5eXJlc3RhcnQoKSksIHNvIHRo
YXQgdGhlIHVzZXIgY2FuIGNvbnRpbnVlIHNjYW5uaW5nIGJ5Ci0JICoganVzdCBwb2ludGluZyB5
eWluIGF0IGEgbmV3IGlucHV0IGZpbGUuCi0JICovCi0jZGVmaW5lIFlZX0JVRkZFUl9FT0ZfUEVO
RElORyAyCi0KLQl9OwotI2VuZGlmIC8qICFZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFICovCi0K
LS8qIFdlIHByb3ZpZGUgbWFjcm9zIGZvciBhY2Nlc3NpbmcgYnVmZmVyIHN0YXRlcyBpbiBjYXNl
IGluIHRoZQotICogZnV0dXJlIHdlIHdhbnQgdG8gcHV0IHRoZSBidWZmZXIgc3RhdGVzIGluIGEg
bW9yZSBnZW5lcmFsCi0gKiAic2Nhbm5lciBzdGF0ZSIuCi0gKgotICogUmV0dXJucyB0aGUgdG9w
IG9mIHRoZSBzdGFjaywgb3IgTlVMTC4KLSAqLwotI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUiAo
IHl5Zy0+eXlfYnVmZmVyX3N0YWNrIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPyB5eWct
Pnl5X2J1ZmZlcl9zdGFja1t5eWctPnl5X2J1ZmZlcl9zdGFja190b3BdIFwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgOiBOVUxMKQotCi0vKiBTYW1lIGFzIHByZXZpb3VzIG1hY3JvLCBidXQg
dXNlZnVsIHdoZW4gd2Uga25vdyB0aGF0IHRoZSBidWZmZXIgc3RhY2sgaXMgbm90Ci0gKiBOVUxM
IG9yIHdoZW4gd2UgbmVlZCBhbiBsdmFsdWUuIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KLSAqLwot
I2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgeXlnLT55eV9idWZmZXJfc3RhY2tbeXln
LT55eV9idWZmZXJfc3RhY2tfdG9wXQotCi12b2lkIHl5cmVzdGFydCAoRklMRSAqaW5wdXRfZmls
ZSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHl5X3N3aXRjaF90b19idWZmZXIgKFlZX0JV
RkZFUl9TVEFURSBuZXdfYnVmZmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLVlZX0JVRkZFUl9T
VEFURSB5eV9jcmVhdGVfYnVmZmVyIChGSUxFICpmaWxlLGludCBzaXplICx5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKLXZvaWQgeXlfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgLHl5c2Nh
bl90IHl5c2Nhbm5lciApOwotdm9pZCB5eV9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBi
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgeXlwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVG
RkVSX1NUQVRFIG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCB5eXBvcF9i
dWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1zdGF0aWMgdm9pZCB5eWVuc3Vy
ZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotc3RhdGljIHZvaWQgeXlfbG9h
ZF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotc3RhdGljIHZvaWQgeXlfaW5p
dF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiLEZJTEUgKmZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOwotCi0jZGVmaW5lIFlZX0ZMVVNIX0JVRkZFUiB5eV9mbHVzaF9idWZmZXIoWVlfQ1VSUkVO
VF9CVUZGRVIgLHl5c2Nhbm5lcikKLQotWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnVmZmVyIChj
aGFyICpiYXNlLHl5X3NpemVfdCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLVlZX0JVRkZF
Ul9TVEFURSB5eV9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICp5eV9zdHIgLHl5c2Nhbl90IHl5
c2Nhbm5lciApOwotWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAq
Ynl0ZXMseXlfc2l6ZV90IGxlbiAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgKnl5YWxs
b2MgKHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkICp5eXJlYWxsb2MgKHZv
aWQgKix5eV9zaXplX3QgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCB5eWZyZWUgKHZvaWQg
KiAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLSNkZWZpbmUgeXlfbmV3X2J1ZmZlciB5eV9jcmVh
dGVfYnVmZmVyCi0KLSNkZWZpbmUgeXlfc2V0X2ludGVyYWN0aXZlKGlzX2ludGVyYWN0aXZlKSBc
Ci0JeyBcCi0JaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7IFwKLSAgICAgICAgeXllbnN1cmVf
YnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOyBcCi0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9
ICAgIFwKLSAgICAgICAgICAgIHl5X2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlz
Y2FubmVyKTsgXAotCX0gXAotCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJh
Y3RpdmUgPSBpc19pbnRlcmFjdGl2ZTsgXAotCX0KLQotI2RlZmluZSB5eV9zZXRfYm9sKGF0X2Jv
bCkgXAotCXsgXAotCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApe1wKLSAgICAgICAgeXllbnN1
cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOyBcCi0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RSA9ICAgIFwKLSAgICAgICAgICAgIHl5X2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAs
eXlzY2FubmVyKTsgXAotCX0gXAotCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9s
ID0gYXRfYm9sOyBcCi0JfQotCi0jZGVmaW5lIFlZX0FUX0JPTCgpIChZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2F0X2JvbCkKLQotLyogQmVnaW4gdXNlciBzZWN0MyAqLwotCi0jZGVmaW5l
IHl5d3JhcChuKSAxCi0jZGVmaW5lIFlZX1NLSVBfWVlXUkFQCi0KLXR5cGVkZWYgdW5zaWduZWQg
Y2hhciBZWV9DSEFSOwotCi10eXBlZGVmIGludCB5eV9zdGF0ZV90eXBlOwotCi0jZGVmaW5lIHl5
dGV4dF9wdHIgeXl0ZXh0X3IKLQotc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3Vz
X3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3Ry
eV9OVUxfdHJhbnMgKHl5X3N0YXRlX3R5cGUgY3VycmVudF9zdGF0ZSAgLHl5c2Nhbl90IHl5c2Nh
bm5lcik7Ci1zdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVy
ICk7Ci1zdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyIG1zZ1tdICx5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKLQotLyogRG9uZSBhZnRlciB0aGUgY3VycmVudCBwYXR0ZXJuIGhh
cyBiZWVuIG1hdGNoZWQgYW5kIGJlZm9yZSB0aGUKLSAqIGNvcnJlc3BvbmRpbmcgYWN0aW9uIC0g
c2V0cyB1cCB5eXRleHQuCi0gKi8KLSNkZWZpbmUgWVlfRE9fQkVGT1JFX0FDVElPTiBcCi0JeXln
LT55eXRleHRfcHRyID0geXlfYnA7IFwKLQl5eWxlbmcgPSAoeXlfc2l6ZV90KSAoeXlfY3AgLSB5
eV9icCk7IFwKLQl5eWctPnl5X2hvbGRfY2hhciA9ICp5eV9jcDsgXAotCSp5eV9jcCA9ICdcMCc7
IFwKLQl5eWctPnl5X2NfYnVmX3AgPSB5eV9jcDsKLQotI2RlZmluZSBZWV9OVU1fUlVMRVMgMTQ3
Ci0jZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMTQ4Ci0vKiBUaGlzIHN0cnVjdCBpcyBub3QgdXNl
ZCBpbiB0aGlzIHNjYW5uZXIsCi0gICBidXQgaXRzIHByZXNlbmNlIGlzIG5lY2Vzc2FyeS4gKi8K
LXN0cnVjdCB5eV90cmFuc19pbmZvCi0JewotCWZsZXhfaW50MzJfdCB5eV92ZXJpZnk7Ci0JZmxl
eF9pbnQzMl90IHl5X254dDsKLQl9Owotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Fj
Y2VwdFs0NDNdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMCwgICAgMCwgIDE0OCwgIDE0NiwgIDE0
NSwgIDE0NSwgIDEzMiwgIDEzOCwgIDE0MywgIDEyNywKLSAgICAgIDEyOCwgIDEzNiwgIDEzNSwg
IDEyNCwgIDEzMywgIDEzMSwgIDEzNywgICA5NiwgICA5NiwgIDEyNSwKLSAgICAgIDEyMSwgIDEz
OSwgIDEyNiwgIDE0MCwgIDE0NCwgICA5MywgIDEyOSwgIDEzMCwgIDE0MiwgICA5MywKLSAgICAg
ICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5
MywKLSAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5Mywg
ICA5MywgIDEyMiwKLSAgICAgIDE0MSwgIDEyMywgIDEzNCwgIDExOCwgIDEwNCwgIDEyMywgIDEx
MiwgIDEwNywgIDEwMiwgIDExMCwKLSAgICAgIDEwMCwgIDExMSwgIDEwMSwgICA5OSwgIDEwMywg
ICA5OCwgICA5NSwgICA5NiwgICAgMCwgICAgMCwKLSAgICAgIDEzMCwgIDEyMiwgIDEyOSwgIDEx
OSwgIDExNSwgIDExNywgIDExNiwgIDEyMCwgICA5MywgIDEwOCwKLSAgICAgIDExNCwgICA5Mywg
ICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5
MywgICAxMiwgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywK
LQotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDE1LCAgIDE3LCAgIDkzLCAg
IDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAg
IDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LCAgMTA5LCAgMTEzLCAgICAwLCAgIDk4LCAgICAwLCAgICAwLAotICAgICAgIDk3LCAgIDk0LCAg
MTA1LCAgMTA2LCAgIDQ1LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAot
ICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDEzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDIxLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAg
IDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDE4LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAg
IDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAotCi0gICAgICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgIDAsICAgOTksICAgIDAsICAgOTgsICAgOTMsCi0gICAgICAgMjMs
ICAgOTMsICAgOTMsICAgOTAsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0g
ICAgICAgOTMsICAgMTYsICAgNDgsICAgOTMsICAgOTMsICAgOTMsICAgNjQsICAgOTMsICAgOTMs
ICAgNTMsCi0gICAgICAgNjgsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgNjUsCi0gICAgICAgIDQsICAgMjgsICAgMjksICAgMzAsICAgOTMsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgNTEsICAgMjQsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgMzEsICAgMzIsCi0gICAgICAgMzMsICAg
MjIsICAgOTMsICAgOTMsICAgOTMsICAgMTAsICAgMzcsICAgMzgsICAgMzksICAgNDYsCi0gICAg
ICAgIDcsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgNzcsICAgNzgsICAgNzksICAgOTMsICAg
MjUsCi0gICAgICAgNjksICAgMjAsICAgODAsICAgODEsICAgODIsICAgIDIsICAgNzQsICAgNzUs
ICAgNzYsICAgOTMsCi0KLSAgICAgICAxOSwgICA3MiwgICA5MywgICA5MywgICAzNCwgICAzNSwg
ICAzNiwgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5
MywgICA5MywgICA2NiwgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICA5Mywg
ICA5MywgICA5MywgICA0NywgICA5MywgICA5MiwgICA5MywgICA5MywKLSAgICAgICAxNCwgICA5
MywgICA5MywgICA5MywgICA5MywgICA2NywgICA2MSwgICA1NiwgICA5MywgICA5MywKLSAgICAg
ICA5MywgICA5MywgICA5MywgICA3MywgICA1MiwgICA5MywgICA1OSwgICAyNywgICA5MywgICA4
OSwKLSAgICAgICA2MCwgICA0NCwgICA3MSwgICA1NCwgICA5MywgICA5MywgICA5MywgICA5Mywg
ICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICA1NSwgICAyNiwgICA5MywgICA5MywgICA5
MywgICAgMywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICA5MywgICA0OSwgICAgOCwg
ICA5MywgICAgOSwgICA5MywgICA5MywgICAxMSwKLSAgICAgICA2MiwgICA5MywgICA5MywgICA5
MywgICA1NywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA1MCwg
ICA3MCwgICA1OCwgICAgNiwgICA2MywgICAgMSwgICA5MSwgICAgNSwgICA4MywKLQotICAgICAg
IDQwLCAgIDg0LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDQxLCAgIDkzLCAgIDkzLCAgIDkzLCAg
IDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDQzLCAgIDkzLCAgIDg3LCAgIDkzLCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDg1LCAgIDkzLCAgIDg2LCAgIDkzLCAgIDkzLCAg
IDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDQyLAotICAgICAgIDg4LCAgICAwCi0gICAgfSA7Ci0K
LXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0KLSAgICB7ICAgMCwKLSAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMiwg
ICAgMywKLSAgICAgICAgMiwgICAgMiwgICAgMiwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMiwgICAgNCwgICAgMSwgICAg
MSwgICAgMSwgICAgNSwgICAgNiwgICAgMSwgICAgNywKLSAgICAgICAgOCwgICAgOSwgICAxMCwg
ICAxMSwgICAxMiwgICAxMywgICAxNCwgICAxNSwgICAxNiwgICAxNywKLSAgICAgICAxOCwgICAx
OSwgICAyMCwgICAyMCwgICAyMCwgICAyMSwgICAyMSwgICAyMiwgICAyMywgICAyNCwKLSAgICAg
ICAyNSwgICAyNiwgICAyNywgICAgMSwgICAyOCwgICAyOCwgICAyOSwgICAzMCwgICAzMSwgICAy
OCwKLSAgICAgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMiwg
ICAzMywgICAzMiwKLSAgICAgICAzMiwgICAzNCwgICAzNSwgICAzMiwgICAzMiwgICAzMiwgICAz
MiwgICAzNiwgICAzMiwgICAzMiwKLSAgICAgICAzNywgICAgMSwgICAzOCwgICAzOSwgICAzMiwg
ICAgMSwgICA0MCwgICA0MSwgICA0MiwgICA0MywKLQotICAgICAgIDQ0LCAgIDQ1LCAgIDQ2LCAg
IDQ3LCAgIDQ4LCAgIDMyLCAgIDQ5LCAgIDUwLCAgIDUxLCAgIDUyLAotICAgICAgIDUzLCAgIDU0
LCAgIDMyLCAgIDU1LCAgIDU2LCAgIDU3LCAgIDU4LCAgIDU5LCAgIDYwLCAgIDYxLAotICAgICAg
IDYyLCAgIDYzLCAgIDY0LCAgIDY1LCAgIDY2LCAgIDY3LCAgICAxLCAgICAxLCAgICAxLCAgICAx
LAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAot
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLAotCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0g
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEKLSAgICB9IDsKLQotc3RhdGljIHl5Y29u
c3QgZmxleF9pbnQzMl90IHl5X21ldGFbNjhdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAg
MiwKLSAgICAgICAgMiwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMiwg
ICAgMiwgICAgMiwKLSAgICAgICAgMiwgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAg
MSwgICAgMSwgICAgMSwgICAgMiwKLSAgICAgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwg
ICAgMywgICAgMywgICAgMywgICAgMywgICAgMywKLSAgICAgICAgMywgICAgMywgICAgMywgICAg
MywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywKLSAgICAgICAgMywgICAgMywg
ICAgMywgICAgMSwgICAgMSwgICAgMSwgICAgMQotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBm
bGV4X2ludDE2X3QgeXlfYmFzZVs0NDVdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMCwgICAgMCwg
IDU4NywgIDU4OCwgIDU4OCwgIDU4OCwgIDU2MSwgICA0MywgICA2NCwgIDU4OCwKLSAgICAgIDU4
OCwgIDU2MCwgICA2MSwgIDU4OCwgICA2MCwgICA1OCwgIDU1OSwgICA3NywgICA4NiwgIDU1NywK
LSAgICAgIDU4OCwgIDEwNCwgIDU1NywgICA1NSwgIDU4OCwgICAgMCwgIDU4OCwgIDU4OCwgICA3
NSwgICAyNiwKLSAgICAgICA1NywgICA4MiwgICA4MywgICA3MywgICA5MywgIDUyOCwgICA5Nywg
ICA5NSwgIDUyNywgICA0NCwKLSAgICAgICA3MSwgIDUyMSwgIDEwNCwgIDUzNCwgIDExMCwgIDEx
NiwgICAzNSwgIDExMSwgIDUzMCwgIDU4OCwKLSAgICAgIDExNCwgIDU4OCwgIDU4OCwgIDU4OCwg
IDU4OCwgIDU4OCwgIDU4OCwgIDU4OCwgIDU4OCwgIDU4OCwKLSAgICAgIDU4OCwgIDU4OCwgIDU4
OCwgIDE2NSwgIDU4OCwgIDE3MiwgIDIwMiwgIDIxMSwgIDIzMywgICAgMCwKLSAgICAgIDU4OCwg
IDU4OCwgIDU4OCwgIDU1MSwgIDU4OCwgIDU4OCwgIDU4OCwgIDU1MCwgICAgMCwgIDU4OCwKLSAg
ICAgIDU4OCwgIDUyMywgIDUxNiwgIDUxOSwgIDUyNywgIDUyNiwgIDUxMywgIDUyOCwgIDUxNSwg
IDUyMSwKLSAgICAgIDUwOSwgIDUwNiwgIDUxOSwgIDUwNiwgIDUwMywgIDUwMywgIDUwOSwgIDQ5
NywgIDEwOCwgIDUwMiwKLQotICAgICAgNTEyLCAgNDk4LCAgNTA0LCAgNTA3LCAgNTA4LCAgICAw
LCAgMTQ1LCAgNTA3LCAgMTEzLCAgNDkzLAotICAgICAgNTA2LCAgNDk3LCAgNDk5LCAgNDg5LCAg
NTAzLCAgNTAwLCAgNTAyLCAgNDg1LCAgNDkwLCAgNDg3LAotICAgICAgNDc2LCAgMTU3LCAgNDg0
LCAgNDg5LCAgNDg1LCAgNDg3LCAgNDc2LCAgNDc5LCAgMTE4LCAgNDg0LAotICAgICAgNDc2LCAg
NDg4LCAgIDcwLCAgNDgxLCAgNTg4LCAgNTg4LCAgMjQ2LCAgMjUzLCAgMjcwLCAgMjE5LAotICAg
ICAgMjgzLCAgICAwLCAgNTg4LCAgNTg4LCAgICAwLCAgNDczLCAgNDc3LCAgNDg2LCAgNDgzLCAg
NDY3LAotICAgICAgNDY3LCAgMTE5LCAgNDgyLCAgNDc5LCAgNDc5LCAgNDc3LCAgNDc0LCAgNDY2
LCAgNDcyLCAgNDU5LAotICAgICAgNDcwLCAgNDU2LCAgNDcyLCAgICAwLCAgNDY5LCAgNDU3LCAg
NDY0LCAgNDYxLCAgNDY1LCAgNDU4LAotICAgICAgNDQ3LCAgNDQ2LCAgNDU5LCAgNDYyLCAgNDU5
LCAgNDU0LCAgNDQ1LCAgMTg4LCAgNDUwLCAgNDUzLAotICAgICAgNDQ0LCAgNDQxLCAgNDQ1LCAg
NDUxLCAgNDQyLCAgNDMzLCAgNDM2LCAgNDM0LCAgNDQ0LCAgNDMwLAotICAgICAgNDI4LCAgNDQx
LCAgNDI3LCAgNDI5LCAgNDI2LCAgNDM3LCAgNDM2LCAgMTI0LCAgNDMxLCAgNDI2LAotCi0gICAg
ICA0MTUsICAyNTgsICA0MzMsICA0MzUsICA0MjQsICAyOTAsICAyOTcsICAzMDQsICAzMTEsICA0
MjUsCi0gICAgICAgIDAsICA0MjMsICAyNzUsICAgIDAsICA0MTUsICA0MTMsICA0MjEsICA0MTAs
ICA0MjcsICA0MTYsCi0gICAgICAzMTYsICAgIDAsICAgIDAsICA0MTAsICA0MjAsICA0MjAsICAg
IDAsICA0MDUsICAzMTksICAgIDAsCi0gICAgICAgIDAsICA0MDcsICAzMjIsICA0MDgsICA0MDIs
ICA0MDEsICA0MDIsICA0MDEsICAzMjUsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAg
IDAsICAzOTcsICAzOTgsICA0MDMsICAzOTQsICA0MDcsICA0MDIsCi0gICAgICA0MDEsICAzOTMs
ICAzOTcsICAzODksICAzOTIsICAzOTYsICA0MDEsICAzODcsICAzOTksICAzOTAsCi0gICAgICAg
IDAsICAgIDAsICAzOTYsICAzODUsICAzODUsICAzOTAsICAzODksICAzODYsICAgIDAsICAgIDAs
Ci0gICAgICAgIDAsICAgIDAsICAzNzYsICAzODgsICAzOTAsICAgIDAsICAgIDAsICAgIDAsICAg
IDAsICAgIDAsCi0gICAgICAgIDAsICAzNzgsICAzNzksICAzNzMsICAzODMsICAgIDAsICAgIDAs
ICAgIDAsICAzNzQsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAg
IDAsICAgIDAsICAgIDAsICAgIDAsICAzODEsCi0KLSAgICAgICAgMCwgICAgMCwgIDM3OSwgIDM3
NSwgICAgMCwgICAgMCwgICAgMCwgIDM3MSwgIDM2NywgIDM3MiwKLSAgICAgIDM2MiwgIDM3NSwg
IDM2MSwgIDM3NCwgIDM2MywgIDM3MCwgICAgMCwgIDM2OCwgIDM3MCwgIDM1NCwKLSAgICAgIDM1
NiwgIDM2MiwgIDM2OCwgIDM2MywgIDM1MSwgICAgMCwgIDM1MywgICAgMCwgIDM1MiwgIDM1NSwK
LSAgICAgICAgMCwgIDM0NCwgIDM0MywgIDM0MywgIDM1NiwgICAgMCwgIDM1OCwgICAgMCwgIDM1
NywgIDM1NiwKLSAgICAgIDM0MSwgIDM1NCwgIDM0MSwgICAgMCwgICAgMCwgIDM0NCwgICAgMCwg
ICAgMCwgIDMzNiwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDMzMywgIDM0
NCwgIDMzNywgIDM0MywgIDM0MCwgIDMzNSwKLSAgICAgIDMyNywgIDMzOSwgICAgMCwgICAgMCwg
IDMzMiwgIDMzOSwgIDMyOCwgICAgMCwgIDMzNywgIDMzNCwKLSAgICAgIDMyNCwgIDMyOSwgIDMz
MiwgICAgMCwgICAgMCwgIDMzMiwgICAgMCwgIDMzMCwgIDMyOSwgICAgMCwKLSAgICAgICAgMCwg
IDMyOCwgIDMxNCwgIDMyNiwgICAgMCwgIDMxNywgIDMzOCwgIDMzNywgIDMzNiwgIDMwNywKLSAg
ICAgIDMwMywgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwg
IDMyOCwKLQotICAgICAgMTY2LCAgMzI1LCAgMzE2LCAgMjk5LCAgMzA4LCAgMzEwLCAgMzA2LCAg
MzA4LCAgMzA3LCAgMzA2LAotICAgICAgMzA5LCAgMzA2LCAgMjU2LCAgMjUzLCAgICAwLCAgMjI4
LCAgMjM4LCAgMjIyLCAgMjM1LCAgMjAzLAotICAgICAgMjA3LCAgMjA0LCAgMjEyLCAgMTkxLCAg
ICAwLCAgMjAxLCAgMTY1LCAgMTY3LCAgMTUzLCAgMTYxLAotICAgICAgICAwLCAgMTcwLCAgICAw
LCAgMTc1LCAgMTUxLCAgMTQxLCAgMTAwLCAgMTE0LCAgIDU5LCAgICAwLAotICAgICAgICAwLCAg
NTg4LCAgMzU5LCAgMTEzCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5
eV9kZWZbNDQ1XSA9Ci0gICAgeyAgIDAsCi0gICAgICA0NDIsICAgIDEsICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDMsICA0NDIsICA0NDIsICA0NDIsICA0NDMsCi0gICAg
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDQsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDMsICA0NDIsCi0gICAgICA0NDIsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
Ci0KLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0NCwg
IDQ0MiwgIDQ0MiwgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywK
LSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLQotICAgICAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQzLAotICAgICAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAot
ICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAg
ICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLAotCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAg
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0KLSAgICAg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgICAgMCwgIDQ0MiwgIDQ0
MgotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0WzY1Nl0gPQot
ICAgIHsgICAwLAotICAgICAgICA0LCAgICA1LCAgICA2LCAgICA3LCAgICA4LCAgICA5LCAgIDEw
LCAgIDExLCAgIDEyLCAgIDEzLAotICAgICAgIDE0LCAgIDE1LCAgIDE2LCAgIDE3LCAgIDE4LCAg
IDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LAotICAgICAgIDE5LCAgIDIwLCAgIDIxLCAgIDIy
LCAgIDIzLCAgIDI0LCAgIDI1LCAgIDI2LCAgIDI2LCAgIDI2LAotICAgICAgIDI2LCAgIDI2LCAg
IDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI3LCAgIDI4LCAgIDI5LCAgIDMwLAotICAgICAgIDMx
LCAgIDMyLCAgIDMzLCAgIDM0LCAgIDM1LCAgIDM2LCAgIDM3LCAgIDM4LCAgIDI2LCAgIDM5LAot
ICAgICAgIDQwLCAgIDQxLCAgIDQyLCAgIDQzLCAgIDQ0LCAgIDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4
LCAgIDQ5LAotICAgICAgIDI2LCAgIDI2LCAgIDI2LCAgIDUwLCAgIDUxLCAgIDUyLCAgIDUzLCAg
IDU1LCAgIDU2LCAgIDU3LAotICAgICAgIDYwLCAgIDYyLCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0
LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDc3LAotICAgICAgIDc4LCAgIDgyLCAgIDgzLCAgMTEwLCAg
IDYzLCAgIDYxLCAgMTI5LCAgMTExLCAgIDU4LCAgIDY2LAotICAgICAgMTMwLCAgIDY3LCAgIDY3
LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY4LCAgIDY2LCAgIDgwLAotCi0gICAgICAgNjgs
ICAgNjgsICAgNjgsICAgNjgsICAgNjgsICAgNjgsICAgNjgsICAgNjksICAgNzIsICAgODQsCi0g
ICAgICAxMTIsICAgODUsICAgNzAsICAgODEsICAxNDIsICAgODYsICAgNjksICAyMDMsICA0NDEs
ICAyMDQsCi0gICAgICAgNjksICAgODcsICAgOTQsICAxMTMsICAgOTUsICAgNzMsICAgOTAsICAg
NzQsICAgNzUsICAgNjksCi0gICAgICAgOTEsICAgODgsICAgOTcsICAgOTYsICAgODksICAgOTIs
ICAxMDMsICAgNzAsICAxMzUsICAxMDYsCi0gICAgICAgOTgsICAgOTMsICAgOTksICAxMTUsICAx
MDQsICAxMDAsICAxMDcsICAxNjIsICA0NDAsICAxMTksCi0gICAgICAxMzEsICAxMDEsICA0Mzks
ICAxMDgsICAxMzIsICAxMDUsICAxMjAsICAxMjEsICAxMTYsICAxMjUsCi0gICAgICAxNjMsICAx
MTcsICAxMjYsICAxMzMsICAxNzYsICAxOTgsICAxMjIsICAxMjMsICAyNjQsICAxMjQsCi0gICAg
ICAxMjcsICA0MzgsICAxNzcsICAxOTksICAyMTYsICAyMTcsICAyNjUsICAxMjgsICAxMzYsICAg
NjQsCi0gICAgICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAxMzgsICAxMzgs
ICAxMzgsICAxMzgsCi0gICAgICAxMzgsICAxMzgsICAxMzgsICA0MzcsICAxNzAsICAxMzcsICAx
OTAsICAxNzEsICAxNzIsICA0MDYsCi0KLSAgICAgIDQwNywgIDE3MywgIDEzOSwgIDE3NCwgIDI0
MiwgIDI0MywgIDI0NCwgIDQzNiwgIDEzNywgIDQzNSwKLSAgICAgIDQzNCwgIDE5MSwgIDQzMywg
IDQzMiwgICA2NiwgIDEzOSwgICA2NywgICA2NywgICA2NywgICA2NywKLSAgICAgICA2NywgICA2
NywgICA2OCwgICA2NiwgIDQzMSwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwKLSAgICAg
ICA2OCwgICA2OCwgICA2OSwgIDE0MSwgIDE0MSwgIDE0MSwgIDE0MSwgIDE0MSwgIDE0MSwgIDE0
MSwKLSAgICAgIDQzMCwgICA2OSwgIDE0MCwgIDQyOSwgIDE0MCwgICA2OSwgIDQyOCwgIDE0MSwg
IDE0MSwgIDE0MSwKLSAgICAgIDE0MSwgIDE0MSwgIDE0MSwgIDE0MSwgICA2OSwgIDIwNiwgIDQy
NywgIDIwNiwgIDQyNiwgIDQyNSwKLSAgICAgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywg
IDIwNywgIDIwNywgIDEzOCwgIDEzOCwgIDEzOCwKLSAgICAgIDEzOCwgIDEzOCwgIDEzOCwgIDEz
OCwgIDI2OSwgIDI3MCwgIDI3MSwgIDQyNCwgIDQyMywgIDIwOCwKLSAgICAgIDQyMiwgIDIwOCwg
IDQyMSwgIDEzOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwKLSAgICAgIDIw
OSwgIDI3NywgIDI3OCwgIDI3OSwgIDQyMCwgIDQxOSwgIDEzOSwgIDE0MSwgIDE0MSwgIDE0MSwK
LQotICAgICAgMTQxLCAgMTQxLCAgMTQxLCAgMTQxLCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAg
MjA3LCAgMjA3LAotICAgICAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3
LCAgMjA3LCAgMjA5LCAgMjA5LAotICAgICAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAg
MjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LAotICAgICAgMjA5LCAgMjA5LCAgMjg2LCAgMjg3
LCAgMjg4LCAgMjkzLCAgMjk0LCAgMjk1LCAgMjk3LCAgMjk4LAotICAgICAgMjk5LCAgMzA1LCAg
MzA2LCAgMzA3LCAgMzg3LCAgMzg4LCAgMzg5LCAgNDE4LCAgNDE3LCAgNDE2LAotICAgICAgNDE1
LCAgNDE0LCAgNDEzLCAgNDEyLCAgNDExLCAgNDEwLCAgNDA5LCAgMzkwLCAgNDA4LCAgMzkxLAot
ICAgICAgIDc5LCAgIDc5LCAgNDA1LCAgNDA0LCAgNDAzLCAgNDAyLCAgNDAxLCAgNDAwLCAgMzk5
LCAgMzk4LAotICAgICAgMzk3LCAgMzk2LCAgMzk1LCAgMzk0LCAgMzkzLCAgMzkyLCAgMzg2LCAg
Mzg1LCAgMzg0LCAgMzgzLAotICAgICAgMzgyLCAgMzgxLCAgMzgwLCAgMzc5LCAgMzc4LCAgMzc3
LCAgMzc2LCAgMzc1LCAgMzc0LCAgMzczLAotICAgICAgMzcyLCAgMzcxLCAgMzcwLCAgMzY5LCAg
MzY4LCAgMzY3LCAgMzY2LCAgMzY1LCAgMzY0LCAgMzYzLAotCi0gICAgICAzNjIsICAzNjEsICAz
NjAsICAzNTksICAzNTgsICAzNTcsICAzNTYsICAzNTUsICAzNTQsICAzNTMsCi0gICAgICAzNTIs
ICAzNTEsICAzNTAsICAzNDksICAzNDgsICAzNDcsICAzNDYsICAzNDUsICAzNDQsICAzNDMsCi0g
ICAgICAzNDIsICAzNDEsICAzNDAsICAzMzksICAzMzgsICAzMzcsICAzMzYsICAzMzUsICAzMzQs
ICAzMzMsCi0gICAgICAzMzIsICAzMzEsICAzMzAsICAzMjksICAzMjgsICAzMjcsICAzMjYsICAz
MjUsICAzMjQsICAzMjMsCi0gICAgICAzMjIsICAzMjEsICAzMjAsICAzMTksICAzMTgsICAzMTcs
ICAzMTYsICAzMTUsICAzMTQsICAzMTMsCi0gICAgICAzMTIsICAzMTEsICAzMTAsICAzMDksICAz
MDgsICAzMDQsICAzMDMsICAzMDIsICAzMDEsICAzMDAsCi0gICAgICAyOTYsICAyOTIsICAyOTEs
ICAyOTAsICAyODksICAyODUsICAyODQsICAyODMsICAyODIsICAyODEsCi0gICAgICAyODAsICAy
NzYsICAyNzUsICAyNzQsICAyNzMsICAyNzIsICAyNjgsICAyNjcsICAyNjYsICAyNjMsCi0gICAg
ICAyNjIsICAyNjEsICAyNjAsICAyNTksICAyNTgsICAyNTcsICAyNTYsICAyNTUsICAyNTQsICAy
NTMsCi0gICAgICAyNTIsICAyNTEsICAyNTAsICAyNDksICAyNDgsICAyNDcsICAyNDYsICAyNDUs
ICAyNDEsICAyNDAsCi0KLSAgICAgIDIzOSwgIDIzOCwgIDIzNywgIDIzNiwgIDIzNSwgIDIzNCwg
IDIzMywgIDIzMiwgIDIzMSwgIDIzMCwKLSAgICAgIDIyOSwgIDIyOCwgIDIyNywgIDIyNiwgIDIy
NSwgIDIyNCwgIDIyMywgIDIyMiwgIDIyMSwgIDIyMCwKLSAgICAgIDIxOSwgIDIxOCwgIDIxNSwg
IDIxNCwgIDIxMywgIDIxMiwgIDIxMSwgIDIxMCwgIDIwNSwgIDIwMiwKLSAgICAgIDIwMSwgIDIw
MCwgIDE5NywgIDE5NiwgIDE5NSwgIDE5NCwgIDE5MywgIDE5MiwgIDE4OSwgIDE4OCwKLSAgICAg
IDE4NywgIDE4NiwgIDE4NSwgIDE4NCwgIDE4MywgIDE4MiwgIDE4MSwgIDE4MCwgIDE3OSwgIDE3
OCwKLSAgICAgIDE3NSwgIDE2OSwgIDE2OCwgIDE2NywgIDE2NiwgIDE2NSwgIDE2NCwgIDE2MSwg
IDE2MCwgIDE1OSwKLSAgICAgIDE1OCwgIDE1NywgIDE1NiwgIDE1NSwgIDE1NCwgIDE1MywgIDE1
MiwgIDE1MSwgIDE1MCwgIDE0OSwKLSAgICAgIDE0OCwgIDE0NywgIDE0NiwgIDE0NSwgIDE0NCwg
IDE0MywgIDEzNCwgIDExOCwgIDExNCwgIDEwOSwKLSAgICAgIDEwMiwgICA3NiwgICA3MSwgICA2
NSwgICA1OSwgICA1NCwgIDQ0MiwgICAgMywgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLQotICAgICAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5
eV9jaGtbNjU2XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAg
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDgsICAgIDgsICAgIDksCi0gICAgICAgMTMsICAgMTUsICAgMTYsICAg
MTYsICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMjQsCi0gICAgICAgMjQsICAgMzAs
ICAgMzAsICAgNDAsICAgMTUsICAgMTMsICAgNDcsICAgNDAsICAgIDksICAgMTgsCi0gICAgICAg
NDcsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTksICAgMjks
Ci0KLSAgICAgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxOCwg
ICAyMiwgICAzMSwKLSAgICAgICA0MSwgICAzMSwgICAxOCwgICAyOSwgIDQ0NCwgICAzMSwgICAx
OSwgIDEzMywgIDQzOSwgIDEzMywKLSAgICAgICAxOCwgICAzMiwgICAzNCwgICA0MSwgICAzNCwg
ICAyMiwgICAzMywgICAyMiwgICAyMiwgICAxOSwKLSAgICAgICAzMywgICAzMiwgICAzNSwgICAz
NCwgICAzMiwgICAzMywgICAzNywgICAxOCwgICA1MSwgICAzOCwKLSAgICAgICAzNSwgICAzMywg
ICAzNSwgICA0MywgICAzNywgICAzNSwgICAzOCwgICA5OSwgIDQzOCwgICA0NSwKLSAgICAgICA0
OCwgICAzNSwgIDQzNywgICAzOCwgICA0OCwgICAzNywgICA0NSwgICA0NSwgICA0MywgICA0NiwK
LSAgICAgICA5OSwgICA0MywgICA0NiwgICA0OCwgIDEwOSwgIDEyOSwgICA0NSwgICA0NSwgIDE5
OCwgICA0NSwKLSAgICAgICA0NiwgIDQzNiwgIDEwOSwgIDEyOSwgIDE1MiwgIDE1MiwgIDE5OCwg
ICA0NiwgICA1MSwgICA2NCwKLSAgICAgICA2NCwgICA2NCwgICA2NCwgICA2NCwgICA2NCwgICA2
NCwgICA2NiwgICA2NiwgICA2NiwgICA2NiwKLSAgICAgICA2NiwgICA2NiwgICA2NiwgIDQzNSwg
IDEwNywgICA2NCwgIDEyMiwgIDEwNywgIDEwNywgIDQwMSwKLQotICAgICAgNDAxLCAgMTA3LCAg
IDY2LCAgMTA3LCAgMTc4LCAgMTc4LCAgMTc4LCAgNDM0LCAgIDY0LCAgNDMyLAotICAgICAgNDMw
LCAgMTIyLCAgNDI5LCAgNDI4LCAgIDY3LCAgIDY2LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LAot
ICAgICAgIDY3LCAgIDY3LCAgIDY3LCAgIDY4LCAgNDI3LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4
LCAgIDY4LAotICAgICAgIDY4LCAgIDY4LCAgIDY3LCAgMTQwLCAgMTQwLCAgMTQwLCAgMTQwLCAg
MTQwLCAgMTQwLCAgMTQwLAotICAgICAgNDI2LCAgIDY4LCAgIDY5LCAgNDI0LCAgIDY5LCAgIDY3
LCAgNDIzLCAgIDY5LCAgIDY5LCAgIDY5LAotICAgICAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAg
IDY4LCAgMTM3LCAgNDIyLCAgMTM3LCAgNDIxLCAgNDIwLAotICAgICAgMTM3LCAgMTM3LCAgMTM3
LCAgMTM3LCAgMTM3LCAgMTM3LCAgMTM3LCAgMTM4LCAgMTM4LCAgMTM4LAotICAgICAgMTM4LCAg
MTM4LCAgMTM4LCAgMTM4LCAgMjAyLCAgMjAyLCAgMjAyLCAgNDE5LCAgNDE4LCAgMTM5LAotICAg
ICAgNDE3LCAgMTM5LCAgNDE2LCAgMTM4LCAgMTM5LCAgMTM5LCAgMTM5LCAgMTM5LCAgMTM5LCAg
MTM5LAotICAgICAgMTM5LCAgMjEzLCAgMjEzLCAgMjEzLCAgNDE0LCAgNDEzLCAgMTM4LCAgMTQx
LCAgMTQxLCAgMTQxLAotCi0gICAgICAxNDEsICAxNDEsICAxNDEsICAxNDEsICAyMDYsICAyMDYs
ICAyMDYsICAyMDYsICAyMDYsICAyMDYsCi0gICAgICAyMDYsICAyMDcsICAyMDcsICAyMDcsICAy
MDcsICAyMDcsICAyMDcsICAyMDcsICAyMDgsICAyMDgsCi0gICAgICAyMDgsICAyMDgsICAyMDgs
ICAyMDgsICAyMDgsICAyMDksICAyMDksICAyMDksICAyMDksICAyMDksCi0gICAgICAyMDksICAy
MDksICAyMjEsICAyMjEsICAyMjEsICAyMjksICAyMjksICAyMjksICAyMzMsICAyMzMsCi0gICAg
ICAyMzMsICAyMzksICAyMzksICAyMzksICAzNzIsICAzNzIsICAzNzIsICA0MTIsICA0MTEsICA0
MTAsCi0gICAgICA0MDksICA0MDgsICA0MDcsICA0MDYsICA0MDUsICA0MDQsICA0MDMsICAzNzIs
ICA0MDIsICAzNzIsCi0gICAgICA0NDMsICA0NDMsICA0MDAsICAzOTEsICAzOTAsICAzODksICAz
ODgsICAzODcsICAzODYsICAzODQsCi0gICAgICAzODMsICAzODIsICAzNzksICAzNzgsICAzNzYs
ICAzNzMsICAzNzEsICAzNzAsICAzNjksICAzNjcsCi0gICAgICAzNjYsICAzNjUsICAzNjIsICAz
NjEsICAzNjAsICAzNTksICAzNTgsICAzNTcsICAzNTYsICAzNTUsCi0gICAgICAzNDksICAzNDYs
ICAzNDMsICAzNDIsICAzNDEsICAzNDAsICAzMzksICAzMzcsICAzMzUsICAzMzQsCi0KLSAgICAg
IDMzMywgIDMzMiwgIDMzMCwgIDMyOSwgIDMyNywgIDMyNSwgIDMyNCwgIDMyMywgIDMyMiwgIDMy
MSwKLSAgICAgIDMyMCwgIDMxOSwgIDMxOCwgIDMxNiwgIDMxNSwgIDMxNCwgIDMxMywgIDMxMiwg
IDMxMSwgIDMxMCwKLSAgICAgIDMwOSwgIDMwOCwgIDMwNCwgIDMwMywgIDMwMCwgIDI4OSwgIDI4
NSwgIDI4NCwgIDI4MywgIDI4MiwKLSAgICAgIDI3NSwgIDI3NCwgIDI3MywgIDI2OCwgIDI2Nywg
IDI2NiwgIDI2NSwgIDI2NCwgIDI2MywgIDI2MCwKLSAgICAgIDI1OSwgIDI1OCwgIDI1NywgIDI1
NiwgIDI1NSwgIDI1NCwgIDI1MywgIDI1MiwgIDI1MSwgIDI1MCwKLSAgICAgIDI0OSwgIDI0OCwg
IDI0NywgIDI0NiwgIDI0NSwgIDIzOCwgIDIzNywgIDIzNiwgIDIzNSwgIDIzNCwKLSAgICAgIDIz
MiwgIDIyOCwgIDIyNiwgIDIyNSwgIDIyNCwgIDIyMCwgIDIxOSwgIDIxOCwgIDIxNywgIDIxNiwK
LSAgICAgIDIxNSwgIDIxMiwgIDIxMCwgIDIwNSwgIDIwNCwgIDIwMywgIDIwMSwgIDIwMCwgIDE5
OSwgIDE5NywKLSAgICAgIDE5NiwgIDE5NSwgIDE5NCwgIDE5MywgIDE5MiwgIDE5MSwgIDE5MCwg
IDE4OSwgIDE4OCwgIDE4NywKLSAgICAgIDE4NiwgIDE4NSwgIDE4NCwgIDE4MywgIDE4MiwgIDE4
MSwgIDE4MCwgIDE3OSwgIDE3NywgIDE3NiwKLQotICAgICAgMTc1LCAgMTc0LCAgMTczLCAgMTcy
LCAgMTcxLCAgMTcwLCAgMTY5LCAgMTY4LCAgMTY3LCAgMTY2LAotICAgICAgMTY1LCAgMTYzLCAg
MTYyLCAgMTYxLCAgMTYwLCAgMTU5LCAgMTU4LCAgMTU3LCAgMTU2LCAgMTU1LAotICAgICAgMTU0
LCAgMTUzLCAgMTUxLCAgMTUwLCAgMTQ5LCAgMTQ4LCAgMTQ3LCAgMTQ2LCAgMTM0LCAgMTMyLAot
ICAgICAgMTMxLCAgMTMwLCAgMTI4LCAgMTI3LCAgMTI2LCAgMTI1LCAgMTI0LCAgMTIzLCAgMTIx
LCAgMTIwLAotICAgICAgMTE5LCAgMTE4LCAgMTE3LCAgMTE2LCAgMTE1LCAgMTE0LCAgMTEzLCAg
MTEyLCAgMTExLCAgMTEwLAotICAgICAgMTA4LCAgMTA1LCAgMTA0LCAgMTAzLCAgMTAyLCAgMTAx
LCAgMTAwLCAgIDk4LCAgIDk3LCAgIDk2LAotICAgICAgIDk1LCAgIDk0LCAgIDkzLCAgIDkyLCAg
IDkxLCAgIDkwLCAgIDg5LCAgIDg4LCAgIDg3LCAgIDg2LAotICAgICAgIDg1LCAgIDg0LCAgIDgz
LCAgIDgyLCAgIDc4LCAgIDc0LCAgIDQ5LCAgIDQ0LCAgIDQyLCAgIDM5LAotICAgICAgIDM2LCAg
IDIzLCAgIDIwLCAgIDE3LCAgIDEyLCAgICA3LCAgICAzLCAgNDQyLCAgNDQyLCAgNDQyLAotICAg
ICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLAotCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAg
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIKLSAgICB9IDsKLQotLyogVGFibGUgb2YgYm9v
bGVhbnMsIHRydWUgaWYgcnVsZSBjb3VsZCBtYXRjaCBlb2wuICovCi1zdGF0aWMgeXljb25zdCBm
bGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzE0OF0gPQotICAgIHsgICAwLAotMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0g
ICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAg
MCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgICAgIH07Ci0KLS8qIFRoZSBpbnRlbnQgYmVoaW5kIHRo
aXMgZGVmaW5pdGlvbiBpcyB0aGF0IGl0J2xsIGNhdGNoCi0gKiBhbnkgdXNlcyBvZiBSRUpFQ1Qg
d2hpY2ggZmxleCBtaXNzZWQuCi0gKi8KLSNkZWZpbmUgUkVKRUNUIHJlamVjdF91c2VkX2J1dF9u
b3RfZGV0ZWN0ZWQKLSNkZWZpbmUgeXltb3JlKCkgeXltb3JlX3VzZWRfYnV0X25vdF9kZXRlY3Rl
ZAotI2RlZmluZSBZWV9NT1JFX0FESiAwCi0jZGVmaW5lIFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZT
RVQKLS8qCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi1UaGlzIGZpbGUgY29udGFpbnMgdGhlIExleCBz
cGVjaWZpY2F0aW9uIGZvciBHTFNMIEVTLgotQmFzZWQgb24gQU5TSSBDIGdyYW1tYXIsIExleCBz
cGVjaWZpY2F0aW9uOgotaHR0cDovL3d3dy5seXNhdG9yLmxpdS5zZS9jL0FOU0ktQy1ncmFtbWFy
LWwuaHRtbAotCi1JRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBn
ZW5lcmF0ZV9wYXJzZXIuc2gsCi1XSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIgKGds
c2xhbmdfbGV4LmNwcCkuCi0qLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvZ2xzbGFuZy5oIgotI2lu
Y2x1ZGUgImNvbXBpbGVyL1BhcnNlQ29udGV4dC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9Ub2tlbi5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3V0aWwuaCIKLSNpbmNsdWRlICJn
bHNsYW5nX3RhYi5oIgotCi0vKiB3aW5kb3dzIG9ubHkgcHJhZ21hICovCi0jaWZkZWYgX01TQ19W
RVIKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDEwMikKLSNlbmRpZgotCi0jZGVmaW5lIFlZ
X1VTRVJfQUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHl5bGxv
Yy0+Zmlyc3RfZmlsZSA9IHl5bGxvYy0+bGFzdF9maWxlID0geXljb2x1bW47IFwKLSAgICB5eWxs
b2MtPmZpcnN0X2xpbmUgPSB5eWxsb2MtPmxhc3RfbGluZSA9IHl5bGluZW5vOwotCi0jZGVmaW5l
IFlZX0lOUFVUKGJ1ZiwgcmVzdWx0LCBtYXhfc2l6ZSkgXAotICAgIHJlc3VsdCA9IHN0cmluZ19p
bnB1dChidWYsIG1heF9zaXplLCB5eXNjYW5uZXIpOwotCi1zdGF0aWMgeXlfc2l6ZV90IHN0cmlu
Z19pbnB1dChjaGFyKiBidWYsIHl5X3NpemVfdCBtYXhfc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVy
KTsKLXN0YXRpYyBpbnQgY2hlY2tfdHlwZSh5eXNjYW5fdCB5eXNjYW5uZXIpOwotc3RhdGljIGlu
dCByZXNlcnZlZF93b3JkKHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci1zdGF0aWMgaW50IGludF9jb25z
dGFudCh5eXNjYW5fdCB5eXNjYW5uZXIpOwotc3RhdGljIGludCBmbG9hdF9jb25zdGFudCh5eXNj
YW5fdCB5eXNjYW5uZXIpOwotCi0jZGVmaW5lIElOSVRJQUwgMAotCi0jZGVmaW5lIFlZX0VYVFJB
X1RZUEUgVFBhcnNlQ29udGV4dCoKLQotLyogSG9sZHMgdGhlIGVudGlyZSBzdGF0ZSBvZiB0aGUg
cmVlbnRyYW50IHNjYW5uZXIuICovCi1zdHJ1Y3QgeXlndXRzX3QKLSAgICB7Ci0KLSAgICAvKiBV
c2VyLWRlZmluZWQuIE5vdCB0b3VjaGVkIGJ5IGZsZXguICovCi0gICAgWVlfRVhUUkFfVFlQRSB5
eWV4dHJhX3I7Ci0KLSAgICAvKiBUaGUgcmVzdCBhcmUgdGhlIHNhbWUgYXMgdGhlIGdsb2JhbHMg
ZGVjbGFyZWQgaW4gdGhlIG5vbi1yZWVudHJhbnQgc2Nhbm5lci4gKi8KLSAgICBGSUxFICp5eWlu
X3IsICp5eW91dF9yOwotICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfdG9wOyAvKio8IGluZGV4
IG9mIHRvcCBvZiBzdGFjay4gKi8KLSAgICBzaXplX3QgeXlfYnVmZmVyX3N0YWNrX21heDsgLyoq
PCBjYXBhY2l0eSBvZiBzdGFjay4gKi8KLSAgICBZWV9CVUZGRVJfU1RBVEUgKiB5eV9idWZmZXJf
c3RhY2s7IC8qKjwgU3RhY2sgYXMgYW4gYXJyYXkuICovCi0gICAgY2hhciB5eV9ob2xkX2NoYXI7
Ci0gICAgeXlfc2l6ZV90IHl5X25fY2hhcnM7Ci0gICAgeXlfc2l6ZV90IHl5bGVuZ19yOwotICAg
IGNoYXIgKnl5X2NfYnVmX3A7Ci0gICAgaW50IHl5X2luaXQ7Ci0gICAgaW50IHl5X3N0YXJ0Owot
ICAgIGludCB5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2Y7Ci0gICAgaW50IHl5X3N0YXJ0X3N0
YWNrX3B0cjsKLSAgICBpbnQgeXlfc3RhcnRfc3RhY2tfZGVwdGg7Ci0gICAgaW50ICp5eV9zdGFy
dF9zdGFjazsKLSAgICB5eV9zdGF0ZV90eXBlIHl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotICAg
IGNoYXIqIHl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0KLSAgICBpbnQgeXlsaW5lbm9fcjsKLSAg
ICBpbnQgeXlfZmxleF9kZWJ1Z19yOwotCi0gICAgY2hhciAqeXl0ZXh0X3I7Ci0gICAgaW50IHl5
X21vcmVfZmxhZzsKLSAgICBpbnQgeXlfbW9yZV9sZW47Ci0KLSAgICBZWVNUWVBFICogeXlsdmFs
X3I7Ci0KLSAgICBZWUxUWVBFICogeXlsbG9jX3I7Ci0KLSAgICB9OyAvKiBlbmQgc3RydWN0IHl5
Z3V0c190ICovCi0KLXN0YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxzICh5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKLQotICAgIC8qIFRoaXMgbXVzdCBnbyBoZXJlIGJlY2F1c2UgWVlTVFlQRSBhbmQgWVlM
VFlQRSBhcmUgaW5jbHVkZWQKLSAgICAgKiBmcm9tIGJpc29uIG91dHB1dCBpbiBzZWN0aW9uIDEu
Ki8KLSAgICAjICAgIGRlZmluZSB5eWx2YWwgeXlnLT55eWx2YWxfcgotICAgIAotICAgICMgICAg
ZGVmaW5lIHl5bGxvYyB5eWctPnl5bGxvY19yCi0gICAgCi1pbnQgeXlsZXhfaW5pdCAoeXlzY2Fu
X3QqIHNjYW5uZXIpOwotCi1pbnQgeXlsZXhfaW5pdF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1c2Vy
X2RlZmluZWQseXlzY2FuX3QqIHNjYW5uZXIpOwotCi0vKiBBY2Nlc3NvciBtZXRob2RzIHRvIGds
b2JhbHMuCi0gICBUaGVzZSBhcmUgbWFkZSB2aXNpYmxlIHRvIG5vbi1yZWVudHJhbnQgc2Nhbm5l
cnMgZm9yIGNvbnZlbmllbmNlLiAqLwotCi1pbnQgeXlsZXhfZGVzdHJveSAoeXlzY2FuX3QgeXlz
Y2FubmVyICk7Ci0KLWludCB5eWdldF9kZWJ1ZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZv
aWQgeXlzZXRfZGVidWcgKGludCBkZWJ1Z19mbGFnICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQot
WVlfRVhUUkFfVFlQRSB5eWdldF9leHRyYSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQg
eXlzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKLQotRklMRSAqeXlnZXRfaW4gKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkIHl5
c2V0X2luICAoRklMRSAqIGluX3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLUZJTEUgKnl5
Z2V0X291dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgeXlzZXRfb3V0ICAoRklMRSAq
IG91dF9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi15eV9zaXplX3QgeXlnZXRfbGVuZyAo
eXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLWNoYXIgKnl5Z2V0X3RleHQgKHl5c2Nhbl90IHl5c2Nh
bm5lciApOwotCi1pbnQgeXlnZXRfbGluZW5vICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9p
ZCB5eXNldF9saW5lbm8gKGludCBsaW5lX251bWJlciAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0K
LVlZU1RZUEUgKiB5eWdldF9sdmFsICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCB5eXNl
dF9sdmFsIChZWVNUWVBFICogeXlsdmFsX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQot
ICAgICAgIFlZTFRZUEUgKnl5Z2V0X2xsb2MgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotICAgIAot
ICAgICAgICB2b2lkIHl5c2V0X2xsb2MgKFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0gLHl5c2Nhbl90
IHl5c2Nhbm5lciApOwotICAgIAotLyogTWFjcm9zIGFmdGVyIHRoaXMgcG9pbnQgY2FuIGFsbCBi
ZSBvdmVycmlkZGVuIGJ5IHVzZXIgZGVmaW5pdGlvbnMgaW4KLSAqIHNlY3Rpb24gMS4KLSAqLwot
Ci0jaWZuZGVmIFlZX1NLSVBfWVlXUkFQCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIg
aW50IHl5d3JhcCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0jZWxzZQotZXh0ZXJuIGludCB5eXdy
YXAgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotI2VuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiB5eXRl
eHRfcHRyCi1zdGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5jcHkgKGNoYXIgKix5eWNvbnN0IGNoYXIg
KixpbnQgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0jZW5kaWYKLQotI2lmZGVmIFlZX05FRURfU1RS
TEVOCi1zdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiAseXlzY2FuX3Qg
eXlzY2FubmVyKTsKLSNlbmRpZgotCi0jaWZuZGVmIFlZX05PX0lOUFVUCi0KLSNpZmRlZiBfX2Nw
bHVzcGx1cwotc3RhdGljIGludCB5eWlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSNlbHNl
Ci1zdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSNlbmRpZgotCi0jZW5k
aWYKLQotLyogQW1vdW50IG9mIHN0dWZmIHRvIHNsdXJwIHVwIHdpdGggZWFjaCByZWFkLiAqLwot
I2lmbmRlZiBZWV9SRUFEX0JVRl9TSVpFCi0jZGVmaW5lIFlZX1JFQURfQlVGX1NJWkUgODE5Mgot
I2VuZGlmCi0KLS8qIENvcHkgd2hhdGV2ZXIgdGhlIGxhc3QgcnVsZSBtYXRjaGVkIHRvIHRoZSBz
dGFuZGFyZCBvdXRwdXQuICovCi0jaWZuZGVmIEVDSE8KLS8qIFRoaXMgdXNlZCB0byBiZSBhbiBm
cHV0cygpLCBidXQgc2luY2UgdGhlIHN0cmluZyBtaWdodCBjb250YWluIE5VTCdzLAotICogd2Ug
bm93IHVzZSBmd3JpdGUoKS4KLSAqLwotI2RlZmluZSBFQ0hPIGZ3cml0ZSggeXl0ZXh0LCB5eWxl
bmcsIDEsIHl5b3V0ICkKLSNlbmRpZgotCi0vKiBHZXRzIGlucHV0IGFuZCBzdHVmZnMgaXQgaW50
byAiYnVmIi4gIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQsIG9yIFlZX05VTEwsCi0gKiBpcyBy
ZXR1cm5lZCBpbiAicmVzdWx0Ii4KLSAqLwotI2lmbmRlZiBZWV9JTlBVVAotI2RlZmluZSBZWV9J
TlBVVChidWYscmVzdWx0LG1heF9zaXplKSBcCi0JaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2lzX2ludGVyYWN0aXZlICkgXAotCQl7IFwKLQkJaW50IGMgPSAnKic7IFwKLQkJeXlf
c2l6ZV90IG47IFwKLQkJZm9yICggbiA9IDA7IG4gPCBtYXhfc2l6ZSAmJiBcCi0JCQkgICAgIChj
ID0gZ2V0YyggeXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyArK24gKSBcCi0JCQlidWZbbl0g
PSAoY2hhcikgYzsgXAotCQlpZiAoIGMgPT0gJ1xuJyApIFwKLQkJCWJ1ZltuKytdID0gKGNoYXIp
IGM7IFwKLQkJaWYgKCBjID09IEVPRiAmJiBmZXJyb3IoIHl5aW4gKSApIFwKLQkJCVlZX0ZBVEFM
X0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAotCQlyZXN1bHQgPSBu
OyBcCi0JCX0gXAotCWVsc2UgXAotCQl7IFwKLQkJZXJybm89MDsgXAotCQl3aGlsZSAoIChyZXN1
bHQgPSBmcmVhZChidWYsIDEsIG1heF9zaXplLCB5eWluKSk9PTAgJiYgZmVycm9yKHl5aW4pKSBc
Ci0JCQl7IFwKLQkJCWlmKCBlcnJubyAhPSBFSU5UUikgXAotCQkJCXsgXAotCQkJCVlZX0ZBVEFM
X0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAotCQkJCWJyZWFrOyBc
Ci0JCQkJfSBcCi0JCQllcnJubz0wOyBcCi0JCQljbGVhcmVycih5eWluKTsgXAotCQkJfSBcCi0J
CX1cCi1cCi0KLSNlbmRpZgotCi0vKiBObyBzZW1pLWNvbG9uIGFmdGVyIHJldHVybjsgY29ycmVj
dCB1c2FnZSBpcyB0byB3cml0ZSAieXl0ZXJtaW5hdGUoKTsiIC0KLSAqIHdlIGRvbid0IHdhbnQg
YW4gZXh0cmEgJzsnIGFmdGVyIHRoZSAicmV0dXJuIiBiZWNhdXNlIHRoYXQgd2lsbCBjYXVzZQot
ICogc29tZSBjb21waWxlcnMgdG8gY29tcGxhaW4gYWJvdXQgdW5yZWFjaGFibGUgc3RhdGVtZW50
cy4KLSAqLwotI2lmbmRlZiB5eXRlcm1pbmF0ZQotI2RlZmluZSB5eXRlcm1pbmF0ZSgpIHJldHVy
biBZWV9OVUxMCi0jZW5kaWYKLQotLyogTnVtYmVyIG9mIGVudHJpZXMgYnkgd2hpY2ggc3RhcnQt
Y29uZGl0aW9uIHN0YWNrIGdyb3dzLiAqLwotI2lmbmRlZiBZWV9TVEFSVF9TVEFDS19JTkNSCi0j
ZGVmaW5lIFlZX1NUQVJUX1NUQUNLX0lOQ1IgMjUKLSNlbmRpZgotCi0vKiBSZXBvcnQgYSBmYXRh
bCBlcnJvci4gKi8KLSNpZm5kZWYgWVlfRkFUQUxfRVJST1IKLSNkZWZpbmUgWVlfRkFUQUxfRVJS
T1IobXNnKSB5eV9mYXRhbF9lcnJvciggbXNnICwgeXlzY2FubmVyKQotI2VuZGlmCi0KLS8qIGVu
ZCB0YWJsZXMgc2VyaWFsaXphdGlvbiBzdHJ1Y3R1cmVzIGFuZCBwcm90b3R5cGVzICovCi0KLS8q
IERlZmF1bHQgZGVjbGFyYXRpb24gb2YgZ2VuZXJhdGVkIHNjYW5uZXIgLSBhIGRlZmluZSBzbyB0
aGUgdXNlciBjYW4KLSAqIGVhc2lseSBhZGQgcGFyYW1ldGVycy4KLSAqLwotI2lmbmRlZiBZWV9E
RUNMCi0jZGVmaW5lIFlZX0RFQ0xfSVNfT1VSUyAxCi0KLWV4dGVybiBpbnQgeXlsZXggXAotICAg
ICAgICAgICAgICAgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0sWVlMVFlQRSAqIHl5bGxvY19wYXJh
bSAseXlzY2FuX3QgeXlzY2FubmVyKTsKLQotI2RlZmluZSBZWV9ERUNMIGludCB5eWxleCBcCi0g
ICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSwgWVlMVFlQRSAqIHl5bGxvY19w
YXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLSNlbmRpZiAvKiAhWVlfREVDTCAqLwotCi0vKiBD
b2RlIGV4ZWN1dGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBydWxlLCBhZnRlciB5eXRleHQg
YW5kIHl5bGVuZwotICogaGF2ZSBiZWVuIHNldCB1cC4KLSAqLwotI2lmbmRlZiBZWV9VU0VSX0FD
VElPTgotI2RlZmluZSBZWV9VU0VSX0FDVElPTgotI2VuZGlmCi0KLS8qIENvZGUgZXhlY3V0ZWQg
YXQgdGhlIGVuZCBvZiBlYWNoIHJ1bGUuICovCi0jaWZuZGVmIFlZX0JSRUFLCi0jZGVmaW5lIFlZ
X0JSRUFLIGJyZWFrOwotI2VuZGlmCi0KLSNkZWZpbmUgWVlfUlVMRV9TRVRVUCBcCi0JWVlfVVNF
Ul9BQ1RJT04KLQotLyoqIFRoZSBtYWluIHNjYW5uZXIgZnVuY3Rpb24gd2hpY2ggZG9lcyBhbGwg
dGhlIHdvcmsuCi0gKi8KLVlZX0RFQ0wKLXsKLQlyZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1
cnJlbnRfc3RhdGU7Ci0JcmVnaXN0ZXIgY2hhciAqeXlfY3AsICp5eV9icDsKLQlyZWdpc3RlciBp
bnQgeXlfYWN0OwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsKLQotICAgIHl5bHZhbCA9IHl5bHZhbF9wYXJhbTsKLQotICAgIHl5bGxvYyA9
IHl5bGxvY19wYXJhbTsKLQotCWlmICggIXl5Zy0+eXlfaW5pdCApCi0JCXsKLQkJeXlnLT55eV9p
bml0ID0gMTsKLQotI2lmZGVmIFlZX1VTRVJfSU5JVAotCQlZWV9VU0VSX0lOSVQ7Ci0jZW5kaWYK
LQotCQlpZiAoICEgeXlnLT55eV9zdGFydCApCi0JCQl5eWctPnl5X3N0YXJ0ID0gMTsJLyogZmly
c3Qgc3RhcnQgc3RhdGUgKi8KLQotCQlpZiAoICEgeXlpbiApCi0JCQl5eWluID0gc3RkaW47Ci0K
LQkJaWYgKCAhIHl5b3V0ICkKLQkJCXl5b3V0ID0gc3Rkb3V0OwotCi0JCWlmICggISBZWV9DVVJS
RU5UX0JVRkZFUiApIHsKLQkJCXl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKLQkJ
CVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9Ci0JCQkJeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZ
X0JVRl9TSVpFICx5eXNjYW5uZXIpOwotCQl9Ci0KLQkJeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlz
Y2FubmVyICk7Ci0JCX0KLQotCXdoaWxlICggMSApCQkvKiBsb29wcyB1bnRpbCBlbmQtb2YtZmls
ZSBpcyByZWFjaGVkICovCi0JCXsKLQkJeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7Ci0KLQkJLyog
U3VwcG9ydCBvZiB5eXRleHQuICovCi0JCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotCi0J
CS8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9zaXRpb24gaW4geXlfY2hfYnVmIG9mIHRoZSBzdGFy
dCBvZgotCQkgKiB0aGUgY3VycmVudCBydW4uCi0JCSAqLwotCQl5eV9icCA9IHl5X2NwOwotCi0J
CXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X3N0YXJ0OwoteXlfbWF0Y2g6Ci0JCWRvCi0JCQl7
Ci0JCQlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXTsK
LQkJCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKLQkJCQl7Ci0JCQkJeXlnLT55
eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7Ci0JCQkJeXlnLT55eV9s
YXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7Ci0JCQkJfQotCQkJd2hpbGUgKCB5eV9jaGtbeXlf
YmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQotCQkJ
CXsKLQkJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVd
OwotCQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NDMgKQotCQkJCQl5eV9jID0geXlfbWV0
YVsodW5zaWduZWQgaW50KSB5eV9jXTsKLQkJCQl9Ci0JCQl5eV9jdXJyZW50X3N0YXRlID0geXlf
bnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKLQkJ
CSsreXlfY3A7Ci0JCQl9Ci0JCXdoaWxlICggeXlfY3VycmVudF9zdGF0ZSAhPSA0NDIgKTsKLQkJ
eXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0JCXl5X2N1cnJlbnRfc3RhdGUg
PSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotCi15eV9maW5kX2FjdGlvbjoKLQkJeXlf
YWN0ID0geXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdOwotCi0JCVlZX0RPX0JFRk9SRV9BQ1RJ
T047Ci0KLQkJaWYgKCB5eV9hY3QgIT0gWVlfRU5EX09GX0JVRkZFUiAmJiB5eV9ydWxlX2Nhbl9t
YXRjaF9lb2xbeXlfYWN0XSApCi0JCQl7Ci0JCQl5eV9zaXplX3QgeXlsOwotCQkJZm9yICggeXls
ID0gMDsgeXlsIDwgeXlsZW5nOyArK3l5bCApCi0JCQkJaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4n
ICkKLQkJCQkJICAgCi0gICAgZG97IHl5bGluZW5vKys7Ci0gICAgICAgIHl5Y29sdW1uPTA7Ci0g
ICAgfXdoaWxlKDApCi07Ci0JCQl9Ci0KLWRvX2FjdGlvbjoJLyogVGhpcyBsYWJlbCBpcyB1c2Vk
IG9ubHkgdG8gYWNjZXNzIEVPRiBhY3Rpb25zLiAqLwotCi0JCXN3aXRjaCAoIHl5X2FjdCApCi0J
eyAvKiBiZWdpbm5pbmcgb2YgYWN0aW9uIHN3aXRjaCAqLwotCQkJY2FzZSAwOiAvKiBtdXN0IGJh
Y2sgdXAgKi8KLQkJCS8qIHVuZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVGT1JFX0FDVElPTiAq
LwotCQkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7Ci0JCQl5eV9jcCA9IHl5Zy0+eXlfbGFz
dF9hY2NlcHRpbmdfY3BvczsKLQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNj
ZXB0aW5nX3N0YXRlOwotCQkJZ290byB5eV9maW5kX2FjdGlvbjsKLQotY2FzZSAxOgotWVlfUlVM
RV9TRVRVUAoteyByZXR1cm4gSU5WQVJJQU5UOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMjoKLVlZX1JV
TEVfU0VUVVAKLXsgcmV0dXJuIEhJR0hfUFJFQ0lTSU9OOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMzoK
LVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIE1FRElVTV9QUkVDSVNJT047IH0KLQlZWV9CUkVBSwot
Y2FzZSA0OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gTE9XX1BSRUNJU0lPTjsgfQotCVlZX0JS
RUFLCi1jYXNlIDU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBQUkVDSVNJT047IH0KLQlZWV9C
UkVBSwotY2FzZSA2OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gQVRUUklCVVRFOyB9Ci0JWVlf
QlJFQUsKLWNhc2UgNzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIENPTlNUX1FVQUw7IH0KLQlZ
WV9CUkVBSwotY2FzZSA4OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gVU5JRk9STTsgfQotCVlZ
X0JSRUFLCi1jYXNlIDk6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBWQVJZSU5HOyB9Ci0JWVlf
QlJFQUsKLWNhc2UgMTA6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBCUkVBSzsgfQotCVlZX0JS
RUFLCi1jYXNlIDExOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gQ09OVElOVUU7IH0KLQlZWV9C
UkVBSwotY2FzZSAxMjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIERPOyB9Ci0JWVlfQlJFQUsK
LWNhc2UgMTM6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBGT1I7IH0KLQlZWV9CUkVBSwotY2Fz
ZSAxNDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFdISUxFOyB9Ci0JWVlfQlJFQUsKLWNhc2Ug
MTU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBJRjsgfQotCVlZX0JSRUFLCi1jYXNlIDE2Ogot
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gRUxTRTsgfQotCVlZX0JSRUFLCi1jYXNlIDE3OgotWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4gSU5fUVVBTDsgfQotCVlZX0JSRUFLCi1jYXNlIDE4OgotWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4gT1VUX1FVQUw7IH0KLQlZWV9CUkVBSwotY2FzZSAxOToKLVlZ
X1JVTEVfU0VUVVAKLXsgcmV0dXJuIElOT1VUX1FVQUw7IH0KLQlZWV9CUkVBSwotY2FzZSAyMDoK
LVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEZMT0FUX1RZUEU7IH0KLQlZWV9CUkVBSwotY2FzZSAy
MToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElOVF9UWVBFOyB9Ci0JWVlfQlJFQUsKLWNhc2Ug
MjI6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBWT0lEX1RZUEU7IH0KLQlZWV9CUkVBSwotY2Fz
ZSAyMzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEJPT0xfVFlQRTsgfQotCVlZX0JSRUFLCi1j
YXNlIDI0OgotWVlfUlVMRV9TRVRVUAoteyB5eWx2YWwtPmxleC5iID0gdHJ1ZTsgIHJldHVybiBC
T09MQ09OU1RBTlQ7IH0KLQlZWV9CUkVBSwotY2FzZSAyNToKLVlZX1JVTEVfU0VUVVAKLXsgeXls
dmFsLT5sZXguYiA9IGZhbHNlOyByZXR1cm4gQk9PTENPTlNUQU5UOyB9Ci0JWVlfQlJFQUsKLWNh
c2UgMjY6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBESVNDQVJEOyB9Ci0JWVlfQlJFQUsKLWNh
c2UgMjc6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBSRVRVUk47IH0KLQlZWV9CUkVBSwotY2Fz
ZSAyODoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIE1BVFJJWDI7IH0KLQlZWV9CUkVBSwotY2Fz
ZSAyOToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIE1BVFJJWDM7IH0KLQlZWV9CUkVBSwotY2Fz
ZSAzMDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIE1BVFJJWDQ7IH0KLQlZWV9CUkVBSwotY2Fz
ZSAzMToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFZFQzI7IH0KLQlZWV9CUkVBSwotY2FzZSAz
MjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFZFQzM7IH0KLQlZWV9CUkVBSwotY2FzZSAzMzoK
LVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFZFQzQ7IH0KLQlZWV9CUkVBSwotY2FzZSAzNDoKLVlZ
X1JVTEVfU0VUVVAKLXsgcmV0dXJuIElWRUMyOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMzU6Ci1ZWV9S
VUxFX1NFVFVQCi17IHJldHVybiBJVkVDMzsgfQotCVlZX0JSRUFLCi1jYXNlIDM2OgotWVlfUlVM
RV9TRVRVUAoteyByZXR1cm4gSVZFQzQ7IH0KLQlZWV9CUkVBSwotY2FzZSAzNzoKLVlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIEJWRUMyOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMzg6Ci1ZWV9SVUxFX1NF
VFVQCi17IHJldHVybiBCVkVDMzsgfQotCVlZX0JSRUFLCi1jYXNlIDM5OgotWVlfUlVMRV9TRVRV
UAoteyByZXR1cm4gQlZFQzQ7IH0KLQlZWV9CUkVBSwotY2FzZSA0MDoKLVlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIFNBTVBMRVIyRDsgfQotCVlZX0JSRUFLCi1jYXNlIDQxOgotWVlfUlVMRV9TRVRV
UAoteyByZXR1cm4gU0FNUExFUkNVQkU7IH0KLQlZWV9CUkVBSwotY2FzZSA0MjoKLVlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIFNBTVBMRVJfRVhURVJOQUxfT0VTOyB9Ci0JWVlfQlJFQUsKLWNhc2Ug
NDM6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBTQU1QTEVSMkRSRUNUOyB9Ci0JWVlfQlJFQUsK
LWNhc2UgNDQ6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBTVFJVQ1Q7IH0KLQlZWV9CUkVBSwot
Y2FzZSA0NToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQotCVlZX0JSRUFLCi1jYXNlIDQ2OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNDc6Ci1ZWV9SVUxFX1NFVFVQ
Ci17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA0
ODoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQot
CVlZX0JSRUFLCi1jYXNlIDQ5OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNTA6Ci1ZWV9SVUxFX1NFVFVQCi17IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA1MToKLVlZ
X1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JS
RUFLCi1jYXNlIDUyOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNTM6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA1NDoKLVlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1j
YXNlIDU1OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0JWVlfQlJFQUsKLWNhc2UgNTY6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA1NzoKLVlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDU4
OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0J
WVlfQlJFQUsKLWNhc2UgNTk6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA2MDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDYxOgotWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJF
QUsKLWNhc2UgNjI6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA2MzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDY0OgotWVlfUlVMRV9T
RVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNh
c2UgNjU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KLQlZWV9CUkVBSwotY2FzZSA2NjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDY3OgotWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNjg6
Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZ
WV9CUkVBSwotY2FzZSA2OToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDcwOgotWVlfUlVMRV9TRVRVUAoteyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNzE6Ci1ZWV9S
VUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVB
SwotY2FzZSA3MjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDczOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNzQ6Ci1ZWV9SVUxFX1NF
VFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2Fz
ZSA3NToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQotCVlZX0JSRUFLCi1jYXNlIDc2OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNzc6Ci1ZWV9SVUxFX1NFVFVQCi17
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA3ODoK
LVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZ
X0JSRUFLCi1jYXNlIDc5OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgODA6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA4MToKLVlZX1JV
TEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFL
Ci1jYXNlIDgyOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgODM6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA4NDoKLVlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNl
IDg1OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0JWVlfQlJFQUsKLWNhc2UgODY6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA4NzoKLVlZX1JVTEVfU0VUVVAKLXsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDg4Ogot
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlf
QlJFQUsKLWNhc2UgODk6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA5MDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCVlZX0JSRUFLCi1jYXNlIDkxOgotWVlfUlVM
RV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsK
LWNhc2UgOTI6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KLQlZWV9CUkVBSwotY2FzZSA5MzoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgIHl5bHZhbC0+
bGV4LnN0cmluZyA9IE5ld1Bvb2xUU3RyaW5nKHl5dGV4dCk7IAotICAgcmV0dXJuIGNoZWNrX3R5
cGUoeXlzY2FubmVyKTsKLX0KLQlZWV9CUkVBSwotY2FzZSA5NDoKLVlZX1JVTEVfU0VUVVAKLXsg
cmV0dXJuIGludF9jb25zdGFudCh5eXNjYW5uZXIpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgOTU6Ci1Z
WV9SVUxFX1NFVFVQCi17IHJldHVybiBpbnRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQotCVlZX0JS
RUFLCi1jYXNlIDk2OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gaW50X2NvbnN0YW50KHl5c2Nh
bm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA5NzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIGZs
b2F0X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwotY2FzZSA5ODoKLVlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KLQlZWV9CUkVBSwot
Y2FzZSA5OToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nhbm5l
cik7IH0KLQlZWV9CUkVBSwotY2FzZSAxMDA6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBBRERf
QVNTSUdOOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTAxOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4g
U1VCX0FTU0lHTjsgfQotCVlZX0JSRUFLCi1jYXNlIDEwMjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0
dXJuIE1VTF9BU1NJR047IH0KLQlZWV9CUkVBSwotY2FzZSAxMDM6Ci1ZWV9SVUxFX1NFVFVQCi17
IHJldHVybiBESVZfQVNTSUdOOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTA0OgotWVlfUlVMRV9TRVRV
UAoteyByZXR1cm4gTU9EX0FTU0lHTjsgfQotCVlZX0JSRUFLCi1jYXNlIDEwNToKLVlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIExFRlRfQVNTSUdOOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTA2OgotWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4gUklHSFRfQVNTSUdOOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTA3
OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gQU5EX0FTU0lHTjsgfQotCVlZX0JSRUFLCi1jYXNl
IDEwODoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFhPUl9BU1NJR047IH0KLQlZWV9CUkVBSwot
Y2FzZSAxMDk6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBPUl9BU1NJR047IH0KLQlZWV9CUkVB
SwotY2FzZSAxMTA6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBJTkNfT1A7IH0KLQlZWV9CUkVB
SwotY2FzZSAxMTE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBERUNfT1A7IH0KLQlZWV9CUkVB
SwotY2FzZSAxMTI6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBBTkRfT1A7IH0KLQlZWV9CUkVB
SwotY2FzZSAxMTM6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBPUl9PUDsgfQotCVlZX0JSRUFL
Ci1jYXNlIDExNDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFhPUl9PUDsgfQotCVlZX0JSRUFL
Ci1jYXNlIDExNToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIExFX09QOyB9Ci0JWVlfQlJFQUsK
LWNhc2UgMTE2OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gR0VfT1A7IH0KLQlZWV9CUkVBSwot
Y2FzZSAxMTc6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBFUV9PUDsgfQotCVlZX0JSRUFLCi1j
YXNlIDExODoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIE5FX09QOyB9Ci0JWVlfQlJFQUsKLWNh
c2UgMTE5OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gTEVGVF9PUDsgfQotCVlZX0JSRUFLCi1j
YXNlIDEyMDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFJJR0hUX09QOyB9Ci0JWVlfQlJFQUsK
LWNhc2UgMTIxOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gU0VNSUNPTE9OOyB9Ci0JWVlfQlJF
QUsKLWNhc2UgMTIyOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gTEVGVF9CUkFDRTsgfQotCVlZ
X0JSRUFLCi1jYXNlIDEyMzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFJJR0hUX0JSQUNFOyB9
Ci0JWVlfQlJFQUsKLWNhc2UgMTI0OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gQ09NTUE7IH0K
LQlZWV9CUkVBSwotY2FzZSAxMjU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBDT0xPTjsgfQot
CVlZX0JSRUFLCi1jYXNlIDEyNjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEVRVUFMOyB9Ci0J
WVlfQlJFQUsKLWNhc2UgMTI3OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gTEVGVF9QQVJFTjsg
fQotCVlZX0JSRUFLCi1jYXNlIDEyODoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFJJR0hUX1BB
UkVOOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTI5OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gTEVG
VF9CUkFDS0VUOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTMwOgotWVlfUlVMRV9TRVRVUAoteyByZXR1
cm4gUklHSFRfQlJBQ0tFVDsgfQotCVlZX0JSRUFLCi1jYXNlIDEzMToKLVlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIERPVDsgfQotCVlZX0JSRUFLCi1jYXNlIDEzMjoKLVlZX1JVTEVfU0VUVVAKLXsg
cmV0dXJuIEJBTkc7IH0KLQlZWV9CUkVBSwotY2FzZSAxMzM6Ci1ZWV9SVUxFX1NFVFVQCi17IHJl
dHVybiBEQVNIOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTM0OgotWVlfUlVMRV9TRVRVUAoteyByZXR1
cm4gVElMREU7IH0KLQlZWV9CUkVBSwotY2FzZSAxMzU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVy
biBQTFVTOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTM2OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4g
U1RBUjsgfQotCVlZX0JSRUFLCi1jYXNlIDEzNzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFNM
QVNIOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTM4OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gUEVS
Q0VOVDsgfQotCVlZX0JSRUFLCi1jYXNlIDEzOToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIExF
RlRfQU5HTEU7IH0KLQlZWV9CUkVBSwotY2FzZSAxNDA6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVy
biBSSUdIVF9BTkdMRTsgfQotCVlZX0JSRUFLCi1jYXNlIDE0MToKLVlZX1JVTEVfU0VUVVAKLXsg
cmV0dXJuIFZFUlRJQ0FMX0JBUjsgfQotCVlZX0JSRUFLCi1jYXNlIDE0MjoKLVlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIENBUkVUOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTQzOgotWVlfUlVMRV9TRVRV
UAoteyByZXR1cm4gQU1QRVJTQU5EOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTQ0OgotWVlfUlVMRV9T
RVRVUAoteyByZXR1cm4gUVVFU1RJT047IH0KLQlZWV9CUkVBSwotY2FzZSAxNDU6Ci0vKiBydWxl
IDE0NSBjYW4gbWF0Y2ggZW9sICovCi1ZWV9SVUxFX1NFVFVQCi17IH0KLQlZWV9CUkVBSwotY2Fz
ZSBZWV9TVEFURV9FT0YoSU5JVElBTCk6Ci17IHl5dGVybWluYXRlKCk7IH0KLQlZWV9CUkVBSwot
Y2FzZSAxNDY6Ci1ZWV9SVUxFX1NFVFVQCi17IGFzc2VydChmYWxzZSk7IHJldHVybiAwOyB9Ci0J
WVlfQlJFQUsKLWNhc2UgMTQ3OgotWVlfUlVMRV9TRVRVUAotRUNITzsKLQlZWV9CUkVBSwotCi0J
Y2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgotCQl7Ci0JCS8qIEFtb3VudCBvZiB0ZXh0IG1hdGNoZWQg
bm90IGluY2x1ZGluZyB0aGUgRU9CIGNoYXIuICovCi0JCWludCB5eV9hbW91bnRfb2ZfbWF0Y2hl
ZF90ZXh0ID0gKGludCkgKHl5X2NwIC0geXlnLT55eXRleHRfcHRyKSAtIDE7Ci0KLQkJLyogVW5k
byB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OLiAqLwotCQkqeXlfY3AgPSB5eWct
Pnl5X2hvbGRfY2hhcjsKLQkJWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAotCi0JCWlmICggWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9ORVcg
KQotCQkJewotCQkJLyogV2UncmUgc2Nhbm5pbmcgYSBuZXcgZmlsZSBvciBpbnB1dCBzb3VyY2Uu
ICBJdCdzCi0JCQkgKiBwb3NzaWJsZSB0aGF0IHRoaXMgaGFwcGVuZWQgYmVjYXVzZSB0aGUgdXNl
cgotCQkJICoganVzdCBwb2ludGVkIHl5aW4gYXQgYSBuZXcgc291cmNlIGFuZCBjYWxsZWQKLQkJ
CSAqIHl5bGV4KCkuICBJZiBzbywgdGhlbiB3ZSBoYXZlIHRvIGFzc3VyZQotCQkJICogY29uc2lz
dGVuY3kgYmV0d2VlbiBZWV9DVVJSRU5UX0JVRkZFUiBhbmQgb3VyCi0JCQkgKiBnbG9iYWxzLiAg
SGVyZSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8gc28sIGJlY2F1c2UKLQkJCSAqIHRoaXMgaXMg
dGhlIGZpcnN0IGFjdGlvbiAob3RoZXIgdGhhbiBwb3NzaWJseSBhCi0JCQkgKiBiYWNrLXVwKSB0
aGF0IHdpbGwgbWF0Y2ggZm9yIHRoZSBuZXcgaW5wdXQgc291cmNlLgotCQkJICovCi0JCQl5eWct
Pnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7Ci0JCQlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGUgPSB5eWluOwotCQkJWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05PUk1BTDsK
LQkJCX0KLQotCQkvKiBOb3RlIHRoYXQgaGVyZSB3ZSB0ZXN0IGZvciB5eV9jX2J1Zl9wICI8PSIg
dG8gdGhlIHBvc2l0aW9uCi0JCSAqIG9mIHRoZSBmaXJzdCBFT0IgaW4gdGhlIGJ1ZmZlciwgc2lu
Y2UgeXlfY19idWZfcCB3aWxsCi0JCSAqIGFscmVhZHkgaGF2ZSBiZWVuIGluY3JlbWVudGVkIHBh
c3QgdGhlIE5VTCBjaGFyYWN0ZXIKLQkJICogKHNpbmNlIGFsbCBzdGF0ZXMgbWFrZSB0cmFuc2l0
aW9ucyBvbiBFT0IgdG8gdGhlCi0JCSAqIGVuZC1vZi1idWZmZXIgc3RhdGUpLiAgQ29udHJhc3Qg
dGhpcyB3aXRoIHRoZSB0ZXN0Ci0JCSAqIGluIGlucHV0KCkuCi0JCSAqLwotCQlpZiAoIHl5Zy0+
eXlfY19idWZfcCA8PSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55
eV9uX2NoYXJzXSApCi0JCQl7IC8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KLQkJCXl5X3N0
YXRlX3R5cGUgeXlfbmV4dF9zdGF0ZTsKLQotCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRl
eHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsKLQotCQkJeXlfY3VycmVudF9zdGF0
ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7Ci0KLQkJCS8qIE9rYXksIHdl
J3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhlIE5VTAotCQkJICogdHJhbnNpdGlvbi4gIFdl
IGNvdWxkbid0IGhhdmUKLQkJCSAqIHl5X2dldF9wcmV2aW91c19zdGF0ZSgpIGdvIGFoZWFkIGFu
ZCBkbyBpdAotCQkJICogZm9yIHVzIGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IGhvdyB0byBkZWFs
Ci0JCQkgKiB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBqYW1taW5nIChhbmQgd2UgZG9uJ3QKLQkJ
CSAqIHdhbnQgdG8gYnVpbGQgamFtbWluZyBpbnRvIGl0IGJlY2F1c2UgdGhlbiBpdAotCQkJICog
d2lsbCBydW4gbW9yZSBzbG93bHkpLgotCQkJICovCi0KLQkJCXl5X25leHRfc3RhdGUgPSB5eV90
cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRlICwgeXlzY2FubmVyKTsKLQotCQkJeXlfYnAg
PSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKLQotCQkJaWYgKCB5eV9uZXh0X3N0YXRl
ICkKLQkJCQl7Ci0JCQkJLyogQ29uc3VtZSB0aGUgTlVMLiAqLwotCQkJCXl5X2NwID0gKyt5eWct
Pnl5X2NfYnVmX3A7Ci0JCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X25leHRfc3RhdGU7Ci0JCQkJ
Z290byB5eV9tYXRjaDsKLQkJCQl9Ci0KLQkJCWVsc2UKLQkJCQl7Ci0JCQkJeXlfY3AgPSB5eWct
Pnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0JCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlf
bGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0JCQkJZ290byB5eV9maW5kX2FjdGlvbjsKLQkJCQl9Ci0J
CQl9Ci0KLQkJZWxzZSBzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkK
LQkJCXsKLQkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKLQkJCQl7Ci0JCQkJeXlnLT55eV9k
aWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAwOwotCi0JCQkJaWYgKCB5eXdyYXAoeXlzY2FubmVy
ICkgKQotCQkJCQl7Ci0JCQkJCS8qIE5vdGU6IGJlY2F1c2Ugd2UndmUgdGFrZW4gY2FyZSBpbgot
CQkJCQkgKiB5eV9nZXRfbmV4dF9idWZmZXIoKSB0byBoYXZlIHNldCB1cAotCQkJCQkgKiB5eXRl
eHQsIHdlIGNhbiBub3cgc2V0IHVwCi0JCQkJCSAqIHl5X2NfYnVmX3Agc28gdGhhdCBpZiBzb21l
IHRvdGFsCi0JCQkJCSAqIGhvc2VyIChsaWtlIGZsZXggaXRzZWxmKSB3YW50cyB0bwotCQkJCQkg
KiBjYWxsIHRoZSBzY2FubmVyIGFmdGVyIHdlIHJldHVybiB0aGUKLQkJCQkJICogWVlfTlVMTCwg
aXQnbGwgc3RpbGwgd29yayAtIGFub3RoZXIKLQkJCQkJICogWVlfTlVMTCB3aWxsIGdldCByZXR1
cm5lZC4KLQkJCQkJICovCi0JCQkJCXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciAr
IFlZX01PUkVfQURKOwotCi0JCQkJCXl5X2FjdCA9IFlZX1NUQVRFX0VPRihZWV9TVEFSVCk7Ci0J
CQkJCWdvdG8gZG9fYWN0aW9uOwotCQkJCQl9Ci0KLQkJCQllbHNlCi0JCQkJCXsKLQkJCQkJaWYg
KCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKLQkJCQkJCVlZX05FV19GSUxF
OwotCQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVf
U0NBTjoKLQkJCQl5eWctPnl5X2NfYnVmX3AgPQotCQkJCQl5eWctPnl5dGV4dF9wdHIgKyB5eV9h
bW91bnRfb2ZfbWF0Y2hlZF90ZXh0OwotCi0JCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9w
cmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7Ci0KLQkJCQl5eV9jcCA9IHl5Zy0+eXlfY19idWZf
cDsKLQkJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOwotCQkJCWdvdG8g
eXlfbWF0Y2g7Ci0KLQkJCWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgotCQkJCXl5Zy0+eXlfY19i
dWZfcCA9Ci0JCQkJJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlf
bl9jaGFyc107Ci0KLQkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRl
KCB5eXNjYW5uZXIgKTsKLQotCQkJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwotCQkJCXl5X2Jw
ID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7Ci0JCQkJZ290byB5eV9maW5kX2FjdGlv
bjsKLQkJCX0KLQkJYnJlYWs7Ci0JCX0KLQotCWRlZmF1bHQ6Ci0JCVlZX0ZBVEFMX0VSUk9SKAot
CQkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kIiAp
OwotCX0gLyogZW5kIG9mIGFjdGlvbiBzd2l0Y2ggKi8KLQkJfSAvKiBlbmQgb2Ygc2Nhbm5pbmcg
b25lIHRva2VuICovCi19IC8qIGVuZCBvZiB5eWxleCAqLwotCi0vKiB5eV9nZXRfbmV4dF9idWZm
ZXIgLSB0cnkgdG8gcmVhZCBpbiBhIG5ldyBidWZmZXIKLSAqCi0gKiBSZXR1cm5zIGEgY29kZSBy
ZXByZXNlbnRpbmcgYW4gYWN0aW9uOgotICoJRU9CX0FDVF9MQVNUX01BVENIIC0KLSAqCUVPQl9B
Q1RfQ09OVElOVUVfU0NBTiAtIGNvbnRpbnVlIHNjYW5uaW5nIGZyb20gY3VycmVudCBwb3NpdGlv
bgotICoJRU9CX0FDVF9FTkRfT0ZfRklMRSAtIGVuZCBvZiBmaWxlCi0gKi8KLXN0YXRpYyBpbnQg
eXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCXJlZ2lzdGVyIGNo
YXIgKmRlc3QgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZjsKLQlyZWdpc3Rl
ciBjaGFyICpzb3VyY2UgPSB5eWctPnl5dGV4dF9wdHI7Ci0JcmVnaXN0ZXIgaW50IG51bWJlcl90
b19tb3ZlLCBpOwotCWludCByZXRfdmFsOwotCi0JaWYgKCB5eWctPnl5X2NfYnVmX3AgPiAmWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gKQot
CQlZWV9GQVRBTF9FUlJPUigKLQkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0t
ZW5kIG9mIGJ1ZmZlciBtaXNzZWQiICk7Ci0KLQlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfZmlsbF9idWZmZXIgPT0gMCApCi0JCXsgLyogRG9uJ3QgdHJ5IHRvIGZpbGwgdGhlIGJ1
ZmZlciwgc28gdGhpcyBpcyBhbiBFT0YuICovCi0JCWlmICggeXlnLT55eV9jX2J1Zl9wIC0geXln
LT55eXRleHRfcHRyIC0gWVlfTU9SRV9BREogPT0gMSApCi0JCQl7Ci0JCQkvKiBXZSBtYXRjaGVk
IGEgc2luZ2xlIGNoYXJhY3RlciwgdGhlIEVPQiwgc28KLQkJCSAqIHRyZWF0IHRoaXMgYXMgYSBm
aW5hbCBFT0YuCi0JCQkgKi8KLQkJCXJldHVybiBFT0JfQUNUX0VORF9PRl9GSUxFOwotCQkJfQot
Ci0JCWVsc2UKLQkJCXsKLQkJCS8qIFdlIG1hdGNoZWQgc29tZSB0ZXh0IHByaW9yIHRvIHRoZSBF
T0IsIGZpcnN0Ci0JCQkgKiBwcm9jZXNzIGl0LgotCQkJICovCi0JCQlyZXR1cm4gRU9CX0FDVF9M
QVNUX01BVENIOwotCQkJfQotCQl9Ci0KLQkvKiBUcnkgdG8gcmVhZCBtb3JlIGRhdGEuICovCi0K
LQkvKiBGaXJzdCBtb3ZlIGxhc3QgY2hhcnMgdG8gc3RhcnQgb2YgYnVmZmVyLiAqLwotCW51bWJl
cl90b19tb3ZlID0gKGludCkgKHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cikgLSAx
OwotCi0JZm9yICggaSA9IDA7IGkgPCBudW1iZXJfdG9fbW92ZTsgKytpICkKLQkJKihkZXN0Kysp
ID0gKihzb3VyY2UrKyk7Ci0KLQlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVm
ZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgKQotCQkvKiBkb24ndCBkbyB0aGUg
cmVhZCwgaXQncyBub3QgZ3VhcmFudGVlZCB0byByZXR1cm4gYW4gRU9GLAotCQkgKiBqdXN0IGZv
cmNlIGFuIEVPRgotCQkgKi8KLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJz
ID0geXlnLT55eV9uX2NoYXJzID0gMDsKLQotCWVsc2UKLQkJewotCQkJeXlfc2l6ZV90IG51bV90
b19yZWFkID0KLQkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1i
ZXJfdG9fbW92ZSAtIDE7Ci0KLQkJd2hpbGUgKCBudW1fdG9fcmVhZCA8PSAwICkKLQkJCXsgLyog
Tm90IGVub3VnaCByb29tIGluIHRoZSBidWZmZXIgLSBncm93IGl0LiAqLwotCi0JCQkvKiBqdXN0
IGEgc2hvcnRlciBuYW1lIGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8KLQkJCVlZX0JVRkZFUl9T
VEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVI7Ci0KLQkJCWludCB5eV9jX2J1Zl9wX29mZnNldCA9
Ci0JCQkJKGludCkgKHl5Zy0+eXlfY19idWZfcCAtIGItPnl5X2NoX2J1Zik7Ci0KLQkJCWlmICgg
Yi0+eXlfaXNfb3VyX2J1ZmZlciApCi0JCQkJewotCQkJCXl5X3NpemVfdCBuZXdfc2l6ZSA9IGIt
Pnl5X2J1Zl9zaXplICogMjsKLQotCQkJCWlmICggbmV3X3NpemUgPD0gMCApCi0JCQkJCWItPnl5
X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsKLQkJCQllbHNlCi0JCQkJCWItPnl5X2J1
Zl9zaXplICo9IDI7Ci0KLQkJCQliLT55eV9jaF9idWYgPSAoY2hhciAqKQotCQkJCQkvKiBJbmNs
dWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJzLiAqLwotCQkJCQl5eXJlYWxsb2MoKHZvaWQgKikg
Yi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7Ci0JCQkJfQotCQkJ
ZWxzZQotCQkJCS8qIENhbid0IGdyb3cgaXQsIHdlIGRvbid0IG93biBpdC4gKi8KLQkJCQliLT55
eV9jaF9idWYgPSAwOwotCi0JCQlpZiAoICEgYi0+eXlfY2hfYnVmICkKLQkJCQlZWV9GQVRBTF9F
UlJPUigKLQkJCQkiZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZlciBvdmVyZmxvdyIg
KTsKLQotCQkJeXlnLT55eV9jX2J1Zl9wID0gJmItPnl5X2NoX2J1Zlt5eV9jX2J1Zl9wX29mZnNl
dF07Ci0KLQkJCW51bV90b19yZWFkID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZf
c2l6ZSAtCi0JCQkJCQludW1iZXJfdG9fbW92ZSAtIDE7Ci0KLQkJCX0KLQotCQlpZiAoIG51bV90
b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSApCi0JCQludW1fdG9fcmVhZCA9IFlZX1JFQURfQlVG
X1NJWkU7Ci0KLQkJLyogUmVhZCBpbiBtb3JlIGRhdGEuICovCi0JCVlZX0lOUFVUKCAoJllZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90b19tb3ZlXSksCi0JCQl5eWct
Pnl5X25fY2hhcnMsIG51bV90b19yZWFkICk7Ci0KLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOwotCQl9Ci0KLQlpZiAoIHl5Zy0+eXlfbl9j
aGFycyA9PSAwICkKLQkJewotCQlpZiAoIG51bWJlcl90b19tb3ZlID09IFlZX01PUkVfQURKICkK
LQkJCXsKLQkJCXJldF92YWwgPSBFT0JfQUNUX0VORF9PRl9GSUxFOwotCQkJeXlyZXN0YXJ0KHl5
aW4gICx5eXNjYW5uZXIpOwotCQkJfQotCi0JCWVsc2UKLQkJCXsKLQkJCXJldF92YWwgPSBFT0Jf
QUNUX0xBU1RfTUFUQ0g7Ci0JCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9z
dGF0dXMgPQotCQkJCVlZX0JVRkZFUl9FT0ZfUEVORElORzsKLQkJCX0KLQkJfQotCi0JZWxzZQot
CQlyZXRfdmFsID0gRU9CX0FDVF9DT05USU5VRV9TQ0FOOwotCi0JaWYgKCh5eV9zaXplX3QpICh5
eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSkgPiBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2J1Zl9zaXplKSB7Ci0JCS8qIEV4dGVuZCB0aGUgYXJyYXkgYnkgNTAlLCBwbHVzIHRo
ZSBudW1iZXIgd2UgcmVhbGx5IG5lZWQuICovCi0JCXl5X3NpemVfdCBuZXdfc2l6ZSA9IHl5Zy0+
eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlICsgKHl5Zy0+eXlfbl9jaGFycyA+PiAxKTsKLQkJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgPSAoY2hhciAqKSB5eXJlYWxsb2Mo
KHZvaWQgKikgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYsbmV3X3NpemUgLHl5
c2Nhbm5lciApOwotCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYg
KQotCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0X25l
eHRfYnVmZmVyKCkiICk7Ci0JfQotCi0JeXlnLT55eV9uX2NoYXJzICs9IG51bWJlcl90b19tb3Zl
OwotCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10g
PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0JWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9j
aF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0KLQl5
eWctPnl5dGV4dF9wdHIgPSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbMF07
Ci0KLQlyZXR1cm4gcmV0X3ZhbDsKLX0KLQotLyogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlIC0gZ2V0
IHRoZSBzdGF0ZSBqdXN0IGJlZm9yZSB0aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQgKi8KLQotICAg
IHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlz
Y2FubmVyKQotewotCXJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKLQly
ZWdpc3RlciBjaGFyICp5eV9jcDsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9zdGFy
dDsKLQotCWZvciAoIHl5X2NwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7IHl5X2Nw
IDwgeXlnLT55eV9jX2J1Zl9wOyArK3l5X2NwICkKLQkJewotCQlyZWdpc3RlciBZWV9DSEFSIHl5
X2MgPSAoKnl5X2NwID8geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV0gOiAxKTsKLQkJaWYgKCB5
eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQotCQkJewotCQkJeXlnLT55eV9sYXN0X2FjY2Vw
dGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7Ci0JCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5n
X2Nwb3MgPSB5eV9jcDsKLQkJCX0KLQkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50
X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQotCQkJewotCQkJeXlfY3VycmVu
dF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJCWlmICggeXlfY3Vy
cmVudF9zdGF0ZSA+PSA0NDMgKQotCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5
X2NdOwotCQkJfQotCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVu
dF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKLQkJfQotCi0JcmV0dXJuIHl5X2N1cnJl
bnRfc3RhdGU7Ci19Ci0KLS8qIHl5X3RyeV9OVUxfdHJhbnMgLSB0cnkgdG8gbWFrZSBhIHRyYW5z
aXRpb24gb24gdGhlIE5VTCBjaGFyYWN0ZXIKLSAqCi0gKiBzeW5vcHNpcwotICoJbmV4dF9zdGF0
ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIGN1cnJlbnRfc3RhdGUgKTsKLSAqLwotICAgIHN0YXRpYyB5
eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgICh5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRf
c3RhdGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0JcmVnaXN0ZXIgaW50IHl5X2lzX2phbTsK
LSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
IC8qIFRoaXMgdmFyIG1heSBiZSB1bnVzZWQgZGVwZW5kaW5nIHVwb24gb3B0aW9ucy4gKi8KLQly
ZWdpc3RlciBjaGFyICp5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKLQotCXJlZ2lzdGVyIFlZX0NI
QVIgeXlfYyA9IDE7Ci0JaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQotCQl7Ci0J
CXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOwotCQl5eWct
Pnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKLQkJfQotCXdoaWxlICggeXlfY2hrW3l5
X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKLQkJ
ewotCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwot
CQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDQzICkKLQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNp
Z25lZCBpbnQpIHl5X2NdOwotCQl9Ci0JeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNl
W3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0JeXlfaXNfamFtID0g
KHl5X2N1cnJlbnRfc3RhdGUgPT0gNDQyKTsKLQotCXJldHVybiB5eV9pc19qYW0gPyAwIDogeXlf
Y3VycmVudF9zdGF0ZTsKLX0KLQotI2lmbmRlZiBZWV9OT19JTlBVVAotI2lmZGVmIF9fY3BsdXNw
bHVzCi0gICAgc3RhdGljIGludCB5eWlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIpCi0jZWxzZQot
ICAgIHN0YXRpYyBpbnQgaW5wdXQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi0jZW5kaWYKLQotewot
CWludCBjOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKLQotCSp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLQotCWlm
ICggKnl5Zy0+eXlfY19idWZfcCA9PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQotCQl7Ci0JCS8q
IHl5X2NfYnVmX3Agbm93IHBvaW50cyB0byB0aGUgY2hhcmFjdGVyIHdlIHdhbnQgdG8gcmV0dXJu
LgotCQkgKiBJZiB0aGlzIG9jY3VycyAqYmVmb3JlKiB0aGUgRU9CIGNoYXJhY3RlcnMsIHRoZW4g
aXQncyBhCi0JCSAqIHZhbGlkIE5VTDsgaWYgbm90LCB0aGVuIHdlJ3ZlIGhpdCB0aGUgZW5kIG9m
IHRoZSBidWZmZXIuCi0JCSAqLwotCQlpZiAoIHl5Zy0+eXlfY19idWZfcCA8ICZZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdICkKLQkJCS8qIFRoaXMg
d2FzIHJlYWxseSBhIE5VTC4gKi8KLQkJCSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOwotCi0JCWVs
c2UKLQkJCXsgLyogbmVlZCBtb3JlIGlucHV0ICovCi0JCQl5eV9zaXplX3Qgb2Zmc2V0ID0geXln
LT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyOwotCQkJKyt5eWctPnl5X2NfYnVmX3A7Ci0K
LQkJCXN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQotCQkJCXsKLQkJ
CQljYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoKLQkJCQkJLyogVGhpcyBoYXBwZW5zIGJlY2F1c2Ug
eXlfZ19uX2IoKQotCQkJCQkgKiBzZWVzIHRoYXQgd2UndmUgYWNjdW11bGF0ZWQgYQotCQkJCQkg
KiB0b2tlbiBhbmQgZmxhZ3MgdGhhdCB3ZSBuZWVkIHRvCi0JCQkJCSAqIHRyeSBtYXRjaGluZyB0
aGUgdG9rZW4gYmVmb3JlCi0JCQkJCSAqIHByb2NlZWRpbmcuICBCdXQgZm9yIGlucHV0KCksCi0J
CQkJCSAqIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgdG8gY29uc2lkZXIuCi0JCQkJCSAqIFNvIGNvbnZl
cnQgdGhlIEVPQl9BQ1RfTEFTVF9NQVRDSAotCQkJCQkgKiB0byBFT0JfQUNUX0VORF9PRl9GSUxF
LgotCQkJCQkgKi8KLQotCQkJCQkvKiBSZXNldCBidWZmZXIgc3RhdHVzLiAqLwotCQkJCQl5eXJl
c3RhcnQoeXlpbiAseXlzY2FubmVyKTsKLQotCQkJCQkvKkZBTExUSFJPVUdIKi8KLQotCQkJCWNh
c2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKLQkJCQkJewotCQkJCQlpZiAoIHl5d3JhcCh5eXNjYW5u
ZXIgKSApCi0JCQkJCQlyZXR1cm4gRU9GOwotCi0JCQkJCWlmICggISB5eWctPnl5X2RpZF9idWZm
ZXJfc3dpdGNoX29uX2VvZiApCi0JCQkJCQlZWV9ORVdfRklMRTsKLSNpZmRlZiBfX2NwbHVzcGx1
cwotCQkJCQlyZXR1cm4geXlpbnB1dCh5eXNjYW5uZXIpOwotI2Vsc2UKLQkJCQkJcmV0dXJuIGlu
cHV0KHl5c2Nhbm5lcik7Ci0jZW5kaWYKLQkJCQkJfQotCi0JCQkJY2FzZSBFT0JfQUNUX0NPTlRJ
TlVFX1NDQU46Ci0JCQkJCXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIG9mZnNl
dDsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQljID0gKih1bnNpZ25lZCBjaGFy
ICopIHl5Zy0+eXlfY19idWZfcDsJLyogY2FzdCBmb3IgOC1iaXQgY2hhcidzICovCi0JKnl5Zy0+
eXlfY19idWZfcCA9ICdcMCc7CS8qIHByZXNlcnZlIHl5dGV4dCAqLwotCXl5Zy0+eXlfaG9sZF9j
aGFyID0gKisreXlnLT55eV9jX2J1Zl9wOwotCi0JaWYgKCBjID09ICdcbicgKQotCQkgICAKLSAg
ICBkb3sgeXlsaW5lbm8rKzsKLSAgICAgICAgeXljb2x1bW49MDsKLSAgICB9d2hpbGUoMCkKLTsK
LQotCXJldHVybiBjOwotfQotI2VuZGlmCS8qIGlmbmRlZiBZWV9OT19JTlBVVCAqLwotCi0vKiog
SW1tZWRpYXRlbHkgc3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IHN0cmVhbS4KLSAqIEBwYXJh
bSBpbnB1dF9maWxlIEEgcmVhZGFibGUgc3RyZWFtLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUg
c2Nhbm5lciBvYmplY3QuCi0gKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHJlc2V0IHRo
ZSBzdGFydCBjb25kaXRpb24gdG8gQGMgSU5JVElBTCAuCi0gKi8KLSAgICB2b2lkIHl5cmVzdGFy
dCAgKEZJTEUgKiBpbnB1dF9maWxlICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotCWlmICgg
ISBZWV9DVVJSRU5UX0JVRkZFUiApewotICAgICAgICB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5
c2Nhbm5lcik7Ci0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9Ci0gICAgICAgICAgICB5eV9j
cmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7Ci0JfQotCi0JeXlfaW5p
dF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIsaW5wdXRfZmlsZSAseXlzY2FubmVyKTsKLQl5eV9s
b2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLX0KLQotLyoqIFN3aXRjaCB0byBhIGRpZmZl
cmVudCBpbnB1dCBidWZmZXIuCi0gKiBAcGFyYW0gbmV3X2J1ZmZlciBUaGUgbmV3IGlucHV0IGJ1
ZmZlci4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi0gICAg
dm9pZCB5eV9zd2l0Y2hfdG9fYnVmZmVyICAoWVlfQlVGRkVSX1NUQVRFICBuZXdfYnVmZmVyICwg
eXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotCS8qIFRPRE8uIFdlIHNob3VsZCBiZSBhYmxlIHRv
IHJlcGxhY2UgdGhpcyBlbnRpcmUgZnVuY3Rpb24gYm9keQotCSAqIHdpdGgKLQkgKgkJeXlwb3Bf
YnVmZmVyX3N0YXRlKCk7Ci0JICoJCXl5cHVzaF9idWZmZXJfc3RhdGUobmV3X2J1ZmZlcik7Ci0g
ICAgICovCi0JeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwotCWlmICggWVlfQ1VS
UkVOVF9CVUZGRVIgPT0gbmV3X2J1ZmZlciApCi0JCXJldHVybjsKLQotCWlmICggWVlfQ1VSUkVO
VF9CVUZGRVIgKQotCQl7Ci0JCS8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZl
ci4gKi8KLQkJKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotCQlZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVmX3A7Ci0JCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKLQkJfQot
Ci0JWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKLQl5eV9sb2FkX2J1ZmZl
cl9zdGF0ZSh5eXNjYW5uZXIgKTsKLQotCS8qIFdlIGRvbid0IGFjdHVhbGx5IGtub3cgd2hldGhl
ciB3ZSBkaWQgdGhpcyBzd2l0Y2ggZHVyaW5nCi0JICogRU9GICh5eXdyYXAoKSkgcHJvY2Vzc2lu
ZywgYnV0IHRoZSBvbmx5IHRpbWUgdGhpcyBmbGFnCi0JICogaXMgbG9va2VkIGF0IGlzIGFmdGVy
IHl5d3JhcCgpIGlzIGNhbGxlZCwgc28gaXQncyBzYWZlCi0JICogdG8gZ28gYWhlYWQgYW5kIGFs
d2F5cyBzZXQgaXQuCi0JICovCi0JeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAx
OwotfQotCi1zdGF0aWMgdm9pZCB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSAgKHl5c2Nhbl90IHl5c2Nh
bm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7Ci0JeXlnLT55eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9uX2NoYXJzOwotCXl5Zy0+eXl0ZXh0X3B0ciA9IHl5Zy0+eXlfY19idWZfcCA9IFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvczsKLQl5eWluID0gWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9pbnB1dF9maWxlOwotCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19i
dWZfcDsKLX0KLQotLyoqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIGlucHV0IGJ1ZmZlciBz
dGF0ZS4KLSAqIEBwYXJhbSBmaWxlIEEgcmVhZGFibGUgc3RyZWFtLgotICogQHBhcmFtIHNpemUg
VGhlIGNoYXJhY3RlciBidWZmZXIgc2l6ZSBpbiBieXRlcy4gV2hlbiBpbiBkb3VidCwgdXNlIEBj
IFlZX0JVRl9TSVpFLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0g
KiBAcmV0dXJuIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlLgotICovCi0gICAgWVlfQlVGRkVS
X1NUQVRFIHl5X2NyZWF0ZV9idWZmZXIgIChGSUxFICogZmlsZSwgaW50ICBzaXplICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQotewotCVlZX0JVRkZFUl9TVEFURSBiOwotICAgIAotCWIgPSAoWVlfQlVG
RkVSX1NUQVRFKSB5eWFsbG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNj
YW5uZXIgKTsKLQlpZiAoICEgYiApCi0JCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMg
bWVtb3J5IGluIHl5X2NyZWF0ZV9idWZmZXIoKSIgKTsKLQotCWItPnl5X2J1Zl9zaXplID0gc2l6
ZTsKLQotCS8qIHl5X2NoX2J1ZiBoYXMgdG8gYmUgMiBjaGFyYWN0ZXJzIGxvbmdlciB0aGFuIHRo
ZSBzaXplIGdpdmVuIGJlY2F1c2UKLQkgKiB3ZSBuZWVkIHRvIHB1dCBpbiAyIGVuZC1vZi1idWZm
ZXIgY2hhcmFjdGVycy4KLQkgKi8KLQliLT55eV9jaF9idWYgPSAoY2hhciAqKSB5eWFsbG9jKGIt
Pnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7Ci0JaWYgKCAhIGItPnl5X2NoX2J1ZiApCi0J
CVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2NyZWF0ZV9idWZm
ZXIoKSIgKTsKLQotCWItPnl5X2lzX291cl9idWZmZXIgPSAxOwotCi0JeXlfaW5pdF9idWZmZXIo
YixmaWxlICx5eXNjYW5uZXIpOwotCi0JcmV0dXJuIGI7Ci19Ci0KLS8qKiBEZXN0cm95IHRoZSBi
dWZmZXIuCi0gKiBAcGFyYW0gYiBhIGJ1ZmZlciBjcmVhdGVkIHdpdGggeXlfY3JlYXRlX2J1ZmZl
cigpCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotICAgIHZv
aWQgeXlfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKLQotCWlmICggISBiICkKLQkJcmV0dXJuOwotCi0JaWYgKCBiID09IFlZX0NVUlJF
TlRfQlVGRkVSICkgLyogTm90IHN1cmUgaWYgd2Ugc2hvdWxkIHBvcCBoZXJlLiAqLwotCQlZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAoWVlfQlVGRkVSX1NUQVRFKSAwOwotCi0JaWYgKCBiLT55
eV9pc19vdXJfYnVmZmVyICkKLQkJeXlmcmVlKCh2b2lkICopIGItPnl5X2NoX2J1ZiAseXlzY2Fu
bmVyICk7Ci0KLQl5eWZyZWUoKHZvaWQgKikgYiAseXlzY2FubmVyICk7Ci19Ci0KLS8qIEluaXRp
YWxpemVzIG9yIHJlaW5pdGlhbGl6ZXMgYSBidWZmZXIuCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHNv
bWV0aW1lcyBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIHNhbWUgYnVmZmVyLAotICogc3Vj
aCBhcyBkdXJpbmcgYSB5eXJlc3RhcnQoKSBvciBhdCBFT0YuCi0gKi8KLSAgICBzdGF0aWMgdm9p
ZCB5eV9pbml0X2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgYiwgRklMRSAqIGZpbGUgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCi0KLXsKLQlpbnQgb2Vycm5vID0gZXJybm87Ci0gICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0JeXlfZmx1c2hf
YnVmZmVyKGIgLHl5c2Nhbm5lcik7Ci0KLQliLT55eV9pbnB1dF9maWxlID0gZmlsZTsKLQliLT55
eV9maWxsX2J1ZmZlciA9IDE7Ci0KLSAgICAvKiBJZiBiIGlzIHRoZSBjdXJyZW50IGJ1ZmZlciwg
dGhlbiB5eV9pbml0X2J1ZmZlciB3YXMgX3Byb2JhYmx5XwotICAgICAqIGNhbGxlZCBmcm9tIHl5
cmVzdGFydCgpIG9yIHRocm91Z2ggeXlfZ2V0X25leHRfYnVmZmVyLgotICAgICAqIEluIHRoYXQg
Y2FzZSwgd2UgZG9uJ3Qgd2FudCB0byByZXNldCB0aGUgbGluZW5vIG9yIGNvbHVtbi4KLSAgICAg
Ki8KLSAgICBpZiAoYiAhPSBZWV9DVVJSRU5UX0JVRkZFUil7Ci0gICAgICAgIGItPnl5X2JzX2xp
bmVubyA9IDE7Ci0gICAgICAgIGItPnl5X2JzX2NvbHVtbiA9IDA7Ci0gICAgfQotCi0gICAgICAg
IGItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKLSAgICAKLQllcnJubyA9IG9lcnJubzsKLX0KLQot
LyoqIERpc2NhcmQgYWxsIGJ1ZmZlcmVkIGNoYXJhY3RlcnMuIE9uIHRoZSBuZXh0IHNjYW4sIFlZ
X0lOUFVUIHdpbGwgYmUgY2FsbGVkLgotICogQHBhcmFtIGIgdGhlIGJ1ZmZlciBzdGF0ZSB0byBi
ZSBmbHVzaGVkLCB1c3VhbGx5IEBjIFlZX0NVUlJFTlRfQlVGRkVSLgotICogQHBhcmFtIHl5c2Nh
bm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLSAgICB2b2lkIHl5X2ZsdXNoX2J1ZmZlciAo
WVlfQlVGRkVSX1NUQVRFICBiICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQlpZiAoICEgYiAp
Ci0JCXJldHVybjsKLQotCWItPnl5X25fY2hhcnMgPSAwOwotCi0JLyogV2UgYWx3YXlzIG5lZWQg
dHdvIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4gIFRoZSBmaXJzdCBjYXVzZXMKLQkgKiBhIHRy
YW5zaXRpb24gdG8gdGhlIGVuZC1vZi1idWZmZXIgc3RhdGUuICBUaGUgc2Vjb25kIGNhdXNlcwot
CSAqIGEgamFtIGluIHRoYXQgc3RhdGUuCi0JICovCi0JYi0+eXlfY2hfYnVmWzBdID0gWVlfRU5E
X09GX0JVRkZFUl9DSEFSOwotCWItPnl5X2NoX2J1ZlsxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hB
UjsKLQotCWItPnl5X2J1Zl9wb3MgPSAmYi0+eXlfY2hfYnVmWzBdOwotCi0JYi0+eXlfYXRfYm9s
ID0gMTsKLQliLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKLQotCWlmICggYiA9
PSBZWV9DVVJSRU5UX0JVRkZFUiApCi0JCXl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciAp
OwotfQotCi0vKiogUHVzaGVzIHRoZSBuZXcgc3RhdGUgb250byB0aGUgc3RhY2suIFRoZSBuZXcg
c3RhdGUgYmVjb21lcwotICogIHRoZSBjdXJyZW50IHN0YXRlLiBUaGlzIGZ1bmN0aW9uIHdpbGwg
YWxsb2NhdGUgdGhlIHN0YWNrCi0gKiAgaWYgbmVjZXNzYXJ5LgotICogIEBwYXJhbSBuZXdfYnVm
ZmVyIFRoZSBuZXcgc3RhdGUuCi0gKiAgQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmpl
Y3QuCi0gKi8KLXZvaWQgeXlwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5ld19i
dWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCWlmIChuZXdfYnVmZmVyID09IE5VTEwp
Ci0JCXJldHVybjsKLQotCXl5ZW5zdXJlX2J1ZmZlcl9zdGFjayh5eXNjYW5uZXIpOwotCi0JLyog
VGhpcyBibG9jayBpcyBjb3BpZWQgZnJvbSB5eV9zd2l0Y2hfdG9fYnVmZmVyLiAqLwotCWlmICgg
WVlfQ1VSUkVOVF9CVUZGRVIgKQotCQl7Ci0JCS8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Ig
b2xkIGJ1ZmZlci4gKi8KLQkJKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwot
CQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVmX3A7
Ci0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFy
czsKLQkJfQotCi0JLyogT25seSBwdXNoIGlmIHRvcCBleGlzdHMuIE90aGVyd2lzZSwgcmVwbGFj
ZSB0b3AuICovCi0JaWYgKFlZX0NVUlJFTlRfQlVGRkVSKQotCQl5eWctPnl5X2J1ZmZlcl9zdGFj
a190b3ArKzsKLQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOwotCi0JLyog
Y29waWVkIGZyb20geXlfc3dpdGNoX3RvX2J1ZmZlci4gKi8KLQl5eV9sb2FkX2J1ZmZlcl9zdGF0
ZSh5eXNjYW5uZXIgKTsKLQl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Ci19
Ci0KLS8qKiBSZW1vdmVzIGFuZCBkZWxldGVzIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBpZiBwcmVz
ZW50LgotICogIFRoZSBuZXh0IGVsZW1lbnQgYmVjb21lcyB0aGUgbmV3IHRvcC4KLSAqICBAcGFy
YW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotdm9pZCB5eXBvcF9idWZmZXJf
c3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0JaWYgKCFZWV9DVVJSRU5UX0JVRkZFUikK
LQkJcmV0dXJuOwotCi0JeXlfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2Fu
bmVyKTsKLQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOwotCWlmICh5eWctPnl5X2J1
ZmZlcl9zdGFja190b3AgPiAwKQotCQktLXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcDsKLQotCWlm
IChZWV9DVVJSRU5UX0JVRkZFUikgewotCQl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIg
KTsKLQkJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOwotCX0KLX0KLQotLyog
QWxsb2NhdGVzIHRoZSBzdGFjayBpZiBpdCBkb2VzIG5vdCBleGlzdC4KLSAqICBHdWFyYW50ZWVz
IHNwYWNlIGZvciBhdCBsZWFzdCBvbmUgcHVzaC4KLSAqLwotc3RhdGljIHZvaWQgeXllbnN1cmVf
YnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0JeXlfc2l6ZV90IG51bV90b19h
bGxvYzsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7Ci0KLQlpZiAoIXl5Zy0+eXlfYnVmZmVyX3N0YWNrKSB7Ci0KLQkJLyogRmlyc3QgYWxs
b2NhdGlvbiBpcyBqdXN0IGZvciAyIGVsZW1lbnRzLCBzaW5jZSB3ZSBkb24ndCBrbm93IGlmIHRo
aXMKLQkJICogc2Nhbm5lciB3aWxsIGV2ZW4gbmVlZCBhIHN0YWNrLiBXZSB1c2UgMiBpbnN0ZWFk
IG9mIDEgdG8gYXZvaWQgYW4KLQkJICogaW1tZWRpYXRlIHJlYWxsb2Mgb24gdGhlIG5leHQgY2Fs
bC4KLSAgICAgICAgICovCi0JCW51bV90b19hbGxvYyA9IDE7Ci0JCXl5Zy0+eXlfYnVmZmVyX3N0
YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKil5eWFsbG9jCi0JCQkJCQkJCShudW1fdG9f
YWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCi0JCQkJCQkJCSwgeXlzY2Fu
bmVyKTsKLQkJaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKLQkJCVlZX0ZBVEFMX0VSUk9S
KCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOwot
CQkJCQkJCQkgIAotCQltZW1zZXQoeXlnLT55eV9idWZmZXJfc3RhY2ssIDAsIG51bV90b19hbGxv
YyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikpOwotCQkJCQotCQl5eWctPnl5X2J1
ZmZlcl9zdGFja19tYXggPSBudW1fdG9fYWxsb2M7Ci0JCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3Rv
cCA9IDA7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID49
ICh5eWctPnl5X2J1ZmZlcl9zdGFja19tYXgpIC0gMSl7Ci0KLQkJLyogSW5jcmVhc2UgdGhlIGJ1
ZmZlciB0byBwcmVwYXJlIGZvciBhIHBvc3NpYmxlIHB1c2guICovCi0JCWludCBncm93X3NpemUg
PSA4IC8qIGFyYml0cmFyeSBncm93IHNpemUgKi87Ci0KLQkJbnVtX3RvX2FsbG9jID0geXlnLT55
eV9idWZmZXJfc3RhY2tfbWF4ICsgZ3Jvd19zaXplOwotCQl5eWctPnl5X2J1ZmZlcl9zdGFjayA9
IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopeXlyZWFsbG9jCi0JCQkJCQkJCSh5eWctPnl5X2J1
ZmZlcl9zdGFjaywKLQkJCQkJCQkJbnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZm
ZXJfc3RhdGUqKQotCQkJCQkJCQksIHl5c2Nhbm5lcik7Ci0JCWlmICggISB5eWctPnl5X2J1ZmZl
cl9zdGFjayApCi0JCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5
eWVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKLQotCQkvKiB6ZXJvIG9ubHkgdGhlIG5ldyBzbG90
cy4qLwotCQltZW1zZXQoeXlnLT55eV9idWZmZXJfc3RhY2sgKyB5eWctPnl5X2J1ZmZlcl9zdGFj
a19tYXgsIDAsIGdyb3dfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikpOwot
CQl5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1fdG9fYWxsb2M7Ci0JfQotfQotCi0vKiog
U2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGRpcmVjdGx5IGZyb20gYSB1c2Vy
LXNwZWNpZmllZCBjaGFyYWN0ZXIgYnVmZmVyLgotICogQHBhcmFtIGJhc2UgdGhlIGNoYXJhY3Rl
ciBidWZmZXIKLSAqIEBwYXJhbSBzaXplIHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBjaGFyYWN0
ZXIgYnVmZmVyCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEBy
ZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LiAKLSAqLwotWVlf
QlVGRkVSX1NUQVRFIHl5X3NjYW5fYnVmZmVyICAoY2hhciAqIGJhc2UsIHl5X3NpemVfdCAgc2l6
ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLQlZWV9CVUZGRVJfU1RBVEUgYjsKLSAgICAKLQlp
ZiAoIHNpemUgPCAyIHx8Ci0JICAgICBiYXNlW3NpemUtMl0gIT0gWVlfRU5EX09GX0JVRkZFUl9D
SEFSIHx8Ci0JICAgICBiYXNlW3NpemUtMV0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSICkKLQkJ
LyogVGhleSBmb3Jnb3QgdG8gbGVhdmUgcm9vbSBmb3IgdGhlIEVPQidzLiAqLwotCQlyZXR1cm4g
MDsKLQotCWIgPSAoWVlfQlVGRkVSX1NUQVRFKSB5eWFsbG9jKHNpemVvZiggc3RydWN0IHl5X2J1
ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKLQlpZiAoICEgYiApCi0JCVlZX0ZBVEFMX0VSUk9S
KCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X3NjYW5fYnVmZmVyKCkiICk7Ci0KLQliLT55
eV9idWZfc2l6ZSA9IHNpemUgLSAyOwkvKiAiLSAyIiB0byB0YWtlIGNhcmUgb2YgRU9CJ3MgKi8K
LQliLT55eV9idWZfcG9zID0gYi0+eXlfY2hfYnVmID0gYmFzZTsKLQliLT55eV9pc19vdXJfYnVm
ZmVyID0gMDsKLQliLT55eV9pbnB1dF9maWxlID0gMDsKLQliLT55eV9uX2NoYXJzID0gYi0+eXlf
YnVmX3NpemU7Ci0JYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAwOwotCWItPnl5X2F0X2JvbCA9IDE7
Ci0JYi0+eXlfZmlsbF9idWZmZXIgPSAwOwotCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZG
RVJfTkVXOwotCi0JeXlfc3dpdGNoX3RvX2J1ZmZlcihiICx5eXNjYW5uZXIgKTsKLQotCXJldHVy
biBiOwotfQotCi0vKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGEgc3Ry
aW5nLiBUaGUgbmV4dCBjYWxsIHRvIHl5bGV4KCkgd2lsbAotICogc2NhbiBmcm9tIGEgQGUgY29w
eSBvZiBAYSBzdHIuCi0gKiBAcGFyYW0geXlzdHIgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgdG8g
c2NhbgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKiBAcmV0dXJu
IHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KLSAqIEBub3RlIElmIHlv
dSB3YW50IHRvIHNjYW4gYnl0ZXMgdGhhdCBtYXkgY29udGFpbiBOVUwgdmFsdWVzLCB0aGVuIHVz
ZQotICogICAgICAgeXlfc2Nhbl9ieXRlcygpIGluc3RlYWQuCi0gKi8KLVlZX0JVRkZFUl9TVEFU
RSB5eV9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICogeXlzdHIgLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCi17Ci0gICAgCi0JcmV0dXJuIHl5X3NjYW5fYnl0ZXMoeXlzdHIsc3RybGVuKHl5c3RyKSAs
eXlzY2FubmVyKTsKLX0KLQotLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2Nh
biB0aGUgZ2l2ZW4gYnl0ZXMuIFRoZSBuZXh0IGNhbGwgdG8geXlsZXgoKSB3aWxsCi0gKiBzY2Fu
IGZyb20gYSBAZSBjb3B5IG9mIEBhIGJ5dGVzLgotICogQHBhcmFtIGJ5dGVzIHRoZSBieXRlIGJ1
ZmZlciB0byBzY2FuCi0gKiBAcGFyYW0gbGVuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1
ZmZlciBwb2ludGVkIHRvIGJ5IEBhIGJ5dGVzLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nh
bm5lciBvYmplY3QuCi0gKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRl
IG9iamVjdC4KLSAqLwotWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNo
YXIgKiB5eWJ5dGVzLCB5eV9zaXplX3QgIF95eWJ5dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKLXsKLQlZWV9CVUZGRVJfU1RBVEUgYjsKLQljaGFyICpidWY7Ci0JeXlfc2l6ZV90IG4sIGk7
Ci0gICAgCi0JLyogR2V0IG1lbW9yeSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBm
b3IgdHJhaWxpbmcgRU9CJ3MuICovCi0JbiA9IF95eWJ5dGVzX2xlbiArIDI7Ci0JYnVmID0gKGNo
YXIgKikgeXlhbGxvYyhuICx5eXNjYW5uZXIgKTsKLQlpZiAoICEgYnVmICkKLQkJWVlfRkFUQUxf
RVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfc2Nhbl9ieXRlcygpIiApOwotCi0J
Zm9yICggaSA9IDA7IGkgPCBfeXlieXRlc19sZW47ICsraSApCi0JCWJ1ZltpXSA9IHl5Ynl0ZXNb
aV07Ci0KLQlidWZbX3l5Ynl0ZXNfbGVuXSA9IGJ1ZltfeXlieXRlc19sZW4rMV0gPSBZWV9FTkRf
T0ZfQlVGRkVSX0NIQVI7Ci0KLQliID0geXlfc2Nhbl9idWZmZXIoYnVmLG4gLHl5c2Nhbm5lcik7
Ci0JaWYgKCAhIGIgKQotCQlZWV9GQVRBTF9FUlJPUiggImJhZCBidWZmZXIgaW4geXlfc2Nhbl9i
eXRlcygpIiApOwotCi0JLyogSXQncyBva2F5IHRvIGdyb3cgZXRjLiB0aGlzIGJ1ZmZlciwgYW5k
IHdlIHNob3VsZCB0aHJvdyBpdAotCSAqIGF3YXkgd2hlbiB3ZSdyZSBkb25lLgotCSAqLwotCWIt
Pnl5X2lzX291cl9idWZmZXIgPSAxOwotCi0JcmV0dXJuIGI7Ci19Ci0KLSNpZm5kZWYgWVlfRVhJ
VF9GQUlMVVJFCi0jZGVmaW5lIFlZX0VYSVRfRkFJTFVSRSAyCi0jZW5kaWYKLQotc3RhdGljIHZv
aWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciogbXNnICwgeXlzY2FuX3QgeXlzY2FubmVy
KQotewotICAgIAkodm9pZCkgZnByaW50Ziggc3RkZXJyLCAiJXNcbiIsIG1zZyApOwotCWV4aXQo
IFlZX0VYSVRfRkFJTFVSRSApOwotfQotCi0vKiBSZWRlZmluZSB5eWxlc3MoKSBzbyBpdCB3b3Jr
cyBpbiBzZWN0aW9uIDMgY29kZS4gKi8KLQotI3VuZGVmIHl5bGVzcwotI2RlZmluZSB5eWxlc3Mo
bikgXAotCWRvIFwKLQkJeyBcCi0JCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4
dC4gKi8gXAotICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAotICAgICAgICBZ
WV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCi0JCXl5dGV4dFt5eWxlbmddID0geXln
LT55eV9ob2xkX2NoYXI7IFwKLQkJeXlnLT55eV9jX2J1Zl9wID0geXl0ZXh0ICsgeXlsZXNzX21h
Y3JvX2FyZzsgXAotCQl5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7IFwKLQkJ
Knl5Zy0+eXlfY19idWZfcCA9ICdcMCc7IFwKLQkJeXlsZW5nID0geXlsZXNzX21hY3JvX2FyZzsg
XAotCQl9IFwKLQl3aGlsZSAoIDAgKQotCi0vKiBBY2Nlc3NvciAgbWV0aG9kcyAoZ2V0L3NldCBm
dW5jdGlvbnMpIHRvIHN0cnVjdCBtZW1iZXJzLiAqLwotCi0vKiogR2V0IHRoZSB1c2VyLWRlZmlu
ZWQgZGF0YSBmb3IgdGhpcyBzY2FubmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5l
ciBvYmplY3QuCi0gKi8KLVlZX0VYVFJBX1RZUEUgeXlnZXRfZXh0cmEgICh5eXNjYW5fdCB5eXNj
YW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOwotICAgIHJldHVybiB5eWV4dHJhOwotfQotCi0vKiogR2V0IHRoZSBjdXJyZW50
IGxpbmUgbnVtYmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0g
Ki8KLWludCB5eWdldF9saW5lbm8gICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIAotICAg
ICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAg
IAotICAgIHJldHVybiB5eWxpbmVubzsKLX0KLQotLyoqIEdldCB0aGUgY3VycmVudCBjb2x1bW4g
bnVtYmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLWlu
dCB5eWdldF9jb2x1bW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIAotICAgICAgICBp
ZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIAotICAg
IHJldHVybiB5eWNvbHVtbjsKLX0KLQotLyoqIEdldCB0aGUgaW5wdXQgc3RyZWFtLgotICogQHBh
cmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLUZJTEUgKnl5Z2V0X2luICAo
eXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlpbjsKLX0KLQotLyoqIEdldCB0
aGUgb3V0cHV0IHN0cmVhbS4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0
LgotICovCi1GSUxFICp5eWdldF9vdXQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJl
dHVybiB5eW91dDsKLX0KLQotLyoqIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50IHRva2Vu
LgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLXl5X3NpemVf
dCB5eWdldF9sZW5nICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlsZW5n
OwotfQotCi0vKiogR2V0IHRoZSBjdXJyZW50IHRva2VuLgotICogQHBhcmFtIHl5c2Nhbm5lciBU
aGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLQotY2hhciAqeXlnZXRfdGV4dCAgKHl5c2Nhbl90IHl5
c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5dGV4dDsKLX0KLQotLyoqIFNldCB0aGUgdXNlci1k
ZWZpbmVkIGRhdGEuIFRoaXMgZGF0YSBpcyBuZXZlciB0b3VjaGVkIGJ5IHRoZSBzY2FubmVyLgot
ICogQHBhcmFtIHVzZXJfZGVmaW5lZCBUaGUgZGF0YSB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhp
cyBzY2FubmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8K
LXZvaWQgeXlzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgIHVzZXJfZGVmaW5lZCAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7Ci0gICAgeXlleHRyYSA9IHVzZXJfZGVmaW5lZCA7Ci19Ci0KLS8qKiBT
ZXQgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIuCi0gKiBAcGFyYW0gbGluZV9udW1iZXIKLSAqIEBw
YXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi12b2lkIHl5c2V0X2xpbmVu
byAoaW50ICBsaW5lX251bWJlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICAgICAg
LyogbGluZW5vIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8KLSAg
ICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICAgICB5eV9mYXRhbF9lcnJv
ciggInl5c2V0X2xpbmVubyBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2FubmVyKTsgCi0g
ICAgCi0gICAgeXlsaW5lbm8gPSBsaW5lX251bWJlcjsKLX0KLQotLyoqIFNldCB0aGUgY3VycmVu
dCBjb2x1bW4uCi0gKiBAcGFyYW0gbGluZV9udW1iZXIKLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhl
IHNjYW5uZXIgb2JqZWN0LgotICovCi12b2lkIHl5c2V0X2NvbHVtbiAoaW50ICBjb2x1bW5fbm8g
LCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgICAgIC8qIGNvbHVtbiBpcyBvbmx5IHZh
bGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCi0gICAgICAgIGlmICghIFlZX0NVUlJF
TlRfQlVGRkVSICkKLSAgICAgICAgICAgeXlfZmF0YWxfZXJyb3IoICJ5eXNldF9jb2x1bW4gY2Fs
bGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5lcik7IAotICAgIAotICAgIHl5Y29sdW1uID0g
Y29sdW1uX25vOwotfQotCi0vKiogU2V0IHRoZSBpbnB1dCBzdHJlYW0uIFRoaXMgZG9lcyBub3Qg
ZGlzY2FyZCB0aGUgY3VycmVudAotICogaW5wdXQgYnVmZmVyLgotICogQHBhcmFtIGluX3N0ciBB
IHJlYWRhYmxlIHN0cmVhbS4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0
LgotICogQHNlZSB5eV9zd2l0Y2hfdG9fYnVmZmVyCi0gKi8KLXZvaWQgeXlzZXRfaW4gKEZJTEUg
KiAgaW5fc3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eWluID0gaW5fc3RyIDsK
LX0KLQotdm9pZCB5eXNldF9vdXQgKEZJTEUgKiAgb3V0X3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7Ci0gICAgeXlvdXQgPSBvdXRfc3RyIDsKLX0KLQotaW50IHl5Z2V0X2RlYnVnICAoeXlz
Y2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlfZmxleF9kZWJ1ZzsKLX0KLQotdm9p
ZCB5eXNldF9kZWJ1ZyAoaW50ICBiZGVidWcgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAg
IHl5X2ZsZXhfZGVidWcgPSBiZGVidWcgOwotfQotCi0vKiBBY2Nlc3NvciBtZXRob2RzIGZvciB5
eWx2YWwgYW5kIHl5bGxvYyAqLwotCi1ZWVNUWVBFICogeXlnZXRfbHZhbCAgKHl5c2Nhbl90IHl5
c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5bHZhbDsKLX0KLQotdm9pZCB5eXNldF9sdmFsIChZ
WVNUWVBFICogIHl5bHZhbF9wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1
Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXls
dmFsID0geXlsdmFsX3BhcmFtOwotfQotCi1ZWUxUWVBFICp5eWdldF9sbG9jICAoeXlzY2FuX3Qg
eXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlsbG9jOwotfQotICAgIAotdm9pZCB5eXNldF9s
bG9jIChZWUxUWVBFICogIHl5bGxvY19wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0g
ICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOwotfQotICAgIAotLyogVXNlci12aXNpYmxlIEFQSSAq
LwotCi0vKiB5eWxleF9pbml0IGlzIHNwZWNpYWwgYmVjYXVzZSBpdCBjcmVhdGVzIHRoZSBzY2Fu
bmVyIGl0c2VsZiwgc28gaXQgaXMKLSAqIHRoZSBPTkxZIHJlZW50cmFudCBmdW5jdGlvbiB0aGF0
IGRvZXNuJ3QgdGFrZSB0aGUgc2Nhbm5lciBhcyB0aGUgbGFzdCBhcmd1bWVudC4KLSAqIFRoYXQn
cyB3aHkgd2UgZXhwbGljaXRseSBoYW5kbGUgdGhlIGRlY2xhcmF0aW9uLCBpbnN0ZWFkIG9mIHVz
aW5nIG91ciBtYWNyb3MuCi0gKi8KLQotaW50IHl5bGV4X2luaXQoeXlzY2FuX3QqIHB0cl95eV9n
bG9iYWxzKQotCi17Ci0gICAgaWYgKHB0cl95eV9nbG9iYWxzID09IE5VTEwpewotICAgICAgICBl
cnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgKnB0cl95eV9n
bG9iYWxzID0gKHl5c2Nhbl90KSB5eWFsbG9jICggc2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3QgKSwg
TlVMTCApOwotCi0gICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKLSAgICAgICAgZXJy
bm8gPSBFTk9NRU07Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIC8qIEJ5IHNldHRp
bmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4geXlfaW5pdF9nbG9iYWxzLiBMZWF2ZSBhdCAw
eDAwIGZvciByZWxlYXNlcy4gKi8KLSAgICBtZW1zZXQoKnB0cl95eV9nbG9iYWxzLDB4MDAsc2l6
ZW9mKHN0cnVjdCB5eWd1dHNfdCkpOwotCi0gICAgcmV0dXJuIHl5X2luaXRfZ2xvYmFscyAoICpw
dHJfeXlfZ2xvYmFscyApOwotfQotCi0vKiB5eWxleF9pbml0X2V4dHJhIGhhcyB0aGUgc2FtZSBm
dW5jdGlvbmFsaXR5IGFzIHl5bGV4X2luaXQsIGJ1dCBmb2xsb3dzIHRoZQotICogY29udmVudGlv
biBvZiB0YWtpbmcgdGhlIHNjYW5uZXIgYXMgdGhlIGxhc3QgYXJndW1lbnQuIE5vdGUgaG93ZXZl
ciwgdGhhdAotICogdGhpcyBpcyBhICpwb2ludGVyKiB0byBhIHNjYW5uZXIsIGFzIGl0IHdpbGwg
YmUgYWxsb2NhdGVkIGJ5IHRoaXMgY2FsbCAoYW5kCi0gKiBpcyB0aGUgcmVhc29uLCB0b28sIHdo
eSB0aGlzIGZ1bmN0aW9uIGFsc28gbXVzdCBoYW5kbGUgaXRzIG93biBkZWNsYXJhdGlvbikuCi0g
KiBUaGUgdXNlciBkZWZpbmVkIHZhbHVlIGluIHRoZSBmaXJzdCBhcmd1bWVudCB3aWxsIGJlIGF2
YWlsYWJsZSB0byB5eWFsbG9jIGluCi0gKiB0aGUgeXlleHRyYSBmaWVsZC4KLSAqLwotCi1pbnQg
eXlsZXhfaW5pdF9leHRyYShZWV9FWFRSQV9UWVBFIHl5X3VzZXJfZGVmaW5lZCx5eXNjYW5fdCog
cHRyX3l5X2dsb2JhbHMgKQotCi17Ci0gICAgc3RydWN0IHl5Z3V0c190IGR1bW15X3l5Z3V0czsK
LQotICAgIHl5c2V0X2V4dHJhICh5eV91c2VyX2RlZmluZWQsICZkdW1teV95eWd1dHMpOwotCi0g
ICAgaWYgKHB0cl95eV9nbG9iYWxzID09IE5VTEwpewotICAgICAgICBlcnJubyA9IEVJTlZBTDsK
LSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCQotICAgICpwdHJfeXlfZ2xvYmFscyA9ICh5eXNj
YW5fdCkgeXlhbGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0c190ICksICZkdW1teV95eWd1dHMg
KTsKLQkKLSAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwpewotICAgICAgICBlcnJubyA9
IEVOT01FTTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIAotICAgIC8qIEJ5IHNldHRp
bmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4KLSAgICB5eV9pbml0X2dsb2JhbHMuIExlYXZl
IGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLwotICAgIG1lbXNldCgqcHRyX3l5X2dsb2JhbHMsMHgw
MCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7Ci0gICAgCi0gICAgeXlzZXRfZXh0cmEgKHl5X3Vz
ZXJfZGVmaW5lZCwgKnB0cl95eV9nbG9iYWxzKTsKLSAgICAKLSAgICByZXR1cm4geXlfaW5pdF9n
bG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7Ci19Ci0KLXN0YXRpYyBpbnQgeXlfaW5pdF9nbG9i
YWxzICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIC8qIEluaXRpYWxpemF0aW9uIGlzIHRo
ZSBzYW1lIGFzIGZvciB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLgotICAgICAqIFRoaXMgZnVu
Y3Rpb24gaXMgY2FsbGVkIGZyb20geXlsZXhfZGVzdHJveSgpLCBzbyBkb24ndCBhbGxvY2F0ZSBo
ZXJlLgotICAgICAqLwotCi0gICAgeXlnLT55eV9idWZmZXJfc3RhY2sgPSAwOwotICAgIHl5Zy0+
eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7Ci0gICAgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0g
MDsKLSAgICB5eWctPnl5X2NfYnVmX3AgPSAoY2hhciAqKSAwOwotICAgIHl5Zy0+eXlfaW5pdCA9
IDA7Ci0gICAgeXlnLT55eV9zdGFydCA9IDA7Ci0KLSAgICB5eWctPnl5X3N0YXJ0X3N0YWNrX3B0
ciA9IDA7Ci0gICAgeXlnLT55eV9zdGFydF9zdGFja19kZXB0aCA9IDA7Ci0gICAgeXlnLT55eV9z
dGFydF9zdGFjayA9ICBOVUxMOwotCi0vKiBEZWZpbmVkIGluIG1haW4uYyAqLwotI2lmZGVmIFlZ
X1NURElOSVQKLSAgICB5eWluID0gc3RkaW47Ci0gICAgeXlvdXQgPSBzdGRvdXQ7Ci0jZWxzZQot
ICAgIHl5aW4gPSAoRklMRSAqKSAwOwotICAgIHl5b3V0ID0gKEZJTEUgKikgMDsKLSNlbmRpZgot
Ci0gICAgLyogRm9yIGZ1dHVyZSByZWZlcmVuY2U6IFNldCBlcnJubyBvbiBlcnJvciwgc2luY2Ug
d2UgYXJlIGNhbGxlZCBieQotICAgICAqIHl5bGV4X2luaXQoKQotICAgICAqLwotICAgIHJldHVy
biAwOwotfQotCi0vKiB5eWxleF9kZXN0cm95IGlzIGZvciBib3RoIHJlZW50cmFudCBhbmQgbm9u
LXJlZW50cmFudCBzY2FubmVycy4gKi8KLWludCB5eWxleF9kZXN0cm95ICAoeXlzY2FuX3QgeXlz
Y2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsKLQotICAgIC8qIFBvcCB0aGUgYnVmZmVyIHN0YWNrLCBkZXN0cm95aW5nIGVh
Y2ggZWxlbWVudC4gKi8KLQl3aGlsZShZWV9DVVJSRU5UX0JVRkZFUil7Ci0JCXl5X2RlbGV0ZV9i
dWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lciApOwotCQlZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUgPSBOVUxMOwotCQl5eXBvcF9idWZmZXJfc3RhdGUoeXlzY2FubmVyKTsKLQl9Ci0K
LQkvKiBEZXN0cm95IHRoZSBzdGFjayBpdHNlbGYuICovCi0JeXlmcmVlKHl5Zy0+eXlfYnVmZmVy
X3N0YWNrICx5eXNjYW5uZXIpOwotCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gTlVMTDsKLQotICAg
IC8qIERlc3Ryb3kgdGhlIHN0YXJ0IGNvbmRpdGlvbiBzdGFjay4gKi8KLSAgICAgICAgeXlmcmVl
KHl5Zy0+eXlfc3RhcnRfc3RhY2sgLHl5c2Nhbm5lciApOwotICAgICAgICB5eWctPnl5X3N0YXJ0
X3N0YWNrID0gTlVMTDsKLQotICAgIC8qIFJlc2V0IHRoZSBnbG9iYWxzLiBUaGlzIGlzIGltcG9y
dGFudCBpbiBhIG5vbi1yZWVudHJhbnQgc2Nhbm5lciBzbyB0aGUgbmV4dCB0aW1lCi0gICAgICog
eXlsZXgoKSBpcyBjYWxsZWQsIGluaXRpYWxpemF0aW9uIHdpbGwgb2NjdXIuICovCi0gICAgeXlf
aW5pdF9nbG9iYWxzKCB5eXNjYW5uZXIpOwotCi0gICAgLyogRGVzdHJveSB0aGUgbWFpbiBzdHJ1
Y3QgKHJlZW50cmFudCBvbmx5KS4gKi8KLSAgICB5eWZyZWUgKCB5eXNjYW5uZXIgLCB5eXNjYW5u
ZXIgKTsKLSAgICB5eXNjYW5uZXIgPSBOVUxMOwotICAgIHJldHVybiAwOwotfQotCi0vKgotICog
SW50ZXJuYWwgdXRpbGl0eSByb3V0aW5lcy4KLSAqLwotCi0jaWZuZGVmIHl5dGV4dF9wdHIKLXN0
YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciogczEsIHl5Y29uc3QgY2hhciAqIHMyLCBp
bnQgbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLQlyZWdpc3RlciBpbnQgaTsKLQlmb3IgKCBp
ID0gMDsgaSA8IG47ICsraSApCi0JCXMxW2ldID0gczJbaV07Ci19Ci0jZW5kaWYKLQotI2lmZGVm
IFlZX05FRURfU1RSTEVOCi1zdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIg
KiBzICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotCXJlZ2lzdGVyIGludCBuOwotCWZvciAoIG4g
PSAwOyBzW25dOyArK24gKQotCQk7Ci0KLQlyZXR1cm4gbjsKLX0KLSNlbmRpZgotCi12b2lkICp5
eWFsbG9jICh5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0JcmV0dXJu
ICh2b2lkICopIG1hbGxvYyggc2l6ZSApOwotfQotCi12b2lkICp5eXJlYWxsb2MgICh2b2lkICog
cHRyLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0JLyogVGhlIGNh
c3QgdG8gKGNoYXIgKikgaW4gdGhlIGZvbGxvd2luZyBhY2NvbW1vZGF0ZXMgYm90aAotCSAqIGlt
cGxlbWVudGF0aW9ucyB0aGF0IHVzZSBjaGFyKiBnZW5lcmljIHBvaW50ZXJzLCBhbmQgdGhvc2UK
LQkgKiB0aGF0IHVzZSB2b2lkKiBnZW5lcmljIHBvaW50ZXJzLiAgSXQgd29ya3Mgd2l0aCB0aGUg
bGF0dGVyCi0JICogYmVjYXVzZSBib3RoIEFOU0kgQyBhbmQgQysrIGFsbG93IGNhc3RsZXNzIGFz
c2lnbm1lbnQgZnJvbQotCSAqIGFueSBwb2ludGVyIHR5cGUgdG8gdm9pZCosIGFuZCBkZWFsIHdp
dGggYXJndW1lbnQgY29udmVyc2lvbnMKLQkgKiBhcyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVu
dC4KLQkgKi8KLQlyZXR1cm4gKHZvaWQgKikgcmVhbGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7
Ci19Ci0KLXZvaWQgeXlmcmVlICh2b2lkICogcHRyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewot
CWZyZWUoIChjaGFyICopIHB0ciApOwkvKiBzZWUgeXlyZWFsbG9jKCkgZm9yIChjaGFyICopIGNh
c3QgKi8KLX0KLQotI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyIKLQotI2lmIGRlZmlu
ZWQoX19jbGFuZ19fKQotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAotI2VuZGlmCi0KLXl5
X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCB5eV9zaXplX3QgbWF4X3NpemUsIHl5c2Nh
bl90IHl5c2Nhbm5lcikgewotICAgIHBwOjpUb2tlbiB0b2tlbjsKLSAgICB5eWdldF9leHRyYSh5
eXNjYW5uZXIpLT5wcmVwcm9jZXNzb3IubGV4KCZ0b2tlbik7Ci0gICAgeXlfc2l6ZV90IGxlbiA9
IHRva2VuLnR5cGUgPT0gcHA6OlRva2VuOjpMQVNUID8gMCA6IHRva2VuLnRleHQuc2l6ZSgpOwot
ICAgIGlmIChsZW4gPCBtYXhfc2l6ZSkKLSAgICAgICAgbWVtY3B5KGJ1ZiwgdG9rZW4udGV4dC5j
X3N0cigpLCBsZW4pOwotICAgIHl5c2V0X2NvbHVtbih0b2tlbi5sb2NhdGlvbi5maWxlLHl5c2Nh
bm5lcik7Ci0gICAgeXlzZXRfbGluZW5vKHRva2VuLmxvY2F0aW9uLmxpbmUseXlzY2FubmVyKTsK
LQotICAgIGlmIChsZW4gPj0gbWF4X3NpemUpCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCJJbnB1
dCBidWZmZXIgb3ZlcmZsb3ciKTsKLSAgICBlbHNlIGlmIChsZW4gPiAwKQotICAgICAgICBidWZb
bGVuKytdID0gJyAnOwotICAgIHJldHVybiBsZW47Ci19Ci0KLWludCBjaGVja190eXBlKHl5c2Nh
bl90IHl5c2Nhbm5lcikgewotICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopIHl5c2Nhbm5lcjsKLSAgICAKLSAgICBpbnQgdG9rZW4gPSBJREVOVElGSUVSOwotICAg
IFRTeW1ib2wqIHN5bWJvbCA9IHl5ZXh0cmEtPnN5bWJvbFRhYmxlLmZpbmQoeXl0ZXh0KTsKLSAg
ICBpZiAoc3ltYm9sICYmIHN5bWJvbC0+aXNWYXJpYWJsZSgpKSB7Ci0gICAgICAgIFRWYXJpYWJs
ZSogdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPihzeW1ib2wpOwotICAgICAgICBp
ZiAodmFyaWFibGUtPmlzVXNlclR5cGUoKSkKLSAgICAgICAgICAgIHRva2VuID0gVFlQRV9OQU1F
OwotICAgIH0KLSAgICB5eWx2YWwtPmxleC5zeW1ib2wgPSBzeW1ib2w7Ci0gICAgcmV0dXJuIHRv
a2VuOwotfQotCi1pbnQgcmVzZXJ2ZWRfd29yZCh5eXNjYW5fdCB5eXNjYW5uZXIpIHsKLSAgICBz
dHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSB5eXNjYW5uZXI7Ci0KLSAg
ICB5eWV4dHJhLT5lcnJvcigqeXlsbG9jLCAiSWxsZWdhbCB1c2Ugb2YgcmVzZXJ2ZWQgd29yZCIs
IHl5dGV4dCwgIiIpOwotICAgIHl5ZXh0cmEtPnJlY292ZXIoKTsKLSAgICByZXR1cm4gMDsKLX0K
LQotdm9pZCB5eWVycm9yKFlZTFRZUEUqIGxsb2MsIFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNv
bnN0IGNoYXIqIHJlYXNvbikgewotICAgIGNvbnRleHQtPmVycm9yKCpsbG9jLCByZWFzb24sIHl5
Z2V0X3RleHQoY29udGV4dC0+c2Nhbm5lcikpOwotICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLX0K
LQotaW50IGludF9jb25zdGFudCh5eXNjYW5fdCB5eXNjYW5uZXIpIHsKLSAgICBzdHJ1Y3QgeXln
dXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSB5eXNjYW5uZXI7Ci0KLSAgICBpZiAoIWF0
b2lfY2xhbXAoeXl0ZXh0LCAmKHl5bHZhbC0+bGV4LmkpKSkKLSAgICAgICAgeXlleHRyYS0+d2Fy
bmluZygqeXlsbG9jLCAiSW50ZWdlciBvdmVyZmxvdyIsIHl5dGV4dCwgIiIpOwotICAgIHJldHVy
biBJTlRDT05TVEFOVDsKLX0KLQotaW50IGZsb2F0X2NvbnN0YW50KHl5c2Nhbl90IHl5c2Nhbm5l
cikgewotICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIHl5c2Nh
bm5lcjsKLQotICAgIGlmICghYXRvZl9jbGFtcCh5eXRleHQsICYoeXlsdmFsLT5sZXguZikpKQot
ICAgICAgICB5eWV4dHJhLT53YXJuaW5nKCp5eWxsb2MsICJGbG9hdCBvdmVyZmxvdyIsIHl5dGV4
dCwgIiIpOwotICAgIHJldHVybiBGTE9BVENPTlNUQU5UOwotfQotCi1pbnQgZ2xzbGFuZ19pbml0
aWFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKLSAgICB5eXNjYW5fdCBzY2FubmVyID0g
TlVMTDsKLSAgICBpZiAoeXlsZXhfaW5pdF9leHRyYShjb250ZXh0LCZzY2FubmVyKSkKLSAgICAg
ICAgcmV0dXJuIDE7Ci0KLSAgICBjb250ZXh0LT5zY2FubmVyID0gc2Nhbm5lcjsKLSAgICByZXR1
cm4gMDsKLX0KLQotaW50IGdsc2xhbmdfZmluYWxpemUoVFBhcnNlQ29udGV4dCogY29udGV4dCkg
ewotICAgIHl5c2Nhbl90IHNjYW5uZXIgPSBjb250ZXh0LT5zY2FubmVyOwotICAgIGlmIChzY2Fu
bmVyID09IE5VTEwpIHJldHVybiAwOwotICAgIAotICAgIGNvbnRleHQtPnNjYW5uZXIgPSBOVUxM
OwotICAgIHl5bGV4X2Rlc3Ryb3koc2Nhbm5lcik7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotaW50
IGdsc2xhbmdfc2NhbihzaXplX3QgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBj
b25zdCBpbnQgbGVuZ3RoW10sCi0gICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRl
eHQpIHsKLSAgICB5eXJlc3RhcnQoTlVMTCxjb250ZXh0LT5zY2FubmVyKTsKLSAgICB5eXNldF9j
b2x1bW4oMCxjb250ZXh0LT5zY2FubmVyKTsKLSAgICB5eXNldF9saW5lbm8oMSxjb250ZXh0LT5z
Y2FubmVyKTsKLQotICAgIC8vIEluaXRpYWxpemUgcHJlcHJvY2Vzc29yLgotICAgIGlmICghY29u
dGV4dC0+cHJlcHJvY2Vzc29yLmluaXQoY291bnQsIHN0cmluZywgbGVuZ3RoKSkKLSAgICAgICAg
cmV0dXJuIDE7Ci0gICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnNldE1heFRva2VuTGVuZ3RoKFNI
X01BWF9UT0tFTl9MRU5HVEgpOwotCi0gICAgLy8gRGVmaW5lIGV4dGVuc2lvbiBtYWNyb3MuCi0g
ICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciA9IGNvbnRleHQtPmV4dGVu
c2lvbkJlaGF2aW9yKCk7Ci0gICAgZm9yIChURXh0ZW5zaW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJh
dG9yIGl0ZXIgPSBleHRCZWhhdmlvci5iZWdpbigpOwotICAgICAgICAgaXRlciAhPSBleHRCZWhh
dmlvci5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGNvbnRleHQtPnByZXByb2Nlc3Nvci5wcmVk
ZWZpbmVNYWNybyhpdGVyLT5maXJzdC5jX3N0cigpLCAxKTsKLSAgICB9Ci0gICAgaWYgKGNvbnRl
eHQtPmZyYWdtZW50UHJlY2lzaW9uSGlnaCkKLSAgICAgICAgY29udGV4dC0+cHJlcHJvY2Vzc29y
LnByZWRlZmluZU1hY3JvKCJHTF9GUkFHTUVOVF9QUkVDSVNJT05fSElHSCIsIDEpOwotCi0gICAg
cmV0dXJuIDA7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9nbHNsYW5nX3RhYi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvZ2xzbGFuZ190YWIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTdi
MmM3MTE3MGE4YjQ3YmY0ZGYwODdhOWRiYTNhMGU2ZjUxN2E1Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9nbHNsYW5nX3RhYi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0ODcyICswLDAgQEAK
LS8qIEFwcGxlIE5vdGU6IEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBBcHBsZSBlbGVjdHMg
dG8gZGlzdHJpYnV0ZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBCU0QgbGljZW5z
ZS4gKi8KLQotLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuNy4gICovCi0K
LS8qIEJpc29uIGltcGxlbWVudGF0aW9uIGZvciBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCi0gICAK
LSAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAyMDAwLTIwMTIgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0gICAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3
YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0
aGUgTGljZW5zZSwgb3IKLSAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
ICAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gICAKLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRo
IHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv
Pi4gICovCi0KLS8qIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgY3JlYXRlIGEgbGFy
Z2VyIHdvcmsgdGhhdCBjb250YWlucwotICAgcGFydCBvciBhbGwgb2YgdGhlIEJpc29uIHBhcnNl
ciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKLSAgIHVuZGVyIHRlcm1zIG9mIHlv
dXIgY2hvaWNlLCBzbyBsb25nIGFzIHRoYXQgd29yayBpc24ndCBpdHNlbGYgYQotICAgcGFyc2Vy
IGdlbmVyYXRvciB1c2luZyB0aGUgc2tlbGV0b24gb3IgYSBtb2RpZmllZCB2ZXJzaW9uIHRoZXJl
b2YKLSAgIGFzIGEgcGFyc2VyIHNrZWxldG9uLiAgQWx0ZXJuYXRpdmVseSwgaWYgeW91IG1vZGlm
eSBvciByZWRpc3RyaWJ1dGUKLSAgIHRoZSBwYXJzZXIgc2tlbGV0b24gaXRzZWxmLCB5b3UgbWF5
IChhdCB5b3VyIG9wdGlvbikgcmVtb3ZlIHRoaXMKLSAgIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGlj
aCB3aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQgdGhlIHJlc3VsdGluZwotICAgQmlzb24gb3V0
cHV0IGZpbGVzIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAg
IExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uLgotICAgCi0gICBUaGlzIHNw
ZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
IGluCi0gICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICovCi0KLS8qIEMgTEFMUigxKSBwYXJzZXIg
c2tlbGV0b24gd3JpdHRlbiBieSBSaWNoYXJkIFN0YWxsbWFuLCBieQotICAgc2ltcGxpZnlpbmcg
dGhlIG9yaWdpbmFsIHNvLWNhbGxlZCAic2VtYW50aWMiIHBhcnNlci4gICovCi0KLS8qIEFsbCBz
eW1ib2xzIGRlZmluZWQgYmVsb3cgc2hvdWxkIGJlZ2luIHdpdGggeXkgb3IgWVksIHRvIGF2b2lk
Ci0gICBpbmZyaW5naW5nIG9uIHVzZXIgbmFtZSBzcGFjZS4gIFRoaXMgc2hvdWxkIGJlIGRvbmUg
ZXZlbiBmb3IgbG9jYWwKLSAgIHZhcmlhYmxlcywgYXMgdGhleSBtaWdodCBvdGhlcndpc2UgYmUg
ZXhwYW5kZWQgYnkgdXNlciBtYWNyb3MuCi0gICBUaGVyZSBhcmUgc29tZSB1bmF2b2lkYWJsZSBl
eGNlcHRpb25zIHdpdGhpbiBpbmNsdWRlIGZpbGVzIHRvCi0gICBkZWZpbmUgbmVjZXNzYXJ5IGxp
YnJhcnkgc3ltYm9sczsgdGhleSBhcmUgbm90ZWQgIklORlJJTkdFUyBPTgotICAgVVNFUiBOQU1F
IFNQQUNFIiBiZWxvdy4gICovCi0KLS8qIElkZW50aWZ5IEJpc29uIG91dHB1dC4gICovCi0jZGVm
aW5lIFlZQklTT04gMQotCi0vKiBCaXNvbiB2ZXJzaW9uLiAgKi8KLSNkZWZpbmUgWVlCSVNPTl9W
RVJTSU9OICIyLjciCi0KLS8qIFNrZWxldG9uIG5hbWUuICAqLwotI2RlZmluZSBZWVNLRUxFVE9O
X05BTUUgInlhY2MuYyIKLQotLyogUHVyZSBwYXJzZXJzLiAgKi8KLSNkZWZpbmUgWVlQVVJFIDEK
LQotLyogUHVzaCBwYXJzZXJzLiAgKi8KLSNkZWZpbmUgWVlQVVNIIDAKLQotLyogUHVsbCBwYXJz
ZXJzLiAgKi8KLSNkZWZpbmUgWVlQVUxMIDEKLQotCi0KLQotLyogQ29weSB0aGUgZmlyc3QgcGFy
dCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCi0KLQotLy8KLS8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8g
VGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9U
IEVESVQhCi0KLS8vIElnbm9yZSBlcnJvcnMgaW4gYXV0by1nZW5lcmF0ZWQgY29kZS4KLSNpZiBk
ZWZpbmVkKF9fR05VQ19fKQotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNl
ZC1mdW5jdGlvbiIKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtdmFy
aWFibGUiCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc3dpdGNoLWVudW0iCi0j
ZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQwNjUpCi0j
cHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDE4OSkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0
NTA1KQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEpCi0jZW5kaWYKLQotI2luY2x1ZGUg
ImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VDb250ZXh0
LmgiCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCi0KLSNkZWZpbmUgWVlFTkFCTEVf
TkxTIDAKLQotI2RlZmluZSBZWUxFWF9QQVJBTSBjb250ZXh0LT5zY2FubmVyCi0KLQotCi0jIGlm
bmRlZiBZWV9OVUxMCi0jICBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIDIwMTEwM0wgPD0gX19j
cGx1c3BsdXMKLSMgICBkZWZpbmUgWVlfTlVMTCBudWxscHRyCi0jICBlbHNlCi0jICAgZGVmaW5l
IFlZX05VTEwgMAotIyAgZW5kaWYKLSMgZW5kaWYKLQotLyogRW5hYmxpbmcgdmVyYm9zZSBlcnJv
ciBtZXNzYWdlcy4gICovCi0jaWZkZWYgWVlFUlJPUl9WRVJCT1NFCi0jIHVuZGVmIFlZRVJST1Jf
VkVSQk9TRQotIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEKLSNlbHNlCi0jIGRlZmluZSBZWUVS
Uk9SX1ZFUkJPU0UgMAotI2VuZGlmCi0KLS8qIEluIGEgZnV0dXJlIHJlbGVhc2Ugb2YgQmlzb24s
IHRoaXMgc2VjdGlvbiB3aWxsIGJlIHJlcGxhY2VkCi0gICBieSAjaW5jbHVkZSAiZ2xzbGFuZ190
YWIuaCIuICAqLwotI2lmbmRlZiBZWV9ZWV9HTFNMQU5HX1RBQl9IX0lOQ0xVREVECi0jIGRlZmlu
ZSBZWV9ZWV9HTFNMQU5HX1RBQl9IX0lOQ0xVREVECi0vKiBFbmFibGluZyB0cmFjZXMuICAqLwot
I2lmbmRlZiBZWURFQlVHCi0jIGRlZmluZSBZWURFQlVHIDAKLSNlbmRpZgotI2lmIFlZREVCVUcK
LWV4dGVybiBpbnQgeXlkZWJ1ZzsKLSNlbmRpZgotLyogIiVjb2RlIHJlcXVpcmVzIiBibG9ja3Mu
ICAqLwotCi0KLSNkZWZpbmUgWVlMVFlQRSBUU291cmNlTG9jCi0jZGVmaW5lIFlZTFRZUEVfSVNf
REVDTEFSRUQgMQotI2RlZmluZSBTSF9NQVhfVE9LRU5fTEVOR1RIIDI1NiAgLy8gV2ViR0wgc3Bl
Yy4KLQotCi0KLQotLyogVG9rZW5zLiAgKi8KLSNpZm5kZWYgWVlUT0tFTlRZUEUKLSMgZGVmaW5l
IFlZVE9LRU5UWVBFCi0gICAvKiBQdXQgdGhlIHRva2VucyBpbnRvIHRoZSBzeW1ib2wgdGFibGUs
IHNvIHRoYXQgR0RCIGFuZCBvdGhlciBkZWJ1Z2dlcnMKLSAgICAgIGtub3cgYWJvdXQgdGhlbS4g
ICovCi0gICBlbnVtIHl5dG9rZW50eXBlIHsKLSAgICAgSU5WQVJJQU5UID0gMjU4LAotICAgICBI
SUdIX1BSRUNJU0lPTiA9IDI1OSwKLSAgICAgTUVESVVNX1BSRUNJU0lPTiA9IDI2MCwKLSAgICAg
TE9XX1BSRUNJU0lPTiA9IDI2MSwKLSAgICAgUFJFQ0lTSU9OID0gMjYyLAotICAgICBBVFRSSUJV
VEUgPSAyNjMsCi0gICAgIENPTlNUX1FVQUwgPSAyNjQsCi0gICAgIEJPT0xfVFlQRSA9IDI2NSwK
LSAgICAgRkxPQVRfVFlQRSA9IDI2NiwKLSAgICAgSU5UX1RZUEUgPSAyNjcsCi0gICAgIEJSRUFL
ID0gMjY4LAotICAgICBDT05USU5VRSA9IDI2OSwKLSAgICAgRE8gPSAyNzAsCi0gICAgIEVMU0Ug
PSAyNzEsCi0gICAgIEZPUiA9IDI3MiwKLSAgICAgSUYgPSAyNzMsCi0gICAgIERJU0NBUkQgPSAy
NzQsCi0gICAgIFJFVFVSTiA9IDI3NSwKLSAgICAgQlZFQzIgPSAyNzYsCi0gICAgIEJWRUMzID0g
Mjc3LAotICAgICBCVkVDNCA9IDI3OCwKLSAgICAgSVZFQzIgPSAyNzksCi0gICAgIElWRUMzID0g
MjgwLAotICAgICBJVkVDNCA9IDI4MSwKLSAgICAgVkVDMiA9IDI4MiwKLSAgICAgVkVDMyA9IDI4
MywKLSAgICAgVkVDNCA9IDI4NCwKLSAgICAgTUFUUklYMiA9IDI4NSwKLSAgICAgTUFUUklYMyA9
IDI4NiwKLSAgICAgTUFUUklYNCA9IDI4NywKLSAgICAgSU5fUVVBTCA9IDI4OCwKLSAgICAgT1VU
X1FVQUwgPSAyODksCi0gICAgIElOT1VUX1FVQUwgPSAyOTAsCi0gICAgIFVOSUZPUk0gPSAyOTEs
Ci0gICAgIFZBUllJTkcgPSAyOTIsCi0gICAgIFNUUlVDVCA9IDI5MywKLSAgICAgVk9JRF9UWVBF
ID0gMjk0LAotICAgICBXSElMRSA9IDI5NSwKLSAgICAgU0FNUExFUjJEID0gMjk2LAotICAgICBT
QU1QTEVSQ1VCRSA9IDI5NywKLSAgICAgU0FNUExFUl9FWFRFUk5BTF9PRVMgPSAyOTgsCi0gICAg
IFNBTVBMRVIyRFJFQ1QgPSAyOTksCi0gICAgIElERU5USUZJRVIgPSAzMDAsCi0gICAgIFRZUEVf
TkFNRSA9IDMwMSwKLSAgICAgRkxPQVRDT05TVEFOVCA9IDMwMiwKLSAgICAgSU5UQ09OU1RBTlQg
PSAzMDMsCi0gICAgIEJPT0xDT05TVEFOVCA9IDMwNCwKLSAgICAgTEVGVF9PUCA9IDMwNSwKLSAg
ICAgUklHSFRfT1AgPSAzMDYsCi0gICAgIElOQ19PUCA9IDMwNywKLSAgICAgREVDX09QID0gMzA4
LAotICAgICBMRV9PUCA9IDMwOSwKLSAgICAgR0VfT1AgPSAzMTAsCi0gICAgIEVRX09QID0gMzEx
LAotICAgICBORV9PUCA9IDMxMiwKLSAgICAgQU5EX09QID0gMzEzLAotICAgICBPUl9PUCA9IDMx
NCwKLSAgICAgWE9SX09QID0gMzE1LAotICAgICBNVUxfQVNTSUdOID0gMzE2LAotICAgICBESVZf
QVNTSUdOID0gMzE3LAotICAgICBBRERfQVNTSUdOID0gMzE4LAotICAgICBNT0RfQVNTSUdOID0g
MzE5LAotICAgICBMRUZUX0FTU0lHTiA9IDMyMCwKLSAgICAgUklHSFRfQVNTSUdOID0gMzIxLAot
ICAgICBBTkRfQVNTSUdOID0gMzIyLAotICAgICBYT1JfQVNTSUdOID0gMzIzLAotICAgICBPUl9B
U1NJR04gPSAzMjQsCi0gICAgIFNVQl9BU1NJR04gPSAzMjUsCi0gICAgIExFRlRfUEFSRU4gPSAz
MjYsCi0gICAgIFJJR0hUX1BBUkVOID0gMzI3LAotICAgICBMRUZUX0JSQUNLRVQgPSAzMjgsCi0g
ICAgIFJJR0hUX0JSQUNLRVQgPSAzMjksCi0gICAgIExFRlRfQlJBQ0UgPSAzMzAsCi0gICAgIFJJ
R0hUX0JSQUNFID0gMzMxLAotICAgICBET1QgPSAzMzIsCi0gICAgIENPTU1BID0gMzMzLAotICAg
ICBDT0xPTiA9IDMzNCwKLSAgICAgRVFVQUwgPSAzMzUsCi0gICAgIFNFTUlDT0xPTiA9IDMzNiwK
LSAgICAgQkFORyA9IDMzNywKLSAgICAgREFTSCA9IDMzOCwKLSAgICAgVElMREUgPSAzMzksCi0g
ICAgIFBMVVMgPSAzNDAsCi0gICAgIFNUQVIgPSAzNDEsCi0gICAgIFNMQVNIID0gMzQyLAotICAg
ICBQRVJDRU5UID0gMzQzLAotICAgICBMRUZUX0FOR0xFID0gMzQ0LAotICAgICBSSUdIVF9BTkdM
RSA9IDM0NSwKLSAgICAgVkVSVElDQUxfQkFSID0gMzQ2LAotICAgICBDQVJFVCA9IDM0NywKLSAg
ICAgQU1QRVJTQU5EID0gMzQ4LAotICAgICBRVUVTVElPTiA9IDM0OQotICAgfTsKLSNlbmRpZgot
Ci0KLSNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJF
RAotdHlwZWRlZiB1bmlvbiBZWVNUWVBFCi17Ci0KLQotICAgIHN0cnVjdCB7Ci0gICAgICAgIHVu
aW9uIHsKLSAgICAgICAgICAgIFRTdHJpbmcgKnN0cmluZzsKLSAgICAgICAgICAgIGZsb2F0IGY7
Ci0gICAgICAgICAgICBpbnQgaTsKLSAgICAgICAgICAgIGJvb2wgYjsKLSAgICAgICAgfTsKLSAg
ICAgICAgVFN5bWJvbCogc3ltYm9sOwotICAgIH0gbGV4OwotICAgIHN0cnVjdCB7Ci0gICAgICAg
IFRPcGVyYXRvciBvcDsKLSAgICAgICAgdW5pb24gewotICAgICAgICAgICAgVEludGVybU5vZGUq
IGludGVybU5vZGU7Ci0gICAgICAgICAgICBUSW50ZXJtTm9kZVBhaXIgbm9kZVBhaXI7Ci0gICAg
ICAgICAgICBUSW50ZXJtVHlwZWQqIGludGVybVR5cGVkTm9kZTsKLSAgICAgICAgICAgIFRJbnRl
cm1BZ2dyZWdhdGUqIGludGVybUFnZ3JlZ2F0ZTsKLSAgICAgICAgfTsKLSAgICAgICAgdW5pb24g
ewotICAgICAgICAgICAgVFB1YmxpY1R5cGUgdHlwZTsKLSAgICAgICAgICAgIFRQcmVjaXNpb24g
cHJlY2lzaW9uOwotICAgICAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXI7Ci0gICAgICAgICAg
ICBURnVuY3Rpb24qIGZ1bmN0aW9uOwotICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJhbTsKLSAg
ICAgICAgICAgIFRGaWVsZCogZmllbGQ7Ci0gICAgICAgICAgICBURmllbGRMaXN0KiBmaWVsZExp
c3Q7Ci0gICAgICAgIH07Ci0gICAgfSBpbnRlcm07Ci0KLQotCi19IFlZU1RZUEU7Ci0jIGRlZmlu
ZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQotIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29s
ZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLwotIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJF
RCAxCi0jZW5kaWYKLQotI2lmICEgZGVmaW5lZCBZWUxUWVBFICYmICEgZGVmaW5lZCBZWUxUWVBF
X0lTX0RFQ0xBUkVECi10eXBlZGVmIHN0cnVjdCBZWUxUWVBFCi17Ci0gIGludCBmaXJzdF9saW5l
OwotICBpbnQgZmlyc3RfY29sdW1uOwotICBpbnQgbGFzdF9saW5lOwotICBpbnQgbGFzdF9jb2x1
bW47Ci19IFlZTFRZUEU7Ci0jIGRlZmluZSB5eWx0eXBlIFlZTFRZUEUgLyogb2Jzb2xlc2NlbnQ7
IHdpbGwgYmUgd2l0aGRyYXduICovCi0jIGRlZmluZSBZWUxUWVBFX0lTX0RFQ0xBUkVEIDEKLSMg
ZGVmaW5lIFlZTFRZUEVfSVNfVFJJVklBTCAxCi0jZW5kaWYKLQotCi0jaWZkZWYgWVlQQVJTRV9Q
QVJBTQotI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cwotaW50IHl5
cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pOwotI2Vsc2UKLWludCB5eXBhcnNlICgpOwotI2Vu
ZGlmCi0jZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KLSNpZiBkZWZpbmVkIF9fU1REQ19fIHx8
IGRlZmluZWQgX19jcGx1c3BsdXMKLWludCB5eXBhcnNlIChUUGFyc2VDb250ZXh0KiBjb250ZXh0
KTsKLSNlbHNlCi1pbnQgeXlwYXJzZSAoKTsKLSNlbmRpZgotI2VuZGlmIC8qICEgWVlQQVJTRV9Q
QVJBTSAqLwotCi0jZW5kaWYgLyogIVlZX1lZX0dMU0xBTkdfVEFCX0hfSU5DTFVERUQgICovCi0K
LS8qIENvcHkgdGhlIHNlY29uZCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KLQotCi1l
eHRlcm4gaW50IHl5bGV4KFlZU1RZUEUqIHl5bHZhbCwgWVlMVFlQRSogeXlsbG9jLCB2b2lkKiB5
eXNjYW5uZXIpOwotZXh0ZXJuIHZvaWQgeXllcnJvcihZWUxUWVBFKiB5eWxsb2MsIFRQYXJzZUNv
bnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7Ci0KLSNkZWZpbmUgWVlMTE9DX0RF
RkFVTFQoQ3VycmVudCwgUmhzLCBOKSAgICAgICAgICAgICAgICAgICAgICBcCi0gIGRvIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgaWYgKFlZSUQoTikpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2ZpbGUgPSBZWVJIU0xPQyhSaHMsIDEpLmZpcnN0
X2ZpbGU7ICBcCi0gICAgICAgIChDdXJyZW50KS5maXJzdF9saW5lID0gWVlSSFNMT0MoUmhzLCAx
KS5maXJzdF9saW5lOyAgXAotICAgICAgICAoQ3VycmVudCkubGFzdF9maWxlID0gWVlSSFNMT0Mo
UmhzLCBOKS5sYXN0X2ZpbGU7ICAgIFwKLSAgICAgICAgKEN1cnJlbnQpLmxhc3RfbGluZSA9IFlZ
UkhTTE9DKFJocywgTikubGFzdF9saW5lOyAgICBcCi0gICAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZWxzZSB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKEN1
cnJlbnQpLmZpcnN0X2ZpbGUgPSBZWVJIU0xPQyhSaHMsIDApLmxhc3RfZmlsZTsgICBcCi0gICAg
ICAgIChDdXJyZW50KS5maXJzdF9saW5lID0gWVlSSFNMT0MoUmhzLCAwKS5sYXN0X2xpbmU7ICAg
XAotICAgICAgICAoQ3VycmVudCkubGFzdF9maWxlID0gWVlSSFNMT0MoUmhzLCAwKS5sYXN0X2Zp
bGU7ICAgIFwKLSAgICAgICAgKEN1cnJlbnQpLmxhc3RfbGluZSA9IFlZUkhTTE9DKFJocywgMCku
bGFzdF9saW5lOyAgICBcCi0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIFZFUlRFWF9P
TkxZKFMsIEwpIHsgIFwKLSAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSAhPSBTSF9WRVJURVhf
U0hBREVSKSB7ICBcCi0gICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZl
cnRleCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCi0gICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsg
IFwKLSAgICB9ICBcCi19Ci0KLSNkZWZpbmUgRlJBR19PTkxZKFMsIEwpIHsgIFwKLSAgICBpZiAo
Y29udGV4dC0+c2hhZGVyVHlwZSAhPSBTSF9GUkFHTUVOVF9TSEFERVIpIHsgIFwKLSAgICAgICAg
Y29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21lbnQgc2hhZGVycyBvbmx5ICIs
IFMpOyAgXAotICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCi0gICAgfSAgXAotfQotCi0K
LQotI2lmZGVmIHNob3J0Ci0jIHVuZGVmIHNob3J0Ci0jZW5kaWYKLQotI2lmZGVmIFlZVFlQRV9V
SU5UOAotdHlwZWRlZiBZWVRZUEVfVUlOVDggeXl0eXBlX3VpbnQ4OwotI2Vsc2UKLXR5cGVkZWYg
dW5zaWduZWQgY2hhciB5eXR5cGVfdWludDg7Ci0jZW5kaWYKLQotI2lmZGVmIFlZVFlQRV9JTlQ4
Ci10eXBlZGVmIFlZVFlQRV9JTlQ4IHl5dHlwZV9pbnQ4OwotI2VsaWYgKGRlZmluZWQgX19TVERD
X18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1
cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotdHlwZWRlZiBzaWduZWQgY2hhciB5eXR5cGVfaW50ODsK
LSNlbHNlCi10eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50ODsKLSNlbmRpZgotCi0jaWZkZWYg
WVlUWVBFX1VJTlQxNgotdHlwZWRlZiBZWVRZUEVfVUlOVDE2IHl5dHlwZV91aW50MTY7Ci0jZWxz
ZQotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgeXl0eXBlX3VpbnQxNjsKLSNlbmRpZgotCi0j
aWZkZWYgWVlUWVBFX0lOVDE2Ci10eXBlZGVmIFlZVFlQRV9JTlQxNiB5eXR5cGVfaW50MTY7Ci0j
ZWxzZQotdHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDE2OwotI2VuZGlmCi0KLSNpZm5kZWYg
WVlTSVpFX1QKLSMgaWZkZWYgX19TSVpFX1RZUEVfXwotIyAgZGVmaW5lIFlZU0laRV9UIF9fU0la
RV9UWVBFX18KLSMgZWxpZiBkZWZpbmVkIHNpemVfdAotIyAgZGVmaW5lIFlZU0laRV9UIHNpemVf
dAotIyBlbGlmICEgZGVmaW5lZCBZWVNJWkVfVCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZp
bmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmlu
ZWQgX01TQ19WRVIpCi0jICBpbmNsdWRlIDxzdGRkZWYuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIg
TkFNRSBTUEFDRSAqLwotIyAgZGVmaW5lIFlZU0laRV9UIHNpemVfdAotIyBlbHNlCi0jICBkZWZp
bmUgWVlTSVpFX1QgdW5zaWduZWQgaW50Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2RlZmluZSBZWVNJ
WkVfTUFYSU1VTSAoKFlZU0laRV9UKSAtMSkKLQotI2lmbmRlZiBZWV8KLSMgaWYgZGVmaW5lZCBZ
WUVOQUJMRV9OTFMgJiYgWVlFTkFCTEVfTkxTCi0jICBpZiBFTkFCTEVfTkxTCi0jICAgaW5jbHVk
ZSA8bGliaW50bC5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgZGVm
aW5lIFlZXyhNc2dpZCkgZGdldHRleHQgKCJiaXNvbi1ydW50aW1lIiwgTXNnaWQpCi0jICBlbmRp
ZgotIyBlbmRpZgotIyBpZm5kZWYgWVlfCi0jICBkZWZpbmUgWVlfKE1zZ2lkKSBNc2dpZAotIyBl
bmRpZgotI2VuZGlmCi0KLS8qIFN1cHByZXNzIHVudXNlZC12YXJpYWJsZSB3YXJuaW5ncyBieSAi
dXNpbmciIEUuICAqLwotI2lmICEgZGVmaW5lZCBsaW50IHx8IGRlZmluZWQgX19HTlVDX18KLSMg
ZGVmaW5lIFlZVVNFKEUpICgodm9pZCkgKEUpKQotI2Vsc2UKLSMgZGVmaW5lIFlZVVNFKEUpIC8q
IGVtcHR5ICovCi0jZW5kaWYKLQotLyogSWRlbnRpdHkgZnVuY3Rpb24sIHVzZWQgdG8gc3VwcHJl
c3Mgd2FybmluZ3MgYWJvdXQgY29uc3RhbnQgY29uZGl0aW9ucy4gICovCi0jaWZuZGVmIGxpbnQK
LSMgZGVmaW5lIFlZSUQoTikgKE4pCi0jZWxzZQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRl
ZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVm
aW5lZCBfTVNDX1ZFUikKLXN0YXRpYyBpbnQKLVlZSUQgKGludCB5eWkpCi0jZWxzZQotc3RhdGlj
IGludAotWVlJRCAoeXlpKQotICAgIGludCB5eWk7Ci0jZW5kaWYKLXsKLSAgcmV0dXJuIHl5aTsK
LX0KLSNlbmRpZgotCi0jaWYgISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NF
Ci0KLS8qIFRoZSBwYXJzZXIgaW52b2tlcyBhbGxvY2Egb3IgbWFsbG9jOyBkZWZpbmUgdGhlIG5l
Y2Vzc2FyeSBzeW1ib2xzLiAgKi8KLQotIyBpZmRlZiBZWVNUQUNLX1VTRV9BTExPQ0EKLSMgIGlm
IFlZU1RBQ0tfVVNFX0FMTE9DQQotIyAgIGlmZGVmIF9fR05VQ19fCi0jICAgIGRlZmluZSBZWVNU
QUNLX0FMTE9DIF9fYnVpbHRpbl9hbGxvY2EKLSMgICBlbGlmIGRlZmluZWQgX19CVUlMVElOX1ZB
X0FSR19JTkNSCi0jICAgIGluY2x1ZGUgPGFsbG9jYS5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBO
QU1FIFNQQUNFICovCi0jICAgZWxpZiBkZWZpbmVkIF9BSVgKLSMgICAgZGVmaW5lIFlZU1RBQ0tf
QUxMT0MgX19hbGxvY2EKLSMgICBlbGlmIGRlZmluZWQgX01TQ19WRVIKLSMgICAgaW5jbHVkZSA8
bWFsbG9jLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICAgZGVmaW5l
IGFsbG9jYSBfYWxsb2NhCi0jICAgZWxzZQotIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBhbGxv
Y2EKLSMgICAgaWYgISBkZWZpbmVkIF9BTExPQ0FfSCAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNT
ICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8
IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLSMgICAgIGluY2x1ZGUg
PHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0gICAgICAvKiBV
c2UgRVhJVF9TVUNDRVNTIGFzIGEgd2l0bmVzcyBmb3Igc3RkbGliLmguICAqLwotIyAgICAgaWZu
ZGVmIEVYSVRfU1VDQ0VTUwotIyAgICAgIGRlZmluZSBFWElUX1NVQ0NFU1MgMAotIyAgICAgZW5k
aWYKLSMgICAgZW5kaWYKLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgZW5kaWYKLQotIyBpZmRlZiBZ
WVNUQUNLX0FMTE9DCi0gICAvKiBQYWNpZnkgR0NDJ3MgYGVtcHR5IGlmLWJvZHknIHdhcm5pbmcu
ICAqLwotIyAgZGVmaW5lIFlZU1RBQ0tfRlJFRShQdHIpIGRvIHsgLyogZW1wdHkgKi87IH0gd2hp
bGUgKFlZSUQgKDApKQotIyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQotICAgIC8qIFRo
ZSBPUyBtaWdodCBndWFyYW50ZWUgb25seSBvbmUgZ3VhcmQgcGFnZSBhdCB0aGUgYm90dG9tIG9m
IHRoZSBzdGFjaywKLSAgICAgICBhbmQgYSBwYWdlIHNpemUgY2FuIGJlIGFzIHNtYWxsIGFzIDQw
OTYgYnl0ZXMuICBTbyB3ZSBjYW5ub3Qgc2FmZWx5Ci0gICAgICAgaW52b2tlIGFsbG9jYSAoTikg
aWYgTiBleGNlZWRzIDQwOTYuICBVc2UgYSBzbGlnaHRseSBzbWFsbGVyIG51bWJlcgotICAgICAg
IHRvIGFsbG93IGZvciBhIGZldyBjb21waWxlci1hbGxvY2F0ZWQgdGVtcG9yYXJ5IHN0YWNrIHNs
b3RzLiAgKi8KLSMgICBkZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVNIDQwMzIgLyogcmVhc29u
YWJsZSBjaXJjYSAyMDA2ICovCi0jICBlbmRpZgotIyBlbHNlCi0jICBkZWZpbmUgWVlTVEFDS19B
TExPQyBZWU1BTExPQwotIyAgZGVmaW5lIFlZU1RBQ0tfRlJFRSBZWUZSRUUKLSMgIGlmbmRlZiBZ
WVNUQUNLX0FMTE9DX01BWElNVU0KLSMgICBkZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVNIFlZ
U0laRV9NQVhJTVVNCi0jICBlbmRpZgotIyAgaWYgKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgISBk
ZWZpbmVkIEVYSVRfU1VDQ0VTUyBcCi0gICAgICAgJiYgISAoKGRlZmluZWQgWVlNQUxMT0MgfHwg
ZGVmaW5lZCBtYWxsb2MpIFwKLQkgICAgICYmIChkZWZpbmVkIFlZRlJFRSB8fCBkZWZpbmVkIGZy
ZWUpKSkKLSMgICBpbmNsdWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBT
UEFDRSAqLwotIyAgIGlmbmRlZiBFWElUX1NVQ0NFU1MKLSMgICAgZGVmaW5lIEVYSVRfU1VDQ0VT
UyAwCi0jICAgZW5kaWYKLSMgIGVuZGlmCi0jICBpZm5kZWYgWVlNQUxMT0MKLSMgICBkZWZpbmUg
WVlNQUxMT0MgbWFsbG9jCi0jICAgaWYgISBkZWZpbmVkIG1hbGxvYyAmJiAhIGRlZmluZWQgRVhJ
VF9TVUNDRVNTICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBc
Ci0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXZvaWQg
Km1hbGxvYyAoWVlTSVpFX1QpOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0j
ICAgZW5kaWYKLSMgIGVuZGlmCi0jICBpZm5kZWYgWVlGUkVFCi0jICAgZGVmaW5lIFlZRlJFRSBm
cmVlCi0jICAgaWYgISBkZWZpbmVkIGZyZWUgJiYgISBkZWZpbmVkIEVYSVRfU1VDQ0VTUyAmJiAo
ZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZp
bmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi12b2lkIGZyZWUgKHZvaWQgKik7
IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBlbmRpZgotIyAgZW5kaWYK
LSMgZW5kaWYKLSNlbmRpZiAvKiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJP
U0UgKi8KLQotCi0jaWYgKCEgZGVmaW5lZCB5eW92ZXJmbG93IFwKLSAgICAgJiYgKCEgZGVmaW5l
ZCBfX2NwbHVzcGx1cyBcCi0JIHx8IChkZWZpbmVkIFlZTFRZUEVfSVNfVFJJVklBTCAmJiBZWUxU
WVBFX0lTX1RSSVZJQUwgXAotCSAgICAgJiYgZGVmaW5lZCBZWVNUWVBFX0lTX1RSSVZJQUwgJiYg
WVlTVFlQRV9JU19UUklWSUFMKSkpCi0KLS8qIEEgdHlwZSB0aGF0IGlzIHByb3Blcmx5IGFsaWdu
ZWQgZm9yIGFueSBzdGFjayBtZW1iZXIuICAqLwotdW5pb24geXlhbGxvYwotewotICB5eXR5cGVf
aW50MTYgeXlzc19hbGxvYzsKLSAgWVlTVFlQRSB5eXZzX2FsbG9jOwotICBZWUxUWVBFIHl5bHNf
YWxsb2M7Ci19OwotCi0vKiBUaGUgc2l6ZSBvZiB0aGUgbWF4aW11bSBnYXAgYmV0d2VlbiBvbmUg
YWxpZ25lZCBzdGFjayBhbmQgdGhlIG5leHQuICAqLwotIyBkZWZpbmUgWVlTVEFDS19HQVBfTUFY
SU1VTSAoc2l6ZW9mICh1bmlvbiB5eWFsbG9jKSAtIDEpCi0KLS8qIFRoZSBzaXplIG9mIGFuIGFy
cmF5IGxhcmdlIHRvIGVub3VnaCB0byBob2xkIGFsbCBzdGFja3MsIGVhY2ggd2l0aAotICAgTiBl
bGVtZW50cy4gICovCi0jIGRlZmluZSBZWVNUQUNLX0JZVEVTKE4pIFwKLSAgICAgKChOKSAqIChz
aXplb2YgKHl5dHlwZV9pbnQxNikgKyBzaXplb2YgKFlZU1RZUEUpICsgc2l6ZW9mIChZWUxUWVBF
KSkgXAotICAgICAgKyAyICogWVlTVEFDS19HQVBfTUFYSU1VTSkKLQotIyBkZWZpbmUgWVlDT1BZ
X05FRURFRCAxCi0KLS8qIFJlbG9jYXRlIFNUQUNLIGZyb20gaXRzIG9sZCBsb2NhdGlvbiB0byB0
aGUgbmV3IG9uZS4gIFRoZQotICAgbG9jYWwgdmFyaWFibGVzIFlZU0laRSBhbmQgWVlTVEFDS1NJ
WkUgZ2l2ZSB0aGUgb2xkIGFuZCBuZXcgbnVtYmVyIG9mCi0gICBlbGVtZW50cyBpbiB0aGUgc3Rh
Y2ssIGFuZCBZWVBUUiBnaXZlcyB0aGUgbmV3IGxvY2F0aW9uIG9mIHRoZQotICAgc3RhY2suICBB
ZHZhbmNlIFlZUFRSIHRvIGEgcHJvcGVybHkgYWxpZ25lZCBsb2NhdGlvbiBmb3IgdGhlIG5leHQK
LSAgIHN0YWNrLiAgKi8KLSMgZGVmaW5lIFlZU1RBQ0tfUkVMT0NBVEUoU3RhY2tfYWxsb2MsIFN0
YWNrKQkJCQlcCi0gICAgZG8JCQkJCQkJCQlcCi0gICAgICB7CQkJCQkJCQkJXAotCVlZU0laRV9U
IHl5bmV3Ynl0ZXM7CQkJCQkJXAotCVlZQ09QWSAoJnl5cHRyLT5TdGFja19hbGxvYywgU3RhY2ss
IHl5c2l6ZSk7CQkJXAotCVN0YWNrID0gJnl5cHRyLT5TdGFja19hbGxvYzsJCQkJCVwKLQl5eW5l
d2J5dGVzID0geXlzdGFja3NpemUgKiBzaXplb2YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJ
TVVNOyBcCi0JeXlwdHIgKz0geXluZXdieXRlcyAvIHNpemVvZiAoKnl5cHRyKTsJCQkJXAotICAg
ICAgfQkJCQkJCQkJCVwKLSAgICB3aGlsZSAoWVlJRCAoMCkpCi0KLSNlbmRpZgotCi0jaWYgZGVm
aW5lZCBZWUNPUFlfTkVFREVEICYmIFlZQ09QWV9ORUVERUQKLS8qIENvcHkgQ09VTlQgb2JqZWN0
cyBmcm9tIFNSQyB0byBEU1QuICBUaGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkbwotICAgbm90
IG92ZXJsYXAuICAqLwotIyBpZm5kZWYgWVlDT1BZCi0jICBpZiBkZWZpbmVkIF9fR05VQ19fICYm
IDEgPCBfX0dOVUNfXwotIyAgIGRlZmluZSBZWUNPUFkoRHN0LCBTcmMsIENvdW50KSBcCi0gICAg
ICBfX2J1aWx0aW5fbWVtY3B5IChEc3QsIFNyYywgKENvdW50KSAqIHNpemVvZiAoKihTcmMpKSkK
LSMgIGVsc2UKLSMgICBkZWZpbmUgWVlDT1BZKERzdCwgU3JjLCBDb3VudCkgICAgICAgICAgICAg
IFwKLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICBZWVNJWkVfVCB5eWk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBmb3Ig
KHl5aSA9IDA7IHl5aSA8IChDb3VudCk7IHl5aSsrKSAgIFwKLSAgICAgICAgICAgIChEc3QpW3l5
aV0gPSAoU3JjKVt5eWldOyAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHdoaWxlIChZWUlEICgwKSkKLSMgIGVuZGlm
Ci0jIGVuZGlmCi0jZW5kaWYgLyogIVlZQ09QWV9ORUVERUQgKi8KLQotLyogWVlGSU5BTCAtLSBT
dGF0ZSBudW1iZXIgb2YgdGhlIHRlcm1pbmF0aW9uIHN0YXRlLiAgKi8KLSNkZWZpbmUgWVlGSU5B
TCAgNzQKLS8qIFlZTEFTVCAtLSBMYXN0IGluZGV4IGluIFlZVEFCTEUuICAqLwotI2RlZmluZSBZ
WUxBU1QgICAxNDkwCi0KLS8qIFlZTlRPS0VOUyAtLSBOdW1iZXIgb2YgdGVybWluYWxzLiAgKi8K
LSNkZWZpbmUgWVlOVE9LRU5TICA5NQotLyogWVlOTlRTIC0tIE51bWJlciBvZiBub250ZXJtaW5h
bHMuICAqLwotI2RlZmluZSBZWU5OVFMgIDg0Ci0vKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2YgcnVs
ZXMuICAqLwotI2RlZmluZSBZWU5SVUxFUyAgMjAyCi0vKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2Yg
c3RhdGVzLiAgKi8KLSNkZWZpbmUgWVlOU1RBVEVTICAzMDcKLQotLyogWVlUUkFOU0xBVEUoWVlM
RVgpIC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCi0j
ZGVmaW5lIFlZVU5ERUZUT0sgIDIKLSNkZWZpbmUgWVlNQVhVVE9LICAgMzQ5Ci0KLSNkZWZpbmUg
WVlUUkFOU0xBVEUoWVlYKQkJCQkJCVwKLSAgKCh1bnNpZ25lZCBpbnQpIChZWVgpIDw9IFlZTUFY
VVRPSyA/IHl5dHJhbnNsYXRlW1lZWF0gOiBZWVVOREVGVE9LKQotCi0vKiBZWVRSQU5TTEFURVtZ
WUxFWF0gLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8K
LXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXl0cmFuc2xhdGVbXSA9Ci17Ci0gICAgICAgMCwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwK
LSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAot
ICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0g
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LAotICAgICAgIDUsICAgICA2LCAgICAgNywg
ICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsCi0gICAgICAx
NSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIz
LCAgICAyNCwKLSAgICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAg
IDMxLCAgICAzMiwgICAgMzMsICAgIDM0LAotICAgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgs
ICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsCi0gICAgICA0NSwgICAg
NDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1
NCwKLSAgICAgIDU1LCAgICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLCAg
ICA2MiwgICAgNjMsICAgIDY0LAotICAgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5
LCAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3MywgICAgNzQsCi0gICAgICA3NSwgICAgNzYsICAg
IDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwgICAgODIsICAgIDgzLCAgICA4NCwKLSAg
ICAgIDg1LCAgICA4NiwgICAgODcsICAgIDg4LCAgICA4OSwgICAgOTAsICAgIDkxLCAgICA5Miwg
ICAgOTMsICAgIDk0Ci19OwotCi0jaWYgWVlERUJVRwotLyogWVlQUkhTW1lZTl0gLS0gSW5kZXgg
b2YgdGhlIGZpcnN0IFJIUyBzeW1ib2wgb2YgcnVsZSBudW1iZXIgWVlOIGluCi0gICBZWVJIUy4g
ICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXByaHNbXSA9Ci17Ci0gICAgICAgMCwg
ICAgIDAsICAgICAzLCAgICAgNSwgICAgIDcsICAgICA5LCAgICAxMSwgICAgMTMsICAgIDE1LCAg
ICAxNywKLSAgICAgIDIxLCAgICAyMywgICAgMjgsICAgIDMwLCAgICAzNCwgICAgMzcsICAgIDQw
LCAgICA0MiwgICAgNDQsICAgIDQ2LAotICAgICAgNTAsICAgIDUzLCAgICA1NiwgICAgNTksICAg
IDYxLCAgICA2NCwgICAgNjgsICAgIDcxLCAgICA3MywgICAgNzUsCi0gICAgICA3NywgICAgODAs
ICAgIDgzLCAgICA4NiwgICAgODgsICAgIDkwLCAgICA5MiwgICAgOTQsICAgIDk4LCAgIDEwMiwK
LSAgICAgMTA0LCAgIDEwOCwgICAxMTIsICAgMTE0LCAgIDExNiwgICAxMjAsICAgMTI0LCAgIDEy
OCwgICAxMzIsICAgMTM0LAotICAgICAxMzgsICAgMTQyLCAgIDE0NCwgICAxNDYsICAgMTQ4LCAg
IDE1MCwgICAxNTQsICAgMTU2LCAgIDE2MCwgICAxNjIsCi0gICAgIDE2NiwgICAxNjgsICAgMTc0
LCAgIDE3NiwgICAxODAsICAgMTgyLCAgIDE4NCwgICAxODYsICAgMTg4LCAgIDE5MCwKLSAgICAg
MTkyLCAgIDE5NiwgICAxOTgsICAgMjAxLCAgIDIwNCwgICAyMDksICAgMjEyLCAgIDIxNCwgICAy
MTYsICAgMjE5LAotICAgICAyMjMsICAgMjI3LCAgIDIzMCwgICAyMzYsICAgMjQwLCAgIDI0Mywg
ICAyNDcsICAgMjUwLCAgIDI1MSwgICAyNTMsCi0gICAgIDI1NSwgICAyNTcsICAgMjU5LCAgIDI2
MSwgICAyNjUsICAgMjcxLCAgIDI3OCwgICAyODQsICAgMjg2LCAgIDI4OSwKLSAgICAgMjk0LCAg
IDMwMCwgICAzMDUsICAgMzA4LCAgIDMxMCwgICAzMTMsICAgMzE1LCAgIDMxNywgICAzMTksICAg
MzIyLAotICAgICAzMjQsICAgMzI2LCAgIDMyOSwgICAzMzEsICAgMzMzLCAgIDMzNSwgICAzMzcs
ICAgMzQyLCAgIDM0NCwgICAzNDYsCi0gICAgIDM0OCwgICAzNTAsICAgMzUyLCAgIDM1NCwgICAz
NTYsICAgMzU4LCAgIDM2MCwgICAzNjIsICAgMzY0LCAgIDM2NiwKLSAgICAgMzY4LCAgIDM3MCwg
ICAzNzIsICAgMzc0LCAgIDM3NiwgICAzNzgsICAgMzgwLCAgIDM4MiwgICAzODQsICAgMzg2LAot
ICAgICAzODcsICAgMzk0LCAgIDM5NSwgICA0MDEsICAgNDAzLCAgIDQwNiwgICA0MTAsICAgNDEy
LCAgIDQxNiwgICA0MTgsCi0gICAgIDQyMywgICA0MjUsICAgNDI3LCAgIDQyOSwgICA0MzEsICAg
NDMzLCAgIDQzNSwgICA0MzcsICAgNDM5LCAgIDQ0MSwKLSAgICAgNDQ0LCAgIDQ0NSwgICA0NDYs
ICAgNDUyLCAgIDQ1NCwgICA0NTYsICAgNDU3LCAgIDQ2MCwgICA0NjEsICAgNDY0LAotICAgICA0
NjcsICAgNDcxLCAgIDQ3MywgICA0NzYsICAgNDc4LCAgIDQ4MSwgICA0ODcsICAgNDkxLCAgIDQ5
MywgICA0OTUsCi0gICAgIDUwMCwgICA1MDEsICAgNTA4LCAgIDUwOSwgICA1MTgsICAgNTE5LCAg
IDUyNywgICA1MjksICAgNTMxLCAgIDUzMywKLSAgICAgNTM0LCAgIDUzNywgICA1NDEsICAgNTQ0
LCAgIDU0NywgICA1NTAsICAgNTU0LCAgIDU1NywgICA1NTksICAgNTYyLAotICAgICA1NjQsICAg
NTY2LCAgIDU2NwotfTsKLQotLyogWVlSSFMgLS0gQSBgLTEnLXNlcGFyYXRlZCBsaXN0IG9mIHRo
ZSBydWxlcycgUkhTLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlyaHNbXSA9Ci17
Ci0gICAgIDE3NSwgICAgIDAsICAgIC0xLCAgICA0NSwgICAgLTEsICAgIDQ2LCAgICAtMSwgICAg
NDUsICAgIC0xLCAgICA5NywKLSAgICAgIC0xLCAgICA0OCwgICAgLTEsICAgIDQ3LCAgICAtMSwg
ICAgNDksICAgIC0xLCAgICA3MSwgICAxMjQsICAgIDcyLAotICAgICAgLTEsICAgIDk4LCAgICAt
MSwgICAgOTksICAgIDczLCAgIDEwMCwgICAgNzQsICAgIC0xLCAgIDEwMSwgICAgLTEsCi0gICAg
ICA5OSwgICAgNzcsICAgIDk2LCAgICAtMSwgICAgOTksICAgIDUyLCAgICAtMSwgICAgOTksICAg
IDUzLCAgICAtMSwKLSAgICAgMTI0LCAgICAtMSwgICAxMDIsICAgIC0xLCAgIDEwMywgICAgLTEs
ICAgIDk5LCAgICA3NywgICAxMDMsICAgIC0xLAotICAgICAxMDUsICAgIDcyLCAgICAtMSwgICAx
MDQsICAgIDcyLCAgICAtMSwgICAxMDYsICAgIDM5LCAgICAtMSwgICAxMDYsCi0gICAgICAtMSwg
ICAxMDYsICAgMTIyLCAgICAtMSwgICAxMDUsICAgIDc4LCAgIDEyMiwgICAgLTEsICAgMTA3LCAg
ICA3MSwKLSAgICAgIC0xLCAgIDE0MiwgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgOTksICAgIC0x
LCAgICA1MiwgICAxMDgsICAgIC0xLAotICAgICAgNTMsICAgMTA4LCAgICAtMSwgICAxMDksICAg
MTA4LCAgICAtMSwgICAgODUsICAgIC0xLCAgICA4MywgICAgLTEsCi0gICAgICA4MiwgICAgLTEs
ICAgMTA4LCAgICAtMSwgICAxMTAsICAgIDg2LCAgIDEwOCwgICAgLTEsICAgMTEwLCAgICA4NywK
LSAgICAgMTA4LCAgICAtMSwgICAxMTAsICAgIC0xLCAgIDExMSwgICAgODUsICAgMTEwLCAgICAt
MSwgICAxMTEsICAgIDgzLAotICAgICAxMTAsICAgIC0xLCAgIDExMSwgICAgLTEsICAgMTEyLCAg
ICAtMSwgICAxMTMsICAgIDg5LCAgIDExMiwgICAgLTEsCi0gICAgIDExMywgICAgOTAsICAgMTEy
LCAgICAtMSwgICAxMTMsICAgIDU0LCAgIDExMiwgICAgLTEsICAgMTEzLCAgICA1NSwKLSAgICAg
MTEyLCAgICAtMSwgICAxMTMsICAgIC0xLCAgIDExNCwgICAgNTYsICAgMTEzLCAgICAtMSwgICAx
MTQsICAgIDU3LAotICAgICAxMTMsICAgIC0xLCAgIDExNCwgICAgLTEsICAgMTE1LCAgICAtMSwg
ICAxMTYsICAgIC0xLCAgIDExNywgICAgLTEsCi0gICAgIDExOCwgICAgNTgsICAgMTE3LCAgICAt
MSwgICAxMTgsICAgIC0xLCAgIDExOSwgICAgNjAsICAgMTE4LCAgICAtMSwKLSAgICAgMTE5LCAg
ICAtMSwgICAxMjAsICAgIDU5LCAgIDExOSwgICAgLTEsICAgMTIwLCAgICAtMSwgICAxMjAsICAg
IDk0LAotICAgICAxMjQsICAgIDc5LCAgIDEyMiwgICAgLTEsICAgMTIxLCAgICAtMSwgICAxMDgs
ICAgMTIzLCAgIDEyMiwgICAgLTEsCi0gICAgICA4MCwgICAgLTEsICAgIDYxLCAgICAtMSwgICAg
NjIsICAgIC0xLCAgICA2MywgICAgLTEsICAgIDcwLCAgICAtMSwKLSAgICAgMTIyLCAgICAtMSwg
ICAxMjQsICAgIDc4LCAgIDEyMiwgICAgLTEsICAgMTIxLCAgICAtMSwgICAxMjcsICAgIDgxLAot
ICAgICAgLTEsICAgMTM1LCAgICA4MSwgICAgLTEsICAgICA3LCAgIDE0MCwgICAxNDEsICAgIDgx
LCAgICAtMSwgICAxMjgsCi0gICAgICA3MiwgICAgLTEsICAgMTMwLCAgICAtMSwgICAxMjksICAg
IC0xLCAgIDEzMCwgICAxMzIsICAgIC0xLCAgIDEyOSwKLSAgICAgIDc4LCAgIDEzMiwgICAgLTEs
ICAgMTM3LCAgICA0NSwgICAgNzEsICAgIC0xLCAgIDEzOSwgICAgOTYsICAgIC0xLAotICAgICAx
MzksICAgIDk2LCAgICA3MywgICAxMjUsICAgIDc0LCAgICAtMSwgICAxMzgsICAgMTMzLCAgIDEz
MSwgICAgLTEsCi0gICAgIDEzMywgICAxMzEsICAgIC0xLCAgIDEzOCwgICAxMzMsICAgMTM0LCAg
ICAtMSwgICAxMzMsICAgMTM0LCAgICAtMSwKLSAgICAgIC0xLCAgICAzMywgICAgLTEsICAgIDM0
LCAgICAtMSwgICAgMzUsICAgIC0xLCAgIDEzOSwgICAgLTEsICAgMTM2LAotICAgICAgLTEsICAg
MTM1LCAgICA3OCwgICAgOTYsICAgIC0xLCAgIDEzNSwgICAgNzgsICAgIDk2LCAgICA3MywgICAg
NzQsCi0gICAgICAtMSwgICAxMzUsICAgIDc4LCAgICA5NiwgICAgNzMsICAgMTI1LCAgICA3NCwg
ICAgLTEsICAgMTM1LCAgICA3OCwKLSAgICAgIDk2LCAgICA4MCwgICAxNTAsICAgIC0xLCAgIDEz
NywgICAgLTEsICAgMTM3LCAgICA5NiwgICAgLTEsICAgMTM3LAotICAgICAgOTYsICAgIDczLCAg
ICA3NCwgICAgLTEsICAgMTM3LCAgICA5NiwgICAgNzMsICAgMTI1LCAgICA3NCwgICAgLTEsCi0g
ICAgIDEzNywgICAgOTYsICAgIDgwLCAgIDE1MCwgICAgLTEsICAgICAzLCAgICA0NSwgICAgLTEs
ICAgMTM5LCAgICAtMSwKLSAgICAgMTM4LCAgIDEzOSwgICAgLTEsICAgICA5LCAgICAtMSwgICAg
IDgsICAgIC0xLCAgICAzNywgICAgLTEsICAgICAzLAotICAgICAgMzcsICAgIC0xLCAgICAzNiwg
ICAgLTEsICAgMTQxLCAgICAtMSwgICAxNDAsICAgMTQxLCAgICAtMSwgICAgIDQsCi0gICAgICAt
MSwgICAgIDUsICAgIC0xLCAgICAgNiwgICAgLTEsICAgMTQyLCAgICAtMSwgICAxNDIsICAgIDcz
LCAgIDEyNSwKLSAgICAgIDc0LCAgICAtMSwgICAgMzksICAgIC0xLCAgICAxMSwgICAgLTEsICAg
IDEyLCAgICAtMSwgICAgMTAsICAgIC0xLAotICAgICAgMjcsICAgIC0xLCAgICAyOCwgICAgLTEs
ICAgIDI5LCAgICAtMSwgICAgMjEsICAgIC0xLCAgICAyMiwgICAgLTEsCi0gICAgICAyMywgICAg
LTEsICAgIDI0LCAgICAtMSwgICAgMjUsICAgIC0xLCAgICAyNiwgICAgLTEsICAgIDMwLCAgICAt
MSwKLSAgICAgIDMxLCAgICAtMSwgICAgMzIsICAgIC0xLCAgICA0MSwgICAgLTEsICAgIDQyLCAg
ICAtMSwgICAgNDMsICAgIC0xLAotICAgICAgNDQsICAgIC0xLCAgIDE0MywgICAgLTEsICAgIDQ2
LCAgICAtMSwgICAgLTEsICAgIDM4LCAgICA5NiwgICAgNzUsCi0gICAgIDE0NCwgICAxNDYsICAg
IDc2LCAgICAtMSwgICAgLTEsICAgIDM4LCAgICA3NSwgICAxNDUsICAgMTQ2LCAgICA3NiwKLSAg
ICAgIC0xLCAgIDE0NywgICAgLTEsICAgMTQ2LCAgIDE0NywgICAgLTEsICAgMTM5LCAgIDE0OCwg
ICAgODEsICAgIC0xLAotICAgICAxNDksICAgIC0xLCAgIDE0OCwgICAgNzgsICAgMTQ5LCAgICAt
MSwgICAgOTYsICAgIC0xLCAgICA5NiwgICAgNzMsCi0gICAgIDEyNSwgICAgNzQsICAgIC0xLCAg
IDEyMiwgICAgLTEsICAgMTI2LCAgICAtMSwgICAxNTQsICAgIC0xLCAgIDE1MywKLSAgICAgIC0x
LCAgIDE1MSwgICAgLTEsICAgMTYzLCAgICAtMSwgICAxNjQsICAgIC0xLCAgIDE2NywgICAgLTEs
ICAgMTc0LAotICAgICAgLTEsICAgIDc1LCAgICA3NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
NzUsICAgMTU1LCAgIDE2MiwgICAxNTYsCi0gICAgICA3NiwgICAgLTEsICAgMTYxLCAgICAtMSwg
ICAxNTMsICAgIC0xLCAgICAtMSwgICAxNTksICAgMTYxLCAgICAtMSwKLSAgICAgIC0xLCAgIDE2
MCwgICAxNTMsICAgIC0xLCAgICA3NSwgICAgNzYsICAgIC0xLCAgICA3NSwgICAxNjIsICAgIDc2
LAotICAgICAgLTEsICAgMTUyLCAgICAtMSwgICAxNjIsICAgMTUyLCAgICAtMSwgICAgODEsICAg
IC0xLCAgIDEyNCwgICAgODEsCi0gICAgICAtMSwgICAgMTgsICAgIDcxLCAgIDEyNCwgICAgNzIs
ICAgMTY1LCAgICAtMSwgICAxNTgsICAgIDE2LCAgIDE1OCwKLSAgICAgIC0xLCAgIDE1OCwgICAg
LTEsICAgMTI0LCAgICAtMSwgICAxMzcsICAgIDk2LCAgICA4MCwgICAxNTAsICAgIC0xLAotICAg
ICAgLTEsICAgIDQwLCAgICA3MSwgICAxNjgsICAgMTY2LCAgICA3MiwgICAxNTcsICAgIC0xLCAg
ICAtMSwgICAgMTUsCi0gICAgIDE2OSwgICAxNTgsICAgIDQwLCAgICA3MSwgICAxMjQsICAgIDcy
LCAgICA4MSwgICAgLTEsICAgIC0xLCAgICAxNywKLSAgICAgIDcxLCAgIDE3MCwgICAxNzEsICAg
MTczLCAgICA3MiwgICAxNTcsICAgIC0xLCAgIDE2MywgICAgLTEsICAgMTUxLAotICAgICAgLTEs
ICAgMTY2LCAgICAtMSwgICAgLTEsICAgMTcyLCAgICA4MSwgICAgLTEsICAgMTcyLCAgICA4MSwg
ICAxMjQsCi0gICAgICAtMSwgICAgMTQsICAgIDgxLCAgICAtMSwgICAgMTMsICAgIDgxLCAgICAt
MSwgICAgMjAsICAgIDgxLCAgICAtMSwKLSAgICAgIDIwLCAgIDEyNCwgICAgODEsICAgIC0xLCAg
ICAxOSwgICAgODEsICAgIC0xLCAgIDE3NiwgICAgLTEsICAgMTc1LAotICAgICAxNzYsICAgIC0x
LCAgIDE3NywgICAgLTEsICAgMTI2LCAgICAtMSwgICAgLTEsICAgMTI3LCAgIDE3OCwgICAxNjEs
Ci0gICAgICAtMQotfTsKLQotLyogWVlSTElORVtZWU5dIC0tIHNvdXJjZSBsaW5lIHdoZXJlIHJ1
bGUgbnVtYmVyIFlZTiB3YXMgZGVmaW5lZC4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQx
NiB5eXJsaW5lW10gPQotewotICAgICAgIDAsICAgMTgwLCAgIDE4MCwgICAxODEsICAgMTg0LCAg
IDIyNywgICAyMzAsICAgMjQzLCAgIDI0OCwgICAyNTMsCi0gICAgIDI1OSwgICAyNjIsICAgMjY1
LCAgIDI2OCwgICAzNjMsICAgMzczLCAgIDM4NiwgICAzOTQsICAgNDk0LCAgIDQ5NywKLSAgICAg
NTA1LCAgIDUwOCwgICA1MTQsICAgNTE4LCAgIDUyNSwgICA1MzEsICAgNTQwLCAgIDU0OCwgICA2
MDMsICAgNjEzLAotICAgICA2MTYsICAgNjI2LCAgIDYzNiwgICA2NTcsICAgNjU4LCAgIDY1OSwg
ICA2NjQsICAgNjY1LCAgIDY3MywgICA2ODQsCi0gICAgIDY4NSwgICA2OTMsICAgNzA0LCAgIDcw
OCwgICA3MDksICAgNzE5LCAgIDcyOSwgICA3MzksICAgNzUyLCAgIDc1MywKLSAgICAgNzYzLCAg
IDc3NiwgICA3ODAsICAgNzg0LCAgIDc4OCwgICA3ODksICAgODAyLCAgIDgwMywgICA4MTYsICAg
ODE3LAotICAgICA4MzAsICAgODMxLCAgIDg0OCwgICA4NDksICAgODYyLCAgIDg2MywgICA4NjQs
ICAgODY1LCAgIDg2NiwgICA4NzAsCi0gICAgIDg3MywgICA4ODQsICAgODkyLCAgIDkxOSwgICA5
MjQsICAgOTM4LCAgIDk5MywgICA5OTYsICAxMDAzLCAgMTAxMSwKLSAgICAxMDMyLCAgMTA1Mywg
IDEwNjMsICAxMDkxLCAgMTA5NiwgIDExMDYsICAxMTExLCAgMTEyMSwgIDExMjQsICAxMTI3LAot
ICAgIDExMzAsICAxMTM2LCAgMTE0MywgIDExNDYsICAxMTY4LCAgMTE4NiwgIDEyMTAsICAxMjMz
LCAgMTIzNywgIDEyNTUsCi0gICAgMTI2MywgIDEyOTUsICAxMzE1LCAgMTMzNiwgIDEzNDUsICAx
MzY4LCAgMTM3MSwgIDEzNzcsICAxMzg1LCAgMTM5MywKLSAgICAxNDAxLCAgMTQxMSwgIDE0MTgs
ICAxNDIxLCAgMTQyNCwgIDE0MzAsICAxNDMzLCAgMTQ0OCwgIDE0NTIsICAxNDU2LAotICAgIDE0
NjAsICAxNDY0LCAgMTQ2OSwgIDE0NzQsICAxNDc5LCAgMTQ4NCwgIDE0ODksICAxNDk0LCAgMTQ5
OSwgIDE1MDQsCi0gICAgMTUwOSwgIDE1MTQsICAxNTE5LCAgMTUyNCwgIDE1MjgsICAxNTMyLCAg
MTU0MCwgIDE1NDgsICAxNTUyLCAgMTU2NSwKLSAgICAxNTY1LCAgMTU3OSwgIDE1NzksICAxNTg4
LCAgMTU5MSwgIDE2MDcsICAxNjQwLCAgMTY0NCwgIDE2NTAsICAxNjU3LAotICAgIDE2NzIsICAx
Njc2LCAgMTY4MCwgIDE2ODEsICAxNjg3LCAgMTY4OCwgIDE2ODksICAxNjkwLCAgMTY5MSwgIDE2
OTUsCi0gICAgMTY5NiwgIDE2OTYsICAxNjk2LCAgMTcwNiwgIDE3MDcsICAxNzExLCAgMTcxMSwg
IDE3MTIsICAxNzEyLCAgMTcxNywKLSAgICAxNzIwLCAgMTczMCwgIDE3MzMsICAxNzM5LCAgMTc0
MCwgIDE3NDQsICAxNzUyLCAgMTc1NiwgIDE3NjYsICAxNzcxLAotICAgIDE3ODgsICAxNzg4LCAg
MTc5MywgIDE3OTMsICAxODAwLCAgMTgwMCwgIDE4MDgsICAxODExLCAgMTgxNywgIDE4MjAsCi0g
ICAgMTgyNiwgIDE4MzAsICAxODM3LCAgMTg0NCwgIDE4NTEsICAxODU4LCAgMTg2OSwgIDE4Nzgs
ICAxODgyLCAgMTg4OSwKLSAgICAxODkyLCAgMTg5OCwgIDE4OTgKLX07Ci0jZW5kaWYKLQotI2lm
IFlZREVCVUcgfHwgWVlFUlJPUl9WRVJCT1NFIHx8IDAKLS8qIFlZVE5BTUVbU1lNQk9MLU5VTV0g
LS0gU3RyaW5nIG5hbWUgb2YgdGhlIHN5bWJvbCBTWU1CT0wtTlVNLgotICAgRmlyc3QsIHRoZSB0
ZXJtaW5hbHMsIHRoZW4sIHN0YXJ0aW5nIGF0IFlZTlRPS0VOUywgbm9udGVybWluYWxzLiAgKi8K
LXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB5eXRuYW1lW10gPQotewotICAiJGVuZCIsICJlcnJv
ciIsICIkdW5kZWZpbmVkIiwgIklOVkFSSUFOVCIsICJISUdIX1BSRUNJU0lPTiIsCi0gICJNRURJ
VU1fUFJFQ0lTSU9OIiwgIkxPV19QUkVDSVNJT04iLCAiUFJFQ0lTSU9OIiwgIkFUVFJJQlVURSIs
Ci0gICJDT05TVF9RVUFMIiwgIkJPT0xfVFlQRSIsICJGTE9BVF9UWVBFIiwgIklOVF9UWVBFIiwg
IkJSRUFLIiwgIkNPTlRJTlVFIiwKLSAgIkRPIiwgIkVMU0UiLCAiRk9SIiwgIklGIiwgIkRJU0NB
UkQiLCAiUkVUVVJOIiwgIkJWRUMyIiwgIkJWRUMzIiwKLSAgIkJWRUM0IiwgIklWRUMyIiwgIklW
RUMzIiwgIklWRUM0IiwgIlZFQzIiLCAiVkVDMyIsICJWRUM0IiwgIk1BVFJJWDIiLAotICAiTUFU
UklYMyIsICJNQVRSSVg0IiwgIklOX1FVQUwiLCAiT1VUX1FVQUwiLCAiSU5PVVRfUVVBTCIsICJV
TklGT1JNIiwKLSAgIlZBUllJTkciLCAiU1RSVUNUIiwgIlZPSURfVFlQRSIsICJXSElMRSIsICJT
QU1QTEVSMkQiLCAiU0FNUExFUkNVQkUiLAotICAiU0FNUExFUl9FWFRFUk5BTF9PRVMiLCAiU0FN
UExFUjJEUkVDVCIsICJJREVOVElGSUVSIiwgIlRZUEVfTkFNRSIsCi0gICJGTE9BVENPTlNUQU5U
IiwgIklOVENPTlNUQU5UIiwgIkJPT0xDT05TVEFOVCIsICJMRUZUX09QIiwgIlJJR0hUX09QIiwK
LSAgIklOQ19PUCIsICJERUNfT1AiLCAiTEVfT1AiLCAiR0VfT1AiLCAiRVFfT1AiLCAiTkVfT1Ai
LCAiQU5EX09QIiwKLSAgIk9SX09QIiwgIlhPUl9PUCIsICJNVUxfQVNTSUdOIiwgIkRJVl9BU1NJ
R04iLCAiQUREX0FTU0lHTiIsCi0gICJNT0RfQVNTSUdOIiwgIkxFRlRfQVNTSUdOIiwgIlJJR0hU
X0FTU0lHTiIsICJBTkRfQVNTSUdOIiwgIlhPUl9BU1NJR04iLAotICAiT1JfQVNTSUdOIiwgIlNV
Ql9BU1NJR04iLCAiTEVGVF9QQVJFTiIsICJSSUdIVF9QQVJFTiIsICJMRUZUX0JSQUNLRVQiLAot
ICAiUklHSFRfQlJBQ0tFVCIsICJMRUZUX0JSQUNFIiwgIlJJR0hUX0JSQUNFIiwgIkRPVCIsICJD
T01NQSIsICJDT0xPTiIsCi0gICJFUVVBTCIsICJTRU1JQ09MT04iLCAiQkFORyIsICJEQVNIIiwg
IlRJTERFIiwgIlBMVVMiLCAiU1RBUiIsICJTTEFTSCIsCi0gICJQRVJDRU5UIiwgIkxFRlRfQU5H
TEUiLCAiUklHSFRfQU5HTEUiLCAiVkVSVElDQUxfQkFSIiwgIkNBUkVUIiwKLSAgIkFNUEVSU0FO
RCIsICJRVUVTVElPTiIsICIkYWNjZXB0IiwgImlkZW50aWZpZXIiLCAidmFyaWFibGVfaWRlbnRp
ZmllciIsCi0gICJwcmltYXJ5X2V4cHJlc3Npb24iLCAicG9zdGZpeF9leHByZXNzaW9uIiwgImlu
dGVnZXJfZXhwcmVzc2lvbiIsCi0gICJmdW5jdGlvbl9jYWxsIiwgImZ1bmN0aW9uX2NhbGxfb3Jf
bWV0aG9kIiwgImZ1bmN0aW9uX2NhbGxfZ2VuZXJpYyIsCi0gICJmdW5jdGlvbl9jYWxsX2hlYWRl
cl9ub19wYXJhbWV0ZXJzIiwKLSAgImZ1bmN0aW9uX2NhbGxfaGVhZGVyX3dpdGhfcGFyYW1ldGVy
cyIsICJmdW5jdGlvbl9jYWxsX2hlYWRlciIsCi0gICJmdW5jdGlvbl9pZGVudGlmaWVyIiwgInVu
YXJ5X2V4cHJlc3Npb24iLCAidW5hcnlfb3BlcmF0b3IiLAotICAibXVsdGlwbGljYXRpdmVfZXhw
cmVzc2lvbiIsICJhZGRpdGl2ZV9leHByZXNzaW9uIiwgInNoaWZ0X2V4cHJlc3Npb24iLAotICAi
cmVsYXRpb25hbF9leHByZXNzaW9uIiwgImVxdWFsaXR5X2V4cHJlc3Npb24iLCAiYW5kX2V4cHJl
c3Npb24iLAotICAiZXhjbHVzaXZlX29yX2V4cHJlc3Npb24iLCAiaW5jbHVzaXZlX29yX2V4cHJl
c3Npb24iLAotICAibG9naWNhbF9hbmRfZXhwcmVzc2lvbiIsICJsb2dpY2FsX3hvcl9leHByZXNz
aW9uIiwKLSAgImxvZ2ljYWxfb3JfZXhwcmVzc2lvbiIsICJjb25kaXRpb25hbF9leHByZXNzaW9u
IiwKLSAgImFzc2lnbm1lbnRfZXhwcmVzc2lvbiIsICJhc3NpZ25tZW50X29wZXJhdG9yIiwgImV4
cHJlc3Npb24iLAotICAiY29uc3RhbnRfZXhwcmVzc2lvbiIsICJkZWNsYXJhdGlvbiIsICJmdW5j
dGlvbl9wcm90b3R5cGUiLAotICAiZnVuY3Rpb25fZGVjbGFyYXRvciIsICJmdW5jdGlvbl9oZWFk
ZXJfd2l0aF9wYXJhbWV0ZXJzIiwKLSAgImZ1bmN0aW9uX2hlYWRlciIsICJwYXJhbWV0ZXJfZGVj
bGFyYXRvciIsICJwYXJhbWV0ZXJfZGVjbGFyYXRpb24iLAotICAicGFyYW1ldGVyX3F1YWxpZmll
ciIsICJwYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIiLAotICAiaW5pdF9kZWNsYXJhdG9yX2xpc3Qi
LCAic2luZ2xlX2RlY2xhcmF0aW9uIiwgImZ1bGx5X3NwZWNpZmllZF90eXBlIiwKLSAgInR5cGVf
cXVhbGlmaWVyIiwgInR5cGVfc3BlY2lmaWVyIiwgInByZWNpc2lvbl9xdWFsaWZpZXIiLAotICAi
dHlwZV9zcGVjaWZpZXJfbm9fcHJlYyIsICJ0eXBlX3NwZWNpZmllcl9ub25hcnJheSIsICJzdHJ1
Y3Rfc3BlY2lmaWVyIiwKLSAgIiRAMSIsICIkQDIiLCAic3RydWN0X2RlY2xhcmF0aW9uX2xpc3Qi
LCAic3RydWN0X2RlY2xhcmF0aW9uIiwKLSAgInN0cnVjdF9kZWNsYXJhdG9yX2xpc3QiLCAic3Ry
dWN0X2RlY2xhcmF0b3IiLCAiaW5pdGlhbGl6ZXIiLAotICAiZGVjbGFyYXRpb25fc3RhdGVtZW50
IiwgInN0YXRlbWVudCIsICJzaW1wbGVfc3RhdGVtZW50IiwKLSAgImNvbXBvdW5kX3N0YXRlbWVu
dCIsICIkQDMiLCAiJEA0IiwgInN0YXRlbWVudF9ub19uZXdfc2NvcGUiLAotICAic3RhdGVtZW50
X3dpdGhfc2NvcGUiLCAiJEA1IiwgIiRANiIsICJjb21wb3VuZF9zdGF0ZW1lbnRfbm9fbmV3X3Nj
b3BlIiwKLSAgInN0YXRlbWVudF9saXN0IiwgImV4cHJlc3Npb25fc3RhdGVtZW50IiwgInNlbGVj
dGlvbl9zdGF0ZW1lbnQiLAotICAic2VsZWN0aW9uX3Jlc3Rfc3RhdGVtZW50IiwgImNvbmRpdGlv
biIsICJpdGVyYXRpb25fc3RhdGVtZW50IiwgIiRANyIsCi0gICIkQDgiLCAiJEA5IiwgImZvcl9p
bml0X3N0YXRlbWVudCIsICJjb25kaXRpb25vcHQiLCAiZm9yX3Jlc3Rfc3RhdGVtZW50IiwKLSAg
Imp1bXBfc3RhdGVtZW50IiwgInRyYW5zbGF0aW9uX3VuaXQiLCAiZXh0ZXJuYWxfZGVjbGFyYXRp
b24iLAotICAiZnVuY3Rpb25fZGVmaW5pdGlvbiIsICIkQDEwIiwgWVlfTlVMTAotfTsKLSNlbmRp
ZgotCi0jIGlmZGVmIFlZUFJJTlQKLS8qIFlZVE9LTlVNW1lZTEVYLU5VTV0gLS0gSW50ZXJuYWwg
dG9rZW4gbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8KLSAgIHRva2VuIFlZTEVYLU5VTS4gICovCi1z
dGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXRva251bVtdID0KLXsKLSAgICAgICAwLCAgIDI1
NiwgICAyNTcsICAgMjU4LCAgIDI1OSwgICAyNjAsICAgMjYxLCAgIDI2MiwgICAyNjMsICAgMjY0
LAotICAgICAyNjUsICAgMjY2LCAgIDI2NywgICAyNjgsICAgMjY5LCAgIDI3MCwgICAyNzEsICAg
MjcyLCAgIDI3MywgICAyNzQsCi0gICAgIDI3NSwgICAyNzYsICAgMjc3LCAgIDI3OCwgICAyNzks
ICAgMjgwLCAgIDI4MSwgICAyODIsICAgMjgzLCAgIDI4NCwKLSAgICAgMjg1LCAgIDI4NiwgICAy
ODcsICAgMjg4LCAgIDI4OSwgICAyOTAsICAgMjkxLCAgIDI5MiwgICAyOTMsICAgMjk0LAotICAg
ICAyOTUsICAgMjk2LCAgIDI5NywgICAyOTgsICAgMjk5LCAgIDMwMCwgICAzMDEsICAgMzAyLCAg
IDMwMywgICAzMDQsCi0gICAgIDMwNSwgICAzMDYsICAgMzA3LCAgIDMwOCwgICAzMDksICAgMzEw
LCAgIDMxMSwgICAzMTIsICAgMzEzLCAgIDMxNCwKLSAgICAgMzE1LCAgIDMxNiwgICAzMTcsICAg
MzE4LCAgIDMxOSwgICAzMjAsICAgMzIxLCAgIDMyMiwgICAzMjMsICAgMzI0LAotICAgICAzMjUs
ICAgMzI2LCAgIDMyNywgICAzMjgsICAgMzI5LCAgIDMzMCwgICAzMzEsICAgMzMyLCAgIDMzMywg
ICAzMzQsCi0gICAgIDMzNSwgICAzMzYsICAgMzM3LCAgIDMzOCwgICAzMzksICAgMzQwLCAgIDM0
MSwgICAzNDIsICAgMzQzLCAgIDM0NCwKLSAgICAgMzQ1LCAgIDM0NiwgICAzNDcsICAgMzQ4LCAg
IDM0OQotfTsKLSMgZW5kaWYKLQotLyogWVlSMVtZWU5dIC0tIFN5bWJvbCBudW1iZXIgb2Ygc3lt
Ym9sIHRoYXQgcnVsZSBZWU4gZGVyaXZlcy4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4
IHl5cjFbXSA9Ci17Ci0gICAgICAgMCwgICAgOTUsICAgIDk2LCAgICA5NiwgICAgOTcsICAgIDk4
LCAgICA5OCwgICAgOTgsICAgIDk4LCAgICA5OCwKLSAgICAgIDk5LCAgICA5OSwgICAgOTksICAg
IDk5LCAgICA5OSwgICAgOTksICAgMTAwLCAgIDEwMSwgICAxMDIsICAgMTAyLAotICAgICAxMDMs
ICAgMTAzLCAgIDEwNCwgICAxMDQsICAgMTA1LCAgIDEwNSwgICAxMDYsICAgMTA3LCAgIDEwNywg
ICAxMDgsCi0gICAgIDEwOCwgICAxMDgsICAgMTA4LCAgIDEwOSwgICAxMDksICAgMTA5LCAgIDEx
MCwgICAxMTAsICAgMTEwLCAgIDExMSwKLSAgICAgMTExLCAgIDExMSwgICAxMTIsICAgMTEzLCAg
IDExMywgICAxMTMsICAgMTEzLCAgIDExMywgICAxMTQsICAgMTE0LAotICAgICAxMTQsICAgMTE1
LCAgIDExNiwgICAxMTcsICAgMTE4LCAgIDExOCwgICAxMTksICAgMTE5LCAgIDEyMCwgICAxMjAs
Ci0gICAgIDEyMSwgICAxMjEsICAgMTIyLCAgIDEyMiwgICAxMjMsICAgMTIzLCAgIDEyMywgICAx
MjMsICAgMTIzLCAgIDEyNCwKLSAgICAgMTI0LCAgIDEyNSwgICAxMjYsICAgMTI2LCAgIDEyNiwg
ICAxMjcsICAgMTI4LCAgIDEyOCwgICAxMjksICAgMTI5LAotICAgICAxMzAsICAgMTMxLCAgIDEz
MSwgICAxMzIsICAgMTMyLCAgIDEzMiwgICAxMzIsICAgMTMzLCAgIDEzMywgICAxMzMsCi0gICAg
IDEzMywgICAxMzQsICAgMTM1LCAgIDEzNSwgICAxMzUsICAgMTM1LCAgIDEzNSwgICAxMzYsICAg
MTM2LCAgIDEzNiwKLSAgICAgMTM2LCAgIDEzNiwgICAxMzYsICAgMTM3LCAgIDEzNywgICAxMzgs
ICAgMTM4LCAgIDEzOCwgICAxMzgsICAgMTM4LAotICAgICAxMzksICAgMTM5LCAgIDE0MCwgICAx
NDAsICAgMTQwLCAgIDE0MSwgICAxNDEsICAgMTQyLCAgIDE0MiwgICAxNDIsCi0gICAgIDE0Miwg
ICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAg
IDE0MiwKLSAgICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQy
LCAgIDE0MiwgICAxNDIsICAgMTQ0LAotICAgICAxNDMsICAgMTQ1LCAgIDE0MywgICAxNDYsICAg
MTQ2LCAgIDE0NywgICAxNDgsICAgMTQ4LCAgIDE0OSwgICAxNDksCi0gICAgIDE1MCwgICAxNTEs
ICAgMTUyLCAgIDE1MiwgICAxNTMsICAgMTUzLCAgIDE1MywgICAxNTMsICAgMTUzLCAgIDE1NCwK
LSAgICAgMTU1LCAgIDE1NiwgICAxNTQsICAgMTU3LCAgIDE1NywgICAxNTksICAgMTU4LCAgIDE2
MCwgICAxNTgsICAgMTYxLAotICAgICAxNjEsICAgMTYyLCAgIDE2MiwgICAxNjMsICAgMTYzLCAg
IDE2NCwgICAxNjUsICAgMTY1LCAgIDE2NiwgICAxNjYsCi0gICAgIDE2OCwgICAxNjcsICAgMTY5
LCAgIDE2NywgICAxNzAsICAgMTY3LCAgIDE3MSwgICAxNzEsICAgMTcyLCAgIDE3MiwKLSAgICAg
MTczLCAgIDE3MywgICAxNzQsICAgMTc0LCAgIDE3NCwgICAxNzQsICAgMTc0LCAgIDE3NSwgICAx
NzUsICAgMTc2LAotICAgICAxNzYsICAgMTc4LCAgIDE3NwotfTsKLQotLyogWVlSMltZWU5dIC0t
IE51bWJlciBvZiBzeW1ib2xzIGNvbXBvc2luZyByaWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4u
ICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIyW10gPQotewotICAgICAgIDAsICAg
ICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDMsCi0gICAgICAgMSwgICAgIDQsICAgICAxLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMywKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAg
MiwgICAgIDMsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLAotICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMywgICAgIDEsCi0g
ICAgICAgMywgICAgIDMsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMs
ICAgICAxLCAgICAgMywKLSAgICAgICAzLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDMsICAgICAxLCAgICAgMywgICAgIDEsICAgICAzLAotICAgICAgIDEsICAgICA1LCAgICAgMSwg
ICAgIDMsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCi0gICAgICAg
MywgICAgIDEsICAgICAyLCAgICAgMiwgICAgIDQsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAy
LCAgICAgMywKLSAgICAgICAzLCAgICAgMiwgICAgIDUsICAgICAzLCAgICAgMiwgICAgIDMsICAg
ICAyLCAgICAgMCwgICAgIDEsICAgICAxLAotICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMs
ICAgICA1LCAgICAgNiwgICAgIDUsICAgICAxLCAgICAgMiwgICAgIDQsCi0gICAgICAgNSwgICAg
IDQsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAg
MSwKLSAgICAgICAxLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICA0LCAg
ICAgMSwgICAgIDEsICAgICAxLAotICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCi0gICAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMCwKLSAg
ICAgICA2LCAgICAgMCwgICAgIDUsICAgICAxLCAgICAgMiwgICAgIDMsICAgICAxLCAgICAgMywg
ICAgIDEsICAgICA0LAotICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDIsCi0gICAgICAgMCwgICAgIDAsICAgICA1LCAg
ICAgMSwgICAgIDEsICAgICAwLCAgICAgMiwgICAgIDAsICAgICAyLCAgICAgMiwKLSAgICAgICAz
LCAgICAgMSwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDUsICAgICAzLCAgICAgMSwgICAgIDEs
ICAgICA0LAotICAgICAgIDAsICAgICA2LCAgICAgMCwgICAgIDgsICAgICAwLCAgICAgNywgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDAsCi0gICAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAzLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMSwKLSAgICAgICAxLCAgICAg
MCwgICAgIDMKLX07Ci0KLS8qIFlZREVGQUNUW1NUQVRFLU5BTUVdIC0tIERlZmF1bHQgcmVkdWN0
aW9uIG51bWJlciBpbiBzdGF0ZSBTVEFURS1OVU0uCi0gICBQZXJmb3JtZWQgd2hlbiBZWVRBQkxF
IGRvZXNuJ3Qgc3BlY2lmeSBzb21ldGhpbmcgZWxzZSB0byBkby4gIFplcm8KLSAgIG1lYW5zIHRo
ZSBkZWZhdWx0IGlzIGFuIGVycm9yLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlk
ZWZhY3RbXSA9Ci17Ci0gICAgICAgMCwgICAgIDAsICAgMTEyLCAgIDExMywgICAxMTQsICAgICAw
LCAgIDEwNiwgICAxMDUsICAgMTIwLCAgIDExOCwKLSAgICAgMTE5LCAgIDEyNCwgICAxMjUsICAg
MTI2LCAgIDEyNywgICAxMjgsICAgMTI5LCAgIDEyMSwgICAxMjIsICAgMTIzLAotICAgICAxMzAs
ICAgMTMxLCAgIDEzMiwgICAxMDksICAgMTA3LCAgICAgMCwgICAxMTcsICAgMTMzLCAgIDEzNCwg
ICAxMzUsCi0gICAgIDEzNiwgICAxMzgsICAgMjAwLCAgIDIwMSwgICAgIDAsICAgIDc3LCAgICA4
NywgICAgIDAsICAgIDkyLCAgICA5NywKLSAgICAgICAwLCAgIDEwMywgICAgIDAsICAgMTEwLCAg
IDExNSwgICAxMzcsICAgICAwLCAgIDE5NywgICAxOTksICAgMTA4LAotICAgICAxMDIsICAgICAw
LCAgICAgMiwgICAgIDMsICAgMTQxLCAgICAgMCwgICAgNzIsICAgICAwLCAgICA3NSwgICAgODcs
Ci0gICAgICAgMCwgICAgODgsICAgIDg5LCAgICA5MCwgICAgNzgsICAgICAwLCAgICA4NywgICAg
IDAsICAgIDczLCAgICAgMiwKLSAgICAgIDk4LCAgIDEwNCwgICAxMTEsICAgICAwLCAgICAgMSwg
ICAxOTgsICAgICAwLCAgICAgMCwgICAxMzksICAgICAwLAotICAgICAyMDIsICAgIDc5LCAgICA4
NCwgICAgODYsICAgIDkxLCAgICAgMCwgICAgOTMsICAgIDgwLCAgICAgMCwgICAgIDAsCi0gICAg
ICAgNCwgICAgIDcsICAgICA2LCAgICAgOCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMzUsICAg
IDM0LCAgICAzMywKLSAgICAgICA1LCAgICAxMCwgICAgMjksICAgIDEyLCAgICAxNywgICAgMTgs
ICAgICAwLCAgICAgMCwgICAgMjMsICAgICAwLAotICAgICAgMzYsICAgICAwLCAgICAzOSwgICAg
NDIsICAgIDQzLCAgICA0OCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsCi0gICAgICA1Niwg
ICAgNTgsICAgIDYwLCAgICA3MSwgICAgIDAsICAgIDI3LCAgICA3NCwgICAgIDAsICAgICAwLCAg
IDE0MywKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgMTgyLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgMTYwLAotICAgICAxNjksICAgMTczLCAgICAzNiwgICAgNjIsICAg
IDY5LCAgICAgMCwgICAxNTEsICAgICAwLCAgIDExNSwgICAxNTQsCi0gICAgIDE3MSwgICAxNTMs
ICAgMTUyLCAgICAgMCwgICAxNTUsICAgMTU2LCAgIDE1NywgICAxNTgsICAgIDgxLCAgICA4MywK
LSAgICAgIDg1LCAgICAgMCwgICAgIDAsICAgIDk5LCAgICAgMCwgICAxNTAsICAgMTAxLCAgICAz
MCwgICAgMzEsICAgICAwLAotICAgICAgMTQsICAgIDE1LCAgICAgMCwgICAgIDAsICAgIDIxLCAg
ICAyMCwgICAgIDAsICAgIDIyLCAgICAyNCwgICAgMjYsCi0gICAgICAzMiwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMTYsICAgMTQ4LCAgICAgMCwgICAx
NDYsICAgMTQyLAotICAgICAxNDQsICAgICAwLCAgIDE5MywgICAxOTIsICAgMTY3LCAgIDE4NCwg
ICAgIDAsICAgMTk2LCAgIDE5NCwgICAgIDAsCi0gICAgIDE4MCwgICAxNTksICAgICAwLCAgICA2
NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjQsICAgICAwLCAgICAgMCwKLSAgICAgMTc0LCAg
IDE3MCwgICAxNzIsICAgICAwLCAgICA5NCwgICAgIDAsICAgIDk2LCAgIDEwMCwgICAgIDksICAg
ICAwLAotICAgICAgMTYsICAgICAyLCAgICAgMywgICAgMTMsICAgIDE5LCAgICAyNSwgICAgMzcs
ICAgIDM4LCAgICA0MSwgICAgNDAsCi0gICAgICA0NiwgICAgNDcsICAgIDQ0LCAgICA0NSwgICAg
NDksICAgIDUwLCAgICA1NSwgICAgNTcsICAgIDU5LCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwg
ICAxNDUsICAgMTQwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTk1LAot
ICAgICAgIDAsICAgMTYxLCAgICA2MywgICAgNzAsICAgICAwLCAgICA5NSwgICAgMTEsICAgICAw
LCAgICAgMCwgICAxNDcsCi0gICAgICAgMCwgICAxNjYsICAgMTY4LCAgIDE4NywgICAxODYsICAg
MTg5LCAgIDE2NywgICAxNzgsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICA4MiwgICAgNjEs
ICAgMTQ5LCAgICAgMCwgICAxODgsICAgICAwLCAgICAgMCwgICAxNzcsICAgMTc1LAotICAgICAg
IDAsICAgICAwLCAgIDE2MiwgICAgIDAsICAgMTkwLCAgICAgMCwgICAxNjcsICAgICAwLCAgIDE2
NCwgICAxODEsCi0gICAgIDE2MywgICAgIDAsICAgMTkxLCAgIDE4NSwgICAxNzYsICAgMTc5LCAg
IDE4MwotfTsKLQotLyogWVlERUZHT1RPW05URVJNLU5VTV0uICAqLwotc3RhdGljIGNvbnN0IHl5
dHlwZV9pbnQxNiB5eWRlZmdvdG9bXSA9Ci17Ci0gICAgICAtMSwgICAxOTYsICAgMTAwLCAgIDEw
MSwgICAxMDIsICAgMjI5LCAgIDEwMywgICAxMDQsICAgMTA1LCAgIDEwNiwKLSAgICAgMTA3LCAg
IDEwOCwgICAxMDksICAgMTQyLCAgIDExMSwgICAxMTIsICAgMTEzLCAgIDExNCwgICAxMTUsICAg
MTE2LAotICAgICAxMTcsICAgMTE4LCAgIDExOSwgICAxMjAsICAgMTIxLCAgIDEyMiwgICAxNDMs
ICAgMTQ0LCAgIDIxOCwgICAxNDUsCi0gICAgIDEyNCwgICAxNDYsICAgMTQ3LCAgICAzNCwgICAg
MzUsICAgIDM2LCAgICA4MiwgICAgNjQsICAgIDY1LCAgICA4MywKLSAgICAgIDM3LCAgICAzOCwg
ICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgIDEyNSwgICAgNDUsICAgMTMwLAot
ICAgICAgNzcsICAgMTI4LCAgIDEyOSwgICAxOTcsICAgMTk4LCAgIDE2NiwgICAxNDksICAgMTUw
LCAgIDE1MSwgICAxNTIsCi0gICAgIDIxMiwgICAyODAsICAgMjk5LCAgIDI1NCwgICAyNTUsICAg
MjU2LCAgIDMwMCwgICAxNTMsICAgMTU0LCAgIDE1NSwKLSAgICAgMjg5LCAgIDI3OSwgICAxNTYs
ICAgMjYwLCAgIDIwNCwgICAyNTcsICAgMjc1LCAgIDI4NiwgICAyODcsICAgMTU3LAotICAgICAg
NDYsICAgIDQ3LCAgICA0OCwgICAgNTcKLX07Ci0KLS8qIFlZUEFDVFtTVEFURS1OVU1dIC0tIElu
ZGV4IGluIFlZVEFCTEUgb2YgdGhlIHBvcnRpb24gZGVzY3JpYmluZwotICAgU1RBVEUtTlVNLiAg
Ki8KLSNkZWZpbmUgWVlQQUNUX05JTkYgLTI2MQotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5
eXBhY3RbXSA9Ci17Ci0gICAgMTMyNywgICAtMjAsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgMTEz
LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwKLSAgICAtMjYxLCAgLTI2MSwgIC0yNjEsICAt
MjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgIC0xOSwgIC0yNjEsICAtMjYxLCAgLTI2MSwg
IC0yNjEsCi0gICAgLTI2MSwgIC0yNjEsICAtMjYxLCAgIC02MSwgICAtNDAsICAgLTI4LCAgICA3
NSwgICAgLTcsICAtMjYxLCAgICAyNCwKLSAgICAxMzcwLCAgLTI2MSwgIDE0NDQsICAtMjYxLCAg
IC0xMSwgIC0yNjEsICAxMjgzLCAgLTI2MSwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAxNDQ0
LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgICAgNiwgIC0yNjEsICAgIDU0LCAgLTI2MSwgICAgODgs
Ci0gICAgICA2MiwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAxMzcwLCAgICA1OSwgICAg
OTEsICAtMjYxLCAgICAzNiwKLSAgICAgLTUwLCAgLTI2MSwgIC0yNjEsICAxMDUxLCAgLTI2MSwg
IC0yNjEsICAgIDYzLCAgMTM3MCwgIC0yNjEsICAgMjkzLAotICAgIC0yNjEsICAtMjYxLCAgLTI2
MSwgIC0yNjEsICAgIDkxLCAgMTM3MCwgICAtMTIsICAtMjYxLCAgIDg1NiwgIDEwNTEsCi0gICAg
ICA3NywgIC0yNjEsICAtMjYxLCAgLTI2MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIC0yNjEsICAt
MjYxLCAgLTI2MSwKLSAgICAtMjYxLCAgLTI2MSwgICAtMTQsICAtMjYxLCAgLTI2MSwgIC0yNjEs
ICAgIDg0LCAgIC00NCwgIDExMTYsICAgIDk1LAotICAgIC0yNjEsICAxMDUxLCAgICA1MywgICAg
IDMsICAtMjYxLCAgIC0zNiwgICAgODksICAtMjYxLCAgLTI2MSwgIC0yNjEsCi0gICAgIDEwNCwg
ICAxMDcsICAgLTQ1LCAgLTI2MSwgICAgOTYsICAtMjYxLCAgLTI2MSwgICAgOTEsICAxMTg0LCAg
LTI2MSwKLSAgICAxMzcwLCAgICA5MiwgICAgOTMsICAtMjYxLCAgICA5OCwgICAxMDEsICAgIDk0
LCAgIDkyMSwgICAxMDUsICAgMTAyLAotICAgIC0yNjEsICAtMjYxLCAgICA3MiwgIC0yNjEsICAt
MjYxLCAgICAgOSwgIC0yNjEsICAgLTYxLCAgICA0MiwgIC0yNjEsCi0gICAgLTI2MSwgIC0yNjEs
ICAtMjYxLCAgIDM3NiwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgMTA2LCAgLTI2MSwK
LSAgICAtMjYxLCAgIDk4NiwgIDEwNTEsICAtMjYxLCAgIDEwMywgIC0yNjEsICAtMjYxLCAgLTI2
MSwgIC0yNjEsICAgLTQxLAotICAgIC0yNjEsICAtMjYxLCAgMTA1MSwgIDE0MDcsICAtMjYxLCAg
LTI2MSwgIDEwNTEsICAgMTEwLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2MSwgIDEwNTEsICAxMDUx
LCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwKLSAgICAx
MDUxLCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIC0yNjEsICAgMTA5LCAgICAyMywgIC0y
NjEsICAtMjYxLAotICAgIC0yNjEsICAxMjI3LCAgLTI2MSwgIC0yNjEsICAgMTExLCAgLTI2MSwg
IDEwNTEsICAtMjYxLCAgLTI2MSwgICAgMjUsCi0gICAgLTI2MSwgIC0yNjEsICAgNDU5LCAgLTI2
MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAxMDUxLCAgMTA1MSwKLSAgICAtMjYxLCAg
LTI2MSwgIC0yNjEsICAxMDUxLCAgLTI2MSwgICAxMTQsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAg
MTE1LAotICAgICAxMTIsICAgIDc3LCAgIDExNiwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEs
ICAtMjYxLCAgICA1MywgICAgNTMsCi0gICAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAt
MzYsICAgLTM2LCAgLTI2MSwgICAxMDQsICAgMTA3LCAgICA3NiwKLSAgICAxMDUxLCAgICA5MSwg
IC0yNjEsICAtMjYxLCAgIDE0NSwgICAgNTQsICAgNjI1LCAgIDcwOCwgICAgLTYsICAtMjYxLAot
ICAgICA3OTEsICAgNDU5LCAgLTI2MSwgIC0yNjEsICAgMTE3LCAgLTI2MSwgIC0yNjEsICAxMDUx
LCAgIDEyMCwgIC0yNjEsCi0gICAgIDEyNCwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAg
NzkxLCAgIDExMSwgICAxMTIsICAgIDkxLCAgIDEyNSwKLSAgICAgMTIyLCAgLTI2MSwgIC0yNjEs
ICAtMjYxLCAgMTA1MSwgIC0yNjEsICAgMTE4LCAgIDEyOCwgICAxODAsICAtMjYxLAotICAgICAx
MjYsICAgNTQyLCAgLTI2MSwgICAgLTUsICAxMDUxLCAgIDU0MiwgICAxMTEsICAxMDUxLCAgLTI2
MSwgIC0yNjEsCi0gICAgLTI2MSwgICAxMjMsICAgMTEyLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAg
LTI2MQotfTsKLQotLyogWVlQR09UT1tOVEVSTS1OVU1dLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5
cGVfaW50MTYgeXlwZ290b1tdID0KLXsKLSAgICAtMjYxLCAgIC0yNCwgIC0yNjEsICAtMjYxLCAg
LTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAgMzQsICAtMjYxLAotICAgIC0yNjEsICAtMjYx
LCAgLTI2MSwgICAgMzIsICAtMjYxLCAgIC0zMywgIC0yNjEsICAgLTI3LCAgIC0yNiwgIC0yNjEs
Ci0gICAgLTI2MSwgIC0yNjEsICAgIDE0LCAgICAxNiwgICAgMTgsICAtMjYxLCAgIC02NiwgICAt
ODcsICAtMjYxLCAgIC05MiwKLSAgICAgLTg1LCAgICAxMSwgICAgMTIsICAtMjYxLCAgLTI2MSwg
IC0yNjEsICAgMTQxLCAgIDE1MCwgICAxNjEsICAgMTQzLAotICAgIC0yNjEsICAtMjYxLCAgLTIz
MSwgICAgIDUsICAgLTMwLCAgIDIyNCwgICAtMTgsICAgICAwLCAgLTI2MSwgIC0yNjEsCi0gICAg
LTI2MSwgICAxMDAsICAtMTE5LCAgLTI2MSwgICAtMTcsICAtMTU2LCAgIC0yNSwgIC0xNDUsICAt
MjQzLCAgLTI2MSwKLSAgICAtMjYxLCAgLTI2MSwgICAtNjQsICAtMjYwLCAgLTI2MSwgIC0yNjEs
ICAgLTUyLCAgICAyMSwgICAtMjIsICAtMjYxLAotICAgIC0yNjEsICAgLTM5LCAgLTI2MSwgIC0y
NjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2MSwg
ICAxOTEsICAtMjYxLCAgLTI2MQotfTsKLQotLyogWVlUQUJMRVtZWVBBQ1RbU1RBVEUtTlVNXV0u
ICBXaGF0IHRvIGRvIGluIHN0YXRlIFNUQVRFLU5VTS4gIElmCi0gICBwb3NpdGl2ZSwgc2hpZnQg
dGhhdCB0b2tlbi4gIElmIG5lZ2F0aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hpY2gKLSAgIG51bWJl
ciBpcyB0aGUgb3Bwb3NpdGUuICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci4gICovCi0j
ZGVmaW5lIFlZVEFCTEVfTklORiAtMTY2Ci1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5dGFi
bGVbXSA9Ci17Ci0gICAgICA0NCwgICAgNTUsICAgMTY1LCAgIDE2NCwgICAxNjksICAgIDgwLCAg
IDIyNiwgICAxMjMsICAgMjIyLCAgIDIwMCwKLSAgICAgIDcxLCAgICAzMiwgICAgMzMsICAgMjcy
LCAgIDE5MywgICAgNzAsICAgMjg4LCAgICA0OSwgICAxODUsICAgMTg2LAotICAgICAgNTYsICAg
MTc4LCAgIDEyMywgICAgODgsICAgIDcyLCAgICA1MCwgICAgNTIsICAgIDUzLCAgIDE3NSwgICAy
NzgsCi0gICAgICA4OSwgICAyMjgsICAgIDU4LCAgICA3NiwgICAxNzYsICAgIDg0LCAgIDMwNCwg
ICAyMTksICAgMTcwLCAgIDE3MSwKLSAgICAgIDQ0LCAgICA2NiwgICAgNDQsICAgIDg2LCAgIDI3
OCwgICAyMDksICAgIDQ0LCAgIDEyNywgICAyOTgsICAgMTk0LAotICAgICAgNTksICAgIDQ0LCAg
IDI5OCwgICAxODcsICAgMTg4LCAgICA4NCwgICAgNTQsICAgIDMyLCAgICAzMywgICAxNzIsCi0g
ICAgIDE1OCwgICAxNjEsICAgIDczLCAgIDE3MywgICAgNjYsICAgIDQ0LCAgIDI3NiwgICAzMDEs
ICAgMTYyLCAgICA2OSwKLSAgICAgIDUzLCAgICA2NywgICAyMTksICAgMjE5LCAgICA2OCwgICAx
NjUsICAgMjI1LCAgICA0NCwgICAgNjAsICAgMTQ4LAotICAgICAyMzAsICAgIDc4LCAgIDIwMCwg
ICAgIDYsICAgICA3LCAgICA0NCwgICAxODMsICAgMjE5LCAgIDE4NCwgICAyMzUsCi0gICAgIDIy
MCwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgMTIzLCAgICAgNiwgICAgIDcsICAgMTI3
LCAgICA0OSwKLSAgICAgMTI3LCAgIDI1MSwgICAyNDksICAgMjE5LCAgIDI1MiwgICAxMTAsICAg
MjU5LCAgICA4NywgICAgNjEsICAgIDYyLAotICAgICAgNjMsICAgIDIzLCAgICAyNCwgICAtMjcs
ICAgMjU4LCAgICA3MywgICAyMjIsICAgICAyLCAgICAgMywgICAgIDQsCi0gICAgIDExMCwgICAg
NjEsICAgIDYyLCAgICA2MywgICAgMjMsICAgIDI0LCAgIDE2NywgICAxNjgsICAgIDQ0LCAgICA3
OSwKLSAgICAgIDQ0LCAgIDI2MiwgICAyNjMsICAgMjEzLCAgIDIxNCwgICAyMTUsICAgIDUyLCAg
ICA1MywgICAyNjQsICAgMTgxLAotICAgICAxODIsICAgMzA1LCAgIDIxNiwgICAxODAsICAgMTI2
LCAgIDE4OSwgICAxOTAsICAgLTc2LCAgIC0yOCwgICAyMzMsCi0gICAgIDIzOCwgICAyMzksICAg
MjE3LCAgIDE0OCwgICAyMTksICAgMjY3LCAgIDE3NCwgICAxMjMsICAgMjQwLCAgIDI0MSwKLSAg
ICAgMjQyLCAgIDI0MywgICAxOTEsICAgMjQ0LCAgIDI0NSwgICAyNjgsICAgMTc5LCAgIDE5Miwg
ICAyNzcsICAgMjA1LAotICAgICAxOTUsICAgMTI3LCAgIDIwNiwgICAyMDIsICAgMjAzLCAgIDIw
NywgICAyMTAsICAgMjI3LCAgIDIxMSwgICAyMjMsCi0gICAgIDI4MiwgIC0xMTcsICAgMjUwLCAg
IDI3NywgICAxMjMsICAgMjcwLCAgLTE2NSwgIC0xMzgsICAgMjY1LCAgIDI2NiwKLSAgICAgMjE5
LCAgIDI4MSwgICAyOTMsICAgMTEwLCAgIDI4MywgICAyODQsICAgMjk2LCAgIDI5MSwgICAyOTIs
ICAgMjk0LAotICAgICAyOTUsICAgIDQ0LCAgIDMwMiwgICAyNzEsICAgMzA2LCAgIDI0NiwgICAy
OTcsICAgMjM0LCAgIDI0NywgICAgODEsCi0gICAgIDE2NSwgICAyNDgsICAgMTQ4LCAgIDIzNiwg
ICAyMzcsICAgMTEwLCAgIDExMCwgICAxMTAsICAgMTEwLCAgIDExMCwKLSAgICAgMTEwLCAgIDEx
MCwgICAxMTAsICAgMTEwLCAgIDExMCwgICAxMTAsICAgMTU5LCAgICA4NSwgICAxNjAsICAgIDUx
LAotICAgICAyMDEsICAgMzAzLCAgIDI3MywgICAyNjEsICAgMjY5LCAgIDI3NCwgICAyODUsICAg
IDc1LCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgIDI5MCwgICAxMTAsICAgMTQ4LCAgIDE0OCwgICAgIDAsICAgICAwLAotICAg
ICAxNDgsICAgMTQ4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ4
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAxMTAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAs
ICAgMTQ4LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0OCwgICAgIDEsICAgICAyLCAgICAgMywg
ICAgIDQsCi0gICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgIDEz
MSwgICAxMzIsICAgMTMzLCAgICAgMCwKLSAgICAgMTM0LCAgIDEzNSwgICAxMzYsICAgMTM3LCAg
ICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAotICAgICAgMTcsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMs
Ci0gICAgICAyNCwgICAgMjUsICAgIDI2LCAgIDEzOCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAg
MzAsICAgIDkwLCAgICAzMSwKLSAgICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwg
ICAgOTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwgICAgIDAsICAg
MTM5LCAgIDE0MCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0MSwgICAgOTcs
ICAgIDk4LCAgICAgMCwgICAgOTksICAgICAxLAotICAgICAgIDIsICAgICAzLCAgICAgNCwgICAg
IDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAxMzEsCi0gICAgIDEzMiwg
ICAxMzMsICAgICAwLCAgIDEzNCwgICAxMzUsICAgMTM2LCAgIDEzNywgICAgMTEsICAgIDEyLCAg
ICAxMywKLSAgICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIw
LCAgICAyMSwgICAgMjIsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAyMywgICAgMjQsICAg
IDI1LCAgICAyNiwgICAxMzgsICAgIDI3LCAgICAyOCwgICAgMjksCi0gICAgICAzMCwgICAgOTAs
ICAgIDMxLCAgICA5MSwgICAgOTIsICAgIDkzLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICA5NSwK
LSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAxMzksICAgMjIx
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDEsICAgIDk3LCAgICA5OCwKLSAgICAg
ICAwLCAgICA5OSwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAg
IDcsICAgICA4LAotICAgICAgIDksICAgIDEwLCAgIDEzMSwgICAxMzIsICAgMTMzLCAgICAgMCwg
ICAxMzQsICAgMTM1LCAgIDEzNiwgICAxMzcsCi0gICAgICAxMSwgICAgMTIsICAgIDEzLCAgICAx
NCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwKLSAgICAgIDIxLCAg
ICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAg
MTM4LAotICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEs
ICAgIDkyLCAgICA5MywgICAgIDAsCi0gICAgICAgMCwgICAgOTQsICAgIDk1LCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAot
ICAgICAgOTYsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTM5LCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsCi0gICAgIDE0MSwgICAgOTcsICAgIDk4LCAgICAgMCwgICAgOTksICAg
ICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgNSwKLSAgICAgICA2LCAgICAgNywgICAgIDgs
ICAgICA5LCAgICAxMCwgICAxMzEsICAgMTMyLCAgIDEzMywgICAgIDAsICAgMTM0LAotICAgICAx
MzUsICAgMTM2LCAgIDEzNywgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAx
NiwgICAgMTcsCi0gICAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgIDIzLCAgICAyNCwKLSAgICAgIDI1LCAgICAyNiwgICAxMzgsICAgIDI3
LCAgICAyOCwgICAgMjksICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLAotICAgICAgOTIsICAg
IDkzLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICA5NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk2LCAgICAg
MCwgICAgIDAsICAgICAwLCAgICA3OSwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAg
ICAgMCwgICAxNDEsICAgIDk3LCAgICA5OCwgICAgIDAsICAgIDk5LCAgICAgMSwgICAgIDIsCi0g
ICAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAs
ICAgMTMxLCAgIDEzMiwKLSAgICAgMTMzLCAgICAgMCwgICAxMzQsICAgMTM1LCAgIDEzNiwgICAx
MzcsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LAotICAgICAgMTUsICAgIDE2LCAgICAxNywg
ICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsCi0gICAgICAg
MCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgMTM4LCAgICAyNywgICAgMjgsICAgIDI5
LCAgICAzMCwKLSAgICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAsICAg
ICAwLCAgICA5NCwgICAgOTUsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLCAgICAg
MCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQxLCAg
ICA5NywgICAgOTgsICAgICAwLAotICAgICAgOTksICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0
LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksCi0gICAgICAxMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwKLSAg
ICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwg
ICAgMjAsICAgIDIxLAotICAgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAy
NCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsCi0gICAgICAyOCwgICAgMjksICAgIDMwLCAg
ICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwKLSAgICAgIDk0
LCAgICA5NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgOTYsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0MSwKLSAgICAgIDk3LCAgICA5
OCwgICAgIDAsICAgIDk5LCAgICA2MCwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDAsICAgICA2
LAotICAgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwgICAgMTMs
ICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKLSAgICAgIDE5LCAgICAyMCwgICAg
MjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywgICAgMjQsICAgIDI1LAotICAg
ICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAsICAgIDMxLCAg
ICA5MSwgICAgOTIsCi0gICAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAs
ICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAgICAxMCwg
ICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NywgICAgOTgsICAgICAwLCAgICA5
OSwgICAgMTEsICAgIDEyLCAgICAxMywKLSAgICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAg
ICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLAotICAgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjks
Ci0gICAgICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwgICAgOTIsICAgIDkzLCAgICAgMCwgICAg
IDAsICAgIDk0LCAgICA5NSwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAsCi0gICAg
IDE2MywgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
IDk3LCAgICA5OCwKLSAgICAgICAwLCAgICA5OSwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQs
ICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAotICAgICAgMTksICAgIDIwLCAgICAyMSwgICAg
MjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjUsCi0gICAgICAyNiwg
ICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAg
ICA5MiwKLSAgICAgIDkzLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICA5NSwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAs
ICAgIDk2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwK
LSAgICAgICAwLCAgICAgMCwgICAyMDgsICAgIDk3LCAgICA5OCwgICAgIDAsICAgIDk5LCAgICAx
MSwgICAgMTIsICAgIDEzLAotICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAg
ICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwKLSAgICAg
IDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAg
OTQsICAgIDk1LAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwKLSAgICAgMjI0LCAg
ICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTcsICAg
IDk4LAotICAgICAgIDAsICAgIDk5LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUs
ICAgIDE2LCAgICAxNywgICAgMTgsCi0gICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwKLSAgICAgIDI2LCAgICAgMCwg
ICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLAot
ICAgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgOTYs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLAotICAgICAg
IDAsICAgICAwLCAgICAgMCwgICAgOTcsICAgIDk4LCAgICAgMCwgICAgOTksICAgIDExLCAgICAx
MiwgICAgMTMsCi0gICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAyNSwgICAxNzcsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAg
IDkwLCAgICAzMSwgICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAg
OTUsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDIsICAgICAzLAotICAgICAgIDQsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICA5NywgICAgOTgsCi0g
ICAgICAgMCwgICAgOTksICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwgICAgMTMs
ICAgIDE0LCAgICAxNSwKLSAgICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
MjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAyNSwg
ICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgIDAsCi0gICAgICAz
MSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5
LCAgICAxMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgMTEsICAgIDEyLAotICAgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYs
ICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCi0gICAgIDE5OSwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAy
OCwKLSAgICAgIDI5LCAgICAzMCwgICAgIDAsICAgIDMxLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgNzQsICAgICAw
LCAgICAgMCwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsCi0gICAgICAgNSwgICAgIDYsICAg
ICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAg
ICAgICAwLCAgICAgMCwgICAgIDAsICAgMjUzLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwg
ICAgMTUsICAgIDE2LAotICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAy
MiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsCi0gICAgICAyNCwgICAgMjUsICAgIDI2LCAg
ICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgICAwLCAgICAzMSwKLSAgICAgICAx
LCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDks
ICAgIDEwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAxMSwgICAgMTIsCi0gICAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKLSAgICAgICAwLCAgICAg
MCwgICAgIDAsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4
LAotICAgICAgMjksICAgIDMwLCAgICAgMCwgICAgMzEsICAgICAyLCAgICAgMywgICAgIDQsICAg
ICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAxMSwgICAg
MTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LAotICAg
ICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAyNSwgICAgMjYsCi0gICAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgICAw
LCAgICAzMSwgICAgIDgsICAgICA5LCAgICAxMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTEsICAgIDEyLAotICAgICAgMTMs
ICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwg
ICAgMjIsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI1LCAgICAy
NiwgICAgIDAsICAgIDI3LCAgICAyOCwKLSAgICAgIDI5LCAgICAzMCwgICAyMzEsICAgMjMyLCAg
ICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUs
Ci0gICAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAg
IDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgMjUsICAgIDI2LCAgICAgMCwg
ICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgICAwLAotICAgICAgMzEKLX07Ci0KLSNkZWZp
bmUgeXlwYWN0X3ZhbHVlX2lzX2RlZmF1bHQoWXlzdGF0ZSkgXAotICAoISEoKFl5c3RhdGUpID09
ICgtMjYxKSkpCi0KLSNkZWZpbmUgeXl0YWJsZV92YWx1ZV9pc19lcnJvcihZeXRhYmxlX3ZhbHVl
KSBcCi0gIFlZSUQgKDApCi0KLXN0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXljaGVja1tdID0K
LXsKLSAgICAgICAwLCAgICAyNSwgICAgODksICAgIDg4LCAgICA5NiwgICAgNTcsICAgMTYyLCAg
ICA3MywgICAxNTMsICAgMTI4LAotICAgICAgNDAsICAgICAwLCAgICAgMCwgICAyNTYsICAgIDU5
LCAgICAzOSwgICAyNzYsICAgIDM3LCAgICA1NCwgICAgNTUsCi0gICAgICA4MSwgICAxMDgsICAg
IDg4LCAgICA3MywgICAgNDIsICAgIDQ1LCAgICA0NSwgICAgNDYsICAgIDcyLCAgIDI2MCwKLSAg
ICAgIDgwLCAgICA3MiwgICAgNzIsICAgIDUxLCAgICA3OCwgICAgNjUsICAgMjk2LCAgICA3OCwg
ICAgNTIsICAgIDUzLAotICAgICAgNDAsICAgIDM2LCAgICA0MiwgICAgNjcsICAgMjc1LCAgIDEz
NywgICAgNDYsICAgIDc3LCAgIDI5MSwgICAgOTQsCi0gICAgICA3OCwgICAgNTEsICAgMjk1LCAg
ICA4OSwgICAgOTAsICAgIDg1LCAgICA3NSwgICAgNDYsICAgIDQ2LCAgICA3MywKLSAgICAgIDg0
LCAgICA3MywgICAgNzMsICAgIDc3LCAgICA1OSwgICAgNjUsICAgIDcyLCAgICA3MiwgICAgODAs
ICAgIDQ1LAotICAgICAgNDYsICAgIDc4LCAgICA3OCwgICAgNzgsICAgIDgxLCAgIDE2MiwgICAx
NjEsICAgIDc3LCAgICAgMywgICAgNzksCi0gICAgIDE3MiwgICAgNzUsICAgMjAxLCAgICAgOCwg
ICAgIDksICAgIDg1LCAgICA4MywgICAgNzgsICAgIDg1LCAgIDE3NiwKLSAgICAgIDgxLCAgICAg
MywgICAgMzMsICAgIDM0LCAgICAzNSwgICAxNjEsICAgICA4LCAgICAgOSwgICAxMjgsICAgIDM3
LAotICAgICAxMzAsICAgIDc4LCAgIDE5NCwgICAgNzgsICAgIDgxLCAgICA3MywgICAgODEsICAg
IDcxLCAgICAzMywgICAgMzQsCi0gICAgICAzNSwgICAgMzYsICAgIDM3LCAgICA3MSwgICAyMDYs
ICAgIDczLCAgIDI2MSwgICAgIDQsICAgICA1LCAgICAgNiwKLSAgICAgIDg4LCAgICAzMywgICAg
MzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDk0LCAgICA5NSwgICAxMjgsICAgIDc1LAotICAg
ICAxMzAsICAgMjE4LCAgIDIxOSwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNDUsICAgIDQ2LCAg
IDIyMywgICAgODYsCi0gICAgICA4NywgICAyOTcsICAgIDcwLCAgIDExMSwgICAgODEsICAgIDU2
LCAgICA1NywgICAgNzIsICAgIDcxLCAgIDE3MywKLSAgICAgMTgzLCAgIDE4NCwgICAgODAsICAg
MTUzLCAgICA3OCwgICAgNzksICAgIDcyLCAgIDIyMywgICAxODUsICAgMTg2LAotICAgICAxODcs
ICAgMTg4LCAgICA1OCwgICAxODksICAgMTkwLCAgIDI1MCwgICAgNzEsICAgIDYwLCAgIDI2MCwg
ICAgNzEsCi0gICAgICA3NCwgICAyMDEsICAgIDcxLCAgICA4MSwgICAgODEsICAgIDgxLCAgICA3
MSwgICAgNzQsICAgIDc2LCAgICA3MywKLSAgICAgMjY3LCAgICA3MSwgICAgNzMsICAgMjc1LCAg
IDI1MCwgICAgNDAsICAgIDc1LCAgICA3MSwgICAgNzQsICAgIDc0LAotICAgICAgNzgsICAgIDc0
LCAgIDI4NCwgICAxNjEsICAgIDc0LCAgICA3MSwgICAgMTYsICAgIDcyLCAgICA3NiwgICAgODEs
Ci0gICAgICA3MiwgICAyMDEsICAgMjk0LCAgIDI1NSwgICAgODEsICAgMTkxLCAgICA4MCwgICAx
NzMsICAgMTkyLCAgICA1OSwKLSAgICAgMjk3LCAgIDE5MywgICAyMTIsICAgMTgxLCAgIDE4Miwg
ICAxODMsICAgMTg0LCAgIDE4NSwgICAxODYsICAgMTg3LAotICAgICAxODgsICAgMTg5LCAgIDE5
MCwgICAxOTEsICAgMTkyLCAgIDE5MywgICAgODUsICAgIDY2LCAgICA4NSwgICAgIDUsCi0gICAg
IDEzMCwgICAyOTUsICAgMjU3LCAgIDIxMiwgICAyNTEsICAgMjU3LCAgIDI3NSwgICAgNDYsICAg
IC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgMjc4LCAgIDIyMywgICAyNTYsICAgMjU3LCAgICAtMSwgICAgLTEsCi0gICAgIDI2MCwg
ICAyNjEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAyNzUsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgIDI1MCwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAyOTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgMjk1LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwK
LSAgICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAx
NCwgICAgMTUsICAgIC0xLAotICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAg
ICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCi0gICAgICAyNywgICAgMjgsICAgIDI5
LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzNiwKLSAgICAg
IDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAg
NDUsICAgIDQ2LAotICAgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIC0xLCAgICA1Miwg
ICAgNTMsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzUsICAg
IDc2LAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgxLCAgICA4MiwgICAgODMs
ICAgIC0xLCAgICA4NSwgICAgIDMsCi0gICAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAg
IDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywKLSAgICAgIDE0LCAgICAxNSwg
ICAgLTEsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLAot
ICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMx
LCAgICAzMiwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgsICAg
IDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywKLSAgICAgIDQ0LCAgICA0NSwgICAgNDYs
ICAgIDQ3LCAgICA0OCwgICAgNDksICAgIC0xLCAgICAtMSwgICAgNTIsICAgIDUzLAotICAgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgNzEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICA3NSwgICAgNzYsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MSwgICAgODIsICAgIDgzLAotICAgICAgLTEsICAg
IDg1LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAg
MTAsCi0gICAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIC0xLCAgICAxNywg
ICAgMTgsICAgIDE5LCAgICAyMCwKLSAgICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAy
NSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLAotICAgICAgMzEsICAgIDMyLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsCi0g
ICAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgs
ICAgIDQ5LCAgICAtMSwKLSAgICAgIC0xLCAgICA1MiwgICAgNTMsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICA3
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwKLSAgICAgIDgxLCAgICA4MiwgICAgODMsICAgIC0xLCAgICA4NSwgICAgIDMsICAg
ICA0LCAgICAgNSwgICAgIDYsICAgICA3LAotICAgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEs
ICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAtMSwgICAgMTcsCi0gICAgICAxOCwgICAg
MTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAy
NywKLSAgICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgMzYsICAgIDM3LAotICAgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQy
LCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsCi0gICAgICA0OCwgICAgNDksICAg
IC0xLCAgICAtMSwgICAgNTIsICAgIDUzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAg
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDc1LCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICA4MSwgICAgODIsICAgIDgzLCAgICAtMSwgICAgODUsICAgICAzLCAgICAgNCwKLSAgICAgICA1
LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMs
ICAgIDE0LAotICAgICAgMTUsICAgIC0xLCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
MjEsICAgIDIyLCAgICAyMywgICAgMjQsCi0gICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwg
ICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAz
NiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0
LAotICAgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgLTEsICAg
IDUyLCAgICA1MywgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODEsICAgIDgyLCAg
ICA4MywgICAgLTEsCi0gICAgICA4NSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3
LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwKLSAgICAgIDEyLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIxLAotICAgICAgMjIs
ICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwg
ICAgMzEsCi0gICAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDM3LCAgICAz
OCwgICAgMzksICAgIC0xLCAgICA0MSwKLSAgICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAg
ICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIC0xLAotICAgICAgNTIsICAgIDUz
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
Ci0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICA3MSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgxLAotICAgICAgODIsICAgIDgzLCAgICAt
MSwgICAgODUsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAtMSwgICAgIDgsCi0gICAg
ICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQs
ICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LAotICAgICAgMjksICAgIDMwLCAgICAzMSwgICAg
MzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgsCi0gICAgICAzOSwg
ICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAg
ICA0OCwKLSAgICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEs
ICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwK
LSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgyLCAgICA4MywgICAgLTEsICAgIDg1LCAgICAy
MSwgICAgMjIsICAgIDIzLAotICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAg
ICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywKLSAgICAg
IDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIC0xLCAgICAtMSwgICAg
NTIsICAgIDUzLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAtMSwKLSAgICAgIDc0LCAg
ICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODIsICAg
IDgzLAotICAgICAgLTEsICAgIDg1LCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUs
ICAgIDI2LCAgICAyNywgICAgMjgsCi0gICAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwKLSAgICAgIDM5LCAgICAtMSwg
ICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LAot
ICAgICAgNDksICAgIC0xLCAgICAtMSwgICAgNTIsICAgIDUzLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgNzEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLAotICAgICAg
LTEsICAgIC0xLCAgICA4MSwgICAgODIsICAgIDgzLCAgICAtMSwgICAgODUsICAgIDIxLCAgICAy
MiwgICAgMjMsCi0gICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAg
ICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQzLAotICAgICAgNDQsICAg
IDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAg
NTMsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLAotICAgICAgNzQsICAgIDEwLCAg
ICAxMSwgICAgMTIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MiwgICAgODMsCi0g
ICAgICAtMSwgICAgODUsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYs
ICAgIDI3LCAgICAyOCwKLSAgICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LAotICAgICAgMzksICAgIC0xLCAgICA0MSwg
ICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsCi0gICAgICA0
OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsCi0gICAgICAtMSwgICAg
LTEsICAgIC0xLCAgICA4MiwgICAgODMsICAgIC0xLCAgICA4NSwgICAgMjEsICAgIDIyLCAgICAy
MywKLSAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAg
ICAzMSwgICAgMzIsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4
LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsCi0gICAgICA0NCwgICAgNDUsICAg
IDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywKLSAg
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDcxLCAgICAgNCwgICAgIDUsCi0gICAgICAgNiwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIDgyLCAgICA4MywKLSAgICAgIC0x
LCAgICA4NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQs
ICAgIDI1LAotICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAg
MzIsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwg
ICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICAtMSwKLSAgICAgIDQ2LCAgICAg
NCwgICAgIDUsICAgICA2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxMCwgICAgMTEsICAgIDEy
LAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAyMSwgICAgMjIsCi0gICAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcs
ICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwKLSAgICAgIDc2LCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLAotICAg
ICAgNDMsICAgIDQ0LCAgICAtMSwgICAgNDYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMCwgICAgLTEsICAgIC0x
LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwKLSAgICAgICA3LCAgICAgOCwgICAgIDksICAg
IDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgNzYsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwg
ICAgMjYsCi0gICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAzNiwKLSAgICAgIDM3LCAgICAzOCwgICAgMzksICAgIC0xLCAg
ICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgLTEsICAgIDQ2LAotICAgICAgIDMsICAgICA0
LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIs
Ci0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDIxLCAgICAyMiwKLSAgICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywg
ICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLAotICAgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsCi0gICAg
ICA0MywgICAgNDQsICAgIC0xLCAgICA0NiwgICAgIDQsICAgICA1LCAgICAgNiwgICAgLTEsICAg
IC0xLCAgICAtMSwKLSAgICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIDIxLCAgICAyMiwgICAg
MjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCi0gICAgICAzMCwg
ICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAg
ICAzOSwKLSAgICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgLTEsICAgIDQ2
LCAgICAxMCwgICAgMTEsICAgIDEyLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsCi0gICAgICAyMywgICAgMjQs
ICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwK
LSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAt
MSwgICAgNDEsICAgIDQyLAotICAgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDEwLCAg
ICAxMSwgICAgMTIsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwKLSAgICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAg
LTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwg
ICAgNDIsICAgIDQzLCAgICA0NCwgICAgLTEsCi0gICAgICA0NgotfTsKLQotLyogWVlTVE9TW1NU
QVRFLU5VTV0gLS0gVGhlIChpbnRlcm5hbCBudW1iZXIgb2YgdGhlKSBhY2Nlc3NpbmcKLSAgIHN5
bWJvbCBvZiBzdGF0ZSBTVEFURS1OVU0uICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5
eXN0b3NbXSA9Ci17Ci0gICAgICAgMCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3
LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwKLSAgICAgIDEyLCAgICAyMSwgICAgMjIsICAg
IDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAs
ICAgIDMxLCAgICAzMiwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQxLCAgICA0Miwg
ICAgNDMsCi0gICAgICA0NCwgICAgNDYsICAgMTI2LCAgIDEyNywgICAxMjgsICAgMTI5LCAgIDEz
MCwgICAxMzUsICAgMTM2LCAgIDEzNywKLSAgICAgMTM4LCAgIDEzOSwgICAxNDAsICAgMTQxLCAg
IDE0MiwgICAxNDMsICAgMTc1LCAgIDE3NiwgICAxNzcsICAgIDM3LAotICAgICAgNDUsICAgMTQw
LCAgICA0NSwgICAgNDYsICAgIDc1LCAgICA5NiwgICAgODEsICAgMTc4LCAgICA3MiwgICAgNzgs
Ci0gICAgICAgMywgICAgMzMsICAgIDM0LCAgICAzNSwgICAxMzIsICAgMTMzLCAgIDEzOCwgICAg
NzgsICAgIDgxLCAgICA0NSwKLSAgICAgIDk2LCAgIDEzOSwgICAxNDEsICAgIDczLCAgICAgMCwg
ICAxNzYsICAgMTQxLCAgIDE0NSwgICAgNzUsICAgIDc1LAotICAgICAxNjEsICAgMTMyLCAgIDEz
MSwgICAxMzQsICAgMTM5LCAgIDEzMywgICAgOTYsICAgIDcxLCAgICA3MywgICAgODAsCi0gICAg
ICA0NSwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTIsICAgIDUzLCAgICA3MSwgICAgODIsICAg
IDgzLCAgICA4NSwKLSAgICAgIDk3LCAgICA5OCwgICAgOTksICAgMTAxLCAgIDEwMiwgICAxMDMs
ICAgMTA0LCAgIDEwNSwgICAxMDYsICAgMTA3LAotICAgICAxMDgsICAgMTA5LCAgIDExMCwgICAx
MTEsICAgMTEyLCAgIDExMywgICAxMTQsICAgMTE1LCAgIDExNiwgICAxMTcsCi0gICAgIDExOCwg
ICAxMTksICAgMTIwLCAgIDEyMSwgICAxMjUsICAgMTQyLCAgICA4MSwgICAxMzksICAgMTQ2LCAg
IDE0NywKLSAgICAgMTQ0LCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNywgICAgMTgsICAgIDE5
LCAgICAyMCwgICAgNDAsICAgIDc1LAotICAgICAgNzYsICAgIDgxLCAgIDEwOCwgICAxMjEsICAg
MTIyLCAgIDEyNCwgICAxMjYsICAgMTI3LCAgIDE0MiwgICAxNTEsCi0gICAgIDE1MiwgICAxNTMs
ICAgMTU0LCAgIDE2MiwgICAxNjMsICAgMTY0LCAgIDE2NywgICAxNzQsICAgIDk2LCAgIDEzMSwK
LSAgICAgMTM0LCAgICA3MywgICAgODAsICAgIDc0LCAgIDEyNSwgICAxMjIsICAgMTUwLCAgIDEw
OCwgICAxMDgsICAgMTI0LAotICAgICAgNTIsICAgIDUzLCAgICA3MywgICAgNzcsICAgIDcyLCAg
ICA3MiwgICAgNzgsICAgIDM5LCAgIDEyMiwgICAgNzEsCi0gICAgIDEwOCwgICAgODYsICAgIDg3
LCAgICA4MywgICAgODUsICAgIDU0LCAgICA1NSwgICAgODksICAgIDkwLCAgICA1NiwKLSAgICAg
IDU3LCAgICA1OCwgICAgNjAsICAgIDU5LCAgICA5NCwgICAgNzQsICAgIDk2LCAgIDE0OCwgICAx
NDksICAgIDc2LAotICAgICAxNDcsICAgMTQ2LCAgICA4MSwgICAgODEsICAgMTY5LCAgICA3MSwg
ICAgNzEsICAgIDgxLCAgICA4MSwgICAxMjQsCi0gICAgICA3MSwgICAgNzYsICAgMTU1LCAgICA2
MSwgICAgNjIsICAgIDYzLCAgICA3MCwgICAgODAsICAgMTIzLCAgICA3OCwKLSAgICAgIDgxLCAg
ICA3NiwgICAxNTIsICAgIDczLCAgICA3NCwgICAxMjUsICAgMTUwLCAgICA3NCwgICAgNzIsICAg
MTAwLAotICAgICAxMjQsICAgIDQ1LCAgICA0NiwgICAgOTYsICAgMTAzLCAgIDEyMiwgICAxMDgs
ICAgMTA4LCAgIDExMCwgICAxMTAsCi0gICAgIDExMiwgICAxMTIsICAgMTEyLCAgIDExMiwgICAx
MTMsICAgMTEzLCAgIDExNywgICAxMTgsICAgMTE5LCAgIDEyNCwKLSAgICAgIDczLCAgICA3OCwg
ICAgODEsICAgIDc2LCAgIDE1OCwgICAxNTksICAgMTYwLCAgIDE3MCwgICAxMjQsICAgIDgxLAot
ICAgICAxNjgsICAgMTYyLCAgIDEyMiwgICAxMjIsICAgMTI1LCAgICA3NCwgICAgNzQsICAgIDc5
LCAgIDEyNSwgICAxNDksCi0gICAgICA0MCwgICAxNjEsICAgMTUzLCAgIDE1MSwgICAxNjMsICAg
MTcxLCAgICA3MiwgICAxMjQsICAgMTM3LCAgIDE2NiwKLSAgICAgMTU2LCAgICA3NCwgICAxMjIs
ICAgIDc0LCAgICA3MSwgICAxNjYsICAgMTcyLCAgIDE3MywgICAxNTgsICAgMTY1LAotICAgICAg
OTYsICAgIDcyLCAgICA3NiwgICAxMjQsICAgIDgxLCAgICA3MiwgICAgMTYsICAgIDgwLCAgIDE1
MywgICAxNTcsCi0gICAgIDE2MSwgICAgNzIsICAgMTI0LCAgIDE1NywgICAxNTgsICAgMTUwLCAg
ICA4MQotfTsKLQotI2RlZmluZSB5eWVycm9rCQkoeXllcnJzdGF0dXMgPSAwKQotI2RlZmluZSB5
eWNsZWFyaW4JKHl5Y2hhciA9IFlZRU1QVFkpCi0jZGVmaW5lIFlZRU1QVFkJCSgtMikKLSNkZWZp
bmUgWVlFT0YJCTAKLQotI2RlZmluZSBZWUFDQ0VQVAlnb3RvIHl5YWNjZXB0bGFiCi0jZGVmaW5l
IFlZQUJPUlQJCWdvdG8geXlhYm9ydGxhYgotI2RlZmluZSBZWUVSUk9SCQlnb3RvIHl5ZXJyb3Js
YWIKLQotCi0vKiBMaWtlIFlZRVJST1IgZXhjZXB0IGRvIGNhbGwgeXllcnJvci4gIFRoaXMgcmVt
YWlucyBoZXJlIHRlbXBvcmFyaWx5Ci0gICB0byBlYXNlIHRoZSB0cmFuc2l0aW9uIHRvIHRoZSBu
ZXcgbWVhbmluZyBvZiBZWUVSUk9SLCBmb3IgR0NDLgotICAgT25jZSBHQ0MgdmVyc2lvbiAyIGhh
cyBzdXBwbGFudGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICBIb3dldmVyLAotICAgWVlGQUlM
IGFwcGVhcnMgdG8gYmUgaW4gdXNlLiAgTmV2ZXJ0aGVsZXNzLCBpdCBpcyBmb3JtYWxseSBkZXBy
ZWNhdGVkCi0gICBpbiBCaXNvbiAyLjQuMidzIE5FV1MgZW50cnksIHdoZXJlIGEgcGxhbiB0byBw
aGFzZSBpdCBvdXQgaXMKLSAgIGRpc2N1c3NlZC4gICovCi0KLSNkZWZpbmUgWVlGQUlMCQlnb3Rv
IHl5ZXJybGFiCi0jaWYgZGVmaW5lZCBZWUZBSUwKLSAgLyogVGhpcyBpcyBoZXJlIHRvIHN1cHBy
ZXNzIHdhcm5pbmdzIGZyb20gdGhlIEdDQyBjcHAncwotICAgICAtV3VudXNlZC1tYWNyb3MuICBO
b3JtYWxseSB3ZSBkb24ndCB3b3JyeSBhYm91dCB0aGF0IHdhcm5pbmcsIGJ1dAotICAgICBzb21l
IHVzZXJzIGRvLCBhbmQgd2Ugd2FudCB0byBtYWtlIGl0IGVhc3kgZm9yIHVzZXJzIHRvIHJlbW92
ZQotICAgICBZWUZBSUwgdXNlcywgd2hpY2ggd2lsbCBwcm9kdWNlIHdhcm5pbmdzIGZyb20gQmlz
b24gMi41LiAgKi8KLSNlbmRpZgotCi0jZGVmaW5lIFlZUkVDT1ZFUklORygpICAoISF5eWVycnN0
YXR1cykKLQotI2RlZmluZSBZWUJBQ0tVUChUb2tlbiwgVmFsdWUpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLWRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHl5
Y2hhciA9IChUb2tlbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICB5eWx2YWwgPSAoVmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgWVlQT1BTVEFDSyAoeXlsZW4pOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHl5c3RhdGUgPSAqeXlzc3A7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBnb3RvIHl5YmFja3VwOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZWxz
ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgeXllcnJvciAoJnl5bGxvYywgY29udGV4dCwgWVlfKCJzeW50
YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIikpOyBcCi0gICAgICBZWUVSUk9SOwkJCQkJCQlcCi0g
ICAgfQkJCQkJCQkJXAotd2hpbGUgKFlZSUQgKDApKQotCi0vKiBFcnJvciB0b2tlbiBudW1iZXIg
Ki8KLSNkZWZpbmUgWVlURVJST1IJMQotI2RlZmluZSBZWUVSUkNPREUJMjU2Ci0KLQotLyogWVlM
TE9DX0RFRkFVTFQgLS0gU2V0IENVUlJFTlQgdG8gc3BhbiBmcm9tIFJIU1sxXSB0byBSSFNbTl0u
Ci0gICBJZiBOIGlzIDAsIHRoZW4gc2V0IENVUlJFTlQgdG8gdGhlIGVtcHR5IGxvY2F0aW9uIHdo
aWNoIGVuZHMKLSAgIHRoZSBwcmV2aW91cyBzeW1ib2w6IFJIU1swXSAoYWx3YXlzIGRlZmluZWQp
LiAgKi8KLQotI2lmbmRlZiBZWUxMT0NfREVGQVVMVAotIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQo
Q3VycmVudCwgUmhzLCBOKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRv
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgaWYgKFlZSUQgKE4pKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg
IChDdXJyZW50KS5maXJzdF9saW5lICAgPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9saW5lOyAg
ICAgICAgXAotICAgICAgICAgIChDdXJyZW50KS5maXJzdF9jb2x1bW4gPSBZWVJIU0xPQyAoUmhz
LCAxKS5maXJzdF9jb2x1bW47ICAgICAgXAotICAgICAgICAgIChDdXJyZW50KS5sYXN0X2xpbmUg
ICAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2xpbmU7ICAgICAgICAgXAotICAgICAgICAgIChD
dXJyZW50KS5sYXN0X2NvbHVtbiAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2NvbHVtbjsgICAg
ICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICAgIChDdXJyZW50KS5maXJzdF9saW5lICAgPSAoQ3VycmVudCkubGFzdF9saW5l
ICAgPSAgICAgICAgICAgICAgXAotICAgICAgICAgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9s
aW5lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIChDdXJyZW50
KS5maXJzdF9jb2x1bW4gPSAoQ3VycmVudCkubGFzdF9jb2x1bW4gPSAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9jb2x1bW47ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHdoaWxlIChZWUlEICgwKSkK
LSNlbmRpZgotCi0jZGVmaW5lIFlZUkhTTE9DKFJocywgSykgKChSaHMpW0tdKQotCi0KLS8qIFlZ
X0xPQ0FUSU9OX1BSSU5UIC0tIFByaW50IHRoZSBsb2NhdGlvbiBvbiB0aGUgc3RyZWFtLgotICAg
VGhpcyBtYWNybyB3YXMgbm90IG1hbmRhdGVkIG9yaWdpbmFsbHk6IGRlZmluZSBvbmx5IGlmIHdl
IGtub3cKLSAgIHdlIHdvbid0IGJyZWFrIHVzZXIgY29kZTogd2hlbiB0aGVzZSBhcmUgdGhlIGxv
Y2F0aW9ucyB3ZSBrbm93LiAgKi8KLQotI2lmbmRlZiBZWV9MT0NBVElPTl9QUklOVAotIyBpZiBk
ZWZpbmVkIFlZTFRZUEVfSVNfVFJJVklBTCAmJiBZWUxUWVBFX0lTX1RSSVZJQUwKLQotLyogUHJp
bnQgKllZTE9DUCBvbiBZWU8uICBQcml2YXRlLCBkbyBub3QgcmVseSBvbiBpdHMgZXhpc3RlbmNl
LiAqLwotCi1fX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkKLSNpZiAoZGVmaW5lZCBfX1NURENf
XyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVz
IHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdW5zaWduZWQKLXl5X2xvY2F0aW9uX3ByaW50
XyAoRklMRSAqeXlvLCBZWUxUWVBFIGNvbnN0ICogY29uc3QgeXlsb2NwKQotI2Vsc2UKLXN0YXRp
YyB1bnNpZ25lZAoteXlfbG9jYXRpb25fcHJpbnRfICh5eW8sIHl5bG9jcCkKLSAgICBGSUxFICp5
eW87Ci0gICAgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jcDsKLSNlbmRpZgotewotICB1bnNp
Z25lZCByZXMgPSAwOwotICBpbnQgZW5kX2NvbCA9IDAgIT0geXlsb2NwLT5sYXN0X2NvbHVtbiA/
IHl5bG9jcC0+bGFzdF9jb2x1bW4gLSAxIDogMDsKLSAgaWYgKDAgPD0geXlsb2NwLT5maXJzdF9s
aW5lKQotICAgIHsKLSAgICAgIHJlcyArPSBmcHJpbnRmICh5eW8sICIlZCIsIHl5bG9jcC0+Zmly
c3RfbGluZSk7Ci0gICAgICBpZiAoMCA8PSB5eWxvY3AtPmZpcnN0X2NvbHVtbikKLSAgICAgICAg
cmVzICs9IGZwcmludGYgKHl5bywgIi4lZCIsIHl5bG9jcC0+Zmlyc3RfY29sdW1uKTsKLSAgICB9
Ci0gIGlmICgwIDw9IHl5bG9jcC0+bGFzdF9saW5lKQotICAgIHsKLSAgICAgIGlmICh5eWxvY3At
PmZpcnN0X2xpbmUgPCB5eWxvY3AtPmxhc3RfbGluZSkKLSAgICAgICAgewotICAgICAgICAgIHJl
cyArPSBmcHJpbnRmICh5eW8sICItJWQiLCB5eWxvY3AtPmxhc3RfbGluZSk7Ci0gICAgICAgICAg
aWYgKDAgPD0gZW5kX2NvbCkKLSAgICAgICAgICAgIHJlcyArPSBmcHJpbnRmICh5eW8sICIuJWQi
LCBlbmRfY29sKTsKLSAgICAgICAgfQotICAgICAgZWxzZSBpZiAoMCA8PSBlbmRfY29sICYmIHl5
bG9jcC0+Zmlyc3RfY29sdW1uIDwgZW5kX2NvbCkKLSAgICAgICAgcmVzICs9IGZwcmludGYgKHl5
bywgIi0lZCIsIGVuZF9jb2wpOwotICAgIH0KLSAgcmV0dXJuIHJlczsKLSB9Ci0KLSMgIGRlZmlu
ZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpICAgICAgICAgIFwKLSAgeXlfbG9jYXRpb25f
cHJpbnRfIChGaWxlLCAmKExvYykpCi0KLSMgZWxzZQotIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BS
SU5UKEZpbGUsIExvYykgKCh2b2lkKSAwKQotIyBlbmRpZgotI2VuZGlmCi0KLQotLyogWVlMRVgg
LS0gY2FsbGluZyBgeXlsZXgnIHdpdGggdGhlIHJpZ2h0IGFyZ3VtZW50cy4gICovCi0jaWZkZWYg
WVlMRVhfUEFSQU0KLSMgZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsLCAmeXlsbG9jLCBZWUxF
WF9QQVJBTSkKLSNlbHNlCi0jIGRlZmluZSBZWUxFWCB5eWxleCAoJnl5bHZhbCwgJnl5bGxvYykK
LSNlbmRpZgotCi0vKiBFbmFibGUgZGVidWdnaW5nIGlmIHJlcXVlc3RlZC4gICovCi0jaWYgWVlE
RUJVRwotCi0jIGlmbmRlZiBZWUZQUklOVEYKLSMgIGluY2x1ZGUgPHN0ZGlvLmg+IC8qIElORlJJ
TkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgIGRlZmluZSBZWUZQUklOVEYgZnByaW50Zgot
IyBlbmRpZgotCi0jIGRlZmluZSBZWURQUklOVEYoQXJncykJCQlcCi1kbyB7CQkJCQkJXAotICBp
ZiAoeXlkZWJ1ZykJCQkJCVwKLSAgICBZWUZQUklOVEYgQXJnczsJCQkJXAotfSB3aGlsZSAoWVlJ
RCAoMCkpCi0KLSMgZGVmaW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExv
Y2F0aW9uKQkJCSAgXAotZG8gewkJCQkJCQkJCSAgXAotICBpZiAoeXlkZWJ1ZykJCQkJCQkJCSAg
XAotICAgIHsJCQkJCQkJCQkgIFwKLSAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgVGl0
bGUpOwkJCQkJICBcCi0gICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwJCQkJCQkgIFwKLQkJ
ICBUeXBlLCBWYWx1ZSwgTG9jYXRpb24sIGNvbnRleHQpOyBcCi0gICAgICBZWUZQUklOVEYgKHN0
ZGVyciwgIlxuIik7CQkJCQkJICBcCi0gICAgfQkJCQkJCQkJCSAgXAotfSB3aGlsZSAoWVlJRCAo
MCkpCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgUHJpbnQgdGhp
cyBzeW1ib2wgb24gWVlPVVRQVVQuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLwotCi0vKkFSR1NVU0VEKi8KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9f
Qzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01T
Q19WRVIpCi1zdGF0aWMgdm9pZAoteXlfc3ltYm9sX3ZhbHVlX3ByaW50IChGSUxFICp5eW91dHB1
dCwgaW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwLCBZWUxUWVBFIGNv
bnN0ICogY29uc3QgeXlsb2NhdGlvbnAsIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpCi0jZWxzZQot
c3RhdGljIHZvaWQKLXl5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2
YWx1ZXAsIHl5bG9jYXRpb25wLCBjb250ZXh0KQotICAgIEZJTEUgKnl5b3V0cHV0OwotICAgIGlu
dCB5eXR5cGU7Ci0gICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOwotICAgIFlZTFRZ
UEUgY29uc3QgKiBjb25zdCB5eWxvY2F0aW9ucDsKLSAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0
OwotI2VuZGlmCi17Ci0gIEZJTEUgKnl5byA9IHl5b3V0cHV0OwotICBZWVVTRSAoeXlvKTsKLSAg
aWYgKCF5eXZhbHVlcCkKLSAgICByZXR1cm47Ci0gIFlZVVNFICh5eWxvY2F0aW9ucCk7Ci0gIFlZ
VVNFIChjb250ZXh0KTsKLSMgaWZkZWYgWVlQUklOVAotICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5T
KQotICAgIFlZUFJJTlQgKHl5b3V0cHV0LCB5eXRva251bVt5eXR5cGVdLCAqeXl2YWx1ZXApOwot
IyBlbHNlCi0gIFlZVVNFICh5eW91dHB1dCk7Ci0jIGVuZGlmCi0gIHN3aXRjaCAoeXl0eXBlKQot
ICAgIHsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotCi0vKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZ
WU9VVFBVVC4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNpZiAo
ZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZp
bmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlfc3lt
Ym9sX3ByaW50IChGSUxFICp5eW91dHB1dCwgaW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNv
bnN0IHl5dmFsdWVwLCBZWUxUWVBFIGNvbnN0ICogY29uc3QgeXlsb2NhdGlvbnAsIFRQYXJzZUNv
bnRleHQqIGNvbnRleHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5X3N5bWJvbF9wcmludCAoeXlv
dXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wLCBjb250ZXh0KQotICAgIEZJTEUg
Knl5b3V0cHV0OwotICAgIGludCB5eXR5cGU7Ci0gICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5
dmFsdWVwOwotICAgIFlZTFRZUEUgY29uc3QgKiBjb25zdCB5eWxvY2F0aW9ucDsKLSAgICBUUGFy
c2VDb250ZXh0KiBjb250ZXh0OwotI2VuZGlmCi17Ci0gIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMp
Ci0gICAgWVlGUFJJTlRGICh5eW91dHB1dCwgInRva2VuICVzICgiLCB5eXRuYW1lW3l5dHlwZV0p
OwotICBlbHNlCi0gICAgWVlGUFJJTlRGICh5eW91dHB1dCwgIm50ZXJtICVzICgiLCB5eXRuYW1l
W3l5dHlwZV0pOwotCi0gIFlZX0xPQ0FUSU9OX1BSSU5UICh5eW91dHB1dCwgKnl5bG9jYXRpb25w
KTsKLSAgWVlGUFJJTlRGICh5eW91dHB1dCwgIjogIik7Ci0gIHl5X3N5bWJvbF92YWx1ZV9wcmlu
dCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wLCBjb250ZXh0KTsKLSAg
WVlGUFJJTlRGICh5eW91dHB1dCwgIikiKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5X3N0YWNr
X3ByaW50IC0tIFByaW50IHRoZSBzdGF0ZSBzdGFjayBmcm9tIGl0cyBCT1RUT00gdXAgdG8gaXRz
IHwKLXwgVE9QIChpbmNsdWRlZCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8
fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8
IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlfc3RhY2tfcHJpbnQgKHl5dHlwZV9p
bnQxNiAqeXlib3R0b20sIHl5dHlwZV9pbnQxNiAqeXl0b3ApCi0jZWxzZQotc3RhdGljIHZvaWQK
LXl5X3N0YWNrX3ByaW50ICh5eWJvdHRvbSwgeXl0b3ApCi0gICAgeXl0eXBlX2ludDE2ICp5eWJv
dHRvbTsKLSAgICB5eXR5cGVfaW50MTYgKnl5dG9wOwotI2VuZGlmCi17Ci0gIFlZRlBSSU5URiAo
c3RkZXJyLCAiU3RhY2sgbm93Iik7Ci0gIGZvciAoOyB5eWJvdHRvbSA8PSB5eXRvcDsgeXlib3R0
b20rKykKLSAgICB7Ci0gICAgICBpbnQgeXlib3QgPSAqeXlib3R0b207Ci0gICAgICBZWUZQUklO
VEYgKHN0ZGVyciwgIiAlZCIsIHl5Ym90KTsKLSAgICB9Ci0gIFlZRlBSSU5URiAoc3RkZXJyLCAi
XG4iKTsKLX0KLQotIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApCQkJCVwKLWRv
IHsJCQkJCQkJCVwKLSAgaWYgKHl5ZGVidWcpCQkJCQkJCVwKLSAgICB5eV9zdGFja19wcmludCAo
KEJvdHRvbSksIChUb3ApKTsJCQkJXAotfSB3aGlsZSAoWVlJRCAoMCkpCi0KLQotLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IFJlcG9ydCB0aGF0
IHRoZSBZWVJVTEUgaXMgZ29pbmcgdG8gYmUgcmVkdWNlZC4gIHwKLWAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jaWYgKGRlZmluZWQgX19TVERD
X18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1
cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIHZvaWQKLXl5X3JlZHVjZV9wcmludCAoWVlT
VFlQRSAqeXl2c3AsIFlZTFRZUEUgKnl5bHNwLCBpbnQgeXlydWxlLCBUUGFyc2VDb250ZXh0KiBj
b250ZXh0KQotI2Vsc2UKLXN0YXRpYyB2b2lkCi15eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCB5eWxz
cCwgeXlydWxlLCBjb250ZXh0KQotICAgIFlZU1RZUEUgKnl5dnNwOwotICAgIFlZTFRZUEUgKnl5
bHNwOwotICAgIGludCB5eXJ1bGU7Ci0gICAgVFBhcnNlQ29udGV4dCogY29udGV4dDsKLSNlbmRp
ZgotewotICBpbnQgeXlucmhzID0geXlyMlt5eXJ1bGVdOwotICBpbnQgeXlpOwotICB1bnNpZ25l
ZCBsb25nIGludCB5eWxubyA9IHl5cmxpbmVbeXlydWxlXTsKLSAgWVlGUFJJTlRGIChzdGRlcnIs
ICJSZWR1Y2luZyBzdGFjayBieSBydWxlICVkIChsaW5lICVsdSk6XG4iLAotCSAgICAgeXlydWxl
IC0gMSwgeXlsbm8pOwotICAvKiBUaGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLiAgKi8KLSAgZm9y
ICh5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsrKQotICAgIHsKLSAgICAgIFlZRlBSSU5URiAo
c3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsgMSk7Ci0gICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0
ZGVyciwgeXlyaHNbeXlwcmhzW3l5cnVsZV0gKyB5eWldLAotCQkgICAgICAgJih5eXZzcFsoeXlp
ICsgMSkgLSAoeXlucmhzKV0pCi0JCSAgICAgICAsICYoeXlsc3BbKHl5aSArIDEpIC0gKHl5bnJo
cyldKQkJICAgICAgICwgY29udGV4dCk7Ci0gICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7
Ci0gICAgfQotfQotCi0jIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkJCVwKLWRvIHsJCQkJ
CVwKLSAgaWYgKHl5ZGVidWcpCQkJCVwKLSAgICB5eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCB5eWxz
cCwgUnVsZSwgY29udGV4dCk7IFwKLX0gd2hpbGUgKFlZSUQgKDApKQotCi0vKiBOb256ZXJvIG1l
YW5zIHByaW50IHBhcnNlIHRyYWNlLiAgSXQgaXMgbGVmdCB1bmluaXRpYWxpemVkIHNvIHRoYXQK
LSAgIG11bHRpcGxlIHBhcnNlcnMgY2FuIGNvZXhpc3QuICAqLwotaW50IHl5ZGVidWc7Ci0jZWxz
ZSAvKiAhWVlERUJVRyAqLwotIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCi0jIGRlZmluZSBZWV9T
WU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikKLSMgZGVmaW5lIFlZX1NU
QUNLX1BSSU5UKEJvdHRvbSwgVG9wKQotIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpCi0j
ZW5kaWYgLyogIVlZREVCVUcgKi8KLQotCi0vKiBZWUlOSVRERVBUSCAtLSBpbml0aWFsIHNpemUg
b2YgdGhlIHBhcnNlcidzIHN0YWNrcy4gICovCi0jaWZuZGVmCVlZSU5JVERFUFRICi0jIGRlZmlu
ZSBZWUlOSVRERVBUSCAyMDAKLSNlbmRpZgotCi0vKiBZWU1BWERFUFRIIC0tIG1heGltdW0gc2l6
ZSB0aGUgc3RhY2tzIGNhbiBncm93IHRvIChlZmZlY3RpdmUgb25seQotICAgaWYgdGhlIGJ1aWx0
LWluIHN0YWNrIGV4dGVuc2lvbiBtZXRob2QgaXMgdXNlZCkuCi0KLSAgIERvIG5vdCBtYWtlIHRo
aXMgdmFsdWUgdG9vIGxhcmdlOyB0aGUgcmVzdWx0cyBhcmUgdW5kZWZpbmVkIGlmCi0gICBZWVNU
QUNLX0FMTE9DX01BWElNVU0gPCBZWVNUQUNLX0JZVEVTIChZWU1BWERFUFRIKQotICAgZXZhbHVh
dGVkIHdpdGggaW5maW5pdGUtcHJlY2lzaW9uIGludGVnZXIgYXJpdGhtZXRpYy4gICovCi0KLSNp
Zm5kZWYgWVlNQVhERVBUSAotIyBkZWZpbmUgWVlNQVhERVBUSCAxMDAwMAotI2VuZGlmCi0KLQot
I2lmIFlZRVJST1JfVkVSQk9TRQotCi0jIGlmbmRlZiB5eXN0cmxlbgotIyAgaWYgZGVmaW5lZCBf
X0dMSUJDX18gJiYgZGVmaW5lZCBfU1RSSU5HX0gKLSMgICBkZWZpbmUgeXlzdHJsZW4gc3RybGVu
Ci0jICBlbHNlCi0vKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiBZWVNUUi4gICovCi0jaWYgKGRlZmlu
ZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBf
X2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIFlZU0laRV9UCi15eXN0cmxl
biAoY29uc3QgY2hhciAqeXlzdHIpCi0jZWxzZQotc3RhdGljIFlZU0laRV9UCi15eXN0cmxlbiAo
eXlzdHIpCi0gICAgY29uc3QgY2hhciAqeXlzdHI7Ci0jZW5kaWYKLXsKLSAgWVlTSVpFX1QgeXls
ZW47Ci0gIGZvciAoeXlsZW4gPSAwOyB5eXN0clt5eWxlbl07IHl5bGVuKyspCi0gICAgY29udGlu
dWU7Ci0gIHJldHVybiB5eWxlbjsKLX0KLSMgIGVuZGlmCi0jIGVuZGlmCi0KLSMgaWZuZGVmIHl5
c3RwY3B5Ci0jICBpZiBkZWZpbmVkIF9fR0xJQkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdfSCAmJiBk
ZWZpbmVkIF9HTlVfU09VUkNFCi0jICAgZGVmaW5lIHl5c3RwY3B5IHN0cGNweQotIyAgZWxzZQot
LyogQ29weSBZWVNSQyB0byBZWURFU1QsIHJldHVybmluZyB0aGUgYWRkcmVzcyBvZiB0aGUgdGVy
bWluYXRpbmcgJ1wwJyBpbgotICAgWVlERVNULiAgKi8KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8
fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8
IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgY2hhciAqCi15eXN0cGNweSAoY2hhciAqeXlkZXN0
LCBjb25zdCBjaGFyICp5eXNyYykKLSNlbHNlCi1zdGF0aWMgY2hhciAqCi15eXN0cGNweSAoeXlk
ZXN0LCB5eXNyYykKLSAgICBjaGFyICp5eWRlc3Q7Ci0gICAgY29uc3QgY2hhciAqeXlzcmM7Ci0j
ZW5kaWYKLXsKLSAgY2hhciAqeXlkID0geXlkZXN0OwotICBjb25zdCBjaGFyICp5eXMgPSB5eXNy
YzsKLQotICB3aGlsZSAoKCp5eWQrKyA9ICp5eXMrKykgIT0gJ1wwJykKLSAgICBjb250aW51ZTsK
LQotICByZXR1cm4geXlkIC0gMTsKLX0KLSMgIGVuZGlmCi0jIGVuZGlmCi0KLSMgaWZuZGVmIHl5
dG5hbWVycgotLyogQ29weSB0byBZWVJFUyB0aGUgY29udGVudHMgb2YgWVlTVFIgYWZ0ZXIgc3Ry
aXBwaW5nIGF3YXkgdW5uZWNlc3NhcnkKLSAgIHF1b3RlcyBhbmQgYmFja3NsYXNoZXMsIHNvIHRo
YXQgaXQncyBzdWl0YWJsZSBmb3IgeXllcnJvci4gIFRoZQotICAgaGV1cmlzdGljIGlzIHRoYXQg
ZG91YmxlLXF1b3RpbmcgaXMgdW5uZWNlc3NhcnkgdW5sZXNzIHRoZSBzdHJpbmcKLSAgIGNvbnRh
aW5zIGFuIGFwb3N0cm9waGUsIGEgY29tbWEsIG9yIGJhY2tzbGFzaCAob3RoZXIgdGhhbgotICAg
YmFja3NsYXNoLWJhY2tzbGFzaCkuICBZWVNUUiBpcyB0YWtlbiBmcm9tIHl5dG5hbWUuICBJZiBZ
WVJFUyBpcwotICAgbnVsbCwgZG8gbm90IGNvcHk7IGluc3RlYWQsIHJldHVybiB0aGUgbGVuZ3Ro
IG9mIHdoYXQgdGhlIHJlc3VsdAotICAgd291bGQgaGF2ZSBiZWVuLiAgKi8KLXN0YXRpYyBZWVNJ
WkVfVAoteXl0bmFtZXJyIChjaGFyICp5eXJlcywgY29uc3QgY2hhciAqeXlzdHIpCi17Ci0gIGlm
ICgqeXlzdHIgPT0gJyInKQotICAgIHsKLSAgICAgIFlZU0laRV9UIHl5biA9IDA7Ci0gICAgICBj
aGFyIGNvbnN0ICp5eXAgPSB5eXN0cjsKLQotICAgICAgZm9yICg7OykKLQlzd2l0Y2ggKCorK3l5
cCkKLQkgIHsKLQkgIGNhc2UgJ1wnJzoKLQkgIGNhc2UgJywnOgotCSAgICBnb3RvIGRvX25vdF9z
dHJpcF9xdW90ZXM7Ci0KLQkgIGNhc2UgJ1xcJzoKLQkgICAgaWYgKCorK3l5cCAhPSAnXFwnKQot
CSAgICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKLQkgICAgLyogRmFsbCB0aHJvdWdoLiAg
Ki8KLQkgIGRlZmF1bHQ6Ci0JICAgIGlmICh5eXJlcykKLQkgICAgICB5eXJlc1t5eW5dID0gKnl5
cDsKLQkgICAgeXluKys7Ci0JICAgIGJyZWFrOwotCi0JICBjYXNlICciJzoKLQkgICAgaWYgKHl5
cmVzKQotCSAgICAgIHl5cmVzW3l5bl0gPSAnXDAnOwotCSAgICByZXR1cm4geXluOwotCSAgfQot
ICAgIGRvX25vdF9zdHJpcF9xdW90ZXM6IDsKLSAgICB9Ci0KLSAgaWYgKCEgeXlyZXMpCi0gICAg
cmV0dXJuIHl5c3RybGVuICh5eXN0cik7Ci0KLSAgcmV0dXJuIHl5c3RwY3B5ICh5eXJlcywgeXlz
dHIpIC0geXlyZXM7Ci19Ci0jIGVuZGlmCi0KLS8qIENvcHkgaW50byAqWVlNU0csIHdoaWNoIGlz
IG9mIHNpemUgKllZTVNHX0FMTE9DLCBhbiBlcnJvciBtZXNzYWdlCi0gICBhYm91dCB0aGUgdW5l
eHBlY3RlZCB0b2tlbiBZWVRPS0VOIGZvciB0aGUgc3RhdGUgc3RhY2sgd2hvc2UgdG9wIGlzCi0g
ICBZWVNTUC4KLQotICAgUmV0dXJuIDAgaWYgKllZTVNHIHdhcyBzdWNjZXNzZnVsbHkgd3JpdHRl
bi4gIFJldHVybiAxIGlmICpZWU1TRyBpcwotICAgbm90IGxhcmdlIGVub3VnaCB0byBob2xkIHRo
ZSBtZXNzYWdlLiAgSW4gdGhhdCBjYXNlLCBhbHNvIHNldAotICAgKllZTVNHX0FMTE9DIHRvIHRo
ZSByZXF1aXJlZCBudW1iZXIgb2YgYnl0ZXMuICBSZXR1cm4gMiBpZiB0aGUKLSAgIHJlcXVpcmVk
IG51bWJlciBvZiBieXRlcyBpcyB0b28gbGFyZ2UgdG8gc3RvcmUuICAqLwotc3RhdGljIGludAot
eXlzeW50YXhfZXJyb3IgKFlZU0laRV9UICp5eW1zZ19hbGxvYywgY2hhciAqKnl5bXNnLAotICAg
ICAgICAgICAgICAgIHl5dHlwZV9pbnQxNiAqeXlzc3AsIGludCB5eXRva2VuKQotewotICBZWVNJ
WkVfVCB5eXNpemUwID0geXl0bmFtZXJyIChZWV9OVUxMLCB5eXRuYW1lW3l5dG9rZW5dKTsKLSAg
WVlTSVpFX1QgeXlzaXplID0geXlzaXplMDsKLSAgZW51bSB7IFlZRVJST1JfVkVSQk9TRV9BUkdT
X01BWElNVU0gPSA1IH07Ci0gIC8qIEludGVybmF0aW9uYWxpemVkIGZvcm1hdCBzdHJpbmcuICov
Ci0gIGNvbnN0IGNoYXIgKnl5Zm9ybWF0ID0gWVlfTlVMTDsKLSAgLyogQXJndW1lbnRzIG9mIHl5
Zm9ybWF0LiAqLwotICBjaGFyIGNvbnN0ICp5eWFyZ1tZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJ
TVVNXTsKLSAgLyogTnVtYmVyIG9mIHJlcG9ydGVkIHRva2VucyAob25lIGZvciB0aGUgInVuZXhw
ZWN0ZWQiLCBvbmUgcGVyCi0gICAgICJleHBlY3RlZCIpLiAqLwotICBpbnQgeXljb3VudCA9IDA7
Ci0KLSAgLyogVGhlcmUgYXJlIG1hbnkgcG9zc2liaWxpdGllcyBoZXJlIHRvIGNvbnNpZGVyOgot
ICAgICAtIEFzc3VtZSBZWUZBSUwgaXMgbm90IHVzZWQuICBJdCdzIHRvbyBmbGF3ZWQgdG8gY29u
c2lkZXIuICBTZWUKLSAgICAgICA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jp
c29uLXBhdGNoZXMvMjAwOS0xMi9tc2cwMDAyNC5odG1sPgotICAgICAgIGZvciBkZXRhaWxzLiAg
WVlFUlJPUiBpcyBmaW5lIGFzIGl0IGRvZXMgbm90IGludm9rZSB0aGlzCi0gICAgICAgZnVuY3Rp
b24uCi0gICAgIC0gSWYgdGhpcyBzdGF0ZSBpcyBhIGNvbnNpc3RlbnQgc3RhdGUgd2l0aCBhIGRl
ZmF1bHQgYWN0aW9uLCB0aGVuCi0gICAgICAgdGhlIG9ubHkgd2F5IHRoaXMgZnVuY3Rpb24gd2Fz
IGludm9rZWQgaXMgaWYgdGhlIGRlZmF1bHQgYWN0aW9uCi0gICAgICAgaXMgYW4gZXJyb3IgYWN0
aW9uLiAgSW4gdGhhdCBjYXNlLCBkb24ndCBjaGVjayBmb3IgZXhwZWN0ZWQKLSAgICAgICB0b2tl
bnMgYmVjYXVzZSB0aGVyZSBhcmUgbm9uZS4KLSAgICAgLSBUaGUgb25seSB3YXkgdGhlcmUgY2Fu
IGJlIG5vIGxvb2thaGVhZCBwcmVzZW50IChpbiB5eWNoYXIpIGlzIGlmCi0gICAgICAgdGhpcyBz
dGF0ZSBpcyBhIGNvbnNpc3RlbnQgc3RhdGUgd2l0aCBhIGRlZmF1bHQgYWN0aW9uLiAgVGh1cywK
LSAgICAgICBkZXRlY3RpbmcgdGhlIGFic2VuY2Ugb2YgYSBsb29rYWhlYWQgaXMgc3VmZmljaWVu
dCB0byBkZXRlcm1pbmUKLSAgICAgICB0aGF0IHRoZXJlIGlzIG5vIHVuZXhwZWN0ZWQgb3IgZXhw
ZWN0ZWQgdG9rZW4gdG8gcmVwb3J0LiAgSW4gdGhhdAotICAgICAgIGNhc2UsIGp1c3QgcmVwb3J0
IGEgc2ltcGxlICJzeW50YXggZXJyb3IiLgotICAgICAtIERvbid0IGFzc3VtZSB0aGVyZSBpc24n
dCBhIGxvb2thaGVhZCBqdXN0IGJlY2F1c2UgdGhpcyBzdGF0ZSBpcyBhCi0gICAgICAgY29uc2lz
dGVudCBzdGF0ZSB3aXRoIGEgZGVmYXVsdCBhY3Rpb24uICBUaGVyZSBtaWdodCBoYXZlIGJlZW4g
YQotICAgICAgIHByZXZpb3VzIGluY29uc2lzdGVudCBzdGF0ZSwgY29uc2lzdGVudCBzdGF0ZSB3
aXRoIGEgbm9uLWRlZmF1bHQKLSAgICAgICBhY3Rpb24sIG9yIHVzZXIgc2VtYW50aWMgYWN0aW9u
IHRoYXQgbWFuaXB1bGF0ZWQgeXljaGFyLgotICAgICAtIE9mIGNvdXJzZSwgdGhlIGV4cGVjdGVk
IHRva2VuIGxpc3QgZGVwZW5kcyBvbiBzdGF0ZXMgdG8gaGF2ZQotICAgICAgIGNvcnJlY3QgbG9v
a2FoZWFkIGluZm9ybWF0aW9uLCBhbmQgaXQgZGVwZW5kcyBvbiB0aGUgcGFyc2VyIG5vdAotICAg
ICAgIHRvIHBlcmZvcm0gZXh0cmEgcmVkdWN0aW9ucyBhZnRlciBmZXRjaGluZyBhIGxvb2thaGVh
ZCBmcm9tIHRoZQotICAgICAgIHNjYW5uZXIgYW5kIGJlZm9yZSBkZXRlY3RpbmcgYSBzeW50YXgg
ZXJyb3IuICBUaHVzLCBzdGF0ZSBtZXJnaW5nCi0gICAgICAgKGZyb20gTEFMUiBvciBJRUxSKSBh
bmQgZGVmYXVsdCByZWR1Y3Rpb25zIGNvcnJ1cHQgdGhlIGV4cGVjdGVkCi0gICAgICAgdG9rZW4g
bGlzdC4gIEhvd2V2ZXIsIHRoZSBsaXN0IGlzIGNvcnJlY3QgZm9yIGNhbm9uaWNhbCBMUiB3aXRo
Ci0gICAgICAgb25lIGV4Y2VwdGlvbjogaXQgd2lsbCBzdGlsbCBjb250YWluIGFueSB0b2tlbiB0
aGF0IHdpbGwgbm90IGJlCi0gICAgICAgYWNjZXB0ZWQgZHVlIHRvIGFuIGVycm9yIGFjdGlvbiBp
biBhIGxhdGVyIHN0YXRlLgotICAqLwotICBpZiAoeXl0b2tlbiAhPSBZWUVNUFRZKQotICAgIHsK
LSAgICAgIGludCB5eW4gPSB5eXBhY3RbKnl5c3NwXTsKLSAgICAgIHl5YXJnW3l5Y291bnQrK10g
PSB5eXRuYW1lW3l5dG9rZW5dOwotICAgICAgaWYgKCF5eXBhY3RfdmFsdWVfaXNfZGVmYXVsdCAo
eXluKSkKLSAgICAgICAgewotICAgICAgICAgIC8qIFN0YXJ0IFlZWCBhdCAtWVlOIGlmIG5lZ2F0
aXZlIHRvIGF2b2lkIG5lZ2F0aXZlIGluZGV4ZXMgaW4KLSAgICAgICAgICAgICBZWUNIRUNLLiAg
SW4gb3RoZXIgd29yZHMsIHNraXAgdGhlIGZpcnN0IC1ZWU4gYWN0aW9ucyBmb3IKLSAgICAgICAg
ICAgICB0aGlzIHN0YXRlIGJlY2F1c2UgdGhleSBhcmUgZGVmYXVsdCBhY3Rpb25zLiAgKi8KLSAg
ICAgICAgICBpbnQgeXl4YmVnaW4gPSB5eW4gPCAwID8gLXl5biA6IDA7Ci0gICAgICAgICAgLyog
U3RheSB3aXRoaW4gYm91bmRzIG9mIGJvdGggeXljaGVjayBhbmQgeXl0bmFtZS4gICovCi0gICAg
ICAgICAgaW50IHl5Y2hlY2tsaW0gPSBZWUxBU1QgLSB5eW4gKyAxOwotICAgICAgICAgIGludCB5
eXhlbmQgPSB5eWNoZWNrbGltIDwgWVlOVE9LRU5TID8geXljaGVja2xpbSA6IFlZTlRPS0VOUzsK
LSAgICAgICAgICBpbnQgeXl4OwotCi0gICAgICAgICAgZm9yICh5eXggPSB5eXhiZWdpbjsgeXl4
IDwgeXl4ZW5kOyArK3l5eCkKLSAgICAgICAgICAgIGlmICh5eWNoZWNrW3l5eCArIHl5bl0gPT0g
eXl4ICYmIHl5eCAhPSBZWVRFUlJPUgotICAgICAgICAgICAgICAgICYmICF5eXRhYmxlX3ZhbHVl
X2lzX2Vycm9yICh5eXRhYmxlW3l5eCArIHl5bl0pKQotICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHl5Y291bnQgPT0gWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSkKLSAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgeXljb3VudCA9IDE7Ci0gICAg
ICAgICAgICAgICAgICAgIHl5c2l6ZSA9IHl5c2l6ZTA7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHl5YXJnW3l5Y291bnQr
K10gPSB5eXRuYW1lW3l5eF07Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
WVlTSVpFX1QgeXlzaXplMSA9IHl5c2l6ZSArIHl5dG5hbWVyciAoWVlfTlVMTCwgeXl0bmFtZVt5
eXhdKTsKLSAgICAgICAgICAgICAgICAgIGlmICghICh5eXNpemUgPD0geXlzaXplMQotICAgICAg
ICAgICAgICAgICAgICAgICAgICYmIHl5c2l6ZTEgPD0gWVlTVEFDS19BTExPQ19NQVhJTVVNKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDI7Ci0gICAgICAgICAgICAgICAgICB5eXNpemUg
PSB5eXNpemUxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotCi0gIHN3aXRjaCAoeXljb3VudCkKLSAgICB7Ci0jIGRlZmluZSBZWUNBU0VfKE4s
IFMpICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGNhc2UgTjogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICB5eWZvcm1hdCA9IFM7ICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICBicmVhawotICAgICAgWVlDQVNFXygwLCBZWV8oInN5bnRheCBlcnJvciIp
KTsKLSAgICAgIFlZQ0FTRV8oMSwgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiKSk7
Ci0gICAgICBZWUNBU0VfKDIsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBl
Y3RpbmcgJXMiKSk7Ci0gICAgICBZWUNBU0VfKDMsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVj
dGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMiKSk7Ci0gICAgICBZWUNBU0VfKDQsIFlZXygic3lu
dGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMiKSk7Ci0g
ICAgICBZWUNBU0VfKDUsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3Rp
bmcgJXMgb3IgJXMgb3IgJXMgb3IgJXMiKSk7Ci0jIHVuZGVmIFlZQ0FTRV8KLSAgICB9Ci0KLSAg
ewotICAgIFlZU0laRV9UIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXN0cmxlbiAoeXlmb3JtYXQpOwot
ICAgIGlmICghICh5eXNpemUgPD0geXlzaXplMSAmJiB5eXNpemUxIDw9IFlZU1RBQ0tfQUxMT0Nf
TUFYSU1VTSkpCi0gICAgICByZXR1cm4gMjsKLSAgICB5eXNpemUgPSB5eXNpemUxOwotICB9Ci0K
LSAgaWYgKCp5eW1zZ19hbGxvYyA8IHl5c2l6ZSkKLSAgICB7Ci0gICAgICAqeXltc2dfYWxsb2Mg
PSAyICogeXlzaXplOwotICAgICAgaWYgKCEgKHl5c2l6ZSA8PSAqeXltc2dfYWxsb2MKLSAgICAg
ICAgICAgICAmJiAqeXltc2dfYWxsb2MgPD0gWVlTVEFDS19BTExPQ19NQVhJTVVNKSkKLSAgICAg
ICAgKnl5bXNnX2FsbG9jID0gWVlTVEFDS19BTExPQ19NQVhJTVVNOwotICAgICAgcmV0dXJuIDE7
Ci0gICAgfQotCi0gIC8qIEF2b2lkIHNwcmludGYsIGFzIHRoYXQgaW5mcmluZ2VzIG9uIHRoZSB1
c2VyJ3MgbmFtZSBzcGFjZS4KLSAgICAgRG9uJ3QgaGF2ZSB1bmRlZmluZWQgYmVoYXZpb3IgZXZl
biBpZiB0aGUgdHJhbnNsYXRpb24KLSAgICAgcHJvZHVjZWQgYSBzdHJpbmcgd2l0aCB0aGUgd3Jv
bmcgbnVtYmVyIG9mICIlcyJzLiAgKi8KLSAgewotICAgIGNoYXIgKnl5cCA9ICp5eW1zZzsKLSAg
ICBpbnQgeXlpID0gMDsKLSAgICB3aGlsZSAoKCp5eXAgPSAqeXlmb3JtYXQpICE9ICdcMCcpCi0g
ICAgICBpZiAoKnl5cCA9PSAnJScgJiYgeXlmb3JtYXRbMV0gPT0gJ3MnICYmIHl5aSA8IHl5Y291
bnQpCi0gICAgICAgIHsKLSAgICAgICAgICB5eXAgKz0geXl0bmFtZXJyICh5eXAsIHl5YXJnW3l5
aSsrXSk7Ci0gICAgICAgICAgeXlmb3JtYXQgKz0gMjsKLSAgICAgICAgfQotICAgICAgZWxzZQot
ICAgICAgICB7Ci0gICAgICAgICAgeXlwKys7Ci0gICAgICAgICAgeXlmb3JtYXQrKzsKLSAgICAg
ICAgfQotICB9Ci0gIHJldHVybiAwOwotfQotI2VuZGlmIC8qIFlZRVJST1JfVkVSQk9TRSAqLwot
Ci0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBS
ZWxlYXNlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB0byB0aGlzIHN5bWJvbC4gIHwKLWAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qQVJHU1VTRUQq
LwotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAg
IHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lk
Ci15eWRlc3RydWN0IChjb25zdCBjaGFyICp5eW1zZywgaW50IHl5dHlwZSwgWVlTVFlQRSAqeXl2
YWx1ZXAsIFlZTFRZUEUgKnl5bG9jYXRpb25wLCBUUGFyc2VDb250ZXh0KiBjb250ZXh0KQotI2Vs
c2UKLXN0YXRpYyB2b2lkCi15eWRlc3RydWN0ICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgeXls
b2NhdGlvbnAsIGNvbnRleHQpCi0gICAgY29uc3QgY2hhciAqeXltc2c7Ci0gICAgaW50IHl5dHlw
ZTsKLSAgICBZWVNUWVBFICp5eXZhbHVlcDsKLSAgICBZWUxUWVBFICp5eWxvY2F0aW9ucDsKLSAg
ICBUUGFyc2VDb250ZXh0KiBjb250ZXh0OwotI2VuZGlmCi17Ci0gIFlZVVNFICh5eXZhbHVlcCk7
Ci0gIFlZVVNFICh5eWxvY2F0aW9ucCk7Ci0gIFlZVVNFIChjb250ZXh0KTsKLQotICBpZiAoIXl5
bXNnKQotICAgIHl5bXNnID0gIkRlbGV0aW5nIjsKLSAgWVlfU1lNQk9MX1BSSU5UICh5eW1zZywg
eXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnApOwotCi0gIHN3aXRjaCAoeXl0eXBlKQotICAg
IHsKLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi0KLQotCi0v
Ki0tLS0tLS0tLS0uCi18IHl5cGFyc2UuICB8Ci1gLS0tLS0tLS0tLSovCi0KLSNpZmRlZiBZWVBB
UlNFX1BBUkFNCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19f
IFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotaW50
Ci15eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKQotI2Vsc2UKLWludAoteXlwYXJzZSAoWVlQ
QVJTRV9QQVJBTSkKLSAgICB2b2lkICpZWVBBUlNFX1BBUkFNOwotI2VuZGlmCi0jZWxzZSAvKiAh
IFlZUEFSU0VfUEFSQU0gKi8KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5
X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19W
RVIpCi1pbnQKLXl5cGFyc2UgKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpCi0jZWxzZQotaW50Ci15
eXBhcnNlIChjb250ZXh0KQotICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQ7Ci0jZW5kaWYKLSNl
bmRpZgotewotLyogVGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLwotaW50IHl5Y2hhcjsKLQotCi0j
aWYgZGVmaW5lZCBfX0dOVUNfXyAmJiA0MDcgPD0gX19HTlVDX18gKiAxMDAgKyBfX0dOVUNfTUlO
T1JfXwotLyogU3VwcHJlc3MgYW4gaW5jb3JyZWN0IGRpYWdub3N0aWMgYWJvdXQgeXlsdmFsIGJl
aW5nIHVuaW5pdGlhbGl6ZWQuICAqLwotIyBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElB
TElaRURfQkVHSU4gXAotICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBwdXNoIikgXAotICAg
IF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVd1bmluaXRpYWxpemVkXCIiKVwK
LSAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XbWF5YmUtdW5pbml0aWFs
aXplZFwiIikKLSMgZGVmaW5lIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORCBcCi0g
ICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIHBvcCIpCi0jZWxzZQotLyogRGVmYXVsdCB2YWx1
ZSB1c2VkIGZvciBpbml0aWFsaXphdGlvbiwgZm9yIHBhY2lmeWluZyBvbGRlciBHQ0NzCi0gICBv
ciBub24tR0NDIGNvbXBpbGVycy4gICovCi1zdGF0aWMgWVlTVFlQRSB5eXZhbF9kZWZhdWx0Owot
IyBkZWZpbmUgWVlfSU5JVElBTF9WQUxVRShWYWx1ZSkgPSBWYWx1ZQotI2VuZGlmCi1zdGF0aWMg
WVlMVFlQRSB5eWxvY19kZWZhdWx0Ci0jIGlmIGRlZmluZWQgWVlMVFlQRV9JU19UUklWSUFMICYm
IFlZTFRZUEVfSVNfVFJJVklBTAotICA9IHsgMSwgMSwgMSwgMSB9Ci0jIGVuZGlmCi07Ci0jaWZu
ZGVmIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOCi0jIGRlZmluZSBZWV9JR05P
UkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTgotIyBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VO
SU5JVElBTElaRURfRU5ECi0jZW5kaWYKLSNpZm5kZWYgWVlfSU5JVElBTF9WQUxVRQotIyBkZWZp
bmUgWVlfSU5JVElBTF9WQUxVRShWYWx1ZSkgLyogTm90aGluZy4gKi8KLSNlbmRpZgotCi0vKiBU
aGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLwotWVlTVFlQRSB5
eWx2YWwgWVlfSU5JVElBTF9WQUxVRSh5eXZhbF9kZWZhdWx0KTsKLQotLyogTG9jYXRpb24gZGF0
YSBmb3IgdGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLwotWVlMVFlQRSB5eWxsb2MgPSB5eWxvY19k
ZWZhdWx0OwotCi0KLSAgICAvKiBOdW1iZXIgb2Ygc3ludGF4IGVycm9ycyBzbyBmYXIuICAqLwot
ICAgIGludCB5eW5lcnJzOwotCi0gICAgaW50IHl5c3RhdGU7Ci0gICAgLyogTnVtYmVyIG9mIHRv
a2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCi0gICAgaW50
IHl5ZXJyc3RhdHVzOwotCi0gICAgLyogVGhlIHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6Ci0gICAg
ICAgYHl5c3MnOiByZWxhdGVkIHRvIHN0YXRlcy4KLSAgICAgICBgeXl2cyc6IHJlbGF0ZWQgdG8g
c2VtYW50aWMgdmFsdWVzLgotICAgICAgIGB5eWxzJzogcmVsYXRlZCB0byBsb2NhdGlvbnMuCi0K
LSAgICAgICBSZWZlciB0byB0aGUgc3RhY2tzIHRocm91Z2ggc2VwYXJhdGUgcG9pbnRlcnMsIHRv
IGFsbG93IHl5b3ZlcmZsb3cKLSAgICAgICB0byByZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlLiAg
Ki8KLQotICAgIC8qIFRoZSBzdGF0ZSBzdGFjay4gICovCi0gICAgeXl0eXBlX2ludDE2IHl5c3Nh
W1lZSU5JVERFUFRIXTsKLSAgICB5eXR5cGVfaW50MTYgKnl5c3M7Ci0gICAgeXl0eXBlX2ludDE2
ICp5eXNzcDsKLQotICAgIC8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCi0gICAgWVlT
VFlQRSB5eXZzYVtZWUlOSVRERVBUSF07Ci0gICAgWVlTVFlQRSAqeXl2czsKLSAgICBZWVNUWVBF
ICp5eXZzcDsKLQotICAgIC8qIFRoZSBsb2NhdGlvbiBzdGFjay4gICovCi0gICAgWVlMVFlQRSB5
eWxzYVtZWUlOSVRERVBUSF07Ci0gICAgWVlMVFlQRSAqeXlsczsKLSAgICBZWUxUWVBFICp5eWxz
cDsKLQotICAgIC8qIFRoZSBsb2NhdGlvbnMgd2hlcmUgdGhlIGVycm9yIHN0YXJ0ZWQgYW5kIGVu
ZGVkLiAgKi8KLSAgICBZWUxUWVBFIHl5ZXJyb3JfcmFuZ2VbM107Ci0KLSAgICBZWVNJWkVfVCB5
eXN0YWNrc2l6ZTsKLQotICBpbnQgeXluOwotICBpbnQgeXlyZXN1bHQ7Ci0gIC8qIExvb2thaGVh
ZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KLSAg
aW50IHl5dG9rZW4gPSAwOwotICAvKiBUaGUgdmFyaWFibGVzIHVzZWQgdG8gcmV0dXJuIHNlbWFu
dGljIHZhbHVlIGFuZCBsb2NhdGlvbiBmcm9tIHRoZQotICAgICBhY3Rpb24gcm91dGluZXMuICAq
LwotICBZWVNUWVBFIHl5dmFsOwotICBZWUxUWVBFIHl5bG9jOwotCi0jaWYgWVlFUlJPUl9WRVJC
T1NFCi0gIC8qIEJ1ZmZlciBmb3IgZXJyb3IgbWVzc2FnZXMsIGFuZCBpdHMgYWxsb2NhdGVkIHNp
emUuICAqLwotICBjaGFyIHl5bXNnYnVmWzEyOF07Ci0gIGNoYXIgKnl5bXNnID0geXltc2didWY7
Ci0gIFlZU0laRV9UIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOwotI2VuZGlmCi0KLSNk
ZWZpbmUgWVlQT1BTVEFDSyhOKSAgICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChOKSwgeXlsc3Ag
LT0gKE4pKQotCi0gIC8qIFRoZSBudW1iZXIgb2Ygc3ltYm9scyBvbiB0aGUgUkhTIG9mIHRoZSBy
ZWR1Y2VkIHJ1bGUuCi0gICAgIEtlZXAgdG8gemVybyB3aGVuIG5vIHN5bWJvbCBzaG91bGQgYmUg
cG9wcGVkLiAgKi8KLSAgaW50IHl5bGVuID0gMDsKLQotICB5eXNzcCA9IHl5c3MgPSB5eXNzYTsK
LSAgeXl2c3AgPSB5eXZzID0geXl2c2E7Ci0gIHl5bHNwID0geXlscyA9IHl5bHNhOwotICB5eXN0
YWNrc2l6ZSA9IFlZSU5JVERFUFRIOwotCi0gIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YXJ0aW5n
IHBhcnNlXG4iKSk7Ci0KLSAgeXlzdGF0ZSA9IDA7Ci0gIHl5ZXJyc3RhdHVzID0gMDsKLSAgeXlu
ZXJycyA9IDA7Ci0gIHl5Y2hhciA9IFlZRU1QVFk7IC8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVh
ZC4gICovCi0gIHl5bHNwWzBdID0geXlsbG9jOwotICBnb3RvIHl5c2V0c3RhdGU7Ci0KLS8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LgotfCB5eW5ld3N0YXRlIC0tIFB1c2ggYSBuZXcgc3RhdGUsIHdoaWNoIGlzIGZvdW5kIGluIHl5
c3RhdGUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KLSB5eW5ld3N0YXRlOgotICAvKiBJbiBhbGwgY2FzZXMsIHdoZW4g
eW91IGdldCBoZXJlLCB0aGUgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrcwotICAgICBoYXZlIGp1
c3QgYmVlbiBwdXNoZWQuICBTbyBwdXNoaW5nIGEgc3RhdGUgaGVyZSBldmVucyB0aGUgc3RhY2tz
LiAgKi8KLSAgeXlzc3ArKzsKLQotIHl5c2V0c3RhdGU6Ci0gICp5eXNzcCA9IHl5c3RhdGU7Ci0K
LSAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCi0gICAgewotICAgICAgLyog
R2V0IHRoZSBjdXJyZW50IHVzZWQgc2l6ZSBvZiB0aGUgdGhyZWUgc3RhY2tzLCBpbiBlbGVtZW50
cy4gICovCi0gICAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXNzcCAtIHl5c3MgKyAxOwotCi0jaWZk
ZWYgeXlvdmVyZmxvdwotICAgICAgewotCS8qIEdpdmUgdXNlciBhIGNoYW5jZSB0byByZWFsbG9j
YXRlIHRoZSBzdGFjay4gIFVzZSBjb3BpZXMgb2YKLQkgICB0aGVzZSBzbyB0aGF0IHRoZSAmJ3Mg
ZG9uJ3QgZm9yY2UgdGhlIHJlYWwgb25lcyBpbnRvCi0JICAgbWVtb3J5LiAgKi8KLQlZWVNUWVBF
ICp5eXZzMSA9IHl5dnM7Ci0JeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7Ci0JWVlMVFlQRSAq
eXlsczEgPSB5eWxzOwotCi0JLyogRWFjaCBzdGFjayBwb2ludGVyIGFkZHJlc3MgaXMgZm9sbG93
ZWQgYnkgdGhlIHNpemUgb2YgdGhlCi0JICAgZGF0YSBpbiB1c2UgaW4gdGhhdCBzdGFjaywgaW4g
Ynl0ZXMuICBUaGlzIHVzZWQgdG8gYmUgYQotCSAgIGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0IHRo
ZSB0d28gZXh0cmEgYXJncywgYnV0IHRoYXQgbWlnaHQKLQkgICBiZSB1bmRlZmluZWQgaWYgeXlv
dmVyZmxvdyBpcyBhIG1hY3JvLiAgKi8KLQl5eW92ZXJmbG93IChZWV8oIm1lbW9yeSBleGhhdXN0
ZWQiKSwKLQkJICAgICZ5eXNzMSwgeXlzaXplICogc2l6ZW9mICgqeXlzc3ApLAotCQkgICAgJnl5
dnMxLCB5eXNpemUgKiBzaXplb2YgKCp5eXZzcCksCi0JCSAgICAmeXlsczEsIHl5c2l6ZSAqIHNp
emVvZiAoKnl5bHNwKSwKLQkJICAgICZ5eXN0YWNrc2l6ZSk7Ci0KLQl5eWxzID0geXlsczE7Ci0J
eXlzcyA9IHl5c3MxOwotCXl5dnMgPSB5eXZzMTsKLSAgICAgIH0KLSNlbHNlIC8qIG5vIHl5b3Zl
cmZsb3cgKi8KLSMgaWZuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKLSAgICAgIGdvdG8geXlleGhhdXN0
ZWRsYWI7Ci0jIGVsc2UKLSAgICAgIC8qIEV4dGVuZCB0aGUgc3RhY2sgb3VyIG93biB3YXkuICAq
LwotICAgICAgaWYgKFlZTUFYREVQVEggPD0geXlzdGFja3NpemUpCi0JZ290byB5eWV4aGF1c3Rl
ZGxhYjsKLSAgICAgIHl5c3RhY2tzaXplICo9IDI7Ci0gICAgICBpZiAoWVlNQVhERVBUSCA8IHl5
c3RhY2tzaXplKQotCXl5c3RhY2tzaXplID0gWVlNQVhERVBUSDsKLQotICAgICAgewotCXl5dHlw
ZV9pbnQxNiAqeXlzczEgPSB5eXNzOwotCXVuaW9uIHl5YWxsb2MgKnl5cHRyID0KLQkgICh1bmlv
biB5eWFsbG9jICopIFlZU1RBQ0tfQUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7
Ci0JaWYgKCEgeXlwdHIpCi0JICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwotCVlZU1RBQ0tfUkVMT0NB
VEUgKHl5c3NfYWxsb2MsIHl5c3MpOwotCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnNfYWxsb2MsIHl5
dnMpOwotCVlZU1RBQ0tfUkVMT0NBVEUgKHl5bHNfYWxsb2MsIHl5bHMpOwotIyAgdW5kZWYgWVlT
VEFDS19SRUxPQ0FURQotCWlmICh5eXNzMSAhPSB5eXNzYSkKLQkgIFlZU1RBQ0tfRlJFRSAoeXlz
czEpOwotICAgICAgfQotIyBlbmRpZgotI2VuZGlmIC8qIG5vIHl5b3ZlcmZsb3cgKi8KLQotICAg
ICAgeXlzc3AgPSB5eXNzICsgeXlzaXplIC0gMTsKLSAgICAgIHl5dnNwID0geXl2cyArIHl5c2l6
ZSAtIDE7Ci0gICAgICB5eWxzcCA9IHl5bHMgKyB5eXNpemUgLSAxOwotCi0gICAgICBZWURQUklO
VEYgKChzdGRlcnIsICJTdGFjayBzaXplIGluY3JlYXNlZCB0byAlbHVcbiIsCi0JCSAgKHVuc2ln
bmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOwotCi0gICAgICBpZiAoeXlzcyArIHl5c3RhY2tz
aXplIC0gMSA8PSB5eXNzcCkKLQlZWUFCT1JUOwotICAgIH0KLQotICBZWURQUklOVEYgKChzdGRl
cnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOwotCi0gIGlmICh5eXN0YXRlID09
IFlZRklOQUwpCi0gICAgWVlBQ0NFUFQ7Ci0KLSAgZ290byB5eWJhY2t1cDsKLQotLyotLS0tLS0t
LS0tLS4KLXwgeXliYWNrdXAuICB8Ci1gLS0tLS0tLS0tLS0qLwoteXliYWNrdXA6Ci0KLSAgLyog
RG8gYXBwcm9wcmlhdGUgcHJvY2Vzc2luZyBnaXZlbiB0aGUgY3VycmVudCBzdGF0ZS4gIFJlYWQg
YQotICAgICBsb29rYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkg
aGF2ZSBvbmUuICAqLwotCi0gIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRo
b3V0IHJlZmVyZW5jZSB0byBsb29rYWhlYWQgdG9rZW4uICAqLwotICB5eW4gPSB5eXBhY3RbeXlz
dGF0ZV07Ci0gIGlmICh5eXBhY3RfdmFsdWVfaXNfZGVmYXVsdCAoeXluKSkKLSAgICBnb3RvIHl5
ZGVmYXVsdDsKLQotICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9va2FoZWFkIHRva2VuIGlmIGRv
bid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLwotCi0gIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBU
WSBvciBZWUVPRiBvciBhIHZhbGlkIGxvb2thaGVhZCBzeW1ib2wuICAqLwotICBpZiAoeXljaGFy
ID09IFlZRU1QVFkpCi0gICAgewotICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiUmVhZGluZyBh
IHRva2VuOiAiKSk7Ci0gICAgICB5eWNoYXIgPSBZWUxFWDsKLSAgICB9Ci0KLSAgaWYgKHl5Y2hh
ciA8PSBZWUVPRikKLSAgICB7Ci0gICAgICB5eWNoYXIgPSB5eXRva2VuID0gWVlFT0Y7Ci0gICAg
ICBZWURQUklOVEYgKChzdGRlcnIsICJOb3cgYXQgZW5kIG9mIGlucHV0LlxuIikpOwotICAgIH0K
LSAgZWxzZQotICAgIHsKLSAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXljaGFyKTsKLSAg
ICAgIFlZX1NZTUJPTF9QUklOVCAoIk5leHQgdG9rZW4gaXMiLCB5eXRva2VuLCAmeXlsdmFsLCAm
eXlsbG9jKTsKLSAgICB9Ci0KLSAgLyogSWYgdGhlIHByb3BlciBhY3Rpb24gb24gc2VlaW5nIHRv
a2VuIFlZVE9LRU4gaXMgdG8gcmVkdWNlIG9yIHRvCi0gICAgIGRldGVjdCBhbiBlcnJvciwgdGFr
ZSB0aGF0IGFjdGlvbi4gICovCi0gIHl5biArPSB5eXRva2VuOwotICBpZiAoeXluIDwgMCB8fCBZ
WUxBU1QgPCB5eW4gfHwgeXljaGVja1t5eW5dICE9IHl5dG9rZW4pCi0gICAgZ290byB5eWRlZmF1
bHQ7Ci0gIHl5biA9IHl5dGFibGVbeXluXTsKLSAgaWYgKHl5biA8PSAwKQotICAgIHsKLSAgICAg
IGlmICh5eXRhYmxlX3ZhbHVlX2lzX2Vycm9yICh5eW4pKQotICAgICAgICBnb3RvIHl5ZXJybGFi
OwotICAgICAgeXluID0gLXl5bjsKLSAgICAgIGdvdG8geXlyZWR1Y2U7Ci0gICAgfQotCi0gIC8q
IENvdW50IHRva2VucyBzaGlmdGVkIHNpbmNlIGVycm9yOyBhZnRlciB0aHJlZSwgdHVybiBvZmYg
ZXJyb3IKLSAgICAgc3RhdHVzLiAgKi8KLSAgaWYgKHl5ZXJyc3RhdHVzKQotICAgIHl5ZXJyc3Rh
dHVzLS07Ci0KLSAgLyogU2hpZnQgdGhlIGxvb2thaGVhZCB0b2tlbi4gICovCi0gIFlZX1NZTUJP
TF9QUklOVCAoIlNoaWZ0aW5nIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7Ci0KLSAgLyog
RGlzY2FyZCB0aGUgc2hpZnRlZCB0b2tlbi4gICovCi0gIHl5Y2hhciA9IFlZRU1QVFk7Ci0KLSAg
eXlzdGF0ZSA9IHl5bjsKLSAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4KLSAg
KisreXl2c3AgPSB5eWx2YWw7Ci0gIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORAot
ICAqKyt5eWxzcCA9IHl5bGxvYzsKLSAgZ290byB5eW5ld3N0YXRlOwotCi0KLS8qLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5
ZGVmYXVsdCAtLSBkbyB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBjdXJyZW50IHN0YXRlLiAg
fAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KLXl5ZGVmYXVsdDoKLSAgeXluID0geXlkZWZhY3RbeXlzdGF0ZV07Ci0gIGlmICh5
eW4gPT0gMCkKLSAgICBnb3RvIHl5ZXJybGFiOwotICBnb3RvIHl5cmVkdWNlOwotCi0KLS8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5cmVkdWNlIC0tIERvIGEgcmVkdWN0aW9u
LiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5cmVkdWNlOgotICAvKiB5
eW4gaXMgdGhlIG51bWJlciBvZiBhIHJ1bGUgdG8gcmVkdWNlIHdpdGguICAqLwotICB5eWxlbiA9
IHl5cjJbeXluXTsKLQotICAvKiBJZiBZWUxFTiBpcyBub256ZXJvLCBpbXBsZW1lbnQgdGhlIGRl
ZmF1bHQgdmFsdWUgb2YgdGhlIGFjdGlvbjoKLSAgICAgYCQkID0gJDEnLgotCi0gICAgIE90aGVy
d2lzZSwgdGhlIGZvbGxvd2luZyBsaW5lIHNldHMgWVlWQUwgdG8gZ2FyYmFnZS4KLSAgICAgVGhp
cyBiZWhhdmlvciBpcyB1bmRvY3VtZW50ZWQgYW5kIEJpc29uCi0gICAgIHVzZXJzIHNob3VsZCBu
b3QgcmVseSB1cG9uIGl0LiAgQXNzaWduaW5nIHRvIFlZVkFMCi0gICAgIHVuY29uZGl0aW9uYWxs
eSBtYWtlcyB0aGUgcGFyc2VyIGEgYml0IHNtYWxsZXIsIGFuZCBpdCBhdm9pZHMgYQotICAgICBH
Q0Mgd2FybmluZyB0aGF0IFlZVkFMIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQuICAqLwotICB5
eXZhbCA9IHl5dnNwWzEteXlsZW5dOwotCi0gIC8qIERlZmF1bHQgbG9jYXRpb24uICAqLwotICBZ
WUxMT0NfREVGQVVMVCAoeXlsb2MsICh5eWxzcCAtIHl5bGVuKSwgeXlsZW4pOwotICBZWV9SRURV
Q0VfUFJJTlQgKHl5bik7Ci0gIHN3aXRjaCAoeXluKQotICAgIHsKLSAgICAgICAgY2FzZSA0Ogot
Ci0gICAgewotICAgICAgICAvLyBUaGUgc3ltYm9sIHRhYmxlIHNlYXJjaCB3YXMgZG9uZSBpbiB0
aGUgbGV4aWNhbCBwaGFzZQotICAgICAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLnN5bWJvbDsKLSAgICAgICAgY29uc3QgVFZhcmlhYmxlKiB2YXJpYWJs
ZTsKLSAgICAgICAgaWYgKHN5bWJvbCA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXlsc3BbKDEpIC0gKDEpXSksICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCAoeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgICAgICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQpOwot
ICAgICAgICAgICAgVFZhcmlhYmxlKiBmYWtlVmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCh5eXZz
cFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLCB0eXBlKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnN5
bWJvbFRhYmxlLmluc2VydCgqZmFrZVZhcmlhYmxlKTsKLSAgICAgICAgICAgIHZhcmlhYmxlID0g
ZmFrZVZhcmlhYmxlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gVGhpcyBpZGVu
dGlmaWVyIGNhbiBvbmx5IGJlIGEgdmFyaWFibGUgdHlwZSBzeW1ib2wKLSAgICAgICAgICAgIGlm
ICghIHN5bWJvbC0+aXNWYXJpYWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoKHl5bHNwWygxKSAtICgxKV0pLCAidmFyaWFibGUgZXhwZWN0ZWQiLCAoeXl2c3BbKDEpIC0g
KDEpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICB2YXJpYWJs
ZSA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSo+KHN5bWJvbCk7Ci0KLSAgICAgICAgICAg
IGlmIChjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbih2YXJpYWJsZS0+Z2V0TmFtZSgp
KSAmJgotICAgICAgICAgICAgICAgICF2YXJpYWJsZS0+Z2V0RXh0ZW5zaW9uKCkuZW1wdHkoKSAm
JgotICAgICAgICAgICAgICAgIGNvbnRleHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soKHl5bHNwWygx
KSAtICgxKV0pLCB2YXJpYWJsZS0+Z2V0RXh0ZW5zaW9uKCkpKSB7Ci0gICAgICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gZG9uJ3QgZGVsZXRlICQxLnN0cmluZywgaXQncyB1c2VkIGJ5IGVycm9yIHJlY292ZXJ5LCBh
bmQgdGhlIHBvb2wKLSAgICAgICAgLy8gcG9wIHdpbGwgcmVjbGFpbSB0aGUgbWVtb3J5Ci0KLSAg
ICAgICAgaWYgKHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3Qg
KSB7Ci0gICAgICAgICAgICBDb25zdGFudFVuaW9uKiBjb25zdEFycmF5ID0gdmFyaWFibGUtPmdl
dENvbnN0UG9pbnRlcigpOwotICAgICAgICAgICAgVFR5cGUgdCh2YXJpYWJsZS0+Z2V0VHlwZSgp
KTsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXksIHQsICh5eWxzcFsoMSkg
LSAoMSldKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZS0+
Z2V0VW5pcXVlSWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YXJpYWJsZS0+Z2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHl5bHNwWygxKSAtICgxKV0pKTsK
LSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1OgotCi0gICAgewotICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA2OgotCi0gICAgewotICAg
ICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0g
ICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdCgoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmkpOwot
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVm
aW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgIH0KLSAgICBicmVhazsK
LQotICBjYXNlIDc6Ci0KLSAgICB7Ci0gICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkg
PSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgdW5pb25BcnJheS0+c2V0RkNvbnN0KCh5
eXZzcFsoMSkgLSAoMSldLmxleCkuZik7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJy
YXksIFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygxKSAt
ICgxKV0pKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA4OgotCi0gICAgewotICAgICAg
ICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAg
ICAgIHVuaW9uQXJyYXktPnNldEJDb25zdCgoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmIpOwotICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmlu
ZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSA5OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICB9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSAxMDoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTE6Ci0KLSAgICB7Ci0gICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmFkZEluZGV4RXhwcmVzc2lv
bigoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAt
ICg0KV0pLCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSk7Ci0gICAg
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTI6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDEzOgotCi0gICAgewotICAgICAg
ICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzQXJyYXko
KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygzKSAtICgzKV0pLCAiY2Fu
bm90IGFwcGx5IGRvdCBvcGVyYXRvciB0byBhbiBhcnJheSIsICIuIik7Ci0gICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzVmVjdG9yKCkpIHsKLSAgICAgICAgICAg
IFRWZWN0b3JGaWVsZHMgZmllbGRzOwotICAgICAgICAgICAgaWYgKCEgY29udGV4dC0+cGFyc2VW
ZWN0b3JGaWVsZHMoKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Tm9taW5hbFNpemUoKSwgZmllbGRzLCAo
eXlsc3BbKDMpIC0gKDMpXSkpKSB7Ci0gICAgICAgICAgICAgICAgZmllbGRzLm51bSA9IDE7Ci0g
ICAgICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbMF0gPSAwOwotICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0UXVhbGlm
aWVyKCkgPT0gRXZxQ29uc3QpIHsgLy8gY29uc3RhbnQgZm9sZGluZyBmb3IgdmVjdG9yIGZpZWxk
cwotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRl
eHQtPmFkZENvbnN0VmVjdG9yTm9kZShmaWVsZHMsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDMpIC0gKDMpXSkpOwotICAgICAgICAgICAgICAgIGlm
ICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewotICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShUVHlw
ZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBl
KCksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNp
b24oKSwgRXZxQ29uc3QsIChpbnQpICgqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcpLnNp
emUoKSkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBUU3RyaW5nIHZl
Y3RvclN0cmluZyA9ICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZzsKLSAgICAgICAgICAg
ICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN3aXp6
bGUoZmllbGRzLCAoeXlsc3BbKDMpIC0gKDMpXSkpOwotICAgICAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChF
T3BWZWN0b3JTd2l6emxlLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSwgaW5kZXgsICh5eWxzcFsoMikgLSAoMyldKSk7Ci0gICAgICAgICAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRCYXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksIChp
bnQpIHZlY3RvclN0cmluZy5zaXplKCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNl
IGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNNYXRyaXgo
KSkgewotICAgICAgICAgICAgVE1hdHJpeEZpZWxkcyBmaWVsZHM7Ci0gICAgICAgICAgICBpZiAo
ISBjb250ZXh0LT5wYXJzZU1hdHJpeEZpZWxkcygqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJp
bmcsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXROb21pbmFs
U2l6ZSgpLCBmaWVsZHMsICh5eWxzcFsoMykgLSAoMyldKSkpIHsKLSAgICAgICAgICAgICAgICBm
aWVsZHMud2hvbGVSb3cgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBmaWVsZHMud2hvbGVDb2wg
PSBmYWxzZTsKLSAgICAgICAgICAgICAgICBmaWVsZHMucm93ID0gMDsKLSAgICAgICAgICAgICAg
ICBmaWVsZHMuY29sID0gMDsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChmaWVsZHMud2hvbGVSb3cgfHwgZmllbGRz
Lndob2xlQ29sKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAt
ICgzKV0pLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIpOwot
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICBDb25z
dGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAg
ICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDApOwotICAgICAgICAgICAgICAgIFRJbnRlcm1U
eXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlv
bkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDMp
IC0gKDMpXSkpOwotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdCwgKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGluZGV4LCAoeXlsc3BbKDIpIC0g
KDMpXSkpOwotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0QmFzaWNUeXBlKCksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5nZXRQcmVjaXNpb24oKSxFdnFUZW1wb3JhcnksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXROb21pbmFsU2l6ZSgpKSk7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3Rh
bnRVbmlvblsxXTsKLSAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoZmllbGRz
LmNvbCAqICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXROb21p
bmFsU2l6ZSgpICsgZmllbGRzLnJvdyk7Ci0gICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBp
bmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXks
IFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMykgLSAoMyld
KSk7Ci0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eWxzcFsoMikgLSAoMyldKSk7
Ci0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBl
KFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRCYXNp
Y1R5cGUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFBy
ZWNpc2lvbigpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpID09IEVidFN0
cnVjdCkgewotICAgICAgICAgICAgYm9vbCBmaWVsZEZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAg
ICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBpOwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZpZWxkcy5z
aXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChmaWVsZHNbaV0tPm5hbWUoKSA9PSAq
KHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgZmll
bGRGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmaWVsZEZvdW5kKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsKLSAgICAgICAgICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+YWRkQ29uc3RT
dHJ1Y3QoKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZSgqZmllbGRzW2ldLT50eXBlKCkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlIHRoZSBxdWFsaWZpZXIgb2YgdGhlIHJldHVybiB0
eXBlLCBub3Qgb2YgdGhlIHN0cnVjdHVyZSBmaWVsZAotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gYXMgdGhlIHN0cnVjdHVyZSBkZWZpbml0aW9uIGlzIHNoYXJlZCBiZXR3ZWVuIHZhcmlvdXMg
c3RydWN0dXJlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0KTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsx
XTsKLSAgICAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGkpOwotICAgICAg
ICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgKmZpZWxkc1tpXS0+dHlwZSgpLCAoeXlsc3Bb
KDMpIC0gKDMpXSkpOwotICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3RT
dHJ1Y3QsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRleCwg
KHl5bHNwWygyKSAtICgzKV0pKTsKLSAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKCpmaWVsZHNbaV0tPnR5cGUoKSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICIgbm8gc3VjaCBmaWVsZCBpbiBzdHJ1Y3R1cmUiLCAo
eXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7Ci0gICAgICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoKHl5bHNwWygyKSAtICgzKV0pLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1
cmUsIHZlY3Rvciwgb3IgbWF0cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgKHl5dnNwWygzKSAtICgz
KV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8g
ZG9uJ3QgZGVsZXRlICQzLnN0cmluZywgaXQncyBmcm9tIHRoZSBwb29sCi0gICAgfQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgMTQ6Ci0KLSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVF
cnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgIisrIiwgKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSkpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFBvc3RJbmNyZW1lbnQsICh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDIpXSksIGNvbnRleHQtPnN5bWJv
bFRhYmxlKTsKLSAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAw
KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgyKV0p
LCAiKysiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29t
cGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDIpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLQot
ICBjYXNlIDE1OgotCi0gICAgewotICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVj
aygoeXlsc3BbKDIpIC0gKDIpXSksICItLSIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZFVuYXJ5TWF0aChFT3BQb3N0RGVjcmVtZW50LCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgyKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7
Ci0gICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewotICAg
ICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgIi0tIiwg
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3Ry
aW5nKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAx
NjoKLQotICAgIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPmludGVnZXJFcnJvckNoZWNrKCh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAiW10iKSkKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgfQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgMTc6Ci0KLSAgICB7Ci0gICAgICAgIFRGdW5jdGlvbiogZm5D
YWxsID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5mdW5jdGlvbjsKLSAgICAgICAgVE9wZXJh
dG9yIG9wID0gZm5DYWxsLT5nZXRCdWlsdEluT3AoKTsKLQotICAgICAgICBpZiAob3AgIT0gRU9w
TnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFRoZW4gdGhp
cyBzaG91bGQgYmUgYSBjb25zdHJ1Y3Rvci4KLSAgICAgICAgICAgIC8vIERvbid0IGdvIHRocm91
Z2ggdGhlIHN5bWJvbCB0YWJsZSBmb3IgY29uc3RydWN0b3JzLgotICAgICAgICAgICAgLy8gVGhl
aXIgcGFyYW1ldGVycyB3aWxsIGJlIHZlcmlmaWVkIGFsZ29yaXRobWljYWxseS4KLSAgICAgICAg
ICAgIC8vCi0gICAgICAgICAgICBUVHlwZSB0eXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7ICAv
LyB1c2UgdGhpcyB0byBnZXQgdGhlIHR5cGUgYmFjawotICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmNvbnN0cnVjdG9yRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDEpXSksICh5eXZzcFsoMSkgLSAo
MSldLmludGVybSkuaW50ZXJtTm9kZSwgKmZuQ2FsbCwgb3AsICZ0eXBlKSkgewotICAgICAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IDA7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgLy8gSXQncyBhIGNv
bnN0cnVjdG9yLCBvZiB0eXBlICd0eXBlJy4KLSAgICAgICAgICAgICAgICAvLwotICAgICAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmFkZENvbnN0
cnVjdG9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZSwgJnR5cGUsIG9wLCBm
bkNhbGwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewotICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0
b3IoMCwgb3AsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUodHlwZSk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gTm90IGEgY29uc3RydWN0
b3IuICBGaW5kIGl0IGluIHRoZSBzeW1ib2wgdGFibGUuCi0gICAgICAgICAgICAvLwotICAgICAg
ICAgICAgY29uc3QgVEZ1bmN0aW9uKiBmbkNhbmRpZGF0ZTsKLSAgICAgICAgICAgIGJvb2wgYnVp
bHRJbjsKLSAgICAgICAgICAgIGZuQ2FuZGlkYXRlID0gY29udGV4dC0+ZmluZEZ1bmN0aW9uKCh5
eWxzcFsoMSkgLSAoMSldKSwgZm5DYWxsLCAmYnVpbHRJbik7Ci0gICAgICAgICAgICBpZiAoZm5D
YW5kaWRhdGUpIHsKLSAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIC8vIEEgZGVj
bGFyZWQgZnVuY3Rpb24uCi0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICBpZiAo
YnVpbHRJbiAmJiAhZm5DYW5kaWRhdGUtPmdldEV4dGVuc2lvbigpLmVtcHR5KCkgJiYKLSAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0g
KDEpXSksIGZuQ2FuZGlkYXRlLT5nZXRFeHRlbnNpb24oKSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBvcCA9IGZuQ2FuZGlkYXRlLT5nZXRCdWlsdEluT3AoKTsKLSAgICAgICAgICAgICAgICBpZiAo
YnVpbHRJbiAmJiBvcCAhPSBFT3BOdWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vCi0gICAg
ICAgICAgICAgICAgICAgIC8vIEEgZnVuY3Rpb24gY2FsbCBtYXBwZWQgdG8gYSBidWlsdC1pbiBv
cGVyYXRpb24uCi0gICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgIGlm
IChmbkNhbmRpZGF0ZS0+Z2V0UGFyYW1Db3VudCgpID09IDEpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUcmVhdCBpdCBsaWtlIGEgYnVp
bHQtaW4gdW5hcnkgb3BlcmF0b3IuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLwotICAgICAg
ICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChvcCwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
KS5pbnRlcm1Ob2RlLCAoeXlsc3BbKDEpIC0gKDEpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPT0gMCkgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVh
bSBleHRyYUluZm9TdHJlYW07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFJbmZv
U3RyZWFtIDw8ICJidWlsdCBpbiB1bmFyeSBvcGVyYXRvciBmdW5jdGlvbi4gIFR5cGU6ICIgPDwg
c3RhdGljX2Nhc3Q8VEludGVybVR5cGVkKj4oKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRl
cm1Ob2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtKS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCksICIgd3Jvbmcgb3BlcmFuZCB0eXBlIiwgIkludGVy
bmFsIEVycm9yIiwgZXh0cmFJbmZvLmNfc3RyKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFlZRVJST1I7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3Io
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUsIG9wLCAoeXlsc3BbKDEp
IC0gKDEpXSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHJlYWwgZnVuY3Rpb24gY2FsbAot
Ci0gICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcigoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSwgRU9wRnVuY3Rpb25DYWxsLCAoeXlsc3BbKDEpIC0g
KDEpXSkpOwotICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPnNldFR5cGUoZm5DYW5kaWRhdGUtPmdldFJldHVyblR5cGUoKSk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgLy8gdGhpcyBpcyBob3cgd2Uga25vdyB3aGV0aGVyIHRoZSBnaXZlbiBmdW5jdGlv
biBpcyBhIGJ1aWx0SW4gZnVuY3Rpb24gb3IgYSB1c2VyIGRlZmluZWQgZnVuY3Rpb24KLSAgICAg
ICAgICAgICAgICAgICAgLy8gaWYgYnVpbHRJbiA9PSBmYWxzZSwgaXQncyBhIHVzZXJEZWZpbmVk
IC0+IGNvdWxkIGJlIGFuIG92ZXJsb2FkZWQgYnVpbHRJbiBmdW5jdGlvbiBhbHNvCi0gICAgICAg
ICAgICAgICAgICAgIC8vIGlmIGJ1aWx0SW4gPT0gdHJ1ZSwgaXQncyBkZWZpbml0ZWx5IGEgYnVp
bHRJbiBmdW5jdGlvbiB3aXRoIEVPcE51bGwKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFidWls
dEluKQotICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRVc2VyRGVmaW5lZCgpOwotICAgICAgICAgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNl
dE5hbWUoZm5DYW5kaWRhdGUtPmdldE1hbmdsZWROYW1lKCkpOwotCi0gICAgICAgICAgICAgICAg
ICAgIFRRdWFsaWZpZXIgcXVhbDsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBmbkNhbmRpZGF0ZS0+Z2V0UGFyYW1Db3VudCgpOyArK2kpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHF1YWwgPSBmbkNhbmRpZGF0ZS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVh
bGlmaWVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVhbCA9PSBFdnFPdXQgfHwg
cXVhbCA9PSBFdnFJbk91dCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250
ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0
TGluZSgpLCAiYXNzaWduIiwgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0Fn
Z3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgpW2ldLT5nZXRBc1R5cGVkKCkpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybSkuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiQ29uc3RhbnQgdmFsdWUgY2Fubm90IGJlIHBh
c3NlZCBmb3IgJ291dCcgb3IgJ2lub3V0JyBwYXJhbWV0ZXJzLiIsICJFcnJvciIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShmbkNhbmRpZGF0ZS0+Z2V0UmV0dXJuVHlw
ZSgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gZXJyb3IgbWVz
c2FnZSB3YXMgcHV0IG91dCBieSBQYUZpbmRGdW5jdGlvbigpCi0gICAgICAgICAgICAgICAgLy8g
UHV0IG9uIGEgZHVtbXkgbm9kZSBmb3IgZXJyb3IgcmVjb3ZlcnkKLSAgICAgICAgICAgICAgICBD
b25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAg
ICAgICAgICAgdW5pb25BcnJheS0+c2V0RkNvbnN0KDAuMGYpOwotICAgICAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2
cUNvbnN0KSwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZGVsZXRlIGZuQ2Fs
bDsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxODoKLQotICAgIHsKLSAgICAgICAgKHl5
dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pOwotICAgIH0KLSAgICBicmVh
azsKLQotICBjYXNlIDE5OgotCi0gICAgewotICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3Bb
KDMpIC0gKDMpXSksICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIpOwotICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygzKSAt
ICgzKV0uaW50ZXJtKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyMDoKLQotICAgIHsK
LSAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pOwotICAg
IH0KLSAgICBicmVhazsKLQotICBjYXNlIDIxOgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50
ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0g
IGNhc2UgMjI6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uID0gKHl5
dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKTsKLSAgICAgICAgKHl5dmFsLmludGVybSku
aW50ZXJtTm9kZSA9IDA7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjM6Ci0KLSAgICB7
Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmZ1bmN0aW9uKTsKLSAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtTm9kZSA9IDA7Ci0g
ICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjQ6Ci0KLSAgICB7Ci0gICAgICAgIFRQYXJhbWV0
ZXIgcGFyYW0gPSB7IDAsIG5ldyBUVHlwZSgoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0VHlwZSgpKSB9OwotICAgICAgICAoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0uZnVuY3Rpb24pLT5hZGRQYXJhbWV0ZXIocGFyYW0pOwotICAgICAgICAoeXl2YWwuaW50ZXJt
KS5mdW5jdGlvbiA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbik7Ci0gICAgICAg
ICh5eXZhbC5pbnRlcm0pLmludGVybU5vZGUgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyNToKLQotICAgIHsK
LSAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBlKCh5eXZzcFsoMykgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkpIH07Ci0gICAgICAgICh5eXZz
cFsoMSkgLSAoMyldLmludGVybSkuZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJhbSk7Ci0gICAg
ICAgICh5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5m
dW5jdGlvbjsKLSAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtTm9kZSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybSkuaW50ZXJt
Tm9kZSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFso
MikgLSAoMyldKSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjY6Ci0KLSAgICB7Ci0g
ICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJt
LmZ1bmN0aW9uKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyNzoKLQotICAgIHsKLSAg
ICAgICAgLy8KLSAgICAgICAgLy8gQ29uc3RydWN0b3IKLSAgICAgICAgLy8KLSAgICAgICAgVE9w
ZXJhdG9yIG9wID0gRU9wTnVsbDsKLSAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS50eXBlKS51c2VyRGVmKSB7Ci0gICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdFN0cnVjdDsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN3aXRjaCAoKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLnR5cGUpLnR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6Ci0gICAgICAg
ICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5tYXRyaXgpIHsKLSAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5z
aXplKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBFT3BDb25zdHJ1Y3RNYXQy
OyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RN
YXQzOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1
Y3RNYXQ0OyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2goKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLnR5cGUpLnNpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBvcCA9IEVPcENv
bnN0cnVjdEZsb2F0OyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9IEVP
cENvbnN0cnVjdFZlYzI7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvcCA9
IEVPcENvbnN0cnVjdFZlYzM7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBv
cCA9IEVPcENvbnN0cnVjdFZlYzQ7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
RWJ0SW50OgotICAgICAgICAgICAgICAgIHN3aXRjaCgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
dHlwZSkuc2l6ZSkgewotICAgICAgICAgICAgICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RJ
bnQ7ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdElW
ZWMyOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0SVZl
YzM7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RJVmVj
NDsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBFYnRCb29sOgotICAgICAgICAgICAgICAgIHN3aXRjaCgoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0udHlwZSkuc2l6ZSkgewotICAgICAgICAgICAgICAgIGNhc2UgMTogb3Ag
PSBFT3BDb25zdHJ1Y3RCb29sOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9
IEVPcENvbnN0cnVjdEJWZWMyOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0g
RU9wQ29uc3RydWN0QlZlYzM7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBF
T3BDb25zdHJ1Y3RCVmVjNDsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAob3AgPT0gRU9wTnVsbCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgImNhbm5vdCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwg
Z2V0QmFzaWNTdHJpbmcoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5cGUpKTsKLSAg
ICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5cGUgPSBFYnRGbG9hdDsKLSAgICAgICAgICAgICAg
ICBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIFRTdHJpbmcgdGVtcFN0cmluZzsKLSAgICAgICAgVFR5cGUgdHlwZSgoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0udHlwZSkpOwotICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gbmV3IFRG
dW5jdGlvbigmdGVtcFN0cmluZywgdHlwZSwgb3ApOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1
bmN0aW9uKSA9IGZ1bmN0aW9uOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDI4OgotCi0g
ICAgewotICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCh5eWxzcFsoMSkg
LSAoMSldKSwgKih5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nKSkKLSAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgVFR5cGUgdHlwZShFYnRWb2lkLCBFYnBVbmRlZmlu
ZWQpOwotICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigoeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLnN0cmluZywgdHlwZSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uZnVu
Y3Rpb24pID0gZnVuY3Rpb247Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjk6Ci0KLSAg
ICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgIH0KLSAgICBicmVhazsKLQotICBj
YXNlIDMwOgotCi0gICAgewotICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygo
eXlsc3BbKDEpIC0gKDIpXSksICIrKyIsICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVu
YXJ5TWF0aChFT3BQcmVJbmNyZW1lbnQsICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLCAoeXlsc3BbKDEpIC0gKDIpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKLSAg
ICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoKHl5bHNwWygxKSAtICgyKV0pLCAiKysiLCAoeXl2
c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmco
KSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDMxOgot
Ci0gICAgewotICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXlsc3BbKDEp
IC0gKDIpXSksICItLSIsICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
KSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChF
T3BQcmVEZWNyZW1lbnQsICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCAoeXlsc3BbKDEpIC0gKDIpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYg
KCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7Ci0gICAgICAgICAgICBjb250
ZXh0LT51bmFyeU9wRXJyb3IoKHl5bHNwWygxKSAtICgyKV0pLCAiLS0iLCAoeXl2c3BbKDIpIC0g
KDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDMyOgotCi0gICAgewot
ICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5vcCAhPSBFT3BOdWxsKSB7Ci0g
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkVW5hcnlNYXRoKCh5eXZzcFsoMSkgLSAoMildLmludGVybSkub3AsICh5eXZz
cFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDEpIC0gKDIpXSks
IGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKLSAgICAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPT0gMCkgewotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVycm9y
T3AgPSAiIjsKLSAgICAgICAgICAgICAgICBzd2l0Y2goKHl5dnNwWygxKSAtICgyKV0uaW50ZXJt
KS5vcCkgewotICAgICAgICAgICAgICAgIGNhc2UgRU9wTmVnYXRpdmU6ICAgZXJyb3JPcCA9ICIt
IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OiBlcnJvck9wID0g
IiEiOyBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OiBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKCh5eWxzcFsoMSkg
LSAoMildKSwgZXJyb3JPcCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICB9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSAzMzoKLQotICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BO
dWxsOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzNDoKLQotICAgIHsgKHl5dmFsLmludGVybSku
b3AgPSBFT3BOZWdhdGl2ZTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzU6Ci0KLSAgICB7ICh5
eXZhbC5pbnRlcm0pLm9wID0gRU9wTG9naWNhbE5vdDsgfQotICAgIGJyZWFrOwotCi0gIGNhc2Ug
MzY6Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAz
NzoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTXVsLCAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwot
ICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKLSAgICAg
ICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiKiIsICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmlu
ZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxl
dGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLQotICBj
YXNlIDM4OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BEaXYsICh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJs
ZSk7Ci0gICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewot
ICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICIv
IiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRl
U3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRD
b21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgMzk6Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSA0MDoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wQWRkLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9s
VGFibGUpOwotICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDAp
IHsKLSAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0p
LCAiKyIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21w
bGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVh
azsKLQotICBjYXNlIDQxOgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BTdWIsICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5z
eW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0g
KDMpXSksICItIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICB9Ci0gICAgfQotICAg
IGJyZWFrOwotCi0gIGNhc2UgNDI6Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSA0MzoKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KLSAgICBi
cmVhazsKLQotICBjYXNlIDQ0OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMZXNz
VGhhbiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFso
MykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNv
bnRleHQtPnN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxz
cFsoMikgLSAoMyldKSwgIjwiLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBD
b25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNl
KTsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2ws
IEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwotICAgICAgICB9
Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDU6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5h
cnlNYXRoKEVPcEdyZWF0ZXJUaGFuLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxz
cFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmJp
bmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiPiIsICh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBDb25zdGFudFVuaW9uICp1
bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICB1bmlvbkFycmF5
LT5zZXRCQ29uc3QoZmFsc2UpOwotICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJh
eSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMikgLSAo
MyldKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0NjoKLQotICAg
IHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTGVzc1RoYW5FcXVhbCwgKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsK
LSAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIjw9Iiwg
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3Ry
aW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21w
bGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
ICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAg
ICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29u
c3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNv
bnN0KSwgKHl5bHNwWygyKSAtICgzKV0pKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsK
LQotICBjYXNlIDQ3OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhh
bkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNw
WygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwg
Y29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5
bHNwWygyKSAtICgzKV0pLCAiPj0iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZh
bHNlKTsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJv
b2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDg6Ci0KLSAgICB7ICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0OToKLQotICAgIHsKLSAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJp
bmFyeU1hdGgoRU9wRXF1YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygy
KSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmICgoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5
T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICI9PSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlv
bkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICB1bmlvbkFycmF5LT5z
ZXRCQ29uc3QoZmFsc2UpOwotICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwg
VFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMikgLSAoMyld
KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1MDoKLQotICAgIHsK
LSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTm90RXF1YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAg
IGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewotICAgICAgICAgICAg
Y29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICIhPSIsICh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAo
eXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJp
bmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBDb25z
dGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAg
ICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwotICAgICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5p
b24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5
eWxzcFsoMikgLSAoMyldKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSA1MToKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KLSAgICBicmVhazsKLQotICBjYXNl
IDUyOgotCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2Ug
NTM6Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1
NDoKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDU1
OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2FsQW5kLCAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFi
bGUpOwotICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAi
JiYiLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxl
dGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFd
OwotICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwg
RXZxQ29uc3QpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgNTY6Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9Ci0gICAgYnJl
YWs7Ci0KLSAgY2FzZSA1NzoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNh
bFhvciwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFso
MykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNv
bnRleHQtPnN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxz
cFsoMikgLSAoMyldKSwgIl5eIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcg
Q29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxz
ZSk7Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29s
LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygyKSAtICgzKV0pKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDU4OgotCi0gICAgeyAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTk6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5h
cnlNYXRoKEVPcExvZ2ljYWxPciwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3Bb
KDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5h
cnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgInx8IiwgKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVu
aW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgIHVuaW9uQXJyYXkt
PnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5
LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygyKSAtICgz
KV0pKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDYwOgotCi0gICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNjE6Ci0KLSAgICB7
Ci0gICAgICAgaWYgKGNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNSldKSwg
KHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTZWxlY3Rpb24oKHl5dnNwWygxKSAtICg1
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5bHNwWygyKSAtICg1KV0pKTsKLSAgICAgICAgaWYgKCh5eXZzcFsoMykgLSAoNSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkgIT0gKHl5dnNwWyg1KSAtICg1KV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKSkKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9IDA7Ci0KLSAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5
eWxzcFsoMikgLSAoNSldKSwgIjoiLCAoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWyg1KSAtICg1KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gKHl5dnNwWyg1KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA2MjoKLQotICAgIHsgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSk7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDYzOgotCi0gICAgewotICAgICAgICBpZiAoY29u
dGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDMpXSksICJhc3NpZ24iLCAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCi0gICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRBc3NpZ24oKHl5dnNwWygyKSAtICgzKV0uaW50ZXJt
KS5vcCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFso
MykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwot
ICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKLSAgICAg
ICAgICAgIGNvbnRleHQtPmFzc2lnbkVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgImFzc2lnbiIs
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0
cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29t
cGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLQot
ICBjYXNlIDY0OgotCi0gICAgeyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcEFzc2lnbjsgfQotICAg
IGJyZWFrOwotCi0gIGNhc2UgNjU6Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTXVs
QXNzaWduOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA2NjoKLQotICAgIHsgKHl5dmFsLmludGVy
bSkub3AgPSBFT3BEaXZBc3NpZ247IH0KLSAgICBicmVhazsKLQotICBjYXNlIDY3OgotCi0gICAg
eyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcEFkZEFzc2lnbjsgfQotICAgIGJyZWFrOwotCi0gIGNh
c2UgNjg6Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wU3ViQXNzaWduOyB9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSA2OToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7
Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgNzA6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb21t
YSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7Ci0gICAg
ICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewotICAgICAgICAg
ICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICIsIiwgKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCks
ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0
cmluZygpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2Ug
NzE6Ci0KLSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5jb25zdEVycm9yQ2hlY2soKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQotICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICB9Ci0gICAgYnJl
YWs7Ci0KLSAgY2FzZSA3MjoKLQotICAgIHsKLSAgICAgICAgVEZ1bmN0aW9uICZmdW5jdGlvbiA9
ICooKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5mdW5jdGlvbik7Ci0gICAgICAgIAotICAgICAg
ICBUSW50ZXJtQWdncmVnYXRlICpwcm90b3R5cGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKLSAg
ICAgICAgcHJvdG90eXBlLT5zZXRUeXBlKGZ1bmN0aW9uLmdldFJldHVyblR5cGUoKSk7Ci0gICAg
ICAgIHByb3RvdHlwZS0+c2V0TmFtZShmdW5jdGlvbi5nZXROYW1lKCkpOwotICAgICAgICAKLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCk7IGkr
KykKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgVFBhcmFtZXRlciAmcGFyYW0gPSBmdW5j
dGlvbi5nZXRQYXJhbShpKTsKLSAgICAgICAgICAgIGlmIChwYXJhbS5uYW1lICE9IDApCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVFZhcmlhYmxlIHZhcmlhYmxlKHBhcmFtLm5hbWUs
ICpwYXJhbS50eXBlKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBwcm90b3R5
cGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShwcm90b3R5cGUsIGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUuZ2V0VW5pcXVlSWQoKSwgdmFyaWFi
bGUuZ2V0TmFtZSgpLCB2YXJpYWJsZS5nZXRUeXBlKCksICh5eWxzcFsoMSkgLSAoMildKSksICh5
eWxzcFsoMSkgLSAoMildKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJvdG90eXBlID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmdyb3dBZ2dyZWdhdGUocHJvdG90eXBlLCBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3lt
Ym9sKDAsICIiLCAqcGFyYW0udHlwZSwgKHl5bHNwWygxKSAtICgyKV0pKSwgKHl5bHNwWygxKSAt
ICgyKV0pKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcHJv
dG90eXBlLT5zZXRPcChFT3BQcm90b3R5cGUpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gcHJvdG90eXBlOwotCi0gICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgp
OwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDczOgotCi0gICAgewotICAgICAgICBpZiAo
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUpCi0gICAgICAgICAgICAo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZS0+c2V0T3AoRU9wRGVjbGFy
YXRpb24pOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGU7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNh
c2UgNzQ6Ci0KLSAgICB7Ci0gICAgICAgIGlmICgoKHl5dnNwWygyKSAtICg0KV0uaW50ZXJtLnBy
ZWNpc2lvbikgPT0gRWJwSGlnaCkgJiYgKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfRlJBR01F
TlRfU0hBREVSKSAmJiAhY29udGV4dC0+ZnJhZ21lbnRQcmVjaXNpb25IaWdoKSB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDQpXSksICJwcmVjaXNpb24gaXMgbm90
IHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXIiLCAiaGlnaHAiKTsKLSAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWNvbnRleHQtPnN5bWJv
bFRhYmxlLnNldERlZmF1bHRQcmVjaXNpb24oICh5eXZzcFsoMykgLSAoNCldLmludGVybS50eXBl
KSwgKHl5dnNwWygyKSAtICg0KV0uaW50ZXJtLnByZWNpc2lvbikgKSkgewotICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICg0KV0pLCAiaWxsZWdhbCB0eXBlIGFyZ3VtZW50
IGZvciBkZWZhdWx0IHByZWNpc2lvbiBxdWFsaWZpZXIiLCBnZXRCYXNpY1N0cmluZygoeXl2c3Bb
KDMpIC0gKDQpXS5pbnRlcm0udHlwZSkudHlwZSkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAw
OwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDc1OgotCi0gICAgewotICAgICAgICAvLwot
ICAgICAgICAvLyBNdWx0aXBsZSBkZWNsYXJhdGlvbnMgb2YgdGhlIHNhbWUgZnVuY3Rpb24gYXJl
IGFsbG93ZWQuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIElmIHRoaXMgaXMgYSBkZWZpbml0aW9u
LCB0aGUgZGVmaW5pdGlvbiBwcm9kdWN0aW9uIGNvZGUgd2lsbCBjaGVjayBmb3IgcmVkZWZpbml0
aW9ucwotICAgICAgICAvLyAod2UgZG9uJ3Qga25vdyBhdCB0aGlzIHBvaW50IGlmIGl0J3MgYSBk
ZWZpbml0aW9uIG9yIG5vdCkuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFJlZGVjbGFyYXRpb25z
IGFyZSBhbGxvd2VkLiAgQnV0LCByZXR1cm4gdHlwZXMgYW5kIHBhcmFtZXRlciBxdWFsaWZpZXJz
IG11c3QgbWF0Y2guCi0gICAgICAgIC8vCi0gICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0
YXRpY19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0TWFuZ2xlZE5hbWUoKSkpOwotICAgICAgICBp
ZiAocHJldkRlYykgewotICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdldFJldHVyblR5cGUoKSAh
PSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5UeXBlKCkpIHsK
LSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICJvdmVy
bG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0dXJuIHR5cGUiLCAoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNTdHJp
bmcoKSk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcmV2RGVjLT5nZXRQYXJhbUNv
dW50KCk7ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRQYXJhbShpKS50
eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24p
LT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSkgewotICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICJvdmVybG9hZGVkIGZ1bmN0aW9u
cyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAoeXl2c3BbKDEpIC0g
KDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXJTdHJp
bmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLwotICAgICAg
ICAvLyBDaGVjayBmb3IgcHJldmlvdXNseSBkZWNsYXJlZCB2YXJpYWJsZXMgdXNpbmcgdGhlIHNh
bWUgbmFtZS4KLSAgICAgICAgLy8KLSAgICAgICAgVFN5bWJvbCAqcHJldlN5bSA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmZpbmQoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0
TmFtZSgpKTsKLSAgICAgICAgaWYgKHByZXZTeW0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
ICghcHJldlN5bS0+aXNGdW5jdGlvbigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgInJlZGVmaW5pdGlvbiIsICh5eXZz
cFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldE5hbWUoKS5jX3N0cigpLCAiZnVuY3Rp
b24iKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBJbnNl
cnQgdGhlIHVubWFuZ2xlZCBuYW1lIHRvIGRldGVjdCBwb3RlbnRpYWwgZnV0dXJlIHJlZGVmaW5p
dGlvbiBhcyBhIHZhcmlhYmxlLgotICAgICAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUuZ2V0
T3V0ZXJMZXZlbCgpLT5pbnNlcnQoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+
Z2V0TmFtZSgpLCAqKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKSk7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLwotICAgICAgICAvLyBJZiB0aGlzIGlzIGEgcmVkZWNsYXJhdGlvbiwg
aXQgY291bGQgYWxzbyBiZSBhIGRlZmluaXRpb24sCi0gICAgICAgIC8vIGluIHdoaWNoIGNhc2Us
IHdlIHdhbnQgdG8gdXNlIHRoZSB2YXJpYWJsZSBuYW1lcyBmcm9tIHRoaXMgb25lLCBhbmQgbm90
IHRoZSBvbmUgdGhhdCdzCi0gICAgICAgIC8vIGJlaW5nIHJlZGVjbGFyZWQuICBTbywgcGFzcyBi
YWNrIHVwIHRoaXMgZGVjbGFyYXRpb24sIG5vdCB0aGUgb25lIGluIHRoZSBzeW1ib2wgdGFibGUu
Ci0gICAgICAgIC8vCi0gICAgICAgICh5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uID0gKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKTsKLQotICAgICAgICAvLyBXZSdyZSBhdCB0aGUgaW5u
ZXIgc2NvcGUgbGV2ZWwgb2YgdGhlIGZ1bmN0aW9uJ3MgYXJndW1lbnRzIGFuZCBib2R5IHN0YXRl
bWVudC4KLSAgICAgICAgLy8gQWRkIHRoZSBmdW5jdGlvbiBwcm90b3R5cGUgdG8gdGhlIHN1cnJv
dW5kaW5nIHNjb3BlIGluc3RlYWQuCi0gICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLmdldE91
dGVyTGV2ZWwoKS0+aW5zZXJ0KCooeXl2YWwuaW50ZXJtKS5mdW5jdGlvbik7Ci0gICAgfQotICAg
IGJyZWFrOwotCi0gIGNhc2UgNzY6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uZnVu
Y3Rpb24pID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmZ1bmN0aW9uKTsKLSAgICB9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSA3NzoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5mdW5j
dGlvbikgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24pOwotICAgIH0KLSAgICBi
cmVhazsKLQotICBjYXNlIDc4OgotCi0gICAgewotICAgICAgICAvLyBBZGQgdGhlIHBhcmFtZXRl
cgotICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS5mdW5jdGlvbik7Ci0gICAgICAgIGlmICgoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLnBh
cmFtLnR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQpCi0gICAgICAgICAgICAoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5hZGRQYXJhbWV0ZXIoKHl5dnNwWygyKSAtICgy
KV0uaW50ZXJtKS5wYXJhbSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRlbGV0ZSAoeXl2
c3BbKDIpIC0gKDIpXS5pbnRlcm0pLnBhcmFtLnR5cGU7Ci0gICAgfQotICAgIGJyZWFrOwotCi0g
IGNhc2UgNzk6Ci0KLSAgICB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIE9ubHkgZmlyc3QgcGFy
YW1ldGVyIG9mIG9uZS1wYXJhbWV0ZXIgZnVuY3Rpb25zIGNhbiBiZSB2b2lkCi0gICAgICAgIC8v
IFRoZSBjaGVjayBmb3IgbmFtZWQgcGFyYW1ldGVycyBub3QgYmVpbmcgdm9pZCBpcyBkb25lIGlu
IHBhcmFtZXRlcl9kZWNsYXJhdG9yCi0gICAgICAgIC8vCi0gICAgICAgIGlmICgoeXl2c3BbKDMp
IC0gKDMpXS5pbnRlcm0pLnBhcmFtLnR5cGUtPmdldEJhc2ljVHlwZSgpID09IEVidFZvaWQpIHsK
LSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBUaGlzIHBhcmFtZXRlciA+IGZpcnN0IGlz
IHZvaWQKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3Bb
KDIpIC0gKDMpXSksICJjYW5ub3QgYmUgYW4gYXJndW1lbnQgdHlwZSBleGNlcHQgZm9yICcodm9p
ZCknIiwgInZvaWQiKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
ICAgIGRlbGV0ZSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pLnBhcmFtLnR5cGU7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBBZGQgdGhlIHBhcmFtZXRlcgotICAgICAgICAgICAg
KHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uZnVuY3Rp
b24pOwotICAgICAgICAgICAgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmZ1bmN0aW9uKS0+YWRk
UGFyYW1ldGVyKCh5eXZzcFsoMykgLSAoMyldLmludGVybSkucGFyYW0pOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgODA6Ci0KLSAgICB7Ci0gICAgICAgIGlmICgoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyICE9IEV2cUdsb2JhbCAmJiAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgewot
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAibm8gcXVhbGlm
aWVycyBhbGxvd2VkIGZvciBmdW5jdGlvbiByZXR1cm4iLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcikpOwotICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgIC8vIG1ha2Ugc3VyZSBhIHNhbXBs
ZXIgaXMgbm90IGludm9sdmVkIGFzIHdlbGwuLi4KLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVj
dFF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgzKV0pLCAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0udHlwZSkpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAg
ICAgIC8vIEFkZCB0aGUgZnVuY3Rpb24gYXMgYSBwcm90b3R5cGUgYWZ0ZXIgcGFyc2luZyBpdCAo
d2UgZG8gbm90IHN1cHBvcnQgcmVjdXJzaW9uKQotICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9u
OwotICAgICAgICBUVHlwZSB0eXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKSk7Ci0g
ICAgICAgIGZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLnN0
cmluZywgdHlwZSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gZnVuY3Rpb247
Ci0gICAgICAgIAotICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7Ci0gICAgfQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgODE6Ci0KLSAgICB7Ci0gICAgICAgIGlmICgoeXl2c3BbKDEp
IC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2b2lk
JyIsICh5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY29udGV4dC0+cmVz
ZXJ2ZWRFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgKih5eXZzcFsoMikgLSAoMildLmxl
eCkuc3RyaW5nKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgVFBh
cmFtZXRlciBwYXJhbSA9IHsoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZywgbmV3IFRUeXBl
KCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKSl9OwotICAgICAgICAoeXl2YWwuaW50ZXJt
KS5wYXJhbSA9IHBhcmFtOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDgyOgotCi0gICAg
ewotICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGNhbiBtYWtlIGFuIGFycmF5IG91dCBvZiB0aGlz
IHR5cGUKLSAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5bHNwWygz
KSAtICg1KV0pLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSkpKQotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9y
Q2hlY2soKHl5bHNwWygyKSAtICg1KV0pLCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcp
KQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGludCBzaXplOwot
ICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDUp
XSksICh5eXZzcFsoNCkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBzaXplKSkKLSAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgKHl5dnNwWygxKSAtICg1KV0u
aW50ZXJtLnR5cGUpLnNldEFycmF5KHRydWUsIHNpemUpOwotCi0gICAgICAgIFRUeXBlKiB0eXBl
ID0gbmV3IFRUeXBlKCh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSk7Ci0gICAgICAgIFRQ
YXJhbWV0ZXIgcGFyYW0gPSB7ICh5eXZzcFsoMikgLSAoNSldLmxleCkuc3RyaW5nLCB0eXBlIH07
Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pLnBhcmFtID0gcGFyYW07Ci0gICAgfQotICAgIGJyZWFr
OwotCi0gIGNhc2UgODM6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNw
WygzKSAtICgzKV0uaW50ZXJtKTsKLSAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVj
aygoeXlsc3BbKDMpIC0gKDMpXSksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFs
aWZpZXIsICh5eXZzcFsoMikgLSAoMyldLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJt
KS5wYXJhbS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICB9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSA4NDoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybSkg
PSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pOwotICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1l
dGVyU2FtcGxlckVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgyKV0pLCAoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0ucXVhbGlmaWVyKSwgKih5eXZzcFsoMikgLSAoMildLmludGVybSkucGFyYW0udHlw
ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGlmIChjb250ZXh0
LT5wYXJhbUVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgyKV0pLCBFdnFUZW1wb3JhcnksICh5eXZz
cFsoMSkgLSAoMildLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJhbS50eXBl
KSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSA4NToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDMp
IC0gKDMpXS5pbnRlcm0pOwotICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5
eWxzcFsoMykgLSAoMyldKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmll
ciwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRlcm0pLnBh
cmFtLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgIH0KLSAgICBi
cmVhazsKLQotICBjYXNlIDg2OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5
eXZzcFsoMikgLSAoMildLmludGVybSk7Ci0gICAgICAgIGlmIChjb250ZXh0LT5wYXJhbWV0ZXJT
YW1wbGVyRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksICh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS5xdWFsaWZpZXIpLCAqKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKS5wYXJhbS50eXBlKSkK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgaWYgKGNvbnRleHQtPnBh
cmFtRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksIEV2cVRlbXBvcmFyeSwgKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRlcm0pLnBhcmFtLnR5cGUpKQot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgIH0KLSAgICBicmVhazsKLQotICBj
YXNlIDg3OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLnF1YWxpZmllcikgPSBFdnFJ
bjsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA4ODoKLQotICAgIHsKLSAgICAgICAgKHl5
dmFsLmludGVybS5xdWFsaWZpZXIpID0gRXZxSW47Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNh
c2UgODk6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cU91
dDsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA5MDoKLQotICAgIHsKLSAgICAgICAgKHl5
dmFsLmludGVybS5xdWFsaWZpZXIpID0gRXZxSW5PdXQ7Ci0gICAgfQotICAgIGJyZWFrOwotCi0g
IGNhc2UgOTE6Ci0KLSAgICB7Ci0gICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7IDAsIG5ldyBU
VHlwZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkpIH07Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0pLnBhcmFtID0gcGFyYW07Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgOTI6Ci0K
LSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
KTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA5MzoKLQotICAgIHsKLSAgICAgICAgaWYg
KCh5eXZzcFsoMSkgLSAoMyldLmludGVybSkudHlwZS50eXBlID09IEVidEludmFyaWFudCAmJiAh
KHl5dnNwWygzKSAtICgzKV0ubGV4KS5zeW1ib2wpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eWxzcFsoMykgLSAoMyldKSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBk
ZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19z
dHIoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3lt
Ym9sKDAsICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgVFR5cGUoKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtKS50eXBlKSwgKHl5bHNwWygzKSAtICgzKV0pKTsKLSAgICAgICAgKHl5dmFs
LmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dy
ZWdhdGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCBzeW1ib2wsICh5eWxz
cFsoMykgLSAoMyldKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVh
bGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDMpXSksICh5eXZhbC5pbnRlcm0pLnR5cGUp
KQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlmIChjb250ZXh0
LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoMyldKSwgKih5eXZzcFsoMykg
LSAoMyldLmxleCkuc3RyaW5nLCAoeXl2YWwuaW50ZXJtKS50eXBlLCBmYWxzZSkpCi0gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9
IDA7Ci0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0RXJyb3JDaGVjaygoeXlsc3BbKDMpIC0g
KDMpXSksICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dmFsLmludGVybSkudHlw
ZSwgdmFyaWFibGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBp
ZiAoc3ltYm9sICYmIHZhcmlhYmxlKQotICAgICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJs
ZS0+Z2V0VW5pcXVlSWQoKSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgOTQ6Ci0KLSAg
ICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxz
cFsoMykgLSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlKSkKLSAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENv
bnN0RXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDUpXSksICooeXl2c3BbKDMpIC0gKDUpXS5sZXgp
LnN0cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlLCB0cnVlKSkKLSAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZz
cFsoMSkgLSAoNSldLmludGVybSk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVy
cm9yQ2hlY2soKHl5bHNwWyg0KSAtICg1KV0pLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5
cGUpIHx8IGNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDQpIC0gKDUp
XSksICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgKHl5dnNwWygxKSAtICg1
KV0uaW50ZXJtKS50eXBlLnNldEFycmF5KHRydWUpOwotICAgICAgICAgICAgVFZhcmlhYmxlKiB2
YXJpYWJsZTsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheUVycm9yQ2hlY2soKHl5bHNw
Wyg0KSAtICg1KV0pLCAqKHl5dnNwWygzKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkg
LSAoNSldLmludGVybSkudHlwZSwgdmFyaWFibGUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDk1Ogot
Ci0gICAgewotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygo
eXlsc3BbKDMpIC0gKDYpXSksICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSkpCi0gICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbklu
aXRDb25zdEVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg2KV0pLCAqKHl5dnNwWygzKSAtICg2KV0u
bGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSwgdHJ1ZSkpCi0gICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgKHl5dmFsLmludGVybSkgPSAo
eXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5
cGVFcnJvckNoZWNrKCh5eWxzcFsoNCkgLSAoNildKSwgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJt
KS50eXBlKSB8fCBjb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWyg0KSAt
ICg2KV0pLCAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUpKQotICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGludCBzaXplOwot
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soKHl5bHNwWyg0KSAt
ICg2KV0pLCAoeXl2c3BbKDUpIC0gKDYpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkp
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgKHl5dnNw
WygxKSAtICg2KV0uaW50ZXJtKS50eXBlLnNldEFycmF5KHRydWUsIHNpemUpOwotICAgICAgICAg
ICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJy
YXlFcnJvckNoZWNrKCh5eWxzcFsoNCkgLSAoNildKSwgKih5eXZzcFsoMykgLSAoNildLmxleCku
c3RyaW5nLCAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUsIHZhcmlhYmxlKSkKLSAgICAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBUVHlwZSB0eXBlID0g
VFR5cGUoKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50eXBlKTsKLSAgICAgICAgICAgIHR5cGUu
c2V0QXJyYXlTaXplKHNpemUpOwotICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdn
cmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAt
ICg2KV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9s
KHZhcmlhYmxlID8gdmFyaWFibGUtPmdldFVuaXF1ZUlkKCkgOiAwLCAqKHl5dnNwWygzKSAtICg2
KV0ubGV4KS5zdHJpbmcsIHR5cGUsICh5eWxzcFsoMykgLSAoNildKSksICh5eWxzcFsoMykgLSAo
NildKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA5NjoKLQotICAg
IHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNw
WygzKSAtICg1KV0pLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUpKQotICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNw
WygxKSAtICg1KV0uaW50ZXJtKTsKLQotICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsK
LSAgICAgICAgaWYgKCFjb250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoKHl5bHNwWygzKSAtICg1
KV0pLCAqKHl5dnNwWygzKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmlu
dGVybSkudHlwZSwgKHl5dnNwWyg1KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGlu
dGVybU5vZGUpKSB7Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gYnVpbGQgdGhlIGlu
dGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGlm
IChpbnRlcm1Ob2RlKQotICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDUpXS5pbnRl
cm0pLmludGVybU5vZGUsIGludGVybU5vZGUsICh5eWxzcFsoNCkgLSAoNSldKSk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRl
ID0gKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGU7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAoeXl2
YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAwOwotICAgICAgICB9Ci0gICAgfQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgOTc6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0p
LmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsIFRUeXBlKCh5eXZzcFsoMSkgLSAo
MSldLmludGVybS50eXBlKSksICh5eWxzcFsoMSkgLSAoMSldKSksICh5eWxzcFsoMSkgLSAoMSld
KSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgOTg6Ci0KLSAgICB7Ci0gICAgICAgIFRJ
bnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwg
Kih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2c3BbKDEpIC0gKDIpXS5p
bnRlcm0udHlwZSkpLCAoeXlsc3BbKDIpIC0gKDIpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJt
KS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShz
eW1ib2wsICh5eWxzcFsoMikgLSAoMildKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoY29udGV4
dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksICh5eXZhbC5p
bnRlcm0pLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAg
IGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwg
Kih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLCAoeXl2YWwuaW50ZXJtKS50eXBlLCBmYWxz
ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlw
ZSk7Ci0KLSAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7Ci0gICAgICAgIGlmIChjb250
ZXh0LT5ub25Jbml0RXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksICooeXl2c3BbKDIpIC0g
KDIpXS5sZXgpLnN0cmluZywgKHl5dmFsLmludGVybSkudHlwZSwgdmFyaWFibGUpKQotICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBpZiAodmFyaWFibGUgJiYgc3ltYm9s
KQotICAgICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7Ci0g
ICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgOTk6Ci0KLSAgICB7Ci0gICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eWxzcFsoMikgLSAoNCldKSwgInVuc2l6ZWQgYXJyYXkgZGVjbGFyYXRpb25zIG5v
dCBzdXBwb3J0ZWQiLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7Ci0g
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1i
b2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICooeXl2c3BbKDIpIC0gKDQp
XS5sZXgpLnN0cmluZywgVFR5cGUoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSwgKHl5
bHNwWygyKSAtICg0KV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRl
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCAoeXlsc3BbKDIp
IC0gKDQpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICg0
KV0uaW50ZXJtLnR5cGUpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDEwMDoKLQotICAg
IHsKLSAgICAgICAgVFR5cGUgdHlwZSA9IFRUeXBlKCh5eXZzcFsoMSkgLSAoNSldLmludGVybS50
eXBlKSk7Ci0gICAgICAgIGludCBzaXplOwotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXpl
RXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDUpXSksICh5eXZzcFsoNCkgLSAoNSldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLCBzaXplKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgdHlwZS5zZXRBcnJheVNpemUoc2l6ZSk7Ci0gICAgICAgIFRJbnRlcm1TeW1ib2wq
IHN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMikg
LSAoNSldLmxleCkuc3RyaW5nLCB0eXBlLCAoeXlsc3BbKDIpIC0gKDUpXSkpOwotICAgICAgICAo
eXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFr
ZUFnZ3JlZ2F0ZShzeW1ib2wsICh5eWxzcFsoMikgLSAoNSldKSk7Ci0gICAgICAgIAotICAgICAg
ICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDUp
XSksICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSkpCi0gICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hl
Y2soKHl5bHNwWygyKSAtICg1KV0pLCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5
eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSwgdHJ1ZSkpCi0gICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkg
LSAoNSldLmludGVybS50eXBlKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJy
b3JDaGVjaygoeXlsc3BbKDMpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBl
KSkgfHwgY29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSld
KSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKSkKLSAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpbnQgc2l6ZTsKLSAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSld
KSwgKHl5dnNwWyg0KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNpemUpKQotICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICAgICAgKHl5dnNwWygx
KSAtICg1KV0uaW50ZXJtLnR5cGUpLnNldEFycmF5KHRydWUsIHNpemUpOwotICAgICAgICAgICAg
VFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlF
cnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwgKih5eXZzcFsoMikgLSAoNSldLmxleCkuc3Ry
aW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSksIHZhcmlhYmxlKSkKLSAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBpZiAodmFyaWFibGUgJiYg
c3ltYm9sKQotICAgICAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUtPmdldFVuaXF1
ZUlkKCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTAxOgotCi0g
ICAgewotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXls
c3BbKDIpIC0gKDQpXSksICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSkpCi0gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgKHl5dmFsLmludGVybSkudHlwZSA9
ICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKTsKLQotICAgICAgICBUSW50ZXJtTm9kZSog
aW50ZXJtTm9kZTsKLSAgICAgICAgaWYgKCFjb250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoKHl5
bHNwWygyKSAtICg0KV0pLCAqKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmcsICh5eXZzcFso
MSkgLSAoNCldLmludGVybS50eXBlKSwgKHl5dnNwWyg0KSAtICg0KV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksIGludGVybU5vZGUpKSB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIEJ1aWxkIGlu
dGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgotICAgICAgICAvLwotICAgICAgICAgICAgaWYoaW50
ZXJtTm9kZSkKLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShpbnRlcm1Ob2RlLCAoeXlsc3Bb
KDMpIC0gKDQpXSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1B
Z2dyZWdhdGUgPSAwOwotICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTAy
OgotCi0gICAgewotICAgICAgICBWRVJURVhfT05MWSgiaW52YXJpYW50IGRlY2xhcmF0aW9uIiwg
KHl5bHNwWygxKSAtICgyKV0pKTsKLSAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hl
Y2soKHl5bHNwWygxKSAtICgyKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCksICJpbnZhcmlhbnQgdmFyeWluZyIpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICAoeXl2YWwuaW50ZXJtKS50eXBlLnNldEJhc2ljKEVidEludmFyaWFudCwgRXZx
SW52YXJpYW50VmFyeWluZ091dCwgKHl5bHNwWygyKSAtICgyKV0pKTsKLSAgICAgICAgaWYgKCEo
eXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN5bWJvbCkKLSAgICAgICAgewotICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgyKV0pLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRl
Y2xhcmVkIGFzIGludmFyaWFudCIsICh5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLT5jX3N0
cigpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gMDsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJv
bCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMikgLSAoMild
LmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2YWwuaW50ZXJtKS50eXBlKSwgKHl5bHNwWygyKSAtICgy
KV0pKTsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgKHl5bHNwWygyKSAtICgyKV0p
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDEwMzoKLQotICAgIHsK
LSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50
eXBlKTsKLQotICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmFycmF5
KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSksICJub3Qg
c3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5Iik7Ci0gICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0gICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuc2V0
QXJyYXkoZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTA0
OgotCi0gICAgewotICAgICAgICBpZiAoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmFy
cmF5KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICJu
b3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5Iik7Ci0gICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSku
c2V0QXJyYXkoZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAo
MildLmludGVybS50eXBlKS5xdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlICYmCi0gICAgICAgICAg
ICAoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0Qm9vbCB8fCAoeXl2
c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRJbnQpKSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICJjYW5ub3QgYmUgYm9vbCBvciBp
bnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1
YWxpZmllcikpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0g
ICAgICAgIGlmICgoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9PSBF
dnFWYXJ5aW5nSW4gfHwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9
PSBFdnFWYXJ5aW5nT3V0KSAmJgotICAgICAgICAgICAgKCh5eXZzcFsoMikgLSAoMildLmludGVy
bS50eXBlKS50eXBlID09IEVidEJvb2wgfHwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUp
LnR5cGUgPT0gRWJ0SW50KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygy
KSAtICgyKV0pLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5
eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIpKTsKLSAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
ID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpOwotICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnF1YWxpZmllciA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZp
ZXI7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTA1OgotCi0gICAgewotICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUNvbnN0LCAoeXlsc3BbKDEp
IC0gKDEpXSkpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDEwNjoKLQotICAgIHsKLSAg
ICAgICAgVkVSVEVYX09OTFkoImF0dHJpYnV0ZSIsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAg
ICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAiYXR0cmlidXRlIikpCi0gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0
QmFzaWMoRWJ0Vm9pZCwgRXZxQXR0cmlidXRlLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgIH0K
LSAgICBicmVhazsKLQotICBjYXNlIDEwNzoKLQotICAgIHsKLSAgICAgICAgaWYgKGNvbnRleHQt
Pmdsb2JhbEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgxKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5hdEdsb2JhbExldmVsKCksICJ2YXJ5aW5nIikpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFE
RVIpCi0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2
cVZhcnlpbmdPdXQsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVmFyeWluZ0luLCAo
eXlsc3BbKDEpIC0gKDEpXSkpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDEwODoKLQot
ICAgIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5bHNwWygxKSAt
ICgyKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJpbnZhcmlhbnQg
dmFyeWluZyIpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBpZiAo
Y29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKQotICAgICAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0
LCAoeXlsc3BbKDEpIC0gKDIpXSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFyaWFudFZhcnlpbmdJbiwgKHl5
bHNwWygxKSAtICgyKV0pKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMDk6Ci0KLSAg
ICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAo
MSldKSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAidW5pZm9ybSIpKQot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cVVuaWZvcm0sICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0g
ICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTEwOgotCi0gICAgewotICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOwotCi0gICAgICAg
IGlmICgoeXl2YWwuaW50ZXJtLnR5cGUpLnByZWNpc2lvbiA9PSBFYnBVbmRlZmluZWQpIHsKLSAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucHJlY2lzaW9uID0gY29udGV4dC0+c3ltYm9s
VGFibGUuZ2V0RGVmYXVsdFByZWNpc2lvbigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSku
dHlwZSk7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+cHJlY2lzaW9uRXJyb3JDaGVjaygoeXls
c3BbKDEpIC0gKDEpXSksICh5eXZhbC5pbnRlcm0udHlwZSkucHJlY2lzaW9uLCAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSkpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSAxMTE6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2
c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSku
cHJlY2lzaW9uID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnByZWNpc2lvbik7Ci0gICAgfQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgMTEyOgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJt
LnByZWNpc2lvbikgPSBFYnBIaWdoOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDExMzoK
LQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5wcmVjaXNpb24pID0gRWJwTWVkaXVtOwot
ICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDExNDoKLQotICAgIHsKLSAgICAgICAgKHl5dmFs
LmludGVybS5wcmVjaXNpb24pID0gRWJwTG93OwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNl
IDExNToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS50eXBlKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMTY6Ci0K
LSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDQpXS5p
bnRlcm0udHlwZSk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2so
KHl5bHNwWygyKSAtICg0KV0pLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpKQotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IGludCBzaXplOwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2so
KHl5bHNwWygyKSAtICg0KV0pLCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgc2l6ZSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBcnJheSh0cnVlLCBzaXplKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDExNzoKLQotICAgIHsKLSAgICAgICAgVFF1
YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZx
R2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJh
c2ljKEVidFZvaWQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgfQotICAgIGJyZWFr
OwotCi0gIGNhc2UgMTE4OgotCi0gICAgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jh
cnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWws
ICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTE5Ogot
Ci0gICAgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkp
OwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDEyMDoKLQotICAgIHsKLSAgICAgICAgVFF1
YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZx
R2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJh
c2ljKEVidEJvb2wsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgfQotICAgIGJyZWFr
OwotCi0gIGNhc2UgMTIxOgotCi0gICAgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jh
cnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWws
ICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdn
cmVnYXRlKDIpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDEyMjoKLQotICAgIHsKLSAg
ICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgzKTsKLSAgICB9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSAxMjM6Ci0KLSAgICB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFy
eTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwg
KHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dy
ZWdhdGUoNCk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTI0OgotCi0gICAgewotICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMik7Ci0gICAgfQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgMTI1OgotCi0gICAgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7
Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5
bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdh
dGUoMyk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTI2OgotCi0gICAgewotICAgICAg
ICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkg
PyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSku
c2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoNCk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0g
IGNhc2UgMTI3OgotCi0gICAgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0g
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXlsc3Bb
KDEpIC0gKDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgy
KTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMjg6Ci0KLSAgICB7Ci0gICAgICAgIFRR
dWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2
cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRJbnQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNl
IDEyOToKLQotICAgIHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEludCwgcXVhbCwgKHl5bHNwWygxKSAt
ICgxKV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoNCk7Ci0g
ICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTMwOgotCi0gICAgewotICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMo
RWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkuc2V0QWdncmVnYXRlKDIsIHRydWUpOwotICAgIH0KLSAgICBicmVhazsKLQotICBj
YXNlIDEzMToKLQotICAgIHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3Bb
KDEpIC0gKDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgz
LCB0cnVlKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMzI6Ci0KLSAgICB7Ci0gICAg
ICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoNCwgdHJ1ZSk7Ci0gICAgfQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgMTMzOgotCi0gICAgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U2FtcGxlcjJE
LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNl
IDEzNDoKLQotICAgIHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNhbXBsZXJDdWJlLCBxdWFsLCAoeXls
c3BbKDEpIC0gKDEpXSkpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDEzNToKLQotICAg
IHsKLSAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0V4dGVuc2lvbigiR0xfT0VTX0VHTF9p
bWFnZV9leHRlcm5hbCIpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEp
IC0gKDEpXSksICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXJFeHRlcm5hbE9FUyIpOwotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgIFRRdWFsaWZp
ZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2Jh
bCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhF
YnRTYW1wbGVyRXh0ZXJuYWxPRVMsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgfQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgMTM2OgotCi0gICAgewotICAgICAgICBpZiAoIWNvbnRleHQt
PnN1cHBvcnRzRXh0ZW5zaW9uKCJHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUiKSkgewotICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0pLCAidW5zdXBwb3J0ZWQgdHlw
ZSIsICJzYW1wbGVyMkRSZWN0Iik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNhbXBsZXIyRFJlY3QsIHF1YWwsICh5eWxzcFso
MSkgLSAoMSldKSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTM3OgotCi0gICAgewot
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5
cGUpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAg
ICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMzg6Ci0KLSAgICB7Ci0gICAgICAgIC8vCi0gICAg
ICAgIC8vIFRoaXMgaXMgZm9yIHVzZXIgZGVmaW5lZCB0eXBlIG5hbWVzLiAgVGhlIGxleGljYWwg
cGhhc2UgbG9va2VkIHVwIHRoZQotICAgICAgICAvLyB0eXBlLgotICAgICAgICAvLwotICAgICAg
ICBUVHlwZSYgc3RydWN0dXJlID0gc3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4oKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5zeW1ib2wpLT5nZXRUeXBlKCk7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTdHJ1Y3Qs
IHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSku
dXNlckRlZiA9ICZzdHJ1Y3R1cmU7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTM5Ogot
Ci0gICAgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbigoeXlsc3BbKDIpIC0g
KDMpXSksICooeXl2c3BbKDIpIC0gKDMpXS5sZXgpLnN0cmluZykpIGNvbnRleHQtPnJlY292ZXIo
KTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTQwOgotCi0gICAgewotICAgICAgICBpZiAoY29u
dGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNildKSwgKih5eXZzcFsoMikg
LSAoNildLmxleCkuc3RyaW5nKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQot
ICAgICAgICBUVHlwZSogc3RydWN0dXJlID0gbmV3IFRUeXBlKG5ldyBUU3RydWN0dXJlKCh5eXZz
cFsoMikgLSAoNildLmxleCkuc3RyaW5nLCAoeXl2c3BbKDUpIC0gKDYpXS5pbnRlcm0uZmllbGRM
aXN0KSkpOwotICAgICAgICBUVmFyaWFibGUqIHVzZXJUeXBlRGVmID0gbmV3IFRWYXJpYWJsZSgo
eXl2c3BbKDIpIC0gKDYpXS5sZXgpLnN0cmluZywgKnN0cnVjdHVyZSwgdHJ1ZSk7Ci0gICAgICAg
IGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgqdXNlclR5cGVEZWYpKSB7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDYpXSksICJyZWRlZmluaXRpb24i
LCAoeXl2c3BbKDIpIC0gKDYpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSwgInN0cnVjdCIpOwotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U3RydWN0LCBFdnFUZW1wb3JhcnksICh5eWxzcFsoMSkg
LSAoNildKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkudXNlckRlZiA9IHN0cnVjdHVy
ZTsKLSAgICAgICAgY29udGV4dC0+ZXhpdFN0cnVjdERlY2xhcmF0aW9uKCk7Ci0gICAgfQotICAg
IGJyZWFrOwotCi0gIGNhc2UgMTQxOgotCi0gICAgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3RE
ZWNsYXJhdGlvbigoeXlsc3BbKDIpIC0gKDIpXSksICooeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0
cmluZykpIGNvbnRleHQtPnJlY292ZXIoKTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTQyOgot
Ci0gICAgewotICAgICAgICBUVHlwZSogc3RydWN0dXJlID0gbmV3IFRUeXBlKG5ldyBUU3RydWN0
dXJlKE5ld1Bvb2xUU3RyaW5nKCIiKSwgKHl5dnNwWyg0KSAtICg1KV0uaW50ZXJtLmZpZWxkTGlz
dCkpKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2
cVRlbXBvcmFyeSwgKHl5bHNwWygxKSAtICg1KV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKS51c2VyRGVmID0gc3RydWN0dXJlOwotICAgICAgICBjb250ZXh0LT5leGl0U3RydWN0RGVj
bGFyYXRpb24oKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNDM6Ci0KLSAgICB7Ci0g
ICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5maWVsZExpc3QpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE0NDoKLQotICAgIHsK
LSAgICAgICAgKHl5dmFsLmludGVybS5maWVsZExpc3QpID0gKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtLmZpZWxkTGlzdCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgKHl5dnNwWygy
KSAtICgyKV0uaW50ZXJtLmZpZWxkTGlzdCktPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBU
RmllbGQqIGZpZWxkID0gKCooeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uZmllbGRMaXN0KSlbaV07
Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8ICh5eXZhbC5pbnRlcm0uZmllbGRM
aXN0KS0+c2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgICAgICBpZiAoKCooeXl2YWwuaW50ZXJt
LmZpZWxkTGlzdCkpW2pdLT5uYW1lKCkgPT0gZmllbGQtPm5hbWUoKSkgewotICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICJkdXBsaWNhdGUgZmll
bGQgbmFtZSBpbiBzdHJ1Y3R1cmU6IiwgInN0cnVjdCIsIGZpZWxkLT5uYW1lKCkuY19zdHIoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkt
PnB1c2hfYmFjayhmaWVsZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSAxNDU6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0KSA9ICh5eXZz
cFsoMikgLSAoMyldLmludGVybS5maWVsZExpc3QpOwotCi0gICAgICAgIGlmIChjb250ZXh0LT52
b2lkRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDMpXSksICgqKHl5dnNwWygyKSAtICgzKV0uaW50
ZXJtLmZpZWxkTGlzdCkpWzBdLT5uYW1lKCksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBl
KSkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8ICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0KS0+
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBDYXJlZnVsIG5v
dCB0byByZXBsYWNlIGFscmVhZHkga25vd24gYXNwZWN0cyBvZiB0eXBlLCBsaWtlIGFycmF5LW5l
c3MKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBUVHlwZSogdHlwZSA9ICgqKHl5dmFsLmlu
dGVybS5maWVsZExpc3QpKVtpXS0+dHlwZSgpOwotICAgICAgICAgICAgdHlwZS0+c2V0QmFzaWNU
eXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS50eXBlKTsKLSAgICAgICAgICAgIHR5
cGUtPnNldE5vbWluYWxTaXplKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5zaXplKTsK
LSAgICAgICAgICAgIHR5cGUtPnNldE1hdHJpeCgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlw
ZSkubWF0cml4KTsKLSAgICAgICAgICAgIHR5cGUtPnNldFByZWNpc2lvbigoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0udHlwZSkucHJlY2lzaW9uKTsKLQotICAgICAgICAgICAgLy8gZG9uJ3QgYWxs
b3cgYXJyYXlzIG9mIGFycmF5cwotICAgICAgICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkgewot
ICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eWxzcFso
MSkgLSAoMyldKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpKSkKLSAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5hcnJheSkKLSAgICAgICAgICAgICAg
ICB0eXBlLT5zZXRBcnJheVNpemUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLmFycmF5
U2l6ZSk7Ci0gICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnVz
ZXJEZWYpCi0gICAgICAgICAgICAgICAgdHlwZS0+c2V0U3RydWN0KCh5eXZzcFsoMSkgLSAoMyld
LmludGVybS50eXBlKS51c2VyRGVmLT5nZXRTdHJ1Y3QoKSk7Ci0KLSAgICAgICAgICAgIGlmIChj
b250ZXh0LT5zdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDMpXSksICooKih5
eXZhbC5pbnRlcm0uZmllbGRMaXN0KSlbaV0pKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE0NjoKLQot
ICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5maWVsZExpc3QpID0gTmV3UG9vbFRGaWVsZExp
c3QoKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5maWVsZExpc3QpLT5wdXNoX2JhY2soKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmZpZWxkKSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2Ug
MTQ3OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCktPnB1c2hfYmFj
aygoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uZmllbGQpKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSAxNDg6Ci0KLSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9y
Q2hlY2soKHl5bHNwWygxKSAtICgxKV0pLCAqKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcp
KQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIFRUeXBlKiB0eXBl
ID0gbmV3IFRUeXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7Ci0gICAgICAgICh5eXZhbC5pbnRl
cm0uZmllbGQpID0gbmV3IFRGaWVsZCh0eXBlLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmlu
Zyk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTQ5OgotCi0gICAgewotICAgICAgICBp
ZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoNCldKSwgKih5eXZz
cFsoMSkgLSAoNCldLmxleCkuc3RyaW5nKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLQotICAgICAgICBUVHlwZSogdHlwZSA9IG5ldyBUVHlwZShFYnRWb2lkLCBFYnBVbmRlZmlu
ZWQpOwotICAgICAgICBpbnQgc2l6ZSA9IDA7Ci0gICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNp
emVFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNCldKSwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksIHNpemUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICB0eXBlLT5zZXRBcnJheVNpemUoc2l6ZSk7Ci0KLSAgICAgICAgKHl5dmFsLmlu
dGVybS5maWVsZCkgPSBuZXcgVEZpZWxkKHR5cGUsICh5eXZzcFsoMSkgLSAoNCldLmxleCkuc3Ry
aW5nKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNTA6Ci0KLSAgICB7ICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNTE6Ci0KLSAgICB7ICh5eXZhbC5p
bnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7
IH0KLSAgICBicmVhazsKLQotICBjYXNlIDE1MjoKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRl
cm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpOyB9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSAxNTM6Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KLSAgICBicmVhazsK
LQotICBjYXNlIDE1NDoKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2Ug
MTU1OgotCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmludGVybU5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNTY6Ci0KLSAg
ICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtTm9kZSk7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDE1NzoKLQotICAgIHsgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2Rl
KTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTU4OgotCi0gICAgeyAoeXl2YWwuaW50ZXJtLmlu
dGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSAxNTk6Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtQWdncmVn
YXRlKSA9IDA7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDE2MDoKLQotICAgIHsgY29udGV4dC0+
c3ltYm9sVGFibGUucHVzaCgpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNjE6Ci0KLSAgICB7
IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNjI6
Ci0KLSAgICB7Ci0gICAgICAgIGlmICgoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtQWdn
cmVnYXRlKSAhPSAwKSB7Ci0gICAgICAgICAgICAoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50
ZXJtQWdncmVnYXRlKS0+c2V0T3AoRU9wU2VxdWVuY2UpOwotICAgICAgICAgICAgKHl5dnNwWygz
KSAtICg1KV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSktPnNldExpbmUoKHl5bG9jKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gKHl5dnNwWygz
KSAtICg1KV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0g
IGNhc2UgMTYzOgotCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNjQ6
Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uaW50ZXJtTm9kZSk7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDE2NToKLQotICAgIHsg
Y29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNjY6
Ci0KLSAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOyAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpOyB9Ci0gICAgYnJl
YWs7Ci0KLSAgY2FzZSAxNjc6Ci0KLSAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsg
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTY4OgotCi0gICAgeyBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5wb3AoKTsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmlu
dGVybS5pbnRlcm1Ob2RlKTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTY5OgotCi0gICAgewot
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gMDsKLSAgICB9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSAxNzA6Ci0KLSAgICB7Ci0gICAgICAgIGlmICgoeXl2c3BbKDIpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtQWdncmVnYXRlKSkgewotICAgICAgICAgICAgKHl5dnNwWygyKSAtICgzKV0u
aW50ZXJtLmludGVybUFnZ3JlZ2F0ZSktPnNldE9wKEVPcFNlcXVlbmNlKTsKLSAgICAgICAgICAg
ICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpLT5zZXRMaW5lKCh5eWxv
YykpOwotICAgICAgICB9Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2
c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKTsKLSAgICB9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSAxNzE6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtQWdn
cmVnYXRlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKCh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1Ob2RlKSwgKHl5bG9jKSk7Ci0gICAgfQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgMTcyOgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybUFnZ3Jl
Z2F0ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0g
KDIpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmlu
dGVybU5vZGUpLCAoeXlsb2MpKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNzM6Ci0K
LSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOyB9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSAxNzQ6Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBzdGF0aWNfY2Fz
dDxUSW50ZXJtTm9kZSo+KCh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
KTsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTc1OgotCi0gICAgewotICAgICAgICBpZiAoY29u
dGV4dC0+Ym9vbEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICg1KV0pLCAoeXl2c3BbKDMpIC0gKDUp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkU2VsZWN0aW9uKCh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0ubm9kZVBhaXIpLCAoeXlsc3BbKDEpIC0gKDUp
XSkpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE3NjoKLQotICAgIHsKLSAgICAgICAg
KHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTEgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtTm9kZSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUyID0gKHl5
dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybU5vZGUpOwotICAgIH0KLSAgICBicmVhazsKLQot
ICBjYXNlIDE3NzoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9k
ZTEgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgICAgICh5eXZh
bC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUyID0gMDsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSAxNzg6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICBpZiAo
Y29udGV4dC0+Ym9vbEVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldExpbmUoKSwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgIH0KLSAgICBicmVh
azsKLQotICBjYXNlIDE3OToKLQotICAgIHsKLSAgICAgICAgVEludGVybU5vZGUqIGludGVybU5v
ZGU7Ci0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxz
cFsoMikgLSAoNCldKSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSkKLSAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgaWYgKGNvbnRleHQtPmJvb2xFcnJvckNo
ZWNrKCh5eWxzcFsoMikgLSAoNCldKSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSkK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoIWNvbnRleHQt
PmV4ZWN1dGVJbml0aWFsaXplcigoeXlsc3BbKDIpIC0gKDQpXSksICooeXl2c3BbKDIpIC0gKDQp
XS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpLCAoeXl2c3BbKDQp
IC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW50ZXJtTm9kZSkpCi0gICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDQpIC0gKDQpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAwOwotICAgICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTgwOgotCi0gICAg
eyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZl
bDsgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTgxOgotCi0gICAgewotICAgICAgICBjb250ZXh0
LT5zeW1ib2xUYWJsZS5wb3AoKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRMb29wKEVMb29wV2hpbGUsIDAsICh5eXZzcFsoNCkg
LSAoNildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAwLCAoeXl2c3BbKDYpIC0gKDYpXS5pbnRl
cm0uaW50ZXJtTm9kZSksICh5eWxzcFsoMSkgLSAoNildKSk7Ci0gICAgICAgIC0tY29udGV4dC0+
bG9vcE5lc3RpbmdMZXZlbDsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxODI6Ci0KLSAg
ICB7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfQotICAgIGJyZWFrOwotCi0gIGNhc2Ug
MTgzOgotCi0gICAgewotICAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2soKHl5bHNw
Wyg4KSAtICg4KV0pLCAoeXl2c3BbKDYpIC0gKDgpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkp
Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRMb29wKEVMb29wRG9XaGls
ZSwgMCwgKHl5dnNwWyg2KSAtICg4KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIDAsICh5eXZz
cFsoMykgLSAoOCldLmludGVybS5pbnRlcm1Ob2RlKSwgKHl5bHNwWyg0KSAtICg4KV0pKTsKLSAg
ICAgICAgLS1jb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOwotICAgIH0KLSAgICBicmVhazsKLQot
ICBjYXNlIDE4NDoKLQotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK2NvbnRl
eHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0KLSAgICBicmVhazsKLQotICBjYXNlIDE4NToKLQotICAg
IHsKLSAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkTG9vcChFTG9vcEZv
ciwgKHl5dnNwWyg0KSAtICg3KV0uaW50ZXJtLmludGVybU5vZGUpLCByZWludGVycHJldF9jYXN0
PFRJbnRlcm1UeXBlZCo+KCh5eXZzcFsoNSkgLSAoNyldLmludGVybS5ub2RlUGFpcikubm9kZTEp
LCByZWludGVycHJldF9jYXN0PFRJbnRlcm1UeXBlZCo+KCh5eXZzcFsoNSkgLSAoNyldLmludGVy
bS5ub2RlUGFpcikubm9kZTIpLCAoeXl2c3BbKDcpIC0gKDcpXS5pbnRlcm0uaW50ZXJtTm9kZSks
ICh5eWxzcFsoMSkgLSAoNyldKSk7Ci0gICAgICAgIC0tY29udGV4dC0+bG9vcE5lc3RpbmdMZXZl
bDsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxODY6Ci0KLSAgICB7Ci0gICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
Tm9kZSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTg3OgotCi0gICAgewotICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybU5vZGUpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE4ODoKLQotICAgIHsKLSAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTg5
OgotCi0gICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAwOwot
ICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE5MDoKLQotICAgIHsKLSAgICAgICAgKHl5dmFs
LmludGVybS5ub2RlUGFpcikubm9kZTEgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTIgPSAwOwot
ICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE5MToKLQotICAgIHsKLSAgICAgICAgKHl5dmFs
LmludGVybS5ub2RlUGFpcikubm9kZTEgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTIgPSAoeXl2
c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICB9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSAxOTI6Ci0KLSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGlu
Z0xldmVsIDw9IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAo
MildKSwgImNvbnRpbnVlIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIik7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9w
Q29udGludWUsICh5eWxzcFsoMSkgLSAoMildKSk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gIGNh
c2UgMTkzOgotCi0gICAgewotICAgICAgICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8
PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDIpXSksICJi
cmVhayBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIpOwotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcEJyZWFrLCAoeXls
c3BbKDEpIC0gKDIpXSkpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE5NDoKLQotICAg
IHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCAoeXlsc3BbKDEpIC0gKDIpXSkpOwotICAgICAgICBp
ZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9p
ZCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgyKV0pLCAibm9u
LXZvaWQgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iKTsKLSAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLQot
ICBjYXNlIDE5NToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCAoeXl2c3BbKDIpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygxKSAtICgzKV0pKTsKLSAgICAg
ICAgY29udGV4dC0+ZnVuY3Rpb25SZXR1cm5zVmFsdWUgPSB0cnVlOwotICAgICAgICBpZiAoY29u
dGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgewot
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgzKV0pLCAidm9pZCBmdW5j
dGlvbiBjYW5ub3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIik7Ci0gICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoKihjb250ZXh0LT5jdXJyZW50RnVu
Y3Rpb25UeXBlKSAhPSAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0VHlwZSgpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDMp
XSksICJmdW5jdGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6IiwgInJldHVybiIpOwot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgMTk2OgotCi0gICAgewotICAgICAgICBGUkFHX09OTFkoImRpc2NhcmQi
LCAoeXlsc3BbKDEpIC0gKDIpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUp
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BLaWxsLCAoeXlsc3BbKDEpIC0g
KDIpXSkpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE5NzoKLQotICAgIHsKLSAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5p
bnRlcm1Ob2RlKTsKLSAgICAgICAgY29udGV4dC0+dHJlZVJvb3QgPSAoeXl2YWwuaW50ZXJtLmlu
dGVybU5vZGUpOwotICAgIH0KLSAgICBicmVhazsKLQotICBjYXNlIDE5ODoKLQotICAgIHsKLSAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5n
cm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1Ob2RlKSwgKHl5dnNw
WygyKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXlsb2MpKTsKLSAgICAgICAgY29udGV4
dC0+dHJlZVJvb3QgPSAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpOwotICAgIH0KLSAgICBicmVh
azsKLQotICBjYXNlIDE5OToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1O
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKLSAgICB9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSAyMDA6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgfQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgMjAxOgotCi0gICAgewotICAgICAgICBURnVuY3Rpb24qIGZ1
bmN0aW9uID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5mdW5jdGlvbjsKLSAgICAgICAgCi0g
ICAgICAgIGNvbnN0IFRTeW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5k
QnVpbHRJbihmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSk7Ci0gICAgICAgIAotICAgICAgICBp
ZiAoYnVpbHRJbikKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNw
WygxKSAtICgxKV0pLCAiYnVpbHQtaW4gZnVuY3Rpb25zIGNhbm5vdCBiZSByZWRlZmluZWQiLCBm
dW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBz
dGF0aWNfY2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKGZ1bmN0aW9u
LT5nZXRNYW5nbGVkTmFtZSgpKSk7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIE5vdGU6ICAncHJl
dkRlYycgY291bGQgYmUgJ2Z1bmN0aW9uJyBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3Zl
IHNlZW4gZnVuY3Rpb24KLSAgICAgICAgLy8gYXMgaXQgd291bGQgaGF2ZSBqdXN0IGJlZW4gcHV0
IGluIHRoZSBzeW1ib2wgdGFibGUuICBPdGhlcndpc2UsIHdlJ3JlIGxvb2tpbmcgdXAKLSAgICAg
ICAgLy8gYW4gZWFybGllciBvY2N1cmFuY2UuCi0gICAgICAgIC8vCi0gICAgICAgIGlmIChwcmV2
RGVjLT5pc0RlZmluZWQoKSkgewotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFRoZW4g
dGhpcyBmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkuCi0gICAgICAgICAgICAvLwotICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0pLCAiZnVuY3Rpb24gYWxyZWFk
eSBoYXMgYSBib2R5IiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpKTsKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBwcmV2RGVjLT5zZXREZWZp
bmVkKCk7Ci0KLSAgICAgICAgLy8KLSAgICAgICAgLy8gUmFpc2UgZXJyb3IgbWVzc2FnZSBpZiBt
YWluIGZ1bmN0aW9uIHRha2VzIGFueSBwYXJhbWV0ZXJzIG9yIHJldHVybiBhbnl0aGluZyBvdGhl
ciB0aGFuIHZvaWQKLSAgICAgICAgLy8KLSAgICAgICAgaWYgKGZ1bmN0aW9uLT5nZXROYW1lKCkg
PT0gIm1haW4iKSB7Ci0gICAgICAgICAgICBpZiAoZnVuY3Rpb24tPmdldFBhcmFtQ291bnQoKSA+
IDApIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSks
ICJmdW5jdGlvbiBjYW5ub3QgdGFrZSBhbnkgcGFyYW1ldGVyKHMpIiwgZnVuY3Rpb24tPmdldE5h
bWUoKS5jX3N0cigpKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZnVuY3Rpb24tPmdldFJldHVyblR5cGUoKS5nZXRC
YXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
KHl5bHNwWygxKSAtICgxKV0pLCAiIiwgZnVuY3Rpb24tPmdldFJldHVyblR5cGUoKS5nZXRCYXNp
Y1N0cmluZygpLCAibWFpbiBmdW5jdGlvbiBjYW5ub3QgcmV0dXJuIGEgdmFsdWUiKTsKLSAgICAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICAvLwotICAgICAgICAvLyBSZW1lbWJlciB0aGUgcmV0dXJuIHR5cGUgZm9yIGxh
dGVyIGNoZWNraW5nIGZvciBSRVRVUk4gc3RhdGVtZW50cy4KLSAgICAgICAgLy8KLSAgICAgICAg
Y29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZSA9ICYocHJldkRlYy0+Z2V0UmV0dXJuVHlwZSgp
KTsKLSAgICAgICAgY29udGV4dC0+ZnVuY3Rpb25SZXR1cm5zVmFsdWUgPSBmYWxzZTsKLQotICAg
ICAgICAvLwotICAgICAgICAvLyBJbnNlcnQgcGFyYW1ldGVycyBpbnRvIHRoZSBzeW1ib2wgdGFi
bGUuCi0gICAgICAgIC8vIElmIHRoZSBwYXJhbWV0ZXIgaGFzIG5vIG5hbWUsIGl0J3Mgbm90IGFu
IGVycm9yLCBqdXN0IGRvbid0IGluc2VydCBpdAotICAgICAgICAvLyAoY291bGQgYmUgdXNlZCBm
b3IgdW51c2VkIGFyZ3MpLgotICAgICAgICAvLwotICAgICAgICAvLyBBbHNvLCBhY2N1bXVsYXRl
IHRoZSBsaXN0IG9mIHBhcmFtZXRlcnMgaW50byB0aGUgSElMLCBzbyBsb3dlciBsZXZlbCBjb2Rl
Ci0gICAgICAgIC8vIGtub3dzIHdoZXJlIHRvIGZpbmQgcGFyYW1ldGVycy4KLSAgICAgICAgLy8K
LSAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSogcGFyYW1Ob2RlcyA9IG5ldyBUSW50ZXJtQWdncmVn
YXRlOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uLT5nZXRQYXJhbUNv
dW50KCk7IGkrKykgewotICAgICAgICAgICAgY29uc3QgVFBhcmFtZXRlciYgcGFyYW0gPSBmdW5j
dGlvbi0+Z2V0UGFyYW0oaSk7Ci0gICAgICAgICAgICBpZiAocGFyYW0ubmFtZSAhPSAwKSB7Ci0g
ICAgICAgICAgICAgICAgVFZhcmlhYmxlICp2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUocGFyYW0u
bmFtZSwgKnBhcmFtLnR5cGUpOwotICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAg
Ly8gSW5zZXJ0IHRoZSBwYXJhbWV0ZXJzIHdpdGggbmFtZSBpbiB0aGUgc3ltYm9sIHRhYmxlLgot
ICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgaWYgKCEgY29udGV4dC0+c3ltYm9s
VGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0pLCAicmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5h
bWUoKS5jX3N0cigpKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICAgICAgICAgICAgICBkZWxldGUgdmFyaWFibGU7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIHBhcmFtZXRl
ciB0byB0aGUgSElMCi0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICBwYXJhbU5v
ZGVzID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtTm9kZXMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRTeW1ib2wodmFyaWFibGUtPmdldFVuaXF1ZUlkKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyaWFibGUtPmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+
Z2V0VHlwZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eWxzcFsoMSkgLSAoMSldKSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eWxzcFsoMSkg
LSAoMSldKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHBhcmFtTm9k
ZXMgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShwYXJhbU5vZGVzLCBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICIiLCAqcGFyYW0udHlwZSwgKHl5bHNwWygx
KSAtICgxKV0pKSwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBjb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IocGFy
YW1Ob2RlcywgRU9wUGFyYW1ldGVycywgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJhbU5vZGVzOwotICAg
ICAgICBjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsID0gMDsKLSAgICB9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSAyMDI6Ci0KLSAgICB7Ci0gICAgICAgIC8vPz8gQ2hlY2sgdGhhdCBhbGwgcGF0aHMg
cmV0dXJuIGEgdmFsdWUgaWYgcmV0dXJuIHR5cGUgIT0gdm9pZCA/Ci0gICAgICAgIC8vICAgTWF5
IGJlIGJlc3QgZG9uZSBhcyBwb3N0IHByb2Nlc3MgcGhhc2Ugb24gaW50ZXJtZWRpYXRlIGNvZGUK
LSAgICAgICAgaWYgKGNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgp
ICE9IEVidFZvaWQgJiYgISBjb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSkgewotICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgzKV0pLCAiZnVuY3Rpb24gZG9lcyBu
b3QgcmV0dXJuIGEgdmFsdWU6IiwgIiIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybSkuZnVuY3Rp
b24tPmdldE5hbWUoKS5jX3N0cigpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybSkuaW50ZXJtQWdncmVnYXRlLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtTm9k
ZSksICh5eWxvYykpOwotICAgICAgICBjb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRl
T3BlcmF0b3IoKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSwgRU9wRnVuY3Rpb24sICh5eWxzcFso
MSkgLSAoMyldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSktPmdldEFzQWdn
cmVnYXRlKCktPnNldE5hbWUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5mdW5jdGlvbi0+Z2V0
TWFuZ2xlZE5hbWUoKS5jX3N0cigpKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2Rl
KS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0VHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmZ1
bmN0aW9uLT5nZXRSZXR1cm5UeXBlKCkpOwotCi0gICAgICAgIC8vIHN0b3JlIHRoZSBwcmFnbWEg
aW5mb3JtYXRpb24gZm9yIGRlYnVnIGFuZCBvcHRpbWl6ZSBhbmQgb3RoZXIgdmVuZG9yIHNwZWNp
ZmljCi0gICAgICAgIC8vIGluZm9ybWF0aW9uLiBUaGlzIGluZm9ybWF0aW9uIGNhbiBiZSBxdWVy
aWVkIGZyb20gdGhlIHBhcnNlIHRyZWUKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2Rl
KS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0T3B0aW1pemUoY29udGV4dC0+cHJhZ21hKCkub3B0aW1p
emUpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgp
LT5zZXREZWJ1Zyhjb250ZXh0LT5wcmFnbWEoKS5kZWJ1Zyk7Ci0KLSAgICAgICAgY29udGV4dC0+
c3ltYm9sVGFibGUucG9wKCk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0KLQotICAgICAgZGVmYXVs
dDogYnJlYWs7Ci0gICAgfQotICAvKiBVc2VyIHNlbWFudGljIGFjdGlvbnMgc29tZXRpbWVzIGFs
dGVyIHl5Y2hhciwgYW5kIHRoYXQgcmVxdWlyZXMKLSAgICAgdGhhdCB5eXRva2VuIGJlIHVwZGF0
ZWQgd2l0aCB0aGUgbmV3IHRyYW5zbGF0aW9uLiAgV2UgdGFrZSB0aGUKLSAgICAgYXBwcm9hY2gg
b2YgdHJhbnNsYXRpbmcgaW1tZWRpYXRlbHkgYmVmb3JlIGV2ZXJ5IHVzZSBvZiB5eXRva2VuLgot
ICAgICBPbmUgYWx0ZXJuYXRpdmUgaXMgdHJhbnNsYXRpbmcgaGVyZSBhZnRlciBldmVyeSBzZW1h
bnRpYyBhY3Rpb24sCi0gICAgIGJ1dCB0aGF0IHRyYW5zbGF0aW9uIHdvdWxkIGJlIG1pc3NlZCBp
ZiB0aGUgc2VtYW50aWMgYWN0aW9uIGludm9rZXMKLSAgICAgWVlBQk9SVCwgWVlBQ0NFUFQsIG9y
IFlZRVJST1IgaW1tZWRpYXRlbHkgYWZ0ZXIgYWx0ZXJpbmcgeXljaGFyIG9yCi0gICAgIGlmIGl0
IGludm9rZXMgWVlCQUNLVVAuICBJbiB0aGUgY2FzZSBvZiBZWUFCT1JUIG9yIFlZQUNDRVBULCBh
bgotICAgICBpbmNvcnJlY3QgZGVzdHJ1Y3RvciBtaWdodCB0aGVuIGJlIGludm9rZWQgaW1tZWRp
YXRlbHkuICBJbiB0aGUKLSAgICAgY2FzZSBvZiBZWUVSUk9SIG9yIFlZQkFDS1VQLCBzdWJzZXF1
ZW50IHBhcnNlciBhY3Rpb25zIG1pZ2h0IGxlYWQKLSAgICAgdG8gYW4gaW5jb3JyZWN0IGRlc3Ry
dWN0b3IgY2FsbCBvciB2ZXJib3NlIHN5bnRheCBlcnJvciBtZXNzYWdlCi0gICAgIGJlZm9yZSB0
aGUgbG9va2FoZWFkIGlzIHRyYW5zbGF0ZWQuICAqLwotICBZWV9TWU1CT0xfUFJJTlQgKCItPiAk
JCA9IiwgeXlyMVt5eW5dLCAmeXl2YWwsICZ5eWxvYyk7Ci0KLSAgWVlQT1BTVEFDSyAoeXlsZW4p
OwotICB5eWxlbiA9IDA7Ci0gIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7Ci0KLSAgKisr
eXl2c3AgPSB5eXZhbDsKLSAgKisreXlsc3AgPSB5eWxvYzsKLQotICAvKiBOb3cgYHNoaWZ0JyB0
aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24uICBEZXRlcm1pbmUgd2hhdCBzdGF0ZQotICAgICB0
aGF0IGdvZXMgdG8sIGJhc2VkIG9uIHRoZSBzdGF0ZSB3ZSBwb3BwZWQgYmFjayB0byBhbmQgdGhl
IHJ1bGUKLSAgICAgbnVtYmVyIHJlZHVjZWQgYnkuICAqLwotCi0gIHl5biA9IHl5cjFbeXluXTsK
LQotICB5eXN0YXRlID0geXlwZ290b1t5eW4gLSBZWU5UT0tFTlNdICsgKnl5c3NwOwotICBpZiAo
MCA8PSB5eXN0YXRlICYmIHl5c3RhdGUgPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXlzdGF0ZV0gPT0g
Knl5c3NwKQotICAgIHl5c3RhdGUgPSB5eXRhYmxlW3l5c3RhdGVdOwotICBlbHNlCi0gICAgeXlz
dGF0ZSA9IHl5ZGVmZ290b1t5eW4gLSBZWU5UT0tFTlNdOwotCi0gIGdvdG8geXluZXdzdGF0ZTsK
LQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXllcnJsYWIg
LS0gaGVyZSBvbiBkZXRlY3RpbmcgZXJyb3IgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSovCi15eWVycmxhYjoKLSAgLyogTWFrZSBzdXJlIHdlIGhhdmUgbGF0ZXN0IGxv
b2thaGVhZCB0cmFuc2xhdGlvbi4gIFNlZSBjb21tZW50cyBhdAotICAgICB1c2VyIHNlbWFudGlj
IGFjdGlvbnMgZm9yIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS4gICovCi0gIHl5dG9rZW4gPSB5eWNo
YXIgPT0gWVlFTVBUWSA/IFlZRU1QVFkgOiBZWVRSQU5TTEFURSAoeXljaGFyKTsKLQotICAvKiBJ
ZiBub3QgYWxyZWFkeSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlcG9ydCB0aGlzIGVycm9y
LiAgKi8KLSAgaWYgKCF5eWVycnN0YXR1cykKLSAgICB7Ci0gICAgICArK3l5bmVycnM7Ci0jaWYg
ISBZWUVSUk9SX1ZFUkJPU0UKLSAgICAgIHl5ZXJyb3IgKCZ5eWxsb2MsIGNvbnRleHQsIFlZXygi
c3ludGF4IGVycm9yIikpOwotI2Vsc2UKLSMgZGVmaW5lIFlZU1lOVEFYX0VSUk9SIHl5c3ludGF4
X2Vycm9yICgmeXltc2dfYWxsb2MsICZ5eW1zZywgXAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHl5c3NwLCB5eXRva2VuKQotICAgICAgewotICAgICAgICBjaGFyIGNv
bnN0ICp5eW1zZ3AgPSBZWV8oInN5bnRheCBlcnJvciIpOwotICAgICAgICBpbnQgeXlzeW50YXhf
ZXJyb3Jfc3RhdHVzOwotICAgICAgICB5eXN5bnRheF9lcnJvcl9zdGF0dXMgPSBZWVNZTlRBWF9F
UlJPUjsKLSAgICAgICAgaWYgKHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9PSAwKQotICAgICAgICAg
IHl5bXNncCA9IHl5bXNnOwotICAgICAgICBlbHNlIGlmICh5eXN5bnRheF9lcnJvcl9zdGF0dXMg
PT0gMSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoeXltc2cgIT0geXltc2didWYpCi0g
ICAgICAgICAgICAgIFlZU1RBQ0tfRlJFRSAoeXltc2cpOwotICAgICAgICAgICAgeXltc2cgPSAo
Y2hhciAqKSBZWVNUQUNLX0FMTE9DICh5eW1zZ19hbGxvYyk7Ci0gICAgICAgICAgICBpZiAoIXl5
bXNnKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXltc2cgPSB5eW1zZ2J1ZjsK
LSAgICAgICAgICAgICAgICB5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKLSAgICAgICAg
ICAgICAgICB5eXN5bnRheF9lcnJvcl9zdGF0dXMgPSAyOwotICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB5eXN5bnRheF9l
cnJvcl9zdGF0dXMgPSBZWVNZTlRBWF9FUlJPUjsKLSAgICAgICAgICAgICAgICB5eW1zZ3AgPSB5
eW1zZzsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgeXllcnJvciAoJnl5
bGxvYywgY29udGV4dCwgeXltc2dwKTsKLSAgICAgICAgaWYgKHl5c3ludGF4X2Vycm9yX3N0YXR1
cyA9PSAyKQotICAgICAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7Ci0gICAgICB9Ci0jIHVuZGVm
IFlZU1lOVEFYX0VSUk9SCi0jZW5kaWYKLSAgICB9Ci0KLSAgeXllcnJvcl9yYW5nZVsxXSA9IHl5
bGxvYzsKLQotICBpZiAoeXllcnJzdGF0dXMgPT0gMykKLSAgICB7Ci0gICAgICAvKiBJZiBqdXN0
IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIGFuCi0JIGVy
cm9yLCBkaXNjYXJkIGl0LiAgKi8KLQotICAgICAgaWYgKHl5Y2hhciA8PSBZWUVPRikKLQl7Ci0J
ICAvKiBSZXR1cm4gZmFpbHVyZSBpZiBhdCBlbmQgb2YgaW5wdXQuICAqLwotCSAgaWYgKHl5Y2hh
ciA9PSBZWUVPRikKLQkgICAgWVlBQk9SVDsKLQl9Ci0gICAgICBlbHNlCi0JewotCSAgeXlkZXN0
cnVjdCAoIkVycm9yOiBkaXNjYXJkaW5nIiwKLQkJICAgICAgeXl0b2tlbiwgJnl5bHZhbCwgJnl5
bGxvYywgY29udGV4dCk7Ci0JICB5eWNoYXIgPSBZWUVNUFRZOwotCX0KLSAgICB9Ci0KLSAgLyog
RWxzZSB3aWxsIHRyeSB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgc2hpZnRpbmcgdGhl
IGVycm9yCi0gICAgIHRva2VuLiAgKi8KLSAgZ290byB5eWVycmxhYjE7Ci0KLQotLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZXJyb3Js
YWIgLS0gZXJyb3IgcmFpc2VkIGV4cGxpY2l0bHkgYnkgWVlFUlJPUi4gIHwKLWAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXllcnJvcmxhYjoK
LQotICAvKiBQYWNpZnkgY29tcGlsZXJzIGxpa2UgR0NDIHdoZW4gdGhlIHVzZXIgY29kZSBuZXZl
ciBpbnZva2VzCi0gICAgIFlZRVJST1IgYW5kIHRoZSBsYWJlbCB5eWVycm9ybGFiIHRoZXJlZm9y
ZSBuZXZlciBhcHBlYXJzIGluIHVzZXIKLSAgICAgY29kZS4gICovCi0gIGlmICgvKkNPTlNUQ09O
RCovIDApCi0gICAgIGdvdG8geXllcnJvcmxhYjsKLQotICB5eWVycm9yX3JhbmdlWzFdID0geXls
c3BbMS15eWxlbl07Ci0gIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxl
IHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKLSAgICAgdGhpcyBZWUVSUk9SLiAgKi8KLSAgWVlQT1BT
VEFDSyAoeXlsZW4pOwotICB5eWxlbiA9IDA7Ci0gIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNz
cCk7Ci0gIHl5c3RhdGUgPSAqeXlzc3A7Ci0gIGdvdG8geXllcnJsYWIxOwotCi0KLS8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4K
LXwgeXllcnJsYWIxIC0tIGNvbW1vbiBjb2RlIGZvciBib3RoIHN5bnRheCBlcnJvciBhbmQgWVlF
UlJPUi4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KLXl5ZXJybGFiMToKLSAgeXllcnJzdGF0dXMgPSAzOwkvKiBFYWNo
IHJlYWwgdG9rZW4gc2hpZnRlZCBkZWNyZW1lbnRzIHRoaXMuICAqLwotCi0gIGZvciAoOzspCi0g
ICAgewotICAgICAgeXluID0geXlwYWN0W3l5c3RhdGVdOwotICAgICAgaWYgKCF5eXBhY3RfdmFs
dWVfaXNfZGVmYXVsdCAoeXluKSkKLQl7Ci0JICB5eW4gKz0gWVlURVJST1I7Ci0JICBpZiAoMCA8
PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5bl0gPT0gWVlURVJST1IpCi0JICAg
IHsKLQkgICAgICB5eW4gPSB5eXRhYmxlW3l5bl07Ci0JICAgICAgaWYgKDAgPCB5eW4pCi0JCWJy
ZWFrOwotCSAgICB9Ci0JfQotCi0gICAgICAvKiBQb3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVz
ZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0b2tlbi4gICovCi0gICAgICBpZiAoeXlzc3Ag
PT0geXlzcykKLQlZWUFCT1JUOwotCi0gICAgICB5eWVycm9yX3JhbmdlWzFdID0gKnl5bHNwOwot
ICAgICAgeXlkZXN0cnVjdCAoIkVycm9yOiBwb3BwaW5nIiwKLQkJICB5eXN0b3NbeXlzdGF0ZV0s
IHl5dnNwLCB5eWxzcCwgY29udGV4dCk7Ci0gICAgICBZWVBPUFNUQUNLICgxKTsKLSAgICAgIHl5
c3RhdGUgPSAqeXlzc3A7Ci0gICAgICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwotICAg
IH0KLQotICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTgotICAqKyt5eXZzcCA9
IHl5bHZhbDsKLSAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5ECi0KLSAgeXllcnJv
cl9yYW5nZVsyXSA9IHl5bGxvYzsKLSAgLyogVXNpbmcgWVlMTE9DIGlzIHRlbXB0aW5nLCBidXQg
d291bGQgY2hhbmdlIHRoZSBsb2NhdGlvbiBvZgotICAgICB0aGUgbG9va2FoZWFkLiAgWVlMT0Mg
aXMgYXZhaWxhYmxlIHRob3VnaC4gICovCi0gIFlZTExPQ19ERUZBVUxUICh5eWxvYywgeXllcnJv
cl9yYW5nZSwgMik7Ci0gICorK3l5bHNwID0geXlsb2M7Ci0KLSAgLyogU2hpZnQgdGhlIGVycm9y
IHRva2VuLiAgKi8KLSAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXN0b3NbeXluXSwg
eXl2c3AsIHl5bHNwKTsKLQotICB5eXN0YXRlID0geXluOwotICBnb3RvIHl5bmV3c3RhdGU7Ci0K
LQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWFjY2VwdGxh
YiAtLSBZWUFDQ0VQVCBjb21lcyBoZXJlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLwoteXlhY2NlcHRsYWI6Ci0gIHl5cmVzdWx0ID0gMDsKLSAgZ290byB5eXJl
dHVybjsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlhYm9y
dGxhYiAtLSBZWUFCT1JUIGNvbWVzIGhlcmUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLwoteXlhYm9ydGxhYjoKLSAgeXlyZXN1bHQgPSAxOwotICBnb3RvIHl5cmV0
dXJuOwotCi0jaWYgIWRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UKLS8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlleGhh
dXN0ZWRsYWIgLS0gbWVtb3J5IGV4aGF1c3Rpb24gY29tZXMgaGVyZS4gIHwKLWAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZXhoYXVzdGVkbGFi
OgotICB5eWVycm9yICgmeXlsbG9jLCBjb250ZXh0LCBZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSk7
Ci0gIHl5cmVzdWx0ID0gMjsKLSAgLyogRmFsbCB0aHJvdWdoLiAgKi8KLSNlbmRpZgotCi15eXJl
dHVybjoKLSAgaWYgKHl5Y2hhciAhPSBZWUVNUFRZKQotICAgIHsKLSAgICAgIC8qIE1ha2Ugc3Vy
ZSB3ZSBoYXZlIGxhdGVzdCBsb29rYWhlYWQgdHJhbnNsYXRpb24uICBTZWUgY29tbWVudHMgYXQK
LSAgICAgICAgIHVzZXIgc2VtYW50aWMgYWN0aW9ucyBmb3Igd2h5IHRoaXMgaXMgbmVjZXNzYXJ5
LiAgKi8KLSAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXljaGFyKTsKLSAgICAgIHl5ZGVz
dHJ1Y3QgKCJDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVhZCIsCi0gICAgICAgICAgICAgICAg
ICB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jLCBjb250ZXh0KTsKLSAgICB9Ci0gIC8qIERvIG5v
dCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQK
LSAgICAgdGhpcyBZWUFCT1JUIG9yIFlZQUNDRVBULiAgKi8KLSAgWVlQT1BTVEFDSyAoeXlsZW4p
OwotICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwotICB3aGlsZSAoeXlzc3AgIT0geXlz
cykKLSAgICB7Ci0gICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogcG9wcGluZyIsCi0JCSAgeXlz
dG9zWyp5eXNzcF0sIHl5dnNwLCB5eWxzcCwgY29udGV4dCk7Ci0gICAgICBZWVBPUFNUQUNLICgx
KTsKLSAgICB9Ci0jaWZuZGVmIHl5b3ZlcmZsb3cKLSAgaWYgKHl5c3MgIT0geXlzc2EpCi0gICAg
WVlTVEFDS19GUkVFICh5eXNzKTsKLSNlbmRpZgotI2lmIFlZRVJST1JfVkVSQk9TRQotICBpZiAo
eXltc2cgIT0geXltc2didWYpCi0gICAgWVlTVEFDS19GUkVFICh5eW1zZyk7Ci0jZW5kaWYKLSAg
LyogTWFrZSBzdXJlIFlZSUQgaXMgdXNlZC4gICovCi0gIHJldHVybiBZWUlEICh5eXJlc3VsdCk7
Ci19Ci0KLQotCi0KLQotaW50IGdsc2xhbmdfcGFyc2UoVFBhcnNlQ29udGV4dCogY29udGV4dCkg
ewotICAgIHJldHVybiB5eXBhcnNlKGNvbnRleHQpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYTM1YjAyMWZiZmVmNDE3YzdjM2Y2YWQyZjY0Y2I2NWM2MGZmYzU3OC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuaAorKysgL2Rldi9udWxsCkBAIC0x
LDIyNSArMCwwIEBACi0vKiBBcHBsZSBOb3RlOiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwg
QXBwbGUgZWxlY3RzIHRvIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgQlNEIGxpY2Vuc2UuICovCi0KLS8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNv
biAyLjcuICAqLwotCi0vKiBCaXNvbiBpbnRlcmZhY2UgZm9yIFlhY2MtbGlrZSBwYXJzZXJzIGlu
IEMKLSAgIAotICAgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAxMiBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSAgIAotICAgVGhpcyBwcm9ncmFtIGlzIGZy
ZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lv
biAzIG9mIHRoZSBMaWNlbnNlLCBvcgotICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAgIAotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAgIAotICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFs
b25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9s
aWNlbnNlcy8+LiAgKi8KLQotLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVh
dGUgYSBsYXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCi0gICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlz
b24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawotICAgdW5kZXIgdGVy
bXMgb2YgeW91ciBjaG9pY2UsIHNvIGxvbmcgYXMgdGhhdCB3b3JrIGlzbid0IGl0c2VsZiBhCi0g
ICBwYXJzZXIgZ2VuZXJhdG9yIHVzaW5nIHRoZSBza2VsZXRvbiBvciBhIG1vZGlmaWVkIHZlcnNp
b24gdGhlcmVvZgotICAgYXMgYSBwYXJzZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5
b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZQotICAgdGhlIHBhcnNlciBza2VsZXRvbiBpdHNlbGYs
IHlvdSBtYXkgKGF0IHlvdXIgb3B0aW9uKSByZW1vdmUgdGhpcwotICAgc3BlY2lhbCBleGNlcHRp
b24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCi0gICBC
aXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1
YmxpYwotICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCi0gICAKLSAg
IFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24gaW4KLSAgIHZlcnNpb24gMi4yIG9mIEJpc29uLiAgKi8KLQotI2lmbmRlZiBZWV9Z
WV9HTFNMQU5HX1RBQl9IX0lOQ0xVREVECi0jIGRlZmluZSBZWV9ZWV9HTFNMQU5HX1RBQl9IX0lO
Q0xVREVECi0vKiBFbmFibGluZyB0cmFjZXMuICAqLwotI2lmbmRlZiBZWURFQlVHCi0jIGRlZmlu
ZSBZWURFQlVHIDAKLSNlbmRpZgotI2lmIFlZREVCVUcKLWV4dGVybiBpbnQgeXlkZWJ1ZzsKLSNl
bmRpZgotLyogIiVjb2RlIHJlcXVpcmVzIiBibG9ja3MuICAqLwotCi0KLSNkZWZpbmUgWVlMVFlQ
RSBUU291cmNlTG9jCi0jZGVmaW5lIFlZTFRZUEVfSVNfREVDTEFSRUQgMQotI2RlZmluZSBTSF9N
QVhfVE9LRU5fTEVOR1RIIDI1NiAgLy8gV2ViR0wgc3BlYy4KLQotCi0KLQotLyogVG9rZW5zLiAg
Ki8KLSNpZm5kZWYgWVlUT0tFTlRZUEUKLSMgZGVmaW5lIFlZVE9LRU5UWVBFCi0gICAvKiBQdXQg
dGhlIHRva2VucyBpbnRvIHRoZSBzeW1ib2wgdGFibGUsIHNvIHRoYXQgR0RCIGFuZCBvdGhlciBk
ZWJ1Z2dlcnMKLSAgICAgIGtub3cgYWJvdXQgdGhlbS4gICovCi0gICBlbnVtIHl5dG9rZW50eXBl
IHsKLSAgICAgSU5WQVJJQU5UID0gMjU4LAotICAgICBISUdIX1BSRUNJU0lPTiA9IDI1OSwKLSAg
ICAgTUVESVVNX1BSRUNJU0lPTiA9IDI2MCwKLSAgICAgTE9XX1BSRUNJU0lPTiA9IDI2MSwKLSAg
ICAgUFJFQ0lTSU9OID0gMjYyLAotICAgICBBVFRSSUJVVEUgPSAyNjMsCi0gICAgIENPTlNUX1FV
QUwgPSAyNjQsCi0gICAgIEJPT0xfVFlQRSA9IDI2NSwKLSAgICAgRkxPQVRfVFlQRSA9IDI2NiwK
LSAgICAgSU5UX1RZUEUgPSAyNjcsCi0gICAgIEJSRUFLID0gMjY4LAotICAgICBDT05USU5VRSA9
IDI2OSwKLSAgICAgRE8gPSAyNzAsCi0gICAgIEVMU0UgPSAyNzEsCi0gICAgIEZPUiA9IDI3MiwK
LSAgICAgSUYgPSAyNzMsCi0gICAgIERJU0NBUkQgPSAyNzQsCi0gICAgIFJFVFVSTiA9IDI3NSwK
LSAgICAgQlZFQzIgPSAyNzYsCi0gICAgIEJWRUMzID0gMjc3LAotICAgICBCVkVDNCA9IDI3OCwK
LSAgICAgSVZFQzIgPSAyNzksCi0gICAgIElWRUMzID0gMjgwLAotICAgICBJVkVDNCA9IDI4MSwK
LSAgICAgVkVDMiA9IDI4MiwKLSAgICAgVkVDMyA9IDI4MywKLSAgICAgVkVDNCA9IDI4NCwKLSAg
ICAgTUFUUklYMiA9IDI4NSwKLSAgICAgTUFUUklYMyA9IDI4NiwKLSAgICAgTUFUUklYNCA9IDI4
NywKLSAgICAgSU5fUVVBTCA9IDI4OCwKLSAgICAgT1VUX1FVQUwgPSAyODksCi0gICAgIElOT1VU
X1FVQUwgPSAyOTAsCi0gICAgIFVOSUZPUk0gPSAyOTEsCi0gICAgIFZBUllJTkcgPSAyOTIsCi0g
ICAgIFNUUlVDVCA9IDI5MywKLSAgICAgVk9JRF9UWVBFID0gMjk0LAotICAgICBXSElMRSA9IDI5
NSwKLSAgICAgU0FNUExFUjJEID0gMjk2LAotICAgICBTQU1QTEVSQ1VCRSA9IDI5NywKLSAgICAg
U0FNUExFUl9FWFRFUk5BTF9PRVMgPSAyOTgsCi0gICAgIFNBTVBMRVIyRFJFQ1QgPSAyOTksCi0g
ICAgIElERU5USUZJRVIgPSAzMDAsCi0gICAgIFRZUEVfTkFNRSA9IDMwMSwKLSAgICAgRkxPQVRD
T05TVEFOVCA9IDMwMiwKLSAgICAgSU5UQ09OU1RBTlQgPSAzMDMsCi0gICAgIEJPT0xDT05TVEFO
VCA9IDMwNCwKLSAgICAgTEVGVF9PUCA9IDMwNSwKLSAgICAgUklHSFRfT1AgPSAzMDYsCi0gICAg
IElOQ19PUCA9IDMwNywKLSAgICAgREVDX09QID0gMzA4LAotICAgICBMRV9PUCA9IDMwOSwKLSAg
ICAgR0VfT1AgPSAzMTAsCi0gICAgIEVRX09QID0gMzExLAotICAgICBORV9PUCA9IDMxMiwKLSAg
ICAgQU5EX09QID0gMzEzLAotICAgICBPUl9PUCA9IDMxNCwKLSAgICAgWE9SX09QID0gMzE1LAot
ICAgICBNVUxfQVNTSUdOID0gMzE2LAotICAgICBESVZfQVNTSUdOID0gMzE3LAotICAgICBBRERf
QVNTSUdOID0gMzE4LAotICAgICBNT0RfQVNTSUdOID0gMzE5LAotICAgICBMRUZUX0FTU0lHTiA9
IDMyMCwKLSAgICAgUklHSFRfQVNTSUdOID0gMzIxLAotICAgICBBTkRfQVNTSUdOID0gMzIyLAot
ICAgICBYT1JfQVNTSUdOID0gMzIzLAotICAgICBPUl9BU1NJR04gPSAzMjQsCi0gICAgIFNVQl9B
U1NJR04gPSAzMjUsCi0gICAgIExFRlRfUEFSRU4gPSAzMjYsCi0gICAgIFJJR0hUX1BBUkVOID0g
MzI3LAotICAgICBMRUZUX0JSQUNLRVQgPSAzMjgsCi0gICAgIFJJR0hUX0JSQUNLRVQgPSAzMjks
Ci0gICAgIExFRlRfQlJBQ0UgPSAzMzAsCi0gICAgIFJJR0hUX0JSQUNFID0gMzMxLAotICAgICBE
T1QgPSAzMzIsCi0gICAgIENPTU1BID0gMzMzLAotICAgICBDT0xPTiA9IDMzNCwKLSAgICAgRVFV
QUwgPSAzMzUsCi0gICAgIFNFTUlDT0xPTiA9IDMzNiwKLSAgICAgQkFORyA9IDMzNywKLSAgICAg
REFTSCA9IDMzOCwKLSAgICAgVElMREUgPSAzMzksCi0gICAgIFBMVVMgPSAzNDAsCi0gICAgIFNU
QVIgPSAzNDEsCi0gICAgIFNMQVNIID0gMzQyLAotICAgICBQRVJDRU5UID0gMzQzLAotICAgICBM
RUZUX0FOR0xFID0gMzQ0LAotICAgICBSSUdIVF9BTkdMRSA9IDM0NSwKLSAgICAgVkVSVElDQUxf
QkFSID0gMzQ2LAotICAgICBDQVJFVCA9IDM0NywKLSAgICAgQU1QRVJTQU5EID0gMzQ4LAotICAg
ICBRVUVTVElPTiA9IDM0OQotICAgfTsKLSNlbmRpZgotCi0KLSNpZiAhIGRlZmluZWQgWVlTVFlQ
RSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAotdHlwZWRlZiB1bmlvbiBZWVNUWVBF
Ci17Ci0KLQotICAgIHN0cnVjdCB7Ci0gICAgICAgIHVuaW9uIHsKLSAgICAgICAgICAgIFRTdHJp
bmcgKnN0cmluZzsKLSAgICAgICAgICAgIGZsb2F0IGY7Ci0gICAgICAgICAgICBpbnQgaTsKLSAg
ICAgICAgICAgIGJvb2wgYjsKLSAgICAgICAgfTsKLSAgICAgICAgVFN5bWJvbCogc3ltYm9sOwot
ICAgIH0gbGV4OwotICAgIHN0cnVjdCB7Ci0gICAgICAgIFRPcGVyYXRvciBvcDsKLSAgICAgICAg
dW5pb24gewotICAgICAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7Ci0gICAgICAgICAg
ICBUSW50ZXJtTm9kZVBhaXIgbm9kZVBhaXI7Ci0gICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGlu
dGVybVR5cGVkTm9kZTsKLSAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUFnZ3Jl
Z2F0ZTsKLSAgICAgICAgfTsKLSAgICAgICAgdW5pb24gewotICAgICAgICAgICAgVFB1YmxpY1R5
cGUgdHlwZTsKLSAgICAgICAgICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOwotICAgICAgICAgICAg
VFF1YWxpZmllciBxdWFsaWZpZXI7Ci0gICAgICAgICAgICBURnVuY3Rpb24qIGZ1bmN0aW9uOwot
ICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJhbTsKLSAgICAgICAgICAgIFRGaWVsZCogZmllbGQ7
Ci0gICAgICAgICAgICBURmllbGRMaXN0KiBmaWVsZExpc3Q7Ci0gICAgICAgIH07Ci0gICAgfSBp
bnRlcm07Ci0KLQotCi19IFlZU1RZUEU7Ci0jIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQot
IyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3
biAqLwotIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCi0jZW5kaWYKLQotI2lmICEgZGVm
aW5lZCBZWUxUWVBFICYmICEgZGVmaW5lZCBZWUxUWVBFX0lTX0RFQ0xBUkVECi10eXBlZGVmIHN0
cnVjdCBZWUxUWVBFCi17Ci0gIGludCBmaXJzdF9saW5lOwotICBpbnQgZmlyc3RfY29sdW1uOwot
ICBpbnQgbGFzdF9saW5lOwotICBpbnQgbGFzdF9jb2x1bW47Ci19IFlZTFRZUEU7Ci0jIGRlZmlu
ZSB5eWx0eXBlIFlZTFRZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCi0j
IGRlZmluZSBZWUxUWVBFX0lTX0RFQ0xBUkVEIDEKLSMgZGVmaW5lIFlZTFRZUEVfSVNfVFJJVklB
TCAxCi0jZW5kaWYKLQotCi0jaWZkZWYgWVlQQVJTRV9QQVJBTQotI2lmIGRlZmluZWQgX19TVERD
X18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cwotaW50IHl5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFS
QU0pOwotI2Vsc2UKLWludCB5eXBhcnNlICgpOwotI2VuZGlmCi0jZWxzZSAvKiAhIFlZUEFSU0Vf
UEFSQU0gKi8KLSNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKLWlu
dCB5eXBhcnNlIChUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKLSNlbHNlCi1pbnQgeXlwYXJzZSAo
KTsKLSNlbmRpZgotI2VuZGlmIC8qICEgWVlQQVJTRV9QQVJBTSAqLwotCi0jZW5kaWYgLyogIVlZ
X1lZX0dMU0xBTkdfVEFCX0hfSU5DTFVERUQgICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtT3V0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1PdXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAxM2FhOTZhZjZkNjJkMTBlN2VmNzJmMmZlYWMzNjYyZTczZGI4NjZlLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1PdXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDI0
ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9sb2NhbGlu
dGVybWVkaWF0ZS5oIgotCi0vLwotLy8gVHdvIHB1cnBvc2VzOgotLy8gMS4gIFNob3cgYW4gZXhh
bXBsZSBvZiBob3cgdG8gaXRlcmF0ZSB0cmVlLiAgRnVuY3Rpb25zIGNhbgotLy8gICAgIGFsc28g
ZGlyZWN0bHkgY2FsbCBUcmF2ZXJzZSgpIG9uIGNoaWxkcmVuIHRoZW1zZWx2ZXMgdG8KLS8vICAg
ICBoYXZlIGZpbmVyIGdyYWluZWQgY29udHJvbCBvdmVyIHRoZSBwcm9jZXNzIHRoYW4gc2hvd24g
aGVyZS4KLS8vICAgICBTZWUgdGhlIGxhc3QgZnVuY3Rpb24gZm9yIGhvdyB0byBnZXQgc3RhcnRl
ZC4KLS8vIDIuICBQcmludCBvdXQgYSB0ZXh0IGJhc2VkIGRlc2NyaXB0aW9uIG9mIHRoZSB0cmVl
LgotLy8KLQotLy8KLS8vIFVzZSB0aGlzIGNsYXNzIHRvIGNhcnJ5IGFsb25nIGRhdGEgZnJvbSBu
b2RlIHRvIG5vZGUgaW4KLS8vIHRoZSB0cmF2ZXJzYWwKLS8vCi1jbGFzcyBUT3V0cHV0VHJhdmVy
c2VyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIFRPdXRwdXRUcmF2
ZXJzZXIoVEluZm9TaW5rQmFzZSYgaSkgOiBzaW5rKGkpIHsgfQotICAgIFRJbmZvU2lua0Jhc2Um
IHNpbms7Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wq
KTsKLSAgICB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiopOwot
ICAgIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKLSAgICBi
b29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSopOwotICAgIGJvb2wgdmlz
aXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKLSAgICBib29sIHZp
c2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7Ci0gICAgYm9vbCB2
aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKik7Ci0gICAgYm9vbCB2aXNpdEJyYW5j
aChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCopOwotfTsKLQotVFN0cmluZyBUVHlwZTo6Z2V0
Q29tcGxldGVTdHJpbmcoKSBjb25zdAotewotICAgIFRTdHJpbmdTdHJlYW0gc3RyZWFtOwotCi0g
ICAgaWYgKHF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkgJiYgcXVhbGlmaWVyICE9IEV2cUdsb2Jh
bCkKLSAgICAgICAgc3RyZWFtIDw8IGdldFF1YWxpZmllclN0cmluZygpIDw8ICIgIiA8PCBnZXRQ
cmVjaXNpb25TdHJpbmcoKSA8PCAiICI7Ci0gICAgaWYgKGFycmF5KQotICAgICAgICBzdHJlYW0g
PDwgImFycmF5WyIgPDwgZ2V0QXJyYXlTaXplKCkgPDwgIl0gb2YgIjsKLSAgICBpZiAobWF0cml4
KQotICAgICAgICBzdHJlYW0gPDwgc2l6ZSA8PCAiWCIgPDwgc2l6ZSA8PCAiIG1hdHJpeCBvZiAi
OwotICAgIGVsc2UgaWYgKHNpemUgPiAxKQotICAgICAgICBzdHJlYW0gPDwgc2l6ZSA8PCAiLWNv
bXBvbmVudCB2ZWN0b3Igb2YgIjsKLQotICAgIHN0cmVhbSA8PCBnZXRCYXNpY1N0cmluZygpOwot
ICAgIHJldHVybiBzdHJlYW0uc3RyKCk7Ci19Ci0KLS8vCi0vLyBIZWxwZXIgZnVuY3Rpb25zIGZv
ciBwcmludGluZywgbm90IHBhcnQgb2YgdHJhdmVyc2luZy4KLS8vCi0KLXZvaWQgT3V0cHV0VHJl
ZVRleHQoVEluZm9TaW5rQmFzZSYgc2luaywgVEludGVybU5vZGUqIG5vZGUsIGNvbnN0IGludCBk
ZXB0aCkKLXsKLSAgICBpbnQgaTsKLQotICAgIHNpbmsubG9jYXRpb24obm9kZS0+Z2V0TGluZSgp
KTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBkZXB0aDsgKytpKQotICAgICAgICBzaW5rIDw8ICIg
ICI7Ci19Ci0KLS8vCi0vLyBUaGUgcmVzdCBvZiB0aGUgZmlsZSBhcmUgdGhlIHRyYXZlcnNhbCBm
dW5jdGlvbnMuICBUaGUgbGFzdCBvbmUKLS8vIGlzIHRoZSBvbmUgdGhhdCBzdGFydHMgdGhlIHRy
YXZlcnNhbC4KLS8vCi0vLyBSZXR1cm4gdHJ1ZSBmcm9tIGludGVyaW9yIG5vZGVzIHRvIGhhdmUg
dGhlIGV4dGVybmFsIHRyYXZlcnNhbAotLy8gY29udGludWUgb24gdG8gY2hpbGRyZW4uICBJZiB5
b3UgcHJvY2VzcyBjaGlsZHJlbiB5b3Vyc2VsZiwKLS8vIHJldHVybiBmYWxzZS4KLS8vCi0KLXZv
aWQgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKLXsK
LSAgICBPdXRwdXRUcmVlVGV4dChzaW5rLCBub2RlLCBkZXB0aCk7Ci0KLSAgICBzaW5rIDw8ICIn
IiA8PCBub2RlLT5nZXRTeW1ib2woKSA8PCAiJyAiOwotICAgIHNpbmsgPDwgIigiIDw8IG5vZGUt
PmdldENvbXBsZXRlU3RyaW5nKCkgPDwgIilcbiI7Ci19Ci0KLWJvb2wgVE91dHB1dFRyYXZlcnNl
cjo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5vZGUpCi17Ci0gICAg
VEluZm9TaW5rQmFzZSYgb3V0ID0gc2luazsKLQotICAgIE91dHB1dFRyZWVUZXh0KG91dCwgbm9k
ZSwgZGVwdGgpOwotCi0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKSB7Ci0gICAgICAgIGNhc2Ug
RU9wQXNzaWduOiAgICAgICAgICAgICAgICAgICBvdXQgPDwgIm1vdmUgc2Vjb25kIGNoaWxkIHRv
IGZpcnN0IGNoaWxkIjsgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEluaXRpYWxp
emU6ICAgICAgICAgICAgICAgb3V0IDw8ICJpbml0aWFsaXplIGZpcnN0IGNoaWxkIHdpdGggc2Vj
b25kIGNoaWxkIjsgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BBZGRBc3NpZ246ICAgICAgICAg
ICAgICAgIG91dCA8PCAiYWRkIHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wU3ViQXNzaWduOiAgICAgICAgICAgICAgICBvdXQg
PDwgInN1YnRyYWN0IHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEVPcE11bEFzc2lnbjogICAgICAgICAgICAgICAgb3V0IDw8ICJtdWx0aXBs
eSBzZWNvbmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7ICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjogIG91dCA8PCAibWF0cml4IG11bHQgc2Vjb25k
IGNoaWxkIGludG8gZmlyc3QgY2hpbGQiOyAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wVmVjdG9y
VGltZXNTY2FsYXJBc3NpZ246ICBvdXQgPDwgInZlY3RvciBzY2FsZSBzZWNvbmQgY2hpbGQgaW50
byBmaXJzdCBjaGlsZCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFy
QXNzaWduOiAgb3V0IDw8ICJtYXRyaXggc2NhbGUgc2Vjb25kIGNoaWxkIGludG8gZmlyc3QgY2hp
bGQiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjogIG91
dCA8PCAibWF0cml4IG11bHQgc2Vjb25kIGNoaWxkIGludG8gZmlyc3QgY2hpbGQiOyBicmVhazsK
LSAgICAgICAgY2FzZSBFT3BEaXZBc3NpZ246ICAgICAgICAgICAgICAgIG91dCA8PCAiZGl2aWRl
IHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRU9wSW5kZXhEaXJlY3Q6ICAgb3V0IDw8ICJkaXJlY3QgaW5kZXgiOyAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6IG91dCA8PCAiaW5kaXJlY3QgaW5kZXgiOyBicmVh
azsKLSAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdFN0cnVjdDogICBvdXQgPDwgImRpcmVjdCBp
bmRleCBmb3Igc3RydWN0dXJlIjsgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BWZWN0b3JTd2l6
emxlOiBvdXQgPDwgInZlY3RvciBzd2l6emxlIjsgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BB
ZGQ6ICAgIG91dCA8PCAiYWRkIjsgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBFT3BTdWI6ICAgIG91dCA8PCAic3VidHJhY3QiOyAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBFT3BNdWw6ICAgIG91dCA8PCAiY29tcG9uZW50LXdpc2UgbXVsdGlwbHki
OyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BEaXY6ICAgIG91dCA8PCAiZGl2aWRlIjsgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BFcXVhbDogICAgICAgICAgICBvdXQg
PDwgIkNvbXBhcmUgRXF1YWwiOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RU9wTm90RXF1YWw6ICAgICAgICAgb3V0IDw8ICJDb21wYXJlIE5vdCBFcXVhbCI7ICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcExlc3NUaGFuOiAgICAgICAgIG91dCA8PCAiQ29t
cGFyZSBMZXNzIFRoYW4iOyAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BHcmVh
dGVyVGhhbjogICAgICBvdXQgPDwgIkNvbXBhcmUgR3JlYXRlciBUaGFuIjsgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDogICAgb3V0IDw8ICJDb21wYXJlIExl
c3MgVGhhbiBvciBFcXVhbCI7ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFu
RXF1YWw6IG91dCA8PCAiQ29tcGFyZSBHcmVhdGVyIFRoYW4gb3IgRXF1YWwiOyBicmVhazsKLQot
ICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyOiBvdXQgPDwgInZlY3Rvci1zY2FsZSI7
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4OiBvdXQg
PDwgInZlY3Rvci10aW1lcy1tYXRyaXgiOyAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcE1hdHJp
eFRpbWVzVmVjdG9yOiBvdXQgPDwgIm1hdHJpeC10aW1lcy12ZWN0b3IiOyAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyOiBvdXQgPDwgIm1hdHJpeC1zY2FsZSI7ICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4OiBvdXQgPDwg
Im1hdHJpeC1tdWx0aXBseSI7ICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wTG9naWNh
bE9yOiAgb3V0IDw8ICJsb2dpY2FsLW9yIjsgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BMb2dp
Y2FsWG9yOiBvdXQgPDwgImxvZ2ljYWwteG9yIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTG9n
aWNhbEFuZDogb3V0IDw8ICJsb2dpY2FsLWFuZCI7IGJyZWFrOwotICAgICAgICBkZWZhdWx0OiBv
dXQgPDwgIjx1bmtub3duIG9wPiI7Ci0gICAgfQotCi0gICAgb3V0IDw8ICIgKCIgPDwgbm9kZS0+
Z2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiKSI7Ci0KLSAgICBvdXQgPDwgIlxuIjsKLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0VW5hcnkoVmlzaXQg
dmlzaXQsIFRJbnRlcm1VbmFyeSogbm9kZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBz
aW5rOwotCi0gICAgT3V0cHV0VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7Ci0KLSAgICBzd2l0
Y2ggKG5vZGUtPmdldE9wKCkpIHsKLSAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZTogICAgICAgb3V0
IDw8ICJOZWdhdGUgdmFsdWUiOyAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFZlY3Rv
ckxvZ2ljYWxOb3Q6Ci0gICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDogICAgIG91dCA8PCAiTmVn
YXRlIGNvbmRpdGlvbmFsIjsgICBicmVhazsKLQotICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1l
bnQ6ICBvdXQgPDwgIlBvc3QtSW5jcmVtZW50IjsgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RU9wUG9zdERlY3JlbWVudDogIG91dCA8PCAiUG9zdC1EZWNyZW1lbnQiOyAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6ICAgb3V0IDw8ICJQcmUtSW5jcmVtZW50Ijsg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDogICBvdXQgPDwgIlBy
ZS1EZWNyZW1lbnQiOyAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BDb252SW50VG9C
b29sOiAgb3V0IDw8ICJDb252ZXJ0IGludCB0byBib29sIjsgIGJyZWFrOwotICAgICAgICBjYXNl
IEVPcENvbnZGbG9hdFRvQm9vbDpvdXQgPDwgIkNvbnZlcnQgZmxvYXQgdG8gYm9vbCI7YnJlYWs7
Ci0gICAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0Zsb2F0Om91dCA8PCAiQ29udmVydCBib29sIHRv
IGZsb2F0IjticmVhazsKLSAgICAgICAgY2FzZSBFT3BDb252SW50VG9GbG9hdDogb3V0IDw8ICJD
b252ZXJ0IGludCB0byBmbG9hdCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnZGbG9hdFRv
SW50OiBvdXQgPDwgIkNvbnZlcnQgZmxvYXQgdG8gaW50IjsgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RU9wQ29udkJvb2xUb0ludDogIG91dCA8PCAiQ29udmVydCBib29sIHRvIGludCI7ICBicmVhazsK
LQotICAgICAgICBjYXNlIEVPcFJhZGlhbnM6ICAgICAgICBvdXQgPDwgInJhZGlhbnMiOyAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wRGVncmVlczogICAgICAgIG91dCA8PCAi
ZGVncmVlcyI7ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BTaW46ICAgICAg
ICAgICAgb3V0IDw8ICJzaW5lIjsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEVPcENvczogICAgICAgICAgICBvdXQgPDwgImNvc2luZSI7ICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgRU9wVGFuOiAgICAgICAgICAgIG91dCA8PCAidGFuZ2VudCI7ICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BBc2luOiAgICAgICAgICAgb3V0IDw8ICJh
cmMgc2luZSI7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEFjb3M6ICAgICAg
ICAgICBvdXQgPDwgImFyYyBjb3NpbmUiOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RU9wQXRhbjogICAgICAgICAgIG91dCA8PCAiYXJjIHRhbmdlbnQiOyAgICAgICAgICBicmVhazsK
LQotICAgICAgICBjYXNlIEVPcEV4cDogICAgICAgICAgICBvdXQgPDwgImV4cCI7ICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTG9nOiAgICAgICAgICAgIG91dCA8PCAi
bG9nIjsgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BFeHAyOiAgICAg
ICAgICAgb3V0IDw8ICJleHAyIjsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEVPcExvZzI6ICAgICAgICAgICBvdXQgPDwgImxvZzIiOyAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgRU9wU3FydDogICAgICAgICAgIG91dCA8PCAic3FydCI7ICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BJbnZlcnNlU3FydDogICAgb3V0IDw8ICJp
bnZlcnNlIHNxcnQiOyAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wQWJzOiAgICAg
ICAgICAgIG91dCA8PCAiQWJzb2x1dGUgdmFsdWUiOyAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBFT3BTaWduOiAgICAgICAgICAgb3V0IDw8ICJTaWduIjsgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEVPcEZsb29yOiAgICAgICAgICBvdXQgPDwgIkZsb29yIjsgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ2VpbDogICAgICAgICAgIG91dCA8PCAi
Q2VpbGluZyI7ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BGcmFjdDogICAg
ICAgICAgb3V0IDw8ICJGcmFjdGlvbiI7ICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNh
c2UgRU9wTGVuZ3RoOiAgICAgICAgIG91dCA8PCAibGVuZ3RoIjsgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBFT3BOb3JtYWxpemU6ICAgICAgb3V0IDw8ICJub3JtYWxpemUiOyAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgLy8JY2FzZSBFT3BEUGR4OiAgICAgICAgICAg
b3V0IDw8ICJkUGR4IjsgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgLy8JY2FzZSBFT3BEUGR5OiAgICAgICAgICAgb3V0IDw8ICJkUGR5IjsgICAgICAg
ICAgICAgICAgIGJyZWFrOyAgIAotICAgICAgICAgICAgLy8JY2FzZSBFT3BGd2lkdGg6ICAgICAg
ICAgb3V0IDw8ICJmd2lkdGgiOyAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAg
ICAKLQotICAgICAgICBjYXNlIEVPcEFueTogICAgICAgICAgICBvdXQgPDwgImFueSI7ICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQWxsOiAgICAgICAgICAgIG91dCA8
PCAiYWxsIjsgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgb3V0LnByZWZpeChFUHJlZml4RXJyb3IpOwotICAgICAgICAgICAgb3V0IDw8ICJC
YWQgdW5hcnkgb3AiOwotICAgIH0KLQotICAgIG91dCA8PCAiICgiIDw8IG5vZGUtPmdldENvbXBs
ZXRlU3RyaW5nKCkgPDwgIikiOwotCi0gICAgb3V0IDw8ICJcbiI7Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNp
dCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBz
aW5rOwotCi0gICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9wTnVsbCkgewotICAgICAgICBvdXQu
cHJlZml4KEVQcmVmaXhFcnJvcik7Ci0gICAgICAgIG91dCA8PCAibm9kZSBpcyBzdGlsbCBFT3BO
dWxsISI7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIE91dHB1dFRyZWVUZXh0
KG91dCwgbm9kZSwgZGVwdGgpOwotCi0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKSB7Ci0gICAg
ICAgIGNhc2UgRU9wU2VxdWVuY2U6ICAgICAgb3V0IDw8ICJTZXF1ZW5jZVxuIjsgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIGNhc2UgRU9wQ29tbWE6ICAgICAgICAgb3V0IDw8ICJDb21tYVxuIjsgcmV0
dXJuIHRydWU7Ci0gICAgICAgIGNhc2UgRU9wRnVuY3Rpb246ICAgICAgb3V0IDw8ICJGdW5jdGlv
biBEZWZpbml0aW9uOiAiIDw8IG5vZGUtPmdldE5hbWUoKTsgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RU9wRnVuY3Rpb25DYWxsOiAgb3V0IDw8ICJGdW5jdGlvbiBDYWxsOiAiIDw8IG5vZGUtPmdldE5h
bWUoKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wUGFyYW1ldGVyczogICAgb3V0IDw8ICJGdW5j
dGlvbiBQYXJhbWV0ZXJzOiAiOyAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RGbG9hdDogb3V0IDw8ICJDb25zdHJ1Y3QgZmxvYXQiOyBicmVhazsKLSAgICAg
ICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMyOiAgb3V0IDw8ICJDb25zdHJ1Y3QgdmVjMiI7ICBicmVh
azsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMzOiAgb3V0IDw8ICJDb25zdHJ1Y3QgdmVj
MyI7ICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWM0OiAgb3V0IDw8ICJDb25z
dHJ1Y3QgdmVjNCI7ICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29sOiAgb3V0
IDw8ICJDb25zdHJ1Y3QgYm9vbCI7ICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RC
VmVjMjogb3V0IDw8ICJDb25zdHJ1Y3QgYnZlYzIiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BD
b25zdHJ1Y3RCVmVjMzogb3V0IDw8ICJDb25zdHJ1Y3QgYnZlYzMiOyBicmVhazsKLSAgICAgICAg
Y2FzZSBFT3BDb25zdHJ1Y3RCVmVjNDogb3V0IDw8ICJDb25zdHJ1Y3QgYnZlYzQiOyBicmVhazsK
LSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6ICAgb3V0IDw8ICJDb25zdHJ1Y3QgaW50Ijsg
ICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMjogb3V0IDw8ICJDb25zdHJ1
Y3QgaXZlYzIiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMzogb3V0IDw8
ICJDb25zdHJ1Y3QgaXZlYzMiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVj
NDogb3V0IDw8ICJDb25zdHJ1Y3QgaXZlYzQiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25z
dHJ1Y3RNYXQyOiAgb3V0IDw8ICJDb25zdHJ1Y3QgbWF0MiI7ICBicmVhazsKLSAgICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RNYXQzOiAgb3V0IDw8ICJDb25zdHJ1Y3QgbWF0MyI7ICBicmVhazsKLSAg
ICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQ0OiAgb3V0IDw8ICJDb25zdHJ1Y3QgbWF0NCI7ICBi
cmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RTdHJ1Y3Q6ICBvdXQgPDwgIkNvbnN0cnVj
dCBzdHJ1Y3R1cmUiOyAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjogICAgICAg
ICBvdXQgPDwgIkNvbXBhcmUgTGVzcyBUaGFuIjsgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRU9wR3JlYXRlclRoYW46ICAgICAgb3V0IDw8ICJDb21wYXJlIEdyZWF0ZXIgVGhhbiI7
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6ICAgIG91dCA8
PCAiQ29tcGFyZSBMZXNzIFRoYW4gb3IgRXF1YWwiOyAgICBicmVhazsKLSAgICAgICAgY2FzZSBF
T3BHcmVhdGVyVGhhbkVxdWFsOiBvdXQgPDwgIkNvbXBhcmUgR3JlYXRlciBUaGFuIG9yIEVxdWFs
IjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wVmVjdG9yRXF1YWw6ICAgICAgb3V0IDw8ICJFcXVh
bCI7ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFZlY3Rv
ck5vdEVxdWFsOiAgIG91dCA8PCAiTm90RXF1YWwiOyAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLQotICAgICAgICBjYXNlIEVPcE1vZDogICAgICAgICAgIG91dCA8PCAibW9kIjsgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BQb3c6ICAgICAgICAgICBvdXQgPDwgInBvdyI7ICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BBdGFuOiAgICAgICAgICBvdXQgPDwgImFy
YyB0YW5nZW50IjsgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BNaW46ICAgICAgICAgICBvdXQg
PDwgIm1pbiI7ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTWF4OiAgICAgICAgICAg
b3V0IDw8ICJtYXgiOyAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcENsYW1wOiAgICAg
ICAgIG91dCA8PCAiY2xhbXAiOyAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BNaXg6ICAg
ICAgICAgICBvdXQgPDwgIm1peCI7ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wU3Rl
cDogICAgICAgICAgb3V0IDw8ICJzdGVwIjsgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVP
cFNtb290aFN0ZXA6ICAgIG91dCA8PCAic21vb3Roc3RlcCI7ICBicmVhazsKLQotICAgICAgICBj
YXNlIEVPcERpc3RhbmNlOiAgICAgIG91dCA8PCAiZGlzdGFuY2UiOyAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBFT3BEb3Q6ICAgICAgICAgICBvdXQgPDwgImRvdC1wcm9kdWN0
IjsgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ3Jvc3M6ICAgICAgICAgb3V0
IDw8ICJjcm9zcy1wcm9kdWN0IjsgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEZh
Y2VGb3J3YXJkOiAgIG91dCA8PCAiZmFjZS1mb3J3YXJkIjsgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBFT3BSZWZsZWN0OiAgICAgICBvdXQgPDwgInJlZmxlY3QiOyAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wUmVmcmFjdDogICAgICAgb3V0IDw8ICJyZWZy
YWN0IjsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcE11bDogICAgICAg
ICAgIG91dCA8PCAiY29tcG9uZW50LXdpc2UgbXVsdGlwbHkiOyBicmVhazsKLQotICAgICAgICBj
YXNlIEVPcERlY2xhcmF0aW9uOiAgIG91dCA8PCAiRGVjbGFyYXRpb246ICI7ICAgYnJlYWs7Ci0K
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIG91dC5wcmVmaXgoRVByZWZpeEVycm9yKTsK
LSAgICAgICAgICAgIG91dCA8PCAiQmFkIGFnZ3JlZ2F0aW9uIG9wIjsKLSAgICB9Ci0KLSAgICBp
ZiAobm9kZS0+Z2V0T3AoKSAhPSBFT3BTZXF1ZW5jZSAmJiBub2RlLT5nZXRPcCgpICE9IEVPcFBh
cmFtZXRlcnMpCi0gICAgICAgIG91dCA8PCAiICgiIDw8IG5vZGUtPmdldENvbXBsZXRlU3RyaW5n
KCkgPDwgIikiOwotCi0gICAgb3V0IDw8ICJcbiI7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVy
bVNlbGVjdGlvbiogbm9kZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBzaW5rOwotCi0g
ICAgT3V0cHV0VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7Ci0KLSAgICBvdXQgPDwgIlRlc3Qg
Y29uZGl0aW9uIGFuZCBzZWxlY3QiOwotICAgIG91dCA8PCAiICgiIDw8IG5vZGUtPmdldENvbXBs
ZXRlU3RyaW5nKCkgPDwgIilcbiI7Ci0KLSAgICArK2RlcHRoOwotCi0gICAgT3V0cHV0VHJlZVRl
eHQoc2luaywgbm9kZSwgZGVwdGgpOwotICAgIG91dCA8PCAiQ29uZGl0aW9uXG4iOwotICAgIG5v
ZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKLQotICAgIE91dHB1dFRyZWVUZXh0
KHNpbmssIG5vZGUsIGRlcHRoKTsKLSAgICBpZiAobm9kZS0+Z2V0VHJ1ZUJsb2NrKCkpIHsKLSAg
ICAgICAgb3V0IDw8ICJ0cnVlIGNhc2VcbiI7Ci0gICAgICAgIG5vZGUtPmdldFRydWVCbG9jaygp
LT50cmF2ZXJzZSh0aGlzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgb3V0IDw8ICJ0cnVlIGNhc2Ug
aXMgbnVsbFxuIjsKLQotICAgIGlmIChub2RlLT5nZXRGYWxzZUJsb2NrKCkpIHsKLSAgICAgICAg
T3V0cHV0VHJlZVRleHQoc2luaywgbm9kZSwgZGVwdGgpOwotICAgICAgICBvdXQgPDwgImZhbHNl
IGNhc2VcbiI7Ci0gICAgICAgIG5vZGUtPmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7
Ci0gICAgfQotCi0gICAgLS1kZXB0aDsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBU
T3V0cHV0VHJhdmVyc2VyOjp2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24q
IG5vZGUpCi17Ci0gICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gc2luazsKLQotICAgIHNpemVfdCBz
aXplID0gbm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsKLQotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgIE91dHB1dFRyZWVUZXh0KG91dCwgbm9k
ZSwgZGVwdGgpOwotICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKClb
aV0uZ2V0VHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEVidEJvb2w6Ci0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKClbaV0uZ2V0QkNvbnN0KCkpCi0gICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAidHJ1ZSI7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICBvdXQgPDwgImZhbHNlIjsKLQotICAgICAgICAgICAgICAgIG91dCA8
PCAiICgiIDw8ICJjb25zdCBib29sIiA8PCAiKSI7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJc
biI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVidEZsb2F0Ogot
ICAgICAgICAgICAgICAgIG91dCA8PCBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpW2ldLmdl
dEZDb25zdCgpOwotICAgICAgICAgICAgICAgIG91dCA8PCAiIChjb25zdCBmbG9hdClcbiI7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVidEludDoKLSAgICAgICAg
ICAgICAgICBvdXQgPDwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVtpXS5nZXRJQ29uc3Qo
KTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIiAoY29uc3QgaW50KVxuIjsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgb3V0Lm1l
c3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIlVua25vd24gY29u
c3RhbnQiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0KLQot
Ym9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29w
KiBub2RlKQotewotICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IHNpbms7Ci0KLSAgICBPdXRwdXRU
cmVlVGV4dChvdXQsIG5vZGUsIGRlcHRoKTsKLQotICAgIG91dCA8PCAiTG9vcCB3aXRoIGNvbmRp
dGlvbiAiOwotICAgIGlmIChub2RlLT5nZXRUeXBlKCkgPT0gRUxvb3BEb1doaWxlKQotICAgICAg
ICBvdXQgPDwgIm5vdCAiOwotICAgIG91dCA8PCAidGVzdGVkIGZpcnN0XG4iOwotCi0gICAgKytk
ZXB0aDsKLQotICAgIE91dHB1dFRyZWVUZXh0KHNpbmssIG5vZGUsIGRlcHRoKTsKLSAgICBpZiAo
bm9kZS0+Z2V0Q29uZGl0aW9uKCkpIHsKLSAgICAgICAgb3V0IDw8ICJMb29wIENvbmRpdGlvblxu
IjsKLSAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOwotICAgIH0g
ZWxzZQotICAgICAgICBvdXQgPDwgIk5vIGxvb3AgY29uZGl0aW9uXG4iOwotCi0gICAgT3V0cHV0
VHJlZVRleHQoc2luaywgbm9kZSwgZGVwdGgpOwotICAgIGlmIChub2RlLT5nZXRCb2R5KCkpIHsK
LSAgICAgICAgb3V0IDw8ICJMb29wIEJvZHlcbiI7Ci0gICAgICAgIG5vZGUtPmdldEJvZHkoKS0+
dHJhdmVyc2UodGhpcyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG91dCA8PCAiTm8gbG9vcCBib2R5
XG4iOwotCi0gICAgaWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkgewotICAgICAgICBPdXRwdXRU
cmVlVGV4dChzaW5rLCBub2RlLCBkZXB0aCk7Ci0gICAgICAgIG91dCA8PCAiTG9vcCBUZXJtaW5h
bCBFeHByZXNzaW9uXG4iOwotICAgICAgICBub2RlLT5nZXRFeHByZXNzaW9uKCktPnRyYXZlcnNl
KHRoaXMpOwotICAgIH0KLQotICAgIC0tZGVwdGg7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWJvb2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1C
cmFuY2gqIG5vZGUpCi17Ci0gICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gc2luazsKLQotICAgIE91
dHB1dFRyZWVUZXh0KG91dCwgbm9kZSwgZGVwdGgpOwotCi0gICAgc3dpdGNoIChub2RlLT5nZXRG
bG93T3AoKSkgewotICAgICAgICBjYXNlIEVPcEtpbGw6ICAgICAgb3V0IDw8ICJCcmFuY2g6IEtp
bGwiOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQnJlYWs6ICAgICBvdXQgPDwg
IkJyYW5jaDogQnJlYWsiOyAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb250aW51
ZTogIG91dCA8PCAiQnJhbmNoOiBDb250aW51ZSI7ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEVPcFJldHVybjogICAgb3V0IDw8ICJCcmFuY2g6IFJldHVybiI7ICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICBvdXQgPDwgIkJyYW5jaDogVW5rbm93biBCcmFuY2gi
OyBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAobm9kZS0+Z2V0RXhwcmVzc2lvbigpKSB7Ci0gICAg
ICAgIG91dCA8PCAiIHdpdGggZXhwcmVzc2lvblxuIjsKLSAgICAgICAgKytkZXB0aDsKLSAgICAg
ICAgbm9kZS0+Z2V0RXhwcmVzc2lvbigpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgLS1kZXB0
aDsKLSAgICB9IGVsc2UKLSAgICAgICAgb3V0IDw8ICJcbiI7Ci0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLS8vCi0vLyBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBvbmUgdG8gY2FsbCBleHRlcm5hbGx5
IHRvIHN0YXJ0IHRoZSB0cmF2ZXJzYWwuCi0vLyBJbmRpdmlkdWFsIGZ1bmN0aW9ucyBjYW4gYmUg
aW5pdGlhbGl6ZWQgdG8gMCB0byBza2lwIHByb2Nlc3Npbmcgb2YgdGhhdAotLy8gdHlwZSBvZiBu
b2RlLiAgSXQncyBjaGlsZHJlbiB3aWxsIHN0aWxsIGJlIHByb2Nlc3NlZC4KLS8vCi12b2lkIFRJ
bnRlcm1lZGlhdGU6Om91dHB1dFRyZWUoVEludGVybU5vZGUqIHJvb3QpCi17Ci0gICAgaWYgKHJv
b3QgPT0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVE91dHB1dFRyYXZlcnNlciBpdChpbmZv
U2luay5pbmZvKTsKLQotICAgIHJvb3QtPnRyYXZlcnNlKCZpdCk7Ci19CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0ZTM5ZmQ1NjJkYzA0NTU0MWMzMWZjNDMxOTA2M2I1MDYw
MjA5OWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVkaWF0ZS5oCisrKyAvZGV2
L251bGwKQEAgLTEsNjM1ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vCi0vLyBEZWZp
bml0aW9uIG9mIHRoZSBpbi1tZW1vcnkgaGlnaC1sZXZlbCBpbnRlcm1lZGlhdGUgcmVwcmVzZW50
YXRpb24KLS8vIG9mIHNoYWRlcnMuICBUaGlzIGlzIGEgdHJlZSB0aGF0IHBhcnNlciBjcmVhdGVz
LgotLy8KLS8vIE5vZGVzIGluIHRoZSB0cmVlIGFyZSBkZWZpbmVkIGFzIGEgaGllcmFyY2h5IG9m
IGNsYXNzZXMgZGVyaXZlZCBmcm9tIAotLy8gVEludGVybU5vZGUuIEVhY2ggaXMgYSBub2RlIGlu
IGEgdHJlZS4gIFRoZXJlIGlzIG5vIHByZXNldCBicmFuY2hpbmcgZmFjdG9yOwotLy8gZWFjaCBu
b2RlIGNhbiBoYXZlIGl0J3Mgb3duIHR5cGUgb2YgbGlzdCBvZiBjaGlsZHJlbi4KLS8vCi0KLSNp
Zm5kZWYgX19JTlRFUk1FRElBVEVfSAotI2RlZmluZSBfX0lOVEVSTUVESUFURV9ICi0KLSNpbmNs
dWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNs
dWRlICJjb21waWxlci9Db21tb24uaCIKLSNpbmNsdWRlICJjb21waWxlci9UeXBlcy5oIgotI2lu
Y2x1ZGUgImNvbXBpbGVyL0NvbnN0YW50VW5pb24uaCIKLQotLy8KLS8vIE9wZXJhdG9ycyB1c2Vk
IGJ5IHRoZSBoaWdoLWxldmVsIChwYXJzZSB0cmVlKSByZXByZXNlbnRhdGlvbi4KLS8vCi1lbnVt
IFRPcGVyYXRvciB7Ci0gICAgRU9wTnVsbCwgICAgICAgICAgICAvLyBpZiBpbiBhIG5vZGUsIHNo
b3VsZCBvbmx5IG1lYW4gYSBub2RlIGlzIHN0aWxsIGJlaW5nIGJ1aWx0Ci0gICAgRU9wU2VxdWVu
Y2UsICAgICAgICAvLyBkZW5vdGVzIGEgbGlzdCBvZiBzdGF0ZW1lbnRzLCBvciBwYXJhbWV0ZXJz
LCBldGMuCi0gICAgRU9wRnVuY3Rpb25DYWxsLCAgICAKLSAgICBFT3BGdW5jdGlvbiwgICAgICAg
IC8vIEZvciBmdW5jdGlvbiBkZWZpbml0aW9uCi0gICAgRU9wUGFyYW1ldGVycywgICAgICAvLyBh
biBhZ2dyZWdhdGUgbGlzdGluZyB0aGUgcGFyYW1ldGVycyB0byBhIGZ1bmN0aW9uCi0KLSAgICBF
T3BEZWNsYXJhdGlvbiwKLSAgICBFT3BQcm90b3R5cGUsCi0KLSAgICAvLwotICAgIC8vIFVuYXJ5
IG9wZXJhdG9ycwotICAgIC8vCi0KLSAgICBFT3BOZWdhdGl2ZSwKLSAgICBFT3BMb2dpY2FsTm90
LAotICAgIEVPcFZlY3RvckxvZ2ljYWxOb3QsCi0KLSAgICBFT3BQb3N0SW5jcmVtZW50LAotICAg
IEVPcFBvc3REZWNyZW1lbnQsCi0gICAgRU9wUHJlSW5jcmVtZW50LAotICAgIEVPcFByZURlY3Jl
bWVudCwKLQotICAgIEVPcENvbnZJbnRUb0Jvb2wsCi0gICAgRU9wQ29udkZsb2F0VG9Cb29sLAot
ICAgIEVPcENvbnZCb29sVG9GbG9hdCwKLSAgICBFT3BDb252SW50VG9GbG9hdCwKLSAgICBFT3BD
b252RmxvYXRUb0ludCwKLSAgICBFT3BDb252Qm9vbFRvSW50LAotCi0gICAgLy8KLSAgICAvLyBi
aW5hcnkgb3BlcmF0aW9ucwotICAgIC8vCi0KLSAgICBFT3BBZGQsCi0gICAgRU9wU3ViLAotICAg
IEVPcE11bCwKLSAgICBFT3BEaXYsCi0gICAgRU9wRXF1YWwsCi0gICAgRU9wTm90RXF1YWwsCi0g
ICAgRU9wVmVjdG9yRXF1YWwsCi0gICAgRU9wVmVjdG9yTm90RXF1YWwsCi0gICAgRU9wTGVzc1Ro
YW4sCi0gICAgRU9wR3JlYXRlclRoYW4sCi0gICAgRU9wTGVzc1RoYW5FcXVhbCwKLSAgICBFT3BH
cmVhdGVyVGhhbkVxdWFsLAotICAgIEVPcENvbW1hLAotCi0gICAgRU9wVmVjdG9yVGltZXNTY2Fs
YXIsCi0gICAgRU9wVmVjdG9yVGltZXNNYXRyaXgsCi0gICAgRU9wTWF0cml4VGltZXNWZWN0b3Is
Ci0gICAgRU9wTWF0cml4VGltZXNTY2FsYXIsCi0KLSAgICBFT3BMb2dpY2FsT3IsCi0gICAgRU9w
TG9naWNhbFhvciwKLSAgICBFT3BMb2dpY2FsQW5kLAotCi0gICAgRU9wSW5kZXhEaXJlY3QsCi0g
ICAgRU9wSW5kZXhJbmRpcmVjdCwKLSAgICBFT3BJbmRleERpcmVjdFN0cnVjdCwKLQotICAgIEVP
cFZlY3RvclN3aXp6bGUsCi0KLSAgICAvLwotICAgIC8vIEJ1aWx0LWluIGZ1bmN0aW9ucyBwb3Rl
bnRpYWxseSBtYXBwZWQgdG8gb3BlcmF0b3JzCi0gICAgLy8KLQotICAgIEVPcFJhZGlhbnMsCi0g
ICAgRU9wRGVncmVlcywKLSAgICBFT3BTaW4sCi0gICAgRU9wQ29zLAotICAgIEVPcFRhbiwKLSAg
ICBFT3BBc2luLAotICAgIEVPcEFjb3MsCi0gICAgRU9wQXRhbiwKLQotICAgIEVPcFBvdywKLSAg
ICBFT3BFeHAsCi0gICAgRU9wTG9nLAotICAgIEVPcEV4cDIsCi0gICAgRU9wTG9nMiwKLSAgICBF
T3BTcXJ0LAotICAgIEVPcEludmVyc2VTcXJ0LAotCi0gICAgRU9wQWJzLAotICAgIEVPcFNpZ24s
Ci0gICAgRU9wRmxvb3IsCi0gICAgRU9wQ2VpbCwKLSAgICBFT3BGcmFjdCwKLSAgICBFT3BNb2Qs
Ci0gICAgRU9wTWluLAotICAgIEVPcE1heCwKLSAgICBFT3BDbGFtcCwKLSAgICBFT3BNaXgsCi0g
ICAgRU9wU3RlcCwKLSAgICBFT3BTbW9vdGhTdGVwLAotCi0gICAgRU9wTGVuZ3RoLAotICAgIEVP
cERpc3RhbmNlLAotICAgIEVPcERvdCwKLSAgICBFT3BDcm9zcywKLSAgICBFT3BOb3JtYWxpemUs
Ci0gICAgRU9wRmFjZUZvcndhcmQsCi0gICAgRU9wUmVmbGVjdCwKLSAgICBFT3BSZWZyYWN0LAot
Ci0gICAgRU9wREZkeCwgICAgICAgICAgICAvLyBGcmFnbWVudCBvbmx5LCBPRVNfc3RhbmRhcmRf
ZGVyaXZhdGl2ZXMgZXh0ZW5zaW9uCi0gICAgRU9wREZkeSwgICAgICAgICAgICAvLyBGcmFnbWVu
dCBvbmx5LCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgZXh0ZW5zaW9uCi0gICAgRU9wRndpZHRo
LCAgICAgICAgICAvLyBGcmFnbWVudCBvbmx5LCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgZXh0
ZW5zaW9uCi0KLSAgICBFT3BNYXRyaXhUaW1lc01hdHJpeCwKLQotICAgIEVPcEFueSwKLSAgICBF
T3BBbGwsCi0KLSAgICAvLwotICAgIC8vIEJyYW5jaAotICAgIC8vCi0KLSAgICBFT3BLaWxsLCAg
ICAgICAgICAgIC8vIEZyYWdtZW50IG9ubHkKLSAgICBFT3BSZXR1cm4sCi0gICAgRU9wQnJlYWss
Ci0gICAgRU9wQ29udGludWUsCi0KLSAgICAvLwotICAgIC8vIENvbnN0cnVjdG9ycwotICAgIC8v
Ci0KLSAgICBFT3BDb25zdHJ1Y3RJbnQsCi0gICAgRU9wQ29uc3RydWN0Qm9vbCwKLSAgICBFT3BD
b25zdHJ1Y3RGbG9hdCwKLSAgICBFT3BDb25zdHJ1Y3RWZWMyLAotICAgIEVPcENvbnN0cnVjdFZl
YzMsCi0gICAgRU9wQ29uc3RydWN0VmVjNCwKLSAgICBFT3BDb25zdHJ1Y3RCVmVjMiwKLSAgICBF
T3BDb25zdHJ1Y3RCVmVjMywKLSAgICBFT3BDb25zdHJ1Y3RCVmVjNCwKLSAgICBFT3BDb25zdHJ1
Y3RJVmVjMiwKLSAgICBFT3BDb25zdHJ1Y3RJVmVjMywKLSAgICBFT3BDb25zdHJ1Y3RJVmVjNCwK
LSAgICBFT3BDb25zdHJ1Y3RNYXQyLAotICAgIEVPcENvbnN0cnVjdE1hdDMsCi0gICAgRU9wQ29u
c3RydWN0TWF0NCwKLSAgICBFT3BDb25zdHJ1Y3RTdHJ1Y3QsCi0KLSAgICAvLwotICAgIC8vIG1v
dmVzCi0gICAgLy8KLQotICAgIEVPcEFzc2lnbiwKLSAgICBFT3BJbml0aWFsaXplLAotICAgIEVP
cEFkZEFzc2lnbiwKLSAgICBFT3BTdWJBc3NpZ24sCi0gICAgRU9wTXVsQXNzaWduLAotICAgIEVP
cFZlY3RvclRpbWVzTWF0cml4QXNzaWduLAotICAgIEVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWdu
LAotICAgIEVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduLAotICAgIEVPcE1hdHJpeFRpbWVzTWF0
cml4QXNzaWduLAotICAgIEVPcERpdkFzc2lnbgotfTsKLQotZXh0ZXJuIGNvbnN0IGNoYXIqIGdl
dE9wZXJhdG9yU3RyaW5nKFRPcGVyYXRvciBvcCk7Ci0KLWNsYXNzIFRJbnRlcm1UcmF2ZXJzZXI7
Ci1jbGFzcyBUSW50ZXJtQWdncmVnYXRlOwotY2xhc3MgVEludGVybUJpbmFyeTsKLWNsYXNzIFRJ
bnRlcm1VbmFyeTsKLWNsYXNzIFRJbnRlcm1Db25zdGFudFVuaW9uOwotY2xhc3MgVEludGVybVNl
bGVjdGlvbjsKLWNsYXNzIFRJbnRlcm1UeXBlZDsKLWNsYXNzIFRJbnRlcm1TeW1ib2w7Ci1jbGFz
cyBUSW50ZXJtTG9vcDsKLWNsYXNzIFRJbmZvU2luazsKLQotLy8KLS8vIEJhc2UgY2xhc3MgZm9y
IHRoZSB0cmVlIG5vZGVzCi0vLwotY2xhc3MgVEludGVybU5vZGUgewotcHVibGljOgotICAgIFBP
T0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKLSAgICBUSW50ZXJtTm9kZSgpIHsKLSAgICAgICAg
Ly8gVE9ETzogTW92ZSB0aGlzIHRvIFRTb3VyY2VMb2MgY29uc3RydWN0b3IKLSAgICAgICAgLy8g
YWZ0ZXIgZ2V0dGluZyByaWQgb2YgVFB1YmxpY1R5cGUuCi0gICAgICAgIGxpbmUuZmlyc3RfZmls
ZSA9IGxpbmUubGFzdF9maWxlID0gMDsKLSAgICAgICAgbGluZS5maXJzdF9saW5lID0gbGluZS5s
YXN0X2xpbmUgPSAwOwotICAgIH0KLSAgICB2aXJ0dWFsIH5USW50ZXJtTm9kZSgpIHsgfQotCi0g
ICAgY29uc3QgVFNvdXJjZUxvYyYgZ2V0TGluZSgpIGNvbnN0IHsgcmV0dXJuIGxpbmU7IH0KLSAg
ICB2b2lkIHNldExpbmUoY29uc3QgVFNvdXJjZUxvYyYgbCkgeyBsaW5lID0gbDsgfQotCi0gICAg
dmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKSA9IDA7Ci0gICAgdmlydHVh
bCBUSW50ZXJtVHlwZWQqIGdldEFzVHlwZWQoKSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBU
SW50ZXJtQ29uc3RhbnRVbmlvbiogZ2V0QXNDb25zdGFudFVuaW9uKCkgeyByZXR1cm4gMDsgfQot
ICAgIHZpcnR1YWwgVEludGVybUFnZ3JlZ2F0ZSogZ2V0QXNBZ2dyZWdhdGUoKSB7IHJldHVybiAw
OyB9Ci0gICAgdmlydHVhbCBUSW50ZXJtQmluYXJ5KiBnZXRBc0JpbmFyeU5vZGUoKSB7IHJldHVy
biAwOyB9Ci0gICAgdmlydHVhbCBUSW50ZXJtVW5hcnkqIGdldEFzVW5hcnlOb2RlKCkgeyByZXR1
cm4gMDsgfQotICAgIHZpcnR1YWwgVEludGVybVNlbGVjdGlvbiogZ2V0QXNTZWxlY3Rpb25Ob2Rl
KCkgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgVEludGVybVN5bWJvbCogZ2V0QXNTeW1ib2xO
b2RlKCkgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgVEludGVybUxvb3AqIGdldEFzTG9vcE5v
ZGUoKSB7IHJldHVybiAwOyB9Ci0KLSAgICAvLyBSZXBsYWNlIGEgY2hpbGQgbm9kZS4gUmV0dXJu
IHRydWUgaWYgfG9yaWdpbmFsfCBpcyBhIGNoaWxkCi0gICAgLy8gbm9kZSBhbmQgaXQgaXMgcmVw
bGFjZWQ7IG90aGVyd2lzZSwgcmV0dXJuIGZhbHNlLgotICAgIHZpcnR1YWwgYm9vbCByZXBsYWNl
Q2hpbGROb2RlKAotICAgICAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpy
ZXBsYWNlbWVudCkgPSAwOwotCi1wcm90ZWN0ZWQ6Ci0gICAgVFNvdXJjZUxvYyBsaW5lOwotfTsK
LQotLy8KLS8vIFRoaXMgaXMganVzdCB0byBoZWxwIHlhY2MuCi0vLwotc3RydWN0IFRJbnRlcm1O
b2RlUGFpciB7Ci0gICAgVEludGVybU5vZGUqIG5vZGUxOwotICAgIFRJbnRlcm1Ob2RlKiBub2Rl
MjsKLX07Ci0KLS8vCi0vLyBJbnRlcm1lZGlhdGUgY2xhc3MgZm9yIG5vZGVzIHRoYXQgaGF2ZSBh
IHR5cGUuCi0vLwotY2xhc3MgVEludGVybVR5cGVkIDogcHVibGljIFRJbnRlcm1Ob2RlIHsKLXB1
YmxpYzoKLSAgICBUSW50ZXJtVHlwZWQoY29uc3QgVFR5cGUmIHQpIDogdHlwZSh0KSAgeyB9Ci0g
ICAgdmlydHVhbCBUSW50ZXJtVHlwZWQqIGdldEFzVHlwZWQoKSB7IHJldHVybiB0aGlzOyB9Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgaGFzU2lkZUVmZmVjdHMoKSBjb25zdCA9IDA7Ci0KLSAgICB2b2lk
IHNldFR5cGUoY29uc3QgVFR5cGUmIHQpIHsgdHlwZSA9IHQ7IH0KLSAgICBjb25zdCBUVHlwZSYg
Z2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGU7IH0KLSAgICBUVHlwZSogZ2V0VHlwZVBvaW50
ZXIoKSB7IHJldHVybiAmdHlwZTsgfQotCi0gICAgVEJhc2ljVHlwZSBnZXRCYXNpY1R5cGUoKSBj
b25zdCB7IHJldHVybiB0eXBlLmdldEJhc2ljVHlwZSgpOyB9Ci0gICAgVFF1YWxpZmllciBnZXRR
dWFsaWZpZXIoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldFF1YWxpZmllcigpOyB9Ci0gICAgVFBy
ZWNpc2lvbiBnZXRQcmVjaXNpb24oKSBjb25zdCB7IHJldHVybiB0eXBlLmdldFByZWNpc2lvbigp
OyB9Ci0gICAgaW50IGdldE5vbWluYWxTaXplKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXROb21p
bmFsU2l6ZSgpOyB9Ci0gICAgCi0gICAgYm9vbCBpc01hdHJpeCgpIGNvbnN0IHsgcmV0dXJuIHR5
cGUuaXNNYXRyaXgoKTsgfQotICAgIGJvb2wgaXNBcnJheSgpICBjb25zdCB7IHJldHVybiB0eXBl
LmlzQXJyYXkoKTsgfQotICAgIGJvb2wgaXNWZWN0b3IoKSBjb25zdCB7IHJldHVybiB0eXBlLmlz
VmVjdG9yKCk7IH0KLSAgICBib29sIGlzU2NhbGFyKCkgY29uc3QgeyByZXR1cm4gdHlwZS5pc1Nj
YWxhcigpOyB9Ci0gICAgY29uc3QgY2hhciogZ2V0QmFzaWNTdHJpbmcoKSBjb25zdCB7IHJldHVy
biB0eXBlLmdldEJhc2ljU3RyaW5nKCk7IH0KLSAgICBjb25zdCBjaGFyKiBnZXRRdWFsaWZpZXJT
dHJpbmcoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldFF1YWxpZmllclN0cmluZygpOyB9Ci0gICAg
VFN0cmluZyBnZXRDb21wbGV0ZVN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0Q29tcGxl
dGVTdHJpbmcoKTsgfQotCi0gICAgaW50IHRvdGFsUmVnaXN0ZXJDb3VudCgpIGNvbnN0IHsgcmV0
dXJuIHR5cGUudG90YWxSZWdpc3RlckNvdW50KCk7IH0KLSAgICBpbnQgZWxlbWVudFJlZ2lzdGVy
Q291bnQoKSBjb25zdCB7IHJldHVybiB0eXBlLmVsZW1lbnRSZWdpc3RlckNvdW50KCk7IH0KLSAg
ICBpbnQgZ2V0QXJyYXlTaXplKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRBcnJheVNpemUoKTsg
fQotCi1wcm90ZWN0ZWQ6Ci0gICAgVFR5cGUgdHlwZTsKLX07Ci0KLS8vCi0vLyBIYW5kbGUgZm9y
LCBkby13aGlsZSwgYW5kIHdoaWxlIGxvb3BzLgotLy8KLWVudW0gVExvb3BUeXBlIHsKLSAgICBF
TG9vcEZvciwKLSAgICBFTG9vcFdoaWxlLAotICAgIEVMb29wRG9XaGlsZQotfTsKLQotY2xhc3Mg
VEludGVybUxvb3AgOiBwdWJsaWMgVEludGVybU5vZGUgewotcHVibGljOgotICAgIFRJbnRlcm1M
b29wKFRMb29wVHlwZSBhVHlwZSwKLSAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSAqYUluaXQs
IFRJbnRlcm1UeXBlZCogYUNvbmQsIFRJbnRlcm1UeXBlZCogYUV4cHIsCi0gICAgICAgICAgICAg
ICAgVEludGVybU5vZGUqIGFCb2R5KSA6Ci0gICAgICAgICAgICB0eXBlKGFUeXBlKSwKLSAgICAg
ICAgICAgIGluaXQoYUluaXQpLAotICAgICAgICAgICAgY29uZChhQ29uZCksCi0gICAgICAgICAg
ICBleHByKGFFeHByKSwKLSAgICAgICAgICAgIGJvZHkoYUJvZHkpLAotICAgICAgICAgICAgdW5y
b2xsRmxhZyhmYWxzZSkgeyB9Ci0KLSAgICB2aXJ0dWFsIFRJbnRlcm1Mb29wKiBnZXRBc0xvb3BO
b2RlKCkgeyByZXR1cm4gdGhpczsgfQotICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJt
VHJhdmVyc2VyKik7Ci0gICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGlsZE5vZGUoCi0gICAgICAg
IFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KTsKLQotICAg
IFRMb29wVHlwZSBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZTsgfQotICAgIFRJbnRlcm1O
b2RlKiBnZXRJbml0KCkgeyByZXR1cm4gaW5pdDsgfQotICAgIFRJbnRlcm1UeXBlZCogZ2V0Q29u
ZGl0aW9uKCkgeyByZXR1cm4gY29uZDsgfQotICAgIFRJbnRlcm1UeXBlZCogZ2V0RXhwcmVzc2lv
bigpIHsgcmV0dXJuIGV4cHI7IH0KLSAgICBUSW50ZXJtTm9kZSogZ2V0Qm9keSgpIHsgcmV0dXJu
IGJvZHk7IH0KLQotICAgIHZvaWQgc2V0VW5yb2xsRmxhZyhib29sIGZsYWcpIHsgdW5yb2xsRmxh
ZyA9IGZsYWc7IH0KLSAgICBib29sIGdldFVucm9sbEZsYWcoKSB7IHJldHVybiB1bnJvbGxGbGFn
OyB9Ci0KLXByb3RlY3RlZDoKLSAgICBUTG9vcFR5cGUgdHlwZTsKLSAgICBUSW50ZXJtTm9kZSog
aW5pdDsgIC8vIGZvci1sb29wIGluaXRpYWxpemF0aW9uCi0gICAgVEludGVybVR5cGVkKiBjb25k
OyAvLyBsb29wIGV4aXQgY29uZGl0aW9uCi0gICAgVEludGVybVR5cGVkKiBleHByOyAvLyBmb3It
bG9vcCBleHByZXNzaW9uCi0gICAgVEludGVybU5vZGUqIGJvZHk7ICAvLyBsb29wIGJvZHkKLQot
ICAgIGJvb2wgdW5yb2xsRmxhZzsgLy8gV2hldGhlciB0aGUgbG9vcCBzaG91bGQgYmUgdW5yb2xs
ZWQgb3Igbm90LgotfTsKLQotLy8KLS8vIEhhbmRsZSBicmVhaywgY29udGludWUsIHJldHVybiwg
YW5kIGtpbGwuCi0vLwotY2xhc3MgVEludGVybUJyYW5jaCA6IHB1YmxpYyBUSW50ZXJtTm9kZSB7
Ci1wdWJsaWM6Ci0gICAgVEludGVybUJyYW5jaChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCog
ZSkgOgotICAgICAgICAgICAgZmxvd09wKG9wKSwKLSAgICAgICAgICAgIGV4cHJlc3Npb24oZSkg
eyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOwotICAg
IHZpcnR1YWwgYm9vbCByZXBsYWNlQ2hpbGROb2RlKAotICAgICAgICBUSW50ZXJtTm9kZSAqb3Jp
Z2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCk7Ci0KLSAgICBUT3BlcmF0b3IgZ2V0Rmxv
d09wKCkgeyByZXR1cm4gZmxvd09wOyB9Ci0gICAgVEludGVybVR5cGVkKiBnZXRFeHByZXNzaW9u
KCkgeyByZXR1cm4gZXhwcmVzc2lvbjsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgVE9wZXJhdG9yIGZs
b3dPcDsKLSAgICBUSW50ZXJtVHlwZWQqIGV4cHJlc3Npb247ICAvLyBub24temVybyBleGNlcHQg
Zm9yICJyZXR1cm4gZXhwOyIgc3RhdGVtZW50cwotfTsKLQotLy8KLS8vIE5vZGVzIHRoYXQgY29y
cmVzcG9uZCB0byBzeW1ib2xzIG9yIGNvbnN0YW50cyBpbiB0aGUgc291cmNlIGNvZGUuCi0vLwot
Y2xhc3MgVEludGVybVN5bWJvbCA6IHB1YmxpYyBUSW50ZXJtVHlwZWQgewotcHVibGljOgotICAg
IC8vIGlmIHN5bWJvbCBpcyBpbml0aWFsaXplZCBhcyBzeW1ib2woc3ltKSwgdGhlIG1lbW9yeSBj
b21lcyBmcm9tIHRoZSBwb29sYWxsb2NhdG9yIG9mIHN5bS4gSWYgc3ltIGNvbWVzIGZyb20KLSAg
ICAvLyBwZXIgcHJvY2VzcyBnbG9iYWxwb29sYWxsb2NhdG9yLCB0aGVuIGl0IGNhdXNlcyBpbmNy
ZWFzZWQgbWVtb3J5IHVzYWdlIHBlciBjb21waWxlCi0gICAgLy8gaXQgaXMgZXNzZW50aWFsIHRv
IHVzZSAic3ltYm9sID0gc3ltIiB0byBhc3NpZ24gdG8gc3ltYm9sCi0gICAgVEludGVybVN5bWJv
bChpbnQgaSwgY29uc3QgVFN0cmluZyYgc3ltLCBjb25zdCBUVHlwZSYgdCkgOiAKLSAgICAgICAg
ICAgIFRJbnRlcm1UeXBlZCh0KSwgaWQoaSkgIHsgc3ltYm9sID0gc3ltOyBvcmlnaW5hbFN5bWJv
bCA9IHN5bTsgfSAKLQotICAgIHZpcnR1YWwgYm9vbCBoYXNTaWRlRWZmZWN0cygpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9Ci0KLSAgICBpbnQgZ2V0SWQoKSBjb25zdCB7IHJldHVybiBpZDsgfQot
ICAgIGNvbnN0IFRTdHJpbmcmIGdldFN5bWJvbCgpIGNvbnN0IHsgcmV0dXJuIHN5bWJvbDsgfQot
Ci0gICAgdm9pZCBzZXRJZChpbnQgbmV3SWQpIHsgaWQgPSBuZXdJZDsgfQotICAgIHZvaWQgc2V0
U3ltYm9sKGNvbnN0IFRTdHJpbmcmIHN5bSkgeyBzeW1ib2wgPSBzeW07IH0KLQotICAgIGNvbnN0
IFRTdHJpbmcmIGdldE9yaWdpbmFsU3ltYm9sKCkgY29uc3QgeyByZXR1cm4gb3JpZ2luYWxTeW1i
b2w7IH0KLQotICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7Ci0g
ICAgdmlydHVhbCBUSW50ZXJtU3ltYm9sKiBnZXRBc1N5bWJvbE5vZGUoKSB7IHJldHVybiB0aGlz
OyB9Ci0gICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGlsZE5vZGUoVEludGVybU5vZGUgKiwgVElu
dGVybU5vZGUgKikgeyByZXR1cm4gZmFsc2U7IH0KLQotcHJvdGVjdGVkOgotICAgIGludCBpZDsK
LSAgICBUU3RyaW5nIHN5bWJvbDsKLSAgICBUU3RyaW5nIG9yaWdpbmFsU3ltYm9sOwotfTsKLQot
Y2xhc3MgVEludGVybUNvbnN0YW50VW5pb24gOiBwdWJsaWMgVEludGVybVR5cGVkIHsKLXB1Ymxp
YzoKLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbihDb25zdGFudFVuaW9uICp1bmlvblBvaW50ZXIs
IGNvbnN0IFRUeXBlJiB0KSA6IFRJbnRlcm1UeXBlZCh0KSwgdW5pb25BcnJheVBvaW50ZXIodW5p
b25Qb2ludGVyKSB7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBoYXNTaWRlRWZmZWN0cygpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICBDb25zdGFudFVuaW9uKiBnZXRVbmlvbkFycmF5UG9p
bnRlcigpIGNvbnN0IHsgcmV0dXJuIHVuaW9uQXJyYXlQb2ludGVyOyB9Ci0gICAgCi0gICAgaW50
IGdldElDb25zdChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIHVuaW9uQXJyYXlQb2ludGVyID8g
dW5pb25BcnJheVBvaW50ZXJbaW5kZXhdLmdldElDb25zdCgpIDogMDsgfQotICAgIGZsb2F0IGdl
dEZDb25zdChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIHVuaW9uQXJyYXlQb2ludGVyID8gdW5p
b25BcnJheVBvaW50ZXJbaW5kZXhdLmdldEZDb25zdCgpIDogMC4wZjsgfQotICAgIGJvb2wgZ2V0
QkNvbnN0KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gdW5pb25BcnJheVBvaW50ZXIgPyB1bmlv
bkFycmF5UG9pbnRlcltpbmRleF0uZ2V0QkNvbnN0KCkgOiBmYWxzZTsgfQotCi0gICAgdmlydHVh
bCBUSW50ZXJtQ29uc3RhbnRVbmlvbiogZ2V0QXNDb25zdGFudFVuaW9uKCkgIHsgcmV0dXJuIHRo
aXM7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOwotICAg
IHZpcnR1YWwgYm9vbCByZXBsYWNlQ2hpbGROb2RlKFRJbnRlcm1Ob2RlICosIFRJbnRlcm1Ob2Rl
ICopIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICBUSW50ZXJtVHlwZWQqIGZvbGQoVE9wZXJhdG9y
LCBUSW50ZXJtVHlwZWQqLCBUSW5mb1NpbmsmKTsKLQotcHJvdGVjdGVkOgotICAgIENvbnN0YW50
VW5pb24gKnVuaW9uQXJyYXlQb2ludGVyOwotfTsKLQotLy8KLS8vIEludGVybWVkaWF0ZSBjbGFz
cyBmb3Igbm9kZSB0eXBlcyB0aGF0IGhvbGQgb3BlcmF0b3JzLgotLy8KLWNsYXNzIFRJbnRlcm1P
cGVyYXRvciA6IHB1YmxpYyBUSW50ZXJtVHlwZWQgewotcHVibGljOgotICAgIFRPcGVyYXRvciBn
ZXRPcCgpIGNvbnN0IHsgcmV0dXJuIG9wOyB9Ci0gICAgdm9pZCBzZXRPcChUT3BlcmF0b3Igbykg
eyBvcCA9IG87IH0KLQotICAgIGJvb2wgaXNBc3NpZ25tZW50KCkgY29uc3Q7Ci0gICAgYm9vbCBp
c0NvbnN0cnVjdG9yKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaGFzU2lkZUVmZmVjdHMo
KSBjb25zdCB7IHJldHVybiBpc0Fzc2lnbm1lbnQoKTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgVElu
dGVybU9wZXJhdG9yKFRPcGVyYXRvciBvKSA6IFRJbnRlcm1UeXBlZChUVHlwZShFYnRGbG9hdCwg
RWJwVW5kZWZpbmVkKSksIG9wKG8pIHt9Ci0gICAgVEludGVybU9wZXJhdG9yKFRPcGVyYXRvciBv
LCBUVHlwZSYgdCkgOiBUSW50ZXJtVHlwZWQodCksIG9wKG8pIHt9ICAgCi0gICAgVE9wZXJhdG9y
IG9wOwotfTsKLQotLy8KLS8vIE5vZGVzIGZvciBhbGwgdGhlIGJhc2ljIGJpbmFyeSBtYXRoIG9w
ZXJhdG9ycy4KLS8vCi1jbGFzcyBUSW50ZXJtQmluYXJ5IDogcHVibGljIFRJbnRlcm1PcGVyYXRv
ciB7Ci1wdWJsaWM6Ci0gICAgVEludGVybUJpbmFyeShUT3BlcmF0b3IgbykgOiBUSW50ZXJtT3Bl
cmF0b3IobyksIGFkZEluZGV4Q2xhbXAoZmFsc2UpIHt9Ci0KLSAgICB2aXJ0dWFsIFRJbnRlcm1C
aW5hcnkqIGdldEFzQmluYXJ5Tm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOwotICAgIHZpcnR1YWwgYm9vbCByZXBsYWNl
Q2hpbGROb2RlKAotICAgICAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpy
ZXBsYWNlbWVudCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaGFzU2lkZUVmZmVjdHMoKSBjb25zdCB7
IHJldHVybiAoaXNBc3NpZ25tZW50KCkgfHwgbGVmdC0+aGFzU2lkZUVmZmVjdHMoKSB8fCByaWdo
dC0+aGFzU2lkZUVmZmVjdHMoKSk7IH0KLQotICAgIHZvaWQgc2V0TGVmdChUSW50ZXJtVHlwZWQq
IG4pIHsgbGVmdCA9IG47IH0KLSAgICB2b2lkIHNldFJpZ2h0KFRJbnRlcm1UeXBlZCogbikgeyBy
aWdodCA9IG47IH0KLSAgICBUSW50ZXJtVHlwZWQqIGdldExlZnQoKSBjb25zdCB7IHJldHVybiBs
ZWZ0OyB9Ci0gICAgVEludGVybVR5cGVkKiBnZXRSaWdodCgpIGNvbnN0IHsgcmV0dXJuIHJpZ2h0
OyB9Ci0gICAgYm9vbCBwcm9tb3RlKFRJbmZvU2luayYpOwotCi0gICAgdm9pZCBzZXRBZGRJbmRl
eENsYW1wKCkgeyBhZGRJbmRleENsYW1wID0gdHJ1ZTsgfQotICAgIGJvb2wgZ2V0QWRkSW5kZXhD
bGFtcCgpIHsgcmV0dXJuIGFkZEluZGV4Q2xhbXA7IH0KLQotcHJvdGVjdGVkOgotICAgIFRJbnRl
cm1UeXBlZCogbGVmdDsKLSAgICBUSW50ZXJtVHlwZWQqIHJpZ2h0OwotCi0gICAgLy8gSWYgc2V0
IHRvIHRydWUsIHdyYXAgYW55IEVPcEluZGV4SW5kaXJlY3Qgd2l0aCBhIGNsYW1wIHRvIGJvdW5k
cy4KLSAgICBib29sIGFkZEluZGV4Q2xhbXA7Ci19OwotCi0vLwotLy8gTm9kZXMgZm9yIHVuYXJ5
IG1hdGggb3BlcmF0b3JzLgotLy8KLWNsYXNzIFRJbnRlcm1VbmFyeSA6IHB1YmxpYyBUSW50ZXJt
T3BlcmF0b3IgewotcHVibGljOgotICAgIFRJbnRlcm1VbmFyeShUT3BlcmF0b3IgbywgVFR5cGUm
IHQpIDogVEludGVybU9wZXJhdG9yKG8sIHQpLCBvcGVyYW5kKDApLCB1c2VFbXVsYXRlZEZ1bmN0
aW9uKGZhbHNlKSB7fQotICAgIFRJbnRlcm1VbmFyeShUT3BlcmF0b3IgbykgOiBUSW50ZXJtT3Bl
cmF0b3IobyksIG9wZXJhbmQoMCksIHVzZUVtdWxhdGVkRnVuY3Rpb24oZmFsc2UpIHt9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOwotICAgIHZpcnR1YWwg
VEludGVybVVuYXJ5KiBnZXRBc1VuYXJ5Tm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgcmVwbGFjZUNoaWxkTm9kZSgKLSAgICAgICAgVEludGVybU5vZGUgKm9yaWdpbmFs
LCBUSW50ZXJtTm9kZSAqcmVwbGFjZW1lbnQpOwotCi0gICAgdmlydHVhbCBib29sIGhhc1NpZGVF
ZmZlY3RzKCkgY29uc3QgeyByZXR1cm4gKGlzQXNzaWdubWVudCgpIHx8IG9wZXJhbmQtPmhhc1Np
ZGVFZmZlY3RzKCkpOyB9Ci0KLSAgICB2b2lkIHNldE9wZXJhbmQoVEludGVybVR5cGVkKiBvKSB7
IG9wZXJhbmQgPSBvOyB9Ci0gICAgVEludGVybVR5cGVkKiBnZXRPcGVyYW5kKCkgeyByZXR1cm4g
b3BlcmFuZDsgfSAgICAKLSAgICBib29sIHByb21vdGUoVEluZm9TaW5rJik7Ci0KLSAgICB2b2lk
IHNldFVzZUVtdWxhdGVkRnVuY3Rpb24oKSB7IHVzZUVtdWxhdGVkRnVuY3Rpb24gPSB0cnVlOyB9
Ci0gICAgYm9vbCBnZXRVc2VFbXVsYXRlZEZ1bmN0aW9uKCkgeyByZXR1cm4gdXNlRW11bGF0ZWRG
dW5jdGlvbjsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgVEludGVybVR5cGVkKiBvcGVyYW5kOwotCi0g
ICAgLy8gSWYgc2V0IHRvIHRydWUsIHJlcGxhY2UgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGNhbGwg
d2l0aCBhbiBlbXVsYXRlZCBvbmUKLSAgICAvLyB0byB3b3JrIGFyb3VuZCBkcml2ZXIgYnVncy4K
LSAgICBib29sIHVzZUVtdWxhdGVkRnVuY3Rpb247Ci19OwotCi10eXBlZGVmIFRWZWN0b3I8VElu
dGVybU5vZGUqPiBUSW50ZXJtU2VxdWVuY2U7Ci10eXBlZGVmIFRWZWN0b3I8aW50PiBUUXVhbGlm
aWVyTGlzdDsKLQotLy8KLS8vIE5vZGVzIHRoYXQgb3BlcmF0ZSBvbiBhbiBhcmJpdHJhcnkgc2l6
ZWQgc2V0IG9mIGNoaWxkcmVuLgotLy8KLWNsYXNzIFRJbnRlcm1BZ2dyZWdhdGUgOiBwdWJsaWMg
VEludGVybU9wZXJhdG9yIHsKLXB1YmxpYzoKLSAgICBUSW50ZXJtQWdncmVnYXRlKCkgOiBUSW50
ZXJtT3BlcmF0b3IoRU9wTnVsbCksIHVzZXJEZWZpbmVkKGZhbHNlKSwgdXNlRW11bGF0ZWRGdW5j
dGlvbihmYWxzZSkgeyB9Ci0gICAgVEludGVybUFnZ3JlZ2F0ZShUT3BlcmF0b3IgbykgOiBUSW50
ZXJtT3BlcmF0b3IobyksIHVzZUVtdWxhdGVkRnVuY3Rpb24oZmFsc2UpIHsgfQotICAgIH5USW50
ZXJtQWdncmVnYXRlKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIFRJbnRlcm1BZ2dyZWdhdGUqIGdldEFz
QWdncmVnYXRlKCkgeyByZXR1cm4gdGhpczsgfQotICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShU
SW50ZXJtVHJhdmVyc2VyKik7Ci0gICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGlsZE5vZGUoCi0g
ICAgICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KTsK
LQotICAgIC8vIENvbnNlcnZhdGl2ZWx5IGFzc3VtZSBmdW5jdGlvbiBjYWxscyBhbmQgb3RoZXIg
YWdncmVnYXRlIG9wZXJhdG9ycyBoYXZlIHNpZGUtZWZmZWN0cwotICAgIHZpcnR1YWwgYm9vbCBo
YXNTaWRlRWZmZWN0cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIFRJbnRlcm1TZXF1
ZW5jZSYgZ2V0U2VxdWVuY2UoKSB7IHJldHVybiBzZXF1ZW5jZTsgfQotCi0gICAgdm9pZCBzZXRO
YW1lKGNvbnN0IFRTdHJpbmcmIG4pIHsgbmFtZSA9IG47IH0KLSAgICBjb25zdCBUU3RyaW5nJiBn
ZXROYW1lKCkgY29uc3QgeyByZXR1cm4gbmFtZTsgfQotCi0gICAgdm9pZCBzZXRVc2VyRGVmaW5l
ZCgpIHsgdXNlckRlZmluZWQgPSB0cnVlOyB9Ci0gICAgYm9vbCBpc1VzZXJEZWZpbmVkKCkgY29u
c3QgeyByZXR1cm4gdXNlckRlZmluZWQ7IH0KLQotICAgIHZvaWQgc2V0T3B0aW1pemUoYm9vbCBv
KSB7IG9wdGltaXplID0gbzsgfQotICAgIGJvb2wgZ2V0T3B0aW1pemUoKSB7IHJldHVybiBvcHRp
bWl6ZTsgfQotICAgIHZvaWQgc2V0RGVidWcoYm9vbCBkKSB7IGRlYnVnID0gZDsgfQotICAgIGJv
b2wgZ2V0RGVidWcoKSB7IHJldHVybiBkZWJ1ZzsgfQotCi0gICAgdm9pZCBzZXRVc2VFbXVsYXRl
ZEZ1bmN0aW9uKCkgeyB1c2VFbXVsYXRlZEZ1bmN0aW9uID0gdHJ1ZTsgfQotICAgIGJvb2wgZ2V0
VXNlRW11bGF0ZWRGdW5jdGlvbigpIHsgcmV0dXJuIHVzZUVtdWxhdGVkRnVuY3Rpb247IH0KLQot
cHJvdGVjdGVkOgotICAgIFRJbnRlcm1BZ2dyZWdhdGUoY29uc3QgVEludGVybUFnZ3JlZ2F0ZSYp
OyAvLyBkaXNhbGxvdyBjb3B5IGNvbnN0cnVjdG9yCi0gICAgVEludGVybUFnZ3JlZ2F0ZSYgb3Bl
cmF0b3I9KGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUmKTsgLy8gZGlzYWxsb3cgYXNzaWdubWVudCBv
cGVyYXRvcgotICAgIFRJbnRlcm1TZXF1ZW5jZSBzZXF1ZW5jZTsKLSAgICBUU3RyaW5nIG5hbWU7
Ci0gICAgYm9vbCB1c2VyRGVmaW5lZDsgLy8gdXNlZCBmb3IgdXNlciBkZWZpbmVkIGZ1bmN0aW9u
IG5hbWVzCi0KLSAgICBib29sIG9wdGltaXplOwotICAgIGJvb2wgZGVidWc7Ci0KLSAgICAvLyBJ
ZiBzZXQgdG8gdHJ1ZSwgcmVwbGFjZSB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gY2FsbCB3aXRoIGFu
IGVtdWxhdGVkIG9uZQotICAgIC8vIHRvIHdvcmsgYXJvdW5kIGRyaXZlciBidWdzLgotICAgIGJv
b2wgdXNlRW11bGF0ZWRGdW5jdGlvbjsKLX07Ci0KLS8vCi0vLyBGb3IgaWYgdGVzdHMuICBTaW1w
bGlmaWVkIHNpbmNlIHRoZXJlIGlzIG5vIHN3aXRjaCBzdGF0ZW1lbnQuCi0vLwotY2xhc3MgVElu
dGVybVNlbGVjdGlvbiA6IHB1YmxpYyBUSW50ZXJtVHlwZWQgewotcHVibGljOgotICAgIFRJbnRl
cm1TZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtTm9kZSogdHJ1ZUIsIFRJbnRl
cm1Ob2RlKiBmYWxzZUIpIDoKLSAgICAgICAgICAgIFRJbnRlcm1UeXBlZChUVHlwZShFYnRWb2lk
LCBFYnBVbmRlZmluZWQpKSwgY29uZGl0aW9uKGNvbmQpLCB0cnVlQmxvY2sodHJ1ZUIpLCBmYWxz
ZUJsb2NrKGZhbHNlQikge30KLSAgICBUSW50ZXJtU2VsZWN0aW9uKFRJbnRlcm1UeXBlZCogY29u
ZCwgVEludGVybU5vZGUqIHRydWVCLCBUSW50ZXJtTm9kZSogZmFsc2VCLCBjb25zdCBUVHlwZSYg
dHlwZSkgOgotICAgICAgICAgICAgVEludGVybVR5cGVkKHR5cGUpLCBjb25kaXRpb24oY29uZCks
IHRydWVCbG9jayh0cnVlQiksIGZhbHNlQmxvY2soZmFsc2VCKSB7fQotCi0gICAgdmlydHVhbCB2
b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKLSAgICB2aXJ0dWFsIGJvb2wgcmVwbGFj
ZUNoaWxkTm9kZSgKLSAgICAgICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAq
cmVwbGFjZW1lbnQpOwotCi0gICAgLy8gQ29uc2VydmF0aXZlbHkgYXNzdW1lIHNlbGVjdGlvbnMg
aGF2ZSBzaWRlLWVmZmVjdHMKLSAgICB2aXJ0dWFsIGJvb2wgaGFzU2lkZUVmZmVjdHMoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBib29sIHVzZXNUZXJuYXJ5T3BlcmF0b3IoKSBjb25z
dCB7IHJldHVybiBnZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkOyB9Ci0gICAgVEludGVybU5vZGUq
IGdldENvbmRpdGlvbigpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbjsgfQotICAgIFRJbnRlcm1O
b2RlKiBnZXRUcnVlQmxvY2soKSBjb25zdCB7IHJldHVybiB0cnVlQmxvY2s7IH0KLSAgICBUSW50
ZXJtTm9kZSogZ2V0RmFsc2VCbG9jaygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlQmxvY2s7IH0KLSAg
ICBUSW50ZXJtU2VsZWN0aW9uKiBnZXRBc1NlbGVjdGlvbk5vZGUoKSB7IHJldHVybiB0aGlzOyB9
Ci0KLXByb3RlY3RlZDoKLSAgICBUSW50ZXJtVHlwZWQqIGNvbmRpdGlvbjsKLSAgICBUSW50ZXJt
Tm9kZSogdHJ1ZUJsb2NrOwotICAgIFRJbnRlcm1Ob2RlKiBmYWxzZUJsb2NrOwotfTsKLQotZW51
bSBWaXNpdAotewotICAgIFByZVZpc2l0LAotICAgIEluVmlzaXQsCi0gICAgUG9zdFZpc2l0Ci19
OwotCi0vLwotLy8gRm9yIHRyYXZlcnNpbmcgdGhlIHRyZWUuICBVc2VyIHNob3VsZCBkZXJpdmUg
ZnJvbSB0aGlzLCAKLS8vIHB1dCB0aGVpciB0cmF2ZXJzYWwgc3BlY2lmaWMgZGF0YSBpbiBpdCwg
YW5kIHRoZW4gcGFzcwotLy8gaXQgdG8gYSBUcmF2ZXJzZSBtZXRob2QuCi0vLwotLy8gV2hlbiB1
c2luZyB0aGlzLCBqdXN0IGZpbGwgaW4gdGhlIG1ldGhvZHMgZm9yIG5vZGVzIHlvdSB3YW50IHZp
c2l0ZWQuCi0vLyBSZXR1cm4gZmFsc2UgZnJvbSBhIHByZS12aXNpdCB0byBza2lwIHZpc2l0aW5n
IHRoYXQgbm9kZSdzIHN1YnRyZWUuCi0vLwotY2xhc3MgVEludGVybVRyYXZlcnNlcgotewotcHVi
bGljOgotICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKLSAgICBUSW50ZXJtVHJhdmVy
c2VyKGJvb2wgcHJlVmlzaXQgPSB0cnVlLCBib29sIGluVmlzaXQgPSBmYWxzZSwgYm9vbCBwb3N0
VmlzaXQgPSBmYWxzZSwgYm9vbCByaWdodFRvTGVmdCA9IGZhbHNlKSA6IAotICAgICAgICAgICAg
cHJlVmlzaXQocHJlVmlzaXQpLAotICAgICAgICAgICAgaW5WaXNpdChpblZpc2l0KSwKLSAgICAg
ICAgICAgIHBvc3RWaXNpdChwb3N0VmlzaXQpLAotICAgICAgICAgICAgcmlnaHRUb0xlZnQocmln
aHRUb0xlZnQpLAotICAgICAgICAgICAgZGVwdGgoMCksCi0gICAgICAgICAgICBtYXhEZXB0aCgw
KSB7fQotICAgIHZpcnR1YWwgflRJbnRlcm1UcmF2ZXJzZXIoKSB7fQotCi0gICAgdmlydHVhbCB2
b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKSB7fQotICAgIHZpcnR1YWwgdm9pZCB2aXNp
dENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qKSB7fQotICAgIHZpcnR1YWwgYm9v
bCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSopIHtyZXR1cm4gdHJ1ZTt9
Ci0gICAgdmlydHVhbCBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSop
IHtyZXR1cm4gdHJ1ZTt9Ci0gICAgdmlydHVhbCBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZp
c2l0LCBUSW50ZXJtU2VsZWN0aW9uKikge3JldHVybiB0cnVlO30KLSAgICB2aXJ0dWFsIGJvb2wg
dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKSB7cmV0dXJuIHRy
dWU7fQotICAgIHZpcnR1YWwgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29w
Kikge3JldHVybiB0cnVlO30KLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlz
aXQsIFRJbnRlcm1CcmFuY2gqKSB7cmV0dXJuIHRydWU7fQotCi0gICAgaW50IGdldE1heERlcHRo
KCkgY29uc3Qge3JldHVybiBtYXhEZXB0aDt9Ci0KLSAgICB2b2lkIGluY3JlbWVudERlcHRoKFRJ
bnRlcm1Ob2RlICpjdXJyZW50KQotICAgIHsKLSAgICAgICAgZGVwdGgrKzsKLSAgICAgICAgbWF4
RGVwdGggPSBzdGQ6Om1heChtYXhEZXB0aCwgZGVwdGgpOwotICAgICAgICBwYXRoLnB1c2hfYmFj
ayhjdXJyZW50KTsKLSAgICB9Ci0KLSAgICB2b2lkIGRlY3JlbWVudERlcHRoKCkKLSAgICB7Ci0g
ICAgICAgIGRlcHRoLS07Ci0gICAgICAgIHBhdGgucG9wX2JhY2soKTsKLSAgICB9Ci0KLSAgICBU
SW50ZXJtTm9kZSAqZ2V0UGFyZW50Tm9kZSgpCi0gICAgewotICAgICAgICByZXR1cm4gcGF0aC5z
aXplKCkgPT0gMCA/IE5VTEwgOiBwYXRoLmJhY2soKTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4g
dGhlIG9yaWdpbmFsIG5hbWUgaWYgaGFzaCBmdW5jdGlvbiBwb2ludGVyIGlzIE5VTEw7Ci0gICAg
Ly8gb3RoZXJ3aXNlIHJldHVybiB0aGUgaGFzaGVkIG5hbWUuCi0gICAgc3RhdGljIFRTdHJpbmcg
aGFzaChjb25zdCBUU3RyaW5nJiBuYW1lLCBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbik7
Ci0KLSAgICBjb25zdCBib29sIHByZVZpc2l0OwotICAgIGNvbnN0IGJvb2wgaW5WaXNpdDsKLSAg
ICBjb25zdCBib29sIHBvc3RWaXNpdDsKLSAgICBjb25zdCBib29sIHJpZ2h0VG9MZWZ0OwotCi1w
cm90ZWN0ZWQ6Ci0gICAgaW50IGRlcHRoOwotICAgIGludCBtYXhEZXB0aDsKLQotICAgIC8vIEFs
bCB0aGUgbm9kZXMgZnJvbSByb290IHRvIHRoZSBjdXJyZW50IG5vZGUncyBwYXJlbnQgZHVyaW5n
IHRyYXZlcnNpbmcuCi0gICAgVFZlY3RvcjxUSW50ZXJtTm9kZSAqPiBwYXRoOwotfTsKLQotI2Vu
ZGlmIC8vIF9fSU5URVJNRURJQVRFX0gKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9sb2NhbGludGVybWVkaWF0ZS5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2xvY2FsaW50ZXJtZWRpYXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGNjYmM0MDE3OGFjZjYzZWU0YjNkYzE1NzdkZTNjNzBiYjNhM2EzN2EuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2xvY2FsaW50ZXJtZWRpYXRlLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw1NyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIF9MT0NBTF9J
TlRFUk1FRElBVEVfSU5DTFVERURfCi0jZGVmaW5lIF9MT0NBTF9JTlRFUk1FRElBVEVfSU5DTFVE
RURfCi0KLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLSNpbmNsdWRlICJjb21waWxl
ci9pbnRlcm1lZGlhdGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5oIgotCi1z
dHJ1Y3QgVFZlY3RvckZpZWxkcyB7Ci0gICAgaW50IG9mZnNldHNbNF07Ci0gICAgaW50IG51bTsK
LX07Ci0KLS8vCi0vLyBTZXQgb2YgaGVscGVyIGZ1bmN0aW9ucyB0byBoZWxwIHBhcnNlIGFuZCBi
dWlsZCB0aGUgdHJlZS4KLS8vCi1jbGFzcyBUSW5mb1Npbms7Ci1jbGFzcyBUSW50ZXJtZWRpYXRl
IHsKLXB1YmxpYzogICAgCi0gICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSgpOwotICAgIFRJ
bnRlcm1lZGlhdGUoVEluZm9TaW5rJiBpKSA6IGluZm9TaW5rKGkpIHsgfQotCi0gICAgVEludGVy
bVN5bWJvbCogYWRkU3ltYm9sKGludCBJZCwgY29uc3QgVFN0cmluZyYsIGNvbnN0IFRUeXBlJiwg
Y29uc3QgVFNvdXJjZUxvYyYpOwotICAgIFRJbnRlcm1UeXBlZCogYWRkQ29udmVyc2lvbihUT3Bl
cmF0b3IsIGNvbnN0IFRUeXBlJiwgVEludGVybVR5cGVkKik7Ci0gICAgVEludGVybVR5cGVkKiBh
ZGRCaW5hcnlNYXRoKFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBsZWZ0LCBUSW50ZXJtVHlw
ZWQqIHJpZ2h0LCBjb25zdCBUU291cmNlTG9jJiwgVFN5bWJvbFRhYmxlJik7Ci0gICAgVEludGVy
bVR5cGVkKiBhZGRBc3NpZ24oVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRl
cm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmKTsKLSAgICBUSW50ZXJtVHlwZWQqIGFk
ZEluZGV4KFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBiYXNlLCBUSW50ZXJtVHlwZWQqIGlu
ZGV4LCBjb25zdCBUU291cmNlTG9jJik7Ci0gICAgVEludGVybVR5cGVkKiBhZGRVbmFyeU1hdGgo
VE9wZXJhdG9yIG9wLCBUSW50ZXJtTm9kZSogY2hpbGQsIGNvbnN0IFRTb3VyY2VMb2MmLCBUU3lt
Ym9sVGFibGUmKTsKLSAgICBUSW50ZXJtQWdncmVnYXRlKiBncm93QWdncmVnYXRlKFRJbnRlcm1O
b2RlKiBsZWZ0LCBUSW50ZXJtTm9kZSogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmKTsKLSAgICBU
SW50ZXJtQWdncmVnYXRlKiBtYWtlQWdncmVnYXRlKFRJbnRlcm1Ob2RlKiBub2RlLCBjb25zdCBU
U291cmNlTG9jJik7Ci0gICAgVEludGVybUFnZ3JlZ2F0ZSogc2V0QWdncmVnYXRlT3BlcmF0b3Io
VEludGVybU5vZGUqLCBUT3BlcmF0b3IsIGNvbnN0IFRTb3VyY2VMb2MmKTsKLSAgICBUSW50ZXJt
Tm9kZSogIGFkZFNlbGVjdGlvbihUSW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1Ob2RlUGFpciBj
b2RlLCBjb25zdCBUU291cmNlTG9jJik7Ci0gICAgVEludGVybVR5cGVkKiBhZGRTZWxlY3Rpb24o
VEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtVHlwZWQqIHRydWVCbG9jaywgVEludGVybVR5cGVk
KiBmYWxzZUJsb2NrLCBjb25zdCBUU291cmNlTG9jJik7Ci0gICAgVEludGVybVR5cGVkKiBhZGRD
b21tYShUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3Vy
Y2VMb2MmKTsKLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogYWRkQ29uc3RhbnRVbmlvbihDb25z
dGFudFVuaW9uKiwgY29uc3QgVFR5cGUmLCBjb25zdCBUU291cmNlTG9jJik7Ci0gICAgVEludGVy
bVR5cGVkKiBwcm9tb3RlQ29uc3RhbnRVbmlvbihUQmFzaWNUeXBlLCBUSW50ZXJtQ29uc3RhbnRV
bmlvbiopIDsKLSAgICBib29sIHBhcnNlQ29uc3RUcmVlKGNvbnN0IFRTb3VyY2VMb2MmLCBUSW50
ZXJtTm9kZSosIENvbnN0YW50VW5pb24qLCBUT3BlcmF0b3IsIFRTeW1ib2xUYWJsZSYsIFRUeXBl
LCBib29sIHNpbmdsZUNvbnN0YW50UGFyYW0gPSBmYWxzZSk7ICAgICAgICAKLSAgICBUSW50ZXJt
Tm9kZSogYWRkTG9vcChUTG9vcFR5cGUsIFRJbnRlcm1Ob2RlKiwgVEludGVybVR5cGVkKiwgVElu
dGVybVR5cGVkKiwgVEludGVybU5vZGUqLCBjb25zdCBUU291cmNlTG9jJik7Ci0gICAgVEludGVy
bUJyYW5jaCogYWRkQnJhbmNoKFRPcGVyYXRvciwgY29uc3QgVFNvdXJjZUxvYyYpOwotICAgIFRJ
bnRlcm1CcmFuY2gqIGFkZEJyYW5jaChUT3BlcmF0b3IsIFRJbnRlcm1UeXBlZCosIGNvbnN0IFRT
b3VyY2VMb2MmKTsKLSAgICBUSW50ZXJtVHlwZWQqIGFkZFN3aXp6bGUoVFZlY3RvckZpZWxkcyYs
IGNvbnN0IFRTb3VyY2VMb2MmKTsKLSAgICBib29sIHBvc3RQcm9jZXNzKFRJbnRlcm1Ob2RlKik7
Ci0gICAgdm9pZCByZW1vdmUoVEludGVybU5vZGUqKTsKLSAgICB2b2lkIG91dHB1dFRyZWUoVElu
dGVybU5vZGUqKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIG9wZXJhdG9yPShUSW50ZXJtZWRpYXRl
Jik7IC8vIHByZXZlbnQgYXNzaWdubWVudHMKLQotICAgIFRJbmZvU2luayYgaW5mb1Npbms7Ci19
OwotCi0jZW5kaWYgLy8gX0xPQ0FMX0lOVEVSTUVESUFURV9JTkNMVURFRF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9vc2luY2x1ZGUuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9vc2luY2x1ZGUuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZDhiYjFhNzk3YzRkOGQ5MmZkNjM1NDJhOWUxOTVkZTUwZGYwNjg4
Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3NpbmNsdWRlLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw2NSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIF9fT1NJTkNMVURF
X0gKLSNkZWZpbmUgX19PU0lOQ0xVREVfSAotCi0vLwotLy8gVGhpcyBmaWxlIGNvbnRhaW5zIGNv
bnRhaW5zIG9zLXNwZWNpZmljIGRhdGF0eXBlcyBhbmQKLS8vIGRlY2xhcmVzIGFueSBvcy1zcGVj
aWZpYyBmdW5jdGlvbnMuCi0vLwotCi0jaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX1dJ
TjY0KQotI2RlZmluZSBBTkdMRV9PU19XSU4KLSNlbGlmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBk
ZWZpbmVkKF9fbGludXhfXykgfHwgXAotICAgICAgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVm
aW5lZChfX09wZW5CU0RfXykgfHwgXAotICAgICAgZGVmaW5lZChfX3N1bikgfHwgZGVmaW5lZChB
TkRST0lEKSB8fCBcCi0gICAgICBkZWZpbmVkKF9fR0xJQkNfXykgfHwgZGVmaW5lZChfX0dOVV9f
KSB8fCBcCi0gICAgICBkZWZpbmVkKF9fUU5YX18pCi0jZGVmaW5lIEFOR0xFX09TX1BPU0lYCi0j
ZWxzZQotI2Vycm9yIFVuc3VwcG9ydGVkIHBsYXRmb3JtLgotI2VuZGlmCi0KLSNpZiBkZWZpbmVk
KEFOR0xFX09TX1dJTikKLSNkZWZpbmUgU1RSSUNUCi0jZGVmaW5lIFZDX0VYVFJBTEVBTiAxCi0j
aW5jbHVkZSA8d2luZG93cy5oPgotI2VsaWYgZGVmaW5lZChBTkdMRV9PU19QT1NJWCkKLSNpbmNs
dWRlIDxwdGhyZWFkLmg+Ci0jaW5jbHVkZSA8c2VtYXBob3JlLmg+Ci0jaW5jbHVkZSA8ZXJybm8u
aD4KLSNlbmRpZiAgLy8gQU5HTEVfT1NfV0lOCi0KLQotI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVn
LmgiCi0KLS8vCi0vLyBUaHJlYWQgTG9jYWwgU3RvcmFnZSBPcGVyYXRpb25zCi0vLwotI2lmIGRl
ZmluZWQoQU5HTEVfT1NfV0lOKQotdHlwZWRlZiBEV09SRCBPU19UTFNJbmRleDsKLSNkZWZpbmUg
T1NfSU5WQUxJRF9UTFNfSU5ERVggKFRMU19PVVRfT0ZfSU5ERVhFUykKLSNlbGlmIGRlZmluZWQo
QU5HTEVfT1NfUE9TSVgpCi10eXBlZGVmIHB0aHJlYWRfa2V5X3QgT1NfVExTSW5kZXg7Ci0jZGVm
aW5lIE9TX0lOVkFMSURfVExTX0lOREVYIChzdGF0aWNfY2FzdDxPU19UTFNJbmRleD4oLTEpKQot
I2VuZGlmICAvLyBBTkdMRV9PU19XSU4KLQotT1NfVExTSW5kZXggT1NfQWxsb2NUTFNJbmRleCgp
OwotYm9vbCBPU19TZXRUTFNWYWx1ZShPU19UTFNJbmRleCBuSW5kZXgsIHZvaWQgKmxwdlZhbHVl
KTsKLWJvb2wgT1NfRnJlZVRMU0luZGV4KE9TX1RMU0luZGV4IG5JbmRleCk7Ci0KLWlubGluZSB2
b2lkKiBPU19HZXRUTFNWYWx1ZShPU19UTFNJbmRleCBuSW5kZXgpCi17Ci0gICAgQVNTRVJUKG5J
bmRleCAhPSBPU19JTlZBTElEX1RMU19JTkRFWCk7Ci0jaWYgZGVmaW5lZChBTkdMRV9PU19XSU4p
Ci0gICAgcmV0dXJuIFRsc0dldFZhbHVlKG5JbmRleCk7Ci0jZWxpZiBkZWZpbmVkKEFOR0xFX09T
X1BPU0lYKQotICAgIHJldHVybiBwdGhyZWFkX2dldHNwZWNpZmljKG5JbmRleCk7Ci0jZW5kaWYg
IC8vIEFOR0xFX09TX1dJTgotfQotCi0jZW5kaWYgLy8gX19PU0lOQ0xVREVfSApkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL29zc291cmNlX3Bvc2l4LmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9vc3NvdXJjZV9wb3NpeC5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlMWU2OTlhZWJjM2EyN2JhM2RhMTdl
ZTgxMzE1ZGM2NjJiOTk4ZTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL29zc291cmNlX3Bv
c2l4LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLS8vCi0vLyBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHBvc2l4IHNwZWNpZmljIGZ1bmN0aW9u
cwotLy8KLSNpbmNsdWRlICJjb21waWxlci9vc2luY2x1ZGUuaCIKLQotI2lmICFkZWZpbmVkKEFO
R0xFX09TX1BPU0lYKQotI2Vycm9yIFRyeWluZyB0byBidWlsZCBhIHBvc2l4IHNwZWNpZmljIGZp
bGUgaW4gYSBub24tcG9zaXggYnVpbGQuCi0jZW5kaWYKLQotLy8KLS8vIFRocmVhZCBMb2NhbCBT
dG9yYWdlIE9wZXJhdGlvbnMKLS8vCi1PU19UTFNJbmRleCBPU19BbGxvY1RMU0luZGV4KCkKLXsK
LSAgICBwdGhyZWFkX2tleV90IHBQb29sSW5kZXg7Ci0KLSAgICAvLwotICAgIC8vIENyZWF0ZSBn
bG9iYWwgcG9vbCBrZXkuCi0gICAgLy8KLSAgICBpZiAoKHB0aHJlYWRfa2V5X2NyZWF0ZSgmcFBv
b2xJbmRleCwgTlVMTCkpICE9IDApIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIk9TX0FsbG9jVExT
SW5kZXgoKTogVW5hYmxlIHRvIGFsbG9jYXRlIFRocmVhZCBMb2NhbCBTdG9yYWdlIik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIHJldHVybiBwUG9v
bEluZGV4OwotICAgIH0KLX0KLQotCi1ib29sIE9TX1NldFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5J
bmRleCwgdm9pZCAqbHB2VmFsdWUpCi17Ci0gICAgaWYgKG5JbmRleCA9PSBPU19JTlZBTElEX1RM
U19JTkRFWCkgewotICAgICAgICBhc3NlcnQoMCAmJiAiT1NfU2V0VExTVmFsdWUoKTogSW52YWxp
ZCBUTFMgSW5kZXgiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChw
dGhyZWFkX3NldHNwZWNpZmljKG5JbmRleCwgbHB2VmFsdWUpID09IDApCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotfQotCi0KLWJvb2wgT1Nf
RnJlZVRMU0luZGV4KE9TX1RMU0luZGV4IG5JbmRleCkKLXsKLSAgICBpZiAobkluZGV4ID09IE9T
X0lOVkFMSURfVExTX0lOREVYKSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJPU19TZXRUTFNWYWx1
ZSgpOiBJbnZhbGlkIFRMUyBJbmRleCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgLy8KLSAgICAvLyBEZWxldGUgdGhlIGdsb2JhbCBwb29sIGtleS4KLSAgICAvLwotICAg
IGlmIChwdGhyZWFkX2tleV9kZWxldGUobkluZGV4KSA9PSAwKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9vc3NvdXJjZV93aW4uY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL29zc291cmNlX3dpbi5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5OTIyZmVmM2Y0MTFlZGJiODNiNTIyNDEyYjZjZjcyOGMz
ZjlmMzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL29zc291cmNlX3dpbi5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAi
Y29tcGlsZXIvb3NpbmNsdWRlLmgiCi0vLwotLy8gVGhpcyBmaWxlIGNvbnRhaW5zIGNvbnRhaW5z
IHRoZSB3aW5kb3cncyBzcGVjaWZpYyBmdW5jdGlvbnMKLS8vCi0KLSNpZiAhZGVmaW5lZChBTkdM
RV9PU19XSU4pCi0jZXJyb3IgVHJ5aW5nIHRvIGJ1aWxkIGEgd2luZG93cyBzcGVjaWZpYyBmaWxl
IGluIGEgbm9uIHdpbmRvd3MgYnVpbGQuCi0jZW5kaWYKLQotCi0vLwotLy8gVGhyZWFkIExvY2Fs
IFN0b3JhZ2UgT3BlcmF0aW9ucwotLy8KLU9TX1RMU0luZGV4IE9TX0FsbG9jVExTSW5kZXgoKQot
ewotCURXT1JEIGR3SW5kZXggPSBUbHNBbGxvYygpOwotCWlmIChkd0luZGV4ID09IFRMU19PVVRf
T0ZfSU5ERVhFUykgewotCQlhc3NlcnQoMCAmJiAiT1NfQWxsb2NUTFNJbmRleCgpOiBVbmFibGUg
dG8gYWxsb2NhdGUgVGhyZWFkIExvY2FsIFN0b3JhZ2UiKTsKLQkJcmV0dXJuIE9TX0lOVkFMSURf
VExTX0lOREVYOwotCX0KLQotCXJldHVybiBkd0luZGV4OwotfQotCi0KLWJvb2wgT1NfU2V0VExT
VmFsdWUoT1NfVExTSW5kZXggbkluZGV4LCB2b2lkICpscHZWYWx1ZSkKLXsKLQlpZiAobkluZGV4
ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7Ci0JCWFzc2VydCgwICYmICJPU19TZXRUTFNWYWx1
ZSgpOiBJbnZhbGlkIFRMUyBJbmRleCIpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JaWYgKFRs
c1NldFZhbHVlKG5JbmRleCwgbHB2VmFsdWUpKQotCQlyZXR1cm4gdHJ1ZTsKLQllbHNlCi0JCXJl
dHVybiBmYWxzZTsKLX0KLQotCi1ib29sIE9TX0ZyZWVUTFNJbmRleChPU19UTFNJbmRleCBuSW5k
ZXgpCi17Ci0JaWYgKG5JbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgewotCQlhc3NlcnQo
MCAmJiAiT1NfU2V0VExTVmFsdWUoKTogSW52YWxpZCBUTFMgSW5kZXgiKTsKLQkJcmV0dXJuIGZh
bHNlOwotCX0KLQotCWlmIChUbHNGcmVlKG5JbmRleCkpCi0JCXJldHVybiB0cnVlOwotCWVsc2UK
LQkJcmV0dXJuIGZhbHNlOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3BhcnNlQ29uc3QuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3BhcnNlQ29uc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2
NWVkMTE1Y2JjYjMzODc5ODdkMzEzOWFmOGNlM2YyZTAyMDc1NDIyLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wYXJzZUNvbnN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI0NSArMCwwIEBA
Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VDb250ZXh0Lmgi
Ci0KLS8vCi0vLyBVc2UgdGhpcyBjbGFzcyB0byBjYXJyeSBhbG9uZyBkYXRhIGZyb20gbm9kZSB0
byBub2RlIGluIAotLy8gdGhlIHRyYXZlcnNhbAotLy8KLWNsYXNzIFRDb25zdFRyYXZlcnNlciA6
IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKLXB1YmxpYzoKLSAgICBUQ29uc3RUcmF2ZXJzZXIo
Q29uc3RhbnRVbmlvbiogY1VuaW9uLCBib29sIHNpbmdsZUNvbnN0UGFyYW0sIFRPcGVyYXRvciBj
b25zdHJ1Y3RUeXBlLCBUSW5mb1NpbmsmIHNpbmssIFRTeW1ib2xUYWJsZSYgc3ltVGFibGUsIFRU
eXBlJiB0KQotICAgICAgICA6IGVycm9yKGZhbHNlKSwKLSAgICAgICAgICBpbmRleCgwKSwKLSAg
ICAgICAgICB1bmlvbkFycmF5KGNVbmlvbiksCi0gICAgICAgICAgdHlwZSh0KSwKLSAgICAgICAg
ICBjb25zdHJ1Y3RvclR5cGUoY29uc3RydWN0VHlwZSksCi0gICAgICAgICAgc2luZ2xlQ29uc3Rh
bnRQYXJhbShzaW5nbGVDb25zdFBhcmFtKSwKLSAgICAgICAgICBpbmZvU2luayhzaW5rKSwKLSAg
ICAgICAgICBzeW1ib2xUYWJsZShzeW1UYWJsZSksCi0gICAgICAgICAgc2l6ZSgwKSwKLSAgICAg
ICAgICBpc01hdHJpeChmYWxzZSksCi0gICAgICAgICAgbWF0cml4U2l6ZSgwKSB7Ci0gICAgfQot
Ci0gICAgYm9vbCBlcnJvcjsKLQotcHJvdGVjdGVkOgotICAgIHZvaWQgdmlzaXRTeW1ib2woVElu
dGVybVN5bWJvbCopOwotICAgIHZvaWQgdmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFu
dFVuaW9uKik7Ci0gICAgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFy
eSopOwotICAgIGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5Kik7Ci0g
ICAgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiopOwot
ICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsK
LSAgICBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqKTsKLSAgICBib29s
IHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKik7Ci0KLSAgICBzaXplX3Qg
aW5kZXg7Ci0gICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheTsKLSAgICBUVHlwZSB0eXBlOwot
ICAgIFRPcGVyYXRvciBjb25zdHJ1Y3RvclR5cGU7Ci0gICAgYm9vbCBzaW5nbGVDb25zdGFudFBh
cmFtOwotICAgIFRJbmZvU2luayYgaW5mb1Npbms7Ci0gICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xU
YWJsZTsKLSAgICBzaXplX3Qgc2l6ZTsgLy8gc2l6ZSBvZiB0aGUgY29uc3RydWN0b3IgKCA0IGZv
ciB2ZWM0KQotICAgIGJvb2wgaXNNYXRyaXg7Ci0gICAgc2l6ZV90IG1hdHJpeFNpemU7IC8vIGRp
bWVuc2lvbiBvZiB0aGUgbWF0cml4IChub21pbmFsIHNpemUgYW5kIG5vdCB0aGUgaW5zdGFuY2Ug
c2l6ZSkKLX07Ci0KLS8vCi0vLyBUaGUgcmVzdCBvZiB0aGUgZmlsZSBhcmUgdGhlIHRyYXZlcnNh
bCBmdW5jdGlvbnMuICBUaGUgbGFzdCBvbmUKLS8vIGlzIHRoZSBvbmUgdGhhdCBzdGFydHMgdGhl
IHRyYXZlcnNhbC4KLS8vCi0vLyBSZXR1cm4gdHJ1ZSBmcm9tIGludGVyaW9yIG5vZGVzIHRvIGhh
dmUgdGhlIGV4dGVybmFsIHRyYXZlcnNhbAotLy8gY29udGludWUgb24gdG8gY2hpbGRyZW4uICBJ
ZiB5b3UgcHJvY2VzcyBjaGlsZHJlbiB5b3Vyc2VsZiwKLS8vIHJldHVybiBmYWxzZS4KLS8vCi0K
LXZvaWQgVENvbnN0VHJhdmVyc2VyOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQot
ewotICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+
Z2V0TGluZSgpLCAiU3ltYm9sIE5vZGUgZm91bmQgaW4gY29uc3RhbnQgY29uc3RydWN0b3IiKTsK
LSAgICByZXR1cm47Ci0KLX0KLQotYm9vbCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0QmluYXJ5KFZp
c2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBub2RlKQotewotICAgIFRRdWFsaWZpZXIgcXVhbGlm
aWVyID0gbm9kZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpOwotICAgIAotICAgIGlmIChxdWFs
aWZpZXIgIT0gRXZxQ29uc3QpIHsKLSAgICAgICAgVFN0cmluZyBidWY7Ci0gICAgICAgIGJ1Zi5h
cHBlbmQoIidjb25zdHJ1Y3RvcicgOiBhc3NpZ25pbmcgbm9uLWNvbnN0YW50IHRvICIpOwotICAg
ICAgICBidWYuYXBwZW5kKHR5cGUuZ2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgIGluZm9T
aW5rLmluZm8ubWVzc2FnZShFUHJlZml4RXJyb3IsIG5vZGUtPmdldExpbmUoKSwgYnVmLmNfc3Ry
KCkpOwotICAgICAgICBlcnJvciA9IHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsgIAotICAg
IH0KLQotICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2Rl
LT5nZXRMaW5lKCksICJCaW5hcnkgTm9kZSBmb3VuZCBpbiBjb25zdGFudCBjb25zdHJ1Y3RvciIp
OwotICAgIAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBUQ29uc3RUcmF2ZXJzZXI6OnZp
c2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSogbm9kZSkKLXsKLSAgICBUU3RyaW5n
IGJ1ZjsKLSAgICBidWYuYXBwZW5kKCInY29uc3RydWN0b3InIDogYXNzaWduaW5nIG5vbi1jb25z
dGFudCB0byAiKTsKLSAgICBidWYuYXBwZW5kKHR5cGUuZ2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0g
ICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCBi
dWYuY19zdHIoKSk7Ci0gICAgZXJyb3IgPSB0cnVlOwotICAgIHJldHVybiBmYWxzZTsgIAotfQot
Ci1ib29sIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRl
cm1BZ2dyZWdhdGUqIG5vZGUpCi17Ci0gICAgaWYgKCFub2RlLT5pc0NvbnN0cnVjdG9yKCkgJiYg
bm9kZS0+Z2V0T3AoKSAhPSBFT3BDb21tYSkgewotICAgICAgICBUU3RyaW5nIGJ1ZjsKLSAgICAg
ICAgYnVmLmFwcGVuZCgiJ2NvbnN0cnVjdG9yJyA6IGFzc2lnbmluZyBub24tY29uc3RhbnQgdG8g
Iik7Ci0gICAgICAgIGJ1Zi5hcHBlbmQodHlwZS5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAg
ICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCBi
dWYuY19zdHIoKSk7Ci0gICAgICAgIGVycm9yID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OyAgCi0gICAgfQotCi0gICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDApIHsK
LSAgICAgICAgZXJyb3IgPSB0cnVlOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgYm9vbCBmbGFnID0gbm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMSAmJiBub2RlLT5n
ZXRTZXF1ZW5jZSgpWzBdLT5nZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRVbmlvbigpOwotICAg
IGlmIChmbGFnKSAKLSAgICB7Ci0gICAgICAgIHNpbmdsZUNvbnN0YW50UGFyYW0gPSB0cnVlOyAK
LSAgICAgICAgY29uc3RydWN0b3JUeXBlID0gbm9kZS0+Z2V0T3AoKTsKLSAgICAgICAgc2l6ZSA9
IG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7Ci0KLSAgICAgICAgaWYgKG5vZGUtPmdl
dFR5cGUoKS5pc01hdHJpeCgpKSB7Ci0gICAgICAgICAgICBpc01hdHJpeCA9IHRydWU7Ci0gICAg
ICAgICAgICBtYXRyaXhTaXplID0gbm9kZS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCk7Ci0g
ICAgICAgIH0KLSAgICB9ICAgICAgIAotCi0gICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJh
dG9yIHAgPSBub2RlLT5nZXRTZXF1ZW5jZSgpLmJlZ2luKCk7IAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwICE9IG5vZGUtPmdldFNlcXVlbmNlKCkuZW5kKCk7IHArKykgewot
Ci0gICAgICAgIGlmIChub2RlLT5nZXRPcCgpID09IEVPcENvbW1hKQotICAgICAgICAgICAgaW5k
ZXggPSAwOyAgICAgICAgICAgCi0KLSAgICAgICAgKCpwKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAg
fSAgIAotICAgIGlmIChmbGFnKSAKLSAgICB7Ci0gICAgICAgIHNpbmdsZUNvbnN0YW50UGFyYW0g
PSBmYWxzZTsgICAKLSAgICAgICAgY29uc3RydWN0b3JUeXBlID0gRU9wTnVsbDsKLSAgICAgICAg
c2l6ZSA9IDA7Ci0gICAgICAgIGlzTWF0cml4ID0gZmFsc2U7Ci0gICAgICAgIG1hdHJpeFNpemUg
PSAwOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVENvbnN0VHJhdmVyc2Vy
Ojp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiogbm9kZSkKLXsK
LSAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdl
dExpbmUoKSwgIlNlbGVjdGlvbiBOb2RlIGZvdW5kIGluIGNvbnN0YW50IGNvbnN0cnVjdG9yIik7
Ci0gICAgZXJyb3IgPSB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBUQ29uc3RU
cmF2ZXJzZXI6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSkK
LXsKLSAgICBpZiAoIW5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCkpCi0gICAgewotICAgICAg
ICAvLyBUaGUgY29uc3RhbnQgd2FzIG5vdCBpbml0aWFsaXplZCwgdGhpcyBzaG91bGQgYWxyZWFk
eSBoYXZlIGJlZW4gbG9nZ2VkCi0gICAgICAgIGFzc2VydChpbmZvU2luay5pbmZvLnNpemUoKSAh
PSAwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENvbnN0YW50VW5pb24qIGxlZnRV
bmlvbkFycmF5ID0gdW5pb25BcnJheTsKLSAgICBzaXplX3QgaW5zdGFuY2VTaXplID0gdHlwZS5n
ZXRPYmplY3RTaXplKCk7Ci0KLSAgICBpZiAoaW5kZXggPj0gaW5zdGFuY2VTaXplKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoIXNpbmdsZUNvbnN0YW50UGFyYW0pIHsKLSAgICAgICAgc2l6
ZV90IHNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOwotICAgIAotICAgICAg
ICBDb25zdGFudFVuaW9uICpyaWdodFVuaW9uQXJyYXkgPSBub2RlLT5nZXRVbmlvbkFycmF5UG9p
bnRlcigpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAg
ICAgICAgICAgaWYgKGluZGV4ID49IGluc3RhbmNlU2l6ZSkKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpbmRleF0gPSByaWdodFVuaW9uQXJyYXlb
aV07Ci0KLSAgICAgICAgICAgIChpbmRleCkrKzsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHNpemVfdCB0b3RhbFNpemUgPSBpbmRleCArIHNpemU7Ci0gICAgICAgIENvbnN0YW50
VW5pb24gKnJpZ2h0VW5pb25BcnJheSA9IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7Ci0g
ICAgICAgIGlmICghaXNNYXRyaXgpIHsKLSAgICAgICAgICAgIHNpemVfdCBjb3VudCA9IDA7Ci0g
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gaW5kZXg7IGkgPCB0b3RhbFNpemU7IGkrKykgewot
ICAgICAgICAgICAgICAgIGlmIChpID49IGluc3RhbmNlU2l6ZSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0gPSByaWdodFVu
aW9uQXJyYXlbY291bnRdOwotCi0gICAgICAgICAgICAgICAgKGluZGV4KSsrOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6
ZSgpID4gMSkKLSAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlIHsgIC8vIGZvciBtYXRyaXggY29uc3RydWN0b3JzCi0gICAgICAgICAgICBz
aXplX3QgY291bnQgPSAwOwotICAgICAgICAgICAgc2l6ZV90IGVsZW1lbnQgPSBpbmRleDsKLSAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBpbmRleDsgaSA8IHRvdGFsU2l6ZTsgaSsrKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGkgPj0gaW5zdGFuY2VTaXplKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgLSBpID09IDAgfHwgKGkgLSBl
bGVtZW50KSAlIChtYXRyaXhTaXplICsgMSkgPT0gMCApCi0gICAgICAgICAgICAgICAgICAgIGxl
ZnRVbmlvbkFycmF5W2ldID0gcmlnaHRVbmlvbkFycmF5W2NvdW50XTsKLSAgICAgICAgICAgICAg
ICBlbHNlIAotICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRGQ29uc3Qo
MC4wZik7Ci0KLSAgICAgICAgICAgICAgICAoaW5kZXgpKys7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKSA+IDEpCi0gICAgICAgICAgICAgICAg
ICAgIGNvdW50Kys7ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotfQotCi1ib29sIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBU
SW50ZXJtTG9vcCogbm9kZSkKLXsKLSAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeElu
dGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIkxvb3AgTm9kZSBmb3VuZCBpbiBjb25zdGFu
dCBjb25zdHJ1Y3RvciIpOwotICAgIGVycm9yID0gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgVENvbnN0VHJhdmVyc2VyOjp2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVy
bUJyYW5jaCogbm9kZSkKLXsKLSAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVy
bmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIkJyYW5jaCBOb2RlIGZvdW5kIGluIGNvbnN0YW50
IGNvbnN0cnVjdG9yIik7Ci0gICAgZXJyb3IgPSB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotLy8KLS8vIFRoaXMgZnVuY3Rpb24gaXMgdGhlIG9uZSB0byBjYWxsIGV4dGVybmFsbHkgdG8g
c3RhcnQgdGhlIHRyYXZlcnNhbC4KLS8vIEluZGl2aWR1YWwgZnVuY3Rpb25zIGNhbiBiZSBpbml0
aWFsaXplZCB0byAwIHRvIHNraXAgcHJvY2Vzc2luZyBvZiB0aGF0Ci0vLyB0eXBlIG9mIG5vZGUu
ICBJdCdzIGNoaWxkcmVuIHdpbGwgc3RpbGwgYmUgcHJvY2Vzc2VkLgotLy8KLWJvb2wgVEludGVy
bWVkaWF0ZTo6cGFyc2VDb25zdFRyZWUoY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVEludGVybU5v
ZGUqIHJvb3QsIENvbnN0YW50VW5pb24qIHVuaW9uQXJyYXksIFRPcGVyYXRvciBjb25zdHJ1Y3Rv
clR5cGUsIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFRUeXBlIHQsIGJvb2wgc2luZ2xlQ29u
c3RhbnRQYXJhbSkKLXsKLSAgICBpZiAocm9vdCA9PSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBUQ29uc3RUcmF2ZXJzZXIgaXQodW5pb25BcnJheSwgc2luZ2xlQ29uc3RhbnRQYXJh
bSwgY29uc3RydWN0b3JUeXBlLCBpbmZvU2luaywgc3ltYm9sVGFibGUsIHQpOwotCi0gICAgcm9v
dC0+dHJhdmVyc2UoJml0KTsKLSAgICBpZiAoaXQuZXJyb3IpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaWFnbm9zdGljc0Jh
c2UuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9EaWFnbm9zdGljc0Jhc2UuY3BwCmluZGV4IDNlMjJlMWYxYzU3OWRmY2MxY2E2NWJmMjQ4NDAx
YjRkZWU2OTk0MDguLmE3Y2U4NjJiY2I0NWJkNTk5MjdlMTAxZDgxZmFkNGNhZTA1OTZlZTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvRGlhZ25vc3RpY3NCYXNlLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpYWdub3N0aWNzQmFzZS5jcHAKQEAgLTI1LDE0ICsyNSwx
NCBAQCB2b2lkIERpYWdub3N0aWNzOjpyZXBvcnQoSUQgaWQsCiAKIERpYWdub3N0aWNzOjpTZXZl
cml0eSBEaWFnbm9zdGljczo6c2V2ZXJpdHkoSUQgaWQpCiB7Ci0gICAgaWYgKChpZCA+IEVSUk9S
X0JFR0lOKSAmJiAoaWQgPCBFUlJPUl9FTkQpKQotICAgICAgICByZXR1cm4gRVJST1I7CisgICAg
aWYgKChpZCA+IFBQX0VSUk9SX0JFR0lOKSAmJiAoaWQgPCBQUF9FUlJPUl9FTkQpKQorICAgICAg
ICByZXR1cm4gUFBfRVJST1I7CiAKLSAgICBpZiAoKGlkID4gV0FSTklOR19CRUdJTikgJiYgKGlk
IDwgV0FSTklOR19FTkQpKQotICAgICAgICByZXR1cm4gV0FSTklORzsKKyAgICBpZiAoKGlkID4g
UFBfV0FSTklOR19CRUdJTikgJiYgKGlkIDwgUFBfV0FSTklOR19FTkQpKQorICAgICAgICByZXR1
cm4gUFBfV0FSTklORzsKIAogICAgIGFzc2VydChmYWxzZSk7Ci0gICAgcmV0dXJuIEVSUk9SOwor
ICAgIHJldHVybiBQUF9FUlJPUjsKIH0KIAogc3RkOjpzdHJpbmcgRGlhZ25vc3RpY3M6Om1lc3Nh
Z2UoSUQgaWQpCkBAIC00MCw4MiArNDAsODIgQEAgc3RkOjpzdHJpbmcgRGlhZ25vc3RpY3M6Om1l
c3NhZ2UoSUQgaWQpCiAgICAgc3dpdGNoIChpZCkKICAgICB7CiAgICAgICAvLyBFcnJvcnMgYmVn
aW4uCi0gICAgICBjYXNlIElOVEVSTkFMX0VSUk9SOgorICAgICAgY2FzZSBQUF9JTlRFUk5BTF9F
UlJPUjoKICAgICAgICAgICByZXR1cm4gImludGVybmFsIGVycm9yIjsKLSAgICAgIGNhc2UgT1VU
X09GX01FTU9SWToKKyAgICAgIGNhc2UgUFBfT1VUX09GX01FTU9SWToKICAgICAgICAgICByZXR1
cm4gIm91dCBvZiBtZW1vcnkiOwotICAgICAgY2FzZSBJTlZBTElEX0NIQVJBQ1RFUjoKKyAgICAg
IGNhc2UgUFBfSU5WQUxJRF9DSEFSQUNURVI6CiAgICAgICAgICAgcmV0dXJuICJpbnZhbGlkIGNo
YXJhY3RlciI7Ci0gICAgICBjYXNlIElOVkFMSURfTlVNQkVSOgorICAgICAgY2FzZSBQUF9JTlZB
TElEX05VTUJFUjoKICAgICAgICAgICByZXR1cm4gImludmFsaWQgbnVtYmVyIjsKLSAgICAgIGNh
c2UgSU5URUdFUl9PVkVSRkxPVzoKKyAgICAgIGNhc2UgUFBfSU5URUdFUl9PVkVSRkxPVzoKICAg
ICAgICAgICByZXR1cm4gImludGVnZXIgb3ZlcmZsb3ciOwotICAgICAgY2FzZSBGTE9BVF9PVkVS
RkxPVzoKKyAgICAgIGNhc2UgUFBfRkxPQVRfT1ZFUkZMT1c6CiAgICAgICAgICAgcmV0dXJuICJm
bG9hdCBvdmVyZmxvdyI7Ci0gICAgICBjYXNlIFRPS0VOX1RPT19MT05HOgorICAgICAgY2FzZSBQ
UF9UT0tFTl9UT09fTE9ORzoKICAgICAgICAgICByZXR1cm4gInRva2VuIHRvbyBsb25nIjsKLSAg
ICAgIGNhc2UgSU5WQUxJRF9FWFBSRVNTSU9OOgorICAgICAgY2FzZSBQUF9JTlZBTElEX0VYUFJF
U1NJT046CiAgICAgICAgICAgcmV0dXJuICJpbnZhbGlkIGV4cHJlc3Npb24iOwotICAgICAgY2Fz
ZSBESVZJU0lPTl9CWV9aRVJPOgorICAgICAgY2FzZSBQUF9ESVZJU0lPTl9CWV9aRVJPOgogICAg
ICAgICAgIHJldHVybiAiZGl2aXNpb24gYnkgemVybyI7Ci0gICAgICBjYXNlIEVPRl9JTl9DT01N
RU5UOgorICAgICAgY2FzZSBQUF9FT0ZfSU5fQ09NTUVOVDoKICAgICAgICAgICByZXR1cm4gInVu
ZXhwZWN0ZWQgZW5kIG9mIGZpbGUgZm91bmQgaW4gY29tbWVudCI7Ci0gICAgICBjYXNlIFVORVhQ
RUNURURfVE9LRU46CisgICAgICBjYXNlIFBQX1VORVhQRUNURURfVE9LRU46CiAgICAgICAgICAg
cmV0dXJuICJ1bmV4cGVjdGVkIHRva2VuIjsKLSAgICAgIGNhc2UgRElSRUNUSVZFX0lOVkFMSURf
TkFNRToKKyAgICAgIGNhc2UgUFBfRElSRUNUSVZFX0lOVkFMSURfTkFNRToKICAgICAgICAgICBy
ZXR1cm4gImludmFsaWQgZGlyZWN0aXZlIG5hbWUiOwotICAgICAgY2FzZSBNQUNST19OQU1FX1JF
U0VSVkVEOgorICAgICAgY2FzZSBQUF9NQUNST19OQU1FX1JFU0VSVkVEOgogICAgICAgICAgIHJl
dHVybiAibWFjcm8gbmFtZSBpcyByZXNlcnZlZCI7Ci0gICAgICBjYXNlIE1BQ1JPX1JFREVGSU5F
RDoKKyAgICAgIGNhc2UgUFBfTUFDUk9fUkVERUZJTkVEOgogICAgICAgICAgIHJldHVybiAibWFj
cm8gcmVkZWZpbmVkIjsKLSAgICAgIGNhc2UgTUFDUk9fUFJFREVGSU5FRF9SRURFRklORUQ6Cisg
ICAgICBjYXNlIFBQX01BQ1JPX1BSRURFRklORURfUkVERUZJTkVEOgogICAgICAgICAgIHJldHVy
biAicHJlZGVmaW5lZCBtYWNybyByZWRlZmluZWQiOwotICAgICAgY2FzZSBNQUNST19QUkVERUZJ
TkVEX1VOREVGSU5FRDoKKyAgICAgIGNhc2UgUFBfTUFDUk9fUFJFREVGSU5FRF9VTkRFRklORUQ6
CiAgICAgICAgICAgcmV0dXJuICJwcmVkZWZpbmVkIG1hY3JvIHVuZGVmaW5lZCI7Ci0gICAgICBj
YXNlIE1BQ1JPX1VOVEVSTUlOQVRFRF9JTlZPQ0FUSU9OOgorICAgICAgY2FzZSBQUF9NQUNST19V
TlRFUk1JTkFURURfSU5WT0NBVElPTjoKICAgICAgICAgICByZXR1cm4gInVudGVybWluYXRlZCBt
YWNybyBpbnZvY2F0aW9uIjsKLSAgICAgIGNhc2UgTUFDUk9fVE9PX0ZFV19BUkdTOgorICAgICAg
Y2FzZSBQUF9NQUNST19UT09fRkVXX0FSR1M6CiAgICAgICAgICAgcmV0dXJuICJOb3QgZW5vdWdo
IGFyZ3VtZW50cyBmb3IgbWFjcm8iOwotICAgICAgY2FzZSBNQUNST19UT09fTUFOWV9BUkdTOgor
ICAgICAgY2FzZSBQUF9NQUNST19UT09fTUFOWV9BUkdTOgogICAgICAgICAgIHJldHVybiAiVG9v
IG1hbnkgYXJndW1lbnRzIGZvciBtYWNybyI7Ci0gICAgICBjYXNlIENPTkRJVElPTkFMX0VORElG
X1dJVEhPVVRfSUY6CisgICAgICBjYXNlIFBQX0NPTkRJVElPTkFMX0VORElGX1dJVEhPVVRfSUY6
CiAgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkICNlbmRpZiBmb3VuZCB3aXRob3V0IGEgbWF0
Y2hpbmcgI2lmIjsKLSAgICAgIGNhc2UgQ09ORElUSU9OQUxfRUxTRV9XSVRIT1VUX0lGOgorICAg
ICAgY2FzZSBQUF9DT05ESVRJT05BTF9FTFNFX1dJVEhPVVRfSUY6CiAgICAgICAgICAgcmV0dXJu
ICJ1bmV4cGVjdGVkICNlbHNlIGZvdW5kIHdpdGhvdXQgYSBtYXRjaGluZyAjaWYiOwotICAgICAg
Y2FzZSBDT05ESVRJT05BTF9FTFNFX0FGVEVSX0VMU0U6CisgICAgICBjYXNlIFBQX0NPTkRJVElP
TkFMX0VMU0VfQUZURVJfRUxTRToKICAgICAgICAgICByZXR1cm4gInVuZXhwZWN0ZWQgI2Vsc2Ug
Zm91bmQgYWZ0ZXIgYW5vdGhlciAjZWxzZSI7Ci0gICAgICBjYXNlIENPTkRJVElPTkFMX0VMSUZf
V0lUSE9VVF9JRjoKKyAgICAgIGNhc2UgUFBfQ09ORElUSU9OQUxfRUxJRl9XSVRIT1VUX0lGOgog
ICAgICAgICAgIHJldHVybiAidW5leHBlY3RlZCAjZWxpZiBmb3VuZCB3aXRob3V0IGEgbWF0Y2hp
bmcgI2lmIjsKLSAgICAgIGNhc2UgQ09ORElUSU9OQUxfRUxJRl9BRlRFUl9FTFNFOgorICAgICAg
Y2FzZSBQUF9DT05ESVRJT05BTF9FTElGX0FGVEVSX0VMU0U6CiAgICAgICAgICAgcmV0dXJuICJ1
bmV4cGVjdGVkICNlbGlmIGZvdW5kIGFmdGVyICNlbHNlIjsKLSAgICAgIGNhc2UgQ09ORElUSU9O
QUxfVU5URVJNSU5BVEVEOgorICAgICAgY2FzZSBQUF9DT05ESVRJT05BTF9VTlRFUk1JTkFURUQ6
CiAgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIGZvdW5kIGluIGNvbmRp
dGlvbmFsIGJsb2NrIjsKLSAgICAgIGNhc2UgSU5WQUxJRF9FWFRFTlNJT05fTkFNRToKKyAgICAg
IGNhc2UgUFBfSU5WQUxJRF9FWFRFTlNJT05fTkFNRToKICAgICAgICAgICByZXR1cm4gImludmFs
aWQgZXh0ZW5zaW9uIG5hbWUiOwotICAgICAgY2FzZSBJTlZBTElEX0VYVEVOU0lPTl9CRUhBVklP
UjoKKyAgICAgIGNhc2UgUFBfSU5WQUxJRF9FWFRFTlNJT05fQkVIQVZJT1I6CiAgICAgICAgICAg
cmV0dXJuICJpbnZhbGlkIGV4dGVuc2lvbiBiZWhhdmlvciI7Ci0gICAgICBjYXNlIElOVkFMSURf
RVhURU5TSU9OX0RJUkVDVElWRToKKyAgICAgIGNhc2UgUFBfSU5WQUxJRF9FWFRFTlNJT05fRElS
RUNUSVZFOgogICAgICAgICAgIHJldHVybiAiaW52YWxpZCBleHRlbnNpb24gZGlyZWN0aXZlIjsK
LSAgICAgIGNhc2UgSU5WQUxJRF9WRVJTSU9OX05VTUJFUjoKKyAgICAgIGNhc2UgUFBfSU5WQUxJ
RF9WRVJTSU9OX05VTUJFUjoKICAgICAgICAgICByZXR1cm4gImludmFsaWQgdmVyc2lvbiBudW1i
ZXIiOwotICAgICAgY2FzZSBJTlZBTElEX1ZFUlNJT05fRElSRUNUSVZFOgorICAgICAgY2FzZSBQ
UF9JTlZBTElEX1ZFUlNJT05fRElSRUNUSVZFOgogICAgICAgICAgIHJldHVybiAiaW52YWxpZCB2
ZXJzaW9uIGRpcmVjdGl2ZSI7Ci0gICAgICBjYXNlIFZFUlNJT05fTk9UX0ZJUlNUX1NUQVRFTUVO
VDoKKyAgICAgIGNhc2UgUFBfVkVSU0lPTl9OT1RfRklSU1RfU1RBVEVNRU5UOgogICAgICAgICBy
ZXR1cm4gIiN2ZXJzaW9uIGRpcmVjdGl2ZSBtdXN0IG9jY3VyIGJlZm9yZSBhbnl0aGluZyBlbHNl
LCAiCiAgICAgICAgICAgICAgICAiZXhjZXB0IGZvciBjb21tZW50cyBhbmQgd2hpdGUgc3BhY2Ui
OwotICAgICAgY2FzZSBJTlZBTElEX0xJTkVfTlVNQkVSOgorICAgICAgY2FzZSBQUF9JTlZBTElE
X0xJTkVfTlVNQkVSOgogICAgICAgICAgIHJldHVybiAiaW52YWxpZCBsaW5lIG51bWJlciI7Ci0g
ICAgICBjYXNlIElOVkFMSURfRklMRV9OVU1CRVI6CisgICAgICBjYXNlIFBQX0lOVkFMSURfRklM
RV9OVU1CRVI6CiAgICAgICAgICAgcmV0dXJuICJpbnZhbGlkIGZpbGUgbnVtYmVyIjsKLSAgICAg
IGNhc2UgSU5WQUxJRF9MSU5FX0RJUkVDVElWRToKKyAgICAgIGNhc2UgUFBfSU5WQUxJRF9MSU5F
X0RJUkVDVElWRToKICAgICAgICAgICByZXR1cm4gImludmFsaWQgbGluZSBkaXJlY3RpdmUiOwog
ICAgICAgLy8gRXJyb3JzIGVuZC4KICAgICAgIC8vIFdhcm5pbmdzIGJlZ2luLgotICAgICAgY2Fz
ZSBFT0ZfSU5fRElSRUNUSVZFOgorICAgICAgY2FzZSBQUF9FT0ZfSU5fRElSRUNUSVZFOgogICAg
ICAgICAgIHJldHVybiAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSBmb3VuZCBpbiBkaXJlY3RpdmUi
OwotICAgICAgY2FzZSBDT05ESVRJT05BTF9VTkVYUEVDVEVEX1RPS0VOOgorICAgICAgY2FzZSBQ
UF9DT05ESVRJT05BTF9VTkVYUEVDVEVEX1RPS0VOOgogICAgICAgICAgIHJldHVybiAidW5leHBl
Y3RlZCB0b2tlbiBhZnRlciBjb25kaXRpb25hbCBleHByZXNzaW9uIjsKLSAgICAgIGNhc2UgVU5S
RUNPR05JWkVEX1BSQUdNQToKKyAgICAgIGNhc2UgUFBfVU5SRUNPR05JWkVEX1BSQUdNQToKICAg
ICAgICAgICByZXR1cm4gInVucmVjb2duaXplZCBwcmFnbWEiOwogICAgICAgLy8gV2FybmluZ3Mg
ZW5kLgogICAgICAgZGVmYXVsdDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NCYXNlLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpYWdub3N0aWNzQmFzZS5o
CmluZGV4IDA3YmM0MTE4NDY0MmEzZGM3NDJlZjRkZjQ2ZGYyZTQ0ZWU2ZTI2NDkuLjJjOGM1Mzkx
MzdiOTZhNzY5NjE1MWIzY2YwN2M1MGE5NDA3NDJiYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NCYXNlLmgK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9E
aWFnbm9zdGljc0Jhc2UuaApAQCAtMjEsNTMgKzIxLDUzIEBAIGNsYXNzIERpYWdub3N0aWNzCiAg
IHB1YmxpYzoKICAgICBlbnVtIFNldmVyaXR5CiAgICAgewotICAgICAgICBFUlJPUiwKLSAgICAg
ICAgV0FSTklORworICAgICAgICBQUF9FUlJPUiwKKyAgICAgICAgUFBfV0FSTklORwogICAgIH07
CiAgICAgZW51bSBJRAogICAgIHsKLSAgICAgICAgRVJST1JfQkVHSU4sCi0gICAgICAgIElOVEVS
TkFMX0VSUk9SLAotICAgICAgICBPVVRfT0ZfTUVNT1JZLAotICAgICAgICBJTlZBTElEX0NIQVJB
Q1RFUiwKLSAgICAgICAgSU5WQUxJRF9OVU1CRVIsCi0gICAgICAgIElOVEVHRVJfT1ZFUkZMT1cs
Ci0gICAgICAgIEZMT0FUX09WRVJGTE9XLAotICAgICAgICBUT0tFTl9UT09fTE9ORywKLSAgICAg
ICAgSU5WQUxJRF9FWFBSRVNTSU9OLAotICAgICAgICBESVZJU0lPTl9CWV9aRVJPLAotICAgICAg
ICBFT0ZfSU5fQ09NTUVOVCwKLSAgICAgICAgVU5FWFBFQ1RFRF9UT0tFTiwKLSAgICAgICAgRElS
RUNUSVZFX0lOVkFMSURfTkFNRSwKLSAgICAgICAgTUFDUk9fTkFNRV9SRVNFUlZFRCwKLSAgICAg
ICAgTUFDUk9fUkVERUZJTkVELAotICAgICAgICBNQUNST19QUkVERUZJTkVEX1JFREVGSU5FRCwK
LSAgICAgICAgTUFDUk9fUFJFREVGSU5FRF9VTkRFRklORUQsCi0gICAgICAgIE1BQ1JPX1VOVEVS
TUlOQVRFRF9JTlZPQ0FUSU9OLAotICAgICAgICBNQUNST19UT09fRkVXX0FSR1MsCi0gICAgICAg
IE1BQ1JPX1RPT19NQU5ZX0FSR1MsCi0gICAgICAgIENPTkRJVElPTkFMX0VORElGX1dJVEhPVVRf
SUYsCi0gICAgICAgIENPTkRJVElPTkFMX0VMU0VfV0lUSE9VVF9JRiwKLSAgICAgICAgQ09ORElU
SU9OQUxfRUxTRV9BRlRFUl9FTFNFLAotICAgICAgICBDT05ESVRJT05BTF9FTElGX1dJVEhPVVRf
SUYsCi0gICAgICAgIENPTkRJVElPTkFMX0VMSUZfQUZURVJfRUxTRSwKLSAgICAgICAgQ09ORElU
SU9OQUxfVU5URVJNSU5BVEVELAotICAgICAgICBJTlZBTElEX0VYVEVOU0lPTl9OQU1FLAotICAg
ICAgICBJTlZBTElEX0VYVEVOU0lPTl9CRUhBVklPUiwKLSAgICAgICAgSU5WQUxJRF9FWFRFTlNJ
T05fRElSRUNUSVZFLAotICAgICAgICBJTlZBTElEX1ZFUlNJT05fTlVNQkVSLAotICAgICAgICBJ
TlZBTElEX1ZFUlNJT05fRElSRUNUSVZFLAotICAgICAgICBWRVJTSU9OX05PVF9GSVJTVF9TVEFU
RU1FTlQsCi0gICAgICAgIElOVkFMSURfTElORV9OVU1CRVIsCi0gICAgICAgIElOVkFMSURfRklM
RV9OVU1CRVIsCi0gICAgICAgIElOVkFMSURfTElORV9ESVJFQ1RJVkUsCi0gICAgICAgIEVSUk9S
X0VORCwKKyAgICAgICAgUFBfRVJST1JfQkVHSU4sCisgICAgICAgIFBQX0lOVEVSTkFMX0VSUk9S
LAorICAgICAgICBQUF9PVVRfT0ZfTUVNT1JZLAorICAgICAgICBQUF9JTlZBTElEX0NIQVJBQ1RF
UiwKKyAgICAgICAgUFBfSU5WQUxJRF9OVU1CRVIsCisgICAgICAgIFBQX0lOVEVHRVJfT1ZFUkZM
T1csCisgICAgICAgIFBQX0ZMT0FUX09WRVJGTE9XLAorICAgICAgICBQUF9UT0tFTl9UT09fTE9O
RywKKyAgICAgICAgUFBfSU5WQUxJRF9FWFBSRVNTSU9OLAorICAgICAgICBQUF9ESVZJU0lPTl9C
WV9aRVJPLAorICAgICAgICBQUF9FT0ZfSU5fQ09NTUVOVCwKKyAgICAgICAgUFBfVU5FWFBFQ1RF
RF9UT0tFTiwKKyAgICAgICAgUFBfRElSRUNUSVZFX0lOVkFMSURfTkFNRSwKKyAgICAgICAgUFBf
TUFDUk9fTkFNRV9SRVNFUlZFRCwKKyAgICAgICAgUFBfTUFDUk9fUkVERUZJTkVELAorICAgICAg
ICBQUF9NQUNST19QUkVERUZJTkVEX1JFREVGSU5FRCwKKyAgICAgICAgUFBfTUFDUk9fUFJFREVG
SU5FRF9VTkRFRklORUQsCisgICAgICAgIFBQX01BQ1JPX1VOVEVSTUlOQVRFRF9JTlZPQ0FUSU9O
LAorICAgICAgICBQUF9NQUNST19UT09fRkVXX0FSR1MsCisgICAgICAgIFBQX01BQ1JPX1RPT19N
QU5ZX0FSR1MsCisgICAgICAgIFBQX0NPTkRJVElPTkFMX0VORElGX1dJVEhPVVRfSUYsCisgICAg
ICAgIFBQX0NPTkRJVElPTkFMX0VMU0VfV0lUSE9VVF9JRiwKKyAgICAgICAgUFBfQ09ORElUSU9O
QUxfRUxTRV9BRlRFUl9FTFNFLAorICAgICAgICBQUF9DT05ESVRJT05BTF9FTElGX1dJVEhPVVRf
SUYsCisgICAgICAgIFBQX0NPTkRJVElPTkFMX0VMSUZfQUZURVJfRUxTRSwKKyAgICAgICAgUFBf
Q09ORElUSU9OQUxfVU5URVJNSU5BVEVELAorICAgICAgICBQUF9JTlZBTElEX0VYVEVOU0lPTl9O
QU1FLAorICAgICAgICBQUF9JTlZBTElEX0VYVEVOU0lPTl9CRUhBVklPUiwKKyAgICAgICAgUFBf
SU5WQUxJRF9FWFRFTlNJT05fRElSRUNUSVZFLAorICAgICAgICBQUF9JTlZBTElEX1ZFUlNJT05f
TlVNQkVSLAorICAgICAgICBQUF9JTlZBTElEX1ZFUlNJT05fRElSRUNUSVZFLAorICAgICAgICBQ
UF9WRVJTSU9OX05PVF9GSVJTVF9TVEFURU1FTlQsCisgICAgICAgIFBQX0lOVkFMSURfTElORV9O
VU1CRVIsCisgICAgICAgIFBQX0lOVkFMSURfRklMRV9OVU1CRVIsCisgICAgICAgIFBQX0lOVkFM
SURfTElORV9ESVJFQ1RJVkUsCisgICAgICAgIFBQX0VSUk9SX0VORCwKIAotICAgICAgICBXQVJO
SU5HX0JFR0lOLAotICAgICAgICBFT0ZfSU5fRElSRUNUSVZFLAotICAgICAgICBDT05ESVRJT05B
TF9VTkVYUEVDVEVEX1RPS0VOLAotICAgICAgICBVTlJFQ09HTklaRURfUFJBR01BLAotICAgICAg
ICBXQVJOSU5HX0VORAorICAgICAgICBQUF9XQVJOSU5HX0JFR0lOLAorICAgICAgICBQUF9FT0Zf
SU5fRElSRUNUSVZFLAorICAgICAgICBQUF9DT05ESVRJT05BTF9VTkVYUEVDVEVEX1RPS0VOLAor
ICAgICAgICBQUF9VTlJFQ09HTklaRURfUFJBR01BLAorICAgICAgICBQUF9XQVJOSU5HX0VORAog
ICAgIH07CiAKICAgICB2aXJ0dWFsIH5EaWFnbm9zdGljcygpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVQYXJz
ZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9EaXJlY3RpdmVQYXJzZXIuY3BwCmluZGV4IDk0ZGZkZjUxM2Q3NTUzODRjNWY1YTFhZTVjYjYz
MTY1ODRjNDYwYTMuLmViZWM3OTgwNGRjZWY4MzZhNGI0MmY5NjQ0NzIzNmM3MTYzNDcwMjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvRGlyZWN0aXZlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZVBhcnNlci5jcHAKQEAgLTE3Miw3ICsxNzIs
NyBAQCBjbGFzcyBEZWZpbmVkUGFyc2VyIDogcHVibGljIExleGVyCiAKICAgICAgICAgaWYgKHRv
a2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQogICAgICAgICB7Ci0gICAgICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAg
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9VTkVYUEVDVEVEX1RP
S0VOLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0
b2tlbi0+dGV4dCk7CiAgICAgICAgICAgICBza2lwVW50aWxFT0QobUxleGVyLCB0b2tlbik7CiAg
ICAgICAgICAgICByZXR1cm47CkBAIC0xODUsNyArMTg1LDcgQEAgY2xhc3MgRGVmaW5lZFBhcnNl
ciA6IHB1YmxpYyBMZXhlcgogICAgICAgICAgICAgbUxleGVyLT5sZXgodG9rZW4pOwogICAgICAg
ICAgICAgaWYgKHRva2VuLT50eXBlICE9ICcpJykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwK
KyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfVU5F
WFBFQ1RFRF9UT0tFTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tl
bi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgICAgICAgICBza2lwVW50aWxFT0Qo
bUxleGVyLCB0b2tlbik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjMzLDcgKzIzMyw3
IEBAIHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpsZXgoVG9rZW4qIHRva2VuKQogICAgICAgICAgICAg
aWYgKCFtQ29uZGl0aW9uYWxTdGFjay5lbXB0eSgpKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIGNvbnN0IENvbmRpdGlvbmFsQmxvY2smIGJsb2NrID0gbUNvbmRpdGlvbmFsU3RhY2su
YmFjaygpOwotICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNz
OjpDT05ESVRJT05BTF9VTlRFUk1JTkFURUQsCisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNz
LT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX0NPTkRJVElPTkFMX1VOVEVSTUlOQVRFRCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay5sb2NhdGlvbiwgYmxvY2sudHlw
ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTI2OCw3ICsyNjgsNyBA
QCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VEaXJlY3RpdmUoVG9rZW4qIHRva2VuKQogICAg
IHN3aXRjaChkaXJlY3RpdmUpCiAgICAgewogICAgICAgY2FzZSBESVJFQ1RJVkVfTk9ORToKLSAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkRJUkVDVElWRV9JTlZBTElE
X05BTUUsCisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9ESVJF
Q1RJVkVfSU5WQUxJRF9OQU1FLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+
bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIs
IHRva2VuKTsKICAgICAgICAgYnJlYWs7CkBAIC0zMTksNyArMzE5LDcgQEAgdm9pZCBEaXJlY3Rp
dmVQYXJzZXI6OnBhcnNlRGlyZWN0aXZlKFRva2VuKiB0b2tlbikKICAgICBza2lwVW50aWxFT0Qo
bVRva2VuaXplciwgdG9rZW4pOwogICAgIGlmICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6TEFTVCkK
ICAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpFT0ZfSU5f
RElSRUNUSVZFLAorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBf
RU9GX0lOX0RJUkVDVElWRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxv
Y2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgfQogfQpAQCAtMzMxLDE5ICszMzEsMTkgQEAgdm9p
ZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGVmaW5lKFRva2VuKiB0b2tlbikKICAgICBtVG9rZW5p
emVyLT5sZXgodG9rZW4pOwogICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklF
UikKICAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVY
UEVDVEVEX1RPS0VOLAorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6
UFBfVU5FWFBFQ1RFRF9UT0tFTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4t
PmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYg
KGlzTWFjcm9QcmVkZWZpbmVkKHRva2VuLT50ZXh0LCAqbU1hY3JvU2V0KSkKICAgICB7Ci0gICAg
ICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19QUkVERUZJTkVEX1JF
REVGSU5FRCwKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX01B
Q1JPX1BSRURFRklORURfUkVERUZJTkVELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBpZiAoaXNNYWNyb05hbWVSZXNlcnZlZCh0b2tlbi0+dGV4dCkpCiAgICAgewotICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6TUFDUk9fTkFNRV9SRVNFUlZFRCwKKyAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX01BQ1JPX05BTUVfUkVT
RVJWRUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9r
ZW4tPnRleHQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzY4LDcgKzM2OCw3IEBAIHZv
aWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZURlZmluZShUb2tlbiogdG9rZW4pCiAKICAgICAgICAg
aWYgKHRva2VuLT50eXBlICE9ICcpJykKICAgICAgICAgewotICAgICAgICAgICAgbURpYWdub3N0
aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfVU5FWFBFQ1RFRF9UT0tFTiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT50ZXh0KTsKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTM5Niw3ICszOTYsNyBAQCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VEZWZpbmUo
VG9rZW4qIHRva2VuKQogICAgIE1hY3JvU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbU1hY3Jv
U2V0LT5maW5kKG1hY3JvLm5hbWUpOwogICAgIGlmIChpdGVyICE9IG1NYWNyb1NldC0+ZW5kKCkg
JiYgIW1hY3JvLmVxdWFscyhpdGVyLT5zZWNvbmQpKQogICAgIHsKLSAgICAgICAgbURpYWdub3N0
aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1BQ1JPX1JFREVGSU5FRCwKKyAgICAgICAgbURpYWdu
b3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX01BQ1JPX1JFREVGSU5FRCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYWNyby5uYW1lKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNDExLDcgKzQxMSw3
IEBAIHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZVVuZGVmKFRva2VuKiB0b2tlbikKICAgICBt
VG9rZW5pemVyLT5sZXgodG9rZW4pOwogICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURF
TlRJRklFUikKICAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNz
OjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6UFBfVU5FWFBFQ1RFRF9UT0tFTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC00MjEsNyArNDIxLDcgQEAgdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVW5kZWYoVG9rZW4q
IHRva2VuKQogICAgIHsKICAgICAgICAgaWYgKGl0ZXItPnNlY29uZC5wcmVkZWZpbmVkKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6TUFD
Uk9fUFJFREVGSU5FRF9VTkRFRklORUQsCisgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6UFBfTUFDUk9fUFJFREVGSU5FRF9VTkRFRklORUQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAg
ICAgICAgfQogICAgICAgICBlbHNlCkBAIC00NTcsNyArNDU3LDcgQEAgdm9pZCBEaXJlY3RpdmVQ
YXJzZXI6OnBhcnNlRWxzZShUb2tlbiogdG9rZW4pCiAKICAgICBpZiAobUNvbmRpdGlvbmFsU3Rh
Y2suZW1wdHkoKSkKICAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpDT05ESVRJT05BTF9FTFNFX1dJVEhPVVRfSUYsCisgICAgICAgIG1EaWFnbm9zdGljcy0+
cmVwb3J0KERpYWdub3N0aWNzOjpQUF9DT05ESVRJT05BTF9FTFNFX1dJVEhPVVRfSUYsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwog
ICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOwogICAgICAgICByZXR1cm47
CkBAIC00NzIsNyArNDcyLDcgQEAgdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxzZShUb2tl
biogdG9rZW4pCiAgICAgfQogICAgIGlmIChibG9jay5mb3VuZEVsc2VHcm91cCkKICAgICB7Ci0g
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9FTFNF
X0FGVEVSX0VMU0UsCisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQ
UF9DT05ESVRJT05BTF9FTFNFX0FGVEVSX0VMU0UsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICBza2lwVW50aWxFT0Qo
bVRva2VuaXplciwgdG9rZW4pOwogICAgICAgICByZXR1cm47CkBAIC00ODYsNyArNDg2LDcgQEAg
dm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxzZShUb2tlbiogdG9rZW4pCiAgICAgbVRva2Vu
aXplci0+bGV4KHRva2VuKTsKICAgICBpZiAoIWlzRU9EKHRva2VuKSkKICAgICB7Ci0gICAgICAg
IG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9VTkVYUEVDVEVE
X1RPS0VOLAorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfQ09O
RElUSU9OQUxfVU5FWFBFQ1RFRF9UT0tFTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgIHNraXBVbnRpbEVPRChtVG9r
ZW5pemVyLCB0b2tlbik7CiAgICAgfQpAQCAtNDk4LDcgKzQ5OCw3IEBAIHZvaWQgRGlyZWN0aXZl
UGFyc2VyOjpwYXJzZUVsaWYoVG9rZW4qIHRva2VuKQogCiAgICAgaWYgKG1Db25kaXRpb25hbFN0
YWNrLmVtcHR5KCkpCiAgICAgewotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6Q09ORElUSU9OQUxfRUxJRl9XSVRIT1VUX0lGLAorICAgICAgICBtRGlhZ25vc3RpY3Mt
PnJlcG9ydChEaWFnbm9zdGljczo6UFBfQ09ORElUSU9OQUxfRUxJRl9XSVRIT1VUX0lGLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsK
ICAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKICAgICAgICAgcmV0dXJu
OwpAQCAtNTEzLDcgKzUxMyw3IEBAIHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVsaWYoVG9r
ZW4qIHRva2VuKQogICAgIH0KICAgICBpZiAoYmxvY2suZm91bmRFbHNlR3JvdXApCiAgICAgewot
ICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfRUxJ
Rl9BRlRFUl9FTFNFLAorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6
UFBfQ09ORElUSU9OQUxfRUxJRl9BRlRFUl9FTFNFLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgc2tpcFVudGlsRU9E
KG1Ub2tlbml6ZXIsIHRva2VuKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNTM4LDcgKzUzOCw3IEBA
IHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVuZGlmKFRva2VuKiB0b2tlbikKIAogICAgIGlm
IChtQ29uZGl0aW9uYWxTdGFjay5lbXB0eSgpKQogICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNz
LT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX0VORElGX1dJVEhPVVRfSUYsCisgICAg
ICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9DT05ESVRJT05BTF9FTkRJ
Rl9XSVRIT1VUX0lGLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRp
b24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2Vu
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtNTUwLDcgKzU1MCw3IEBAIHZvaWQgRGlyZWN0aXZlUGFy
c2VyOjpwYXJzZUVuZGlmKFRva2VuKiB0b2tlbikKICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4p
OwogICAgIGlmICghaXNFT0QodG9rZW4pKQogICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5y
ZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX1VORVhQRUNURURfVE9LRU4sCisgICAgICAg
IG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9DT05ESVRJT05BTF9VTkVYUEVD
VEVEX1RPS0VOLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24s
IHRva2VuLT50ZXh0KTsKICAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsK
ICAgICB9CkBAIC02MTgsNyArNjE4LDcgQEAgdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlUHJh
Z21hKFRva2VuKiB0b2tlbikKICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGUgPT0gUklHSFRf
UEFSRU4gKyAxKSk7ICAvLyBXaXRoIHZhbHVlLgogICAgIGlmICghdmFsaWQpCiAgICAgewotICAg
ICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5SRUNPR05JWkVEX1BSQUdN
QSwKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX1VOUkVDT0dO
SVpFRF9QUkFHTUEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwgbmFtZSk7CiAgICAgfQogICAgIGVsc2UgaWYgKHN0YXRlID4gUFJBR01BX05BTUUpICAvLyBE
byBub3Qgbm90aWZ5IGZvciBlbXB0eSBwcmFnbWEuCkBAIC02NTAsNyArNjUwLDcgQEAgdm9pZCBE
aXJlY3RpdmVQYXJzZXI6OnBhcnNlRXh0ZW5zaW9uKFRva2VuKiB0b2tlbikKICAgICAgICAgICBj
YXNlIEVYVF9OQU1FOgogICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBU
b2tlbjo6SURFTlRJRklFUikpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURpYWdu
b3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfRVhURU5TSU9OX05BTUUsCisgICAg
ICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX0lOVkFMSURf
RVhURU5TSU9OX05BTUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxz
ZTsKICAgICAgICAgICAgIH0KQEAgLTY1OSw3ICs2NTksNyBAQCB2b2lkIERpcmVjdGl2ZVBhcnNl
cjo6cGFyc2VFeHRlbnNpb24oVG9rZW4qIHRva2VuKQogICAgICAgICAgIGNhc2UgQ09MT046CiAg
ICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9ICc6JykpCiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVO
RVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6OlBQX1VORVhQRUNURURfVE9LRU4sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgICAgICAg
ICAgdmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KQEAgLTY2Nyw3ICs2NjcsNyBAQCB2b2lk
IERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFeHRlbnNpb24oVG9rZW4qIHRva2VuKQogICAgICAgICAg
IGNhc2UgRVhUX0JFSEFWSU9SOgogICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlw
ZSAhPSBUb2tlbjo6SURFTlRJRklFUikpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfRVhURU5TSU9OX0JFSEFW
SU9SLAorICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQ
UF9JTlZBTElEX0VYVEVOU0lPTl9CRUhBVklPUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgICAgICAg
ICB2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgfQpAQCAtNjc2LDcgKzY3Niw3IEBAIHZvaWQg
RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4dGVuc2lvbihUb2tlbiogdG9rZW4pCiAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgIGlmICh2YWxpZCkKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tF
TiwKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBf
VU5FWFBFQ1RFRF9UT0tFTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgICAgICAgICB2YWxpZCA9IGZh
bHNlOwogICAgICAgICAgICAgfQpAQCAtNjg2LDcgKzY4Niw3IEBAIHZvaWQgRGlyZWN0aXZlUGFy
c2VyOjpwYXJzZUV4dGVuc2lvbihUb2tlbiogdG9rZW4pCiAgICAgfQogICAgIGlmICh2YWxpZCAm
JiAoc3RhdGUgIT0gRVhUX0JFSEFWSU9SICsgMSkpCiAgICAgewotICAgICAgICBtRGlhZ25vc3Rp
Y3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9FWFRFTlNJT05fRElSRUNUSVZFLAorICAg
ICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfSU5WQUxJRF9FWFRFTlNJ
T05fRElSRUNUSVZFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRp
b24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICB9CkBAIC03MDAs
NyArNzAwLDcgQEAgdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVmVyc2lvbihUb2tlbiogdG9r
ZW4pCiAKICAgICBpZiAobVBhc3RGaXJzdFN0YXRlbWVudCkKICAgICB7Ci0gICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpWRVJTSU9OX05PVF9GSVJTVF9TVEFURU1FTlQs
CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9WRVJTSU9OX05P
VF9GSVJTVF9TVEFURU1FTlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5s
b2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwg
dG9rZW4pOwogICAgICAgICByZXR1cm47CkBAIC03MjMsMTMgKzcyMywxMyBAQCB2b2lkIERpcmVj
dGl2ZVBhcnNlcjo6cGFyc2VWZXJzaW9uKFRva2VuKiB0b2tlbikKICAgICAgICAgICBjYXNlIFZF
UlNJT05fTlVNQkVSOgogICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBU
b2tlbjo6Q09OU1RfSU5UKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9WRVJTSU9OX05VTUJFUiwKKyAgICAg
ICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfSU5WQUxJRF9W
RVJTSU9OX05VTUJFUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tl
bi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNl
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHZhbGlkICYmICF0b2tlbi0+aVZhbHVl
KCZ2ZXJzaW9uKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3Mt
PnJlcG9ydChEaWFnbm9zdGljczo6SU5URUdFUl9PVkVSRkxPVywKKyAgICAgICAgICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfSU5URUdFUl9PVkVSRkxPVywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2Vu
LT50ZXh0KTsKICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgfQpA
QCAtNzM3LDcgKzczNyw3IEBAIHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZVZlcnNpb24oVG9r
ZW4qIHRva2VuKQogICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBpZiAodmFsaWQpCiAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25v
c3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5y
ZXBvcnQoRGlhZ25vc3RpY3M6OlBQX1VORVhQRUNURURfVE9LRU4sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAg
ICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KQEAgLTc0Nyw3ICs3NDcs
NyBAQCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VWZXJzaW9uKFRva2VuKiB0b2tlbikKICAg
ICB9CiAgICAgaWYgKHZhbGlkICYmIChzdGF0ZSAhPSBWRVJTSU9OX05VTUJFUiArIDEpKQogICAg
IHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfVkVS
U0lPTl9ESVJFQ1RJVkUsCisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNz
OjpQUF9JTlZBTElEX1ZFUlNJT05fRElSRUNUSVZFLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgdmFsaWQgPSBmYWxz
ZTsKICAgICB9CkBAIC03NzgsMTMgKzc3OCwxMyBAQCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFy
c2VMaW5lKFRva2VuKiB0b2tlbikKICAgICAgICAgICBjYXNlIExJTkVfTlVNQkVSOgogICAgICAg
ICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6Q09OU1RfSU5UKSkKICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6SU5WQUxJRF9MSU5FX05VTUJFUiwKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3Mt
PnJlcG9ydChEaWFnbm9zdGljczo6UFBfSU5WQUxJRF9MSU5FX05VTUJFUiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsK
ICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgaWYgKHZhbGlkICYmICF0b2tlbi0+aVZhbHVlKCZsaW5lKSkKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5URUdFUl9P
VkVSRkxPVywKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGlj
czo6UFBfSU5URUdFUl9PVkVSRkxPVywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgICAgICAgICB2YWxp
ZCA9IGZhbHNlOwogICAgICAgICAgICAgfQpAQCAtNzkyLDEzICs3OTIsMTMgQEAgdm9pZCBEaXJl
Y3RpdmVQYXJzZXI6OnBhcnNlTGluZShUb2tlbiogdG9rZW4pCiAgICAgICAgICAgY2FzZSBGSUxF
X05VTUJFUjoKICAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46
OkNPTlNUX0lOVCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURpYWdub3N0aWNz
LT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfRklMRV9OVU1CRVIsCisgICAgICAgICAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX0lOVkFMSURfRklMRV9OVU1C
RVIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9u
LCB0b2tlbi0+dGV4dCk7CiAgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGlmICh2YWxpZCAmJiAhdG9rZW4tPmlWYWx1ZSgmZmlsZSkpCiAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25v
c3RpY3M6OklOVEVHRVJfT1ZFUkZMT1csCisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5y
ZXBvcnQoRGlhZ25vc3RpY3M6OlBQX0lOVEVHRVJfT1ZFUkZMT1csCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAg
ICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KQEAgLTgwNiw3ICs4MDYs
NyBAQCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VMaW5lKFRva2VuKiB0b2tlbikKICAgICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgaWYgKHZhbGlkKQogICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVE
X1RPS0VOLAorICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNz
OjpQUF9VTkVYUEVDVEVEX1RPS0VOLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICAgICAgICAgIHZhbGlk
ID0gZmFsc2U7CiAgICAgICAgICAgICB9CkBAIC04MTcsNyArODE3LDcgQEAgdm9pZCBEaXJlY3Rp
dmVQYXJzZXI6OnBhcnNlTGluZShUb2tlbiogdG9rZW4pCiAKICAgICBpZiAodmFsaWQgJiYgKHN0
YXRlICE9IEZJTEVfTlVNQkVSKSAmJiAoc3RhdGUgIT0gRklMRV9OVU1CRVIgKyAxKSkKICAgICB7
Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0xJTkVf
RElSRUNUSVZFLAorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBf
SU5WQUxJRF9MSU5FX0RJUkVDVElWRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAg
fQpAQCAtODkzLDcgKzg5Myw3IEBAIGludCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXhwcmVzc2lv
bklmKFRva2VuKiB0b2tlbikKICAgICAvLyBXYXJuIGlmIHRoZXJlIGFyZSB0b2tlbnMgYWZ0ZXIg
I2lmIGV4cHJlc3Npb24uCiAgICAgaWYgKCFpc0VPRCh0b2tlbikpCiAgICAgewotICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfVU5FWFBFQ1RFRF9U
T0tFTiwKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX0NPTkRJ
VElPTkFMX1VORVhQRUNURURfVE9LRU4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv
a2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICBza2lwVW50aWxFT0QobVRva2Vu
aXplciwgdG9rZW4pOwogICAgIH0KQEAgLTkwOSw3ICs5MDksNyBAQCBpbnQgRGlyZWN0aXZlUGFy
c2VyOjpwYXJzZUV4cHJlc3Npb25JZmRlZihUb2tlbiogdG9rZW4pCiAgICAgbVRva2VuaXplci0+
bGV4KHRva2VuKTsKICAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCiAg
ICAgewotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RF
RF9UT0tFTiwKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX1VO
RVhQRUNURURfVE9LRU4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2Nh
dGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9r
ZW4pOwogICAgICAgICByZXR1cm4gMDsKQEAgLTkyMiw3ICs5MjIsNyBAQCBpbnQgRGlyZWN0aXZl
UGFyc2VyOjpwYXJzZUV4cHJlc3Npb25JZmRlZihUb2tlbiogdG9rZW4pCiAgICAgbVRva2VuaXpl
ci0+bGV4KHRva2VuKTsKICAgICBpZiAoIWlzRU9EKHRva2VuKSkKICAgICB7Ci0gICAgICAgIG1E
aWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9VTkVYUEVDVEVEX1RP
S0VOLAorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfQ09ORElU
SU9OQUxfVU5FWFBFQ1RFRF9UT0tFTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5p
emVyLCB0b2tlbik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNl
ci5jcHAKaW5kZXggMWZhZTAwOTQ1NmExOWE2YmRhODBhMjMwNGMwYjhlYWM3NGJlZGQ5Yi4uM2I4
MGI0NjYyNGE3M2I5ZDYzNjVmMmY2YmMwMWFhNjE2NzkyNDg2ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFy
c2VyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL0V4cHJlc3Npb25QYXJzZXIuY3BwCkBAIC0xLDIxICsxLDIxIEBACi0vKiBBcHBsZSBO
b3RlOiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgQXBwbGUgZWxlY3RzIHRvIGRpc3RyaWJ1
dGUgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQlNEIGxpY2Vuc2UuICovCisvKiBB
IEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi43LiAgKi8KIAotLyogQSBCaXNvbiBw
YXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDMuMC4xLiAgKi8KKy8qIEFwcGxlIE5vdGU6IEZvciB0
aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBBcHBsZSBlbGVjdHMgdG8gZGlzdHJpYnV0ZSB0aGlzIGZp
bGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBCU0QgbGljZW5zZS4gKi8KIAogLyogQmlzb24gaW1w
bGVtZW50YXRpb24gZm9yIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKLQotICAgQ29weXJpZ2h0IChD
KSAxOTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4KLQorICAgCisgICAgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDEy
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgCiAgICBUaGlzIHByb2dyYW0gaXMg
ZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkKICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJz
aW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotCisgICAKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KKyAgIAogICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
ICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251
Lm9yZy9saWNlbnNlcy8+LiAgKi8KIApAQCAtMjgsNyArMjgsNyBAQAogICAgc3BlY2lhbCBleGNl
cHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCiAg
ICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFs
IFB1YmxpYwogICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCi0KKyAg
IAogICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiBpbgogICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLwogCkBAIC00Niw3
ICs0Niw3IEBACiAjZGVmaW5lIFlZQklTT04gMQogCiAvKiBCaXNvbiB2ZXJzaW9uLiAgKi8KLSNk
ZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIzLjAuMSIKKyNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIy
LjciCiAKIC8qIFNrZWxldG9uIG5hbWUuICAqLwogI2RlZmluZSBZWVNLRUxFVE9OX05BTUUgInlh
Y2MuYyIKQEAgLTY1LDEwICs2NSwxMSBAQAogI2RlZmluZSB5eXBhcnNlICAgICAgICAgcHBwYXJz
ZQogI2RlZmluZSB5eWxleCAgICAgICAgICAgcHBsZXgKICNkZWZpbmUgeXllcnJvciAgICAgICAg
IHBwZXJyb3IKKyNkZWZpbmUgeXlsdmFsICAgICAgICAgIHBwbHZhbAorI2RlZmluZSB5eWNoYXIg
ICAgICAgICAgcHBjaGFyCiAjZGVmaW5lIHl5ZGVidWcgICAgICAgICBwcGRlYnVnCiAjZGVmaW5l
IHl5bmVycnMgICAgICAgICBwcG5lcnJzCiAKLQogLyogQ29weSB0aGUgZmlyc3QgcGFydCBvZiB1
c2VyIGRlY2xhcmF0aW9ucy4gICovCiAKIApAQCAtMTMzLDExICsxMzQsMTEgQEAgc3RhdGljIHZv
aWQgeXllcnJvcihDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pOwogCiAKIAot
IyBpZm5kZWYgWVlfTlVMTFBUUgorIyBpZm5kZWYgWVlfTlVMTAogIyAgaWYgZGVmaW5lZCBfX2Nw
bHVzcGx1cyAmJiAyMDExMDNMIDw9IF9fY3BsdXNwbHVzCi0jICAgZGVmaW5lIFlZX05VTExQVFIg
bnVsbHB0cgorIyAgIGRlZmluZSBZWV9OVUxMIG51bGxwdHIKICMgIGVsc2UKLSMgICBkZWZpbmUg
WVlfTlVMTFBUUiAwCisjICAgZGVmaW5lIFlZX05VTEwgMAogIyAgZW5kaWYKICMgZW5kaWYKIApA
QCAtMTUwLDcgKzE1MSw3IEBAIHN0YXRpYyB2b2lkIHl5ZXJyb3IoQ29udGV4dCogY29udGV4dCwg
Y29uc3QgY2hhciogcmVhc29uKTsKICNlbmRpZgogCiAKLS8qIERlYnVnIHRyYWNlcy4gICovCisv
KiBFbmFibGluZyB0cmFjZXMuICAqLwogI2lmbmRlZiBZWURFQlVHCiAjIGRlZmluZSBZWURFQlVH
IDAKICNlbmRpZgpAQCAtMTU4LDM0ICsxNTksNDcgQEAgc3RhdGljIHZvaWQgeXllcnJvcihDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pOwogZXh0ZXJuIGludCBwcGRlYnVnOwog
I2VuZGlmCiAKLS8qIFRva2VuIHR5cGUuICAqLworLyogVG9rZW5zLiAgKi8KICNpZm5kZWYgWVlU
T0tFTlRZUEUKICMgZGVmaW5lIFlZVE9LRU5UWVBFCi0gIGVudW0geXl0b2tlbnR5cGUKLSAgewot
ICAgIFRPS19DT05TVF9JTlQgPSAyNTgsCi0gICAgVE9LX09QX09SID0gMjU5LAotICAgIFRPS19P
UF9BTkQgPSAyNjAsCi0gICAgVE9LX09QX0VRID0gMjYxLAotICAgIFRPS19PUF9ORSA9IDI2MiwK
LSAgICBUT0tfT1BfTEUgPSAyNjMsCi0gICAgVE9LX09QX0dFID0gMjY0LAotICAgIFRPS19PUF9M
RUZUID0gMjY1LAotICAgIFRPS19PUF9SSUdIVCA9IDI2NiwKLSAgICBUT0tfVU5BUlkgPSAyNjcK
LSAgfTsKKyAgIC8qIFB1dCB0aGUgdG9rZW5zIGludG8gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhh
dCBHREIgYW5kIG90aGVyIGRlYnVnZ2VycworICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8KKyAg
IGVudW0geXl0b2tlbnR5cGUgeworICAgICBUT0tfQ09OU1RfSU5UID0gMjU4LAorICAgICBUT0tf
T1BfT1IgPSAyNTksCisgICAgIFRPS19PUF9BTkQgPSAyNjAsCisgICAgIFRPS19PUF9ORSA9IDI2
MSwKKyAgICAgVE9LX09QX0VRID0gMjYyLAorICAgICBUT0tfT1BfR0UgPSAyNjMsCisgICAgIFRP
S19PUF9MRSA9IDI2NCwKKyAgICAgVE9LX09QX1JJR0hUID0gMjY1LAorICAgICBUT0tfT1BfTEVG
VCA9IDI2NiwKKyAgICAgVE9LX1VOQVJZID0gMjY3CisgICB9OwogI2VuZGlmCiAKLS8qIFZhbHVl
IHR5cGUuICAqLworCiAjaWYgISBkZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZpbmVkIFlZU1RZUEVf
SVNfREVDTEFSRUQKIHR5cGVkZWYgaW50IFlZU1RZUEU7CiAjIGRlZmluZSBZWVNUWVBFX0lTX1RS
SVZJQUwgMQorIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJl
IHdpdGhkcmF3biAqLwogIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCiAjZW5kaWYKIAog
Ci0KKyNpZmRlZiBZWVBBUlNFX1BBUkFNCisjaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVk
IF9fY3BsdXNwbHVzCitpbnQgcHBwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSk7CisjZWxzZQor
aW50IHBwcGFyc2UgKCk7CisjZW5kaWYKKyNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLworI2lm
IGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cwogaW50IHBwcGFyc2UgKENv
bnRleHQgKmNvbnRleHQpOworI2Vsc2UKK2ludCBwcHBhcnNlICgpOworI2VuZGlmCisjZW5kaWYg
LyogISBZWVBBUlNFX1BBUkFNICovCiAKIAogCkBAIC0yMDUsOCArMjE5LDExIEBAIHR5cGVkZWYg
dW5zaWduZWQgY2hhciB5eXR5cGVfdWludDg7CiAKICNpZmRlZiBZWVRZUEVfSU5UOAogdHlwZWRl
ZiBZWVRZUEVfSU5UOCB5eXR5cGVfaW50ODsKLSNlbHNlCisjZWxpZiAoZGVmaW5lZCBfX1NURENf
XyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVz
IHx8IGRlZmluZWQgX01TQ19WRVIpCiB0eXBlZGVmIHNpZ25lZCBjaGFyIHl5dHlwZV9pbnQ4Owor
I2Vsc2UKK3R5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQ4OwogI2VuZGlmCiAKICNpZmRlZiBZ
WVRZUEVfVUlOVDE2CkBAIC0yMjYsNyArMjQzLDggQEAgdHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBl
X2ludDE2OwogIyAgZGVmaW5lIFlZU0laRV9UIF9fU0laRV9UWVBFX18KICMgZWxpZiBkZWZpbmVk
IHNpemVfdAogIyAgZGVmaW5lIFlZU0laRV9UIHNpemVfdAotIyBlbGlmICEgZGVmaW5lZCBZWVNJ
WkVfVAorIyBlbGlmICEgZGVmaW5lZCBZWVNJWkVfVCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBk
ZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRl
ZmluZWQgX01TQ19WRVIpCiAjICBpbmNsdWRlIDxzdGRkZWYuaD4gLyogSU5GUklOR0VTIE9OIFVT
RVIgTkFNRSBTUEFDRSAqLwogIyAgZGVmaW5lIFlZU0laRV9UIHNpemVfdAogIyBlbHNlCkBAIC0y
NDgsMzMgKzI2Niw2IEBAIHR5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQxNjsKICMgZW5kaWYK
ICNlbmRpZgogCi0jaWZuZGVmIFlZX0FUVFJJQlVURQotIyBpZiAoZGVmaW5lZCBfX0dOVUNfXyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgJiYg
KDIgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gMiAmJiA5NiA8PSBfX0dOVUNfTUlOT1JfXykp
KSAgXAotICAgICB8fCBkZWZpbmVkIF9fU1VOUFJPX0MgJiYgMHg1MTEwIDw9IF9fU1VOUFJPX0MK
LSMgIGRlZmluZSBZWV9BVFRSSUJVVEUoU3BlYykgX19hdHRyaWJ1dGVfXyhTcGVjKQotIyBlbHNl
Ci0jICBkZWZpbmUgWVlfQVRUUklCVVRFKFNwZWMpIC8qIGVtcHR5ICovCi0jIGVuZGlmCi0jZW5k
aWYKLQotI2lmbmRlZiBZWV9BVFRSSUJVVEVfUFVSRQotIyBkZWZpbmUgWVlfQVRUUklCVVRFX1BV
UkUgICBZWV9BVFRSSUJVVEUgKChfX3B1cmVfXykpCi0jZW5kaWYKLQotI2lmbmRlZiBZWV9BVFRS
SUJVVEVfVU5VU0VECi0jIGRlZmluZSBZWV9BVFRSSUJVVEVfVU5VU0VEIFlZX0FUVFJJQlVURSAo
KF9fdW51c2VkX18pKQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZCBfTm9yZXR1cm4gXAotICAgICAm
JiAoIWRlZmluZWQgX19TVERDX1ZFUlNJT05fXyB8fCBfX1NURENfVkVSU0lPTl9fIDwgMjAxMTEy
KQotIyBpZiBkZWZpbmVkIF9NU0NfVkVSICYmIDEyMDAgPD0gX01TQ19WRVIKLSMgIGRlZmluZSBf
Tm9yZXR1cm4gX19kZWNsc3BlYyAobm9yZXR1cm4pCi0jIGVsc2UKLSMgIGRlZmluZSBfTm9yZXR1
cm4gWVlfQVRUUklCVVRFICgoX19ub3JldHVybl9fKSkKLSMgZW5kaWYKLSNlbmRpZgotCiAvKiBT
dXBwcmVzcyB1bnVzZWQtdmFyaWFibGUgd2FybmluZ3MgYnkgInVzaW5nIiBFLiAgKi8KICNpZiAh
IGRlZmluZWQgbGludCB8fCBkZWZpbmVkIF9fR05VQ19fCiAjIGRlZmluZSBZWVVTRShFKSAoKHZv
aWQpIChFKSkKQEAgLTI4MiwyNiArMjczLDI0IEBAIHR5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9p
bnQxNjsKICMgZGVmaW5lIFlZVVNFKEUpIC8qIGVtcHR5ICovCiAjZW5kaWYKIAotI2lmIGRlZmlu
ZWQgX19HTlVDX18gJiYgNDA3IDw9IF9fR05VQ19fICogMTAwICsgX19HTlVDX01JTk9SX18KLS8q
IFN1cHByZXNzIGFuIGluY29ycmVjdCBkaWFnbm9zdGljIGFib3V0IHl5bHZhbCBiZWluZyB1bmlu
aXRpYWxpemVkLiAgKi8KLSMgZGVmaW5lIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JF
R0lOIFwKLSAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgcHVzaCIpIFwKLSAgICBfUHJhZ21h
ICgiR0NDIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XdW5pbml0aWFsaXplZFwiIilcCi0gICAgX1By
YWdtYSAoIkdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV21heWJlLXVuaW5pdGlhbGl6ZWRcIiIp
Ci0jIGRlZmluZSBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9FTkQgXAotICAgIF9QcmFn
bWEgKCJHQ0MgZGlhZ25vc3RpYyBwb3AiKQorLyogSWRlbnRpdHkgZnVuY3Rpb24sIHVzZWQgdG8g
c3VwcHJlc3Mgd2FybmluZ3MgYWJvdXQgY29uc3RhbnQgY29uZGl0aW9ucy4gICovCisjaWZuZGVm
IGxpbnQKKyMgZGVmaW5lIFlZSUQoTikgKE4pCiAjZWxzZQotIyBkZWZpbmUgWVlfSU5JVElBTF9W
QUxVRShWYWx1ZSkgVmFsdWUKLSNlbmRpZgotI2lmbmRlZiBZWV9JR05PUkVfTUFZQkVfVU5JTklU
SUFMSVpFRF9CRUdJTgotIyBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVH
SU4KLSMgZGVmaW5lIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORAorI2lmIChkZWZp
bmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQg
X19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyBpbnQKK1lZSUQgKGludCB5
eWkpCisjZWxzZQorc3RhdGljIGludAorWVlJRCAoeXlpKQorICAgIGludCB5eWk7CiAjZW5kaWYK
LSNpZm5kZWYgWVlfSU5JVElBTF9WQUxVRQotIyBkZWZpbmUgWVlfSU5JVElBTF9WQUxVRShWYWx1
ZSkgLyogTm90aGluZy4gKi8KK3sKKyAgcmV0dXJuIHl5aTsKK30KICNlbmRpZgogCi0KICNpZiAh
IGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UKIAogLyogVGhlIHBhcnNlciBp
bnZva2VzIGFsbG9jYSBvciBtYWxsb2M7IGRlZmluZSB0aGUgbmVjZXNzYXJ5IHN5bWJvbHMuICAq
LwpAQCAtMzE5LDcgKzMwOCw4IEBAIHR5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQxNjsKICMg
ICAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCiAjICAgZWxzZQogIyAgICBkZWZpbmUgWVlTVEFDS19B
TExPQyBhbGxvY2EKLSMgICAgaWYgISBkZWZpbmVkIF9BTExPQ0FfSCAmJiAhIGRlZmluZWQgRVhJ
VF9TVUNDRVNTCisjICAgIGlmICEgZGVmaW5lZCBfQUxMT0NBX0ggJiYgISBkZWZpbmVkIEVYSVRf
U1VDQ0VTUyAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAor
ICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCiAjICAgICBp
bmNsdWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwogICAg
ICAgLyogVXNlIEVYSVRfU1VDQ0VTUyBhcyBhIHdpdG5lc3MgZm9yIHN0ZGxpYi5oLiAgKi8KICMg
ICAgIGlmbmRlZiBFWElUX1NVQ0NFU1MKQEAgLTMzMSw4ICszMjEsOCBAQCB0eXBlZGVmIHNob3J0
IGludCB5eXR5cGVfaW50MTY7CiAjIGVuZGlmCiAKICMgaWZkZWYgWVlTVEFDS19BTExPQwotICAg
LyogUGFjaWZ5IEdDQydzICdlbXB0eSBpZi1ib2R5JyB3YXJuaW5nLiAgKi8KLSMgIGRlZmluZSBZ
WVNUQUNLX0ZSRUUoUHRyKSBkbyB7IC8qIGVtcHR5ICovOyB9IHdoaWxlICgwKQorICAgLyogUGFj
aWZ5IEdDQydzIGBlbXB0eSBpZi1ib2R5JyB3YXJuaW5nLiAgKi8KKyMgIGRlZmluZSBZWVNUQUNL
X0ZSRUUoUHRyKSBkbyB7IC8qIGVtcHR5ICovOyB9IHdoaWxlIChZWUlEICgwKSkKICMgIGlmbmRl
ZiBZWVNUQUNLX0FMTE9DX01BWElNVU0KICAgICAvKiBUaGUgT1MgbWlnaHQgZ3VhcmFudGVlIG9u
bHkgb25lIGd1YXJkIHBhZ2UgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2ssCiAgICAgICAgYW5k
IGEgcGFnZSBzaXplIGNhbiBiZSBhcyBzbWFsbCBhcyA0MDk2IGJ5dGVzLiAgU28gd2UgY2Fubm90
IHNhZmVseQpAQCAtMzQ4LDcgKzMzOCw3IEBAIHR5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQx
NjsKICMgIGVuZGlmCiAjICBpZiAoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiAhIGRlZmluZWQgRVhJ
VF9TVUNDRVNTIFwKICAgICAgICAmJiAhICgoZGVmaW5lZCBZWU1BTExPQyB8fCBkZWZpbmVkIG1h
bGxvYykgXAotICAgICAgICAgICAgICYmIChkZWZpbmVkIFlZRlJFRSB8fCBkZWZpbmVkIGZyZWUp
KSkKKwkgICAgICYmIChkZWZpbmVkIFlZRlJFRSB8fCBkZWZpbmVkIGZyZWUpKSkKICMgICBpbmNs
dWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwogIyAgIGlm
bmRlZiBFWElUX1NVQ0NFU1MKICMgICAgZGVmaW5lIEVYSVRfU1VDQ0VTUyAwCkBAIC0zNTYsMTMg
KzM0NiwxNSBAQCB0eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50MTY7CiAjICBlbmRpZgogIyAg
aWZuZGVmIFlZTUFMTE9DCiAjICAgZGVmaW5lIFlZTUFMTE9DIG1hbGxvYwotIyAgIGlmICEgZGVm
aW5lZCBtYWxsb2MgJiYgISBkZWZpbmVkIEVYSVRfU1VDQ0VTUworIyAgIGlmICEgZGVmaW5lZCBt
YWxsb2MgJiYgISBkZWZpbmVkIEVYSVRfU1VDQ0VTUyAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBk
ZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRl
ZmluZWQgX01TQ19WRVIpCiB2b2lkICptYWxsb2MgKFlZU0laRV9UKTsgLyogSU5GUklOR0VTIE9O
IFVTRVIgTkFNRSBTUEFDRSAqLwogIyAgIGVuZGlmCiAjICBlbmRpZgogIyAgaWZuZGVmIFlZRlJF
RQogIyAgIGRlZmluZSBZWUZSRUUgZnJlZQotIyAgIGlmICEgZGVmaW5lZCBmcmVlICYmICEgZGVm
aW5lZCBFWElUX1NVQ0NFU1MKKyMgICBpZiAhIGRlZmluZWQgZnJlZSAmJiAhIGRlZmluZWQgRVhJ
VF9TVUNDRVNTICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBc
CisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKIHZvaWQg
ZnJlZSAodm9pZCAqKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwogIyAgIGVu
ZGlmCiAjICBlbmRpZgpAQCAtMzcyLDcgKzM2NCw3IEBAIHZvaWQgZnJlZSAodm9pZCAqKTsgLyog
SU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwogCiAjaWYgKCEgZGVmaW5lZCB5eW92ZXJm
bG93IFwKICAgICAgJiYgKCEgZGVmaW5lZCBfX2NwbHVzcGx1cyBcCi0gICAgICAgICB8fCAoZGVm
aW5lZCBZWVNUWVBFX0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9JU19UUklWSUFMKSkpCisJIHx8IChk
ZWZpbmVkIFlZU1RZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkKIAogLyog
QSB0eXBlIHRoYXQgaXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1lbWJlci4gICov
CiB1bmlvbiB5eWFsbG9jCkBAIC0zOTcsMTYgKzM4OSwxNiBAQCB1bmlvbiB5eWFsbG9jCiAgICBl
bGVtZW50cyBpbiB0aGUgc3RhY2ssIGFuZCBZWVBUUiBnaXZlcyB0aGUgbmV3IGxvY2F0aW9uIG9m
IHRoZQogICAgc3RhY2suICBBZHZhbmNlIFlZUFRSIHRvIGEgcHJvcGVybHkgYWxpZ25lZCBsb2Nh
dGlvbiBmb3IgdGhlIG5leHQKICAgIHN0YWNrLiAgKi8KLSMgZGVmaW5lIFlZU1RBQ0tfUkVMT0NB
VEUoU3RhY2tfYWxsb2MsIFN0YWNrKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBk
byAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgWVlTSVpFX1QgeXluZXdieXRl
czsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
WVlDT1BZICgmeXlwdHItPlN0YWNrX2FsbG9jLCBTdGFjaywgeXlzaXplKTsgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgU3RhY2sgPSAmeXlwdHItPlN0YWNrX2FsbG9jOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgeXluZXdieXRlcyA9IHl5c3RhY2tz
aXplICogc2l6ZW9mICgqU3RhY2spICsgWVlTVEFDS19HQVBfTUFYSU1VTTsgXAotICAgICAgICB5
eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHdoaWxlICgwKQorIyBkZWZpbmUgWVlTVEFD
S19SRUxPQ0FURShTdGFja19hbGxvYywgU3RhY2spCQkJCVwKKyAgICBkbwkJCQkJCQkJCVwKKyAg
ICAgIHsJCQkJCQkJCQlcCisJWVlTSVpFX1QgeXluZXdieXRlczsJCQkJCQlcCisJWVlDT1BZICgm
eXlwdHItPlN0YWNrX2FsbG9jLCBTdGFjaywgeXlzaXplKTsJCQlcCisJU3RhY2sgPSAmeXlwdHIt
PlN0YWNrX2FsbG9jOwkJCQkJXAorCXl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAo
KlN0YWNrKSArIFlZU1RBQ0tfR0FQX01BWElNVU07IFwKKwl5eXB0ciArPSB5eW5ld2J5dGVzIC8g
c2l6ZW9mICgqeXlwdHIpOwkJCQlcCisgICAgICB9CQkJCQkJCQkJXAorICAgIHdoaWxlIChZWUlE
ICgwKSkKIAogI2VuZGlmCiAKQEAgLTQyNSw3ICs0MTcsNyBAQCB1bmlvbiB5eWFsbG9jCiAgICAg
ICAgICAgZm9yICh5eWkgPSAwOyB5eWkgPCAoQ291bnQpOyB5eWkrKykgICBcCiAgICAgICAgICAg
ICAoRHN0KVt5eWldID0gKFNyYylbeXlpXTsgICAgICAgICAgICBcCiAgICAgICAgIH0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB3aGlsZSAoMCkKKyAgICAg
IHdoaWxlIChZWUlEICgwKSkKICMgIGVuZGlmCiAjIGVuZGlmCiAjZW5kaWYgLyogIVlZQ09QWV9O
RUVERUQgKi8KQEAgLTQ0MSwxOSArNDMzLDE3IEBAIHVuaW9uIHl5YWxsb2MKICNkZWZpbmUgWVlO
TlRTICAzCiAvKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2YgcnVsZXMuICAqLwogI2RlZmluZSBZWU5S
VUxFUyAgMjYKLS8qIFlZTlNUQVRFUyAtLSBOdW1iZXIgb2Ygc3RhdGVzLiAgKi8KKy8qIFlZTlJV
TEVTIC0tIE51bWJlciBvZiBzdGF0ZXMuICAqLwogI2RlZmluZSBZWU5TVEFURVMgIDUyCiAKLS8q
IFlZVFJBTlNMQVRFW1lZWF0gLS0gU3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZWCBh
cyByZXR1cm5lZAotICAgYnkgeXlsZXgsIHdpdGggb3V0LW9mLWJvdW5kcyBjaGVja2luZy4gICov
CisvKiBZWVRSQU5TTEFURShZWUxFWCkgLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25k
aW5nIHRvIFlZTEVYLiAgKi8KICNkZWZpbmUgWVlVTkRFRlRPSyAgMgogI2RlZmluZSBZWU1BWFVU
T0sgICAyNjcKIAotI2RlZmluZSBZWVRSQU5TTEFURShZWVgpICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBZWVRSQU5TTEFURShZWVgpCQkJ
CQkJXAogICAoKHVuc2lnbmVkIGludCkgKFlZWCkgPD0gWVlNQVhVVE9LID8geXl0cmFuc2xhdGVb
WVlYXSA6IFlZVU5ERUZUT0spCiAKLS8qIFlZVFJBTlNMQVRFW1RPS0VOLU5VTV0gLS0gU3ltYm9s
IG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFRPS0VOLU5VTQotICAgYXMgcmV0dXJuZWQgYnkgeXls
ZXgsIHdpdGhvdXQgb3V0LW9mLWJvdW5kcyBjaGVja2luZy4gICovCisvKiBZWVRSQU5TTEFURVtZ
WUxFWF0gLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8K
IHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXl0cmFuc2xhdGVbXSA9CiB7CiAgICAgICAgMCwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwKQEAgLTQ4NiwxMiArNDc2LDM2IEBAIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXl0
cmFuc2xhdGVbXSA9CiB9OwogCiAjaWYgWVlERUJVRwotICAvKiBZWVJMSU5FW1lZTl0gLS0gU291
cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KKy8qIFlZUFJI
U1tZWU5dIC0tIEluZGV4IG9mIHRoZSBmaXJzdCBSSFMgc3ltYm9sIG9mIHJ1bGUgbnVtYmVyIFlZ
TiBpbgorICAgWVlSSFMuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXByaHNbXSA9
Cit7CisgICAgICAgMCwgICAgIDAsICAgICAzLCAgICAgNSwgICAgIDcsICAgIDExLCAgICAxNSwg
ICAgMTksICAgIDIzLCAgICAyNywKKyAgICAgIDMxLCAgICAzNSwgICAgMzksICAgIDQzLCAgICA0
NywgICAgNTEsICAgIDU1LCAgICA1OSwgICAgNjMsICAgIDY3LAorICAgICAgNzEsICAgIDc1LCAg
ICA3OSwgICAgODIsICAgIDg1LCAgICA4OCwgICAgOTEKK307CisKKy8qIFlZUkhTIC0tIEEgYC0x
Jy1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgcnVsZXMnIFJIUy4gICovCitzdGF0aWMgY29uc3QgeXl0
eXBlX2ludDggeXlyaHNbXSA9Cit7CisgICAgICAyOCwgICAgIDAsICAgIC0xLCAgICAyOSwgICAg
LTEsICAgICAzLCAgICAtMSwgICAgMjksICAgICA0LCAgICAyOSwKKyAgICAgIC0xLCAgICAyOSwg
ICAgIDUsICAgIDI5LCAgICAtMSwgICAgMjksICAgICA2LCAgICAyOSwgICAgLTEsICAgIDI5LAor
ICAgICAgIDcsICAgIDI5LCAgICAtMSwgICAgMjksICAgICA4LCAgICAyOSwgICAgLTEsICAgIDI5
LCAgICAgOSwgICAgMjksCisgICAgICAtMSwgICAgMjksICAgIDEwLCAgICAyOSwgICAgLTEsICAg
IDI5LCAgICAxMywgICAgMjksICAgIC0xLCAgICAyOSwKKyAgICAgIDE0LCAgICAyOSwgICAgLTEs
ICAgIDI5LCAgICAxMiwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTEsICAgIDI5LAorICAgICAg
LTEsICAgIDI5LCAgICAxNSwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTYsICAgIDI5LCAgICAt
MSwgICAgMjksCisgICAgICAxOCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTcsICAgIDI5LCAg
ICAtMSwgICAgMjksICAgIDIxLCAgICAyOSwKKyAgICAgIC0xLCAgICAyOSwgICAgMjAsICAgIDI5
LCAgICAtMSwgICAgMjksICAgIDE5LCAgICAyOSwgICAgLTEsICAgIDIzLAorICAgICAgMjksICAg
IC0xLCAgICAyNCwgICAgMjksICAgIC0xLCAgICAxOCwgICAgMjksICAgIC0xLCAgICAxNywgICAg
MjksCisgICAgICAtMSwgICAgMjUsICAgIDI5LCAgICAyNiwgICAgLTEKK307CisKKy8qIFlZUkxJ
TkVbWVlOXSAtLSBzb3VyY2UgbGluZSB3aGVyZSBydWxlIG51bWJlciBZWU4gd2FzIGRlZmluZWQu
ICAqLwogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXJsaW5lW10gPQogewotICAgICAgIDAs
ICAgIDk3LCAgICA5NywgICAxMDQsICAgMTA1LCAgIDEwOCwgICAxMTEsICAgMTE0LCAgIDExNywg
ICAxMjAsCi0gICAgIDEyMywgICAxMjYsICAgMTI5LCAgIDEzMiwgICAxMzUsICAgMTM4LCAgIDE0
MSwgICAxNDQsICAgMTQ3LCAgIDE1MCwKLSAgICAgMTYzLCAgIDE3NiwgICAxNzksICAgMTgyLCAg
IDE4NSwgICAxODgsICAgMTkxCisgICAgICAgMCwgICAgOTEsICAgIDkxLCAgICA5OCwgICAgOTks
ICAgMTAyLCAgIDEwNSwgICAxMDgsICAgMTExLCAgIDExNCwKKyAgICAgMTE3LCAgIDEyMCwgICAx
MjMsICAgMTI2LCAgIDEyOSwgICAxMzIsICAgMTM1LCAgIDEzOCwgICAxNDEsICAgMTQ0LAorICAg
ICAxNTcsICAgMTcwLCAgIDE3MywgICAxNzYsICAgMTc5LCAgIDE4MiwgICAxODUKIH07CiAjZW5k
aWYKIApAQCAtNTAxLDE2ICs1MTUsMTYgQEAgc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXJs
aW5lW10gPQogc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHl5dG5hbWVbXSA9CiB7CiAgICIkZW5k
IiwgImVycm9yIiwgIiR1bmRlZmluZWQiLCAiVE9LX0NPTlNUX0lOVCIsICJUT0tfT1BfT1IiLAot
ICAiVE9LX09QX0FORCIsICInfCciLCAiJ14nIiwgIicmJyIsICJUT0tfT1BfRVEiLCAiVE9LX09Q
X05FIiwgIic8JyIsCi0gICInPiciLCAiVE9LX09QX0xFIiwgIlRPS19PUF9HRSIsICJUT0tfT1Bf
TEVGVCIsICJUT0tfT1BfUklHSFQiLCAiJysnIiwKKyAgIlRPS19PUF9BTkQiLCAiJ3wnIiwgIide
JyIsICInJiciLCAiVE9LX09QX05FIiwgIlRPS19PUF9FUSIsICInPCciLAorICAiJz4nIiwgIlRP
S19PUF9HRSIsICJUT0tfT1BfTEUiLCAiVE9LX09QX1JJR0hUIiwgIlRPS19PUF9MRUZUIiwgIicr
JyIsCiAgICInLSciLCAiJyonIiwgIicvJyIsICInJSciLCAiVE9LX1VOQVJZIiwgIichJyIsICIn
ficiLCAiJygnIiwgIicpJyIsCi0gICIkYWNjZXB0IiwgImlucHV0IiwgImV4cHJlc3Npb24iLCBZ
WV9OVUxMUFRSCisgICIkYWNjZXB0IiwgImlucHV0IiwgImV4cHJlc3Npb24iLCBZWV9OVUxMCiB9
OwogI2VuZGlmCiAKICMgaWZkZWYgWVlQUklOVAotLyogWVlUT0tOVU1bTlVNXSAtLSAoRXh0ZXJu
YWwpIHRva2VuIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIHRoZQotICAgKGludGVybmFsKSBzeW1i
b2wgbnVtYmVyIE5VTSAod2hpY2ggbXVzdCBiZSB0aGF0IG9mIGEgdG9rZW4pLiAgKi8KKy8qIFlZ
VE9LTlVNW1lZTEVYLU5VTV0gLS0gSW50ZXJuYWwgdG9rZW4gbnVtYmVyIGNvcnJlc3BvbmRpbmcg
dG8KKyAgIHRva2VuIFlZTEVYLU5VTS4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5
eXRva251bVtdID0KIHsKICAgICAgICAwLCAgIDI1NiwgICAyNTcsICAgMjU4LCAgIDI1OSwgICAy
NjAsICAgMTI0LCAgICA5NCwgICAgMzgsICAgMjYxLApAQCAtNTE5LDE4ICs1MzMsNDQgQEAgc3Rh
dGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXl0b2tudW1bXSA9CiB9OwogIyBlbmRpZgogCi0jZGVm
aW5lIFlZUEFDVF9OSU5GIC0xMQorLyogWVlSMVtZWU5dIC0tIFN5bWJvbCBudW1iZXIgb2Ygc3lt
Ym9sIHRoYXQgcnVsZSBZWU4gZGVyaXZlcy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4
IHl5cjFbXSA9Cit7CisgICAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMjksICAgIDI5
LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOSwgICAgMjksICAg
IDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LAorICAgICAgMjks
ICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjkKK307CiAKLSNkZWZpbmUg
eXlwYWN0X3ZhbHVlX2lzX2RlZmF1bHQoWXlzdGF0ZSkgXAotICAoISEoKFl5c3RhdGUpID09ICgt
MTEpKSkKKy8qIFlZUjJbWVlOXSAtLSBOdW1iZXIgb2Ygc3ltYm9scyBjb21wb3NpbmcgcmlnaHQg
aGFuZCBzaWRlIG9mIHJ1bGUgWVlOLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXly
MltdID0KK3sKKyAgICAgICAwLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMywgICAgIDMsICAg
ICAzLCAgICAgMywgICAgIDMsICAgICAzLAorICAgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMs
ICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsCisgICAgICAgMywgICAg
IDMsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMworfTsKIAotI2RlZmluZSBZWVRB
QkxFX05JTkYgLTEKKy8qIFlZREVGQUNUW1NUQVRFLU5BTUVdIC0tIERlZmF1bHQgcmVkdWN0aW9u
IG51bWJlciBpbiBzdGF0ZSBTVEFURS1OVU0uCisgICBQZXJmb3JtZWQgd2hlbiBZWVRBQkxFIGRv
ZXNuJ3Qgc3BlY2lmeSBzb21ldGhpbmcgZWxzZSB0byBkby4gIFplcm8KKyAgIG1lYW5zIHRoZSBk
ZWZhdWx0IGlzIGFuIGVycm9yLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlkZWZh
Y3RbXSA9Cit7CisgICAgICAgMCwgICAgIDMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAyLCAgICAyNSwKKyAgICAgIDI0LCAgICAyMiwgICAgMjMsICAgICAw
LCAgICAgMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNiwgICAgIDQsICAgICA1LCAgICAgNiwg
ICAgIDcsICAgICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxNCwgICAgMTMsICAgIDExLCAgICAx
MiwgICAgMTUsICAgIDE2LCAgICAxOCwgICAgMTcsICAgIDIxLAorICAgICAgMjAsICAgIDE5Cit9
OwogCi0jZGVmaW5lIHl5dGFibGVfdmFsdWVfaXNfZXJyb3IoWXl0YWJsZV92YWx1ZSkgXAotICAw
CisvKiBZWURFRkdPVE9bTlRFUk0tTlVNXS4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDgg
eXlkZWZnb3RvW10gPQoreworICAgICAgLTEsICAgICA3LCAgICAgOAorfTsKIAotICAvKiBZWVBB
Q1RbU1RBVEUtTlVNXSAtLSBJbmRleCBpbiBZWVRBQkxFIG9mIHRoZSBwb3J0aW9uIGRlc2NyaWJp
bmcKLSAgICAgU1RBVEUtTlVNLiAgKi8KKy8qIFlZUEFDVFtTVEFURS1OVU1dIC0tIEluZGV4IGlu
IFlZVEFCTEUgb2YgdGhlIHBvcnRpb24gZGVzY3JpYmluZworICAgU1RBVEUtTlVNLiAgKi8KKyNk
ZWZpbmUgWVlQQUNUX05JTkYgLTExCiBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cGFjdFtd
ID0KIHsKICAgICAgIDQ2LCAgIC0xMSwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2
LCAgICAxMiwgICAgNjgsICAgLTExLApAQCAtNTQxLDM0ICs1ODEsMTYgQEAgc3RhdGljIGNvbnN0
IHl5dHlwZV9pbnQxNiB5eXBhY3RbXSA9CiAgICAgIC0xMSwgICAtMTEKIH07CiAKLSAgLyogWVlE
RUZBQ1RbU1RBVEUtTlVNXSAtLSBEZWZhdWx0IHJlZHVjdGlvbiBudW1iZXIgaW4gc3RhdGUgU1RB
VEUtTlVNLgotICAgICBQZXJmb3JtZWQgd2hlbiBZWVRBQkxFIGRvZXMgbm90IHNwZWNpZnkgc29t
ZXRoaW5nIGVsc2UgdG8gZG8uICBaZXJvCi0gICAgIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuIGVy
cm9yLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlkZWZhY3RbXSA9Ci17Ci0gICAg
ICAgMCwgICAgIDMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAyLCAgICAyNSwKLSAgICAgIDI0LCAgICAyMiwgICAgMjMsICAgICAwLCAgICAgMSwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAyNiwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAg
ICAxMCwKLSAgICAgICA5LCAgICAxNCwgICAgMTMsICAgIDEyLCAgICAxMSwgICAgMTYsICAgIDE1
LCAgICAxOCwgICAgMTcsICAgIDIxLAotICAgICAgMjAsICAgIDE5Ci19OwotCi0gIC8qIFlZUEdP
VE9bTlRFUk0tTlVNXS4gICovCisvKiBZWVBHT1RPW05URVJNLU5VTV0uICAqLwogc3RhdGljIGNv
bnN0IHl5dHlwZV9pbnQ4IHl5cGdvdG9bXSA9CiB7CiAgICAgIC0xMSwgICAtMTEsICAgIC0yCiB9
OwogCi0gIC8qIFlZREVGR09UT1tOVEVSTS1OVU1dLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVf
aW50OCB5eWRlZmdvdG9bXSA9Ci17Ci0gICAgICAtMSwgICAgIDcsICAgICA4Ci19OwotCi0gIC8q
IFlZVEFCTEVbWVlQQUNUW1NUQVRFLU5VTV1dIC0tIFdoYXQgdG8gZG8gaW4gc3RhdGUgU1RBVEUt
TlVNLiAgSWYKLSAgICAgcG9zaXRpdmUsIHNoaWZ0IHRoYXQgdG9rZW4uICBJZiBuZWdhdGl2ZSwg
cmVkdWNlIHRoZSBydWxlIHdob3NlCi0gICAgIG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJZiBZ
WVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci4gICovCisvKiBZWVRBQkxFW1lZUEFDVFtTVEFURS1O
VU1dXS4gIFdoYXQgdG8gZG8gaW4gc3RhdGUgU1RBVEUtTlVNLiAgSWYKKyAgIHBvc2l0aXZlLCBz
aGlmdCB0aGF0IHRva2VuLiAgSWYgbmVnYXRpdmUsIHJlZHVjZSB0aGUgcnVsZSB3aGljaAorICAg
bnVtYmVyIGlzIHRoZSBvcHBvc2l0ZS4gIElmIFlZVEFCTEVfTklORiwgc3ludGF4IGVycm9yLiAg
Ki8KKyNkZWZpbmUgWVlUQUJMRV9OSU5GIC0xCiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5
dGFibGVbXSA9CiB7CiAgICAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDI2
LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKQEAgLTU5MSw2ICs2MTMsMTIgQEAgc3RhdGlj
IGNvbnN0IHl5dHlwZV91aW50OCB5eXRhYmxlW10gPQogICAgICAgMjcsICAgIDI4LCAgICAyOSwg
ICAgMzAsICAgIDMxLCAgICAzMgogfTsKIAorI2RlZmluZSB5eXBhY3RfdmFsdWVfaXNfZGVmYXVs
dChZeXN0YXRlKSBcCisgICghISgoWXlzdGF0ZSkgPT0gKC0xMSkpKQorCisjZGVmaW5lIHl5dGFi
bGVfdmFsdWVfaXNfZXJyb3IoWXl0YWJsZV92YWx1ZSkgXAorICBZWUlEICgwKQorCiBzdGF0aWMg
Y29uc3QgeXl0eXBlX2ludDggeXljaGVja1tdID0KIHsKICAgICAgICAyLCAgICAgMywgICAgIDQs
ICAgICA1LCAgICAgNiwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LApAQCAtNjEz
LDggKzY0MSw4IEBAIHN0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eWNoZWNrW10gPQogICAgICAg
MTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMQogfTsKIAotICAvKiBZWVNUT1Nb
U1RBVEUtTlVNXSAtLSBUaGUgKGludGVybmFsIG51bWJlciBvZiB0aGUpIGFjY2Vzc2luZwotICAg
ICBzeW1ib2wgb2Ygc3RhdGUgU1RBVEUtTlVNLiAgKi8KKy8qIFlZU1RPU1tTVEFURS1OVU1dIC0t
IFRoZSAoaW50ZXJuYWwgbnVtYmVyIG9mIHRoZSkgYWNjZXNzaW5nCisgICBzeW1ib2wgb2Ygc3Rh
dGUgU1RBVEUtTlVNLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlzdG9zW10gPQog
ewogICAgICAgIDAsICAgICAzLCAgICAxNywgICAgMTgsICAgIDIzLCAgICAyNCwgICAgMjUsICAg
IDI4LCAgICAyOSwgICAgMjksCkBAIC02MjUsMzIgKzY1MywzMCBAQCBzdGF0aWMgY29uc3QgeXl0
eXBlX3VpbnQ4IHl5c3Rvc1tdID0KICAgICAgIDI5LCAgICAyOQogfTsKIAotICAvKiBZWVIxW1lZ
Tl0gLS0gU3ltYm9sIG51bWJlciBvZiBzeW1ib2wgdGhhdCBydWxlIFlZTiBkZXJpdmVzLiAgKi8K
LXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlyMVtdID0KLXsKLSAgICAgICAwLCAgICAyNywg
ICAgMjgsICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LAot
ICAgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5
LCAgICAyOSwgICAgMjksCi0gICAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAg
IDI5LCAgICAyOQotfTsKLQotICAvKiBZWVIyW1lZTl0gLS0gTnVtYmVyIG9mIHN5bWJvbHMgb24g
dGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiBydWxlIFlZTi4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBl
X3VpbnQ4IHl5cjJbXSA9Ci17Ci0gICAgICAgMCwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDMs
ICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywKLSAgICAgICAzLCAgICAgMywgICAg
IDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLAotICAg
ICAgIDMsICAgICAzLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDMKLX07Ci0KLQot
I2RlZmluZSB5eWVycm9rICAgICAgICAgKHl5ZXJyc3RhdHVzID0gMCkKLSNkZWZpbmUgeXljbGVh
cmluICAgICAgICh5eWNoYXIgPSBZWUVNUFRZKQotI2RlZmluZSBZWUVNUFRZICAgICAgICAgKC0y
KQotI2RlZmluZSBZWUVPRiAgICAgICAgICAgMAotCi0jZGVmaW5lIFlZQUNDRVBUICAgICAgICBn
b3RvIHl5YWNjZXB0bGFiCi0jZGVmaW5lIFlZQUJPUlQgICAgICAgICBnb3RvIHl5YWJvcnRsYWIK
LSNkZWZpbmUgWVlFUlJPUiAgICAgICAgIGdvdG8geXllcnJvcmxhYgotCisjZGVmaW5lIHl5ZXJy
b2sJCSh5eWVycnN0YXR1cyA9IDApCisjZGVmaW5lIHl5Y2xlYXJpbgkoeXljaGFyID0gWVlFTVBU
WSkKKyNkZWZpbmUgWVlFTVBUWQkJKC0yKQorI2RlZmluZSBZWUVPRgkJMAorCisjZGVmaW5lIFlZ
QUNDRVBUCWdvdG8geXlhY2NlcHRsYWIKKyNkZWZpbmUgWVlBQk9SVAkJZ290byB5eWFib3J0bGFi
CisjZGVmaW5lIFlZRVJST1IJCWdvdG8geXllcnJvcmxhYgorCisKKy8qIExpa2UgWVlFUlJPUiBl
eGNlcHQgZG8gY2FsbCB5eWVycm9yLiAgVGhpcyByZW1haW5zIGhlcmUgdGVtcG9yYXJpbHkKKyAg
IHRvIGVhc2UgdGhlIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBtZWFuaW5nIG9mIFlZRVJST1IsIGZv
ciBHQ0MuCisgICBPbmNlIEdDQyB2ZXJzaW9uIDIgaGFzIHN1cHBsYW50ZWQgdmVyc2lvbiAxLCB0
aGlzIGNhbiBnby4gIEhvd2V2ZXIsCisgICBZWUZBSUwgYXBwZWFycyB0byBiZSBpbiB1c2UuICBO
ZXZlcnRoZWxlc3MsIGl0IGlzIGZvcm1hbGx5IGRlcHJlY2F0ZWQKKyAgIGluIEJpc29uIDIuNC4y
J3MgTkVXUyBlbnRyeSwgd2hlcmUgYSBwbGFuIHRvIHBoYXNlIGl0IG91dCBpcworICAgZGlzY3Vz
c2VkLiAgKi8KKworI2RlZmluZSBZWUZBSUwJCWdvdG8geXllcnJsYWIKKyNpZiBkZWZpbmVkIFlZ
RkFJTAorICAvKiBUaGlzIGlzIGhlcmUgdG8gc3VwcHJlc3Mgd2FybmluZ3MgZnJvbSB0aGUgR0ND
IGNwcCdzCisgICAgIC1XdW51c2VkLW1hY3Jvcy4gIE5vcm1hbGx5IHdlIGRvbid0IHdvcnJ5IGFi
b3V0IHRoYXQgd2FybmluZywgYnV0CisgICAgIHNvbWUgdXNlcnMgZG8sIGFuZCB3ZSB3YW50IHRv
IG1ha2UgaXQgZWFzeSBmb3IgdXNlcnMgdG8gcmVtb3ZlCisgICAgIFlZRkFJTCB1c2VzLCB3aGlj
aCB3aWxsIHByb2R1Y2Ugd2FybmluZ3MgZnJvbSBCaXNvbiAyLjUuICAqLworI2VuZGlmCiAKICNk
ZWZpbmUgWVlSRUNPVkVSSU5HKCkgICghIXl5ZXJyc3RhdHVzKQogCkBAIC02NjcsMTUgKzY5Mywy
NyBAQCBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAogICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICB5eWVycm9yIChjb250ZXh0
LCBZWV8oInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiKSk7IFwKLSAgICAgIFlZRVJST1I7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotd2hpbGUgKDApCisgICAgICBZWUVSUk9SOwkJCQkJCQlcCisgICAgfQkJCQkJCQkJXAor
d2hpbGUgKFlZSUQgKDApKQogCiAvKiBFcnJvciB0b2tlbiBudW1iZXIgKi8KLSNkZWZpbmUgWVlU
RVJST1IgICAgICAgIDEKLSNkZWZpbmUgWVlFUlJDT0RFICAgICAgIDI1NgorI2RlZmluZSBZWVRF
UlJPUgkxCisjZGVmaW5lIFlZRVJSQ09ERQkyNTYKIAogCisvKiBUaGlzIG1hY3JvIGlzIHByb3Zp
ZGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAqLworI2lmbmRlZiBZWV9MT0NBVElPTl9Q
UklOVAorIyBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKSAoKHZvaWQpIDApCisj
ZW5kaWYKKworCisvKiBZWUxFWCAtLSBjYWxsaW5nIGB5eWxleCcgd2l0aCB0aGUgcmlnaHQgYXJn
dW1lbnRzLiAgKi8KKyNpZmRlZiBZWUxFWF9QQVJBTQorIyBkZWZpbmUgWVlMRVggeXlsZXggKCZ5
eWx2YWwsIFlZTEVYX1BBUkFNKQorI2Vsc2UKKyMgZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFs
LCBjb250ZXh0KQorI2VuZGlmCiAKIC8qIEVuYWJsZSBkZWJ1Z2dpbmcgaWYgcmVxdWVzdGVkLiAg
Ki8KICNpZiBZWURFQlVHCkBAIC02ODUsNDcgKzcyMyw1OCBAQCB3aGlsZSAoMCkKICMgIGRlZmlu
ZSBZWUZQUklOVEYgZnByaW50ZgogIyBlbmRpZgogCi0jIGRlZmluZSBZWURQUklOVEYoQXJncykg
ICAgICAgICAgICAgICAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgWVlGUFJJTlRGIEFyZ3M7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi19IHdoaWxlICgwKQorIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCQkJXAorZG8gewkJ
CQkJCVwKKyAgaWYgKHl5ZGVidWcpCQkJCQlcCisgICAgWVlGUFJJTlRGIEFyZ3M7CQkJCVwKK30g
d2hpbGUgKFlZSUQgKDApKQogCi0vKiBUaGlzIG1hY3JvIGlzIHByb3ZpZGVkIGZvciBiYWNrd2Fy
ZCBjb21wYXRpYmlsaXR5LiAqLwotI2lmbmRlZiBZWV9MT0NBVElPTl9QUklOVAotIyBkZWZpbmUg
WVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKSAoKHZvaWQpIDApCi0jZW5kaWYKKyMgZGVmaW5l
IFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKQkJCSAgXAorZG8g
ewkJCQkJCQkJCSAgXAorICBpZiAoeXlkZWJ1ZykJCQkJCQkJCSAgXAorICAgIHsJCQkJCQkJCQkg
IFwKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgVGl0bGUpOwkJCQkJICBcCisgICAg
ICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwJCQkJCQkgIFwKKwkJICBUeXBlLCBWYWx1ZSwgY29u
dGV4dCk7IFwKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsJCQkJCQkgIFwKKyAgICB9
CQkJCQkJCQkJICBcCit9IHdoaWxlIChZWUlEICgwKSkKIAogCi0jIGRlZmluZSBZWV9TWU1CT0xf
UFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikgICAgICAgICAgICAgICAgICAgIFwK
LWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgVGl0bGUpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAg
ICAgICBUeXBlLCBWYWx1ZSwgY29udGV4dCk7IFwKLSAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAi
XG4iKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi19IHdoaWxlICgwKQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS4KLXwgUHJpbnQgdGhpcyBzeW1ib2wncyB2YWx1ZSBvbiBZWU9VVFBV
VC4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZ
T1VUUFVULiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorLypBUkdT
VVNFRCovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwK
KyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQogc3RhdGlj
IHZvaWQKIHl5X3N5bWJvbF92YWx1ZV9wcmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUs
IFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcCwgQ29udGV4dCAqY29udGV4dCkKKyNlbHNl
CitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5
eXZhbHVlcCwgY29udGV4dCkKKyAgICBGSUxFICp5eW91dHB1dDsKKyAgICBpbnQgeXl0eXBlOwor
ICAgIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcDsKKyAgICBDb250ZXh0ICpjb250ZXh0
OworI2VuZGlmCiB7CiAgIEZJTEUgKnl5byA9IHl5b3V0cHV0OwogICBZWVVTRSAoeXlvKTsKLSAg
WVlVU0UgKGNvbnRleHQpOwogICBpZiAoIXl5dmFsdWVwKQogICAgIHJldHVybjsKKyAgWVlVU0Ug
KGNvbnRleHQpOwogIyBpZmRlZiBZWVBSSU5UCiAgIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCiAg
ICAgWVlQUklOVCAoeXlvdXRwdXQsIHl5dG9rbnVtW3l5dHlwZV0sICp5eXZhbHVlcCk7CisjIGVs
c2UKKyAgWVlVU0UgKHl5b3V0cHV0KTsKICMgZW5kaWYKLSAgWVlVU0UgKHl5dHlwZSk7CisgIHN3
aXRjaCAoeXl0eXBlKQorICAgIHsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAg
IH0KIH0KIAogCkBAIC03MzMsMTEgKzc4MiwyMyBAQCB5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKEZJ
TEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZQog
fCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovCiAKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5
X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19W
RVIpCiBzdGF0aWMgdm9pZAogeXlfc3ltYm9sX3ByaW50IChGSUxFICp5eW91dHB1dCwgaW50IHl5
dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwLCBDb250ZXh0ICpjb250ZXh0KQor
I2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5
dmFsdWVwLCBjb250ZXh0KQorICAgIEZJTEUgKnl5b3V0cHV0OworICAgIGludCB5eXR5cGU7Cisg
ICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOworICAgIENvbnRleHQgKmNvbnRleHQ7
CisjZW5kaWYKIHsKLSAgWVlGUFJJTlRGICh5eW91dHB1dCwgIiVzICVzICgiLAotICAgICAgICAg
ICAgIHl5dHlwZSA8IFlZTlRPS0VOUyA/ICJ0b2tlbiIgOiAibnRlcm0iLCB5eXRuYW1lW3l5dHlw
ZV0pOworICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQorICAgIFlZRlBSSU5URiAoeXlvdXRwdXQs
ICJ0b2tlbiAlcyAoIiwgeXl0bmFtZVt5eXR5cGVdKTsKKyAgZWxzZQorICAgIFlZRlBSSU5URiAo
eXlvdXRwdXQsICJudGVybSAlcyAoIiwgeXl0bmFtZVt5eXR5cGVdKTsKIAogICB5eV9zeW1ib2xf
dmFsdWVfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KTsKICAgWVlG
UFJJTlRGICh5eW91dHB1dCwgIikiKTsKQEAgLTc0OCw4ICs4MDksMTYgQEAgeXlfc3ltYm9sX3By
aW50IChGSUxFICp5eW91dHB1dCwgaW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5
dmFsdWVwLCBDb24KIHwgVE9QIChpbmNsdWRlZCkuICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKyNpZiAoZGVmaW5lZCBf
X1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3Bs
dXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCiBzdGF0aWMgdm9pZAogeXlfc3RhY2tfcHJpbnQg
KHl5dHlwZV9pbnQxNiAqeXlib3R0b20sIHl5dHlwZV9pbnQxNiAqeXl0b3ApCisjZWxzZQorc3Rh
dGljIHZvaWQKK3l5X3N0YWNrX3ByaW50ICh5eWJvdHRvbSwgeXl0b3ApCisgICAgeXl0eXBlX2lu
dDE2ICp5eWJvdHRvbTsKKyAgICB5eXR5cGVfaW50MTYgKnl5dG9wOworI2VuZGlmCiB7CiAgIFlZ
RlBSSU5URiAoc3RkZXJyLCAiU3RhY2sgbm93Iik7CiAgIGZvciAoOyB5eWJvdHRvbSA8PSB5eXRv
cDsgeXlib3R0b20rKykKQEAgLTc2MCw0MiArODI5LDUwIEBAIHl5X3N0YWNrX3ByaW50ICh5eXR5
cGVfaW50MTYgKnl5Ym90dG9tLCB5eXR5cGVfaW50MTYgKnl5dG9wKQogICBZWUZQUklOVEYgKHN0
ZGVyciwgIlxuIik7CiB9CiAKLSMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB5eV9z
dGFja19wcmludCAoKEJvdHRvbSksIChUb3ApKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci19IHdoaWxlICgwKQorIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApCQkJCVwK
K2RvIHsJCQkJCQkJCVwKKyAgaWYgKHl5ZGVidWcpCQkJCQkJCVwKKyAgICB5eV9zdGFja19wcmlu
dCAoKEJvdHRvbSksIChUb3ApKTsJCQkJXAorfSB3aGlsZSAoWVlJRCAoMCkpCiAKIAogLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IFJlcG9ydCB0
aGF0IHRoZSBZWVJVTEUgaXMgZ29pbmcgdG8gYmUgcmVkdWNlZC4gIHwKIGAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisjaWYgKGRlZmluZWQgX19T
VERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVz
cGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQogc3RhdGljIHZvaWQKLXl5X3JlZHVjZV9wcmludCAo
eXl0eXBlX2ludDE2ICp5eXNzcCwgWVlTVFlQRSAqeXl2c3AsIGludCB5eXJ1bGUsIENvbnRleHQg
KmNvbnRleHQpCit5eV9yZWR1Y2VfcHJpbnQgKFlZU1RZUEUgKnl5dnNwLCBpbnQgeXlydWxlLCBD
b250ZXh0ICpjb250ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9yZWR1Y2VfcHJpbnQgKHl5
dnNwLCB5eXJ1bGUsIGNvbnRleHQpCisgICAgWVlTVFlQRSAqeXl2c3A7CisgICAgaW50IHl5cnVs
ZTsKKyAgICBDb250ZXh0ICpjb250ZXh0OworI2VuZGlmCiB7Ci0gIHVuc2lnbmVkIGxvbmcgaW50
IHl5bG5vID0geXlybGluZVt5eXJ1bGVdOwogICBpbnQgeXlucmhzID0geXlyMlt5eXJ1bGVdOwog
ICBpbnQgeXlpOworICB1bnNpZ25lZCBsb25nIGludCB5eWxubyA9IHl5cmxpbmVbeXlydWxlXTsK
ICAgWVlGUFJJTlRGIChzdGRlcnIsICJSZWR1Y2luZyBzdGFjayBieSBydWxlICVkIChsaW5lICVs
dSk6XG4iLAotICAgICAgICAgICAgIHl5cnVsZSAtIDEsIHl5bG5vKTsKKwkgICAgIHl5cnVsZSAt
IDEsIHl5bG5vKTsKICAgLyogVGhlIHN5bWJvbHMgYmVpbmcgcmVkdWNlZC4gICovCiAgIGZvciAo
eXlpID0gMDsgeXlpIDwgeXlucmhzOyB5eWkrKykKICAgICB7CiAgICAgICBZWUZQUklOVEYgKHN0
ZGVyciwgIiAgICQlZCA9ICIsIHl5aSArIDEpOwotICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRl
cnIsCi0gICAgICAgICAgICAgICAgICAgICAgIHl5c3Rvc1t5eXNzcFt5eWkgKyAxIC0geXlucmhz
XV0sCi0gICAgICAgICAgICAgICAgICAgICAgICYoeXl2c3BbKHl5aSArIDEpIC0gKHl5bnJocyld
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgY29udGV4
dCk7CisgICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwgeXlyaHNbeXlwcmhzW3l5cnVsZV0g
KyB5eWldLAorCQkgICAgICAgJih5eXZzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0pCisJCSAgICAg
ICAJCSAgICAgICAsIGNvbnRleHQpOwogICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwog
ICAgIH0KIH0KIAotIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpICAgICAgICAgIFwKLWRv
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh5eWRlYnVnKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHl5X3JlZHVjZV9wcmludCAoeXlzc3AsIHl5
dnNwLCBSdWxlLCBjb250ZXh0KTsgXAotfSB3aGlsZSAoMCkKKyMgZGVmaW5lIFlZX1JFRFVDRV9Q
UklOVChSdWxlKQkJXAorZG8gewkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJXAorICAgIHl5X3Jl
ZHVjZV9wcmludCAoeXl2c3AsIFJ1bGUsIGNvbnRleHQpOyBcCit9IHdoaWxlIChZWUlEICgwKSkK
IAogLyogTm9uemVybyBtZWFucyBwcmludCBwYXJzZSB0cmFjZS4gIEl0IGlzIGxlZnQgdW5pbml0
aWFsaXplZCBzbyB0aGF0CiAgICBtdWx0aXBsZSBwYXJzZXJzIGNhbiBjb2V4aXN0LiAgKi8KQEAg
LTgwOSw3ICs4ODYsNyBAQCBpbnQgeXlkZWJ1ZzsKIAogCiAvKiBZWUlOSVRERVBUSCAtLSBpbml0
aWFsIHNpemUgb2YgdGhlIHBhcnNlcidzIHN0YWNrcy4gICovCi0jaWZuZGVmIFlZSU5JVERFUFRI
CisjaWZuZGVmCVlZSU5JVERFUFRICiAjIGRlZmluZSBZWUlOSVRERVBUSCAyMDAKICNlbmRpZgog
CkBAIC04MzIsOCArOTA5LDE1IEBAIGludCB5eWRlYnVnOwogIyAgIGRlZmluZSB5eXN0cmxlbiBz
dHJsZW4KICMgIGVsc2UKIC8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIFlZU1RSLiAgKi8KKyNpZiAo
ZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZp
bmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCiBzdGF0aWMgWVlTSVpFX1QKIHl5
c3RybGVuIChjb25zdCBjaGFyICp5eXN0cikKKyNlbHNlCitzdGF0aWMgWVlTSVpFX1QKK3l5c3Ry
bGVuICh5eXN0cikKKyAgICBjb25zdCBjaGFyICp5eXN0cjsKKyNlbmRpZgogewogICBZWVNJWkVf
VCB5eWxlbjsKICAgZm9yICh5eWxlbiA9IDA7IHl5c3RyW3l5bGVuXTsgeXlsZW4rKykKQEAgLTg0
OSw4ICs5MzMsMTYgQEAgeXlzdHJsZW4gKGNvbnN0IGNoYXIgKnl5c3RyKQogIyAgZWxzZQogLyog
Q29weSBZWVNSQyB0byBZWURFU1QsIHJldHVybmluZyB0aGUgYWRkcmVzcyBvZiB0aGUgdGVybWlu
YXRpbmcgJ1wwJyBpbgogICAgWVlERVNULiAgKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBk
ZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRl
ZmluZWQgX01TQ19WRVIpCiBzdGF0aWMgY2hhciAqCiB5eXN0cGNweSAoY2hhciAqeXlkZXN0LCBj
b25zdCBjaGFyICp5eXNyYykKKyNlbHNlCitzdGF0aWMgY2hhciAqCit5eXN0cGNweSAoeXlkZXN0
LCB5eXNyYykKKyAgICBjaGFyICp5eWRlc3Q7CisgICAgY29uc3QgY2hhciAqeXlzcmM7CisjZW5k
aWYKIHsKICAgY2hhciAqeXlkID0geXlkZXN0OwogICBjb25zdCBjaGFyICp5eXMgPSB5eXNyYzsK
QEAgLTg4MCwyNyArOTcyLDI3IEBAIHl5dG5hbWVyciAoY2hhciAqeXlyZXMsIGNvbnN0IGNoYXIg
Knl5c3RyKQogICAgICAgY2hhciBjb25zdCAqeXlwID0geXlzdHI7CiAKICAgICAgIGZvciAoOzsp
Ci0gICAgICAgIHN3aXRjaCAoKisreXlwKQotICAgICAgICAgIHsKLSAgICAgICAgICBjYXNlICdc
Jyc6Ci0gICAgICAgICAgY2FzZSAnLCc6Ci0gICAgICAgICAgICBnb3RvIGRvX25vdF9zdHJpcF9x
dW90ZXM7Ci0KLSAgICAgICAgICBjYXNlICdcXCc6Ci0gICAgICAgICAgICBpZiAoKisreXlwICE9
ICdcXCcpCi0gICAgICAgICAgICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKLSAgICAgICAg
ICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCi0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IGlmICh5eXJlcykKLSAgICAgICAgICAgICAgeXlyZXNbeXluXSA9ICp5eXA7Ci0gICAgICAgICAg
ICB5eW4rKzsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSAnIic6Ci0gICAg
ICAgICAgICBpZiAoeXlyZXMpCi0gICAgICAgICAgICAgIHl5cmVzW3l5bl0gPSAnXDAnOwotICAg
ICAgICAgICAgcmV0dXJuIHl5bjsKLSAgICAgICAgICB9CisJc3dpdGNoICgqKyt5eXApCisJICB7
CisJICBjYXNlICdcJyc6CisJICBjYXNlICcsJzoKKwkgICAgZ290byBkb19ub3Rfc3RyaXBfcXVv
dGVzOworCisJICBjYXNlICdcXCc6CisJICAgIGlmICgqKyt5eXAgIT0gJ1xcJykKKwkgICAgICBn
b3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7CisJICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCisJICBk
ZWZhdWx0OgorCSAgICBpZiAoeXlyZXMpCisJICAgICAgeXlyZXNbeXluXSA9ICp5eXA7CisJICAg
IHl5bisrOworCSAgICBicmVhazsKKworCSAgY2FzZSAnIic6CisJICAgIGlmICh5eXJlcykKKwkg
ICAgICB5eXJlc1t5eW5dID0gJ1wwJzsKKwkgICAgcmV0dXJuIHl5bjsKKwkgIH0KICAgICBkb19u
b3Rfc3RyaXBfcXVvdGVzOiA7CiAgICAgfQogCkBAIC05MjMsMTEgKzEwMTUsMTEgQEAgc3RhdGlj
IGludAogeXlzeW50YXhfZXJyb3IgKFlZU0laRV9UICp5eW1zZ19hbGxvYywgY2hhciAqKnl5bXNn
LAogICAgICAgICAgICAgICAgIHl5dHlwZV9pbnQxNiAqeXlzc3AsIGludCB5eXRva2VuKQogewot
ICBZWVNJWkVfVCB5eXNpemUwID0geXl0bmFtZXJyIChZWV9OVUxMUFRSLCB5eXRuYW1lW3l5dG9r
ZW5dKTsKKyAgWVlTSVpFX1QgeXlzaXplMCA9IHl5dG5hbWVyciAoWVlfTlVMTCwgeXl0bmFtZVt5
eXRva2VuXSk7CiAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5c2l6ZTA7CiAgIGVudW0geyBZWUVSUk9S
X1ZFUkJPU0VfQVJHU19NQVhJTVVNID0gNSB9OwogICAvKiBJbnRlcm5hdGlvbmFsaXplZCBmb3Jt
YXQgc3RyaW5nLiAqLwotICBjb25zdCBjaGFyICp5eWZvcm1hdCA9IFlZX05VTExQVFI7CisgIGNv
bnN0IGNoYXIgKnl5Zm9ybWF0ID0gWVlfTlVMTDsKICAgLyogQXJndW1lbnRzIG9mIHl5Zm9ybWF0
LiAqLwogICBjaGFyIGNvbnN0ICp5eWFyZ1tZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNXTsK
ICAgLyogTnVtYmVyIG9mIHJlcG9ydGVkIHRva2VucyAob25lIGZvciB0aGUgInVuZXhwZWN0ZWQi
LCBvbmUgcGVyCkBAIC05MzUsNiArMTAyNywxMCBAQCB5eXN5bnRheF9lcnJvciAoWVlTSVpFX1Qg
Knl5bXNnX2FsbG9jLCBjaGFyICoqeXltc2csCiAgIGludCB5eWNvdW50ID0gMDsKIAogICAvKiBU
aGVyZSBhcmUgbWFueSBwb3NzaWJpbGl0aWVzIGhlcmUgdG8gY29uc2lkZXI6CisgICAgIC0gQXNz
dW1lIFlZRkFJTCBpcyBub3QgdXNlZC4gIEl0J3MgdG9vIGZsYXdlZCB0byBjb25zaWRlci4gIFNl
ZQorICAgICAgIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hl
cy8yMDA5LTEyL21zZzAwMDI0Lmh0bWw+CisgICAgICAgZm9yIGRldGFpbHMuICBZWUVSUk9SIGlz
IGZpbmUgYXMgaXQgZG9lcyBub3QgaW52b2tlIHRoaXMKKyAgICAgICBmdW5jdGlvbi4KICAgICAg
LSBJZiB0aGlzIHN0YXRlIGlzIGEgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgZGVmYXVsdCBhY3Rp
b24sIHRoZW4KICAgICAgICB0aGUgb25seSB3YXkgdGhpcyBmdW5jdGlvbiB3YXMgaW52b2tlZCBp
cyBpZiB0aGUgZGVmYXVsdCBhY3Rpb24KICAgICAgICBpcyBhbiBlcnJvciBhY3Rpb24uICBJbiB0
aGF0IGNhc2UsIGRvbid0IGNoZWNrIGZvciBleHBlY3RlZApAQCAtOTg0LDcgKzEwODAsNyBAQCB5
eXN5bnRheF9lcnJvciAoWVlTSVpFX1QgKnl5bXNnX2FsbG9jLCBjaGFyICoqeXltc2csCiAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgeXlhcmdbeXljb3VudCsrXSA9IHl5dG5h
bWVbeXl4XTsKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBZWVNJWkVfVCB5
eXNpemUxID0geXlzaXplICsgeXl0bmFtZXJyIChZWV9OVUxMUFRSLCB5eXRuYW1lW3l5eF0pOwor
ICAgICAgICAgICAgICAgICAgWVlTSVpFX1QgeXlzaXplMSA9IHl5c2l6ZSArIHl5dG5hbWVyciAo
WVlfTlVMTCwgeXl0bmFtZVt5eXhdKTsKICAgICAgICAgICAgICAgICAgIGlmICghICh5eXNpemUg
PD0geXlzaXplMQogICAgICAgICAgICAgICAgICAgICAgICAgICYmIHl5c2l6ZTEgPD0gWVlTVEFD
S19BTExPQ19NQVhJTVVNKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDI7CkBAIC0xMDUx
LDE4ICsxMTQ3LDMzIEBAIHl5c3ludGF4X2Vycm9yIChZWVNJWkVfVCAqeXltc2dfYWxsb2MsIGNo
YXIgKip5eW1zZywKIHwgUmVsZWFzZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgdG8gdGhpcyBzeW1i
b2wuICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LwogCisvKkFSR1NVU0VEKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5
X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19W
RVIpCiBzdGF0aWMgdm9pZAogeXlkZXN0cnVjdCAoY29uc3QgY2hhciAqeXltc2csIGludCB5eXR5
cGUsIFlZU1RZUEUgKnl5dmFsdWVwLCBDb250ZXh0ICpjb250ZXh0KQorI2Vsc2UKK3N0YXRpYyB2
b2lkCit5eWRlc3RydWN0ICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgY29udGV4dCkKKyAgICBj
b25zdCBjaGFyICp5eW1zZzsKKyAgICBpbnQgeXl0eXBlOworICAgIFlZU1RZUEUgKnl5dmFsdWVw
OworICAgIENvbnRleHQgKmNvbnRleHQ7CisjZW5kaWYKIHsKICAgWVlVU0UgKHl5dmFsdWVwKTsK
ICAgWVlVU0UgKGNvbnRleHQpOworCiAgIGlmICgheXltc2cpCiAgICAgeXltc2cgPSAiRGVsZXRp
bmciOwogICBZWV9TWU1CT0xfUFJJTlQgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0
aW9ucCk7CiAKLSAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4KLSAgWVlVU0Ug
KHl5dHlwZSk7Ci0gIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORAorICBzd2l0Y2gg
KHl5dHlwZSkKKyAgICB7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0K
IH0KIAogCkBAIC0xMDcyLDE4ICsxMTgzLDU2IEBAIHl5ZGVzdHJ1Y3QgKGNvbnN0IGNoYXIgKnl5
bXNnLCBpbnQgeXl0eXBlLCBZWVNUWVBFICp5eXZhbHVlcCwgQ29udGV4dCAqY29udGV4dCkKIHwg
eXlwYXJzZS4gIHwKIGAtLS0tLS0tLS0tKi8KIAorI2lmZGVmIFlZUEFSU0VfUEFSQU0KKyNpZiAo
ZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZp
bmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitpbnQKK3l5cGFyc2UgKHZvaWQg
KllZUEFSU0VfUEFSQU0pCisjZWxzZQoraW50Cit5eXBhcnNlIChZWVBBUlNFX1BBUkFNKQorICAg
IHZvaWQgKllZUEFSU0VfUEFSQU07CisjZW5kaWYKKyNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAq
LworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAg
IHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKIGludAogeXlwYXJz
ZSAoQ29udGV4dCAqY29udGV4dCkKKyNlbHNlCitpbnQKK3l5cGFyc2UgKGNvbnRleHQpCisgICAg
Q29udGV4dCAqY29udGV4dDsKKyNlbmRpZgorI2VuZGlmCiB7CiAvKiBUaGUgbG9va2FoZWFkIHN5
bWJvbC4gICovCiBpbnQgeXljaGFyOwogCiAKLS8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUg
bG9va2FoZWFkIHN5bWJvbC4gICovCisjaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiA0MDcgPD0gX19H
TlVDX18gKiAxMDAgKyBfX0dOVUNfTUlOT1JfXworLyogU3VwcHJlc3MgYW4gaW5jb3JyZWN0IGRp
YWdub3N0aWMgYWJvdXQgeXlsdmFsIGJlaW5nIHVuaW5pdGlhbGl6ZWQuICAqLworIyBkZWZpbmUg
WVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4gXAorICAgIF9QcmFnbWEgKCJHQ0Mg
ZGlhZ25vc3RpYyBwdXNoIikgXAorICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVk
IFwiLVd1bmluaXRpYWxpemVkXCIiKVwKKyAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgaWdu
b3JlZCBcIi1XbWF5YmUtdW5pbml0aWFsaXplZFwiIikKKyMgZGVmaW5lIFlZX0lHTk9SRV9NQVlC
RV9VTklOSVRJQUxJWkVEX0VORCBcCisgICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIHBvcCIp
CisjZWxzZQogLyogRGVmYXVsdCB2YWx1ZSB1c2VkIGZvciBpbml0aWFsaXphdGlvbiwgZm9yIHBh
Y2lmeWluZyBvbGRlciBHQ0NzCiAgICBvciBub24tR0NDIGNvbXBpbGVycy4gICovCi1ZWV9JTklU
SUFMX1ZBTFVFIChzdGF0aWMgWVlTVFlQRSB5eXZhbF9kZWZhdWx0OykKLVlZU1RZUEUgeXlsdmFs
IFlZX0lOSVRJQUxfVkFMVUUgKD0geXl2YWxfZGVmYXVsdCk7CitzdGF0aWMgWVlTVFlQRSB5eXZh
bF9kZWZhdWx0OworIyBkZWZpbmUgWVlfSU5JVElBTF9WQUxVRShWYWx1ZSkgPSBWYWx1ZQorI2Vu
ZGlmCisjaWZuZGVmIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOCisjIGRlZmlu
ZSBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTgorIyBkZWZpbmUgWVlfSUdOT1JF
X01BWUJFX1VOSU5JVElBTElaRURfRU5ECisjZW5kaWYKKyNpZm5kZWYgWVlfSU5JVElBTF9WQUxV
RQorIyBkZWZpbmUgWVlfSU5JVElBTF9WQUxVRShWYWx1ZSkgLyogTm90aGluZy4gKi8KKyNlbmRp
ZgorCisvKiBUaGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLwor
WVlTVFlQRSB5eWx2YWwgWVlfSU5JVElBTF9WQUxVRSh5eXZhbF9kZWZhdWx0KTsKIAogICAgIC8q
IE51bWJlciBvZiBzeW50YXggZXJyb3JzIHNvIGZhci4gICovCiAgICAgaW50IHl5bmVycnM7CkBA
IC0xMDkzLDggKzEyNDIsOCBAQCBZWVNUWVBFIHl5bHZhbCBZWV9JTklUSUFMX1ZBTFVFICg9IHl5
dmFsX2RlZmF1bHQpOwogICAgIGludCB5eWVycnN0YXR1czsKIAogICAgIC8qIFRoZSBzdGFja3Mg
YW5kIHRoZWlyIHRvb2xzOgotICAgICAgICd5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMuCi0gICAg
ICAgJ3l5dnMnOiByZWxhdGVkIHRvIHNlbWFudGljIHZhbHVlcy4KKyAgICAgICBgeXlzcyc6IHJl
bGF0ZWQgdG8gc3RhdGVzLgorICAgICAgIGB5eXZzJzogcmVsYXRlZCB0byBzZW1hbnRpYyB2YWx1
ZXMuCiAKICAgICAgICBSZWZlciB0byB0aGUgc3RhY2tzIHRocm91Z2ggc2VwYXJhdGUgcG9pbnRl
cnMsIHRvIGFsbG93IHl5b3ZlcmZsb3cKICAgICAgICB0byByZWFsbG9jYXRlIHRoZW0gZWxzZXdo
ZXJlLiAgKi8KQEAgLTExNjIsMjMgKzEzMTEsMjMgQEAgWVlTVFlQRSB5eWx2YWwgWVlfSU5JVElB
TF9WQUxVRSAoPSB5eXZhbF9kZWZhdWx0KTsKIAogI2lmZGVmIHl5b3ZlcmZsb3cKICAgICAgIHsK
LSAgICAgICAgLyogR2l2ZSB1c2VyIGEgY2hhbmNlIHRvIHJlYWxsb2NhdGUgdGhlIHN0YWNrLiAg
VXNlIGNvcGllcyBvZgotICAgICAgICAgICB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9y
Y2UgdGhlIHJlYWwgb25lcyBpbnRvCi0gICAgICAgICAgIG1lbW9yeS4gICovCi0gICAgICAgIFlZ
U1RZUEUgKnl5dnMxID0geXl2czsKLSAgICAgICAgeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7
Ci0KLSAgICAgICAgLyogRWFjaCBzdGFjayBwb2ludGVyIGFkZHJlc3MgaXMgZm9sbG93ZWQgYnkg
dGhlIHNpemUgb2YgdGhlCi0gICAgICAgICAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGlu
IGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJlIGEKLSAgICAgICAgICAgY29uZGl0aW9uYWwgYXJvdW5k
IGp1c3QgdGhlIHR3byBleHRyYSBhcmdzLCBidXQgdGhhdCBtaWdodAotICAgICAgICAgICBiZSB1
bmRlZmluZWQgaWYgeXlvdmVyZmxvdyBpcyBhIG1hY3JvLiAgKi8KLSAgICAgICAgeXlvdmVyZmxv
dyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCi0gICAgICAgICAgICAgICAgICAgICZ5eXNzMSwg
eXlzaXplICogc2l6ZW9mICgqeXlzc3ApLAotICAgICAgICAgICAgICAgICAgICAmeXl2czEsIHl5
c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKLSAgICAgICAgICAgICAgICAgICAgJnl5c3RhY2tzaXpl
KTsKLQotICAgICAgICB5eXNzID0geXlzczE7Ci0gICAgICAgIHl5dnMgPSB5eXZzMTsKKwkvKiBH
aXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suICBVc2UgY29waWVzIG9m
CisJICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50
bworCSAgIG1lbW9yeS4gICovCisJWVlTVFlQRSAqeXl2czEgPSB5eXZzOworCXl5dHlwZV9pbnQx
NiAqeXlzczEgPSB5eXNzOworCisJLyogRWFjaCBzdGFjayBwb2ludGVyIGFkZHJlc3MgaXMgZm9s
bG93ZWQgYnkgdGhlIHNpemUgb2YgdGhlCisJICAgZGF0YSBpbiB1c2UgaW4gdGhhdCBzdGFjaywg
aW4gYnl0ZXMuICBUaGlzIHVzZWQgdG8gYmUgYQorCSAgIGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0
IHRoZSB0d28gZXh0cmEgYXJncywgYnV0IHRoYXQgbWlnaHQKKwkgICBiZSB1bmRlZmluZWQgaWYg
eXlvdmVyZmxvdyBpcyBhIG1hY3JvLiAgKi8KKwl5eW92ZXJmbG93IChZWV8oIm1lbW9yeSBleGhh
dXN0ZWQiKSwKKwkJICAgICZ5eXNzMSwgeXlzaXplICogc2l6ZW9mICgqeXlzc3ApLAorCQkgICAg
Jnl5dnMxLCB5eXNpemUgKiBzaXplb2YgKCp5eXZzcCksCisJCSAgICAmeXlzdGFja3NpemUpOwor
CisJeXlzcyA9IHl5c3MxOworCXl5dnMgPSB5eXZzMTsKICAgICAgIH0KICNlbHNlIC8qIG5vIHl5
b3ZlcmZsb3cgKi8KICMgaWZuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKQEAgLTExODYsMjIgKzEzMzUs
MjIgQEAgWVlTVFlQRSB5eWx2YWwgWVlfSU5JVElBTF9WQUxVRSAoPSB5eXZhbF9kZWZhdWx0KTsK
ICMgZWxzZQogICAgICAgLyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3duIHdheS4gICovCiAgICAg
ICBpZiAoWVlNQVhERVBUSCA8PSB5eXN0YWNrc2l6ZSkKLSAgICAgICAgZ290byB5eWV4aGF1c3Rl
ZGxhYjsKKwlnb3RvIHl5ZXhoYXVzdGVkbGFiOwogICAgICAgeXlzdGFja3NpemUgKj0gMjsKICAg
ICAgIGlmIChZWU1BWERFUFRIIDwgeXlzdGFja3NpemUpCi0gICAgICAgIHl5c3RhY2tzaXplID0g
WVlNQVhERVBUSDsKKwl5eXN0YWNrc2l6ZSA9IFlZTUFYREVQVEg7CiAKICAgICAgIHsKLSAgICAg
ICAgeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7Ci0gICAgICAgIHVuaW9uIHl5YWxsb2MgKnl5
cHRyID0KLSAgICAgICAgICAodW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZWVNUQUNL
X0JZVEVTICh5eXN0YWNrc2l6ZSkpOwotICAgICAgICBpZiAoISB5eXB0cikKLSAgICAgICAgICBn
b3RvIHl5ZXhoYXVzdGVkbGFiOwotICAgICAgICBZWVNUQUNLX1JFTE9DQVRFICh5eXNzX2FsbG9j
LCB5eXNzKTsKLSAgICAgICAgWVlTVEFDS19SRUxPQ0FURSAoeXl2c19hbGxvYywgeXl2cyk7CisJ
eXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7CisJdW5pb24geXlhbGxvYyAqeXlwdHIgPQorCSAg
KHVuaW9uIHl5YWxsb2MgKikgWVlTVEFDS19BTExPQyAoWVlTVEFDS19CWVRFUyAoeXlzdGFja3Np
emUpKTsKKwlpZiAoISB5eXB0cikKKwkgIGdvdG8geXlleGhhdXN0ZWRsYWI7CisJWVlTVEFDS19S
RUxPQ0FURSAoeXlzc19hbGxvYywgeXlzcyk7CisJWVlTVEFDS19SRUxPQ0FURSAoeXl2c19hbGxv
YywgeXl2cyk7CiAjICB1bmRlZiBZWVNUQUNLX1JFTE9DQVRFCi0gICAgICAgIGlmICh5eXNzMSAh
PSB5eXNzYSkKLSAgICAgICAgICBZWVNUQUNLX0ZSRUUgKHl5c3MxKTsKKwlpZiAoeXlzczEgIT0g
eXlzc2EpCisJICBZWVNUQUNLX0ZSRUUgKHl5c3MxKTsKICAgICAgIH0KICMgZW5kaWYKICNlbmRp
ZiAvKiBubyB5eW92ZXJmbG93ICovCkBAIC0xMjEwLDEwICsxMzU5LDEwIEBAIFlZU1RZUEUgeXls
dmFsIFlZX0lOSVRJQUxfVkFMVUUgKD0geXl2YWxfZGVmYXVsdCk7CiAgICAgICB5eXZzcCA9IHl5
dnMgKyB5eXNpemUgLSAxOwogCiAgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFjayBzaXpl
IGluY3JlYXNlZCB0byAlbHVcbiIsCi0gICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyBp
bnQpIHl5c3RhY2tzaXplKSk7CisJCSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkp
OwogCiAgICAgICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkKLSAgICAgICAg
WVlBQk9SVDsKKwlZWUFCT1JUOwogICAgIH0KIAogICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRl
cmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOwpAQCAtMTI0Miw3ICsxMzkxLDcgQEAgeXliYWNr
dXA6CiAgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkKICAgICB7CiAgICAgICBZWURQUklOVEYgKChz
dGRlcnIsICJSZWFkaW5nIGEgdG9rZW46ICIpKTsKLSAgICAgIHl5Y2hhciA9IHl5bGV4ICgmeXls
dmFsLCBjb250ZXh0KTsKKyAgICAgIHl5Y2hhciA9IFlZTEVYOwogICAgIH0KIAogICBpZiAoeXlj
aGFyIDw9IFlZRU9GKQpAQCAtMTMwNyw3ICsxNDU2LDcgQEAgeXlyZWR1Y2U6CiAgIHl5bGVuID0g
eXlyMlt5eW5dOwogCiAgIC8qIElmIFlZTEVOIGlzIG5vbnplcm8sIGltcGxlbWVudCB0aGUgZGVm
YXVsdCB2YWx1ZSBvZiB0aGUgYWN0aW9uOgotICAgICAnJCQgPSAkMScuCisgICAgIGAkJCA9ICQx
Jy4KIAogICAgICBPdGhlcndpc2UsIHRoZSBmb2xsb3dpbmcgbGluZSBzZXRzIFlZVkFMIHRvIGdh
cmJhZ2UuCiAgICAgIFRoaXMgYmVoYXZpb3IgaXMgdW5kb2N1bWVudGVkIGFuZCBCaXNvbgpAQCAt
MTMyMywyMTQgKzE0NzIsMTkwIEBAIHl5cmVkdWNlOgogICAgICAgICBjYXNlIDI6CiAKICAgICB7
Ci0gICAgICAgICooY29udGV4dC0+cmVzdWx0KSA9IHN0YXRpY19jYXN0PGludD4oKHl5dnNwWzBd
KSk7CisgICAgICAgICooY29udGV4dC0+cmVzdWx0KSA9IHN0YXRpY19jYXN0PGludD4oKHl5dnNw
WygxKSAtICgxKV0pKTsKICAgICAgICAgWVlBQ0NFUFQ7CiAgICAgfQotCiAgICAgYnJlYWs7CiAK
ICAgY2FzZSA0OgogCiAgICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWy0yXSkgfHwgKHl5
dnNwWzBdKTsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSB8fCAoeXl2c3Bb
KDMpIC0gKDMpXSk7CiAgICAgfQotCiAgICAgYnJlYWs7CiAKICAgY2FzZSA1OgogCiAgICAgewot
ICAgICAgICAoeXl2YWwpID0gKHl5dnNwWy0yXSkgJiYgKHl5dnNwWzBdKTsKKyAgICAgICAgKHl5
dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAmJiAoeXl2c3BbKDMpIC0gKDMpXSk7CiAgICAgfQot
CiAgICAgYnJlYWs7CiAKICAgY2FzZSA2OgogCiAgICAgewotICAgICAgICAoeXl2YWwpID0gKHl5
dnNwWy0yXSkgfCAoeXl2c3BbMF0pOworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgz
KV0pIHwgKHl5dnNwWygzKSAtICgzKV0pOwogICAgIH0KLQogICAgIGJyZWFrOwogCiAgIGNhc2Ug
NzoKIAogICAgIHsKLSAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFstMl0pIF4gKHl5dnNwWzBdKTsK
KyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSBeICh5eXZzcFsoMykgLSAoMyld
KTsKICAgICB9Ci0KICAgICBicmVhazsKIAogICBjYXNlIDg6CiAKICAgICB7Ci0gICAgICAgICh5
eXZhbCkgPSAoeXl2c3BbLTJdKSAmICh5eXZzcFswXSk7CisgICAgICAgICh5eXZhbCkgPSAoeXl2
c3BbKDEpIC0gKDMpXSkgJiAoeXl2c3BbKDMpIC0gKDMpXSk7CiAgICAgfQotCiAgICAgYnJlYWs7
CiAKICAgY2FzZSA5OgogCiAgICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWy0yXSkgIT0g
KHl5dnNwWzBdKTsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAhPSAoeXl2
c3BbKDMpIC0gKDMpXSk7CiAgICAgfQotCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDoKIAogICAg
IHsKLSAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFstMl0pID09ICh5eXZzcFswXSk7CisgICAgICAg
ICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPT0gKHl5dnNwWygzKSAtICgzKV0pOwogICAg
IH0KLQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTE6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbCkg
PSAoeXl2c3BbLTJdKSA+PSAoeXl2c3BbMF0pOworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygx
KSAtICgzKV0pID49ICh5eXZzcFsoMykgLSAoMyldKTsKICAgICB9Ci0KICAgICBicmVhazsKIAog
ICBjYXNlIDEyOgogCiAgICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWy0yXSkgPD0gKHl5
dnNwWzBdKTsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA8PSAoeXl2c3Bb
KDMpIC0gKDMpXSk7CiAgICAgfQotCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzoKIAogICAgIHsK
LSAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFstMl0pID4gKHl5dnNwWzBdKTsKKyAgICAgICAgKHl5
dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA+ICh5eXZzcFsoMykgLSAoMyldKTsKICAgICB9Ci0K
ICAgICBicmVhazsKIAogICBjYXNlIDE0OgogCiAgICAgewotICAgICAgICAoeXl2YWwpID0gKHl5
dnNwWy0yXSkgPCAoeXl2c3BbMF0pOworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgz
KV0pIDwgKHl5dnNwWygzKSAtICgzKV0pOwogICAgIH0KLQogICAgIGJyZWFrOwogCiAgIGNhc2Ug
MTU6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3BbLTJdKSA+PiAoeXl2c3BbMF0p
OworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pID4+ICh5eXZzcFsoMykgLSAo
MyldKTsKICAgICB9Ci0KICAgICBicmVhazsKIAogICBjYXNlIDE2OgogCiAgICAgewotICAgICAg
ICAoeXl2YWwpID0gKHl5dnNwWy0yXSkgPDwgKHl5dnNwWzBdKTsKKyAgICAgICAgKHl5dmFsKSA9
ICh5eXZzcFsoMSkgLSAoMyldKSA8PCAoeXl2c3BbKDMpIC0gKDMpXSk7CiAgICAgfQotCiAgICAg
YnJlYWs7CiAKICAgY2FzZSAxNzoKIAogICAgIHsKLSAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFst
Ml0pIC0gKHl5dnNwWzBdKTsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAt
ICh5eXZzcFsoMykgLSAoMyldKTsKICAgICB9Ci0KICAgICBicmVhazsKIAogICBjYXNlIDE4Ogog
CiAgICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWy0yXSkgKyAoeXl2c3BbMF0pOworICAg
ICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICsgKHl5dnNwWygzKSAtICgzKV0pOwog
ICAgIH0KLQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTk6CiAKICAgICB7Ci0gICAgICAgIGlmICgo
eXl2c3BbMF0pID09IDApIHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMykgLSAoMyldKSA9PSAwKSB7
CiAgICAgICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyZWFtOwotICAgICAgICAgICAgc3Ry
ZWFtIDw8ICh5eXZzcFstMl0pIDw8ICIgJSAiIDw8ICh5eXZzcFswXSk7CisgICAgICAgICAgICBz
dHJlYW0gPDwgKHl5dnNwWygxKSAtICgzKV0pIDw8ICIgJSAiIDw8ICh5eXZzcFsoMykgLSAoMyld
KTsKICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBzdHJlYW0uc3RyKCk7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RElWSVNJ
T05fQllfWkVSTywKKyAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6
OkRpYWdub3N0aWNzOjpQUF9ESVZJU0lPTl9CWV9aRVJPLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuY19zdHIoKSk7CiAgICAgICAgICAg
ICBZWUFCT1JUOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgKHl5dmFsKSA9ICh5eXZz
cFstMl0pICUgKHl5dnNwWzBdKTsKKyAgICAgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0g
KDMpXSkgJSAoeXl2c3BbKDMpIC0gKDMpXSk7CiAgICAgICAgIH0KICAgICB9Ci0KICAgICBicmVh
azsKIAogICBjYXNlIDIwOgogCiAgICAgewotICAgICAgICBpZiAoKHl5dnNwWzBdKSA9PSAwKSB7
CisgICAgICAgIGlmICgoeXl2c3BbKDMpIC0gKDMpXSkgPT0gMCkgewogICAgICAgICAgICAgc3Rk
Ojpvc3RyaW5nc3RyZWFtIHN0cmVhbTsKLSAgICAgICAgICAgIHN0cmVhbSA8PCAoeXl2c3BbLTJd
KSA8PCAiIC8gIiA8PCAoeXl2c3BbMF0pOworICAgICAgICAgICAgc3RyZWFtIDw8ICh5eXZzcFso
MSkgLSAoMyldKSA8PCAiIC8gIiA8PCAoeXl2c3BbKDMpIC0gKDMpXSk7CiAgICAgICAgICAgICBz
dGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0cigpOwotICAgICAgICAgICAgY29udGV4dC0+ZGlh
Z25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCisgICAg
ICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6UFBf
RElWSVNJT05fQllfWkVSTywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0LmNfc3RyKCkpOwogICAgICAgICAgICAgWVlBQk9SVDsKICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbLTJdKSAvICh5eXZzcFsw
XSk7CisgICAgICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIC8gKHl5dnNwWygz
KSAtICgzKV0pOwogICAgICAgICB9CiAgICAgfQotCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMToK
IAogICAgIHsKLSAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFstMl0pICogKHl5dnNwWzBdKTsKKyAg
ICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAqICh5eXZzcFsoMykgLSAoMyldKTsK
ICAgICB9Ci0KICAgICBicmVhazsKIAogICBjYXNlIDIyOgogCiAgICAgewotICAgICAgICAoeXl2
YWwpID0gISAoeXl2c3BbMF0pOworICAgICAgICAoeXl2YWwpID0gISAoeXl2c3BbKDIpIC0gKDIp
XSk7CiAgICAgfQotCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMzoKIAogICAgIHsKLSAgICAgICAg
KHl5dmFsKSA9IH4gKHl5dnNwWzBdKTsKKyAgICAgICAgKHl5dmFsKSA9IH4gKHl5dnNwWygyKSAt
ICgyKV0pOwogICAgIH0KLQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjQ6CiAKICAgICB7Ci0gICAg
ICAgICh5eXZhbCkgPSAtICh5eXZzcFswXSk7CisgICAgICAgICh5eXZhbCkgPSAtICh5eXZzcFso
MikgLSAoMildKTsKICAgICB9Ci0KICAgICBicmVhazsKIAogICBjYXNlIDI1OgogCiAgICAgewot
ICAgICAgICAoeXl2YWwpID0gKyAoeXl2c3BbMF0pOworICAgICAgICAoeXl2YWwpID0gKyAoeXl2
c3BbKDIpIC0gKDIpXSk7CiAgICAgfQotCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyNjoKIAogICAg
IHsKLSAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFstMV0pOworICAgICAgICAoeXl2YWwpID0gKHl5
dnNwWygyKSAtICgzKV0pOwogICAgIH0KLQogICAgIGJyZWFrOwogCiAKQEAgLTE1NTYsNyArMTY4
MSw3IEBAIHl5cmVkdWNlOgogCiAgICorK3l5dnNwID0geXl2YWw7CiAKLSAgLyogTm93ICdzaGlm
dCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLiAgRGV0ZXJtaW5lIHdoYXQgc3RhdGUKKyAg
LyogTm93IGBzaGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLiAgRGV0ZXJtaW5lIHdo
YXQgc3RhdGUKICAgICAgdGhhdCBnb2VzIHRvLCBiYXNlZCBvbiB0aGUgc3RhdGUgd2UgcG9wcGVk
IGJhY2sgdG8gYW5kIHRoZSBydWxlCiAgICAgIG51bWJlciByZWR1Y2VkIGJ5LiAgKi8KIApAQCAt
MTU3MSw5ICsxNjk2LDkgQEAgeXlyZWR1Y2U6CiAgIGdvdG8geXluZXdzdGF0ZTsKIAogCi0vKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWVycmxhYiAtLSBoZXJl
IG9uIGRldGVjdGluZyBlcnJvci4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXll
cnJsYWIgLS0gaGVyZSBvbiBkZXRlY3RpbmcgZXJyb3IgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCiB5eWVycmxhYjoKICAgLyogTWFrZSBzdXJlIHdlIGhhdmUgbGF0
ZXN0IGxvb2thaGVhZCB0cmFuc2xhdGlvbi4gIFNlZSBjb21tZW50cyBhdAogICAgICB1c2VyIHNl
bWFudGljIGFjdGlvbnMgZm9yIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS4gICovCkBAIC0xNjI0LDIw
ICsxNzQ5LDIwIEBAIHl5ZXJybGFiOgogICBpZiAoeXllcnJzdGF0dXMgPT0gMykKICAgICB7CiAg
ICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9va2FoZWFkIHRva2Vu
IGFmdGVyIGFuCi0gICAgICAgICBlcnJvciwgZGlzY2FyZCBpdC4gICovCisJIGVycm9yLCBkaXNj
YXJkIGl0LiAgKi8KIAogICAgICAgaWYgKHl5Y2hhciA8PSBZWUVPRikKLSAgICAgICAgewotICAg
ICAgICAgIC8qIFJldHVybiBmYWlsdXJlIGlmIGF0IGVuZCBvZiBpbnB1dC4gICovCi0gICAgICAg
ICAgaWYgKHl5Y2hhciA9PSBZWUVPRikKLSAgICAgICAgICAgIFlZQUJPUlQ7Ci0gICAgICAgIH0K
Kwl7CisJICAvKiBSZXR1cm4gZmFpbHVyZSBpZiBhdCBlbmQgb2YgaW5wdXQuICAqLworCSAgaWYg
KHl5Y2hhciA9PSBZWUVPRikKKwkgICAgWVlBQk9SVDsKKwl9CiAgICAgICBlbHNlCi0gICAgICAg
IHsKLSAgICAgICAgICB5eWRlc3RydWN0ICgiRXJyb3I6IGRpc2NhcmRpbmciLAotICAgICAgICAg
ICAgICAgICAgICAgIHl5dG9rZW4sICZ5eWx2YWwsIGNvbnRleHQpOwotICAgICAgICAgIHl5Y2hh
ciA9IFlZRU1QVFk7Ci0gICAgICAgIH0KKwl7CisJICB5eWRlc3RydWN0ICgiRXJyb3I6IGRpc2Nh
cmRpbmciLAorCQkgICAgICB5eXRva2VuLCAmeXlsdmFsLCBjb250ZXh0KTsKKwkgIHl5Y2hhciA9
IFlZRU1QVFk7CisJfQogICAgIH0KIAogICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2th
aGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKQEAgLTE2NTYsNyArMTc4MSw3IEBA
IHl5ZXJyb3JsYWI6CiAgIGlmICgvKkNPTlNUQ09ORCovIDApCiAgICAgIGdvdG8geXllcnJvcmxh
YjsKIAotICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUgcnVsZSB3aG9zZSBh
Y3Rpb24gdHJpZ2dlcmVkCisgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBy
dWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKICAgICAgdGhpcyBZWUVSUk9SLiAgKi8KICAgWVlQ
T1BTVEFDSyAoeXlsZW4pOwogICB5eWxlbiA9IDA7CkBAIC0xNjY5LDI5ICsxNzk0LDI5IEBAIHl5
ZXJyb3JsYWI6CiB8IHl5ZXJybGFiMSAtLSBjb21tb24gY29kZSBmb3IgYm90aCBzeW50YXggZXJy
b3IgYW5kIFlZRVJST1IuICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiB5eWVycmxhYjE6Ci0gIHl5ZXJyc3RhdHVzID0g
MzsgICAgICAvKiBFYWNoIHJlYWwgdG9rZW4gc2hpZnRlZCBkZWNyZW1lbnRzIHRoaXMuICAqLwor
ICB5eWVycnN0YXR1cyA9IDM7CS8qIEVhY2ggcmVhbCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVudHMg
dGhpcy4gICovCiAKICAgZm9yICg7OykKICAgICB7CiAgICAgICB5eW4gPSB5eXBhY3RbeXlzdGF0
ZV07CiAgICAgICBpZiAoIXl5cGFjdF92YWx1ZV9pc19kZWZhdWx0ICh5eW4pKQotICAgICAgICB7
Ci0gICAgICAgICAgeXluICs9IFlZVEVSUk9SOwotICAgICAgICAgIGlmICgwIDw9IHl5biAmJiB5
eW4gPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXluXSA9PSBZWVRFUlJPUikKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgeXluID0geXl0YWJsZVt5eW5dOwotICAgICAgICAgICAgICBpZiAoMCA8
IHl5bikKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQor
CXsKKwkgIHl5biArPSBZWVRFUlJPUjsKKwkgIGlmICgwIDw9IHl5biAmJiB5eW4gPD0gWVlMQVNU
ICYmIHl5Y2hlY2tbeXluXSA9PSBZWVRFUlJPUikKKwkgICAgeworCSAgICAgIHl5biA9IHl5dGFi
bGVbeXluXTsKKwkgICAgICBpZiAoMCA8IHl5bikKKwkJYnJlYWs7CisJICAgIH0KKwl9CiAKICAg
ICAgIC8qIFBvcCB0aGUgY3VycmVudCBzdGF0ZSBiZWNhdXNlIGl0IGNhbm5vdCBoYW5kbGUgdGhl
IGVycm9yIHRva2VuLiAgKi8KICAgICAgIGlmICh5eXNzcCA9PSB5eXNzKQotICAgICAgICBZWUFC
T1JUOworCVlZQUJPUlQ7CiAKIAogICAgICAgeXlkZXN0cnVjdCAoIkVycm9yOiBwb3BwaW5nIiwK
LSAgICAgICAgICAgICAgICAgIHl5c3Rvc1t5eXN0YXRlXSwgeXl2c3AsIGNvbnRleHQpOworCQkg
IHl5c3Rvc1t5eXN0YXRlXSwgeXl2c3AsIGNvbnRleHQpOwogICAgICAgWVlQT1BTVEFDSyAoMSk7
CiAgICAgICB5eXN0YXRlID0gKnl5c3NwOwogICAgICAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5
c3NwKTsKQEAgLTE3NDIsMTQgKzE4NjcsMTQgQEAgeXlyZXR1cm46CiAgICAgICB5eWRlc3RydWN0
ICgiQ2xlYW51cDogZGlzY2FyZGluZyBsb29rYWhlYWQiLAogICAgICAgICAgICAgICAgICAgeXl0
b2tlbiwgJnl5bHZhbCwgY29udGV4dCk7CiAgICAgfQotICAvKiBEbyBub3QgcmVjbGFpbSB0aGUg
c3ltYm9scyBvZiB0aGUgcnVsZSB3aG9zZSBhY3Rpb24gdHJpZ2dlcmVkCisgIC8qIERvIG5vdCBy
ZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKICAg
ICAgdGhpcyBZWUFCT1JUIG9yIFlZQUNDRVBULiAgKi8KICAgWVlQT1BTVEFDSyAoeXlsZW4pOwog
ICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwogICB3aGlsZSAoeXlzc3AgIT0geXlzcykK
ICAgICB7CiAgICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogcG9wcGluZyIsCi0gICAgICAgICAg
ICAgICAgICB5eXN0b3NbKnl5c3NwXSwgeXl2c3AsIGNvbnRleHQpOworCQkgIHl5c3Rvc1sqeXlz
c3BdLCB5eXZzcCwgY29udGV4dCk7CiAgICAgICBZWVBPUFNUQUNLICgxKTsKICAgICB9CiAjaWZu
ZGVmIHl5b3ZlcmZsb3cKQEAgLTE3NjAsMTEgKzE4ODUsMTQgQEAgeXlyZXR1cm46CiAgIGlmICh5
eW1zZyAhPSB5eW1zZ2J1ZikKICAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKICNlbmRpZgotICBy
ZXR1cm4geXlyZXN1bHQ7CisgIC8qIE1ha2Ugc3VyZSBZWUlEIGlzIHVzZWQuICAqLworICByZXR1
cm4gWVlJRCAoeXlyZXN1bHQpOwogfQogCiAKIAorCisKIGludCB5eWxleChZWVNUWVBFKiBsdmFs
cCwgQ29udGV4dCogY29udGV4dCkKIHsKICAgICBpbnQgdHlwZSA9IDA7CkBAIC0xNzc3LDcgKzE5
MDUsNyBAQCBpbnQgeXlsZXgoWVlTVFlQRSogbHZhbHAsIENvbnRleHQqIGNvbnRleHQpCiAgICAg
ICAgIHVuc2lnbmVkIGludCB2YWwgPSAwOwogICAgICAgICBpZiAoIXRva2VuLT51VmFsdWUoJnZh
bCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQo
cHA6OkRpYWdub3N0aWNzOjpJTlRFR0VSX09WRVJGTE9XLAorICAgICAgICAgICAgY29udGV4dC0+
ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OlBQX0lOVEVHRVJfT1ZFUkZMT1cs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwgdG9rZW4tPnRleHQpOwogICAgICAgICB9CiAgICAgICAgICpsdmFscCA9IHN0YXRpY19jYXN0
PFlZU1RZUEU+KHZhbCk7CkBAIC0xODE4LDcgKzE5NDYsNyBAQCBpbnQgeXlsZXgoWVlTVFlQRSog
bHZhbHAsIENvbnRleHQqIGNvbnRleHQpCiAKIHZvaWQgeXllcnJvcihDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBjaGFyKiByZWFzb24pCiB7Ci0gICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9y
dChwcDo6RGlhZ25vc3RpY3M6OklOVkFMSURfRVhQUkVTU0lPTiwKKyAgICBjb250ZXh0LT5kaWFn
bm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6UFBfSU5WQUxJRF9FWFBSRVNTSU9OLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9u
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uKTsKIH0KQEAgLTE4NDYs
MTIgKzE5NzQsMTIgQEAgYm9vbCBFeHByZXNzaW9uUGFyc2VyOjpwYXJzZShUb2tlbiogdG9rZW4s
IGludCogcmVzdWx0KQogICAgICAgICBicmVhazsKIAogICAgICAgY2FzZSAyOgotICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6T1VUX09GX01FTU9SWSwgdG9rZW4tPmxv
Y2F0aW9uLCAiIik7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQ
UF9PVVRfT0ZfTUVNT1JZLCB0b2tlbi0+bG9jYXRpb24sICIiKTsKICAgICAgICAgYnJlYWs7CiAK
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIGFzc2VydChmYWxzZSk7Ci0gICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlRFUk5BTF9FUlJPUiwgdG9rZW4tPmxvY2F0aW9u
LCAiIik7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9JTlRF
Uk5BTF9FUlJPUiwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9NYWNyb0V4cGFuZGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvTWFjcm9FeHBhbmRlci5jcHAKaW5kZXggMTExNmM1MTZmZjYy
Njg0MWRmZDMxOTkzNWI5MzgyZTA4ZGMyMzY2My4uYjc4OTI2MGFmOTE2M2E3YmRiZDhiNDU0YmIz
ZmQ0ODY4YTRlMzBiNiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyb0V4cGFuZGVyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL01hY3JvRXhwYW5kZXIuY3BwCkBA
IC0yNTQsNyArMjU0LDcgQEAgYm9vbCBNYWNyb0V4cGFuZGVyOjpjb2xsZWN0TWFjcm9BcmdzKGNv
bnN0IE1hY3JvJiBtYWNybywKIAogICAgICAgICBpZiAodG9rZW4udHlwZSA9PSBUb2tlbjo6TEFT
VCkKICAgICAgICAgewotICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6Ok1BQ1JPX1VOVEVSTUlOQVRFRF9JTlZPQ0FUSU9OLAorICAgICAgICAgICAgbURpYWdub3N0
aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX01BQ1JPX1VOVEVSTUlOQVRFRF9JTlZPQ0FUSU9O
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllci5sb2NhdGlvbiwg
aWRlbnRpZmllci50ZXh0KTsKICAgICAgICAgICAgIC8vIERvIG5vdCBsb3NlIEVPRiB0b2tlbi4K
ICAgICAgICAgICAgIHVuZ2V0VG9rZW4odG9rZW4pOwpAQCAtMzAyLDggKzMwMiw4IEBAIGJvb2wg
TWFjcm9FeHBhbmRlcjo6Y29sbGVjdE1hY3JvQXJncyhjb25zdCBNYWNybyYgbWFjcm8sCiAgICAg
aWYgKGFyZ3MtPnNpemUoKSAhPSBwYXJhbXMuc2l6ZSgpKQogICAgIHsKICAgICAgICAgRGlhZ25v
c3RpY3M6OklEIGlkID0gYXJncy0+c2l6ZSgpIDwgbWFjcm8ucGFyYW1ldGVycy5zaXplKCkgPwot
ICAgICAgICAgICAgRGlhZ25vc3RpY3M6Ok1BQ1JPX1RPT19GRVdfQVJHUyA6Ci0gICAgICAgICAg
ICBEaWFnbm9zdGljczo6TUFDUk9fVE9PX01BTllfQVJHUzsKKyAgICAgICAgICAgIERpYWdub3N0
aWNzOjpQUF9NQUNST19UT09fRkVXX0FSR1MgOgorICAgICAgICAgICAgRGlhZ25vc3RpY3M6OlBQ
X01BQ1JPX1RPT19NQU5ZX0FSR1M7CiAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KGlkLCBp
ZGVudGlmaWVyLmxvY2F0aW9uLCBpZGVudGlmaWVyLnRleHQpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuY3BwCmluZGV4IGI2MTVj
ODVkY2UwNGFjODFiNjFlNTIyYTA1YmYyYWFlYmY5ZDkwOTMuLjU4MGZmYmE0NTlmOWNhZmMxNzQy
OGIzM2I5ZDBhYWE5Yzk1M2E3ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmNwcAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1ByZXByb2Nlc3Nvci5j
cHAKQEAgLTEwMSwxMSArMTAxLDExIEBAIHZvaWQgUHJlcHJvY2Vzc29yOjpsZXgoVG9rZW4qIHRv
a2VuKQogICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgIGNhc2UgVG9rZW46OlBQX05VTUJFUjoKLSAgICAgICAgICAgIG1JbXBsLT5kaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX05VTUJFUiwKKyAgICAgICAgICAgIG1J
bXBsLT5kaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9JTlZBTElEX05VTUJFUiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwg
dG9rZW4tPnRleHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBUb2tlbjo6
UFBfT1RIRVI6Ci0gICAgICAgICAgICBtSW1wbC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6SU5WQUxJRF9DSEFSQUNURVIsCisgICAgICAgICAgICBtSW1wbC0+ZGlhZ25vc3RpY3Mt
PnJlcG9ydChEaWFnbm9zdGljczo6UFBfSU5WQUxJRF9DSEFSQUNURVIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rv
a2VuaXplci5jcHAKaW5kZXggMzYzYTM3YjM2NWE2NDk3NmQ5MGRiNmUwZjYxOWJkMzkyOGFhYjA3
Ny4uZGQ0ZWYzODE4MDUxNWQ5NWVlODM2MjAwMTM3YjRkYTMyMTBiMjljYSAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6
ZXIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvVG9rZW5pemVyLmNwcApAQCAtNjgwLDYgKzY4MCwxOCBAQCBzdGF0aWMgdm9pZCB5eV9m
bGV4X3N0cm5jcHkgKGNoYXIgKix5eWNvbnN0IGNoYXIgKixpbnQgLHl5c2Nhbl90IHl5c2Nhbm5l
cik7CiBzdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiAseXlzY2FuX3Qg
eXlzY2FubmVyKTsKICNlbmRpZgogCisjZGVmaW5lIFlZX05PX0lOUFVUCisKKyNpZm5kZWYgWVlf
Tk9fSU5QVVQKKworI2lmZGVmIF9fY3BsdXNwbHVzCitzdGF0aWMgaW50IHl5aW5wdXQgKHl5c2Nh
bl90IHl5c2Nhbm5lciApOworI2Vsc2UKK3N0YXRpYyBpbnQgaW5wdXQgKHl5c2Nhbl90IHl5c2Nh
bm5lciApOworI2VuZGlmCisKKyNlbmRpZgorCiAvKiBBbW91bnQgb2Ygc3R1ZmYgdG8gc2x1cnAg
dXAgd2l0aCBlYWNoIHJlYWQuICovCiAjaWZuZGVmIFlZX1JFQURfQlVGX1NJWkUKICNkZWZpbmUg
WVlfUkVBRF9CVUZfU0laRSA4MTkyCkBAIC0xMTM5LDcgKzExNTEsNyBAQCBjYXNlIFlZX1NUQVRF
X0VPRihDT01NRU5UKToKIAogICAgIGlmIChZWV9TVEFSVCA9PSBDT01NRU5UKQogICAgIHsKLSAg
ICAgICAgeXlleHRyYS0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkVPRl9J
Tl9DT01NRU5ULAorICAgICAgICB5eWV4dHJhLT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFn
bm9zdGljczo6UFBfRU9GX0lOX0NPTU1FTlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHA6OlNvdXJjZUxvY2F0aW9uKHl5ZmlsZW5vLCB5eWxpbmVubyksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIpOwogICAgIH0KQEAgLTE0ODAsNiArMTQ5
Miw4MSBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVy
KQogCXJldHVybiB5eV9pc19qYW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsKIH0KIAorI2lmbmRl
ZiBZWV9OT19JTlBVVAorI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgc3RhdGljIGludCB5eWlucHV0
ICh5eXNjYW5fdCB5eXNjYW5uZXIpCisjZWxzZQorICAgIHN0YXRpYyBpbnQgaW5wdXQgICh5eXNj
YW5fdCB5eXNjYW5uZXIpCisjZW5kaWYKKworeworCWludCBjOworICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCSp5eWctPnl5X2NfYnVm
X3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKworCWlmICggKnl5Zy0+eXlfY19idWZfcCA9PSBZWV9F
TkRfT0ZfQlVGRkVSX0NIQVIgKQorCQl7CisJCS8qIHl5X2NfYnVmX3Agbm93IHBvaW50cyB0byB0
aGUgY2hhcmFjdGVyIHdlIHdhbnQgdG8gcmV0dXJuLgorCQkgKiBJZiB0aGlzIG9jY3VycyAqYmVm
b3JlKiB0aGUgRU9CIGNoYXJhY3RlcnMsIHRoZW4gaXQncyBhCisJCSAqIHZhbGlkIE5VTDsgaWYg
bm90LCB0aGVuIHdlJ3ZlIGhpdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCisJCSAqLworCQlpZiAo
IHl5Zy0+eXlfY19idWZfcCA8ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5
eWctPnl5X25fY2hhcnNdICkKKwkJCS8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KKwkJCSp5
eWctPnl5X2NfYnVmX3AgPSAnXDAnOworCisJCWVsc2UKKwkJCXsgLyogbmVlZCBtb3JlIGlucHV0
ICovCisJCQl5eV9zaXplX3Qgb2Zmc2V0ID0geXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRf
cHRyOworCQkJKyt5eWctPnl5X2NfYnVmX3A7CisKKwkJCXN3aXRjaCAoIHl5X2dldF9uZXh0X2J1
ZmZlciggeXlzY2FubmVyICkgKQorCQkJCXsKKwkJCQljYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoK
KwkJCQkJLyogVGhpcyBoYXBwZW5zIGJlY2F1c2UgeXlfZ19uX2IoKQorCQkJCQkgKiBzZWVzIHRo
YXQgd2UndmUgYWNjdW11bGF0ZWQgYQorCQkJCQkgKiB0b2tlbiBhbmQgZmxhZ3MgdGhhdCB3ZSBu
ZWVkIHRvCisJCQkJCSAqIHRyeSBtYXRjaGluZyB0aGUgdG9rZW4gYmVmb3JlCisJCQkJCSAqIHBy
b2NlZWRpbmcuICBCdXQgZm9yIGlucHV0KCksCisJCQkJCSAqIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcg
dG8gY29uc2lkZXIuCisJCQkJCSAqIFNvIGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9NQVRDSAor
CQkJCQkgKiB0byBFT0JfQUNUX0VORF9PRl9GSUxFLgorCQkJCQkgKi8KKworCQkJCQkvKiBSZXNl
dCBidWZmZXIgc3RhdHVzLiAqLworCQkJCQlwcHJlc3RhcnQoeXlpbiAseXlzY2FubmVyKTsKKwor
CQkJCQkvKkZBTExUSFJPVUdIKi8KKworCQkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJ
CQkJeworCQkJCQlpZiAoIHBwd3JhcCh5eXNjYW5uZXIgKSApCisJCQkJCQlyZXR1cm4gRU9GOwor
CisJCQkJCWlmICggISB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiApCisJCQkJCQlZ
WV9ORVdfRklMRTsKKyNpZmRlZiBfX2NwbHVzcGx1cworCQkJCQlyZXR1cm4geXlpbnB1dCh5eXNj
YW5uZXIpOworI2Vsc2UKKwkJCQkJcmV0dXJuIGlucHV0KHl5c2Nhbm5lcik7CisjZW5kaWYKKwkJ
CQkJfQorCisJCQkJY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46CisJCQkJCXl5Zy0+eXlfY19i
dWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIG9mZnNldDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJ
fQorCQl9CisKKwljID0gKih1bnNpZ25lZCBjaGFyICopIHl5Zy0+eXlfY19idWZfcDsJLyogY2Fz
dCBmb3IgOC1iaXQgY2hhcidzICovCisJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7CS8qIHByZXNl
cnZlIHl5dGV4dCAqLworCXl5Zy0+eXlfaG9sZF9jaGFyID0gKisreXlnLT55eV9jX2J1Zl9wOwor
CisJcmV0dXJuIGM7Cit9CisjZW5kaWYJLyogaWZuZGVmIFlZX05PX0lOUFVUICovCisKIC8qKiBJ
bW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgc3RyZWFtLgogICogQHBhcmFt
IGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCiAgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBz
Y2FubmVyIG9iamVjdC4KQEAgLTIyNTIsNyArMjMzOSw3IEBAIHZvaWQgVG9rZW5pemVyOjpsZXgo
VG9rZW4qIHRva2VuKQogICAgIHRva2VuLT50eXBlID0gcHBsZXgoJnRva2VuLT50ZXh0LCZ0b2tl
bi0+bG9jYXRpb24sbUhhbmRsZSk7CiAgICAgaWYgKHRva2VuLT50ZXh0LnNpemUoKSA+IG1NYXhU
b2tlbkxlbmd0aCkKICAgICB7Ci0gICAgICAgIG1Db250ZXh0LmRpYWdub3N0aWNzLT5yZXBvcnQo
RGlhZ25vc3RpY3M6OlRPS0VOX1RPT19MT05HLAorICAgICAgICBtQ29udGV4dC5kaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9UT0tFTl9UT09fTE9ORywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAg
ICAgICAgdG9rZW4tPnRleHQuZXJhc2UobU1heFRva2VuTGVuZ3RoKTsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rv
a2VuaXplci5sIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9Ub2tlbml6ZXIubAppbmRleCA5MGM0MmM4NzBiZTAwMGU5YTU3M2RjMTkxZDQ4YmNkZjcw
ZWNkNmUxLi4wMWYwMTc3YjZjMjYzZTIyN2E5NTQwZDMyYmRhNzQ2ZDA3Zjc5Y2Y5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rv
a2VuaXplci5sCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvVG9rZW5pemVyLmwKQEAgLTMzLDEyICszMyw2IEBAIElGIFlPVSBNT0RJRlkgVEhJ
UyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaC4KICNwcmFnbWEg
R0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLW5vcmV0dXJuIgogI2VuZGlmCiAKLSNp
ZiBkZWZpbmVkKF9fY2xhbmdfXykKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0jcHJh
Z21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bmtub3duLXByYWdtYXMiCi0jcHJhZ21h
IGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLXJlZ2lzdGVyIgotI2VuZGlm
Ci0KIHR5cGVkZWYgc3RkOjpzdHJpbmcgWVlTVFlQRTsKIHR5cGVkZWYgcHA6OlNvdXJjZUxvY2F0
aW9uIFlZTFRZUEU7CiAKQEAgLTI3MSwxMCArMjY1LDYgQEAgRlJBQ1RJT05BTF9DT05TVEFOVCAg
KHtESUdJVH0qIi4ie0RJR0lUfSspfCh7RElHSVR9KyIuIikKIAogJSUKIAotI2lmIGRlZmluZWQo
X19jbGFuZ19fKQotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAotI2VuZGlmCi0KIG5hbWVz
cGFjZSBwcCB7CiAKIFRva2VuaXplcjo6VG9rZW5pemVyKERpYWdub3N0aWNzKiBkaWFnbm9zdGlj
cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvcHJlcHJvY2Vzc29yLnZjeHByb2ogYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3Nvci52Y3hwcm9qCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBjYTg1MzBiNTA3NGExNzNkZDAwODc0MmMzODMwZGU2YzFlODQy
MzhmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzc29y
LnZjeHByb2oKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIgKzAsMCBAQAot77u/PD94bWwgdmVyc2lv
bj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVp
bGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNv
bS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4NCi0gIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RD
b25maWd1cmF0aW9ucyI+DQotICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1
Z3xXaW4zMiI+DQotICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+DQot
ICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4NCi0gICAgPC9Qcm9qZWN0Q29uZmlndXJh
dGlvbj4NCi0gICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+DQot
ICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+DQotICAgICAgPFBsYXRm
b3JtPng2NDwvUGxhdGZvcm0+DQotICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQotICAgIDxQ
cm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4NCi0gICAgICA8Q29u
ZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPg0KLSAgICAgIDxQbGF0Zm9ybT5XaW4z
MjwvUGxhdGZvcm0+DQotICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQotICAgIDxQcm9qZWN0
Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+DQotICAgICAgPENvbmZpZ3VyYXRp
b24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4NCi0gICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9y
bT4NCi0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCi0gIDwvSXRlbUdyb3VwPg0KLSAgPFBy
b3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPg0KLSAgICA8UHJvamVjdEd1aWQ+e0ZCRTMyREYz
LTBGQjAtNEYyRi1BNDI0LTJDMjFCRDdCQzMyNX08L1Byb2plY3RHdWlkPg0KLSAgICA8Um9vdE5h
bWVzcGFjZT5wcmVwcm9jZXNzb3I8L1Jvb3ROYW1lc3BhY2U+DQotICAgIDxLZXl3b3JkPldpbjMy
UHJvajwvS2V5d29yZD4NCi0gIDwvUHJvcGVydHlHcm91cD4NCi0gIDxJbXBvcnQgUHJvamVjdD0i
JChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+DQotICA8UHJv
cGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Jl
bGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQotICAgIDxDb25maWd1cmF0aW9u
VHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCi0gICAgPENoYXJhY3RlclNl
dD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+DQotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+
dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPg0KLSAgPC9Qcm9wZXJ0eUdyb3VwPg0KLSAg
PFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCi0gICAgPENvbmZpZ3VyYXRp
b25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KLSAgICA8Q2hhcmFjdGVy
U2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4NCi0gIDwvUHJvcGVydHlHcm91cD4NCi0gIDxQcm9w
ZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVs
ZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQotICAgIDxDb25maWd1cmF0aW9uVHlw
ZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCi0gICAgPENoYXJhY3RlclNldD5V
bmljb2RlPC9DaGFyYWN0ZXJTZXQ+DQotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1
ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPg0KLSAgPC9Qcm9wZXJ0eUdyb3VwPg0KLSAgPFBy
b3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdE
ZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQotICAgIDxDb25maWd1cmF0aW9uVHlw
ZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCi0gICAgPENoYXJhY3RlclNldD5V
bmljb2RlPC9DaGFyYWN0ZXJTZXQ+DQotICA8L1Byb3BlcnR5R3JvdXA+DQotICA8SW1wb3J0IFBy
b2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4NCi0gIDxJbXBv
cnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPg0KLSAgPC9JbXBvcnRHcm91cD4NCi0g
IDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09
J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KLSAgICA8SW1wb3J0IFBy
b2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9w
cyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0
Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQotICA8
L0ltcG9ydEdyb3VwPg0KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlv
bil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0K
LSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0
Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jv
c29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxh
dGZvcm0iIC8+DQotICA8L0ltcG9ydEdyb3VwPg0KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJv
cGVydHlTaGVldHMiPg0KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jv
c29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNl
clJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0i
TG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQotICA8L0ltcG9ydEdyb3VwPg0KLSAgPEltcG9ydEdy
b3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0
JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCi0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJS
b290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0i
ZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJv
cHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KLSAgPC9JbXBvcnRHcm91cD4N
Ci0gIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPg0KLSAgPFByb3BlcnR5R3Jv
dXA+DQotICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuNDAyMTkuMTwvX1Byb2plY3RGaWxl
VmVyc2lvbj4NCi0gICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb24pXDwv
T3V0RGlyPg0KLSAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nRGVidWd8V2luMzInIj4kKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPg0KLSAgICA8
T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8
eDY0JyI+JChTb2x1dGlvbkRpcikkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGly
Pg0KLSAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nRGVidWd8eDY0JyI+JChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L0ludERpcj4NCi0g
ICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Jl
bGVhc2V8V2luMzInIj4kKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQot
ICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdS
ZWxlYXNlfFdpbjMyJyI+JChDb25maWd1cmF0aW9uKVw8L0ludERpcj4NCi0gICAgPE91dERpciBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+
JChTb2x1dGlvbkRpcikkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KLSAg
ICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVs
ZWFzZXx4NjQnIj4kKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPg0KLSAgPC9Q
cm9wZXJ0eUdyb3VwPg0KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25m
aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPg0KLSAgICA8Q2xDb21waWxl
Pg0KLSAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8
UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19XSU5ET1dTO19VU1JETEw7X0NS
VF9TRUNVUkVfTk9fREVQUkVDQVRFO05PTUlOTUFYOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMp
PC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8TWluaW1hbFJlYnVpbGQ+dHJ1ZTwv
TWluaW1hbFJlYnVpbGQ+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5FbmFibGVGYXN0Q2hl
Y2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhy
ZWFkZWREZWJ1ZzwvUnVudGltZUxpYnJhcnk+DQotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPg0K
LSAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDQ8
L1dhcm5pbmdMZXZlbD4NCi0gICAgICA8VHJlYXRXYXJuaW5nQXNFcnJvcj50cnVlPC9UcmVhdFdh
cm5pbmdBc0Vycm9yPg0KLSAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PkVkaXRBbmRDb250
aW51ZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCi0gICAgICA8RGlzYWJsZVNwZWNpZmljV2Fy
bmluZ3M+NDEwMDs0MTI3OzQxODk7NDIzOTs0MjQ0OzQyNDU7NDUxMjs0NzAyOzQyNjc7JShEaXNh
YmxlU3BlY2lmaWNXYXJuaW5ncyk8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPg0KLSAgICA8L0Ns
Q29tcGlsZT4NCi0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCi0gIDxJdGVtRGVmaW5pdGlvbkdy
b3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0
JyI+DQotICAgIDxNaWRsPg0KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVu
dmlyb25tZW50Pg0KLSAgICA8L01pZGw+DQotICAgIDxDbENvbXBpbGU+DQotICAgICAgPE9wdGlt
aXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZp
bml0aW9ucz5XSU4zMjtfREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtfQ1JUX1NFQ1VSRV9OT19ERVBS
RUNBVEU7Tk9NSU5NQVg7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRl
ZmluaXRpb25zPg0KLSAgICAgIDxNaW5pbWFsUmVidWlsZD50cnVlPC9NaW5pbWFsUmVidWlsZD4N
Ci0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGlt
ZUNoZWNrcz4NCi0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnPC9SdW50
aW1lTGlicmFyeT4NCi0gICAgICA8UHJlY29tcGlsZWRIZWFkZXI+DQotICAgICAgPC9QcmVjb21w
aWxlZEhlYWRlcj4NCi0gICAgICA8V2FybmluZ0xldmVsPkxldmVsNDwvV2FybmluZ0xldmVsPg0K
LSAgICAgIDxUcmVhdFdhcm5pbmdBc0Vycm9yPnRydWU8L1RyZWF0V2FybmluZ0FzRXJyb3I+DQot
ICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9y
bWF0aW9uRm9ybWF0Pg0KLSAgICAgIDxEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz40MTAwOzQxMjc7
NDE4OTs0MjM5OzQyNDQ7NDI0NTs0NTEyOzQ3MDI7NDcxODs0MjY3OyUoRGlzYWJsZVNwZWNpZmlj
V2FybmluZ3MpPC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4NCi0gICAgPC9DbENvbXBpbGU+DQot
ICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRp
b249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4NCi0g
ICAgPENsQ29tcGlsZT4NCi0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRp
b24+DQotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPkFueVN1aXRhYmxlPC9JbmxpbmVG
dW5jdGlvbkV4cGFuc2lvbj4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7
TkRFQlVHO19XSU5ET1dTO19VU1JETEw7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO05PTUlOTUFY
O19TRUNVUkVfU0NMPTA7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRl
ZmluaXRpb25zPg0KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1l
TGlicmFyeT4NCi0gICAgICA8UHJlY29tcGlsZWRIZWFkZXI+DQotICAgICAgPC9QcmVjb21waWxl
ZEhlYWRlcj4NCi0gICAgICA8V2FybmluZ0xldmVsPkxldmVsNDwvV2FybmluZ0xldmVsPg0KLSAg
ICAgIDxUcmVhdFdhcm5pbmdBc0Vycm9yPnRydWU8L1RyZWF0V2FybmluZ0FzRXJyb3I+DQotICAg
ICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0
aW9uRm9ybWF0Pg0KLSAgICAgIDxEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz40MTAwOzQxMjc7NDE4
OTs0MjM5OzQyNDQ7NDI0NTs0NTEyOzQ3MDI7NDcxODs0MjY3OyUoRGlzYWJsZVNwZWNpZmljV2Fy
bmluZ3MpPC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4NCi0gICAgPC9DbENvbXBpbGU+DQotICA8
L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249
IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+DQotICAgIDxN
aWRsPg0KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50Pg0K
LSAgICA8L01pZGw+DQotICAgIDxDbENvbXBpbGU+DQotICAgICAgPE9wdGltaXphdGlvbj5NYXhT
cGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5BbnlT
dWl0YWJsZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+DQotICAgICAgPFByZXByb2Nlc3NvckRl
ZmluaXRpb25zPldJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO19DUlRfU0VDVVJFX05PX0RF
UFJFQ0FURTtOT01JTk1BWDtfU0VDVVJFX1NDTD0wOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMp
PC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlU
aHJlYWRlZDwvUnVudGltZUxpYnJhcnk+DQotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPg0KLSAg
ICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDQ8L1dh
cm5pbmdMZXZlbD4NCi0gICAgICA8VHJlYXRXYXJuaW5nQXNFcnJvcj50cnVlPC9UcmVhdFdhcm5p
bmdBc0Vycm9yPg0KLSAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFz
ZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCi0gICAgICA8RGlzYWJsZVNwZWNpZmljV2Fybmlu
Z3M+NDEwMDs0MTI3OzQxODk7NDIzOTs0MjQ0OzQyNDU7NDUxMjs0NzAyOzQ3MTg7NDI2NzslKERp
c2FibGVTcGVjaWZpY1dhcm5pbmdzKTwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+DQotICAgIDwv
Q2xDb21waWxlPg0KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KLSAgPEl0ZW1Hcm91cD4NCi0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSJEaWFnbm9zdGljc0Jhc2UuY3BwIiAvPg0KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9IkRpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcCIgLz4NCi0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSJEaXJlY3RpdmVQYXJzZXIuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9IkV4cHJlc3Npb25QYXJzZXIuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
IklucHV0LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJMZXhlci5jcHAiIC8+DQot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iTWFjcm8uY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ik1hY3JvRXhwYW5kZXIuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlBy
ZXByb2Nlc3Nvci5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iVG9rZW4uY3BwIiAv
Pg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlRva2VuaXplci5jcHAiIC8+DQotICA8L0l0ZW1H
cm91cD4NCi0gIDxJdGVtR3JvdXA+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0ibGVuZ3RoX2xp
bWl0cy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkRpYWdub3N0aWNzQmFzZS5oIiAv
Pg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkRpcmVjdGl2ZUhhbmRsZXJCYXNlLmgiIC8+DQot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iRGlyZWN0aXZlUGFyc2VyLmgiIC8+DQotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iRXhwcmVzc2lvblBhcnNlci5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9IklucHV0LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iTGV4ZXIuaCIgLz4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJNYWNyby5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ik1hY3JvRXhwYW5kZXIuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJudW1l
cmljX2xleC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InBwX3V0aWxzLmgiIC8+DQot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iUHJlcHJvY2Vzc29yLmgiIC8+DQotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iU291cmNlTG9jYXRpb24uaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSJUb2tlbi5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlRva2VuaXplci5oIiAvPg0K
LSAgPC9JdGVtR3JvdXA+DQotICA8SXRlbUdyb3VwPg0KLSAgICA8Tm9uZSBJbmNsdWRlPSJUb2tl
bml6ZXIubCIgLz4NCi0gIDwvSXRlbUdyb3VwPg0KLSAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFy
Z2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4NCi0gIDxJbXBvcnRHcm91cCBMYWJl
bD0iRXh0ZW5zaW9uVGFyZ2V0cyI+DQotICA8L0ltcG9ydEdyb3VwPg0KLTwvUHJvamVjdD4KXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3Nvci52Y3hwcm9qLmZpbHRl
cnMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3By
ZXByb2Nlc3Nvci52Y3hwcm9qLmZpbHRlcnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDRhYzIwMmY0MDAyYTI5MmM2MTRmOTRhZDNkN2Q4Y2MzYzgxNDM3ZDMuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzb3IudmN4cHJvai5maWx0ZXJzCisr
KyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLe+7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5j
b2Rpbmc9InV0Zi04Ij8+DQotPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRw
Oi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPg0KLSAgPEl0
ZW1Hcm91cD4NCi0gICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXMiPg0KLSAgICAgIDxV
bmlxdWVJZGVudGlmaWVyPns0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9PC9V
bmlxdWVJZGVudGlmaWVyPg0KLSAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2NjO2N4eDtkZWY7b2Rs
O2lkbDtocGo7YmF0O2FzbTthc214PC9FeHRlbnNpb25zPg0KLSAgICA8L0ZpbHRlcj4NCi0gICAg
PEZpbHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXMiPg0KLSAgICAgIDxVbmlxdWVJZGVudGlmaWVy
Pns5Mzk5NTM4MC04OUJELTRiMDQtODhFQi02MjVGQkU1MkVCRkJ9PC9VbmlxdWVJZGVudGlmaWVy
Pg0KLSAgICAgIDxFeHRlbnNpb25zPmg7aHBwO2h4eDtobTtpbmw7aW5jO3hzZDwvRXh0ZW5zaW9u
cz4NCi0gICAgPC9GaWx0ZXI+DQotICA8L0l0ZW1Hcm91cD4NCi0gIDxJdGVtR3JvdXA+DQotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iRGlyZWN0aXZlUGFyc2VyLmNwcCI+DQotICAgICAgPEZpbHRl
cj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iRXhwcmVzc2lvblBhcnNlci5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNl
IEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9IklucHV0LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0g
ICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iTGV4ZXIuY3BwIj4NCi0g
ICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSJNYWNyby5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNl
IEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ik1hY3JvRXhwYW5kZXIuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmls
dGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJQcmVwcm9j
ZXNzb3IuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8
L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJUb2tlbi5jcHAiPg0KLSAgICAg
IDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9IlRva2VuaXplci5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNl
IEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9IkRpYWdub3N0aWNzQmFzZS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9G
aWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkRpcmVj
dGl2ZUhhbmRsZXJCYXNlLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRl
cj4NCi0gICAgPC9DbENvbXBpbGU+DQotICA8L0l0ZW1Hcm91cD4NCi0gIDxJdGVtR3JvdXA+DQot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iRGlyZWN0aXZlUGFyc2VyLmgiPg0KLSAgICAgIDxGaWx0
ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9IkV4cHJlc3Npb25QYXJzZXIuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIg
RmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iSW5wdXQuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAg
PC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iTGV4ZXIuaCI+DQotICAgICAg
PEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iTWFjcm8uaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8
L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iTWFj
cm9FeHBhbmRlci5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAg
ICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJudW1lcmljX2xleC5oIj4N
Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJwcF91dGlscy5oIj4NCi0gICAgICA8RmlsdGVyPkhl
YWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSJQcmVwcm9jZXNzb3IuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0Zp
bHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iU291cmNl
TG9jYXRpb24uaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAg
PC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iVG9rZW4uaCI+DQotICAgICAg
PEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iVG9rZW5pemVyLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZp
bGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Imxlbmd0aF9saW1pdHMuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4N
Ci0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iRGlhZ25vc3RpY3NC
YXNlLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJ
bmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkRpcmVjdGl2ZUhhbmRsZXJCYXNlLmgi
Pg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRl
Pg0KLSAgPC9JdGVtR3JvdXA+DQotICA8SXRlbUdyb3VwPg0KLSAgICA8Tm9uZSBJbmNsdWRlPSJU
b2tlbml6ZXIubCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAg
PC9Ob25lPg0KLSAgPC9JdGVtR3JvdXA+DQotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1p
bmcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWQyYmFiMTdmODE0YWU0Y2Ni
M2RmYTEzMTk2NDgxYjQ4N2ExZTQ4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcv
UmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcg
KzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgot
I2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlQ29udGV4dC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL2Rl
cGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3RpbWlu
Zy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgiCi0KLVJlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmc6OlJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcoVEluZm9TaW5rQmFzZSYgc2lu
aykKLSAgICA6IG1TaW5rKHNpbmspCi0gICAgLCBtTnVtRXJyb3JzKDApCi17Ci0gICAgLy8gU2Ft
cGxpbmcgb3BzIGZvdW5kIG9ubHkgaW4gZnJhZ21lbnQgc2hhZGVycy4KLSAgICBtU2FtcGxpbmdP
cHMuaW5zZXJ0KCJ0ZXh0dXJlMkQoczIxO3ZmMjtmMTsiKTsKLSAgICBtU2FtcGxpbmdPcHMuaW5z
ZXJ0KCJ0ZXh0dXJlMkRQcm9qKHMyMTt2ZjM7ZjE7Iik7Ci0gICAgbVNhbXBsaW5nT3BzLmluc2Vy
dCgidGV4dHVyZTJEUHJvaihzMjE7dmY0O2YxOyIpOwotICAgIG1TYW1wbGluZ09wcy5pbnNlcnQo
InRleHR1cmVDdWJlKHNDMTt2ZjM7ZjE7Iik7Ci0gICAgLy8gU2FtcGxpbmcgb3BzIGZvdW5kIGlu
IGJvdGggdmVydGV4IGFuZCBmcmFnbWVudCBzaGFkZXJzLgotICAgIG1TYW1wbGluZ09wcy5pbnNl
cnQoInRleHR1cmUyRChzMjE7dmYyOyIpOwotICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1
cmUyRFByb2ooczIxO3ZmMzsiKTsKLSAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRQ
cm9qKHMyMTt2ZjQ7Iik7Ci0gICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZUN1YmUoc0Mx
O3ZmMzsiKTsKLSAgICAvLyBTYW1wbGluZyBvcHMgcHJvdmlkZWQgYnkgT0VTX0VHTF9pbWFnZV9l
eHRlcm5hbC4KLSAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkQoMTt2ZjI7Iik7Ci0g
ICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUHJvaigxO3ZmMzsiKTsKLSAgICBtU2Ft
cGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRQcm9qKDE7dmY0OyIpOwotICAgIC8vIFNhbXBsaW5n
IG9wcyBwcm92aWRlZCBieSBBUkJfdGV4dHVyZV9yZWN0YW5nbGUuCi0gICAgbVNhbXBsaW5nT3Bz
Lmluc2VydCgidGV4dHVyZTJEUmVjdCgxO3ZmMjsiKTsKLSAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0
KCJ0ZXh0dXJlMkRSZWN0UHJvaigxO3ZmMzsiKTsKLSAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0
ZXh0dXJlMkRSZWN0UHJvaigxO3ZmNDsiKTsKLX0KLQotLy8gRklYTUUobXZ1am92aWMpOiBXZSBk
byBub3Qga25vdyBpZiB0aGUgZXhlY3V0aW9uIHRpbWUgb2YgYnVpbHQtaW4gb3BlcmF0aW9ucyBs
aWtlIHNpbiwgcG93LCBldGMuCi0vLyBjYW4gdmFyeSBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgdGhl
IGlucHV0IGFyZ3VtZW50cy4gSWYgc28sIHdlIHNob3VsZCByZXN0cmljdCB0aG9zZSBhcyB3ZWxs
Lgotdm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjplbmZvcmNlUmVzdHJpY3Rpb25z
KGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKQotewotICAgIG1OdW1FcnJvcnMgPSAwOwot
Ci0gICAgLy8gRklYTUUobXZ1am92aWMpOiBUaGUgZGVwZW5kZW5jeSBncmFwaCBkb2VzIG5vdCBz
dXBwb3J0IHVzZXIgZGVmaW5lZCBmdW5jdGlvbiBjYWxscyByaWdodCBub3csCi0gICAgLy8gc28g
d2UgZ2VuZXJhdGUgZXJyb3JzIGZvciB0aGVtLgotICAgIHZhbGlkYXRlVXNlckRlZmluZWRGdW5j
dGlvbkNhbGxVc2FnZShncmFwaCk7Ci0KLSAgICAvLyBTdGFydGluZyBmcm9tIGVhY2ggc2FtcGxl
ciwgdHJhdmVyc2UgdGhlIGRlcGVuZGVuY3kgZ3JhcGggYW5kIGdlbmVyYXRlIGFuIGVycm9yIGVh
Y2ggdGltZSB3ZQotICAgIC8vIGhpdCBhIG5vZGUgd2hlcmUgc2FtcGxlciBkZXBlbmRlbnQgdmFs
dWVzIGFyZSBub3QgYWxsb3dlZC4KLSAgICBmb3IgKFRHcmFwaFN5bWJvbFZlY3Rvcjo6Y29uc3Rf
aXRlcmF0b3IgaXRlciA9IGdyYXBoLmJlZ2luU2FtcGxlclN5bWJvbHMoKTsKLSAgICAgICAgIGl0
ZXIgIT0gZ3JhcGguZW5kU2FtcGxlclN5bWJvbHMoKTsKLSAgICAgICAgICsraXRlcikKLSAgICB7
Ci0gICAgICAgIFRHcmFwaFN5bWJvbCogc2FtcGxlclN5bWJvbCA9ICppdGVyOwotICAgICAgICBj
bGVhclZpc2l0ZWQoKTsKLSAgICAgICAgc2FtcGxlclN5bWJvbC0+dHJhdmVyc2UodGhpcyk7Ci0g
ICAgfQotfQotCi12b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZhbGlkYXRlVXNl
ckRlZmluZWRGdW5jdGlvbkNhbGxVc2FnZShjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCkK
LXsKLSAgICBmb3IgKFRGdW5jdGlvbkNhbGxWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBn
cmFwaC5iZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpOwotICAgICAgICAgaXRlciAhPSBn
cmFwaC5lbmRVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMoKTsKLSAgICAgICAgICsraXRlcikKLSAg
ICB7Ci0gICAgICAgIFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxsID0gKml0ZXI7Ci0g
ICAgICAgIGJlZ2luRXJyb3IoZnVuY3Rpb25DYWxsLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKSk7
Ci0gICAgICAgIG1TaW5rIDw8ICJBIGNhbGwgdG8gYSB1c2VyIGRlZmluZWQgZnVuY3Rpb24gaXMg
bm90IHBlcm1pdHRlZC5cbiI7Ci0gICAgfQotfQotCi12b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmc6OmJlZ2luRXJyb3IoY29uc3QgVEludGVybU5vZGUqIG5vZGUpCi17Ci0gICAgKytt
TnVtRXJyb3JzOwotICAgIG1TaW5rLnByZWZpeChFUHJlZml4RXJyb3IpOwotICAgIG1TaW5rLmxv
Y2F0aW9uKG5vZGUtPmdldExpbmUoKSk7Ci19Ci0KLWJvb2wgUmVzdHJpY3RGcmFnbWVudFNoYWRl
clRpbWluZzo6aXNTYW1wbGluZ09wKGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0
aW9uQ2FsbCkgY29uc3QKLXsKLSAgICByZXR1cm4gIWludGVybUZ1bmN0aW9uQ2FsbC0+aXNVc2Vy
RGVmaW5lZCgpICYmCi0gICAgICAgICAgIG1TYW1wbGluZ09wcy5maW5kKGludGVybUZ1bmN0aW9u
Q2FsbC0+Z2V0TmFtZSgpKSAhPSBtU2FtcGxpbmdPcHMuZW5kKCk7Ci19Ci0KLXZvaWQgUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRBcmd1bWVudChUR3JhcGhBcmd1bWVudCogcGFy
YW1ldGVyKQotewotICAgIC8vIFRleHR1cmUgY2FjaGUgYWNjZXNzIHRpbWUgbWlnaHQgbGVhayBz
ZW5zaXRpdmUgaW5mb3JtYXRpb24uCi0gICAgLy8gVGh1cywgd2UgcmVzdHJpY3Qgc2FtcGxlciBk
ZXBlbmRlbnQgdmFsdWVzIGZyb20gYWZmZWN0aW5nIHRoZSBjb29yZGluYXRlIG9yIExPRCBiaWFz
IG9mIGEKLSAgICAvLyBzYW1wbGluZyBvcGVyYXRpb24uCi0gICAgaWYgKGlzU2FtcGxpbmdPcChw
YXJhbWV0ZXItPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpKSkgewotICAgICAgICBzd2l0Y2ggKHBh
cmFtZXRlci0+Z2V0QXJndW1lbnROdW1iZXIoKSkgewotICAgICAgICAgICAgY2FzZSAxOgotICAg
ICAgICAgICAgICAgIC8vIFNlY29uZCBhcmd1bWVudCAoY29vcmQpCi0gICAgICAgICAgICAgICAg
YmVnaW5FcnJvcihwYXJhbWV0ZXItPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpKTsKLSAgICAgICAg
ICAgICAgICBtU2luayA8PCAiQW4gZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24gYSBzYW1wbGVyIGlz
IG5vdCBwZXJtaXR0ZWQgdG8gYmUgdGhlIgotICAgICAgICAgICAgICAgICAgICAgIDw8ICIgY29v
cmRpbmF0ZSBhcmd1bWVudCBvZiBhIHNhbXBsaW5nIG9wZXJhdGlvbi5cbiI7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgLy8gVGhp
cmQgYXJndW1lbnQgKGJpYXMpCi0gICAgICAgICAgICAgICAgYmVnaW5FcnJvcihwYXJhbWV0ZXIt
PmdldEludGVybUZ1bmN0aW9uQ2FsbCgpKTsKLSAgICAgICAgICAgICAgICBtU2luayA8PCAiQW4g
ZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24gYSBzYW1wbGVyIGlzIG5vdCBwZXJtaXR0ZWQgdG8gYmUg
dGhlIgotICAgICAgICAgICAgICAgICAgICAgIDw8ICIgYmlhcyBhcmd1bWVudCBvZiBhIHNhbXBs
aW5nIG9wZXJhdGlvbi5cbiI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIC8vIEZpcnN0IGFyZ3VtZW50IChzYW1wbGVyKQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFJlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2Vs
ZWN0aW9uKQotewotICAgIGJlZ2luRXJyb3Ioc2VsZWN0aW9uLT5nZXRJbnRlcm1TZWxlY3Rpb24o
KSk7Ci0gICAgbVNpbmsgPDwgIkFuIGV4cHJlc3Npb24gZGVwZW5kZW50IG9uIGEgc2FtcGxlciBp
cyBub3QgcGVybWl0dGVkIGluIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50LlxuIjsKLX0KLQotdm9p
ZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9v
cCkKLXsKLSAgICBiZWdpbkVycm9yKGxvb3AtPmdldEludGVybUxvb3AoKSk7Ci0gICAgbVNpbmsg
PDwgIkFuIGV4cHJlc3Npb24gZGVwZW5kZW50IG9uIGEgc2FtcGxlciBpcyBub3QgcGVybWl0dGVk
IGluIGEgbG9vcCBjb25kaXRpb24uXG4iOwotfQotCi12b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmc6OnZpc2l0TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wKQotewot
ICAgIGJlZ2luRXJyb3IobG9naWNhbE9wLT5nZXRJbnRlcm1Mb2dpY2FsT3AoKSk7Ci0gICAgbVNp
bmsgPDwgIkFuIGV4cHJlc3Npb24gZGVwZW5kZW50IG9uIGEgc2FtcGxlciBpcyBub3QgcGVybWl0
dGVkIG9uIHRoZSBsZWZ0IGhhbmQgc2lkZSBvZiBhIGxvZ2ljYWwgIgotICAgICAgICAgIDw8IGxv
Z2ljYWxPcC0+Z2V0T3BTdHJpbmcoKQotICAgICAgICAgIDw8ICIgb3BlcmF0b3IuXG4iOwotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9S
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk5MTY1Y2EyODdlMzMxMDI1N2QyYzA2MGIyMGZlYzlk
NGUzMDNiNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmcuaAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
Ci0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJf
VElNSU5HX0hfCi0jZGVmaW5lIENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFE
RVJfVElNSU5HX0hfCi0KLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLQotI2luY2x1
ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBo
L0RlcGVuZGVuY3lHcmFwaC5oIgotCi1jbGFzcyBUSW5mb1NpbmtCYXNlOwotCi1jbGFzcyBSZXN0
cmljdEZyYWdtZW50U2hhZGVyVGltaW5nIDogVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciB7Ci1w
dWJsaWM6Ci0gICAgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZyhUSW5mb1NpbmtCYXNlJiBz
aW5rKTsKLSAgICB2b2lkIGVuZm9yY2VSZXN0cmljdGlvbnMoY29uc3QgVERlcGVuZGVuY3lHcmFw
aCYgZ3JhcGgpOwotICAgIGludCBudW1FcnJvcnMoKSBjb25zdCB7IHJldHVybiBtTnVtRXJyb3Jz
OyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRBcmd1bWVudChUR3JhcGhBcmd1bWVudCogcGFy
YW1ldGVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9u
KiBzZWxlY3Rpb24pOwotICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9v
cCk7Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCogbG9n
aWNhbE9wKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGJlZ2luRXJyb3IoY29uc3QgVEludGVybU5v
ZGUqIG5vZGUpOwotICAgIHZvaWQgdmFsaWRhdGVVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbFVzYWdl
KGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKTsKLSAgICBib29sIGlzU2FtcGxpbmdPcChj
b25zdCBUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpIGNvbnN0OwotCi0gICAg
VEluZm9TaW5rQmFzZSYgbVNpbms7Ci0gICAgaW50IG1OdW1FcnJvcnM7Ci0KLSAgICB0eXBlZGVm
IHN0ZDo6c2V0PFRTdHJpbmc+IFN0cmluZ1NldDsKLSAgICBTdHJpbmdTZXQgbVNhbXBsaW5nT3Bz
OwotfTsKLQotI2VuZGlmICAvLyBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfRlJBR01FTlRfU0hB
REVSX1RJTUlOR19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU1ZWI2MmQ2NTBiOTlkZTQ2
ODVhYTlkMDE0MWQ0YmYyNmU1OTAwNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5n
L1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICsw
LDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0
VmVydGV4U2hhZGVyVGltaW5nLmgiCi0KLXZvaWQgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmc6
OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCi17Ci0gICAgaWYgKElzU2FtcGxlcihu
b2RlLT5nZXRCYXNpY1R5cGUoKSkpIHsKLSAgICAgICAgKyttTnVtRXJyb3JzOwotICAgICAgICBt
U2luay5tZXNzYWdlKEVQcmVmaXhFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICBub2RlLT5n
ZXRMaW5lKCksCi0gICAgICAgICAgICAgICAgICAgICAgIlNhbXBsZXJzIGFyZSBub3QgcGVybWl0
dGVkIGluIHZlcnRleCBzaGFkZXJzIik7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRp
bWluZy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0
cmljdFZlcnRleFNoYWRlclRpbWluZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAx
OWEwNWZhNjhiYzhiZmZmNzhiNjhiNDE5NjI4NjMxMjQ4Y2I2YzgxLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDMzICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1RJ
TUlOR19SRVNUUklDVF9WRVJURVhfU0hBREVSX1RJTUlOR19IXwotI2RlZmluZSBDT01QSUxFUl9U
SU1JTkdfUkVTVFJJQ1RfVkVSVEVYX1NIQURFUl9USU1JTkdfSF8KLQotI2luY2x1ZGUgIkdMU0xB
TkcvU2hhZGVyTGFuZy5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCi0j
aW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKLQotY2xhc3MgVEluZm9TaW5rQmFzZTsKLQot
Y2xhc3MgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcgOiBwdWJsaWMgVEludGVybVRyYXZlcnNl
ciB7Ci1wdWJsaWM6Ci0gICAgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcoVEluZm9TaW5rQmFz
ZSYgc2luaykKLSAgICAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSkK
LSAgICAgICAgLCBtU2luayhzaW5rKQotICAgICAgICAsIG1OdW1FcnJvcnMoMCkge30KLQotICAg
IHZvaWQgZW5mb3JjZVJlc3RyaWN0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCkgeyByb290LT50cmF2
ZXJzZSh0aGlzKTsgfQotICAgIGludCBudW1FcnJvcnMoKSB7IHJldHVybiBtTnVtRXJyb3JzOyB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOwotcHJpdmF0
ZToKLSAgICBUSW5mb1NpbmtCYXNlJiBtU2luazsKLSAgICBpbnQgbU51bUVycm9yczsKLX07Ci0K
LSNlbmRpZiAgLy8gQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX1ZFUlRFWF9TSEFERVJfVElNSU5H
X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci52Y3hwcm9qIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IudmN4cHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI2OTQ5ZjA4
M2RhNTdjM2NkMTIzNGIwZGRiOGIwMjA4MTc5OTU5MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci52Y3hwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMzA0ICswLDAgQEAKLe+7
vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPFByb2plY3QgRGVmYXVs
dFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFz
Lm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+DQotICA8SXRlbUdyb3VwIExh
YmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPg0KLSAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24g
SW5jbHVkZT0iRGVidWd8V2luMzIiPg0KLSAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25m
aWd1cmF0aW9uPg0KLSAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+DQotICAgIDwvUHJv
amVjdENvbmZpZ3VyYXRpb24+DQotICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJE
ZWJ1Z3x4NjQiPg0KLSAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPg0K
LSAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPg0KLSAgICA8L1Byb2plY3RDb25maWd1cmF0
aW9uPg0KLSAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+
DQotICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4NCi0gICAgICA8
UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPg0KLSAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0K
LSAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPg0KLSAgICAg
IDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+DQotICAgICAgPFBsYXRmb3Jt
Png2NDwvUGxhdGZvcm0+DQotICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQotICA8L0l0ZW1H
cm91cD4NCi0gIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4NCi0gICAgPFByb2plY3RH
dWlkPns1QjNBNkRCOC0xRTdFLTQwRDctOTJCOS1EQThBQUU2MTlGQUR9PC9Qcm9qZWN0R3VpZD4N
Ci0gICAgPFJvb3ROYW1lc3BhY2U+Y29tcGlsZXI8L1Jvb3ROYW1lc3BhY2U+DQotICAgIDxLZXl3
b3JkPldpbjMyUHJvajwvS2V5d29yZD4NCi0gICAgPFByb2plY3ROYW1lPnRyYW5zbGF0b3I8L1By
b2plY3ROYW1lPg0KLSAgPC9Qcm9wZXJ0eUdyb3VwPg0KLSAgPEltcG9ydCBQcm9qZWN0PSIkKFZD
VGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4NCi0gIDxQcm9wZXJ0
eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFz
ZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCi0gICAgPENvbmZpZ3VyYXRpb25UeXBl
PlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KLSAgICA8Q2hhcmFjdGVyU2V0Pk5v
dFNldDwvQ2hhcmFjdGVyU2V0Pg0KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8
L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4NCi0gIDwvUHJvcGVydHlHcm91cD4NCi0gIDxQcm9w
ZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVi
dWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQotICAgIDxDb25maWd1cmF0aW9uVHlw
ZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCi0gICAgPENoYXJhY3RlclNldD5O
b3RTZXQ8L0NoYXJhY3RlclNldD4NCi0gIDwvUHJvcGVydHlHcm91cD4NCi0gIDxQcm9wZXJ0eUdy
b3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4
NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQotICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0
aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCi0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8
L0NoYXJhY3RlclNldD4NCi0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9s
ZVByb2dyYW1PcHRpbWl6YXRpb24+DQotICA8L1Byb3BlcnR5R3JvdXA+DQotICA8UHJvcGVydHlH
cm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2
NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCi0gICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRp
Y0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwv
Q2hhcmFjdGVyU2V0Pg0KLSAgPC9Qcm9wZXJ0eUdyb3VwPg0KLSAgPEltcG9ydCBQcm9qZWN0PSIk
KFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+DQotICA8SW1wb3J0R3JvdXAg
TGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4NCi0gIDwvSW1wb3J0R3JvdXA+DQotICA8SW1wb3J0
R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNl
fFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCi0gICAgPEltcG9ydCBQcm9qZWN0PSIk
KFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRp
dGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVz
ZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPg0KLSAgPC9JbXBvcnRH
cm91cD4NCi0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCi0gICAgPElt
cG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVz
ZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3Bw
LiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAv
Pg0KLSAgPC9JbXBvcnRHcm91cD4NCi0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hl
ZXRzIj4NCi0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3Bw
LiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGly
KVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBw
RGF0YVBsYXRmb3JtIiAvPg0KLSAgPC9JbXBvcnRHcm91cD4NCi0gIDxJbXBvcnRHcm91cCBDb25k
aXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVs
PSJQcm9wZXJ0eVNoZWV0cyI+DQotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilc
TWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygn
JChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExh
YmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCi0gIDwvSW1wb3J0R3JvdXA+DQotICA8UHJv
cGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4NCi0gIDxQcm9wZXJ0eUdyb3VwPg0KLSAg
ICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjQwMjE5LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+
DQotICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdEZWJ1Z3xXaW4zMiciPiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uKVw8L091dERpcj4N
Ci0gICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09
J0RlYnVnfFdpbjMyJyI+JChDb25maWd1cmF0aW9uKVxjb21tb25cPC9JbnREaXI+DQotICAgIDxP
dXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4
NjQnIj4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+
DQotICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdEZWJ1Z3x4NjQnIj4kKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPg0KLSAg
ICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVs
ZWFzZXxXaW4zMiciPiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uKVw8L091dERpcj4NCi0g
ICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Jl
bGVhc2V8V2luMzInIj4kKENvbmZpZ3VyYXRpb24pXGNvbW1vblw8L0ludERpcj4NCi0gICAgPE91
dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8
eDY0JyI+JChTb2x1dGlvbkRpcikkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGly
Pg0KLSAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nUmVsZWFzZXx4NjQnIj4kKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPg0K
LSAgPC9Qcm9wZXJ0eUdyb3VwPg0KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSIn
JChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPg0KLSAgICA8Q2xD
b21waWxlPg0KLSAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0g
ICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKFByb2plY3REaXIpOyQoUHJvamVj
dERpcikuLi87JChQcm9qZWN0RGlyKS4uLy4uL2luY2x1ZGU7JShBZGRpdGlvbmFsSW5jbHVkZURp
cmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJv
Y2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19MSUI7X0NSVF9TRUNVUkVfTk9fREVQUkVD
QVRFO05PTUlOTUFYOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZp
bml0aW9ucz4NCi0gICAgICA8TWluaW1hbFJlYnVpbGQ+dHJ1ZTwvTWluaW1hbFJlYnVpbGQ+DQot
ICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVD
aGVja3M+DQotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1ZzwvUnVudGlt
ZUxpYnJhcnk+DQotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDwvUHJlY29tcGls
ZWRIZWFkZXI+DQotICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDQ8L1dhcm5pbmdMZXZlbD4NCi0g
ICAgICA8VHJlYXRXYXJuaW5nQXNFcnJvcj50cnVlPC9UcmVhdFdhcm5pbmdBc0Vycm9yPg0KLSAg
ICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PkVkaXRBbmRDb250aW51ZTwvRGVidWdJbmZvcm1h
dGlvbkZvcm1hdD4NCi0gICAgICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+NDEwMDs0MTI3OzQx
ODk7NDIzOTs0MjQ0OzQyNDU7NDUxMjs0NzAyOzQ3MTg7JShEaXNhYmxlU3BlY2lmaWNXYXJuaW5n
cyk8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gIDwvSXRl
bURlZmluaXRpb25Hcm91cD4NCi0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQo
Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+DQotICAgIDxNaWRsPg0K
LSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50Pg0KLSAgICA8
L01pZGw+DQotICAgIDxDbENvbXBpbGU+DQotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwv
T3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQoUHJv
amVjdERpcik7JChQcm9qZWN0RGlyKS4uLzskKFByb2plY3REaXIpLi4vLi4vaW5jbHVkZTslKEFk
ZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVz
Pg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0xJQjtfQ1JU
X1NFQ1VSRV9OT19ERVBSRUNBVEU7Tk9NSU5NQVg7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8
L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxNaW5pbWFsUmVidWlsZD50cnVlPC9N
aW5pbWFsUmVidWlsZD4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkVuYWJsZUZhc3RDaGVj
a3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJl
YWRlZERlYnVnPC9SdW50aW1lTGlicmFyeT4NCi0gICAgICA8UHJlY29tcGlsZWRIZWFkZXI+DQot
ICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4NCi0gICAgICA8V2FybmluZ0xldmVsPkxldmVsNDwv
V2FybmluZ0xldmVsPg0KLSAgICAgIDxUcmVhdFdhcm5pbmdBc0Vycm9yPnRydWU8L1RyZWF0V2Fy
bmluZ0FzRXJyb3I+DQotICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFi
YXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KLSAgICAgIDxEaXNhYmxlU3BlY2lmaWNXYXJu
aW5ncz40MTAwOzQxMjc7NDE4OTs0MjM5OzQyNDQ7NDI0NTs0MjY3OzQ1MTI7NDcwMjs0NzE4OyUo
RGlzYWJsZVNwZWNpZmljV2FybmluZ3MpPC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4NCi0gICAg
PC9DbENvbXBpbGU+DQotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQotICA8SXRlbURlZmluaXRp
b25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVh
c2V8V2luMzInIj4NCi0gICAgPENsQ29tcGlsZT4NCi0gICAgICA8T3B0aW1pemF0aW9uPk1heFNw
ZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPkFueVN1
aXRhYmxlPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1
ZGVEaXJlY3Rvcmllcz4kKFByb2plY3REaXIpOyQoUHJvamVjdERpcikuLi87JChQcm9qZWN0RGly
KS4uLy4uL2luY2x1ZGU7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25h
bEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lO
MzI7TkRFQlVHO19MSUI7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO05PTUlOTUFYO19TRUNVUkVf
U0NMPTA7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25z
Pg0KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4N
Ci0gICAgICA8UHJlY29tcGlsZWRIZWFkZXI+DQotICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4N
Ci0gICAgICA8V2FybmluZ0xldmVsPkxldmVsNDwvV2FybmluZ0xldmVsPg0KLSAgICAgIDxUcmVh
dFdhcm5pbmdBc0Vycm9yPnRydWU8L1RyZWF0V2FybmluZ0FzRXJyb3I+DQotICAgICAgPERlYnVn
SW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0
Pg0KLSAgICAgIDxEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz40MTAwOzQxMjc7NDE4OTs0MjM5OzQy
NDQ7NDI0NTs0NTEyOzQ3MDI7NDcxODslKERpc2FibGVTcGVjaWZpY1dhcm5pbmdzKTwvRGlzYWJs
ZVNwZWNpZmljV2FybmluZ3M+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgPC9JdGVtRGVmaW5pdGlv
bkdyb3VwPg0KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPg0KLSAgICA8TWlkbD4NCi0gICAgICA8
VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4NCi0gICAgPC9NaWRsPg0K
LSAgICA8Q2xDb21waWxlPg0KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXph
dGlvbj4NCi0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+QW55U3VpdGFibGU8L0lubGlu
ZUZ1bmN0aW9uRXhwYW5zaW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVz
PiQoUHJvamVjdERpcik7JChQcm9qZWN0RGlyKS4uLzskKFByb2plY3REaXIpLi4vLi4vaW5jbHVk
ZTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVj
dG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0xJ
QjtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7Tk9NSU5NQVg7X1NFQ1VSRV9TQ0w9MDslKFByZXBy
b2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFJ1
bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5Pg0KLSAgICAgIDxQcmVj
b21waWxlZEhlYWRlcj4NCi0gICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDxXYXJu
aW5nTGV2ZWw+TGV2ZWw0PC9XYXJuaW5nTGV2ZWw+DQotICAgICAgPFRyZWF0V2FybmluZ0FzRXJy
b3I+dHJ1ZTwvVHJlYXRXYXJuaW5nQXNFcnJvcj4NCi0gICAgICA8RGVidWdJbmZvcm1hdGlvbkZv
cm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQotICAgICAgPERp
c2FibGVTcGVjaWZpY1dhcm5pbmdzPjQxMDA7NDEyNzs0MTg5OzQyMzk7NDI0NDs0MjQ1OzQyNjc7
NDUxMjs0NzAyOzQ3MTg7JShEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncyk8L0Rpc2FibGVTcGVjaWZp
Y1dhcm5pbmdzPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4N
Ci0gIDxJdGVtR3JvdXA+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3IuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkNvZGVHZW4uY3BwIiAv
Pg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkNvbXBpbGVyLmNwcCIgLz4NCi0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSJkZWJ1Zy5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iRGV0
ZWN0Q2FsbERlcHRoLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJEZXRlY3REaXNj
b250aW51aXR5LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJEaWFnbm9zdGljcy5j
cHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iRGlyZWN0aXZlSGFuZGxlci5jcHAiIC8+
DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iRm9yTG9vcFVucm9sbC5jcHAiIC8+DQotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iSW5mb1NpbmsuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9IkluaXRpYWxpemUuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkluaXRpYWxp
emVEbGwuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkluaXRpYWxpemVHTFBvc2l0
aW9uLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJJbml0aWFsaXplUGFyc2VDb250
ZXh0LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJJbnRlcm1lZGlhdGUuY3BwIiAv
Pg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImludGVybU91dC5jcHAiIC8+DQotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iSW50ZXJtVHJhdmVyc2UuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ik1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSJvc3NvdXJjZV93aW4uY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ik91dHB1
dEVTU0wuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ik91dHB1dEdMU0wuY3BwIiAv
Pg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ik91dHB1dEdMU0xCYXNlLmNwcCIgLz4NCi0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSJPdXRwdXRITFNMLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSJwYXJzZUNvbnN0LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJQYXJz
ZUNvbnRleHQuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlBvb2xBbGxvYy5jcHAi
IC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iUXVhbGlmaWVyQWxpdmUuY3BwIiAvPg0KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9IlJlbW92ZVRyZWUuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9IlNlYXJjaFN5bWJvbC5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
U2hhZGVyTGFuZy5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iU3ltYm9sVGFibGUu
Y3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlRyYW5zbGF0b3JFU1NMLmNwcCIgLz4N
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJUcmFuc2xhdG9yR0xTTC5jcHAiIC8+DQotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iVHJhbnNsYXRvckhMU0wuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9IlVuZm9sZFNob3J0Q2lyY3VpdC5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSJVbmlmb3JtLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJ1dGlsLmNwcCIg
Lz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCIgLz4N
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJWYXJpYWJsZUluZm8uY3BwIiAvPg0KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9IlZhcmlhYmxlUGFja2VyLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSJnbHNsYW5nX2xleC5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iZ2xz
bGFuZ190YWIuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImRlcGdyYXBoXERlcGVu
ZGVuY3lHcmFwaC5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iZGVwZ3JhcGhcRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iZGVw
Z3JhcGhcRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSJkZXBncmFwaFxEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAiIC8+DQotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0idGltaW5nXFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIiAv
Pg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InRpbWluZ1xSZXN0cmljdFZlcnRleFNoYWRlclRp
bWluZy5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cdGhpcmRfcGFydHlcY29t
cGlsZXJcQXJyYXlCb3VuZHNDbGFtcGVyLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSJWZXJzaW9uR0xTTC5jcHAiIC8+DQotICA8L0l0ZW1Hcm91cD4NCi0gIDxJdGVtR3JvdXA+DQot
ICAgIDxDdXN0b21CdWlsZCBJbmNsdWRlPSJnbHNsYW5nLmwiPg0KLSAgICAgIDxNZXNzYWdlIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4N
Ci0gICAgICA8L01lc3NhZ2U+DQotICAgICAgPENvbW1hbmQgQ29uZGl0aW9uPSInJChDb25maWd1
cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPg0KLSAgICAgIDwvQ29tbWFuZD4N
Ci0gICAgICA8QWRkaXRpb25hbElucHV0cyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo
UGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5wdXRzKTwvQWRkaXRpb25h
bElucHV0cz4NCi0gICAgICA8T3V0cHV0cyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo
UGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShPdXRwdXRzKTwvT3V0cHV0cz4NCi0gICAgICA8
TWVzc2FnZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVn
fHg2NCciPg0KLSAgICAgIDwvTWVzc2FnZT4NCi0gICAgICA8Q29tbWFuZCBDb25kaXRpb249Iick
KENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPg0KLSAgICAgIDwvQ29t
bWFuZD4NCi0gICAgICA8QWRkaXRpb25hbElucHV0cyBDb25kaXRpb249IickKENvbmZpZ3VyYXRp
b24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoQWRkaXRpb25hbElucHV0cyk8L0FkZGl0
aW9uYWxJbnB1dHM+DQotICAgICAgPE91dHB1dHMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u
KXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKE91dHB1dHMpPC9PdXRwdXRzPg0KLSAgICAg
IDxNZXNzYWdlIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVs
ZWFzZXxXaW4zMiciPg0KLSAgICAgIDwvTWVzc2FnZT4NCi0gICAgICA8Q29tbWFuZCBDb25kaXRp
b249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4NCi0g
ICAgICA8L0NvbW1hbmQ+DQotICAgICAgPEFkZGl0aW9uYWxJbnB1dHMgQ29uZGl0aW9uPSInJChD
b25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JShBZGRpdGlvbmFs
SW5wdXRzKTwvQWRkaXRpb25hbElucHV0cz4NCi0gICAgICA8T3V0cHV0cyBDb25kaXRpb249Iick
KENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKE91dHB1dHMp
PC9PdXRwdXRzPg0KLSAgICAgIDxNZXNzYWdlIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8
JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4NCi0gICAgICA8L01lc3NhZ2U+DQotICAgICAg
PENvbW1hbmQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxl
YXNlfHg2NCciPg0KLSAgICAgIDwvQ29tbWFuZD4NCi0gICAgICA8QWRkaXRpb25hbElucHV0cyBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+
JShBZGRpdGlvbmFsSW5wdXRzKTwvQWRkaXRpb25hbElucHV0cz4NCi0gICAgICA8T3V0cHV0cyBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+
JShPdXRwdXRzKTwvT3V0cHV0cz4NCi0gICAgPC9DdXN0b21CdWlsZD4NCi0gICAgPEN1c3RvbUJ1
aWxkIEluY2x1ZGU9Imdsc2xhbmcueSI+DQotICAgICAgPE1lc3NhZ2UgQ29uZGl0aW9uPSInJChD
b25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPg0KLSAgICAgIDwvTWVz
c2FnZT4NCi0gICAgICA8Q29tbWFuZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+DQotICAgICAgPC9Db21tYW5kPg0KLSAgICAgIDxPdXRw
dXRzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2lu
MzInIj4lKE91dHB1dHMpPC9PdXRwdXRzPg0KLSAgICAgIDxNZXNzYWdlIENvbmRpdGlvbj0iJyQo
Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+DQotICAgICAgPC9NZXNz
YWdlPg0KLSAgICAgIDxDb21tYW5kIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nRGVidWd8eDY0JyI+DQotICAgICAgPC9Db21tYW5kPg0KLSAgICAgIDxPdXRwdXRz
IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+
JShPdXRwdXRzKTwvT3V0cHV0cz4NCi0gICAgICA8TWVzc2FnZSBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4NCi0gICAgICA8L01lc3Nh
Z2U+DQotICAgICAgPENvbW1hbmQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRm
b3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+DQotICAgICAgPC9Db21tYW5kPg0KLSAgICAgIDxPdXRw
dXRzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxX
aW4zMiciPiUoT3V0cHV0cyk8L091dHB1dHM+DQotICAgICAgPE1lc3NhZ2UgQ29uZGl0aW9uPSIn
JChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPg0KLSAgICAgIDwv
TWVzc2FnZT4NCi0gICAgICA8Q29tbWFuZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo
UGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+DQotICAgICAgPC9Db21tYW5kPg0KLSAgICAgIDxP
dXRwdXRzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFz
ZXx4NjQnIj4lKE91dHB1dHMpPC9PdXRwdXRzPg0KLSAgICA8L0N1c3RvbUJ1aWxkPg0KLSAgPC9J
dGVtR3JvdXA+DQotICA8SXRlbUdyb3VwPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkJhc2VU
eXBlcy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkJ1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iQ29tbW9uLmgiIC8+DQotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iQ29uc3RhbnRVbmlvbi5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9ImRlYnVnLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iRGV0ZWN0Q2FsbERl
cHRoLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iRGV0ZWN0RGlzY29udGludWl0eS5o
IiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkRpYWdub3N0aWNzLmgiIC8+DQotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iRGlyZWN0aXZlSGFuZGxlci5oIiAvPg0KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9IkZvckxvb3BVbnJvbGwuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJI
YXNoTmFtZXMuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJJbmZvU2luay5oIiAvPg0K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkluaXRpYWxpemUuaCIgLz4NCi0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSJJbml0aWFsaXplRGxsLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
SW5pdGlhbGl6ZUdsb2JhbHMuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJJbml0aWFs
aXplR0xQb3NpdGlvbi5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkluaXRpYWxpemVQ
YXJzZUNvbnRleHQuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJpbnRlcm1lZGlhdGUu
aCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJsb2NhbGludGVybWVkaWF0ZS5oIiAvPg0K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ik1hcExvbmdWYXJpYWJsZU5hbWVzLmgiIC8+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iTU1hcC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ik5vZGVTZWFyY2guaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJvc2luY2x1ZGUuaCIg
Lz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJPdXRwdXRFU1NMLmgiIC8+DQotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iT3V0cHV0R0xTTC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ik91dHB1dEdMU0xCYXNlLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iT3V0cHV0SExT
TC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlBhcnNlQ29udGV4dC5oIiAvPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlBvb2xBbGxvYy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9IlF1YWxpZmllckFsaXZlLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iUmVt
b3ZlVHJlZS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlJlbmFtZUZ1bmN0aW9uLmgi
IC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxHTFNMQU5HXFNoYWRl
ckxhbmcuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJTZWFyY2hTeW1ib2wuaCIgLz4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJTaEhhbmRsZS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9IlN5bWJvbFRhYmxlLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iVHJh
bnNsYXRvckVTU0wuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJUcmFuc2xhdG9yR0xT
TC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlRyYW5zbGF0b3JITFNMLmgiIC8+DQot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iVHlwZXMuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSJVbmZvbGRTaG9ydENpcmN1aXQuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJV
bmZvbGRTaG9ydENpcmN1aXRBU1QuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJVbmlm
b3JtLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0idXRpbC5oIiAvPg0KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9IlZhbGlkYXRlTGltaXRhdGlvbnMuaCIgLz4NCi0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSJWYXJpYWJsZUluZm8uaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJW
YXJpYWJsZVBhY2tlci5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Imdsc2xhbmdfdGFi
LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0idGltaW5nXFJlc3RyaWN0RnJhZ21lbnRT
aGFkZXJUaW1pbmcuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJ0aW1pbmdcUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJkZXBn
cmFwaFxEZXBlbmRlbmN5R3JhcGguaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJkZXBn
cmFwaFxEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiIC8+DQotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cdGhpcmRfcGFydHlcY29tcGlsZXJcQXJyYXlCb3VuZHNDbGFtcGVyLmgiIC8+
DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iVmVyc2lvbkdMU0wuaCIgLz4NCi0gIDwvSXRlbUdy
b3VwPg0KLSAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAu
dGFyZ2V0cyIgLz4NCi0gIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+DQot
ICA8L0ltcG9ydEdyb3VwPg0KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci52Y3hwcm9qLmZpbHRlcnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDIyNjMxMzdlNjFmYWUxYjg3YWY4ZmFlMDU1ODcyZDBhZGZiYTNkNjQuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IudmN4cHJvai5maWx0ZXJzCisrKyAvZGV2L251bGwK
QEAgLTEsMzYxICswLDAgQEAKLe+7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04
Ij8+DQotPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5t
aWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPg0KLSAgPEl0ZW1Hcm91cD4NCi0g
ICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXMiPg0KLSAgICAgIDxVbmlxdWVJZGVudGlm
aWVyPns0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9PC9VbmlxdWVJZGVudGlm
aWVyPg0KLSAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0
O2FzbTthc214PC9FeHRlbnNpb25zPg0KLSAgICA8L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJbmNs
dWRlPSJTb3VyY2UgRmlsZXNcZ2VuZXJhdGVkIj4NCi0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57
ZWI4ZGExNTctYjI5Yy00M2MzLTg4MGQtNTQ2NzllMTc2ZGM1fTwvVW5pcXVlSWRlbnRpZmllcj4N
Ci0gICAgPC9GaWx0ZXI+DQotICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzXGRlcGdy
YXBoIj4NCi0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57YjU0MTBkM2EtYzNjOC00YWU2LTg0M2Et
YjAwMGQ2NTI2MzJlfTwvVW5pcXVlSWRlbnRpZmllcj4NCi0gICAgPC9GaWx0ZXI+DQotICAgIDxG
aWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzXHRpbWluZyI+DQotICAgICAgPFVuaXF1ZUlkZW50
aWZpZXI+e2E5ODQ3NjExLWRjZDUtNGM4OS04MjYyLWEyMmI5NmM3Yzk4ZH08L1VuaXF1ZUlkZW50
aWZpZXI+DQotICAgIDwvRmlsdGVyPg0KLSAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxl
cyI+DQotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYy
NUZCRTUyRUJGQn08L1VuaXF1ZUlkZW50aWZpZXI+DQotICAgICAgPEV4dGVuc2lvbnM+aDtocHA7
aHh4O2htO2lubDtpbmM7eHNkPC9FeHRlbnNpb25zPg0KLSAgICA8L0ZpbHRlcj4NCi0gICAgPEZp
bHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXNcZ2VuZXJhdGVkIj4NCi0gICAgICA8VW5pcXVlSWRl
bnRpZmllcj57MDk0ZjcxMTUtMzVkMy00YzYzLTg3MGMtYWI1ZjM5M2RjMmMyfTwvVW5pcXVlSWRl
bnRpZmllcj4NCi0gICAgPC9GaWx0ZXI+DQotICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZp
bGVzXHRpbWluZyI+DQotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezVmNTc0MmU5LTE1ZTEtNDNi
NC1iMWU3LTBjMTE4YmUxNGUwNH08L1VuaXF1ZUlkZW50aWZpZXI+DQotICAgIDwvRmlsdGVyPg0K
LSAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlc1xkZXBncmFwaCI+DQotICAgICAgPFVu
aXF1ZUlkZW50aWZpZXI+e2M0MDA3ZTM1LTNjMTEtNDRkNi05NWY3LWJiODFkYjUyODA2OH08L1Vu
aXF1ZUlkZW50aWZpZXI+DQotICAgIDwvRmlsdGVyPg0KLSAgPC9JdGVtR3JvdXA+DQotICA8SXRl
bUdyb3VwPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9y
LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENv
bXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iQ29tcGlsZXIuY3BwIj4NCi0gICAgICA8
RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSJkZWJ1Zy5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVz
PC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkRl
dGVjdENhbGxEZXB0aC5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+
DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkRpYWdub3N0aWNz
LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENv
bXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iRGlyZWN0aXZlSGFuZGxlci5jcHAiPg0K
LSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkZvckxvb3BVbnJvbGwuY3BwIj4NCi0gICAgICA8Rmls
dGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSJJbmZvU2luay5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVz
PC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Iklu
aXRpYWxpemUuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAg
ICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJJbml0aWFsaXplRGxsLmNw
cCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBp
bGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAi
Pg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxl
Pg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkludGVybWVkaWF0ZS5jcHAiPg0KLSAgICAgIDxG
aWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9ImludGVybU91dC5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZp
bGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
IkludGVybVRyYXZlcnNlLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRl
cj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0K
LSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJvc3NvdXJjZV93aW4u
Y3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29t
cGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJwYXJzZUNvbnN0LmNwcCI+DQotICAgICAg
PEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iUG9vbEFsbG9jLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2Ug
RmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iUXVhbGlmaWVyQWxpdmUuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmls
dGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJSZW1vdmVU
cmVlLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9D
bENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iU2hhZGVyTGFuZy5jcHAiPg0KLSAg
ICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9IlN5bWJvbFRhYmxlLmNwcCI+DQotICAgICAgPEZpbHRlcj5T
b3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0idXRpbC5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+
DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlZhbGlkYXRlTGlt
aXRhdGlvbnMuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAg
ICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJWYXJpYWJsZUluZm8uY3Bw
Ij4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGls
ZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJWYXJpYWJsZVBhY2tlci5jcHAiPg0KLSAgICAg
IDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Imdsc2xhbmdfbGV4LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3Vy
Y2UgRmlsZXNcZ2VuZXJhdGVkPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Imdsc2xhbmdfdGFiLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2Ug
RmlsZXNcZ2VuZXJhdGVkPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9ImRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaC5jcHAiPg0KLSAgICAgIDxGaWx0
ZXI+U291cmNlIEZpbGVzXGRlcGdyYXBoPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9ImRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3Bw
Ij4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xkZXBncmFwaDwvRmlsdGVyPg0KLSAgICA8
L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJkZXBncmFwaFxEZXBlbmRlbmN5
R3JhcGhPdXRwdXQuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xkZXBncmFwaDwv
RmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJkZXBn
cmFwaFxEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNl
IEZpbGVzXGRlcGdyYXBoPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9InRpbWluZ1xSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCI+DQot
ICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGltaW5nPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21w
aWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InRpbWluZ1xSZXN0cmljdFZlcnRleFNoYWRl
clRpbWluZy5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHRpbWluZzwvRmlsdGVy
Pg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx0aGlyZF9w
YXJ0eVxjb21waWxlclxBcnJheUJvdW5kc0NsYW1wZXIuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNv
dXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSJJbml0aWFsaXplR0xQb3NpdGlvbi5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNl
IEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9IkRldGVjdERpc2NvbnRpbnVpdHkuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxl
czwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJP
dXRwdXRITFNMLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0g
ICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iU2VhcmNoU3ltYm9sLmNw
cCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBp
bGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iVHJhbnNsYXRvckhMU0wuY3BwIj4NCi0gICAg
ICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSJVbmZvbGRTaG9ydENpcmN1aXQuY3BwIj4NCi0gICAgICA8Rmls
dGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSJVbmlmb3JtLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8
L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iQ29k
ZUdlbi5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwv
Q2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlRyYW5zbGF0b3JHTFNMLmNwcCI+
DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+
DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iVHJhbnNsYXRvckVTU0wuY3BwIj4NCi0gICAgICA8
RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSJPdXRwdXRFU1NMLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2Ug
RmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iT3V0cHV0R0xTTC5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+
DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ik91dHB1dEdMU0xC
YXNlLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9D
bENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iVmVyc2lvbkdMU0wuY3BwIj4NCi0g
ICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSJVbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwIj4NCi0gICAg
ICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSJQYXJzZUNvbnRleHQuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNv
dXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gIDwvSXRlbUdyb3VwPg0K
LSAgPEl0ZW1Hcm91cD4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJCYXNlVHlwZXMuaCI+DQot
ICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCI+DQotICAg
ICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iQ29tbW9uLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZp
bGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
IkNvbnN0YW50VW5pb24uaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4N
Ci0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iZGVidWcuaCI+DQot
ICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iRGV0ZWN0Q2FsbERlcHRoLmgiPg0KLSAgICAgIDxGaWx0
ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9IkRpYWdub3N0aWNzLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVz
PC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkRp
cmVjdGl2ZUhhbmRsZXIuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4N
Ci0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iRm9yTG9vcFVucm9s
bC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5j
bHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJJbmZvU2luay5oIj4NCi0gICAgICA8Rmls
dGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSJJbml0aWFsaXplLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVz
PC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Iklu
aXRpYWxpemVEbGwuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0g
ICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iSW5pdGlhbGl6ZUdsb2Jh
bHMuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbElu
Y2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5o
Ij4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVk
ZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJpbnRlcm1lZGlhdGUuaCI+DQotICAgICAgPEZp
bHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0ibG9jYWxpbnRlcm1lZGlhdGUuaCI+DQotICAgICAgPEZpbHRlcj5IZWFk
ZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmls
ZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
TU1hcC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0Ns
SW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJvc2luY2x1ZGUuaCI+DQotICAgICAg
PEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iUG9vbEFsbG9jLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZp
bGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
IlF1YWxpZmllckFsaXZlLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+
DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlJlbW92ZVRyZWUu
aCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1
ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iUmVuYW1lRnVuY3Rpb24uaCI+DQotICAgICAg
PEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxHTFNMQU5HXFNoYWRlckxhbmcuaCI+DQot
ICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iU2hIYW5kbGUuaCI+DQotICAgICAgPEZpbHRlcj5IZWFk
ZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iU3ltYm9sVGFibGUuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRl
cj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iVHlwZXMuaCI+
DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+
DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0idXRpbC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRl
ciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSJWYWxpZGF0ZUxpbWl0YXRpb25zLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVz
PC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlZh
cmlhYmxlSW5mby5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAg
ICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJWYXJpYWJsZVBhY2tlci5o
Ij4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVk
ZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJnbHNsYW5nX3RhYi5oIj4NCi0gICAgICA8Rmls
dGVyPkhlYWRlciBGaWxlc1xnZW5lcmF0ZWQ8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0idGltaW5nXFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1p
bmcuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGltaW5nPC9GaWx0ZXI+DQotICAg
IDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InRpbWluZ1xSZXN0cmljdFZl
cnRleFNoYWRlclRpbWluZy5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aW1pbmc8
L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iZGVw
Z3JhcGhcRGVwZW5kZW5jeUdyYXBoLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXGRl
cGdyYXBoPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9ImRlcGdyYXBoXERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCI+DQotICAgICAgPEZpbHRlcj5I
ZWFkZXIgRmlsZXNcZGVwZ3JhcGg8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iZGVwZ3JhcGhcRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiPg0KLSAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXGRlcGdyYXBoPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNs
dWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ikhhc2hOYW1lcy5oIj4NCi0gICAgICA8Rmls
dGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSJJbml0aWFsaXplR0xQb3NpdGlvbi5oIj4NCi0gICAgICA8RmlsdGVyPkhl
YWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlx0aGlyZF9wYXJ0eVxjb21waWxlclxBcnJheUJvdW5kc0NsYW1wZXIuaCI+DQot
ICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iRGV0ZWN0RGlzY29udGludWl0eS5oIj4NCi0gICAgICA8
RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSJPdXRwdXRITFNMLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZp
bGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
IlNlYXJjaFN5bWJvbC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0K
LSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJUcmFuc2xhdG9ySExT
TC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5j
bHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJVbmZvbGRTaG9ydENpcmN1aXQuaCI+DQot
ICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iVW5pZm9ybS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRl
ciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSJUcmFuc2xhdG9yR0xTTC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmls
dGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJUcmFuc2xh
dG9yRVNTTC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8
L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJPdXRwdXRFU1NMLmgiPg0KLSAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ik91dHB1dEdMU0wuaCI+DQotICAgICAgPEZpbHRlcj5IZWFk
ZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iT3V0cHV0R0xTTEJhc2UuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0Zp
bHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iVmVyc2lv
bkdMU0wuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9D
bEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iVW5mb2xkU2hvcnRDaXJjdWl0QVNU
LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNs
dWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlBhcnNlQ29udGV4dC5oIj4NCi0gICAgICA8
RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSJOb2RlU2VhcmNoLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZp
bGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgPC9JdGVtR3JvdXA+DQotICA8SXRl
bUdyb3VwPg0KLSAgICA8Q3VzdG9tQnVpbGQgSW5jbHVkZT0iZ2xzbGFuZy5sIj4NCi0gICAgICA8
RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0N1c3RvbUJ1aWxkPg0KLSAgICA8
Q3VzdG9tQnVpbGQgSW5jbHVkZT0iZ2xzbGFuZy55Ij4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBG
aWxlczwvRmlsdGVyPg0KLSAgICA8L0N1c3RvbUJ1aWxkPg0KLSAgPC9JdGVtR3JvdXA+DQotPC9Q
cm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Jhc2VUeXBlcy5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQmFzZVR5cGVzLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uN2JkYWYxNDk4MzlkMGFmN2JiNTY0NDBmODQxM2E4ZDQyMDk0NTBmNQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0Jhc2VUeXBlcy5oCkBAIC0wLDAgKzEsMTQ5IEBACisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaWZuZGVmIF9CQVNJQ1RZUEVTX0lOQ0xVREVEXworI2RlZmluZSBfQkFTSUNUWVBFU19JTkNM
VURFRF8KKworLy8KKy8vIFByZWNpc2lvbiBxdWFsaWZpZXJzCisvLworZW51bSBUUHJlY2lzaW9u
Cit7CisgICAgLy8gVGhlc2UgbmVlZCB0byBiZSBrZXB0IHNvcnRlZAorICAgIEVicFVuZGVmaW5l
ZCwKKyAgICBFYnBMb3csCisgICAgRWJwTWVkaXVtLAorICAgIEVicEhpZ2gKK307CisKK2lubGlu
ZSBjb25zdCBjaGFyKiBnZXRQcmVjaXNpb25TdHJpbmcoVFByZWNpc2lvbiBwKQoreworICAgIHN3
aXRjaChwKQorICAgIHsKKyAgICBjYXNlIEVicEhpZ2g6CQlyZXR1cm4gImhpZ2hwIjsJCWJyZWFr
OworICAgIGNhc2UgRWJwTWVkaXVtOgkJcmV0dXJuICJtZWRpdW1wIjsJYnJlYWs7CisgICAgY2Fz
ZSBFYnBMb3c6CQlyZXR1cm4gImxvd3AiOwkJYnJlYWs7CisgICAgZGVmYXVsdDoJCQlyZXR1cm4g
Im1lZGl1bXAiOyAgIGJyZWFrOyAgIC8vIFNhZmVzdCBmYWxsYmFjaworICAgIH0KK30KKworLy8K
Ky8vIEJhc2ljIHR5cGUuICBBcnJheXMsIHZlY3RvcnMsIGV0Yy4sIGFyZSBvcnRob2dvbmFsIHRv
IHRoaXMuCisvLworZW51bSBUQmFzaWNUeXBlCit7CisgICAgRWJ0Vm9pZCwKKyAgICBFYnRGbG9h
dCwKKyAgICBFYnRJbnQsCisgICAgRWJ0Qm9vbCwKKyAgICBFYnRHdWFyZFNhbXBsZXJCZWdpbiwg
IC8vIG5vbiB0eXBlOiAgc2VlIGltcGxlbWVudGF0aW9uIG9mIElzU2FtcGxlcigpCisgICAgRWJ0
U2FtcGxlcjJELAorICAgIEVidFNhbXBsZXJDdWJlLAorICAgIEVidFNhbXBsZXJFeHRlcm5hbE9F
UywgIC8vIE9ubHkgdmFsaWQgaWYgT0VTX0VHTF9pbWFnZV9leHRlcm5hbCBleGlzdHMuCisgICAg
RWJ0U2FtcGxlcjJEUmVjdCwgICAgICAgLy8gT25seSB2YWxpZCBpZiBHTF9BUkJfdGV4dHVyZV9y
ZWN0YW5nbGUgZXhpc3RzLgorICAgIEVidEd1YXJkU2FtcGxlckVuZCwgICAgLy8gbm9uIHR5cGU6
ICBzZWUgaW1wbGVtZW50YXRpb24gb2YgSXNTYW1wbGVyKCkKKyAgICBFYnRTdHJ1Y3QsCisgICAg
RWJ0QWRkcmVzcywgICAgICAgICAgICAvLyBzaG91bGQgYmUgZGVwcmVjYXRlZD8/CisgICAgRWJ0
SW52YXJpYW50ICAgICAgICAgIC8vIHVzZWQgYXMgYSB0eXBlIHdoZW4gcXVhbGlmeWluZyBhIHBy
ZXZpb3VzbHkgZGVjbGFyZWQgdmFyaWFibGUgYXMgYmVpbmcgaW52YXJpYW50Cit9OworCitpbmxp
bmUgY29uc3QgY2hhciogZ2V0QmFzaWNTdHJpbmcoVEJhc2ljVHlwZSB0KQoreworICAgIHN3aXRj
aCAodCkKKyAgICB7CisgICAgY2FzZSBFYnRWb2lkOiAgICAgICAgICAgICAgcmV0dXJuICJ2b2lk
IjsgICAgICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRWJ0RmxvYXQ6ICAgICAgICAgICAgIHJl
dHVybiAiZmxvYXQiOyAgICAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEVidEludDogICAgICAg
ICAgICAgICByZXR1cm4gImludCI7ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFYnRC
b29sOiAgICAgICAgICAgICAgcmV0dXJuICJib29sIjsgICAgICAgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAgICAgIHJldHVybiAic2FtcGxlcjJEIjsgICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiAgICAgICByZXR1cm4gInNhbXBsZXJDdWJl
IjsgICAgICAgYnJlYWs7CisgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6IHJldHVybiAi
c2FtcGxlckV4dGVybmFsT0VTIjsgYnJlYWs7CisgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OiAg
ICAgcmV0dXJuICJzYW1wbGVyMkRSZWN0IjsgICAgIGJyZWFrOworICAgIGNhc2UgRWJ0U3RydWN0
OiAgICAgICAgICAgIHJldHVybiAic3RydWN0dXJlIjsgICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OiAgICAgICAgICAgICAgICAgICByZXR1cm4gInVua25vd24gdHlwZSI7CisgICAgfQorfQor
CitpbmxpbmUgYm9vbCBJc1NhbXBsZXIoVEJhc2ljVHlwZSB0eXBlKQoreworICAgIHJldHVybiB0
eXBlID4gRWJ0R3VhcmRTYW1wbGVyQmVnaW4gJiYgdHlwZSA8IEVidEd1YXJkU2FtcGxlckVuZDsK
K30KKworLy8KKy8vIFF1YWxpZmllcnMgYW5kIGJ1aWx0LWlucy4gIFRoZXNlIGFyZSBtYWlubHkg
dXNlZCB0byBzZWUgd2hhdCBjYW4gYmUgcmVhZAorLy8gb3Igd3JpdHRlbiwgYW5kIGJ5IHRoZSBt
YWNoaW5lIGRlcGVuZGVudCB0cmFuc2xhdG9yIHRvIGtub3cgd2hpY2ggcmVnaXN0ZXJzCisvLyB0
byBhbGxvY2F0ZSB2YXJpYWJsZXMgaW4uICBTaW5jZSBidWlsdC1pbnMgdGVuZCB0byBnbyB0byBk
aWZmZXJlbnQgcmVnaXN0ZXJzCisvLyB0aGFuIHZhcnlpbmcgb3IgdW5pZm9ybSwgaXQgbWFrZXMg
c2Vuc2UgdGhleSBhcmUgcGVlcnMsIG5vdCBzdWItY2xhc3Nlcy4KKy8vCitlbnVtIFRRdWFsaWZp
ZXIKK3sKKyAgICBFdnFUZW1wb3JhcnksICAgICAvLyBGb3IgdGVtcG9yYXJpZXMgKHdpdGhpbiBh
IGZ1bmN0aW9uKSwgcmVhZC93cml0ZQorICAgIEV2cUdsb2JhbCwgICAgICAgIC8vIEZvciBnbG9i
YWxzIHJlYWQvd3JpdGUKKyAgICBFdnFJbnRlcm5hbCwgICAgICAvLyBGb3IgaW50ZXJuYWwgdXNl
LCBub3QgdmlzaWJsZSB0byB0aGUgdXNlcgorICAgIEV2cUNvbnN0LCAgICAgICAgIC8vIFVzZXIg
ZGVmaW5lZCBjb25zdGFudHMgYW5kIG5vbi1vdXRwdXQgcGFyYW1ldGVycyBpbiBmdW5jdGlvbnMK
KyAgICBFdnFBdHRyaWJ1dGUsICAgICAvLyBSZWFkb25seQorICAgIEV2cVZhcnlpbmdJbiwgICAg
IC8vIHJlYWRvbmx5LCBmcmFnbWVudCBzaGFkZXJzIG9ubHkKKyAgICBFdnFWYXJ5aW5nT3V0LCAg
ICAvLyB2ZXJ0ZXggc2hhZGVycyBvbmx5ICByZWFkL3dyaXRlCisgICAgRXZxSW52YXJpYW50VmFy
eWluZ0luLCAgICAgLy8gcmVhZG9ubHksIGZyYWdtZW50IHNoYWRlcnMgb25seQorICAgIEV2cUlu
dmFyaWFudFZhcnlpbmdPdXQsICAgIC8vIHZlcnRleCBzaGFkZXJzIG9ubHkgIHJlYWQvd3JpdGUK
KyAgICBFdnFVbmlmb3JtLCAgICAgICAvLyBSZWFkb25seSwgdmVydGV4IGFuZCBmcmFnbWVudAor
CisgICAgLy8gcGFyYW1ldGVycworICAgIEV2cUluLAorICAgIEV2cU91dCwKKyAgICBFdnFJbk91
dCwKKyAgICBFdnFDb25zdFJlYWRPbmx5LAorCisgICAgLy8gYnVpbHQtaW5zIHdyaXR0ZW4gYnkg
dmVydGV4IHNoYWRlcgorICAgIEV2cVBvc2l0aW9uLAorICAgIEV2cVBvaW50U2l6ZSwKKworICAg
IC8vIGJ1aWx0LWlucyByZWFkIGJ5IGZyYWdtZW50IHNoYWRlcgorICAgIEV2cUZyYWdDb29yZCwK
KyAgICBFdnFGcm9udEZhY2luZywKKyAgICBFdnFQb2ludENvb3JkLAorCisgICAgLy8gYnVpbHQt
aW5zIHdyaXR0ZW4gYnkgZnJhZ21lbnQgc2hhZGVyCisgICAgRXZxRnJhZ0NvbG9yLAorICAgIEV2
cUZyYWdEYXRhLAorICAgIEV2cUZyYWdEZXB0aCwKKworICAgIC8vIGVuZCBvZiBsaXN0CisgICAg
RXZxTGFzdAorfTsKKworLy8KKy8vIFRoaXMgaXMganVzdCBmb3IgZGVidWcgcHJpbnQgb3V0LCBj
YXJyaWVkIGFsb25nIHdpdGggdGhlIGRlZmluaXRpb25zIGFib3ZlLgorLy8KK2lubGluZSBjb25z
dCBjaGFyKiBnZXRRdWFsaWZpZXJTdHJpbmcoVFF1YWxpZmllciBxKQoreworICAgIHN3aXRjaChx
KQorICAgIHsKKyAgICBjYXNlIEV2cVRlbXBvcmFyeTogICAgICByZXR1cm4gIlRlbXBvcmFyeSI7
ICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFHbG9iYWw6ICAgICAgICAgcmV0dXJuICJHbG9iYWwi
OyAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxQ29uc3Q6ICAgICAgICAgIHJldHVybiAiY29u
c3QiOyAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUNvbnN0UmVhZE9ubHk6ICByZXR1cm4g
ImNvbnN0IjsgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFBdHRyaWJ1dGU6ICAgICAgcmV0
dXJuICJhdHRyaWJ1dGUiOyAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxVmFyeWluZ0luOiAgICAg
IHJldHVybiAidmFyeWluZyI7ICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cVZhcnlpbmdPdXQ6
ICAgICByZXR1cm4gInZhcnlpbmciOyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFJbnZhcmlh
bnRWYXJ5aW5nSW46IHJldHVybiAiaW52YXJpYW50IHZhcnlpbmciOwlicmVhazsKKyAgICBjYXNl
IEV2cUludmFyaWFudFZhcnlpbmdPdXQ6cmV0dXJuICJpbnZhcmlhbnQgdmFyeWluZyI7CWJyZWFr
OworICAgIGNhc2UgRXZxVW5pZm9ybTogICAgICAgIHJldHVybiAidW5pZm9ybSI7ICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEV2cUluOiAgICAgICAgICAgICByZXR1cm4gImluIjsgICAgICAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBFdnFPdXQ6ICAgICAgICAgICAgcmV0dXJuICJvdXQiOyAgICAg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxSW5PdXQ6ICAgICAgICAgIHJldHVybiAiaW5vdXQi
OyAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cVBvc2l0aW9uOiAgICAgICByZXR1cm4gIlBv
c2l0aW9uIjsgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFQb2ludFNpemU6ICAgICAgcmV0dXJu
ICJQb2ludFNpemUiOyAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxRnJhZ0Nvb3JkOiAgICAgIHJl
dHVybiAiRnJhZ0Nvb3JkIjsgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUZyb250RmFjaW5nOiAg
ICByZXR1cm4gIkZyb250RmFjaW5nIjsgICAgYnJlYWs7CisgICAgY2FzZSBFdnFGcmFnQ29sb3I6
ICAgICAgcmV0dXJuICJGcmFnQ29sb3IiOyAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxRnJhZ0Rh
dGE6ICAgICAgIHJldHVybiAiRnJhZ0RhdGEiOyAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxRnJh
Z0RlcHRoOiAgICAgIHJldHVybiAiRnJhZ0RlcHRoIjsgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
ICAgICAgICAgICAgICAgIHJldHVybiAidW5rbm93biBxdWFsaWZpZXIiOworICAgIH0KK30KKwor
I2VuZGlmIC8vIF9CQVNJQ1RZUEVTX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkyYjcxYzZiZGIxNzM3YzAx
MmI2OTZkNWZkOTBlZjAzNzI3NWNjZWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9CdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5jcHAKQEAgLTAsMCArMSw0MDYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmgiCisKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgiCisKK25hbWVzcGFjZSB7CisKKy8v
IHdlIHVzZSBtYWNyb3MgaGVyZSBpbnN0ZWFkIG9mIGZ1bmN0aW9uIGRlZmluaXRpb25zIHRvIHdv
cmsgYXJvdW5kIG1vcmUgR0xTTAorLy8gY29tcGlsZXIgYnVncywgaW4gcGFydGljdWxhciBvbiBO
VklESUEgaGFyZHdhcmUgb24gTWFjIE9TWC4gTWFjcm9zIGFyZQorLy8gcHJvYmxlbWF0aWMgYmVj
YXVzZSBpZiB0aGUgYXJndW1lbnQgaGFzIHNpZGUtZWZmZWN0cyB0aGV5IHdpbGwgYmUgcmVwZWF0
ZWRseQorLy8gZXZhbHVhdGVkLiBUaGlzIGlzIHVubGlrZWx5IHRvIHNob3cgdXAgaW4gcmVhbCBz
aGFkZXJzLCBidXQgaXMgc29tZXRoaW5nIHRvCisvLyBjb25zaWRlci4KK2NvbnN0IGNoYXIqIGtG
dW5jdGlvbkVtdWxhdGlvblZlcnRleFNvdXJjZVtdID0geworICAgICIjZXJyb3Igbm8gZW11bGF0
aW9uIGZvciBjb3MoZmxvYXQpIiwKKyAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgY29zKHZl
YzIpIiwKKyAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgY29zKHZlYzMpIiwKKyAgICAiI2Vy
cm9yIG5vIGVtdWxhdGlvbiBmb3IgY29zKHZlYzQpIiwKKworICAgICIjZGVmaW5lIHdlYmdsX2Rp
c3RhbmNlX2VtdSh4LCB5KSAoKHgpID49ICh5KSA/ICh4KSAtICh5KSA6ICh5KSAtICh4KSkiLAor
ICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkaXN0YW5jZSh2ZWMyLCB2ZWMyKSIsCisgICAg
IiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRpc3RhbmNlKHZlYzMsIHZlYzMpIiwKKyAgICAiI2Vy
cm9yIG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UodmVjNCwgdmVjNCkiLAorCisgICAgIiNkZWZp
bmUgd2ViZ2xfZG90X2VtdSh4LCB5KSAoKHgpICogKHkpKSIsCisgICAgIiNlcnJvciBubyBlbXVs
YXRpb24gZm9yIGRvdCh2ZWMyLCB2ZWMyKSIsCisgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9y
IGRvdCh2ZWMzLCB2ZWMzKSIsCisgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRvdCh2ZWM0
LCB2ZWM0KSIsCisKKyAgICAiI2RlZmluZSB3ZWJnbF9sZW5ndGhfZW11KHgpICgoeCkgPj0gMC4w
ID8gKHgpIDogLSh4KSkiLAorICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBsZW5ndGgodmVj
MikiLAorICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBsZW5ndGgodmVjMykiLAorICAgICIj
ZXJyb3Igbm8gZW11bGF0aW9uIGZvciBsZW5ndGgodmVjNCkiLAorCisgICAgIiNkZWZpbmUgd2Vi
Z2xfbm9ybWFsaXplX2VtdSh4KSAoKHgpID09IDAuMCA/IDAuMCA6ICgoeCkgPiAwLjAgPyAxLjAg
OiAtMS4wKSkiLAorICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBub3JtYWxpemUodmVjMiki
LAorICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBub3JtYWxpemUodmVjMykiLAorICAgICIj
ZXJyb3Igbm8gZW11bGF0aW9uIGZvciBub3JtYWxpemUodmVjNCkiLAorCisgICAgIiNkZWZpbmUg
d2ViZ2xfcmVmbGVjdF9lbXUoSSwgTikgKChJKSAtIDIuMCAqIChOKSAqIChJKSAqIChOKSkiLAor
ICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciByZWZsZWN0KHZlYzIsIHZlYzIpIiwKKyAgICAi
I2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgcmVmbGVjdCh2ZWMzLCB2ZWMzKSIsCisgICAgIiNlcnJv
ciBubyBlbXVsYXRpb24gZm9yIHJlZmxlY3QodmVjNCwgdmVjNCkiCit9OworCitjb25zdCBjaGFy
KiBrRnVuY3Rpb25FbXVsYXRpb25GcmFnbWVudFNvdXJjZVtdID0geworICAgICJ3ZWJnbF9lbXVf
cHJlY2lzaW9uIGZsb2F0IHdlYmdsX2Nvc19lbXUod2ViZ2xfZW11X3ByZWNpc2lvbiBmbG9hdCBh
KSB7IHJldHVybiBjb3MoYSk7IH0iLAorICAgICJ3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzIgd2Vi
Z2xfY29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzIgYSkgeyByZXR1cm4gY29zKGEpOyB9
IiwKKyAgICAid2ViZ2xfZW11X3ByZWNpc2lvbiB2ZWMzIHdlYmdsX2Nvc19lbXUod2ViZ2xfZW11
X3ByZWNpc2lvbiB2ZWMzIGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCisgICAgIndlYmdsX2VtdV9w
cmVjaXNpb24gdmVjNCB3ZWJnbF9jb3NfZW11KHdlYmdsX2VtdV9wcmVjaXNpb24gdmVjNCBhKSB7
IHJldHVybiBjb3MoYSk7IH0iLAorCisgICAgIiNkZWZpbmUgd2ViZ2xfZGlzdGFuY2VfZW11KHgs
IHkpICgoeCkgPj0gKHkpID8gKHgpIC0gKHkpIDogKHkpIC0gKHgpKSIsCisgICAgIiNlcnJvciBu
byBlbXVsYXRpb24gZm9yIGRpc3RhbmNlKHZlYzIsIHZlYzIpIiwKKyAgICAiI2Vycm9yIG5vIGVt
dWxhdGlvbiBmb3IgZGlzdGFuY2UodmVjMywgdmVjMykiLAorICAgICIjZXJyb3Igbm8gZW11bGF0
aW9uIGZvciBkaXN0YW5jZSh2ZWM0LCB2ZWM0KSIsCisKKyAgICAiI2RlZmluZSB3ZWJnbF9kb3Rf
ZW11KHgsIHkpICgoeCkgKiAoeSkpIiwKKyAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZG90
KHZlYzIsIHZlYzIpIiwKKyAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZG90KHZlYzMsIHZl
YzMpIiwKKyAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZG90KHZlYzQsIHZlYzQpIiwKKwor
ICAgICIjZGVmaW5lIHdlYmdsX2xlbmd0aF9lbXUoeCkgKCh4KSA+PSAwLjAgPyAoeCkgOiAtKHgp
KSIsCisgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2ZWMyKSIsCisgICAgIiNl
cnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2ZWMzKSIsCisgICAgIiNlcnJvciBubyBlbXVs
YXRpb24gZm9yIGxlbmd0aCh2ZWM0KSIsCisKKyAgICAiI2RlZmluZSB3ZWJnbF9ub3JtYWxpemVf
ZW11KHgpICgoeCkgPT0gMC4wID8gMC4wIDogKCh4KSA+IDAuMCA/IDEuMCA6IC0xLjApKSIsCisg
ICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2ZWMyKSIsCisgICAgIiNlcnJv
ciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2ZWMzKSIsCisgICAgIiNlcnJvciBubyBlbXVs
YXRpb24gZm9yIG5vcm1hbGl6ZSh2ZWM0KSIsCisKKyAgICAiI2RlZmluZSB3ZWJnbF9yZWZsZWN0
X2VtdShJLCBOKSAoKEkpIC0gMi4wICogKE4pICogKEkpICogKE4pKSIsCisgICAgIiNlcnJvciBu
byBlbXVsYXRpb24gZm9yIHJlZmxlY3QodmVjMiwgdmVjMikiLAorICAgICIjZXJyb3Igbm8gZW11
bGF0aW9uIGZvciByZWZsZWN0KHZlYzMsIHZlYzMpIiwKKyAgICAiI2Vycm9yIG5vIGVtdWxhdGlv
biBmb3IgcmVmbGVjdCh2ZWM0LCB2ZWM0KSIKK307CisKK2NvbnN0IGJvb2wga0Z1bmN0aW9uRW11
bGF0aW9uVmVydGV4TWFza1tdID0geworI2lmIGRlZmluZWQoX19BUFBMRV9fKQorICAgIC8vIFdv
cmsgYXJvdW5kIEFUSSBkcml2ZXIgYnVncyBpbiBNYWMuCisgICAgZmFsc2UsIC8vIFRGdW5jdGlv
bkNvczEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMgorICAgIGZhbHNlLCAvLyBURnVuY3Rp
b25Db3MzCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczQKKyAgICB0cnVlLCAgLy8gVEZ1bmN0
aW9uRGlzdGFuY2UxXzEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2UyXzIKKyAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2UzXzMKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlz
dGFuY2U0XzQKKyAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uRG90MV8xCisgICAgZmFsc2UsIC8vIFRG
dW5jdGlvbkRvdDJfMgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3QzXzMKKyAgICBmYWxzZSwg
Ly8gVEZ1bmN0aW9uRG90NF80CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkxlbmd0aDEKKyAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgz
CisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDQKKyAgICB0cnVlLCAgLy8gVEZ1bmN0aW9u
Tm9ybWFsaXplMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUyCisgICAgZmFsc2Us
IC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTMKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXpl
NAorICAgIHRydWUsICAvLyBURnVuY3Rpb25SZWZsZWN0MV8xCisgICAgZmFsc2UsIC8vIFRGdW5j
dGlvblJlZmxlY3QyXzIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDNfMworICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0NF80CisjZWxzZQorICAgIC8vIFdvcmsgYXJvdW5kIEQz
RCBkcml2ZXIgYnVnIGluIFdpbi4KKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMQorICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25Db3MyCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczMKKyAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uQ29zNAorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTFf
MQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTJfMgorICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25EaXN0YW5jZTNfMworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTRfNAorICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25Eb3QxXzEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90Ml8y
CisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDNfMworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25E
b3Q0XzQKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMQorICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25MZW5ndGgyCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDMKKyAgICBmYWxzZSwg
Ly8gVEZ1bmN0aW9uTGVuZ3RoNAorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUxCisg
ICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
Tm9ybWFsaXplMworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemU0CisgICAgZmFsc2Us
IC8vIFRGdW5jdGlvblJlZmxlY3QxXzEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDJf
MgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0M18zCisgICAgZmFsc2UsIC8vIFRGdW5j
dGlvblJlZmxlY3Q0XzQKKyNlbmRpZgorICAgIGZhbHNlICAvLyBURnVuY3Rpb25Vbmtub3duCit9
OworCitjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50TWFza1tdID0geworI2lm
IGRlZmluZWQoX19BUFBMRV9fKQorICAgIC8vIFdvcmsgYXJvdW5kIEFUSSBkcml2ZXIgYnVncyBp
biBNYWMuCisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczEKKyAgICB0cnVlLCAgLy8gVEZ1bmN0
aW9uQ29zMgorICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3MzCisgICAgdHJ1ZSwgIC8vIFRGdW5j
dGlvbkNvczQKKyAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uRGlzdGFuY2UxXzEKKyAgICBmYWxzZSwg
Ly8gVEZ1bmN0aW9uRGlzdGFuY2UyXzIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2Uz
XzMKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2U0XzQKKyAgICB0cnVlLCAgLy8gVEZ1
bmN0aW9uRG90MV8xCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDJfMgorICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25Eb3QzXzMKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90NF80CisgICAgdHJ1
ZSwgIC8vIFRGdW5jdGlvbkxlbmd0aDEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMgor
ICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgzCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxl
bmd0aDQKKyAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMQorICAgIGZhbHNlLCAvLyBU
RnVuY3Rpb25Ob3JtYWxpemUyCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTMKKyAg
ICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplNAorICAgIHRydWUsICAvLyBURnVuY3Rpb25S
ZWZsZWN0MV8xCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QyXzIKKyAgICBmYWxzZSwg
Ly8gVEZ1bmN0aW9uUmVmbGVjdDNfMworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0NF80
CisjZWxzZQorICAgIC8vIFdvcmsgYXJvdW5kIEQzRCBkcml2ZXIgYnVnIGluIFdpbi4KKyAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uQ29zMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MyCisgICAg
ZmFsc2UsIC8vIFRGdW5jdGlvbkNvczMKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zNAorICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25E
aXN0YW5jZTJfMgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTNfMworICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25EaXN0YW5jZTRfNAorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3QxXzEK
KyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90Ml8yCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRv
dDNfMworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3Q0XzQKKyAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uTGVuZ3RoMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgyCisgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkxlbmd0aDMKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoNAorICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUxCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1h
bGl6ZTIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMworICAgIGZhbHNlLCAvLyBU
RnVuY3Rpb25Ob3JtYWxpemU0CisgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QxXzEKKyAg
ICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDJfMgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25S
ZWZsZWN0M18zCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3Q0XzQKKyNlbmRpZgorICAg
IGZhbHNlICAvLyBURnVuY3Rpb25Vbmtub3duCit9OworCitjbGFzcyBCdWlsdEluRnVuY3Rpb25F
bXVsYXRpb25NYXJrZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7CitwdWJsaWM6CisgICAg
QnVpbHRJbkZ1bmN0aW9uRW11bGF0aW9uTWFya2VyKEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yJiBl
bXVsYXRvcikKKyAgICAgICAgOiBtRW11bGF0b3IoZW11bGF0b3IpCisgICAgeworICAgIH0KKwor
ICAgIHZpcnR1YWwgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqIG5v
ZGUpCisgICAgeworICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpIHsKKyAgICAgICAgICAg
IGJvb2wgbmVlZFRvRW11bGF0ZSA9IG1FbXVsYXRvci5TZXRGdW5jdGlvbkNhbGxlZCgKKyAgICAg
ICAgICAgICAgICBub2RlLT5nZXRPcCgpLCBub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKSk7
CisgICAgICAgICAgICBpZiAobmVlZFRvRW11bGF0ZSkKKyAgICAgICAgICAgICAgICBub2RlLT5z
ZXRVc2VFbXVsYXRlZEZ1bmN0aW9uKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBU
SW50ZXJtQWdncmVnYXRlKiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKHZpc2l0ID09IFByZVZp
c2l0KSB7CisgICAgICAgICAgICAvLyBIZXJlIHdlIGhhbmRsZSBhbGwgdGhlIGJ1aWx0LWluIGZ1
bmN0aW9ucyBpbnN0ZWFkIG9mIHRoZSBvbmVzIHdlCisgICAgICAgICAgICAvLyBjdXJyZW50bHkg
aWRlbnRpZmllZCBhcyBwcm9ibGVtYXRpYy4KKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0
T3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgRU9wTGVzc1RoYW46CisgICAgICAgICAgICAg
ICAgY2FzZSBFT3BHcmVhdGVyVGhhbjoKKyAgICAgICAgICAgICAgICBjYXNlIEVPcExlc3NUaGFu
RXF1YWw6CisgICAgICAgICAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgorICAgICAg
ICAgICAgICAgIGNhc2UgRU9wVmVjdG9yRXF1YWw6CisgICAgICAgICAgICAgICAgY2FzZSBFT3BW
ZWN0b3JOb3RFcXVhbDoKKyAgICAgICAgICAgICAgICBjYXNlIEVPcE1vZDoKKyAgICAgICAgICAg
ICAgICBjYXNlIEVPcFBvdzoKKyAgICAgICAgICAgICAgICBjYXNlIEVPcEF0YW46CisgICAgICAg
ICAgICAgICAgY2FzZSBFT3BNaW46CisgICAgICAgICAgICAgICAgY2FzZSBFT3BNYXg6CisgICAg
ICAgICAgICAgICAgY2FzZSBFT3BDbGFtcDoKKyAgICAgICAgICAgICAgICBjYXNlIEVPcE1peDoK
KyAgICAgICAgICAgICAgICBjYXNlIEVPcFN0ZXA6CisgICAgICAgICAgICAgICAgY2FzZSBFT3BT
bW9vdGhTdGVwOgorICAgICAgICAgICAgICAgIGNhc2UgRU9wRGlzdGFuY2U6CisgICAgICAgICAg
ICAgICAgY2FzZSBFT3BEb3Q6CisgICAgICAgICAgICAgICAgY2FzZSBFT3BDcm9zczoKKyAgICAg
ICAgICAgICAgICBjYXNlIEVPcEZhY2VGb3J3YXJkOgorICAgICAgICAgICAgICAgIGNhc2UgRU9w
UmVmbGVjdDoKKyAgICAgICAgICAgICAgICBjYXNlIEVPcFJlZnJhY3Q6CisgICAgICAgICAgICAg
ICAgY2FzZSBFT3BNdWw6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBub2Rl
LT5nZXRTZXF1ZW5jZSgpOworICAgICAgICAgICAgLy8gUmlnaHQgbm93IHdlIG9ubHkgaGFuZGxl
IGJ1aWx0LWluIGZ1bmN0aW9ucyB3aXRoIHR3byBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgaWYg
KHNlcXVlbmNlLnNpemUoKSAhPSAyKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgVEludGVybVR5cGVkKiBwYXJhbTEgPSBzZXF1ZW5jZVswXS0+Z2V0QXNUeXBlZCgp
OworICAgICAgICAgICAgVEludGVybVR5cGVkKiBwYXJhbTIgPSBzZXF1ZW5jZVsxXS0+Z2V0QXNU
eXBlZCgpOworICAgICAgICAgICAgaWYgKCFwYXJhbTEgfHwgIXBhcmFtMikKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGJvb2wgbmVlZFRvRW11bGF0ZSA9IG1FbXVs
YXRvci5TZXRGdW5jdGlvbkNhbGxlZCgKKyAgICAgICAgICAgICAgICBub2RlLT5nZXRPcCgpLCBw
YXJhbTEtPmdldFR5cGUoKSwgcGFyYW0yLT5nZXRUeXBlKCkpOworICAgICAgICAgICAgaWYgKG5l
ZWRUb0VtdWxhdGUpCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0VXNlRW11bGF0ZWRGdW5jdGlv
bigpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBCdWlsdEluRnVuY3Rpb25FbXVsYXRvciYgbUVtdWxhdG9yOworfTsKKworfSAgLy8gYW5v
bnltb3VzIG5hbWVwc2FjZQorCitCdWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6QnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IoU2hTaGFkZXJUeXBlIHNoYWRlclR5cGUpCit7CisgICAgaWYgKHNoYWRlclR5
cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKSB7CisgICAgICAgIG1GdW5jdGlvbk1hc2sgPSBrRnVu
Y3Rpb25FbXVsYXRpb25GcmFnbWVudE1hc2s7CisgICAgICAgIG1GdW5jdGlvblNvdXJjZSA9IGtG
dW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50U291cmNlOworICAgIH0gZWxzZSB7CisgICAgICAgIG1G
dW5jdGlvbk1hc2sgPSBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrOworICAgICAgICBtRnVu
Y3Rpb25Tb3VyY2UgPSBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhTb3VyY2U7CisgICAgfQorfQor
Citib29sIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpTZXRGdW5jdGlvbkNhbGxlZCgKKyAgICBU
T3BlcmF0b3Igb3AsIGNvbnN0IFRUeXBlJiBwYXJhbSkKK3sKKyAgICBUQnVpbHRJbkZ1bmN0aW9u
IGZ1bmN0aW9uID0gSWRlbnRpZnlGdW5jdGlvbihvcCwgcGFyYW0pOworICAgIHJldHVybiBTZXRG
dW5jdGlvbkNhbGxlZChmdW5jdGlvbik7Cit9CisKK2Jvb2wgQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3I6OlNldEZ1bmN0aW9uQ2FsbGVkKAorICAgIFRPcGVyYXRvciBvcCwgY29uc3QgVFR5cGUmIHBh
cmFtMSwgY29uc3QgVFR5cGUmIHBhcmFtMikKK3sKKyAgICBUQnVpbHRJbkZ1bmN0aW9uIGZ1bmN0
aW9uID0gSWRlbnRpZnlGdW5jdGlvbihvcCwgcGFyYW0xLCBwYXJhbTIpOworICAgIHJldHVybiBT
ZXRGdW5jdGlvbkNhbGxlZChmdW5jdGlvbik7Cit9CisKK2Jvb2wgQnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3I6OlNldEZ1bmN0aW9uQ2FsbGVkKAorICAgIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpU
QnVpbHRJbkZ1bmN0aW9uIGZ1bmN0aW9uKSB7CisgICAgaWYgKGZ1bmN0aW9uID09IFRGdW5jdGlv
blVua25vd24gfHwgbUZ1bmN0aW9uTWFza1tmdW5jdGlvbl0gPT0gZmFsc2UpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1GdW5jdGlvbnMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKG1GdW5jdGlvbnNbaV0gPT0gZnVuY3Rpb24pCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgbUZ1bmN0aW9ucy5wdXNoX2JhY2soZnVuY3Rp
b24pOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9y
OjpPdXRwdXRFbXVsYXRlZEZ1bmN0aW9uRGVmaW5pdGlvbigKKyAgICBUSW5mb1NpbmtCYXNlJiBv
dXQsIGJvb2wgd2l0aFByZWNpc2lvbikgY29uc3QKK3sKKyAgICBpZiAobUZ1bmN0aW9ucy5zaXpl
KCkgPT0gMCkKKyAgICAgICAgcmV0dXJuOworICAgIG91dCA8PCAiLy8gQkVHSU46IEdlbmVyYXRl
ZCBjb2RlIGZvciBidWlsdC1pbiBmdW5jdGlvbiBlbXVsYXRpb25cblxuIjsKKyAgICBpZiAod2l0
aFByZWNpc2lvbikgeworICAgICAgICBvdXQgPDwgIiNpZiBkZWZpbmVkKEdMX0ZSQUdNRU5UX1BS
RUNJU0lPTl9ISUdIKVxuIgorICAgICAgICAgICAgPDwgIiNkZWZpbmUgd2ViZ2xfZW11X3ByZWNp
c2lvbiBoaWdocFxuIgorICAgICAgICAgICAgPDwgIiNlbHNlXG4iCisgICAgICAgICAgICA8PCAi
I2RlZmluZSB3ZWJnbF9lbXVfcHJlY2lzaW9uIG1lZGl1bXBcbiIKKyAgICAgICAgICAgIDw8ICIj
ZW5kaWZcblxuIjsKKyAgICB9IGVsc2UgeworICAgICAgICBvdXQgPDwgIiNkZWZpbmUgd2ViZ2xf
ZW11X3ByZWNpc2lvblxuXG4iOworICAgIH0KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1G
dW5jdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgb3V0IDw8IG1GdW5jdGlvblNvdXJjZVtt
RnVuY3Rpb25zW2ldXSA8PCAiXG5cbiI7CisgICAgfQorICAgIG91dCA8PCAiLy8gRU5EOiBHZW5l
cmF0ZWQgY29kZSBmb3IgYnVpbHQtaW4gZnVuY3Rpb24gZW11bGF0aW9uXG5cbiI7Cit9CisKK0J1
aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpUQnVpbHRJbkZ1bmN0aW9uCitCdWlsdEluRnVuY3Rpb25F
bXVsYXRvcjo6SWRlbnRpZnlGdW5jdGlvbigKKyAgICBUT3BlcmF0b3Igb3AsIGNvbnN0IFRUeXBl
JiBwYXJhbSkKK3sKKyAgICBpZiAocGFyYW0uZ2V0Tm9taW5hbFNpemUoKSA+IDQpCisgICAgICAg
IHJldHVybiBURnVuY3Rpb25Vbmtub3duOworICAgIHVuc2lnbmVkIGludCBmdW5jdGlvbiA9IFRG
dW5jdGlvblVua25vd247CisgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIEVPcENvczoK
KyAgICAgICAgICAgIGZ1bmN0aW9uID0gVEZ1bmN0aW9uQ29zMTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEVPcExlbmd0aDoKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gVEZ1bmN0
aW9uTGVuZ3RoMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcE5vcm1hbGl6
ZToKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gVEZ1bmN0aW9uTm9ybWFsaXplMTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGlmIChmdW5jdGlvbiA9PSBURnVuY3Rpb25Vbmtub3duKQorICAgICAgICByZXR1cm4gVEZ1
bmN0aW9uVW5rbm93bjsKKyAgICBpZiAocGFyYW0uaXNWZWN0b3IoKSkKKyAgICAgICAgZnVuY3Rp
b24gKz0gcGFyYW0uZ2V0Tm9taW5hbFNpemUoKSAtIDE7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFRCdWlsdEluRnVuY3Rpb24+KGZ1bmN0aW9uKTsKK30KKworQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3I6OlRCdWlsdEluRnVuY3Rpb24KK0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpJZGVudGlmeUZ1
bmN0aW9uKAorICAgIFRPcGVyYXRvciBvcCwgY29uc3QgVFR5cGUmIHBhcmFtMSwgY29uc3QgVFR5
cGUmIHBhcmFtMikKK3sKKyAgICAvLyBSaWdodCBub3cgZm9yIGFsbCB0aGUgZW11bGF0ZWQgZnVu
Y3Rpb25zIHdpdGggdHdvIHBhcmFtZXRlcnMsIHRoZSB0d28KKyAgICAvLyBwYXJhbWV0ZXJzIGhh
dmUgdGhlIHNhbWUgdHlwZS4KKyAgICBpZiAocGFyYW0xLmlzVmVjdG9yKCkgIT0gcGFyYW0yLmlz
VmVjdG9yKCkgfHwKKyAgICAgICAgcGFyYW0xLmdldE5vbWluYWxTaXplKCkgIT0gcGFyYW0yLmdl
dE5vbWluYWxTaXplKCkgfHwKKyAgICAgICAgcGFyYW0xLmdldE5vbWluYWxTaXplKCkgPiA0KQor
ICAgICAgICByZXR1cm4gVEZ1bmN0aW9uVW5rbm93bjsKKworICAgIHVuc2lnbmVkIGludCBmdW5j
dGlvbiA9IFRGdW5jdGlvblVua25vd247CisgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNl
IEVPcERpc3RhbmNlOgorICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25EaXN0YW5jZTFf
MTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcERvdDoKKyAgICAgICAgICAg
IGZ1bmN0aW9uID0gVEZ1bmN0aW9uRG90MV8xOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wUmVmbGVjdDoKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gVEZ1bmN0aW9uUmVmbGVj
dDFfMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGlmIChmdW5jdGlvbiA9PSBURnVuY3Rpb25Vbmtub3duKQorICAg
ICAgICByZXR1cm4gVEZ1bmN0aW9uVW5rbm93bjsKKyAgICBpZiAocGFyYW0xLmlzVmVjdG9yKCkp
CisgICAgICAgIGZ1bmN0aW9uICs9IHBhcmFtMS5nZXROb21pbmFsU2l6ZSgpIC0gMTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VEJ1aWx0SW5GdW5jdGlvbj4oZnVuY3Rpb24pOworfQorCit2b2lk
IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpNYXJrQnVpbHRJbkZ1bmN0aW9uc0ZvckVtdWxhdGlv
bigKKyAgICBUSW50ZXJtTm9kZSogcm9vdCkKK3sKKyAgICBBU1NFUlQocm9vdCk7CisKKyAgICBC
dWlsdEluRnVuY3Rpb25FbXVsYXRpb25NYXJrZXIgbWFya2VyKCp0aGlzKTsKKyAgICByb290LT50
cmF2ZXJzZSgmbWFya2VyKTsKK30KKwordm9pZCBCdWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6Q2xl
YW51cCgpCit7CisgICAgbUZ1bmN0aW9ucy5jbGVhcigpOworfQorCisvL3N0YXRpYworVFN0cmlu
ZyBCdWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6R2V0RW11bGF0ZWRGdW5jdGlvbk5hbWUoCisgICAg
Y29uc3QgVFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NFUlQobmFtZVtuYW1lLmxlbmd0aCgpIC0g
MV0gPT0gJygnKTsKKyAgICByZXR1cm4gIndlYmdsXyIgKyBuYW1lLnN1YnN0cigwLCBuYW1lLmxl
bmd0aCgpIC0gMSkgKyAiX2VtdSgiOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZmI3MWE4MDNhY2M3ZDI4MzRiZjQwZjQ5
ZmQ5ZjhhYmIyNDY5ZDM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaApAQCAt
MCwwICsxLDkzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxJRVJfQlVJTFRfSU5f
RlVOQ1RJT05fRU1VTEFUT1JfSF8KKyNkZWZpbmUgQ09NUElMSUVSX0JVSUxUX0lOX0ZVTkNUSU9O
X0VNVUxBVE9SX0hfCisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgorCisvLworLy8gVGhpcyBjbGFzcyBkZWNpZGVzIHdo
aWNoIGJ1aWx0LWluIGZ1bmN0aW9ucyBuZWVkIHRvIGJlIHJlcGxhY2VkIHdpdGggdGhlCisvLyBl
bXVsYXRlZCBvbmVzLgorLy8gSXQncyBvbmx5IGEgd29ya2Fyb3VuZCBmb3IgT3BlbkdMIGRyaXZl
ciBidWdzLCBhbmQgaXNuJ3QgbmVlZGVkIGluIGdlbmVyYWwuCisvLworY2xhc3MgQnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3IgeworcHVibGljOgorICAgIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yKFNo
U2hhZGVyVHlwZSBzaGFkZXJUeXBlKTsKKyAgICAvLyBSZWNvcmRzIHRoYXQgYSBmdW5jdGlvbiBp
cyBjYWxsZWQgYnkgdGhlIHNoYWRlciBhbmQgbWlnaHQgbmVlZHMgdG8gYmUKKyAgICAvLyBlbXVs
YXRlZC4gIElmIHRoZSBmdW5jdGlvbidzIGdyb3VwIGlzIG5vdCBpbiBtRnVuY3Rpb25Hcm91cEZp
bHRlciwgdGhpcworICAgIC8vIGJlY29tZXMgYW4gbm8tb3AuCisgICAgLy8gUmV0dXJucyB0cnVl
IGlmIHRoZSBmdW5jdGlvbiBjYWxsIG5lZWRzIHRvIGJlIHJlcGxhY2VkIHdpdGggYW4gZW11bGF0
ZWQKKyAgICAvLyBvbmUuCisgICAgYm9vbCBTZXRGdW5jdGlvbkNhbGxlZChUT3BlcmF0b3Igb3As
IGNvbnN0IFRUeXBlJiBwYXJhbSk7CisgICAgYm9vbCBTZXRGdW5jdGlvbkNhbGxlZCgKKyAgICAg
ICAgVE9wZXJhdG9yIG9wLCBjb25zdCBUVHlwZSYgcGFyYW0xLCBjb25zdCBUVHlwZSYgcGFyYW0y
KTsKKworICAgIC8vIE91dHB1dCBmdW5jdGlvbiBlbXVsYXRpb24gZGVmaW5pdGlvbi4gIFRoaXMg
c2hvdWxkIGJlIGJlZm9yZSBhbnkgb3RoZXIKKyAgICAvLyBzaGFkZXIgc291cmNlLgorICAgIHZv
aWQgT3V0cHV0RW11bGF0ZWRGdW5jdGlvbkRlZmluaXRpb24oVEluZm9TaW5rQmFzZSYgb3V0LCBi
b29sIHdpdGhQcmVjaXNpb24pIGNvbnN0OworCisgICAgdm9pZCBNYXJrQnVpbHRJbkZ1bmN0aW9u
c0ZvckVtdWxhdGlvbihUSW50ZXJtTm9kZSogcm9vdCk7CisKKyAgICB2b2lkIENsZWFudXAoKTsK
KworICAgIC8vICJuYW1lKCIgYmVjb21lcyAid2ViZ2xfbmFtZV9lbXUoIi4KKyAgICBzdGF0aWMg
VFN0cmluZyBHZXRFbXVsYXRlZEZ1bmN0aW9uTmFtZShjb25zdCBUU3RyaW5nJiBuYW1lKTsKKwor
cHJpdmF0ZToKKyAgICAvLworICAgIC8vIEJ1aWx0LWluIGZ1bmN0aW9ucy4KKyAgICAvLworICAg
IGVudW0gVEJ1aWx0SW5GdW5jdGlvbiB7CisgICAgICAgIFRGdW5jdGlvbkNvczEgPSAwLCAgLy8g
ZmxvYXQgY29zKGZsb2F0KTsKKyAgICAgICAgVEZ1bmN0aW9uQ29zMiwgIC8vIHZlYzIgY29zKHZl
YzIpOworICAgICAgICBURnVuY3Rpb25Db3MzLCAgLy8gdmVjMyBjb3ModmVjMyk7CisgICAgICAg
IFRGdW5jdGlvbkNvczQsICAvLyB2ZWM0IGNvcyh2ZWM0KTsKKworICAgICAgICBURnVuY3Rpb25E
aXN0YW5jZTFfMSwgIC8vIGZsb2F0IGRpc3RhbmNlKGZsb2F0LCBmbG9hdCk7CisgICAgICAgIFRG
dW5jdGlvbkRpc3RhbmNlMl8yLCAgLy8gdmVjMiBkaXN0YW5jZSh2ZWMyLCB2ZWMyKTsKKyAgICAg
ICAgVEZ1bmN0aW9uRGlzdGFuY2UzXzMsICAvLyB2ZWMzIGRpc3RhbmNlKHZlYzMsIHZlYzMpOwor
ICAgICAgICBURnVuY3Rpb25EaXN0YW5jZTRfNCwgIC8vIHZlYzQgZGlzdGFuY2UodmVjNCwgdmVj
NCk7CisKKyAgICAgICAgVEZ1bmN0aW9uRG90MV8xLCAgLy8gZmxvYXQgZG90KGZsb2F0LCBmbG9h
dCk7CisgICAgICAgIFRGdW5jdGlvbkRvdDJfMiwgIC8vIHZlYzIgZG90KHZlYzIsIHZlYzIpOwor
ICAgICAgICBURnVuY3Rpb25Eb3QzXzMsICAvLyB2ZWMzIGRvdCh2ZWMzLCB2ZWMzKTsKKyAgICAg
ICAgVEZ1bmN0aW9uRG90NF80LCAgLy8gdmVjNCBkb3QodmVjNCwgdmVjNCk7CisKKyAgICAgICAg
VEZ1bmN0aW9uTGVuZ3RoMSwgIC8vIGZsb2F0IGxlbmd0aChmbG9hdCk7CisgICAgICAgIFRGdW5j
dGlvbkxlbmd0aDIsICAvLyBmbG9hdCBsZW5ndGgodmVjMik7CisgICAgICAgIFRGdW5jdGlvbkxl
bmd0aDMsICAvLyBmbG9hdCBsZW5ndGgodmVjMyk7CisgICAgICAgIFRGdW5jdGlvbkxlbmd0aDQs
ICAvLyBmbG9hdCBsZW5ndGgodmVjNCk7CisKKyAgICAgICAgVEZ1bmN0aW9uTm9ybWFsaXplMSwg
IC8vIGZsb2F0IG5vcm1hbGl6ZShmbG9hdCk7CisgICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTIs
ICAvLyB2ZWMyIG5vcm1hbGl6ZSh2ZWMyKTsKKyAgICAgICAgVEZ1bmN0aW9uTm9ybWFsaXplMywg
IC8vIHZlYzMgbm9ybWFsaXplKHZlYzMpOworICAgICAgICBURnVuY3Rpb25Ob3JtYWxpemU0LCAg
Ly8gdmVjNCBub3JtYWxpemUodmVjNCk7CisKKyAgICAgICAgVEZ1bmN0aW9uUmVmbGVjdDFfMSwg
IC8vIGZsb2F0IHJlZmxlY3QoZmxvYXQsIGZsb2F0KTsKKyAgICAgICAgVEZ1bmN0aW9uUmVmbGVj
dDJfMiwgIC8vIHZlYzIgcmVmbGVjdCh2ZWMyLCB2ZWMyKTsKKyAgICAgICAgVEZ1bmN0aW9uUmVm
bGVjdDNfMywgIC8vIHZlYzMgcmVmbGVjdCh2ZWMzLCB2ZWMzKTsKKyAgICAgICAgVEZ1bmN0aW9u
UmVmbGVjdDRfNCwgIC8vIHZlYzQgcmVmbGVjdCh2ZWM0LCB2ZWM0KTsKKworICAgICAgICBURnVu
Y3Rpb25Vbmtub3duCisgICAgfTsKKworICAgIFRCdWlsdEluRnVuY3Rpb24gSWRlbnRpZnlGdW5j
dGlvbihUT3BlcmF0b3Igb3AsIGNvbnN0IFRUeXBlJiBwYXJhbSk7CisgICAgVEJ1aWx0SW5GdW5j
dGlvbiBJZGVudGlmeUZ1bmN0aW9uKAorICAgICAgICBUT3BlcmF0b3Igb3AsIGNvbnN0IFRUeXBl
JiBwYXJhbTEsIGNvbnN0IFRUeXBlJiBwYXJhbTIpOworCisgICAgYm9vbCBTZXRGdW5jdGlvbkNh
bGxlZChUQnVpbHRJbkZ1bmN0aW9uIGZ1bmN0aW9uKTsKKworICAgIHN0ZDo6dmVjdG9yPFRCdWls
dEluRnVuY3Rpb24+IG1GdW5jdGlvbnM7CisKKyAgICBjb25zdCBib29sKiBtRnVuY3Rpb25NYXNr
OyAgLy8gYSBib29sZWFuIGZsYWcgZm9yIGVhY2ggZnVuY3Rpb24uCisgICAgY29uc3QgY2hhcioq
IG1GdW5jdGlvblNvdXJjZTsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMSUVSX0JVSUxUX0lOX0ZV
TkNUSU9OX0VNVUxBVE9SX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvZGVHZW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhmNWQx
MjkxMDQwZDAxMzIzMWM1NWJiMjRhNTYyMTk5NDA4M2Q5ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNw
cApAQCAtMCwwICsxLDM4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yRVNTTC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvckdMU0wuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JITFNMLmgiCisKKy8vCisvLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgcHJvdmlkZWQg
dG8gY3JlYXRlIHRoZSBhY3R1YWwKKy8vIGNvbXBpbGUgb2JqZWN0IHVzZWQgYnkgaGlnaGVyIGxl
dmVsIGNvZGUuICBJdCByZXR1cm5zCisvLyBhIHN1YmNsYXNzIG9mIFRDb21waWxlci4KKy8vCitU
Q29tcGlsZXIqIENvbnN0cnVjdENvbXBpbGVyKAorICAgIFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNo
YWRlclNwZWMgc3BlYywgU2hTaGFkZXJPdXRwdXQgb3V0cHV0KQoreworICAgIHN3aXRjaCAob3V0
cHV0KSB7CisgICAgICBjYXNlIFNIX0VTU0xfT1VUUFVUOgorICAgICAgICByZXR1cm4gbmV3IFRy
YW5zbGF0b3JFU1NMKHR5cGUsIHNwZWMpOworICAgICAgY2FzZSBTSF9HTFNMX09VVFBVVDoKKyAg
ICAgICAgcmV0dXJuIG5ldyBUcmFuc2xhdG9yR0xTTCh0eXBlLCBzcGVjKTsKKyAgICAgIGNhc2Ug
U0hfSExTTDlfT1VUUFVUOgorICAgICAgY2FzZSBTSF9ITFNMMTFfT1VUUFVUOgorICAgICAgICBy
ZXR1cm4gbmV3IFRyYW5zbGF0b3JITFNMKHR5cGUsIHNwZWMsIG91dHB1dCk7CisgICAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKKy8vCisvLyBEZWxldGUgdGhl
IGNvbXBpbGVyIG1hZGUgYnkgQ29uc3RydWN0Q29tcGlsZXIKKy8vCit2b2lkIERlbGV0ZUNvbXBp
bGVyKFRDb21waWxlciogY29tcGlsZXIpCit7CisgICAgZGVsZXRlIGNvbXBpbGVyOworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Q29tbW9uLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9Db21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZTQ1MDNlMzQwY2Y3NGIyMDlhODJkY2M1N2RjMDQzYzI3
ZGU5NDNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvQ29tbW9uLmgKQEAgLTAsMCArMSw5MiBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworI2lmbmRlZiBfQ09NTU9OX0lOQ0xVREVEXworI2RlZmluZSBfQ09NTU9OX0lOQ0xV
REVEXworCisjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8c3Ry
aW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8c3Rk
aW8uaD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUG9vbEFsbG9jLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9jb21waWxlcmRlYnVnLmgiCisjaW5jbHVkZSAiY29t
bW9uL2FuZ2xldXRpbHMuaCIKKworc3RydWN0IFRTb3VyY2VMb2MgeworICAgIGludCBmaXJzdF9m
aWxlOworICAgIGludCBmaXJzdF9saW5lOworICAgIGludCBsYXN0X2ZpbGU7CisgICAgaW50IGxh
c3RfbGluZTsKK307CisKKy8vCisvLyBQdXQgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSBpbiBi
YXNlIGNsYXNzZXMgdG8gbWFrZSB0aGVtIHVzZSB0aGlzIHNjaGVtZS4KKy8vCisjZGVmaW5lIFBP
T0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QgcykgeyBy
ZXR1cm4gR2V0R2xvYmFsUG9vbEFsbG9jYXRvcigpLT5hbGxvY2F0ZShzKTsgfSAgIFwKKyAgICB2
b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90LCB2b2lkICpfV2hlcmUpIHsgcmV0dXJuIChfV2hlcmUp
OyB9ICAgICAgICAgICAgICAgICAgICBcCisgICAgdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCop
IHsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQgKiwgdm9pZCAqKSB7IH0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB2b2lkKiBvcGVyYXRvciBuZXdbXShz
aXplX3QgcykgeyByZXR1cm4gR2V0R2xvYmFsUG9vbEFsbG9jYXRvcigpLT5hbGxvY2F0ZShzKTsg
fSBcCisgICAgdm9pZCogb3BlcmF0b3IgbmV3W10oc2l6ZV90LCB2b2lkICpfV2hlcmUpIHsgcmV0
dXJuIChfV2hlcmUpOyB9ICAgICAgICAgICAgICAgICAgXAorICAgIHZvaWQgb3BlcmF0b3IgZGVs
ZXRlW10odm9pZCopIHsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQgKiwgdm9pZCAqKSB7IH0K
KworLy8KKy8vIFBvb2wgdmVyc2lvbiBvZiBzdHJpbmcuCisvLwordHlwZWRlZiBwb29sX2FsbG9j
YXRvcjxjaGFyPiBUU3RyaW5nQWxsb2NhdG9yOwordHlwZWRlZiBzdGQ6OmJhc2ljX3N0cmluZyA8
Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgVFN0cmluZ0FsbG9jYXRvcj4gVFN0cmluZzsK
K3R5cGVkZWYgc3RkOjpiYXNpY19vc3RyaW5nc3RyZWFtPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8
Y2hhcj4sIFRTdHJpbmdBbGxvY2F0b3I+IFRTdHJpbmdTdHJlYW07CitpbmxpbmUgVFN0cmluZyog
TmV3UG9vbFRTdHJpbmcoY29uc3QgY2hhciogcykKK3sKKwl2b2lkKiBtZW1vcnkgPSBHZXRHbG9i
YWxQb29sQWxsb2NhdG9yKCktPmFsbG9jYXRlKHNpemVvZihUU3RyaW5nKSk7CisJcmV0dXJuIG5l
dyhtZW1vcnkpIFRTdHJpbmcocyk7Cit9CisKKy8vCisvLyBQZXJzaXN0ZW50IHN0cmluZyBtZW1v
cnkuICBTaG91bGQgb25seSBiZSB1c2VkIGZvciBzdHJpbmdzIHRoYXQgc3Vydml2ZQorLy8gYWNy
b3NzIGNvbXBpbGVzLgorLy8KKyNkZWZpbmUgVFBlcnNpc3RTdHJpbmcgc3RkOjpzdHJpbmcKKyNk
ZWZpbmUgVFBlcnNpc3RTdHJpbmdTdHJlYW0gc3RkOjpvc3RyaW5nc3RyZWFtCisKKy8vCisvLyBQ
b29sIGFsbG9jYXRvciB2ZXJzaW9ucyBvZiB2ZWN0b3JzLCBsaXN0cywgYW5kIG1hcHMKKy8vCit0
ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgVFZlY3RvciA6IHB1YmxpYyBzdGQ6OnZlY3RvcjxULCBw
b29sX2FsbG9jYXRvcjxUPiA+IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6
dmVjdG9yPFQsIHBvb2xfYWxsb2NhdG9yPFQ+ID46OnNpemVfdHlwZSBzaXplX3R5cGU7CisgICAg
VFZlY3RvcigpIDogc3RkOjp2ZWN0b3I8VCwgcG9vbF9hbGxvY2F0b3I8VD4gPigpIHt9CisgICAg
VFZlY3Rvcihjb25zdCBwb29sX2FsbG9jYXRvcjxUPiYgYSkgOiBzdGQ6OnZlY3RvcjxULCBwb29s
X2FsbG9jYXRvcjxUPiA+KGEpIHt9CisgICAgVFZlY3RvcihzaXplX3R5cGUgaSk6IHN0ZDo6dmVj
dG9yPFQsIHBvb2xfYWxsb2NhdG9yPFQ+ID4oaSkge30KK307CisKK3RlbXBsYXRlIDxjbGFzcyBL
LCBjbGFzcyBELCBjbGFzcyBDTVAgPSBzdGQ6Omxlc3M8Sz4gPiAKK2NsYXNzIFRNYXAgOiBwdWJs
aWMgc3RkOjptYXA8SywgRCwgQ01QLCBwb29sX2FsbG9jYXRvcjxzdGQ6OnBhaXI8Y29uc3QgSywg
RD4gPiA+IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHBvb2xfYWxsb2NhdG9yPHN0ZDo6cGFpcjxj
b25zdCBLLCBEPiA+IHRBbGxvY2F0b3I7CisKKyAgICBUTWFwKCkgOiBzdGQ6Om1hcDxLLCBELCBD
TVAsIHRBbGxvY2F0b3I+KCkge30KKyAgICAvLyB1c2UgY29ycmVjdCB0d28tc3RhZ2UgbmFtZSBs
b29rdXAgc3VwcG9ydGVkIGluIGdjYyAzLjQgYW5kIGFib3ZlCisgICAgVE1hcChjb25zdCB0QWxs
b2NhdG9yJiBhKSA6IHN0ZDo6bWFwPEssIEQsIENNUCwgdEFsbG9jYXRvcj4oc3RkOjptYXA8Sywg
RCwgQ01QLCB0QWxsb2NhdG9yPjo6a2V5X2NvbXBhcmUoKSwgYSkge30KK307CisKKy8vIEludGVn
ZXIgdG8gVFN0cmluZyBjb252ZXJzaW9uCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2lubGluZSBU
U3RyaW5nIHN0cihUIGkpCit7CisgICAgQVNTRVJUKHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Omlz
X2ludGVnZXIpOworICAgIGNoYXIgYnVmZmVyWygoOCAqIHNpemVvZihUKSkgLyAzKSArIDNdOwor
ICAgIGNvbnN0IGNoYXIgKmZvcm1hdFN0ciA9IHN0ZDo6bnVtZXJpY19saW1pdHM8VD46OmlzX3Np
Z25lZCA/ICIlZCIgOiAiJXUiOworICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciks
IGZvcm1hdFN0ciwgaSk7CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKworI2VuZGlmIC8vIF9DT01N
T05fSU5DTFVERURfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDAyODgwMGJh
ZjRhMTQ0OTJmYWIzMTE2YjM4YWMyYWVkZDY3NzQyMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmNwcApA
QCAtMCwwICsxLDUzOCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL0RldGVjdENhbGxEZXB0aC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvRm9yTG9vcFVucm9sbC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5p
dGlhbGl6ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVBhcnNl
Q29udGV4dC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVZhcmlh
Ymxlcy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvTWFwTG9uZ1ZhcmlhYmxlTmFt
ZXMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUmVuYW1lRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1NoSGFuZGxlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1ZhcmlhYmxlUGFja2VyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFw
aC9EZXBlbmRlbmN5R3JhcGguaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2RlcGdy
YXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIgorI2lu
Y2x1ZGUgInRoaXJkX3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oIgorCitib29s
IGlzV2ViR0xCYXNlZFNwZWMoU2hTaGFkZXJTcGVjIHNwZWMpCit7CisgICAgIHJldHVybiBzcGVj
ID09IFNIX1dFQkdMX1NQRUMgfHwgc3BlYyA9PSBTSF9DU1NfU0hBREVSU19TUEVDOworfQorCitu
YW1lc3BhY2UgeworY2xhc3MgVFNjb3BlZFBvb2xBbGxvY2F0b3IKK3sKKyAgcHVibGljOgorICAg
IFRTY29wZWRQb29sQWxsb2NhdG9yKFRQb29sQWxsb2NhdG9yKiBhbGxvY2F0b3IpIDogbUFsbG9j
YXRvcihhbGxvY2F0b3IpCisgICAgeworICAgICAgICBtQWxsb2NhdG9yLT5wdXNoKCk7CisgICAg
ICAgIFNldEdsb2JhbFBvb2xBbGxvY2F0b3IobUFsbG9jYXRvcik7CisgICAgfQorICAgIH5UU2Nv
cGVkUG9vbEFsbG9jYXRvcigpCisgICAgeworICAgICAgICBTZXRHbG9iYWxQb29sQWxsb2NhdG9y
KE5VTEwpOworICAgICAgICBtQWxsb2NhdG9yLT5wb3AoKTsKKyAgICB9CisKKyAgcHJpdmF0ZToK
KyAgICBUUG9vbEFsbG9jYXRvciogbUFsbG9jYXRvcjsKK307CisKK2NsYXNzIFRTY29wZWRTeW1i
b2xUYWJsZUxldmVsCit7CisgIHB1YmxpYzoKKyAgICBUU2NvcGVkU3ltYm9sVGFibGVMZXZlbChU
U3ltYm9sVGFibGUqIHRhYmxlKSA6IG1UYWJsZSh0YWJsZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChtVGFibGUtPmF0QnVpbHRJbkxldmVsKCkpOworICAgICAgICBtVGFibGUtPnB1c2goKTsKKyAg
ICB9CisgICAgflRTY29wZWRTeW1ib2xUYWJsZUxldmVsKCkKKyAgICB7CisgICAgICAgIHdoaWxl
ICghbVRhYmxlLT5hdEJ1aWx0SW5MZXZlbCgpKQorICAgICAgICAgICAgbVRhYmxlLT5wb3AoKTsK
KyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBUU3ltYm9sVGFibGUqIG1UYWJsZTsKK307Cit9ICAv
LyBuYW1lc3BhY2UKKworVFNoSGFuZGxlQmFzZTo6VFNoSGFuZGxlQmFzZSgpCit7CisgICAgYWxs
b2NhdG9yLnB1c2goKTsKKyAgICBTZXRHbG9iYWxQb29sQWxsb2NhdG9yKCZhbGxvY2F0b3IpOwor
fQorCitUU2hIYW5kbGVCYXNlOjp+VFNoSGFuZGxlQmFzZSgpCit7CisgICAgU2V0R2xvYmFsUG9v
bEFsbG9jYXRvcihOVUxMKTsKKyAgICBhbGxvY2F0b3IucG9wQWxsKCk7Cit9CisKK1RDb21waWxl
cjo6VENvbXBpbGVyKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYykKKyAgICA6
IHNoYWRlclR5cGUodHlwZSksCisgICAgICBzaGFkZXJTcGVjKHNwZWMpLAorICAgICAgbWF4VW5p
Zm9ybVZlY3RvcnMoMCksCisgICAgICBtYXhWYXJ5aW5nVmVjdG9ycygwKSwKKyAgICAgIG1heEV4
cHJlc3Npb25Db21wbGV4aXR5KDApLAorICAgICAgbWF4Q2FsbFN0YWNrRGVwdGgoMCksCisgICAg
ICBmcmFnbWVudFByZWNpc2lvbkhpZ2goZmFsc2UpLAorICAgICAgY2xhbXBpbmdTdHJhdGVneShT
SF9DTEFNUF9XSVRIX0NMQU1QX0lOVFJJTlNJQyksCisgICAgICBidWlsdEluRnVuY3Rpb25FbXVs
YXRvcih0eXBlKQoreworICAgIGxvbmdOYW1lTWFwID0gTG9uZ05hbWVNYXA6OkdldEluc3RhbmNl
KCk7Cit9CisKK1RDb21waWxlcjo6flRDb21waWxlcigpCit7CisgICAgQVNTRVJUKGxvbmdOYW1l
TWFwKTsKKyAgICBsb25nTmFtZU1hcC0+UmVsZWFzZSgpOworfQorCitib29sIFRDb21waWxlcjo6
SW5pdChjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291cmNlcykKK3sKKyAgICBtYXhVbmlm
b3JtVmVjdG9ycyA9IChzaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpID8KKyAgICAgICAg
cmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzIDoKKyAgICAgICAgcmVzb3VyY2VzLk1h
eEZyYWdtZW50VW5pZm9ybVZlY3RvcnM7CisgICAgbWF4VmFyeWluZ1ZlY3RvcnMgPSByZXNvdXJj
ZXMuTWF4VmFyeWluZ1ZlY3RvcnM7CisgICAgbWF4RXhwcmVzc2lvbkNvbXBsZXhpdHkgPSByZXNv
dXJjZXMuTWF4RXhwcmVzc2lvbkNvbXBsZXhpdHk7CisgICAgbWF4Q2FsbFN0YWNrRGVwdGggPSBy
ZXNvdXJjZXMuTWF4Q2FsbFN0YWNrRGVwdGg7CisKKyAgICBTZXRHbG9iYWxQb29sQWxsb2NhdG9y
KCZhbGxvY2F0b3IpOworCisgICAgLy8gR2VuZXJhdGUgYnVpbHQtaW4gc3ltYm9sIHRhYmxlLgor
ICAgIGlmICghSW5pdEJ1aWx0SW5TeW1ib2xUYWJsZShyZXNvdXJjZXMpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgSW5pdEV4dGVuc2lvbkJlaGF2aW9yKHJlc291cmNlcywgZXh0ZW5zaW9u
QmVoYXZpb3IpOworICAgIGZyYWdtZW50UHJlY2lzaW9uSGlnaCA9IHJlc291cmNlcy5GcmFnbWVu
dFByZWNpc2lvbkhpZ2ggPT0gMTsKKworICAgIGFycmF5Qm91bmRzQ2xhbXBlci5TZXRDbGFtcGlu
Z1N0cmF0ZWd5KHJlc291cmNlcy5BcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSk7CisgICAgY2xh
bXBpbmdTdHJhdGVneSA9IHJlc291cmNlcy5BcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneTsKKwor
ICAgIGhhc2hGdW5jdGlvbiA9IHJlc291cmNlcy5IYXNoRnVuY3Rpb247CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBUQ29tcGlsZXI6OmNvbXBpbGUoY29uc3QgY2hhciogY29uc3Qgc2hh
ZGVyU3RyaW5nc1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG51bVN0cmluZ3Ms
CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29tcGlsZU9wdGlvbnMpCit7CisgICAgVFNj
b3BlZFBvb2xBbGxvY2F0b3Igc2NvcGVkQWxsb2MoJmFsbG9jYXRvcik7CisgICAgY2xlYXJSZXN1
bHRzKCk7CisKKyAgICBpZiAobnVtU3RyaW5ncyA9PSAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIC8vIElmIGNvbXBpbGluZyBmb3IgV2ViR0wsIHZhbGlkYXRlIGxvb3AgYW5kIGluZGV4
aW5nIGFzIHdlbGwuCisgICAgaWYgKGlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpCisgICAg
ICAgIGNvbXBpbGVPcHRpb25zIHw9IFNIX1ZBTElEQVRFX0xPT1BfSU5ERVhJTkc7CisKKyAgICAv
LyBGaXJzdCBzdHJpbmcgaXMgcGF0aCBvZiBzb3VyY2UgZmlsZSBpZiBmbGFnIGlzIHNldC4gVGhl
IGFjdHVhbCBzb3VyY2UgZm9sbG93cy4KKyAgICBjb25zdCBjaGFyKiBzb3VyY2VQYXRoID0gTlVM
TDsKKyAgICBzaXplX3QgZmlyc3RTb3VyY2UgPSAwOworICAgIGlmIChjb21waWxlT3B0aW9ucyAm
IFNIX1NPVVJDRV9QQVRIKQorICAgIHsKKyAgICAgICAgc291cmNlUGF0aCA9IHNoYWRlclN0cmlu
Z3NbMF07CisgICAgICAgICsrZmlyc3RTb3VyY2U7CisgICAgfQorCisgICAgVEludGVybWVkaWF0
ZSBpbnRlcm1lZGlhdGUoaW5mb1NpbmspOworICAgIFRQYXJzZUNvbnRleHQgcGFyc2VDb250ZXh0
KHN5bWJvbFRhYmxlLCBleHRlbnNpb25CZWhhdmlvciwgaW50ZXJtZWRpYXRlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNoYWRlclR5cGUsIHNoYWRlclNwZWMsIGNvbXBpbGVPcHRp
b25zLCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVBhdGgsIGlu
Zm9TaW5rKTsKKyAgICBwYXJzZUNvbnRleHQuZnJhZ21lbnRQcmVjaXNpb25IaWdoID0gZnJhZ21l
bnRQcmVjaXNpb25IaWdoOworICAgIFNldEdsb2JhbFBhcnNlQ29udGV4dCgmcGFyc2VDb250ZXh0
KTsKKworICAgIC8vIFdlIHByZXNlcnZlIHN5bWJvbHMgYXQgdGhlIGJ1aWx0LWluIGxldmVsIGZy
b20gY29tcGlsZS10by1jb21waWxlLgorICAgIC8vIFN0YXJ0IHB1c2hpbmcgdGhlIHVzZXItZGVm
aW5lZCBzeW1ib2xzIGF0IGdsb2JhbCBsZXZlbC4KKyAgICBUU2NvcGVkU3ltYm9sVGFibGVMZXZl
bCBzY29wZWRTeW1ib2xMZXZlbCgmc3ltYm9sVGFibGUpOworCisgICAgLy8gUGFyc2Ugc2hhZGVy
LgorICAgIGJvb2wgc3VjY2VzcyA9CisgICAgICAgIChQYVBhcnNlU3RyaW5ncyhudW1TdHJpbmdz
IC0gZmlyc3RTb3VyY2UsICZzaGFkZXJTdHJpbmdzW2ZpcnN0U291cmNlXSwgTlVMTCwgJnBhcnNl
Q29udGV4dCkgPT0gMCkgJiYKKyAgICAgICAgKHBhcnNlQ29udGV4dC50cmVlUm9vdCAhPSBOVUxM
KTsKKyAgICBpZiAoc3VjY2VzcykKKyAgICB7CisgICAgICAgIFRJbnRlcm1Ob2RlKiByb290ID0g
cGFyc2VDb250ZXh0LnRyZWVSb290OworICAgICAgICBzdWNjZXNzID0gaW50ZXJtZWRpYXRlLnBv
c3RQcm9jZXNzKHJvb3QpOworCisgICAgICAgIGlmIChzdWNjZXNzKQorICAgICAgICAgICAgc3Vj
Y2VzcyA9IGRldGVjdENhbGxEZXB0aChyb290LCBpbmZvU2luaywgKGNvbXBpbGVPcHRpb25zICYg
U0hfTElNSVRfQ0FMTF9TVEFDS19ERVBUSCkgIT0gMCk7CisKKyAgICAgICAgaWYgKHN1Y2Nlc3Mg
JiYgKGNvbXBpbGVPcHRpb25zICYgU0hfVkFMSURBVEVfTE9PUF9JTkRFWElORykpCisgICAgICAg
ICAgICBzdWNjZXNzID0gdmFsaWRhdGVMaW1pdGF0aW9ucyhyb290KTsKKworICAgICAgICBpZiAo
c3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9USU1JTkdfUkVTVFJJQ1RJT05TKSkKKyAg
ICAgICAgICAgIHN1Y2Nlc3MgPSBlbmZvcmNlVGltaW5nUmVzdHJpY3Rpb25zKHJvb3QsIChjb21w
aWxlT3B0aW9ucyAmIFNIX0RFUEVOREVOQ1lfR1JBUEgpICE9IDApOworCisgICAgICAgIGlmIChz
dWNjZXNzICYmIHNoYWRlclNwZWMgPT0gU0hfQ1NTX1NIQURFUlNfU1BFQykKKyAgICAgICAgICAg
IHJld3JpdGVDU1NTaGFkZXIocm9vdCk7CisKKyAgICAgICAgLy8gVW5yb2xsIGZvci1sb29wIG1h
cmt1cCBuZWVkcyB0byBoYXBwZW4gYWZ0ZXIgdmFsaWRhdGVMaW1pdGF0aW9ucyBwYXNzLgorICAg
ICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9VTlJPTExfRk9SX0xPT1Bf
V0lUSF9JTlRFR0VSX0lOREVYKSkKKyAgICAgICAgICAgIEZvckxvb3BVbnJvbGw6Ok1hcmtGb3JM
b29wc1dpdGhJbnRlZ2VySW5kaWNlc0ZvclVucm9sbGluZyhyb290KTsKKworICAgICAgICAvLyBC
dWlsdC1pbiBmdW5jdGlvbiBlbXVsYXRpb24gbmVlZHMgdG8gaGFwcGVuIGFmdGVyIHZhbGlkYXRl
TGltaXRhdGlvbnMgcGFzcy4KKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25z
ICYgU0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElPTlMpKQorICAgICAgICAgICAgYnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3IuTWFya0J1aWx0SW5GdW5jdGlvbnNGb3JFbXVsYXRpb24ocm9vdCk7CisK
KyAgICAgICAgLy8gQ2xhbXBpbmcgdW5pZm9ybSBhcnJheSBib3VuZHMgbmVlZHMgdG8gaGFwcGVu
IGFmdGVyIHZhbGlkYXRlTGltaXRhdGlvbnMgcGFzcy4KKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYg
KGNvbXBpbGVPcHRpb25zICYgU0hfQ0xBTVBfSU5ESVJFQ1RfQVJSQVlfQk9VTkRTKSkKKyAgICAg
ICAgICAgIGFycmF5Qm91bmRzQ2xhbXBlci5NYXJrSW5kaXJlY3RBcnJheUJvdW5kc0ZvckNsYW1w
aW5nKHJvb3QpOworCisgICAgICAgIC8vIERpc2FsbG93IGV4cHJlc3Npb25zIGRlZW1lZCB0b28g
Y29tcGxleC4KKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfTElN
SVRfRVhQUkVTU0lPTl9DT01QTEVYSVRZKSkKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBsaW1pdEV4
cHJlc3Npb25Db21wbGV4aXR5KHJvb3QpOworCisgICAgICAgIC8vIENhbGwgbWFwTG9uZ1Zhcmlh
YmxlTmFtZXMoKSBiZWZvcmUgY29sbGVjdEF0dHJpYnNVbmlmb3JtcygpIHNvIGluCisgICAgICAg
IC8vIGNvbGxlY3RBdHRyaWJzVW5pZm9ybXMoKSB3ZSBhbHJlYWR5IGhhdmUgdGhlIG1hcHBlZCBz
eW1ib2wgbmFtZXMgYW5kCisgICAgICAgIC8vIHdlIGNvdWxkIGNvbXBvc2l0ZSBtYXBwZWQgYW5k
IG9yaWdpbmFsIHZhcmlhYmxlIG5hbWVzLgorICAgICAgICAvLyBBbHNvLCBpZiB3ZSBoYXNoIGFs
bCB0aGUgbmFtZXMsIHRoZW4gbm8gbmVlZCB0byBkbyB0aGlzIGZvciBsb25nIG5hbWVzLgorICAg
ICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9NQVBfTE9OR19WQVJJQUJM
RV9OQU1FUykgJiYgaGFzaEZ1bmN0aW9uID09IE5VTEwpCisgICAgICAgICAgICBtYXBMb25nVmFy
aWFibGVOYW1lcyhyb290KTsKKworICAgICAgICBpZiAoc3VjY2VzcyAmJiBzaGFkZXJUeXBlID09
IFNIX1ZFUlRFWF9TSEFERVIgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfSU5JVF9HTF9QT1NJVElP
TikpCisgICAgICAgICAgICBpbml0aWFsaXplR0xQb3NpdGlvbihyb290KTsKKworICAgICAgICBp
ZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9VTkZPTERfU0hPUlRfQ0lSQ1VJVCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIFVuZm9sZFNob3J0Q2lyY3VpdEFTVCB1bmZvbGRTaG9y
dENpcmN1aXQ7CisgICAgICAgICAgICByb290LT50cmF2ZXJzZSgmdW5mb2xkU2hvcnRDaXJjdWl0
KTsKKyAgICAgICAgICAgIHVuZm9sZFNob3J0Q2lyY3VpdC51cGRhdGVUcmVlKCk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9WQVJJQUJM
RVMpKQorICAgICAgICB7CisgICAgICAgICAgICBjb2xsZWN0VmFyaWFibGVzKHJvb3QpOworICAg
ICAgICAgICAgaWYgKGNvbXBpbGVPcHRpb25zICYgU0hfRU5GT1JDRV9QQUNLSU5HX1JFU1RSSUNU
SU9OUykKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gZW5mb3JjZVBhY2tpbmdSZXN0cmljdGlv
bnMoKTsKKworICAgICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgc2hhZGVyVHlwZSA9PSBTSF9WRVJU
RVhfU0hBREVSICYmCisgICAgICAgICAgICAgICAgKGNvbXBpbGVPcHRpb25zICYgU0hfSU5JVF9W
QVJZSU5HU19XSVRIT1VUX1NUQVRJQ19VU0UpKQorICAgICAgICAgICAgICAgIGluaXRpYWxpemVW
YXJ5aW5nc1dpdGhvdXRTdGF0aWNVc2Uocm9vdCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
c3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9JTlRFUk1FRElBVEVfVFJFRSkpCisgICAg
ICAgICAgICBpbnRlcm1lZGlhdGUub3V0cHV0VHJlZShyb290KTsKKworICAgICAgICBpZiAoc3Vj
Y2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9PQkpFQ1RfQ09ERSkpCisgICAgICAgICAgICB0
cmFuc2xhdGUocm9vdCk7CisgICAgfQorCisgICAgLy8gQ2xlYW51cCBtZW1vcnkuCisgICAgaW50
ZXJtZWRpYXRlLnJlbW92ZShwYXJzZUNvbnRleHQudHJlZVJvb3QpOworCisgICAgcmV0dXJuIHN1
Y2Nlc3M7Cit9CisKK2Jvb2wgVENvbXBpbGVyOjpJbml0QnVpbHRJblN5bWJvbFRhYmxlKGNvbnN0
IFNoQnVpbHRJblJlc291cmNlcyAmcmVzb3VyY2VzKQoreworICAgIGNvbXBpbGVSZXNvdXJjZXMg
PSByZXNvdXJjZXM7CisKKyAgICBhc3NlcnQoc3ltYm9sVGFibGUuaXNFbXB0eSgpKTsKKyAgICBz
eW1ib2xUYWJsZS5wdXNoKCk7CisKKyAgICBUUHVibGljVHlwZSBpbnRlZ2VyOworICAgIGludGVn
ZXIudHlwZSA9IEVidEludDsKKyAgICBpbnRlZ2VyLnNpemUgPSAxOworICAgIGludGVnZXIubWF0
cml4ID0gZmFsc2U7CisgICAgaW50ZWdlci5hcnJheSA9IGZhbHNlOworCisgICAgVFB1YmxpY1R5
cGUgZmxvYXRpbmdQb2ludDsKKyAgICBmbG9hdGluZ1BvaW50LnR5cGUgPSBFYnRGbG9hdDsKKyAg
ICBmbG9hdGluZ1BvaW50LnNpemUgPSAxOworICAgIGZsb2F0aW5nUG9pbnQubWF0cml4ID0gZmFs
c2U7CisgICAgZmxvYXRpbmdQb2ludC5hcnJheSA9IGZhbHNlOworCisgICAgVFB1YmxpY1R5cGUg
c2FtcGxlcjsKKyAgICBzYW1wbGVyLnNpemUgPSAxOworICAgIHNhbXBsZXIubWF0cml4ID0gZmFs
c2U7CisgICAgc2FtcGxlci5hcnJheSA9IGZhbHNlOworCisgICAgc3dpdGNoKHNoYWRlclR5cGUp
CisgICAgeworICAgICAgY2FzZSBTSF9GUkFHTUVOVF9TSEFERVI6CisgICAgICAgIHN5bWJvbFRh
YmxlLnNldERlZmF1bHRQcmVjaXNpb24oaW50ZWdlciwgRWJwTWVkaXVtKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIFNIX1ZFUlRFWF9TSEFERVI6CisgICAgICAgIHN5bWJvbFRhYmxlLnNl
dERlZmF1bHRQcmVjaXNpb24oaW50ZWdlciwgRWJwSGlnaCk7CisgICAgICAgIHN5bWJvbFRhYmxl
LnNldERlZmF1bHRQcmVjaXNpb24oZmxvYXRpbmdQb2ludCwgRWJwSGlnaCk7CisgICAgICAgIGJy
ZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlICYmICJMYW5ndWFnZSBu
b3Qgc3VwcG9ydGVkIik7CisgICAgfQorICAgIC8vIFdlIHNldCBkZWZhdWx0cyBmb3IgYWxsIHRo
ZSBzYW1wbGVyIHR5cGVzLCBldmVuIHRob3NlIHRoYXQgYXJlCisgICAgLy8gb25seSBhdmFpbGFi
bGUgaWYgYW4gZXh0ZW5zaW9uIGV4aXN0cy4KKyAgICBmb3IgKGludCBzYW1wbGVyVHlwZSA9IEVi
dEd1YXJkU2FtcGxlckJlZ2luICsgMTsKKyAgICAgICAgIHNhbXBsZXJUeXBlIDwgRWJ0R3VhcmRT
YW1wbGVyRW5kOyArK3NhbXBsZXJUeXBlKQorICAgIHsKKyAgICAgICAgc2FtcGxlci50eXBlID0g
c3RhdGljX2Nhc3Q8VEJhc2ljVHlwZT4oc2FtcGxlclR5cGUpOworICAgICAgICBzeW1ib2xUYWJs
ZS5zZXREZWZhdWx0UHJlY2lzaW9uKHNhbXBsZXIsIEVicExvdyk7CisgICAgfQorCisgICAgSW5z
ZXJ0QnVpbHRJbkZ1bmN0aW9ucyhzaGFkZXJUeXBlLCBzaGFkZXJTcGVjLCByZXNvdXJjZXMsIHN5
bWJvbFRhYmxlKTsKKworICAgIElkZW50aWZ5QnVpbHRJbnMoc2hhZGVyVHlwZSwgc2hhZGVyU3Bl
YywgcmVzb3VyY2VzLCBzeW1ib2xUYWJsZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBUQ29tcGlsZXI6OmNsZWFyUmVzdWx0cygpCit7CisgICAgYXJyYXlCb3VuZHNDbGFtcGVyLkNs
ZWFudXAoKTsKKyAgICBpbmZvU2luay5pbmZvLmVyYXNlKCk7CisgICAgaW5mb1Npbmsub2JqLmVy
YXNlKCk7CisgICAgaW5mb1NpbmsuZGVidWcuZXJhc2UoKTsKKworICAgIGF0dHJpYnMuY2xlYXIo
KTsKKyAgICB1bmlmb3Jtcy5jbGVhcigpOworICAgIHZhcnlpbmdzLmNsZWFyKCk7CisKKyAgICBi
dWlsdEluRnVuY3Rpb25FbXVsYXRvci5DbGVhbnVwKCk7CisKKyAgICBuYW1lTWFwLmNsZWFyKCk7
Cit9CisKK2Jvb2wgVENvbXBpbGVyOjpkZXRlY3RDYWxsRGVwdGgoVEludGVybU5vZGUqIHJvb3Qs
IFRJbmZvU2luayYgaW5mb1NpbmssIGJvb2wgbGltaXRDYWxsU3RhY2tEZXB0aCkKK3sKKyAgICBE
ZXRlY3RDYWxsRGVwdGggZGV0ZWN0KGluZm9TaW5rLCBsaW1pdENhbGxTdGFja0RlcHRoLCBtYXhD
YWxsU3RhY2tEZXB0aCk7CisgICAgcm9vdC0+dHJhdmVyc2UoJmRldGVjdCk7CisgICAgc3dpdGNo
IChkZXRlY3QuZGV0ZWN0Q2FsbERlcHRoKCkpCisgICAgeworICAgICAgY2FzZSBEZXRlY3RDYWxs
RGVwdGg6OmtFcnJvck5vbmU6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgY2FzZSBEZXRl
Y3RDYWxsRGVwdGg6OmtFcnJvck1pc3NpbmdNYWluOgorICAgICAgICBpbmZvU2luay5pbmZvLnBy
ZWZpeChFUHJlZml4RXJyb3IpOworICAgICAgICBpbmZvU2luay5pbmZvIDw8ICJNaXNzaW5nIG1h
aW4oKSI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGNhc2UgRGV0ZWN0Q2FsbERlcHRo
OjprRXJyb3JSZWN1cnNpb246CisgICAgICAgIGluZm9TaW5rLmluZm8ucHJlZml4KEVQcmVmaXhF
cnJvcik7CisgICAgICAgIGluZm9TaW5rLmluZm8gPDwgIkZ1bmN0aW9uIHJlY3Vyc2lvbiBkZXRl
Y3RlZCI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGNhc2UgRGV0ZWN0Q2FsbERlcHRo
OjprRXJyb3JNYXhEZXB0aEV4Y2VlZGVkOgorICAgICAgICBpbmZvU2luay5pbmZvLnByZWZpeChF
UHJlZml4RXJyb3IpOworICAgICAgICBpbmZvU2luay5pbmZvIDw8ICJGdW5jdGlvbiBjYWxsIHN0
YWNrIHRvbyBkZWVwIjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwor
dm9pZCBUQ29tcGlsZXI6OnJld3JpdGVDU1NTaGFkZXIoVEludGVybU5vZGUqIHJvb3QpCit7Cisg
ICAgUmVuYW1lRnVuY3Rpb24gcmVuYW1lcigibWFpbigiLCAiY3NzX21haW4oIik7CisgICAgcm9v
dC0+dHJhdmVyc2UoJnJlbmFtZXIpOworfQorCitib29sIFRDb21waWxlcjo6dmFsaWRhdGVMaW1p
dGF0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCkKK3sKKyAgICBWYWxpZGF0ZUxpbWl0YXRpb25zIHZh
bGlkYXRlKHNoYWRlclR5cGUsIGluZm9TaW5rLmluZm8pOworICAgIHJvb3QtPnRyYXZlcnNlKCZ2
YWxpZGF0ZSk7CisgICAgcmV0dXJuIHZhbGlkYXRlLm51bUVycm9ycygpID09IDA7Cit9CisKK2Jv
b2wgVENvbXBpbGVyOjplbmZvcmNlVGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290
LCBib29sIG91dHB1dEdyYXBoKQoreworICAgIGlmIChzaGFkZXJTcGVjICE9IFNIX1dFQkdMX1NQ
RUMpCisgICAgeworICAgICAgICBpbmZvU2luay5pbmZvIDw8ICJUaW1pbmcgcmVzdHJpY3Rpb25z
IG11c3QgYmUgZW5mb3JjZWQgdW5kZXIgdGhlIFdlYkdMIHNwZWMuIjsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGlmIChzaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURF
UikKKyAgICB7CisgICAgICAgIFREZXBlbmRlbmN5R3JhcGggZ3JhcGgocm9vdCk7CisKKyAgICAg
ICAgLy8gT3V0cHV0IGFueSBlcnJvcnMgZmlyc3QuCisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGVu
Zm9yY2VGcmFnbWVudFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhncmFwaCk7CisgICAgICAgIAor
ICAgICAgICAvLyBUaGVuLCBvdXRwdXQgdGhlIGRlcGVuZGVuY3kgZ3JhcGguCisgICAgICAgIGlm
IChvdXRwdXRHcmFwaCkKKyAgICAgICAgeworICAgICAgICAgICAgVERlcGVuZGVuY3lHcmFwaE91
dHB1dCBvdXRwdXQoaW5mb1NpbmsuaW5mbyk7CisgICAgICAgICAgICBvdXRwdXQub3V0cHV0QWxs
U3Bhbm5pbmdUcmVlcyhncmFwaCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVy
biBzdWNjZXNzOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZW5mb3Jj
ZVZlcnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhyb290KTsKKyAgICB9Cit9CisKK2Jvb2wg
VENvbXBpbGVyOjpsaW1pdEV4cHJlc3Npb25Db21wbGV4aXR5KFRJbnRlcm1Ob2RlKiByb290KQor
eworICAgIFRJbnRlcm1UcmF2ZXJzZXIgdHJhdmVyc2VyOworICAgIHJvb3QtPnRyYXZlcnNlKCZ0
cmF2ZXJzZXIpOworICAgIFREZXBlbmRlbmN5R3JhcGggZ3JhcGgocm9vdCk7CisKKyAgICBmb3Ig
KFRGdW5jdGlvbkNhbGxWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBncmFwaC5iZWdpblVz
ZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpOworICAgICAgICAgaXRlciAhPSBncmFwaC5lbmRVc2Vy
RGVmaW5lZEZ1bmN0aW9uQ2FsbHMoKTsKKyAgICAgICAgICsraXRlcikKKyAgICB7CisgICAgICAg
IFRHcmFwaEZ1bmN0aW9uQ2FsbCogc2FtcGxlclN5bWJvbCA9ICppdGVyOworICAgICAgICBURGVw
ZW5kZW5jeUdyYXBoVHJhdmVyc2VyIGdyYXBoVHJhdmVyc2VyOworICAgICAgICBzYW1wbGVyU3lt
Ym9sLT50cmF2ZXJzZSgmZ3JhcGhUcmF2ZXJzZXIpOworICAgIH0KKworICAgIGlmICh0cmF2ZXJz
ZXIuZ2V0TWF4RGVwdGgoKSA+IG1heEV4cHJlc3Npb25Db21wbGV4aXR5KQorICAgIHsKKyAgICAg
ICAgaW5mb1NpbmsuaW5mbyA8PCAiRXhwcmVzc2lvbiB0b28gY29tcGxleC4iOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFRDb21waWxl
cjo6ZW5mb3JjZUZyYWdtZW50U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKGNvbnN0IFREZXBlbmRl
bmN5R3JhcGgmIGdyYXBoKQoreworICAgIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcgcmVz
dHJpY3RvcihpbmZvU2luay5pbmZvKTsKKyAgICByZXN0cmljdG9yLmVuZm9yY2VSZXN0cmljdGlv
bnMoZ3JhcGgpOworICAgIHJldHVybiByZXN0cmljdG9yLm51bUVycm9ycygpID09IDA7Cit9CisK
K2Jvb2wgVENvbXBpbGVyOjplbmZvcmNlVmVydGV4U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKFRJ
bnRlcm1Ob2RlKiByb290KQoreworICAgIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nIHJlc3Ry
aWN0b3IoaW5mb1NpbmsuaW5mbyk7CisgICAgcmVzdHJpY3Rvci5lbmZvcmNlUmVzdHJpY3Rpb25z
KHJvb3QpOworICAgIHJldHVybiByZXN0cmljdG9yLm51bUVycm9ycygpID09IDA7Cit9CisKK3Zv
aWQgVENvbXBpbGVyOjpjb2xsZWN0VmFyaWFibGVzKFRJbnRlcm1Ob2RlKiByb290KQoreworICAg
IENvbGxlY3RWYXJpYWJsZXMgY29sbGVjdChhdHRyaWJzLCB1bmlmb3JtcywgdmFyeWluZ3MsIGhh
c2hGdW5jdGlvbik7CisgICAgcm9vdC0+dHJhdmVyc2UoJmNvbGxlY3QpOworfQorCitib29sIFRD
b21waWxlcjo6ZW5mb3JjZVBhY2tpbmdSZXN0cmljdGlvbnMoKQoreworICAgIFZhcmlhYmxlUGFj
a2VyIHBhY2tlcjsKKyAgICBib29sIHN1Y2Nlc3MgPSBwYWNrZXIuQ2hlY2tWYXJpYWJsZXNXaXRo
aW5QYWNraW5nTGltaXRzKG1heFVuaWZvcm1WZWN0b3JzLCB1bmlmb3Jtcyk7CisgICAgaWYgKCFz
dWNjZXNzKSB7CisgICAgICAgIGluZm9TaW5rLmluZm8ucHJlZml4KEVQcmVmaXhFcnJvcik7Cisg
ICAgICAgIGluZm9TaW5rLmluZm8gPDwgInRvbyBtYW55IHVuaWZvcm1zIjsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHN1Y2Nlc3MgPSBwYWNrZXIuQ2hlY2tWYXJpYWJsZXNX
aXRoaW5QYWNraW5nTGltaXRzKG1heFZhcnlpbmdWZWN0b3JzLCB2YXJ5aW5ncyk7CisKKyAgICBp
ZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgaW5mb1NpbmsuaW5mby5wcmVmaXgoRVByZWZpeEVycm9y
KTsKKyAgICAgICAgaW5mb1NpbmsuaW5mbyA8PCAidG9vIG1hbnkgdmFyeWluZ3MiOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgVENv
bXBpbGVyOjppbml0aWFsaXplR0xQb3NpdGlvbihUSW50ZXJtTm9kZSogcm9vdCkKK3sKKyAgICBJ
bml0aWFsaXplVmFyaWFibGVzOjpJbml0VmFyaWFibGVJbmZvTGlzdCB2YXJpYWJsZXM7CisgICAg
SW5pdGlhbGl6ZVZhcmlhYmxlczo6SW5pdFZhcmlhYmxlSW5mbyB2YXIoCisgICAgICAgICJnbF9Q
b3NpdGlvbiIsIFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cVBvc2l0aW9uLCA0KSk7
CisgICAgdmFyaWFibGVzLnB1c2hfYmFjayh2YXIpOworICAgIEluaXRpYWxpemVWYXJpYWJsZXMg
aW5pdGlhbGl6ZXIodmFyaWFibGVzKTsKKyAgICByb290LT50cmF2ZXJzZSgmaW5pdGlhbGl6ZXIp
OworfQorCit2b2lkIFRDb21waWxlcjo6aW5pdGlhbGl6ZVZhcnlpbmdzV2l0aG91dFN0YXRpY1Vz
ZShUSW50ZXJtTm9kZSogcm9vdCkKK3sKKyAgICBJbml0aWFsaXplVmFyaWFibGVzOjpJbml0VmFy
aWFibGVJbmZvTGlzdCB2YXJpYWJsZXM7CisgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHZh
cnlpbmdzLnNpemUoKTsgKytpaSkKKyAgICB7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZUluZm8m
IHZhcnlpbmcgPSB2YXJ5aW5nc1tpaV07CisgICAgICAgIGlmICh2YXJ5aW5nLnN0YXRpY1VzZSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB1bnNpZ25lZCBjaGFyIHNpemUgPSAwOwor
ICAgICAgICBib29sIG1hdHJpeCA9IGZhbHNlOworICAgICAgICBzd2l0Y2ggKHZhcnlpbmcudHlw
ZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgU0hfRkxPQVQ6CisgICAgICAgICAgICBzaXpl
ID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMjoK
KyAgICAgICAgICAgIHNpemUgPSAyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2Fz
ZSBTSF9GTE9BVF9WRUMzOgorICAgICAgICAgICAgc2l6ZSA9IDM7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzQ6CisgICAgICAgICAgICBzaXplID0gNDsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMjoKKyAgICAg
ICAgICAgIHNpemUgPSAyOworICAgICAgICAgICAgbWF0cml4ID0gdHJ1ZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMzoKKyAgICAgICAgICAgIHNpemUg
PSAzOworICAgICAgICAgICAgbWF0cml4ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUNDoKKyAgICAgICAgICAgIHNpemUgPSA0OworICAgICAg
ICAgICAgbWF0cml4ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBBU1NFUlQoZmFsc2UpOworICAgICAgICB9CisgICAgICAgIFRUeXBl
IHR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxVmFyeWluZ091dCwgc2l6ZSwgbWF0cml4
LCB2YXJ5aW5nLmlzQXJyYXkpOworICAgICAgICBUU3RyaW5nIG5hbWUgPSB2YXJ5aW5nLm5hbWUu
Y19zdHIoKTsKKyAgICAgICAgaWYgKHZhcnlpbmcuaXNBcnJheSkKKyAgICAgICAgeworICAgICAg
ICAgICAgdHlwZS5zZXRBcnJheVNpemUodmFyeWluZy5zaXplKTsKKyAgICAgICAgICAgIG5hbWUg
PSBuYW1lLnN1YnN0cigwLCBuYW1lLmZpbmRfZmlyc3Rfb2YoJ1snKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBJbml0aWFsaXplVmFyaWFibGVzOjpJbml0VmFyaWFibGVJbmZvIHZhcihuYW1lLCB0
eXBlKTsKKyAgICAgICAgdmFyaWFibGVzLnB1c2hfYmFjayh2YXIpOworICAgIH0KKyAgICBJbml0
aWFsaXplVmFyaWFibGVzIGluaXRpYWxpemVyKHZhcmlhYmxlcyk7CisgICAgcm9vdC0+dHJhdmVy
c2UoJmluaXRpYWxpemVyKTsKK30KKwordm9pZCBUQ29tcGlsZXI6Om1hcExvbmdWYXJpYWJsZU5h
bWVzKFRJbnRlcm1Ob2RlKiByb290KQoreworICAgIEFTU0VSVChsb25nTmFtZU1hcCk7CisgICAg
TWFwTG9uZ1ZhcmlhYmxlTmFtZXMgbWFwKGxvbmdOYW1lTWFwKTsKKyAgICByb290LT50cmF2ZXJz
ZSgmbWFwKTsKK30KKworaW50IFRDb21waWxlcjo6Z2V0TWFwcGVkTmFtZU1heExlbmd0aCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFICsgMTsKK30K
KworY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBUQ29tcGlsZXI6OmdldEV4dGVuc2lvbkJlaGF2
aW9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZXh0ZW5zaW9uQmVoYXZpb3I7Cit9CisKK2NvbnN0
IFNoQnVpbHRJblJlc291cmNlcyYgVENvbXBpbGVyOjpnZXRSZXNvdXJjZXMoKSBjb25zdAorewor
ICAgIHJldHVybiBjb21waWxlUmVzb3VyY2VzOworfQorCitjb25zdCBBcnJheUJvdW5kc0NsYW1w
ZXImIFRDb21waWxlcjo6Z2V0QXJyYXlCb3VuZHNDbGFtcGVyKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gYXJyYXlCb3VuZHNDbGFtcGVyOworfQorCitTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5
IFRDb21waWxlcjo6Z2V0QXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3koKSBjb25zdAoreworICAg
IHJldHVybiBjbGFtcGluZ1N0cmF0ZWd5OworfQorCitjb25zdCBCdWlsdEluRnVuY3Rpb25FbXVs
YXRvciYgVENvbXBpbGVyOjpnZXRCdWlsdEluRnVuY3Rpb25FbXVsYXRvcigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3Rh
bnRVbmlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIxZTM3ODg1ZjkwMWIwMjRkNjM0NjU4NDc3MTJiZmI2ODg2
MDczNGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmgKQEAgLTAsMCArMSwyNTcgQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX0NPTlNUQU5UX1VOSU9OX0lOQ0xVREVEXworI2RlZmlu
ZSBfQ09OU1RBTlRfVU5JT05fSU5DTFVERURfCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworY2xh
c3MgQ29uc3RhbnRVbmlvbiB7CitwdWJsaWM6CisgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVU
RSgpOworICAgIENvbnN0YW50VW5pb24oKQorICAgIHsKKyAgICAgICAgaUNvbnN0ID0gMDsKKyAg
ICAgICAgdHlwZSA9IEVidFZvaWQ7CisgICAgfQorCisgICAgdm9pZCBzZXRJQ29uc3QoaW50IGkp
IHtpQ29uc3QgPSBpOyB0eXBlID0gRWJ0SW50OyB9CisgICAgdm9pZCBzZXRGQ29uc3QoZmxvYXQg
Zikge2ZDb25zdCA9IGY7IHR5cGUgPSBFYnRGbG9hdDsgfQorICAgIHZvaWQgc2V0QkNvbnN0KGJv
b2wgYikge2JDb25zdCA9IGI7IHR5cGUgPSBFYnRCb29sOyB9CisKKyAgICBpbnQgZ2V0SUNvbnN0
KCkgeyByZXR1cm4gaUNvbnN0OyB9CisgICAgZmxvYXQgZ2V0RkNvbnN0KCkgeyByZXR1cm4gZkNv
bnN0OyB9CisgICAgYm9vbCBnZXRCQ29uc3QoKSB7IHJldHVybiBiQ29uc3Q7IH0KKyAgICBpbnQg
Z2V0SUNvbnN0KCkgY29uc3QgeyByZXR1cm4gaUNvbnN0OyB9CisgICAgZmxvYXQgZ2V0RkNvbnN0
KCkgY29uc3QgeyByZXR1cm4gZkNvbnN0OyB9CisgICAgYm9vbCBnZXRCQ29uc3QoKSBjb25zdCB7
IHJldHVybiBiQ29uc3Q7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpbnQgaSkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBpID09IGlDb25zdDsKKyAgICB9CisKKyAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgZmxvYXQgZikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBm
ID09IGZDb25zdDsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgYm9vbCBiKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGIgPT0gYkNvbnN0OworICAgIH0KKworICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChjb25zdGFudC50eXBlICE9IHR5cGUpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50Ogor
ICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50LmlDb25zdCA9PSBpQ29uc3Q7CisgICAgICAgIGNh
c2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICByZXR1cm4gY29uc3RhbnQuZkNvbnN0ID09IGZDb25z
dDsKKyAgICAgICAgY2FzZSBFYnRCb29sOgorICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50LmJD
b25zdCA9PSBiQ29uc3Q7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaW50IGkp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW9wZXJhdG9yPT0oaSk7CisgICAgfQorCisg
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGZsb2F0IGYpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gIW9wZXJhdG9yPT0oZik7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IGJvb2wgYikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhb3BlcmF0b3I9PShiKTsKKyAg
ICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW9wZXJhdG9yPT0oY29uc3RhbnQpOworICAg
IH0KKworICAgIGJvb2wgb3BlcmF0b3I+KGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBj
b25zdAorICAgIHsgCisgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOworICAg
ICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAgICBy
ZXR1cm4gaUNvbnN0ID4gY29uc3RhbnQuaUNvbnN0OworICAgICAgICBjYXNlIEVidEZsb2F0Ogor
ICAgICAgICAgICAgcmV0dXJuIGZDb25zdCA+IGNvbnN0YW50LmZDb25zdDsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBJbnZhbGlkIG9wZXJhdGlvbiwg
aGFuZGxlZCBhdCBzZW1hbnRpYyBhbmFseXNpcworICAgICAgICB9CisgICAgfQorCisgICAgYm9v
bCBvcGVyYXRvcjwoY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAK
KyAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAo
dHlwZSkgeworICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgIHJldHVybiBpQ29uc3Qg
PCBjb25zdGFudC5pQ29uc3Q7CisgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICBy
ZXR1cm4gZkNvbnN0IDwgY29uc3RhbnQuZkNvbnN0OworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIEludmFsaWQgb3BlcmF0aW9uLCBoYW5kbGVkIGF0IHNl
bWFudGljIGFuYWx5c2lzCisgICAgICAgIH0KKyAgICB9CisKKyAgICBDb25zdGFudFVuaW9uIG9w
ZXJhdG9yKyhjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7IAorICAg
ICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQodHlwZSA9PSBj
b25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0
SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0ICsgY29uc3RhbnQuaUNvbnN0KTsgYnJl
YWs7CisgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IHJldHVyblZhbHVlLnNldEZDb25zdChmQ29uc3Qg
KyBjb25zdGFudC5mQ29uc3QpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNl
ICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXR1
cm5WYWx1ZTsKKyAgICB9CisKKyAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yLShjb25zdCBDb25z
dGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBDb25zdGFudFVuaW9u
IHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAg
ICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5z
ZXRJQ29uc3QoaUNvbnN0IC0gY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RWJ0RmxvYXQ6IHJldHVyblZhbHVlLnNldEZDb25zdChmQ29uc3QgLSBjb25zdGFudC5mQ29uc3Qp
OyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3Np
bmciKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9CisK
KyAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yKihjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFu
dCkgY29uc3QKKyAgICB7IAorICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOworICAg
ICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBl
KSB7CisgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0ICog
Y29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IHJldHVyblZh
bHVlLnNldEZDb25zdChmQ29uc3QgKiBjb25zdGFudC5mQ29uc3QpOyBicmVhazsgCisgICAgICAg
IGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlv
biBvcGVyYXRvciUoY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAK
KyAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYXNzZXJ0KHR5cGUg
PT0gY29uc3RhbnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNl
IEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAlIGNvbnN0YW50LmlDb25zdCk7
IGJyZWFrOworICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1p
c3NpbmciKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9
CisKKyAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yPj4oY29uc3QgQ29uc3RhbnRVbmlvbiYgY29u
c3RhbnQpIGNvbnN0CisgICAgeyAKKyAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsK
KyAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAo
dHlwZSkgeworICAgICAgICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25z
dCA+PiBjb25zdGFudC5pQ29uc3QpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogICAgIGFzc2Vy
dChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gcmV0dXJuVmFsdWU7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvcjw8KGNv
bnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAorICAgIHsgCisgICAgICAgIENvbnN0
YW50VW5pb24gcmV0dXJuVmFsdWU7CisgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5
cGUpOworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6IHJldHVy
blZhbHVlLnNldElDb25zdChpQ29uc3QgPDwgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0KKworICAgIENvbnN0
YW50VW5pb24gb3BlcmF0b3ImKGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAor
ICAgIHsgCisgICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7CisgICAgICAgIGFzc2Vy
dCh0eXBlID09IGNvbnN0YW50LnR5cGUpOworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAg
ICAgY2FzZSBFYnRJbnQ6ICByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0ICYgY29uc3RhbnQu
aUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRl
ZmF1bHQgbWlzc2luZyIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVl
OworICAgIH0KKworICAgIENvbnN0YW50VW5pb24gb3BlcmF0b3J8KGNvbnN0IENvbnN0YW50VW5p
b24mIGNvbnN0YW50KSBjb25zdAorICAgIHsgCisgICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJu
VmFsdWU7CisgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOworICAgICAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6ICByZXR1cm5WYWx1ZS5zZXRJQ29u
c3QoaUNvbnN0IHwgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6ICAg
ICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0KKworICAgIENvbnN0YW50VW5pb24gb3BlcmF0
b3JeKGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAorICAgIHsgCisgICAgICAg
IENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7CisgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0
YW50LnR5cGUpOworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6
ICByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0IF4gY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIp
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0KKworICAg
IENvbnN0YW50VW5pb24gb3BlcmF0b3ImJihjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkg
Y29uc3QKKyAgICB7IAorICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOworICAgICAg
ICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7
CisgICAgICAgIGNhc2UgRWJ0Qm9vbDogcmV0dXJuVmFsdWUuc2V0QkNvbnN0KGJDb25zdCAmJiBj
b25zdGFudC5iQ29uc3QpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxz
ZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0
dXJuVmFsdWU7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvcnx8KGNvbnN0IENv
bnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAorICAgIHsgCisgICAgICAgIENvbnN0YW50VW5p
b24gcmV0dXJuVmFsdWU7CisgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwor
ICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRCb29sOiByZXR1cm5WYWx1
ZS5zZXRCQ29uc3QoYkNvbnN0IHx8IGNvbnN0YW50LmJDb25zdCk7IGJyZWFrOworICAgICAgICBk
ZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9CisKKyAgICBUQmFzaWNUeXBl
IGdldFR5cGUoKSBjb25zdCB7IHJldHVybiB0eXBlOyB9Citwcml2YXRlOgorCisgICAgdW5pb24g
IHsKKyAgICAgICAgaW50IGlDb25zdDsgIC8vIHVzZWQgZm9yIGl2ZWMsIHNjYWxhciBpbnRzCisg
ICAgICAgIGJvb2wgYkNvbnN0OyAvLyB1c2VkIGZvciBidmVjLCBzY2FsYXIgYm9vbHMKKyAgICAg
ICAgZmxvYXQgZkNvbnN0OyAgIC8vIHVzZWQgZm9yIHZlYywgbWF0LCBzY2FsYXIgZmxvYXRzCisg
ICAgfSA7CisKKyAgICBUQmFzaWNUeXBlIHR5cGU7Cit9OworCisjZW5kaWYgLy8gX0NPTlNUQU5U
X1VOSU9OX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0Q2FsbERlcHRoLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RldGVjdENhbGxEZXB0aC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYmZjMWQ1ODUyZmYyZGM2ZmFkMzMwYzc1OTEwZmMzZDU3NmY4ZmUxOQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL0RldGVjdENhbGxEZXB0aC5jcHAKQEAgLTAsMCArMSwxODUgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0RldGVjdENhbGxEZXB0aC5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKKworRGV0ZWN0Q2FsbERl
cHRoOjpGdW5jdGlvbk5vZGU6OkZ1bmN0aW9uTm9kZShjb25zdCBUU3RyaW5nJiBmbmFtZSkKKyAg
ICA6IG5hbWUoZm5hbWUpLAorICAgICAgdmlzaXQoUHJlVmlzaXQpCit7Cit9CisKK2NvbnN0IFRT
dHJpbmcmIERldGVjdENhbGxEZXB0aDo6RnVuY3Rpb25Ob2RlOjpnZXROYW1lKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbmFtZTsKK30KKwordm9pZCBEZXRlY3RDYWxsRGVwdGg6OkZ1bmN0aW9uTm9k
ZTo6YWRkQ2FsbGVlKAorICAgIERldGVjdENhbGxEZXB0aDo6RnVuY3Rpb25Ob2RlKiBjYWxsZWUp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjYWxsZWVzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGlmIChjYWxsZWVzW2ldID09IGNhbGxlZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgY2FsbGVlcy5wdXNoX2JhY2soY2FsbGVlKTsKK30KKworaW50IERldGVjdENhbGxE
ZXB0aDo6RnVuY3Rpb25Ob2RlOjpkZXRlY3RDYWxsRGVwdGgoRGV0ZWN0Q2FsbERlcHRoKiBkZXRl
Y3RDYWxsRGVwdGgsIGludCBkZXB0aCkKK3sKKyAgICBBU1NFUlQodmlzaXQgPT0gUHJlVmlzaXQp
OworICAgIEFTU0VSVChkZXRlY3RDYWxsRGVwdGgpOworCisgICAgaW50IG1heERlcHRoID0gZGVw
dGg7CisgICAgdmlzaXQgPSBJblZpc2l0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2Fs
bGVlcy5zaXplKCk7ICsraSkgeworICAgICAgICBzd2l0Y2ggKGNhbGxlZXNbaV0tPnZpc2l0KSB7
CisgICAgICAgICAgICBjYXNlIEluVmlzaXQ6CisgICAgICAgICAgICAgICAgLy8gY3ljbGUgZGV0
ZWN0ZWQsIGkuZS4sIHJlY3Vyc2lvbiBkZXRlY3RlZC4KKyAgICAgICAgICAgICAgICByZXR1cm4g
a0luZmluaXRlQ2FsbERlcHRoOworICAgICAgICAgICAgY2FzZSBQb3N0VmlzaXQ6CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFByZVZpc2l0OiB7CisgICAgICAgICAg
ICAgICAgLy8gQ2hlY2sgYmVmb3JlIHdlIHJlY3Vyc2Ugc28gd2UgZG9uJ3QgZ28gdG9vIGRlcHRo
CisgICAgICAgICAgICAgICAgaWYgKGRldGVjdENhbGxEZXB0aC0+Y2hlY2tFeGNlZWRzTWF4RGVw
dGgoZGVwdGgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVwdGg7CisgICAgICAgICAg
ICAgICAgaW50IGNhbGxEZXB0aCA9IGNhbGxlZXNbaV0tPmRldGVjdENhbGxEZXB0aChkZXRlY3RD
YWxsRGVwdGgsIGRlcHRoICsgMSk7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgYWZ0ZXIgd2Ug
cmVjdXJzZSBzbyB3ZSBjYW4gZXhpdCBpbW1lZGlhdGVseSBhbmQgcHJvdmlkZSBpbmZvLgorICAg
ICAgICAgICAgICAgIGlmIChkZXRlY3RDYWxsRGVwdGgtPmNoZWNrRXhjZWVkc01heERlcHRoKGNh
bGxEZXB0aCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZGV0ZWN0Q2FsbERlcHRoLT5nZXRJbmZv
U2luaygpLmluZm8gPDwgIjwtIiA8PCBjYWxsZWVzW2ldLT5nZXROYW1lKCk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBjYWxsRGVwdGg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIG1heERlcHRoID0gc3RkOjptYXgoY2FsbERlcHRoLCBtYXhEZXB0aCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisgICAgdmlzaXQgPSBQb3N0VmlzaXQ7CisgICAgcmV0dXJuIG1heERlcHRo
OworfQorCit2b2lkIERldGVjdENhbGxEZXB0aDo6RnVuY3Rpb25Ob2RlOjpyZXNldCgpCit7Cisg
ICAgdmlzaXQgPSBQcmVWaXNpdDsKK30KKworRGV0ZWN0Q2FsbERlcHRoOjpEZXRlY3RDYWxsRGVw
dGgoVEluZm9TaW5rJiBpbmZvU2luaywgYm9vbCBsaW1pdENhbGxTdGFja0RlcHRoLCBpbnQgbWF4
Q2FsbFN0YWNrRGVwdGgpCisgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCB0cnVl
LCBmYWxzZSksCisgICAgICBjdXJyZW50RnVuY3Rpb24oTlVMTCksCisgICAgICBpbmZvU2luayhp
bmZvU2luayksCisgICAgICBtYXhEZXB0aChsaW1pdENhbGxTdGFja0RlcHRoID8gbWF4Q2FsbFN0
YWNrRGVwdGggOiBGdW5jdGlvbk5vZGU6OmtJbmZpbml0ZUNhbGxEZXB0aCkKK3sKK30KKworRGV0
ZWN0Q2FsbERlcHRoOjp+RGV0ZWN0Q2FsbERlcHRoKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGZ1bmN0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgZGVsZXRlIGZ1bmN0aW9uc1tp
XTsKK30KKworYm9vbCBEZXRlY3RDYWxsRGVwdGg6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0
LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQoreworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkK
KyAgICB7CisgICAgICAgIGNhc2UgRU9wUHJvdG90eXBlOgorICAgICAgICAgICAgLy8gRnVuY3Rp
b24gZGVjbGFyYXRpb24uCisgICAgICAgICAgICAvLyBEb24ndCBhZGQgRnVuY3Rpb25Ob2RlIGhl
cmUgYmVjYXVzZSBub2RlLT5nZXROYW1lKCkgaXMgdGhlCisgICAgICAgICAgICAvLyB1bm1hbmds
ZWQgZnVuY3Rpb24gbmFtZS4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEZ1
bmN0aW9uOiB7CisgICAgICAgICAgICAvLyBGdW5jdGlvbiBkZWZpbml0aW9uLgorICAgICAgICAg
ICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KSB7CisgICAgICAgICAgICAgICAgY3VycmVudEZ1bmN0
aW9uID0gZmluZEZ1bmN0aW9uQnlOYW1lKG5vZGUtPmdldE5hbWUoKSk7CisgICAgICAgICAgICAg
ICAgaWYgKGN1cnJlbnRGdW5jdGlvbiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRGdW5jdGlvbiA9IG5ldyBGdW5jdGlvbk5vZGUobm9kZS0+Z2V0TmFtZSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgZnVuY3Rpb25zLnB1c2hfYmFjayhjdXJyZW50RnVuY3Rpb24pOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZpc2l0
KSB7CisgICAgICAgICAgICAgICAgY3VycmVudEZ1bmN0aW9uID0gTlVMTDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRU9wRnVuY3Rp
b25DYWxsOiB7CisgICAgICAgICAgICAvLyBGdW5jdGlvbiBjYWxsLgorICAgICAgICAgICAgaWYg
KHZpc2l0ID09IFByZVZpc2l0KSB7CisgICAgICAgICAgICAgICAgRnVuY3Rpb25Ob2RlKiBmdW5j
ID0gZmluZEZ1bmN0aW9uQnlOYW1lKG5vZGUtPmdldE5hbWUoKSk7CisgICAgICAgICAgICAgICAg
aWYgKGZ1bmMgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBmdW5jID0gbmV3IEZ1bmN0
aW9uTm9kZShub2RlLT5nZXROYW1lKCkpOworICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbnMu
cHVzaF9iYWNrKGZ1bmMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
Y3VycmVudEZ1bmN0aW9uKQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50RnVuY3Rpb24tPmFk
ZENhbGxlZShmdW5jKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgRGV0ZWN0Q2FsbERlcHRoOjpjaGVja0V4Y2VlZHNNYXhEZXB0
aChpbnQgZGVwdGgpCit7CisgICAgcmV0dXJuIGRlcHRoID49IG1heERlcHRoOworfQorCit2b2lk
IERldGVjdENhbGxEZXB0aDo6cmVzZXRGdW5jdGlvbk5vZGVzKCkKK3sKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGZ1bmN0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBmdW5jdGlvbnNb
aV0tPnJlc2V0KCk7CisgICAgfQorfQorCitEZXRlY3RDYWxsRGVwdGg6OkVycm9yQ29kZSBEZXRl
Y3RDYWxsRGVwdGg6OmRldGVjdENhbGxEZXB0aEZvckZ1bmN0aW9uKEZ1bmN0aW9uTm9kZSogZnVu
YykKK3sKKyAgICBjdXJyZW50RnVuY3Rpb24gPSBOVUxMOworICAgIHJlc2V0RnVuY3Rpb25Ob2Rl
cygpOworCisgICAgaW50IG1heENhbGxEZXB0aCA9IGZ1bmMtPmRldGVjdENhbGxEZXB0aCh0aGlz
LCAxKTsKKworICAgIGlmIChtYXhDYWxsRGVwdGggPT0gRnVuY3Rpb25Ob2RlOjprSW5maW5pdGVD
YWxsRGVwdGgpCisgICAgICAgIHJldHVybiBrRXJyb3JSZWN1cnNpb247CisKKyAgICBpZiAobWF4
Q2FsbERlcHRoID49IG1heERlcHRoKQorICAgICAgICByZXR1cm4ga0Vycm9yTWF4RGVwdGhFeGNl
ZWRlZDsKKworICAgIHJldHVybiBrRXJyb3JOb25lOworfQorCitEZXRlY3RDYWxsRGVwdGg6OkVy
cm9yQ29kZSBEZXRlY3RDYWxsRGVwdGg6OmRldGVjdENhbGxEZXB0aCgpCit7CisgICAgaWYgKG1h
eERlcHRoICE9IEZ1bmN0aW9uTm9kZTo6a0luZmluaXRlQ2FsbERlcHRoKSB7CisgICAgICAgIC8v
IENoZWNrIGFsbCBmdW5jdGlvbnMgYmVjYXVzZSB0aGUgZHJpdmVyIG1heSBmYWlsIG9uIHRoZW0K
KyAgICAgICAgLy8gVE9ETzogQmVmb3JlIGRldGVjdGluZ1JlY3Vyc2lvbiwgc3RyaXAgdW51c2Vk
IGZ1bmN0aW9ucy4KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbnMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIEVycm9yQ29kZSBlcnJvciA9IGRldGVjdENhbGxEZXB0
aEZvckZ1bmN0aW9uKGZ1bmN0aW9uc1tpXSk7CisgICAgICAgICAgICBpZiAoZXJyb3IgIT0ga0Vy
cm9yTm9uZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICBGdW5jdGlvbk5vZGUqIG1haW4gPSBmaW5kRnVuY3Rpb25CeU5hbWUo
Im1haW4oIik7CisgICAgICAgIGlmIChtYWluID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4g
a0Vycm9yTWlzc2luZ01haW47CisKKyAgICAgICAgcmV0dXJuIGRldGVjdENhbGxEZXB0aEZvckZ1
bmN0aW9uKG1haW4pOworICAgIH0KKworICAgIHJldHVybiBrRXJyb3JOb25lOworfQorCitEZXRl
Y3RDYWxsRGVwdGg6OkZ1bmN0aW9uTm9kZSogRGV0ZWN0Q2FsbERlcHRoOjpmaW5kRnVuY3Rpb25C
eU5hbWUoCisgICAgY29uc3QgVFN0cmluZyYgbmFtZSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGZ1bmN0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoZnVuY3Rpb25zW2ld
LT5nZXROYW1lKCkgPT0gbmFtZSkKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbnNbaV07Cisg
ICAgfQorICAgIHJldHVybiBOVUxMOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EZXRlY3RDYWxsRGVwdGguaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RldGVjdENhbGxEZXB0
aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjVlN2YyM2QxNWY4YzE4NmYyNTczNzY4MTA3ZDI1YjI1YmFkM2EyYmIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9EZXRlY3RDYWxsRGVwdGguaApAQCAtMCwwICsxLDgwIEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX0RFVEVDVF9SRUNVUlNJT05fSF8KKyNkZWZpbmUg
Q09NUElMRVJfREVURUNUX1JFQ1VSU0lPTl9IXworCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJM
YW5nLmgiCisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFi
bGVJbmZvLmgiCisKK2NsYXNzIFRJbmZvU2luazsKKworLy8gVHJhdmVyc2VzIGludGVybWVkaWF0
ZSB0cmVlIHRvIGRldGVjdCBmdW5jdGlvbiByZWN1cnNpb24uCitjbGFzcyBEZXRlY3RDYWxsRGVw
dGggOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgZW51bSBFcnJvckNv
ZGUgeworICAgICAgICBrRXJyb3JNaXNzaW5nTWFpbiwKKyAgICAgICAga0Vycm9yUmVjdXJzaW9u
LAorICAgICAgICBrRXJyb3JNYXhEZXB0aEV4Y2VlZGVkLAorICAgICAgICBrRXJyb3JOb25lCisg
ICAgfTsKKworICAgIERldGVjdENhbGxEZXB0aChUSW5mb1NpbmsmIGluZm9TeW5jLCBib29sIGxp
bWl0Q2FsbFN0YWNrRGVwdGgsIGludCBtYXhDYWxsU3RhY2tEZXB0aCk7CisgICAgfkRldGVjdENh
bGxEZXB0aCgpOworCisgICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50
ZXJtQWdncmVnYXRlKik7CisKKyAgICBib29sIGNoZWNrRXhjZWVkc01heERlcHRoKGludCBkZXB0
aCk7CisKKyAgICBFcnJvckNvZGUgZGV0ZWN0Q2FsbERlcHRoKCk7CisKK3ByaXZhdGU6CisgICAg
Y2xhc3MgRnVuY3Rpb25Ob2RlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBjb25zdCBp
bnQga0luZmluaXRlQ2FsbERlcHRoID0gSU5UX01BWDsKKworICAgICAgICBGdW5jdGlvbk5vZGUo
Y29uc3QgVFN0cmluZyYgZm5hbWUpOworCisgICAgICAgIGNvbnN0IFRTdHJpbmcmIGdldE5hbWUo
KSBjb25zdDsKKworICAgICAgICAvLyBJZiBhIGZ1bmN0aW9uIGlzIGFscmVhZHkgaW4gdGhlIGNh
bGxlZSBsaXN0LCB0aGlzIGJlY29tZXMgYSBuby1vcC4KKyAgICAgICAgdm9pZCBhZGRDYWxsZWUo
RnVuY3Rpb25Ob2RlKiBjYWxsZWUpOworCisgICAgICAgIC8vIFJldHVybnMga0luaWZpbml0eUNh
bGxEZXB0aCBpZiByZWN1cnNpdmUgZnVuY3Rpb24gY2FsbHMgYXJlIGRldGVjdGVkLgorICAgICAg
ICBpbnQgZGV0ZWN0Q2FsbERlcHRoKERldGVjdENhbGxEZXB0aCogZGV0ZWN0Q2FsbERlcHRoLCBp
bnQgZGVwdGgpOworCisgICAgICAgIC8vIFJlc2V0IHN0YXRlLgorICAgICAgICB2b2lkIHJlc2V0
KCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICAvLyBtYW5nbGVkIGZ1bmN0aW9uIG5hbWUgaXMg
dW5pcXVlLgorICAgICAgICBUU3RyaW5nIG5hbWU7CisKKyAgICAgICAgLy8gZnVuY3Rpb25zIHRo
YXQgYXJlIGRpcmVjdGx5IGNhbGxlZCBieSB0aGlzIGZ1bmN0aW9uLgorICAgICAgICBUVmVjdG9y
PEZ1bmN0aW9uTm9kZSo+IGNhbGxlZXM7CisKKyAgICAgICAgVmlzaXQgdmlzaXQ7CisgICAgfTsK
KworICAgIEVycm9yQ29kZSBkZXRlY3RDYWxsRGVwdGhGb3JGdW5jdGlvbihGdW5jdGlvbk5vZGUq
IGZ1bmMpOworICAgIEZ1bmN0aW9uTm9kZSogZmluZEZ1bmN0aW9uQnlOYW1lKGNvbnN0IFRTdHJp
bmcmIG5hbWUpOworICAgIHZvaWQgcmVzZXRGdW5jdGlvbk5vZGVzKCk7CisKKyAgICBUSW5mb1Np
bmsmIGdldEluZm9TaW5rKCkgeyByZXR1cm4gaW5mb1Npbms7IH0KKworICAgIFRWZWN0b3I8RnVu
Y3Rpb25Ob2RlKj4gZnVuY3Rpb25zOworICAgIEZ1bmN0aW9uTm9kZSogY3VycmVudEZ1bmN0aW9u
OworICAgIFRJbmZvU2luayYgaW5mb1Npbms7CisgICAgaW50IG1heERlcHRoOworCisgICAgRGV0
ZWN0Q2FsbERlcHRoKGNvbnN0IERldGVjdENhbGxEZXB0aCYpOworICAgIHZvaWQgb3BlcmF0b3I9
KGNvbnN0IERldGVjdENhbGxEZXB0aCYpOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9ERVRF
Q1RfUkVDVVJTSU9OX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9EZXRlY3REaXNjb250aW51aXR5LmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RldGVjdERpc2NvbnRpbnVpdHku
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjMzNGViMGJmYThiYWY1YTI0NjBhMWQyNmY3NWUwYzU1ZTEwNzgwNmMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9EZXRlY3REaXNjb250aW51aXR5LmNwcApAQCAtMCwwICsxLDEzOSBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisvLyBDb250YWlucyBhbmFseXNpcyB1dGlsaXRpZXMgZm9yIGRlYWxpbmcgd2l0
aCBITFNMJ3MgbGFjayBvZiBzdXBwb3J0IGZvcgorLy8gdGhlIHVzZSBvZiBpbnRyaW5zaWMgZnVu
Y3Rpb25zIHdoaWNoIChpbXBsaWNpdGx5IG9yIGV4cGxpY2l0bHkpIGNvbXB1dGUKKy8vIGdyYWRp
ZW50cyBvZiBmdW5jdGlvbnMgd2l0aCBkaXNjb250aW51aXRpZXMuIAorLy8KKworI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0RGlzY29udGludWl0eS5oIgorCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaCIKKworbmFtZXNwYWNlIHNoCit7Citi
b29sIERldGVjdExvb3BEaXNjb250aW51aXR5Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkK
K3sKKyAgICBtTG9vcERlcHRoID0gMDsKKyAgICBtTG9vcERpc2NvbnRpbnVpdHkgPSBmYWxzZTsK
KyAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICByZXR1cm4gbUxvb3BEaXNjb250aW51aXR5
OworfQorCitib29sIERldGVjdExvb3BEaXNjb250aW51aXR5Ojp2aXNpdExvb3AoVmlzaXQgdmlz
aXQsIFRJbnRlcm1Mb29wICpsb29wKQoreworICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAg
ICB7CisgICAgICAgICsrbUxvb3BEZXB0aDsKKyAgICB9CisgICAgZWxzZSBpZiAodmlzaXQgPT0g
UG9zdFZpc2l0KQorICAgIHsKKyAgICAgICAgLS1tTG9vcERlcHRoOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIERldGVjdExvb3BEaXNjb250aW51aXR5Ojp2aXNpdEJyYW5j
aChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCAqbm9kZSkKK3sKKyAgICBpZiAobUxvb3BEaXNj
b250aW51aXR5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlm
ICghbUxvb3BEZXB0aCkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BLaWxsOgor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQnJlYWs6CisgICAgICBjYXNlIEVPcENvbnRp
bnVlOgorICAgICAgY2FzZSBFT3BSZXR1cm46CisgICAgICAgIG1Mb29wRGlzY29udGludWl0eSA9
IHRydWU7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gIW1Mb29wRGlzY29udGludWl0eTsKK30KKworYm9vbCBEZXRlY3RM
b29wRGlzY29udGludWl0eTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dy
ZWdhdGUgKm5vZGUpCit7CisgICAgcmV0dXJuICFtTG9vcERpc2NvbnRpbnVpdHk7Cit9CisKK2Jv
b2wgY29udGFpbnNMb29wRGlzY29udGludWl0eShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBE
ZXRlY3RMb29wRGlzY29udGludWl0eSBkZXRlY3RMb29wRGlzY29udGludWl0eTsKKyAgICByZXR1
cm4gZGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkudHJhdmVyc2Uobm9kZSk7Cit9CisKK2Jvb2wgRGV0
ZWN0R3JhZGllbnRPcGVyYXRpb246OnRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAg
IG1HcmFkaWVudE9wZXJhdGlvbiA9IGZhbHNlOworICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOwor
ICAgIHJldHVybiBtR3JhZGllbnRPcGVyYXRpb247Cit9CisKK2Jvb2wgRGV0ZWN0R3JhZGllbnRP
cGVyYXRpb246OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9kZSkKK3sK
KyAgICBpZiAobUdyYWRpZW50T3BlcmF0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7CisgICAgICBjYXNl
IEVPcERGZHg6CisgICAgICBjYXNlIEVPcERGZHk6CisgICAgICAgIG1HcmFkaWVudE9wZXJhdGlv
biA9IHRydWU7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBy
ZXR1cm4gIW1HcmFkaWVudE9wZXJhdGlvbjsKK30KKworYm9vbCBEZXRlY3RHcmFkaWVudE9wZXJh
dGlvbjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUp
Cit7CisgICAgaWYgKG1HcmFkaWVudE9wZXJhdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBpZiAobm9kZS0+Z2V0T3AoKSA9PSBFT3BGdW5jdGlvbkNhbGwp
CisgICAgeworICAgICAgICBpZiAoIW5vZGUtPmlzVXNlckRlZmluZWQoKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgVFN0cmluZyBuYW1lID0gVEZ1bmN0aW9uOjp1bm1hbmdsZU5hbWUobm9kZS0+
Z2V0TmFtZSgpKTsKKworICAgICAgICAgICAgaWYgKG5hbWUgPT0gInRleHR1cmUyRCIgfHwKKyAg
ICAgICAgICAgICAgICBuYW1lID09ICJ0ZXh0dXJlMkRQcm9qIiB8fAorICAgICAgICAgICAgICAg
IG5hbWUgPT0gInRleHR1cmVDdWJlIikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBt
R3JhZGllbnRPcGVyYXRpb24gPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gV2hlbiBhIHVzZXIgZGVmaW5lZCBm
dW5jdGlvbiBpcyBjYWxsZWQsIHdlIGhhdmUgdG8KKyAgICAgICAgICAgIC8vIGNvbnNlcnZhdGl2
ZWx5IGFzc3VtZSBpdCB0byBjb250YWluIGdyYWRpZW50IG9wZXJhdGlvbnMKKyAgICAgICAgICAg
IG1HcmFkaWVudE9wZXJhdGlvbiA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gIW1HcmFkaWVudE9wZXJhdGlvbjsKK30KKworYm9vbCBjb250YWluc0dyYWRpZW50T3BlcmF0
aW9uKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIERldGVjdEdyYWRpZW50T3BlcmF0aW9uIGRl
dGVjdEdyYWRpZW50T3BlcmF0aW9uOworICAgIHJldHVybiBkZXRlY3RHcmFkaWVudE9wZXJhdGlv
bi50cmF2ZXJzZShub2RlKTsKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RldGVjdERpc2NvbnRpbnVpdHkuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RldGVjdERpc2NvbnRp
bnVpdHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xZGQ4YmU5MjMzNTljM2ZlNmRhYzk0ZjUyNzI2MGMzMzViMzMx
MzkxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvRGV0ZWN0RGlzY29udGludWl0eS5oCkBAIC0wLDAgKzEsNTIgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworLy8gQ29udGFpbnMgYW5hbHlzaXMgdXRpbGl0aWVzIGZvciBkZWFsaW5nIHdp
dGggSExTTCdzIGxhY2sgb2Ygc3VwcG9ydCBmb3IKKy8vIHRoZSB1c2Ugb2YgaW50cmluc2ljIGZ1
bmN0aW9ucyB3aGljaCAoaW1wbGljaXRseSBvciBleHBsaWNpdGx5KSBjb21wdXRlCisvLyBncmFk
aWVudHMgb2YgZnVuY3Rpb25zIHdpdGggZGlzY29udGludWl0aWVzLiAKKy8vCisKKyNpZm5kZWYg
Q09NUElMRVJfREVURUNURElTQ09OVElOVUlUWV9IXworI2RlZmluZSBDT01QSUxFUl9ERVRFQ1RE
SVNDT05USU5VSVRZX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVk
aWF0ZS5oIgorCituYW1lc3BhY2Ugc2gKK3sKKy8vIENoZWNrcyB3aGV0aGVyIGEgbG9vcCBjYW4g
cnVuIGZvciBhIHZhcmlhYmxlIG51bWJlciBvZiBpdGVyYXRpb25zCitjbGFzcyBEZXRlY3RMb29w
RGlzY29udGludWl0eSA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAg
ICBib29sIHRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKTsKKworICBwcm90ZWN0ZWQ6CisgICAg
Ym9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCAqbm9kZSk7CisgICAg
Ym9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpsb29wKTsKKyAgICBib29s
IHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKTsKKwor
ICAgIGludCBtTG9vcERlcHRoOworICAgIGJvb2wgbUxvb3BEaXNjb250aW51aXR5OworfTsKKwor
Ym9vbCBjb250YWluc0xvb3BEaXNjb250aW51aXR5KFRJbnRlcm1Ob2RlICpub2RlKTsKKworLy8g
Q2hlY2tzIGZvciBpbnRyaW5zaWMgZnVuY3Rpb25zIHdoaWNoIGNvbXB1dGUgZ3JhZGllbnRzCitj
bGFzcyBEZXRlY3RHcmFkaWVudE9wZXJhdGlvbiA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7
CisgIHB1YmxpYzoKKyAgICBib29sIHRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKTsKKworICBw
cm90ZWN0ZWQ6CisgICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkg
Km5vZGUpOworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dy
ZWdhdGUgKm5vZGUpOworCisgICAgYm9vbCBtR3JhZGllbnRPcGVyYXRpb247Cit9OworCitib29s
IGNvbnRhaW5zR3JhZGllbnRPcGVyYXRpb24oVEludGVybU5vZGUgKm5vZGUpOworCit9CisKKyNl
bmRpZiAgIC8vIENPTVBJTEVSX0RFVEVDVERJU0NPTlRJTlVJVFlfSF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RpYWdub3N0aWNz
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Rp
YWdub3N0aWNzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OTUwNmMwODQ5NDIyZmUxZGIzMjQ5YmFmYjg3NzJk
YWJjNTYxMTE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlhZ25vc3RpY3MuY3BwCkBAIC0wLDAgKzEsNjMgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5o
IgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9jb21waWxlcmRlYnVnLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L3ByZXByb2Nlc3Nvci9Tb3VyY2VMb2NhdGlvbi5oIgorCitURGlhZ25vc3RpY3M6OlREaWFnbm9z
dGljcyhUSW5mb1NpbmsmIGluZm9TaW5rKSA6CisgICAgbUluZm9TaW5rKGluZm9TaW5rKSwKKyAg
ICBtTnVtRXJyb3JzKDApLAorICAgIG1OdW1XYXJuaW5ncygwKQoreworfQorCitURGlhZ25vc3Rp
Y3M6On5URGlhZ25vc3RpY3MoKQoreworfQorCit2b2lkIFREaWFnbm9zdGljczo6d3JpdGVJbmZv
KFNldmVyaXR5IHNldmVyaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBw
cDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc3RkOjpzdHJpbmcmIHJlYXNvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc3RkOjpzdHJpbmcmIHRva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBzdGQ6OnN0cmluZyYgZXh0cmEpCit7CisgICAgVFByZWZpeFR5cGUgcHJlZml4ID0gRVByZWZp
eE5vbmU7CisgICAgc3dpdGNoIChzZXZlcml0eSkKKyAgICB7CisgICAgICBjYXNlIFBQX0VSUk9S
OgorICAgICAgICArK21OdW1FcnJvcnM7CisgICAgICAgIHByZWZpeCA9IEVQcmVmaXhFcnJvcjsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFBQX1dBUk5JTkc6CisgICAgICAgICsrbU51bVdh
cm5pbmdzOworICAgICAgICBwcmVmaXggPSBFUHJlZml4V2FybmluZzsKKyAgICAgICAgYnJlYWs7
CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBUSW5mb1NpbmtCYXNlJiBzaW5rID0gbUluZm9TaW5rLmluZm87CisgICAg
LyogVkMrKyBmb3JtYXQ6IGZpbGUobGluZW51bSkgOiBlcnJvciAjOiAndG9rZW4nIDogZXh0cmFp
bmZvICovCisgICAgc2luay5wcmVmaXgocHJlZml4KTsKKyAgICBzaW5rLmxvY2F0aW9uKGxvYy5m
aWxlLCBsb2MubGluZSk7CisgICAgc2luayA8PCAiJyIgPDwgdG9rZW4gPDwgICInIDogIiA8PCBy
ZWFzb24gPDwgIiAiIDw8IGV4dHJhIDw8ICJcbiI7Cit9CisKK3ZvaWQgVERpYWdub3N0aWNzOjp3
cml0ZURlYnVnKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIpCit7CisgICAgbUluZm9TaW5rLmRlYnVn
IDw8IHN0cjsKK30KKwordm9pZCBURGlhZ25vc3RpY3M6OnByaW50KElEIGlkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KQoreworICAgIHdyaXRlSW5m
byhzZXZlcml0eShpZCksIGxvYywgbWVzc2FnZShpZCksIHRleHQsICIiKTsKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RpYWdu
b3N0aWNzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9EaWFnbm9zdGljcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNiNzFiYjEyMDQyMjhhNzQ3Mzc0YTI2ZWZkODlj
N2M2NzJiYjU2YjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5oCkBAIC0wLDAgKzEsNDQgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX0RJQUdOT1NUSUNTX0hfCisjZGVmaW5lIENP
TVBJTEVSX0RJQUdOT1NUSUNTX0hfCisKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Iv
RGlhZ25vc3RpY3NCYXNlLmgiCisKK2NsYXNzIFRJbmZvU2luazsKKworY2xhc3MgVERpYWdub3N0
aWNzIDogcHVibGljIHBwOjpEaWFnbm9zdGljcworeworICBwdWJsaWM6CisgICAgVERpYWdub3N0
aWNzKFRJbmZvU2luayYgaW5mb1NpbmspOworICAgIHZpcnR1YWwgflREaWFnbm9zdGljcygpOwor
CisgICAgVEluZm9TaW5rJiBpbmZvU2luaygpIHsgcmV0dXJuIG1JbmZvU2luazsgfQorCisgICAg
aW50IG51bUVycm9ycygpIGNvbnN0IHsgcmV0dXJuIG1OdW1FcnJvcnM7IH0KKyAgICBpbnQgbnVt
V2FybmluZ3MoKSBjb25zdCB7IHJldHVybiBtTnVtV2FybmluZ3M7IH0KKworICAgIHZvaWQgd3Jp
dGVJbmZvKFNldmVyaXR5IHNldmVyaXR5LAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHBwOjpT
b3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5n
JiByZWFzb24sCisgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRva2VuLAor
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHRyYSk7CisKKyAgICB2b2lk
IHdyaXRlRGVidWcoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cik7CisKKyAgcHJvdGVjdGVkOgorICAg
IHZpcnR1YWwgdm9pZCBwcmludChJRCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
cHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0
ZDo6c3RyaW5nJiB0ZXh0KTsKKworICBwcml2YXRlOgorICAgIFRJbmZvU2luayYgbUluZm9TaW5r
OworICAgIGludCBtTnVtRXJyb3JzOworICAgIGludCBtTnVtV2FybmluZ3M7Cit9OworCisjZW5k
aWYgIC8vIENPTVBJTEVSX0RJQUdOT1NUSUNTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RpcmVjdGl2
ZUhhbmRsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2MmM4YWU2MjQwMWJmYjM2OWVmMGY4ZWNkYTg4NWEy
ZGU2NDg1YjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmNwcApAQCAtMCwwICsxLDE2MSBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0RpcmVjdGl2
ZUhhbmRsZXIuaCIKKworI2luY2x1ZGUgPHNzdHJlYW0+CisKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL2NvbXBpbGVyZGVidWcuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L0RpYWdub3N0aWNzLmgiCisKK3N0YXRpYyBUQmVoYXZpb3IgZ2V0QmVoYXZpb3IoY29uc3Qgc3Rk
OjpzdHJpbmcmIHN0cikKK3sKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga1JlcXVpcmUo
InJlcXVpcmUiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0VuYWJsZSgiZW5hYmxl
Iik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXNhYmxlKCJkaXNhYmxlIik7Cisg
ICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtXYXJuKCJ3YXJuIik7CisKKyAgICBpZiAoc3Ry
ID09IGtSZXF1aXJlKSByZXR1cm4gRUJoUmVxdWlyZTsKKyAgICBlbHNlIGlmIChzdHIgPT0ga0Vu
YWJsZSkgcmV0dXJuIEVCaEVuYWJsZTsKKyAgICBlbHNlIGlmIChzdHIgPT0ga0Rpc2FibGUpIHJl
dHVybiBFQmhEaXNhYmxlOworICAgIGVsc2UgaWYgKHN0ciA9PSBrV2FybikgcmV0dXJuIEVCaFdh
cm47CisgICAgcmV0dXJuIEVCaFVuZGVmaW5lZDsKK30KKworVERpcmVjdGl2ZUhhbmRsZXI6OlRE
aXJlY3RpdmVIYW5kbGVyKFRFeHRlbnNpb25CZWhhdmlvciYgZXh0QmVoYXZpb3IsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVERpYWdub3N0aWNzJiBkaWFnbm9zdGljcykK
KyAgICA6IG1FeHRlbnNpb25CZWhhdmlvcihleHRCZWhhdmlvciksCisgICAgICBtRGlhZ25vc3Rp
Y3MoZGlhZ25vc3RpY3MpCit7Cit9CisKK1REaXJlY3RpdmVIYW5kbGVyOjp+VERpcmVjdGl2ZUhh
bmRsZXIoKQoreworfQorCit2b2lkIFREaXJlY3RpdmVIYW5kbGVyOjpoYW5kbGVFcnJvcihjb25z
dCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtc2cpCit7CisgICAgbURpYWdub3N0aWNzLndyaXRl
SW5mbyhwcDo6RGlhZ25vc3RpY3M6OlBQX0VSUk9SLCBsb2MsIG1zZywgIiIsICIiKTsKK30KKwor
dm9pZCBURGlyZWN0aXZlSGFuZGxlcjo6aGFuZGxlUHJhZ21hKGNvbnN0IHBwOjpTb3VyY2VMb2Nh
dGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0
ZDo6c3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcg
a1NUREdMKCJTVERHTCIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrT3B0aW1pemUo
Im9wdGltaXplIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEZWJ1ZygiZGVidWci
KTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga09uKCJvbiIpOworICAgIHN0YXRpYyBj
b25zdCBzdGQ6OnN0cmluZyBrT2ZmKCJvZmYiKTsKKworICAgIGJvb2wgaW52YWxpZFZhbHVlID0g
ZmFsc2U7CisgICAgaWYgKG5hbWUgPT0ga1NUREdMKQorICAgIHsKKyAgICAgICAgLy8gVGhlIFNU
REdMIHByYWdtYSBpcyB1c2VkIHRvIHJlc2VydmUgcHJhZ21hcyBmb3IgdXNlIGJ5IGZ1dHVyZQor
ICAgICAgICAvLyByZXZpc2lvbnMgb2YgR0xTTC4gSWdub3JlIGl0LgorICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGVsc2UgaWYgKG5hbWUgPT0ga09wdGltaXplKQorICAgIHsKKyAgICAgICAg
aWYgKHZhbHVlID09IGtPbikgbVByYWdtYS5vcHRpbWl6ZSA9IHRydWU7CisgICAgICAgIGVsc2Ug
aWYgKHZhbHVlID09IGtPZmYpIG1QcmFnbWEub3B0aW1pemUgPSBmYWxzZTsKKyAgICAgICAgZWxz
ZSBpbnZhbGlkVmFsdWUgPSB0cnVlOworICAgIH0KKyAgICBlbHNlIGlmIChuYW1lID09IGtEZWJ1
ZykKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSA9PSBrT24pIG1QcmFnbWEuZGVidWcgPSB0cnVl
OworICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBrT2ZmKSBtUHJhZ21hLmRlYnVnID0gZmFsc2U7
CisgICAgICAgIGVsc2UgaW52YWxpZFZhbHVlID0gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgbURpYWdub3N0aWNzLnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OlBQX1VOUkVD
T0dOSVpFRF9QUkFHTUEsIGxvYywgbmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoaW52YWxpZFZhbHVlKQorICAgICAgbURpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlh
Z25vc3RpY3M6OlBQX0VSUk9SLCBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJp
bnZhbGlkIHByYWdtYSB2YWx1ZSIsIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiJ29uJyBvciAnb2ZmJyBleHBlY3RlZCIpOworfQorCit2b2lkIFREaXJlY3RpdmVIYW5kbGVy
OjpoYW5kbGVFeHRlbnNpb24oY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJp
bmcmIGJlaGF2aW9yKQoreworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRXh0QWxsKCJh
bGwiKTsKKworICAgIFRCZWhhdmlvciBiZWhhdmlvclZhbCA9IGdldEJlaGF2aW9yKGJlaGF2aW9y
KTsKKyAgICBpZiAoYmVoYXZpb3JWYWwgPT0gRUJoVW5kZWZpbmVkKQorICAgIHsKKyAgICAgICAg
bURpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OlBQX0VSUk9SLCBsb2MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlaGF2aW9yIiwgbmFtZSwgImludmFsaWQi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChuYW1lID09IGtFeHRBbGwpCisg
ICAgeworICAgICAgICBpZiAoYmVoYXZpb3JWYWwgPT0gRUJoUmVxdWlyZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgbURpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OlBQX0VS
Uk9SLCBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHRlbnNpb24i
LCBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IGhhdmUg
J3JlcXVpcmUnIGJlaGF2aW9yIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYmVoYXZp
b3JWYWwgPT0gRUJoRW5hYmxlKQorICAgICAgICB7CisgICAgICAgICAgICBtRGlhZ25vc3RpY3Mu
d3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6UFBfRVJST1IsIGxvYywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImV4dGVuc2lvbiIsIG5hbWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJjYW5ub3QgaGF2ZSAnZW5hYmxlJyBiZWhhdmlvciIpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChURXh0ZW5z
aW9uQmVoYXZpb3I6Oml0ZXJhdG9yIGl0ZXIgPSBtRXh0ZW5zaW9uQmVoYXZpb3IuYmVnaW4oKTsK
KyAgICAgICAgICAgICAgICAgaXRlciAhPSBtRXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCk7ICsraXRl
cikKKyAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSBiZWhhdmlvclZhbDsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVEV4dGVuc2lvbkJlaGF2aW9yOjppdGVy
YXRvciBpdGVyID0gbUV4dGVuc2lvbkJlaGF2aW9yLmZpbmQobmFtZSk7CisgICAgaWYgKGl0ZXIg
IT0gbUV4dGVuc2lvbkJlaGF2aW9yLmVuZCgpKQorICAgIHsKKyAgICAgICAgaXRlci0+c2Vjb25k
ID0gYmVoYXZpb3JWYWw7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwcDo6RGlhZ25v
c3RpY3M6OlNldmVyaXR5IHNldmVyaXR5ID0gcHA6OkRpYWdub3N0aWNzOjpQUF9FUlJPUjsKKyAg
ICBzd2l0Y2ggKGJlaGF2aW9yVmFsKSB7CisgICAgICBjYXNlIEVCaFJlcXVpcmU6CisgICAgICAg
IHNldmVyaXR5ID0gcHA6OkRpYWdub3N0aWNzOjpQUF9FUlJPUjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEVCaEVuYWJsZToKKyAgICAgIGNhc2UgRUJoV2FybjoKKyAgICAgIGNhc2UgRUJo
RGlzYWJsZToKKyAgICAgICAgc2V2ZXJpdHkgPSBwcDo6RGlhZ25vc3RpY3M6OlBQX1dBUk5JTkc7
CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIG1EaWFnbm9zdGljcy53cml0ZUluZm8oc2V2ZXJp
dHksIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHRlbnNpb24iLCBuYW1lLCAi
aXMgbm90IHN1cHBvcnRlZCIpOworfQorCit2b2lkIFREaXJlY3RpdmVIYW5kbGVyOjpoYW5kbGVW
ZXJzaW9uKGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgdmVyc2lvbikKK3sKKyAgICBzdGF0aWMgY29uc3QgaW50
IGtWZXJzaW9uID0gMTAwOworCisgICAgaWYgKHZlcnNpb24gIT0ga1ZlcnNpb24pCisgICAgewor
ICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07CisgICAgICAgIHN0cmVhbSA8PCB2ZXJz
aW9uOworICAgICAgICBzdGQ6OnN0cmluZyBzdHIgPSBzdHJlYW0uc3RyKCk7CisgICAgICAgIG1E
aWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpQUF9FUlJPUiwgbG9jLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2ZXJzaW9uIG51bWJlciIsIHN0ciwgIm5vdCBz
dXBwb3J0ZWQiKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZWI1ZjA1NTQ5NDk4ODkxNWMxNGMyYzZiZmFjYWIxYWE0Y2RjZTMxZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0RpcmVjdGl2ZUhhbmRsZXIuaApAQCAtMCwwICsxLDQ2IEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworI2lmbmRlZiBDT01QSUxFUl9ESVJFQ1RJVkVfSEFORExFUl9IXworI2RlZmluZSBDT01QSUxF
Ul9ESVJFQ1RJVkVfSEFORExFUl9IXworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9F
eHRlbnNpb25CZWhhdmlvci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUHJhZ21h
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNl
LmgiCisKK2NsYXNzIFREaWFnbm9zdGljczsKKworY2xhc3MgVERpcmVjdGl2ZUhhbmRsZXIgOiBw
dWJsaWMgcHA6OkRpcmVjdGl2ZUhhbmRsZXIKK3sKKyAgcHVibGljOgorICAgIFREaXJlY3RpdmVI
YW5kbGVyKFRFeHRlbnNpb25CZWhhdmlvciYgZXh0QmVoYXZpb3IsCisgICAgICAgICAgICAgICAg
ICAgICAgVERpYWdub3N0aWNzJiBkaWFnbm9zdGljcyk7CisgICAgdmlydHVhbCB+VERpcmVjdGl2
ZUhhbmRsZXIoKTsKKworICAgIGNvbnN0IFRQcmFnbWEmIHByYWdtYSgpIGNvbnN0IHsgcmV0dXJu
IG1QcmFnbWE7IH0KKyAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dGVuc2lvbkJlaGF2
aW9yKCkgY29uc3QgeyByZXR1cm4gbUV4dGVuc2lvbkJlaGF2aW9yOyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgaGFuZGxlRXJyb3IoY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtc2cpOworCisgICAgdmly
dHVhbCB2b2lkIGhhbmRsZVByYWdtYShjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFeHRlbnNpb24oY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9u
JiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmlu
ZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiBiZWhhdmlvcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlVmVyc2lvbihjb25zdCBw
cDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgdmVyc2lvbik7CisKKyAgcHJpdmF0ZToKKyAgICBUUHJhZ21hIG1QcmFnbWE7CisgICAgVEV4
dGVuc2lvbkJlaGF2aW9yJiBtRXh0ZW5zaW9uQmVoYXZpb3I7CisgICAgVERpYWdub3N0aWNzJiBt
RGlhZ25vc3RpY3M7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX0RJUkVDVElWRV9IQU5ETEVS
X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9FeHRlbnNpb25CZWhhdmlvci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvRXh0ZW5zaW9uQmVoYXZpb3IuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YzE1
OTVmYjIxMjFhOGVhNzZiYmEyMjU3YzZmMzYzNTZlZjAwZTlkCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRXh0ZW5zaW9u
QmVoYXZpb3IuaApAQCAtMCwwICsxLDM3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVm
IF9FWFRFTlNJT05fQkVIQVZJT1JfSU5DTFVERURfCisjZGVmaW5lIF9FWFRFTlNJT05fQkVIQVZJ
T1JfSU5DTFVERURfCisKKyNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8c3RyaW5nPgorCit0eXBl
ZGVmIGVudW0KK3sKKyAgICBFQmhSZXF1aXJlLAorICAgIEVCaEVuYWJsZSwKKyAgICBFQmhXYXJu
LAorICAgIEVCaERpc2FibGUsCisgICAgRUJoVW5kZWZpbmVkCit9IFRCZWhhdmlvcjsKKworaW5s
aW5lIGNvbnN0IGNoYXIqIGdldEJlaGF2aW9yU3RyaW5nKFRCZWhhdmlvciBiKQoreworICAgIHN3
aXRjaChiKQorICAgIHsKKyAgICAgIGNhc2UgRUJoUmVxdWlyZTogcmV0dXJuICJyZXF1aXJlIjsK
KyAgICAgIGNhc2UgRUJoRW5hYmxlOiByZXR1cm4gImVuYWJsZSI7CisgICAgICBjYXNlIEVCaFdh
cm46IHJldHVybiAid2FybiI7CisgICAgICBjYXNlIEVCaERpc2FibGU6IHJldHVybiAiZGlzYWJs
ZSI7CisgICAgICBkZWZhdWx0OiByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKKy8vIE1hcHBpbmcg
YmV0d2VlbiBleHRlbnNpb24gbmFtZSBhbmQgYmVoYXZpb3IuCit0eXBlZGVmIHN0ZDo6bWFwPHN0
ZDo6c3RyaW5nLCBUQmVoYXZpb3I+IFRFeHRlbnNpb25CZWhhdmlvcjsKKworI2VuZGlmIC8vIF9F
WFRFTlNJT05fVEFCTEVfSU5DTFVERURfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Gb3JMb29wVW5yb2xsLmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjg5ZTZmMWE2MmIxYjk1OTI3NzA2MDgwMTU1YjQxZjg2N2JkNjNjNDYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9Gb3JMb29wVW5yb2xsLmNwcApAQCAtMCwwICsxLDIxNSBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRm9yTG9vcFVucm9sbC5oIgor
CituYW1lc3BhY2UgeworCitjbGFzcyBJbnRlZ2VyRm9yTG9vcFVucm9sbE1hcmtlciA6IHB1Ymxp
YyBUSW50ZXJtVHJhdmVyc2VyIHsKK3B1YmxpYzoKKworICAgIHZpcnR1YWwgYm9vbCB2aXNpdExv
b3AoVmlzaXQsIFRJbnRlcm1Mb29wKiBub2RlKQorICAgIHsKKyAgICAgICAgLy8gVGhpcyBpcyBj
YWxsZWQgYWZ0ZXIgVmFsaWRhdGVMaW1pdGF0aW9ucyBwYXNzLCBzbyBhbGwgdGhlIEFTU0VSVAor
ICAgICAgICAvLyBzaG91bGQgbmV2ZXIgZmFpbC4KKyAgICAgICAgLy8gU2VlIFZhbGlkYXRlTGlt
aXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcEluaXQoKS4KKyAgICAgICAgQVNTRVJUKG5vZGUpOwor
ICAgICAgICBBU1NFUlQobm9kZS0+Z2V0VHlwZSgpID09IEVMb29wRm9yKTsKKyAgICAgICAgQVNT
RVJUKG5vZGUtPmdldEluaXQoKSk7CisgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGRlY2wgPSBu
b2RlLT5nZXRJbml0KCktPmdldEFzQWdncmVnYXRlKCk7CisgICAgICAgIEFTU0VSVChkZWNsICYm
IGRlY2wtPmdldE9wKCkgPT0gRU9wRGVjbGFyYXRpb24pOworICAgICAgICBUSW50ZXJtU2VxdWVu
Y2UmIGRlY2xTZXEgPSBkZWNsLT5nZXRTZXF1ZW5jZSgpOworICAgICAgICBBU1NFUlQoZGVjbFNl
cS5zaXplKCkgPT0gMSk7CisgICAgICAgIFRJbnRlcm1CaW5hcnkqIGRlY2xJbml0ID0gZGVjbFNl
cVswXS0+Z2V0QXNCaW5hcnlOb2RlKCk7CisgICAgICAgIEFTU0VSVChkZWNsSW5pdCAmJiBkZWNs
SW5pdC0+Z2V0T3AoKSA9PSBFT3BJbml0aWFsaXplKTsKKyAgICAgICAgQVNTRVJUKGRlY2xJbml0
LT5nZXRMZWZ0KCkpOworICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBkZWNsSW5pdC0+
Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICAgICAgQVNTRVJUKHN5bWJvbCk7Cisg
ICAgICAgIFRCYXNpY1R5cGUgdHlwZSA9IHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCk7CisgICAgICAg
IEFTU0VSVCh0eXBlID09IEVidEludCB8fCB0eXBlID09IEVidEZsb2F0KTsKKyAgICAgICAgaWYg
KHR5cGUgPT0gRWJ0SW50KQorICAgICAgICAgICAgbm9kZS0+c2V0VW5yb2xsRmxhZyh0cnVlKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCit9OworCit9ICAvLyBhbm9ueW1vdXMgbmFt
ZXBzYWNlCisKK3ZvaWQgRm9yTG9vcFVucm9sbDo6RmlsbExvb3BJbmRleEluZm8oVEludGVybUxv
b3AqIG5vZGUsIFRMb29wSW5kZXhJbmZvJiBpbmZvKQoreworICAgIEFTU0VSVChub2RlLT5nZXRU
eXBlKCkgPT0gRUxvb3BGb3IpOworICAgIEFTU0VSVChub2RlLT5nZXRVbnJvbGxGbGFnKCkpOwor
CisgICAgVEludGVybU5vZGUqIGluaXQgPSBub2RlLT5nZXRJbml0KCk7CisgICAgQVNTRVJUKGlu
aXQgIT0gTlVMTCk7CisgICAgVEludGVybUFnZ3JlZ2F0ZSogZGVjbCA9IGluaXQtPmdldEFzQWdn
cmVnYXRlKCk7CisgICAgQVNTRVJUKChkZWNsICE9IE5VTEwpICYmIChkZWNsLT5nZXRPcCgpID09
IEVPcERlY2xhcmF0aW9uKSk7CisgICAgVEludGVybVNlcXVlbmNlJiBkZWNsU2VxID0gZGVjbC0+
Z2V0U2VxdWVuY2UoKTsKKyAgICBBU1NFUlQoZGVjbFNlcS5zaXplKCkgPT0gMSk7CisgICAgVElu
dGVybUJpbmFyeSogZGVjbEluaXQgPSBkZWNsU2VxWzBdLT5nZXRBc0JpbmFyeU5vZGUoKTsKKyAg
ICBBU1NFUlQoKGRlY2xJbml0ICE9IE5VTEwpICYmIChkZWNsSW5pdC0+Z2V0T3AoKSA9PSBFT3BJ
bml0aWFsaXplKSk7CisgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gZGVjbEluaXQtPmdldExl
ZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgQVNTRVJUKHN5bWJvbCAhPSBOVUxMKTsKKyAg
ICBBU1NFUlQoc3ltYm9sLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQpOworCisgICAgaW5mby5p
ZCA9IHN5bWJvbC0+Z2V0SWQoKTsKKworICAgIEFTU0VSVChkZWNsSW5pdC0+Z2V0UmlnaHQoKSAh
PSBOVUxMKTsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogaW5pdE5vZGUgPSBkZWNsSW5pdC0+
Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisgICAgQVNTRVJUKGluaXROb2RlICE9
IE5VTEwpOworCisgICAgaW5mby5pbml0VmFsdWUgPSBldmFsdWF0ZUludENvbnN0YW50KGluaXRO
b2RlKTsKKyAgICBpbmZvLmN1cnJlbnRWYWx1ZSA9IGluZm8uaW5pdFZhbHVlOworCisgICAgVElu
dGVybU5vZGUqIGNvbmQgPSBub2RlLT5nZXRDb25kaXRpb24oKTsKKyAgICBBU1NFUlQoY29uZCAh
PSBOVUxMKTsKKyAgICBUSW50ZXJtQmluYXJ5KiBiaW5PcCA9IGNvbmQtPmdldEFzQmluYXJ5Tm9k
ZSgpOworICAgIEFTU0VSVChiaW5PcCAhPSBOVUxMKTsKKyAgICBBU1NFUlQoYmluT3AtPmdldFJp
Z2h0KCkgIT0gTlVMTCk7CisgICAgQVNTRVJUKGJpbk9wLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0
YW50VW5pb24oKSAhPSBOVUxMKTsKKworICAgIGluZm8uaW5jcmVtZW50VmFsdWUgPSBnZXRMb29w
SW5jcmVtZW50KG5vZGUpOworICAgIGluZm8uc3RvcFZhbHVlID0gZXZhbHVhdGVJbnRDb25zdGFu
dCgKKyAgICAgICAgYmluT3AtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpKTsKKyAg
ICBpbmZvLm9wID0gYmluT3AtPmdldE9wKCk7Cit9CisKK3ZvaWQgRm9yTG9vcFVucm9sbDo6U3Rl
cCgpCit7CisgICAgQVNTRVJUKG1Mb29wSW5kZXhTdGFjay5zaXplKCkgPiAwKTsKKyAgICBUTG9v
cEluZGV4SW5mbyYgaW5mbyA9IG1Mb29wSW5kZXhTdGFja1ttTG9vcEluZGV4U3RhY2suc2l6ZSgp
IC0gMV07CisgICAgaW5mby5jdXJyZW50VmFsdWUgKz0gaW5mby5pbmNyZW1lbnRWYWx1ZTsKK30K
KworYm9vbCBGb3JMb29wVW5yb2xsOjpTYXRpc2ZpZXNMb29wQ29uZGl0aW9uKCkKK3sKKyAgICBB
U1NFUlQobUxvb3BJbmRleFN0YWNrLnNpemUoKSA+IDApOworICAgIFRMb29wSW5kZXhJbmZvJiBp
bmZvID0gbUxvb3BJbmRleFN0YWNrW21Mb29wSW5kZXhTdGFjay5zaXplKCkgLSAxXTsKKyAgICAv
LyBSZWxhdGlvbmFsIG9wZXJhdG9yIGlzIG9uZSBvZjogPiA+PSA8IDw9ID09IG9yICE9LgorICAg
IHN3aXRjaCAoaW5mby5vcCkgeworICAgICAgY2FzZSBFT3BFcXVhbDoKKyAgICAgICAgcmV0dXJu
IChpbmZvLmN1cnJlbnRWYWx1ZSA9PSBpbmZvLnN0b3BWYWx1ZSk7CisgICAgICBjYXNlIEVPcE5v
dEVxdWFsOgorICAgICAgICByZXR1cm4gKGluZm8uY3VycmVudFZhbHVlICE9IGluZm8uc3RvcFZh
bHVlKTsKKyAgICAgIGNhc2UgRU9wTGVzc1RoYW46CisgICAgICAgIHJldHVybiAoaW5mby5jdXJy
ZW50VmFsdWUgPCBpbmZvLnN0b3BWYWx1ZSk7CisgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgor
ICAgICAgICByZXR1cm4gKGluZm8uY3VycmVudFZhbHVlID4gaW5mby5zdG9wVmFsdWUpOworICAg
ICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgorICAgICAgICByZXR1cm4gKGluZm8uY3VycmVudFZh
bHVlIDw9IGluZm8uc3RvcFZhbHVlKTsKKyAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoK
KyAgICAgICAgcmV0dXJuIChpbmZvLmN1cnJlbnRWYWx1ZSA+PSBpbmZvLnN0b3BWYWx1ZSk7Cisg
ICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgRm9yTG9vcFVucm9sbDo6TmVlZHNUb1JlcGxhY2VTeW1ib2xXaXRo
VmFsdWUoVEludGVybVN5bWJvbCogc3ltYm9sKQoreworICAgIGZvciAoVFZlY3RvcjxUTG9vcElu
ZGV4SW5mbz46Oml0ZXJhdG9yIGkgPSBtTG9vcEluZGV4U3RhY2suYmVnaW4oKTsKKyAgICAgICAg
IGkgIT0gbUxvb3BJbmRleFN0YWNrLmVuZCgpOworICAgICAgICAgKytpKSB7CisgICAgICAgIGlm
IChpLT5pZCA9PSBzeW1ib2wtPmdldElkKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQgRm9yTG9vcFVucm9sbDo6R2V0TG9vcElu
ZGV4VmFsdWUoVEludGVybVN5bWJvbCogc3ltYm9sKQoreworICAgIGZvciAoVFZlY3RvcjxUTG9v
cEluZGV4SW5mbz46Oml0ZXJhdG9yIGkgPSBtTG9vcEluZGV4U3RhY2suYmVnaW4oKTsKKyAgICAg
ICAgIGkgIT0gbUxvb3BJbmRleFN0YWNrLmVuZCgpOworICAgICAgICAgKytpKSB7CisgICAgICAg
IGlmIChpLT5pZCA9PSBzeW1ib2wtPmdldElkKCkpCisgICAgICAgICAgICByZXR1cm4gaS0+Y3Vy
cmVudFZhbHVlOworICAgIH0KKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBGb3JMb29wVW5yb2xsOjpQdXNoKFRMb29wSW5kZXhJbmZvJiBpbmZvKQorewor
ICAgIG1Mb29wSW5kZXhTdGFjay5wdXNoX2JhY2soaW5mbyk7Cit9CisKK3ZvaWQgRm9yTG9vcFVu
cm9sbDo6UG9wKCkKK3sKKyAgICBtTG9vcEluZGV4U3RhY2sucG9wX2JhY2soKTsKK30KKworLy8g
c3RhdGljCit2b2lkIEZvckxvb3BVbnJvbGw6Ok1hcmtGb3JMb29wc1dpdGhJbnRlZ2VySW5kaWNl
c0ZvclVucm9sbGluZygKKyAgICBUSW50ZXJtTm9kZSogcm9vdCkKK3sKKyAgICBBU1NFUlQocm9v
dCk7CisKKyAgICBJbnRlZ2VyRm9yTG9vcFVucm9sbE1hcmtlciBtYXJrZXI7CisgICAgcm9vdC0+
dHJhdmVyc2UoJm1hcmtlcik7Cit9CisKK2ludCBGb3JMb29wVW5yb2xsOjpnZXRMb29wSW5jcmVt
ZW50KFRJbnRlcm1Mb29wKiBub2RlKQoreworICAgIFRJbnRlcm1Ob2RlKiBleHByID0gbm9kZS0+
Z2V0RXhwcmVzc2lvbigpOworICAgIEFTU0VSVChleHByICE9IE5VTEwpOworICAgIC8vIGZvciBl
eHByZXNzaW9uIGhhcyBvbmUgb2YgdGhlIGZvbGxvd2luZyBmb3JtczoKKyAgICAvLyAgICAgbG9v
cF9pbmRleCsrCisgICAgLy8gICAgIGxvb3BfaW5kZXgtLQorICAgIC8vICAgICBsb29wX2luZGV4
ICs9IGNvbnN0YW50X2V4cHJlc3Npb24KKyAgICAvLyAgICAgbG9vcF9pbmRleCAtPSBjb25zdGFu
dF9leHByZXNzaW9uCisgICAgLy8gICAgICsrbG9vcF9pbmRleAorICAgIC8vICAgICAtLWxvb3Bf
aW5kZXgKKyAgICAvLyBUaGUgbGFzdCB0d28gZm9ybXMgYXJlIG5vdCBzcGVjaWZpZWQgaW4gdGhl
IHNwZWMsIGJ1dCBJIGFtIGFzc3VtaW5nCisgICAgLy8gaXRzIGFuIG92ZXJzaWdodC4KKyAgICBU
SW50ZXJtVW5hcnkqIHVuT3AgPSBleHByLT5nZXRBc1VuYXJ5Tm9kZSgpOworICAgIFRJbnRlcm1C
aW5hcnkqIGJpbk9wID0gdW5PcCA/IE5VTEwgOiBleHByLT5nZXRBc0JpbmFyeU5vZGUoKTsKKwor
ICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7CisgICAgVEludGVybUNvbnN0YW50VW5pb24qIGlu
Y3JlbWVudE5vZGUgPSBOVUxMOworICAgIGlmICh1bk9wICE9IE5VTEwpIHsKKyAgICAgICAgb3Ag
PSB1bk9wLT5nZXRPcCgpOworICAgIH0gZWxzZSBpZiAoYmluT3AgIT0gTlVMTCkgeworICAgICAg
ICBvcCA9IGJpbk9wLT5nZXRPcCgpOworICAgICAgICBBU1NFUlQoYmluT3AtPmdldFJpZ2h0KCkg
IT0gTlVMTCk7CisgICAgICAgIGluY3JlbWVudE5vZGUgPSBiaW5PcC0+Z2V0UmlnaHQoKS0+Z2V0
QXNDb25zdGFudFVuaW9uKCk7CisgICAgICAgIEFTU0VSVChpbmNyZW1lbnROb2RlICE9IE5VTEwp
OworICAgIH0KKworICAgIGludCBpbmNyZW1lbnQgPSAwOworICAgIC8vIFRoZSBvcGVyYXRvciBp
cyBvbmUgb2Y6ICsrIC0tICs9IC09LgorICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBF
T3BQb3N0SW5jcmVtZW50OgorICAgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDoKKyAgICAgICAg
ICAgIEFTU0VSVCgodW5PcCAhPSBOVUxMKSAmJiAoYmluT3AgPT0gTlVMTCkpOworICAgICAgICAg
ICAgaW5jcmVtZW50ID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFBv
c3REZWNyZW1lbnQ6CisgICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OgorICAgICAgICAgICAg
QVNTRVJUKCh1bk9wICE9IE5VTEwpICYmIChiaW5PcCA9PSBOVUxMKSk7CisgICAgICAgICAgICBp
bmNyZW1lbnQgPSAtMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEFkZEFz
c2lnbjoKKyAgICAgICAgICAgIEFTU0VSVCgodW5PcCA9PSBOVUxMKSAmJiAoYmluT3AgIT0gTlVM
TCkpOworICAgICAgICAgICAgaW5jcmVtZW50ID0gZXZhbHVhdGVJbnRDb25zdGFudChpbmNyZW1l
bnROb2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjoK
KyAgICAgICAgICAgIEFTU0VSVCgodW5PcCA9PSBOVUxMKSAmJiAoYmluT3AgIT0gTlVMTCkpOwor
ICAgICAgICAgICAgaW5jcmVtZW50ID0gLSBldmFsdWF0ZUludENvbnN0YW50KGluY3JlbWVudE5v
ZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBB
U1NFUlQoZmFsc2UpOworICAgIH0KKworICAgIHJldHVybiBpbmNyZW1lbnQ7Cit9CisKK2ludCBG
b3JMb29wVW5yb2xsOjpldmFsdWF0ZUludENvbnN0YW50KFRJbnRlcm1Db25zdGFudFVuaW9uKiBu
b2RlKQoreworICAgIEFTU0VSVCgobm9kZSAhPSBOVUxMKSAmJiAobm9kZS0+Z2V0VW5pb25BcnJh
eVBvaW50ZXIoKSAhPSBOVUxMKSk7CisgICAgcmV0dXJuIG5vZGUtPmdldElDb25zdCgwKTsKK30K
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvRm9yTG9vcFVucm9sbC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvRm9yTG9vcFVucm9sbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFmZDcwZDFmZDI1Yzk5
NTQ2ODBjZDRkYWEwMjg1YzAwOGRlY2IwNmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Gb3JMb29wVW5yb2xsLmgKQEAg
LTAsMCArMSw1MiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfRk9STE9PUFVO
Uk9MTF9IXworI2RlZmluZSBDT01QSUxFUl9GT1JMT09QVU5ST0xMX0hfCisKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgorCitzdHJ1Y3QgVExvb3BJbmRleElu
Zm8geworICAgIGludCBpZDsKKyAgICBpbnQgaW5pdFZhbHVlOworICAgIGludCBzdG9wVmFsdWU7
CisgICAgaW50IGluY3JlbWVudFZhbHVlOworICAgIFRPcGVyYXRvciBvcDsKKyAgICBpbnQgY3Vy
cmVudFZhbHVlOworfTsKKworY2xhc3MgRm9yTG9vcFVucm9sbCB7CitwdWJsaWM6CisgICAgRm9y
TG9vcFVucm9sbCgpIHsgfQorCisgICAgdm9pZCBGaWxsTG9vcEluZGV4SW5mbyhUSW50ZXJtTG9v
cCogbm9kZSwgVExvb3BJbmRleEluZm8mIGluZm8pOworCisgICAgLy8gVXBkYXRlIHRoZSBpbmZv
LmN1cnJlbnRWYWx1ZSBmb3IgdGhlIG5leHQgbG9vcCBpdGVyYXRpb24uCisgICAgdm9pZCBTdGVw
KCk7CisKKyAgICAvLyBSZXR1cm4gZmFsc2UgaWYgbG9vcCBjb25kaXRpb24gaXMgbm8gbG9uZ2Vy
IHNhdGlzZmllZC4KKyAgICBib29sIFNhdGlzZmllc0xvb3BDb25kaXRpb24oKTsKKworICAgIC8v
IENoZWNrIGlmIHRoZSBzeW1ib2wgaXMgdGhlIGluZGV4IG9mIGEgbG9vcCB0aGF0J3MgdW5yb2xs
ZWQuCisgICAgYm9vbCBOZWVkc1RvUmVwbGFjZVN5bWJvbFdpdGhWYWx1ZShUSW50ZXJtU3ltYm9s
KiBzeW1ib2wpOworCisgICAgLy8gUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIGEgZ2l2ZW4g
bG9vcCBpbmRleCBzeW1ib2wuCisgICAgaW50IEdldExvb3BJbmRleFZhbHVlKFRJbnRlcm1TeW1i
b2wqIHN5bWJvbCk7CisKKyAgICB2b2lkIFB1c2goVExvb3BJbmRleEluZm8mIGluZm8pOworICAg
IHZvaWQgUG9wKCk7CisKKyAgICBzdGF0aWMgdm9pZCBNYXJrRm9yTG9vcHNXaXRoSW50ZWdlcklu
ZGljZXNGb3JVbnJvbGxpbmcoVEludGVybU5vZGUqIHJvb3QpOworCitwcml2YXRlOgorICAgIGlu
dCBnZXRMb29wSW5jcmVtZW50KFRJbnRlcm1Mb29wKiBub2RlKTsKKworICAgIGludCBldmFsdWF0
ZUludENvbnN0YW50KFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKTsKKworICAgIFRWZWN0b3I8
VExvb3BJbmRleEluZm8+IG1Mb29wSW5kZXhTdGFjazsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSGFzaE5h
bWVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9I
YXNoTmFtZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NTEyNjViNzU5MzU3N2VjYThlYjhiNjM5MWY4ZWIwNjU4
NWMxN2E4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvSGFzaE5hbWVzLmgKQEAgLTAsMCArMSwxOSBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9IQVNIX05BTUVTX0hfCisjZGVmaW5lIENPTVBJ
TEVSX0hBU0hfTkFNRVNfSF8KKworI2luY2x1ZGUgPG1hcD4KKworI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5n
LmgiCisKKyNkZWZpbmUgSEFTSEVEX05BTUVfUFJFRklYICJ3ZWJnbF8iCisKK3R5cGVkZWYgc3Rk
OjptYXA8VFBlcnNpc3RTdHJpbmcsIFRQZXJzaXN0U3RyaW5nPiBOYW1lTWFwOworCisjZW5kaWYg
IC8vIENPTVBJTEVSX0hBU0hfTkFNRVNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luZm9TaW5rLmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luZm9TaW5rLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5jZDU5NjU4ZmY3NmM5NTc3OGY1MGQ0MTllOWE3NDNlNjMyMmM5MmE1Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
SW5mb1NpbmsuY3BwCkBAIC0wLDAgKzEsNTQgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL0luZm9TaW5rLmgiCisKK3ZvaWQgVEluZm9TaW5rQmFz
ZTo6cHJlZml4KFRQcmVmaXhUeXBlIHApIHsKKyAgICBzd2l0Y2gocCkgeworICAgICAgICBjYXNl
IEVQcmVmaXhOb25lOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVByZWZpeFdh
cm5pbmc6CisgICAgICAgICAgICBzaW5rLmFwcGVuZCgiV0FSTklORzogIik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBFUHJlZml4RXJyb3I6CisgICAgICAgICAgICBzaW5rLmFw
cGVuZCgiRVJST1I6ICIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVByZWZp
eEludGVybmFsRXJyb3I6CisgICAgICAgICAgICBzaW5rLmFwcGVuZCgiSU5URVJOQUwgRVJST1I6
ICIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVByZWZpeFVuaW1wbGVtZW50
ZWQ6CisgICAgICAgICAgICBzaW5rLmFwcGVuZCgiVU5JTVBMRU1FTlRFRDogIik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFUHJlZml4Tm90ZToKKyAgICAgICAgICAgIHNpbmsu
YXBwZW5kKCJOT1RFOiAiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgc2luay5hcHBlbmQoIlVOS09XTiBFUlJPUjogIik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKK3ZvaWQgVEluZm9TaW5rQmFzZTo6bG9jYXRpb24oaW50IGZpbGUs
IGludCBsaW5lKSB7CisgICAgVFBlcnNpc3RTdHJpbmdTdHJlYW0gc3RyZWFtOworICAgIGlmIChs
aW5lKQorICAgICAgICBzdHJlYW0gPDwgZmlsZSA8PCAiOiIgPDwgbGluZTsKKyAgICBlbHNlCisg
ICAgICAgIHN0cmVhbSA8PCBmaWxlIDw8ICI6PyAiOworICAgIHN0cmVhbSA8PCAiOiAiOworCisg
ICAgc2luay5hcHBlbmQoc3RyZWFtLnN0cigpKTsKK30KKwordm9pZCBUSW5mb1NpbmtCYXNlOjps
b2NhdGlvbihjb25zdCBUU291cmNlTG9jJiBsb2MpIHsKKyAgICBsb2NhdGlvbihsb2MuZmlyc3Rf
ZmlsZSwgbG9jLmZpcnN0X2xpbmUpOworfQorCit2b2lkIFRJbmZvU2lua0Jhc2U6Om1lc3NhZ2Uo
VFByZWZpeFR5cGUgcCwgY29uc3QgVFNvdXJjZUxvYyYgbG9jLCBjb25zdCBjaGFyKiBtKSB7Cisg
ICAgcHJlZml4KHApOworICAgIGxvY2F0aW9uKGxvYyk7CisgICAgc2luay5hcHBlbmQobSk7Cisg
ICAgc2luay5hcHBlbmQoIlxuIik7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
OThhOGI0NTRiM2NmYTlkNGVkMmQwMGI4NjE2N2U4YzEzMmQxZmZlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1Np
bmsuaApAQCAtMCwwICsxLDExNiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfSU5G
T1NJTktfSU5DTFVERURfCisjZGVmaW5lIF9JTkZPU0lOS19JTkNMVURFRF8KKworI2luY2x1ZGUg
PG1hdGguaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL0NvbW1vbi5oIgorCisvLyBSZXR1cm5zIHRoZSBmcmFjdGlvbmFsIHBhcnQgb2YgdGhlIGdp
dmVuIGZsb2F0aW5nLXBvaW50IG51bWJlci4KK2lubGluZSBmbG9hdCBmcmFjdGlvbmFsUGFydChm
bG9hdCBmKSB7CisgIGZsb2F0IGludFBhcnQgPSAwLjBmOworICByZXR1cm4gbW9kZmYoZiwgJmlu
dFBhcnQpOworfQorCisvLworLy8gVFByZWZpeFR5cGUgaXMgdXNlZCB0byBjZW50cmFsaXplIGhv
dyBpbmZvIGxvZyBtZXNzYWdlcyBzdGFydC4KKy8vIFNlZSBiZWxvdy4KKy8vCitlbnVtIFRQcmVm
aXhUeXBlIHsKKyAgICBFUHJlZml4Tm9uZSwKKyAgICBFUHJlZml4V2FybmluZywKKyAgICBFUHJl
Zml4RXJyb3IsCisgICAgRVByZWZpeEludGVybmFsRXJyb3IsCisgICAgRVByZWZpeFVuaW1wbGVt
ZW50ZWQsCisgICAgRVByZWZpeE5vdGUKK307CisKKy8vCisvLyBFbmNhcHN1bGF0ZSBpbmZvIGxv
Z3MgZm9yIGFsbCBvYmplY3RzIHRoYXQgaGF2ZSB0aGVtLgorLy8KKy8vIFRoZSBtZXRob2RzIGFy
ZSBhIGdlbmVyYWwgc2V0IG9mIHRvb2xzIGZvciBnZXR0aW5nIGEgdmFyaWV0eSBvZgorLy8gbWVz
c2FnZXMgYW5kIHR5cGVzIGluc2VydGVkIGludG8gdGhlIGxvZy4KKy8vCitjbGFzcyBUSW5mb1Np
bmtCYXNlIHsKK3B1YmxpYzoKKyAgICBUSW5mb1NpbmtCYXNlKCkge30KKworICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPgorICAgIFRJbmZvU2lua0Jhc2UmIG9wZXJhdG9yPDwoY29uc3QgVCYgdCkg
eworICAgICAgICBUUGVyc2lzdFN0cmluZ1N0cmVhbSBzdHJlYW07CisgICAgICAgIHN0cmVhbSA8
PCB0OworICAgICAgICBzaW5rLmFwcGVuZChzdHJlYW0uc3RyKCkpOworICAgICAgICByZXR1cm4g
KnRoaXM7CisgICAgfQorICAgIC8vIE92ZXJyaWRlIDw8IG9wZXJhdG9yIGZvciBzcGVjaWZpYyB0
eXBlcy4gSXQgaXMgZmFzdGVyIHRvIGFwcGVuZCBzdHJpbmdzCisgICAgLy8gYW5kIGNoYXJhY3Rl
cnMgZGlyZWN0bHkgdG8gdGhlIHNpbmsuCisgICAgVEluZm9TaW5rQmFzZSYgb3BlcmF0b3I8PChj
aGFyIGMpIHsKKyAgICAgICAgc2luay5hcHBlbmQoMSwgYyk7CisgICAgICAgIHJldHVybiAqdGhp
czsKKyAgICB9CisgICAgVEluZm9TaW5rQmFzZSYgb3BlcmF0b3I8PChjb25zdCBjaGFyKiBzdHIp
IHsKKyAgICAgICAgc2luay5hcHBlbmQoc3RyKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAg
IH0KKyAgICBUSW5mb1NpbmtCYXNlJiBvcGVyYXRvcjw8KGNvbnN0IFRQZXJzaXN0U3RyaW5nJiBz
dHIpIHsKKyAgICAgICAgc2luay5hcHBlbmQoc3RyKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOwor
ICAgIH0KKyAgICBUSW5mb1NpbmtCYXNlJiBvcGVyYXRvcjw8KGNvbnN0IFRTdHJpbmcmIHN0cikg
eworICAgICAgICBzaW5rLmFwcGVuZChzdHIuY19zdHIoKSk7CisgICAgICAgIHJldHVybiAqdGhp
czsKKyAgICB9CisgICAgLy8gTWFrZSBzdXJlIGZsb2F0cyBhcmUgd3JpdHRlbiB3aXRoIGNvcnJl
Y3QgcHJlY2lzaW9uLgorICAgIFRJbmZvU2lua0Jhc2UmIG9wZXJhdG9yPDwoZmxvYXQgZikgewor
ICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhdCBsZWFzdCBvbmUgZGVjaW1hbCBwb2ludCBpcyB3
cml0dGVuLiBJZiBhIG51bWJlcgorICAgICAgICAvLyBkb2VzIG5vdCBoYXZlIGEgZnJhY3Rpb25h
bCBwYXJ0LCB0aGUgZGVmYXVsdCBwcmVjaXNpb24gZm9ybWF0IGRvZXMKKyAgICAgICAgLy8gbm90
IHdyaXRlIHRoZSBkZWNpbWFsIHBvcnRpb24gd2hpY2ggZ2V0cyBpbnRlcnByZXRlZCBhcyBpbnRl
Z2VyIGJ5CisgICAgICAgIC8vIHRoZSBjb21waWxlci4KKyAgICAgICAgVFBlcnNpc3RTdHJpbmdT
dHJlYW0gc3RyZWFtOworICAgICAgICBpZiAoZnJhY3Rpb25hbFBhcnQoZikgPT0gMC4wZikgewor
ICAgICAgICAgICAgc3RyZWFtLnByZWNpc2lvbigxKTsKKyAgICAgICAgICAgIHN0cmVhbSA8PCBz
dGQ6OnNob3dwb2ludCA8PCBzdGQ6OmZpeGVkIDw8IGY7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBzdHJlYW0udW5zZXRmKHN0ZDo6aW9zOjpmaXhlZCk7CisgICAgICAgICAgICBzdHJl
YW0udW5zZXRmKHN0ZDo6aW9zOjpzY2llbnRpZmljKTsKKyAgICAgICAgICAgIHN0cmVhbS5wcmVj
aXNpb24oOCk7CisgICAgICAgICAgICBzdHJlYW0gPDwgZjsKKyAgICAgICAgfQorICAgICAgICBz
aW5rLmFwcGVuZChzdHJlYW0uc3RyKCkpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQor
ICAgIC8vIFdyaXRlIGJvb2xlYW4gdmFsdWVzIGFzIHRoZWlyIG5hbWVzIGluc3RlYWQgb2YgaW50
ZWdyYWwgdmFsdWUuCisgICAgVEluZm9TaW5rQmFzZSYgb3BlcmF0b3I8PChib29sIGIpIHsKKyAg
ICAgICAgY29uc3QgY2hhciogc3RyID0gYiA/ICJ0cnVlIiA6ICJmYWxzZSI7CisgICAgICAgIHNp
bmsuYXBwZW5kKHN0cik7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICB2b2lk
IGVyYXNlKCkgeyBzaW5rLmNsZWFyKCk7IH0KKyAgICBpbnQgc2l6ZSgpIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PGludD4oc2luay5zaXplKCkpOyB9CisKKyAgICBjb25zdCBUUGVyc2lzdFN0cmluZyYg
c3RyKCkgY29uc3QgeyByZXR1cm4gc2luazsgfQorICAgIGNvbnN0IGNoYXIqIGNfc3RyKCkgY29u
c3QgeyByZXR1cm4gc2luay5jX3N0cigpOyB9CisKKyAgICB2b2lkIHByZWZpeChUUHJlZml4VHlw
ZSBwKTsKKyAgICB2b2lkIGxvY2F0aW9uKGludCBmaWxlLCBpbnQgbGluZSk7CisgICAgdm9pZCBs
b2NhdGlvbihjb25zdCBUU291cmNlTG9jJiBsb2MpOworICAgIHZvaWQgbWVzc2FnZShUUHJlZml4
VHlwZSBwLCBjb25zdCBUU291cmNlTG9jJiBsb2MsIGNvbnN0IGNoYXIqIG0pOworCitwcml2YXRl
OgorICAgIFRQZXJzaXN0U3RyaW5nIHNpbms7Cit9OworCitjbGFzcyBUSW5mb1NpbmsgeworcHVi
bGljOgorICAgIFRJbmZvU2lua0Jhc2UgaW5mbzsKKyAgICBUSW5mb1NpbmtCYXNlIGRlYnVnOwor
ICAgIFRJbmZvU2lua0Jhc2Ugb2JqOworfTsKKworI2VuZGlmIC8vIF9JTkZPU0lOS19JTkNMVURF
RF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0luaXRpYWxpemUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGI3MjhiMjEyOTM3MTY3
MDE5N2RmMWRjOGRhYzI5ODRlZTliMjdjOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemUuY3BwCkBAIC0w
LDAgKzEsNTY0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLworLy8gQ3JlYXRlIHN0cmluZ3Mg
dGhhdCBkZWNsYXJlIGJ1aWx0LWluIGRlZmluaXRpb25zLCBhZGQgYnVpbHQtaW5zIHRoYXQKKy8v
IGNhbm5vdCBiZSBleHByZXNzZWQgaW4gdGhlIGZpbGVzLCBhbmQgZXN0YWJsaXNoIG1hcHBpbmdz
IGJldHdlZW4gCisvLyBidWlsdC1pbiBmdW5jdGlvbnMgYW5kIG9wZXJhdG9ycy4KKy8vCisKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemUuaCIKKworI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisKK3ZvaWQgSW5zZXJ0QnVpbHRJbkZ1
bmN0aW9ucyhTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsIGNvbnN0IFNoQnVp
bHRJblJlc291cmNlcyAmcmVzb3VyY2VzLCBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlKQorewor
ICAgIFRUeXBlICpmbG9hdDEgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZx
R2xvYmFsLCAxKTsKKyAgICBUVHlwZSAqZmxvYXQyID0gbmV3IFRUeXBlKEVidEZsb2F0LCBFYnBV
bmRlZmluZWQsIEV2cUdsb2JhbCwgMik7CisgICAgVFR5cGUgKmZsb2F0MyA9IG5ldyBUVHlwZShF
YnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDMpOworICAgIFRUeXBlICpmbG9hdDQg
PSBuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCA0KTsKKworICAg
IFRUeXBlICppbnQyID0gbmV3IFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWws
IDIpOworICAgIFRUeXBlICppbnQzID0gbmV3IFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBF
dnFHbG9iYWwsIDMpOworICAgIFRUeXBlICppbnQ0ID0gbmV3IFRUeXBlKEVidEludCwgRWJwVW5k
ZWZpbmVkLCBFdnFHbG9iYWwsIDQpOworCisgICAgLy8KKyAgICAvLyBBbmdsZSBhbmQgVHJpZ29u
b21ldHJpYyBGdW5jdGlvbnMuCisgICAgLy8KKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MSwgInJhZGlhbnMiLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQyLCAicmFkaWFucyIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDMsICJyYWRpYW5zIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0NCwgInJhZGlhbnMiLCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDEsICJkZWdyZWVzIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MiwgImRlZ3JlZXMiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZGVncmVlcyIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJkZWdyZWVzIiwgZmxvYXQ0KTsKKworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAic2luIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInNpbiIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzaW4iLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAic2luIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiY29zIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MiwgImNvcyIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDMsICJjb3MiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQ0LCAiY29zIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQxLCAidGFuIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MiwgInRhbiIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDMsICJ0YW4iLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQ0LCAidGFuIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQxLCAiYXNpbiIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDIsICJhc2luIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MywgImFzaW4iLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQ0LCAiYXNpbiIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MSwgImFjb3MiLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQyLCAiYWNvcyIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDMsICJhY29zIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0NCwgImFjb3MiLCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDEsICJhdGFuIiwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQyLCAiYXRhbiIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MywgImF0YW4iLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJhdGFuIiwgZmxvYXQ0LCBmbG9hdDQpOworCisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJhdGFuIiwgZmxvYXQxKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImF0YW4iLCBmbG9hdDIpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiYXRhbiIsIGZsb2F0Myk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJhdGFuIiwgZmxvYXQ0KTsKKworICAg
IC8vCisgICAgLy8gRXhwb25lbnRpYWwgRnVuY3Rpb25zLgorICAgIC8vCisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJwb3ciLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJwb3ciLCBmbG9hdDIsIGZsb2F0Mik7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJwb3ciLCBmbG9hdDMsIGZsb2F0
Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJwb3ciLCBmbG9hdDQs
IGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImV4cCIs
IGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJleHAiLCBm
bG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZXhwIiwgZmxv
YXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImV4cCIsIGZsb2F0
NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImxvZyIsIGZsb2F0
MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJsb2ciLCBmbG9hdDIp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAibG9nIiwgZmxvYXQzKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImxvZyIsIGZsb2F0NCk7CisK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImV4cDIiLCBmbG9hdDEpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZXhwMiIsIGZsb2F0Mik7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJleHAyIiwgZmxvYXQzKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImV4cDIiLCBmbG9hdDQpOworCisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJsb2cyIiwgZmxvYXQxKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImxvZzIiLCBmbG9hdDIpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAibG9nMiIsIGZsb2F0Myk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJsb2cyIiwgZmxvYXQ0KTsKKworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAic3FydCIsIGZsb2F0MSk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJzcXJ0IiwgZmxvYXQyKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInNxcnQiLCBmbG9hdDMpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAic3FydCIsIGZsb2F0NCk7CisKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImludmVyc2VzcXJ0IiwgZmxvYXQxKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImludmVyc2VzcXJ0IiwgZmxv
YXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImludmVyc2VzcXJ0
IiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImludmVy
c2VzcXJ0IiwgZmxvYXQ0KTsKKworICAgIC8vCisgICAgLy8gQ29tbW9uIEZ1bmN0aW9ucy4KKyAg
ICAvLworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiYWJzIiwgZmxvYXQx
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImFicyIsIGZsb2F0Mik7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJhYnMiLCBmbG9hdDMpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiYWJzIiwgZmxvYXQ0KTsKKwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAic2lnbiIsIGZsb2F0MSk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJzaWduIiwgZmxvYXQyKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInNpZ24iLCBmbG9hdDMpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAic2lnbiIsIGZsb2F0NCk7CisKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImZsb29yIiwgZmxvYXQxKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImZsb29yIiwgZmxvYXQyKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImZsb29yIiwgZmxvYXQzKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImZsb29yIiwgZmxvYXQ0KTsKKwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiY2VpbCIsIGZsb2F0MSk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJjZWlsIiwgZmxvYXQyKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImNlaWwiLCBmbG9hdDMpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiY2VpbCIsIGZsb2F0NCk7CisKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImZyYWN0IiwgZmxvYXQxKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImZyYWN0IiwgZmxvYXQyKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImZyYWN0IiwgZmxvYXQzKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImZyYWN0IiwgZmxvYXQ0KTsKKwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibW9kIiwgZmxvYXQxLCBmbG9h
dDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibW9kIiwgZmxvYXQy
LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAibW9kIiwg
ZmxvYXQzLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAi
bW9kIiwgZmxvYXQ0LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQyLCAibW9kIiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQzLCAibW9kIiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQ0LCAibW9kIiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJtaW4iLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJtaW4iLCBmbG9hdDIsIGZsb2F0MSk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtaW4iLCBmbG9hdDMsIGZsb2F0
MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJtaW4iLCBmbG9hdDQs
IGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJtaW4iLCBm
bG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJt
aW4iLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDQsICJtaW4iLCBmbG9hdDQsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MSwgIm1heCIsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MiwgIm1heCIsIGZsb2F0MiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgIm1heCIsIGZsb2F0MywgZmxvYXQxKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1heCIsIGZsb2F0NCwgZmxvYXQxKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgIm1heCIsIGZsb2F0MiwgZmxvYXQy
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgIm1heCIsIGZsb2F0Mywg
ZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1heCIsIGZs
b2F0NCwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAi
Y2xhbXAiLCBmbG9hdDEsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MiwgImNsYW1wIiwgZmxvYXQyLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJjbGFtcCIsIGZsb2F0MywgZmxvYXQxLCBm
bG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiY2xhbXAiLCBm
bG9hdDQsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MiwgImNsYW1wIiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDMsICJjbGFtcCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDMpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiY2xhbXAiLCBmbG9hdDQsIGZs
b2F0NCwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAi
bWl4IiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDIsICJtaXgiLCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQxKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgIm1peCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDEp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibWl4IiwgZmxvYXQ0LCBm
bG9hdDQsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJt
aXgiLCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MywgIm1peCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibWl4IiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7
CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInN0ZXAiLCBmbG9hdDEs
IGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJzdGVwIiwg
ZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAi
c3RlcCIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0NCwgInN0ZXAiLCBmbG9hdDQsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDIsICJzdGVwIiwgZmxvYXQxLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQzLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQzKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInN0ZXAiLCBmbG9hdDEsIGZsb2F0NCk7CisKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInNtb290aHN0ZXAiLCBmbG9hdDEs
IGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0Miwg
InNtb290aHN0ZXAiLCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MywgInNtb290aHN0ZXAiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQz
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInNtb290aHN0ZXAiLCBm
bG9hdDQsIGZsb2F0NCwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MiwgInNtb290aHN0ZXAiLCBmbG9hdDEsIGZsb2F0MSwgZmxvYXQyKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInNtb290aHN0ZXAiLCBmbG9hdDEsIGZsb2F0MSwg
ZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInNtb290aHN0
ZXAiLCBmbG9hdDEsIGZsb2F0MSwgZmxvYXQ0KTsKKworICAgIC8vCisgICAgLy8gR2VvbWV0cmlj
IEZ1bmN0aW9ucy4KKyAgICAvLworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQx
LCAibGVuZ3RoIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MSwgImxlbmd0aCIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDEsICJsZW5ndGgiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQxLCAibGVuZ3RoIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQxLCAiZGlzdGFuY2UiLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDEsICJkaXN0YW5jZSIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRpc3RhbmNlIiwgZmxvYXQzLCBmbG9hdDMp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZGlzdGFuY2UiLCBmbG9h
dDQsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRv
dCIsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MSwgImRvdCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MSwgImRvdCIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MSwgImRvdCIsIGZsb2F0NCwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiY3Jvc3MiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJub3JtYWxpemUiLCBmbG9hdDEpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibm9ybWFsaXplIiwgZmxvYXQyKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgIm5vcm1hbGl6ZSIsIGZsb2F0
Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJub3JtYWxpemUiLCBm
bG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJmYWNlZm9y
d2FyZCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQyLCAiZmFjZWZvcndhcmQiLCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQyKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImZhY2Vmb3J3YXJkIiwgZmxvYXQz
LCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQs
ICJmYWNlZm9yd2FyZCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJyZWZsZWN0IiwgZmxvYXQxLCBmbG9hdDEpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAicmVmbGVjdCIsIGZsb2F0MiwgZmxv
YXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInJlZmxlY3QiLCBm
bG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJy
ZWZsZWN0IiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDEsICJyZWZyYWN0IiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJyZWZyYWN0IiwgZmxvYXQyLCBmbG9hdDIsIGZs
b2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJyZWZyYWN0Iiwg
ZmxvYXQzLCBmbG9hdDMsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDQsICJyZWZyYWN0IiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0MSk7CisKKyAgICBUVHlwZSAq
bWF0MiA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDIsIHRy
dWUpOworICAgIFRUeXBlICptYXQzID0gbmV3IFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQs
IEV2cUdsb2JhbCwgMywgdHJ1ZSk7CisgICAgVFR5cGUgKm1hdDQgPSBuZXcgVFR5cGUoRWJ0Rmxv
YXQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCA0LCB0cnVlKTsKKworICAgIC8vCisgICAgLy8g
TWF0cml4IEZ1bmN0aW9ucy4KKyAgICAvLworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
bWF0MiwgIm1hdHJpeENvbXBNdWx0IiwgbWF0MiwgbWF0Mik7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihtYXQzLCAibWF0cml4Q29tcE11bHQiLCBtYXQzLCBtYXQzKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKG1hdDQsICJtYXRyaXhDb21wTXVsdCIsIG1hdDQsIG1hdDQp
OworCisgICAgVFR5cGUgKmJvb2wxID0gbmV3IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwg
RXZxR2xvYmFsLCAxKTsKKyAgICBUVHlwZSAqYm9vbDIgPSBuZXcgVFR5cGUoRWJ0Qm9vbCwgRWJw
VW5kZWZpbmVkLCBFdnFHbG9iYWwsIDIpOworICAgIFRUeXBlICpib29sMyA9IG5ldyBUVHlwZShF
YnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMyk7CisgICAgVFR5cGUgKmJvb2w0ID0g
bmV3IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCA0KTsKKworICAgIC8v
CisgICAgLy8gVmVjdG9yIHJlbGF0aW9uYWwgZnVuY3Rpb25zLgorICAgIC8vCisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImxlc3NUaGFuIiwgZmxvYXQyLCBmbG9hdDIpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJsZXNzVGhhbiIsIGZsb2F0Mywg
ZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAibGVzc1RoYW4i
LCBmbG9hdDQsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wy
LCAibGVzc1RoYW4iLCBpbnQyLCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGJvb2wzLCAibGVzc1RoYW4iLCBpbnQzLCBpbnQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGJvb2w0LCAibGVzc1RoYW4iLCBpbnQ0LCBpbnQ0KTsKKworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oYm9vbDIsICJsZXNzVGhhbkVxdWFsIiwgZmxvYXQyLCBmbG9hdDIpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJsZXNzVGhhbkVxdWFsIiwgZmxv
YXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJsZXNz
VGhhbkVxdWFsIiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihib29sMiwgImxlc3NUaGFuRXF1YWwiLCBpbnQyLCBpbnQyKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAibGVzc1RoYW5FcXVhbCIsIGludDMsIGludDMpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJsZXNzVGhhbkVxdWFsIiwgaW50NCwg
aW50NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZ3JlYXRlclRo
YW4iLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29s
MywgImdyZWF0ZXJUaGFuIiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oYm9vbDQsICJncmVhdGVyVGhhbiIsIGZsb2F0NCwgZmxvYXQ0KTsKKworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJncmVhdGVyVGhhbiIsIGludDIsIGludDIp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJncmVhdGVyVGhhbiIsIGlu
dDMsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJncmVhdGVy
VGhhbiIsIGludDQsIGludDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29s
MiwgImdyZWF0ZXJUaGFuRXF1YWwiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihib29sMywgImdyZWF0ZXJUaGFuRXF1YWwiLCBmbG9hdDMsIGZsb2F0Myk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImdyZWF0ZXJUaGFuRXF1YWwi
LCBmbG9hdDQsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wy
LCAiZ3JlYXRlclRoYW5FcXVhbCIsIGludDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oYm9vbDMsICJncmVhdGVyVGhhbkVxdWFsIiwgaW50MywgaW50Myk7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImdyZWF0ZXJUaGFuRXF1YWwiLCBpbnQ0LCBp
bnQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJlcXVhbCIsIGZs
b2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZXF1
YWwiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29s
NCwgImVxdWFsIiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihib29sMiwgImVxdWFsIiwgaW50MiwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihib29sMywgImVxdWFsIiwgaW50MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihib29sNCwgImVxdWFsIiwgaW50NCwgaW50NCk7CisKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZXF1YWwiLCBib29sMiwgYm9vbDIpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJlcXVhbCIsIGJvb2wzLCBib29sMyk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImVxdWFsIiwgYm9vbDQsIGJvb2w0KTsK
KworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJub3RFcXVhbCIsIGZsb2F0
MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAibm90RXF1
YWwiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29s
NCwgIm5vdEVxdWFsIiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihib29sMiwgIm5vdEVxdWFsIiwgaW50MiwgaW50Mik7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihib29sMywgIm5vdEVxdWFsIiwgaW50MywgaW50Myk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgIm5vdEVxdWFsIiwgaW50NCwgaW50NCk7CisKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAibm90RXF1YWwiLCBib29sMiwgYm9v
bDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJub3RFcXVhbCIsIGJv
b2wzLCBib29sMyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgIm5vdEVx
dWFsIiwgYm9vbDQsIGJvb2w0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9v
bDEsICJhbnkiLCBib29sMik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMSwg
ImFueSIsIGJvb2wzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wxLCAiYW55
IiwgYm9vbDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMSwgImFsbCIs
IGJvb2wyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wxLCAiYWxsIiwgYm9v
bDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDEsICJhbGwiLCBib29sNCk7
CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAibm90IiwgYm9vbDIpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJub3QiLCBib29sMyk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgIm5vdCIsIGJvb2w0KTsKKworICAgIFRU
eXBlICpzYW1wbGVyMkQgPSBuZXcgVFR5cGUoRWJ0U2FtcGxlcjJELCBFYnBVbmRlZmluZWQsIEV2
cUdsb2JhbCwgMSk7CisgICAgVFR5cGUgKnNhbXBsZXJDdWJlID0gbmV3IFRUeXBlKEVidFNhbXBs
ZXJDdWJlLCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMSk7CisKKyAgICAvLworICAgIC8vIFRl
eHR1cmUgRnVuY3Rpb25zIGZvciBHTFNMIEVTIDEuMAorICAgIC8vCisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkQiLCBzYW1wbGVyMkQsIGZsb2F0Mik7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2Ft
cGxlcjJELCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAi
dGV4dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmVDdWJlIiwgc2FtcGxlckN1YmUsIGZsb2F0Myk7CisK
KyAgICBpZiAocmVzb3VyY2VzLk9FU19FR0xfaW1hZ2VfZXh0ZXJuYWwpCisgICAgeworICAgICAg
ICBUVHlwZSAqc2FtcGxlckV4dGVybmFsT0VTID0gbmV3IFRUeXBlKEVidFNhbXBsZXJFeHRlcm5h
bE9FUywgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDEpOworCisgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEIiwgc2FtcGxlckV4dGVybmFsT0VTLCBm
bG9hdDIpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1
cmUyRFByb2oiLCBzYW1wbGVyRXh0ZXJuYWxPRVMsIGZsb2F0Myk7CisgICAgICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXJFeHRlcm5h
bE9FUywgZmxvYXQ0KTsKKyAgICB9CisKKyAgICBpZiAocmVzb3VyY2VzLkFSQl90ZXh0dXJlX3Jl
Y3RhbmdsZSkKKyAgICB7CisgICAgICAgIFRUeXBlICpzYW1wbGVyMkRSZWN0ID0gbmV3IFRUeXBl
KEVidFNhbXBsZXIyRFJlY3QsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAxKTsKKworICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFJlY3QiLCBzYW1w
bGVyMkRSZWN0LCBmbG9hdDIpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0NCwgInRleHR1cmUyRFJlY3RQcm9qIiwgc2FtcGxlcjJEUmVjdCwgZmxvYXQzKTsKKyAgICAg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRSZWN0UHJvaiIs
IHNhbXBsZXIyRFJlY3QsIGZsb2F0NCk7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gU0hfRlJB
R01FTlRfU0hBREVSKQorICAgIHsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDQsICJ0ZXh0dXJlMkQiLCBzYW1wbGVyMkQsIGZsb2F0MiwgZmxvYXQxKTsKKyAgICAgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxl
cjJELCBmbG9hdDMsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQ0LCBmbG9hdDEpOworICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmVDdWJlIiwgc2Ft
cGxlckN1YmUsIGZsb2F0MywgZmxvYXQxKTsKKworICAgICAgICBpZiAocmVzb3VyY2VzLk9FU19z
dGFuZGFyZF9kZXJpdmF0aXZlcykKKyAgICAgICAgeworICAgICAgICAgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkRmR4IiwgZmxvYXQxKTsKKyAgICAgICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZEZkeCIsIGZsb2F0Mik7CisgICAgICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImRGZHgiLCBmbG9hdDMpOworICAg
ICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJkRmR4IiwgZmxvYXQ0
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDEsICJkRmR5IiwgZmxvYXQxKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQyLCAiZEZkeSIsIGZsb2F0Mik7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MywgImRGZHkiLCBmbG9hdDMpOworICAgICAgICAgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJkRmR5IiwgZmxvYXQ0KTsKKworICAgICAgICAg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJmd2lkdGgiLCBmbG9hdDEpOwor
ICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJmd2lkdGgiLCBm
bG9hdDIpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJm
d2lkdGgiLCBmbG9hdDMpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDQsICJmd2lkdGgiLCBmbG9hdDQpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYodHlw
ZSA9PSBTSF9WRVJURVhfU0hBREVSKQorICAgIHsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRMb2QiLCBzYW1wbGVyMkQsIGZsb2F0MiwgZmxvYXQx
KTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQ
cm9qTG9kIiwgc2FtcGxlcjJELCBmbG9hdDMsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUHJvakxvZCIsIHNhbXBsZXIyRCwgZmxv
YXQ0LCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwg
InRleHR1cmVDdWJlTG9kIiwgc2FtcGxlckN1YmUsIGZsb2F0MywgZmxvYXQxKTsKKyAgICB9CisK
KyAgICAvLworICAgIC8vIERlcHRoIHJhbmdlIGluIHdpbmRvdyBjb29yZGluYXRlcworICAgIC8v
CisgICAgVEZpZWxkTGlzdCAqZmllbGRzID0gTmV3UG9vbFRGaWVsZExpc3QoKTsKKyAgICBURmll
bGQgKm5lYXIgPSBuZXcgVEZpZWxkKG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwSGlnaCwgRXZxR2xv
YmFsLCAxKSwgTmV3UG9vbFRTdHJpbmcoIm5lYXIiKSk7CisgICAgVEZpZWxkICpmYXIgPSBuZXcg
VEZpZWxkKG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwSGlnaCwgRXZxR2xvYmFsLCAxKSwgTmV3UG9v
bFRTdHJpbmcoImZhciIpKTsKKyAgICBURmllbGQgKmRpZmYgPSBuZXcgVEZpZWxkKG5ldyBUVHlw
ZShFYnRGbG9hdCwgRWJwSGlnaCwgRXZxR2xvYmFsLCAxKSwgTmV3UG9vbFRTdHJpbmcoImRpZmYi
KSk7CisgICAgZmllbGRzLT5wdXNoX2JhY2sobmVhcik7CisgICAgZmllbGRzLT5wdXNoX2JhY2so
ZmFyKTsKKyAgICBmaWVsZHMtPnB1c2hfYmFjayhkaWZmKTsKKyAgICBUU3RydWN0dXJlICpkZXB0
aFJhbmdlU3RydWN0ID0gbmV3IFRTdHJ1Y3R1cmUoTmV3UG9vbFRTdHJpbmcoImdsX0RlcHRoUmFu
Z2VQYXJhbWV0ZXJzIiksIGZpZWxkcyk7CisgICAgVFZhcmlhYmxlICpkZXB0aFJhbmdlUGFyYW1l
dGVycyA9IG5ldyBUVmFyaWFibGUoJmRlcHRoUmFuZ2VTdHJ1Y3QtPm5hbWUoKSwgZGVwdGhSYW5n
ZVN0cnVjdCwgdHJ1ZSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpkZXB0aFJhbmdlUGFyYW1l
dGVycyk7CisgICAgVFZhcmlhYmxlICpkZXB0aFJhbmdlID0gbmV3IFRWYXJpYWJsZShOZXdQb29s
VFN0cmluZygiZ2xfRGVwdGhSYW5nZSIpLCBUVHlwZShkZXB0aFJhbmdlU3RydWN0KSk7CisgICAg
ZGVwdGhSYW5nZS0+c2V0UXVhbGlmaWVyKEV2cVVuaWZvcm0pOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydCgqZGVwdGhSYW5nZSk7CisKKyAgICAvLworICAgIC8vIEltcGxlbWVudGF0aW9uIGRlcGVu
ZGVudCBidWlsdC1pbiBjb25zdGFudHMuCisgICAgLy8KKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRD
b25zdEludCgiZ2xfTWF4VmVydGV4QXR0cmlicyIsIHJlc291cmNlcy5NYXhWZXJ0ZXhBdHRyaWJz
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xfTWF4VmVydGV4VW5pZm9ybVZl
Y3RvcnMiLCByZXNvdXJjZXMuTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydENvbnN0SW50KCJnbF9NYXhWYXJ5aW5nVmVjdG9ycyIsIHJlc291cmNlcy5NYXhW
YXJ5aW5nVmVjdG9ycyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heFZl
cnRleFRleHR1cmVJbWFnZVVuaXRzIiwgcmVzb3VyY2VzLk1heFZlcnRleFRleHR1cmVJbWFnZVVu
aXRzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xfTWF4Q29tYmluZWRUZXh0
dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xfTWF4VGV4dHVyZUltYWdlVW5pdHMi
LCByZXNvdXJjZXMuTWF4VGV4dHVyZUltYWdlVW5pdHMpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dENvbnN0SW50KCJnbF9NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzIiwgcmVzb3VyY2VzLk1heEZy
YWdtZW50VW5pZm9ybVZlY3RvcnMpOworCisgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNf
U1BFQykKKyAgICB7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KCJnbF9NYXhE
cmF3QnVmZmVycyIsIHJlc291cmNlcy5NYXhEcmF3QnVmZmVycyk7CisgICAgfQorfQorCit2b2lk
IElkZW50aWZ5QnVpbHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLAor
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyAmcmVzb3VyY2Vz
LAorICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUpCit7Cisg
ICAgLy8KKyAgICAvLyBGaXJzdCwgaW5zZXJ0IHNvbWUgc3BlY2lhbCBidWlsdC1pbiB2YXJpYWJs
ZXMgdGhhdCBhcmUgbm90IGluIAorICAgIC8vIHRoZSBidWlsdC1pbiBoZWFkZXIgZmlsZXMuCisg
ICAgLy8KKyAgICBzd2l0Y2godHlwZSkgeworICAgIGNhc2UgU0hfRlJBR01FTlRfU0hBREVSOgor
ICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmco
ImdsX0ZyYWdDb29yZCIpLCAgICAgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVi
cE1lZGl1bSwgRXZxRnJhZ0Nvb3JkLCAgIDQpKSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJvbnRGYWNpbmciKSwgICAgICAg
ICAgICAgICAgICAgICBUVHlwZShFYnRCb29sLCAgRWJwVW5kZWZpbmVkLCBFdnFGcm9udEZhY2lu
ZywgMSkpKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bv
b2xUU3RyaW5nKCJnbF9Qb2ludENvb3JkIiksICAgICAgICAgICAgICAgICAgICAgIFRUeXBlKEVi
dEZsb2F0LCBFYnBNZWRpdW0sIEV2cVBvaW50Q29vcmQsICAyKSkpOworCisgICAgICAgIC8vCisg
ICAgICAgIC8vIEluIENTUyBTaGFkZXJzLCBnbF9GcmFnQ29sb3IsIGdsX0ZyYWdEYXRhLCBhbmQg
Z2xfTWF4RHJhd0J1ZmZlcnMgYXJlIG5vdCBhdmFpbGFibGUuCisgICAgICAgIC8vIEluc3RlYWQs
IGNzc19NaXhDb2xvciBhbmQgY3NzX0NvbG9yTWF0cml4IGFyZSBhdmFpbGFibGUuCisgICAgICAg
IC8vCisgICAgICAgIGlmIChzcGVjICE9IFNIX0NTU19TSEFERVJTX1NQRUMpIHsKKyAgICAgICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xf
RnJhZ0NvbG9yIiksICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0s
IEV2cUZyYWdDb2xvciwgICA0KSkpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpu
ZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnRGF0YVtnbF9NYXhEcmF3QnVmZmVy
c10iKSwgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0RhdGEsICAgIDQpKSk7Cisg
ICAgICAgICAgICBpZiAocmVzb3VyY2VzLkVYVF9mcmFnX2RlcHRoKSB7CisgICAgICAgICAgICAg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9G
cmFnRGVwdGhFWFQiKSwgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgcmVzb3VyY2VzLkZyYWdt
ZW50UHJlY2lzaW9uSGlnaCA/IEVicEhpZ2ggOiBFYnBNZWRpdW0sIEV2cUZyYWdEZXB0aCwgMSkp
KTsKKyAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbigiZ2xfRnJh
Z0RlcHRoRVhUIiwgIkdMX0VYVF9mcmFnX2RlcHRoIik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUo
TmV3UG9vbFRTdHJpbmcoImNzc19NaXhDb2xvciIpLCAgICAgICAgICAgICAgICAgICBUVHlwZShF
YnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFHbG9iYWwsICAgICAgNCkpKTsKKyAgICAgICAgICAgIHN5
bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiY3NzX0NvbG9y
TWF0cml4IiksICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUds
b2JhbCwgICAgICA0LCB0cnVlKSkpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIFNIX1ZFUlRFWF9TSEFERVI6CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3
IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfUG9zaXRpb24iKSwgICAgVFR5cGUoRWJ0Rmxv
YXQsIEVicEhpZ2gsIEV2cVBvc2l0aW9uLCAgICA0KSkpOworICAgICAgICBzeW1ib2xUYWJsZS5p
bnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1BvaW50U2l6ZSIpLCAgIFRU
eXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cVBvaW50U2l6ZSwgICAxKSkpOworICAgICAgICBi
cmVhazsKKworICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiTGFuZ3VhZ2Ugbm90IHN1cHBv
cnRlZCIpOworICAgIH0KKworICAgIC8vCisgICAgLy8gTmV4dCwgaWRlbnRpZnkgd2hpY2ggYnVp
bHQtaW5zIGZyb20gdGhlIGFscmVhZHkgbG9hZGVkIGhlYWRlcnMgaGF2ZQorICAgIC8vIGEgbWFw
cGluZyB0byBhbiBvcGVyYXRvci4gIFRob3NlIHRoYXQgYXJlIG5vdCBpZGVudGlmaWVkIGFzIHN1
Y2ggYXJlCisgICAgLy8gZXhwZWN0ZWQgdG8gYmUgcmVzb2x2ZWQgdGhyb3VnaCBhIGxpYnJhcnkg
b2YgZnVuY3Rpb25zLCB2ZXJzdXMgYXMKKyAgICAvLyBvcGVyYXRpb25zLgorICAgIC8vCisgICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibWF0cml4Q29tcE11bHQiLCAgIEVPcE11bCk7
CisKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJlcXVhbCIsICAgICAgICAgICAg
RU9wVmVjdG9yRXF1YWwpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm5vdEVx
dWFsIiwgICAgICAgICBFT3BWZWN0b3JOb3RFcXVhbCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcigibGVzc1RoYW4iLCAgICAgICAgIEVPcExlc3NUaGFuKTsKKyAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKCJncmVhdGVyVGhhbiIsICAgICAgRU9wR3JlYXRlclRoYW4p
OworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxlc3NUaGFuRXF1YWwiLCAgICBF
T3BMZXNzVGhhbkVxdWFsKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJncmVh
dGVyVGhhbkVxdWFsIiwgRU9wR3JlYXRlclRoYW5FcXVhbCk7CisgICAgCisgICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9PcGVyYXRvcigicmFkaWFucyIsICAgICAgRU9wUmFkaWFucyk7CisgICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZGVncmVlcyIsICAgICAgRU9wRGVncmVlcyk7Cisg
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigic2luIiwgICAgICAgICAgRU9wU2luKTsK
KyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJjb3MiLCAgICAgICAgICBFT3BDb3Mp
OworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInRhbiIsICAgICAgICAgIEVPcFRh
bik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiYXNpbiIsICAgICAgICAgRU9w
QXNpbik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiYWNvcyIsICAgICAgICAg
RU9wQWNvcyk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiYXRhbiIsICAgICAg
ICAgRU9wQXRhbik7CisKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJwb3ciLCAg
ICAgICAgICBFT3BQb3cpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImV4cDIi
LCAgICAgICAgIEVPcEV4cDIpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxv
ZyIsICAgICAgICAgIEVPcExvZyk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigi
ZXhwIiwgICAgICAgICAgRU9wRXhwKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KCJsb2cyIiwgICAgICAgICBFT3BMb2cyKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKCJzcXJ0IiwgICAgICAgICBFT3BTcXJ0KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKCJpbnZlcnNlc3FydCIsICBFT3BJbnZlcnNlU3FydCk7CisKKyAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKCJhYnMiLCAgICAgICAgICBFT3BBYnMpOworICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvT3BlcmF0b3IoInNpZ24iLCAgICAgICAgIEVPcFNpZ24pOworICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImZsb29yIiwgICAgICAgIEVPcEZsb29yKTsKKyAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJjZWlsIiwgICAgICAgICBFT3BDZWlsKTsKKyAg
ICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJmcmFjdCIsICAgICAgICBFT3BGcmFjdCk7
CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibW9kIiwgICAgICAgICAgRU9wTW9k
KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJtaW4iLCAgICAgICAgICBFT3BN
aW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm1heCIsICAgICAgICAgIEVP
cE1heCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiY2xhbXAiLCAgICAgICAg
RU9wQ2xhbXApOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm1peCIsICAgICAg
ICAgIEVPcE1peCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigic3RlcCIsICAg
ICAgICAgRU9wU3RlcCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigic21vb3Ro
c3RlcCIsICAgRU9wU21vb3RoU3RlcCk7CisKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKCJsZW5ndGgiLCAgICAgICBFT3BMZW5ndGgpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoImRpc3RhbmNlIiwgICAgIEVPcERpc3RhbmNlKTsKKyAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKCJkb3QiLCAgICAgICAgICBFT3BEb3QpOworICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoImNyb3NzIiwgICAgICAgIEVPcENyb3NzKTsKKyAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKCJub3JtYWxpemUiLCAgICBFT3BOb3JtYWxpemUpOworICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImZhY2Vmb3J3YXJkIiwgIEVPcEZhY2VGb3J3
YXJkKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJyZWZsZWN0IiwgICAgICBF
T3BSZWZsZWN0KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJyZWZyYWN0Iiwg
ICAgICBFT3BSZWZyYWN0KTsKKyAgICAKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KCJhbnkiLCAgICAgICAgICBFT3BBbnkpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0
b3IoImFsbCIsICAgICAgICAgIEVPcEFsbCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVy
YXRvcigibm90IiwgICAgICAgICAgRU9wVmVjdG9yTG9naWNhbE5vdCk7CisKKyAgICAvLyBNYXAg
bGFuZ3VhZ2Utc3BlY2lmaWMgb3BlcmF0b3JzLgorICAgIHN3aXRjaCh0eXBlKSB7CisgICAgY2Fz
ZSBTSF9WRVJURVhfU0hBREVSOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIFNIX0ZSQUdNRU5U
X1NIQURFUjoKKyAgICAgICAgaWYgKHJlc291cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMp
IHsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImRGZHgiLCAgIEVP
cERGZHgpOworICAgICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZEZkeSIs
ICAgRU9wREZkeSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJm
d2lkdGgiLCBFT3BGd2lkdGgpOworCisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4
dGVuc2lvbigiZEZkeCIsICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKKyAgICAgICAg
ICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKCJkRmR5IiwgIkdMX09FU19zdGFuZGFy
ZF9kZXJpdmF0aXZlcyIpOworICAgICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9FeHRlbnNp
b24oImZ3aWR0aCIsICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICAvLyBGaW5h
bGx5IGFkZCByZXNvdXJjZS1zcGVjaWZpYyB2YXJpYWJsZXMuCisgICAgc3dpdGNoKHR5cGUpIHsK
KyAgICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjoKKyAgICAgICAgaWYgKHNwZWMgIT0gU0hfQ1NT
X1NIQURFUlNfU1BFQykgeworICAgICAgICAgICAgLy8gU2V0IHVwIGdsX0ZyYWdEYXRhLiAgVGhl
IGFycmF5IHNpemUuCisgICAgICAgICAgICBUVHlwZSBmcmFnRGF0YShFYnRGbG9hdCwgRWJwTWVk
aXVtLCBFdnFGcmFnRGF0YSwgNCwgZmFsc2UsIHRydWUpOworICAgICAgICAgICAgZnJhZ0RhdGEu
c2V0QXJyYXlTaXplKHJlc291cmNlcy5NYXhEcmF3QnVmZmVycyk7CisgICAgICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEYXRh
IiksICAgIGZyYWdEYXRhKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDogYnJlYWs7CisgICAgfQorfQorCit2b2lkIEluaXRFeHRlbnNpb25CZWhhdmlvcihjb25zdCBT
aEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291cmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0QmVoYXZpb3IpCit7CisgICAgaWYgKHJlc291cmNlcy5P
RVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMpCisgICAgICAgIGV4dEJlaGF2aW9yWyJHTF9PRVNfc3Rh
bmRhcmRfZGVyaXZhdGl2ZXMiXSA9IEVCaFVuZGVmaW5lZDsKKyAgICBpZiAocmVzb3VyY2VzLk9F
U19FR0xfaW1hZ2VfZXh0ZXJuYWwpCisgICAgICAgIGV4dEJlaGF2aW9yWyJHTF9PRVNfRUdMX2lt
YWdlX2V4dGVybmFsIl0gPSBFQmhVbmRlZmluZWQ7CisgICAgaWYgKHJlc291cmNlcy5BUkJfdGV4
dHVyZV9yZWN0YW5nbGUpCisgICAgICAgIGV4dEJlaGF2aW9yWyJHTF9BUkJfdGV4dHVyZV9yZWN0
YW5nbGUiXSA9IEVCaFVuZGVmaW5lZDsKKyAgICBpZiAocmVzb3VyY2VzLkVYVF9kcmF3X2J1ZmZl
cnMpCisgICAgICAgIGV4dEJlaGF2aW9yWyJHTF9FWFRfZHJhd19idWZmZXJzIl0gPSBFQmhVbmRl
ZmluZWQ7CisgICAgaWYgKHJlc291cmNlcy5FWFRfZnJhZ19kZXB0aCkKKyAgICAgICAgZXh0QmVo
YXZpb3JbIkdMX0VYVF9mcmFnX2RlcHRoIl0gPSBFQmhVbmRlZmluZWQ7Cit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFs
aXplLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9J
bml0aWFsaXplLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjU2NDI4NjlhYTE5OWE4Y2FkOTczMDFhZWMzMDc2MDMz
OWRkNTQxZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemUuaApAQCAtMCwwICsxLDIzIEBACisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisjaWZuZGVmIF9JTklUSUFMSVpFX0lOQ0xVREVEXworI2RlZmluZSBfSU5J
VElBTElaRV9JTkNMVURFRF8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29tbW9u
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuaCIKKwordm9pZCBJbnNlcnRCdWlsdElu
RnVuY3Rpb25zKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywgY29uc3QgU2hC
dWlsdEluUmVzb3VyY2VzICZyZXNvdXJjZXMsIFRTeW1ib2xUYWJsZSAmdGFibGUpOworCit2b2lk
IElkZW50aWZ5QnVpbHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLAor
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyYgcmVzb3VyY2Vz
LAorICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpOworCit2
b2lkIEluaXRFeHRlbnNpb25CZWhhdmlvcihjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291
cmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFeHRlbnNpb25CZWhhdmlvciYgZXh0
ZW5zaW9uQmVoYXZpb3IpOworCisjZW5kaWYgLy8gX0lOSVRJQUxJWkVfSU5DTFVERURfCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9J
bml0aWFsaXplRGxsLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL0luaXRpYWxpemVEbGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQzZjgxNzg0ZDBhZGVjNWFi
MTE2YThiZTM0ZTU3YWRmMDYxMzNiYWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplRGxsLmNwcApAQCAt
MCwwICsxLDMyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9Jbml0aWFsaXplRGxsLmgiCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L0luaXRpYWxpemVHbG9iYWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0
aWFsaXplUGFyc2VDb250ZXh0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9vc2lu
Y2x1ZGUuaCIKKworYm9vbCBJbml0UHJvY2VzcygpCit7CisgICAgaWYgKCFJbml0aWFsaXplUG9v
bEluZGV4KCkpIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRQcm9jZXNzKCk6IEZhaWxlZCB0
byBpbml0YWxpemUgZ2xvYmFsIHBvb2wiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGlmICghSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCkpIHsKKyAgICAgICAgYXNz
ZXJ0KDAgJiYgIkluaXRQcm9jZXNzKCk6IEZhaWxlZCB0byBpbml0YWxpemUgcGFyc2UgY29udGV4
dCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgRGV0YWNoUHJvY2VzcygpCit7CisgICAgRnJlZVBhcnNlQ29udGV4dEluZGV4KCk7
CisgICAgRnJlZVBvb2xJbmRleCgpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZURsbC5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZURsbC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjQzMDcwY2MzZmY3OGY3NTNhMjQ2YzQ2MDY5ODkwODZhNjNiZjA4YmEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9Jbml0aWFsaXplRGxsLmgKQEAgLTAsMCArMSwxMyBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KyNpZm5kZWYgX19JTklUSUFMSVpFRExMX0gKKyNkZWZpbmUgX19JTklUSUFMSVpFRExMX0gKKwor
Ym9vbCBJbml0UHJvY2VzcygpOwordm9pZCBEZXRhY2hQcm9jZXNzKCk7CisKKyNlbmRpZiAvLyBf
X0lOSVRJQUxJWkVETExfSAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplR2xvYmFscy5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZUdsb2JhbHMuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4wNzE1OTQxNDI0NzEwNTMwODAzODYyODEzODZhOTUwNmZhYmQwNTYzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvSW5pdGlhbGl6ZUdsb2JhbHMuaApAQCAtMCwwICsxLDEzIEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaWZuZGVmIF9fSU5JVElBTElaRV9HTE9CQUxTX0lOQ0xVREVEXworI2RlZmluZSBf
X0lOSVRJQUxJWkVfR0xPQkFMU19JTkNMVURFRF8KKworYm9vbCBJbml0aWFsaXplUG9vbEluZGV4
KCk7Cit2b2lkIEZyZWVQb29sSW5kZXgoKTsKKworI2VuZGlmIC8vIF9fSU5JVElBTElaRV9HTE9C
QUxTX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplUGFyc2VDb250
ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iNGRlZmFlNTY5NTNhOWFiODg4NTRmZTQ3NTNjNTdkY2U2NDAy
MWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAKQEAgLTAsMCArMSw0MCBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxp
emVQYXJzZUNvbnRleHQuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Ivb3NpbmNs
dWRlLmgiCisKK09TX1RMU0luZGV4IEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfSU5WQUxJ
RF9UTFNfSU5ERVg7CisKK2Jvb2wgSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCkKK3sKKyAg
ICBhc3NlcnQoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgp
OworCisgICAgR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19BbGxvY1RMU0luZGV4KCk7Cisg
ICAgcmV0dXJuIEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ICE9IE9TX0lOVkFMSURfVExTX0lOREVY
OworfQorCit2b2lkIEZyZWVQYXJzZUNvbnRleHRJbmRleCgpCit7CisgICAgYXNzZXJ0KEdsb2Jh
bFBhcnNlQ29udGV4dEluZGV4ICE9IE9TX0lOVkFMSURfVExTX0lOREVYKTsKKworICAgIE9TX0Zy
ZWVUTFNJbmRleChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCk7CisgICAgR2xvYmFsUGFyc2VDb250
ZXh0SW5kZXggPSBPU19JTlZBTElEX1RMU19JTkRFWDsKK30KKwordm9pZCBTZXRHbG9iYWxQYXJz
ZUNvbnRleHQoVFBhcnNlQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBhc3NlcnQoR2xvYmFsUGFy
c2VDb250ZXh0SW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpOworICAgIE9TX1NldFRMU1Zh
bHVlKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4LCBjb250ZXh0KTsKK30KKworVFBhcnNlQ29udGV4
dCogR2V0R2xvYmFsUGFyc2VDb250ZXh0KCkKK3sKKyAgICBhc3NlcnQoR2xvYmFsUGFyc2VDb250
ZXh0SW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUUGFyc2VDb250ZXh0Kj4oT1NfR2V0VExTVmFsdWUoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgp
KTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmJmZmJhYjg3ZDA3MjNhNjMyODQ2ODQzYzMwZDljYWMzMzAyNzA3NzYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgKQEAgLTAsMCArMSwxNyBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworI2lmbmRlZiBfX0lOSVRJQUxJWkVfUEFSU0VfQ09OVEVYVF9JTkNMVURFRF8K
KyNkZWZpbmUgX19JTklUSUFMSVpFX1BBUlNFX0NPTlRFWFRfSU5DTFVERURfCisKK2Jvb2wgSW5p
dGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCk7Cit2b2lkIEZyZWVQYXJzZUNvbnRleHRJbmRleCgp
OworCitzdHJ1Y3QgVFBhcnNlQ29udGV4dDsKK2V4dGVybiB2b2lkIFNldEdsb2JhbFBhcnNlQ29u
dGV4dChUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKK2V4dGVybiBUUGFyc2VDb250ZXh0KiBHZXRH
bG9iYWxQYXJzZUNvbnRleHQoKTsKKworI2VuZGlmIC8vIF9fSU5JVElBTElaRV9QQVJTRV9DT05U
RVhUX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVZhcmlhYmxlcy5jcHAgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplVmFyaWFibGVzLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xMTVjNTYxYzc3NWYxNTYxNjc3ZjE5OWM2ZWMxOWMzOGFhN2Q4N2U0Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvSW5pdGlhbGl6ZVZhcmlhYmxlcy5jcHAKQEAgLTAsMCArMSwxMTYgQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVW
YXJpYWJsZXMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2NvbXBpbGVyZGVidWcu
aCIKKworbmFtZXNwYWNlCit7CisKK1RJbnRlcm1Db25zdGFudFVuaW9uKiBjb25zdHJ1Y3RGbG9h
dENvbnN0VW5pb25Ob2RlKGNvbnN0IFRUeXBlJiB0eXBlKQoreworICAgIFRUeXBlIG15VHlwZSA9
IHR5cGU7CisgICAgdW5zaWduZWQgY2hhciBzaXplID0gbXlUeXBlLmdldE5vbWluYWxTaXplKCk7
CisgICAgaWYgKG15VHlwZS5pc01hdHJpeCgpKQorICAgICAgICBzaXplICo9IHNpemU7CisgICAg
Q29uc3RhbnRVbmlvbiAqdSA9IG5ldyBDb25zdGFudFVuaW9uW3NpemVdOworICAgIGZvciAoaW50
IGlpID0gMDsgaWkgPCBzaXplOyArK2lpKQorICAgICAgICB1W2lpXS5zZXRGQ29uc3QoMC4wZik7
CisKKyAgICBteVR5cGUuY2xlYXJBcnJheW5lc3MoKTsKKyAgICBteVR5cGUuc2V0UXVhbGlmaWVy
KEV2cUNvbnN0KTsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbm9kZSA9IG5ldyBUSW50ZXJt
Q29uc3RhbnRVbmlvbih1LCBteVR5cGUpOworICAgIHJldHVybiBub2RlOworfQorCitUSW50ZXJt
Q29uc3RhbnRVbmlvbiogY29uc3RydWN0SW5kZXhOb2RlKGludCBpbmRleCkKK3sKKyAgICBDb25z
dGFudFVuaW9uICp1ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgdVswXS5zZXRJQ29uc3Qo
aW5kZXgpOworCisgICAgVFR5cGUgdHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3Qs
IDEpOworICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpub2RlID0gbmV3IFRJbnRlcm1Db25zdGFu
dFVuaW9uKHUsIHR5cGUpOworICAgIHJldHVybiBub2RlOworfQorCit9ICAvLyBuYW1lc3BhY2Ug
YW5vbnltb3VzCisKK2Jvb2wgSW5pdGlhbGl6ZVZhcmlhYmxlczo6dmlzaXRBZ2dyZWdhdGUoVmlz
aXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCit7CisgICAgYm9vbCB2aXNpdENoaWxk
cmVuID0gIW1Db2RlSW5zZXJ0ZWQ7CisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsK
KyAgICAgIGNhc2UgRU9wU2VxdWVuY2U6CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BG
dW5jdGlvbjoKKyAgICAgIHsKKyAgICAgICAgLy8gRnVuY3Rpb24gZGVmaW5pdGlvbi4KKyAgICAg
ICAgQVNTRVJUKHZpc2l0ID09IFByZVZpc2l0KTsKKyAgICAgICAgaWYgKG5vZGUtPmdldE5hbWUo
KSA9PSAibWFpbigiKQorICAgICAgICB7CisgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJnNl
cXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAgICAgIEFTU0VSVCgoc2VxdWVu
Y2Uuc2l6ZSgpID09IDEpIHx8IChzZXF1ZW5jZS5zaXplKCkgPT0gMikpOworICAgICAgICAgICAg
VEludGVybUFnZ3JlZ2F0ZSAqYm9keSA9IE5VTEw7CisgICAgICAgICAgICBpZiAoc2VxdWVuY2Uu
c2l6ZSgpID09IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9keSA9IG5ldyBU
SW50ZXJtQWdncmVnYXRlKEVPcFNlcXVlbmNlKTsKKyAgICAgICAgICAgICAgICBzZXF1ZW5jZS5w
dXNoX2JhY2soYm9keSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgYm9keSA9IHNlcXVlbmNlWzFdLT5nZXRBc0FnZ3JlZ2F0
ZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKGJvZHkpOworICAgICAgICAg
ICAgaW5zZXJ0SW5pdENvZGUoYm9keS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgICAgICBtQ29k
ZUluc2VydGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIH0KKyAg
ICAgIGRlZmF1bHQ6CisgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIHJldHVybiB2aXNpdENoaWxkcmVuOworfQorCit2b2lkIEluaXRpYWxp
emVWYXJpYWJsZXM6Omluc2VydEluaXRDb2RlKFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UpCit7
CisgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IG1WYXJpYWJsZXMuc2l6ZSgpOyArK2lpKQor
ICAgIHsKKyAgICAgICAgY29uc3QgSW5pdFZhcmlhYmxlSW5mbyYgdmFySW5mbyA9IG1WYXJpYWJs
ZXNbaWldOworCisgICAgICAgIGlmICh2YXJJbmZvLnR5cGUuaXNBcnJheSgpKQorICAgICAgICB7
CisgICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IHZhckluZm8udHlwZS5nZXRBcnJheVNpemUo
KSAtIDE7IGluZGV4ID49IDA7IC0taW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgVEludGVybUJpbmFyeSAqYXNzaWduID0gbmV3IFRJbnRlcm1CaW5hcnkoRU9wQXNzaWduKTsK
KyAgICAgICAgICAgICAgICBzZXF1ZW5jZS5pbnNlcnQoc2VxdWVuY2UuYmVnaW4oKSwgYXNzaWdu
KTsKKworICAgICAgICAgICAgICAgIFRJbnRlcm1CaW5hcnkgKmluZGV4RGlyZWN0ID0gbmV3IFRJ
bnRlcm1CaW5hcnkoRU9wSW5kZXhEaXJlY3QpOworICAgICAgICAgICAgICAgIFRJbnRlcm1TeW1i
b2wgKnN5bWJvbCA9IG5ldyBUSW50ZXJtU3ltYm9sKDAsIHZhckluZm8ubmFtZSwgdmFySW5mby50
eXBlKTsKKyAgICAgICAgICAgICAgICBpbmRleERpcmVjdC0+c2V0TGVmdChzeW1ib2wpOworICAg
ICAgICAgICAgICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICppbmRleE5vZGUgPSBjb25zdHJ1Y3RJ
bmRleE5vZGUoaW5kZXgpOworICAgICAgICAgICAgICAgIGluZGV4RGlyZWN0LT5zZXRSaWdodChp
bmRleE5vZGUpOworCisgICAgICAgICAgICAgICAgYXNzaWduLT5zZXRMZWZ0KGluZGV4RGlyZWN0
KTsKKworICAgICAgICAgICAgICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICp6ZXJvQ29uc3QgPSBj
b25zdHJ1Y3RGbG9hdENvbnN0VW5pb25Ob2RlKHZhckluZm8udHlwZSk7CisgICAgICAgICAgICAg
ICAgYXNzaWduLT5zZXRSaWdodCh6ZXJvQ29uc3QpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVEludGVybUJpbmFyeSAqYXNz
aWduID0gbmV3IFRJbnRlcm1CaW5hcnkoRU9wQXNzaWduKTsKKyAgICAgICAgICAgIHNlcXVlbmNl
Lmluc2VydChzZXF1ZW5jZS5iZWdpbigpLCBhc3NpZ24pOworICAgICAgICAgICAgVEludGVybVN5
bWJvbCAqc3ltYm9sID0gbmV3IFRJbnRlcm1TeW1ib2woMCwgdmFySW5mby5uYW1lLCB2YXJJbmZv
LnR5cGUpOworICAgICAgICAgICAgYXNzaWduLT5zZXRMZWZ0KHN5bWJvbCk7CisgICAgICAgICAg
ICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqemVyb0NvbnN0ID0gY29uc3RydWN0RmxvYXRDb25zdFVu
aW9uTm9kZSh2YXJJbmZvLnR5cGUpOworICAgICAgICAgICAgYXNzaWduLT5zZXRSaWdodCh6ZXJv
Q29uc3QpOworICAgICAgICB9CisKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVWYXJpYWJsZXMu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRp
YWxpemVWYXJpYWJsZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xY2Q2ZDdlMWI1MTFhY2U0NmFjNThkNDBkNjk1
NWIzODhiNmRhNDc2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVZhcmlhYmxlcy5oCkBAIC0wLDAgKzEs
NTAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfSU5JVElBTElaRV9W
QVJJQUJMRVNfSF8KKyNkZWZpbmUgQ09NUElMRVJfSU5JVElBTElaRV9WQVJJQUJMRVNfSF8KKwor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisKK2NsYXNzIElu
aXRpYWxpemVWYXJpYWJsZXMgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6
CisgICAgc3RydWN0IEluaXRWYXJpYWJsZUluZm8KKyAgICB7CisgICAgICAgIFRTdHJpbmcgbmFt
ZTsKKyAgICAgICAgVFR5cGUgdHlwZTsKKworICAgICAgICBJbml0VmFyaWFibGVJbmZvKGNvbnN0
IFRTdHJpbmcmIF9uYW1lLCBjb25zdCBUVHlwZSYgX3R5cGUpCisgICAgICAgICAgICA6IG5hbWUo
X25hbWUpLAorICAgICAgICAgICAgICB0eXBlKF90eXBlKQorICAgICAgICB7CisgICAgICAgIH0K
KyAgICB9OworICAgIHR5cGVkZWYgVFZlY3RvcjxJbml0VmFyaWFibGVJbmZvPiBJbml0VmFyaWFi
bGVJbmZvTGlzdDsKKworICAgIEluaXRpYWxpemVWYXJpYWJsZXMoY29uc3QgSW5pdFZhcmlhYmxl
SW5mb0xpc3QmIHZhcnMpCisgICAgICAgIDogbUNvZGVJbnNlcnRlZChmYWxzZSksCisgICAgICAg
ICAgbVZhcmlhYmxlcyh2YXJzKQorICAgIHsKKyAgICB9CisKKyAgcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSogbm9kZSkg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2aXNp
dCwgVEludGVybVVuYXJ5KiBub2RlKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9v
bCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiogbm9kZSkgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBU
SW50ZXJtTG9vcCogbm9kZSkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdmlz
aXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqIG5vZGUpIHsgcmV0dXJuIGZhbHNl
OyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRl
cm1BZ2dyZWdhdGUqIG5vZGUpOworCisgIHByaXZhdGU6CisgICAgdm9pZCBpbnNlcnRJbml0Q29k
ZShUSW50ZXJtU2VxdWVuY2UmIHNlcXVlbmNlKTsKKworICAgIEluaXRWYXJpYWJsZUluZm9MaXN0
IG1WYXJpYWJsZXM7CisgICAgYm9vbCBtQ29kZUluc2VydGVkOworfTsKKworI2VuZGlmICAvLyBD
T01QSUxFUl9JTklUSUFMSVpFX1ZBUklBQkxFU19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtVHJhdmVyc2UuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtVHJh
dmVyc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU1NGI4MzQwOWFjMDBhOGI3YmMzNTQ5NTcwYmQ1OThjMGM3
ZTI5MGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9JbnRlcm1UcmF2ZXJzZS5jcHAKQEAgLTAsMCArMSwyNTkgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVk
aWF0ZS5oIgorCisvLworLy8gVHJhdmVyc2UgdGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlv
biB0cmVlLCBhbmQKKy8vIGNhbGwgYSBub2RlIHR5cGUgc3BlY2lmaWMgZnVuY3Rpb24gZm9yIGVh
Y2ggbm9kZS4KKy8vIERvbmUgcmVjdXJzaXZlbHkgdGhyb3VnaCB0aGUgbWVtYmVyIGZ1bmN0aW9u
IFRyYXZlcnNlKCkuCisvLyBOb2RlIHR5cGVzIGNhbiBiZSBza2lwcGVkIGlmIHRoZWlyIGZ1bmN0
aW9uIHRvIGNhbGwgaXMgMCwKKy8vIGJ1dCB0aGVpciBzdWJ0cmVlIHdpbGwgc3RpbGwgYmUgdHJh
dmVyc2VkLgorLy8gTm9kZXMgd2l0aCBjaGlsZHJlbiBjYW4gaGF2ZSB0aGVpciB3aG9sZSBzdWJ0
cmVlIHNraXBwZWQKKy8vIGlmIHByZVZpc2l0IGlzIHR1cm5lZCBvbiBhbmQgdGhlIHR5cGUgc3Bl
Y2lmaWMgZnVuY3Rpb24KKy8vIHJldHVybnMgZmFsc2UuCisvLworLy8gcHJlVmlzaXQsIHBvc3RW
aXNpdCwgYW5kIHJpZ2h0VG9MZWZ0IGNvbnRyb2wgd2hhdCBvcmRlcgorLy8gbm9kZXMgYXJlIHZp
c2l0ZWQgaW4uCisvLworCisvLworLy8gVHJhdmVyc2FsIGZ1bmN0aW9ucyBmb3IgdGVybWluYWxz
IGFyZSBzdHJhaWdoZm9yd2FyZC4uLi4KKy8vCit2b2lkIFRJbnRlcm1TeW1ib2w6OnRyYXZlcnNl
KFRJbnRlcm1UcmF2ZXJzZXIgKml0KQoreworICAgIGl0LT52aXNpdFN5bWJvbCh0aGlzKTsKK30K
Kwordm9pZCBUSW50ZXJtQ29uc3RhbnRVbmlvbjo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciAq
aXQpCit7CisgICAgaXQtPnZpc2l0Q29uc3RhbnRVbmlvbih0aGlzKTsKK30KKworLy8KKy8vIFRy
YXZlcnNlIGEgYmluYXJ5IG5vZGUuCisvLwordm9pZCBUSW50ZXJtQmluYXJ5Ojp0cmF2ZXJzZShU
SW50ZXJtVHJhdmVyc2VyICppdCkKK3sKKyAgICBib29sIHZpc2l0ID0gdHJ1ZTsKKworICAgIC8v
CisgICAgLy8gdmlzaXQgdGhlIG5vZGUgYmVmb3JlIGNoaWxkcmVuIGlmIHByZS12aXNpdGluZy4K
KyAgICAvLworICAgIGlmIChpdC0+cHJlVmlzaXQpCisgICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0
QmluYXJ5KFByZVZpc2l0LCB0aGlzKTsKKyAgICAKKyAgICAvLworICAgIC8vIFZpc2l0IHRoZSBj
aGlsZHJlbiwgaW4gdGhlIHJpZ2h0IG9yZGVyLgorICAgIC8vCisgICAgaWYgKHZpc2l0KQorICAg
IHsKKyAgICAgICAgaXQtPmluY3JlbWVudERlcHRoKHRoaXMpOworCisgICAgICAgIGlmIChpdC0+
cmlnaHRUb0xlZnQpIAorICAgICAgICB7CisgICAgICAgICAgICBpZiAocmlnaHQpCisgICAgICAg
ICAgICAgICAgcmlnaHQtPnRyYXZlcnNlKGl0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKGl0LT5pblZpc2l0KQorICAgICAgICAgICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0QmluYXJ5
KEluVmlzaXQsIHRoaXMpOworCisgICAgICAgICAgICBpZiAodmlzaXQgJiYgbGVmdCkKKyAgICAg
ICAgICAgICAgICBsZWZ0LT50cmF2ZXJzZShpdCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAobGVmdCkKKyAgICAgICAgICAgICAgICBsZWZ0LT50
cmF2ZXJzZShpdCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpdC0+aW5WaXNpdCkK
KyAgICAgICAgICAgICAgICB2aXNpdCA9IGl0LT52aXNpdEJpbmFyeShJblZpc2l0LCB0aGlzKTsK
KworICAgICAgICAgICAgaWYgKHZpc2l0ICYmIHJpZ2h0KQorICAgICAgICAgICAgICAgIHJpZ2h0
LT50cmF2ZXJzZShpdCk7CisgICAgICAgIH0KKworICAgICAgICBpdC0+ZGVjcmVtZW50RGVwdGgo
KTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFZpc2l0IHRoZSBub2RlIGFmdGVyIHRoZSBjaGls
ZHJlbiwgaWYgcmVxdWVzdGVkIGFuZCB0aGUgdHJhdmVyc2FsCisgICAgLy8gaGFzbid0IGJlZW4g
Y2FuY2VsbGVkIHlldC4KKyAgICAvLworICAgIGlmICh2aXNpdCAmJiBpdC0+cG9zdFZpc2l0KQor
ICAgICAgICBpdC0+dmlzaXRCaW5hcnkoUG9zdFZpc2l0LCB0aGlzKTsKK30KKworLy8KKy8vIFRy
YXZlcnNlIGEgdW5hcnkgbm9kZS4gIFNhbWUgY29tbWVudHMgaW4gYmluYXJ5IG5vZGUgYXBwbHkg
aGVyZS4KKy8vCit2b2lkIFRJbnRlcm1VbmFyeTo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciAq
aXQpCit7CisgICAgYm9vbCB2aXNpdCA9IHRydWU7CisKKyAgICBpZiAoaXQtPnByZVZpc2l0KQor
ICAgICAgICB2aXNpdCA9IGl0LT52aXNpdFVuYXJ5KFByZVZpc2l0LCB0aGlzKTsKKworICAgIGlm
ICh2aXNpdCkgeworICAgICAgICBpdC0+aW5jcmVtZW50RGVwdGgodGhpcyk7CisgICAgICAgIG9w
ZXJhbmQtPnRyYXZlcnNlKGl0KTsKKyAgICAgICAgaXQtPmRlY3JlbWVudERlcHRoKCk7CisgICAg
fQorICAgIAorICAgIGlmICh2aXNpdCAmJiBpdC0+cG9zdFZpc2l0KQorICAgICAgICBpdC0+dmlz
aXRVbmFyeShQb3N0VmlzaXQsIHRoaXMpOworfQorCisvLworLy8gVHJhdmVyc2UgYW4gYWdncmVn
YXRlIG5vZGUuICBTYW1lIGNvbW1lbnRzIGluIGJpbmFyeSBub2RlIGFwcGx5IGhlcmUuCisvLwor
dm9pZCBUSW50ZXJtQWdncmVnYXRlOjp0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyICppdCkKK3sK
KyAgICBib29sIHZpc2l0ID0gdHJ1ZTsKKyAgICAKKyAgICBpZiAoaXQtPnByZVZpc2l0KQorICAg
ICAgICB2aXNpdCA9IGl0LT52aXNpdEFnZ3JlZ2F0ZShQcmVWaXNpdCwgdGhpcyk7CisgICAgCisg
ICAgaWYgKHZpc2l0KQorICAgIHsKKyAgICAgICAgaXQtPmluY3JlbWVudERlcHRoKHRoaXMpOwor
CisgICAgICAgIGlmIChpdC0+cmlnaHRUb0xlZnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZv
ciAoVEludGVybVNlcXVlbmNlOjpyZXZlcnNlX2l0ZXJhdG9yIHNpdCA9IHNlcXVlbmNlLnJiZWdp
bigpOyBzaXQgIT0gc2VxdWVuY2UucmVuZCgpOyBzaXQrKykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAoKnNpdCktPnRyYXZlcnNlKGl0KTsKKworICAgICAgICAgICAgICAgIGlmICh2
aXNpdCAmJiBpdC0+aW5WaXNpdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICgqc2l0ICE9IHNlcXVlbmNlLmZyb250KCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICB2aXNpdCA9IGl0LT52aXNpdEFnZ3JlZ2F0ZShJblZpc2l0LCB0aGlzKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gc2VxdWVu
Y2UuYmVnaW4oKTsgc2l0ICE9IHNlcXVlbmNlLmVuZCgpOyBzaXQrKykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAoKnNpdCktPnRyYXZlcnNlKGl0KTsKKworICAgICAgICAgICAgICAg
IGlmICh2aXNpdCAmJiBpdC0+aW5WaXNpdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGlmICgqc2l0ICE9IHNlcXVlbmNlLmJhY2soKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0QWdncmVnYXRlKEluVmlzaXQsIHRoaXMpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aXQtPmRlY3JlbWVudERlcHRoKCk7CisgICAgfQorCisgICAgaWYgKHZpc2l0ICYmIGl0LT5wb3N0
VmlzaXQpCisgICAgICAgIGl0LT52aXNpdEFnZ3JlZ2F0ZShQb3N0VmlzaXQsIHRoaXMpOworfQor
CisvLworLy8gVHJhdmVyc2UgYSBzZWxlY3Rpb24gbm9kZS4gIFNhbWUgY29tbWVudHMgaW4gYmlu
YXJ5IG5vZGUgYXBwbHkgaGVyZS4KKy8vCit2b2lkIFRJbnRlcm1TZWxlY3Rpb246OnRyYXZlcnNl
KFRJbnRlcm1UcmF2ZXJzZXIgKml0KQoreworICAgIGJvb2wgdmlzaXQgPSB0cnVlOworCisgICAg
aWYgKGl0LT5wcmVWaXNpdCkKKyAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRTZWxlY3Rpb24oUHJl
VmlzaXQsIHRoaXMpOworICAgIAorICAgIGlmICh2aXNpdCkgeworICAgICAgICBpdC0+aW5jcmVt
ZW50RGVwdGgodGhpcyk7CisgICAgICAgIGlmIChpdC0+cmlnaHRUb0xlZnQpIHsKKyAgICAgICAg
ICAgIGlmIChmYWxzZUJsb2NrKQorICAgICAgICAgICAgICAgIGZhbHNlQmxvY2stPnRyYXZlcnNl
KGl0KTsKKyAgICAgICAgICAgIGlmICh0cnVlQmxvY2spCisgICAgICAgICAgICAgICAgdHJ1ZUJs
b2NrLT50cmF2ZXJzZShpdCk7CisgICAgICAgICAgICBjb25kaXRpb24tPnRyYXZlcnNlKGl0KTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbmRpdGlvbi0+dHJhdmVyc2UoaXQpOwor
ICAgICAgICAgICAgaWYgKHRydWVCbG9jaykKKyAgICAgICAgICAgICAgICB0cnVlQmxvY2stPnRy
YXZlcnNlKGl0KTsKKyAgICAgICAgICAgIGlmIChmYWxzZUJsb2NrKQorICAgICAgICAgICAgICAg
IGZhbHNlQmxvY2stPnRyYXZlcnNlKGl0KTsKKyAgICAgICAgfQorICAgICAgICBpdC0+ZGVjcmVt
ZW50RGVwdGgoKTsKKyAgICB9CisKKyAgICBpZiAodmlzaXQgJiYgaXQtPnBvc3RWaXNpdCkKKyAg
ICAgICAgaXQtPnZpc2l0U2VsZWN0aW9uKFBvc3RWaXNpdCwgdGhpcyk7Cit9CisKKy8vCisvLyBU
cmF2ZXJzZSBhIGxvb3Agbm9kZS4gIFNhbWUgY29tbWVudHMgaW4gYmluYXJ5IG5vZGUgYXBwbHkg
aGVyZS4KKy8vCit2b2lkIFRJbnRlcm1Mb29wOjp0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyICpp
dCkKK3sKKyAgICBib29sIHZpc2l0ID0gdHJ1ZTsKKworICAgIGlmIChpdC0+cHJlVmlzaXQpCisg
ICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0TG9vcChQcmVWaXNpdCwgdGhpcyk7CisgICAgCisgICAg
aWYgKHZpc2l0KQorICAgIHsKKyAgICAgICAgaXQtPmluY3JlbWVudERlcHRoKHRoaXMpOworCisg
ICAgICAgIGlmIChpdC0+cmlnaHRUb0xlZnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChl
eHByKQorICAgICAgICAgICAgICAgIGV4cHItPnRyYXZlcnNlKGl0KTsKKworICAgICAgICAgICAg
aWYgKGJvZHkpCisgICAgICAgICAgICAgICAgYm9keS0+dHJhdmVyc2UoaXQpOworCisgICAgICAg
ICAgICBpZiAoY29uZCkKKyAgICAgICAgICAgICAgICBjb25kLT50cmF2ZXJzZShpdCk7CisKKyAg
ICAgICAgICAgIGlmIChpbml0KQorICAgICAgICAgICAgICAgIGluaXQtPnRyYXZlcnNlKGl0KTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbml0
KQorICAgICAgICAgICAgICAgIGluaXQtPnRyYXZlcnNlKGl0KTsKKworICAgICAgICAgICAgaWYg
KGNvbmQpCisgICAgICAgICAgICAgICAgY29uZC0+dHJhdmVyc2UoaXQpOworCisgICAgICAgICAg
ICBpZiAoYm9keSkKKyAgICAgICAgICAgICAgICBib2R5LT50cmF2ZXJzZShpdCk7CisKKyAgICAg
ICAgICAgIGlmIChleHByKQorICAgICAgICAgICAgICAgIGV4cHItPnRyYXZlcnNlKGl0KTsKKyAg
ICAgICAgfQorCisgICAgICAgIGl0LT5kZWNyZW1lbnREZXB0aCgpOworICAgIH0KKworICAgIGlm
ICh2aXNpdCAmJiBpdC0+cG9zdFZpc2l0KQorICAgICAgICBpdC0+dmlzaXRMb29wKFBvc3RWaXNp
dCwgdGhpcyk7Cit9CisKKy8vCisvLyBUcmF2ZXJzZSBhIGJyYW5jaCBub2RlLiAgU2FtZSBjb21t
ZW50cyBpbiBiaW5hcnkgbm9kZSBhcHBseSBoZXJlLgorLy8KK3ZvaWQgVEludGVybUJyYW5jaDo6
dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciAqaXQpCit7CisgICAgYm9vbCB2aXNpdCA9IHRydWU7
CisKKyAgICBpZiAoaXQtPnByZVZpc2l0KQorICAgICAgICB2aXNpdCA9IGl0LT52aXNpdEJyYW5j
aChQcmVWaXNpdCwgdGhpcyk7CisgICAgCisgICAgaWYgKHZpc2l0ICYmIGV4cHJlc3Npb24pIHsK
KyAgICAgICAgaXQtPmluY3JlbWVudERlcHRoKHRoaXMpOworICAgICAgICBleHByZXNzaW9uLT50
cmF2ZXJzZShpdCk7CisgICAgICAgIGl0LT5kZWNyZW1lbnREZXB0aCgpOworICAgIH0KKworICAg
IGlmICh2aXNpdCAmJiBpdC0+cG9zdFZpc2l0KQorICAgICAgICBpdC0+dmlzaXRCcmFuY2goUG9z
dFZpc2l0LCB0aGlzKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtZWRpYXRlLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybWVkaWF0ZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNzc3Y2FiNTQ1ODUxZTQ3NzBkMzVmNDJhZGY4OGQ5YmYxNzViNmUyNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L0ludGVybWVkaWF0ZS5jcHAKQEAgLTAsMCArMSwxNTAwIEBACisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisvLworLy8gQnVpbGQgdGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbi4KKy8vCisKKyNp
bmNsdWRlIDxmbG9hdC5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPGFsZ29yaXRo
bT4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSGFzaE5hbWVzLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9sb2NhbGludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvUXVhbGlmaWVyQWxpdmUuaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1JlbW92ZVRyZWUuaCIKKworYm9vbCBDb21wYXJlU3RydWN0dXJlKGNvbnN0IFRU
eXBlJiBsZWZ0Tm9kZVR5cGUsIENvbnN0YW50VW5pb24qIHJpZ2h0VW5pb25BcnJheSwgQ29uc3Rh
bnRVbmlvbiogbGVmdFVuaW9uQXJyYXkpOworCitzdGF0aWMgVFByZWNpc2lvbiBHZXRIaWdoZXJQ
cmVjaXNpb24oVFByZWNpc2lvbiBsZWZ0LCBUUHJlY2lzaW9uIHJpZ2h0KQoreworICAgIHJldHVy
biBsZWZ0ID4gcmlnaHQgPyBsZWZ0IDogcmlnaHQ7Cit9CisKK2NvbnN0IGNoYXIqIGdldE9wZXJh
dG9yU3RyaW5nKFRPcGVyYXRvciBvcCkKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICBjYXNl
IEVPcEluaXRpYWxpemU6IHJldHVybiAiPSI7CisgICAgICBjYXNlIEVPcEFzc2lnbjogcmV0dXJu
ICI9IjsKKyAgICAgIGNhc2UgRU9wQWRkQXNzaWduOiByZXR1cm4gIis9IjsKKyAgICAgIGNhc2Ug
RU9wU3ViQXNzaWduOiByZXR1cm4gIi09IjsKKyAgICAgIGNhc2UgRU9wRGl2QXNzaWduOiByZXR1
cm4gIi89IjsKKworICAgICAgLy8gRmFsbC10aHJvdWdoLgorICAgICAgY2FzZSBFT3BNdWxBc3Np
Z246IAorICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjoKKyAgICAgIGNhc2Ug
RU9wVmVjdG9yVGltZXNTY2FsYXJBc3NpZ246CisgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2Nh
bGFyQXNzaWduOgorICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjogcmV0dXJu
ICIqPSI7CisKKyAgICAgIC8vIEZhbGwtdGhyb3VnaC4KKyAgICAgIGNhc2UgRU9wSW5kZXhEaXJl
Y3Q6CisgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6IHJldHVybiAiW10iOworCisgICAgICBj
YXNlIEVPcEluZGV4RGlyZWN0U3RydWN0OiByZXR1cm4gIi4iOworICAgICAgY2FzZSBFT3BWZWN0
b3JTd2l6emxlOiByZXR1cm4gIi4iOworICAgICAgY2FzZSBFT3BBZGQ6IHJldHVybiAiKyI7Cisg
ICAgICBjYXNlIEVPcFN1YjogcmV0dXJuICItIjsKKyAgICAgIGNhc2UgRU9wTXVsOiByZXR1cm4g
IioiOworICAgICAgY2FzZSBFT3BEaXY6IHJldHVybiAiLyI7CisgICAgICBjYXNlIEVPcE1vZDog
VU5JTVBMRU1FTlRFRCgpOyBicmVhazsKKyAgICAgIGNhc2UgRU9wRXF1YWw6IHJldHVybiAiPT0i
OworICAgICAgY2FzZSBFT3BOb3RFcXVhbDogcmV0dXJuICIhPSI7CisgICAgICBjYXNlIEVPcExl
c3NUaGFuOiByZXR1cm4gIjwiOworICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjogcmV0dXJuICI+
IjsKKyAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDogcmV0dXJuICI8PSI7CisgICAgICBjYXNl
IEVPcEdyZWF0ZXJUaGFuRXF1YWw6IHJldHVybiAiPj0iOworCisgICAgICAvLyBGYWxsLXRocm91
Z2guCisgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyOgorICAgICAgY2FzZSBFT3BWZWN0
b3JUaW1lc01hdHJpeDoKKyAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNWZWN0b3I6CisgICAgICBj
YXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyOgorICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJp
eDogcmV0dXJuICIqIjsKKworICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6IHJldHVybiAifHwiOwor
ICAgICAgY2FzZSBFT3BMb2dpY2FsWG9yOiByZXR1cm4gIl5eIjsKKyAgICAgIGNhc2UgRU9wTG9n
aWNhbEFuZDogcmV0dXJuICImJiI7CisgICAgICBjYXNlIEVPcE5lZ2F0aXZlOiByZXR1cm4gIi0i
OworICAgICAgY2FzZSBFT3BWZWN0b3JMb2dpY2FsTm90OiByZXR1cm4gIm5vdCI7CisgICAgICBj
YXNlIEVPcExvZ2ljYWxOb3Q6IHJldHVybiAiISI7CisgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1l
bnQ6IHJldHVybiAiKysiOworICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OiByZXR1cm4gIi0t
IjsKKyAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OiByZXR1cm4gIisrIjsKKyAgICAgIGNhc2Ug
RU9wUHJlRGVjcmVtZW50OiByZXR1cm4gIi0tIjsKKworICAgICAgLy8gRmFsbC10aHJvdWdoLgor
ICAgICAgY2FzZSBFT3BDb252SW50VG9Cb29sOgorICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0Jv
b2w6IHJldHVybiAiYm9vbCI7CisgCisgICAgICAvLyBGYWxsLXRocm91Z2guCisgICAgICBjYXNl
IEVPcENvbnZCb29sVG9GbG9hdDoKKyAgICAgIGNhc2UgRU9wQ29udkludFRvRmxvYXQ6IHJldHVy
biAiZmxvYXQiOworIAorICAgICAgLy8gRmFsbC10aHJvdWdoLgorICAgICAgY2FzZSBFT3BDb252
RmxvYXRUb0ludDoKKyAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0ludDogcmV0dXJuICJpbnQiOwor
CisgICAgICBjYXNlIEVPcFJhZGlhbnM6IHJldHVybiAicmFkaWFucyI7CisgICAgICBjYXNlIEVP
cERlZ3JlZXM6IHJldHVybiAiZGVncmVlcyI7CisgICAgICBjYXNlIEVPcFNpbjogcmV0dXJuICJz
aW4iOworICAgICAgY2FzZSBFT3BDb3M6IHJldHVybiAiY29zIjsKKyAgICAgIGNhc2UgRU9wVGFu
OiByZXR1cm4gInRhbiI7CisgICAgICBjYXNlIEVPcEFzaW46IHJldHVybiAiYXNpbiI7CisgICAg
ICBjYXNlIEVPcEFjb3M6IHJldHVybiAiYWNvcyI7CisgICAgICBjYXNlIEVPcEF0YW46IHJldHVy
biAiYXRhbiI7CisgICAgICBjYXNlIEVPcEV4cDogcmV0dXJuICJleHAiOworICAgICAgY2FzZSBF
T3BMb2c6IHJldHVybiAibG9nIjsKKyAgICAgIGNhc2UgRU9wRXhwMjogcmV0dXJuICJleHAyIjsK
KyAgICAgIGNhc2UgRU9wTG9nMjogcmV0dXJuICJsb2cyIjsKKyAgICAgIGNhc2UgRU9wU3FydDog
cmV0dXJuICJzcXJ0IjsKKyAgICAgIGNhc2UgRU9wSW52ZXJzZVNxcnQ6IHJldHVybiAiaW52ZXJz
ZXNxcnQiOworICAgICAgY2FzZSBFT3BBYnM6IHJldHVybiAiYWJzIjsKKyAgICAgIGNhc2UgRU9w
U2lnbjogcmV0dXJuICJzaWduIjsKKyAgICAgIGNhc2UgRU9wRmxvb3I6IHJldHVybiAiZmxvb3Ii
OworICAgICAgY2FzZSBFT3BDZWlsOiByZXR1cm4gImNlaWwiOworICAgICAgY2FzZSBFT3BGcmFj
dDogcmV0dXJuICJmcmFjdCI7CisgICAgICBjYXNlIEVPcExlbmd0aDogcmV0dXJuICJsZW5ndGgi
OworICAgICAgY2FzZSBFT3BOb3JtYWxpemU6IHJldHVybiAibm9ybWFsaXplIjsKKyAgICAgIGNh
c2UgRU9wREZkeDogcmV0dXJuICJkRmR4IjsKKyAgICAgIGNhc2UgRU9wREZkeTogcmV0dXJuICJk
RmR5IjsKKyAgICAgIGNhc2UgRU9wRndpZHRoOiByZXR1cm4gImZ3aWR0aCI7CisgICAgICBjYXNl
IEVPcEFueTogcmV0dXJuICJhbnkiOworICAgICAgY2FzZSBFT3BBbGw6IHJldHVybiAiYWxsIjsK
KworICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorICAgIHJldHVybiAiIjsKK30KKworLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLworLy8KKy8vIEZpcnN0IHNldCBvZiBmdW5jdGlvbnMgYXJlIHRvIGhl
bHAgYnVpbGQgdGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbi4KKy8vIFRoZXNlIGZ1bmN0
aW9ucyBhcmUgbm90IG1lbWJlciBmdW5jdGlvbnMgb2YgdGhlIG5vZGVzLgorLy8gVGhleSBhcmUg
Y2FsbGVkIGZyb20gcGFyc2VyIHByb2R1Y3Rpb25zLgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisKKy8vCisvLyBBZGQgYSB0ZXJtaW5hbCBub2RlIGZvciBhbiBpZGVudGlmaWVyIGluIGFuIGV4
cHJlc3Npb24uCisvLworLy8gUmV0dXJucyB0aGUgYWRkZWQgbm9kZS4KKy8vCitUSW50ZXJtU3lt
Ym9sKiBUSW50ZXJtZWRpYXRlOjphZGRTeW1ib2woaW50IGlkLCBjb25zdCBUU3RyaW5nJiBuYW1l
LCBjb25zdCBUVHlwZSYgdHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKK3sKKyAgICBUSW50
ZXJtU3ltYm9sKiBub2RlID0gbmV3IFRJbnRlcm1TeW1ib2woaWQsIG5hbWUsIHR5cGUpOworICAg
IG5vZGUtPnNldExpbmUobGluZSk7CisKKyAgICByZXR1cm4gbm9kZTsKK30KKworLy8KKy8vIENv
bm5lY3QgdHdvIG5vZGVzIHdpdGggYSBuZXcgcGFyZW50IHRoYXQgZG9lcyBhIGJpbmFyeSBvcGVy
YXRpb24gb24gdGhlIG5vZGVzLgorLy8KKy8vIFJldHVybnMgdGhlIGFkZGVkIG5vZGUuCisvLwor
VEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRCaW5hcnlNYXRoKFRPcGVyYXRvciBvcCwg
VEludGVybVR5cGVkKiBsZWZ0LCBUSW50ZXJtVHlwZWQqIHJpZ2h0LCBjb25zdCBUU291cmNlTG9j
JiBsaW5lLCBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQoreworICAgIHN3aXRjaCAob3ApIHsK
KyAgICAgICAgY2FzZSBFT3BFcXVhbDoKKyAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKKyAgICAg
ICAgICAgIGlmIChsZWZ0LT5pc0FycmF5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjoKKyAgICAgICAgY2Fz
ZSBFT3BHcmVhdGVyVGhhbjoKKyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgorICAgICAg
ICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6CisgICAgICAgICAgICBpZiAobGVmdC0+aXNNYXRy
aXgoKSB8fCBsZWZ0LT5pc0FycmF5KCkgfHwgbGVmdC0+aXNWZWN0b3IoKSB8fCBsZWZ0LT5nZXRC
YXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcExvZ2ljYWxP
cjoKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsWG9yOgorICAgICAgICBjYXNlIEVPcExvZ2ljYWxB
bmQ6CisgICAgICAgICAgICBpZiAobGVmdC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Qm9vbCB8fCBs
ZWZ0LT5pc01hdHJpeCgpIHx8IGxlZnQtPmlzQXJyYXkoKSB8fCBsZWZ0LT5pc1ZlY3RvcigpKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BBZGQ6CisgICAgICAgIGNhc2UgRU9wU3ViOgorICAgICAg
ICBjYXNlIEVPcERpdjoKKyAgICAgICAgY2FzZSBFT3BNdWw6CisgICAgICAgICAgICBpZiAobGVm
dC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0IHx8IGxlZnQtPmdldEJhc2ljVHlwZSgpID09
IEVidEJvb2wpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGRlZmF1bHQ6IGJy
ZWFrOworICAgIH0KKworICAgIC8vCisgICAgLy8gRmlyc3QgdHJ5IGNvbnZlcnRpbmcgdGhlIGNo
aWxkcmVuIHRvIGNvbXBhdGlibGUgdHlwZXMuCisgICAgLy8KKyAgICBpZiAobGVmdC0+Z2V0VHlw
ZSgpLmdldFN0cnVjdCgpICYmIHJpZ2h0LT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkpIHsKKyAgICAg
ICAgaWYgKGxlZnQtPmdldFR5cGUoKSAhPSByaWdodC0+Z2V0VHlwZSgpKQorICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgVEludGVybVR5cGVkKiBjaGlsZCA9IGFk
ZENvbnZlcnNpb24ob3AsIGxlZnQtPmdldFR5cGUoKSwgcmlnaHQpOworICAgICAgICBpZiAoY2hp
bGQpCisgICAgICAgICAgICByaWdodCA9IGNoaWxkOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIGNoaWxkID0gYWRkQ29udmVyc2lvbihvcCwgcmlnaHQtPmdldFR5cGUoKSwgbGVmdCk7Cisg
ICAgICAgICAgICBpZiAoY2hpbGQpCisgICAgICAgICAgICAgICAgbGVmdCA9IGNoaWxkOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAg
fQorCisgICAgLy8KKyAgICAvLyBOZWVkIGEgbmV3IG5vZGUgaG9sZGluZyB0aGluZ3MgdG9nZXRo
ZXIgdGhlbi4gIE1ha2UKKyAgICAvLyBvbmUgYW5kIHByb21vdGUgaXQgdG8gdGhlIHJpZ2h0IHR5
cGUuCisgICAgLy8KKyAgICBUSW50ZXJtQmluYXJ5KiBub2RlID0gbmV3IFRJbnRlcm1CaW5hcnko
b3ApOworICAgIG5vZGUtPnNldExpbmUobGluZSk7CisKKyAgICBub2RlLT5zZXRMZWZ0KGxlZnQp
OworICAgIG5vZGUtPnNldFJpZ2h0KHJpZ2h0KTsKKyAgICBpZiAoIW5vZGUtPnByb21vdGUoaW5m
b1NpbmspKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vCisgICAgLy8gU2VlIGlmIHdlIGNh
biBmb2xkIGNvbnN0YW50cy4KKyAgICAvLworICAgIFRJbnRlcm1UeXBlZCogdHlwZWRSZXR1cm5O
b2RlID0gMDsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbGVmdFRlbXBDb25zdGFudCA9IGxl
ZnQtPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpyaWdo
dFRlbXBDb25zdGFudCA9IHJpZ2h0LT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKyAgICBpZiAobGVm
dFRlbXBDb25zdGFudCAmJiByaWdodFRlbXBDb25zdGFudCkgeworICAgICAgICB0eXBlZFJldHVy
bk5vZGUgPSBsZWZ0VGVtcENvbnN0YW50LT5mb2xkKG5vZGUtPmdldE9wKCksIHJpZ2h0VGVtcENv
bnN0YW50LCBpbmZvU2luayk7CisKKyAgICAgICAgaWYgKHR5cGVkUmV0dXJuTm9kZSkKKyAgICAg
ICAgICAgIHJldHVybiB0eXBlZFJldHVybk5vZGU7CisgICAgfQorCisgICAgcmV0dXJuIG5vZGU7
Cit9CisKKy8vCisvLyBDb25uZWN0IHR3byBub2RlcyB0aHJvdWdoIGFuIGFzc2lnbm1lbnQuCisv
LworLy8gUmV0dXJucyB0aGUgYWRkZWQgbm9kZS4KKy8vCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1l
ZGlhdGU6OmFkZEFzc2lnbihUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVy
bVR5cGVkKiByaWdodCwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKK3sKKyAgICAvLworICAgIC8v
IExpa2UgYWRkaW5nIGJpbmFyeSBtYXRoLCBleGNlcHQgdGhlIGNvbnZlcnNpb24gY2FuIG9ubHkg
Z28KKyAgICAvLyBmcm9tIHJpZ2h0IHRvIGxlZnQuCisgICAgLy8KKyAgICBUSW50ZXJtQmluYXJ5
KiBub2RlID0gbmV3IFRJbnRlcm1CaW5hcnkob3ApOworICAgIG5vZGUtPnNldExpbmUobGluZSk7
CisKKyAgICBUSW50ZXJtVHlwZWQqIGNoaWxkID0gYWRkQ29udmVyc2lvbihvcCwgbGVmdC0+Z2V0
VHlwZSgpLCByaWdodCk7CisgICAgaWYgKGNoaWxkID09IDApCisgICAgICAgIHJldHVybiAwOwor
CisgICAgbm9kZS0+c2V0TGVmdChsZWZ0KTsKKyAgICBub2RlLT5zZXRSaWdodChjaGlsZCk7Cisg
ICAgaWYgKCEgbm9kZS0+cHJvbW90ZShpbmZvU2luaykpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgcmV0dXJuIG5vZGU7Cit9CisKKy8vCisvLyBDb25uZWN0IHR3byBub2RlcyB0aHJvdWdoIGFu
IGluZGV4IG9wZXJhdG9yLCB3aGVyZSB0aGUgbGVmdCBub2RlIGlzIHRoZSBiYXNlCisvLyBvZiBh
biBhcnJheSBvciBzdHJ1Y3QsIGFuZCB0aGUgcmlnaHQgbm9kZSBpcyBhIGRpcmVjdCBvciBpbmRp
cmVjdCBvZmZzZXQuCisvLworLy8gUmV0dXJucyB0aGUgYWRkZWQgbm9kZS4KKy8vIFRoZSBjYWxs
ZXIgc2hvdWxkIHNldCB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuZWQgbm9kZS4KKy8vCitUSW50ZXJt
VHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZEluZGV4KFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVk
KiBiYXNlLCBUSW50ZXJtVHlwZWQqIGluZGV4LCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQorewor
ICAgIFRJbnRlcm1CaW5hcnkqIG5vZGUgPSBuZXcgVEludGVybUJpbmFyeShvcCk7CisgICAgbm9k
ZS0+c2V0TGluZShsaW5lKTsKKyAgICBub2RlLT5zZXRMZWZ0KGJhc2UpOworICAgIG5vZGUtPnNl
dFJpZ2h0KGluZGV4KTsKKworICAgIC8vIGNhbGxlciBzaG91bGQgc2V0IHRoZSB0eXBlCisKKyAg
ICByZXR1cm4gbm9kZTsKK30KKworLy8KKy8vIEFkZCBvbmUgbm9kZSBhcyB0aGUgcGFyZW50IG9m
IGFub3RoZXIgdGhhdCBpdCBvcGVyYXRlcyBvbi4KKy8vCisvLyBSZXR1cm5zIHRoZSBhZGRlZCBu
b2RlLgorLy8KK1RJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkVW5hcnlNYXRoKFRPcGVy
YXRvciBvcCwgVEludGVybU5vZGUqIGNoaWxkTm9kZSwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSwg
VFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKK3sKKyAgICBUSW50ZXJtVW5hcnkqIG5vZGU7Cisg
ICAgVEludGVybVR5cGVkKiBjaGlsZCA9IGNoaWxkTm9kZS0+Z2V0QXNUeXBlZCgpOworCisgICAg
aWYgKGNoaWxkID09IDApIHsKKyAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJ
bnRlcm5hbEVycm9yLCBsaW5lLCAiQmFkIHR5cGUgaW4gQWRkVW5hcnlNYXRoIik7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKworICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBFT3BM
b2dpY2FsTm90OgorICAgICAgICAgICAgaWYgKGNoaWxkLT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBl
KCkgIT0gRWJ0Qm9vbCB8fCBjaGlsZC0+Z2V0VHlwZSgpLmlzTWF0cml4KCkgfHwgY2hpbGQtPmdl
dFR5cGUoKS5pc0FycmF5KCkgfHwgY2hpbGQtPmdldFR5cGUoKS5pc1ZlY3RvcigpKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6CisgICAgICAgIGNhc2UgRU9wUHJlSW5j
cmVtZW50OgorICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6CisgICAgICAgIGNhc2UgRU9w
UHJlRGVjcmVtZW50OgorICAgICAgICBjYXNlIEVPcE5lZ2F0aXZlOgorICAgICAgICAgICAgaWYg
KGNoaWxkLT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0IHx8IGNoaWxkLT5n
ZXRUeXBlKCkuaXNBcnJheSgpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBk
ZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICAvLworICAgIC8vIERvIHdlIG5lZWQgdG8gcHJv
bW90ZSB0aGUgb3BlcmFuZD8KKyAgICAvLworICAgIC8vIE5vdGU6IEltcGxpY2l0IHByb21vdGlv
bnMgd2VyZSByZW1vdmVkIGZyb20gdGhlIGxhbmd1YWdlLgorICAgIC8vCisgICAgVEJhc2ljVHlw
ZSBuZXdUeXBlID0gRWJ0Vm9pZDsKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9w
Q29uc3RydWN0SW50OiAgIG5ld1R5cGUgPSBFYnRJbnQ7ICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0Qm9vbDogIG5ld1R5cGUgPSBFYnRCb29sOyAgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wQ29uc3RydWN0RmxvYXQ6IG5ld1R5cGUgPSBFYnRGbG9hdDsgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAgIGlmIChuZXdUeXBlICE9IEVidFZvaWQpIHsK
KyAgICAgICAgY2hpbGQgPSBhZGRDb252ZXJzaW9uKG9wLCBUVHlwZShuZXdUeXBlLCBjaGlsZC0+
Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwKKyAgICAgICAgICAgIGNoaWxkLT5nZXROb21p
bmFsU2l6ZSgpLAorICAgICAgICAgICAgY2hpbGQtPmlzTWF0cml4KCksCisgICAgICAgICAgICBj
aGlsZC0+aXNBcnJheSgpKSwKKyAgICAgICAgICAgIGNoaWxkKTsKKyAgICAgICAgaWYgKGNoaWxk
ID09IDApCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLworICAgIC8vIEZv
ciBjb25zdHJ1Y3RvcnMsIHdlIGFyZSBub3cgZG9uZSwgaXQncyBhbGwgaW4gdGhlIGNvbnZlcnNp
b24uCisgICAgLy8KKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0
SW50OgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6CisgICAgICAgIGNhc2UgRU9wQ29u
c3RydWN0RmxvYXQ6CisgICAgICAgICAgICByZXR1cm4gY2hpbGQ7CisgICAgICAgIGRlZmF1bHQ6
IGJyZWFrOworICAgIH0KKworICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpjaGlsZFRlbXBDb25z
dGFudCA9IDA7CisgICAgaWYgKGNoaWxkLT5nZXRBc0NvbnN0YW50VW5pb24oKSkKKyAgICAgICAg
Y2hpbGRUZW1wQ29uc3RhbnQgPSBjaGlsZC0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisKKyAgICAv
LworICAgIC8vIE1ha2UgYSBuZXcgbm9kZSBmb3IgdGhlIG9wZXJhdG9yLgorICAgIC8vCisgICAg
bm9kZSA9IG5ldyBUSW50ZXJtVW5hcnkob3ApOworICAgIG5vZGUtPnNldExpbmUobGluZSk7Cisg
ICAgbm9kZS0+c2V0T3BlcmFuZChjaGlsZCk7CisKKyAgICBpZiAoISBub2RlLT5wcm9tb3RlKGlu
Zm9TaW5rKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoY2hpbGRUZW1wQ29uc3RhbnQp
ICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCogbmV3Q2hpbGQgPSBjaGlsZFRlbXBDb25zdGFudC0+
Zm9sZChvcCwgMCwgaW5mb1NpbmspOworCisgICAgICAgIGlmIChuZXdDaGlsZCkKKyAgICAgICAg
ICAgIHJldHVybiBuZXdDaGlsZDsKKyAgICB9CisKKyAgICByZXR1cm4gbm9kZTsKK30KKworLy8K
Ky8vIFRoaXMgaXMgdGhlIHNhZmUgd2F5IHRvIGNoYW5nZSB0aGUgb3BlcmF0b3Igb24gYW4gYWdn
cmVnYXRlLCBhcyBpdAorLy8gZG9lcyBsb3RzIG9mIGVycm9yIGNoZWNraW5nIGFuZCBmaXhpbmcu
ICBFc3BlY2lhbGx5IGZvciBlc3RhYmxpc2hpbmcKKy8vIGEgZnVuY3Rpb24gY2FsbCdzIG9wZXJh
dGlvbiBvbiBpdCdzIHNldCBvZiBwYXJhbWV0ZXJzLiAgU2VxdWVuY2VzCisvLyBvZiBpbnN0cnVj
dGlvbnMgYXJlIGFsc28gYWdncmVnYXRlcywgYnV0IHRoZXkganVzdCBkaXJlbmN0bHkgc2V0Cisv
LyB0aGVpciBvcGVyYXRvciB0byBFT3BTZXF1ZW5jZS4KKy8vCisvLyBSZXR1cm5zIGFuIGFnZ3Jl
Z2F0ZSBub2RlLCB3aGljaCBjb3VsZCBiZSB0aGUgb25lIHBhc3NlZCBpbiBpZgorLy8gaXQgd2Fz
IGFscmVhZHkgYW4gYWdncmVnYXRlIGJ1dCBubyBvcGVyYXRvciB3YXMgc2V0LgorLy8KK1RJbnRl
cm1BZ2dyZWdhdGUqIFRJbnRlcm1lZGlhdGU6OnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKFRJbnRlcm1O
b2RlKiBub2RlLCBUT3BlcmF0b3Igb3AsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCit7CisgICAg
VEludGVybUFnZ3JlZ2F0ZSogYWdnTm9kZTsKKworICAgIC8vCisgICAgLy8gTWFrZSBzdXJlIHdl
IGhhdmUgYW4gYWdncmVnYXRlLiAgSWYgbm90IHR1cm4gaXQgaW50byBvbmUuCisgICAgLy8KKyAg
ICBpZiAobm9kZSkgeworICAgICAgICBhZ2dOb2RlID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsK
KyAgICAgICAgaWYgKGFnZ05vZGUgPT0gMCB8fCBhZ2dOb2RlLT5nZXRPcCgpICE9IEVPcE51bGwp
IHsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBNYWtlIGFuIGFnZ3JlZ2F0ZSBjb250
YWluaW5nIHRoaXMgbm9kZS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBhZ2dOb2RlID0g
bmV3IFRJbnRlcm1BZ2dyZWdhdGUoKTsKKyAgICAgICAgICAgIGFnZ05vZGUtPmdldFNlcXVlbmNl
KCkucHVzaF9iYWNrKG5vZGUpOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIGFnZ05v
ZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZSgpOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIG9w
ZXJhdG9yLgorICAgIC8vCisgICAgYWdnTm9kZS0+c2V0T3Aob3ApOworICAgIGFnZ05vZGUtPnNl
dExpbmUobGluZSk7CisKKyAgICByZXR1cm4gYWdnTm9kZTsKK30KKworLy8KKy8vIENvbnZlcnQg
b25lIHR5cGUgdG8gYW5vdGhlci4KKy8vCisvLyBSZXR1cm5zIHRoZSBub2RlIHJlcHJlc2VudGlu
ZyB0aGUgY29udmVyc2lvbiwgd2hpY2ggY291bGQgYmUgdGhlIHNhbWUKKy8vIG5vZGUgcGFzc2Vk
IGluIGlmIG5vIGNvbnZlcnNpb24gd2FzIG5lZWRlZC4KKy8vCisvLyBSZXR1cm4gMCBpZiBhIGNv
bnZlcnNpb24gY2FuJ3QgYmUgZG9uZS4KKy8vCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6
OmFkZENvbnZlcnNpb24oVE9wZXJhdG9yIG9wLCBjb25zdCBUVHlwZSYgdHlwZSwgVEludGVybVR5
cGVkKiBub2RlKQoreworICAgIC8vCisgICAgLy8gRG9lcyB0aGUgYmFzZSB0eXBlIGFsbG93IG9w
ZXJhdGlvbj8KKyAgICAvLworICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKKyAg
ICAgICAgY2FzZSBFYnRWb2lkOgorICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAgICAgICAg
Y2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBkZWZh
dWx0OiBicmVhazsKKyAgICB9CisKKyAgICAvLworICAgIC8vIE90aGVyd2lzZSwgaWYgdHlwZXMg
YXJlIGlkZW50aWNhbCwgbm8gcHJvYmxlbQorICAgIC8vCisgICAgaWYgKHR5cGUgPT0gbm9kZS0+
Z2V0VHlwZSgpKQorICAgICAgICByZXR1cm4gbm9kZTsKKworICAgIC8vCisgICAgLy8gSWYgb25l
J3MgYSBzdHJ1Y3R1cmUsIHRoZW4gbm8gY29udmVyc2lvbnMuCisgICAgLy8KKyAgICBpZiAodHlw
ZS5nZXRTdHJ1Y3QoKSB8fCBub2RlLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgLy8KKyAgICAvLyBJZiBvbmUncyBhbiBhcnJheSwgdGhlbiBubyBjb252
ZXJzaW9ucy4KKyAgICAvLworICAgIGlmICh0eXBlLmlzQXJyYXkoKSB8fCBub2RlLT5nZXRUeXBl
KCkuaXNBcnJheSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRCYXNpY1R5cGUgcHJvbW90
ZVRvOworCisgICAgc3dpdGNoIChvcCkgeworICAgICAgICAvLworICAgICAgICAvLyBFeHBsaWNp
dCBjb252ZXJzaW9ucworICAgICAgICAvLworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6
CisgICAgICAgICAgICBwcm9tb3RlVG8gPSBFYnRCb29sOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6CisgICAgICAgICAgICBwcm9tb3RlVG8gPSBF
YnRGbG9hdDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElu
dDoKKyAgICAgICAgICAgIHByb21vdGVUbyA9IEVidEludDsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIGltcGxpY2l0
IGNvbnZlcnNpb25zIHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBsYW5ndWFnZS4KKyAgICAgICAgICAg
IC8vCisgICAgICAgICAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSAhPSBub2RlLT5nZXRUeXBl
KCkuZ2V0QmFzaWNUeXBlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICAvLworICAgICAgICAgICAgLy8gU2l6ZSBhbmQgc3RydWN0dXJlIGNvdWxkIHN0aWxsIGRpZmZl
ciwgYnV0IHRoYXQncworICAgICAgICAgICAgLy8gaGFuZGxlZCBieSBvcGVyYXRvciBwcm9tb3Rp
b24uCisgICAgICAgICAgICAvLworICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorCisg
ICAgaWYgKG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpKSB7CisKKyAgICAgICAgcmV0dXJuIChw
cm9tb3RlQ29uc3RhbnRVbmlvbihwcm9tb3RlVG8sIG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigp
KSk7CisgICAgfSBlbHNlIHsKKworICAgICAgICAvLworICAgICAgICAvLyBBZGQgYSBuZXcgbmV3
Tm9kZSBmb3IgdGhlIGNvbnZlcnNpb24uCisgICAgICAgIC8vCisgICAgICAgIFRJbnRlcm1VbmFy
eSogbmV3Tm9kZSA9IDA7CisKKyAgICAgICAgVE9wZXJhdG9yIG5ld09wID0gRU9wTnVsbDsKKyAg
ICAgICAgc3dpdGNoIChwcm9tb3RlVG8pIHsKKyAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6Cisg
ICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAg
ICAgICAgICAgICBjYXNlIEVidEludDogICBuZXdPcCA9IEVPcENvbnZJbnRUb0Zsb2F0OyAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogIG5ld09wID0gRU9wQ29udkJv
b2xUb0Zsb2F0OyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJv
ciwgbm9kZS0+Z2V0TGluZSgpLCAiQmFkIHByb21vdGlvbiBub2RlIik7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidElu
dDogICBuZXdPcCA9IEVPcENvbnZJbnRUb0Jvb2w7ICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgRWJ0RmxvYXQ6IG5ld09wID0gRU9wQ29udkZsb2F0VG9Cb29sOyBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9T
aW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAi
QmFkIHByb21vdGlvbiBub2RlIik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIEVidEludDoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldEJhc2ljVHlwZSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogICBuZXdPcCA9IEVPcENvbnZC
b29sVG9JbnQ7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogIG5l
d09wID0gRU9wQ29udkZsb2F0VG9JbnQ7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVm
aXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRMaW5lKCksICJCYWQgcHJvbW90aW9uIG5vZGUiKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRM
aW5lKCksICJCYWQgcHJvbW90aW9uIHR5cGUiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgfQorCisgICAgICAgIFRUeXBlIHR5cGUocHJvbW90ZVRvLCBub2RlLT5nZXRQcmVj
aXNpb24oKSwgRXZxVGVtcG9yYXJ5LCBub2RlLT5nZXROb21pbmFsU2l6ZSgpLCBub2RlLT5pc01h
dHJpeCgpLCBub2RlLT5pc0FycmF5KCkpOworICAgICAgICBuZXdOb2RlID0gbmV3IFRJbnRlcm1V
bmFyeShuZXdPcCwgdHlwZSk7CisgICAgICAgIG5ld05vZGUtPnNldExpbmUobm9kZS0+Z2V0TGlu
ZSgpKTsKKyAgICAgICAgbmV3Tm9kZS0+c2V0T3BlcmFuZChub2RlKTsKKworICAgICAgICByZXR1
cm4gbmV3Tm9kZTsKKyAgICB9Cit9CisKKy8vCisvLyBTYWZlIHdheSB0byBjb21iaW5lIHR3byBu
b2RlcyBpbnRvIGFuIGFnZ3JlZ2F0ZS4gIFdvcmtzIHdpdGggbnVsbCBwb2ludGVycywKKy8vIGEg
bm9kZSB0aGF0J3Mgbm90IGEgYWdncmVnYXRlIHlldCwgZXRjLgorLy8KKy8vIFJldHVybnMgdGhl
IHJlc3VsdGluZyBhZ2dyZWdhdGUsIHVubGVzcyAwIHdhcyBwYXNzZWQgaW4gZm9yCisvLyBib3Ro
IGV4aXN0aW5nIG5vZGVzLgorLy8KK1RJbnRlcm1BZ2dyZWdhdGUqIFRJbnRlcm1lZGlhdGU6Omdy
b3dBZ2dyZWdhdGUoVEludGVybU5vZGUqIGxlZnQsIFRJbnRlcm1Ob2RlKiByaWdodCwgY29uc3Qg
VFNvdXJjZUxvYyYgbGluZSkKK3sKKyAgICBpZiAobGVmdCA9PSAwICYmIHJpZ2h0ID09IDApCisg
ICAgICAgIHJldHVybiAwOworCisgICAgVEludGVybUFnZ3JlZ2F0ZSogYWdnTm9kZSA9IDA7Cisg
ICAgaWYgKGxlZnQpCisgICAgICAgIGFnZ05vZGUgPSBsZWZ0LT5nZXRBc0FnZ3JlZ2F0ZSgpOwor
ICAgIGlmICghYWdnTm9kZSB8fCBhZ2dOb2RlLT5nZXRPcCgpICE9IEVPcE51bGwpIHsKKyAgICAg
ICAgYWdnTm9kZSA9IG5ldyBUSW50ZXJtQWdncmVnYXRlOworICAgICAgICBpZiAobGVmdCkKKyAg
ICAgICAgICAgIGFnZ05vZGUtPmdldFNlcXVlbmNlKCkucHVzaF9iYWNrKGxlZnQpOworICAgIH0K
KworICAgIGlmIChyaWdodCkKKyAgICAgICAgYWdnTm9kZS0+Z2V0U2VxdWVuY2UoKS5wdXNoX2Jh
Y2socmlnaHQpOworCisgICAgYWdnTm9kZS0+c2V0TGluZShsaW5lKTsKKworICAgIHJldHVybiBh
Z2dOb2RlOworfQorCisvLworLy8gVHVybiBhbiBleGlzdGluZyBub2RlIGludG8gYW4gYWdncmVn
YXRlLgorLy8KKy8vIFJldHVybnMgYW4gYWdncmVnYXRlLCB1bmxlc3MgMCB3YXMgcGFzc2VkIGlu
IGZvciB0aGUgZXhpc3Rpbmcgbm9kZS4KKy8vCitUSW50ZXJtQWdncmVnYXRlKiBUSW50ZXJtZWRp
YXRlOjptYWtlQWdncmVnYXRlKFRJbnRlcm1Ob2RlKiBub2RlLCBjb25zdCBUU291cmNlTG9jJiBs
aW5lKQoreworICAgIGlmIChub2RlID09IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgVElu
dGVybUFnZ3JlZ2F0ZSogYWdnTm9kZSA9IG5ldyBUSW50ZXJtQWdncmVnYXRlOworICAgIGFnZ05v
ZGUtPmdldFNlcXVlbmNlKCkucHVzaF9iYWNrKG5vZGUpOworICAgIGFnZ05vZGUtPnNldExpbmUo
bGluZSk7CisKKyAgICByZXR1cm4gYWdnTm9kZTsKK30KKworLy8KKy8vIEZvciAiaWYiIHRlc3Qg
bm9kZXMuICBUaGVyZSBhcmUgdGhyZWUgY2hpbGRyZW47IGEgY29uZGl0aW9uLAorLy8gYSB0cnVl
IHBhdGgsIGFuZCBhIGZhbHNlIHBhdGguICBUaGUgdHdvIHBhdGhzIGFyZSBpbiB0aGUKKy8vIG5v
ZGVQYWlyLgorLy8KKy8vIFJldHVybnMgdGhlIHNlbGVjdGlvbiBub2RlIGNyZWF0ZWQuCisvLwor
VEludGVybU5vZGUqIFRJbnRlcm1lZGlhdGU6OmFkZFNlbGVjdGlvbihUSW50ZXJtVHlwZWQqIGNv
bmQsIFRJbnRlcm1Ob2RlUGFpciBub2RlUGFpciwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKK3sK
KyAgICAvLworICAgIC8vIEZvciBjb21waWxlIHRpbWUgY29uc3RhbnQgc2VsZWN0aW9ucywgcHJ1
bmUgdGhlIGNvZGUgYW5kCisgICAgLy8gdGVzdCBub3cuCisgICAgLy8KKworICAgIGlmIChjb25k
LT5nZXRBc1R5cGVkKCkgJiYgY29uZC0+Z2V0QXNUeXBlZCgpLT5nZXRBc0NvbnN0YW50VW5pb24o
KSkgeworICAgICAgICBpZiAoY29uZC0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldEJDb25zdCgw
KSA9PSB0cnVlKQorICAgICAgICAgICAgcmV0dXJuIG5vZGVQYWlyLm5vZGUxID8gc2V0QWdncmVn
YXRlT3BlcmF0b3Iobm9kZVBhaXIubm9kZTEsIEVPcFNlcXVlbmNlLCBub2RlUGFpci5ub2RlMS0+
Z2V0TGluZSgpKSA6IE5VTEw7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBub2Rl
UGFpci5ub2RlMiA/IHNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5vZGVQYWlyLm5vZGUyLCBFT3BTZXF1
ZW5jZSwgbm9kZVBhaXIubm9kZTItPmdldExpbmUoKSkgOiBOVUxMOworICAgIH0KKworICAgIFRJ
bnRlcm1TZWxlY3Rpb24qIG5vZGUgPSBuZXcgVEludGVybVNlbGVjdGlvbihjb25kLCBub2RlUGFp
ci5ub2RlMSwgbm9kZVBhaXIubm9kZTIpOworICAgIG5vZGUtPnNldExpbmUobGluZSk7CisKKyAg
ICByZXR1cm4gbm9kZTsKK30KKworCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZENv
bW1hKFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdodCwgY29uc3QgVFNvdXJj
ZUxvYyYgbGluZSkKK3sKKyAgICBpZiAobGVmdC0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09
IEV2cUNvbnN0ICYmIHJpZ2h0LT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3Qp
IHsKKyAgICAgICAgcmV0dXJuIHJpZ2h0OworICAgIH0gZWxzZSB7CisgICAgICAgIFRJbnRlcm1U
eXBlZCAqY29tbWFBZ2dyZWdhdGUgPSBncm93QWdncmVnYXRlKGxlZnQsIHJpZ2h0LCBsaW5lKTsK
KyAgICAgICAgY29tbWFBZ2dyZWdhdGUtPmdldEFzQWdncmVnYXRlKCktPnNldE9wKEVPcENvbW1h
KTsKKyAgICAgICAgY29tbWFBZ2dyZWdhdGUtPnNldFR5cGUocmlnaHQtPmdldFR5cGUoKSk7Cisg
ICAgICAgIGNvbW1hQWdncmVnYXRlLT5nZXRUeXBlUG9pbnRlcigpLT5zZXRRdWFsaWZpZXIoRXZx
VGVtcG9yYXJ5KTsKKyAgICAgICAgcmV0dXJuIGNvbW1hQWdncmVnYXRlOworICAgIH0KK30KKwor
Ly8KKy8vIEZvciAiPzoiIHRlc3Qgbm9kZXMuICBUaGVyZSBhcmUgdGhyZWUgY2hpbGRyZW47IGEg
Y29uZGl0aW9uLAorLy8gYSB0cnVlIHBhdGgsIGFuZCBhIGZhbHNlIHBhdGguICBUaGUgdHdvIHBh
dGhzIGFyZSBzcGVjaWZpZWQKKy8vIGFzIHNlcGFyYXRlIHBhcmFtZXRlcnMuCisvLworLy8gUmV0
dXJucyB0aGUgc2VsZWN0aW9uIG5vZGUgY3JlYXRlZCwgb3IgMCBpZiBvbmUgY291bGQgbm90IGJl
LgorLy8KK1RJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkU2VsZWN0aW9uKFRJbnRlcm1U
eXBlZCogY29uZCwgVEludGVybVR5cGVkKiB0cnVlQmxvY2ssIFRJbnRlcm1UeXBlZCogZmFsc2VC
bG9jaywgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKK3sKKyAgICAvLworICAgIC8vIEdldCBjb21w
YXRpYmxlIHR5cGVzLgorICAgIC8vCisgICAgVEludGVybVR5cGVkKiBjaGlsZCA9IGFkZENvbnZl
cnNpb24oRU9wU2VxdWVuY2UsIHRydWVCbG9jay0+Z2V0VHlwZSgpLCBmYWxzZUJsb2NrKTsKKyAg
ICBpZiAoY2hpbGQpCisgICAgICAgIGZhbHNlQmxvY2sgPSBjaGlsZDsKKyAgICBlbHNlIHsKKyAg
ICAgICAgY2hpbGQgPSBhZGRDb252ZXJzaW9uKEVPcFNlcXVlbmNlLCBmYWxzZUJsb2NrLT5nZXRU
eXBlKCksIHRydWVCbG9jayk7CisgICAgICAgIGlmIChjaGlsZCkKKyAgICAgICAgICAgIHRydWVC
bG9jayA9IGNoaWxkOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisKKyAgICAvLworICAgIC8vIFNlZSBpZiBhbGwgdGhlIG9wZXJhbmRzIGFyZSBjb25zdGFudCwg
dGhlbiBmb2xkIGl0IG90aGVyd2lzZSBub3QuCisgICAgLy8KKworICAgIGlmIChjb25kLT5nZXRB
c0NvbnN0YW50VW5pb24oKSAmJiB0cnVlQmxvY2stPmdldEFzQ29uc3RhbnRVbmlvbigpICYmIGZh
bHNlQmxvY2stPmdldEFzQ29uc3RhbnRVbmlvbigpKSB7CisgICAgICAgIGlmIChjb25kLT5nZXRB
c0NvbnN0YW50VW5pb24oKS0+Z2V0QkNvbnN0KDApKQorICAgICAgICAgICAgcmV0dXJuIHRydWVC
bG9jazsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlQmxvY2s7CisgICAg
fQorCisgICAgLy8KKyAgICAvLyBNYWtlIGEgc2VsZWN0aW9uIG5vZGUuCisgICAgLy8KKyAgICBU
SW50ZXJtU2VsZWN0aW9uKiBub2RlID0gbmV3IFRJbnRlcm1TZWxlY3Rpb24oY29uZCwgdHJ1ZUJs
b2NrLCBmYWxzZUJsb2NrLCB0cnVlQmxvY2stPmdldFR5cGUoKSk7CisgICAgbm9kZS0+Z2V0VHlw
ZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CisgICAgbm9kZS0+c2V0TGlu
ZShsaW5lKTsKKworICAgIHJldHVybiBub2RlOworfQorCisvLworLy8gQ29uc3RhbnQgdGVybWlu
YWwgbm9kZXMuICBIYXMgYSB1bmlvbiB0aGF0IGNvbnRhaW5zIGJvb2wsIGZsb2F0IG9yIGludCBj
b25zdGFudHMKKy8vCisvLyBSZXR1cm5zIHRoZSBjb25zdGFudCB1bmlvbiBub2RlIGNyZWF0ZWQu
CisvLworCitUSW50ZXJtQ29uc3RhbnRVbmlvbiogVEludGVybWVkaWF0ZTo6YWRkQ29uc3RhbnRV
bmlvbihDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5UG9pbnRlciwgY29uc3QgVFR5cGUmIHQsIGNv
bnN0IFRTb3VyY2VMb2MmIGxpbmUpCit7CisgICAgVEludGVybUNvbnN0YW50VW5pb24qIG5vZGUg
PSBuZXcgVEludGVybUNvbnN0YW50VW5pb24odW5pb25BcnJheVBvaW50ZXIsIHQpOworICAgIG5v
ZGUtPnNldExpbmUobGluZSk7CisKKyAgICByZXR1cm4gbm9kZTsKK30KKworVEludGVybVR5cGVk
KiBUSW50ZXJtZWRpYXRlOjphZGRTd2l6emxlKFRWZWN0b3JGaWVsZHMmIGZpZWxkcywgY29uc3Qg
VFNvdXJjZUxvYyYgbGluZSkKK3sKKworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUgPSBuZXcg
VEludGVybUFnZ3JlZ2F0ZShFT3BTZXF1ZW5jZSk7CisKKyAgICBub2RlLT5zZXRMaW5lKGxpbmUp
OworICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiBjb25zdEludE5vZGU7CisgICAgVEludGVybVNl
cXVlbmNlICZzZXF1ZW5jZVZlY3RvciA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CisgICAgQ29uc3Rh
bnRVbmlvbiogdW5pb25BcnJheTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLm51
bTsgaSsrKSB7CisgICAgICAgIHVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAg
ICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGZpZWxkcy5vZmZzZXRzW2ldKTsKKyAgICAgICAg
Y29uc3RJbnROb2RlID0gYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQs
IEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBsaW5lKTsKKyAgICAgICAgc2VxdWVuY2VWZWN0b3Iu
cHVzaF9iYWNrKGNvbnN0SW50Tm9kZSk7CisgICAgfQorCisgICAgcmV0dXJuIG5vZGU7Cit9CisK
Ky8vCisvLyBDcmVhdGUgbG9vcCBub2Rlcy4KKy8vCitUSW50ZXJtTm9kZSogVEludGVybWVkaWF0
ZTo6YWRkTG9vcChUTG9vcFR5cGUgdHlwZSwgVEludGVybU5vZGUqIGluaXQsIFRJbnRlcm1UeXBl
ZCogY29uZCwgVEludGVybVR5cGVkKiBleHByLCBUSW50ZXJtTm9kZSogYm9keSwgY29uc3QgVFNv
dXJjZUxvYyYgbGluZSkKK3sKKyAgICBUSW50ZXJtTm9kZSogbm9kZSA9IG5ldyBUSW50ZXJtTG9v
cCh0eXBlLCBpbml0LCBjb25kLCBleHByLCBib2R5KTsKKyAgICBub2RlLT5zZXRMaW5lKGxpbmUp
OworCisgICAgcmV0dXJuIG5vZGU7Cit9CisKKy8vCisvLyBBZGQgYnJhbmNoZXMuCisvLworVElu
dGVybUJyYW5jaCogVEludGVybWVkaWF0ZTo6YWRkQnJhbmNoKFRPcGVyYXRvciBicmFuY2hPcCwg
Y29uc3QgVFNvdXJjZUxvYyYgbGluZSkKK3sKKyAgICByZXR1cm4gYWRkQnJhbmNoKGJyYW5jaE9w
LCAwLCBsaW5lKTsKK30KKworVEludGVybUJyYW5jaCogVEludGVybWVkaWF0ZTo6YWRkQnJhbmNo
KFRPcGVyYXRvciBicmFuY2hPcCwgVEludGVybVR5cGVkKiBleHByZXNzaW9uLCBjb25zdCBUU291
cmNlTG9jJiBsaW5lKQoreworICAgIFRJbnRlcm1CcmFuY2gqIG5vZGUgPSBuZXcgVEludGVybUJy
YW5jaChicmFuY2hPcCwgZXhwcmVzc2lvbik7CisgICAgbm9kZS0+c2V0TGluZShsaW5lKTsKKwor
ICAgIHJldHVybiBub2RlOworfQorCisvLworLy8gVGhpcyBpcyB0byBiZSBleGVjdXRlZCBvbmNl
IHRoZSBmaW5hbCByb290IGlzIHB1dCBvbiB0b3AgYnkgdGhlIHBhcnNpbmcKKy8vIHByb2Nlc3Mu
CisvLworYm9vbCBUSW50ZXJtZWRpYXRlOjpwb3N0UHJvY2VzcyhUSW50ZXJtTm9kZSogcm9vdCkK
K3sKKyAgICBpZiAocm9vdCA9PSAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vCisg
ICAgLy8gRmlyc3QsIGZpbmlzaCBvZmYgdGhlIHRvcCBsZXZlbCBzZXF1ZW5jZSwgaWYgYW55Cisg
ICAgLy8KKyAgICBUSW50ZXJtQWdncmVnYXRlKiBhZ2dSb290ID0gcm9vdC0+Z2V0QXNBZ2dyZWdh
dGUoKTsKKyAgICBpZiAoYWdnUm9vdCAmJiBhZ2dSb290LT5nZXRPcCgpID09IEVPcE51bGwpCisg
ICAgICAgIGFnZ1Jvb3QtPnNldE9wKEVPcFNlcXVlbmNlKTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCisvLworLy8gVGhpcyBkZWxldGVzIHRoZSB0cmVlLgorLy8KK3ZvaWQgVEludGVybWVkaWF0
ZTo6cmVtb3ZlKFRJbnRlcm1Ob2RlKiByb290KQoreworICAgIGlmIChyb290KQorICAgICAgICBS
ZW1vdmVBbGxUcmVlTm9kZXMocm9vdCk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBNZW1iZXIgZnVu
Y3Rpb25zIG9mIHRoZSBub2RlcyB1c2VkIGZvciBidWlsZGluZyB0aGUgdHJlZS4KKy8vCisvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCisKKyNkZWZpbmUgUkVQTEFDRV9JRl9JUyhub2RlLCB0eXBlLCBvcmlnaW5hbCwgcmVwbGFj
ZW1lbnQpIFwKKyAgICBpZiAobm9kZSA9PSBvcmlnaW5hbCkgeyBcCisgICAgICAgIG5vZGUgPSBz
dGF0aWNfY2FzdDx0eXBlICo+KHJlcGxhY2VtZW50KTsgXAorICAgICAgICByZXR1cm4gdHJ1ZTsg
XAorICAgIH0KKworYm9vbCBUSW50ZXJtTG9vcDo6cmVwbGFjZUNoaWxkTm9kZSgKKyAgICBUSW50
ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCkKK3sKKyAgICBSRVBM
QUNFX0lGX0lTKGluaXQsIFRJbnRlcm1Ob2RlLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpOworICAg
IFJFUExBQ0VfSUZfSVMoY29uZCwgVEludGVybVR5cGVkLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQp
OworICAgIFJFUExBQ0VfSUZfSVMoZXhwciwgVEludGVybVR5cGVkLCBvcmlnaW5hbCwgcmVwbGFj
ZW1lbnQpOworICAgIFJFUExBQ0VfSUZfSVMoYm9keSwgVEludGVybU5vZGUsIG9yaWdpbmFsLCBy
ZXBsYWNlbWVudCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRJbnRlcm1CcmFuY2g6
OnJlcGxhY2VDaGlsZE5vZGUoCisgICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9k
ZSAqcmVwbGFjZW1lbnQpCit7CisgICAgUkVQTEFDRV9JRl9JUyhleHByZXNzaW9uLCBUSW50ZXJt
VHlwZWQsIG9yaWdpbmFsLCByZXBsYWNlbWVudCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiti
b29sIFRJbnRlcm1CaW5hcnk6OnJlcGxhY2VDaGlsZE5vZGUoCisgICAgVEludGVybU5vZGUgKm9y
aWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFjZW1lbnQpCit7CisgICAgUkVQTEFDRV9JRl9JUyhs
ZWZ0LCBUSW50ZXJtVHlwZWQsIG9yaWdpbmFsLCByZXBsYWNlbWVudCk7CisgICAgUkVQTEFDRV9J
Rl9JUyhyaWdodCwgVEludGVybVR5cGVkLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBUSW50ZXJtVW5hcnk6OnJlcGxhY2VDaGlsZE5vZGUoCisg
ICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFjZW1lbnQpCit7Cisg
ICAgUkVQTEFDRV9JRl9JUyhvcGVyYW5kLCBUSW50ZXJtVHlwZWQsIG9yaWdpbmFsLCByZXBsYWNl
bWVudCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRJbnRlcm1BZ2dyZWdhdGU6OnJl
cGxhY2VDaGlsZE5vZGUoCisgICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAq
cmVwbGFjZW1lbnQpCit7CisgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHNlcXVlbmNlLnNp
emUoKTsgKytpaSkKKyAgICB7CisgICAgICAgIFJFUExBQ0VfSUZfSVMoc2VxdWVuY2VbaWldLCBU
SW50ZXJtTm9kZSwgb3JpZ2luYWwsIHJlcGxhY2VtZW50KTsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIFRJbnRlcm1TZWxlY3Rpb246OnJlcGxhY2VDaGlsZE5vZGUoCisgICAg
VEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFjZW1lbnQpCit7CisgICAg
UkVQTEFDRV9JRl9JUyhjb25kaXRpb24sIFRJbnRlcm1UeXBlZCwgb3JpZ2luYWwsIHJlcGxhY2Vt
ZW50KTsKKyAgICBSRVBMQUNFX0lGX0lTKHRydWVCbG9jaywgVEludGVybU5vZGUsIG9yaWdpbmFs
LCByZXBsYWNlbWVudCk7CisgICAgUkVQTEFDRV9JRl9JUyhmYWxzZUJsb2NrLCBUSW50ZXJtTm9k
ZSwgb3JpZ2luYWwsIHJlcGxhY2VtZW50KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vCisv
LyBTYXkgd2hldGhlciBvciBub3QgYW4gb3BlcmF0aW9uIG5vZGUgY2hhbmdlcyB0aGUgdmFsdWUg
b2YgYSB2YXJpYWJsZS4KKy8vCitib29sIFRJbnRlcm1PcGVyYXRvcjo6aXNBc3NpZ25tZW50KCkg
Y29uc3QKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9wUG9zdEluY3JlbWVu
dDoKKyAgICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OgorICAgICAgICBjYXNlIEVPcFByZUlu
Y3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6CisgICAgICAgIGNhc2UgRU9w
QXNzaWduOgorICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BTdWJB
c3NpZ246CisgICAgICAgIGNhc2UgRU9wTXVsQXNzaWduOgorICAgICAgICBjYXNlIEVPcFZlY3Rv
clRpbWVzTWF0cml4QXNzaWduOgorICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyQXNz
aWduOgorICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOgorICAgICAgICBj
YXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4QXNzaWduOgorICAgICAgICBjYXNlIEVPcERpdkFzc2ln
bjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworLy8KKy8vIHJldHVybnMgdHJ1ZSBpZiB0aGUg
b3BlcmF0b3IgaXMgZm9yIG9uZSBvZiB0aGUgY29uc3RydWN0b3JzCisvLworYm9vbCBUSW50ZXJt
T3BlcmF0b3I6OmlzQ29uc3RydWN0b3IoKSBjb25zdAoreworICAgIHN3aXRjaCAob3ApIHsKKyAg
ICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMyOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZl
YzM6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjNDoKKyAgICAgICAgY2FzZSBFT3BDb25z
dHJ1Y3RNYXQyOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6CisgICAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0TWF0NDoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RGbG9hdDoKKyAgICAg
ICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMjoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVj
MzoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjNDoKKyAgICAgICAgY2FzZSBFT3BDb25z
dHJ1Y3RJbnQ6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzI6CisgICAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0QlZlYzM6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6CisgICAg
ICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RTdHJ1
Y3Q6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKKy8vCisvLyBNYWtlIHN1cmUgdGhlIHR5cGUg
b2YgYSB1bmFyeSBvcGVyYXRvciBpcyBhcHByb3ByaWF0ZSBmb3IgaXRzCisvLyBjb21iaW5hdGlv
biBvZiBvcGVyYXRpb24gYW5kIG9wZXJhbmQgdHlwZS4KKy8vCisvLyBSZXR1cm5zIGZhbHNlIGlu
IG5vdGhpbmcgbWFrZXMgc2Vuc2UuCisvLworYm9vbCBUSW50ZXJtVW5hcnk6OnByb21vdGUoVElu
Zm9TaW5rJikKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9wTG9naWNhbE5v
dDoKKyAgICAgICAgICAgIGlmIChvcGVyYW5kLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEVPcE5lZ2F0aXZlOgorICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6CisgICAg
ICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6
CisgICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OgorICAgICAgICAgICAgaWYgKG9wZXJhbmQt
PmdldEJhc2ljVHlwZSgpID09IEVidEJvb2wpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIC8vIG9wZXJhdG9ycyBmb3IgYnVp
bHQtaW5zIGFyZSBhbHJlYWR5IHR5cGUgY2hlY2tlZCBhZ2FpbnN0IHRoZWlyIHByb3RvdHlwZQor
ICAgICAgICBjYXNlIEVPcEFueToKKyAgICAgICAgY2FzZSBFT3BBbGw6CisgICAgICAgIGNhc2Ug
RU9wVmVjdG9yTG9naWNhbE5vdDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAob3BlcmFuZC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0
RmxvYXQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHNldFR5
cGUob3BlcmFuZC0+Z2V0VHlwZSgpKTsKKyAgICB0eXBlLnNldFF1YWxpZmllcihFdnFUZW1wb3Jh
cnkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vCisvLyBFc3RhYmxpc2hlcyB0aGUgdHlw
ZSBvZiB0aGUgcmVzdWx0YW50IG9wZXJhdGlvbiwgYXMgd2VsbCBhcworLy8gbWFrZXMgdGhlIG9w
ZXJhdG9yIHRoZSBjb3JyZWN0IG9uZSBmb3IgdGhlIG9wZXJhbmRzLgorLy8KKy8vIFJldHVybnMg
ZmFsc2UgaWYgb3BlcmF0b3IgY2FuJ3Qgd29yayBvbiBvcGVyYW5kcy4KKy8vCitib29sIFRJbnRl
cm1CaW5hcnk6OnByb21vdGUoVEluZm9TaW5rJiBpbmZvU2luaykKK3sKKyAgICAvLyBUaGlzIGZ1
bmN0aW9uIG9ubHkgaGFuZGxlcyBzY2FsYXJzLCB2ZWN0b3JzLCBhbmQgbWF0cmljZXMuCisgICAg
aWYgKGxlZnQtPmlzQXJyYXkoKSB8fCByaWdodC0+aXNBcnJheSgpKSB7CisgICAgICAgIGluZm9T
aW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiSW52YWxp
ZCBvcGVyYXRpb24gZm9yIGFycmF5cyIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgLy8gR0xTTCBFUyAyLjAgZG9lcyBub3Qgc3VwcG9ydCBpbXBsaWNpdCB0eXBlIGNhc3Rp
bmcuCisgICAgLy8gU28gdGhlIGJhc2ljIHR5cGUgc2hvdWxkIGFsd2F5cyBtYXRjaC4KKyAgICBp
ZiAobGVmdC0+Z2V0QmFzaWNUeXBlKCkgIT0gcmlnaHQtPmdldEJhc2ljVHlwZSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLworICAgIC8vIEJhc2UgYXNzdW1wdGlvbjogIGp1c3Qg
bWFrZSB0aGUgdHlwZSB0aGUgc2FtZSBhcyB0aGUgbGVmdAorICAgIC8vIG9wZXJhbmQuICBUaGVu
IG9ubHkgZGV2aWF0aW9ucyBmcm9tIHRoaXMgbmVlZCBiZSBjb2RlZC4KKyAgICAvLworICAgIHNl
dFR5cGUobGVmdC0+Z2V0VHlwZSgpKTsKKworICAgIC8vIFRoZSByZXN1bHQgZ2V0cyBwcm9tb3Rl
ZCB0byB0aGUgaGlnaGVzdCBwcmVjaXNpb24uCisgICAgVFByZWNpc2lvbiBoaWdoZXJQcmVjaXNp
b24gPSBHZXRIaWdoZXJQcmVjaXNpb24obGVmdC0+Z2V0UHJlY2lzaW9uKCksIHJpZ2h0LT5nZXRQ
cmVjaXNpb24oKSk7CisgICAgZ2V0VHlwZVBvaW50ZXIoKS0+c2V0UHJlY2lzaW9uKGhpZ2hlclBy
ZWNpc2lvbik7CisKKyAgICAvLyBCaW5hcnkgb3BlcmF0aW9ucyByZXN1bHRzIGluIHRlbXBvcmFy
eSB2YXJpYWJsZXMgdW5sZXNzIGJvdGgKKyAgICAvLyBvcGVyYW5kcyBhcmUgY29uc3QuCisgICAg
aWYgKGxlZnQtPmdldFF1YWxpZmllcigpICE9IEV2cUNvbnN0IHx8IHJpZ2h0LT5nZXRRdWFsaWZp
ZXIoKSAhPSBFdnFDb25zdCkgeworICAgICAgICBnZXRUeXBlUG9pbnRlcigpLT5zZXRRdWFsaWZp
ZXIoRXZxVGVtcG9yYXJ5KTsKKyAgICB9CisKKyAgICBpbnQgc2l6ZSA9IHN0ZDo6bWF4KGxlZnQt
PmdldE5vbWluYWxTaXplKCksIHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpKTsKKworICAgIC8vCisg
ICAgLy8gQWxsIHNjYWxhcnMuIENvZGUgYWZ0ZXIgdGhpcyB0ZXN0IGFzc3VtZXMgdGhpcyBjYXNl
IGlzIHJlbW92ZWQhCisgICAgLy8KKyAgICBpZiAoc2l6ZSA9PSAxKSB7CisgICAgICAgIHN3aXRj
aCAob3ApIHsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBQcm9tb3RlIHRvIGNvbmRp
dGlvbmFsCisgICAgICAgICAgICAvLworICAgICAgICAgICAgY2FzZSBFT3BFcXVhbDoKKyAgICAg
ICAgICAgIGNhc2UgRU9wTm90RXF1YWw6CisgICAgICAgICAgICBjYXNlIEVPcExlc3NUaGFuOgor
ICAgICAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjoKKyAgICAgICAgICAgIGNhc2UgRU9wTGVz
c1RoYW5FcXVhbDoKKyAgICAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKKyAgICAg
ICAgICAgICAgICBzZXRUeXBlKFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCkpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gQW5kIGFu
ZCBPciBvcGVyYXRlIG9uIGNvbmRpdGlvbmFscworICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
IGNhc2UgRU9wTG9naWNhbEFuZDoKKyAgICAgICAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgorICAg
ICAgICAgICAgICAgIC8vIEJvdGggb3BlcmFuZHMgbXVzdCBiZSBvZiB0eXBlIGJvb2wuCisgICAg
ICAgICAgICAgICAgaWYgKGxlZnQtPmdldEJhc2ljVHlwZSgpICE9IEVidEJvb2wgfHwgcmlnaHQt
PmdldEJhc2ljVHlwZSgpICE9IEVidEJvb2wpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5l
ZCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIC8vIElmIHdlIHJlYWNoIGhlcmUsIGF0IGxlYXN0IG9uZSBvZiB0aGUgb3BlcmFu
ZHMgaXMgdmVjdG9yIG9yIG1hdHJpeC4KKyAgICAvLyBUaGUgb3RoZXIgb3BlcmFuZCBjb3VsZCBi
ZSBhIHNjYWxhciwgdmVjdG9yLCBvciBtYXRyaXguCisgICAgLy8gQXJlIHRoZSBzaXplcyBjb21w
YXRpYmxlPworICAgIC8vCisgICAgaWYgKGxlZnQtPmdldE5vbWluYWxTaXplKCkgIT0gcmlnaHQt
PmdldE5vbWluYWxTaXplKCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIG5vbWluYWwgc2l6ZSBvZiBv
cGVyYW5kcyBkbyBub3QgbWF0Y2g6CisgICAgICAgIC8vIE9uZSBvZiB0aGVtIG11c3QgYmUgc2Nh
bGFyLgorICAgICAgICBpZiAobGVmdC0+Z2V0Tm9taW5hbFNpemUoKSAhPSAxICYmIHJpZ2h0LT5n
ZXROb21pbmFsU2l6ZSgpICE9IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IC8vIE9wZXJhdG9yIGNhbm5vdCBiZSBvZiB0eXBlIHB1cmUgYXNzaWdubWVudC4KKyAgICAgICAg
aWYgKG9wID09IEVPcEFzc2lnbiB8fCBvcCA9PSBFT3BJbml0aWFsaXplKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vCisgICAgLy8gQ2FuIHRoZXNlIHR3byBvcGVy
YW5kcyBiZSBjb21iaW5lZD8KKyAgICAvLworICAgIFRCYXNpY1R5cGUgYmFzaWNUeXBlID0gbGVm
dC0+Z2V0QmFzaWNUeXBlKCk7CisgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIEVPcE11
bDoKKyAgICAgICAgICAgIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgo
KSkgeworICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5pc1ZlY3RvcigpKQorICAgICAgICAgICAg
ICAgICAgICBvcCA9IEVPcFZlY3RvclRpbWVzTWF0cml4OworICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzU2NhbGFyOworICAgICAg
ICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBF
dnFUZW1wb3JhcnksIHNpemUsIHRydWUpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHJpZ2h0LT5pc1ZlY3RvcigpKSB7CisgICAgICAgICAgICAgICAg
ICAgIG9wID0gRU9wTWF0cml4VGltZXNWZWN0b3I7CisgICAgICAgICAgICAgICAgICAgIHNldFR5
cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwg
ZmFsc2UpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBv
cCA9IEVPcE1hdHJpeFRpbWVzU2NhbGFyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkgeworICAg
ICAgICAgICAgICAgIG9wID0gRU9wTWF0cml4VGltZXNNYXRyaXg7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKCFsZWZ0LT5pc01hdHJpeCgpICYmICFyaWdodC0+aXNNYXRyaXgoKSkgeworICAgICAg
ICAgICAgICAgIGlmIChsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5pc1ZlY3RvcigpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIGxlYXZlIGFzIGNvbXBvbmVudCBwcm9kdWN0CisgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5pc1ZlY3RvcigpIHx8IHJpZ2h0LT5pc1ZlY3Rvcigp
KSB7CisgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wVmVjdG9yVGltZXNTY2FsYXI7CisgICAg
ICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24s
IEV2cVRlbXBvcmFyeSwgc2l6ZSwgZmFsc2UpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiTWlzc2luZyBlbHNlcyIpOworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcE11bEFzc2lnbjoKKyAgICAgICAgICAgIGlmICghbGVmdC0+aXNNYXRy
aXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5p
c1ZlY3RvcigpKQorICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcFZlY3RvclRpbWVzTWF0cml4
QXNzaWduOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChsZWZ0
LT5pc01hdHJpeCgpICYmICFyaWdodC0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgICAgIGlm
IChyaWdodC0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BN
YXRyaXhUaW1lc1NjYWxhckFzc2lnbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAg
ICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzTWF0cml4QXNzaWduOworICAgICAgICAgICAg
fSBlbHNlIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAobGVmdC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNWZWN0b3IoKSkg
eworICAgICAgICAgICAgICAgICAgICAvLyBsZWF2ZSBhcyBjb21wb25lbnQgcHJvZHVjdAorICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNWZWN0b3IoKSB8fCByaWdodC0+aXNWZWN0
b3IoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoISBsZWZ0LT5pc1ZlY3RvcigpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICBv
cCA9IEVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOworICAgICAgICAgICAgICAgICAgICBzZXRU
eXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUs
IGZhbHNlKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdl
dExpbmUoKSwgIk1pc3NpbmcgZWxzZXMiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcEFz
c2lnbjoKKyAgICAgICAgY2FzZSBFT3BJbml0aWFsaXplOgorICAgICAgICBjYXNlIEVPcEFkZDoK
KyAgICAgICAgY2FzZSBFT3BTdWI6CisgICAgICAgIGNhc2UgRU9wRGl2OgorICAgICAgICBjYXNl
IEVPcEFkZEFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246CisgICAgICAgIGNhc2Ug
RU9wRGl2QXNzaWduOgorICAgICAgICAgICAgaWYgKChsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0
LT5pc1ZlY3RvcigpKSB8fAorICAgICAgICAgICAgICAgIChsZWZ0LT5pc1ZlY3RvcigpICYmIHJp
Z2h0LT5pc01hdHJpeCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3Jh
cnksIHNpemUsIGxlZnQtPmlzTWF0cml4KCkgfHwgcmlnaHQtPmlzTWF0cml4KCkpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wRXF1YWw6CisgICAgICAgIGNhc2UgRU9w
Tm90RXF1YWw6CisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW46CisgICAgICAgIGNhc2UgRU9wR3Jl
YXRlclRoYW46CisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoKKyAgICAgICAgY2FzZSBF
T3BHcmVhdGVyVGhhbkVxdWFsOgorICAgICAgICAgICAgaWYgKChsZWZ0LT5pc01hdHJpeCgpICYm
IHJpZ2h0LT5pc1ZlY3RvcigpKSB8fAorICAgICAgICAgICAgICAgIChsZWZ0LT5pc1ZlY3Rvcigp
ICYmIHJpZ2h0LT5pc01hdHJpeCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICBzZXRUeXBlKFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCkpOworICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ29tcGFyZVN0cnVj
dChjb25zdCBUVHlwZSYgbGVmdE5vZGVUeXBlLCBDb25zdGFudFVuaW9uKiByaWdodFVuaW9uQXJy
YXksIENvbnN0YW50VW5pb24qIGxlZnRVbmlvbkFycmF5KQoreworICAgIGNvbnN0IFRGaWVsZExp
c3QmIGZpZWxkcyA9IGxlZnROb2RlVHlwZS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7CisKKyAgICBz
aXplX3Qgc3RydWN0U2l6ZSA9IGZpZWxkcy5zaXplKCk7CisgICAgc2l6ZV90IGluZGV4ID0gMDsK
KworICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgc3RydWN0U2l6ZTsgaisrKSB7CisgICAgICAg
IHNpemVfdCBzaXplID0gZmllbGRzW2pdLT50eXBlKCktPmdldE9iamVjdFNpemUoKTsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChm
aWVsZHNbal0tPnR5cGUoKS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7CisgICAgICAg
ICAgICAgICAgaWYgKCFDb21wYXJlU3RydWN0dXJlKCooZmllbGRzW2pdLT50eXBlKCkpLCAmcmln
aHRVbmlvbkFycmF5W2luZGV4XSwgJmxlZnRVbmlvbkFycmF5W2luZGV4XSkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgaWYgKGxlZnRVbmlvbkFycmF5W2luZGV4XSAhPSByaWdodFVuaW9uQXJyYXlbaW5kZXhd
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaW5k
ZXgrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBDb21wYXJlU3RydWN0dXJlKGNvbnN0IFRUeXBlJiBsZWZ0Tm9kZVR5cGUsIENv
bnN0YW50VW5pb24qIHJpZ2h0VW5pb25BcnJheSwgQ29uc3RhbnRVbmlvbiogbGVmdFVuaW9uQXJy
YXkpCit7CisgICAgaWYgKGxlZnROb2RlVHlwZS5pc0FycmF5KCkpIHsKKyAgICAgICAgVFR5cGUg
dHlwZVdpdGhvdXRBcnJheW5lc3MgPSBsZWZ0Tm9kZVR5cGU7CisgICAgICAgIHR5cGVXaXRob3V0
QXJyYXluZXNzLmNsZWFyQXJyYXluZXNzKCk7CisKKyAgICAgICAgc2l6ZV90IGFycmF5U2l6ZSA9
IGxlZnROb2RlVHlwZS5nZXRBcnJheVNpemUoKTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGFycmF5U2l6ZTsgKytpKSB7CisgICAgICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gdHlw
ZVdpdGhvdXRBcnJheW5lc3MuZ2V0T2JqZWN0U2l6ZSgpICogaTsKKyAgICAgICAgICAgIGlmICgh
Q29tcGFyZVN0cnVjdCh0eXBlV2l0aG91dEFycmF5bmVzcywgJnJpZ2h0VW5pb25BcnJheVtvZmZz
ZXRdLCAmbGVmdFVuaW9uQXJyYXlbb2Zmc2V0XSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybiBDb21wYXJlU3RydWN0
KGxlZnROb2RlVHlwZSwgcmlnaHRVbmlvbkFycmF5LCBsZWZ0VW5pb25BcnJheSk7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworLy8KKy8vIFRoZSBmb2xkIGZ1bmN0aW9ucyBzZWUgaWYgYW4gb3Bl
cmF0aW9uIG9uIGEgY29uc3RhbnQgY2FuIGJlIGRvbmUgaW4gcGxhY2UsCisvLyB3aXRob3V0IGdl
bmVyYXRpbmcgcnVuLXRpbWUgY29kZS4KKy8vCisvLyBSZXR1cm5zIHRoZSBub2RlIHRvIGtlZXAg
dXNpbmcsIHdoaWNoIG1heSBvciBtYXkgbm90IGJlIHRoZSBub2RlIHBhc3NlZCBpbi4KKy8vCisK
K1RJbnRlcm1UeXBlZCogVEludGVybUNvbnN0YW50VW5pb246OmZvbGQoVE9wZXJhdG9yIG9wLCBU
SW50ZXJtVHlwZWQqIGNvbnN0YW50Tm9kZSwgVEluZm9TaW5rJiBpbmZvU2luaykKK3sKKyAgICBD
b25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gZ2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKyAgICBz
aXplX3Qgb2JqZWN0U2l6ZSA9IGdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CisKKyAgICBpZiAo
Y29uc3RhbnROb2RlKSB7ICAvLyBiaW5hcnkgb3BlcmF0aW9ucworICAgICAgICBUSW50ZXJtQ29u
c3RhbnRVbmlvbiAqbm9kZSA9IGNvbnN0YW50Tm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Cisg
ICAgICAgIENvbnN0YW50VW5pb24gKnJpZ2h0VW5pb25BcnJheSA9IG5vZGUtPmdldFVuaW9uQXJy
YXlQb2ludGVyKCk7CisgICAgICAgIFRUeXBlIHJldHVyblR5cGUgPSBnZXRUeXBlKCk7CisKKyAg
ICAgICAgLy8gZm9yIGEgY2FzZSBsaWtlIGZsb2F0IGYgPSAxLjIgKyB2ZWM0KDIsMyw0LDUpOwor
ICAgICAgICBpZiAoY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpID09IDEg
JiYgb2JqZWN0U2l6ZSA+IDEpIHsKKyAgICAgICAgICAgIHJpZ2h0VW5pb25BcnJheSA9IG5ldyBD
b25zdGFudFVuaW9uW29iamVjdFNpemVdOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBvYmplY3RTaXplOyArK2kpCisgICAgICAgICAgICAgICAgcmlnaHRVbmlvbkFycmF5W2ld
ID0gKm5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAgICAgICAgICByZXR1cm5UeXBl
ID0gZ2V0VHlwZSgpOworICAgICAgICB9IGVsc2UgaWYgKGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgp
LmdldE9iamVjdFNpemUoKSA+IDEgJiYgb2JqZWN0U2l6ZSA9PSAxKSB7CisgICAgICAgICAgICAv
LyBmb3IgYSBjYXNlIGxpa2UgZmxvYXQgZiA9IHZlYzQoMiwzLDQsNSkgKyAxLjI7CisgICAgICAg
ICAgICB1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bY29uc3RhbnROb2RlLT5nZXRUeXBl
KCkuZ2V0T2JqZWN0U2l6ZSgpXTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOyArK2kpCisgICAgICAgICAg
ICAgICAgdW5pb25BcnJheVtpXSA9ICpnZXRVbmlvbkFycmF5UG9pbnRlcigpOworICAgICAgICAg
ICAgcmV0dXJuVHlwZSA9IG5vZGUtPmdldFR5cGUoKTsKKyAgICAgICAgICAgIG9iamVjdFNpemUg
PSBjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CisgICAgICAgIH0KKwor
ICAgICAgICBDb25zdGFudFVuaW9uKiB0ZW1wQ29uc3RBcnJheSA9IDA7CisgICAgICAgIFRJbnRl
cm1Db25zdGFudFVuaW9uICp0ZW1wTm9kZTsKKworICAgICAgICBib29sIGJvb2xOb2RlRmxhZyA9
IGZhbHNlOworICAgICAgICBzd2l0Y2gob3ApIHsKKyAgICAgICAgICAgIGNhc2UgRU9wQWRkOgor
ICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0
U2l6ZV07CisgICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCisgICAgICAgICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAg
ICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldICsgcmln
aHRVbmlvbkFycmF5W2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgRU9wU3ViOgorICAgICAgICAgICAgICAgIHRlbXBDb25zdEFy
cmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAgICAgICAgICAgICAgey8v
IHN1cHBvcnQgTVNWQysrNi4wCisgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldIC0gcmlnaHRVbmlvbkFycmF5W2ldOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBFT3BN
dWw6CisgICAgICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyOgorICAgICAgICAgICAg
Y2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhcjoKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJh
eSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOworICAgICAgICAgICAgICAgIHsvLyBz
dXBwb3J0IE1TVkMrKzYuMAorICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG9iamVjdFNpemU7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFy
cmF5W2ldID0gdW5pb25BcnJheVtpXSAqIHJpZ2h0VW5pb25BcnJheVtpXTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVPcE1hdHJp
eFRpbWVzTWF0cml4OgorICAgICAgICAgICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBl
KCkgIT0gRWJ0RmxvYXQgfHwgbm9kZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVy
cm9yLCBnZXRMaW5lKCksICJDb25zdGFudCBGb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciBtYXRy
aXggbXVsdGlwbHkiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAorICAgICAgICAg
ICAgICAgICAgICBpbnQgc2l6ZSA9IGdldE5vbWluYWxTaXplKCk7CisgICAgICAgICAgICAgICAg
ICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bc2l6ZSpzaXplXTsKKyAgICAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgc2l6ZTsgcm93KyspIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbHVtbiA9IDA7IGNvbHVtbiA8IHNpemU7
IGNvbHVtbisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlb
c2l6ZSAqIGNvbHVtbiArIHJvd10uc2V0RkNvbnN0KDAuMGYpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W3NpemUgKiBjb2x1bW4gKyByb3ddLnNl
dEZDb25zdCh0ZW1wQ29uc3RBcnJheVtzaXplICogY29sdW1uICsgcm93XS5nZXRGQ29uc3QoKSAr
IHVuaW9uQXJyYXlbaSAqIHNpemUgKyByb3ddLmdldEZDb25zdCgpICogKHJpZ2h0VW5pb25BcnJh
eVtjb2x1bW4gKiBzaXplICsgaV0uZ2V0RkNvbnN0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEVPcERpdjoKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uW29iamVjdFNpemVdOworICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMr
KzYuMAorICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNp
emU7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkuZ2V0
QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICAg
ICAgaWYgKHJpZ2h0VW5pb25BcnJheVtpXSA9PSAwLjBmKSB7CisgICAgICAgICAgICAgICAgICAg
IGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgZ2V0TGluZSgpLCAiRGl2aWRl
IGJ5IHplcm8gZXJyb3IgZHVyaW5nIGNvbnN0YW50IGZvbGRpbmciKTsKKyAgICAgICAgICAgICAg
ICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KHVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0
KCkgPCAwID8gLUZMVF9NQVggOiBGTFRfTUFYKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KHVuaW9uQXJyYXlb
aV0uZ2V0RkNvbnN0KCkgLyByaWdodFVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0KCkpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAg
ICAgICBpZiAocmlnaHRVbmlvbkFycmF5W2ldID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAg
aW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCBnZXRMaW5lKCksICJEaXZpZGUg
YnkgemVybyBlcnJvciBkdXJpbmcgY29uc3RhbnQgZm9sZGluZyIpOworICAgICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRJQ29uc3QoSU5UX01BWCk7CisgICAgICAgICAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldElDb25z
dCh1bmlvbkFycmF5W2ldLmdldElDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdldElDb25z
dCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBn
ZXRMaW5lKCksICJDb25zdGFudCBmb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciBcIi9cIiIpOwor
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVjdG9yOgorICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRGbG9hdCkgeworICAgICAgICAg
ICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdl
dExpbmUoKSwgIkNvbnN0YW50IEZvbGRpbmcgY2Fubm90IGJlIGRvbmUgZm9yIG1hdHJpeCB0aW1l
cyB2ZWN0b3IiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25b
Z2V0Tm9taW5hbFNpemUoKV07CisKKyAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2
LjAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgc2l6ZSA9IGdldE5vbWluYWxTaXplKCks
IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheVtpXS5zZXRGQ29uc3QoMC4wZik7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KGludCBqID0gMDsgaiA8IHNpemU7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCh0ZW1wQ29uc3RBcnJheVtpXS5nZXRGQ29uc3Qo
KSArICgodW5pb25BcnJheVtqKnNpemUgKyBpXS5nZXRGQ29uc3QoKSkgKiByaWdodFVuaW9uQXJy
YXlbal0uZ2V0RkNvbnN0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRlbXBO
b2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCBub2RlLT5nZXRU
eXBlKCkpOworICAgICAgICAgICAgICAgIHRlbXBOb2RlLT5zZXRMaW5lKGdldExpbmUoKSk7CisK
KyAgICAgICAgICAgICAgICByZXR1cm4gdGVtcE5vZGU7CisKKyAgICAgICAgICAgIGNhc2UgRU9w
VmVjdG9yVGltZXNNYXRyaXg6CisgICAgICAgICAgICAgICAgaWYgKGdldFR5cGUoKS5nZXRCYXNp
Y1R5cGUoKSAhPSBFYnRGbG9hdCkgeworICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZv
Lm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIkNvbnN0YW50IEZvbGRp
bmcgY2Fubm90IGJlIGRvbmUgZm9yIHZlY3RvciB0aW1lcyBtYXRyaXgiKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
dGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltnZXROb21pbmFsU2l6ZSgpXTsKKyAg
ICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKKyAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgc2l6ZSA9IGdldE5vbWluYWxTaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QoMC4w
Zik7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHNpemU7IGor
KykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZD
b25zdCh0ZW1wQ29uc3RBcnJheVtpXS5nZXRGQ29uc3QoKSArICgodW5pb25BcnJheVtqXS5nZXRG
Q29uc3QoKSkgKiByaWdodFVuaW9uQXJyYXlbaSpzaXplICsgal0uZ2V0RkNvbnN0KCkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBFT3BM
b2dpY2FsQW5kOiAvLyB0aGlzIGNvZGUgaXMgd3JpdHRlbiBmb3IgcG9zc2libGUgZnV0dXJlIHVz
ZSwgd2lsbCBub3QgZ2V0IGV4ZWN1dGVkIGN1cnJlbnRseQorICAgICAgICAgICAgICAgIHRlbXBD
b25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAgICAgICAgICAg
ICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCisgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgdGVt
cENvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldICYmIHJpZ2h0VW5pb25BcnJheVtpXTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNh
c2UgRU9wTG9naWNhbE9yOiAvLyB0aGlzIGNvZGUgaXMgd3JpdHRlbiBmb3IgcG9zc2libGUgZnV0
dXJlIHVzZSwgd2lsbCBub3QgZ2V0IGV4ZWN1dGVkIGN1cnJlbnRseQorICAgICAgICAgICAgICAg
IHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAgICAg
ICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCisgICAgICAgICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgICAgICAg
ICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldIHx8IHJpZ2h0VW5pb25BcnJheVtp
XTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgIGNhc2UgRU9wTG9naWNhbFhvcjoKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9
IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOworICAgICAgICAgICAgICAgIHsvLyBzdXBw
b3J0IE1TVkMrKzYuMAorICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG9iamVjdFNpemU7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlw
ZSgpLmdldEJhc2ljVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEVidEJvb2w6IHRlbXBDb25z
dEFycmF5W2ldLnNldEJDb25zdCgodW5pb25BcnJheVtpXSA9PSByaWdodFVuaW9uQXJyYXlbaV0p
ID8gZmFsc2UgOiB0cnVlKTsgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiBhc3NlcnQoZmFs
c2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEVP
cExlc3NUaGFuOgorICAgICAgICAgICAgICAgIGFzc2VydChvYmplY3RTaXplID09IDEpOworICAg
ICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAg
ICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCgqdW5pb25BcnJheSA8ICpyaWdo
dFVuaW9uQXJyYXkpOworICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBUVHlwZShFYnRCb29s
LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46CisgICAgICAgICAgICAgICAgYXNzZXJ0KG9iamVj
dFNpemUgPT0gMSk7CisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3Rh
bnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KCp1
bmlvbkFycmF5ID4gKnJpZ2h0VW5pb25BcnJheSk7CisgICAgICAgICAgICAgICAgcmV0dXJuVHlw
ZSA9IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KG9iamVjdFNpemUgPT0gMSk7Cisg
ICAgICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gY29uc3RhbnQ7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnN0YW50LnNldEJDb25zdCgqdW5pb25BcnJheSA+ICpyaWdodFVuaW9uQXJyYXkp
OworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
WzFdOworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KCFjb25z
dGFudC5nZXRCQ29uc3QoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBUVHlw
ZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhh
bkVxdWFsOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KG9i
amVjdFNpemUgPT0gMSk7CisgICAgICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gY29uc3Rh
bnQ7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50LnNldEJDb25zdCgqdW5pb25BcnJheSA8
ICpyaWdodFVuaW9uQXJyYXkpOworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9
IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJh
eS0+c2V0QkNvbnN0KCFjb25zdGFudC5nZXRCQ29uc3QoKSk7CisgICAgICAgICAgICAgICAgICAg
IHJldHVyblR5cGUgPSBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBjYXNlIEVPcEVxdWFsOgorICAgICAgICAgICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0QmFzaWNU
eXBlKCkgPT0gRWJ0U3RydWN0KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghQ29tcGFyZVN0
cnVjdHVyZShub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCksIHVu
aW9uQXJyYXkpKQorICAgICAgICAgICAgICAgICAgICAgICAgYm9vbE5vZGVGbGFnID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHVuaW9uQXJyYXlbaV0gIT0gcmlnaHRVbmlvbkFycmF5W2ldKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbE5vZGVGbGFnID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsgIC8vIGJyZWFrIG91dCBvZiBmb3IgbG9vcAorICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAg
ICAgICAgICAgICAgICBpZiAoIWJvb2xOb2RlRmxhZykgeworICAgICAgICAgICAgICAgICAgICB0
ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KHRydWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNl
dEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdGVt
cE5vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24odGVtcENvbnN0QXJyYXksIFRUeXBlKEVi
dEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpKTsKKyAgICAgICAgICAgICAgICB0ZW1wTm9k
ZS0+c2V0TGluZShnZXRMaW5lKCkpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2Rl
OworCisgICAgICAgICAgICBjYXNlIEVPcE5vdEVxdWFsOgorICAgICAgICAgICAgICAgIGlmIChn
ZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChDb21wYXJlU3RydWN0dXJlKG5vZGUtPmdldFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25B
cnJheVBvaW50ZXIoKSwgdW5pb25BcnJheSkpCisgICAgICAgICAgICAgICAgICAgICAgICBib29s
Tm9kZUZsYWcgPSB0cnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodW5pb25BcnJheVtpXSA9PSByaWdodFVuaW9uQXJyYXlbaV0p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sTm9kZUZsYWcgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgLy8gYnJlYWsgb3V0IG9mIGZvciBsb29w
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgIGlmICghYm9vbE5vZGVGbGFnKSB7CisgICAg
ICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QodHJ1ZSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0
ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29u
c3RBcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCkpOworICAgICAg
ICAgICAgICAgIHRlbXBOb2RlLT5zZXRMaW5lKGdldExpbmUoKSk7CisKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdGVtcE5vZGU7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCks
ICJJbnZhbGlkIG9wZXJhdG9yIGZvciBjb25zdGFudCBmb2xkaW5nIik7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgdGVtcE5vZGUgPSBuZXcgVEludGVybUNv
bnN0YW50VW5pb24odGVtcENvbnN0QXJyYXksIHJldHVyblR5cGUpOworICAgICAgICB0ZW1wTm9k
ZS0+c2V0TGluZShnZXRMaW5lKCkpOworCisgICAgICAgIHJldHVybiB0ZW1wTm9kZTsKKyAgICB9
IGVsc2UgeworICAgICAgICAvLworICAgICAgICAvLyBEbyB1bmFyeSBvcGVyYXRpb25zCisgICAg
ICAgIC8vCisgICAgICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpuZXdOb2RlID0gMDsKKyAgICAg
ICAgQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmpl
Y3RTaXplXTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKysp
IHsKKyAgICAgICAgICAgIHN3aXRjaChvcCkgeworICAgICAgICAgICAgICAgIGNhc2UgRU9wTmVn
YXRpdmU6CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlw
ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OiB0ZW1wQ29uc3RB
cnJheVtpXS5zZXRGQ29uc3QoLXVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0KCkpOyBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OiAgIHRlbXBDb25zdEFycmF5W2ldLnNl
dElDb25zdCgtdW5pb25BcnJheVtpXS5nZXRJQ29uc3QoKSk7IGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2lu
ay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIlVuYXJ5IG9w
ZXJhdGlvbiBub3QgZm9sZGVkIGludG8gY29uc3RhbnQiKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6IC8vIHRoaXMg
Y29kZSBpcyB3cml0dGVuIGZvciBwb3NzaWJsZSBmdXR1cmUgdXNlLCB3aWxsIG5vdCBnZXQgZXhl
Y3V0ZWQgY3VycmVudGx5CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdl
dEJhc2ljVHlwZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6ICB0
ZW1wQ29uc3RBcnJheVtpXS5zZXRCQ29uc3QoIXVuaW9uQXJyYXlbaV0uZ2V0QkNvbnN0KCkpOyBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBn
ZXRMaW5lKCksICJVbmFyeSBvcGVyYXRpb24gbm90IGZvbGRlZCBpbnRvIGNvbnN0YW50Iik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgbmV3Tm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJh
eSwgZ2V0VHlwZSgpKTsKKyAgICAgICAgbmV3Tm9kZS0+c2V0TGluZShnZXRMaW5lKCkpOworICAg
ICAgICByZXR1cm4gbmV3Tm9kZTsKKyAgICB9Cit9CisKK1RJbnRlcm1UeXBlZCogVEludGVybWVk
aWF0ZTo6cHJvbW90ZUNvbnN0YW50VW5pb24oVEJhc2ljVHlwZSBwcm9tb3RlVG8sIFRJbnRlcm1D
b25zdGFudFVuaW9uKiBub2RlKQoreworICAgIHNpemVfdCBzaXplID0gbm9kZS0+Z2V0VHlwZSgp
LmdldE9iamVjdFNpemUoKTsKKworICAgIENvbnN0YW50VW5pb24gKmxlZnRVbmlvbkFycmF5ID0g
bmV3IENvbnN0YW50VW5pb25bc2l6ZV07CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emU7IGkrKykgeworCisgICAgICAgIHN3aXRjaCAocHJvbW90ZVRvKSB7CisgICAgICAgICAgICBj
YXNlIEVidEZsb2F0OgorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0VHlwZSgpLmdl
dEJhc2ljVHlwZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OgorICAgICAg
ICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0RkNvbnN0KHN0YXRpY19jYXN0
PGZsb2F0Pihub2RlLT5nZXRJQ29uc3QoaSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAgICAgICAg
ICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRGQ29uc3Qoc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5v
ZGUtPmdldEJDb25zdChpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBs
ZWZ0VW5pb25BcnJheVtpXS5zZXRGQ29uc3Qoc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vZGUtPmdldEZD
b25zdChpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1l
c3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIkNhbm5vdCBwcm9t
b3RlIik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVidEludDoKKyAg
ICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgewor
ICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgICAgICAgICAgICAg
IGxlZnRVbmlvbkFycmF5W2ldLnNldElDb25zdChzdGF0aWNfY2FzdDxpbnQ+KG5vZGUtPmdldElD
b25zdChpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFy
cmF5W2ldLnNldElDb25zdChzdGF0aWNfY2FzdDxpbnQ+KG5vZGUtPmdldEJDb25zdChpKSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
RWJ0RmxvYXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRJ
Q29uc3Qoc3RhdGljX2Nhc3Q8aW50Pihub2RlLT5nZXRGQ29uc3QoaSkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVy
cm9yLCBub2RlLT5nZXRMaW5lKCksICJDYW5ub3QgcHJvbW90ZSIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBFYnRCb29sOgorICAgICAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgRWJ0SW50OgorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0
QkNvbnN0KG5vZGUtPmdldElDb25zdChpKSAhPSAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAgICAg
ICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRCQ29uc3Qobm9kZS0+Z2V0QkNvbnN0KGkp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBj
YXNlIEVidEZsb2F0OgorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0u
c2V0QkNvbnN0KG5vZGUtPmdldEZDb25zdChpKSAhPSAwLjBmKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBu
b2RlLT5nZXRMaW5lKCksICJDYW5ub3QgcHJvbW90ZSIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVz
c2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiSW5jb3JyZWN0IGRh
dGEgdHlwZSBmb3VuZCIpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisK
KyAgICB9CisKKyAgICBjb25zdCBUVHlwZSYgdCA9IG5vZGUtPmdldFR5cGUoKTsKKworICAgIHJl
dHVybiBhZGRDb25zdGFudFVuaW9uKGxlZnRVbmlvbkFycmF5LCBUVHlwZShwcm9tb3RlVG8sIHQu
Z2V0UHJlY2lzaW9uKCksIHQuZ2V0UXVhbGlmaWVyKCksIHQuZ2V0Tm9taW5hbFNpemUoKSwgdC5p
c01hdHJpeCgpLCB0LmlzQXJyYXkoKSksIG5vZGUtPmdldExpbmUoKSk7Cit9CisKKy8vIHN0YXRp
YworVFN0cmluZyBUSW50ZXJtVHJhdmVyc2VyOjpoYXNoKGNvbnN0IFRTdHJpbmcmIG5hbWUsIFNo
SGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uKQoreworICAgIGlmIChoYXNoRnVuY3Rpb24gPT0g
TlVMTCB8fCBuYW1lLmVtcHR5KCkpCisgICAgICAgIHJldHVybiBuYW1lOworICAgIGtocm9ub3Nf
dWludDY0X3QgbnVtYmVyID0gKCpoYXNoRnVuY3Rpb24pKG5hbWUuY19zdHIoKSwgbmFtZS5sZW5n
dGgoKSk7CisgICAgVFN0cmluZ1N0cmVhbSBzdHJlYW07CisgICAgc3RyZWFtIDw8IEhBU0hFRF9O
QU1FX1BSRUZJWCA8PCBzdGQ6OmhleCA8PCBudW1iZXI7CisgICAgVFN0cmluZyBoYXNoZWROYW1l
ID0gc3RyZWFtLnN0cigpOworICAgIHJldHVybiBoYXNoZWROYW1lOworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTU1hcC5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTU1hcC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmEzMDg2NzE1MTRjYzYzZThlNzBhMDNlMzg2OGI1Nzk1MWI4NWU5ODcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9NTWFwLmgKQEAgLTAsMCArMSw1NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRl
ZiBfTU1BUF9JTkNMVURFRF8KKyNkZWZpbmUgX01NQVBfSU5DTFVERURfCisKKy8vCisvLyBFbmNh
cHN1bGF0ZSBtZW1vcnkgbWFwcGVkIGZpbGVzCisvLworCitjbGFzcyBUTU1hcCB7CitwdWJsaWM6
CisgICAgVE1NYXAoY29uc3QgY2hhciogZmlsZU5hbWUpIDogCisgICAgICAgIGZTaXplKC0xKSwg
Ly8gLTEgaXMgdGhlIGVycm9yIHZhbHVlIHJldHVybmVkIGJ5IEdldEZpbGVTaXplKCkKKyAgICAg
ICAgZnAoTlVMTCksCisgICAgICAgIGZCdWZmKDApICAgLy8gMCBpcyB0aGUgZXJyb3IgdmFsdWUg
cmV0dXJuZWQgYnkgTWFwVmlld09mRmlsZSgpCisgICAgeworICAgICAgICBpZiAoKGZwID0gZm9w
ZW4oZmlsZU5hbWUsICJyIikpID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGNoYXIgYyA9IGdldGMoZnApOworICAgICAgICBmU2l6ZSA9IDA7CisgICAgICAgIHdoaWxlIChj
ICE9IEVPRikgeworICAgICAgICAgICAgZlNpemUrKzsKKyAgICAgICAgICAgIGMgPSBnZXRjKGZw
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYyA9PSBFT0YpCisgICAgICAgICAgICBmU2l6ZSsr
OworICAgICAgICByZXdpbmQoZnApOworICAgICAgICBmQnVmZiA9IChjaGFyKiltYWxsb2Moc2l6
ZW9mKGNoYXIpICogZlNpemUpOworICAgICAgICBpbnQgY291bnQgPSAwOworICAgICAgICBjID0g
Z2V0YyhmcCk7CisgICAgICAgIHdoaWxlIChjICE9IEVPRikgeworICAgICAgICAgICAgZkJ1ZmZb
Y291bnQrK10gPSBjOworICAgICAgICAgICAgYyA9IGdldGMoZnApOworICAgICAgICB9CisgICAg
ICAgIGZCdWZmW2NvdW50KytdID0gYzsKKyAgICB9CisKKyAgICBjaGFyKiBnZXREYXRhKCkgeyBy
ZXR1cm4gZkJ1ZmY7IH0KKyAgICBpbnQgICBnZXRTaXplKCkgeyByZXR1cm4gZlNpemU7IH0KKwor
ICAgIH5UTU1hcCgpIHsKKyAgICAgICAgaWYgKGZwICE9IE5VTEwpCisgICAgICAgICAgICBmY2xv
c2UoZnApOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgaW50ICAgICAgICAgICAgIGZTaXpl
OyAgICAgIC8vIHNpemUgb2YgZmlsZSB0byBtYXAgaW4KKyAgICBGSUxFICpmcDsKKyAgICBjaGFy
KiAgICAgICAgICAgZkJ1ZmY7ICAgICAgLy8gdGhlIGFjdHVhbCBkYXRhOworfTsKKworI2VuZGlm
IC8vIF9NTUFQX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTWFwTG9uZ1ZhcmlhYmxl
TmFtZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVmNjI5YzI2YjFhNDY0NTgwYzhlMmIzZGU4MGQ3MjQ0YzBk
NTMyOWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAKQEAgLTAsMCArMSwxMTUg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL01h
cExvbmdWYXJpYWJsZU5hbWVzLmgiCisKK25hbWVzcGFjZSB7CisKK1RTdHJpbmcgbWFwTG9uZ05h
bWUoc2l6ZV90IGlkLCBjb25zdCBUU3RyaW5nJiBuYW1lLCBib29sIGlzR2xvYmFsKQoreworICAg
IEFTU0VSVChuYW1lLnNpemUoKSA+IE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFKTsKKyAg
ICBUU3RyaW5nU3RyZWFtIHN0cmVhbTsKKyAgICBzdHJlYW0gPDwgIndlYmdsXyI7CisgICAgaWYg
KGlzR2xvYmFsKQorICAgICAgICBzdHJlYW0gPDwgImciOworICAgIHN0cmVhbSA8PCBpZDsKKyAg
ICBpZiAobmFtZVswXSAhPSAnXycpCisgICAgICAgIHN0cmVhbSA8PCAiXyI7CisgICAgc3RyZWFt
IDw8IG5hbWUuc3Vic3RyKDAsIE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFIC0gc3RyZWFt
LnN0cigpLnNpemUoKSk7CisgICAgcmV0dXJuIHN0cmVhbS5zdHIoKTsKK30KKworTG9uZ05hbWVN
YXAqIGdMb25nTmFtZU1hcEluc3RhbmNlID0gTlVMTDsKKworfSAgLy8gYW5vbnltb3VzIG5hbWVz
cGFjZQorCitMb25nTmFtZU1hcDo6TG9uZ05hbWVNYXAoKQorICAgIDogcmVmQ291bnQoMCkKK3sK
K30KKworTG9uZ05hbWVNYXA6On5Mb25nTmFtZU1hcCgpCit7Cit9CisKKy8vIHN0YXRpYworTG9u
Z05hbWVNYXAqIExvbmdOYW1lTWFwOjpHZXRJbnN0YW5jZSgpCit7CisgICAgaWYgKGdMb25nTmFt
ZU1hcEluc3RhbmNlID09IE5VTEwpCisgICAgICAgIGdMb25nTmFtZU1hcEluc3RhbmNlID0gbmV3
IExvbmdOYW1lTWFwOworICAgIGdMb25nTmFtZU1hcEluc3RhbmNlLT5yZWZDb3VudCsrOworICAg
IHJldHVybiBnTG9uZ05hbWVNYXBJbnN0YW5jZTsKK30KKwordm9pZCBMb25nTmFtZU1hcDo6UmVs
ZWFzZSgpCit7CisgICAgQVNTRVJUKGdMb25nTmFtZU1hcEluc3RhbmNlID09IHRoaXMpOworICAg
IEFTU0VSVChyZWZDb3VudCA+IDApOworICAgIHJlZkNvdW50LS07CisgICAgaWYgKHJlZkNvdW50
ID09IDApIHsKKyAgICAgICAgZGVsZXRlIGdMb25nTmFtZU1hcEluc3RhbmNlOworICAgICAgICBn
TG9uZ05hbWVNYXBJbnN0YW5jZSA9IE5VTEw7CisgICAgfQorfQorCitjb25zdCBjaGFyKiBMb25n
TmFtZU1hcDo6RmluZChjb25zdCBjaGFyKiBvcmlnaW5hbE5hbWUpIGNvbnN0Cit7CisgICAgc3Rk
OjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtTG9u
Z05hbWVNYXAuZmluZCgKKyAgICAgICAgb3JpZ2luYWxOYW1lKTsKKyAgICBpZiAoaXQgIT0gbUxv
bmdOYW1lTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gKCppdCkuc2Vjb25kLmNfc3RyKCk7Cisg
ICAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgTG9uZ05hbWVNYXA6Okluc2VydChjb25zdCBjaGFy
KiBvcmlnaW5hbE5hbWUsIGNvbnN0IGNoYXIqIG1hcHBlZE5hbWUpCit7CisgICAgbUxvbmdOYW1l
TWFwLmluc2VydChzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+Ojp2YWx1ZV90eXBl
KAorICAgICAgICBvcmlnaW5hbE5hbWUsIG1hcHBlZE5hbWUpKTsKK30KKworc2l6ZV90IExvbmdO
YW1lTWFwOjpTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUxvbmdOYW1lTWFwLnNpemUoKTsK
K30KKworTWFwTG9uZ1ZhcmlhYmxlTmFtZXM6Ok1hcExvbmdWYXJpYWJsZU5hbWVzKExvbmdOYW1l
TWFwKiBnbG9iYWxNYXApCit7CisgICAgQVNTRVJUKGdsb2JhbE1hcCk7CisgICAgbUdsb2JhbE1h
cCA9IGdsb2JhbE1hcDsKK30KKwordm9pZCBNYXBMb25nVmFyaWFibGVOYW1lczo6dmlzaXRTeW1i
b2woVEludGVybVN5bWJvbCogc3ltYm9sKQoreworICAgIEFTU0VSVChzeW1ib2wgIT0gTlVMTCk7
CisgICAgaWYgKHN5bWJvbC0+Z2V0U3ltYm9sKCkuc2l6ZSgpID4gTUFYX1NIT1JURU5FRF9JREVO
VElGSUVSX1NJWkUpIHsKKyAgICAgICAgc3dpdGNoIChzeW1ib2wtPmdldFF1YWxpZmllcigpKSB7
CisgICAgICAgICAgY2FzZSBFdnFWYXJ5aW5nSW46CisgICAgICAgICAgY2FzZSBFdnFWYXJ5aW5n
T3V0OgorICAgICAgICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWluZ0luOgorICAgICAgICAgIGNh
c2UgRXZxSW52YXJpYW50VmFyeWluZ091dDoKKyAgICAgICAgICBjYXNlIEV2cVVuaWZvcm06Cisg
ICAgICAgICAgICBzeW1ib2wtPnNldFN5bWJvbCgKKyAgICAgICAgICAgICAgICBtYXBHbG9iYWxM
b25nTmFtZShzeW1ib2wtPmdldFN5bWJvbCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc3ltYm9sLT5zZXRTeW1ib2woCisgICAgICAgICAg
ICAgICAgbWFwTG9uZ05hbWUoc3ltYm9sLT5nZXRJZCgpLCBzeW1ib2wtPmdldFN5bWJvbCgpLCBm
YWxzZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH07CisgICAgfQorfQorCitUU3Ry
aW5nIE1hcExvbmdWYXJpYWJsZU5hbWVzOjptYXBHbG9iYWxMb25nTmFtZShjb25zdCBUU3RyaW5n
JiBuYW1lKQoreworICAgIEFTU0VSVChtR2xvYmFsTWFwKTsKKyAgICBjb25zdCBjaGFyKiBtYXBw
ZWROYW1lID0gbUdsb2JhbE1hcC0+RmluZChuYW1lLmNfc3RyKCkpOworICAgIGlmIChtYXBwZWRO
YW1lICE9IE5VTEwpCisgICAgICAgIHJldHVybiBtYXBwZWROYW1lOworICAgIHNpemVfdCBpZCA9
IG1HbG9iYWxNYXAtPlNpemUoKTsKKyAgICBUU3RyaW5nIHJ0ID0gbWFwTG9uZ05hbWUoaWQsIG5h
bWUsIHRydWUpOworICAgIG1HbG9iYWxNYXAtPkluc2VydChuYW1lLmNfc3RyKCksIHJ0LmNfc3Ry
KCkpOworICAgIHJldHVybiBydDsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL01hcExvbmdWYXJpYWJsZU5hbWVzLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9NYXBMb25nVmFyaWFi
bGVOYW1lcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiMDg1YTM2ODc3YjAxMDU2MDU0ZGEyZDEyZTQ0MDBmODI5
ZWEzOWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5oCkBAIC0wLDAgKzEsNTggQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfTUFQX0xPTkdfVkFSSUFCTEVf
TkFNRVNfSF8KKyNkZWZpbmUgQ09NUElMRVJfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVNfSF8KKwor
I2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Zh
cmlhYmxlSW5mby5oIgorCisvLyBUaGlzIHNpemUgZG9lcyBub3QgaW5jbHVkZSAnXDAnIGluIHRo
ZSBlbmQuCisjZGVmaW5lIE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFIDMyCisKKy8vIFRo
aXMgaXMgYSByZWYtY291bnRlZCBzaW5nbGV0b24uIEdldEluc3RhbmNlKCkgcmV0dXJucyBhIHBv
aW50ZXIgdG8gdGhlCisvLyBzaW5nbGV0b24sIGFuZCBhZnRlciB1c2UsIGNhbGwgUmVsZWFzZSgp
LiBHZXRJbnN0YW5jZSgpIGFuZCBSZWxlYXNlKCkgc2hvdWxkCisvLyBiZSBwYWlyZWQuCitjbGFz
cyBMb25nTmFtZU1hcCB7CitwdWJsaWM6CisgICAgc3RhdGljIExvbmdOYW1lTWFwKiBHZXRJbnN0
YW5jZSgpOworICAgIHZvaWQgUmVsZWFzZSgpOworCisgICAgLy8gUmV0dXJuIHRoZSBtYXBwZWQg
bmFtZSBpZiA8b3JpZ2luYWxOYW1lLCBtYXBwZWROYW1lPiBpcyBpbiB0aGUgbWFwOworICAgIC8v
IG90aGVyd2lzZSwgcmV0dXJuIE5VTEwuCisgICAgY29uc3QgY2hhciogRmluZChjb25zdCBjaGFy
KiBvcmlnaW5hbE5hbWUpIGNvbnN0OworCisgICAgLy8gSW5zZXJ0IGEgcGFpciBpbnRvIHRoZSBt
YXAuCisgICAgdm9pZCBJbnNlcnQoY29uc3QgY2hhciogb3JpZ2luYWxOYW1lLCBjb25zdCBjaGFy
KiBtYXBwZWROYW1lKTsKKworICAgIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4g
dGhlIG1hcC4KKyAgICBzaXplX3QgU2l6ZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIExvbmdO
YW1lTWFwKCk7CisgICAgfkxvbmdOYW1lTWFwKCk7CisKKyAgICBzaXplX3QgcmVmQ291bnQ7Cisg
ICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBtTG9uZ05hbWVNYXA7Cit9Owor
CisvLyBUcmF2ZXJzZXMgaW50ZXJtZWRpYXRlIHRyZWUgdG8gbWFwIGF0dHJpYnV0ZXMgYW5kIHVu
aWZvcm1zIG5hbWVzIHRoYXQgYXJlCisvLyBsb25nZXIgdGhhbiBNQVhfU0hPUlRFTkVEX0lERU5U
SUZJRVJfU0laRSB0byBNQVhfU0hPUlRFTkVEX0lERU5USUZJRVJfU0laRS4KK2NsYXNzIE1hcExv
bmdWYXJpYWJsZU5hbWVzIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgorICAg
IE1hcExvbmdWYXJpYWJsZU5hbWVzKExvbmdOYW1lTWFwKiBnbG9iYWxNYXApOworCisgICAgdmly
dHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKKworcHJpdmF0ZToKKyAgICBU
U3RyaW5nIG1hcEdsb2JhbExvbmdOYW1lKGNvbnN0IFRTdHJpbmcmIG5hbWUpOworCisgICAgTG9u
Z05hbWVNYXAqIG1HbG9iYWxNYXA7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX01BUF9MT05H
X1ZBUklBQkxFX05BTUVTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9Ob2RlU2VhcmNoLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Ob2RlU2VhcmNoLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjU4
YzdlYzY4OTQ1ODhjMDgzNTBlODg2OTZlNzMxNDNkZjQ5ZTEyNwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL05vZGVTZWFy
Y2guaApAQCAtMCwwICsxLDgwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gTm9kZVNlYXJjaC5o
OiBVdGlsaXRpZXMgZm9yIHNlYXJjaGluZyB0cmFuc2xhdG9yIG5vZGUgZ3JhcGhzCisvLworCisj
aWZuZGVmIFRSQU5TTEFUT1JfTk9ERVNFQVJDSF9IXworI2RlZmluZSBUUkFOU0xBVE9SX05PREVT
RUFSQ0hfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgi
CisKK25hbWVzcGFjZSBzaAoreworCit0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgorY2xhc3MgTm9k
ZVNlYXJjaFRyYXZlcnNlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoK
KyAgICBOb2RlU2VhcmNoVHJhdmVyc2VyKCkKKyAgICAgICAgOiBtRm91bmQoZmFsc2UpCisgICAg
e30KKworICAgIGJvb2wgZm91bmQoKSBjb25zdCB7IHJldHVybiBtRm91bmQ7IH0KKworICAgIHN0
YXRpYyBib29sIHNlYXJjaChUSW50ZXJtTm9kZSAqbm9kZSkKKyAgICB7CisgICAgICAgIFBhcmVu
dCBzZWFyY2hUcmF2ZXJzZXI7CisgICAgICAgIG5vZGUtPnRyYXZlcnNlKCZzZWFyY2hUcmF2ZXJz
ZXIpOworICAgICAgICByZXR1cm4gc2VhcmNoVHJhdmVyc2VyLmZvdW5kKCk7CisgICAgfQorCisg
IHByb3RlY3RlZDoKKyAgICBib29sIG1Gb3VuZDsKK307CisKK2NsYXNzIEZpbmREaXNjYXJkIDog
cHVibGljIE5vZGVTZWFyY2hUcmF2ZXJzZXI8RmluZERpc2NhcmQ+Cit7CisgIHB1YmxpYzoKKyAg
ICB2aXJ0dWFsIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2ggKm5v
ZGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldEZsb3dPcCgpKQorICAgICAgICB7
CisgICAgICAgICAgY2FzZSBFT3BLaWxsOgorICAgICAgICAgICAgbUZvdW5kID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gIW1Gb3VuZDsKKyAgICB9Cit9OworCitjbGFzcyBGaW5kU2lkZUVm
ZmVjdFJld3JpdGluZyA6IHB1YmxpYyBOb2RlU2VhcmNoVHJhdmVyc2VyPEZpbmRTaWRlRWZmZWN0
UmV3cml0aW5nPgoreworICBwdWJsaWM6CisgICAgdmlydHVhbCBib29sIHZpc2l0QmluYXJ5KFZp
c2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChu
b2RlLT5nZXRPcCgpKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6Cisg
ICAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOgorICAgICAgICAgICAgaWYgKG5vZGUtPmdldFJp
Z2h0KCktPmhhc1NpZGVFZmZlY3RzKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
bUZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gIW1Gb3Vu
ZDsKKyAgICB9Cit9OworCit9CisKKyNlbmRpZiAvLyBUUkFOU0xBVE9SX05PREVTRUFSQ0hfSF8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL091dHB1dEVTU0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvT3V0cHV0RVNTTC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODM2NzQxMjQ2MjExYTYyZDNi
NDI4MzBmZTZjYzRkNGY3MWMzZDYxNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEVTU0wuY3BwCkBAIC0wLDAg
KzEsMjYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL091dHB1dEVTU0wuaCIKKworVE91dHB1dEVTU0w6OlRPdXRwdXRFU1NMKFRJbmZvU2lua0Jh
c2UmIG9ialNpbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgU2hBcnJheUluZGV4Q2xhbXBp
bmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAorICAgICAgICAgICAgICAgICAgICAgICAgIFNo
SGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5h
bWVNYXAmIG5hbWVNYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBz
eW1ib2xUYWJsZSkKKyAgICA6IFRPdXRwdXRHTFNMQmFzZShvYmpTaW5rLCBjbGFtcGluZ1N0cmF0
ZWd5LCBoYXNoRnVuY3Rpb24sIG5hbWVNYXAsIHN5bWJvbFRhYmxlKQoreworfQorCitib29sIFRP
dXRwdXRFU1NMOjp3cml0ZVZhcmlhYmxlUHJlY2lzaW9uKFRQcmVjaXNpb24gcHJlY2lzaW9uKQor
eworICAgIGlmIChwcmVjaXNpb24gPT0gRWJwVW5kZWZpbmVkKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7CisgICAgb3V0IDw8IGdl
dFByZWNpc2lvblN0cmluZyhwcmVjaXNpb24pOworICAgIHJldHVybiB0cnVlOworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0
cHV0RVNTTC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvT3V0cHV0RVNTTC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJmMDI5NzlhMDUwNDRjMzQyZGJhNjFmNTBkMjNm
NDZlNGViZjY1NmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRFU1NMLmgKQEAgLTAsMCArMSwyNSBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRFU1NMX0hf
CisjZGVmaW5lIENST1NTQ09NUElMRVJHTFNMX09VVFBVVEVTU0xfSF8KKworI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuaCIKKworY2xhc3MgVE91dHB1dEVTU0wg
OiBwdWJsaWMgVE91dHB1dEdMU0xCYXNlCit7CitwdWJsaWM6CisgICAgVE91dHB1dEVTU0woVElu
Zm9TaW5rQmFzZSYgb2JqU2luaywKKyAgICAgICAgICAgICAgICBTaEFycmF5SW5kZXhDbGFtcGlu
Z1N0cmF0ZWd5IGNsYW1waW5nU3RyYXRlZ3ksCisgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rp
b242NCBoYXNoRnVuY3Rpb24sCisgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKKyAg
ICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKTsKKworcHJvdGVjdGVkOgor
ICAgIHZpcnR1YWwgYm9vbCB3cml0ZVZhcmlhYmxlUHJlY2lzaW9uKFRQcmVjaXNpb24gcHJlY2lz
aW9uKTsKK307CisKKyNlbmRpZiAgLy8gQ1JPU1NDT01QSUxFUkdMU0xfT1VUUFVURVNTTF9IXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvT3V0cHV0R0xTTC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9PdXRwdXRHTFNMLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NTg5NTYwNjgyYjYyOGI1OTZm
M2E3NTkwODc5ZjcxYzQ2N2YzOWEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTC5jcHAKQEAgLTAsMCAr
MSwzNSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvT3V0cHV0R0xTTC5oIgorCitUT3V0cHV0R0xTTDo6VE91dHB1dEdMU0woVEluZm9TaW5rQmFz
ZSYgb2JqU2luaywKKyAgICAgICAgICAgICAgICAgICAgICAgICBTaEFycmF5SW5kZXhDbGFtcGlu
Z1N0cmF0ZWd5IGNsYW1waW5nU3RyYXRlZ3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgU2hI
YXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgTmFt
ZU1hcCYgbmFtZU1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5
bWJvbFRhYmxlKQorICAgIDogVE91dHB1dEdMU0xCYXNlKG9ialNpbmssIGNsYW1waW5nU3RyYXRl
Z3ksIGhhc2hGdW5jdGlvbiwgbmFtZU1hcCwgc3ltYm9sVGFibGUpCit7Cit9CisKK2Jvb2wgVE91
dHB1dEdMU0w6OndyaXRlVmFyaWFibGVQcmVjaXNpb24oVFByZWNpc2lvbikKK3sKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgVE91dHB1dEdMU0w6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1i
b2wqIG5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOworCisgICAg
aWYgKG5vZGUtPmdldFN5bWJvbCgpID09ICJnbF9GcmFnRGVwdGhFWFQiKQorICAgIHsKKyAgICAg
ICAgb3V0IDw8ICJnbF9GcmFnRGVwdGgiOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0U3ltYm9sKG5vZGUpOworICAgIH0KK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1
dEdMU0wuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L091dHB1dEdMU0wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMWYxMTRkMzQ3YjQxMjJkOTM0MTZlNjI0NGNiYWFm
OTMwZDQ5N2MyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTC5oCkBAIC0wLDAgKzEsMjYgQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ1JPU1NDT01QSUxFUkdMU0xfT1VUUFVUR0xTTF9IXwor
I2RlZmluZSBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRHTFNMX0hfCisKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL091dHB1dEdMU0xCYXNlLmgiCisKK2NsYXNzIFRPdXRwdXRHTFNMIDog
cHVibGljIFRPdXRwdXRHTFNMQmFzZQoreworcHVibGljOgorICAgIFRPdXRwdXRHTFNMKFRJbmZv
U2lua0Jhc2UmIG9ialNpbmssCisgICAgICAgICAgICAgICAgU2hBcnJheUluZGV4Q2xhbXBpbmdT
dHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAorICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9u
NjQgaGFzaEZ1bmN0aW9uLAorICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCisgICAg
ICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSk7CisKK3Byb3RlY3RlZDoKKyAg
ICB2aXJ0dWFsIGJvb2wgd3JpdGVWYXJpYWJsZVByZWNpc2lvbihUUHJlY2lzaW9uKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSk7Cit9OworCisjZW5k
aWYgIC8vIENST1NTQ09NUElMRVJHTFNMX09VVFBVVEdMU0xfSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0xCYXNl
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091
dHB1dEdMU0xCYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMmYwYTNkNmJlMzgwMmUzOGUwMTMxNWFmMThh
YTBhMDJkOWMxNDI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuY3BwCkBAIC0wLDAgKzEsODE3
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9P
dXRwdXRHTFNMQmFzZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvY29tcGlsZXJk
ZWJ1Zy5oIgorCisjaW5jbHVkZSA8Y2Zsb2F0PgorCituYW1lc3BhY2UKK3sKK1RTdHJpbmcgYXJy
YXlCcmFja2V0cyhjb25zdCBUVHlwZSYgdHlwZSkKK3sKKyAgICBBU1NFUlQodHlwZS5pc0FycmF5
KCkpOworICAgIFRJbmZvU2lua0Jhc2Ugb3V0OworICAgIG91dCA8PCAiWyIgPDwgdHlwZS5nZXRB
cnJheVNpemUoKSA8PCAiXSI7CisgICAgcmV0dXJuIFRTdHJpbmcob3V0LmNfc3RyKCkpOworfQor
Citib29sIGlzU2luZ2xlU3RhdGVtZW50KFRJbnRlcm1Ob2RlKiBub2RlKSB7CisgICAgaWYgKGNv
bnN0IFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JlZ2F0ZSA9IG5vZGUtPmdldEFzQWdncmVnYXRlKCkp
CisgICAgeworICAgICAgICByZXR1cm4gKGFnZ3JlZ2F0ZS0+Z2V0T3AoKSAhPSBFT3BGdW5jdGlv
bikgJiYKKyAgICAgICAgICAgICAgIChhZ2dyZWdhdGUtPmdldE9wKCkgIT0gRU9wU2VxdWVuY2Up
OworICAgIH0KKyAgICBlbHNlIGlmIChjb25zdCBUSW50ZXJtU2VsZWN0aW9uKiBzZWxlY3Rpb24g
PSBub2RlLT5nZXRBc1NlbGVjdGlvbk5vZGUoKSkKKyAgICB7CisgICAgICAgIC8vIFRlcm5hcnkg
b3BlcmF0b3JzIGFyZSB1c3VhbGx5IHBhcnQgb2YgYW4gYXNzaWdubWVudCBvcGVyYXRvci4KKyAg
ICAgICAgLy8gVGhpcyBoYW5kbGVzIHRob3NlIHJhcmUgY2FzZXMgaW4gd2hpY2ggdGhleSBhcmUg
YWxsIGJ5IHRoZW1zZWx2ZXMuCisgICAgICAgIHJldHVybiBzZWxlY3Rpb24tPnVzZXNUZXJuYXJ5
T3BlcmF0b3IoKTsKKyAgICB9CisgICAgZWxzZSBpZiAobm9kZS0+Z2V0QXNMb29wTm9kZSgpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30K
K30gIC8vIG5hbWVzcGFjZQorCitUT3V0cHV0R0xTTEJhc2U6OlRPdXRwdXRHTFNMQmFzZShUSW5m
b1NpbmtCYXNlJiBvYmpTaW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hB
cnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lTWFwJiBuYW1lTWFwLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKKyAgICA6
IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgdHJ1ZSwgdHJ1ZSksCisgICAgICBtT2JqU2luayhvYmpT
aW5rKSwKKyAgICAgIG1EZWNsYXJpbmdWYXJpYWJsZXMoZmFsc2UpLAorICAgICAgbUNsYW1waW5n
U3RyYXRlZ3koY2xhbXBpbmdTdHJhdGVneSksCisgICAgICBtSGFzaEZ1bmN0aW9uKGhhc2hGdW5j
dGlvbiksCisgICAgICBtTmFtZU1hcChuYW1lTWFwKSwKKyAgICAgIG1TeW1ib2xUYWJsZShzeW1i
b2xUYWJsZSkKK3sKK30KKwordm9pZCBUT3V0cHV0R0xTTEJhc2U6OndyaXRlVHJpcGxldChWaXNp
dCB2aXNpdCwgY29uc3QgY2hhciogcHJlU3RyLCBjb25zdCBjaGFyKiBpblN0ciwgY29uc3QgY2hh
ciogcG9zdFN0cikKK3sKKyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7CisgICAg
aWYgKHZpc2l0ID09IFByZVZpc2l0ICYmIHByZVN0cikKKyAgICB7CisgICAgICAgIG91dCA8PCBw
cmVTdHI7CisgICAgfQorICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQgJiYgaW5TdHIpCisg
ICAgeworICAgICAgICBvdXQgPDwgaW5TdHI7CisgICAgfQorICAgIGVsc2UgaWYgKHZpc2l0ID09
IFBvc3RWaXNpdCAmJiBwb3N0U3RyKQorICAgIHsKKyAgICAgICAgb3V0IDw8IHBvc3RTdHI7Cisg
ICAgfQorfQorCit2b2lkIFRPdXRwdXRHTFNMQmFzZTo6d3JpdGVWYXJpYWJsZVR5cGUoY29uc3Qg
VFR5cGUmIHR5cGUpCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOworICAg
IFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gdHlwZS5nZXRRdWFsaWZpZXIoKTsKKyAgICAvLyBUT0RP
KGFsb2twKTogVmFsaWRhdGUgcXVhbGlmaWVyIGZvciB2YXJpYWJsZSBkZWNsYXJhdGlvbnMuCisg
ICAgaWYgKChxdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSAmJiAocXVhbGlmaWVyICE9IEV2cUds
b2JhbCkpCisgICAgICAgIG91dCA8PCB0eXBlLmdldFF1YWxpZmllclN0cmluZygpIDw8ICIgIjsK
KyAgICAvLyBEZWNsYXJlIHRoZSBzdHJ1Y3QgaWYgd2UgaGF2ZSBub3QgZG9uZSBzbyBhbHJlYWR5
LgorICAgIGlmICgodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpICYmICFzdHJ1Y3RE
ZWNsYXJlZCh0eXBlLmdldFN0cnVjdCgpKSkKKyAgICB7CisgICAgICAgIGRlY2xhcmVTdHJ1Y3Qo
dHlwZS5nZXRTdHJ1Y3QoKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmICh3
cml0ZVZhcmlhYmxlUHJlY2lzaW9uKHR5cGUuZ2V0UHJlY2lzaW9uKCkpKQorICAgICAgICAgICAg
b3V0IDw8ICIgIjsKKyAgICAgICAgb3V0IDw8IGdldFR5cGVOYW1lKHR5cGUpOworICAgIH0KK30K
Kwordm9pZCBUT3V0cHV0R0xTTEJhc2U6OndyaXRlRnVuY3Rpb25QYXJhbWV0ZXJzKGNvbnN0IFRJ
bnRlcm1TZXF1ZW5jZSYgYXJncykKK3sKKyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5r
KCk7CisgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBhcmdz
LmJlZ2luKCk7CisgICAgICAgICBpdGVyICE9IGFyZ3MuZW5kKCk7ICsraXRlcikKKyAgICB7Cisg
ICAgICAgIGNvbnN0IFRJbnRlcm1TeW1ib2wqIGFyZyA9ICgqaXRlciktPmdldEFzU3ltYm9sTm9k
ZSgpOworICAgICAgICBBU1NFUlQoYXJnICE9IE5VTEwpOworCisgICAgICAgIGNvbnN0IFRUeXBl
JiB0eXBlID0gYXJnLT5nZXRUeXBlKCk7CisgICAgICAgIHdyaXRlVmFyaWFibGVUeXBlKHR5cGUp
OworCisgICAgICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUgPSBhcmctPmdldFN5bWJvbCgpOworICAg
ICAgICBpZiAoIW5hbWUuZW1wdHkoKSkKKyAgICAgICAgICAgIG91dCA8PCAiICIgPDwgaGFzaE5h
bWUobmFtZSk7CisgICAgICAgIGlmICh0eXBlLmlzQXJyYXkoKSkKKyAgICAgICAgICAgIG91dCA8
PCBhcnJheUJyYWNrZXRzKHR5cGUpOworCisgICAgICAgIC8vIFB1dCBhIGNvbW1hIGlmIHRoaXMg
aXMgbm90IHRoZSBsYXN0IGFyZ3VtZW50LgorICAgICAgICBpZiAoaXRlciAhPSBhcmdzLmVuZCgp
IC0gMSkKKyAgICAgICAgICAgIG91dCA8PCAiLCAiOworICAgIH0KK30KKworY29uc3QgQ29uc3Rh
bnRVbmlvbiogVE91dHB1dEdMU0xCYXNlOjp3cml0ZUNvbnN0YW50VW5pb24oY29uc3QgVFR5cGUm
IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBDb25zdGFudFVuaW9uKiBwQ29uc3RVbmlvbikKK3sKKyAgICBUSW5mb1Np
bmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7CisKKyAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9
PSBFYnRTdHJ1Y3QpCisgICAgeworICAgICAgICBjb25zdCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSB0eXBlLmdldFN0cnVjdCgpOworICAgICAgICBvdXQgPDwgaGFzaE5hbWUoc3RydWN0dXJlLT5u
YW1lKCkpIDw8ICIoIjsKKworICAgICAgICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSBzdHJ1
Y3R1cmUtPmZpZWxkcygpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpZWxkcy5z
aXplKCk7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFR5cGUqIGZpZWxkVHlw
ZSA9IGZpZWxkc1tpXS0+dHlwZSgpOworICAgICAgICAgICAgQVNTRVJUKGZpZWxkVHlwZSAhPSBO
VUxMKTsKKyAgICAgICAgICAgIHBDb25zdFVuaW9uID0gd3JpdGVDb25zdGFudFVuaW9uKCpmaWVs
ZFR5cGUsIHBDb25zdFVuaW9uKTsKKyAgICAgICAgICAgIGlmIChpICE9IGZpZWxkcy5zaXplKCkg
LSAxKSBvdXQgPDwgIiwgIjsKKyAgICAgICAgfQorICAgICAgICBvdXQgPDwgIikiOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICBzaXplX3Qgc2l6ZSA9IHR5cGUuZ2V0T2JqZWN0U2l6
ZSgpOworICAgICAgICBib29sIHdyaXRlVHlwZSA9IHNpemUgPiAxOworICAgICAgICBpZiAod3Jp
dGVUeXBlKSBvdXQgPDwgZ2V0VHlwZU5hbWUodHlwZSkgPDwgIigiOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemU7ICsraSwgKytwQ29uc3RVbmlvbikKKyAgICAgICAgeworICAg
ICAgICAgICAgc3dpdGNoIChwQ29uc3RVbmlvbi0+Z2V0VHlwZSgpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IG91dCA8PCBzdGQ6Om1pbihGTFRfTUFYLCBz
dGQ6Om1heCgtRkxUX01BWCwgcENvbnN0VW5pb24tPmdldEZDb25zdCgpKSk7IGJyZWFrOworICAg
ICAgICAgICAgICAgIGNhc2UgRWJ0SW50OiBvdXQgPDwgcENvbnN0VW5pb24tPmdldElDb25zdCgp
OyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6IG91dCA8PCBwQ29uc3RVbmlv
bi0+Z2V0QkNvbnN0KCk7IGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaSAhPSBzaXplIC0gMSkgb3V0
IDw8ICIsICI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHdyaXRlVHlwZSkgb3V0IDw8ICIpIjsK
KyAgICB9CisgICAgcmV0dXJuIHBDb25zdFVuaW9uOworfQorCit2b2lkIFRPdXRwdXRHTFNMQmFz
ZTo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNl
JiBvdXQgPSBvYmpTaW5rKCk7CisgICAgaWYgKG1Mb29wVW5yb2xsLk5lZWRzVG9SZXBsYWNlU3lt
Ym9sV2l0aFZhbHVlKG5vZGUpKQorICAgICAgICBvdXQgPDwgbUxvb3BVbnJvbGwuR2V0TG9vcElu
ZGV4VmFsdWUobm9kZSk7CisgICAgZWxzZQorICAgICAgICBvdXQgPDwgaGFzaFZhcmlhYmxlTmFt
ZShub2RlLT5nZXRTeW1ib2woKSk7CisKKyAgICBpZiAobURlY2xhcmluZ1ZhcmlhYmxlcyAmJiBu
b2RlLT5nZXRUeXBlKCkuaXNBcnJheSgpKQorICAgICAgICBvdXQgPDwgYXJyYXlCcmFja2V0cyhu
b2RlLT5nZXRUeXBlKCkpOworfQorCit2b2lkIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRDb25zdGFu
dFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKQoreworICAgIHdyaXRlQ29uc3RhbnRV
bmlvbihub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCkpOworfQor
Citib29sIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1C
aW5hcnkqIG5vZGUpCit7CisgICAgYm9vbCB2aXNpdENoaWxkcmVuID0gdHJ1ZTsKKyAgICBUSW5m
b1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7CisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQor
ICAgIHsKKyAgICAgICAgY2FzZSBFT3BJbml0aWFsaXplOgorICAgICAgICAgICAgaWYgKHZpc2l0
ID09IEluVmlzaXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgPSAi
OworICAgICAgICAgICAgICAgIC8vIFJIUyBvZiBpbml0aWFsaXplIGlzIG5vdCBiZWluZyBkZWNs
YXJlZC4KKyAgICAgICAgICAgICAgICBtRGVjbGFyaW5nVmFyaWFibGVzID0gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BBc3NpZ246IHdy
aXRlVHJpcGxldCh2aXNpdCwgIigiLCAiID0gIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wQWRkQXNzaWduOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiArPSAiLCAiKSIpOyBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAi
IC09ICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcERpdkFzc2lnbjogd3JpdGVUcmlw
bGV0KHZpc2l0LCAiKCIsICIgLz0gIiwgIikiKTsgYnJlYWs7CisgICAgICAgIC8vIE5vdGljZSB0
aGUgZmFsbC10aHJvdWdoLgorICAgICAgICBjYXNlIEVPcE11bEFzc2lnbjogCisgICAgICAgIGNh
c2UgRU9wVmVjdG9yVGltZXNNYXRyaXhBc3NpZ246CisgICAgICAgIGNhc2UgRU9wVmVjdG9yVGlt
ZXNTY2FsYXJBc3NpZ246CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ246
CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246CisgICAgICAgICAgICB3
cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAqPSAiLCAiKSIpOworICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDoKKyAgICAgICAgICAgIHdyaXRlVHJpcGxl
dCh2aXNpdCwgTlVMTCwgIlsiLCAiXSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wSW5kZXhJbmRpcmVjdDoKKyAgICAgICAgICAgIGlmIChub2RlLT5nZXRBZGRJbmRleENs
YW1wKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHZpc2l0ID09IEluVmlz
aXQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAobUNsYW1waW5n
U3RyYXRlZ3kgPT0gU0hfQ0xBTVBfV0lUSF9DTEFNUF9JTlRSSU5TSUMpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG91dCA8PCAiW2ludChjbGFtcChmbG9hdCgiOworICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJbd2ViZ2xfaW50
X2NsYW1wKCI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZpc2l0KQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgaW50IG1heFNpemU7CisgICAgICAgICAgICAgICAgICAg
IFRJbnRlcm1UeXBlZCAqbGVmdCA9IG5vZGUtPmdldExlZnQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgVFR5cGUgbGVmdFR5cGUgPSBsZWZ0LT5nZXRUeXBlKCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGxlZnQtPmlzQXJyYXkoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gVGhlIHNoYWRlciB3aWxsIGZhaWwgdmFsaWRhdGlvbiBpZiB0aGUg
YXJyYXkgbGVuZ3RoIGlzIG5vdCA+IDAuCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhTaXpl
ID0gbGVmdFR5cGUuZ2V0QXJyYXlTaXplKCkgLSAxOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgbWF4U2l6ZSA9IGxlZnRUeXBlLmdldE5vbWluYWxTaXplKCkgLSAxOwor
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1DbGFtcGlu
Z1N0cmF0ZWd5ID09IFNIX0NMQU1QX1dJVEhfQ0xBTVBfSU5UUklOU0lDKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBvdXQgPDwgIiksIDAuMCwgZmxvYXQoIiA8PCBtYXhTaXplIDw8ICIpKSld
IjsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG91dCA8PCAiLCAwLCAiIDw8IG1heFNpemUgPDwgIildIjsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3cml0ZVRyaXBsZXQodmlzaXQsIE5VTEwsICJb
IiwgIl0iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEVPcEluZGV4RGlyZWN0U3RydWN0OgorICAgICAgICAgICAgaWYgKHZpc2l0ID09IEluVmlzaXQp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gSGVyZSB3ZSBhcmUgd3JpdGluZyBv
dXQgImZvby5iYXIiLCB3aGVyZSAiZm9vIiBpcyBzdHJ1Y3QKKyAgICAgICAgICAgICAgICAvLyBh
bmQgImJhciIgaXMgZmllbGQuIEluIEFTVCwgaXQgaXMgcmVwcmVzZW50ZWQgYXMgYSBiaW5hcnkK
KyAgICAgICAgICAgICAgICAvLyBub2RlLCB3aGVyZSBsZWZ0IGNoaWxkIHJlcHJlc2VudHMgImZv
byIgYW5kIHJpZ2h0IGNoaWxkICJiYXIiLgorICAgICAgICAgICAgICAgIC8vIFRoZSBub2RlIGl0
c2VsZiByZXByZXNlbnRzICIuIi4gVGhlIHN0cnVjdCBmaWVsZCAiYmFyIiBpcworICAgICAgICAg
ICAgICAgIC8vIGFjdHVhbGx5IHN0b3JlZCBhcyBhbiBpbmRleCBpbnRvIFRTdHJ1Y3R1cmU6OmZp
ZWxkcy4KKyAgICAgICAgICAgICAgICBvdXQgPDwgIi4iOworICAgICAgICAgICAgICAgIGNvbnN0
IFRTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpLmdldFN0
cnVjdCgpOworICAgICAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1Db25zdGFudFVuaW9uKiBpbmRl
eCA9IG5vZGUtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAgICAgICAgICAg
ICAgIGNvbnN0IFRGaWVsZCogZmllbGQgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpW2luZGV4LT5nZXRJ
Q29uc3QoMCldOworCisgICAgICAgICAgICAgICAgVFN0cmluZyBmaWVsZE5hbWUgPSBmaWVsZC0+
bmFtZSgpOworICAgICAgICAgICAgICAgIGlmICghbVN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKHN0
cnVjdHVyZS0+bmFtZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gaGFzaE5h
bWUoZmllbGROYW1lKTsKKworICAgICAgICAgICAgICAgIG91dCA8PCBmaWVsZE5hbWU7CisgICAg
ICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVjdG9yU3dpenpsZToKKyAgICAgICAgICAg
IGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91
dCA8PCAiLiI7CisgICAgICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSogcmlnaHRDaGlsZCA9
IG5vZGUtPmdldFJpZ2h0KCktPmdldEFzQWdncmVnYXRlKCk7CisgICAgICAgICAgICAgICAgVElu
dGVybVNlcXVlbmNlJiBzZXF1ZW5jZSA9IHJpZ2h0Q2hpbGQtPmdldFNlcXVlbmNlKCk7CisgICAg
ICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNpdCA9IHNlcXVlbmNl
LmJlZ2luKCk7IHNpdCAhPSBzZXF1ZW5jZS5lbmQoKTsgKytzaXQpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogZWxlbWVudCA9ICgq
c2l0KS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChl
bGVtZW50LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQpOworICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoZWxlbWVudC0+Z2V0Tm9taW5hbFNpemUoKSA9PSAxKTsKKyAgICAgICAgICAgICAgICAg
ICAgY29uc3QgQ29uc3RhbnRVbmlvbiYgZGF0YSA9IGVsZW1lbnQtPmdldFVuaW9uQXJyYXlQb2lu
dGVyKClbMF07CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChkYXRhLmdldFR5cGUoKSA9PSBF
YnRJbnQpOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGRhdGEuZ2V0SUNvbnN0KCkpCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDogb3V0
IDw8ICJ4IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IG91dCA8PCAi
eSI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBvdXQgPDwgInoiOyBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogb3V0IDw8ICJ3IjsgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB2aXNpdENoaWxkcmVuID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIEVPcEFkZDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgKyAi
LCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BTdWI6IHdyaXRlVHJpcGxldCh2aXNpdCwg
IigiLCAiIC0gIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTXVsOiB3cml0ZVRyaXBs
ZXQodmlzaXQsICIoIiwgIiAqICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcERpdjog
d3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgLyAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BNb2Q6IFVOSU1QTEVNRU5URUQoKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRXF1YWw6
IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiID09ICIsICIpIik7IGJyZWFrOworICAgICAgICBj
YXNlIEVPcE5vdEVxdWFsOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAhPSAiLCAiKSIpOyBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIs
ICIgPCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjogd3JpdGVU
cmlwbGV0KHZpc2l0LCAiKCIsICIgPiAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BM
ZXNzVGhhbkVxdWFsOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiA8PSAiLCAiKSIpOyBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiB3cml0ZVRyaXBsZXQodmlzaXQs
ICIoIiwgIiA+PSAiLCAiKSIpOyBicmVhazsKKworICAgICAgICAvLyBOb3RpY2UgdGhlIGZhbGwt
dGhyb3VnaC4KKyAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjoKKyAgICAgICAgY2Fz
ZSBFT3BWZWN0b3JUaW1lc01hdHJpeDoKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1ZlY3Rv
cjoKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhcjoKKyAgICAgICAgY2FzZSBFT3BN
YXRyaXhUaW1lc01hdHJpeDoKKyAgICAgICAgICAgIHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAi
ICogIiwgIikiKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wTG9naWNh
bE9yOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiB8fCAiLCAiKSIpOyBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BMb2dpY2FsWG9yOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiBeXiAiLCAi
KSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiB3cml0ZVRyaXBsZXQodmlz
aXQsICIoIiwgIiAmJiAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHZpc2l0Q2hpbGRyZW47Cit9CisKK2Jv
b2wgVE91dHB1dEdMU0xCYXNlOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkq
IG5vZGUpCit7CisgICAgVFN0cmluZyBwcmVTdHJpbmc7CisgICAgVFN0cmluZyBwb3N0U3RyaW5n
ID0gIikiOworCisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAgICAgY2Fz
ZSBFT3BOZWdhdGl2ZTogcHJlU3RyaW5nID0gIigtIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
VmVjdG9yTG9naWNhbE5vdDogcHJlU3RyaW5nID0gIm5vdCgiOyBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BMb2dpY2FsTm90OiBwcmVTdHJpbmcgPSAiKCEiOyBicmVhazsKKworICAgICAgICBjYXNl
IEVPcFBvc3RJbmNyZW1lbnQ6IHByZVN0cmluZyA9ICIoIjsgcG9zdFN0cmluZyA9ICIrKykiOyBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OiBwcmVTdHJpbmcgPSAiKCI7IHBv
c3RTdHJpbmcgPSAiLS0pIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OiBw
cmVTdHJpbmcgPSAiKCsrIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OiBw
cmVTdHJpbmcgPSAiKC0tIjsgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BDb252SW50VG9Cb29s
OgorICAgICAgICBjYXNlIEVPcENvbnZGbG9hdFRvQm9vbDoKKyAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIDE6IHByZVN0cmluZyA9ICAiYm9vbCgiOyAgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOiBwcmVTdHJpbmcgPSAiYnZlYzIoIjsgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSAzOiBwcmVTdHJpbmcgPSAiYnZlYzMoIjsgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSA0OiBwcmVTdHJpbmcgPSAiYnZlYzQoIjsgYnJlYWs7CisgICAg
ICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnZCb29sVG9GbG9hdDoKKyAgICAgICAg
Y2FzZSBFT3BDb252SW50VG9GbG9hdDoKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3Bl
cmFuZCgpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBjYXNlIDE6IHByZVN0cmluZyA9ICJmbG9hdCgiOyAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSAyOiBwcmVTdHJpbmcgPSAidmVjMigiOyBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIDM6IHByZVN0cmluZyA9ICJ2ZWMzKCI7IGJyZWFrOworICAgICAgICAgICAgICAg
IGNhc2UgNDogcHJlU3RyaW5nID0gInZlYzQoIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcENvbnZGbG9hdFRvSW50OgorICAgICAgICBjYXNlIEVPcENvbnZCb29s
VG9JbnQ6CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wZXJhbmQoKS0+Z2V0VHlwZSgp
LmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSAx
OiBwcmVTdHJpbmcgPSAiaW50KCI7ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6IHBy
ZVN0cmluZyA9ICJpdmVjMigiOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IHByZVN0
cmluZyA9ICJpdmVjMygiOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6IHByZVN0cmlu
ZyA9ICJpdmVjNCgiOyBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBF
T3BSYWRpYW5zOiBwcmVTdHJpbmcgPSAicmFkaWFucygiOyBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BEZWdyZWVzOiBwcmVTdHJpbmcgPSAiZGVncmVlcygiOyBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BTaW46IHByZVN0cmluZyA9ICJzaW4oIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29zOiBw
cmVTdHJpbmcgPSAiY29zKCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFRhbjogcHJlU3RyaW5n
ID0gInRhbigiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BBc2luOiBwcmVTdHJpbmcgPSAiYXNp
bigiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BBY29zOiBwcmVTdHJpbmcgPSAiYWNvcygiOyBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BBdGFuOiBwcmVTdHJpbmcgPSAiYXRhbigiOyBicmVhazsK
KworICAgICAgICBjYXNlIEVPcEV4cDogcHJlU3RyaW5nID0gImV4cCgiOyBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BMb2c6IHByZVN0cmluZyA9ICJsb2coIjsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wRXhwMjogcHJlU3RyaW5nID0gImV4cDIoIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9n
MjogcHJlU3RyaW5nID0gImxvZzIoIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU3FydDogcHJl
U3RyaW5nID0gInNxcnQoIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wSW52ZXJzZVNxcnQ6IHBy
ZVN0cmluZyA9ICJpbnZlcnNlc3FydCgiOyBicmVhazsKKworICAgICAgICBjYXNlIEVPcEFiczog
cHJlU3RyaW5nID0gImFicygiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BTaWduOiBwcmVTdHJp
bmcgPSAic2lnbigiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BGbG9vcjogcHJlU3RyaW5nID0g
ImZsb29yKCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENlaWw6IHByZVN0cmluZyA9ICJjZWls
KCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEZyYWN0OiBwcmVTdHJpbmcgPSAiZnJhY3QoIjsg
YnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BMZW5ndGg6IHByZVN0cmluZyA9ICJsZW5ndGgoIjsg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiBwcmVTdHJpbmcgPSAibm9ybWFsaXpl
KCI7IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wREZkeDogcHJlU3RyaW5nID0gImRGZHgoIjsg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wREZkeTogcHJlU3RyaW5nID0gImRGZHkoIjsgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wRndpZHRoOiBwcmVTdHJpbmcgPSAiZndpZHRoKCI7IGJyZWFrOwor
CisgICAgICAgIGNhc2UgRU9wQW55OiBwcmVTdHJpbmcgPSAiYW55KCI7IGJyZWFrOworICAgICAg
ICBjYXNlIEVPcEFsbDogcHJlU3RyaW5nID0gImFsbCgiOyBicmVhazsKKworICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKKyAgICB9CisKKyAgICBpZiAodmlzaXQgPT0gUHJl
VmlzaXQgJiYgbm9kZS0+Z2V0VXNlRW11bGF0ZWRGdW5jdGlvbigpKQorICAgICAgICBwcmVTdHJp
bmcgPSBCdWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6R2V0RW11bGF0ZWRGdW5jdGlvbk5hbWUocHJl
U3RyaW5nKTsKKyAgICB3cml0ZVRyaXBsZXQodmlzaXQsIHByZVN0cmluZy5jX3N0cigpLCBOVUxM
LCBwb3N0U3RyaW5nLmNfc3RyKCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVE91
dHB1dEdMU0xCYXNlOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlv
biogbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7CisKKyAgICBp
ZiAobm9kZS0+dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQorICAgIHsKKyAgICAgICAgLy8gTm90aWNl
IHR3byBicmFja2V0cyBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQuIFRoZSBvdXRlciBvbmVzCisg
ICAgICAgIC8vIGVuY2Fwc3VsYXRlIHRoZSB3aG9sZSB0ZXJuYXJ5IGV4cHJlc3Npb24uIFRoaXMg
cHJlc2VydmVzIHRoZQorICAgICAgICAvLyBvcmRlciBvZiBwcmVjZWRlbmNlIHdoZW4gdGVybmFy
eSBleHByZXNzaW9ucyBhcmUgdXNlZCBpbiBhCisgICAgICAgIC8vIGNvbXBvdW5kIGV4cHJlc3Np
b24sIGkuZS4sIGMgPSAyICogKGEgPCBiID8gMSA6IDIpLgorICAgICAgICBvdXQgPDwgIigoIjsK
KyAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBv
dXQgPDwgIikgPyAoIjsKKyAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKHRo
aXMpOworICAgICAgICBvdXQgPDwgIikgOiAoIjsKKyAgICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9j
aygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIpKSI7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIG91dCA8PCAiaWYgKCI7CisgICAgICAgIG5vZGUtPmdldENvbmRp
dGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIpXG4iOworCisgICAgICAg
IGluY3JlbWVudERlcHRoKG5vZGUpOworICAgICAgICB2aXNpdENvZGVCbG9jayhub2RlLT5nZXRU
cnVlQmxvY2soKSk7CisKKyAgICAgICAgaWYgKG5vZGUtPmdldEZhbHNlQmxvY2soKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgb3V0IDw8ICJlbHNlXG4iOworICAgICAgICAgICAgdmlzaXRDb2Rl
QmxvY2sobm9kZS0+Z2V0RmFsc2VCbG9jaygpKTsKKyAgICAgICAgfQorICAgICAgICBkZWNyZW1l
bnREZXB0aCgpOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVE91dHB1dEdM
U0xCYXNlOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9k
ZSkKK3sKKyAgICBib29sIHZpc2l0Q2hpbGRyZW4gPSB0cnVlOworICAgIFRJbmZvU2lua0Jhc2Um
IG91dCA9IG9ialNpbmsoKTsKKyAgICBUU3RyaW5nIHByZVN0cmluZzsKKyAgICBib29sIGRlbGF5
ZWRXcml0ZSA9IGZhbHNlOworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7CisgICAg
ICAgIGNhc2UgRU9wU2VxdWVuY2U6IHsKKyAgICAgICAgICAgIC8vIFNjb3BlIHRoZSBzZXF1ZW5j
ZXMgZXhjZXB0IHdoZW4gYXQgdGhlIGdsb2JhbCBzY29wZS4KKyAgICAgICAgICAgIGlmIChkZXB0
aCA+IDApIG91dCA8PCAie1xuIjsKKworICAgICAgICAgICAgaW5jcmVtZW50RGVwdGgobm9kZSk7
CisgICAgICAgICAgICBjb25zdCBUSW50ZXJtU2VxdWVuY2UmIHNlcXVlbmNlID0gbm9kZS0+Z2V0
U2VxdWVuY2UoKTsKKyAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVy
YXRvciBpdGVyID0gc2VxdWVuY2UuYmVnaW4oKTsKKyAgICAgICAgICAgICAgICAgaXRlciAhPSBz
ZXF1ZW5jZS5lbmQoKTsgKytpdGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRJ
bnRlcm1Ob2RlKiBub2RlID0gKml0ZXI7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUgIT0g
TlVMTCk7CisgICAgICAgICAgICAgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisKKyAgICAgICAg
ICAgICAgICBpZiAoaXNTaW5nbGVTdGF0ZW1lbnQobm9kZSkpCisgICAgICAgICAgICAgICAgICAg
IG91dCA8PCAiO1xuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlY3JlbWVudERlcHRo
KCk7CisKKyAgICAgICAgICAgIC8vIFNjb3BlIHRoZSBzZXF1ZW5jZXMgZXhjZXB0IHdoZW4gYXQg
dGhlIGdsb2JhbCBzY29wZS4KKyAgICAgICAgICAgIGlmIChkZXB0aCA+IDApIG91dCA8PCAifVxu
IjsKKyAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2UgRU9wUHJvdG90eXBlOiB7CisgICAgICAgICAgICAv
LyBGdW5jdGlvbiBkZWNsYXJhdGlvbi4KKyAgICAgICAgICAgIEFTU0VSVCh2aXNpdCA9PSBQcmVW
aXNpdCk7CisgICAgICAgICAgICB3cml0ZVZhcmlhYmxlVHlwZShub2RlLT5nZXRUeXBlKCkpOwor
ICAgICAgICAgICAgb3V0IDw8ICIgIiA8PCBoYXNoTmFtZShub2RlLT5nZXROYW1lKCkpOworCisg
ICAgICAgICAgICBvdXQgPDwgIigiOworICAgICAgICAgICAgd3JpdGVGdW5jdGlvblBhcmFtZXRl
cnMobm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgICAgICBvdXQgPDwgIikiOworCisgICAg
ICAgICAgICB2aXNpdENoaWxkcmVuID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIEVPcEZ1bmN0aW9uOiB7CisgICAgICAgICAgICAvLyBGdW5jdGlv
biBkZWZpbml0aW9uLgorICAgICAgICAgICAgQVNTRVJUKHZpc2l0ID09IFByZVZpc2l0KTsKKyAg
ICAgICAgICAgIHdyaXRlVmFyaWFibGVUeXBlKG5vZGUtPmdldFR5cGUoKSk7CisgICAgICAgICAg
ICBvdXQgPDwgIiAiIDw8IGhhc2hGdW5jdGlvbk5hbWUobm9kZS0+Z2V0TmFtZSgpKTsKKworICAg
ICAgICAgICAgaW5jcmVtZW50RGVwdGgobm9kZSk7CisgICAgICAgICAgICAvLyBGdW5jdGlvbiBk
ZWZpbml0aW9uIG5vZGUgY29udGFpbnMgb25lIG9yIHR3byBjaGlsZHJlbiBub2RlcworICAgICAg
ICAgICAgLy8gcmVwcmVzZW50aW5nIGZ1bmN0aW9uIHBhcmFtZXRlcnMgYW5kIGZ1bmN0aW9uIGJv
ZHkuIFRoZSBsYXR0ZXIKKyAgICAgICAgICAgIC8vIGlzIG5vdCBwcmVzZW50IGluIGNhc2Ugb2Yg
ZW1wdHkgZnVuY3Rpb24gYm9kaWVzLgorICAgICAgICAgICAgY29uc3QgVEludGVybVNlcXVlbmNl
JiBzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAgICBBU1NFUlQoKHNl
cXVlbmNlLnNpemUoKSA9PSAxKSB8fCAoc2VxdWVuY2Uuc2l6ZSgpID09IDIpKTsKKyAgICAgICAg
ICAgIFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3Igc2VxSXRlciA9IHNlcXVlbmNlLmJl
Z2luKCk7CisKKyAgICAgICAgICAgIC8vIFRyYXZlcnNlIGZ1bmN0aW9uIHBhcmFtZXRlcnMuCisg
ICAgICAgICAgICBUSW50ZXJtQWdncmVnYXRlKiBwYXJhbXMgPSAoKnNlcUl0ZXIpLT5nZXRBc0Fn
Z3JlZ2F0ZSgpOworICAgICAgICAgICAgQVNTRVJUKHBhcmFtcyAhPSBOVUxMKTsKKyAgICAgICAg
ICAgIEFTU0VSVChwYXJhbXMtPmdldE9wKCkgPT0gRU9wUGFyYW1ldGVycyk7CisgICAgICAgICAg
ICBwYXJhbXMtPnRyYXZlcnNlKHRoaXMpOworCisgICAgICAgICAgICAvLyBUcmF2ZXJzZSBmdW5j
dGlvbiBib2R5LgorICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSogYm9keSA9ICsrc2VxSXRl
ciAhPSBzZXF1ZW5jZS5lbmQoKSA/CisgICAgICAgICAgICAgICAgKCpzZXFJdGVyKS0+Z2V0QXNB
Z2dyZWdhdGUoKSA6IE5VTEw7CisgICAgICAgICAgICB2aXNpdENvZGVCbG9jayhib2R5KTsKKyAg
ICAgICAgICAgIGRlY3JlbWVudERlcHRoKCk7CisgCisgICAgICAgICAgICAvLyBGdWxseSBwcm9j
ZXNzZWQ7IG5vIG5lZWQgdG8gdmlzaXQgY2hpbGRyZW4uCisgICAgICAgICAgICB2aXNpdENoaWxk
cmVuID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IEVPcEZ1bmN0aW9uQ2FsbDoKKyAgICAgICAgICAgIC8vIEZ1bmN0aW9uIGNhbGwuCisgICAgICAg
ICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgb3V0IDw8IGhhc2hGdW5jdGlvbk5hbWUobm9kZS0+Z2V0TmFtZSgpKSA8PCAiKCI7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiKSI7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BQYXJh
bWV0ZXJzOiB7CisgICAgICAgICAgICAvLyBGdW5jdGlvbiBwYXJhbWV0ZXJzLgorICAgICAgICAg
ICAgQVNTRVJUKHZpc2l0ID09IFByZVZpc2l0KTsKKyAgICAgICAgICAgIG91dCA8PCAiKCI7Cisg
ICAgICAgICAgICB3cml0ZUZ1bmN0aW9uUGFyYW1ldGVycyhub2RlLT5nZXRTZXF1ZW5jZSgpKTsK
KyAgICAgICAgICAgIG91dCA8PCAiKSI7CisgICAgICAgICAgICB2aXNpdENoaWxkcmVuID0gZmFs
c2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEVPcERlY2xh
cmF0aW9uOiB7CisgICAgICAgICAgICAvLyBWYXJpYWJsZSBkZWNsYXJhdGlvbi4KKyAgICAgICAg
ICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBjb25zdCBUSW50ZXJtU2VxdWVuY2UmIHNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsK
KyAgICAgICAgICAgICAgICBjb25zdCBUSW50ZXJtVHlwZWQqIHZhcmlhYmxlID0gc2VxdWVuY2Uu
ZnJvbnQoKS0+Z2V0QXNUeXBlZCgpOworICAgICAgICAgICAgICAgIHdyaXRlVmFyaWFibGVUeXBl
KHZhcmlhYmxlLT5nZXRUeXBlKCkpOworICAgICAgICAgICAgICAgIG91dCA8PCAiICI7CisgICAg
ICAgICAgICAgICAgbURlY2xhcmluZ1ZhcmlhYmxlcyA9IHRydWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG91dCA8PCAiLCAiOworICAgICAgICAgICAgICAgIG1EZWNsYXJpbmdWYXJp
YWJsZXMgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG1EZWNsYXJpbmdWYXJpYWJsZXMgPSBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRU9w
Q29uc3RydWN0RmxvYXQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgImZsb2F0KCIsIE5VTEwsICIpIik7
IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzI6IHdyaXRlVHJpcGxldCh2aXNp
dCwgInZlYzIoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0
VmVjMzogd3JpdGVUcmlwbGV0KHZpc2l0LCAidmVjMygiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWM0OiB3cml0ZVRyaXBsZXQodmlzaXQsICJ2ZWM0KCIs
ICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6IHdyaXRl
VHJpcGxldCh2aXNpdCwgImJvb2woIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0QlZlYzI6IHdyaXRlVHJpcGxldCh2aXNpdCwgImJ2ZWMyKCIsICIsICIsICIp
Iik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMzOiB3cml0ZVRyaXBsZXQo
dmlzaXQsICJidmVjMygiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25z
dHJ1Y3RCVmVjNDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYnZlYzQoIiwgIiwgIiwgIikiKTsgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OiB3cml0ZVRyaXBsZXQodmlzaXQsICJp
bnQoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6
IHdyaXRlVHJpcGxldCh2aXNpdCwgIml2ZWMyKCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAg
ICBjYXNlIEVPcENvbnN0cnVjdElWZWMzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJpdmVjMygiLCAi
LCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjNDogd3JpdGVU
cmlwbGV0KHZpc2l0LCAiaXZlYzQoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0TWF0Mjogd3JpdGVUcmlwbGV0KHZpc2l0LCAibWF0MigiLCAiLCAiLCAiKSIp
OyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQzOiB3cml0ZVRyaXBsZXQodmlz
aXQsICJtYXQzKCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVj
dE1hdDQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgIm1hdDQoIiwgIiwgIiwgIikiKTsgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wQ29uc3RydWN0U3RydWN0OgorICAgICAgICAgICAgaWYgKHZpc2l0ID09
IFByZVZpc2l0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlJiB0
eXBlID0gbm9kZS0+Z2V0VHlwZSgpOworICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBlLmdldEJh
c2ljVHlwZSgpID09IEVidFN0cnVjdCk7CisgICAgICAgICAgICAgICAgb3V0IDw8IGhhc2hOYW1l
KHR5cGUuZ2V0U3RydWN0KCktPm5hbWUoKSkgPDwgIigiOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBvdXQgPDwgIiwgIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIikiOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjogcHJlU3RyaW5n
ID0gImxlc3NUaGFuKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOworICAgICAgICBjYXNl
IEVPcEdyZWF0ZXJUaGFuOiBwcmVTdHJpbmcgPSAiZ3JlYXRlclRoYW4oIjsgZGVsYXllZFdyaXRl
ID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDogcHJlU3RyaW5n
ID0gImxlc3NUaGFuRXF1YWwoIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDogcHJlU3RyaW5nID0gImdyZWF0ZXJUaGFuRXF1YWwo
IjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVjdG9yRXF1
YWw6IHByZVN0cmluZyA9ICJlcXVhbCgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BWZWN0b3JOb3RFcXVhbDogcHJlU3RyaW5nID0gIm5vdEVxdWFsKCI7IGRl
bGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbW1hOiB3cml0ZVRy
aXBsZXQodmlzaXQsIE5VTEwsICIsICIsIE5VTEwpOyBicmVhazsKKworICAgICAgICBjYXNlIEVP
cE1vZDogcHJlU3RyaW5nID0gIm1vZCgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BQb3c6IHByZVN0cmluZyA9ICJwb3coIjsgZGVsYXllZFdyaXRlID0gdHJ1
ZTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQXRhbjogcHJlU3RyaW5nID0gImF0YW4oIjsgZGVs
YXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTWluOiBwcmVTdHJpbmcg
PSAibWluKCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOworICAgICAgICBjYXNlIEVPcE1h
eDogcHJlU3RyaW5nID0gIm1heCgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BDbGFtcDogcHJlU3RyaW5nID0gImNsYW1wKCI7IGRlbGF5ZWRXcml0ZSA9IHRy
dWU7IGJyZWFrOworICAgICAgICBjYXNlIEVPcE1peDogcHJlU3RyaW5nID0gIm1peCgiOyBkZWxh
eWVkV3JpdGUgPSB0cnVlOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BTdGVwOiBwcmVTdHJpbmcg
PSAic3RlcCgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BT
bW9vdGhTdGVwOiBwcmVTdHJpbmcgPSAic21vb3Roc3RlcCgiOyBkZWxheWVkV3JpdGUgPSB0cnVl
OyBicmVhazsKKworICAgICAgICBjYXNlIEVPcERpc3RhbmNlOiBwcmVTdHJpbmcgPSAiZGlzdGFu
Y2UoIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRG90OiBw
cmVTdHJpbmcgPSAiZG90KCI7IGRlbGF5ZWRXcml0ZSA9IHRydWU7IGJyZWFrOworICAgICAgICBj
YXNlIEVPcENyb3NzOiBwcmVTdHJpbmcgPSAiY3Jvc3MoIjsgZGVsYXllZFdyaXRlID0gdHJ1ZTsg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wRmFjZUZvcndhcmQ6IHByZVN0cmluZyA9ICJmYWNlZm9y
d2FyZCgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BSZWZs
ZWN0OiBwcmVTdHJpbmcgPSAicmVmbGVjdCgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BSZWZyYWN0OiBwcmVTdHJpbmcgPSAicmVmcmFjdCgiOyBkZWxheWVk
V3JpdGUgPSB0cnVlOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNdWw6IHByZVN0cmluZyA9ICJt
YXRyaXhDb21wTXVsdCgiOyBkZWxheWVkV3JpdGUgPSB0cnVlOyBicmVhazsKKworICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKKyAgICB9CisgICAgaWYgKGRlbGF5ZWRXcml0
ZSAmJiB2aXNpdCA9PSBQcmVWaXNpdCAmJiBub2RlLT5nZXRVc2VFbXVsYXRlZEZ1bmN0aW9uKCkp
CisgICAgICAgIHByZVN0cmluZyA9IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpHZXRFbXVsYXRl
ZEZ1bmN0aW9uTmFtZShwcmVTdHJpbmcpOworICAgIGlmIChkZWxheWVkV3JpdGUpCisgICAgICAg
IHdyaXRlVHJpcGxldCh2aXNpdCwgcHJlU3RyaW5nLmNfc3RyKCksICIsICIsICIpIik7CisgICAg
cmV0dXJuIHZpc2l0Q2hpbGRyZW47Cit9CisKK2Jvb2wgVE91dHB1dEdMU0xCYXNlOjp2aXNpdExv
b3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKiBub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2Um
IG91dCA9IG9ialNpbmsoKTsKKworICAgIGluY3JlbWVudERlcHRoKG5vZGUpOworICAgIC8vIExv
b3AgaGVhZGVyLgorICAgIFRMb29wVHlwZSBsb29wVHlwZSA9IG5vZGUtPmdldFR5cGUoKTsKKyAg
ICBpZiAobG9vcFR5cGUgPT0gRUxvb3BGb3IpICAvLyBmb3IgbG9vcAorICAgIHsKKyAgICAgICAg
aWYgKCFub2RlLT5nZXRVbnJvbGxGbGFnKCkpIHsKKyAgICAgICAgICAgIG91dCA8PCAiZm9yICgi
OworICAgICAgICAgICAgaWYgKG5vZGUtPmdldEluaXQoKSkKKyAgICAgICAgICAgICAgICBub2Rl
LT5nZXRJbml0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICI7ICI7CisK
KyAgICAgICAgICAgIGlmIChub2RlLT5nZXRDb25kaXRpb24oKSkKKyAgICAgICAgICAgICAgICBu
b2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICBvdXQgPDwg
IjsgIjsKKworICAgICAgICAgICAgaWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkKKyAgICAgICAg
ICAgICAgICBub2RlLT5nZXRFeHByZXNzaW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAg
ICAgb3V0IDw8ICIpXG4iOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGxvb3BUeXBl
ID09IEVMb29wV2hpbGUpICAvLyB3aGlsZSBsb29wCisgICAgeworICAgICAgICBvdXQgPDwgIndo
aWxlICgiOworICAgICAgICBBU1NFUlQobm9kZS0+Z2V0Q29uZGl0aW9uKCkgIT0gTlVMTCk7Cisg
ICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0
IDw8ICIpXG4iOworICAgIH0KKyAgICBlbHNlICAvLyBkby13aGlsZSBsb29wCisgICAgeworICAg
ICAgICBBU1NFUlQobG9vcFR5cGUgPT0gRUxvb3BEb1doaWxlKTsKKyAgICAgICAgb3V0IDw8ICJk
b1xuIjsKKyAgICB9CisKKyAgICAvLyBMb29wIGJvZHkuCisgICAgaWYgKG5vZGUtPmdldFVucm9s
bEZsYWcoKSkKKyAgICB7CisgICAgICAgIFRMb29wSW5kZXhJbmZvIGluZGV4SW5mbzsKKyAgICAg
ICAgbUxvb3BVbnJvbGwuRmlsbExvb3BJbmRleEluZm8obm9kZSwgaW5kZXhJbmZvKTsKKyAgICAg
ICAgbUxvb3BVbnJvbGwuUHVzaChpbmRleEluZm8pOworICAgICAgICB3aGlsZSAobUxvb3BVbnJv
bGwuU2F0aXNmaWVzTG9vcENvbmRpdGlvbigpKQorICAgICAgICB7CisgICAgICAgICAgICB2aXNp
dENvZGVCbG9jayhub2RlLT5nZXRCb2R5KCkpOworICAgICAgICAgICAgbUxvb3BVbnJvbGwuU3Rl
cCgpOworICAgICAgICB9CisgICAgICAgIG1Mb29wVW5yb2xsLlBvcCgpOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICB2aXNpdENvZGVCbG9jayhub2RlLT5nZXRCb2R5KCkpOworICAg
IH0KKworICAgIC8vIExvb3AgZm9vdGVyLgorICAgIGlmIChsb29wVHlwZSA9PSBFTG9vcERvV2hp
bGUpICAvLyBkby13aGlsZSBsb29wCisgICAgeworICAgICAgICBvdXQgPDwgIndoaWxlICgiOwor
ICAgICAgICBBU1NFUlQobm9kZS0+Z2V0Q29uZGl0aW9uKCkgIT0gTlVMTCk7CisgICAgICAgIG5v
ZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIpO1xu
IjsKKyAgICB9CisgICAgZGVjcmVtZW50RGVwdGgoKTsKKworICAgIC8vIE5vIG5lZWQgdG8gdmlz
aXQgY2hpbGRyZW4uIFRoZXkgaGF2ZSBiZWVuIGFscmVhZHkgcHJvY2Vzc2VkIGluCisgICAgLy8g
dGhpcyBmdW5jdGlvbi4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVE91dHB1dEdMU0xC
YXNlOjp2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCogbm9kZSkKK3sKKyAg
ICBzd2l0Y2ggKG5vZGUtPmdldEZsb3dPcCgpKQorICAgIHsKKyAgICAgICAgY2FzZSBFT3BLaWxs
OiB3cml0ZVRyaXBsZXQodmlzaXQsICJkaXNjYXJkIiwgTlVMTCwgTlVMTCk7IGJyZWFrOworICAg
ICAgICBjYXNlIEVPcEJyZWFrOiB3cml0ZVRyaXBsZXQodmlzaXQsICJicmVhayIsIE5VTEwsIE5V
TEwpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb250aW51ZTogd3JpdGVUcmlwbGV0KHZpc2l0
LCAiY29udGludWUiLCBOVUxMLCBOVUxMKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUmV0dXJu
OiB3cml0ZVRyaXBsZXQodmlzaXQsICJyZXR1cm4gIiwgTlVMTCwgTlVMTCk7IGJyZWFrOworICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0Q29kZUJsb2NrKFRJbnRlcm1O
b2RlKiBub2RlKSB7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gb2JqU2luaygpOworICAgIGlm
IChub2RlICE9IE5VTEwpCisgICAgeworICAgICAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAg
ICAgICAgLy8gU2luZ2xlIHN0YXRlbWVudHMgbm90IHBhcnQgb2YgYSBzZXF1ZW5jZSBuZWVkIHRv
IGJlIHRlcm1pbmF0ZWQKKyAgICAgICAgLy8gd2l0aCBzZW1pLWNvbG9uLgorICAgICAgICBpZiAo
aXNTaW5nbGVTdGF0ZW1lbnQobm9kZSkpCisgICAgICAgICAgICBvdXQgPDwgIjtcbiI7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG91dCA8PCAie1xufVxuIjsgIC8vIEVtcHR5IGNv
ZGUgYmxvY2suCisgICAgfQorfQorCitUU3RyaW5nIFRPdXRwdXRHTFNMQmFzZTo6Z2V0VHlwZU5h
bWUoY29uc3QgVFR5cGUmIHR5cGUpCit7CisgICAgVEluZm9TaW5rQmFzZSBvdXQ7CisgICAgaWYg
KHR5cGUuaXNNYXRyaXgoKSkKKyAgICB7CisgICAgICAgIG91dCA8PCAibWF0IjsKKyAgICAgICAg
b3V0IDw8IHR5cGUuZ2V0Tm9taW5hbFNpemUoKTsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZS5p
c1ZlY3RvcigpKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlLmdldEJhc2ljVHlwZSgpKQor
ICAgICAgICB7CisgICAgICAgICAgICBjYXNlIEVidEZsb2F0OiBvdXQgPDwgInZlYyI7IGJyZWFr
OworICAgICAgICAgICAgY2FzZSBFYnRJbnQ6IG91dCA8PCAiaXZlYyI7IGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBFYnRCb29sOiBvdXQgPDwgImJ2ZWMiOyBicmVhazsKKyAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IGJyZWFrOworICAgICAgICB9CisgICAgICAgIG91dCA8PCB0
eXBlLmdldE5vbWluYWxTaXplKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlm
ICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAgICAgICAgICAgIG91dCA8PCBo
YXNoTmFtZSh0eXBlLmdldFN0cnVjdCgpLT5uYW1lKCkpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBvdXQgPDwgdHlwZS5nZXRCYXNpY1N0cmluZygpOworICAgIH0KKyAgICByZXR1cm4gVFN0
cmluZyhvdXQuY19zdHIoKSk7Cit9CisKK1RTdHJpbmcgVE91dHB1dEdMU0xCYXNlOjpoYXNoTmFt
ZShjb25zdCBUU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChtSGFzaEZ1bmN0aW9uID09IE5VTEwg
fHwgbmFtZS5lbXB0eSgpKQorICAgICAgICByZXR1cm4gbmFtZTsKKyAgICBOYW1lTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1OYW1lTWFwLmZpbmQobmFtZS5jX3N0cigpKTsKKyAgICBpZiAoaXQg
IT0gbU5hbWVNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBpdC0+c2Vjb25kLmNfc3RyKCk7Cisg
ICAgVFN0cmluZyBoYXNoZWROYW1lID0gVEludGVybVRyYXZlcnNlcjo6aGFzaChuYW1lLCBtSGFz
aEZ1bmN0aW9uKTsKKyAgICBtTmFtZU1hcFtuYW1lLmNfc3RyKCldID0gaGFzaGVkTmFtZS5jX3N0
cigpOworICAgIHJldHVybiBoYXNoZWROYW1lOworfQorCitUU3RyaW5nIFRPdXRwdXRHTFNMQmFz
ZTo6aGFzaFZhcmlhYmxlTmFtZShjb25zdCBUU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChtU3lt
Ym9sVGFibGUuZmluZEJ1aWx0SW4obmFtZSkgIT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIG5hbWU7
CisgICAgcmV0dXJuIGhhc2hOYW1lKG5hbWUpOworfQorCitUU3RyaW5nIFRPdXRwdXRHTFNMQmFz
ZTo6aGFzaEZ1bmN0aW9uTmFtZShjb25zdCBUU3RyaW5nJiBtYW5nbGVkX25hbWUpCit7CisgICAg
VFN0cmluZyBuYW1lID0gVEZ1bmN0aW9uOjp1bm1hbmdsZU5hbWUobWFuZ2xlZF9uYW1lKTsKKyAg
ICBpZiAobVN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKG1hbmdsZWRfbmFtZSkgIT0gTlVMTCB8fCBu
YW1lID09ICJtYWluIikKKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgcmV0dXJuIGhhc2hOYW1l
KG5hbWUpOworfQorCitib29sIFRPdXRwdXRHTFNMQmFzZTo6c3RydWN0RGVjbGFyZWQoY29uc3Qg
VFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIHJldHVybiBtRGVjbGFyZWRTdHJ1
Y3RzLmZpbmQoc3RydWN0dXJlLT5uYW1lKCkpICE9IG1EZWNsYXJlZFN0cnVjdHMuZW5kKCk7Cit9
CisKK3ZvaWQgVE91dHB1dEdMU0xCYXNlOjpkZWNsYXJlU3RydWN0KGNvbnN0IFRTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7CisKKyAg
ICBvdXQgPDwgInN0cnVjdCAiIDw8IGhhc2hOYW1lKHN0cnVjdHVyZS0+bmFtZSgpKSA8PCAie1xu
IjsKKyAgICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKQorICAgIHsKKyAg
ICAgICAgY29uc3QgVEZpZWxkKiBmaWVsZCA9IGZpZWxkc1tpXTsKKyAgICAgICAgaWYgKHdyaXRl
VmFyaWFibGVQcmVjaXNpb24oZmllbGQtPnR5cGUoKS0+Z2V0UHJlY2lzaW9uKCkpKQorICAgICAg
ICAgICAgb3V0IDw8ICIgIjsKKyAgICAgICAgb3V0IDw8IGdldFR5cGVOYW1lKCpmaWVsZC0+dHlw
ZSgpKSA8PCAiICIgPDwgaGFzaE5hbWUoZmllbGQtPm5hbWUoKSk7CisgICAgICAgIGlmIChmaWVs
ZC0+dHlwZSgpLT5pc0FycmF5KCkpCisgICAgICAgICAgICBvdXQgPDwgYXJyYXlCcmFja2V0cygq
ZmllbGQtPnR5cGUoKSk7CisgICAgICAgIG91dCA8PCAiO1xuIjsKKyAgICB9CisgICAgb3V0IDw8
ICJ9IjsKKworICAgIG1EZWNsYXJlZFN0cnVjdHMuaW5zZXJ0KHN0cnVjdHVyZS0+bmFtZSgpKTsK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL091dHB1dEdMU0xCYXNlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMQmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc2YmVjNGRlNjFl
MDQxYWMxOGRhZWYxMjBmZWRjM2ZkYmNkOWQ5ODMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMQmFzZS5o
CkBAIC0wLDAgKzEsNzkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ1JPU1NDT01Q
SUxFUkdMU0xfT1VUUFVUR0xTTEJBU0VfSF8KKyNkZWZpbmUgQ1JPU1NDT01QSUxFUkdMU0xfT1VU
UFVUR0xTTEJBU0VfSF8KKworI2luY2x1ZGUgPHNldD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvRm9yTG9vcFVucm9sbC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
aW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRl
eHQuaCIKKworY2xhc3MgVE91dHB1dEdMU0xCYXNlIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIK
K3sKK3B1YmxpYzoKKyAgICBUT3V0cHV0R0xTTEJhc2UoVEluZm9TaW5rQmFzZSYgb2JqU2luaywK
KyAgICAgICAgICAgICAgICAgICAgU2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGlu
Z1N0cmF0ZWd5LAorICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5j
dGlvbiwKKyAgICAgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKKyAgICAgICAgICAg
ICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSk7CisKK3Byb3RlY3RlZDoKKyAgICBU
SW5mb1NpbmtCYXNlJiBvYmpTaW5rKCkgeyByZXR1cm4gbU9ialNpbms7IH0KKyAgICB2b2lkIHdy
aXRlVHJpcGxldChWaXNpdCB2aXNpdCwgY29uc3QgY2hhciogcHJlU3RyLCBjb25zdCBjaGFyKiBp
blN0ciwgY29uc3QgY2hhciogcG9zdFN0cik7CisgICAgdm9pZCB3cml0ZVZhcmlhYmxlVHlwZShj
b25zdCBUVHlwZSYgdHlwZSk7CisgICAgdmlydHVhbCBib29sIHdyaXRlVmFyaWFibGVQcmVjaXNp
b24oVFByZWNpc2lvbiBwcmVjaXNpb24pID0gMDsKKyAgICB2b2lkIHdyaXRlRnVuY3Rpb25QYXJh
bWV0ZXJzKGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgYXJncyk7CisgICAgY29uc3QgQ29uc3RhbnRV
bmlvbiogd3JpdGVDb25zdGFudFVuaW9uKGNvbnN0IFRUeXBlJiB0eXBlLCBjb25zdCBDb25zdGFu
dFVuaW9uKiBwQ29uc3RVbmlvbik7CisgICAgVFN0cmluZyBnZXRUeXBlTmFtZShjb25zdCBUVHlw
ZSYgdHlwZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCog
bm9kZSk7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3Rh
bnRVbmlvbiogbm9kZSk7CisgICAgdmlydHVhbCBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0
LCBUSW50ZXJtQmluYXJ5KiBub2RlKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRVbmFyeShWaXNp
dCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRTZWxl
Y3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUpOworICAgIHZpcnR1YWwg
Ym9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSk7
CisgICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqIG5v
ZGUpOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJy
YW5jaCogbm9kZSk7CisKKyAgICB2b2lkIHZpc2l0Q29kZUJsb2NrKFRJbnRlcm1Ob2RlKiBub2Rl
KTsKKworCisgICAgLy8gUmV0dXJuIHRoZSBvcmlnaW5hbCBuYW1lIGlmIGhhc2ggZnVuY3Rpb24g
cG9pbnRlciBpcyBOVUxMOworICAgIC8vIG90aGVyd2lzZSByZXR1cm4gdGhlIGhhc2hlZCBuYW1l
LgorICAgIFRTdHJpbmcgaGFzaE5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSk7CisgICAgLy8gU2Ft
ZSBhcyBoYXNoTmFtZSgpLCBidXQgd2l0aG91dCBoYXNoaW5nIGJ1aWx0LWluIHZhcmlhYmxlcy4K
KyAgICBUU3RyaW5nIGhhc2hWYXJpYWJsZU5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSk7CisgICAg
Ly8gU2FtZSBhcyBoYXNoTmFtZSgpLCBidXQgd2l0aG91dCBoYXNoaW5nIGJ1aWx0LWluIGZ1bmN0
aW9ucy4KKyAgICBUU3RyaW5nIGhhc2hGdW5jdGlvbk5hbWUoY29uc3QgVFN0cmluZyYgbWFuZ2xl
ZF9uYW1lKTsKKworcHJpdmF0ZToKKyAgICBib29sIHN0cnVjdERlY2xhcmVkKGNvbnN0IFRTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3Q7CisgICAgdm9pZCBkZWNsYXJlU3RydWN0KGNvbnN0IFRT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSk7CisKKyAgICBUSW5mb1NpbmtCYXNlJiBtT2JqU2luazsKKyAg
ICBib29sIG1EZWNsYXJpbmdWYXJpYWJsZXM7CisKKyAgICAvLyBTdHJ1Y3RzIGFyZSBkZWNsYXJl
ZCBhcyB0aGUgdHJlZSBpcyB0cmF2ZXJzZWQuIFRoaXMgc2V0IGNvbnRhaW5zIGFsbAorICAgIC8v
IHRoZSBzdHJ1Y3RzIGFscmVhZHkgZGVjbGFyZWQuIEl0IGlzIG1haW50YWluZWQgc28gdGhhdCBh
IHN0cnVjdCBpcworICAgIC8vIGRlY2xhcmVkIG9ubHkgb25jZS4KKyAgICB0eXBlZGVmIHN0ZDo6
c2V0PFRTdHJpbmc+IERlY2xhcmVkU3RydWN0czsKKyAgICBEZWNsYXJlZFN0cnVjdHMgbURlY2xh
cmVkU3RydWN0czsKKworICAgIEZvckxvb3BVbnJvbGwgbUxvb3BVbnJvbGw7CisKKyAgICBTaEFy
cmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IG1DbGFtcGluZ1N0cmF0ZWd5OworCisgICAgLy8gbmFt
ZSBoYXNoaW5nLgorICAgIFNoSGFzaEZ1bmN0aW9uNjQgbUhhc2hGdW5jdGlvbjsKKworICAgIE5h
bWVNYXAmIG1OYW1lTWFwOworCisgICAgVFN5bWJvbFRhYmxlJiBtU3ltYm9sVGFibGU7Cit9Owor
CisjZW5kaWYgIC8vIENST1NTQ09NUElMRVJHTFNMX09VVFBVVEdMU0xCQVNFX0hfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRw
dXRITFNMLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL091dHB1dEhMU0wuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFmOTk2ZGY3MTlmYzRmYWZmOGEwYTUyMGNj
N2U4M2E4YzJkN2E3NzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRITFNMLmNwcApAQCAtMCwwICsxLDMxMzgg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL091
dHB1dEhMU0wuaCIKKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9jb21waWxlcmRlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9EZXRlY3REaXNjb250aW51aXR5LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9JbmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU2VhcmNo
U3ltYm9sLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1
aXQuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL05vZGVTZWFyY2guaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1Jld3JpdGVFbHNlQmxvY2tzLmgiCisKKyNpbmNsdWRl
IDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Y2Zsb2F0PgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK25h
bWVzcGFjZSBzaAoreworCitPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNv
bnRleHQsIGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyYgcmVzb3VyY2VzLCBTaFNoYWRlck91dHB1
dCBvdXRwdXRUeXBlKQorICAgIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwg
bUNvbnRleHQoY29udGV4dCksIG1PdXRwdXRUeXBlKG91dHB1dFR5cGUpCit7CisgICAgbVVuZm9s
ZFNob3J0Q2lyY3VpdCA9IG5ldyBVbmZvbGRTaG9ydENpcmN1aXQoY29udGV4dCwgdGhpcyk7Cisg
ICAgbUluc2lkZUZ1bmN0aW9uID0gZmFsc2U7CisKKyAgICBtVXNlc1RleHR1cmUyRCA9IGZhbHNl
OworICAgIG1Vc2VzVGV4dHVyZTJEX2JpYXMgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmUyRFBy
b2ogPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmUyRFByb2pfYmlhcyA9IGZhbHNlOworICAgIG1V
c2VzVGV4dHVyZTJEUHJvakxvZCA9IGZhbHNlOworICAgIG1Vc2VzVGV4dHVyZTJETG9kID0gZmFs
c2U7CisgICAgbVVzZXNUZXh0dXJlQ3ViZSA9IGZhbHNlOworICAgIG1Vc2VzVGV4dHVyZUN1YmVf
YmlhcyA9IGZhbHNlOworICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QgPSBmYWxzZTsKKyAgICBtVXNl
c1RleHR1cmUyRExvZDAgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmUyRExvZDBfYmlhcyA9IGZh
bHNlOworICAgIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDAgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1
cmUyRFByb2pMb2QwX2JpYXMgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmVDdWJlTG9kMCA9IGZh
bHNlOworICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXMgPSBmYWxzZTsKKyAgICBtVXNlc0Zy
YWdDb2xvciA9IGZhbHNlOworICAgIG1Vc2VzRnJhZ0RhdGEgPSBmYWxzZTsKKyAgICBtVXNlc0Rl
cHRoUmFuZ2UgPSBmYWxzZTsKKyAgICBtVXNlc0ZyYWdDb29yZCA9IGZhbHNlOworICAgIG1Vc2Vz
UG9pbnRDb29yZCA9IGZhbHNlOworICAgIG1Vc2VzRnJvbnRGYWNpbmcgPSBmYWxzZTsKKyAgICBt
VXNlc1BvaW50U2l6ZSA9IGZhbHNlOworICAgIG1Vc2VzRnJhZ0RlcHRoID0gZmFsc2U7CisgICAg
bVVzZXNYb3IgPSBmYWxzZTsKKyAgICBtVXNlc01vZDEgPSBmYWxzZTsKKyAgICBtVXNlc01vZDJ2
ID0gZmFsc2U7CisgICAgbVVzZXNNb2QyZiA9IGZhbHNlOworICAgIG1Vc2VzTW9kM3YgPSBmYWxz
ZTsKKyAgICBtVXNlc01vZDNmID0gZmFsc2U7CisgICAgbVVzZXNNb2Q0diA9IGZhbHNlOworICAg
IG1Vc2VzTW9kNGYgPSBmYWxzZTsKKyAgICBtVXNlc0ZhY2Vmb3J3YXJkMSA9IGZhbHNlOworICAg
IG1Vc2VzRmFjZWZvcndhcmQyID0gZmFsc2U7CisgICAgbVVzZXNGYWNlZm9yd2FyZDMgPSBmYWxz
ZTsKKyAgICBtVXNlc0ZhY2Vmb3J3YXJkNCA9IGZhbHNlOworICAgIG1Vc2VzQXRhbjJfMSA9IGZh
bHNlOworICAgIG1Vc2VzQXRhbjJfMiA9IGZhbHNlOworICAgIG1Vc2VzQXRhbjJfMyA9IGZhbHNl
OworICAgIG1Vc2VzQXRhbjJfNCA9IGZhbHNlOworICAgIG1Vc2VzRGlzY2FyZFJld3JpdGluZyA9
IGZhbHNlOworCisgICAgbU51bVJlbmRlclRhcmdldHMgPSByZXNvdXJjZXMuRVhUX2RyYXdfYnVm
ZmVycyA/IHJlc291cmNlcy5NYXhEcmF3QnVmZmVycyA6IDE7CisKKyAgICBtU2NvcGVEZXB0aCA9
IDA7CisKKyAgICBtVW5pcXVlSW5kZXggPSAwOworCisgICAgbUNvbnRhaW5zTG9vcERpc2NvbnRp
bnVpdHkgPSBmYWxzZTsKKyAgICBtT3V0cHV0TG9kMEZ1bmN0aW9uID0gZmFsc2U7CisgICAgbUlu
c2lkZURpc2NvbnRpbnVvdXNMb29wID0gZmFsc2U7CisKKyAgICBtRXhjZXNzaXZlTG9vcEluZGV4
ID0gTlVMTDsKKworICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAg
eworICAgICAgICBpZiAobUNvbnRleHQuc2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1Vbmlmb3JtUmVnaXN0ZXIgPSAzOyAgIC8vIFJlc2Vy
dmUgcmVnaXN0ZXJzIGZvciBkeF9EZXB0aFJhbmdlLCBkeF9WaWV3Q29vcmRzIGFuZCBkeF9EZXB0
aEZyb250CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBt
VW5pZm9ybVJlZ2lzdGVyID0gMjsgICAvLyBSZXNlcnZlIHJlZ2lzdGVycyBmb3IgZHhfRGVwdGhS
YW5nZSBhbmQgZHhfVmlld0FkanVzdAorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIG1Vbmlmb3JtUmVnaXN0ZXIgPSAwOworICAgIH0KKworICAgIG1TYW1wbGVyUmVn
aXN0ZXIgPSAwOworfQorCitPdXRwdXRITFNMOjp+T3V0cHV0SExTTCgpCit7CisgICAgZGVsZXRl
IG1VbmZvbGRTaG9ydENpcmN1aXQ7Cit9CisKK3ZvaWQgT3V0cHV0SExTTDo6b3V0cHV0KCkKK3sK
KyAgICBtQ29udGFpbnNMb29wRGlzY29udGludWl0eSA9IG1Db250ZXh0LnNoYWRlclR5cGUgPT0g
U0hfRlJBR01FTlRfU0hBREVSICYmIGNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkobUNvbnRleHQu
dHJlZVJvb3QpOworCisgICAgLy8gV29yayBhcm91bmQgRDNEOSBidWcgdGhhdCB3b3VsZCBtYW5p
ZmVzdCBpbiB2ZXJ0ZXggc2hhZGVycyB3aXRoIHNlbGVjdGlvbiBibG9ja3Mgd2hpY2gKKyAgICAv
LyB1c2UgYSB2ZXJ0ZXggYXR0cmlidXRlIGFzIGEgY29uZGl0aW9uLCBhbmQgc29tZSByZWxhdGVk
IGNvbXB1dGF0aW9uIGluIHRoZSBlbHNlIGJsb2NrLgorICAgIGlmIChtT3V0cHV0VHlwZSA9PSBT
SF9ITFNMOV9PVVRQVVQgJiYgbUNvbnRleHQuc2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVS
KQorICAgIHsKKyAgICAgICAgUmV3cml0ZUVsc2VCbG9ja3MobUNvbnRleHQudHJlZVJvb3QpOwor
ICAgIH0KKworICAgIG1Db250ZXh0LnRyZWVSb290LT50cmF2ZXJzZSh0aGlzKTsgICAvLyBPdXRw
dXQgdGhlIGJvZHkgZmlyc3QgdG8gZGV0ZXJtaW5lIHdoYXQgaGFzIHRvIGdvIGluIHRoZSBoZWFk
ZXIKKyAgICBoZWFkZXIoKTsKKworICAgIG1Db250ZXh0LmluZm9TaW5rKCkub2JqIDw8IG1IZWFk
ZXIuY19zdHIoKTsKKyAgICBtQ29udGV4dC5pbmZvU2luaygpLm9iaiA8PCBtQm9keS5jX3N0cigp
OworfQorCitUSW5mb1NpbmtCYXNlICZPdXRwdXRITFNMOjpnZXRCb2R5U3RyZWFtKCkKK3sKKyAg
ICByZXR1cm4gbUJvZHk7Cit9CisKK2NvbnN0IEFjdGl2ZVVuaWZvcm1zICZPdXRwdXRITFNMOjpn
ZXRVbmlmb3JtcygpCit7CisgICAgcmV0dXJuIG1BY3RpdmVVbmlmb3JtczsKK30KKworaW50IE91
dHB1dEhMU0w6OnZlY3RvclNpemUoY29uc3QgVFR5cGUgJnR5cGUpIGNvbnN0Cit7CisgICAgaW50
IGVsZW1lbnRTaXplID0gdHlwZS5pc01hdHJpeCgpID8gdHlwZS5nZXROb21pbmFsU2l6ZSgpIDog
MTsKKyAgICBpbnQgYXJyYXlTaXplID0gdHlwZS5pc0FycmF5KCkgPyB0eXBlLmdldEFycmF5U2l6
ZSgpIDogMTsKKworICAgIHJldHVybiBlbGVtZW50U2l6ZSAqIGFycmF5U2l6ZTsKK30KKwordm9p
ZCBPdXRwdXRITFNMOjpoZWFkZXIoKQoreworICAgIFNoU2hhZGVyVHlwZSBzaGFkZXJUeXBlID0g
bUNvbnRleHQuc2hhZGVyVHlwZTsKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtSGVhZGVyOwor
CisgICAgZm9yIChTdHJ1Y3REZWNsYXJhdGlvbnM6Oml0ZXJhdG9yIHN0cnVjdERlY2xhcmF0aW9u
ID0gbVN0cnVjdERlY2xhcmF0aW9ucy5iZWdpbigpOyBzdHJ1Y3REZWNsYXJhdGlvbiAhPSBtU3Ry
dWN0RGVjbGFyYXRpb25zLmVuZCgpOyBzdHJ1Y3REZWNsYXJhdGlvbisrKQorICAgIHsKKyAgICAg
ICAgb3V0IDw8ICpzdHJ1Y3REZWNsYXJhdGlvbjsKKyAgICB9CisKKyAgICBmb3IgKENvbnN0cnVj
dG9yczo6aXRlcmF0b3IgY29uc3RydWN0b3IgPSBtQ29uc3RydWN0b3JzLmJlZ2luKCk7IGNvbnN0
cnVjdG9yICE9IG1Db25zdHJ1Y3RvcnMuZW5kKCk7IGNvbnN0cnVjdG9yKyspCisgICAgeworICAg
ICAgICBvdXQgPDwgKmNvbnN0cnVjdG9yOworICAgIH0KKworICAgIFRTdHJpbmcgdW5pZm9ybXM7
CisgICAgVFN0cmluZyB2YXJ5aW5nczsKKyAgICBUU3RyaW5nIGF0dHJpYnV0ZXM7CisKKyAgICBm
b3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpjb25zdF9pdGVyYXRvciB1bmlmb3JtID0gbVJlZmVyZW5j
ZWRVbmlmb3Jtcy5iZWdpbigpOyB1bmlmb3JtICE9IG1SZWZlcmVuY2VkVW5pZm9ybXMuZW5kKCk7
IHVuaWZvcm0rKykKKyAgICB7CisgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gdW5pZm9ybS0+
c2Vjb25kLT5nZXRUeXBlKCk7CisgICAgICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSB1bmlmb3Jt
LT5zZWNvbmQtPmdldFN5bWJvbCgpOworCisgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9I
TFNMMTFfT1VUUFVUICYmIElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSkgICAvLyBBbHNv
IGRlY2xhcmUgdGhlIHRleHR1cmUKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGluZGV4ID0g
c2FtcGxlclJlZ2lzdGVyKG1SZWZlcmVuY2VkVW5pZm9ybXNbbmFtZV0pOworCisgICAgICAgICAg
ICB1bmlmb3JtcyArPSAidW5pZm9ybSBTYW1wbGVyU3RhdGUgc2FtcGxlcl8iICsgZGVjb3JhdGVV
bmlmb3JtKG5hbWUsIHR5cGUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICIgOiByZWdpc3RlcihzIiArIHN0cihpbmRleCkgKyAiKTtcbiI7CisKKyAgICAg
ICAgICAgIHVuaWZvcm1zICs9ICJ1bmlmb3JtICIgKyB0ZXh0dXJlU3RyaW5nKHR5cGUpICsgIiB0
ZXh0dXJlXyIgKyBkZWNvcmF0ZVVuaWZvcm0obmFtZSwgdHlwZSkgKyBhcnJheVN0cmluZyh0eXBl
KSArIAorICAgICAgICAgICAgICAgICAgICAgICAgIiA6IHJlZ2lzdGVyKHQiICsgc3RyKGluZGV4
KSArICIpO1xuIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHVuaWZvcm1zICs9ICJ1bmlmb3JtICIgKyB0eXBlU3RyaW5nKHR5cGUpICsgIiAiICsgZGVj
b3JhdGVVbmlmb3JtKG5hbWUsIHR5cGUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICIgOiByZWdpc3RlcigiICsgcmVnaXN0ZXJTdHJpbmcobVJlZmVyZW5j
ZWRVbmlmb3Jtc1tuYW1lXSkgKyAiKTtcbiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3Ig
KFJlZmVyZW5jZWRTeW1ib2xzOjpjb25zdF9pdGVyYXRvciB2YXJ5aW5nID0gbVJlZmVyZW5jZWRW
YXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IG1SZWZlcmVuY2VkVmFyeWluZ3MuZW5kKCk7IHZh
cnlpbmcrKykKKyAgICB7CisgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gdmFyeWluZy0+c2Vj
b25kLT5nZXRUeXBlKCk7CisgICAgICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSB2YXJ5aW5nLT5z
ZWNvbmQtPmdldFN5bWJvbCgpOworCisgICAgICAgIC8vIFByb2dyYW0gbGlua2luZyBkZXBlbmRz
IG9uIHRoaXMgZXhhY3QgZm9ybWF0CisgICAgICAgIHZhcnlpbmdzICs9ICJzdGF0aWMgIiArIHR5
cGVTdHJpbmcodHlwZSkgKyAiICIgKyBkZWNvcmF0ZShuYW1lKSArIGFycmF5U3RyaW5nKHR5cGUp
ICsgIiA9ICIgKyBpbml0aWFsaXplcih0eXBlKSArICI7XG4iOworICAgIH0KKworICAgIGZvciAo
UmVmZXJlbmNlZFN5bWJvbHM6OmNvbnN0X2l0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1SZWZlcmVuY2Vk
QXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVJlZmVyZW5jZWRBdHRyaWJ1dGVzLmVu
ZCgpOyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gYXR0
cmlidXRlLT5zZWNvbmQtPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgVFN0cmluZyAmbmFtZSA9
IGF0dHJpYnV0ZS0+c2Vjb25kLT5nZXRTeW1ib2woKTsKKworICAgICAgICBhdHRyaWJ1dGVzICs9
ICJzdGF0aWMgIiArIHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKyBkZWNvcmF0ZShuYW1lKSArIGFy
cmF5U3RyaW5nKHR5cGUpICsgIiA9ICIgKyBpbml0aWFsaXplcih0eXBlKSArICI7XG4iOworICAg
IH0KKworICAgIGlmIChtVXNlc0Rpc2NhcmRSZXdyaXRpbmcpCisgICAgeworICAgICAgICBvdXQg
PDwgIiNkZWZpbmUgQU5HTEVfVVNFU19ESVNDQVJEX1JFV1JJVElORyIgPDwgIlxuIjsKKyAgICB9
CisKKyAgICBpZiAoc2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCisgICAgeworICAg
ICAgICBURXh0ZW5zaW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtQ29udGV4dC5l
eHRlbnNpb25CZWhhdmlvcigpLmZpbmQoIkdMX0VYVF9kcmF3X2J1ZmZlcnMiKTsKKyAgICAgICAg
Y29uc3QgYm9vbCB1c2luZ01SVEV4dGVuc2lvbiA9IChpdGVyICE9IG1Db250ZXh0LmV4dGVuc2lv
bkJlaGF2aW9yKCkuZW5kKCkgJiYgKGl0ZXItPnNlY29uZCA9PSBFQmhFbmFibGUgfHwgaXRlci0+
c2Vjb25kID09IEVCaFJlcXVpcmUpKTsKKworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbnVt
Q29sb3JWYWx1ZXMgPSB1c2luZ01SVEV4dGVuc2lvbiA/IG1OdW1SZW5kZXJUYXJnZXRzIDogMTsK
KworICAgICAgICBvdXQgPDwgIi8vIFZhcnlpbmdzXG4iOworICAgICAgICBvdXQgPDwgIHZhcnlp
bmdzOworICAgICAgICBvdXQgPDwgIlxuIgorICAgICAgICAgICAgICAgInN0YXRpYyBmbG9hdDQg
Z2xfQ29sb3JbIiA8PCBudW1Db2xvclZhbHVlcyA8PCAiXSA9XG4iCisgICAgICAgICAgICAgICAi
e1xuIjsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1Db2xvclZhbHVl
czsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdDQoMCwgMCwg
MCwgMCkiOworICAgICAgICAgICAgaWYgKGkgKyAxICE9IG51bUNvbG9yVmFsdWVzKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiLCI7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBvdXQgPDwgIlxuIjsKKyAgICAgICAgfQorICAgICAgICBvdXQgPDwgIn07XG4iOwor
CisgICAgICAgIGlmIChtVXNlc0ZyYWdEZXB0aCkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0
IDw8ICJzdGF0aWMgZmxvYXQgZ2xfRGVwdGggPSAwLjA7XG4iOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKG1Vc2VzRnJhZ0Nvb3JkKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgInN0
YXRpYyBmbG9hdDQgZ2xfRnJhZ0Nvb3JkID0gZmxvYXQ0KDAsIDAsIDAsIDApO1xuIjsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChtVXNlc1BvaW50Q29vcmQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG91dCA8PCAic3RhdGljIGZsb2F0MiBnbF9Qb2ludENvb3JkID0gZmxvYXQyKDAuNSwgMC41
KTtcbiI7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNGcm9udEZhY2luZykKKyAgICAg
ICAgeworICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgYm9vbCBnbF9Gcm9udEZhY2luZyA9IGZh
bHNlO1xuIjsKKyAgICAgICAgfQorCisgICAgICAgIG91dCA8PCAiXG4iOworCisgICAgICAgIGlm
IChtVXNlc0RlcHRoUmFuZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAic3RydWN0
IGdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJzXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAg
ICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IG5lYXI7XG4iCisgICAgICAgICAgICAgICAgICAg
IiAgICBmbG9hdCBmYXI7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBkaWZmO1xu
IgorICAgICAgICAgICAgICAgICAgICJ9O1xuIgorICAgICAgICAgICAgICAgICAgICJcbiI7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkK
KyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJjYnVmZmVyIERyaXZlckNvbnN0YW50cyA6
IHJlZ2lzdGVyKGIxKVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgICAgICAg
ICBpZiAobVVzZXNEZXB0aFJhbmdlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91
dCA8PCAiICAgIGZsb2F0MyBkeF9EZXB0aFJhbmdlIDogcGFja29mZnNldChjMCk7XG4iOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobVVzZXNGcmFnQ29vcmQpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQ0IGR4X1ZpZXdDb29yZHMgOiBw
YWNrb2Zmc2V0KGMxKTtcbiI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtVXNl
c0ZyYWdDb29yZCB8fCBtVXNlc0Zyb250RmFjaW5nKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG91dCA8PCAiICAgIGZsb2F0MyBkeF9EZXB0aEZyb250IDogcGFja29mZnNldChjMik7
XG4iOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvdXQgPDwgIn07XG4iOworICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1Vc2VzRGVwdGhS
YW5nZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgInVuaWZvcm0gZmxv
YXQzIGR4X0RlcHRoUmFuZ2UgOiByZWdpc3RlcihjMCk7IjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKG1Vc2VzRnJhZ0Nvb3JkKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG91dCA8PCAidW5pZm9ybSBmbG9hdDQgZHhfVmlld0Nvb3JkcyA6IHJlZ2lzdGVyKGMxKTtc
biI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtVXNlc0ZyYWdDb29yZCB8fCBt
VXNlc0Zyb250RmFjaW5nKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAi
dW5pZm9ybSBmbG9hdDMgZHhfRGVwdGhGcm9udCA6IHJlZ2lzdGVyKGMyKTtcbiI7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBvdXQgPDwgIlxuIjsKKworICAgICAgICBpZiAo
bVVzZXNEZXB0aFJhbmdlKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgInN0YXRpYyBn
bF9EZXB0aFJhbmdlUGFyYW1ldGVycyBnbF9EZXB0aFJhbmdlID0ge2R4X0RlcHRoUmFuZ2UueCwg
ZHhfRGVwdGhSYW5nZS55LCBkeF9EZXB0aFJhbmdlLnp9O1xuIgorICAgICAgICAgICAgICAgICAg
ICJcbiI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG91dCA8PCAgdW5pZm9ybXM7Cisg
ICAgICAgIG91dCA8PCAiXG4iOworCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQo
c2FtcGxlcjJEIHMsIGZsb2F0MiB0KVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgor
ICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRChzLCB0KTtcbiIKKyAgICAg
ICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wx
MV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQg
Z2xfdGV4dHVyZTJEKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2KVxuIgor
ICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0LlNhbXBsZShzLCB1dik7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4i
CisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNUZXh0
dXJlMkRfYmlhcykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNI
X0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgImZs
b2F0NCBnbF90ZXh0dXJlMkQoc2FtcGxlcjJEIHMsIGZsb2F0MiB0LCBmbG9hdCBiaWFzKVxuIgor
ICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCwgdC55LCAwLCBiaWFzKSk7XG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNM
MTFfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0
IGdsX3RleHR1cmUyRChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MiB1diwgZmxv
YXQgYmlhcylcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVCaWFzKHMsIHV2LCBiaWFzKTtcbiIKKyAgICAg
ICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2opCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywg
ZmxvYXQzIHQpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEcHJvaihzLCBmbG9hdDQodC54LCB0LnksIDAsIHQu
eikpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAg
ICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJv
aihzYW1wbGVyMkQgcywgZmxvYXQ0IHQpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4i
CisgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEcHJvaihzLCB0KTtcbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxu
IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNI
X0hMU0wxMV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJm
bG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0
MyB1dncpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlKHMsIGZsb2F0Mih1dncueCAvIHV2dy56LCB1dncu
eSAvIHV2dy56KSk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAg
ICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0
dXJlMkRQcm9qKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQ0IHV2dylcbiIKKyAg
ICAgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gdC5TYW1wbGUocywgZmxvYXQyKHV2dy54IC8gdXZ3LncsIHV2dy55IC8gdXZ3LncpKTtc
biIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAg
IlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pfYmlhcykKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9q
KHNhbXBsZXIyRCBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRiaWFz
KHMsIGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQueiwgMCwgYmlhcykpO1xuIgorICAgICAgICAg
ICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAg
ICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywgZmxv
YXQ0IHQsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEYmlhcyhzLCBmbG9hdDQodC54IC8g
dC53LCB0LnkgLyB0LncsIDAsIGJpYXMpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1c
biIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihUZXh0
dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncsIGZsb2F0IGJpYXMpXG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHQuU2FtcGxlQmlhcyhzLCBmbG9hdDIodXZ3LnggLyB1dncueiwgdXZ3LnkgLyB1dncueiks
IGJpYXMpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAg
ICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJE
UHJvaihUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0NCB1dncsIGZsb2F0IGJpYXMp
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIHQuU2FtcGxlQmlhcyhzLCBmbG9hdDIodXZ3LnggLyB1dncudywgdXZ3Lnkg
LyB1dncudyksIGJpYXMpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAg
ICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBV
TlJFQUNIQUJMRSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQ
VVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4
dHVyZUN1YmUoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQpXG4iCisgICAgICAgICAgICAgICAgICAg
ICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkUocywg
dCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAg
ICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlw
ZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91
dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlKFRleHR1cmVDdWJlIHQsIFNhbXBsZXJTdGF0ZSBz
LCBmbG9hdDMgdXZ3KVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAg
ICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZShzLCB1dncpO1xuIgorICAgICAgICAg
ICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVfYmlhcykKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShzYW1wbGVyQ1VCRSBzLCBm
bG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKKyAg
ICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRWJpYXMocywgZmxvYXQ0KHQu
eCwgdC55LCB0LnosIGJpYXMpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAg
ICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoVGV4dHVyZUN1YmUg
dCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAg
ICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQu
U2FtcGxlQmlhcyhzLCB1dncsIGJpYXMpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxu
IgorICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlc2UgKkxv
ZDAgaW50cmluc2ljcyBhcmUgbm90IGF2YWlsYWJsZSBpbiBHTCBmcmFnbWVudCBzaGFkZXJzLgor
ICAgICAgICAvLyBUaGV5IGFyZSB1c2VkIHRvIHNhbXBsZSB1c2luZyBkaXNjb250aW51b3VzIHRl
eHR1cmUgY29vcmRpbmF0ZXMuCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExvZDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJE
TG9kMChzYW1wbGVyMkQgcywgZmxvYXQyIHQpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0
NCh0LngsIHQueSwgMCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAg
ICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRMb2QwKFRleHR1cmUyRCB0
LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2KVxuIgorICAgICAgICAgICAgICAgICAgICAgICAi
e1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMs
IHV2LCAwKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAg
ICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExvZDBfYmlhcykK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBV
VCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0
dXJlMkRMb2QwKHNhbXBsZXIyRCBzLCBmbG9hdDIgdCwgZmxvYXQgYmlhcylcbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4g
dGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUy
RExvZDAoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDIgdXYsIGZsb2F0IGJpYXMp
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXYsIDApO1xuIgorICAgICAgICAgICAgICAg
ICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKG1Vc2VzVGV4dHVyZTJEUHJvakxvZDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICht
T3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZDAoc2FtcGxlcjJEIHMsIGZs
b2F0MyB0KVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC56LCB0LnkgLyB0
LnosIDAsIDApKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAg
ICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1
cmUyRFByb2pMb2Qoc2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxuIgorICAgICAgICAgICAgICAgICAg
ICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChz
LCBmbG9hdDQodC54IC8gdC53LCB0LnkgLyB0LncsIDAsIDApKTtcbiIKKyAgICAgICAgICAgICAg
ICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVy
ZTJEUHJvakxvZDAoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3KVxuIgor
ICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy56LCB1dncueSAvIHV2
dy56KSwgMCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJl
MkRQcm9qTG9kMChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0NCB1dncpXG4iCisg
ICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAg
cmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3LncsIHV2dy55IC8gdXZ3
LncpLCAwKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAg
ICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pMb2QwX2Jp
YXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9P
VVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xf
dGV4dHVyZTJEUHJvakxvZDBfYmlhcyhzYW1wbGVyMkQgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMp
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQueiwgMCwg
MCkpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAg
ICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJv
akxvZF9iaWFzKHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQgYmlhcylcbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4g
dGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53LCAwLCAwKSk7XG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNM
MTFfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0
IGdsX3RleHR1cmUyRFByb2pMb2RfYmlhcyhUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZs
b2F0MyB1dncsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisg
ICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgZmxvYXQy
KHV2dy54IC8gdXZ3LnosIHV2dy55IC8gdXZ3LnopLCAwKTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAg
ICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2RfYmlhcyhUZXh0dXJlMkQgdCwgU2Ft
cGxlclN0YXRlIHMsIGZsb2F0NCB1dncsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxl
TGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3LncsIHV2dy55IC8gdXZ3LncpLCAwKTtcbiIKKyAg
ICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmVDdWJlTG9kMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxvZDAoc2FtcGxl
ckNVQkUgcywgZmxvYXQzIHQpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwg
dC55LCB0LnosIDApKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYg
KG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmVMb2QwKFRleHR1cmVDdWJlIHQs
IFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3KVxuIgorICAgICAgICAgICAgICAgICAgICAgICAi
e1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMs
IHV2dywgMCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZUxvZDBfYmlh
cykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09V
VFBVVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90
ZXh0dXJlQ3ViZUxvZDAoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCisg
ICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAg
cmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIDApKTtcbiIKKyAgICAg
ICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wx
MV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQg
Z2xfdGV4dHVyZUN1YmVMb2QwKFRleHR1cmVDdWJlIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMg
dXZ3LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIHV2dywgMCk7XG4i
CisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJc
biI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAodXNpbmdNUlRFeHRlbnNpb24gJiYgbU51bVJlbmRlclRhcmdl
dHMgPiAxKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIiNkZWZpbmUgR0xfVVNFU19N
UlRcbiI7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNGcmFnQ29sb3IpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX0ZSQUdfQ09MT1JcbiI7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNGcmFnRGF0YSkKKyAgICAgICAgeworICAgICAg
ICAgICAgb3V0IDw8ICIjZGVmaW5lIEdMX1VTRVNfRlJBR19EQVRBXG4iOworICAgICAgICB9Cisg
ICAgfQorICAgIGVsc2UgICAvLyBWZXJ0ZXggc2hhZGVyCisgICAgeworICAgICAgICBvdXQgPDwg
Ii8vIEF0dHJpYnV0ZXNcbiI7CisgICAgICAgIG91dCA8PCAgYXR0cmlidXRlczsKKyAgICAgICAg
b3V0IDw8ICJcbiIKKyAgICAgICAgICAgICAgICJzdGF0aWMgZmxvYXQ0IGdsX1Bvc2l0aW9uID0g
ZmxvYXQ0KDAsIDAsIDAsIDApO1xuIjsKKyAgICAgICAgCisgICAgICAgIGlmIChtVXNlc1BvaW50
U2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgZmxvYXQgZ2xfUG9p
bnRTaXplID0gZmxvYXQoMSk7XG4iOworICAgICAgICB9CisKKyAgICAgICAgb3V0IDw8ICJcbiIK
KyAgICAgICAgICAgICAgICIvLyBWYXJ5aW5nc1xuIjsKKyAgICAgICAgb3V0IDw8ICB2YXJ5aW5n
czsKKyAgICAgICAgb3V0IDw8ICJcbiI7CisKKyAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkK
KyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJzdHJ1Y3QgZ2xfRGVwdGhSYW5nZVBhcmFt
ZXRlcnNcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIg
ICAgZmxvYXQgbmVhcjtcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGZhcjtcbiIK
KyAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGRpZmY7XG4iCisgICAgICAgICAgICAgICAg
ICAgIn07XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAobVVzZXNEZXB0aFJhbmdlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG91dCA8PCAiY2J1ZmZlciBEcml2ZXJDb25zdGFudHMgOiByZWdpc3RlcihiMSlcbiIKKyAgICAg
ICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICBmbG9h
dDMgZHhfRGVwdGhSYW5nZSA6IHBhY2tvZmZzZXQoYzApO1xuIgorICAgICAgICAgICAgICAgICAg
ICAgICAifTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtVXNl
c0RlcHRoUmFuZ2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJ1bmlm
b3JtIGZsb2F0MyBkeF9EZXB0aFJhbmdlIDogcmVnaXN0ZXIoYzApO1xuIjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgb3V0IDw8ICJ1bmlmb3JtIGZsb2F0NCBkeF9WaWV3QWRqdXN0IDog
cmVnaXN0ZXIoYzEpO1xuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAobVVzZXNEZXB0aFJhbmdlKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQg
PDwgInN0YXRpYyBnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyBnbF9EZXB0aFJhbmdlID0ge2R4X0Rl
cHRoUmFuZ2UueCwgZHhfRGVwdGhSYW5nZS55LCBkeF9EZXB0aFJhbmdlLnp9O1xuIgorICAgICAg
ICAgICAgICAgICAgICJcbiI7CisgICAgICAgIH0KKworICAgICAgICBvdXQgPDwgdW5pZm9ybXM7
CisgICAgICAgIG91dCA8PCAiXG4iOworICAgICAgICAKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVy
ZTJEKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlf
T1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGds
X3RleHR1cmUyRChzYW1wbGVyMkQgcywgZmxvYXQyIHQpXG4iCisgICAgICAgICAgICAgICAgICAg
ICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMs
IGZsb2F0NCh0LngsIHQueSwgMCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxu
IgorICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoVGV4dHVyZTJE
IHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDIgdXYpXG4iCisgICAgICAgICAgICAgICAgICAgICAg
ICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwo
cywgdXYsIDApO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAg
ICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJETG9kKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUy
RExvZChzYW1wbGVyMkQgcywgZmxvYXQyIHQsIGZsb2F0IGxvZClcbiIKKyAgICAgICAgICAgICAg
ICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRs
b2QocywgZmxvYXQ0KHQueCwgdC55LCAwLCBsb2QpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAg
ICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9k
KFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2LCBmbG9hdCBsb2QpXG4iCisg
ICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAg
cmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXYsIGxvZCk7XG4iCisgICAgICAgICAgICAgICAgICAg
ICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bVVzZXNUZXh0dXJlMkRQcm9qKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobU91dHB1dFR5
cGUgPT0gU0hfSExTTDlfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91
dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0MyB0KVxuIgor
ICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC56LCB0LnkgLyB0LnosIDAsIDApKTtc
biIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAg
IlxuIgorICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2Ft
cGxlcjJEIHMsIGZsb2F0NCB0KVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAg
ICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8g
dC53LCB0LnkgLyB0LncsIDAsIDApKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihUZXh0dXJl
MkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncpXG4iCisgICAgICAgICAgICAgICAgICAg
ICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2
ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3LnosIHV2dy55IC8gdXZ3LnopLCAwKTtcbiIKKyAgICAg
ICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIgorICAg
ICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVyZTJEIHQs
IFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3KVxuIgorICAgICAgICAgICAgICAgICAgICAgICAi
e1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMs
IGZsb2F0Mih1dncueCAvIHV2dy53LCB1dncueSAvIHV2dy53KSwgMCk7XG4iCisgICAgICAgICAg
ICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobVVzZXNUZXh0dXJlMkRQcm9qTG9kKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2Qoc2FtcGxlcjJEIHMs
IGZsb2F0MyB0LCBmbG9hdCBsb2QpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisg
ICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0Lngg
LyB0LnosIHQueSAvIHQueiwgMCwgbG9kKSk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAg
ImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQg
bG9kKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC53LCB0LnkgLyB0Lncs
IDAsIGxvZCkpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAg
ICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobU91
dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kKFRleHR1cmUyRCB0LCBTYW1w
bGVyU3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQgbG9kKVxuIgorICAgICAgICAgICAgICAgICAg
ICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxl
dmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy56LCB1dncueSAvIHV2dy56KSwgbG9kKTtcbiIKKyAg
ICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIgor
ICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QoVGV4dHVy
ZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3LCBmbG9hdCBsb2QpXG4iCisgICAgICAg
ICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHQuU2FtcGxlTGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3LncsIHV2dy55IC8gdXZ3LncpLCBs
b2QpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAg
ICAgICAiXG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoc2Ft
cGxlckNVQkUgcywgZmxvYXQzIHQpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisg
ICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0KHQu
eCwgdC55LCB0LnosIDApKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAg
ICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ug
aWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoVGV4dHVyZUN1YmUgdCwg
U2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywg
dXZ3LCAwKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAg
ICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmVDdWJlTG9kKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVD
dWJlTG9kKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0LCBmbG9hdCBsb2QpXG4iCisgICAgICAgICAg
ICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRl
eENVQkVsb2QocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIGxvZCkpO1xuIgorICAgICAgICAgICAg
ICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBV
VCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0
dXJlQ3ViZUxvZChUZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dywgZmxv
YXQgbG9kKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIHV2dywgbG9kKTtcbiIKKyAgICAg
ICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmIChtVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIG91dCA8PCAi
I2RlZmluZSBHTF9VU0VTX0ZSQUdfQ09PUkRcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzUG9p
bnRDb29yZCkKKyAgICB7CisgICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX1BPSU5UX0NP
T1JEXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0Zyb250RmFjaW5nKQorICAgIHsKKyAgICAg
ICAgb3V0IDw8ICIjZGVmaW5lIEdMX1VTRVNfRlJPTlRfRkFDSU5HXG4iOworICAgIH0KKworICAg
IGlmIChtVXNlc1BvaW50U2l6ZSkKKyAgICB7CisgICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9V
U0VTX1BPSU5UX1NJWkVcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzRnJhZ0RlcHRoKQorICAg
IHsKKyAgICAgICAgb3V0IDw8ICIjZGVmaW5lIEdMX1VTRVNfRlJBR19ERVBUSFxuIjsKKyAgICB9
CisKKyAgICBpZiAobVVzZXNEZXB0aFJhbmdlKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICIjZGVm
aW5lIEdMX1VTRVNfREVQVEhfUkFOR0VcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzWG9yKQor
ICAgIHsKKyAgICAgICAgb3V0IDw8ICJib29sIHhvcihib29sIHAsIGJvb2wgcSlcbiIKKyAgICAg
ICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIHJldHVybiAocCB8fCBxKSAmJiAh
KHAgJiYgcSk7XG4iCisgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgIlxuIjsK
KyAgICB9CisKKyAgICBpZiAobVVzZXNNb2QxKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJmbG9h
dCBtb2QoZmxvYXQgeCwgZmxvYXQgeSlcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB4IC0geSAqIGZsb29yKHggLyB5KTtcbiIKKyAgICAgICAgICAg
ICAgICJ9XG4iCisgICAgICAgICAgICAgICAiXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc01v
ZDJ2KQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJmbG9hdDIgbW9kKGZsb2F0MiB4LCBmbG9hdDIg
eSlcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIHJldHVybiB4
IC0geSAqIGZsb29yKHggLyB5KTtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAg
ICAgICAiXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc01vZDJmKQorICAgIHsKKyAgICAgICAg
b3V0IDw8ICJmbG9hdDIgbW9kKGZsb2F0MiB4LCBmbG9hdCB5KVxuIgorICAgICAgICAgICAgICAg
IntcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHggLSB5ICogZmxvb3IoeCAvIHkpO1xu
IgorICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICJcbiI7CisgICAgfQorICAg
IAorICAgIGlmIChtVXNlc01vZDN2KQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJmbG9hdDMgbW9k
KGZsb2F0MyB4LCBmbG9hdDMgeSlcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB4IC0geSAqIGZsb29yKHggLyB5KTtcbiIKKyAgICAgICAgICAgICAg
ICJ9XG4iCisgICAgICAgICAgICAgICAiXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc01vZDNm
KQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJmbG9hdDMgbW9kKGZsb2F0MyB4LCBmbG9hdCB5KVxu
IgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHggLSB5
ICogZmxvb3IoeCAvIHkpO1xuIgorICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAg
ICJcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzTW9kNHYpCisgICAgeworICAgICAgICBvdXQg
PDwgImZsb2F0NCBtb2QoZmxvYXQ0IHgsIGZsb2F0NCB5KVxuIgorICAgICAgICAgICAgICAgIntc
biIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHggLSB5ICogZmxvb3IoeCAvIHkpO1xuIgor
ICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICJcbiI7CisgICAgfQorCisgICAg
aWYgKG1Vc2VzTW9kNGYpCisgICAgeworICAgICAgICBvdXQgPDwgImZsb2F0NCBtb2QoZmxvYXQ0
IHgsIGZsb2F0IHkpXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAg
ICByZXR1cm4geCAtIHkgKiBmbG9vcih4IC8geSk7XG4iCisgICAgICAgICAgICAgICAifVxuIgor
ICAgICAgICAgICAgICAgIlxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNGYWNlZm9yd2FyZDEp
CisgICAgeworICAgICAgICBvdXQgPDwgImZsb2F0IGZhY2Vmb3J3YXJkKGZsb2F0IE4sIGZsb2F0
IEksIGZsb2F0IE5yZWYpXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAg
IiAgICBpZihkb3QoTnJlZiwgSSkgPj0gMClcbiIKKyAgICAgICAgICAgICAgICIgICAge1xuIgor
ICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIC1OO1xuIgorICAgICAgICAgICAgICAgIiAg
ICB9XG4iCisgICAgICAgICAgICAgICAiICAgIGVsc2VcbiIKKyAgICAgICAgICAgICAgICIgICAg
e1xuIgorICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIE47XG4iCisgICAgICAgICAgICAg
ICAiICAgIH1cbiIKKyAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAiXG4iOwor
ICAgIH0KKworICAgIGlmIChtVXNlc0ZhY2Vmb3J3YXJkMikKKyAgICB7CisgICAgICAgIG91dCA8
PCAiZmxvYXQyIGZhY2Vmb3J3YXJkKGZsb2F0MiBOLCBmbG9hdDIgSSwgZmxvYXQyIE5yZWYpXG4i
CisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICBpZihkb3QoTnJlZiwg
SSkgPj0gMClcbiIKKyAgICAgICAgICAgICAgICIgICAge1xuIgorICAgICAgICAgICAgICAgIiAg
ICAgICAgcmV0dXJuIC1OO1xuIgorICAgICAgICAgICAgICAgIiAgICB9XG4iCisgICAgICAgICAg
ICAgICAiICAgIGVsc2VcbiIKKyAgICAgICAgICAgICAgICIgICAge1xuIgorICAgICAgICAgICAg
ICAgIiAgICAgICAgcmV0dXJuIE47XG4iCisgICAgICAgICAgICAgICAiICAgIH1cbiIKKyAgICAg
ICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAiXG4iOworICAgIH0KKworICAgIGlmICht
VXNlc0ZhY2Vmb3J3YXJkMykKKyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQzIGZhY2Vmb3J3
YXJkKGZsb2F0MyBOLCBmbG9hdDMgSSwgZmxvYXQzIE5yZWYpXG4iCisgICAgICAgICAgICAgICAi
e1xuIgorICAgICAgICAgICAgICAgIiAgICBpZihkb3QoTnJlZiwgSSkgPj0gMClcbiIKKyAgICAg
ICAgICAgICAgICIgICAge1xuIgorICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIC1OO1xu
IgorICAgICAgICAgICAgICAgIiAgICB9XG4iCisgICAgICAgICAgICAgICAiICAgIGVsc2VcbiIK
KyAgICAgICAgICAgICAgICIgICAge1xuIgorICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJu
IE47XG4iCisgICAgICAgICAgICAgICAiICAgIH1cbiIKKyAgICAgICAgICAgICAgICJ9XG4iCisg
ICAgICAgICAgICAgICAiXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0ZhY2Vmb3J3YXJkNCkK
KyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQ0IGZhY2Vmb3J3YXJkKGZsb2F0NCBOLCBmbG9h
dDQgSSwgZmxvYXQ0IE5yZWYpXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAg
ICAgIiAgICBpZihkb3QoTnJlZiwgSSkgPj0gMClcbiIKKyAgICAgICAgICAgICAgICIgICAge1xu
IgorICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIC1OO1xuIgorICAgICAgICAgICAgICAg
IiAgICB9XG4iCisgICAgICAgICAgICAgICAiICAgIGVsc2VcbiIKKyAgICAgICAgICAgICAgICIg
ICAge1xuIgorICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIE47XG4iCisgICAgICAgICAg
ICAgICAiICAgIH1cbiIKKyAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAiXG4i
OworICAgIH0KKworICAgIGlmIChtVXNlc0F0YW4yXzEpCisgICAgeworICAgICAgICBvdXQgPDwg
ImZsb2F0IGF0YW55eChmbG9hdCB5LCBmbG9hdCB4KVxuIgorICAgICAgICAgICAgICAgIntcbiIK
KyAgICAgICAgICAgICAgICIgICAgaWYoeCA9PSAwICYmIHkgPT0gMCkgeCA9IDE7XG4iICAgLy8g
QXZvaWQgcHJvZHVjaW5nIGEgTmFOCisgICAgICAgICAgICAgICAiICAgIHJldHVybiBhdGFuMih5
LCB4KTtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0F0
YW4yXzIpCisgICAgeworICAgICAgICBvdXQgPDwgImZsb2F0MiBhdGFueXgoZmxvYXQyIHksIGZs
b2F0MiB4KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgaWYo
eFswXSA9PSAwICYmIHlbMF0gPT0gMCkgeFswXSA9IDE7XG4iCisgICAgICAgICAgICAgICAiICAg
IGlmKHhbMV0gPT0gMCAmJiB5WzFdID09IDApIHhbMV0gPSAxO1xuIgorICAgICAgICAgICAgICAg
IiAgICByZXR1cm4gZmxvYXQyKGF0YW4yKHlbMF0sIHhbMF0pLCBhdGFuMih5WzFdLCB4WzFdKSk7
XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNBdGFuMl8z
KQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJmbG9hdDMgYXRhbnl4KGZsb2F0MyB5LCBmbG9hdDMg
eClcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIGlmKHhbMF0g
PT0gMCAmJiB5WzBdID09IDApIHhbMF0gPSAxO1xuIgorICAgICAgICAgICAgICAgIiAgICBpZih4
WzFdID09IDAgJiYgeVsxXSA9PSAwKSB4WzFdID0gMTtcbiIKKyAgICAgICAgICAgICAgICIgICAg
aWYoeFsyXSA9PSAwICYmIHlbMl0gPT0gMCkgeFsyXSA9IDE7XG4iCisgICAgICAgICAgICAgICAi
ICAgIHJldHVybiBmbG9hdDMoYXRhbjIoeVswXSwgeFswXSksIGF0YW4yKHlbMV0sIHhbMV0pLCBh
dGFuMih5WzJdLCB4WzJdKSk7XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisKKyAg
ICBpZiAobVVzZXNBdGFuMl80KQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJmbG9hdDQgYXRhbnl4
KGZsb2F0NCB5LCBmbG9hdDQgeClcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAg
ICAgICAiICAgIGlmKHhbMF0gPT0gMCAmJiB5WzBdID09IDApIHhbMF0gPSAxO1xuIgorICAgICAg
ICAgICAgICAgIiAgICBpZih4WzFdID09IDAgJiYgeVsxXSA9PSAwKSB4WzFdID0gMTtcbiIKKyAg
ICAgICAgICAgICAgICIgICAgaWYoeFsyXSA9PSAwICYmIHlbMl0gPT0gMCkgeFsyXSA9IDE7XG4i
CisgICAgICAgICAgICAgICAiICAgIGlmKHhbM10gPT0gMCAmJiB5WzNdID09IDApIHhbM10gPSAx
O1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4gZmxvYXQ0KGF0YW4yKHlbMF0sIHhbMF0p
LCBhdGFuMih5WzFdLCB4WzFdKSwgYXRhbjIoeVsyXSwgeFsyXSksIGF0YW4yKHlbM10sIHhbM10p
KTtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iOworICAgIH0KK30KKwordm9pZCBPdXRwdXRITFNM
Ojp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICpub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2Ug
Jm91dCA9IG1Cb2R5OworCisgICAgVFN0cmluZyBuYW1lID0gbm9kZS0+Z2V0U3ltYm9sKCk7CisK
KyAgICBpZiAobmFtZSA9PSAiZ2xfRnJhZ0NvbG9yIikKKyAgICB7CisgICAgICAgIG91dCA8PCAi
Z2xfQ29sb3JbMF0iOworICAgICAgICBtVXNlc0ZyYWdDb2xvciA9IHRydWU7CisgICAgfQorICAg
IGVsc2UgaWYgKG5hbWUgPT0gImdsX0ZyYWdEYXRhIikKKyAgICB7CisgICAgICAgIG91dCA8PCAi
Z2xfQ29sb3IiOworICAgICAgICBtVXNlc0ZyYWdEYXRhID0gdHJ1ZTsKKyAgICB9CisgICAgZWxz
ZSBpZiAobmFtZSA9PSAiZ2xfRGVwdGhSYW5nZSIpCisgICAgeworICAgICAgICBtVXNlc0RlcHRo
UmFuZ2UgPSB0cnVlOworICAgICAgICBvdXQgPDwgbmFtZTsKKyAgICB9CisgICAgZWxzZSBpZiAo
bmFtZSA9PSAiZ2xfRnJhZ0Nvb3JkIikKKyAgICB7CisgICAgICAgIG1Vc2VzRnJhZ0Nvb3JkID0g
dHJ1ZTsKKyAgICAgICAgb3V0IDw8IG5hbWU7CisgICAgfQorICAgIGVsc2UgaWYgKG5hbWUgPT0g
ImdsX1BvaW50Q29vcmQiKQorICAgIHsKKyAgICAgICAgbVVzZXNQb2ludENvb3JkID0gdHJ1ZTsK
KyAgICAgICAgb3V0IDw8IG5hbWU7CisgICAgfQorICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX0Zy
b250RmFjaW5nIikKKyAgICB7CisgICAgICAgIG1Vc2VzRnJvbnRGYWNpbmcgPSB0cnVlOworICAg
ICAgICBvdXQgPDwgbmFtZTsKKyAgICB9CisgICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfUG9pbnRT
aXplIikKKyAgICB7CisgICAgICAgIG1Vc2VzUG9pbnRTaXplID0gdHJ1ZTsKKyAgICAgICAgb3V0
IDw8IG5hbWU7CisgICAgfQorICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX0ZyYWdEZXB0aEVYVCIp
CisgICAgeworICAgICAgICBtVXNlc0ZyYWdEZXB0aCA9IHRydWU7CisgICAgICAgIG91dCA8PCAi
Z2xfRGVwdGgiOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1
YWxpZmllciA9IG5vZGUtPmdldFF1YWxpZmllcigpOworCisgICAgICAgIGlmIChxdWFsaWZpZXIg
PT0gRXZxVW5pZm9ybSkKKyAgICAgICAgeworICAgICAgICAgICAgbVJlZmVyZW5jZWRVbmlmb3Jt
c1tuYW1lXSA9IG5vZGU7CisgICAgICAgICAgICBvdXQgPDwgZGVjb3JhdGVVbmlmb3JtKG5hbWUs
IG5vZGUtPmdldFR5cGUoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocXVhbGlmaWVy
ID09IEV2cUF0dHJpYnV0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbVJlZmVyZW5jZWRBdHRy
aWJ1dGVzW25hbWVdID0gbm9kZTsKKyAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCB8
fCBxdWFsaWZpZXIgPT0gRXZxSW52YXJpYW50VmFyeWluZ091dCB8fCBxdWFsaWZpZXIgPT0gRXZx
VmFyeWluZ0luIHx8IHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5aW5nSW4pCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1SZWZlcmVuY2VkVmFyeWluZ3NbbmFtZV0gPSBub2RlOworICAgICAg
ICAgICAgb3V0IDw8IGRlY29yYXRlKG5hbWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYg
KHF1YWxpZmllciA9PSBFdnFJbnRlcm5hbCkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8
IG5hbWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBv
dXQgPDwgZGVjb3JhdGUobmFtZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgT3V0cHV0
SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCit7Cisg
ICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9w
KCkpCisgICAgeworICAgICAgY2FzZSBFT3BBc3NpZ246ICAgICAgICAgICAgICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgIigiLCAiID0gIiwgIikiKTsgICAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFT3BJbml0aWFsaXplOgorICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIC8vIEdMU0wgYWxsb3dzIHRvIHdyaXRlIHRoaW5ncyBsaWtlICJm
bG9hdCB4ID0geDsiIHdoZXJlIGEgbmV3IHZhcmlhYmxlIHggaXMgZGVmaW5lZAorICAgICAgICAg
ICAgLy8gYW5kIHRoZSB2YWx1ZSBvZiBhbiBleGlzdGluZyB2YXJpYWJsZSB4IGlzIGFzc2lnbmVk
LiBITFNMIHVzZXMgQyBzZW1hbnRpY3MgKHRoZQorICAgICAgICAgICAgLy8gbmV3IHZhcmlhYmxl
IGlzIGNyZWF0ZWQgYmVmb3JlIHRoZSBhc3NpZ25tZW50IGlzIGV2YWx1YXRlZCksIHNvIHdlIG5l
ZWQgdG8gY29udmVydAorICAgICAgICAgICAgLy8gdGhpcyB0byAiZmxvYXQgdCA9IHgsIHggPSB0
OyIuCisKKyAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUgPSBub2RlLT5nZXRM
ZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOworICAgICAgICAgICAgVEludGVybVR5cGVkICpleHBy
ZXNzaW9uID0gbm9kZS0+Z2V0UmlnaHQoKTsKKworICAgICAgICAgICAgc2g6OlNlYXJjaFN5bWJv
bCBzZWFyY2hTeW1ib2woc3ltYm9sTm9kZS0+Z2V0U3ltYm9sKCkpOworICAgICAgICAgICAgZXhw
cmVzc2lvbi0+dHJhdmVyc2UoJnNlYXJjaFN5bWJvbCk7CisgICAgICAgICAgICBib29sIHNhbWVT
eW1ib2wgPSBzZWFyY2hTeW1ib2wuZm91bmRNYXRjaCgpOworCisgICAgICAgICAgICBpZiAoc2Ft
ZVN5bWJvbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBUeXBlIGFscmVhZHkg
cHJpbnRlZAorICAgICAgICAgICAgICAgIG91dCA8PCAidCIgKyBzdHIobVVuaXF1ZUluZGV4KSAr
ICIgPSAiOworICAgICAgICAgICAgICAgIGV4cHJlc3Npb24tPnRyYXZlcnNlKHRoaXMpOworICAg
ICAgICAgICAgICAgIG91dCA8PCAiLCAiOworICAgICAgICAgICAgICAgIHN5bWJvbE5vZGUtPnRy
YXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAgIG91dCA8PCAiID0gdCIgKyBzdHIobVVuaXF1
ZUluZGV4KTsKKworICAgICAgICAgICAgICAgIG1VbmlxdWVJbmRleCsrOworICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNl
IGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIiA9
ICI7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEFkZEFzc2lnbjog
ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgKz0gIiwgIikiKTsgICAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFN1YkFzc2lnbjogICAgICAgICAgICAgICBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgLT0gIiwgIikiKTsgICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVPcE11bEFzc2lnbjogICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
KCIsICIgKj0gIiwgIikiKTsgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFZlY3RvclRp
bWVzU2NhbGFyQXNzaWduOiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgKj0gIiwgIikiKTsg
ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOiBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgKj0gIiwgIikiKTsgICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOgorICAgICAgICBpZiAodmlzaXQg
PT0gUHJlVmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiKCI7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAgICAgeworICAgICAg
ICAgICAgb3V0IDw8ICIgPSBtdWwoIjsKKyAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJh
dmVyc2UodGhpcyk7CisgICAgICAgICAgICBvdXQgPDwgIiwgdHJhbnNwb3NlKCI7ICAgCisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIikpKSI7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0
cml4QXNzaWduOgorICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG91dCA8PCAiKCI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodmlzaXQg
PT0gSW5WaXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICIgPSBtdWwoIjsKKyAg
ICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICBv
dXQgPDwgIiwgIjsgICAKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG91dCA8PCAiKSkiOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BEaXZBc3NpZ246ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAi
IC89ICIsICIpIik7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDog
ICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIiIsICJbIiwgIl0iKTsgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OiAgICAgICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgIiIsICJbIiwgIl0iKTsgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFT3BJbmRleERpcmVjdFN0cnVjdDoKKyAgICAgICAgaWYgKHZpc2l0ID09IEluVmlzaXQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG5v
ZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpOworICAgICAgICAgICAgY29uc3Qg
VEludGVybUNvbnN0YW50VW5pb24qIGluZGV4ID0gbm9kZS0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25z
dGFudFVuaW9uKCk7CisgICAgICAgICAgICBjb25zdCBURmllbGQqIGZpZWxkID0gc3RydWN0dXJl
LT5maWVsZHMoKVtpbmRleC0+Z2V0SUNvbnN0KDApXTsKKyAgICAgICAgICAgIG91dCA8PCAiLiIg
KyBkZWNvcmF0ZUZpZWxkKGZpZWxkLT5uYW1lKCksIG5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgp
KTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBFT3BWZWN0b3JTd2l6emxlOgorICAgICAgICBpZiAodmlzaXQgPT0gSW5W
aXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICIuIjsKKworICAgICAgICAgICAg
VEludGVybUFnZ3JlZ2F0ZSAqc3dpenpsZSA9IG5vZGUtPmdldFJpZ2h0KCktPmdldEFzQWdncmVn
YXRlKCk7CisKKyAgICAgICAgICAgIGlmIChzd2l6emxlKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2UgPSBzd2l6emxlLT5nZXRTZXF1ZW5j
ZSgpOworCisgICAgICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNp
dCA9IHNlcXVlbmNlLmJlZ2luKCk7IHNpdCAhPSBzZXF1ZW5jZS5lbmQoKTsgc2l0KyspCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAq
ZWxlbWVudCA9ICgqc2l0KS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGVsZW1lbnQpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpID0gZWxlbWVudC0+Z2V0SUNvbnN0KDApOworCisgICAgICAgICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKGkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIDA6IG91dCA8PCAieCI7IGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAxOiBvdXQgPDwgInkiOyBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgMjogb3V0IDw8ICJ6IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIDM6IG91dCA8PCAidyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOworCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gRnVsbHkgcHJvY2Vzc2Vk
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEFkZDogICAgICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgKyAiLCAiKSIpOyBicmVhazsKKyAgICAg
IGNhc2UgRU9wU3ViOiAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAt
ICIsICIpIik7IGJyZWFrOworICAgICAgY2FzZSBFT3BNdWw6ICAgICAgICAgICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgIigiLCAiICogIiwgIikiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcERp
djogICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgLyAiLCAiKSIpOyBi
cmVhazsKKyAgICAgIGNhc2UgRU9wRXF1YWw6CisgICAgICBjYXNlIEVPcE5vdEVxdWFsOgorICAg
ICAgICBpZiAobm9kZS0+Z2V0TGVmdCgpLT5pc1NjYWxhcigpKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAobm9kZS0+Z2V0T3AoKSA9PSBFT3BFcXVhbCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPT0gIiwgIikiKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgIT0gIiwgIikiKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRMZWZ0KCktPmdldEJhc2ljVHlw
ZSgpID09IEVidFN0cnVjdCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vZGUtPmdldE9w
KCkgPT0gRU9wRXF1YWwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIo
IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBvdXQgPDwgIiEoIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29u
c3QgVEZpZWxkTGlzdCAmZmllbGRzID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkuZ2V0U3Ry
dWN0KCktPmZpZWxkcygpOworCisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZp
ZWxkcy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBU
RmllbGQgKmZpZWxkID0gZmllbGRzW2ldOworCisgICAgICAgICAgICAgICAgbm9kZS0+Z2V0TGVm
dCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3Jh
dGVGaWVsZChmaWVsZC0+bmFtZSgpLCBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKSkgKyAiID09
ICI7CisgICAgICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7Cisg
ICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGRlY29yYXRlRmllbGQoZmllbGQtPm5hbWUoKSwg
bm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkpOworCisgICAgICAgICAgICAgICAgaWYgKGkgPCBm
aWVsZHMuc2l6ZSgpIC0gMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IG91dCA8PCAiICYmICI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBvdXQgPDwgIikiOworCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+Z2V0
TGVmdCgpLT5pc01hdHJpeCgpIHx8IG5vZGUtPmdldExlZnQoKS0+aXNWZWN0b3IoKSk7CisKKyAg
ICAgICAgICAgIGlmIChub2RlLT5nZXRPcCgpID09IEVPcEVxdWFsKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJhbGwoIiwgIiA9PSAiLCAiKSIp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIhYWxsKCIsICIgPT0gIiwgIikiKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTGVz
c1RoYW46ICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA8ICIsICIpIik7ICAg
YnJlYWs7CisgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOiAgICAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAiKCIsICIgPiAiLCAiKSIpOyAgIGJyZWFrOworICAgICAgY2FzZSBFT3BMZXNzVGhhbkVx
dWFsOiAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIDw9ICIsICIpIik7ICBicmVhazsK
KyAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDogIG91dHB1dFRyaXBsZXQodmlzaXQsICIo
IiwgIiA+PSAiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFy
OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgKiAiLCAiKSIpOyAgIGJyZWFrOworICAgICAg
Y2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhcjogb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICog
IiwgIikiKTsgICBicmVhazsKKyAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXg6IG91dHB1
dFRyaXBsZXQodmlzaXQsICJtdWwoIiwgIiwgdHJhbnNwb3NlKCIsICIpKSIpOyBicmVhazsKKyAg
ICAgIGNhc2UgRU9wTWF0cml4VGltZXNWZWN0b3I6IG91dHB1dFRyaXBsZXQodmlzaXQsICJtdWwo
dHJhbnNwb3NlKCIsICIpLCAiLCAiKSIpOyBicmVhazsKKyAgICAgIGNhc2UgRU9wTWF0cml4VGlt
ZXNNYXRyaXg6IG91dHB1dFRyaXBsZXQodmlzaXQsICJ0cmFuc3Bvc2UobXVsKHRyYW5zcG9zZSgi
LCAiKSwgdHJhbnNwb3NlKCIsICIpKSkiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcExvZ2ljYWxP
cjoKKyAgICAgICAgaWYgKG5vZGUtPmdldFJpZ2h0KCktPmhhc1NpZGVFZmZlY3RzKCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAicyIgPDwgbVVuZm9sZFNob3J0Q2lyY3VpdC0+Z2V0
TmV4dFRlbXBvcmFyeUluZGV4KCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICIoIiwgIiB8fCAiLCAiKSIpOworICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgY2FzZSBFT3BMb2dpY2FsWG9yOgorICAgICAgICBtVXNlc1hvciA9IHRydWU7Cisg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ4b3IoIiwgIiwgIiwgIikiKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6CisgICAgICAgIGlmIChub2RlLT5nZXRS
aWdodCgpLT5oYXNTaWRlRWZmZWN0cygpKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwg
InMiIDw8IG1VbmZvbGRTaG9ydENpcmN1aXQtPmdldE5leHRUZW1wb3JhcnlJbmRleCgpOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgJiYgIiwgIikiKTsKKyAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT3V0cHV0SExTTDo6
dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5ICpub2RlKQoreworICAgIHN3aXRj
aCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7CisgICAgICBjYXNlIEVPcE5lZ2F0aXZlOiAgICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICIoLSIsICIiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNl
IEVPcFZlY3RvckxvZ2ljYWxOb3Q6IG91dHB1dFRyaXBsZXQodmlzaXQsICIoISIsICIiLCAiKSIp
OyAgYnJlYWs7CisgICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6ICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICIoISIsICIiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1l
bnQ6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIrKykiKTsgYnJlYWs7CisgICAg
ICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIs
ICItLSkiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDogICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICIoKysiLCAiIiwgIikiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcFByZURl
Y3JlbWVudDogICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoLS0iLCAiIiwgIikiKTsgYnJlYWs7
CisgICAgICBjYXNlIEVPcENvbnZJbnRUb0Jvb2w6CisgICAgICBjYXNlIEVPcENvbnZGbG9hdFRv
Qm9vbDoKKyAgICAgICAgc3dpdGNoIChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXRO
b21pbmFsU2l6ZSgpKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSAxOiAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiYm9vbCgiLCAiIiwgIikiKTsgIGJyZWFrOworICAgICAgICAgIGNhc2UgMjog
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImJvb2wyKCIsICIiLCAiKSIpOyBicmVhazsKKyAgICAg
ICAgICBjYXNlIDM6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJib29sMygiLCAiIiwgIikiKTsg
YnJlYWs7CisgICAgICAgICAgY2FzZSA0OiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYm9vbDQo
IiwgIiIsICIpIik7IGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnZCb29sVG9GbG9hdDoK
KyAgICAgIGNhc2UgRU9wQ29udkludFRvRmxvYXQ6CisgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0
T3BlcmFuZCgpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgeworICAgICAg
ICAgIGNhc2UgMTogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZsb2F0KCIsICIiLCAiKSIpOyAg
YnJlYWs7CisgICAgICAgICAgY2FzZSAyOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZmxvYXQy
KCIsICIiLCAiKSIpOyBicmVhazsKKyAgICAgICAgICBjYXNlIDM6ICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJmbG9hdDMoIiwgIiIsICIpIik7IGJyZWFrOworICAgICAgICAgIGNhc2UgNDogICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgImZsb2F0NCgiLCAiIiwgIikiKTsgYnJlYWs7CisgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRU9wQ29udkZsb2F0VG9JbnQ6CisgICAgICBjYXNlIEVPcENvbnZCb29sVG9JbnQ6
CisgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCkuZ2V0Tm9taW5h
bFNpemUoKSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgMTogICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgImludCgiLCAiIiwgIikiKTsgIGJyZWFrOworICAgICAgICAgIGNhc2UgMjogICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgImludDIoIiwgIiIsICIpIik7IGJyZWFrOworICAgICAgICAgIGNh
c2UgMzogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImludDMoIiwgIiIsICIpIik7IGJyZWFrOwor
ICAgICAgICAgIGNhc2UgNDogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImludDQoIiwgIiIsICIp
Iik7IGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFJhZGlhbnM6ICAgICAgICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICJyYWRpYW5zKCIsICIiLCAiKSIpOyAgIGJyZWFrOworICAgICAgY2FzZSBF
T3BEZWdyZWVzOiAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGVncmVlcygiLCAiIiwg
IikiKTsgICBicmVhazsKKyAgICAgIGNhc2UgRU9wU2luOiAgICAgICAgICAgICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgInNpbigiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVP
cENvczogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJjb3MoIiwgIiIsICIpIik7
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BUYW46ICAgICAgICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAidGFuKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9w
QXNpbjogICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFzaW4oIiwgIiIsICIpIik7
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEFjb3M6ICAgICAgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICJhY29zKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BB
dGFuOiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYXRhbigiLCAiIiwgIikiKTsg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRXhwOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgImV4cCgiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcExv
ZzogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJsb2coIiwgIiIsICIpIik7ICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BFeHAyOiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0
KHZpc2l0LCAiZXhwMigiLCAiIiwgIikiKTsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTG9n
MjogICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImxvZzIoIiwgIiIsICIpIik7ICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFNxcnQ6ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJzcXJ0KCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BJbnZl
cnNlU3FydDogICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAicnNxcnQoIiwgIiIsICIpIik7ICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wQWJzOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgImFicygiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFNpZ246
ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJzaWduKCIsICIiLCAiKSIpOyAgICAg
IGJyZWFrOworICAgICAgY2FzZSBFT3BGbG9vcjogICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAiZmxvb3IoIiwgIiIsICIpIik7ICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ2VpbDog
ICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImNlaWwoIiwgIiIsICIpIik7ICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEVPcEZyYWN0OiAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICJmcmFjKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BMZW5ndGg6
ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibGVuZ3RoKCIsICIiLCAiKSIpOyAgICBi
cmVhazsKKyAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgIm5vcm1hbGl6ZSgiLCAiIiwgIikiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcERGZHg6Cisg
ICAgICAgIGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1bmN0aW9u
KQorICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIiLCAi
LCAwLjApIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGR4KCIsICIiLCAiKSIpOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BERmR5OgorICAgICAgICBpZihtSW5zaWRlRGlzY29u
dGludW91c0xvb3AgfHwgbU91dHB1dExvZDBGdW5jdGlvbikKKyAgICAgICAgeworICAgICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIiwgIiwgMC4wKSIpOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
ZGR5KCIsICIiLCAiKSIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
T3BGd2lkdGg6CisgICAgICAgIGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0
TG9kMEZ1bmN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAiKCIsICIiLCAiLCAwLjApIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZndpZHRoKCIsICIiLCAiKSIpOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BBbnk6ICAgICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYW55KCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRU9wQWxsOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFsbCgi
LCAiIiwgIikiKTsgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE91dHB1dEhMU0w6OnZpc2l0QWdn
cmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQoreworICAgIFRJbmZv
U2lua0Jhc2UgJm91dCA9IG1Cb2R5OworCisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAg
IHsKKyAgICAgIGNhc2UgRU9wU2VxdWVuY2U6CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICht
SW5zaWRlRnVuY3Rpb24pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0cHV0TGlu
ZURpcmVjdGl2ZShub2RlLT5nZXRMaW5lKCkuZmlyc3RfbGluZSk7CisgICAgICAgICAgICAgICAg
b3V0IDw8ICJ7XG4iOworCisgICAgICAgICAgICAgICAgbVNjb3BlRGVwdGgrKzsKKworICAgICAg
ICAgICAgICAgIGlmIChtU2NvcGVCcmFja2V0LnNpemUoKSA8IG1TY29wZURlcHRoKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbVNjb3BlQnJhY2tldC5wdXNoX2JhY2so
MCk7ICAgLy8gTmV3IHNjb3BlIGxldmVsCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1TY29wZUJy
YWNrZXRbbVNjb3BlRGVwdGggLSAxXSsrOyAgIC8vIE5ldyBzY29wZSBhdCBleGlzdGluZyBsZXZl
bAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChU
SW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNpdCA9IG5vZGUtPmdldFNlcXVlbmNlKCkuYmVnaW4o
KTsgc2l0ICE9IG5vZGUtPmdldFNlcXVlbmNlKCkuZW5kKCk7IHNpdCsrKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUoKCpzaXQpLT5nZXRMaW5lKCku
Zmlyc3RfbGluZSk7CisKKyAgICAgICAgICAgICAgICB0cmF2ZXJzZVN0YXRlbWVudHMoKnNpdCk7
CisKKyAgICAgICAgICAgICAgICBvdXQgPDwgIjtcbiI7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChtSW5zaWRlRnVuY3Rpb24pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRMaW5lKCkubGFzdF9saW5lKTsKKyAgICAg
ICAgICAgICAgICBvdXQgPDwgIn1cbiI7CisKKyAgICAgICAgICAgICAgICBtU2NvcGVEZXB0aC0t
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgIGNhc2UgRU9wRGVjbGFyYXRpb246CisgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNp
dCkKKyAgICAgICAgeworICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5v
ZGUtPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQgKnZhcmlhYmxlID0g
c2VxdWVuY2VbMF0tPmdldEFzVHlwZWQoKTsKKworICAgICAgICAgICAgaWYgKHZhcmlhYmxlICYm
ICh2YXJpYWJsZS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxVGVtcG9yYXJ5IHx8IHZhcmlhYmxlLT5n
ZXRRdWFsaWZpZXIoKSA9PSBFdnFHbG9iYWwpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGlmICh2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgYWRkQ29uc3RydWN0b3IodmFyaWFibGUtPmdldFR5cGUo
KSwgc2NvcGVkU3RydWN0KHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCktPm5hbWUoKSks
IE5VTEwpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghdmFyaWFi
bGUtPmdldEFzU3ltYm9sTm9kZSgpIHx8IHZhcmlhYmxlLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0
U3ltYm9sKCkgIT0gIiIpICAgLy8gVmFyaWFibGUgZGVjbGFyYXRpb24KKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIGlmICghbUluc2lkZUZ1bmN0aW9uKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgInN0YXRpYyAiOwor
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8IHR5cGVT
dHJpbmcodmFyaWFibGUtPmdldFR5cGUoKSkgKyAiICI7CisKKyAgICAgICAgICAgICAgICAgICAg
Zm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNpdCA9IHNlcXVlbmNlLmJlZ2luKCk7IHNp
dCAhPSBzZXF1ZW5jZS5lbmQoKTsgc2l0KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9ICgqc2l0KS0+Z2V0QXNT
eW1ib2xOb2RlKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wpCisgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9s
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgYXJy
YXlTdHJpbmcoc3ltYm9sLT5nZXRUeXBlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dCA8PCAiID0gIiArIGluaXRpYWxpemVyKHN5bWJvbC0+Z2V0VHlwZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKnNpdCktPnRy
YXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoKnNpdCAhPSBzZXF1ZW5jZS5iYWNrKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAodmFyaWFibGUtPmdldEFzU3ltYm9sTm9k
ZSgpICYmIHZhcmlhYmxlLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCkgPT0gIiIpICAg
Ly8gVHlwZSAoc3RydWN0KSBkZWNsYXJhdGlvbgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gQWxyZWFkeSBhZGRlZCB0byBjb25zdHJ1Y3RvciBtYXAKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodmFyaWFibGUgJiYgKHZhcmlhYmxlLT5nZXRRdWFs
aWZpZXIoKSA9PSBFdnFWYXJ5aW5nT3V0IHx8IHZhcmlhYmxlLT5nZXRRdWFsaWZpZXIoKSA9PSBF
dnFJbnZhcmlhbnRWYXJ5aW5nT3V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBm
b3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gc2VxdWVuY2UuYmVnaW4oKTsgc2l0
ICE9IHNlcXVlbmNlLmVuZCgpOyBzaXQrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9ICgqc2l0KS0+Z2V0QXNTeW1ib2xOb2Rl
KCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbCkKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gVmVydGV4IChvdXRwdXQpIHZhcnlpbmdz
IHdoaWNoIGFyZSBkZWNsYXJlZCBidXQgbm90IHdyaXR0ZW4gdG8gc2hvdWxkIHN0aWxsIGJlIGRl
Y2xhcmVkIHRvIGFsbG93IHN1Y2Nlc3NmdWwgbGlua2luZworICAgICAgICAgICAgICAgICAgICAg
ICAgbVJlZmVyZW5jZWRWYXJ5aW5nc1tzeW1ib2wtPmdldFN5bWJvbCgpXSA9IHN5bWJvbDsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICgqc2l0KS0+dHJhdmVyc2UodGhp
cyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIiwg
IjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wUHJvdG90eXBlOgor
ICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91
dCA8PCB0eXBlU3RyaW5nKG5vZGUtPmdldFR5cGUoKSkgPDwgIiAiIDw8IGRlY29yYXRlKG5vZGUt
PmdldE5hbWUoKSkgPDwgKG1PdXRwdXRMb2QwRnVuY3Rpb24gPyAiTG9kMCgiIDogIigiKTsKKwor
ICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZhcmd1bWVudHMgPSBub2RlLT5nZXRTZXF1ZW5j
ZSgpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGFyZ3VtZW50
cy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUSW50ZXJtU3lt
Ym9sICpzeW1ib2wgPSBhcmd1bWVudHNbaV0tPmdldEFzU3ltYm9sTm9kZSgpOworCisgICAgICAg
ICAgICAgICAgaWYgKHN5bWJvbCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIG91dCA8PCBhcmd1bWVudFN0cmluZyhzeW1ib2wpOworCisgICAgICAgICAgICAgICAgICAg
IGlmIChpIDwgYXJndW1lbnRzLnNpemUoKSAtIDEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgb3V0IDw8ICIpO1xuIjsKKworICAgICAgICAg
ICAgLy8gQWxzbyBwcm90b3R5cGUgdGhlIExvZDAgdmFyaWFudCBpZiBuZWVkZWQKKyAgICAgICAg
ICAgIGlmIChtQ29udGFpbnNMb29wRGlzY29udGludWl0eSAmJiAhbU91dHB1dExvZDBGdW5jdGlv
bikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtT3V0cHV0TG9kMEZ1bmN0aW9uID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAg
ICAgICBtT3V0cHV0TG9kMEZ1bmN0aW9uID0gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRU9wQ29tbWE6ICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiLCAiLCAi
KSIpOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRnVuY3Rpb246CisgICAg
ICAgIHsKKyAgICAgICAgICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1l
KG5vZGUtPmdldE5hbWUoKSk7CisKKyAgICAgICAgICAgIG91dCA8PCB0eXBlU3RyaW5nKG5vZGUt
PmdldFR5cGUoKSkgPDwgIiAiOworCisgICAgICAgICAgICBpZiAobmFtZSA9PSAibWFpbiIpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF9tYWluKCI7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
b3V0IDw8IGRlY29yYXRlKG5hbWUpIDw8IChtT3V0cHV0TG9kMEZ1bmN0aW9uID8gIkxvZDAoIiA6
ICIoIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2Vx
dWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOworICAgICAgICAgICAgVEludGVybVNlcXVlbmNl
ICZhcmd1bWVudHMgPSBzZXF1ZW5jZVswXS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2Uo
KTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBhcmd1bWVudHMu
c2l6ZSgpOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVEludGVybVN5bWJv
bCAqc3ltYm9sID0gYXJndW1lbnRzW2ldLT5nZXRBc1N5bWJvbE5vZGUoKTsKKworICAgICAgICAg
ICAgICAgIGlmIChzeW1ib2wpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoc3ltYm9sLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkpCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZENvbnN0cnVjdG9yKHN5bWJvbC0+Z2V0VHlw
ZSgpLCBzY29wZWRTdHJ1Y3Qoc3ltYm9sLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCktPm5hbWUoKSks
IE5VTEwpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgb3V0
IDw8IGFyZ3VtZW50U3RyaW5nKHN5bWJvbCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGkg
PCBhcmd1bWVudHMuc2l6ZSgpIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBvdXQgPDwgIilcbiIKKyAgICAgICAgICAgICAgICAie1xu
IjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHNlcXVlbmNlLnNpemUoKSA+IDEpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbUluc2lkZUZ1bmN0aW9uID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBzZXF1ZW5jZVsxXS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAg
ICAgbUluc2lkZUZ1bmN0aW9uID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG91dCA8PCAifVxuIjsKKworICAgICAgICAgICAgaWYgKG1Db250YWluc0xv
b3BEaXNjb250aW51aXR5ICYmICFtT3V0cHV0TG9kMEZ1bmN0aW9uKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGlmIChuYW1lICE9ICJtYWluIikKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgbU91
dHB1dExvZDBGdW5jdGlvbiA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBFT3BGdW5jdGlvbkNhbGw6CisgICAgICAgIHsKKyAgICAgICAgICAgIFRT
dHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7Cisg
ICAgICAgICAgICBib29sIGxvZDAgPSBtSW5zaWRlRGlzY29udGludW91c0xvb3AgfHwgbU91dHB1
dExvZDBGdW5jdGlvbjsKKworICAgICAgICAgICAgaWYgKG5vZGUtPmlzVXNlckRlZmluZWQoKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgZGVjb3JhdGUobmFtZSkgPDwg
KGxvZDAgPyAiTG9kMCgiIDogIigiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSAidGV4dHVyZTJEIikK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNl
cXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkQgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0
U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRF9iaWFzID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkQo
IjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRT
ZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJETG9kMCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2Rl
LT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90
ZXh0dXJlMkRMb2QwKCI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJEUHJvaiIpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWxvZDApCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5j
ZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJvaiA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRT
ZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJl
MkRQcm9qKCI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QwID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9q
TG9kMF9iaWFzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRQcm9qTG9kMCgiOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRl
eHR1cmVDdWJlIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
bG9kMCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZSA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNl
IGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmVfYmlh
cyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8
PCAiZ2xfdGV4dHVyZUN1YmUoIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmVM
b2QwID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0
dXJlQ3ViZUxvZDBfYmlhcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZUN1YmVMb2QwKCI7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9
PSAidGV4dHVyZTJETG9kIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRExvZCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJM
RSgpOworCisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJETG9kKCI7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1
cmUyRFByb2pMb2QiKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJvakxvZCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJM
RSgpOworCisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvakxvZCgi
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0
ZXh0dXJlQ3ViZUxvZCIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJM
RSgpOworCisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZUN1YmVMb2QoIjsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9
IG5vZGUtPmdldFNlcXVlbmNlKCk7CisKKyAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNl
OjppdGVyYXRvciBhcmcgPSBhcmd1bWVudHMuYmVnaW4oKTsgYXJnICE9IGFyZ3VtZW50cy5lbmQo
KTsgYXJnKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBl
ID09IFNIX0hMU0wxMV9PVVRQVVQgJiYgSXNTYW1wbGVyKCgqYXJnKS0+Z2V0QXNUeXBlZCgpLT5n
ZXRCYXNpY1R5cGUoKSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBv
dXQgPDwgInRleHR1cmVfIjsKKyAgICAgICAgICAgICAgICAgICAgKCphcmcpLT50cmF2ZXJzZSh0
aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIsIHNhbXBsZXJfIjsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAoKmFyZyktPnRyYXZlcnNlKHRoaXMpOworCisg
ICAgICAgICAgICAgICAgaWYgKGFyZyA8IGFyZ3VtZW50cy5lbmQoKSAtIDEpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dCA8PCAiKSI7CisKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RU9wUGFyYW1ldGVyczogICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiLCAiLCAiKVxu
e1xuIik7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RGbG9hdDoK
KyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAidmVjMSIsICZub2RlLT5n
ZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInZlYzEoIiwgIiIs
ICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMyOgorICAg
ICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJ2ZWMyIiwgJm5vZGUtPmdldFNl
cXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidmVjMigiLCAiLCAiLCAi
KSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMzoKKyAgICAg
ICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAidmVjMyIsICZub2RlLT5nZXRTZXF1
ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInZlYzMoIiwgIiwgIiwgIiki
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzQ6CisgICAgICAg
IGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgInZlYzQiLCAmbm9kZS0+Z2V0U2VxdWVu
Y2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ2ZWM0KCIsICIsICIsICIpIik7
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29sOgorICAgICAgICBh
ZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJidmVjMSIsICZub2RlLT5nZXRTZXF1ZW5j
ZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImJ2ZWMxKCIsICIiLCAiKSIpOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzI6CisgICAgICAgIGFk
ZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgImJ2ZWMyIiwgJm5vZGUtPmdldFNlcXVlbmNl
KCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYnZlYzIoIiwgIiwgIiwgIikiKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMzOgorICAgICAgICBh
ZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJidmVjMyIsICZub2RlLT5nZXRTZXF1ZW5j
ZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImJ2ZWMzKCIsICIsICIsICIpIik7
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjNDoKKyAgICAgICAg
YWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiYnZlYzQiLCAmbm9kZS0+Z2V0U2VxdWVu
Y2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJidmVjNCgiLCAiLCAiLCAiKSIp
OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OgorICAgICAgICBh
ZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJpdmVjMSIsICZub2RlLT5nZXRTZXF1ZW5j
ZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIml2ZWMxKCIsICIiLCAiKSIpOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6CisgICAgICAgIGFk
ZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgIml2ZWMyIiwgJm5vZGUtPmdldFNlcXVlbmNl
KCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaXZlYzIoIiwgIiwgIiwgIikiKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMzOgorICAgICAgICBh
ZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJpdmVjMyIsICZub2RlLT5nZXRTZXF1ZW5j
ZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIml2ZWMzKCIsICIsICIsICIpIik7
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjNDoKKyAgICAgICAg
YWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiaXZlYzQiLCAmbm9kZS0+Z2V0U2VxdWVu
Y2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJpdmVjNCgiLCAiLCAiLCAiKSIp
OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MjoKKyAgICAgICAg
YWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAibWF0MiIsICZub2RlLT5nZXRTZXF1ZW5j
ZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm1hdDIoIiwgIiwgIiwgIikiKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6CisgICAgICAgIGFk
ZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgIm1hdDMiLCAmbm9kZS0+Z2V0U2VxdWVuY2Uo
KSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJtYXQzKCIsICIsICIsICIpIik7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQ0OiAKKyAgICAgICAgYWRk
Q29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAibWF0NCIsICZub2RlLT5nZXRTZXF1ZW5jZSgp
KTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm1hdDQoIiwgIiwgIiwgIikiKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdFN0cnVjdDoKKyAgICAgICAgYWRk
Q29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCBzY29wZWRTdHJ1Y3Qobm9kZS0+Z2V0VHlwZSgp
LmdldFN0cnVjdCgpLT5uYW1lKCkpLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsIHN0cnVjdExvb2t1cChub2RlLT5nZXRUeXBlKCkuZ2V0U3RydWN0
KCktPm5hbWUoKSkgKyAiX2N0b3IoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVPcExlc3NUaGFuOiAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA8
ICIsICIpIik7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wR3JlYXRlclRo
YW46ICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiID4gIiwgIikiKTsgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOiAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiKCIsICIgPD0gIiwgIikiKTsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6IG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA+
PSAiLCAiKSIpOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wVmVjdG9yRXF1
YWw6ICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiID09ICIsICIpIik7ICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BWZWN0b3JOb3RFcXVhbDogICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiKCIsICIgIT0gIiwgIikiKTsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVPcE1vZDoKKyAgICAgICAgeworICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBsb29r
IGF0IHRoZSBudW1iZXIgb2YgY29tcG9uZW50cyBpbiBib3RoIGFyZ3VtZW50cworICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5nZXRTZXF1ZW5jZSgpWzBdLT5nZXRBc1R5cGVkKCktPmdldE5vbWlu
YWxTaXplKCkgKiAxMAorICAgICAgICAgICAgICAgICAgICAgKyBub2RlLT5nZXRTZXF1ZW5jZSgp
WzFdLT5nZXRBc1R5cGVkKCktPmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgIGNhc2UgMTE6IG1Vc2VzTW9kMSA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIDIyOiBtVXNlc01vZDJ2ID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
MjE6IG1Vc2VzTW9kMmYgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAzMzogbVVz
ZXNNb2QzdiA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDMxOiBtVXNlc01vZDNm
ID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgNDQ6IG1Vc2VzTW9kNHYgPSB0cnVl
OyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSA0MTogbVVzZXNNb2Q0ZiA9IHRydWU7IGJyZWFr
OworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibW9kKCIsICIsICIsICIpIik7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFBvdzogICAgICAgICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICJwb3coIiwgIiwgIiwgIikiKTsgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRU9wQXRhbjoKKyAgICAgICAgQVNTRVJUKG5vZGUtPmdldFNlcXVl
bmNlKCkuc2l6ZSgpID09IDIpOyAgIC8vIGF0YW4oeCkgaXMgYSB1bmFyeSBvcGVyYXRvcgorICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmdldFNlcXVlbmNlKClbMF0tPmdldEFzVHlwZWQoKS0+Z2V0Tm9t
aW5hbFNpemUoKSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgMTogbVVzZXNBdGFuMl8xID0g
dHJ1ZTsgYnJlYWs7CisgICAgICAgICAgY2FzZSAyOiBtVXNlc0F0YW4yXzIgPSB0cnVlOyBicmVh
azsKKyAgICAgICAgICBjYXNlIDM6IG1Vc2VzQXRhbjJfMyA9IHRydWU7IGJyZWFrOworICAgICAg
ICAgIGNhc2UgNDogbVVzZXNBdGFuMl80ID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAiYXRhbnl4KCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BN
aW46ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibWluKCIsICIsICIsICIpIik7ICAg
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTWF4OiAgICAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgIm1heCgiLCAiLCAiLCAiKSIpOyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEVPcENsYW1wOiAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJjbGFtcCgiLCAiLCAiLCAi
KSIpOyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BNaXg6ICAgICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAibGVycCgiLCAiLCAiLCAiKSIpOyAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgRU9wU3RlcDogICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInN0ZXAoIiwgIiwg
IiwgIikiKTsgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFNtb290aFN0ZXA6ICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICJzbW9vdGhzdGVwKCIsICIsICIsICIpIik7ICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFT3BEaXN0YW5jZTogICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGlzdGFu
Y2UoIiwgIiwgIiwgIikiKTsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRG90OiAgICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImRvdCgiLCAiLCAiLCAiKSIpOyAgICAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEVPcENyb3NzOiAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJj
cm9zcygiLCAiLCAiLCAiKSIpOyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BGYWNlRm9y
d2FyZDoKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRTZXF1ZW5jZSgp
WzBdLT5nZXRBc1R5cGVkKCktPmdldE5vbWluYWxTaXplKCkpICAgLy8gTnVtYmVyIG9mIGNvbXBv
bmVudHMgaW4gdGhlIGZpcnN0IGFyZ3VtZW50CisgICAgICAgICAgICB7CisgICAgICAgICAgICBj
YXNlIDE6IG1Vc2VzRmFjZWZvcndhcmQxID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IDI6IG1Vc2VzRmFjZWZvcndhcmQyID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDM6
IG1Vc2VzRmFjZWZvcndhcmQzID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDQ6IG1V
c2VzRmFjZWZvcndhcmQ0ID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAiZmFjZWZvcndhcmQoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wUmVmbGVjdDogICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgInJlZmxlY3QoIiwgIiwgIiwgIikiKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEVPcFJlZnJhY3Q6ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJyZWZyYWN0KCIsICIsICIs
ICIpIik7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BNdWw6ICAgICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiKCIsICIgKiAiLCAiKSIpOyAgICAgICAgICAgICBicmVhazsKKyAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgT3V0cHV0SExTTDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxl
Y3Rpb24gKm5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CisKKyAgICBp
ZiAobm9kZS0+dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJz
IiA8PCBtVW5mb2xkU2hvcnRDaXJjdWl0LT5nZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKKyAgICB9
CisgICAgZWxzZSAgLy8gaWYvZWxzZSBzdGF0ZW1lbnQKKyAgICB7CisgICAgICAgIG1VbmZvbGRT
aG9ydENpcmN1aXQtPnRyYXZlcnNlKG5vZGUtPmdldENvbmRpdGlvbigpKTsKKworICAgICAgICBv
dXQgPDwgImlmICgiOworCisgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0
aGlzKTsKKworICAgICAgICBvdXQgPDwgIilcbiI7CisgICAgICAgIAorICAgICAgICBvdXRwdXRM
aW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKS5maXJzdF9saW5lKTsKKyAgICAgICAgb3V0IDw8
ICJ7XG4iOworCisgICAgICAgIGJvb2wgZGlzY2FyZCA9IGZhbHNlOworCisgICAgICAgIGlmIChu
b2RlLT5nZXRUcnVlQmxvY2soKSkKKyAgICAgICAgeworICAgICAgICAgICAgdHJhdmVyc2VTdGF0
ZW1lbnRzKG5vZGUtPmdldFRydWVCbG9jaygpKTsKKworICAgICAgICAgICAgLy8gRGV0ZWN0IHRy
dWUgZGlzY2FyZAorICAgICAgICAgICAgZGlzY2FyZCA9IChkaXNjYXJkIHx8IEZpbmREaXNjYXJk
OjpzZWFyY2gobm9kZS0+Z2V0VHJ1ZUJsb2NrKCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIG91
dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0TGluZSgpLmZpcnN0X2xpbmUpOworICAgICAgICBv
dXQgPDwgIjtcbn1cbiI7CisKKyAgICAgICAgaWYgKG5vZGUtPmdldEZhbHNlQmxvY2soKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJlbHNlXG4iOworCisgICAgICAgICAgICBvdXRw
dXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldEZhbHNlQmxvY2soKS0+Z2V0TGluZSgpLmZpcnN0X2xp
bmUpOworICAgICAgICAgICAgb3V0IDw8ICJ7XG4iOworCisgICAgICAgICAgICBvdXRwdXRMaW5l
RGlyZWN0aXZlKG5vZGUtPmdldEZhbHNlQmxvY2soKS0+Z2V0TGluZSgpLmZpcnN0X2xpbmUpOwor
ICAgICAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRzKG5vZGUtPmdldEZhbHNlQmxvY2soKSk7CisK
KyAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0RmFsc2VCbG9jaygpLT5n
ZXRMaW5lKCkuZmlyc3RfbGluZSk7CisgICAgICAgICAgICBvdXQgPDwgIjtcbn1cbiI7CisKKyAg
ICAgICAgICAgIC8vIERldGVjdCBmYWxzZSBkaXNjYXJkCisgICAgICAgICAgICBkaXNjYXJkID0g
KGRpc2NhcmQgfHwgRmluZERpc2NhcmQ6OnNlYXJjaChub2RlLT5nZXRGYWxzZUJsb2NrKCkpKTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIEFOR0xFIGlzc3VlIDQ4NjogRGV0ZWN0IHByb2JsZW1h
dGljIGNvbmRpdGlvbmFsIGRpc2NhcmQKKyAgICAgICAgaWYgKGRpc2NhcmQgJiYgRmluZFNpZGVF
ZmZlY3RSZXdyaXRpbmc6OnNlYXJjaChub2RlKSkKKyAgICAgICAgeworICAgICAgICAgICAgbVVz
ZXNEaXNjYXJkUmV3cml0aW5nID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBPdXRwdXRITFNMOjp2aXNpdENvbnN0YW50VW5pb24oVEludGVy
bUNvbnN0YW50VW5pb24gKm5vZGUpCit7CisgICAgd3JpdGVDb25zdGFudFVuaW9uKG5vZGUtPmdl
dFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSk7Cit9CisKK2Jvb2wgT3V0cHV0
SExTTDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKK3sKKyAgICBi
b29sIHdhc0Rpc2NvbnRpbnVvdXMgPSBtSW5zaWRlRGlzY29udGludW91c0xvb3A7CisKKyAgICBp
ZiAobUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkgJiYgIW1JbnNpZGVEaXNjb250aW51b3VzTG9v
cCkKKyAgICB7CisgICAgICAgIG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCA9IGNvbnRhaW5zTG9v
cERpc2NvbnRpbnVpdHkobm9kZSk7CisgICAgfQorCisgICAgaWYgKG1PdXRwdXRUeXBlID09IFNI
X0hMU0w5X09VVFBVVCkKKyAgICB7CisgICAgICAgIGlmIChoYW5kbGVFeGNlc3NpdmVMb29wKG5v
ZGUpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKKworICAgIGlmIChub2RlLT5n
ZXRUeXBlKCkgPT0gRUxvb3BEb1doaWxlKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJ7ZG9cbiI7
CisKKyAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRMaW5lKCkuZmlyc3RfbGlu
ZSk7CisgICAgICAgIG91dCA8PCAie1xuIjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgb3V0IDw8ICJ7Zm9yKCI7CisgICAgICAgIAorICAgICAgICBpZiAobm9kZS0+Z2V0SW5pdCgp
KQorICAgICAgICB7CisgICAgICAgICAgICBub2RlLT5nZXRJbml0KCktPnRyYXZlcnNlKHRoaXMp
OworICAgICAgICB9CisKKyAgICAgICAgb3V0IDw8ICI7ICI7CisKKyAgICAgICAgaWYgKG5vZGUt
PmdldENvbmRpdGlvbigpKQorICAgICAgICB7CisgICAgICAgICAgICBub2RlLT5nZXRDb25kaXRp
b24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBvdXQgPDwgIjsgIjsK
KworICAgICAgICBpZiAobm9kZS0+Z2V0RXhwcmVzc2lvbigpKQorICAgICAgICB7CisgICAgICAg
ICAgICBub2RlLT5nZXRFeHByZXNzaW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB9CisK
KyAgICAgICAgb3V0IDw8ICIpXG4iOworICAgICAgICAKKyAgICAgICAgb3V0cHV0TGluZURpcmVj
dGl2ZShub2RlLT5nZXRMaW5lKCkuZmlyc3RfbGluZSk7CisgICAgICAgIG91dCA8PCAie1xuIjsK
KyAgICB9CisKKyAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQorICAgIHsKKyAgICAgICAgdHJhdmVy
c2VTdGF0ZW1lbnRzKG5vZGUtPmdldEJvZHkoKSk7CisgICAgfQorCisgICAgb3V0cHV0TGluZURp
cmVjdGl2ZShub2RlLT5nZXRMaW5lKCkuZmlyc3RfbGluZSk7CisgICAgb3V0IDw8ICI7fVxuIjsK
KworICAgIGlmIChub2RlLT5nZXRUeXBlKCkgPT0gRUxvb3BEb1doaWxlKQorICAgIHsKKyAgICAg
ICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRDb25kaXRpb24oKS0+Z2V0TGluZSgpLmZp
cnN0X2xpbmUpOworICAgICAgICBvdXQgPDwgIndoaWxlKFxuIjsKKworICAgICAgICBub2RlLT5n
ZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CisKKyAgICAgICAgb3V0IDw8ICIpOyI7Cisg
ICAgfQorCisgICAgb3V0IDw8ICJ9XG4iOworCisgICAgbUluc2lkZURpc2NvbnRpbnVvdXNMb29w
ID0gd2FzRGlzY29udGludW91czsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBPdXRw
dXRITFNMOjp2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCAqbm9kZSkKK3sK
KyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKKworICAgIHN3aXRjaCAobm9kZS0+Z2V0
Rmxvd09wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BLaWxsOgorICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiZGlzY2FyZDtcbiIsICIiLCAiIik7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFT3BCcmVhazoKKyAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAobUV4Y2Vzc2l2ZUxvb3BJbmRleCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBvdXQgPDwgIntCcmVhayI7CisgICAgICAgICAgICAgICAgbUV4Y2Vzc2l2
ZUxvb3BJbmRleC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgPSB0
cnVlOyBicmVhazt9XG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiYnJlYWs7XG4iOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb250aW51ZTogb3V0
cHV0VHJpcGxldCh2aXNpdCwgImNvbnRpbnVlO1xuIiwgIiIsICIiKTsgYnJlYWs7CisgICAgICBj
YXNlIEVPcFJldHVybjoKKyAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAobm9kZS0+Z2V0RXhwcmVzc2lvbigpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG91dCA8PCAicmV0dXJuICI7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJyZXR1cm47
XG4iOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09
IFBvc3RWaXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vZGUtPmdldEV4cHJlc3Np
b24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIjtcbiI7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE91dHB1dEhM
U0w6OnRyYXZlcnNlU3RhdGVtZW50cyhUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBpZiAoaXNT
aW5nbGVTdGF0ZW1lbnQobm9kZSkpCisgICAgeworICAgICAgICBtVW5mb2xkU2hvcnRDaXJjdWl0
LT50cmF2ZXJzZShub2RlKTsKKyAgICB9CisKKyAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKK30K
KworYm9vbCBPdXRwdXRITFNMOjppc1NpbmdsZVN0YXRlbWVudChUSW50ZXJtTm9kZSAqbm9kZSkK
K3sKKyAgICBUSW50ZXJtQWdncmVnYXRlICphZ2dyZWdhdGUgPSBub2RlLT5nZXRBc0FnZ3JlZ2F0
ZSgpOworCisgICAgaWYgKGFnZ3JlZ2F0ZSkKKyAgICB7CisgICAgICAgIGlmIChhZ2dyZWdhdGUt
PmdldE9wKCkgPT0gRU9wU2VxdWVuY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGZv
ciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBzaXQgPSBhZ2dyZWdhdGUtPmdldFNlcXVlbmNl
KCkuYmVnaW4oKTsgc2l0ICE9IGFnZ3JlZ2F0ZS0+Z2V0U2VxdWVuY2UoKS5lbmQoKTsgc2l0Kysp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCFpc1NpbmdsZVN0YXRlbWVudCgq
c2l0KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIEhh
bmRsZSBsb29wcyB3aXRoIG1vcmUgdGhhbiAyNTQgaXRlcmF0aW9ucyAodW5zdXBwb3J0ZWQgYnkg
RDNEOSkgYnkgc3BsaXR0aW5nIHRoZW0KKy8vIChUaGUgRDNEIGRvY3VtZW50YXRpb24gc2F5cyAy
NTUgaXRlcmF0aW9ucywgYnV0IHRoZSBjb21waWxlciBjb21wbGFpbnMgYXQgYW55dGhpbmcgbW9y
ZSB0aGFuIDI1NCkuCitib29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVy
bUxvb3AgKm5vZGUpCit7CisgICAgY29uc3QgaW50IE1BWF9MT09QX0lURVJBVElPTlMgPSAyNTQ7
CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CisKKyAgICAvLyBQYXJzZSBsb29wcyBv
ZiB0aGUgZm9ybToKKyAgICAvLyBmb3IoaW50IGluZGV4ID0gaW5pdGlhbDsgaW5kZXggW2NvbXBh
cmF0b3JdIGxpbWl0OyBpbmRleCArPSBpbmNyZW1lbnQpCisgICAgVEludGVybVN5bWJvbCAqaW5k
ZXggPSBOVUxMOworICAgIFRPcGVyYXRvciBjb21wYXJhdG9yID0gRU9wTnVsbDsKKyAgICBpbnQg
aW5pdGlhbCA9IDA7CisgICAgaW50IGxpbWl0ID0gMDsKKyAgICBpbnQgaW5jcmVtZW50ID0gMDsK
KworICAgIC8vIFBhcnNlIGluZGV4IG5hbWUgYW5kIGludGlhbCB2YWx1ZQorICAgIGlmIChub2Rl
LT5nZXRJbml0KCkpCisgICAgeworICAgICAgICBUSW50ZXJtQWdncmVnYXRlICppbml0ID0gbm9k
ZS0+Z2V0SW5pdCgpLT5nZXRBc0FnZ3JlZ2F0ZSgpOworCisgICAgICAgIGlmIChpbml0KQorICAg
ICAgICB7CisgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJnNlcXVlbmNlID0gaW5pdC0+Z2V0
U2VxdWVuY2UoKTsKKyAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAqdmFyaWFibGUgPSBzZXF1ZW5j
ZVswXS0+Z2V0QXNUeXBlZCgpOworCisgICAgICAgICAgICBpZiAodmFyaWFibGUgJiYgdmFyaWFi
bGUtPmdldFF1YWxpZmllcigpID09IEV2cVRlbXBvcmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBUSW50ZXJtQmluYXJ5ICphc3NpZ24gPSB2YXJpYWJsZS0+Z2V0QXNCaW5hcnlO
b2RlKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoYXNzaWduLT5nZXRPcCgpID09IEVPcEluaXRp
YWxpemUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtU3lt
Ym9sICpzeW1ib2wgPSBhc3NpZ24tPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAg
ICAgICAgICAgICAgICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpjb25zdGFudCA9IGFzc2lnbi0+
Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHN5bWJvbCAmJiBjb25zdGFudCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYg
Y29uc3RhbnQtPmdldE5vbWluYWxTaXplKCkgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHN5bWJvbDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbml0aWFsID0gY29uc3RhbnQtPmdldElDb25zdCgwKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFBhcnNl
IGNvbXBhcmF0b3IgYW5kIGxpbWl0IHZhbHVlCisgICAgaWYgKGluZGV4ICE9IE5VTEwgJiYgbm9k
ZS0+Z2V0Q29uZGl0aW9uKCkpCisgICAgeworICAgICAgICBUSW50ZXJtQmluYXJ5ICp0ZXN0ID0g
bm9kZS0+Z2V0Q29uZGl0aW9uKCktPmdldEFzQmluYXJ5Tm9kZSgpOworICAgICAgICAKKyAgICAg
ICAgaWYgKHRlc3QgJiYgdGVzdC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0SWQo
KSA9PSBpbmRleC0+Z2V0SWQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgVEludGVybUNvbnN0
YW50VW5pb24gKmNvbnN0YW50ID0gdGVzdC0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9u
KCk7CisKKyAgICAgICAgICAgIGlmIChjb25zdGFudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBpZiAoY29uc3RhbnQtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAmJiBjb25zdGFu
dC0+Z2V0Tm9taW5hbFNpemUoKSA9PSAxKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgY29tcGFyYXRvciA9IHRlc3QtPmdldE9wKCk7CisgICAgICAgICAgICAgICAgICAg
IGxpbWl0ID0gY29uc3RhbnQtPmdldElDb25zdCgwKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBQYXJzZSBpbmNyZW1lbnQKKyAg
ICBpZiAoaW5kZXggIT0gTlVMTCAmJiBjb21wYXJhdG9yICE9IEVPcE51bGwgJiYgbm9kZS0+Z2V0
RXhwcmVzc2lvbigpKQorICAgIHsKKyAgICAgICAgVEludGVybUJpbmFyeSAqYmluYXJ5VGVybWlu
YWwgPSBub2RlLT5nZXRFeHByZXNzaW9uKCktPmdldEFzQmluYXJ5Tm9kZSgpOworICAgICAgICBU
SW50ZXJtVW5hcnkgKnVuYXJ5VGVybWluYWwgPSBub2RlLT5nZXRFeHByZXNzaW9uKCktPmdldEFz
VW5hcnlOb2RlKCk7CisgICAgICAgIAorICAgICAgICBpZiAoYmluYXJ5VGVybWluYWwpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIFRPcGVyYXRvciBvcCA9IGJpbmFyeVRlcm1pbmFsLT5nZXRPcCgp
OworICAgICAgICAgICAgVEludGVybUNvbnN0YW50VW5pb24gKmNvbnN0YW50ID0gYmluYXJ5VGVy
bWluYWwtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpOworCisgICAgICAgICAgICBp
ZiAoY29uc3RhbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50
LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmdldE5vbWluYWxTaXplKCkg
PT0gMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZSA9
IGNvbnN0YW50LT5nZXRJQ29uc3QoMCk7CisKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChv
cCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRU9w
QWRkQXNzaWduOiBpbmNyZW1lbnQgPSB2YWx1ZTsgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgRU9wU3ViQXNzaWduOiBpbmNyZW1lbnQgPSAtdmFsdWU7IGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOSU1QTEVNRU5URUQoKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBlbHNlIGlmICh1bmFyeVRlcm1pbmFsKQorICAgICAgICB7CisgICAgICAgICAgICBUT3Bl
cmF0b3Igb3AgPSB1bmFyeVRlcm1pbmFsLT5nZXRPcCgpOworCisgICAgICAgICAgICBzd2l0Y2gg
KG9wKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6
IGluY3JlbWVudCA9IDE7ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFT3BQb3N0RGVjcmVt
ZW50OiBpbmNyZW1lbnQgPSAtMTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRU9wUHJlSW5j
cmVtZW50OiAgaW5jcmVtZW50ID0gMTsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVPcFBy
ZURlY3JlbWVudDogIGluY3JlbWVudCA9IC0xOyBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVs
dDogVU5JTVBMRU1FTlRFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKGluZGV4ICE9IE5VTEwgJiYgY29tcGFyYXRvciAhPSBFT3BOdWxsICYmIGluY3JlbWVu
dCAhPSAwKQorICAgIHsKKyAgICAgICAgaWYgKGNvbXBhcmF0b3IgPT0gRU9wTGVzc1RoYW5FcXVh
bCkKKyAgICAgICAgeworICAgICAgICAgICAgY29tcGFyYXRvciA9IEVPcExlc3NUaGFuOworICAg
ICAgICAgICAgbGltaXQgKz0gMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb21wYXJhdG9y
ID09IEVPcExlc3NUaGFuKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgaXRlcmF0aW9ucyA9
IChsaW1pdCAtIGluaXRpYWwpIC8gaW5jcmVtZW50OworCisgICAgICAgICAgICBpZiAoaXRlcmF0
aW9ucyA8PSBNQVhfTE9PUF9JVEVSQVRJT05TKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsgICAvLyBOb3QgYW4gZXhjZXNzaXZlIGxvb3AKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgVEludGVybVN5bWJvbCAqcmVzdG9yZUluZGV4ID0gbUV4Y2Vzc2l2
ZUxvb3BJbmRleDsKKyAgICAgICAgICAgIG1FeGNlc3NpdmVMb29wSW5kZXggPSBpbmRleDsKKwor
ICAgICAgICAgICAgb3V0IDw8ICJ7aW50ICI7CisgICAgICAgICAgICBpbmRleC0+dHJhdmVyc2Uo
dGhpcyk7CisgICAgICAgICAgICBvdXQgPDwgIjtcbiIKKyAgICAgICAgICAgICAgICAgICAiYm9v
bCBCcmVhayI7CisgICAgICAgICAgICBpbmRleC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAg
ICBvdXQgPDwgIiA9IGZhbHNlO1xuIjsKKworICAgICAgICAgICAgYm9vbCBmaXJzdExvb3BGcmFn
bWVudCA9IHRydWU7CisKKyAgICAgICAgICAgIHdoaWxlIChpdGVyYXRpb25zID4gMCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgY2xhbXBlZExpbWl0ID0gaW5pdGlhbCArIGlu
Y3JlbWVudCAqIHN0ZDo6bWluKE1BWF9MT09QX0lURVJBVElPTlMsIGl0ZXJhdGlvbnMpOworCisg
ICAgICAgICAgICAgICAgaWYgKCFmaXJzdExvb3BGcmFnbWVudCkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiaWYgKCFCcmVhayI7CisgICAgICAgICAgICAg
ICAgICAgIGluZGV4LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8
ICIpIHtcbiI7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGl0ZXJh
dGlvbnMgPD0gTUFYX0xPT1BfSVRFUkFUSU9OUykgICAvLyBMYXN0IGxvb3AgZnJhZ21lbnQKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1FeGNlc3NpdmVMb29wSW5kZXgg
PSBOVUxMOyAgIC8vIFN0b3BzIHNldHRpbmcgdGhlIEJyZWFrIGZsYWcKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gZm9yKGludCBpbmRleCA9
IGluaXRpYWw7IGluZGV4IDwgY2xhbXBlZExpbWl0OyBpbmRleCArPSBpbmNyZW1lbnQpCisKKyAg
ICAgICAgICAgICAgICBvdXQgPDwgImZvcigiOworICAgICAgICAgICAgICAgIGluZGV4LT50cmF2
ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiA9ICI7CisgICAgICAgICAgICAg
ICAgb3V0IDw8IGluaXRpYWw7CisKKyAgICAgICAgICAgICAgICBvdXQgPDwgIjsgIjsKKyAgICAg
ICAgICAgICAgICBpbmRleC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgb3V0IDw8
ICIgPCAiOworICAgICAgICAgICAgICAgIG91dCA8PCBjbGFtcGVkTGltaXQ7CisKKyAgICAgICAg
ICAgICAgICBvdXQgPDwgIjsgIjsKKyAgICAgICAgICAgICAgICBpbmRleC0+dHJhdmVyc2UodGhp
cyk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgKz0gIjsKKyAgICAgICAgICAgICAgICBvdXQg
PDwgaW5jcmVtZW50OworICAgICAgICAgICAgICAgIG91dCA8PCAiKVxuIjsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUo
KS5maXJzdF9saW5lKTsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIntcbiI7CisKKyAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+Z2V0Qm9keSgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExp
bmUoKS5maXJzdF9saW5lKTsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIjt9XG4iOworCisgICAg
ICAgICAgICAgICAgaWYgKCFmaXJzdExvb3BGcmFnbWVudCkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAifVxuIjsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBmaXJzdExvb3BGcmFnbWVudCA9IGZhbHNlOworCisgICAgICAgICAgICAg
ICAgaW5pdGlhbCArPSBNQVhfTE9PUF9JVEVSQVRJT05TICogaW5jcmVtZW50OworICAgICAgICAg
ICAgICAgIGl0ZXJhdGlvbnMgLT0gTUFYX0xPT1BfSVRFUkFUSU9OUzsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgb3V0IDw8ICJ9IjsKKworICAgICAgICAgICAgbUV4
Y2Vzc2l2ZUxvb3BJbmRleCA9IHJlc3RvcmVJbmRleDsKKworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBVTklNUExFTUVOVEVEKCk7CisgICAgfQorCisg
ICAgcmV0dXJuIGZhbHNlOyAgIC8vIE5vdCBoYW5kbGVkIGFzIGFuIGV4Y2Vzc2l2ZSBsb29wCit9
CisKK3ZvaWQgT3V0cHV0SExTTDo6b3V0cHV0VHJpcGxldChWaXNpdCB2aXNpdCwgY29uc3QgVFN0
cmluZyAmcHJlU3RyaW5nLCBjb25zdCBUU3RyaW5nICZpblN0cmluZywgY29uc3QgVFN0cmluZyAm
cG9zdFN0cmluZykKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKKworICAgIGlm
ICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICB7CisgICAgICAgIG91dCA8PCBwcmVTdHJpbmc7Cisg
ICAgfQorICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAgeworICAgICAgICBvdXQg
PDwgaW5TdHJpbmc7CisgICAgfQorICAgIGVsc2UgaWYgKHZpc2l0ID09IFBvc3RWaXNpdCkKKyAg
ICB7CisgICAgICAgIG91dCA8PCBwb3N0U3RyaW5nOworICAgIH0KK30KKwordm9pZCBPdXRwdXRI
TFNMOjpvdXRwdXRMaW5lRGlyZWN0aXZlKGludCBsaW5lKQoreworICAgIGlmICgobUNvbnRleHQu
Y29tcGlsZU9wdGlvbnMgJiBTSF9MSU5FX0RJUkVDVElWRVMpICYmIChsaW5lID4gMCkpCisgICAg
eworICAgICAgICBtQm9keSA8PCAiXG4iOworICAgICAgICBtQm9keSA8PCAiI2xpbmUgIiA8PCBs
aW5lOworCisgICAgICAgIGlmIChtQ29udGV4dC5zb3VyY2VQYXRoKQorICAgICAgICB7CisgICAg
ICAgICAgICBtQm9keSA8PCAiIFwiIiA8PCBtQ29udGV4dC5zb3VyY2VQYXRoIDw8ICJcIiI7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1Cb2R5IDw8ICJcbiI7CisgICAgfQorfQorCitU
U3RyaW5nIE91dHB1dEhMU0w6OmFyZ3VtZW50U3RyaW5nKGNvbnN0IFRJbnRlcm1TeW1ib2wgKnN5
bWJvbCkKK3sKKyAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHN5bWJvbC0+Z2V0UXVhbGlmaWVy
KCk7CisgICAgY29uc3QgVFR5cGUgJnR5cGUgPSBzeW1ib2wtPmdldFR5cGUoKTsKKyAgICBUU3Ry
aW5nIG5hbWUgPSBzeW1ib2wtPmdldFN5bWJvbCgpOworCisgICAgaWYgKG5hbWUuZW1wdHkoKSkg
ICAvLyBITFNMIGRlbWFuZHMgbmFtZWQgYXJndW1lbnRzLCBhbHNvIGZvciBwcm90b3R5cGVzCisg
ICAgeworICAgICAgICBuYW1lID0gIngiICsgc3RyKG1VbmlxdWVJbmRleCsrKTsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgbmFtZSA9IGRlY29yYXRlKG5hbWUpOworICAgIH0KKwor
ICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUICYmIElzU2FtcGxlcih0eXBl
LmdldEJhc2ljVHlwZSgpKSkKKyAgICB7CisgICAgICAgcmV0dXJuIHF1YWxpZmllclN0cmluZyhx
dWFsaWZpZXIpICsgIiAiICsgdGV4dHVyZVN0cmluZyh0eXBlKSArICIgdGV4dHVyZV8iICsgbmFt
ZSArIGFycmF5U3RyaW5nKHR5cGUpICsgIiwgIiArCisgICAgICAgICAgICAgIHF1YWxpZmllclN0
cmluZyhxdWFsaWZpZXIpICsgIiBTYW1wbGVyU3RhdGUgc2FtcGxlcl8iICsgbmFtZSArIGFycmF5
U3RyaW5nKHR5cGUpOworICAgIH0KKworICAgIHJldHVybiBxdWFsaWZpZXJTdHJpbmcocXVhbGlm
aWVyKSArICIgIiArIHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKyBuYW1lICsgYXJyYXlTdHJpbmco
dHlwZSk7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6cXVhbGlmaWVyU3RyaW5nKFRRdWFsaWZp
ZXIgcXVhbGlmaWVyKQoreworICAgIHN3aXRjaChxdWFsaWZpZXIpCisgICAgeworICAgICAgY2Fz
ZSBFdnFJbjogICAgICAgICAgICByZXR1cm4gImluIjsKKyAgICAgIGNhc2UgRXZxT3V0OiAgICAg
ICAgICAgcmV0dXJuICJvdXQiOworICAgICAgY2FzZSBFdnFJbk91dDogICAgICAgICByZXR1cm4g
Imlub3V0IjsKKyAgICAgIGNhc2UgRXZxQ29uc3RSZWFkT25seTogcmV0dXJuICJjb25zdCI7Cisg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiAiIjsKK30K
KworVFN0cmluZyBPdXRwdXRITFNMOjp0eXBlU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQorewor
ICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAgICB7CisgICAgICAg
IGNvbnN0IFRTdHJpbmcmIHR5cGVOYW1lID0gdHlwZS5nZXRTdHJ1Y3QoKS0+bmFtZSgpOworICAg
ICAgICBpZiAodHlwZU5hbWUgIT0gIiIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBz
dHJ1Y3RMb29rdXAodHlwZU5hbWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgICAvLyBOYW1l
bGVzcyBzdHJ1Y3R1cmUsIGRlZmluZSBpbiBwbGFjZQorICAgICAgICB7CisgICAgICAgICAgICBj
b25zdCBURmllbGRMaXN0ICZmaWVsZHMgPSB0eXBlLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKKwor
ICAgICAgICAgICAgVFN0cmluZyBzdHJpbmcgPSAic3RydWN0XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJ7XG4iOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBjb25zdCBURmllbGQgKmZpZWxkID0gZmllbGRzW2ldOworCisgICAgICAgICAgICAgICAgc3Ry
aW5nICs9ICIgICAgIiArIHR5cGVTdHJpbmcoKmZpZWxkLT50eXBlKCkpICsgIiAiICsgZGVjb3Jh
dGUoZmllbGQtPm5hbWUoKSkgKyBhcnJheVN0cmluZygqZmllbGQtPnR5cGUoKSkgKyAiO1xuIjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3RyaW5nICs9ICJ9ICI7CisKKyAgICAgICAg
ICAgIHJldHVybiBzdHJpbmc7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAodHlwZS5p
c01hdHJpeCgpKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlLmdldE5vbWluYWxTaXplKCkp
CisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIDI6IHJldHVybiAiZmxvYXQyeDIiOworICAgICAg
ICAgIGNhc2UgMzogcmV0dXJuICJmbG9hdDN4MyI7CisgICAgICAgICAgY2FzZSA0OiByZXR1cm4g
ImZsb2F0NHg0IjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBz
d2l0Y2ggKHR5cGUuZ2V0QmFzaWNUeXBlKCkpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEVi
dEZsb2F0OgorICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldE5vbWluYWxTaXplKCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuICJmbG9hdCI7CisgICAgICAg
ICAgICAgIGNhc2UgMjogcmV0dXJuICJmbG9hdDIiOworICAgICAgICAgICAgICBjYXNlIDM6IHJl
dHVybiAiZmxvYXQzIjsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gImZsb2F0NCI7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAgICBzd2l0Y2gg
KHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2Fz
ZSAxOiByZXR1cm4gImludCI7CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuICJpbnQyIjsK
KyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gImludDMiOworICAgICAgICAgICAgICBjYXNl
IDQ6IHJldHVybiAiaW50NCI7CisgICAgICAgICAgICB9CisgICAgICAgICAgY2FzZSBFYnRCb29s
OgorICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuICJib29sIjsKKyAgICAgICAgICAgICAg
Y2FzZSAyOiByZXR1cm4gImJvb2wyIjsKKyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gImJv
b2wzIjsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gImJvb2w0IjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICBjYXNlIEVidFZvaWQ6CisgICAgICAgICAgICByZXR1cm4gInZvaWQiOwor
ICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVy
MkQiOworICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6CisgICAgICAgICAgICByZXR1cm4g
InNhbXBsZXJDVUJFIjsKKyAgICAgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzoKKyAg
ICAgICAgICAgIHJldHVybiAic2FtcGxlcjJEIjsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBVTlJFQUNIQUJMRSgpOworICAg
IHJldHVybiAiPHVua25vd24gdHlwZT4iOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OnRleHR1
cmVTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlLmdldEJhc2lj
VHlwZSgpKQorICAgIHsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAgICAgICByZXR1cm4g
IlRleHR1cmUyRCI7CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgorICAgICAgICByZXR1cm4g
IlRleHR1cmVDdWJlIjsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOgorICAgICAg
ICByZXR1cm4gIlRleHR1cmUyRCI7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiAiPHVua25vd24gdGV4dHVyZSB0
eXBlPiI7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6YXJyYXlTdHJpbmcoY29uc3QgVFR5cGUg
JnR5cGUpCit7CisgICAgaWYgKCF0eXBlLmlzQXJyYXkoKSkKKyAgICB7CisgICAgICAgIHJldHVy
biAiIjsKKyAgICB9CisKKyAgICByZXR1cm4gIlsiICsgc3RyKHR5cGUuZ2V0QXJyYXlTaXplKCkp
ICsgIl0iOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OmluaXRpYWxpemVyKGNvbnN0IFRUeXBl
ICZ0eXBlKQoreworICAgIFRTdHJpbmcgc3RyaW5nOworCisgICAgc2l6ZV90IHNpemUgPSB0eXBl
LmdldE9iamVjdFNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBjb21wb25lbnQgPSAwOyBjb21wb25l
bnQgPCBzaXplOyBjb21wb25lbnQrKykKKyAgICB7CisgICAgICAgIHN0cmluZyArPSAiMCI7CisK
KyAgICAgICAgaWYgKGNvbXBvbmVudCArIDEgPCBzaXplKQorICAgICAgICB7CisgICAgICAgICAg
ICBzdHJpbmcgKz0gIiwgIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAieyIgKyBz
dHJpbmcgKyAifSI7Cit9CisKK3ZvaWQgT3V0cHV0SExTTDo6YWRkQ29uc3RydWN0b3IoY29uc3Qg
VFR5cGUgJnR5cGUsIGNvbnN0IFRTdHJpbmcgJm5hbWUsIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAq
cGFyYW1ldGVycykKK3sKKyAgICBpZiAobmFtZSA9PSAiIikKKyAgICB7CisgICAgICAgIHJldHVy
bjsgICAvLyBOYW1lbGVzcyBzdHJ1Y3R1cmVzIGRvbid0IGhhdmUgY29uc3RydWN0b3JzCisgICAg
fQorCisgICAgaWYgKHR5cGUuZ2V0U3RydWN0KCkgJiYgbVN0cnVjdE5hbWVzLmZpbmQoZGVjb3Jh
dGUobmFtZSkpICE9IG1TdHJ1Y3ROYW1lcy5lbmQoKSkKKyAgICB7CisgICAgICAgIHJldHVybjsg
ICAvLyBBbHJlYWR5IGFkZGVkCisgICAgfQorCisgICAgVFR5cGUgY3RvclR5cGUgPSB0eXBlOwor
ICAgIGN0b3JUeXBlLmNsZWFyQXJyYXluZXNzKCk7CisgICAgY3RvclR5cGUuc2V0UHJlY2lzaW9u
KEVicEhpZ2gpOworICAgIGN0b3JUeXBlLnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOworCisg
ICAgVFN0cmluZyBjdG9yTmFtZSA9IHR5cGUuZ2V0U3RydWN0KCkgPyBkZWNvcmF0ZShuYW1lKSA6
IG5hbWU7CisKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFRUeXBlPiBQYXJhbWV0ZXJBcnJheTsK
KyAgICBQYXJhbWV0ZXJBcnJheSBjdG9yUGFyYW1ldGVyczsKKworICAgIGlmICh0eXBlLmdldFN0
cnVjdCgpKQorICAgIHsKKyAgICAgICAgbVN0cnVjdE5hbWVzLmluc2VydChkZWNvcmF0ZShuYW1l
KSk7CisKKyAgICAgICAgVFN0cmluZyBzdHJ1Y3R1cmU7CisgICAgICAgIHN0cnVjdHVyZSArPSAi
c3RydWN0ICIgKyBkZWNvcmF0ZShuYW1lKSArICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICJ7
XG4iOworCisgICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHR5cGUuZ2V0U3RydWN0
KCktPmZpZWxkcygpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZmll
bGRzLnNpemUoKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBURmllbGQgKmZp
ZWxkID0gZmllbGRzW2ldOworCisgICAgICAgICAgICBzdHJ1Y3R1cmUgKz0gIiAgICAiICsgdHlw
ZVN0cmluZygqZmllbGQtPnR5cGUoKSkgKyAiICIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLT5uYW1l
KCksIHR5cGUpICsgYXJyYXlTdHJpbmcoKmZpZWxkLT50eXBlKCkpICsgIjtcbiI7CisgICAgICAg
IH0KKworICAgICAgICBzdHJ1Y3R1cmUgKz0gIn07XG4iOworCisgICAgICAgIGlmIChzdGQ6OmZp
bmQobVN0cnVjdERlY2xhcmF0aW9ucy5iZWdpbigpLCBtU3RydWN0RGVjbGFyYXRpb25zLmVuZCgp
LCBzdHJ1Y3R1cmUpID09IG1TdHJ1Y3REZWNsYXJhdGlvbnMuZW5kKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1TdHJ1Y3REZWNsYXJhdGlvbnMucHVzaF9iYWNrKHN0cnVjdHVyZSk7CisgICAg
ICAgIH0KKworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGZpZWxkcy5zaXpl
KCk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY3RvclBhcmFtZXRlcnMucHVzaF9iYWNr
KCpmaWVsZHNbaV0tPnR5cGUoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAocGFy
YW1ldGVycykKKyAgICB7CisgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVy
YXRvciBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJzLT5iZWdpbigpOyBwYXJhbWV0ZXIgIT0gcGFyYW1l
dGVycy0+ZW5kKCk7IHBhcmFtZXRlcisrKQorICAgICAgICB7CisgICAgICAgICAgICBjdG9yUGFy
YW1ldGVycy5wdXNoX2JhY2soKCpwYXJhbWV0ZXIpLT5nZXRBc1R5cGVkKCktPmdldFR5cGUoKSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgVFN0cmlu
ZyBjb25zdHJ1Y3RvcjsKKworICAgIGlmIChjdG9yVHlwZS5nZXRTdHJ1Y3QoKSkKKyAgICB7Cisg
ICAgICAgIGNvbnN0cnVjdG9yICs9IGN0b3JOYW1lICsgIiAiICsgY3Rvck5hbWUgKyAiX2N0b3Io
IjsKKyAgICB9CisgICAgZWxzZSAgIC8vIEJ1aWx0LWluIHR5cGUKKyAgICB7CisgICAgICAgIGNv
bnN0cnVjdG9yICs9IHR5cGVTdHJpbmcoY3RvclR5cGUpICsgIiAiICsgY3Rvck5hbWUgKyAiKCI7
CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgcGFyYW1ldGVyID0gMDsgcGFyYW1ldGVy
IDwgY3RvclBhcmFtZXRlcnMuc2l6ZSgpOyBwYXJhbWV0ZXIrKykKKyAgICB7CisgICAgICAgIGNv
bnN0IFRUeXBlICZ0eXBlID0gY3RvclBhcmFtZXRlcnNbcGFyYW1ldGVyXTsKKworICAgICAgICBj
b25zdHJ1Y3RvciArPSB0eXBlU3RyaW5nKHR5cGUpICsgIiB4IiArIHN0cihwYXJhbWV0ZXIpICsg
YXJyYXlTdHJpbmcodHlwZSk7CisKKyAgICAgICAgaWYgKHBhcmFtZXRlciA8IGN0b3JQYXJhbWV0
ZXJzLnNpemUoKSAtIDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9ICIs
ICI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdHJ1Y3RvciArPSAiKVxuIgorICAgICAg
ICAgICAgICAgICAgICJ7XG4iOworCisgICAgaWYgKGN0b3JUeXBlLmdldFN0cnVjdCgpKQorICAg
IHsKKyAgICAgICAgY29uc3RydWN0b3IgKz0gIiAgICAiICsgY3Rvck5hbWUgKyAiIHN0cnVjdHVy
ZSA9IHsiOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjb25zdHJ1Y3RvciArPSAi
ICAgIHJldHVybiAiICsgdHlwZVN0cmluZyhjdG9yVHlwZSkgKyAiKCI7CisgICAgfQorCisgICAg
aWYgKGN0b3JUeXBlLmlzTWF0cml4KCkgJiYgY3RvclBhcmFtZXRlcnMuc2l6ZSgpID09IDEpCisg
ICAgeworICAgICAgICBpbnQgZGltID0gY3RvclR5cGUuZ2V0Tm9taW5hbFNpemUoKTsKKyAgICAg
ICAgY29uc3QgVFR5cGUgJnBhcmFtZXRlciA9IGN0b3JQYXJhbWV0ZXJzWzBdOworCisgICAgICAg
IGlmIChwYXJhbWV0ZXIuaXNTY2FsYXIoKSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChp
bnQgcm93ID0gMDsgcm93IDwgZGltOyByb3crKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBkaW07IGNvbCsrKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gVFN0cmluZygocm93ID09IGNv
bCkgPyAieDAiIDogIjAuMCIpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHJvdyA8IGRpbSAtIDEgfHwgY29sIDwgZGltIC0gMSkKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gIiwgIjsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBlbHNlIGlmIChwYXJhbWV0ZXIuaXNNYXRyaXgoKSkKKyAgICAgICAg
eworICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgZGltOyByb3crKykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBkaW07IGNv
bCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvdyA8IHBh
cmFtZXRlci5nZXROb21pbmFsU2l6ZSgpICYmIGNvbCA8IHBhcmFtZXRlci5nZXROb21pbmFsU2l6
ZSgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dHJ1Y3RvciArPSBUU3RyaW5nKCJ4MCIpICsgIlsiICsgc3RyKHJvdykgKyAiXSIgKyAiWyIgKyBz
dHIoY29sKSArICJdIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0cnVjdG9yICs9IFRTdHJpbmcoKHJvdyA9PSBjb2wpID8gIjEuMCIgOiAiMC4wIik7CisgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAocm93IDwgZGltIC0g
MSB8fCBjb2wgPCBkaW0gLSAxKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdHJ1Y3RvciArPSAiLCAiOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2Ug
VU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc2l6ZV90IHJl
bWFpbmluZ0NvbXBvbmVudHMgPSBjdG9yVHlwZS5nZXRPYmplY3RTaXplKCk7CisgICAgICAgIHNp
emVfdCBwYXJhbWV0ZXJJbmRleCA9IDA7CisKKyAgICAgICAgd2hpbGUgKHJlbWFpbmluZ0NvbXBv
bmVudHMgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVHlwZSAmcGFyYW1ldGVy
ID0gY3RvclBhcmFtZXRlcnNbcGFyYW1ldGVySW5kZXhdOworICAgICAgICAgICAgY29uc3Qgc2l6
ZV90IHBhcmFtZXRlclNpemUgPSBwYXJhbWV0ZXIuZ2V0T2JqZWN0U2l6ZSgpOworICAgICAgICAg
ICAgYm9vbCBtb3JlUGFyYW1ldGVycyA9IHBhcmFtZXRlckluZGV4ICsgMSA8IGN0b3JQYXJhbWV0
ZXJzLnNpemUoKTsKKworICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gIngiICsgc3RyKHBhcmFt
ZXRlckluZGV4KTsKKworICAgICAgICAgICAgaWYgKHBhcmFtZXRlci5pc1NjYWxhcigpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChwYXJhbWV0ZXJTaXplIDw9IHJlbWFp
bmluZ0NvbXBvbmVudHMpOworICAgICAgICAgICAgICAgIHJlbWFpbmluZ0NvbXBvbmVudHMgLT0g
cGFyYW1ldGVyU2l6ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHBhcmFt
ZXRlci5pc1ZlY3RvcigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChyZW1h
aW5pbmdDb21wb25lbnRzID09IHBhcmFtZXRlclNpemUgfHwgbW9yZVBhcmFtZXRlcnMpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQocGFyYW1ldGVyU2l6ZSA8
PSByZW1haW5pbmdDb21wb25lbnRzKTsKKyAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nQ29t
cG9uZW50cyAtPSBwYXJhbWV0ZXJTaXplOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIGlmIChyZW1haW5pbmdDb21wb25lbnRzIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihw
YXJhbWV0ZXIuZ2V0Tm9taW5hbFNpemUoKSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKHJlbWFpbmluZ0NvbXBvbmVudHMpCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IGNvbnN0cnVjdG9yICs9ICIueCI7
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogY29uc3RydWN0b3IgKz0g
Ii54eSI7ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBjb25zdHJ1Y3Rv
ciArPSAiLnh5eiI7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IGNvbnN0
cnVjdG9yICs9ICIueHl6dyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICByZW1haW5pbmdDb21wb25lbnRzID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSBpZiAocGFyYW1ldGVyLmlzTWF0cml4KCkgfHwgcGFyYW1ldGVyLmdldFN0cnVjdCgpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChyZW1haW5pbmdDb21wb25lbnRz
ID09IHBhcmFtZXRlclNpemUgfHwgbW9yZVBhcmFtZXRlcnMpOworICAgICAgICAgICAgICAgIEFT
U0VSVChwYXJhbWV0ZXJTaXplIDw9IHJlbWFpbmluZ0NvbXBvbmVudHMpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIHJlbWFpbmluZ0NvbXBvbmVudHMgLT0gcGFyYW1ldGVyU2l6
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAg
ICAgICAgICAgaWYgKG1vcmVQYXJhbWV0ZXJzKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHBhcmFtZXRlckluZGV4Kys7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChy
ZW1haW5pbmdDb21wb25lbnRzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0
cnVjdG9yICs9ICIsICI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoY3RvclR5cGUuZ2V0U3RydWN0KCkpCisgICAgeworICAgICAgICBjb25zdHJ1Y3RvciArPSAi
fTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gc3RydWN0dXJlO1xuIgor
ICAgICAgICAgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgY29uc3RydWN0b3IgKz0gIik7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4i
OworICAgIH0KKworICAgIG1Db25zdHJ1Y3RvcnMuaW5zZXJ0KGNvbnN0cnVjdG9yKTsKK30KKwor
Y29uc3QgQ29uc3RhbnRVbmlvbiAqT3V0cHV0SExTTDo6d3JpdGVDb25zdGFudFVuaW9uKGNvbnN0
IFRUeXBlICZ0eXBlLCBjb25zdCBDb25zdGFudFVuaW9uICpjb25zdFVuaW9uKQoreworICAgIFRJ
bmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OworCisgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkg
PT0gRWJ0U3RydWN0KQorICAgIHsKKyAgICAgICAgb3V0IDw8IHN0cnVjdExvb2t1cCh0eXBlLmdl
dFN0cnVjdCgpLT5uYW1lKCkpICsgIl9jdG9yKCI7CisgICAgICAgIAorICAgICAgICBjb25zdCBU
RmllbGRMaXN0ICZmaWVsZHMgPSB0eXBlLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKKworICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKKyAgICAgICAgewor
ICAgICAgICAgICAgY29uc3QgVFR5cGUgKmZpZWxkVHlwZSA9IGZpZWxkc1tpXS0+dHlwZSgpOwor
CisgICAgICAgICAgICBjb25zdFVuaW9uID0gd3JpdGVDb25zdGFudFVuaW9uKCpmaWVsZFR5cGUs
IGNvbnN0VW5pb24pOworCisgICAgICAgICAgICBpZiAoaSAhPSBmaWVsZHMuc2l6ZSgpIC0gMSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIG91dCA8PCAiKSI7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIHNpemVfdCBzaXplID0gdHlwZS5nZXRPYmplY3RTaXplKCk7CisgICAgICAg
IGJvb2wgd3JpdGVUeXBlID0gc2l6ZSA+IDE7CisgICAgICAgIAorICAgICAgICBpZiAod3JpdGVU
eXBlKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgdHlwZVN0cmluZyh0eXBlKSA8PCAi
KCI7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkr
KywgY29uc3RVbmlvbisrKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnN0VW5p
b24tPmdldFR5cGUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBFYnRGbG9h
dDogb3V0IDw8IHN0ZDo6bWluKEZMVF9NQVgsIHN0ZDo6bWF4KC1GTFRfTUFYLCBjb25zdFVuaW9u
LT5nZXRGQ29uc3QoKSkpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgb3V0
IDw8IGNvbnN0VW5pb24tPmdldElDb25zdCgpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBF
YnRCb29sOiAgb3V0IDw8IGNvbnN0VW5pb24tPmdldEJDb25zdCgpOyBicmVhazsKKyAgICAgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGkgIT0gc2l6ZSAtIDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0
IDw8ICIsICI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAod3JpdGVU
eXBlKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIikiOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIGNvbnN0VW5pb247Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6c2Nv
cGVTdHJpbmcodW5zaWduZWQgaW50IGRlcHRoTGltaXQpCit7CisgICAgVFN0cmluZyBzdHJpbmc7
CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1TY29wZUJyYWNrZXQuc2l6ZSgp
ICYmIGkgPCBkZXB0aExpbWl0OyBpKyspCisgICAgeworICAgICAgICBzdHJpbmcgKz0gIl8iICsg
c3RyKGkpOworICAgIH0KKworICAgIHJldHVybiBzdHJpbmc7Cit9CisKK1RTdHJpbmcgT3V0cHV0
SExTTDo6c2NvcGVkU3RydWN0KGNvbnN0IFRTdHJpbmcgJnR5cGVOYW1lKQoreworICAgIGlmICh0
eXBlTmFtZSA9PSAiIikKKyAgICB7CisgICAgICAgIHJldHVybiB0eXBlTmFtZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHlwZU5hbWUgKyBzY29wZVN0cmluZyhtU2NvcGVEZXB0aCk7Cit9CisKK1RT
dHJpbmcgT3V0cHV0SExTTDo6c3RydWN0TG9va3VwKGNvbnN0IFRTdHJpbmcgJnR5cGVOYW1lKQor
eworICAgIGZvciAoaW50IGRlcHRoID0gbVNjb3BlRGVwdGg7IGRlcHRoID49IDA7IGRlcHRoLS0p
CisgICAgeworICAgICAgICBUU3RyaW5nIHNjb3BlZE5hbWUgPSBkZWNvcmF0ZSh0eXBlTmFtZSAr
IHNjb3BlU3RyaW5nKGRlcHRoKSk7CisKKyAgICAgICAgZm9yIChTdHJ1Y3ROYW1lczo6aXRlcmF0
b3Igc3RydWN0TmFtZSA9IG1TdHJ1Y3ROYW1lcy5iZWdpbigpOyBzdHJ1Y3ROYW1lICE9IG1TdHJ1
Y3ROYW1lcy5lbmQoKTsgc3RydWN0TmFtZSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
KnN0cnVjdE5hbWUgPT0gc2NvcGVkTmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gc2NvcGVkTmFtZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIFVOUkVBQ0hBQkxFKCk7ICAgLy8gU2hvdWxkIGhhdmUgZm91bmQgYSBtYXRjaGluZyBjb25z
dHJ1Y3RvcgorCisgICAgcmV0dXJuIHR5cGVOYW1lOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6
OmRlY29yYXRlKGNvbnN0IFRTdHJpbmcgJnN0cmluZykKK3sKKyAgICBpZiAoc3RyaW5nLmNvbXBh
cmUoMCwgMywgImdsXyIpICE9IDAgJiYgc3RyaW5nLmNvbXBhcmUoMCwgMywgImR4XyIpICE9IDAp
CisgICAgeworICAgICAgICByZXR1cm4gIl8iICsgc3RyaW5nOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gc3RyaW5nOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlVW5pZm9ybShj
b25zdCBUU3RyaW5nICZzdHJpbmcsIGNvbnN0IFRUeXBlICZ0eXBlKQoreworICAgIGlmICh0eXBl
LmdldEJhc2ljVHlwZSgpID09IEVidFNhbXBsZXJFeHRlcm5hbE9FUykKKyAgICB7CisgICAgICAg
IHJldHVybiAiZXhfIiArIHN0cmluZzsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGRlY29yYXRl
KHN0cmluZyk7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6ZGVjb3JhdGVGaWVsZChjb25zdCBU
U3RyaW5nICZzdHJpbmcsIGNvbnN0IFRUeXBlICZzdHJ1Y3R1cmUpCit7CisgICAgaWYgKHN0cnVj
dHVyZS5nZXRTdHJ1Y3QoKS0+bmFtZSgpLmNvbXBhcmUoMCwgMywgImdsXyIpICE9IDApCisgICAg
eworICAgICAgICByZXR1cm4gZGVjb3JhdGUoc3RyaW5nKTsKKyAgICB9CisKKyAgICByZXR1cm4g
c3RyaW5nOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OnJlZ2lzdGVyU3RyaW5nKFRJbnRlcm1T
eW1ib2wgKm9wZXJhbmQpCit7CisgICAgQVNTRVJUKG9wZXJhbmQtPmdldFF1YWxpZmllcigpID09
IEV2cVVuaWZvcm0pOworCisgICAgaWYgKElzU2FtcGxlcihvcGVyYW5kLT5nZXRCYXNpY1R5cGUo
KSkpCisgICAgeworICAgICAgICByZXR1cm4gInMiICsgc3RyKHNhbXBsZXJSZWdpc3RlcihvcGVy
YW5kKSk7CisgICAgfQorCisgICAgcmV0dXJuICJjIiArIHN0cih1bmlmb3JtUmVnaXN0ZXIob3Bl
cmFuZCkpOworfQorCitpbnQgT3V0cHV0SExTTDo6c2FtcGxlclJlZ2lzdGVyKFRJbnRlcm1TeW1i
b2wgKnNhbXBsZXIpCit7CisgICAgY29uc3QgVFR5cGUgJnR5cGUgPSBzYW1wbGVyLT5nZXRUeXBl
KCk7CisgICAgQVNTRVJUKElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSk7CisKKyAgICBp
bnQgaW5kZXggPSBtU2FtcGxlclJlZ2lzdGVyOworICAgIG1TYW1wbGVyUmVnaXN0ZXIgKz0gc2Ft
cGxlci0+dG90YWxSZWdpc3RlckNvdW50KCk7CisKKyAgICBkZWNsYXJlVW5pZm9ybSh0eXBlLCBz
YW1wbGVyLT5nZXRTeW1ib2woKSwgaW5kZXgpOworCisgICAgcmV0dXJuIGluZGV4OworfQorCitp
bnQgT3V0cHV0SExTTDo6dW5pZm9ybVJlZ2lzdGVyKFRJbnRlcm1TeW1ib2wgKnVuaWZvcm0pCit7
CisgICAgY29uc3QgVFR5cGUgJnR5cGUgPSB1bmlmb3JtLT5nZXRUeXBlKCk7CisgICAgQVNTRVJU
KCFJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpOworCisgICAgaW50IGluZGV4ID0gbVVu
aWZvcm1SZWdpc3RlcjsKKyAgICBtVW5pZm9ybVJlZ2lzdGVyICs9IHVuaWZvcm0tPnRvdGFsUmVn
aXN0ZXJDb3VudCgpOworCisgICAgZGVjbGFyZVVuaWZvcm0odHlwZSwgdW5pZm9ybS0+Z2V0U3lt
Ym9sKCksIGluZGV4KTsKKworICAgIHJldHVybiBpbmRleDsKK30KKwordm9pZCBPdXRwdXRITFNM
OjpkZWNsYXJlVW5pZm9ybShjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSwg
aW50IGluZGV4KQoreworICAgIFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0
KCk7CisKKyAgICBpZiAoIXN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIG1BY3RpdmVVbmlmb3Jt
cy5wdXNoX2JhY2soVW5pZm9ybShnbFZhcmlhYmxlVHlwZSh0eXBlKSwgZ2xWYXJpYWJsZVByZWNp
c2lvbih0eXBlKSwgbmFtZS5jX3N0cigpLCB0eXBlLmdldEFycmF5U2l6ZSgpLCBpbmRleCkpOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjb25zdCBURmllbGRMaXN0ICZmaWVsZHMg
PSBzdHJ1Y3R1cmUtPmZpZWxkcygpOworCisgICAgICAgIGlmICh0eXBlLmlzQXJyYXkoKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgaW50IGVsZW1lbnRJbmRleCA9IGluZGV4OworCisgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGUuZ2V0QXJyYXlTaXplKCk7IGkrKykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGZpZWxkcy5z
aXplKCk7IGorKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRUeXBlICZmaWVsZFR5cGUgPSAqZmllbGRzW2pdLT50eXBlKCk7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRTdHJpbmcgdW5pZm9ybU5hbWUgPSBuYW1lICsgIlsiICsgc3RyKGkpICsgIl0u
IiArIGZpZWxkc1tqXS0+bmFtZSgpOworICAgICAgICAgICAgICAgICAgICBkZWNsYXJlVW5pZm9y
bShmaWVsZFR5cGUsIHVuaWZvcm1OYW1lLCBlbGVtZW50SW5kZXgpOworICAgICAgICAgICAgICAg
ICAgICBlbGVtZW50SW5kZXggKz0gZmllbGRUeXBlLnRvdGFsUmVnaXN0ZXJDb3VudCgpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGludCBmaWVsZEluZGV4ID0gaW5kZXg7CisKKyAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgaSsrKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZFR5cGUgPSAqZmllbGRzW2ld
LT50eXBlKCk7CisgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyB1bmlmb3JtTmFtZSA9IG5h
bWUgKyAiLiIgKyBmaWVsZHNbaV0tPm5hbWUoKTsKKyAgICAgICAgICAgICAgICBkZWNsYXJlVW5p
Zm9ybShmaWVsZFR5cGUsIHVuaWZvcm1OYW1lLCBmaWVsZEluZGV4KTsKKyAgICAgICAgICAgICAg
ICBmaWVsZEluZGV4ICs9IGZpZWxkVHlwZS50b3RhbFJlZ2lzdGVyQ291bnQoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworR0xlbnVtIE91dHB1dEhMU0w6OmdsVmFyaWFi
bGVUeXBlKGNvbnN0IFRUeXBlICZ0eXBlKQoreworICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgp
ID09IEVidEZsb2F0KQorICAgIHsKKyAgICAgICAgaWYgKHR5cGUuaXNTY2FsYXIoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIEdMX0ZMT0FUOworICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKHR5cGUuaXNWZWN0b3IoKSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKHR5
cGUuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAy
OiByZXR1cm4gR0xfRkxPQVRfVkVDMjsKKyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gR0xf
RkxPQVRfVkVDMzsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gR0xfRkxPQVRfVkVDNDsK
KyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBlbHNlIGlmICh0eXBlLmlzTWF0cml4KCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHN3aXRjaCh0eXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIEdMX0ZMT0FUX01BVDI7CisgICAgICAgICAgICAg
IGNhc2UgMzogcmV0dXJuIEdMX0ZMT0FUX01BVDM7CisgICAgICAgICAgICAgIGNhc2UgNDogcmV0
dXJuIEdMX0ZMT0FUX01BVDQ7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwor
ICAgIH0KKyAgICBlbHNlIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidEludCkKKyAgICB7
CisgICAgICAgIGlmICh0eXBlLmlzU2NhbGFyKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBHTF9JTlQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodHlwZS5pc1ZlY3Rvcigp
KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2godHlwZS5nZXROb21pbmFsU2l6ZSgpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBHTF9JTlRfVkVDMjsK
KyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gR0xfSU5UX1ZFQzM7CisgICAgICAgICAgICAg
IGNhc2UgNDogcmV0dXJuIEdMX0lOVF9WRUM0OworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRC
b29sKQorICAgIHsKKyAgICAgICAgaWYgKHR5cGUuaXNTY2FsYXIoKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIEdMX0JPT0w7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodHlw
ZS5pc1ZlY3RvcigpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2godHlwZS5nZXROb21p
bmFsU2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBH
TF9CT09MX1ZFQzI7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIEdMX0JPT0xfVkVDMzsK
KyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gR0xfQk9PTF9WRUM0OworICAgICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZS5nZXRCYXNp
Y1R5cGUoKSA9PSBFYnRTYW1wbGVyMkQpCisgICAgeworICAgICAgICByZXR1cm4gR0xfU0FNUExF
Ul8yRDsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTYW1w
bGVyQ3ViZSkKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9TQU1QTEVSX0NVQkU7CisgICAgfQor
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgIHJldHVybiBHTF9OT05FOworfQorCitHTGVu
dW0gT3V0cHV0SExTTDo6Z2xWYXJpYWJsZVByZWNpc2lvbihjb25zdCBUVHlwZSAmdHlwZSkKK3sK
KyAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRGbG9hdCkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAodHlwZS5nZXRQcmVjaXNpb24oKSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2Ug
RWJwSGlnaDogICByZXR1cm4gR0xfSElHSF9GTE9BVDsKKyAgICAgICAgICBjYXNlIEVicE1lZGl1
bTogcmV0dXJuIEdMX01FRElVTV9GTE9BVDsKKyAgICAgICAgICBjYXNlIEVicExvdzogICAgcmV0
dXJuIEdMX0xPV19GTE9BVDsKKyAgICAgICAgICBjYXNlIEVicFVuZGVmaW5lZDoKKyAgICAgICAg
ICAgIC8vIFNob3VsZCBiZSBkZWZpbmVkIGFzIHRoZSBkZWZhdWx0IHByZWNpc2lvbiBieSB0aGUg
cGFyc2VyCisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBlbHNlIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidEludCkKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAodHlwZS5nZXRQcmVjaXNpb24oKSkKKyAgICAgICAgeworICAgICAgICAg
IGNhc2UgRWJwSGlnaDogICByZXR1cm4gR0xfSElHSF9JTlQ7CisgICAgICAgICAgY2FzZSBFYnBN
ZWRpdW06IHJldHVybiBHTF9NRURJVU1fSU5UOworICAgICAgICAgIGNhc2UgRWJwTG93OiAgICBy
ZXR1cm4gR0xfTE9XX0lOVDsKKyAgICAgICAgICBjYXNlIEVicFVuZGVmaW5lZDoKKyAgICAgICAg
ICAgIC8vIFNob3VsZCBiZSBkZWZpbmVkIGFzIHRoZSBkZWZhdWx0IHByZWNpc2lvbiBieSB0aGUg
cGFyc2VyCisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIE90aGVyIHR5cGVzIChib29sZWFuLCBzYW1wbGVyKSBkb24ndCBoYXZlIGEg
cHJlY2lzaW9uCisgICAgcmV0dXJuIEdMX05PTkU7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEhM
U0wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4zYWZkOGU5YWRhYjAxMTdjNDk5ZmJjNzFlZTNmYzljYmQzNmIyZGZk
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvT3V0cHV0SExTTC5oCkBAIC0wLDAgKzEsMTY3IEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaWZuZGVmIENPTVBJTEVSX09VVFBVVEhMU0xfSF8KKyNkZWZpbmUgQ09NUElMRVJf
T1VUUFVUSExTTF9IXworCisjaW5jbHVkZSA8bGlzdD4KKyNpbmNsdWRlIDxzZXQ+CisjaW5jbHVk
ZSA8bWFwPgorCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKwor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1VuaWZvcm0uaCIKKworbmFtZXNwYWNlIHNoCit7CitjbGFzcyBVbmZvbGRTaG9y
dENpcmN1aXQ7CisKK2NsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgor
eworICBwdWJsaWM6CisgICAgT3V0cHV0SExTTChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBjb25z
dCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291cmNlcywgU2hTaGFkZXJPdXRwdXQgb3V0cHV0VHlw
ZSk7CisgICAgfk91dHB1dEhMU0woKTsKKworICAgIHZvaWQgb3V0cHV0KCk7CisKKyAgICBUSW5m
b1NpbmtCYXNlICZnZXRCb2R5U3RyZWFtKCk7CisgICAgY29uc3QgQWN0aXZlVW5pZm9ybXMgJmdl
dFVuaWZvcm1zKCk7CisKKyAgICBUU3RyaW5nIHR5cGVTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUp
OworICAgIFRTdHJpbmcgdGV4dHVyZVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7CisgICAgc3Rh
dGljIFRTdHJpbmcgcXVhbGlmaWVyU3RyaW5nKFRRdWFsaWZpZXIgcXVhbGlmaWVyKTsKKyAgICBz
dGF0aWMgVFN0cmluZyBhcnJheVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7CisgICAgc3RhdGlj
IFRTdHJpbmcgaW5pdGlhbGl6ZXIoY29uc3QgVFR5cGUgJnR5cGUpOworICAgIHN0YXRpYyBUU3Ry
aW5nIGRlY29yYXRlKGNvbnN0IFRTdHJpbmcgJnN0cmluZyk7ICAgICAgICAgICAgICAgICAgICAg
IC8vIFByZXBlbmRzIGFuIHVuZGVyc2NvcmUgdG8gYXZvaWQgbmFtaW5nIGNsYXNoZXMKKyAgICBz
dGF0aWMgVFN0cmluZyBkZWNvcmF0ZVVuaWZvcm0oY29uc3QgVFN0cmluZyAmc3RyaW5nLCBjb25z
dCBUVHlwZSAmdHlwZSk7CisgICAgc3RhdGljIFRTdHJpbmcgZGVjb3JhdGVGaWVsZChjb25zdCBU
U3RyaW5nICZzdHJpbmcsIGNvbnN0IFRUeXBlICZzdHJ1Y3R1cmUpOworCisgIHByb3RlY3RlZDoK
KyAgICB2b2lkIGhlYWRlcigpOworCisgICAgLy8gVmlzaXQgQVNUIG5vZGVzIGFuZCBvdXRwdXQg
dGhlaXIgY29kZSB0byB0aGUgYm9keSBzdHJlYW0KKyAgICB2b2lkIHZpc2l0U3ltYm9sKFRJbnRl
cm1TeW1ib2wqKTsKKyAgICB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRV
bmlvbiopOworICAgIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkq
KTsKKyAgICBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSopOworICAg
IGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKKyAg
ICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7Cisg
ICAgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKik7CisgICAgYm9vbCB2
aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCopOworCisgICAgdm9pZCB0cmF2
ZXJzZVN0YXRlbWVudHMoVEludGVybU5vZGUgKm5vZGUpOworICAgIGJvb2wgaXNTaW5nbGVTdGF0
ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpOworICAgIGJvb2wgaGFuZGxlRXhjZXNzaXZlTG9vcChU
SW50ZXJtTG9vcCAqbm9kZSk7CisgICAgdm9pZCBvdXRwdXRUcmlwbGV0KFZpc2l0IHZpc2l0LCBj
b25zdCBUU3RyaW5nICZwcmVTdHJpbmcsIGNvbnN0IFRTdHJpbmcgJmluU3RyaW5nLCBjb25zdCBU
U3RyaW5nICZwb3N0U3RyaW5nKTsKKyAgICB2b2lkIG91dHB1dExpbmVEaXJlY3RpdmUoaW50IGxp
bmUpOworICAgIFRTdHJpbmcgYXJndW1lbnRTdHJpbmcoY29uc3QgVEludGVybVN5bWJvbCAqc3lt
Ym9sKTsKKyAgICBpbnQgdmVjdG9yU2l6ZShjb25zdCBUVHlwZSAmdHlwZSkgY29uc3Q7CisKKyAg
ICB2b2lkIGFkZENvbnN0cnVjdG9yKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5nICZu
YW1lLCBjb25zdCBUSW50ZXJtU2VxdWVuY2UgKnBhcmFtZXRlcnMpOworICAgIGNvbnN0IENvbnN0
YW50VW5pb24gKndyaXRlQ29uc3RhbnRVbmlvbihjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgQ29u
c3RhbnRVbmlvbiAqY29uc3RVbmlvbik7CisKKyAgICBUU3RyaW5nIHNjb3BlU3RyaW5nKHVuc2ln
bmVkIGludCBkZXB0aExpbWl0KTsKKyAgICBUU3RyaW5nIHNjb3BlZFN0cnVjdChjb25zdCBUU3Ry
aW5nICZ0eXBlTmFtZSk7CisgICAgVFN0cmluZyBzdHJ1Y3RMb29rdXAoY29uc3QgVFN0cmluZyAm
dHlwZU5hbWUpOworCisgICAgVFBhcnNlQ29udGV4dCAmbUNvbnRleHQ7CisgICAgY29uc3QgU2hT
aGFkZXJPdXRwdXQgbU91dHB1dFR5cGU7CisgICAgVW5mb2xkU2hvcnRDaXJjdWl0ICptVW5mb2xk
U2hvcnRDaXJjdWl0OworICAgIGJvb2wgbUluc2lkZUZ1bmN0aW9uOworCisgICAgLy8gT3V0cHV0
IHN0cmVhbXMKKyAgICBUSW5mb1NpbmtCYXNlIG1IZWFkZXI7CisgICAgVEluZm9TaW5rQmFzZSBt
Qm9keTsKKyAgICBUSW5mb1NpbmtCYXNlIG1Gb290ZXI7CisKKyAgICB0eXBlZGVmIHN0ZDo6bWFw
PFRTdHJpbmcsIFRJbnRlcm1TeW1ib2wqPiBSZWZlcmVuY2VkU3ltYm9sczsKKyAgICBSZWZlcmVu
Y2VkU3ltYm9scyBtUmVmZXJlbmNlZFVuaWZvcm1zOworICAgIFJlZmVyZW5jZWRTeW1ib2xzIG1S
ZWZlcmVuY2VkQXR0cmlidXRlczsKKyAgICBSZWZlcmVuY2VkU3ltYm9scyBtUmVmZXJlbmNlZFZh
cnlpbmdzOworCisgICAgLy8gUGFyYW1ldGVycyBkZXRlcm1pbmluZyB3aGF0IGdvZXMgaW4gdGhl
IGhlYWRlciBvdXRwdXQKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJEOworICAgIGJvb2wgbVVzZXNU
ZXh0dXJlMkRfYmlhczsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJETG9kOworICAgIGJvb2wgbVVz
ZXNUZXh0dXJlMkRQcm9qOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXM7CisgICAg
Ym9vbCBtVXNlc1RleHR1cmUyRFByb2pMb2Q7CisgICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlOwor
ICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZV9iaWFzOworICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3Vi
ZUxvZDsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJETG9kMDsKKyAgICBib29sIG1Vc2VzVGV4dHVy
ZTJETG9kMF9iaWFzOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMDsKKyAgICBib29s
IG1Vc2VzVGV4dHVyZTJEUHJvakxvZDBfYmlhczsKKyAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmVM
b2QwOworICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZUxvZDBfYmlhczsKKyAgICBib29sIG1Vc2Vz
RnJhZ0NvbG9yOworICAgIGJvb2wgbVVzZXNGcmFnRGF0YTsKKyAgICBib29sIG1Vc2VzRGVwdGhS
YW5nZTsKKyAgICBib29sIG1Vc2VzRnJhZ0Nvb3JkOworICAgIGJvb2wgbVVzZXNQb2ludENvb3Jk
OworICAgIGJvb2wgbVVzZXNGcm9udEZhY2luZzsKKyAgICBib29sIG1Vc2VzUG9pbnRTaXplOwor
ICAgIGJvb2wgbVVzZXNGcmFnRGVwdGg7CisgICAgYm9vbCBtVXNlc1hvcjsKKyAgICBib29sIG1V
c2VzTW9kMTsKKyAgICBib29sIG1Vc2VzTW9kMnY7CisgICAgYm9vbCBtVXNlc01vZDJmOworICAg
IGJvb2wgbVVzZXNNb2QzdjsKKyAgICBib29sIG1Vc2VzTW9kM2Y7CisgICAgYm9vbCBtVXNlc01v
ZDR2OworICAgIGJvb2wgbVVzZXNNb2Q0ZjsKKyAgICBib29sIG1Vc2VzRmFjZWZvcndhcmQxOwor
ICAgIGJvb2wgbVVzZXNGYWNlZm9yd2FyZDI7CisgICAgYm9vbCBtVXNlc0ZhY2Vmb3J3YXJkMzsK
KyAgICBib29sIG1Vc2VzRmFjZWZvcndhcmQ0OworICAgIGJvb2wgbVVzZXNBdGFuMl8xOworICAg
IGJvb2wgbVVzZXNBdGFuMl8yOworICAgIGJvb2wgbVVzZXNBdGFuMl8zOworICAgIGJvb2wgbVVz
ZXNBdGFuMl80OworICAgIGJvb2wgbVVzZXNEaXNjYXJkUmV3cml0aW5nOworCisgICAgaW50IG1O
dW1SZW5kZXJUYXJnZXRzOworCisgICAgdHlwZWRlZiBzdGQ6OnNldDxUU3RyaW5nPiBDb25zdHJ1
Y3RvcnM7CisgICAgQ29uc3RydWN0b3JzIG1Db25zdHJ1Y3RvcnM7CisKKyAgICB0eXBlZGVmIHN0
ZDo6c2V0PFRTdHJpbmc+IFN0cnVjdE5hbWVzOworICAgIFN0cnVjdE5hbWVzIG1TdHJ1Y3ROYW1l
czsKKworICAgIHR5cGVkZWYgc3RkOjpsaXN0PFRTdHJpbmc+IFN0cnVjdERlY2xhcmF0aW9uczsK
KyAgICBTdHJ1Y3REZWNsYXJhdGlvbnMgbVN0cnVjdERlY2xhcmF0aW9uczsKKworICAgIHR5cGVk
ZWYgc3RkOjp2ZWN0b3I8aW50PiBTY29wZUJyYWNrZXQ7CisgICAgU2NvcGVCcmFja2V0IG1TY29w
ZUJyYWNrZXQ7CisgICAgdW5zaWduZWQgaW50IG1TY29wZURlcHRoOworCisgICAgaW50IG1Vbmlx
dWVJbmRleDsgICAvLyBGb3IgY3JlYXRpbmcgdW5pcXVlIG5hbWVzCisKKyAgICBib29sIG1Db250
YWluc0xvb3BEaXNjb250aW51aXR5OworICAgIGJvb2wgbU91dHB1dExvZDBGdW5jdGlvbjsKKyAg
ICBib29sIG1JbnNpZGVEaXNjb250aW51b3VzTG9vcDsKKworICAgIFRJbnRlcm1TeW1ib2wgKm1F
eGNlc3NpdmVMb29wSW5kZXg7CisKKyAgICBpbnQgbVVuaWZvcm1SZWdpc3RlcjsKKyAgICBpbnQg
bVNhbXBsZXJSZWdpc3RlcjsKKworICAgIFRTdHJpbmcgcmVnaXN0ZXJTdHJpbmcoVEludGVybVN5
bWJvbCAqb3BlcmFuZCk7CisgICAgaW50IHNhbXBsZXJSZWdpc3RlcihUSW50ZXJtU3ltYm9sICpz
YW1wbGVyKTsKKyAgICBpbnQgdW5pZm9ybVJlZ2lzdGVyKFRJbnRlcm1TeW1ib2wgKnVuaWZvcm0p
OworICAgIHZvaWQgZGVjbGFyZVVuaWZvcm0oY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IFRTdHJp
bmcgJm5hbWUsIGludCBpbmRleCk7CisgICAgc3RhdGljIEdMZW51bSBnbFZhcmlhYmxlVHlwZShj
b25zdCBUVHlwZSAmdHlwZSk7CisgICAgc3RhdGljIEdMZW51bSBnbFZhcmlhYmxlUHJlY2lzaW9u
KGNvbnN0IFRUeXBlICZ0eXBlKTsKKworICAgIEFjdGl2ZVVuaWZvcm1zIG1BY3RpdmVVbmlmb3Jt
czsKK307Cit9CisKKyNlbmRpZiAgIC8vIENPTVBJTEVSX09VVFBVVEhMU0xfSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1BhcnNl
Q29udGV4dC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9QYXJzZUNvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFhMWUwZDE0MGM1YTYxZWI4ZDZkZTIx
ZTE5NWY4NjM3MDBhNGI4ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuY3BwCkBAIC0wLDAgKzEs
MTYwMiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvUGFyc2VDb250ZXh0LmgiCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRp
by5oPgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL1NvdXJjZUxvY2F0aW9uLmgiCisKKy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCisvLworLy8gU3ViLSB2ZWN0b3IgYW5kIG1hdHJpeCBmaWVsZHMKKy8vCisvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KKworLy8KKy8vIExvb2sgYXQgYSAnLicgZmllbGQgc2VsZWN0b3Igc3RyaW5nIGFuZCBj
aGFuZ2UgaXQgaW50byBvZmZzZXRzCisvLyBmb3IgYSB2ZWN0b3IuCisvLworYm9vbCBUUGFyc2VD
b250ZXh0OjpwYXJzZVZlY3RvckZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5nLCBpbnQg
dmVjU2l6ZSwgVFZlY3RvckZpZWxkcyYgZmllbGRzLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQor
eworICAgIGZpZWxkcy5udW0gPSAoaW50KSBjb21wU3RyaW5nLnNpemUoKTsKKyAgICBpZiAoZmll
bGRzLm51bSA+IDQpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgdmVjdG9yIGZpZWxk
IHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBlbnVtIHsKKyAgICAgICAgZXh5encsCisgICAgICAgIGVyZ2JhLAorICAg
ICAgICBlc3RwcQorICAgIH0gZmllbGRTZXRbNF07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IGZpZWxkcy5udW07ICsraSkgeworICAgICAgICBzd2l0Y2ggKGNvbXBTdHJpbmdbaV0pICB7Cisg
ICAgICAgIGNhc2UgJ3gnOiAKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMDsKKyAg
ICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXh5enc7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSAncic6IAorICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAwOworICAgICAg
ICAgICAgZmllbGRTZXRbaV0gPSBlcmdiYTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlICdzJzoKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMDsKKyAgICAgICAgICAg
IGZpZWxkU2V0W2ldID0gZXN0cHE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAn
eSc6IAorICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAxOworICAgICAgICAgICAgZmll
bGRTZXRbaV0gPSBleHl6dzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdnJzog
CisgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDE7CisgICAgICAgICAgICBmaWVsZFNl
dFtpXSA9IGVyZ2JhOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3QnOgorICAg
ICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAxOworICAgICAgICAgICAgZmllbGRTZXRbaV0g
PSBlc3RwcTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICd6JzogCisgICAgICAg
ICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDI7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGV4
eXp3OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2InOiAKKyAgICAgICAgICAg
IGZpZWxkcy5vZmZzZXRzW2ldID0gMjsKKyAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXJnYmE7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAncCc6CisgICAgICAgICAgICBmaWVs
ZHMub2Zmc2V0c1tpXSA9IDI7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGVzdHBxOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBjYXNlICd3JzogCisgICAgICAgICAg
ICBmaWVsZHMub2Zmc2V0c1tpXSA9IDM7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGV4eXp3
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2EnOiAKKyAgICAgICAgICAgIGZp
ZWxkcy5vZmZzZXRzW2ldID0gMzsKKyAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXJnYmE7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAncSc6CisgICAgICAgICAgICBmaWVsZHMu
b2Zmc2V0c1tpXSA9IDM7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGVzdHBxOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBlcnJvcihsaW5lLCAi
aWxsZWdhbCB2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgKytpKSB7CisgICAgICAgIGlmIChmaWVsZHMub2Zmc2V0
c1tpXSA+PSB2ZWNTaXplKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAidmVjdG9yIGZpZWxk
IHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCAgY29tcFN0cmluZy5jX3N0cigpKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpID4gMCkgeworICAg
ICAgICAgICAgaWYgKGZpZWxkU2V0W2ldICE9IGZpZWxkU2V0W2ktMV0pIHsKKyAgICAgICAgICAg
ICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCAtIHZlY3RvciBjb21wb25lbnQgZmllbGRzIG5vdCBm
cm9tIHRoZSBzYW1lIHNldCIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKKworLy8KKy8vIExvb2sgYXQgYSAnLicgZmllbGQgc2VsZWN0b3Igc3Ry
aW5nIGFuZCBjaGFuZ2UgaXQgaW50byBvZmZzZXRzCisvLyBmb3IgYSBtYXRyaXguCisvLworYm9v
bCBUUGFyc2VDb250ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3Ry
aW5nLCBpbnQgbWF0U2l6ZSwgVE1hdHJpeEZpZWxkcyYgZmllbGRzLCBjb25zdCBUU291cmNlTG9j
JiBsaW5lKQoreworICAgIGZpZWxkcy53aG9sZVJvdyA9IGZhbHNlOworICAgIGZpZWxkcy53aG9s
ZUNvbCA9IGZhbHNlOworICAgIGZpZWxkcy5yb3cgPSAtMTsKKyAgICBmaWVsZHMuY29sID0gLTE7
CisKKyAgICBpZiAoY29tcFN0cmluZy5zaXplKCkgIT0gMikgeworICAgICAgICBlcnJvcihsaW5l
LCAiaWxsZWdhbCBsZW5ndGggb2YgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcu
Y19zdHIoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoY29tcFN0
cmluZ1swXSA9PSAnXycpIHsKKyAgICAgICAgaWYgKGNvbXBTdHJpbmdbMV0gPCAnMCcgfHwgY29t
cFN0cmluZ1sxXSA+ICczJykgeworICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0
cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZmllbGRzLndob2xlQ29sID0gdHJ1ZTsK
KyAgICAgICAgZmllbGRzLmNvbCA9IGNvbXBTdHJpbmdbMV0gLSAnMCc7CisgICAgfSBlbHNlIGlm
IChjb21wU3RyaW5nWzFdID09ICdfJykgeworICAgICAgICBpZiAoY29tcFN0cmluZ1swXSA8ICcw
JyB8fCBjb21wU3RyaW5nWzBdID4gJzMnKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxs
ZWdhbCBtYXRyaXggZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBmaWVsZHMud2hvbGVSb3cg
PSB0cnVlOworICAgICAgICBmaWVsZHMucm93ID0gY29tcFN0cmluZ1swXSAtICcwJzsKKyAgICB9
IGVsc2UgeworICAgICAgICBpZiAoY29tcFN0cmluZ1swXSA8ICcwJyB8fCBjb21wU3RyaW5nWzBd
ID4gJzMnIHx8CisgICAgICAgICAgICBjb21wU3RyaW5nWzFdIDwgJzAnIHx8IGNvbXBTdHJpbmdb
MV0gPiAnMycpIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVs
ZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCkpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIGZpZWxkcy5yb3cgPSBjb21wU3RyaW5nWzBdIC0gJzAn
OworICAgICAgICBmaWVsZHMuY29sID0gY29tcFN0cmluZ1sxXSAtICcwJzsKKyAgICB9CisKKyAg
ICBpZiAoZmllbGRzLnJvdyA+PSBtYXRTaXplIHx8IGZpZWxkcy5jb2wgPj0gbWF0U2l6ZSkgewor
ICAgICAgICBlcnJvcihsaW5lLCAibWF0cml4IGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2Ui
LCBjb21wU3RyaW5nLmNfc3RyKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gRXJyb3JzCisvLwor
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCisKKy8vCisvLyBUcmFjayB3aGV0aGVyIGVycm9ycyBoYXZlIG9jY3Vy
cmVkLgorLy8KK3ZvaWQgVFBhcnNlQ29udGV4dDo6cmVjb3ZlcigpCit7Cit9CisKKy8vCisvLyBV
c2VkIGJ5IGZsZXgvYmlzb24gdG8gb3V0cHV0IGFsbCBzeW50YXggYW5kIHBhcnNpbmcgZXJyb3Jz
LgorLy8KK3ZvaWQgVFBhcnNlQ29udGV4dDo6ZXJyb3IoY29uc3QgVFNvdXJjZUxvYyYgbG9jLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IGNoYXIq
IHRva2VuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXh0cmFJbmZv
KQoreworICAgIHBwOjpTb3VyY2VMb2NhdGlvbiBzcmNMb2M7CisgICAgc3JjTG9jLmZpbGUgPSBs
b2MuZmlyc3RfZmlsZTsKKyAgICBzcmNMb2MubGluZSA9IGxvYy5maXJzdF9saW5lOworICAgIGRp
YWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OlBQX0VSUk9SLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBzcmNMb2MsIHJlYXNvbiwgdG9rZW4sIGV4dHJhSW5mbyk7CisKK30K
Kwordm9pZCBUUGFyc2VDb250ZXh0Ojp3YXJuaW5nKGNvbnN0IFRTb3VyY2VMb2MmIGxvYywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IGNoYXIq
IHRva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5m
bykgeworICAgIHBwOjpTb3VyY2VMb2NhdGlvbiBzcmNMb2M7CisgICAgc3JjTG9jLmZpbGUgPSBs
b2MuZmlyc3RfZmlsZTsKKyAgICBzcmNMb2MubGluZSA9IGxvYy5maXJzdF9saW5lOworICAgIGRp
YWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OlBQX1dBUk5JTkcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNyY0xvYywgcmVhc29uLCB0b2tlbiwgZXh0cmFJbmZvKTsKK30K
Kwordm9pZCBUUGFyc2VDb250ZXh0Ojp0cmFjZShjb25zdCBjaGFyKiBzdHIpCit7CisgICAgZGlh
Z25vc3RpY3Mud3JpdGVEZWJ1ZyhzdHIpOworfQorCisvLworLy8gU2FtZSBlcnJvciBtZXNzYWdl
IGZvciBhbGwgcGxhY2VzIGFzc2lnbm1lbnRzIGRvbid0IHdvcmsuCisvLwordm9pZCBUUGFyc2VD
b250ZXh0Ojphc3NpZ25FcnJvcihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBjaGFyKiBv
cCwgVFN0cmluZyBsZWZ0LCBUU3RyaW5nIHJpZ2h0KQoreworICAgIHN0ZDo6c3RyaW5nc3RyZWFt
IGV4dHJhSW5mb1N0cmVhbTsKKyAgICBleHRyYUluZm9TdHJlYW0gPDwgImNhbm5vdCBjb252ZXJ0
IGZyb20gJyIgPDwgcmlnaHQgPDwgIicgdG8gJyIgPDwgbGVmdCA8PCAiJyI7CisgICAgc3RkOjpz
dHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgIGVycm9yKGxpbmUs
ICIiLCBvcCwgZXh0cmFJbmZvLmNfc3RyKCkpOworfQorCisvLworLy8gU2FtZSBlcnJvciBtZXNz
YWdlIGZvciBhbGwgcGxhY2VzIHVuYXJ5IG9wZXJhdGlvbnMgZG9uJ3Qgd29yay4KKy8vCit2b2lk
IFRQYXJzZUNvbnRleHQ6OnVuYXJ5T3BFcnJvcihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25z
dCBjaGFyKiBvcCwgVFN0cmluZyBvcGVyYW5kKQoreworICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4
dHJhSW5mb1N0cmVhbTsKKyAgICBleHRyYUluZm9TdHJlYW0gPDwgIm5vIG9wZXJhdGlvbiAnIiA8
PCBvcCA8PCAiJyBleGlzdHMgdGhhdCB0YWtlcyBhbiBvcGVyYW5kIG9mIHR5cGUgIiA8PCBvcGVy
YW5kIAorICAgICAgICAgICAgICAgICAgICA8PCAiIChvciB0aGVyZSBpcyBubyBhY2NlcHRhYmxl
IGNvbnZlcnNpb24pIjsKKyAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJl
YW0uc3RyKCk7CisgICAgZXJyb3IobGluZSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCBvcCwgZXh0
cmFJbmZvLmNfc3RyKCkpOworfQorCisvLworLy8gU2FtZSBlcnJvciBtZXNzYWdlIGZvciBhbGwg
YmluYXJ5IG9wZXJhdGlvbnMgZG9uJ3Qgd29yay4KKy8vCit2b2lkIFRQYXJzZUNvbnRleHQ6OmJp
bmFyeU9wRXJyb3IoY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJp
bmcgbGVmdCwgVFN0cmluZyByaWdodCkKK3sKKyAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUlu
Zm9TdHJlYW07CisgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJubyBvcGVyYXRpb24gJyIgPDwgb3Ag
PDwgIicgZXhpc3RzIHRoYXQgdGFrZXMgYSBsZWZ0LWhhbmQgb3BlcmFuZCBvZiB0eXBlICciIDw8
IGxlZnQgCisgICAgICAgICAgICAgICAgICAgIDw8ICInIGFuZCBhIHJpZ2h0IG9wZXJhbmQgb2Yg
dHlwZSAnIiA8PCByaWdodCA8PCAiJyAob3IgdGhlcmUgaXMgbm8gYWNjZXB0YWJsZSBjb252ZXJz
aW9uKSI7CisgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigp
OworICAgIGVycm9yKGxpbmUsICIgd3Jvbmcgb3BlcmFuZCB0eXBlcyAiLCBvcCwgZXh0cmFJbmZv
LmNfc3RyKCkpOyAKK30KKworYm9vbCBUUGFyc2VDb250ZXh0OjpwcmVjaXNpb25FcnJvckNoZWNr
KGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRQcmVjaXNpb24gcHJlY2lzaW9uLCBUQmFzaWNUeXBl
IHR5cGUpeworICAgIGlmICghY2hlY2tzUHJlY2lzaW9uRXJyb3JzKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgc3dpdGNoKCB0eXBlICl7CisgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAg
aWYoIHByZWNpc2lvbiA9PSBFYnBVbmRlZmluZWQgKXsKKyAgICAgICAgICAgIGVycm9yKCBsaW5l
LCAiTm8gcHJlY2lzaW9uIHNwZWNpZmllZCBmb3IgKGZsb2F0KSIsICIiICk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEVidElu
dDoKKyAgICAgICAgaWYoIHByZWNpc2lvbiA9PSBFYnBVbmRlZmluZWQgKXsKKyAgICAgICAgICAg
IGVycm9yKCBsaW5lLCAiTm8gcHJlY2lzaW9uIHNwZWNpZmllZCAoaW50KSIsICIiICk7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30K
KworLy8KKy8vIEJvdGggdGVzdCBhbmQgaWYgbmVjZXNzYXJ5LCBzcGl0IG91dCBhbiBlcnJvciwg
dG8gc2VlIGlmIHRoZSBub2RlIGlzIHJlYWxseQorLy8gYW4gbC12YWx1ZSB0aGF0IGNhbiBiZSBv
cGVyYXRlZCBvbiB0aGlzIHdheS4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHdhcyBhbiBl
cnJvci4KKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OmxWYWx1ZUVycm9yQ2hlY2soY29uc3QgVFNv
dXJjZUxvYyYgbGluZSwgY29uc3QgY2hhciogb3AsIFRJbnRlcm1UeXBlZCogbm9kZSkKK3sKKyAg
ICBUSW50ZXJtU3ltYm9sKiBzeW1Ob2RlID0gbm9kZS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAg
VEludGVybUJpbmFyeSogYmluYXJ5Tm9kZSA9IG5vZGUtPmdldEFzQmluYXJ5Tm9kZSgpOworCisg
ICAgaWYgKGJpbmFyeU5vZGUpIHsKKyAgICAgICAgYm9vbCBlcnJvclJldHVybjsKKworICAgICAg
ICBzd2l0Y2goYmluYXJ5Tm9kZS0+Z2V0T3AoKSkgeworICAgICAgICBjYXNlIEVPcEluZGV4RGly
ZWN0OgorICAgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6CisgICAgICAgIGNhc2UgRU9wSW5k
ZXhEaXJlY3RTdHJ1Y3Q6CisgICAgICAgICAgICByZXR1cm4gbFZhbHVlRXJyb3JDaGVjayhsaW5l
LCBvcCwgYmluYXJ5Tm9kZS0+Z2V0TGVmdCgpKTsKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JTd2l6
emxlOgorICAgICAgICAgICAgZXJyb3JSZXR1cm4gPSBsVmFsdWVFcnJvckNoZWNrKGxpbmUsIG9w
LCBiaW5hcnlOb2RlLT5nZXRMZWZ0KCkpOworICAgICAgICAgICAgaWYgKCFlcnJvclJldHVybikg
eworICAgICAgICAgICAgICAgIGludCBvZmZzZXRbNF0gPSB7MCwwLDAsMH07CisKKyAgICAgICAg
ICAgICAgICBUSW50ZXJtVHlwZWQqIHJpZ2h0Tm9kZSA9IGJpbmFyeU5vZGUtPmdldFJpZ2h0KCk7
CisgICAgICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSAqYWdnck5vZGUgPSByaWdodE5vZGUt
PmdldEFzQWdncmVnYXRlKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9y
IChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHAgPSBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKS5i
ZWdpbigpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cCAhPSBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKS5lbmQoKTsgcCsrKSB7CisgICAgICAgICAgICAg
ICAgICAgIGludCB2YWx1ZSA9ICgqcCktPmdldEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9u
KCktPmdldElDb25zdCgwKTsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0W3ZhbHVlXSsrOyAg
ICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXRbdmFsdWVdID4gMSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIG9mIHN3aXp6bGUgY2Fubm90
IGhhdmUgZHVwbGljYXRlIGNvbXBvbmVudHMiLCBvcCk7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSAKKworICAgICAgICAgICAgcmV0dXJuIGVycm9yUmV0dXJuOworICAg
ICAgICBkZWZhdWx0OiAKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVy
cm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wKTsKKworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKworICAgIGNvbnN0IGNoYXIqIHN5bWJvbCA9IDA7CisgICAgaWYgKHN5bU5v
ZGUgIT0gMCkKKyAgICAgICAgc3ltYm9sID0gc3ltTm9kZS0+Z2V0U3ltYm9sKCkuY19zdHIoKTsK
KworICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2UgPSAwOworICAgIHN3aXRjaCAobm9kZS0+Z2V0UXVh
bGlmaWVyKCkpIHsKKyAgICBjYXNlIEV2cUNvbnN0OiAgICAgICAgICBtZXNzYWdlID0gImNhbid0
IG1vZGlmeSBhIGNvbnN0IjsgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxQ29uc3RSZWFkT25s
eTogIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgY29uc3QiOyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBFdnFBdHRyaWJ1dGU6ICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYW4gYXR0cmli
dXRlIjsgICBicmVhazsKKyAgICBjYXNlIEV2cVVuaWZvcm06ICAgICAgICBtZXNzYWdlID0gImNh
bid0IG1vZGlmeSBhIHVuaWZvcm0iOyAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxVmFyeWluZ0lu
OiAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgdmFyeWluZyI7ICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBFdnFGcmFnQ29vcmQ6ICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgZ2xfRnJh
Z0Nvb3JkIjsgICBicmVhazsKKyAgICBjYXNlIEV2cUZyb250RmFjaW5nOiAgICBtZXNzYWdlID0g
ImNhbid0IG1vZGlmeSBnbF9Gcm9udEZhY2luZyI7IGJyZWFrOworICAgIGNhc2UgRXZxUG9pbnRD
b29yZDogICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGdsX1BvaW50Q29vcmQiOyAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKworICAgICAgICAvLworICAgICAgICAvLyBUeXBlIHRoYXQgY2FuJ3Qg
YmUgd3JpdHRlbiB0bz8KKyAgICAgICAgLy8KKyAgICAgICAgc3dpdGNoIChub2RlLT5nZXRCYXNp
Y1R5cGUoKSkgeworICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAgICAgICAgY2FzZSBFYnRT
YW1wbGVyQ3ViZToKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgc2FtcGxl
ciI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFYnRWb2lkOgorICAgICAgICAg
ICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgdm9pZCI7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDogCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmIChtZXNzYWdlID09IDAgJiYgYmluYXJ5Tm9kZSA9PSAwICYmIHN5bU5vZGUgPT0gMCkg
eworICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCk7CisKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisKKyAgICAvLworICAgIC8vIEV2ZXJ5dGhpbmcgZWxz
ZSBpcyBva2F5LCBubyBlcnJvci4KKyAgICAvLworICAgIGlmIChtZXNzYWdlID09IDApCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vCisgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHdlIGhh
dmUgYW4gZXJyb3IgYW5kIGEgbWVzc2FnZS4KKyAgICAvLworICAgIGlmIChzeW1Ob2RlKSB7Cisg
ICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgZXh0cmFJ
bmZvU3RyZWFtIDw8ICJcIiIgPDwgc3ltYm9sIDw8ICJcIiAoIiA8PCBtZXNzYWdlIDw8ICIpIjsK
KyAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOwor
ICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCwgZXh0cmFJbmZvLmNf
c3RyKCkpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0
cmFJbmZvU3RyZWFtOworICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgIigiIDw8IG1lc3NhZ2Ug
PDwgIikiOworICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0u
c3RyKCk7CisgICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wLCBleHRy
YUluZm8uY19zdHIoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vCisvLyBC
b3RoIHRlc3QsIGFuZCBpZiBuZWNlc3Nhcnkgc3BpdCBvdXQgYW4gZXJyb3IsIHRvIHNlZSBpZiB0
aGUgbm9kZSBpcyByZWFsbHkKKy8vIGEgY29uc3RhbnQuCisvLworLy8gUmV0dXJucyB0cnVlIGlm
IHRoZSB3YXMgYW4gZXJyb3IuCisvLworYm9vbCBUUGFyc2VDb250ZXh0Ojpjb25zdEVycm9yQ2hl
Y2soVEludGVybVR5cGVkKiBub2RlKQoreworICAgIGlmIChub2RlLT5nZXRRdWFsaWZpZXIoKSA9
PSBFdnFDb25zdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZXJyb3Iobm9kZS0+Z2V0
TGluZSgpLCAiY29uc3RhbnQgZXhwcmVzc2lvbiByZXF1aXJlZCIsICIiKTsKKworICAgIHJldHVy
biB0cnVlOworfQorCisvLworLy8gQm90aCB0ZXN0LCBhbmQgaWYgbmVjZXNzYXJ5IHNwaXQgb3V0
IGFuIGVycm9yLCB0byBzZWUgaWYgdGhlIG5vZGUgaXMgcmVhbGx5CisvLyBhbiBpbnRlZ2VyLgor
Ly8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgd2FzIGFuIGVycm9yLgorLy8KK2Jvb2wgVFBhcnNl
Q29udGV4dDo6aW50ZWdlckVycm9yQ2hlY2soVEludGVybVR5cGVkKiBub2RlLCBjb25zdCBjaGFy
KiB0b2tlbikKK3sKKyAgICBpZiAobm9kZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIG5v
ZGUtPmdldE5vbWluYWxTaXplKCkgPT0gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiaW50ZWdlciBleHByZXNzaW9uIHJlcXVpcmVkIiwgdG9r
ZW4pOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vCisvLyBCb3RoIHRlc3QsIGFuZCBpZiBu
ZWNlc3Nhcnkgc3BpdCBvdXQgYW4gZXJyb3IsIHRvIHNlZSBpZiB3ZSBhcmUgY3VycmVudGx5Cisv
LyBnbG9iYWxseSBzY29wZWQuCisvLworLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB3YXMgYW4gZXJy
b3IuCisvLworYm9vbCBUUGFyc2VDb250ZXh0OjpnbG9iYWxFcnJvckNoZWNrKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxpbmUsIGJvb2wgZ2xvYmFsLCBjb25zdCBjaGFyKiB0b2tlbikKK3sKKyAgICBpZiAo
Z2xvYmFsKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBlcnJvcihsaW5lLCAib25seSBh
bGxvd2VkIGF0IGdsb2JhbCBzY29wZSIsIHRva2VuKTsKKworICAgIHJldHVybiB0cnVlOworfQor
CisvLworLy8gRm9yIG5vdywga2VlcCBpdCBzaW1wbGU6ICBpZiBpdCBzdGFydHMgImdsXyIsIGl0
J3MgcmVzZXJ2ZWQsIGluZGVwZW5kZW50CisvLyBvZiBzY29wZS4gIEV4Y2VwdCwgaWYgdGhlIHN5
bWJvbCB0YWJsZSBpcyBhdCB0aGUgYnVpbHQtaW4gcHVzaC1sZXZlbCwKKy8vIHdoaWNoIGlzIHdo
ZW4gd2UgYXJlIHBhcnNpbmcgYnVpbHQtaW5zLgorLy8gQWxzbyBjaGVja3MgZm9yICJ3ZWJnbF8i
IGFuZCAiX3dlYmdsXyIgcmVzZXJ2ZWQgaWRlbnRpZmllcnMgaWYgcGFyc2luZyBhCisvLyB3ZWJn
bCBzaGFkZXIuCisvLworLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KKy8v
Citib29sIFRQYXJzZUNvbnRleHQ6OnJlc2VydmVkRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9j
JiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyKQoreworICAgIHN0YXRpYyBjb25zdCBj
aGFyKiByZXNlcnZlZEVyck1zZyA9ICJyZXNlcnZlZCBidWlsdC1pbiBuYW1lIjsKKyAgICBpZiAo
IXN5bWJvbFRhYmxlLmF0QnVpbHRJbkxldmVsKCkpIHsKKyAgICAgICAgaWYgKGlkZW50aWZpZXIu
Y29tcGFyZSgwLCAzLCAiZ2xfIikgPT0gMCkgeworICAgICAgICAgICAgZXJyb3IobGluZSwgcmVz
ZXJ2ZWRFcnJNc2csICJnbF8iKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgICAgIGlmIChpc1dlYkdMQmFzZWRTcGVjKHNoYWRlclNwZWMpKSB7CisgICAgICAgICAg
ICBpZiAoaWRlbnRpZmllci5jb21wYXJlKDAsIDYsICJ3ZWJnbF8iKSA9PSAwKSB7CisgICAgICAg
ICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJ3ZWJnbF8iKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpZGVu
dGlmaWVyLmNvbXBhcmUoMCwgNywgIl93ZWJnbF8iKSA9PSAwKSB7CisgICAgICAgICAgICAgICAg
ZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJfd2ViZ2xfIik7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2hhZGVyU3BlYyA9
PSBTSF9DU1NfU0hBREVSU19TUEVDICYmIGlkZW50aWZpZXIuY29tcGFyZSgwLCA0LCAiY3NzXyIp
ID09IDApIHsKKyAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgImNz
c18iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBpZiAoaWRlbnRpZmllci5maW5kKCJfXyIpICE9IFRTdHJpbmc6Om5wb3Mp
IHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJpZGVudGlmaWVycyBjb250YWluaW5nIHR3byBj
b25zZWN1dGl2ZSB1bmRlcnNjb3JlcyAoX18pIGFyZSByZXNlcnZlZCBhcyBwb3NzaWJsZSBmdXR1
cmUga2V5d29yZHMiLCBpZGVudGlmaWVyLmNfc3RyKCkpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vCisvLyBN
YWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIGRhdGEgcHJvdmlkZWQgdG8gdGhlIGNvbnN0cnVjdG9y
IHRvIGJ1aWxkCisvLyBzb21ldGhpbmcgb2YgdGhlIHR5cGUgb2YgdGhlIGNvbnN0cnVjdG9yLiAg
QWxzbyByZXR1cm5zIHRoZSB0eXBlIG9mCisvLyB0aGUgY29uc3RydWN0b3IuCisvLworLy8gUmV0
dXJucyB0cnVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvciBpbiBjb25zdHJ1Y3Rpb24uCisvLworYm9v
bCBUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RvckVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYg
bGluZSwgVEludGVybU5vZGUqIG5vZGUsIFRGdW5jdGlvbiYgZnVuY3Rpb24sIFRPcGVyYXRvciBv
cCwgVFR5cGUqIHR5cGUpCit7CisgICAgKnR5cGUgPSBmdW5jdGlvbi5nZXRSZXR1cm5UeXBlKCk7
CisKKyAgICBib29sIGNvbnN0cnVjdGluZ01hdHJpeCA9IGZhbHNlOworICAgIHN3aXRjaChvcCkg
eworICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MjoKKyAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6
CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQ0OgorICAgICAgICBjb25zdHJ1Y3RpbmdNYXRyaXgg
PSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OiAKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgLy8KKyAgICAvLyBOb3RlOiBJdCdzIG9rYXkgdG8gaGF2ZSB0b28gbWFueSBj
b21wb25lbnRzIGF2YWlsYWJsZSwgYnV0IG5vdCBva2F5IHRvIGhhdmUgdW51c2VkCisgICAgLy8g
YXJndW1lbnRzLiAgJ2Z1bGwnIHdpbGwgZ28gdG8gdHJ1ZSB3aGVuIGVub3VnaCBhcmdzIGhhdmUg
YmVlbiBzZWVuLiAgSWYgd2UgbG9vcAorICAgIC8vIGFnYWluLCB0aGVyZSBpcyBhbiBleHRyYSBh
cmd1bWVudCwgc28gJ292ZXJmdWxsJyB3aWxsIGJlY29tZSB0cnVlLgorICAgIC8vCisKKyAgICBz
aXplX3Qgc2l6ZSA9IDA7CisgICAgYm9vbCBjb25zdFR5cGUgPSB0cnVlOworICAgIGJvb2wgZnVs
bCA9IGZhbHNlOworICAgIGJvb2wgb3ZlckZ1bGwgPSBmYWxzZTsKKyAgICBib29sIG1hdHJpeElu
TWF0cml4ID0gZmFsc2U7CisgICAgYm9vbCBhcnJheUFyZyA9IGZhbHNlOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpOyArK2kpIHsKKyAgICAgICAg
Y29uc3QgVFBhcmFtZXRlciYgcGFyYW0gPSBmdW5jdGlvbi5nZXRQYXJhbShpKTsKKyAgICAgICAg
c2l6ZSArPSBwYXJhbS50eXBlLT5nZXRPYmplY3RTaXplKCk7CisgICAgICAgIAorICAgICAgICBp
ZiAoY29uc3RydWN0aW5nTWF0cml4ICYmIHBhcmFtLnR5cGUtPmlzTWF0cml4KCkpCisgICAgICAg
ICAgICBtYXRyaXhJbk1hdHJpeCA9IHRydWU7CisgICAgICAgIGlmIChmdWxsKQorICAgICAgICAg
ICAgb3ZlckZ1bGwgPSB0cnVlOworICAgICAgICBpZiAob3AgIT0gRU9wQ29uc3RydWN0U3RydWN0
ICYmICF0eXBlLT5pc0FycmF5KCkgJiYgc2l6ZSA+PSB0eXBlLT5nZXRPYmplY3RTaXplKCkpCisg
ICAgICAgICAgICBmdWxsID0gdHJ1ZTsKKyAgICAgICAgaWYgKHBhcmFtLnR5cGUtPmdldFF1YWxp
ZmllcigpICE9IEV2cUNvbnN0KQorICAgICAgICAgICAgY29uc3RUeXBlID0gZmFsc2U7CisgICAg
ICAgIGlmIChwYXJhbS50eXBlLT5pc0FycmF5KCkpCisgICAgICAgICAgICBhcnJheUFyZyA9IHRy
dWU7CisgICAgfQorICAgIAorICAgIGlmIChjb25zdFR5cGUpCisgICAgICAgIHR5cGUtPnNldFF1
YWxpZmllcihFdnFDb25zdCk7CisKKyAgICBpZiAodHlwZS0+aXNBcnJheSgpICYmIHN0YXRpY19j
YXN0PHNpemVfdD4odHlwZS0+Z2V0QXJyYXlTaXplKCkpICE9IGZ1bmN0aW9uLmdldFBhcmFtQ291
bnQoKSkgeworICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgY29uc3RydWN0b3IgbmVlZHMgb25l
IGFyZ3VtZW50IHBlciBhcnJheSBlbGVtZW50IiwgImNvbnN0cnVjdG9yIik7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChhcnJheUFyZyAmJiBvcCAhPSBFT3BDb25zdHJ1
Y3RTdHJ1Y3QpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBmcm9tIGEgbm9u
LWRlcmVmZXJlbmNlZCBhcnJheSIsICJjb25zdHJ1Y3RvciIpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBpZiAobWF0cml4SW5NYXRyaXggJiYgIXR5cGUtPmlzQXJyYXkoKSkg
eworICAgICAgICBpZiAoZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpICE9IDEpIHsKKyAgICAgICAg
ICBlcnJvcihsaW5lLCAiY29uc3RydWN0aW5nIG1hdHJpeCBmcm9tIG1hdHJpeCBjYW4gb25seSB0
YWtlIG9uZSBhcmd1bWVudCIsICJjb25zdHJ1Y3RvciIpOworICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG92ZXJGdWxsKSB7CisgICAgICAgIGVycm9y
KGxpbmUsICJ0b28gbWFueSBhcmd1bWVudHMiLCAiY29uc3RydWN0b3IiKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3Qg
JiYgIXR5cGUtPmlzQXJyYXkoKSAmJiB0eXBlLT5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCkuc2l6ZSgp
ICE9IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKSkgeworICAgICAgICBlcnJvcihsaW5lLCAiTnVt
YmVyIG9mIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMgZG9lcyBub3QgbWF0Y2ggdGhlIG51bWJlciBv
ZiBzdHJ1Y3R1cmUgZmllbGRzIiwgImNvbnN0cnVjdG9yIik7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIGlmICghdHlwZS0+aXNNYXRyaXgoKSB8fCAhbWF0cml4SW5NYXRyaXgp
IHsKKyAgICAgICAgaWYgKChvcCAhPSBFT3BDb25zdHJ1Y3RTdHJ1Y3QgJiYgc2l6ZSAhPSAxICYm
IHNpemUgPCB0eXBlLT5nZXRPYmplY3RTaXplKCkpIHx8CisgICAgICAgICAgICAob3AgPT0gRU9w
Q29uc3RydWN0U3RydWN0ICYmIHNpemUgPCB0eXBlLT5nZXRPYmplY3RTaXplKCkpKSB7CisgICAg
ICAgICAgICBlcnJvcihsaW5lLCAibm90IGVub3VnaCBkYXRhIHByb3ZpZGVkIGZvciBjb25zdHJ1
Y3Rpb24iLCAiY29uc3RydWN0b3IiKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgfQorCisgICAgVEludGVybVR5cGVkICp0eXBlZCA9IG5vZGUgPyBub2RlLT5nZXRB
c1R5cGVkKCkgOiAwOworICAgIGlmICh0eXBlZCA9PSAwKSB7CisgICAgICAgIGVycm9yKGxpbmUs
ICJjb25zdHJ1Y3RvciBhcmd1bWVudCBkb2VzIG5vdCBoYXZlIGEgdHlwZSIsICJjb25zdHJ1Y3Rv
ciIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKG9wICE9IEVPcENvbnN0
cnVjdFN0cnVjdCAmJiBJc1NhbXBsZXIodHlwZWQtPmdldEJhc2ljVHlwZSgpKSkgeworICAgICAg
ICBlcnJvcihsaW5lLCAiY2Fubm90IGNvbnZlcnQgYSBzYW1wbGVyIiwgImNvbnN0cnVjdG9yIik7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAodHlwZWQtPmdldEJhc2ljVHlw
ZSgpID09IEVidFZvaWQpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBjb252ZXJ0IGEg
dm9pZCIsICJjb25zdHJ1Y3RvciIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRvIHNlZSBpZiBh
IHZvaWQgdmFyaWFibGUgaGFzIGJlZW4gZGVjbGFyZWQgYW5kIHJhaXNlIGFuIGVycm9yIG1lc3Nh
Z2UgZm9yIHN1Y2ggYSBjYXNlCisvLworLy8gcmV0dXJucyB0cnVlIGluIGNhc2Ugb2YgYW4gZXJy
b3IKKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OnZvaWRFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VM
b2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IFRQdWJsaWNUeXBlJiBw
dWJUeXBlKQoreworICAgIGlmIChwdWJUeXBlLnR5cGUgPT0gRWJ0Vm9pZCkgeworICAgICAgICBl
cnJvcihsaW5lLCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9pZCciLCBpZGVudGlmaWVyLmNfc3Ry
KCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IAorCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCisvLyBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0byBzZWUgaWYgdGhlIG5vZGUgKGZvciB0aGUg
ZXhwcmVzc2lvbikgY29udGFpbnMgYSBzY2FsYXIgYm9vbGVhbiBleHByZXNzaW9uIG9yIG5vdAor
Ly8KKy8vIHJldHVybnMgdHJ1ZSBpbiBjYXNlIG9mIGFuIGVycm9yCisvLworYm9vbCBUUGFyc2VD
b250ZXh0Ojpib29sRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUSW50
ZXJtVHlwZWQqIHR5cGUpCit7CisgICAgaWYgKHR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVidEJv
b2wgfHwgdHlwZS0+aXNBcnJheSgpIHx8IHR5cGUtPmlzTWF0cml4KCkgfHwgdHlwZS0+aXNWZWN0
b3IoKSkgeworICAgICAgICBlcnJvcihsaW5lLCAiYm9vbGVhbiBleHByZXNzaW9uIGV4cGVjdGVk
IiwgIiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IAorCisgICAgcmV0dXJuIGZhbHNl
OworfQorCisvLyBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0byBzZWUgaWYgdGhlIG5vZGUgKGZvciB0
aGUgZXhwcmVzc2lvbikgY29udGFpbnMgYSBzY2FsYXIgYm9vbGVhbiBleHByZXNzaW9uIG9yIG5v
dAorLy8KKy8vIHJldHVybnMgdHJ1ZSBpbiBjYXNlIG9mIGFuIGVycm9yCisvLworYm9vbCBUUGFy
c2VDb250ZXh0Ojpib29sRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBU
UHVibGljVHlwZSYgcFR5cGUpCit7CisgICAgaWYgKHBUeXBlLnR5cGUgIT0gRWJ0Qm9vbCB8fCBw
VHlwZS5hcnJheSB8fCBwVHlwZS5tYXRyaXggfHwgKHBUeXBlLnNpemUgPiAxKSkgeworICAgICAg
ICBlcnJvcihsaW5lLCAiYm9vbGVhbiBleHByZXNzaW9uIGV4cGVjdGVkIiwgIiIpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9IAorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRQ
YXJzZUNvbnRleHQ6OnNhbXBsZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNv
bnN0IFRQdWJsaWNUeXBlJiBwVHlwZSwgY29uc3QgY2hhciogcmVhc29uKQoreworICAgIGlmIChw
VHlwZS50eXBlID09IEVidFN0cnVjdCkgeworICAgICAgICBpZiAoY29udGFpbnNTYW1wbGVyKCpw
VHlwZS51c2VyRGVmKSkgeworICAgICAgICAgICAgZXJyb3IobGluZSwgcmVhc29uLCBnZXRCYXNp
Y1N0cmluZyhwVHlwZS50eXBlKSwgIihzdHJ1Y3R1cmUgY29udGFpbnMgYSBzYW1wbGVyKSIpOwor
ICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlIGlmIChJc1NhbXBsZXIocFR5cGUudHlw
ZSkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgcmVhc29uLCBnZXRCYXNpY1N0cmluZyhwVHlwZS50
eXBlKSk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIFRQYXJzZUNvbnRleHQ6OnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soY29u
c3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlKQoreworICAgIGlm
ICgocFR5cGUucXVhbGlmaWVyID09IEV2cVZhcnlpbmdJbiB8fCBwVHlwZS5xdWFsaWZpZXIgPT0g
RXZxVmFyeWluZ091dCB8fCBwVHlwZS5xdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlKSAmJgorICAg
ICAgICBwVHlwZS50eXBlID09IEVidFN0cnVjdCkgeworICAgICAgICBlcnJvcihsaW5lLCAiY2Fu
bm90IGJlIHVzZWQgd2l0aCBhIHN0cnVjdHVyZSIsIGdldFF1YWxpZmllclN0cmluZyhwVHlwZS5x
dWFsaWZpZXIpKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IGlmIChwVHlwZS5xdWFsaWZpZXIgIT0gRXZxVW5pZm9ybSAmJiBzYW1wbGVyRXJyb3JDaGVjayhs
aW5lLCBwVHlwZSwgInNhbXBsZXJzIG11c3QgYmUgdW5pZm9ybSIpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJh
bWV0ZXJTYW1wbGVyRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUXVhbGlmaWVy
IHF1YWxpZmllciwgY29uc3QgVFR5cGUmIHR5cGUpCit7CisgICAgaWYgKChxdWFsaWZpZXIgPT0g
RXZxT3V0IHx8IHF1YWxpZmllciA9PSBFdnFJbk91dCkgJiYgCisgICAgICAgICAgICAgdHlwZS5n
ZXRCYXNpY1R5cGUoKSAhPSBFYnRTdHJ1Y3QgJiYgSXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBl
KCkpKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJzYW1wbGVycyBjYW5ub3QgYmUgb3V0cHV0IHBh
cmFtZXRlcnMiLCB0eXBlLmdldEJhc2ljU3RyaW5nKCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVFBhcnNlQ29udGV4dDo6Y29u
dGFpbnNTYW1wbGVyKFRUeXBlJiB0eXBlKQoreworICAgIGlmIChJc1NhbXBsZXIodHlwZS5nZXRC
YXNpY1R5cGUoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKHR5cGUuZ2V0QmFz
aWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7CisgICAgICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxk
cyA9IHR5cGUuZ2V0U3RydWN0KCktPmZpZWxkcygpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGNvbnRh
aW5zU2FtcGxlcigqZmllbGRzW2ldLT50eXBlKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLworLy8g
RG8gc2l6ZSBjaGVja2luZyBmb3IgYW4gYXJyYXkgdHlwZSdzIHNpemUuCisvLworLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OmFy
cmF5U2l6ZUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVEludGVybVR5cGVkKiBl
eHByLCBpbnQmIHNpemUpCit7CisgICAgVEludGVybUNvbnN0YW50VW5pb24qIGNvbnN0YW50ID0g
ZXhwci0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisgICAgaWYgKGNvbnN0YW50ID09IDAgfHwgY29u
c3RhbnQtPmdldEJhc2ljVHlwZSgpICE9IEVidEludCkgeworICAgICAgICBlcnJvcihsaW5lLCAi
YXJyYXkgc2l6ZSBtdXN0IGJlIGEgY29uc3RhbnQgaW50ZWdlciBleHByZXNzaW9uIiwgIiIpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzaXplID0gY29uc3RhbnQtPmdldElD
b25zdCgwKTsKKworICAgIGlmIChzaXplIDw9IDApIHsKKyAgICAgICAgZXJyb3IobGluZSwgImFy
cmF5IHNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIiLCAiIik7CisgICAgICAgIHNpemUg
PSAxOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKKy8vCisvLyBTZWUgaWYgdGhpcyBxdWFsaWZpZXIgY2FuIGJlIGFuIGFycmF5LgorLy8KKy8v
IFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhbiBlcnJvci4KKy8vCitib29sIFRQYXJzZUNvbnRl
eHQ6OmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUHVi
bGljVHlwZSB0eXBlKQoreworICAgIGlmICgodHlwZS5xdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRl
KSB8fCAodHlwZS5xdWFsaWZpZXIgPT0gRXZxQ29uc3QpKSB7CisgICAgICAgIGVycm9yKGxpbmUs
ICJjYW5ub3QgZGVjbGFyZSBhcnJheXMgb2YgdGhpcyBxdWFsaWZpZXIiLCBUVHlwZSh0eXBlKS5n
ZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vCisvLyBTZWUgaWYgdGhpcyB0eXBlIGNhbiBi
ZSBhbiBhcnJheS4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYW4gZXJyb3IuCisv
LworYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVR5cGVFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VM
b2MmIGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpCit7CisgICAgLy8KKyAgICAvLyBDYW4gdGhlIHR5
cGUgYmUgYW4gYXJyYXk/CisgICAgLy8KKyAgICBpZiAodHlwZS5hcnJheSkgeworICAgICAgICBl
cnJvcihsaW5lLCAiY2Fubm90IGRlY2xhcmUgYXJyYXlzIG9mIGFycmF5cyIsIFRUeXBlKHR5cGUp
LmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8KKy8vIERvIGFsbCB0aGUgc2VtYW50aWMg
Y2hlY2tpbmcgZm9yIGRlY2xhcmluZyBhbiBhcnJheSwgd2l0aCBhbmQgCisvLyB3aXRob3V0IGEg
c2l6ZSwgYW5kIG1ha2UgdGhlIHJpZ2h0IGNoYW5nZXMgdG8gdGhlIHN5bWJvbCB0YWJsZS4KKy8v
CisvLyBzaXplID09IDAgbWVhbnMgbm8gc3BlY2lmaWVkIHNpemUuCisvLworLy8gUmV0dXJucyB0
cnVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5
RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBU
UHVibGljVHlwZSB0eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSkKK3sKKyAgICAvLworICAgIC8v
IERvbid0IGNoZWNrIGZvciByZXNlcnZlZCB3b3JkIHVzZSB1bnRpbCBhZnRlciB3ZSBrbm93IGl0
J3Mgbm90IGluIHRoZSBzeW1ib2wgdGFibGUsCisgICAgLy8gYmVjYXVzZSByZXNlcnZlZCBhcnJh
eXMgY2FuIGJlIHJlZGVjbGFyZWQuCisgICAgLy8KKworICAgIGJvb2wgYnVpbHRJbiA9IGZhbHNl
OyAKKyAgICBib29sIHNhbWVTY29wZSA9IGZhbHNlOworICAgIFRTeW1ib2wqIHN5bWJvbCA9IHN5
bWJvbFRhYmxlLmZpbmQoaWRlbnRpZmllciwgJmJ1aWx0SW4sICZzYW1lU2NvcGUpOworICAgIGlm
IChzeW1ib2wgPT0gMCB8fCAhc2FtZVNjb3BlKSB7CisgICAgICAgIGlmIChyZXNlcnZlZEVycm9y
Q2hlY2sobGluZSwgaWRlbnRpZmllcikpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgCisgICAgICAgIHZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgmaWRlbnRpZmllciwgVFR5cGUo
dHlwZSkpOworCisgICAgICAgIGlmICh0eXBlLmFycmF5U2l6ZSkKKyAgICAgICAgICAgIHZhcmlh
YmxlLT5nZXRUeXBlKCkuc2V0QXJyYXlTaXplKHR5cGUuYXJyYXlTaXplKTsKKworICAgICAgICBp
ZiAoISBzeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgeworICAgICAgICAgICAgZGVsZXRl
IHZhcmlhYmxlOworICAgICAgICAgICAgZXJyb3IobGluZSwgIklOVEVSTkFMIEVSUk9SIGluc2Vy
dGluZyBuZXcgc3ltYm9sIiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCEgc3ltYm9sLT5p
c1ZhcmlhYmxlKCkpIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJ2YXJpYWJsZSBleHBlY3Rl
ZCIsIGlkZW50aWZpZXIuY19zdHIoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4oc3ltYm9s
KTsKKyAgICAgICAgaWYgKCEgdmFyaWFibGUtPmdldFR5cGUoKS5pc0FycmF5KCkpIHsKKyAgICAg
ICAgICAgIGVycm9yKGxpbmUsICJyZWRlY2xhcmluZyBub24tYXJyYXkgYXMgYXJyYXkiLCBpZGVu
dGlmaWVyLmNfc3RyKCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkgPiAwKSB7CisgICAg
ICAgICAgICBlcnJvcihsaW5lLCAicmVkZWNsYXJhdGlvbiBvZiBhcnJheSB3aXRoIHNpemUiLCBp
ZGVudGlmaWVyLmNfc3RyKCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGlmICghIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2FtZUVsZW1lbnRU
eXBlKFRUeXBlKHR5cGUpKSkgeworICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyYXRp
b24gb2YgYXJyYXkgd2l0aCBhIGRpZmZlcmVudCB0eXBlIiwgaWRlbnRpZmllci5jX3N0cigpKTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHR5cGUu
YXJyYXlTaXplKQorICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5zZXRBcnJheVNpemUo
dHlwZS5hcnJheVNpemUpOworICAgIH0gCisKKyAgICBpZiAodm9pZEVycm9yQ2hlY2sobGluZSwg
aWRlbnRpZmllciwgdHlwZSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZh
bHNlOworfQorCisvLworLy8gRW5mb3JjZSBub24taW5pdGlhbGl6ZXIgdHlwZS9xdWFsaWZpZXIg
cnVsZXMuCisvLworLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KKy8vCiti
b29sIFRQYXJzZUNvbnRleHQ6Om5vbkluaXRDb25zdEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxv
YyYgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHR5cGUsIGJvb2wgYXJy
YXkpCit7CisgICAgaWYgKHR5cGUucXVhbGlmaWVyID09IEV2cUNvbnN0KQorICAgIHsKKyAgICAg
ICAgLy8gTWFrZSB0aGUgcXVhbGlmaWVyIG1ha2Ugc2Vuc2UuCisgICAgICAgIHR5cGUucXVhbGlm
aWVyID0gRXZxVGVtcG9yYXJ5OworICAgICAgICAKKyAgICAgICAgaWYgKGFycmF5KQorICAgICAg
ICB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXlzIG1heSBub3QgYmUgZGVjbGFyZWQg
Y29uc3RhbnQgc2luY2UgdGhleSBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQiLCBpZGVudGlmaWVyLmNf
c3RyKCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHR5cGUuaXNTdHJ1Y3R1cmVDb250
YWluaW5nQXJyYXlzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJzdHJ1
Y3R1cmVzIGNvbnRhaW5pbmcgYXJyYXlzIG1heSBub3QgYmUgZGVjbGFyZWQgY29uc3RhbnQgc2lu
Y2UgdGhleSBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQiLCBpZGVudGlmaWVyLmNfc3RyKCkpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IobGluZSwg
InZhcmlhYmxlcyB3aXRoIHF1YWxpZmllciAnY29uc3QnIG11c3QgYmUgaW5pdGlhbGl6ZWQiLCBp
ZGVudGlmaWVyLmNfc3RyKCkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLworLy8gRG8gc2VtYW50aWMgY2hlY2tp
bmcgZm9yIGEgdmFyaWFibGUgZGVjbGFyYXRpb24gdGhhdCBoYXMgbm8gaW5pdGlhbGl6ZXIsCisv
LyBhbmQgdXBkYXRlIHRoZSBzeW1ib2wgdGFibGUuCisvLworLy8gUmV0dXJucyB0cnVlIGlmIHRo
ZXJlIHdhcyBhbiBlcnJvci4KKy8vCitib29sIFRQYXJzZUNvbnRleHQ6Om5vbkluaXRFcnJvckNo
ZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNU
eXBlJiB0eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSkKK3sKKyAgICBpZiAocmVzZXJ2ZWRFcnJv
ckNoZWNrKGxpbmUsIGlkZW50aWZpZXIpKQorICAgICAgICByZWNvdmVyKCk7CisKKyAgICB2YXJp
YWJsZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50aWZpZXIsIFRUeXBlKHR5cGUpKTsKKworICAgIGlm
ICghIHN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7CisgICAgICAgIGVycm9yKGxpbmUs
ICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOworICAgICAgICBk
ZWxldGUgdmFyaWFibGU7CisgICAgICAgIHZhcmlhYmxlID0gMDsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgaWYgKHZvaWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIsIHR5
cGUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBUUGFyc2VDb250ZXh0OjpwYXJhbUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwg
VFF1YWxpZmllciBxdWFsaWZpZXIsIFRRdWFsaWZpZXIgcGFyYW1RdWFsaWZpZXIsIFRUeXBlKiB0
eXBlKQoreyAgICAKKyAgICBpZiAocXVhbGlmaWVyICE9IEV2cUNvbnN0ICYmIHF1YWxpZmllciAh
PSBFdnFUZW1wb3JhcnkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgInF1YWxpZmllciBub3QgYWxs
b3dlZCBvbiBmdW5jdGlvbiBwYXJhbWV0ZXIiLCBnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVy
KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAocXVhbGlmaWVyID09IEV2
cUNvbnN0ICYmIHBhcmFtUXVhbGlmaWVyICE9IEV2cUluKSB7CisgICAgICAgIGVycm9yKGxpbmUs
ICJxdWFsaWZpZXIgbm90IGFsbG93ZWQgd2l0aCAiLCBnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlm
aWVyKSwgZ2V0UXVhbGlmaWVyU3RyaW5nKHBhcmFtUXVhbGlmaWVyKSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxQ29uc3QpCisgICAgICAg
IHR5cGUtPnNldFF1YWxpZmllcihFdnFDb25zdFJlYWRPbmx5KTsKKyAgICBlbHNlCisgICAgICAg
IHR5cGUtPnNldFF1YWxpZmllcihwYXJhbVF1YWxpZmllcik7CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgVFBhcnNlQ29udGV4dDo6ZXh0ZW5zaW9uRXJyb3JDaGVjayhjb25zdCBUU291
cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBleHRlbnNpb24pCit7CisgICAgY29uc3QgVEV4
dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciA9IGV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAg
VEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0QmVoYXZpb3IuZmlu
ZChleHRlbnNpb24uY19zdHIoKSk7CisgICAgaWYgKGl0ZXIgPT0gZXh0QmVoYXZpb3IuZW5kKCkp
IHsKKyAgICAgICAgZXJyb3IobGluZSwgImV4dGVuc2lvbiIsIGV4dGVuc2lvbi5jX3N0cigpLCAi
aXMgbm90IHN1cHBvcnRlZCIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgLy8g
SW4gR0xTTCBFUywgYW4gZXh0ZW5zaW9uJ3MgZGVmYXVsdCBiZWhhdmlvciBpcyAiZGlzYWJsZSIu
CisgICAgaWYgKGl0ZXItPnNlY29uZCA9PSBFQmhEaXNhYmxlIHx8IGl0ZXItPnNlY29uZCA9PSBF
QmhVbmRlZmluZWQpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImV4dGVuc2lvbiIsIGV4dGVuc2lv
bi5jX3N0cigpLCAiaXMgZGlzYWJsZWQiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIGlmIChpdGVyLT5zZWNvbmQgPT0gRUJoV2FybikgeworICAgICAgICB3YXJuaW5nKGxpbmUs
ICJleHRlbnNpb24iLCBleHRlbnNpb24uY19zdHIoKSwgImlzIGJlaW5nIHVzZWQiKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBU
UGFyc2VDb250ZXh0OjpzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBjaGFyKiBleHRlbnNpb24pCit7
CisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRiZWhhdmlvciA9IGV4dGVuc2lvbkJl
aGF2aW9yKCk7CisgICAgVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0g
ZXh0YmVoYXZpb3IuZmluZChleHRlbnNpb24pOworICAgIHJldHVybiAoaXRlciAhPSBleHRiZWhh
dmlvci5lbmQoKSk7Cit9CisKK2Jvb2wgVFBhcnNlQ29udGV4dDo6aXNFeHRlbnNpb25FbmFibGVk
KGNvbnN0IGNoYXIqIGV4dGVuc2lvbikgY29uc3QKK3sKKyAgICBjb25zdCBURXh0ZW5zaW9uQmVo
YXZpb3ImIGV4dGJlaGF2aW9yID0gZXh0ZW5zaW9uQmVoYXZpb3IoKTsKKyAgICBURXh0ZW5zaW9u
QmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRiZWhhdmlvci5maW5kKGV4dGVuc2lv
bik7CisKKyAgICBpZiAoaXRlciA9PSBleHRiZWhhdmlvci5lbmQoKSkKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gKGl0ZXItPnNlY29uZCA9PSBFQmhF
bmFibGUgfHwgaXRlci0+c2Vjb25kID09IEVCaFJlcXVpcmUpOworfQorCisvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KKy8vCisvLyBOb24tRXJyb3JzLgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLworCisvLworLy8gTG9vayB1cCBhIGZ1bmN0aW9uIG5hbWUgaW4gdGhlIHN5bWJvbCB0YWJs
ZSwgYW5kIG1ha2Ugc3VyZSBpdCBpcyBhIGZ1bmN0aW9uLgorLy8KKy8vIFJldHVybiB0aGUgZnVu
Y3Rpb24gc3ltYm9sIGlmIGZvdW5kLCBvdGhlcndpc2UgMC4KKy8vCitjb25zdCBURnVuY3Rpb24q
IFRQYXJzZUNvbnRleHQ6OmZpbmRGdW5jdGlvbihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBURnVu
Y3Rpb24qIGNhbGwsIGJvb2wgKmJ1aWx0SW4pCit7CisgICAgLy8gRmlyc3QgZmluZCBieSB1bm1h
bmdsZWQgbmFtZSB0byBjaGVjayB3aGV0aGVyIHRoZSBmdW5jdGlvbiBuYW1lIGhhcyBiZWVuCisg
ICAgLy8gaGlkZGVuIGJ5IGEgdmFyaWFibGUgbmFtZSBvciBzdHJ1Y3QgdHlwZW5hbWUuCisgICAg
Ly8gSWYgYSBmdW5jdGlvbiBpcyBmb3VuZCwgY2hlY2sgZm9yIG9uZSB3aXRoIGEgbWF0Y2hpbmcg
YXJndW1lbnQgbGlzdC4KKyAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5m
aW5kKGNhbGwtPmdldE5hbWUoKSwgYnVpbHRJbik7CisgICAgaWYgKHN5bWJvbCA9PSAwIHx8IHN5
bWJvbC0+aXNGdW5jdGlvbigpKSB7CisgICAgICAgIHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQo
Y2FsbC0+Z2V0TWFuZ2xlZE5hbWUoKSwgYnVpbHRJbik7CisgICAgfQorCisgICAgaWYgKHN5bWJv
bCA9PSAwKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJubyBtYXRjaGluZyBvdmVybG9hZGVkIGZ1
bmN0aW9uIGZvdW5kIiwgY2FsbC0+Z2V0TmFtZSgpLmNfc3RyKCkpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICBpZiAoIXN5bWJvbC0+aXNGdW5jdGlvbigpKSB7CisgICAgICAgIGVy
cm9yKGxpbmUsICJmdW5jdGlvbiBuYW1lIGV4cGVjdGVkIiwgY2FsbC0+Z2V0TmFtZSgpLmNfc3Ry
KCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y29uc3QgVEZ1bmN0aW9uKj4oc3ltYm9sKTsKK30KKworLy8KKy8vIEluaXRpYWxpemVycyBzaG93
IHVwIGluIHNldmVyYWwgcGxhY2VzIGluIHRoZSBncmFtbWFyLiAgSGF2ZSBvbmUgc2V0IG9mCisv
LyBjb2RlIHRvIGhhbmRsZSB0aGVtIGhlcmUuCisvLworYm9vbCBUUGFyc2VDb250ZXh0OjpleGVj
dXRlSW5pdGlhbGl6ZXIoY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFN0cmluZyYgaWRlbnRpZmll
ciwgVFB1YmxpY1R5cGUmIHBUeXBlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFRJbnRlcm1UeXBlZCogaW5pdGlhbGl6ZXIsIFRJbnRlcm1Ob2RlKiYgaW50ZXJtTm9k
ZSwgVFZhcmlhYmxlKiB2YXJpYWJsZSkKK3sKKyAgICBUVHlwZSB0eXBlID0gVFR5cGUocFR5cGUp
OworCisgICAgaWYgKHZhcmlhYmxlID09IDApIHsKKyAgICAgICAgaWYgKHJlc2VydmVkRXJyb3JD
aGVjayhsaW5lLCBpZGVudGlmaWVyKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
ICAgIGlmICh2b2lkRXJyb3JDaGVjayhsaW5lLCBpZGVudGlmaWVyLCBwVHlwZSkpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAvLworICAgICAgICAvLyBhZGQgdmFyaWFibGUg
dG8gc3ltYm9sIHRhYmxlCisgICAgICAgIC8vCisgICAgICAgIHZhcmlhYmxlID0gbmV3IFRWYXJp
YWJsZSgmaWRlbnRpZmllciwgdHlwZSk7CisgICAgICAgIGlmICghIHN5bWJvbFRhYmxlLmluc2Vy
dCgqdmFyaWFibGUpKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAicmVkZWZpbml0aW9uIiwg
dmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgLy8gZG9uJ3QgZGVsZXRlIHZhcmlhYmxlLCBpdCdzIHVzZWQgYnkgZXJyb3Ig
cmVjb3ZlcnksIGFuZCB0aGUgcG9vbCAKKyAgICAgICAgICAgIC8vIHBvcCB3aWxsIHRha2UgY2Fy
ZSBvZiB0aGUgbWVtb3J5CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLworICAgIC8vIGlkZW50
aWZpZXIgbXVzdCBiZSBvZiB0eXBlIGNvbnN0YW50LCBhIGdsb2JhbCwgb3IgYSB0ZW1wb3JhcnkK
KyAgICAvLworICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gdmFyaWFibGUtPmdldFR5cGUoKS5n
ZXRRdWFsaWZpZXIoKTsKKyAgICBpZiAoKHF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpICYmIChx
dWFsaWZpZXIgIT0gRXZxR2xvYmFsKSAmJiAocXVhbGlmaWVyICE9IEV2cUNvbnN0KSkgeworICAg
ICAgICBlcnJvcihsaW5lLCAiIGNhbm5vdCBpbml0aWFsaXplIHRoaXMgdHlwZSBvZiBxdWFsaWZp
ZXIgIiwgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXJTdHJpbmcoKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICAvLworICAgIC8vIHRlc3QgZm9yIGFuZCBwcm9wYWdh
dGUgY29uc3RhbnQKKyAgICAvLworCisgICAgaWYgKHF1YWxpZmllciA9PSBFdnFDb25zdCkgewor
ICAgICAgICBpZiAocXVhbGlmaWVyICE9IGluaXRpYWxpemVyLT5nZXRUeXBlKCkuZ2V0UXVhbGlm
aWVyKCkpIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsK
KyAgICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiJyIgPDwgdmFyaWFibGUtPmdldFR5cGUo
KS5nZXRDb21wbGV0ZVN0cmluZygpIDw8ICInIjsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGV4
dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUs
ICIgYXNzaWduaW5nIG5vbi1jb25zdGFudCB0byIsICI9IiwgZXh0cmFJbmZvLmNfc3RyKCkpOwor
ICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5zZXRRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0eXBl
ICE9IGluaXRpYWxpemVyLT5nZXRUeXBlKCkpIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICIg
bm9uLW1hdGNoaW5nIHR5cGVzIGZvciBjb25zdCBpbml0aWFsaXplciAiLCAKKyAgICAgICAgICAg
ICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllclN0cmluZygpKTsKKyAgICAgICAg
ICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaW5pdGlhbGl6ZXIt
PmdldEFzQ29uc3RhbnRVbmlvbigpKSB7IAorICAgICAgICAgICAgdmFyaWFibGUtPnNoYXJlQ29u
c3RQb2ludGVyKGluaXRpYWxpemVyLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJh
eVBvaW50ZXIoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoaW5pdGlhbGl6ZXItPmdldEFzU3ltYm9s
Tm9kZSgpKSB7CisgICAgICAgICAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJs
ZS5maW5kKGluaXRpYWxpemVyLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCkpOworICAg
ICAgICAgICAgY29uc3QgVFZhcmlhYmxlKiB0VmFyID0gc3RhdGljX2Nhc3Q8Y29uc3QgVFZhcmlh
YmxlKj4oc3ltYm9sKTsKKworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiogY29uc3RBcnJheSA9
IHRWYXItPmdldENvbnN0UG9pbnRlcigpOworICAgICAgICAgICAgdmFyaWFibGUtPnNoYXJlQ29u
c3RQb2ludGVyKGNvbnN0QXJyYXkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3Rk
OjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICAgICAgZXh0cmFJbmZvU3Ry
ZWFtIDw8ICInIiA8PCB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldENvbXBsZXRlU3RyaW5nKCkgPDwg
IiciOworICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFt
LnN0cigpOworICAgICAgICAgICAgZXJyb3IobGluZSwgIiBjYW5ub3QgYXNzaWduIHRvIiwgIj0i
LCBleHRyYUluZm8uY19zdHIoKSk7CisgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNl
dFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICB9CisgCisgICAgaWYgKHF1YWxpZmllciAhPSBFdnFDb25zdCkgeworICAgICAg
ICBUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wgPSBpbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZh
cmlhYmxlLT5nZXRVbmlxdWVJZCgpLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLCB2YXJpYWJsZS0+Z2V0
VHlwZSgpLCBsaW5lKTsKKyAgICAgICAgaW50ZXJtTm9kZSA9IGludGVybWVkaWF0ZS5hZGRBc3Np
Z24oRU9wSW5pdGlhbGl6ZSwgaW50ZXJtU3ltYm9sLCBpbml0aWFsaXplciwgbGluZSk7CisgICAg
ICAgIGlmIChpbnRlcm1Ob2RlID09IDApIHsKKyAgICAgICAgICAgIGFzc2lnbkVycm9yKGxpbmUs
ICI9IiwgaW50ZXJtU3ltYm9sLT5nZXRDb21wbGV0ZVN0cmluZygpLCBpbml0aWFsaXplci0+Z2V0
Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSAKKyAgICAgICAgaW50ZXJtTm9kZSA9IDA7CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgVFBhcnNlQ29udGV4dDo6YXJlQWxsQ2hpbGRDb25zdChUSW50ZXJtQWdncmVn
YXRlKiBhZ2dyTm9kZSkKK3sKKyAgICBBU1NFUlQoYWdnck5vZGUgIT0gTlVMTCk7CisgICAgaWYg
KCFhZ2dyTm9kZS0+aXNDb25zdHJ1Y3RvcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBib29sIGFsbENvbnN0YW50ID0gdHJ1ZTsKKworICAgIC8vIGNoZWNrIGlmIGFsbCB0aGUgY2hp
bGQgbm9kZXMgYXJlIGNvbnN0YW50cyBzbyB0aGF0IHRoZXkgY2FuIGJlIGluc2VydGVkIGludG8g
CisgICAgLy8gdGhlIHBhcmVudCBub2RlCisgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9
IGFnZ3JOb2RlLT5nZXRTZXF1ZW5jZSgpIDsKKyAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRl
cmF0b3IgcCA9IHNlcXVlbmNlLmJlZ2luKCk7IHAgIT0gc2VxdWVuY2UuZW5kKCk7ICsrcCkgewor
ICAgICAgICBpZiAoISgqcCktPmdldEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIGFsbENvbnN0YW50
OworfQorCisvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdGVzdCBmb3IgdGhlIGNvcnJlY3Ru
ZXNzIG9mIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byB2YXJpb3VzIGNvbnN0cnVjdG9yIGZ1bmN0
aW9ucworLy8gYW5kIGFsc28gY29udmVydCB0aGVtIHRvIHRoZSByaWdodCBkYXRhdHlwZSBpZiBp
dCBpcyBhbGxvd2VkIGFuZCByZXF1aXJlZC4gCisvLworLy8gUmV0dXJucyAwIGZvciBhbiBlcnJv
ciBvciB0aGUgY29uc3RydWN0ZWQgbm9kZSAoYWdncmVnYXRlIG9yIHR5cGVkKSBmb3Igbm8gZXJy
b3IuCisvLworVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdHJ1Y3RvcihUSW50
ZXJtTm9kZSogbm9kZSwgY29uc3QgVFR5cGUqIHR5cGUsIFRPcGVyYXRvciBvcCwgVEZ1bmN0aW9u
KiBmbkNhbGwsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCit7CisgICAgaWYgKG5vZGUgPT0gMCkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBhZ2dyTm9kZSA9IG5v
ZGUtPmdldEFzQWdncmVnYXRlKCk7CisgICAgCisgICAgVEZpZWxkTGlzdDo6Y29uc3RfaXRlcmF0
b3IgbWVtYmVyRmllbGRzOworICAgIGlmIChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QpCisgICAg
ICAgIG1lbWJlckZpZWxkcyA9IHR5cGUtPmdldFN0cnVjdCgpLT5maWVsZHMoKS5iZWdpbigpOwor
ICAgIAorICAgIFRUeXBlIGVsZW1lbnRUeXBlID0gKnR5cGU7CisgICAgaWYgKHR5cGUtPmlzQXJy
YXkoKSkKKyAgICAgICAgZWxlbWVudFR5cGUuY2xlYXJBcnJheW5lc3MoKTsKKworICAgIGJvb2wg
c2luZ2xlQXJnOworICAgIGlmIChhZ2dyTm9kZSkgeworICAgICAgICBpZiAoYWdnck5vZGUtPmdl
dE9wKCkgIT0gRU9wTnVsbCB8fCBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMSkK
KyAgICAgICAgICAgIHNpbmdsZUFyZyA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHNpbmdsZUFyZyA9IGZhbHNlOworICAgIH0gZWxzZQorICAgICAgICBzaW5nbGVBcmcgPSB0cnVl
OworCisgICAgVEludGVybVR5cGVkICpuZXdOb2RlOworICAgIGlmIChzaW5nbGVBcmcpIHsKKyAg
ICAgICAgLy8gSWYgc3RydWN0dXJlIGNvbnN0cnVjdG9yIG9yIGFycmF5IGNvbnN0cnVjdG9yIGlz
IGJlaW5nIGNhbGxlZCAKKyAgICAgICAgLy8gZm9yIG9ubHkgb25lIHBhcmFtZXRlciBpbnNpZGUg
dGhlIHN0cnVjdHVyZSwgd2UgbmVlZCB0byBjYWxsIGNvbnN0cnVjdFN0cnVjdCBmdW5jdGlvbiBv
bmNlLgorICAgICAgICBpZiAodHlwZS0+aXNBcnJheSgpKQorICAgICAgICAgICAgbmV3Tm9kZSA9
IGNvbnN0cnVjdFN0cnVjdChub2RlLCAmZWxlbWVudFR5cGUsIDEsIG5vZGUtPmdldExpbmUoKSwg
ZmFsc2UpOworICAgICAgICBlbHNlIGlmIChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QpCisgICAg
ICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0U3RydWN0KG5vZGUsICgqbWVtYmVyRmllbGRzKS0+
dHlwZSgpLCAxLCBub2RlLT5nZXRMaW5lKCksIGZhbHNlKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdEJ1aWx0SW4odHlwZSwgb3AsIG5vZGUsIG5vZGUtPmdl
dExpbmUoKSwgZmFsc2UpOworCisgICAgICAgIGlmIChuZXdOb2RlICYmIG5ld05vZGUtPmdldEFz
QWdncmVnYXRlKCkpIHsKKyAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogY29uc3RDb25zdHJ1Y3Rv
ciA9IGZvbGRDb25zdENvbnN0cnVjdG9yKG5ld05vZGUtPmdldEFzQWdncmVnYXRlKCksICp0eXBl
KTsKKyAgICAgICAgICAgIGlmIChjb25zdENvbnN0cnVjdG9yKQorICAgICAgICAgICAgICAgIHJl
dHVybiBjb25zdENvbnN0cnVjdG9yOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ld05v
ZGU7CisgICAgfQorICAgIAorICAgIC8vCisgICAgLy8gSGFuZGxlIGxpc3Qgb2YgYXJndW1lbnRz
LgorICAgIC8vCisgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZVZlY3RvciA9IGFnZ3JOb2Rl
LT5nZXRTZXF1ZW5jZSgpIDsgICAgLy8gU3RvcmVzIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUg
cGFyYW1ldGVyIHRvIHRoZSBjb25zdHJ1Y3RvcgorICAgIC8vIGlmIHRoZSBzdHJ1Y3R1cmUgY29u
c3RydWN0b3IgY29udGFpbnMgbW9yZSB0aGFuIG9uZSBwYXJhbWV0ZXIsIHRoZW4gY29uc3RydWN0
CisgICAgLy8gZWFjaCBwYXJhbWV0ZXIKKyAgICAKKyAgICBpbnQgcGFyYW1Db3VudCA9IDA7ICAv
LyBrZWVwcyBhIHRyYWNrIG9mIHRoZSBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIgbnVtYmVyIGJlaW5n
IGNoZWNrZWQgICAgCisgICAgCisgICAgLy8gZm9yIGVhY2ggcGFyYW1ldGVyIHRvIHRoZSBjb25z
dHJ1Y3RvciBjYWxsLCBjaGVjayB0byBzZWUgaWYgdGhlIHJpZ2h0IHR5cGUgaXMgcGFzc2VkIG9y
IGNvbnZlcnQgdGhlbSAKKyAgICAvLyB0byB0aGUgcmlnaHQgdHlwZSBpZiBwb3NzaWJsZSAoYW5k
IGFsbG93ZWQpLgorICAgIC8vIGZvciBzdHJ1Y3R1cmUgY29uc3RydWN0b3JzLCBqdXN0IGNoZWNr
IGlmIHRoZSByaWdodCB0eXBlIGlzIHBhc3NlZCwgbm8gY29udmVyc2lvbiBpcyBhbGxvd2VkLgor
ICAgIAorICAgIGZvciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBwID0gc2VxdWVuY2VWZWN0
b3IuYmVnaW4oKTsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgIT0gc2Vx
dWVuY2VWZWN0b3IuZW5kKCk7IHArKywgcGFyYW1Db3VudCsrKSB7CisgICAgICAgIGlmICh0eXBl
LT5pc0FycmF5KCkpCisgICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0U3RydWN0KCpwLCAm
ZWxlbWVudFR5cGUsIHBhcmFtQ291bnQrMSwgbm9kZS0+Z2V0TGluZSgpLCB0cnVlKTsKKyAgICAg
ICAgZWxzZSBpZiAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0KQorICAgICAgICAgICAgbmV3Tm9k
ZSA9IGNvbnN0cnVjdFN0cnVjdCgqcCwgbWVtYmVyRmllbGRzW3BhcmFtQ291bnRdLT50eXBlKCks
IHBhcmFtQ291bnQrMSwgbm9kZS0+Z2V0TGluZSgpLCB0cnVlKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdEJ1aWx0SW4odHlwZSwgb3AsICpwLCBub2RlLT5n
ZXRMaW5lKCksIHRydWUpOworICAgICAgICAKKyAgICAgICAgaWYgKG5ld05vZGUpIHsKKyAgICAg
ICAgICAgICpwID0gbmV3Tm9kZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFRJbnRlcm1UeXBl
ZCogY29uc3RydWN0b3IgPSBpbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IoYWdnck5v
ZGUsIG9wLCBsaW5lKTsKKyAgICBUSW50ZXJtVHlwZWQqIGNvbnN0Q29uc3RydWN0b3IgPSBmb2xk
Q29uc3RDb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rvci0+Z2V0QXNBZ2dyZWdhdGUoKSwgKnR5cGUpOwor
ICAgIGlmIChjb25zdENvbnN0cnVjdG9yKQorICAgICAgICByZXR1cm4gY29uc3RDb25zdHJ1Y3Rv
cjsKKworICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKK30KKworVEludGVybVR5cGVkKiBUUGFyc2VD
b250ZXh0Ojpmb2xkQ29uc3RDb25zdHJ1Y3RvcihUSW50ZXJtQWdncmVnYXRlKiBhZ2dyTm9kZSwg
Y29uc3QgVFR5cGUmIHR5cGUpCit7CisgICAgYm9vbCBjYW5CZUZvbGRlZCA9IGFyZUFsbENoaWxk
Q29uc3QoYWdnck5vZGUpOworICAgIGFnZ3JOb2RlLT5zZXRUeXBlKHR5cGUpOworICAgIGlmIChj
YW5CZUZvbGRlZCkgeworICAgICAgICBib29sIHJldHVyblZhbCA9IGZhbHNlOworICAgICAgICBD
b25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bdHlwZS5nZXRPYmpl
Y3RTaXplKCldOworICAgICAgICBpZiAoYWdnck5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09
IDEpICB7CisgICAgICAgICAgICByZXR1cm5WYWwgPSBpbnRlcm1lZGlhdGUucGFyc2VDb25zdFRy
ZWUoYWdnck5vZGUtPmdldExpbmUoKSwgYWdnck5vZGUsIHVuaW9uQXJyYXksIGFnZ3JOb2RlLT5n
ZXRPcCgpLCBzeW1ib2xUYWJsZSwgIHR5cGUsIHRydWUpOworICAgICAgICB9CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgcmV0dXJuVmFsID0gaW50ZXJtZWRpYXRlLnBhcnNlQ29uc3RUcmVl
KGFnZ3JOb2RlLT5nZXRMaW5lKCksIGFnZ3JOb2RlLCB1bmlvbkFycmF5LCBhZ2dyTm9kZS0+Z2V0
T3AoKSwgc3ltYm9sVGFibGUsICB0eXBlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmV0dXJu
VmFsKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgcmV0dXJuIGludGVybWVkaWF0
ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIHR5cGUsIGFnZ3JOb2RlLT5nZXRMaW5lKCkp
OworICAgIH0KKworICAgIHJldHVybiAwOworfQorCisvLyBGdW5jdGlvbiBmb3IgY29uc3RydWN0
b3IgaW1wbGVtZW50YXRpb24uIENhbGxzIGFkZFVuYXJ5TWF0aCB3aXRoIGFwcHJvcHJpYXRlIEVP
cCB2YWx1ZQorLy8gZm9yIHRoZSBwYXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yIChwYXNzZWQg
dG8gdGhpcyBmdW5jdGlvbikuIEVzc2VudGlhbGx5LCBpdCBjb252ZXJ0cworLy8gdGhlIHBhcmFt
ZXRlciB0eXBlcyBjb3JyZWN0bHkuIElmIGEgY29uc3RydWN0b3IgZXhwZWN0cyBhbiBpbnQgKGxp
a2UgaXZlYzIpIGFuZCBpcyBwYXNzZWQgYSAKKy8vIGZsb2F0LCB0aGVuIGZsb2F0IGlzIGNvbnZl
cnRlZCB0byBpbnQuCisvLworLy8gUmV0dXJucyAwIGZvciBhbiBlcnJvciBvciB0aGUgY29uc3Ry
dWN0ZWQgbm9kZS4KKy8vCitUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdEJ1
aWx0SW4oY29uc3QgVFR5cGUqIHR5cGUsIFRPcGVyYXRvciBvcCwgVEludGVybU5vZGUqIG5vZGUs
IGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGJvb2wgc3Vic2V0KQoreworICAgIFRJbnRlcm1UeXBl
ZCogbmV3Tm9kZTsKKyAgICBUT3BlcmF0b3IgYmFzaWNPcDsKKworICAgIC8vCisgICAgLy8gRmly
c3QsIGNvbnZlcnQgdHlwZXMgYXMgbmVlZGVkLgorICAgIC8vCisgICAgc3dpdGNoIChvcCkgewor
ICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMjoKKyAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzM6Cisg
ICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWM0OgorICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MjoKKyAg
ICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQ0OgorICAg
IGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6CisgICAgICAgIGJhc2ljT3AgPSBFT3BDb25zdHJ1Y3RG
bG9hdDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMyOgorICAg
IGNhc2UgRU9wQ29uc3RydWN0SVZlYzM6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjNDoKKyAg
ICBjYXNlIEVPcENvbnN0cnVjdEludDoKKyAgICAgICAgYmFzaWNPcCA9IEVPcENvbnN0cnVjdElu
dDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMyOgorICAgIGNh
c2UgRU9wQ29uc3RydWN0QlZlYzM6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjNDoKKyAgICBj
YXNlIEVPcENvbnN0cnVjdEJvb2w6CisgICAgICAgIGJhc2ljT3AgPSBFT3BDb25zdHJ1Y3RCb29s
OworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGVycm9yKGxpbmUsICJ1
bnN1cHBvcnRlZCBjb25zdHJ1Y3Rpb24iLCAiIik7CisgICAgICAgIHJlY292ZXIoKTsKKworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgbmV3Tm9kZSA9IGludGVybWVkaWF0ZS5hZGRVbmFy
eU1hdGgoYmFzaWNPcCwgbm9kZSwgbm9kZS0+Z2V0TGluZSgpLCBzeW1ib2xUYWJsZSk7CisgICAg
aWYgKG5ld05vZGUgPT0gMCkgeworICAgICAgICBlcnJvcihsaW5lLCAiY2FuJ3QgY29udmVydCIs
ICJjb25zdHJ1Y3RvciIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLworICAg
IC8vIE5vdywgaWYgdGhlcmUgc3RpbGwgaXNuJ3QgYW4gb3BlcmF0aW9uIHRvIGRvIHRoZSBjb25z
dHJ1Y3Rpb24sIGFuZCB3ZSBuZWVkIG9uZSwgYWRkIG9uZS4KKyAgICAvLworICAgIAorICAgIC8v
IE90aGVyd2lzZSwgc2tpcCBvdXQgZWFybHkuCisgICAgaWYgKHN1YnNldCB8fCAobmV3Tm9kZSAh
PSBub2RlICYmIG5ld05vZGUtPmdldFR5cGUoKSA9PSAqdHlwZSkpCisgICAgICAgIHJldHVybiBu
ZXdOb2RlOworCisgICAgLy8gc2V0QWdncmVnYXRlT3BlcmF0b3Igd2lsbCBpbnNlcnQgYSBuZXcg
bm9kZSBmb3IgdGhlIGNvbnN0cnVjdG9yLCBhcyBuZWVkZWQuCisgICAgcmV0dXJuIGludGVybWVk
aWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcihuZXdOb2RlLCBvcCwgbGluZSk7Cit9CisKKy8vIFRo
aXMgZnVuY3Rpb24gdGVzdHMgZm9yIHRoZSB0eXBlIG9mIHRoZSBwYXJhbWV0ZXJzIHRvIHRoZSBz
dHJ1Y3R1cmVzIGNvbnN0cnVjdG9ycy4gUmFpc2VzCisvLyBhbiBlcnJvciBtZXNzYWdlIGlmIHRo
ZSBleHBlY3RlZCB0eXBlIGRvZXMgbm90IG1hdGNoIHRoZSBwYXJhbWV0ZXIgcGFzc2VkIHRvIHRo
ZSBjb25zdHJ1Y3Rvci4KKy8vCisvLyBSZXR1cm5zIDAgZm9yIGFuIGVycm9yIG9yIHRoZSBpbnB1
dCBub2RlIGl0c2VsZiBpZiB0aGUgZXhwZWN0ZWQgYW5kIHRoZSBnaXZlbiBwYXJhbWV0ZXIgdHlw
ZXMgbWF0Y2guCisvLworVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RTdHJ1
Y3QoVEludGVybU5vZGUqIG5vZGUsIFRUeXBlKiB0eXBlLCBpbnQgcGFyYW1Db3VudCwgY29uc3Qg
VFNvdXJjZUxvYyYgbGluZSwgYm9vbCBzdWJzZXQpCit7CisgICAgaWYgKCp0eXBlID09IG5vZGUt
PmdldEFzVHlwZWQoKS0+Z2V0VHlwZSgpKSB7CisgICAgICAgIGlmIChzdWJzZXQpCisgICAgICAg
ICAgICByZXR1cm4gbm9kZS0+Z2V0QXNUeXBlZCgpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICByZXR1cm4gaW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5vZGUtPmdldEFzVHlw
ZWQoKSwgRU9wQ29uc3RydWN0U3RydWN0LCBsaW5lKTsKKyAgICB9IGVsc2UgeworICAgICAgICBz
dGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgIGV4dHJhSW5mb1N0cmVh
bSA8PCAiY2Fubm90IGNvbnZlcnQgcGFyYW1ldGVyICIgPDwgcGFyYW1Db3VudCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIDw8ICIgZnJvbSAnIiA8PCBub2RlLT5nZXRBc1R5cGVkKCktPmdldFR5
cGUoKS5nZXRCYXNpY1N0cmluZygpCisgICAgICAgICAgICAgICAgICAgICAgICA8PCAiJyB0byAn
IiA8PCB0eXBlLT5nZXRCYXNpY1N0cmluZygpIDw8ICInIjsKKyAgICAgICAgc3RkOjpzdHJpbmcg
ZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICBlcnJvcihsaW5lLCAi
IiwgImNvbnN0cnVjdG9yIiwgZXh0cmFJbmZvLmNfc3RyKCkpOworICAgICAgICByZWNvdmVyKCk7
CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKy8vCisvLyBUaGlzIGZ1bmN0aW9uIHJldHVy
bnMgdGhlIHRyZWUgcmVwcmVzZW50YXRpb24gZm9yIHRoZSB2ZWN0b3IgZmllbGQocykgYmVpbmcg
YWNjZXNzZWQgZnJvbSBjb250YW50IHZlY3Rvci4KKy8vIElmIG9ubHkgb25lIGNvbXBvbmVudCBv
ZiB2ZWN0b3IgaXMgYWNjZXNzZWQgKHYueCBvciB2WzBdIHdoZXJlIHYgaXMgYSBjb250YW50IHZl
Y3RvciksIHRoZW4gYSBjb250YW50IG5vZGUgaXMKKy8vIHJldHVybmVkLCBlbHNlIGFuIGFnZ3Jl
Z2F0ZSBub2RlIGlzIHJldHVybmVkIChmb3Igdi54eSkuIFRoZSBpbnB1dCB0byB0aGlzIGZ1bmN0
aW9uIGNvdWxkIGVpdGhlciBiZSB0aGUgc3ltYm9sCisvLyBub2RlIG9yIGl0IGNvdWxkIGJlIHRo
ZSBpbnRlcm1lZGlhdGUgdHJlZSByZXByZXNlbnRhdGlvbiBvZiBhY2Nlc3NpbmcgZmllbGRzIGlu
IGEgY29uc3RhbnQgc3RydWN0dXJlIG9yIGNvbHVtbiBvZiAKKy8vIGEgY29uc3RhbnQgbWF0cml4
LgorLy8KK1RJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RWZWN0b3JOb2RlKFRW
ZWN0b3JGaWVsZHMmIGZpZWxkcywgVEludGVybVR5cGVkKiBub2RlLCBjb25zdCBUU291cmNlTG9j
JiBsaW5lKQoreworICAgIFRJbnRlcm1UeXBlZCogdHlwZWROb2RlOworICAgIFRJbnRlcm1Db25z
dGFudFVuaW9uKiB0ZW1wQ29uc3RhbnROb2RlID0gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7
CisKKyAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5OworICAgIGlmICh0ZW1wQ29uc3RhbnRO
b2RlKSB7CisgICAgICAgIHVuaW9uQXJyYXkgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRVbmlvbkFy
cmF5UG9pbnRlcigpOworCisgICAgICAgIGlmICghdW5pb25BcnJheSkgeworICAgICAgICAgICAg
cmV0dXJuIG5vZGU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeyAvLyBUaGUgbm9kZSBoYXMgdG8g
YmUgZWl0aGVyIGEgc3ltYm9sIG5vZGUgb3IgYW4gYWdncmVnYXRlIG5vZGUgb3IgYSB0ZW1wQ29u
c3RhbnQgbm9kZSwgZWxzZSwgaXRzIGFuIGVycm9yCisgICAgICAgIGVycm9yKGxpbmUsICJDYW5u
b3Qgb2Zmc2V0IGludG8gdGhlIHZlY3RvciIsICJFcnJvciIpOworICAgICAgICByZWNvdmVyKCk7
CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiogY29uc3RB
cnJheSA9IG5ldyBDb25zdGFudFVuaW9uW2ZpZWxkcy5udW1dOworCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBmaWVsZHMubnVtOyBpKyspIHsKKyAgICAgICAgaWYgKGZpZWxkcy5vZmZzZXRzW2ld
ID49IG5vZGUtPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKSB7CisgICAgICAgICAgICBzdGQ6
OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgICAgICBleHRyYUluZm9TdHJl
YW0gPDwgInZlY3RvciBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICciIDw8IGZpZWxkcy5v
ZmZzZXRzW2ldIDw8ICInIjsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4
dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIsIGV4
dHJhSW5mby5jX3N0cigpKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgICAgIGZp
ZWxkcy5vZmZzZXRzW2ldID0gMDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY29uc3RB
cnJheVtpXSA9IHVuaW9uQXJyYXlbZmllbGRzLm9mZnNldHNbaV1dOworCisgICAgfSAKKyAgICB0
eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbihjb25zdEFycmF5LCBub2Rl
LT5nZXRUeXBlKCksIGxpbmUpOworICAgIHJldHVybiB0eXBlZE5vZGU7Cit9CisKKy8vCisvLyBU
aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNvbHVtbiBiZWluZyBhY2Nlc3NlZCBmcm9tIGEgY29u
c3RhbnQgbWF0cml4LiBUaGUgdmFsdWVzIGFyZSByZXRyaWV2ZWQgZnJvbQorLy8gdGhlIHN5bWJv
bCB0YWJsZSBhbmQgcGFyc2UtdHJlZSBpcyBidWlsdCBmb3IgYSB2ZWN0b3IgKGVhY2ggY29sdW1u
IG9mIGEgbWF0cml4IGlzIGEgdmVjdG9yKS4gVGhlIGlucHV0IAorLy8gdG8gdGhlIGZ1bmN0aW9u
IGNvdWxkIGVpdGhlciBiZSBhIHN5bWJvbCBub2RlIChtWzBdIHdoZXJlIG0gaXMgYSBjb25zdGFu
dCBtYXRyaXgpdGhhdCByZXByZXNlbnRzIGEgCisvLyBjb25zdGFudCBtYXRyaXggb3IgaXQgY291
bGQgYmUgdGhlIHRyZWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbnN0YW50IG1hdHJpeCAocy5t
MVswXSB3aGVyZSBzIGlzIGEgY29uc3RhbnQgc3RydWN0dXJlKQorLy8KK1RJbnRlcm1UeXBlZCog
VFBhcnNlQ29udGV4dDo6YWRkQ29uc3RNYXRyaXhOb2RlKGludCBpbmRleCwgVEludGVybVR5cGVk
KiBub2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQoreworICAgIFRJbnRlcm1UeXBlZCogdHlw
ZWROb2RlOworICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiB0ZW1wQ29uc3RhbnROb2RlID0gbm9k
ZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisKKyAgICBpZiAoaW5kZXggPj0gbm9kZS0+Z2V0VHlw
ZSgpLmdldE5vbWluYWxTaXplKCkpIHsKKyAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJ
bmZvU3RyZWFtOworICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgIm1hdHJpeCBmaWVsZCBzZWxl
Y3Rpb24gb3V0IG9mIHJhbmdlICciIDw8IGluZGV4IDw8ICInIjsKKyAgICAgICAgc3RkOjpzdHJp
bmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICBlcnJvcihsaW5l
LCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7CisgICAgICAgIHJlY292ZXIoKTsKKyAgICAg
ICAgaW5kZXggPSAwOworICAgIH0KKworICAgIGlmICh0ZW1wQ29uc3RhbnROb2RlKSB7CisgICAg
ICAgICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5p
b25BcnJheVBvaW50ZXIoKTsKKyAgICAgICAgIGludCBzaXplID0gdGVtcENvbnN0YW50Tm9kZS0+
Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCk7CisgICAgICAgICB0eXBlZE5vZGUgPSBpbnRlcm1l
ZGlhdGUuYWRkQ29uc3RhbnRVbmlvbigmdW5pb25BcnJheVtzaXplKmluZGV4XSwgdGVtcENvbnN0
YW50Tm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlcnJvcihs
aW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSBtYXRyaXgiLCAiRXJyb3IiKTsKKyAgICAgICAg
cmVjb3ZlcigpOworCisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiB0eXBl
ZE5vZGU7Cit9CisKKworLy8KKy8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBlbGVtZW50IG9m
IGFuIGFycmF5IGFjY2Vzc2VkIGZyb20gYSBjb25zdGFudCBhcnJheS4gVGhlIHZhbHVlcyBhcmUg
cmV0cmlldmVkIGZyb20KKy8vIHRoZSBzeW1ib2wgdGFibGUgYW5kIHBhcnNlLXRyZWUgaXMgYnVp
bHQgZm9yIHRoZSB0eXBlIG9mIHRoZSBlbGVtZW50LiBUaGUgaW5wdXQgCisvLyB0byB0aGUgZnVu
Y3Rpb24gY291bGQgZWl0aGVyIGJlIGEgc3ltYm9sIG5vZGUgKGFbMF0gd2hlcmUgYSBpcyBhIGNv
bnN0YW50IGFycmF5KXRoYXQgcmVwcmVzZW50cyBhIAorLy8gY29uc3RhbnQgYXJyYXkgb3IgaXQg
Y291bGQgYmUgdGhlIHRyZWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbnN0YW50IGFycmF5IChz
LmExWzBdIHdoZXJlIHMgaXMgYSBjb25zdGFudCBzdHJ1Y3R1cmUpCisvLworVEludGVybVR5cGVk
KiBUUGFyc2VDb250ZXh0OjphZGRDb25zdEFycmF5Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBl
ZCogbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKK3sKKyAgICBUSW50ZXJtVHlwZWQqIHR5
cGVkTm9kZTsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0YW50Tm9kZSA9IG5v
ZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAgIFRUeXBlIGFycmF5RWxlbWVudFR5cGUgPSBu
b2RlLT5nZXRUeXBlKCk7CisgICAgYXJyYXlFbGVtZW50VHlwZS5jbGVhckFycmF5bmVzcygpOwor
CisgICAgaWYgKGluZGV4ID49IG5vZGUtPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSkgeworICAg
ICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgIGV4dHJhSW5m
b1N0cmVhbSA8PCAiYXJyYXkgZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnIiA8PCBpbmRl
eCA8PCAiJyI7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVh
bS5zdHIoKTsKKyAgICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwgZXh0cmFJbmZvLmNfc3RyKCkp
OworICAgICAgICByZWNvdmVyKCk7CisgICAgICAgIGluZGV4ID0gMDsKKyAgICB9CisKKyAgICBp
ZiAodGVtcENvbnN0YW50Tm9kZSkgeworICAgICAgICAgc2l6ZV90IGFycmF5RWxlbWVudFNpemUg
PSBhcnJheUVsZW1lbnRUeXBlLmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgIENvbnN0YW50VW5p
b24qIHVuaW9uQXJyYXkgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigp
OworICAgICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24oJnVu
aW9uQXJyYXlbYXJyYXlFbGVtZW50U2l6ZSAqIGluZGV4XSwgdGVtcENvbnN0YW50Tm9kZS0+Z2V0
VHlwZSgpLCBsaW5lKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90
IG9mZnNldCBpbnRvIHRoZSBhcnJheSIsICJFcnJvciIpOworICAgICAgICByZWNvdmVyKCk7CisK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIHR5cGVkTm9kZTsKK30KKwor
CisvLworLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHBhcnRpY3VsYXIg
ZmllbGQgaW5zaWRlIGEgY29uc3RhbnQgc3RydWN0dXJlIGZyb20gdGhlIHN5bWJvbCB0YWJsZS4g
CisvLyBJZiB0aGVyZSBpcyBhbiBlbWJlZGRlZC9uZXN0ZWQgc3RydWN0LCBpdCBhcHByb3ByaWF0
ZWx5IGNhbGxzIGFkZENvbnN0U3RydWN0TmVzdGVkIG9yIGFkZENvbnN0U3RydWN0RnJvbUFnZ3IK
Ky8vIGZ1bmN0aW9uIGFuZCByZXR1cm5zIHRoZSBwYXJzZS10cmVlIHdpdGggdGhlIHZhbHVlcyBv
ZiB0aGUgZW1iZWRkZWQvbmVzdGVkIHN0cnVjdC4KKy8vCitUSW50ZXJtVHlwZWQqIFRQYXJzZUNv
bnRleHQ6OmFkZENvbnN0U3RydWN0KFRTdHJpbmcmIGlkZW50aWZpZXIsIFRJbnRlcm1UeXBlZCog
bm9kZSwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKK3sKKyAgICBjb25zdCBURmllbGRMaXN0JiBm
aWVsZHMgPSBub2RlLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCktPmZpZWxkcygpOworCisgICAgc2l6
ZV90IGluc3RhbmNlU2l6ZSA9IDA7CisgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8
IGZpZWxkcy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgaWYgKGZpZWxkc1tpbmRleF0tPm5h
bWUoKSA9PSBpZGVudGlmaWVyKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGluc3RhbmNlU2l6ZSArPSBmaWVsZHNbaW5kZXhdLT50eXBlKCktPmdl
dE9iamVjdFNpemUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFRJbnRlcm1UeXBlZCogdHlw
ZWROb2RlID0gMDsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0YW50Tm9kZSA9
IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAgIGlmICh0ZW1wQ29uc3RhbnROb2RlKSB7
CisgICAgICAgICBDb25zdGFudFVuaW9uKiBjb25zdEFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+
Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKworICAgICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24oY29uc3RBcnJheStpbnN0YW5jZVNpemUsIHRlbXBDb25zdGFu
dE5vZGUtPmdldFR5cGUoKSwgbGluZSk7IC8vIHR5cGUgd2lsbCBiZSBjaGFuZ2VkIGluIHRoZSBj
YWxsaW5nIGZ1bmN0aW9uCisgICAgfSBlbHNlIHsKKyAgICAgICAgZXJyb3IobGluZSwgIkNhbm5v
dCBvZmZzZXQgaW50byB0aGUgc3RydWN0dXJlIiwgIkVycm9yIik7CisgICAgICAgIHJlY292ZXIo
KTsKKworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gdHlwZWROb2RlOwor
fQorCitib29sIFRQYXJzZUNvbnRleHQ6OmVudGVyU3RydWN0RGVjbGFyYXRpb24oY29uc3QgVFNv
dXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllcikKK3sKKyAgICArK3N0cnVj
dE5lc3RpbmdMZXZlbDsKKworICAgIC8vIEVtYmVkZGVkIHN0cnVjdHVyZSBkZWZpbml0aW9ucyBh
cmUgbm90IHN1cHBvcnRlZCBwZXIgR0xTTCBFUyBzcGVjLgorICAgIC8vIFRoZXkgYXJlbid0IGFs
bG93ZWQgaW4gR0xTTCBlaXRoZXIsIGJ1dCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzIGhlcmUKKyAg
ICAvLyBzbyB3ZSBkb24ndCByZWx5IG9uIHRoZSBHTFNMIGNvbXBpbGVyIHRvIGNhdGNoIGl0Lgor
ICAgIGlmIChzdHJ1Y3ROZXN0aW5nTGV2ZWwgPiAxKSB7CisgICAgICAgIGVycm9yKGxpbmUsICIi
LCAiRW1iZWRkZWQgc3RydWN0IGRlZmluaXRpb25zIGFyZSBub3QgYWxsb3dlZCIpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgVFBh
cnNlQ29udGV4dDo6ZXhpdFN0cnVjdERlY2xhcmF0aW9uKCkKK3sKKyAgICAtLXN0cnVjdE5lc3Rp
bmdMZXZlbDsKK30KKworbmFtZXNwYWNlIHsKKworY29uc3QgaW50IGtXZWJHTE1heFN0cnVjdE5l
c3RpbmcgPSA0OworCit9ICAvLyBuYW1lc3BhY2UKKworYm9vbCBUUGFyc2VDb250ZXh0OjpzdHJ1
Y3ROZXN0aW5nRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBURmllbGQm
IGZpZWxkKQoreworICAgIGlmICghaXNXZWJHTEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGZpZWxkLnR5cGUoKS0+Z2V0QmFz
aWNUeXBlKCkgIT0gRWJ0U3RydWN0KSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICAvLyBXZSdyZSBhbHJlYWR5IGluc2lkZSBhIHN0cnVjdHVyZSBkZWZpbml0aW9uIGF0IHRo
aXMgcG9pbnQsIHNvIGFkZAorICAgIC8vIG9uZSB0byB0aGUgZmllbGQncyBzdHJ1Y3QgbmVzdGlu
Zy4KKyAgICBpZiAoMSArIGZpZWxkLnR5cGUoKS0+Z2V0RGVlcGVzdFN0cnVjdE5lc3RpbmcoKSA+
IGtXZWJHTE1heFN0cnVjdE5lc3RpbmcpIHsKKyAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gcmVh
c29uU3RyZWFtOworICAgICAgICByZWFzb25TdHJlYW0gPDwgIlJlZmVyZW5jZSBvZiBzdHJ1Y3Qg
dHlwZSAiCisgICAgICAgICAgICAgICAgICAgICA8PCBmaWVsZC50eXBlKCktPmdldFN0cnVjdCgp
LT5uYW1lKCkuY19zdHIoKQorICAgICAgICAgICAgICAgICAgICAgPDwgIiBleGNlZWRzIG1heGlt
dW0gYWxsb3dlZCBuZXN0aW5nIGxldmVsIG9mICIKKyAgICAgICAgICAgICAgICAgICAgIDw8IGtX
ZWJHTE1heFN0cnVjdE5lc3Rpbmc7CisgICAgICAgIHN0ZDo6c3RyaW5nIHJlYXNvbiA9IHJlYXNv
blN0cmVhbS5zdHIoKTsKKyAgICAgICAgZXJyb3IobGluZSwgcmVhc29uLmNfc3RyKCksIGZpZWxk
Lm5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKK30KKworLy8KKy8vIFBhcnNlIGFuIGFycmF5IGluZGV4IGV4cHJlc3Np
b24KKy8vCitUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZEluZGV4RXhwcmVzc2lvbihU
SW50ZXJtVHlwZWQgKmJhc2VFeHByZXNzaW9uLCBjb25zdCBUU291cmNlTG9jJiBsb2NhdGlvbiwg
VEludGVybVR5cGVkICppbmRleEV4cHJlc3Npb24pCit7CisgICAgVEludGVybVR5cGVkICppbmRl
eGVkRXhwcmVzc2lvbiA9IE5VTEw7CisKKyAgICBpZiAoIWJhc2VFeHByZXNzaW9uLT5pc0FycmF5
KCkgJiYgIWJhc2VFeHByZXNzaW9uLT5pc01hdHJpeCgpICYmICFiYXNlRXhwcmVzc2lvbi0+aXNW
ZWN0b3IoKSkKKyAgICB7CisgICAgICAgIGlmIChiYXNlRXhwcmVzc2lvbi0+Z2V0QXNTeW1ib2xO
b2RlKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGxvY2F0aW9uLCAiIGxlZnQgb2Yg
J1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCBiYXNlRXhwcmVz
c2lvbi0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3RyKCkpOworICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IobG9jYXRpb24sICIg
bGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICJl
eHByZXNzaW9uIik7CisgICAgICAgIH0KKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKworICAg
IGlmIChpbmRleEV4cHJlc3Npb24tPmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQorICAgIHsK
KyAgICAgICAgaW50IGluZGV4ID0gaW5kZXhFeHByZXNzaW9uLT5nZXRBc0NvbnN0YW50VW5pb24o
KS0+Z2V0SUNvbnN0KDApOworICAgICAgICBpZiAoaW5kZXggPCAwKQorICAgICAgICB7CisgICAg
ICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBpbmZvU3RyZWFtOworICAgICAgICAgICAgaW5mb1N0
cmVhbSA8PCBpbmRleDsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGluZm8gPSBpbmZvU3RyZWFt
LnN0cigpOworICAgICAgICAgICAgZXJyb3IobG9jYXRpb24sICJuZWdhdGl2ZSBpbmRleCIsIGlu
Zm8uY19zdHIoKSk7CisgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICBpbmRleCA9
IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJhc2VFeHByZXNzaW9uLT5nZXRUeXBlKCkuZ2V0
UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChiYXNl
RXhwcmVzc2lvbi0+aXNBcnJheSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8v
IGNvbnN0YW50IGZvbGRpbmcgZm9yIGFycmF5cworICAgICAgICAgICAgICAgIGluZGV4ZWRFeHBy
ZXNzaW9uID0gYWRkQ29uc3RBcnJheU5vZGUoaW5kZXgsIGJhc2VFeHByZXNzaW9uLCBsb2NhdGlv
bik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChiYXNlRXhwcmVzc2lvbi0+
aXNWZWN0b3IoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBjb25zdGFudCBm
b2xkaW5nIGZvciB2ZWN0b3JzCisgICAgICAgICAgICAgICAgVFZlY3RvckZpZWxkcyBmaWVsZHM7
CisgICAgICAgICAgICAgICAgZmllbGRzLm51bSA9IDE7CisgICAgICAgICAgICAgICAgZmllbGRz
Lm9mZnNldHNbMF0gPSBpbmRleDsgLy8gbmVlZCB0byBkbyBpdCB0aGlzIHdheSBiZWNhdXNlIHYu
eHkgc2VuZHMgZmllbGRzIGludGVnZXIgYXJyYXkKKyAgICAgICAgICAgICAgICBpbmRleGVkRXhw
cmVzc2lvbiA9IGFkZENvbnN0VmVjdG9yTm9kZShmaWVsZHMsIGJhc2VFeHByZXNzaW9uLCBsb2Nh
dGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChiYXNlRXhwcmVzc2lv
bi0+aXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBjb25zdGFu
dCBmb2xkaW5nIGZvciBtYXRyaWNlcworICAgICAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9u
ID0gYWRkQ29uc3RNYXRyaXhOb2RlKGluZGV4LCBiYXNlRXhwcmVzc2lvbiwgbG9jYXRpb24pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGJhc2VFeHByZXNzaW9uLT5pc0FycmF5KCkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgaWYgKGluZGV4ID49IGJhc2VFeHByZXNzaW9uLT5nZXRUeXBlKCkuZ2V0QXJy
YXlTaXplKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0
cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgICAgICAgICAgICAgIGV4dHJhSW5m
b1N0cmVhbSA8PCAiYXJyYXkgaW5kZXggb3V0IG9mIHJhbmdlICciIDw8IGluZGV4IDw8ICInIjsK
KyAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3Ry
ZWFtLnN0cigpOworICAgICAgICAgICAgICAgICAgICBlcnJvcihsb2NhdGlvbiwgIiIsICJbIiwg
ZXh0cmFJbmZvLmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAgICByZWNvdmVyKCk7CisgICAg
ICAgICAgICAgICAgICAgIGluZGV4ID0gYmFzZUV4cHJlc3Npb24tPmdldFR5cGUoKS5nZXRBcnJh
eVNpemUoKSAtIDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYg
KGJhc2VFeHByZXNzaW9uLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFGcmFnRGF0YSAmJiBpbmRleCA+
IDAgJiYgIWlzRXh0ZW5zaW9uRW5hYmxlZCgiR0xfRVhUX2RyYXdfYnVmZmVycyIpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IobG9jYXRpb24sICIiLCAiWyIs
ICJhcnJheSBpbmRleGVzIGZvciBnbF9GcmFnRGF0YSBtdXN0IGJlIHplcm8gd2hlbiBHTF9FWFRf
ZHJhd19idWZmZXJzIGlzIGRpc2FibGVkIik7CisgICAgICAgICAgICAgICAgICAgIHJlY292ZXIo
KTsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggPSAwOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKChiYXNlRXhwcmVzc2lvbi0+aXNWZWN0
b3IoKSB8fCBiYXNlRXhwcmVzc2lvbi0+aXNNYXRyaXgoKSkgJiYgYmFzZUV4cHJlc3Npb24tPmdl
dFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpIDw9IGluZGV4KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgICAg
ICAgICBleHRyYUluZm9TdHJlYW0gPDwgImZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIg
PDwgaW5kZXggPDwgIiciOworICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9
IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgICAgICBlcnJvcihsb2NhdGlvbiwg
IiIsICJbIiwgZXh0cmFJbmZvLmNfc3RyKCkpOworICAgICAgICAgICAgICAgIHJlY292ZXIoKTsK
KyAgICAgICAgICAgICAgICBpbmRleCA9IGJhc2VFeHByZXNzaW9uLT5nZXRUeXBlKCkuZ2V0Tm9t
aW5hbFNpemUoKSAtIDE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGluZGV4RXhwcmVz
c2lvbi0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPnNldElD
b25zdChpbmRleCk7CisgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGludGVybWVkaWF0
ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdCwgYmFzZUV4cHJlc3Npb24sIGluZGV4RXhwcmVzc2lv
biwgbG9jYXRpb24pOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IGluZGV4ZWRFeHByZXNzaW9uID0gaW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4SW5kaXJl
Y3QsIGJhc2VFeHByZXNzaW9uLCBpbmRleEV4cHJlc3Npb24sIGxvY2F0aW9uKTsKKyAgICB9CisK
KyAgICBpZiAoaW5kZXhlZEV4cHJlc3Npb24gPT0gMCkKKyAgICB7CisgICAgICAgIENvbnN0YW50
VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgdW5pb25B
cnJheS0+c2V0RkNvbnN0KDAuMGYpOworICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGludGVy
bWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEZsb2F0LCBFYnBI
aWdoLCBFdnFDb25zdCksIGxvY2F0aW9uKTsKKyAgICB9CisgICAgZWxzZSBpZiAoYmFzZUV4cHJl
c3Npb24tPmlzQXJyYXkoKSkKKyAgICB7CisgICAgICAgIGNvbnN0IFRUeXBlICZiYXNlVHlwZSA9
IGJhc2VFeHByZXNzaW9uLT5nZXRUeXBlKCk7CisgICAgICAgIGlmIChiYXNlVHlwZS5nZXRTdHJ1
Y3QoKSkKKyAgICAgICAgeworICAgICAgICAgICAgVFR5cGUgY29weU9mVHlwZShiYXNlVHlwZS5n
ZXRTdHJ1Y3QoKSk7CisgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0VHlwZShjb3B5
T2ZUeXBlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKFRUeXBlKGJhc2VFeHByZXNzaW9uLT5nZXRCYXNp
Y1R5cGUoKSwgYmFzZUV4cHJlc3Npb24tPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksIGJh
c2VFeHByZXNzaW9uLT5nZXROb21pbmFsU2l6ZSgpLCBiYXNlRXhwcmVzc2lvbi0+aXNNYXRyaXgo
KSkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGJhc2VFeHByZXNzaW9uLT5nZXRUeXBlKCku
Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZGV4
ZWRFeHByZXNzaW9uLT5nZXRUeXBlUG9pbnRlcigpLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3QpOwor
ICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGJhc2VFeHByZXNzaW9uLT5pc01hdHJpeCgp
KQorICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBiYXNlRXhwcmVzc2lvbi0+
Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0ID8gRXZxQ29uc3QgOiBFdnFUZW1w
b3Jhcnk7CisgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKFRUeXBlKGJhc2VFeHBy
ZXNzaW9uLT5nZXRCYXNpY1R5cGUoKSwgYmFzZUV4cHJlc3Npb24tPmdldFByZWNpc2lvbigpLCBx
dWFsaWZpZXIsIGJhc2VFeHByZXNzaW9uLT5nZXROb21pbmFsU2l6ZSgpKSk7CisgICAgfQorICAg
IGVsc2UgaWYgKGJhc2VFeHByZXNzaW9uLT5pc1ZlY3RvcigpKQorICAgIHsKKyAgICAgICAgVFF1
YWxpZmllciBxdWFsaWZpZXIgPSBiYXNlRXhwcmVzc2lvbi0+Z2V0VHlwZSgpLmdldFF1YWxpZmll
cigpID09IEV2cUNvbnN0ID8gRXZxQ29uc3QgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgIGluZGV4
ZWRFeHByZXNzaW9uLT5zZXRUeXBlKFRUeXBlKGJhc2VFeHByZXNzaW9uLT5nZXRCYXNpY1R5cGUo
KSwgYmFzZUV4cHJlc3Npb24tPmdldFByZWNpc2lvbigpLCBxdWFsaWZpZXIpKTsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoYmFzZUV4
cHJlc3Npb24tPmdldFR5cGUoKSk7CisgICAgfQorCisgICAgcmV0dXJuIGluZGV4ZWRFeHByZXNz
aW9uOworfQorCisvLworLy8gUGFyc2UgYW4gYXJyYXkgb2Ygc3RyaW5ncyB1c2luZyB5eXBhcnNl
LgorLy8KKy8vIFJldHVybnMgMCBmb3Igc3VjY2Vzcy4KKy8vCitpbnQgUGFQYXJzZVN0cmluZ3Mo
c2l6ZV90IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0
aFtdLAorICAgICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKKyAgICBp
ZiAoKGNvdW50ID09IDApIHx8IChzdHJpbmcgPT0gTlVMTCkpCisgICAgICAgIHJldHVybiAxOwor
CisgICAgaWYgKGdsc2xhbmdfaW5pdGlhbGl6ZShjb250ZXh0KSkKKyAgICAgICAgcmV0dXJuIDE7
CisKKyAgICBpbnQgZXJyb3IgPSBnbHNsYW5nX3NjYW4oY291bnQsIHN0cmluZywgbGVuZ3RoLCBj
b250ZXh0KTsKKyAgICBpZiAoIWVycm9yKQorICAgICAgICBlcnJvciA9IGdsc2xhbmdfcGFyc2Uo
Y29udGV4dCk7CisKKyAgICBnbHNsYW5nX2ZpbmFsaXplKGNvbnRleHQpOworCisgICAgcmV0dXJu
IChlcnJvciA9PSAwKSAmJiAoY29udGV4dC0+bnVtRXJyb3JzKCkgPT0gMCkgPyAwIDogMTsKK30K
KworCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjMyNGU1NzVkMzVi
Mzk5ZDU4OWY0N2NmZWNkNjM0YTVhNDk3ZTZiYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5oCkBA
IC0wLDAgKzEsMTM0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworI2lmbmRlZiBfUEFSU0VSX0hFTFBF
Ul9JTkNMVURFRF8KKyNkZWZpbmUgX1BBUlNFUl9IRUxQRVJfSU5DTFVERURfCisKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL0RpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9sb2NhbGludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9QcmVwcm9jZXNzb3IuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1NoSGFuZGxl
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJsZS5oIgorCitzdHJ1
Y3QgVE1hdHJpeEZpZWxkcyB7CisgICAgYm9vbCB3aG9sZVJvdzsKKyAgICBib29sIHdob2xlQ29s
OworICAgIGludCByb3c7CisgICAgaW50IGNvbDsKK307CisKKy8vCisvLyBUaGUgZm9sbG93aW5n
IGFyZSBleHRyYSB2YXJpYWJsZXMgbmVlZGVkIGR1cmluZyBwYXJzaW5nLCBncm91cGVkIHRvZ2V0
aGVyIHNvCisvLyB0aGV5IGNhbiBiZSBwYXNzZWQgdG8gdGhlIHBhcnNlciB3aXRob3V0IG5lZWRp
bmcgYSBnbG9iYWwuCisvLworc3RydWN0IFRQYXJzZUNvbnRleHQgeworICAgIFRQYXJzZUNvbnRl
eHQoVFN5bWJvbFRhYmxlJiBzeW10LCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dCwgVEludGVybWVk
aWF0ZSYgaW50ZXJtLCBTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsIGludCBv
cHRpb25zLCBib29sIGNoZWNrc1ByZWNFcnJvcnMsIGNvbnN0IGNoYXIqIHNvdXJjZVBhdGgsIFRJ
bmZvU2luayYgaXMpIDoKKyAgICAgICAgICAgIGludGVybWVkaWF0ZShpbnRlcm0pLAorICAgICAg
ICAgICAgc3ltYm9sVGFibGUoc3ltdCksCisgICAgICAgICAgICBzaGFkZXJUeXBlKHR5cGUpLAor
ICAgICAgICAgICAgc2hhZGVyU3BlYyhzcGVjKSwKKyAgICAgICAgICAgIGNvbXBpbGVPcHRpb25z
KG9wdGlvbnMpLAorICAgICAgICAgICAgc291cmNlUGF0aChzb3VyY2VQYXRoKSwKKyAgICAgICAg
ICAgIHRyZWVSb290KDApLAorICAgICAgICAgICAgbG9vcE5lc3RpbmdMZXZlbCgwKSwKKyAgICAg
ICAgICAgIHN0cnVjdE5lc3RpbmdMZXZlbCgwKSwKKyAgICAgICAgICAgIGN1cnJlbnRGdW5jdGlv
blR5cGUoTlVMTCksCisgICAgICAgICAgICBmdW5jdGlvblJldHVybnNWYWx1ZShmYWxzZSksCisg
ICAgICAgICAgICBjaGVja3NQcmVjaXNpb25FcnJvcnMoY2hlY2tzUHJlY0Vycm9ycyksCisgICAg
ICAgICAgICBkaWFnbm9zdGljcyhpcyksCisgICAgICAgICAgICBkaXJlY3RpdmVIYW5kbGVyKGV4
dCwgZGlhZ25vc3RpY3MpLAorICAgICAgICAgICAgcHJlcHJvY2Vzc29yKCZkaWFnbm9zdGljcywg
JmRpcmVjdGl2ZUhhbmRsZXIpLAorICAgICAgICAgICAgc2Nhbm5lcihOVUxMKSB7ICB9CisgICAg
VEludGVybWVkaWF0ZSYgaW50ZXJtZWRpYXRlOyAvLyB0byBob2xkIGFuZCBidWlsZCBhIHBhcnNl
IHRyZWUKKyAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlOyAgIC8vIHN5bWJvbCB0YWJsZSB0
aGF0IGdvZXMgd2l0aCB0aGUgbGFuZ3VhZ2UgY3VycmVudGx5IGJlaW5nIHBhcnNlZAorICAgIFNo
U2hhZGVyVHlwZSBzaGFkZXJUeXBlOyAgICAgICAgICAgICAgLy8gdmVydGV4IG9yIGZyYWdtZW50
IGxhbmd1YWdlIChmdXR1cmU6IHBhY2sgb3IgdW5wYWNrKQorICAgIFNoU2hhZGVyU3BlYyBzaGFk
ZXJTcGVjOyAgICAgICAgICAgICAgLy8gVGhlIGxhbmd1YWdlIHNwZWNpZmljYXRpb24gY29tcGls
ZXIgY29uZm9ybXMgdG8gLSBHTEVTMiBvciBXZWJHTC4KKyAgICBpbnQgY29tcGlsZU9wdGlvbnM7
CisgICAgY29uc3QgY2hhciogc291cmNlUGF0aDsgICAgICAvLyBQYXRoIG9mIHNvdXJjZSBmaWxl
IG9yIE5VTEwuCisgICAgVEludGVybU5vZGUqIHRyZWVSb290OyAgICAgICAvLyByb290IG9mIHBh
cnNlIHRyZWUgYmVpbmcgY3JlYXRlZAorICAgIGludCBsb29wTmVzdGluZ0xldmVsOyAgICAgICAg
Ly8gMCBpZiBvdXRzaWRlIGFsbCBsb29wcworICAgIGludCBzdHJ1Y3ROZXN0aW5nTGV2ZWw7ICAg
ICAgLy8gaW5jcmVtZW50ZWQgd2hpbGUgcGFyc2luZyBhIHN0cnVjdCBkZWNsYXJhdGlvbgorICAg
IGNvbnN0IFRUeXBlKiBjdXJyZW50RnVuY3Rpb25UeXBlOyAgLy8gdGhlIHJldHVybiB0eXBlIG9m
IHRoZSBmdW5jdGlvbiB0aGF0J3MgY3VycmVudGx5IGJlaW5nIHBhcnNlZAorICAgIGJvb2wgZnVu
Y3Rpb25SZXR1cm5zVmFsdWU7ICAgLy8gdHJ1ZSBpZiBhIG5vbi12b2lkIGZ1bmN0aW9uIGhhcyBh
IHJldHVybgorICAgIGJvb2wgY2hlY2tzUHJlY2lzaW9uRXJyb3JzOyAgLy8gdHJ1ZSBpZiBhbiBl
cnJvciB3aWxsIGJlIGdlbmVyYXRlZCB3aGVuIGEgdmFyaWFibGUgaXMgZGVjbGFyZWQgd2l0aG91
dCBwcmVjaXNpb24sIGV4cGxpY2l0IG9yIGltcGxpY2l0LgorICAgIGJvb2wgZnJhZ21lbnRQcmVj
aXNpb25IaWdoOyAgLy8gdHJ1ZSBpZiBoaWdocCBwcmVjaXNpb24gaXMgc3VwcG9ydGVkIGluIHRo
ZSBmcmFnbWVudCBsYW5ndWFnZS4KKyAgICBUU3RyaW5nIEhhc2hFcnJNc2c7CisgICAgVERpYWdu
b3N0aWNzIGRpYWdub3N0aWNzOworICAgIFREaXJlY3RpdmVIYW5kbGVyIGRpcmVjdGl2ZUhhbmRs
ZXI7CisgICAgcHA6OlByZXByb2Nlc3NvciBwcmVwcm9jZXNzb3I7CisgICAgdm9pZCogc2Nhbm5l
cjsKKworICAgIGludCBudW1FcnJvcnMoKSBjb25zdCB7IHJldHVybiBkaWFnbm9zdGljcy5udW1F
cnJvcnMoKTsgfQorICAgIFRJbmZvU2luayYgaW5mb1NpbmsoKSB7IHJldHVybiBkaWFnbm9zdGlj
cy5pbmZvU2luaygpOyB9CisgICAgdm9pZCBlcnJvcihjb25zdCBUU291cmNlTG9jJiBsb2MsIGNv
bnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4sCisgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiBleHRyYUluZm89IiIpOworICAgIHZvaWQgd2FybmluZyhjb25zdCBUU291cmNlTG9j
JiBsb2MsIGNvbnN0IGNoYXIqIHJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4sCisgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mbz0iIik7CisgICAgdm9pZCB0cmFjZShjb25zdCBj
aGFyKiBzdHIpOworICAgIHZvaWQgcmVjb3ZlcigpOworCisgICAgYm9vbCBwYXJzZVZlY3RvckZp
ZWxkcyhjb25zdCBUU3RyaW5nJiwgaW50IHZlY1NpemUsIFRWZWN0b3JGaWVsZHMmLCBjb25zdCBU
U291cmNlTG9jJiBsaW5lKTsKKyAgICBib29sIHBhcnNlTWF0cml4RmllbGRzKGNvbnN0IFRTdHJp
bmcmLCBpbnQgbWF0U2l6ZSwgVE1hdHJpeEZpZWxkcyYsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUp
OworCisgICAgYm9vbCByZXNlcnZlZEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwg
Y29uc3QgVFN0cmluZyYgaWRlbnRpZmllcik7CisgICAgdm9pZCBhc3NpZ25FcnJvcihjb25zdCBU
U291cmNlTG9jJiBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVFN0cmluZyBsZWZ0LCBUU3RyaW5nIHJp
Z2h0KTsKKyAgICB2b2lkIHVuYXJ5T3BFcnJvcihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25z
dCBjaGFyKiBvcCwgVFN0cmluZyBvcGVyYW5kKTsKKyAgICB2b2lkIGJpbmFyeU9wRXJyb3IoY29u
c3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgbGVmdCwgVFN0cmlu
ZyByaWdodCk7CisgICAgYm9vbCBwcmVjaXNpb25FcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2Mm
IGxpbmUsIFRQcmVjaXNpb24gcHJlY2lzaW9uLCBUQmFzaWNUeXBlIHR5cGUpOworICAgIGJvb2wg
bFZhbHVlRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBjaGFyKiBvcCwg
VEludGVybVR5cGVkKik7CisgICAgYm9vbCBjb25zdEVycm9yQ2hlY2soVEludGVybVR5cGVkKiBu
b2RlKTsKKyAgICBib29sIGludGVnZXJFcnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSwgY29u
c3QgY2hhciogdG9rZW4pOworICAgIGJvb2wgZ2xvYmFsRXJyb3JDaGVjayhjb25zdCBUU291cmNl
TG9jJiBsaW5lLCBib29sIGdsb2JhbCwgY29uc3QgY2hhciogdG9rZW4pOworICAgIGJvb2wgY29u
c3RydWN0b3JFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRJbnRlcm1Ob2RlKiwg
VEZ1bmN0aW9uJiwgVE9wZXJhdG9yLCBUVHlwZSopOworICAgIGJvb2wgYXJyYXlTaXplRXJyb3JD
aGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUSW50ZXJtVHlwZWQqIGV4cHIsIGludCYgc2l6
ZSk7CisgICAgYm9vbCBhcnJheVF1YWxpZmllckVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYg
bGluZSwgVFB1YmxpY1R5cGUgdHlwZSk7CisgICAgYm9vbCBhcnJheVR5cGVFcnJvckNoZWNrKGNv
bnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpOworICAgIGJvb2wgYXJyYXlF
cnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQ
dWJsaWNUeXBlIHR5cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKTsKKyAgICBib29sIHZvaWRFcnJv
ckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmLCBjb25zdCBUU3RyaW5nJiwgY29uc3QgVFB1YmxpY1R5
cGUmKTsKKyAgICBib29sIGJvb2xFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmLCBjb25zdCBU
SW50ZXJtVHlwZWQqKTsKKyAgICBib29sIGJvb2xFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2Mm
LCBjb25zdCBUUHVibGljVHlwZSYpOworICAgIGJvb2wgc2FtcGxlckVycm9yQ2hlY2soY29uc3Qg
VFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlLCBjb25zdCBjaGFyKiBy
ZWFzb24pOworICAgIGJvb2wgc3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhjb25zdCBUU291cmNl
TG9jJiBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUpOworICAgIGJvb2wgcGFyYW1ldGVy
U2FtcGxlckVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFF1YWxpZmllciBxdWFs
aWZpZXIsIGNvbnN0IFRUeXBlJiB0eXBlKTsKKyAgICBib29sIG5vbkluaXRDb25zdEVycm9yQ2hl
Y2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5
cGUmIHR5cGUsIGJvb2wgYXJyYXkpOworICAgIGJvb2wgbm9uSW5pdEVycm9yQ2hlY2soY29uc3Qg
VFNvdXJjZUxvYyYgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHR5cGUs
IFRWYXJpYWJsZSomIHZhcmlhYmxlKTsKKyAgICBib29sIHBhcmFtRXJyb3JDaGVjayhjb25zdCBU
U291cmNlTG9jJiBsaW5lLCBUUXVhbGlmaWVyIHF1YWxpZmllciwgVFF1YWxpZmllciBwYXJhbVF1
YWxpZmllciwgVFR5cGUqIHR5cGUpOworICAgIGJvb2wgZXh0ZW5zaW9uRXJyb3JDaGVjayhjb25z
dCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJik7CisKKyAgICBjb25zdCBUUHJhZ21h
JiBwcmFnbWEoKSBjb25zdCB7IHJldHVybiBkaXJlY3RpdmVIYW5kbGVyLnByYWdtYSgpOyB9Cisg
ICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRlbnNpb25CZWhhdmlvcigpIGNvbnN0IHsg
cmV0dXJuIGRpcmVjdGl2ZUhhbmRsZXIuZXh0ZW5zaW9uQmVoYXZpb3IoKTsgfQorICAgIGJvb2wg
c3VwcG9ydHNFeHRlbnNpb24oY29uc3QgY2hhciogZXh0ZW5zaW9uKTsKKyAgICBib29sIGlzRXh0
ZW5zaW9uRW5hYmxlZChjb25zdCBjaGFyKiBleHRlbnNpb24pIGNvbnN0OworCisgICAgYm9vbCBj
b250YWluc1NhbXBsZXIoVFR5cGUmIHR5cGUpOworICAgIGJvb2wgYXJlQWxsQ2hpbGRDb25zdChU
SW50ZXJtQWdncmVnYXRlKiBhZ2dyTm9kZSk7CisgICAgY29uc3QgVEZ1bmN0aW9uKiBmaW5kRnVu
Y3Rpb24oY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVEZ1bmN0aW9uKiBwZm5DYWxsLCBib29sICpi
dWlsdEluID0gMCk7CisgICAgYm9vbCBleGVjdXRlSW5pdGlhbGl6ZXIoY29uc3QgVFNvdXJjZUxv
YyYgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHBUeXBlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5pdGlhbGl6ZXIsIFRJbnRlcm1O
b2RlKiYgaW50ZXJtTm9kZSwgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDApOworCisgICAgVEludGVy
bVR5cGVkKiBhZGRDb25zdHJ1Y3RvcihUSW50ZXJtTm9kZSosIGNvbnN0IFRUeXBlKiwgVE9wZXJh
dG9yLCBURnVuY3Rpb24qLCBjb25zdCBUU291cmNlTG9jJik7CisgICAgVEludGVybVR5cGVkKiBm
b2xkQ29uc3RDb25zdHJ1Y3RvcihUSW50ZXJtQWdncmVnYXRlKiBhZ2dyTm9kZSwgY29uc3QgVFR5
cGUmIHR5cGUpOworICAgIFRJbnRlcm1UeXBlZCogY29uc3RydWN0U3RydWN0KFRJbnRlcm1Ob2Rl
KiwgVFR5cGUqLCBpbnQsIGNvbnN0IFRTb3VyY2VMb2MmLCBib29sIHN1YnNldCk7CisgICAgVElu
dGVybVR5cGVkKiBjb25zdHJ1Y3RCdWlsdEluKGNvbnN0IFRUeXBlKiwgVE9wZXJhdG9yLCBUSW50
ZXJtTm9kZSosIGNvbnN0IFRTb3VyY2VMb2MmLCBib29sIHN1YnNldCk7CisgICAgVEludGVybVR5
cGVkKiBhZGRDb25zdFZlY3Rvck5vZGUoVFZlY3RvckZpZWxkcyYsIFRJbnRlcm1UeXBlZCosIGNv
bnN0IFRTb3VyY2VMb2MmKTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0TWF0cml4Tm9kZShp
bnQgLCBUSW50ZXJtVHlwZWQqLCBjb25zdCBUU291cmNlTG9jJik7CisgICAgVEludGVybVR5cGVk
KiBhZGRDb25zdEFycmF5Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBlZCogbm9kZSwgY29uc3Qg
VFNvdXJjZUxvYyYgbGluZSk7CisgICAgVEludGVybVR5cGVkKiBhZGRDb25zdFN0cnVjdChUU3Ry
aW5nJiAsIFRJbnRlcm1UeXBlZCosIGNvbnN0IFRTb3VyY2VMb2MmKTsKKyAgICBUSW50ZXJtVHlw
ZWQqIGFkZEluZGV4RXhwcmVzc2lvbihUSW50ZXJtVHlwZWQgKmJhc2VFeHByZXNzaW9uLCBjb25z
dCBUU291cmNlTG9jJiBsb2NhdGlvbiwgVEludGVybVR5cGVkICppbmRleEV4cHJlc3Npb24pOwor
CisgICAgLy8gUGVyZm9ybXMgYW4gZXJyb3IgY2hlY2sgZm9yIGVtYmVkZGVkIHN0cnVjdCBkZWNs
YXJhdGlvbnMuCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIGFuIGVycm9yIHdhcyByYWlzZWQgZHVl
IHRvIHRoZSBkZWNsYXJhdGlvbiBvZgorICAgIC8vIHRoaXMgc3RydWN0LgorICAgIGJvb2wgZW50
ZXJTdHJ1Y3REZWNsYXJhdGlvbihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5n
JiBpZGVudGlmaWVyKTsKKyAgICB2b2lkIGV4aXRTdHJ1Y3REZWNsYXJhdGlvbigpOworCisgICAg
Ym9vbCBzdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25z
dCBURmllbGQmIGZpZWxkKTsKK307CisKK2ludCBQYVBhcnNlU3RyaW5ncyhzaXplX3QgY291bnQs
IGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAg
ICAgICAgICAgICAgVFBhcnNlQ29udGV4dCogY29udGV4dCk7CisKKyNlbmRpZiAvLyBfUEFSU0VS
X0hFTFBFUl9JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1Bvb2xBbGxvYy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Qb29sQWxsb2MuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFi
ZTcwMjYyZjJkMGQ5ZWYwMTUwMjU1YTMzZTY1ZmRkMGU5MzNmNTcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Qb29sQWxs
b2MuY3BwCkBAIC0wLDAgKzEsMjk0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9Qb29sQWxsb2MuaCIKKworI2lmbmRlZiBfTVNDX1ZFUgorI2lu
Y2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUg
ImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0
aWFsaXplR2xvYmFscy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Ivb3NpbmNsdWRl
LmgiCisKK09TX1RMU0luZGV4IFBvb2xJbmRleCA9IE9TX0lOVkFMSURfVExTX0lOREVYOworCiti
b29sIEluaXRpYWxpemVQb29sSW5kZXgoKQoreworICAgIGFzc2VydChQb29sSW5kZXggPT0gT1Nf
SU5WQUxJRF9UTFNfSU5ERVgpOworCisgICAgUG9vbEluZGV4ID0gT1NfQWxsb2NUTFNJbmRleCgp
OworICAgIHJldHVybiBQb29sSW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7Cit9CisKK3Zv
aWQgRnJlZVBvb2xJbmRleCgpCit7CisgICAgYXNzZXJ0KFBvb2xJbmRleCAhPSBPU19JTlZBTElE
X1RMU19JTkRFWCk7CisKKyAgICBPU19GcmVlVExTSW5kZXgoUG9vbEluZGV4KTsKKyAgICBQb29s
SW5kZXggPSBPU19JTlZBTElEX1RMU19JTkRFWDsKK30KKworVFBvb2xBbGxvY2F0b3IqIEdldEds
b2JhbFBvb2xBbGxvY2F0b3IoKQoreworICAgIGFzc2VydChQb29sSW5kZXggIT0gT1NfSU5WQUxJ
RF9UTFNfSU5ERVgpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUUG9vbEFsbG9jYXRvcio+KE9T
X0dldFRMU1ZhbHVlKFBvb2xJbmRleCkpOworfQorCit2b2lkIFNldEdsb2JhbFBvb2xBbGxvY2F0
b3IoVFBvb2xBbGxvY2F0b3IqIHBvb2xBbGxvY2F0b3IpCit7CisgICAgYXNzZXJ0KFBvb2xJbmRl
eCAhPSBPU19JTlZBTElEX1RMU19JTkRFWCk7CisgICAgT1NfU2V0VExTVmFsdWUoUG9vbEluZGV4
LCBwb29sQWxsb2NhdG9yKTsKK30KKworLy8KKy8vIEltcGxlbWVudCB0aGUgZnVuY3Rpb25hbGl0
eSBvZiB0aGUgVFBvb2xBbGxvY2F0b3IgY2xhc3MsIHdoaWNoCisvLyBpcyBkb2N1bWVudGVkIGlu
IFBvb2xBbGxvYy5oLgorLy8KK1RQb29sQWxsb2NhdG9yOjpUUG9vbEFsbG9jYXRvcihpbnQgZ3Jv
d3RoSW5jcmVtZW50LCBpbnQgYWxsb2NhdGlvbkFsaWdubWVudCkgOiAKKyAgICBwYWdlU2l6ZShn
cm93dGhJbmNyZW1lbnQpLAorICAgIGFsaWdubWVudChhbGxvY2F0aW9uQWxpZ25tZW50KSwKKyAg
ICBmcmVlTGlzdCgwKSwKKyAgICBpblVzZUxpc3QoMCksCisgICAgbnVtQ2FsbHMoMCksCisgICAg
dG90YWxCeXRlcygwKQoreworICAgIC8vCisgICAgLy8gRG9uJ3QgYWxsb3cgcGFnZSBzaXplcyB3
ZSBrbm93IGFyZSBzbWFsbGVyIHRoYW4gYWxsIGNvbW1vbgorICAgIC8vIE9TIHBhZ2Ugc2l6ZXMu
CisgICAgLy8KKyAgICBpZiAocGFnZVNpemUgPCA0KjEwMjQpCisgICAgICAgIHBhZ2VTaXplID0g
NCoxMDI0OworCisgICAgLy8KKyAgICAvLyBBIGxhcmdlIGN1cnJlbnRQYWdlT2Zmc2V0IGluZGlj
YXRlcyBhIG5ldyBwYWdlIG5lZWRzIHRvCisgICAgLy8gYmUgb2J0YWluZWQgdG8gYWxsb2NhdGUg
bWVtb3J5LgorICAgIC8vCisgICAgY3VycmVudFBhZ2VPZmZzZXQgPSBwYWdlU2l6ZTsKKworICAg
IC8vCisgICAgLy8gQWRqdXN0IGFsaWdubWVudCB0byBiZSBhdCBsZWFzdCBwb2ludGVyIGFsaWdu
ZWQgYW5kCisgICAgLy8gcG93ZXIgb2YgMi4KKyAgICAvLworICAgIHNpemVfdCBtaW5BbGlnbiA9
IHNpemVvZih2b2lkKik7CisgICAgYWxpZ25tZW50ICY9IH4obWluQWxpZ24gLSAxKTsKKyAgICBp
ZiAoYWxpZ25tZW50IDwgbWluQWxpZ24pCisgICAgICAgIGFsaWdubWVudCA9IG1pbkFsaWduOwor
ICAgIHNpemVfdCBhID0gMTsKKyAgICB3aGlsZSAoYSA8IGFsaWdubWVudCkKKyAgICAgICAgYSA8
PD0gMTsKKyAgICBhbGlnbm1lbnQgPSBhOworICAgIGFsaWdubWVudE1hc2sgPSBhIC0gMTsKKwor
ICAgIC8vCisgICAgLy8gQWxpZ24gaGVhZGVyIHNraXAKKyAgICAvLworICAgIGhlYWRlclNraXAg
PSBtaW5BbGlnbjsKKyAgICBpZiAoaGVhZGVyU2tpcCA8IHNpemVvZih0SGVhZGVyKSkgeworICAg
ICAgICBoZWFkZXJTa2lwID0gKHNpemVvZih0SGVhZGVyKSArIGFsaWdubWVudE1hc2spICYgfmFs
aWdubWVudE1hc2s7CisgICAgfQorfQorCitUUG9vbEFsbG9jYXRvcjo6flRQb29sQWxsb2NhdG9y
KCkKK3sKKyAgICB3aGlsZSAoaW5Vc2VMaXN0KSB7CisgICAgICAgIHRIZWFkZXIqIG5leHQgPSBp
blVzZUxpc3QtPm5leHRQYWdlOworICAgICAgICBpblVzZUxpc3QtPn50SGVhZGVyKCk7CisgICAg
ICAgIGRlbGV0ZSBbXSByZWludGVycHJldF9jYXN0PGNoYXIqPihpblVzZUxpc3QpOworICAgICAg
ICBpblVzZUxpc3QgPSBuZXh0OworICAgIH0KKworICAgIC8vIFdlIHNob3VsZCBub3QgY2hlY2sg
dGhlIGd1YXJkIGJsb2NrcworICAgIC8vIGhlcmUsIGJlY2F1c2Ugd2UgZGlkIGl0IGFscmVhZHkg
d2hlbiB0aGUgYmxvY2sgd2FzCisgICAgLy8gcGxhY2VkIGludG8gdGhlIGZyZWUgbGlzdC4KKyAg
ICAvLworICAgIHdoaWxlIChmcmVlTGlzdCkgeworICAgICAgICB0SGVhZGVyKiBuZXh0ID0gZnJl
ZUxpc3QtPm5leHRQYWdlOworICAgICAgICBkZWxldGUgW10gcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oZnJlZUxpc3QpOworICAgICAgICBmcmVlTGlzdCA9IG5leHQ7CisgICAgfQorfQorCisvLyBT
dXBwb3J0IE1TVkMrKyA2LjAKK2NvbnN0IHVuc2lnbmVkIGNoYXIgVEFsbG9jYXRpb246Omd1YXJk
QmxvY2tCZWdpblZhbCA9IDB4ZmI7Citjb25zdCB1bnNpZ25lZCBjaGFyIFRBbGxvY2F0aW9uOjpn
dWFyZEJsb2NrRW5kVmFsICAgPSAweGZlOworY29uc3QgdW5zaWduZWQgY2hhciBUQWxsb2NhdGlv
bjo6dXNlckRhdGFGaWxsICAgICAgID0gMHhjZDsKKworI2lmZGVmIEdVQVJEX0JMT0NLUworICAg
IGNvbnN0IHNpemVfdCBUQWxsb2NhdGlvbjo6Z3VhcmRCbG9ja1NpemUgPSAxNjsKKyNlbHNlCisg
ICAgY29uc3Qgc2l6ZV90IFRBbGxvY2F0aW9uOjpndWFyZEJsb2NrU2l6ZSA9IDA7CisjZW5kaWYK
KworLy8KKy8vIENoZWNrIGEgc2luZ2xlIGd1YXJkIGJsb2NrIGZvciBkYW1hZ2UKKy8vCit2b2lk
IFRBbGxvY2F0aW9uOjpjaGVja0d1YXJkQmxvY2sodW5zaWduZWQgY2hhciogYmxvY2tNZW0sIHVu
c2lnbmVkIGNoYXIgdmFsLCBjb25zdCBjaGFyKiBsb2NUZXh0KSBjb25zdAoreworI2lmZGVmIEdV
QVJEX0JMT0NLUworICAgIGZvciAoc2l6ZV90IHggPSAwOyB4IDwgZ3VhcmRCbG9ja1NpemU7IHgr
KykgeworICAgICAgICBpZiAoYmxvY2tNZW1beF0gIT0gdmFsKSB7CisgICAgICAgICAgICBjaGFy
IGFzc2VydE1zZ1s4MF07CisKKyAgICAgICAgICAgIC8vIFdlIGRvbid0IHByaW50IHRoZSBhc3Nl
cnQgbWVzc2FnZS4gIEl0J3MgaGVyZSBqdXN0IHRvIGJlIGhlbHBmdWwuCisjaWYgZGVmaW5lZChf
TVNDX1ZFUikKKyAgICAgICAgICAgIHNucHJpbnRmKGFzc2VydE1zZywgc2l6ZW9mKGFzc2VydE1z
ZyksICJQb29sQWxsb2M6IERhbWFnZSAlcyAlSXUgYnl0ZSBhbGxvY2F0aW9uIGF0IDB4JXBcbiIs
CisgICAgICAgICAgICAgICAgICAgIGxvY1RleHQsIHNpemUsIGRhdGEoKSk7CisjZWxzZQorICAg
ICAgICAgICAgc25wcmludGYoYXNzZXJ0TXNnLCBzaXplb2YoYXNzZXJ0TXNnKSwgIlBvb2xBbGxv
YzogRGFtYWdlICVzICV6dSBieXRlIGFsbG9jYXRpb24gYXQgMHglcFxuIiwKKyAgICAgICAgICAg
ICAgICAgICAgbG9jVGV4dCwgc2l6ZSwgZGF0YSgpKTsKKyNlbmRpZgorICAgICAgICAgICAgYXNz
ZXJ0KDAgJiYgIlBvb2xBbGxvYzogRGFtYWdlIGluIGd1YXJkIGJsb2NrIik7CisgICAgICAgIH0K
KyAgICB9CisjZW5kaWYKK30KKworCit2b2lkIFRQb29sQWxsb2NhdG9yOjpwdXNoKCkKK3sKKyAg
ICB0QWxsb2NTdGF0ZSBzdGF0ZSA9IHsgY3VycmVudFBhZ2VPZmZzZXQsIGluVXNlTGlzdCB9Owor
CisgICAgc3RhY2sucHVzaF9iYWNrKHN0YXRlKTsKKyAgICAgICAgCisgICAgLy8KKyAgICAvLyBJ
bmRpY2F0ZSB0aGVyZSBpcyBubyBjdXJyZW50IHBhZ2UgdG8gYWxsb2NhdGUgZnJvbS4KKyAgICAv
LworICAgIGN1cnJlbnRQYWdlT2Zmc2V0ID0gcGFnZVNpemU7Cit9CisKKy8vCisvLyBEbyBhIG1h
c3MtZGVhbGxvY2F0aW9uIG9mIGFsbCB0aGUgaW5kaXZpZHVhbCBhbGxvY2F0aW9ucworLy8gdGhh
dCBoYXZlIG9jY3VycmVkIHNpbmNlIHRoZSBsYXN0IHB1c2goKSwgb3Igc2luY2UgdGhlCisvLyBs
YXN0IHBvcCgpLCBvciBzaW5jZSB0aGUgb2JqZWN0J3MgY3JlYXRpb24uCisvLworLy8gVGhlIGRl
YWxsb2NhdGVkIHBhZ2VzIGFyZSBzYXZlZCBmb3IgZnV0dXJlIGFsbG9jYXRpb25zLgorLy8KK3Zv
aWQgVFBvb2xBbGxvY2F0b3I6OnBvcCgpCit7CisgICAgaWYgKHN0YWNrLnNpemUoKSA8IDEpCisg
ICAgICAgIHJldHVybjsKKworICAgIHRIZWFkZXIqIHBhZ2UgPSBzdGFjay5iYWNrKCkucGFnZTsK
KyAgICBjdXJyZW50UGFnZU9mZnNldCA9IHN0YWNrLmJhY2soKS5vZmZzZXQ7CisKKyAgICB3aGls
ZSAoaW5Vc2VMaXN0ICE9IHBhZ2UpIHsKKyAgICAgICAgLy8gaW52b2tlIGRlc3RydWN0b3IgdG8g
ZnJlZSBhbGxvY2F0aW9uIGxpc3QKKyAgICAgICAgaW5Vc2VMaXN0LT5+dEhlYWRlcigpOworICAg
ICAgICAKKyAgICAgICAgdEhlYWRlciogbmV4dEluVXNlID0gaW5Vc2VMaXN0LT5uZXh0UGFnZTsK
KyAgICAgICAgaWYgKGluVXNlTGlzdC0+cGFnZUNvdW50ID4gMSkKKyAgICAgICAgICAgIGRlbGV0
ZSBbXSByZWludGVycHJldF9jYXN0PGNoYXIqPihpblVzZUxpc3QpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIGluVXNlTGlzdC0+bmV4dFBhZ2UgPSBmcmVlTGlzdDsKKyAgICAgICAgICAg
IGZyZWVMaXN0ID0gaW5Vc2VMaXN0OworICAgICAgICB9CisgICAgICAgIGluVXNlTGlzdCA9IG5l
eHRJblVzZTsKKyAgICB9CisKKyAgICBzdGFjay5wb3BfYmFjaygpOworfQorCisvLworLy8gRG8g
YSBtYXNzLWRlYWxsb2NhdGlvbiBvZiBhbGwgdGhlIGluZGl2aWR1YWwgYWxsb2NhdGlvbnMKKy8v
IHRoYXQgaGF2ZSBvY2N1cnJlZC4KKy8vCit2b2lkIFRQb29sQWxsb2NhdG9yOjpwb3BBbGwoKQor
eworICAgIHdoaWxlIChzdGFjay5zaXplKCkgPiAwKQorICAgICAgICBwb3AoKTsKK30KKwordm9p
ZCogVFBvb2xBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBudW1CeXRlcykKK3sKKyAgICAvLwor
ICAgIC8vIEp1c3Qga2VlcCBzb21lIGludGVyZXN0aW5nIHN0YXRpc3RpY3MuCisgICAgLy8KKyAg
ICArK251bUNhbGxzOworICAgIHRvdGFsQnl0ZXMgKz0gbnVtQnl0ZXM7CisKKyAgICAvLyBJZiB3
ZSBhcmUgdXNpbmcgZ3VhcmQgYmxvY2tzLCBhbGwgYWxsb2NhdGlvbnMgYXJlIGJyYWNrZXRlZCBi
eQorICAgIC8vIHRoZW06IFtndWFyZGJsb2NrXVthbGxvY2F0aW9uXVtndWFyZGJsb2NrXS4gIG51
bUJ5dGVzIGlzIGhvdworICAgIC8vIG11Y2ggbWVtb3J5IHRoZSBjYWxsZXIgYXNrZWQgZm9yLiAg
YWxsb2NhdGlvblNpemUgaXMgdGhlIHRvdGFsCisgICAgLy8gc2l6ZSBpbmNsdWRpbmcgZ3VhcmQg
YmxvY2tzLiAgSW4gcmVsZWFzZSBidWlsZCwKKyAgICAvLyBndWFyZEJsb2NrU2l6ZT0wIGFuZCB0
aGlzIGFsbCBnZXRzIG9wdGltaXplZCBhd2F5LgorICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9
IFRBbGxvY2F0aW9uOjphbGxvY2F0aW9uU2l6ZShudW1CeXRlcyk7CisgICAgLy8gRGV0ZWN0IGlu
dGVnZXIgb3ZlcmZsb3cuCisgICAgaWYgKGFsbG9jYXRpb25TaXplIDwgbnVtQnl0ZXMpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgLy8KKyAgICAvLyBEbyB0aGUgYWxsb2NhdGlvbiwgbW9zdCBs
aWtlbHkgY2FzZSBmaXJzdCwgZm9yIGVmZmljaWVuY3kuCisgICAgLy8gVGhpcyBzdGVwIGNvdWxk
IGJlIG1vdmVkIHRvIGJlIGlubGluZSBzb21ldGltZS4KKyAgICAvLworICAgIGlmIChhbGxvY2F0
aW9uU2l6ZSA8PSBwYWdlU2l6ZSAtIGN1cnJlbnRQYWdlT2Zmc2V0KSB7CisgICAgICAgIC8vCisg
ICAgICAgIC8vIFNhZmUgdG8gYWxsb2NhdGUgZnJvbSBjdXJyZW50UGFnZU9mZnNldC4KKyAgICAg
ICAgLy8KKyAgICAgICAgdW5zaWduZWQgY2hhciogbWVtb3J5ID0gcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBjaGFyICo+KGluVXNlTGlzdCkgKyBjdXJyZW50UGFnZU9mZnNldDsKKyAgICAgICAg
Y3VycmVudFBhZ2VPZmZzZXQgKz0gYWxsb2NhdGlvblNpemU7CisgICAgICAgIGN1cnJlbnRQYWdl
T2Zmc2V0ID0gKGN1cnJlbnRQYWdlT2Zmc2V0ICsgYWxpZ25tZW50TWFzaykgJiB+YWxpZ25tZW50
TWFzazsKKworICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZUFsbG9jYXRpb24oaW5Vc2VMaXN0LCBt
ZW1vcnksIG51bUJ5dGVzKTsKKyAgICB9CisKKyAgICBpZiAoYWxsb2NhdGlvblNpemUgPiBwYWdl
U2l6ZSAtIGhlYWRlclNraXApIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRG8gYSBtdWx0aS1w
YWdlIGFsbG9jYXRpb24uICBEb24ndCBtaXggdGhlc2Ugd2l0aCB0aGUgb3RoZXJzLgorICAgICAg
ICAvLyBUaGUgT1MgaXMgZWZmaWNpZW50IGFuZCBhbGxvY2F0aW5nIGFuZCBmcmVlLWluZyBtdWx0
aXBsZSBwYWdlcy4KKyAgICAgICAgLy8KKyAgICAgICAgc2l6ZV90IG51bUJ5dGVzVG9BbGxvYyA9
IGFsbG9jYXRpb25TaXplICsgaGVhZGVyU2tpcDsKKyAgICAgICAgLy8gRGV0ZWN0IGludGVnZXIg
b3ZlcmZsb3cuCisgICAgICAgIGlmIChudW1CeXRlc1RvQWxsb2MgPCBhbGxvY2F0aW9uU2l6ZSkK
KyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIHRIZWFkZXIqIG1lbW9yeSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dEhlYWRlcio+KDo6bmV3IGNoYXJbbnVtQnl0ZXNUb0FsbG9jXSk7CisgICAg
ICAgIGlmIChtZW1vcnkgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIC8v
IFVzZSBwbGFjZW1lbnQtbmV3IHRvIGluaXRpYWxpemUgaGVhZGVyCisgICAgICAgIG5ldyhtZW1v
cnkpIHRIZWFkZXIoaW5Vc2VMaXN0LCAobnVtQnl0ZXNUb0FsbG9jICsgcGFnZVNpemUgLSAxKSAv
IHBhZ2VTaXplKTsKKyAgICAgICAgaW5Vc2VMaXN0ID0gbWVtb3J5OworCisgICAgICAgIGN1cnJl
bnRQYWdlT2Zmc2V0ID0gcGFnZVNpemU7ICAvLyBtYWtlIG5leHQgYWxsb2NhdGlvbiBjb21lIGZy
b20gYSBuZXcgcGFnZQorCisgICAgICAgIC8vIE5vIGd1YXJkIGJsb2NrcyBmb3IgbXVsdGktcGFn
ZSBhbGxvY2F0aW9ucyAoeWV0KQorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1lbW9yeSkgKyBoZWFkZXJTa2lwKTsKKyAg
ICB9CisKKyAgICAvLworICAgIC8vIE5lZWQgYSBzaW1wbGUgcGFnZSB0byBhbGxvY2F0ZSBmcm9t
LgorICAgIC8vCisgICAgdEhlYWRlciogbWVtb3J5OworICAgIGlmIChmcmVlTGlzdCkgeworICAg
ICAgICBtZW1vcnkgPSBmcmVlTGlzdDsKKyAgICAgICAgZnJlZUxpc3QgPSBmcmVlTGlzdC0+bmV4
dFBhZ2U7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbWVtb3J5ID0gcmVpbnRlcnByZXRfY2FzdDx0
SGVhZGVyKj4oOjpuZXcgY2hhcltwYWdlU2l6ZV0pOworICAgICAgICBpZiAobWVtb3J5ID09IDAp
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLyBVc2UgcGxhY2VtZW50LW5l
dyB0byBpbml0aWFsaXplIGhlYWRlcgorICAgIG5ldyhtZW1vcnkpIHRIZWFkZXIoaW5Vc2VMaXN0
LCAxKTsKKyAgICBpblVzZUxpc3QgPSBtZW1vcnk7CisgICAgCisgICAgdW5zaWduZWQgY2hhciog
cmV0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyICo+KGluVXNlTGlzdCkgKyBoZWFk
ZXJTa2lwOworICAgIGN1cnJlbnRQYWdlT2Zmc2V0ID0gKGhlYWRlclNraXAgKyBhbGxvY2F0aW9u
U2l6ZSArIGFsaWdubWVudE1hc2spICYgfmFsaWdubWVudE1hc2s7CisKKyAgICByZXR1cm4gaW5p
dGlhbGl6ZUFsbG9jYXRpb24oaW5Vc2VMaXN0LCByZXQsIG51bUJ5dGVzKTsKK30KKworCisvLwor
Ly8gQ2hlY2sgYWxsIGFsbG9jYXRpb25zIGluIGEgbGlzdCBmb3IgZGFtYWdlIGJ5IGNhbGxpbmcg
Y2hlY2sgb24gZWFjaC4KKy8vCit2b2lkIFRBbGxvY2F0aW9uOjpjaGVja0FsbG9jTGlzdCgpIGNv
bnN0Cit7CisgICAgZm9yIChjb25zdCBUQWxsb2NhdGlvbiogYWxsb2MgPSB0aGlzOyBhbGxvYyAh
PSAwOyBhbGxvYyA9IGFsbG9jLT5wcmV2QWxsb2MpCisgICAgICAgIGFsbG9jLT5jaGVjaygpOwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvUG9vbEFsbG9jLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9Qb29sQWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZGQyNDljNGQzYTM5YmIyMDFjMzg1
NTQyMzk5MDgwOGY1NWYwN2U1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUG9vbEFsbG9jLmgKQEAgLTAsMCArMSwzMDAg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX1BPT0xBTExPQ19JTkNMVURFRF8KKyNk
ZWZpbmUgX1BPT0xBTExPQ19JTkNMVURFRF8KKworI2lmZGVmIF9ERUJVRworI2RlZmluZSBHVUFS
RF9CTE9DS1MgIC8vIGRlZmluZSB0byBlbmFibGUgZ3VhcmQgYmxvY2sgc2FuaXR5IGNoZWNraW5n
CisjZW5kaWYKKworLy8KKy8vIFRoaXMgaGVhZGVyIGRlZmluZXMgYW4gYWxsb2NhdG9yIHRoYXQg
Y2FuIGJlIHVzZWQgdG8gZWZmaWNpZW50bHkKKy8vIGFsbG9jYXRlIGEgbGFyZ2UgbnVtYmVyIG9m
IHNtYWxsIHJlcXVlc3RzIGZvciBoZWFwIG1lbW9yeSwgd2l0aCB0aGUgCisvLyBpbnRlbnRpb24g
dGhhdCB0aGV5IGFyZSBub3QgaW5kaXZpZHVhbGx5IGRlYWxsb2NhdGVkLCBidXQgcmF0aGVyIAor
Ly8gY29sbGVjdGl2ZWx5IGRlYWxsb2NhdGVkIGF0IG9uZSB0aW1lLgorLy8KKy8vIFRoaXMgc2lt
dWx0YW5lb3VzbHkKKy8vCisvLyAqIE1ha2VzIGVhY2ggaW5kaXZpZHVhbCBhbGxvY2F0aW9uIG11
Y2ggbW9yZSBlZmZpY2llbnQ7IHRoZQorLy8gICAgIHR5cGljYWwgYWxsb2NhdGlvbiBpcyB0cml2
aWFsLgorLy8gKiBDb21wbGV0ZWx5IGF2b2lkcyB0aGUgY29zdCBvZiBkb2luZyBpbmRpdmlkdWFs
IGRlYWxsb2NhdGlvbi4KKy8vICogU2F2ZXMgdGhlIHRyb3VibGUgb2YgdHJhY2tpbmcgZG93biBh
bmQgcGx1Z2dpbmcgYSBsYXJnZSBjbGFzcyBvZiBsZWFrcy4KKy8vCisvLyBJbmRpdmlkdWFsIGNs
YXNzZXMgY2FuIHVzZSB0aGlzIGFsbG9jYXRvciBieSBzdXBwbHlpbmcgdGhlaXIgb3duCisvLyBu
ZXcgYW5kIGRlbGV0ZSBtZXRob2RzLgorLy8KKy8vIFNUTCBjb250YWluZXJzIGNhbiB1c2UgdGhp
cyBhbGxvY2F0b3IgYnkgdXNpbmcgdGhlIHBvb2xfYWxsb2NhdG9yCisvLyBjbGFzcyBhcyB0aGUg
YWxsb2NhdG9yIChzZWNvbmQpIHRlbXBsYXRlIGFyZ3VtZW50LgorLy8KKworI2luY2x1ZGUgPHN0
ZGRlZi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworLy8gSWYg
d2UgYXJlIHVzaW5nIGd1YXJkIGJsb2Nrcywgd2UgbXVzdCB0cmFjayBlYWNoIGluZGl2dWFsCisv
LyBhbGxvY2F0aW9uLiAgSWYgd2UgYXJlbid0IHVzaW5nIGd1YXJkIGJsb2NrcywgdGhlc2UKKy8v
IG5ldmVyIGdldCBpbnN0YW50aWF0ZWQsIHNvIHdvbid0IGhhdmUgYW55IGltcGFjdC4KKy8vIAor
CitjbGFzcyBUQWxsb2NhdGlvbiB7CitwdWJsaWM6CisgICAgVEFsbG9jYXRpb24oc2l6ZV90IHNp
emUsIHVuc2lnbmVkIGNoYXIqIG1lbSwgVEFsbG9jYXRpb24qIHByZXYgPSAwKSA6CisgICAgICAg
IHNpemUoc2l6ZSksIG1lbShtZW0pLCBwcmV2QWxsb2MocHJldikgeworICAgICAgICAvLyBBbGxv
Y2F0aW9ucyBhcmUgYnJhY2tldGVkOgorICAgICAgICAvLyAgICBbYWxsb2NhdGlvbkhlYWRlcl1b
aW5pdGlhbEd1YXJkQmxvY2tdW3VzZXJEYXRhXVtmaW5hbEd1YXJkQmxvY2tdCisgICAgICAgIC8v
IFRoaXMgd291bGQgYmUgY2xlYW5lciB3aXRoIGlmIChndWFyZEJsb2NrU2l6ZSkuLi4sIGJ1dCB0
aGF0CisgICAgICAgIC8vIG1ha2VzIHRoZSBjb21waWxlciBwcmludCB3YXJuaW5ncyBhYm91dCAw
IGxlbmd0aCBtZW1zZXRzLAorICAgICAgICAvLyBldmVuIHdpdGggdGhlIGlmKCkgcHJvdGVjdGlu
ZyB0aGVtLgorI2lmZGVmIEdVQVJEX0JMT0NLUworICAgICAgICBtZW1zZXQocHJlR3VhcmQoKSwg
Z3VhcmRCbG9ja0JlZ2luVmFsLCBndWFyZEJsb2NrU2l6ZSk7CisgICAgICAgIG1lbXNldChkYXRh
KCksICAgICAgdXNlckRhdGFGaWxsLCAgICAgICBzaXplKTsKKyAgICAgICAgbWVtc2V0KHBvc3RH
dWFyZCgpLCBndWFyZEJsb2NrRW5kVmFsLCAgIGd1YXJkQmxvY2tTaXplKTsKKyNlbmRpZgorICAg
IH0KKworICAgIHZvaWQgY2hlY2soKSBjb25zdCB7CisgICAgICAgIGNoZWNrR3VhcmRCbG9jayhw
cmVHdWFyZCgpLCAgZ3VhcmRCbG9ja0JlZ2luVmFsLCAiYmVmb3JlIik7CisgICAgICAgIGNoZWNr
R3VhcmRCbG9jayhwb3N0R3VhcmQoKSwgZ3VhcmRCbG9ja0VuZFZhbCwgICAiYWZ0ZXIiKTsKKyAg
ICB9CisKKyAgICB2b2lkIGNoZWNrQWxsb2NMaXN0KCkgY29uc3Q7CisKKyAgICAvLyBSZXR1cm4g
dG90YWwgc2l6ZSBuZWVkZWQgdG8gYWNjb21vZGF0ZSB1c2VyIGJ1ZmZlciBvZiAnc2l6ZScsCisg
ICAgLy8gcGx1cyBvdXIgdHJhY2tpbmcgZGF0YS4KKyAgICBpbmxpbmUgc3RhdGljIHNpemVfdCBh
bGxvY2F0aW9uU2l6ZShzaXplX3Qgc2l6ZSkgeworICAgICAgICByZXR1cm4gc2l6ZSArIDIgKiBn
dWFyZEJsb2NrU2l6ZSArIGhlYWRlclNpemUoKTsKKyAgICB9CisKKyAgICAvLyBPZmZzZXQgZnJv
bSBzdXJyb3VuZGluZyBidWZmZXIgdG8gZ2V0IHRvIHVzZXIgZGF0YSBidWZmZXIuCisgICAgaW5s
aW5lIHN0YXRpYyB1bnNpZ25lZCBjaGFyKiBvZmZzZXRBbGxvY2F0aW9uKHVuc2lnbmVkIGNoYXIq
IG0pIHsKKyAgICAgICAgcmV0dXJuIG0gKyBndWFyZEJsb2NrU2l6ZSArIGhlYWRlclNpemUoKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBjaGVja0d1YXJkQmxvY2sodW5zaWduZWQgY2hh
ciogYmxvY2tNZW0sIHVuc2lnbmVkIGNoYXIgdmFsLCBjb25zdCBjaGFyKiBsb2NUZXh0KSBjb25z
dDsKKworICAgIC8vIEZpbmQgb2Zmc2V0cyB0byBwcmUgYW5kIHBvc3QgZ3VhcmQgYmxvY2tzLCBh
bmQgdXNlciBkYXRhIGJ1ZmZlcgorICAgIHVuc2lnbmVkIGNoYXIqIHByZUd1YXJkKCkgIGNvbnN0
IHsgcmV0dXJuIG1lbSArIGhlYWRlclNpemUoKTsgfQorICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEo
KSAgICAgIGNvbnN0IHsgcmV0dXJuIHByZUd1YXJkKCkgKyBndWFyZEJsb2NrU2l6ZTsgfQorICAg
IHVuc2lnbmVkIGNoYXIqIHBvc3RHdWFyZCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEoKSArIHNpemU7
IH0KKworICAgIHNpemVfdCBzaXplOyAgICAgICAgICAgICAgICAgIC8vIHNpemUgb2YgdGhlIHVz
ZXIgZGF0YSBhcmVhCisgICAgdW5zaWduZWQgY2hhciogbWVtOyAgICAgICAgICAgLy8gYmVnaW5u
aW5nIG9mIG91ciBhbGxvY2F0aW9uIChwdHMgdG8gaGVhZGVyKQorICAgIFRBbGxvY2F0aW9uKiBw
cmV2QWxsb2M7ICAgICAgIC8vIHByaW9yIGFsbG9jYXRpb24gaW4gdGhlIGNoYWluCisKKyAgICAv
LyBTdXBwb3J0IE1TVkMrKyA2LjAKKyAgICBjb25zdCBzdGF0aWMgdW5zaWduZWQgY2hhciBndWFy
ZEJsb2NrQmVnaW5WYWw7CisgICAgY29uc3Qgc3RhdGljIHVuc2lnbmVkIGNoYXIgZ3VhcmRCbG9j
a0VuZFZhbDsKKyAgICBjb25zdCBzdGF0aWMgdW5zaWduZWQgY2hhciB1c2VyRGF0YUZpbGw7CisK
KyAgICBjb25zdCBzdGF0aWMgc2l6ZV90IGd1YXJkQmxvY2tTaXplOworI2lmZGVmIEdVQVJEX0JM
T0NLUworICAgIGlubGluZSBzdGF0aWMgc2l6ZV90IGhlYWRlclNpemUoKSB7IHJldHVybiBzaXpl
b2YoVEFsbG9jYXRpb24pOyB9CisjZWxzZQorICAgIGlubGluZSBzdGF0aWMgc2l6ZV90IGhlYWRl
clNpemUoKSB7IHJldHVybiAwOyB9CisjZW5kaWYKK307CisKKy8vCisvLyBUaGVyZSBhcmUgc2V2
ZXJhbCBzdGFja3MuICBPbmUgaXMgdG8gdHJhY2sgdGhlIHB1c2hpbmcgYW5kIHBvcHBpbmcKKy8v
IG9mIHRoZSB1c2VyLCBhbmQgbm90IHlldCBpbXBsZW1lbnRlZC4gIFRoZSBvdGhlcnMgYXJlIHNp
bXBseSBhIAorLy8gcmVwb3NpdG9yaWVzIG9mIGZyZWUgcGFnZXMgb3IgdXNlZCBwYWdlcy4KKy8v
CisvLyBQYWdlIHN0YWNrcyBhcmUgbGlua2VkIHRvZ2V0aGVyIHdpdGggYSBzaW1wbGUgaGVhZGVy
IGF0IHRoZSBiZWdpbm5pbmcKKy8vIG9mIGVhY2ggYWxsb2NhdGlvbiBvYnRhaW5lZCBmcm9tIHRo
ZSB1bmRlcmx5aW5nIE9TLiAgTXVsdGktcGFnZSBhbGxvY2F0aW9ucworLy8gYXJlIHJldHVybmVk
IHRvIHRoZSBPUy4gIEluZGl2aWR1YWwgcGFnZSBhbGxvY2F0aW9ucyBhcmUga2VwdCBmb3IgZnV0
dXJlCisvLyByZS11c2UuCisvLworLy8gVGhlICJwYWdlIHNpemUiIHVzZWQgaXMgbm90LCBub3Ig
bXVzdCBpdCBtYXRjaCwgdGhlIHVuZGVybHlpbmcgT1MKKy8vIHBhZ2Ugc2l6ZS4gIEJ1dCwgaGF2
aW5nIGl0IGJlIGFib3V0IHRoYXQgc2l6ZSBvciBlcXVhbCB0byBhIHNldCBvZiAKKy8vIHBhZ2Vz
IGlzIGxpa2VseSBtb3N0IG9wdGltYWwuCisvLworY2xhc3MgVFBvb2xBbGxvY2F0b3IgeworcHVi
bGljOgorICAgIFRQb29sQWxsb2NhdG9yKGludCBncm93dGhJbmNyZW1lbnQgPSA4KjEwMjQsIGlu
dCBhbGxvY2F0aW9uQWxpZ25tZW50ID0gMTYpOworCisgICAgLy8KKyAgICAvLyBEb24ndCBjYWxs
IHRoZSBkZXN0cnVjdG9yIGp1c3QgdG8gZnJlZSB1cCB0aGUgbWVtb3J5LCBjYWxsIHBvcCgpCisg
ICAgLy8KKyAgICB+VFBvb2xBbGxvY2F0b3IoKTsKKworICAgIC8vCisgICAgLy8gQ2FsbCBwdXNo
KCkgdG8gZXN0YWJsaXNoIGEgbmV3IHBsYWNlIHRvIHBvcCBtZW1vcnkgdG9vLiAgRG9lcyBub3QK
KyAgICAvLyBoYXZlIHRvIGJlIGNhbGxlZCB0byBnZXQgdGhpbmdzIHN0YXJ0ZWQuCisgICAgLy8K
KyAgICB2b2lkIHB1c2goKTsKKworICAgIC8vCisgICAgLy8gQ2FsbCBwb3AoKSB0byBmcmVlIGFs
bCBtZW1vcnkgYWxsb2NhdGVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gcHVzaCgpLAorICAgIC8v
IG9yIGlmIG5vIGxhc3QgY2FsbCB0byBwdXNoLCBmcmVlcyBhbGwgbWVtb3J5IHNpbmNlIGZpcnN0
IGFsbG9jYXRpb24uCisgICAgLy8KKyAgICB2b2lkIHBvcCgpOworCisgICAgLy8KKyAgICAvLyBD
YWxsIHBvcEFsbCgpIHRvIGZyZWUgYWxsIG1lbW9yeSBhbGxvY2F0ZWQuCisgICAgLy8KKyAgICB2
b2lkIHBvcEFsbCgpOworCisgICAgLy8KKyAgICAvLyBDYWxsIGFsbG9jYXRlKCkgdG8gYWN0dWFs
bHkgYWNxdWlyZSBtZW1vcnkuICBSZXR1cm5zIDAgaWYgbm8gbWVtb3J5CisgICAgLy8gYXZhaWxh
YmxlLCBvdGhlcndpc2UgYSBwcm9wZXJseSBhbGlnbmVkIHBvaW50ZXIgdG8gJ251bUJ5dGVzJyBv
ZiBtZW1vcnkuCisgICAgLy8KKyAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3QgbnVtQnl0ZXMpOwor
CisgICAgLy8KKyAgICAvLyBUaGVyZSBpcyBubyBkZWFsbG9jYXRlLiAgVGhlIHBvaW50IG9mIHRo
aXMgY2xhc3MgaXMgdGhhdAorICAgIC8vIGRlYWxsb2NhdGlvbiBjYW4gYmUgc2tpcHBlZCBieSB0
aGUgdXNlciBvZiBpdCwgYXMgdGhlIG1vZGVsCisgICAgLy8gb2YgdXNlIGlzIHRvIHNpbXVsdGFu
ZW91c2x5IGRlYWxsb2NhdGUgZXZlcnl0aGluZyBhdCBvbmNlCisgICAgLy8gYnkgY2FsbGluZyBw
b3AoKSwgYW5kIHRvIG5vdCBoYXZlIHRvIHNvbHZlIG1lbW9yeSBsZWFrIHByb2JsZW1zLgorICAg
IC8vCisKK3Byb3RlY3RlZDoKKyAgICBmcmllbmQgc3RydWN0IHRIZWFkZXI7CisgICAgCisgICAg
c3RydWN0IHRIZWFkZXIgeworICAgICAgICB0SGVhZGVyKHRIZWFkZXIqIG5leHRQYWdlLCBzaXpl
X3QgcGFnZUNvdW50KSA6CisgICAgICAgICAgICBuZXh0UGFnZShuZXh0UGFnZSksCisgICAgICAg
ICAgICBwYWdlQ291bnQocGFnZUNvdW50KQorI2lmZGVmIEdVQVJEX0JMT0NLUworICAgICAgICAg
ICwgbGFzdEFsbG9jYXRpb24oMCkKKyNlbmRpZgorICAgICAgICAgICAgeyB9CisKKyAgICAgICAg
fnRIZWFkZXIoKSB7CisjaWZkZWYgR1VBUkRfQkxPQ0tTCisgICAgICAgICAgICBpZiAobGFzdEFs
bG9jYXRpb24pCisgICAgICAgICAgICAgICAgbGFzdEFsbG9jYXRpb24tPmNoZWNrQWxsb2NMaXN0
KCk7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIHRIZWFkZXIqIG5leHRQYWdlOworICAg
ICAgICBzaXplX3QgcGFnZUNvdW50OworI2lmZGVmIEdVQVJEX0JMT0NLUworICAgICAgICBUQWxs
b2NhdGlvbiogbGFzdEFsbG9jYXRpb247CisjZW5kaWYKKyAgICB9OworCisgICAgc3RydWN0IHRB
bGxvY1N0YXRlIHsKKyAgICAgICAgc2l6ZV90IG9mZnNldDsKKyAgICAgICAgdEhlYWRlciogcGFn
ZTsKKyAgICB9OworICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8dEFsbG9jU3RhdGU+IHRBbGxvY1N0
YWNrOworCisgICAgLy8gVHJhY2sgYWxsb2NhdGlvbnMgaWYgYW5kIG9ubHkgaWYgd2UncmUgdXNp
bmcgZ3VhcmQgYmxvY2tzCisgICAgdm9pZCogaW5pdGlhbGl6ZUFsbG9jYXRpb24odEhlYWRlciog
YmxvY2ssIHVuc2lnbmVkIGNoYXIqIG1lbW9yeSwgc2l6ZV90IG51bUJ5dGVzKSB7CisjaWZkZWYg
R1VBUkRfQkxPQ0tTCisgICAgICAgIG5ldyhtZW1vcnkpIFRBbGxvY2F0aW9uKG51bUJ5dGVzLCBt
ZW1vcnksIGJsb2NrLT5sYXN0QWxsb2NhdGlvbik7CisgICAgICAgIGJsb2NrLT5sYXN0QWxsb2Nh
dGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8VEFsbG9jYXRpb24qPihtZW1vcnkpOworI2VuZGlmCisg
ICAgICAgIC8vIFRoaXMgaXMgb3B0aW1pemVkIGVudGlyZWx5IGF3YXkgaWYgR1VBUkRfQkxPQ0tT
IGlzIG5vdCBkZWZpbmVkLgorICAgICAgICByZXR1cm4gVEFsbG9jYXRpb246Om9mZnNldEFsbG9j
YXRpb24obWVtb3J5KTsKKyAgICB9CisKKyAgICBzaXplX3QgcGFnZVNpemU7ICAgICAgICAvLyBn
cmFudWxhcml0eSBvZiBhbGxvY2F0aW9uIGZyb20gdGhlIE9TCisgICAgc2l6ZV90IGFsaWdubWVu
dDsgICAgICAgLy8gYWxsIHJldHVybmVkIGFsbG9jYXRpb25zIHdpbGwgYmUgYWxpZ25lZCBhdCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGdyYW51bGFyaXR5LCB3aGljaCB3
aWxsIGJlIGEgcG93ZXIgb2YgMgorICAgIHNpemVfdCBhbGlnbm1lbnRNYXNrOworICAgIHNpemVf
dCBoZWFkZXJTa2lwOyAgICAgIC8vIGFtb3VudCBvZiBtZW1vcnkgdG8gc2tpcCB0byBtYWtlIHJv
b20gZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgaGVhZGVyIChi
YXNpY2FsbHksIHNpemUgb2YgaGVhZGVyLCByb3VuZGVkCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICB1cCB0byBtYWtlIGl0IGFsaWduZWQKKyAgICBzaXplX3QgY3VycmVudFBh
Z2VPZmZzZXQ7ICAvLyBuZXh0IG9mZnNldCBpbiB0b3Agb2YgaW5Vc2VMaXN0IHRvIGFsbG9jYXRl
IGZyb20KKyAgICB0SGVhZGVyKiBmcmVlTGlzdDsgICAgICAvLyBsaXN0IG9mIHBvcHBlZCBtZW1v
cnkKKyAgICB0SGVhZGVyKiBpblVzZUxpc3Q7ICAgICAvLyBsaXN0IG9mIGFsbCBtZW1vcnkgY3Vy
cmVudGx5IGJlaW5nIHVzZWQKKyAgICB0QWxsb2NTdGFjayBzdGFjazsgICAgICAvLyBzdGFjayBv
ZiB3aGVyZSB0byBhbGxvY2F0ZSBmcm9tLCB0byBwYXJ0aXRpb24gcG9vbAorCisgICAgaW50IG51
bUNhbGxzOyAgICAgICAgICAgLy8ganVzdCBhbiBpbnRlcmVzdGluZyBzdGF0aXN0aWMKKyAgICBz
aXplX3QgdG90YWxCeXRlczsgICAgICAvLyBqdXN0IGFuIGludGVyZXN0aW5nIHN0YXRpc3RpYwor
cHJpdmF0ZToKKyAgICBUUG9vbEFsbG9jYXRvciYgb3BlcmF0b3I9KGNvbnN0IFRQb29sQWxsb2Nh
dG9yJik7ICAvLyBkb250IGFsbG93IGFzc2lnbm1lbnQgb3BlcmF0b3IKKyAgICBUUG9vbEFsbG9j
YXRvcihjb25zdCBUUG9vbEFsbG9jYXRvciYpOyAgLy8gZG9udCBhbGxvdyBkZWZhdWx0IGNvcHkg
Y29uc3RydWN0b3IKK307CisKKworLy8KKy8vIFRoZXJlIGNvdWxkIHBvdGVudGlhbGx5IGJlIG1h
bnkgcG9vbHMgd2l0aCBwb3BzIGhhcHBlbmluZyBhdAorLy8gZGlmZmVyZW50IHRpbWVzLiAgQnV0
IGEgc2ltcGxlIHVzZSBpcyB0byBoYXZlIGEgZ2xvYmFsIHBvcAorLy8gd2l0aCBldmVyeW9uZSB1
c2luZyB0aGUgc2FtZSBnbG9iYWwgYWxsb2NhdG9yLgorLy8KK2V4dGVybiBUUG9vbEFsbG9jYXRv
ciogR2V0R2xvYmFsUG9vbEFsbG9jYXRvcigpOworZXh0ZXJuIHZvaWQgU2V0R2xvYmFsUG9vbEFs
bG9jYXRvcihUUG9vbEFsbG9jYXRvciogcG9vbEFsbG9jYXRvcik7CisKKy8vCisvLyBUaGlzIFNU
TCBjb21wYXRpYmxlIGFsbG9jYXRvciBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIHRoZSBhbGxv
Y2F0b3IKKy8vIHBhcmFtZXRlciB0byB0ZW1wbGF0aXplZCBTVEwgY29udGFpbmVycywgbGlrZSB2
ZWN0b3IgYW5kIG1hcC4KKy8vCisvLyBJdCB3aWxsIHVzZSB0aGUgcG9vbHMgZm9yIGFsbG9jYXRp
b24sIGFuZCBub3QKKy8vIGRvIGFueSBkZWFsbG9jYXRpb24sIGJ1dCB3aWxsIHN0aWxsIGRvIGRl
c3RydWN0aW9uLgorLy8KK3RlbXBsYXRlPGNsYXNzIFQ+CitjbGFzcyBwb29sX2FsbG9jYXRvciB7
CitwdWJsaWM6CisgICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOworICAgIHR5cGVkZWYgcHRy
ZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKKyAgICB0eXBlZGVmIFQqIHBvaW50ZXI7CisgICAgdHlw
ZWRlZiBjb25zdCBUKiBjb25zdF9wb2ludGVyOworICAgIHR5cGVkZWYgVCYgcmVmZXJlbmNlOwor
ICAgIHR5cGVkZWYgY29uc3QgVCYgY29uc3RfcmVmZXJlbmNlOworICAgIHR5cGVkZWYgVCB2YWx1
ZV90eXBlOworCisgICAgdGVtcGxhdGU8Y2xhc3MgT3RoZXI+IAorICAgIHN0cnVjdCByZWJpbmQg
eworICAgICAgICB0eXBlZGVmIHBvb2xfYWxsb2NhdG9yPE90aGVyPiBvdGhlcjsKKyAgICB9Owor
ICAgIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgeCkgY29uc3QgeyByZXR1cm4gJng7IH0KKyAg
ICBjb25zdF9wb2ludGVyIGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIHgpIGNvbnN0IHsgcmV0dXJu
ICZ4OyB9CisKKyAgICBwb29sX2FsbG9jYXRvcigpIDogYWxsb2NhdG9yKEdldEdsb2JhbFBvb2xB
bGxvY2F0b3IoKSkgeyB9CisgICAgcG9vbF9hbGxvY2F0b3IoVFBvb2xBbGxvY2F0b3ImIGEpIDog
YWxsb2NhdG9yKCZhKSB7IH0KKyAgICBwb29sX2FsbG9jYXRvcihjb25zdCBwb29sX2FsbG9jYXRv
cjxUPiYgcCkgOiBhbGxvY2F0b3IocC5hbGxvY2F0b3IpIHsgfQorCisgICAgdGVtcGxhdGUgPGNs
YXNzIE90aGVyPgorICAgIHBvb2xfYWxsb2NhdG9yPFQ+JiBvcGVyYXRvcj0oY29uc3QgcG9vbF9h
bGxvY2F0b3I8T3RoZXI+JiBwKSB7CisgICAgICBhbGxvY2F0b3IgPSBwLmFsbG9jYXRvcjsKKyAg
ICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBPdGhlcj4KKyAg
ICBwb29sX2FsbG9jYXRvcihjb25zdCBwb29sX2FsbG9jYXRvcjxPdGhlcj4mIHApIDogYWxsb2Nh
dG9yKCZwLmdldEFsbG9jYXRvcigpKSB7IH0KKworI2lmIGRlZmluZWQoX19TVU5QUk9fQ0MpICYm
ICFkZWZpbmVkKF9SV1NURF9BTExPQ0FUT1IpCisgICAgLy8gbGliQ1N0ZCBvbiBzb21lIHBsYXRm
b3JtcyBoYXZlIGEgZGlmZmVyZW50IGFsbG9jYXRlL2RlYWxsb2NhdGUgaW50ZXJmYWNlLgorICAg
IC8vIENhbGxlciBwcmUtYmFrZXMgc2l6ZW9mKFQpIGludG8gJ24nIHdoaWNoIGlzIHRoZSBudW1i
ZXIgb2YgYnl0ZXMgdG8gYmUKKyAgICAvLyBhbGxvY2F0ZWQsIG5vdCB0aGUgbnVtYmVyIG9mIGVs
ZW1lbnRzLgorICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdHlwZSBuKSB7IAorICAgICAgICByZXR1
cm4gZ2V0QWxsb2NhdG9yKCkuYWxsb2NhdGUobik7CisgICAgfQorICAgIHZvaWQqIGFsbG9jYXRl
KHNpemVfdHlwZSBuLCBjb25zdCB2b2lkKikgeworICAgICAgICByZXR1cm4gZ2V0QWxsb2NhdG9y
KCkuYWxsb2NhdGUobik7CisgICAgfQorICAgIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiwgc2l6ZV90
eXBlKSB7fQorI2Vsc2UKKyAgICBwb2ludGVyIGFsbG9jYXRlKHNpemVfdHlwZSBuKSB7IAorICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxwb2ludGVyPihnZXRBbGxvY2F0b3IoKS5hbGxv
Y2F0ZShuICogc2l6ZW9mKFQpKSk7CisgICAgfQorICAgIHBvaW50ZXIgYWxsb2NhdGUoc2l6ZV90
eXBlIG4sIGNvbnN0IHZvaWQqKSB7IAorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxw
b2ludGVyPihnZXRBbGxvY2F0b3IoKS5hbGxvY2F0ZShuICogc2l6ZW9mKFQpKSk7CisgICAgfQor
ICAgIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyLCBzaXplX3R5cGUpIHt9CisjZW5kaWYgIC8vIF9S
V1NURF9BTExPQ0FUT1IKKworICAgIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgcCwgY29uc3QgVCYg
dmFsKSB7IG5ldyAoKHZvaWQgKilwKSBUKHZhbCk7IH0KKyAgICB2b2lkIGRlc3Ryb3kocG9pbnRl
ciBwKSB7IHAtPlQ6On5UKCk7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBwb29sX2Fs
bG9jYXRvciYgcmhzKSBjb25zdCB7IHJldHVybiAmZ2V0QWxsb2NhdG9yKCkgPT0gJnJocy5nZXRB
bGxvY2F0b3IoKTsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBwb29sX2FsbG9jYXRvciYg
cmhzKSBjb25zdCB7IHJldHVybiAmZ2V0QWxsb2NhdG9yKCkgIT0gJnJocy5nZXRBbGxvY2F0b3Io
KTsgfQorCisgICAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8c2l6ZV90eXBlPigtMSkgLyBzaXplb2YoVCk7IH0KKyAgICBzaXplX3R5cGUgbWF4X3NpemUo
aW50IHNpemUpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdHlwZT4oLTEpIC8gc2l6
ZTsgfQorCisgICAgdm9pZCBzZXRBbGxvY2F0b3IoVFBvb2xBbGxvY2F0b3IqIGEpIHsgYWxsb2Nh
dG9yID0gYTsgfQorICAgIFRQb29sQWxsb2NhdG9yJiBnZXRBbGxvY2F0b3IoKSBjb25zdCB7IHJl
dHVybiAqYWxsb2NhdG9yOyB9CisKK3Byb3RlY3RlZDoKKyAgICBUUG9vbEFsbG9jYXRvciogYWxs
b2NhdG9yOworfTsKKworI2VuZGlmIC8vIF9QT09MQUxMT0NfSU5DTFVERURfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9QcmFnbWEu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ByYWdt
YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjJmNzQ0MTIzYjgyODk0OThjMzE3OTE0ZWFkM2RmMTM2M2FlODYxNmIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9QcmFnbWEuaApAQCAtMCwwICsxLDE5IEBACisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lm
bmRlZiBDT01QSUxFUl9QUkFHTUFfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJBR01BX0hfCisKK3N0
cnVjdCBUUHJhZ21hIHsKKyAgICAvLyBCeSBkZWZhdWx0IG9wdGltaXphdGlvbiBpcyB0dXJuZWQg
b24gYW5kIGRlYnVnIGlzIHR1cm5lZCBvZmYuCisgICAgVFByYWdtYSgpIDogb3B0aW1pemUodHJ1
ZSksIGRlYnVnKGZhbHNlKSB7IH0KKyAgICBUUHJhZ21hKGJvb2wgbywgYm9vbCBkKSA6IG9wdGlt
aXplKG8pLCBkZWJ1ZyhkKSB7IH0KKworICAgIGJvb2wgb3B0aW1pemU7CisgICAgYm9vbCBkZWJ1
ZzsKK307CisKKyNlbmRpZiAvLyBDT01QSUxFUl9QUkFHTUFfSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1F1YWxpZmllckFsaXZl
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1F1
YWxpZmllckFsaXZlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYmEwODdlMTc2NThkZDQ1NTU2ZDJiZGQzNTBi
OGI3NmViN2Y3YzNjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUXVhbGlmaWVyQWxpdmUuY3BwCkBAIC0wLDAgKzEsNTgg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2lu
dGVybWVkaWF0ZS5oIgorCitjbGFzcyBUQWxpdmVUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRy
YXZlcnNlciB7CitwdWJsaWM6CisgICAgVEFsaXZlVHJhdmVyc2VyKFRRdWFsaWZpZXIgcSkgOiBU
SW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSksIGZvdW5kKGZhbHNlKSwg
cXVhbGlmaWVyKHEpCisgICAgeworICAgIH0KKworCWJvb2wgd2FzRm91bmQoKSB7IHJldHVybiBm
b3VuZDsgfQorCitwcm90ZWN0ZWQ6CisgICAgYm9vbCBmb3VuZDsKKyAgICBUUXVhbGlmaWVyIHF1
YWxpZmllcjsKKworICAgIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOworICAgIGJv
b2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKK307CisKKy8vCisv
LyBSZXBvcnQgd2hldGhlciBvciBub3QgYSB2YXJpYWJsZSBvZiB0aGUgZ2l2ZW4gcXVhbGlmaWVy
IHR5cGUKKy8vIGlzIGd1YXJhbnRlZWQgd3JpdHRlbi4gIE5vdCBhbHdheXMgcG9zc2libGUgdG8g
ZGV0ZXJtaW5lIGlmCisvLyBpdCBpcyB3cml0dGVuIGNvbmRpdGlvbmFsbHkuCisvLworLy8gPz8g
SXQgZG9lcyBub3QgZG8gdGhpcyB3ZWxsIHlldCwgdGhpcyBpcyBqdXN0IGEgcGxhY2UgaG9sZGVy
CisvLyB0aGF0IHNpbXBseSBkZXRlcm1pbmVzIGlmIGl0IHdhcyByZWZlcmVuY2UgYXQgYWxsLCBh
bnl3aGVyZS4KKy8vCitib29sIFF1YWxpZmllcldyaXR0ZW4oVEludGVybU5vZGUqIG5vZGUsIFRR
dWFsaWZpZXIgcXVhbGlmaWVyKQoreworICAgIFRBbGl2ZVRyYXZlcnNlciBpdChxdWFsaWZpZXIp
OworCisgICAgaWYgKG5vZGUpCisgICAgICAgIG5vZGUtPnRyYXZlcnNlKCZpdCk7CisKKyAgICBy
ZXR1cm4gaXQud2FzRm91bmQoKTsKK30KKwordm9pZCBUQWxpdmVUcmF2ZXJzZXI6OnZpc2l0U3lt
Ym9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCit7CisgICAgLy8KKyAgICAvLyBJZiBpdCdzIHdoYXQg
d2UncmUgbG9va2luZyBmb3IsIHJlY29yZCBpdC4KKyAgICAvLworICAgIGlmIChub2RlLT5nZXRR
dWFsaWZpZXIoKSA9PSBxdWFsaWZpZXIpCisgICAgICAgIGZvdW5kID0gdHJ1ZTsKK30KKworYm9v
bCBUQWxpdmVUcmF2ZXJzZXI6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHByZVZpc2l0LCBUSW50ZXJt
U2VsZWN0aW9uKiBub2RlKQoreworICAgIGlmICh3YXNGb3VuZCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1F1YWxpZmllckFsaXZlLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9RdWFsaWZpZXJBbGl2
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjg3MmEwNmY3MjE5MmFmMWQzNzhmNzJkMWVhMjEwZGFlODk5YmJmNGIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9RdWFsaWZpZXJBbGl2ZS5oCkBAIC0wLDAgKzEsNyBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworYm9vbCBRdWFsaWZpZXJXcml0dGVuKFRJbnRlcm1Ob2RlKiByb290LCBUUXVhbGlm
aWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1JlbW92ZVRyZWUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvUmVtb3ZlVHJlZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTJlNWRiYmZlMTQ4
ZTVjYzM5OTQ3MWI3NzhkYTY3OWExOTI3ZTc1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1JlbW92ZVRyZWUuY3BwCkBA
IC0wLDAgKzEsNzcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
UmVtb3ZlVHJlZS5oIgorCisvLworLy8gQ29kZSB0byByZWN1cnNpdmVseSBkZWxldGUgdGhlIGlu
dGVybWVkaWF0ZSB0cmVlLgorLy8KKworY2xhc3MgUmVtb3ZlVHJlZSA6IHB1YmxpYyBUSW50ZXJt
VHJhdmVyc2VyCit7CitwdWJsaWM6CisJUmVtb3ZlVHJlZSgpIDogVEludGVybVRyYXZlcnNlcihm
YWxzZSwgZmFsc2UsIHRydWUpCisJeworCX0KKworcHJvdGVjdGVkOgorCXZvaWQgdmlzaXRTeW1i
b2woVEludGVybVN5bWJvbCopOworCXZvaWQgdmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25z
dGFudFVuaW9uKik7CisJYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFy
eSopOworCWJvb2wgdmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5Kik7CisJYm9v
bCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiopOworCWJvb2wg
dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKK307CisKK3Zv
aWQgUmVtb3ZlVHJlZTo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKK3sKKwlkZWxl
dGUgbm9kZTsKK30KKworYm9vbCBSZW1vdmVUcmVlOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwg
VEludGVybUJpbmFyeSogbm9kZSkKK3sKKwlkZWxldGUgbm9kZTsKKworCXJldHVybiB0cnVlOwor
fQorCitib29sIFJlbW92ZVRyZWU6OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFy
eSogbm9kZSkKK3sKKyAgICBkZWxldGUgbm9kZTsKKworCXJldHVybiB0cnVlOworfQorCitib29s
IFJlbW92ZVRyZWU6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRl
KiBub2RlKQoreworCWRlbGV0ZSBub2RlOworCisJcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVt
b3ZlVHJlZTo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qIG5v
ZGUpCit7CisJZGVsZXRlIG5vZGU7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBSZW1vdmVU
cmVlOjp2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qIG5vZGUpCit7CisJ
ZGVsZXRlIG5vZGU7Cit9CisKKy8vCisvLyBFbnRyeSBwb2ludC4KKy8vCit2b2lkIFJlbW92ZUFs
bFRyZWVOb2RlcyhUSW50ZXJtTm9kZSogcm9vdCkKK3sKKyAgICBSZW1vdmVUcmVlIGl0OworCisg
ICAgcm9vdC0+dHJhdmVyc2UoJml0KTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUmVtb3ZlVHJlZS5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUmVtb3ZlVHJlZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjk3YTgyMTY3OWMyM2ZiOTI4MGIzZWRmNGE3ZThmY2JlNDE1NjE0NjcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9SZW1vdmVUcmVlLmgKQEAgLTAsMCArMSw3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCit2b2lk
IFJlbW92ZUFsbFRyZWVOb2RlcyhUSW50ZXJtTm9kZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUmVuYW1lRnVuY3Rpb24uaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1JlbmFtZUZ1
bmN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMWY3ZmIxNmM0NTk3OWNkMWRhMmJmMTllYTg2MTc5ZDI2NGQ1
ZmZhYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1JlbmFtZUZ1bmN0aW9uLmgKQEAgLTAsMCArMSwzNiBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUkVOQU1FX0ZVTkNUSU9OCisjZGVmaW5lIENPTVBJ
TEVSX1JFTkFNRV9GVU5DVElPTgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRl
cm1lZGlhdGUuaCIKKworLy8KKy8vIFJlbmFtZXMgYSBmdW5jdGlvbiwgaW5jbHVkaW5nIGl0cyBk
ZWNsYXJhdGlvbiBhbmQgYW55IGNhbGxzIHRvIGl0LgorLy8KK2NsYXNzIFJlbmFtZUZ1bmN0aW9u
IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKK3B1YmxpYzoKKyAgICBSZW5hbWVGdW5jdGlv
bihjb25zdCBUU3RyaW5nJiBvbGRGdW5jdGlvbk5hbWUsIGNvbnN0IFRTdHJpbmcmIG5ld0Z1bmN0
aW9uTmFtZSkKKyAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIGZhbHNlKQorICAg
ICwgbU9sZEZ1bmN0aW9uTmFtZShvbGRGdW5jdGlvbk5hbWUpCisgICAgLCBtTmV3RnVuY3Rpb25O
YW1lKG5ld0Z1bmN0aW9uTmFtZSkge30KKworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0
ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKKyAgICB7CisgICAgICAgIFRP
cGVyYXRvciBvcCA9IG5vZGUtPmdldE9wKCk7CisgICAgICAgIGlmICgob3AgPT0gRU9wRnVuY3Rp
b24gfHwgb3AgPT0gRU9wRnVuY3Rpb25DYWxsKSAmJiBub2RlLT5nZXROYW1lKCkgPT0gbU9sZEZ1
bmN0aW9uTmFtZSkKKyAgICAgICAgICAgIG5vZGUtPnNldE5hbWUobU5ld0Z1bmN0aW9uTmFtZSk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBUU3Ry
aW5nIG1PbGRGdW5jdGlvbk5hbWU7CisgICAgY29uc3QgVFN0cmluZyBtTmV3RnVuY3Rpb25OYW1l
OworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9SRU5BTUVfRlVOQ1RJT04KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Jld3JpdGVF
bHNlQmxvY2tzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1Jld3JpdGVFbHNlQmxvY2tzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OGU4N2NkNTdhODgyOGFi
ZjY3Nzc3OWEyMjk3Y2I5YjA2MzAzMmY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUmV3cml0ZUVsc2VCbG9ja3MuY3Bw
CkBAIC0wLDAgKzEsOTggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gUmV3cml0ZUVsc2VCbG9ja3MuY3Bw
OiBJbXBsZW1lbnRhdGlvbiBmb3IgdHJlZSB0cmFuc2Zvcm0gdG8gY2hhbmdlCisvLyAgIGFsbCBp
Zi1lbHNlIGJsb2NrcyB0byBpZi1pZiBibG9ja3MuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9SZXdyaXRlRWxzZUJsb2Nrcy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvTm9kZVNlYXJjaC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9s
VGFibGUuaCIKKworbmFtZXNwYWNlIHNoCit7CisKK1RJbnRlcm1TeW1ib2wgKk1ha2VOZXdUZW1w
b3JhcnkoY29uc3QgVFN0cmluZyAmbmFtZSwgVEJhc2ljVHlwZSB0eXBlKQoreworICAgIFRUeXBl
IHZhcmlhYmxlVHlwZSh0eXBlLCBFYnBIaWdoLCBFdnFJbnRlcm5hbCk7CisgICAgcmV0dXJuIG5l
dyBUSW50ZXJtU3ltYm9sKC0xLCBuYW1lLCB2YXJpYWJsZVR5cGUpOworfQorCitUSW50ZXJtQmlu
YXJ5ICpNYWtlTmV3QmluYXJ5KFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkICpsZWZ0LCBUSW50
ZXJtVHlwZWQgKnJpZ2h0LCBjb25zdCBUVHlwZSAmcmVzdWx0VHlwZSkKK3sKKyAgICBUSW50ZXJt
QmluYXJ5ICpiaW5hcnkgPSBuZXcgVEludGVybUJpbmFyeShvcCk7CisgICAgYmluYXJ5LT5zZXRM
ZWZ0KGxlZnQpOworICAgIGJpbmFyeS0+c2V0UmlnaHQocmlnaHQpOworICAgIGJpbmFyeS0+c2V0
VHlwZShyZXN1bHRUeXBlKTsKKyAgICByZXR1cm4gYmluYXJ5OworfQorCitUSW50ZXJtVW5hcnkg
Kk1ha2VOZXdVbmFyeShUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCAqb3BlcmFuZCkKK3sKKyAg
ICBUSW50ZXJtVW5hcnkgKnVuYXJ5ID0gbmV3IFRJbnRlcm1VbmFyeShvcCwgb3BlcmFuZC0+Z2V0
VHlwZSgpKTsKKyAgICB1bmFyeS0+c2V0T3BlcmFuZChvcGVyYW5kKTsKKyAgICByZXR1cm4gdW5h
cnk7Cit9CisKK2Jvb2wgRWxzZUJsb2NrUmV3cml0ZXI6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZp
c2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQoreworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3Ao
KSkKKyAgICB7CisgICAgICBjYXNlIEVPcFNlcXVlbmNlOgorICAgICAgICB7CisgICAgICAgICAg
ICBmb3IgKHNpemVfdCBzdGF0ZW1lbnRJbmRleCA9IDA7IHN0YXRlbWVudEluZGV4ICE9IG5vZGUt
PmdldFNlcXVlbmNlKCkuc2l6ZSgpOyBzdGF0ZW1lbnRJbmRleCsrKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICpzdGF0ZW1lbnQgPSBub2RlLT5nZXRTZXF1ZW5j
ZSgpW3N0YXRlbWVudEluZGV4XTsKKyAgICAgICAgICAgICAgICBUSW50ZXJtU2VsZWN0aW9uICpz
ZWxlY3Rpb24gPSBzdGF0ZW1lbnQtPmdldEFzU2VsZWN0aW9uTm9kZSgpOworICAgICAgICAgICAg
ICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLT5nZXRGYWxzZUJsb2NrKCkgIT0gTlVMTCkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmdldFNlcXVlbmNl
KClbc3RhdGVtZW50SW5kZXhdID0gcmV3cml0ZVNlbGVjdGlvbihzZWxlY3Rpb24pOworICAgICAg
ICAgICAgICAgICAgICBkZWxldGUgc2VsZWN0aW9uOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDogYnJl
YWs7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1RJbnRlcm1Ob2RlICpFbHNlQmxv
Y2tSZXdyaXRlcjo6cmV3cml0ZVNlbGVjdGlvbihUSW50ZXJtU2VsZWN0aW9uICpzZWxlY3Rpb24p
Cit7CisgICAgQVNTRVJUKHNlbGVjdGlvbi0+Z2V0RmFsc2VCbG9jaygpICE9IE5VTEwpOworCisg
ICAgVFN0cmluZyB0ZW1wb3JhcnlOYW1lID0gImNvbmRfIiArIHN0cihtVGVtcG9yYXJ5SW5kZXgr
Kyk7CisgICAgVEludGVybVR5cGVkICp0eXBlZENvbmRpdGlvbiA9IHNlbGVjdGlvbi0+Z2V0Q29u
ZGl0aW9uKCktPmdldEFzVHlwZWQoKTsKKyAgICBUVHlwZSByZXN1bHRUeXBlKEVidEJvb2wsIEVi
cFVuZGVmaW5lZCk7CisgICAgVEludGVybVN5bWJvbCAqY29uZGl0aW9uU3ltYm9sQSA9IE1ha2VO
ZXdUZW1wb3JhcnkodGVtcG9yYXJ5TmFtZSwgRWJ0Qm9vbCk7CisgICAgVEludGVybVN5bWJvbCAq
Y29uZGl0aW9uU3ltYm9sQiA9IE1ha2VOZXdUZW1wb3JhcnkodGVtcG9yYXJ5TmFtZSwgRWJ0Qm9v
bCk7CisgICAgVEludGVybVN5bWJvbCAqY29uZGl0aW9uU3ltYm9sQyA9IE1ha2VOZXdUZW1wb3Jh
cnkodGVtcG9yYXJ5TmFtZSwgRWJ0Qm9vbCk7CisgICAgVEludGVybUJpbmFyeSAqc3RvcmVDb25k
aXRpb24gPSBNYWtlTmV3QmluYXJ5KEVPcEluaXRpYWxpemUsIGNvbmRpdGlvblN5bWJvbEEsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVkQ29u
ZGl0aW9uLCByZXN1bHRUeXBlKTsKKyAgICBUSW50ZXJtVW5hcnkgKm5lZ2F0ZWRDb25kaXRpb24g
PSBNYWtlTmV3VW5hcnkoRU9wTG9naWNhbE5vdCwgY29uZGl0aW9uU3ltYm9sQik7CisgICAgVElu
dGVybVNlbGVjdGlvbiAqZmFsc2VCbG9jayA9IG5ldyBUSW50ZXJtU2VsZWN0aW9uKG5lZ2F0ZWRD
b25kaXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGVjdGlvbi0+Z2V0RmFsc2VCbG9jaygpLCBOVUxMKTsKKyAgICBUSW50ZXJt
U2VsZWN0aW9uICpuZXdJZkVsc2UgPSBuZXcgVEludGVybVNlbGVjdGlvbihjb25kaXRpb25TeW1i
b2xDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGVjdGlvbi0+Z2V0VHJ1ZUJsb2NrKCksIGZhbHNlQmxvY2spOworCisgICAgVEludGVy
bUFnZ3JlZ2F0ZSAqZGVjbGFyYXRpb24gPSBuZXcgVEludGVybUFnZ3JlZ2F0ZShFT3BEZWNsYXJh
dGlvbik7CisgICAgZGVjbGFyYXRpb24tPmdldFNlcXVlbmNlKCkucHVzaF9iYWNrKHN0b3JlQ29u
ZGl0aW9uKTsKKworICAgIFRJbnRlcm1BZ2dyZWdhdGUgKmJsb2NrID0gbmV3IFRJbnRlcm1BZ2dy
ZWdhdGUoRU9wU2VxdWVuY2UpOworICAgIGJsb2NrLT5nZXRTZXF1ZW5jZSgpLnB1c2hfYmFjayhk
ZWNsYXJhdGlvbik7CisgICAgYmxvY2stPmdldFNlcXVlbmNlKCkucHVzaF9iYWNrKG5ld0lmRWxz
ZSk7CisKKyAgICByZXR1cm4gYmxvY2s7Cit9CisKK3ZvaWQgUmV3cml0ZUVsc2VCbG9ja3MoVElu
dGVybU5vZGUgKm5vZGUpCit7CisgICAgRWxzZUJsb2NrUmV3cml0ZXIgcmV3cml0ZXI7CisgICAg
bm9kZS0+dHJhdmVyc2UoJnJld3JpdGVyKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUmV3cml0ZUVsc2VCbG9ja3Mu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Jld3Jp
dGVFbHNlQmxvY2tzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTAyMjEzMzVjZTcwZmM5NmRmMjNhOTA4YzRkZTVj
MDc1ZTA0OWMxZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1Jld3JpdGVFbHNlQmxvY2tzLmgKQEAgLTAsMCArMSwzOSBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisvLyBSZXdyaXRlRWxzZUJsb2Nrcy5oOiBQcm90b3R5cGUgZm9yIHRy
ZWUgdHJhbnNmb3JtIHRvIGNoYW5nZQorLy8gICBhbGwgaWYtZWxzZSBibG9ja3MgdG8gaWYtaWYg
YmxvY2tzLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9SRVdSSVRFX0VMU0VfQkxPQ0tTX0hfCisj
ZGVmaW5lIENPTVBJTEVSX1JFV1JJVEVfRUxTRV9CTE9DS1NfSF8KKworI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisKK25hbWVzcGFjZSBzaAoreworCitjbGFz
cyBFbHNlQmxvY2tSZXdyaXRlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1Ymxp
YzoKKyAgICAgIEVsc2VCbG9ja1Jld3JpdGVyKCkKKyAgICAgICAgICA6IFRJbnRlcm1UcmF2ZXJz
ZXIoZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSkKKyAgICAgICAgICAsIG1UZW1wb3JhcnlJbmRl
eCgwKQorICAgICAge30KKworICBwcm90ZWN0ZWQ6CisgICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShW
aXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAqYWdncmVnYXRlKTsKKworICBwcml2YXRlOgor
ICAgIGludCBtVGVtcG9yYXJ5SW5kZXg7CisKKyAgICBUSW50ZXJtTm9kZSAqcmV3cml0ZVNlbGVj
dGlvbihUSW50ZXJtU2VsZWN0aW9uICpzZWxlY3Rpb24pOworfTsKKwordm9pZCBSZXdyaXRlRWxz
ZUJsb2NrcyhUSW50ZXJtTm9kZSAqbm9kZSk7CisKK30KKworI2VuZGlmIC8vIENPTVBJTEVSX1JF
V1JJVEVfRUxTRV9CTE9DS1NfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1NlYXJjaFN5bWJvbC5jcHAgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TZWFyY2hTeW1ib2wuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmY3OGM4NGUzNzBkYWY3M2E0NjE1ZjI4Y2JlZGE3ZjBiMzM5MzFjNTQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9TZWFyY2hTeW1ib2wuY3BwCkBAIC0wLDAgKzEsMzggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisv
LyBTZWFyY2hTeW1ib2wgaXMgYW4gQVNUIHRyYXZlcnNlciB0byBkZXRlY3QgdGhlIHVzZSBvZiBh
IGdpdmVuIHN5bWJvbCBuYW1lCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9T
ZWFyY2hTeW1ib2wuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1Npbmsu
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuaCIKKworbmFtZXNw
YWNlIHNoCit7CitTZWFyY2hTeW1ib2w6OlNlYXJjaFN5bWJvbChjb25zdCBUU3RyaW5nICZzeW1i
b2wpIDogbVN5bWJvbChzeW1ib2wpCit7CisgICAgbWF0Y2ggPSBmYWxzZTsKK30KKwordm9pZCBT
ZWFyY2hTeW1ib2w6OnRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIG5vZGUtPnRy
YXZlcnNlKHRoaXMpOworfQorCit2b2lkIFNlYXJjaFN5bWJvbDo6dmlzaXRTeW1ib2woVEludGVy
bVN5bWJvbCAqc3ltYm9sTm9kZSkKK3sKKyAgICBpZiAoc3ltYm9sTm9kZS0+Z2V0U3ltYm9sKCkg
PT0gbVN5bWJvbCkKKyAgICB7CisgICAgICAgIG1hdGNoID0gdHJ1ZTsKKyAgICB9Cit9CisKK2Jv
b2wgU2VhcmNoU3ltYm9sOjpmb3VuZE1hdGNoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbWF0Y2g7
Cit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9TZWFyY2hTeW1ib2wuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1NlYXJjaFN5bWJvbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhkZGQzY2IxYWMz
YTE4MmRlOWUyOTFmMTUxZmMzYjFlZDFhYTk5YWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TZWFyY2hTeW1ib2wuaApA
QCAtMCwwICsxLDMzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gU2VhcmNoU3ltYm9sIGlzIGFu
IEFTVCB0cmF2ZXJzZXIgdG8gZGV0ZWN0IHRoZSB1c2Ugb2YgYSBnaXZlbiBzeW1ib2wgbmFtZQor
Ly8KKworI2lmbmRlZiBDT01QSUxFUl9TRUFSQ0hTWU1CT0xfSF8KKyNkZWZpbmUgQ09NUElMRVJf
U0VBUkNIU1lNQk9MX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVk
aWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCisK
K25hbWVzcGFjZSBzaAoreworY2xhc3MgU2VhcmNoU3ltYm9sIDogcHVibGljIFRJbnRlcm1UcmF2
ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIFNlYXJjaFN5bWJvbChjb25zdCBUU3RyaW5nICZzeW1i
b2wpOworCisgICAgdm9pZCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7CisgICAgdm9pZCB2
aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICpzeW1ib2xOb2RlKTsKKworICAgIGJvb2wgZm91bmRN
YXRjaCgpIGNvbnN0OworCisgIHByb3RlY3RlZDoKKyAgICBjb25zdCBUU3RyaW5nICZtU3ltYm9s
OworICAgIGJvb2wgbWF0Y2g7Cit9OworfQorCisjZW5kaWYgICAvLyBDT01QSUxFUl9TRUFSQ0hT
WU1CT0xfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1NoSGFuZGxlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg4ZTBhNDg3N2FlYjc4NjIy
ODcwZDgzYmNjOGQ2NDFlNTBjMjNkMmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oCkBAIC0wLDAgKzEs
MTgwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9TSEhBTkRMRV9JTkNMVURFRF8K
KyNkZWZpbmUgX1NISEFORExFX0lOQ0xVREVEXworCisvLworLy8gTWFjaGluZSBpbmRlcGVuZGVu
dCBwYXJ0IG9mIHRoZSBjb21waWxlciBwcml2YXRlIG9iamVjdHMKKy8vIHNlbnQgYXMgU2hIYW5k
bGUgdG8gdGhlIGRyaXZlci4KKy8vCisvLyBUaGlzIHNob3VsZCBub3QgYmUgaW5jbHVkZWQgYnkg
ZHJpdmVyIGNvZGUuCisvLworCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9FeHRlbnNpb25CZWhhdmlvci5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSGFzaE5hbWVzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9JbmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3lt
Ym9sVGFibGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5o
IgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oIgor
CitjbGFzcyBMb25nTmFtZU1hcDsKK2NsYXNzIFRDb21waWxlcjsKK2NsYXNzIFREZXBlbmRlbmN5
R3JhcGg7CitjbGFzcyBUcmFuc2xhdG9ySExTTDsKKworLy8KKy8vIEhlbHBlciBmdW5jdGlvbiB0
byBpZGVudGlmeSBzcGVjcyB0aGF0IGFyZSBiYXNlZCBvbiB0aGUgV2ViR0wgc3BlYywKKy8vIGxp
a2UgdGhlIENTUyBTaGFkZXJzIHNwZWMuCisvLworYm9vbCBpc1dlYkdMQmFzZWRTcGVjKFNoU2hh
ZGVyU3BlYyBzcGVjKTsKKworLy8KKy8vIFRoZSBiYXNlIGNsYXNzIHVzZWQgdG8gYmFjayBoYW5k
bGVzIHJldHVybmVkIHRvIHRoZSBkcml2ZXIuCisvLworY2xhc3MgVFNoSGFuZGxlQmFzZSB7Citw
dWJsaWM6CisgICAgVFNoSGFuZGxlQmFzZSgpOworICAgIHZpcnR1YWwgflRTaEhhbmRsZUJhc2Uo
KTsKKyAgICB2aXJ0dWFsIFRDb21waWxlciogZ2V0QXNDb21waWxlcigpIHsgcmV0dXJuIDA7IH0K
KyAgICB2aXJ0dWFsIFRyYW5zbGF0b3JITFNMKiBnZXRBc1RyYW5zbGF0b3JITFNMKCkgeyByZXR1
cm4gMDsgfQorCitwcm90ZWN0ZWQ6CisgICAgLy8gTWVtb3J5IGFsbG9jYXRvci4gQWxsb2NhdGVz
IGFuZCB0cmFja3MgbWVtb3J5IHJlcXVpcmVkIGJ5IHRoZSBjb21waWxlci4KKyAgICAvLyBEZWFs
bG9jYXRlcyBhbGwgbWVtb3J5IHdoZW4gY29tcGlsZXIgaXMgZGVzdHJ1Y3RlZC4KKyAgICBUUG9v
bEFsbG9jYXRvciBhbGxvY2F0b3I7Cit9OworCisvLworLy8gVGhlIGJhc2UgY2xhc3MgZm9yIHRo
ZSBtYWNoaW5lIGRlcGVuZGVudCBjb21waWxlciB0byBkZXJpdmUgZnJvbQorLy8gZm9yIG1hbmFn
aW5nIG9iamVjdCBjb2RlIGZyb20gdGhlIGNvbXBpbGUuCisvLworY2xhc3MgVENvbXBpbGVyIDog
cHVibGljIFRTaEhhbmRsZUJhc2UgeworcHVibGljOgorICAgIFRDb21waWxlcihTaFNoYWRlclR5
cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMpOworICAgIHZpcnR1YWwgflRDb21waWxlcigpOwor
ICAgIHZpcnR1YWwgVENvbXBpbGVyKiBnZXRBc0NvbXBpbGVyKCkgeyByZXR1cm4gdGhpczsgfQor
CisgICAgYm9vbCBJbml0KGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyYgcmVzb3VyY2VzKTsKKyAg
ICBib29sIGNvbXBpbGUoY29uc3QgY2hhciogY29uc3Qgc2hhZGVyU3RyaW5nc1tdLAorICAgICAg
ICAgICAgICAgICBzaXplX3QgbnVtU3RyaW5ncywKKyAgICAgICAgICAgICAgICAgaW50IGNvbXBp
bGVPcHRpb25zKTsKKworICAgIC8vIEdldCByZXN1bHRzIG9mIHRoZSBsYXN0IGNvbXBpbGF0aW9u
LgorICAgIFRJbmZvU2luayYgZ2V0SW5mb1NpbmsoKSB7IHJldHVybiBpbmZvU2luazsgfQorICAg
IGNvbnN0IFRWYXJpYWJsZUluZm9MaXN0JiBnZXRBdHRyaWJzKCkgY29uc3QgeyByZXR1cm4gYXR0
cmliczsgfQorICAgIGNvbnN0IFRWYXJpYWJsZUluZm9MaXN0JiBnZXRVbmlmb3JtcygpIGNvbnN0
IHsgcmV0dXJuIHVuaWZvcm1zOyB9CisgICAgY29uc3QgVFZhcmlhYmxlSW5mb0xpc3QmIGdldFZh
cnlpbmdzKCkgY29uc3QgeyByZXR1cm4gdmFyeWluZ3M7IH0KKyAgICBpbnQgZ2V0TWFwcGVkTmFt
ZU1heExlbmd0aCgpIGNvbnN0OworCisgICAgU2hIYXNoRnVuY3Rpb242NCBnZXRIYXNoRnVuY3Rp
b24oKSBjb25zdCB7IHJldHVybiBoYXNoRnVuY3Rpb247IH0KKyAgICBOYW1lTWFwJiBnZXROYW1l
TWFwKCkgeyByZXR1cm4gbmFtZU1hcDsgfQorICAgIFRTeW1ib2xUYWJsZSYgZ2V0U3ltYm9sVGFi
bGUoKSB7IHJldHVybiBzeW1ib2xUYWJsZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgU2hTaGFkZXJU
eXBlIGdldFNoYWRlclR5cGUoKSBjb25zdCB7IHJldHVybiBzaGFkZXJUeXBlOyB9CisgICAgU2hT
aGFkZXJTcGVjIGdldFNoYWRlclNwZWMoKSBjb25zdCB7IHJldHVybiBzaGFkZXJTcGVjOyB9Cisg
ICAgLy8gSW5pdGlhbGl6ZSBzeW1ib2wtdGFibGUgd2l0aCBidWlsdC1pbiBzeW1ib2xzLgorICAg
IGJvb2wgSW5pdEJ1aWx0SW5TeW1ib2xUYWJsZShjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJl
c291cmNlcyk7CisgICAgLy8gQ2xlYXJzIHRoZSByZXN1bHRzIGZyb20gdGhlIHByZXZpb3VzIGNv
bXBpbGF0aW9uLgorICAgIHZvaWQgY2xlYXJSZXN1bHRzKCk7CisgICAgLy8gUmV0dXJuIHRydWUg
aWYgZnVuY3Rpb24gcmVjdXJzaW9uIGlzIGRldGVjdGVkIG9yIGNhbGwgZGVwdGggZXhjZWVkZWQu
CisgICAgYm9vbCBkZXRlY3RDYWxsRGVwdGgoVEludGVybU5vZGUqIHJvb3QsIFRJbmZvU2luayYg
aW5mb1NpbmssIGJvb2wgbGltaXRDYWxsU3RhY2tEZXB0aCk7CisgICAgLy8gUmV3cml0ZXMgYSBz
aGFkZXIncyBpbnRlcm1lZGlhdGUgdHJlZSBhY2NvcmRpbmcgdG8gdGhlIENTUyBTaGFkZXJzIHNw
ZWMuCisgICAgdm9pZCByZXdyaXRlQ1NTU2hhZGVyKFRJbnRlcm1Ob2RlKiByb290KTsKKyAgICAv
LyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHNoYWRlciBkb2VzIG5vdCBleGNlZWQgdGhlIG1p
bmltdW0KKyAgICAvLyBmdW5jdGlvbmFsaXR5IG1hbmRhdGVkIGluIEdMU0wgMS4wIHNwZWMgQXBw
ZW5kaXggQS4KKyAgICBib29sIHZhbGlkYXRlTGltaXRhdGlvbnMoVEludGVybU5vZGUqIHJvb3Qp
OworICAgIC8vIENvbGxlY3QgaW5mbyBmb3IgYWxsIGF0dHJpYnMsIHVuaWZvcm1zLCB2YXJ5aW5n
cy4KKyAgICB2b2lkIGNvbGxlY3RWYXJpYWJsZXMoVEludGVybU5vZGUqIHJvb3QpOworICAgIC8v
IE1hcCBsb25nIHZhcmlhYmxlIG5hbWVzIGludG8gc2hvcnRlciBvbmVzLgorICAgIHZvaWQgbWFw
TG9uZ1ZhcmlhYmxlTmFtZXMoVEludGVybU5vZGUqIHJvb3QpOworICAgIC8vIFRyYW5zbGF0ZSB0
byBvYmplY3QgY29kZS4KKyAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiBy
b290KSA9IDA7CisgICAgLy8gUmV0dXJucyB0cnVlIGlmLCBhZnRlciBhcHBseWluZyB0aGUgcGFj
a2luZyBydWxlcyBpbiB0aGUgR0xTTCAxLjAxNyBzcGVjCisgICAgLy8gQXBwZW5kaXggQSwgc2Vj
dGlvbiA3LCB0aGUgc2hhZGVyIGRvZXMgbm90IHVzZSB0b28gbWFueSB1bmlmb3Jtcy4KKyAgICBi
b29sIGVuZm9yY2VQYWNraW5nUmVzdHJpY3Rpb25zKCk7CisgICAgLy8gSW5zZXJ0IHN0YXRlbWVu
dHMgdG8gaW5pdGlhbGl6ZSB2YXJ5aW5ncyB3aXRob3V0IHN0YXRpYyB1c2UgaW4gdGhlIGJlZ2lu
bmluZworICAgIC8vIG9mIG1haW4oKS4gSXQgaXMgdG8gd29yayBhcm91bmQgYSBNYWMgZHJpdmVy
IHdoZXJlIHN1Y2ggdmFyeWluZ3MgaW4gYSB2ZXJ0ZXgKKyAgICAvLyBzaGFkZXIgbWF5IGJlIG9w
dGltaXplZCBvdXQgaW5jb3JyZWN0bHkgYXQgY29tcGlsZSB0aW1lLCBjYXVzaW5nIGEgbGluayBm
YWlsdXJlLgorICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byB2
ZXJ0ZXggc2hhZGVycy4KKyAgICB2b2lkIGluaXRpYWxpemVWYXJ5aW5nc1dpdGhvdXRTdGF0aWNV
c2UoVEludGVybU5vZGUqIHJvb3QpOworICAgIC8vIEluc2VydCBnbF9Qb3NpdGlvbiA9IHZlYzQo
MCwwLDAsMCkgdG8gdGhlIGJlZ2lubmluZyBvZiBtYWluKCkuCisgICAgLy8gSXQgaXMgdG8gd29y
ayBhcm91bmQgYSBMaW51eCBkcml2ZXIgYnVnIHdoZXJlIG1pc3NpbmcgdGhpcyBjYXVzZXMgY29t
cGlsZSBmYWlsdXJlCisgICAgLy8gd2hpbGUgc3BlYyBzYXlzIGl0IGlzIGFsbG93ZWQuCisgICAg
Ly8gVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBhcHBsaWVkIHRvIHZlcnRleCBzaGFkZXJz
LgorICAgIHZvaWQgaW5pdGlhbGl6ZUdMUG9zaXRpb24oVEludGVybU5vZGUqIHJvb3QpOworICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2hhZGVyIHBhc3NlcyB0aGUgcmVzdHJpY3Rpb25zIHRo
YXQgYWltIHRvIHByZXZlbnQgdGltaW5nIGF0dGFja3MuCisgICAgYm9vbCBlbmZvcmNlVGltaW5n
UmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290LCBib29sIG91dHB1dEdyYXBoKTsKKyAgICAv
LyBSZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2Ugc2FtcGxlcnMuCisgICAg
Ym9vbCBlbmZvcmNlVmVydGV4U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiBy
b290KTsKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2Ugc2Ft
cGxlciBkZXBlbmRlbnQgdmFsdWVzIHRvIGFmZmVjdCBjb250cm9sIAorICAgIC8vIGZsb3cgb3Ig
aW4gb3BlcmF0aW9ucyB3aG9zZSB0aW1lIGNhbiBkZXBlbmQgb24gdGhlIGlucHV0IHZhbHVlcy4K
KyAgICBib29sIGVuZm9yY2VGcmFnbWVudFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhjb25zdCBU
RGVwZW5kZW5jeUdyYXBoJiBncmFwaCk7CisgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIG1heGlt
dW0gZXhwcmVzc2lvbiBjb21wbGV4aXR5IGJlbG93IHRoZSBsaW1pdC4KKyAgICBib29sIGxpbWl0
RXhwcmVzc2lvbkNvbXBsZXhpdHkoVEludGVybU5vZGUqIHJvb3QpOworICAgIC8vIEdldCBidWls
dC1pbiBleHRlbnNpb25zIHdpdGggZGVmYXVsdCBiZWhhdmlvci4KKyAgICBjb25zdCBURXh0ZW5z
aW9uQmVoYXZpb3ImIGdldEV4dGVuc2lvbkJlaGF2aW9yKCkgY29uc3Q7CisgICAgLy8gR2V0IHRo
ZSByZXNvdXJjZXMgc2V0IGJ5IEluaXRCdWlsdEluU3ltYm9sVGFibGUKKyAgICBjb25zdCBTaEJ1
aWx0SW5SZXNvdXJjZXMmIGdldFJlc291cmNlcygpIGNvbnN0OworCisgICAgY29uc3QgQXJyYXlC
b3VuZHNDbGFtcGVyJiBnZXRBcnJheUJvdW5kc0NsYW1wZXIoKSBjb25zdDsKKyAgICBTaEFycmF5
SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IGdldEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5KCkgY29u
c3Q7CisgICAgY29uc3QgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3ImIGdldEJ1aWx0SW5GdW5jdGlv
bkVtdWxhdG9yKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgU2hTaGFkZXJUeXBlIHNoYWRlclR5
cGU7CisgICAgU2hTaGFkZXJTcGVjIHNoYWRlclNwZWM7CisKKyAgICBpbnQgbWF4VW5pZm9ybVZl
Y3RvcnM7CisgICAgaW50IG1heFZhcnlpbmdWZWN0b3JzOworICAgIGludCBtYXhFeHByZXNzaW9u
Q29tcGxleGl0eTsKKyAgICBpbnQgbWF4Q2FsbFN0YWNrRGVwdGg7CisKKyAgICBTaEJ1aWx0SW5S
ZXNvdXJjZXMgY29tcGlsZVJlc291cmNlczsKKworICAgIC8vIEJ1aWx0LWluIHN5bWJvbCB0YWJs
ZSBmb3IgdGhlIGdpdmVuIGxhbmd1YWdlLCBzcGVjLCBhbmQgcmVzb3VyY2VzLgorICAgIC8vIEl0
IGlzIHByZXNlcnZlZCBmcm9tIGNvbXBpbGUtdG8tY29tcGlsZS4KKyAgICBUU3ltYm9sVGFibGUg
c3ltYm9sVGFibGU7CisgICAgLy8gQnVpbHQtaW4gZXh0ZW5zaW9ucyB3aXRoIGRlZmF1bHQgYmVo
YXZpb3IuCisgICAgVEV4dGVuc2lvbkJlaGF2aW9yIGV4dGVuc2lvbkJlaGF2aW9yOworICAgIGJv
b2wgZnJhZ21lbnRQcmVjaXNpb25IaWdoOworCisgICAgQXJyYXlCb3VuZHNDbGFtcGVyIGFycmF5
Qm91bmRzQ2xhbXBlcjsKKyAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IGNsYW1waW5n
U3RyYXRlZ3k7CisgICAgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IgYnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3I7CisKKyAgICAvLyBSZXN1bHRzIG9mIGNvbXBpbGF0aW9uLgorICAgIFRJbmZvU2luayBp
bmZvU2luazsgIC8vIE91dHB1dCBzaW5rLgorICAgIFRWYXJpYWJsZUluZm9MaXN0IGF0dHJpYnM7
ICAvLyBBY3RpdmUgYXR0cmlidXRlcyBpbiB0aGUgY29tcGlsZWQgc2hhZGVyLgorICAgIFRWYXJp
YWJsZUluZm9MaXN0IHVuaWZvcm1zOyAgLy8gQWN0aXZlIHVuaWZvcm1zIGluIHRoZSBjb21waWxl
ZCBzaGFkZXIuCisgICAgVFZhcmlhYmxlSW5mb0xpc3QgdmFyeWluZ3M7ICAvLyBWYXJ5aW5ncyBp
biB0aGUgY29tcGlsZWQgc2hhZGVyLgorCisgICAgLy8gQ2FjaGVkIGNvcHkgb2YgdGhlIHJlZi1j
b3VudGVkIHNpbmdsZXRvbi4KKyAgICBMb25nTmFtZU1hcCogbG9uZ05hbWVNYXA7CisKKyAgICAv
LyBuYW1lIGhhc2hpbmcuCisgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb247CisgICAg
TmFtZU1hcCBuYW1lTWFwOworfTsKKworLy8KKy8vIFRoaXMgaXMgdGhlIGludGVyZmFjZSBiZXR3
ZWVuIHRoZSBtYWNoaW5lIGluZGVwZW5kZW50IGNvZGUKKy8vIGFuZCB0aGUgbWFjaGluZSBkZXBl
bmRlbnQgY29kZS4KKy8vCisvLyBUaGUgbWFjaGluZSBkZXBlbmRlbnQgY29kZSBzaG91bGQgZGVy
aXZlIGZyb20gdGhlIGNsYXNzZXMKKy8vIGFib3ZlLiBUaGVuIENvbnN0cnVjdCooKSBhbmQgRGVs
ZXRlKigpIHdpbGwgY3JlYXRlIGFuZCAKKy8vIGRlc3Ryb3kgdGhlIG1hY2hpbmUgZGVwZW5kZW50
IG9iamVjdHMsIHdoaWNoIGNvbnRhaW4gdGhlCisvLyBhYm92ZSBtYWNoaW5lIGluZGVwZW5kZW50
IGluZm9ybWF0aW9uLgorLy8KK1RDb21waWxlciogQ29uc3RydWN0Q29tcGlsZXIoCisgICAgU2hT
aGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBTaFNoYWRlck91dHB1dCBvdXRwdXQp
Owordm9pZCBEZWxldGVDb21waWxlcihUQ29tcGlsZXIqKTsKKworI2VuZGlmIC8vIF9TSEhBTkRM
RV9JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1NoYWRlckxhbmcuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU2hhZGVyTGFuZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjA4MjM3
ODYwYzE1ODE2ZTdmNDlhZDI1NWViYWYwNTdmNGJjZjczMgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1NoYWRlckxhbmcu
Y3BwCkBAIC0wLDAgKzEsMzkwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLworLy8gSW1wbGVt
ZW50IHRoZSB0b3AtbGV2ZWwgb2YgaW50ZXJmYWNlIHRvIHRoZSBjb21waWxlciwKKy8vIGFzIGRl
ZmluZWQgaW4gU2hhZGVyTGFuZy5oCisvLworCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5n
LmgiCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVEbGwuaCIKKyNp
bmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvbGVuZ3RoX2xpbWl0cy5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvU2hIYW5kbGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JITFNMLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9W
YXJpYWJsZVBhY2tlci5oIgorCisvLworLy8gVGhpcyBpcyB0aGUgcGxhdGZvcm0gaW5kZXBlbmRl
bnQgaW50ZXJmYWNlIGJldHdlZW4gYW4gT0dMIGRyaXZlcgorLy8gYW5kIHRoZSBzaGFkaW5nIGxh
bmd1YWdlIGNvbXBpbGVyLgorLy8KKworc3RhdGljIGJvb2wgY2hlY2tWYXJpYWJsZU1heExlbmd0
aHMoY29uc3QgU2hIYW5kbGUgaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IGV4cGVjdGVkVmFsdWUpCit7CisgICAgc2l6ZV90IGFjdGl2ZVVuaWZvcm1M
aW1pdCA9IDA7CisgICAgU2hHZXRJbmZvKGhhbmRsZSwgU0hfQUNUSVZFX1VOSUZPUk1fTUFYX0xF
TkdUSCwgJmFjdGl2ZVVuaWZvcm1MaW1pdCk7CisgICAgc2l6ZV90IGFjdGl2ZUF0dHJpYkxpbWl0
ID0gMDsKKyAgICBTaEdldEluZm8oaGFuZGxlLCBTSF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5H
VEgsICZhY3RpdmVBdHRyaWJMaW1pdCk7CisgICAgc2l6ZV90IHZhcnlpbmdMaW1pdCA9IDA7Cisg
ICAgU2hHZXRJbmZvKGhhbmRsZSwgU0hfVkFSWUlOR19NQVhfTEVOR1RILCAmdmFyeWluZ0xpbWl0
KTsKKyAgICByZXR1cm4gKGV4cGVjdGVkVmFsdWUgPT0gYWN0aXZlVW5pZm9ybUxpbWl0ICYmCisg
ICAgICAgICAgICBleHBlY3RlZFZhbHVlID09IGFjdGl2ZUF0dHJpYkxpbWl0ICYmCisgICAgICAg
ICAgICBleHBlY3RlZFZhbHVlID09IHZhcnlpbmdMaW1pdCk7Cit9CisKK3N0YXRpYyBib29sIGNo
ZWNrTWFwcGVkTmFtZU1heExlbmd0aChjb25zdCBTaEhhbmRsZSBoYW5kbGUsIHNpemVfdCBleHBl
Y3RlZFZhbHVlKQoreworICAgIHNpemVfdCBtYXBwZWROYW1lTWF4TGVuZ3RoID0gMDsKKyAgICBT
aEdldEluZm8oaGFuZGxlLCBTSF9NQVBQRURfTkFNRV9NQVhfTEVOR1RILCAmbWFwcGVkTmFtZU1h
eExlbmd0aCk7CisgICAgcmV0dXJuIChleHBlY3RlZFZhbHVlID09IG1hcHBlZE5hbWVNYXhMZW5n
dGgpOworfQorCisvLworLy8gRHJpdmVyIG11c3QgY2FsbCB0aGlzIGZpcnN0LCBvbmNlLCBiZWZv
cmUgZG9pbmcgYW55IG90aGVyIGNvbXBpbGVyIG9wZXJhdGlvbnMuCisvLyBTdWJzZXF1ZW50IGNh
bGxzIHRvIHRoaXMgZnVuY3Rpb24gYXJlIG5vLW9wLgorLy8KK2ludCBTaEluaXRpYWxpemUoKQor
eworICAgIHN0YXRpYyBjb25zdCBib29sIGtJbml0aWFsaXplZCA9IEluaXRQcm9jZXNzKCk7Cisg
ICAgcmV0dXJuIGtJbml0aWFsaXplZCA/IDEgOiAwOworfQorCisvLworLy8gQ2xlYW51cCBzeW1i
b2wgdGFibGVzCisvLworaW50IFNoRmluYWxpemUoKQoreworICAgIERldGFjaFByb2Nlc3MoKTsK
KyAgICByZXR1cm4gMTsKK30KKworLy8KKy8vIEluaXRpYWxpemUgYnVpbHQtaW4gcmVzb3VyY2Vz
IHdpdGggbWluaW11bSBleHBlY3RlZCB2YWx1ZXMuCisvLwordm9pZCBTaEluaXRCdWlsdEluUmVz
b3VyY2VzKFNoQnVpbHRJblJlc291cmNlcyogcmVzb3VyY2VzKQoreworICAgIC8vIENvbnN0YW50
cy4KKyAgICByZXNvdXJjZXMtPk1heFZlcnRleEF0dHJpYnMgPSA4OworICAgIHJlc291cmNlcy0+
TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMgPSAxMjg7CisgICAgcmVzb3VyY2VzLT5NYXhWYXJ5aW5n
VmVjdG9ycyA9IDg7CisgICAgcmVzb3VyY2VzLT5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyA9
IDA7CisgICAgcmVzb3VyY2VzLT5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gODsKKyAg
ICByZXNvdXJjZXMtPk1heFRleHR1cmVJbWFnZVVuaXRzID0gODsKKyAgICByZXNvdXJjZXMtPk1h
eEZyYWdtZW50VW5pZm9ybVZlY3RvcnMgPSAxNjsKKyAgICByZXNvdXJjZXMtPk1heERyYXdCdWZm
ZXJzID0gMTsKKworICAgIC8vIEV4dGVuc2lvbnMuCisgICAgcmVzb3VyY2VzLT5PRVNfc3RhbmRh
cmRfZGVyaXZhdGl2ZXMgPSAwOworICAgIHJlc291cmNlcy0+T0VTX0VHTF9pbWFnZV9leHRlcm5h
bCA9IDA7CisgICAgcmVzb3VyY2VzLT5BUkJfdGV4dHVyZV9yZWN0YW5nbGUgPSAwOworICAgIHJl
c291cmNlcy0+RVhUX2RyYXdfYnVmZmVycyA9IDA7CisgICAgcmVzb3VyY2VzLT5FWFRfZnJhZ19k
ZXB0aCA9IDA7CisKKyAgICAvLyBEaXNhYmxlIGhpZ2hwIHByZWNpc2lvbiBpbiBmcmFnbWVudCBz
aGFkZXIgYnkgZGVmYXVsdC4KKyAgICByZXNvdXJjZXMtPkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9
IDA7CisKKyAgICAvLyBEaXNhYmxlIG5hbWUgaGFzaGluZyBieSBkZWZhdWx0LgorICAgIHJlc291
cmNlcy0+SGFzaEZ1bmN0aW9uID0gTlVMTDsKKworICAgIHJlc291cmNlcy0+QXJyYXlJbmRleENs
YW1waW5nU3RyYXRlZ3kgPSBTSF9DTEFNUF9XSVRIX0NMQU1QX0lOVFJJTlNJQzsKKworICAgIHJl
c291cmNlcy0+TWF4RXhwcmVzc2lvbkNvbXBsZXhpdHkgPSAyNTY7CisgICAgcmVzb3VyY2VzLT5N
YXhDYWxsU3RhY2tEZXB0aCA9IDI1NjsKK30KKworLy8KKy8vIERyaXZlciBjYWxscyB0aGVzZSB0
byBjcmVhdGUgYW5kIGRlc3Ryb3kgY29tcGlsZXIgb2JqZWN0cy4KKy8vCitTaEhhbmRsZSBTaENv
bnN0cnVjdENvbXBpbGVyKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hTaGFkZXJPdXRwdXQgb3V0cHV0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMqIHJlc291cmNl
cykKK3sKKyAgICBUU2hIYW5kbGVCYXNlKiBiYXNlID0gc3RhdGljX2Nhc3Q8VFNoSGFuZGxlQmFz
ZSo+KENvbnN0cnVjdENvbXBpbGVyKHR5cGUsIHNwZWMsIG91dHB1dCkpOworICAgIFRDb21waWxl
ciogY29tcGlsZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7CisgICAgaWYgKGNvbXBpbGVyID09
IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gR2VuZXJhdGUgYnVpbHQtaW4gc3ltYm9s
IHRhYmxlLgorICAgIGlmICghY29tcGlsZXItPkluaXQoKnJlc291cmNlcykpIHsKKyAgICAgICAg
U2hEZXN0cnVjdChiYXNlKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2UpOworfQorCit2b2lkIFNoRGVzdHJ1Y3QoU2hI
YW5kbGUgaGFuZGxlKQoreworICAgIGlmIChoYW5kbGUgPT0gMCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHN0YXRpY19jYXN0PFRTaEhhbmRsZUJhc2UqPiho
YW5kbGUpOworCisgICAgaWYgKGJhc2UtPmdldEFzQ29tcGlsZXIoKSkKKyAgICAgICAgRGVsZXRl
Q29tcGlsZXIoYmFzZS0+Z2V0QXNDb21waWxlcigpKTsKK30KKworLy8KKy8vIERvIGFuIGFjdHVh
bCBjb21waWxlIG9uIHRoZSBnaXZlbiBzdHJpbmdzLiAgVGhlIHJlc3VsdCBpcyBsZWZ0IAorLy8g
aW4gdGhlIGdpdmVuIGNvbXBpbGUgb2JqZWN0LgorLy8KKy8vIFJldHVybjogIFRoZSByZXR1cm4g
dmFsdWUgb2YgU2hDb21waWxlIGlzIHJlYWxseSBib29sZWFuLCBpbmRpY2F0aW5nCisvLyBzdWNj
ZXNzIG9yIGZhaWx1cmUuCisvLworaW50IFNoQ29tcGlsZSgKKyAgICBjb25zdCBTaEhhbmRsZSBo
YW5kbGUsCisgICAgY29uc3QgY2hhciogY29uc3Qgc2hhZGVyU3RyaW5nc1tdLAorICAgIHNpemVf
dCBudW1TdHJpbmdzLAorICAgIGludCBjb21waWxlT3B0aW9ucykKK3sKKyAgICBpZiAoaGFuZGxl
ID09IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8VFNoSGFuZGxlQmFzZSo+KGhhbmRsZSk7CisgICAgVENvbXBpbGVyKiBj
b21waWxlciA9IGJhc2UtPmdldEFzQ29tcGlsZXIoKTsKKyAgICBpZiAoY29tcGlsZXIgPT0gMCkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBib29sIHN1Y2Nlc3MgPSBjb21waWxlci0+Y29tcGls
ZShzaGFkZXJTdHJpbmdzLCBudW1TdHJpbmdzLCBjb21waWxlT3B0aW9ucyk7CisgICAgcmV0dXJu
IHN1Y2Nlc3MgPyAxIDogMDsKK30KKwordm9pZCBTaEdldEluZm8oY29uc3QgU2hIYW5kbGUgaGFu
ZGxlLCBTaFNoYWRlckluZm8gcG5hbWUsIHNpemVfdCogcGFyYW1zKQoreworICAgIGlmICghaGFu
ZGxlIHx8ICFwYXJhbXMpCisgICAgICAgIHJldHVybjsKKworICAgIFRTaEhhbmRsZUJhc2UqIGJh
c2UgPSBzdGF0aWNfY2FzdDxUU2hIYW5kbGVCYXNlKj4oaGFuZGxlKTsKKyAgICBUQ29tcGlsZXIq
IGNvbXBpbGVyID0gYmFzZS0+Z2V0QXNDb21waWxlcigpOworICAgIGlmICghY29tcGlsZXIpIHJl
dHVybjsKKworICAgIHN3aXRjaChwbmFtZSkKKyAgICB7CisgICAgY2FzZSBTSF9JTkZPX0xPR19M
RU5HVEg6CisgICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0SW5mb1NpbmsoKS5pbmZvLnNp
emUoKSArIDE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hfT0JKRUNUX0NPREVfTEVOR1RI
OgorICAgICAgICAqcGFyYW1zID0gY29tcGlsZXItPmdldEluZm9TaW5rKCkub2JqLnNpemUoKSAr
IDE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hfQUNUSVZFX1VOSUZPUk1TOgorICAgICAg
ICAqcGFyYW1zID0gY29tcGlsZXItPmdldFVuaWZvcm1zKCkuc2l6ZSgpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFNIX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEg6CisgICAgICAgICpwYXJh
bXMgPSAxICsgIE1BWF9TWU1CT0xfTkFNRV9MRU47CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
U0hfQUNUSVZFX0FUVFJJQlVURVM6CisgICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0QXR0
cmlicygpLnNpemUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSF9BQ1RJVkVfQVRUUklC
VVRFX01BWF9MRU5HVEg6CisgICAgICAgICpwYXJhbXMgPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xF
TjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSF9WQVJZSU5HUzoKKyAgICAgICAgKnBhcmFt
cyA9IGNvbXBpbGVyLT5nZXRWYXJ5aW5ncygpLnNpemUoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBTSF9WQVJZSU5HX01BWF9MRU5HVEg6CisgICAgICAgICpwYXJhbXMgPSAxICsgTUFYX1NZ
TUJPTF9OQU1FX0xFTjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSF9NQVBQRURfTkFNRV9N
QVhfTEVOR1RIOgorICAgICAgICAvLyBVc2UgbG9uZ2VyIGxlbmd0aCB0aGFuIE1BWF9TSE9SVEVO
RURfSURFTlRJRklFUl9TSVpFIHRvCisgICAgICAgIC8vIGhhbmRsZSBhcnJheSBhbmQgc3RydWN0
IGRlcmVmZXJlbmNlcy4KKyAgICAgICAgKnBhcmFtcyA9IDEgKyBNQVhfU1lNQk9MX05BTUVfTEVO
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNIX05BTUVfTUFYX0xFTkdUSDoKKyAgICAgICAg
KnBhcmFtcyA9IDEgKyBNQVhfU1lNQk9MX05BTUVfTEVOOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFNIX0hBU0hFRF9OQU1FX01BWF9MRU5HVEg6CisgICAgICAgIGlmIChjb21waWxlci0+Z2V0
SGFzaEZ1bmN0aW9uKCkgPT0gTlVMTCkgeworICAgICAgICAgICAgKnBhcmFtcyA9IDA7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyA2NCBiaXRzIGhhc2hpbmcgb3V0cHV0IHJlcXVp
cmVzIDE2IGJ5dGVzIGZvciBoZXggCisgICAgICAgICAgICAvLyByZXByZXNlbnRhdGlvbi4KKyAg
ICAgICAgICAgIGNvbnN0IGNoYXIgSGFzaGVkTmFtZVByZWZpeFtdID0gSEFTSEVEX05BTUVfUFJF
RklYOworICAgICAgICAgICAgKnBhcmFtcyA9IDE2ICsgc2l6ZW9mKEhhc2hlZE5hbWVQcmVmaXgp
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hfSEFTSEVEX05BTUVTX0NP
VU5UOgorICAgICAgICAqcGFyYW1zID0gY29tcGlsZXItPmdldE5hbWVNYXAoKS5zaXplKCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorfQorCisv
LworLy8gUmV0dXJuIGFueSBjb21waWxlciBsb2cgb2YgbWVzc2FnZXMgZm9yIHRoZSBhcHBsaWNh
dGlvbi4KKy8vCit2b2lkIFNoR2V0SW5mb0xvZyhjb25zdCBTaEhhbmRsZSBoYW5kbGUsIGNoYXIq
IGluZm9Mb2cpCit7CisgICAgaWYgKCFoYW5kbGUgfHwgIWluZm9Mb2cpCisgICAgICAgIHJldHVy
bjsKKworICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2FzdDxUU2hIYW5kbGVCYXNl
Kj4oaGFuZGxlKTsKKyAgICBUQ29tcGlsZXIqIGNvbXBpbGVyID0gYmFzZS0+Z2V0QXNDb21waWxl
cigpOworICAgIGlmICghY29tcGlsZXIpIHJldHVybjsKKworICAgIFRJbmZvU2luayYgaW5mb1Np
bmsgPSBjb21waWxlci0+Z2V0SW5mb1NpbmsoKTsKKyAgICBzdHJjcHkoaW5mb0xvZywgaW5mb1Np
bmsuaW5mby5jX3N0cigpKTsKK30KKworLy8KKy8vIFJldHVybiBhbnkgb2JqZWN0IGNvZGUuCisv
Lwordm9pZCBTaEdldE9iamVjdENvZGUoY29uc3QgU2hIYW5kbGUgaGFuZGxlLCBjaGFyKiBvYmpD
b2RlKQoreworICAgIGlmICghaGFuZGxlIHx8ICFvYmpDb2RlKQorICAgICAgICByZXR1cm47CisK
KyAgICBUU2hIYW5kbGVCYXNlKiBiYXNlID0gc3RhdGljX2Nhc3Q8VFNoSGFuZGxlQmFzZSo+KGhh
bmRsZSk7CisgICAgVENvbXBpbGVyKiBjb21waWxlciA9IGJhc2UtPmdldEFzQ29tcGlsZXIoKTsK
KyAgICBpZiAoIWNvbXBpbGVyKSByZXR1cm47CisKKyAgICBUSW5mb1NpbmsmIGluZm9TaW5rID0g
Y29tcGlsZXItPmdldEluZm9TaW5rKCk7CisgICAgc3RyY3B5KG9iakNvZGUsIGluZm9TaW5rLm9i
ai5jX3N0cigpKTsKK30KKwordm9pZCBTaEdldFZhcmlhYmxlSW5mbyhjb25zdCBTaEhhbmRsZSBo
YW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgIFNoU2hhZGVySW5mbyB2YXJUeXBlLAorICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCogbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHNpemUsCisgICAgICAg
ICAgICAgICAgICAgICAgIFNoRGF0YVR5cGUqIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAg
IFNoUHJlY2lzaW9uVHlwZSogcHJlY2lzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQq
IHN0YXRpY1VzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY2hhciogbmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciogbWFwcGVkTmFtZSkKK3sKKyAgICBpZiAoIWhhbmRsZSB8fCAh
c2l6ZSB8fCAhdHlwZSB8fCAhcHJlY2lzaW9uIHx8ICFzdGF0aWNVc2UgfHwgIW5hbWUpCisgICAg
ICAgIHJldHVybjsKKyAgICBBU1NFUlQoKHZhclR5cGUgPT0gU0hfQUNUSVZFX0FUVFJJQlVURVMp
IHx8CisgICAgICAgICAgICh2YXJUeXBlID09IFNIX0FDVElWRV9VTklGT1JNUykgfHwKKyAgICAg
ICAgICAgKHZhclR5cGUgPT0gU0hfVkFSWUlOR1MpKTsKKworICAgIFRTaEhhbmRsZUJhc2UqIGJh
c2UgPSByZWludGVycHJldF9jYXN0PFRTaEhhbmRsZUJhc2UqPihoYW5kbGUpOworICAgIFRDb21w
aWxlciogY29tcGlsZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7CisgICAgaWYgKGNvbXBpbGVy
ID09IDApCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IFRWYXJpYWJsZUluZm9MaXN0JiB2
YXJMaXN0ID0KKyAgICAgICAgdmFyVHlwZSA9PSBTSF9BQ1RJVkVfQVRUUklCVVRFUyA/IGNvbXBp
bGVyLT5nZXRBdHRyaWJzKCkgOgorICAgICAgICAgICAgKHZhclR5cGUgPT0gU0hfQUNUSVZFX1VO
SUZPUk1TID8gY29tcGlsZXItPmdldFVuaWZvcm1zKCkgOgorICAgICAgICAgICAgICAgIGNvbXBp
bGVyLT5nZXRWYXJ5aW5ncygpKTsKKyAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHN0YXRp
Y19jYXN0PGludD4odmFyTGlzdC5zaXplKCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25z
dCBUVmFyaWFibGVJbmZvJiB2YXJJbmZvID0gdmFyTGlzdFtpbmRleF07CisgICAgaWYgKGxlbmd0
aCkgKmxlbmd0aCA9IHZhckluZm8ubmFtZS5zaXplKCk7CisgICAgKnNpemUgPSB2YXJJbmZvLnNp
emU7CisgICAgKnR5cGUgPSB2YXJJbmZvLnR5cGU7CisgICAgc3dpdGNoICh2YXJJbmZvLnByZWNp
c2lvbikgeworICAgIGNhc2UgRWJwTG93OgorICAgICAgICAqcHJlY2lzaW9uID0gU0hfUFJFQ0lT
SU9OX0xPV1A7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRWJwTWVkaXVtOgorICAgICAgICAq
cHJlY2lzaW9uID0gU0hfUFJFQ0lTSU9OX01FRElVTVA7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRWJwSGlnaDoKKyAgICAgICAgKnByZWNpc2lvbiA9IFNIX1BSRUNJU0lPTl9ISUdIUDsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gU29tZSB0eXBlcyBkb2VzIG5v
dCBzdXBwb3J0IHByZWNpc2lvbiwgZm9yIGV4YW1wbGUsIGJvb2xlYW4uCisgICAgICAgICpwcmVj
aXNpb24gPSBTSF9QUkVDSVNJT05fVU5ERUZJTkVEOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgKnN0YXRpY1VzZSA9IHZhckluZm8uc3RhdGljVXNlID8gMSA6IDA7CisKKyAgICAvLyBUaGlz
IHNpemUgbXVzdCBtYXRjaCB0aGF0IHF1ZXJpZWQgYnkKKyAgICAvLyBTSF9BQ1RJVkVfVU5JRk9S
TV9NQVhfTEVOR1RILCBTSF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsIFNIX1ZBUllJTkdf
TUFYX0xFTkdUSAorICAgIC8vIGluIFNoR2V0SW5mbywgYmVsb3cuCisgICAgc2l6ZV90IHZhcmlh
YmxlTGVuZ3RoID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CisgICAgQVNTRVJUKGNoZWNrVmFy
aWFibGVNYXhMZW5ndGhzKGhhbmRsZSwgdmFyaWFibGVMZW5ndGgpKTsKKyAgICBzdHJuY3B5KG5h
bWUsIHZhckluZm8ubmFtZS5jX3N0cigpLCB2YXJpYWJsZUxlbmd0aCk7CisgICAgbmFtZVt2YXJp
YWJsZUxlbmd0aCAtIDFdID0gMDsKKyAgICBpZiAobWFwcGVkTmFtZSkgeworICAgICAgICAvLyBU
aGlzIHNpemUgbXVzdCBtYXRjaCB0aGF0IHF1ZXJpZWQgYnkKKyAgICAgICAgLy8gU0hfTUFQUEVE
X05BTUVfTUFYX0xFTkdUSCBpbiBTaEdldEluZm8sIGJlbG93LgorICAgICAgICBzaXplX3QgbWF4
TWFwcGVkTmFtZUxlbmd0aCA9IDEgKyBNQVhfU1lNQk9MX05BTUVfTEVOOworICAgICAgICBBU1NF
UlQoY2hlY2tNYXBwZWROYW1lTWF4TGVuZ3RoKGhhbmRsZSwgbWF4TWFwcGVkTmFtZUxlbmd0aCkp
OworICAgICAgICBzdHJuY3B5KG1hcHBlZE5hbWUsIHZhckluZm8ubWFwcGVkTmFtZS5jX3N0cigp
LCBtYXhNYXBwZWROYW1lTGVuZ3RoKTsKKyAgICAgICAgbWFwcGVkTmFtZVttYXhNYXBwZWROYW1l
TGVuZ3RoIC0gMV0gPSAwOworICAgIH0KK30KKwordm9pZCBTaEdldE5hbWVIYXNoaW5nRW50cnko
Y29uc3QgU2hIYW5kbGUgaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
ZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogbmFtZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYXIqIGhhc2hlZE5hbWUpCit7CisgICAgaWYgKCFoYW5kbGUgfHwg
IW5hbWUgfHwgIWhhc2hlZE5hbWUgfHwgaW5kZXggPCAwKQorICAgICAgICByZXR1cm47CisKKyAg
ICBUU2hIYW5kbGVCYXNlKiBiYXNlID0gc3RhdGljX2Nhc3Q8VFNoSGFuZGxlQmFzZSo+KGhhbmRs
ZSk7CisgICAgVENvbXBpbGVyKiBjb21waWxlciA9IGJhc2UtPmdldEFzQ29tcGlsZXIoKTsKKyAg
ICBpZiAoIWNvbXBpbGVyKSByZXR1cm47CisKKyAgICBjb25zdCBOYW1lTWFwJiBuYW1lTWFwID0g
Y29tcGlsZXItPmdldE5hbWVNYXAoKTsKKyAgICBpZiAoaW5kZXggPj0gc3RhdGljX2Nhc3Q8aW50
PihuYW1lTWFwLnNpemUoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIE5hbWVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbmFtZU1hcC5iZWdpbigpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
aW5kZXg7ICsraSkKKyAgICAgICAgKytpdDsKKworICAgIHNpemVfdCBsZW4gPSBpdC0+Zmlyc3Qu
bGVuZ3RoKCkgKyAxOworICAgIHNpemVfdCBtYXhfbGVuID0gMDsKKyAgICBTaEdldEluZm8oaGFu
ZGxlLCBTSF9OQU1FX01BWF9MRU5HVEgsICZtYXhfbGVuKTsKKyAgICBpZiAobGVuID4gbWF4X2xl
bikgeworICAgICAgICBBU1NFUlQoZmFsc2UpOworICAgICAgICBsZW4gPSBtYXhfbGVuOworICAg
IH0KKyAgICBzdHJuY3B5KG5hbWUsIGl0LT5maXJzdC5jX3N0cigpLCBsZW4pOworICAgIC8vIFRv
IGJlIG9uIHRoZSBzYWZlIHNpZGUgaW4gY2FzZSB0aGUgc291cmNlIGlzIGxvbmdlciB0aGFuIGV4
cGVjdGVkLgorICAgIG5hbWVbbGVuIC0gMV0gPSAnXDAnOworCisgICAgbGVuID0gaXQtPnNlY29u
ZC5sZW5ndGgoKSArIDE7CisgICAgbWF4X2xlbiA9IDA7CisgICAgU2hHZXRJbmZvKGhhbmRsZSwg
U0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSCwgJm1heF9sZW4pOworICAgIGlmIChsZW4gPiBtYXhf
bGVuKSB7CisgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgIGxlbiA9IG1heF9sZW47Cisg
ICAgfQorICAgIHN0cm5jcHkoaGFzaGVkTmFtZSwgaXQtPnNlY29uZC5jX3N0cigpLCBsZW4pOwor
ICAgIC8vIFRvIGJlIG9uIHRoZSBzYWZlIHNpZGUgaW4gY2FzZSB0aGUgc291cmNlIGlzIGxvbmdl
ciB0aGFuIGV4cGVjdGVkLgorICAgIGhhc2hlZE5hbWVbbGVuIC0gMV0gPSAnXDAnOworfQorCit2
b2lkIFNoR2V0SW5mb1BvaW50ZXIoY29uc3QgU2hIYW5kbGUgaGFuZGxlLCBTaFNoYWRlckluZm8g
cG5hbWUsIHZvaWQqKiBwYXJhbXMpCit7CisgICAgaWYgKCFoYW5kbGUgfHwgIXBhcmFtcykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHN0YXRpY19jYXN0PFRT
aEhhbmRsZUJhc2UqPihoYW5kbGUpOworICAgIFRyYW5zbGF0b3JITFNMKiB0cmFuc2xhdG9yID0g
YmFzZS0+Z2V0QXNUcmFuc2xhdG9ySExTTCgpOworICAgIGlmICghdHJhbnNsYXRvcikgcmV0dXJu
OworCisgICAgc3dpdGNoKHBuYW1lKQorICAgIHsKKyAgICBjYXNlIFNIX0FDVElWRV9VTklGT1JN
U19BUlJBWToKKyAgICAgICAgKnBhcmFtcyA9ICh2b2lkKikmdHJhbnNsYXRvci0+Z2V0VW5pZm9y
bXMoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9
Cit9CisKK2ludCBTaENoZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cygKKyAgICBpbnQg
bWF4VmVjdG9ycywgU2hWYXJpYWJsZUluZm8qIHZhckluZm9BcnJheSwgc2l6ZV90IHZhckluZm9B
cnJheVNpemUpCit7CisgICAgaWYgKHZhckluZm9BcnJheVNpemUgPT0gMCkKKyAgICAgICAgcmV0
dXJuIDE7CisgICAgQVNTRVJUKHZhckluZm9BcnJheSk7CisgICAgVFZhcmlhYmxlSW5mb0xpc3Qg
dmFyaWFibGVzOworICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCB2YXJJbmZvQXJyYXlTaXpl
OyArK2lpKQorICAgIHsKKyAgICAgICAgVFZhcmlhYmxlSW5mbyB2YXIodmFySW5mb0FycmF5W2lp
XS50eXBlLCB2YXJJbmZvQXJyYXlbaWldLnNpemUpOworICAgICAgICB2YXJpYWJsZXMucHVzaF9i
YWNrKHZhcik7CisgICAgfQorICAgIFZhcmlhYmxlUGFja2VyIHBhY2tlcjsKKyAgICByZXR1cm4g
cGFja2VyLkNoZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cyhtYXhWZWN0b3JzLCB2YXJp
YWJsZXMpID8gMSA6IDA7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJsZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJsZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZDA0ZmU1ZDM1NTZjOWZhZjkxYjM1ODMxNjkyMzJiODU4NTQ3MWFmMgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5
bWJvbFRhYmxlLmNwcApAQCAtMCwwICsxLDIxNiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8K
Ky8vIFN5bWJvbCB0YWJsZSBmb3IgcGFyc2luZy4gIE1vc3QgZnVuY3Rpb25hbGl5IGFuZCBtYWlu
IGlkZWFzCisvLyBhcmUgZG9jdW1lbnRlZCBpbiB0aGUgaGVhZGVyIGZpbGUuCisvLworCisjaWYg
ZGVmaW5lZChfTVNDX1ZFUikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzE4KQorI2VuZGlm
CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgiCisKKyNpbmNs
dWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjbGltaXRzPgor
CitUVHlwZTo6VFR5cGUoY29uc3QgVFB1YmxpY1R5cGUgJnApIDoKKyAgICAgICAgICAgIHR5cGUo
cC50eXBlKSwgcHJlY2lzaW9uKHAucHJlY2lzaW9uKSwgcXVhbGlmaWVyKHAucXVhbGlmaWVyKSwg
c2l6ZShwLnNpemUpLCBtYXRyaXgocC5tYXRyaXgpLCBhcnJheShwLmFycmF5KSwgYXJyYXlTaXpl
KHAuYXJyYXlTaXplKSwgc3RydWN0dXJlKDApCit7CisgICAgaWYgKHAudXNlckRlZikKKyAgICAg
ICAgc3RydWN0dXJlID0gcC51c2VyRGVmLT5nZXRTdHJ1Y3QoKTsKK30KKworLy8KKy8vIFJlY3Vy
c2l2ZWx5IGdlbmVyYXRlIG1hbmdsZWQgbmFtZXMuCisvLworVFN0cmluZyBUVHlwZTo6YnVpbGRN
YW5nbGVkTmFtZSgpIGNvbnN0Cit7CisgICAgVFN0cmluZyBtYW5nbGVkTmFtZTsKKyAgICBpZiAo
aXNNYXRyaXgoKSkKKyAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ20nOworICAgIGVsc2UgaWYgKGlz
VmVjdG9yKCkpCisgICAgICAgIG1hbmdsZWROYW1lICs9ICd2JzsKKworICAgIHN3aXRjaCAodHlw
ZSkgeworICAgIGNhc2UgRWJ0RmxvYXQ6ICAgICAgIG1hbmdsZWROYW1lICs9ICdmJzsgICAgICBi
cmVhazsKKyAgICBjYXNlIEVidEludDogICAgICAgICBtYW5nbGVkTmFtZSArPSAnaSc7ICAgICAg
YnJlYWs7CisgICAgY2FzZSBFYnRCb29sOiAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ2InOyAgICAg
IGJyZWFrOworICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgIG1hbmdsZWROYW1lICs9ICJzMiI7ICAg
ICBicmVhazsKKyAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiBtYW5nbGVkTmFtZSArPSAic0MiOyAg
ICAgYnJlYWs7CisgICAgY2FzZSBFYnRTdHJ1Y3Q6ICAgICAgbWFuZ2xlZE5hbWUgKz0gc3RydWN0
dXJlLT5tYW5nbGVkTmFtZSgpOyBicmVhazsKKyAgICBkZWZhdWx0OiAgICAgICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBtYW5nbGVkTmFtZSArPSBzdGF0aWNfY2FzdDxjaGFyPignMCcgKyBn
ZXROb21pbmFsU2l6ZSgpKTsKKyAgICBpZiAoaXNBcnJheSgpKSB7CisgICAgICAgIGNoYXIgYnVm
WzIwXTsKKyAgICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwgYXJyYXlTaXpl
KTsKKyAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ1snOworICAgICAgICBtYW5nbGVkTmFtZSArPSBi
dWY7CisgICAgICAgIG1hbmdsZWROYW1lICs9ICddJzsKKyAgICB9CisgICAgcmV0dXJuIG1hbmds
ZWROYW1lOworfQorCitzaXplX3QgVFR5cGU6OmdldE9iamVjdFNpemUoKSBjb25zdAoreworICAg
IHNpemVfdCB0b3RhbFNpemUgPSAwOworCisgICAgaWYgKGdldEJhc2ljVHlwZSgpID09IEVidFN0
cnVjdCkKKyAgICAgICAgdG90YWxTaXplID0gc3RydWN0dXJlLT5vYmplY3RTaXplKCk7CisgICAg
ZWxzZSBpZiAobWF0cml4KQorICAgICAgICB0b3RhbFNpemUgPSBzaXplICogc2l6ZTsKKyAgICBl
bHNlCisgICAgICAgIHRvdGFsU2l6ZSA9IHNpemU7CisKKyAgICBpZiAoaXNBcnJheSgpKSB7Cisg
ICAgICAgIHNpemVfdCBhcnJheVNpemUgPSBnZXRBcnJheVNpemUoKTsKKyAgICAgICAgaWYgKGFy
cmF5U2l6ZSA+IElOVF9NQVggLyB0b3RhbFNpemUpCisgICAgICAgICAgICB0b3RhbFNpemUgPSBJ
TlRfTUFYOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0b3RhbFNpemUgKj0gYXJyYXlTaXpl
OworICAgIH0KKworICAgIHJldHVybiB0b3RhbFNpemU7Cit9CisKK2Jvb2wgVFN0cnVjdHVyZTo6
Y29udGFpbnNBcnJheXMoKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUZp
ZWxkcy0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgVFR5cGUqIGZpZWxkVHlwZSA9ICgq
bUZpZWxkcylbaV0tPnR5cGUoKTsKKyAgICAgICAgaWYgKGZpZWxkVHlwZS0+aXNBcnJheSgpIHx8
IGZpZWxkVHlwZS0+aXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlzKCkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitUU3RyaW5nIFRTdHJ1
Y3R1cmU6OmJ1aWxkTWFuZ2xlZE5hbWUoKSBjb25zdAoreworICAgIFRTdHJpbmcgbWFuZ2xlZE5h
bWUoInN0cnVjdC0iKTsKKyAgICBtYW5nbGVkTmFtZSArPSAqbU5hbWU7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtRmllbGRzLT5zaXplKCk7ICsraSkgeworICAgICAgICBtYW5nbGVkTmFt
ZSArPSAnLSc7CisgICAgICAgIG1hbmdsZWROYW1lICs9ICgqbUZpZWxkcylbaV0tPnR5cGUoKS0+
Z2V0TWFuZ2xlZE5hbWUoKTsKKyAgICB9CisgICAgcmV0dXJuIG1hbmdsZWROYW1lOworfQorCitz
aXplX3QgVFN0cnVjdHVyZTo6Y2FsY3VsYXRlT2JqZWN0U2l6ZSgpIGNvbnN0Cit7CisgICAgc2l6
ZV90IHNpemUgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUZpZWxkcy0+c2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgc2l6ZV90IGZpZWxkU2l6ZSA9ICgqbUZpZWxkcylbaV0tPnR5cGUo
KS0+Z2V0T2JqZWN0U2l6ZSgpOworICAgICAgICBpZiAoZmllbGRTaXplID4gSU5UX01BWCAtIHNp
emUpCisgICAgICAgICAgICBzaXplID0gSU5UX01BWDsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgc2l6ZSArPSBmaWVsZFNpemU7CisgICAgfQorICAgIHJldHVybiBzaXplOworfQorCitpbnQg
VFN0cnVjdHVyZTo6Y2FsY3VsYXRlRGVlcGVzdE5lc3RpbmcoKSBjb25zdAoreworICAgIGludCBt
YXhOZXN0aW5nID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1GaWVsZHMtPnNpemUo
KTsgKytpKSB7CisgICAgICAgIG1heE5lc3RpbmcgPSBzdGQ6Om1heChtYXhOZXN0aW5nLCAoKm1G
aWVsZHMpW2ldLT50eXBlKCktPmdldERlZXBlc3RTdHJ1Y3ROZXN0aW5nKCkpOworICAgIH0KKyAg
ICByZXR1cm4gMSArIG1heE5lc3Rpbmc7Cit9CisKKy8vCisvLyBEdW1wIGZ1bmN0aW9ucy4KKy8v
CisKK3ZvaWQgVFZhcmlhYmxlOjpkdW1wKFRJbmZvU2luayYgaW5mb1NpbmspIGNvbnN0Cit7Cisg
ICAgaW5mb1NpbmsuZGVidWcgPDwgZ2V0TmFtZSgpLmNfc3RyKCkgPDwgIjogIiA8PCB0eXBlLmdl
dFF1YWxpZmllclN0cmluZygpIDw8ICIgIiA8PCB0eXBlLmdldFByZWNpc2lvblN0cmluZygpIDw8
ICIgIiA8PCB0eXBlLmdldEJhc2ljU3RyaW5nKCk7CisgICAgaWYgKHR5cGUuaXNBcnJheSgpKSB7
CisgICAgICAgIGluZm9TaW5rLmRlYnVnIDw8ICJbMF0iOworICAgIH0KKyAgICBpbmZvU2luay5k
ZWJ1ZyA8PCAiXG4iOworfQorCit2b2lkIFRGdW5jdGlvbjo6ZHVtcChUSW5mb1NpbmsgJmluZm9T
aW5rKSBjb25zdAoreworICAgIGluZm9TaW5rLmRlYnVnIDw8IGdldE5hbWUoKS5jX3N0cigpIDw8
ICI6ICIgPDwgIHJldHVyblR5cGUuZ2V0QmFzaWNTdHJpbmcoKSA8PCAiICIgPDwgZ2V0TWFuZ2xl
ZE5hbWUoKS5jX3N0cigpIDw8ICJcbiI7Cit9CisKK3ZvaWQgVFN5bWJvbFRhYmxlTGV2ZWw6OmR1
bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3QKK3sKKyAgICB0TGV2ZWw6OmNvbnN0X2l0ZXJh
dG9yIGl0OworICAgIGZvciAoaXQgPSBsZXZlbC5iZWdpbigpOyBpdCAhPSBsZXZlbC5lbmQoKTsg
KytpdCkKKyAgICAgICAgKCppdCkuc2Vjb25kLT5kdW1wKGluZm9TaW5rKTsKK30KKwordm9pZCBU
U3ltYm9sVGFibGU6OmR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3QKK3sKKyAgICBmb3Ig
KGludCBsZXZlbCA9IGN1cnJlbnRMZXZlbCgpOyBsZXZlbCA+PSAwOyAtLWxldmVsKSB7CisgICAg
ICAgIGluZm9TaW5rLmRlYnVnIDw8ICJMRVZFTCAiIDw8IGxldmVsIDw8ICJcbiI7CisgICAgICAg
IHRhYmxlW2xldmVsXS0+ZHVtcChpbmZvU2luayk7CisgICAgfQorfQorCisvLworLy8gRnVuY3Rp
b25zIGhhdmUgYnVyaWVkIHBvaW50ZXJzIHRvIGRlbGV0ZS4KKy8vCitURnVuY3Rpb246On5URnVu
Y3Rpb24oKQoreworICAgIGZvciAoVFBhcmFtTGlzdDo6aXRlcmF0b3IgaSA9IHBhcmFtZXRlcnMu
YmVnaW4oKTsgaSAhPSBwYXJhbWV0ZXJzLmVuZCgpOyArK2kpCisgICAgICAgIGRlbGV0ZSAoKmkp
LnR5cGU7Cit9CisKKy8vCisvLyBTeW1ib2wgdGFibGUgbGV2ZWxzIGFyZSBhIG1hcCBvZiBwb2lu
dGVycyB0byBzeW1ib2xzIHRoYXQgaGF2ZSB0byBiZSBkZWxldGVkLgorLy8KK1RTeW1ib2xUYWJs
ZUxldmVsOjp+VFN5bWJvbFRhYmxlTGV2ZWwoKQoreworICAgIGZvciAodExldmVsOjppdGVyYXRv
ciBpdCA9IGxldmVsLmJlZ2luKCk7IGl0ICE9IGxldmVsLmVuZCgpOyArK2l0KQorICAgICAgICBk
ZWxldGUgKCppdCkuc2Vjb25kOworfQorCisvLworLy8gQ2hhbmdlIGFsbCBmdW5jdGlvbiBlbnRy
aWVzIGluIHRoZSB0YWJsZSB3aXRoIHRoZSBub24tbWFuZ2xlZCBuYW1lCisvLyB0byBiZSByZWxh
dGVkIHRvIHRoZSBwcm92aWRlZCBidWlsdC1pbiBvcGVyYXRpb24uICBUaGlzIGlzIGEgbG93Cisv
LyBwZXJmb3JtYW5jZSBvcGVyYXRpb24sIGFuZCBvbmx5IGludGVuZGVkIGZvciBzeW1ib2wgdGFi
bGVzIHRoYXQKKy8vIGxpdmUgYWNyb3NzIGEgbGFyZ2UgbnVtYmVyIG9mIGNvbXBpbGVzLgorLy8K
K3ZvaWQgVFN5bWJvbFRhYmxlTGV2ZWw6OnJlbGF0ZVRvT3BlcmF0b3IoY29uc3QgY2hhciogbmFt
ZSwgVE9wZXJhdG9yIG9wKQoreworICAgIHRMZXZlbDo6aXRlcmF0b3IgaXQ7CisgICAgZm9yIChp
dCA9IGxldmVsLmJlZ2luKCk7IGl0ICE9IGxldmVsLmVuZCgpOyArK2l0KSB7CisgICAgICAgIGlm
ICgoKml0KS5zZWNvbmQtPmlzRnVuY3Rpb24oKSkgeworICAgICAgICAgICAgVEZ1bmN0aW9uKiBm
dW5jdGlvbiA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KCgqaXQpLnNlY29uZCk7CisgICAgICAg
ICAgICBpZiAoZnVuY3Rpb24tPmdldE5hbWUoKSA9PSBuYW1lKQorICAgICAgICAgICAgICAgIGZ1
bmN0aW9uLT5yZWxhdGVUb09wZXJhdG9yKG9wKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8K
Ky8vIENoYW5nZSBhbGwgZnVuY3Rpb24gZW50cmllcyBpbiB0aGUgdGFibGUgd2l0aCB0aGUgbm9u
LW1hbmdsZWQgbmFtZQorLy8gdG8gYmUgcmVsYXRlZCB0byB0aGUgcHJvdmlkZWQgYnVpbHQtaW4g
ZXh0ZW5zaW9uLiBUaGlzIGlzIGEgbG93CisvLyBwZXJmb3JtYW5jZSBvcGVyYXRpb24sIGFuZCBv
bmx5IGludGVuZGVkIGZvciBzeW1ib2wgdGFibGVzIHRoYXQKKy8vIGxpdmUgYWNyb3NzIGEgbGFy
Z2UgbnVtYmVyIG9mIGNvbXBpbGVzLgorLy8KK3ZvaWQgVFN5bWJvbFRhYmxlTGV2ZWw6OnJlbGF0
ZVRvRXh0ZW5zaW9uKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFRTdHJpbmcmIGV4dCkKK3sKKyAg
ICBmb3IgKHRMZXZlbDo6aXRlcmF0b3IgaXQgPSBsZXZlbC5iZWdpbigpOyBpdCAhPSBsZXZlbC5l
bmQoKTsgKytpdCkgeworICAgICAgICBUU3ltYm9sKiBzeW1ib2wgPSBpdC0+c2Vjb25kOworICAg
ICAgICBpZiAoc3ltYm9sLT5nZXROYW1lKCkgPT0gbmFtZSkKKyAgICAgICAgICAgIHN5bWJvbC0+
cmVsYXRlVG9FeHRlbnNpb24oZXh0KTsKKyAgICB9Cit9CisKK1RTeW1ib2xUYWJsZTo6flRTeW1i
b2xUYWJsZSgpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YWJsZS5zaXplKCk7ICsr
aSkKKyAgICAgICAgZGVsZXRlIHRhYmxlW2ldOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cHJlY2lzaW9uU3RhY2suc2l6ZSgpOyArK2kpCisgICAgICAgIGRlbGV0ZSBwcmVjaXNpb25TdGFj
a1tpXTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZjNzIxMWYyYTk1
MmM4OTUxNzgzNTE1MjU3NmQ2OGM5Mzg4Njc3YjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJsZS5oCkBA
IC0wLDAgKzEsMzgyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9TWU1CT0xfVEFC
TEVfSU5DTFVERURfCisjZGVmaW5lIF9TWU1CT0xfVEFCTEVfSU5DTFVERURfCisKKy8vCisvLyBT
eW1ib2wgdGFibGUgZm9yIHBhcnNpbmcuICBIYXMgdGhlc2UgZGVzaWduIGNoYXJhY3RlcmlzdGlj
czoKKy8vCisvLyAqIFNhbWUgc3ltYm9sIHRhYmxlIGNhbiBiZSB1c2VkIHRvIGNvbXBpbGUgbWFu
eSBzaGFkZXJzLCB0byBwcmVzZXJ2ZQorLy8gICBlZmZvcnQgb2YgY3JlYXRpbmcgYW5kIGxvYWRp
bmcgd2l0aCB0aGUgbGFyZ2UgbnVtYmVycyBvZiBidWlsdC1pbgorLy8gICBzeW1ib2xzLgorLy8K
Ky8vICogTmFtZSBtYW5nbGluZyB3aWxsIGJlIHVzZWQgdG8gZ2l2ZSBlYWNoIGZ1bmN0aW9uIGEg
dW5pcXVlIG5hbWUKKy8vICAgc28gdGhhdCBzeW1ib2wgdGFibGUgbG9va3VwcyBhcmUgbmV2ZXIg
YW1iaWd1b3VzLiAgVGhpcyBhbGxvd3MKKy8vICAgYSBzaW1wbGVyIHN5bWJvbCB0YWJsZSBzdHJ1
Y3R1cmUuCisvLworLy8gKiBQdXNoaW5nIGFuZCBwb3BwaW5nIG9mIHNjb3BlLCBzbyBzeW1ib2wg
dGFibGUgd2lsbCByZWFsbHkgYmUgYSBzdGFjayAKKy8vICAgb2Ygc3ltYm9sIHRhYmxlcy4gIFNl
YXJjaGVkIGZyb20gdGhlIHRvcCwgd2l0aCBuZXcgaW5zZXJ0cyBnb2luZyBpbnRvCisvLyAgIHRo
ZSB0b3AuCisvLworLy8gKiBDb25zdGFudHM6ICBDb21waWxlIHRpbWUgY29uc3RhbnQgc3ltYm9s
cyB3aWxsIGtlZXAgdGhlaXIgdmFsdWVzCisvLyAgIGluIHRoZSBzeW1ib2wgdGFibGUuICBUaGUg
cGFyc2VyIGNhbiBzdWJzdGl0dXRlIGNvbnN0YW50cyBhdCBwYXJzZQorLy8gICB0aW1lLCBpbmNs
dWRpbmcgZG9pbmcgY29uc3RhbnQgZm9sZGluZyBhbmQgY29uc3RhbnQgcHJvcGFnYXRpb24uCisv
LworLy8gKiBObyB0ZW1wb3JhcmllczogIFRlbXBvcmFyaWVzIG1hZGUgZnJvbSBvcGVyYXRpb25z
ICgrLCAtLSwgLnh5LCBldGMuKQorLy8gICBhcmUgdHJhY2tlZCBpbiB0aGUgaW50ZXJtZWRpYXRl
IHJlcHJlc2VudGF0aW9uLCBub3QgdGhlIHN5bWJvbCB0YWJsZS4KKy8vCisKKyNpbmNsdWRlIDxh
c3NlcnQuaD4KKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvaW50ZXJtZWRpYXRlLmgiCisKKy8vCisvLyBTeW1ib2wgYmFzZSBjbGFzcy4gIChDYW4gYnVp
bGQgZnVuY3Rpb25zIG9yIHZhcmlhYmxlcyBvdXQgb2YgdGhlc2UuLi4pCisvLworY2xhc3MgVFN5
bWJvbCB7ICAgIAorcHVibGljOgorICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKKyAg
ICBUU3ltYm9sKGNvbnN0IFRTdHJpbmcqIG4pIDogIHVuaXF1ZUlkKDApLCBuYW1lKG4pIHsgfQor
ICAgIHZpcnR1YWwgflRTeW1ib2woKSB7IC8qIGRvbid0IGRlbGV0ZSBuYW1lLCBpdCdzIGZyb20g
dGhlIHBvb2wgKi8gfQorCisgICAgY29uc3QgVFN0cmluZyYgZ2V0TmFtZSgpIGNvbnN0IHsgcmV0
dXJuICpuYW1lOyB9CisgICAgdmlydHVhbCBjb25zdCBUU3RyaW5nJiBnZXRNYW5nbGVkTmFtZSgp
IGNvbnN0IHsgcmV0dXJuIGdldE5hbWUoKTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0Z1bmN0aW9u
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNWYXJpYWJsZSgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBzZXRVbmlxdWVJZChpbnQgaWQpIHsg
dW5pcXVlSWQgPSBpZDsgfQorICAgIGludCBnZXRVbmlxdWVJZCgpIGNvbnN0IHsgcmV0dXJuIHVu
aXF1ZUlkOyB9CisgICAgdmlydHVhbCB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29u
c3QgPSAwOworICAgIHZvaWQgcmVsYXRlVG9FeHRlbnNpb24oY29uc3QgVFN0cmluZyYgZXh0KSB7
IGV4dGVuc2lvbiA9IGV4dDsgfQorICAgIGNvbnN0IFRTdHJpbmcmIGdldEV4dGVuc2lvbigpIGNv
bnN0IHsgcmV0dXJuIGV4dGVuc2lvbjsgfQorCitwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihUU3ltYm9sKTsKKworICAgIGludCB1bmlxdWVJZDsgICAgICAvLyBGb3IgcmVh
bCBjb21wYXJpbmcgZHVyaW5nIGNvZGUgZ2VuZXJhdGlvbgorICAgIGNvbnN0IFRTdHJpbmcgKm5h
bWU7CisgICAgVFN0cmluZyBleHRlbnNpb247Cit9OworCisvLworLy8gVmFyaWFibGUgY2xhc3Ms
IG1lYW5pbmcgYSBzeW1ib2wgdGhhdCdzIG5vdCBhIGZ1bmN0aW9uLgorLy8gCisvLyBUaGVyZSBj
b3VsZCBiZSBhIHNlcGFyYXRlIGNsYXNzIGhlaXJhcmNoeSBmb3IgQ29uc3RhbnQgdmFyaWFibGVz
OworLy8gT25seSBvbmUgb2YgaW50LCBib29sLCBvciBmbG9hdCwgKG9yIG5vbmUpIGlzIGNvcnJl
Y3QgZm9yCisvLyBhbnkgcGFydGljdWxhciB1c2UsIGJ1dCBpdCdzIGVhc3kgdG8gZG8gdGhpcyB3
YXksIGFuZCBkb2Vzbid0CisvLyBzZWVtIHdvcnRoIGhhdmluZyBzZXBhcmF0ZSBjbGFzc2VzLCBh
bmQgImdldENvbnN0IiBjYW4ndCBzaW1wbHkgcmV0dXJuCisvLyBkaWZmZXJlbnQgdmFsdWVzIGZv
ciBkaWZmZXJlbnQgdHlwZXMgcG9seW1vcnBoaWNhbGx5LCBzbyB0aGlzIGlzIAorLy8ganVzdCBz
aW1wbGUgYW5kIHByYWdtYXRpYy4KKy8vCitjbGFzcyBUVmFyaWFibGUgOiBwdWJsaWMgVFN5bWJv
bCB7CitwdWJsaWM6CisgICAgVFZhcmlhYmxlKGNvbnN0IFRTdHJpbmcgKm5hbWUsIGNvbnN0IFRU
eXBlJiB0LCBib29sIHVUID0gZmFsc2UgKSA6IFRTeW1ib2wobmFtZSksIHR5cGUodCksIHVzZXJU
eXBlKHVUKSwgdW5pb25BcnJheSgwKSB7IH0KKyAgICB2aXJ0dWFsIH5UVmFyaWFibGUoKSB7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgaXNWYXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0gICAg
CisgICAgVFR5cGUmIGdldFR5cGUoKSB7IHJldHVybiB0eXBlOyB9ICAgIAorICAgIGNvbnN0IFRU
eXBlJiBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZTsgfQorICAgIGJvb2wgaXNVc2VyVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIHVzZXJUeXBlOyB9CisgICAgdm9pZCBzZXRRdWFsaWZpZXIoVFF1
YWxpZmllciBxdWFsaWZpZXIpIHsgdHlwZS5zZXRRdWFsaWZpZXIocXVhbGlmaWVyKTsgfQorCisg
ICAgdmlydHVhbCB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7CisKKyAgICBD
b25zdGFudFVuaW9uKiBnZXRDb25zdFBvaW50ZXIoKQorICAgIHsgCisgICAgICAgIGlmICghdW5p
b25BcnJheSkKKyAgICAgICAgICAgIHVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblt0eXBl
LmdldE9iamVjdFNpemUoKV07CisKKyAgICAgICAgcmV0dXJuIHVuaW9uQXJyYXk7CisgICAgfQor
CisgICAgQ29uc3RhbnRVbmlvbiogZ2V0Q29uc3RQb2ludGVyKCkgY29uc3QgeyByZXR1cm4gdW5p
b25BcnJheTsgfQorCisgICAgdm9pZCBzaGFyZUNvbnN0UG9pbnRlciggQ29uc3RhbnRVbmlvbiAq
Y29uc3RBcnJheSkKKyAgICB7CisgICAgICAgIGlmICh1bmlvbkFycmF5ID09IGNvbnN0QXJyYXkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZGVsZXRlW10gdW5pb25BcnJheTsKKyAg
ICAgICAgdW5pb25BcnJheSA9IGNvbnN0QXJyYXk7ICAKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRWYXJpYWJsZSk7CisKKyAgICBUVHlwZSB0eXBlOwor
ICAgIGJvb2wgdXNlclR5cGU7CisgICAgLy8gd2UgYXJlIGFzc3VtaW5nIHRoYXQgUG9vbCBBbGxv
Y2F0b3Igd2lsbCBmcmVlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIHRvIHVuaW9uQXJyYXkKKyAgICAv
LyB3aGVuIHRoaXMgb2JqZWN0IGlzIGRlc3Ryb3llZAorICAgIENvbnN0YW50VW5pb24gKnVuaW9u
QXJyYXk7Cit9OworCisvLworLy8gVGhlIGZ1bmN0aW9uIHN1Yi1jbGFzcyBvZiBzeW1ib2xzIGFu
ZCB0aGUgcGFyc2VyIHdpbGwgbmVlZCB0bworLy8gc2hhcmUgdGhpcyBkZWZpbml0aW9uIG9mIGEg
ZnVuY3Rpb24gcGFyYW1ldGVyLgorLy8KK3N0cnVjdCBUUGFyYW1ldGVyIHsKKyAgICBUU3RyaW5n
ICpuYW1lOworICAgIFRUeXBlKiB0eXBlOworfTsKKworLy8KKy8vIFRoZSBmdW5jdGlvbiBzdWIt
Y2xhc3Mgb2YgYSBzeW1ib2wuICAKKy8vCitjbGFzcyBURnVuY3Rpb24gOiBwdWJsaWMgVFN5bWJv
bCB7CitwdWJsaWM6CisgICAgVEZ1bmN0aW9uKFRPcGVyYXRvciBvKSA6CisgICAgICAgIFRTeW1i
b2woMCksCisgICAgICAgIHJldHVyblR5cGUoVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKSks
CisgICAgICAgIG9wKG8pLAorICAgICAgICBkZWZpbmVkKGZhbHNlKSB7IH0KKyAgICBURnVuY3Rp
b24oY29uc3QgVFN0cmluZyAqbmFtZSwgVFR5cGUmIHJldFR5cGUsIFRPcGVyYXRvciB0T3AgPSBF
T3BOdWxsKSA6IAorICAgICAgICBUU3ltYm9sKG5hbWUpLCAKKyAgICAgICAgcmV0dXJuVHlwZShy
ZXRUeXBlKSwKKyAgICAgICAgbWFuZ2xlZE5hbWUoVEZ1bmN0aW9uOjptYW5nbGVOYW1lKCpuYW1l
KSksCisgICAgICAgIG9wKHRPcCksCisgICAgICAgIGRlZmluZWQoZmFsc2UpIHsgfQorICAgIHZp
cnR1YWwgflRGdW5jdGlvbigpOworICAgIHZpcnR1YWwgYm9vbCBpc0Z1bmN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfSAgICAKKworICAgIHN0YXRpYyBUU3RyaW5nIG1hbmdsZU5hbWUoY29u
c3QgVFN0cmluZyYgbmFtZSkgeyByZXR1cm4gbmFtZSArICcoJzsgfQorICAgIHN0YXRpYyBUU3Ry
aW5nIHVubWFuZ2xlTmFtZShjb25zdCBUU3RyaW5nJiBtYW5nbGVkTmFtZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBUU3RyaW5nKG1hbmdsZWROYW1lLmNfc3RyKCksIG1hbmdsZWROYW1lLmZpbmRf
Zmlyc3Rfb2YoJygnKSk7CisgICAgfQorCisgICAgdm9pZCBhZGRQYXJhbWV0ZXIoVFBhcmFtZXRl
ciYgcCkgCisgICAgeyAKKyAgICAgICAgcGFyYW1ldGVycy5wdXNoX2JhY2socCk7CisgICAgICAg
IG1hbmdsZWROYW1lID0gbWFuZ2xlZE5hbWUgKyBwLnR5cGUtPmdldE1hbmdsZWROYW1lKCk7Cisg
ICAgfQorCisgICAgY29uc3QgVFN0cmluZyYgZ2V0TWFuZ2xlZE5hbWUoKSBjb25zdCB7IHJldHVy
biBtYW5nbGVkTmFtZTsgfQorICAgIGNvbnN0IFRUeXBlJiBnZXRSZXR1cm5UeXBlKCkgY29uc3Qg
eyByZXR1cm4gcmV0dXJuVHlwZTsgfQorCisgICAgdm9pZCByZWxhdGVUb09wZXJhdG9yKFRPcGVy
YXRvciBvKSB7IG9wID0gbzsgfQorICAgIFRPcGVyYXRvciBnZXRCdWlsdEluT3AoKSBjb25zdCB7
IHJldHVybiBvcDsgfQorCisgICAgdm9pZCBzZXREZWZpbmVkKCkgeyBkZWZpbmVkID0gdHJ1ZTsg
fQorICAgIGJvb2wgaXNEZWZpbmVkKCkgeyByZXR1cm4gZGVmaW5lZDsgfQorCisgICAgc2l6ZV90
IGdldFBhcmFtQ291bnQoKSBjb25zdCB7IHJldHVybiBwYXJhbWV0ZXJzLnNpemUoKTsgfSAgCisg
ICAgY29uc3QgVFBhcmFtZXRlciYgZ2V0UGFyYW0oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIHBh
cmFtZXRlcnNbaV07IH0KKworICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1Np
bmspIGNvbnN0OworCitwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihURnVu
Y3Rpb24pOworCisgICAgdHlwZWRlZiBUVmVjdG9yPFRQYXJhbWV0ZXI+IFRQYXJhbUxpc3Q7Cisg
ICAgVFBhcmFtTGlzdCBwYXJhbWV0ZXJzOworICAgIFRUeXBlIHJldHVyblR5cGU7CisgICAgVFN0
cmluZyBtYW5nbGVkTmFtZTsKKyAgICBUT3BlcmF0b3Igb3A7CisgICAgYm9vbCBkZWZpbmVkOwor
fTsKKworCitjbGFzcyBUU3ltYm9sVGFibGVMZXZlbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBU
TWFwPFRTdHJpbmcsIFRTeW1ib2wqPiB0TGV2ZWw7CisgICAgdHlwZWRlZiB0TGV2ZWw6OmNvbnN0
X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgY29uc3QgdExldmVsOjp2YWx1
ZV90eXBlIHRMZXZlbFBhaXI7CisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8dExldmVsOjppdGVyYXRv
ciwgYm9vbD4gdEluc2VydFJlc3VsdDsKKworICAgIFRTeW1ib2xUYWJsZUxldmVsKCkgeyB9Cisg
ICAgflRTeW1ib2xUYWJsZUxldmVsKCk7CisKKyAgICBib29sIGluc2VydChjb25zdCBUU3RyaW5n
ICZuYW1lLCBUU3ltYm9sICZzeW1ib2wpCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBy
ZXR1cm5pbmcgdHJ1ZSBtZWFucyBzeW1ib2wgd2FzIGFkZGVkIHRvIHRoZSB0YWJsZQorICAgICAg
ICAvLworICAgICAgICB0SW5zZXJ0UmVzdWx0IHJlc3VsdCA9IGxldmVsLmluc2VydCh0TGV2ZWxQ
YWlyKG5hbWUsICZzeW1ib2wpKTsKKworICAgICAgICByZXR1cm4gcmVzdWx0LnNlY29uZDsKKyAg
ICB9CisKKyAgICBib29sIGluc2VydChUU3ltYm9sICZzeW1ib2wpCisgICAgeworICAgICAgICBy
ZXR1cm4gaW5zZXJ0KHN5bWJvbC5nZXRNYW5nbGVkTmFtZSgpLCBzeW1ib2wpOworICAgIH0KKwor
ICAgIFRTeW1ib2wqIGZpbmQoY29uc3QgVFN0cmluZyYgbmFtZSkgY29uc3QKKyAgICB7CisgICAg
ICAgIHRMZXZlbDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsZXZlbC5maW5kKG5hbWUpOworICAgICAg
ICBpZiAoaXQgPT0gbGV2ZWwuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcmV0dXJuICgqaXQpLnNlY29uZDsKKyAgICB9CisKKyAgICBjb25z
dF9pdGVyYXRvciBiZWdpbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbGV2ZWwuYmVn
aW4oKTsKKyAgICB9CisKKyAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGxldmVsLmVuZCgpOworICAgIH0KKworICAgIHZvaWQgcmVsYXRlVG9PcGVy
YXRvcihjb25zdCBjaGFyKiBuYW1lLCBUT3BlcmF0b3Igb3ApOworICAgIHZvaWQgcmVsYXRlVG9F
eHRlbnNpb24oY29uc3QgY2hhciogbmFtZSwgY29uc3QgVFN0cmluZyYgZXh0KTsKKyAgICB2b2lk
IGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICB0TGV2
ZWwgbGV2ZWw7Cit9OworCitjbGFzcyBUU3ltYm9sVGFibGUgeworcHVibGljOgorICAgIFRTeW1i
b2xUYWJsZSgpIDogdW5pcXVlSWQoMCkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFRo
ZSBzeW1ib2wgdGFibGUgY2Fubm90IGJlIHVzZWQgdW50aWwgcHVzaCgpIGlzIGNhbGxlZCwgYnV0
CisgICAgICAgIC8vIHRoZSBsYWNrIG9mIGFuIGluaXRpYWwgY2FsbCB0byBwdXNoKCkgY2FuIGJl
IHVzZWQgdG8gZGV0ZWN0CisgICAgICAgIC8vIHRoYXQgdGhlIHN5bWJvbCB0YWJsZSBoYXMgbm90
IGJlZW4gcHJlbG9hZGVkIHdpdGggYnVpbHQtaW5zLgorICAgICAgICAvLworICAgIH0KKyAgICB+
VFN5bWJvbFRhYmxlKCk7CisKKyAgICAvLworICAgIC8vIFdoZW4gdGhlIHN5bWJvbCB0YWJsZSBp
cyBpbml0aWFsaXplZCB3aXRoIHRoZSBidWlsdC1pbnMsIHRoZXJlIHNob3VsZAorICAgIC8vICdw
dXNoJyBjYWxscywgc28gdGhhdCBidWlsdC1pbnMgYXJlIGF0IGxldmVsIDAgYW5kIHRoZSBzaGFk
ZXIKKyAgICAvLyBnbG9iYWxzIGFyZSBhdCBsZXZlbCAxLgorICAgIC8vCisgICAgYm9vbCBpc0Vt
cHR5KCkgeyByZXR1cm4gdGFibGUuc2l6ZSgpID09IDA7IH0KKyAgICBib29sIGF0QnVpbHRJbkxl
dmVsKCkgeyByZXR1cm4gdGFibGUuc2l6ZSgpID09IDE7IH0KKyAgICBib29sIGF0R2xvYmFsTGV2
ZWwoKSB7IHJldHVybiB0YWJsZS5zaXplKCkgPD0gMjsgfQorICAgIHZvaWQgcHVzaCgpCisgICAg
eworICAgICAgICB0YWJsZS5wdXNoX2JhY2sobmV3IFRTeW1ib2xUYWJsZUxldmVsKTsKKyAgICAg
ICAgcHJlY2lzaW9uU3RhY2sucHVzaF9iYWNrKG5ldyBQcmVjaXNpb25TdGFja0xldmVsKTsKKyAg
ICB9CisKKyAgICB2b2lkIHBvcCgpCisgICAgeworICAgICAgICBkZWxldGUgdGFibGUuYmFjaygp
OworICAgICAgICB0YWJsZS5wb3BfYmFjaygpOworCisgICAgICAgIGRlbGV0ZSBwcmVjaXNpb25T
dGFjay5iYWNrKCk7CisgICAgICAgIHByZWNpc2lvblN0YWNrLnBvcF9iYWNrKCk7CisgICAgfQor
CisgICAgYm9vbCBpbnNlcnQoVFN5bWJvbCYgc3ltYm9sKQorICAgIHsKKyAgICAgICAgc3ltYm9s
LnNldFVuaXF1ZUlkKCsrdW5pcXVlSWQpOworICAgICAgICByZXR1cm4gdGFibGVbY3VycmVudExl
dmVsKCldLT5pbnNlcnQoc3ltYm9sKTsKKyAgICB9CisKKyAgICBib29sIGluc2VydENvbnN0SW50
KGNvbnN0IGNoYXIgKm5hbWUsIGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIFRWYXJpYWJsZSAq
Y29uc3RhbnQgPSBuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKG5hbWUpLCBUVHlwZShFYnRJ
bnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QsIDEpKTsKKyAgICAgICAgY29uc3RhbnQtPmdldENv
bnN0UG9pbnRlcigpLT5zZXRJQ29uc3QodmFsdWUpOworICAgICAgICByZXR1cm4gaW5zZXJ0KCpj
b25zdGFudCk7CisgICAgfQorCisgICAgYm9vbCBpbnNlcnRCdWlsdEluKFRUeXBlICpydmFsdWUs
IGNvbnN0IGNoYXIgKm5hbWUsIFRUeXBlICpwdHlwZTEsIFRUeXBlICpwdHlwZTIgPSAwLCBUVHlw
ZSAqcHR5cGUzID0gMCkKKyAgICB7CisgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcg
VEZ1bmN0aW9uKE5ld1Bvb2xUU3RyaW5nKG5hbWUpLCAqcnZhbHVlKTsKKworICAgICAgICBUUGFy
YW1ldGVyIHBhcmFtMSA9IHtOVUxMLCBwdHlwZTF9OworICAgICAgICBmdW5jdGlvbi0+YWRkUGFy
YW1ldGVyKHBhcmFtMSk7CisKKyAgICAgICAgaWYocHR5cGUyKQorICAgICAgICB7CisgICAgICAg
ICAgICBUUGFyYW1ldGVyIHBhcmFtMiA9IHtOVUxMLCBwdHlwZTJ9OworICAgICAgICAgICAgZnVu
Y3Rpb24tPmFkZFBhcmFtZXRlcihwYXJhbTIpOworICAgICAgICB9CisKKyAgICAgICAgaWYocHR5
cGUzKQorICAgICAgICB7CisgICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtMyA9IHtOVUxMLCBw
dHlwZTN9OworICAgICAgICAgICAgZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJhbTMpOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIGluc2VydCgqZnVuY3Rpb24pOworICAgIH0KKworICAg
IFRTeW1ib2wqIGZpbmQoY29uc3QgVFN0cmluZyYgbmFtZSwgYm9vbCogYnVpbHRJbiA9IDAsIGJv
b2wgKnNhbWVTY29wZSA9IDApIAorICAgIHsKKyAgICAgICAgaW50IGxldmVsID0gY3VycmVudExl
dmVsKCk7CisgICAgICAgIFRTeW1ib2wqIHN5bWJvbDsKKyAgICAgICAgZG8geworICAgICAgICAg
ICAgc3ltYm9sID0gdGFibGVbbGV2ZWxdLT5maW5kKG5hbWUpOworICAgICAgICAgICAgLS1sZXZl
bDsKKyAgICAgICAgfSB3aGlsZSAoc3ltYm9sID09IDAgJiYgbGV2ZWwgPj0gMCk7CisgICAgICAg
IGxldmVsKys7CisgICAgICAgIGlmIChidWlsdEluKQorICAgICAgICAgICAgKmJ1aWx0SW4gPSBs
ZXZlbCA9PSAwOworICAgICAgICBpZiAoc2FtZVNjb3BlKQorICAgICAgICAgICAgKnNhbWVTY29w
ZSA9IGxldmVsID09IGN1cnJlbnRMZXZlbCgpOworICAgICAgICByZXR1cm4gc3ltYm9sOworICAg
IH0KKworICAgIFRTeW1ib2wqIGZpbmRCdWlsdEluKGNvbnN0IFRTdHJpbmcgJm5hbWUpCisgICAg
eworICAgICAgICByZXR1cm4gdGFibGVbMF0tPmZpbmQobmFtZSk7CisgICAgfQorCisgICAgVFN5
bWJvbFRhYmxlTGV2ZWwqIGdldE91dGVyTGV2ZWwoKSB7CisgICAgICAgIGFzc2VydCh0YWJsZS5z
aXplKCkgPj0gMik7CisgICAgICAgIHJldHVybiB0YWJsZVtjdXJyZW50TGV2ZWwoKSAtIDFdOwor
ICAgIH0KKworICAgIHZvaWQgcmVsYXRlVG9PcGVyYXRvcihjb25zdCBjaGFyKiBuYW1lLCBUT3Bl
cmF0b3Igb3ApIHsKKyAgICAgICAgdGFibGVbMF0tPnJlbGF0ZVRvT3BlcmF0b3IobmFtZSwgb3Ap
OworICAgIH0KKyAgICB2b2lkIHJlbGF0ZVRvRXh0ZW5zaW9uKGNvbnN0IGNoYXIqIG5hbWUsIGNv
bnN0IFRTdHJpbmcmIGV4dCkgeworICAgICAgICB0YWJsZVswXS0+cmVsYXRlVG9FeHRlbnNpb24o
bmFtZSwgZXh0KTsKKyAgICB9CisgICAgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNv
bnN0OworCisgICAgYm9vbCBzZXREZWZhdWx0UHJlY2lzaW9uKGNvbnN0IFRQdWJsaWNUeXBlJiB0
eXBlLCBUUHJlY2lzaW9uIHByZWMpIHsKKyAgICAgICAgaWYgKCFzdXBwb3J0c1ByZWNpc2lvbih0
eXBlLnR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAodHlwZS5z
aXplICE9IDEgfHwgdHlwZS5tYXRyaXggfHwgdHlwZS5hcnJheSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgLy8gTm90IGFsbG93ZWQgdG8gc2V0IGZvciBhZ2dyZWdhdGUgdHlwZXMKKyAgICAg
ICAgaW50IGluZGV4T2ZMYXN0RWxlbWVudCA9IHN0YXRpY19jYXN0PGludD4ocHJlY2lzaW9uU3Rh
Y2suc2l6ZSgpKSAtIDE7CisgICAgICAgICgqcHJlY2lzaW9uU3RhY2tbaW5kZXhPZkxhc3RFbGVt
ZW50XSlbdHlwZS50eXBlXSA9IHByZWM7IC8vIFVzZXMgbWFwIG9wZXJhdG9yIFtdLCBvdmVyd3Jp
dGVzIHRoZSBjdXJyZW50IHZhbHVlCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IC8vIFNlYXJjaGVzIGRvd24gdGhlIHByZWNpc2lvblN0YWNrIGZvciBhIHByZWNpc2lvbiBxdWFs
aWZpZXIgZm9yIHRoZSBzcGVjaWZpZWQgVEJhc2ljVHlwZQorICAgIFRQcmVjaXNpb24gZ2V0RGVm
YXVsdFByZWNpc2lvbihUQmFzaWNUeXBlIHR5cGUpIHsKKyAgICAgICAgaWYgKCFzdXBwb3J0c1By
ZWNpc2lvbih0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBFYnBVbmRlZmluZWQ7CisgICAgICAg
IGludCBsZXZlbCA9IHN0YXRpY19jYXN0PGludD4ocHJlY2lzaW9uU3RhY2suc2l6ZSgpKSAtIDE7
CisgICAgICAgIGFzc2VydChsZXZlbCA+PSAwKTsgLy8gSnVzdCB0byBiZSBzYWZlLiBTaG91bGQg
bm90IGhhcHBlbi4KKyAgICAgICAgUHJlY2lzaW9uU3RhY2tMZXZlbDo6aXRlcmF0b3IgaXQ7Cisg
ICAgICAgIFRQcmVjaXNpb24gcHJlYyA9IEVicFVuZGVmaW5lZDsgLy8gSWYgd2UgZG9udCBmaW5k
IGFueXRoaW5nIHdlIHJldHVybiB0aGlzLiBTaG91bGQgd2UgZXJyb3IgY2hlY2sgdGhpcz8KKyAg
ICAgICAgd2hpbGUgKGxldmVsID49IDApIHsKKyAgICAgICAgICAgIGl0ID0gcHJlY2lzaW9uU3Rh
Y2tbbGV2ZWxdLT5maW5kKHR5cGUpOworICAgICAgICAgICAgaWYgKGl0ICE9IHByZWNpc2lvblN0
YWNrW2xldmVsXS0+ZW5kKCkpIHsKKyAgICAgICAgICAgICAgICBwcmVjID0gKCppdCkuc2Vjb25k
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGV2
ZWwtLTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcHJlYzsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgaW50IGN1cnJlbnRMZXZlbCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o
dGFibGUuc2l6ZSgpKSAtIDE7IH0KKworICAgIGJvb2wgc3VwcG9ydHNQcmVjaXNpb24oVEJhc2lj
VHlwZSB0eXBlKSB7CisgICAgICAvLyBPbmx5IHN1cHBvcnRzIHByZWNpc2lvbiBmb3IgaW50LCBm
bG9hdCwgYW5kIHNhbXBsZXIgdHlwZXMuCisgICAgICByZXR1cm4gdHlwZSA9PSBFYnRGbG9hdCB8
fCB0eXBlID09IEVidEludCB8fCBJc1NhbXBsZXIodHlwZSk7CisgICAgfQorCisgICAgaW50IHVu
aXF1ZUlkOyAgICAgLy8gZm9yIHVuaXF1ZSBpZGVudGlmaWNhdGlvbiBpbiBjb2RlIGdlbmVyYXRp
b24KKyAgICBzdGQ6OnZlY3RvcjxUU3ltYm9sVGFibGVMZXZlbCo+IHRhYmxlOworICAgIHR5cGVk
ZWYgVE1hcDxUQmFzaWNUeXBlLCBUUHJlY2lzaW9uPiBQcmVjaXNpb25TdGFja0xldmVsOworICAg
IHN0ZDo6dmVjdG9yPFByZWNpc2lvblN0YWNrTGV2ZWwqPiBwcmVjaXNpb25TdGFjazsKK307CisK
KyNlbmRpZiAvLyBfU1lNQk9MX1RBQkxFX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckVTU0wuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvckVTU0wuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkyNjJmN2FmOGNiODVhNjIzYzg4MGM3MTM1ODIzZTBl
MzI0OTY2MWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yRVNTTC5jcHAKQEAgLTAsMCArMSw0MyBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvckVTU0wuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0RVNTTC5o
IgorCitUcmFuc2xhdG9yRVNTTDo6VHJhbnNsYXRvckVTU0woU2hTaGFkZXJUeXBlIHR5cGUsIFNo
U2hhZGVyU3BlYyBzcGVjKQorICAgIDogVENvbXBpbGVyKHR5cGUsIHNwZWMpIHsKK30KKwordm9p
ZCBUcmFuc2xhdG9yRVNTTDo6dHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KSB7CisgICAgVElu
Zm9TaW5rQmFzZSYgc2luayA9IGdldEluZm9TaW5rKCkub2JqOworCisgICAgLy8gV3JpdGUgYnVp
bHQtaW4gZXh0ZW5zaW9uIGJlaGF2aW9ycy4KKyAgICB3cml0ZUV4dGVuc2lvbkJlaGF2aW9yKCk7
CisKKyAgICAvLyBXcml0ZSBlbXVsYXRlZCBidWlsdC1pbiBmdW5jdGlvbnMgaWYgbmVlZGVkLgor
ICAgIGdldEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yKCkuT3V0cHV0RW11bGF0ZWRGdW5jdGlvbkRl
ZmluaXRpb24oCisgICAgICAgIHNpbmssIGdldFNoYWRlclR5cGUoKSA9PSBTSF9GUkFHTUVOVF9T
SEFERVIpOworCisgICAgLy8gV3JpdGUgYXJyYXkgYm91bmRzIGNsYW1waW5nIGVtdWxhdGlvbiBp
ZiBuZWVkZWQuCisgICAgZ2V0QXJyYXlCb3VuZHNDbGFtcGVyKCkuT3V0cHV0Q2xhbXBpbmdGdW5j
dGlvbkRlZmluaXRpb24oc2luayk7CisKKyAgICAvLyBXcml0ZSB0cmFuc2xhdGVkIHNoYWRlci4K
KyAgICBUT3V0cHV0RVNTTCBvdXRwdXRFU1NMKHNpbmssIGdldEFycmF5SW5kZXhDbGFtcGluZ1N0
cmF0ZWd5KCksIGdldEhhc2hGdW5jdGlvbigpLCBnZXROYW1lTWFwKCksIGdldFN5bWJvbFRhYmxl
KCkpOworICAgIHJvb3QtPnRyYXZlcnNlKCZvdXRwdXRFU1NMKTsKK30KKwordm9pZCBUcmFuc2xh
dG9yRVNTTDo6d3JpdGVFeHRlbnNpb25CZWhhdmlvcigpIHsKKyAgICBUSW5mb1NpbmtCYXNlJiBz
aW5rID0gZ2V0SW5mb1NpbmsoKS5vYmo7CisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBl
eHRlbnNpb25CZWhhdmlvciA9IGdldEV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgZm9yIChURXh0
ZW5zaW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRlbnNpb25CZWhhdmlvci5i
ZWdpbigpOworICAgICAgICAgaXRlciAhPSBleHRlbnNpb25CZWhhdmlvci5lbmQoKTsgKytpdGVy
KSB7CisgICAgICAgIGlmIChpdGVyLT5zZWNvbmQgIT0gRUJoVW5kZWZpbmVkKSB7CisgICAgICAg
ICAgICBzaW5rIDw8ICIjZXh0ZW5zaW9uICIgPDwgaXRlci0+Zmlyc3QgPDwgIiA6ICIKKyAgICAg
ICAgICAgICAgICAgPDwgZ2V0QmVoYXZpb3JTdHJpbmcoaXRlci0+c2Vjb25kKSA8PCAiXG4iOwor
ICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckVTU0wuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JFU1NMLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZTE4ZjNjMjVlYzhiOWVlNTI5NmRkODhhZGRkNWUxM2Q2NjMyZjJhMwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JFU1NMLmgKQEAgLTAsMCArMSwyMyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SRVNTTF9IXworI2RlZmluZSBDT01QSUxFUl9UUkFO
U0xBVE9SRVNTTF9IXworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5o
IgorCitjbGFzcyBUcmFuc2xhdG9yRVNTTCA6IHB1YmxpYyBUQ29tcGlsZXIgeworcHVibGljOgor
ICAgIFRyYW5zbGF0b3JFU1NMKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYyk7
CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiBy
b290KTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHdyaXRlRXh0ZW5zaW9uQmVoYXZpb3IoKTsKK307
CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUkVTU0xfSF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JH
TFNMLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JHTFNMLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42Njg4ZDdmMzYyZTkwYmRjYzdhZjhmMWE0
YWQ1MWE2MDRiNTJjMGExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckdMU0wuY3BwCkBAIC0wLDAgKzEs
NDQgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JHTFNMLmgiCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL091dHB1
dEdMU0wuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1ZlcnNpb25HTFNMLmgiCisK
K3N0YXRpYyB2b2lkIHdyaXRlVmVyc2lvbihTaFNoYWRlclR5cGUgdHlwZSwgVEludGVybU5vZGUq
IHJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgVEluZm9TaW5rQmFzZSYgc2luaykgewor
ICAgIFRWZXJzaW9uR0xTTCB2ZXJzaW9uR0xTTCh0eXBlKTsKKyAgICByb290LT50cmF2ZXJzZSgm
dmVyc2lvbkdMU0wpOworICAgIGludCB2ZXJzaW9uID0gdmVyc2lvbkdMU0wuZ2V0VmVyc2lvbigp
OworICAgIC8vIFdlIG5lZWQgdG8gd3JpdGUgdmVyc2lvbiBkaXJlY3RpdmUgb25seSBpZiBpdCBp
cyBncmVhdGVyIHRoYW4gMTEwLgorICAgIC8vIElmIHRoZXJlIGlzIG5vIHZlcnNpb24gZGlyZWN0
aXZlIGluIHRoZSBzaGFkZXIsIDExMCBpcyBpbXBsaWVkLgorICAgIGlmICh2ZXJzaW9uID4gMTEw
KSB7CisgICAgICAgIHNpbmsgPDwgIiN2ZXJzaW9uICIgPDwgdmVyc2lvbiA8PCAiXG4iOworICAg
IH0KK30KKworVHJhbnNsYXRvckdMU0w6OlRyYW5zbGF0b3JHTFNMKFNoU2hhZGVyVHlwZSB0eXBl
LCBTaFNoYWRlclNwZWMgc3BlYykKKyAgICA6IFRDb21waWxlcih0eXBlLCBzcGVjKSB7Cit9CisK
K3ZvaWQgVHJhbnNsYXRvckdMU0w6OnRyYW5zbGF0ZShUSW50ZXJtTm9kZSogcm9vdCkgeworICAg
IFRJbmZvU2lua0Jhc2UmIHNpbmsgPSBnZXRJbmZvU2luaygpLm9iajsKKworICAgIC8vIFdyaXRl
IEdMU0wgdmVyc2lvbi4KKyAgICB3cml0ZVZlcnNpb24oZ2V0U2hhZGVyVHlwZSgpLCByb290LCBz
aW5rKTsKKworICAgIC8vIFdyaXRlIGVtdWxhdGVkIGJ1aWx0LWluIGZ1bmN0aW9ucyBpZiBuZWVk
ZWQuCisgICAgZ2V0QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IoKS5PdXRwdXRFbXVsYXRlZEZ1bmN0
aW9uRGVmaW5pdGlvbigKKyAgICAgICAgc2luaywgZmFsc2UpOworCisgICAgLy8gV3JpdGUgYXJy
YXkgYm91bmRzIGNsYW1waW5nIGVtdWxhdGlvbiBpZiBuZWVkZWQuCisgICAgZ2V0QXJyYXlCb3Vu
ZHNDbGFtcGVyKCkuT3V0cHV0Q2xhbXBpbmdGdW5jdGlvbkRlZmluaXRpb24oc2luayk7CisKKyAg
ICAvLyBXcml0ZSB0cmFuc2xhdGVkIHNoYWRlci4KKyAgICBUT3V0cHV0R0xTTCBvdXRwdXRHTFNM
KHNpbmssIGdldEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5KCksIGdldEhhc2hGdW5jdGlvbigp
LCBnZXROYW1lTWFwKCksIGdldFN5bWJvbFRhYmxlKCkpOworICAgIHJvb3QtPnRyYXZlcnNlKCZv
dXRwdXRHTFNMKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JHTFNMLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yR0xTTC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjQwYmIzMTQ1ZTgwZjdiMjIyYzUzY2JkMzgzMmUxOGZlYmU3OTc2YzcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yR0xTTC5oCkBAIC0wLDAgKzEsMjAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5k
ZWYgQ09NUElMRVJfVFJBTlNMQVRPUkdMU0xfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRP
UkdMU0xfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU2hIYW5kbGUuaCIKKwor
Y2xhc3MgVHJhbnNsYXRvckdMU0wgOiBwdWJsaWMgVENvbXBpbGVyIHsKK3B1YmxpYzoKKyAgICBU
cmFuc2xhdG9yR0xTTChTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMpOworCitw
cm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShUSW50ZXJtTm9kZSogcm9vdCk7
Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JHTFNMX0hfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9ySExTTC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9ySExTTC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2MxZGIwMTFiNjZhMjJlYTI2NGZl
OWIxZDY3NTFkMmE5OWQ3ZGY3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JITFNMLmNwcApAQCAtMCww
ICsxLDI0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9ySExTTC5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9J
bml0aWFsaXplUGFyc2VDb250ZXh0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9P
dXRwdXRITFNMLmgiCisKK1RyYW5zbGF0b3JITFNMOjpUcmFuc2xhdG9ySExTTChTaFNoYWRlclR5
cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsIFNoU2hhZGVyT3V0cHV0IG91dHB1dCkKKyAgICA6
IFRDb21waWxlcih0eXBlLCBzcGVjKSwgbU91dHB1dFR5cGUob3V0cHV0KQoreworfQorCit2b2lk
IFRyYW5zbGF0b3JITFNMOjp0cmFuc2xhdGUoVEludGVybU5vZGUgKnJvb3QpCit7CisgICAgVFBh
cnNlQ29udGV4dCYgcGFyc2VDb250ZXh0ID0gKkdldEdsb2JhbFBhcnNlQ29udGV4dCgpOworICAg
IHNoOjpPdXRwdXRITFNMIG91dHB1dEhMU0wocGFyc2VDb250ZXh0LCBnZXRSZXNvdXJjZXMoKSwg
bU91dHB1dFR5cGUpOworCisgICAgb3V0cHV0SExTTC5vdXRwdXQoKTsKKyAgICBtQWN0aXZlVW5p
Zm9ybXMgPSBvdXRwdXRITFNMLmdldFVuaWZvcm1zKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9ySExTTC5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvckhMU0wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MjA0YjMwY2MyNDFhYzc5MGYzNjZjZjIzZGNlZDdmZWIx
NzA5NDYzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckhMU0wuaApAQCAtMCwwICsxLDI3IEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JITFNMX0hfCisjZGVm
aW5lIENPTVBJTEVSX1RSQU5TTEFUT1JITFNMX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1NoSGFuZGxlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3Jt
LmgiCisKK2NsYXNzIFRyYW5zbGF0b3JITFNMIDogcHVibGljIFRDb21waWxlciB7CitwdWJsaWM6
CisgICAgVHJhbnNsYXRvckhMU0woU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVj
LCBTaFNoYWRlck91dHB1dCBvdXRwdXQpOworCisgICAgdmlydHVhbCBUcmFuc2xhdG9ySExTTCAq
Z2V0QXNUcmFuc2xhdG9ySExTTCgpIHsgcmV0dXJuIHRoaXM7IH0KKyAgICBjb25zdCBzaDo6QWN0
aXZlVW5pZm9ybXMgJmdldFVuaWZvcm1zKCkgeyByZXR1cm4gbUFjdGl2ZVVuaWZvcm1zOyB9CisK
K3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290
KTsKKworICAgIHNoOjpBY3RpdmVVbmlmb3JtcyBtQWN0aXZlVW5pZm9ybXM7CisgICAgU2hTaGFk
ZXJPdXRwdXQgbU91dHB1dFR5cGU7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFU
T1JITFNMX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UeXBlcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMTlmNGYyOWU1NWZmMWY2Nzc4Yzg5
MDJmMmFlZTZjNTNhOGQwYmI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHlwZXMuaApAQCAtMCwwICsxLDMwNyBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfVFlQRVNfSU5DTFVERUQKKyNkZWZpbmUgX1RZ
UEVTX0lOQ0xVREVECisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9CYXNlVHlwZXMuaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL0NvbW1vbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvY29tcGls
ZXJkZWJ1Zy5oIgorCitzdHJ1Y3QgVFB1YmxpY1R5cGU7CitjbGFzcyBUVHlwZTsKKworY2xhc3Mg
VEZpZWxkCit7CitwdWJsaWM6CisgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSgpOworICAg
IFRGaWVsZChUVHlwZSogdHlwZSwgVFN0cmluZyogbmFtZSkgOiBtVHlwZSh0eXBlKSwgbU5hbWUo
bmFtZSkge30KKworICAgIC8vIFRPRE8oYWxva3ApOiBXZSBzaG91bGQgb25seSByZXR1cm4gY29u
c3QgdHlwZS4KKyAgICAvLyBGaXggaXQgYnkgdHdlYWtpbmcgZ3JhbW1hci4KKyAgICBUVHlwZSog
dHlwZSgpIHsgcmV0dXJuIG1UeXBlOyB9CisgICAgY29uc3QgVFR5cGUqIHR5cGUoKSBjb25zdCB7
IHJldHVybiBtVHlwZTsgfQorCisgICAgY29uc3QgVFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0
dXJuICptTmFtZTsgfQorCitwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihU
RmllbGQpOworICAgIFRUeXBlKiBtVHlwZTsKKyAgICBUU3RyaW5nKiBtTmFtZTsKK307CisKK3R5
cGVkZWYgVFZlY3RvcjxURmllbGQqPiBURmllbGRMaXN0OworaW5saW5lIFRGaWVsZExpc3QqIE5l
d1Bvb2xURmllbGRMaXN0KCkKK3sKKyAgICB2b2lkKiBtZW1vcnkgPSBHZXRHbG9iYWxQb29sQWxs
b2NhdG9yKCktPmFsbG9jYXRlKHNpemVvZihURmllbGRMaXN0KSk7CisgICAgcmV0dXJuIG5ldyht
ZW1vcnkpIFRGaWVsZExpc3Q7Cit9CisKK2NsYXNzIFRTdHJ1Y3R1cmUKK3sKK3B1YmxpYzoKKyAg
ICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKCk7CisgICAgVFN0cnVjdHVyZShUU3RyaW5nKiBu
YW1lLCBURmllbGRMaXN0KiBmaWVsZHMpCisgICAgICAgIDogbU5hbWUobmFtZSksCisgICAgICAg
ICAgbUZpZWxkcyhmaWVsZHMpLAorICAgICAgICAgIG1PYmplY3RTaXplKDApLAorICAgICAgICAg
IG1EZWVwZXN0TmVzdGluZygwKSB7CisgICAgfQorCisgICAgY29uc3QgVFN0cmluZyYgbmFtZSgp
IGNvbnN0IHsgcmV0dXJuICptTmFtZTsgfQorICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcygp
IGNvbnN0IHsgcmV0dXJuICptRmllbGRzOyB9CisKKyAgICBjb25zdCBUU3RyaW5nJiBtYW5nbGVk
TmFtZSgpIGNvbnN0IHsKKyAgICAgICAgaWYgKG1NYW5nbGVkTmFtZS5lbXB0eSgpKQorICAgICAg
ICAgICAgbU1hbmdsZWROYW1lID0gYnVpbGRNYW5nbGVkTmFtZSgpOworICAgICAgICByZXR1cm4g
bU1hbmdsZWROYW1lOworICAgIH0KKyAgICBzaXplX3Qgb2JqZWN0U2l6ZSgpIGNvbnN0IHsKKyAg
ICAgICAgaWYgKG1PYmplY3RTaXplID09IDApCisgICAgICAgICAgICBtT2JqZWN0U2l6ZSA9IGNh
bGN1bGF0ZU9iamVjdFNpemUoKTsKKyAgICAgICAgcmV0dXJuIG1PYmplY3RTaXplOworICAgIH07
CisgICAgaW50IGRlZXBlc3ROZXN0aW5nKCkgY29uc3QgeworICAgICAgICBpZiAobURlZXBlc3RO
ZXN0aW5nID09IDApCisgICAgICAgICAgICBtRGVlcGVzdE5lc3RpbmcgPSBjYWxjdWxhdGVEZWVw
ZXN0TmVzdGluZygpOworICAgICAgICByZXR1cm4gbURlZXBlc3ROZXN0aW5nOworICAgIH0KKyAg
ICBib29sIGNvbnRhaW5zQXJyYXlzKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgRElTQUxMT1df
Q09QWV9BTkRfQVNTSUdOKFRTdHJ1Y3R1cmUpOworICAgIFRTdHJpbmcgYnVpbGRNYW5nbGVkTmFt
ZSgpIGNvbnN0OworICAgIHNpemVfdCBjYWxjdWxhdGVPYmplY3RTaXplKCkgY29uc3Q7CisgICAg
aW50IGNhbGN1bGF0ZURlZXBlc3ROZXN0aW5nKCkgY29uc3Q7CisKKyAgICBUU3RyaW5nKiBtTmFt
ZTsKKyAgICBURmllbGRMaXN0KiBtRmllbGRzOworCisgICAgbXV0YWJsZSBUU3RyaW5nIG1NYW5n
bGVkTmFtZTsKKyAgICBtdXRhYmxlIHNpemVfdCBtT2JqZWN0U2l6ZTsKKyAgICBtdXRhYmxlIGlu
dCBtRGVlcGVzdE5lc3Rpbmc7Cit9OworCisvLworLy8gQmFzZSBjbGFzcyBmb3IgdGhpbmdzIHRo
YXQgaGF2ZSBhIHR5cGUuCisvLworY2xhc3MgVFR5cGUKK3sKK3B1YmxpYzoKKyAgICBQT09MX0FM
TE9DQVRPUl9ORVdfREVMRVRFKCk7CisgICAgVFR5cGUoKSB7fQorICAgIFRUeXBlKFRCYXNpY1R5
cGUgdCwgVFByZWNpc2lvbiBwLCBUUXVhbGlmaWVyIHEgPSBFdnFUZW1wb3JhcnksIHVuc2lnbmVk
IGNoYXIgcyA9IDEsIGJvb2wgbSA9IGZhbHNlLCBib29sIGEgPSBmYWxzZSkgOgorICAgICAgICAg
ICAgdHlwZSh0KSwgcHJlY2lzaW9uKHApLCBxdWFsaWZpZXIocSksIHNpemUocyksIG1hdHJpeCht
KSwgYXJyYXkoYSksIGFycmF5U2l6ZSgwKSwgc3RydWN0dXJlKDApCisgICAgeworICAgIH0KKyAg
ICBleHBsaWNpdCBUVHlwZShjb25zdCBUUHVibGljVHlwZSAmcCk7CisgICAgVFR5cGUoVFN0cnVj
dHVyZSogdXNlckRlZiwgVFByZWNpc2lvbiBwID0gRWJwVW5kZWZpbmVkKSA6CisgICAgICAgICAg
ICB0eXBlKEVidFN0cnVjdCksIHByZWNpc2lvbihwKSwgcXVhbGlmaWVyKEV2cVRlbXBvcmFyeSks
IHNpemUoMSksIG1hdHJpeChmYWxzZSksIGFycmF5KGZhbHNlKSwgYXJyYXlTaXplKDApLCBzdHJ1
Y3R1cmUodXNlckRlZikKKyAgICB7CisgICAgfQorCisgICAgVEJhc2ljVHlwZSBnZXRCYXNpY1R5
cGUoKSBjb25zdCB7IHJldHVybiB0eXBlOyB9CisgICAgdm9pZCBzZXRCYXNpY1R5cGUoVEJhc2lj
VHlwZSB0KSB7IHR5cGUgPSB0OyB9CisKKyAgICBUUHJlY2lzaW9uIGdldFByZWNpc2lvbigpIGNv
bnN0IHsgcmV0dXJuIHByZWNpc2lvbjsgfQorICAgIHZvaWQgc2V0UHJlY2lzaW9uKFRQcmVjaXNp
b24gcCkgeyBwcmVjaXNpb24gPSBwOyB9CisKKyAgICBUUXVhbGlmaWVyIGdldFF1YWxpZmllcigp
IGNvbnN0IHsgcmV0dXJuIHF1YWxpZmllcjsgfQorICAgIHZvaWQgc2V0UXVhbGlmaWVyKFRRdWFs
aWZpZXIgcSkgeyBxdWFsaWZpZXIgPSBxOyB9CisKKyAgICAvLyBPbmUtZGltZW5zaW9uYWwgc2l6
ZSBvZiBzaW5nbGUgaW5zdGFuY2UgdHlwZQorICAgIGludCBnZXROb21pbmFsU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIHNpemU7IH0KKyAgICB2b2lkIHNldE5vbWluYWxTaXplKHVuc2lnbmVkIGNoYXIg
cykgeyBzaXplID0gczsgfQorICAgIC8vIEZ1bGwgc2l6ZSBvZiBzaW5nbGUgaW5zdGFuY2Ugb2Yg
dHlwZQorICAgIHNpemVfdCBnZXRPYmplY3RTaXplKCkgY29uc3Q7CisKKyAgICBpbnQgZWxlbWVu
dFJlZ2lzdGVyQ291bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gZ2V0U3RydWN0
KCktPmZpZWxkcygpOworICAgICAgICAgICAgaW50IHJlZ2lzdGVyQ291bnQgPSAwOworCisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZWdpc3RlckNvdW50ICs9IGZpZWxkc1tpXS0+dHlw
ZSgpLT50b3RhbFJlZ2lzdGVyQ291bnQoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
cmV0dXJuIHJlZ2lzdGVyQ291bnQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaXNNYXRy
aXgoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdldE5vbWluYWxTaXplKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gMTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGludCB0b3RhbFJlZ2lzdGVyQ291bnQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKGFycmF5KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
YXJyYXlTaXplICogZWxlbWVudFJlZ2lzdGVyQ291bnQoKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50UmVnaXN0ZXJDb3VudCgp
OworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBpc01hdHJpeCgpIGNvbnN0IHsgcmV0dXJu
IG1hdHJpeCA/IHRydWUgOiBmYWxzZTsgfQorICAgIHZvaWQgc2V0TWF0cml4KGJvb2wgbSkgeyBt
YXRyaXggPSBtOyB9CisKKyAgICBib29sIGlzQXJyYXkoKSBjb25zdCAgeyByZXR1cm4gYXJyYXkg
PyB0cnVlIDogZmFsc2U7IH0KKyAgICBpbnQgZ2V0QXJyYXlTaXplKCkgY29uc3QgeyByZXR1cm4g
YXJyYXlTaXplOyB9CisgICAgdm9pZCBzZXRBcnJheVNpemUoaW50IHMpIHsgYXJyYXkgPSB0cnVl
OyBhcnJheVNpemUgPSBzOyB9CisgICAgdm9pZCBjbGVhckFycmF5bmVzcygpIHsgYXJyYXkgPSBm
YWxzZTsgYXJyYXlTaXplID0gMDsgfQorCisgICAgYm9vbCBpc1ZlY3RvcigpIGNvbnN0IHsgcmV0
dXJuIHNpemUgPiAxICYmICFtYXRyaXg7IH0KKyAgICBib29sIGlzU2NhbGFyKCkgY29uc3QgeyBy
ZXR1cm4gc2l6ZSA9PSAxICYmICFtYXRyaXggJiYgIXN0cnVjdHVyZTsgfQorCisgICAgVFN0cnVj
dHVyZSogZ2V0U3RydWN0KCkgY29uc3QgeyByZXR1cm4gc3RydWN0dXJlOyB9CisgICAgdm9pZCBz
ZXRTdHJ1Y3QoVFN0cnVjdHVyZSogcykgeyBzdHJ1Y3R1cmUgPSBzOyB9CisKKyAgICBjb25zdCBU
U3RyaW5nJiBnZXRNYW5nbGVkTmFtZSgpIGNvbnN0IHsKKyAgICAgICAgaWYgKG1hbmdsZWQuZW1w
dHkoKSkgeworICAgICAgICAgICAgbWFuZ2xlZCA9IGJ1aWxkTWFuZ2xlZE5hbWUoKTsKKyAgICAg
ICAgICAgIG1hbmdsZWQgKz0gJzsnOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtYW5nbGVk
OworICAgIH0KKworICAgIGJvb2wgc2FtZUVsZW1lbnRUeXBlKGNvbnN0IFRUeXBlJiByaWdodCkg
Y29uc3QgeworICAgICAgICByZXR1cm4gICAgICB0eXBlID09IHJpZ2h0LnR5cGUgICAmJgorICAg
ICAgICAgICAgICAgICAgICBzaXplID09IHJpZ2h0LnNpemUgICAmJgorICAgICAgICAgICAgICAg
ICAgbWF0cml4ID09IHJpZ2h0Lm1hdHJpeCAmJgorICAgICAgICAgICAgICAgc3RydWN0dXJlID09
IHJpZ2h0LnN0cnVjdHVyZTsKKyAgICB9CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRUeXBl
JiByaWdodCkgY29uc3QgeworICAgICAgICByZXR1cm4gICAgICB0eXBlID09IHJpZ2h0LnR5cGUg
ICAmJgorICAgICAgICAgICAgICAgICAgICBzaXplID09IHJpZ2h0LnNpemUgICAmJgorICAgICAg
ICAgICAgICAgICAgbWF0cml4ID09IHJpZ2h0Lm1hdHJpeCAmJgorICAgICAgICAgICAgICAgICAg
IGFycmF5ID09IHJpZ2h0LmFycmF5ICAmJiAoIWFycmF5IHx8IGFycmF5U2l6ZSA9PSByaWdodC5h
cnJheVNpemUpICYmCisgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPT0gcmlnaHQuc3RydWN0dXJl
OworICAgICAgICAvLyBkb24ndCBjaGVjayB0aGUgcXVhbGlmaWVyLCBpdCdzIG5vdCBldmVyIHdo
YXQncyBiZWluZyBzb3VnaHQgYWZ0ZXIKKyAgICB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IFRUeXBlJiByaWdodCkgY29uc3QgeworICAgICAgICByZXR1cm4gIW9wZXJhdG9yPT0ocmlnaHQp
OworICAgIH0KKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBUVHlwZSYgcmlnaHQpIGNvbnN0IHsK
KyAgICAgICAgaWYgKHR5cGUgIT0gcmlnaHQudHlwZSkgcmV0dXJuIHR5cGUgPCByaWdodC50eXBl
OworICAgICAgICBpZiAoc2l6ZSAhPSByaWdodC5zaXplKSByZXR1cm4gc2l6ZSA8IHJpZ2h0LnNp
emU7CisgICAgICAgIGlmIChtYXRyaXggIT0gcmlnaHQubWF0cml4KSByZXR1cm4gbWF0cml4IDwg
cmlnaHQubWF0cml4OworICAgICAgICBpZiAoYXJyYXkgIT0gcmlnaHQuYXJyYXkpIHJldHVybiBh
cnJheSA8IHJpZ2h0LmFycmF5OworICAgICAgICBpZiAoYXJyYXlTaXplICE9IHJpZ2h0LmFycmF5
U2l6ZSkgcmV0dXJuIGFycmF5U2l6ZSA8IHJpZ2h0LmFycmF5U2l6ZTsKKyAgICAgICAgaWYgKHN0
cnVjdHVyZSAhPSByaWdodC5zdHJ1Y3R1cmUpIHJldHVybiBzdHJ1Y3R1cmUgPCByaWdodC5zdHJ1
Y3R1cmU7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGNvbnN0IGNoYXIq
IGdldEJhc2ljU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gOjpnZXRCYXNpY1N0cmluZyh0eXBlKTsg
fQorICAgIGNvbnN0IGNoYXIqIGdldFByZWNpc2lvblN0cmluZygpIGNvbnN0IHsgcmV0dXJuIDo6
Z2V0UHJlY2lzaW9uU3RyaW5nKHByZWNpc2lvbik7IH0KKyAgICBjb25zdCBjaGFyKiBnZXRRdWFs
aWZpZXJTdHJpbmcoKSBjb25zdCB7IHJldHVybiA6OmdldFF1YWxpZmllclN0cmluZyhxdWFsaWZp
ZXIpOyB9CisgICAgVFN0cmluZyBnZXRDb21wbGV0ZVN0cmluZygpIGNvbnN0OworCisgICAgLy8g
SWYgdGhpcyB0eXBlIGlzIGEgc3RydWN0LCByZXR1cm5zIHRoZSBkZWVwZXN0IHN0cnVjdCBuZXN0
aW5nIG9mCisgICAgLy8gYW55IGZpZWxkIGluIHRoZSBzdHJ1Y3QuIEZvciBleGFtcGxlOgorICAg
IC8vICAgc3RydWN0IG5lc3RpbmcxIHsKKyAgICAvLyAgICAgdmVjNCBwb3NpdGlvbjsKKyAgICAv
LyAgIH07CisgICAgLy8gICBzdHJ1Y3QgbmVzdGluZzIgeworICAgIC8vICAgICBuZXN0aW5nMSBm
aWVsZDE7CisgICAgLy8gICAgIHZlYzQgZmllbGQyOworICAgIC8vICAgfTsKKyAgICAvLyBGb3Ig
dHlwZSAibmVzdGluZzIiLCB0aGlzIG1ldGhvZCB3b3VsZCByZXR1cm4gMiAtLSB0aGUgbnVtYmVy
CisgICAgLy8gb2Ygc3RydWN0dXJlcyB0aHJvdWdoIHdoaWNoIGluZGlyZWN0aW9uIG11c3Qgb2Nj
dXIgdG8gcmVhY2ggdGhlCisgICAgLy8gZGVlcGVzdCBmaWVsZCAobmVzdGluZzIuZmllbGQxLnBv
c2l0aW9uKS4KKyAgICBpbnQgZ2V0RGVlcGVzdFN0cnVjdE5lc3RpbmcoKSBjb25zdCB7CisgICAg
ICAgIHJldHVybiBzdHJ1Y3R1cmUgPyBzdHJ1Y3R1cmUtPmRlZXBlc3ROZXN0aW5nKCkgOiAwOwor
ICAgIH0KKworICAgIGJvb2wgaXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlzKCkgY29uc3Qgewor
ICAgICAgICByZXR1cm4gc3RydWN0dXJlID8gc3RydWN0dXJlLT5jb250YWluc0FycmF5cygpIDog
ZmFsc2U7CisgICAgfQorCitwcml2YXRlOgorICAgIFRTdHJpbmcgYnVpbGRNYW5nbGVkTmFtZSgp
IGNvbnN0OworCisgICAgVEJhc2ljVHlwZSB0eXBlOworICAgIFRQcmVjaXNpb24gcHJlY2lzaW9u
OworICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyOworICAgIHVuc2lnbmVkIGNoYXIgc2l6ZTsKKyAg
ICBib29sIG1hdHJpeDsKKyAgICBib29sIGFycmF5OworICAgIGludCBhcnJheVNpemU7CisKKyAg
ICBUU3RydWN0dXJlKiBzdHJ1Y3R1cmU7ICAgICAgLy8gMCB1bmxlc3MgdGhpcyBpcyBhIHN0cnVj
dAorCisgICAgbXV0YWJsZSBUU3RyaW5nIG1hbmdsZWQ7Cit9OworCisvLworLy8gVGhpcyBpcyBh
IHdvcmthcm91bmQgZm9yIGEgcHJvYmxlbSB3aXRoIHRoZSB5YWNjIHN0YWNrLCAgSXQgY2FuJ3Qg
aGF2ZQorLy8gdHlwZXMgdGhhdCBpdCB0aGlua3MgaGF2ZSBub24tdHJpdmlhbCBjb25zdHJ1Y3Rv
cnMuICBJdCBzaG91bGQKKy8vIGp1c3QgYmUgdXNlZCB3aGlsZSByZWNvZ25pemluZyB0aGUgZ3Jh
bW1hciwgbm90IGFueXRoaW5nIGVsc2UuICBQb2ludGVycworLy8gY291bGQgYmUgdXNlZCwgYnV0
IGFsc28gdHJ5aW5nIHRvIGF2b2lkIGxvdHMgb2YgbWVtb3J5IG1hbmFnZW1lbnQgb3ZlcmhlYWQu
CisvLworLy8gTm90IGFzIGJhZCBhcyBpdCBsb29rcywgdGhlcmUgaXMgbm8gYWN0dWFsIGFzc3Vt
cHRpb24gdGhhdCB0aGUgZmllbGRzCisvLyBtYXRjaCB1cCBvciBhcmUgbmFtZSB0aGUgc2FtZSBv
ciBhbnl0aGluZyBsaWtlIHRoYXQuCisvLworc3RydWN0IFRQdWJsaWNUeXBlCit7CisgICAgVEJh
c2ljVHlwZSB0eXBlOworICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyOworICAgIFRQcmVjaXNpb24g
cHJlY2lzaW9uOworICAgIHVuc2lnbmVkIGNoYXIgc2l6ZTsgICAgICAgICAgLy8gc2l6ZSBvZiB2
ZWN0b3Igb3IgbWF0cml4LCBub3Qgc2l6ZSBvZiBhcnJheQorICAgIGJvb2wgbWF0cml4OworICAg
IGJvb2wgYXJyYXk7CisgICAgaW50IGFycmF5U2l6ZTsKKyAgICBUVHlwZSogdXNlckRlZjsKKyAg
ICBUU291cmNlTG9jIGxpbmU7CisKKyAgICB2b2lkIHNldEJhc2ljKFRCYXNpY1R5cGUgYnQsIFRR
dWFsaWZpZXIgcSwgY29uc3QgVFNvdXJjZUxvYyYgbG4pCisgICAgeworICAgICAgICB0eXBlID0g
YnQ7CisgICAgICAgIHF1YWxpZmllciA9IHE7CisgICAgICAgIHByZWNpc2lvbiA9IEVicFVuZGVm
aW5lZDsKKyAgICAgICAgc2l6ZSA9IDE7CisgICAgICAgIG1hdHJpeCA9IGZhbHNlOworICAgICAg
ICBhcnJheSA9IGZhbHNlOworICAgICAgICBhcnJheVNpemUgPSAwOworICAgICAgICB1c2VyRGVm
ID0gMDsKKyAgICAgICAgbGluZSA9IGxuOworICAgIH0KKworICAgIHZvaWQgc2V0QWdncmVnYXRl
KHVuc2lnbmVkIGNoYXIgcywgYm9vbCBtID0gZmFsc2UpCisgICAgeworICAgICAgICBzaXplID0g
czsKKyAgICAgICAgbWF0cml4ID0gbTsKKyAgICB9CisKKyAgICB2b2lkIHNldEFycmF5KGJvb2wg
YSwgaW50IHMgPSAwKQorICAgIHsKKyAgICAgICAgYXJyYXkgPSBhOworICAgICAgICBhcnJheVNp
emUgPSBzOworICAgIH0KKworICAgIGJvb2wgaXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlzKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmICghdXNlckRlZikKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHVzZXJEZWYtPmlz
U3RydWN0dXJlQ29udGFpbmluZ0FycmF5cygpOworICAgIH0KK307CisKKyNlbmRpZiAvLyBfVFlQ
RVNfSU5DTFVERURfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iNzgyNjExOWFlYTAwNzRkNGZjY2MwNDg1NTdkMDExMWY3ODkwODMyCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcApAQCAtMCwwICsxLDE4NCBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKy8vIFVuZm9sZFNob3J0Q2lyY3VpdCBpcyBhbiBBU1QgdHJhdmVyc2VyIHRvIG91
dHB1dCBzaG9ydC1jaXJjdWl0aW5nIG9wZXJhdG9ycyBhcyBpZi1lbHNlIHN0YXRlbWVudHMuCisv
LyBUaGUgcmVzdWx0cyBhcmUgYXNzaWduZWQgdG8gcyMgdGVtcG9yYXJpZXMsIHdoaWNoIGFyZSB1
c2VkIGJ5IHRoZSBtYWluIHRyYW5zbGF0b3IgaW5zdGVhZCBvZgorLy8gdGhlIG9yaWdpbmFsIGV4
cHJlc3Npb24uCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9y
dENpcmN1aXQuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuaCIKKworbmFtZXNwYWNl
IHNoCit7CitVbmZvbGRTaG9ydENpcmN1aXQ6OlVuZm9sZFNob3J0Q2lyY3VpdChUUGFyc2VDb250
ZXh0ICZjb250ZXh0LCBPdXRwdXRITFNMICpvdXRwdXRITFNMKSA6IG1Db250ZXh0KGNvbnRleHQp
LCBtT3V0cHV0SExTTChvdXRwdXRITFNMKQoreworICAgIG1UZW1wb3JhcnlJbmRleCA9IDA7Cit9
CisKK3ZvaWQgVW5mb2xkU2hvcnRDaXJjdWl0Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkK
K3sKKyAgICBpbnQgcmV3aW5kSW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7CisgICAgbm9kZS0+dHJh
dmVyc2UodGhpcyk7CisgICAgbVRlbXBvcmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7Cit9CisKK2Jv
b2wgVW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJp
bmFyeSAqbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtT3V0cHV0SExTTC0+Z2V0
Qm9keVN0cmVhbSgpOworCisgICAgLy8gSWYgb3VyIHJpZ2h0IG5vZGUgZG9lc24ndCBoYXZlIHNp
ZGUgZWZmZWN0cywgd2Uga25vdyB3ZSBkb24ndCBuZWVkIHRvIHVuZm9sZCB0aGlzCisgICAgLy8g
ZXhwcmVzc2lvbjogdGhlcmUgd2lsbCBiZSBubyBzaG9ydC1jaXJjdWl0aW5nIHNpZGUgZWZmZWN0
cyB0byBhdm9pZAorICAgIC8vIChub3RlOiB1bmZvbGRpbmcgZG9lc24ndCBkZXBlbmQgb24gdGhl
IGxlZnQgbm9kZSAtLSBpdCB3aWxsIGFsd2F5cyBiZSBldmFsdWF0ZWQpCisgICAgaWYgKCFub2Rl
LT5nZXRSaWdodCgpLT5oYXNTaWRlRWZmZWN0cygpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAgIGNh
c2UgRU9wTG9naWNhbE9yOgorICAgICAgICAvLyAieCB8fCB5IiBpcyBlcXVpdmFsZW50IHRvICJ4
ID8gdHJ1ZSA6IHkiLCB3aGljaCB1bmZvbGRzIHRvICJib29sIHM7IGlmKHgpIHMgPSB0cnVlOyBl
bHNlIHMgPSB5OyIsCisgICAgICAgIC8vIGFuZCB0aGVuIGZ1cnRoZXIgc2ltcGxpZmllcyBkb3du
IHRvICJib29sIHMgPSB4OyBpZighcykgcyA9IHk7Ii4KKyAgICAgICAgeworICAgICAgICAgICAg
aW50IGkgPSBtVGVtcG9yYXJ5SW5kZXg7CisKKyAgICAgICAgICAgIG91dCA8PCAiYm9vbCBzIiA8
PCBpIDw8ICI7XG4iOworCisgICAgICAgICAgICBvdXQgPDwgIntcbiI7CisKKyAgICAgICAgICAg
IG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50
cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAicyIgPDwgaSA8PCAiID0gIjsKKyAg
ICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0
TGVmdCgpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgICAgICBvdXQgPDwgIjtcbiI7
CisgICAgICAgICAgICBvdXQgPDwgImlmICghcyIgPDwgaSA8PCAiKVxuIgorICAgICAgICAgICAg
ICAgICAgICJ7XG4iOworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAg
ICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG91
dCA8PCAiICAgIHMiIDw8IGkgPDwgIiA9ICI7CisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXgg
PSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdldFJpZ2h0KCktPnRyYXZlcnNlKG1PdXRwdXRI
TFNMKTsKKyAgICAgICAgICAgIG91dCA8PCAiO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4i
OworCisgICAgICAgICAgICBvdXQgPDwgIn1cbiI7CisKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJ
bmRleCA9IGkgKyAxOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGNh
c2UgRU9wTG9naWNhbEFuZDoKKyAgICAgICAgLy8gInggJiYgeSIgaXMgZXF1aXZhbGVudCB0byAi
eCA/IHkgOiBmYWxzZSIsIHdoaWNoIHVuZm9sZHMgdG8gImJvb2wgczsgaWYoeCkgcyA9IHk7IGVs
c2UgcyA9IGZhbHNlOyIsCisgICAgICAgIC8vIGFuZCB0aGVuIGZ1cnRoZXIgc2ltcGxpZmllcyBk
b3duIHRvICJib29sIHMgPSB4OyBpZihzKSBzID0geTsiLgorICAgICAgICB7CisgICAgICAgICAg
ICBpbnQgaSA9IG1UZW1wb3JhcnlJbmRleDsKKworICAgICAgICAgICAgb3V0IDw8ICJib29sIHMi
IDw8IGkgPDwgIjtcbiI7CisKKyAgICAgICAgICAgIG91dCA8PCAie1xuIjsKKworICAgICAgICAg
ICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCkt
PnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICJzIiA8PCBpIDw8ICIgPSAiOwor
ICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5n
ZXRMZWZ0KCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKKyAgICAgICAgICAgIG91dCA8PCAiO1xu
IjsKKyAgICAgICAgICAgIG91dCA8PCAiaWYgKHMiIDw8IGkgPDwgIilcbiIKKyAgICAgICAgICAg
ICAgICAgICAie1xuIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAg
ICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICBv
dXQgPDwgIiAgICBzIiA8PCBpIDw8ICIgPSAiOworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4
ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZShtT3V0cHV0
SExTTCk7CisgICAgICAgICAgICBvdXQgPDwgIjtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxu
IjsKKworICAgICAgICAgICAgb3V0IDw8ICJ9XG4iOworCisgICAgICAgICAgICBtVGVtcG9yYXJ5
SW5kZXggPSBpICsgMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgVW5mb2xkU2hv
cnRDaXJjdWl0Ojp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAq
bm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtT3V0cHV0SExTTC0+Z2V0Qm9keVN0
cmVhbSgpOworCisgICAgLy8gVW5mb2xkICJiID8geCA6IHkiIGludG8gInR5cGUgczsgaWYoYikg
cyA9IHg7IGVsc2UgcyA9IHk7IgorICAgIGlmIChub2RlLT51c2VzVGVybmFyeU9wZXJhdG9yKCkp
CisgICAgeworICAgICAgICBpbnQgaSA9IG1UZW1wb3JhcnlJbmRleDsKKworICAgICAgICBvdXQg
PDwgbU91dHB1dEhMU0wtPnR5cGVTdHJpbmcobm9kZS0+Z2V0VHlwZSgpKSA8PCAiIHMiIDw8IGkg
PDwgIjtcbiI7CisKKyAgICAgICAgb3V0IDw8ICJ7XG4iOworCisgICAgICAgIG1UZW1wb3JhcnlJ
bmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhp
cyk7CisgICAgICAgIG91dCA8PCAiaWYgKCI7CisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkg
KyAxOworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UobU91dHB1dEhMU0wp
OworICAgICAgICBvdXQgPDwgIilcbiIKKyAgICAgICAgICAgICAgICJ7XG4iOworICAgICAgICBt
VGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRy
YXZlcnNlKHRoaXMpOworICAgICAgICBvdXQgPDwgIiAgICBzIiA8PCBpIDw8ICIgPSAiOworICAg
ICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2Nr
KCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKKyAgICAgICAgb3V0IDw8ICI7XG4iCisgICAgICAg
ICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgImVsc2VcbiIKKyAgICAgICAgICAgICAgICJ7
XG4iOworICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+Z2V0
RmFsc2VCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwg
aSA8PCAiID0gIjsKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgIG5v
ZGUtPmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICBvdXQg
PDwgIjtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iOworCisgICAgICAgIG91dCA8PCAifVxuIjsK
KworICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgVW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdExvb3AoVmlzaXQgdmlz
aXQsIFRJbnRlcm1Mb29wICpub2RlKQoreworICAgIGludCByZXdpbmRJbmRleCA9IG1UZW1wb3Jh
cnlJbmRleDsKKworICAgIGlmIChub2RlLT5nZXRJbml0KCkpCisgICAgeworICAgICAgICBub2Rl
LT5nZXRJbml0KCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKyAgICAKKyAgICBpZiAobm9kZS0+
Z2V0Q29uZGl0aW9uKCkpCisgICAgeworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJh
dmVyc2UodGhpcyk7CisgICAgfQorCisgICAgaWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkKKyAg
ICB7CisgICAgICAgIG5vZGUtPmdldEV4cHJlc3Npb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAg
fQorCisgICAgbVRlbXBvcmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2ludCBVbmZvbGRTaG9ydENpcmN1aXQ6OmdldE5leHRUZW1wb3JhcnlJbmRleCgp
Cit7CisgICAgcmV0dXJuIG1UZW1wb3JhcnlJbmRleCsrOworfQorfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRD
aXJjdWl0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9VbmZvbGRTaG9ydENpcmN1aXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZTQxNmJjMDRjMTRmNTNjYTA0Yjg1
Yjk3YTlkOTI0NWRjMGY3MmMwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0LmgKQEAgLTAs
MCArMSwzOSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIFVuZm9sZFNob3J0Q2lyY3VpdCBpcyBh
biBBU1QgdHJhdmVyc2VyIHRvIG91dHB1dCBzaG9ydC1jaXJjdWl0aW5nIG9wZXJhdG9ycyBhcyBp
Zi1lbHNlIHN0YXRlbWVudHMKKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVU5GT0xEU0hPUlRDSVJD
VUlUX0hfCisjZGVmaW5lIENPTVBJTEVSX1VORk9MRFNIT1JUQ0lSQ1VJVF9IXworCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5oIgorCituYW1lc3BhY2Ugc2gKK3sKK2NsYXNzIE91
dHB1dEhMU0w7CisKK2NsYXNzIFVuZm9sZFNob3J0Q2lyY3VpdCA6IHB1YmxpYyBUSW50ZXJtVHJh
dmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBVbmZvbGRTaG9ydENpcmN1aXQoVFBhcnNlQ29udGV4
dCAmY29udGV4dCwgT3V0cHV0SExTTCAqb3V0cHV0SExTTCk7CisKKyAgICB2b2lkIHRyYXZlcnNl
KFRJbnRlcm1Ob2RlICpub2RlKTsKKyAgICBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBU
SW50ZXJtQmluYXJ5Kik7CisgICAgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVElu
dGVybVNlbGVjdGlvbiAqbm9kZSk7CisgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1Mb29wICpub2RlKTsKKworICAgIGludCBnZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKKwor
ICBwcm90ZWN0ZWQ6CisgICAgVFBhcnNlQ29udGV4dCAmbUNvbnRleHQ7CisgICAgT3V0cHV0SExT
TCAqY29uc3QgbU91dHB1dEhMU0w7CisKKyAgICBpbnQgbVRlbXBvcmFyeUluZGV4OworfTsKK30K
KworI2VuZGlmICAgLy8gQ09NUElMRVJfVU5GT0xEU0hPUlRDSVJDVUlUX0hfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRT
aG9ydENpcmN1aXRBU1QuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOWM0Mzk3
ZDU2MWVhMmFhZGYzOTk4NDhlMDQ2MDU0ZTQzYzM5MjcyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRD
aXJjdWl0QVNULmNwcApAQCAtMCwwICsxLDgxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuaCIKKworbmFt
ZXNwYWNlCit7CisKKy8vICJ4IHx8IHkiIGlzIGVxdWl2YWxlbnQgdG8gInggPyB0cnVlIDogeSIu
CitUSW50ZXJtU2VsZWN0aW9uICpVbmZvbGRPUihUSW50ZXJtVHlwZWQgKngsIFRJbnRlcm1UeXBl
ZCAqeSkKK3sKKyAgICBjb25zdCBUVHlwZSBib29sVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQp
OworICAgIENvbnN0YW50VW5pb24gKnUgPSBuZXcgQ29uc3RhbnRVbmlvbjsKKyAgICB1LT5zZXRC
Q29uc3QodHJ1ZSk7CisgICAgVEludGVybUNvbnN0YW50VW5pb24gKnRydWVOb2RlID0gbmV3IFRJ
bnRlcm1Db25zdGFudFVuaW9uKAorICAgICAgICB1LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmlu
ZWQsIEV2cUNvbnN0LCAxKSk7CisgICAgcmV0dXJuIG5ldyBUSW50ZXJtU2VsZWN0aW9uKHgsIHRy
dWVOb2RlLCB5LCBib29sVHlwZSk7Cit9CisKKy8vICJ4ICYmIHkiIGlzIGVxdWl2YWxlbnQgdG8g
InggPyB5IDogZmFsc2UiLgorVEludGVybVNlbGVjdGlvbiAqVW5mb2xkQU5EKFRJbnRlcm1UeXBl
ZCAqeCwgVEludGVybVR5cGVkICp5KQoreworICAgIGNvbnN0IFRUeXBlIGJvb2xUeXBlKEVidEJv
b2wsIEVicFVuZGVmaW5lZCk7CisgICAgQ29uc3RhbnRVbmlvbiAqdSA9IG5ldyBDb25zdGFudFVu
aW9uOworICAgIHUtPnNldEJDb25zdChmYWxzZSk7CisgICAgVEludGVybUNvbnN0YW50VW5pb24g
KmZhbHNlTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbigKKyAgICAgICAgdSwgVFR5cGUo
RWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCwgMSkpOworICAgIHJldHVybiBuZXcgVElu
dGVybVNlbGVjdGlvbih4LCB5LCBmYWxzZU5vZGUsIGJvb2xUeXBlKTsKK30KKworfSAgLy8gbmFt
ZXNwYWNlIGFub255bW91cworCitib29sIFVuZm9sZFNob3J0Q2lyY3VpdEFTVDo6dmlzaXRCaW5h
cnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCit7CisgICAgVEludGVybVNlbGVj
dGlvbiAqcmVwbGFjZW1lbnQgPSBOVUxMOworCisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQor
ICAgIHsKKyAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgorICAgICAgICByZXBsYWNlbWVudCA9IFVu
Zm9sZE9SKG5vZGUtPmdldExlZnQoKSwgbm9kZS0+Z2V0UmlnaHQoKSk7CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOgorICAgICAgICByZXBsYWNlbWVudCA9IFVuZm9s
ZEFORChub2RlLT5nZXRMZWZ0KCksIG5vZGUtPmdldFJpZ2h0KCkpOworICAgICAgICBicmVhazsK
KyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAocmVwbGFjZW1l
bnQpCisgICAgeworICAgICAgICByZXBsYWNlbWVudHMucHVzaF9iYWNrKAorICAgICAgICAgICAg
Tm9kZVVwZGF0ZUVudHJ5KGdldFBhcmVudE5vZGUoKSwgbm9kZSwgcmVwbGFjZW1lbnQpKTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgVW5mb2xkU2hvcnRDaXJjdWl0QVNUOjp1
cGRhdGVUcmVlKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgcmVwbGFjZW1lbnRz
LnNpemUoKTsgKytpaSkKKyAgICB7CisgICAgICAgIGNvbnN0IE5vZGVVcGRhdGVFbnRyeSYgZW50
cnkgPSByZXBsYWNlbWVudHNbaWldOworICAgICAgICBBU1NFUlQoZW50cnkucGFyZW50KTsKKyAg
ICAgICAgYm9vbCByZXBsYWNlZCA9IGVudHJ5LnBhcmVudC0+cmVwbGFjZUNoaWxkTm9kZSgKKyAg
ICAgICAgICAgIGVudHJ5Lm9yaWdpbmFsLCBlbnRyeS5yZXBsYWNlbWVudCk7CisgICAgICAgIEFT
U0VSVChyZXBsYWNlZCk7CisKKyAgICAgICAgLy8gSW4gQVNUIHRyYXZlcnNpbmcsIGEgcGFyZW50
IGlzIHZpc2l0ZWQgYmVmb3JlIGl0cyBjaGlsZHJlbi4KKyAgICAgICAgLy8gQWZ0ZXIgd2UgcmVw
bGFjZSBhIG5vZGUsIGlmIGFuIGltbWVkaWF0ZSBjaGlsZCBpcyB0bworICAgICAgICAvLyBiZSBy
ZXBsYWNlZCwgd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgdXBkYXRlIHRoZSByZXBsYWNl
ZAorCS8vIG5vZGU7IGluc3RlYWQsIHdlIHVwZGF0ZSB0aGUgcmVwbGFjZW1lbnQgbm9kZS4KKyAg
ICAgICAgZm9yIChzaXplX3QgamogPSBpaSArIDE7IGpqIDwgcmVwbGFjZW1lbnRzLnNpemUoKTsg
KytqaikKKyAgICAgICAgeworICAgICAgICAgICAgTm9kZVVwZGF0ZUVudHJ5JiBlbnRyeTIgPSBy
ZXBsYWNlbWVudHNbampdOworICAgICAgICAgICAgaWYgKGVudHJ5Mi5wYXJlbnQgPT0gZW50cnku
b3JpZ2luYWwpCisgICAgICAgICAgICAgICAgZW50cnkyLnBhcmVudCA9IGVudHJ5LnJlcGxhY2Vt
ZW50OworICAgICAgICB9CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1VuZm9sZFNo
b3J0Q2lyY3VpdEFTVC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0YzE0YTYwZTM3ZmVkYjIyMmNmOTI2ZDA4NjNi
YmQyMjM1Nzc5YzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuaApAQCAtMCwwICsx
LDUxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gVW5mb2xkU2hvcnRDaXJjdWl0QVNUIGlzIGFu
IEFTVCB0cmF2ZXJzZXIgdG8gcmVwbGFjZSBzaG9ydC1jaXJjdWl0aW5nCisvLyBvcGVyYXRpb25z
IHdpdGggdGVybmFyeSBvcGVyYXRpb25zLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9VTkZPTERf
U0hPUlRfQ0lSQ1VJVF9BU1RfSF8KKyNkZWZpbmUgQ09NUElMRVJfVU5GT0xEX1NIT1JUX0NJUkNV
SVRfQVNUX0hfCisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisKKy8vIFRoaXMgdHJhdmVyc2VyIGlk
ZW50aWZpZXMgYWxsIHRoZSBzaG9ydCBjaXJjdWl0IGJpbmFyeSAgbm9kZXMgdGhhdCBuZWVkIHRv
CisvLyBiZSByZXBsYWNlZCwgYW5kIGNyZWF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgcmVwbGFjZW1l
bnQgbm9kZXMuIEhvd2V2ZXIsCisvLyB0aGUgYWN0dWFsIHJlcGxhY2VtZW50cyBoYXBwZW4gYWZ0
ZXIgdGhlIHRyYXZlcnNlIHRocm91Z2ggdXBkYXRlVHJlZSgpLgorCitjbGFzcyBVbmZvbGRTaG9y
dENpcmN1aXRBU1QgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAg
VW5mb2xkU2hvcnRDaXJjdWl0QVNUKCkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5h
cnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKik7CisKKyAgICB2b2lkIHVwZGF0ZVRyZWUo
KTsKKworICBwcml2YXRlOgorICAgIHN0cnVjdCBOb2RlVXBkYXRlRW50cnkKKyAgICB7CisgICAg
ICAgIE5vZGVVcGRhdGVFbnRyeShUSW50ZXJtTm9kZSAqX3BhcmVudCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFRJbnRlcm1Ob2RlICpfb3JpZ2luYWwsCisgICAgICAgICAgICAgICAgICAgICAg
ICBUSW50ZXJtTm9kZSAqX3JlcGxhY2VtZW50KQorICAgICAgICAgICAgOiBwYXJlbnQoX3BhcmVu
dCksCisgICAgICAgICAgICAgIG9yaWdpbmFsKF9vcmlnaW5hbCksCisgICAgICAgICAgICAgIHJl
cGxhY2VtZW50KF9yZXBsYWNlbWVudCkge30KKworICAgICAgICBUSW50ZXJtTm9kZSAqcGFyZW50
OworICAgICAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWw7CisgICAgICAgIFRJbnRlcm1Ob2RlICpy
ZXBsYWNlbWVudDsKKyAgICB9OworCisgICAgLy8gRHVyaW5nIHRyYXZlcnNpbmcsIHNhdmUgYWxs
IHRoZSByZXBsYWNlbWVudHMgdGhhdCBuZWVkIHRvIGhhcHBlbjsKKyAgICAvLyB0aGVuIHJlcGxh
Y2UgdGhlbSBieSBjYWxsaW5nIHVwZGF0ZU5vZGVzKCkuCisgICAgc3RkOjp2ZWN0b3I8Tm9kZVVw
ZGF0ZUVudHJ5PiByZXBsYWNlbWVudHM7CisKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04o
VW5mb2xkU2hvcnRDaXJjdWl0QVNUKTsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVU5GT0xE
X1NIT1JUX0NJUkNVSVRfQVNUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1VuaWZvcm0uY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjky
MmUxM2YwNzEyMDgxZTU1NzRjODBkNDlkNWY3NGRlMDUzN2E5ZGQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3Jt
LmNwcApAQCAtMCwwICsxLDIxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvVW5pZm9ybS5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworVW5pZm9ybTo6VW5p
Zm9ybShHTGVudW0gdHlwZSwgR0xlbnVtIHByZWNpc2lvbiwgY29uc3QgY2hhciAqbmFtZSwgaW50
IGFycmF5U2l6ZSwgaW50IHJlZ2lzdGVySW5kZXgpCit7CisgICAgdGhpcy0+dHlwZSA9IHR5cGU7
CisgICAgdGhpcy0+cHJlY2lzaW9uID0gcHJlY2lzaW9uOworICAgIHRoaXMtPm5hbWUgPSBuYW1l
OworICAgIHRoaXMtPmFycmF5U2l6ZSA9IGFycmF5U2l6ZTsKKyAgICB0aGlzLT5yZWdpc3Rlcklu
ZGV4ID0gcmVnaXN0ZXJJbmRleDsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5pZm9ybS5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5pZm9ybS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjRjNTNmZmE3ZDJmYzU4NGU0MDBjMmNmMDRkMDEyZTZhZjFlMjUyZDcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlm
b3JtLmgKQEAgLTAsMCArMSwzNSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJf
VU5JRk9STV9IXworI2RlZmluZSBDT01QSUxFUl9VTklGT1JNX0hfCisKKyNpbmNsdWRlIDxzdHJp
bmc+CisjaW5jbHVkZSA8dmVjdG9yPgorCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxH
TEVTMi9nbDIuaD4KKworbmFtZXNwYWNlIHNoCit7CisKK3N0cnVjdCBVbmlmb3JtCit7CisgICAg
VW5pZm9ybShHTGVudW0gdHlwZSwgR0xlbnVtIHByZWNpc2lvbiwgY29uc3QgY2hhciAqbmFtZSwg
aW50IGFycmF5U2l6ZSwgaW50IHJlZ2lzdGVySW5kZXgpOworCisgICAgR0xlbnVtIHR5cGU7Cisg
ICAgR0xlbnVtIHByZWNpc2lvbjsKKyAgICBzdGQ6OnN0cmluZyBuYW1lOworICAgIHVuc2lnbmVk
IGludCBhcnJheVNpemU7CisgICAgCisgICAgaW50IHJlZ2lzdGVySW5kZXg7Cit9OworCit0eXBl
ZGVmIHN0ZDo6dmVjdG9yPFVuaWZvcm0+IEFjdGl2ZVVuaWZvcm1zOworCit9CisKKyNlbmRpZiAg
IC8vIENPTVBJTEVSX1VOSUZPUk1fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1p
dGF0aW9ucy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2MyY2M0MWNkYTM2ZjgxMzcxMWZmMzY4ODRmMjViMDY2
YmJjODg0OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwCkBAIC0wLDAgKzEsNTEy
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9W
YWxpZGF0ZUxpbWl0YXRpb25zLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZv
U2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVBhcnNlQ29u
dGV4dC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCisK
K25hbWVzcGFjZSB7Citib29sIElzTG9vcEluZGV4KGNvbnN0IFRJbnRlcm1TeW1ib2wqIHN5bWJv
bCwgY29uc3QgVExvb3BTdGFjayYgc3RhY2spIHsKKyAgICBmb3IgKFRMb29wU3RhY2s6OmNvbnN0
X2l0ZXJhdG9yIGkgPSBzdGFjay5iZWdpbigpOyBpICE9IHN0YWNrLmVuZCgpOyArK2kpIHsKKyAg
ICAgICAgaWYgKGktPmluZGV4LmlkID09IHN5bWJvbC0+Z2V0SWQoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgTWFya0xvb3BG
b3JVbnJvbGwoY29uc3QgVEludGVybVN5bWJvbCogc3ltYm9sLCBUTG9vcFN0YWNrJiBzdGFjaykg
eworICAgIGZvciAoVExvb3BTdGFjazo6aXRlcmF0b3IgaSA9IHN0YWNrLmJlZ2luKCk7IGkgIT0g
c3RhY2suZW5kKCk7ICsraSkgeworICAgICAgICBpZiAoaS0+aW5kZXguaWQgPT0gc3ltYm9sLT5n
ZXRJZCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoaS0+bG9vcCAhPSBOVUxMKTsKKyAgICAgICAg
ICAgIGktPmxvb3AtPnNldFVucm9sbEZsYWcodHJ1ZSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICB9CisgICAgVU5SRUFDSEFCTEUoKTsKK30KKworLy8gVHJhdmVyc2VzIGEg
bm9kZSB0byBjaGVjayBpZiBpdCByZXByZXNlbnRzIGEgY29uc3RhbnQgaW5kZXggZXhwcmVzc2lv
bi4KKy8vIERlZmluaXRpb246CisvLyBjb25zdGFudC1pbmRleC1leHByZXNzaW9ucyBhcmUgYSBz
dXBlcnNldCBvZiBjb25zdGFudC1leHByZXNzaW9ucy4KKy8vIENvbnN0YW50LWluZGV4LWV4cHJl
c3Npb25zIGNhbiBpbmNsdWRlIGxvb3AgaW5kaWNlcyBhcyBkZWZpbmVkIGluCisvLyBHTFNMIEVT
IDEuMCBzcGVjLCBBcHBlbmRpeCBBLCBzZWN0aW9uIDQuCisvLyBUaGUgZm9sbG93aW5nIGFyZSBj
b25zdGFudC1pbmRleC1leHByZXNzaW9uczoKKy8vIC0gQ29uc3RhbnQgZXhwcmVzc2lvbnMKKy8v
IC0gTG9vcCBpbmRpY2VzIGFzIGRlZmluZWQgaW4gc2VjdGlvbiA0CisvLyAtIEV4cHJlc3Npb25z
IGNvbXBvc2VkIG9mIGJvdGggb2YgdGhlIGFib3ZlCitjbGFzcyBWYWxpZGF0ZUNvbnN0SW5kZXhF
eHByIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgorICAgIFZhbGlkYXRlQ29u
c3RJbmRleEV4cHIoY29uc3QgVExvb3BTdGFjayYgc3RhY2spCisgICAgICAgIDogbVZhbGlkKHRy
dWUpLCBtTG9vcFN0YWNrKHN0YWNrKSB7fQorCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBw
YXJzZWQgbm9kZSByZXByZXNlbnRzIGEgY29uc3RhbnQgaW5kZXggZXhwcmVzc2lvbi4KKyAgICBi
b29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtVmFsaWQ7IH0KKworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBzeW1ib2wpIHsKKyAgICAgICAgLy8gT25seSBj
b25zdGFudHMgYW5kIGxvb3AgaW5kaWNlcyBhcmUgYWxsb3dlZCBpbiBhCisgICAgICAgIC8vIGNv
bnN0YW50IGluZGV4IGV4cHJlc3Npb24uCisgICAgICAgIGlmIChtVmFsaWQpIHsKKyAgICAgICAg
ICAgIG1WYWxpZCA9IChzeW1ib2wtPmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB8fAorICAg
ICAgICAgICAgICAgICAgICAgSXNMb29wSW5kZXgoc3ltYm9sLCBtTG9vcFN0YWNrKTsKKyAgICAg
ICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIG1WYWxpZDsKKyAgICBjb25zdCBUTG9v
cFN0YWNrJiBtTG9vcFN0YWNrOworfTsKKworLy8gVHJhdmVyc2VzIGEgbm9kZSB0byBjaGVjayBp
ZiBpdCB1c2VzIGEgbG9vcCBpbmRleC4KKy8vIElmIGFuIGludCBsb29wIGluZGV4IGlzIHVzZWQg
aW4gaXRzIGJvZHkgYXMgYSBzYW1wbGVyIGFycmF5IGluZGV4LAorLy8gbWFyayB0aGUgbG9vcCBm
b3IgdW5yb2xsLgorY2xhc3MgVmFsaWRhdGVMb29wSW5kZXhFeHByIDogcHVibGljIFRJbnRlcm1U
cmF2ZXJzZXIgeworcHVibGljOgorICAgIFZhbGlkYXRlTG9vcEluZGV4RXhwcihUTG9vcFN0YWNr
JiBzdGFjaykKKyAgICAgICAgOiBtVXNlc0Zsb2F0TG9vcEluZGV4KGZhbHNlKSwKKyAgICAgICAg
ICBtVXNlc0ludExvb3BJbmRleChmYWxzZSksCisgICAgICAgICAgbUxvb3BTdGFjayhzdGFjaykg
e30KKworICAgIGJvb2wgdXNlc0Zsb2F0TG9vcEluZGV4KCkgY29uc3QgeyByZXR1cm4gbVVzZXNG
bG9hdExvb3BJbmRleDsgfQorICAgIGJvb2wgdXNlc0ludExvb3BJbmRleCgpIGNvbnN0IHsgcmV0
dXJuIG1Vc2VzSW50TG9vcEluZGV4OyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2wo
VEludGVybVN5bWJvbCogc3ltYm9sKSB7CisgICAgICAgIGlmIChJc0xvb3BJbmRleChzeW1ib2ws
IG1Mb29wU3RhY2spKSB7CisgICAgICAgICAgICBzd2l0Y2ggKHN5bWJvbC0+Z2V0QmFzaWNUeXBl
KCkpIHsKKyAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAgICBtVXNl
c0Zsb2F0TG9vcEluZGV4ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAgICAgICAgbVVzZXNJbnRMb29wSW5kZXggPSB0
cnVlOworICAgICAgICAgICAgICAgIE1hcmtMb29wRm9yVW5yb2xsKHN5bWJvbCwgbUxvb3BTdGFj
ayk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworcHJpdmF0ZToKKyAgICBib29sIG1Vc2VzRmxvYXRMb29wSW5kZXg7CisgICAgYm9vbCBt
VXNlc0ludExvb3BJbmRleDsKKyAgICBUTG9vcFN0YWNrJiBtTG9vcFN0YWNrOworfTsKK30gIC8v
IG5hbWVzcGFjZQorCitWYWxpZGF0ZUxpbWl0YXRpb25zOjpWYWxpZGF0ZUxpbWl0YXRpb25zKFNo
U2hhZGVyVHlwZSBzaGFkZXJUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUSW5mb1NpbmtCYXNlJiBzaW5rKQorICAgIDogbVNoYWRlclR5cGUoc2hhZGVyVHlw
ZSksCisgICAgICBtU2luayhzaW5rKSwKKyAgICAgIG1OdW1FcnJvcnMoMCkKK3sKK30KKworYm9v
bCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSog
bm9kZSkKK3sKKyAgICAvLyBDaGVjayBpZiBsb29wIGluZGV4IGlzIG1vZGlmaWVkIGluIHRoZSBs
b29wIGJvZHkuCisgICAgdmFsaWRhdGVPcGVyYXRpb24obm9kZSwgbm9kZS0+Z2V0TGVmdCgpKTsK
KworICAgIC8vIENoZWNrIGluZGV4aW5nLgorICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkgewor
ICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDoKKyAgICAgICAgdmFsaWRhdGVJbmRleGluZyhub2Rl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6CisjaWYgZGVm
aW5lZChfX0FQUExFX18pCisgICAgICAgIC8vIExvb3AgdW5yb2xsaW5nIGlzIGEgd29yay1hcm91
bmQgZm9yIGEgTWFjIENnIGNvbXBpbGVyIGJ1ZyB3aGVyZSBpdAorICAgICAgICAvLyBjcmFzaGVz
IHdoZW4gYSBzYW1wbGVyIGFycmF5J3MgaW5kZXggaXMgYWxzbyB0aGUgbG9vcCBpbmRleC4KKyAg
ICAgICAgLy8gT25jZSBBcHBsZSBmaXhlcyB0aGlzIGJ1Zywgd2Ugc2hvdWxkIHJlbW92ZSB0aGUg
Y29kZSBpbiB0aGlzIENMLgorICAgICAgICAvLyBTZWUgaHR0cDovL2NvZGVyZXZpZXcuYXBwc3Bv
dC5jb20vNDMzMTA0OC8uCisgICAgICAgIGlmICgobm9kZS0+Z2V0TGVmdCgpICE9IE5VTEwpICYm
IChub2RlLT5nZXRSaWdodCgpICE9IE5VTEwpICYmCisgICAgICAgICAgICAobm9kZS0+Z2V0TGVm
dCgpLT5nZXRBc1N5bWJvbE5vZGUoKSkpIHsKKyAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5
bWJvbCA9IG5vZGUtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgICAgICAgICBp
ZiAoSXNTYW1wbGVyKHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCkpICYmIHN5bWJvbC0+aXNBcnJheSgp
KSB7CisgICAgICAgICAgICAgICAgVmFsaWRhdGVMb29wSW5kZXhFeHByIHZhbGlkYXRlKG1Mb29w
U3RhY2spOworICAgICAgICAgICAgICAgIG5vZGUtPmdldFJpZ2h0KCktPnRyYXZlcnNlKCZ2YWxp
ZGF0ZSk7CisgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlLnVzZXNGbG9hdExvb3BJbmRleCgp
KSB7CisgICAgICAgICAgICAgICAgICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgInNhbXBsZXIgYXJyYXkgaW5kZXggaXMgZmxvYXQgbG9vcCBpbmRl
eCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3IiKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICB2YWxpZGF0ZUluZGV4
aW5nKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdFVu
YXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUpCit7CisgICAgLy8gQ2hlY2sgaWYgbG9vcCBp
bmRleCBpcyBtb2RpZmllZCBpbiB0aGUgbG9vcCBib2R5LgorICAgIHZhbGlkYXRlT3BlcmF0aW9u
KG5vZGUsIG5vZGUtPmdldE9wZXJhbmQoKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3Jl
Z2F0ZSogbm9kZSkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpIHsKKyAgICAgIGNhc2Ug
RU9wRnVuY3Rpb25DYWxsOgorICAgICAgICB2YWxpZGF0ZUZ1bmN0aW9uQ2FsbChub2RlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRMb29wKFZp
c2l0LCBUSW50ZXJtTG9vcCogbm9kZSkKK3sKKyAgICBpZiAoIXZhbGlkYXRlTG9vcFR5cGUobm9k
ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFRMb29wSW5mbyBpbmZvOworICAgIG1l
bXNldCgmaW5mbywgMCwgc2l6ZW9mKFRMb29wSW5mbykpOworICAgIGluZm8ubG9vcCA9IG5vZGU7
CisgICAgaWYgKCF2YWxpZGF0ZUZvckxvb3BIZWFkZXIobm9kZSwgJmluZm8pKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBUSW50ZXJtTm9kZSogYm9keSA9IG5vZGUtPmdldEJvZHkoKTsK
KyAgICBpZiAoYm9keSAhPSBOVUxMKSB7CisgICAgICAgIG1Mb29wU3RhY2sucHVzaF9iYWNrKGlu
Zm8pOworICAgICAgICBib2R5LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgbUxvb3BTdGFjay5w
b3BfYmFjaygpOworICAgIH0KKworICAgIC8vIFRoZSBsb29wIGlzIGZ1bGx5IHByb2Nlc3NlZCAt
IG5vIG5lZWQgdG8gdmlzaXQgY2hpbGRyZW4uCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IFZhbGlkYXRlTGltaXRhdGlvbnM6OmVycm9yKFRTb3VyY2VMb2MgbG9jLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIqIHRva2Vu
KQoreworICAgIG1TaW5rLnByZWZpeChFUHJlZml4RXJyb3IpOworICAgIG1TaW5rLmxvY2F0aW9u
KGxvYyk7CisgICAgbVNpbmsgPDwgIiciIDw8IHRva2VuIDw8ICInIDogIiA8PCByZWFzb24gPDwg
IlxuIjsKKyAgICArK21OdW1FcnJvcnM7Cit9CisKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6
d2l0aGluTG9vcEJvZHkoKSBjb25zdAoreworICAgIHJldHVybiAhbUxvb3BTdGFjay5lbXB0eSgp
OworfQorCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OmlzTG9vcEluZGV4KGNvbnN0IFRJbnRl
cm1TeW1ib2wqIHN5bWJvbCkgY29uc3QKK3sKKyAgICByZXR1cm4gSXNMb29wSW5kZXgoc3ltYm9s
LCBtTG9vcFN0YWNrKTsKK30KKworYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUxv
b3BUeXBlKFRJbnRlcm1Mb29wKiBub2RlKSB7CisgICAgVExvb3BUeXBlIHR5cGUgPSBub2RlLT5n
ZXRUeXBlKCk7CisgICAgaWYgKHR5cGUgPT0gRUxvb3BGb3IpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgLy8gUmVqZWN0IHdoaWxlIGFuZCBkby13aGlsZSBsb29wcy4KKyAgICBlcnJvcihu
b2RlLT5nZXRMaW5lKCksCisgICAgICAgICAgIlRoaXMgdHlwZSBvZiBsb29wIGlzIG5vdCBhbGxv
d2VkIiwKKyAgICAgICAgICB0eXBlID09IEVMb29wV2hpbGUgPyAid2hpbGUiIDogImRvIik7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRl
Rm9yTG9vcEhlYWRlcihUSW50ZXJtTG9vcCogbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRMb29wSW5mbyogaW5mbykKK3sKKyAgICBBU1NFUlQo
bm9kZS0+Z2V0VHlwZSgpID09IEVMb29wRm9yKTsKKworICAgIC8vCisgICAgLy8gVGhlIGZvciBz
dGF0ZW1lbnQgaGFzIHRoZSBmb3JtOgorICAgIC8vICAgIGZvciAoIGluaXQtZGVjbGFyYXRpb24g
OyBjb25kaXRpb24gOyBleHByZXNzaW9uICkgc3RhdGVtZW50CisgICAgLy8KKyAgICBpZiAoIXZh
bGlkYXRlRm9yTG9vcEluaXQobm9kZSwgaW5mbykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIXZhbGlkYXRlRm9yTG9vcENvbmQobm9kZSwgaW5mbykpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoIXZhbGlkYXRlRm9yTG9vcEV4cHIobm9kZSwgaW5mbykpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFZhbGlkYXRlTGlt
aXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcEluaXQoVEludGVybUxvb3AqIG5vZGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVExvb3BJbmZvKiBpbmZvKQor
eworICAgIFRJbnRlcm1Ob2RlKiBpbml0ID0gbm9kZS0+Z2V0SW5pdCgpOworICAgIGlmIChpbml0
ID09IE5VTEwpIHsKKyAgICAgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiTWlzc2luZyBpbml0
IGRlY2xhcmF0aW9uIiwgImZvciIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgLy8KKyAgICAvLyBpbml0LWRlY2xhcmF0aW9uIGhhcyB0aGUgZm9ybToKKyAgICAvLyAgICAg
dHlwZS1zcGVjaWZpZXIgaWRlbnRpZmllciA9IGNvbnN0YW50LWV4cHJlc3Npb24KKyAgICAvLwor
ICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGRlY2wgPSBpbml0LT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAg
IGlmICgoZGVjbCA9PSBOVUxMKSB8fCAoZGVjbC0+Z2V0T3AoKSAhPSBFT3BEZWNsYXJhdGlvbikp
IHsKKyAgICAgICAgZXJyb3IoaW5pdC0+Z2V0TGluZSgpLCAiSW52YWxpZCBpbml0IGRlY2xhcmF0
aW9uIiwgImZvciIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8vIFRvIGtl
ZXAgdGhpbmdzIHNpbXBsZSBkbyBub3QgYWxsb3cgZGVjbGFyYXRpb24gbGlzdC4KKyAgICBUSW50
ZXJtU2VxdWVuY2UmIGRlY2xTZXEgPSBkZWNsLT5nZXRTZXF1ZW5jZSgpOworICAgIGlmIChkZWNs
U2VxLnNpemUoKSAhPSAxKSB7CisgICAgICAgIGVycm9yKGRlY2wtPmdldExpbmUoKSwgIkludmFs
aWQgaW5pdCBkZWNsYXJhdGlvbiIsICJmb3IiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICBUSW50ZXJtQmluYXJ5KiBkZWNsSW5pdCA9IGRlY2xTZXFbMF0tPmdldEFzQmluYXJ5
Tm9kZSgpOworICAgIGlmICgoZGVjbEluaXQgPT0gTlVMTCkgfHwgKGRlY2xJbml0LT5nZXRPcCgp
ICE9IEVPcEluaXRpYWxpemUpKSB7CisgICAgICAgIGVycm9yKGRlY2wtPmdldExpbmUoKSwgIklu
dmFsaWQgaW5pdCBkZWNsYXJhdGlvbiIsICJmb3IiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBkZWNsSW5pdC0+Z2V0TGVmdCgpLT5n
ZXRBc1N5bWJvbE5vZGUoKTsKKyAgICBpZiAoc3ltYm9sID09IE5VTEwpIHsKKyAgICAgICAgZXJy
b3IoZGVjbEluaXQtPmdldExpbmUoKSwgIkludmFsaWQgaW5pdCBkZWNsYXJhdGlvbiIsICJmb3Ii
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBUaGUgbG9vcCBpbmRleCBo
YXMgdHlwZSBpbnQgb3IgZmxvYXQuCisgICAgVEJhc2ljVHlwZSB0eXBlID0gc3ltYm9sLT5nZXRC
YXNpY1R5cGUoKTsKKyAgICBpZiAoKHR5cGUgIT0gRWJ0SW50KSAmJiAodHlwZSAhPSBFYnRGbG9h
dCkpIHsKKyAgICAgICAgZXJyb3Ioc3ltYm9sLT5nZXRMaW5lKCksCisgICAgICAgICAgICAgICJJ
bnZhbGlkIHR5cGUgZm9yIGxvb3AgaW5kZXgiLCBnZXRCYXNpY1N0cmluZyh0eXBlKSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgLy8gVGhlIGxvb3AgaW5kZXggaXMgaW5pdGlh
bGl6ZWQgd2l0aCBjb25zdGFudCBleHByZXNzaW9uLgorICAgIGlmICghaXNDb25zdEV4cHIoZGVj
bEluaXQtPmdldFJpZ2h0KCkpKSB7CisgICAgICAgIGVycm9yKGRlY2xJbml0LT5nZXRMaW5lKCks
CisgICAgICAgICAgICAgICJMb29wIGluZGV4IGNhbm5vdCBiZSBpbml0aWFsaXplZCB3aXRoIG5v
bi1jb25zdGFudCBleHByZXNzaW9uIiwKKyAgICAgICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2wo
KS5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGluZm8tPmlu
ZGV4LmlkID0gc3ltYm9sLT5nZXRJZCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFZh
bGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcENvbmQoVEludGVybUxvb3AqIG5vZGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVExvb3BJbmZv
KiBpbmZvKQoreworICAgIFRJbnRlcm1Ob2RlKiBjb25kID0gbm9kZS0+Z2V0Q29uZGl0aW9uKCk7
CisgICAgaWYgKGNvbmQgPT0gTlVMTCkgeworICAgICAgICBlcnJvcihub2RlLT5nZXRMaW5lKCks
ICJNaXNzaW5nIGNvbmRpdGlvbiIsICJmb3IiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICAvLworICAgIC8vIGNvbmRpdGlvbiBoYXMgdGhlIGZvcm06CisgICAgLy8gICAgIGxv
b3BfaW5kZXggcmVsYXRpb25hbF9vcGVyYXRvciBjb25zdGFudF9leHByZXNzaW9uCisgICAgLy8K
KyAgICBUSW50ZXJtQmluYXJ5KiBiaW5PcCA9IGNvbmQtPmdldEFzQmluYXJ5Tm9kZSgpOworICAg
IGlmIChiaW5PcCA9PSBOVUxMKSB7CisgICAgICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgIklu
dmFsaWQgY29uZGl0aW9uIiwgImZvciIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIC8vIExvb3AgaW5kZXggc2hvdWxkIGJlIHRvIHRoZSBsZWZ0IG9mIHJlbGF0aW9uYWwgb3Bl
cmF0b3IuCisgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gYmluT3AtPmdldExlZnQoKS0+Z2V0
QXNTeW1ib2xOb2RlKCk7CisgICAgaWYgKHN5bWJvbCA9PSBOVUxMKSB7CisgICAgICAgIGVycm9y
KGJpbk9wLT5nZXRMaW5lKCksICJJbnZhbGlkIGNvbmRpdGlvbiIsICJmb3IiKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoc3ltYm9sLT5nZXRJZCgpICE9IGluZm8tPmlu
ZGV4LmlkKSB7CisgICAgICAgIGVycm9yKHN5bWJvbC0+Z2V0TGluZSgpLAorICAgICAgICAgICAg
ICAiRXhwZWN0ZWQgbG9vcCBpbmRleCIsIHN5bWJvbC0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgLy8gUmVsYXRpb25hbCBvcGVyYXRvciBp
cyBvbmUgb2Y6ID4gPj0gPCA8PSA9PSBvciAhPS4KKyAgICBzd2l0Y2ggKGJpbk9wLT5nZXRPcCgp
KSB7CisgICAgICBjYXNlIEVPcEVxdWFsOgorICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKKyAgICAg
IGNhc2UgRU9wTGVzc1RoYW46CisgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgorICAgICAgY2Fz
ZSBFT3BMZXNzVGhhbkVxdWFsOgorICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgorICAg
ICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGVycm9yKGJpbk9wLT5nZXRMaW5l
KCksCisgICAgICAgICAgICAgICJJbnZhbGlkIHJlbGF0aW9uYWwgb3BlcmF0b3IiLAorICAgICAg
ICAgICAgICBnZXRPcGVyYXRvclN0cmluZyhiaW5PcC0+Z2V0T3AoKSkpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgLy8gTG9vcCBpbmRleCBtdXN0IGJlIGNvbXBhcmVkIHdpdGggYSBjb25z
dGFudC4KKyAgICBpZiAoIWlzQ29uc3RFeHByKGJpbk9wLT5nZXRSaWdodCgpKSkgeworICAgICAg
ICBlcnJvcihiaW5PcC0+Z2V0TGluZSgpLAorICAgICAgICAgICAgICAiTG9vcCBpbmRleCBjYW5u
b3QgYmUgY29tcGFyZWQgd2l0aCBub24tY29uc3RhbnQgZXhwcmVzc2lvbiIsCisgICAgICAgICAg
ICAgIHN5bWJvbC0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25z
Ojp2YWxpZGF0ZUZvckxvb3BFeHByKFRJbnRlcm1Mb29wKiBub2RlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRMb29wSW5mbyogaW5mbykKK3sKKyAgICBU
SW50ZXJtTm9kZSogZXhwciA9IG5vZGUtPmdldEV4cHJlc3Npb24oKTsKKyAgICBpZiAoZXhwciA9
PSBOVUxMKSB7CisgICAgICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgIk1pc3NpbmcgZXhwcmVz
c2lvbiIsICJmb3IiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIGZv
ciBleHByZXNzaW9uIGhhcyBvbmUgb2YgdGhlIGZvbGxvd2luZyBmb3JtczoKKyAgICAvLyAgICAg
bG9vcF9pbmRleCsrCisgICAgLy8gICAgIGxvb3BfaW5kZXgtLQorICAgIC8vICAgICBsb29wX2lu
ZGV4ICs9IGNvbnN0YW50X2V4cHJlc3Npb24KKyAgICAvLyAgICAgbG9vcF9pbmRleCAtPSBjb25z
dGFudF9leHByZXNzaW9uCisgICAgLy8gICAgICsrbG9vcF9pbmRleAorICAgIC8vICAgICAtLWxv
b3BfaW5kZXgKKyAgICAvLyBUaGUgbGFzdCB0d28gZm9ybXMgYXJlIG5vdCBzcGVjaWZpZWQgaW4g
dGhlIHNwZWMsIGJ1dCBJIGFtIGFzc3VtaW5nCisgICAgLy8gaXRzIGFuIG92ZXJzaWdodC4KKyAg
ICBUSW50ZXJtVW5hcnkqIHVuT3AgPSBleHByLT5nZXRBc1VuYXJ5Tm9kZSgpOworICAgIFRJbnRl
cm1CaW5hcnkqIGJpbk9wID0gdW5PcCA/IE5VTEwgOiBleHByLT5nZXRBc0JpbmFyeU5vZGUoKTsK
KworICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7CisgICAgVEludGVybVN5bWJvbCogc3ltYm9s
ID0gTlVMTDsKKyAgICBpZiAodW5PcCAhPSBOVUxMKSB7CisgICAgICAgIG9wID0gdW5PcC0+Z2V0
T3AoKTsKKyAgICAgICAgc3ltYm9sID0gdW5PcC0+Z2V0T3BlcmFuZCgpLT5nZXRBc1N5bWJvbE5v
ZGUoKTsKKyAgICB9IGVsc2UgaWYgKGJpbk9wICE9IE5VTEwpIHsKKyAgICAgICAgb3AgPSBiaW5P
cC0+Z2V0T3AoKTsKKyAgICAgICAgc3ltYm9sID0gYmluT3AtPmdldExlZnQoKS0+Z2V0QXNTeW1i
b2xOb2RlKCk7CisgICAgfQorCisgICAgLy8gVGhlIG9wZXJhbmQgbXVzdCBiZSBsb29wIGluZGV4
LgorICAgIGlmIChzeW1ib2wgPT0gTlVMTCkgeworICAgICAgICBlcnJvcihleHByLT5nZXRMaW5l
KCksICJJbnZhbGlkIGV4cHJlc3Npb24iLCAiZm9yIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgaWYgKHN5bWJvbC0+Z2V0SWQoKSAhPSBpbmZvLT5pbmRleC5pZCkgeworICAg
ICAgICBlcnJvcihzeW1ib2wtPmdldExpbmUoKSwKKyAgICAgICAgICAgICAgIkV4cGVjdGVkIGxv
b3AgaW5kZXgiLCBzeW1ib2wtPmdldFN5bWJvbCgpLmNfc3RyKCkpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgLy8gVGhlIG9wZXJhdG9yIGlzIG9uZSBvZjogKysgLS0gKz0g
LT0uCisgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6Cisg
ICAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1l
bnQ6CisgICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OgorICAgICAgICAgICAgQVNTRVJUKCh1
bk9wICE9IE5VTEwpICYmIChiaW5PcCA9PSBOVUxMKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BBZGRBc3NpZ246CisgICAgICAgIGNhc2UgRU9wU3ViQXNzaWduOgorICAg
ICAgICAgICAgQVNTRVJUKCh1bk9wID09IE5VTEwpICYmIChiaW5PcCAhPSBOVUxMKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGVycm9yKGV4cHIt
PmdldExpbmUoKSwgIkludmFsaWQgb3BlcmF0b3IiLCBnZXRPcGVyYXRvclN0cmluZyhvcCkpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIExvb3AgaW5kZXggbXVz
dCBiZSBpbmNyZW1lbnRlZC9kZWNyZW1lbnRlZCB3aXRoIGEgY29uc3RhbnQuCisgICAgaWYgKGJp
bk9wICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKCFpc0NvbnN0RXhwcihiaW5PcC0+Z2V0UmlnaHQo
KSkpIHsKKyAgICAgICAgICAgIGVycm9yKGJpbk9wLT5nZXRMaW5lKCksCisgICAgICAgICAgICAg
ICAgICAiTG9vcCBpbmRleCBjYW5ub3QgYmUgbW9kaWZpZWQgYnkgbm9uLWNvbnN0YW50IGV4cHJl
c3Npb24iLAorICAgICAgICAgICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigpKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRnVuY3Rpb25D
YWxsKFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUtPmdldE9wKCkg
PT0gRU9wRnVuY3Rpb25DYWxsKTsKKworICAgIC8vIElmIG5vdCB3aXRoaW4gbG9vcCBib2R5LCB0
aGVyZSBpcyBub3RoaW5nIHRvIGNoZWNrLgorICAgIGlmICghd2l0aGluTG9vcEJvZHkoKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBMaXN0IG9mIHBhcmFtIGluZGljZXMgZm9yIHdo
aWNoIGxvb3AgaW5kaWNlcyBhcmUgdXNlZCBhcyBhcmd1bWVudC4KKyAgICB0eXBlZGVmIHN0ZDo6
dmVjdG9yPHNpemVfdD4gUGFyYW1JbmRleDsKKyAgICBQYXJhbUluZGV4IHBJbmRleDsKKyAgICBU
SW50ZXJtU2VxdWVuY2UmIHBhcmFtcyA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CisgICAgZm9yIChU
SW50ZXJtU2VxdWVuY2U6OnNpemVfdHlwZSBpID0gMDsgaSA8IHBhcmFtcy5zaXplKCk7ICsraSkg
eworICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBwYXJhbXNbaV0tPmdldEFzU3ltYm9s
Tm9kZSgpOworICAgICAgICBpZiAoc3ltYm9sICYmIGlzTG9vcEluZGV4KHN5bWJvbCkpCisgICAg
ICAgICAgICBwSW5kZXgucHVzaF9iYWNrKGkpOworICAgIH0KKyAgICAvLyBJZiBub25lIG9mIHRo
ZSBsb29wIGluZGljZXMgYXJlIHVzZWQgYXMgYXJndW1lbnRzLAorICAgIC8vIHRoZXJlIGlzIG5v
dGhpbmcgdG8gY2hlY2suCisgICAgaWYgKHBJbmRleC5lbXB0eSgpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIGJvb2wgdmFsaWQgPSB0cnVlOworICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9s
VGFibGUgPSBHZXRHbG9iYWxQYXJzZUNvbnRleHQoKS0+c3ltYm9sVGFibGU7CisgICAgVFN5bWJv
bCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChub2RlLT5nZXROYW1lKCkpOworICAgIEFTU0VS
VChzeW1ib2wgJiYgc3ltYm9sLT5pc0Z1bmN0aW9uKCkpOworICAgIFRGdW5jdGlvbiogZnVuY3Rp
b24gPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihzeW1ib2wpOworICAgIGZvciAoUGFyYW1JbmRl
eDo6Y29uc3RfaXRlcmF0b3IgaSA9IHBJbmRleC5iZWdpbigpOworICAgICAgICAgaSAhPSBwSW5k
ZXguZW5kKCk7ICsraSkgeworICAgICAgICBjb25zdCBUUGFyYW1ldGVyJiBwYXJhbSA9IGZ1bmN0
aW9uLT5nZXRQYXJhbSgqaSk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcmFtLnR5cGUt
PmdldFF1YWxpZmllcigpOworICAgICAgICBpZiAoKHF1YWwgPT0gRXZxT3V0KSB8fCAocXVhbCA9
PSBFdnFJbk91dCkpIHsKKyAgICAgICAgICAgIGVycm9yKHBhcmFtc1sqaV0tPmdldExpbmUoKSwK
KyAgICAgICAgICAgICAgICAgICJMb29wIGluZGV4IGNhbm5vdCBiZSB1c2VkIGFzIGFyZ3VtZW50
IHRvIGEgZnVuY3Rpb24gb3V0IG9yIGlub3V0IHBhcmFtZXRlciIsCisgICAgICAgICAgICAgICAg
ICBwYXJhbXNbKmldLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7Cisg
ICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IHZhbGlkOworfQorCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlT3BlcmF0aW9u
KFRJbnRlcm1PcGVyYXRvciogbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVEludGVybU5vZGUqIG9wZXJhbmQpIHsKKyAgICAvLyBDaGVjayBpZiBsb29w
IGluZGV4IGlzIG1vZGlmaWVkIGluIHRoZSBsb29wIGJvZHkuCisgICAgaWYgKCF3aXRoaW5Mb29w
Qm9keSgpIHx8ICFub2RlLT5pc0Fzc2lnbm1lbnQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBjb25zdCBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBvcGVyYW5kLT5nZXRBc1N5bWJvbE5v
ZGUoKTsKKyAgICBpZiAoc3ltYm9sICYmIGlzTG9vcEluZGV4KHN5bWJvbCkpIHsKKyAgICAgICAg
ZXJyb3Iobm9kZS0+Z2V0TGluZSgpLAorICAgICAgICAgICAgICAiTG9vcCBpbmRleCBjYW5ub3Qg
YmUgc3RhdGljYWxseSBhc3NpZ25lZCB0byB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIGxvb3AiLAor
ICAgICAgICAgICAgICBzeW1ib2wtPmdldFN5bWJvbCgpLmNfc3RyKCkpOworICAgIH0KKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjppc0NvbnN0RXhwcihU
SW50ZXJtTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZSAhPSBOVUxMKTsKKyAgICByZXR1
cm4gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCkgIT0gTlVMTDsKK30KKworYm9vbCBWYWxpZGF0
ZUxpbWl0YXRpb25zOjppc0NvbnN0SW5kZXhFeHByKFRJbnRlcm1Ob2RlKiBub2RlKQoreworICAg
IEFTU0VSVChub2RlICE9IE5VTEwpOworCisgICAgVmFsaWRhdGVDb25zdEluZGV4RXhwciB2YWxp
ZGF0ZShtTG9vcFN0YWNrKTsKKyAgICBub2RlLT50cmF2ZXJzZSgmdmFsaWRhdGUpOworICAgIHJl
dHVybiB2YWxpZGF0ZS5pc1ZhbGlkKCk7Cit9CisKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6
dmFsaWRhdGVJbmRleGluZyhUSW50ZXJtQmluYXJ5KiBub2RlKQoreworICAgIEFTU0VSVCgobm9k
ZS0+Z2V0T3AoKSA9PSBFT3BJbmRleERpcmVjdCkgfHwKKyAgICAgICAgICAgKG5vZGUtPmdldE9w
KCkgPT0gRU9wSW5kZXhJbmRpcmVjdCkpOworCisgICAgYm9vbCB2YWxpZCA9IHRydWU7CisgICAg
VEludGVybVR5cGVkKiBpbmRleCA9IG5vZGUtPmdldFJpZ2h0KCk7CisgICAgLy8gVGhlIGluZGV4
IGV4cHJlc3Npb24gbXVzdCBoYXZlIGludGVncmFsIHR5cGUuCisgICAgaWYgKCFpbmRleC0+aXNT
Y2FsYXIoKSB8fCAoaW5kZXgtPmdldEJhc2ljVHlwZSgpICE9IEVidEludCkpIHsKKyAgICAgICAg
ZXJyb3IoaW5kZXgtPmdldExpbmUoKSwKKyAgICAgICAgICAgICAgIkluZGV4IGV4cHJlc3Npb24g
bXVzdCBoYXZlIGludGVncmFsIHR5cGUiLAorICAgICAgICAgICAgICBpbmRleC0+Z2V0Q29tcGxl
dGVTdHJpbmcoKS5jX3N0cigpKTsKKyAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICB9CisgICAg
Ly8gVGhlIGluZGV4IGV4cGVzc2lvbiBtdXN0IGJlIGEgY29uc3RhbnQtaW5kZXgtZXhwcmVzc2lv
biB1bmxlc3MKKyAgICAvLyB0aGUgb3BlcmFuZCBpcyBhIHVuaWZvcm0gaW4gYSB2ZXJ0ZXggc2hh
ZGVyLgorICAgIFRJbnRlcm1UeXBlZCogb3BlcmFuZCA9IG5vZGUtPmdldExlZnQoKTsKKyAgICBi
b29sIHNraXAgPSAobVNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUikgJiYKKyAgICAgICAg
ICAgICAgICAob3BlcmFuZC0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxVW5pZm9ybSk7CisgICAgaWYg
KCFza2lwICYmICFpc0NvbnN0SW5kZXhFeHByKGluZGV4KSkgeworICAgICAgICBlcnJvcihpbmRl
eC0+Z2V0TGluZSgpLCAiSW5kZXggZXhwcmVzc2lvbiBtdXN0IGJlIGNvbnN0YW50IiwgIltdIik7
CisgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB2YWxpZDsKK30KKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVmFsaWRhdGVMaW1pdGF0aW9ucy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1pdGF0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg4Mzlk
ZDhiOGFmMzY1NmQxMzMyNDFkMDE2MTc4ODM3OTgxODExZmIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUxp
bWl0YXRpb25zLmgKQEAgLTAsMCArMSw1OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJH
TFNMQU5HL1NoYWRlckxhbmcuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVy
bWVkaWF0ZS5oIgorCitjbGFzcyBUSW5mb1NpbmtCYXNlOworCitzdHJ1Y3QgVExvb3BJbmZvIHsK
KyAgICBzdHJ1Y3QgVEluZGV4IHsKKyAgICAgICAgaW50IGlkOyAgLy8gc3ltYm9sIGlkLgorICAg
IH0gaW5kZXg7CisgICAgVEludGVybUxvb3AqIGxvb3A7Cit9OwordHlwZWRlZiBUVmVjdG9yPFRM
b29wSW5mbz4gVExvb3BTdGFjazsKKworLy8gVHJhdmVyc2VzIGludGVybWVkaWF0ZSB0cmVlIHRv
IGVuc3VyZSB0aGF0IHRoZSBzaGFkZXIgZG9lcyBub3QgZXhjZWVkIHRoZQorLy8gbWluaW11bSBm
dW5jdGlvbmFsaXR5IG1hbmRhdGVkIGluIEdMU0wgMS4wIHNwZWMsIEFwcGVuZGl4IEEuCitjbGFz
cyBWYWxpZGF0ZUxpbWl0YXRpb25zIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGlj
OgorICAgIFZhbGlkYXRlTGltaXRhdGlvbnMoU2hTaGFkZXJUeXBlIHNoYWRlclR5cGUsIFRJbmZv
U2lua0Jhc2UmIHNpbmspOworCisgICAgaW50IG51bUVycm9ycygpIGNvbnN0IHsgcmV0dXJuIG1O
dW1FcnJvcnM7IH0KKworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCwgVEludGVy
bUJpbmFyeSopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5h
cnkqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dy
ZWdhdGUqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCop
OworCitwcml2YXRlOgorICAgIHZvaWQgZXJyb3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIg
KnJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4pOworCisgICAgYm9vbCB3aXRoaW5Mb29wQm9keSgp
IGNvbnN0OworICAgIGJvb2wgaXNMb29wSW5kZXgoY29uc3QgVEludGVybVN5bWJvbCogc3ltYm9s
KSBjb25zdDsKKyAgICBib29sIHZhbGlkYXRlTG9vcFR5cGUoVEludGVybUxvb3AqIG5vZGUpOwor
ICAgIGJvb2wgdmFsaWRhdGVGb3JMb29wSGVhZGVyKFRJbnRlcm1Mb29wKiBub2RlLCBUTG9vcElu
Zm8qIGluZm8pOworICAgIGJvb2wgdmFsaWRhdGVGb3JMb29wSW5pdChUSW50ZXJtTG9vcCogbm9k
ZSwgVExvb3BJbmZvKiBpbmZvKTsKKyAgICBib29sIHZhbGlkYXRlRm9yTG9vcENvbmQoVEludGVy
bUxvb3AqIG5vZGUsIFRMb29wSW5mbyogaW5mbyk7CisgICAgYm9vbCB2YWxpZGF0ZUZvckxvb3BF
eHByKFRJbnRlcm1Mb29wKiBub2RlLCBUTG9vcEluZm8qIGluZm8pOworICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiBub25lIG9mIHRoZSBsb29wIGluZGljZXMgaXMgdXNlZCBhcyB0aGUgYXJndW1lbnQg
dG8KKyAgICAvLyB0aGUgZ2l2ZW4gZnVuY3Rpb24gb3V0IG9yIGlub3V0IHBhcmFtZXRlci4KKyAg
ICBib29sIHZhbGlkYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpOworICAg
IGJvb2wgdmFsaWRhdGVPcGVyYXRpb24oVEludGVybU9wZXJhdG9yKiBub2RlLCBUSW50ZXJtTm9k
ZSogb3BlcmFuZCk7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgaW5kZXhpbmcgZG9lcyBub3Qg
ZXhjZWVkIHRoZSBtaW5pbXVtIGZ1bmN0aW9uYWxpdHkKKyAgICAvLyBtYW5kYXRlZCBpbiBHTFNM
IDEuMCBzcGVjLCBBcHBlbmRpeCBBLCBTZWN0aW9uIDUuCisgICAgYm9vbCBpc0NvbnN0RXhwcihU
SW50ZXJtTm9kZSogbm9kZSk7CisgICAgYm9vbCBpc0NvbnN0SW5kZXhFeHByKFRJbnRlcm1Ob2Rl
KiBub2RlKTsKKyAgICBib29sIHZhbGlkYXRlSW5kZXhpbmcoVEludGVybUJpbmFyeSogbm9kZSk7
CisKKyAgICBTaFNoYWRlclR5cGUgbVNoYWRlclR5cGU7CisgICAgVEluZm9TaW5rQmFzZSYgbVNp
bms7CisgICAgaW50IG1OdW1FcnJvcnM7CisgICAgVExvb3BTdGFjayBtTG9vcFN0YWNrOworfTsK
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVmFyaWFibGVJbmZvLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWY4ODhhZmYxMTA0
NzMzZGEzOWU2M2Q0ZjE4MWE2NmI0MThhNTVkYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5jcHAK
QEAgLTAsMCArMSwzMTIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5oIgorCituYW1lc3BhY2UgeworCitUU3RyaW5nIGFy
cmF5QnJhY2tldHMoaW50IGluZGV4KQoreworICAgIFRTdHJpbmdTdHJlYW0gc3RyZWFtOworICAg
IHN0cmVhbSA8PCAiWyIgPDwgaW5kZXggPDwgIl0iOworICAgIHJldHVybiBzdHJlYW0uc3RyKCk7
Cit9CisKKy8vIFJldHVybnMgdGhlIGRhdGEgdHlwZSBmb3IgYW4gYXR0cmlidXRlLCB1bmlmb3Jt
LCBvciB2YXJ5aW5nLgorU2hEYXRhVHlwZSBnZXRWYXJpYWJsZURhdGFUeXBlKGNvbnN0IFRUeXBl
JiB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgY2Fz
ZSBFYnRGbG9hdDoKKyAgICAgICAgICBpZiAodHlwZS5pc01hdHJpeCgpKSB7CisgICAgICAgICAg
ICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgY2Fz
ZSAyOiByZXR1cm4gU0hfRkxPQVRfTUFUMjsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVy
biBTSF9GTE9BVF9NQVQzOworICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFNIX0ZMT0FU
X01BVDQ7CisgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgICAgfQorICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5pc1ZlY3RvcigpKSB7CisgICAgICAg
ICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSAyOiByZXR1cm4gU0hfRkxPQVRfVkVDMjsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IHJl
dHVybiBTSF9GTE9BVF9WRUMzOworICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFNIX0ZM
T0FUX1ZFQzQ7CisgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHJldHVybiBTSF9G
TE9BVDsKKyAgICAgICAgICB9CisgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICBpZiAodHlw
ZS5pc01hdHJpeCgpKSB7CisgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAg
fSBlbHNlIGlmICh0eXBlLmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgc3dpdGNoICh0eXBl
LmdldE5vbWluYWxTaXplKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBTSF9J
TlRfVkVDMjsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBTSF9JTlRfVkVDMzsKKyAg
ICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBTSF9JTlRfVkVDNDsKKyAgICAgICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgcmV0dXJuIFNIX0lOVDsKKyAgICAgICAgICB9CisgICAgICBj
YXNlIEVidEJvb2w6CisgICAgICAgICAgaWYgKHR5cGUuaXNNYXRyaXgoKSkgeworICAgICAgICAg
ICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5pc1ZlY3Rvcigp
KSB7CisgICAgICAgICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKSB7CisgICAg
ICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gU0hfQk9PTF9WRUMyOworICAgICAgICAgICAgICAg
IGNhc2UgMzogcmV0dXJuIFNIX0JPT0xfVkVDMzsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6IHJl
dHVybiBTSF9CT09MX1ZFQzQ7CisgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHJl
dHVybiBTSF9CT09MOworICAgICAgICAgIH0KKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiByZXR1
cm4gU0hfU0FNUExFUl8yRDsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6IHJldHVybiBTSF9T
QU1QTEVSX0NVQkU7CisgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzogcmV0dXJuIFNI
X1NBTVBMRVJfRVhURVJOQUxfT0VTOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OiByZXR1
cm4gU0hfU0FNUExFUl8yRF9SRUNUX0FSQjsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgfQorICAgIHJldHVybiBTSF9OT05FOworfQorCit2b2lkIGdldEJ1aWx0SW5WYXJpYWJs
ZUluZm8oY29uc3QgVFR5cGUmIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVFN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3Ry
aW5nJiBtYXBwZWROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJsZUlu
Zm9MaXN0JiBpbmZvTGlzdCk7Cit2b2lkIGdldFVzZXJEZWZpbmVkVmFyaWFibGVJbmZvKGNvbnN0
IFRUeXBlJiB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3Ry
aW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5n
JiBtYXBwZWROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFyaWFibGVJ
bmZvTGlzdCYgaW5mb0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoSGFz
aEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uKTsKKworLy8gUmV0dXJucyBpbmZvIGZvciBhbiBhdHRy
aWJ1dGUsIHVuaWZvcm0sIG9yIHZhcnlpbmcuCit2b2lkIGdldFZhcmlhYmxlSW5mbyhjb25zdCBU
VHlwZSYgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUsCisg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nJiBtYXBwZWROYW1lLAorICAgICAgICAg
ICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIGluZm9MaXN0LAorICAgICAgICAgICAgICAg
ICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24pCit7CisgICAgaWYgKHR5cGUuZ2V0
QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7CisgICAgICAgIGlmICh0eXBlLmlzQXJyYXkoKSkg
eworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlLmdldEFycmF5U2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICBUU3RyaW5nIGxuYW1lID0gbmFtZSArIGFycmF5QnJhY2tl
dHMoaSk7CisgICAgICAgICAgICAgICAgVFN0cmluZyBsbWFwcGVkTmFtZSA9IG1hcHBlZE5hbWUg
KyBhcnJheUJyYWNrZXRzKGkpOworICAgICAgICAgICAgICAgIGdldFVzZXJEZWZpbmVkVmFyaWFi
bGVJbmZvKHR5cGUsIGxuYW1lLCBsbWFwcGVkTmFtZSwgaW5mb0xpc3QsIGhhc2hGdW5jdGlvbik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBnZXRVc2VyRGVm
aW5lZFZhcmlhYmxlSW5mbyh0eXBlLCBuYW1lLCBtYXBwZWROYW1lLCBpbmZvTGlzdCwgaGFzaEZ1
bmN0aW9uKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGdldEJ1aWx0SW5WYXJp
YWJsZUluZm8odHlwZSwgbmFtZSwgbWFwcGVkTmFtZSwgaW5mb0xpc3QpOworICAgIH0KK30KKwor
dm9pZCBnZXRCdWlsdEluVmFyaWFibGVJbmZvKGNvbnN0IFRUeXBlJiB0eXBlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVFN0cmluZyYgbWFwcGVkTmFtZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYgaW5mb0xpc3QpCit7CisgICAgQVNTRVJUKHR5
cGUuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0U3RydWN0KTsKKworICAgIFRWYXJpYWJsZUluZm8gdmFy
SW5mbzsKKyAgICBpZiAodHlwZS5pc0FycmF5KCkpIHsKKyAgICAgICAgdmFySW5mby5uYW1lID0g
KG5hbWUgKyAiWzBdIikuY19zdHIoKTsKKyAgICAgICAgdmFySW5mby5tYXBwZWROYW1lID0gKG1h
cHBlZE5hbWUgKyAiWzBdIikuY19zdHIoKTsKKyAgICAgICAgdmFySW5mby5zaXplID0gdHlwZS5n
ZXRBcnJheVNpemUoKTsKKyAgICAgICAgdmFySW5mby5pc0FycmF5ID0gdHJ1ZTsKKyAgICB9IGVs
c2UgeworICAgICAgICB2YXJJbmZvLm5hbWUgPSBuYW1lLmNfc3RyKCk7CisgICAgICAgIHZhcklu
Zm8ubWFwcGVkTmFtZSA9IG1hcHBlZE5hbWUuY19zdHIoKTsKKyAgICAgICAgdmFySW5mby5zaXpl
ID0gMTsKKyAgICAgICAgdmFySW5mby5pc0FycmF5ID0gZmFsc2U7CisgICAgfQorICAgIHZhcklu
Zm8ucHJlY2lzaW9uID0gdHlwZS5nZXRQcmVjaXNpb24oKTsKKyAgICB2YXJJbmZvLnR5cGUgPSBn
ZXRWYXJpYWJsZURhdGFUeXBlKHR5cGUpOworICAgIGluZm9MaXN0LnB1c2hfYmFjayh2YXJJbmZv
KTsKK30KKwordm9pZCBnZXRVc2VyRGVmaW5lZFZhcmlhYmxlSW5mbyhjb25zdCBUVHlwZSYgdHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyYgbmFtZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyYgbWFwcGVkTmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIGlu
Zm9MaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0
IGhhc2hGdW5jdGlvbikKK3sKKyAgICBBU1NFUlQodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRT
dHJ1Y3QpOworCisgICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRzID0gdHlwZS5nZXRTdHJ1Y3Qo
KS0+ZmllbGRzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgY29uc3QgVFR5cGUmIGZpZWxkVHlwZSA9ICooZmllbGRzW2ldLT50eXBl
KCkpOworICAgICAgICBjb25zdCBUU3RyaW5nJiBmaWVsZE5hbWUgPSBmaWVsZHNbaV0tPm5hbWUo
KTsKKyAgICAgICAgZ2V0VmFyaWFibGVJbmZvKGZpZWxkVHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG5hbWUgKyAiLiIgKyBmaWVsZE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBt
YXBwZWROYW1lICsgIi4iICsgVEludGVybVRyYXZlcnNlcjo6aGFzaChmaWVsZE5hbWUsIGhhc2hG
dW5jdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvTGlzdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGhhc2hGdW5jdGlvbik7CisgICAgfQorfQorCitUVmFyaWFibGVJbmZvKiBm
aW5kVmFyaWFibGUoY29uc3QgVFR5cGUmIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVFN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFy
aWFibGVJbmZvTGlzdCYgaW5mb0xpc3QpCit7CisgICAgLy8gVE9ETyh6bW8pOiBvcHRpbWl6ZSB0
aGlzIGZ1bmN0aW9uLgorICAgIFRTdHJpbmcgbXlOYW1lID0gbmFtZTsKKyAgICBpZiAodHlwZS5p
c0FycmF5KCkpCisgICAgICAgIG15TmFtZSArPSAiWzBdIjsKKyAgICBmb3IgKHNpemVfdCBpaSA9
IDA7IGlpIDwgaW5mb0xpc3Quc2l6ZSgpOyArK2lpKQorICAgIHsKKyAgICAgICAgaWYgKGluZm9M
aXN0W2lpXS5uYW1lLmNfc3RyKCkgPT0gbXlOYW1lKQorICAgICAgICAgICAgcmV0dXJuICYoaW5m
b0xpc3RbaWldKTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK30gIC8vIG5hbWVzcGFj
ZSBhbm9ueW1vdXMKKworVFZhcmlhYmxlSW5mbzo6VFZhcmlhYmxlSW5mbygpCisgICAgOiB0eXBl
KFNIX05PTkUpLAorICAgICAgc2l6ZSgwKSwKKyAgICAgIGlzQXJyYXkoZmFsc2UpLAorICAgICAg
cHJlY2lzaW9uKEVicFVuZGVmaW5lZCksCisgICAgICBzdGF0aWNVc2UoZmFsc2UpCit7Cit9CisK
K1RWYXJpYWJsZUluZm86OlRWYXJpYWJsZUluZm8oU2hEYXRhVHlwZSB0eXBlLCBpbnQgc2l6ZSkK
KyAgICA6IHR5cGUodHlwZSksCisgICAgICBzaXplKHNpemUpLAorICAgICAgaXNBcnJheShmYWxz
ZSksCisgICAgICBwcmVjaXNpb24oRWJwVW5kZWZpbmVkKSwKKyAgICAgIHN0YXRpY1VzZShmYWxz
ZSkKK3sKK30KKworQ29sbGVjdFZhcmlhYmxlczo6Q29sbGVjdFZhcmlhYmxlcyhUVmFyaWFibGVJ
bmZvTGlzdCYgYXR0cmlicywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZh
cmlhYmxlSW5mb0xpc3QmIHVuaWZvcm1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUVmFyaWFibGVJbmZvTGlzdCYgdmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uKQorICAgIDogbUF0dHJp
YnMoYXR0cmlicyksCisgICAgICBtVW5pZm9ybXModW5pZm9ybXMpLAorICAgICAgbVZhcnlpbmdz
KHZhcnlpbmdzKSwKKyAgICAgIG1Qb2ludENvb3JkQWRkZWQoZmFsc2UpLAorICAgICAgbUZyb250
RmFjaW5nQWRkZWQoZmFsc2UpLAorICAgICAgbUZyYWdDb29yZEFkZGVkKGZhbHNlKSwKKyAgICAg
IG1IYXNoRnVuY3Rpb24oaGFzaEZ1bmN0aW9uKQoreworfQorCisvLyBXZSB3YW50IHRvIGNoZWNr
IHdoZXRoZXIgYSB1bmlmb3JtL3ZhcnlpbmcgaXMgc3RhdGljYWxseSB1c2VkCisvLyBiZWNhdXNl
IHdlIG9ubHkgY291bnQgdGhlIHVzZWQgb25lcyBpbiBwYWNraW5nIGNvbXB1dGluZy4KKy8vIEFs
c28sIGdsX0ZyYWdDb29yZCwgZ2xfUG9pbnRDb29yZCwgYW5kIGdsX0Zyb250RmFjaW5nIGNvdW50
CisvLyB0b3dhcmQgdmFyeWluZyBjb3VudGluZyBpZiB0aGV5IGFyZSBzdGF0aWNhbGx5IHVzZWQg
aW4gYSBmcmFnbWVudAorLy8gc2hhZGVyLgordm9pZCBDb2xsZWN0VmFyaWFibGVzOjp2aXNpdFN5
bWJvbChUSW50ZXJtU3ltYm9sKiBzeW1ib2wpCit7CisgICAgQVNTRVJUKHN5bWJvbCAhPSBOVUxM
KTsKKyAgICBUVmFyaWFibGVJbmZvKiB2YXIgPSBOVUxMOworICAgIHN3aXRjaCAoc3ltYm9sLT5n
ZXRRdWFsaWZpZXIoKSkKKyAgICB7CisgICAgY2FzZSBFdnFWYXJ5aW5nT3V0OgorICAgIGNhc2Ug
RXZxSW52YXJpYW50VmFyeWluZ091dDoKKyAgICBjYXNlIEV2cVZhcnlpbmdJbjoKKyAgICBjYXNl
IEV2cUludmFyaWFudFZhcnlpbmdJbjoKKyAgICAgICAgdmFyID0gZmluZFZhcmlhYmxlKHN5bWJv
bC0+Z2V0VHlwZSgpLCBzeW1ib2wtPmdldFN5bWJvbCgpLCBtVmFyeWluZ3MpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEV2cVVuaWZvcm06CisgICAgICAgIHZhciA9IGZpbmRWYXJpYWJsZShz
eW1ib2wtPmdldFR5cGUoKSwgc3ltYm9sLT5nZXRTeW1ib2woKSwgbVVuaWZvcm1zKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBFdnFGcmFnQ29vcmQ6CisgICAgICAgIGlmICghbUZyYWdDb29y
ZEFkZGVkKSB7CisgICAgICAgICAgICBUVmFyaWFibGVJbmZvIGluZm87CisgICAgICAgICAgICBp
bmZvLm5hbWUgPSAiZ2xfRnJhZ0Nvb3JkIjsKKyAgICAgICAgICAgIGluZm8ubWFwcGVkTmFtZSA9
ICJnbF9GcmFnQ29vcmQiOworICAgICAgICAgICAgaW5mby50eXBlID0gU0hfRkxPQVRfVkVDNDsK
KyAgICAgICAgICAgIGluZm8uc2l6ZSA9IDE7CisgICAgICAgICAgICBpbmZvLnByZWNpc2lvbiA9
IEVicE1lZGl1bTsgIC8vIFVzZSBtZWRpdW1wIGFzIGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlci4K
KyAgICAgICAgICAgIGluZm8uc3RhdGljVXNlID0gdHJ1ZTsKKwkgICAgbVZhcnlpbmdzLnB1c2hf
YmFjayhpbmZvKTsKKyAgICAgICAgICAgIG1GcmFnQ29vcmRBZGRlZCA9IHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXZxRnJvbnRGYWNpbmc6CisgICAgICAgIGlm
ICghbUZyb250RmFjaW5nQWRkZWQpIHsKKyAgICAgICAgICAgIFRWYXJpYWJsZUluZm8gaW5mbzsK
KyAgICAgICAgICAgIGluZm8ubmFtZSA9ICJnbF9Gcm9udEZhY2luZyI7CisgICAgICAgICAgICBp
bmZvLm1hcHBlZE5hbWUgPSAiZ2xfRnJvbnRGYWNpbmciOworICAgICAgICAgICAgaW5mby50eXBl
ID0gU0hfQk9PTDsKKyAgICAgICAgICAgIGluZm8uc2l6ZSA9IDE7CisgICAgICAgICAgICBpbmZv
LnByZWNpc2lvbiA9IEVicFVuZGVmaW5lZDsKKyAgICAgICAgICAgIGluZm8uc3RhdGljVXNlID0g
dHJ1ZTsKKwkgICAgbVZhcnlpbmdzLnB1c2hfYmFjayhpbmZvKTsKKyAgICAgICAgICAgIG1Gcm9u
dEZhY2luZ0FkZGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBFdnFQb2ludENvb3JkOgorICAgICAgICBpZiAoIW1Qb2ludENvb3JkQWRkZWQpIHsKKyAgICAg
ICAgICAgIFRWYXJpYWJsZUluZm8gaW5mbzsKKyAgICAgICAgICAgIGluZm8ubmFtZSA9ICJnbF9Q
b2ludENvb3JkIjsKKyAgICAgICAgICAgIGluZm8ubWFwcGVkTmFtZSA9ICJnbF9Qb2ludENvb3Jk
IjsKKyAgICAgICAgICAgIGluZm8udHlwZSA9IFNIX0ZMT0FUX1ZFQzI7CisgICAgICAgICAgICBp
bmZvLnNpemUgPSAxOworICAgICAgICAgICAgaW5mby5wcmVjaXNpb24gPSBFYnBNZWRpdW07ICAv
LyBVc2UgbWVkaXVtcCBhcyBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIuCisgICAgICAgICAgICBp
bmZvLnN0YXRpY1VzZSA9IHRydWU7CisJICAgIG1WYXJ5aW5ncy5wdXNoX2JhY2soaW5mbyk7Cisg
ICAgICAgICAgICBtUG9pbnRDb29yZEFkZGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm47CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmICh2YXIp
CisgICAgICAgIHZhci0+c3RhdGljVXNlID0gdHJ1ZTsKK30KKworYm9vbCBDb2xsZWN0VmFyaWFi
bGVzOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK3sKKyAg
ICBib29sIHZpc2l0Q2hpbGRyZW4gPSB0cnVlOworCisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgp
KQorICAgIHsKKyAgICBjYXNlIEVPcERlY2xhcmF0aW9uOiB7CisgICAgICAgIGNvbnN0IFRJbnRl
cm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOworICAgICAgICBUUXVh
bGlmaWVyIHF1YWxpZmllciA9IHNlcXVlbmNlLmZyb250KCktPmdldEFzVHlwZWQoKS0+Z2V0UXVh
bGlmaWVyKCk7CisgICAgICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlIHx8IHF1YWxp
ZmllciA9PSBFdnFVbmlmb3JtIHx8CisgICAgICAgICAgICBxdWFsaWZpZXIgPT0gRXZxVmFyeWlu
Z0luIHx8IHF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8CisgICAgICAgICAgICBxdWFsaWZp
ZXIgPT0gRXZxSW52YXJpYW50VmFyeWluZ0luIHx8IHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRW
YXJ5aW5nT3V0KQorICAgICAgICB7CisgICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYgaW5m
b0xpc3QgPSBxdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlID8gbUF0dHJpYnMgOgorICAgICAgICAg
ICAgICAgIChxdWFsaWZpZXIgPT0gRXZxVW5pZm9ybSA/IG1Vbmlmb3JtcyA6IG1WYXJ5aW5ncyk7
CisgICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgaSA9IHNl
cXVlbmNlLmJlZ2luKCk7CisgICAgICAgICAgICAgICAgIGkgIT0gc2VxdWVuY2UuZW5kKCk7ICsr
aSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBUSW50ZXJtU3ltYm9sKiB2
YXJpYWJsZSA9ICgqaSktPmdldEFzU3ltYm9sTm9kZSgpOworICAgICAgICAgICAgICAgIC8vIFRo
ZSBvbmx5IGNhc2UgaW4gd2hpY2ggdGhlIHNlcXVlbmNlIHdpbGwgbm90IGNvbnRhaW4gYQorICAg
ICAgICAgICAgICAgIC8vIFRJbnRlcm1TeW1ib2wgbm9kZSBpcyBpbml0aWFsaXphdGlvbi4gSXQg
d2lsbCBjb250YWluIGEKKyAgICAgICAgICAgICAgICAvLyBUSW50ZXJCaW5hcnkgbm9kZSBpbiB0
aGF0IGNhc2UuIFNpbmNlIGF0dHJpYnV0ZXMsIHVuaWZvcm1zLAorICAgICAgICAgICAgICAgIC8v
IGFuZCB2YXJ5aW5ncyBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgaW4gYSBzaGFkZXIsIHdlIG11c3Qg
aGF2ZQorICAgICAgICAgICAgICAgIC8vIG9ubHkgVEludGVybVN5bWJvbCBub2RlcyBpbiB0aGUg
c2VxdWVuY2UuCisgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhYmxlICE9IE5VTEwpOworICAg
ICAgICAgICAgICAgIFRTdHJpbmcgcHJvY2Vzc2VkU3ltYm9sOworICAgICAgICAgICAgICAgIGlm
IChtSGFzaEZ1bmN0aW9uID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZFN5
bWJvbCA9IHZhcmlhYmxlLT5nZXRTeW1ib2woKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIHByb2Nlc3NlZFN5bWJvbCA9IFRJbnRlcm1UcmF2ZXJzZXI6Omhhc2go
dmFyaWFibGUtPmdldE9yaWdpbmFsU3ltYm9sKCksIG1IYXNoRnVuY3Rpb24pOworICAgICAgICAg
ICAgICAgIGdldFZhcmlhYmxlSW5mbyh2YXJpYWJsZS0+Z2V0VHlwZSgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0T3JpZ2luYWxTeW1ib2woKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkU3ltYm9sLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbmZvTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbUhhc2hGdW5jdGlvbik7CisgICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZh
bHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gdmlzaXRDaGlsZHJlbjsKK30K
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVmFyaWFibGVJbmZvLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9WYXJpYWJsZUluZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNzIxNmNkMTQyOGYyZGNk
MjBiMWNjZjBmNmYwNTg5ZTllYjk4ZTQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVJbmZvLmgKQEAgLTAs
MCArMSw1MiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9WQVJJQUJM
RV9JTkZPX0hfCisjZGVmaW5lIENPTVBJTEVSX1ZBUklBQkxFX0lORk9fSF8KKworI2luY2x1ZGUg
IkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50
ZXJtZWRpYXRlLmgiCisKKy8vIFByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IGEgdmFyaWFibGUu
CisvLyBJdCBpcyBjdXJyZW50bHkgYmVpbmcgdXNlZCB0byBzdG9yZSBpbmZvIGFib3V0IGFjdGl2
ZSBhdHRyaWJzIGFuZCB1bmlmb3Jtcy4KK3N0cnVjdCBUVmFyaWFibGVJbmZvIHsKKyAgICBUVmFy
aWFibGVJbmZvKFNoRGF0YVR5cGUgdHlwZSwgaW50IHNpemUpOworICAgIFRWYXJpYWJsZUluZm8o
KTsKKworICAgIFRQZXJzaXN0U3RyaW5nIG5hbWU7CisgICAgVFBlcnNpc3RTdHJpbmcgbWFwcGVk
TmFtZTsKKyAgICBTaERhdGFUeXBlIHR5cGU7CisgICAgaW50IHNpemU7CisgICAgYm9vbCBpc0Fy
cmF5OworICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOworICAgIGJvb2wgc3RhdGljVXNlOworfTsK
K3R5cGVkZWYgc3RkOjp2ZWN0b3I8VFZhcmlhYmxlSW5mbz4gVFZhcmlhYmxlSW5mb0xpc3Q7CisK
Ky8vIFRyYXZlcnNlcyBpbnRlcm1lZGlhdGUgdHJlZSB0byBjb2xsZWN0IGFsbCBhdHRyaWJ1dGVz
LCB1bmlmb3JtcywgdmFyeWluZ3MuCitjbGFzcyBDb2xsZWN0VmFyaWFibGVzIDogcHVibGljIFRJ
bnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgorICAgIENvbGxlY3RWYXJpYWJsZXMoVFZhcmlhYmxl
SW5mb0xpc3QmIGF0dHJpYnMsCisgICAgICAgICAgICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlz
dCYgdW5pZm9ybXMsCisgICAgICAgICAgICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYgdmFy
eWluZ3MsCisgICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlv
bik7CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOworICAg
IHZpcnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOwor
Citwcml2YXRlOgorICAgIFRWYXJpYWJsZUluZm9MaXN0JiBtQXR0cmliczsKKyAgICBUVmFyaWFi
bGVJbmZvTGlzdCYgbVVuaWZvcm1zOworICAgIFRWYXJpYWJsZUluZm9MaXN0JiBtVmFyeWluZ3M7
CisKKyAgICBib29sIG1Qb2ludENvb3JkQWRkZWQ7CisgICAgYm9vbCBtRnJvbnRGYWNpbmdBZGRl
ZDsKKyAgICBib29sIG1GcmFnQ29vcmRBZGRlZDsKKworICAgIFNoSGFzaEZ1bmN0aW9uNjQgbUhh
c2hGdW5jdGlvbjsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVkFSSUFCTEVfSU5GT19IXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVmFyaWFibGVQYWNrZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVmFyaWFibGVQYWNrZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2MzRkODYzMzc3
YzlmOTcxYTUyZTcyNzFmZTk3OGVlZGMzNWViMWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZVBhY2tlci5j
cHAKQEAgLTAsMCArMSwyOTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9WYXJpYWJsZVBhY2tlci5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU2hIYW5kbGUuaCIKKworbmFtZXNwYWNlIHsK
K2ludCBHZXRTb3J0T3JkZXIoU2hEYXRhVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkg
eworICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDQ6CisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgY2FzZSBTSF9GTE9BVF9NQVQyOgorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAg
IGNhc2UgU0hfRkxPQVRfVkVDNDoKKyAgICAgICAgY2FzZSBTSF9JTlRfVkVDNDoKKyAgICAgICAg
Y2FzZSBTSF9CT09MX1ZFQzQ6CisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgY2FzZSBT
SF9GTE9BVF9NQVQzOgorICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIGNhc2UgU0hfRkxP
QVRfVkVDMzoKKyAgICAgICAgY2FzZSBTSF9JTlRfVkVDMzoKKyAgICAgICAgY2FzZSBTSF9CT09M
X1ZFQzM6CisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUMy
OgorICAgICAgICBjYXNlIFNIX0lOVF9WRUMyOgorICAgICAgICBjYXNlIFNIX0JPT0xfVkVDMjoK
KyAgICAgICAgICAgIHJldHVybiA1OworICAgICAgICBjYXNlIFNIX0ZMT0FUOgorICAgICAgICBj
YXNlIFNIX0lOVDoKKyAgICAgICAgY2FzZSBTSF9CT09MOgorICAgICAgICBjYXNlIFNIX1NBTVBM
RVJfMkQ6CisgICAgICAgIGNhc2UgU0hfU0FNUExFUl9DVUJFOgorICAgICAgICBjYXNlIFNIX1NB
TVBMRVJfRVhURVJOQUxfT0VTOgorICAgICAgICBjYXNlIFNIX1NBTVBMRVJfMkRfUkVDVF9BUkI6
CisgICAgICAgICAgICByZXR1cm4gNjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFT
U0VSVChmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gNzsKKyAgICB9Cit9Cit9ICAgIC8vIG5h
bWVzcGFjZQorCitpbnQgVmFyaWFibGVQYWNrZXI6OkdldE51bUNvbXBvbmVudHNQZXJSb3coU2hE
YXRhVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFNIX0ZM
T0FUX01BVDQ6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMjoKKyAgICAgICAgY2FzZSBTSF9G
TE9BVF9WRUM0OgorICAgICAgICBjYXNlIFNIX0lOVF9WRUM0OgorICAgICAgICBjYXNlIFNIX0JP
T0xfVkVDNDoKKyAgICAgICAgICAgIHJldHVybiA0OworICAgICAgICBjYXNlIFNIX0ZMT0FUX01B
VDM6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMzoKKyAgICAgICAgY2FzZSBTSF9JTlRfVkVD
MzoKKyAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzM6CisgICAgICAgICAgICByZXR1cm4gMzsKKyAg
ICAgICAgY2FzZSBTSF9GTE9BVF9WRUMyOgorICAgICAgICBjYXNlIFNIX0lOVF9WRUMyOgorICAg
ICAgICBjYXNlIFNIX0JPT0xfVkVDMjoKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICBj
YXNlIFNIX0ZMT0FUOgorICAgICAgICBjYXNlIFNIX0lOVDoKKyAgICAgICAgY2FzZSBTSF9CT09M
OgorICAgICAgICBjYXNlIFNIX1NBTVBMRVJfMkQ6CisgICAgICAgIGNhc2UgU0hfU0FNUExFUl9D
VUJFOgorICAgICAgICBjYXNlIFNIX1NBTVBMRVJfRVhURVJOQUxfT0VTOgorICAgICAgICBjYXNl
IFNIX1NBTVBMRVJfMkRfUkVDVF9BUkI6CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4g
NTsKKyAgICB9Cit9CisKK2ludCBWYXJpYWJsZVBhY2tlcjo6R2V0TnVtUm93cyhTaERhdGFUeXBl
IHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFU
NDoKKyAgICAgICAgICAgIHJldHVybiA0OworICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDM6Cisg
ICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQyOgorICAgICAg
ICAgICAgcmV0dXJuIDI7CisgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDNDoKKyAgICAgICAgY2Fz
ZSBTSF9JTlRfVkVDNDoKKyAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzQ6CisgICAgICAgIGNhc2Ug
U0hfRkxPQVRfVkVDMzoKKyAgICAgICAgY2FzZSBTSF9JTlRfVkVDMzoKKyAgICAgICAgY2FzZSBT
SF9CT09MX1ZFQzM6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMjoKKyAgICAgICAgY2FzZSBT
SF9JTlRfVkVDMjoKKyAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzI6CisgICAgICAgIGNhc2UgU0hf
RkxPQVQ6CisgICAgICAgIGNhc2UgU0hfSU5UOgorICAgICAgICBjYXNlIFNIX0JPT0w6CisgICAg
ICAgIGNhc2UgU0hfU0FNUExFUl8yRDoKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSX0NVQkU6Cisg
ICAgICAgIGNhc2UgU0hfU0FNUExFUl9FWFRFUk5BTF9PRVM6CisgICAgICAgIGNhc2UgU0hfU0FN
UExFUl8yRF9SRUNUX0FSQjoKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybiAxMDAwMDA7
CisgICAgfQorfQorCitzdHJ1Y3QgVFZhcmlhYmxlSW5mb0NvbXBhcmVyIHsKKyAgICBib29sIG9w
ZXJhdG9yKCkoY29uc3QgVFZhcmlhYmxlSW5mbyYgbGhzLCBjb25zdCBUVmFyaWFibGVJbmZvJiBy
aHMpIGNvbnN0CisgICAgeworICAgICAgICBpbnQgbGhzU29ydE9yZGVyID0gR2V0U29ydE9yZGVy
KGxocy50eXBlKTsKKyAgICAgICAgaW50IHJoc1NvcnRPcmRlciA9IEdldFNvcnRPcmRlcihyaHMu
dHlwZSk7CisgICAgICAgIGlmIChsaHNTb3J0T3JkZXIgIT0gcmhzU29ydE9yZGVyKSB7CisgICAg
ICAgICAgICByZXR1cm4gbGhzU29ydE9yZGVyIDwgcmhzU29ydE9yZGVyOworICAgICAgICB9Cisg
ICAgICAgIC8vIFNvcnQgYnkgbGFyZ2VzdCBmaXJzdC4KKyAgICAgICAgcmV0dXJuIGxocy5zaXpl
ID4gcmhzLnNpemU7CisgICAgfQorfTsKKwordW5zaWduZWQgVmFyaWFibGVQYWNrZXI6Om1ha2VD
b2x1bW5GbGFncyhpbnQgY29sdW1uLCBpbnQgbnVtQ29tcG9uZW50c1BlclJvdykKK3sKKyAgICBy
ZXR1cm4gKChrQ29sdW1uTWFzayA8PCAoa051bUNvbHVtbnMgLSBudW1Db21wb25lbnRzUGVyUm93
KSkgJgorICAgICAgICAgICAgICAgICAgICBrQ29sdW1uTWFzaykgPj4gY29sdW1uOworfQorCit2
b2lkIFZhcmlhYmxlUGFja2VyOjpmaWxsQ29sdW1ucyhpbnQgdG9wUm93LCBpbnQgbnVtUm93cywg
aW50IGNvbHVtbiwgaW50IG51bUNvbXBvbmVudHNQZXJSb3cpCit7CisgICAgdW5zaWduZWQgY29s
dW1uRmxhZ3MgPSBtYWtlQ29sdW1uRmxhZ3MoY29sdW1uLCBudW1Db21wb25lbnRzUGVyUm93KTsK
KyAgICBmb3IgKGludCByID0gMDsgciA8IG51bVJvd3M7ICsrcikgeworICAgICAgICBpbnQgcm93
ID0gdG9wUm93ICsgcjsKKyAgICAgICAgQVNTRVJUKChyb3dzX1tyb3ddICYgY29sdW1uRmxhZ3Mp
ID09IDApOworICAgICAgICByb3dzX1tyb3ddIHw9IGNvbHVtbkZsYWdzOworICAgIH0KK30KKwor
Ym9vbCBWYXJpYWJsZVBhY2tlcjo6c2VhcmNoQ29sdW1uKGludCBjb2x1bW4sIGludCBudW1Sb3dz
LCBpbnQqIGRlc3RSb3csIGludCogZGVzdFNpemUpCit7CisgICAgQVNTRVJUKGRlc3RSb3cpOwor
CisgICAgZm9yICg7IHRvcE5vbkZ1bGxSb3dfIDwgbWF4Um93c18gJiYgcm93c19bdG9wTm9uRnVs
bFJvd19dID09IGtDb2x1bW5NYXNrOworICAgICAgICAgKyt0b3BOb25GdWxsUm93XykgeworICAg
IH0KKworICAgIGZvciAoOyBib3R0b21Ob25GdWxsUm93XyA+PSAwICYmIHJvd3NfW2JvdHRvbU5v
bkZ1bGxSb3dfXSA9PSBrQ29sdW1uTWFzazsKKyAgICAgICAgIC0tYm90dG9tTm9uRnVsbFJvd18p
IHsKKyAgICB9CisKKyAgICBpZiAoYm90dG9tTm9uRnVsbFJvd18gLSB0b3BOb25GdWxsUm93XyAr
IDEgPCBudW1Sb3dzKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB1bnNp
Z25lZCBjb2x1bW5GbGFncyA9IG1ha2VDb2x1bW5GbGFncyhjb2x1bW4sIDEpOworICAgIGludCB0
b3BHb29kUm93ID0gMDsKKyAgICBpbnQgc21hbGxlc3RHb29kVG9wID0gLTE7CisgICAgaW50IHNt
YWxsZXN0R29vZFNpemUgPSBtYXhSb3dzXyArIDE7CisgICAgaW50IGJvdHRvbVJvdyA9IGJvdHRv
bU5vbkZ1bGxSb3dfICsgMTsKKyAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgZm9yIChpbnQg
cm93ID0gdG9wTm9uRnVsbFJvd187IHJvdyA8PSBib3R0b21Sb3c7ICsrcm93KSB7CisgICAgICAg
IGJvb2wgcm93RW1wdHkgPSByb3cgPCBib3R0b21Sb3cgPyAoKHJvd3NfW3Jvd10gJiBjb2x1bW5G
bGFncykgPT0gMCkgOiBmYWxzZTsKKyAgICAgICAgaWYgKHJvd0VtcHR5KSB7CisgICAgICAgICAg
ICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICAgICAgdG9wR29vZFJvdyA9IHJvdzsKKyAgICAg
ICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBpZiAoZm91bmQpIHsKKyAgICAgICAgICAgICAgICBpbnQgc2l6ZSA9IHJv
dyAtIHRvcEdvb2RSb3c7CisgICAgICAgICAgICAgICAgaWYgKHNpemUgPj0gbnVtUm93cyAmJiBz
aXplIDwgc21hbGxlc3RHb29kU2l6ZSkgeworICAgICAgICAgICAgICAgICAgICBzbWFsbGVzdEdv
b2RTaXplID0gc2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgc21hbGxlc3RHb29kVG9wID0gdG9w
R29vZFJvdzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBm
b3VuZCA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIGlmIChzbWFsbGVzdEdvb2RUb3Ag
PCAwKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAqZGVzdFJvdyA9IHNt
YWxsZXN0R29vZFRvcDsKKyAgICBpZiAoZGVzdFNpemUpIHsKKyAgICAgICAgKmRlc3RTaXplID0g
c21hbGxlc3RHb29kU2l6ZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVmFy
aWFibGVQYWNrZXI6OkNoZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cyhpbnQgbWF4VmVj
dG9ycywgY29uc3QgVFZhcmlhYmxlSW5mb0xpc3QmIGluX3ZhcmlhYmxlcykKK3sKKyAgICBBU1NF
UlQobWF4VmVjdG9ycyA+IDApOworICAgIG1heFJvd3NfID0gbWF4VmVjdG9yczsKKyAgICB0b3BO
b25GdWxsUm93XyA9IDA7CisgICAgYm90dG9tTm9uRnVsbFJvd18gPSBtYXhSb3dzXyAtIDE7Cisg
ICAgVFZhcmlhYmxlSW5mb0xpc3QgdmFyaWFibGVzKGluX3ZhcmlhYmxlcyk7CisKKyAgICAvLyBB
cyBwZXIgR0xTTCAxLjAxNyBBcHBlbmRpeCBBLCBTZWN0aW9uIDcgdmFyaWFibGVzIGFyZSBwYWNr
ZWQgaW4gc3BlY2lmaWMKKyAgICAvLyBvcmRlciBieSB0eXBlLCB0aGVuIGJ5IHNpemUgb2YgYXJy
YXksIGxhcmdlc3QgZmlyc3QuCisgICAgc3RkOjpzb3J0KHZhcmlhYmxlcy5iZWdpbigpLCB2YXJp
YWJsZXMuZW5kKCksIFRWYXJpYWJsZUluZm9Db21wYXJlcigpKTsKKyAgICByb3dzXy5jbGVhcigp
OworICAgIHJvd3NfLnJlc2l6ZShtYXhWZWN0b3JzLCAwKTsKKworICAgIC8vIFBhY2tzIHRoZSA0
IGNvbHVtbiB2YXJpYWJsZXMuCisgICAgc2l6ZV90IGlpID0gMDsKKyAgICBmb3IgKDsgaWkgPCB2
YXJpYWJsZXMuc2l6ZSgpOyArK2lpKSB7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZUluZm8mIHZh
cmlhYmxlID0gdmFyaWFibGVzW2lpXTsKKyAgICAgICAgaWYgKEdldE51bUNvbXBvbmVudHNQZXJS
b3codmFyaWFibGUudHlwZSkgIT0gNCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgdG9wTm9uRnVsbFJvd18gKz0gR2V0TnVtUm93cyh2YXJpYWJsZS50eXBlKSAqIHZh
cmlhYmxlLnNpemU7CisgICAgfQorCisgICAgaWYgKHRvcE5vbkZ1bGxSb3dfID4gbWF4Um93c18p
IHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFBhY2tzIHRoZSAzIGNv
bHVtbiB2YXJpYWJsZXMuCisgICAgaW50IG51bTNDb2x1bW5Sb3dzID0gMDsKKyAgICBmb3IgKDsg
aWkgPCB2YXJpYWJsZXMuc2l6ZSgpOyArK2lpKSB7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZUlu
Zm8mIHZhcmlhYmxlID0gdmFyaWFibGVzW2lpXTsKKyAgICAgICAgaWYgKEdldE51bUNvbXBvbmVu
dHNQZXJSb3codmFyaWFibGUudHlwZSkgIT0gMykgeworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgbnVtM0NvbHVtblJvd3MgKz0gR2V0TnVtUm93cyh2YXJpYWJsZS50eXBl
KSAqIHZhcmlhYmxlLnNpemU7CisgICAgfQorCisgICAgaWYgKHRvcE5vbkZ1bGxSb3dfICsgbnVt
M0NvbHVtblJvd3MgPiBtYXhSb3dzXykgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgZmlsbENvbHVtbnModG9wTm9uRnVsbFJvd18sIG51bTNDb2x1bW5Sb3dzLCAwLCAzKTsK
KworICAgIC8vIFBhY2tzIHRoZSAyIGNvbHVtbiB2YXJpYWJsZXMuCisgICAgaW50IHRvcDJDb2x1
bW5Sb3cgPSB0b3BOb25GdWxsUm93XyArIG51bTNDb2x1bW5Sb3dzOworICAgIGludCB0d29Db2x1
bW5Sb3dzQXZhaWxhYmxlID0gbWF4Um93c18gLSB0b3AyQ29sdW1uUm93OworICAgIGludCByb3dz
QXZhaWxhYmxlSW5Db2x1bW5zMDEgPSB0d29Db2x1bW5Sb3dzQXZhaWxhYmxlOworICAgIGludCBy
b3dzQXZhaWxhYmxlSW5Db2x1bW5zMjMgPSB0d29Db2x1bW5Sb3dzQXZhaWxhYmxlOworICAgIGZv
ciAoOyBpaSA8IHZhcmlhYmxlcy5zaXplKCk7ICsraWkpIHsKKyAgICAgICAgY29uc3QgVFZhcmlh
YmxlSW5mbyYgdmFyaWFibGUgPSB2YXJpYWJsZXNbaWldOworICAgICAgICBpZiAoR2V0TnVtQ29t
cG9uZW50c1BlclJvdyh2YXJpYWJsZS50eXBlKSAhPSAyKSB7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBpbnQgbnVtUm93cyA9IEdldE51bVJvd3ModmFyaWFibGUudHlw
ZSkgKiB2YXJpYWJsZS5zaXplOworICAgICAgICBpZiAobnVtUm93cyA8PSByb3dzQXZhaWxhYmxl
SW5Db2x1bW5zMDEpIHsKKyAgICAgICAgICAgIHJvd3NBdmFpbGFibGVJbkNvbHVtbnMwMSAtPSBu
dW1Sb3dzOworICAgICAgICB9IGVsc2UgaWYgKG51bVJvd3MgPD0gcm93c0F2YWlsYWJsZUluQ29s
dW1uczIzKSB7CisgICAgICAgICAgICByb3dzQXZhaWxhYmxlSW5Db2x1bW5zMjMgLT0gbnVtUm93
czsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGludCBudW1Sb3dzVXNlZEluQ29sdW1uczAxID0KKyAgICAgICAgdHdv
Q29sdW1uUm93c0F2YWlsYWJsZSAtIHJvd3NBdmFpbGFibGVJbkNvbHVtbnMwMTsKKyAgICBpbnQg
bnVtUm93c1VzZWRJbkNvbHVtbnMyMyA9CisgICAgICAgIHR3b0NvbHVtblJvd3NBdmFpbGFibGUg
LSByb3dzQXZhaWxhYmxlSW5Db2x1bW5zMjM7CisgICAgZmlsbENvbHVtbnModG9wMkNvbHVtblJv
dywgbnVtUm93c1VzZWRJbkNvbHVtbnMwMSwgMCwgMik7CisgICAgZmlsbENvbHVtbnMobWF4Um93
c18gLSBudW1Sb3dzVXNlZEluQ29sdW1uczIzLCBudW1Sb3dzVXNlZEluQ29sdW1uczIzLAorICAg
ICAgICAgICAgICAgIDIsIDIpOworCisgICAgLy8gUGFja3MgdGhlIDEgY29sdW1uIHZhcmlhYmxl
cy4KKyAgICBmb3IgKDsgaWkgPCB2YXJpYWJsZXMuc2l6ZSgpOyArK2lpKSB7CisgICAgICAgIGNv
bnN0IFRWYXJpYWJsZUluZm8mIHZhcmlhYmxlID0gdmFyaWFibGVzW2lpXTsKKyAgICAgICAgQVNT
RVJUKDEgPT0gR2V0TnVtQ29tcG9uZW50c1BlclJvdyh2YXJpYWJsZS50eXBlKSk7CisgICAgICAg
IGludCBudW1Sb3dzID0gR2V0TnVtUm93cyh2YXJpYWJsZS50eXBlKSAqIHZhcmlhYmxlLnNpemU7
CisgICAgICAgIGludCBzbWFsbGVzdENvbHVtbiA9IC0xOworICAgICAgICBpbnQgc21hbGxlc3RT
aXplID0gbWF4Um93c18gKyAxOworICAgICAgICBpbnQgdG9wUm93ID0gLTE7CisgICAgICAgIGZv
ciAoaW50IGNvbHVtbiA9IDA7IGNvbHVtbiA8IGtOdW1Db2x1bW5zOyArK2NvbHVtbikgeworICAg
ICAgICAgICAgaW50IHJvdyA9IDA7CisgICAgICAgICAgICBpbnQgc2l6ZSA9IDA7CisgICAgICAg
ICAgICBpZiAoc2VhcmNoQ29sdW1uKGNvbHVtbiwgbnVtUm93cywgJnJvdywgJnNpemUpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHNpemUgPCBzbWFsbGVzdFNpemUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgc21hbGxlc3RTaXplID0gc2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgc21hbGxlc3RD
b2x1bW4gPSBjb2x1bW47CisgICAgICAgICAgICAgICAgICAgIHRvcFJvdyA9IHJvdzsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoc21h
bGxlc3RDb2x1bW4gPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KworICAgICAgICBmaWxsQ29sdW1ucyh0b3BSb3csIG51bVJvd3MsIHNtYWxsZXN0Q29sdW1uLCAx
KTsKKyAgICB9CisKKyAgICBBU1NFUlQodmFyaWFibGVzLnNpemUoKSA9PSBpaSk7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlUGFja2VyLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZVBhY2tlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmZkNjA5MDgyN2NkOGUxOTU5MzhjZTQ1OTVjZjkzNzFlNzRkMTZhNTcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9WYXJpYWJsZVBhY2tlci5oCkBAIC0wLDAgKzEsNDEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
KyNpZm5kZWYgX1ZBUklBQkxFUEFDS0VSX0lOQ0xVREVEXworI2RlZmluZSBfVkFSSUFCTEVQQUNL
RVJfSU5DTFVERURfCisKKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9TaEhhbmRsZS5oIgorCitjbGFzcyBWYXJpYWJsZVBhY2tlciB7CisgcHVibGljOgor
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGFzc2VkIGluIHZhcmlhYmxlcyBwYWNrIGluIG1h
eFZlY3RvcnMgZm9sbG93aW5nCisgICAgLy8gdGhlIHBhY2tpbmcgcnVsZXMgZnJvbSB0aGUgR0xT
TCAxLjAxNyBzcGVjLCBBcHBlbmRpeCBBLCBzZWN0aW9uIDcuCisgICAgYm9vbCBDaGVja1Zhcmlh
Ymxlc1dpdGhpblBhY2tpbmdMaW1pdHMoCisgICAgICAgIGludCBtYXhWZWN0b3JzLAorICAgICAg
ICBjb25zdCBUVmFyaWFibGVJbmZvTGlzdCYgaW5fdmFyaWFibGVzKTsKKworICAgIC8vIEdldHMg
aG93IG1hbnkgY29tcG9uZW50cyBpbiBhIHJvdyBhIGRhdGEgdHlwZSB0YWtlcy4KKyAgICBzdGF0
aWMgaW50IEdldE51bUNvbXBvbmVudHNQZXJSb3coU2hEYXRhVHlwZSB0eXBlKTsKKworICAgIC8v
IEdldHMgaG93IG1hbnkgcm93cyBhIGRhdGEgdHlwZSB0YWtlcy4KKyAgICBzdGF0aWMgaW50IEdl
dE51bVJvd3MoU2hEYXRhVHlwZSB0eXBlKTsKKworIHByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0
IGludCBrTnVtQ29sdW1ucyA9IDQ7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGtDb2x1bW5N
YXNrID0gKDEgPDwga051bUNvbHVtbnMpIC0gMTsKKworICAgIHVuc2lnbmVkIG1ha2VDb2x1bW5G
bGFncyhpbnQgY29sdW1uLCBpbnQgbnVtQ29tcG9uZW50c1BlclJvdyk7CisgICAgdm9pZCBmaWxs
Q29sdW1ucyhpbnQgdG9wUm93LCBpbnQgbnVtUm93cywgaW50IGNvbHVtbiwgaW50IG51bUNvbXBv
bmVudHNQZXJSb3cpOworICAgIGJvb2wgc2VhcmNoQ29sdW1uKGludCBjb2x1bW4sIGludCBudW1S
b3dzLCBpbnQqIGRlc3RSb3csIGludCogZGVzdFNpemUpOworCisgICAgaW50IHRvcE5vbkZ1bGxS
b3dfOworICAgIGludCBib3R0b21Ob25GdWxsUm93XzsKKyAgICBpbnQgbWF4Um93c187CisgICAg
c3RkOjp2ZWN0b3I8dW5zaWduZWQ+IHJvd3NfOworfTsKKworI2VuZGlmIC8vIF9WQVJJQUJMRVBB
Q0tFUl9JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1ZlcnNpb25HTFNMLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZlcnNpb25HTFNMLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
ZDExZjk5ZWI4OWM2YTU1YTA5MTVhZjA4ODMwNzZhZDZkZGU0NzM3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmVyc2lv
bkdMU0wuY3BwCkBAIC0wLDAgKzEsMTQwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9WZXJzaW9uR0xTTC5oIgorCitzdGF0aWMgY29uc3QgaW50
IEdMU0xfVkVSU0lPTl8xMTAgPSAxMTA7CitzdGF0aWMgY29uc3QgaW50IEdMU0xfVkVSU0lPTl8x
MjAgPSAxMjA7CisKKy8vIFdlIG5lZWQgdG8gc2NhbiBmb3IgdGhlIGZvbGxvd2luZzoKKy8vIDEu
ICJpbnZhcmlhbnQiIGtleXdvcmQ6IFRoaXMgY2FuIG9jY3VyIGluIGJvdGggLSB2ZXJ0ZXggYW5k
IGZyYWdtZW50IHNoYWRlcnMKKy8vICAgIGJ1dCBvbmx5IGF0IHRoZSBnbG9iYWwgc2NvcGUuCisv
LyAyLiAiZ2xfUG9pbnRDb29yZCIgYnVpbHQtaW4gdmFyaWFibGU6IFRoaXMgY2FuIG9ubHkgb2Nj
dXIgaW4gZnJhZ21lbnQgc2hhZGVyCisvLyAgICBidXQgaW5zaWRlIGFueSBzY29wZS4KKy8vIDMu
IENhbGwgdG8gYSBtYXRyaXggY29uc3RydWN0b3Igd2l0aCBhbm90aGVyIG1hdHJpeCBhcyBhcmd1
bWVudC4KKy8vICAgIChUaGVzZSBjb25zdHJ1Y3RvcnMgd2VyZSByZXNlcnZlZCBpbiBHTFNMIHZl
cnNpb24gMS4xMC4pCisvLyA0LiBBcnJheXMgYXMgIm91dCIgZnVuY3Rpb24gcGFyYW1ldGVycy4K
Ky8vICAgIEdMU0wgc3BlYyBzZWN0aW9uIDYuMS4xOiAiV2hlbiBjYWxsaW5nIGEgZnVuY3Rpb24s
IGV4cHJlc3Npb25zIHRoYXQgZG8KKy8vICAgIG5vdCBldmFsdWF0ZSB0byBsLXZhbHVlcyBjYW5u
b3QgYmUgcGFzc2VkIHRvIHBhcmFtZXRlcnMgZGVjbGFyZWQgYXMKKy8vICAgIG91dCBvciBpbm91
dC4iCisvLyAgICBHTFNMIDEuMSBzZWN0aW9uIDUuODogIk90aGVyIGJpbmFyeSBvciB1bmFyeSBl
eHByZXNzaW9ucywKKy8vICAgIG5vbi1kZXJlZmVyZW5jZWQgYXJyYXlzLCBmdW5jdGlvbiBuYW1l
cywgc3dpenpsZXMgd2l0aCByZXBlYXRlZCBmaWVsZHMsCisvLyAgICBhbmQgY29uc3RhbnRzIGNh
bm5vdCBiZSBsLXZhbHVlcy4iCisvLyAgICBHTFNMIDEuMiByZWxheGVkIHRoZSByZXN0cmljdGlv
biBvbiBhcnJheXMsIHNlY3Rpb24gNS44OiAiVmFyaWFibGVzIHRoYXQKKy8vICAgIGFyZSBidWls
dC1pbiB0eXBlcywgZW50aXJlIHN0cnVjdHVyZXMgb3IgYXJyYXlzLi4uIGFyZSBhbGwgbC12YWx1
ZXMuIgorLy8KKy8vIFRPRE8oYWxva3ApOiBUaGUgZm9sbG93aW5nIHR3byBjYXNlcyBvZiBpbnZh
cmlhbnQgZGVjYWxhcmF0aW9uIGdldCBsb3N0CisvLyBkdXJpbmcgcGFyc2luZyAtIHRoZXkgZG8g
bm90IGdldCBjYXJyaWVkIG92ZXIgdG8gdGhlIGludGVybWVkaWF0ZSB0cmVlLgorLy8gSGFuZGxl
IHRoZXNlIGNhc2VzOgorLy8gMS4gV2hlbiBhIHByYWdtYSBpcyB1c2VkIHRvIGZvcmNlIGFsbCBv
dXRwdXQgdmFyaWFibGVzIHRvIGJlIGludmFyaWFudDoKKy8vICAgIC0gI3ByYWdtYSBTVERHTCBp
bnZhcmlhbnQoYWxsKQorLy8gMi4gV2hlbiBhIHByZXZpb3VzbHkgZGVjYWxhcmVkIG9yIGJ1aWx0
LWluIHZhcmlhYmxlIGlzIG1hcmtlZCBpbnZhcmlhbnQ6CisvLyAgICAtIGludmFyaWFudCBnbF9Q
b3NpdGlvbjsKKy8vICAgIC0gdmFyeWluZyB2ZWMzIGNvbG9yOyBpbnZhcmlhbnQgY29sb3I7Cisv
LworVFZlcnNpb25HTFNMOjpUVmVyc2lvbkdMU0woU2hTaGFkZXJUeXBlIHR5cGUpCisgICAgOiBt
U2hhZGVyVHlwZSh0eXBlKSwKKyAgICAgIG1WZXJzaW9uKEdMU0xfVkVSU0lPTl8xMTApCit7Cit9
CisKK3ZvaWQgVFZlcnNpb25HTFNMOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQor
eworICAgIGlmIChub2RlLT5nZXRTeW1ib2woKSA9PSAiZ2xfUG9pbnRDb29yZCIpCisgICAgICAg
IHVwZGF0ZVZlcnNpb24oR0xTTF9WRVJTSU9OXzEyMCk7Cit9CisKK3ZvaWQgVFZlcnNpb25HTFNM
Ojp2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qKQoreworfQorCitib29s
IFRWZXJzaW9uR0xTTDo6dmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkqKQoreworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIFRWZXJzaW9uR0xTTDo6dmlzaXRVbmFyeShWaXNpdCwg
VEludGVybVVuYXJ5KikKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUVmVyc2lvbkdM
U0w6OnZpc2l0U2VsZWN0aW9uKFZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKikKK3sKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBUVmVyc2lvbkdMU0w6OnZpc2l0QWdncmVnYXRlKFZpc2l0LCBU
SW50ZXJtQWdncmVnYXRlKiBub2RlKQoreworICAgIGJvb2wgdmlzaXRDaGlsZHJlbiA9IHRydWU7
CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpIHsKKyAgICAgIGNhc2UgRU9wU2VxdWVuY2U6
CisgICAgICAgIC8vIFdlIG5lZWQgdG8gdmlzaXQgc2VxdWVuY2UgY2hpbGRyZW4gdG8gZ2V0IHRv
IGdsb2JhbCBvciBpbm5lciBzY29wZS4KKyAgICAgICAgdmlzaXRDaGlsZHJlbiA9IHRydWU7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BEZWNsYXJhdGlvbjogeworICAgICAgICBjb25z
dCBUSW50ZXJtU2VxdWVuY2UmIHNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAg
ICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBzZXF1ZW5jZS5mcm9udCgpLT5nZXRBc1R5cGVkKCkt
PmdldFF1YWxpZmllcigpOworICAgICAgICBpZiAoKHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRW
YXJ5aW5nSW4pIHx8CisgICAgICAgICAgICAocXVhbGlmaWVyID09IEV2cUludmFyaWFudFZhcnlp
bmdPdXQpKSB7CisgICAgICAgICAgICB1cGRhdGVWZXJzaW9uKEdMU0xfVkVSU0lPTl8xMjApOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBFT3BQYXJhbWV0
ZXJzOiB7CisgICAgICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgcGFyYW1zID0gbm9kZS0+Z2V0
U2VxdWVuY2UoKTsKKyAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSBwYXJhbXMuYmVnaW4oKTsKKyAgICAgICAgICAgICBpdGVyICE9IHBhcmFtcy5lbmQo
KTsgKytpdGVyKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUSW50ZXJtVHlwZWQqIHBh
cmFtID0gKCppdGVyKS0+Z2V0QXNUeXBlZCgpOworICAgICAgICAgICAgaWYgKHBhcmFtLT5pc0Fy
cmF5KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVFF1YWxpZmllciBxdWFsaWZp
ZXIgPSBwYXJhbS0+Z2V0UXVhbGlmaWVyKCk7CisgICAgICAgICAgICAgICAgaWYgKChxdWFsaWZp
ZXIgPT0gRXZxT3V0KSB8fCAocXVhbGlmaWVyID09ICBFdnFJbk91dCkpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICB1cGRhdGVWZXJzaW9uKEdMU0xfVkVSU0lPTl8xMjAp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gRnVsbHkgcHJvY2Vzc2VkLiBObyBuZWVkIHRv
IHZpc2l0IGNoaWxkcmVuLgorICAgICAgICB2aXNpdENoaWxkcmVuID0gZmFsc2U7CisgICAgICAg
IGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQyOgorICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RNYXQzOgorICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQ0OiB7CisgICAg
ICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgp
OworICAgICAgICBpZiAoc2VxdWVuY2Uuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgICBUSW50ZXJt
VHlwZWQqIHR5cGVkID0gc2VxdWVuY2UuZnJvbnQoKS0+Z2V0QXNUeXBlZCgpOworICAgICAgICAg
IGlmICh0eXBlZCAmJiB0eXBlZC0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgdXBkYXRlVmVy
c2lvbihHTFNMX1ZFUlNJT05fMTIwKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgICB9CisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAgIHJl
dHVybiB2aXNpdENoaWxkcmVuOworfQorCitib29sIFRWZXJzaW9uR0xTTDo6dmlzaXRMb29wKFZp
c2l0LCBUSW50ZXJtTG9vcCopCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVFZlcnNp
b25HTFNMOjp2aXNpdEJyYW5jaChWaXNpdCwgVEludGVybUJyYW5jaCopCit7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgVFZlcnNpb25HTFNMOjp1cGRhdGVWZXJzaW9uKGludCB2ZXJzaW9u
KQoreworICAgIG1WZXJzaW9uID0gc3RkOjptYXgodmVyc2lvbiwgbVZlcnNpb24pOworfQorCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9WZXJzaW9uR0xTTC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVmVyc2lvbkdMU0wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMzEwMDY2MTcxMTQ1N2ZiNjk4ZDAx
NDE2MTk5YTZkZjJmMGFhZjBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmVyc2lvbkdMU0wuaApAQCAtMCwwICsxLDU2
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1ZFUlNJT05HTFNMX0hf
CisjZGVmaW5lIENPTVBJTEVSX1ZFUlNJT05HTFNMX0hfCisKKyNpbmNsdWRlICJHTFNMQU5HL1No
YWRlckxhbmcuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5o
IgorCisvLyBUcmF2ZXJzZXMgdGhlIGludGVybWVkaWF0ZSB0cmVlIHRvIHJldHVybiB0aGUgbWlu
aW11bSBHTFNMIHZlcnNpb24KKy8vIHJlcXVpcmVkIHRvIGxlZ2FsbHkgYWNjZXNzIGFsbCBidWls
dC1pbiBmZWF0dXJlcyB1c2VkIGluIHRoZSBzaGFkZXIuCisvLyBHTFNMIDEuMSB3aGljaCBpcyBt
YW5kYXRlZCBieSBPcGVuR0wgMi4wIHByb3ZpZGVzOgorLy8gICAtICN2ZXJzaW9uIGFuZCAjZXh0
ZW5zaW9uIHRvIGRlY2xhcmUgdmVyc2lvbiBhbmQgZXh0ZW5zaW9ucy4KKy8vICAgLSBidWlsdC1p
biBmdW5jdGlvbnMgcmVmcmFjdCwgZXhwLCBhbmQgbG9nLgorLy8gICAtIHVwZGF0ZWQgc3RlcCgp
IHRvIGNvbXBhcmUgeCA8IGVkZ2UgaW5zdGVhZCBvZiB4IDw9IGVkZ2UuCisvLyBHTFNMIDEuMiB3
aGljaCBpcyBtYW5kYXRlZCBieSBPcGVuR0wgMi4xIHByb3ZpZGVzOgorLy8gICAtIG1hbnkgY2hh
bmdlcyB0byByZWR1Y2UgZGlmZmVyZW5jZXMgd2hlbiBjb21wYXJlZCB0byB0aGUgRVMgc3BlY2lm
aWNhdGlvbi4KKy8vICAgLSBpbnZhcmlhbnQga2V5d29yZCBhbmQgaXRzIHN1cHBvcnQuCisvLyAg
IC0gYysrIHN0eWxlIG5hbWUgaGlkaW5nIHJ1bGVzLgorLy8gICAtIGJ1aWx0LWluIHZhcmlhYmxl
IGdsX1BvaW50Q29vcmQgZm9yIGZyYWdtZW50IHNoYWRlcnMuCisvLyAgIC0gbWF0cml4IGNvbnN0
cnVjdG9ycyB0YWtpbmcgbWF0cml4IGFzIGFyZ3VtZW50LgorLy8gICAtIGFycmF5IGFzICJvdXQi
IGZ1bmN0aW9uIHBhcmFtZXRlcnMKKy8vCitjbGFzcyBUVmVyc2lvbkdMU0wgOiBwdWJsaWMgVElu
dGVybVRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgVFZlcnNpb25HTFNMKFNoU2hhZGVyVHlwZSB0
eXBlKTsKKworICAgIC8vIFJldHVybnMgMTIwIGlmIHRoZSBmb2xsb3dpbmcgaXMgdXNlZCB0aGUg
c2hhZGVyOgorICAgIC8vIC0gImludmFyaWFudCIsCisgICAgLy8gLSAiZ2xfUG9pbnRDb29yZCIs
CisgICAgLy8gLSBtYXRyaXgvbWF0cml4IGNvbnN0cnVjdG9ycworICAgIC8vIC0gYXJyYXkgIm91
dCIgcGFyYW1ldGVycworICAgIC8vIEVsc2UgMTEwIGlzIHJldHVybmVkLgorICAgIGludCBnZXRW
ZXJzaW9uKCkgeyByZXR1cm4gbVZlcnNpb247IH0KKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5
bWJvbChUSW50ZXJtU3ltYm9sKik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0Q29uc3RhbnRVbmlv
bihUSW50ZXJtQ29uc3RhbnRVbmlvbiopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShW
aXNpdCwgVEludGVybUJpbmFyeSopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0
LCBUSW50ZXJtVW5hcnkqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQs
IFRJbnRlcm1TZWxlY3Rpb24qKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlz
aXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRMb29wKFZpc2l0
LCBUSW50ZXJtTG9vcCopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCwgVElu
dGVybUJyYW5jaCopOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCB1cGRhdGVWZXJzaW9uKGludCB2
ZXJzaW9uKTsKKworcHJpdmF0ZToKKyAgICBTaFNoYWRlclR5cGUgbVNoYWRlclR5cGU7CisgICAg
aW50IG1WZXJzaW9uOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9WRVJTSU9OR0xTTF9IXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvY29tcGlsZXJkZWJ1Zy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9jb21waWxlcmRlYnVnLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMGNiZTQzYjhkNTQ4
YjhlMjYxODU4YTc5NzRmMjg0MzYzNGNkODRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvY29tcGlsZXJkZWJ1Zy5jcHAK
QEAgLTAsMCArMSwzNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gZGVidWcuY3BwOiBEZWJ1
Z2dpbmcgdXRpbGl0aWVzLgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9jb21waWxl
cmRlYnVnLmgiCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaCIKKworI2lmZGVmIFRS
QUNFX0VOQUJMRUQKK3N0YXRpYyBjb25zdCBpbnQga1RyYWNlQnVmZmVyTGVuID0gMTAyNDsKKwor
ZXh0ZXJuICJDIiB7Cit2b2lkIFRyYWNlKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSB7CisgICAg
aWYgKCFmb3JtYXQpIHJldHVybjsKKworICAgIFRQYXJzZUNvbnRleHQqIHBhcnNlQ29udGV4dCA9
IEdldEdsb2JhbFBhcnNlQ29udGV4dCgpOworICAgIGlmIChwYXJzZUNvbnRleHQpIHsKKyAgICAg
ICAgY2hhciBidWZba1RyYWNlQnVmZmVyTGVuXTsKKyAgICAgICAgdmFfbGlzdCBhcmdzOworICAg
ICAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOworICAgICAgICB2c25wcmludGYoYnVmLCBrVHJh
Y2VCdWZmZXJMZW4sIGZvcm1hdCwgYXJncyk7CisgICAgICAgIHZhX2VuZChhcmdzKTsKKworICAg
ICAgICBwYXJzZUNvbnRleHQtPnRyYWNlKGJ1Zik7CisgICAgfQorfQorfSAgLy8gZXh0ZXJuICJD
IgorI2VuZGlmICAvLyBUUkFDRV9FTkFCTEVECisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2NvbXBpbGVyZGVidWcuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2NvbXBpbGVyZGVidWcu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi43YTM3MTUxNmFmMGZlZWM2MWY0NmVlMTE4MjFiYTI4ZDM1MWRkNDllCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvY29tcGlsZXJkZWJ1Zy5oCkBAIC0wLDAgKzEsNTMgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKy8vIGRlYnVnLmg6IERlYnVnZ2luZyB1dGlsaXRpZXMuCisKKyNpZm5kZWYgQ09NUElM
RVJfREVCVUdfSF8KKyNkZWZpbmUgQ09NUElMRVJfREVCVUdfSF8KKworI2luY2x1ZGUgPGFzc2Vy
dC5oPgorCisjaWZkZWYgX0RFQlVHCisjZGVmaW5lIFRSQUNFX0VOQUJMRUQgIC8vIGRlZmluZSB0
byBlbmFibGUgZGVidWcgbWVzc2FnZSB0cmFjaW5nCisjZW5kaWYgIC8vIF9ERUJVRworCisvLyBP
dXRwdXRzIHRleHQgdG8gdGhlIGRlYnVnIGxvZworI2lmZGVmIFRSQUNFX0VOQUJMRUQKKworI2lm
ZGVmICBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgIC8vIF9fY3BsdXNwbHVzCit2
b2lkIFRyYWNlKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKTsKKyNpZmRlZiAgX19jcGx1c3BsdXMK
K30KKyNlbmRpZiAgLy8gX19jcGx1c3BsdXMKKworI2Vsc2UgICAvLyBUUkFDRV9FTkFCTEVECisK
KyNkZWZpbmUgVHJhY2UoLi4uKSAoKHZvaWQpMCkKKworI2VuZGlmICAvLyBUUkFDRV9FTkFCTEVE
CisKKy8vIEEgbWFjcm8gYXNzZXJ0aW5nIGEgY29uZGl0aW9uIGFuZCBvdXRwdXR0aW5nIGZhaWx1
cmVzIHRvIHRoZSBkZWJ1ZyBsb2cKKyNkZWZpbmUgQVNTRVJUKGV4cHJlc3Npb24pIGRvIHsgXAor
ICAgIGlmKCEoZXhwcmVzc2lvbikpIFwKKyAgICAgICAgVHJhY2UoIkFzc2VydCBmYWlsZWQ6ICVz
KCVkKTogIiNleHByZXNzaW9uIlxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7IFwKKyAgICBh
c3NlcnQoZXhwcmVzc2lvbik7IFwKK30gd2hpbGUoMCkKKworI2RlZmluZSBVTklNUExFTUVOVEVE
KCkgZG8geyBcCisgICAgVHJhY2UoIlVuaW1wbGVtZW50ZWQgaW52b2tlZDogJXMoJWQpXG4iLCBf
X0ZVTkNUSU9OX18sIF9fTElORV9fKTsgXAorICAgIGFzc2VydChmYWxzZSk7IFwKK30gd2hpbGUo
MCkKKworI2RlZmluZSBVTlJFQUNIQUJMRSgpIGRvIHsgXAorICAgIFRyYWNlKCJVbnJlYWNoYWJs
ZSByZWFjaGVkOiAlcyglZClcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOyBcCisgICAgYXNz
ZXJ0KGZhbHNlKTsgXAorfSB3aGlsZSgwKQorCisjZW5kaWYgICAvLyBDT01QSUxFUl9ERUJVR19I
XworCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xOWRkZjVjNDM5MjU4ODNjNzk0YzcxNGU3OTk4NmUyM2FiYjUxNDdhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNwcApAQCAtMCwwICsxLDk3IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MTgpCisKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5o
IgorCitURGVwZW5kZW5jeUdyYXBoOjpURGVwZW5kZW5jeUdyYXBoKFRJbnRlcm1Ob2RlKiBpbnRl
cm1Ob2RlKQoreworICAgIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpidWlsZChpbnRlcm1Ob2Rl
LCB0aGlzKTsKK30KKworVERlcGVuZGVuY3lHcmFwaDo6flREZXBlbmRlbmN5R3JhcGgoKQorewor
ICAgIGZvciAoVEdyYXBoTm9kZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1BbGxOb2Rl
cy5iZWdpbigpOyBpdGVyICE9IG1BbGxOb2Rlcy5lbmQoKTsgKytpdGVyKQorICAgIHsKKyAgICAg
ICAgVEdyYXBoTm9kZSogbm9kZSA9ICppdGVyOworICAgICAgICBkZWxldGUgbm9kZTsKKyAgICB9
Cit9CisKK1RHcmFwaEFyZ3VtZW50KiBURGVwZW5kZW5jeUdyYXBoOjpjcmVhdGVBcmd1bWVudChU
SW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50TnVtYmVyKQoreworICAg
IFRHcmFwaEFyZ3VtZW50KiBhcmd1bWVudCA9IG5ldyBUR3JhcGhBcmd1bWVudChpbnRlcm1GdW5j
dGlvbkNhbGwsIGFyZ3VtZW50TnVtYmVyKTsKKyAgICBtQWxsTm9kZXMucHVzaF9iYWNrKGFyZ3Vt
ZW50KTsKKyAgICByZXR1cm4gYXJndW1lbnQ7Cit9CisKK1RHcmFwaEZ1bmN0aW9uQ2FsbCogVERl
cGVuZGVuY3lHcmFwaDo6Y3JlYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVy
bUZ1bmN0aW9uQ2FsbCkKK3sKKyAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCA9
IG5ldyBUR3JhcGhGdW5jdGlvbkNhbGwoaW50ZXJtRnVuY3Rpb25DYWxsKTsKKyAgICBtQWxsTm9k
ZXMucHVzaF9iYWNrKGZ1bmN0aW9uQ2FsbCk7CisgICAgaWYgKGZ1bmN0aW9uQ2FsbC0+Z2V0SW50
ZXJtRnVuY3Rpb25DYWxsKCktPmlzVXNlckRlZmluZWQoKSkKKyAgICAgICAgbVVzZXJEZWZpbmVk
RnVuY3Rpb25DYWxscy5wdXNoX2JhY2soZnVuY3Rpb25DYWxsKTsKKyAgICByZXR1cm4gZnVuY3Rp
b25DYWxsOworfQorCitUR3JhcGhTeW1ib2wqIFREZXBlbmRlbmN5R3JhcGg6OmdldE9yQ3JlYXRl
U3ltYm9sKFRJbnRlcm1TeW1ib2wqIGludGVybVN5bWJvbCkKK3sKKyAgICBUU3ltYm9sSWRNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtU3ltYm9sSWRNYXAuZmluZChpbnRlcm1TeW1ib2wtPmdl
dElkKCkpOworCisgICAgVEdyYXBoU3ltYm9sKiBzeW1ib2wgPSBOVUxMOworCisgICAgaWYgKGl0
ZXIgIT0gbVN5bWJvbElkTWFwLmVuZCgpKSB7CisgICAgICAgIFRTeW1ib2xJZFBhaXIgcGFpciA9
ICppdGVyOworICAgICAgICBzeW1ib2wgPSBwYWlyLnNlY29uZDsKKyAgICB9IGVsc2UgeworICAg
ICAgICBzeW1ib2wgPSBuZXcgVEdyYXBoU3ltYm9sKGludGVybVN5bWJvbCk7CisgICAgICAgIG1B
bGxOb2Rlcy5wdXNoX2JhY2soc3ltYm9sKTsKKworICAgICAgICBUU3ltYm9sSWRQYWlyIHBhaXIo
aW50ZXJtU3ltYm9sLT5nZXRJZCgpLCBzeW1ib2wpOworICAgICAgICBtU3ltYm9sSWRNYXAuaW5z
ZXJ0KHBhaXIpOworCisgICAgICAgIC8vIFdlIHNhdmUgYWxsIHNhbXBsZXIgc3ltYm9scyBpbiBh
IGNvbGxlY3Rpb24sIHNvIHdlIGNhbiBzdGFydCBncmFwaCB0cmF2ZXJzYWxzIGZyb20gdGhlbSBx
dWlja2x5LgorICAgICAgICBpZiAoSXNTYW1wbGVyKGludGVybVN5bWJvbC0+Z2V0QmFzaWNUeXBl
KCkpKQorICAgICAgICAgICAgbVNhbXBsZXJTeW1ib2xzLnB1c2hfYmFjayhzeW1ib2wpOworICAg
IH0KKworICAgIHJldHVybiBzeW1ib2w7Cit9CisKK1RHcmFwaFNlbGVjdGlvbiogVERlcGVuZGVu
Y3lHcmFwaDo6Y3JlYXRlU2VsZWN0aW9uKFRJbnRlcm1TZWxlY3Rpb24qIGludGVybVNlbGVjdGlv
bikKK3sKKyAgICBUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbiA9IG5ldyBUR3JhcGhTZWxlY3Rp
b24oaW50ZXJtU2VsZWN0aW9uKTsKKyAgICBtQWxsTm9kZXMucHVzaF9iYWNrKHNlbGVjdGlvbik7
CisgICAgcmV0dXJuIHNlbGVjdGlvbjsKK30KKworVEdyYXBoTG9vcCogVERlcGVuZGVuY3lHcmFw
aDo6Y3JlYXRlTG9vcChUSW50ZXJtTG9vcCogaW50ZXJtTG9vcCkKK3sKKyAgICBUR3JhcGhMb29w
KiBsb29wID0gbmV3IFRHcmFwaExvb3AoaW50ZXJtTG9vcCk7CisgICAgbUFsbE5vZGVzLnB1c2hf
YmFjayhsb29wKTsKKyAgICByZXR1cm4gbG9vcDsKK30KKworVEdyYXBoTG9naWNhbE9wKiBURGVw
ZW5kZW5jeUdyYXBoOjpjcmVhdGVMb2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJtTG9naWNh
bE9wKQoreworICAgIFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wID0gbmV3IFRHcmFwaExvZ2lj
YWxPcChpbnRlcm1Mb2dpY2FsT3ApOworICAgIG1BbGxOb2Rlcy5wdXNoX2JhY2sobG9naWNhbE9w
KTsKKyAgICByZXR1cm4gbG9naWNhbE9wOworfQorCitjb25zdCBjaGFyKiBUR3JhcGhMb2dpY2Fs
T3A6OmdldE9wU3RyaW5nKCkgY29uc3QKK3sKKyAgICBjb25zdCBjaGFyKiBvcFN0cmluZyA9IE5V
TEw7CisgICAgc3dpdGNoIChnZXRJbnRlcm1Mb2dpY2FsT3AoKS0+Z2V0T3AoKSkgeworICAgICAg
ICBjYXNlIEVPcExvZ2ljYWxBbmQ6IG9wU3RyaW5nID0gImFuZCI7IGJyZWFrOworICAgICAgICBj
YXNlIEVPcExvZ2ljYWxPcjogb3BTdHJpbmcgPSAib3IiOyBicmVhazsKKyAgICAgICAgZGVmYXVs
dDogb3BTdHJpbmcgPSAidW5rbm93biI7IGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gb3BTdHJp
bmc7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjVlYTFjYmI4MzdkY2I0NGRmZjFiMTIyNTFmZTg4ZmMwZjNkOGEwNTYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaApAQCAtMCwwICsxLDIxMiBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9I
CisjZGVmaW5lIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfSAorCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKworI2luY2x1ZGUgPHNldD4K
KyNpbmNsdWRlIDxzdGFjaz4KKworY2xhc3MgVEdyYXBoTm9kZTsKK2NsYXNzIFRHcmFwaFBhcmVu
dE5vZGU7CitjbGFzcyBUR3JhcGhBcmd1bWVudDsKK2NsYXNzIFRHcmFwaEZ1bmN0aW9uQ2FsbDsK
K2NsYXNzIFRHcmFwaFN5bWJvbDsKK2NsYXNzIFRHcmFwaFNlbGVjdGlvbjsKK2NsYXNzIFRHcmFw
aExvb3A7CitjbGFzcyBUR3JhcGhMb2dpY2FsT3A7CitjbGFzcyBURGVwZW5kZW5jeUdyYXBoVHJh
dmVyc2VyOworY2xhc3MgVERlcGVuZGVuY3lHcmFwaE91dHB1dDsKKwordHlwZWRlZiBzdGQ6OnNl
dDxUR3JhcGhOb2RlKj4gVEdyYXBoTm9kZVNldDsKK3R5cGVkZWYgc3RkOjp2ZWN0b3I8VEdyYXBo
Tm9kZSo+IFRHcmFwaE5vZGVWZWN0b3I7Cit0eXBlZGVmIHN0ZDo6dmVjdG9yPFRHcmFwaFN5bWJv
bCo+IFRHcmFwaFN5bWJvbFZlY3RvcjsKK3R5cGVkZWYgc3RkOjp2ZWN0b3I8VEdyYXBoRnVuY3Rp
b25DYWxsKj4gVEZ1bmN0aW9uQ2FsbFZlY3RvcjsKKworLy8KKy8vIEJhc2UgY2xhc3MgZm9yIGFs
bCBkZXBlbmRlbmN5IGdyYXBoIG5vZGVzLgorLy8KK2NsYXNzIFRHcmFwaE5vZGUgeworcHVibGlj
OgorICAgIFRHcmFwaE5vZGUoVEludGVybU5vZGUqIG5vZGUpIDogaW50ZXJtTm9kZShub2RlKSB7
fQorICAgIHZpcnR1YWwgflRHcmFwaE5vZGUoKSB7fQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJz
ZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Citwcm90ZWN0ZWQ6
CisgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7Cit9OworCisvLworLy8gQmFzZSBjbGFzcyBm
b3IgZGVwZW5kZW5jeSBncmFwaCBub2RlcyB0aGF0IG1heSBoYXZlIGNoaWxkcmVuLgorLy8KK2Ns
YXNzIFRHcmFwaFBhcmVudE5vZGUgOiBwdWJsaWMgVEdyYXBoTm9kZSB7CitwdWJsaWM6CisgICAg
VEdyYXBoUGFyZW50Tm9kZShUSW50ZXJtTm9kZSogbm9kZSkgOiBUR3JhcGhOb2RlKG5vZGUpIHt9
CisgICAgdmlydHVhbCB+VEdyYXBoUGFyZW50Tm9kZSgpIHt9CisgICAgdm9pZCBhZGREZXBlbmRl
bnROb2RlKFRHcmFwaE5vZGUqIG5vZGUpIHsgaWYgKG5vZGUgIT0gdGhpcykgbURlcGVuZGVudE5v
ZGVzLmluc2VydChub2RlKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Citwcml2YXRlOgorICAgIFRHcmFwaE5v
ZGVTZXQgbURlcGVuZGVudE5vZGVzOworfTsKKworLy8KKy8vIEhhbmRsZSBmdW5jdGlvbiBjYWxs
IGFyZ3VtZW50cy4KKy8vCitjbGFzcyBUR3JhcGhBcmd1bWVudCA6IHB1YmxpYyBUR3JhcGhQYXJl
bnROb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhBcmd1bWVudChUSW50ZXJtQWdncmVnYXRlKiBp
bnRlcm1GdW5jdGlvbkNhbGwsIGludCBhcmd1bWVudE51bWJlcikKKyAgICAgICAgOiBUR3JhcGhQ
YXJlbnROb2RlKGludGVybUZ1bmN0aW9uQ2FsbCkKKyAgICAgICAgLCBtQXJndW1lbnROdW1iZXIo
YXJndW1lbnROdW1iZXIpIHt9CisgICAgdmlydHVhbCB+VEdyYXBoQXJndW1lbnQoKSB7fQorICAg
IGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUqIGdldEludGVybUZ1bmN0aW9uQ2FsbCgpIGNvbnN0IHsg
cmV0dXJuIGludGVybU5vZGUtPmdldEFzQWdncmVnYXRlKCk7IH0KKyAgICBpbnQgZ2V0QXJndW1l
bnROdW1iZXIoKSBjb25zdCB7IHJldHVybiBtQXJndW1lbnROdW1iZXI7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIp
OworcHJpdmF0ZToKKyAgICBpbnQgbUFyZ3VtZW50TnVtYmVyOworfTsKKworLy8KKy8vIEhhbmRs
ZSBmdW5jdGlvbiBjYWxscy4KKy8vCitjbGFzcyBUR3JhcGhGdW5jdGlvbkNhbGwgOiBwdWJsaWMg
VEdyYXBoUGFyZW50Tm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoRnVuY3Rpb25DYWxsKFRJbnRl
cm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCkKKyAgICAgICAgOiBUR3JhcGhQYXJlbnRO
b2RlKGludGVybUZ1bmN0aW9uQ2FsbCkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhGdW5jdGlvbkNh
bGwoKSB7fQorICAgIGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUqIGdldEludGVybUZ1bmN0aW9uQ2Fs
bCgpIGNvbnN0IHsgcmV0dXJuIGludGVybU5vZGUtPmdldEFzQWdncmVnYXRlKCk7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2
ZXJzZXIpOworfTsKKworLy8KKy8vIEhhbmRsZSBzeW1ib2xzLgorLy8KK2NsYXNzIFRHcmFwaFN5
bWJvbCA6IHB1YmxpYyBUR3JhcGhQYXJlbnROb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhTeW1i
b2woVEludGVybVN5bWJvbCogaW50ZXJtU3ltYm9sKSA6IFRHcmFwaFBhcmVudE5vZGUoaW50ZXJt
U3ltYm9sKSB7fQorICAgIHZpcnR1YWwgflRHcmFwaFN5bWJvbCgpIHt9CisgICAgY29uc3QgVElu
dGVybVN5bWJvbCogZ2V0SW50ZXJtU3ltYm9sKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+
Z2V0QXNTeW1ib2xOb2RlKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVu
Y3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOworfTsKKworLy8KKy8vIEhhbmRsZSBp
ZiBzdGF0ZW1lbnRzIGFuZCB0ZXJuYXJ5IG9wZXJhdG9ycy4KKy8vCitjbGFzcyBUR3JhcGhTZWxl
Y3Rpb24gOiBwdWJsaWMgVEdyYXBoTm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoU2VsZWN0aW9u
KFRJbnRlcm1TZWxlY3Rpb24qIGludGVybVNlbGVjdGlvbikgOiBUR3JhcGhOb2RlKGludGVybVNl
bGVjdGlvbikge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhTZWxlY3Rpb24oKSB7fQorICAgIGNvbnN0
IFRJbnRlcm1TZWxlY3Rpb24qIGdldEludGVybVNlbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGlu
dGVybU5vZGUtPmdldEFzU2VsZWN0aW9uTm9kZSgpOyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZl
cnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK307CisKKy8v
CisvLyBIYW5kbGUgZm9yLCBkby13aGlsZSwgYW5kIHdoaWxlIGxvb3BzLgorLy8KK2NsYXNzIFRH
cmFwaExvb3AgOiBwdWJsaWMgVEdyYXBoTm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoTG9vcChU
SW50ZXJtTG9vcCogaW50ZXJtTG9vcCkgOiBUR3JhcGhOb2RlKGludGVybUxvb3ApIHt9CisgICAg
dmlydHVhbCB+VEdyYXBoTG9vcCgpIHt9CisgICAgY29uc3QgVEludGVybUxvb3AqIGdldEludGVy
bUxvb3AoKSBjb25zdCB7IHJldHVybiBpbnRlcm1Ob2RlLT5nZXRBc0xvb3BOb2RlKCk7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhU
cmF2ZXJzZXIpOworfTsKKworLy8KKy8vIEhhbmRsZSBsb2dpY2FsIGFuZCwgb3IuCisvLworY2xh
c3MgVEdyYXBoTG9naWNhbE9wIDogcHVibGljIFRHcmFwaE5vZGUgeworcHVibGljOgorICAgIFRH
cmFwaExvZ2ljYWxPcChUSW50ZXJtQmluYXJ5KiBpbnRlcm1Mb2dpY2FsT3ApIDogVEdyYXBoTm9k
ZShpbnRlcm1Mb2dpY2FsT3ApIHt9CisgICAgdmlydHVhbCB+VEdyYXBoTG9naWNhbE9wKCkge30K
KyAgICBjb25zdCBUSW50ZXJtQmluYXJ5KiBnZXRJbnRlcm1Mb2dpY2FsT3AoKSBjb25zdCB7IHJl
dHVybiBpbnRlcm1Ob2RlLT5nZXRBc0JpbmFyeU5vZGUoKTsgfQorICAgIGNvbnN0IGNoYXIqIGdl
dE9wU3RyaW5nKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK307CisKKy8vCisvLyBBIGRlcGVuZGVu
Y3kgZ3JhcGggb2Ygc3ltYm9scywgZnVuY3Rpb24gY2FsbHMsIGNvbmRpdGlvbnMgZXRjLgorLy8K
Ky8vIFRoaXMgY2xhc3MgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIHRvIHRoZSBlbnRyeSBwb2ludHMg
b2YgdGhlIGRlcGVuZGVuY3kgZ3JhcGguCisvLworLy8gRGVwZW5kZW5jeSBncmFwaCBub2RlcyBz
aG91bGQgYmUgY3JlYXRlZCBieSB1c2luZyBvbmUgb2YgdGhlIHByb3ZpZGVkICJjcmVhdGUuLi4i
IG1ldGhvZHMuCisvLyBUaGlzIGNsYXNzIChhbmQgbm9ib2R5IGVsc2UpIG1hbmFnZXMgdGhlIG1l
bW9yeSBvZiB0aGUgY3JlYXRlZCBub2Rlcy4KKy8vIE5vZGVzIG1heSBub3QgYmUgcmVtb3ZlZCBh
ZnRlciBiZWluZyBhZGRlZCwgc28gYWxsIGNyZWF0ZWQgbm9kZXMgd2lsbCBleGlzdCB3aGlsZSB0
aGUKKy8vIFREZXBlbmRlbmN5R3JhcGggaW5zdGFuY2UgZXhpc3RzLgorLy8KK2NsYXNzIFREZXBl
bmRlbmN5R3JhcGggeworcHVibGljOgorICAgIFREZXBlbmRlbmN5R3JhcGgoVEludGVybU5vZGUq
IGludGVybU5vZGUpOworICAgIH5URGVwZW5kZW5jeUdyYXBoKCk7CisgICAgVEdyYXBoTm9kZVZl
Y3Rvcjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtQWxsTm9kZXMuYmVn
aW4oKTsgfQorICAgIFRHcmFwaE5vZGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0
IHsgcmV0dXJuIG1BbGxOb2Rlcy5lbmQoKTsgfQorCisgICAgVEdyYXBoU3ltYm9sVmVjdG9yOjpj
b25zdF9pdGVyYXRvciBiZWdpblNhbXBsZXJTeW1ib2xzKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtU2FtcGxlclN5bWJvbHMuYmVnaW4oKTsKKyAgICB9CisKKyAgICBUR3JhcGhTeW1i
b2xWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZFNhbXBsZXJTeW1ib2xzKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtU2FtcGxlclN5bWJvbHMuZW5kKCk7CisgICAgfQorCisgICAgVEZ1
bmN0aW9uQ2FsbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgYmVnaW5Vc2VyRGVmaW5lZEZ1bmN0aW9u
Q2FsbHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1Vc2VyRGVmaW5lZEZ1bmN0aW9u
Q2FsbHMuYmVnaW4oKTsKKyAgICB9CisKKyAgICBURnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9p
dGVyYXRvciBlbmRVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMuZW5kKCk7CisgICAgfQorCisgICAg
VEdyYXBoQXJndW1lbnQqIGNyZWF0ZUFyZ3VtZW50KFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1
bmN0aW9uQ2FsbCwgaW50IGFyZ3VtZW50TnVtYmVyKTsKKyAgICBUR3JhcGhGdW5jdGlvbkNhbGwq
IGNyZWF0ZUZ1bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwp
OworICAgIFRHcmFwaFN5bWJvbCogZ2V0T3JDcmVhdGVTeW1ib2woVEludGVybVN5bWJvbCogaW50
ZXJtU3ltYm9sKTsKKyAgICBUR3JhcGhTZWxlY3Rpb24qIGNyZWF0ZVNlbGVjdGlvbihUSW50ZXJt
U2VsZWN0aW9uKiBpbnRlcm1TZWxlY3Rpb24pOworICAgIFRHcmFwaExvb3AqIGNyZWF0ZUxvb3Ao
VEludGVybUxvb3AqIGludGVybUxvb3ApOworICAgIFRHcmFwaExvZ2ljYWxPcCogY3JlYXRlTG9n
aWNhbE9wKFRJbnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxPcCk7Citwcml2YXRlOgorICAgIHR5
cGVkZWYgVE1hcDxpbnQsIFRHcmFwaFN5bWJvbCo+IFRTeW1ib2xJZE1hcDsKKyAgICB0eXBlZGVm
IHN0ZDo6cGFpcjxpbnQsIFRHcmFwaFN5bWJvbCo+IFRTeW1ib2xJZFBhaXI7CisKKyAgICBUR3Jh
cGhOb2RlVmVjdG9yIG1BbGxOb2RlczsKKyAgICBUR3JhcGhTeW1ib2xWZWN0b3IgbVNhbXBsZXJT
eW1ib2xzOworICAgIFRGdW5jdGlvbkNhbGxWZWN0b3IgbVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxs
czsKKyAgICBUU3ltYm9sSWRNYXAgbVN5bWJvbElkTWFwOworfTsKKworLy8KKy8vIEZvciB0cmF2
ZXJzaW5nIHRoZSBkZXBlbmRlbmN5IGdyYXBoLiBVc2VycyBzaG91bGQgZGVyaXZlIGZyb20gdGhp
cywKKy8vIHB1dCB0aGVpciB0cmF2ZXJzYWwgc3BlY2lmaWMgZGF0YSBpbiBpdCwgYW5kIHRoZW4g
cGFzcyBpdCB0byBhCisvLyB0cmF2ZXJzZSBtZXRob2QuCisvLworLy8gV2hlbiB1c2luZyB0aGlz
LCBqdXN0IGZpbGwgaW4gdGhlIG1ldGhvZHMgZm9yIG5vZGVzIHlvdSB3YW50IHZpc2l0ZWQuCisv
LworY2xhc3MgVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgVERlcGVu
ZGVuY3lHcmFwaFRyYXZlcnNlcigpIDogbURlcHRoKDApIHt9CisKKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXRTeW1ib2woVEdyYXBoU3ltYm9sKiBzeW1ib2wpIHt9OworICAgIHZpcnR1YWwgdm9pZCB2
aXNpdEFyZ3VtZW50KFRHcmFwaEFyZ3VtZW50KiBzZWxlY3Rpb24pIHt9OworICAgIHZpcnR1YWwg
dm9pZCB2aXNpdEZ1bmN0aW9uQ2FsbChUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCkg
e307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2Vs
ZWN0aW9uKSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3Ap
IHt9OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxv
Z2ljYWxPcCkge307CisKKyAgICBpbnQgZ2V0RGVwdGgoKSBjb25zdCB7IHJldHVybiBtRGVwdGg7
IH0KKyAgICB2b2lkIGluY3JlbWVudERlcHRoKCkgeyArK21EZXB0aDsgfQorICAgIHZvaWQgZGVj
cmVtZW50RGVwdGgoKSB7IC0tbURlcHRoOyB9CisKKyAgICB2b2lkIGNsZWFyVmlzaXRlZCgpIHsg
bVZpc2l0ZWQuY2xlYXIoKTsgfQorICAgIHZvaWQgbWFya1Zpc2l0ZWQoVEdyYXBoTm9kZSogbm9k
ZSkgeyBtVmlzaXRlZC5pbnNlcnQobm9kZSk7IH0KKyAgICBib29sIGlzVmlzaXRlZChUR3JhcGhO
b2RlKiBub2RlKSBjb25zdCB7IHJldHVybiBtVmlzaXRlZC5maW5kKG5vZGUpICE9IG1WaXNpdGVk
LmVuZCgpOyB9Citwcml2YXRlOgorICAgIGludCBtRGVwdGg7CisgICAgVEdyYXBoTm9kZVNldCBt
VmlzaXRlZDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRl
ci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9k
ZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNWYyY2JhNWZj
MDE4NzM0ZDE4NTdmZDhkNTk5ZTcwYTVmMjY3ODU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5k
ZW5jeUdyYXBoQnVpbGRlci5jcHAKQEAgLTAsMCArMSwyMjcgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWls
ZGVyLmgiCisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OmJ1aWxkKFRJbnRlcm1Ob2Rl
KiBub2RlLCBURGVwZW5kZW5jeUdyYXBoKiBncmFwaCkKK3sKKyAgICBURGVwZW5kZW5jeUdyYXBo
QnVpbGRlciBidWlsZGVyKGdyYXBoKTsKKyAgICBidWlsZGVyLmJ1aWxkKG5vZGUpOworfQorCiti
b29sIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwg
VEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtQWdncmVnYXRlKQoreworICAgIHN3aXRjaCAoaW50ZXJt
QWdncmVnYXRlLT5nZXRPcCgpKSB7CisgICAgICAgIGNhc2UgRU9wRnVuY3Rpb246IHZpc2l0RnVu
Y3Rpb25EZWZpbml0aW9uKGludGVybUFnZ3JlZ2F0ZSk7IGJyZWFrOworICAgICAgICBjYXNlIEVP
cEZ1bmN0aW9uQ2FsbDogdmlzaXRGdW5jdGlvbkNhbGwoaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6IHZpc2l0QWdncmVnYXRlQ2hpbGRyZW4oaW50ZXJtQWdncmVnYXRl
KTsgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFREZXBlbmRl
bmN5R3JhcGhCdWlsZGVyOjp2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbihUSW50ZXJtQWdncmVnYXRl
KiBpbnRlcm1BZ2dyZWdhdGUpCit7CisgICAgLy8gQ3VycmVudGx5LCB3ZSBkbyBub3Qgc3VwcG9y
dCB1c2VyIGRlZmluZWQgZnVuY3Rpb25zLgorICAgIGlmIChpbnRlcm1BZ2dyZWdhdGUtPmdldE5h
bWUoKSAhPSAibWFpbigiKQorICAgICAgICByZXR1cm47CisKKyAgICB2aXNpdEFnZ3JlZ2F0ZUNo
aWxkcmVuKGludGVybUFnZ3JlZ2F0ZSk7Cit9CisKKy8vIFRha2VzIGFuIGV4cHJlc3Npb24gbGlr
ZSAiZih4KSIgYW5kIGNyZWF0ZXMgYSBkZXBlbmRlbmN5IGdyYXBoIGxpa2UKKy8vICJ4IC0+IGFy
Z3VtZW50IDAgLT4gZnVuY3Rpb24gY2FsbCIuCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVy
Ojp2aXNpdEZ1bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwp
Cit7CisgICAgVEdyYXBoRnVuY3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwgPSBtR3JhcGgtPmNyZWF0
ZUZ1bmN0aW9uQ2FsbChpbnRlcm1GdW5jdGlvbkNhbGwpOworCisgICAgLy8gUnVuIHRocm91Z2gg
dGhlIGZ1bmN0aW9uIGNhbGwgYXJndW1lbnRzLgorICAgIGludCBhcmd1bWVudE51bWJlciA9IDA7
CisgICAgVEludGVybVNlcXVlbmNlJiBpbnRlcm1Bcmd1bWVudHMgPSBpbnRlcm1GdW5jdGlvbkNh
bGwtPmdldFNlcXVlbmNlKCk7CisgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJh
dG9yIGl0ZXIgPSBpbnRlcm1Bcmd1bWVudHMuYmVnaW4oKTsKKyAgICAgICAgIGl0ZXIgIT0gaW50
ZXJtQXJndW1lbnRzLmVuZCgpOworICAgICAgICAgKytpdGVyLCArK2FyZ3VtZW50TnVtYmVyKQor
ICAgIHsKKyAgICAgICAgVE5vZGVTZXRNYWludGFpbmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMp
OworCisgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Bcmd1bWVudCA9ICppdGVyOworICAgICAg
ICBpbnRlcm1Bcmd1bWVudC0+dHJhdmVyc2UodGhpcyk7CisKKyAgICAgICAgaWYgKFRQYXJlbnRO
b2RlU2V0KiBhcmd1bWVudE5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKSB7CisgICAgICAg
ICAgICBUR3JhcGhBcmd1bWVudCogYXJndW1lbnQgPSBtR3JhcGgtPmNyZWF0ZUFyZ3VtZW50KGlu
dGVybUZ1bmN0aW9uQ2FsbCwgYXJndW1lbnROdW1iZXIpOworICAgICAgICAgICAgY29ubmVjdE11
bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoYXJndW1lbnROb2RlcywgYXJndW1lbnQpOworICAgICAg
ICAgICAgYXJndW1lbnQtPmFkZERlcGVuZGVudE5vZGUoZnVuY3Rpb25DYWxsKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIFB1c2ggdGhlIGxlZnRtb3N0IHN5bWJvbCBvZiB0aGlzIGZ1bmN0
aW9uIGNhbGwgaW50byB0aGUgY3VycmVudCBzZXQgb2YgZGVwZW5kZW50IHN5bWJvbHMgdG8KKyAg
ICAvLyByZXByZXNlbnQgdGhlIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwuCisgICAgLy8g
VGh1cywgYW4gZXhwcmVzc2lvbiBsaWtlICJ5ID0gZih4KSIgd2lsbCB5aWVsZCBhIGRlcGVuZGVu
Y3kgZ3JhcGggbGlrZQorICAgIC8vICJ4IC0+IGFyZ3VtZW50IDAgLT4gZnVuY3Rpb24gY2FsbCAt
PiB5Ii4KKyAgICAvLyBUaGlzIGxpbmUgZXNzZW50aWFsbHkgcGFzc2VzIHRoZSBmdW5jdGlvbiBj
YWxsIG5vZGUgYmFjayB1cCB0byBhbiBlYXJsaWVyIHZpc2l0QXNzaWdubWVudAorICAgIC8vIGNh
bGwsIHdoaWNoIHdpbGwgY3JlYXRlIHRoZSBjb25uZWN0aW9uICJmdW5jdGlvbiBjYWxsIC0+IHki
LgorICAgIG1Ob2RlU2V0cy5pbnNlcnRJbnRvVG9wU2V0KGZ1bmN0aW9uQ2FsbCk7Cit9CisKK3Zv
aWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdncmVnYXRlQ2hpbGRyZW4oVEludGVy
bUFnZ3JlZ2F0ZSogaW50ZXJtQWdncmVnYXRlKQoreworICAgIFRJbnRlcm1TZXF1ZW5jZSYgc2Vx
dWVuY2UgPSBpbnRlcm1BZ2dyZWdhdGUtPmdldFNlcXVlbmNlKCk7CisgICAgZm9yKFRJbnRlcm1T
ZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHNlcXVlbmNlLmJlZ2luKCk7IGl0ZXIgIT0g
c2VxdWVuY2UuZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRl
cm1DaGlsZCA9ICppdGVyOworICAgICAgICBpbnRlcm1DaGlsZC0+dHJhdmVyc2UodGhpcyk7Cisg
ICAgfQorfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdFN5bWJvbChUSW50
ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wpCit7CisgICAgLy8gUHVzaCB0aGlzIHN5bWJvbCBpbnRv
IHRoZSBzZXQgb2YgZGVwZW5kZW50IHN5bWJvbHMgZm9yIHRoZSBjdXJyZW50IGFzc2lnbm1lbnQg
b3IgY29uZGl0aW9uCisgICAgLy8gdGhhdCB3ZSBhcmUgdHJhdmVyc2luZy4KKyAgICBUR3JhcGhT
eW1ib2wqIHN5bWJvbCA9IG1HcmFwaC0+Z2V0T3JDcmVhdGVTeW1ib2woaW50ZXJtU3ltYm9sKTsK
KyAgICBtTm9kZVNldHMuaW5zZXJ0SW50b1RvcFNldChzeW1ib2wpOworCisgICAgLy8gSWYgdGhp
cyBzeW1ib2wgaXMgdGhlIGN1cnJlbnQgbGVmdG1vc3Qgc3ltYm9sIHVuZGVyIGFuIGFzc2lnbm1l
bnQsIHJlcGxhY2UgdGhlIHByZXZpb3VzCisgICAgLy8gbGVmdG1vc3Qgc3ltYm9sIHdpdGggdGhp
cyBzeW1ib2wuCisgICAgaWYgKCFtTGVmdG1vc3RTeW1ib2xzLmVtcHR5KCkgJiYgbUxlZnRtb3N0
U3ltYm9scy50b3AoKSAhPSAmbVJpZ2h0U3VidHJlZSkgeworICAgICAgICBtTGVmdG1vc3RTeW1i
b2xzLnBvcCgpOworICAgICAgICBtTGVmdG1vc3RTeW1ib2xzLnB1c2goc3ltYm9sKTsKKyAgICB9
Cit9CisKK2Jvb2wgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QmluYXJ5KFZpc2l0IHZp
c2l0LCBUSW50ZXJtQmluYXJ5KiBpbnRlcm1CaW5hcnkpCit7CisgICAgVE9wZXJhdG9yIG9wID0g
aW50ZXJtQmluYXJ5LT5nZXRPcCgpOworICAgIGlmIChvcCA9PSBFT3BJbml0aWFsaXplIHx8IGlu
dGVybUJpbmFyeS0+aXNBc3NpZ25tZW50KCkpCisgICAgICAgIHZpc2l0QXNzaWdubWVudChpbnRl
cm1CaW5hcnkpOworICAgIGVsc2UgaWYgKG9wID09IEVPcExvZ2ljYWxBbmQgfHwgb3AgPT0gRU9w
TG9naWNhbE9yKQorICAgICAgICB2aXNpdExvZ2ljYWxPcChpbnRlcm1CaW5hcnkpOworICAgIGVs
c2UKKyAgICAgICAgdmlzaXRCaW5hcnlDaGlsZHJlbihpbnRlcm1CaW5hcnkpOworCisgICAgcmV0
dXJuIGZhbHNlOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEFzc2ln
bm1lbnQoVEludGVybUJpbmFyeSogaW50ZXJtQXNzaWdubWVudCkKK3sKKyAgICBUSW50ZXJtVHlw
ZWQqIGludGVybUxlZnQgPSBpbnRlcm1Bc3NpZ25tZW50LT5nZXRMZWZ0KCk7CisgICAgaWYgKCFp
bnRlcm1MZWZ0KQorICAgICAgICByZXR1cm47CisKKyAgICBUR3JhcGhTeW1ib2wqIGxlZnRtb3N0
U3ltYm9sID0gTlVMTDsKKworICAgIHsKKyAgICAgICAgVE5vZGVTZXRNYWludGFpbmVyIG5vZGVT
ZXRNYWludGFpbmVyKHRoaXMpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIFRMZWZ0bW9zdFN5
bWJvbE1haW50YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIG1MZWZ0U3VidHJl
ZSk7CisgICAgICAgICAgICBpbnRlcm1MZWZ0LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAg
IGxlZnRtb3N0U3ltYm9sID0gbUxlZnRtb3N0U3ltYm9scy50b3AoKTsKKworICAgICAgICAgICAg
Ly8gQWZ0ZXIgdHJhdmVyc2luZyB0aGUgbGVmdCBzdWJ0cmVlIG9mIHRoaXMgYXNzaWdubWVudCwg
d2Ugc2hvdWxkIGhhdmUgZm91bmQgYSByZWFsCisgICAgICAgICAgICAvLyBsZWZ0bW9zdCBzeW1i
b2wsIGFuZCB0aGUgbGVmdG1vc3Qgc3ltYm9sIHNob3VsZCBub3QgYmUgYSBwbGFjZWhvbGRlci4K
KyAgICAgICAgICAgIEFTU0VSVChsZWZ0bW9zdFN5bWJvbCAhPSAmbUxlZnRTdWJ0cmVlKTsKKyAg
ICAgICAgICAgIEFTU0VSVChsZWZ0bW9zdFN5bWJvbCAhPSAmbVJpZ2h0U3VidHJlZSk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1SaWdodCA9IGludGVybUFz
c2lnbm1lbnQtPmdldFJpZ2h0KCkpIHsKKyAgICAgICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50
YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIG1SaWdodFN1YnRyZWUpOworICAg
ICAgICAgICAgaW50ZXJtUmlnaHQtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKFRQYXJlbnROb2RlU2V0KiBhc3NpZ25tZW50Tm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9w
U2V0KCkpCisgICAgICAgICAgICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShhc3Np
Z25tZW50Tm9kZXMsIGxlZnRtb3N0U3ltYm9sKTsKKyAgICB9CisKKyAgICAvLyBQdXNoIHRoZSBs
ZWZ0bW9zdCBzeW1ib2wgb2YgdGhpcyBhc3NpZ25tZW50IGludG8gdGhlIGN1cnJlbnQgc2V0IG9m
IGRlcGVuZGVudCBzeW1ib2xzIHRvCisgICAgLy8gcmVwcmVzZW50IHRoZSByZXN1bHQgb2YgdGhp
cyBhc3NpZ25tZW50LgorICAgIC8vIEFuIGV4cHJlc3Npb24gbGlrZSAiYSA9IChiID0gYykiIHdp
bGwgeWllbGQgYSBkZXBlbmRlbmN5IGdyYXBoIGxpa2UgImMgLT4gYiAtPiBhIi4KKyAgICAvLyBU
aGlzIGxpbmUgZXNzZW50aWFsbHkgcGFzc2VzIHRoZSBsZWZ0bW9zdCBzeW1ib2wgb2YgdGhlIG5l
c3RlZCBhc3NpZ25tZW50ICgiYiIgaW4gdGhpcworICAgIC8vIGV4YW1wbGUpIGJhY2sgdXAgdG8g
dGhlIGVhcmxpZXIgdmlzaXRBc3NpZ25tZW50IGNhbGwgZm9yIHRoZSBvdXRlciBhc3NpZ25tZW50
LCB3aGljaCB3aWxsCisgICAgLy8gY3JlYXRlIHRoZSBjb25uZWN0aW9uICJiIC0+IGEiLgorICAg
IG1Ob2RlU2V0cy5pbnNlcnRJbnRvVG9wU2V0KGxlZnRtb3N0U3ltYm9sKTsKK30KKwordm9pZCBU
RGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRMb2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50
ZXJtTG9naWNhbE9wKQoreworICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybUxlZnQgPSBpbnRl
cm1Mb2dpY2FsT3AtPmdldExlZnQoKSkgeworICAgICAgICBUTm9kZVNldFByb3BhZ2F0aW5nTWFp
bnRhaW5lciBub2RlU2V0TWFpbnRhaW5lcih0aGlzKTsKKworICAgICAgICBpbnRlcm1MZWZ0LT50
cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBsZWZ0Tm9kZXMgPSBt
Tm9kZVNldHMuZ2V0VG9wU2V0KCkpIHsKKyAgICAgICAgICAgIFRHcmFwaExvZ2ljYWxPcCogbG9n
aWNhbE9wID0gbUdyYXBoLT5jcmVhdGVMb2dpY2FsT3AoaW50ZXJtTG9naWNhbE9wKTsKKyAgICAg
ICAgICAgIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGxlZnROb2RlcywgbG9naWNh
bE9wKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybVJp
Z2h0ID0gaW50ZXJtTG9naWNhbE9wLT5nZXRSaWdodCgpKSB7CisgICAgICAgIFRMZWZ0bW9zdFN5
bWJvbE1haW50YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIG1SaWdodFN1YnRy
ZWUpOworICAgICAgICBpbnRlcm1SaWdodC0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorfQorCit2
b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEJpbmFyeUNoaWxkcmVuKFRJbnRlcm1C
aW5hcnkqIGludGVybUJpbmFyeSkKK3sKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1MZWZ0
ID0gaW50ZXJtQmluYXJ5LT5nZXRMZWZ0KCkpCisgICAgICAgIGludGVybUxlZnQtPnRyYXZlcnNl
KHRoaXMpOworCisgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtUmlnaHQgPSBpbnRlcm1CaW5h
cnktPmdldFJpZ2h0KCkpIHsKKyAgICAgICAgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lciBsZWZ0
bW9zdFN5bWJvbE1haW50YWluZXIodGhpcywgbVJpZ2h0U3VidHJlZSk7CisgICAgICAgIGludGVy
bVJpZ2h0LT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9Cit9CisKK2Jvb2wgVERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXI6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBp
bnRlcm1TZWxlY3Rpb24pCit7CisgICAgaWYgKFRJbnRlcm1Ob2RlKiBpbnRlcm1Db25kaXRpb24g
PSBpbnRlcm1TZWxlY3Rpb24tPmdldENvbmRpdGlvbigpKSB7CisgICAgICAgIFROb2RlU2V0TWFp
bnRhaW5lciBub2RlU2V0TWFpbnRhaW5lcih0aGlzKTsKKworICAgICAgICBpbnRlcm1Db25kaXRp
b24tPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBpZiAoVFBhcmVudE5vZGVTZXQqIGNvbmRpdGlv
bk5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKSB7CisgICAgICAgICAgICBUR3JhcGhTZWxl
Y3Rpb24qIHNlbGVjdGlvbiA9IG1HcmFwaC0+Y3JlYXRlU2VsZWN0aW9uKGludGVybVNlbGVjdGlv
bik7CisgICAgICAgICAgICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShjb25kaXRp
b25Ob2Rlcywgc2VsZWN0aW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJt
Tm9kZSogaW50ZXJtVHJ1ZUJsb2NrID0gaW50ZXJtU2VsZWN0aW9uLT5nZXRUcnVlQmxvY2soKSkK
KyAgICAgICAgaW50ZXJtVHJ1ZUJsb2NrLT50cmF2ZXJzZSh0aGlzKTsKKworICAgIGlmIChUSW50
ZXJtTm9kZSogaW50ZXJtRmFsc2VCbG9jayA9IGludGVybVNlbGVjdGlvbi0+Z2V0RmFsc2VCbG9j
aygpKQorICAgICAgICBpbnRlcm1GYWxzZUJsb2NrLT50cmF2ZXJzZSh0aGlzKTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRMb29w
KFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCogaW50ZXJtTG9vcCkKK3sKKyAgICBpZiAoVEludGVy
bVR5cGVkKiBpbnRlcm1Db25kaXRpb24gPSBpbnRlcm1Mb29wLT5nZXRDb25kaXRpb24oKSkgewor
ICAgICAgICBUTm9kZVNldE1haW50YWluZXIgbm9kZVNldE1haW50YWluZXIodGhpcyk7CisKKyAg
ICAgICAgaW50ZXJtQ29uZGl0aW9uLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgaWYgKFRQYXJl
bnROb2RlU2V0KiBjb25kaXRpb25Ob2RlcyA9IG1Ob2RlU2V0cy5nZXRUb3BTZXQoKSkgeworICAg
ICAgICAgICAgVEdyYXBoTG9vcCogbG9vcCA9IG1HcmFwaC0+Y3JlYXRlTG9vcChpbnRlcm1Mb29w
KTsKKyAgICAgICAgICAgIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGNvbmRpdGlv
bk5vZGVzLCBsb29wKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJtTm9kZSog
aW50ZXJtQm9keSA9IGludGVybUxvb3AtPmdldEJvZHkoKSkKKyAgICAgICAgaW50ZXJtQm9keS0+
dHJhdmVyc2UodGhpcyk7CisKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1FeHByZXNzaW9u
ID0gaW50ZXJtTG9vcC0+Z2V0RXhwcmVzc2lvbigpKQorICAgICAgICBpbnRlcm1FeHByZXNzaW9u
LT50cmF2ZXJzZSh0aGlzKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworCit2b2lkIFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyOjpjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShUUGFy
ZW50Tm9kZVNldCogbm9kZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUR3JhcGhOb2RlKiBub2RlKSBjb25zdAoreworICAg
IGZvciAoVFBhcmVudE5vZGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBub2Rlcy0+YmVnaW4o
KTsgaXRlciAhPSBub2Rlcy0+ZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaFBh
cmVudE5vZGUqIGN1cnJlbnROb2RlID0gKml0ZXI7CisgICAgICAgIGN1cnJlbnROb2RlLT5hZGRE
ZXBlbmRlbnROb2RlKG5vZGUpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aEJ1aWxkZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZTkyOGZi
NzdlYjQ4MWQ4M2NmODVmNWZlNmMzNWZkZWExOGVjNTY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5oCkBAIC0wLDAgKzEsMTgxIEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2lmbmRlZiBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0JVSUxERVJfSAorI2Rl
ZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0JVSUxERVJfSAorCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCIKKwor
Ly8KKy8vIENyZWF0ZXMgYSBkZXBlbmRlbmN5IGdyYXBoIG9mIHN5bWJvbHMsIGZ1bmN0aW9uIGNh
bGxzLCBjb25kaXRpb25zIGV0Yy4gYnkgdHJhdmVyc2luZyBhCisvLyBpbnRlcm1lZGlhdGUgdHJl
ZS4KKy8vCitjbGFzcyBURGVwZW5kZW5jeUdyYXBoQnVpbGRlciA6IHB1YmxpYyBUSW50ZXJtVHJh
dmVyc2VyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBidWlsZChUSW50ZXJtTm9kZSogbm9k
ZSwgVERlcGVuZGVuY3lHcmFwaCogZ3JhcGgpOworCisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3lt
Ym9sKFRJbnRlcm1TeW1ib2wqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQg
dmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRTZWxlY3Rpb24o
VmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRB
Z2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKKyAgICB2aXJ0dWFsIGJv
b2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCopOworCitwcml2YXRlOgorICAg
IHR5cGVkZWYgc3RkOjpzdGFjazxUR3JhcGhTeW1ib2wqPiBUU3ltYm9sU3RhY2s7CisgICAgdHlw
ZWRlZiBzdGQ6OnNldDxUR3JhcGhQYXJlbnROb2RlKj4gVFBhcmVudE5vZGVTZXQ7CisKKyAgICAv
LworICAgIC8vIEZvciBjb2xsZWN0aW5nIHRoZSBkZXBlbmRlbnQgbm9kZXMgb2YgYXNzaWdubWVu
dHMsIGNvbmRpdGlvbnMsIGV0Yy4KKyAgICAvLyB3aGlsZSB0cmF2ZXJzaW5nIHRoZSBpbnRlcm1l
ZGlhdGUgdHJlZS4KKyAgICAvLworICAgIC8vIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgaXMgc3RhY2sg
b2Ygc2V0cy4gRWFjaCBzZXQgY29udGFpbnMgZGVwZW5kZW5jeSBncmFwaCBwYXJlbnQgbm9kZXMu
CisgICAgLy8KKyAgICBjbGFzcyBUTm9kZVNldFN0YWNrIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IFROb2RlU2V0U3RhY2soKSB7fTsKKyAgICAgICAgflROb2RlU2V0U3RhY2soKSB7IGNsZWFyKCk7
IH0KKworICAgICAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBhZnRlciBhIHB1c2hT
ZXQuCisgICAgICAgIC8vIFJldHVybnMgTlVMTCBpZiB0aGUgdG9wIHNldCBpcyBlbXB0eS4KKyAg
ICAgICAgVFBhcmVudE5vZGVTZXQqIGdldFRvcFNldCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIEFTU0VSVCghbm9kZVNldHMuZW1wdHkoKSk7CisgICAgICAgICAgICBUUGFyZW50Tm9k
ZVNldCogdG9wU2V0ID0gbm9kZVNldHMudG9wKCk7CisgICAgICAgICAgICByZXR1cm4gIXRvcFNl
dC0+ZW1wdHkoKSA/IHRvcFNldCA6IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHB1
c2hTZXQoKSB7IG5vZGVTZXRzLnB1c2gobmV3IFRQYXJlbnROb2RlU2V0KCkpOyB9CisgICAgICAg
IHZvaWQgcG9wU2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKCFub2RlU2V0cy5l
bXB0eSgpKTsKKyAgICAgICAgICAgIGRlbGV0ZSBub2RlU2V0cy50b3AoKTsKKyAgICAgICAgICAg
IG5vZGVTZXRzLnBvcCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gUG9wcyB0aGUgdG9wIHNl
dCBhbmQgYWRkcyBpdHMgY29udGVudHMgdG8gdGhlIG5ldyB0b3Agc2V0LgorICAgICAgICAvLyBU
aGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBhZnRlciBhIHB1c2hTZXQuCisgICAgICAgIC8vIElm
IHRoZXJlIGlzIG5vIHNldCBiZWxvdyB0aGUgdG9wIHNldCwgdGhlIHRvcCBzZXQgaXMganVzdCBk
ZWxldGVkLgorICAgICAgICB2b2lkIHBvcFNldEludG9OZXh0KCkKKyAgICAgICAgeworICAgICAg
ICAgICAgQVNTRVJUKCFub2RlU2V0cy5lbXB0eSgpKTsKKyAgICAgICAgICAgIFRQYXJlbnROb2Rl
U2V0KiBvbGRUb3BTZXQgPSBub2RlU2V0cy50b3AoKTsKKyAgICAgICAgICAgIG5vZGVTZXRzLnBv
cCgpOworCisgICAgICAgICAgICBpZiAoIW5vZGVTZXRzLmVtcHR5KCkpIHsKKyAgICAgICAgICAg
ICAgICBUUGFyZW50Tm9kZVNldCogbmV3VG9wU2V0ID0gbm9kZVNldHMudG9wKCk7CisgICAgICAg
ICAgICAgICAgbmV3VG9wU2V0LT5pbnNlcnQob2xkVG9wU2V0LT5iZWdpbigpLCBvbGRUb3BTZXQt
PmVuZCgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVsZXRlIG9sZFRvcFNldDsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIERvZXMgbm90aGluZyBpZiB0aGVyZSBpcyBubyB0b3Ag
c2V0LgorICAgICAgICAvLyBUaGlzIGNhbiBiZSBjYWxsZWQgd2hlbiB0aGVyZSBpcyBubyB0b3Ag
c2V0IGlmIHdlIGFyZSB2aXNpdGluZworICAgICAgICAvLyBzeW1ib2xzIHRoYXQgYXJlIG5vdCB1
bmRlciBhbiBhc3NpZ25tZW50IG9yIGNvbmRpdGlvbi4KKyAgICAgICAgLy8gV2UgZG9uJ3QgbmVl
ZCB0byB0cmFjayB0aG9zZSBzeW1ib2xzLgorICAgICAgICB2b2lkIGluc2VydEludG9Ub3BTZXQo
VEdyYXBoUGFyZW50Tm9kZSogbm9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vZGVT
ZXRzLmVtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBub2Rl
U2V0cy50b3AoKS0+aW5zZXJ0KG5vZGUpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBjbGVh
cigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlICghbm9kZVNldHMuZW1wdHkoKSkKKyAg
ICAgICAgICAgICAgICBwb3BTZXQoKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgdHlwZWRlZiBzdGQ6OnN0YWNrPFRQYXJlbnROb2RlU2V0Kj4gVFBhcmVudE5vZGVTZXRTdGFj
azsKKworICAgICAgICBUUGFyZW50Tm9kZVNldFN0YWNrIG5vZGVTZXRzOworICAgIH07CisKKyAg
ICAvLworICAgIC8vIEFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgcHVzaGVzIGEgbmV3IG5vZGUg
c2V0IHdoZW4gaW5zdGFudGlhdGVkLgorICAgIC8vIFdoZW4gdGhlIGluc3RhbmNlIGdvZXMgb3V0
IG9mIHNjb3BlLCBpdCBhbmQgcG9wcyB0aGUgbm9kZSBzZXQuCisgICAgLy8KKyAgICBjbGFzcyBU
Tm9kZVNldE1haW50YWluZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgVE5vZGVTZXRNYWludGFp
bmVyKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyKiBmYWN0b3J5KQorICAgICAgICAgICAgOiBzZXRz
KGZhY3RvcnktPm1Ob2RlU2V0cykgeyBzZXRzLnB1c2hTZXQoKTsgfQorICAgICAgICB+VE5vZGVT
ZXRNYWludGFpbmVyKCkgeyBzZXRzLnBvcFNldCgpOyB9CisgICAgcHJvdGVjdGVkOgorICAgICAg
ICBUTm9kZVNldFN0YWNrJiBzZXRzOworICAgIH07CisKKyAgICAvLworICAgIC8vIEFuIGluc3Rh
bmNlIG9mIHRoaXMgY2xhc3MgcHVzaGVzIGEgbmV3IG5vZGUgc2V0IHdoZW4gaW5zdGFudGlhdGVk
LgorICAgIC8vIFdoZW4gdGhlIGluc3RhbmNlIGdvZXMgb3V0IG9mIHNjb3BlLCBpdCBhbmQgcG9w
cyB0aGUgdG9wIG5vZGUgc2V0IGFuZCBhZGRzIGl0cyBjb250ZW50cyB0bworICAgIC8vIHRoZSBu
ZXcgdG9wIG5vZGUgc2V0LgorICAgIC8vCisgICAgY2xhc3MgVE5vZGVTZXRQcm9wYWdhdGluZ01h
aW50YWluZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgVE5vZGVTZXRQcm9wYWdhdGluZ01haW50
YWluZXIoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIqIGZhY3RvcnkpCisgICAgICAgICAgICA6IHNl
dHMoZmFjdG9yeS0+bU5vZGVTZXRzKSB7IHNldHMucHVzaFNldCgpOyB9CisgICAgICAgIH5UTm9k
ZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lcigpIHsgc2V0cy5wb3BTZXRJbnRvTmV4dCgpOyB9Cisg
ICAgcHJvdGVjdGVkOgorICAgICAgICBUTm9kZVNldFN0YWNrJiBzZXRzOworICAgIH07CisKKyAg
ICAvLworICAgIC8vIEFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3Mga2VlcHMgdHJhY2sgb2YgdGhl
IGxlZnRtb3N0IHN5bWJvbCB3aGlsZSB3ZSdyZSBleHBsb3JpbmcgYW4KKyAgICAvLyBhc3NpZ25t
ZW50LgorICAgIC8vIEl0IHdpbGwgcHVzaCB0aGUgcGxhY2Vob2xkZXIgc3ltYm9sIGtMZWZ0U3Vi
dHJlZSB3aGVuIGluc3RhbnRpYXRlZCB1bmRlciBhIGxlZnQgc3VidHJlZSwKKyAgICAvLyBhbmQg
a1JpZ2h0U3VidHJlZSB1bmRlciBhIHJpZ2h0IHN1YnRyZWUuCisgICAgLy8gV2hlbiBpdCBnb2Vz
IG91dCBvZiBzY29wZSwgaXQgd2lsbCBwb3AgdGhlIGxlZnRtb3N0IHN5bWJvbCBhdCB0aGUgdG9w
IG9mIHRoZSBzY29wZS4KKyAgICAvLyBEdXJpbmcgdHJhdmVyc2FsLCB0aGUgVERlcGVuZGVuY3lH
cmFwaEJ1aWxkZXIgd2lsbCByZXBsYWNlIGtMZWZ0U3VidHJlZSB3aXRoIGEgcmVhbCBzeW1ib2wu
CisgICAgLy8ga1JpZ2h0U3VidHJlZSB3aWxsIG5ldmVyIGJlIHJlcGxhY2VkIGJ5IGEgcmVhbCBz
eW1ib2wgYmVjYXVzZSB3ZSBhcmUgdHJhY2tpbmcgdGhlIGxlZnRtb3N0CisgICAgLy8gc3ltYm9s
LgorICAgIC8vCisgICAgY2xhc3MgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lciB7CisgICAgcHVi
bGljOgorICAgICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKFREZXBlbmRlbmN5R3JhcGhC
dWlsZGVyKiBmYWN0b3J5LCBUR3JhcGhTeW1ib2wmIHN1YnRyZWUpCisgICAgICAgICAgICA6IGxl
ZnRtb3N0U3ltYm9scyhmYWN0b3J5LT5tTGVmdG1vc3RTeW1ib2xzKQorICAgICAgICB7CisgICAg
ICAgICAgICBuZWVkc1BsYWNlaG9sZGVyU3ltYm9sID0gbGVmdG1vc3RTeW1ib2xzLmVtcHR5KCkg
fHwgbGVmdG1vc3RTeW1ib2xzLnRvcCgpICE9ICZzdWJ0cmVlOworICAgICAgICAgICAgaWYgKG5l
ZWRzUGxhY2Vob2xkZXJTeW1ib2wpCisgICAgICAgICAgICAgICAgbGVmdG1vc3RTeW1ib2xzLnB1
c2goJnN1YnRyZWUpOworICAgICAgICB9CisKKyAgICAgICAgflRMZWZ0bW9zdFN5bWJvbE1haW50
YWluZXIoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobmVlZHNQbGFjZWhvbGRlclN5bWJv
bCkKKyAgICAgICAgICAgICAgICBsZWZ0bW9zdFN5bWJvbHMucG9wKCk7CisgICAgICAgIH0KKwor
ICAgIHByb3RlY3RlZDoKKyAgICAgICAgVFN5bWJvbFN0YWNrJiBsZWZ0bW9zdFN5bWJvbHM7Cisg
ICAgICAgIGJvb2wgbmVlZHNQbGFjZWhvbGRlclN5bWJvbDsKKyAgICB9OworCisgICAgVERlcGVu
ZGVuY3lHcmFwaEJ1aWxkZXIoVERlcGVuZGVuY3lHcmFwaCogZ3JhcGgpCisgICAgICAgIDogVElu
dGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwgZmFsc2UpCisgICAgICAgICwgbUxlZnRTdWJ0cmVl
KE5VTEwpCisgICAgICAgICwgbVJpZ2h0U3VidHJlZShOVUxMKQorICAgICAgICAsIG1HcmFwaChn
cmFwaCkge30KKyAgICB2b2lkIGJ1aWxkKFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlKSB7IGludGVy
bU5vZGUtPnRyYXZlcnNlKHRoaXMpOyB9CisKKyAgICB2b2lkIGNvbm5lY3RNdWx0aXBsZU5vZGVz
VG9TaW5nbGVOb2RlKFRQYXJlbnROb2RlU2V0KiBub2RlcywgVEdyYXBoTm9kZSogbm9kZSkgY29u
c3Q7CisKKyAgICB2b2lkIHZpc2l0QXNzaWdubWVudChUSW50ZXJtQmluYXJ5Kik7CisgICAgdm9p
ZCB2aXNpdExvZ2ljYWxPcChUSW50ZXJtQmluYXJ5Kik7CisgICAgdm9pZCB2aXNpdEJpbmFyeUNo
aWxkcmVuKFRJbnRlcm1CaW5hcnkqKTsKKyAgICB2b2lkIHZpc2l0RnVuY3Rpb25EZWZpbml0aW9u
KFRJbnRlcm1BZ2dyZWdhdGUqKTsKKyAgICB2b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRJbnRlcm1B
Z2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCk7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZUNo
aWxkcmVuKFRJbnRlcm1BZ2dyZWdhdGUqKTsKKworICAgIFRHcmFwaFN5bWJvbCBtTGVmdFN1YnRy
ZWU7CisgICAgVEdyYXBoU3ltYm9sIG1SaWdodFN1YnRyZWU7CisKKyAgICBURGVwZW5kZW5jeUdy
YXBoKiBtR3JhcGg7CisgICAgVE5vZGVTZXRTdGFjayBtTm9kZVNldHM7CisgICAgVFN5bWJvbFN0
YWNrIG1MZWZ0bW9zdFN5bWJvbHM7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX0RFUEdSQVBI
X0RFUEVOREVOQ1lfR1JBUEhfQlVJTERFUl9ICmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhP
dXRwdXQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMjI2MzMz
NTQ1ZjczYTdkODVkZmI3NDIwYjQ1YzFhNzkzZTQ4MGI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVw
ZW5kZW5jeUdyYXBoT3V0cHV0LmNwcApAQCAtMCwwICsxLDY1IEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0
cHV0LmgiCisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6b3V0cHV0SW5kZW50YXRpb24o
KQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ2V0RGVwdGgoKTsgKytpKQorICAgICAgICBt
U2luayA8PCAiICAiOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0QXJn
dW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFtZXRlcikKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlv
bigpOworICAgIG1TaW5rIDw8ICJhcmd1bWVudCAiIDw8IHBhcmFtZXRlci0+Z2V0QXJndW1lbnRO
dW1iZXIoKSA8PCAiIG9mIGNhbGwgdG8gIgorICAgICAgICAgIDw8IHBhcmFtZXRlci0+Z2V0SW50
ZXJtRnVuY3Rpb25DYWxsKCktPmdldE5hbWUoKSA8PCAiXG4iOworfQorCit2b2lkIFREZXBlbmRl
bmN5R3JhcGhPdXRwdXQ6OnZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVu
Y3Rpb25DYWxsKQoreworICAgIG91dHB1dEluZGVudGF0aW9uKCk7CisgICAgbVNpbmsgPDwgImZ1
bmN0aW9uIGNhbGwgIiA8PCAgZnVuY3Rpb25DYWxsLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKS0+
Z2V0TmFtZSgpIDw8ICJcbiI7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlz
aXRTeW1ib2woVEdyYXBoU3ltYm9sKiBzeW1ib2wpCit7CisgICAgb3V0cHV0SW5kZW50YXRpb24o
KTsKKyAgICBtU2luayA8PCBzeW1ib2wtPmdldEludGVybVN5bWJvbCgpLT5nZXRTeW1ib2woKSA8
PCAiIChzeW1ib2wgaWQ6ICIKKyAgICAgICAgICA8PCBzeW1ib2wtPmdldEludGVybVN5bWJvbCgp
LT5nZXRJZCgpIDw8ICIpXG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZp
c2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKQoreworICAgIG91dHB1dElu
ZGVudGF0aW9uKCk7CisgICAgbVNpbmsgPDwgInNlbGVjdGlvblxuIjsKK30KKwordm9pZCBURGVw
ZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCkKK3sKKyAgICBv
dXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5rIDw8ICJsb29wIGNvbmRpdGlvblxuIjsKK30K
Kwordm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dp
Y2FsT3AqIGxvZ2ljYWxPcCkKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5r
IDw8ICJsb2dpY2FsICIgPDwgbG9naWNhbE9wLT5nZXRPcFN0cmluZygpIDw8ICJcbiI7Cit9CisK
K3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6b3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhURGVw
ZW5kZW5jeUdyYXBoJiBncmFwaCkKK3sKKyAgICBtU2luayA8PCAiXG4iOworCisgICAgZm9yIChU
R3JhcGhOb2RlVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZ3JhcGguYmVnaW4oKTsgaXRl
ciAhPSBncmFwaC5lbmQoKTsgKytpdGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBoTm9kZSogc3lt
Ym9sID0gKml0ZXI7CisgICAgICAgIG1TaW5rIDw8ICItLS0gRGVwZW5kZW5jeSBncmFwaCBzcGFu
bmluZyB0cmVlIC0tLVxuIjsKKyAgICAgICAgY2xlYXJWaXNpdGVkKCk7CisgICAgICAgIHN5bWJv
bC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG1TaW5rIDw8ICJcbiI7CisgICAgfQorfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jM2E0MTEyMjc4ZmJiZDRmMDkxNzUzZThkNDQ0NTQxNTVjYzE3MjVhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgKQEAgLTAsMCArMSwzMCBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9H
UkFQSF9PVVRQVVRfSAorI2RlZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBI
X09VVFBVVF9ICisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVu
ZGVuY3lHcmFwaC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIK
KworY2xhc3MgVERlcGVuZGVuY3lHcmFwaE91dHB1dCA6IHB1YmxpYyBURGVwZW5kZW5jeUdyYXBo
VHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBURGVwZW5kZW5jeUdyYXBoT3V0cHV0KFRJbmZvU2lu
a0Jhc2UmIHNpbmspIDogbVNpbmsoc2luaykge30KKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1i
b2woVEdyYXBoU3ltYm9sKiBzeW1ib2wpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFyZ3VtZW50
KFRHcmFwaEFyZ3VtZW50KiBwYXJhbWV0ZXIpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdEZ1bmN0
aW9uQ2FsbChUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCk7CisgICAgdmlydHVhbCB2
b2lkIHZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3ApOworICAgIHZpcnR1YWwgdm9pZCB2
aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCk7CisKKyAgICB2b2lkIG91
dHB1dEFsbFNwYW5uaW5nVHJlZXMoVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpOworcHJpdmF0ZToK
KyAgICB2b2lkIG91dHB1dEluZGVudGF0aW9uKCk7CisKKyAgICBUSW5mb1NpbmtCYXNlJiBtU2lu
azsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9P
VVRQVVRfSApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5k
ZW5jeUdyYXBoVHJhdmVyc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5N2ZkZTk3ZTI2MGQwYjUwMmUxNGQ5
ODBjNWU2ZmNkMTg4MDc2MWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2
ZXJzZS5jcHAKQEAgLTAsMCArMSw2OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorCisvLyBUaGVzZSBt
ZXRob2RzIGRvIGEgYnJlYWR0aC1maXJzdCB0cmF2ZXJzYWwgdGhyb3VnaCB0aGUgZ3JhcGggYW5k
IG1hcmsgdmlzaXRlZCBub2Rlcy4KKwordm9pZCBUR3JhcGhOb2RlOjp0cmF2ZXJzZShURGVwZW5k
ZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNl
ci0+bWFya1Zpc2l0ZWQodGhpcyk7Cit9CisKK3ZvaWQgVEdyYXBoUGFyZW50Tm9kZTo6dHJhdmVy
c2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCit7CisgICAgVEdy
YXBoTm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworCisgICAgZ3JhcGhUcmF2ZXJzZXIt
PmluY3JlbWVudERlcHRoKCk7CisKKyAgICAvLyBWaXNpdCB0aGUgcGFyZW50IG5vZGUncyBjaGls
ZHJlbi4KKyAgICBmb3IgKFRHcmFwaE5vZGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtRGVw
ZW5kZW50Tm9kZXMuYmVnaW4oKTsKKyAgICAgICAgIGl0ZXIgIT0gbURlcGVuZGVudE5vZGVzLmVu
ZCgpOworICAgICAgICAgKytpdGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBoTm9kZSogbm9kZSA9
ICppdGVyOworICAgICAgICBpZiAoIWdyYXBoVHJhdmVyc2VyLT5pc1Zpc2l0ZWQobm9kZSkpCisg
ICAgICAgICAgICBub2RlLT50cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7CisgICAgfQorCisgICAg
Z3JhcGhUcmF2ZXJzZXItPmRlY3JlbWVudERlcHRoKCk7Cit9CisKK3ZvaWQgVEdyYXBoQXJndW1l
bnQ6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQor
eworICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdEFyZ3VtZW50KHRoaXMpOworICAgIFRHcmFwaFBh
cmVudE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhGdW5j
dGlvbkNhbGw6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVy
c2VyKQoreworICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdEZ1bmN0aW9uQ2FsbCh0aGlzKTsKKyAg
ICBUR3JhcGhQYXJlbnROb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CisKK3ZvaWQg
VEdyYXBoU3ltYm9sOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRy
YXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRTeW1ib2wodGhpcyk7CisgICAg
VEdyYXBoUGFyZW50Tm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworfQorCit2b2lkIFRH
cmFwaFNlbGVjdGlvbjo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhU
cmF2ZXJzZXIpCit7CisgICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0U2VsZWN0aW9uKHRoaXMpOwor
ICAgIFRHcmFwaE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3Jh
cGhMb29wOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNl
cikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRMb29wKHRoaXMpOworICAgIFRHcmFwaE5v
ZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhMb2dpY2FsT3A6
OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQorewor
ICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdExvZ2ljYWxPcCh0aGlzKTsKKyAgICBUR3JhcGhOb2Rl
Ojp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nZW5lcmF0ZV9wYXJzZXIuc2ggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nZW5lcmF0ZV9w
YXJzZXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZTQ3MjE5MTVlM2NmYjI3Yzg3ZmY5M2EwZjk1M2FkOTE2NDNj
YzZiNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL2dlbmVyYXRlX3BhcnNlci5zaApAQCAtMCwwICsxLDI3IEBACisjIS9i
aW4vYmFzaAorIyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorIyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorCisjIEdlbmVyYXRlcyBHTFNMIEVTIHBhcnNlciAtIGdsc2xhbmdfbGV4LmNw
cCwgZ2xzbGFuZ190YWIuaCwgYW5kIGdsc2xhbmdfdGFiLmNwcAorCitydW5fZmxleCgpCit7Citp
bnB1dF9maWxlPSRzY3JpcHRfZGlyLyQxLmwKK291dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIvJDFf
bGV4LmNwcAorZmxleCAtLW5vbGluZSAtLW5vdW5pc3RkIC0tb3V0ZmlsZT0kb3V0cHV0X3NvdXJj
ZSAkaW5wdXRfZmlsZQorfQorCitydW5fYmlzb24oKQoreworaW5wdXRfZmlsZT0kc2NyaXB0X2Rp
ci8kMS55CitvdXRwdXRfaGVhZGVyPSRzY3JpcHRfZGlyLyQxX3RhYi5oCitvdXRwdXRfc291cmNl
PSRzY3JpcHRfZGlyLyQxX3RhYi5jcHAKK2Jpc29uIC0tbm8tbGluZXMgLS1za2VsZXRvbj15YWNj
LmMgLS1kZWZpbmVzPSRvdXRwdXRfaGVhZGVyIC0tb3V0cHV0PSRvdXRwdXRfc291cmNlICRpbnB1
dF9maWxlCit9CisKK3NjcmlwdF9kaXI9JChkaXJuYW1lICQwKQorCisjIEdlbmVyYXRlIFBhcnNl
cgorcnVuX2ZsZXggZ2xzbGFuZworcnVuX2Jpc29uIGdsc2xhbmcKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mMjIxMTk5MDkzYzIxYWI5N2Y4MjFhNmZiNmIxODQ4MjE2ZTIyODUxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvZ2xzbGFuZy5oCkBAIC0wLDAgKzEsMTYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCitzdHJ1Y3Qg
VFBhcnNlQ29udGV4dDsKK2V4dGVybiBpbnQgZ2xzbGFuZ19pbml0aWFsaXplKFRQYXJzZUNvbnRl
eHQqIGNvbnRleHQpOworZXh0ZXJuIGludCBnbHNsYW5nX2ZpbmFsaXplKFRQYXJzZUNvbnRleHQq
IGNvbnRleHQpOworCitleHRlcm4gaW50IGdsc2xhbmdfc2NhbihzaXplX3QgY291bnQsCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGludCBsZW5ndGhbXSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOworZXh0ZXJuIGludCBnbHNsYW5nX3BhcnNlKFRQ
YXJzZUNvbnRleHQqIGNvbnRleHQpOworCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nLmwgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nLmwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmI2
MjNlYzQxMDYyYmU2Y2E4OWQ4MjU4NDczYWI4MGJhNzdhZDFkZQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcu
bApAQCAtMCwwICsxLDM1NSBAQAorLyoKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK1RoaXMgZmlsZSBj
b250YWlucyB0aGUgTGV4IHNwZWNpZmljYXRpb24gZm9yIEdMU0wgRVMuCitCYXNlZCBvbiBBTlNJ
IEMgZ3JhbW1hciwgTGV4IHNwZWNpZmljYXRpb246CitodHRwOi8vd3d3Lmx5c2F0b3IubGl1LnNl
L2MvQU5TSS1DLWdyYW1tYXItbC5odG1sCisKK0lGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBB
TFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaCwKK1dISUNIIEdFTkVSQVRFUyBUSEUg
R0xTTCBFUyBMRVhFUiAoZ2xzbGFuZ19sZXguY3BwKS4KKyovCisKKyV0b3B7CisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5z
aC4gRE8gTk9UIEVESVQhCisKKy8vIElnbm9yZSBlcnJvcnMgaW4gYXV0by1nZW5lcmF0ZWQgY29k
ZS4KKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVk
ICItV3VudXNlZC1mdW5jdGlvbiIKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1
bnVzZWQtdmFyaWFibGUiCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc3dpdGNo
LWVudW0iCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6
IDQwNjUpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDE4OSkKKyNwcmFnbWEgd2FybmluZyhk
aXNhYmxlOiA0NTA1KQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEpCisjZW5kaWYKK30K
KworJXsKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcuaCIKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L3ByZXByb2Nlc3Nvci9Ub2tlbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdXRp
bC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuaCIKKworLyog
d2luZG93cyBvbmx5IHByYWdtYSAqLworI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmco
ZGlzYWJsZSA6IDQxMDIpCisjZW5kaWYKKworI2RlZmluZSBZWV9VU0VSX0FDVElPTiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB5eWxsb2MtPmZpcnN0X2ZpbGUgPSB5eWxs
b2MtPmxhc3RfZmlsZSA9IHl5Y29sdW1uOyBcCisgICAgeXlsbG9jLT5maXJzdF9saW5lID0geXls
bG9jLT5sYXN0X2xpbmUgPSB5eWxpbmVubzsKKworI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3Vs
dCwgbWF4X3NpemUpIFwKKyAgICByZXN1bHQgPSBzdHJpbmdfaW5wdXQoYnVmLCBtYXhfc2l6ZSwg
eXlzY2FubmVyKTsKKworc3RhdGljIHl5X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCB5
eV9zaXplX3QgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcik7CitzdGF0aWMgaW50IGNoZWNr
X3R5cGUoeXlzY2FuX3QgeXlzY2FubmVyKTsKK3N0YXRpYyBpbnQgcmVzZXJ2ZWRfd29yZCh5eXNj
YW5fdCB5eXNjYW5uZXIpOworc3RhdGljIGludCBpbnRfY29uc3RhbnQoeXlzY2FuX3QgeXlzY2Fu
bmVyKTsKK3N0YXRpYyBpbnQgZmxvYXRfY29uc3RhbnQoeXlzY2FuX3QgeXlzY2FubmVyKTsKKyV9
CisKKyVvcHRpb24gbm95eXdyYXAgbm91bnB1dCBuZXZlci1pbnRlcmFjdGl2ZQorJW9wdGlvbiB5
eWxpbmVubyByZWVudHJhbnQgYmlzb24tYnJpZGdlIGJpc29uLWxvY2F0aW9ucworJW9wdGlvbiBl
eHRyYS10eXBlPSJUUGFyc2VDb250ZXh0KiIKKworRCAgICAgICAgICAgWzAtOV0KK0wgICAgICAg
ICAgIFthLXpBLVpfXQorSCAgICAgICAgICAgW2EtZkEtRjAtOV0KK0UgICAgICAgICAgIFtFZV1b
Ky1dP3tEfSsKK08gICAgICAgICAgIFswLTddCisKKyUlCisKKyJpbnZhcmlhbnQiICAgIHsgcmV0
dXJuIElOVkFSSUFOVDsgfQorImhpZ2hwIiAgICAgICAgeyByZXR1cm4gSElHSF9QUkVDSVNJT047
IH0KKyJtZWRpdW1wIiAgICAgIHsgcmV0dXJuIE1FRElVTV9QUkVDSVNJT047IH0KKyJsb3dwIiAg
ICAgICAgIHsgcmV0dXJuIExPV19QUkVDSVNJT047IH0KKyJwcmVjaXNpb24iICAgIHsgcmV0dXJu
IFBSRUNJU0lPTjsgfQorCisiYXR0cmlidXRlIiAgICB7IHJldHVybiBBVFRSSUJVVEU7IH0KKyJj
b25zdCIgICAgICAgIHsgcmV0dXJuIENPTlNUX1FVQUw7IH0KKyJ1bmlmb3JtIiAgICAgIHsgcmV0
dXJuIFVOSUZPUk07IH0KKyJ2YXJ5aW5nIiAgICAgIHsgcmV0dXJuIFZBUllJTkc7IH0KKworImJy
ZWFrIiAgICAgICAgeyByZXR1cm4gQlJFQUs7IH0KKyJjb250aW51ZSIgICAgIHsgcmV0dXJuIENP
TlRJTlVFOyB9CisiZG8iICAgICAgICAgICB7IHJldHVybiBETzsgfQorImZvciIgICAgICAgICAg
eyByZXR1cm4gRk9SOyB9Cisid2hpbGUiICAgICAgICB7IHJldHVybiBXSElMRTsgfQorCisiaWYi
ICAgICAgICAgICB7IHJldHVybiBJRjsgfQorImVsc2UiICAgICAgICAgeyByZXR1cm4gRUxTRTsg
fQorCisiaW4iICAgICAgICAgICB7IHJldHVybiBJTl9RVUFMOyB9Cisib3V0IiAgICAgICAgICB7
IHJldHVybiBPVVRfUVVBTDsgfQorImlub3V0IiAgICAgICAgeyByZXR1cm4gSU5PVVRfUVVBTDsg
fQorCisiZmxvYXQiICAgICAgICB7IHJldHVybiBGTE9BVF9UWVBFOyB9CisiaW50IiAgICAgICAg
ICB7IHJldHVybiBJTlRfVFlQRTsgfQorInZvaWQiICAgICAgICAgeyByZXR1cm4gVk9JRF9UWVBF
OyB9CisiYm9vbCIgICAgICAgICB7IHJldHVybiBCT09MX1RZUEU7IH0KKyJ0cnVlIiAgICAgICAg
IHsgeXlsdmFsLT5sZXguYiA9IHRydWU7ICByZXR1cm4gQk9PTENPTlNUQU5UOyB9CisiZmFsc2Ui
ICAgICAgICB7IHl5bHZhbC0+bGV4LmIgPSBmYWxzZTsgcmV0dXJuIEJPT0xDT05TVEFOVDsgfQor
CisiZGlzY2FyZCIgICAgICB7IHJldHVybiBESVNDQVJEOyB9CisicmV0dXJuIiAgICAgICB7IHJl
dHVybiBSRVRVUk47IH0KKworIm1hdDIiICAgICAgICAgeyByZXR1cm4gTUFUUklYMjsgfQorIm1h
dDMiICAgICAgICAgeyByZXR1cm4gTUFUUklYMzsgfQorIm1hdDQiICAgICAgICAgeyByZXR1cm4g
TUFUUklYNDsgfQorCisidmVjMiIgICAgICAgICB7IHJldHVybiBWRUMyOyB9CisidmVjMyIgICAg
ICAgICB7IHJldHVybiBWRUMzOyB9CisidmVjNCIgICAgICAgICB7IHJldHVybiBWRUM0OyB9Cisi
aXZlYzIiICAgICAgICB7IHJldHVybiBJVkVDMjsgfQorIml2ZWMzIiAgICAgICAgeyByZXR1cm4g
SVZFQzM7IH0KKyJpdmVjNCIgICAgICAgIHsgcmV0dXJuIElWRUM0OyB9CisiYnZlYzIiICAgICAg
ICB7IHJldHVybiBCVkVDMjsgfQorImJ2ZWMzIiAgICAgICAgeyByZXR1cm4gQlZFQzM7IH0KKyJi
dmVjNCIgICAgICAgIHsgcmV0dXJuIEJWRUM0OyB9CisKKyJzYW1wbGVyMkQiICAgICAgICAgIHsg
cmV0dXJuIFNBTVBMRVIyRDsgfQorInNhbXBsZXJDdWJlIiAgICAgICAgeyByZXR1cm4gU0FNUExF
UkNVQkU7IH0KKyJzYW1wbGVyRXh0ZXJuYWxPRVMiIHsgcmV0dXJuIFNBTVBMRVJfRVhURVJOQUxf
T0VTOyB9Cisic2FtcGxlcjJEUmVjdCIgICAgICB7IHJldHVybiBTQU1QTEVSMkRSRUNUOyB9CisK
KyJzdHJ1Y3QiICAgICAgIHsgcmV0dXJuIFNUUlVDVDsgfQorCisiYXNtIiAgICAgICAgICB7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworImNsYXNzIiAgICAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisidW5pb24iICAgICAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJlbnVtIiAgICAgICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInR5cGVkZWYiICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9CisidGVtcGxhdGUiICAgICB7IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KKyJ0aGlzIiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQorInBhY2tlZCIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9CisKKyJnb3RvIiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQorInN3aXRjaCIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
CisiZGVmYXVsdCIgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwor
ImlubGluZSIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisibm9p
bmxpbmUiICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJ2b2xhdGls
ZSIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInB1YmxpYyIgICAg
ICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic3RhdGljIiAgICAgICB7
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJleHRlcm4iICAgICAgIHsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImV4dGVybmFsIiAgICAgeyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiaW50ZXJmYWNlIiAgICB7IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJmbGF0IiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQorCisibG9uZyIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KKyJzaG9ydCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQorImRvdWJsZSIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9CisiaGFsZiIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KKyJmaXhlZCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQorInVuc2lnbmVkIiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisi
c3VwZXJwIiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworImlu
cHV0IiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisib3V0cHV0
IiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworImh2ZWMyIiAg
ICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiaHZlYzMiICAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJodmVjNCIgICAgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImR2ZWMyIiAgICAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZHZlYzMiICAgICAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJkdmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImZ2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9CisiZnZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KKyJmdmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQorCisic2FtcGxlcjFEIiAgICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxlcjNEIiAgICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxlcjFEU2hhZG93IiAgICAgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxlcjJEU2hhZG93IiAgICAgeyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxlcjNEUmVjdCIgICAgICAgeyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxlcjJEUmVjdFNoYWRvdyIgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisKKyJzaXplb2YiICAgICAgIHsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImNhc3QiICAgICAgICAgeyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisKKyJuYW1lc3BhY2UiICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInVzaW5nIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9CisKK3tMfSh7TH18e0R9KSogICAgICAgeworICAgeXlsdmFsLT5s
ZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsgCisgICByZXR1cm4gY2hlY2tfdHlw
ZSh5eXNjYW5uZXIpOworfQorCiswW3hYXXtIfSsgICAgICAgICB7IHJldHVybiBpbnRfY29uc3Rh
bnQoeXlzY2FubmVyKTsgfQorMHtPfSsgICAgICAgICAgICAgeyByZXR1cm4gaW50X2NvbnN0YW50
KHl5c2Nhbm5lcik7IH0KK3tEfSsgICAgICAgICAgICAgIHsgcmV0dXJuIGludF9jb25zdGFudCh5
eXNjYW5uZXIpOyB9CisKK3tEfSt7RX0gICAgICAgICAgIHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50
KHl5c2Nhbm5lcik7IH0KK3tEfSsiLiJ7RH0qKHtFfSk/IHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50
KHl5c2Nhbm5lcik7IH0KKyIuIntEfSsoe0V9KT8gICAgIHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50
KHl5c2Nhbm5lcik7IH0KKworIis9IiAgICAgICAgICAgIHsgcmV0dXJuIEFERF9BU1NJR047IH0K
KyItPSIgICAgICAgICAgICB7IHJldHVybiBTVUJfQVNTSUdOOyB9CisiKj0iICAgICAgICAgICAg
eyByZXR1cm4gTVVMX0FTU0lHTjsgfQorIi89IiAgICAgICAgICAgIHsgcmV0dXJuIERJVl9BU1NJ
R047IH0KKyIlPSIgICAgICAgICAgICB7IHJldHVybiBNT0RfQVNTSUdOOyB9CisiPDw9IiAgICAg
ICAgICAgeyByZXR1cm4gTEVGVF9BU1NJR047IH0KKyI+Pj0iICAgICAgICAgICB7IHJldHVybiBS
SUdIVF9BU1NJR047IH0KKyImPSIgICAgICAgICAgICB7IHJldHVybiBBTkRfQVNTSUdOOyB9Cisi
Xj0iICAgICAgICAgICAgeyByZXR1cm4gWE9SX0FTU0lHTjsgfQorInw9IiAgICAgICAgICAgIHsg
cmV0dXJuIE9SX0FTU0lHTjsgfQorCisiKysiICAgICAgICAgICAgeyByZXR1cm4gSU5DX09QOyB9
CisiLS0iICAgICAgICAgICAgeyByZXR1cm4gREVDX09QOyB9CisiJiYiICAgICAgICAgICAgeyBy
ZXR1cm4gQU5EX09QOyB9CisifHwiICAgICAgICAgICAgeyByZXR1cm4gT1JfT1A7IH0KKyJeXiIg
ICAgICAgICAgICB7IHJldHVybiBYT1JfT1A7IH0KKyI8PSIgICAgICAgICAgICB7IHJldHVybiBM
RV9PUDsgfQorIj49IiAgICAgICAgICAgIHsgcmV0dXJuIEdFX09QOyB9CisiPT0iICAgICAgICAg
ICAgeyByZXR1cm4gRVFfT1A7IH0KKyIhPSIgICAgICAgICAgICB7IHJldHVybiBORV9PUDsgfQor
Ijw8IiAgICAgICAgICAgIHsgcmV0dXJuIExFRlRfT1A7IH0KKyI+PiIgICAgICAgICAgICB7IHJl
dHVybiBSSUdIVF9PUDsgfQorIjsiICAgICAgICAgICAgIHsgcmV0dXJuIFNFTUlDT0xPTjsgfQor
KCJ7InwiPCUiKSAgICAgIHsgcmV0dXJuIExFRlRfQlJBQ0U7IH0KKygifSJ8IiU+IikgICAgICB7
IHJldHVybiBSSUdIVF9CUkFDRTsgfQorIiwiICAgICAgICAgeyByZXR1cm4gQ09NTUE7IH0KKyI6
IiAgICAgICAgIHsgcmV0dXJuIENPTE9OOyB9CisiPSIgICAgICAgICB7IHJldHVybiBFUVVBTDsg
fQorIigiICAgICAgICAgeyByZXR1cm4gTEVGVF9QQVJFTjsgfQorIikiICAgICAgICAgeyByZXR1
cm4gUklHSFRfUEFSRU47IH0KKygiWyJ8Ijw6IikgIHsgcmV0dXJuIExFRlRfQlJBQ0tFVDsgfQor
KCJdInwiOj4iKSAgeyByZXR1cm4gUklHSFRfQlJBQ0tFVDsgfQorIi4iICAgICAgICAgeyByZXR1
cm4gRE9UOyB9CisiISIgICAgICAgICB7IHJldHVybiBCQU5HOyB9CisiLSIgICAgICAgICB7IHJl
dHVybiBEQVNIOyB9CisifiIgICAgICAgICB7IHJldHVybiBUSUxERTsgfQorIisiICAgICAgICAg
eyByZXR1cm4gUExVUzsgfQorIioiICAgICAgICAgeyByZXR1cm4gU1RBUjsgfQorIi8iICAgICAg
ICAgeyByZXR1cm4gU0xBU0g7IH0KKyIlIiAgICAgICAgIHsgcmV0dXJuIFBFUkNFTlQ7IH0KKyI8
IiAgICAgICAgIHsgcmV0dXJuIExFRlRfQU5HTEU7IH0KKyI+IiAgICAgICAgIHsgcmV0dXJuIFJJ
R0hUX0FOR0xFOyB9CisifCIgICAgICAgICB7IHJldHVybiBWRVJUSUNBTF9CQVI7IH0KKyJeIiAg
ICAgICAgIHsgcmV0dXJuIENBUkVUOyB9CisiJiIgICAgICAgICB7IHJldHVybiBBTVBFUlNBTkQ7
IH0KKyI/IiAgICAgICAgIHsgcmV0dXJuIFFVRVNUSU9OOyB9CisKK1sgXHRcdlxuXGZccl0geyB9
Cis8PEVPRj4+ICAgIHsgeXl0ZXJtaW5hdGUoKTsgfQorLiAgICAgICAgICB7IGFzc2VydChmYWxz
ZSk7IHJldHVybiAwOyB9CisKKyUlCisKK3l5X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciogYnVm
LCB5eV9zaXplX3QgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikgeworICAgIHBwOjpUb2tl
biB0b2tlbjsKKyAgICB5eWdldF9leHRyYSh5eXNjYW5uZXIpLT5wcmVwcm9jZXNzb3IubGV4KCZ0
b2tlbik7CisgICAgeXlfc2l6ZV90IGxlbiA9IHRva2VuLnR5cGUgPT0gcHA6OlRva2VuOjpMQVNU
ID8gMCA6IHRva2VuLnRleHQuc2l6ZSgpOworICAgIGlmIChsZW4gPCBtYXhfc2l6ZSkKKyAgICAg
ICAgbWVtY3B5KGJ1ZiwgdG9rZW4udGV4dC5jX3N0cigpLCBsZW4pOworICAgIHl5c2V0X2NvbHVt
bih0b2tlbi5sb2NhdGlvbi5maWxlLCB5eXNjYW5uZXIpOworICAgIHl5c2V0X2xpbmVubyh0b2tl
bi5sb2NhdGlvbi5saW5lLCB5eXNjYW5uZXIpOworCisgICAgaWYgKGxlbiA+PSBtYXhfc2l6ZSkK
KyAgICAgICAgWVlfRkFUQUxfRVJST1IoIklucHV0IGJ1ZmZlciBvdmVyZmxvdyIpOworICAgIGVs
c2UgaWYgKGxlbiA+IDApCisgICAgICAgIGJ1ZltsZW4rK10gPSAnICc7CisgICAgcmV0dXJuIGxl
bjsKK30KKworaW50IGNoZWNrX3R5cGUoeXlzY2FuX3QgeXlzY2FubmVyKSB7CisgICAgc3RydWN0
IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgeXlzY2FubmVyOworICAgIAorICAg
IGludCB0b2tlbiA9IElERU5USUZJRVI7CisgICAgVFN5bWJvbCogc3ltYm9sID0geXlleHRyYS0+
c3ltYm9sVGFibGUuZmluZCh5eXRleHQpOworICAgIGlmIChzeW1ib2wgJiYgc3ltYm9sLT5pc1Zh
cmlhYmxlKCkpIHsKKyAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PFRW
YXJpYWJsZSo+KHN5bWJvbCk7CisgICAgICAgIGlmICh2YXJpYWJsZS0+aXNVc2VyVHlwZSgpKQor
ICAgICAgICAgICAgdG9rZW4gPSBUWVBFX05BTUU7CisgICAgfQorICAgIHl5bHZhbC0+bGV4LnN5
bWJvbCA9IHN5bWJvbDsKKyAgICByZXR1cm4gdG9rZW47Cit9CisKK2ludCByZXNlcnZlZF93b3Jk
KHl5c2Nhbl90IHl5c2Nhbm5lcikgeworICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopIHl5c2Nhbm5lcjsKKworICAgIHl5ZXh0cmEtPmVycm9yKCp5eWxsb2MsICJJ
bGxlZ2FsIHVzZSBvZiByZXNlcnZlZCB3b3JkIiwgeXl0ZXh0LCAiIik7CisgICAgeXlleHRyYS0+
cmVjb3ZlcigpOworICAgIHJldHVybiAwOworfQorCit2b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxv
YywgVFBhcnNlQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKSB7CisgICAgY29u
dGV4dC0+ZXJyb3IoKmxsb2MsIHJlYXNvbiwgeXlnZXRfdGV4dChjb250ZXh0LT5zY2FubmVyKSk7
CisgICAgY29udGV4dC0+cmVjb3ZlcigpOworfQorCitpbnQgaW50X2NvbnN0YW50KHl5c2Nhbl90
IHl5c2Nhbm5lcikgeworICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopIHl5c2Nhbm5lcjsKKworICAgIGlmICghYXRvaV9jbGFtcCh5eXRleHQsICYoeXlsdmFsLT5s
ZXguaSkpKQorICAgICAgICB5eWV4dHJhLT53YXJuaW5nKCp5eWxsb2MsICJJbnRlZ2VyIG92ZXJm
bG93IiwgeXl0ZXh0LCAiIik7CisgICAgcmV0dXJuIElOVENPTlNUQU5UOworfQorCitpbnQgZmxv
YXRfY29uc3RhbnQoeXlzY2FuX3QgeXlzY2FubmVyKSB7CisgICAgc3RydWN0IHl5Z3V0c190KiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190KikgeXlzY2FubmVyOworCisgICAgaWYgKCFhdG9mX2NsYW1w
KHl5dGV4dCwgJih5eWx2YWwtPmxleC5mKSkpCisgICAgICAgIHl5ZXh0cmEtPndhcm5pbmcoKnl5
bGxvYywgIkZsb2F0IG92ZXJmbG93IiwgeXl0ZXh0LCAiIik7CisgICAgcmV0dXJuIEZMT0FUQ09O
U1RBTlQ7Cit9CisKK2ludCBnbHNsYW5nX2luaXRpYWxpemUoVFBhcnNlQ29udGV4dCogY29udGV4
dCkgeworICAgIHl5c2Nhbl90IHNjYW5uZXIgPSBOVUxMOworICAgIGlmICh5eWxleF9pbml0X2V4
dHJhKGNvbnRleHQsICZzY2FubmVyKSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBjb250ZXh0
LT5zY2FubmVyID0gc2Nhbm5lcjsKKyAgICByZXR1cm4gMDsKK30KKworaW50IGdsc2xhbmdfZmlu
YWxpemUoVFBhcnNlQ29udGV4dCogY29udGV4dCkgeworICAgIHl5c2Nhbl90IHNjYW5uZXIgPSBj
b250ZXh0LT5zY2FubmVyOworICAgIGlmIChzY2FubmVyID09IE5VTEwpIHJldHVybiAwOworICAg
IAorICAgIGNvbnRleHQtPnNjYW5uZXIgPSBOVUxMOworICAgIHl5bGV4X2Rlc3Ryb3koc2Nhbm5l
cik7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IGdsc2xhbmdfc2NhbihzaXplX3QgY291bnQs
IGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAg
ICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKKyAgICB5eXJlc3RhcnQoTlVMTCwg
Y29udGV4dC0+c2Nhbm5lcik7CisgICAgeXlzZXRfY29sdW1uKDAsIGNvbnRleHQtPnNjYW5uZXIp
OworICAgIHl5c2V0X2xpbmVubygxLCBjb250ZXh0LT5zY2FubmVyKTsKKworICAgIC8vIEluaXRp
YWxpemUgcHJlcHJvY2Vzc29yLgorICAgIGlmICghY29udGV4dC0+cHJlcHJvY2Vzc29yLmluaXQo
Y291bnQsIHN0cmluZywgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY29udGV4dC0+
cHJlcHJvY2Vzc29yLnNldE1heFRva2VuTGVuZ3RoKFNIX01BWF9UT0tFTl9MRU5HVEgpOworCisg
ICAgLy8gRGVmaW5lIGV4dGVuc2lvbiBtYWNyb3MuCisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2
aW9yJiBleHRCZWhhdmlvciA9IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgZm9y
IChURXh0ZW5zaW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRCZWhhdmlvci5i
ZWdpbigpOworICAgICAgICAgaXRlciAhPSBleHRCZWhhdmlvci5lbmQoKTsgKytpdGVyKSB7Cisg
ICAgICAgIGNvbnRleHQtPnByZXByb2Nlc3Nvci5wcmVkZWZpbmVNYWNybyhpdGVyLT5maXJzdC5j
X3N0cigpLCAxKTsKKyAgICB9CisgICAgaWYgKGNvbnRleHQtPmZyYWdtZW50UHJlY2lzaW9uSGln
aCkKKyAgICAgICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnByZWRlZmluZU1hY3JvKCJHTF9GUkFH
TUVOVF9QUkVDSVNJT05fSElHSCIsIDEpOworCisgICAgcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xh
bmcueSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2ds
c2xhbmcueQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5lMTJjOTg4ZWQ4NmI2YTk5MzA2ZmJhMTUwM2JhMWUyNDY4MGUw
YTE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvZ2xzbGFuZy55CkBAIC0wLDAgKzEsMjAxNSBAQAorLyoKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgWWFjYyBncmFtbWFyIGZvciBHTFNM
IEVTLgorQmFzZWQgb24gQU5TSSBDIFlhY2MgZ3JhbW1hcjoKK2h0dHA6Ly93d3cubHlzYXRvci5s
aXUuc2UvYy9BTlNJLUMtZ3JhbW1hci15Lmh0bWwKKworSUYgWU9VIE1PRElGWSBUSElTIEZJTEUg
WU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNoLAorV0hJQ0ggR0VORVJBVEVT
IFRIRSBHTFNMIEVTIFBBUlNFUiAoZ2xzbGFuZ190YWIuY3BwIEFORCBnbHNsYW5nX3RhYi5oKS4K
KyovCisKKyV7CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5l
cmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKKworLy8gSWdub3JlIGVy
cm9ycyBpbiBhdXRvLWdlbmVyYXRlZCBjb2RlLgorI2lmIGRlZmluZWQoX19HTlVDX18pCisjcHJh
Z21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLWZ1bmN0aW9uIgorI3ByYWdtYSBH
Q0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC12YXJpYWJsZSIKKyNwcmFnbWEgR0NDIGRp
YWdub3N0aWMgaWdub3JlZCAiLVdzd2l0Y2gtZW51bSIKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIp
CisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDA2NSkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxl
OiA0MTg5KQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ1MDUpCisjcHJhZ21hIHdhcm5pbmco
ZGlzYWJsZTogNDcwMSkKKyNlbmRpZgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9T
eW1ib2xUYWJsZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0
LmgiCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisKKyNkZWZpbmUgWVlFTkFCTEVf
TkxTIDAKKworI2RlZmluZSBZWUxFWF9QQVJBTSBjb250ZXh0LT5zY2FubmVyCislfQorCislZXhw
ZWN0IDEgLyogT25lIHNoaWZ0IHJlZHVjZSBjb25mbGljdCBiZWNhdXNlIG9mIGlmIHwgZWxzZSAq
LworJXB1cmUtcGFyc2VyCislcGFyc2UtcGFyYW0ge1RQYXJzZUNvbnRleHQqIGNvbnRleHR9Cisl
bG9jYXRpb25zCislbGV4LXBhcmFtIHtZWUxFWF9QQVJBTX0KKworJWNvZGUgcmVxdWlyZXMgewor
I2RlZmluZSBZWUxUWVBFIFRTb3VyY2VMb2MKKyNkZWZpbmUgWVlMVFlQRV9JU19ERUNMQVJFRCAx
CisjZGVmaW5lIFNIX01BWF9UT0tFTl9MRU5HVEggMjU2ICAvLyBXZWJHTCBzcGVjLgorfQorCisl
dW5pb24geworICAgIHN0cnVjdCB7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFRTdHJp
bmcgKnN0cmluZzsKKyAgICAgICAgICAgIGZsb2F0IGY7CisgICAgICAgICAgICBpbnQgaTsKKyAg
ICAgICAgICAgIGJvb2wgYjsKKyAgICAgICAgfTsKKyAgICAgICAgVFN5bWJvbCogc3ltYm9sOwor
ICAgIH0gbGV4OworICAgIHN0cnVjdCB7CisgICAgICAgIFRPcGVyYXRvciBvcDsKKyAgICAgICAg
dW5pb24geworICAgICAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CisgICAgICAgICAg
ICBUSW50ZXJtTm9kZVBhaXIgbm9kZVBhaXI7CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGlu
dGVybVR5cGVkTm9kZTsKKyAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUFnZ3Jl
Z2F0ZTsKKyAgICAgICAgfTsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgVFB1YmxpY1R5
cGUgdHlwZTsKKyAgICAgICAgICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOworICAgICAgICAgICAg
VFF1YWxpZmllciBxdWFsaWZpZXI7CisgICAgICAgICAgICBURnVuY3Rpb24qIGZ1bmN0aW9uOwor
ICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJhbTsKKyAgICAgICAgICAgIFRGaWVsZCogZmllbGQ7
CisgICAgICAgICAgICBURmllbGRMaXN0KiBmaWVsZExpc3Q7CisgICAgICAgIH07CisgICAgfSBp
bnRlcm07Cit9CisKKyV7CitleHRlcm4gaW50IHl5bGV4KFlZU1RZUEUqIHl5bHZhbCwgWVlMVFlQ
RSogeXlsbG9jLCB2b2lkKiB5eXNjYW5uZXIpOworZXh0ZXJuIHZvaWQgeXllcnJvcihZWUxUWVBF
KiB5eWxsb2MsIFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7CisK
KyNkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKSAgICAgICAgICAgICAgICAg
ICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgaWYgKE4pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2ZpbGUgPSBZWVJI
U0xPQyhSaHMsIDEpLmZpcnN0X2ZpbGU7ICBcCisgICAgICAgIChDdXJyZW50KS5maXJzdF9saW5l
ID0gWVlSSFNMT0MoUmhzLCAxKS5maXJzdF9saW5lOyAgXAorICAgICAgICAoQ3VycmVudCkubGFz
dF9maWxlID0gWVlSSFNMT0MoUmhzLCBOKS5sYXN0X2ZpbGU7ICAgIFwKKyAgICAgICAgKEN1cnJl
bnQpLmxhc3RfbGluZSA9IFlZUkhTTE9DKFJocywgTikubGFzdF9saW5lOyAgICBcCisgICAgICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2ZpbGUgPSBZWVJIU0xPQyhSaHMsIDApLmxh
c3RfZmlsZTsgICBcCisgICAgICAgIChDdXJyZW50KS5maXJzdF9saW5lID0gWVlSSFNMT0MoUmhz
LCAwKS5sYXN0X2xpbmU7ICAgXAorICAgICAgICAoQ3VycmVudCkubGFzdF9maWxlID0gWVlSSFNM
T0MoUmhzLCAwKS5sYXN0X2ZpbGU7ICAgIFwKKyAgICAgICAgKEN1cnJlbnQpLmxhc3RfbGluZSA9
IFlZUkhTTE9DKFJocywgMCkubGFzdF9saW5lOyAgICBcCisgICAgICB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICgwKQor
CisjZGVmaW5lIFZFUlRFWF9PTkxZKFMsIEwpIHsgIFwKKyAgICBpZiAoY29udGV4dC0+c2hhZGVy
VHlwZSAhPSBTSF9WRVJURVhfU0hBREVSKSB7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEws
ICIgc3VwcG9ydGVkIGluIHZlcnRleCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCisgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsgIFwKKyAgICB9ICBcCit9CisKKyNkZWZpbmUgRlJBR19PTkxZKFMs
IEwpIHsgIFwKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSAhPSBTSF9GUkFHTUVOVF9TSEFE
RVIpIHsgIFwKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21l
bnQgc2hhZGVycyBvbmx5ICIsIFMpOyAgXAorICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBc
CisgICAgfSAgXAorfQorJX0KKworJXRva2VuIDxsZXg+IElOVkFSSUFOVCBISUdIX1BSRUNJU0lP
TiBNRURJVU1fUFJFQ0lTSU9OIExPV19QUkVDSVNJT04gUFJFQ0lTSU9OCisldG9rZW4gPGxleD4g
QVRUUklCVVRFIENPTlNUX1FVQUwgQk9PTF9UWVBFIEZMT0FUX1RZUEUgSU5UX1RZUEUKKyV0b2tl
biA8bGV4PiBCUkVBSyBDT05USU5VRSBETyBFTFNFIEZPUiBJRiBESVNDQVJEIFJFVFVSTgorJXRv
a2VuIDxsZXg+IEJWRUMyIEJWRUMzIEJWRUM0IElWRUMyIElWRUMzIElWRUM0IFZFQzIgVkVDMyBW
RUM0CisldG9rZW4gPGxleD4gTUFUUklYMiBNQVRSSVgzIE1BVFJJWDQgSU5fUVVBTCBPVVRfUVVB
TCBJTk9VVF9RVUFMIFVOSUZPUk0gVkFSWUlORworJXRva2VuIDxsZXg+IFNUUlVDVCBWT0lEX1RZ
UEUgV0hJTEUKKyV0b2tlbiA8bGV4PiBTQU1QTEVSMkQgU0FNUExFUkNVQkUgU0FNUExFUl9FWFRF
Uk5BTF9PRVMgU0FNUExFUjJEUkVDVAorCisldG9rZW4gPGxleD4gSURFTlRJRklFUiBUWVBFX05B
TUUgRkxPQVRDT05TVEFOVCBJTlRDT05TVEFOVCBCT09MQ09OU1RBTlQKKyV0b2tlbiA8bGV4PiBM
RUZUX09QIFJJR0hUX09QCisldG9rZW4gPGxleD4gSU5DX09QIERFQ19PUCBMRV9PUCBHRV9PUCBF
UV9PUCBORV9PUAorJXRva2VuIDxsZXg+IEFORF9PUCBPUl9PUCBYT1JfT1AgTVVMX0FTU0lHTiBE
SVZfQVNTSUdOIEFERF9BU1NJR04KKyV0b2tlbiA8bGV4PiBNT0RfQVNTSUdOIExFRlRfQVNTSUdO
IFJJR0hUX0FTU0lHTiBBTkRfQVNTSUdOIFhPUl9BU1NJR04gT1JfQVNTSUdOCisldG9rZW4gPGxl
eD4gU1VCX0FTU0lHTgorCisldG9rZW4gPGxleD4gTEVGVF9QQVJFTiBSSUdIVF9QQVJFTiBMRUZU
X0JSQUNLRVQgUklHSFRfQlJBQ0tFVCBMRUZUX0JSQUNFIFJJR0hUX0JSQUNFIERPVAorJXRva2Vu
IDxsZXg+IENPTU1BIENPTE9OIEVRVUFMIFNFTUlDT0xPTiBCQU5HIERBU0ggVElMREUgUExVUyBT
VEFSIFNMQVNIIFBFUkNFTlQKKyV0b2tlbiA8bGV4PiBMRUZUX0FOR0xFIFJJR0hUX0FOR0xFIFZF
UlRJQ0FMX0JBUiBDQVJFVCBBTVBFUlNBTkQgUVVFU1RJT04KKworJXR5cGUgPGxleD4gaWRlbnRp
ZmllcgorJXR5cGUgPGludGVybT4gYXNzaWdubWVudF9vcGVyYXRvciB1bmFyeV9vcGVyYXRvcgor
JXR5cGUgPGludGVybS5pbnRlcm1UeXBlZE5vZGU+IHZhcmlhYmxlX2lkZW50aWZpZXIgcHJpbWFy
eV9leHByZXNzaW9uIHBvc3RmaXhfZXhwcmVzc2lvbgorJXR5cGUgPGludGVybS5pbnRlcm1UeXBl
ZE5vZGU+IGV4cHJlc3Npb24gaW50ZWdlcl9leHByZXNzaW9uIGFzc2lnbm1lbnRfZXhwcmVzc2lv
bgorJXR5cGUgPGludGVybS5pbnRlcm1UeXBlZE5vZGU+IHVuYXJ5X2V4cHJlc3Npb24gbXVsdGlw
bGljYXRpdmVfZXhwcmVzc2lvbiBhZGRpdGl2ZV9leHByZXNzaW9uCisldHlwZSA8aW50ZXJtLmlu
dGVybVR5cGVkTm9kZT4gcmVsYXRpb25hbF9leHByZXNzaW9uIGVxdWFsaXR5X2V4cHJlc3Npb24K
KyV0eXBlIDxpbnRlcm0uaW50ZXJtVHlwZWROb2RlPiBjb25kaXRpb25hbF9leHByZXNzaW9uIGNv
bnN0YW50X2V4cHJlc3Npb24KKyV0eXBlIDxpbnRlcm0uaW50ZXJtVHlwZWROb2RlPiBsb2dpY2Fs
X29yX2V4cHJlc3Npb24gbG9naWNhbF94b3JfZXhwcmVzc2lvbiBsb2dpY2FsX2FuZF9leHByZXNz
aW9uCisldHlwZSA8aW50ZXJtLmludGVybVR5cGVkTm9kZT4gc2hpZnRfZXhwcmVzc2lvbiBhbmRf
ZXhwcmVzc2lvbiBleGNsdXNpdmVfb3JfZXhwcmVzc2lvbiBpbmNsdXNpdmVfb3JfZXhwcmVzc2lv
bgorJXR5cGUgPGludGVybS5pbnRlcm1UeXBlZE5vZGU+IGZ1bmN0aW9uX2NhbGwgaW5pdGlhbGl6
ZXIgY29uZGl0aW9uIGNvbmRpdGlvbm9wdAorCisldHlwZSA8aW50ZXJtLmludGVybU5vZGU+IHRy
YW5zbGF0aW9uX3VuaXQgZnVuY3Rpb25fZGVmaW5pdGlvbgorJXR5cGUgPGludGVybS5pbnRlcm1O
b2RlPiBzdGF0ZW1lbnQgc2ltcGxlX3N0YXRlbWVudAorJXR5cGUgPGludGVybS5pbnRlcm1BZ2dy
ZWdhdGU+ICBzdGF0ZW1lbnRfbGlzdCBjb21wb3VuZF9zdGF0ZW1lbnQKKyV0eXBlIDxpbnRlcm0u
aW50ZXJtTm9kZT4gZGVjbGFyYXRpb25fc3RhdGVtZW50IHNlbGVjdGlvbl9zdGF0ZW1lbnQgZXhw
cmVzc2lvbl9zdGF0ZW1lbnQKKyV0eXBlIDxpbnRlcm0uaW50ZXJtTm9kZT4gZGVjbGFyYXRpb24g
ZXh0ZXJuYWxfZGVjbGFyYXRpb24KKyV0eXBlIDxpbnRlcm0uaW50ZXJtTm9kZT4gZm9yX2luaXRf
c3RhdGVtZW50IGNvbXBvdW5kX3N0YXRlbWVudF9ub19uZXdfc2NvcGUKKyV0eXBlIDxpbnRlcm0u
bm9kZVBhaXI+IHNlbGVjdGlvbl9yZXN0X3N0YXRlbWVudCBmb3JfcmVzdF9zdGF0ZW1lbnQKKyV0
eXBlIDxpbnRlcm0uaW50ZXJtTm9kZT4gaXRlcmF0aW9uX3N0YXRlbWVudCBqdW1wX3N0YXRlbWVu
dCBzdGF0ZW1lbnRfbm9fbmV3X3Njb3BlIHN0YXRlbWVudF93aXRoX3Njb3BlCisldHlwZSA8aW50
ZXJtPiBzaW5nbGVfZGVjbGFyYXRpb24gaW5pdF9kZWNsYXJhdG9yX2xpc3QKKworJXR5cGUgPGlu
dGVybT4gcGFyYW1ldGVyX2RlY2xhcmF0aW9uIHBhcmFtZXRlcl9kZWNsYXJhdG9yIHBhcmFtZXRl
cl90eXBlX3NwZWNpZmllcgorJXR5cGUgPGludGVybS5xdWFsaWZpZXI+IHBhcmFtZXRlcl9xdWFs
aWZpZXIKKworJXR5cGUgPGludGVybS5wcmVjaXNpb24+IHByZWNpc2lvbl9xdWFsaWZpZXIKKyV0
eXBlIDxpbnRlcm0udHlwZT4gdHlwZV9xdWFsaWZpZXIgZnVsbHlfc3BlY2lmaWVkX3R5cGUgdHlw
ZV9zcGVjaWZpZXIKKyV0eXBlIDxpbnRlcm0udHlwZT4gdHlwZV9zcGVjaWZpZXJfbm9fcHJlYyB0
eXBlX3NwZWNpZmllcl9ub25hcnJheQorJXR5cGUgPGludGVybS50eXBlPiBzdHJ1Y3Rfc3BlY2lm
aWVyCisldHlwZSA8aW50ZXJtLmZpZWxkPiBzdHJ1Y3RfZGVjbGFyYXRvcgorJXR5cGUgPGludGVy
bS5maWVsZExpc3Q+IHN0cnVjdF9kZWNsYXJhdG9yX2xpc3Qgc3RydWN0X2RlY2xhcmF0aW9uIHN0
cnVjdF9kZWNsYXJhdGlvbl9saXN0CisldHlwZSA8aW50ZXJtLmZ1bmN0aW9uPiBmdW5jdGlvbl9o
ZWFkZXIgZnVuY3Rpb25fZGVjbGFyYXRvciBmdW5jdGlvbl9pZGVudGlmaWVyCisldHlwZSA8aW50
ZXJtLmZ1bmN0aW9uPiBmdW5jdGlvbl9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIGZ1bmN0aW9uX2Nh
bGxfaGVhZGVyCisldHlwZSA8aW50ZXJtPiBmdW5jdGlvbl9jYWxsX2hlYWRlcl93aXRoX3BhcmFt
ZXRlcnMgZnVuY3Rpb25fY2FsbF9oZWFkZXJfbm9fcGFyYW1ldGVycyBmdW5jdGlvbl9jYWxsX2dl
bmVyaWMgZnVuY3Rpb25fcHJvdG90eXBlCisldHlwZSA8aW50ZXJtPiBmdW5jdGlvbl9jYWxsX29y
X21ldGhvZAorCislc3RhcnQgdHJhbnNsYXRpb25fdW5pdAorJSUKKworaWRlbnRpZmllcgorICAg
IDogSURFTlRJRklFUgorICAgIHwgVFlQRV9OQU1FCisKK3ZhcmlhYmxlX2lkZW50aWZpZXIKKyAg
ICA6IElERU5USUZJRVIgeworICAgICAgICAvLyBUaGUgc3ltYm9sIHRhYmxlIHNlYXJjaCB3YXMg
ZG9uZSBpbiB0aGUgbGV4aWNhbCBwaGFzZQorICAgICAgICBjb25zdCBUU3ltYm9sICpzeW1ib2wg
PSAkMS5zeW1ib2w7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqdmFyaWFibGUgPSAwOworCisg
ICAgICAgIGlmICghc3ltYm9sKQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cihAMSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciIsICQxLnN0cmluZy0+Y19zdHIoKSk7CisgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAo
IXN5bWJvbC0+aXNWYXJpYWJsZSgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcihAMSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgJDEuc3RyaW5nLT5jX3N0cigpKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8Y29uc3QgVFZhcmlhYmxl
Kj4oc3ltYm9sKTsKKworICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmRC
dWlsdEluKHZhcmlhYmxlLT5nZXROYW1lKCkpICYmCisgICAgICAgICAgICAgICAgIXZhcmlhYmxl
LT5nZXRFeHRlbnNpb24oKS5lbXB0eSgpICYmCisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXh0
ZW5zaW9uRXJyb3JDaGVjayhAMSwgdmFyaWFibGUtPmdldEV4dGVuc2lvbigpKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXZhcmlhYmxlKQorICAgICAgICB7CisgICAgICAg
ICAgICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQpOworICAgICAgICAgICAgVFZh
cmlhYmxlICpmYWtlVmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCQxLnN0cmluZywgdHlwZSk7Cisg
ICAgICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKmZha2VWYXJpYWJsZSk7Cisg
ICAgICAgICAgICB2YXJpYWJsZSA9IGZha2VWYXJpYWJsZTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICh2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQorICAg
ICAgICB7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uKiBjb25zdEFycmF5ID0gdmFyaWFibGUt
PmdldENvbnN0UG9pbnRlcigpOworICAgICAgICAgICAgVFR5cGUgdCh2YXJpYWJsZS0+Z2V0VHlw
ZSgpKTsKKyAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50
VW5pb24oY29uc3RBcnJheSwgdCwgQDEpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZh
cmlhYmxlLT5nZXRVbmlxdWVJZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXROYW1lKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAMSk7CisgICAgICAg
IH0KKworICAgICAgICAvLyBkb24ndCBkZWxldGUgJDEuc3RyaW5nLCBpdCdzIHVzZWQgYnkgZXJy
b3IgcmVjb3ZlcnksIGFuZCB0aGUgcG9vbAorICAgICAgICAvLyBwb3Agd2lsbCByZWNsYWltIHRo
ZSBtZW1vcnkKKyAgICB9CisgICAgOworCitwcmltYXJ5X2V4cHJlc3Npb24KKyAgICA6IHZhcmlh
YmxlX2lkZW50aWZpZXIgeworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IElOVENPTlNU
QU5UIHsKKyAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uWzFdOworICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoJDEuaSk7CisgICAgICAgICQk
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5
cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDEpOworICAgIH0KKyAgICB8IEZM
T0FUQ09OU1RBTlQgeworICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bMV07CisgICAgICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgkMS5mKTsKKyAg
ICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFy
cmF5LCBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAxKTsKKyAgICB9
CisgICAgfCBCT09MQ09OU1RBTlQgeworICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5
ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdCgk
MS5iKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlv
bih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDEp
OworICAgIH0KKyAgICB8IExFRlRfUEFSRU4gZXhwcmVzc2lvbiBSSUdIVF9QQVJFTiB7CisgICAg
ICAgICQkID0gJDI7CisgICAgfQorICAgIDsKKworcG9zdGZpeF9leHByZXNzaW9uCisgICAgOiBw
cmltYXJ5X2V4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IHBvc3Rm
aXhfZXhwcmVzc2lvbiBMRUZUX0JSQUNLRVQgaW50ZWdlcl9leHByZXNzaW9uIFJJR0hUX0JSQUNL
RVQgeworICAgICAgICAkJCA9IGNvbnRleHQtPmFkZEluZGV4RXhwcmVzc2lvbigkMSwgQDIsICQz
KTsKKyAgICB9CisgICAgfCBmdW5jdGlvbl9jYWxsIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9
CisgICAgfCBwb3N0Zml4X2V4cHJlc3Npb24gRE9UIGlkZW50aWZpZXIgeworICAgICAgICBpZiAo
JDEtPmlzQXJyYXkoKSkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDMsICJjYW5ub3Qg
YXBwbHkgZG90IG9wZXJhdG9yIHRvIGFuIGFycmF5IiwgIi4iKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgkMS0+aXNWZWN0b3IoKSkg
eworICAgICAgICAgICAgVFZlY3RvckZpZWxkcyBmaWVsZHM7CisgICAgICAgICAgICBpZiAoISBj
b250ZXh0LT5wYXJzZVZlY3RvckZpZWxkcygqJDMuc3RyaW5nLCAkMS0+Z2V0Tm9taW5hbFNpemUo
KSwgZmllbGRzLCBAMykpIHsKKyAgICAgICAgICAgICAgICBmaWVsZHMubnVtID0gMTsKKyAgICAg
ICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1swXSA9IDA7CisgICAgICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoJDEtPmdldFR5
cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgeyAvLyBjb25zdGFudCBmb2xkaW5nIGZv
ciB2ZWN0b3IgZmllbGRzCisgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRDb25zdFZl
Y3Rvck5vZGUoZmllbGRzLCAkMSwgQDMpOworICAgICAgICAgICAgICAgIGlmICgkJCA9PSAwKSB7
CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAg
ICAgICAgJCQgPSAkMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCks
ICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxQ29uc3QsIChpbnQpICgqJDMuc3RyaW5nKS5zaXplKCkp
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgVFN0cmluZyB2ZWN0b3JT
dHJpbmcgPSAqJDMuc3RyaW5nOworICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXgg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3dpenpsZShmaWVsZHMsIEAzKTsKKyAgICAgICAg
ICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BWZWN0b3JTd2l6
emxlLCAkMSwgaW5kZXgsIEAyKTsKKyAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgk
MS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAoaW50
KSB2ZWN0b3JTdHJpbmcuc2l6ZSgpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBp
ZiAoJDEtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgIFRNYXRyaXhGaWVsZHMgZmllbGRzOwor
ICAgICAgICAgICAgaWYgKCEgY29udGV4dC0+cGFyc2VNYXRyaXhGaWVsZHMoKiQzLnN0cmluZywg
JDEtPmdldE5vbWluYWxTaXplKCksIGZpZWxkcywgQDMpKSB7CisgICAgICAgICAgICAgICAgZmll
bGRzLndob2xlUm93ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZmllbGRzLndob2xlQ29sID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgZmllbGRzLnJvdyA9IDA7CisgICAgICAgICAgICAgICAg
ZmllbGRzLmNvbCA9IDA7CisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZpZWxkcy53
aG9sZUNvbCkgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAiIG5vbi1zY2Fs
YXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIpOworICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFy
cmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+
c2V0SUNvbnN0KDApOworICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJ
bnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMyk7CisgICAgICAgICAgICAgICAgJCQgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICQxLCBpbmRleCwg
QDIpOworICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUo
KSwgJDEtPmdldFByZWNpc2lvbigpLEV2cVRlbXBvcmFyeSwgJDEtPmdldE5vbWluYWxTaXplKCkp
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAq
dW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgIHVuaW9u
QXJyYXktPnNldElDb25zdChmaWVsZHMuY29sICogJDEtPmdldE5vbWluYWxTaXplKCkgKyBmaWVs
ZHMucm93KTsKKyAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBF
YnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDMpOworICAgICAgICAgICAgICAgICQkID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAkMSwgaW5kZXgsIEAyKTsK
KyAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQx
LT5nZXRQcmVjaXNpb24oKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKCQx
LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKKyAgICAgICAgICAgIGJvb2wgZmllbGRG
b3VuZCA9IGZhbHNlOworICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRzID0gJDEt
PmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgaTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgICAgICBpZiAoZmllbGRzW2ldLT5uYW1lKCkgPT0gKiQzLnN0cmluZykgewor
ICAgICAgICAgICAgICAgICAgICBmaWVsZEZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKGZpZWxkRm91bmQpIHsKKyAgICAgICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRR
dWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgeworICAgICAgICAgICAgICAgICAgICAkJCA9IGNvbnRl
eHQtPmFkZENvbnN0U3RydWN0KCokMy5zdHJpbmcsICQxLCBAMik7CisgICAgICAgICAgICAgICAg
ICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgJCQtPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGNoYW5nZSB0aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1cm4gdHlwZSwgbm90IG9mIHRo
ZSBzdHJ1Y3R1cmUgZmllbGQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHRoZSBzdHJ1
Y3R1cmUgZGVmaW5pdGlvbiBpcyBzaGFyZWQgYmV0d2VlbiB2YXJpb3VzIHN0cnVjdHVyZXMuCisg
ICAgICAgICAgICAgICAgICAgICAgICAkJC0+Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVy
KEV2cUNvbnN0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcg
Q29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNv
bnN0KGkpOworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgKmZpZWxkc1tpXS0+
dHlwZSgpLCBAMyk7CisgICAgICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0U3RydWN0LCAkMSwgaW5kZXgsIEAyKTsKKyAgICAg
ICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKEAyLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgJDMuc3RyaW5nLT5jX3N0
cigpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAg
ICAgJCQgPSAkMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKEAyLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1cmUs
IHZlY3Rvciwgb3IgbWF0cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgJDMuc3RyaW5nLT5jX3N0cigp
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkID0gJDE7
CisgICAgICAgIH0KKyAgICAgICAgLy8gZG9uJ3QgZGVsZXRlICQzLnN0cmluZywgaXQncyBmcm9t
IHRoZSBwb29sCisgICAgfQorICAgIHwgcG9zdGZpeF9leHByZXNzaW9uIElOQ19PUCB7CisgICAg
ICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKEAyLCAiKysiLCAkMSkpCisgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFVuYXJ5TWF0aChFT3BQb3N0SW5jcmVtZW50LCAkMSwgQDIsIGNvbnRleHQtPnN5bWJv
bFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnVu
YXJ5T3BFcnJvcihAMiwgIisrIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBERUNfT1AgeworICAgICAgICBpZiAoY29u
dGV4dC0+bFZhbHVlRXJyb3JDaGVjayhAMiwgIi0tIiwgJDEpKQorICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFy
eU1hdGgoRU9wUG9zdERlY3JlbWVudCwgJDEsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Cisg
ICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3Io
QDIsICItLSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkID0gJDE7CisgICAgICAgIH0KKyAgICB9CisgICAg
OworCitpbnRlZ2VyX2V4cHJlc3Npb24KKyAgICA6IGV4cHJlc3Npb24geworICAgICAgICBpZiAo
Y29udGV4dC0+aW50ZWdlckVycm9yQ2hlY2soJDEsICJbXSIpKQorICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICA7CisKK2Z1bmN0aW9u
X2NhbGwKKyAgICA6IGZ1bmN0aW9uX2NhbGxfb3JfbWV0aG9kIHsKKyAgICAgICAgVEZ1bmN0aW9u
KiBmbkNhbGwgPSAkMS5mdW5jdGlvbjsKKyAgICAgICAgVE9wZXJhdG9yIG9wID0gZm5DYWxsLT5n
ZXRCdWlsdEluT3AoKTsKKworICAgICAgICBpZiAob3AgIT0gRU9wTnVsbCkKKyAgICAgICAgewor
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFRoZW4gdGhpcyBzaG91bGQgYmUgYSBjb25z
dHJ1Y3Rvci4KKyAgICAgICAgICAgIC8vIERvbid0IGdvIHRocm91Z2ggdGhlIHN5bWJvbCB0YWJs
ZSBmb3IgY29uc3RydWN0b3JzLgorICAgICAgICAgICAgLy8gVGhlaXIgcGFyYW1ldGVycyB3aWxs
IGJlIHZlcmlmaWVkIGFsZ29yaXRobWljYWxseS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICBUVHlwZSB0eXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7ICAvLyB1c2UgdGhpcyB0byBnZXQg
dGhlIHR5cGUgYmFjaworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmNvbnN0cnVjdG9yRXJyb3JD
aGVjayhAMSwgJDEuaW50ZXJtTm9kZSwgKmZuQ2FsbCwgb3AsICZ0eXBlKSkgeworICAgICAgICAg
ICAgICAgICQkID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgICAgICAvLyBJdCdzIGEgY29uc3RydWN0b3IsIG9mIHR5cGUgJ3R5cGUnLgor
ICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRDb25z
dHJ1Y3RvcigkMS5pbnRlcm1Ob2RlLCAmdHlwZSwgb3AsIGZuQ2FsbCwgQDEpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcigwLCBvcCwgQDEpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgJCQtPnNldFR5cGUodHlwZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
LworICAgICAgICAgICAgLy8gTm90IGEgY29uc3RydWN0b3IuICBGaW5kIGl0IGluIHRoZSBzeW1i
b2wgdGFibGUuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uKiBm
bkNhbmRpZGF0ZTsKKyAgICAgICAgICAgIGJvb2wgYnVpbHRJbjsKKyAgICAgICAgICAgIGZuQ2Fu
ZGlkYXRlID0gY29udGV4dC0+ZmluZEZ1bmN0aW9uKEAxLCBmbkNhbGwsICZidWlsdEluKTsKKyAg
ICAgICAgICAgIGlmIChmbkNhbmRpZGF0ZSkgeworICAgICAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICAgICAgLy8gQSBkZWNsYXJlZCBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICAvLworICAg
ICAgICAgICAgICAgIGlmIChidWlsdEluICYmICFmbkNhbmRpZGF0ZS0+Z2V0RXh0ZW5zaW9uKCku
ZW1wdHkoKSAmJgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5leHRlbnNpb25FcnJvckNo
ZWNrKEAxLCBmbkNhbmRpZGF0ZS0+Z2V0RXh0ZW5zaW9uKCkpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgb3AgPSBmbkNhbmRpZGF0ZS0+Z2V0QnVpbHRJbk9wKCk7CisgICAgICAgICAgICAgICAgaWYg
KGJ1aWx0SW4gJiYgb3AgIT0gRU9wTnVsbCkgeworICAgICAgICAgICAgICAgICAgICAvLworICAg
ICAgICAgICAgICAgICAgICAvLyBBIGZ1bmN0aW9uIGNhbGwgbWFwcGVkIHRvIGEgYnVpbHQtaW4g
b3BlcmF0aW9uLgorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICBp
ZiAoZm5DYW5kaWRhdGUtPmdldFBhcmFtQ291bnQoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJlYXQgaXQgbGlrZSBhIGJ1
aWx0LWluIHVuYXJ5IG9wZXJhdG9yLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0
aChvcCwgJDEuaW50ZXJtTm9kZSwgQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICgkJCA9PSAwKSAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImJ1aWx0IGluIHVuYXJ5IG9wZXJhdG9yIGZ1
bmN0aW9uLiAgVHlwZTogIiA8PCBzdGF0aWNfY2FzdDxUSW50ZXJtVHlwZWQqPigkMS5pbnRlcm1O
b2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEuaW50ZXJtTm9kZS0+Z2V0TGluZSgp
LCAiIHdyb25nIG9wZXJhbmQgdHlwZSIsICJJbnRlcm5hbCBFcnJvciIsIGV4dHJhSW5mby5jX3N0
cigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZWUVSUk9SOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0
b3IoJDEuaW50ZXJtQWdncmVnYXRlLCBvcCwgQDEpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBh
IHJlYWwgZnVuY3Rpb24gY2FsbAorCisgICAgICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKCQxLmludGVybUFnZ3JlZ2F0ZSwgRU9w
RnVuY3Rpb25DYWxsLCBAMSk7CisgICAgICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKGZuQ2Fu
ZGlkYXRlLT5nZXRSZXR1cm5UeXBlKCkpOworCisgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMg
aXMgaG93IHdlIGtub3cgd2hldGhlciB0aGUgZ2l2ZW4gZnVuY3Rpb24gaXMgYSBidWlsdEluIGZ1
bmN0aW9uIG9yIGEgdXNlciBkZWZpbmVkIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgIC8v
IGlmIGJ1aWx0SW4gPT0gZmFsc2UsIGl0J3MgYSB1c2VyRGVmaW5lZCAtPiBjb3VsZCBiZSBhbiBv
dmVybG9hZGVkIGJ1aWx0SW4gZnVuY3Rpb24gYWxzbworICAgICAgICAgICAgICAgICAgICAvLyBp
ZiBidWlsdEluID09IHRydWUsIGl0J3MgZGVmaW5pdGVseSBhIGJ1aWx0SW4gZnVuY3Rpb24gd2l0
aCBFT3BOdWxsCisgICAgICAgICAgICAgICAgICAgIGlmICghYnVpbHRJbikKKyAgICAgICAgICAg
ICAgICAgICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRVc2VyRGVmaW5lZCgpOworICAg
ICAgICAgICAgICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0TmFtZShmbkNhbmRpZGF0
ZS0+Z2V0TWFuZ2xlZE5hbWUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgVFF1YWxpZmllciBx
dWFsOworICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZuQ2FuZGlk
YXRlLT5nZXRQYXJhbUNvdW50KCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcXVh
bCA9IGZuQ2FuZGlkYXRlLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChxdWFsID09IEV2cU91dCB8fCBxdWFsID09IEV2cUluT3V0
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9y
Q2hlY2soJCQtPmdldExpbmUoKSwgImFzc2lnbiIsICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRT
ZXF1ZW5jZSgpW2ldLT5nZXRBc1R5cGVkKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmludGVybU5vZGUtPmdldExpbmUoKSwgIkNvbnN0YW50
IHZhbHVlIGNhbm5vdCBiZSBwYXNzZWQgZm9yICdvdXQnIG9yICdpbm91dCcgcGFyYW1ldGVycy4i
LCAiRXJyb3IiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAkJC0+c2V0VHlwZShmbkNhbmRpZGF0ZS0+Z2V0UmV0dXJuVHlwZSgpKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gZXJyb3IgbWVzc2FnZSB3YXMg
cHV0IG91dCBieSBQYUZpbmRGdW5jdGlvbigpCisgICAgICAgICAgICAgICAgLy8gUHV0IG9uIGEg
ZHVtbXkgbm9kZSBmb3IgZXJyb3IgcmVjb3ZlcnkKKyAgICAgICAgICAgICAgICBDb25zdGFudFVu
aW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAg
dW5pb25BcnJheS0+c2V0RkNvbnN0KDAuMGYpOworICAgICAgICAgICAgICAgICQkID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Rmxv
YXQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMSk7CisgICAgICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGRlbGV0ZSBm
bkNhbGw7CisgICAgfQorICAgIDsKKworZnVuY3Rpb25fY2FsbF9vcl9tZXRob2QKKyAgICA6IGZ1
bmN0aW9uX2NhbGxfZ2VuZXJpYyB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgcG9z
dGZpeF9leHByZXNzaW9uIERPVCBmdW5jdGlvbl9jYWxsX2dlbmVyaWMgeworICAgICAgICBjb250
ZXh0LT5lcnJvcihAMywgIm1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQiLCAiIik7CisgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQgPSAkMzsKKyAgICB9CisgICAgOworCitm
dW5jdGlvbl9jYWxsX2dlbmVyaWMKKyAgICA6IGZ1bmN0aW9uX2NhbGxfaGVhZGVyX3dpdGhfcGFy
YW1ldGVycyBSSUdIVF9QQVJFTiB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgZnVu
Y3Rpb25fY2FsbF9oZWFkZXJfbm9fcGFyYW1ldGVycyBSSUdIVF9QQVJFTiB7CisgICAgICAgICQk
ID0gJDE7CisgICAgfQorICAgIDsKKworZnVuY3Rpb25fY2FsbF9oZWFkZXJfbm9fcGFyYW1ldGVy
cworICAgIDogZnVuY3Rpb25fY2FsbF9oZWFkZXIgVk9JRF9UWVBFIHsKKyAgICAgICAgJCQuZnVu
Y3Rpb24gPSAkMTsKKyAgICAgICAgJCQuaW50ZXJtTm9kZSA9IDA7CisgICAgfQorICAgIHwgZnVu
Y3Rpb25fY2FsbF9oZWFkZXIgeworICAgICAgICAkJC5mdW5jdGlvbiA9ICQxOworICAgICAgICAk
JC5pbnRlcm1Ob2RlID0gMDsKKyAgICB9CisgICAgOworCitmdW5jdGlvbl9jYWxsX2hlYWRlcl93
aXRoX3BhcmFtZXRlcnMKKyAgICA6IGZ1bmN0aW9uX2NhbGxfaGVhZGVyIGFzc2lnbm1lbnRfZXhw
cmVzc2lvbiB7CisgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7IDAsIG5ldyBUVHlwZSgkMi0+
Z2V0VHlwZSgpKSB9OworICAgICAgICAkMS0+YWRkUGFyYW1ldGVyKHBhcmFtKTsKKyAgICAgICAg
JCQuZnVuY3Rpb24gPSAkMTsKKyAgICAgICAgJCQuaW50ZXJtTm9kZSA9ICQyOworICAgIH0KKyAg
ICB8IGZ1bmN0aW9uX2NhbGxfaGVhZGVyX3dpdGhfcGFyYW1ldGVycyBDT01NQSBhc3NpZ25tZW50
X2V4cHJlc3Npb24geworICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUo
JDMtPmdldFR5cGUoKSkgfTsKKyAgICAgICAgJDEuZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJh
bSk7CisgICAgICAgICQkLmZ1bmN0aW9uID0gJDEuZnVuY3Rpb247CisgICAgICAgICQkLmludGVy
bU5vZGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1Ob2Rl
LCAkMywgQDIpOworICAgIH0KKyAgICA7CisKK2Z1bmN0aW9uX2NhbGxfaGVhZGVyCisgICAgOiBm
dW5jdGlvbl9pZGVudGlmaWVyIExFRlRfUEFSRU4geworICAgICAgICAkJCA9ICQxOworICAgIH0K
KyAgICA7CisKKy8vIEdyYW1tYXIgTm90ZTogIENvbnN0cnVjdG9ycyBsb29rIGxpa2UgZnVuY3Rp
b25zLCBidXQgYXJlIHJlY29nbml6ZWQgYXMgdHlwZXMuCisKK2Z1bmN0aW9uX2lkZW50aWZpZXIK
KyAgICA6IHR5cGVfc3BlY2lmaWVyX25vbmFycmF5IHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8g
Q29uc3RydWN0b3IKKyAgICAgICAgLy8KKyAgICAgICAgVE9wZXJhdG9yIG9wID0gRU9wTnVsbDsK
KyAgICAgICAgaWYgKCQxLnVzZXJEZWYpIHsKKyAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0
U3RydWN0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3dpdGNoICgkMS50eXBlKSB7
CisgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgICAgIGlmICgkMS5tYXRy
aXgpIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoKCQxLnNpemUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdE1hdDI7ICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVjdE1hdDM7ICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVjdE1hdDQ7ICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIHN3aXRjaCgkMS5zaXplKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTog
b3AgPSBFT3BDb25zdHJ1Y3RGbG9hdDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
Mjogb3AgPSBFT3BDb25zdHJ1Y3RWZWMyOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RWZWMzOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RWZWM0OyAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgICAgICBzd2l0Y2goJDEuc2l6ZSkgeworICAg
ICAgICAgICAgICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RJbnQ7ICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdElWZWMyOyBicmVhazsKKyAgICAg
ICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0SVZlYzM7IGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RJVmVjNDsgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRC
b29sOgorICAgICAgICAgICAgICAgIHN3aXRjaCgkMS5zaXplKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSAxOiBvcCA9IEVPcENvbnN0cnVjdEJvb2w7ICBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlIDI6IG9wID0gRU9wQ29uc3RydWN0QlZlYzI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RCVmVjMzsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz
ZSA0OiBvcCA9IEVPcENvbnN0cnVjdEJWZWM0OyBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvcCA9PSBFT3BOdWxsKSB7CisgICAgICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoQDEsICJjYW5ub3QgY29uc3RydWN0IHRoaXMgdHlwZSIsIGdldEJh
c2ljU3RyaW5nKCQxLnR5cGUpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgICAgICAgICAgJDEudHlwZSA9IEVidEZsb2F0OworICAgICAgICAgICAgICAgIG9w
ID0gRU9wQ29uc3RydWN0RmxvYXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
VFN0cmluZyB0ZW1wU3RyaW5nOworICAgICAgICBUVHlwZSB0eXBlKCQxKTsKKyAgICAgICAgVEZ1
bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oJnRlbXBTdHJpbmcsIHR5cGUsIG9wKTsK
KyAgICAgICAgJCQgPSBmdW5jdGlvbjsKKyAgICB9CisgICAgfCBJREVOVElGSUVSIHsKKyAgICAg
ICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjayhAMSwgKiQxLnN0cmluZykpCisgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwg
RWJwVW5kZWZpbmVkKTsKKyAgICAgICAgVEZ1bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rp
b24oJDEuc3RyaW5nLCB0eXBlKTsKKyAgICAgICAgJCQgPSBmdW5jdGlvbjsKKyAgICB9CisgICAg
OworCit1bmFyeV9leHByZXNzaW9uCisgICAgOiBwb3N0Zml4X2V4cHJlc3Npb24geworICAgICAg
ICAkJCA9ICQxOworICAgIH0KKyAgICB8IElOQ19PUCB1bmFyeV9leHByZXNzaW9uIHsKKyAgICAg
ICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soQDEsICIrKyIsICQyKSkKKyAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkVW5hcnlNYXRoKEVPcFByZUluY3JlbWVudCwgJDIsIEAxLCBjb250ZXh0LT5zeW1ib2xU
YWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT51bmFy
eU9wRXJyb3IoQDEsICIrKyIsICQyLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkID0gJDI7CisgICAgICAgIH0KKyAg
ICB9CisgICAgfCBERUNfT1AgdW5hcnlfZXhwcmVzc2lvbiB7CisgICAgICAgIGlmIChjb250ZXh0
LT5sVmFsdWVFcnJvckNoZWNrKEAxLCAiLS0iLCAkMikpCisgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0
aChFT3BQcmVEZWNyZW1lbnQsICQyLCBAMSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAg
ICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKEAxLCAi
LS0iLCAkMi0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICAkJCA9ICQyOworICAgICAgICB9CisgICAgfQorICAgIHwgdW5h
cnlfb3BlcmF0b3IgdW5hcnlfZXhwcmVzc2lvbiB7CisgICAgICAgIGlmICgkMS5vcCAhPSBFT3BO
dWxsKSB7CisgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1h
dGgoJDEub3AsICQyLCBAMSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAgICAgaWYg
KCQkID09IDApIHsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBlcnJvck9wID0gIiI7Cisg
ICAgICAgICAgICAgICAgc3dpdGNoKCQxLm9wKSB7CisgICAgICAgICAgICAgICAgY2FzZSBFT3BO
ZWdhdGl2ZTogICBlcnJvck9wID0gIi0iOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEVP
cExvZ2ljYWxOb3Q6IGVycm9yT3AgPSAiISI7IGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1
bHQ6IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb250ZXh0LT51
bmFyeU9wRXJyb3IoQDEsIGVycm9yT3AsICQyLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgJCQgPSAkMjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAkJCA9ICQyOworICAg
IH0KKyAgICA7CisvLyBHcmFtbWFyIE5vdGU6ICBObyB0cmFkaXRpb25hbCBzdHlsZSB0eXBlIGNh
c3RzLgorCit1bmFyeV9vcGVyYXRvcgorICAgIDogUExVUyAgeyAkJC5vcCA9IEVPcE51bGw7IH0K
KyAgICB8IERBU0ggIHsgJCQub3AgPSBFT3BOZWdhdGl2ZTsgfQorICAgIHwgQkFORyAgeyAkJC5v
cCA9IEVPcExvZ2ljYWxOb3Q7IH0KKyAgICA7CisvLyBHcmFtbWFyIE5vdGU6ICBObyAnKicgb3Ig
JyYnIHVuYXJ5IG9wcy4gIFBvaW50ZXJzIGFyZSBub3Qgc3VwcG9ydGVkLgorCittdWx0aXBsaWNh
dGl2ZV9leHByZXNzaW9uCisgICAgOiB1bmFyeV9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAg
IHwgbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbiBTVEFSIHVuYXJ5X2V4cHJlc3Npb24geworICAg
ICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcE11bCwgJDEs
ICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgewor
ICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIioiLCAkMS0+Z2V0Q29tcGxl
dGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICB8IG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24gU0xBU0ggdW5hcnlfZXhwcmVzc2lvbiB7Cisg
ICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wRGl2LCAk
MSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7
CisgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiLyIsICQxLT5nZXRDb21w
bGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9ICQxOworICAgICAgICB9CisgICAgfQor
ICAgIDsKKworYWRkaXRpdmVfZXhwcmVzc2lvbgorICAgIDogbXVsdGlwbGljYXRpdmVfZXhwcmVz
c2lvbiB7ICQkID0gJDE7IH0KKyAgICB8IGFkZGl0aXZlX2V4cHJlc3Npb24gUExVUyBtdWx0aXBs
aWNhdGl2ZV9leHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkQmluYXJ5TWF0aChFT3BBZGQsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsK
KyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJy
b3IoQDIsICIrIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmlu
ZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkID0g
JDE7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBhZGRpdGl2ZV9leHByZXNzaW9uIERBU0ggbXVs
dGlwbGljYXRpdmVfZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZEJpbmFyeU1hdGgoRU9wU3ViLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJs
ZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlP
cEVycm9yKEAyLCAiLSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVT
dHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAk
JCA9ICQxOworICAgICAgICB9CisgICAgfQorICAgIDsKKworc2hpZnRfZXhwcmVzc2lvbgorICAg
IDogYWRkaXRpdmVfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICA7CisKK3JlbGF0aW9uYWxf
ZXhwcmVzc2lvbgorICAgIDogc2hpZnRfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICB8IHJl
bGF0aW9uYWxfZXhwcmVzc2lvbiBMRUZUX0FOR0xFIHNoaWZ0X2V4cHJlc3Npb24geworICAgICAg
ICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExlc3NUaGFuLCAk
MSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7
CisgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiPCIsICQxLT5nZXRDb21w
bGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0g
bmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3Qo
ZmFsc2UpOworICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3Rh
bnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0
KSwgQDIpOworICAgICAgICB9CisgICAgfQorICAgIHwgcmVsYXRpb25hbF9leHByZXNzaW9uIFJJ
R0hUX0FOR0xFIHNoaWZ0X2V4cHJlc3Npb24gIHsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbiwgJDEsICQzLCBAMiwgY29udGV4
dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgY29u
dGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIj4iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMt
PmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
WzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAg
ICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJh
eSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAyKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICB8IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiBMRV9PUCBzaGlmdF9leHByZXNz
aW9uICB7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgo
RU9wTGVzc1RoYW5FcXVhbCwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAg
ICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihA
MiwgIjw9IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygp
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50
VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVu
aW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVi
cFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMik7CisgICAgICAgIH0KKyAgICB9CisgICAgfCByZWxh
dGlvbmFsX2V4cHJlc3Npb24gR0VfT1Agc2hpZnRfZXhwcmVzc2lvbiAgeworICAgICAgICAkJCA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuRXF1YWws
ICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDAp
IHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICI+PSIsICQxLT5nZXRD
b21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5
ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29u
c3QoZmFsc2UpOworICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29u
c3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNv
bnN0KSwgQDIpOworICAgICAgICB9CisgICAgfQorICAgIDsKKworZXF1YWxpdHlfZXhwcmVzc2lv
bgorICAgIDogcmVsYXRpb25hbF9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIHwgZXF1YWxp
dHlfZXhwcmVzc2lvbiBFUV9PUCByZWxhdGlvbmFsX2V4cHJlc3Npb24gIHsKKyAgICAgICAgJCQg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BFcXVhbCwgJDEsICQzLCBA
MiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAg
ICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIj09IiwgJDEtPmdldENvbXBsZXRlU3Ry
aW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29u
c3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7
CisgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9u
KHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMik7
CisgICAgICAgIH0KKyAgICB9CisgICAgfCBlcXVhbGl0eV9leHByZXNzaW9uIE5FX09QIHJlbGF0
aW9uYWxfZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZEJpbmFyeU1hdGgoRU9wTm90RXF1YWwsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxl
KTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9w
RXJyb3IoQDIsICIhPSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVT
dHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBD
b25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAg
ICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgJCQgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRC
b29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDIpOworICAgICAgICB9CisgICAgfQorICAg
IDsKKworYW5kX2V4cHJlc3Npb24KKyAgICA6IGVxdWFsaXR5X2V4cHJlc3Npb24geyAkJCA9ICQx
OyB9CisgICAgOworCitleGNsdXNpdmVfb3JfZXhwcmVzc2lvbgorICAgIDogYW5kX2V4cHJlc3Np
b24geyAkJCA9ICQxOyB9CisgICAgOworCitpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbgorICAgIDog
ZXhjbHVzaXZlX29yX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAgOworCitsb2dpY2FsX2Fu
ZF9leHByZXNzaW9uCisgICAgOiBpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0K
KyAgICB8IGxvZ2ljYWxfYW5kX2V4cHJlc3Npb24gQU5EX09QIGluY2x1c2l2ZV9vcl9leHByZXNz
aW9uIHsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChF
T3BMb2dpY2FsQW5kLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAg
IGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAi
JiYiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwor
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlv
biAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25B
cnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5k
ZWZpbmVkLCBFdnFDb25zdCksIEAyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisKK2xvZ2lj
YWxfeG9yX2V4cHJlc3Npb24KKyAgICA6IGxvZ2ljYWxfYW5kX2V4cHJlc3Npb24geyAkJCA9ICQx
OyB9CisgICAgfCBsb2dpY2FsX3hvcl9leHByZXNzaW9uIFhPUl9PUCBsb2dpY2FsX2FuZF9leHBy
ZXNzaW9uICB7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1h
dGgoRU9wTG9naWNhbFhvciwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAg
ICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihA
MiwgIl5eIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygp
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50
VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVu
aW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVi
cFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMik7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCits
b2dpY2FsX29yX2V4cHJlc3Npb24KKyAgICA6IGxvZ2ljYWxfeG9yX2V4cHJlc3Npb24geyAkJCA9
ICQxOyB9CisgICAgfCBsb2dpY2FsX29yX2V4cHJlc3Npb24gT1JfT1AgbG9naWNhbF94b3JfZXhw
cmVzc2lvbiAgeworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlN
YXRoKEVPcExvZ2ljYWxPciwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAg
ICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihA
MiwgInx8IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygp
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50
VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVu
aW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVi
cFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMik7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCitj
b25kaXRpb25hbF9leHByZXNzaW9uCisgICAgOiBsb2dpY2FsX29yX2V4cHJlc3Npb24geyAkJCA9
ICQxOyB9CisgICAgfCBsb2dpY2FsX29yX2V4cHJlc3Npb24gUVVFU1RJT04gZXhwcmVzc2lvbiBD
T0xPTiBhc3NpZ25tZW50X2V4cHJlc3Npb24geworICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJy
b3JDaGVjayhAMiwgJDEpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAg
ICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFNlbGVjdGlvbigkMSwgJDMsICQ1LCBA
Mik7CisgICAgICAgIGlmICgkMy0+Z2V0VHlwZSgpICE9ICQ1LT5nZXRUeXBlKCkpCisgICAgICAg
ICAgICAkJCA9IDA7CisKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmJpbmFyeU9wRXJyb3IoQDIsICI6IiwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCksICQ1LT5n
ZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgICAgICQkID0gJDU7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCithc3NpZ25tZW50
X2V4cHJlc3Npb24KKyAgICA6IGNvbmRpdGlvbmFsX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9Cisg
ICAgfCB1bmFyeV9leHByZXNzaW9uIGFzc2lnbm1lbnRfb3BlcmF0b3IgYXNzaWdubWVudF9leHBy
ZXNzaW9uIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soQDIsICJhc3Np
Z24iLCAkMSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQkID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEFzc2lnbigkMi5vcCwgJDEsICQzLCBAMik7CisgICAg
ICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5hc3NpZ25FcnJvcihAMiwg
ImFzc2lnbiIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmco
KSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9ICQx
OworICAgICAgICB9CisgICAgfQorICAgIDsKKworYXNzaWdubWVudF9vcGVyYXRvcgorICAgIDog
RVFVQUwgICAgICAgIHsgJCQub3AgPSBFT3BBc3NpZ247IH0KKyAgICB8IE1VTF9BU1NJR04gICB7
ICQkLm9wID0gRU9wTXVsQXNzaWduOyB9CisgICAgfCBESVZfQVNTSUdOICAgeyAkJC5vcCA9IEVP
cERpdkFzc2lnbjsgfQorICAgIHwgQUREX0FTU0lHTiAgIHsgJCQub3AgPSBFT3BBZGRBc3NpZ247
IH0KKyAgICB8IFNVQl9BU1NJR04gICB7ICQkLm9wID0gRU9wU3ViQXNzaWduOyB9CisgICAgOwor
CitleHByZXNzaW9uCisgICAgOiBhc3NpZ25tZW50X2V4cHJlc3Npb24geworICAgICAgICAkJCA9
ICQxOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gQ09NTUEgYXNzaWdubWVudF9leHByZXNzaW9u
IHsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29tbWEoJDEsICQzLCBA
Mik7CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlP
cEVycm9yKEAyLCAiLCIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVT
dHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAk
JCA9ICQzOworICAgICAgICB9CisgICAgfQorICAgIDsKKworY29uc3RhbnRfZXhwcmVzc2lvbgor
ICAgIDogY29uZGl0aW9uYWxfZXhwcmVzc2lvbiB7CisgICAgICAgIGlmIChjb250ZXh0LT5jb25z
dEVycm9yQ2hlY2soJDEpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICAkJCA9ICQxOworICAgIH0KKyAgICA7CisKK2RlY2xhcmF0aW9uCisgICAgOiBmdW5jdGlvbl9w
cm90b3R5cGUgU0VNSUNPTE9OICAgeworICAgICAgICBURnVuY3Rpb24gJmZ1bmN0aW9uID0gKigk
MS5mdW5jdGlvbik7CisgICAgICAgIAorICAgICAgICBUSW50ZXJtQWdncmVnYXRlICpwcm90b3R5
cGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgcHJvdG90eXBlLT5zZXRUeXBlKGZ1
bmN0aW9uLmdldFJldHVyblR5cGUoKSk7CisgICAgICAgIHByb3RvdHlwZS0+c2V0TmFtZShmdW5j
dGlvbi5nZXROYW1lKCkpOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAg
Y29uc3QgVFBhcmFtZXRlciAmcGFyYW0gPSBmdW5jdGlvbi5nZXRQYXJhbShpKTsKKyAgICAgICAg
ICAgIGlmIChwYXJhbS5uYW1lICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
VFZhcmlhYmxlIHZhcmlhYmxlKHBhcmFtLm5hbWUsICpwYXJhbS50eXBlKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBwcm90b3R5cGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
Z3Jvd0FnZ3JlZ2F0ZShwcm90b3R5cGUsIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wo
dmFyaWFibGUuZ2V0VW5pcXVlSWQoKSwgdmFyaWFibGUuZ2V0TmFtZSgpLCB2YXJpYWJsZS5nZXRU
eXBlKCksIEAxKSwgQDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHByb3RvdHlwZSA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5ncm93QWdncmVnYXRlKHByb3RvdHlwZSwgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJv
bCgwLCAiIiwgKnBhcmFtLnR5cGUsIEAxKSwgQDEpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBwcm90b3R5cGUtPnNldE9wKEVPcFByb3RvdHlwZSk7CisgICAg
ICAgICQkID0gcHJvdG90eXBlOworCisgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgp
OworICAgIH0KKyAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IFNFTUlDT0xPTiB7CisgICAgICAg
IGlmICgkMS5pbnRlcm1BZ2dyZWdhdGUpCisgICAgICAgICAgICAkMS5pbnRlcm1BZ2dyZWdhdGUt
PnNldE9wKEVPcERlY2xhcmF0aW9uKTsKKyAgICAgICAgJCQgPSAkMS5pbnRlcm1BZ2dyZWdhdGU7
CisgICAgfQorICAgIHwgUFJFQ0lTSU9OIHByZWNpc2lvbl9xdWFsaWZpZXIgdHlwZV9zcGVjaWZp
ZXJfbm9fcHJlYyBTRU1JQ09MT04geworICAgICAgICBpZiAoKCQyID09IEVicEhpZ2gpICYmIChj
b250ZXh0LT5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikgJiYgIWNvbnRleHQtPmZy
YWdtZW50UHJlY2lzaW9uSGlnaCkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJw
cmVjaXNpb24gaXMgbm90IHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXIiLCAiaGlnaHAiKTsK
KyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
IWNvbnRleHQtPnN5bWJvbFRhYmxlLnNldERlZmF1bHRQcmVjaXNpb24oICQzLCAkMiApKSB7Cisg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgImlsbGVnYWwgdHlwZSBhcmd1bWVudCBmb3Ig
ZGVmYXVsdCBwcmVjaXNpb24gcXVhbGlmaWVyIiwgZ2V0QmFzaWNTdHJpbmcoJDMudHlwZSkpOwor
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgICQkID0g
MDsKKyAgICB9CisgICAgOworCitmdW5jdGlvbl9wcm90b3R5cGUKKyAgICA6IGZ1bmN0aW9uX2Rl
Y2xhcmF0b3IgUklHSFRfUEFSRU4gIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gTXVsdGlwbGUg
ZGVjbGFyYXRpb25zIG9mIHRoZSBzYW1lIGZ1bmN0aW9uIGFyZSBhbGxvd2VkLgorICAgICAgICAv
LworICAgICAgICAvLyBJZiB0aGlzIGlzIGEgZGVmaW5pdGlvbiwgdGhlIGRlZmluaXRpb24gcHJv
ZHVjdGlvbiBjb2RlIHdpbGwgY2hlY2sgZm9yIHJlZGVmaW5pdGlvbnMKKyAgICAgICAgLy8gKHdl
IGRvbid0IGtub3cgYXQgdGhpcyBwb2ludCBpZiBpdCdzIGEgZGVmaW5pdGlvbiBvciBub3QpLgor
ICAgICAgICAvLworICAgICAgICAvLyBSZWRlY2xhcmF0aW9ucyBhcmUgYWxsb3dlZC4gIEJ1dCwg
cmV0dXJuIHR5cGVzIGFuZCBwYXJhbWV0ZXIgcXVhbGlmaWVycyBtdXN0IG1hdGNoLgorICAgICAg
ICAvLworICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24q
Pihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCQxLT5nZXRNYW5nbGVkTmFtZSgpKSk7CisgICAg
ICAgIGlmIChwcmV2RGVjKSB7CisgICAgICAgICAgICBpZiAocHJldkRlYy0+Z2V0UmV0dXJuVHlw
ZSgpICE9ICQxLT5nZXRSZXR1cm5UeXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcihAMiwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSByZXR1cm4g
dHlwZSIsICQxLT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNTdHJpbmcoKSk7CisgICAgICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBwcmV2RGVjLT5nZXRQYXJhbUNvdW50KCk7ICsraSkgeworICAg
ICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIo
KSAhPSAkMS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhh
dmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAkMS0+Z2V0UGFyYW0oaSkudHlwZS0+
Z2V0UXVhbGlmaWVyU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gQ2hlY2sgZm9yIHByZXZpb3VzbHkgZGVjbGFyZWQgdmFyaWFi
bGVzIHVzaW5nIHRoZSBzYW1lIG5hbWUuCisgICAgICAgIC8vCisgICAgICAgIFRTeW1ib2wgKnBy
ZXZTeW0gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCQxLT5nZXROYW1lKCkpOworICAgICAg
ICBpZiAocHJldlN5bSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFwcmV2U3ltLT5pc0Z1
bmN0aW9uKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
QDIsICJyZWRlZmluaXRpb24iLCAkMS0+Z2V0TmFtZSgpLmNfc3RyKCksICJmdW5jdGlvbiIpOwor
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEluc2VydCB0aGUg
dW5tYW5nbGVkIG5hbWUgdG8gZGV0ZWN0IHBvdGVudGlhbCBmdXR1cmUgcmVkZWZpbml0aW9uIGFz
IGEgdmFyaWFibGUuCisgICAgICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5nZXRPdXRlckxl
dmVsKCktPmluc2VydCgkMS0+Z2V0TmFtZSgpLCAqJDEpOworICAgICAgICB9CisKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHJlZGVjbGFyYXRpb24sIGl0IGNvdWxkIGFsc28g
YmUgYSBkZWZpbml0aW9uLAorICAgICAgICAvLyBpbiB3aGljaCBjYXNlLCB3ZSB3YW50IHRvIHVz
ZSB0aGUgdmFyaWFibGUgbmFtZXMgZnJvbSB0aGlzIG9uZSwgYW5kIG5vdCB0aGUgb25lIHRoYXQn
cworICAgICAgICAvLyBiZWluZyByZWRlY2xhcmVkLiAgU28sIHBhc3MgYmFjayB1cCB0aGlzIGRl
Y2xhcmF0aW9uLCBub3QgdGhlIG9uZSBpbiB0aGUgc3ltYm9sIHRhYmxlLgorICAgICAgICAvLwor
ICAgICAgICAkJC5mdW5jdGlvbiA9ICQxOworCisgICAgICAgIC8vIFdlJ3JlIGF0IHRoZSBpbm5l
ciBzY29wZSBsZXZlbCBvZiB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudHMgYW5kIGJvZHkgc3RhdGVt
ZW50LgorICAgICAgICAvLyBBZGQgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZSB0byB0aGUgc3Vycm91
bmRpbmcgc2NvcGUgaW5zdGVhZC4KKyAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUuZ2V0T3V0
ZXJMZXZlbCgpLT5pbnNlcnQoKiQkLmZ1bmN0aW9uKTsKKyAgICB9CisgICAgOworCitmdW5jdGlv
bl9kZWNsYXJhdG9yCisgICAgOiBmdW5jdGlvbl9oZWFkZXIgeworICAgICAgICAkJCA9ICQxOwor
ICAgIH0KKyAgICB8IGZ1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMgeworICAgICAgICAk
JCA9ICQxOworICAgIH0KKyAgICA7CisKKworZnVuY3Rpb25faGVhZGVyX3dpdGhfcGFyYW1ldGVy
cworICAgIDogZnVuY3Rpb25faGVhZGVyIHBhcmFtZXRlcl9kZWNsYXJhdGlvbiB7CisgICAgICAg
IC8vIEFkZCB0aGUgcGFyYW1ldGVyCisgICAgICAgICQkID0gJDE7CisgICAgICAgIGlmICgkMi5w
YXJhbS50eXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKQorICAgICAgICAgICAgJDEtPmFk
ZFBhcmFtZXRlcigkMi5wYXJhbSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRlbGV0ZSAk
Mi5wYXJhbS50eXBlOworICAgIH0KKyAgICB8IGZ1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRl
cnMgQ09NTUEgcGFyYW1ldGVyX2RlY2xhcmF0aW9uIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8g
T25seSBmaXJzdCBwYXJhbWV0ZXIgb2Ygb25lLXBhcmFtZXRlciBmdW5jdGlvbnMgY2FuIGJlIHZv
aWQKKyAgICAgICAgLy8gVGhlIGNoZWNrIGZvciBuYW1lZCBwYXJhbWV0ZXJzIG5vdCBiZWluZyB2
b2lkIGlzIGRvbmUgaW4gcGFyYW1ldGVyX2RlY2xhcmF0b3IKKyAgICAgICAgLy8KKyAgICAgICAg
aWYgKCQzLnBhcmFtLnR5cGUtPmdldEJhc2ljVHlwZSgpID09IEVidFZvaWQpIHsKKyAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAvLyBUaGlzIHBhcmFtZXRlciA+IGZpcnN0IGlzIHZvaWQKKyAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgImNhbm5vdCBiZSBh
biBhcmd1bWVudCB0eXBlIGV4Y2VwdCBmb3IgJyh2b2lkKSciLCAidm9pZCIpOworICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgZGVsZXRlICQzLnBhcmFtLnR5cGU7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBBZGQgdGhlIHBhcmFtZXRlcgorICAg
ICAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgICAgICQxLT5hZGRQYXJhbWV0ZXIoJDMucGFyYW0p
OworICAgICAgICB9CisgICAgfQorICAgIDsKKworZnVuY3Rpb25faGVhZGVyCisgICAgOiBmdWxs
eV9zcGVjaWZpZWRfdHlwZSBJREVOVElGSUVSIExFRlRfUEFSRU4geworICAgICAgICBpZiAoJDEu
cXVhbGlmaWVyICE9IEV2cUdsb2JhbCAmJiAkMS5xdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7
CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgIm5vIHF1YWxpZmllcnMgYWxsb3dlZCBm
b3IgZnVuY3Rpb24gcmV0dXJuIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikpOwor
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIC8vIG1h
a2Ugc3VyZSBhIHNhbXBsZXIgaXMgbm90IGludm9sdmVkIGFzIHdlbGwuLi4KKyAgICAgICAgaWYg
KGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soQDIsICQxKSkKKyAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAvLyBBZGQgdGhlIGZ1bmN0aW9uIGFzIGEg
cHJvdG90eXBlIGFmdGVyIHBhcnNpbmcgaXQgKHdlIGRvIG5vdCBzdXBwb3J0IHJlY3Vyc2lvbikK
KyAgICAgICAgVEZ1bmN0aW9uICpmdW5jdGlvbjsKKyAgICAgICAgVFR5cGUgdHlwZSgkMSk7Cisg
ICAgICAgIGZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigkMi5zdHJpbmcsIHR5cGUpOworICAgICAg
ICAkJCA9IGZ1bmN0aW9uOworICAgICAgICAKKyAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUu
cHVzaCgpOworICAgIH0KKyAgICA7CisKK3BhcmFtZXRlcl9kZWNsYXJhdG9yCisgICAgLy8gVHlw
ZSArIG5hbWUKKyAgICA6IHR5cGVfc3BlY2lmaWVyIGlkZW50aWZpZXIgeworICAgICAgICBpZiAo
JDEudHlwZSA9PSBFYnRWb2lkKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgImls
bGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgJDIuc3RyaW5nLT5jX3N0cigpKTsKKyAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29udGV4dC0+
cmVzZXJ2ZWRFcnJvckNoZWNrKEAyLCAqJDIuc3RyaW5nKSkKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHskMi5zdHJpbmcsIG5ldyBU
VHlwZSgkMSl9OworICAgICAgICAkJC5wYXJhbSA9IHBhcmFtOworICAgIH0KKyAgICB8IHR5cGVf
c3BlY2lmaWVyIGlkZW50aWZpZXIgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklH
SFRfQlJBQ0tFVCB7CisgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgY2FuIG1ha2UgYW4gYXJyYXkg
b3V0IG9mIHRoaXMgdHlwZQorICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVj
ayhAMywgJDEpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlm
IChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soQDIsICokMi5zdHJpbmcpKQorICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGludCBzaXplOworICAgICAgICBpZiAo
Y29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjayhAMywgJDQsIHNpemUpKQorICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAkMS5zZXRBcnJheSh0cnVlLCBzaXplKTsKKwor
ICAgICAgICBUVHlwZSogdHlwZSA9IG5ldyBUVHlwZSgkMSk7CisgICAgICAgIFRQYXJhbWV0ZXIg
cGFyYW0gPSB7ICQyLnN0cmluZywgdHlwZSB9OworICAgICAgICAkJC5wYXJhbSA9IHBhcmFtOwor
ICAgIH0KKyAgICA7CisKK3BhcmFtZXRlcl9kZWNsYXJhdGlvbgorICAgIC8vCisgICAgLy8gVGhl
IG9ubHkgcGFyYW1ldGVyIHF1YWxpZmllciBhIHBhcmFtZXRlciBjYW4gaGF2ZSBhcmUKKyAgICAv
LyBJTl9RVUFMLCBPVVRfUVVBTCwgSU5PVVRfUVVBTCwgb3IgQ09OU1QuCisgICAgLy8KKworICAg
IC8vCisgICAgLy8gVHlwZSArIG5hbWUKKyAgICAvLworICAgIDogdHlwZV9xdWFsaWZpZXIgcGFy
YW1ldGVyX3F1YWxpZmllciBwYXJhbWV0ZXJfZGVjbGFyYXRvciB7CisgICAgICAgICQkID0gJDM7
CisgICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soQDMsICQxLnF1YWxpZmllciwg
JDIsICQkLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAg
IH0KKyAgICB8IHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX2RlY2xhcmF0b3IgeworICAg
ICAgICAkJCA9ICQyOworICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1ldGVyU2FtcGxlckVycm9y
Q2hlY2soQDIsICQxLCAqJDIucGFyYW0udHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soQDIsIEV2cVRlbXBv
cmFyeSwgJDEsICQkLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OworICAgIH0KKyAgICAvLworICAgIC8vIE9ubHkgdHlwZQorICAgIC8vCisgICAgfCB0eXBlX3F1
YWxpZmllciBwYXJhbWV0ZXJfcXVhbGlmaWVyIHBhcmFtZXRlcl90eXBlX3NwZWNpZmllciB7Cisg
ICAgICAgICQkID0gJDM7CisgICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soQDMs
ICQxLnF1YWxpZmllciwgJDIsICQkLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworICAgIH0KKyAgICB8IHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX3R5
cGVfc3BlY2lmaWVyIHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICAgICAgaWYgKGNvbnRleHQtPnBh
cmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKEAyLCAkMSwgKiQyLnBhcmFtLnR5cGUpKQorICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJv
ckNoZWNrKEAyLCBFdnFUZW1wb3JhcnksICQxLCAkJC5wYXJhbS50eXBlKSkKKyAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICB9CisgICAgOworCitwYXJhbWV0ZXJfcXVhbGlmaWVy
CisgICAgOiAvKiBlbXB0eSAqLyB7CisgICAgICAgICQkID0gRXZxSW47CisgICAgfQorICAgIHwg
SU5fUVVBTCB7CisgICAgICAgICQkID0gRXZxSW47CisgICAgfQorICAgIHwgT1VUX1FVQUwgewor
ICAgICAgICAkJCA9IEV2cU91dDsKKyAgICB9CisgICAgfCBJTk9VVF9RVUFMIHsKKyAgICAgICAg
JCQgPSBFdnFJbk91dDsKKyAgICB9CisgICAgOworCitwYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIK
KyAgICA6IHR5cGVfc3BlY2lmaWVyIHsKKyAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgMCwg
bmV3IFRUeXBlKCQxKSB9OworICAgICAgICAkJC5wYXJhbSA9IHBhcmFtOworICAgIH0KKyAgICA7
CisKK2luaXRfZGVjbGFyYXRvcl9saXN0CisgICAgOiBzaW5nbGVfZGVjbGFyYXRpb24geworICAg
ICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIGlk
ZW50aWZpZXIgeworICAgICAgICBpZiAoJDEudHlwZS50eXBlID09IEVidEludmFyaWFudCAmJiAh
JDMuc3ltYm9sKQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMywgInVu
ZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCAkMy5zdHJpbmctPmNf
c3RyKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisKKyAg
ICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5
bWJvbCgwLCAqJDMuc3RyaW5nLCBUVHlwZSgkMS50eXBlKSwgQDMpOworICAgICAgICAkJC5pbnRl
cm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRl
cm1Ob2RlLCBzeW1ib2wsIEAzKTsKKyAgICAgICAgCisgICAgICAgIGlmIChjb250ZXh0LT5zdHJ1
Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAzLCAkJC50eXBlKSkKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKworICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVj
ayhAMywgKiQzLnN0cmluZywgJCQudHlwZSwgZmFsc2UpKQorICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworCisgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOworICAgICAgICBp
ZiAoY29udGV4dC0+bm9uSW5pdEVycm9yQ2hlY2soQDMsICokMy5zdHJpbmcsICQkLnR5cGUsIHZh
cmlhYmxlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKHN5
bWJvbCAmJiB2YXJpYWJsZSkKKyAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUtPmdl
dFVuaXF1ZUlkKCkpOworICAgIH0KKyAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIGlk
ZW50aWZpZXIgTEVGVF9CUkFDS0VUIFJJR0hUX0JSQUNLRVQgeworICAgICAgICBpZiAoY29udGV4
dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhAMywgJDEudHlwZSkpCisgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVy
cm9yQ2hlY2soQDMsICokMy5zdHJpbmcsICQxLnR5cGUsIHRydWUpKQorICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICQkID0gJDE7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQtPmFycmF5VHlwZUVycm9yQ2hlY2soQDQsICQxLnR5cGUpIHx8IGNvbnRleHQtPmFycmF5UXVh
bGlmaWVyRXJyb3JDaGVjayhANCwgJDEudHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgJDEudHlwZS5zZXRBcnJheSh0cnVl
KTsKKyAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGU7CisgICAgICAgICAgICBpZiAoY29u
dGV4dC0+YXJyYXlFcnJvckNoZWNrKEA0LCAqJDMuc3RyaW5nLCAkMS50eXBlLCB2YXJpYWJsZSkp
CisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgfQor
ICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgaWRlbnRpZmllciBMRUZUX0JSQUNLRVQg
Y29uc3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKKyAgICAgICAgaWYgKGNvbnRleHQt
PnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soQDMsICQxLnR5cGUpKQorICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJv
ckNoZWNrKEAzLCAqJDMuc3RyaW5nLCAkMS50eXBlLCB0cnVlKSkKKyAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKKworICAgICAgICAkJCA9ICQxOworCisgICAgICAgIGlmIChjb250ZXh0
LT5hcnJheVR5cGVFcnJvckNoZWNrKEA0LCAkMS50eXBlKSB8fCBjb250ZXh0LT5hcnJheVF1YWxp
ZmllckVycm9yQ2hlY2soQDQsICQxLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludCBzaXplOworICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soQDQsICQ1LCBzaXplKSkKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkMS50eXBlLnNldEFycmF5
KHRydWUsIHNpemUpOworICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7CisgICAg
ICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKEA0LCAqJDMuc3RyaW5nLCAkMS50
eXBlLCB2YXJpYWJsZSkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICAgICAgVFR5cGUgdHlwZSA9IFRUeXBlKCQxLnR5cGUpOworICAgICAgICAgICAgdHlwZS5z
ZXRBcnJheVNpemUoc2l6ZSk7CisgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1Ob2RlLCBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlID8gdmFyaWFibGUtPmdldFVuaXF1ZUlkKCkg
OiAwLCAqJDMuc3RyaW5nLCB0eXBlLCBAMyksIEAzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB8
IGluaXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIGlkZW50aWZpZXIgRVFVQUwgaW5pdGlhbGl6ZXIg
eworICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhAMywgJDEu
dHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgJCQgPSAk
MTsKKworICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKKyAgICAgICAgaWYgKCFjb250
ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoQDMsICokMy5zdHJpbmcsICQxLnR5cGUsICQ1LCBpbnRl
cm1Ob2RlKSkgeworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIGJ1aWxkIHRoZSBpbnRl
cm1lZGlhdGUgcmVwcmVzZW50YXRpb24KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBpZiAo
aW50ZXJtTm9kZSkKKyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJtTm9kZSwgaW50ZXJtTm9kZSwgQDQpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9ICQxLmlu
dGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7CisgICAgICAgIH0K
KyAgICB9CisgICAgOworCitzaW5nbGVfZGVjbGFyYXRpb24KKyAgICA6IGZ1bGx5X3NwZWNpZmll
ZF90eXBlIHsKKyAgICAgICAgJCQudHlwZSA9ICQxOworICAgICAgICAkJC5pbnRlcm1BZ2dyZWdh
dGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkU3ltYm9sKDAsICIiLCBUVHlwZSgkMSksIEAxKSwgQDEpOworICAgIH0KKyAgICB8
IGZ1bGx5X3NwZWNpZmllZF90eXBlIGlkZW50aWZpZXIgeworICAgICAgICBUSW50ZXJtU3ltYm9s
KiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICokMi5zdHJpbmcs
IFRUeXBlKCQxKSwgQDIpOworICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsIEAyKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAyLCAkJC50eXBlKSkKKyAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBpZiAoY29udGV4dC0+bm9u
SW5pdENvbnN0RXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZywgJCQudHlwZSwgZmFsc2UpKQorICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICAk
JC50eXBlID0gJDE7CisKKyAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7CisgICAgICAg
IGlmIChjb250ZXh0LT5ub25Jbml0RXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZywgJCQudHlwZSwg
dmFyaWFibGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAo
dmFyaWFibGUgJiYgc3ltYm9sKQorICAgICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+
Z2V0VW5pcXVlSWQoKSk7CisgICAgfQorICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUgaWRlbnRp
ZmllciBMRUZUX0JSQUNLRVQgUklHSFRfQlJBQ0tFVCB7CisgICAgICAgIGNvbnRleHQtPmVycm9y
KEAyLCAidW5zaXplZCBhcnJheSBkZWNsYXJhdGlvbnMgbm90IHN1cHBvcnRlZCIsICQyLnN0cmlu
Zy0+Y19zdHIoKSk7CisgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBUSW50
ZXJtU3ltYm9sKiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICok
Mi5zdHJpbmcsIFRUeXBlKCQxKSwgQDIpOworICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsIEAyKTsKKyAgICAgICAg
JCQudHlwZSA9ICQxOworICAgIH0KKyAgICB8IGZ1bGx5X3NwZWNpZmllZF90eXBlIGlkZW50aWZp
ZXIgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7CisgICAg
ICAgIFRUeXBlIHR5cGUgPSBUVHlwZSgkMSk7CisgICAgICAgIGludCBzaXplOworICAgICAgICBp
ZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjayhAMiwgJDQsIHNpemUpKQorICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB0eXBlLnNldEFycmF5U2l6ZShzaXplKTsK
KyAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZFN5bWJvbCgwLCAqJDIuc3RyaW5nLCB0eXBlLCBAMik7CisgICAgICAgICQkLmludGVybUFnZ3Jl
Z2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgQDIpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2so
QDIsICQxKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBpZiAo
Y29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZywgJDEsIHRydWUp
KQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICQkLnR5cGUgPSAk
MTsKKworICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjayhAMywgJDEpIHx8
IGNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayhAMywgJDEpKQorICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludCBzaXpl
OworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soQDMsICQ0LCBz
aXplKSkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgICAg
ICQxLnNldEFycmF5KHRydWUsIHNpemUpOworICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJs
ZSA9IDA7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKEAzLCAqJDIu
c3RyaW5nLCAkMSwgdmFyaWFibGUpKQorICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCisgICAgICAgICAgICAgICAg
c3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBpZGVudGlmaWVyIEVRVUFMIGluaXRpYWxpemVy
IHsKKyAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soQDIsICQx
KSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAkJC50eXBlID0g
JDE7CisKKyAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CisgICAgICAgIGlmICghY29u
dGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKEAyLCAqJDIuc3RyaW5nLCAkMSwgJDQsIGludGVybU5v
ZGUpKSB7CisgICAgICAgIC8vCisgICAgICAgIC8vIEJ1aWxkIGludGVybWVkaWF0ZSByZXByZXNl
bnRhdGlvbgorICAgICAgICAvLworICAgICAgICAgICAgaWYoaW50ZXJtTm9kZSkKKyAgICAgICAg
ICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFn
Z3JlZ2F0ZShpbnRlcm1Ob2RlLCBAMyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgJCQuaW50ZXJtQWdncmVnYXRlID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7
CisgICAgICAgIH0KKyAgICB9CisgICAgfCBJTlZBUklBTlQgSURFTlRJRklFUiB7CisgICAgICAg
IFZFUlRFWF9PTkxZKCJpbnZhcmlhbnQgZGVjbGFyYXRpb24iLCBAMSk7CisgICAgICAgIGlmIChj
b250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKEAxLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2Jh
bExldmVsKCksICJpbnZhcmlhbnQgdmFyeWluZyIpKQorICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICAkJC50eXBlLnNldEJhc2ljKEVidEludmFyaWFudCwgRXZxSW52YXJp
YW50VmFyeWluZ091dCwgQDIpOworICAgICAgICBpZiAoISQyLnN5bWJvbCkKKyAgICAgICAgewor
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVj
bGFyZWQgYXMgaW52YXJpYW50IiwgJDIuc3RyaW5nLT5jX3N0cigpKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgJCQuaW50ZXJtQWdn
cmVnYXRlID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1i
b2woMCwgKiQyLnN0cmluZywgVFR5cGUoJCQudHlwZSksIEAyKTsKKyAgICAgICAgICAgICQkLmlu
dGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJv
bCwgQDIpOworICAgICAgICB9CisgICAgfQorICAgIDsKKworZnVsbHlfc3BlY2lmaWVkX3R5cGUK
KyAgICA6IHR5cGVfc3BlY2lmaWVyIHsKKyAgICAgICAgJCQgPSAkMTsKKworICAgICAgICBpZiAo
JDEuYXJyYXkpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAibm90IHN1cHBvcnRl
ZCIsICJmaXJzdC1jbGFzcyBhcnJheSIpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICAgICAgJDEuc2V0QXJyYXkoZmFsc2UpOworICAgICAgICB9CisgICAgfQorICAg
IHwgdHlwZV9xdWFsaWZpZXIgdHlwZV9zcGVjaWZpZXIgIHsKKyAgICAgICAgaWYgKCQyLmFycmF5
KSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgIm5vdCBzdXBwb3J0ZWQiLCAiZmly
c3QtY2xhc3MgYXJyYXkiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgICAgICQyLnNldEFycmF5KGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgkMS5x
dWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlICYmCisgICAgICAgICAgICAoJDIudHlwZSA9PSBFYnRC
b29sIHx8ICQyLnR5cGUgPT0gRWJ0SW50KSkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
QDIsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlm
aWVyKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKCgkMS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8ICQxLnF1YWxpZmllciA9PSBF
dnFWYXJ5aW5nT3V0KSAmJgorICAgICAgICAgICAgKCQyLnR5cGUgPT0gRWJ0Qm9vbCB8fCAkMi50
eXBlID09IEVidEludCkpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAiY2Fubm90
IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikpOworICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgICQkID0gJDI7
CisgICAgICAgICQkLnF1YWxpZmllciA9ICQxLnF1YWxpZmllcjsKKyAgICB9CisgICAgOworCit0
eXBlX3F1YWxpZmllcgorICAgIDogQ09OU1RfUVVBTCB7CisgICAgICAgICQkLnNldEJhc2ljKEVi
dFZvaWQsIEV2cUNvbnN0LCBAMSk7CisgICAgfQorICAgIHwgQVRUUklCVVRFIHsKKyAgICAgICAg
VkVSVEVYX09OTFkoImF0dHJpYnV0ZSIsIEAxKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPmdsb2Jh
bEVycm9yQ2hlY2soQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImF0
dHJpYnV0ZSIpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAkJC5z
ZXRCYXNpYyhFYnRWb2lkLCBFdnFBdHRyaWJ1dGUsIEAxKTsKKyAgICB9CisgICAgfCBWQVJZSU5H
IHsKKyAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soQDEsIGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgInZhcnlpbmciKSkKKyAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfVkVS
VEVYX1NIQURFUikKKyAgICAgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cVZhcnlpbmdP
dXQsIEAxKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwg
RXZxVmFyeWluZ0luLCBAMSk7CisgICAgfQorICAgIHwgSU5WQVJJQU5UIFZBUllJTkcgeworICAg
ICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjayhAMSwgY29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpLCAiaW52YXJpYW50IHZhcnlpbmciKSkKKyAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hf
VkVSVEVYX1NIQURFUikKKyAgICAgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFy
aWFudFZhcnlpbmdPdXQsIEAxKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgJCQuc2V0QmFz
aWMoRWJ0Vm9pZCwgRXZxSW52YXJpYW50VmFyeWluZ0luLCBAMSk7CisgICAgfQorICAgIHwgVU5J
Rk9STSB7CisgICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKEAxLCBjb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ1bmlmb3JtIikpCisgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cVVuaWZv
cm0sIEAxKTsKKyAgICB9CisgICAgOworCit0eXBlX3NwZWNpZmllcgorICAgIDogdHlwZV9zcGVj
aWZpZXJfbm9fcHJlYyB7CisgICAgICAgICQkID0gJDE7CisKKyAgICAgICAgaWYgKCQkLnByZWNp
c2lvbiA9PSBFYnBVbmRlZmluZWQpIHsKKyAgICAgICAgICAgICQkLnByZWNpc2lvbiA9IGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmdldERlZmF1bHRQcmVjaXNpb24oJDEudHlwZSk7CisgICAgICAgICAg
ICBpZiAoY29udGV4dC0+cHJlY2lzaW9uRXJyb3JDaGVjayhAMSwgJCQucHJlY2lzaW9uLCAkMS50
eXBlKSkgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICB8IHByZWNpc2lvbl9xdWFsaWZpZXIgdHlwZV9zcGVj
aWZpZXJfbm9fcHJlYyB7CisgICAgICAgICQkID0gJDI7CisgICAgICAgICQkLnByZWNpc2lvbiA9
ICQxOworICAgIH0KKyAgICA7CisKK3ByZWNpc2lvbl9xdWFsaWZpZXIKKyAgICA6IEhJR0hfUFJF
Q0lTSU9OIHsKKyAgICAgICAgJCQgPSBFYnBIaWdoOworICAgIH0KKyAgICB8IE1FRElVTV9QUkVD
SVNJT04geworICAgICAgICAkJCA9IEVicE1lZGl1bTsKKyAgICB9CisgICAgfCBMT1dfUFJFQ0lT
SU9OICB7CisgICAgICAgICQkID0gRWJwTG93OworICAgIH0KKyAgICA7CisKK3R5cGVfc3BlY2lm
aWVyX25vX3ByZWMKKyAgICA6IHR5cGVfc3BlY2lmaWVyX25vbmFycmF5IHsKKyAgICAgICAgJCQg
PSAkMTsKKyAgICB9CisgICAgfCB0eXBlX3NwZWNpZmllcl9ub25hcnJheSBMRUZUX0JSQUNLRVQg
Y29uc3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKKyAgICAgICAgJCQgPSAkMTsKKwor
ICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjayhAMiwgJDEpKQorICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlu
dCBzaXplOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soQDIs
ICQzLCBzaXplKSkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
ICAgICAkJC5zZXRBcnJheSh0cnVlLCBzaXplKTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisK
K3R5cGVfc3BlY2lmaWVyX25vbmFycmF5CisgICAgOiBWT0lEX1RZUEUgeworICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIHF1YWws
IEAxKTsKKyAgICB9CisgICAgfCBGTE9BVF9UWVBFIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgQDEpOworICAg
IH0KKyAgICB8IElOVF9UWVBFIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+
c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5Owor
ICAgICAgICAkJC5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBCT09M
X1RZUEUgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNl
dEJhc2ljKEVidEJvb2wsIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBWRUMyIHsKKyAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwg
cXVhbCwgQDEpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMik7CisgICAgfQorICAgIHwgVkVD
MyB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFz
aWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRlKDMpOworICAg
IH0KKyAgICB8IFZFQzQgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1i
b2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAg
ICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNldEFnZ3Jl
Z2F0ZSg0KTsKKyAgICB9CisgICAgfCBCVkVDMiB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgQDEpOworICAgICAg
ICAkJC5zZXRBZ2dyZWdhdGUoMik7CisgICAgfQorICAgIHwgQlZFQzMgeworICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEJvb2wsIHF1YWws
IEAxKTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRlKDMpOworICAgIH0KKyAgICB8IEJWRUM0IHsK
KyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxM
ZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhF
YnRCb29sLCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSg0KTsKKyAgICB9Cisg
ICAgfCBJVkVDMiB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAg
JCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgy
KTsKKyAgICB9CisgICAgfCBJVkVDMyB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFy
eTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNl
dEFnZ3JlZ2F0ZSgzKTsKKyAgICB9CisgICAgfCBJVkVDNCB7CisgICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCBAMSk7Cisg
ICAgICAgICQkLnNldEFnZ3JlZ2F0ZSg0KTsKKyAgICB9CisgICAgfCBNQVRSSVgyIHsKKyAgICAg
ICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgp
ID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9h
dCwgcXVhbCwgQDEpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMiwgdHJ1ZSk7CisgICAgfQor
ICAgIHwgTUFUUklYMyB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAg
ICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0QWdncmVn
YXRlKDMsIHRydWUpOworICAgIH0KKyAgICB8IE1BVFJJWDQgeworICAgICAgICBUUXVhbGlmaWVy
IHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7
CisgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSg0LCB0cnVlKTsKKyAgICB9CisgICAgfCBTQU1QTEVS
MkQgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJh
c2ljKEVidFNhbXBsZXIyRCwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IFNBTVBMRVJDVUJFIHsK
KyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxM
ZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhF
YnRTYW1wbGVyQ3ViZSwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IFNBTVBMRVJfRVhURVJOQUxf
T0VTIHsKKyAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0V4dGVuc2lvbigiR0xfT0VTX0VH
TF9pbWFnZV9leHRlcm5hbCIpKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgInVu
c3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlckV4dGVybmFsT0VTIik7CisgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyRXh0ZXJuYWxPRVMsIHF1YWwsIEAx
KTsKKyAgICB9CisgICAgfCBTQU1QTEVSMkRSRUNUIHsKKyAgICAgICAgaWYgKCFjb250ZXh0LT5z
dXBwb3J0c0V4dGVuc2lvbigiR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlIikpIHsKKyAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKEAxLCAidW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyMkRSZWN0
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVy
MkRSZWN0LCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgc3RydWN0X3NwZWNpZmllciB7CisgICAg
ICAgICQkID0gJDE7CisgICAgICAgICQkLnF1YWxpZmllciA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICB9CisgICAg
fCBUWVBFX05BTUUgeworICAgICAgICAvLworICAgICAgICAvLyBUaGlzIGlzIGZvciB1c2VyIGRl
ZmluZWQgdHlwZSBuYW1lcy4gIFRoZSBsZXhpY2FsIHBoYXNlIGxvb2tlZCB1cCB0aGUKKyAgICAg
ICAgLy8gdHlwZS4KKyAgICAgICAgLy8KKyAgICAgICAgVFR5cGUmIHN0cnVjdHVyZSA9IHN0YXRp
Y19jYXN0PFRWYXJpYWJsZSo+KCQxLnN5bWJvbCktPmdldFR5cGUoKTsKKyAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTdHJ1Y3QsIHF1YWws
IEAxKTsKKyAgICAgICAgJCQudXNlckRlZiA9ICZzdHJ1Y3R1cmU7CisgICAgfQorICAgIDsKKwor
c3RydWN0X3NwZWNpZmllcgorICAgIDogU1RSVUNUIGlkZW50aWZpZXIgTEVGVF9CUkFDRSB7IGlm
IChjb250ZXh0LT5lbnRlclN0cnVjdERlY2xhcmF0aW9uKEAyLCAqJDIuc3RyaW5nKSkgY29udGV4
dC0+cmVjb3ZlcigpOyB9IHN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IFJJR0hUX0JSQUNFIHsKKyAg
ICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZykpCisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgVFR5cGUqIHN0cnVjdHVy
ZSA9IG5ldyBUVHlwZShuZXcgVFN0cnVjdHVyZSgkMi5zdHJpbmcsICQ1KSk7CisgICAgICAgIFRW
YXJpYWJsZSogdXNlclR5cGVEZWYgPSBuZXcgVFZhcmlhYmxlKCQyLnN0cmluZywgKnN0cnVjdHVy
ZSwgdHJ1ZSk7CisgICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgqdXNl
clR5cGVEZWYpKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgInJlZGVmaW5pdGlv
biIsICQyLnN0cmluZy0+Y19zdHIoKSwgInN0cnVjdCIpOworICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgICQkLnNldEJhc2ljKEVidFN0cnVjdCwgRXZx
VGVtcG9yYXJ5LCBAMSk7CisgICAgICAgICQkLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7CisgICAgICAg
IGNvbnRleHQtPmV4aXRTdHJ1Y3REZWNsYXJhdGlvbigpOworICAgIH0KKyAgICB8IFNUUlVDVCBM
RUZUX0JSQUNFIHsgaWYgKGNvbnRleHQtPmVudGVyU3RydWN0RGVjbGFyYXRpb24oQDIsICokMi5z
dHJpbmcpKSBjb250ZXh0LT5yZWNvdmVyKCk7IH0gc3RydWN0X2RlY2xhcmF0aW9uX2xpc3QgUklH
SFRfQlJBQ0UgeworICAgICAgICBUVHlwZSogc3RydWN0dXJlID0gbmV3IFRUeXBlKG5ldyBUU3Ry
dWN0dXJlKE5ld1Bvb2xUU3RyaW5nKCIiKSwgJDQpKTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0
U3RydWN0LCBFdnFUZW1wb3JhcnksIEAxKTsKKyAgICAgICAgJCQudXNlckRlZiA9IHN0cnVjdHVy
ZTsKKyAgICAgICAgY29udGV4dC0+ZXhpdFN0cnVjdERlY2xhcmF0aW9uKCk7CisgICAgfQorICAg
IDsKKworc3RydWN0X2RlY2xhcmF0aW9uX2xpc3QKKyAgICA6IHN0cnVjdF9kZWNsYXJhdGlvbiB7
CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgc3RydWN0X2RlY2xhcmF0aW9uX2xpc3Qg
c3RydWN0X2RlY2xhcmF0aW9uIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCAkMi0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIFRGaWVsZCogZmll
bGQgPSAoKiQyKVtpXTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgJCQtPnNp
emUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgaWYgKCgqJCQpW2pdLT5uYW1lKCkgPT0gZmll
bGQtPm5hbWUoKSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgImR1
cGxpY2F0ZSBmaWVsZCBuYW1lIGluIHN0cnVjdHVyZToiLCAic3RydWN0IiwgZmllbGQtPm5hbWUo
KS5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICQkLT5wdXNoX2JhY2so
ZmllbGQpOworICAgICAgICB9CisgICAgfQorICAgIDsKKworc3RydWN0X2RlY2xhcmF0aW9uCisg
ICAgOiB0eXBlX3NwZWNpZmllciBzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0IFNFTUlDT0xPTiB7Cisg
ICAgICAgICQkID0gJDI7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPnZvaWRFcnJvckNoZWNrKEAx
LCAoKiQyKVswXS0+bmFtZSgpLCAkMSkpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8ICQkLT5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIENhcmVmdWwgbm90
IHRvIHJlcGxhY2UgYWxyZWFkeSBrbm93biBhc3BlY3RzIG9mIHR5cGUsIGxpa2UgYXJyYXktbmVz
cworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIFRUeXBlKiB0eXBlID0gKCokJClbaV0tPnR5
cGUoKTsKKyAgICAgICAgICAgIHR5cGUtPnNldEJhc2ljVHlwZSgkMS50eXBlKTsKKyAgICAgICAg
ICAgIHR5cGUtPnNldE5vbWluYWxTaXplKCQxLnNpemUpOworICAgICAgICAgICAgdHlwZS0+c2V0
TWF0cml4KCQxLm1hdHJpeCk7CisgICAgICAgICAgICB0eXBlLT5zZXRQcmVjaXNpb24oJDEucHJl
Y2lzaW9uKTsKKworICAgICAgICAgICAgLy8gZG9uJ3QgYWxsb3cgYXJyYXlzIG9mIGFycmF5cwor
ICAgICAgICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkgeworICAgICAgICAgICAgICAgIGlmIChj
b250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKEAxLCAkMSkpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgkMS5h
cnJheSkKKyAgICAgICAgICAgICAgICB0eXBlLT5zZXRBcnJheVNpemUoJDEuYXJyYXlTaXplKTsK
KyAgICAgICAgICAgIGlmICgkMS51c2VyRGVmKQorICAgICAgICAgICAgICAgIHR5cGUtPnNldFN0
cnVjdCgkMS51c2VyRGVmLT5nZXRTdHJ1Y3QoKSk7CisKKyAgICAgICAgICAgIGlmIChjb250ZXh0
LT5zdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayhAMSwgKigqJCQpW2ldKSkKKyAgICAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCitzdHJ1Y3Rf
ZGVjbGFyYXRvcl9saXN0CisgICAgOiBzdHJ1Y3RfZGVjbGFyYXRvciB7CisgICAgICAgICQkID0g
TmV3UG9vbFRGaWVsZExpc3QoKTsKKyAgICAgICAgJCQtPnB1c2hfYmFjaygkMSk7CisgICAgfQor
ICAgIHwgc3RydWN0X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBzdHJ1Y3RfZGVjbGFyYXRvciB7Cisg
ICAgICAgICQkLT5wdXNoX2JhY2soJDMpOworICAgIH0KKyAgICA7CisKK3N0cnVjdF9kZWNsYXJh
dG9yCisgICAgOiBpZGVudGlmaWVyIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJy
b3JDaGVjayhAMSwgKiQxLnN0cmluZykpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CisKKyAgICAgICAgVFR5cGUqIHR5cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVk
KTsKKyAgICAgICAgJCQgPSBuZXcgVEZpZWxkKHR5cGUsICQxLnN0cmluZyk7CisgICAgfQorICAg
IHwgaWRlbnRpZmllciBMRUZUX0JSQUNLRVQgY29uc3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9CUkFD
S0VUIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjayhAMSwgKiQxLnN0
cmluZykpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgVFR5cGUq
IHR5cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKKyAgICAgICAgaW50IHNp
emUgPSAwOworICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjayhAMywgJDMs
IHNpemUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB0eXBlLT5z
ZXRBcnJheVNpemUoc2l6ZSk7CisKKyAgICAgICAgJCQgPSBuZXcgVEZpZWxkKHR5cGUsICQxLnN0
cmluZyk7CisgICAgfQorICAgIDsKKworaW5pdGlhbGl6ZXIKKyAgICA6IGFzc2lnbm1lbnRfZXhw
cmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICA7CisKK2RlY2xhcmF0aW9uX3N0YXRlbWVudAorICAg
IDogZGVjbGFyYXRpb24geyAkJCA9ICQxOyB9CisgICAgOworCitzdGF0ZW1lbnQKKyAgICA6IGNv
bXBvdW5kX3N0YXRlbWVudCAgeyAkJCA9ICQxOyB9CisgICAgfCBzaW1wbGVfc3RhdGVtZW50ICAg
IHsgJCQgPSAkMTsgfQorICAgIDsKKworLy8gR3JhbW1hciBOb3RlOiAgTm8gbGFiZWxlZCBzdGF0
ZW1lbnRzOyAnZ290bycgaXMgbm90IHN1cHBvcnRlZC4KKworc2ltcGxlX3N0YXRlbWVudAorICAg
IDogZGVjbGFyYXRpb25fc3RhdGVtZW50IHsgJCQgPSAkMTsgfQorICAgIHwgZXhwcmVzc2lvbl9z
dGF0ZW1lbnQgIHsgJCQgPSAkMTsgfQorICAgIHwgc2VsZWN0aW9uX3N0YXRlbWVudCAgIHsgJCQg
PSAkMTsgfQorICAgIHwgaXRlcmF0aW9uX3N0YXRlbWVudCAgIHsgJCQgPSAkMTsgfQorICAgIHwg
anVtcF9zdGF0ZW1lbnQgICAgICAgIHsgJCQgPSAkMTsgfQorICAgIDsKKworY29tcG91bmRfc3Rh
dGVtZW50CisgICAgOiBMRUZUX0JSQUNFIFJJR0hUX0JSQUNFIHsgJCQgPSAwOyB9CisgICAgfCBM
RUZUX0JSQUNFIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyB9IHN0YXRlbWVudF9saXN0
IHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7IH0gUklHSFRfQlJBQ0UgeworICAgICAgICBp
ZiAoJDMgIT0gMCkgeworICAgICAgICAgICAgJDMtPnNldE9wKEVPcFNlcXVlbmNlKTsKKyAgICAg
ICAgICAgICQzLT5zZXRMaW5lKEAkKTsKKyAgICAgICAgfQorICAgICAgICAkJCA9ICQzOworICAg
IH0KKyAgICA7CisKK3N0YXRlbWVudF9ub19uZXdfc2NvcGUKKyAgICA6IGNvbXBvdW5kX3N0YXRl
bWVudF9ub19uZXdfc2NvcGUgeyAkJCA9ICQxOyB9CisgICAgfCBzaW1wbGVfc3RhdGVtZW50ICAg
ICAgICAgICAgICAgIHsgJCQgPSAkMTsgfQorICAgIDsKKworc3RhdGVtZW50X3dpdGhfc2NvcGUK
KyAgICA6IHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyB9IGNvbXBvdW5kX3N0YXRlbWVu
dF9ub19uZXdfc2NvcGUgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgJCQgPSAkMjsgfQor
ICAgIHwgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0gc2ltcGxlX3N0YXRlbWVudCAg
ICAgICAgICAgICAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOyAkJCA9ICQyOyB9Cisg
ICAgOworCitjb21wb3VuZF9zdGF0ZW1lbnRfbm9fbmV3X3Njb3BlCisgICAgLy8gU3RhdGVtZW50
IHRoYXQgZG9lc24ndCBjcmVhdGUgYSBuZXcgc2NvcGUsIGZvciBzZWxlY3Rpb25fc3RhdGVtZW50
LCBpdGVyYXRpb25fc3RhdGVtZW50CisgICAgOiBMRUZUX0JSQUNFIFJJR0hUX0JSQUNFIHsKKyAg
ICAgICAgJCQgPSAwOworICAgIH0KKyAgICB8IExFRlRfQlJBQ0Ugc3RhdGVtZW50X2xpc3QgUklH
SFRfQlJBQ0UgeworICAgICAgICBpZiAoJDIpIHsKKyAgICAgICAgICAgICQyLT5zZXRPcChFT3BT
ZXF1ZW5jZSk7CisgICAgICAgICAgICAkMi0+c2V0TGluZShAJCk7CisgICAgICAgIH0KKyAgICAg
ICAgJCQgPSAkMjsKKyAgICB9CisgICAgOworCitzdGF0ZW1lbnRfbGlzdAorICAgIDogc3RhdGVt
ZW50IHsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZSgk
MSwgQCQpOworICAgIH0KKyAgICB8IHN0YXRlbWVudF9saXN0IHN0YXRlbWVudCB7CisgICAgICAg
ICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEsICQyLCBAJCk7Cisg
ICAgfQorICAgIDsKKworZXhwcmVzc2lvbl9zdGF0ZW1lbnQKKyAgICA6IFNFTUlDT0xPTiAgeyAk
JCA9IDA7IH0KKyAgICB8IGV4cHJlc3Npb24gU0VNSUNPTE9OICB7ICQkID0gc3RhdGljX2Nhc3Q8
VEludGVybU5vZGUqPigkMSk7IH0KKyAgICA7CisKK3NlbGVjdGlvbl9zdGF0ZW1lbnQKKyAgICA6
IElGIExFRlRfUEFSRU4gZXhwcmVzc2lvbiBSSUdIVF9QQVJFTiBzZWxlY3Rpb25fcmVzdF9zdGF0
ZW1lbnQgeworICAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2soQDEsICQzKSkKKyAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkU2VsZWN0aW9uKCQzLCAkNSwgQDEpOworICAgIH0KKyAgICA7CisKK3NlbGVj
dGlvbl9yZXN0X3N0YXRlbWVudAorICAgIDogc3RhdGVtZW50X3dpdGhfc2NvcGUgRUxTRSBzdGF0
ZW1lbnRfd2l0aF9zY29wZSB7CisgICAgICAgICQkLm5vZGUxID0gJDE7CisgICAgICAgICQkLm5v
ZGUyID0gJDM7CisgICAgfQorICAgIHwgc3RhdGVtZW50X3dpdGhfc2NvcGUgeworICAgICAgICAk
JC5ub2RlMSA9ICQxOworICAgICAgICAkJC5ub2RlMiA9IDA7CisgICAgfQorICAgIDsKKworLy8g
R3JhbW1hciBOb3RlOiAgTm8gJ3N3aXRjaCcuICBTd2l0Y2ggc3RhdGVtZW50cyBub3Qgc3VwcG9y
dGVkLgorCitjb25kaXRpb24KKyAgICAvLyBJbiAxOTk2IGMrKyBkcmFmdCwgY29uZGl0aW9ucyBj
YW4gaW5jbHVkZSBzaW5nbGUgZGVjbGFyYXRpb25zCisgICAgOiBleHByZXNzaW9uIHsKKyAgICAg
ICAgJCQgPSAkMTsKKyAgICAgICAgaWYgKGNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCQxLT5nZXRM
aW5lKCksICQxKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICB9CisgICAg
fCBmdWxseV9zcGVjaWZpZWRfdHlwZSBpZGVudGlmaWVyIEVRVUFMIGluaXRpYWxpemVyIHsKKyAg
ICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CisgICAgICAgIGlmIChjb250ZXh0LT5zdHJ1
Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAyLCAkMSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVjayhAMiwgJDEpKQorICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmICghY29udGV4dC0+ZXhl
Y3V0ZUluaXRpYWxpemVyKEAyLCAqJDIuc3RyaW5nLCAkMSwgJDQsIGludGVybU5vZGUpKQorICAg
ICAgICAgICAgJCQgPSAkNDsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgOwor
CitpdGVyYXRpb25fc3RhdGVtZW50CisgICAgOiBXSElMRSBMRUZUX1BBUkVOIHsgY29udGV4dC0+
c3ltYm9sVGFibGUucHVzaCgpOyArK2NvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0gY29uZGl0
aW9uIFJJR0hUX1BBUkVOIHN0YXRlbWVudF9ub19uZXdfc2NvcGUgeworICAgICAgICBjb250ZXh0
LT5zeW1ib2xUYWJsZS5wb3AoKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkTG9vcChFTG9vcFdoaWxlLCAwLCAkNCwgMCwgJDYsIEAxKTsKKyAgICAgICAgLS1jb250ZXh0
LT5sb29wTmVzdGluZ0xldmVsOworICAgIH0KKyAgICB8IERPIHsgKytjb250ZXh0LT5sb29wTmVz
dGluZ0xldmVsOyB9IHN0YXRlbWVudF93aXRoX3Njb3BlIFdISUxFIExFRlRfUEFSRU4gZXhwcmVz
c2lvbiBSSUdIVF9QQVJFTiBTRU1JQ09MT04geworICAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVy
cm9yQ2hlY2soQDgsICQ2KSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAg
ICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRMb29wKEVMb29wRG9XaGlsZSwgMCwg
JDYsIDAsICQzLCBANCk7CisgICAgICAgIC0tY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsKKyAg
ICB9CisgICAgfCBGT1IgTEVGVF9QQVJFTiB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsg
Kytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyB9IGZvcl9pbml0X3N0YXRlbWVudCBmb3JfcmVz
dF9zdGF0ZW1lbnQgUklHSFRfUEFSRU4gc3RhdGVtZW50X25vX25ld19zY29wZSB7CisgICAgICAg
IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRMb29wKEVMb29wRm9yLCAkNCwgcmVpbnRlcnByZXRfY2FzdDxUSW50ZXJtVHlw
ZWQqPigkNS5ub2RlMSksIHJlaW50ZXJwcmV0X2Nhc3Q8VEludGVybVR5cGVkKj4oJDUubm9kZTIp
LCAkNywgQDEpOworICAgICAgICAtLWNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7CisgICAgfQor
ICAgIDsKKworZm9yX2luaXRfc3RhdGVtZW50CisgICAgOiBleHByZXNzaW9uX3N0YXRlbWVudCB7
CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgZGVjbGFyYXRpb25fc3RhdGVtZW50IHsK
KyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgOworCitjb25kaXRpb25vcHQKKyAgICA6IGNv
bmRpdGlvbiB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgLyogTWF5IGJlIG51bGwg
Ki8geworICAgICAgICAkJCA9IDA7CisgICAgfQorICAgIDsKKworZm9yX3Jlc3Rfc3RhdGVtZW50
CisgICAgOiBjb25kaXRpb25vcHQgU0VNSUNPTE9OIHsKKyAgICAgICAgJCQubm9kZTEgPSAkMTsK
KyAgICAgICAgJCQubm9kZTIgPSAwOworICAgIH0KKyAgICB8IGNvbmRpdGlvbm9wdCBTRU1JQ09M
T04gZXhwcmVzc2lvbiAgeworICAgICAgICAkJC5ub2RlMSA9ICQxOworICAgICAgICAkJC5ub2Rl
MiA9ICQzOworICAgIH0KKyAgICA7CisKK2p1bXBfc3RhdGVtZW50CisgICAgOiBDT05USU5VRSBT
RU1JQ09MT04geworICAgICAgICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7
CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgImNvbnRpbnVlIHN0YXRlbWVudCBvbmx5
IGFsbG93ZWQgaW4gbG9vcHMiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgIH0KKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNo
KEVPcENvbnRpbnVlLCBAMSk7CisgICAgfQorICAgIHwgQlJFQUsgU0VNSUNPTE9OIHsKKyAgICAg
ICAgaWYgKGNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPD0gMCkgeworICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoQDEsICJicmVhayBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwg
IiIpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAg
ICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BCcmVhaywgQDEpOworICAg
IH0KKyAgICB8IFJFVFVSTiBTRU1JQ09MT04geworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCBAMSk7CisgICAgICAgIGlmIChjb250ZXh0LT5j
dXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7CisgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcihAMSwgIm5vbi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEg
dmFsdWUiLCAicmV0dXJuIik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgfCBSRVRVUk4gZXhwcmVzc2lvbiBTRU1JQ09MT04geworICAgICAg
ICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCAkMiwgQDEp
OworICAgICAgICBjb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IHRydWU7CisgICAgICAg
IGlmIChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRW
b2lkKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgInZvaWQgZnVuY3Rpb24gY2Fu
bm90IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIpOworICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICB9IGVsc2UgaWYgKCooY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlw
ZSkgIT0gJDItPmdldFR5cGUoKSkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJm
dW5jdGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6IiwgInJldHVybiIpOworICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgfQorICAgIHwgRElTQ0FS
RCBTRU1JQ09MT04geworICAgICAgICBGUkFHX09OTFkoImRpc2NhcmQiLCBAMSk7CisgICAgICAg
ICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BLaWxsLCBAMSk7CisgICAg
fQorICAgIDsKKworLy8gR3JhbW1hciBOb3RlOiAgTm8gJ2dvdG8nLiAgR290b3MgYXJlIG5vdCBz
dXBwb3J0ZWQuCisKK3RyYW5zbGF0aW9uX3VuaXQKKyAgICA6IGV4dGVybmFsX2RlY2xhcmF0aW9u
IHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgY29udGV4dC0+dHJlZVJvb3QgPSAkJDsKKyAg
ICB9CisgICAgfCB0cmFuc2xhdGlvbl91bml0IGV4dGVybmFsX2RlY2xhcmF0aW9uIHsKKyAgICAg
ICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMSwgJDIsIEAkKTsK
KyAgICAgICAgY29udGV4dC0+dHJlZVJvb3QgPSAkJDsKKyAgICB9CisgICAgOworCitleHRlcm5h
bF9kZWNsYXJhdGlvbgorICAgIDogZnVuY3Rpb25fZGVmaW5pdGlvbiB7CisgICAgICAgICQkID0g
JDE7CisgICAgfQorICAgIHwgZGVjbGFyYXRpb24geworICAgICAgICAkJCA9ICQxOworICAgIH0K
KyAgICA7CisKK2Z1bmN0aW9uX2RlZmluaXRpb24KKyAgICA6IGZ1bmN0aW9uX3Byb3RvdHlwZSB7
CisgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb24gPSAkMS5mdW5jdGlvbjsKKyAgICAgICAgCisg
ICAgICAgIGNvbnN0IFRTeW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5k
QnVpbHRJbihmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSk7CisgICAgICAgIAorICAgICAgICBp
ZiAoYnVpbHRJbikKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJi
dWlsdC1pbiBmdW5jdGlvbnMgY2Fubm90IGJlIHJlZGVmaW5lZCIsIGZ1bmN0aW9uLT5nZXROYW1l
KCkuY19zdHIoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRGdW5j
dGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoZnVuY3Rpb24tPmdldE1hbmdsZWROYW1l
KCkpKTsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gTm90ZTogICdwcmV2RGVjJyBjb3VsZCBiZSAn
ZnVuY3Rpb24nIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUgc2VlbiBmdW5jdGlvbgor
ICAgICAgICAvLyBhcyBpdCB3b3VsZCBoYXZlIGp1c3QgYmVlbiBwdXQgaW4gdGhlIHN5bWJvbCB0
YWJsZS4gIE90aGVyd2lzZSwgd2UncmUgbG9va2luZyB1cAorICAgICAgICAvLyBhbiBlYXJsaWVy
IG9jY3VyYW5jZS4KKyAgICAgICAgLy8KKyAgICAgICAgaWYgKHByZXZEZWMtPmlzRGVmaW5lZCgp
KSB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVGhlbiB0aGlzIGZ1bmN0aW9uIGFs
cmVhZHkgaGFzIGEgYm9keS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcihAMSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9uLT5nZXROYW1l
KCkuY19zdHIoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0K
KyAgICAgICAgcHJldkRlYy0+c2V0RGVmaW5lZCgpOworCisgICAgICAgIC8vCisgICAgICAgIC8v
IFJhaXNlIGVycm9yIG1lc3NhZ2UgaWYgbWFpbiBmdW5jdGlvbiB0YWtlcyBhbnkgcGFyYW1ldGVy
cyBvciByZXR1cm4gYW55dGhpbmcgb3RoZXIgdGhhbiB2b2lkCisgICAgICAgIC8vCisgICAgICAg
IGlmIChmdW5jdGlvbi0+Z2V0TmFtZSgpID09ICJtYWluIikgeworICAgICAgICAgICAgaWYgKGZ1
bmN0aW9uLT5nZXRQYXJhbUNvdW50KCkgPiAwKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoQDEsICJmdW5jdGlvbiBjYW5ub3QgdGFrZSBhbnkgcGFyYW1ldGVyKHMpIiwgZnVuY3Rp
b24tPmdldE5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZnVuY3Rpb24tPmdldFJldHVyblR5
cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7CisgICAgICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoQDEsICIiLCBmdW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5n
KCksICJtYWluIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIpOworICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIC8vCisgICAgICAgIC8vIFJlbWVtYmVyIHRoZSByZXR1cm4gdHlwZSBmb3IgbGF0ZXIgY2hl
Y2tpbmcgZm9yIFJFVFVSTiBzdGF0ZW1lbnRzLgorICAgICAgICAvLworICAgICAgICBjb250ZXh0
LT5jdXJyZW50RnVuY3Rpb25UeXBlID0gJihwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkpOworICAg
ICAgICBjb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IGZhbHNlOworCisgICAgICAgIC8v
CisgICAgICAgIC8vIEluc2VydCBwYXJhbWV0ZXJzIGludG8gdGhlIHN5bWJvbCB0YWJsZS4KKyAg
ICAgICAgLy8gSWYgdGhlIHBhcmFtZXRlciBoYXMgbm8gbmFtZSwgaXQncyBub3QgYW4gZXJyb3Is
IGp1c3QgZG9uJ3QgaW5zZXJ0IGl0CisgICAgICAgIC8vIChjb3VsZCBiZSB1c2VkIGZvciB1bnVz
ZWQgYXJncykuCisgICAgICAgIC8vCisgICAgICAgIC8vIEFsc28sIGFjY3VtdWxhdGUgdGhlIGxp
c3Qgb2YgcGFyYW1ldGVycyBpbnRvIHRoZSBISUwsIHNvIGxvd2VyIGxldmVsIGNvZGUKKyAgICAg
ICAgLy8ga25vd3Mgd2hlcmUgdG8gZmluZCBwYXJhbWV0ZXJzLgorICAgICAgICAvLworICAgICAg
ICBUSW50ZXJtQWdncmVnYXRlKiBwYXJhbU5vZGVzID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGU7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb24tPmdldFBhcmFtQ291bnQoKTsg
aSsrKSB7CisgICAgICAgICAgICBjb25zdCBUUGFyYW1ldGVyJiBwYXJhbSA9IGZ1bmN0aW9uLT5n
ZXRQYXJhbShpKTsKKyAgICAgICAgICAgIGlmIChwYXJhbS5uYW1lICE9IDApIHsKKyAgICAgICAg
ICAgICAgICBUVmFyaWFibGUgKnZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZShwYXJhbS5uYW1lLCAq
cGFyYW0udHlwZSk7CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBJbnNl
cnQgdGhlIHBhcmFtZXRlcnMgd2l0aCBuYW1lIGluIHRoZSBzeW1ib2wgdGFibGUuCisgICAgICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5p
bnNlcnQoKnZhcmlhYmxlKSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihA
MSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgZGVs
ZXRlIHZhcmlhYmxlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vCisg
ICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBwYXJhbWV0ZXIgdG8gdGhlIEhJTAorICAgICAgICAg
ICAgICAgIC8vCisgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcyA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5ncm93QWdncmVnYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbU5vZGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5n
ZXRVbmlxdWVJZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXROYW1lKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBAMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEAxKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGFyYW1O
b2RlcyA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKHBhcmFtTm9kZXMsIGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsICpwYXJhbS50eXBlLCBAMSksIEAx
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuc2V0QWdncmVnYXRlT3BlcmF0b3IocGFyYW1Ob2RlcywgRU9wUGFyYW1ldGVycywgQDEpOwor
ICAgICAgICAkMS5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJhbU5vZGVzOworICAgICAgICBjb250ZXh0
LT5sb29wTmVzdGluZ0xldmVsID0gMDsKKyAgICB9CisgICAgY29tcG91bmRfc3RhdGVtZW50X25v
X25ld19zY29wZSB7CisgICAgICAgIC8vPz8gQ2hlY2sgdGhhdCBhbGwgcGF0aHMgcmV0dXJuIGEg
dmFsdWUgaWYgcmV0dXJuIHR5cGUgIT0gdm9pZCA/CisgICAgICAgIC8vICAgTWF5IGJlIGJlc3Qg
ZG9uZSBhcyBwb3N0IHByb2Nlc3MgcGhhc2Ugb24gaW50ZXJtZWRpYXRlIGNvZGUKKyAgICAgICAg
aWYgKGNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVidFZv
aWQgJiYgISBjb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSkgeworICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoQDEsICJmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZToiLCAiIiwg
JDEuZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1BZ2dyZWdhdGUsICQzLCBAJCk7CisgICAg
ICAgIGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcigkJCwgRU9wRnVu
Y3Rpb24sIEAxKTsKKyAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldE5hbWUoJDEuZnVu
Y3Rpb24tPmdldE1hbmdsZWROYW1lKCkuY19zdHIoKSk7CisgICAgICAgICQkLT5nZXRBc0FnZ3Jl
Z2F0ZSgpLT5zZXRUeXBlKCQxLmZ1bmN0aW9uLT5nZXRSZXR1cm5UeXBlKCkpOworCisgICAgICAg
IC8vIHN0b3JlIHRoZSBwcmFnbWEgaW5mb3JtYXRpb24gZm9yIGRlYnVnIGFuZCBvcHRpbWl6ZSBh
bmQgb3RoZXIgdmVuZG9yIHNwZWNpZmljCisgICAgICAgIC8vIGluZm9ybWF0aW9uLiBUaGlzIGlu
Zm9ybWF0aW9uIGNhbiBiZSBxdWVyaWVkIGZyb20gdGhlIHBhcnNlIHRyZWUKKyAgICAgICAgJCQt
PmdldEFzQWdncmVnYXRlKCktPnNldE9wdGltaXplKGNvbnRleHQtPnByYWdtYSgpLm9wdGltaXpl
KTsKKyAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldERlYnVnKGNvbnRleHQtPnByYWdt
YSgpLmRlYnVnKTsKKworICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKKyAgICB9
CisgICAgOworCislJQorCitpbnQgZ2xzbGFuZ19wYXJzZShUUGFyc2VDb250ZXh0KiBjb250ZXh0
KSB7CisgICAgcmV0dXJuIHl5cGFyc2UoY29udGV4dCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX2xleC5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5n
X2xleC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNjQ4ZTc2MTA2NjNmMjc3OTA1NTY1YjQzOTdmZTE0YTQ5NzUz
M2I0ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL2dsc2xhbmdfbGV4LmNwcApAQCAtMCwwICsxLDI5NzggQEAKKyNsaW5l
IDE3ICIuL2dsc2xhbmcubCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1n
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKKworLy8gSWdub3Jl
IGVycm9ycyBpbiBhdXRvLWdlbmVyYXRlZCBjb2RlLgorI2lmIGRlZmluZWQoX19HTlVDX18pCisj
cHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLWZ1bmN0aW9uIgorI3ByYWdt
YSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC12YXJpYWJsZSIKKyNwcmFnbWEgR0ND
IGRpYWdub3N0aWMgaWdub3JlZCAiLVdzd2l0Y2gtZW51bSIKKyNlbGlmIGRlZmluZWQoX01TQ19W
RVIpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDA2NSkKKyNwcmFnbWEgd2FybmluZyhkaXNh
YmxlOiA0MTg5KQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ1MDUpCisjcHJhZ21hIHdhcm5p
bmcoZGlzYWJsZTogNDcwMSkKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX2NsYW5nX18pCisjcHJh
Z21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9y
ZWQgIi1XdW5rbm93bi1wcmFnbWFzIgorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQg
Ii1XZGVwcmVjYXRlZC1yZWdpc3RlciIKKyNlbmRpZgorCisjbGluZSAyNSAiLi9nbHNsYW5nX2xl
eC5jcHAiCisKKyNkZWZpbmUgIFlZX0lOVF9BTElHTkVEIHNob3J0IGludAorCisvKiBBIGxleGlj
YWwgc2Nhbm5lciBnZW5lcmF0ZWQgYnkgZmxleCAqLworCisjZGVmaW5lIEZMRVhfU0NBTk5FUgor
I2RlZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJT04gMgorI2RlZmluZSBZWV9GTEVYX01JTk9SX1ZF
UlNJT04gNQorI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gMzcKKyNpZiBZWV9GTEVY
X1NVQk1JTk9SX1ZFUlNJT04gPiAwCisjZGVmaW5lIEZMRVhfQkVUQQorI2VuZGlmCisKKy8qIEZp
cnN0LCB3ZSBkZWFsIHdpdGggIHBsYXRmb3JtLXNwZWNpZmljIG9yIGNvbXBpbGVyLXNwZWNpZmlj
IGlzc3Vlcy4gKi8KKworLyogYmVnaW4gc3RhbmRhcmQgQyBoZWFkZXJzLiAqLworI2luY2x1ZGUg
PHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNs
dWRlIDxzdGRsaWIuaD4KKworLyogZW5kIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KKworLyogZmxl
eCBpbnRlZ2VyIHR5cGUgZGVmaW5pdGlvbnMgKi8KKworI2lmbmRlZiBGTEVYSU5UX0gKKyNkZWZp
bmUgRkxFWElOVF9ICisKKy8qIEM5OSBzeXN0ZW1zIGhhdmUgPGludHR5cGVzLmg+LiBOb24tQzk5
IHN5c3RlbXMgbWF5IG9yIG1heSBub3QuICovCisKKyNpZiBkZWZpbmVkIChfX1NURENfVkVSU0lP
Tl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKworLyogQzk5IHNheXMgdG8gZGVm
aW5lIF9fU1REQ19MSU1JVF9NQUNST1MgYmVmb3JlIGluY2x1ZGluZyBzdGRpbnQuaCwKKyAqIGlm
IHlvdSB3YW50IHRoZSBsaW1pdCAobWF4L21pbikgbWFjcm9zIGZvciBpbnQgdHlwZXMuIAorICov
CisjaWZuZGVmIF9fU1REQ19MSU1JVF9NQUNST1MKKyNkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JP
UyAxCisjZW5kaWYKKworI2luY2x1ZGUgPGludHR5cGVzLmg+Cit0eXBlZGVmIGludDhfdCBmbGV4
X2ludDhfdDsKK3R5cGVkZWYgdWludDhfdCBmbGV4X3VpbnQ4X3Q7Cit0eXBlZGVmIGludDE2X3Qg
ZmxleF9pbnQxNl90OwordHlwZWRlZiB1aW50MTZfdCBmbGV4X3VpbnQxNl90OwordHlwZWRlZiBp
bnQzMl90IGZsZXhfaW50MzJfdDsKK3R5cGVkZWYgdWludDMyX3QgZmxleF91aW50MzJfdDsKKyNl
bHNlCit0eXBlZGVmIHNpZ25lZCBjaGFyIGZsZXhfaW50OF90OwordHlwZWRlZiBzaG9ydCBpbnQg
ZmxleF9pbnQxNl90OwordHlwZWRlZiBpbnQgZmxleF9pbnQzMl90OwordHlwZWRlZiB1bnNpZ25l
ZCBjaGFyIGZsZXhfdWludDhfdDsgCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBmbGV4X3Vp
bnQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxleF91aW50MzJfdDsKKworLyogTGltaXRz
IG9mIGludGVncmFsIHR5cGVzLiAqLworI2lmbmRlZiBJTlQ4X01JTgorI2RlZmluZSBJTlQ4X01J
TiAgICAgICAgICAgICAgICgtMTI4KQorI2VuZGlmCisjaWZuZGVmIElOVDE2X01JTgorI2RlZmlu
ZSBJTlQxNl9NSU4gICAgICAgICAgICAgICgtMzI3NjctMSkKKyNlbmRpZgorI2lmbmRlZiBJTlQz
Ml9NSU4KKyNkZWZpbmUgSU5UMzJfTUlOICAgICAgICAgICAgICAoLTIxNDc0ODM2NDctMSkKKyNl
bmRpZgorI2lmbmRlZiBJTlQ4X01BWAorI2RlZmluZSBJTlQ4X01BWCAgICAgICAgICAgICAgICgx
MjcpCisjZW5kaWYKKyNpZm5kZWYgSU5UMTZfTUFYCisjZGVmaW5lIElOVDE2X01BWCAgICAgICAg
ICAgICAgKDMyNzY3KQorI2VuZGlmCisjaWZuZGVmIElOVDMyX01BWAorI2RlZmluZSBJTlQzMl9N
QVggICAgICAgICAgICAgICgyMTQ3NDgzNjQ3KQorI2VuZGlmCisjaWZuZGVmIFVJTlQ4X01BWAor
I2RlZmluZSBVSU5UOF9NQVggICAgICAgICAgICAgICgyNTVVKQorI2VuZGlmCisjaWZuZGVmIFVJ
TlQxNl9NQVgKKyNkZWZpbmUgVUlOVDE2X01BWCAgICAgICAgICAgICAoNjU1MzVVKQorI2VuZGlm
CisjaWZuZGVmIFVJTlQzMl9NQVgKKyNkZWZpbmUgVUlOVDMyX01BWCAgICAgICAgICAgICAoNDI5
NDk2NzI5NVUpCisjZW5kaWYKKworI2VuZGlmIC8qICEgQzk5ICovCisKKyNlbmRpZiAvKiAhIEZM
RVhJTlRfSCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKKworLyogVGhlICJjb25zdCIgc3RvcmFn
ZS1jbGFzcy1tb2RpZmllciBpcyB2YWxpZC4gKi8KKyNkZWZpbmUgWVlfVVNFX0NPTlNUCisKKyNl
bHNlCS8qICEgX19jcGx1c3BsdXMgKi8KKworLyogQzk5IHJlcXVpcmVzIF9fU1REQ19fIHRvIGJl
IGRlZmluZWQgYXMgMS4gKi8KKyNpZiBkZWZpbmVkIChfX1NURENfXykKKworI2RlZmluZSBZWV9V
U0VfQ09OU1QKKworI2VuZGlmCS8qIGRlZmluZWQgKF9fU1REQ19fKSAqLworI2VuZGlmCS8qICEg
X19jcGx1c3BsdXMgKi8KKworI2lmZGVmIFlZX1VTRV9DT05TVAorI2RlZmluZSB5eWNvbnN0IGNv
bnN0CisjZWxzZQorI2RlZmluZSB5eWNvbnN0CisjZW5kaWYKKworLyogUmV0dXJuZWQgdXBvbiBl
bmQtb2YtZmlsZS4gKi8KKyNkZWZpbmUgWVlfTlVMTCAwCisKKy8qIFByb21vdGVzIGEgcG9zc2li
bHkgbmVnYXRpdmUsIHBvc3NpYmx5IHNpZ25lZCBjaGFyIHRvIGFuIHVuc2lnbmVkCisgKiBpbnRl
Z2VyIGZvciB1c2UgYXMgYW4gYXJyYXkgaW5kZXguICBJZiB0aGUgc2lnbmVkIGNoYXIgaXMgbmVn
YXRpdmUsCisgKiB3ZSB3YW50IHRvIGluc3RlYWQgdHJlYXQgaXQgYXMgYW4gOC1iaXQgdW5zaWdu
ZWQgY2hhciwgaGVuY2UgdGhlCisgKiBkb3VibGUgY2FzdC4KKyAqLworI2RlZmluZSBZWV9TQ19U
T19VSShjKSAoKHVuc2lnbmVkIGludCkgKHVuc2lnbmVkIGNoYXIpIGMpCisKKy8qIEFuIG9wYXF1
ZSBwb2ludGVyLiAqLworI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAorI2RlZmluZSBZ
WV9UWVBFREVGX1lZX1NDQU5ORVJfVAordHlwZWRlZiB2b2lkKiB5eXNjYW5fdDsKKyNlbmRpZgor
CisvKiBGb3IgY29udmVuaWVuY2UsIHRoZXNlIHZhcnMgKHBsdXMgdGhlIGJpc29uIHZhcnMgZmFy
IGJlbG93KQorICAgYXJlIG1hY3JvcyBpbiB0aGUgcmVlbnRyYW50IHNjYW5uZXIuICovCisjZGVm
aW5lIHl5aW4geXlnLT55eWluX3IKKyNkZWZpbmUgeXlvdXQgeXlnLT55eW91dF9yCisjZGVmaW5l
IHl5ZXh0cmEgeXlnLT55eWV4dHJhX3IKKyNkZWZpbmUgeXlsZW5nIHl5Zy0+eXlsZW5nX3IKKyNk
ZWZpbmUgeXl0ZXh0IHl5Zy0+eXl0ZXh0X3IKKyNkZWZpbmUgeXlsaW5lbm8gKFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfYnNfbGluZW5vKQorI2RlZmluZSB5eWNvbHVtbiAoWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9ic19jb2x1bW4pCisjZGVmaW5lIHl5X2ZsZXhfZGVidWcgeXln
LT55eV9mbGV4X2RlYnVnX3IKKworLyogRW50ZXIgYSBzdGFydCBjb25kaXRpb24uICBUaGlzIG1h
Y3JvIHJlYWxseSBvdWdodCB0byB0YWtlIGEgcGFyYW1ldGVyLAorICogYnV0IHdlIGRvIGl0IHRo
ZSBkaXNndXN0aW5nIGNydWZ0eSB3YXkgZm9yY2VkIG9uIHVzIGJ5IHRoZSAoKS1sZXNzCisgKiBk
ZWZpbml0aW9uIG9mIEJFR0lOLgorICovCisjZGVmaW5lIEJFR0lOIHl5Zy0+eXlfc3RhcnQgPSAx
ICsgMiAqCisKKy8qIFRyYW5zbGF0ZSB0aGUgY3VycmVudCBzdGFydCBzdGF0ZSBpbnRvIGEgdmFs
dWUgdGhhdCBjYW4gYmUgbGF0ZXIgaGFuZGVkCisgKiB0byBCRUdJTiB0byByZXR1cm4gdG8gdGhl
IHN0YXRlLiAgVGhlIFlZU1RBVEUgYWxpYXMgaXMgZm9yIGxleAorICogY29tcGF0aWJpbGl0eS4K
KyAqLworI2RlZmluZSBZWV9TVEFSVCAoKHl5Zy0+eXlfc3RhcnQgLSAxKSAvIDIpCisjZGVmaW5l
IFlZU1RBVEUgWVlfU1RBUlQKKworLyogQWN0aW9uIG51bWJlciBmb3IgRU9GIHJ1bGUgb2YgYSBn
aXZlbiBzdGFydCBzdGF0ZS4gKi8KKyNkZWZpbmUgWVlfU1RBVEVfRU9GKHN0YXRlKSAoWVlfRU5E
X09GX0JVRkZFUiArIHN0YXRlICsgMSkKKworLyogU3BlY2lhbCBhY3Rpb24gbWVhbmluZyAic3Rh
cnQgcHJvY2Vzc2luZyBhIG5ldyBmaWxlIi4gKi8KKyNkZWZpbmUgWVlfTkVXX0ZJTEUgeXlyZXN0
YXJ0KHl5aW4gLHl5c2Nhbm5lciApCisKKyNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUl9DSEFSIDAK
KworLyogU2l6ZSBvZiBkZWZhdWx0IGlucHV0IGJ1ZmZlci4gKi8KKyNpZm5kZWYgWVlfQlVGX1NJ
WkUKKyNkZWZpbmUgWVlfQlVGX1NJWkUgMTYzODQKKyNlbmRpZgorCisvKiBUaGUgc3RhdGUgYnVm
IG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgb25lIHN0YXRlIHBlciBjaGFyYWN0ZXIgaW4g
dGhlIG1haW4gYnVmZmVyLgorICovCisjZGVmaW5lIFlZX1NUQVRFX0JVRl9TSVpFICAgKChZWV9C
VUZfU0laRSArIDIpICogc2l6ZW9mKHl5X3N0YXRlX3R5cGUpKQorCisjaWZuZGVmIFlZX1RZUEVE
RUZfWVlfQlVGRkVSX1NUQVRFCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCit0
eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFURTsKKyNlbmRpZgor
CisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfU0la
RV9UCit0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CisjZW5kaWYKKworI2RlZmluZSBFT0JfQUNU
X0NPTlRJTlVFX1NDQU4gMAorI2RlZmluZSBFT0JfQUNUX0VORF9PRl9GSUxFIDEKKyNkZWZpbmUg
RU9CX0FDVF9MQVNUX01BVENIIDIKKworICAgIC8qIE5vdGU6IFdlIHNwZWNpZmljYWxseSBvbWl0
IHRoZSB0ZXN0IGZvciB5eV9ydWxlX2Nhbl9tYXRjaF9lb2wgYmVjYXVzZSBpdCByZXF1aXJlcwor
ICAgICAqICAgICAgIGFjY2VzcyB0byB0aGUgbG9jYWwgdmFyaWFibGUgeXlfYWN0LiBTaW5jZSB5
eWxlc3MoKSBpcyBhIG1hY3JvLCBpdCB3b3VsZCBicmVhaworICAgICAqICAgICAgIGV4aXN0aW5n
IHNjYW5uZXJzIHRoYXQgY2FsbCB5eWxlc3MoKSBmcm9tIE9VVFNJREUgeXlsZXguIAorICAgICAq
ICAgICAgIE9uZSBvYnZpb3VzIHNvbHV0aW9uIGl0IHRvIG1ha2UgeXlfYWN0IGEgZ2xvYmFsLiBJ
IHRyaWVkIHRoYXQsIGFuZCBzYXcKKyAgICAgKiAgICAgICBhIDUlIHBlcmZvcm1hbmNlIGhpdCBp
biBhIG5vbi15eWxpbmVubyBzY2FubmVyLCBiZWNhdXNlIHl5X2FjdCBpcworICAgICAqICAgICAg
IG5vcm1hbGx5IGRlY2xhcmVkIGFzIGEgcmVnaXN0ZXIgdmFyaWFibGUtLSBzbyBpdCBpcyBub3Qg
d29ydGggaXQuCisgICAgICovCisgICAgI2RlZmluZSAgWVlfTEVTU19MSU5FTk8obikgXAorICAg
ICAgICAgICAgZG8geyBcCisgICAgICAgICAgICAgICAgaW50IHl5bDtcCisgICAgICAgICAgICAg
ICAgZm9yICggeXlsID0gbjsgeXlsIDwgeXlsZW5nOyArK3l5bCApXAorICAgICAgICAgICAgICAg
ICAgICBpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKVwKKyAgICAgICAgICAgICAgICAgICAgICAg
IC0teXlsaW5lbm87XAorICAgICAgICAgICAgfXdoaWxlKDApCisgICAgCisvKiBSZXR1cm4gYWxs
IGJ1dCB0aGUgZmlyc3QgIm4iIG1hdGNoZWQgY2hhcmFjdGVycyBiYWNrIHRvIHRoZSBpbnB1dCBz
dHJlYW0uICovCisjZGVmaW5lIHl5bGVzcyhuKSBcCisJZG8gXAorCQl7IFwKKwkJLyogVW5kbyBl
ZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCisgICAgICAgIGludCB5eWxlc3NfbWFj
cm9fYXJnID0gKG4pOyBcCisgICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVzc19tYWNyb19hcmcp
O1wKKwkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7IFwKKwkJWVlfUkVTVE9SRV9ZWV9NT1JF
X09GRlNFVCBcCisJCXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwID0geXlfYnAgKyB5eWxlc3NfbWFj
cm9fYXJnIC0gWVlfTU9SRV9BREo7IFwKKwkJWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVw
IHl5dGV4dCBhZ2FpbiAqLyBcCisJCX0gXAorCXdoaWxlICggMCApCisKKyNkZWZpbmUgdW5wdXQo
YykgeXl1bnB1dCggYywgeXlnLT55eXRleHRfcHRyICwgeXlzY2FubmVyICkKKworI2lmbmRlZiBZ
WV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCisjZGVmaW5lIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RB
VEUKK3N0cnVjdCB5eV9idWZmZXJfc3RhdGUKKwl7CisJRklMRSAqeXlfaW5wdXRfZmlsZTsKKwor
CWNoYXIgKnl5X2NoX2J1ZjsJCS8qIGlucHV0IGJ1ZmZlciAqLworCWNoYXIgKnl5X2J1Zl9wb3M7
CQkvKiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1ZmZlciAqLworCisJLyogU2l6ZSBvZiBp
bnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBmb3IgRU9CCisJICogY2hh
cmFjdGVycy4KKwkgKi8KKwl5eV9zaXplX3QgeXlfYnVmX3NpemU7CisKKwkvKiBOdW1iZXIgb2Yg
Y2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBub3QgaW5jbHVkaW5nIEVPQgorCSAqIGNo
YXJhY3RlcnMuCisJICovCisJeXlfc2l6ZV90IHl5X25fY2hhcnM7CisKKwkvKiBXaGV0aGVyIHdl
ICJvd24iIHRoZSBidWZmZXIgLSBpLmUuLCB3ZSBrbm93IHdlIGNyZWF0ZWQgaXQsCisJICogYW5k
IGNhbiByZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNob3VsZCBmcmVlKCkgaXQgdG8KKwkg
KiBkZWxldGUgaXQuCisJICovCisJaW50IHl5X2lzX291cl9idWZmZXI7CisKKwkvKiBXaGV0aGVy
IHRoaXMgaXMgYW4gImludGVyYWN0aXZlIiBpbnB1dCBzb3VyY2U7IGlmIHNvLCBhbmQKKwkgKiBp
ZiB3ZSdyZSB1c2luZyBzdGRpbyBmb3IgaW5wdXQsIHRoZW4gd2Ugd2FudCB0byB1c2UgZ2V0Yygp
CisJICogaW5zdGVhZCBvZiBmcmVhZCgpLCB0byBtYWtlIHN1cmUgd2Ugc3RvcCBmZXRjaGluZyBp
bnB1dCBhZnRlcgorCSAqIGVhY2ggbmV3bGluZS4KKwkgKi8KKwlpbnQgeXlfaXNfaW50ZXJhY3Rp
dmU7CisKKwkvKiBXaGV0aGVyIHdlJ3JlIGNvbnNpZGVyZWQgdG8gYmUgYXQgdGhlIGJlZ2lubmlu
ZyBvZiBhIGxpbmUuCisJICogSWYgc28sICdeJyBydWxlcyB3aWxsIGJlIGFjdGl2ZSBvbiB0aGUg
bmV4dCBtYXRjaCwgb3RoZXJ3aXNlCisJICogbm90LgorCSAqLworCWludCB5eV9hdF9ib2w7CisK
KyAgICBpbnQgeXlfYnNfbGluZW5vOyAvKio8IFRoZSBsaW5lIGNvdW50LiAqLworICAgIGludCB5
eV9ic19jb2x1bW47IC8qKjwgVGhlIGNvbHVtbiBjb3VudC4gKi8KKyAgICAKKwkvKiBXaGV0aGVy
IHRvIHRyeSB0byBmaWxsIHRoZSBpbnB1dCBidWZmZXIgd2hlbiB3ZSByZWFjaCB0aGUKKwkgKiBl
bmQgb2YgaXQuCisJICovCisJaW50IHl5X2ZpbGxfYnVmZmVyOworCisJaW50IHl5X2J1ZmZlcl9z
dGF0dXM7CisKKyNkZWZpbmUgWVlfQlVGRkVSX05FVyAwCisjZGVmaW5lIFlZX0JVRkZFUl9OT1JN
QUwgMQorCS8qIFdoZW4gYW4gRU9GJ3MgYmVlbiBzZWVuIGJ1dCB0aGVyZSdzIHN0aWxsIHNvbWUg
dGV4dCB0byBwcm9jZXNzCisJICogdGhlbiB3ZSBtYXJrIHRoZSBidWZmZXIgYXMgWVlfRU9GX1BF
TkRJTkcsIHRvIGluZGljYXRlIHRoYXQgd2UKKwkgKiBzaG91bGRuJ3QgdHJ5IHJlYWRpbmcgZnJv
bSB0aGUgaW5wdXQgc291cmNlIGFueSBtb3JlLiAgV2UgbWlnaHQKKwkgKiBzdGlsbCBoYXZlIGEg
YnVuY2ggb2YgdG9rZW5zIHRvIG1hdGNoLCB0aG91Z2gsIGJlY2F1c2Ugb2YKKwkgKiBwb3NzaWJs
ZSBiYWNraW5nLXVwLgorCSAqCisJICogV2hlbiB3ZSBhY3R1YWxseSBzZWUgdGhlIEVPRiwgd2Ug
Y2hhbmdlIHRoZSBzdGF0dXMgdG8gIm5ldyIKKwkgKiAodmlhIHl5cmVzdGFydCgpKSwgc28gdGhh
dCB0aGUgdXNlciBjYW4gY29udGludWUgc2Nhbm5pbmcgYnkKKwkgKiBqdXN0IHBvaW50aW5nIHl5
aW4gYXQgYSBuZXcgaW5wdXQgZmlsZS4KKwkgKi8KKyNkZWZpbmUgWVlfQlVGRkVSX0VPRl9QRU5E
SU5HIDIKKworCX07CisjZW5kaWYgLyogIVlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUgKi8KKwor
LyogV2UgcHJvdmlkZSBtYWNyb3MgZm9yIGFjY2Vzc2luZyBidWZmZXIgc3RhdGVzIGluIGNhc2Ug
aW4gdGhlCisgKiBmdXR1cmUgd2Ugd2FudCB0byBwdXQgdGhlIGJ1ZmZlciBzdGF0ZXMgaW4gYSBt
b3JlIGdlbmVyYWwKKyAqICJzY2FubmVyIHN0YXRlIi4KKyAqCisgKiBSZXR1cm5zIHRoZSB0b3Ag
b2YgdGhlIHN0YWNrLCBvciBOVUxMLgorICovCisjZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSICgg
eXlnLT55eV9idWZmZXJfc3RhY2sgXAorICAgICAgICAgICAgICAgICAgICAgICAgICA/IHl5Zy0+
eXlfYnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcF0gXAorICAgICAgICAgICAg
ICAgICAgICAgICAgICA6IE5VTEwpCisKKy8qIFNhbWUgYXMgcHJldmlvdXMgbWFjcm8sIGJ1dCB1
c2VmdWwgd2hlbiB3ZSBrbm93IHRoYXQgdGhlIGJ1ZmZlciBzdGFjayBpcyBub3QKKyAqIE5VTEwg
b3Igd2hlbiB3ZSBuZWVkIGFuIGx2YWx1ZS4gRm9yIGludGVybmFsIHVzZSBvbmx5LgorICovCisj
ZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSB5eWctPnl5X2J1ZmZlcl9zdGFja1t5eWct
Pnl5X2J1ZmZlcl9zdGFja190b3BdCisKK3ZvaWQgeXlyZXN0YXJ0IChGSUxFICppbnB1dF9maWxl
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgeXlfc3dpdGNoX3RvX2J1ZmZlciAoWVlfQlVG
RkVSX1NUQVRFIG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworWVlfQlVGRkVSX1NU
QVRFIHl5X2NyZWF0ZV9idWZmZXIgKEZJTEUgKmZpbGUsaW50IHNpemUgLHl5c2Nhbl90IHl5c2Nh
bm5lciApOwordm9pZCB5eV9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYiAseXlzY2Fu
X3QgeXlzY2FubmVyICk7Cit2b2lkIHl5X2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIg
LHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCB5eXB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZG
RVJfU1RBVEUgbmV3X2J1ZmZlciAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHl5cG9wX2J1
ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3N0YXRpYyB2b2lkIHl5ZW5zdXJl
X2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgdm9pZCB5eV9sb2Fk
X2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgdm9pZCB5eV9pbml0
X2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIsRklMRSAqZmlsZSAseXlzY2FuX3QgeXlzY2FubmVy
ICk7CisKKyNkZWZpbmUgWVlfRkxVU0hfQlVGRkVSIHl5X2ZsdXNoX2J1ZmZlcihZWV9DVVJSRU5U
X0JVRkZFUiAseXlzY2FubmVyKQorCitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9idWZmZXIgKGNo
YXIgKmJhc2UseXlfc2l6ZV90IHNpemUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworWVlfQlVGRkVS
X1NUQVRFIHl5X3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKnl5X3N0ciAseXlzY2FuX3QgeXlz
Y2FubmVyICk7CitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAoeXljb25zdCBjaGFyICpi
eXRlcyx5eV9zaXplX3QgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCAqeXlhbGxv
YyAoeXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgKnl5cmVhbGxvYyAodm9p
ZCAqLHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHl5ZnJlZSAodm9pZCAq
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworI2RlZmluZSB5eV9uZXdfYnVmZmVyIHl5X2NyZWF0
ZV9idWZmZXIKKworI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNfaW50ZXJhY3RpdmUpIFwK
Kwl7IFwKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAorICAgICAgICB5eWVuc3VyZV9i
dWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0g
ICAgXAorICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNj
YW5uZXIpOyBcCisJfSBcCisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRlcmFj
dGl2ZSA9IGlzX2ludGVyYWN0aXZlOyBcCisJfQorCisjZGVmaW5lIHl5X3NldF9ib2woYXRfYm9s
KSBcCisJeyBcCisJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7XAorICAgICAgICB5eWVuc3Vy
ZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
ID0gICAgXAorICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5
eXNjYW5uZXIpOyBcCisJfSBcCisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wg
PSBhdF9ib2w7IFwKKwl9CisKKyNkZWZpbmUgWVlfQVRfQk9MKCkgKFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfYXRfYm9sKQorCisvKiBCZWdpbiB1c2VyIHNlY3QzICovCisKKyNkZWZpbmUg
eXl3cmFwKHl5c2Nhbm5lcikgMQorI2RlZmluZSBZWV9TS0lQX1lZV1JBUAorCit0eXBlZGVmIHVu
c2lnbmVkIGNoYXIgWVlfQ0hBUjsKKwordHlwZWRlZiBpbnQgeXlfc3RhdGVfdHlwZTsKKworI2Rl
ZmluZSB5eXRleHRfcHRyIHl5dGV4dF9yCisKK3N0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9w
cmV2aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgeXlfc3RhdGVfdHlw
ZSB5eV90cnlfTlVMX3RyYW5zICh5eV9zdGF0ZV90eXBlIGN1cnJlbnRfc3RhdGUgICx5eXNjYW5f
dCB5eXNjYW5uZXIpOworc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5
c2Nhbm5lciApOworc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciBtc2db
XSAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKKy8qIERvbmUgYWZ0ZXIgdGhlIGN1cnJlbnQgcGF0
dGVybiBoYXMgYmVlbiBtYXRjaGVkIGFuZCBiZWZvcmUgdGhlCisgKiBjb3JyZXNwb25kaW5nIGFj
dGlvbiAtIHNldHMgdXAgeXl0ZXh0LgorICovCisjZGVmaW5lIFlZX0RPX0JFRk9SRV9BQ1RJT04g
XAorCXl5Zy0+eXl0ZXh0X3B0ciA9IHl5X2JwOyBcCisJeXlsZW5nID0gKHNpemVfdCkgKHl5X2Nw
IC0geXlfYnApOyBcCisJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlfY3A7IFwKKwkqeXlfY3AgPSAn
XDAnOyBcCisJeXlnLT55eV9jX2J1Zl9wID0geXlfY3A7CisKKyNkZWZpbmUgWVlfTlVNX1JVTEVT
IDE0NworI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSIDE0OAorLyogVGhpcyBzdHJ1Y3QgaXMgbm90
IHVzZWQgaW4gdGhpcyBzY2FubmVyLAorICAgYnV0IGl0cyBwcmVzZW5jZSBpcyBuZWNlc3Nhcnku
ICovCitzdHJ1Y3QgeXlfdHJhbnNfaW5mbworCXsKKwlmbGV4X2ludDMyX3QgeXlfdmVyaWZ5Owor
CWZsZXhfaW50MzJfdCB5eV9ueHQ7CisJfTsKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5
eV9hY2NlcHRbNDQzXSA9CisgICAgeyAgIDAsCisgICAgICAgIDAsICAgIDAsICAxNDgsICAxNDYs
ICAxNDUsICAxNDUsICAxMzIsICAxMzgsICAxNDMsICAxMjcsCisgICAgICAxMjgsICAxMzYsICAx
MzUsICAxMjQsICAxMzMsICAxMzEsICAxMzcsICAgOTYsICAgOTYsICAxMjUsCisgICAgICAxMjEs
ICAxMzksICAxMjYsICAxNDAsICAxNDQsICAgOTMsICAxMjksICAxMzAsICAxNDIsICAgOTMsCisg
ICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsCisgICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAxMjIsCisgICAgICAxNDEsICAxMjMsICAxMzQsICAxMTgsICAxMDQsICAxMjMs
ICAxMTIsICAxMDcsICAxMDIsICAxMTAsCisgICAgICAxMDAsICAxMTEsICAxMDEsICAgOTksICAx
MDMsICAgOTgsICAgOTUsICAgOTYsICAgIDAsICAgIDAsCisgICAgICAxMzAsICAxMjIsICAxMjks
ICAxMTksICAxMTUsICAxMTcsICAxMTYsICAxMjAsICAgOTMsICAxMDgsCisgICAgICAxMTQsICAg
OTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCisgICAg
ICAgOTMsICAgMTIsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsCisKKyAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICAxNSwgICAxNywgICA5
MywgICA5MywgICA5MywKKyAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5Mywg
ICA5MywgICA5MywgICA5MywgICA5MywKKyAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5
MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKKyAgICAgICA5MywgICA5MywgICA5Mywg
ICA5MywgIDEwOSwgIDExMywgICAgMCwgICA5OCwgICAgMCwgICAgMCwKKyAgICAgICA5NywgICA5
NCwgIDEwNSwgIDEwNiwgICA0NSwgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKKyAgICAg
ICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5
MywKKyAgICAgICA5MywgICA5MywgICA5MywgICAxMywgICA5MywgICA5MywgICA5MywgICA5Mywg
ICA5MywgICA5MywKKyAgICAgICA5MywgICA5MywgICAyMSwgICA5MywgICA5MywgICA5MywgICA5
MywgICA5MywgICA5MywgICA5MywKKyAgICAgICA5MywgICAxOCwgICA5MywgICA5MywgICA5Mywg
ICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKKyAgICAgICA5MywgICA5MywgICA5MywgICA5
MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKKworICAgICAgIDkzLCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLCAgICAwLCAgIDk5LCAgICAwLCAgIDk4LCAgIDkzLAorICAgICAg
IDIzLCAgIDkzLCAgIDkzLCAgIDkwLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LAorICAgICAgIDkzLCAgIDE2LCAgIDQ4LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDY0LCAgIDkzLCAg
IDkzLCAgIDUzLAorICAgICAgIDY4LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDY1LAorICAgICAgICA0LCAgIDI4LCAgIDI5LCAgIDMwLCAgIDkzLCAg
IDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAorICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAorICAgICAgIDUxLCAgIDI0LCAg
IDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDMxLCAgIDMyLAorICAgICAgIDMz
LCAgIDIyLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDEwLCAgIDM3LCAgIDM4LCAgIDM5LCAgIDQ2LAor
ICAgICAgICA3LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDc3LCAgIDc4LCAgIDc5LCAgIDkz
LCAgIDI1LAorICAgICAgIDY5LCAgIDIwLCAgIDgwLCAgIDgxLCAgIDgyLCAgICAyLCAgIDc0LCAg
IDc1LCAgIDc2LCAgIDkzLAorCisgICAgICAgMTksICAgNzIsICAgOTMsICAgOTMsICAgMzQsICAg
MzUsICAgMzYsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsICAgOTMsICAgNjYsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgNDcsICAgOTMsICAgOTIsICAgOTMsICAgOTMsCisgICAgICAgMTQs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgNjcsICAgNjEsICAgNTYsICAgOTMsICAgOTMsCisg
ICAgICAgOTMsICAgOTMsICAgOTMsICAgNzMsICAgNTIsICAgOTMsICAgNTksICAgMjcsICAgOTMs
ICAgODksCisgICAgICAgNjAsICAgNDQsICAgNzEsICAgNTQsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsCisgICAgICAgOTMsICAgOTMsICAgNTUsICAgMjYsICAgOTMsICAgOTMs
ICAgOTMsICAgIDMsICAgOTMsICAgOTMsCisgICAgICAgOTMsICAgOTMsICAgOTMsICAgNDksICAg
IDgsICAgOTMsICAgIDksICAgOTMsICAgOTMsICAgMTEsCisgICAgICAgNjIsICAgOTMsICAgOTMs
ICAgOTMsICAgNTcsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgOTMsICAg
NTAsICAgNzAsICAgNTgsICAgIDYsICAgNjMsICAgIDEsICAgOTEsICAgIDUsICAgODMsCisKKyAg
ICAgICA0MCwgICA4NCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5Mywg
ICA5MywKKyAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA0MSwgICA5MywgICA5MywgICA5
MywgICA5MywgICA5MywKKyAgICAgICA5MywgICA5MywgICA0MywgICA5MywgICA4NywgICA5Mywg
ICA5MywgICA5MywgICA5MywgICA5MywKKyAgICAgICA4NSwgICA5MywgICA4NiwgICA5MywgICA5
MywgICA5MywgICA5MywgICA5MywgICA5MywgICA0MiwKKyAgICAgICA4OCwgICAgMAorICAgIH0g
OworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CisgICAgeyAgIDAs
CisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDIsICAgIDMsCisgICAgICAgIDIsICAgIDIsICAgIDIsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDIsICAgIDQsICAgIDEs
ICAgIDEsICAgIDEsICAgIDUsICAgIDYsICAgIDEsICAgIDcsCisgICAgICAgIDgsICAgIDksICAg
MTAsICAgMTEsICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTcsCisgICAgICAgMTgs
ICAgMTksICAgMjAsICAgMjAsICAgMjAsICAgMjEsICAgMjEsICAgMjIsICAgMjMsICAgMjQsCisg
ICAgICAgMjUsICAgMjYsICAgMjcsICAgIDEsICAgMjgsICAgMjgsICAgMjksICAgMzAsICAgMzEs
ICAgMjgsCisgICAgICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAg
MzIsICAgMzMsICAgMzIsCisgICAgICAgMzIsICAgMzQsICAgMzUsICAgMzIsICAgMzIsICAgMzIs
ICAgMzIsICAgMzYsICAgMzIsICAgMzIsCisgICAgICAgMzcsICAgIDEsICAgMzgsICAgMzksICAg
MzIsICAgIDEsICAgNDAsICAgNDEsICAgNDIsICAgNDMsCisKKyAgICAgICA0NCwgICA0NSwgICA0
NiwgICA0NywgICA0OCwgICAzMiwgICA0OSwgICA1MCwgICA1MSwgICA1MiwKKyAgICAgICA1Mywg
ICA1NCwgICAzMiwgICA1NSwgICA1NiwgICA1NywgICA1OCwgICA1OSwgICA2MCwgICA2MSwKKyAg
ICAgICA2MiwgICA2MywgICA2NCwgICA2NSwgICA2NiwgICA2NywgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwKKworICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxCisgICAgfSA7CisKK3N0YXRpYyB5
eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9tZXRhWzY4XSA9CisgICAgeyAgIDAsCisgICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisg
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIs
ICAgIDIsCisgICAgICAgIDIsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDIsICAgIDIsICAgIDIsCisgICAgICAgIDIsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMs
ICAgIDEsICAgIDEsICAgIDEsICAgIDIsCisgICAgICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAg
IDIsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsCisgICAgICAgIDMsICAgIDMsICAgIDMs
ICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsCisgICAgICAgIDMsICAg
IDMsICAgIDMsICAgIDEsICAgIDEsICAgIDEsICAgIDEKKyAgICB9IDsKKworc3RhdGljIHl5Y29u
c3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbNDQ1XSA9CisgICAgeyAgIDAsCisgICAgICAgIDAsICAg
IDAsICA1ODcsICA1ODgsICA1ODgsICA1ODgsICA1NjEsICAgNDMsICAgNjQsICA1ODgsCisgICAg
ICA1ODgsICA1NjAsICAgNjEsICA1ODgsICAgNjAsICAgNTgsICA1NTksICAgNzcsICAgODYsICA1
NTcsCisgICAgICA1ODgsICAxMDQsICA1NTcsICAgNTUsICA1ODgsICAgIDAsICA1ODgsICA1ODgs
ICAgNzUsICAgMjYsCisgICAgICAgNTcsICAgODIsICAgODMsICAgNzMsICAgOTMsICA1MjgsICAg
OTcsICAgOTUsICA1MjcsICAgNDQsCisgICAgICAgNzEsICA1MjEsICAxMDQsICA1MzQsICAxMTAs
ICAxMTYsICAgMzUsICAxMTEsICA1MzAsICA1ODgsCisgICAgICAxMTQsICA1ODgsICA1ODgsICA1
ODgsICA1ODgsICA1ODgsICA1ODgsICA1ODgsICA1ODgsICA1ODgsCisgICAgICA1ODgsICA1ODgs
ICA1ODgsICAxNjUsICA1ODgsICAxNzIsICAyMDIsICAyMTEsICAyMzMsICAgIDAsCisgICAgICA1
ODgsICA1ODgsICA1ODgsICA1NTEsICA1ODgsICA1ODgsICA1ODgsICA1NTAsICAgIDAsICA1ODgs
CisgICAgICA1ODgsICA1MjMsICA1MTYsICA1MTksICA1MjcsICA1MjYsICA1MTMsICA1MjgsICA1
MTUsICA1MjEsCisgICAgICA1MDksICA1MDYsICA1MTksICA1MDYsICA1MDMsICA1MDMsICA1MDks
ICA0OTcsICAxMDgsICA1MDIsCisKKyAgICAgIDUxMiwgIDQ5OCwgIDUwNCwgIDUwNywgIDUwOCwg
ICAgMCwgIDE0NSwgIDUwNywgIDExMywgIDQ5MywKKyAgICAgIDUwNiwgIDQ5NywgIDQ5OSwgIDQ4
OSwgIDUwMywgIDUwMCwgIDUwMiwgIDQ4NSwgIDQ5MCwgIDQ4NywKKyAgICAgIDQ3NiwgIDE1Nywg
IDQ4NCwgIDQ4OSwgIDQ4NSwgIDQ4NywgIDQ3NiwgIDQ3OSwgIDExOCwgIDQ4NCwKKyAgICAgIDQ3
NiwgIDQ4OCwgICA3MCwgIDQ4MSwgIDU4OCwgIDU4OCwgIDI0NiwgIDI1MywgIDI3MCwgIDIxOSwK
KyAgICAgIDI4MywgICAgMCwgIDU4OCwgIDU4OCwgICAgMCwgIDQ3MywgIDQ3NywgIDQ4NiwgIDQ4
MywgIDQ2NywKKyAgICAgIDQ2NywgIDExOSwgIDQ4MiwgIDQ3OSwgIDQ3OSwgIDQ3NywgIDQ3NCwg
IDQ2NiwgIDQ3MiwgIDQ1OSwKKyAgICAgIDQ3MCwgIDQ1NiwgIDQ3MiwgICAgMCwgIDQ2OSwgIDQ1
NywgIDQ2NCwgIDQ2MSwgIDQ2NSwgIDQ1OCwKKyAgICAgIDQ0NywgIDQ0NiwgIDQ1OSwgIDQ2Miwg
IDQ1OSwgIDQ1NCwgIDQ0NSwgIDE4OCwgIDQ1MCwgIDQ1MywKKyAgICAgIDQ0NCwgIDQ0MSwgIDQ0
NSwgIDQ1MSwgIDQ0MiwgIDQzMywgIDQzNiwgIDQzNCwgIDQ0NCwgIDQzMCwKKyAgICAgIDQyOCwg
IDQ0MSwgIDQyNywgIDQyOSwgIDQyNiwgIDQzNywgIDQzNiwgIDEyNCwgIDQzMSwgIDQyNiwKKwor
ICAgICAgNDE1LCAgMjU4LCAgNDMzLCAgNDM1LCAgNDI0LCAgMjkwLCAgMjk3LCAgMzA0LCAgMzEx
LCAgNDI1LAorICAgICAgICAwLCAgNDIzLCAgMjc1LCAgICAwLCAgNDE1LCAgNDEzLCAgNDIxLCAg
NDEwLCAgNDI3LCAgNDE2LAorICAgICAgMzE2LCAgICAwLCAgICAwLCAgNDEwLCAgNDIwLCAgNDIw
LCAgICAwLCAgNDA1LCAgMzE5LCAgICAwLAorICAgICAgICAwLCAgNDA3LCAgMzIyLCAgNDA4LCAg
NDAyLCAgNDAxLCAgNDAyLCAgNDAxLCAgMzI1LCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgMzk3LCAgMzk4LCAgNDAzLCAgMzk0LCAgNDA3LCAgNDAyLAorICAgICAgNDAxLCAg
MzkzLCAgMzk3LCAgMzg5LCAgMzkyLCAgMzk2LCAgNDAxLCAgMzg3LCAgMzk5LCAgMzkwLAorICAg
ICAgICAwLCAgICAwLCAgMzk2LCAgMzg1LCAgMzg1LCAgMzkwLCAgMzg5LCAgMzg2LCAgICAwLCAg
ICAwLAorICAgICAgICAwLCAgICAwLCAgMzc2LCAgMzg4LCAgMzkwLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLAorICAgICAgICAwLCAgMzc4LCAgMzc5LCAgMzczLCAgMzgzLCAgICAwLCAg
ICAwLCAgICAwLCAgMzc0LCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMzgxLAorCisgICAgICAgIDAsICAgIDAsICAzNzks
ICAzNzUsICAgIDAsICAgIDAsICAgIDAsICAzNzEsICAzNjcsICAzNzIsCisgICAgICAzNjIsICAz
NzUsICAzNjEsICAzNzQsICAzNjMsICAzNzAsICAgIDAsICAzNjgsICAzNzAsICAzNTQsCisgICAg
ICAzNTYsICAzNjIsICAzNjgsICAzNjMsICAzNTEsICAgIDAsICAzNTMsICAgIDAsICAzNTIsICAz
NTUsCisgICAgICAgIDAsICAzNDQsICAzNDMsICAzNDMsICAzNTYsICAgIDAsICAzNTgsICAgIDAs
ICAzNTcsICAzNTYsCisgICAgICAzNDEsICAzNTQsICAzNDEsICAgIDAsICAgIDAsICAzNDQsICAg
IDAsICAgIDAsICAzMzYsICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAzMzMs
ICAzNDQsICAzMzcsICAzNDMsICAzNDAsICAzMzUsCisgICAgICAzMjcsICAzMzksICAgIDAsICAg
IDAsICAzMzIsICAzMzksICAzMjgsICAgIDAsICAzMzcsICAzMzQsCisgICAgICAzMjQsICAzMjks
ICAzMzIsICAgIDAsICAgIDAsICAzMzIsICAgIDAsICAzMzAsICAzMjksICAgIDAsCisgICAgICAg
IDAsICAzMjgsICAzMTQsICAzMjYsICAgIDAsICAzMTcsICAzMzgsICAzMzcsICAzMzYsICAzMDcs
CisgICAgICAzMDMsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAg
IDAsICAzMjgsCisKKyAgICAgIDE2NiwgIDMyNSwgIDMxNiwgIDI5OSwgIDMwOCwgIDMxMCwgIDMw
NiwgIDMwOCwgIDMwNywgIDMwNiwKKyAgICAgIDMwOSwgIDMwNiwgIDI1NiwgIDI1MywgICAgMCwg
IDIyOCwgIDIzOCwgIDIyMiwgIDIzNSwgIDIwMywKKyAgICAgIDIwNywgIDIwNCwgIDIxMiwgIDE5
MSwgICAgMCwgIDIwMSwgIDE2NSwgIDE2NywgIDE1MywgIDE2MSwKKyAgICAgICAgMCwgIDE3MCwg
ICAgMCwgIDE3NSwgIDE1MSwgIDE0MSwgIDEwMCwgIDExNCwgICA1OSwgICAgMCwKKyAgICAgICAg
MCwgIDU4OCwgIDM1OSwgIDExMworICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2
X3QgeXlfZGVmWzQ0NV0gPQorICAgIHsgICAwLAorICAgICAgNDQyLCAgICAxLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAorICAgICAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAorICAgICAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQzLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQzLAor
ICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLAorICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQyLAorICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAorICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQ0LAorICAgICAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQzLCAgNDQyLAorICAgICAgNDQyLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAg
ICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLAorCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCisgICAgICA0NDIsICA0
NDQsICA0NDIsICA0NDIsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisgICAg
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisKKyAgICAgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MywKKyAgICAg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywKKyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywKKyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywKKyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKKyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKKyAgICAgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKKyAgICAgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywK
KyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywKKyAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywKKworICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAor
ICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLAorICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorCisg
ICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisgICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisgICAgICA0NDMsICAgIDAsICA0NDIs
ICA0NDIKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFs2NTZd
ID0KKyAgICB7ICAgMCwKKyAgICAgICAgNCwgICAgNSwgICAgNiwgICAgNywgICAgOCwgICAgOSwg
ICAxMCwgICAxMSwgICAxMiwgICAxMywKKyAgICAgICAxNCwgICAxNSwgICAxNiwgICAxNywgICAx
OCwgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxOSwKKyAgICAgICAxOSwgICAyMCwgICAyMSwg
ICAyMiwgICAyMywgICAyNCwgICAyNSwgICAyNiwgICAyNiwgICAyNiwKKyAgICAgICAyNiwgICAy
NiwgICAyNiwgICAyNiwgICAyNiwgICAyNiwgICAyNywgICAyOCwgICAyOSwgICAzMCwKKyAgICAg
ICAzMSwgICAzMiwgICAzMywgICAzNCwgICAzNSwgICAzNiwgICAzNywgICAzOCwgICAyNiwgICAz
OSwKKyAgICAgICA0MCwgICA0MSwgICA0MiwgICA0MywgICA0NCwgICA0NSwgICA0NiwgICA0Nywg
ICA0OCwgICA0OSwKKyAgICAgICAyNiwgICAyNiwgICAyNiwgICA1MCwgICA1MSwgICA1MiwgICA1
MywgICA1NSwgICA1NiwgICA1NywKKyAgICAgICA2MCwgICA2MiwgICA2NCwgICA2NCwgICA2NCwg
ICA2NCwgICA2NCwgICA2NCwgICA2NCwgICA3NywKKyAgICAgICA3OCwgICA4MiwgICA4MywgIDEx
MCwgICA2MywgICA2MSwgIDEyOSwgIDExMSwgICA1OCwgICA2NiwKKyAgICAgIDEzMCwgICA2Nywg
ICA2NywgICA2NywgICA2NywgICA2NywgICA2NywgICA2OCwgICA2NiwgICA4MCwKKworICAgICAg
IDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY5LCAgIDcyLCAgIDg0
LAorICAgICAgMTEyLCAgIDg1LCAgIDcwLCAgIDgxLCAgMTQyLCAgIDg2LCAgIDY5LCAgMjAzLCAg
NDQxLCAgMjA0LAorICAgICAgIDY5LCAgIDg3LCAgIDk0LCAgMTEzLCAgIDk1LCAgIDczLCAgIDkw
LCAgIDc0LCAgIDc1LCAgIDY5LAorICAgICAgIDkxLCAgIDg4LCAgIDk3LCAgIDk2LCAgIDg5LCAg
IDkyLCAgMTAzLCAgIDcwLCAgMTM1LCAgMTA2LAorICAgICAgIDk4LCAgIDkzLCAgIDk5LCAgMTE1
LCAgMTA0LCAgMTAwLCAgMTA3LCAgMTYyLCAgNDQwLCAgMTE5LAorICAgICAgMTMxLCAgMTAxLCAg
NDM5LCAgMTA4LCAgMTMyLCAgMTA1LCAgMTIwLCAgMTIxLCAgMTE2LCAgMTI1LAorICAgICAgMTYz
LCAgMTE3LCAgMTI2LCAgMTMzLCAgMTc2LCAgMTk4LCAgMTIyLCAgMTIzLCAgMjY0LCAgMTI0LAor
ICAgICAgMTI3LCAgNDM4LCAgMTc3LCAgMTk5LCAgMjE2LCAgMjE3LCAgMjY1LCAgMTI4LCAgMTM2
LCAgIDY0LAorICAgICAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgMTM4LCAg
MTM4LCAgMTM4LCAgMTM4LAorICAgICAgMTM4LCAgMTM4LCAgMTM4LCAgNDM3LCAgMTcwLCAgMTM3
LCAgMTkwLCAgMTcxLCAgMTcyLCAgNDA2LAorCisgICAgICA0MDcsICAxNzMsICAxMzksICAxNzQs
ICAyNDIsICAyNDMsICAyNDQsICA0MzYsICAxMzcsICA0MzUsCisgICAgICA0MzQsICAxOTEsICA0
MzMsICA0MzIsICAgNjYsICAxMzksICAgNjcsICAgNjcsICAgNjcsICAgNjcsCisgICAgICAgNjcs
ICAgNjcsICAgNjgsICAgNjYsICA0MzEsICAgNjgsICAgNjgsICAgNjgsICAgNjgsICAgNjgsCisg
ICAgICAgNjgsICAgNjgsICAgNjksICAxNDEsICAxNDEsICAxNDEsICAxNDEsICAxNDEsICAxNDEs
ICAxNDEsCisgICAgICA0MzAsICAgNjksICAxNDAsICA0MjksICAxNDAsICAgNjksICA0MjgsICAx
NDEsICAxNDEsICAxNDEsCisgICAgICAxNDEsICAxNDEsICAxNDEsICAxNDEsICAgNjksICAyMDYs
ICA0MjcsICAyMDYsICA0MjYsICA0MjUsCisgICAgICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAy
MDcsICAyMDcsICAyMDcsICAxMzgsICAxMzgsICAxMzgsCisgICAgICAxMzgsICAxMzgsICAxMzgs
ICAxMzgsICAyNjksICAyNzAsICAyNzEsICA0MjQsICA0MjMsICAyMDgsCisgICAgICA0MjIsICAy
MDgsICA0MjEsICAxMzksICAyMDksICAyMDksICAyMDksICAyMDksICAyMDksICAyMDksCisgICAg
ICAyMDksICAyNzcsICAyNzgsICAyNzksICA0MjAsICA0MTksICAxMzksICAxNDEsICAxNDEsICAx
NDEsCisKKyAgICAgIDE0MSwgIDE0MSwgIDE0MSwgIDE0MSwgIDIwNywgIDIwNywgIDIwNywgIDIw
NywgIDIwNywgIDIwNywKKyAgICAgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywg
IDIwNywgIDIwNywgIDIwOSwgIDIwOSwKKyAgICAgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIw
OSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwKKyAgICAgIDIwOSwgIDIwOSwgIDI4Niwg
IDI4NywgIDI4OCwgIDI5MywgIDI5NCwgIDI5NSwgIDI5NywgIDI5OCwKKyAgICAgIDI5OSwgIDMw
NSwgIDMwNiwgIDMwNywgIDM4NywgIDM4OCwgIDM4OSwgIDQxOCwgIDQxNywgIDQxNiwKKyAgICAg
IDQxNSwgIDQxNCwgIDQxMywgIDQxMiwgIDQxMSwgIDQxMCwgIDQwOSwgIDM5MCwgIDQwOCwgIDM5
MSwKKyAgICAgICA3OSwgICA3OSwgIDQwNSwgIDQwNCwgIDQwMywgIDQwMiwgIDQwMSwgIDQwMCwg
IDM5OSwgIDM5OCwKKyAgICAgIDM5NywgIDM5NiwgIDM5NSwgIDM5NCwgIDM5MywgIDM5MiwgIDM4
NiwgIDM4NSwgIDM4NCwgIDM4MywKKyAgICAgIDM4MiwgIDM4MSwgIDM4MCwgIDM3OSwgIDM3OCwg
IDM3NywgIDM3NiwgIDM3NSwgIDM3NCwgIDM3MywKKyAgICAgIDM3MiwgIDM3MSwgIDM3MCwgIDM2
OSwgIDM2OCwgIDM2NywgIDM2NiwgIDM2NSwgIDM2NCwgIDM2MywKKworICAgICAgMzYyLCAgMzYx
LCAgMzYwLCAgMzU5LCAgMzU4LCAgMzU3LCAgMzU2LCAgMzU1LCAgMzU0LCAgMzUzLAorICAgICAg
MzUyLCAgMzUxLCAgMzUwLCAgMzQ5LCAgMzQ4LCAgMzQ3LCAgMzQ2LCAgMzQ1LCAgMzQ0LCAgMzQz
LAorICAgICAgMzQyLCAgMzQxLCAgMzQwLCAgMzM5LCAgMzM4LCAgMzM3LCAgMzM2LCAgMzM1LCAg
MzM0LCAgMzMzLAorICAgICAgMzMyLCAgMzMxLCAgMzMwLCAgMzI5LCAgMzI4LCAgMzI3LCAgMzI2
LCAgMzI1LCAgMzI0LCAgMzIzLAorICAgICAgMzIyLCAgMzIxLCAgMzIwLCAgMzE5LCAgMzE4LCAg
MzE3LCAgMzE2LCAgMzE1LCAgMzE0LCAgMzEzLAorICAgICAgMzEyLCAgMzExLCAgMzEwLCAgMzA5
LCAgMzA4LCAgMzA0LCAgMzAzLCAgMzAyLCAgMzAxLCAgMzAwLAorICAgICAgMjk2LCAgMjkyLCAg
MjkxLCAgMjkwLCAgMjg5LCAgMjg1LCAgMjg0LCAgMjgzLCAgMjgyLCAgMjgxLAorICAgICAgMjgw
LCAgMjc2LCAgMjc1LCAgMjc0LCAgMjczLCAgMjcyLCAgMjY4LCAgMjY3LCAgMjY2LCAgMjYzLAor
ICAgICAgMjYyLCAgMjYxLCAgMjYwLCAgMjU5LCAgMjU4LCAgMjU3LCAgMjU2LCAgMjU1LCAgMjU0
LCAgMjUzLAorICAgICAgMjUyLCAgMjUxLCAgMjUwLCAgMjQ5LCAgMjQ4LCAgMjQ3LCAgMjQ2LCAg
MjQ1LCAgMjQxLCAgMjQwLAorCisgICAgICAyMzksICAyMzgsICAyMzcsICAyMzYsICAyMzUsICAy
MzQsICAyMzMsICAyMzIsICAyMzEsICAyMzAsCisgICAgICAyMjksICAyMjgsICAyMjcsICAyMjYs
ICAyMjUsICAyMjQsICAyMjMsICAyMjIsICAyMjEsICAyMjAsCisgICAgICAyMTksICAyMTgsICAy
MTUsICAyMTQsICAyMTMsICAyMTIsICAyMTEsICAyMTAsICAyMDUsICAyMDIsCisgICAgICAyMDEs
ICAyMDAsICAxOTcsICAxOTYsICAxOTUsICAxOTQsICAxOTMsICAxOTIsICAxODksICAxODgsCisg
ICAgICAxODcsICAxODYsICAxODUsICAxODQsICAxODMsICAxODIsICAxODEsICAxODAsICAxNzks
ICAxNzgsCisgICAgICAxNzUsICAxNjksICAxNjgsICAxNjcsICAxNjYsICAxNjUsICAxNjQsICAx
NjEsICAxNjAsICAxNTksCisgICAgICAxNTgsICAxNTcsICAxNTYsICAxNTUsICAxNTQsICAxNTMs
ICAxNTIsICAxNTEsICAxNTAsICAxNDksCisgICAgICAxNDgsICAxNDcsICAxNDYsICAxNDUsICAx
NDQsICAxNDMsICAxMzQsICAxMTgsICAxMTQsICAxMDksCisgICAgICAxMDIsICAgNzYsICAgNzEs
ICAgNjUsICAgNTksICAgNTQsICA0NDIsICAgIDMsICA0NDIsICA0NDIsCisgICAgICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCisKKyAg
ICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwKKyAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwKKyAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKKyAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKKyAgICAgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKKyAgICAgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MgorICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2
X3QgeXlfY2hrWzY1Nl0gPQorICAgIHsgICAwLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAor
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICA4LCAgICA4LCAgICA5LAorICAgICAgIDEzLCAgIDE1LCAgIDE2
LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDI0LAorICAgICAgIDI0LCAg
IDMwLCAgIDMwLCAgIDQwLCAgIDE1LCAgIDEzLCAgIDQ3LCAgIDQwLCAgICA5LCAgIDE4LAorICAg
ICAgIDQ3LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE5LCAg
IDI5LAorCisgICAgICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAg
MTgsICAgMjIsICAgMzEsCisgICAgICAgNDEsICAgMzEsICAgMTgsICAgMjksICA0NDQsICAgMzEs
ICAgMTksICAxMzMsICA0MzksICAxMzMsCisgICAgICAgMTgsICAgMzIsICAgMzQsICAgNDEsICAg
MzQsICAgMjIsICAgMzMsICAgMjIsICAgMjIsICAgMTksCisgICAgICAgMzMsICAgMzIsICAgMzUs
ICAgMzQsICAgMzIsICAgMzMsICAgMzcsICAgMTgsICAgNTEsICAgMzgsCisgICAgICAgMzUsICAg
MzMsICAgMzUsICAgNDMsICAgMzcsICAgMzUsICAgMzgsICAgOTksICA0MzgsICAgNDUsCisgICAg
ICAgNDgsICAgMzUsICA0MzcsICAgMzgsICAgNDgsICAgMzcsICAgNDUsICAgNDUsICAgNDMsICAg
NDYsCisgICAgICAgOTksICAgNDMsICAgNDYsICAgNDgsICAxMDksICAxMjksICAgNDUsICAgNDUs
ICAxOTgsICAgNDUsCisgICAgICAgNDYsICA0MzYsICAxMDksICAxMjksICAxNTIsICAxNTIsICAx
OTgsICAgNDYsICAgNTEsICAgNjQsCisgICAgICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNjQs
ICAgNjQsICAgNjYsICAgNjYsICAgNjYsICAgNjYsCisgICAgICAgNjYsICAgNjYsICAgNjYsICA0
MzUsICAxMDcsICAgNjQsICAxMjIsICAxMDcsICAxMDcsICA0MDEsCisKKyAgICAgIDQwMSwgIDEw
NywgICA2NiwgIDEwNywgIDE3OCwgIDE3OCwgIDE3OCwgIDQzNCwgICA2NCwgIDQzMiwKKyAgICAg
IDQzMCwgIDEyMiwgIDQyOSwgIDQyOCwgICA2NywgICA2NiwgICA2NywgICA2NywgICA2NywgICA2
NywKKyAgICAgICA2NywgICA2NywgICA2NywgICA2OCwgIDQyNywgICA2OCwgICA2OCwgICA2OCwg
ICA2OCwgICA2OCwKKyAgICAgICA2OCwgICA2OCwgICA2NywgIDE0MCwgIDE0MCwgIDE0MCwgIDE0
MCwgIDE0MCwgIDE0MCwgIDE0MCwKKyAgICAgIDQyNiwgICA2OCwgICA2OSwgIDQyNCwgICA2OSwg
ICA2NywgIDQyMywgICA2OSwgICA2OSwgICA2OSwKKyAgICAgICA2OSwgICA2OSwgICA2OSwgICA2
OSwgICA2OCwgIDEzNywgIDQyMiwgIDEzNywgIDQyMSwgIDQyMCwKKyAgICAgIDEzNywgIDEzNywg
IDEzNywgIDEzNywgIDEzNywgIDEzNywgIDEzNywgIDEzOCwgIDEzOCwgIDEzOCwKKyAgICAgIDEz
OCwgIDEzOCwgIDEzOCwgIDEzOCwgIDIwMiwgIDIwMiwgIDIwMiwgIDQxOSwgIDQxOCwgIDEzOSwK
KyAgICAgIDQxNywgIDEzOSwgIDQxNiwgIDEzOCwgIDEzOSwgIDEzOSwgIDEzOSwgIDEzOSwgIDEz
OSwgIDEzOSwKKyAgICAgIDEzOSwgIDIxMywgIDIxMywgIDIxMywgIDQxNCwgIDQxMywgIDEzOCwg
IDE0MSwgIDE0MSwgIDE0MSwKKworICAgICAgMTQxLCAgMTQxLCAgMTQxLCAgMTQxLCAgMjA2LCAg
MjA2LCAgMjA2LCAgMjA2LCAgMjA2LCAgMjA2LAorICAgICAgMjA2LCAgMjA3LCAgMjA3LCAgMjA3
LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA4LCAgMjA4LAorICAgICAgMjA4LCAgMjA4LCAg
MjA4LCAgMjA4LCAgMjA4LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LAorICAgICAgMjA5
LCAgMjA5LCAgMjIxLCAgMjIxLCAgMjIxLCAgMjI5LCAgMjI5LCAgMjI5LCAgMjMzLCAgMjMzLAor
ICAgICAgMjMzLCAgMjM5LCAgMjM5LCAgMjM5LCAgMzcyLCAgMzcyLCAgMzcyLCAgNDEyLCAgNDEx
LCAgNDEwLAorICAgICAgNDA5LCAgNDA4LCAgNDA3LCAgNDA2LCAgNDA1LCAgNDA0LCAgNDAzLCAg
MzcyLCAgNDAyLCAgMzcyLAorICAgICAgNDQzLCAgNDQzLCAgNDAwLCAgMzkxLCAgMzkwLCAgMzg5
LCAgMzg4LCAgMzg3LCAgMzg2LCAgMzg0LAorICAgICAgMzgzLCAgMzgyLCAgMzc5LCAgMzc4LCAg
Mzc2LCAgMzczLCAgMzcxLCAgMzcwLCAgMzY5LCAgMzY3LAorICAgICAgMzY2LCAgMzY1LCAgMzYy
LCAgMzYxLCAgMzYwLCAgMzU5LCAgMzU4LCAgMzU3LCAgMzU2LCAgMzU1LAorICAgICAgMzQ5LCAg
MzQ2LCAgMzQzLCAgMzQyLCAgMzQxLCAgMzQwLCAgMzM5LCAgMzM3LCAgMzM1LCAgMzM0LAorCisg
ICAgICAzMzMsICAzMzIsICAzMzAsICAzMjksICAzMjcsICAzMjUsICAzMjQsICAzMjMsICAzMjIs
ICAzMjEsCisgICAgICAzMjAsICAzMTksICAzMTgsICAzMTYsICAzMTUsICAzMTQsICAzMTMsICAz
MTIsICAzMTEsICAzMTAsCisgICAgICAzMDksICAzMDgsICAzMDQsICAzMDMsICAzMDAsICAyODks
ICAyODUsICAyODQsICAyODMsICAyODIsCisgICAgICAyNzUsICAyNzQsICAyNzMsICAyNjgsICAy
NjcsICAyNjYsICAyNjUsICAyNjQsICAyNjMsICAyNjAsCisgICAgICAyNTksICAyNTgsICAyNTcs
ICAyNTYsICAyNTUsICAyNTQsICAyNTMsICAyNTIsICAyNTEsICAyNTAsCisgICAgICAyNDksICAy
NDgsICAyNDcsICAyNDYsICAyNDUsICAyMzgsICAyMzcsICAyMzYsICAyMzUsICAyMzQsCisgICAg
ICAyMzIsICAyMjgsICAyMjYsICAyMjUsICAyMjQsICAyMjAsICAyMTksICAyMTgsICAyMTcsICAy
MTYsCisgICAgICAyMTUsICAyMTIsICAyMTAsICAyMDUsICAyMDQsICAyMDMsICAyMDEsICAyMDAs
ICAxOTksICAxOTcsCisgICAgICAxOTYsICAxOTUsICAxOTQsICAxOTMsICAxOTIsICAxOTEsICAx
OTAsICAxODksICAxODgsICAxODcsCisgICAgICAxODYsICAxODUsICAxODQsICAxODMsICAxODIs
ICAxODEsICAxODAsICAxNzksICAxNzcsICAxNzYsCisKKyAgICAgIDE3NSwgIDE3NCwgIDE3Mywg
IDE3MiwgIDE3MSwgIDE3MCwgIDE2OSwgIDE2OCwgIDE2NywgIDE2NiwKKyAgICAgIDE2NSwgIDE2
MywgIDE2MiwgIDE2MSwgIDE2MCwgIDE1OSwgIDE1OCwgIDE1NywgIDE1NiwgIDE1NSwKKyAgICAg
IDE1NCwgIDE1MywgIDE1MSwgIDE1MCwgIDE0OSwgIDE0OCwgIDE0NywgIDE0NiwgIDEzNCwgIDEz
MiwKKyAgICAgIDEzMSwgIDEzMCwgIDEyOCwgIDEyNywgIDEyNiwgIDEyNSwgIDEyNCwgIDEyMywg
IDEyMSwgIDEyMCwKKyAgICAgIDExOSwgIDExOCwgIDExNywgIDExNiwgIDExNSwgIDExNCwgIDEx
MywgIDExMiwgIDExMSwgIDExMCwKKyAgICAgIDEwOCwgIDEwNSwgIDEwNCwgIDEwMywgIDEwMiwg
IDEwMSwgIDEwMCwgICA5OCwgICA5NywgICA5NiwKKyAgICAgICA5NSwgICA5NCwgICA5MywgICA5
MiwgICA5MSwgICA5MCwgICA4OSwgICA4OCwgICA4NywgICA4NiwKKyAgICAgICA4NSwgICA4NCwg
ICA4MywgICA4MiwgICA3OCwgICA3NCwgICA0OSwgICA0NCwgICA0MiwgICAzOSwKKyAgICAgICAz
NiwgICAyMywgICAyMCwgICAxNywgICAxMiwgICAgNywgICAgMywgIDQ0MiwgIDQ0MiwgIDQ0MiwK
KyAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwgIDQ0MiwKKworICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLAorICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAorICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAorICAgICAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAorICAgICAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAor
ICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyCisgICAgfSA7CisKKy8qIFRhYmxlIG9m
IGJvb2xlYW5zLCB0cnVlIGlmIHJ1bGUgY291bGQgbWF0Y2ggZW9sLiAqLworc3RhdGljIHl5Y29u
c3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuX21hdGNoX2VvbFsxNDhdID0KKyAgICB7ICAgMCwK
KzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAor
ICAgIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsICAgICB9OworCisvKiBUaGUgaW50ZW50IGJlaGlu
ZCB0aGlzIGRlZmluaXRpb24gaXMgdGhhdCBpdCdsbCBjYXRjaAorICogYW55IHVzZXMgb2YgUkVK
RUNUIHdoaWNoIGZsZXggbWlzc2VkLgorICovCisjZGVmaW5lIFJFSkVDVCByZWplY3RfdXNlZF9i
dXRfbm90X2RldGVjdGVkCisjZGVmaW5lIHl5bW9yZSgpIHl5bW9yZV91c2VkX2J1dF9ub3RfZGV0
ZWN0ZWQKKyNkZWZpbmUgWVlfTU9SRV9BREogMAorI2RlZmluZSBZWV9SRVNUT1JFX1lZX01PUkVf
T0ZGU0VUCisvKgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBM
ZXggc3BlY2lmaWNhdGlvbiBmb3IgR0xTTCBFUy4KK0Jhc2VkIG9uIEFOU0kgQyBncmFtbWFyLCBM
ZXggc3BlY2lmaWNhdGlvbjoKK2h0dHA6Ly93d3cubHlzYXRvci5saXUuc2UvYy9BTlNJLUMtZ3Jh
bW1hci1sLmh0bWwKKworSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBS
VU4gZ2VuZXJhdGVfcGFyc2VyLnNoLAorV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIExFWEVS
IChnbHNsYW5nX2xleC5jcHApLgorKi8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
Z2xzbGFuZy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0Lmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci91dGlsLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9n
bHNsYW5nX3RhYi5oIgorCisvKiB3aW5kb3dzIG9ubHkgcHJhZ21hICovCisjaWZkZWYgX01TQ19W
RVIKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDEwMikKKyNlbmRpZgorCisjZGVmaW5lIFlZ
X1VTRVJfQUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHl5bGxv
Yy0+Zmlyc3RfZmlsZSA9IHl5bGxvYy0+bGFzdF9maWxlID0geXljb2x1bW47IFwKKyAgICB5eWxs
b2MtPmZpcnN0X2xpbmUgPSB5eWxsb2MtPmxhc3RfbGluZSA9IHl5bGluZW5vOworCisjZGVmaW5l
IFlZX0lOUFVUKGJ1ZiwgcmVzdWx0LCBtYXhfc2l6ZSkgXAorICAgIHJlc3VsdCA9IHN0cmluZ19p
bnB1dChidWYsIG1heF9zaXplLCB5eXNjYW5uZXIpOworCitzdGF0aWMgeXlfc2l6ZV90IHN0cmlu
Z19pbnB1dChjaGFyKiBidWYsIHl5X3NpemVfdCBtYXhfc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVy
KTsKK3N0YXRpYyBpbnQgY2hlY2tfdHlwZSh5eXNjYW5fdCB5eXNjYW5uZXIpOworc3RhdGljIGlu
dCByZXNlcnZlZF93b3JkKHl5c2Nhbl90IHl5c2Nhbm5lcik7CitzdGF0aWMgaW50IGludF9jb25z
dGFudCh5eXNjYW5fdCB5eXNjYW5uZXIpOworc3RhdGljIGludCBmbG9hdF9jb25zdGFudCh5eXNj
YW5fdCB5eXNjYW5uZXIpOworCisjZGVmaW5lIElOSVRJQUwgMAorCisjZGVmaW5lIFlZX0VYVFJB
X1RZUEUgVFBhcnNlQ29udGV4dCoKKworLyogSG9sZHMgdGhlIGVudGlyZSBzdGF0ZSBvZiB0aGUg
cmVlbnRyYW50IHNjYW5uZXIuICovCitzdHJ1Y3QgeXlndXRzX3QKKyAgICB7CisKKyAgICAvKiBV
c2VyLWRlZmluZWQuIE5vdCB0b3VjaGVkIGJ5IGZsZXguICovCisgICAgWVlfRVhUUkFfVFlQRSB5
eWV4dHJhX3I7CisKKyAgICAvKiBUaGUgcmVzdCBhcmUgdGhlIHNhbWUgYXMgdGhlIGdsb2JhbHMg
ZGVjbGFyZWQgaW4gdGhlIG5vbi1yZWVudHJhbnQgc2Nhbm5lci4gKi8KKyAgICBGSUxFICp5eWlu
X3IsICp5eW91dF9yOworICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfdG9wOyAvKio8IGluZGV4
IG9mIHRvcCBvZiBzdGFjay4gKi8KKyAgICBzaXplX3QgeXlfYnVmZmVyX3N0YWNrX21heDsgLyoq
PCBjYXBhY2l0eSBvZiBzdGFjay4gKi8KKyAgICBZWV9CVUZGRVJfU1RBVEUgKiB5eV9idWZmZXJf
c3RhY2s7IC8qKjwgU3RhY2sgYXMgYW4gYXJyYXkuICovCisgICAgY2hhciB5eV9ob2xkX2NoYXI7
CisgICAgeXlfc2l6ZV90IHl5X25fY2hhcnM7CisgICAgeXlfc2l6ZV90IHl5bGVuZ19yOworICAg
IGNoYXIgKnl5X2NfYnVmX3A7CisgICAgaW50IHl5X2luaXQ7CisgICAgaW50IHl5X3N0YXJ0Owor
ICAgIGludCB5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2Y7CisgICAgaW50IHl5X3N0YXJ0X3N0
YWNrX3B0cjsKKyAgICBpbnQgeXlfc3RhcnRfc3RhY2tfZGVwdGg7CisgICAgaW50ICp5eV9zdGFy
dF9zdGFjazsKKyAgICB5eV9zdGF0ZV90eXBlIHl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOworICAg
IGNoYXIqIHl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisKKyAgICBpbnQgeXlsaW5lbm9fcjsKKyAg
ICBpbnQgeXlfZmxleF9kZWJ1Z19yOworCisgICAgY2hhciAqeXl0ZXh0X3I7CisgICAgaW50IHl5
X21vcmVfZmxhZzsKKyAgICBpbnQgeXlfbW9yZV9sZW47CisKKyAgICBZWVNUWVBFICogeXlsdmFs
X3I7CisKKyAgICBZWUxUWVBFICogeXlsbG9jX3I7CisKKyAgICB9OyAvKiBlbmQgc3RydWN0IHl5
Z3V0c190ICovCisKK3N0YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxzICh5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKKworICAgIC8qIFRoaXMgbXVzdCBnbyBoZXJlIGJlY2F1c2UgWVlTVFlQRSBhbmQgWVlM
VFlQRSBhcmUgaW5jbHVkZWQKKyAgICAgKiBmcm9tIGJpc29uIG91dHB1dCBpbiBzZWN0aW9uIDEu
Ki8KKyAgICAjICAgIGRlZmluZSB5eWx2YWwgeXlnLT55eWx2YWxfcgorICAgIAorICAgICMgICAg
ZGVmaW5lIHl5bGxvYyB5eWctPnl5bGxvY19yCisgICAgCitpbnQgeXlsZXhfaW5pdCAoeXlzY2Fu
X3QqIHNjYW5uZXIpOworCitpbnQgeXlsZXhfaW5pdF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1c2Vy
X2RlZmluZWQseXlzY2FuX3QqIHNjYW5uZXIpOworCisvKiBBY2Nlc3NvciBtZXRob2RzIHRvIGds
b2JhbHMuCisgICBUaGVzZSBhcmUgbWFkZSB2aXNpYmxlIHRvIG5vbi1yZWVudHJhbnQgc2Nhbm5l
cnMgZm9yIGNvbnZlbmllbmNlLiAqLworCitpbnQgeXlsZXhfZGVzdHJveSAoeXlzY2FuX3QgeXlz
Y2FubmVyICk7CisKK2ludCB5eWdldF9kZWJ1ZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3Zv
aWQgeXlzZXRfZGVidWcgKGludCBkZWJ1Z19mbGFnICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwor
WVlfRVhUUkFfVFlQRSB5eWdldF9leHRyYSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQg
eXlzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKKworRklMRSAqeXlnZXRfaW4gKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHl5
c2V0X2luICAoRklMRSAqIGluX3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKK0ZJTEUgKnl5
Z2V0X291dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgeXlzZXRfb3V0ICAoRklMRSAq
IG91dF9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit5eV9zaXplX3QgeXlnZXRfbGVuZyAo
eXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2NoYXIgKnl5Z2V0X3RleHQgKHl5c2Nhbl90IHl5c2Nh
bm5lciApOworCitpbnQgeXlnZXRfbGluZW5vICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9p
ZCB5eXNldF9saW5lbm8gKGludCBsaW5lX251bWJlciAseXlzY2FuX3QgeXlzY2FubmVyICk7CisK
K2ludCB5eWdldF9jb2x1bW4gICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCB5eXNldF9j
b2x1bW4gKGludCBjb2x1bW5fbm8gLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitZWVNUWVBFICog
eXlnZXRfbHZhbCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgeXlzZXRfbHZhbCAoWVlT
VFlQRSAqIHl5bHZhbF9wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKKyAgICAgICBZWUxU
WVBFICp5eWdldF9sbG9jICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyAgICAKKyAgICAgICAgdm9p
ZCB5eXNldF9sbG9jIChZWUxUWVBFICogeXlsbG9jX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKKyAgICAKKy8qIE1hY3JvcyBhZnRlciB0aGlzIHBvaW50IGNhbiBhbGwgYmUgb3ZlcnJpZGRl
biBieSB1c2VyIGRlZmluaXRpb25zIGluCisgKiBzZWN0aW9uIDEuCisgKi8KKworI2lmbmRlZiBZ
WV9TS0lQX1lZV1JBUAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIGludCB5eXdyYXAg
KHl5c2Nhbl90IHl5c2Nhbm5lciApOworI2Vsc2UKK2V4dGVybiBpbnQgeXl3cmFwICh5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgeXl0ZXh0X3B0cgorc3Rh
dGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyICoseXljb25zdCBjaGFyICosaW50ICx5eXNj
YW5fdCB5eXNjYW5uZXIpOworI2VuZGlmCisKKyNpZmRlZiBZWV9ORUVEX1NUUkxFTgorc3RhdGlj
IGludCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBjaGFyICogLHl5c2Nhbl90IHl5c2Nhbm5lcik7
CisjZW5kaWYKKworI2lmbmRlZiBZWV9OT19JTlBVVAorCisjaWZkZWYgX19jcGx1c3BsdXMKK3N0
YXRpYyBpbnQgeXlpbnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZWxzZQorc3RhdGljIGlu
dCBpbnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZW5kaWYKKworI2VuZGlmCisKKy8qIEFt
b3VudCBvZiBzdHVmZiB0byBzbHVycCB1cCB3aXRoIGVhY2ggcmVhZC4gKi8KKyNpZm5kZWYgWVlf
UkVBRF9CVUZfU0laRQorI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDgxOTIKKyNlbmRpZgorCisv
KiBDb3B5IHdoYXRldmVyIHRoZSBsYXN0IHJ1bGUgbWF0Y2hlZCB0byB0aGUgc3RhbmRhcmQgb3V0
cHV0LiAqLworI2lmbmRlZiBFQ0hPCisvKiBUaGlzIHVzZWQgdG8gYmUgYW4gZnB1dHMoKSwgYnV0
IHNpbmNlIHRoZSBzdHJpbmcgbWlnaHQgY29udGFpbiBOVUwncywKKyAqIHdlIG5vdyB1c2UgZndy
aXRlKCkuCisgKi8KKyNkZWZpbmUgRUNITyBkbyB7IGlmIChmd3JpdGUoIHl5dGV4dCwgeXlsZW5n
LCAxLCB5eW91dCApKSB7fSB9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qIEdldHMgaW5wdXQgYW5k
IHN0dWZmcyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlf
TlVMTCwKKyAqIGlzIHJldHVybmVkIGluICJyZXN1bHQiLgorICovCisjaWZuZGVmIFlZX0lOUFVU
CisjZGVmaW5lIFlZX0lOUFVUKGJ1ZixyZXN1bHQsbWF4X3NpemUpIFwKKwlpZiAoIFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCisJCXsgXAorCQlpbnQgYyA9
ICcqJzsgXAorCQlzaXplX3QgbjsgXAorCQlmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwK
KwkJCSAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsrbiApIFwK
KwkJCWJ1ZltuXSA9IChjaGFyKSBjOyBcCisJCWlmICggYyA9PSAnXG4nICkgXAorCQkJYnVmW24r
K10gPSAoY2hhcikgYzsgXAorCQlpZiAoIGMgPT0gRU9GICYmIGZlcnJvciggeXlpbiApICkgXAor
CQkJWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCisJ
CXJlc3VsdCA9IG47IFwKKwkJfSBcCisJZWxzZSBcCisJCXsgXAorCQllcnJubz0wOyBcCisJCXdo
aWxlICggKHJlc3VsdCA9IGZyZWFkKGJ1ZiwgMSwgbWF4X3NpemUsIHl5aW4pKT09MCAmJiBmZXJy
b3IoeXlpbikpIFwKKwkJCXsgXAorCQkJaWYoIGVycm5vICE9IEVJTlRSKSBcCisJCQkJeyBcCisJ
CQkJWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCisJ
CQkJYnJlYWs7IFwKKwkJCQl9IFwKKwkJCWVycm5vPTA7IFwKKwkJCWNsZWFyZXJyKHl5aW4pOyBc
CisJCQl9IFwKKwkJfVwKK1wKKworI2VuZGlmCisKKy8qIE5vIHNlbWktY29sb24gYWZ0ZXIgcmV0
dXJuOyBjb3JyZWN0IHVzYWdlIGlzIHRvIHdyaXRlICJ5eXRlcm1pbmF0ZSgpOyIgLQorICogd2Ug
ZG9uJ3Qgd2FudCBhbiBleHRyYSAnOycgYWZ0ZXIgdGhlICJyZXR1cm4iIGJlY2F1c2UgdGhhdCB3
aWxsIGNhdXNlCisgKiBzb21lIGNvbXBpbGVycyB0byBjb21wbGFpbiBhYm91dCB1bnJlYWNoYWJs
ZSBzdGF0ZW1lbnRzLgorICovCisjaWZuZGVmIHl5dGVybWluYXRlCisjZGVmaW5lIHl5dGVybWlu
YXRlKCkgcmV0dXJuIFlZX05VTEwKKyNlbmRpZgorCisvKiBOdW1iZXIgb2YgZW50cmllcyBieSB3
aGljaCBzdGFydC1jb25kaXRpb24gc3RhY2sgZ3Jvd3MuICovCisjaWZuZGVmIFlZX1NUQVJUX1NU
QUNLX0lOQ1IKKyNkZWZpbmUgWVlfU1RBUlRfU1RBQ0tfSU5DUiAyNQorI2VuZGlmCisKKy8qIFJl
cG9ydCBhIGZhdGFsIGVycm9yLiAqLworI2lmbmRlZiBZWV9GQVRBTF9FUlJPUgorI2RlZmluZSBZ
WV9GQVRBTF9FUlJPUihtc2cpIHl5X2ZhdGFsX2Vycm9yKCBtc2cgLCB5eXNjYW5uZXIpCisjZW5k
aWYKKworLyogZW5kIHRhYmxlcyBzZXJpYWxpemF0aW9uIHN0cnVjdHVyZXMgYW5kIHByb3RvdHlw
ZXMgKi8KKworLyogRGVmYXVsdCBkZWNsYXJhdGlvbiBvZiBnZW5lcmF0ZWQgc2Nhbm5lciAtIGEg
ZGVmaW5lIHNvIHRoZSB1c2VyIGNhbgorICogZWFzaWx5IGFkZCBwYXJhbWV0ZXJzLgorICovCisj
aWZuZGVmIFlZX0RFQ0wKKyNkZWZpbmUgWVlfREVDTF9JU19PVVJTIDEKKworZXh0ZXJuIGludCB5
eWxleCBcCisgICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSxZWUxUWVBFICog
eXlsbG9jX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIpOworCisjZGVmaW5lIFlZX0RFQ0wgaW50
IHl5bGV4IFwKKyAgICAgICAgICAgICAgIChZWVNUWVBFICogeXlsdmFsX3BhcmFtLCBZWUxUWVBF
ICogeXlsbG9jX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQorI2VuZGlmIC8qICFZWV9ERUNM
ICovCisKKy8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHJ1bGUsIGFm
dGVyIHl5dGV4dCBhbmQgeXlsZW5nCisgKiBoYXZlIGJlZW4gc2V0IHVwLgorICovCisjaWZuZGVm
IFlZX1VTRVJfQUNUSU9OCisjZGVmaW5lIFlZX1VTRVJfQUNUSU9OCisjZW5kaWYKKworLyogQ29k
ZSBleGVjdXRlZCBhdCB0aGUgZW5kIG9mIGVhY2ggcnVsZS4gKi8KKyNpZm5kZWYgWVlfQlJFQUsK
KyNkZWZpbmUgWVlfQlJFQUsgYnJlYWs7CisjZW5kaWYKKworI2RlZmluZSBZWV9SVUxFX1NFVFVQ
IFwKKwlZWV9VU0VSX0FDVElPTgorCisvKiogVGhlIG1haW4gc2Nhbm5lciBmdW5jdGlvbiB3aGlj
aCBkb2VzIGFsbCB0aGUgd29yay4KKyAqLworWVlfREVDTAoreworCXJlZ2lzdGVyIHl5X3N0YXRl
X3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKKwlyZWdpc3RlciBjaGFyICp5eV9jcCwgKnl5X2JwOwor
CXJlZ2lzdGVyIGludCB5eV9hY3Q7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOworCisgICAgeXlsdmFsID0geXlsdmFsX3BhcmFtOworCisg
ICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOworCisJaWYgKCAheXlnLT55eV9pbml0ICkKKwkJewor
CQl5eWctPnl5X2luaXQgPSAxOworCisjaWZkZWYgWVlfVVNFUl9JTklUCisJCVlZX1VTRVJfSU5J
VDsKKyNlbmRpZgorCisJCWlmICggISB5eWctPnl5X3N0YXJ0ICkKKwkJCXl5Zy0+eXlfc3RhcnQg
PSAxOwkvKiBmaXJzdCBzdGFydCBzdGF0ZSAqLworCisJCWlmICggISB5eWluICkKKwkJCXl5aW4g
PSBzdGRpbjsKKworCQlpZiAoICEgeXlvdXQgKQorCQkJeXlvdXQgPSBzdGRvdXQ7CisKKwkJaWYg
KCAhIFlZX0NVUlJFTlRfQlVGRkVSICkgeworCQkJeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNj
YW5uZXIpOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KKwkJCQl5eV9jcmVhdGVfYnVm
ZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7CisJCX0KKworCQl5eV9sb2FkX2J1ZmZl
cl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwkJfQorCisJd2hpbGUgKCAxICkJCS8qIGxvb3BzIHVudGls
IGVuZC1vZi1maWxlIGlzIHJlYWNoZWQgKi8KKwkJeworCQl5eV9jcCA9IHl5Zy0+eXlfY19idWZf
cDsKKworCQkvKiBTdXBwb3J0IG9mIHl5dGV4dC4gKi8KKwkJKnl5X2NwID0geXlnLT55eV9ob2xk
X2NoYXI7CisKKwkJLyogeXlfYnAgcG9pbnRzIHRvIHRoZSBwb3NpdGlvbiBpbiB5eV9jaF9idWYg
b2YgdGhlIHN0YXJ0IG9mCisJCSAqIHRoZSBjdXJyZW50IHJ1bi4KKwkJICovCisJCXl5X2JwID0g
eXlfY3A7CisKKwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7Cit5eV9tYXRjaDoK
KwkJZG8KKwkJCXsKKwkJCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IHl5X2VjW1lZX1NDX1RPX1VJ
KCp5eV9jcCldOworCQkJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQkJCXsK
KwkJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKKwkJ
CQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKKwkJCQl9CisJCQl3aGlsZSAo
IHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9z
dGF0ZSApCisJCQkJeworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3Vy
cmVudF9zdGF0ZV07CisJCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ0MyApCisJCQkJCXl5
X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQkJCX0KKwkJCXl5X2N1cnJlbnRf
c3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQp
IHl5X2NdOworCQkJKyt5eV9jcDsKKwkJCX0KKwkJd2hpbGUgKCB5eV9jdXJyZW50X3N0YXRlICE9
IDQ0MiApOworCQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKwkJeXlfY3Vy
cmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisKK3l5X2ZpbmRfYWN0
aW9uOgorCQl5eV9hY3QgPSB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV07CisKKwkJWVlfRE9f
QkVGT1JFX0FDVElPTjsKKworCQlpZiAoIHl5X2FjdCAhPSBZWV9FTkRfT0ZfQlVGRkVSICYmIHl5
X3J1bGVfY2FuX21hdGNoX2VvbFt5eV9hY3RdICkKKwkJCXsKKwkJCXl5X3NpemVfdCB5eWw7CisJ
CQlmb3IgKCB5eWwgPSAwOyB5eWwgPCB5eWxlbmc7ICsreXlsICkKKwkJCQlpZiAoIHl5dGV4dFt5
eWxdID09ICdcbicgKQorCQkJCQkgICAKKyAgICBkb3sgeXlsaW5lbm8rKzsKKyAgICAgICAgeXlj
b2x1bW49MDsKKyAgICB9d2hpbGUoMCkKKzsKKwkJCX0KKworZG9fYWN0aW9uOgkvKiBUaGlzIGxh
YmVsIGlzIHVzZWQgb25seSB0byBhY2Nlc3MgRU9GIGFjdGlvbnMuICovCisKKwkJc3dpdGNoICgg
eXlfYWN0ICkKKwl7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dpdGNoICovCisJCQljYXNlIDA6
IC8qIG11c3QgYmFjayB1cCAqLworCQkJLyogdW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZP
UkVfQUNUSU9OICovCisJCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJCXl5X2NwID0g
eXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOworCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+
eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOworCitjYXNl
IDE6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBJTlZBUklBTlQ7IH0KKwlZWV9CUkVBSworY2Fz
ZSAyOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gSElHSF9QUkVDSVNJT047IH0KKwlZWV9CUkVB
SworY2FzZSAzOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gTUVESVVNX1BSRUNJU0lPTjsgfQor
CVlZX0JSRUFLCitjYXNlIDQ6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBMT1dfUFJFQ0lTSU9O
OyB9CisJWVlfQlJFQUsKK2Nhc2UgNToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIFBSRUNJU0lP
TjsgfQorCVlZX0JSRUFLCitjYXNlIDY6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBBVFRSSUJV
VEU7IH0KKwlZWV9CUkVBSworY2FzZSA3OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gQ09OU1Rf
UVVBTDsgfQorCVlZX0JSRUFLCitjYXNlIDg6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBVTklG
T1JNOyB9CisJWVlfQlJFQUsKK2Nhc2UgOToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIFZBUllJ
Tkc7IH0KKwlZWV9CUkVBSworY2FzZSAxMDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIEJSRUFL
OyB9CisJWVlfQlJFQUsKK2Nhc2UgMTE6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBDT05USU5V
RTsgfQorCVlZX0JSRUFLCitjYXNlIDEyOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gRE87IH0K
KwlZWV9CUkVBSworY2FzZSAxMzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIEZPUjsgfQorCVlZ
X0JSRUFLCitjYXNlIDE0OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gV0hJTEU7IH0KKwlZWV9C
UkVBSworY2FzZSAxNToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIElGOyB9CisJWVlfQlJFQUsK
K2Nhc2UgMTY6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBFTFNFOyB9CisJWVlfQlJFQUsKK2Nh
c2UgMTc6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBJTl9RVUFMOyB9CisJWVlfQlJFQUsKK2Nh
c2UgMTg6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBPVVRfUVVBTDsgfQorCVlZX0JSRUFLCitj
YXNlIDE5OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gSU5PVVRfUVVBTDsgfQorCVlZX0JSRUFL
CitjYXNlIDIwOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gRkxPQVRfVFlQRTsgfQorCVlZX0JS
RUFLCitjYXNlIDIxOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gSU5UX1RZUEU7IH0KKwlZWV9C
UkVBSworY2FzZSAyMjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIFZPSURfVFlQRTsgfQorCVlZ
X0JSRUFLCitjYXNlIDIzOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gQk9PTF9UWVBFOyB9CisJ
WVlfQlJFQUsKK2Nhc2UgMjQ6CitZWV9SVUxFX1NFVFVQCit7IHl5bHZhbC0+bGV4LmIgPSB0cnVl
OyAgcmV0dXJuIEJPT0xDT05TVEFOVDsgfQorCVlZX0JSRUFLCitjYXNlIDI1OgorWVlfUlVMRV9T
RVRVUAoreyB5eWx2YWwtPmxleC5iID0gZmFsc2U7IHJldHVybiBCT09MQ09OU1RBTlQ7IH0KKwlZ
WV9CUkVBSworY2FzZSAyNjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIERJU0NBUkQ7IH0KKwlZ
WV9CUkVBSworY2FzZSAyNzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIFJFVFVSTjsgfQorCVlZ
X0JSRUFLCitjYXNlIDI4OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gTUFUUklYMjsgfQorCVlZ
X0JSRUFLCitjYXNlIDI5OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gTUFUUklYMzsgfQorCVlZ
X0JSRUFLCitjYXNlIDMwOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gTUFUUklYNDsgfQorCVlZ
X0JSRUFLCitjYXNlIDMxOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gVkVDMjsgfQorCVlZX0JS
RUFLCitjYXNlIDMyOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gVkVDMzsgfQorCVlZX0JSRUFL
CitjYXNlIDMzOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gVkVDNDsgfQorCVlZX0JSRUFLCitj
YXNlIDM0OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gSVZFQzI7IH0KKwlZWV9CUkVBSworY2Fz
ZSAzNToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIElWRUMzOyB9CisJWVlfQlJFQUsKK2Nhc2Ug
MzY6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBJVkVDNDsgfQorCVlZX0JSRUFLCitjYXNlIDM3
OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gQlZFQzI7IH0KKwlZWV9CUkVBSworY2FzZSAzODoK
K1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIEJWRUMzOyB9CisJWVlfQlJFQUsKK2Nhc2UgMzk6CitZ
WV9SVUxFX1NFVFVQCit7IHJldHVybiBCVkVDNDsgfQorCVlZX0JSRUFLCitjYXNlIDQwOgorWVlf
UlVMRV9TRVRVUAoreyByZXR1cm4gU0FNUExFUjJEOyB9CisJWVlfQlJFQUsKK2Nhc2UgNDE6CitZ
WV9SVUxFX1NFVFVQCit7IHJldHVybiBTQU1QTEVSQ1VCRTsgfQorCVlZX0JSRUFLCitjYXNlIDQy
OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gU0FNUExFUl9FWFRFUk5BTF9PRVM7IH0KKwlZWV9C
UkVBSworY2FzZSA0MzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIFNBTVBMRVIyRFJFQ1Q7IH0K
KwlZWV9CUkVBSworY2FzZSA0NDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIFNUUlVDVDsgfQor
CVlZX0JSRUFLCitjYXNlIDQ1OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNDY6CitZWV9SVUxFX1NFVFVQCit7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA0NzoKK1lZ
X1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JS
RUFLCitjYXNlIDQ4OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNDk6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA1MDoKK1lZX1JVTEVf
U0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitj
YXNlIDUxOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9CisJWVlfQlJFQUsKK2Nhc2UgNTI6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA1MzoKK1lZX1JVTEVfU0VUVVAK
K3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDU0
OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJ
WVlfQlJFQUsKK2Nhc2UgNTU6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA1NjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDU3OgorWVlf
UlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJF
QUsKK2Nhc2UgNTg6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA1OToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDYwOgorWVlfUlVMRV9T
RVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nh
c2UgNjE6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KKwlZWV9CUkVBSworY2FzZSA2MjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDYzOgorWVlfUlVMRV9TRVRVUAor
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNjQ6
CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZ
WV9CUkVBSworY2FzZSA2NToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDY2OgorWVlfUlVMRV9TRVRVUAoreyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNjc6CitZWV9S
VUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVB
SworY2FzZSA2ODoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDY5OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNzA6CitZWV9SVUxFX1NF
VFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2Fz
ZSA3MToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQorCVlZX0JSRUFLCitjYXNlIDcyOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNzM6CitZWV9SVUxFX1NFVFVQCit7
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA3NDoK
K1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZ
X0JSRUFLCitjYXNlIDc1OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNzY6CitZWV9SVUxFX1NFVFVQCit7IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA3NzoKK1lZX1JV
TEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFL
CitjYXNlIDc4OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNzk6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA4MDoKK1lZX1JVTEVfU0VU
VVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNl
IDgxOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
CisJWVlfQlJFQUsKK2Nhc2UgODI6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA4MzoKK1lZX1JVTEVfU0VUVVAKK3sg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDg0Ogor
WVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlf
QlJFQUsKK2Nhc2UgODU6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA4NjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDg3OgorWVlfUlVM
RV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsK
K2Nhc2UgODg6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KKwlZWV9CUkVBSworY2FzZSA4OToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDkwOgorWVlfUlVMRV9TRVRV
UAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2Ug
OTE6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
KwlZWV9CUkVBSworY2FzZSA5MjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDkzOgorWVlfUlVMRV9TRVRVUAorewor
ICAgeXlsdmFsLT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsgCisgICByZXR1
cm4gY2hlY2tfdHlwZSh5eXNjYW5uZXIpOworfQorCVlZX0JSRUFLCitjYXNlIDk0OgorWVlfUlVM
RV9TRVRVUAoreyByZXR1cm4gaW50X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSwor
Y2FzZSA5NToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIGludF9jb25zdGFudCh5eXNjYW5uZXIp
OyB9CisJWVlfQlJFQUsKK2Nhc2UgOTY6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBpbnRfY29u
c3RhbnQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDk3OgorWVlfUlVMRV9TRVRVUAor
eyByZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDk4
OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQor
CVlZX0JSRUFLCitjYXNlIDk5OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gZmxvYXRfY29uc3Rh
bnQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDEwMDoKK1lZX1JVTEVfU0VUVVAKK3sg
cmV0dXJuIEFERF9BU1NJR047IH0KKwlZWV9CUkVBSworY2FzZSAxMDE6CitZWV9SVUxFX1NFVFVQ
Cit7IHJldHVybiBTVUJfQVNTSUdOOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTAyOgorWVlfUlVMRV9T
RVRVUAoreyByZXR1cm4gTVVMX0FTU0lHTjsgfQorCVlZX0JSRUFLCitjYXNlIDEwMzoKK1lZX1JV
TEVfU0VUVVAKK3sgcmV0dXJuIERJVl9BU1NJR047IH0KKwlZWV9CUkVBSworY2FzZSAxMDQ6CitZ
WV9SVUxFX1NFVFVQCit7IHJldHVybiBNT0RfQVNTSUdOOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTA1
OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gTEVGVF9BU1NJR047IH0KKwlZWV9CUkVBSworY2Fz
ZSAxMDY6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBSSUdIVF9BU1NJR047IH0KKwlZWV9CUkVB
SworY2FzZSAxMDc6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBBTkRfQVNTSUdOOyB9CisJWVlf
QlJFQUsKK2Nhc2UgMTA4OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gWE9SX0FTU0lHTjsgfQor
CVlZX0JSRUFLCitjYXNlIDEwOToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIE9SX0FTU0lHTjsg
fQorCVlZX0JSRUFLCitjYXNlIDExMDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIElOQ19PUDsg
fQorCVlZX0JSRUFLCitjYXNlIDExMToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIERFQ19PUDsg
fQorCVlZX0JSRUFLCitjYXNlIDExMjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIEFORF9PUDsg
fQorCVlZX0JSRUFLCitjYXNlIDExMzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIE9SX09QOyB9
CisJWVlfQlJFQUsKK2Nhc2UgMTE0OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gWE9SX09QOyB9
CisJWVlfQlJFQUsKK2Nhc2UgMTE1OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gTEVfT1A7IH0K
KwlZWV9CUkVBSworY2FzZSAxMTY6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBHRV9PUDsgfQor
CVlZX0JSRUFLCitjYXNlIDExNzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIEVRX09QOyB9CisJ
WVlfQlJFQUsKK2Nhc2UgMTE4OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gTkVfT1A7IH0KKwlZ
WV9CUkVBSworY2FzZSAxMTk6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBMRUZUX09QOyB9CisJ
WVlfQlJFQUsKK2Nhc2UgMTIwOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gUklHSFRfT1A7IH0K
KwlZWV9CUkVBSworY2FzZSAxMjE6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBTRU1JQ09MT047
IH0KKwlZWV9CUkVBSworY2FzZSAxMjI6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBMRUZUX0JS
QUNFOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTIzOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gUklH
SFRfQlJBQ0U7IH0KKwlZWV9CUkVBSworY2FzZSAxMjQ6CitZWV9SVUxFX1NFVFVQCit7IHJldHVy
biBDT01NQTsgfQorCVlZX0JSRUFLCitjYXNlIDEyNToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJu
IENPTE9OOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTI2OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4g
RVFVQUw7IH0KKwlZWV9CUkVBSworY2FzZSAxMjc6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBM
RUZUX1BBUkVOOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTI4OgorWVlfUlVMRV9TRVRVUAoreyByZXR1
cm4gUklHSFRfUEFSRU47IH0KKwlZWV9CUkVBSworY2FzZSAxMjk6CitZWV9SVUxFX1NFVFVQCit7
IHJldHVybiBMRUZUX0JSQUNLRVQ7IH0KKwlZWV9CUkVBSworY2FzZSAxMzA6CitZWV9SVUxFX1NF
VFVQCit7IHJldHVybiBSSUdIVF9CUkFDS0VUOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTMxOgorWVlf
UlVMRV9TRVRVUAoreyByZXR1cm4gRE9UOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTMyOgorWVlfUlVM
RV9TRVRVUAoreyByZXR1cm4gQkFORzsgfQorCVlZX0JSRUFLCitjYXNlIDEzMzoKK1lZX1JVTEVf
U0VUVVAKK3sgcmV0dXJuIERBU0g7IH0KKwlZWV9CUkVBSworY2FzZSAxMzQ6CitZWV9SVUxFX1NF
VFVQCit7IHJldHVybiBUSUxERTsgfQorCVlZX0JSRUFLCitjYXNlIDEzNToKK1lZX1JVTEVfU0VU
VVAKK3sgcmV0dXJuIFBMVVM7IH0KKwlZWV9CUkVBSworY2FzZSAxMzY6CitZWV9SVUxFX1NFVFVQ
Cit7IHJldHVybiBTVEFSOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTM3OgorWVlfUlVMRV9TRVRVUAor
eyByZXR1cm4gU0xBU0g7IH0KKwlZWV9CUkVBSworY2FzZSAxMzg6CitZWV9SVUxFX1NFVFVQCit7
IHJldHVybiBQRVJDRU5UOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTM5OgorWVlfUlVMRV9TRVRVUAor
eyByZXR1cm4gTEVGVF9BTkdMRTsgfQorCVlZX0JSRUFLCitjYXNlIDE0MDoKK1lZX1JVTEVfU0VU
VVAKK3sgcmV0dXJuIFJJR0hUX0FOR0xFOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTQxOgorWVlfUlVM
RV9TRVRVUAoreyByZXR1cm4gVkVSVElDQUxfQkFSOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTQyOgor
WVlfUlVMRV9TRVRVUAoreyByZXR1cm4gQ0FSRVQ7IH0KKwlZWV9CUkVBSworY2FzZSAxNDM6CitZ
WV9SVUxFX1NFVFVQCit7IHJldHVybiBBTVBFUlNBTkQ7IH0KKwlZWV9CUkVBSworY2FzZSAxNDQ6
CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBRVUVTVElPTjsgfQorCVlZX0JSRUFLCitjYXNlIDE0
NToKKy8qIHJ1bGUgMTQ1IGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VUVVAKK3sgfQorCVlZ
X0JSRUFLCitjYXNlIFlZX1NUQVRFX0VPRihJTklUSUFMKToKK3sgeXl0ZXJtaW5hdGUoKTsgfQor
CVlZX0JSRUFLCitjYXNlIDE0NjoKK1lZX1JVTEVfU0VUVVAKK3sgYXNzZXJ0KGZhbHNlKTsgcmV0
dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSAxNDc6CitZWV9SVUxFX1NFVFVQCitFQ0hPOworCVlZ
X0JSRUFLCisKKwljYXNlIFlZX0VORF9PRl9CVUZGRVI6CisJCXsKKwkJLyogQW1vdW50IG9mIHRl
eHQgbWF0Y2hlZCBub3QgaW5jbHVkaW5nIHRoZSBFT0IgY2hhci4gKi8KKwkJaW50IHl5X2Ftb3Vu
dF9vZl9tYXRjaGVkX3RleHQgPSAoaW50KSAoeXlfY3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsK
KworCQkvKiBVbmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04uICovCisJCSp5
eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCisK
KwkJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlf
QlVGRkVSX05FVyApCisJCQl7CisJCQkvKiBXZSdyZSBzY2FubmluZyBhIG5ldyBmaWxlIG9yIGlu
cHV0IHNvdXJjZS4gIEl0J3MKKwkJCSAqIHBvc3NpYmxlIHRoYXQgdGhpcyBoYXBwZW5lZCBiZWNh
dXNlIHRoZSB1c2VyCisJCQkgKiBqdXN0IHBvaW50ZWQgeXlpbiBhdCBhIG5ldyBzb3VyY2UgYW5k
IGNhbGxlZAorCQkJICogeXlsZXgoKS4gIElmIHNvLCB0aGVuIHdlIGhhdmUgdG8gYXNzdXJlCisJ
CQkgKiBjb25zaXN0ZW5jeSBiZXR3ZWVuIFlZX0NVUlJFTlRfQlVGRkVSIGFuZCBvdXIKKwkJCSAq
IGdsb2JhbHMuICBIZXJlIGlzIHRoZSByaWdodCBwbGFjZSB0byBkbyBzbywgYmVjYXVzZQorCQkJ
ICogdGhpcyBpcyB0aGUgZmlyc3QgYWN0aW9uIChvdGhlciB0aGFuIHBvc3NpYmx5IGEKKwkJCSAq
IGJhY2stdXApIHRoYXQgd2lsbCBtYXRjaCBmb3IgdGhlIG5ldyBpbnB1dCBzb3VyY2UuCisJCQkg
Ki8KKwkJCXl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9j
aGFyczsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZSA9IHl5aW47
CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZG
RVJfTk9STUFMOworCQkJfQorCisJCS8qIE5vdGUgdGhhdCBoZXJlIHdlIHRlc3QgZm9yIHl5X2Nf
YnVmX3AgIjw9IiB0byB0aGUgcG9zaXRpb24KKwkJICogb2YgdGhlIGZpcnN0IEVPQiBpbiB0aGUg
YnVmZmVyLCBzaW5jZSB5eV9jX2J1Zl9wIHdpbGwKKwkJICogYWxyZWFkeSBoYXZlIGJlZW4gaW5j
cmVtZW50ZWQgcGFzdCB0aGUgTlVMIGNoYXJhY3RlcgorCQkgKiAoc2luY2UgYWxsIHN0YXRlcyBt
YWtlIHRyYW5zaXRpb25zIG9uIEVPQiB0byB0aGUKKwkJICogZW5kLW9mLWJ1ZmZlciBzdGF0ZSku
ICBDb250cmFzdCB0aGlzIHdpdGggdGhlIHRlc3QKKwkJICogaW4gaW5wdXQoKS4KKwkJICovCisJ
CWlmICggeXlnLT55eV9jX2J1Zl9wIDw9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2No
X2J1Zlt5eWctPnl5X25fY2hhcnNdICkKKwkJCXsgLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAq
LworCQkJeXlfc3RhdGVfdHlwZSB5eV9uZXh0X3N0YXRlOworCisJCQl5eWctPnl5X2NfYnVmX3Ag
PSB5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OworCisJCQl5eV9j
dXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKKworCQkJ
LyogT2theSwgd2UncmUgbm93IHBvc2l0aW9uZWQgdG8gbWFrZSB0aGUgTlVMCisJCQkgKiB0cmFu
c2l0aW9uLiAgV2UgY291bGRuJ3QgaGF2ZQorCQkJICogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCkg
Z28gYWhlYWQgYW5kIGRvIGl0CisJCQkgKiBmb3IgdXMgYmVjYXVzZSBpdCBkb2Vzbid0IGtub3cg
aG93IHRvIGRlYWwKKwkJCSAqIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIGphbW1pbmcgKGFuZCB3
ZSBkb24ndAorCQkJICogd2FudCB0byBidWlsZCBqYW1taW5nIGludG8gaXQgYmVjYXVzZSB0aGVu
IGl0CisJCQkgKiB3aWxsIHJ1biBtb3JlIHNsb3dseSkuCisJCQkgKi8KKworCQkJeXlfbmV4dF9z
dGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5uZXIpOwor
CisJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOworCisJCQlpZiAoIHl5
X25leHRfc3RhdGUgKQorCQkJCXsKKwkJCQkvKiBDb25zdW1lIHRoZSBOVUwuICovCisJCQkJeXlf
Y3AgPSArK3l5Zy0+eXlfY19idWZfcDsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbmV4dF9z
dGF0ZTsKKwkJCQlnb3RvIHl5X21hdGNoOworCQkJCX0KKworCQkJZWxzZQorCQkJCXsKKwkJCQl5
eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKwkJCQl5eV9jdXJyZW50X3N0YXRl
ID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKKwkJCQlnb3RvIHl5X2ZpbmRfYWN0aW9u
OworCQkJCX0KKwkJCX0KKworCQllbHNlIHN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlz
Y2FubmVyICkgKQorCQkJeworCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgorCQkJCXsKKwkJ
CQl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDA7CisKKwkJCQlpZiAoIHl5d3Jh
cCh5eXNjYW5uZXIgKSApCisJCQkJCXsKKwkJCQkJLyogTm90ZTogYmVjYXVzZSB3ZSd2ZSB0YWtl
biBjYXJlIGluCisJCQkJCSAqIHl5X2dldF9uZXh0X2J1ZmZlcigpIHRvIGhhdmUgc2V0IHVwCisJ
CQkJCSAqIHl5dGV4dCwgd2UgY2FuIG5vdyBzZXQgdXAKKwkJCQkJICogeXlfY19idWZfcCBzbyB0
aGF0IGlmIHNvbWUgdG90YWwKKwkJCQkJICogaG9zZXIgKGxpa2UgZmxleCBpdHNlbGYpIHdhbnRz
IHRvCisJCQkJCSAqIGNhbGwgdGhlIHNjYW5uZXIgYWZ0ZXIgd2UgcmV0dXJuIHRoZQorCQkJCQkg
KiBZWV9OVUxMLCBpdCdsbCBzdGlsbCB3b3JrIC0gYW5vdGhlcgorCQkJCQkgKiBZWV9OVUxMIHdp
bGwgZ2V0IHJldHVybmVkLgorCQkJCQkgKi8KKwkJCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55
eXRleHRfcHRyICsgWVlfTU9SRV9BREo7CisKKwkJCQkJeXlfYWN0ID0gWVlfU1RBVEVfRU9GKFlZ
X1NUQVJUKTsKKwkJCQkJZ290byBkb19hY3Rpb247CisJCQkJCX0KKworCQkJCWVsc2UKKwkJCQkJ
eworCQkJCQlpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQorCQkJCQkJ
WVlfTkVXX0ZJTEU7CisJCQkJCX0KKwkJCQlicmVhazsKKwkJCQl9CisKKwkJCWNhc2UgRU9CX0FD
VF9DT05USU5VRV9TQ0FOOgorCQkJCXl5Zy0+eXlfY19idWZfcCA9CisJCQkJCXl5Zy0+eXl0ZXh0
X3B0ciArIHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7CisKKwkJCQl5eV9jdXJyZW50X3N0YXRl
ID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKKworCQkJCXl5X2NwID0geXln
LT55eV9jX2J1Zl9wOworCQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7
CisJCQkJZ290byB5eV9tYXRjaDsKKworCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6CisJCQkJ
eXlnLT55eV9jX2J1Zl9wID0KKwkJCQkmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9i
dWZbeXlnLT55eV9uX2NoYXJzXTsKKworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJl
dmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOworCisJCQkJeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7
CisJCQkJeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKKwkJCQlnb3RvIHl5
X2ZpbmRfYWN0aW9uOworCQkJfQorCQlicmVhazsKKwkJfQorCisJZGVmYXVsdDoKKwkJWVlfRkFU
QUxfRVJST1IoCisJCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1ubyBhY3Rp
b24gZm91bmQiICk7CisJfSAvKiBlbmQgb2YgYWN0aW9uIHN3aXRjaCAqLworCQl9IC8qIGVuZCBv
ZiBzY2FubmluZyBvbmUgdG9rZW4gKi8KK30gLyogZW5kIG9mIHl5bGV4ICovCisKKy8qIHl5X2dl
dF9uZXh0X2J1ZmZlciAtIHRyeSB0byByZWFkIGluIGEgbmV3IGJ1ZmZlcgorICoKKyAqIFJldHVy
bnMgYSBjb2RlIHJlcHJlc2VudGluZyBhbiBhY3Rpb246CisgKglFT0JfQUNUX0xBU1RfTUFUQ0gg
LQorICoJRU9CX0FDVF9DT05USU5VRV9TQ0FOIC0gY29udGludWUgc2Nhbm5pbmcgZnJvbSBjdXJy
ZW50IHBvc2l0aW9uCisgKglFT0JfQUNUX0VORF9PRl9GSUxFIC0gZW5kIG9mIGZpbGUKKyAqLwor
c3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisJ
cmVnaXN0ZXIgY2hhciAqZGVzdCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVm
OworCXJlZ2lzdGVyIGNoYXIgKnNvdXJjZSA9IHl5Zy0+eXl0ZXh0X3B0cjsKKwlyZWdpc3RlciBp
bnQgbnVtYmVyX3RvX21vdmUsIGk7CisJaW50IHJldF92YWw7CisKKwlpZiAoIHl5Zy0+eXlfY19i
dWZfcCA+ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hh
cnMgKyAxXSApCisJCVlZX0ZBVEFMX0VSUk9SKAorCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVy
bmFsIGVycm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKKworCWlmICggWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9maWxsX2J1ZmZlciA9PSAwICkKKwkJeyAvKiBEb24ndCB0cnkgdG8g
ZmlsbCB0aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4gKi8KKwkJaWYgKCB5eWctPnl5X2Nf
YnVmX3AgLSB5eWctPnl5dGV4dF9wdHIgLSBZWV9NT1JFX0FESiA9PSAxICkKKwkJCXsKKwkJCS8q
IFdlIG1hdGNoZWQgYSBzaW5nbGUgY2hhcmFjdGVyLCB0aGUgRU9CLCBzbworCQkJICogdHJlYXQg
dGhpcyBhcyBhIGZpbmFsIEVPRi4KKwkJCSAqLworCQkJcmV0dXJuIEVPQl9BQ1RfRU5EX09GX0ZJ
TEU7CisJCQl9CisKKwkJZWxzZQorCQkJeworCQkJLyogV2UgbWF0Y2hlZCBzb21lIHRleHQgcHJp
b3IgdG8gdGhlIEVPQiwgZmlyc3QKKwkJCSAqIHByb2Nlc3MgaXQuCisJCQkgKi8KKwkJCXJldHVy
biBFT0JfQUNUX0xBU1RfTUFUQ0g7CisJCQl9CisJCX0KKworCS8qIFRyeSB0byByZWFkIG1vcmUg
ZGF0YS4gKi8KKworCS8qIEZpcnN0IG1vdmUgbGFzdCBjaGFycyB0byBzdGFydCBvZiBidWZmZXIu
ICovCisJbnVtYmVyX3RvX21vdmUgPSAoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRl
eHRfcHRyKSAtIDE7CisKKwlmb3IgKCBpID0gMDsgaSA8IG51bWJlcl90b19tb3ZlOyArK2kgKQor
CQkqKGRlc3QrKykgPSAqKHNvdXJjZSsrKTsKKworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9FT0ZfUEVORElORyApCisJCS8qIGRv
bid0IGRvIHRoZSByZWFkLCBpdCdzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiBhbiBFT0YsCisJ
CSAqIGp1c3QgZm9yY2UgYW4gRU9GCisJCSAqLworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnMgPSAwOworCisJZWxzZQorCQl7CisJCQl5eV9z
aXplX3QgbnVtX3RvX3JlYWQgPQorCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZf
c2l6ZSAtIG51bWJlcl90b19tb3ZlIC0gMTsKKworCQl3aGlsZSAoIG51bV90b19yZWFkIDw9IDAg
KQorCQkJeyAvKiBOb3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQuICovCisK
KwkJCS8qIGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciAqLworCQkJ
WVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUU7CisKKwkJCWludCB5
eV9jX2J1Zl9wX29mZnNldCA9CisJCQkJKGludCkgKHl5Zy0+eXlfY19idWZfcCAtIGItPnl5X2No
X2J1Zik7CisKKwkJCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCisJCQkJeworCQkJCXl5X3Np
emVfdCBuZXdfc2l6ZSA9IGItPnl5X2J1Zl9zaXplICogMjsKKworCQkJCWlmICggbmV3X3NpemUg
PD0gMCApCisJCQkJCWItPnl5X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsKKwkJCQll
bHNlCisJCQkJCWItPnl5X2J1Zl9zaXplICo9IDI7CisKKwkJCQliLT55eV9jaF9idWYgPSAoY2hh
ciAqKQorCQkJCQkvKiBJbmNsdWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJzLiAqLworCQkJCQl5
eXJlYWxsb2MoKHZvaWQgKikgYi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2Fu
bmVyICk7CisJCQkJfQorCQkJZWxzZQorCQkJCS8qIENhbid0IGdyb3cgaXQsIHdlIGRvbid0IG93
biBpdC4gKi8KKwkJCQliLT55eV9jaF9idWYgPSAwOworCisJCQlpZiAoICEgYi0+eXlfY2hfYnVm
ICkKKwkJCQlZWV9GQVRBTF9FUlJPUigKKwkJCQkiZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0
IGJ1ZmZlciBvdmVyZmxvdyIgKTsKKworCQkJeXlnLT55eV9jX2J1Zl9wID0gJmItPnl5X2NoX2J1
Zlt5eV9jX2J1Zl9wX29mZnNldF07CisKKwkJCW51bV90b19yZWFkID0gWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtCisJCQkJCQludW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJ
CX0KKworCQlpZiAoIG51bV90b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSApCisJCQludW1fdG9f
cmVhZCA9IFlZX1JFQURfQlVGX1NJWkU7CisKKwkJLyogUmVhZCBpbiBtb3JlIGRhdGEuICovCisJ
CVlZX0lOUFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90
b19tb3ZlXSksCisJCQl5eWctPnl5X25fY2hhcnMsIG51bV90b19yZWFkICk7CisKKwkJWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisK
KwlpZiAoIHl5Zy0+eXlfbl9jaGFycyA9PSAwICkKKwkJeworCQlpZiAoIG51bWJlcl90b19tb3Zl
ID09IFlZX01PUkVfQURKICkKKwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0VORF9PRl9GSUxF
OworCQkJeXlyZXN0YXJ0KHl5aW4gICx5eXNjYW5uZXIpOworCQkJfQorCisJCWVsc2UKKwkJCXsK
KwkJCXJldF92YWwgPSBFT0JfQUNUX0xBU1RfTUFUQ0g7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPQorCQkJCVlZX0JVRkZFUl9FT0ZfUEVORElORzsKKwkJ
CX0KKwkJfQorCisJZWxzZQorCQlyZXRfdmFsID0gRU9CX0FDVF9DT05USU5VRV9TQ0FOOworCisJ
aWYgKCh5eV9zaXplX3QpICh5eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSkgPiBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplKSB7CisJCS8qIEV4dGVuZCB0aGUgYXJy
YXkgYnkgNTAlLCBwbHVzIHRoZSBudW1iZXIgd2UgcmVhbGx5IG5lZWQuICovCisJCXl5X3NpemVf
dCBuZXdfc2l6ZSA9IHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlICsgKHl5Zy0+eXlf
bl9jaGFycyA+PiAxKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgPSAo
Y2hhciAqKSB5eXJlYWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9j
aF9idWYsbmV3X3NpemUgLHl5c2Nhbm5lciApOworCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9jaF9idWYgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBt
ZW1vcnkgaW4geXlfZ2V0X25leHRfYnVmZmVyKCkiICk7CisJfQorCisJeXlnLT55eV9uX2NoYXJz
ICs9IG51bWJlcl90b19tb3ZlOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVm
W3l5Zy0+eXlfbl9jaGFyc10gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gPSBZWV9FTkRfT0Zf
QlVGRkVSX0NIQVI7CisKKwl5eWctPnl5dGV4dF9wdHIgPSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9jaF9idWZbMF07CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyogeXlfZ2V0X3By
ZXZpb3VzX3N0YXRlIC0gZ2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9yZSB0aGUgRU9CIGNoYXIgd2Fz
IHJlYWNoZWQgKi8KKworICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19z
dGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlf
Y3VycmVudF9zdGF0ZTsKKwlyZWdpc3RlciBjaGFyICp5eV9jcDsKKyAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwl5eV9jdXJyZW50X3N0
YXRlID0geXlnLT55eV9zdGFydDsKKworCWZvciAoIHl5X2NwID0geXlnLT55eXRleHRfcHRyICsg
WVlfTU9SRV9BREo7IHl5X2NwIDwgeXlnLT55eV9jX2J1Zl9wOyArK3l5X2NwICkKKwkJeworCQly
ZWdpc3RlciBZWV9DSEFSIHl5X2MgPSAoKnl5X2NwID8geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2Nw
KV0gOiAxKTsKKwkJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQkJeworCQkJ
eXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJCQl5eWct
Pnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKKwkJCX0KKwkJd2hpbGUgKCB5eV9jaGtb
eXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQor
CQkJeworCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRl
XTsKKwkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NDMgKQorCQkJCXl5X2MgPSB5eV9tZXRh
Wyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQkJfQorCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0
W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJfQor
CisJcmV0dXJuIHl5X2N1cnJlbnRfc3RhdGU7Cit9CisKKy8qIHl5X3RyeV9OVUxfdHJhbnMgLSB0
cnkgdG8gbWFrZSBhIHRyYW5zaXRpb24gb24gdGhlIE5VTCBjaGFyYWN0ZXIKKyAqCisgKiBzeW5v
cHNpcworICoJbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIGN1cnJlbnRfc3RhdGUgKTsK
KyAqLworICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgICh5eV9zdGF0
ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJcmVnaXN0
ZXIgaW50IHl5X2lzX2phbTsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7IC8qIFRoaXMgdmFyIG1heSBiZSB1bnVzZWQgZGVwZW5kaW5nIHVw
b24gb3B0aW9ucy4gKi8KKwlyZWdpc3RlciBjaGFyICp5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsK
KworCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IDE7CisJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVu
dF9zdGF0ZV0gKQorCQl7CisJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJy
ZW50X3N0YXRlOworCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKKwkJfQor
CXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9j
dXJyZW50X3N0YXRlICkKKwkJeworCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5
X2N1cnJlbnRfc3RhdGVdOworCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDQzICkKKwkJCXl5
X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQl9CisJeXlfY3VycmVudF9zdGF0
ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlf
Y107CisJeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gNDQyKTsKKworCSh2b2lkKXl5
ZzsKKwlyZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7Cit9CisKKyNpZm5k
ZWYgWVlfTk9fSU5QVVQKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIHN0YXRpYyBpbnQgeXlpbnB1
dCAoeXlzY2FuX3QgeXlzY2FubmVyKQorI2Vsc2UKKyAgICBzdGF0aWMgaW50IGlucHV0ICAoeXlz
Y2FuX3QgeXlzY2FubmVyKQorI2VuZGlmCisKK3sKKwlpbnQgYzsKKyAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwkqeXlnLT55eV9jX2J1
Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisKKwlpZiAoICp5eWctPnl5X2NfYnVmX3AgPT0gWVlf
RU5EX09GX0JVRkZFUl9DSEFSICkKKwkJeworCQkvKiB5eV9jX2J1Zl9wIG5vdyBwb2ludHMgdG8g
dGhlIGNoYXJhY3RlciB3ZSB3YW50IHRvIHJldHVybi4KKwkJICogSWYgdGhpcyBvY2N1cnMgKmJl
Zm9yZSogdGhlIEVPQiBjaGFyYWN0ZXJzLCB0aGVuIGl0J3MgYQorCQkgKiB2YWxpZCBOVUw7IGlm
IG5vdCwgdGhlbiB3ZSd2ZSBoaXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLgorCQkgKi8KKwkJaWYg
KCB5eWctPnl5X2NfYnVmX3AgPCAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZb
eXlnLT55eV9uX2NoYXJzXSApCisJCQkvKiBUaGlzIHdhcyByZWFsbHkgYSBOVUwuICovCisJCQkq
eXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsKKworCQllbHNlCisJCQl7IC8qIG5lZWQgbW9yZSBpbnB1
dCAqLworCQkJeXlfc2l6ZV90IG9mZnNldCA9IHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0
X3B0cjsKKwkJCSsreXlnLT55eV9jX2J1Zl9wOworCisJCQlzd2l0Y2ggKCB5eV9nZXRfbmV4dF9i
dWZmZXIoIHl5c2Nhbm5lciApICkKKwkJCQl7CisJCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6
CisJCQkJCS8qIFRoaXMgaGFwcGVucyBiZWNhdXNlIHl5X2dfbl9iKCkKKwkJCQkJICogc2VlcyB0
aGF0IHdlJ3ZlIGFjY3VtdWxhdGVkIGEKKwkJCQkJICogdG9rZW4gYW5kIGZsYWdzIHRoYXQgd2Ug
bmVlZCB0bworCQkJCQkgKiB0cnkgbWF0Y2hpbmcgdGhlIHRva2VuIGJlZm9yZQorCQkJCQkgKiBw
cm9jZWVkaW5nLiAgQnV0IGZvciBpbnB1dCgpLAorCQkJCQkgKiB0aGVyZSdzIG5vIG1hdGNoaW5n
IHRvIGNvbnNpZGVyLgorCQkJCQkgKiBTbyBjb252ZXJ0IHRoZSBFT0JfQUNUX0xBU1RfTUFUQ0gK
KwkJCQkJICogdG8gRU9CX0FDVF9FTkRfT0ZfRklMRS4KKwkJCQkJICovCisKKwkJCQkJLyogUmVz
ZXQgYnVmZmVyIHN0YXR1cy4gKi8KKwkJCQkJeXlyZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lcik7CisK
KwkJCQkJLypGQUxMVEhST1VHSCovCisKKwkJCQljYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6CisJ
CQkJCXsKKwkJCQkJaWYgKCB5eXdyYXAoeXlzY2FubmVyICkgKQorCQkJCQkJcmV0dXJuIEVPRjsK
KworCQkJCQlpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQorCQkJCQkJ
WVlfTkVXX0ZJTEU7CisjaWZkZWYgX19jcGx1c3BsdXMKKwkJCQkJcmV0dXJuIHl5aW5wdXQoeXlz
Y2FubmVyKTsKKyNlbHNlCisJCQkJCXJldHVybiBpbnB1dCh5eXNjYW5uZXIpOworI2VuZGlmCisJ
CQkJCX0KKworCQkJCWNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOgorCQkJCQl5eWctPnl5X2Nf
YnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyBvZmZzZXQ7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJ
CX0KKwkJfQorCisJYyA9ICoodW5zaWduZWQgY2hhciAqKSB5eWctPnl5X2NfYnVmX3A7CS8qIGNh
c3QgZm9yIDgtYml0IGNoYXIncyAqLworCSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOwkvKiBwcmVz
ZXJ2ZSB5eXRleHQgKi8KKwl5eWctPnl5X2hvbGRfY2hhciA9ICorK3l5Zy0+eXlfY19idWZfcDsK
KworCWlmICggYyA9PSAnXG4nICkKKwkJICAgCisgICAgZG97IHl5bGluZW5vKys7CisgICAgICAg
IHl5Y29sdW1uPTA7CisgICAgfXdoaWxlKDApCis7CisKKwlyZXR1cm4gYzsKK30KKyNlbmRpZgkv
KiBpZm5kZWYgWVlfTk9fSU5QVVQgKi8KKworLyoqIEltbWVkaWF0ZWx5IHN3aXRjaCB0byBhIGRp
ZmZlcmVudCBpbnB1dCBzdHJlYW0uCisgKiBAcGFyYW0gaW5wdXRfZmlsZSBBIHJlYWRhYmxlIHN0
cmVhbS4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQG5vdGUg
VGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXNldCB0aGUgc3RhcnQgY29uZGl0aW9uIHRvIEBjIElO
SVRJQUwgLgorICovCisgICAgdm9pZCB5eXJlc3RhcnQgIChGSUxFICogaW5wdXRfZmlsZSAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsKKyAg
ICAgICAgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOworCQlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUgPQorICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9T
SVpFICx5eXNjYW5uZXIpOworCX0KKworCXl5X2luaXRfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVS
LGlucHV0X2ZpbGUgLHl5c2Nhbm5lcik7CisJeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVy
ICk7Cit9CisKKy8qKiBTd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgYnVmZmVyLgorICogQHBh
cmFtIG5ld19idWZmZXIgVGhlIG5ldyBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0geXlzY2FubmVy
IFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworICAgIHZvaWQgeXlfc3dpdGNoX3RvX2J1ZmZlciAg
KFlZX0JVRkZFUl9TVEFURSAgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisK
KwkvKiBUT0RPLiBXZSBzaG91bGQgYmUgYWJsZSB0byByZXBsYWNlIHRoaXMgZW50aXJlIGZ1bmN0
aW9uIGJvZHkKKwkgKiB3aXRoCisJICoJCXl5cG9wX2J1ZmZlcl9zdGF0ZSgpOworCSAqCQl5eXB1
c2hfYnVmZmVyX3N0YXRlKG5ld19idWZmZXIpOworICAgICAqLworCXl5ZW5zdXJlX2J1ZmZlcl9z
dGFjayAoeXlzY2FubmVyKTsKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSID09IG5ld19idWZmZXIg
KQorCQlyZXR1cm47CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJeworCQkvKiBGbHVz
aCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCisJCSp5eWctPnl5X2NfYnVmX3Ag
PSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZf
cG9zID0geXlnLT55eV9jX2J1Zl9wOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25f
Y2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CisJCX0KKworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RSA9IG5ld19idWZmZXI7CisJeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisKKwkv
KiBXZSBkb24ndCBhY3R1YWxseSBrbm93IHdoZXRoZXIgd2UgZGlkIHRoaXMgc3dpdGNoIGR1cmlu
ZworCSAqIEVPRiAoeXl3cmFwKCkpIHByb2Nlc3NpbmcsIGJ1dCB0aGUgb25seSB0aW1lIHRoaXMg
ZmxhZworCSAqIGlzIGxvb2tlZCBhdCBpcyBhZnRlciB5eXdyYXAoKSBpcyBjYWxsZWQsIHNvIGl0
J3Mgc2FmZQorCSAqIHRvIGdvIGFoZWFkIGFuZCBhbHdheXMgc2V0IGl0LgorCSAqLworCXl5Zy0+
eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKK30KKworc3RhdGljIHZvaWQgeXlfbG9h
ZF9idWZmZXJfc3RhdGUgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCXl5Zy0+eXlfbl9jaGFy
cyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsKKwl5eWctPnl5dGV4dF9w
dHIgPSB5eWctPnl5X2NfYnVmX3AgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9w
b3M7CisJeXlpbiA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZTsKKwl5
eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7Cit9CisKKy8qKiBBbGxvY2F0ZSBh
bmQgaW5pdGlhbGl6ZSBhbiBpbnB1dCBidWZmZXIgc3RhdGUuCisgKiBAcGFyYW0gZmlsZSBBIHJl
YWRhYmxlIHN0cmVhbS4KKyAqIEBwYXJhbSBzaXplIFRoZSBjaGFyYWN0ZXIgYnVmZmVyIHNpemUg
aW4gYnl0ZXMuIFdoZW4gaW4gZG91YnQsIHVzZSBAYyBZWV9CVUZfU0laRS4KKyAqIEBwYXJhbSB5
eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHJldHVybiB0aGUgYWxsb2NhdGVkIGJ1
ZmZlciBzdGF0ZS4KKyAqLworICAgIFlZX0JVRkZFUl9TVEFURSB5eV9jcmVhdGVfYnVmZmVyICAo
RklMRSAqIGZpbGUsIGludCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlZWV9CVUZG
RVJfU1RBVEUgYjsKKyAgICAKKwliID0gKFlZX0JVRkZFUl9TVEFURSkgeXlhbGxvYyhzaXplb2Yo
IHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7CisJaWYgKCAhIGIgKQorCQlZ
WV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9jcmVhdGVfYnVmZmVy
KCkiICk7CisKKwliLT55eV9idWZfc2l6ZSA9IHNpemU7CisKKwkvKiB5eV9jaF9idWYgaGFzIHRv
IGJlIDIgY2hhcmFjdGVycyBsb25nZXIgdGhhbiB0aGUgc2l6ZSBnaXZlbiBiZWNhdXNlCisJICog
d2UgbmVlZCB0byBwdXQgaW4gMiBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuCisJICovCisJYi0+
eXlfY2hfYnVmID0gKGNoYXIgKikgeXlhbGxvYyhiLT55eV9idWZfc2l6ZSArIDIgLHl5c2Nhbm5l
ciApOworCWlmICggISBiLT55eV9jaF9idWYgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBk
eW5hbWljIG1lbW9yeSBpbiB5eV9jcmVhdGVfYnVmZmVyKCkiICk7CisKKwliLT55eV9pc19vdXJf
YnVmZmVyID0gMTsKKworCXl5X2luaXRfYnVmZmVyKGIsZmlsZSAseXlzY2FubmVyKTsKKworCXJl
dHVybiBiOworfQorCisvKiogRGVzdHJveSB0aGUgYnVmZmVyLgorICogQHBhcmFtIGIgYSBidWZm
ZXIgY3JlYXRlZCB3aXRoIHl5X2NyZWF0ZV9idWZmZXIoKQorICogQHBhcmFtIHl5c2Nhbm5lciBU
aGUgc2Nhbm5lciBvYmplY3QuCisgKi8KKyAgICB2b2lkIHl5X2RlbGV0ZV9idWZmZXIgKFlZX0JV
RkZFUl9TVEFURSAgYiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwlpZiAoICEgYiApCisJ
CXJldHVybjsKKworCWlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApIC8qIE5vdCBzdXJlIGlm
IHdlIHNob3VsZCBwb3AgaGVyZS4gKi8KKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gKFlZ
X0JVRkZFUl9TVEFURSkgMDsKKworCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCisJCXl5ZnJl
ZSgodm9pZCAqKSBiLT55eV9jaF9idWYgLHl5c2Nhbm5lciApOworCisJeXlmcmVlKCh2b2lkICop
IGIgLHl5c2Nhbm5lciApOworfQorCisvKiBJbml0aWFsaXplcyBvciByZWluaXRpYWxpemVzIGEg
YnVmZmVyLgorICogVGhpcyBmdW5jdGlvbiBpcyBzb21ldGltZXMgY2FsbGVkIG1vcmUgdGhhbiBv
bmNlIG9uIHRoZSBzYW1lIGJ1ZmZlciwKKyAqIHN1Y2ggYXMgZHVyaW5nIGEgeXlyZXN0YXJ0KCkg
b3IgYXQgRU9GLgorICovCisgICAgc3RhdGljIHZvaWQgeXlfaW5pdF9idWZmZXIgIChZWV9CVUZG
RVJfU1RBVEUgIGIsIEZJTEUgKiBmaWxlICwgeXlzY2FuX3QgeXlzY2FubmVyKQorCit7CisJaW50
IG9lcnJubyA9IGVycm5vOworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKKworCXl5X2ZsdXNoX2J1ZmZlcihiICx5eXNjYW5uZXIpOworCisJ
Yi0+eXlfaW5wdXRfZmlsZSA9IGZpbGU7CisJYi0+eXlfZmlsbF9idWZmZXIgPSAxOworCisgICAg
LyogSWYgYiBpcyB0aGUgY3VycmVudCBidWZmZXIsIHRoZW4geXlfaW5pdF9idWZmZXIgd2FzIF9w
cm9iYWJseV8KKyAgICAgKiBjYWxsZWQgZnJvbSB5eXJlc3RhcnQoKSBvciB0aHJvdWdoIHl5X2dl
dF9uZXh0X2J1ZmZlci4KKyAgICAgKiBJbiB0aGF0IGNhc2UsIHdlIGRvbid0IHdhbnQgdG8gcmVz
ZXQgdGhlIGxpbmVubyBvciBjb2x1bW4uCisgICAgICovCisgICAgaWYgKGIgIT0gWVlfQ1VSUkVO
VF9CVUZGRVIpeworICAgICAgICBiLT55eV9ic19saW5lbm8gPSAxOworICAgICAgICBiLT55eV9i
c19jb2x1bW4gPSAwOworICAgIH0KKworICAgICAgICBiLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7
CisgICAgCisJZXJybm8gPSBvZXJybm87Cit9CisKKy8qKiBEaXNjYXJkIGFsbCBidWZmZXJlZCBj
aGFyYWN0ZXJzLiBPbiB0aGUgbmV4dCBzY2FuLCBZWV9JTlBVVCB3aWxsIGJlIGNhbGxlZC4KKyAq
IEBwYXJhbSBiIHRoZSBidWZmZXIgc3RhdGUgdG8gYmUgZmx1c2hlZCwgdXN1YWxseSBAYyBZWV9D
VVJSRU5UX0JVRkZFUi4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0Lgor
ICovCisgICAgdm9pZCB5eV9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSAgYiAsIHl5c2Nh
bl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7CisJaWYgKCAhIGIgKQorCQlyZXR1cm47CisKKwliLT55eV9uX2No
YXJzID0gMDsKKworCS8qIFdlIGFsd2F5cyBuZWVkIHR3byBlbmQtb2YtYnVmZmVyIGNoYXJhY3Rl
cnMuICBUaGUgZmlyc3QgY2F1c2VzCisJICogYSB0cmFuc2l0aW9uIHRvIHRoZSBlbmQtb2YtYnVm
ZmVyIHN0YXRlLiAgVGhlIHNlY29uZCBjYXVzZXMKKwkgKiBhIGphbSBpbiB0aGF0IHN0YXRlLgor
CSAqLworCWItPnl5X2NoX2J1ZlswXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKwliLT55eV9j
aF9idWZbMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwliLT55eV9idWZfcG9zID0gJmIt
Pnl5X2NoX2J1ZlswXTsKKworCWItPnl5X2F0X2JvbCA9IDE7CisJYi0+eXlfYnVmZmVyX3N0YXR1
cyA9IFlZX0JVRkZFUl9ORVc7CisKKwlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKQorCQl5
eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKK30KKworLyoqIFB1c2hlcyB0aGUgbmV3
IHN0YXRlIG9udG8gdGhlIHN0YWNrLiBUaGUgbmV3IHN0YXRlIGJlY29tZXMKKyAqICB0aGUgY3Vy
cmVudCBzdGF0ZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGFsbG9jYXRlIHRoZSBzdGFjaworICogIGlm
IG5lY2Vzc2FyeS4KKyAqICBAcGFyYW0gbmV3X2J1ZmZlciBUaGUgbmV3IHN0YXRlLgorICogIEBw
YXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHl5cHVzaF9idWZm
ZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICwgeXlzY2FuX3QgeXlzY2FubmVy
KQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKKwlpZiAobmV3X2J1ZmZlciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwl5eWVuc3VyZV9i
dWZmZXJfc3RhY2soeXlzY2FubmVyKTsKKworCS8qIFRoaXMgYmxvY2sgaXMgY29waWVkIGZyb20g
eXlfc3dpdGNoX3RvX2J1ZmZlci4gKi8KKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJewor
CQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCisJCSp5eWctPnl5
X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CisJCX0KKworCS8qIE9ubHkgcHVzaCBp
ZiB0b3AgZXhpc3RzLiBPdGhlcndpc2UsIHJlcGxhY2UgdG9wLiAqLworCWlmIChZWV9DVVJSRU5U
X0JVRkZFUikKKwkJeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wKys7CisJWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKKworCS8qIGNvcGllZCBmcm9tIHl5X3N3aXRjaF90b19i
dWZmZXIuICovCisJeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisJeXlnLT55eV9k
aWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworfQorCisvKiogUmVtb3ZlcyBhbmQgZGVsZXRl
cyB0aGUgdG9wIG9mIHRoZSBzdGFjaywgaWYgcHJlc2VudC4KKyAqICBUaGUgbmV4dCBlbGVtZW50
IGJlY29tZXMgdGhlIG5ldyB0b3AuCisgKiAgQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBv
YmplY3QuCisgKi8KK3ZvaWQgeXlwb3BfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIp
Cit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOworCWlmICghWVlfQ1VSUkVOVF9CVUZGRVIpCisJCXJldHVybjsKKworCXl5X2RlbGV0ZV9i
dWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lcik7CisJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFID0gTlVMTDsKKwlpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID4gMCkKKwkJLS15
eWctPnl5X2J1ZmZlcl9zdGFja190b3A7CisKKwlpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpIHsKKwkJ
eXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisJCXl5Zy0+eXlfZGlkX2J1ZmZlcl9z
d2l0Y2hfb25fZW9mID0gMTsKKwl9Cit9CisKKy8qIEFsbG9jYXRlcyB0aGUgc3RhY2sgaWYgaXQg
ZG9lcyBub3QgZXhpc3QuCisgKiAgR3VhcmFudGVlcyBzcGFjZSBmb3IgYXQgbGVhc3Qgb25lIHB1
c2guCisgKi8KK3N0YXRpYyB2b2lkIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlz
Y2FubmVyKQoreworCXl5X3NpemVfdCBudW1fdG9fYWxsb2M7CisgICAgc3RydWN0IHl5Z3V0c190
ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJaWYgKCF5eWctPnl5X2J1
ZmZlcl9zdGFjaykgeworCisJCS8qIEZpcnN0IGFsbG9jYXRpb24gaXMganVzdCBmb3IgMiBlbGVt
ZW50cywgc2luY2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGlzCisJCSAqIHNjYW5uZXIgd2lsbCBldmVu
IG5lZWQgYSBzdGFjay4gV2UgdXNlIDIgaW5zdGVhZCBvZiAxIHRvIGF2b2lkIGFuCisJCSAqIGlt
bWVkaWF0ZSByZWFsbG9jIG9uIHRoZSBuZXh0IGNhbGwuCisgICAgICAgICAqLworCQludW1fdG9f
YWxsb2MgPSAxOworCQl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0
YXRlKiopeXlhbGxvYworCQkJCQkJCQkobnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9i
dWZmZXJfc3RhdGUqKQorCQkJCQkJCQksIHl5c2Nhbm5lcik7CisJCWlmICggISB5eWctPnl5X2J1
ZmZlcl9zdGFjayApCisJCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBp
biB5eWVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKKwkJCQkJCQkJICAKKwkJbWVtc2V0KHl5Zy0+
eXlfYnVmZmVyX3N0YWNrLCAwLCBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZl
cl9zdGF0ZSopKTsKKwkJCQkKKwkJeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gbnVtX3RvX2Fs
bG9jOworCQl5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPSAwOworCQlyZXR1cm47CisJfQorCisJ
aWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+PSAoeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4
KSAtIDEpeworCisJCS8qIEluY3JlYXNlIHRoZSBidWZmZXIgdG8gcHJlcGFyZSBmb3IgYSBwb3Nz
aWJsZSBwdXNoLiAqLworCQlpbnQgZ3Jvd19zaXplID0gOCAvKiBhcmJpdHJhcnkgZ3JvdyBzaXpl
ICovOworCisJCW51bV90b19hbGxvYyA9IHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCArIGdyb3df
c2l6ZTsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoq
KXl5cmVhbGxvYworCQkJCQkJCQkoeXlnLT55eV9idWZmZXJfc3RhY2ssCisJCQkJCQkJCW51bV90
b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKKwkJCQkJCQkJLCB5eXNj
YW5uZXIpOworCQlpZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQorCQkJWVlfRkFUQUxfRVJS
T1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXllbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7
CisKKwkJLyogemVybyBvbmx5IHRoZSBuZXcgc2xvdHMuKi8KKwkJbWVtc2V0KHl5Zy0+eXlfYnVm
ZmVyX3N0YWNrICsgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4LCAwLCBncm93X3NpemUgKiBzaXpl
b2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4
ID0gbnVtX3RvX2FsbG9jOworCX0KK30KKworLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3Rh
dGUgdG8gc2NhbiBkaXJlY3RseSBmcm9tIGEgdXNlci1zcGVjaWZpZWQgY2hhcmFjdGVyIGJ1ZmZl
ci4KKyAqIEBwYXJhbSBiYXNlIHRoZSBjaGFyYWN0ZXIgYnVmZmVyCisgKiBAcGFyYW0gc2l6ZSB0
aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgorICogQHBhcmFtIHl5c2Nh
bm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQg
YnVmZmVyIHN0YXRlIG9iamVjdC4gCisgKi8KK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J1ZmZl
ciAgKGNoYXIgKiBiYXNlLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7
CisJWVlfQlVGRkVSX1NUQVRFIGI7CisgICAgCisJaWYgKCBzaXplIDwgMiB8fAorCSAgICAgYmFz
ZVtzaXplLTJdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiB8fAorCSAgICAgYmFzZVtzaXplLTFd
ICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCisJCS8qIFRoZXkgZm9yZ290IHRvIGxlYXZlIHJv
b20gZm9yIHRoZSBFT0Incy4gKi8KKwkJcmV0dXJuIDA7CisKKwliID0gKFlZX0JVRkZFUl9TVEFU
RSkgeXlhbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7
CisJaWYgKCAhIGIgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBp
biB5eV9zY2FuX2J1ZmZlcigpIiApOworCisJYi0+eXlfYnVmX3NpemUgPSBzaXplIC0gMjsJLyog
Ii0gMiIgdG8gdGFrZSBjYXJlIG9mIEVPQidzICovCisJYi0+eXlfYnVmX3BvcyA9IGItPnl5X2No
X2J1ZiA9IGJhc2U7CisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDA7CisJYi0+eXlfaW5wdXRfZmls
ZSA9IDA7CisJYi0+eXlfbl9jaGFycyA9IGItPnl5X2J1Zl9zaXplOworCWItPnl5X2lzX2ludGVy
YWN0aXZlID0gMDsKKwliLT55eV9hdF9ib2wgPSAxOworCWItPnl5X2ZpbGxfYnVmZmVyID0gMDsK
KwliLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKKworCXl5X3N3aXRjaF90b19i
dWZmZXIoYiAseXlzY2FubmVyICk7CisKKwlyZXR1cm4gYjsKK30KKworLyoqIFNldHVwIHRoZSBp
bnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBhIHN0cmluZy4gVGhlIG5leHQgY2FsbCB0byB5eWxl
eCgpIHdpbGwKKyAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgc3RyLgorICogQHBhcmFtIHl5
c3RyIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHNjYW4KKyAqIEBwYXJhbSB5eXNjYW5uZXIg
VGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZl
ciBzdGF0ZSBvYmplY3QuCisgKiBAbm90ZSBJZiB5b3Ugd2FudCB0byBzY2FuIGJ5dGVzIHRoYXQg
bWF5IGNvbnRhaW4gTlVMIHZhbHVlcywgdGhlbiB1c2UKKyAqICAgICAgIHl5X3NjYW5fYnl0ZXMo
KSBpbnN0ZWFkLgorICovCitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9zdHJpbmcgKHl5Y29uc3Qg
Y2hhciAqIHl5c3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIAorCXJldHVybiB5eV9z
Y2FuX2J5dGVzKHl5c3RyLHN0cmxlbih5eXN0cikgLHl5c2Nhbm5lcik7Cit9CisKKy8qKiBTZXR1
cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gdGhlIGdpdmVuIGJ5dGVzLiBUaGUgbmV4
dCBjYWxsIHRvIHl5bGV4KCkgd2lsbAorICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBieXRl
cy4KKyAqIEBwYXJhbSB5eWJ5dGVzIHRoZSBieXRlIGJ1ZmZlciB0byBzY2FuCisgKiBAcGFyYW0g
X3l5Ynl0ZXNfbGVuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRv
IGJ5IEBhIGJ5dGVzLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisg
KiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KKyAqLwor
WVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCB5
eV9zaXplX3QgIF95eWJ5dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlZWV9CVUZG
RVJfU1RBVEUgYjsKKwljaGFyICpidWY7CisJeXlfc2l6ZV90IG47CisJeXlfc2l6ZV90IGk7Cisg
ICAgCisJLyogR2V0IG1lbW9yeSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3Ig
dHJhaWxpbmcgRU9CJ3MuICovCisJbiA9IF95eWJ5dGVzX2xlbiArIDI7CisJYnVmID0gKGNoYXIg
KikgeXlhbGxvYyhuICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYnVmICkKKwkJWVlfRkFUQUxfRVJS
T1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfc2Nhbl9ieXRlcygpIiApOworCisJZm9y
ICggaSA9IDA7IGkgPCBfeXlieXRlc19sZW47ICsraSApCisJCWJ1ZltpXSA9IHl5Ynl0ZXNbaV07
CisKKwlidWZbX3l5Ynl0ZXNfbGVuXSA9IGJ1ZltfeXlieXRlc19sZW4rMV0gPSBZWV9FTkRfT0Zf
QlVGRkVSX0NIQVI7CisKKwliID0geXlfc2Nhbl9idWZmZXIoYnVmLG4gLHl5c2Nhbm5lcik7CisJ
aWYgKCAhIGIgKQorCQlZWV9GQVRBTF9FUlJPUiggImJhZCBidWZmZXIgaW4geXlfc2Nhbl9ieXRl
cygpIiApOworCisJLyogSXQncyBva2F5IHRvIGdyb3cgZXRjLiB0aGlzIGJ1ZmZlciwgYW5kIHdl
IHNob3VsZCB0aHJvdyBpdAorCSAqIGF3YXkgd2hlbiB3ZSdyZSBkb25lLgorCSAqLworCWItPnl5
X2lzX291cl9idWZmZXIgPSAxOworCisJcmV0dXJuIGI7Cit9CisKKyNpZm5kZWYgWVlfRVhJVF9G
QUlMVVJFCisjZGVmaW5lIFlZX0VYSVRfRkFJTFVSRSAyCisjZW5kaWYKKworc3RhdGljIHZvaWQg
eXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciogbXNnICwgeXlzY2FuX3QgeXlzY2FubmVyKQor
eworICAgIAkodm9pZCkgZnByaW50Ziggc3RkZXJyLCAiJXNcbiIsIG1zZyApOworCWV4aXQoIFlZ
X0VYSVRfRkFJTFVSRSApOworfQorCisvKiBSZWRlZmluZSB5eWxlc3MoKSBzbyBpdCB3b3JrcyBp
biBzZWN0aW9uIDMgY29kZS4gKi8KKworI3VuZGVmIHl5bGVzcworI2RlZmluZSB5eWxlc3Mobikg
XAorCWRvIFwKKwkJeyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4g
Ki8gXAorICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAorICAgICAgICBZWV9M
RVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCisJCXl5dGV4dFt5eWxlbmddID0geXlnLT55
eV9ob2xkX2NoYXI7IFwKKwkJeXlnLT55eV9jX2J1Zl9wID0geXl0ZXh0ICsgeXlsZXNzX21hY3Jv
X2FyZzsgXAorCQl5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7IFwKKwkJKnl5
Zy0+eXlfY19idWZfcCA9ICdcMCc7IFwKKwkJeXlsZW5nID0geXlsZXNzX21hY3JvX2FyZzsgXAor
CQl9IFwKKwl3aGlsZSAoIDAgKQorCisvKiBBY2Nlc3NvciAgbWV0aG9kcyAoZ2V0L3NldCBmdW5j
dGlvbnMpIHRvIHN0cnVjdCBtZW1iZXJzLiAqLworCisvKiogR2V0IHRoZSB1c2VyLWRlZmluZWQg
ZGF0YSBmb3IgdGhpcyBzY2FubmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBv
YmplY3QuCisgKi8KK1lZX0VYVFJBX1RZUEUgeXlnZXRfZXh0cmEgICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOworICAgIHJldHVybiB5eWV4dHJhOworfQorCisvKiogR2V0IHRoZSBjdXJyZW50IGxp
bmUgbnVtYmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8K
K2ludCB5eWdldF9saW5lbm8gICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIAorICAgICAg
ICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIAor
ICAgIHJldHVybiB5eWxpbmVubzsKK30KKworLyoqIEdldCB0aGUgY3VycmVudCBjb2x1bW4gbnVt
YmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK2ludCB5
eWdldF9jb2x1bW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190
ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIAorICAgICAgICBpZiAo
ISBZWV9DVVJSRU5UX0JVRkZFUikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJl
dHVybiB5eWNvbHVtbjsKK30KKworLyoqIEdldCB0aGUgaW5wdXQgc3RyZWFtLgorICogQHBhcmFt
IHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK0ZJTEUgKnl5Z2V0X2luICAoeXlz
Y2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlpbjsKK30KKworLyoqIEdldCB0aGUg
b3V0cHV0IHN0cmVhbS4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0Lgor
ICovCitGSUxFICp5eWdldF9vdXQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVy
biB5eW91dDsKK30KKworLyoqIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50IHRva2VuLgor
ICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3l5X3NpemVfdCB5
eWdldF9sZW5nICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlsZW5nOwor
fQorCisvKiogR2V0IHRoZSBjdXJyZW50IHRva2VuLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUg
c2Nhbm5lciBvYmplY3QuCisgKi8KKworY2hhciAqeXlnZXRfdGV4dCAgKHl5c2Nhbl90IHl5c2Nh
bm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5dGV4dDsKK30KKworLyoqIFNldCB0aGUgdXNlci1kZWZp
bmVkIGRhdGEuIFRoaXMgZGF0YSBpcyBuZXZlciB0b3VjaGVkIGJ5IHRoZSBzY2FubmVyLgorICog
QHBhcmFtIHVzZXJfZGVmaW5lZCBUaGUgZGF0YSB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBz
Y2FubmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3Zv
aWQgeXlzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgIHVzZXJfZGVmaW5lZCAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7CisgICAgeXlleHRyYSA9IHVzZXJfZGVmaW5lZCA7Cit9CisKKy8qKiBTZXQg
dGhlIGN1cnJlbnQgbGluZSBudW1iZXIuCisgKiBAcGFyYW0gbGluZV9udW1iZXIKKyAqIEBwYXJh
bSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHl5c2V0X2xpbmVubyAo
aW50ICBsaW5lX251bWJlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKyAgICAgICAgLyog
bGluZW5vIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8KKyAgICAg
ICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQorICAgICAgICAgICBZWV9GQVRBTF9FUlJPUigg
Inl5c2V0X2xpbmVubyBjYWxsZWQgd2l0aCBubyBidWZmZXIiICk7CisgICAgCisgICAgeXlsaW5l
bm8gPSBsaW5lX251bWJlcjsKK30KKworLyoqIFNldCB0aGUgY3VycmVudCBjb2x1bW4uCisgKiBA
cGFyYW0gbGluZV9udW1iZXIKKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0
LgorICovCit2b2lkIHl5c2V0X2NvbHVtbiAoaW50ICBjb2x1bW5fbm8gLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOworCisgICAgICAgIC8qIGNvbHVtbiBpcyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0
IGJ1ZmZlciBleGlzdHMuICovCisgICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSICkKKyAg
ICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJ5eXNldF9jb2x1bW4gY2FsbGVkIHdpdGggbm8gYnVm
ZmVyIiApOworICAgIAorICAgIHl5Y29sdW1uID0gY29sdW1uX25vOworfQorCisvKiogU2V0IHRo
ZSBpbnB1dCBzdHJlYW0uIFRoaXMgZG9lcyBub3QgZGlzY2FyZCB0aGUgY3VycmVudAorICogaW5w
dXQgYnVmZmVyLgorICogQHBhcmFtIGluX3N0ciBBIHJlYWRhYmxlIHN0cmVhbS4KKyAqIEBwYXJh
bSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHNlZSB5eV9zd2l0Y2hfdG9fYnVm
ZmVyCisgKi8KK3ZvaWQgeXlzZXRfaW4gKEZJTEUgKiAgaW5fc3RyICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKKyAgICB5eWluID0gaW5fc3RyIDsKK30KKwordm9pZCB5eXNldF9vdXQgKEZJTEUg
KiAgb3V0X3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlvdXQgPSBvdXRfc3Ry
IDsKK30KKworaW50IHl5Z2V0X2RlYnVnICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICBy
ZXR1cm4geXlfZmxleF9kZWJ1ZzsKK30KKwordm9pZCB5eXNldF9kZWJ1ZyAoaW50ICBiZGVidWcg
LCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5X2ZsZXhfZGVidWcgPSBiZGVidWcgOwor
fQorCisvKiBBY2Nlc3NvciBtZXRob2RzIGZvciB5eWx2YWwgYW5kIHl5bGxvYyAqLworCitZWVNU
WVBFICogeXlnZXRfbHZhbCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5
bHZhbDsKK30KKwordm9pZCB5eXNldF9sdmFsIChZWVNUWVBFICogIHl5bHZhbF9wYXJhbSAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlsdmFsID0geXlsdmFsX3BhcmFtOworfQorCitZ
WUxUWVBFICp5eWdldF9sbG9jICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4g
eXlsbG9jOworfQorICAgIAordm9pZCB5eXNldF9sbG9jIChZWUxUWVBFICogIHl5bGxvY19wYXJh
bSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOwor
fQorICAgIAorLyogVXNlci12aXNpYmxlIEFQSSAqLworCisvKiB5eWxleF9pbml0IGlzIHNwZWNp
YWwgYmVjYXVzZSBpdCBjcmVhdGVzIHRoZSBzY2FubmVyIGl0c2VsZiwgc28gaXQgaXMKKyAqIHRo
ZSBPTkxZIHJlZW50cmFudCBmdW5jdGlvbiB0aGF0IGRvZXNuJ3QgdGFrZSB0aGUgc2Nhbm5lciBh
cyB0aGUgbGFzdCBhcmd1bWVudC4KKyAqIFRoYXQncyB3aHkgd2UgZXhwbGljaXRseSBoYW5kbGUg
dGhlIGRlY2xhcmF0aW9uLCBpbnN0ZWFkIG9mIHVzaW5nIG91ciBtYWNyb3MuCisgKi8KKworaW50
IHl5bGV4X2luaXQoeXlzY2FuX3QqIHB0cl95eV9nbG9iYWxzKQorCit7CisgICAgaWYgKHB0cl95
eV9nbG9iYWxzID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0
dXJuIDE7CisgICAgfQorCisgICAgKnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSB5eWFsbG9j
ICggc2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3QgKSwgTlVMTCApOworCisgICAgaWYgKCpwdHJfeXlf
Z2xvYmFscyA9PSBOVUxMKXsKKyAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgIHJldHVy
biAxOworICAgIH0KKworICAgIC8qIEJ5IHNldHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3Mg
aW4geXlfaW5pdF9nbG9iYWxzLiBMZWF2ZSBhdCAweDAwIGZvciByZWxlYXNlcy4gKi8KKyAgICBt
ZW1zZXQoKnB0cl95eV9nbG9iYWxzLDB4MDAsc2l6ZW9mKHN0cnVjdCB5eWd1dHNfdCkpOworCisg
ICAgcmV0dXJuIHl5X2luaXRfZ2xvYmFscyAoICpwdHJfeXlfZ2xvYmFscyApOworfQorCisvKiB5
eWxleF9pbml0X2V4dHJhIGhhcyB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGFzIHl5bGV4X2luaXQs
IGJ1dCBmb2xsb3dzIHRoZQorICogY29udmVudGlvbiBvZiB0YWtpbmcgdGhlIHNjYW5uZXIgYXMg
dGhlIGxhc3QgYXJndW1lbnQuIE5vdGUgaG93ZXZlciwgdGhhdAorICogdGhpcyBpcyBhICpwb2lu
dGVyKiB0byBhIHNjYW5uZXIsIGFzIGl0IHdpbGwgYmUgYWxsb2NhdGVkIGJ5IHRoaXMgY2FsbCAo
YW5kCisgKiBpcyB0aGUgcmVhc29uLCB0b28sIHdoeSB0aGlzIGZ1bmN0aW9uIGFsc28gbXVzdCBo
YW5kbGUgaXRzIG93biBkZWNsYXJhdGlvbikuCisgKiBUaGUgdXNlciBkZWZpbmVkIHZhbHVlIGlu
IHRoZSBmaXJzdCBhcmd1bWVudCB3aWxsIGJlIGF2YWlsYWJsZSB0byB5eWFsbG9jIGluCisgKiB0
aGUgeXlleHRyYSBmaWVsZC4KKyAqLworCitpbnQgeXlsZXhfaW5pdF9leHRyYShZWV9FWFRSQV9U
WVBFIHl5X3VzZXJfZGVmaW5lZCx5eXNjYW5fdCogcHRyX3l5X2dsb2JhbHMgKQorCit7CisgICAg
c3RydWN0IHl5Z3V0c190IGR1bW15X3l5Z3V0czsKKworICAgIHl5c2V0X2V4dHJhICh5eV91c2Vy
X2RlZmluZWQsICZkdW1teV95eWd1dHMpOworCisgICAgaWYgKHB0cl95eV9nbG9iYWxzID09IE5V
TEwpeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQor
CQorICAgICpwdHJfeXlfZ2xvYmFscyA9ICh5eXNjYW5fdCkgeXlhbGxvYyAoIHNpemVvZiggc3Ry
dWN0IHl5Z3V0c190ICksICZkdW1teV95eWd1dHMgKTsKKwkKKyAgICBpZiAoKnB0cl95eV9nbG9i
YWxzID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgICAgcmV0dXJuIDE7
CisgICAgfQorICAgIAorICAgIC8qIEJ5IHNldHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3Mg
aW4KKyAgICB5eV9pbml0X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLwor
ICAgIG1lbXNldCgqcHRyX3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7
CisgICAgCisgICAgeXlzZXRfZXh0cmEgKHl5X3VzZXJfZGVmaW5lZCwgKnB0cl95eV9nbG9iYWxz
KTsKKyAgICAKKyAgICByZXR1cm4geXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7
Cit9CisKK3N0YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxzICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7
CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OworICAgIC8qIEluaXRpYWxpemF0aW9uIGlzIHRoZSBzYW1lIGFzIGZvciB0aGUgbm9uLXJlZW50
cmFudCBzY2FubmVyLgorICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20geXlsZXhf
ZGVzdHJveSgpLCBzbyBkb24ndCBhbGxvY2F0ZSBoZXJlLgorICAgICAqLworCisgICAgeXlnLT55
eV9idWZmZXJfc3RhY2sgPSAwOworICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7Cisg
ICAgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gMDsKKyAgICB5eWctPnl5X2NfYnVmX3AgPSAo
Y2hhciAqKSAwOworICAgIHl5Zy0+eXlfaW5pdCA9IDA7CisgICAgeXlnLT55eV9zdGFydCA9IDA7
CisKKyAgICB5eWctPnl5X3N0YXJ0X3N0YWNrX3B0ciA9IDA7CisgICAgeXlnLT55eV9zdGFydF9z
dGFja19kZXB0aCA9IDA7CisgICAgeXlnLT55eV9zdGFydF9zdGFjayA9ICBOVUxMOworCisvKiBE
ZWZpbmVkIGluIG1haW4uYyAqLworI2lmZGVmIFlZX1NURElOSVQKKyAgICB5eWluID0gc3RkaW47
CisgICAgeXlvdXQgPSBzdGRvdXQ7CisjZWxzZQorICAgIHl5aW4gPSAoRklMRSAqKSAwOworICAg
IHl5b3V0ID0gKEZJTEUgKikgMDsKKyNlbmRpZgorCisgICAgLyogRm9yIGZ1dHVyZSByZWZlcmVu
Y2U6IFNldCBlcnJubyBvbiBlcnJvciwgc2luY2Ugd2UgYXJlIGNhbGxlZCBieQorICAgICAqIHl5
bGV4X2luaXQoKQorICAgICAqLworICAgIHJldHVybiAwOworfQorCisvKiB5eWxleF9kZXN0cm95
IGlzIGZvciBib3RoIHJlZW50cmFudCBhbmQgbm9uLXJlZW50cmFudCBzY2FubmVycy4gKi8KK2lu
dCB5eWxleF9kZXN0cm95ICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworICAgIC8qIFBvcCB0
aGUgYnVmZmVyIHN0YWNrLCBkZXN0cm95aW5nIGVhY2ggZWxlbWVudC4gKi8KKwl3aGlsZShZWV9D
VVJSRU5UX0JVRkZFUil7CisJCXl5X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5
c2Nhbm5lciApOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOworCQl5eXBvcF9i
dWZmZXJfc3RhdGUoeXlzY2FubmVyKTsKKwl9CisKKwkvKiBEZXN0cm95IHRoZSBzdGFjayBpdHNl
bGYuICovCisJeXlmcmVlKHl5Zy0+eXlfYnVmZmVyX3N0YWNrICx5eXNjYW5uZXIpOworCXl5Zy0+
eXlfYnVmZmVyX3N0YWNrID0gTlVMTDsKKworICAgIC8qIERlc3Ryb3kgdGhlIHN0YXJ0IGNvbmRp
dGlvbiBzdGFjay4gKi8KKyAgICAgICAgeXlmcmVlKHl5Zy0+eXlfc3RhcnRfc3RhY2sgLHl5c2Nh
bm5lciApOworICAgICAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gTlVMTDsKKworICAgIC8qIFJl
c2V0IHRoZSBnbG9iYWxzLiBUaGlzIGlzIGltcG9ydGFudCBpbiBhIG5vbi1yZWVudHJhbnQgc2Nh
bm5lciBzbyB0aGUgbmV4dCB0aW1lCisgICAgICogeXlsZXgoKSBpcyBjYWxsZWQsIGluaXRpYWxp
emF0aW9uIHdpbGwgb2NjdXIuICovCisgICAgeXlfaW5pdF9nbG9iYWxzKCB5eXNjYW5uZXIpOwor
CisgICAgLyogRGVzdHJveSB0aGUgbWFpbiBzdHJ1Y3QgKHJlZW50cmFudCBvbmx5KS4gKi8KKyAg
ICB5eWZyZWUgKCB5eXNjYW5uZXIgLCB5eXNjYW5uZXIgKTsKKyAgICB5eXNjYW5uZXIgPSBOVUxM
OworICAgIHJldHVybiAwOworfQorCisvKgorICogSW50ZXJuYWwgdXRpbGl0eSByb3V0aW5lcy4K
KyAqLworCisjaWZuZGVmIHl5dGV4dF9wdHIKK3N0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAo
Y2hhciogczEsIHl5Y29uc3QgY2hhciAqIHMyLCBpbnQgbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikK
K3sKKwlyZWdpc3RlciBpbnQgaTsKKwlmb3IgKCBpID0gMDsgaSA8IG47ICsraSApCisJCXMxW2ld
ID0gczJbaV07Cit9CisjZW5kaWYKKworI2lmZGVmIFlZX05FRURfU1RSTEVOCitzdGF0aWMgaW50
IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiBzICwgeXlzY2FuX3QgeXlzY2FubmVyKQor
eworCXJlZ2lzdGVyIGludCBuOworCWZvciAoIG4gPSAwOyBzW25dOyArK24gKQorCQk7CisKKwly
ZXR1cm4gbjsKK30KKyNlbmRpZgorCit2b2lkICp5eWFsbG9jICh5eV9zaXplX3QgIHNpemUgLCB5
eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJcmV0dXJuICh2b2lkICopIG1hbGxvYyggc2l6ZSApOwor
fQorCit2b2lkICp5eXJlYWxsb2MgICh2b2lkICogcHRyLCB5eV9zaXplX3QgIHNpemUgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCit7CisJLyogVGhlIGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZvbGxv
d2luZyBhY2NvbW1vZGF0ZXMgYm90aAorCSAqIGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBjaGFy
KiBnZW5lcmljIHBvaW50ZXJzLCBhbmQgdGhvc2UKKwkgKiB0aGF0IHVzZSB2b2lkKiBnZW5lcmlj
IHBvaW50ZXJzLiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVyCisJICogYmVjYXVzZSBib3RoIEFO
U0kgQyBhbmQgQysrIGFsbG93IGNhc3RsZXNzIGFzc2lnbm1lbnQgZnJvbQorCSAqIGFueSBwb2lu
dGVyIHR5cGUgdG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1lbnQgY29udmVyc2lvbnMKKwkg
KiBhcyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KKwkgKi8KKwlyZXR1cm4gKHZvaWQgKikg
cmVhbGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7Cit9CisKK3ZvaWQgeXlmcmVlICh2b2lkICog
cHRyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCWZyZWUoIChjaGFyICopIHB0ciApOwkvKiBz
ZWUgeXlyZWFsbG9jKCkgZm9yIChjaGFyICopIGNhc3QgKi8KK30KKworI2RlZmluZSBZWVRBQkxF
U19OQU1FICJ5eXRhYmxlcyIKKworI2lmIGRlZmluZWQoX19jbGFuZ19fKQorI3ByYWdtYSBjbGFu
ZyBkaWFnbm9zdGljIHBvcAorI2VuZGlmCisKK3l5X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciog
YnVmLCB5eV9zaXplX3QgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikgeworICAgIHBwOjpU
b2tlbiB0b2tlbjsKKyAgICB5eWdldF9leHRyYSh5eXNjYW5uZXIpLT5wcmVwcm9jZXNzb3IubGV4
KCZ0b2tlbik7CisgICAgeXlfc2l6ZV90IGxlbiA9IHRva2VuLnR5cGUgPT0gcHA6OlRva2VuOjpM
QVNUID8gMCA6IHRva2VuLnRleHQuc2l6ZSgpOworICAgIGlmIChsZW4gPCBtYXhfc2l6ZSkKKyAg
ICAgICAgbWVtY3B5KGJ1ZiwgdG9rZW4udGV4dC5jX3N0cigpLCBsZW4pOworICAgIHl5c2V0X2Nv
bHVtbih0b2tlbi5sb2NhdGlvbi5maWxlLHl5c2Nhbm5lcik7CisgICAgeXlzZXRfbGluZW5vKHRv
a2VuLmxvY2F0aW9uLmxpbmUseXlzY2FubmVyKTsKKworICAgIGlmIChsZW4gPj0gbWF4X3NpemUp
CisgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCJJbnB1dCBidWZmZXIgb3ZlcmZsb3ciKTsKKyAgICBl
bHNlIGlmIChsZW4gPiAwKQorICAgICAgICBidWZbbGVuKytdID0gJyAnOworICAgIHJldHVybiBs
ZW47Cit9CisKK2ludCBjaGVja190eXBlKHl5c2Nhbl90IHl5c2Nhbm5lcikgeworICAgIHN0cnVj
dCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIHl5c2Nhbm5lcjsKKyAgICAKKyAg
ICBpbnQgdG9rZW4gPSBJREVOVElGSUVSOworICAgIFRTeW1ib2wqIHN5bWJvbCA9IHl5ZXh0cmEt
PnN5bWJvbFRhYmxlLmZpbmQoeXl0ZXh0KTsKKyAgICBpZiAoc3ltYm9sICYmIHN5bWJvbC0+aXNW
YXJpYWJsZSgpKSB7CisgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxU
VmFyaWFibGUqPihzeW1ib2wpOworICAgICAgICBpZiAodmFyaWFibGUtPmlzVXNlclR5cGUoKSkK
KyAgICAgICAgICAgIHRva2VuID0gVFlQRV9OQU1FOworICAgIH0KKyAgICB5eWx2YWwtPmxleC5z
eW1ib2wgPSBzeW1ib2w7CisgICAgcmV0dXJuIHRva2VuOworfQorCitpbnQgcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5fdCB5eXNjYW5uZXIpIHsKKyAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKSB5eXNjYW5uZXI7CisKKyAgICB5eWV4dHJhLT5lcnJvcigqeXlsbG9jLCAi
SWxsZWdhbCB1c2Ugb2YgcmVzZXJ2ZWQgd29yZCIsIHl5dGV4dCwgIiIpOworICAgIHl5ZXh0cmEt
PnJlY292ZXIoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCB5eWVycm9yKFlZTFRZUEUqIGxs
b2MsIFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikgeworICAgIGNv
bnRleHQtPmVycm9yKCpsbG9jLCByZWFzb24sIHl5Z2V0X3RleHQoY29udGV4dC0+c2Nhbm5lcikp
OworICAgIGNvbnRleHQtPnJlY292ZXIoKTsKK30KKworaW50IGludF9jb25zdGFudCh5eXNjYW5f
dCB5eXNjYW5uZXIpIHsKKyAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKSB5eXNjYW5uZXI7CisKKyAgICBpZiAoIWF0b2lfY2xhbXAoeXl0ZXh0LCAmKHl5bHZhbC0+
bGV4LmkpKSkKKyAgICAgICAgeXlleHRyYS0+d2FybmluZygqeXlsbG9jLCAiSW50ZWdlciBvdmVy
ZmxvdyIsIHl5dGV4dCwgIiIpOworICAgIHJldHVybiBJTlRDT05TVEFOVDsKK30KKworaW50IGZs
b2F0X2NvbnN0YW50KHl5c2Nhbl90IHl5c2Nhbm5lcikgeworICAgIHN0cnVjdCB5eWd1dHNfdCog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIHl5c2Nhbm5lcjsKKworICAgIGlmICghYXRvZl9jbGFt
cCh5eXRleHQsICYoeXlsdmFsLT5sZXguZikpKQorICAgICAgICB5eWV4dHJhLT53YXJuaW5nKCp5
eWxsb2MsICJGbG9hdCBvdmVyZmxvdyIsIHl5dGV4dCwgIiIpOworICAgIHJldHVybiBGTE9BVENP
TlNUQU5UOworfQorCitpbnQgZ2xzbGFuZ19pbml0aWFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRl
eHQpIHsKKyAgICB5eXNjYW5fdCBzY2FubmVyID0gTlVMTDsKKyAgICBpZiAoeXlsZXhfaW5pdF9l
eHRyYShjb250ZXh0LCZzY2FubmVyKSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBjb250ZXh0
LT5zY2FubmVyID0gc2Nhbm5lcjsKKyAgICByZXR1cm4gMDsKK30KKworaW50IGdsc2xhbmdfZmlu
YWxpemUoVFBhcnNlQ29udGV4dCogY29udGV4dCkgeworICAgIHl5c2Nhbl90IHNjYW5uZXIgPSBj
b250ZXh0LT5zY2FubmVyOworICAgIGlmIChzY2FubmVyID09IE5VTEwpIHJldHVybiAwOworICAg
IAorICAgIGNvbnRleHQtPnNjYW5uZXIgPSBOVUxMOworICAgIHl5bGV4X2Rlc3Ryb3koc2Nhbm5l
cik7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IGdsc2xhbmdfc2NhbihzaXplX3QgY291bnQs
IGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAg
ICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKKyAgICB5eXJlc3RhcnQoTlVMTCxj
b250ZXh0LT5zY2FubmVyKTsKKyAgICB5eXNldF9jb2x1bW4oMCxjb250ZXh0LT5zY2FubmVyKTsK
KyAgICB5eXNldF9saW5lbm8oMSxjb250ZXh0LT5zY2FubmVyKTsKKworICAgIC8vIEluaXRpYWxp
emUgcHJlcHJvY2Vzc29yLgorICAgIGlmICghY29udGV4dC0+cHJlcHJvY2Vzc29yLmluaXQoY291
bnQsIHN0cmluZywgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY29udGV4dC0+cHJl
cHJvY2Vzc29yLnNldE1heFRva2VuTGVuZ3RoKFNIX01BWF9UT0tFTl9MRU5HVEgpOworCisgICAg
Ly8gRGVmaW5lIGV4dGVuc2lvbiBtYWNyb3MuCisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9y
JiBleHRCZWhhdmlvciA9IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgZm9yIChU
RXh0ZW5zaW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRCZWhhdmlvci5iZWdp
bigpOworICAgICAgICAgaXRlciAhPSBleHRCZWhhdmlvci5lbmQoKTsgKytpdGVyKSB7CisgICAg
ICAgIGNvbnRleHQtPnByZXByb2Nlc3Nvci5wcmVkZWZpbmVNYWNybyhpdGVyLT5maXJzdC5jX3N0
cigpLCAxKTsKKyAgICB9CisgICAgaWYgKGNvbnRleHQtPmZyYWdtZW50UHJlY2lzaW9uSGlnaCkK
KyAgICAgICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnByZWRlZmluZU1hY3JvKCJHTF9GUkFHTUVO
VF9QUkVDSVNJT05fSElHSCIsIDEpOworCisgICAgcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdf
dGFiLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L2dsc2xhbmdfdGFiLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZmFmNjJhNDViMGFmMjk1ZTNkZDFmYTEyMGNm
ZTU2ZjI5YTY5N2FmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuY3BwCkBAIC0wLDAgKzEsNDg4NCBA
QAorLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuNy4xLiAgKi8KKworLyog
QXBwbGUgTm90ZTogRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIEFwcGxlIGVsZWN0cyB0byBk
aXN0cmlidXRlIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEJTRCBsaWNlbnNlLiAq
LworCisvKiBCaXNvbiBpbXBsZW1lbnRhdGlvbiBmb3IgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwor
ICAgCisgICAgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDEzIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBz
b2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMg
b2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICAgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcg
d2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu
c2VzLz4uICAqLworCisvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBh
IGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKKyAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBw
YXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCisgICB1bmRlciB0ZXJtcyBv
ZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGEKKyAgIHBh
cnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0
aGVyZW9mCisgICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFsdGVybmF0aXZlbHksIGlmIHlvdSBt
b2RpZnkgb3IgcmVkaXN0cmlidXRlCisgICB0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91
IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCisgICBzcGVjaWFsIGV4Y2VwdGlvbiwg
d2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKKyAgIEJpc29u
IG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGlj
CisgICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KKyAgIAorICAgVGhp
cyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiBpbgorICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLworCisvKiBDIExBTFIoMSkgcGFy
c2VyIHNrZWxldG9uIHdyaXR0ZW4gYnkgUmljaGFyZCBTdGFsbG1hbiwgYnkKKyAgIHNpbXBsaWZ5
aW5nIHRoZSBvcmlnaW5hbCBzby1jYWxsZWQgInNlbWFudGljIiBwYXJzZXIuICAqLworCisvKiBB
bGwgc3ltYm9scyBkZWZpbmVkIGJlbG93IHNob3VsZCBiZWdpbiB3aXRoIHl5IG9yIFlZLCB0byBh
dm9pZAorICAgaW5mcmluZ2luZyBvbiB1c2VyIG5hbWUgc3BhY2UuICBUaGlzIHNob3VsZCBiZSBk
b25lIGV2ZW4gZm9yIGxvY2FsCisgICB2YXJpYWJsZXMsIGFzIHRoZXkgbWlnaHQgb3RoZXJ3aXNl
IGJlIGV4cGFuZGVkIGJ5IHVzZXIgbWFjcm9zLgorICAgVGhlcmUgYXJlIHNvbWUgdW5hdm9pZGFi
bGUgZXhjZXB0aW9ucyB3aXRoaW4gaW5jbHVkZSBmaWxlcyB0bworICAgZGVmaW5lIG5lY2Vzc2Fy
eSBsaWJyYXJ5IHN5bWJvbHM7IHRoZXkgYXJlIG5vdGVkICJJTkZSSU5HRVMgT04KKyAgIFVTRVIg
TkFNRSBTUEFDRSIgYmVsb3cuICAqLworCisvKiBJZGVudGlmeSBCaXNvbiBvdXRwdXQuICAqLwor
I2RlZmluZSBZWUJJU09OIDEKKworLyogQmlzb24gdmVyc2lvbi4gICovCisjZGVmaW5lIFlZQklT
T05fVkVSU0lPTiAiMi43LjEiCisKKy8qIFNrZWxldG9uIG5hbWUuICAqLworI2RlZmluZSBZWVNL
RUxFVE9OX05BTUUgInlhY2MuYyIKKworLyogUHVyZSBwYXJzZXJzLiAgKi8KKyNkZWZpbmUgWVlQ
VVJFIDEKKworLyogUHVzaCBwYXJzZXJzLiAgKi8KKyNkZWZpbmUgWVlQVVNIIDAKKworLyogUHVs
bCBwYXJzZXJzLiAgKi8KKyNkZWZpbmUgWVlQVUxMIDEKKworCisKKworLyogQ29weSB0aGUgZmly
c3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCisKKworLy8KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4g
RE8gTk9UIEVESVQhCisKKy8vIElnbm9yZSBlcnJvcnMgaW4gYXV0by1nZW5lcmF0ZWQgY29kZS4K
KyNpZiBkZWZpbmVkKF9fR05VQ19fKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICIt
V3VudXNlZC1mdW5jdGlvbiIKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVz
ZWQtdmFyaWFibGUiCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc3dpdGNoLWVu
dW0iCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQw
NjUpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDE4OSkKKyNwcmFnbWEgd2FybmluZyhkaXNh
YmxlOiA0NTA1KQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEpCisjZW5kaWYKKworI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5oIgorI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVy
TGFuZy5oIgorCisjZGVmaW5lIFlZRU5BQkxFX05MUyAwCisKKyNkZWZpbmUgWVlMRVhfUEFSQU0g
Y29udGV4dC0+c2Nhbm5lcgorCisKKworIyBpZm5kZWYgWVlfTlVMTAorIyAgaWYgZGVmaW5lZCBf
X2NwbHVzcGx1cyAmJiAyMDExMDNMIDw9IF9fY3BsdXNwbHVzCisjICAgZGVmaW5lIFlZX05VTEwg
bnVsbHB0cgorIyAgZWxzZQorIyAgIGRlZmluZSBZWV9OVUxMIDAKKyMgIGVuZGlmCisjIGVuZGlm
CisKKy8qIEVuYWJsaW5nIHZlcmJvc2UgZXJyb3IgbWVzc2FnZXMuICAqLworI2lmZGVmIFlZRVJS
T1JfVkVSQk9TRQorIyB1bmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyMgZGVmaW5lIFlZRVJST1JfVkVS
Qk9TRSAxCisjZWxzZQorIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDAKKyNlbmRpZgorCisvKiBJ
biBhIGZ1dHVyZSByZWxlYXNlIG9mIEJpc29uLCB0aGlzIHNlY3Rpb24gd2lsbCBiZSByZXBsYWNl
ZAorICAgYnkgI2luY2x1ZGUgImdsc2xhbmdfdGFiLmgiLiAgKi8KKyNpZm5kZWYgWVlfWVlfR0xT
TEFOR19UQUJfSF9JTkNMVURFRAorIyBkZWZpbmUgWVlfWVlfR0xTTEFOR19UQUJfSF9JTkNMVURF
RAorLyogRW5hYmxpbmcgdHJhY2VzLiAgKi8KKyNpZm5kZWYgWVlERUJVRworIyBkZWZpbmUgWVlE
RUJVRyAwCisjZW5kaWYKKyNpZiBZWURFQlVHCitleHRlcm4gaW50IHl5ZGVidWc7CisjZW5kaWYK
Ky8qICIlY29kZSByZXF1aXJlcyIgYmxvY2tzLiAgKi8KKworCisjZGVmaW5lIFlZTFRZUEUgVFNv
dXJjZUxvYworI2RlZmluZSBZWUxUWVBFX0lTX0RFQ0xBUkVEIDEKKyNkZWZpbmUgU0hfTUFYX1RP
S0VOX0xFTkdUSCAyNTYgIC8vIFdlYkdMIHNwZWMuCisKKworCisKKy8qIFRva2Vucy4gICovCisj
aWZuZGVmIFlZVE9LRU5UWVBFCisjIGRlZmluZSBZWVRPS0VOVFlQRQorICAgLyogUHV0IHRoZSB0
b2tlbnMgaW50byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdEQiBhbmQgb3RoZXIgZGVidWdn
ZXJzCisgICAgICBrbm93IGFib3V0IHRoZW0uICAqLworICAgZW51bSB5eXRva2VudHlwZSB7Cisg
ICAgIElOVkFSSUFOVCA9IDI1OCwKKyAgICAgSElHSF9QUkVDSVNJT04gPSAyNTksCisgICAgIE1F
RElVTV9QUkVDSVNJT04gPSAyNjAsCisgICAgIExPV19QUkVDSVNJT04gPSAyNjEsCisgICAgIFBS
RUNJU0lPTiA9IDI2MiwKKyAgICAgQVRUUklCVVRFID0gMjYzLAorICAgICBDT05TVF9RVUFMID0g
MjY0LAorICAgICBCT09MX1RZUEUgPSAyNjUsCisgICAgIEZMT0FUX1RZUEUgPSAyNjYsCisgICAg
IElOVF9UWVBFID0gMjY3LAorICAgICBCUkVBSyA9IDI2OCwKKyAgICAgQ09OVElOVUUgPSAyNjks
CisgICAgIERPID0gMjcwLAorICAgICBFTFNFID0gMjcxLAorICAgICBGT1IgPSAyNzIsCisgICAg
IElGID0gMjczLAorICAgICBESVNDQVJEID0gMjc0LAorICAgICBSRVRVUk4gPSAyNzUsCisgICAg
IEJWRUMyID0gMjc2LAorICAgICBCVkVDMyA9IDI3NywKKyAgICAgQlZFQzQgPSAyNzgsCisgICAg
IElWRUMyID0gMjc5LAorICAgICBJVkVDMyA9IDI4MCwKKyAgICAgSVZFQzQgPSAyODEsCisgICAg
IFZFQzIgPSAyODIsCisgICAgIFZFQzMgPSAyODMsCisgICAgIFZFQzQgPSAyODQsCisgICAgIE1B
VFJJWDIgPSAyODUsCisgICAgIE1BVFJJWDMgPSAyODYsCisgICAgIE1BVFJJWDQgPSAyODcsCisg
ICAgIElOX1FVQUwgPSAyODgsCisgICAgIE9VVF9RVUFMID0gMjg5LAorICAgICBJTk9VVF9RVUFM
ID0gMjkwLAorICAgICBVTklGT1JNID0gMjkxLAorICAgICBWQVJZSU5HID0gMjkyLAorICAgICBT
VFJVQ1QgPSAyOTMsCisgICAgIFZPSURfVFlQRSA9IDI5NCwKKyAgICAgV0hJTEUgPSAyOTUsCisg
ICAgIFNBTVBMRVIyRCA9IDI5NiwKKyAgICAgU0FNUExFUkNVQkUgPSAyOTcsCisgICAgIFNBTVBM
RVJfRVhURVJOQUxfT0VTID0gMjk4LAorICAgICBTQU1QTEVSMkRSRUNUID0gMjk5LAorICAgICBJ
REVOVElGSUVSID0gMzAwLAorICAgICBUWVBFX05BTUUgPSAzMDEsCisgICAgIEZMT0FUQ09OU1RB
TlQgPSAzMDIsCisgICAgIElOVENPTlNUQU5UID0gMzAzLAorICAgICBCT09MQ09OU1RBTlQgPSAz
MDQsCisgICAgIExFRlRfT1AgPSAzMDUsCisgICAgIFJJR0hUX09QID0gMzA2LAorICAgICBJTkNf
T1AgPSAzMDcsCisgICAgIERFQ19PUCA9IDMwOCwKKyAgICAgTEVfT1AgPSAzMDksCisgICAgIEdF
X09QID0gMzEwLAorICAgICBFUV9PUCA9IDMxMSwKKyAgICAgTkVfT1AgPSAzMTIsCisgICAgIEFO
RF9PUCA9IDMxMywKKyAgICAgT1JfT1AgPSAzMTQsCisgICAgIFhPUl9PUCA9IDMxNSwKKyAgICAg
TVVMX0FTU0lHTiA9IDMxNiwKKyAgICAgRElWX0FTU0lHTiA9IDMxNywKKyAgICAgQUREX0FTU0lH
TiA9IDMxOCwKKyAgICAgTU9EX0FTU0lHTiA9IDMxOSwKKyAgICAgTEVGVF9BU1NJR04gPSAzMjAs
CisgICAgIFJJR0hUX0FTU0lHTiA9IDMyMSwKKyAgICAgQU5EX0FTU0lHTiA9IDMyMiwKKyAgICAg
WE9SX0FTU0lHTiA9IDMyMywKKyAgICAgT1JfQVNTSUdOID0gMzI0LAorICAgICBTVUJfQVNTSUdO
ID0gMzI1LAorICAgICBMRUZUX1BBUkVOID0gMzI2LAorICAgICBSSUdIVF9QQVJFTiA9IDMyNywK
KyAgICAgTEVGVF9CUkFDS0VUID0gMzI4LAorICAgICBSSUdIVF9CUkFDS0VUID0gMzI5LAorICAg
ICBMRUZUX0JSQUNFID0gMzMwLAorICAgICBSSUdIVF9CUkFDRSA9IDMzMSwKKyAgICAgRE9UID0g
MzMyLAorICAgICBDT01NQSA9IDMzMywKKyAgICAgQ09MT04gPSAzMzQsCisgICAgIEVRVUFMID0g
MzM1LAorICAgICBTRU1JQ09MT04gPSAzMzYsCisgICAgIEJBTkcgPSAzMzcsCisgICAgIERBU0gg
PSAzMzgsCisgICAgIFRJTERFID0gMzM5LAorICAgICBQTFVTID0gMzQwLAorICAgICBTVEFSID0g
MzQxLAorICAgICBTTEFTSCA9IDM0MiwKKyAgICAgUEVSQ0VOVCA9IDM0MywKKyAgICAgTEVGVF9B
TkdMRSA9IDM0NCwKKyAgICAgUklHSFRfQU5HTEUgPSAzNDUsCisgICAgIFZFUlRJQ0FMX0JBUiA9
IDM0NiwKKyAgICAgQ0FSRVQgPSAzNDcsCisgICAgIEFNUEVSU0FORCA9IDM0OCwKKyAgICAgUVVF
U1RJT04gPSAzNDkKKyAgIH07CisjZW5kaWYKKworCisjaWYgISBkZWZpbmVkIFlZU1RZUEUgJiYg
ISBkZWZpbmVkIFlZU1RZUEVfSVNfREVDTEFSRUQKK3R5cGVkZWYgdW5pb24gWVlTVFlQRQorewor
CisKKyAgICBzdHJ1Y3QgeworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBUU3RyaW5nICpz
dHJpbmc7CisgICAgICAgICAgICBmbG9hdCBmOworICAgICAgICAgICAgaW50IGk7CisgICAgICAg
ICAgICBib29sIGI7CisgICAgICAgIH07CisgICAgICAgIFRTeW1ib2wqIHN5bWJvbDsKKyAgICB9
IGxleDsKKyAgICBzdHJ1Y3QgeworICAgICAgICBUT3BlcmF0b3Igb3A7CisgICAgICAgIHVuaW9u
IHsKKyAgICAgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOworICAgICAgICAgICAgVElu
dGVybU5vZGVQYWlyIG5vZGVQYWlyOworICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbnRlcm1U
eXBlZE5vZGU7CisgICAgICAgICAgICBUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGU7
CisgICAgICAgIH07CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFRQdWJsaWNUeXBlIHR5
cGU7CisgICAgICAgICAgICBUUHJlY2lzaW9uIHByZWNpc2lvbjsKKyAgICAgICAgICAgIFRRdWFs
aWZpZXIgcXVhbGlmaWVyOworICAgICAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlvbjsKKyAgICAg
ICAgICAgIFRQYXJhbWV0ZXIgcGFyYW07CisgICAgICAgICAgICBURmllbGQqIGZpZWxkOworICAg
ICAgICAgICAgVEZpZWxkTGlzdCogZmllbGRMaXN0OworICAgICAgICB9OworICAgIH0gaW50ZXJt
OworCisKKworfSBZWVNUWVBFOworIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKKyMgZGVm
aW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8K
KyMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQorI2VuZGlmCisKKyNpZiAhIGRlZmluZWQg
WVlMVFlQRSAmJiAhIGRlZmluZWQgWVlMVFlQRV9JU19ERUNMQVJFRAordHlwZWRlZiBzdHJ1Y3Qg
WVlMVFlQRQoreworICBpbnQgZmlyc3RfbGluZTsKKyAgaW50IGZpcnN0X2NvbHVtbjsKKyAgaW50
IGxhc3RfbGluZTsKKyAgaW50IGxhc3RfY29sdW1uOworfSBZWUxUWVBFOworIyBkZWZpbmUgeXls
dHlwZSBZWUxUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLworIyBkZWZp
bmUgWVlMVFlQRV9JU19ERUNMQVJFRCAxCisjIGRlZmluZSBZWUxUWVBFX0lTX1RSSVZJQUwgMQor
I2VuZGlmCisKKworI2lmZGVmIFlZUEFSU0VfUEFSQU0KKyNpZiBkZWZpbmVkIF9fU1REQ19fIHx8
IGRlZmluZWQgX19jcGx1c3BsdXMKK2ludCB5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKTsK
KyNlbHNlCitpbnQgeXlwYXJzZSAoKTsKKyNlbmRpZgorI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFN
ICovCisjaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCitpbnQgeXlw
YXJzZSAoVFBhcnNlQ29udGV4dCogY29udGV4dCk7CisjZWxzZQoraW50IHl5cGFyc2UgKCk7Cisj
ZW5kaWYKKyNlbmRpZiAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KKworI2VuZGlmIC8qICFZWV9ZWV9H
TFNMQU5HX1RBQl9IX0lOQ0xVREVEICAqLworCisvKiBDb3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1
c2VyIGRlY2xhcmF0aW9ucy4gICovCisKKworZXh0ZXJuIGludCB5eWxleChZWVNUWVBFKiB5eWx2
YWwsIFlZTFRZUEUqIHl5bGxvYywgdm9pZCogeXlzY2FubmVyKTsKK2V4dGVybiB2b2lkIHl5ZXJy
b3IoWVlMVFlQRSogeXlsbG9jLCBUUGFyc2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiBy
ZWFzb24pOworCisjZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJocywgTikgICAgICAg
ICAgICAgICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmIChZWUlEKE4pKSB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChDdXJyZW50KS5maXJzdF9m
aWxlID0gWVlSSFNMT0MoUmhzLCAxKS5maXJzdF9maWxlOyAgXAorICAgICAgICAoQ3VycmVudCku
Zmlyc3RfbGluZSA9IFlZUkhTTE9DKFJocywgMSkuZmlyc3RfbGluZTsgIFwKKyAgICAgICAgKEN1
cnJlbnQpLmxhc3RfZmlsZSA9IFlZUkhTTE9DKFJocywgTikubGFzdF9maWxlOyAgICBcCisgICAg
ICAgIChDdXJyZW50KS5sYXN0X2xpbmUgPSBZWVJIU0xPQyhSaHMsIE4pLmxhc3RfbGluZTsgICAg
XAorICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgIChDdXJyZW50KS5maXJzdF9maWxlID0gWVlSSFNMT0Mo
UmhzLCAwKS5sYXN0X2ZpbGU7ICAgXAorICAgICAgICAoQ3VycmVudCkuZmlyc3RfbGluZSA9IFlZ
UkhTTE9DKFJocywgMCkubGFzdF9saW5lOyAgIFwKKyAgICAgICAgKEN1cnJlbnQpLmxhc3RfZmls
ZSA9IFlZUkhTTE9DKFJocywgMCkubGFzdF9maWxlOyAgICBcCisgICAgICAgIChDdXJyZW50KS5s
YXN0X2xpbmUgPSBZWVJIU0xPQyhSaHMsIDApLmxhc3RfbGluZTsgICAgXAorICAgICAgfSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSB3
aGlsZSAoMCkKKworI2RlZmluZSBWRVJURVhfT05MWShTLCBMKSB7ICBcCisgICAgaWYgKGNvbnRl
eHQtPnNoYWRlclR5cGUgIT0gU0hfVkVSVEVYX1NIQURFUikgeyAgXAorICAgICAgICBjb250ZXh0
LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXggc2hhZGVycyBvbmx5ICIsIFMpOyAgXAor
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCisgICAgfSAgXAorfQorCisjZGVmaW5lIEZS
QUdfT05MWShTLCBMKSB7ICBcCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgIT0gU0hfRlJB
R01FTlRfU0hBREVSKSB7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVk
IGluIGZyYWdtZW50IHNoYWRlcnMgb25seSAiLCBTKTsgIFwKKyAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOyAgXAorICAgIH0gIFwKK30KKworCisKKyNpZmRlZiBzaG9ydAorIyB1bmRlZiBzaG9y
dAorI2VuZGlmCisKKyNpZmRlZiBZWVRZUEVfVUlOVDgKK3R5cGVkZWYgWVlUWVBFX1VJTlQ4IHl5
dHlwZV91aW50ODsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgeXl0eXBlX3VpbnQ4Owor
I2VuZGlmCisKKyNpZmRlZiBZWVRZUEVfSU5UOAordHlwZWRlZiBZWVRZUEVfSU5UOCB5eXR5cGVf
aW50ODsKKyNlbGlmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBc
CisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3R5cGVk
ZWYgc2lnbmVkIGNoYXIgeXl0eXBlX2ludDg7CisjZWxzZQordHlwZWRlZiBzaG9ydCBpbnQgeXl0
eXBlX2ludDg7CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9VSU5UMTYKK3R5cGVkZWYgWVlUWVBF
X1VJTlQxNiB5eXR5cGVfdWludDE2OworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50
IHl5dHlwZV91aW50MTY7CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9JTlQxNgordHlwZWRlZiBZ
WVRZUEVfSU5UMTYgeXl0eXBlX2ludDE2OworI2Vsc2UKK3R5cGVkZWYgc2hvcnQgaW50IHl5dHlw
ZV9pbnQxNjsKKyNlbmRpZgorCisjaWZuZGVmIFlZU0laRV9UCisjIGlmZGVmIF9fU0laRV9UWVBF
X18KKyMgIGRlZmluZSBZWVNJWkVfVCBfX1NJWkVfVFlQRV9fCisjIGVsaWYgZGVmaW5lZCBzaXpl
X3QKKyMgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKKyMgZWxpZiAhIGRlZmluZWQgWVlTSVpFX1Qg
JiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwg
ZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorIyAgaW5jbHVkZSA8c3Rk
ZGVmLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgIGRlZmluZSBZWVNJ
WkVfVCBzaXplX3QKKyMgZWxzZQorIyAgZGVmaW5lIFlZU0laRV9UIHVuc2lnbmVkIGludAorIyBl
bmRpZgorI2VuZGlmCisKKyNkZWZpbmUgWVlTSVpFX01BWElNVU0gKChZWVNJWkVfVCkgLTEpCisK
KyNpZm5kZWYgWVlfCisjIGlmIGRlZmluZWQgWVlFTkFCTEVfTkxTICYmIFlZRU5BQkxFX05MUwor
IyAgaWYgRU5BQkxFX05MUworIyAgIGluY2x1ZGUgPGxpYmludGwuaD4gLyogSU5GUklOR0VTIE9O
IFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGRlZmluZSBZWV8oTXNnaWQpIGRnZXR0ZXh0ICgiYmlz
b24tcnVudGltZSIsIE1zZ2lkKQorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZuZGVmIFlZXworIyAg
ZGVmaW5lIFlZXyhNc2dpZCkgTXNnaWQKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIF9fYXR0
cmlidXRlX18KKy8qIFRoaXMgZmVhdHVyZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDIu
NSBhbmQgbGF0ZXIuICAqLworIyBpZiAoISBkZWZpbmVkIF9fR05VQ19fIHx8IF9fR05VQ19fIDwg
MiBcCisgICAgICB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDUpKQorIyAg
ZGVmaW5lIF9fYXR0cmlidXRlX18oU3BlYykgLyogZW1wdHkgKi8KKyMgZW5kaWYKKyNlbmRpZgor
CisvKiBTdXBwcmVzcyB1bnVzZWQtdmFyaWFibGUgd2FybmluZ3MgYnkgInVzaW5nIiBFLiAgKi8K
KyNpZiAhIGRlZmluZWQgbGludCB8fCBkZWZpbmVkIF9fR05VQ19fCisjIGRlZmluZSBZWVVTRShF
KSAoKHZvaWQpIChFKSkKKyNlbHNlCisjIGRlZmluZSBZWVVTRShFKSAvKiBlbXB0eSAqLworI2Vu
ZGlmCisKKworLyogSWRlbnRpdHkgZnVuY3Rpb24sIHVzZWQgdG8gc3VwcHJlc3Mgd2FybmluZ3Mg
YWJvdXQgY29uc3RhbnQgY29uZGl0aW9ucy4gICovCisjaWZuZGVmIGxpbnQKKyMgZGVmaW5lIFlZ
SUQoTikgKE4pCisjZWxzZQorI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlf
X0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZF
UikKK3N0YXRpYyBpbnQKK1lZSUQgKGludCB5eWkpCisjZWxzZQorc3RhdGljIGludAorWVlJRCAo
eXlpKQorICAgIGludCB5eWk7CisjZW5kaWYKK3sKKyAgcmV0dXJuIHl5aTsKK30KKyNlbmRpZgor
CisjaWYgISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFCisKKy8qIFRoZSBw
YXJzZXIgaW52b2tlcyBhbGxvY2Egb3IgbWFsbG9jOyBkZWZpbmUgdGhlIG5lY2Vzc2FyeSBzeW1i
b2xzLiAgKi8KKworIyBpZmRlZiBZWVNUQUNLX1VTRV9BTExPQ0EKKyMgIGlmIFlZU1RBQ0tfVVNF
X0FMTE9DQQorIyAgIGlmZGVmIF9fR05VQ19fCisjICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9f
YnVpbHRpbl9hbGxvY2EKKyMgICBlbGlmIGRlZmluZWQgX19CVUlMVElOX1ZBX0FSR19JTkNSCisj
ICAgIGluY2x1ZGUgPGFsbG9jYS5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICov
CisjICAgZWxpZiBkZWZpbmVkIF9BSVgKKyMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19hbGxv
Y2EKKyMgICBlbGlmIGRlZmluZWQgX01TQ19WRVIKKyMgICAgaW5jbHVkZSA8bWFsbG9jLmg+IC8q
IElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICAgZGVmaW5lIGFsbG9jYSBfYWxs
b2NhCisjICAgZWxzZQorIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBhbGxvY2EKKyMgICAgaWYg
ISBkZWZpbmVkIF9BTExPQ0FfSCAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTICYmIChkZWZpbmVk
IF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19j
cGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKKyMgICAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAv
KiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisgICAgICAvKiBVc2UgRVhJVF9TVUND
RVNTIGFzIGEgd2l0bmVzcyBmb3Igc3RkbGliLmguICAqLworIyAgICAgaWZuZGVmIEVYSVRfU1VD
Q0VTUworIyAgICAgIGRlZmluZSBFWElUX1NVQ0NFU1MgMAorIyAgICAgZW5kaWYKKyMgICAgZW5k
aWYKKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZmRlZiBZWVNUQUNLX0FMTE9D
CisgICAvKiBQYWNpZnkgR0NDJ3MgYGVtcHR5IGlmLWJvZHknIHdhcm5pbmcuICAqLworIyAgZGVm
aW5lIFlZU1RBQ0tfRlJFRShQdHIpIGRvIHsgLyogZW1wdHkgKi87IH0gd2hpbGUgKFlZSUQgKDAp
KQorIyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQorICAgIC8qIFRoZSBPUyBtaWdodCBn
dWFyYW50ZWUgb25seSBvbmUgZ3VhcmQgcGFnZSBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjaywK
KyAgICAgICBhbmQgYSBwYWdlIHNpemUgY2FuIGJlIGFzIHNtYWxsIGFzIDQwOTYgYnl0ZXMuICBT
byB3ZSBjYW5ub3Qgc2FmZWx5CisgICAgICAgaW52b2tlIGFsbG9jYSAoTikgaWYgTiBleGNlZWRz
IDQwOTYuICBVc2UgYSBzbGlnaHRseSBzbWFsbGVyIG51bWJlcgorICAgICAgIHRvIGFsbG93IGZv
ciBhIGZldyBjb21waWxlci1hbGxvY2F0ZWQgdGVtcG9yYXJ5IHN0YWNrIHNsb3RzLiAgKi8KKyMg
ICBkZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVNIDQwMzIgLyogcmVhc29uYWJsZSBjaXJjYSAy
MDA2ICovCisjICBlbmRpZgorIyBlbHNlCisjICBkZWZpbmUgWVlTVEFDS19BTExPQyBZWU1BTExP
QworIyAgZGVmaW5lIFlZU1RBQ0tfRlJFRSBZWUZSRUUKKyMgIGlmbmRlZiBZWVNUQUNLX0FMTE9D
X01BWElNVU0KKyMgICBkZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVNIFlZU0laRV9NQVhJTVVN
CisjICBlbmRpZgorIyAgaWYgKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgISBkZWZpbmVkIEVYSVRf
U1VDQ0VTUyBcCisgICAgICAgJiYgISAoKGRlZmluZWQgWVlNQUxMT0MgfHwgZGVmaW5lZCBtYWxs
b2MpIFwKKwkgICAgICYmIChkZWZpbmVkIFlZRlJFRSB8fCBkZWZpbmVkIGZyZWUpKSkKKyMgICBp
bmNsdWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAg
IGlmbmRlZiBFWElUX1NVQ0NFU1MKKyMgICAgZGVmaW5lIEVYSVRfU1VDQ0VTUyAwCisjICAgZW5k
aWYKKyMgIGVuZGlmCisjICBpZm5kZWYgWVlNQUxMT0MKKyMgICBkZWZpbmUgWVlNQUxMT0MgbWFs
bG9jCisjICAgaWYgISBkZWZpbmVkIG1hbGxvYyAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTICYm
IChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRl
ZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3ZvaWQgKm1hbGxvYyAoWVlT
SVpFX1QpOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZW5kaWYKKyMg
IGVuZGlmCisjICBpZm5kZWYgWVlGUkVFCisjICAgZGVmaW5lIFlZRlJFRSBmcmVlCisjICAgaWYg
ISBkZWZpbmVkIGZyZWUgJiYgISBkZWZpbmVkIEVYSVRfU1VDQ0VTUyAmJiAoZGVmaW5lZCBfX1NU
RENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNw
bHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCit2b2lkIGZyZWUgKHZvaWQgKik7IC8qIElORlJJTkdF
UyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgZW5kaWYKKyNl
bmRpZiAvKiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UgKi8KKworCisj
aWYgKCEgZGVmaW5lZCB5eW92ZXJmbG93IFwKKyAgICAgJiYgKCEgZGVmaW5lZCBfX2NwbHVzcGx1
cyBcCisJIHx8IChkZWZpbmVkIFlZTFRZUEVfSVNfVFJJVklBTCAmJiBZWUxUWVBFX0lTX1RSSVZJ
QUwgXAorCSAgICAgJiYgZGVmaW5lZCBZWVNUWVBFX0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9JU19U
UklWSUFMKSkpCisKKy8qIEEgdHlwZSB0aGF0IGlzIHByb3Blcmx5IGFsaWduZWQgZm9yIGFueSBz
dGFjayBtZW1iZXIuICAqLwordW5pb24geXlhbGxvYworeworICB5eXR5cGVfaW50MTYgeXlzc19h
bGxvYzsKKyAgWVlTVFlQRSB5eXZzX2FsbG9jOworICBZWUxUWVBFIHl5bHNfYWxsb2M7Cit9Owor
CisvKiBUaGUgc2l6ZSBvZiB0aGUgbWF4aW11bSBnYXAgYmV0d2VlbiBvbmUgYWxpZ25lZCBzdGFj
ayBhbmQgdGhlIG5leHQuICAqLworIyBkZWZpbmUgWVlTVEFDS19HQVBfTUFYSU1VTSAoc2l6ZW9m
ICh1bmlvbiB5eWFsbG9jKSAtIDEpCisKKy8qIFRoZSBzaXplIG9mIGFuIGFycmF5IGxhcmdlIHRv
IGVub3VnaCB0byBob2xkIGFsbCBzdGFja3MsIGVhY2ggd2l0aAorICAgTiBlbGVtZW50cy4gICov
CisjIGRlZmluZSBZWVNUQUNLX0JZVEVTKE4pIFwKKyAgICAgKChOKSAqIChzaXplb2YgKHl5dHlw
ZV9pbnQxNikgKyBzaXplb2YgKFlZU1RZUEUpICsgc2l6ZW9mIChZWUxUWVBFKSkgXAorICAgICAg
KyAyICogWVlTVEFDS19HQVBfTUFYSU1VTSkKKworIyBkZWZpbmUgWVlDT1BZX05FRURFRCAxCisK
Ky8qIFJlbG9jYXRlIFNUQUNLIGZyb20gaXRzIG9sZCBsb2NhdGlvbiB0byB0aGUgbmV3IG9uZS4g
IFRoZQorICAgbG9jYWwgdmFyaWFibGVzIFlZU0laRSBhbmQgWVlTVEFDS1NJWkUgZ2l2ZSB0aGUg
b2xkIGFuZCBuZXcgbnVtYmVyIG9mCisgICBlbGVtZW50cyBpbiB0aGUgc3RhY2ssIGFuZCBZWVBU
UiBnaXZlcyB0aGUgbmV3IGxvY2F0aW9uIG9mIHRoZQorICAgc3RhY2suICBBZHZhbmNlIFlZUFRS
IHRvIGEgcHJvcGVybHkgYWxpZ25lZCBsb2NhdGlvbiBmb3IgdGhlIG5leHQKKyAgIHN0YWNrLiAg
Ki8KKyMgZGVmaW5lIFlZU1RBQ0tfUkVMT0NBVEUoU3RhY2tfYWxsb2MsIFN0YWNrKQkJCQlcCisg
ICAgZG8JCQkJCQkJCQlcCisgICAgICB7CQkJCQkJCQkJXAorCVlZU0laRV9UIHl5bmV3Ynl0ZXM7
CQkJCQkJXAorCVlZQ09QWSAoJnl5cHRyLT5TdGFja19hbGxvYywgU3RhY2ssIHl5c2l6ZSk7CQkJ
XAorCVN0YWNrID0gJnl5cHRyLT5TdGFja19hbGxvYzsJCQkJCVwKKwl5eW5ld2J5dGVzID0geXlz
dGFja3NpemUgKiBzaXplb2YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJTVVNOyBcCisJeXlw
dHIgKz0geXluZXdieXRlcyAvIHNpemVvZiAoKnl5cHRyKTsJCQkJXAorICAgICAgfQkJCQkJCQkJ
CVwKKyAgICB3aGlsZSAoWVlJRCAoMCkpCisKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBZWUNPUFlf
TkVFREVEICYmIFlZQ09QWV9ORUVERUQKKy8qIENvcHkgQ09VTlQgb2JqZWN0cyBmcm9tIFNSQyB0
byBEU1QuICBUaGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkbworICAgbm90IG92ZXJsYXAuICAq
LworIyBpZm5kZWYgWVlDT1BZCisjICBpZiBkZWZpbmVkIF9fR05VQ19fICYmIDEgPCBfX0dOVUNf
XworIyAgIGRlZmluZSBZWUNPUFkoRHN0LCBTcmMsIENvdW50KSBcCisgICAgICBfX2J1aWx0aW5f
bWVtY3B5IChEc3QsIFNyYywgKENvdW50KSAqIHNpemVvZiAoKihTcmMpKSkKKyMgIGVsc2UKKyMg
ICBkZWZpbmUgWVlDT1BZKERzdCwgU3JjLCBDb3VudCkgICAgICAgICAgICAgIFwKKyAgICAgIGRv
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBZWVNJWkVfVCB5
eWk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBmb3IgKHl5aSA9IDA7IHl5
aSA8IChDb3VudCk7IHl5aSsrKSAgIFwKKyAgICAgICAgICAgIChEc3QpW3l5aV0gPSAoU3JjKVt5
eWldOyAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgIHdoaWxlIChZWUlEICgwKSkKKyMgIGVuZGlmCisjIGVuZGlmCisj
ZW5kaWYgLyogIVlZQ09QWV9ORUVERUQgKi8KKworLyogWVlGSU5BTCAtLSBTdGF0ZSBudW1iZXIg
b2YgdGhlIHRlcm1pbmF0aW9uIHN0YXRlLiAgKi8KKyNkZWZpbmUgWVlGSU5BTCAgNzQKKy8qIFlZ
TEFTVCAtLSBMYXN0IGluZGV4IGluIFlZVEFCTEUuICAqLworI2RlZmluZSBZWUxBU1QgICAxNDkw
CisKKy8qIFlZTlRPS0VOUyAtLSBOdW1iZXIgb2YgdGVybWluYWxzLiAgKi8KKyNkZWZpbmUgWVlO
VE9LRU5TICA5NQorLyogWVlOTlRTIC0tIE51bWJlciBvZiBub250ZXJtaW5hbHMuICAqLworI2Rl
ZmluZSBZWU5OVFMgIDg0CisvKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2YgcnVsZXMuICAqLworI2Rl
ZmluZSBZWU5SVUxFUyAgMjAyCisvKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2Ygc3RhdGVzLiAgKi8K
KyNkZWZpbmUgWVlOU1RBVEVTICAzMDcKKworLyogWVlUUkFOU0xBVEUoWVlMRVgpIC0tIEJpc29u
IHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCisjZGVmaW5lIFlZVU5E
RUZUT0sgIDIKKyNkZWZpbmUgWVlNQVhVVE9LICAgMzQ5CisKKyNkZWZpbmUgWVlUUkFOU0xBVEUo
WVlYKQkJCQkJCVwKKyAgKCh1bnNpZ25lZCBpbnQpIChZWVgpIDw9IFlZTUFYVVRPSyA/IHl5dHJh
bnNsYXRlW1lZWF0gOiBZWVVOREVGVE9LKQorCisvKiBZWVRSQU5TTEFURVtZWUxFWF0gLS0gQmlz
b24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KK3N0YXRpYyBjb25z
dCB5eXR5cGVfdWludDggeXl0cmFuc2xhdGVbXSA9Cit7CisgICAgICAgMCwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAor
ICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisg
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAg
ICAgMiwgICAgIDMsICAgICA0LAorICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5
LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsCisgICAgICAxNSwgICAgMTYsICAg
IDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwKKyAg
ICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwg
ICAgMzMsICAgIDM0LAorICAgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0
MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsCisgICAgICA0NSwgICAgNDYsICAgIDQ3LCAg
ICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwKKyAgICAgIDU1
LCAgICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMs
ICAgIDY0LAorICAgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAg
NzEsICAgIDcyLCAgICA3MywgICAgNzQsCisgICAgICA3NSwgICAgNzYsICAgIDc3LCAgICA3OCwg
ICAgNzksICAgIDgwLCAgICA4MSwgICAgODIsICAgIDgzLCAgICA4NCwKKyAgICAgIDg1LCAgICA4
NiwgICAgODcsICAgIDg4LCAgICA4OSwgICAgOTAsICAgIDkxLCAgICA5MiwgICAgOTMsICAgIDk0
Cit9OworCisjaWYgWVlERUJVRworLyogWVlQUkhTW1lZTl0gLS0gSW5kZXggb2YgdGhlIGZpcnN0
IFJIUyBzeW1ib2wgb2YgcnVsZSBudW1iZXIgWVlOIGluCisgICBZWVJIUy4gICovCitzdGF0aWMg
Y29uc3QgeXl0eXBlX3VpbnQxNiB5eXByaHNbXSA9Cit7CisgICAgICAgMCwgICAgIDAsICAgICAz
LCAgICAgNSwgICAgIDcsICAgICA5LCAgICAxMSwgICAgMTMsICAgIDE1LCAgICAxNywKKyAgICAg
IDIxLCAgICAyMywgICAgMjgsICAgIDMwLCAgICAzNCwgICAgMzcsICAgIDQwLCAgICA0MiwgICAg
NDQsICAgIDQ2LAorICAgICAgNTAsICAgIDUzLCAgICA1NiwgICAgNTksICAgIDYxLCAgICA2NCwg
ICAgNjgsICAgIDcxLCAgICA3MywgICAgNzUsCisgICAgICA3NywgICAgODAsICAgIDgzLCAgICA4
NiwgICAgODgsICAgIDkwLCAgICA5MiwgICAgOTQsICAgIDk4LCAgIDEwMiwKKyAgICAgMTA0LCAg
IDEwOCwgICAxMTIsICAgMTE0LCAgIDExNiwgICAxMjAsICAgMTI0LCAgIDEyOCwgICAxMzIsICAg
MTM0LAorICAgICAxMzgsICAgMTQyLCAgIDE0NCwgICAxNDYsICAgMTQ4LCAgIDE1MCwgICAxNTQs
ICAgMTU2LCAgIDE2MCwgICAxNjIsCisgICAgIDE2NiwgICAxNjgsICAgMTc0LCAgIDE3NiwgICAx
ODAsICAgMTgyLCAgIDE4NCwgICAxODYsICAgMTg4LCAgIDE5MCwKKyAgICAgMTkyLCAgIDE5Niwg
ICAxOTgsICAgMjAxLCAgIDIwNCwgICAyMDksICAgMjEyLCAgIDIxNCwgICAyMTYsICAgMjE5LAor
ICAgICAyMjMsICAgMjI3LCAgIDIzMCwgICAyMzYsICAgMjQwLCAgIDI0MywgICAyNDcsICAgMjUw
LCAgIDI1MSwgICAyNTMsCisgICAgIDI1NSwgICAyNTcsICAgMjU5LCAgIDI2MSwgICAyNjUsICAg
MjcxLCAgIDI3OCwgICAyODQsICAgMjg2LCAgIDI4OSwKKyAgICAgMjk0LCAgIDMwMCwgICAzMDUs
ICAgMzA4LCAgIDMxMCwgICAzMTMsICAgMzE1LCAgIDMxNywgICAzMTksICAgMzIyLAorICAgICAz
MjQsICAgMzI2LCAgIDMyOSwgICAzMzEsICAgMzMzLCAgIDMzNSwgICAzMzcsICAgMzQyLCAgIDM0
NCwgICAzNDYsCisgICAgIDM0OCwgICAzNTAsICAgMzUyLCAgIDM1NCwgICAzNTYsICAgMzU4LCAg
IDM2MCwgICAzNjIsICAgMzY0LCAgIDM2NiwKKyAgICAgMzY4LCAgIDM3MCwgICAzNzIsICAgMzc0
LCAgIDM3NiwgICAzNzgsICAgMzgwLCAgIDM4MiwgICAzODQsICAgMzg2LAorICAgICAzODcsICAg
Mzk0LCAgIDM5NSwgICA0MDEsICAgNDAzLCAgIDQwNiwgICA0MTAsICAgNDEyLCAgIDQxNiwgICA0
MTgsCisgICAgIDQyMywgICA0MjUsICAgNDI3LCAgIDQyOSwgICA0MzEsICAgNDMzLCAgIDQzNSwg
ICA0MzcsICAgNDM5LCAgIDQ0MSwKKyAgICAgNDQ0LCAgIDQ0NSwgICA0NDYsICAgNDUyLCAgIDQ1
NCwgICA0NTYsICAgNDU3LCAgIDQ2MCwgICA0NjEsICAgNDY0LAorICAgICA0NjcsICAgNDcxLCAg
IDQ3MywgICA0NzYsICAgNDc4LCAgIDQ4MSwgICA0ODcsICAgNDkxLCAgIDQ5MywgICA0OTUsCisg
ICAgIDUwMCwgICA1MDEsICAgNTA4LCAgIDUwOSwgICA1MTgsICAgNTE5LCAgIDUyNywgICA1Mjks
ICAgNTMxLCAgIDUzMywKKyAgICAgNTM0LCAgIDUzNywgICA1NDEsICAgNTQ0LCAgIDU0NywgICA1
NTAsICAgNTU0LCAgIDU1NywgICA1NTksICAgNTYyLAorICAgICA1NjQsICAgNTY2LCAgIDU2Nwor
fTsKKworLyogWVlSSFMgLS0gQSBgLTEnLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBydWxlcycgUkhT
LiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlyaHNbXSA9Cit7CisgICAgIDE3NSwg
ICAgIDAsICAgIC0xLCAgICA0NSwgICAgLTEsICAgIDQ2LCAgICAtMSwgICAgNDUsICAgIC0xLCAg
ICA5NywKKyAgICAgIC0xLCAgICA0OCwgICAgLTEsICAgIDQ3LCAgICAtMSwgICAgNDksICAgIC0x
LCAgICA3MSwgICAxMjQsICAgIDcyLAorICAgICAgLTEsICAgIDk4LCAgICAtMSwgICAgOTksICAg
IDczLCAgIDEwMCwgICAgNzQsICAgIC0xLCAgIDEwMSwgICAgLTEsCisgICAgICA5OSwgICAgNzcs
ICAgIDk2LCAgICAtMSwgICAgOTksICAgIDUyLCAgICAtMSwgICAgOTksICAgIDUzLCAgICAtMSwK
KyAgICAgMTI0LCAgICAtMSwgICAxMDIsICAgIC0xLCAgIDEwMywgICAgLTEsICAgIDk5LCAgICA3
NywgICAxMDMsICAgIC0xLAorICAgICAxMDUsICAgIDcyLCAgICAtMSwgICAxMDQsICAgIDcyLCAg
ICAtMSwgICAxMDYsICAgIDM5LCAgICAtMSwgICAxMDYsCisgICAgICAtMSwgICAxMDYsICAgMTIy
LCAgICAtMSwgICAxMDUsICAgIDc4LCAgIDEyMiwgICAgLTEsICAgMTA3LCAgICA3MSwKKyAgICAg
IC0xLCAgIDE0MiwgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgOTksICAgIC0xLCAgICA1MiwgICAx
MDgsICAgIC0xLAorICAgICAgNTMsICAgMTA4LCAgICAtMSwgICAxMDksICAgMTA4LCAgICAtMSwg
ICAgODUsICAgIC0xLCAgICA4MywgICAgLTEsCisgICAgICA4MiwgICAgLTEsICAgMTA4LCAgICAt
MSwgICAxMTAsICAgIDg2LCAgIDEwOCwgICAgLTEsICAgMTEwLCAgICA4NywKKyAgICAgMTA4LCAg
ICAtMSwgICAxMTAsICAgIC0xLCAgIDExMSwgICAgODUsICAgMTEwLCAgICAtMSwgICAxMTEsICAg
IDgzLAorICAgICAxMTAsICAgIC0xLCAgIDExMSwgICAgLTEsICAgMTEyLCAgICAtMSwgICAxMTMs
ICAgIDg5LCAgIDExMiwgICAgLTEsCisgICAgIDExMywgICAgOTAsICAgMTEyLCAgICAtMSwgICAx
MTMsICAgIDU0LCAgIDExMiwgICAgLTEsICAgMTEzLCAgICA1NSwKKyAgICAgMTEyLCAgICAtMSwg
ICAxMTMsICAgIC0xLCAgIDExNCwgICAgNTYsICAgMTEzLCAgICAtMSwgICAxMTQsICAgIDU3LAor
ICAgICAxMTMsICAgIC0xLCAgIDExNCwgICAgLTEsICAgMTE1LCAgICAtMSwgICAxMTYsICAgIC0x
LCAgIDExNywgICAgLTEsCisgICAgIDExOCwgICAgNTgsICAgMTE3LCAgICAtMSwgICAxMTgsICAg
IC0xLCAgIDExOSwgICAgNjAsICAgMTE4LCAgICAtMSwKKyAgICAgMTE5LCAgICAtMSwgICAxMjAs
ICAgIDU5LCAgIDExOSwgICAgLTEsICAgMTIwLCAgICAtMSwgICAxMjAsICAgIDk0LAorICAgICAx
MjQsICAgIDc5LCAgIDEyMiwgICAgLTEsICAgMTIxLCAgICAtMSwgICAxMDgsICAgMTIzLCAgIDEy
MiwgICAgLTEsCisgICAgICA4MCwgICAgLTEsICAgIDYxLCAgICAtMSwgICAgNjIsICAgIC0xLCAg
ICA2MywgICAgLTEsICAgIDcwLCAgICAtMSwKKyAgICAgMTIyLCAgICAtMSwgICAxMjQsICAgIDc4
LCAgIDEyMiwgICAgLTEsICAgMTIxLCAgICAtMSwgICAxMjcsICAgIDgxLAorICAgICAgLTEsICAg
MTM1LCAgICA4MSwgICAgLTEsICAgICA3LCAgIDE0MCwgICAxNDEsICAgIDgxLCAgICAtMSwgICAx
MjgsCisgICAgICA3MiwgICAgLTEsICAgMTMwLCAgICAtMSwgICAxMjksICAgIC0xLCAgIDEzMCwg
ICAxMzIsICAgIC0xLCAgIDEyOSwKKyAgICAgIDc4LCAgIDEzMiwgICAgLTEsICAgMTM3LCAgICA0
NSwgICAgNzEsICAgIC0xLCAgIDEzOSwgICAgOTYsICAgIC0xLAorICAgICAxMzksICAgIDk2LCAg
ICA3MywgICAxMjUsICAgIDc0LCAgICAtMSwgICAxMzgsICAgMTMzLCAgIDEzMSwgICAgLTEsCisg
ICAgIDEzMywgICAxMzEsICAgIC0xLCAgIDEzOCwgICAxMzMsICAgMTM0LCAgICAtMSwgICAxMzMs
ICAgMTM0LCAgICAtMSwKKyAgICAgIC0xLCAgICAzMywgICAgLTEsICAgIDM0LCAgICAtMSwgICAg
MzUsICAgIC0xLCAgIDEzOSwgICAgLTEsICAgMTM2LAorICAgICAgLTEsICAgMTM1LCAgICA3OCwg
ICAgOTYsICAgIC0xLCAgIDEzNSwgICAgNzgsICAgIDk2LCAgICA3MywgICAgNzQsCisgICAgICAt
MSwgICAxMzUsICAgIDc4LCAgICA5NiwgICAgNzMsICAgMTI1LCAgICA3NCwgICAgLTEsICAgMTM1
LCAgICA3OCwKKyAgICAgIDk2LCAgICA4MCwgICAxNTAsICAgIC0xLCAgIDEzNywgICAgLTEsICAg
MTM3LCAgICA5NiwgICAgLTEsICAgMTM3LAorICAgICAgOTYsICAgIDczLCAgICA3NCwgICAgLTEs
ICAgMTM3LCAgICA5NiwgICAgNzMsICAgMTI1LCAgICA3NCwgICAgLTEsCisgICAgIDEzNywgICAg
OTYsICAgIDgwLCAgIDE1MCwgICAgLTEsICAgICAzLCAgICA0NSwgICAgLTEsICAgMTM5LCAgICAt
MSwKKyAgICAgMTM4LCAgIDEzOSwgICAgLTEsICAgICA5LCAgICAtMSwgICAgIDgsICAgIC0xLCAg
ICAzNywgICAgLTEsICAgICAzLAorICAgICAgMzcsICAgIC0xLCAgICAzNiwgICAgLTEsICAgMTQx
LCAgICAtMSwgICAxNDAsICAgMTQxLCAgICAtMSwgICAgIDQsCisgICAgICAtMSwgICAgIDUsICAg
IC0xLCAgICAgNiwgICAgLTEsICAgMTQyLCAgICAtMSwgICAxNDIsICAgIDczLCAgIDEyNSwKKyAg
ICAgIDc0LCAgICAtMSwgICAgMzksICAgIC0xLCAgICAxMSwgICAgLTEsICAgIDEyLCAgICAtMSwg
ICAgMTAsICAgIC0xLAorICAgICAgMjcsICAgIC0xLCAgICAyOCwgICAgLTEsICAgIDI5LCAgICAt
MSwgICAgMjEsICAgIC0xLCAgICAyMiwgICAgLTEsCisgICAgICAyMywgICAgLTEsICAgIDI0LCAg
ICAtMSwgICAgMjUsICAgIC0xLCAgICAyNiwgICAgLTEsICAgIDMwLCAgICAtMSwKKyAgICAgIDMx
LCAgICAtMSwgICAgMzIsICAgIC0xLCAgICA0MSwgICAgLTEsICAgIDQyLCAgICAtMSwgICAgNDMs
ICAgIC0xLAorICAgICAgNDQsICAgIC0xLCAgIDE0MywgICAgLTEsICAgIDQ2LCAgICAtMSwgICAg
LTEsICAgIDM4LCAgICA5NiwgICAgNzUsCisgICAgIDE0NCwgICAxNDYsICAgIDc2LCAgICAtMSwg
ICAgLTEsICAgIDM4LCAgICA3NSwgICAxNDUsICAgMTQ2LCAgICA3NiwKKyAgICAgIC0xLCAgIDE0
NywgICAgLTEsICAgMTQ2LCAgIDE0NywgICAgLTEsICAgMTM5LCAgIDE0OCwgICAgODEsICAgIC0x
LAorICAgICAxNDksICAgIC0xLCAgIDE0OCwgICAgNzgsICAgMTQ5LCAgICAtMSwgICAgOTYsICAg
IC0xLCAgICA5NiwgICAgNzMsCisgICAgIDEyNSwgICAgNzQsICAgIC0xLCAgIDEyMiwgICAgLTEs
ICAgMTI2LCAgICAtMSwgICAxNTQsICAgIC0xLCAgIDE1MywKKyAgICAgIC0xLCAgIDE1MSwgICAg
LTEsICAgMTYzLCAgICAtMSwgICAxNjQsICAgIC0xLCAgIDE2NywgICAgLTEsICAgMTc0LAorICAg
ICAgLTEsICAgIDc1LCAgICA3NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzUsICAgMTU1LCAg
IDE2MiwgICAxNTYsCisgICAgICA3NiwgICAgLTEsICAgMTYxLCAgICAtMSwgICAxNTMsICAgIC0x
LCAgICAtMSwgICAxNTksICAgMTYxLCAgICAtMSwKKyAgICAgIC0xLCAgIDE2MCwgICAxNTMsICAg
IC0xLCAgICA3NSwgICAgNzYsICAgIC0xLCAgICA3NSwgICAxNjIsICAgIDc2LAorICAgICAgLTEs
ICAgMTUyLCAgICAtMSwgICAxNjIsICAgMTUyLCAgICAtMSwgICAgODEsICAgIC0xLCAgIDEyNCwg
ICAgODEsCisgICAgICAtMSwgICAgMTgsICAgIDcxLCAgIDEyNCwgICAgNzIsICAgMTY1LCAgICAt
MSwgICAxNTgsICAgIDE2LCAgIDE1OCwKKyAgICAgIC0xLCAgIDE1OCwgICAgLTEsICAgMTI0LCAg
ICAtMSwgICAxMzcsICAgIDk2LCAgICA4MCwgICAxNTAsICAgIC0xLAorICAgICAgLTEsICAgIDQw
LCAgICA3MSwgICAxNjgsICAgMTY2LCAgICA3MiwgICAxNTcsICAgIC0xLCAgICAtMSwgICAgMTUs
CisgICAgIDE2OSwgICAxNTgsICAgIDQwLCAgICA3MSwgICAxMjQsICAgIDcyLCAgICA4MSwgICAg
LTEsICAgIC0xLCAgICAxNywKKyAgICAgIDcxLCAgIDE3MCwgICAxNzEsICAgMTczLCAgICA3Miwg
ICAxNTcsICAgIC0xLCAgIDE2MywgICAgLTEsICAgMTUxLAorICAgICAgLTEsICAgMTY2LCAgICAt
MSwgICAgLTEsICAgMTcyLCAgICA4MSwgICAgLTEsICAgMTcyLCAgICA4MSwgICAxMjQsCisgICAg
ICAtMSwgICAgMTQsICAgIDgxLCAgICAtMSwgICAgMTMsICAgIDgxLCAgICAtMSwgICAgMjAsICAg
IDgxLCAgICAtMSwKKyAgICAgIDIwLCAgIDEyNCwgICAgODEsICAgIC0xLCAgICAxOSwgICAgODEs
ICAgIC0xLCAgIDE3NiwgICAgLTEsICAgMTc1LAorICAgICAxNzYsICAgIC0xLCAgIDE3NywgICAg
LTEsICAgMTI2LCAgICAtMSwgICAgLTEsICAgMTI3LCAgIDE3OCwgICAxNjEsCisgICAgICAtMQor
fTsKKworLyogWVlSTElORVtZWU5dIC0tIHNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVyIFlZ
TiB3YXMgZGVmaW5lZC4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXJsaW5lW10g
PQoreworICAgICAgIDAsICAgMTgwLCAgIDE4MCwgICAxODEsICAgMTg0LCAgIDIzOSwgICAyNDIs
ICAgMjQ3LCAgIDI1MiwgICAyNTcsCisgICAgIDI2MywgICAyNjYsICAgMjY5LCAgIDI3MiwgICAz
NjcsICAgMzc3LCAgIDM5MCwgICAzOTgsICAgNDk4LCAgIDUwMSwKKyAgICAgNTA5LCAgIDUxMiwg
ICA1MTgsICAgNTIyLCAgIDUyOSwgICA1MzUsICAgNTQ0LCAgIDU1MiwgICA2MDcsICAgNjE3LAor
ICAgICA2MjAsICAgNjMwLCAgIDY0MCwgICA2NjEsICAgNjYyLCAgIDY2MywgICA2NjgsICAgNjY5
LCAgIDY3NywgICA2ODgsCisgICAgIDY4OSwgICA2OTcsICAgNzA4LCAgIDcxMiwgICA3MTMsICAg
NzIzLCAgIDczMywgICA3NDMsICAgNzU2LCAgIDc1NywKKyAgICAgNzY3LCAgIDc4MCwgICA3ODQs
ICAgNzg4LCAgIDc5MiwgICA3OTMsICAgODA2LCAgIDgwNywgICA4MjAsICAgODIxLAorICAgICA4
MzQsICAgODM1LCAgIDg1MiwgICA4NTMsICAgODY2LCAgIDg2NywgICA4NjgsICAgODY5LCAgIDg3
MCwgICA4NzQsCisgICAgIDg3NywgICA4ODgsICAgODk2LCAgIDkyMywgICA5MjgsICAgOTQyLCAg
IDk5NywgIDEwMDAsICAxMDA3LCAgMTAxNSwKKyAgICAxMDM2LCAgMTA1NywgIDEwNjcsICAxMDk1
LCAgMTEwMCwgIDExMTAsICAxMTE1LCAgMTEyNSwgIDExMjgsICAxMTMxLAorICAgIDExMzQsICAx
MTQwLCAgMTE0NywgIDExNTAsICAxMTcyLCAgMTE5MCwgIDEyMTQsICAxMjM3LCAgMTI0MSwgIDEy
NTksCisgICAgMTI2NywgIDEyOTksICAxMzE5LCAgMTM0MCwgIDEzNDksICAxMzcyLCAgMTM3NSwg
IDEzODEsICAxMzg5LCAgMTM5NywKKyAgICAxNDA1LCAgMTQxNSwgIDE0MjIsICAxNDI1LCAgMTQy
OCwgIDE0MzQsICAxNDM3LCAgMTQ1MiwgIDE0NTYsICAxNDYwLAorICAgIDE0NjQsICAxNDY4LCAg
MTQ3MywgIDE0NzgsICAxNDgzLCAgMTQ4OCwgIDE0OTMsICAxNDk4LCAgMTUwMywgIDE1MDgsCisg
ICAgMTUxMywgIDE1MTgsICAxNTIzLCAgMTUyOCwgIDE1MzIsICAxNTM2LCAgMTU0NCwgIDE1NTIs
ICAxNTU2LCAgMTU2OSwKKyAgICAxNTY5LCAgMTU4MywgIDE1ODMsICAxNTkyLCAgMTU5NSwgIDE2
MTEsICAxNjQ0LCAgMTY0OCwgIDE2NTQsICAxNjYxLAorICAgIDE2NzYsICAxNjgwLCAgMTY4NCwg
IDE2ODUsICAxNjkxLCAgMTY5MiwgIDE2OTMsICAxNjk0LCAgMTY5NSwgIDE2OTksCisgICAgMTcw
MCwgIDE3MDAsICAxNzAwLCAgMTcxMCwgIDE3MTEsICAxNzE1LCAgMTcxNSwgIDE3MTYsICAxNzE2
LCAgMTcyMSwKKyAgICAxNzI0LCAgMTczNCwgIDE3MzcsICAxNzQzLCAgMTc0NCwgIDE3NDgsICAx
NzU2LCAgMTc2MCwgIDE3NzAsICAxNzc1LAorICAgIDE3OTIsICAxNzkyLCAgMTc5NywgIDE3OTcs
ICAxODA0LCAgMTgwNCwgIDE4MTIsICAxODE1LCAgMTgyMSwgIDE4MjQsCisgICAgMTgzMCwgIDE4
MzQsICAxODQxLCAgMTg0OCwgIDE4NTUsICAxODYyLCAgMTg3MywgIDE4ODIsICAxODg2LCAgMTg5
MywKKyAgICAxODk2LCAgMTkwMiwgIDE5MDIKK307CisjZW5kaWYKKworI2lmIFlZREVCVUcgfHwg
WVlFUlJPUl9WRVJCT1NFIHx8IDAKKy8qIFlZVE5BTUVbU1lNQk9MLU5VTV0gLS0gU3RyaW5nIG5h
bWUgb2YgdGhlIHN5bWJvbCBTWU1CT0wtTlVNLgorICAgRmlyc3QsIHRoZSB0ZXJtaW5hbHMsIHRo
ZW4sIHN0YXJ0aW5nIGF0IFlZTlRPS0VOUywgbm9udGVybWluYWxzLiAgKi8KK3N0YXRpYyBjb25z
dCBjaGFyICpjb25zdCB5eXRuYW1lW10gPQoreworICAiJGVuZCIsICJlcnJvciIsICIkdW5kZWZp
bmVkIiwgIklOVkFSSUFOVCIsICJISUdIX1BSRUNJU0lPTiIsCisgICJNRURJVU1fUFJFQ0lTSU9O
IiwgIkxPV19QUkVDSVNJT04iLCAiUFJFQ0lTSU9OIiwgIkFUVFJJQlVURSIsCisgICJDT05TVF9R
VUFMIiwgIkJPT0xfVFlQRSIsICJGTE9BVF9UWVBFIiwgIklOVF9UWVBFIiwgIkJSRUFLIiwgIkNP
TlRJTlVFIiwKKyAgIkRPIiwgIkVMU0UiLCAiRk9SIiwgIklGIiwgIkRJU0NBUkQiLCAiUkVUVVJO
IiwgIkJWRUMyIiwgIkJWRUMzIiwKKyAgIkJWRUM0IiwgIklWRUMyIiwgIklWRUMzIiwgIklWRUM0
IiwgIlZFQzIiLCAiVkVDMyIsICJWRUM0IiwgIk1BVFJJWDIiLAorICAiTUFUUklYMyIsICJNQVRS
SVg0IiwgIklOX1FVQUwiLCAiT1VUX1FVQUwiLCAiSU5PVVRfUVVBTCIsICJVTklGT1JNIiwKKyAg
IlZBUllJTkciLCAiU1RSVUNUIiwgIlZPSURfVFlQRSIsICJXSElMRSIsICJTQU1QTEVSMkQiLCAi
U0FNUExFUkNVQkUiLAorICAiU0FNUExFUl9FWFRFUk5BTF9PRVMiLCAiU0FNUExFUjJEUkVDVCIs
ICJJREVOVElGSUVSIiwgIlRZUEVfTkFNRSIsCisgICJGTE9BVENPTlNUQU5UIiwgIklOVENPTlNU
QU5UIiwgIkJPT0xDT05TVEFOVCIsICJMRUZUX09QIiwgIlJJR0hUX09QIiwKKyAgIklOQ19PUCIs
ICJERUNfT1AiLCAiTEVfT1AiLCAiR0VfT1AiLCAiRVFfT1AiLCAiTkVfT1AiLCAiQU5EX09QIiwK
KyAgIk9SX09QIiwgIlhPUl9PUCIsICJNVUxfQVNTSUdOIiwgIkRJVl9BU1NJR04iLCAiQUREX0FT
U0lHTiIsCisgICJNT0RfQVNTSUdOIiwgIkxFRlRfQVNTSUdOIiwgIlJJR0hUX0FTU0lHTiIsICJB
TkRfQVNTSUdOIiwgIlhPUl9BU1NJR04iLAorICAiT1JfQVNTSUdOIiwgIlNVQl9BU1NJR04iLCAi
TEVGVF9QQVJFTiIsICJSSUdIVF9QQVJFTiIsICJMRUZUX0JSQUNLRVQiLAorICAiUklHSFRfQlJB
Q0tFVCIsICJMRUZUX0JSQUNFIiwgIlJJR0hUX0JSQUNFIiwgIkRPVCIsICJDT01NQSIsICJDT0xP
TiIsCisgICJFUVVBTCIsICJTRU1JQ09MT04iLCAiQkFORyIsICJEQVNIIiwgIlRJTERFIiwgIlBM
VVMiLCAiU1RBUiIsICJTTEFTSCIsCisgICJQRVJDRU5UIiwgIkxFRlRfQU5HTEUiLCAiUklHSFRf
QU5HTEUiLCAiVkVSVElDQUxfQkFSIiwgIkNBUkVUIiwKKyAgIkFNUEVSU0FORCIsICJRVUVTVElP
TiIsICIkYWNjZXB0IiwgImlkZW50aWZpZXIiLCAidmFyaWFibGVfaWRlbnRpZmllciIsCisgICJw
cmltYXJ5X2V4cHJlc3Npb24iLCAicG9zdGZpeF9leHByZXNzaW9uIiwgImludGVnZXJfZXhwcmVz
c2lvbiIsCisgICJmdW5jdGlvbl9jYWxsIiwgImZ1bmN0aW9uX2NhbGxfb3JfbWV0aG9kIiwgImZ1
bmN0aW9uX2NhbGxfZ2VuZXJpYyIsCisgICJmdW5jdGlvbl9jYWxsX2hlYWRlcl9ub19wYXJhbWV0
ZXJzIiwKKyAgImZ1bmN0aW9uX2NhbGxfaGVhZGVyX3dpdGhfcGFyYW1ldGVycyIsICJmdW5jdGlv
bl9jYWxsX2hlYWRlciIsCisgICJmdW5jdGlvbl9pZGVudGlmaWVyIiwgInVuYXJ5X2V4cHJlc3Np
b24iLCAidW5hcnlfb3BlcmF0b3IiLAorICAibXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbiIsICJh
ZGRpdGl2ZV9leHByZXNzaW9uIiwgInNoaWZ0X2V4cHJlc3Npb24iLAorICAicmVsYXRpb25hbF9l
eHByZXNzaW9uIiwgImVxdWFsaXR5X2V4cHJlc3Npb24iLCAiYW5kX2V4cHJlc3Npb24iLAorICAi
ZXhjbHVzaXZlX29yX2V4cHJlc3Npb24iLCAiaW5jbHVzaXZlX29yX2V4cHJlc3Npb24iLAorICAi
bG9naWNhbF9hbmRfZXhwcmVzc2lvbiIsICJsb2dpY2FsX3hvcl9leHByZXNzaW9uIiwKKyAgImxv
Z2ljYWxfb3JfZXhwcmVzc2lvbiIsICJjb25kaXRpb25hbF9leHByZXNzaW9uIiwKKyAgImFzc2ln
bm1lbnRfZXhwcmVzc2lvbiIsICJhc3NpZ25tZW50X29wZXJhdG9yIiwgImV4cHJlc3Npb24iLAor
ICAiY29uc3RhbnRfZXhwcmVzc2lvbiIsICJkZWNsYXJhdGlvbiIsICJmdW5jdGlvbl9wcm90b3R5
cGUiLAorICAiZnVuY3Rpb25fZGVjbGFyYXRvciIsICJmdW5jdGlvbl9oZWFkZXJfd2l0aF9wYXJh
bWV0ZXJzIiwKKyAgImZ1bmN0aW9uX2hlYWRlciIsICJwYXJhbWV0ZXJfZGVjbGFyYXRvciIsICJw
YXJhbWV0ZXJfZGVjbGFyYXRpb24iLAorICAicGFyYW1ldGVyX3F1YWxpZmllciIsICJwYXJhbWV0
ZXJfdHlwZV9zcGVjaWZpZXIiLAorICAiaW5pdF9kZWNsYXJhdG9yX2xpc3QiLCAic2luZ2xlX2Rl
Y2xhcmF0aW9uIiwgImZ1bGx5X3NwZWNpZmllZF90eXBlIiwKKyAgInR5cGVfcXVhbGlmaWVyIiwg
InR5cGVfc3BlY2lmaWVyIiwgInByZWNpc2lvbl9xdWFsaWZpZXIiLAorICAidHlwZV9zcGVjaWZp
ZXJfbm9fcHJlYyIsICJ0eXBlX3NwZWNpZmllcl9ub25hcnJheSIsICJzdHJ1Y3Rfc3BlY2lmaWVy
IiwKKyAgIiRAMSIsICIkQDIiLCAic3RydWN0X2RlY2xhcmF0aW9uX2xpc3QiLCAic3RydWN0X2Rl
Y2xhcmF0aW9uIiwKKyAgInN0cnVjdF9kZWNsYXJhdG9yX2xpc3QiLCAic3RydWN0X2RlY2xhcmF0
b3IiLCAiaW5pdGlhbGl6ZXIiLAorICAiZGVjbGFyYXRpb25fc3RhdGVtZW50IiwgInN0YXRlbWVu
dCIsICJzaW1wbGVfc3RhdGVtZW50IiwKKyAgImNvbXBvdW5kX3N0YXRlbWVudCIsICIkQDMiLCAi
JEA0IiwgInN0YXRlbWVudF9ub19uZXdfc2NvcGUiLAorICAic3RhdGVtZW50X3dpdGhfc2NvcGUi
LCAiJEA1IiwgIiRANiIsICJjb21wb3VuZF9zdGF0ZW1lbnRfbm9fbmV3X3Njb3BlIiwKKyAgInN0
YXRlbWVudF9saXN0IiwgImV4cHJlc3Npb25fc3RhdGVtZW50IiwgInNlbGVjdGlvbl9zdGF0ZW1l
bnQiLAorICAic2VsZWN0aW9uX3Jlc3Rfc3RhdGVtZW50IiwgImNvbmRpdGlvbiIsICJpdGVyYXRp
b25fc3RhdGVtZW50IiwgIiRANyIsCisgICIkQDgiLCAiJEA5IiwgImZvcl9pbml0X3N0YXRlbWVu
dCIsICJjb25kaXRpb25vcHQiLCAiZm9yX3Jlc3Rfc3RhdGVtZW50IiwKKyAgImp1bXBfc3RhdGVt
ZW50IiwgInRyYW5zbGF0aW9uX3VuaXQiLCAiZXh0ZXJuYWxfZGVjbGFyYXRpb24iLAorICAiZnVu
Y3Rpb25fZGVmaW5pdGlvbiIsICIkQDEwIiwgWVlfTlVMTAorfTsKKyNlbmRpZgorCisjIGlmZGVm
IFlZUFJJTlQKKy8qIFlZVE9LTlVNW1lZTEVYLU5VTV0gLS0gSW50ZXJuYWwgdG9rZW4gbnVtYmVy
IGNvcnJlc3BvbmRpbmcgdG8KKyAgIHRva2VuIFlZTEVYLU5VTS4gICovCitzdGF0aWMgY29uc3Qg
eXl0eXBlX3VpbnQxNiB5eXRva251bVtdID0KK3sKKyAgICAgICAwLCAgIDI1NiwgICAyNTcsICAg
MjU4LCAgIDI1OSwgICAyNjAsICAgMjYxLCAgIDI2MiwgICAyNjMsICAgMjY0LAorICAgICAyNjUs
ICAgMjY2LCAgIDI2NywgICAyNjgsICAgMjY5LCAgIDI3MCwgICAyNzEsICAgMjcyLCAgIDI3Mywg
ICAyNzQsCisgICAgIDI3NSwgICAyNzYsICAgMjc3LCAgIDI3OCwgICAyNzksICAgMjgwLCAgIDI4
MSwgICAyODIsICAgMjgzLCAgIDI4NCwKKyAgICAgMjg1LCAgIDI4NiwgICAyODcsICAgMjg4LCAg
IDI4OSwgICAyOTAsICAgMjkxLCAgIDI5MiwgICAyOTMsICAgMjk0LAorICAgICAyOTUsICAgMjk2
LCAgIDI5NywgICAyOTgsICAgMjk5LCAgIDMwMCwgICAzMDEsICAgMzAyLCAgIDMwMywgICAzMDQs
CisgICAgIDMwNSwgICAzMDYsICAgMzA3LCAgIDMwOCwgICAzMDksICAgMzEwLCAgIDMxMSwgICAz
MTIsICAgMzEzLCAgIDMxNCwKKyAgICAgMzE1LCAgIDMxNiwgICAzMTcsICAgMzE4LCAgIDMxOSwg
ICAzMjAsICAgMzIxLCAgIDMyMiwgICAzMjMsICAgMzI0LAorICAgICAzMjUsICAgMzI2LCAgIDMy
NywgICAzMjgsICAgMzI5LCAgIDMzMCwgICAzMzEsICAgMzMyLCAgIDMzMywgICAzMzQsCisgICAg
IDMzNSwgICAzMzYsICAgMzM3LCAgIDMzOCwgICAzMzksICAgMzQwLCAgIDM0MSwgICAzNDIsICAg
MzQzLCAgIDM0NCwKKyAgICAgMzQ1LCAgIDM0NiwgICAzNDcsICAgMzQ4LCAgIDM0OQorfTsKKyMg
ZW5kaWYKKworLyogWVlSMVtZWU5dIC0tIFN5bWJvbCBudW1iZXIgb2Ygc3ltYm9sIHRoYXQgcnVs
ZSBZWU4gZGVyaXZlcy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjFbXSA9Cit7
CisgICAgICAgMCwgICAgOTUsICAgIDk2LCAgICA5NiwgICAgOTcsICAgIDk4LCAgICA5OCwgICAg
OTgsICAgIDk4LCAgICA5OCwKKyAgICAgIDk5LCAgICA5OSwgICAgOTksICAgIDk5LCAgICA5OSwg
ICAgOTksICAgMTAwLCAgIDEwMSwgICAxMDIsICAgMTAyLAorICAgICAxMDMsICAgMTAzLCAgIDEw
NCwgICAxMDQsICAgMTA1LCAgIDEwNSwgICAxMDYsICAgMTA3LCAgIDEwNywgICAxMDgsCisgICAg
IDEwOCwgICAxMDgsICAgMTA4LCAgIDEwOSwgICAxMDksICAgMTA5LCAgIDExMCwgICAxMTAsICAg
MTEwLCAgIDExMSwKKyAgICAgMTExLCAgIDExMSwgICAxMTIsICAgMTEzLCAgIDExMywgICAxMTMs
ICAgMTEzLCAgIDExMywgICAxMTQsICAgMTE0LAorICAgICAxMTQsICAgMTE1LCAgIDExNiwgICAx
MTcsICAgMTE4LCAgIDExOCwgICAxMTksICAgMTE5LCAgIDEyMCwgICAxMjAsCisgICAgIDEyMSwg
ICAxMjEsICAgMTIyLCAgIDEyMiwgICAxMjMsICAgMTIzLCAgIDEyMywgICAxMjMsICAgMTIzLCAg
IDEyNCwKKyAgICAgMTI0LCAgIDEyNSwgICAxMjYsICAgMTI2LCAgIDEyNiwgICAxMjcsICAgMTI4
LCAgIDEyOCwgICAxMjksICAgMTI5LAorICAgICAxMzAsICAgMTMxLCAgIDEzMSwgICAxMzIsICAg
MTMyLCAgIDEzMiwgICAxMzIsICAgMTMzLCAgIDEzMywgICAxMzMsCisgICAgIDEzMywgICAxMzQs
ICAgMTM1LCAgIDEzNSwgICAxMzUsICAgMTM1LCAgIDEzNSwgICAxMzYsICAgMTM2LCAgIDEzNiwK
KyAgICAgMTM2LCAgIDEzNiwgICAxMzYsICAgMTM3LCAgIDEzNywgICAxMzgsICAgMTM4LCAgIDEz
OCwgICAxMzgsICAgMTM4LAorICAgICAxMzksICAgMTM5LCAgIDE0MCwgICAxNDAsICAgMTQwLCAg
IDE0MSwgICAxNDEsICAgMTQyLCAgIDE0MiwgICAxNDIsCisgICAgIDE0MiwgICAxNDIsICAgMTQy
LCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwKKyAgICAg
MTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAx
NDIsICAgMTQ0LAorICAgICAxNDMsICAgMTQ1LCAgIDE0MywgICAxNDYsICAgMTQ2LCAgIDE0Nywg
ICAxNDgsICAgMTQ4LCAgIDE0OSwgICAxNDksCisgICAgIDE1MCwgICAxNTEsICAgMTUyLCAgIDE1
MiwgICAxNTMsICAgMTUzLCAgIDE1MywgICAxNTMsICAgMTUzLCAgIDE1NCwKKyAgICAgMTU1LCAg
IDE1NiwgICAxNTQsICAgMTU3LCAgIDE1NywgICAxNTksICAgMTU4LCAgIDE2MCwgICAxNTgsICAg
MTYxLAorICAgICAxNjEsICAgMTYyLCAgIDE2MiwgICAxNjMsICAgMTYzLCAgIDE2NCwgICAxNjUs
ICAgMTY1LCAgIDE2NiwgICAxNjYsCisgICAgIDE2OCwgICAxNjcsICAgMTY5LCAgIDE2NywgICAx
NzAsICAgMTY3LCAgIDE3MSwgICAxNzEsICAgMTcyLCAgIDE3MiwKKyAgICAgMTczLCAgIDE3Mywg
ICAxNzQsICAgMTc0LCAgIDE3NCwgICAxNzQsICAgMTc0LCAgIDE3NSwgICAxNzUsICAgMTc2LAor
ICAgICAxNzYsICAgMTc4LCAgIDE3NworfTsKKworLyogWVlSMltZWU5dIC0tIE51bWJlciBvZiBz
eW1ib2xzIGNvbXBvc2luZyByaWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLworc3RhdGlj
IGNvbnN0IHl5dHlwZV91aW50OCB5eXIyW10gPQoreworICAgICAgIDAsICAgICAyLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsCisgICAgICAg
MSwgICAgIDQsICAgICAxLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMywKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDMsICAg
ICAyLCAgICAgMSwgICAgIDEsICAgICAxLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMywgICAgIDEsCisgICAgICAgMywgICAg
IDMsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAxLCAgICAg
MywKKyAgICAgICAzLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAxLCAg
ICAgMywgICAgIDEsICAgICAzLAorICAgICAgIDEsICAgICA1LCAgICAgMSwgICAgIDMsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCisgICAgICAgMywgICAgIDEsICAg
ICAyLCAgICAgMiwgICAgIDQsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMywKKyAg
ICAgICAzLCAgICAgMiwgICAgIDUsICAgICAzLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMCwg
ICAgIDEsICAgICAxLAorICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsICAgICA1LCAgICAg
NiwgICAgIDUsICAgICAxLCAgICAgMiwgICAgIDQsCisgICAgICAgNSwgICAgIDQsICAgICAyLCAg
ICAgMSwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMSwKKyAgICAgICAx
LCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICA0LCAgICAgMSwgICAgIDEs
ICAgICAxLAorICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDEsCisgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMCwKKyAgICAgICA2LCAgICAg
MCwgICAgIDUsICAgICAxLCAgICAgMiwgICAgIDMsICAgICAxLCAgICAgMywgICAgIDEsICAgICA0
LAorICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDIsCisgICAgICAgMCwgICAgIDAsICAgICA1LCAgICAgMSwgICAgIDEs
ICAgICAwLCAgICAgMiwgICAgIDAsICAgICAyLCAgICAgMiwKKyAgICAgICAzLCAgICAgMSwgICAg
IDIsICAgICAxLCAgICAgMiwgICAgIDUsICAgICAzLCAgICAgMSwgICAgIDEsICAgICA0LAorICAg
ICAgIDAsICAgICA2LCAgICAgMCwgICAgIDgsICAgICAwLCAgICAgNywgICAgIDEsICAgICAxLCAg
ICAgMSwgICAgIDAsCisgICAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAz
LCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMSwKKyAgICAgICAxLCAgICAgMCwgICAgIDMKK307
CisKKy8qIFlZREVGQUNUW1NUQVRFLU5BTUVdIC0tIERlZmF1bHQgcmVkdWN0aW9uIG51bWJlciBp
biBzdGF0ZSBTVEFURS1OVU0uCisgICBQZXJmb3JtZWQgd2hlbiBZWVRBQkxFIGRvZXNuJ3Qgc3Bl
Y2lmeSBzb21ldGhpbmcgZWxzZSB0byBkby4gIFplcm8KKyAgIG1lYW5zIHRoZSBkZWZhdWx0IGlz
IGFuIGVycm9yLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlkZWZhY3RbXSA9Cit7
CisgICAgICAgMCwgICAgIDAsICAgMTEyLCAgIDExMywgICAxMTQsICAgICAwLCAgIDEwNiwgICAx
MDUsICAgMTIwLCAgIDExOCwKKyAgICAgMTE5LCAgIDEyNCwgICAxMjUsICAgMTI2LCAgIDEyNywg
ICAxMjgsICAgMTI5LCAgIDEyMSwgICAxMjIsICAgMTIzLAorICAgICAxMzAsICAgMTMxLCAgIDEz
MiwgICAxMDksICAgMTA3LCAgICAgMCwgICAxMTcsICAgMTMzLCAgIDEzNCwgICAxMzUsCisgICAg
IDEzNiwgICAxMzgsICAgMjAwLCAgIDIwMSwgICAgIDAsICAgIDc3LCAgICA4NywgICAgIDAsICAg
IDkyLCAgICA5NywKKyAgICAgICAwLCAgIDEwMywgICAgIDAsICAgMTEwLCAgIDExNSwgICAxMzcs
ICAgICAwLCAgIDE5NywgICAxOTksICAgMTA4LAorICAgICAxMDIsICAgICAwLCAgICAgMiwgICAg
IDMsICAgMTQxLCAgICAgMCwgICAgNzIsICAgICAwLCAgICA3NSwgICAgODcsCisgICAgICAgMCwg
ICAgODgsICAgIDg5LCAgICA5MCwgICAgNzgsICAgICAwLCAgICA4NywgICAgIDAsICAgIDczLCAg
ICAgMiwKKyAgICAgIDk4LCAgIDEwNCwgICAxMTEsICAgICAwLCAgICAgMSwgICAxOTgsICAgICAw
LCAgICAgMCwgICAxMzksICAgICAwLAorICAgICAyMDIsICAgIDc5LCAgICA4NCwgICAgODYsICAg
IDkxLCAgICAgMCwgICAgOTMsICAgIDgwLCAgICAgMCwgICAgIDAsCisgICAgICAgNCwgICAgIDcs
ICAgICA2LCAgICAgOCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMzUsICAgIDM0LCAgICAzMywK
KyAgICAgICA1LCAgICAxMCwgICAgMjksICAgIDEyLCAgICAxNywgICAgMTgsICAgICAwLCAgICAg
MCwgICAgMjMsICAgICAwLAorICAgICAgMzYsICAgICAwLCAgICAzOSwgICAgNDIsICAgIDQzLCAg
ICA0OCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsCisgICAgICA1NiwgICAgNTgsICAgIDYw
LCAgICA3MSwgICAgIDAsICAgIDI3LCAgICA3NCwgICAgIDAsICAgICAwLCAgIDE0MywKKyAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgMTgyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgMTYwLAorICAgICAxNjksICAgMTczLCAgICAzNiwgICAgNjIsICAgIDY5LCAgICAgMCwg
ICAxNTEsICAgICAwLCAgIDExNSwgICAxNTQsCisgICAgIDE3MSwgICAxNTMsICAgMTUyLCAgICAg
MCwgICAxNTUsICAgMTU2LCAgIDE1NywgICAxNTgsICAgIDgxLCAgICA4MywKKyAgICAgIDg1LCAg
ICAgMCwgICAgIDAsICAgIDk5LCAgICAgMCwgICAxNTAsICAgMTAxLCAgICAzMCwgICAgMzEsICAg
ICAwLAorICAgICAgMTQsICAgIDE1LCAgICAgMCwgICAgIDAsICAgIDIxLCAgICAyMCwgICAgIDAs
ICAgIDIyLCAgICAyNCwgICAgMjYsCisgICAgICAzMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAxMTYsICAgMTQ4LCAgICAgMCwgICAxNDYsICAgMTQyLAor
ICAgICAxNDQsICAgICAwLCAgIDE5MywgICAxOTIsICAgMTY3LCAgIDE4NCwgICAgIDAsICAgMTk2
LCAgIDE5NCwgICAgIDAsCisgICAgIDE4MCwgICAxNTksICAgICAwLCAgICA2NSwgICAgNjYsICAg
IDY3LCAgICA2OCwgICAgNjQsICAgICAwLCAgICAgMCwKKyAgICAgMTc0LCAgIDE3MCwgICAxNzIs
ICAgICAwLCAgICA5NCwgICAgIDAsICAgIDk2LCAgIDEwMCwgICAgIDksICAgICAwLAorICAgICAg
MTYsICAgICAyLCAgICAgMywgICAgMTMsICAgIDE5LCAgICAyNSwgICAgMzcsICAgIDM4LCAgICA0
MSwgICAgNDAsCisgICAgICA0NiwgICAgNDcsICAgIDQ0LCAgICA0NSwgICAgNDksICAgIDUwLCAg
ICA1NSwgICAgNTcsICAgIDU5LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAxNDUsICAgMTQw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTk1LAorICAgICAgIDAsICAg
MTYxLCAgICA2MywgICAgNzAsICAgICAwLCAgICA5NSwgICAgMTEsICAgICAwLCAgICAgMCwgICAx
NDcsCisgICAgICAgMCwgICAxNjYsICAgMTY4LCAgIDE4NywgICAxODYsICAgMTg5LCAgIDE2Nywg
ICAxNzgsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICA4MiwgICAgNjEsICAgMTQ5LCAgICAg
MCwgICAxODgsICAgICAwLCAgICAgMCwgICAxNzcsICAgMTc1LAorICAgICAgIDAsICAgICAwLCAg
IDE2MiwgICAgIDAsICAgMTkwLCAgICAgMCwgICAxNjcsICAgICAwLCAgIDE2NCwgICAxODEsCisg
ICAgIDE2MywgICAgIDAsICAgMTkxLCAgIDE4NSwgICAxNzYsICAgMTc5LCAgIDE4MworfTsKKwor
LyogWVlERUZHT1RPW05URVJNLU5VTV0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5
eWRlZmdvdG9bXSA9Cit7CisgICAgICAtMSwgICAxOTYsICAgMTAwLCAgIDEwMSwgICAxMDIsICAg
MjI5LCAgIDEwMywgICAxMDQsICAgMTA1LCAgIDEwNiwKKyAgICAgMTA3LCAgIDEwOCwgICAxMDks
ICAgMTQyLCAgIDExMSwgICAxMTIsICAgMTEzLCAgIDExNCwgICAxMTUsICAgMTE2LAorICAgICAx
MTcsICAgMTE4LCAgIDExOSwgICAxMjAsICAgMTIxLCAgIDEyMiwgICAxNDMsICAgMTQ0LCAgIDIx
OCwgICAxNDUsCisgICAgIDEyNCwgICAxNDYsICAgMTQ3LCAgICAzNCwgICAgMzUsICAgIDM2LCAg
ICA4MiwgICAgNjQsICAgIDY1LCAgICA4MywKKyAgICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQw
LCAgICA0MSwgICAgNDIsICAgIDQzLCAgIDEyNSwgICAgNDUsICAgMTMwLAorICAgICAgNzcsICAg
MTI4LCAgIDEyOSwgICAxOTcsICAgMTk4LCAgIDE2NiwgICAxNDksICAgMTUwLCAgIDE1MSwgICAx
NTIsCisgICAgIDIxMiwgICAyODAsICAgMjk5LCAgIDI1NCwgICAyNTUsICAgMjU2LCAgIDMwMCwg
ICAxNTMsICAgMTU0LCAgIDE1NSwKKyAgICAgMjg5LCAgIDI3OSwgICAxNTYsICAgMjYwLCAgIDIw
NCwgICAyNTcsICAgMjc1LCAgIDI4NiwgICAyODcsICAgMTU3LAorICAgICAgNDYsICAgIDQ3LCAg
ICA0OCwgICAgNTcKK307CisKKy8qIFlZUEFDVFtTVEFURS1OVU1dIC0tIEluZGV4IGluIFlZVEFC
TEUgb2YgdGhlIHBvcnRpb24gZGVzY3JpYmluZworICAgU1RBVEUtTlVNLiAgKi8KKyNkZWZpbmUg
WVlQQUNUX05JTkYgLTI2MQorc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXBhY3RbXSA9Cit7
CisgICAgMTMyNywgICAtMjAsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgMTEzLCAgLTI2MSwgIC0y
NjEsICAtMjYxLCAgLTI2MSwKKyAgICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwg
IC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLAorICAgIC0yNjEsICAtMjYxLCAgLTI2
MSwgIC0yNjEsICAtMjYxLCAgIC0xOSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsCisgICAg
LTI2MSwgIC0yNjEsICAtMjYxLCAgIC02MSwgICAtNDAsICAgLTI4LCAgICA3NSwgICAgLTcsICAt
MjYxLCAgICAyNCwKKyAgICAxMzcwLCAgLTI2MSwgIDE0NDQsICAtMjYxLCAgIC0xMSwgIC0yNjEs
ICAxMjgzLCAgLTI2MSwgIC0yNjEsICAtMjYxLAorICAgIC0yNjEsICAxNDQ0LCAgLTI2MSwgIC0y
NjEsICAtMjYxLCAgICAgNiwgIC0yNjEsICAgIDU0LCAgLTI2MSwgICAgODgsCisgICAgICA2Miwg
IC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAxMzcwLCAgICA1OSwgICAgOTEsICAtMjYxLCAg
ICAzNiwKKyAgICAgLTUwLCAgLTI2MSwgIC0yNjEsICAxMDUxLCAgLTI2MSwgIC0yNjEsICAgIDYz
LCAgMTM3MCwgIC0yNjEsICAgMjkzLAorICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAg
IDkxLCAgMTM3MCwgICAtMTIsICAtMjYxLCAgIDg1NiwgIDEwNTEsCisgICAgICA3NywgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwK
KyAgICAtMjYxLCAgLTI2MSwgICAtMTQsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgIDg0LCAgIC00
NCwgIDExMTYsICAgIDk1LAorICAgIC0yNjEsICAxMDUxLCAgICA1MywgICAgIDMsICAtMjYxLCAg
IC0zNiwgICAgODksICAtMjYxLCAgLTI2MSwgIC0yNjEsCisgICAgIDEwNCwgICAxMDcsICAgLTQ1
LCAgLTI2MSwgICAgOTYsICAtMjYxLCAgLTI2MSwgICAgOTEsICAxMTg0LCAgLTI2MSwKKyAgICAx
MzcwLCAgICA5MiwgICAgOTMsICAtMjYxLCAgICA5OCwgICAxMDEsICAgIDk0LCAgIDkyMSwgICAx
MDUsICAgMTAyLAorICAgIC0yNjEsICAtMjYxLCAgICA3MiwgIC0yNjEsICAtMjYxLCAgICAgOSwg
IC0yNjEsICAgLTYxLCAgICA0MiwgIC0yNjEsCisgICAgLTI2MSwgIC0yNjEsICAtMjYxLCAgIDM3
NiwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgMTA2LCAgLTI2MSwKKyAgICAtMjYxLCAg
IDk4NiwgIDEwNTEsICAtMjYxLCAgIDEwMywgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAg
LTQxLAorICAgIC0yNjEsICAtMjYxLCAgMTA1MSwgIDE0MDcsICAtMjYxLCAgLTI2MSwgIDEwNTEs
ICAgMTEwLCAgLTI2MSwgIC0yNjEsCisgICAgLTI2MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEw
NTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwKKyAgICAxMDUxLCAgMTA1MSwg
IDEwNTEsICAxMDUxLCAgMTA1MSwgIC0yNjEsICAgMTA5LCAgICAyMywgIC0yNjEsICAtMjYxLAor
ICAgIC0yNjEsICAxMjI3LCAgLTI2MSwgIC0yNjEsICAgMTExLCAgLTI2MSwgIDEwNTEsICAtMjYx
LCAgLTI2MSwgICAgMjUsCisgICAgLTI2MSwgIC0yNjEsICAgNDU5LCAgLTI2MSwgIC0yNjEsICAt
MjYxLCAgLTI2MSwgIC0yNjEsICAxMDUxLCAgMTA1MSwKKyAgICAtMjYxLCAgLTI2MSwgIC0yNjEs
ICAxMDUxLCAgLTI2MSwgICAxMTQsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgMTE1LAorICAgICAx
MTIsICAgIDc3LCAgIDExNiwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgICA1
MywgICAgNTMsCisgICAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAtMzYsICAgLTM2LCAg
LTI2MSwgICAxMDQsICAgMTA3LCAgICA3NiwKKyAgICAxMDUxLCAgICA5MSwgIC0yNjEsICAtMjYx
LCAgIDE0NSwgICAgNTQsICAgNjI1LCAgIDcwOCwgICAgLTYsICAtMjYxLAorICAgICA3OTEsICAg
NDU5LCAgLTI2MSwgIC0yNjEsICAgMTE3LCAgLTI2MSwgIC0yNjEsICAxMDUxLCAgIDEyMCwgIC0y
NjEsCisgICAgIDEyNCwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgNzkxLCAgIDExMSwg
ICAxMTIsICAgIDkxLCAgIDEyNSwKKyAgICAgMTIyLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgMTA1
MSwgIC0yNjEsICAgMTE4LCAgIDEyOCwgICAxODAsICAtMjYxLAorICAgICAxMjYsICAgNTQyLCAg
LTI2MSwgICAgLTUsICAxMDUxLCAgIDU0MiwgICAxMTEsICAxMDUxLCAgLTI2MSwgIC0yNjEsCisg
ICAgLTI2MSwgICAxMjMsICAgMTEyLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MQorfTsKKwor
LyogWVlQR09UT1tOVEVSTS1OVU1dLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlw
Z290b1tdID0KK3sKKyAgICAtMjYxLCAgIC0yNCwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgICAgMzQsICAtMjYxLAorICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAg
MzIsICAtMjYxLCAgIC0zMywgIC0yNjEsICAgLTI3LCAgIC0yNiwgIC0yNjEsCisgICAgLTI2MSwg
IC0yNjEsICAgIDE0LCAgICAxNiwgICAgMTgsICAtMjYxLCAgIC02NiwgICAtODcsICAtMjYxLCAg
IC05MiwKKyAgICAgLTg1LCAgICAxMSwgICAgMTIsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgMTQx
LCAgIDE1MCwgICAxNjEsICAgMTQzLAorICAgIC0yNjEsICAtMjYxLCAgLTIzMSwgICAgIDUsICAg
LTMwLCAgIDIyNCwgICAtMTgsICAgICAwLCAgLTI2MSwgIC0yNjEsCisgICAgLTI2MSwgICAxMDAs
ICAtMTE5LCAgLTI2MSwgICAtMTcsICAtMTU2LCAgIC0yNSwgIC0xNDUsICAtMjQzLCAgLTI2MSwK
KyAgICAtMjYxLCAgLTI2MSwgICAtNjQsICAtMjYwLCAgLTI2MSwgIC0yNjEsICAgLTUyLCAgICAy
MSwgICAtMjIsICAtMjYxLAorICAgIC0yNjEsICAgLTM5LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAg
LTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsCisgICAgLTI2MSwgICAxOTEsICAtMjYx
LCAgLTI2MQorfTsKKworLyogWVlUQUJMRVtZWVBBQ1RbU1RBVEUtTlVNXV0uICBXaGF0IHRvIGRv
IGluIHN0YXRlIFNUQVRFLU5VTS4gIElmCisgICBwb3NpdGl2ZSwgc2hpZnQgdGhhdCB0b2tlbi4g
IElmIG5lZ2F0aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hpY2gKKyAgIG51bWJlciBpcyB0aGUgb3Bw
b3NpdGUuICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci4gICovCisjZGVmaW5lIFlZVEFC
TEVfTklORiAtMTY2CitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5dGFibGVbXSA9Cit7Cisg
ICAgICA0NCwgICAgNTUsICAgMTY1LCAgIDE2NCwgICAxNjksICAgIDgwLCAgIDIyNiwgICAxMjMs
ICAgMjIyLCAgIDIwMCwKKyAgICAgIDcxLCAgICAzMiwgICAgMzMsICAgMjcyLCAgIDE5MywgICAg
NzAsICAgMjg4LCAgICA0OSwgICAxODUsICAgMTg2LAorICAgICAgNTYsICAgMTc4LCAgIDEyMywg
ICAgODgsICAgIDcyLCAgICA1MCwgICAgNTIsICAgIDUzLCAgIDE3NSwgICAyNzgsCisgICAgICA4
OSwgICAyMjgsICAgIDU4LCAgICA3NiwgICAxNzYsICAgIDg0LCAgIDMwNCwgICAyMTksICAgMTcw
LCAgIDE3MSwKKyAgICAgIDQ0LCAgICA2NiwgICAgNDQsICAgIDg2LCAgIDI3OCwgICAyMDksICAg
IDQ0LCAgIDEyNywgICAyOTgsICAgMTk0LAorICAgICAgNTksICAgIDQ0LCAgIDI5OCwgICAxODcs
ICAgMTg4LCAgICA4NCwgICAgNTQsICAgIDMyLCAgICAzMywgICAxNzIsCisgICAgIDE1OCwgICAx
NjEsICAgIDczLCAgIDE3MywgICAgNjYsICAgIDQ0LCAgIDI3NiwgICAzMDEsICAgMTYyLCAgICA2
OSwKKyAgICAgIDUzLCAgICA2NywgICAyMTksICAgMjE5LCAgICA2OCwgICAxNjUsICAgMjI1LCAg
ICA0NCwgICAgNjAsICAgMTQ4LAorICAgICAyMzAsICAgIDc4LCAgIDIwMCwgICAgIDYsICAgICA3
LCAgICA0NCwgICAxODMsICAgMjE5LCAgIDE4NCwgICAyMzUsCisgICAgIDIyMCwgICAgNjAsICAg
IDYxLCAgICA2MiwgICAgNjMsICAgMTIzLCAgICAgNiwgICAgIDcsICAgMTI3LCAgICA0OSwKKyAg
ICAgMTI3LCAgIDI1MSwgICAyNDksICAgMjE5LCAgIDI1MiwgICAxMTAsICAgMjU5LCAgICA4Nywg
ICAgNjEsICAgIDYyLAorICAgICAgNjMsICAgIDIzLCAgICAyNCwgICAtMjcsICAgMjU4LCAgICA3
MywgICAyMjIsICAgICAyLCAgICAgMywgICAgIDQsCisgICAgIDExMCwgICAgNjEsICAgIDYyLCAg
ICA2MywgICAgMjMsICAgIDI0LCAgIDE2NywgICAxNjgsICAgIDQ0LCAgICA3OSwKKyAgICAgIDQ0
LCAgIDI2MiwgICAyNjMsICAgMjEzLCAgIDIxNCwgICAyMTUsICAgIDUyLCAgICA1MywgICAyNjQs
ICAgMTgxLAorICAgICAxODIsICAgMzA1LCAgIDIxNiwgICAxODAsICAgMTI2LCAgIDE4OSwgICAx
OTAsICAgLTc2LCAgIC0yOCwgICAyMzMsCisgICAgIDIzOCwgICAyMzksICAgMjE3LCAgIDE0OCwg
ICAyMTksICAgMjY3LCAgIDE3NCwgICAxMjMsICAgMjQwLCAgIDI0MSwKKyAgICAgMjQyLCAgIDI0
MywgICAxOTEsICAgMjQ0LCAgIDI0NSwgICAyNjgsICAgMTc5LCAgIDE5MiwgICAyNzcsICAgMjA1
LAorICAgICAxOTUsICAgMTI3LCAgIDIwNiwgICAyMDIsICAgMjAzLCAgIDIwNywgICAyMTAsICAg
MjI3LCAgIDIxMSwgICAyMjMsCisgICAgIDI4MiwgIC0xMTcsICAgMjUwLCAgIDI3NywgICAxMjMs
ICAgMjcwLCAgLTE2NSwgIC0xMzgsICAgMjY1LCAgIDI2NiwKKyAgICAgMjE5LCAgIDI4MSwgICAy
OTMsICAgMTEwLCAgIDI4MywgICAyODQsICAgMjk2LCAgIDI5MSwgICAyOTIsICAgMjk0LAorICAg
ICAyOTUsICAgIDQ0LCAgIDMwMiwgICAyNzEsICAgMzA2LCAgIDI0NiwgICAyOTcsICAgMjM0LCAg
IDI0NywgICAgODEsCisgICAgIDE2NSwgICAyNDgsICAgMTQ4LCAgIDIzNiwgICAyMzcsICAgMTEw
LCAgIDExMCwgICAxMTAsICAgMTEwLCAgIDExMCwKKyAgICAgMTEwLCAgIDExMCwgICAxMTAsICAg
MTEwLCAgIDExMCwgICAxMTAsICAgMTU5LCAgICA4NSwgICAxNjAsICAgIDUxLAorICAgICAyMDEs
ICAgMzAzLCAgIDI3MywgICAyNjEsICAgMjY5LCAgIDI3NCwgICAyODUsICAgIDc1LCAgICAgMCwg
ICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
IDI5MCwgICAxMTAsICAgMTQ4LCAgIDE0OCwgICAgIDAsICAgICAwLAorICAgICAxNDgsICAgMTQ4
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
CisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ4LCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAxMTAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgMTQ4LCAgICAg
MCwgICAgIDAsICAgICAwLCAgIDE0OCwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsCisgICAg
ICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgIDEzMSwgICAxMzIsICAg
MTMzLCAgICAgMCwKKyAgICAgMTM0LCAgIDEzNSwgICAxMzYsICAgMTM3LCAgICAxMSwgICAgMTIs
ICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAorICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAg
MjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsCisgICAgICAyNCwg
ICAgMjUsICAgIDI2LCAgIDEzOCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDkwLCAg
ICAzMSwKKyAgICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1
LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTM5LCAgIDE0MCwK
KyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0MSwgICAgOTcsICAgIDk4LCAgICAg
MCwgICAgOTksICAgICAxLAorICAgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAg
ICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAxMzEsCisgICAgIDEzMiwgICAxMzMsICAgICAw
LCAgIDEzNCwgICAxMzUsICAgMTM2LCAgIDEzNywgICAgMTEsICAgIDEyLCAgICAxMywKKyAgICAg
IDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAg
MjIsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwg
ICAxMzgsICAgIDI3LCAgICAyOCwgICAgMjksCisgICAgICAzMCwgICAgOTAsICAgIDMxLCAgICA5
MSwgICAgOTIsICAgIDkzLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICA5NSwKKyAgICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgIDk2LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAxMzksICAgMjIxLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAxNDEsICAgIDk3LCAgICA5OCwKKyAgICAgICAwLCAgICA5OSwg
ICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LAor
ICAgICAgIDksICAgIDEwLCAgIDEzMSwgICAxMzIsICAgMTMzLCAgICAgMCwgICAxMzQsICAgMTM1
LCAgIDEzNiwgICAxMzcsCisgICAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAg
IDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwKKyAgICAgIDIxLCAgICAyMiwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgMTM4LAorICAgICAg
MjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLCAgICA5
MywgICAgIDAsCisgICAgICAgMCwgICAgOTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgOTYsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgMTM5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsCisgICAgIDE0MSwgICAgOTcsICAgIDk4LCAgICAgMCwgICAgOTksICAgICAxLCAgICAgMiwg
ICAgIDMsICAgICA0LCAgICAgNSwKKyAgICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAx
MCwgICAxMzEsICAgMTMyLCAgIDEzMywgICAgIDAsICAgMTM0LAorICAgICAxMzUsICAgMTM2LCAg
IDEzNywgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsCisg
ICAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgIDIzLCAgICAyNCwKKyAgICAgIDI1LCAgICAyNiwgICAxMzgsICAgIDI3LCAgICAyOCwgICAg
MjksICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLAorICAgICAgOTIsICAgIDkzLCAgICAgMCwg
ICAgIDAsICAgIDk0LCAgICA5NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICA3OSwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDEs
ICAgIDk3LCAgICA5OCwgICAgIDAsICAgIDk5LCAgICAgMSwgICAgIDIsCisgICAgICAgMywgICAg
IDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgMTMxLCAgIDEz
MiwKKyAgICAgMTMzLCAgICAgMCwgICAxMzQsICAgMTM1LCAgIDEzNiwgICAxMzcsICAgIDExLCAg
ICAxMiwgICAgMTMsICAgIDE0LAorICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5
LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgMjMsICAg
IDI0LCAgICAyNSwgICAgMjYsICAgMTM4LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKKyAg
ICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwg
ICAgOTUsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQxLCAgICA5NywgICAgOTgs
ICAgICAwLAorICAgICAgOTksICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgNSwgICAg
IDYsICAgICA3LCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwKKyAgICAgIDEyLCAgICAx
MywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIx
LAorICAgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAyNCwgICAgMjUsICAg
IDI2LCAgICAgMCwgICAgMjcsCisgICAgICAyOCwgICAgMjksICAgIDMwLCAgICA5MCwgICAgMzEs
ICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwKKyAgICAgIDk0LCAgICA5NSwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgOTYsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0MSwKKyAgICAgIDk3LCAgICA5OCwgICAgIDAsICAg
IDk5LCAgICA2MCwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDAsICAgICA2LAorICAgICAgIDcs
ICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAx
NSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAyMywgICAgMjQsICAgIDI1LAorICAgICAgMjYsICAgICAw
LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwgICAgOTIs
CisgICAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICA5
NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsCisgICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICA5NywgICAgOTgsICAgICAwLCAgICA5OSwgICAgMTEsICAg
IDEyLCAgICAxMywKKyAgICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTks
ICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksCisgICAgICAzMCwg
ICAgOTAsICAgIDMxLCAgICA5MSwgICAgOTIsICAgIDkzLCAgICAgMCwgICAgIDAsICAgIDk0LCAg
ICA5NSwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAsCisgICAgIDE2MywgICAgIDgs
ICAgICA5LCAgICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk3LCAgICA5OCwK
KyAgICAgICAwLCAgICA5OSwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAx
NiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjUsCisgICAgICAyNiwgICAgIDAsICAgIDI3
LCAgICAyOCwgICAgMjksICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwKKyAgICAg
IDkzLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICA5NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgIDk2LCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwKKyAgICAgICAwLCAg
ICAgMCwgICAyMDgsICAgIDk3LCAgICA5OCwgICAgIDAsICAgIDk5LCAgICAxMSwgICAgMTIsICAg
IDEzLAorICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAs
ICAgIDIxLCAgICAyMiwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
MjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwKKyAgICAgIDMwLCAgICA5MCwg
ICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LAor
ICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwKKyAgICAgMjI0LCAgICAgOCwgICAgIDks
ICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTcsICAgIDk4LAorICAgICAg
IDAsICAgIDk5LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAx
NywgICAgMTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwKKyAgICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4
LCAgICAyOSwgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLAorICAgICAgOTMsICAg
ICAwLCAgICAgMCwgICAgOTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgOTcsICAgIDk4LCAgICAgMCwgICAgOTksICAgIDExLCAgICAxMiwgICAgMTMsCisg
ICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEs
ICAgIDIyLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwgICAx
NzcsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LAorICAgICAgMzAsICAgIDkwLCAgICAzMSwg
ICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsCisgICAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICA5NiwgICAgIDIsICAgICAzLAorICAgICAgIDQsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICA5NywgICAgOTgsCisgICAgICAgMCwgICAg
OTksICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAx
NSwKKyAgICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAg
ICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAyNSwgICAgMjYsICAgICAw
LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgIDAsCisgICAgICAzMSwgICAgIDIsICAg
ICAzLCAgICAgNCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAgICAxMCwKKyAg
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgMTEsICAgIDEyLAorICAgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCisgICAgIDE5OSwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwKKyAgICAgIDI5
LCAgICAzMCwgICAgIDAsICAgIDMxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgNzQsICAgICAwLCAgICAgMCwgICAg
IDEsICAgICAyLCAgICAgMywgICAgIDQsCisgICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwg
ICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAg
MCwgICAgIDAsICAgMjUzLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2
LAorICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgMjMsCisgICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcs
ICAgIDI4LCAgICAyOSwgICAgMzAsICAgICAwLCAgICAzMSwKKyAgICAgICAxLCAgICAgMiwgICAg
IDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLAorICAg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAxMSwgICAgMTIsCisgICAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAg
IDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LAorICAgICAgMjks
ICAgIDMwLCAgICAgMCwgICAgMzEsICAgICAyLCAgICAgMywgICAgIDQsICAgICAwLCAgICAgMCwg
ICAgIDAsCisgICAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAxMSwgICAgMTIsICAgIDEzLCAg
ICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIx
LCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwgICAgMjYs
CisgICAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgICAwLCAgICAzMSwgICAg
IDgsICAgICA5LCAgICAxMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgMTEsICAgIDEyLAorICAgICAgMTMsICAgIDE0LCAgICAx
NSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCisgICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI1LCAgICAyNiwgICAgIDAsICAg
IDI3LCAgICAyOCwKKyAgICAgIDI5LCAgICAzMCwgICAyMzEsICAgMjMyLCAgICAgOCwgICAgIDks
ICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsCisgICAgICAxNiwg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAg
ICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4
LCAgICAyOSwgICAgMzAsICAgICAwLAorICAgICAgMzEKK307CisKKyNkZWZpbmUgeXlwYWN0X3Zh
bHVlX2lzX2RlZmF1bHQoWXlzdGF0ZSkgXAorICAoISEoKFl5c3RhdGUpID09ICgtMjYxKSkpCisK
KyNkZWZpbmUgeXl0YWJsZV92YWx1ZV9pc19lcnJvcihZeXRhYmxlX3ZhbHVlKSBcCisgIFlZSUQg
KDApCisKK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXljaGVja1tdID0KK3sKKyAgICAgICAw
LCAgICAyNSwgICAgODksICAgIDg4LCAgICA5NiwgICAgNTcsICAgMTYyLCAgICA3MywgICAxNTMs
ICAgMTI4LAorICAgICAgNDAsICAgICAwLCAgICAgMCwgICAyNTYsICAgIDU5LCAgICAzOSwgICAy
NzYsICAgIDM3LCAgICA1NCwgICAgNTUsCisgICAgICA4MSwgICAxMDgsICAgIDg4LCAgICA3Mywg
ICAgNDIsICAgIDQ1LCAgICA0NSwgICAgNDYsICAgIDcyLCAgIDI2MCwKKyAgICAgIDgwLCAgICA3
MiwgICAgNzIsICAgIDUxLCAgICA3OCwgICAgNjUsICAgMjk2LCAgICA3OCwgICAgNTIsICAgIDUz
LAorICAgICAgNDAsICAgIDM2LCAgICA0MiwgICAgNjcsICAgMjc1LCAgIDEzNywgICAgNDYsICAg
IDc3LCAgIDI5MSwgICAgOTQsCisgICAgICA3OCwgICAgNTEsICAgMjk1LCAgICA4OSwgICAgOTAs
ICAgIDg1LCAgICA3NSwgICAgNDYsICAgIDQ2LCAgICA3MywKKyAgICAgIDg0LCAgICA3MywgICAg
NzMsICAgIDc3LCAgICA1OSwgICAgNjUsICAgIDcyLCAgICA3MiwgICAgODAsICAgIDQ1LAorICAg
ICAgNDYsICAgIDc4LCAgICA3OCwgICAgNzgsICAgIDgxLCAgIDE2MiwgICAxNjEsICAgIDc3LCAg
ICAgMywgICAgNzksCisgICAgIDE3MiwgICAgNzUsICAgMjAxLCAgICAgOCwgICAgIDksICAgIDg1
LCAgICA4MywgICAgNzgsICAgIDg1LCAgIDE3NiwKKyAgICAgIDgxLCAgICAgMywgICAgMzMsICAg
IDM0LCAgICAzNSwgICAxNjEsICAgICA4LCAgICAgOSwgICAxMjgsICAgIDM3LAorICAgICAxMzAs
ICAgIDc4LCAgIDE5NCwgICAgNzgsICAgIDgxLCAgICA3MywgICAgODEsICAgIDcxLCAgICAzMywg
ICAgMzQsCisgICAgICAzNSwgICAgMzYsICAgIDM3LCAgICA3MSwgICAyMDYsICAgIDczLCAgIDI2
MSwgICAgIDQsICAgICA1LCAgICAgNiwKKyAgICAgIDg4LCAgICAzMywgICAgMzQsICAgIDM1LCAg
ICAzNiwgICAgMzcsICAgIDk0LCAgICA5NSwgICAxMjgsICAgIDc1LAorICAgICAxMzAsICAgMjE4
LCAgIDIxOSwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNDUsICAgIDQ2LCAgIDIyMywgICAgODYs
CisgICAgICA4NywgICAyOTcsICAgIDcwLCAgIDExMSwgICAgODEsICAgIDU2LCAgICA1NywgICAg
NzIsICAgIDcxLCAgIDE3MywKKyAgICAgMTgzLCAgIDE4NCwgICAgODAsICAgMTUzLCAgICA3OCwg
ICAgNzksICAgIDcyLCAgIDIyMywgICAxODUsICAgMTg2LAorICAgICAxODcsICAgMTg4LCAgICA1
OCwgICAxODksICAgMTkwLCAgIDI1MCwgICAgNzEsICAgIDYwLCAgIDI2MCwgICAgNzEsCisgICAg
ICA3NCwgICAyMDEsICAgIDcxLCAgICA4MSwgICAgODEsICAgIDgxLCAgICA3MSwgICAgNzQsICAg
IDc2LCAgICA3MywKKyAgICAgMjY3LCAgICA3MSwgICAgNzMsICAgMjc1LCAgIDI1MCwgICAgNDAs
ICAgIDc1LCAgICA3MSwgICAgNzQsICAgIDc0LAorICAgICAgNzgsICAgIDc0LCAgIDI4NCwgICAx
NjEsICAgIDc0LCAgICA3MSwgICAgMTYsICAgIDcyLCAgICA3NiwgICAgODEsCisgICAgICA3Miwg
ICAyMDEsICAgMjk0LCAgIDI1NSwgICAgODEsICAgMTkxLCAgICA4MCwgICAxNzMsICAgMTkyLCAg
ICA1OSwKKyAgICAgMjk3LCAgIDE5MywgICAyMTIsICAgMTgxLCAgIDE4MiwgICAxODMsICAgMTg0
LCAgIDE4NSwgICAxODYsICAgMTg3LAorICAgICAxODgsICAgMTg5LCAgIDE5MCwgICAxOTEsICAg
MTkyLCAgIDE5MywgICAgODUsICAgIDY2LCAgICA4NSwgICAgIDUsCisgICAgIDEzMCwgICAyOTUs
ICAgMjU3LCAgIDIxMiwgICAyNTEsICAgMjU3LCAgIDI3NSwgICAgNDYsICAgIC0xLCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMjc4LCAg
IDIyMywgICAyNTYsICAgMjU3LCAgICAtMSwgICAgLTEsCisgICAgIDI2MCwgICAyNjEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAyNzUsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgIDI1MCwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAyOTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgMjk1LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwKKyAgICAgICA3LCAg
ICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAg
IC0xLAorICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMs
ICAgIDI0LCAgICAyNSwgICAgMjYsCisgICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAg
MzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzNiwKKyAgICAgIDM3LCAgICAzOCwg
ICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAor
ICAgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMsICAgIC0x
LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzUsICAgIDc2LAorICAgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgxLCAgICA4MiwgICAgODMsICAgIC0xLCAgICA4
NSwgICAgIDMsCisgICAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAg
ICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywKKyAgICAgIDE0LCAgICAxNSwgICAgLTEsICAgIDE3
LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLAorICAgICAgMjQsICAg
IDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAg
LTEsCisgICAgICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwg
ICAgNDEsICAgIDQyLCAgICA0MywKKyAgICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0
OCwgICAgNDksICAgIC0xLCAgICAtMSwgICAgNTIsICAgIDUzLAorICAgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisg
ICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEs
ICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICA3NSwgICAgNzYsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICA4MSwgICAgODIsICAgIDgzLAorICAgICAgLTEsICAgIDg1LCAgICAgMywg
ICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsCisgICAgICAx
MSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIC0xLCAgICAxNywgICAgMTgsICAgIDE5
LCAgICAyMCwKKyAgICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAg
IDI3LCAgICAyOCwgICAgMjksICAgIDMwLAorICAgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsCisgICAgICA0MSwgICAg
NDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAt
MSwKKyAgICAgIC0xLCAgICA1MiwgICAgNTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICA3MSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgNzUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAg
ICAgIDgxLCAgICA4MiwgICAgODMsICAgIC0xLCAgICA4NSwgICAgIDMsICAgICA0LCAgICAgNSwg
ICAgIDYsICAgICA3LAorICAgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAx
MywgICAgMTQsICAgIDE1LCAgICAtMSwgICAgMTcsCisgICAgICAxOCwgICAgMTksICAgIDIwLCAg
ICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywKKyAgICAgIDI4
LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYs
ICAgIDM3LAorICAgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAg
NDQsICAgIDQ1LCAgICA0NiwgICAgNDcsCisgICAgICA0OCwgICAgNDksICAgIC0xLCAgICAtMSwg
ICAgNTIsICAgIDUzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IDc1LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MSwgICAgODIs
ICAgIDgzLCAgICAtMSwgICAgODUsICAgICAzLCAgICAgNCwKKyAgICAgICA1LCAgICAgNiwgICAg
IDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LAorICAg
ICAgMTUsICAgIC0xLCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAg
ICAyMywgICAgMjQsCisgICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMw
LCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAzNiwgICAgMzcsICAg
IDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LAorICAgICAgNDUs
ICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1Mywg
ICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODEsICAgIDgyLCAgICA4MywgICAgLTEs
CisgICAgICA4NSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAg
IDksICAgIDEwLCAgICAxMSwKKyAgICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIxLAorICAgICAgMjIsICAgIDIzLCAgICAy
NCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCisgICAg
ICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAg
IC0xLCAgICA0MSwKKyAgICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcs
ICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIC0xLAorICAgICAgNTIsICAgIDUzLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICA3MSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDgxLAorICAgICAgODIsICAgIDgzLCAgICAtMSwgICAgODUsICAg
ICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAtMSwgICAgIDgsCisgICAgICAgOSwgICAgMTAs
ICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAy
NiwgICAgMjcsICAgIDI4LAorICAgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgsCisgICAgICAzOSwgICAgLTEsICAgIDQx
LCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwKKyAgICAg
IDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIDcxLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwKKyAgICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDgyLCAgICA4MywgICAgLTEsICAgIDg1LCAgICAyMSwgICAgMjIsICAg
IDIzLAorICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAs
ICAgIDMxLCAgICAzMiwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
MzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywKKyAgICAgIDQ0LCAgICA0NSwg
ICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIC0xLCAgICAtMSwgICAgNTIsICAgIDUzLAor
ICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAtMSwKKyAgICAgIDc0LCAgICAxMCwgICAgMTEs
ICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODIsICAgIDgzLAorICAgICAg
LTEsICAgIDg1LCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAy
NywgICAgMjgsCisgICAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwKKyAgICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQy
LCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LAorICAgICAgNDksICAg
IC0xLCAgICAtMSwgICAgNTIsICAgIDUzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAg
ICA4MSwgICAgODIsICAgIDgzLCAgICAtMSwgICAgODUsICAgIDIxLCAgICAyMiwgICAgMjMsCisg
ICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEs
ICAgIDMyLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwgICAg
MzksICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQzLAorICAgICAgNDQsICAgIDQ1LCAgICA0Niwg
ICAgNDcsICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMsCisgICAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICA3MSwgICAgLTEsICAgIC0xLAorICAgICAgNzQsICAgIDEwLCAgICAxMSwgICAgMTIs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MiwgICAgODMsCisgICAgICAtMSwgICAg
ODUsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAy
OCwKKyAgICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDM4LAorICAgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQz
LCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsCisgICAgICA0OSwgICAgLTEsICAg
IC0xLCAgICA1MiwgICAgNTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAg
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICA4MiwgICAgODMsICAgIC0xLCAgICA4NSwgICAgMjEsICAgIDIyLCAgICAyMywKKyAgICAgIDI0
LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIs
ICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAg
LTEsICAgIDQxLCAgICA0MiwgICAgNDMsCisgICAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0Nywg
ICAgNDgsICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywKKyAgICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IDcxLCAgICAgNCwgICAgIDUsCisgICAgICAgNiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTAs
ICAgIDExLCAgICAxMiwgICAgLTEsICAgIDgyLCAgICA4MywKKyAgICAgIC0xLCAgICA4NSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LAorICAg
ICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAg
ICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQx
LCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICAtMSwKKyAgICAgIDQ2LCAgICAgNCwgICAgIDUsICAg
ICA2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxMCwgICAgMTEsICAgIDEyLAorICAgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwg
ICAgMjIsCisgICAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAy
OSwgICAgMzAsICAgIDMxLCAgICAzMiwKKyAgICAgIDc2LCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLAorICAgICAgNDMsICAgIDQ0
LCAgICAtMSwgICAgNDYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
CisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMCwgICAgLTEsICAgIC0xLCAgICAgMywgICAg
IDQsICAgICA1LCAgICAgNiwKKyAgICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwg
ICAgMTIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgNzYsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCisgICAg
ICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAzNiwKKyAgICAgIDM3LCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIs
ICAgIDQzLCAgICA0NCwgICAgLTEsICAgIDQ2LAorICAgICAgIDMsICAgICA0LCAgICAgNSwgICAg
IDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsCisgICAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIxLCAg
ICAyMiwKKyAgICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5
LCAgICAzMCwgICAgMzEsICAgIDMyLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsICAg
IDM3LCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsCisgICAgICA0MywgICAgNDQs
ICAgIC0xLCAgICA0NiwgICAgIDQsICAgICA1LCAgICAgNiwgICAgLTEsICAgIC0xLCAgICAtMSwK
KyAgICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAg
ICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCisgICAgICAzMCwgICAgMzEsICAgIDMy
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwKKyAgICAg
IC0xLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgLTEsICAgIDQ2LCAgICAxMCwgICAg
MTEsICAgIDEyLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsCisgICAgICAyMywgICAgMjQsICAgIDI1LCAgICAy
NiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwKKyAgICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAg
IDQyLAorICAgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDEwLCAgICAxMSwgICAgMTIs
ICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwKKyAgICAgIDI2LCAgICAyNywg
ICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLAor
ICAgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQz
LCAgICA0NCwgICAgLTEsCisgICAgICA0NgorfTsKKworLyogWVlTVE9TW1NUQVRFLU5VTV0gLS0g
VGhlIChpbnRlcm5hbCBudW1iZXIgb2YgdGhlKSBhY2Nlc3NpbmcKKyAgIHN5bWJvbCBvZiBzdGF0
ZSBTVEFURS1OVU0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXN0b3NbXSA9Cit7
CisgICAgICAgMCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAg
IDksICAgIDEwLCAgICAxMSwKKyAgICAgIDEyLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwg
ICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LAorICAgICAgMzAsICAgIDMxLCAgICAz
MiwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQxLCAgICA0MiwgICAgNDMsCisgICAg
ICA0NCwgICAgNDYsICAgMTI2LCAgIDEyNywgICAxMjgsICAgMTI5LCAgIDEzMCwgICAxMzUsICAg
MTM2LCAgIDEzNywKKyAgICAgMTM4LCAgIDEzOSwgICAxNDAsICAgMTQxLCAgIDE0MiwgICAxNDMs
ICAgMTc1LCAgIDE3NiwgICAxNzcsICAgIDM3LAorICAgICAgNDUsICAgMTQwLCAgICA0NSwgICAg
NDYsICAgIDc1LCAgICA5NiwgICAgODEsICAgMTc4LCAgICA3MiwgICAgNzgsCisgICAgICAgMywg
ICAgMzMsICAgIDM0LCAgICAzNSwgICAxMzIsICAgMTMzLCAgIDEzOCwgICAgNzgsICAgIDgxLCAg
ICA0NSwKKyAgICAgIDk2LCAgIDEzOSwgICAxNDEsICAgIDczLCAgICAgMCwgICAxNzYsICAgMTQx
LCAgIDE0NSwgICAgNzUsICAgIDc1LAorICAgICAxNjEsICAgMTMyLCAgIDEzMSwgICAxMzQsICAg
MTM5LCAgIDEzMywgICAgOTYsICAgIDcxLCAgICA3MywgICAgODAsCisgICAgICA0NSwgICAgNDcs
ICAgIDQ4LCAgICA0OSwgICAgNTIsICAgIDUzLCAgICA3MSwgICAgODIsICAgIDgzLCAgICA4NSwK
KyAgICAgIDk3LCAgICA5OCwgICAgOTksICAgMTAxLCAgIDEwMiwgICAxMDMsICAgMTA0LCAgIDEw
NSwgICAxMDYsICAgMTA3LAorICAgICAxMDgsICAgMTA5LCAgIDExMCwgICAxMTEsICAgMTEyLCAg
IDExMywgICAxMTQsICAgMTE1LCAgIDExNiwgICAxMTcsCisgICAgIDExOCwgICAxMTksICAgMTIw
LCAgIDEyMSwgICAxMjUsICAgMTQyLCAgICA4MSwgICAxMzksICAgMTQ2LCAgIDE0NywKKyAgICAg
MTQ0LCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
NDAsICAgIDc1LAorICAgICAgNzYsICAgIDgxLCAgIDEwOCwgICAxMjEsICAgMTIyLCAgIDEyNCwg
ICAxMjYsICAgMTI3LCAgIDE0MiwgICAxNTEsCisgICAgIDE1MiwgICAxNTMsICAgMTU0LCAgIDE2
MiwgICAxNjMsICAgMTY0LCAgIDE2NywgICAxNzQsICAgIDk2LCAgIDEzMSwKKyAgICAgMTM0LCAg
ICA3MywgICAgODAsICAgIDc0LCAgIDEyNSwgICAxMjIsICAgMTUwLCAgIDEwOCwgICAxMDgsICAg
MTI0LAorICAgICAgNTIsICAgIDUzLCAgICA3MywgICAgNzcsICAgIDcyLCAgICA3MiwgICAgNzgs
ICAgIDM5LCAgIDEyMiwgICAgNzEsCisgICAgIDEwOCwgICAgODYsICAgIDg3LCAgICA4MywgICAg
ODUsICAgIDU0LCAgICA1NSwgICAgODksICAgIDkwLCAgICA1NiwKKyAgICAgIDU3LCAgICA1OCwg
ICAgNjAsICAgIDU5LCAgICA5NCwgICAgNzQsICAgIDk2LCAgIDE0OCwgICAxNDksICAgIDc2LAor
ICAgICAxNDcsICAgMTQ2LCAgICA4MSwgICAgODEsICAgMTY5LCAgICA3MSwgICAgNzEsICAgIDgx
LCAgICA4MSwgICAxMjQsCisgICAgICA3MSwgICAgNzYsICAgMTU1LCAgICA2MSwgICAgNjIsICAg
IDYzLCAgICA3MCwgICAgODAsICAgMTIzLCAgICA3OCwKKyAgICAgIDgxLCAgICA3NiwgICAxNTIs
ICAgIDczLCAgICA3NCwgICAxMjUsICAgMTUwLCAgICA3NCwgICAgNzIsICAgMTAwLAorICAgICAx
MjQsICAgIDQ1LCAgICA0NiwgICAgOTYsICAgMTAzLCAgIDEyMiwgICAxMDgsICAgMTA4LCAgIDEx
MCwgICAxMTAsCisgICAgIDExMiwgICAxMTIsICAgMTEyLCAgIDExMiwgICAxMTMsICAgMTEzLCAg
IDExNywgICAxMTgsICAgMTE5LCAgIDEyNCwKKyAgICAgIDczLCAgICA3OCwgICAgODEsICAgIDc2
LCAgIDE1OCwgICAxNTksICAgMTYwLCAgIDE3MCwgICAxMjQsICAgIDgxLAorICAgICAxNjgsICAg
MTYyLCAgIDEyMiwgICAxMjIsICAgMTI1LCAgICA3NCwgICAgNzQsICAgIDc5LCAgIDEyNSwgICAx
NDksCisgICAgICA0MCwgICAxNjEsICAgMTUzLCAgIDE1MSwgICAxNjMsICAgMTcxLCAgICA3Miwg
ICAxMjQsICAgMTM3LCAgIDE2NiwKKyAgICAgMTU2LCAgICA3NCwgICAxMjIsICAgIDc0LCAgICA3
MSwgICAxNjYsICAgMTcyLCAgIDE3MywgICAxNTgsICAgMTY1LAorICAgICAgOTYsICAgIDcyLCAg
ICA3NiwgICAxMjQsICAgIDgxLCAgICA3MiwgICAgMTYsICAgIDgwLCAgIDE1MywgICAxNTcsCisg
ICAgIDE2MSwgICAgNzIsICAgMTI0LCAgIDE1NywgICAxNTgsICAgMTUwLCAgICA4MQorfTsKKwor
I2RlZmluZSB5eWVycm9rCQkoeXllcnJzdGF0dXMgPSAwKQorI2RlZmluZSB5eWNsZWFyaW4JKHl5
Y2hhciA9IFlZRU1QVFkpCisjZGVmaW5lIFlZRU1QVFkJCSgtMikKKyNkZWZpbmUgWVlFT0YJCTAK
KworI2RlZmluZSBZWUFDQ0VQVAlnb3RvIHl5YWNjZXB0bGFiCisjZGVmaW5lIFlZQUJPUlQJCWdv
dG8geXlhYm9ydGxhYgorI2RlZmluZSBZWUVSUk9SCQlnb3RvIHl5ZXJyb3JsYWIKKworCisvKiBM
aWtlIFlZRVJST1IgZXhjZXB0IGRvIGNhbGwgeXllcnJvci4gIFRoaXMgcmVtYWlucyBoZXJlIHRl
bXBvcmFyaWx5CisgICB0byBlYXNlIHRoZSB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgbWVhbmluZyBv
ZiBZWUVSUk9SLCBmb3IgR0NDLgorICAgT25jZSBHQ0MgdmVyc2lvbiAyIGhhcyBzdXBwbGFudGVk
IHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICBIb3dldmVyLAorICAgWVlGQUlMIGFwcGVhcnMgdG8g
YmUgaW4gdXNlLiAgTmV2ZXJ0aGVsZXNzLCBpdCBpcyBmb3JtYWxseSBkZXByZWNhdGVkCisgICBp
biBCaXNvbiAyLjQuMidzIE5FV1MgZW50cnksIHdoZXJlIGEgcGxhbiB0byBwaGFzZSBpdCBvdXQg
aXMKKyAgIGRpc2N1c3NlZC4gICovCisKKyNkZWZpbmUgWVlGQUlMCQlnb3RvIHl5ZXJybGFiCisj
aWYgZGVmaW5lZCBZWUZBSUwKKyAgLyogVGhpcyBpcyBoZXJlIHRvIHN1cHByZXNzIHdhcm5pbmdz
IGZyb20gdGhlIEdDQyBjcHAncworICAgICAtV3VudXNlZC1tYWNyb3MuICBOb3JtYWxseSB3ZSBk
b24ndCB3b3JyeSBhYm91dCB0aGF0IHdhcm5pbmcsIGJ1dAorICAgICBzb21lIHVzZXJzIGRvLCBh
bmQgd2Ugd2FudCB0byBtYWtlIGl0IGVhc3kgZm9yIHVzZXJzIHRvIHJlbW92ZQorICAgICBZWUZB
SUwgdXNlcywgd2hpY2ggd2lsbCBwcm9kdWNlIHdhcm5pbmdzIGZyb20gQmlzb24gMi41LiAgKi8K
KyNlbmRpZgorCisjZGVmaW5lIFlZUkVDT1ZFUklORygpICAoISF5eWVycnN0YXR1cykKKworI2Rl
ZmluZSBZWUJBQ0tVUChUb2tlbiwgVmFsdWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKK2RvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHl5Y2hhciA9IChUb2tl
bik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB5eWx2
YWwgPSAoVmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgWVlQT1BTVEFDSyAoeXlsZW4pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgIHl5c3RhdGUgPSAqeXlzc3A7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICBnb3RvIHl5YmFja3VwOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZWxzZSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgeXllcnJvciAoJnl5bGxvYywgY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3I6IGNh
bm5vdCBiYWNrIHVwIikpOyBcCisgICAgICBZWUVSUk9SOwkJCQkJCQlcCisgICAgfQkJCQkJCQkJ
XAord2hpbGUgKFlZSUQgKDApKQorCisvKiBFcnJvciB0b2tlbiBudW1iZXIgKi8KKyNkZWZpbmUg
WVlURVJST1IJMQorI2RlZmluZSBZWUVSUkNPREUJMjU2CisKKworLyogWVlMTE9DX0RFRkFVTFQg
LS0gU2V0IENVUlJFTlQgdG8gc3BhbiBmcm9tIFJIU1sxXSB0byBSSFNbTl0uCisgICBJZiBOIGlz
IDAsIHRoZW4gc2V0IENVUlJFTlQgdG8gdGhlIGVtcHR5IGxvY2F0aW9uIHdoaWNoIGVuZHMKKyAg
IHRoZSBwcmV2aW91cyBzeW1ib2w6IFJIU1swXSAoYWx3YXlzIGRlZmluZWQpLiAgKi8KKworI2lm
bmRlZiBZWUxMT0NfREVGQVVMVAorIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhz
LCBOKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgaWYgKFlZSUQgKE4pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChDdXJyZW50KS5m
aXJzdF9saW5lICAgPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9saW5lOyAgICAgICAgXAorICAg
ICAgICAgIChDdXJyZW50KS5maXJzdF9jb2x1bW4gPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9j
b2x1bW47ICAgICAgXAorICAgICAgICAgIChDdXJyZW50KS5sYXN0X2xpbmUgICAgPSBZWVJIU0xP
QyAoUmhzLCBOKS5sYXN0X2xpbmU7ICAgICAgICAgXAorICAgICAgICAgIChDdXJyZW50KS5sYXN0
X2NvbHVtbiAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2NvbHVtbjsgICAgICAgXAorICAgICAg
ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg
IChDdXJyZW50KS5maXJzdF9saW5lICAgPSAoQ3VycmVudCkubGFzdF9saW5lICAgPSAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9saW5lOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChDdXJyZW50KS5maXJzdF9jb2x1
bW4gPSAoQ3VycmVudCkubGFzdF9jb2x1bW4gPSAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
WVlSSFNMT0MgKFJocywgMCkubGFzdF9jb2x1bW47ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIHdoaWxlIChZWUlEICgwKSkKKyNlbmRpZgorCisj
ZGVmaW5lIFlZUkhTTE9DKFJocywgSykgKChSaHMpW0tdKQorCisKKy8qIFlZX0xPQ0FUSU9OX1BS
SU5UIC0tIFByaW50IHRoZSBsb2NhdGlvbiBvbiB0aGUgc3RyZWFtLgorICAgVGhpcyBtYWNybyB3
YXMgbm90IG1hbmRhdGVkIG9yaWdpbmFsbHk6IGRlZmluZSBvbmx5IGlmIHdlIGtub3cKKyAgIHdl
IHdvbid0IGJyZWFrIHVzZXIgY29kZTogd2hlbiB0aGVzZSBhcmUgdGhlIGxvY2F0aW9ucyB3ZSBr
bm93LiAgKi8KKworI2lmbmRlZiBZWV9MT0NBVElPTl9QUklOVAorIyBpZiBkZWZpbmVkIFlZTFRZ
UEVfSVNfVFJJVklBTCAmJiBZWUxUWVBFX0lTX1RSSVZJQUwKKworLyogUHJpbnQgKllZTE9DUCBv
biBZWU8uICBQcml2YXRlLCBkbyBub3QgcmVseSBvbiBpdHMgZXhpc3RlbmNlLiAqLworCitfX2F0
dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVk
IF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQg
X01TQ19WRVIpCitzdGF0aWMgdW5zaWduZWQKK3l5X2xvY2F0aW9uX3ByaW50XyAoRklMRSAqeXlv
LCBZWUxUWVBFIGNvbnN0ICogY29uc3QgeXlsb2NwKQorI2Vsc2UKK3N0YXRpYyB1bnNpZ25lZAor
eXlfbG9jYXRpb25fcHJpbnRfICh5eW8sIHl5bG9jcCkKKyAgICBGSUxFICp5eW87CisgICAgWVlM
VFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jcDsKKyNlbmRpZgoreworICB1bnNpZ25lZCByZXMgPSAw
OworICBpbnQgZW5kX2NvbCA9IDAgIT0geXlsb2NwLT5sYXN0X2NvbHVtbiA/IHl5bG9jcC0+bGFz
dF9jb2x1bW4gLSAxIDogMDsKKyAgaWYgKDAgPD0geXlsb2NwLT5maXJzdF9saW5lKQorICAgIHsK
KyAgICAgIHJlcyArPSBmcHJpbnRmICh5eW8sICIlZCIsIHl5bG9jcC0+Zmlyc3RfbGluZSk7Cisg
ICAgICBpZiAoMCA8PSB5eWxvY3AtPmZpcnN0X2NvbHVtbikKKyAgICAgICAgcmVzICs9IGZwcmlu
dGYgKHl5bywgIi4lZCIsIHl5bG9jcC0+Zmlyc3RfY29sdW1uKTsKKyAgICB9CisgIGlmICgwIDw9
IHl5bG9jcC0+bGFzdF9saW5lKQorICAgIHsKKyAgICAgIGlmICh5eWxvY3AtPmZpcnN0X2xpbmUg
PCB5eWxvY3AtPmxhc3RfbGluZSkKKyAgICAgICAgeworICAgICAgICAgIHJlcyArPSBmcHJpbnRm
ICh5eW8sICItJWQiLCB5eWxvY3AtPmxhc3RfbGluZSk7CisgICAgICAgICAgaWYgKDAgPD0gZW5k
X2NvbCkKKyAgICAgICAgICAgIHJlcyArPSBmcHJpbnRmICh5eW8sICIuJWQiLCBlbmRfY29sKTsK
KyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoMCA8PSBlbmRfY29sICYmIHl5bG9jcC0+Zmlyc3Rf
Y29sdW1uIDwgZW5kX2NvbCkKKyAgICAgICAgcmVzICs9IGZwcmludGYgKHl5bywgIi0lZCIsIGVu
ZF9jb2wpOworICAgIH0KKyAgcmV0dXJuIHJlczsKKyB9CisKKyMgIGRlZmluZSBZWV9MT0NBVElP
Tl9QUklOVChGaWxlLCBMb2MpICAgICAgICAgIFwKKyAgeXlfbG9jYXRpb25fcHJpbnRfIChGaWxl
LCAmKExvYykpCisKKyMgZWxzZQorIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExv
YykgKCh2b2lkKSAwKQorIyBlbmRpZgorI2VuZGlmCisKKworLyogWVlMRVggLS0gY2FsbGluZyBg
eXlsZXgnIHdpdGggdGhlIHJpZ2h0IGFyZ3VtZW50cy4gICovCisjaWZkZWYgWVlMRVhfUEFSQU0K
KyMgZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsLCAmeXlsbG9jLCBZWUxFWF9QQVJBTSkKKyNl
bHNlCisjIGRlZmluZSBZWUxFWCB5eWxleCAoJnl5bHZhbCwgJnl5bGxvYykKKyNlbmRpZgorCisv
KiBFbmFibGUgZGVidWdnaW5nIGlmIHJlcXVlc3RlZC4gICovCisjaWYgWVlERUJVRworCisjIGlm
bmRlZiBZWUZQUklOVEYKKyMgIGluY2x1ZGUgPHN0ZGlvLmg+IC8qIElORlJJTkdFUyBPTiBVU0VS
IE5BTUUgU1BBQ0UgKi8KKyMgIGRlZmluZSBZWUZQUklOVEYgZnByaW50ZgorIyBlbmRpZgorCisj
IGRlZmluZSBZWURQUklOVEYoQXJncykJCQlcCitkbyB7CQkJCQkJXAorICBpZiAoeXlkZWJ1ZykJ
CQkJCVwKKyAgICBZWUZQUklOVEYgQXJnczsJCQkJXAorfSB3aGlsZSAoWVlJRCAoMCkpCisKKyMg
ZGVmaW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKQkJCSAg
XAorZG8gewkJCQkJCQkJCSAgXAorICBpZiAoeXlkZWJ1ZykJCQkJCQkJCSAgXAorICAgIHsJCQkJ
CQkJCQkgIFwKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgVGl0bGUpOwkJCQkJICBc
CisgICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwJCQkJCQkgIFwKKwkJICBUeXBlLCBWYWx1
ZSwgTG9jYXRpb24sIGNvbnRleHQpOyBcCisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7
CQkJCQkJICBcCisgICAgfQkJCQkJCQkJCSAgXAorfSB3aGlsZSAoWVlJRCAoMCkpCisKKworLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUHJpbnQgdGhpcyBzeW1ib2wgb24g
WVlPVVRQVVQuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKkFS
R1NVU0VEKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18g
XAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0
aWMgdm9pZAoreXlfc3ltYm9sX3ZhbHVlX3ByaW50IChGSUxFICp5eW91dHB1dCwgaW50IHl5dHlw
ZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwLCBZWUxUWVBFIGNvbnN0ICogY29uc3Qg
eXlsb2NhdGlvbnAsIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQK
K3l5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9j
YXRpb25wLCBjb250ZXh0KQorICAgIEZJTEUgKnl5b3V0cHV0OworICAgIGludCB5eXR5cGU7Cisg
ICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOworICAgIFlZTFRZUEUgY29uc3QgKiBj
b25zdCB5eWxvY2F0aW9ucDsKKyAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0OworI2VuZGlmCit7
CisgIEZJTEUgKnl5byA9IHl5b3V0cHV0OworICBZWVVTRSAoeXlvKTsKKyAgaWYgKCF5eXZhbHVl
cCkKKyAgICByZXR1cm47CisgIFlZVVNFICh5eWxvY2F0aW9ucCk7CisgIFlZVVNFIChjb250ZXh0
KTsKKyMgaWZkZWYgWVlQUklOVAorICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQorICAgIFlZUFJJ
TlQgKHl5b3V0cHV0LCB5eXRva251bVt5eXR5cGVdLCAqeXl2YWx1ZXApOworIyBlbHNlCisgIFlZ
VVNFICh5eW91dHB1dCk7CisjIGVuZGlmCisgIFlZVVNFICh5eXR5cGUpOworfQorCisKKy8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZ
T1VUUFVULiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIChk
ZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmlu
ZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9zeW1i
b2xfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29u
c3QgeXl2YWx1ZXAsIFlZTFRZUEUgY29uc3QgKiBjb25zdCB5eWxvY2F0aW9ucCwgVFBhcnNlQ29u
dGV4dCogY29udGV4dCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ByaW50ICh5eW91
dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAsIGNvbnRleHQpCisgICAgRklMRSAq
eXlvdXRwdXQ7CisgICAgaW50IHl5dHlwZTsKKyAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2
YWx1ZXA7CisgICAgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jYXRpb25wOworICAgIFRQYXJz
ZUNvbnRleHQqIGNvbnRleHQ7CisjZW5kaWYKK3sKKyAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykK
KyAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAidG9rZW4gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7
CisgIGVsc2UKKyAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAibnRlcm0gJXMgKCIsIHl5dG5hbWVb
eXl0eXBlXSk7CisKKyAgWVlfTE9DQVRJT05fUFJJTlQgKHl5b3V0cHV0LCAqeXlsb2NhdGlvbnAp
OworICBZWUZQUklOVEYgKHl5b3V0cHV0LCAiOiAiKTsKKyAgeXlfc3ltYm9sX3ZhbHVlX3ByaW50
ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAsIGNvbnRleHQpOworICBZ
WUZQUklOVEYgKHl5b3V0cHV0LCAiKSIpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlfc3RhY2tf
cHJpbnQgLS0gUHJpbnQgdGhlIHN0YXRlIHN0YWNrIGZyb20gaXRzIEJPVFRPTSB1cCB0byBpdHMg
fAorfCBUT1AgKGluY2x1ZGVkKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8
IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwg
ZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9zdGFja19wcmludCAoeXl0eXBlX2lu
dDE2ICp5eWJvdHRvbSwgeXl0eXBlX2ludDE2ICp5eXRvcCkKKyNlbHNlCitzdGF0aWMgdm9pZAor
eXlfc3RhY2tfcHJpbnQgKHl5Ym90dG9tLCB5eXRvcCkKKyAgICB5eXR5cGVfaW50MTYgKnl5Ym90
dG9tOworICAgIHl5dHlwZV9pbnQxNiAqeXl0b3A7CisjZW5kaWYKK3sKKyAgWVlGUFJJTlRGIChz
dGRlcnIsICJTdGFjayBub3ciKTsKKyAgZm9yICg7IHl5Ym90dG9tIDw9IHl5dG9wOyB5eWJvdHRv
bSsrKQorICAgIHsKKyAgICAgIGludCB5eWJvdCA9ICp5eWJvdHRvbTsKKyAgICAgIFlZRlBSSU5U
RiAoc3RkZXJyLCAiICVkIiwgeXlib3QpOworICAgIH0KKyAgWVlGUFJJTlRGIChzdGRlcnIsICJc
biIpOworfQorCisjIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkJCQkJXAorZG8g
ewkJCQkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJCQkJXAorICAgIHl5X3N0YWNrX3ByaW50ICgo
Qm90dG9tKSwgKFRvcCkpOwkJCQlcCit9IHdoaWxlIChZWUlEICgwKSkKKworCisvKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUmVwb3J0IHRoYXQg
dGhlIFlZUlVMRSBpcyBnb2luZyB0byBiZSByZWR1Y2VkLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZiAoZGVmaW5lZCBfX1NURENf
XyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVz
IHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlfcmVkdWNlX3ByaW50IChZWVNU
WVBFICp5eXZzcCwgWVlMVFlQRSAqeXlsc3AsIGludCB5eXJ1bGUsIFRQYXJzZUNvbnRleHQqIGNv
bnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3JlZHVjZV9wcmludCAoeXl2c3AsIHl5bHNw
LCB5eXJ1bGUsIGNvbnRleHQpCisgICAgWVlTVFlQRSAqeXl2c3A7CisgICAgWVlMVFlQRSAqeXls
c3A7CisgICAgaW50IHl5cnVsZTsKKyAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0OworI2VuZGlm
Cit7CisgIGludCB5eW5yaHMgPSB5eXIyW3l5cnVsZV07CisgIGludCB5eWk7CisgIHVuc2lnbmVk
IGxvbmcgaW50IHl5bG5vID0geXlybGluZVt5eXJ1bGVdOworICBZWUZQUklOVEYgKHN0ZGVyciwg
IlJlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgJWQgKGxpbmUgJWx1KTpcbiIsCisJICAgICB5eXJ1bGUg
LSAxLCB5eWxubyk7CisgIC8qIFRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQuICAqLworICBmb3Ig
KHl5aSA9IDA7IHl5aSA8IHl5bnJoczsgeXlpKyspCisgICAgeworICAgICAgWVlGUFJJTlRGIChz
dGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAxKTsKKyAgICAgIHl5X3N5bWJvbF9wcmludCAoc3Rk
ZXJyLCB5eXJoc1t5eXByaHNbeXlydWxlXSArIHl5aV0sCisJCSAgICAgICAmKHl5dnNwWyh5eWkg
KyAxKSAtICh5eW5yaHMpXSkKKwkJICAgICAgICwgJih5eWxzcFsoeXlpICsgMSkgLSAoeXlucmhz
KV0pCQkgICAgICAgLCBjb250ZXh0KTsKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsK
KyAgICB9Cit9CisKKyMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQkJXAorZG8gewkJCQkJ
XAorICBpZiAoeXlkZWJ1ZykJCQkJXAorICAgIHl5X3JlZHVjZV9wcmludCAoeXl2c3AsIHl5bHNw
LCBSdWxlLCBjb250ZXh0KTsgXAorfSB3aGlsZSAoWVlJRCAoMCkpCisKKy8qIE5vbnplcm8gbWVh
bnMgcHJpbnQgcGFyc2UgdHJhY2UuICBJdCBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQgc28gdGhhdAor
ICAgbXVsdGlwbGUgcGFyc2VycyBjYW4gY29leGlzdC4gICovCitpbnQgeXlkZWJ1ZzsKKyNlbHNl
IC8qICFZWURFQlVHICovCisjIGRlZmluZSBZWURQUklOVEYoQXJncykKKyMgZGVmaW5lIFlZX1NZ
TUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKQorIyBkZWZpbmUgWVlfU1RB
Q0tfUFJJTlQoQm90dG9tLCBUb3ApCisjIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkKKyNl
bmRpZiAvKiAhWVlERUJVRyAqLworCisKKy8qIFlZSU5JVERFUFRIIC0tIGluaXRpYWwgc2l6ZSBv
ZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAgKi8KKyNpZm5kZWYJWVlJTklUREVQVEgKKyMgZGVmaW5l
IFlZSU5JVERFUFRIIDIwMAorI2VuZGlmCisKKy8qIFlZTUFYREVQVEggLS0gbWF4aW11bSBzaXpl
IHRoZSBzdGFja3MgY2FuIGdyb3cgdG8gKGVmZmVjdGl2ZSBvbmx5CisgICBpZiB0aGUgYnVpbHQt
aW4gc3RhY2sgZXh0ZW5zaW9uIG1ldGhvZCBpcyB1c2VkKS4KKworICAgRG8gbm90IG1ha2UgdGhp
cyB2YWx1ZSB0b28gbGFyZ2U7IHRoZSByZXN1bHRzIGFyZSB1bmRlZmluZWQgaWYKKyAgIFlZU1RB
Q0tfQUxMT0NfTUFYSU1VTSA8IFlZU1RBQ0tfQllURVMgKFlZTUFYREVQVEgpCisgICBldmFsdWF0
ZWQgd2l0aCBpbmZpbml0ZS1wcmVjaXNpb24gaW50ZWdlciBhcml0aG1ldGljLiAgKi8KKworI2lm
bmRlZiBZWU1BWERFUFRICisjIGRlZmluZSBZWU1BWERFUFRIIDEwMDAwCisjZW5kaWYKKworCisj
aWYgWVlFUlJPUl9WRVJCT1NFCisKKyMgaWZuZGVmIHl5c3RybGVuCisjICBpZiBkZWZpbmVkIF9f
R0xJQkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdfSAorIyAgIGRlZmluZSB5eXN0cmxlbiBzdHJsZW4K
KyMgIGVsc2UKKy8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIFlZU1RSLiAgKi8KKyNpZiAoZGVmaW5l
ZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9f
Y3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgWVlTSVpFX1QKK3l5c3RybGVu
IChjb25zdCBjaGFyICp5eXN0cikKKyNlbHNlCitzdGF0aWMgWVlTSVpFX1QKK3l5c3RybGVuICh5
eXN0cikKKyAgICBjb25zdCBjaGFyICp5eXN0cjsKKyNlbmRpZgoreworICBZWVNJWkVfVCB5eWxl
bjsKKyAgZm9yICh5eWxlbiA9IDA7IHl5c3RyW3l5bGVuXTsgeXlsZW4rKykKKyAgICBjb250aW51
ZTsKKyAgcmV0dXJuIHl5bGVuOworfQorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZm5kZWYgeXlz
dHBjcHkKKyMgIGlmIGRlZmluZWQgX19HTElCQ19fICYmIGRlZmluZWQgX1NUUklOR19IICYmIGRl
ZmluZWQgX0dOVV9TT1VSQ0UKKyMgICBkZWZpbmUgeXlzdHBjcHkgc3RwY3B5CisjICBlbHNlCisv
KiBDb3B5IFlZU1JDIHRvIFlZREVTVCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSB0ZXJt
aW5hdGluZyAnXDAnIGluCisgICBZWURFU1QuICAqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8
IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwg
ZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyBjaGFyICoKK3l5c3RwY3B5IChjaGFyICp5eWRlc3Qs
IGNvbnN0IGNoYXIgKnl5c3JjKQorI2Vsc2UKK3N0YXRpYyBjaGFyICoKK3l5c3RwY3B5ICh5eWRl
c3QsIHl5c3JjKQorICAgIGNoYXIgKnl5ZGVzdDsKKyAgICBjb25zdCBjaGFyICp5eXNyYzsKKyNl
bmRpZgoreworICBjaGFyICp5eWQgPSB5eWRlc3Q7CisgIGNvbnN0IGNoYXIgKnl5cyA9IHl5c3Jj
OworCisgIHdoaWxlICgoKnl5ZCsrID0gKnl5cysrKSAhPSAnXDAnKQorICAgIGNvbnRpbnVlOwor
CisgIHJldHVybiB5eWQgLSAxOworfQorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZm5kZWYgeXl0
bmFtZXJyCisvKiBDb3B5IHRvIFlZUkVTIHRoZSBjb250ZW50cyBvZiBZWVNUUiBhZnRlciBzdHJp
cHBpbmcgYXdheSB1bm5lY2Vzc2FyeQorICAgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcywgc28gdGhh
dCBpdCdzIHN1aXRhYmxlIGZvciB5eWVycm9yLiAgVGhlCisgICBoZXVyaXN0aWMgaXMgdGhhdCBk
b3VibGUtcXVvdGluZyBpcyB1bm5lY2Vzc2FyeSB1bmxlc3MgdGhlIHN0cmluZworICAgY29udGFp
bnMgYW4gYXBvc3Ryb3BoZSwgYSBjb21tYSwgb3IgYmFja3NsYXNoIChvdGhlciB0aGFuCisgICBi
YWNrc2xhc2gtYmFja3NsYXNoKS4gIFlZU1RSIGlzIHRha2VuIGZyb20geXl0bmFtZS4gIElmIFlZ
UkVTIGlzCisgICBudWxsLCBkbyBub3QgY29weTsgaW5zdGVhZCwgcmV0dXJuIHRoZSBsZW5ndGgg
b2Ygd2hhdCB0aGUgcmVzdWx0CisgICB3b3VsZCBoYXZlIGJlZW4uICAqLworc3RhdGljIFlZU0la
RV9UCit5eXRuYW1lcnIgKGNoYXIgKnl5cmVzLCBjb25zdCBjaGFyICp5eXN0cikKK3sKKyAgaWYg
KCp5eXN0ciA9PSAnIicpCisgICAgeworICAgICAgWVlTSVpFX1QgeXluID0gMDsKKyAgICAgIGNo
YXIgY29uc3QgKnl5cCA9IHl5c3RyOworCisgICAgICBmb3IgKDs7KQorCXN3aXRjaCAoKisreXlw
KQorCSAgeworCSAgY2FzZSAnXCcnOgorCSAgY2FzZSAnLCc6CisJICAgIGdvdG8gZG9fbm90X3N0
cmlwX3F1b3RlczsKKworCSAgY2FzZSAnXFwnOgorCSAgICBpZiAoKisreXlwICE9ICdcXCcpCisJ
ICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOworCSAgICAvKiBGYWxsIHRocm91Z2guICAq
LworCSAgZGVmYXVsdDoKKwkgICAgaWYgKHl5cmVzKQorCSAgICAgIHl5cmVzW3l5bl0gPSAqeXlw
OworCSAgICB5eW4rKzsKKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgJyInOgorCSAgICBpZiAoeXly
ZXMpCisJICAgICAgeXlyZXNbeXluXSA9ICdcMCc7CisJICAgIHJldHVybiB5eW47CisJICB9Cisg
ICAgZG9fbm90X3N0cmlwX3F1b3RlczogOworICAgIH0KKworICBpZiAoISB5eXJlcykKKyAgICBy
ZXR1cm4geXlzdHJsZW4gKHl5c3RyKTsKKworICByZXR1cm4geXlzdHBjcHkgKHl5cmVzLCB5eXN0
cikgLSB5eXJlczsKK30KKyMgZW5kaWYKKworLyogQ29weSBpbnRvICpZWU1TRywgd2hpY2ggaXMg
b2Ygc2l6ZSAqWVlNU0dfQUxMT0MsIGFuIGVycm9yIG1lc3NhZ2UKKyAgIGFib3V0IHRoZSB1bmV4
cGVjdGVkIHRva2VuIFlZVE9LRU4gZm9yIHRoZSBzdGF0ZSBzdGFjayB3aG9zZSB0b3AgaXMKKyAg
IFlZU1NQLgorCisgICBSZXR1cm4gMCBpZiAqWVlNU0cgd2FzIHN1Y2Nlc3NmdWxseSB3cml0dGVu
LiAgUmV0dXJuIDEgaWYgKllZTVNHIGlzCisgICBub3QgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhl
IG1lc3NhZ2UuICBJbiB0aGF0IGNhc2UsIGFsc28gc2V0CisgICAqWVlNU0dfQUxMT0MgdG8gdGhl
IHJlcXVpcmVkIG51bWJlciBvZiBieXRlcy4gIFJldHVybiAyIGlmIHRoZQorICAgcmVxdWlyZWQg
bnVtYmVyIG9mIGJ5dGVzIGlzIHRvbyBsYXJnZSB0byBzdG9yZS4gICovCitzdGF0aWMgaW50Cit5
eXN5bnRheF9lcnJvciAoWVlTSVpFX1QgKnl5bXNnX2FsbG9jLCBjaGFyICoqeXltc2csCisgICAg
ICAgICAgICAgICAgeXl0eXBlX2ludDE2ICp5eXNzcCwgaW50IHl5dG9rZW4pCit7CisgIFlZU0la
RV9UIHl5c2l6ZTAgPSB5eXRuYW1lcnIgKFlZX05VTEwsIHl5dG5hbWVbeXl0b2tlbl0pOworICBZ
WVNJWkVfVCB5eXNpemUgPSB5eXNpemUwOworICBlbnVtIHsgWVlFUlJPUl9WRVJCT1NFX0FSR1Nf
TUFYSU1VTSA9IDUgfTsKKyAgLyogSW50ZXJuYXRpb25hbGl6ZWQgZm9ybWF0IHN0cmluZy4gKi8K
KyAgY29uc3QgY2hhciAqeXlmb3JtYXQgPSBZWV9OVUxMOworICAvKiBBcmd1bWVudHMgb2YgeXlm
b3JtYXQuICovCisgIGNoYXIgY29uc3QgKnl5YXJnW1lZRVJST1JfVkVSQk9TRV9BUkdTX01BWElN
VU1dOworICAvKiBOdW1iZXIgb2YgcmVwb3J0ZWQgdG9rZW5zIChvbmUgZm9yIHRoZSAidW5leHBl
Y3RlZCIsIG9uZSBwZXIKKyAgICAgImV4cGVjdGVkIikuICovCisgIGludCB5eWNvdW50ID0gMDsK
KworICAvKiBUaGVyZSBhcmUgbWFueSBwb3NzaWJpbGl0aWVzIGhlcmUgdG8gY29uc2lkZXI6Cisg
ICAgIC0gQXNzdW1lIFlZRkFJTCBpcyBub3QgdXNlZC4gIEl0J3MgdG9vIGZsYXdlZCB0byBjb25z
aWRlci4gIFNlZQorICAgICAgIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlz
b24tcGF0Y2hlcy8yMDA5LTEyL21zZzAwMDI0Lmh0bWw+CisgICAgICAgZm9yIGRldGFpbHMuICBZ
WUVSUk9SIGlzIGZpbmUgYXMgaXQgZG9lcyBub3QgaW52b2tlIHRoaXMKKyAgICAgICBmdW5jdGlv
bi4KKyAgICAgLSBJZiB0aGlzIHN0YXRlIGlzIGEgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgZGVm
YXVsdCBhY3Rpb24sIHRoZW4KKyAgICAgICB0aGUgb25seSB3YXkgdGhpcyBmdW5jdGlvbiB3YXMg
aW52b2tlZCBpcyBpZiB0aGUgZGVmYXVsdCBhY3Rpb24KKyAgICAgICBpcyBhbiBlcnJvciBhY3Rp
b24uICBJbiB0aGF0IGNhc2UsIGRvbid0IGNoZWNrIGZvciBleHBlY3RlZAorICAgICAgIHRva2Vu
cyBiZWNhdXNlIHRoZXJlIGFyZSBub25lLgorICAgICAtIFRoZSBvbmx5IHdheSB0aGVyZSBjYW4g
YmUgbm8gbG9va2FoZWFkIHByZXNlbnQgKGluIHl5Y2hhcikgaXMgaWYKKyAgICAgICB0aGlzIHN0
YXRlIGlzIGEgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgZGVmYXVsdCBhY3Rpb24uICBUaHVzLAor
ICAgICAgIGRldGVjdGluZyB0aGUgYWJzZW5jZSBvZiBhIGxvb2thaGVhZCBpcyBzdWZmaWNpZW50
IHRvIGRldGVybWluZQorICAgICAgIHRoYXQgdGhlcmUgaXMgbm8gdW5leHBlY3RlZCBvciBleHBl
Y3RlZCB0b2tlbiB0byByZXBvcnQuICBJbiB0aGF0CisgICAgICAgY2FzZSwganVzdCByZXBvcnQg
YSBzaW1wbGUgInN5bnRheCBlcnJvciIuCisgICAgIC0gRG9uJ3QgYXNzdW1lIHRoZXJlIGlzbid0
IGEgbG9va2FoZWFkIGp1c3QgYmVjYXVzZSB0aGlzIHN0YXRlIGlzIGEKKyAgICAgICBjb25zaXN0
ZW50IHN0YXRlIHdpdGggYSBkZWZhdWx0IGFjdGlvbi4gIFRoZXJlIG1pZ2h0IGhhdmUgYmVlbiBh
CisgICAgICAgcHJldmlvdXMgaW5jb25zaXN0ZW50IHN0YXRlLCBjb25zaXN0ZW50IHN0YXRlIHdp
dGggYSBub24tZGVmYXVsdAorICAgICAgIGFjdGlvbiwgb3IgdXNlciBzZW1hbnRpYyBhY3Rpb24g
dGhhdCBtYW5pcHVsYXRlZCB5eWNoYXIuCisgICAgIC0gT2YgY291cnNlLCB0aGUgZXhwZWN0ZWQg
dG9rZW4gbGlzdCBkZXBlbmRzIG9uIHN0YXRlcyB0byBoYXZlCisgICAgICAgY29ycmVjdCBsb29r
YWhlYWQgaW5mb3JtYXRpb24sIGFuZCBpdCBkZXBlbmRzIG9uIHRoZSBwYXJzZXIgbm90CisgICAg
ICAgdG8gcGVyZm9ybSBleHRyYSByZWR1Y3Rpb25zIGFmdGVyIGZldGNoaW5nIGEgbG9va2FoZWFk
IGZyb20gdGhlCisgICAgICAgc2Nhbm5lciBhbmQgYmVmb3JlIGRldGVjdGluZyBhIHN5bnRheCBl
cnJvci4gIFRodXMsIHN0YXRlIG1lcmdpbmcKKyAgICAgICAoZnJvbSBMQUxSIG9yIElFTFIpIGFu
ZCBkZWZhdWx0IHJlZHVjdGlvbnMgY29ycnVwdCB0aGUgZXhwZWN0ZWQKKyAgICAgICB0b2tlbiBs
aXN0LiAgSG93ZXZlciwgdGhlIGxpc3QgaXMgY29ycmVjdCBmb3IgY2Fub25pY2FsIExSIHdpdGgK
KyAgICAgICBvbmUgZXhjZXB0aW9uOiBpdCB3aWxsIHN0aWxsIGNvbnRhaW4gYW55IHRva2VuIHRo
YXQgd2lsbCBub3QgYmUKKyAgICAgICBhY2NlcHRlZCBkdWUgdG8gYW4gZXJyb3IgYWN0aW9uIGlu
IGEgbGF0ZXIgc3RhdGUuCisgICovCisgIGlmICh5eXRva2VuICE9IFlZRU1QVFkpCisgICAgewor
ICAgICAgaW50IHl5biA9IHl5cGFjdFsqeXlzc3BdOworICAgICAgeXlhcmdbeXljb3VudCsrXSA9
IHl5dG5hbWVbeXl0b2tlbl07CisgICAgICBpZiAoIXl5cGFjdF92YWx1ZV9pc19kZWZhdWx0ICh5
eW4pKQorICAgICAgICB7CisgICAgICAgICAgLyogU3RhcnQgWVlYIGF0IC1ZWU4gaWYgbmVnYXRp
dmUgdG8gYXZvaWQgbmVnYXRpdmUgaW5kZXhlcyBpbgorICAgICAgICAgICAgIFlZQ0hFQ0suICBJ
biBvdGhlciB3b3Jkcywgc2tpcCB0aGUgZmlyc3QgLVlZTiBhY3Rpb25zIGZvcgorICAgICAgICAg
ICAgIHRoaXMgc3RhdGUgYmVjYXVzZSB0aGV5IGFyZSBkZWZhdWx0IGFjdGlvbnMuICAqLworICAg
ICAgICAgIGludCB5eXhiZWdpbiA9IHl5biA8IDAgPyAteXluIDogMDsKKyAgICAgICAgICAvKiBT
dGF5IHdpdGhpbiBib3VuZHMgb2YgYm90aCB5eWNoZWNrIGFuZCB5eXRuYW1lLiAgKi8KKyAgICAg
ICAgICBpbnQgeXljaGVja2xpbSA9IFlZTEFTVCAtIHl5biArIDE7CisgICAgICAgICAgaW50IHl5
eGVuZCA9IHl5Y2hlY2tsaW0gPCBZWU5UT0tFTlMgPyB5eWNoZWNrbGltIDogWVlOVE9LRU5TOwor
ICAgICAgICAgIGludCB5eXg7CisKKyAgICAgICAgICBmb3IgKHl5eCA9IHl5eGJlZ2luOyB5eXgg
PCB5eXhlbmQ7ICsreXl4KQorICAgICAgICAgICAgaWYgKHl5Y2hlY2tbeXl4ICsgeXluXSA9PSB5
eXggJiYgeXl4ICE9IFlZVEVSUk9SCisgICAgICAgICAgICAgICAgJiYgIXl5dGFibGVfdmFsdWVf
aXNfZXJyb3IgKHl5dGFibGVbeXl4ICsgeXluXSkpCisgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBpZiAoeXljb3VudCA9PSBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNKQorICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB5eWNvdW50ID0gMTsKKyAgICAg
ICAgICAgICAgICAgICAgeXlzaXplID0geXlzaXplMDsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgeXlhcmdbeXljb3VudCsr
XSA9IHl5dG5hbWVbeXl4XTsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBZ
WVNJWkVfVCB5eXNpemUxID0geXlzaXplICsgeXl0bmFtZXJyIChZWV9OVUxMLCB5eXRuYW1lW3l5
eF0pOworICAgICAgICAgICAgICAgICAgaWYgKCEgKHl5c2l6ZSA8PSB5eXNpemUxCisgICAgICAg
ICAgICAgICAgICAgICAgICAgJiYgeXlzaXplMSA8PSBZWVNUQUNLX0FMTE9DX01BWElNVU0pKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgICAgICAgICAgIHl5c2l6ZSA9
IHl5c2l6ZTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgc3dpdGNoICh5eWNvdW50KQorICAgIHsKKyMgZGVmaW5lIFlZQ0FTRV8oTiwg
UykgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgY2FzZSBOOiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgIHl5Zm9ybWF0ID0gUzsgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgIGJyZWFrCisgICAgICBZWUNBU0VfKDAsIFlZXygic3ludGF4IGVycm9yIikp
OworICAgICAgWVlDQVNFXygxLCBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIpKTsK
KyAgICAgIFlZQ0FTRV8oMiwgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVj
dGluZyAlcyIpKTsKKyAgICAgIFlZQ0FTRV8oMywgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0
ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIpKTsKKyAgICAgIFlZQ0FTRV8oNCwgWVlfKCJzeW50
YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIpKTsKKyAg
ICAgIFlZQ0FTRV8oNSwgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGlu
ZyAlcyBvciAlcyBvciAlcyBvciAlcyIpKTsKKyMgdW5kZWYgWVlDQVNFXworICAgIH0KKworICB7
CisgICAgWVlTSVpFX1QgeXlzaXplMSA9IHl5c2l6ZSArIHl5c3RybGVuICh5eWZvcm1hdCk7Cisg
ICAgaWYgKCEgKHl5c2l6ZSA8PSB5eXNpemUxICYmIHl5c2l6ZTEgPD0gWVlTVEFDS19BTExPQ19N
QVhJTVVNKSkKKyAgICAgIHJldHVybiAyOworICAgIHl5c2l6ZSA9IHl5c2l6ZTE7CisgIH0KKwor
ICBpZiAoKnl5bXNnX2FsbG9jIDwgeXlzaXplKQorICAgIHsKKyAgICAgICp5eW1zZ19hbGxvYyA9
IDIgKiB5eXNpemU7CisgICAgICBpZiAoISAoeXlzaXplIDw9ICp5eW1zZ19hbGxvYworICAgICAg
ICAgICAgICYmICp5eW1zZ19hbGxvYyA8PSBZWVNUQUNLX0FMTE9DX01BWElNVU0pKQorICAgICAg
ICAqeXltc2dfYWxsb2MgPSBZWVNUQUNLX0FMTE9DX01BWElNVU07CisgICAgICByZXR1cm4gMTsK
KyAgICB9CisKKyAgLyogQXZvaWQgc3ByaW50ZiwgYXMgdGhhdCBpbmZyaW5nZXMgb24gdGhlIHVz
ZXIncyBuYW1lIHNwYWNlLgorICAgICBEb24ndCBoYXZlIHVuZGVmaW5lZCBiZWhhdmlvciBldmVu
IGlmIHRoZSB0cmFuc2xhdGlvbgorICAgICBwcm9kdWNlZCBhIHN0cmluZyB3aXRoIHRoZSB3cm9u
ZyBudW1iZXIgb2YgIiVzInMuICAqLworICB7CisgICAgY2hhciAqeXlwID0gKnl5bXNnOworICAg
IGludCB5eWkgPSAwOworICAgIHdoaWxlICgoKnl5cCA9ICp5eWZvcm1hdCkgIT0gJ1wwJykKKyAg
ICAgIGlmICgqeXlwID09ICclJyAmJiB5eWZvcm1hdFsxXSA9PSAncycgJiYgeXlpIDwgeXljb3Vu
dCkKKyAgICAgICAgeworICAgICAgICAgIHl5cCArPSB5eXRuYW1lcnIgKHl5cCwgeXlhcmdbeXlp
KytdKTsKKyAgICAgICAgICB5eWZvcm1hdCArPSAyOworICAgICAgICB9CisgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICB5eXArKzsKKyAgICAgICAgICB5eWZvcm1hdCsrOworICAgICAg
ICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogWVlFUlJPUl9WRVJCT1NFICovCisK
Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFJl
bGVhc2UgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHRvIHRoaXMgc3ltYm9sLiAgfAorYC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLypBUkdTVVNFRCov
CisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAg
fHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQK
K3l5ZGVzdHJ1Y3QgKGNvbnN0IGNoYXIgKnl5bXNnLCBpbnQgeXl0eXBlLCBZWVNUWVBFICp5eXZh
bHVlcCwgWVlMVFlQRSAqeXlsb2NhdGlvbnAsIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpCisjZWxz
ZQorc3RhdGljIHZvaWQKK3l5ZGVzdHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxv
Y2F0aW9ucCwgY29udGV4dCkKKyAgICBjb25zdCBjaGFyICp5eW1zZzsKKyAgICBpbnQgeXl0eXBl
OworICAgIFlZU1RZUEUgKnl5dmFsdWVwOworICAgIFlZTFRZUEUgKnl5bG9jYXRpb25wOworICAg
IFRQYXJzZUNvbnRleHQqIGNvbnRleHQ7CisjZW5kaWYKK3sKKyAgWVlVU0UgKHl5dmFsdWVwKTsK
KyAgWVlVU0UgKHl5bG9jYXRpb25wKTsKKyAgWVlVU0UgKGNvbnRleHQpOworCisgIGlmICgheXlt
c2cpCisgICAgeXltc2cgPSAiRGVsZXRpbmciOworICBZWV9TWU1CT0xfUFJJTlQgKHl5bXNnLCB5
eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCk7CisKKyAgWVlVU0UgKHl5dHlwZSk7Cit9CisK
KworCisKKy8qLS0tLS0tLS0tLS4KK3wgeXlwYXJzZS4gIHwKK2AtLS0tLS0tLS0tKi8KKworI2lm
ZGVmIFlZUEFSU0VfUEFSQU0KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5
X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19W
RVIpCitpbnQKK3l5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pCisjZWxzZQoraW50Cit5eXBh
cnNlIChZWVBBUlNFX1BBUkFNKQorICAgIHZvaWQgKllZUEFSU0VfUEFSQU07CisjZW5kaWYKKyNl
bHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmlu
ZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5l
ZCBfTVNDX1ZFUikKK2ludAoreXlwYXJzZSAoVFBhcnNlQ29udGV4dCogY29udGV4dCkKKyNlbHNl
CitpbnQKK3l5cGFyc2UgKGNvbnRleHQpCisgICAgVFBhcnNlQ29udGV4dCogY29udGV4dDsKKyNl
bmRpZgorI2VuZGlmCit7CisvKiBUaGUgbG9va2FoZWFkIHN5bWJvbC4gICovCitpbnQgeXljaGFy
OworCisKKyNpZiBkZWZpbmVkIF9fR05VQ19fICYmIDQwNyA8PSBfX0dOVUNfXyAqIDEwMCArIF9f
R05VQ19NSU5PUl9fCisvKiBTdXBwcmVzcyBhbiBpbmNvcnJlY3QgZGlhZ25vc3RpYyBhYm91dCB5
eWx2YWwgYmVpbmcgdW5pbml0aWFsaXplZC4gICovCisjIGRlZmluZSBZWV9JR05PUkVfTUFZQkVf
VU5JTklUSUFMSVpFRF9CRUdJTiBcCisgICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIHB1c2gi
KSBcCisgICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3VuaW5pdGlhbGl6
ZWRcIiIpXAorICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdtYXliZS11
bmluaXRpYWxpemVkXCIiKQorIyBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURf
RU5EIFwKKyAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgcG9wIikKKyNlbHNlCisvKiBEZWZh
dWx0IHZhbHVlIHVzZWQgZm9yIGluaXRpYWxpemF0aW9uLCBmb3IgcGFjaWZ5aW5nIG9sZGVyIEdD
Q3MKKyAgIG9yIG5vbi1HQ0MgY29tcGlsZXJzLiAgKi8KK3N0YXRpYyBZWVNUWVBFIHl5dmFsX2Rl
ZmF1bHQ7CisjIGRlZmluZSBZWV9JTklUSUFMX1ZBTFVFKFZhbHVlKSA9IFZhbHVlCisjZW5kaWYK
K3N0YXRpYyBZWUxUWVBFIHl5bG9jX2RlZmF1bHQKKyMgaWYgZGVmaW5lZCBZWUxUWVBFX0lTX1RS
SVZJQUwgJiYgWVlMVFlQRV9JU19UUklWSUFMCisgID0geyAxLCAxLCAxLCAxIH0KKyMgZW5kaWYK
KzsKKyNpZm5kZWYgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4KKyMgZGVmaW5l
IFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOCisjIGRlZmluZSBZWV9JR05PUkVf
TUFZQkVfVU5JTklUSUFMSVpFRF9FTkQKKyNlbmRpZgorI2lmbmRlZiBZWV9JTklUSUFMX1ZBTFVF
CisjIGRlZmluZSBZWV9JTklUSUFMX1ZBTFVFKFZhbHVlKSAvKiBOb3RoaW5nLiAqLworI2VuZGlm
CisKKy8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9va2FoZWFkIHN5bWJvbC4gICovCitZ
WVNUWVBFIHl5bHZhbCBZWV9JTklUSUFMX1ZBTFVFKHl5dmFsX2RlZmF1bHQpOworCisvKiBMb2Nh
dGlvbiBkYXRhIGZvciB0aGUgbG9va2FoZWFkIHN5bWJvbC4gICovCitZWUxUWVBFIHl5bGxvYyA9
IHl5bG9jX2RlZmF1bHQ7CisKKworICAgIC8qIE51bWJlciBvZiBzeW50YXggZXJyb3JzIHNvIGZh
ci4gICovCisgICAgaW50IHl5bmVycnM7CisKKyAgICBpbnQgeXlzdGF0ZTsKKyAgICAvKiBOdW1i
ZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVkLiAgKi8K
KyAgICBpbnQgeXllcnJzdGF0dXM7CisKKyAgICAvKiBUaGUgc3RhY2tzIGFuZCB0aGVpciB0b29s
czoKKyAgICAgICBgeXlzcyc6IHJlbGF0ZWQgdG8gc3RhdGVzLgorICAgICAgIGB5eXZzJzogcmVs
YXRlZCB0byBzZW1hbnRpYyB2YWx1ZXMuCisgICAgICAgYHl5bHMnOiByZWxhdGVkIHRvIGxvY2F0
aW9ucy4KKworICAgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhyb3VnaCBzZXBhcmF0ZSBwb2lu
dGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdworICAgICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNl
d2hlcmUuICAqLworCisgICAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KKyAgICB5eXR5cGVfaW50
MTYgeXlzc2FbWVlJTklUREVQVEhdOworICAgIHl5dHlwZV9pbnQxNiAqeXlzczsKKyAgICB5eXR5
cGVfaW50MTYgKnl5c3NwOworCisgICAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAgKi8K
KyAgICBZWVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKKyAgICBZWVNUWVBFICp5eXZzOworICAg
IFlZU1RZUEUgKnl5dnNwOworCisgICAgLyogVGhlIGxvY2F0aW9uIHN0YWNrLiAgKi8KKyAgICBZ
WUxUWVBFIHl5bHNhW1lZSU5JVERFUFRIXTsKKyAgICBZWUxUWVBFICp5eWxzOworICAgIFlZTFRZ
UEUgKnl5bHNwOworCisgICAgLyogVGhlIGxvY2F0aW9ucyB3aGVyZSB0aGUgZXJyb3Igc3RhcnRl
ZCBhbmQgZW5kZWQuICAqLworICAgIFlZTFRZUEUgeXllcnJvcl9yYW5nZVszXTsKKworICAgIFlZ
U0laRV9UIHl5c3RhY2tzaXplOworCisgIGludCB5eW47CisgIGludCB5eXJlc3VsdDsKKyAgLyog
TG9va2FoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIu
ICAqLworICBpbnQgeXl0b2tlbiA9IDA7CisgIC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1
cm4gc2VtYW50aWMgdmFsdWUgYW5kIGxvY2F0aW9uIGZyb20gdGhlCisgICAgIGFjdGlvbiByb3V0
aW5lcy4gICovCisgIFlZU1RZUEUgeXl2YWw7CisgIFlZTFRZUEUgeXlsb2M7CisKKyNpZiBZWUVS
Uk9SX1ZFUkJPU0UKKyAgLyogQnVmZmVyIGZvciBlcnJvciBtZXNzYWdlcywgYW5kIGl0cyBhbGxv
Y2F0ZWQgc2l6ZS4gICovCisgIGNoYXIgeXltc2didWZbMTI4XTsKKyAgY2hhciAqeXltc2cgPSB5
eW1zZ2J1ZjsKKyAgWVlTSVpFX1QgeXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7CisjZW5k
aWYKKworI2RlZmluZSBZWVBPUFNUQUNLKE4pICAgKHl5dnNwIC09IChOKSwgeXlzc3AgLT0gKE4p
LCB5eWxzcCAtPSAoTikpCisKKyAgLyogVGhlIG51bWJlciBvZiBzeW1ib2xzIG9uIHRoZSBSSFMg
b2YgdGhlIHJlZHVjZWQgcnVsZS4KKyAgICAgS2VlcCB0byB6ZXJvIHdoZW4gbm8gc3ltYm9sIHNo
b3VsZCBiZSBwb3BwZWQuICAqLworICBpbnQgeXlsZW4gPSAwOworCisgIHl5c3NwID0geXlzcyA9
IHl5c3NhOworICB5eXZzcCA9IHl5dnMgPSB5eXZzYTsKKyAgeXlsc3AgPSB5eWxzID0geXlsc2E7
CisgIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7CisKKyAgWVlEUFJJTlRGICgoc3RkZXJyLCAi
U3RhcnRpbmcgcGFyc2VcbiIpKTsKKworICB5eXN0YXRlID0gMDsKKyAgeXllcnJzdGF0dXMgPSAw
OworICB5eW5lcnJzID0gMDsKKyAgeXljaGFyID0gWVlFTVBUWTsgLyogQ2F1c2UgYSB0b2tlbiB0
byBiZSByZWFkLiAgKi8KKyAgeXlsc3BbMF0gPSB5eWxsb2M7CisgIGdvdG8geXlzZXRzdGF0ZTsK
KworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0uCit8IHl5bmV3c3RhdGUgLS0gUHVzaCBhIG5ldyBzdGF0ZSwgd2hpY2ggaXMgZm91
bmQgaW4geXlzdGF0ZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIHl5bmV3c3RhdGU6CisgIC8qIEluIGFsbCBjYXNl
cywgd2hlbiB5b3UgZ2V0IGhlcmUsIHRoZSB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2tzCisgICAg
IGhhdmUganVzdCBiZWVuIHB1c2hlZC4gIFNvIHB1c2hpbmcgYSBzdGF0ZSBoZXJlIGV2ZW5zIHRo
ZSBzdGFja3MuICAqLworICB5eXNzcCsrOworCisgeXlzZXRzdGF0ZToKKyAgKnl5c3NwID0geXlz
dGF0ZTsKKworICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkKKyAgICB7Cisg
ICAgICAvKiBHZXQgdGhlIGN1cnJlbnQgdXNlZCBzaXplIG9mIHRoZSB0aHJlZSBzdGFja3MsIGlu
IGVsZW1lbnRzLiAgKi8KKyAgICAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5c3NwIC0geXlzcyArIDE7
CisKKyNpZmRlZiB5eW92ZXJmbG93CisgICAgICB7CisJLyogR2l2ZSB1c2VyIGEgY2hhbmNlIHRv
IHJlYWxsb2NhdGUgdGhlIHN0YWNrLiAgVXNlIGNvcGllcyBvZgorCSAgIHRoZXNlIHNvIHRoYXQg
dGhlICYncyBkb24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8KKwkgICBtZW1vcnkuICAqLwor
CVlZU1RZUEUgKnl5dnMxID0geXl2czsKKwl5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKKwlZ
WUxUWVBFICp5eWxzMSA9IHl5bHM7CisKKwkvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBp
cyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKKwkgICBkYXRhIGluIHVzZSBpbiB0aGF0IHN0
YWNrLCBpbiBieXRlcy4gIFRoaXMgdXNlZCB0byBiZSBhCisJICAgY29uZGl0aW9uYWwgYXJvdW5k
IGp1c3QgdGhlIHR3byBleHRyYSBhcmdzLCBidXQgdGhhdCBtaWdodAorCSAgIGJlIHVuZGVmaW5l
ZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLworCXl5b3ZlcmZsb3cgKFlZXygibWVtb3J5
IGV4aGF1c3RlZCIpLAorCQkgICAgJnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCksCisJ
CSAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKKwkJICAgICZ5eWxzMSwgeXlz
aXplICogc2l6ZW9mICgqeXlsc3ApLAorCQkgICAgJnl5c3RhY2tzaXplKTsKKworCXl5bHMgPSB5
eWxzMTsKKwl5eXNzID0geXlzczE7CisJeXl2cyA9IHl5dnMxOworICAgICAgfQorI2Vsc2UgLyog
bm8geXlvdmVyZmxvdyAqLworIyBpZm5kZWYgWVlTVEFDS19SRUxPQ0FURQorICAgICAgZ290byB5
eWV4aGF1c3RlZGxhYjsKKyMgZWxzZQorICAgICAgLyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3du
IHdheS4gICovCisgICAgICBpZiAoWVlNQVhERVBUSCA8PSB5eXN0YWNrc2l6ZSkKKwlnb3RvIHl5
ZXhoYXVzdGVkbGFiOworICAgICAgeXlzdGFja3NpemUgKj0gMjsKKyAgICAgIGlmIChZWU1BWERF
UFRIIDwgeXlzdGFja3NpemUpCisJeXlzdGFja3NpemUgPSBZWU1BWERFUFRIOworCisgICAgICB7
CisJeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7CisJdW5pb24geXlhbGxvYyAqeXlwdHIgPQor
CSAgKHVuaW9uIHl5YWxsb2MgKikgWVlTVEFDS19BTExPQyAoWVlTVEFDS19CWVRFUyAoeXlzdGFj
a3NpemUpKTsKKwlpZiAoISB5eXB0cikKKwkgIGdvdG8geXlleGhhdXN0ZWRsYWI7CisJWVlTVEFD
S19SRUxPQ0FURSAoeXlzc19hbGxvYywgeXlzcyk7CisJWVlTVEFDS19SRUxPQ0FURSAoeXl2c19h
bGxvYywgeXl2cyk7CisJWVlTVEFDS19SRUxPQ0FURSAoeXlsc19hbGxvYywgeXlscyk7CisjICB1
bmRlZiBZWVNUQUNLX1JFTE9DQVRFCisJaWYgKHl5c3MxICE9IHl5c3NhKQorCSAgWVlTVEFDS19G
UkVFICh5eXNzMSk7CisgICAgICB9CisjIGVuZGlmCisjZW5kaWYgLyogbm8geXlvdmVyZmxvdyAq
LworCisgICAgICB5eXNzcCA9IHl5c3MgKyB5eXNpemUgLSAxOworICAgICAgeXl2c3AgPSB5eXZz
ICsgeXlzaXplIC0gMTsKKyAgICAgIHl5bHNwID0geXlscyArIHl5c2l6ZSAtIDE7CisKKyAgICAg
IFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKKwkJ
ICAodW5zaWduZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7CisKKyAgICAgIGlmICh5eXNzICsg
eXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQorCVlZQUJPUlQ7CisgICAgfQorCisgIFlZRFBSSU5U
RiAoKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7CisKKyAgaWYgKHl5
c3RhdGUgPT0gWVlGSU5BTCkKKyAgICBZWUFDQ0VQVDsKKworICBnb3RvIHl5YmFja3VwOworCisv
Ki0tLS0tLS0tLS0tLgorfCB5eWJhY2t1cC4gIHwKK2AtLS0tLS0tLS0tLSovCit5eWJhY2t1cDoK
KworICAvKiBEbyBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRl
LiAgUmVhZCBhCisgICAgIGxvb2thaGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3Qg
YWxyZWFkeSBoYXZlIG9uZS4gICovCisKKyAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRv
IGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2thaGVhZCB0b2tlbi4gICovCisgIHl5biA9IHl5
cGFjdFt5eXN0YXRlXTsKKyAgaWYgKHl5cGFjdF92YWx1ZV9pc19kZWZhdWx0ICh5eW4pKQorICAg
IGdvdG8geXlkZWZhdWx0OworCisgIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rYWhlYWQgdG9r
ZW4gaWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisKKyAgLyogWVlDSEFSIGlzIGVpdGhl
ciBZWUVNUFRZIG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9va2FoZWFkIHN5bWJvbC4gICovCisgIGlm
ICh5eWNoYXIgPT0gWVlFTVBUWSkKKyAgICB7CisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJS
ZWFkaW5nIGEgdG9rZW46ICIpKTsKKyAgICAgIHl5Y2hhciA9IFlZTEVYOworICAgIH0KKworICBp
ZiAoeXljaGFyIDw9IFlZRU9GKQorICAgIHsKKyAgICAgIHl5Y2hhciA9IHl5dG9rZW4gPSBZWUVP
RjsKKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIk5vdyBhdCBlbmQgb2YgaW5wdXQuXG4iKSk7
CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNo
YXIpOworICAgICAgWVlfU1lNQk9MX1BSSU5UICgiTmV4dCB0b2tlbiBpcyIsIHl5dG9rZW4sICZ5
eWx2YWwsICZ5eWxsb2MpOworICAgIH0KKworICAvKiBJZiB0aGUgcHJvcGVyIGFjdGlvbiBvbiBz
ZWVpbmcgdG9rZW4gWVlUT0tFTiBpcyB0byByZWR1Y2Ugb3IgdG8KKyAgICAgZGV0ZWN0IGFuIGVy
cm9yLCB0YWtlIHRoYXQgYWN0aW9uLiAgKi8KKyAgeXluICs9IHl5dG9rZW47CisgIGlmICh5eW4g
PCAwIHx8IFlZTEFTVCA8IHl5biB8fCB5eWNoZWNrW3l5bl0gIT0geXl0b2tlbikKKyAgICBnb3Rv
IHl5ZGVmYXVsdDsKKyAgeXluID0geXl0YWJsZVt5eW5dOworICBpZiAoeXluIDw9IDApCisgICAg
eworICAgICAgaWYgKHl5dGFibGVfdmFsdWVfaXNfZXJyb3IgKHl5bikpCisgICAgICAgIGdvdG8g
eXllcnJsYWI7CisgICAgICB5eW4gPSAteXluOworICAgICAgZ290byB5eXJlZHVjZTsKKyAgICB9
CisKKyAgLyogQ291bnQgdG9rZW5zIHNoaWZ0ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0
dXJuIG9mZiBlcnJvcgorICAgICBzdGF0dXMuICAqLworICBpZiAoeXllcnJzdGF0dXMpCisgICAg
eXllcnJzdGF0dXMtLTsKKworICAvKiBTaGlmdCB0aGUgbG9va2FoZWFkIHRva2VuLiAgKi8KKyAg
WVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsK
KworICAvKiBEaXNjYXJkIHRoZSBzaGlmdGVkIHRva2VuLiAgKi8KKyAgeXljaGFyID0gWVlFTVBU
WTsKKworICB5eXN0YXRlID0geXluOworICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9C
RUdJTgorICAqKyt5eXZzcCA9IHl5bHZhbDsKKyAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTEla
RURfRU5ECisgICorK3l5bHNwID0geXlsbG9jOworICBnb3RvIHl5bmV3c3RhdGU7CisKKworLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS4KK3wgeXlkZWZhdWx0IC0tIGRvIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgdGhlIGN1cnJlbnQg
c3RhdGUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLworeXlkZWZhdWx0OgorICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsK
KyAgaWYgKHl5biA9PSAwKQorICAgIGdvdG8geXllcnJsYWI7CisgIGdvdG8geXlyZWR1Y2U7CisK
KworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlyZWR1Y2UgLS0gRG8gYSBy
ZWR1Y3Rpb24uICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlyZWR1Y2U6
CisgIC8qIHl5biBpcyB0aGUgbnVtYmVyIG9mIGEgcnVsZSB0byByZWR1Y2Ugd2l0aC4gICovCisg
IHl5bGVuID0geXlyMlt5eW5dOworCisgIC8qIElmIFlZTEVOIGlzIG5vbnplcm8sIGltcGxlbWVu
dCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYWN0aW9uOgorICAgICBgJCQgPSAkMScuCisKKyAg
ICAgT3RoZXJ3aXNlLCB0aGUgZm9sbG93aW5nIGxpbmUgc2V0cyBZWVZBTCB0byBnYXJiYWdlLgor
ICAgICBUaGlzIGJlaGF2aW9yIGlzIHVuZG9jdW1lbnRlZCBhbmQgQmlzb24KKyAgICAgdXNlcnMg
c2hvdWxkIG5vdCByZWx5IHVwb24gaXQuICBBc3NpZ25pbmcgdG8gWVlWQUwKKyAgICAgdW5jb25k
aXRpb25hbGx5IG1ha2VzIHRoZSBwYXJzZXIgYSBiaXQgc21hbGxlciwgYW5kIGl0IGF2b2lkcyBh
CisgICAgIEdDQyB3YXJuaW5nIHRoYXQgWVlWQUwgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZC4g
ICovCisgIHl5dmFsID0geXl2c3BbMS15eWxlbl07CisKKyAgLyogRGVmYXVsdCBsb2NhdGlvbi4g
ICovCisgIFlZTExPQ19ERUZBVUxUICh5eWxvYywgKHl5bHNwIC0geXlsZW4pLCB5eWxlbik7Cisg
IFlZX1JFRFVDRV9QUklOVCAoeXluKTsKKyAgc3dpdGNoICh5eW4pCisgICAgeworICAgICAgICBj
YXNlIDQ6CisKKyAgICB7CisgICAgICAgIC8vIFRoZSBzeW1ib2wgdGFibGUgc2VhcmNoIHdhcyBk
b25lIGluIHRoZSBsZXhpY2FsIHBoYXNlCisgICAgICAgIGNvbnN0IFRTeW1ib2wgKnN5bWJvbCA9
ICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3ltYm9sOworICAgICAgICBjb25zdCBUVmFyaWFibGUg
KnZhcmlhYmxlID0gMDsKKworICAgICAgICBpZiAoIXN5bWJvbCkKKyAgICAgICAgeworICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0pLCAidW5kZWNsYXJlZCBpZGVu
dGlmaWVyIiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOworICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCFz
eW1ib2wtPmlzVmFyaWFibGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoKHl5bHNwWygxKSAtICgxKV0pLCAidmFyaWFibGUgZXhwZWN0ZWQiLCAoeXl2c3BbKDEpIC0g
KDEpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB2YXJp
YWJsZSA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSo+KHN5bWJvbCk7CisKKyAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbih2YXJpYWJsZS0+Z2V0TmFt
ZSgpKSAmJgorICAgICAgICAgICAgICAgICF2YXJpYWJsZS0+Z2V0RXh0ZW5zaW9uKCkuZW1wdHko
KSAmJgorICAgICAgICAgICAgICAgIGNvbnRleHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soKHl5bHNw
WygxKSAtICgxKV0pLCB2YXJpYWJsZS0+Z2V0RXh0ZW5zaW9uKCkpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGlmICghdmFyaWFibGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRU
eXBlIHR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCk7CisgICAgICAgICAgICBUVmFyaWFibGUg
KmZha2VWYXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJp
bmcsIHR5cGUpOworICAgICAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCpmYWtl
VmFyaWFibGUpOworICAgICAgICAgICAgdmFyaWFibGUgPSBmYWtlVmFyaWFibGU7CisgICAgICAg
IH0KKworICAgICAgICBpZiAodmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBF
dnFDb25zdCkKKyAgICAgICAgeworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiogY29uc3RBcnJh
eSA9IHZhcmlhYmxlLT5nZXRDb25zdFBvaW50ZXIoKTsKKyAgICAgICAgICAgIFRUeXBlIHQodmFy
aWFibGUtPmdldFR5cGUoKSk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbihjb25zdEFycmF5
LCB0LCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0
TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhcmlhYmxlLT5nZXRUeXBlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIGRvbid0IGRlbGV0ZSAkMS5zdHJpbmcsIGl0J3MgdXNlZCBieSBlcnJvciByZWNvdmVyeSwg
YW5kIHRoZSBwb29sCisgICAgICAgIC8vIHBvcCB3aWxsIHJlY2xhaW0gdGhlIG1lbW9yeQorICAg
IH0KKyAgICBicmVhazsKKworICBjYXNlIDU6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDY6CisKKyAgICB7CisgICAgICAg
IENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAg
ICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KCh5eXZzcFsoMSkgLSAoMSldLmxleCkuaSk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVk
LCBFdnFDb25zdCksICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisg
IGNhc2UgNzoKKworICAgIHsKKyAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3QoKHl5dnNw
WygxKSAtICgxKV0ubGV4KS5mKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwg
VFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDEpIC0gKDEp
XSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDg6CisKKyAgICB7CisgICAgICAgIENv
bnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAg
dW5pb25BcnJheS0+c2V0QkNvbnN0KCh5eXZzcFsoMSkgLSAoMSldLmxleCkuYik7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwg
RXZxQ29uc3QpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDk6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
ICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgIH0KKyAgICBi
cmVhazsKKworICBjYXNlIDEwOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsK
KyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMToKKworICAgIHsKKyAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+YWRkSW5kZXhFeHByZXNzaW9uKCh5
eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDQp
XSksICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxMjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTM6CisKKyAgICB7CisgICAgICAgIGlm
ICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgpKSB7
CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDMpIC0gKDMpXSksICJjYW5ub3Qg
YXBwbHkgZG90IG9wZXJhdG9yIHRvIGFuIGFycmF5IiwgIi4iKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgVFZl
Y3RvckZpZWxkcyBmaWVsZHM7CisgICAgICAgICAgICBpZiAoISBjb250ZXh0LT5wYXJzZVZlY3Rv
ckZpZWxkcygqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXROb21pbmFsU2l6ZSgpLCBmaWVsZHMsICh5eWxz
cFsoMykgLSAoMyldKSkpIHsKKyAgICAgICAgICAgICAgICBmaWVsZHMubnVtID0gMTsKKyAgICAg
ICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1swXSA9IDA7CisgICAgICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIo
KSA9PSBFdnFDb25zdCkgeyAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2ZWN0b3IgZmllbGRzCisg
ICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
YWRkQ29uc3RWZWN0b3JOb2RlKGZpZWxkcywgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eWxzcFsoMykgLSAoMyldKSk7CisgICAgICAgICAgICAgICAgaWYgKCh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKFRUeXBlKCh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRCYXNpY1R5cGUoKSwg
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFByZWNpc2lvbigp
LCBFdnFDb25zdCwgKGludCkgKCooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZykuc2l6ZSgp
KSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFRTdHJpbmcgdmVjdG9y
U3RyaW5nID0gKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nOworICAgICAgICAgICAgICAg
IFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3dpenpsZShm
aWVsZHMsICh5eWxzcFsoMykgLSAoMyldKSk7CisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcFZl
Y3RvclN3aXp6bGUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBp
bmRleCwgKHl5bHNwWygyKSAtICgzKV0pKTsKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgKGludCkg
dmVjdG9yU3RyaW5nLnNpemUoKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYg
KCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc01hdHJpeCgpKSB7
CisgICAgICAgICAgICBUTWF0cml4RmllbGRzIGZpZWxkczsKKyAgICAgICAgICAgIGlmICghIGNv
bnRleHQtPnBhcnNlTWF0cml4RmllbGRzKCooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywg
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxTaXpl
KCksIGZpZWxkcywgKHl5bHNwWygzKSAtICgzKV0pKSkgeworICAgICAgICAgICAgICAgIGZpZWxk
cy53aG9sZVJvdyA9IGZhbHNlOworICAgICAgICAgICAgICAgIGZpZWxkcy53aG9sZUNvbCA9IGZh
bHNlOworICAgICAgICAgICAgICAgIGZpZWxkcy5yb3cgPSAwOworICAgICAgICAgICAgICAgIGZp
ZWxkcy5jb2wgPSAwOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGZpZWxkcy53aG9sZVJvdyB8fCBmaWVsZHMud2hv
bGVDb2wpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDMp
XSksICIgbm9uLXNjYWxhciBmaWVsZHMgbm90IGltcGxlbWVudGVkIHlldCIsICIuIik7CisgICAg
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIENvbnN0YW50
VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAg
ICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoMCk7CisgICAgICAgICAgICAgICAgVEludGVybVR5cGVk
KiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJy
YXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMykgLSAo
MyldKSk7CisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eWxzcFsoMikgLSAoMyld
KSk7CisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRU
eXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRC
YXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dFByZWNpc2lvbigpLEV2cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldE5vbWluYWxTaXplKCkpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uWzFdOworICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChmaWVsZHMuY29s
ICogKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxT
aXplKCkgKyBmaWVsZHMucm93KTsKKyAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5
cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygzKSAtICgzKV0pKTsK
KyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5bHNwWygyKSAtICgzKV0pKTsKKyAg
ICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5
cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlw
ZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lz
aW9uKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICgoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0
KSB7CisgICAgICAgICAgICBib29sIGZpZWxkRm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgIGNv
bnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCktPmZpZWxkcygpOworICAgICAgICAgICAg
dW5zaWduZWQgaW50IGk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmllbGRzLnNpemUo
KTsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZpZWxkc1tpXS0+bmFtZSgpID09ICooeXl2
c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZykgeworICAgICAgICAgICAgICAgICAgICBmaWVsZEZv
dW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZpZWxkRm91bmQpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgeworICAgICAgICAgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5hZGRDb25zdFN0cnVj
dCgqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKCpmaWVsZHNbaV0tPnR5cGUoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBjaGFuZ2UgdGhlIHF1YWxpZmllciBvZiB0aGUgcmV0dXJuIHR5cGUs
IG5vdCBvZiB0aGUgc3RydWN0dXJlIGZpZWxkCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBh
cyB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24gaXMgc2hhcmVkIGJldHdlZW4gdmFyaW91cyBzdHJ1
Y3R1cmVzLgorICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5nZXRUeXBlUG9pbnRlcigpLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3QpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwor
ICAgICAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoaSk7CisgICAgICAgICAg
ICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
Q29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCAqZmllbGRzW2ldLT50eXBlKCksICh5eWxzcFsoMykg
LSAoMyldKSk7CisgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdFN0cnVj
dCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGluZGV4LCAoeXls
c3BbKDIpIC0gKDMpXSkpOworICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eWxzcFsoMikgLSAoMyldKSwgIiBubyBzdWNoIGZpZWxkIGluIHN0cnVjdHVyZSIsICh5eXZz
cFsoMykgLSAoMyldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXlsc3BbKDIpIC0gKDMpXSksICIgZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwg
dmVjdG9yLCBvciBtYXRyaXggb24gbGVmdCBoYW5kIHNpZGUiLCAoeXl2c3BbKDMpIC0gKDMpXS5s
ZXgpLnN0cmluZy0+Y19zdHIoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgfQorICAgICAgICAvLyBkb24n
dCBkZWxldGUgJDMuc3RyaW5nLCBpdCdzIGZyb20gdGhlIHBvb2wKKyAgICB9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAxNDoKKworICAgIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9y
Q2hlY2soKHl5bHNwWygyKSAtICgyKV0pLCAiKysiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdEluY3JlbWVudCwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMildKSwgY29udGV4dC0+c3ltYm9sVGFi
bGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsK
KyAgICAgICAgICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICIr
KyIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0
ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNh
c2UgMTU6CisKKyAgICB7CisgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCh5
eWxzcFsoMikgLSAoMildKSwgIi0tIiwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSkpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5h
cnlNYXRoKEVPcFBvc3REZWNyZW1lbnQsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDIpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAg
ICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAg
ICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgyKV0pLCAiLS0iLCAoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmco
KSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE2Ogor
CisgICAgeworICAgICAgICBpZiAoY29udGV4dC0+aW50ZWdlckVycm9yQ2hlY2soKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICJbXSIpKQorICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAxNzoKKworICAgIHsKKyAgICAgICAgVEZ1bmN0aW9uKiBmbkNhbGwg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmZ1bmN0aW9uOworICAgICAgICBUT3BlcmF0b3Ig
b3AgPSBmbkNhbGwtPmdldEJ1aWx0SW5PcCgpOworCisgICAgICAgIGlmIChvcCAhPSBFT3BOdWxs
KQorICAgICAgICB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVGhlbiB0aGlzIHNo
b3VsZCBiZSBhIGNvbnN0cnVjdG9yLgorICAgICAgICAgICAgLy8gRG9uJ3QgZ28gdGhyb3VnaCB0
aGUgc3ltYm9sIHRhYmxlIGZvciBjb25zdHJ1Y3RvcnMuCisgICAgICAgICAgICAvLyBUaGVpciBw
YXJhbWV0ZXJzIHdpbGwgYmUgdmVyaWZpZWQgYWxnb3JpdGhtaWNhbGx5LgorICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsgIC8vIHVz
ZSB0aGlzIHRvIGdldCB0aGUgdHlwZSBiYWNrCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Y29u
c3RydWN0b3JFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtKS5pbnRlcm1Ob2RlLCAqZm5DYWxsLCBvcCwgJnR5cGUpKSB7CisgICAgICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gMDsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBJdCdzIGEgY29uc3Ry
dWN0b3IsIG9mIHR5cGUgJ3R5cGUnLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+YWRkQ29uc3RydWN0
b3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCAmdHlwZSwgb3AsIGZuQ2Fs
bCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcigw
LCBvcCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZSh0eXBlKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBOb3QgYSBjb25zdHJ1Y3Rvci4g
IEZpbmQgaXQgaW4gdGhlIHN5bWJvbCB0YWJsZS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICBjb25zdCBURnVuY3Rpb24qIGZuQ2FuZGlkYXRlOworICAgICAgICAgICAgYm9vbCBidWlsdElu
OworICAgICAgICAgICAgZm5DYW5kaWRhdGUgPSBjb250ZXh0LT5maW5kRnVuY3Rpb24oKHl5bHNw
WygxKSAtICgxKV0pLCBmbkNhbGwsICZidWlsdEluKTsKKyAgICAgICAgICAgIGlmIChmbkNhbmRp
ZGF0ZSkgeworICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gQSBkZWNsYXJl
ZCBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIGlmIChidWls
dEluICYmICFmbkNhbmRpZGF0ZS0+Z2V0RXh0ZW5zaW9uKCkuZW1wdHkoKSAmJgorICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSld
KSwgZm5DYW5kaWRhdGUtPmdldEV4dGVuc2lvbigpKSkgeworICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG9w
ID0gZm5DYW5kaWRhdGUtPmdldEJ1aWx0SW5PcCgpOworICAgICAgICAgICAgICAgIGlmIChidWls
dEluICYmIG9wICE9IEVPcE51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgICAgICAgICAgLy8gQSBmdW5jdGlvbiBjYWxsIG1hcHBlZCB0byBhIGJ1aWx0LWluIG9wZXJh
dGlvbi4KKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGZu
Q2FuZGlkYXRlLT5nZXRQYXJhbUNvdW50KCkgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyZWF0IGl0IGxpa2UgYSBidWlsdC1p
biB1bmFyeSBvcGVyYXRvci4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKG9wLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmlu
dGVybU5vZGUsICh5eWxzcFsoMSkgLSAoMSldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
PSAwKSAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4
dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYUluZm9TdHJl
YW0gPDwgImJ1aWx0IGluIHVuYXJ5IG9wZXJhdG9yIGZ1bmN0aW9uLiAgVHlwZTogIiA8PCBzdGF0
aWNfY2FzdDxUSW50ZXJtVHlwZWQqPigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5v
ZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0p
LmludGVybU5vZGUtPmdldExpbmUoKSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCAiSW50ZXJuYWwg
RXJyb3IiLCBleHRyYUluZm8uY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WVlFUlJPUjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcigoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSwgb3AsICh5eWxzcFsoMSkgLSAo
MSldKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgcmVhbCBmdW5jdGlvbiBjYWxsCisKKyAg
ICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKCh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybSkuaW50ZXJtQWdncmVnYXRlLCBFT3BGdW5jdGlvbkNhbGwsICh5eWxzcFsoMSkgLSAoMSld
KSk7CisgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
c2V0VHlwZShmbkNhbmRpZGF0ZS0+Z2V0UmV0dXJuVHlwZSgpKTsKKworICAgICAgICAgICAgICAg
ICAgICAvLyB0aGlzIGlzIGhvdyB3ZSBrbm93IHdoZXRoZXIgdGhlIGdpdmVuIGZ1bmN0aW9uIGlz
IGEgYnVpbHRJbiBmdW5jdGlvbiBvciBhIHVzZXIgZGVmaW5lZCBmdW5jdGlvbgorICAgICAgICAg
ICAgICAgICAgICAvLyBpZiBidWlsdEluID09IGZhbHNlLCBpdCdzIGEgdXNlckRlZmluZWQgLT4g
Y291bGQgYmUgYW4gb3ZlcmxvYWRlZCBidWlsdEluIGZ1bmN0aW9uIGFsc28KKyAgICAgICAgICAg
ICAgICAgICAgLy8gaWYgYnVpbHRJbiA9PSB0cnVlLCBpdCdzIGRlZmluaXRlbHkgYSBidWlsdElu
IGZ1bmN0aW9uIHdpdGggRU9wTnVsbAorICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1aWx0SW4p
CisgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldEFzQWdncmVnYXRlKCktPnNldFVzZXJEZWZpbmVkKCk7CisgICAgICAgICAgICAgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0TmFt
ZShmbkNhbmRpZGF0ZS0+Z2V0TWFuZ2xlZE5hbWUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAg
VFF1YWxpZmllciBxdWFsOworICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGZuQ2FuZGlkYXRlLT5nZXRQYXJhbUNvdW50KCk7ICsraSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgcXVhbCA9IGZuQ2FuZGlkYXRlLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZp
ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdWFsID09IEV2cU91dCB8fCBxdWFs
ID09IEV2cUluT3V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmxWYWx1ZUVycm9yQ2hlY2soKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRMaW5l
KCksICJhc3NpZ24iLCAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQWdncmVn
YXRlKCktPmdldFNlcXVlbmNlKClbaV0tPmdldEFzVHlwZWQoKSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
KS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCksICJDb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFzc2Vk
IGZvciAnb3V0JyBvciAnaW5vdXQnIHBhcmFtZXRlcnMuIiwgIkVycm9yIik7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKGZuQ2FuZGlkYXRlLT5nZXRSZXR1cm5UeXBlKCkp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBlcnJvciBtZXNzYWdl
IHdhcyBwdXQgb3V0IGJ5IFBhRmluZEZ1bmN0aW9uKCkKKyAgICAgICAgICAgICAgICAvLyBQdXQg
b24gYSBkdW1teSBub2RlIGZvciBlcnJvciByZWNvdmVyeQorICAgICAgICAgICAgICAgIENvbnN0
YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAg
ICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3QoMC4wZik7CisgICAgICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0
YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxQ29u
c3QpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBkZWxldGUgZm5DYWxsOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE4OgorCisgICAgeworICAgICAgICAoeXl2YWwu
aW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybSk7CisgICAgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgMTk6CisKKyAgICB7CisgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMykg
LSAoMyldKSwgIm1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQiLCAiIik7CisgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDIwOgorCisgICAgeworICAg
ICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybSk7CisgICAgfQor
ICAgIGJyZWFrOworCisgIGNhc2UgMjE6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0p
ID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAyMjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRl
cm1Ob2RlID0gMDsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMzoKKworICAgIHsKKyAg
ICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
ZnVuY3Rpb24pOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1Ob2RlID0gMDsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNDoKKworICAgIHsKKyAgICAgICAgVFBhcmFtZXRlciBw
YXJhbSA9IHsgMCwgbmV3IFRUeXBlKCh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5nZXRUeXBlKCkpIH07CisgICAgICAgICh5eXZzcFsoMSkgLSAoMildLmludGVybS5m
dW5jdGlvbiktPmFkZFBhcmFtZXRlcihwYXJhbSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmZ1
bmN0aW9uID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKTsKKyAgICAgICAgKHl5
dmFsLmludGVybSkuaW50ZXJtTm9kZSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDI1OgorCisgICAgeworICAg
ICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUoKHl5dnNwWygzKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKSkgfTsKKyAgICAgICAgKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtKS5mdW5jdGlvbi0+YWRkUGFyYW1ldGVyKHBhcmFtKTsKKyAgICAgICAg
KHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmZ1bmN0
aW9uOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1Ob2RlID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5pbnRlcm1Ob2Rl
LCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAt
ICgzKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNjoKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVu
Y3Rpb24pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDI3OgorCisgICAgeworICAgICAg
ICAvLworICAgICAgICAvLyBDb25zdHJ1Y3RvcgorICAgICAgICAvLworICAgICAgICBUT3BlcmF0
b3Igb3AgPSBFT3BOdWxsOworICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5
cGUpLnVzZXJEZWYpIHsKKyAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0U3RydWN0OworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3dpdGNoICgoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0udHlwZSkudHlwZSkgeworICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAg
ICAgICBpZiAoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLm1hdHJpeCkgeworICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2goKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnNpemUp
IHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdE1hdDI7ICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVjdE1hdDM7
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVjdE1h
dDQ7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
dHlwZSkuc2l6ZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IG9wID0gRU9wQ29uc3Ry
dWN0RmxvYXQ7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29u
c3RydWN0VmVjMjsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9w
Q29uc3RydWN0VmVjMzsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0g
RU9wQ29uc3RydWN0VmVjNDsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRJ
bnQ6CisgICAgICAgICAgICAgICAgc3dpdGNoKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBl
KS5zaXplKSB7CisgICAgICAgICAgICAgICAgY2FzZSAxOiBvcCA9IEVPcENvbnN0cnVjdEludDsg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0SVZlYzI7
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RJVmVjMzsg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVjdElWZWM0OyBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAgICAgICAgc3dpdGNoKCh5eXZzcFsoMSkgLSAo
MSldLmludGVybS50eXBlKS5zaXplKSB7CisgICAgICAgICAgICAgICAgY2FzZSAxOiBvcCA9IEVP
cENvbnN0cnVjdEJvb2w7ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9w
Q29uc3RydWN0QlZlYzI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMzogb3AgPSBFT3BD
b25zdHJ1Y3RCVmVjMzsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9IEVPcENv
bnN0cnVjdEJWZWM0OyBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChvcCA9PSBFT3BOdWxsKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoKHl5bHNwWygxKSAtICgxKV0pLCAiY2Fubm90IGNvbnN0cnVjdCB0aGlzIHR5cGUiLCBnZXRC
YXNpY1N0cmluZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSkpOworICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSA9IEVidEZsb2F0OworICAgICAgICAgICAgICAgIG9w
ID0gRU9wQ29uc3RydWN0RmxvYXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
VFN0cmluZyB0ZW1wU3RyaW5nOworICAgICAgICBUVHlwZSB0eXBlKCh5eXZzcFsoMSkgLSAoMSld
LmludGVybS50eXBlKSk7CisgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0
aW9uKCZ0ZW1wU3RyaW5nLCB0eXBlLCBvcCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rp
b24pID0gZnVuY3Rpb247CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMjg6CisKKyAgICB7
CisgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgx
KV0pLCAqKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcpKQorICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICBUVHlwZSB0eXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7
CisgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCh5eXZzcFsoMSkg
LSAoMSldLmxleCkuc3RyaW5nLCB0eXBlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlv
bikgPSBmdW5jdGlvbjsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyOToKKworICAgIHsK
KyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2Ug
MzA6CisKKyAgICB7CisgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCh5eWxz
cFsoMSkgLSAoMildKSwgIisrIiwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlN
YXRoKEVPcFByZUluY3JlbWVudCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eWxzcFsoMSkgLSAoMildKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAg
ICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAg
IGNvbnRleHQtPnVuYXJ5T3BFcnJvcigoeXlsc3BbKDEpIC0gKDIpXSksICIrKyIsICh5eXZzcFso
MikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsK
KyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMzE6CisKKyAg
ICB7CisgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAo
MildKSwgIi0tIiwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQor
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFBy
ZURlY3JlbWVudCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5
eWxzcFsoMSkgLSAoMildKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQt
PnVuYXJ5T3BFcnJvcigoeXlsc3BbKDEpIC0gKDIpXSksICItLSIsICh5eXZzcFsoMikgLSAoMild
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwor
ICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMzI6CisKKyAgICB7CisgICAg
ICAgIGlmICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLm9wICE9IEVPcE51bGwpIHsKKyAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRVbmFyeU1hdGgoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5vcCwgKHl5dnNwWygy
KSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMSkgLSAoMildKSwgY29u
dGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXJyb3JPcCA9
ICIiOworICAgICAgICAgICAgICAgIHN3aXRjaCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLm9w
KSB7CisgICAgICAgICAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZTogICBlcnJvck9wID0gIi0iOyBi
cmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6IGVycm9yT3AgPSAiISI7
IGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoKHl5bHNwWygxKSAtICgy
KV0pLCBlcnJvck9wLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZz
cFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgIH0KKyAgICBi
cmVhazsKKworICBjYXNlIDMzOgorCisgICAgeyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcE51bGw7
IH0KKyAgICBicmVhazsKKworICBjYXNlIDM0OgorCisgICAgeyAoeXl2YWwuaW50ZXJtKS5vcCA9
IEVPcE5lZ2F0aXZlOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAzNToKKworICAgIHsgKHl5dmFs
LmludGVybSkub3AgPSBFT3BMb2dpY2FsTm90OyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAzNjoK
KworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDM3Ogor
CisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BNdWwsICh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAg
ICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAg
ICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICIqIiwgKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCks
ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0
cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2Ug
Mzg6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcERpdiwgKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsK
KyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAg
ICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIi8iLCAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJp
bmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBs
ZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAzOToKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KKyAgICBicmVhazsKKworICBj
YXNlIDQwOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BBZGQsICh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJs
ZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewor
ICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICIr
IiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRl
U3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRD
b21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgNDE6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcFN1YiwgKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJv
bFRhYmxlKTsKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAw
KSB7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyld
KSwgIi0iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29t
cGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSA0MjoKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KKyAgICBicmVh
azsKKworICBjYXNlIDQzOgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQorICAgIGJyZWFr
OworCisgIGNhc2UgNDQ6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExlc3NUaGFu
LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4
dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygy
KSAtICgzKV0pLCAiPCIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwor
ICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJw
VW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMikgLSAoMyldKSk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA0NToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1h
dGgoRU9wR3JlYXRlclRoYW4sICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygy
KSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5
T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICI+IiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9u
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNl
dEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBU
VHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygyKSAtICgzKV0p
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDQ2OgorCisgICAgewor
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAg
ICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAg
ICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiPD0iLCAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmco
KSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRl
U3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAg
Q29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAg
ICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFu
dFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3Qp
LCAoeXlsc3BbKDIpIC0gKDMpXSkpOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisg
IGNhc2UgNDc6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuRXF1
YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250
ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3Bb
KDIpIC0gKDMpXSksICI+PSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2Up
OworICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwg
RWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMikgLSAoMyldKSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA0ODoKKworICAgIHsgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDQ5OgorCisgICAgeworICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5
TWF0aChFT3BFcXVhbCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0g
KDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVy
cm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIj09IiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJy
YXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJD
b25zdChmYWxzZSk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlw
ZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygyKSAtICgzKV0pKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDUwOgorCisgICAgeworICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQmluYXJ5TWF0aChFT3BOb3RFcXVhbCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYg
KCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBjb250
ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIiE9IiwgKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZz
cFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygp
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50
VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVu
aW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1
bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNw
WygyKSAtICgzKV0pKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDUx
OgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQorICAgIGJyZWFrOworCisgIGNhc2UgNTI6
CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA1MzoK
KworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDU0Ogor
CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQorICAgIGJyZWFrOworCisgIGNhc2UgNTU6CisK
KyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxBbmQsICh5eXZzcFsoMSkgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7
CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAg
ICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICImJiIs
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0
cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29t
cGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
ICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Cisg
ICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENv
bnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFD
b25zdCksICh5eWxzcFsoMikgLSAoMyldKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7
CisKKyAgY2FzZSA1NjoKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KKyAgICBicmVhazsK
KworICBjYXNlIDU3OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2FsWG9y
LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4
dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygy
KSAtICgzKV0pLCAiXl4iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsK
KyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVi
cFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOworICAgICAgICB9Cisg
ICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNTg6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
OyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA1OToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1h
dGgoRU9wTG9naWNhbE9yLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikg
LSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9w
RXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAifHwiLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25B
cnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0
QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRU
eXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDIpIC0gKDMpXSkp
OworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNjA6CisKKyAgICB7ICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2MToKKworICAgIHsKKyAg
ICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg1KV0pLCAoeXl2
c3BbKDEpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCisgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFNlbGVjdGlvbigoeXl2c3BbKDEpIC0gKDUpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eXZzcFsoNSkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXls
c3BbKDIpIC0gKDUpXSkpOworICAgICAgICBpZiAoKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldFR5cGUoKSAhPSAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpKQorICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gMDsKKworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNw
WygyKSAtICg1KV0pLCAiOiIsICh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBicmVhazsKKworICBjYXNlIDYyOgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsg
fQorICAgIGJyZWFrOworCisgIGNhc2UgNjM6CisKKyAgICB7CisgICAgICAgIGlmIChjb250ZXh0
LT5sVmFsdWVFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMyldKSwgImFzc2lnbiIsICh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZEFzc2lnbigoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0pLm9w
LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CisgICAg
ICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAg
ICAgY29udGV4dC0+YXNzaWduRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiYXNzaWduIiwgKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5n
KCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0
ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNh
c2UgNjQ6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wQXNzaWduOyB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSA2NToKKworICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BNdWxBc3Np
Z247IH0KKyAgICBicmVhazsKKworICBjYXNlIDY2OgorCisgICAgeyAoeXl2YWwuaW50ZXJtKS5v
cCA9IEVPcERpdkFzc2lnbjsgfQorICAgIGJyZWFrOworCisgIGNhc2UgNjc6CisKKyAgICB7ICh5
eXZhbC5pbnRlcm0pLm9wID0gRU9wQWRkQXNzaWduOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2
ODoKKworICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BTdWJBc3NpZ247IH0KKyAgICBicmVh
azsKKworICBjYXNlIDY5OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3MDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbW1hKCh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKKyAgICAgICAg
aWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBj
b250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIiwiLCAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5
dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5n
KCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3MToK
KworICAgIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPmNvbnN0RXJyb3JDaGVjaygoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCisgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgIH0KKyAgICBicmVhazsK
KworICBjYXNlIDcyOgorCisgICAgeworICAgICAgICBURnVuY3Rpb24gJmZ1bmN0aW9uID0gKigo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmZ1bmN0aW9uKTsKKyAgICAgICAgCisgICAgICAgIFRJ
bnRlcm1BZ2dyZWdhdGUgKnByb3RvdHlwZSA9IG5ldyBUSW50ZXJtQWdncmVnYXRlOworICAgICAg
ICBwcm90b3R5cGUtPnNldFR5cGUoZnVuY3Rpb24uZ2V0UmV0dXJuVHlwZSgpKTsKKyAgICAgICAg
cHJvdG90eXBlLT5zZXROYW1lKGZ1bmN0aW9uLmdldE5hbWUoKSk7CisgICAgICAgIAorICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKTsgaSsrKQor
ICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUUGFyYW1ldGVyICZwYXJhbSA9IGZ1bmN0aW9u
LmdldFBhcmFtKGkpOworICAgICAgICAgICAgaWYgKHBhcmFtLm5hbWUgIT0gMCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBUVmFyaWFibGUgdmFyaWFibGUocGFyYW0ubmFtZSwgKnBh
cmFtLnR5cGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHByb3RvdHlwZSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKHByb3RvdHlwZSwgY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZS5nZXRVbmlxdWVJZCgpLCB2YXJpYWJsZS5n
ZXROYW1lKCksIHZhcmlhYmxlLmdldFR5cGUoKSwgKHl5bHNwWygxKSAtICgyKV0pKSwgKHl5bHNw
WygxKSAtICgyKV0pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBwcm90b3R5cGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
Z3Jvd0FnZ3JlZ2F0ZShwcm90b3R5cGUsIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wo
MCwgIiIsICpwYXJhbS50eXBlLCAoeXlsc3BbKDEpIC0gKDIpXSkpLCAoeXlsc3BbKDEpIC0gKDIp
XSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwcm90b3R5
cGUtPnNldE9wKEVPcFByb3RvdHlwZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9k
ZSkgPSBwcm90b3R5cGU7CisKKyAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7Cisg
ICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNzM6CisKKyAgICB7CisgICAgICAgIGlmICgoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSkKKyAgICAgICAgICAgICh5eXZz
cFsoMSkgLSAoMildLmludGVybSkuaW50ZXJtQWdncmVnYXRlLT5zZXRPcChFT3BEZWNsYXJhdGlv
bik7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3
NDoKKworICAgIHsKKyAgICAgICAgaWYgKCgoeXl2c3BbKDIpIC0gKDQpXS5pbnRlcm0ucHJlY2lz
aW9uKSA9PSBFYnBIaWdoKSAmJiAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9T
SEFERVIpICYmICFjb250ZXh0LT5mcmFnbWVudFByZWNpc2lvbkhpZ2gpIHsKKyAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoNCldKSwgInByZWNpc2lvbiBpcyBub3Qgc3Vw
cG9ydGVkIGluIGZyYWdtZW50IHNoYWRlciIsICJoaWdocCIpOworICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIGlmICghY29udGV4dC0+c3ltYm9sVGFi
bGUuc2V0RGVmYXVsdFByZWNpc2lvbiggKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLnR5cGUpLCAo
eXl2c3BbKDIpIC0gKDQpXS5pbnRlcm0ucHJlY2lzaW9uKSApKSB7CisgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDQpXSksICJpbGxlZ2FsIHR5cGUgYXJndW1lbnQgZm9y
IGRlZmF1bHQgcHJlY2lzaW9uIHF1YWxpZmllciIsIGdldEJhc2ljU3RyaW5nKCh5eXZzcFsoMykg
LSAoNCldLmludGVybS50eXBlKS50eXBlKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgIH0KKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IDA7Cisg
ICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNzU6CisKKyAgICB7CisgICAgICAgIC8vCisgICAg
ICAgIC8vIE11bHRpcGxlIGRlY2xhcmF0aW9ucyBvZiB0aGUgc2FtZSBmdW5jdGlvbiBhcmUgYWxs
b3dlZC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGRlZmluaXRpb24sIHRo
ZSBkZWZpbml0aW9uIHByb2R1Y3Rpb24gY29kZSB3aWxsIGNoZWNrIGZvciByZWRlZmluaXRpb25z
CisgICAgICAgIC8vICh3ZSBkb24ndCBrbm93IGF0IHRoaXMgcG9pbnQgaWYgaXQncyBhIGRlZmlu
aXRpb24gb3Igbm90KS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gUmVkZWNsYXJhdGlvbnMgYXJl
IGFsbG93ZWQuICBCdXQsIHJldHVybiB0eXBlcyBhbmQgcGFyYW1ldGVyIHF1YWxpZmllcnMgbXVz
dCBtYXRjaC4KKyAgICAgICAgLy8KKyAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0gc3RhdGlj
X2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9sVGFibGUuZmluZCgoeXl2c3BbKDEpIC0g
KDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRNYW5nbGVkTmFtZSgpKSk7CisgICAgICAgIGlmIChw
cmV2RGVjKSB7CisgICAgICAgICAgICBpZiAocHJldkRlYy0+Z2V0UmV0dXJuVHlwZSgpICE9ICh5
eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFJldHVyblR5cGUoKSkgeworICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgIm92ZXJsb2Fk
ZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSByZXR1cm4gdHlwZSIsICh5eXZzcFsoMSkg
LSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygp
KTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZXZEZWMtPmdldFBhcmFtQ291bnQo
KTsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdldFBhcmFtKGkpLnR5cGUt
PmdldFF1YWxpZmllcigpICE9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdl
dFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpKSB7CisgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11
c3QgaGF2ZSB0aGUgc2FtZSBwYXJhbWV0ZXIgcXVhbGlmaWVycyIsICh5eXZzcFsoMSkgLSAoMild
LmludGVybS5mdW5jdGlvbiktPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllclN0cmluZygp
KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vCisgICAgICAgIC8v
IENoZWNrIGZvciBwcmV2aW91c2x5IGRlY2xhcmVkIHZhcmlhYmxlcyB1c2luZyB0aGUgc2FtZSBu
YW1lLgorICAgICAgICAvLworICAgICAgICBUU3ltYm9sICpwcmV2U3ltID0gY29udGV4dC0+c3lt
Ym9sVGFibGUuZmluZCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXROYW1l
KCkpOworICAgICAgICBpZiAocHJldlN5bSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFw
cmV2U3ltLT5pc0Z1bmN0aW9uKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgyKV0pLCAicmVkZWZpbml0aW9uIiwgKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0TmFtZSgpLmNfc3RyKCksICJmdW5jdGlvbiIp
OworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEluc2VydCB0
aGUgdW5tYW5nbGVkIG5hbWUgdG8gZGV0ZWN0IHBvdGVudGlhbCBmdXR1cmUgcmVkZWZpbml0aW9u
IGFzIGEgdmFyaWFibGUuCisgICAgICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5nZXRPdXRl
ckxldmVsKCktPmluc2VydCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRO
YW1lKCksICooeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pKTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vCisgICAgICAgIC8vIElmIHRoaXMgaXMgYSByZWRlY2xhcmF0aW9uLCBpdCBj
b3VsZCBhbHNvIGJlIGEgZGVmaW5pdGlvbiwKKyAgICAgICAgLy8gaW4gd2hpY2ggY2FzZSwgd2Ug
d2FudCB0byB1c2UgdGhlIHZhcmlhYmxlIG5hbWVzIGZyb20gdGhpcyBvbmUsIGFuZCBub3QgdGhl
IG9uZSB0aGF0J3MKKyAgICAgICAgLy8gYmVpbmcgcmVkZWNsYXJlZC4gIFNvLCBwYXNzIGJhY2sg
dXAgdGhpcyBkZWNsYXJhdGlvbiwgbm90IHRoZSBvbmUgaW4gdGhlIHN5bWJvbCB0YWJsZS4KKyAg
ICAgICAgLy8KKyAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0g
KDIpXS5pbnRlcm0uZnVuY3Rpb24pOworCisgICAgICAgIC8vIFdlJ3JlIGF0IHRoZSBpbm5lciBz
Y29wZSBsZXZlbCBvZiB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudHMgYW5kIGJvZHkgc3RhdGVtZW50
LgorICAgICAgICAvLyBBZGQgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZSB0byB0aGUgc3Vycm91bmRp
bmcgc2NvcGUgaW5zdGVhZC4KKyAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUuZ2V0T3V0ZXJM
ZXZlbCgpLT5pbnNlcnQoKih5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uKTsKKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSA3NjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlv
bikgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24pOworICAgIH0KKyAgICBicmVh
azsKKworICBjYXNlIDc3OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9u
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5mdW5jdGlvbik7CisgICAgfQorICAgIGJyZWFr
OworCisgIGNhc2UgNzg6CisKKyAgICB7CisgICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyCisg
ICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJt
LmZ1bmN0aW9uKTsKKyAgICAgICAgaWYgKCh5eXZzcFsoMikgLSAoMildLmludGVybSkucGFyYW0u
dHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkKKyAgICAgICAgICAgICh5eXZzcFsoMSkg
LSAoMildLmludGVybS5mdW5jdGlvbiktPmFkZFBhcmFtZXRlcigoeXl2c3BbKDIpIC0gKDIpXS5p
bnRlcm0pLnBhcmFtKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGVsZXRlICh5eXZzcFso
MikgLSAoMildLmludGVybSkucGFyYW0udHlwZTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSA3OToKKworICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gT25seSBmaXJzdCBwYXJhbWV0
ZXIgb2Ygb25lLXBhcmFtZXRlciBmdW5jdGlvbnMgY2FuIGJlIHZvaWQKKyAgICAgICAgLy8gVGhl
IGNoZWNrIGZvciBuYW1lZCBwYXJhbWV0ZXJzIG5vdCBiZWluZyB2b2lkIGlzIGRvbmUgaW4gcGFy
YW1ldGVyX2RlY2xhcmF0b3IKKyAgICAgICAgLy8KKyAgICAgICAgaWYgKCh5eXZzcFsoMykgLSAo
MyldLmludGVybSkucGFyYW0udHlwZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgeworICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFRoaXMgcGFyYW1ldGVyID4gZmlyc3QgaXMgdm9p
ZAorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikg
LSAoMyldKSwgImNhbm5vdCBiZSBhbiBhcmd1bWVudCB0eXBlIGV4Y2VwdCBmb3IgJyh2b2lkKSci
LCAidm9pZCIpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAg
ZGVsZXRlICh5eXZzcFsoMykgLSAoMyldLmludGVybSkucGFyYW0udHlwZTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyCisgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5mdW5jdGlvbik7
CisgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uZnVuY3Rpb24pLT5hZGRQYXJh
bWV0ZXIoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKS5wYXJhbSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSA4MDoKKworICAgIHsKKyAgICAgICAgaWYgKCh5eXZzcFso
MSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZpZXIgIT0gRXZxR2xvYmFsICYmICh5eXZzcFso
MSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7CisgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICJubyBxdWFsaWZpZXJz
IGFsbG93ZWQgZm9yIGZ1bmN0aW9uIHJldHVybiIsIGdldFF1YWxpZmllclN0cmluZygoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSk7CisgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gbWFrZSBzdXJlIGEgc2FtcGxlciBp
cyBub3QgaW52b2x2ZWQgYXMgd2VsbC4uLgorICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVh
bGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDMpXSksICh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS50eXBlKSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAg
Ly8gQWRkIHRoZSBmdW5jdGlvbiBhcyBhIHByb3RvdHlwZSBhZnRlciBwYXJzaW5nIGl0ICh3ZSBk
byBub3Qgc3VwcG9ydCByZWN1cnNpb24pCisgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb247Cisg
ICAgICAgIFRUeXBlIHR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpKTsKKyAgICAg
ICAgZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCh5eXZzcFsoMikgLSAoMyldLmxleCkuc3RyaW5n
LCB0eXBlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSBmdW5jdGlvbjsKKyAg
ICAgICAgCisgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsKKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSA4MToKKworICAgIHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAo
MildLmludGVybS50eXBlKS50eXBlID09IEVidFZvaWQpIHsKKyAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwg
KHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOworICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZl
ZEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgyKV0pLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5z
dHJpbmcpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBUUGFyYW1l
dGVyIHBhcmFtID0geyh5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLCBuZXcgVFR5cGUoKHl5
dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpKX07CisgICAgICAgICh5eXZhbC5pbnRlcm0pLnBh
cmFtID0gcGFyYW07CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgODI6CisKKyAgICB7Cisg
ICAgICAgIC8vIENoZWNrIHRoYXQgd2UgY2FuIG1ha2UgYW4gYXJyYXkgb3V0IG9mIHRoaXMgdHlw
ZQorICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0g
KDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSkpCisgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVj
aygoeXlsc3BbKDIpIC0gKDUpXSksICooeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0cmluZykpCisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaW50IHNpemU7CisgICAg
ICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwg
KHl5dnNwWyg0KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNpemUpKQorICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAoeXl2c3BbKDEpIC0gKDUpXS5pbnRl
cm0udHlwZSkuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CisKKyAgICAgICAgVFR5cGUqIHR5cGUgPSBu
ZXcgVFR5cGUoKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKTsKKyAgICAgICAgVFBhcmFt
ZXRlciBwYXJhbSA9IHsgKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsIHR5cGUgfTsKKyAg
ICAgICAgKHl5dmFsLmludGVybSkucGFyYW0gPSBwYXJhbTsKKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSA4MzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDMp
IC0gKDMpXS5pbnRlcm0pOworICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5
eWxzcFsoMykgLSAoMyldKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmll
ciwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRlcm0pLnBh
cmFtLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgIH0KKyAgICBi
cmVhazsKKworICBjYXNlIDg0OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5
eXZzcFsoMikgLSAoMildLmludGVybSk7CisgICAgICAgIGlmIChjb250ZXh0LT5wYXJhbWV0ZXJT
YW1wbGVyRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksICh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS5xdWFsaWZpZXIpLCAqKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKS5wYXJhbS50eXBlKSkK
KyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnBh
cmFtRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksIEV2cVRlbXBvcmFyeSwgKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRlcm0pLnBhcmFtLnR5cGUpKQor
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDg1OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMykgLSAo
MyldLmludGVybSk7CisgICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soKHl5bHNw
WygzKSAtICgzKV0pLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyLCAo
eXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0ucXVhbGlmaWVyKSwgKHl5dmFsLmludGVybSkucGFyYW0u
dHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgfQorICAgIGJyZWFr
OworCisgIGNhc2UgODY6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNw
WygyKSAtICgyKV0uaW50ZXJtKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtZXRlclNhbXBs
ZXJFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJt
LnF1YWxpZmllciksICooeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLnBhcmFtLnR5cGUpKQorICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1F
cnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgRXZxVGVtcG9yYXJ5LCAoeXl2c3BbKDEpIC0g
KDIpXS5pbnRlcm0ucXVhbGlmaWVyKSwgKHl5dmFsLmludGVybSkucGFyYW0udHlwZSkpCisgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2Ug
ODc6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cUluOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDg4OgorCisgICAgeworICAgICAgICAoeXl2YWwu
aW50ZXJtLnF1YWxpZmllcikgPSBFdnFJbjsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA4
OToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5xdWFsaWZpZXIpID0gRXZxT3V0Owor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDkwOgorCisgICAgeworICAgICAgICAoeXl2YWwu
aW50ZXJtLnF1YWxpZmllcikgPSBFdnFJbk91dDsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSA5MToKKworICAgIHsKKyAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBl
KCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSkgfTsKKyAgICAgICAgKHl5dmFsLmludGVy
bSkucGFyYW0gPSBwYXJhbTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5MjoKKworICAg
IHsKKyAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDkzOgorCisgICAgeworICAgICAgICBpZiAoKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtKS50eXBlLnR5cGUgPT0gRWJ0SW52YXJpYW50ICYmICEoeXl2
c3BbKDMpIC0gKDMpXS5sZXgpLnN5bWJvbCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoKHl5bHNwWygzKSAtICgzKV0pLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xh
cmVkIGFzIGludmFyaWFudCIsICh5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLT5jX3N0cigp
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAg
IFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wo
MCwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0pLnR5cGUpLCAoeXlsc3BbKDMpIC0gKDMpXSkpOworICAgICAgICAoeXl2YWwuaW50
ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0
ZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmludGVybU5vZGUsIHN5bWJvbCwgKHl5bHNwWygz
KSAtICgzKV0pKTsKKyAgICAgICAgCisgICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZp
ZXJFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoMyldKSwgKHl5dmFsLmludGVybSkudHlwZSkpCisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPm5v
bkluaXRDb25zdEVycm9yQ2hlY2soKHl5bHNwWygzKSAtICgzKV0pLCAqKHl5dnNwWygzKSAtICgz
KV0ubGV4KS5zdHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5cGUsIGZhbHNlKSkKKyAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsK
KyAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoMyld
KSwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2YWwuaW50ZXJtKS50eXBlLCB2
YXJpYWJsZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChz
eW1ib2wgJiYgdmFyaWFibGUpCisgICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5n
ZXRVbmlxdWVJZCgpKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5NDoKKworICAgIHsK
KyAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygz
KSAtICg1KV0pLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUpKQorICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RF
cnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwgKih5eXZzcFsoMykgLSAoNSldLmxleCkuc3Ry
aW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUsIHRydWUpKQorICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygx
KSAtICg1KV0uaW50ZXJtKTsKKworICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JD
aGVjaygoeXlsc3BbKDQpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSkg
fHwgY29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoNCkgLSAoNSldKSwg
KHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDUpXS5p
bnRlcm0pLnR5cGUuc2V0QXJyYXkodHJ1ZSk7CisgICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlh
YmxlOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygoeXlsc3BbKDQp
IC0gKDUpXSksICooeXl2c3BbKDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1
KV0uaW50ZXJtKS50eXBlLCB2YXJpYWJsZSkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgOTU6CisKKyAg
ICB7CisgICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxz
cFsoMykgLSAoNildKSwgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50eXBlKSkKKyAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENv
bnN0RXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDYpXSksICooeXl2c3BbKDMpIC0gKDYpXS5sZXgp
LnN0cmluZywgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50eXBlLCB0cnVlKSkKKyAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZz
cFsoMSkgLSAoNildLmludGVybSk7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVy
cm9yQ2hlY2soKHl5bHNwWyg0KSAtICg2KV0pLCAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5
cGUpIHx8IGNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDQpIC0gKDYp
XSksICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSkpCisgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW50IHNpemU7CisgICAg
ICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygoeXlsc3BbKDQpIC0gKDYp
XSksICh5eXZzcFsoNSkgLSAoNildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBzaXplKSkKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2c3BbKDEp
IC0gKDYpXS5pbnRlcm0pLnR5cGUuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CisgICAgICAgICAgICBU
VmFyaWFibGUqIHZhcmlhYmxlID0gMDsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheUVy
cm9yQ2hlY2soKHl5bHNwWyg0KSAtICg2KV0pLCAqKHl5dnNwWygzKSAtICg2KV0ubGV4KS5zdHJp
bmcsICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSwgdmFyaWFibGUpKQorICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIFRUeXBlIHR5cGUgPSBUVHlw
ZSgoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUpOworICAgICAgICAgICAgdHlwZS5zZXRB
cnJheVNpemUoc2l6ZSk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdh
dGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDYp
XS5pbnRlcm0pLmludGVybU5vZGUsIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFy
aWFibGUgPyB2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSA6IDAsICooeXl2c3BbKDMpIC0gKDYpXS5s
ZXgpLnN0cmluZywgdHlwZSwgKHl5bHNwWygzKSAtICg2KV0pKSwgKHl5bHNwWygzKSAtICg2KV0p
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDk2OgorCisgICAgewor
ICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDMp
IC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSkpCisgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEp
IC0gKDUpXS5pbnRlcm0pOworCisgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOworICAg
ICAgICBpZiAoIWNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigoeXlsc3BbKDMpIC0gKDUpXSks
ICooeXl2c3BbKDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJt
KS50eXBlLCAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW50ZXJt
Tm9kZSkpIHsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBidWlsZCB0aGUgaW50ZXJt
ZWRpYXRlIHJlcHJlc2VudGF0aW9uCisgICAgICAgICAgICAvLworICAgICAgICAgICAgaWYgKGlu
dGVybU5vZGUpCisgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoNSldLmludGVybSku
aW50ZXJtTm9kZSwgaW50ZXJtTm9kZSwgKHl5bHNwWyg0KSAtICg1KV0pKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAo
eXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7
CisKKyAgY2FzZSA5NzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsKKyAgICAgICAgKHl5dmFsLmludGVybSkuaW50
ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAiIiwgVFR5cGUoKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLnR5cGUpKSwgKHl5bHNwWygxKSAtICgxKV0pKSwgKHl5bHNwWygxKSAtICgxKV0pKTsK
KyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5ODoKKworICAgIHsKKyAgICAgICAgVEludGVy
bVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5
dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcsIFRUeXBlKCh5eXZzcFsoMSkgLSAoMildLmludGVy
bS50eXBlKSksICh5eWxzcFsoMikgLSAoMildKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmlu
dGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJv
bCwgKHl5bHNwWygyKSAtICgyKV0pKTsKKyAgICAgICAgCisgICAgICAgIGlmIChjb250ZXh0LT5z
dHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgKHl5dmFsLmludGVy
bSkudHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgyKV0pLCAqKHl5
dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5cGUsIGZhbHNlKSkK
KyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKTsK
KworICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKKyAgICAgICAgaWYgKGNvbnRleHQt
Pm5vbkluaXRFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgKih5eXZzcFsoMikgLSAoMild
LmxleCkuc3RyaW5nLCAoeXl2YWwuaW50ZXJtKS50eXBlLCB2YXJpYWJsZSkpCisgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCisg
ICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSA5OToKKworICAgIHsKKyAgICAgICAgY29udGV4dC0+ZXJy
b3IoKHl5bHNwWygyKSAtICg0KV0pLCAidW5zaXplZCBhcnJheSBkZWNsYXJhdGlvbnMgbm90IHN1
cHBvcnRlZCIsICh5eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKKyAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMikgLSAoNCldLmxl
eCkuc3RyaW5nLCBUVHlwZSgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpLCAoeXlsc3Bb
KDIpIC0gKDQpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsICh5eWxzcFsoMikgLSAo
NCldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDQpXS5p
bnRlcm0udHlwZSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTAwOgorCisgICAgewor
ICAgICAgICBUVHlwZSB0eXBlID0gVFR5cGUoKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUp
KTsKKyAgICAgICAgaW50IHNpemU7CisgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJv
ckNoZWNrKCh5eWxzcFsoMikgLSAoNSldKSwgKHl5dnNwWyg0KSAtICg1KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksIHNpemUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICB0eXBlLnNldEFycmF5U2l6ZShzaXplKTsKKyAgICAgICAgVEludGVybVN5bWJvbCogc3lt
Ym9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAtICg1
KV0ubGV4KS5zdHJpbmcsIHR5cGUsICh5eWxzcFsoMikgLSAoNSldKSk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdn
cmVnYXRlKHN5bWJvbCwgKHl5bHNwWygyKSAtICg1KV0pKTsKKyAgICAgICAgCisgICAgICAgIGlm
IChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNSldKSwg
KHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKKworICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygo
eXlsc3BbKDIpIC0gKDUpXSksICooeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNw
WygxKSAtICg1KV0uaW50ZXJtLnR5cGUpLCB0cnVlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKKworICAgICAgICAoeXl2YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICg1
KV0uaW50ZXJtLnR5cGUpOworCisgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNo
ZWNrKCh5eWxzcFsoMykgLSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKSB8
fCBjb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0pLCAo
eXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSkpKQorICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludCBzaXplOworICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0pLCAo
eXl2c3BbKDQpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCisgICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICAgICAoeXl2c3BbKDEpIC0g
KDUpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CisgICAgICAgICAgICBUVmFy
aWFibGUqIHZhcmlhYmxlID0gMDsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheUVycm9y
Q2hlY2soKHl5bHNwWygzKSAtICg1KV0pLCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcs
ICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSwgdmFyaWFibGUpKQorICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1i
b2wpCisgICAgICAgICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQo
KSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDE6CisKKyAgICB7
CisgICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFso
MikgLSAoNCldKSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAoeXl2YWwuaW50ZXJtKS50eXBlID0gKHl5
dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpOworCisgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRl
cm1Ob2RlOworICAgICAgICBpZiAoIWNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigoeXlsc3Bb
KDIpIC0gKDQpXSksICooeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAt
ICg0KV0uaW50ZXJtLnR5cGUpLCAoeXl2c3BbKDQpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgaW50ZXJtTm9kZSkpIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQnVpbGQgaW50ZXJt
ZWRpYXRlIHJlcHJlc2VudGF0aW9uCisgICAgICAgIC8vCisgICAgICAgICAgICBpZihpbnRlcm1O
b2RlKQorICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKGludGVybU5vZGUsICh5eWxzcFsoMykg
LSAoNCldKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVy
bSkuaW50ZXJtQWdncmVnYXRlID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3Jl
Z2F0ZSA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDI6CisK
KyAgICB7CisgICAgICAgIFZFUlRFWF9PTkxZKCJpbnZhcmlhbnQgZGVjbGFyYXRpb24iLCAoeXls
c3BbKDEpIC0gKDIpXSkpOworICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygo
eXlsc3BbKDEpIC0gKDIpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwg
ImludmFyaWFudCB2YXJ5aW5nIikpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUuc2V0QmFzaWMoRWJ0SW52YXJpYW50LCBFdnFJbnZh
cmlhbnRWYXJ5aW5nT3V0LCAoeXlsc3BbKDIpIC0gKDIpXSkpOworICAgICAgICBpZiAoISh5eXZz
cFsoMikgLSAoMildLmxleCkuc3ltYm9sKQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFy
ZWQgYXMgaW52YXJpYW50IiwgKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkp
OworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAwOworICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4
KS5zdHJpbmcsIFRUeXBlKCh5eXZhbC5pbnRlcm0pLnR5cGUpLCAoeXlsc3BbKDIpIC0gKDIpXSkp
OworICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCAoeXlsc3BbKDIpIC0gKDIpXSkpOwor
ICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTAzOgorCisgICAgeworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUp
OworCisgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuYXJyYXkpIHsK
KyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgIm5vdCBzdXBw
b3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zZXRBcnJh
eShmYWxzZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDQ6CisK
KyAgICB7CisgICAgICAgIGlmICgoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkuYXJyYXkp
IHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgIm5vdCBz
dXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgICAgICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5zZXRB
cnJheShmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0u
aW50ZXJtLnR5cGUpLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUgJiYKKyAgICAgICAgICAgICgo
eXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRCb29sIHx8ICh5eXZzcFso
MikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidEludCkpIHsKKyAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgImNhbm5vdCBiZSBib29sIG9yIGludCIs
IGdldFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlm
aWVyKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyID09IEV2cVZh
cnlpbmdJbiB8fCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyID09IEV2
cVZhcnlpbmdPdXQpICYmCisgICAgICAgICAgICAoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5
cGUpLnR5cGUgPT0gRWJ0Qm9vbCB8fCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlw
ZSA9PSBFYnRJbnQpKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0g
KDIpXSksICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcikpOworICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAo
eXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkucXVhbGlmaWVyID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcjsK
KyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDU6CisKKyAgICB7CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxQ29uc3QsICh5eWxzcFsoMSkgLSAo
MSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTA2OgorCisgICAgeworICAgICAg
ICBWRVJURVhfT05MWSgiYXR0cmlidXRlIiwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAg
aWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgxKV0pLCBjb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJhdHRyaWJ1dGUiKSkKKyAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNp
YyhFYnRWb2lkLCBFdnFBdHRyaWJ1dGUsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAg
IGJyZWFrOworCisgIGNhc2UgMTA3OgorCisgICAgeworICAgICAgICBpZiAoY29udGV4dC0+Z2xv
YmFsRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDEpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0
R2xvYmFsTGV2ZWwoKSwgInZhcnlpbmciKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUikK
KyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVmFy
eWluZ091dCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFWYXJ5aW5nSW4sICh5eWxz
cFsoMSkgLSAoMSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTA4OgorCisgICAg
eworICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDIp
XSksIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImludmFyaWFudCB2YXJ5
aW5nIikpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChjb250
ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCisgICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFyaWFudFZhcnlpbmdPdXQsICh5
eWxzcFsoMSkgLSAoMildKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxSW52YXJpYW50VmFyeWluZ0luLCAoeXlsc3Bb
KDEpIC0gKDIpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEwOToKKworICAgIHsK
KyAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgxKV0p
LCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ1bmlmb3JtIikpCisgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSku
c2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVW5pZm9ybSwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTA6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7CisKKyAgICAgICAgaWYg
KCh5eXZhbC5pbnRlcm0udHlwZSkucHJlY2lzaW9uID09IEVicFVuZGVmaW5lZCkgeworICAgICAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKS5wcmVjaXNpb24gPSBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5nZXREZWZhdWx0UHJlY2lzaW9uKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS50eXBl
KTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5wcmVjaXNpb25FcnJvckNoZWNrKCh5eWxzcFso
MSkgLSAoMSldKSwgKHl5dmFsLmludGVybS50eXBlKS5wcmVjaXNpb24sICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS50eXBlKS50eXBlKSkgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDExMToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFso
MikgLSAoMildLmludGVybS50eXBlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5wcmVj
aXNpb24gPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0ucHJlY2lzaW9uKTsKKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAxMTI6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ucHJl
Y2lzaW9uKSA9IEVicEhpZ2g7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTEzOgorCisg
ICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnByZWNpc2lvbikgPSBFYnBNZWRpdW07CisgICAg
fQorICAgIGJyZWFrOworCisgIGNhc2UgMTE0OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50
ZXJtLnByZWNpc2lvbikgPSBFYnBMb3c7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTE1
OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLnR5cGUpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDExNjoKKworICAg
IHsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMSkgLSAoNCldLmludGVy
bS50eXBlKTsKKworICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXls
c3BbKDIpIC0gKDQpXSksICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSkpCisgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW50
IHNpemU7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygoeXls
c3BbKDIpIC0gKDQpXSksICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCBzaXplKSkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFycmF5KHRydWUsIHNpemUpOworICAgICAgICB9Cisg
ICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTE3OgorCisgICAgeworICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMo
RWJ0Vm9pZCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxMTg6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
KyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5
bHNwWygxKSAtICgxKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTk6CisKKyAg
ICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Cisg
ICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTIwOgorCisgICAgeworICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMo
RWJ0Qm9vbCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxMjE6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
KyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5
bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdh
dGUoMik7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTIyOgorCisgICAgeworICAgICAg
ICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkg
PyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSku
c2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOworICAgIH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDEyMzoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+
c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5Owor
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXls
c3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0
ZSg0KTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjQ6CisKKyAgICB7CisgICAgICAg
IFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/
IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5z
ZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgyKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAxMjU6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXlsc3Bb
KDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgz
KTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjY6CisKKyAgICB7CisgICAgICAgIFRR
dWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2
cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRCb29sLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAxMjc6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5eWxzcFsoMSkg
LSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDIpOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEyODoKKworICAgIHsKKyAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2lj
KEVidEludCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRBZ2dyZWdhdGUoMyk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTI5
OgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEp
XSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzA6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRG
bG9hdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKS5zZXRBZ2dyZWdhdGUoMiwgdHJ1ZSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2Ug
MTMxOgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkg
LSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMsIHRy
dWUpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzMjoKKworICAgIHsKKyAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0LCB0cnVlKTsKKyAgICB9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAxMzM6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFy
eTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyMkQsIHF1
YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTM0
OgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U2FtcGxlckN1YmUsIHF1YWwsICh5eWxzcFso
MSkgLSAoMSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTM1OgorCisgICAgewor
ICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRXh0ZW5zaW9uKCJHTF9PRVNfRUdMX2ltYWdl
X2V4dGVybmFsIikpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAo
MSldKSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlckV4dGVybmFsT0VTIik7CisgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgVFF1YWxpZmllciBx
dWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDog
RXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNh
bXBsZXJFeHRlcm5hbE9FUywgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAxMzY6CisKKyAgICB7CisgICAgICAgIGlmICghY29udGV4dC0+c3Vw
cG9ydHNFeHRlbnNpb24oIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIpKSB7CisgICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSksICJ1bnN1cHBvcnRlZCB0eXBlIiwg
InNhbXBsZXIyRFJlY3QiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgfQorICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U2FtcGxlcjJEUmVjdCwgcXVhbCwgKHl5bHNwWygxKSAt
ICgxKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzc6CisKKyAgICB7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucXVhbGlmaWVyID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgIH0K
KyAgICBicmVhazsKKworICBjYXNlIDEzODoKKworICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gVGhpcyBpcyBmb3IgdXNlciBkZWZpbmVkIHR5cGUgbmFtZXMuICBUaGUgbGV4aWNhbCBwaGFz
ZSBsb29rZWQgdXAgdGhlCisgICAgICAgIC8vIHR5cGUuCisgICAgICAgIC8vCisgICAgICAgIFRU
eXBlJiBzdHJ1Y3R1cmUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPigoeXl2c3BbKDEpIC0gKDEp
XS5sZXgpLnN5bWJvbCktPmdldFR5cGUoKTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFN0cnVjdCwgcXVh
bCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS51c2Vy
RGVmID0gJnN0cnVjdHVyZTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzk6CisKKyAg
ICB7IGlmIChjb250ZXh0LT5lbnRlclN0cnVjdERlY2xhcmF0aW9uKCh5eWxzcFsoMikgLSAoMyld
KSwgKih5eXZzcFsoMikgLSAoMyldLmxleCkuc3RyaW5nKSkgY29udGV4dC0+cmVjb3ZlcigpOyB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDA6CisKKyAgICB7CisgICAgICAgIGlmIChjb250ZXh0
LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg2KV0pLCAqKHl5dnNwWygyKSAtICg2
KV0ubGV4KS5zdHJpbmcpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAg
ICAgIFRUeXBlKiBzdHJ1Y3R1cmUgPSBuZXcgVFR5cGUobmV3IFRTdHJ1Y3R1cmUoKHl5dnNwWygy
KSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoNSkgLSAoNildLmludGVybS5maWVsZExpc3Qp
KSk7CisgICAgICAgIFRWYXJpYWJsZSogdXNlclR5cGVEZWYgPSBuZXcgVFZhcmlhYmxlKCh5eXZz
cFsoMikgLSAoNildLmxleCkuc3RyaW5nLCAqc3RydWN0dXJlLCB0cnVlKTsKKyAgICAgICAgaWYg
KCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp1c2VyVHlwZURlZikpIHsKKyAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoNildKSwgInJlZGVmaW5pdGlvbiIsICh5
eXZzcFsoMikgLSAoNildLmxleCkuc3RyaW5nLT5jX3N0cigpLCAic3RydWN0Iik7CisgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgKHl5bHNwWygxKSAtICg2
KV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS51c2VyRGVmID0gc3RydWN0dXJlOwor
ICAgICAgICBjb250ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsKKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxNDE6CisKKyAgICB7IGlmIChjb250ZXh0LT5lbnRlclN0cnVjdERlY2xh
cmF0aW9uKCh5eWxzcFsoMikgLSAoMildKSwgKih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5n
KSkgY29udGV4dC0+cmVjb3ZlcigpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDI6CisKKyAg
ICB7CisgICAgICAgIFRUeXBlKiBzdHJ1Y3R1cmUgPSBuZXcgVFR5cGUobmV3IFRTdHJ1Y3R1cmUo
TmV3UG9vbFRTdHJpbmcoIiIpLCAoeXl2c3BbKDQpIC0gKDUpXS5pbnRlcm0uZmllbGRMaXN0KSkp
OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFN0cnVjdCwgRXZxVGVt
cG9yYXJ5LCAoeXlsc3BbKDEpIC0gKDUpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnVzZXJEZWYgPSBzdHJ1Y3R1cmU7CisgICAgICAgIGNvbnRleHQtPmV4aXRTdHJ1Y3REZWNsYXJh
dGlvbigpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE0MzoKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsLmludGVybS5maWVsZExpc3QpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmZp
ZWxkTGlzdCk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTQ0OgorCisgICAgeworICAg
ICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0u
ZmllbGRMaXN0KTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAoeXl2c3BbKDIpIC0g
KDIpXS5pbnRlcm0uZmllbGRMaXN0KS0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIFRGaWVs
ZCogZmllbGQgPSAoKih5eXZzcFsoMikgLSAoMildLmludGVybS5maWVsZExpc3QpKVtpXTsKKyAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgKHl5dmFsLmludGVybS5maWVsZExpc3Qp
LT5zaXplKCk7ICsraikgeworICAgICAgICAgICAgICAgIGlmICgoKih5eXZhbC5pbnRlcm0uZmll
bGRMaXN0KSlbal0tPm5hbWUoKSA9PSBmaWVsZC0+bmFtZSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgImR1cGxpY2F0ZSBmaWVsZCBu
YW1lIGluIHN0cnVjdHVyZToiLCAic3RydWN0IiwgZmllbGQtPm5hbWUoKS5jX3N0cigpKTsKKyAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0KS0+cHVz
aF9iYWNrKGZpZWxkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE0
NToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5maWVsZExpc3QpID0gKHl5dnNwWygy
KSAtICgzKV0uaW50ZXJtLmZpZWxkTGlzdCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPnZvaWRF
cnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMyldKSwgKCooeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0u
ZmllbGRMaXN0KSlbMF0tPm5hbWUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpKSkg
eworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgKHl5dmFsLmludGVybS5maWVsZExpc3QpLT5zaXpl
KCk7ICsraSkgeworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIENhcmVmdWwgbm90IHRv
IHJlcGxhY2UgYWxyZWFkeSBrbm93biBhc3BlY3RzIG9mIHR5cGUsIGxpa2UgYXJyYXktbmVzcwor
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIFRUeXBlKiB0eXBlID0gKCooeXl2YWwuaW50ZXJt
LmZpZWxkTGlzdCkpW2ldLT50eXBlKCk7CisgICAgICAgICAgICB0eXBlLT5zZXRCYXNpY1R5cGUo
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnR5cGUpOworICAgICAgICAgICAgdHlwZS0+
c2V0Tm9taW5hbFNpemUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnNpemUpOworICAg
ICAgICAgICAgdHlwZS0+c2V0TWF0cml4KCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5t
YXRyaXgpOworICAgICAgICAgICAgdHlwZS0+c2V0UHJlY2lzaW9uKCh5eXZzcFsoMSkgLSAoMyld
LmludGVybS50eXBlKS5wcmVjaXNpb24pOworCisgICAgICAgICAgICAvLyBkb24ndCBhbGxvdyBh
cnJheXMgb2YgYXJyYXlzCisgICAgICAgICAgICBpZiAodHlwZS0+aXNBcnJheSgpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5bHNwWygxKSAt
ICgzKV0pLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkpKQorICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLmFycmF5KQorICAgICAgICAgICAgICAgIHR5
cGUtPnNldEFycmF5U2l6ZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkuYXJyYXlTaXpl
KTsKKyAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkudXNlckRl
ZikKKyAgICAgICAgICAgICAgICB0eXBlLT5zZXRTdHJ1Y3QoKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLnR5cGUpLnVzZXJEZWYtPmdldFN0cnVjdCgpKTsKKworICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPnN0cnVjdE5lc3RpbmdFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMyldKSwgKigqKHl5dmFs
LmludGVybS5maWVsZExpc3QpKVtpXSkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTQ2OgorCisgICAg
eworICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSBOZXdQb29sVEZpZWxkTGlzdCgp
OworICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0uZmllbGQpKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDc6
CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0KS0+cHVzaF9iYWNrKCh5
eXZzcFsoMykgLSAoMyldLmludGVybS5maWVsZCkpOworICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDE0ODoKKworICAgIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVj
aygoeXlsc3BbKDEpIC0gKDEpXSksICooeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZykpCisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgVFR5cGUqIHR5cGUgPSBu
ZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5m
aWVsZCkgPSBuZXcgVEZpZWxkKHR5cGUsICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nKTsK
KyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDk6CisKKyAgICB7CisgICAgICAgIGlmIChj
b250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICg0KV0pLCAqKHl5dnNwWygx
KSAtICg0KV0ubGV4KS5zdHJpbmcpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwor
CisgICAgICAgIFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7
CisgICAgICAgIGludCBzaXplID0gMDsKKyAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVy
cm9yQ2hlY2soKHl5bHNwWygzKSAtICg0KV0pLCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgIHR5cGUtPnNldEFycmF5U2l6ZShzaXplKTsKKworICAgICAgICAoeXl2YWwuaW50ZXJt
LmZpZWxkKSA9IG5ldyBURmllbGQodHlwZSwgKHl5dnNwWygxKSAtICg0KV0ubGV4KS5zdHJpbmcp
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE1MDoKKworICAgIHsgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDE1MToKKworICAgIHsgKHl5dmFsLmludGVy
bS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQor
ICAgIGJyZWFrOworCisgIGNhc2UgMTUyOgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5v
ZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSk7IH0KKyAgICBi
cmVhazsKKworICBjYXNlIDE1MzoKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQorICAgIGJyZWFrOworCisg
IGNhc2UgMTU0OgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNTU6
CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uaW50ZXJtTm9kZSk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDE1NjoKKworICAgIHsg
KHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1Ob2RlKTsgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTU3OgorCisgICAgeyAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNTg6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJt
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KKyAgICBicmVh
azsKKworICBjYXNlIDE1OToKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUp
ID0gMDsgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTYwOgorCisgICAgeyBjb250ZXh0LT5zeW1i
b2xUYWJsZS5wdXNoKCk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDE2MToKKworICAgIHsgY29u
dGV4dC0+c3ltYm9sVGFibGUucG9wKCk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDE2MjoKKwor
ICAgIHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1BZ2dyZWdh
dGUpICE9IDApIHsKKyAgICAgICAgICAgICh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1B
Z2dyZWdhdGUpLT5zZXRPcChFT3BTZXF1ZW5jZSk7CisgICAgICAgICAgICAoeXl2c3BbKDMpIC0g
KDUpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKS0+c2V0TGluZSgoeXlsb2MpKTsKKyAgICAgICAg
fQorICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgPSAoeXl2c3BbKDMpIC0g
KDUpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAxNjM6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDE2NDoKKwor
ICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1Ob2RlKTsgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTY1OgorCisgICAgeyBjb250
ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0KKyAgICBicmVhazsKKworICBjYXNlIDE2NjoKKwor
ICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9k
ZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KKyAgICBicmVhazsK
KworICBjYXNlIDE2NzoKKworICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxNjg6CisKKyAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBv
cCgpOyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJt
LmludGVybU5vZGUpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNjk6CisKKyAgICB7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOworICAgIH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDE3MDoKKworICAgIHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMikgLSAoMyldLmludGVy
bS5pbnRlcm1BZ2dyZWdhdGUpKSB7CisgICAgICAgICAgICAoeXl2c3BbKDIpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtQWdncmVnYXRlKS0+c2V0T3AoRU9wU2VxdWVuY2UpOworICAgICAgICAgICAgKHl5
dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSktPnNldExpbmUoKHl5bG9jKSk7
CisgICAgICAgIH0KKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFso
MikgLSAoMyldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpOworICAgIH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDE3MToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dyZWdh
dGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXlsb2MpKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAxNzI6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtQWdncmVnYXRl
KSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoMild
LmludGVybS5pbnRlcm1BZ2dyZWdhdGUpLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJt
Tm9kZSksICh5eWxvYykpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE3MzoKKworICAg
IHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IDA7IH0KKyAgICBicmVhazsKKworICBjYXNl
IDE3NDoKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IHN0YXRpY19jYXN0PFRJ
bnRlcm1Ob2RlKj4oKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpOyB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNzU6CisKKyAgICB7CisgICAgICAgIGlmIChjb250ZXh0
LT5ib29sRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDUpXSksICh5eXZzcFsoMykgLSAoNSldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRTZWxlY3Rpb24oKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eXZzcFsoNSkgLSAoNSldLmludGVybS5ub2RlUGFpciksICh5eWxzcFsoMSkgLSAoNSldKSk7
CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTc2OgorCisgICAgeworICAgICAgICAoeXl2
YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1Ob2RlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTIgPSAoeXl2c3Bb
KDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtTm9kZSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNh
c2UgMTc3OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS5ub2RlUGFpcikubm9kZTIgPSAwOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE3
ODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgICAgIGlmIChjb250
ZXh0LT5ib29sRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0TGluZSgpLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgMTc5OgorCisgICAgeworICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsK
KyAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygy
KSAtICg0KV0pLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpKQorICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2so
KHl5bHNwWygyKSAtICg0KV0pLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpKQorICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmICghY29udGV4dC0+ZXhl
Y3V0ZUluaXRpYWxpemVyKCh5eWxzcFsoMikgLSAoNCldKSwgKih5eXZzcFsoMikgLSAoNCldLmxl
eCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSksICh5eXZzcFsoNCkgLSAo
NCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbnRlcm1Ob2RlKSkKKyAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoNCkgLSAoNCldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IDA7
CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxODA6CisKKyAgICB7IGNv
bnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxODE6CisKKyAgICB7CisgICAgICAgIGNvbnRleHQtPnN5
bWJvbFRhYmxlLnBvcCgpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3AoRUxvb3BXaGlsZSwgMCwgKHl5dnNwWyg0KSAtICg2
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIDAsICh5eXZzcFsoNikgLSAoNildLmludGVybS5p
bnRlcm1Ob2RlKSwgKHl5bHNwWygxKSAtICg2KV0pKTsKKyAgICAgICAgLS1jb250ZXh0LT5sb29w
TmVzdGluZ0xldmVsOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE4MjoKKworICAgIHsg
Kytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxODM6
CisKKyAgICB7CisgICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVjaygoeXlsc3BbKDgp
IC0gKDgpXSksICh5eXZzcFsoNikgLSAoOCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKKyAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3AoRUxvb3BEb1doaWxlLCAw
LCAoeXl2c3BbKDYpIC0gKDgpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgMCwgKHl5dnNwWygz
KSAtICg4KV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXlsc3BbKDQpIC0gKDgpXSkpOworICAgICAg
ICAtLWNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7CisgICAgfQorICAgIGJyZWFrOworCisgIGNh
c2UgMTg0OgorCisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7ICsrY29udGV4dC0+
bG9vcE5lc3RpbmdMZXZlbDsgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTg1OgorCisgICAgewor
ICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKKyAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRMb29wKEVMb29wRm9yLCAo
eXl2c3BbKDQpIC0gKDcpXS5pbnRlcm0uaW50ZXJtTm9kZSksIHJlaW50ZXJwcmV0X2Nhc3Q8VElu
dGVybVR5cGVkKj4oKHl5dnNwWyg1KSAtICg3KV0uaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSksIHJl
aW50ZXJwcmV0X2Nhc3Q8VEludGVybVR5cGVkKj4oKHl5dnNwWyg1KSAtICg3KV0uaW50ZXJtLm5v
ZGVQYWlyKS5ub2RlMiksICh5eXZzcFsoNykgLSAoNyldLmludGVybS5pbnRlcm1Ob2RlKSwgKHl5
bHNwWygxKSAtICg3KV0pKTsKKyAgICAgICAgLS1jb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE4NjoKKworICAgIHsKKyAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2Rl
KTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxODc6CisKKyAgICB7CisgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
Tm9kZSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTg4OgorCisgICAgeworICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxODk6CisK
KyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IDA7CisgICAg
fQorICAgIGJyZWFrOworCisgIGNhc2UgMTkwOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50
ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMiA9IDA7CisgICAg
fQorICAgIGJyZWFrOworCisgIGNhc2UgMTkxOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50
ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMiA9ICh5eXZzcFso
MykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgIH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDE5MjoKKworICAgIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPmxvb3BOZXN0aW5nTGV2
ZWwgPD0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgyKV0p
LCAiY29udGludWUgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIiKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BDb250
aW51ZSwgKHl5bHNwWygxKSAtICgyKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAx
OTM6CisKKyAgICB7CisgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9IDAp
IHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMildKSwgImJyZWFr
IHN0YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIik7CisgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1O
b2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wQnJlYWssICh5eWxzcFso
MSkgLSAoMildKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTk0OgorCisgICAgewor
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEJyYW5jaChFT3BSZXR1cm4sICh5eWxzcFsoMSkgLSAoMildKSk7CisgICAgICAgIGlmIChj
b250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7
CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDIpXSksICJub24tdm9p
ZCBmdW5jdGlvbiBtdXN0IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIpOworICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNh
c2UgMTk1OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1cm4sICh5eXZzcFsoMikgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDEpIC0gKDMpXSkpOworICAgICAgICBj
b250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IHRydWU7CisgICAgICAgIGlmIChjb250ZXh0
LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkKSB7CisgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDMpXSksICJ2b2lkIGZ1bmN0aW9u
IGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgfSBlbHNlIGlmICgqKGNvbnRleHQtPmN1cnJlbnRGdW5jdGlv
blR5cGUpICE9ICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRU
eXBlKCkpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMyldKSwg
ImZ1bmN0aW9uIHJldHVybiBpcyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0dXJuIik7CisgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAxOTY6CisKKyAgICB7CisgICAgICAgIEZSQUdfT05MWSgiZGlzY2FyZCIsICh5
eWxzcFsoMSkgLSAoMildKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcEtpbGwsICh5eWxzcFsoMSkgLSAoMild
KSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTk3OgorCisgICAgeworICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVy
bU5vZGUpOworICAgICAgICBjb250ZXh0LT50cmVlUm9vdCA9ICh5eXZhbC5pbnRlcm0uaW50ZXJt
Tm9kZSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTk4OgorCisgICAgeworICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dB
Z2dyZWdhdGUoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXl2c3BbKDIp
IC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eWxvYykpOworICAgICAgICBjb250ZXh0LT50
cmVlUm9vdCA9ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSk7CisgICAgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgMTk5OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOworICAgIH0KKyAgICBicmVh
azsKKworICBjYXNlIDIwMDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1O
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAyMDE6CisKKyAgICB7CisgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rp
b24gPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmZ1bmN0aW9uOworICAgICAgICAKKyAgICAg
ICAgY29uc3QgVFN5bWJvbCAqYnVpbHRJbiA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmRCdWls
dEluKGZ1bmN0aW9uLT5nZXRNYW5nbGVkTmFtZSgpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChi
dWlsdEluKQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEp
IC0gKDEpXSksICJidWlsdC1pbiBmdW5jdGlvbnMgY2Fubm90IGJlIHJlZGVmaW5lZCIsIGZ1bmN0
aW9uLT5nZXROYW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRp
Y19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoZnVuY3Rpb24tPmdl
dE1hbmdsZWROYW1lKCkpKTsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gTm90ZTogICdwcmV2RGVj
JyBjb3VsZCBiZSAnZnVuY3Rpb24nIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUgc2Vl
biBmdW5jdGlvbgorICAgICAgICAvLyBhcyBpdCB3b3VsZCBoYXZlIGp1c3QgYmVlbiBwdXQgaW4g
dGhlIHN5bWJvbCB0YWJsZS4gIE90aGVyd2lzZSwgd2UncmUgbG9va2luZyB1cAorICAgICAgICAv
LyBhbiBlYXJsaWVyIG9jY3VyYW5jZS4KKyAgICAgICAgLy8KKyAgICAgICAgaWYgKHByZXZEZWMt
PmlzRGVmaW5lZCgpKSB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVGhlbiB0aGlz
IGZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSksICJmdW5jdGlvbiBhbHJlYWR5IGhh
cyBhIGJvZHkiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOworICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIHByZXZEZWMtPnNldERlZmluZWQo
KTsKKworICAgICAgICAvLworICAgICAgICAvLyBSYWlzZSBlcnJvciBtZXNzYWdlIGlmIG1haW4g
ZnVuY3Rpb24gdGFrZXMgYW55IHBhcmFtZXRlcnMgb3IgcmV0dXJuIGFueXRoaW5nIG90aGVyIHRo
YW4gdm9pZAorICAgICAgICAvLworICAgICAgICBpZiAoZnVuY3Rpb24tPmdldE5hbWUoKSA9PSAi
bWFpbiIpIHsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0UGFyYW1Db3VudCgpID4gMCkg
eworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgImZ1
bmN0aW9uIGNhbm5vdCB0YWtlIGFueSBwYXJhbWV0ZXIocykiLCBmdW5jdGlvbi0+Z2V0TmFtZSgp
LmNfc3RyKCkpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2lj
VHlwZSgpICE9IEVidFZvaWQpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXls
c3BbKDEpIC0gKDEpXSksICIiLCBmdW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3Ry
aW5nKCksICJtYWluIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIpOworICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIC8vCisgICAgICAgIC8vIFJlbWVtYmVyIHRoZSByZXR1cm4gdHlwZSBmb3IgbGF0ZXIg
Y2hlY2tpbmcgZm9yIFJFVFVSTiBzdGF0ZW1lbnRzLgorICAgICAgICAvLworICAgICAgICBjb250
ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlID0gJihwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkpOwor
ICAgICAgICBjb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IGZhbHNlOworCisgICAgICAg
IC8vCisgICAgICAgIC8vIEluc2VydCBwYXJhbWV0ZXJzIGludG8gdGhlIHN5bWJvbCB0YWJsZS4K
KyAgICAgICAgLy8gSWYgdGhlIHBhcmFtZXRlciBoYXMgbm8gbmFtZSwgaXQncyBub3QgYW4gZXJy
b3IsIGp1c3QgZG9uJ3QgaW5zZXJ0IGl0CisgICAgICAgIC8vIChjb3VsZCBiZSB1c2VkIGZvciB1
bnVzZWQgYXJncykuCisgICAgICAgIC8vCisgICAgICAgIC8vIEFsc28sIGFjY3VtdWxhdGUgdGhl
IGxpc3Qgb2YgcGFyYW1ldGVycyBpbnRvIHRoZSBISUwsIHNvIGxvd2VyIGxldmVsIGNvZGUKKyAg
ICAgICAgLy8ga25vd3Mgd2hlcmUgdG8gZmluZCBwYXJhbWV0ZXJzLgorICAgICAgICAvLworICAg
ICAgICBUSW50ZXJtQWdncmVnYXRlKiBwYXJhbU5vZGVzID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGU7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb24tPmdldFBhcmFtQ291bnQo
KTsgaSsrKSB7CisgICAgICAgICAgICBjb25zdCBUUGFyYW1ldGVyJiBwYXJhbSA9IGZ1bmN0aW9u
LT5nZXRQYXJhbShpKTsKKyAgICAgICAgICAgIGlmIChwYXJhbS5uYW1lICE9IDApIHsKKyAgICAg
ICAgICAgICAgICBUVmFyaWFibGUgKnZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZShwYXJhbS5uYW1l
LCAqcGFyYW0udHlwZSk7CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBJ
bnNlcnQgdGhlIHBhcmFtZXRlcnMgd2l0aCBuYW1lIGluIHRoZSBzeW1ib2wgdGFibGUuCisgICAg
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5pbnNlcnQoKnZhcmlhYmxlKSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXlsc3BbKDEpIC0gKDEpXSksICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgp
LmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyIHRv
IHRoZSBISUwKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIHBhcmFtTm9kZXMg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZFN5bWJvbCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXJpYWJsZS0+Z2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRU
eXBlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHl5bHNwWygxKSAtICgxKV0pKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHl5bHNwWygxKSAtICgx
KV0pKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcyA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKHBhcmFtTm9kZXMsIGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsICpwYXJhbS50eXBlLCAoeXlsc3BbKDEpIC0g
KDEpXSkpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcihwYXJhbU5v
ZGVzLCBFT3BQYXJhbWV0ZXJzLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IHBhcmFtTm9kZXM7CisgICAgICAg
IGNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPSAwOworICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDIwMjoKKworICAgIHsKKyAgICAgICAgLy8/PyBDaGVjayB0aGF0IGFsbCBwYXRocyByZXR1
cm4gYSB2YWx1ZSBpZiByZXR1cm4gdHlwZSAhPSB2b2lkID8KKyAgICAgICAgLy8gICBNYXkgYmUg
YmVzdCBkb25lIGFzIHBvc3QgcHJvY2VzcyBwaGFzZSBvbiBpbnRlcm1lZGlhdGUgY29kZQorICAg
ICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0g
RWJ0Vm9pZCAmJiAhIGNvbnRleHQtPmZ1bmN0aW9uUmV0dXJuc1ZhbHVlKSB7CisgICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDMpXSksICJmdW5jdGlvbiBkb2VzIG5vdCBy
ZXR1cm4gYSB2YWx1ZToiLCAiIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5mdW5jdGlvbi0+
Z2V0TmFtZSgpLmNfc3RyKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
KS5pbnRlcm1BZ2dyZWdhdGUsICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1Ob2RlKSwg
KHl5bG9jKSk7CisgICAgICAgIGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVy
YXRvcigoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLCBFT3BGdW5jdGlvbiwgKHl5bHNwWygxKSAt
ICgzKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dyZWdh
dGUoKS0+c2V0TmFtZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmZ1bmN0aW9uLT5nZXRNYW5n
bGVkTmFtZSgpLmNfc3RyKCkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLT5n
ZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybSkuZnVuY3Rp
b24tPmdldFJldHVyblR5cGUoKSk7CisKKyAgICAgICAgLy8gc3RvcmUgdGhlIHByYWdtYSBpbmZv
cm1hdGlvbiBmb3IgZGVidWcgYW5kIG9wdGltaXplIGFuZCBvdGhlciB2ZW5kb3Igc3BlY2lmaWMK
KyAgICAgICAgLy8gaW5mb3JtYXRpb24uIFRoaXMgaW5mb3JtYXRpb24gY2FuIGJlIHF1ZXJpZWQg
ZnJvbSB0aGUgcGFyc2UgdHJlZQorICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLT5n
ZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRPcHRpbWl6ZShjb250ZXh0LT5wcmFnbWEoKS5vcHRpbWl6ZSk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNl
dERlYnVnKGNvbnRleHQtPnByYWdtYSgpLmRlYnVnKTsKKworICAgICAgICBjb250ZXh0LT5zeW1i
b2xUYWJsZS5wb3AoKTsKKyAgICB9CisgICAgYnJlYWs7CisKKworCisgICAgICBkZWZhdWx0OiBi
cmVhazsKKyAgICB9CisgIC8qIFVzZXIgc2VtYW50aWMgYWN0aW9ucyBzb21ldGltZXMgYWx0ZXIg
eXljaGFyLCBhbmQgdGhhdCByZXF1aXJlcworICAgICB0aGF0IHl5dG9rZW4gYmUgdXBkYXRlZCB3
aXRoIHRoZSBuZXcgdHJhbnNsYXRpb24uICBXZSB0YWtlIHRoZQorICAgICBhcHByb2FjaCBvZiB0
cmFuc2xhdGluZyBpbW1lZGlhdGVseSBiZWZvcmUgZXZlcnkgdXNlIG9mIHl5dG9rZW4uCisgICAg
IE9uZSBhbHRlcm5hdGl2ZSBpcyB0cmFuc2xhdGluZyBoZXJlIGFmdGVyIGV2ZXJ5IHNlbWFudGlj
IGFjdGlvbiwKKyAgICAgYnV0IHRoYXQgdHJhbnNsYXRpb24gd291bGQgYmUgbWlzc2VkIGlmIHRo
ZSBzZW1hbnRpYyBhY3Rpb24gaW52b2tlcworICAgICBZWUFCT1JULCBZWUFDQ0VQVCwgb3IgWVlF
UlJPUiBpbW1lZGlhdGVseSBhZnRlciBhbHRlcmluZyB5eWNoYXIgb3IKKyAgICAgaWYgaXQgaW52
b2tlcyBZWUJBQ0tVUC4gIEluIHRoZSBjYXNlIG9mIFlZQUJPUlQgb3IgWVlBQ0NFUFQsIGFuCisg
ICAgIGluY29ycmVjdCBkZXN0cnVjdG9yIG1pZ2h0IHRoZW4gYmUgaW52b2tlZCBpbW1lZGlhdGVs
eS4gIEluIHRoZQorICAgICBjYXNlIG9mIFlZRVJST1Igb3IgWVlCQUNLVVAsIHN1YnNlcXVlbnQg
cGFyc2VyIGFjdGlvbnMgbWlnaHQgbGVhZAorICAgICB0byBhbiBpbmNvcnJlY3QgZGVzdHJ1Y3Rv
ciBjYWxsIG9yIHZlcmJvc2Ugc3ludGF4IGVycm9yIG1lc3NhZ2UKKyAgICAgYmVmb3JlIHRoZSBs
b29rYWhlYWQgaXMgdHJhbnNsYXRlZC4gICovCisgIFlZX1NZTUJPTF9QUklOVCAoIi0+ICQkID0i
LCB5eXIxW3l5bl0sICZ5eXZhbCwgJnl5bG9jKTsKKworICBZWVBPUFNUQUNLICh5eWxlbik7Cisg
IHl5bGVuID0gMDsKKyAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKworICAqKyt5eXZz
cCA9IHl5dmFsOworICAqKyt5eWxzcCA9IHl5bG9jOworCisgIC8qIE5vdyBgc2hpZnQnIHRoZSBy
ZXN1bHQgb2YgdGhlIHJlZHVjdGlvbi4gIERldGVybWluZSB3aGF0IHN0YXRlCisgICAgIHRoYXQg
Z29lcyB0bywgYmFzZWQgb24gdGhlIHN0YXRlIHdlIHBvcHBlZCBiYWNrIHRvIGFuZCB0aGUgcnVs
ZQorICAgICBudW1iZXIgcmVkdWNlZCBieS4gICovCisKKyAgeXluID0geXlyMVt5eW5dOworCisg
IHl5c3RhdGUgPSB5eXBnb3RvW3l5biAtIFlZTlRPS0VOU10gKyAqeXlzc3A7CisgIGlmICgwIDw9
IHl5c3RhdGUgJiYgeXlzdGF0ZSA8PSBZWUxBU1QgJiYgeXljaGVja1t5eXN0YXRlXSA9PSAqeXlz
c3ApCisgICAgeXlzdGF0ZSA9IHl5dGFibGVbeXlzdGF0ZV07CisgIGVsc2UKKyAgICB5eXN0YXRl
ID0geXlkZWZnb3RvW3l5biAtIFlZTlRPS0VOU107CisKKyAgZ290byB5eW5ld3N0YXRlOworCisK
Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWVycmxhYiAtLSBo
ZXJlIG9uIGRldGVjdGluZyBlcnJvciB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KK3l5ZXJybGFiOgorICAvKiBNYWtlIHN1cmUgd2UgaGF2ZSBsYXRlc3QgbG9va2Fo
ZWFkIHRyYW5zbGF0aW9uLiAgU2VlIGNvbW1lbnRzIGF0CisgICAgIHVzZXIgc2VtYW50aWMgYWN0
aW9ucyBmb3Igd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LiAgKi8KKyAgeXl0b2tlbiA9IHl5Y2hhciA9
PSBZWUVNUFRZID8gWVlFTVBUWSA6IFlZVFJBTlNMQVRFICh5eWNoYXIpOworCisgIC8qIElmIG5v
dCBhbHJlYWR5IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0IHRoaXMgZXJyb3IuICAq
LworICBpZiAoIXl5ZXJyc3RhdHVzKQorICAgIHsKKyAgICAgICsreXluZXJyczsKKyNpZiAhIFlZ
RVJST1JfVkVSQk9TRQorICAgICAgeXllcnJvciAoJnl5bGxvYywgY29udGV4dCwgWVlfKCJzeW50
YXggZXJyb3IiKSk7CisjZWxzZQorIyBkZWZpbmUgWVlTWU5UQVhfRVJST1IgeXlzeW50YXhfZXJy
b3IgKCZ5eW1zZ19hbGxvYywgJnl5bXNnLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeXlzc3AsIHl5dG9rZW4pCisgICAgICB7CisgICAgICAgIGNoYXIgY29uc3Qg
Knl5bXNncCA9IFlZXygic3ludGF4IGVycm9yIik7CisgICAgICAgIGludCB5eXN5bnRheF9lcnJv
cl9zdGF0dXM7CisgICAgICAgIHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9IFlZU1lOVEFYX0VSUk9S
OworICAgICAgICBpZiAoeXlzeW50YXhfZXJyb3Jfc3RhdHVzID09IDApCisgICAgICAgICAgeXlt
c2dwID0geXltc2c7CisgICAgICAgIGVsc2UgaWYgKHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9PSAx
KQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKKyAgICAg
ICAgICAgICAgWVlTVEFDS19GUkVFICh5eW1zZyk7CisgICAgICAgICAgICB5eW1zZyA9IChjaGFy
ICopIFlZU1RBQ0tfQUxMT0MgKHl5bXNnX2FsbG9jKTsKKyAgICAgICAgICAgIGlmICgheXltc2cp
CisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB5eW1zZyA9IHl5bXNnYnVmOworICAg
ICAgICAgICAgICAgIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOworICAgICAgICAgICAg
ICAgIHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9IDI7CisgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHl5c3ludGF4X2Vycm9y
X3N0YXR1cyA9IFlZU1lOVEFYX0VSUk9SOworICAgICAgICAgICAgICAgIHl5bXNncCA9IHl5bXNn
OworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB5eWVycm9yICgmeXlsbG9j
LCBjb250ZXh0LCB5eW1zZ3ApOworICAgICAgICBpZiAoeXlzeW50YXhfZXJyb3Jfc3RhdHVzID09
IDIpCisgICAgICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKKyAgICAgIH0KKyMgdW5kZWYgWVlT
WU5UQVhfRVJST1IKKyNlbmRpZgorICAgIH0KKworICB5eWVycm9yX3JhbmdlWzFdID0geXlsbG9j
OworCisgIGlmICh5eWVycnN0YXR1cyA9PSAzKQorICAgIHsKKyAgICAgIC8qIElmIGp1c3QgdHJp
ZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgYW4KKwkgZXJyb3Is
IGRpc2NhcmQgaXQuICAqLworCisgICAgICBpZiAoeXljaGFyIDw9IFlZRU9GKQorCXsKKwkgIC8q
IFJldHVybiBmYWlsdXJlIGlmIGF0IGVuZCBvZiBpbnB1dC4gICovCisJICBpZiAoeXljaGFyID09
IFlZRU9GKQorCSAgICBZWUFCT1JUOworCX0KKyAgICAgIGVsc2UKKwl7CisJICB5eWRlc3RydWN0
ICgiRXJyb3I6IGRpc2NhcmRpbmciLAorCQkgICAgICB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9j
LCBjb250ZXh0KTsKKwkgIHl5Y2hhciA9IFlZRU1QVFk7CisJfQorICAgIH0KKworICAvKiBFbHNl
IHdpbGwgdHJ5IHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJy
b3IKKyAgICAgdG9rZW4uICAqLworICBnb3RvIHl5ZXJybGFiMTsKKworCisvKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJvcmxhYiAt
LSBlcnJvciByYWlzZWQgZXhwbGljaXRseSBieSBZWUVSUk9SLiAgfAorYC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWVycm9ybGFiOgorCisg
IC8qIFBhY2lmeSBjb21waWxlcnMgbGlrZSBHQ0Mgd2hlbiB0aGUgdXNlciBjb2RlIG5ldmVyIGlu
dm9rZXMKKyAgICAgWVlFUlJPUiBhbmQgdGhlIGxhYmVsIHl5ZXJyb3JsYWIgdGhlcmVmb3JlIG5l
dmVyIGFwcGVhcnMgaW4gdXNlcgorICAgICBjb2RlLiAgKi8KKyAgaWYgKC8qQ09OU1RDT05EKi8g
MCkKKyAgICAgZ290byB5eWVycm9ybGFiOworCisgIHl5ZXJyb3JfcmFuZ2VbMV0gPSB5eWxzcFsx
LXl5bGVuXTsKKyAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hp
Y2ggYWN0aW9uIHRyaWdnZXJlZAorICAgICB0aGlzIFlZRVJST1IuICAqLworICBZWVBPUFNUQUNL
ICh5eWxlbik7CisgIHl5bGVuID0gMDsKKyAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsK
KyAgeXlzdGF0ZSA9ICp5eXNzcDsKKyAgZ290byB5eWVycmxhYjE7CisKKworLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5
eWVycmxhYjEgLS0gY29tbW9uIGNvZGUgZm9yIGJvdGggc3ludGF4IGVycm9yIGFuZCBZWUVSUk9S
LiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLworeXllcnJsYWIxOgorICB5eWVycnN0YXR1cyA9IDM7CS8qIEVhY2ggcmVh
bCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVudHMgdGhpcy4gICovCisKKyAgZm9yICg7OykKKyAgICB7
CisgICAgICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisgICAgICBpZiAoIXl5cGFjdF92YWx1ZV9p
c19kZWZhdWx0ICh5eW4pKQorCXsKKwkgIHl5biArPSBZWVRFUlJPUjsKKwkgIGlmICgwIDw9IHl5
biAmJiB5eW4gPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXluXSA9PSBZWVRFUlJPUikKKwkgICAgewor
CSAgICAgIHl5biA9IHl5dGFibGVbeXluXTsKKwkgICAgICBpZiAoMCA8IHl5bikKKwkJYnJlYWs7
CisJICAgIH0KKwl9CisKKyAgICAgIC8qIFBvcCB0aGUgY3VycmVudCBzdGF0ZSBiZWNhdXNlIGl0
IGNhbm5vdCBoYW5kbGUgdGhlIGVycm9yIHRva2VuLiAgKi8KKyAgICAgIGlmICh5eXNzcCA9PSB5
eXNzKQorCVlZQUJPUlQ7CisKKyAgICAgIHl5ZXJyb3JfcmFuZ2VbMV0gPSAqeXlsc3A7CisgICAg
ICB5eWRlc3RydWN0ICgiRXJyb3I6IHBvcHBpbmciLAorCQkgIHl5c3Rvc1t5eXN0YXRlXSwgeXl2
c3AsIHl5bHNwLCBjb250ZXh0KTsKKyAgICAgIFlZUE9QU1RBQ0sgKDEpOworICAgICAgeXlzdGF0
ZSA9ICp5eXNzcDsKKyAgICAgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CisgICAgfQor
CisgIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOCisgICorK3l5dnNwID0geXls
dmFsOworICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9FTkQKKworICB5eWVycm9yX3Jh
bmdlWzJdID0geXlsbG9jOworICAvKiBVc2luZyBZWUxMT0MgaXMgdGVtcHRpbmcsIGJ1dCB3b3Vs
ZCBjaGFuZ2UgdGhlIGxvY2F0aW9uIG9mCisgICAgIHRoZSBsb29rYWhlYWQuICBZWUxPQyBpcyBh
dmFpbGFibGUgdGhvdWdoLiAgKi8KKyAgWVlMTE9DX0RFRkFVTFQgKHl5bG9jLCB5eWVycm9yX3Jh
bmdlLCAyKTsKKyAgKisreXlsc3AgPSB5eWxvYzsKKworICAvKiBTaGlmdCB0aGUgZXJyb3IgdG9r
ZW4uICAqLworICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5c3Rvc1t5eW5dLCB5eXZz
cCwgeXlsc3ApOworCisgIHl5c3RhdGUgPSB5eW47CisgIGdvdG8geXluZXdzdGF0ZTsKKworCisv
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5YWNjZXB0bGFiIC0t
IFlZQUNDRVBUIGNvbWVzIGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCit5eWFjY2VwdGxhYjoKKyAgeXlyZXN1bHQgPSAwOworICBnb3RvIHl5cmV0dXJu
OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWFib3J0bGFi
IC0tIFlZQUJPUlQgY29tZXMgaGVyZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCit5eWFib3J0bGFiOgorICB5eXJlc3VsdCA9IDE7CisgIGdvdG8geXlyZXR1cm47
CisKKyNpZiAhZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRQorLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWV4aGF1c3Rl
ZGxhYiAtLSBtZW1vcnkgZXhoYXVzdGlvbiBjb21lcyBoZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlleGhhdXN0ZWRsYWI6Cisg
IHl5ZXJyb3IgKCZ5eWxsb2MsIGNvbnRleHQsIFlZXygibWVtb3J5IGV4aGF1c3RlZCIpKTsKKyAg
eXlyZXN1bHQgPSAyOworICAvKiBGYWxsIHRocm91Z2guICAqLworI2VuZGlmCisKK3l5cmV0dXJu
OgorICBpZiAoeXljaGFyICE9IFlZRU1QVFkpCisgICAgeworICAgICAgLyogTWFrZSBzdXJlIHdl
IGhhdmUgbGF0ZXN0IGxvb2thaGVhZCB0cmFuc2xhdGlvbi4gIFNlZSBjb21tZW50cyBhdAorICAg
ICAgICAgdXNlciBzZW1hbnRpYyBhY3Rpb25zIGZvciB3aHkgdGhpcyBpcyBuZWNlc3NhcnkuICAq
LworICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOworICAgICAgeXlkZXN0cnVj
dCAoIkNsZWFudXA6IGRpc2NhcmRpbmcgbG9va2FoZWFkIiwKKyAgICAgICAgICAgICAgICAgIHl5
dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MsIGNvbnRleHQpOworICAgIH0KKyAgLyogRG8gbm90IHJl
Y2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAorICAg
ICB0aGlzIFlZQUJPUlQgb3IgWVlBQ0NFUFQuICAqLworICBZWVBPUFNUQUNLICh5eWxlbik7Cisg
IFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CisgIHdoaWxlICh5eXNzcCAhPSB5eXNzKQor
ICAgIHsKKyAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBwb3BwaW5nIiwKKwkJICB5eXN0b3Nb
Knl5c3NwXSwgeXl2c3AsIHl5bHNwLCBjb250ZXh0KTsKKyAgICAgIFlZUE9QU1RBQ0sgKDEpOwor
ICAgIH0KKyNpZm5kZWYgeXlvdmVyZmxvdworICBpZiAoeXlzcyAhPSB5eXNzYSkKKyAgICBZWVNU
QUNLX0ZSRUUgKHl5c3MpOworI2VuZGlmCisjaWYgWVlFUlJPUl9WRVJCT1NFCisgIGlmICh5eW1z
ZyAhPSB5eW1zZ2J1ZikKKyAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKKyNlbmRpZgorICAvKiBN
YWtlIHN1cmUgWVlJRCBpcyB1c2VkLiAgKi8KKyAgcmV0dXJuIFlZSUQgKHl5cmVzdWx0KTsKK30K
KworCisKKworCitpbnQgZ2xzbGFuZ19wYXJzZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7Cisg
ICAgcmV0dXJuIHl5cGFyc2UoY29udGV4dCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40MTQ0MTlhNzY1YjlmMjQ2NWVlZDFmZGY0OThjOTBmY2RjYjQ1YTM0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvZ2xzbGFuZ190YWIuaApAQCAtMCwwICsxLDIyNSBAQAorLyogQSBCaXNvbiBwYXJzZXIs
IG1hZGUgYnkgR05VIEJpc29uIDIuNy4xLiAgKi8KKworLyogQXBwbGUgTm90ZTogRm9yIHRoZSBh
dm9pZGFuY2Ugb2YgZG91YnQsIEFwcGxlIGVsZWN0cyB0byBkaXN0cmlidXRlIHRoaXMgZmlsZSB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEJTRCBsaWNlbnNlLiAqLworCisvKiBCaXNvbiBpbnRlcmZh
Y2UgZm9yIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKKyAgIAorICAgICAgQ29weXJpZ2h0IChDKSAx
OTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K
KyAgIAorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIAorICAgVGhpcyBwcm9ncmFtIGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90
LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogQXMgYSBzcGVj
aWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNvbnRhaW5z
CisgICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmli
dXRlIHRoYXQgd29yaworICAgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHNvIGxvbmcgYXMg
dGhhdCB3b3JrIGlzbid0IGl0c2VsZiBhCisgICBwYXJzZXIgZ2VuZXJhdG9yIHVzaW5nIHRoZSBz
a2VsZXRvbiBvciBhIG1vZGlmaWVkIHZlcnNpb24gdGhlcmVvZgorICAgYXMgYSBwYXJzZXIgc2tl
bGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZQorICAg
dGhlIHBhcnNlciBza2VsZXRvbiBpdHNlbGYsIHlvdSBtYXkgKGF0IHlvdXIgb3B0aW9uKSByZW1v
dmUgdGhpcworICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxl
dG9uIGFuZCB0aGUgcmVzdWx0aW5nCisgICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5z
ZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSB3aXRob3V0IHRoaXMg
c3BlY2lhbCBleGNlcHRpb24uCisgICAKKyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFk
ZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KKyAgIHZlcnNpb24gMi4yIG9m
IEJpc29uLiAgKi8KKworI2lmbmRlZiBZWV9ZWV9HTFNMQU5HX1RBQl9IX0lOQ0xVREVECisjIGRl
ZmluZSBZWV9ZWV9HTFNMQU5HX1RBQl9IX0lOQ0xVREVECisvKiBFbmFibGluZyB0cmFjZXMuICAq
LworI2lmbmRlZiBZWURFQlVHCisjIGRlZmluZSBZWURFQlVHIDAKKyNlbmRpZgorI2lmIFlZREVC
VUcKK2V4dGVybiBpbnQgeXlkZWJ1ZzsKKyNlbmRpZgorLyogIiVjb2RlIHJlcXVpcmVzIiBibG9j
a3MuICAqLworCisKKyNkZWZpbmUgWVlMVFlQRSBUU291cmNlTG9jCisjZGVmaW5lIFlZTFRZUEVf
SVNfREVDTEFSRUQgMQorI2RlZmluZSBTSF9NQVhfVE9LRU5fTEVOR1RIIDI1NiAgLy8gV2ViR0wg
c3BlYy4KKworCisKKworLyogVG9rZW5zLiAgKi8KKyNpZm5kZWYgWVlUT0tFTlRZUEUKKyMgZGVm
aW5lIFlZVE9LRU5UWVBFCisgICAvKiBQdXQgdGhlIHRva2VucyBpbnRvIHRoZSBzeW1ib2wgdGFi
bGUsIHNvIHRoYXQgR0RCIGFuZCBvdGhlciBkZWJ1Z2dlcnMKKyAgICAgIGtub3cgYWJvdXQgdGhl
bS4gICovCisgICBlbnVtIHl5dG9rZW50eXBlIHsKKyAgICAgSU5WQVJJQU5UID0gMjU4LAorICAg
ICBISUdIX1BSRUNJU0lPTiA9IDI1OSwKKyAgICAgTUVESVVNX1BSRUNJU0lPTiA9IDI2MCwKKyAg
ICAgTE9XX1BSRUNJU0lPTiA9IDI2MSwKKyAgICAgUFJFQ0lTSU9OID0gMjYyLAorICAgICBBVFRS
SUJVVEUgPSAyNjMsCisgICAgIENPTlNUX1FVQUwgPSAyNjQsCisgICAgIEJPT0xfVFlQRSA9IDI2
NSwKKyAgICAgRkxPQVRfVFlQRSA9IDI2NiwKKyAgICAgSU5UX1RZUEUgPSAyNjcsCisgICAgIEJS
RUFLID0gMjY4LAorICAgICBDT05USU5VRSA9IDI2OSwKKyAgICAgRE8gPSAyNzAsCisgICAgIEVM
U0UgPSAyNzEsCisgICAgIEZPUiA9IDI3MiwKKyAgICAgSUYgPSAyNzMsCisgICAgIERJU0NBUkQg
PSAyNzQsCisgICAgIFJFVFVSTiA9IDI3NSwKKyAgICAgQlZFQzIgPSAyNzYsCisgICAgIEJWRUMz
ID0gMjc3LAorICAgICBCVkVDNCA9IDI3OCwKKyAgICAgSVZFQzIgPSAyNzksCisgICAgIElWRUMz
ID0gMjgwLAorICAgICBJVkVDNCA9IDI4MSwKKyAgICAgVkVDMiA9IDI4MiwKKyAgICAgVkVDMyA9
IDI4MywKKyAgICAgVkVDNCA9IDI4NCwKKyAgICAgTUFUUklYMiA9IDI4NSwKKyAgICAgTUFUUklY
MyA9IDI4NiwKKyAgICAgTUFUUklYNCA9IDI4NywKKyAgICAgSU5fUVVBTCA9IDI4OCwKKyAgICAg
T1VUX1FVQUwgPSAyODksCisgICAgIElOT1VUX1FVQUwgPSAyOTAsCisgICAgIFVOSUZPUk0gPSAy
OTEsCisgICAgIFZBUllJTkcgPSAyOTIsCisgICAgIFNUUlVDVCA9IDI5MywKKyAgICAgVk9JRF9U
WVBFID0gMjk0LAorICAgICBXSElMRSA9IDI5NSwKKyAgICAgU0FNUExFUjJEID0gMjk2LAorICAg
ICBTQU1QTEVSQ1VCRSA9IDI5NywKKyAgICAgU0FNUExFUl9FWFRFUk5BTF9PRVMgPSAyOTgsCisg
ICAgIFNBTVBMRVIyRFJFQ1QgPSAyOTksCisgICAgIElERU5USUZJRVIgPSAzMDAsCisgICAgIFRZ
UEVfTkFNRSA9IDMwMSwKKyAgICAgRkxPQVRDT05TVEFOVCA9IDMwMiwKKyAgICAgSU5UQ09OU1RB
TlQgPSAzMDMsCisgICAgIEJPT0xDT05TVEFOVCA9IDMwNCwKKyAgICAgTEVGVF9PUCA9IDMwNSwK
KyAgICAgUklHSFRfT1AgPSAzMDYsCisgICAgIElOQ19PUCA9IDMwNywKKyAgICAgREVDX09QID0g
MzA4LAorICAgICBMRV9PUCA9IDMwOSwKKyAgICAgR0VfT1AgPSAzMTAsCisgICAgIEVRX09QID0g
MzExLAorICAgICBORV9PUCA9IDMxMiwKKyAgICAgQU5EX09QID0gMzEzLAorICAgICBPUl9PUCA9
IDMxNCwKKyAgICAgWE9SX09QID0gMzE1LAorICAgICBNVUxfQVNTSUdOID0gMzE2LAorICAgICBE
SVZfQVNTSUdOID0gMzE3LAorICAgICBBRERfQVNTSUdOID0gMzE4LAorICAgICBNT0RfQVNTSUdO
ID0gMzE5LAorICAgICBMRUZUX0FTU0lHTiA9IDMyMCwKKyAgICAgUklHSFRfQVNTSUdOID0gMzIx
LAorICAgICBBTkRfQVNTSUdOID0gMzIyLAorICAgICBYT1JfQVNTSUdOID0gMzIzLAorICAgICBP
Ul9BU1NJR04gPSAzMjQsCisgICAgIFNVQl9BU1NJR04gPSAzMjUsCisgICAgIExFRlRfUEFSRU4g
PSAzMjYsCisgICAgIFJJR0hUX1BBUkVOID0gMzI3LAorICAgICBMRUZUX0JSQUNLRVQgPSAzMjgs
CisgICAgIFJJR0hUX0JSQUNLRVQgPSAzMjksCisgICAgIExFRlRfQlJBQ0UgPSAzMzAsCisgICAg
IFJJR0hUX0JSQUNFID0gMzMxLAorICAgICBET1QgPSAzMzIsCisgICAgIENPTU1BID0gMzMzLAor
ICAgICBDT0xPTiA9IDMzNCwKKyAgICAgRVFVQUwgPSAzMzUsCisgICAgIFNFTUlDT0xPTiA9IDMz
NiwKKyAgICAgQkFORyA9IDMzNywKKyAgICAgREFTSCA9IDMzOCwKKyAgICAgVElMREUgPSAzMzks
CisgICAgIFBMVVMgPSAzNDAsCisgICAgIFNUQVIgPSAzNDEsCisgICAgIFNMQVNIID0gMzQyLAor
ICAgICBQRVJDRU5UID0gMzQzLAorICAgICBMRUZUX0FOR0xFID0gMzQ0LAorICAgICBSSUdIVF9B
TkdMRSA9IDM0NSwKKyAgICAgVkVSVElDQUxfQkFSID0gMzQ2LAorICAgICBDQVJFVCA9IDM0NywK
KyAgICAgQU1QRVJTQU5EID0gMzQ4LAorICAgICBRVUVTVElPTiA9IDM0OQorICAgfTsKKyNlbmRp
ZgorCisKKyNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNM
QVJFRAordHlwZWRlZiB1bmlvbiBZWVNUWVBFCit7CisKKworICAgIHN0cnVjdCB7CisgICAgICAg
IHVuaW9uIHsKKyAgICAgICAgICAgIFRTdHJpbmcgKnN0cmluZzsKKyAgICAgICAgICAgIGZsb2F0
IGY7CisgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgIGJvb2wgYjsKKyAgICAgICAgfTsK
KyAgICAgICAgVFN5bWJvbCogc3ltYm9sOworICAgIH0gbGV4OworICAgIHN0cnVjdCB7CisgICAg
ICAgIFRPcGVyYXRvciBvcDsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgVEludGVybU5v
ZGUqIGludGVybU5vZGU7CisgICAgICAgICAgICBUSW50ZXJtTm9kZVBhaXIgbm9kZVBhaXI7Cisg
ICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGludGVybVR5cGVkTm9kZTsKKyAgICAgICAgICAgIFRJ
bnRlcm1BZ2dyZWdhdGUqIGludGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgfTsKKyAgICAgICAgdW5p
b24geworICAgICAgICAgICAgVFB1YmxpY1R5cGUgdHlwZTsKKyAgICAgICAgICAgIFRQcmVjaXNp
b24gcHJlY2lzaW9uOworICAgICAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXI7CisgICAgICAg
ICAgICBURnVuY3Rpb24qIGZ1bmN0aW9uOworICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJhbTsK
KyAgICAgICAgICAgIFRGaWVsZCogZmllbGQ7CisgICAgICAgICAgICBURmllbGRMaXN0KiBmaWVs
ZExpc3Q7CisgICAgICAgIH07CisgICAgfSBpbnRlcm07CisKKworCit9IFlZU1RZUEU7CisjIGRl
ZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQorIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9i
c29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLworIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNM
QVJFRCAxCisjZW5kaWYKKworI2lmICEgZGVmaW5lZCBZWUxUWVBFICYmICEgZGVmaW5lZCBZWUxU
WVBFX0lTX0RFQ0xBUkVECit0eXBlZGVmIHN0cnVjdCBZWUxUWVBFCit7CisgIGludCBmaXJzdF9s
aW5lOworICBpbnQgZmlyc3RfY29sdW1uOworICBpbnQgbGFzdF9saW5lOworICBpbnQgbGFzdF9j
b2x1bW47Cit9IFlZTFRZUEU7CisjIGRlZmluZSB5eWx0eXBlIFlZTFRZUEUgLyogb2Jzb2xlc2Nl
bnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCisjIGRlZmluZSBZWUxUWVBFX0lTX0RFQ0xBUkVEIDEK
KyMgZGVmaW5lIFlZTFRZUEVfSVNfVFJJVklBTCAxCisjZW5kaWYKKworCisjaWZkZWYgWVlQQVJT
RV9QQVJBTQorI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cworaW50
IHl5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pOworI2Vsc2UKK2ludCB5eXBhcnNlICgpOwor
I2VuZGlmCisjZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KKyNpZiBkZWZpbmVkIF9fU1REQ19f
IHx8IGRlZmluZWQgX19jcGx1c3BsdXMKK2ludCB5eXBhcnNlIChUUGFyc2VDb250ZXh0KiBjb250
ZXh0KTsKKyNlbHNlCitpbnQgeXlwYXJzZSAoKTsKKyNlbmRpZgorI2VuZGlmIC8qICEgWVlQQVJT
RV9QQVJBTSAqLworCisjZW5kaWYgLyogIVlZX1lZX0dMU0xBTkdfVEFCX0hfSU5DTFVERUQgICov
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9pbnRlcm1PdXQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvaW50ZXJtT3V0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMmY5MThkNzdhNzgyZjhlMjFl
Yzg1NTU0MzIwZjRhZGRmODQ0ZWFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtT3V0LmNwcApAQCAtMCwwICsx
LDQyNCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvbG9jYWxpbnRlcm1lZGlhdGUuaCIKKworLy8KKy8vIFR3byBwdXJwb3NlczoKKy8vIDEuICBT
aG93IGFuIGV4YW1wbGUgb2YgaG93IHRvIGl0ZXJhdGUgdHJlZS4gIEZ1bmN0aW9ucyBjYW4KKy8v
ICAgICBhbHNvIGRpcmVjdGx5IGNhbGwgVHJhdmVyc2UoKSBvbiBjaGlsZHJlbiB0aGVtc2VsdmVz
IHRvCisvLyAgICAgaGF2ZSBmaW5lciBncmFpbmVkIGNvbnRyb2wgb3ZlciB0aGUgcHJvY2VzcyB0
aGFuIHNob3duIGhlcmUuCisvLyAgICAgU2VlIHRoZSBsYXN0IGZ1bmN0aW9uIGZvciBob3cgdG8g
Z2V0IHN0YXJ0ZWQuCisvLyAyLiAgUHJpbnQgb3V0IGEgdGV4dCBiYXNlZCBkZXNjcmlwdGlvbiBv
ZiB0aGUgdHJlZS4KKy8vCisKKy8vCisvLyBVc2UgdGhpcyBjbGFzcyB0byBjYXJyeSBhbG9uZyBk
YXRhIGZyb20gbm9kZSB0byBub2RlIGluCisvLyB0aGUgdHJhdmVyc2FsCisvLworY2xhc3MgVE91
dHB1dFRyYXZlcnNlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBU
T3V0cHV0VHJhdmVyc2VyKFRJbmZvU2lua0Jhc2UmIGkpIDogc2luayhpKSB7IH0KKyAgICBUSW5m
b1NpbmtCYXNlJiBzaW5rOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCB2aXNpdFN5bWJvbChUSW50
ZXJtU3ltYm9sKik7CisgICAgdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50
VW5pb24qKTsKKyAgICBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5
Kik7CisgICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqKTsKKyAg
ICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKik7Cisg
ICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOwor
ICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCopOworICAgIGJvb2wg
dmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqKTsKK307CisKK1RTdHJpbmcg
VFR5cGU6OmdldENvbXBsZXRlU3RyaW5nKCkgY29uc3QKK3sKKyAgICBUU3RyaW5nU3RyZWFtIHN0
cmVhbTsKKworICAgIGlmIChxdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5ICYmIHF1YWxpZmllciAh
PSBFdnFHbG9iYWwpCisgICAgICAgIHN0cmVhbSA8PCBnZXRRdWFsaWZpZXJTdHJpbmcoKSA8PCAi
ICIgPDwgZ2V0UHJlY2lzaW9uU3RyaW5nKCkgPDwgIiAiOworICAgIGlmIChhcnJheSkKKyAgICAg
ICAgc3RyZWFtIDw8ICJhcnJheVsiIDw8IGdldEFycmF5U2l6ZSgpIDw8ICJdIG9mICI7CisgICAg
aWYgKG1hdHJpeCkKKyAgICAgICAgc3RyZWFtIDw8IHN0YXRpY19jYXN0PGludD4oc2l6ZSkgPDwg
IlgiIDw8IHN0YXRpY19jYXN0PGludD4oc2l6ZSkgPDwgIiBtYXRyaXggb2YgIjsKKyAgICBlbHNl
IGlmIChzaXplID4gMSkKKyAgICAgICAgc3RyZWFtIDw8IHN0YXRpY19jYXN0PGludD4oc2l6ZSkg
PDwgIi1jb21wb25lbnQgdmVjdG9yIG9mICI7CisKKyAgICBzdHJlYW0gPDwgZ2V0QmFzaWNTdHJp
bmcoKTsKKyAgICByZXR1cm4gc3RyZWFtLnN0cigpOworfQorCisvLworLy8gSGVscGVyIGZ1bmN0
aW9ucyBmb3IgcHJpbnRpbmcsIG5vdCBwYXJ0IG9mIHRyYXZlcnNpbmcuCisvLworCit2b2lkIE91
dHB1dFRyZWVUZXh0KFRJbmZvU2lua0Jhc2UmIHNpbmssIFRJbnRlcm1Ob2RlKiBub2RlLCBjb25z
dCBpbnQgZGVwdGgpCit7CisgICAgaW50IGk7CisKKyAgICBzaW5rLmxvY2F0aW9uKG5vZGUtPmdl
dExpbmUoKSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKKyAgICAgICAgc2lu
ayA8PCAiICAiOworfQorCisvLworLy8gVGhlIHJlc3Qgb2YgdGhlIGZpbGUgYXJlIHRoZSB0cmF2
ZXJzYWwgZnVuY3Rpb25zLiAgVGhlIGxhc3Qgb25lCisvLyBpcyB0aGUgb25lIHRoYXQgc3RhcnRz
IHRoZSB0cmF2ZXJzYWwuCisvLworLy8gUmV0dXJuIHRydWUgZnJvbSBpbnRlcmlvciBub2RlcyB0
byBoYXZlIHRoZSBleHRlcm5hbCB0cmF2ZXJzYWwKKy8vIGNvbnRpbnVlIG9uIHRvIGNoaWxkcmVu
LiAgSWYgeW91IHByb2Nlc3MgY2hpbGRyZW4geW91cnNlbGYsCisvLyByZXR1cm4gZmFsc2UuCisv
LworCit2b2lkIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5v
ZGUpCit7CisgICAgT3V0cHV0VHJlZVRleHQoc2luaywgbm9kZSwgZGVwdGgpOworCisgICAgc2lu
ayA8PCAiJyIgPDwgbm9kZS0+Z2V0U3ltYm9sKCkgPDwgIicgIjsKKyAgICBzaW5rIDw8ICIoIiA8
PCBub2RlLT5nZXRDb21wbGV0ZVN0cmluZygpIDw8ICIpXG4iOworfQorCitib29sIFRPdXRwdXRU
cmF2ZXJzZXI6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBub2RlKQor
eworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IHNpbms7CisKKyAgICBPdXRwdXRUcmVlVGV4dChv
dXQsIG5vZGUsIGRlcHRoKTsKKworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkgeworICAgICAg
ICBjYXNlIEVPcEFzc2lnbjogICAgICAgICAgICAgICAgICAgb3V0IDw8ICJtb3ZlIHNlY29uZCBj
aGlsZCB0byBmaXJzdCBjaGlsZCI7ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BJ
bml0aWFsaXplOiAgICAgICAgICAgICAgIG91dCA8PCAiaW5pdGlhbGl6ZSBmaXJzdCBjaGlsZCB3
aXRoIHNlY29uZCBjaGlsZCI7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQWRkQXNzaWduOiAg
ICAgICAgICAgICAgICBvdXQgPDwgImFkZCBzZWNvbmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjogICAgICAgICAgICAg
ICAgb3V0IDw8ICJzdWJ0cmFjdCBzZWNvbmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7ICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BNdWxBc3NpZ246ICAgICAgICAgICAgICAgIG91dCA8PCAi
bXVsdGlwbHkgc2Vjb25kIGNoaWxkIGludG8gZmlyc3QgY2hpbGQiOyAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXhBc3NpZ246ICBvdXQgPDwgIm1hdHJpeCBtdWx0
IHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgIGJyZWFrOworICAgICAgICBjYXNlIEVP
cFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOiAgb3V0IDw8ICJ2ZWN0b3Igc2NhbGUgc2Vjb25kIGNo
aWxkIGludG8gZmlyc3QgY2hpbGQiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1l
c1NjYWxhckFzc2lnbjogIG91dCA8PCAibWF0cml4IHNjYWxlIHNlY29uZCBjaGlsZCBpbnRvIGZp
cnN0IGNoaWxkIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXhBc3Np
Z246ICBvdXQgPDwgIm1hdHJpeCBtdWx0IHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wRGl2QXNzaWduOiAgICAgICAgICAgICAgICBvdXQgPDwg
ImRpdmlkZSBzZWNvbmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7ICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEVPcEluZGV4RGlyZWN0OiAgIG91dCA8PCAiZGlyZWN0IGluZGV4IjsgICBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OiBvdXQgPDwgImluZGlyZWN0IGluZGV4
IjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6ICAgb3V0IDw8ICJk
aXJlY3QgaW5kZXggZm9yIHN0cnVjdHVyZSI7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVj
dG9yU3dpenpsZTogb3V0IDw8ICJ2ZWN0b3Igc3dpenpsZSI7IGJyZWFrOworCisgICAgICAgIGNh
c2UgRU9wQWRkOiAgICBvdXQgPDwgImFkZCI7ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wU3ViOiAgICBvdXQgPDwgInN1YnRyYWN0IjsgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wTXVsOiAgICBvdXQgPDwgImNvbXBvbmVudC13aXNlIG11
bHRpcGx5IjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRGl2OiAgICBvdXQgPDwgImRpdmlkZSI7
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRXF1YWw6ICAgICAgICAg
ICAgb3V0IDw8ICJDb21wYXJlIEVxdWFsIjsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEVPcE5vdEVxdWFsOiAgICAgICAgIG91dCA8PCAiQ29tcGFyZSBOb3QgRXF1YWwiOyAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjogICAgICAgICBvdXQg
PDwgIkNvbXBhcmUgTGVzcyBUaGFuIjsgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wR3JlYXRlclRoYW46ICAgICAgb3V0IDw8ICJDb21wYXJlIEdyZWF0ZXIgVGhhbiI7ICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6ICAgIG91dCA8PCAiQ29t
cGFyZSBMZXNzIFRoYW4gb3IgRXF1YWwiOyAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BHcmVh
dGVyVGhhbkVxdWFsOiBvdXQgPDwgIkNvbXBhcmUgR3JlYXRlciBUaGFuIG9yIEVxdWFsIjsgYnJl
YWs7CisKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjogb3V0IDw8ICJ2ZWN0b3It
c2NhbGUiOyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJp
eDogb3V0IDw8ICJ2ZWN0b3ItdGltZXMtbWF0cml4IjsgICBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BNYXRyaXhUaW1lc1ZlY3Rvcjogb3V0IDw8ICJtYXRyaXgtdGltZXMtdmVjdG9yIjsgICBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhcjogb3V0IDw8ICJtYXRyaXgtc2Nh
bGUiOyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeDog
b3V0IDw8ICJtYXRyaXgtbXVsdGlwbHkiOyAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVP
cExvZ2ljYWxPcjogIG91dCA8PCAibG9naWNhbC1vciI7ICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wTG9naWNhbFhvcjogb3V0IDw8ICJsb2dpY2FsLXhvciI7IGJyZWFrOworICAgICAgICBjYXNl
IEVPcExvZ2ljYWxBbmQ6IG91dCA8PCAibG9naWNhbC1hbmQiOyBicmVhazsKKyAgICAgICAgZGVm
YXVsdDogb3V0IDw8ICI8dW5rbm93biBvcD4iOworICAgIH0KKworICAgIG91dCA8PCAiICgiIDw8
IG5vZGUtPmdldENvbXBsZXRlU3RyaW5nKCkgPDwgIikiOworCisgICAgb3V0IDw8ICJcbiI7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdFVuYXJ5
KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSYg
b3V0ID0gc2luazsKKworICAgIE91dHB1dFRyZWVUZXh0KG91dCwgbm9kZSwgZGVwdGgpOworCisg
ICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKSB7CisgICAgICAgIGNhc2UgRU9wTmVnYXRpdmU6ICAg
ICAgIG91dCA8PCAiTmVnYXRlIHZhbHVlIjsgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BWZWN0b3JMb2dpY2FsTm90OgorICAgICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6ICAgICBvdXQg
PDwgIk5lZ2F0ZSBjb25kaXRpb25hbCI7ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BQb3N0
SW5jcmVtZW50OiAgb3V0IDw8ICJQb3N0LUluY3JlbWVudCI7ICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6ICBvdXQgPDwgIlBvc3QtRGVjcmVtZW50IjsgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OiAgIG91dCA8PCAiUHJlLUluY3Jl
bWVudCI7ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6ICAgb3V0
IDw8ICJQcmUtRGVjcmVtZW50IjsgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wQ29u
dkludFRvQm9vbDogIG91dCA8PCAiQ29udmVydCBpbnQgdG8gYm9vbCI7ICBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BDb252RmxvYXRUb0Jvb2w6b3V0IDw8ICJDb252ZXJ0IGZsb2F0IHRvIGJvb2wi
O2JyZWFrOworICAgICAgICBjYXNlIEVPcENvbnZCb29sVG9GbG9hdDpvdXQgPDwgIkNvbnZlcnQg
Ym9vbCB0byBmbG9hdCI7YnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udkludFRvRmxvYXQ6IG91
dCA8PCAiQ29udmVydCBpbnQgdG8gZmxvYXQiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb252
RmxvYXRUb0ludDogb3V0IDw8ICJDb252ZXJ0IGZsb2F0IHRvIGludCI7IGJyZWFrOworICAgICAg
ICBjYXNlIEVPcENvbnZCb29sVG9JbnQ6ICBvdXQgPDwgIkNvbnZlcnQgYm9vbCB0byBpbnQiOyAg
YnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BSYWRpYW5zOiAgICAgICAgb3V0IDw8ICJyYWRpYW5z
IjsgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcERlZ3JlZXM6ICAgICAgICBv
dXQgPDwgImRlZ3JlZXMiOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU2lu
OiAgICAgICAgICAgIG91dCA8PCAic2luZSI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BDb3M6ICAgICAgICAgICAgb3V0IDw8ICJjb3NpbmUiOyAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEVPcFRhbjogICAgICAgICAgICBvdXQgPDwgInRhbmdlbnQi
OyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQXNpbjogICAgICAgICAgIG91
dCA8PCAiYXJjIHNpbmUiOyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BBY29z
OiAgICAgICAgICAgb3V0IDw8ICJhcmMgY29zaW5lIjsgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEVPcEF0YW46ICAgICAgICAgICBvdXQgPDwgImFyYyB0YW5nZW50IjsgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BFeHA6ICAgICAgICAgICAgb3V0IDw8ICJleHAiOyAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcExvZzogICAgICAgICAgICBv
dXQgPDwgImxvZyI7ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRXhw
MjogICAgICAgICAgIG91dCA8PCAiZXhwMiI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BMb2cyOiAgICAgICAgICAgb3V0IDw8ICJsb2cyIjsgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEVPcFNxcnQ6ICAgICAgICAgICBvdXQgPDwgInNxcnQiOyAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wSW52ZXJzZVNxcnQ6ICAgIG91
dCA8PCAiaW52ZXJzZSBzcXJ0IjsgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcEFi
czogICAgICAgICAgICBvdXQgPDwgIkFic29sdXRlIHZhbHVlIjsgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wU2lnbjogICAgICAgICAgIG91dCA8PCAiU2lnbiI7ICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BGbG9vcjogICAgICAgICAgb3V0IDw8ICJGbG9vciI7
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENlaWw6ICAgICAgICAgICBv
dXQgPDwgIkNlaWxpbmciOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRnJh
Y3Q6ICAgICAgICAgIG91dCA8PCAiRnJhY3Rpb24iOyAgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBjYXNlIEVPcExlbmd0aDogICAgICAgICBvdXQgPDwgImxlbmd0aCI7ICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiAgICAgIG91dCA8PCAibm9ybWFs
aXplIjsgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vCWNhc2UgRU9wRFBkeDogICAg
ICAgICAgIG91dCA8PCAiZFBkeCI7ICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vCWNhc2UgRU9wRFBkeTogICAgICAgICAgIG91dCA8PCAiZFBkeSI7
ICAgICAgICAgICAgICAgICBicmVhazsgICAKKyAgICAgICAgICAgIC8vCWNhc2UgRU9wRndpZHRo
OiAgICAgICAgIG91dCA8PCAiZndpZHRoIjsgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAg
ICAgICAgICAgCisKKyAgICAgICAgY2FzZSBFT3BBbnk6ICAgICAgICAgICAgb3V0IDw8ICJhbnki
OyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEFsbDogICAgICAgICAg
ICBvdXQgPDwgImFsbCI7ICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIG91dC5wcmVmaXgoRVByZWZpeEVycm9yKTsKKyAgICAgICAgICAgIG91
dCA8PCAiQmFkIHVuYXJ5IG9wIjsKKyAgICB9CisKKyAgICBvdXQgPDwgIiAoIiA8PCBub2RlLT5n
ZXRDb21wbGV0ZVN0cmluZygpIDw8ICIpIjsKKworICAgIG91dCA8PCAiXG4iOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRBZ2dyZWdhdGUoVmlz
aXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSYg
b3V0ID0gc2luazsKKworICAgIGlmIChub2RlLT5nZXRPcCgpID09IEVPcE51bGwpIHsKKyAgICAg
ICAgb3V0LnByZWZpeChFUHJlZml4RXJyb3IpOworICAgICAgICBvdXQgPDwgIm5vZGUgaXMgc3Rp
bGwgRU9wTnVsbCEiOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBPdXRwdXRU
cmVlVGV4dChvdXQsIG5vZGUsIGRlcHRoKTsKKworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkg
eworICAgICAgICBjYXNlIEVPcFNlcXVlbmNlOiAgICAgIG91dCA8PCAiU2VxdWVuY2VcbiI7IHJl
dHVybiB0cnVlOworICAgICAgICBjYXNlIEVPcENvbW1hOiAgICAgICAgIG91dCA8PCAiQ29tbWFc
biI7IHJldHVybiB0cnVlOworICAgICAgICBjYXNlIEVPcEZ1bmN0aW9uOiAgICAgIG91dCA8PCAi
RnVuY3Rpb24gRGVmaW5pdGlvbjogIiA8PCBub2RlLT5nZXROYW1lKCk7IGJyZWFrOworICAgICAg
ICBjYXNlIEVPcEZ1bmN0aW9uQ2FsbDogIG91dCA8PCAiRnVuY3Rpb24gQ2FsbDogIiA8PCBub2Rl
LT5nZXROYW1lKCk7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFBhcmFtZXRlcnM6ICAgIG91dCA8
PCAiRnVuY3Rpb24gUGFyYW1ldGVyczogIjsgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6IG91dCA8PCAiQ29uc3RydWN0IGZsb2F0IjsgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMjogIG91dCA8PCAiQ29uc3RydWN0IHZlYzIi
OyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMzogIG91dCA8PCAiQ29uc3Ry
dWN0IHZlYzMiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjNDogIG91dCA8
PCAiQ29uc3RydWN0IHZlYzQiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9v
bDogIG91dCA8PCAiQ29uc3RydWN0IGJvb2wiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29u
c3RydWN0QlZlYzI6IG91dCA8PCAiQ29uc3RydWN0IGJ2ZWMyIjsgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wQ29uc3RydWN0QlZlYzM6IG91dCA8PCAiQ29uc3RydWN0IGJ2ZWMzIjsgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6IG91dCA8PCAiQ29uc3RydWN0IGJ2ZWM0Ijsg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OiAgIG91dCA8PCAiQ29uc3RydWN0
IGludCI7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6IG91dCA8PCAi
Q29uc3RydWN0IGl2ZWMyIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzM6
IG91dCA8PCAiQ29uc3RydWN0IGl2ZWMzIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0SVZlYzQ6IG91dCA8PCAiQ29uc3RydWN0IGl2ZWM0IjsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0TWF0MjogIG91dCA8PCAiQ29uc3RydWN0IG1hdDIiOyAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MzogIG91dCA8PCAiQ29uc3RydWN0IG1hdDMiOyAgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0NDogIG91dCA8PCAiQ29uc3RydWN0IG1h
dDQiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0U3RydWN0OiAgb3V0IDw8ICJD
b25zdHJ1Y3Qgc3RydWN0dXJlIjsgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW46
ICAgICAgICAgb3V0IDw8ICJDb21wYXJlIExlc3MgVGhhbiI7ICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOiAgICAgIG91dCA8PCAiQ29tcGFyZSBHcmVhdGVy
IFRoYW4iOyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOiAg
ICBvdXQgPDwgIkNvbXBhcmUgTGVzcyBUaGFuIG9yIEVxdWFsIjsgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDogb3V0IDw8ICJDb21wYXJlIEdyZWF0ZXIgVGhhbiBv
ciBFcXVhbCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFZlY3RvckVxdWFsOiAgICAgIG91dCA8
PCAiRXF1YWwiOyAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BWZWN0b3JOb3RFcXVhbDogICBvdXQgPDwgIk5vdEVxdWFsIjsgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BNb2Q6ICAgICAgICAgICBvdXQgPDwgIm1vZCI7
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUG93OiAgICAgICAgICAgb3V0IDw8ICJw
b3ciOyAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wQXRhbjogICAgICAgICAgb3V0
IDw8ICJhcmMgdGFuZ2VudCI7IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wTWluOiAgICAgICAg
ICAgb3V0IDw8ICJtaW4iOyAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcE1heDogICAg
ICAgICAgIG91dCA8PCAibWF4IjsgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDbGFt
cDogICAgICAgICBvdXQgPDwgImNsYW1wIjsgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
TWl4OiAgICAgICAgICAgb3V0IDw8ICJtaXgiOyAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEVPcFN0ZXA6ICAgICAgICAgIG91dCA8PCAic3RlcCI7ICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BTbW9vdGhTdGVwOiAgICBvdXQgPDwgInNtb290aHN0ZXAiOyAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBFT3BEaXN0YW5jZTogICAgICBvdXQgPDwgImRpc3RhbmNlIjsgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRG90OiAgICAgICAgICAgb3V0IDw8ICJkb3Qt
cHJvZHVjdCI7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENyb3NzOiAgICAg
ICAgIG91dCA8PCAiY3Jvc3MtcHJvZHVjdCI7ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BGYWNlRm9yd2FyZDogICBvdXQgPDwgImZhY2UtZm9yd2FyZCI7ICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wUmVmbGVjdDogICAgICAgb3V0IDw8ICJyZWZsZWN0IjsgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFJlZnJhY3Q6ICAgICAgIG91dCA8
PCAicmVmcmFjdCI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNdWw6
ICAgICAgICAgICBvdXQgPDwgImNvbXBvbmVudC13aXNlIG11bHRpcGx5IjsgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBFT3BEZWNsYXJhdGlvbjogICBvdXQgPDwgIkRlY2xhcmF0aW9uOiAiOyAgIGJy
ZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBvdXQucHJlZml4KEVQcmVmaXhF
cnJvcik7CisgICAgICAgICAgICBvdXQgPDwgIkJhZCBhZ2dyZWdhdGlvbiBvcCI7CisgICAgfQor
CisgICAgaWYgKG5vZGUtPmdldE9wKCkgIT0gRU9wU2VxdWVuY2UgJiYgbm9kZS0+Z2V0T3AoKSAh
PSBFT3BQYXJhbWV0ZXJzKQorICAgICAgICBvdXQgPDwgIiAoIiA8PCBub2RlLT5nZXRDb21wbGV0
ZVN0cmluZygpIDw8ICIpIjsKKworICAgIG91dCA8PCAiXG4iOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQs
IFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gc2lu
azsKKworICAgIE91dHB1dFRyZWVUZXh0KG91dCwgbm9kZSwgZGVwdGgpOworCisgICAgb3V0IDw8
ICJUZXN0IGNvbmRpdGlvbiBhbmQgc2VsZWN0IjsKKyAgICBvdXQgPDwgIiAoIiA8PCBub2RlLT5n
ZXRDb21wbGV0ZVN0cmluZygpIDw8ICIpXG4iOworCisgICAgKytkZXB0aDsKKworICAgIE91dHB1
dFRyZWVUZXh0KHNpbmssIG5vZGUsIGRlcHRoKTsKKyAgICBvdXQgPDwgIkNvbmRpdGlvblxuIjsK
KyAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CisKKyAgICBPdXRwdXRU
cmVlVGV4dChzaW5rLCBub2RlLCBkZXB0aCk7CisgICAgaWYgKG5vZGUtPmdldFRydWVCbG9jaygp
KSB7CisgICAgICAgIG91dCA8PCAidHJ1ZSBjYXNlXG4iOworICAgICAgICBub2RlLT5nZXRUcnVl
QmxvY2soKS0+dHJhdmVyc2UodGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIG91dCA8PCAidHJ1
ZSBjYXNlIGlzIG51bGxcbiI7CisKKyAgICBpZiAobm9kZS0+Z2V0RmFsc2VCbG9jaygpKSB7Cisg
ICAgICAgIE91dHB1dFRyZWVUZXh0KHNpbmssIG5vZGUsIGRlcHRoKTsKKyAgICAgICAgb3V0IDw8
ICJmYWxzZSBjYXNlXG4iOworICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNl
KHRoaXMpOworICAgIH0KKworICAgIC0tZGVwdGg7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFu
dFVuaW9uKiBub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IHNpbms7CisKKyAgICBz
aXplX3Qgc2l6ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CisKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICBPdXRwdXRUcmVlVGV4dChv
dXQsIG5vZGUsIGRlcHRoKTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5nZXRVbmlvbkFycmF5UG9p
bnRlcigpW2ldLmdldFR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBFYnRCb29sOgorICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpW2ldLmdldEJDb25zdCgp
KQorICAgICAgICAgICAgICAgICAgICBvdXQgPDwgInRydWUiOworICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJmYWxzZSI7CisKKyAgICAgICAgICAgICAg
ICBvdXQgPDwgIiAoIiA8PCAiY29uc3QgYm9vbCIgPDwgIikiOworICAgICAgICAgICAgICAgIG91
dCA8PCAiXG4iOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRG
bG9hdDoKKyAgICAgICAgICAgICAgICBvdXQgPDwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIo
KVtpXS5nZXRGQ29uc3QoKTsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAoY29uc3QgZmxvYXQp
XG4iOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRJbnQ6Cisg
ICAgICAgICAgICAgICAgb3V0IDw8IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKClbaV0uZ2V0
SUNvbnN0KCk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgKGNvbnN0IGludClcbiI7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IG91dC5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRMaW5lKCksICJVbmtu
b3duIGNvbnN0YW50Iik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK2Jvb2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50
ZXJtTG9vcCogbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBzaW5rOworCisgICAg
T3V0cHV0VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7CisKKyAgICBvdXQgPDwgIkxvb3Agd2l0
aCBjb25kaXRpb24gIjsKKyAgICBpZiAobm9kZS0+Z2V0VHlwZSgpID09IEVMb29wRG9XaGlsZSkK
KyAgICAgICAgb3V0IDw8ICJub3QgIjsKKyAgICBvdXQgPDwgInRlc3RlZCBmaXJzdFxuIjsKKwor
ICAgICsrZGVwdGg7CisKKyAgICBPdXRwdXRUcmVlVGV4dChzaW5rLCBub2RlLCBkZXB0aCk7Cisg
ICAgaWYgKG5vZGUtPmdldENvbmRpdGlvbigpKSB7CisgICAgICAgIG91dCA8PCAiTG9vcCBDb25k
aXRpb25cbiI7CisgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgb3V0IDw8ICJObyBsb29wIGNvbmRpdGlvblxuIjsKKworICAg
IE91dHB1dFRyZWVUZXh0KHNpbmssIG5vZGUsIGRlcHRoKTsKKyAgICBpZiAobm9kZS0+Z2V0Qm9k
eSgpKSB7CisgICAgICAgIG91dCA8PCAiTG9vcCBCb2R5XG4iOworICAgICAgICBub2RlLT5nZXRC
b2R5KCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBvdXQgPDwgIk5vIGxv
b3AgYm9keVxuIjsKKworICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkpIHsKKyAgICAgICAg
T3V0cHV0VHJlZVRleHQoc2luaywgbm9kZSwgZGVwdGgpOworICAgICAgICBvdXQgPDwgIkxvb3Ag
VGVybWluYWwgRXhwcmVzc2lvblxuIjsKKyAgICAgICAgbm9kZS0+Z2V0RXhwcmVzc2lvbigpLT50
cmF2ZXJzZSh0aGlzKTsKKyAgICB9CisKKyAgICAtLWRlcHRoOworCisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBU
SW50ZXJtQnJhbmNoKiBub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IHNpbms7CisK
KyAgICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUsIGRlcHRoKTsKKworICAgIHN3aXRjaCAobm9k
ZS0+Z2V0Rmxvd09wKCkpIHsKKyAgICAgICAgY2FzZSBFT3BLaWxsOiAgICAgIG91dCA8PCAiQnJh
bmNoOiBLaWxsIjsgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEJyZWFrOiAgICAg
b3V0IDw8ICJCcmFuY2g6IEJyZWFrIjsgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
Q29udGludWU6ICBvdXQgPDwgIkJyYW5jaDogQ29udGludWUiOyAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BSZXR1cm46ICAgIG91dCA8PCAiQnJhbmNoOiBSZXR1cm4iOyAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgb3V0IDw8ICJCcmFuY2g6IFVua25vd24g
QnJhbmNoIjsgYnJlYWs7CisgICAgfQorCisgICAgaWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkg
eworICAgICAgICBvdXQgPDwgIiB3aXRoIGV4cHJlc3Npb25cbiI7CisgICAgICAgICsrZGVwdGg7
CisgICAgICAgIG5vZGUtPmdldEV4cHJlc3Npb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAg
IC0tZGVwdGg7CisgICAgfSBlbHNlCisgICAgICAgIG91dCA8PCAiXG4iOworCisgICAgcmV0dXJu
IGZhbHNlOworfQorCisvLworLy8gVGhpcyBmdW5jdGlvbiBpcyB0aGUgb25lIHRvIGNhbGwgZXh0
ZXJuYWxseSB0byBzdGFydCB0aGUgdHJhdmVyc2FsLgorLy8gSW5kaXZpZHVhbCBmdW5jdGlvbnMg
Y2FuIGJlIGluaXRpYWxpemVkIHRvIDAgdG8gc2tpcCBwcm9jZXNzaW5nIG9mIHRoYXQKKy8vIHR5
cGUgb2Ygbm9kZS4gIEl0J3MgY2hpbGRyZW4gd2lsbCBzdGlsbCBiZSBwcm9jZXNzZWQuCisvLwor
dm9pZCBUSW50ZXJtZWRpYXRlOjpvdXRwdXRUcmVlKFRJbnRlcm1Ob2RlKiByb290KQoreworICAg
IGlmIChyb290ID09IDApCisgICAgICAgIHJldHVybjsKKworICAgIFRPdXRwdXRUcmF2ZXJzZXIg
aXQoaW5mb1NpbmsuaW5mbyk7CisKKyAgICByb290LT50cmF2ZXJzZSgmaXQpOworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvaW50
ZXJtZWRpYXRlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9pbnRlcm1lZGlhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZjlmZTIzZDNiNDhlY2IwMmUxYWE1ZjEw
NzYwNGIzNTE4NGFmYmI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgKQEAgLTAsMCArMSw2MzUg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vCisvLyBEZWZpbml0aW9uIG9mIHRoZSBpbi1tZW1v
cnkgaGlnaC1sZXZlbCBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24KKy8vIG9mIHNoYWRlcnMu
ICBUaGlzIGlzIGEgdHJlZSB0aGF0IHBhcnNlciBjcmVhdGVzLgorLy8KKy8vIE5vZGVzIGluIHRo
ZSB0cmVlIGFyZSBkZWZpbmVkIGFzIGEgaGllcmFyY2h5IG9mIGNsYXNzZXMgZGVyaXZlZCBmcm9t
IAorLy8gVEludGVybU5vZGUuIEVhY2ggaXMgYSBub2RlIGluIGEgdHJlZS4gIFRoZXJlIGlzIG5v
IHByZXNldCBicmFuY2hpbmcgZmFjdG9yOworLy8gZWFjaCBub2RlIGNhbiBoYXZlIGl0J3Mgb3du
IHR5cGUgb2YgbGlzdCBvZiBjaGlsZHJlbi4KKy8vCisKKyNpZm5kZWYgX19JTlRFUk1FRElBVEVf
SAorI2RlZmluZSBfX0lOVEVSTUVESUFURV9ICisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxh
bmcuaCIKKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL0NvbW1vbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHlwZXMuaCIKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaCIKKworLy8KKy8vIE9w
ZXJhdG9ycyB1c2VkIGJ5IHRoZSBoaWdoLWxldmVsIChwYXJzZSB0cmVlKSByZXByZXNlbnRhdGlv
bi4KKy8vCitlbnVtIFRPcGVyYXRvciB7CisgICAgRU9wTnVsbCwgICAgICAgICAgICAvLyBpZiBp
biBhIG5vZGUsIHNob3VsZCBvbmx5IG1lYW4gYSBub2RlIGlzIHN0aWxsIGJlaW5nIGJ1aWx0Cisg
ICAgRU9wU2VxdWVuY2UsICAgICAgICAvLyBkZW5vdGVzIGEgbGlzdCBvZiBzdGF0ZW1lbnRzLCBv
ciBwYXJhbWV0ZXJzLCBldGMuCisgICAgRU9wRnVuY3Rpb25DYWxsLCAgICAKKyAgICBFT3BGdW5j
dGlvbiwgICAgICAgIC8vIEZvciBmdW5jdGlvbiBkZWZpbml0aW9uCisgICAgRU9wUGFyYW1ldGVy
cywgICAgICAvLyBhbiBhZ2dyZWdhdGUgbGlzdGluZyB0aGUgcGFyYW1ldGVycyB0byBhIGZ1bmN0
aW9uCisKKyAgICBFT3BEZWNsYXJhdGlvbiwKKyAgICBFT3BQcm90b3R5cGUsCisKKyAgICAvLwor
ICAgIC8vIFVuYXJ5IG9wZXJhdG9ycworICAgIC8vCisKKyAgICBFT3BOZWdhdGl2ZSwKKyAgICBF
T3BMb2dpY2FsTm90LAorICAgIEVPcFZlY3RvckxvZ2ljYWxOb3QsCisKKyAgICBFT3BQb3N0SW5j
cmVtZW50LAorICAgIEVPcFBvc3REZWNyZW1lbnQsCisgICAgRU9wUHJlSW5jcmVtZW50LAorICAg
IEVPcFByZURlY3JlbWVudCwKKworICAgIEVPcENvbnZJbnRUb0Jvb2wsCisgICAgRU9wQ29udkZs
b2F0VG9Cb29sLAorICAgIEVPcENvbnZCb29sVG9GbG9hdCwKKyAgICBFT3BDb252SW50VG9GbG9h
dCwKKyAgICBFT3BDb252RmxvYXRUb0ludCwKKyAgICBFT3BDb252Qm9vbFRvSW50LAorCisgICAg
Ly8KKyAgICAvLyBiaW5hcnkgb3BlcmF0aW9ucworICAgIC8vCisKKyAgICBFT3BBZGQsCisgICAg
RU9wU3ViLAorICAgIEVPcE11bCwKKyAgICBFT3BEaXYsCisgICAgRU9wRXF1YWwsCisgICAgRU9w
Tm90RXF1YWwsCisgICAgRU9wVmVjdG9yRXF1YWwsCisgICAgRU9wVmVjdG9yTm90RXF1YWwsCisg
ICAgRU9wTGVzc1RoYW4sCisgICAgRU9wR3JlYXRlclRoYW4sCisgICAgRU9wTGVzc1RoYW5FcXVh
bCwKKyAgICBFT3BHcmVhdGVyVGhhbkVxdWFsLAorICAgIEVPcENvbW1hLAorCisgICAgRU9wVmVj
dG9yVGltZXNTY2FsYXIsCisgICAgRU9wVmVjdG9yVGltZXNNYXRyaXgsCisgICAgRU9wTWF0cml4
VGltZXNWZWN0b3IsCisgICAgRU9wTWF0cml4VGltZXNTY2FsYXIsCisKKyAgICBFT3BMb2dpY2Fs
T3IsCisgICAgRU9wTG9naWNhbFhvciwKKyAgICBFT3BMb2dpY2FsQW5kLAorCisgICAgRU9wSW5k
ZXhEaXJlY3QsCisgICAgRU9wSW5kZXhJbmRpcmVjdCwKKyAgICBFT3BJbmRleERpcmVjdFN0cnVj
dCwKKworICAgIEVPcFZlY3RvclN3aXp6bGUsCisKKyAgICAvLworICAgIC8vIEJ1aWx0LWluIGZ1
bmN0aW9ucyBwb3RlbnRpYWxseSBtYXBwZWQgdG8gb3BlcmF0b3JzCisgICAgLy8KKworICAgIEVP
cFJhZGlhbnMsCisgICAgRU9wRGVncmVlcywKKyAgICBFT3BTaW4sCisgICAgRU9wQ29zLAorICAg
IEVPcFRhbiwKKyAgICBFT3BBc2luLAorICAgIEVPcEFjb3MsCisgICAgRU9wQXRhbiwKKworICAg
IEVPcFBvdywKKyAgICBFT3BFeHAsCisgICAgRU9wTG9nLAorICAgIEVPcEV4cDIsCisgICAgRU9w
TG9nMiwKKyAgICBFT3BTcXJ0LAorICAgIEVPcEludmVyc2VTcXJ0LAorCisgICAgRU9wQWJzLAor
ICAgIEVPcFNpZ24sCisgICAgRU9wRmxvb3IsCisgICAgRU9wQ2VpbCwKKyAgICBFT3BGcmFjdCwK
KyAgICBFT3BNb2QsCisgICAgRU9wTWluLAorICAgIEVPcE1heCwKKyAgICBFT3BDbGFtcCwKKyAg
ICBFT3BNaXgsCisgICAgRU9wU3RlcCwKKyAgICBFT3BTbW9vdGhTdGVwLAorCisgICAgRU9wTGVu
Z3RoLAorICAgIEVPcERpc3RhbmNlLAorICAgIEVPcERvdCwKKyAgICBFT3BDcm9zcywKKyAgICBF
T3BOb3JtYWxpemUsCisgICAgRU9wRmFjZUZvcndhcmQsCisgICAgRU9wUmVmbGVjdCwKKyAgICBF
T3BSZWZyYWN0LAorCisgICAgRU9wREZkeCwgICAgICAgICAgICAvLyBGcmFnbWVudCBvbmx5LCBP
RVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgZXh0ZW5zaW9uCisgICAgRU9wREZkeSwgICAgICAgICAg
ICAvLyBGcmFnbWVudCBvbmx5LCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgZXh0ZW5zaW9uCisg
ICAgRU9wRndpZHRoLCAgICAgICAgICAvLyBGcmFnbWVudCBvbmx5LCBPRVNfc3RhbmRhcmRfZGVy
aXZhdGl2ZXMgZXh0ZW5zaW9uCisKKyAgICBFT3BNYXRyaXhUaW1lc01hdHJpeCwKKworICAgIEVP
cEFueSwKKyAgICBFT3BBbGwsCisKKyAgICAvLworICAgIC8vIEJyYW5jaAorICAgIC8vCisKKyAg
ICBFT3BLaWxsLCAgICAgICAgICAgIC8vIEZyYWdtZW50IG9ubHkKKyAgICBFT3BSZXR1cm4sCisg
ICAgRU9wQnJlYWssCisgICAgRU9wQ29udGludWUsCisKKyAgICAvLworICAgIC8vIENvbnN0cnVj
dG9ycworICAgIC8vCisKKyAgICBFT3BDb25zdHJ1Y3RJbnQsCisgICAgRU9wQ29uc3RydWN0Qm9v
bCwKKyAgICBFT3BDb25zdHJ1Y3RGbG9hdCwKKyAgICBFT3BDb25zdHJ1Y3RWZWMyLAorICAgIEVP
cENvbnN0cnVjdFZlYzMsCisgICAgRU9wQ29uc3RydWN0VmVjNCwKKyAgICBFT3BDb25zdHJ1Y3RC
VmVjMiwKKyAgICBFT3BDb25zdHJ1Y3RCVmVjMywKKyAgICBFT3BDb25zdHJ1Y3RCVmVjNCwKKyAg
ICBFT3BDb25zdHJ1Y3RJVmVjMiwKKyAgICBFT3BDb25zdHJ1Y3RJVmVjMywKKyAgICBFT3BDb25z
dHJ1Y3RJVmVjNCwKKyAgICBFT3BDb25zdHJ1Y3RNYXQyLAorICAgIEVPcENvbnN0cnVjdE1hdDMs
CisgICAgRU9wQ29uc3RydWN0TWF0NCwKKyAgICBFT3BDb25zdHJ1Y3RTdHJ1Y3QsCisKKyAgICAv
LworICAgIC8vIG1vdmVzCisgICAgLy8KKworICAgIEVPcEFzc2lnbiwKKyAgICBFT3BJbml0aWFs
aXplLAorICAgIEVPcEFkZEFzc2lnbiwKKyAgICBFT3BTdWJBc3NpZ24sCisgICAgRU9wTXVsQXNz
aWduLAorICAgIEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduLAorICAgIEVPcFZlY3RvclRpbWVz
U2NhbGFyQXNzaWduLAorICAgIEVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduLAorICAgIEVPcE1h
dHJpeFRpbWVzTWF0cml4QXNzaWduLAorICAgIEVPcERpdkFzc2lnbgorfTsKKworZXh0ZXJuIGNv
bnN0IGNoYXIqIGdldE9wZXJhdG9yU3RyaW5nKFRPcGVyYXRvciBvcCk7CisKK2NsYXNzIFRJbnRl
cm1UcmF2ZXJzZXI7CitjbGFzcyBUSW50ZXJtQWdncmVnYXRlOworY2xhc3MgVEludGVybUJpbmFy
eTsKK2NsYXNzIFRJbnRlcm1VbmFyeTsKK2NsYXNzIFRJbnRlcm1Db25zdGFudFVuaW9uOworY2xh
c3MgVEludGVybVNlbGVjdGlvbjsKK2NsYXNzIFRJbnRlcm1UeXBlZDsKK2NsYXNzIFRJbnRlcm1T
eW1ib2w7CitjbGFzcyBUSW50ZXJtTG9vcDsKK2NsYXNzIFRJbmZvU2luazsKKworLy8KKy8vIEJh
c2UgY2xhc3MgZm9yIHRoZSB0cmVlIG5vZGVzCisvLworY2xhc3MgVEludGVybU5vZGUgeworcHVi
bGljOgorICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKKyAgICBUSW50ZXJtTm9kZSgp
IHsKKyAgICAgICAgLy8gVE9ETzogTW92ZSB0aGlzIHRvIFRTb3VyY2VMb2MgY29uc3RydWN0b3IK
KyAgICAgICAgLy8gYWZ0ZXIgZ2V0dGluZyByaWQgb2YgVFB1YmxpY1R5cGUuCisgICAgICAgIGxp
bmUuZmlyc3RfZmlsZSA9IGxpbmUubGFzdF9maWxlID0gMDsKKyAgICAgICAgbGluZS5maXJzdF9s
aW5lID0gbGluZS5sYXN0X2xpbmUgPSAwOworICAgIH0KKyAgICB2aXJ0dWFsIH5USW50ZXJtTm9k
ZSgpIHsgfQorCisgICAgY29uc3QgVFNvdXJjZUxvYyYgZ2V0TGluZSgpIGNvbnN0IHsgcmV0dXJu
IGxpbmU7IH0KKyAgICB2b2lkIHNldExpbmUoY29uc3QgVFNvdXJjZUxvYyYgbCkgeyBsaW5lID0g
bDsgfQorCisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKSA9IDA7
CisgICAgdmlydHVhbCBUSW50ZXJtVHlwZWQqIGdldEFzVHlwZWQoKSB7IHJldHVybiAwOyB9Cisg
ICAgdmlydHVhbCBUSW50ZXJtQ29uc3RhbnRVbmlvbiogZ2V0QXNDb25zdGFudFVuaW9uKCkgeyBy
ZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgVEludGVybUFnZ3JlZ2F0ZSogZ2V0QXNBZ2dyZWdhdGUo
KSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBUSW50ZXJtQmluYXJ5KiBnZXRBc0JpbmFyeU5v
ZGUoKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBUSW50ZXJtVW5hcnkqIGdldEFzVW5hcnlO
b2RlKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgVEludGVybVNlbGVjdGlvbiogZ2V0QXNT
ZWxlY3Rpb25Ob2RlKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgVEludGVybVN5bWJvbCog
Z2V0QXNTeW1ib2xOb2RlKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgVEludGVybUxvb3Aq
IGdldEFzTG9vcE5vZGUoKSB7IHJldHVybiAwOyB9CisKKyAgICAvLyBSZXBsYWNlIGEgY2hpbGQg
bm9kZS4gUmV0dXJuIHRydWUgaWYgfG9yaWdpbmFsfCBpcyBhIGNoaWxkCisgICAgLy8gbm9kZSBh
bmQgaXQgaXMgcmVwbGFjZWQ7IG90aGVyd2lzZSwgcmV0dXJuIGZhbHNlLgorICAgIHZpcnR1YWwg
Ym9vbCByZXBsYWNlQ2hpbGROb2RlKAorICAgICAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJ
bnRlcm1Ob2RlICpyZXBsYWNlbWVudCkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgVFNvdXJjZUxv
YyBsaW5lOworfTsKKworLy8KKy8vIFRoaXMgaXMganVzdCB0byBoZWxwIHlhY2MuCisvLworc3Ry
dWN0IFRJbnRlcm1Ob2RlUGFpciB7CisgICAgVEludGVybU5vZGUqIG5vZGUxOworICAgIFRJbnRl
cm1Ob2RlKiBub2RlMjsKK307CisKKy8vCisvLyBJbnRlcm1lZGlhdGUgY2xhc3MgZm9yIG5vZGVz
IHRoYXQgaGF2ZSBhIHR5cGUuCisvLworY2xhc3MgVEludGVybVR5cGVkIDogcHVibGljIFRJbnRl
cm1Ob2RlIHsKK3B1YmxpYzoKKyAgICBUSW50ZXJtVHlwZWQoY29uc3QgVFR5cGUmIHQpIDogdHlw
ZSh0KSAgeyB9CisgICAgdmlydHVhbCBUSW50ZXJtVHlwZWQqIGdldEFzVHlwZWQoKSB7IHJldHVy
biB0aGlzOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzU2lkZUVmZmVjdHMoKSBjb25zdCA9IDA7
CisKKyAgICB2b2lkIHNldFR5cGUoY29uc3QgVFR5cGUmIHQpIHsgdHlwZSA9IHQ7IH0KKyAgICBj
b25zdCBUVHlwZSYgZ2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGU7IH0KKyAgICBUVHlwZSog
Z2V0VHlwZVBvaW50ZXIoKSB7IHJldHVybiAmdHlwZTsgfQorCisgICAgVEJhc2ljVHlwZSBnZXRC
YXNpY1R5cGUoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldEJhc2ljVHlwZSgpOyB9CisgICAgVFF1
YWxpZmllciBnZXRRdWFsaWZpZXIoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldFF1YWxpZmllcigp
OyB9CisgICAgVFByZWNpc2lvbiBnZXRQcmVjaXNpb24oKSBjb25zdCB7IHJldHVybiB0eXBlLmdl
dFByZWNpc2lvbigpOyB9CisgICAgaW50IGdldE5vbWluYWxTaXplKCkgY29uc3QgeyByZXR1cm4g
dHlwZS5nZXROb21pbmFsU2l6ZSgpOyB9CisgICAgCisgICAgYm9vbCBpc01hdHJpeCgpIGNvbnN0
IHsgcmV0dXJuIHR5cGUuaXNNYXRyaXgoKTsgfQorICAgIGJvb2wgaXNBcnJheSgpICBjb25zdCB7
IHJldHVybiB0eXBlLmlzQXJyYXkoKTsgfQorICAgIGJvb2wgaXNWZWN0b3IoKSBjb25zdCB7IHJl
dHVybiB0eXBlLmlzVmVjdG9yKCk7IH0KKyAgICBib29sIGlzU2NhbGFyKCkgY29uc3QgeyByZXR1
cm4gdHlwZS5pc1NjYWxhcigpOyB9CisgICAgY29uc3QgY2hhciogZ2V0QmFzaWNTdHJpbmcoKSBj
b25zdCB7IHJldHVybiB0eXBlLmdldEJhc2ljU3RyaW5nKCk7IH0KKyAgICBjb25zdCBjaGFyKiBn
ZXRRdWFsaWZpZXJTdHJpbmcoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldFF1YWxpZmllclN0cmlu
ZygpOyB9CisgICAgVFN0cmluZyBnZXRDb21wbGV0ZVN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHR5
cGUuZ2V0Q29tcGxldGVTdHJpbmcoKTsgfQorCisgICAgaW50IHRvdGFsUmVnaXN0ZXJDb3VudCgp
IGNvbnN0IHsgcmV0dXJuIHR5cGUudG90YWxSZWdpc3RlckNvdW50KCk7IH0KKyAgICBpbnQgZWxl
bWVudFJlZ2lzdGVyQ291bnQoKSBjb25zdCB7IHJldHVybiB0eXBlLmVsZW1lbnRSZWdpc3RlckNv
dW50KCk7IH0KKyAgICBpbnQgZ2V0QXJyYXlTaXplKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRB
cnJheVNpemUoKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgVFR5cGUgdHlwZTsKK307CisKKy8vCisv
LyBIYW5kbGUgZm9yLCBkby13aGlsZSwgYW5kIHdoaWxlIGxvb3BzLgorLy8KK2VudW0gVExvb3BU
eXBlIHsKKyAgICBFTG9vcEZvciwKKyAgICBFTG9vcFdoaWxlLAorICAgIEVMb29wRG9XaGlsZQor
fTsKKworY2xhc3MgVEludGVybUxvb3AgOiBwdWJsaWMgVEludGVybU5vZGUgeworcHVibGljOgor
ICAgIFRJbnRlcm1Mb29wKFRMb29wVHlwZSBhVHlwZSwKKyAgICAgICAgICAgICAgICBUSW50ZXJt
Tm9kZSAqYUluaXQsIFRJbnRlcm1UeXBlZCogYUNvbmQsIFRJbnRlcm1UeXBlZCogYUV4cHIsCisg
ICAgICAgICAgICAgICAgVEludGVybU5vZGUqIGFCb2R5KSA6CisgICAgICAgICAgICB0eXBlKGFU
eXBlKSwKKyAgICAgICAgICAgIGluaXQoYUluaXQpLAorICAgICAgICAgICAgY29uZChhQ29uZCks
CisgICAgICAgICAgICBleHByKGFFeHByKSwKKyAgICAgICAgICAgIGJvZHkoYUJvZHkpLAorICAg
ICAgICAgICAgdW5yb2xsRmxhZyhmYWxzZSkgeyB9CisKKyAgICB2aXJ0dWFsIFRJbnRlcm1Mb29w
KiBnZXRBc0xvb3BOb2RlKCkgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2
ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7CisgICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGlsZE5v
ZGUoCisgICAgICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2Vt
ZW50KTsKKworICAgIFRMb29wVHlwZSBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZTsgfQor
ICAgIFRJbnRlcm1Ob2RlKiBnZXRJbml0KCkgeyByZXR1cm4gaW5pdDsgfQorICAgIFRJbnRlcm1U
eXBlZCogZ2V0Q29uZGl0aW9uKCkgeyByZXR1cm4gY29uZDsgfQorICAgIFRJbnRlcm1UeXBlZCog
Z2V0RXhwcmVzc2lvbigpIHsgcmV0dXJuIGV4cHI7IH0KKyAgICBUSW50ZXJtTm9kZSogZ2V0Qm9k
eSgpIHsgcmV0dXJuIGJvZHk7IH0KKworICAgIHZvaWQgc2V0VW5yb2xsRmxhZyhib29sIGZsYWcp
IHsgdW5yb2xsRmxhZyA9IGZsYWc7IH0KKyAgICBib29sIGdldFVucm9sbEZsYWcoKSB7IHJldHVy
biB1bnJvbGxGbGFnOyB9CisKK3Byb3RlY3RlZDoKKyAgICBUTG9vcFR5cGUgdHlwZTsKKyAgICBU
SW50ZXJtTm9kZSogaW5pdDsgIC8vIGZvci1sb29wIGluaXRpYWxpemF0aW9uCisgICAgVEludGVy
bVR5cGVkKiBjb25kOyAvLyBsb29wIGV4aXQgY29uZGl0aW9uCisgICAgVEludGVybVR5cGVkKiBl
eHByOyAvLyBmb3ItbG9vcCBleHByZXNzaW9uCisgICAgVEludGVybU5vZGUqIGJvZHk7ICAvLyBs
b29wIGJvZHkKKworICAgIGJvb2wgdW5yb2xsRmxhZzsgLy8gV2hldGhlciB0aGUgbG9vcCBzaG91
bGQgYmUgdW5yb2xsZWQgb3Igbm90LgorfTsKKworLy8KKy8vIEhhbmRsZSBicmVhaywgY29udGlu
dWUsIHJldHVybiwgYW5kIGtpbGwuCisvLworY2xhc3MgVEludGVybUJyYW5jaCA6IHB1YmxpYyBU
SW50ZXJtTm9kZSB7CitwdWJsaWM6CisgICAgVEludGVybUJyYW5jaChUT3BlcmF0b3Igb3AsIFRJ
bnRlcm1UeXBlZCogZSkgOgorICAgICAgICAgICAgZmxvd09wKG9wKSwKKyAgICAgICAgICAgIGV4
cHJlc3Npb24oZSkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZl
cnNlciopOworICAgIHZpcnR1YWwgYm9vbCByZXBsYWNlQ2hpbGROb2RlKAorICAgICAgICBUSW50
ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCk7CisKKyAgICBUT3Bl
cmF0b3IgZ2V0Rmxvd09wKCkgeyByZXR1cm4gZmxvd09wOyB9CisgICAgVEludGVybVR5cGVkKiBn
ZXRFeHByZXNzaW9uKCkgeyByZXR1cm4gZXhwcmVzc2lvbjsgfQorCitwcm90ZWN0ZWQ6CisgICAg
VE9wZXJhdG9yIGZsb3dPcDsKKyAgICBUSW50ZXJtVHlwZWQqIGV4cHJlc3Npb247ICAvLyBub24t
emVybyBleGNlcHQgZm9yICJyZXR1cm4gZXhwOyIgc3RhdGVtZW50cworfTsKKworLy8KKy8vIE5v
ZGVzIHRoYXQgY29ycmVzcG9uZCB0byBzeW1ib2xzIG9yIGNvbnN0YW50cyBpbiB0aGUgc291cmNl
IGNvZGUuCisvLworY2xhc3MgVEludGVybVN5bWJvbCA6IHB1YmxpYyBUSW50ZXJtVHlwZWQgewor
cHVibGljOgorICAgIC8vIGlmIHN5bWJvbCBpcyBpbml0aWFsaXplZCBhcyBzeW1ib2woc3ltKSwg
dGhlIG1lbW9yeSBjb21lcyBmcm9tIHRoZSBwb29sYWxsb2NhdG9yIG9mIHN5bS4gSWYgc3ltIGNv
bWVzIGZyb20KKyAgICAvLyBwZXIgcHJvY2VzcyBnbG9iYWxwb29sYWxsb2NhdG9yLCB0aGVuIGl0
IGNhdXNlcyBpbmNyZWFzZWQgbWVtb3J5IHVzYWdlIHBlciBjb21waWxlCisgICAgLy8gaXQgaXMg
ZXNzZW50aWFsIHRvIHVzZSAic3ltYm9sID0gc3ltIiB0byBhc3NpZ24gdG8gc3ltYm9sCisgICAg
VEludGVybVN5bWJvbChpbnQgaSwgY29uc3QgVFN0cmluZyYgc3ltLCBjb25zdCBUVHlwZSYgdCkg
OiAKKyAgICAgICAgICAgIFRJbnRlcm1UeXBlZCh0KSwgaWQoaSkgIHsgc3ltYm9sID0gc3ltOyBv
cmlnaW5hbFN5bWJvbCA9IHN5bTsgfSAKKworICAgIHZpcnR1YWwgYm9vbCBoYXNTaWRlRWZmZWN0
cygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBpbnQgZ2V0SWQoKSBjb25zdCB7IHJl
dHVybiBpZDsgfQorICAgIGNvbnN0IFRTdHJpbmcmIGdldFN5bWJvbCgpIGNvbnN0IHsgcmV0dXJu
IHN5bWJvbDsgfQorCisgICAgdm9pZCBzZXRJZChpbnQgbmV3SWQpIHsgaWQgPSBuZXdJZDsgfQor
ICAgIHZvaWQgc2V0U3ltYm9sKGNvbnN0IFRTdHJpbmcmIHN5bSkgeyBzeW1ib2wgPSBzeW07IH0K
KworICAgIGNvbnN0IFRTdHJpbmcmIGdldE9yaWdpbmFsU3ltYm9sKCkgY29uc3QgeyByZXR1cm4g
b3JpZ2luYWxTeW1ib2w7IH0KKworICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJh
dmVyc2VyKik7CisgICAgdmlydHVhbCBUSW50ZXJtU3ltYm9sKiBnZXRBc1N5bWJvbE5vZGUoKSB7
IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGlsZE5vZGUoVEludGVy
bU5vZGUgKiwgVEludGVybU5vZGUgKikgeyByZXR1cm4gZmFsc2U7IH0KKworcHJvdGVjdGVkOgor
ICAgIGludCBpZDsKKyAgICBUU3RyaW5nIHN5bWJvbDsKKyAgICBUU3RyaW5nIG9yaWdpbmFsU3lt
Ym9sOworfTsKKworY2xhc3MgVEludGVybUNvbnN0YW50VW5pb24gOiBwdWJsaWMgVEludGVybVR5
cGVkIHsKK3B1YmxpYzoKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbihDb25zdGFudFVuaW9uICp1
bmlvblBvaW50ZXIsIGNvbnN0IFRUeXBlJiB0KSA6IFRJbnRlcm1UeXBlZCh0KSwgdW5pb25BcnJh
eVBvaW50ZXIodW5pb25Qb2ludGVyKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCBoYXNTaWRlRWZm
ZWN0cygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBDb25zdGFudFVuaW9uKiBnZXRV
bmlvbkFycmF5UG9pbnRlcigpIGNvbnN0IHsgcmV0dXJuIHVuaW9uQXJyYXlQb2ludGVyOyB9Cisg
ICAgCisgICAgaW50IGdldElDb25zdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIHVuaW9u
QXJyYXlQb2ludGVyID8gdW5pb25BcnJheVBvaW50ZXJbaW5kZXhdLmdldElDb25zdCgpIDogMDsg
fQorICAgIGZsb2F0IGdldEZDb25zdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIHVuaW9u
QXJyYXlQb2ludGVyID8gdW5pb25BcnJheVBvaW50ZXJbaW5kZXhdLmdldEZDb25zdCgpIDogMC4w
ZjsgfQorICAgIGJvb2wgZ2V0QkNvbnN0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gdW5p
b25BcnJheVBvaW50ZXIgPyB1bmlvbkFycmF5UG9pbnRlcltpbmRleF0uZ2V0QkNvbnN0KCkgOiBm
YWxzZTsgfQorCisgICAgdmlydHVhbCBUSW50ZXJtQ29uc3RhbnRVbmlvbiogZ2V0QXNDb25zdGFu
dFVuaW9uKCkgIHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVElu
dGVybVRyYXZlcnNlciopOworICAgIHZpcnR1YWwgYm9vbCByZXBsYWNlQ2hpbGROb2RlKFRJbnRl
cm1Ob2RlICosIFRJbnRlcm1Ob2RlICopIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBUSW50ZXJt
VHlwZWQqIGZvbGQoVE9wZXJhdG9yLCBUSW50ZXJtVHlwZWQqLCBUSW5mb1NpbmsmKTsKKworcHJv
dGVjdGVkOgorICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXlQb2ludGVyOworfTsKKworLy8K
Ky8vIEludGVybWVkaWF0ZSBjbGFzcyBmb3Igbm9kZSB0eXBlcyB0aGF0IGhvbGQgb3BlcmF0b3Jz
LgorLy8KK2NsYXNzIFRJbnRlcm1PcGVyYXRvciA6IHB1YmxpYyBUSW50ZXJtVHlwZWQgeworcHVi
bGljOgorICAgIFRPcGVyYXRvciBnZXRPcCgpIGNvbnN0IHsgcmV0dXJuIG9wOyB9CisgICAgdm9p
ZCBzZXRPcChUT3BlcmF0b3IgbykgeyBvcCA9IG87IH0KKworICAgIGJvb2wgaXNBc3NpZ25tZW50
KCkgY29uc3Q7CisgICAgYm9vbCBpc0NvbnN0cnVjdG9yKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFs
IGJvb2wgaGFzU2lkZUVmZmVjdHMoKSBjb25zdCB7IHJldHVybiBpc0Fzc2lnbm1lbnQoKTsgfQor
Citwcm90ZWN0ZWQ6CisgICAgVEludGVybU9wZXJhdG9yKFRPcGVyYXRvciBvKSA6IFRJbnRlcm1U
eXBlZChUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkKSksIG9wKG8pIHt9CisgICAgVEludGVy
bU9wZXJhdG9yKFRPcGVyYXRvciBvLCBjb25zdCBUVHlwZSYgdCkgOiBUSW50ZXJtVHlwZWQodCks
IG9wKG8pIHt9CisgICAgVE9wZXJhdG9yIG9wOworfTsKKworLy8KKy8vIE5vZGVzIGZvciBhbGwg
dGhlIGJhc2ljIGJpbmFyeSBtYXRoIG9wZXJhdG9ycy4KKy8vCitjbGFzcyBUSW50ZXJtQmluYXJ5
IDogcHVibGljIFRJbnRlcm1PcGVyYXRvciB7CitwdWJsaWM6CisgICAgVEludGVybUJpbmFyeShU
T3BlcmF0b3IgbykgOiBUSW50ZXJtT3BlcmF0b3IobyksIGFkZEluZGV4Q2xhbXAoZmFsc2UpIHt9
CisKKyAgICB2aXJ0dWFsIFRJbnRlcm1CaW5hcnkqIGdldEFzQmluYXJ5Tm9kZSgpIHsgcmV0dXJu
IHRoaXM7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOwor
ICAgIHZpcnR1YWwgYm9vbCByZXBsYWNlQ2hpbGROb2RlKAorICAgICAgICBUSW50ZXJtTm9kZSAq
b3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCk7CisKKyAgICB2aXJ0dWFsIGJvb2wg
aGFzU2lkZUVmZmVjdHMoKSBjb25zdCB7IHJldHVybiAoaXNBc3NpZ25tZW50KCkgfHwgbGVmdC0+
aGFzU2lkZUVmZmVjdHMoKSB8fCByaWdodC0+aGFzU2lkZUVmZmVjdHMoKSk7IH0KKworICAgIHZv
aWQgc2V0TGVmdChUSW50ZXJtVHlwZWQqIG4pIHsgbGVmdCA9IG47IH0KKyAgICB2b2lkIHNldFJp
Z2h0KFRJbnRlcm1UeXBlZCogbikgeyByaWdodCA9IG47IH0KKyAgICBUSW50ZXJtVHlwZWQqIGdl
dExlZnQoKSBjb25zdCB7IHJldHVybiBsZWZ0OyB9CisgICAgVEludGVybVR5cGVkKiBnZXRSaWdo
dCgpIGNvbnN0IHsgcmV0dXJuIHJpZ2h0OyB9CisgICAgYm9vbCBwcm9tb3RlKFRJbmZvU2luayYp
OworCisgICAgdm9pZCBzZXRBZGRJbmRleENsYW1wKCkgeyBhZGRJbmRleENsYW1wID0gdHJ1ZTsg
fQorICAgIGJvb2wgZ2V0QWRkSW5kZXhDbGFtcCgpIHsgcmV0dXJuIGFkZEluZGV4Q2xhbXA7IH0K
KworcHJvdGVjdGVkOgorICAgIFRJbnRlcm1UeXBlZCogbGVmdDsKKyAgICBUSW50ZXJtVHlwZWQq
IHJpZ2h0OworCisgICAgLy8gSWYgc2V0IHRvIHRydWUsIHdyYXAgYW55IEVPcEluZGV4SW5kaXJl
Y3Qgd2l0aCBhIGNsYW1wIHRvIGJvdW5kcy4KKyAgICBib29sIGFkZEluZGV4Q2xhbXA7Cit9Owor
CisvLworLy8gTm9kZXMgZm9yIHVuYXJ5IG1hdGggb3BlcmF0b3JzLgorLy8KK2NsYXNzIFRJbnRl
cm1VbmFyeSA6IHB1YmxpYyBUSW50ZXJtT3BlcmF0b3IgeworcHVibGljOgorICAgIFRJbnRlcm1V
bmFyeShUT3BlcmF0b3IgbywgY29uc3QgVFR5cGUmIHQpIDogVEludGVybU9wZXJhdG9yKG8sIHQp
LCBvcGVyYW5kKDApLCB1c2VFbXVsYXRlZEZ1bmN0aW9uKGZhbHNlKSB7fQorICAgIFRJbnRlcm1V
bmFyeShUT3BlcmF0b3IgbykgOiBUSW50ZXJtT3BlcmF0b3IobyksIG9wZXJhbmQoMCksIHVzZUVt
dWxhdGVkRnVuY3Rpb24oZmFsc2UpIHt9CisKKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVElu
dGVybVRyYXZlcnNlciopOworICAgIHZpcnR1YWwgVEludGVybVVuYXJ5KiBnZXRBc1VuYXJ5Tm9k
ZSgpIHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxkTm9kZSgK
KyAgICAgICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFjZW1lbnQp
OworCisgICAgdmlydHVhbCBib29sIGhhc1NpZGVFZmZlY3RzKCkgY29uc3QgeyByZXR1cm4gKGlz
QXNzaWdubWVudCgpIHx8IG9wZXJhbmQtPmhhc1NpZGVFZmZlY3RzKCkpOyB9CisKKyAgICB2b2lk
IHNldE9wZXJhbmQoVEludGVybVR5cGVkKiBvKSB7IG9wZXJhbmQgPSBvOyB9CisgICAgVEludGVy
bVR5cGVkKiBnZXRPcGVyYW5kKCkgeyByZXR1cm4gb3BlcmFuZDsgfSAgICAKKyAgICBib29sIHBy
b21vdGUoVEluZm9TaW5rJik7CisKKyAgICB2b2lkIHNldFVzZUVtdWxhdGVkRnVuY3Rpb24oKSB7
IHVzZUVtdWxhdGVkRnVuY3Rpb24gPSB0cnVlOyB9CisgICAgYm9vbCBnZXRVc2VFbXVsYXRlZEZ1
bmN0aW9uKCkgeyByZXR1cm4gdXNlRW11bGF0ZWRGdW5jdGlvbjsgfQorCitwcm90ZWN0ZWQ6Cisg
ICAgVEludGVybVR5cGVkKiBvcGVyYW5kOworCisgICAgLy8gSWYgc2V0IHRvIHRydWUsIHJlcGxh
Y2UgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGNhbGwgd2l0aCBhbiBlbXVsYXRlZCBvbmUKKyAgICAv
LyB0byB3b3JrIGFyb3VuZCBkcml2ZXIgYnVncy4KKyAgICBib29sIHVzZUVtdWxhdGVkRnVuY3Rp
b247Cit9OworCit0eXBlZGVmIFRWZWN0b3I8VEludGVybU5vZGUqPiBUSW50ZXJtU2VxdWVuY2U7
Cit0eXBlZGVmIFRWZWN0b3I8aW50PiBUUXVhbGlmaWVyTGlzdDsKKworLy8KKy8vIE5vZGVzIHRo
YXQgb3BlcmF0ZSBvbiBhbiBhcmJpdHJhcnkgc2l6ZWQgc2V0IG9mIGNoaWxkcmVuLgorLy8KK2Ns
YXNzIFRJbnRlcm1BZ2dyZWdhdGUgOiBwdWJsaWMgVEludGVybU9wZXJhdG9yIHsKK3B1YmxpYzoK
KyAgICBUSW50ZXJtQWdncmVnYXRlKCkgOiBUSW50ZXJtT3BlcmF0b3IoRU9wTnVsbCksIHVzZXJE
ZWZpbmVkKGZhbHNlKSwgdXNlRW11bGF0ZWRGdW5jdGlvbihmYWxzZSkgeyB9CisgICAgVEludGVy
bUFnZ3JlZ2F0ZShUT3BlcmF0b3IgbykgOiBUSW50ZXJtT3BlcmF0b3IobyksIHVzZUVtdWxhdGVk
RnVuY3Rpb24oZmFsc2UpIHsgfQorICAgIH5USW50ZXJtQWdncmVnYXRlKCkgeyB9CisKKyAgICB2
aXJ0dWFsIFRJbnRlcm1BZ2dyZWdhdGUqIGdldEFzQWdncmVnYXRlKCkgeyByZXR1cm4gdGhpczsg
fQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7CisgICAgdmly
dHVhbCBib29sIHJlcGxhY2VDaGlsZE5vZGUoCisgICAgICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5h
bCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KTsKKworICAgIC8vIENvbnNlcnZhdGl2ZWx5IGFz
c3VtZSBmdW5jdGlvbiBjYWxscyBhbmQgb3RoZXIgYWdncmVnYXRlIG9wZXJhdG9ycyBoYXZlIHNp
ZGUtZWZmZWN0cworICAgIHZpcnR1YWwgYm9vbCBoYXNTaWRlRWZmZWN0cygpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KKworICAgIFRJbnRlcm1TZXF1ZW5jZSYgZ2V0U2VxdWVuY2UoKSB7IHJldHVy
biBzZXF1ZW5jZTsgfQorCisgICAgdm9pZCBzZXROYW1lKGNvbnN0IFRTdHJpbmcmIG4pIHsgbmFt
ZSA9IG47IH0KKyAgICBjb25zdCBUU3RyaW5nJiBnZXROYW1lKCkgY29uc3QgeyByZXR1cm4gbmFt
ZTsgfQorCisgICAgdm9pZCBzZXRVc2VyRGVmaW5lZCgpIHsgdXNlckRlZmluZWQgPSB0cnVlOyB9
CisgICAgYm9vbCBpc1VzZXJEZWZpbmVkKCkgY29uc3QgeyByZXR1cm4gdXNlckRlZmluZWQ7IH0K
KworICAgIHZvaWQgc2V0T3B0aW1pemUoYm9vbCBvKSB7IG9wdGltaXplID0gbzsgfQorICAgIGJv
b2wgZ2V0T3B0aW1pemUoKSB7IHJldHVybiBvcHRpbWl6ZTsgfQorICAgIHZvaWQgc2V0RGVidWco
Ym9vbCBkKSB7IGRlYnVnID0gZDsgfQorICAgIGJvb2wgZ2V0RGVidWcoKSB7IHJldHVybiBkZWJ1
ZzsgfQorCisgICAgdm9pZCBzZXRVc2VFbXVsYXRlZEZ1bmN0aW9uKCkgeyB1c2VFbXVsYXRlZEZ1
bmN0aW9uID0gdHJ1ZTsgfQorICAgIGJvb2wgZ2V0VXNlRW11bGF0ZWRGdW5jdGlvbigpIHsgcmV0
dXJuIHVzZUVtdWxhdGVkRnVuY3Rpb247IH0KKworcHJvdGVjdGVkOgorICAgIFRJbnRlcm1BZ2dy
ZWdhdGUoY29uc3QgVEludGVybUFnZ3JlZ2F0ZSYpOyAvLyBkaXNhbGxvdyBjb3B5IGNvbnN0cnVj
dG9yCisgICAgVEludGVybUFnZ3JlZ2F0ZSYgb3BlcmF0b3I9KGNvbnN0IFRJbnRlcm1BZ2dyZWdh
dGUmKTsgLy8gZGlzYWxsb3cgYXNzaWdubWVudCBvcGVyYXRvcgorICAgIFRJbnRlcm1TZXF1ZW5j
ZSBzZXF1ZW5jZTsKKyAgICBUU3RyaW5nIG5hbWU7CisgICAgYm9vbCB1c2VyRGVmaW5lZDsgLy8g
dXNlZCBmb3IgdXNlciBkZWZpbmVkIGZ1bmN0aW9uIG5hbWVzCisKKyAgICBib29sIG9wdGltaXpl
OworICAgIGJvb2wgZGVidWc7CisKKyAgICAvLyBJZiBzZXQgdG8gdHJ1ZSwgcmVwbGFjZSB0aGUg
YnVpbHQtaW4gZnVuY3Rpb24gY2FsbCB3aXRoIGFuIGVtdWxhdGVkIG9uZQorICAgIC8vIHRvIHdv
cmsgYXJvdW5kIGRyaXZlciBidWdzLgorICAgIGJvb2wgdXNlRW11bGF0ZWRGdW5jdGlvbjsKK307
CisKKy8vCisvLyBGb3IgaWYgdGVzdHMuICBTaW1wbGlmaWVkIHNpbmNlIHRoZXJlIGlzIG5vIHN3
aXRjaCBzdGF0ZW1lbnQuCisvLworY2xhc3MgVEludGVybVNlbGVjdGlvbiA6IHB1YmxpYyBUSW50
ZXJtVHlwZWQgeworcHVibGljOgorICAgIFRJbnRlcm1TZWxlY3Rpb24oVEludGVybVR5cGVkKiBj
b25kLCBUSW50ZXJtTm9kZSogdHJ1ZUIsIFRJbnRlcm1Ob2RlKiBmYWxzZUIpIDoKKyAgICAgICAg
ICAgIFRJbnRlcm1UeXBlZChUVHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpKSwgY29uZGl0aW9u
KGNvbmQpLCB0cnVlQmxvY2sodHJ1ZUIpLCBmYWxzZUJsb2NrKGZhbHNlQikge30KKyAgICBUSW50
ZXJtU2VsZWN0aW9uKFRJbnRlcm1UeXBlZCogY29uZCwgVEludGVybU5vZGUqIHRydWVCLCBUSW50
ZXJtTm9kZSogZmFsc2VCLCBjb25zdCBUVHlwZSYgdHlwZSkgOgorICAgICAgICAgICAgVEludGVy
bVR5cGVkKHR5cGUpLCBjb25kaXRpb24oY29uZCksIHRydWVCbG9jayh0cnVlQiksIGZhbHNlQmxv
Y2soZmFsc2VCKSB7fQorCisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJz
ZXIqKTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxkTm9kZSgKKyAgICAgICAgVEludGVy
bU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFjZW1lbnQpOworCisgICAgLy8gQ29u
c2VydmF0aXZlbHkgYXNzdW1lIHNlbGVjdGlvbnMgaGF2ZSBzaWRlLWVmZmVjdHMKKyAgICB2aXJ0
dWFsIGJvb2wgaGFzU2lkZUVmZmVjdHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBi
b29sIHVzZXNUZXJuYXJ5T3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBnZXRCYXNpY1R5cGUoKSAh
PSBFYnRWb2lkOyB9CisgICAgVEludGVybU5vZGUqIGdldENvbmRpdGlvbigpIGNvbnN0IHsgcmV0
dXJuIGNvbmRpdGlvbjsgfQorICAgIFRJbnRlcm1Ob2RlKiBnZXRUcnVlQmxvY2soKSBjb25zdCB7
IHJldHVybiB0cnVlQmxvY2s7IH0KKyAgICBUSW50ZXJtTm9kZSogZ2V0RmFsc2VCbG9jaygpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlQmxvY2s7IH0KKyAgICBUSW50ZXJtU2VsZWN0aW9uKiBnZXRBc1Nl
bGVjdGlvbk5vZGUoKSB7IHJldHVybiB0aGlzOyB9CisKK3Byb3RlY3RlZDoKKyAgICBUSW50ZXJt
VHlwZWQqIGNvbmRpdGlvbjsKKyAgICBUSW50ZXJtTm9kZSogdHJ1ZUJsb2NrOworICAgIFRJbnRl
cm1Ob2RlKiBmYWxzZUJsb2NrOworfTsKKworZW51bSBWaXNpdAoreworICAgIFByZVZpc2l0LAor
ICAgIEluVmlzaXQsCisgICAgUG9zdFZpc2l0Cit9OworCisvLworLy8gRm9yIHRyYXZlcnNpbmcg
dGhlIHRyZWUuICBVc2VyIHNob3VsZCBkZXJpdmUgZnJvbSB0aGlzLCAKKy8vIHB1dCB0aGVpciB0
cmF2ZXJzYWwgc3BlY2lmaWMgZGF0YSBpbiBpdCwgYW5kIHRoZW4gcGFzcworLy8gaXQgdG8gYSBU
cmF2ZXJzZSBtZXRob2QuCisvLworLy8gV2hlbiB1c2luZyB0aGlzLCBqdXN0IGZpbGwgaW4gdGhl
IG1ldGhvZHMgZm9yIG5vZGVzIHlvdSB3YW50IHZpc2l0ZWQuCisvLyBSZXR1cm4gZmFsc2UgZnJv
bSBhIHByZS12aXNpdCB0byBza2lwIHZpc2l0aW5nIHRoYXQgbm9kZSdzIHN1YnRyZWUuCisvLwor
Y2xhc3MgVEludGVybVRyYXZlcnNlcgoreworcHVibGljOgorICAgIFBPT0xfQUxMT0NBVE9SX05F
V19ERUxFVEUoKTsKKyAgICBUSW50ZXJtVHJhdmVyc2VyKGJvb2wgcHJlVmlzaXQgPSB0cnVlLCBi
b29sIGluVmlzaXQgPSBmYWxzZSwgYm9vbCBwb3N0VmlzaXQgPSBmYWxzZSwgYm9vbCByaWdodFRv
TGVmdCA9IGZhbHNlKSA6IAorICAgICAgICAgICAgcHJlVmlzaXQocHJlVmlzaXQpLAorICAgICAg
ICAgICAgaW5WaXNpdChpblZpc2l0KSwKKyAgICAgICAgICAgIHBvc3RWaXNpdChwb3N0VmlzaXQp
LAorICAgICAgICAgICAgcmlnaHRUb0xlZnQocmlnaHRUb0xlZnQpLAorICAgICAgICAgICAgZGVw
dGgoMCksCisgICAgICAgICAgICBtYXhEZXB0aCgwKSB7fQorICAgIHZpcnR1YWwgflRJbnRlcm1U
cmF2ZXJzZXIoKSB7fQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1i
b2wqKSB7fQorICAgIHZpcnR1YWwgdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0
YW50VW5pb24qKSB7fQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwg
VEludGVybUJpbmFyeSopIHtyZXR1cm4gdHJ1ZTt9CisgICAgdmlydHVhbCBib29sIHZpc2l0VW5h
cnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSopIHtyZXR1cm4gdHJ1ZTt9CisgICAgdmlydHVh
bCBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKikge3Jl
dHVybiB0cnVlO30KKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQs
IFRJbnRlcm1BZ2dyZWdhdGUqKSB7cmV0dXJuIHRydWU7fQorICAgIHZpcnR1YWwgYm9vbCB2aXNp
dExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKikge3JldHVybiB0cnVlO30KKyAgICB2aXJ0
dWFsIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqKSB7cmV0dXJu
IHRydWU7fQorCisgICAgaW50IGdldE1heERlcHRoKCkgY29uc3Qge3JldHVybiBtYXhEZXB0aDt9
CisKKyAgICB2b2lkIGluY3JlbWVudERlcHRoKFRJbnRlcm1Ob2RlICpjdXJyZW50KQorICAgIHsK
KyAgICAgICAgZGVwdGgrKzsKKyAgICAgICAgbWF4RGVwdGggPSBzdGQ6Om1heChtYXhEZXB0aCwg
ZGVwdGgpOworICAgICAgICBwYXRoLnB1c2hfYmFjayhjdXJyZW50KTsKKyAgICB9CisKKyAgICB2
b2lkIGRlY3JlbWVudERlcHRoKCkKKyAgICB7CisgICAgICAgIGRlcHRoLS07CisgICAgICAgIHBh
dGgucG9wX2JhY2soKTsKKyAgICB9CisKKyAgICBUSW50ZXJtTm9kZSAqZ2V0UGFyZW50Tm9kZSgp
CisgICAgeworICAgICAgICByZXR1cm4gcGF0aC5zaXplKCkgPT0gMCA/IE5VTEwgOiBwYXRoLmJh
Y2soKTsKKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdGhlIG9yaWdpbmFsIG5hbWUgaWYgaGFzaCBm
dW5jdGlvbiBwb2ludGVyIGlzIE5VTEw7CisgICAgLy8gb3RoZXJ3aXNlIHJldHVybiB0aGUgaGFz
aGVkIG5hbWUuCisgICAgc3RhdGljIFRTdHJpbmcgaGFzaChjb25zdCBUU3RyaW5nJiBuYW1lLCBT
aEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbik7CisKKyAgICBjb25zdCBib29sIHByZVZpc2l0
OworICAgIGNvbnN0IGJvb2wgaW5WaXNpdDsKKyAgICBjb25zdCBib29sIHBvc3RWaXNpdDsKKyAg
ICBjb25zdCBib29sIHJpZ2h0VG9MZWZ0OworCitwcm90ZWN0ZWQ6CisgICAgaW50IGRlcHRoOwor
ICAgIGludCBtYXhEZXB0aDsKKworICAgIC8vIEFsbCB0aGUgbm9kZXMgZnJvbSByb290IHRvIHRo
ZSBjdXJyZW50IG5vZGUncyBwYXJlbnQgZHVyaW5nIHRyYXZlcnNpbmcuCisgICAgVFZlY3RvcjxU
SW50ZXJtTm9kZSAqPiBwYXRoOworfTsKKworI2VuZGlmIC8vIF9fSU5URVJNRURJQVRFX0gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L2xvY2FsaW50ZXJtZWRpYXRlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9sb2NhbGludGVybWVkaWF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1ODJlMDJmNWQ4
NTQxZTdjYjMzNzAzNGUwZTZjOTgyZTFlZjVmNjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9sb2NhbGludGVybWVkaWF0
ZS5oCkBAIC0wLDAgKzEsNTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX0xPQ0FM
X0lOVEVSTUVESUFURV9JTkNMVURFRF8KKyNkZWZpbmUgX0xPQ0FMX0lOVEVSTUVESUFURV9JTkNM
VURFRF8KKworI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9TeW1ib2xUYWJsZS5oIgorCitzdHJ1Y3QgVFZlY3RvckZpZWxkcyB7CisgICAgaW50IG9m
ZnNldHNbNF07CisgICAgaW50IG51bTsKK307CisKKy8vCisvLyBTZXQgb2YgaGVscGVyIGZ1bmN0
aW9ucyB0byBoZWxwIHBhcnNlIGFuZCBidWlsZCB0aGUgdHJlZS4KKy8vCitjbGFzcyBUSW5mb1Np
bms7CitjbGFzcyBUSW50ZXJtZWRpYXRlIHsKK3B1YmxpYzogICAgCisgICAgUE9PTF9BTExPQ0FU
T1JfTkVXX0RFTEVURSgpOworICAgIFRJbnRlcm1lZGlhdGUoVEluZm9TaW5rJiBpKSA6IGluZm9T
aW5rKGkpIHsgfQorCisgICAgVEludGVybVN5bWJvbCogYWRkU3ltYm9sKGludCBJZCwgY29uc3Qg
VFN0cmluZyYsIGNvbnN0IFRUeXBlJiwgY29uc3QgVFNvdXJjZUxvYyYpOworICAgIFRJbnRlcm1U
eXBlZCogYWRkQ29udmVyc2lvbihUT3BlcmF0b3IsIGNvbnN0IFRUeXBlJiwgVEludGVybVR5cGVk
Kik7CisgICAgVEludGVybVR5cGVkKiBhZGRCaW5hcnlNYXRoKFRPcGVyYXRvciBvcCwgVEludGVy
bVR5cGVkKiBsZWZ0LCBUSW50ZXJtVHlwZWQqIHJpZ2h0LCBjb25zdCBUU291cmNlTG9jJiwgVFN5
bWJvbFRhYmxlJik7CisgICAgVEludGVybVR5cGVkKiBhZGRBc3NpZ24oVE9wZXJhdG9yIG9wLCBU
SW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2Mm
KTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZEluZGV4KFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVk
KiBiYXNlLCBUSW50ZXJtVHlwZWQqIGluZGV4LCBjb25zdCBUU291cmNlTG9jJik7CisgICAgVElu
dGVybVR5cGVkKiBhZGRVbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtTm9kZSogY2hpbGQs
IGNvbnN0IFRTb3VyY2VMb2MmLCBUU3ltYm9sVGFibGUmKTsKKyAgICBUSW50ZXJtQWdncmVnYXRl
KiBncm93QWdncmVnYXRlKFRJbnRlcm1Ob2RlKiBsZWZ0LCBUSW50ZXJtTm9kZSogcmlnaHQsIGNv
bnN0IFRTb3VyY2VMb2MmKTsKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBtYWtlQWdncmVnYXRlKFRJ
bnRlcm1Ob2RlKiBub2RlLCBjb25zdCBUU291cmNlTG9jJik7CisgICAgVEludGVybUFnZ3JlZ2F0
ZSogc2V0QWdncmVnYXRlT3BlcmF0b3IoVEludGVybU5vZGUqLCBUT3BlcmF0b3IsIGNvbnN0IFRT
b3VyY2VMb2MmKTsKKyAgICBUSW50ZXJtTm9kZSogIGFkZFNlbGVjdGlvbihUSW50ZXJtVHlwZWQq
IGNvbmQsIFRJbnRlcm1Ob2RlUGFpciBjb2RlLCBjb25zdCBUU291cmNlTG9jJik7CisgICAgVElu
dGVybVR5cGVkKiBhZGRTZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtVHlwZWQq
IHRydWVCbG9jaywgVEludGVybVR5cGVkKiBmYWxzZUJsb2NrLCBjb25zdCBUU291cmNlTG9jJik7
CisgICAgVEludGVybVR5cGVkKiBhZGRDb21tYShUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1U
eXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmKTsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlv
biogYWRkQ29uc3RhbnRVbmlvbihDb25zdGFudFVuaW9uKiwgY29uc3QgVFR5cGUmLCBjb25zdCBU
U291cmNlTG9jJik7CisgICAgVEludGVybVR5cGVkKiBwcm9tb3RlQ29uc3RhbnRVbmlvbihUQmFz
aWNUeXBlLCBUSW50ZXJtQ29uc3RhbnRVbmlvbiopIDsKKyAgICBib29sIHBhcnNlQ29uc3RUcmVl
KGNvbnN0IFRTb3VyY2VMb2MmLCBUSW50ZXJtTm9kZSosIENvbnN0YW50VW5pb24qLCBUT3BlcmF0
b3IsIFRTeW1ib2xUYWJsZSYsIFRUeXBlLCBib29sIHNpbmdsZUNvbnN0YW50UGFyYW0gPSBmYWxz
ZSk7ICAgICAgICAKKyAgICBUSW50ZXJtTm9kZSogYWRkTG9vcChUTG9vcFR5cGUsIFRJbnRlcm1O
b2RlKiwgVEludGVybVR5cGVkKiwgVEludGVybVR5cGVkKiwgVEludGVybU5vZGUqLCBjb25zdCBU
U291cmNlTG9jJik7CisgICAgVEludGVybUJyYW5jaCogYWRkQnJhbmNoKFRPcGVyYXRvciwgY29u
c3QgVFNvdXJjZUxvYyYpOworICAgIFRJbnRlcm1CcmFuY2gqIGFkZEJyYW5jaChUT3BlcmF0b3Is
IFRJbnRlcm1UeXBlZCosIGNvbnN0IFRTb3VyY2VMb2MmKTsKKyAgICBUSW50ZXJtVHlwZWQqIGFk
ZFN3aXp6bGUoVFZlY3RvckZpZWxkcyYsIGNvbnN0IFRTb3VyY2VMb2MmKTsKKyAgICBib29sIHBv
c3RQcm9jZXNzKFRJbnRlcm1Ob2RlKik7CisgICAgdm9pZCByZW1vdmUoVEludGVybU5vZGUqKTsK
KyAgICB2b2lkIG91dHB1dFRyZWUoVEludGVybU5vZGUqKTsKKworcHJpdmF0ZToKKyAgICB2b2lk
IG9wZXJhdG9yPShUSW50ZXJtZWRpYXRlJik7IC8vIHByZXZlbnQgYXNzaWdubWVudHMKKworICAg
IFRJbmZvU2luayYgaW5mb1Npbms7Cit9OworCisjZW5kaWYgLy8gX0xPQ0FMX0lOVEVSTUVESUFU
RV9JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL29zaW5jbHVkZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3Ivb3NpbmNsdWRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzMwNjNkNjI0YTg3
MjE4NmM0ZTI3YTgyMjI0NzVhZGQzODhhNzM4MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL29zaW5jbHVkZS5oCkBAIC0w
LDAgKzEsNjYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX19PU0lOQ0xVREVfSAor
I2RlZmluZSBfX09TSU5DTFVERV9ICisKKy8vCisvLyBUaGlzIGZpbGUgY29udGFpbnMgY29udGFp
bnMgb3Mtc3BlY2lmaWMgZGF0YXR5cGVzIGFuZAorLy8gZGVjbGFyZXMgYW55IG9zLXNwZWNpZmlj
IGZ1bmN0aW9ucy4KKy8vCisKKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfV0lONjQp
CisjZGVmaW5lIEFOR0xFX09TX1dJTgorI2VsaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmlu
ZWQoX19saW51eF9fKSB8fCBcCisgICAgICBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVk
KF9fT3BlbkJTRF9fKSB8fCBcCisgICAgICBkZWZpbmVkKF9fTmV0QlNEX18pIHx8IGRlZmluZWQo
X19EcmFnb25GbHlfXykgfHwgXAorICAgICAgZGVmaW5lZChfX3N1bikgfHwgZGVmaW5lZChBTkRS
T0lEKSB8fCBcCisgICAgICBkZWZpbmVkKF9fR0xJQkNfXykgfHwgZGVmaW5lZChfX0dOVV9fKSB8
fCBcCisgICAgICBkZWZpbmVkKF9fUU5YX18pCisjZGVmaW5lIEFOR0xFX09TX1BPU0lYCisjZWxz
ZQorI2Vycm9yIFVuc3VwcG9ydGVkIHBsYXRmb3JtLgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEFO
R0xFX09TX1dJTikKKyNkZWZpbmUgU1RSSUNUCisjZGVmaW5lIFZDX0VYVFJBTEVBTiAxCisjaW5j
bHVkZSA8d2luZG93cy5oPgorI2VsaWYgZGVmaW5lZChBTkdMRV9PU19QT1NJWCkKKyNpbmNsdWRl
IDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8c2VtYXBob3JlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4K
KyNlbmRpZiAgLy8gQU5HTEVfT1NfV0lOCisKKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvY29tcGlsZXJkZWJ1Zy5oIgorCisvLworLy8gVGhyZWFkIExvY2FsIFN0b3JhZ2UgT3BlcmF0
aW9ucworLy8KKyNpZiBkZWZpbmVkKEFOR0xFX09TX1dJTikKK3R5cGVkZWYgRFdPUkQgT1NfVExT
SW5kZXg7CisjZGVmaW5lIE9TX0lOVkFMSURfVExTX0lOREVYIChUTFNfT1VUX09GX0lOREVYRVMp
CisjZWxpZiBkZWZpbmVkKEFOR0xFX09TX1BPU0lYKQordHlwZWRlZiBwdGhyZWFkX2tleV90IE9T
X1RMU0luZGV4OworI2RlZmluZSBPU19JTlZBTElEX1RMU19JTkRFWCAoc3RhdGljX2Nhc3Q8T1Nf
VExTSW5kZXg+KC0xKSkKKyNlbmRpZiAgLy8gQU5HTEVfT1NfV0lOCisKK09TX1RMU0luZGV4IE9T
X0FsbG9jVExTSW5kZXgoKTsKK2Jvb2wgT1NfU2V0VExTVmFsdWUoT1NfVExTSW5kZXggbkluZGV4
LCB2b2lkICpscHZWYWx1ZSk7Citib29sIE9TX0ZyZWVUTFNJbmRleChPU19UTFNJbmRleCBuSW5k
ZXgpOworCitpbmxpbmUgdm9pZCogT1NfR2V0VExTVmFsdWUoT1NfVExTSW5kZXggbkluZGV4KQor
eworICAgIEFTU0VSVChuSW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpOworI2lmIGRlZmlu
ZWQoQU5HTEVfT1NfV0lOKQorICAgIHJldHVybiBUbHNHZXRWYWx1ZShuSW5kZXgpOworI2VsaWYg
ZGVmaW5lZChBTkdMRV9PU19QT1NJWCkKKyAgICByZXR1cm4gcHRocmVhZF9nZXRzcGVjaWZpYyhu
SW5kZXgpOworI2VuZGlmICAvLyBBTkdMRV9PU19XSU4KK30KKworI2VuZGlmIC8vIF9fT1NJTkNM
VURFX0gKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL29zc291cmNlX3Bvc2l4LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL29zc291cmNlX3Bvc2l4LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MGEz
NzU3NDQ0MWMwMTM0NmU3MzFlZTcyNTMyMWViMTVlY2UyZGMxCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Ivb3Nzb3VyY2Vf
cG9zaXguY3BwCkBAIC0wLDAgKzEsNjQgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vCisvLyBU
aGlzIGZpbGUgY29udGFpbnMgdGhlIHBvc2l4IHNwZWNpZmljIGZ1bmN0aW9ucworLy8KKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL29zaW5jbHVkZS5oIgorCisjaWYgIWRlZmluZWQoQU5H
TEVfT1NfUE9TSVgpCisjZXJyb3IgVHJ5aW5nIHRvIGJ1aWxkIGEgcG9zaXggc3BlY2lmaWMgZmls
ZSBpbiBhIG5vbi1wb3NpeCBidWlsZC4KKyNlbmRpZgorCisvLworLy8gVGhyZWFkIExvY2FsIFN0
b3JhZ2UgT3BlcmF0aW9ucworLy8KK09TX1RMU0luZGV4IE9TX0FsbG9jVExTSW5kZXgoKQorewor
ICAgIHB0aHJlYWRfa2V5X3QgcFBvb2xJbmRleDsKKworICAgIC8vCisgICAgLy8gQ3JlYXRlIGds
b2JhbCBwb29sIGtleS4KKyAgICAvLworICAgIGlmICgocHRocmVhZF9rZXlfY3JlYXRlKCZwUG9v
bEluZGV4LCBOVUxMKSkgIT0gMCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiT1NfQWxsb2NUTFNJ
bmRleCgpOiBVbmFibGUgdG8gYWxsb2NhdGUgVGhyZWFkIExvY2FsIFN0b3JhZ2UiKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0dXJuIHBQb29s
SW5kZXg7CisgICAgfQorfQorCisKK2Jvb2wgT1NfU2V0VExTVmFsdWUoT1NfVExTSW5kZXggbklu
ZGV4LCB2b2lkICpscHZWYWx1ZSkKK3sKKyAgICBpZiAobkluZGV4ID09IE9TX0lOVkFMSURfVExT
X0lOREVYKSB7CisgICAgICAgIGFzc2VydCgwICYmICJPU19TZXRUTFNWYWx1ZSgpOiBJbnZhbGlk
IFRMUyBJbmRleCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHB0
aHJlYWRfc2V0c3BlY2lmaWMobkluZGV4LCBscHZWYWx1ZSkgPT0gMCkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7Cit9CisKKworYm9vbCBPU19G
cmVlVExTSW5kZXgoT1NfVExTSW5kZXggbkluZGV4KQoreworICAgIGlmIChuSW5kZXggPT0gT1Nf
SU5WQUxJRF9UTFNfSU5ERVgpIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIk9TX1NldFRMU1ZhbHVl
KCk6IEludmFsaWQgVExTIEluZGV4Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICAvLworICAgIC8vIERlbGV0ZSB0aGUgZ2xvYmFsIHBvb2wga2V5LgorICAgIC8vCisgICAg
aWYgKHB0aHJlYWRfa2V5X2RlbGV0ZShuSW5kZXgpID09IDApCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Ivb3Nzb3VyY2Vfd2luLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL29zc291
cmNlX3dpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmNjNTg3MWI3MWQzZWVmZDIxNTYxOTM2NWVhYWNkNjI1
NTA4Yjg4MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL29zc291cmNlX3dpbi5jcHAKQEAgLTAsMCArMSw1NyBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Ivb3NpbmNsdWRl
LmgiCisvLworLy8gVGhpcyBmaWxlIGNvbnRhaW5zIGNvbnRhaW5zIHRoZSB3aW5kb3cncyBzcGVj
aWZpYyBmdW5jdGlvbnMKKy8vCisKKyNpZiAhZGVmaW5lZChBTkdMRV9PU19XSU4pCisjZXJyb3Ig
VHJ5aW5nIHRvIGJ1aWxkIGEgd2luZG93cyBzcGVjaWZpYyBmaWxlIGluIGEgbm9uIHdpbmRvd3Mg
YnVpbGQuCisjZW5kaWYKKworCisvLworLy8gVGhyZWFkIExvY2FsIFN0b3JhZ2UgT3BlcmF0aW9u
cworLy8KK09TX1RMU0luZGV4IE9TX0FsbG9jVExTSW5kZXgoKQoreworCURXT1JEIGR3SW5kZXgg
PSBUbHNBbGxvYygpOworCWlmIChkd0luZGV4ID09IFRMU19PVVRfT0ZfSU5ERVhFUykgeworCQlh
c3NlcnQoMCAmJiAiT1NfQWxsb2NUTFNJbmRleCgpOiBVbmFibGUgdG8gYWxsb2NhdGUgVGhyZWFk
IExvY2FsIFN0b3JhZ2UiKTsKKwkJcmV0dXJuIE9TX0lOVkFMSURfVExTX0lOREVYOworCX0KKwor
CXJldHVybiBkd0luZGV4OworfQorCisKK2Jvb2wgT1NfU2V0VExTVmFsdWUoT1NfVExTSW5kZXgg
bkluZGV4LCB2b2lkICpscHZWYWx1ZSkKK3sKKwlpZiAobkluZGV4ID09IE9TX0lOVkFMSURfVExT
X0lOREVYKSB7CisJCWFzc2VydCgwICYmICJPU19TZXRUTFNWYWx1ZSgpOiBJbnZhbGlkIFRMUyBJ
bmRleCIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKFRsc1NldFZhbHVlKG5JbmRleCwg
bHB2VmFsdWUpKQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlCisJCXJldHVybiBmYWxzZTsKK30KKwor
Citib29sIE9TX0ZyZWVUTFNJbmRleChPU19UTFNJbmRleCBuSW5kZXgpCit7CisJaWYgKG5JbmRl
eCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworCQlhc3NlcnQoMCAmJiAiT1NfU2V0VExTVmFs
dWUoKTogSW52YWxpZCBUTFMgSW5kZXgiKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChU
bHNGcmVlKG5JbmRleCkpCisJCXJldHVybiB0cnVlOworCWVsc2UKKwkJcmV0dXJuIGZhbHNlOwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvcGFyc2VDb25zdC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9wYXJzZUNvbnN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNTlmMGJlOWQ4YzAwNmZj
OTIyMmM0OThmMDRlNmJlNGY2NWIxNTc4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvcGFyc2VDb25zdC5jcHAKQEAgLTAs
MCArMSwyNDUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1BhcnNlQ29udGV4dC5oIgorCisvLworLy8gVXNlIHRoaXMgY2xhc3MgdG8gY2Fycnkg
YWxvbmcgZGF0YSBmcm9tIG5vZGUgdG8gbm9kZSBpbiAKKy8vIHRoZSB0cmF2ZXJzYWwKKy8vCitj
bGFzcyBUQ29uc3RUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7CitwdWJsaWM6
CisgICAgVENvbnN0VHJhdmVyc2VyKENvbnN0YW50VW5pb24qIGNVbmlvbiwgYm9vbCBzaW5nbGVD
b25zdFBhcmFtLCBUT3BlcmF0b3IgY29uc3RydWN0VHlwZSwgVEluZm9TaW5rJiBzaW5rLCBUU3lt
Ym9sVGFibGUmIHN5bVRhYmxlLCBUVHlwZSYgdCkKKyAgICAgICAgOiBlcnJvcihmYWxzZSksCisg
ICAgICAgICAgaW5kZXgoMCksCisgICAgICAgICAgdW5pb25BcnJheShjVW5pb24pLAorICAgICAg
ICAgIHR5cGUodCksCisgICAgICAgICAgY29uc3RydWN0b3JUeXBlKGNvbnN0cnVjdFR5cGUpLAor
ICAgICAgICAgIHNpbmdsZUNvbnN0YW50UGFyYW0oc2luZ2xlQ29uc3RQYXJhbSksCisgICAgICAg
ICAgaW5mb1Npbmsoc2luayksCisgICAgICAgICAgc3ltYm9sVGFibGUoc3ltVGFibGUpLAorICAg
ICAgICAgIHNpemUoMCksCisgICAgICAgICAgaXNNYXRyaXgoZmFsc2UpLAorICAgICAgICAgIG1h
dHJpeFNpemUoMCkgeworICAgIH0KKworICAgIGJvb2wgZXJyb3I7CisKK3Byb3RlY3RlZDoKKyAg
ICB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKKyAgICB2b2lkIHZpc2l0Q29uc3Rh
bnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiopOworICAgIGJvb2wgdmlzaXRCaW5hcnkoVmlz
aXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKyAgICBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlz
aXQsIFRJbnRlcm1VbmFyeSopOworICAgIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQs
IFRJbnRlcm1TZWxlY3Rpb24qKTsKKyAgICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0
LCBUSW50ZXJtQWdncmVnYXRlKik7CisgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1Mb29wKik7CisgICAgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJy
YW5jaCopOworCisgICAgc2l6ZV90IGluZGV4OworICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJy
YXk7CisgICAgVFR5cGUgdHlwZTsKKyAgICBUT3BlcmF0b3IgY29uc3RydWN0b3JUeXBlOworICAg
IGJvb2wgc2luZ2xlQ29uc3RhbnRQYXJhbTsKKyAgICBUSW5mb1NpbmsmIGluZm9TaW5rOworICAg
IFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGU7CisgICAgc2l6ZV90IHNpemU7IC8vIHNpemUgb2Yg
dGhlIGNvbnN0cnVjdG9yICggNCBmb3IgdmVjNCkKKyAgICBib29sIGlzTWF0cml4OworICAgIHNp
emVfdCBtYXRyaXhTaXplOyAvLyBkaW1lbnNpb24gb2YgdGhlIG1hdHJpeCAobm9taW5hbCBzaXpl
IGFuZCBub3QgdGhlIGluc3RhbmNlIHNpemUpCit9OworCisvLworLy8gVGhlIHJlc3Qgb2YgdGhl
IGZpbGUgYXJlIHRoZSB0cmF2ZXJzYWwgZnVuY3Rpb25zLiAgVGhlIGxhc3Qgb25lCisvLyBpcyB0
aGUgb25lIHRoYXQgc3RhcnRzIHRoZSB0cmF2ZXJzYWwuCisvLworLy8gUmV0dXJuIHRydWUgZnJv
bSBpbnRlcmlvciBub2RlcyB0byBoYXZlIHRoZSBleHRlcm5hbCB0cmF2ZXJzYWwKKy8vIGNvbnRp
bnVlIG9uIHRvIGNoaWxkcmVuLiAgSWYgeW91IHByb2Nlc3MgY2hpbGRyZW4geW91cnNlbGYsCisv
LyByZXR1cm4gZmFsc2UuCisvLworCit2b2lkIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRTeW1ib2wo
VEludGVybVN5bWJvbCogbm9kZSkKK3sKKyAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZp
eEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIlN5bWJvbCBOb2RlIGZvdW5kIGluIGNv
bnN0YW50IGNvbnN0cnVjdG9yIik7CisgICAgcmV0dXJuOworCit9CisKK2Jvb2wgVENvbnN0VHJh
dmVyc2VyOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSogbm9kZSkKK3sK
KyAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IG5vZGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIo
KTsKKyAgICAKKyAgICBpZiAocXVhbGlmaWVyICE9IEV2cUNvbnN0KSB7CisgICAgICAgIFRTdHJp
bmcgYnVmOworICAgICAgICBidWYuYXBwZW5kKCInY29uc3RydWN0b3InIDogYXNzaWduaW5nIG5v
bi1jb25zdGFudCB0byAiKTsKKyAgICAgICAgYnVmLmFwcGVuZCh0eXBlLmdldENvbXBsZXRlU3Ry
aW5nKCkpOworICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEVycm9yLCBub2Rl
LT5nZXRMaW5lKCksIGJ1Zi5jX3N0cigpKTsKKyAgICAgICAgZXJyb3IgPSB0cnVlOworICAgICAg
ICByZXR1cm4gZmFsc2U7ICAKKyAgICB9CisKKyAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQmluYXJ5IE5vZGUgZm91bmQgaW4g
Y29uc3RhbnQgY29uc3RydWN0b3IiKTsKKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgVENvbnN0VHJhdmVyc2VyOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkq
IG5vZGUpCit7CisgICAgVFN0cmluZyBidWY7CisgICAgYnVmLmFwcGVuZCgiJ2NvbnN0cnVjdG9y
JyA6IGFzc2lnbmluZyBub24tY29uc3RhbnQgdG8gIik7CisgICAgYnVmLmFwcGVuZCh0eXBlLmdl
dENvbXBsZXRlU3RyaW5nKCkpOworICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4RXJy
b3IsIG5vZGUtPmdldExpbmUoKSwgYnVmLmNfc3RyKCkpOworICAgIGVycm9yID0gdHJ1ZTsKKyAg
ICByZXR1cm4gZmFsc2U7ICAKK30KKworYm9vbCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0QWdncmVn
YXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQoreworICAgIGlmICghbm9k
ZS0+aXNDb25zdHJ1Y3RvcigpICYmIG5vZGUtPmdldE9wKCkgIT0gRU9wQ29tbWEpIHsKKyAgICAg
ICAgVFN0cmluZyBidWY7CisgICAgICAgIGJ1Zi5hcHBlbmQoIidjb25zdHJ1Y3RvcicgOiBhc3Np
Z25pbmcgbm9uLWNvbnN0YW50IHRvICIpOworICAgICAgICBidWYuYXBwZW5kKHR5cGUuZ2V0Q29t
cGxldGVTdHJpbmcoKSk7CisgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4RXJy
b3IsIG5vZGUtPmdldExpbmUoKSwgYnVmLmNfc3RyKCkpOworICAgICAgICBlcnJvciA9IHRydWU7
CisgICAgICAgIHJldHVybiBmYWxzZTsgIAorICAgIH0KKworICAgIGlmIChub2RlLT5nZXRTZXF1
ZW5jZSgpLnNpemUoKSA9PSAwKSB7CisgICAgICAgIGVycm9yID0gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgZmxhZyA9IG5vZGUtPmdldFNlcXVlbmNlKCku
c2l6ZSgpID09IDEgJiYgbm9kZS0+Z2V0U2VxdWVuY2UoKVswXS0+Z2V0QXNUeXBlZCgpLT5nZXRB
c0NvbnN0YW50VW5pb24oKTsKKyAgICBpZiAoZmxhZykgCisgICAgeworICAgICAgICBzaW5nbGVD
b25zdGFudFBhcmFtID0gdHJ1ZTsgCisgICAgICAgIGNvbnN0cnVjdG9yVHlwZSA9IG5vZGUtPmdl
dE9wKCk7CisgICAgICAgIHNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOwor
CisgICAgICAgIGlmIChub2RlLT5nZXRUeXBlKCkuaXNNYXRyaXgoKSkgeworICAgICAgICAgICAg
aXNNYXRyaXggPSB0cnVlOworICAgICAgICAgICAgbWF0cml4U2l6ZSA9IG5vZGUtPmdldFR5cGUo
KS5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICB9CisgICAgfSAgICAgICAKKworICAgIGZvciAo
VEludGVybVNlcXVlbmNlOjppdGVyYXRvciBwID0gbm9kZS0+Z2V0U2VxdWVuY2UoKS5iZWdpbigp
OyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCAhPSBub2RlLT5nZXRTZXF1
ZW5jZSgpLmVuZCgpOyBwKyspIHsKKworICAgICAgICBpZiAobm9kZS0+Z2V0T3AoKSA9PSBFT3BD
b21tYSkKKyAgICAgICAgICAgIGluZGV4ID0gMDsgICAgICAgICAgIAorCisgICAgICAgICgqcCkt
PnRyYXZlcnNlKHRoaXMpOworICAgIH0gICAKKyAgICBpZiAoZmxhZykgCisgICAgeworICAgICAg
ICBzaW5nbGVDb25zdGFudFBhcmFtID0gZmFsc2U7ICAgCisgICAgICAgIGNvbnN0cnVjdG9yVHlw
ZSA9IEVPcE51bGw7CisgICAgICAgIHNpemUgPSAwOworICAgICAgICBpc01hdHJpeCA9IGZhbHNl
OworICAgICAgICBtYXRyaXhTaXplID0gMDsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRl
cm1TZWxlY3Rpb24qIG5vZGUpCit7CisgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJ
bnRlcm5hbEVycm9yLCBub2RlLT5nZXRMaW5lKCksICJTZWxlY3Rpb24gTm9kZSBmb3VuZCBpbiBj
b25zdGFudCBjb25zdHJ1Y3RvciIpOworICAgIGVycm9yID0gdHJ1ZTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3ZvaWQgVENvbnN0VHJhdmVyc2VyOjp2aXNpdENvbnN0YW50VW5pb24oVEludGVy
bUNvbnN0YW50VW5pb24qIG5vZGUpCit7CisgICAgaWYgKCFub2RlLT5nZXRVbmlvbkFycmF5UG9p
bnRlcigpKQorICAgIHsKKyAgICAgICAgLy8gVGhlIGNvbnN0YW50IHdhcyBub3QgaW5pdGlhbGl6
ZWQsIHRoaXMgc2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIGxvZ2dlZAorICAgICAgICBhc3NlcnQo
aW5mb1NpbmsuaW5mby5zaXplKCkgIT0gMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBDb25zdGFudFVuaW9uKiBsZWZ0VW5pb25BcnJheSA9IHVuaW9uQXJyYXk7CisgICAgc2l6ZV90
IGluc3RhbmNlU2l6ZSA9IHR5cGUuZ2V0T2JqZWN0U2l6ZSgpOworCisgICAgaWYgKGluZGV4ID49
IGluc3RhbmNlU2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFzaW5nbGVDb25zdGFu
dFBhcmFtKSB7CisgICAgICAgIHNpemVfdCBzaXplID0gbm9kZS0+Z2V0VHlwZSgpLmdldE9iamVj
dFNpemUoKTsKKyAgICAKKyAgICAgICAgQ29uc3RhbnRVbmlvbiAqcmlnaHRVbmlvbkFycmF5ID0g
bm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBpbnN0YW5jZVNpemUp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaW5k
ZXhdID0gcmlnaHRVbmlvbkFycmF5W2ldOworCisgICAgICAgICAgICAoaW5kZXgpKys7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBzaXplX3QgdG90YWxTaXplID0gaW5kZXggKyBz
aXplOworICAgICAgICBDb25zdGFudFVuaW9uICpyaWdodFVuaW9uQXJyYXkgPSBub2RlLT5nZXRV
bmlvbkFycmF5UG9pbnRlcigpOworICAgICAgICBpZiAoIWlzTWF0cml4KSB7CisgICAgICAgICAg
ICBzaXplX3QgY291bnQgPSAwOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGluZGV4OyBp
IDwgdG90YWxTaXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoaSA+PSBpbnN0YW5jZVNp
emUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIGxlZnRV
bmlvbkFycmF5W2ldID0gcmlnaHRVbmlvbkFycmF5W2NvdW50XTsKKworICAgICAgICAgICAgICAg
IChpbmRleCkrKzsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+
Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKSA+IDEpCisgICAgICAgICAgICAgICAgICAgIGNvdW50
Kys7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7ICAvLyBmb3IgbWF0cml4IGNvbnN0
cnVjdG9ycworICAgICAgICAgICAgc2l6ZV90IGNvdW50ID0gMDsKKyAgICAgICAgICAgIHNpemVf
dCBlbGVtZW50ID0gaW5kZXg7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gaW5kZXg7IGkg
PCB0b3RhbFNpemU7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChpID49IGluc3RhbmNlU2l6
ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmIChlbGVt
ZW50IC0gaSA9PSAwIHx8IChpIC0gZWxlbWVudCkgJSAobWF0cml4U2l6ZSArIDEpID09IDAgKQor
ICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXSA9IHJpZ2h0VW5pb25BcnJheVtj
b3VudF07CisgICAgICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgICAgICAgICAgbGVmdFVu
aW9uQXJyYXlbaV0uc2V0RkNvbnN0KDAuMGYpOworCisgICAgICAgICAgICAgICAgKGluZGV4KSsr
OworCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCkg
PiAxKQorICAgICAgICAgICAgICAgICAgICBjb3VudCsrOyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBUQ29uc3RUcmF2ZXJzZXI6OnZp
c2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqIG5vZGUpCit7CisgICAgaW5mb1Npbmsu
aW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRMaW5lKCksICJMb29w
IE5vZGUgZm91bmQgaW4gY29uc3RhbnQgY29uc3RydWN0b3IiKTsKKyAgICBlcnJvciA9IHRydWU7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRCcmFu
Y2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqIG5vZGUpCit7CisgICAgaW5mb1NpbmsuaW5m
by5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRMaW5lKCksICJCcmFuY2gg
Tm9kZSBmb3VuZCBpbiBjb25zdGFudCBjb25zdHJ1Y3RvciIpOworICAgIGVycm9yID0gdHJ1ZTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vCisvLyBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBvbmUg
dG8gY2FsbCBleHRlcm5hbGx5IHRvIHN0YXJ0IHRoZSB0cmF2ZXJzYWwuCisvLyBJbmRpdmlkdWFs
IGZ1bmN0aW9ucyBjYW4gYmUgaW5pdGlhbGl6ZWQgdG8gMCB0byBza2lwIHByb2Nlc3Npbmcgb2Yg
dGhhdAorLy8gdHlwZSBvZiBub2RlLiAgSXQncyBjaGlsZHJlbiB3aWxsIHN0aWxsIGJlIHByb2Nl
c3NlZC4KKy8vCitib29sIFRJbnRlcm1lZGlhdGU6OnBhcnNlQ29uc3RUcmVlKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxpbmUsIFRJbnRlcm1Ob2RlKiByb290LCBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5
LCBUT3BlcmF0b3IgY29uc3RydWN0b3JUeXBlLCBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBU
VHlwZSB0LCBib29sIHNpbmdsZUNvbnN0YW50UGFyYW0pCit7CisgICAgaWYgKHJvb3QgPT0gMCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVENvbnN0VHJhdmVyc2VyIGl0KHVuaW9uQXJy
YXksIHNpbmdsZUNvbnN0YW50UGFyYW0sIGNvbnN0cnVjdG9yVHlwZSwgaW5mb1NpbmssIHN5bWJv
bFRhYmxlLCB0KTsKKworICAgIHJvb3QtPnRyYXZlcnNlKCZpdCk7CisgICAgaWYgKGl0LmVycm9y
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBmYWxzZTsK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOWYzZjQ5ZWYzOGVkOTljZWI1MGE3
ODk3MzJhMDgzMTE4NjU0OWRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmcuY3BwCkBAIC0wLDAgKzEsMTI3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1BhcnNlQ29udGV4dC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvZGVw
Z3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIgorCitSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nOjpSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nKFRJbmZvU2lu
a0Jhc2UmIHNpbmspCisgICAgOiBtU2luayhzaW5rKQorICAgICwgbU51bUVycm9ycygwKQorewor
ICAgIC8vIFNhbXBsaW5nIG9wcyBmb3VuZCBvbmx5IGluIGZyYWdtZW50IHNoYWRlcnMuCisgICAg
bVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEKHMyMTt2ZjI7ZjE7Iik7CisgICAgbVNhbXBs
aW5nT3BzLmluc2VydCgidGV4dHVyZTJEUHJvaihzMjE7dmYzO2YxOyIpOworICAgIG1TYW1wbGlu
Z09wcy5pbnNlcnQoInRleHR1cmUyRFByb2ooczIxO3ZmNDtmMTsiKTsKKyAgICBtU2FtcGxpbmdP
cHMuaW5zZXJ0KCJ0ZXh0dXJlQ3ViZShzQzE7dmYzO2YxOyIpOworICAgIC8vIFNhbXBsaW5nIG9w
cyBmb3VuZCBpbiBib3RoIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycy4KKyAgICBtU2FtcGxp
bmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkQoczIxO3ZmMjsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5z
ZXJ0KCJ0ZXh0dXJlMkRQcm9qKHMyMTt2ZjM7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgi
dGV4dHVyZTJEUHJvaihzMjE7dmY0OyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1
cmVDdWJlKHNDMTt2ZjM7Iik7CisgICAgLy8gU2FtcGxpbmcgb3BzIHByb3ZpZGVkIGJ5IE9FU19F
R0xfaW1hZ2VfZXh0ZXJuYWwuCisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEKDE7
dmYyOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFByb2ooMTt2ZjM7Iik7
CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUHJvaigxO3ZmNDsiKTsKKyAgICAv
LyBTYW1wbGluZyBvcHMgcHJvdmlkZWQgYnkgQVJCX3RleHR1cmVfcmVjdGFuZ2xlLgorICAgIG1T
YW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFJlY3QoMTt2ZjI7Iik7CisgICAgbVNhbXBsaW5n
T3BzLmluc2VydCgidGV4dHVyZTJEUmVjdFByb2ooMTt2ZjM7Iik7CisgICAgbVNhbXBsaW5nT3Bz
Lmluc2VydCgidGV4dHVyZTJEUmVjdFByb2ooMTt2ZjQ7Iik7Cit9CisKKy8vIEZJWE1FKG12dWpv
dmljKTogV2UgZG8gbm90IGtub3cgaWYgdGhlIGV4ZWN1dGlvbiB0aW1lIG9mIGJ1aWx0LWluIG9w
ZXJhdGlvbnMgbGlrZSBzaW4sIHBvdywgZXRjLgorLy8gY2FuIHZhcnkgYmFzZWQgb24gdGhlIHZh
bHVlIG9mIHRoZSBpbnB1dCBhcmd1bWVudHMuIElmIHNvLCB3ZSBzaG91bGQgcmVzdHJpY3QgdGhv
c2UgYXMgd2VsbC4KK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6ZW5mb3JjZVJl
c3RyaWN0aW9ucyhjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCkKK3sKKyAgICBtTnVtRXJy
b3JzID0gMDsKKworICAgIC8vIEZJWE1FKG12dWpvdmljKTogVGhlIGRlcGVuZGVuY3kgZ3JhcGgg
ZG9lcyBub3Qgc3VwcG9ydCB1c2VyIGRlZmluZWQgZnVuY3Rpb24gY2FsbHMgcmlnaHQgbm93LAor
ICAgIC8vIHNvIHdlIGdlbmVyYXRlIGVycm9ycyBmb3IgdGhlbS4KKyAgICB2YWxpZGF0ZVVzZXJE
ZWZpbmVkRnVuY3Rpb25DYWxsVXNhZ2UoZ3JhcGgpOworCisgICAgLy8gU3RhcnRpbmcgZnJvbSBl
YWNoIHNhbXBsZXIsIHRyYXZlcnNlIHRoZSBkZXBlbmRlbmN5IGdyYXBoIGFuZCBnZW5lcmF0ZSBh
biBlcnJvciBlYWNoIHRpbWUgd2UKKyAgICAvLyBoaXQgYSBub2RlIHdoZXJlIHNhbXBsZXIgZGVw
ZW5kZW50IHZhbHVlcyBhcmUgbm90IGFsbG93ZWQuCisgICAgZm9yIChUR3JhcGhTeW1ib2xWZWN0
b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBncmFwaC5iZWdpblNhbXBsZXJTeW1ib2xzKCk7Cisg
ICAgICAgICBpdGVyICE9IGdyYXBoLmVuZFNhbXBsZXJTeW1ib2xzKCk7CisgICAgICAgICArK2l0
ZXIpCisgICAgeworICAgICAgICBUR3JhcGhTeW1ib2wqIHNhbXBsZXJTeW1ib2wgPSAqaXRlcjsK
KyAgICAgICAgY2xlYXJWaXNpdGVkKCk7CisgICAgICAgIHNhbXBsZXJTeW1ib2wtPnRyYXZlcnNl
KHRoaXMpOworICAgIH0KK30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2
YWxpZGF0ZVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxsVXNhZ2UoY29uc3QgVERlcGVuZGVuY3lHcmFw
aCYgZ3JhcGgpCit7CisgICAgZm9yIChURnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9pdGVyYXRv
ciBpdGVyID0gZ3JhcGguYmVnaW5Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMoKTsKKyAgICAgICAg
IGl0ZXIgIT0gZ3JhcGguZW5kVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKCk7CisgICAgICAgICAr
K2l0ZXIpCisgICAgeworICAgICAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCA9
ICppdGVyOworICAgICAgICBiZWdpbkVycm9yKGZ1bmN0aW9uQ2FsbC0+Z2V0SW50ZXJtRnVuY3Rp
b25DYWxsKCkpOworICAgICAgICBtU2luayA8PCAiQSBjYWxsIHRvIGEgdXNlciBkZWZpbmVkIGZ1
bmN0aW9uIGlzIG5vdCBwZXJtaXR0ZWQuXG4iOworICAgIH0KK30KKwordm9pZCBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nOjpiZWdpbkVycm9yKGNvbnN0IFRJbnRlcm1Ob2RlKiBub2RlKQor
eworICAgICsrbU51bUVycm9yczsKKyAgICBtU2luay5wcmVmaXgoRVByZWZpeEVycm9yKTsKKyAg
ICBtU2luay5sb2NhdGlvbihub2RlLT5nZXRMaW5lKCkpOworfQorCitib29sIFJlc3RyaWN0RnJh
Z21lbnRTaGFkZXJUaW1pbmc6OmlzU2FtcGxpbmdPcChjb25zdCBUSW50ZXJtQWdncmVnYXRlKiBp
bnRlcm1GdW5jdGlvbkNhbGwpIGNvbnN0Cit7CisgICAgcmV0dXJuICFpbnRlcm1GdW5jdGlvbkNh
bGwtPmlzVXNlckRlZmluZWQoKSAmJgorICAgICAgICAgICBtU2FtcGxpbmdPcHMuZmluZChpbnRl
cm1GdW5jdGlvbkNhbGwtPmdldE5hbWUoKSkgIT0gbVNhbXBsaW5nT3BzLmVuZCgpOworfQorCit2
b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0QXJndW1lbnQoVEdyYXBoQXJn
dW1lbnQqIHBhcmFtZXRlcikKK3sKKyAgICAvLyBUZXh0dXJlIGNhY2hlIGFjY2VzcyB0aW1lIG1p
Z2h0IGxlYWsgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLgorICAgIC8vIFRodXMsIHdlIHJlc3RyaWN0
IHNhbXBsZXIgZGVwZW5kZW50IHZhbHVlcyBmcm9tIGFmZmVjdGluZyB0aGUgY29vcmRpbmF0ZSBv
ciBMT0QgYmlhcyBvZiBhCisgICAgLy8gc2FtcGxpbmcgb3BlcmF0aW9uLgorICAgIGlmIChpc1Nh
bXBsaW5nT3AocGFyYW1ldGVyLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKSkpIHsKKyAgICAgICAg
c3dpdGNoIChwYXJhbWV0ZXItPmdldEFyZ3VtZW50TnVtYmVyKCkpIHsKKyAgICAgICAgICAgIGNh
c2UgMToKKyAgICAgICAgICAgICAgICAvLyBTZWNvbmQgYXJndW1lbnQgKGNvb3JkKQorICAgICAg
ICAgICAgICAgIGJlZ2luRXJyb3IocGFyYW1ldGVyLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKSk7
CisgICAgICAgICAgICAgICAgbVNpbmsgPDwgIkFuIGV4cHJlc3Npb24gZGVwZW5kZW50IG9uIGEg
c2FtcGxlciBpcyBub3QgcGVybWl0dGVkIHRvIGJlIHRoZSIKKyAgICAgICAgICAgICAgICAgICAg
ICA8PCAiIGNvb3JkaW5hdGUgYXJndW1lbnQgb2YgYSBzYW1wbGluZyBvcGVyYXRpb24uXG4iOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAg
ICAgIC8vIFRoaXJkIGFyZ3VtZW50IChiaWFzKQorICAgICAgICAgICAgICAgIGJlZ2luRXJyb3Io
cGFyYW1ldGVyLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKSk7CisgICAgICAgICAgICAgICAgbVNp
bmsgPDwgIkFuIGV4cHJlc3Npb24gZGVwZW5kZW50IG9uIGEgc2FtcGxlciBpcyBub3QgcGVybWl0
dGVkIHRvIGJlIHRoZSIKKyAgICAgICAgICAgICAgICAgICAgICA8PCAiIGJpYXMgYXJndW1lbnQg
b2YgYSBzYW1wbGluZyBvcGVyYXRpb24uXG4iOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAvLyBGaXJzdCBhcmd1bWVudCAoc2Ft
cGxlcikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9p
ZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdFNlbGVjdGlvbihUR3JhcGhTZWxl
Y3Rpb24qIHNlbGVjdGlvbikKK3sKKyAgICBiZWdpbkVycm9yKHNlbGVjdGlvbi0+Z2V0SW50ZXJt
U2VsZWN0aW9uKCkpOworICAgIG1TaW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBh
IHNhbXBsZXIgaXMgbm90IHBlcm1pdHRlZCBpbiBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudC5cbiI7
Cit9CisKK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRMb29wKFRHcmFw
aExvb3AqIGxvb3ApCit7CisgICAgYmVnaW5FcnJvcihsb29wLT5nZXRJbnRlcm1Mb29wKCkpOwor
ICAgIG1TaW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90
IHBlcm1pdHRlZCBpbiBhIGxvb3AgY29uZGl0aW9uLlxuIjsKK30KKwordm9pZCBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2lj
YWxPcCkKK3sKKyAgICBiZWdpbkVycm9yKGxvZ2ljYWxPcC0+Z2V0SW50ZXJtTG9naWNhbE9wKCkp
OworICAgIG1TaW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIgaXMg
bm90IHBlcm1pdHRlZCBvbiB0aGUgbGVmdCBoYW5kIHNpZGUgb2YgYSBsb2dpY2FsICIKKyAgICAg
ICAgICA8PCBsb2dpY2FsT3AtPmdldE9wU3RyaW5nKCkKKyAgICAgICAgICA8PCAiIG9wZXJhdG9y
LlxuIjsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMyM2NiNjJkOGEzODZlMjVhZTAw
NTBhZTQyZTkxMzRjODA1NzYxOGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZy5oCkBAIC0wLDAgKzEsNDAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENP
TVBJTEVSX1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCisjZGVmaW5l
IENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCisKKyNp
bmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGguaCIKKworY2xhc3MgVEluZm9TaW5rQmFzZTsKKworY2xhc3Mg
UmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZyA6IFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIg
eworcHVibGljOgorICAgIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcoVEluZm9TaW5rQmFz
ZSYgc2luayk7CisgICAgdm9pZCBlbmZvcmNlUmVzdHJpY3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5
R3JhcGgmIGdyYXBoKTsKKyAgICBpbnQgbnVtRXJyb3JzKCkgY29uc3QgeyByZXR1cm4gbU51bUVy
cm9yczsgfQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQq
IHBhcmFtZXRlcik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVj
dGlvbiogc2VsZWN0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRMb29wKFRHcmFwaExvb3Aq
IGxvb3ApOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3Aq
IGxvZ2ljYWxPcCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBiZWdpbkVycm9yKGNvbnN0IFRJbnRl
cm1Ob2RlKiBub2RlKTsKKyAgICB2b2lkIHZhbGlkYXRlVXNlckRlZmluZWRGdW5jdGlvbkNhbGxV
c2FnZShjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCk7CisgICAgYm9vbCBpc1NhbXBsaW5n
T3AoY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKSBjb25zdDsKKwor
ICAgIFRJbmZvU2lua0Jhc2UmIG1TaW5rOworICAgIGludCBtTnVtRXJyb3JzOworCisgICAgdHlw
ZWRlZiBzdGQ6OnNldDxUU3RyaW5nPiBTdHJpbmdTZXQ7CisgICAgU3RyaW5nU2V0IG1TYW1wbGlu
Z09wczsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX0ZSQUdNRU5U
X1NIQURFUl9USU1JTkdfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1p
bmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVlNzhjMzU0NTAx
N2JkYzFlOGU5OThmMTkxODJmNjEzOWZjMWE2ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RW
ZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCkBAIC0wLDAgKzEsMTcgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJU
aW1pbmcuaCIKKwordm9pZCBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZzo6dmlzaXRTeW1ib2wo
VEludGVybVN5bWJvbCogbm9kZSkKK3sKKyAgICBpZiAoSXNTYW1wbGVyKG5vZGUtPmdldEJhc2lj
VHlwZSgpKSkgeworICAgICAgICArK21OdW1FcnJvcnM7CisgICAgICAgIG1TaW5rLm1lc3NhZ2Uo
RVByZWZpeEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmdldExpbmUoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAiU2FtcGxlcnMgYXJlIG5vdCBwZXJtaXR0ZWQgaW4gdmVydGV4
IHNoYWRlcnMiKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1p
bmcuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3Rp
bWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVmMGRkMzE5N2Ey
Mzk3YmNiMTIzOTU1ODc5YzE4NDQ1M2ZkNjI4ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RW
ZXJ0ZXhTaGFkZXJUaW1pbmcuaApAQCAtMCwwICsxLDMzIEBACisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lm
bmRlZiBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfVkVSVEVYX1NIQURFUl9USU1JTkdfSF8KKyNk
ZWZpbmUgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX1ZFUlRFWF9TSEFERVJfVElNSU5HX0hfCisK
KyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9J
bmZvU2luay5oIgorCitjbGFzcyBUSW5mb1NpbmtCYXNlOworCitjbGFzcyBSZXN0cmljdFZlcnRl
eFNoYWRlclRpbWluZyA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBS
ZXN0cmljdFZlcnRleFNoYWRlclRpbWluZyhUSW5mb1NpbmtCYXNlJiBzaW5rKQorICAgICAgICA6
IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIGZhbHNlKQorICAgICAgICAsIG1TaW5rKHNp
bmspCisgICAgICAgICwgbU51bUVycm9ycygwKSB7fQorCisgICAgdm9pZCBlbmZvcmNlUmVzdHJp
Y3Rpb25zKFRJbnRlcm1Ob2RlKiByb290KSB7IHJvb3QtPnRyYXZlcnNlKHRoaXMpOyB9CisgICAg
aW50IG51bUVycm9ycygpIHsgcmV0dXJuIG1OdW1FcnJvcnM7IH0KKworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7Citwcml2YXRlOgorICAgIFRJbmZvU2lua0Jh
c2UmIG1TaW5rOworICAgIGludCBtTnVtRXJyb3JzOworfTsKKworI2VuZGlmICAvLyBDT01QSUxF
Ul9USU1JTkdfUkVTVFJJQ1RfVkVSVEVYX1NIQURFUl9USU1JTkdfSF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3V0aWwuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMDc3YmRjYzQ4Yjg2N2U0MTNlMGRlOTM3ZTQ4NzQ2NDg1NGM0ZGI0YwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL3V0aWwuY3BwCkBAIC0wLDAgKzEsMjggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci91dGlsLmgiCisKKyNpbmNsdWRlIDxsaW1pdHM+CisKKyNp
bmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvbnVtZXJpY19sZXguaCIKKworYm9vbCBhdG9m
X2NsYW1wKGNvbnN0IGNoYXIgKnN0ciwgZmxvYXQgKnZhbHVlKQoreworICAgIGJvb2wgc3VjY2Vz
cyA9IHBwOjpudW1lcmljX2xleF9mbG9hdChzdHIsIHZhbHVlKTsKKyAgICBpZiAoIXN1Y2Nlc3Mp
CisgICAgICAgICp2YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKTsKKyAg
ICByZXR1cm4gc3VjY2VzczsKK30KKworYm9vbCBhdG9pX2NsYW1wKGNvbnN0IGNoYXIgKnN0ciwg
aW50ICp2YWx1ZSkKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSBwcDo6bnVtZXJpY19sZXhfaW50KHN0
ciwgdmFsdWUpOworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgKnZhbHVlID0gc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ+OjptYXgoKTsKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRp
bC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRp
bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmRjNjlmMzkwNjBkMjA1MWYzYTIwMDY1OTVmMzA2MDBmZWMyZTdmNzcK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci91dGlsLmgKQEAgLTAsMCArMSwyMCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2lmbmRlZiBDT01QSUxFUl9VVElMX0gKKyNkZWZpbmUgQ09NUElMRVJfVVRJTF9ICisKKy8vIGF0
b2ZfY2xhbXAgaXMgbGlrZSBhdG9mIGJ1dAorLy8gICAxLiBpdCBmb3JjZXMgQyBsb2NhbGUsIGku
ZS4gZm9yY2luZyAnLicgYXMgZGVjaW1hbCBwb2ludC4KKy8vICAgMi4gaXQgY2xhbXBzIHRoZSB2
YWx1ZSB0byAtRkxUX01BWCBvciBGTFRfTUFYIGlmIG92ZXJmbG93IGhhcHBlbnMuCisvLyBSZXR1
cm4gZmFsc2UgaWYgb3ZlcmZsb3cgaGFwcGVucy4KK2V4dGVybiBib29sIGF0b2ZfY2xhbXAoY29u
c3QgY2hhciAqc3RyLCBmbG9hdCAqdmFsdWUpOworCisvLyBJZiBvdmVyZmxvdyBoYXBwZW5zLCBj
bGFtcCB0aGUgdmFsdWUgdG8gSU5UX01JTiBvciBJTlRfTUFYLgorLy8gUmV0dXJuIGZhbHNlIGlm
IG92ZXJmbG93IGhhcHBlbnMuCitleHRlcm4gYm9vbCBhdG9pX2NsYW1wKGNvbnN0IGNoYXIgKnN0
ciwgaW50ICp2YWx1ZSk7CisKKyNlbmRpZiAvLyBDT01QSUxFUl9VVElMX0gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci91dGlsLmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci91dGlsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZDZlNWVlZWQ5MWY4ZjVhNTkyZTUzMjczZjA5YTg3OGY1NGI4NjBlZi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdXRpbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyOCAr
MCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL3V0aWwuaCIKLQotI2lu
Y2x1ZGUgPGxpbWl0cz4KLQotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9udW1lcmlj
X2xleC5oIgotCi1ib29sIGF0b2ZfY2xhbXAoY29uc3QgY2hhciAqc3RyLCBmbG9hdCAqdmFsdWUp
Ci17Ci0gICAgYm9vbCBzdWNjZXNzID0gcHA6Om51bWVyaWNfbGV4X2Zsb2F0KHN0ciwgdmFsdWUp
OwotICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgKnZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0
czxmbG9hdD46Om1heCgpOwotICAgIHJldHVybiBzdWNjZXNzOwotfQotCi1ib29sIGF0b2lfY2xh
bXAoY29uc3QgY2hhciAqc3RyLCBpbnQgKnZhbHVlKQotewotICAgIGJvb2wgc3VjY2VzcyA9IHBw
OjpudW1lcmljX2xleF9pbnQoc3RyLCB2YWx1ZSk7Ci0gICAgaWYgKCFzdWNjZXNzKQotICAgICAg
ICAqdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOwotICAgIHJldHVybiBz
dWNjZXNzOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdXRpbC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3V0aWwu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM2OWYzOTA2MGQyMDUxZjNhMjAwNjU5
NWYzMDYwMGZlYzJlN2Y3Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdXRpbC5oCisrKyAv
ZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBD
T01QSUxFUl9VVElMX0gKLSNkZWZpbmUgQ09NUElMRVJfVVRJTF9ICi0KLS8vIGF0b2ZfY2xhbXAg
aXMgbGlrZSBhdG9mIGJ1dAotLy8gICAxLiBpdCBmb3JjZXMgQyBsb2NhbGUsIGkuZS4gZm9yY2lu
ZyAnLicgYXMgZGVjaW1hbCBwb2ludC4KLS8vICAgMi4gaXQgY2xhbXBzIHRoZSB2YWx1ZSB0byAt
RkxUX01BWCBvciBGTFRfTUFYIGlmIG92ZXJmbG93IGhhcHBlbnMuCi0vLyBSZXR1cm4gZmFsc2Ug
aWYgb3ZlcmZsb3cgaGFwcGVucy4KLWV4dGVybiBib29sIGF0b2ZfY2xhbXAoY29uc3QgY2hhciAq
c3RyLCBmbG9hdCAqdmFsdWUpOwotCi0vLyBJZiBvdmVyZmxvdyBoYXBwZW5zLCBjbGFtcCB0aGUg
dmFsdWUgdG8gSU5UX01JTiBvciBJTlRfTUFYLgotLy8gUmV0dXJuIGZhbHNlIGlmIG92ZXJmbG93
IGhhcHBlbnMuCi1leHRlcm4gYm9vbCBhdG9pX2NsYW1wKGNvbnN0IGNoYXIgKnN0ciwgaW50ICp2
YWx1ZSk7Ci0KLSNlbmRpZiAvLyBDT01QSUxFUl9VVElMX0gKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgKaW5kZXggNThjMzk0MDMzMWIzNjNmZmMyNGJkZDQ5
MDE1NDQzNzdmYzcxY2U0MC4uYzgxNmU0ZTFhNTVhYTFjYWQyMjcwYjNmN2Y4YWQ2YjZmMzM4ZTBi
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5
LmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgKQEAg
LTExLDggKzExLDYgQEAKICNpZm5kZWYgTElCRUdMX0RJU1BMQVlfSF8KICNkZWZpbmUgTElCRUdM
X0RJU1BMQVlfSF8KIAotI2luY2x1ZGUgImNvbW1vbi9zeXN0ZW0uaCIKLQogI2luY2x1ZGUgPHNl
dD4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJFR0wvU3VyZmFjZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliRUdML1N1cmZhY2UuY3BwCmluZGV4IDAxYjQwMTcxNzkxYzdlMTFlZmUyYTlhMmQzOGFlM2Fm
MzcyYTc4MzcuLjEyZjhkZmRmMjUwMjRiMjE3MzJjMzhkMWQ5Y2JkNGM2NGY2MjZjOWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5jcHAKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcApAQCAtMzE4
LDYgKzMxOCw4IEBAIGJvb2wgU3VyZmFjZTo6Y2hlY2tGb3JPdXRPZkRhdGVTd2FwQ2hhaW4oKQog
ICAgICAgICBzaXplRGlydHkgPSBmYWxzZTsKICAgICB9CiAKKyAgICBib29sIHdhc0RpcnR5ID0g
KG1Td2FwSW50ZXJ2YWxEaXJ0eSB8fCBzaXplRGlydHkpOworCiAgICAgaWYgKG1Td2FwSW50ZXJ2
YWxEaXJ0eSkKICAgICB7CiAgICAgICAgIHJlc2V0U3dhcENoYWluKGNsaWVudFdpZHRoLCBjbGll
bnRIZWlnaHQpOwpAQCAtMzI3LDcgKzMyOSw3IEBAIGJvb2wgU3VyZmFjZTo6Y2hlY2tGb3JPdXRP
ZkRhdGVTd2FwQ2hhaW4oKQogICAgICAgICByZXNpemVTd2FwQ2hhaW4oY2xpZW50V2lkdGgsIGNs
aWVudEhlaWdodCk7CiAgICAgfQogCi0gICAgaWYgKG1Td2FwSW50ZXJ2YWxEaXJ0eSB8fCBzaXpl
RGlydHkpCisgICAgaWYgKHdhc0RpcnR5KQogICAgIHsKICAgICAgICAgaWYgKHN0YXRpY19jYXN0
PGVnbDo6U3VyZmFjZSo+KGdldEN1cnJlbnREcmF3U3VyZmFjZSgpKSA9PSB0aGlzKQogICAgICAg
ICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVH
TC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAKaW5k
ZXggMzIwNjcwZGEwYzk2ZDE5MmU1M2Q5YTczOTZhZTQ2NjlhMzgyZjc2Mi4uMGVhNDZkNGIzOWVm
YjE3OTNkOTRlMzdmMjhjMDhmNmViZDQ4ZTNjZiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcApAQCAtMTg0LDcgKzE4NCw3IEBAIGNvbnN0IGNoYXIg
Kl9fc3RkY2FsbCBlZ2xRdWVyeVN0cmluZyhFR0xEaXNwbGF5IGRweSwgRUdMaW50IG5hbWUpCiAg
ICAgICAgICAgY2FzZSBFR0xfVkVORE9SOgogICAgICAgICAgICAgcmV0dXJuIGVnbDo6c3VjY2Vz
cyhkaXNwbGF5LT5nZXRWZW5kb3JTdHJpbmcoKSk7CiAgICAgICAgICAgY2FzZSBFR0xfVkVSU0lP
TjoKLSAgICAgICAgICAgIHJldHVybiBlZ2w6OnN1Y2Nlc3MoIjEuNCAoQU5HTEUgIiBWRVJTSU9O
X1NUUklORyAiKSIpOworICAgICAgICAgICAgcmV0dXJuIGVnbDo6c3VjY2VzcygiMS40IChBTkdM
RSAiIEFOR0xFX1ZFUlNJT05fU1RSSU5HICIpIik7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1
cm4gZWdsOjplcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgKGNvbnN0IGNoYXIqKU5VTEwpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wucmMgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5yYwppbmRleCBlMmM0NzJm
M2JiMzNiODIxOTM2MTY2OTY0ZmM4NDhkM2ZlNWViMDNiLi41NWUxYjgzOGM4NzY0MWQxOWEwNDU1
NjVlZTcwYTU1NjNjYjhhMDQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliRUdML2xpYkVHTC5yYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
RUdML2xpYkVHTC5yYwpAQCAtNTQsOCArNTQsOCBAQCBFTkQKIC8vDQogDQogVlNfVkVSU0lPTl9J
TkZPIFZFUlNJT05JTkZPDQotIEZJTEVWRVJTSU9OIE1BSk9SX1ZFUlNJT04sTUlOT1JfVkVSU0lP
TixCVUlMRF9WRVJTSU9OLEJVSUxEX1JFVklTSU9ODQotIFBST0RVQ1RWRVJTSU9OIE1BSk9SX1ZF
UlNJT04sTUlOT1JfVkVSU0lPTixCVUlMRF9WRVJTSU9OLEJVSUxEX1JFVklTSU9ODQorIEZJTEVW
RVJTSU9OIEFOR0xFX01BSk9SX1ZFUlNJT04sQU5HTEVfTUlOT1JfVkVSU0lPTiwwLDANCisgUFJP
RFVDVFZFUlNJT04gQU5HTEVfTUFKT1JfVkVSU0lPTixBTkdMRV9NSU5PUl9WRVJTSU9OLDAsMA0K
ICBGSUxFRkxBR1NNQVNLIDB4MTdMDQogI2lmZGVmIF9ERUJVRw0KICBGSUxFRkxBR1MgMHgxTA0K
QEAgLTcxLDEzICs3MSwxNCBAQCBCRUdJTgogICAgICAgICBCTE9DSyAiMDQwOTA0YjAiDQogICAg
ICAgICBCRUdJTg0KICAgICAgICAgICAgIFZBTFVFICJGaWxlRGVzY3JpcHRpb24iLCAiQU5HTEUg
bGliRUdMIER5bmFtaWMgTGluayBMaWJyYXJ5Ig0KLSAgICAgICAgICAgIFZBTFVFICJGaWxlVmVy
c2lvbiIsIFZFUlNJT05fU1RSSU5HDQorICAgICAgICAgICAgVkFMVUUgIkZpbGVWZXJzaW9uIiwg
QU5HTEVfVkVSU0lPTl9TVFJJTkcNCiAgICAgICAgICAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwg
ImxpYkVHTCINCiAgICAgICAgICAgICBWQUxVRSAiTGVnYWxDb3B5cmlnaHQiLCAiQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIg0KICAgICAgICAgICAgIFZBTFVFICJPcmlnaW5hbEZpbGVu
YW1lIiwgImxpYkVHTC5kbGwiDQotICAgICAgICAgICAgVkFMVUUgIlByaXZhdGVCdWlsZCIsIFZF
UlNJT05fU1RSSU5HDQorICAgICAgICAgICAgVkFMVUUgIlByaXZhdGVCdWlsZCIsIEFOR0xFX1ZF
UlNJT05fU1RSSU5HDQogICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwgIkFOR0xFIGxp
YkVHTCBEeW5hbWljIExpbmsgTGlicmFyeSINCi0gICAgICAgICAgICBWQUxVRSAiUHJvZHVjdFZl
cnNpb24iLCBWRVJTSU9OX1NUUklORw0KKyAgICAgICAgICAgIFZBTFVFICJQcm9kdWN0VmVyc2lv
biIsIEFOR0xFX1ZFUlNJT05fU1RSSU5HDQorICAgICAgICAgICAgVkFMVUUgIkNvbW1lbnRzIiwg
IkJ1aWxkIERhdGU6ICIgQU5HTEVfQ09NTUlUX0RBVEUNCiAgICAgICAgIEVORA0KICAgICBFTkQN
CiAgICAgQkxPQ0sgIlZhckZpbGVJbmZvIg0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJFR0wvbWFpbi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliRUdML21haW4uY3BwCmluZGV4IDQyNGVjM2ZjZDFkOTg2MzUxYmY1ZWE0YmFiYmIxMTZjMGZk
MWFlZTcuLjgwZGNjMzQ1ODA3NTYwZWY2YTQxMTc0ZjE0YjdjOWYwZDc4YzZmMWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbWFpbi5jcHAKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9tYWluLmNwcApAQCAtMTIsMTMgKzEyLDUw
IEBACiAKIHN0YXRpYyBEV09SRCBjdXJyZW50VExTID0gVExTX09VVF9PRl9JTkRFWEVTOwogCitu
YW1lc3BhY2UgZWdsCit7CisKK0N1cnJlbnQgKkFsbG9jYXRlQ3VycmVudCgpCit7CisgICAgQ3Vy
cmVudCAqY3VycmVudCA9IChlZ2w6OkN1cnJlbnQqKUxvY2FsQWxsb2MoTFBUUiwgc2l6ZW9mKGVn
bDo6Q3VycmVudCkpOworCisgICAgaWYgKCFjdXJyZW50KQorICAgIHsKKyAgICAgICAgRVJSKCJD
b3VsZCBub3QgYWxsb2NhdGUgdGhyZWFkIGxvY2FsIHN0b3JhZ2UuIik7CisgICAgICAgIHJldHVy
biBOVUxMOworICAgIH0KKworICAgIEFTU0VSVChjdXJyZW50VExTICE9IFRMU19PVVRfT0ZfSU5E
RVhFUyk7CisgICAgVGxzU2V0VmFsdWUoY3VycmVudFRMUywgY3VycmVudCk7CisKKyAgICBjdXJy
ZW50LT5lcnJvciA9IEVHTF9TVUNDRVNTOworICAgIGN1cnJlbnQtPkFQSSA9IEVHTF9PUEVOR0xf
RVNfQVBJOworICAgIGN1cnJlbnQtPmRpc3BsYXkgPSBFR0xfTk9fRElTUExBWTsKKyAgICBjdXJy
ZW50LT5kcmF3U3VyZmFjZSA9IEVHTF9OT19TVVJGQUNFOworICAgIGN1cnJlbnQtPnJlYWRTdXJm
YWNlID0gRUdMX05PX1NVUkZBQ0U7CisKKyAgICByZXR1cm4gY3VycmVudDsKK30KKwordm9pZCBE
ZWFsbG9jYXRlQ3VycmVudCgpCit7CisgICAgdm9pZCAqY3VycmVudCA9IFRsc0dldFZhbHVlKGN1
cnJlbnRUTFMpOworCisgICAgaWYgKGN1cnJlbnQpCisgICAgeworICAgICAgICBMb2NhbEZyZWUo
KEhMT0NBTCljdXJyZW50KTsKKyAgICB9Cit9CisKK30KKwogZXh0ZXJuICJDIiBCT09MIFdJTkFQ
SSBEbGxNYWluKEhJTlNUQU5DRSBpbnN0YW5jZSwgRFdPUkQgcmVhc29uLCBMUFZPSUQgcmVzZXJ2
ZWQpCiB7CiAgICAgc3dpdGNoIChyZWFzb24pCiAgICAgewogICAgICAgY2FzZSBETExfUFJPQ0VT
U19BVFRBQ0g6CiAgICAgICAgIHsKLSNpZiAhZGVmaW5lZChBTkdMRV9ESVNBQkxFX1RSQUNFKQor
I2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX1RSQUNFKQogICAgICAgICAgICAgRklMRSAqZGVidWcg
PSBmb3BlbihUUkFDRV9PVVRQVVRfRklMRSwgInJ0Iik7CiAKICAgICAgICAgICAgIGlmIChkZWJ1
ZykKQEAgLTQzLDM5ICs4MCwxNyBAQCBleHRlcm4gIkMiIEJPT0wgV0lOQVBJIERsbE1haW4oSElO
U1RBTkNFIGluc3RhbmNlLCBEV09SRCByZWFzb24sIExQVk9JRCByZXNlcnZlZAogICAgICAgICAv
LyBGYWxsIHRocm91Z2h0IHRvIGluaXRpYWxpemUgaW5kZXgKICAgICAgIGNhc2UgRExMX1RIUkVB
RF9BVFRBQ0g6CiAgICAgICAgIHsKLSAgICAgICAgICAgIGVnbDo6Q3VycmVudCAqY3VycmVudCA9
IChlZ2w6OkN1cnJlbnQqKUxvY2FsQWxsb2MoTFBUUiwgc2l6ZW9mKGVnbDo6Q3VycmVudCkpOwot
Ci0gICAgICAgICAgICBpZiAoY3VycmVudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBUbHNTZXRWYWx1ZShjdXJyZW50VExTLCBjdXJyZW50KTsKLQotICAgICAgICAgICAgICAgIGN1
cnJlbnQtPmVycm9yID0gRUdMX1NVQ0NFU1M7Ci0gICAgICAgICAgICAgICAgY3VycmVudC0+QVBJ
ID0gRUdMX09QRU5HTF9FU19BUEk7Ci0gICAgICAgICAgICAgICAgY3VycmVudC0+ZGlzcGxheSA9
IEVHTF9OT19ESVNQTEFZOwotICAgICAgICAgICAgICAgIGN1cnJlbnQtPmRyYXdTdXJmYWNlID0g
RUdMX05PX1NVUkZBQ0U7Ci0gICAgICAgICAgICAgICAgY3VycmVudC0+cmVhZFN1cmZhY2UgPSBF
R0xfTk9fU1VSRkFDRTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVnbDo6QWxsb2NhdGVD
dXJyZW50KCk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIERMTF9USFJF
QURfREVUQUNIOgogICAgICAgICB7Ci0gICAgICAgICAgICB2b2lkICpjdXJyZW50ID0gVGxzR2V0
VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICAgICAgICAgIGlmIChjdXJyZW50KQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIExvY2FsRnJlZSgoSExPQ0FMKWN1cnJlbnQpOwotICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWdsOjpEZWFsbG9jYXRlQ3VycmVudCgpOwogICAgICAgICB9
CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBETExfUFJPQ0VTU19ERVRBQ0g6CiAgICAgICAg
IHsKLSAgICAgICAgICAgIHZvaWQgKmN1cnJlbnQgPSBUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsK
LQotICAgICAgICAgICAgaWYgKGN1cnJlbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgTG9jYWxGcmVlKChITE9DQUwpY3VycmVudCk7Ci0gICAgICAgICAgICB9Ci0KKyAgICAgICAg
ICAgIGVnbDo6RGVhbGxvY2F0ZUN1cnJlbnQoKTsKICAgICAgICAgICAgIFRsc0ZyZWUoY3VycmVu
dFRMUyk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC04OCw3MiArMTAzLDgyIEBAIGV4
dGVybiAiQyIgQk9PTCBXSU5BUEkgRGxsTWFpbihISU5TVEFOQ0UgaW5zdGFuY2UsIERXT1JEIHJl
YXNvbiwgTFBWT0lEIHJlc2VydmVkCiAKIG5hbWVzcGFjZSBlZ2wKIHsKLXZvaWQgc2V0Q3VycmVu
dEVycm9yKEVHTGludCBlcnJvcikKKworQ3VycmVudCAqR2V0Q3VycmVudERhdGEoKQogewogICAg
IEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CiAK
KyAgICAvLyBBTkdMRSBpc3N1ZSA0ODg6IHdoZW4gdGhlIGRsbCBpcyBsb2FkZWQgYWZ0ZXIgdGhy
ZWFkIGluaXRpYWxpemF0aW9uLAorICAgIC8vIHRocmVhZCBsb2NhbCBzdG9yYWdlIChjdXJyZW50
KSBtaWdodCBub3QgZXhpc3QgeWV0LgorICAgIHJldHVybiAoY3VycmVudCA/IGN1cnJlbnQgOiBB
bGxvY2F0ZUN1cnJlbnQoKSk7Cit9CisKK3ZvaWQgc2V0Q3VycmVudEVycm9yKEVHTGludCBlcnJv
cikKK3sKKyAgICBDdXJyZW50ICpjdXJyZW50ID0gR2V0Q3VycmVudERhdGEoKTsKKwogICAgIGN1
cnJlbnQtPmVycm9yID0gZXJyb3I7CiB9CiAKIEVHTGludCBnZXRDdXJyZW50RXJyb3IoKQogewot
ICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7
CisgICAgQ3VycmVudCAqY3VycmVudCA9IEdldEN1cnJlbnREYXRhKCk7CiAKICAgICByZXR1cm4g
Y3VycmVudC0+ZXJyb3I7CiB9CiAKIHZvaWQgc2V0Q3VycmVudEFQSShFR0xlbnVtIEFQSSkKIHsK
LSAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMp
OworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSBHZXRDdXJyZW50RGF0YSgpOwogCiAgICAgY3VycmVu
dC0+QVBJID0gQVBJOwogfQogCiBFR0xlbnVtIGdldEN1cnJlbnRBUEkoKQogewotICAgIEN1cnJl
bnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisgICAgQ3Vy
cmVudCAqY3VycmVudCA9IEdldEN1cnJlbnREYXRhKCk7CiAKICAgICByZXR1cm4gY3VycmVudC0+
QVBJOwogfQogCiB2b2lkIHNldEN1cnJlbnREaXNwbGF5KEVHTERpc3BsYXkgZHB5KQogewotICAg
IEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7Cisg
ICAgQ3VycmVudCAqY3VycmVudCA9IEdldEN1cnJlbnREYXRhKCk7CiAKICAgICBjdXJyZW50LT5k
aXNwbGF5ID0gZHB5OwogfQogCiBFR0xEaXNwbGF5IGdldEN1cnJlbnREaXNwbGF5KCkKIHsKLSAg
ICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOwor
ICAgIEN1cnJlbnQgKmN1cnJlbnQgPSBHZXRDdXJyZW50RGF0YSgpOwogCiAgICAgcmV0dXJuIGN1
cnJlbnQtPmRpc3BsYXk7CiB9CiAKIHZvaWQgc2V0Q3VycmVudERyYXdTdXJmYWNlKEVHTFN1cmZh
Y2Ugc3VyZmFjZSkKIHsKLSAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZh
bHVlKGN1cnJlbnRUTFMpOworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSBHZXRDdXJyZW50RGF0YSgp
OwogCiAgICAgY3VycmVudC0+ZHJhd1N1cmZhY2UgPSBzdXJmYWNlOwogfQogCiBFR0xTdXJmYWNl
IGdldEN1cnJlbnREcmF3U3VyZmFjZSgpCiB7Ci0gICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJy
ZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKyAgICBDdXJyZW50ICpjdXJyZW50ID0gR2V0
Q3VycmVudERhdGEoKTsKIAogICAgIHJldHVybiBjdXJyZW50LT5kcmF3U3VyZmFjZTsKIH0KIAog
dm9pZCBzZXRDdXJyZW50UmVhZFN1cmZhY2UoRUdMU3VyZmFjZSBzdXJmYWNlKQogewotICAgIEN1
cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisgICAg
Q3VycmVudCAqY3VycmVudCA9IEdldEN1cnJlbnREYXRhKCk7CiAKICAgICBjdXJyZW50LT5yZWFk
U3VyZmFjZSA9IHN1cmZhY2U7CiB9CiAKIEVHTFN1cmZhY2UgZ2V0Q3VycmVudFJlYWRTdXJmYWNl
KCkKIHsKLSAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJl
bnRUTFMpOworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSBHZXRDdXJyZW50RGF0YSgpOwogCiAgICAg
cmV0dXJuIGN1cnJlbnQtPnJlYWRTdXJmYWNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db25zdGFudHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29uc3RhbnRzLmgKaW5kZXggZDkwMmQ0NTZiMTI2OWIzNWM3
YmIyMmU1MjY3NzU1YzA5MjI1ZWYzMy4uOWYyNGQ2NmE3ZGM3NGM2MDdmOTYxNzdmN2ViNGY1Y2U5
NzJmZDM0MiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9Db25zdGFudHMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L0NvbnN0YW50cy5oCkBAIC0xLDM0ICsxLDM0IEBACi0vLw0KLS8vIENvcHlyaWdodCAoYykgMjAx
MyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLS8vDQotDQotLy8g
Q29udGFudHMuaDogRGVmaW5lcyBzb21lIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIGFuZCBnbCBj
b25zdGFudHMNCi0NCi0jaWZuZGVmIExJQkdMRVNWMl9DT05TVEFOVFNfSF8NCi0jZGVmaW5lIExJ
QkdMRVNWMl9DT05TVEFOVFNfSF8NCi0NCi1uYW1lc3BhY2UgZ2wNCi17DQotDQotZW51bQ0KLXsN
Ci0gICAgTUFYX1ZFUlRFWF9BVFRSSUJTID0gMTYsDQotICAgIE1BWF9URVhUVVJFX0lNQUdFX1VO
SVRTID0gMTYsDQotDQotICAgIC8vIEltcGxlbWVudGF0aW9uIHVwcGVyIGxpbWl0cywgcmVhbCBt
YXhpbXVtcyBkZXBlbmQgb24gdGhlIGhhcmR3YXJlDQotICAgIElNUExFTUVOVEFUSU9OX01BWF9W
RVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDE2LA0KLSAgICBJTVBMRU1FTlRBVElPTl9NQVhf
Q09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyA9IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTICsg
SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAgICANCi0NCi0g
ICAgSU1QTEVNRU5UQVRJT05fTUFYX1ZBUllJTkdfVkVDVE9SUyA9IDMyLA0KLSAgICBJTVBMRU1F
TlRBVElPTl9NQVhfRFJBV19CVUZGRVJTID0gOA0KLX07DQotDQotY29uc3QgZmxvYXQgQUxJQVNF
RF9MSU5FX1dJRFRIX1JBTkdFX01JTiA9IDEuMGY7DQotY29uc3QgZmxvYXQgQUxJQVNFRF9MSU5F
X1dJRFRIX1JBTkdFX01BWCA9IDEuMGY7DQotY29uc3QgZmxvYXQgQUxJQVNFRF9QT0lOVF9TSVpF
X1JBTkdFX01JTiA9IDEuMGY7DQotDQotfQ0KLQ0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfQ09OU1RB
TlRTX0hfDQorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIENvbnRhbnRzLmg6IERlZmluZXMgc29tZSBpbXBs
ZW1lbnRhdGlvbiBzcGVjaWZpYyBhbmQgZ2wgY29uc3RhbnRzCisKKyNpZm5kZWYgTElCR0xFU1Yy
X0NPTlNUQU5UU19IXworI2RlZmluZSBMSUJHTEVTVjJfQ09OU1RBTlRTX0hfCisKK25hbWVzcGFj
ZSBnbAoreworCitlbnVtCit7CisgICAgTUFYX1ZFUlRFWF9BVFRSSUJTID0gMTYsCisgICAgTUFY
X1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAxNiwKKworICAgIC8vIEltcGxlbWVudGF0aW9uIHVwcGVy
IGxpbWl0cywgcmVhbCBtYXhpbXVtcyBkZXBlbmQgb24gdGhlIGhhcmR3YXJlCisgICAgSU1QTEVN
RU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTID0gMTYsCisgICAgSU1QTEVN
RU5UQVRJT05fTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSBNQVhfVEVYVFVSRV9J
TUFHRV9VTklUUyArIElNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklU
UywgICAgCisKKyAgICBJTVBMRU1FTlRBVElPTl9NQVhfVkFSWUlOR19WRUNUT1JTID0gMzIsCisg
ICAgSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSUyA9IDgKK307CisKK2NvbnN0IGZsb2F0
IEFMSUFTRURfTElORV9XSURUSF9SQU5HRV9NSU4gPSAxLjBmOworY29uc3QgZmxvYXQgQUxJQVNF
RF9MSU5FX1dJRFRIX1JBTkdFX01BWCA9IDEuMGY7Citjb25zdCBmbG9hdCBBTElBU0VEX1BPSU5U
X1NJWkVfUkFOR0VfTUlOID0gMS4wZjsKKworfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX0NPTlNU
QU5UU19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9Db250ZXh0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29u
dGV4dC5jcHAKaW5kZXggZmJhNDEwNGQxZTExMjlkMzZmMWZlOWQxNjJlMWQ1Y2RmYjliYzlkYi4u
NmJjNGM3NmMzZDQxYzJlYTZlMDUyMThhY2U1NGUyZjUwYWE2MDljMyAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwCkBAIC0xNzc4LDcg
KzE3NzgsNyBAQCB2b2lkIENvbnRleHQ6OmFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2RlKQogICAg
IHsKICAgICAgICAgbWFzayA9IDB4RkZGRkZGRkY7CiAgICAgfQotICAgIG1SZW5kZXJlci0+c2V0
QmxlbmRTdGF0ZShtU3RhdGUuYmxlbmQsIG1TdGF0ZS5ibGVuZENvbG9yLCBtYXNrKTsKKyAgICBt
UmVuZGVyZXItPnNldEJsZW5kU3RhdGUoZnJhbWVidWZmZXJPYmplY3QsIG1TdGF0ZS5ibGVuZCwg
bVN0YXRlLmJsZW5kQ29sb3IsIG1hc2spOwogCiAgICAgbVJlbmRlcmVyLT5zZXREZXB0aFN0ZW5j
aWxTdGF0ZShtU3RhdGUuZGVwdGhTdGVuY2lsLCBtU3RhdGUuc3RlbmNpbFJlZiwgbVN0YXRlLnN0
ZW5jaWxCYWNrUmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRl
LnJhc3Rlcml6ZXIuZnJvbnRGYWNlID09IEdMX0NDVyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCmluZGV4IDA5ZWVkZTlmZjk0MjIxMmJmNWQy
ZjgzMzJjZGQ5ZWUzMzY4YmEwM2IuLjNkYzk1ZTNiOTUyZGM4ZjA2Y2IyOWM0MzAzYWNiY2RiODNj
ZWRmMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
Q29udGV4dC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29u
dGV4dC5oCkBAIC03Myw3ICs3Myw3IEBAIGVudW0gUXVlcnlUeXBlCiBjbGFzcyBWZXJ0ZXhBdHRy
aWJ1dGUKIHsKICAgcHVibGljOgotICAgIFZlcnRleEF0dHJpYnV0ZSgpIDogbVR5cGUoR0xfRkxP
QVQpLCBtU2l6ZSgwKSwgbU5vcm1hbGl6ZWQoZmFsc2UpLCBtU3RyaWRlKDApLCBtUG9pbnRlcihO
VUxMKSwgbUFycmF5RW5hYmxlZChmYWxzZSksIG1EaXZpc29yKDApCisgICAgVmVydGV4QXR0cmli
dXRlKCkgOiBtVHlwZShHTF9GTE9BVCksIG1TaXplKDQpLCBtTm9ybWFsaXplZChmYWxzZSksIG1T
dHJpZGUoMCksIG1Qb2ludGVyKE5VTEwpLCBtQXJyYXlFbmFibGVkKGZhbHNlKSwgbURpdmlzb3Io
MCkKICAgICB7CiAgICAgICAgIG1DdXJyZW50VmFsdWVbMF0gPSAwLjBmOwogICAgICAgICBtQ3Vy
cmVudFZhbHVlWzFdID0gMC4wZjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwCmluZGV4IGVlMGVjOGUwM2YxZDkyODMx
ZWQ2NWIyMzZhOWU1ZWNhMTNiZGQzMTkuLjI1ZWZjNDA5NzNiMzM3NTQwNTk3NGM5MzMxNzRiZmZh
NTViNzFlZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvUHJvZ3JhbUJpbmFyeS5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcApAQCAtMTYyNyw5ICsxNjI3LDE5IEBAIGJvb2wgUHJv
Z3JhbUJpbmFyeTo6bG9hZChJbmZvTG9nICZpbmZvTG9nLCBjb25zdCB2b2lkICpiaW5hcnksIEdM
c2l6ZWkgbGVuZ3RoKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaW50IHZl
cnNpb24gPSAwOwotICAgIHN0cmVhbS5yZWFkKCZ2ZXJzaW9uKTsKLSAgICBpZiAodmVyc2lvbiAh
PSBWRVJTSU9OX0RXT1JEKQorICAgIGludCBtYWpvclZlcnNpb24gPSAwOworICAgIGludCBtaW5v
clZlcnNpb24gPSAwOworICAgIHN0cmVhbS5yZWFkKCZtYWpvclZlcnNpb24pOworICAgIHN0cmVh
bS5yZWFkKCZtaW5vclZlcnNpb24pOworICAgIGlmIChtYWpvclZlcnNpb24gIT0gQU5HTEVfTUFK
T1JfVkVSU0lPTiB8fCBtaW5vclZlcnNpb24gIT0gQU5HTEVfTUlOT1JfVkVSU0lPTikKKyAgICB7
CisgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJJbnZhbGlkIHByb2dyYW0gYmluYXJ5IHZlcnNpb24u
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBjaGFyIGNv
bW1pdFN0cmluZ1tBTkdMRV9DT01NSVRfSEFTSF9TSVpFXTsKKyAgICBzdHJlYW0ucmVhZChjb21t
aXRTdHJpbmcsIEFOR0xFX0NPTU1JVF9IQVNIX1NJWkUpOworICAgIGlmIChtZW1jbXAoY29tbWl0
U3RyaW5nLCBBTkdMRV9DT01NSVRfSEFTSCwgc2l6ZW9mKHVuc2lnbmVkIGNoYXIpICogQU5HTEVf
Q09NTUlUX0hBU0hfU0laRSkgIT0gMCkKICAgICB7CiAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJJ
bnZhbGlkIHByb2dyYW0gYmluYXJ5IHZlcnNpb24uIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTE3OTYsNyArMTgwNiw5IEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6c2F2ZSh2b2lkKiBiaW5h
cnksIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoKQogICAgIEJpbmFyeU91dHB1dFN0
cmVhbSBzdHJlYW07CiAKICAgICBzdHJlYW0ud3JpdGUoR0xfUFJPR1JBTV9CSU5BUllfQU5HTEUp
OwotICAgIHN0cmVhbS53cml0ZShWRVJTSU9OX0RXT1JEKTsKKyAgICBzdHJlYW0ud3JpdGUoQU5H
TEVfTUFKT1JfVkVSU0lPTik7CisgICAgc3RyZWFtLndyaXRlKEFOR0xFX01JTk9SX1ZFUlNJT04p
OworICAgIHN0cmVhbS53cml0ZShBTkdMRV9DT01NSVRfSEFTSCwgQU5HTEVfQ09NTUlUX0hBU0hf
U0laRSk7CiAgICAgc3RyZWFtLndyaXRlKEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVM
KTsKIAogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJT
OyArK2kpCkBAIC0yNTkyLDcgKzI2MDQsOSBAQCBzdHJ1Y3QgQXR0cmlidXRlU29ydGVyCiAKICAg
ICBib29sIG9wZXJhdG9yKCkoaW50IGEsIGludCBiKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9y
aWdpbmFsSW5kaWNlc1thXSA9PSAtMSA/IGZhbHNlIDogb3JpZ2luYWxJbmRpY2VzW2FdIDwgb3Jp
Z2luYWxJbmRpY2VzW2JdOworICAgICAgICBpZiAob3JpZ2luYWxJbmRpY2VzW2FdID09IC0xKSBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChvcmlnaW5hbEluZGljZXNbYl0gPT0gLTEpIHJldHVy
biB0cnVlOworICAgICAgICByZXR1cm4gKG9yaWdpbmFsSW5kaWNlc1thXSA8IG9yaWdpbmFsSW5k
aWNlc1tiXSk7CiAgICAgfQogCiAgICAgY29uc3QgaW50ICgmb3JpZ2luYWxJbmRpY2VzKVtNQVhf
VkVSVEVYX0FUVFJJQlNdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9TaGFkZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvU2hhZGVyLmgKaW5kZXggODQ4ZDRjOTlhNzEzODgzMGQ2YjJiY2U3OGE5Njc1MzU5M2Y4OWNl
OS4uMjAxNWFkZGQxMWQyNDZiYWU2MmQ2MTRhZDEwNzIyNzg0MDNmYTZmNiAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5oCkBAIC0xOCw3ICsxOCw3
IEBACiAjaW5jbHVkZSA8bGlzdD4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlICJjb21w
aWxlci9Vbmlmb3JtLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmgi
CiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKIAogbmFtZXNwYWNlIHJ4CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcAppbmRleCBj
ZWU5YzU3ZGFjZjUwOGFkMmI2OGU2OGM4ZDc3NGI2ZmY0M2U1NDJjLi4zZGVlY2FmMTEyY2JiYTUw
MWUxM2ZlNzBjNGEwNzZmMzA5OWRmMTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHAKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRl
ICJsaWJHTEVTdjIvbWFpbi5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgogI2lu
Y2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvQmxpdC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0JsaXQuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL0ltYWdlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgi
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdM
RVN2Mi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2
Mi5jcHAKaW5kZXggMWU3Y2Y5ZDBjZmFlYTNiZmU3ZDQzNjFlZDUzYmVmNWJiNTY4NmQ4Zi4uYTMz
NDgxZTE1YzEzYzRlOTNmNjVmYWNjNTdhMWQwZmQ5ZjIxZjA3MyAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcApAQCAtMzg0NCw5
ICszODQ0LDkgQEAgY29uc3QgR0x1Ynl0ZSogX19zdGRjYWxsIGdsR2V0U3RyaW5nKEdMZW51bSBu
YW1lKQogICAgICAgICAgIGNhc2UgR0xfUkVOREVSRVI6CiAgICAgICAgICAgICByZXR1cm4gKEdM
dWJ5dGUqKSgoY29udGV4dCAhPSBOVUxMKSA/IGNvbnRleHQtPmdldFJlbmRlcmVyU3RyaW5nKCkg
OiAiQU5HTEUiKTsKICAgICAgICAgICBjYXNlIEdMX1ZFUlNJT046Ci0gICAgICAgICAgICByZXR1
cm4gKEdMdWJ5dGUqKSJPcGVuR0wgRVMgMi4wIChBTkdMRSAiIFZFUlNJT05fU1RSSU5HICIpIjsK
KyAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopIk9wZW5HTCBFUyAyLjAgKEFOR0xFICIgQU5H
TEVfVkVSU0lPTl9TVFJJTkcgIikiOwogICAgICAgICAgIGNhc2UgR0xfU0hBRElOR19MQU5HVUFH
RV9WRVJTSU9OOgotICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikiT3BlbkdMIEVTIEdMU0wg
RVMgMS4wMCAoQU5HTEUgIiBWRVJTSU9OX1NUUklORyAiKSI7CisgICAgICAgICAgICByZXR1cm4g
KEdMdWJ5dGUqKSJPcGVuR0wgRVMgR0xTTCBFUyAxLjAwIChBTkdMRSAiIEFOR0xFX1ZFUlNJT05f
U1RSSU5HICIpIjsKICAgICAgICAgICBjYXNlIEdMX0VYVEVOU0lPTlM6CiAgICAgICAgICAgICBy
ZXR1cm4gKEdMdWJ5dGUqKSgoY29udGV4dCAhPSBOVUxMKSA/IGNvbnRleHQtPmdldEV4dGVuc2lv
blN0cmluZygpIDogIiIpOwogICAgICAgICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5kZWYgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5kZWYKaW5kZXggMmNkOGVjZTJi
MjJjNGFjMTA1NWY0OTJlYTg3MzUyODRhNmU1MDYzYi4uYjgzMjBjOGYyNTYzYjllZjE5NjZlZjNh
NDQ1YmM1OGI1MDA4YmNkYyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9saWJHTEVTdjIuZGVmCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvbGliR0xFU3YyLmRlZgpAQCAtMTgzLDMgKzE4Myw2IEBAIEVYUE9SVFMKICAg
ICBnbEJpbmRUZXhJbWFnZSAgICAgICAgICAgICAgICAgIEAxNTggTk9OQU1FCiAgICAgZ2xDcmVh
dGVSZW5kZXJlciAgICAgICAgICAgICAgICBAMTc3IE5PTkFNRQogICAgIGdsRGVzdHJveVJlbmRl
cmVyICAgICAgICAgICAgICAgQDE3OCBOT05BTUUKKworICAgIDsgU2V0dGluZyB1cCBUUkFDRSBt
YWNybyBjYWxsYmFja3MKKyAgICBTZXRUcmFjZUZ1bmN0aW9uUG9pbnRlcnMgICAgICAgIEAxODAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xF
U3YyLnJjIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIu
cmMKaW5kZXggZjFiMDFiOWI3OTU5ZWJjOWZmMDUzYTVhZDdkYTQxM2ZkNjViYmE0ZS4uNGNhMzFm
OTcyMWU3OTgxZWJjNDE2ZjE5ZmRlNTQyNzA0MjI5YmE0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIucmMKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIucmMKQEAgLTU0LDggKzU0LDgg
QEAgRU5ECiAvLw0KIA0KIFZTX1ZFUlNJT05fSU5GTyBWRVJTSU9OSU5GTw0KLSBGSUxFVkVSU0lP
TiBNQUpPUl9WRVJTSU9OLE1JTk9SX1ZFUlNJT04sQlVJTERfVkVSU0lPTixCVUlMRF9SRVZJU0lP
Tg0KLSBQUk9EVUNUVkVSU0lPTiBNQUpPUl9WRVJTSU9OLE1JTk9SX1ZFUlNJT04sQlVJTERfVkVS
U0lPTixCVUlMRF9SRVZJU0lPTg0KKyBGSUxFVkVSU0lPTiBBTkdMRV9NQUpPUl9WRVJTSU9OLEFO
R0xFX01JTk9SX1ZFUlNJT04sMCwwDQorIFBST0RVQ1RWRVJTSU9OIEFOR0xFX01BSk9SX1ZFUlNJ
T04sQU5HTEVfTUlOT1JfVkVSU0lPTiwwLDANCiAgRklMRUZMQUdTTUFTSyAweDE3TA0KICNpZmRl
ZiBfREVCVUcNCiAgRklMRUZMQUdTIDB4MUwNCkBAIC03MSwxMyArNzEsMTQgQEAgQkVHSU4KICAg
ICAgICAgQkxPQ0sgIjA0MDkwNGIwIg0KICAgICAgICAgQkVHSU4NCiAgICAgICAgICAgICBWQUxV
RSAiRmlsZURlc2NyaXB0aW9uIiwgIkFOR0xFIGxpYkdMRVN2MiBEeW5hbWljIExpbmsgTGlicmFy
eSINCi0gICAgICAgICAgICBWQUxVRSAiRmlsZVZlcnNpb24iLCBWRVJTSU9OX1NUUklORw0KKyAg
ICAgICAgICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsIEFOR0xFX1ZFUlNJT05fU1RSSU5HDQogICAg
ICAgICAgICAgVkFMVUUgIkludGVybmFsTmFtZSIsICJsaWJHTEVTdjIiDQogICAgICAgICAgICAg
VkFMVUUgIkxlZ2FsQ29weXJpZ2h0IiwgIkNvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiIN
CiAgICAgICAgICAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsICJsaWJHTEVTdjIuZGxsIg0K
LSAgICAgICAgICAgIFZBTFVFICJQcml2YXRlQnVpbGQiLCBWRVJTSU9OX1NUUklORw0KKyAgICAg
ICAgICAgIFZBTFVFICJQcml2YXRlQnVpbGQiLCBBTkdMRV9WRVJTSU9OX1NUUklORw0KICAgICAg
ICAgICAgIFZBTFVFICJQcm9kdWN0TmFtZSIsICJBTkdMRSBsaWJHTEVTdjIgRHluYW1pYyBMaW5r
IExpYnJhcnkiDQotICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgVkVSU0lPTl9T
VFJJTkcNCisgICAgICAgICAgICBWQUxVRSAiUHJvZHVjdFZlcnNpb24iLCBBTkdMRV9WRVJTSU9O
X1NUUklORw0KKyAgICAgICAgICAgIFZBTFVFICJDb21tZW50cyIsICJCdWlsZCBEYXRlOiAiIEFO
R0xFX0NPTU1JVF9EQVRFDQogICAgICAgICBFTkQNCiAgICAgRU5EDQogICAgIEJMT0NLICJWYXJG
aWxlSW5mbyINCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL2xpYkdMRVN2Mi52Y3hwcm9qIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9saWJHTEVTdjIudmN4cHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIw
MGUxNzBlNDZiZWM2NTU4NjU1Y2YyOGFiYTY4MDE3OGNlY2RiNC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL2xpYkdMRVN2Mi52Y3hwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNDI1ICswLDAg
QEAKLe+7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPFByb2plY3Qg
RGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9z
Y2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+DQotICA8SXRlbUdy
b3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPg0KLSAgICA8UHJvamVjdENvbmZpZ3Vy
YXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPg0KLSAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVn
PC9Db25maWd1cmF0aW9uPg0KLSAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+DQotICAg
IDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQotICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNs
dWRlPSJEZWJ1Z3x4NjQiPg0KLSAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0
aW9uPg0KLSAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPg0KLSAgICA8L1Byb2plY3RDb25m
aWd1cmF0aW9uPg0KLSAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxX
aW4zMiI+DQotICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4NCi0g
ICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPg0KLSAgICA8L1Byb2plY3RDb25maWd1cmF0
aW9uPg0KLSAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPg0K
LSAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+DQotICAgICAgPFBs
YXRmb3JtPng2NDwvUGxhdGZvcm0+DQotICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQotICA8
L0l0ZW1Hcm91cD4NCi0gIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4NCi0gICAgPFBy
b2plY3RHdWlkPntCNTg3MUE3QS05NjhDLTQyRTMtQTMzQi05ODFFNkY0NDhFNzh9PC9Qcm9qZWN0
R3VpZD4NCi0gICAgPFJvb3ROYW1lc3BhY2U+bGliR0xFU3YyPC9Sb290TmFtZXNwYWNlPg0KLSAg
ICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+DQotICA8L1Byb3BlcnR5R3JvdXA+DQotICA8
SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnBy
b3BzIiAvPg0KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KLSAg
ICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0K
LSAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4NCi0gICAgPFdob2xlUHJv
Z3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+DQotICA8L1By
b3BlcnR5R3JvdXA+DQotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRp
b24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0K
LSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBl
Pg0KLSAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4NCi0gIDwvUHJvcGVy
dHlHcm91cD4NCi0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8
JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQotICAg
IDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+DQot
ICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0Pg0KLSAgICA8V2hvbGVQcm9n
cmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4NCi0gIDwvUHJv
cGVydHlHcm91cD4NCi0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlv
bil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KLSAg
ICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0K
LSAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4NCi0gIDwvUHJvcGVydHlH
cm91cD4NCi0gIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3Bw
LnByb3BzIiAvPg0KLSAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+DQot
ICA8L0ltcG9ydEdyb3VwPg0KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0
cyI+DQotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4k
KFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilc
TWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERh
dGFQbGF0Zm9ybSIgLz4NCi0gIDwvSW1wb3J0R3JvdXA+DQotICA8SW1wb3J0R3JvdXAgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVs
PSJQcm9wZXJ0eVNoZWV0cyI+DQotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilc
TWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygn
JChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExh
YmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCi0gIDwvSW1wb3J0R3JvdXA+DQotICA8SW1w
b3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxl
YXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQotICAgIDxJbXBvcnQgUHJvamVjdD0i
JChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25k
aXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51
c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCi0gIDwvSW1wb3J0
R3JvdXA+DQotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KLSAgICA8SW1w
b3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNl
ci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAu
JChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+
DQotICA8L0ltcG9ydEdyb3VwPg0KLSAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3Mi
IC8+DQotICA8UHJvcGVydHlHcm91cD4NCi0gICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC40
MDIxOS4xPC9fUHJvamVjdEZpbGVWZXJzaW9uPg0KLSAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQo
Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4kKFNvbHV0aW9uRGly
KSQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+DQotICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChD
b25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiQoQ29uZmlndXJhdGlv
bilcPC9JbnREaXI+DQotICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1
cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0xpbmtJbmNyZW1lbnRh
bD4NCi0gICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p
Jz09J1JlbGVhc2V8V2luMzInIj4kKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJhdGlvbilcPC9PdXRE
aXI+DQotICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdSZWxlYXNlfFdpbjMyJyI+JChDb25maWd1cmF0aW9uKVw8L0ludERpcj4NCi0gICAgPExp
bmtJbmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09
J1JlbGVhc2V8V2luMzInIj5mYWxzZTwvTGlua0luY3JlbWVudGFsPg0KLSAgICA8T3V0RGlyIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JChT
b2x1dGlvbkRpcikkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KLSAgICA8
SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8
eDY0JyI+JChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L0ludERpcj4NCi0gICAgPExpbmtJ
bmNyZW1lbnRhbCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0Rl
YnVnfHg2NCciPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4NCi0gICAgPE91dERpciBDb25kaXRpb249
IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JChTb2x1dGlv
bkRpcikkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KLSAgICA8SW50RGly
IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQn
Ij4kKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPg0KLSAgICA8TGlua0luY3Jl
bWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFz
ZXx4NjQnIj5mYWxzZTwvTGlua0luY3JlbWVudGFsPg0KLSAgICA8SW5jbHVkZVBhdGggQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiQoSW5j
bHVkZVBhdGgpPC9JbmNsdWRlUGF0aD4NCi0gICAgPExpYnJhcnlQYXRoIENvbmRpdGlvbj0iJyQo
Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4kKExpYnJhcnlQYXRo
KTwvTGlicmFyeVBhdGg+DQotICAgIDxJbmNsdWRlUGF0aCBDb25kaXRpb249IickKENvbmZpZ3Vy
YXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiQoSW5jbHVkZVBhdGgpPC9JbmNsdWRl
UGF0aD4NCi0gICAgPExpYnJhcnlQYXRoIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQ
bGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JChMaWJyYXJ5UGF0aCk8L0xpYnJhcnlQYXRoPg0KLSAg
ICA8SW5jbHVkZVBhdGggQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdEZWJ1Z3xXaW4zMiciPiQoSW5jbHVkZVBhdGgpPC9JbmNsdWRlUGF0aD4NCi0gICAgPEluY2x1
ZGVQYXRoIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFz
ZXxXaW4zMiciPiQoSW5jbHVkZVBhdGgpPC9JbmNsdWRlUGF0aD4NCi0gICAgPExpYnJhcnlQYXRo
IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzIn
Ij4kKExpYnJhcnlQYXRoKTwvTGlicmFyeVBhdGg+DQotICAgIDxMaWJyYXJ5UGF0aCBDb25kaXRp
b249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4kKExp
YnJhcnlQYXRoKTwvTGlicmFyeVBhdGg+DQotICA8L1Byb3BlcnR5R3JvdXA+DQotICA8SXRlbURl
ZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09
J0RlYnVnfFdpbjMyJyI+DQotICAgIDxDbENvbXBpbGU+DQotICAgICAgPE9wdGltaXphdGlvbj5E
aXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9y
aWVzPiQoUHJvamVjdERpcik7JChQcm9qZWN0RGlyKS8uLjsgJChQcm9qZWN0RGlyKS8uLi8uLi9p
bmNsdWRlOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRl
RGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJV
RztfV0lORE9XUztfVVNSRExMO0xJQkdMRVNWMl9FWFBPUlRTO19DUlRfU0VDVVJFX05PX0RFUFJF
Q0FURTtOT01JTk1BWDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVm
aW5pdGlvbnM+DQotICAgICAgPE1pbmltYWxSZWJ1aWxkPnRydWU8L01pbmltYWxSZWJ1aWxkPg0K
LSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1l
Q2hlY2tzPg0KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWc8L1J1bnRp
bWVMaWJyYXJ5Pg0KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlcj5Vc2U8L1ByZWNvbXBpbGVkSGVh
ZGVyPg0KLSAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWw0PC9XYXJuaW5nTGV2ZWw+DQotICAgICAg
PFRyZWF0V2FybmluZ0FzRXJyb3I+dHJ1ZTwvVHJlYXRXYXJuaW5nQXNFcnJvcj4NCi0gICAgICA8
RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5FZGl0QW5kQ29udGludWU8L0RlYnVnSW5mb3JtYXRpb25G
b3JtYXQ+DQotICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzPjQxMDA7NDEyNzs0MTg5OzQy
Mzk7NDI0NDs0MjQ1OzQ1MTI7NDcwMjs0OTk2OyUoRGlzYWJsZVNwZWNpZmljV2FybmluZ3MpPC9E
aXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4NCi0gICAgICA8UHJlY29tcGlsZWRIZWFkZXJGaWxlPnBy
ZWNvbXBpbGVkLmg8L1ByZWNvbXBpbGVkSGVhZGVyRmlsZT4NCi0gICAgICA8QWRkaXRpb25hbE9w
dGlvbnM+JChFeHRlcm5hbENvbXBpbGVyT3B0aW9ucykgJShBZGRpdGlvbmFsT3B0aW9ucyk8L0Fk
ZGl0aW9uYWxPcHRpb25zPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPExpbms+DQotICAgICAg
PEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+ZDNkOS5saWI7ZHhndWlkLmxpYjslKEFkZGl0aW9uYWxE
ZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPg0KLSAgICAgIDxNb2R1bGVEZWZp
bml0aW9uRmlsZT5saWJHTEVTdjIuZGVmPC9Nb2R1bGVEZWZpbml0aW9uRmlsZT4NCi0gICAgICA8
R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4N
Ci0gICAgICA8U3ViU3lzdGVtPldpbmRvd3M8L1N1YlN5c3RlbT4NCi0gICAgICA8RGF0YUV4ZWN1
dGlvblByZXZlbnRpb24+DQotICAgICAgPC9EYXRhRXhlY3V0aW9uUHJldmVudGlvbj4NCi0gICAg
ICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDg2PC9UYXJnZXRNYWNoaW5lPg0KLSAgICA8L0xpbms+
DQotICAgIDxQb3N0QnVpbGRFdmVudD4NCi0gICAgICA8Q29tbWFuZD4lNDBlY2hvIG9uDQotbWtk
aXIgIiQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uKVwiDQotY29weSAiJChP
dXREaXIpbGliR0xFU3YyLmRsbCIgIiQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0
aW9uKVwiDQotY29weSAiJChPdXREaXIpbGliR0xFU3YyLmxpYiIgIiQoUHJvamVjdERpcikuLlwu
LlxsaWJcJChDb25maWd1cmF0aW9uKVwiDQotJTQwZWNobyBvZmYNCi08L0NvbW1hbmQ+DQotICAg
IDwvUG9zdEJ1aWxkRXZlbnQ+DQotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQotICA8SXRlbURl
ZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09
J1JlbGVhc2V8V2luMzInIj4NCi0gICAgPENsQ29tcGlsZT4NCi0gICAgICA8T3B0aW1pemF0aW9u
Pk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9u
PkFueVN1aXRhYmxlPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCi0gICAgICA8QWRkaXRpb25h
bEluY2x1ZGVEaXJlY3Rvcmllcz4kKFByb2plY3REaXIpOyQoUHJvamVjdERpcikvLi47ICQoUHJv
amVjdERpcikvLi4vLi4vaW5jbHVkZTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9B
ZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0
aW9ucz5BTkdMRV9ESVNBQkxFX1RSQUNFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO0xJ
QkdMRVNWMl9FWFBPUlRTO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWDtfU0VDVVJF
X1NDTD0wOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9u
cz4NCi0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+
DQotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPlVzZTwvUHJlY29tcGlsZWRIZWFkZXI+DQotICAg
ICAgPFdhcm5pbmdMZXZlbD5MZXZlbDQ8L1dhcm5pbmdMZXZlbD4NCi0gICAgICA8VHJlYXRXYXJu
aW5nQXNFcnJvcj50cnVlPC9UcmVhdFdhcm5pbmdBc0Vycm9yPg0KLSAgICAgIDxEZWJ1Z0luZm9y
bWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCi0g
ICAgICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+NDEwMDs0MTI3OzQxODk7NDIzOTs0MjQ0OzQy
NDU7NDUxMjs0NzAyOzQ3MTg7NDk5NjslKERpc2FibGVTcGVjaWZpY1dhcm5pbmdzKTwvRGlzYWJs
ZVNwZWNpZmljV2FybmluZ3M+DQotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyRmlsZT5wcmVjb21w
aWxlZC5oPC9QcmVjb21waWxlZEhlYWRlckZpbGU+DQotICAgICAgPEFkZGl0aW9uYWxPcHRpb25z
PiQoRXh0ZXJuYWxDb21waWxlck9wdGlvbnMpICUoQWRkaXRpb25hbE9wdGlvbnMpPC9BZGRpdGlv
bmFsT3B0aW9ucz4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxMaW5rPg0KLSAgICAgIDxBZGRp
dGlvbmFsRGVwZW5kZW5jaWVzPmQzZDkubGliO2R4Z3VpZC5saWI7JShBZGRpdGlvbmFsRGVwZW5k
ZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCi0gICAgICA8SWdub3JlQWxsRGVmYXVs
dExpYnJhcmllcz5mYWxzZTwvSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz4NCi0gICAgICA8TW9k
dWxlRGVmaW5pdGlvbkZpbGU+bGliR0xFU3YyLmRlZjwvTW9kdWxlRGVmaW5pdGlvbkZpbGU+DQot
ICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3Jt
YXRpb24+DQotICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+DQotICAgICAgPE9w
dGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+DQotICAgICAgPEVuYWJs
ZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4NCi0gICAgICA8RGF0YUV4
ZWN1dGlvblByZXZlbnRpb24+DQotICAgICAgPC9EYXRhRXhlY3V0aW9uUHJldmVudGlvbj4NCi0g
ICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDg2PC9UYXJnZXRNYWNoaW5lPg0KLSAgICA8L0xp
bms+DQotICAgIDxQb3N0QnVpbGRFdmVudD4NCi0gICAgICA8Q29tbWFuZD4lNDBlY2hvIG9uDQot
bWtkaXIgIiQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uKVwiDQotY29weSAi
JChPdXREaXIpbGliR0xFU3YyLmRsbCIgIiQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1
cmF0aW9uKVwiDQotY29weSAiJChPdXREaXIpbGliR0xFU3YyLmxpYiIgIiQoUHJvamVjdERpciku
LlwuLlxsaWJcJChDb25maWd1cmF0aW9uKVwiDQotJTQwZWNobyBvZmYNCi08L0NvbW1hbmQ+DQot
ICAgIDwvUG9zdEJ1aWxkRXZlbnQ+DQotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQotICA8SXRl
bURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p
Jz09J0RlYnVnfHg2NCciPg0KLSAgICA8TWlkbD4NCi0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+
WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4NCi0gICAgPC9NaWRsPg0KLSAgICA8Q2xDb21waWxlPg0K
LSAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRk
aXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKFByb2plY3REaXIpLy4uOyAkKFByb2plY3REaXIp
Ly4uLy4uL2luY2x1ZGU7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25h
bEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lO
MzI7X0RFQlVHO19XSU5ET1dTO19VU1JETEw7TElCR0xFU1YyX0VYUE9SVFM7X0NSVF9TRUNVUkVf
Tk9fREVQUkVDQVRFO05PTUlOTUFYOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9j
ZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8TWluaW1hbFJlYnVpbGQ+dHJ1ZTwvTWluaW1hbFJl
YnVpbGQ+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5FbmFibGVGYXN0Q2hlY2tzPC9CYXNp
Y1J1bnRpbWVDaGVja3M+DQotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1
ZzwvUnVudGltZUxpYnJhcnk+DQotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPlVzZTwvUHJlY29t
cGlsZWRIZWFkZXI+DQotICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDQ8L1dhcm5pbmdMZXZlbD4N
Ci0gICAgICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+NDEwMDs0MTI3OzQxODk7NDIzOTs0MjQ0
OzQyNDU7NDUxMjs0NzAyOzQ3MTg7NDk5NjslKERpc2FibGVTcGVjaWZpY1dhcm5pbmdzKTwvRGlz
YWJsZVNwZWNpZmljV2FybmluZ3M+DQotICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJv
Z3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KLSAgICAgIDxUcmVhdFdhcm5p
bmdBc0Vycm9yPnRydWU8L1RyZWF0V2FybmluZ0FzRXJyb3I+DQotICAgICAgPFByZWNvbXBpbGVk
SGVhZGVyRmlsZT5wcmVjb21waWxlZC5oPC9QcmVjb21waWxlZEhlYWRlckZpbGU+DQotICAgICAg
PEFkZGl0aW9uYWxPcHRpb25zPiQoRXh0ZXJuYWxDb21waWxlck9wdGlvbnMpICUoQWRkaXRpb25h
bE9wdGlvbnMpPC9BZGRpdGlvbmFsT3B0aW9ucz4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxM
aW5rPg0KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmQzZDkubGliO2R4Z3VpZC5saWI7
JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCi0gICAg
ICA8TW9kdWxlRGVmaW5pdGlvbkZpbGU+bGliR0xFU3YyLmRlZjwvTW9kdWxlRGVmaW5pdGlvbkZp
bGU+DQotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVn
SW5mb3JtYXRpb24+DQotICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+DQotICAg
ICAgPERhdGFFeGVjdXRpb25QcmV2ZW50aW9uPg0KLSAgICAgIDwvRGF0YUV4ZWN1dGlvblByZXZl
bnRpb24+DQotICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4N
Ci0gICAgPC9MaW5rPg0KLSAgICA8UG9zdEJ1aWxkRXZlbnQ+DQotICAgICAgPENvbW1hbmQ+JTQw
ZWNobyBvbg0KLW1rZGlyICIkKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbilc
Ig0KLWNvcHkgIiQoT3V0RGlyKWxpYkdMRVN2Mi5kbGwiICIkKFByb2plY3REaXIpLi5cLi5cbGli
XCQoQ29uZmlndXJhdGlvbilcIg0KLWNvcHkgIiQoT3V0RGlyKWxpYkdMRVN2Mi5saWIiICIkKFBy
b2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbilcIg0KLSU0MGVjaG8gb2ZmDQotPC9D
b21tYW5kPg0KLSAgICA8L1Bvc3RCdWlsZEV2ZW50Pg0KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3Vw
Pg0KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPg0KLSAgICA8TWlkbD4NCi0gICAgICA8VGFyZ2V0
RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4NCi0gICAgPC9NaWRsPg0KLSAgICA8
Q2xDb21waWxlPg0KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4N
Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+QW55U3VpdGFibGU8L0lubGluZUZ1bmN0
aW9uRXhwYW5zaW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQoUHJv
amVjdERpcikvLi47ICQoUHJvamVjdERpcikvLi4vLi4vaW5jbHVkZTslKEFkZGl0aW9uYWxJbmNs
dWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQ
cmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtMSUJH
TEVTVjJfRVhQT1JUUztfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7Tk9NSU5NQVg7X1NFQ1VSRV9T
Q0w9MDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+
DQotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5Pg0K
LSAgICAgIDxQcmVjb21waWxlZEhlYWRlcj5Vc2U8L1ByZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAg
IDxXYXJuaW5nTGV2ZWw+TGV2ZWw0PC9XYXJuaW5nTGV2ZWw+DQotICAgICAgPERpc2FibGVTcGVj
aWZpY1dhcm5pbmdzPjQxMDA7NDEyNzs0MTg5OzQyMzk7NDI0NDs0MjQ1OzQ1MTI7NDcwMjs0NzE4
OzQ5OTY7JShEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncyk8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdz
Pg0KLSAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJ
bmZvcm1hdGlvbkZvcm1hdD4NCi0gICAgICA8VHJlYXRXYXJuaW5nQXNFcnJvcj50cnVlPC9UcmVh
dFdhcm5pbmdBc0Vycm9yPg0KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlckZpbGU+cHJlY29tcGls
ZWQuaDwvUHJlY29tcGlsZWRIZWFkZXJGaWxlPg0KLSAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4k
KEV4dGVybmFsQ29tcGlsZXJPcHRpb25zKSAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25h
bE9wdGlvbnM+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8TGluaz4NCi0gICAgICA8QWRkaXRp
b25hbERlcGVuZGVuY2llcz5kM2Q5LmxpYjtkeGd1aWQubGliOyUoQWRkaXRpb25hbERlcGVuZGVu
Y2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQotICAgICAgPElnbm9yZUFsbERlZmF1bHRM
aWJyYXJpZXM+ZmFsc2U8L0lnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM+DQotICAgICAgPE1vZHVs
ZURlZmluaXRpb25GaWxlPmxpYkdMRVN2Mi5kZWY8L01vZHVsZURlZmluaXRpb25GaWxlPg0KLSAg
ICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0
aW9uPg0KLSAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPg0KLSAgICAgIDxPcHRp
bWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPg0KLSAgICAgIDxFbmFibGVD
T01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+DQotICAgICAgPERhdGFFeGVj
dXRpb25QcmV2ZW50aW9uPg0KLSAgICAgIDwvRGF0YUV4ZWN1dGlvblByZXZlbnRpb24+DQotICAg
ICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4NCi0gICAgPC9MaW5r
Pg0KLSAgICA8UG9zdEJ1aWxkRXZlbnQ+DQotICAgICAgPENvbW1hbmQ+JTQwZWNobyBvbg0KLW1r
ZGlyICIkKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbilcIg0KLWNvcHkgIiQo
T3V0RGlyKWxpYkdMRVN2Mi5kbGwiICIkKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJh
dGlvbilcIg0KLWNvcHkgIiQoT3V0RGlyKWxpYkdMRVN2Mi5saWIiICIkKFByb2plY3REaXIpLi5c
Li5cbGliXCQoQ29uZmlndXJhdGlvbilcIg0KLSU0MGVjaG8gb2ZmDQotPC9Db21tYW5kPg0KLSAg
ICA8L1Bvc3RCdWlsZEV2ZW50Pg0KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KLSAgPEl0ZW1H
cm91cD4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx0aGlyZF9wYXJ0eVxtdXJtdXJoYXNo
XE11cm11ckhhc2gzLmNwcCI+DQotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5Ob3RVc2luZzwv
UHJlY29tcGlsZWRIZWFkZXI+DQotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPk5vdFVzaW5n
PC9QcmVjb21waWxlZEhlYWRlcj4NCi0gICAgICA8UHJlY29tcGlsZWRIZWFkZXIgQ29uZGl0aW9u
PSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5Ob3RVc2luZzwv
UHJlY29tcGlsZWRIZWFkZXI+DQotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5Ob3RVc2luZzwv
UHJlY29tcGlsZWRIZWFkZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9IkJ1ZmZlci5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iQ29udGV4dC5j
cHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cY29tbW9uXGRlYnVnLmNwcCI+DQot
ICAgICAgPFByZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQ
bGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5Ob3RVc2luZzwvUHJlY29tcGlsZWRIZWFkZXI+DQot
ICAgICAgPFByZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQ
bGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPk5vdFVzaW5nPC9QcmVjb21waWxlZEhlYWRlcj4N
Ci0gICAgICA8UHJlY29tcGlsZWRIZWFkZXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5Ob3RVc2luZzwvUHJlY29tcGlsZWRIZWFkZXI+DQot
ICAgICAgPFByZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQ
bGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5Ob3RVc2luZzwvUHJlY29tcGlsZWRIZWFkZXI+DQot
ICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGNvbW1vblxldmVu
dF90cmFjZXIuY3BwIj4NCi0gICAgICA8UHJlY29tcGlsZWRIZWFkZXIgQ29uZGl0aW9uPSInJChD
b25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPk5vdFVzaW5nPC9QcmVj
b21waWxlZEhlYWRlcj4NCi0gICAgICA8UHJlY29tcGlsZWRIZWFkZXIgQ29uZGl0aW9uPSInJChD
b25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+Tm90VXNpbmc8L1By
ZWNvbXBpbGVkSGVhZGVyPg0KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlciBDb25kaXRpb249Iick
KENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPk5vdFVzaW5nPC9QcmVj
b21waWxlZEhlYWRlcj4NCi0gICAgICA8UHJlY29tcGlsZWRIZWFkZXIgQ29uZGl0aW9uPSInJChD
b25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPk5vdFVzaW5nPC9QcmVj
b21waWxlZEhlYWRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iRmVuY2UuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkZsb2F0MTZUb0Zsb2F0
MzIuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkZyYW1lYnVmZmVyLmNwcCIgLz4N
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJIYW5kbGVBbGxvY2F0b3IuY3BwIiAvPg0KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9ImxpYkdMRVN2Mi5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0ibWFpbi5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icHJlY29tcGlsZWQu
Y3BwIj4NCi0gICAgICA8UHJlY29tcGlsZWRIZWFkZXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkNyZWF0ZTwvUHJlY29tcGlsZWRIZWFk
ZXI+DQotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlv
bil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPkNyZWF0ZTwvUHJlY29tcGlsZWRIZWFk
ZXI+DQotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlv
bil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+Q3JlYXRlPC9QcmVjb21waWxlZEhlYWRlcj4N
Ci0gICAgICA8UHJlY29tcGlsZWRIZWFkZXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPkNyZWF0ZTwvUHJlY29tcGlsZWRIZWFkZXI+DQot
ICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlByb2dyYW0uY3BwIiAv
Pg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlByb2dyYW1CaW5hcnkuY3BwIiAvPg0KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9IlF1ZXJ5LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxjb21tb25cUmVmQ291bnRPYmplY3QuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9IlJlbmRlcmJ1ZmZlci5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVy
ZXJcQmxpdC5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcRmVuY2Ux
MS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcRmVuY2U5LmNwcCIg
Lz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxCdWZmZXJTdG9yYWdlLmNwcCIg
Lz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxCdWZmZXJTdG9yYWdlMTEuY3Bw
IiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXEJ1ZmZlclN0b3JhZ2U5LmNw
cCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxJbWFnZS5jcHAiIC8+DQot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcSW1hZ2U5LmNwcCIgLz4NCi0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxJbmRleEJ1ZmZlci5jcHAiIC8+DQotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcSW5kZXhCdWZmZXIxMS5jcHAiIC8+DQotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcSW5kZXhCdWZmZXI5LmNwcCIgLz4NCi0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSJyZW5kZXJlclxJbmRleERhdGFNYW5hZ2VyLmNwcCIgLz4NCi0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxJbWFnZVNTRTIuY3BwIiAvPg0KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9InJlbmRlcmVyXEltYWdlMTEuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9InJlbmRlcmVyXEluZGV4UmFuZ2VDYWNoZS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0icmVuZGVyZXJcSW5wdXRMYXlvdXRDYWNoZS5jcHAiIC8+DQotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0icmVuZGVyZXJcUXVlcnkxMS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0icmVuZGVyZXJcUXVlcnk5LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJy
ZW5kZXJlclxSZW5kZXJlci5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVy
ZXJcUmVuZGVyZXIxMS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJc
cmVuZGVyZXIxMV91dGlscy5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVy
ZXJcUmVuZGVyZXI5LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxy
ZW5kZXJlcjlfdXRpbHMuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVy
XFJlbmRlclRhcmdldDExLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJl
clxSZW5kZXJUYXJnZXQ5LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJl
clxSZW5kZXJTdGF0ZUNhY2hlLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5k
ZXJlclxTaGFkZXJFeGVjdXRhYmxlMTEuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
InJlbmRlcmVyXFNoYWRlckV4ZWN1dGFibGU5LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSJyZW5kZXJlclxTd2FwQ2hhaW4xMS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0icmVuZGVyZXJcU3dhcENoYWluOS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
cmVuZGVyZXJcVGV4dHVyZVN0b3JhZ2UuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
InJlbmRlcmVyXFRleHR1cmVTdG9yYWdlMTEuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9InJlbmRlcmVyXFRleHR1cmVTdG9yYWdlOS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0icmVuZGVyZXJcVmVydGV4QnVmZmVyLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSJyZW5kZXJlclxWZXJ0ZXhCdWZmZXIxMS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0icmVuZGVyZXJcVmVydGV4QnVmZmVyOS5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0icmVuZGVyZXJcVmVydGV4RGF0YU1hbmFnZXIuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9InJlbmRlcmVyXFZlcnRleERlY2xhcmF0aW9uQ2FjaGUuY3BwIiAvPg0KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9IlJlc291cmNlTWFuYWdlci5jcHAiIC8+DQotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iU2hhZGVyLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJUZXh0
dXJlLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJVbmlmb3JtLmNwcCIgLz4NCi0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSJ1dGlsaXRpZXMuY3BwIiAvPg0KLSAgPC9JdGVtR3JvdXA+
DQotICA8SXRlbUdyb3VwPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGNvbW1vblxkZWJ1
Zy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGNvbW1vblxldmVudF90cmFjZXIu
aCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxjb21tb25cc3lzdGVtLmgiIC8+DQot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cdGhpcmRfcGFydHlcbXVybXVyaGFzaFxNdXJtdXJI
YXNoMy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHRoaXJkX3BhcnR5XHRyYWNl
X2V2ZW50XHRyYWNlX2V2ZW50LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iYW5nbGV0
eXBlcy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkJpbmFyeVN0cmVhbS5oIiAvPg0K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkJ1ZmZlci5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9ImNvbnN0YW50cy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkNvbnRleHQu
aCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJGZW5jZS5oIiAvPg0KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9IkZyYW1lYnVmZmVyLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cLi5caW5jbHVkZVxHTEVTMlxnbDIuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlwuLlxpbmNsdWRlXEdMRVMyXGdsMmV4dC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXC4uXGluY2x1ZGVcR0xFUzJcZ2wycGxhdGZvcm0uaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSJIYW5kbGVBbGxvY2F0b3IuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJt
YWluLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0ibWF0aHV0aWwuaCIgLz4NCi0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSJwcmVjb21waWxlZC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9IlByb2dyYW0uaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJQcm9ncmFtQmlu
YXJ5LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iUXVlcnkuaCIgLz4NCi0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxjb21tb25cUmVmQ291bnRPYmplY3QuaCIgLz4NCi0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSJSZW5kZXJidWZmZXIuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSJyZW5kZXJlclxCbGl0LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVy
ZXJcRmVuY2UxMS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEZlbmNl
OS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEZlbmNlSW1wbC5oIiAv
Pg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEJ1ZmZlclN0b3JhZ2UuaCIgLz4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxCdWZmZXJTdG9yYWdlMTEuaCIgLz4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxCdWZmZXJTdG9yYWdlOS5oIiAvPg0K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXGdlbmVyYXRlbWlwLmgiIC8+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcSW1hZ2UuaCIgLz4NCi0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSJyZW5kZXJlclxJbWFnZTExLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0icmVuZGVyZXJcSW1hZ2U5LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVy
ZXJcSW5kZXhCdWZmZXIuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxJ
bmRleEJ1ZmZlcjExLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcSW5k
ZXhCdWZmZXI5LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcSW5kZXhE
YXRhTWFuYWdlci5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEluZGV4
UmFuZ2VDYWNoZS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXElucHV0
TGF5b3V0Q2FjaGUuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxRdWVy
eTExLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcUXVlcnlJbXBsLmgi
IC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcUXVlcnk5LmgiIC8+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcUmVuZGVyZXIuaCIgLz4NCi0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSJyZW5kZXJlclxSZW5kZXJlcjExLmgiIC8+DQotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0icmVuZGVyZXJccmVuZGVyZXIxMV91dGlscy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9InJlbmRlcmVyXFJlbmRlcmVyOS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9InJlbmRlcmVyXHJlbmRlcmVyOV91dGlscy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9InJlbmRlcmVyXFJlbmRlclRhcmdldC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
InJlbmRlcmVyXFJlbmRlclRhcmdldDExLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
cmVuZGVyZXJcUmVuZGVyVGFyZ2V0OS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJl
bmRlcmVyXFJlbmRlclN0YXRlQ2FjaGUuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJy
ZW5kZXJlclxTaGFkZXJDYWNoZS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRl
cmVyXFNoYWRlckV4ZWN1dGFibGUuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5k
ZXJlclxTaGFkZXJFeGVjdXRhYmxlMTEuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJy
ZW5kZXJlclxTaGFkZXJFeGVjdXRhYmxlOS5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
InJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRcY2xlYXIxMXZzLmgiIC8+DQotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xjb21waWxlZFxjbGVhcm11bHRpcGxlMTFwcy5o
IiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRc
Y2xlYXJzaW5nbGUxMXBzLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJc
c2hhZGVyc1xjb21waWxlZFxjb21wb25lbnRtYXNrcHMuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVkXGZsaXB5dnMuaCIgLz4NCi0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVkXGx1bWluYW5jZXBzLmgi
IC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xjb21waWxlZFxw
YXNzdGhyb3VnaDExdnMuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxz
aGFkZXJzXGNvbXBpbGVkXHBhc3N0aHJvdWdobHVtMTFwcy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9InJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRccGFzc3Rocm91Z2hsdW1hbHBoYTEx
cHMuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXGNvbXBp
bGVkXHBhc3N0aHJvdWdocHMuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJl
clxzaGFkZXJzXGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiMTFwcy5oIiAvPg0KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9InJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRccGFzc3Rocm91Z2hyZ2JhMTFw
cy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXHNoYWRlcnNcY29tcGls
ZWRcc3RhbmRhcmR2cy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFN3
YXBDaGFpbi5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFN3YXBDaGFp
bjExLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcU3dhcENoYWluOS5o
IiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFRleHR1cmVTdG9yYWdlLmgi
IC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcVGV4dHVyZVN0b3JhZ2UxMS5o
IiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFRleHR1cmVTdG9yYWdlOS5o
IiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFZlcnRleEJ1ZmZlci5oIiAv
Pg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFZlcnRleEJ1ZmZlcjExLmgiIC8+
DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcVmVydGV4QnVmZmVyOS5oIiAvPg0K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXHZlcnRleGNvbnZlcnNpb24uaCIgLz4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxWZXJ0ZXhEYXRhTWFuYWdlci5oIiAv
Pg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFZlcnRleERlY2xhcmF0aW9uQ2Fj
aGUuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZXNvdXJjZS5oIiAvPg0KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9IlJlc291cmNlTWFuYWdlci5oIiAvPg0KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9IlNoYWRlci5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlRleHR1cmUu
aCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJVbmlmb3JtLmgiIC8+DQotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0idXRpbGl0aWVzLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cY29tbW9uXHZlcnNpb24uaCIgLz4NCi0gIDwvSXRlbUdyb3VwPg0KLSAgPEl0ZW1Hcm91cD4N
Ci0gICAgPE5vbmUgSW5jbHVkZT0ibGliR0xFU3YyLmRlZiIgLz4NCi0gICAgPE5vbmUgSW5jbHVk
ZT0icmVuZGVyZXJcc2hhZGVyc1xCbGl0LnBzIiAvPg0KLSAgICA8Tm9uZSBJbmNsdWRlPSJyZW5k
ZXJlclxzaGFkZXJzXEJsaXQudnMiIC8+DQotICAgIDxOb25lIEluY2x1ZGU9InJlbmRlcmVyXHNo
YWRlcnNcQ2xlYXIxMS5obHNsIiAvPg0KLSAgICA8Tm9uZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFk
ZXJzXGdlbmVyYXRlX3NoYWRlcnMuYmF0IiAvPg0KLSAgICA8Tm9uZSBJbmNsdWRlPSJyZW5kZXJl
clxzaGFkZXJzXFBhc3N0aHJvdWdoMTEuaGxzbCIgLz4NCi0gIDwvSXRlbUdyb3VwPg0KLSAgPEl0
ZW1Hcm91cD4NCi0gICAgPFJlc291cmNlQ29tcGlsZSBJbmNsdWRlPSJsaWJHTEVTdjIucmMiIC8+
DQotICA8L0l0ZW1Hcm91cD4NCi0gIDxJdGVtR3JvdXA+DQotICAgIDxQcm9qZWN0UmVmZXJlbmNl
IEluY2x1ZGU9Ii4uXGNvbXBpbGVyXHByZXByb2Nlc3NvclxwcmVwcm9jZXNzb3IudmN4cHJvaiI+
DQotICAgICAgPFByb2plY3Q+e2ZiZTMyZGYzLTBmYjAtNGYyZi1hNDI0LTJjMjFiZDdiYzMyNX08
L1Byb2plY3Q+DQotICAgIDwvUHJvamVjdFJlZmVyZW5jZT4NCi0gICAgPFByb2plY3RSZWZlcmVu
Y2UgSW5jbHVkZT0iLi5cY29tcGlsZXJcdHJhbnNsYXRvci52Y3hwcm9qIj4NCi0gICAgICA8UHJv
amVjdD57NWIzYTZkYjgtMWU3ZS00MGQ3LTkyYjktZGE4YWFlNjE5ZmFkfTwvUHJvamVjdD4NCi0g
ICAgPC9Qcm9qZWN0UmVmZXJlbmNlPg0KLSAgPC9JdGVtR3JvdXA+DQotICA8SW1wb3J0IFByb2pl
Y3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPg0KLSAgPEltcG9y
dEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4NCi0gIDwvSW1wb3J0R3JvdXA+DQotPC9Q
cm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjeHByb2ouZmlsdGVycyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjeHByb2ou
ZmlsdGVycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTIyOWJhZjEyNGUxZTllZjUz
OGEyNWYzMzZjNmVmZjUzYThlNTU4ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdM
RVN2Mi52Y3hwcm9qLmZpbHRlcnMKKysrIC9kZXYvbnVsbApAQCAtMSw1MjcgKzAsMCBAQAot77u/
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08UHJvamVjdCBUb29sc1Zl
cnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVy
L21zYnVpbGQvMjAwMyI+DQotICA8SXRlbUdyb3VwPg0KLSAgICA8RmlsdGVyIEluY2x1ZGU9IlNv
dXJjZSBGaWxlcyI+DQotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezRGQzczN0YxLUM3QTUtNDM3
Ni1BMDY2LTJBMzJENzUyQTJGRn08L1VuaXF1ZUlkZW50aWZpZXI+DQotICAgICAgPEV4dGVuc2lv
bnM+Y3BwO2M7Y2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXg8L0V4dGVuc2lvbnM+
DQotICAgIDwvRmlsdGVyPg0KLSAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlcyI+DQot
ICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYyNUZCRTUy
RUJGQn08L1VuaXF1ZUlkZW50aWZpZXI+DQotICAgICAgPEV4dGVuc2lvbnM+aDtocHA7aHh4O2ht
O2lubDtpbmM7eHNkPC9FeHRlbnNpb25zPg0KLSAgICA8L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJ
bmNsdWRlPSJUaGlyZCBQYXJ0eSI+DQotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+e2RjMWRhYzQw
LTM1NjMtNDFiZS05ZTJkLWMyNTg4ZDg2NzBmYn08L1VuaXF1ZUlkZW50aWZpZXI+DQotICAgIDwv
RmlsdGVyPg0KLSAgICA8RmlsdGVyIEluY2x1ZGU9IlRoaXJkIFBhcnR5XE11cm11ckhhc2giPg0K
LSAgICAgIDxVbmlxdWVJZGVudGlmaWVyPntiMDAwNWQyZi05YjRhLTQ2NTktYTI3MC0xMzg4MTEx
NzRmNzN9PC9VbmlxdWVJZGVudGlmaWVyPg0KLSAgICA8L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJ
bmNsdWRlPSJIZWFkZXIgRmlsZXNcUmVuZGVyZXIiPg0KLSAgICAgIDxVbmlxdWVJZGVudGlmaWVy
Pns1NjJlNDY5ZC0xYWJiLTQ0YmMtYjdmYS01NWVlZmJmNzVhY2N9PC9VbmlxdWVJZGVudGlmaWVy
Pg0KLSAgICA8L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJbmNsdWRlPSJTaGFkZXJzIj4NCi0gICAg
ICA8VW5pcXVlSWRlbnRpZmllcj57NmRjMDMwNmYtNjM5Ni00ZTgwLTllZjktMDliNThhYTUzYzRk
fTwvVW5pcXVlSWRlbnRpZmllcj4NCi0gICAgPC9GaWx0ZXI+DQotICAgIDxGaWx0ZXIgSW5jbHVk
ZT0iU2hhZGVyc1xDb21waWxlZCI+DQotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezYzMzI3MDVi
LTE5OTktNDI5Mi1hMzhiLWRkNDczMjk3MzRhYX08L1VuaXF1ZUlkZW50aWZpZXI+DQotICAgIDwv
RmlsdGVyPg0KLSAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlc1xSZW5kZXJlciI+DQot
ICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezkzYTc2OTY0LTc3YTMtNGIyMC1hNmY1LWUxNGU3NjJk
NGUxNH08L1VuaXF1ZUlkZW50aWZpZXI+DQotICAgIDwvRmlsdGVyPg0KLSAgICA8RmlsdGVyIElu
Y2x1ZGU9IkhlYWRlciBGaWxlc1xSZW5kZXJlcjkiPg0KLSAgICAgIDxVbmlxdWVJZGVudGlmaWVy
PnszODc3ZjM1ZS04NDVjLTRlOTUtYjlhNS1jN2Q4YjlmMzA3YzV9PC9VbmlxdWVJZGVudGlmaWVy
Pg0KLSAgICA8L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXNcUmVu
ZGVyZXIxMSI+DQotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezJkNzBmZDYwLTZkZWEtNDg5Zi1h
YzA5LTE2ODkwZDMyNTY2OX08L1VuaXF1ZUlkZW50aWZpZXI+DQotICAgIDwvRmlsdGVyPg0KLSAg
ICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlc1xSZW5kZXJlcjkiPg0KLSAgICAgIDxVbmlx
dWVJZGVudGlmaWVyPns2MGUxNGYwNC0yY2YyLTRhMDctYjNlZi03YzY4YTgyYmEyZDl9PC9Vbmlx
dWVJZGVudGlmaWVyPg0KLSAgICA8L0ZpbHRlcj4NCi0gICAgPEZpbHRlciBJbmNsdWRlPSJTb3Vy
Y2UgRmlsZXNcUmVuZGVyZXIxMSI+DQotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezcyZGI2MWQz
LWUwODEtNGI1OC1iYzYzLWEwNGE4YTcwNTg1Zn08L1VuaXF1ZUlkZW50aWZpZXI+DQotICAgIDwv
RmlsdGVyPg0KLSAgICA8RmlsdGVyIEluY2x1ZGU9IlRoaXJkIFBhcnR5XHRyYWNlX2V2ZW50Ij4N
Ci0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57ZWJmYzE2MTQtOGYwYi00OGM3LWI2YmQtMjk1YmY5
MWVmODVjfTwvVW5pcXVlSWRlbnRpZmllcj4NCi0gICAgPC9GaWx0ZXI+DQotICA8L0l0ZW1Hcm91
cD4NCi0gIDxJdGVtR3JvdXA+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iQnVmZmVyLmNwcCI+
DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+
DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iQ29udGV4dC5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+
U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGNvbW1vblxkZWJ1Zy5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZp
bGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
IkZlbmNlLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAg
PC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iRmxvYXQxNlRvRmxvYXQzMi5j
cHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21w
aWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IkZyYW1lYnVmZmVyLmNwcCI+DQotICAgICAg
PEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iSGFuZGxlQWxsb2NhdG9yLmNwcCI+DQotICAgICAgPEZpbHRlcj5T
b3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0ibGliR0xFU3YyLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0Zp
bHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0ibWFpbi5j
cHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21w
aWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IlByb2dyYW0uY3BwIj4NCi0gICAgICA8Rmls
dGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSJQcm9ncmFtQmluYXJ5LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2Ug
RmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iUXVlcnkuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAg
ICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxjb21tb25cUmVmQ291
bnRPYmplY3QuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAg
ICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJSZW5kZXJidWZmZXIuY3Bw
Ij4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGls
ZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJSZXNvdXJjZU1hbmFnZXIuY3BwIj4NCi0gICAg
ICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSJTaGFkZXIuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBG
aWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSJUZXh0dXJlLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0g
ICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0idXRpbGl0aWVzLmNwcCI+
DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+
DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcSW1hZ2UuY3BwIj4NCi0gICAgICA8
RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4N
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxUZXh0dXJlU3RvcmFnZS5jcHAiPg0K
LSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xD
b21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFJlbmRlcmVyLmNwcCI+
DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI8L0ZpbHRlcj4NCi0gICAgPC9D
bENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cdGhpcmRfcGFydHlcbXVybXVy
aGFzaFxNdXJtdXJIYXNoMy5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+VGhpcmQgUGFydHlcTXVybXVy
SGFzaDwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSJyZW5kZXJlclxJbmRleERhdGFNYW5hZ2VyLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2Ug
RmlsZXNcUmVuZGVyZXI8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0icmVuZGVyZXJcVmVydGV4RGF0YU1hbmFnZXIuY3BwIj4NCi0gICAgICA8Rmls
dGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxJbWFnZS5jcHAiPg0KLSAgICAgIDxGaWx0
ZXI+UmVuZGVyZXI8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0icmVuZGVyZXJcSW1hZ2VTU0UyLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2Ug
RmlsZXNcUmVuZGVyZXI8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0icmVuZGVyZXJcVmVydGV4QnVmZmVyLmNwcCI+DQotICAgICAgPEZpbHRlcj5T
b3VyY2UgRmlsZXNcUmVuZGVyZXI8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcSW5kZXhCdWZmZXIuY3BwIj4NCi0gICAgICA8Rmls
dGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSJVbmlmb3JtLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3Vy
Y2UgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0icmVuZGVyZXJcQnVmZmVyU3RvcmFnZS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNl
IEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9InJlbmRlcmVyXEJ1ZmZlclN0b3JhZ2UxMS5jcHAiPg0KLSAgICAgIDxGaWx0
ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcRmVuY2UxMS5jcHAiPg0KLSAgICAgIDxG
aWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+
DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcSW1hZ2UxMS5jcHAiPg0KLSAgICAg
IDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBp
bGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcSW5kZXhCdWZmZXIxMS5jcHAi
Pg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAg
PC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcUXVlcnkxMS5j
cHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0g
ICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcUmVuZGVy
ZXIxMS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRl
cj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJc
cmVuZGVyZXIxMV91dGlscy5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRl
cmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0icmVuZGVyZXJcUmVuZGVyVGFyZ2V0MTEuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBG
aWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9InJlbmRlcmVyXFNoYWRlckV4ZWN1dGFibGUxMS5jcHAiPg0KLSAgICAgIDxG
aWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+
DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcU3dhcENoYWluMTEuY3BwIj4NCi0g
ICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+DQotICAgIDwvQ2xD
b21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFRleHR1cmVTdG9yYWdl
MTEuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+
DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFZl
cnRleEJ1ZmZlcjExLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIx
MTwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJy
ZW5kZXJlclxCdWZmZXJTdG9yYWdlOS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVz
XFJlbmRlcmVyOTwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSJyZW5kZXJlclxGZW5jZTkuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxl
c1xSZW5kZXJlcjk8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0icmVuZGVyZXJcSW1hZ2U5LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmls
ZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9InJlbmRlcmVyXEluZGV4QnVmZmVyOS5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291
cmNlIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxRdWVyeTkuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNv
dXJjZSBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcUmVuZGVyZXI5LmNwcCI+DQotICAgICAgPEZpbHRl
cj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXHJlbmRlcmVyOV91dGlscy5jcHAiPg0KLSAg
ICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPg0KLSAgICA8L0NsQ29t
cGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxSZW5kZXJUYXJnZXQ5LmNw
cCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAg
IDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRlcmVyXFNoYWRlckV4
ZWN1dGFibGU5LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI5PC9G
aWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJlbmRl
cmVyXFN3YXBDaGFpbjkuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xSZW5kZXJl
cjk8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
cmVuZGVyZXJcVGV4dHVyZVN0b3JhZ2U5LmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmls
ZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9InJlbmRlcmVyXFZlcnRleEJ1ZmZlcjkuY3BwIj4NCi0gICAgICA8RmlsdGVyPlNv
dXJjZSBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcQmxpdC5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291
cmNlIEZpbGVzXFJlbmRlcmVyOTwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxJbnB1dExheW91dENhY2hlLmNwcCI+DQotICAgICAg
PEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGls
ZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxSZW5kZXJTdGF0ZUNhY2hlLmNw
cCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPg0KLSAg
ICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZW5kZXJlclxWZXJ0ZXhE
ZWNsYXJhdGlvbkNhY2hlLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVy
ZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
InByZWNvbXBpbGVkLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4N
Ci0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmVuZGVyZXJcSW5k
ZXhSYW5nZUNhY2hlLmNwcCI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVuZGVyZXI8
L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
Y29tbW9uXGV2ZW50X3RyYWNlci5jcHAiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9G
aWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgPC9JdGVtR3JvdXA+DQotICA8SXRlbUdyb3Vw
Pg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IkJpbmFyeVN0cmVhbS5oIj4NCi0gICAgICA8Rmls
dGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSJCdWZmZXIuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0Zp
bHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iQ29udGV4
dC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5j
bHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJGZW5jZS5oIj4NCi0gICAgICA8RmlsdGVy
PkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSJGcmFtZWJ1ZmZlci5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwv
RmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwu
LlxpbmNsdWRlXEdMRVMyXGdsMi5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmls
dGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxp
bmNsdWRlXEdMRVMyXGdsMmV4dC5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmls
dGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxp
bmNsdWRlXEdMRVMyXGdsMnBsYXRmb3JtLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVz
PC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ikhh
bmRsZUFsbG9jYXRvci5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0K
LSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJtYWluLmgiPg0KLSAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Im1hdGh1dGlsLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVy
IEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9IlByb2dyYW0uaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0g
ICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iUHJvZ3JhbUJpbmFyeS5o
Ij4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVk
ZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJRdWVyeS5oIj4NCi0gICAgICA8RmlsdGVyPkhl
YWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxjb21tb25cUmVmQ291bnRPYmplY3QuaCI+DQotICAgICAgPEZpbHRlcj5IZWFk
ZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iUmVuZGVyYnVmZmVyLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0
ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlc291cmNl
LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNs
dWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IlJlc291cmNlTWFuYWdlci5oIj4NCi0gICAg
ICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSJTaGFkZXIuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmls
ZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
VGV4dHVyZS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0KLSAgICA8
L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJ1dGlsaXRpZXMuaCI+DQotICAg
ICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cY29tbW9uXHZlcnNpb24uaCI+DQotICAgICAgPEZpbHRl
cj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iYW5nbGV0eXBlcy5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwv
RmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx0
aGlyZF9wYXJ0eVxtdXJtdXJoYXNoXE11cm11ckhhc2gzLmgiPg0KLSAgICAgIDxGaWx0ZXI+VGhp
cmQgUGFydHlcTXVybXVySGFzaDwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSJVbmlmb3JtLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVz
PC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJl
bmRlcmVyXHNoYWRlcnNcY29tcGlsZWRccGFzc3Rocm91Z2gxMXZzLmgiPg0KLSAgICAgIDxGaWx0
ZXI+U2hhZGVyc1xDb21waWxlZDwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVkXHBhc3N0aHJvdWdocHMu
aCI+DQotICAgICAgPEZpbHRlcj5TaGFkZXJzXENvbXBpbGVkPC9GaWx0ZXI+DQotICAgIDwvQ2xJ
bmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXHNoYWRlcnNcY29tcGls
ZWRcc3RhbmRhcmR2cy5oIj4NCi0gICAgICA8RmlsdGVyPlNoYWRlcnNcQ29tcGlsZWQ8L0ZpbHRl
cj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJc
c2hhZGVyc1xjb21waWxlZFxjb21wb25lbnRtYXNrcHMuaCI+DQotICAgICAgPEZpbHRlcj5TaGFk
ZXJzXENvbXBpbGVkPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9InJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRcZmxpcHl2cy5oIj4NCi0gICAgICA8
RmlsdGVyPlNoYWRlcnNcQ29tcGlsZWQ8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xjb21waWxlZFxsdW1pbmFuY2Vw
cy5oIj4NCi0gICAgICA8RmlsdGVyPlNoYWRlcnNcQ29tcGlsZWQ8L0ZpbHRlcj4NCi0gICAgPC9D
bEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xjb21w
aWxlZFxwYXNzdGhyb3VnaHJnYmExMXBzLmgiPg0KLSAgICAgIDxGaWx0ZXI+U2hhZGVyc1xDb21w
aWxlZDwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSJyZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiMTFwcy5oIj4NCi0gICAg
ICA8RmlsdGVyPlNoYWRlcnNcQ29tcGlsZWQ8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xjb21waWxlZFxwYXNzdGhy
b3VnaGx1bTExcHMuaCI+DQotICAgICAgPEZpbHRlcj5TaGFkZXJzXENvbXBpbGVkPC9GaWx0ZXI+
DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXHNo
YWRlcnNcY29tcGlsZWRccGFzc3Rocm91Z2hsdW1hbHBoYTExcHMuaCI+DQotICAgICAgPEZpbHRl
cj5TaGFkZXJzXENvbXBpbGVkPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXHNoYWRlcnNcY29tcGlsZWRcY2xlYXIxMXZzLmgiPg0K
LSAgICAgIDxGaWx0ZXI+U2hhZGVyc1xDb21waWxlZDwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVk
ZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXGNvbXBpbGVkXGNs
ZWFybXVsdGlwbGUxMXBzLmgiPg0KLSAgICAgIDxGaWx0ZXI+U2hhZGVyc1xDb21waWxlZDwvRmls
dGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJl
clxzaGFkZXJzXGNvbXBpbGVkXGNsZWFyc2luZ2xlMTFwcy5oIj4NCi0gICAgICA8RmlsdGVyPlNo
YWRlcnNcQ29tcGlsZWQ8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cY29tbW9uXHN5c3RlbS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBG
aWxlczwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxjb21tb25cZGVidWcuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRl
cj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJc
QnVmZmVyU3RvcmFnZS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjwv
RmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5k
ZXJlclxGZW5jZUltcGwuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI8
L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVu
ZGVyZXJcZ2VuZXJhdGVtaXAuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVy
ZXI8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
cmVuZGVyZXJcSW1hZ2UuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI8
L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVu
ZGVyZXJcSW5kZXhCdWZmZXIuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVy
ZXI8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
cmVuZGVyZXJcSW5kZXhEYXRhTWFuYWdlci5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxl
c1xSZW5kZXJlcjwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSJyZW5kZXJlclxRdWVyeUltcGwuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmls
ZXNcUmVuZGVyZXI8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0icmVuZGVyZXJcUmVuZGVyZXIuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmls
ZXNcUmVuZGVyZXI8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0icmVuZGVyZXJcUmVuZGVyVGFyZ2V0LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVy
IEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9InJlbmRlcmVyXFNoYWRlckV4ZWN1dGFibGUuaCI+DQotICAgICAgPEZpbHRl
cj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcU3dhcENoYWluLmgiPg0KLSAgICAgIDxGaWx0
ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFRleHR1cmVTdG9yYWdlLmgiPg0KLSAgICAg
IDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRl
Pg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFZlcnRleEJ1ZmZlci5oIj4NCi0g
ICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjwvRmlsdGVyPg0KLSAgICA8L0NsSW5j
bHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclx2ZXJ0ZXhjb252ZXJzaW9u
LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyPC9GaWx0ZXI+DQotICAg
IDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFZlcnRleERh
dGFNYW5hZ2VyLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyPC9GaWx0
ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVy
XEJ1ZmZlclN0b3JhZ2UxMS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJl
cjExPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
InJlbmRlcmVyXEluZGV4QnVmZmVyMTEuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNc
UmVuZGVyZXIxMTwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSJyZW5kZXJlclxRdWVyeTExLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVz
XFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0icmVuZGVyZXJcUmVuZGVyZXIxMS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBG
aWxlc1xSZW5kZXJlcjExPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9InJlbmRlcmVyXFJlbmRlclRhcmdldDExLmgiPg0KLSAgICAgIDxGaWx0ZXI+
SGVhZGVyIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcU2hhZGVyRXhlY3V0YWJsZTExLmgiPg0KLSAg
ICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbElu
Y2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcU3dhcENoYWluMTEuaCI+
DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPg0KLSAgICA8
L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxUZXh0dXJlU3Rv
cmFnZTExLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRl
cj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJc
VmVydGV4QnVmZmVyMTEuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIx
MTwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJy
ZW5kZXJlclxCdWZmZXJTdG9yYWdlOS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xS
ZW5kZXJlcjk8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0icmVuZGVyZXJcRmVuY2U5LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJl
bmRlcmVyOTwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSJyZW5kZXJlclxJbWFnZTkuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVu
ZGVyZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9InJlbmRlcmVyXEluZGV4QnVmZmVyOS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxl
c1xSZW5kZXJlcjk8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0icmVuZGVyZXJcUXVlcnk5LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVz
XFJlbmRlcmVyOTwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSJyZW5kZXJlclxSZW5kZXJlcjkuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmls
ZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9InJlbmRlcmVyXHJlbmRlcmVyOV91dGlscy5oIj4NCi0gICAgICA8RmlsdGVyPkhl
YWRlciBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcUmVuZGVyVGFyZ2V0OS5oIj4NCi0gICAgICA8Rmls
dGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcU2hhZGVyRXhlY3V0YWJsZTkuaCI+DQot
ICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xJ
bmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFN3YXBDaGFpbjkuaCI+
DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAgIDwv
Q2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXFRleHR1cmVTdG9y
YWdlOS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4N
Ci0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcVmVy
dGV4QnVmZmVyOS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjk8L0Zp
bHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVy
ZXJcRmVuY2UxMS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjExPC9G
aWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRl
cmVyXEltYWdlMTEuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwv
RmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5k
ZXJlclxyZW5kZXJlcjExX3V0aWxzLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJl
bmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0icmVuZGVyZXJcRmVuY2U5LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJl
bmRlcmVyXFJlbmRlcmVyOTwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSJyZW5kZXJlclxRdWVyeTExLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVy
IEZpbGVzXFJlbmRlcmVyXFJlbmRlcmVyMTE8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcQmxpdC5oIj4NCi0gICAgICA8RmlsdGVy
PkhlYWRlciBGaWxlc1xSZW5kZXJlcjk8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcU2hhZGVyQ2FjaGUuaCI+DQotICAgICAgPEZp
bHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXI5PC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXElucHV0TGF5b3V0Q2FjaGUuaCI+DQot
ICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcUmVuZGVyZXIxMTwvRmlsdGVyPg0KLSAgICA8L0Ns
SW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJyZW5kZXJlclxSZW5kZXJTdGF0ZUNh
Y2hlLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXFJlbmRlcmVyMTE8L0ZpbHRlcj4N
Ci0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0icmVuZGVyZXJcVmVy
dGV4RGVjbGFyYXRpb25DYWNoZS5oIj4NCi0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5k
ZXJlcjk8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iY29uc3RhbnRzLmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQot
ICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InByZWNvbXBpbGVkLmgi
Pg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRl
Pg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlbmRlcmVyXEluZGV4UmFuZ2VDYWNoZS5oIj4N
Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xSZW5kZXJlcjwvRmlsdGVyPg0KLSAgICA8L0Ns
SW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxjb21tb25cZXZlbnRfdHJhY2Vy
LmgiPg0KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNs
dWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHRoaXJkX3BhcnR5XHRyYWNlX2V2ZW50
XHRyYWNlX2V2ZW50LmgiPg0KLSAgICAgIDxGaWx0ZXI+VGhpcmQgUGFydHlcdHJhY2VfZXZlbnQ8
L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICA8L0l0ZW1Hcm91cD4NCi0gIDxJdGVtR3Jv
dXA+DQotICAgIDxOb25lIEluY2x1ZGU9InJlbmRlcmVyXHNoYWRlcnNcQmxpdC5wcyI+DQotICAg
ICAgPEZpbHRlcj5TaGFkZXJzPC9GaWx0ZXI+DQotICAgIDwvTm9uZT4NCi0gICAgPE5vbmUgSW5j
bHVkZT0icmVuZGVyZXJcc2hhZGVyc1xCbGl0LnZzIj4NCi0gICAgICA8RmlsdGVyPlNoYWRlcnM8
L0ZpbHRlcj4NCi0gICAgPC9Ob25lPg0KLSAgICA8Tm9uZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFk
ZXJzXGdlbmVyYXRlX3NoYWRlcnMuYmF0Ij4NCi0gICAgICA8RmlsdGVyPlNoYWRlcnM8L0ZpbHRl
cj4NCi0gICAgPC9Ob25lPg0KLSAgICA8Tm9uZSBJbmNsdWRlPSJyZW5kZXJlclxzaGFkZXJzXFBh
c3N0aHJvdWdoMTEuaGxzbCI+DQotICAgICAgPEZpbHRlcj5TaGFkZXJzPC9GaWx0ZXI+DQotICAg
IDwvTm9uZT4NCi0gICAgPE5vbmUgSW5jbHVkZT0icmVuZGVyZXJcc2hhZGVyc1xDbGVhcjExLmhs
c2wiPg0KLSAgICAgIDxGaWx0ZXI+U2hhZGVyczwvRmlsdGVyPg0KLSAgICA8L05vbmU+DQotICAg
IDxOb25lIEluY2x1ZGU9ImxpYkdMRVN2Mi5kZWYiIC8+DQotICA8L0l0ZW1Hcm91cD4NCi0gIDxJ
dGVtR3JvdXA+DQotICAgIDxSZXNvdXJjZUNvbXBpbGUgSW5jbHVkZT0ibGliR0xFU3YyLnJjIiAv
Pg0KLSAgPC9JdGVtR3JvdXA+DQotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWFp
bi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21haW4uY3BwCmlu
ZGV4IDZkN2EyNDEzNDBmOWU3Yjk0N2IzMTc5NTg5YjY1MzJlZTEwNzNiY2MuLjUwZTI1OTMzMjhk
MTg4YzEzMWVkZWZmZmFjMWQ2NGY2NmU3YWZkNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmNwcApAQCAtMTMsNiArMTMsNDAgQEAKIAogc3RhdGlj
IERXT1JEIGN1cnJlbnRUTFMgPSBUTFNfT1VUX09GX0lOREVYRVM7CiAKK25hbWVzcGFjZSBnbAor
eworCitDdXJyZW50ICpBbGxvY2F0ZUN1cnJlbnQoKQoreworICAgIEN1cnJlbnQgKmN1cnJlbnQg
PSAoQ3VycmVudCopTG9jYWxBbGxvYyhMUFRSLCBzaXplb2YoQ3VycmVudCkpOworCisgICAgaWYg
KCFjdXJyZW50KQorICAgIHsKKyAgICAgICAgRVJSKCJDb3VsZCBub3QgYWxsb2NhdGUgdGhyZWFk
IGxvY2FsIHN0b3JhZ2UuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIEFT
U0VSVChjdXJyZW50VExTICE9IFRMU19PVVRfT0ZfSU5ERVhFUyk7CisgICAgVGxzU2V0VmFsdWUo
Y3VycmVudFRMUywgY3VycmVudCk7CisKKyAgICBjdXJyZW50LT5jb250ZXh0ID0gTlVMTDsKKyAg
ICBjdXJyZW50LT5kaXNwbGF5ID0gTlVMTDsKKworICAgIHJldHVybiBjdXJyZW50OworfQorCit2
b2lkIERlYWxsb2NhdGVDdXJyZW50KCkKK3sKKyAgICB2b2lkICpjdXJyZW50ID0gVGxzR2V0VmFs
dWUoY3VycmVudFRMUyk7CisKKyAgICBpZiAoY3VycmVudCkKKyAgICB7CisgICAgICAgIExvY2Fs
RnJlZSgoSExPQ0FMKWN1cnJlbnQpOworICAgIH0KK30KKworfQorCiBleHRlcm4gIkMiIEJPT0wg
V0lOQVBJIERsbE1haW4oSElOU1RBTkNFIGluc3RhbmNlLCBEV09SRCByZWFzb24sIExQVk9JRCBy
ZXNlcnZlZCkKIHsKICAgICBzd2l0Y2ggKHJlYXNvbikKQEAgLTI5LDM2ICs2MywxNyBAQCBleHRl
cm4gIkMiIEJPT0wgV0lOQVBJIERsbE1haW4oSElOU1RBTkNFIGluc3RhbmNlLCBEV09SRCByZWFz
b24sIExQVk9JRCByZXNlcnZlZAogICAgICAgICAvLyBGYWxsIHRocm91Z2h0IHRvIGluaXRpYWxp
emUgaW5kZXgKICAgICAgIGNhc2UgRExMX1RIUkVBRF9BVFRBQ0g6CiAgICAgICAgIHsKLSAgICAg
ICAgICAgIGdsOjpDdXJyZW50ICpjdXJyZW50ID0gKGdsOjpDdXJyZW50KilMb2NhbEFsbG9jKExQ
VFIsIHNpemVvZihnbDo6Q3VycmVudCkpOwotCi0gICAgICAgICAgICBpZiAoY3VycmVudCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUbHNTZXRWYWx1ZShjdXJyZW50VExTLCBjdXJy
ZW50KTsKLQotICAgICAgICAgICAgICAgIGN1cnJlbnQtPmNvbnRleHQgPSBOVUxMOwotICAgICAg
ICAgICAgICAgIGN1cnJlbnQtPmRpc3BsYXkgPSBOVUxMOwotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZ2w6OkFsbG9jYXRlQ3VycmVudCgpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwog
ICAgICAgY2FzZSBETExfVEhSRUFEX0RFVEFDSDoKICAgICAgICAgewotICAgICAgICAgICAgdm9p
ZCAqY3VycmVudCA9IFRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOwotCi0gICAgICAgICAgICBpZiAo
Y3VycmVudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMb2NhbEZyZWUoKEhMT0NB
TCljdXJyZW50KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdsOjpEZWFsbG9jYXRlQ3Vy
cmVudCgpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBETExfUFJPQ0VT
U19ERVRBQ0g6CiAgICAgICAgIHsKLSAgICAgICAgICAgIHZvaWQgKmN1cnJlbnQgPSBUbHNHZXRW
YWx1ZShjdXJyZW50VExTKTsKLQotICAgICAgICAgICAgaWYgKGN1cnJlbnQpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgTG9jYWxGcmVlKChITE9DQUwpY3VycmVudCk7Ci0gICAgICAg
ICAgICB9Ci0KKyAgICAgICAgICAgIGdsOjpEZWFsbG9jYXRlQ3VycmVudCgpOwogICAgICAgICAg
ICAgVGxzRnJlZShjdXJyZW50VExTKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTcx
LDEwICs4NiwyMCBAQCBleHRlcm4gIkMiIEJPT0wgV0lOQVBJIERsbE1haW4oSElOU1RBTkNFIGlu
c3RhbmNlLCBEV09SRCByZWFzb24sIExQVk9JRCByZXNlcnZlZAogCiBuYW1lc3BhY2UgZ2wKIHsK
LXZvaWQgbWFrZUN1cnJlbnQoQ29udGV4dCAqY29udGV4dCwgZWdsOjpEaXNwbGF5ICpkaXNwbGF5
LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpCisKK0N1cnJlbnQgKkdldEN1cnJlbnREYXRhKCkKIHsK
ICAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMp
OwogCisgICAgLy8gQU5HTEUgaXNzdWUgNDg4OiB3aGVuIHRoZSBkbGwgaXMgbG9hZGVkIGFmdGVy
IHRocmVhZCBpbml0aWFsaXphdGlvbiwKKyAgICAvLyB0aHJlYWQgbG9jYWwgc3RvcmFnZSAoY3Vy
cmVudCkgbWlnaHQgbm90IGV4aXN0IHlldC4KKyAgICByZXR1cm4gKGN1cnJlbnQgPyBjdXJyZW50
IDogQWxsb2NhdGVDdXJyZW50KCkpOworfQorCit2b2lkIG1ha2VDdXJyZW50KENvbnRleHQgKmNv
bnRleHQsIGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKQorewor
ICAgIEN1cnJlbnQgKmN1cnJlbnQgPSBHZXRDdXJyZW50RGF0YSgpOworCiAgICAgY3VycmVudC0+
Y29udGV4dCA9IGNvbnRleHQ7CiAgICAgY3VycmVudC0+ZGlzcGxheSA9IGRpc3BsYXk7CiAKQEAg
LTg2LDcgKzExMSw3IEBAIHZvaWQgbWFrZUN1cnJlbnQoQ29udGV4dCAqY29udGV4dCwgZWdsOjpE
aXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpCiAKIENvbnRleHQgKmdldENv
bnRleHQoKQogewotICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUo
Y3VycmVudFRMUyk7CisgICAgQ3VycmVudCAqY3VycmVudCA9IEdldEN1cnJlbnREYXRhKCk7CiAK
ICAgICByZXR1cm4gY3VycmVudC0+Y29udGV4dDsKIH0KQEAgLTExMiw3ICsxMzcsNyBAQCBDb250
ZXh0ICpnZXROb25Mb3N0Q29udGV4dCgpCiAKIGVnbDo6RGlzcGxheSAqZ2V0RGlzcGxheSgpCiB7
Ci0gICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExT
KTsKKyAgICBDdXJyZW50ICpjdXJyZW50ID0gR2V0Q3VycmVudERhdGEoKTsKIAogICAgIHJldHVy
biBjdXJyZW50LT5kaXNwbGF5OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9tYWluLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL21haW4uaAppbmRleCAxOTZhZmFlYWI2N2U3NDJmNzkyM2Q5MWRiMDU2MzFjZTlkOTNl
MGRkLi5iNDEzZjIzMjBjMTUxZmQ3MjBhM2ZmMzhkYjRhZGY2MDUyZmJiZjg2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21haW4uaAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21haW4uaApAQCAtMTAsNyArMTAsNiBA
QAogI2RlZmluZSBMSUJHTEVTVjJfTUFJTl9IXwogCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgi
Ci0jaW5jbHVkZSAiY29tbW9uL3N5c3RlbS5oIgogCiBuYW1lc3BhY2UgZWdsCiB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21hdGh1dGlsLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21hdGh1dGlsLmgKaW5kZXggYmI0
OGI5NGVhZjcxYTQ5ZDA1MzEyYzEzOWI0ZTU3NzJiYmI4YTFlOC4uZjkwMjEzMWEzNTIyMWJmNjBm
NzcyMDJkOTlhYzBiOGRhNjE4MTJiYiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9tYXRodXRpbC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvbWF0aHV0aWwuaApAQCAtMTEsNyArMTEsNiBAQAogCiAjaW5jbHVkZSA8
aW50cmluLmg+CiAKLSNpbmNsdWRlICJjb21tb24vc3lzdGVtLmgiCiAjaW5jbHVkZSAiY29tbW9u
L2RlYnVnLmgiCiAKIG5hbWVzcGFjZSBnbApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9wcmVjb21waWxlZC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9wcmVjb21waWxlZC5oCmluZGV4IDU4YWQxODE4NzRiMzJmYTVjMzM0
ZjM2MWE0NzY2OTdkMzA2ZDMyNGUuLjRiOWFjYzc5OWRjMWYzNWJkNDZjZDRlOGY4NGEzMzUyOWU1
ZDNlYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cHJlY29tcGlsZWQuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3ByZWNvbXBpbGVkLmgKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxkM2Q5Lmg+CiAjaW5j
bHVkZSA8ZDNkMTEuaD4KICNpbmNsdWRlIDxkeGdpLmg+CisjaW5jbHVkZSA8ZHhnaTFfMi5oPgog
I2luY2x1ZGUgPGQzZGNvbXBpbGVyLmg+CiAKICNpZmRlZiBfTVNDX1ZFUgpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9CbGl0LmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQmxpdC5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhM2NlMzljNjMyNGIwODI0MjZjOTI2YTc1
YmYwNTlhODdhNWQ5ZDIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9CbGl0
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU5NSArMCwwIEBACi0jaW5jbHVkZSAicHJlY29tcGls
ZWQuaCIKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIEJsaXQuY3BwOiBTdXJmYWNlIGNvcHkgdXRp
bGl0eSBjbGFzcy4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9CbGl0LmgiCi0KLSNp
bmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9y
ZW5kZXJlcjlfdXRpbHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0
b3JhZ2U5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldDkuaCIK
LSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXI5LmgiCi0jaW5jbHVkZSAibGli
R0xFU3YyL0ZyYW1lYnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5o
IgotCi1uYW1lc3BhY2UKLXsKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9j
b21waWxlZC9zdGFuZGFyZHZzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL3NoYWRl
cnMvY29tcGlsZWQvZmxpcHl2cy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9zaGFk
ZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvc2hhZGVycy9jb21waWxlZC9sdW1pbmFuY2Vwcy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL2NvbXBvbmVudG1hc2twcy5oIgotCi1jb25zdCBCWVRF
KiBjb25zdCBnX3NoYWRlckNvZGVbXSA9Ci17Ci0gICAgZ192czIwX3N0YW5kYXJkdnMsCi0gICAg
Z192czIwX2ZsaXB5dnMsCi0gICAgZ19wczIwX3Bhc3N0aHJvdWdocHMsCi0gICAgZ19wczIwX2x1
bWluYW5jZXBzLAotICAgIGdfcHMyMF9jb21wb25lbnRtYXNrcHMKLX07Ci0KLWNvbnN0IHNpemVf
dCBnX3NoYWRlclNpemVbXSA9Ci17Ci0gICAgc2l6ZW9mKGdfdnMyMF9zdGFuZGFyZHZzKSwKLSAg
ICBzaXplb2YoZ192czIwX2ZsaXB5dnMpLAotICAgIHNpemVvZihnX3BzMjBfcGFzc3Rocm91Z2hw
cyksCi0gICAgc2l6ZW9mKGdfcHMyMF9sdW1pbmFuY2VwcyksCi0gICAgc2l6ZW9mKGdfcHMyMF9j
b21wb25lbnRtYXNrcHMpCi19OwotfQotCi1uYW1lc3BhY2UgcngKLXsKLUJsaXQ6OkJsaXQocng6
OlJlbmRlcmVyOSAqcmVuZGVyZXIpCi0gIDogbVJlbmRlcmVyKHJlbmRlcmVyKSwgbVF1YWRWZXJ0
ZXhCdWZmZXIoTlVMTCksIG1RdWFkVmVydGV4RGVjbGFyYXRpb24oTlVMTCksIG1TYXZlZFN0YXRl
QmxvY2soTlVMTCksIG1TYXZlZFJlbmRlclRhcmdldChOVUxMKSwgbVNhdmVkRGVwdGhTdGVuY2ls
KE5VTEwpCi17Ci0gICAgaW5pdEdlb21ldHJ5KCk7Ci0gICAgbWVtc2V0KG1Db21waWxlZFNoYWRl
cnMsIDAsIHNpemVvZihtQ29tcGlsZWRTaGFkZXJzKSk7Ci19Ci0KLUJsaXQ6On5CbGl0KCkKLXsK
LSAgICBpZiAobVNhdmVkU3RhdGVCbG9jaykgbVNhdmVkU3RhdGVCbG9jay0+UmVsZWFzZSgpOwot
ICAgIGlmIChtUXVhZFZlcnRleEJ1ZmZlcikgbVF1YWRWZXJ0ZXhCdWZmZXItPlJlbGVhc2UoKTsK
LSAgICBpZiAobVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbikgbVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbi0+
UmVsZWFzZSgpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTSEFERVJfQ09VTlQ7IGkrKykK
LSAgICB7Ci0gICAgICAgIGlmIChtQ29tcGlsZWRTaGFkZXJzW2ldKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBtQ29tcGlsZWRTaGFkZXJzW2ldLT5SZWxlYXNlKCk7Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLXZvaWQgQmxpdDo6aW5pdEdlb21ldHJ5KCkKLXsKLSAgICBzdGF0aWMgY29uc3QgZmxv
YXQgcXVhZFtdID0KLSAgICB7Ci0gICAgICAgIC0xLCAtMSwKLSAgICAgICAgLTEsICAxLAotICAg
ICAgICAgMSwgLTEsCi0gICAgICAgICAxLCAgMQotICAgIH07Ci0KLSAgICBJRGlyZWN0M0REZXZp
Y2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0gICAgSFJFU1VMVCByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZVZlcnRleEJ1ZmZlcihzaXplb2YocXVhZCksIEQzRFVTQUdFX1dS
SVRFT05MWSwgMCwgRDNEUE9PTF9ERUZBVUxULCAmbVF1YWRWZXJ0ZXhCdWZmZXIsIE5VTEwpOwot
Ci0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA9
PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0g
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotCi0gICAg
dm9pZCAqbG9ja1B0ciA9IE5VTEw7Ci0gICAgcmVzdWx0ID0gbVF1YWRWZXJ0ZXhCdWZmZXItPkxv
Y2soMCwgMCwgJmxvY2tQdHIsIDApOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpIHx8IGxvY2tQ
dHIgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9G
VklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAgIG1lbWNweShsb2NrUHRy
LCBxdWFkLCBzaXplb2YocXVhZCkpOwotICAgIG1RdWFkVmVydGV4QnVmZmVyLT5VbmxvY2soKTsK
LQotICAgIHN0YXRpYyBjb25zdCBEM0RWRVJURVhFTEVNRU5UOSBlbGVtZW50c1tdID0KLSAgICB7
Ci0gICAgICAgIHsgMCwgMCwgRDNEREVDTFRZUEVfRkxPQVQyLCBEM0RERUNMTUVUSE9EX0RFRkFV
TFQsIEQzRERFQ0xVU0FHRV9QT1NJVElPTiwgMCB9LAotICAgICAgICBEM0RERUNMX0VORCgpCi0g
ICAgfTsKLQotICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVmVydGV4RGVjbGFyYXRpb24oZWxl
bWVudHMsICZtUXVhZFZlcnRleERlY2xhcmF0aW9uKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1P
UlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdGVtcGxhdGUgPGNsYXNzIEQzRFNoYWRl
clR5cGU+Ci1ib29sIEJsaXQ6OnNldFNoYWRlcihTaGFkZXJJZCBzb3VyY2UsIGNvbnN0IGNoYXIg
KnByb2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICBEM0RTaGFkZXJUeXBlICoocng6OlJlbmRl
cmVyOTo6KmNyZWF0ZVNoYWRlcikoY29uc3QgRFdPUkQgKiwgc2l6ZV90IGxlbmd0aCksCi0gICAg
ICAgICAgICAgICAgICAgICBIUkVTVUxUIChXSU5BUEkgSURpcmVjdDNERGV2aWNlOTo6KnNldFNo
YWRlcikoRDNEU2hhZGVyVHlwZSopKQotewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9
IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0KLSAgICBEM0RTaGFkZXJUeXBlICpzaGFkZXI7Ci0K
LSAgICBpZiAobUNvbXBpbGVkU2hhZGVyc1tzb3VyY2VdICE9IE5VTEwpCi0gICAgewotICAgICAg
ICBzaGFkZXIgPSBzdGF0aWNfY2FzdDxEM0RTaGFkZXJUeXBlKj4obUNvbXBpbGVkU2hhZGVyc1tz
b3VyY2VdKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgY29uc3QgQllURSogc2hh
ZGVyQ29kZSA9IGdfc2hhZGVyQ29kZVtzb3VyY2VdOwotICAgICAgICBzaXplX3Qgc2hhZGVyU2l6
ZSA9IGdfc2hhZGVyU2l6ZVtzb3VyY2VdOwotCi0gICAgICAgIHNoYWRlciA9IChtUmVuZGVyZXIt
PipjcmVhdGVTaGFkZXIpKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRFdPUkQqPihzaGFkZXJDb2Rl
KSwgc2hhZGVyU2l6ZSk7Ci0gICAgICAgIGlmICghc2hhZGVyKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBFUlIoIkZhaWxlZCB0byBjcmVhdGUgc2hhZGVyIGZvciBibGl0IG9wZXJhdGlvbiIpOwot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgbUNvbXBpbGVk
U2hhZGVyc1tzb3VyY2VdID0gc2hhZGVyOwotICAgIH0KLQotICAgIEhSRVNVTFQgaHIgPSAoZGV2
aWNlLT4qc2V0U2hhZGVyKShzaGFkZXIpOwotCi0gICAgaWYgKEZBSUxFRChocikpCi0gICAgewot
ICAgICAgICBFUlIoIkZhaWxlZCB0byBzZXQgc2hhZGVyIGZvciBibGl0IG9wZXJhdGlvbiIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgQmxpdDo6c2V0VmVydGV4U2hhZGVyKFNoYWRlcklkIHNoYWRlcikKLXsKLSAgICByZXR1cm4g
c2V0U2hhZGVyPElEaXJlY3QzRFZlcnRleFNoYWRlcjk+KHNoYWRlciwgInZzXzJfMCIsICZyeDo6
UmVuZGVyZXI5OjpjcmVhdGVWZXJ0ZXhTaGFkZXIsICZJRGlyZWN0M0REZXZpY2U5OjpTZXRWZXJ0
ZXhTaGFkZXIpOwotfQotCi1ib29sIEJsaXQ6OnNldFBpeGVsU2hhZGVyKFNoYWRlcklkIHNoYWRl
cikKLXsKLSAgICByZXR1cm4gc2V0U2hhZGVyPElEaXJlY3QzRFBpeGVsU2hhZGVyOT4oc2hhZGVy
LCAicHNfMl8wIiwgJnJ4OjpSZW5kZXJlcjk6OmNyZWF0ZVBpeGVsU2hhZGVyLCAmSURpcmVjdDNE
RGV2aWNlOTo6U2V0UGl4ZWxTaGFkZXIpOwotfQotCi1SRUNUIEJsaXQ6OmdldFN1cmZhY2VSZWN0
KElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlKSBjb25zdAotewotICAgIEQzRFNVUkZBQ0VfREVT
QyBkZXNjOwotICAgIHN1cmZhY2UtPkdldERlc2MoJmRlc2MpOwotCi0gICAgUkVDVCByZWN0Owot
ICAgIHJlY3QubGVmdCA9IDA7Ci0gICAgcmVjdC50b3AgPSAwOwotICAgIHJlY3QucmlnaHQgPSBk
ZXNjLldpZHRoOwotICAgIHJlY3QuYm90dG9tID0gZGVzYy5IZWlnaHQ7Ci0KLSAgICByZXR1cm4g
cmVjdDsKLX0KLQotYm9vbCBCbGl0Ojpib3hGaWx0ZXIoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJj
ZSwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpCi17Ci0gICAgSURpcmVjdDNEVGV4dHVyZTkgKnRl
eHR1cmUgPSBjb3B5U3VyZmFjZVRvVGV4dHVyZShzb3VyY2UsIGdldFN1cmZhY2VSZWN0KHNvdXJj
ZSkpOwotICAgIGlmICghdGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmlj
ZSgpOwotCi0gICAgc2F2ZVN0YXRlKCk7Ci0KLSAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwgdGV4
dHVyZSk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgZGVzdCk7Ci0KLSAgICBzZXRW
ZXJ0ZXhTaGFkZXIoU0hBREVSX1ZTX1NUQU5EQVJEKTsKLSAgICBzZXRQaXhlbFNoYWRlcihTSEFE
RVJfUFNfUEFTU1RIUk9VR0gpOwotCi0gICAgc2V0Q29tbW9uQmxpdFN0YXRlKCk7Ci0gICAgZGV2
aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NSU5GSUxURVIsIEQzRFRFWEZfTElORUFS
KTsKLSAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01BR0ZJTFRFUiwgRDNE
VEVYRl9MSU5FQVIpOwotCi0gICAgc2V0Vmlld3BvcnQoZ2V0U3VyZmFjZVJlY3QoZGVzdCksIDAs
IDApOwotCi0gICAgcmVuZGVyKCk7Ci0KLSAgICB0ZXh0dXJlLT5SZWxlYXNlKCk7Ci0KLSAgICBy
ZXN0b3JlU3RhdGUoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEJsaXQ6OmNvcHko
Z2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xl
bnVtIGRlc3RGb3JtYXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIEdMaW50IGxldmVsKQotewotICAgIFJlbmRlclRhcmdl
dDkgKnJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSA9
IE5VTEw7Ci0gICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBmcmFtZWJ1ZmZlci0+
Z2V0Q29sb3JidWZmZXIoMCk7Ci0KLSAgICBpZiAoY29sb3JidWZmZXIpCi0gICAgewotICAgICAg
ICByZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShjb2xvcmJ1
ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOwotICAgIH0KLSAgICAKLSAgICBpZiAocmVuZGVyVGFy
Z2V0KQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVuZGVyVGFyZ2V0LT5nZXRTdXJmYWNlKCk7
Ci0gICAgfQotCi0gICAgaWYgKCFzb3VyY2UpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0
byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldC4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgVGV4dHVyZVN0b3JhZ2U5
XzJEICpzdG9yYWdlOSA9IFRleHR1cmVTdG9yYWdlOV8yRDo6bWFrZVRleHR1cmVTdG9yYWdlOV8y
RChzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkg
KmRlc3RTdXJmYWNlID0gc3RvcmFnZTktPmdldFN1cmZhY2VMZXZlbChsZXZlbCwgdHJ1ZSk7Ci0g
ICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgCi0gICAgaWYgKGRlc3RTdXJmYWNlKQot
ICAgIHsKLSAgICAgICAgcmVzdWx0ID0gY29weShzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RGb3Jt
YXQsIHhvZmZzZXQsIHlvZmZzZXQsIGRlc3RTdXJmYWNlKTsKLSAgICAgICAgZGVzdFN1cmZhY2Ut
PlJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBzb3VyY2UtPlJlbGVhc2UoKTsKLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1ib29sIEJsaXQ6OmNvcHkoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZl
ciwgY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwg
R0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpCi17Ci0gICAgUmVuZGVyVGFyZ2V0OSAqcmVuZGVy
VGFyZ2V0ID0gTlVMTDsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlID0gTlVMTDsKLSAg
ICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1
ZmZlcigwKTsKLQotICAgIGlmIChjb2xvcmJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIHJlbmRlclRh
cmdldCA9IFJlbmRlclRhcmdldDk6Om1ha2VSZW5kZXJUYXJnZXQ5KGNvbG9yYnVmZmVyLT5nZXRS
ZW5kZXJUYXJnZXQoKSk7Ci0gICAgfQotICAgIAotICAgIGlmIChyZW5kZXJUYXJnZXQpCi0gICAg
ewotICAgICAgICBzb3VyY2UgPSByZW5kZXJUYXJnZXQtPmdldFN1cmZhY2UoKTsKLSAgICB9Ci0K
LSAgICBpZiAoIXNvdXJjZSkKLSAgICB7Ci0gICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZl
IHRoZSByZW5kZXIgdGFyZ2V0LiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBUZXh0dXJlU3RvcmFnZTlfQ3ViZSAqc3Rv
cmFnZTkgPSBUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlOV9DdWJlKHN0
b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVz
dFN1cmZhY2UgPSBzdG9yYWdlOS0+Z2V0Q3ViZU1hcFN1cmZhY2UodGFyZ2V0LCBsZXZlbCwgdHJ1
ZSk7Ci0gICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLQotICAgIGlmIChkZXN0U3VyZmFjZSkKLSAg
ICB7Ci0gICAgICAgIHJlc3VsdCA9IGNvcHkoc291cmNlLCBzb3VyY2VSZWN0LCBkZXN0Rm9ybWF0
LCB4b2Zmc2V0LCB5b2Zmc2V0LCBkZXN0U3VyZmFjZSk7Ci0gICAgICAgIGRlc3RTdXJmYWNlLT5S
ZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgc291cmNlLT5SZWxlYXNlKCk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotYm9vbCBCbGl0Ojpjb3B5KElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGNv
bnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCkKLXsKLSAgICBpZiAoIWRlc3Qp
Ci0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgSURpcmVjdDNERGV2
aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLQotICAgIEQzRFNVUkZBQ0Vf
REVTQyBzb3VyY2VEZXNjOwotICAgIEQzRFNVUkZBQ0VfREVTQyBkZXN0RGVzYzsKLSAgICBzb3Vy
Y2UtPkdldERlc2MoJnNvdXJjZURlc2MpOwotICAgIGRlc3QtPkdldERlc2MoJmRlc3REZXNjKTsK
LQotICAgIGlmIChzb3VyY2VEZXNjLkZvcm1hdCA9PSBkZXN0RGVzYy5Gb3JtYXQgJiYgZGVzdERl
c2MuVXNhZ2UgJiBEM0RVU0FHRV9SRU5ERVJUQVJHRVQgJiYKLSAgICAgICAgZDNkOV9nbDo6SXNG
b3JtYXRDaGFubmVsRXF1aXZhbGVudChkZXN0RGVzYy5Gb3JtYXQsIGRlc3RGb3JtYXQpKSAgIC8v
IENhbiB1c2UgU3RyZXRjaFJlY3QKLSAgICB7Ci0gICAgICAgIFJFQ1QgZGVzdFJlY3QgPSB7eG9m
ZnNldCwgeW9mZnNldCwgeG9mZnNldCArIChzb3VyY2VSZWN0LnJpZ2h0IC0gc291cmNlUmVjdC5s
ZWZ0KSwgeW9mZnNldCArIChzb3VyY2VSZWN0LmJvdHRvbSAtIHNvdXJjZVJlY3QudG9wKX07Ci0g
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5TdHJldGNoUmVjdChzb3VyY2UsICZzb3Vy
Y2VSZWN0LCBkZXN0LCAmZGVzdFJlY3QsIEQzRFRFWEZfUE9JTlQpOwotCi0gICAgICAgIGlmIChG
QUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBE
M0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZm9ybWF0Q29udmVy
dChzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RGb3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQsIGRlc3Qp
OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBCbGl0Ojpmb3JtYXRDb252ZXJ0
KElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMZW51
bSBkZXN0Rm9ybWF0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBJRGlyZWN0M0RTdXJm
YWNlOSAqZGVzdCkKLXsKLSAgICBJRGlyZWN0M0RUZXh0dXJlOSAqdGV4dHVyZSA9IGNvcHlTdXJm
YWNlVG9UZXh0dXJlKHNvdXJjZSwgc291cmNlUmVjdCk7Ci0gICAgaWYgKCF0ZXh0dXJlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIElEaXJlY3QzRERldmljZTkg
KmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0KLSAgICBzYXZlU3RhdGUoKTsKLQot
ICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCB0ZXh0dXJlKTsKLSAgICBkZXZpY2UtPlNldFJlbmRl
clRhcmdldCgwLCBkZXN0KTsKLQotICAgIHNldFZpZXdwb3J0KHNvdXJjZVJlY3QsIHhvZmZzZXQs
IHlvZmZzZXQpOwotCi0gICAgc2V0Q29tbW9uQmxpdFN0YXRlKCk7Ci0gICAgaWYgKHNldEZvcm1h
dENvbnZlcnRTaGFkZXJzKGRlc3RGb3JtYXQpKQotICAgIHsKLSAgICAgICAgcmVuZGVyKCk7Ci0g
ICAgfQotCi0gICAgdGV4dHVyZS0+UmVsZWFzZSgpOwotCi0gICAgcmVzdG9yZVN0YXRlKCk7Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBCbGl0OjpzZXRGb3JtYXRDb252ZXJ0U2hhZGVy
cyhHTGVudW0gZGVzdEZvcm1hdCkKLXsKLSAgICBib29sIG9rYXkgPSBzZXRWZXJ0ZXhTaGFkZXIo
U0hBREVSX1ZTX1NUQU5EQVJEKTsKLQotICAgIHN3aXRjaCAoZGVzdEZvcm1hdCkKLSAgICB7Ci0g
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAg
Y2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgY2FzZSBHTF9BTFBI
QToKLSAgICAgICAgb2theSA9IG9rYXkgJiYgc2V0UGl4ZWxTaGFkZXIoU0hBREVSX1BTX0NPTVBP
TkVOVE1BU0spOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0g
ICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgb2theSA9IG9rYXkgJiYgc2V0
UGl4ZWxTaGFkZXIoU0hBREVSX1BTX0xVTUlOQU5DRSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIGlmICghb2theSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBlbnVtIHsgWCA9IDAsIFkgPSAxLCBaID0gMiwgVyA9IDMgfTsKLQotICAgIC8vIFRoZSBt
ZWFuaW5nIG9mIHRoaXMgY29uc3RhbnQgZGVwZW5kcyBvbiB0aGUgc2hhZGVyIHRoYXQgd2FzIHNl
bGVjdGVkLgotICAgIC8vIFNlZSB0aGUgc2hhZGVyIGFzc2VtYmx5IGNvZGUgYWJvdmUgZm9yIGRl
dGFpbHMuCi0gICAgZmxvYXQgcHNDb25zdDBbNF0gPSB7IDAsIDAsIDAsIDAgfTsKLQotICAgIHN3
aXRjaCAoZGVzdEZvcm1hdCkKLSAgICB7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwot
ICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgcHND
b25zdDBbWF0gPSAxOwotICAgICAgICBwc0NvbnN0MFtaXSA9IDE7Ci0gICAgICAgIGJyZWFrOwot
Ci0gICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgcHNDb25zdDBbWF0gPSAxOwotICAgICAgICBw
c0NvbnN0MFtXXSA9IDE7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEdMX0FMUEhBOgot
ICAgICAgICBwc0NvbnN0MFtaXSA9IDE7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEdM
X0xVTUlOQU5DRToKLSAgICAgICAgcHNDb25zdDBbWV0gPSAxOwotICAgICAgICBicmVhazsKLQot
ICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgIHBzQ29uc3QwW1hdID0gMTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgbVJlbmRlcmVyLT5nZXREZXZpY2UoKS0+U2V0
UGl4ZWxTaGFkZXJDb25zdGFudEYoMCwgcHNDb25zdDAsIDEpOwotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLUlEaXJlY3QzRFRleHR1cmU5ICpCbGl0Ojpjb3B5U3VyZmFjZVRvVGV4dHVyZShJRGly
ZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSwgY29uc3QgUkVDVCAmc291cmNlUmVjdCkKLXsKLSAgICBp
ZiAoIXN1cmZhY2UpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBJ
RGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0gICAg
RDNEU1VSRkFDRV9ERVNDIHNvdXJjZURlc2M7Ci0gICAgc3VyZmFjZS0+R2V0RGVzYygmc291cmNl
RGVzYyk7Ci0KLSAgICAvLyBDb3B5IHRoZSByZW5kZXIgdGFyZ2V0IGludG8gYSB0ZXh0dXJlCi0g
ICAgSURpcmVjdDNEVGV4dHVyZTkgKnRleHR1cmU7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZp
Y2UtPkNyZWF0ZVRleHR1cmUoc291cmNlUmVjdC5yaWdodCAtIHNvdXJjZVJlY3QubGVmdCwgc291
cmNlUmVjdC5ib3R0b20gLSBzb3VyY2VSZWN0LnRvcCwgMSwgRDNEVVNBR0VfUkVOREVSVEFSR0VU
LCBzb3VyY2VEZXNjLkZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmdGV4dHVyZSwgTlVMTCk7Ci0K
LSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09
IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSURpcmVjdDNEVGV4dHVy
ZTkqKU5VTEwpOwotICAgIH0KLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICp0ZXh0dXJlU3VyZmFj
ZTsKLSAgICByZXN1bHQgPSB0ZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoMCwgJnRleHR1cmVTdXJm
YWNlKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChy
ZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1P
UlkpOwotICAgICAgICB0ZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSwgKElEaXJlY3QzRFRleHR1cmU5KilOVUxMKTsKLSAgICB9Ci0K
LSAgICBtUmVuZGVyZXItPmVuZFNjZW5lKCk7Ci0gICAgcmVzdWx0ID0gZGV2aWNlLT5TdHJldGNo
UmVjdChzdXJmYWNlLCAmc291cmNlUmVjdCwgdGV4dHVyZVN1cmZhY2UsIE5VTEwsIEQzRFRFWEZf
Tk9ORSk7Ci0KLSAgICB0ZXh0dXJlU3VyZmFjZS0+UmVsZWFzZSgpOwotCi0gICAgaWYgKEZBSUxF
RChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZW
SURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgIHRleHR1cmUt
PlJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAo
SURpcmVjdDNEVGV4dHVyZTkqKU5VTEwpOwotICAgIH0KLQotICAgIHJldHVybiB0ZXh0dXJlOwot
fQotCi12b2lkIEJsaXQ6OnNldFZpZXdwb3J0KGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQpCi17Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNl
ID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLQotICAgIEQzRFZJRVdQT1JUOSB2cDsKLSAgICB2
cC5YICAgICAgPSB4b2Zmc2V0OwotICAgIHZwLlkgICAgICA9IHlvZmZzZXQ7Ci0gICAgdnAuV2lk
dGggID0gc291cmNlUmVjdC5yaWdodCAtIHNvdXJjZVJlY3QubGVmdDsKLSAgICB2cC5IZWlnaHQg
PSBzb3VyY2VSZWN0LmJvdHRvbSAtIHNvdXJjZVJlY3QudG9wOwotICAgIHZwLk1pblogICA9IDAu
MGY7Ci0gICAgdnAuTWF4WiAgID0gMS4wZjsKLSAgICBkZXZpY2UtPlNldFZpZXdwb3J0KCZ2cCk7
Ci0KLSAgICBmbG9hdCBoYWxmUGl4ZWxBZGp1c3RbNF0gPSB7IC0xLjBmL3ZwLldpZHRoLCAxLjBm
L3ZwLkhlaWdodCwgMCwgMCB9OwotICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRG
KDAsIGhhbGZQaXhlbEFkanVzdCwgMSk7Ci19Ci0KLXZvaWQgQmxpdDo6c2V0Q29tbW9uQmxpdFN0
YXRlKCkKLXsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERl
dmljZSgpOwotCi0gICAgZGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKE5VTEwpOwotCi0g
ICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7
Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUsIEZBTFNF
KTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZB
TFNFKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxM
X05PTkUpOwotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxF
LCAwKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUs
IEQzRENPTE9SV1JJVEVFTkFCTEVfQUxQSEEgfCBEM0RDT0xPUldSSVRFRU5BQkxFX0JMVUUgfCBE
M0RDT0xPUldSSVRFRU5BQkxFX0dSRUVOIHwgRDNEQ09MT1JXUklURUVOQUJMRV9SRUQpOwotICAg
IGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JHQldSSVRFRU5BQkxFLCBGQUxTRSk7Ci0g
ICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSwgRkFMU0Up
OwotCi0gICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NQUdGSUxURVIsIEQz
RFRFWEZfUE9JTlQpOwotICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUlO
RklMVEVSLCBEM0RURVhGX1BPSU5UKTsKLSAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBE
M0RTQU1QX1NSR0JURVhUVVJFLCBGQUxTRSk7Ci0gICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUo
MCwgRDNEU0FNUF9BRERSRVNTVSwgRDNEVEFERFJFU1NfQ0xBTVApOwotICAgIGRldmljZS0+U2V0
U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfQUREUkVTU1YsIEQzRFRBRERSRVNTX0NMQU1QKTsKLQot
ICAgIFJFQ1Qgc2Npc3NvclJlY3QgPSB7MH07ICAgLy8gU2Npc3NvcmluZyBpcyBkaXNhYmxlZCBm
b3IgZmxpcHBpbmcsIGJ1dCB3ZSBuZWVkIHRoaXMgdG8gY2FwdHVyZSBhbmQgcmVzdG9yZSB0aGUg
b2xkIHJlY3RhbmdsZQotICAgIGRldmljZS0+U2V0U2Npc3NvclJlY3QoJnNjaXNzb3JSZWN0KTsK
LQotICAgIGZvcihpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0g
ICAgewotICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoaSwgMSk7Ci0gICAgfQot
fQotCi12b2lkIEJsaXQ6OnJlbmRlcigpCi17Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNl
ID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLQotICAgIEhSRVNVTFQgaHIgPSBkZXZpY2UtPlNl
dFN0cmVhbVNvdXJjZSgwLCBtUXVhZFZlcnRleEJ1ZmZlciwgMCwgMiAqIHNpemVvZihmbG9hdCkp
OwotICAgIGhyID0gZGV2aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbihtUXVhZFZlcnRleERlY2xh
cmF0aW9uKTsKLQotICAgIG1SZW5kZXJlci0+c3RhcnRTY2VuZSgpOwotICAgIGhyID0gZGV2aWNl
LT5EcmF3UHJpbWl0aXZlKEQzRFBUX1RSSUFOR0xFU1RSSVAsIDAsIDIpOwotfQotCi12b2lkIEJs
aXQ6OnNhdmVTdGF0ZSgpCi17Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRl
cmVyLT5nZXREZXZpY2UoKTsKLQotICAgIEhSRVNVTFQgaHI7Ci0KLSAgICBkZXZpY2UtPkdldERl
cHRoU3RlbmNpbFN1cmZhY2UoJm1TYXZlZERlcHRoU3RlbmNpbCk7Ci0gICAgZGV2aWNlLT5HZXRS
ZW5kZXJUYXJnZXQoMCwgJm1TYXZlZFJlbmRlclRhcmdldCk7Ci0KLSAgICBpZiAobVNhdmVkU3Rh
dGVCbG9jayA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgaHIgPSBkZXZpY2UtPkJlZ2luU3RhdGVC
bG9jaygpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VU
T0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsKLQotICAgICAgICBzZXRDb21t
b25CbGl0U3RhdGUoKTsKLQotICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXQgZHVtbXlDb25zdFs0
XSA9IHsgMCwgMCwgMCwgMCB9OwotCi0gICAgICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyKE5V
TEwpOwotICAgICAgICBkZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50RigwLCBkdW1teUNv
bnN0LCAxKTsKLSAgICAgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsKLSAgICAgICAg
ZGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50RigwLCBkdW1teUNvbnN0LCAxKTsKLQotICAg
ICAgICBEM0RWSUVXUE9SVDkgZHVtbXlWcDsKLSAgICAgICAgZHVtbXlWcC5YID0gMDsKLSAgICAg
ICAgZHVtbXlWcC5ZID0gMDsKLSAgICAgICAgZHVtbXlWcC5XaWR0aCA9IDE7Ci0gICAgICAgIGR1
bW15VnAuSGVpZ2h0ID0gMTsKLSAgICAgICAgZHVtbXlWcC5NaW5aID0gMDsKLSAgICAgICAgZHVt
bXlWcC5NYXhaID0gMTsKLQotICAgICAgICBkZXZpY2UtPlNldFZpZXdwb3J0KCZkdW1teVZwKTsK
LQotICAgICAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwgTlVMTCk7Ci0KLSAgICAgICAgZGV2aWNl
LT5TZXRTdHJlYW1Tb3VyY2UoMCwgbVF1YWRWZXJ0ZXhCdWZmZXIsIDAsIDApOwotCi0gICAgICAg
IGRldmljZS0+U2V0VmVydGV4RGVjbGFyYXRpb24obVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbik7Ci0K
LSAgICAgICAgaHIgPSBkZXZpY2UtPkVuZFN0YXRlQmxvY2soJm1TYXZlZFN0YXRlQmxvY2spOwot
ICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01F
TU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobVNhdmVk
U3RhdGVCbG9jayAhPSBOVUxMKTsKLQotICAgIGlmIChtU2F2ZWRTdGF0ZUJsb2NrICE9IE5VTEwp
Ci0gICAgewotICAgICAgICBociA9IG1TYXZlZFN0YXRlQmxvY2stPkNhcHR1cmUoKTsKLSAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgIH0KLX0KLQotdm9pZCBCbGl0OjpyZXN0b3Jl
U3RhdGUoKQotewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0
RGV2aWNlKCk7Ci0KLSAgICBkZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UobVNhdmVkRGVw
dGhTdGVuY2lsKTsKLSAgICBpZiAobVNhdmVkRGVwdGhTdGVuY2lsICE9IE5VTEwpCi0gICAgewot
ICAgICAgICBtU2F2ZWREZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKLSAgICAgICAgbVNhdmVkRGVw
dGhTdGVuY2lsID0gTlVMTDsKLSAgICB9Ci0KLSAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgw
LCBtU2F2ZWRSZW5kZXJUYXJnZXQpOwotICAgIGlmIChtU2F2ZWRSZW5kZXJUYXJnZXQgIT0gTlVM
TCkKLSAgICB7Ci0gICAgICAgIG1TYXZlZFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgICAg
ICBtU2F2ZWRSZW5kZXJUYXJnZXQgPSBOVUxMOwotICAgIH0KLQotICAgIEFTU0VSVChtU2F2ZWRT
dGF0ZUJsb2NrICE9IE5VTEwpOwotCi0gICAgaWYgKG1TYXZlZFN0YXRlQmxvY2sgIT0gTlVMTCkK
LSAgICB7Ci0gICAgICAgIG1TYXZlZFN0YXRlQmxvY2stPkFwcGx5KCk7Ci0gICAgfQotfQotCi19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL0JsaXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvQmxpdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzE4MDI4ZTY2MmQzZDU2
MWM3NmNkMGNhNmY1MmU4MTNlNjcyNWMzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvQmxpdC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLy8KLS8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgotLy8KLQotLy8gQmxpdC5jcHA6IFN1cmZhY2UgY29weSB1dGlsaXR5IGNsYXNzLgotCi0jaWZu
ZGVmIExJQkdMRVNWMl9CTElUX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9CTElUX0hfCi0KLSNpbmNs
dWRlICJjb21tb24vYW5nbGV1dGlscy5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLWNsYXNzIEZyYW1l
YnVmZmVyOwotfQotCi1uYW1lc3BhY2UgcngKLXsKLWNsYXNzIFJlbmRlcmVyOTsKLWNsYXNzIFRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ7Ci1jbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1
YmU7Ci0KLWNsYXNzIEJsaXQKLXsKLSAgcHVibGljOgotICAgIGV4cGxpY2l0IEJsaXQoUmVuZGVy
ZXI5ICpyZW5kZXJlcik7Ci0gICAgfkJsaXQoKTsKLQotICAgIC8vIENvcHkgZnJvbSBzb3VyY2Ug
c3VyZmFjZSB0byBkZXN0IHN1cmZhY2UuCi0gICAgLy8gc291cmNlUmVjdCwgeG9mZnNldCwgeW9m
ZnNldCBhcmUgaW4gRDNEIGNvb3JkaW5hdGVzICgwLDAgaW4gdXBwZXItbGVmdCkKLSAgICBib29s
IGNvcHkoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgUkVDVCAmc291cmNlUmVj
dCwgR0xlbnVtIGRlc3RGb3JtYXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIEdMaW50IGxldmVsKTsKLSAgICBib29sIGNv
cHkoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgUkVDVCAmc291cmNlUmVjdCwg
R0xlbnVtIGRlc3RGb3JtYXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwp
OwotCi0gICAgLy8gQ29weSBmcm9tIHNvdXJjZSBzdXJmYWNlIHRvIGRlc3Qgc3VyZmFjZS4KLSAg
ICAvLyBzb3VyY2VSZWN0LCB4b2Zmc2V0LCB5b2Zmc2V0IGFyZSBpbiBEM0QgY29vcmRpbmF0ZXMg
KDAsMCBpbiB1cHBlci1sZWZ0KQotICAgIC8vIHNvdXJjZSBpcyBpbnRlcnByZXRlZCBhcyBSR0JB
IGFuZCBkZXN0Rm9ybWF0IHNwZWNpZmllcyB0aGUgZGVzaXJlZCByZXN1bHQgZm9ybWF0LiBGb3Ig
ZXhhbXBsZSwgaWYgZGVzdEZvcm1hdCA9IEdMX1JHQiwgdGhlIGFscGhhIGNoYW5uZWwgd2lsbCBi
ZSBmb3JjZWQgdG8gMC4KLSAgICBib29sIGZvcm1hdENvbnZlcnQoSURpcmVjdDNEU3VyZmFjZTkg
KnNvdXJjZSwgY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0KTsKLQotICAg
IC8vIDJ4MiBib3ggZmlsdGVyIHNhbXBsZSBmcm9tIHNvdXJjZSB0byBkZXN0LgotICAgIC8vIFJl
cXVpcmVzIHRoYXQgc291cmNlIGlzIFJHQihBKSBhbmQgZGVzdCBoYXMgdGhlIHNhbWUgZm9ybWF0
IGFzIHNvdXJjZS4KLSAgICBib29sIGJveEZpbHRlcihJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNl
LCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCk7Ci0KLSAgcHJpdmF0ZToKLSAgICByeDo6UmVuZGVy
ZXI5ICptUmVuZGVyZXI7Ci0KLSAgICBJRGlyZWN0M0RWZXJ0ZXhCdWZmZXI5ICptUXVhZFZlcnRl
eEJ1ZmZlcjsKLSAgICBJRGlyZWN0M0RWZXJ0ZXhEZWNsYXJhdGlvbjkgKm1RdWFkVmVydGV4RGVj
bGFyYXRpb247Ci0KLSAgICB2b2lkIGluaXRHZW9tZXRyeSgpOwotCi0gICAgYm9vbCBzZXRGb3Jt
YXRDb252ZXJ0U2hhZGVycyhHTGVudW0gZGVzdEZvcm1hdCk7Ci0KLSAgICBib29sIGNvcHkoSURp
cmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xlbnVtIGRl
c3RGb3JtYXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIElEaXJlY3QzRFN1cmZhY2U5
ICpkZXN0KTsKLSAgICBJRGlyZWN0M0RUZXh0dXJlOSAqY29weVN1cmZhY2VUb1RleHR1cmUoSURp
cmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QpOwotICAgIHZv
aWQgc2V0Vmlld3BvcnQoY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCk7Ci0gICAgdm9pZCBzZXRDb21tb25CbGl0U3RhdGUoKTsKLSAgICBSRUNUIGdl
dFN1cmZhY2VSZWN0KElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlKSBjb25zdDsKLQotICAgIC8v
IFRoaXMgZW51bSBpcyB1c2VkIHRvIGluZGV4IG1Db21waWxlZFNoYWRlcnMgYW5kIG1TaGFkZXJT
b3VyY2UuCi0gICAgZW51bSBTaGFkZXJJZAotICAgIHsKLSAgICAgICAgU0hBREVSX1ZTX1NUQU5E
QVJELAotICAgICAgICBTSEFERVJfVlNfRkxJUFksCi0gICAgICAgIFNIQURFUl9QU19QQVNTVEhS
T1VHSCwKLSAgICAgICAgU0hBREVSX1BTX0xVTUlOQU5DRSwKLSAgICAgICAgU0hBREVSX1BTX0NP
TVBPTkVOVE1BU0ssCi0gICAgICAgIFNIQURFUl9DT1VOVAotICAgIH07Ci0KLSAgICAvLyBUaGlz
IGFjdHVhbGx5IGNvbnRhaW5zIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgb3IgSURpcmVjdDNEUGl4
ZWxTaGFkZXI5IGNhc3RlZCB0byBJVW5rbm93bi4KLSAgICBJVW5rbm93biAqbUNvbXBpbGVkU2hh
ZGVyc1tTSEFERVJfQ09VTlRdOwotCi0gICAgdGVtcGxhdGUgPGNsYXNzIEQzRFNoYWRlclR5cGU+
Ci0gICAgYm9vbCBzZXRTaGFkZXIoU2hhZGVySWQgc291cmNlLCBjb25zdCBjaGFyICpwcm9maWxl
LAotICAgICAgICAgICAgICAgICAgIEQzRFNoYWRlclR5cGUgKihSZW5kZXJlcjk6OipjcmVhdGVT
aGFkZXIpKGNvbnN0IERXT1JEICosIHNpemVfdCBsZW5ndGgpLAotICAgICAgICAgICAgICAgICAg
IEhSRVNVTFQgKFdJTkFQSSBJRGlyZWN0M0REZXZpY2U5Ojoqc2V0U2hhZGVyKShEM0RTaGFkZXJU
eXBlKikpOwotCi0gICAgYm9vbCBzZXRWZXJ0ZXhTaGFkZXIoU2hhZGVySWQgc2hhZGVyKTsKLSAg
ICBib29sIHNldFBpeGVsU2hhZGVyKFNoYWRlcklkIHNoYWRlcik7Ci0gICAgdm9pZCByZW5kZXIo
KTsKLQotICAgIHZvaWQgc2F2ZVN0YXRlKCk7Ci0gICAgdm9pZCByZXN0b3JlU3RhdGUoKTsKLSAg
ICBJRGlyZWN0M0RTdGF0ZUJsb2NrOSAqbVNhdmVkU3RhdGVCbG9jazsKLSAgICBJRGlyZWN0M0RT
dXJmYWNlOSAqbVNhdmVkUmVuZGVyVGFyZ2V0OwotICAgIElEaXJlY3QzRFN1cmZhY2U5ICptU2F2
ZWREZXB0aFN0ZW5jaWw7Ci0KLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQmxpdCk7Ci19
OwotfQotCi0jZW5kaWYgICAvLyBMSUJHTEVTVjJfQkxJVF9IXwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdlMTEu
Y3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9CdWZm
ZXJTdG9yYWdlMTEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjQ3ZDhhODk4
NTU0Yjk4NDc3YjZmZDQ4ZWE4MzdjNmRmOGJiYTNiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZTExLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM1OCAr
MCwwIEBACi0jaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBCdWZm
ZXJTdG9yYWdlMTEuY3BwIERlZmluZXMgdGhlIEJ1ZmZlclN0b3JhZ2UxMSBjbGFzcy4KLQotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdlMTEuaCIKLSNpbmNsdWRlICJs
aWJHTEVTdjIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlcjEx
LmgiCi0KLW5hbWVzcGFjZSByeAotewotCi1CdWZmZXJTdG9yYWdlMTE6OkJ1ZmZlclN0b3JhZ2Ux
MShSZW5kZXJlcjExICpyZW5kZXJlcikKLXsKLSAgICBtUmVuZGVyZXIgPSByZW5kZXJlcjsKLQot
ICAgIG1TdGFnaW5nQnVmZmVyID0gTlVMTDsKLSAgICBtU3RhZ2luZ0J1ZmZlclNpemUgPSAwOwot
Ci0gICAgbUJ1ZmZlciA9IE5VTEw7Ci0gICAgbUJ1ZmZlclNpemUgPSAwOwotCi0gICAgbVNpemUg
PSAwOwotCi0gICAgbVJlc29sdmVkRGF0YSA9IE5VTEw7Ci0gICAgbVJlc29sdmVkRGF0YVNpemUg
PSAwOwotICAgIG1SZXNvbHZlZERhdGFWYWxpZCA9IGZhbHNlOwotCi0gICAgbVJlYWRVc2FnZUNv
dW50ID0gMDsKLSAgICBtV3JpdGVVc2FnZUNvdW50ID0gMDsKLX0KLQotQnVmZmVyU3RvcmFnZTEx
Ojp+QnVmZmVyU3RvcmFnZTExKCkKLXsKLSAgICBpZiAobVN0YWdpbmdCdWZmZXIpCi0gICAgewot
ICAgICAgICBtU3RhZ2luZ0J1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtU3RhZ2luZ0J1ZmZl
ciA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1CdWZmZXIpCi0gICAgewotICAgICAgICBtQnVm
ZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1CdWZmZXIgPSBOVUxMOwotICAgIH0KLQotICAgIGlm
IChtUmVzb2x2ZWREYXRhKQotICAgIHsKLSAgICAgICAgZnJlZShtUmVzb2x2ZWREYXRhKTsKLSAg
ICAgICAgbVJlc29sdmVkRGF0YSA9IE5VTEw7Ci0gICAgfQotfQotCi1CdWZmZXJTdG9yYWdlMTEg
KkJ1ZmZlclN0b3JhZ2UxMTo6bWFrZUJ1ZmZlclN0b3JhZ2UxMShCdWZmZXJTdG9yYWdlICpidWZm
ZXJTdG9yYWdlKQotewotICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKEJ1ZmZlclN0b3JhZ2Ux
MSosIGJ1ZmZlclN0b3JhZ2UpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QnVmZmVyU3RvcmFn
ZTExKj4oYnVmZmVyU3RvcmFnZSk7Ci19Ci0KLXZvaWQgKkJ1ZmZlclN0b3JhZ2UxMTo6Z2V0RGF0
YSgpCi17Ci0gICAgaWYgKCFtUmVzb2x2ZWREYXRhVmFsaWQpCi0gICAgewotICAgICAgICBJRDNE
MTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0gICAgICAgIElEM0Qx
MURldmljZUNvbnRleHQgKmNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsK
LSAgICAgICAgSFJFU1VMVCByZXN1bHQ7Ci0KLSAgICAgICAgaWYgKCFtU3RhZ2luZ0J1ZmZlciB8
fCBtU3RhZ2luZ0J1ZmZlclNpemUgPCBtQnVmZmVyU2l6ZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKG1TdGFnaW5nQnVmZmVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1T
dGFnaW5nQnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgbVN0YWdpbmdCdWZmZXIg
PSBOVUxMOwotICAgICAgICAgICAgICAgIG1TdGFnaW5nQnVmZmVyU2l6ZSA9IDA7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIGJ1ZmZlckRlc2M7Ci0gICAg
ICAgICAgICBidWZmZXJEZXNjLkJ5dGVXaWR0aCA9IG1TaXplOwotICAgICAgICAgICAgYnVmZmVy
RGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX1NUQUdJTkc7Ci0gICAgICAgICAgICBidWZmZXJEZXNj
LkJpbmRGbGFncyA9IDA7Ci0gICAgICAgICAgICBidWZmZXJEZXNjLkNQVUFjY2Vzc0ZsYWdzID0g
RDNEMTFfQ1BVX0FDQ0VTU19SRUFEIHwgRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsKLSAgICAgICAg
ICAgIGJ1ZmZlckRlc2MuTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgICAgIGJ1ZmZlckRlc2MuU3Ry
dWN0dXJlQnl0ZVN0cmlkZSA9IDA7Ci0KLSAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3Jl
YXRlQnVmZmVyKCZidWZmZXJEZXNjLCBOVUxMLCAmbVN0YWdpbmdCdWZmZXIpOwotICAgICAgICAg
ICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgKHZvaWQqKU5VTEwpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBtU3RhZ2luZ0J1ZmZlclNpemUgPSBidWZmZXJEZXNjLkJ5dGVX
aWR0aDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghbVJlc29sdmVkRGF0YSB8fCBtUmVzb2x2
ZWREYXRhU2l6ZSA8IG1CdWZmZXJTaXplKQotICAgICAgICB7Ci0gICAgICAgICAgICBmcmVlKG1S
ZXNvbHZlZERhdGEpOwotICAgICAgICAgICAgbVJlc29sdmVkRGF0YSA9IG1hbGxvYyhtU2l6ZSk7
Ci0gICAgICAgICAgICBtUmVzb2x2ZWREYXRhU2l6ZSA9IG1TaXplOwotICAgICAgICB9Ci0KLSAg
ICAgICAgRDNEMTFfQk9YIHNyY0JveDsKLSAgICAgICAgc3JjQm94LmxlZnQgPSAwOwotICAgICAg
ICBzcmNCb3gucmlnaHQgPSBtU2l6ZTsKLSAgICAgICAgc3JjQm94LnRvcCA9IDA7Ci0gICAgICAg
IHNyY0JveC5ib3R0b20gPSAxOwotICAgICAgICBzcmNCb3guZnJvbnQgPSAwOwotICAgICAgICBz
cmNCb3guYmFjayA9IDE7Ci0KLSAgICAgICAgY29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9u
KG1TdGFnaW5nQnVmZmVyLCAwLCAwLCAwLCAwLCBtQnVmZmVyLCAwLCAmc3JjQm94KTsKLQotICAg
ICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7Ci0gICAgICAgIHJl
c3VsdCA9IGNvbnRleHQtPk1hcChtU3RhZ2luZ0J1ZmZlciwgMCwgRDNEMTFfTUFQX1JFQUQsIDAs
ICZtYXBwZWRSZXNvdXJjZSk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAodm9pZCop
TlVMTCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtZW1jcHkobVJlc29sdmVkRGF0YSwgbWFwcGVk
UmVzb3VyY2UucERhdGEsIG1TaXplKTsKLQotICAgICAgICBjb250ZXh0LT5Vbm1hcChtU3RhZ2lu
Z0J1ZmZlciwgMCk7Ci0KLSAgICAgICAgbVJlc29sdmVkRGF0YVZhbGlkID0gdHJ1ZTsKLSAgICB9
Ci0KLSAgICBtUmVhZFVzYWdlQ291bnQgPSAwOwotCi0gICAgcmV0dXJuIG1SZXNvbHZlZERhdGE7
Ci19Ci0KLXZvaWQgQnVmZmVyU3RvcmFnZTExOjpzZXREYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHVu
c2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQotewotICAgIElEM0QxMURldmlj
ZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLSAgICBJRDNEMTFEZXZpY2VDb250
ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7Ci0gICAgSFJFU1VM
VCByZXN1bHQ7Ci0KLSAgICB1bnNpZ25lZCBpbnQgcmVxdWlyZWRCdWZmZXJTaXplID0gc2l6ZSAr
IG9mZnNldDsKLSAgICB1bnNpZ25lZCBpbnQgcmVxdWlyZWRTdGFnaW5nU2l6ZSA9IHNpemU7Ci0g
ICAgYm9vbCBkaXJlY3RJbml0aWFsaXphdGlvbiA9IG9mZnNldCA9PSAwICYmICghbUJ1ZmZlciB8
fCBtQnVmZmVyU2l6ZSA8IHNpemUgKyBvZmZzZXQpOwotCi0gICAgaWYgKCFkaXJlY3RJbml0aWFs
aXphdGlvbikKLSAgICB7Ci0gICAgICAgIGlmICghbVN0YWdpbmdCdWZmZXIgfHwgbVN0YWdpbmdC
dWZmZXJTaXplIDwgcmVxdWlyZWRTdGFnaW5nU2l6ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKG1TdGFnaW5nQnVmZmVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1TdGFn
aW5nQnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgbVN0YWdpbmdCdWZmZXIgPSBO
VUxMOwotICAgICAgICAgICAgICAgIG1TdGFnaW5nQnVmZmVyU2l6ZSA9IDA7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIGJ1ZmZlckRlc2M7Ci0gICAgICAg
ICAgICBidWZmZXJEZXNjLkJ5dGVXaWR0aCA9IHNpemU7Ci0gICAgICAgICAgICBidWZmZXJEZXNj
LlVzYWdlID0gRDNEMTFfVVNBR0VfU1RBR0lORzsKLSAgICAgICAgICAgIGJ1ZmZlckRlc2MuQmlu
ZEZsYWdzID0gMDsKLSAgICAgICAgICAgIGJ1ZmZlckRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSBEM0Qx
MV9DUFVfQUNDRVNTX1JFQUQgfCBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOwotICAgICAgICAgICAg
YnVmZmVyRGVzYy5NaXNjRmxhZ3MgPSAwOwotICAgICAgICAgICAgYnVmZmVyRGVzYy5TdHJ1Y3R1
cmVCeXRlU3RyaWRlID0gMDsKLQotICAgICAgICAgICAgaWYgKGRhdGEpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgRDNEMTFfU1VCUkVTT1VSQ0VfREFUQSBpbml0aWFsRGF0YTsKLSAg
ICAgICAgICAgICAgICBpbml0aWFsRGF0YS5wU3lzTWVtID0gZGF0YTsKLSAgICAgICAgICAgICAg
ICBpbml0aWFsRGF0YS5TeXNNZW1QaXRjaCA9IHNpemU7Ci0gICAgICAgICAgICAgICAgaW5pdGlh
bERhdGEuU3lzTWVtU2xpY2VQaXRjaCA9IDA7Ci0KLSAgICAgICAgICAgICAgICByZXN1bHQgPSBk
ZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmYnVmZmVyRGVzYywgJmluaXRpYWxEYXRhLCAmbVN0YWdpbmdC
dWZmZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJEZXNj
LCBOVUxMLCAmbVN0YWdpbmdCdWZmZXIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgbVN0YWdpbmdCdWZmZXJTaXplID0gc2l6ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlm
IChkYXRhKQotICAgICAgICB7Ci0gICAgICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0Ug
bWFwcGVkUmVzb3VyY2U7Ci0gICAgICAgICAgICByZXN1bHQgPSBjb250ZXh0LT5NYXAobVN0YWdp
bmdCdWZmZXIsIDAsIEQzRDExX01BUF9XUklURSwgMCwgJm1hcHBlZFJlc291cmNlKTsKLSAgICAg
ICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBtZW1jcHkobWFwcGVkUmVzb3VyY2UucERhdGEsIGRhdGEsIHNpemUpOwotCi0g
ICAgICAgICAgICBjb250ZXh0LT5Vbm1hcChtU3RhZ2luZ0J1ZmZlciwgMCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAoIW1CdWZmZXIgfHwgbUJ1ZmZlclNpemUgPCBzaXplICsgb2Zmc2V0
KQotICAgIHsKLSAgICAgICAgRDNEMTFfQlVGRkVSX0RFU0MgYnVmZmVyRGVzYzsKLSAgICAgICAg
YnVmZmVyRGVzYy5CeXRlV2lkdGggPSByZXF1aXJlZEJ1ZmZlclNpemU7Ci0gICAgICAgIGJ1ZmZl
ckRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOwotICAgICAgICBidWZmZXJEZXNjLkJp
bmRGbGFncyA9IEQzRDExX0JJTkRfVkVSVEVYX0JVRkZFUiB8IEQzRDExX0JJTkRfSU5ERVhfQlVG
RkVSOwotICAgICAgICBidWZmZXJEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKLSAgICAgICAgYnVm
ZmVyRGVzYy5NaXNjRmxhZ3MgPSAwOwotICAgICAgICBidWZmZXJEZXNjLlN0cnVjdHVyZUJ5dGVT
dHJpZGUgPSAwOwotCi0gICAgICAgIGlmIChkaXJlY3RJbml0aWFsaXphdGlvbikKLSAgICAgICAg
ewotICAgICAgICAgICAgLy8gU2luY2UgdGhlIGRhdGEgd2lsbCBmaWxsIHRoZSBlbnRpcmUgYnVm
ZmVyIChiZWluZyBsYXJnZXIgdGhhbiB0aGUgaW5pdGlhbCBzaXplIGFuZCBoYXZpbmcKLSAgICAg
ICAgICAgIC8vIG5vIG9mZnNldCksIHRoZSBidWZmZXIgY2FuIGJlIGluaXRpYWxpemVkIHdpdGgg
dGhlIGRhdGEgc28gbm8gc3RhZ2luZyBidWZmZXIgaXMgcmVxdWlyZWQKLQotICAgICAgICAgICAg
Ly8gTm8gbG9uZ2VyIG5lZWQgdGhlIG9sZCBidWZmZXIKLSAgICAgICAgICAgIGlmIChtQnVmZmVy
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1CdWZmZXItPlJlbGVhc2UoKTsKLSAg
ICAgICAgICAgICAgICBtQnVmZmVyID0gTlVMTDsKLSAgICAgICAgICAgICAgICBtQnVmZmVyU2l6
ZSA9IDA7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChkYXRhKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIEQzRDExX1NVQlJFU09VUkNFX0RBVEEgaW5pdGlhbERhdGE7
Ci0gICAgICAgICAgICAgICAgaW5pdGlhbERhdGEucFN5c01lbSA9IGRhdGE7Ci0gICAgICAgICAg
ICAgICAgaW5pdGlhbERhdGEuU3lzTWVtUGl0Y2ggPSBzaXplOwotICAgICAgICAgICAgICAgIGlu
aXRpYWxEYXRhLlN5c01lbVNsaWNlUGl0Y2ggPSAwOwotCi0gICAgICAgICAgICAgICAgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVCdWZmZXIoJmJ1ZmZlckRlc2MsICZpbml0aWFsRGF0YSwgJm1CdWZm
ZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJEZXNjLCBO
VUxMLCAmbUJ1ZmZlcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChGQUlMRUQo
cmVzdWx0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVs
c2UgaWYgKG1CdWZmZXIgJiYgb2Zmc2V0ID4gMCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8g
SWYgb2Zmc2V0IGlzIGdyZWF0ZXIgdGhhbiB6ZXJvIGFuZCB0aGUgYnVmZmVyIGlzIG5vbi1udWxs
LCBuZWVkIHRvIHByZXNlcnZlIHRoZSBkYXRhIGZyb20KLSAgICAgICAgICAgIC8vIHRoZSBvbGQg
YnVmZmVyIHVwIHRvIG9mZnNldAotICAgICAgICAgICAgSUQzRDExQnVmZmVyICpuZXdCdWZmZXIg
PSBOVUxMOwotCi0gICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmYnVm
ZmVyRGVzYywgTlVMTCwgJm5ld0J1ZmZlcik7Ci0gICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgRDNEMTFfQk9YIHNy
Y0JveDsKLSAgICAgICAgICAgIHNyY0JveC5sZWZ0ID0gMDsKLSAgICAgICAgICAgIHNyY0JveC5y
aWdodCA9IHN0ZDo6bWluKG9mZnNldCwgbUJ1ZmZlclNpemUpOwotICAgICAgICAgICAgc3JjQm94
LnRvcCA9IDA7Ci0gICAgICAgICAgICBzcmNCb3guYm90dG9tID0gMTsKLSAgICAgICAgICAgIHNy
Y0JveC5mcm9udCA9IDA7Ci0gICAgICAgICAgICBzcmNCb3guYmFjayA9IDE7Ci0KLSAgICAgICAg
ICAgIGNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihuZXdCdWZmZXIsIDAsIDAsIDAsIDAs
IG1CdWZmZXIsIDAsICZzcmNCb3gpOwotCi0gICAgICAgICAgICBtQnVmZmVyLT5SZWxlYXNlKCk7
Ci0gICAgICAgICAgICBtQnVmZmVyID0gbmV3QnVmZmVyOwotICAgICAgICB9Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgewotICAgICAgICAgICAgLy8gU2ltcGxlIGNhc2UsIG5vdGhpbmcgbmVlZHMg
dG8gYmUgY29waWVkIGZyb20gdGhlIG9sZCBidWZmZXIgdG8gdGhlIG5ldyBvbmUsIGp1c3QgY3Jl
YXRlCi0gICAgICAgICAgICAvLyBhIG5ldyBidWZmZXIKLQotICAgICAgICAgICAgLy8gTm8gbG9u
Z2VyIG5lZWQgdGhlIG9sZCBidWZmZXIKLSAgICAgICAgICAgIGlmIChtQnVmZmVyKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG1CdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgICAg
ICAgICBtQnVmZmVyID0gTlVMTDsKLSAgICAgICAgICAgICAgICBtQnVmZmVyU2l6ZSA9IDA7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBidWZmZXIgZm9yIGRh
dGEgc3RvcmFnZQotICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVCdWZmZXIoJmJ1
ZmZlckRlc2MsIE5VTEwsICZtQnVmZmVyKTsKLSAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdXBkYXRl
U2VyaWFsKCk7Ci0gICAgICAgIG1CdWZmZXJTaXplID0gYnVmZmVyRGVzYy5CeXRlV2lkdGg7Ci0g
ICAgfQotCi0gICAgaWYgKCFkaXJlY3RJbml0aWFsaXphdGlvbikKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChtU3RhZ2luZ0J1ZmZlciAmJiBtU3RhZ2luZ0J1ZmZlclNpemUgPj0gcmVxdWlyZWRTdGFn
aW5nU2l6ZSk7Ci0KLSAgICAgICAgLy8gRGF0YSBpcyBhbHJlYWR5IHB1dCBpbnRvIHRoZSBzdGFn
aW5nIGJ1ZmZlciwgY29weSBpdCBvdmVyIHRvIHRoZSBkYXRhIGJ1ZmZlcgotICAgICAgICBEM0Qx
MV9CT1ggc3JjQm94OwotICAgICAgICBzcmNCb3gubGVmdCA9IDA7Ci0gICAgICAgIHNyY0JveC5y
aWdodCA9IHNpemU7Ci0gICAgICAgIHNyY0JveC50b3AgPSAwOwotICAgICAgICBzcmNCb3guYm90
dG9tID0gMTsKLSAgICAgICAgc3JjQm94LmZyb250ID0gMDsKLSAgICAgICAgc3JjQm94LmJhY2sg
PSAxOwotCi0gICAgICAgIGNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihtQnVmZmVyLCAw
LCBvZmZzZXQsIDAsIDAsIG1TdGFnaW5nQnVmZmVyLCAwLCAmc3JjQm94KTsKLSAgICB9Ci0KLSAg
ICBtU2l6ZSA9IHN0ZDo6bWF4KG1TaXplLCBvZmZzZXQgKyBzaXplKTsKLQotICAgIG1Xcml0ZVVz
YWdlQ291bnQgPSAwOwotCi0gICAgbVJlc29sdmVkRGF0YVZhbGlkID0gZmFsc2U7Ci19Ci0KLXZv
aWQgQnVmZmVyU3RvcmFnZTExOjpjbGVhcigpCi17Ci0gICAgbVJlc29sdmVkRGF0YVZhbGlkID0g
ZmFsc2U7Ci0gICAgbVNpemUgPSAwOwotfQotCi11bnNpZ25lZCBpbnQgQnVmZmVyU3RvcmFnZTEx
OjpnZXRTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVNpemU7Ci19Ci0KLWJvb2wgQnVmZmVy
U3RvcmFnZTExOjpzdXBwb3J0c0RpcmVjdEJpbmRpbmcoKSBjb25zdAotewotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6bWFya0J1ZmZlclVzYWdlKCkKLXsKLSAg
ICBtUmVhZFVzYWdlQ291bnQrKzsKLSAgICBtV3JpdGVVc2FnZUNvdW50Kys7Ci0KLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgaW50IHVzYWdlTGltaXQgPSA1OwotCi0gICAgaWYgKG1SZWFkVXNh
Z2VDb3VudCA+IHVzYWdlTGltaXQgJiYgbVJlc29sdmVkRGF0YSkKLSAgICB7Ci0gICAgICAgIGZy
ZWUobVJlc29sdmVkRGF0YSk7Ci0gICAgICAgIG1SZXNvbHZlZERhdGEgPSBOVUxMOwotICAgICAg
ICBtUmVzb2x2ZWREYXRhU2l6ZSA9IDA7Ci0gICAgICAgIG1SZXNvbHZlZERhdGFWYWxpZCA9IGZh
bHNlOwotICAgIH0KLQotICAgIGlmIChtUmVhZFVzYWdlQ291bnQgPiB1c2FnZUxpbWl0ICYmIG1X
cml0ZVVzYWdlQ291bnQgPiB1c2FnZUxpbWl0ICYmIG1TdGFnaW5nQnVmZmVyKQotICAgIHsKLSAg
ICAgICAgbVN0YWdpbmdCdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbVN0YWdpbmdCdWZmZXIg
PSBOVUxMOwotICAgICAgICBtU3RhZ2luZ0J1ZmZlclNpemUgPSAwOwotICAgIH0KLX0KLQotSUQz
RDExQnVmZmVyICpCdWZmZXJTdG9yYWdlMTE6OmdldEJ1ZmZlcigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1CdWZmZXI7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZTExLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UxMS5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjIzNDhiMGM5MzZmZWQ4M2E5MDQ1Y2UxOGViN2E5
YTJkNjI4NTkyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3Rv
cmFnZTExLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
Ly8gQnVmZmVyU3RvcmFnZTExLmggRGVmaW5lcyB0aGUgQnVmZmVyU3RvcmFnZTExIGNsYXNzLgot
Ci0jaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9CVUZGRVJTVE9SQUdFMTFfSF8KLSNkZWZpbmUg
TElCR0xFU1YyX1JFTkRFUkVSX0JVRkZFUlNUT1JBR0UxMV9IXwotCi0jaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci1jbGFzcyBS
ZW5kZXJlcjExOwotCi1jbGFzcyBCdWZmZXJTdG9yYWdlMTEgOiBwdWJsaWMgQnVmZmVyU3RvcmFn
ZQotewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgQnVmZmVyU3RvcmFnZTExKFJlbmRlcmVyMTEg
KnJlbmRlcmVyKTsKLSAgICB2aXJ0dWFsIH5CdWZmZXJTdG9yYWdlMTEoKTsKLQotICAgIHN0YXRp
YyBCdWZmZXJTdG9yYWdlMTEgKm1ha2VCdWZmZXJTdG9yYWdlMTEoQnVmZmVyU3RvcmFnZSAqYnVm
ZmVyU3RvcmFnZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgKmdldERhdGEoKTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWdu
ZWQgaW50IG9mZnNldCk7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyKCk7Ci0gICAgdmlydHVhbCB1
bnNpZ25lZCBpbnQgZ2V0U2l6ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Rp
cmVjdEJpbmRpbmcoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgbWFya0J1ZmZlclVzYWdlKCk7
Ci0KLSAgICBJRDNEMTFCdWZmZXIgKmdldEJ1ZmZlcigpIGNvbnN0OwotCi0gIHByaXZhdGU6Ci0g
ICAgUmVuZGVyZXIxMSAqbVJlbmRlcmVyOwotCi0gICAgSUQzRDExQnVmZmVyICptU3RhZ2luZ0J1
ZmZlcjsKLSAgICB1bnNpZ25lZCBpbnQgbVN0YWdpbmdCdWZmZXJTaXplOwotCi0gICAgSUQzRDEx
QnVmZmVyICptQnVmZmVyOwotICAgIHVuc2lnbmVkIGludCBtQnVmZmVyU2l6ZTsKLQotICAgIHVu
c2lnbmVkIGludCBtU2l6ZTsKLQotICAgIHZvaWQgKm1SZXNvbHZlZERhdGE7Ci0gICAgdW5zaWdu
ZWQgaW50IG1SZXNvbHZlZERhdGFTaXplOwotICAgIGJvb2wgbVJlc29sdmVkRGF0YVZhbGlkOwot
Ci0gICAgdW5zaWduZWQgaW50IG1SZWFkVXNhZ2VDb3VudDsKLSAgICB1bnNpZ25lZCBpbnQgbVdy
aXRlVXNhZ2VDb3VudDsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9C
VUZGRVJTVE9SQUdFMTFfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZTkuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdlOS5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWU3YTg5MjFlM2YzZWIwZjdlNjlkM2Y1YjZmNzFj
M2Y5OWZhMzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9y
YWdlOS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0jaW5jbHVkZSAicHJlY29t
cGlsZWQuaCIKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBCdWZmZXJTdG9yYWdlOS5jcHAgRGVmaW5lcyB0
aGUgQnVmZmVyU3RvcmFnZTkgY2xhc3MuCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
QnVmZmVyU3RvcmFnZTkuaCIKLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLQotbmFtZXNwYWNl
IHJ4Ci17Ci0KLUJ1ZmZlclN0b3JhZ2U5OjpCdWZmZXJTdG9yYWdlOSgpCi17Ci0gICAgbU1lbW9y
eSA9IE5VTEw7Ci0gICAgbUFsbG9jYXRlZFNpemUgPSAwOwotICAgIG1TaXplID0gMDsKLX0KLQot
QnVmZmVyU3RvcmFnZTk6On5CdWZmZXJTdG9yYWdlOSgpCi17Ci0gICAgZGVsZXRlW10gbU1lbW9y
eTsKLX0KLQotQnVmZmVyU3RvcmFnZTkgKkJ1ZmZlclN0b3JhZ2U5OjptYWtlQnVmZmVyU3RvcmFn
ZTkoQnVmZmVyU3RvcmFnZSAqYnVmZmVyU3RvcmFnZSkKLXsKLSAgICBBU1NFUlQoSEFTX0RZTkFN
SUNfVFlQRShCdWZmZXJTdG9yYWdlOSosIGJ1ZmZlclN0b3JhZ2UpKTsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8QnVmZmVyU3RvcmFnZTkqPihidWZmZXJTdG9yYWdlKTsKLX0KLQotdm9pZCAqQnVm
ZmVyU3RvcmFnZTk6OmdldERhdGEoKQotewotICAgIHJldHVybiBtTWVtb3J5OwotfQotCi12b2lk
IEJ1ZmZlclN0b3JhZ2U5OjpzZXREYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGludCBz
aXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQotewotICAgIGlmICghbU1lbW9yeSB8fCBvZmZzZXQg
KyBzaXplID4gbUFsbG9jYXRlZFNpemUpCi0gICAgewotICAgICAgICB1bnNpZ25lZCBpbnQgbmV3
QWxsb2NhdGVkU2l6ZSA9IG9mZnNldCArIHNpemU7Ci0gICAgICAgIHZvaWQgKm5ld01lbW9yeSA9
IG5ldyBjaGFyW25ld0FsbG9jYXRlZFNpemVdOwotCi0gICAgICAgIGlmIChvZmZzZXQgPiAwICYm
IG1NZW1vcnkgJiYgbUFsbG9jYXRlZFNpemUgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBt
ZW1jcHkobmV3TWVtb3J5LCBtTWVtb3J5LCBzdGQ6Om1pbihvZmZzZXQsIG1BbGxvY2F0ZWRTaXpl
KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBkZWxldGVbXSBtTWVtb3J5OwotICAgICAgICBtTWVt
b3J5ID0gbmV3TWVtb3J5OwotICAgICAgICBtQWxsb2NhdGVkU2l6ZSA9IG5ld0FsbG9jYXRlZFNp
emU7Ci0gICAgfQotCi0gICAgbVNpemUgPSBzdGQ6Om1heChtU2l6ZSwgb2Zmc2V0ICsgc2l6ZSk7
Ci0gICAgaWYgKGRhdGEpCi0gICAgewotICAgICAgICBtZW1jcHkocmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4obU1lbW9yeSkgKyBvZmZzZXQsIGRhdGEsIHNpemUpOwotICAgIH0KLX0KLQotdm9pZCBC
dWZmZXJTdG9yYWdlOTo6Y2xlYXIoKQotewotICAgIG1TaXplID0gMDsKLX0KLQotdW5zaWduZWQg
aW50IEJ1ZmZlclN0b3JhZ2U5OjpnZXRTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVNpemU7
Ci19Ci0KLWJvb2wgQnVmZmVyU3RvcmFnZTk6OnN1cHBvcnRzRGlyZWN0QmluZGluZygpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2U5LmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2U5
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlODAzOTY5YmMzNWQ0ZWExMTFkYTIy
ODFmMjViM2UxNzFkZGMyMzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9C
dWZmZXJTdG9yYWdlOS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
LS8vCi0KLS8vIEJ1ZmZlclN0b3JhZ2U5LmggRGVmaW5lcyB0aGUgQnVmZmVyU3RvcmFnZTkgY2xh
c3MuCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0JVRkZFUlNUT1JBR0U5X0hfCi0jZGVm
aW5lIExJQkdMRVNWMl9SRU5ERVJFUl9CVUZGRVJTVE9SQUdFOV9IXwotCi0jaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLWNs
YXNzIEJ1ZmZlclN0b3JhZ2U5IDogcHVibGljIEJ1ZmZlclN0b3JhZ2UKLXsKLSAgcHVibGljOgot
ICAgIEJ1ZmZlclN0b3JhZ2U5KCk7Ci0gICAgdmlydHVhbCB+QnVmZmVyU3RvcmFnZTkoKTsKLQot
ICAgIHN0YXRpYyBCdWZmZXJTdG9yYWdlOSAqbWFrZUJ1ZmZlclN0b3JhZ2U5KEJ1ZmZlclN0b3Jh
Z2UgKmJ1ZmZlclN0b3JhZ2UpOwotCi0gICAgdmlydHVhbCB2b2lkICpnZXREYXRhKCk7Ci0gICAg
dmlydHVhbCB2b2lkIHNldERhdGEoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgaW50IHNpemUs
IHVuc2lnbmVkIGludCBvZmZzZXQpOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpOwotICAgIHZp
cnR1YWwgdW5zaWduZWQgaW50IGdldFNpemUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgc3Vw
cG9ydHNEaXJlY3RCaW5kaW5nKCkgY29uc3Q7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oQnVmZmVyU3RvcmFnZTkpOwotCi0gICAgdm9pZCAqbU1lbW9yeTsKLSAg
ICB1bnNpZ25lZCBpbnQgbUFsbG9jYXRlZFNpemU7Ci0KLSAgICB1bnNpZ25lZCBpbnQgbVNpemU7
Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfQlVGRkVSU1RPUkFHRTlf
SF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvRmVuY2UxMS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL0ZlbmNlMTEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDEx
YzlhMGZjODJlOGNlNTYxZjAwZjE0NjA2MTAyNGJmZjQyZGM1Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvRmVuY2UxMS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAs
MCBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEz
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gRmVuY2Ux
MS5jcHA6IERlZmluZXMgdGhlIHJ4OjpGZW5jZTExIGNsYXNzIHdoaWNoIGltcGxlbWVudHMgcng6
OkZlbmNlSW1wbC4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZTExLmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
UmVuZGVyZXIxMS5oIgotCi1uYW1lc3BhY2UgcngKLXsKLQotRmVuY2UxMTo6RmVuY2UxMShyeDo6
UmVuZGVyZXIxMSAqcmVuZGVyZXIpCi17Ci0gICAgbVJlbmRlcmVyID0gcmVuZGVyZXI7Ci0gICAg
bVF1ZXJ5ID0gTlVMTDsKLX0KLQotRmVuY2UxMTo6fkZlbmNlMTEoKQotewotICAgIGlmIChtUXVl
cnkpCi0gICAgewotICAgICAgICBtUXVlcnktPlJlbGVhc2UoKTsKLSAgICAgICAgbVF1ZXJ5ID0g
TlVMTDsKLSAgICB9Ci19Ci0KLUdMYm9vbGVhbiBGZW5jZTExOjppc0ZlbmNlKCkKLXsKLSAgICAv
LyBHTF9OVl9mZW5jZSBzcGVjOgotICAgIC8vIEEgbmFtZSByZXR1cm5lZCBieSBHZW5GZW5jZXNO
ViwgYnV0IG5vdCB5ZXQgc2V0IHZpYSBTZXRGZW5jZU5WLCBpcyBub3QgdGhlIG5hbWUgb2YgYW4g
ZXhpc3RpbmcgZmVuY2UuCi0gICAgcmV0dXJuIG1RdWVyeSAhPSBOVUxMOwotfQotCi12b2lkIEZl
bmNlMTE6OnNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pCi17Ci0gICAgaWYgKCFtUXVlcnkpCi0g
ICAgewotICAgICAgICBEM0QxMV9RVUVSWV9ERVNDIHF1ZXJ5RGVzYzsKLSAgICAgICAgcXVlcnlE
ZXNjLlF1ZXJ5ID0gRDNEMTFfUVVFUllfRVZFTlQ7Ci0gICAgICAgIHF1ZXJ5RGVzYy5NaXNjRmxh
Z3MgPSAwOwotCi0gICAgICAgIGlmIChGQUlMRUQobVJlbmRlcmVyLT5nZXREZXZpY2UoKS0+Q3Jl
YXRlUXVlcnkoJnF1ZXJ5RGVzYywgJm1RdWVyeSkpKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCktPkVuZChtUXVlcnkpOwotCi0gICAgc2V0
Q29uZGl0aW9uKGNvbmRpdGlvbik7Ci0gICAgc2V0U3RhdHVzKEdMX0ZBTFNFKTsKLX0KLQotR0xi
b29sZWFuIEZlbmNlMTE6OnRlc3RGZW5jZSgpCi17Ci0gICAgaWYgKG1RdWVyeSA9PSBOVUxMKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xf
VFJVRSk7Ci0gICAgfQotCi0gICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXItPmdldERldmlj
ZUNvbnRleHQoKS0+R2V0RGF0YShtUXVlcnksIE5VTEwsIDAsIDApOwotCi0gICAgaWYgKG1SZW5k
ZXJlci0+aXNEZXZpY2VMb3N0KCkpCi0gICAgewotICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgR0xfVFJVRSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKHJlc3VsdCA9PSBT
X09LIHx8IHJlc3VsdCA9PSBTX0ZBTFNFKTsKLSAgICBzZXRTdGF0dXMocmVzdWx0ID09IFNfT0sp
OwotICAgIHJldHVybiBnZXRTdGF0dXMoKTsKLX0KLQotdm9pZCBGZW5jZTExOjpmaW5pc2hGZW5j
ZSgpCi17Ci0gICAgaWYgKG1RdWVyeSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgd2hpbGUgKCF0ZXN0
RmVuY2UoKSkKLSAgICB7Ci0gICAgICAgIFNsZWVwKDApOwotICAgIH0KLX0KLQotdm9pZCBGZW5j
ZTExOjpnZXRGZW5jZWl2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcykKLXsKLSAgICBpZiAo
bVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHBuYW1lKQotICAgIHsKLSAgICAg
IGNhc2UgR0xfRkVOQ0VfU1RBVFVTX05WOgotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBHTF9O
Vl9mZW5jZSBzcGVjOgotICAgICAgICAgICAgLy8gT25jZSB0aGUgc3RhdHVzIG9mIGEgZmVuY2Ug
aGFzIGJlZW4gZmluaXNoZWQgKHZpYSBGaW5pc2hGZW5jZU5WKSBvciB0ZXN0ZWQgYW5kIHRoZSBy
ZXR1cm5lZCBzdGF0dXMgaXMgVFJVRSAodmlhIGVpdGhlciBUZXN0RmVuY2VOVgotICAgICAgICAg
ICAgLy8gb3IgR2V0RmVuY2Vpdk5WIHF1ZXJ5aW5nIHRoZSBGRU5DRV9TVEFUVVNfTlYpLCB0aGUg
c3RhdHVzIHJlbWFpbnMgVFJVRSB1bnRpbCB0aGUgbmV4dCBTZXRGZW5jZU5WIG9mIHRoZSBmZW5j
ZS4KLSAgICAgICAgICAgIGlmIChnZXRTdGF0dXMoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBwYXJhbXNbMF0gPSBHTF9UUlVFOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXItPmdl
dERldmljZUNvbnRleHQoKS0+R2V0RGF0YShtUXVlcnksIE5VTEwsIDAsIEQzRDExX0FTWU5DX0dF
VERBVEFfRE9OT1RGTFVTSCk7Ci0KLSAgICAgICAgICAgIGlmIChtUmVuZGVyZXItPmlzRGV2aWNl
TG9zdCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9IEdMX1RS
VUU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBTX09LIHx8IHJl
c3VsdCA9PSBTX0ZBTFNFKTsKLSAgICAgICAgICAgIHNldFN0YXR1cyhyZXN1bHQgPT0gU19PSyk7
Ci0gICAgICAgICAgICBwYXJhbXNbMF0gPSBnZXRTdGF0dXMoKTsKLQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgIGNhc2UgR0xfRkVOQ0VfQ09ORElUSU9OX05WOgotICAgICAg
ICBwYXJhbXNbMF0gPSBnZXRDb25kaXRpb24oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZh
dWx0OgotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZTExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ZlbmNlMTEuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYTUzOThiY2ExNDkwMDY0N2IwM2RmMjdhMTAxOTFkOTA2OTE5MTExMi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ZlbmNlMTEuaAorKysgL2Rldi9udWxs
CkBAIC0xLDM5ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBGZW5jZTExLmg6IERlZmluZXMg
dGhlIHJ4OjpGZW5jZTExIGNsYXNzIHdoaWNoIGltcGxlbWVudHMgcng6OkZlbmNlSW1wbC4KLQot
I2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfRmVuY2UxMV9IXwotI2RlZmluZSBMSUJHTEVTVjJf
UkVOREVSRVJfRmVuY2UxMV9IXwotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0ZlbmNl
SW1wbC5oIgotCi1uYW1lc3BhY2UgcngKLXsKLWNsYXNzIFJlbmRlcmVyMTE7Ci0KLWNsYXNzIEZl
bmNlMTEgOiBwdWJsaWMgRmVuY2VJbXBsCi17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBGZW5j
ZTExKHJ4OjpSZW5kZXJlcjExICpyZW5kZXJlcik7Ci0gICAgdmlydHVhbCB+RmVuY2UxMSgpOwot
Ci0gICAgR0xib29sZWFuIGlzRmVuY2UoKTsKLSAgICB2b2lkIHNldEZlbmNlKEdMZW51bSBjb25k
aXRpb24pOwotICAgIEdMYm9vbGVhbiB0ZXN0RmVuY2UoKTsKLSAgICB2b2lkIGZpbmlzaEZlbmNl
KCk7Ci0gICAgdm9pZCBnZXRGZW5jZWl2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7Ci0K
LSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRmVuY2UxMSk7Ci0KLSAg
ICByeDo6UmVuZGVyZXIxMSAqbVJlbmRlcmVyOwotICAgIElEM0QxMVF1ZXJ5ICptUXVlcnk7Ci19
OwotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfRkVOQ0UxMV9IXwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9GZW5j
ZTkuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9G
ZW5jZTkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjA2NGQ3ZTUyYmFmYWU5
NzUxNTA4NGE4M2FiYjYyOGE0YjhiM2Y0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvRmVuY2U5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzNSArMCwwIEBACi0jaW5jbHVk
ZSAicHJlY29tcGlsZWQuaCIKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBGZW5jZTkuY3BwOiBEZWZpbmVz
IHRoZSByeDo6RmVuY2U5IGNsYXNzLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0Zl
bmNlOS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL3JlbmRlcmVyOV91dGlscy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9SZW5kZXJlcjkuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLUZlbmNlOTo6RmVuY2U5KHJ4OjpS
ZW5kZXJlcjkgKnJlbmRlcmVyKQotewotICAgIG1SZW5kZXJlciA9IHJlbmRlcmVyOwotICAgIG1R
dWVyeSA9IE5VTEw7Ci19Ci0KLUZlbmNlOTo6fkZlbmNlOSgpCi17Ci0gICAgaWYgKG1RdWVyeSkK
LSAgICB7Ci0gICAgICAgIG1SZW5kZXJlci0+ZnJlZUV2ZW50UXVlcnkobVF1ZXJ5KTsKLSAgICAg
ICAgbVF1ZXJ5ID0gTlVMTDsKLSAgICB9Ci19Ci0KLUdMYm9vbGVhbiBGZW5jZTk6OmlzRmVuY2Uo
KQotewotICAgIC8vIEdMX05WX2ZlbmNlIHNwZWM6Ci0gICAgLy8gQSBuYW1lIHJldHVybmVkIGJ5
IEdlbkZlbmNlc05WLCBidXQgbm90IHlldCBzZXQgdmlhIFNldEZlbmNlTlYsIGlzIG5vdCB0aGUg
bmFtZSBvZiBhbiBleGlzdGluZyBmZW5jZS4KLSAgICByZXR1cm4gbVF1ZXJ5ICE9IE5VTEw7Ci19
Ci0KLXZvaWQgRmVuY2U5OjpzZXRGZW5jZShHTGVudW0gY29uZGl0aW9uKQotewotICAgIGlmICgh
bVF1ZXJ5KQotICAgIHsKLSAgICAgICAgbVF1ZXJ5ID0gbVJlbmRlcmVyLT5hbGxvY2F0ZUV2ZW50
UXVlcnkoKTsKLSAgICAgICAgaWYgKCFtUXVlcnkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBIUkVTVUxUIHJlc3VsdCA9IG1RdWVyeS0+SXNzdWUoRDNESVNTVUVfRU5EKTsKLSAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgc2V0Q29uZGl0aW9uKGNvbmRpdGlvbik7Ci0g
ICAgc2V0U3RhdHVzKEdMX0ZBTFNFKTsKLX0KLQotR0xib29sZWFuIEZlbmNlOTo6dGVzdEZlbmNl
KCkKLXsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9UUlVFKTsKLSAgICB9Ci0KLSAgICBIUkVT
VUxUIHJlc3VsdCA9IG1RdWVyeS0+R2V0RGF0YShOVUxMLCAwLCBEM0RHRVREQVRBX0ZMVVNIKTsK
LQotICAgIGlmIChkM2Q5Ojppc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQotICAgIHsKLSAgICAg
ICAgbVJlbmRlcmVyLT5ub3RpZnlEZXZpY2VMb3N0KCk7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSwgR0xfVFJVRSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKHJlc3Vs
dCA9PSBTX09LIHx8IHJlc3VsdCA9PSBTX0ZBTFNFKTsKLSAgICBzZXRTdGF0dXMocmVzdWx0ID09
IFNfT0spOwotICAgIHJldHVybiBnZXRTdGF0dXMoKTsKLX0KLQotdm9pZCBGZW5jZTk6OmZpbmlz
aEZlbmNlKCkKLXsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICB3aGlsZSAo
IXRlc3RGZW5jZSgpKQotICAgIHsKLSAgICAgICAgU2xlZXAoMCk7Ci0gICAgfQotfQotCi12b2lk
IEZlbmNlOTo6Z2V0RmVuY2VpdihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpCi17Ci0gICAg
aWYgKG1RdWVyeSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgc3dpdGNoIChwbmFtZSkKLSAgICB7Ci0g
ICAgICAgIGNhc2UgR0xfRkVOQ0VfU1RBVFVTX05WOgotICAgICAgICB7Ci0gICAgICAgICAgICAv
LyBHTF9OVl9mZW5jZSBzcGVjOgotICAgICAgICAgICAgLy8gT25jZSB0aGUgc3RhdHVzIG9mIGEg
ZmVuY2UgaGFzIGJlZW4gZmluaXNoZWQgKHZpYSBGaW5pc2hGZW5jZU5WKSBvciB0ZXN0ZWQgYW5k
IHRoZSByZXR1cm5lZCBzdGF0dXMgaXMgVFJVRSAodmlhIGVpdGhlciBUZXN0RmVuY2VOVgotICAg
ICAgICAgICAgLy8gb3IgR2V0RmVuY2Vpdk5WIHF1ZXJ5aW5nIHRoZSBGRU5DRV9TVEFUVVNfTlYp
LCB0aGUgc3RhdHVzIHJlbWFpbnMgVFJVRSB1bnRpbCB0aGUgbmV4dCBTZXRGZW5jZU5WIG9mIHRo
ZSBmZW5jZS4KLSAgICAgICAgICAgIGlmIChnZXRTdGF0dXMoKSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBwYXJhbXNbMF0gPSBHTF9UUlVFOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgSFJFU1VMVCByZXN1
bHQgPSBtUXVlcnktPkdldERhdGEoTlVMTCwgMCwgMCk7Ci0KLSAgICAgICAgICAgIGlmIChkM2Q5
Ojppc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHBhcmFtc1swXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICAgICAgbVJlbmRlcmVyLT5ub3Rp
ZnlEZXZpY2VMb3N0KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9
PSBTX09LIHx8IHJlc3VsdCA9PSBTX0ZBTFNFKTsKLSAgICAgICAgICAgIHNldFN0YXR1cyhyZXN1
bHQgPT0gU19PSyk7Ci0gICAgICAgICAgICBwYXJhbXNbMF0gPSBnZXRTdGF0dXMoKTsKLQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHTF9GRU5DRV9DT05ESVRJ
T05fTlY6Ci0gICAgICAgICAgICBwYXJhbXNbMF0gPSBnZXRDb25kaXRpb24oKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L0ZlbmNlOS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9GZW5jZTkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWYxNzY0MWU1MTlhYjQ3
ODQwN2U4MGNjYmZkMjUzODBhM2RjYzhiYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL0ZlbmNlOS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
LS8vCi0KLS8vIEZlbmNlOS5oOiBEZWZpbmVzIHRoZSByeDo6RmVuY2U5IGNsYXNzIHdoaWNoIGlt
cGxlbWVudHMgcng6OkZlbmNlSW1wbC4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfRkVO
Q0U5X0hfCi0jZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9GRU5DRTlfSF8KLQotI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZUltcGwuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci1jbGFz
cyBSZW5kZXJlcjk7Ci0KLWNsYXNzIEZlbmNlOSA6IHB1YmxpYyBGZW5jZUltcGwKLXsKLSAgcHVi
bGljOgotICAgIGV4cGxpY2l0IEZlbmNlOShyeDo6UmVuZGVyZXI5ICpyZW5kZXJlcik7Ci0gICAg
dmlydHVhbCB+RmVuY2U5KCk7Ci0KLSAgICBHTGJvb2xlYW4gaXNGZW5jZSgpOwotICAgIHZvaWQg
c2V0RmVuY2UoR0xlbnVtIGNvbmRpdGlvbik7Ci0gICAgR0xib29sZWFuIHRlc3RGZW5jZSgpOwot
ICAgIHZvaWQgZmluaXNoRmVuY2UoKTsKLSAgICB2b2lkIGdldEZlbmNlaXYoR0xlbnVtIHBuYW1l
LCBHTGludCAqcGFyYW1zKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihGZW5jZTkpOwotCi0gICAgcng6OlJlbmRlcmVyOSAqbVJlbmRlcmVyOwotICAgIElEaXJl
Y3QzRFF1ZXJ5OSAqbVF1ZXJ5OwotfTsKLQotfQotCi0jZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRF
UkVSX0ZFTkNFOV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9JbWFnZTExLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvSW1hZ2UxMS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDA5Yzg5MjJkMDczZDBhNDFhNzkwNDY0YmYyYThhZjRhYzM5NDFjMjQuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZTExLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDQ1NyArMCwwIEBACi0jaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKLS8vCi0vLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwot
Ci0vLyBJbWFnZTExLmg6IEltcGxlbWVudHMgdGhlIHJ4OjpJbWFnZTExIGNsYXNzLCB3aGljaCBh
Y3RzIGFzIHRoZSBpbnRlcmZhY2UgdG8KLS8vIHRoZSBhY3R1YWwgdW5kZXJseWluZyByZXNvdXJj
ZXMgb2YgYSBUZXh0dXJlCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIx
MS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZTExLmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlMTEuaCIKLSNpbmNsdWRlICJsaWJHTEVT
djIvRnJhbWVidWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCi0K
LSNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRp
ZXMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXIxMV91dGlscy5oIgot
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9nZW5lcmF0ZW1pcC5oIgotCi1uYW1lc3BhY2Ug
cngKLXsKLQotSW1hZ2UxMTo6SW1hZ2UxMSgpCi17Ci0gICAgbVN0YWdpbmdUZXh0dXJlID0gTlVM
TDsKLSAgICBtUmVuZGVyZXIgPSBOVUxMOwotICAgIG1EWEdJRm9ybWF0ID0gRFhHSV9GT1JNQVRf
VU5LTk9XTjsKLX0KLQotSW1hZ2UxMTo6fkltYWdlMTEoKQotewotICAgIGlmIChtU3RhZ2luZ1Rl
eHR1cmUpCi0gICAgewotICAgICAgICBtU3RhZ2luZ1RleHR1cmUtPlJlbGVhc2UoKTsKLSAgICB9
Ci19Ci0KLUltYWdlMTEgKkltYWdlMTE6Om1ha2VJbWFnZTExKEltYWdlICppbWcpCi17Ci0gICAg
QVNTRVJUKEhBU19EWU5BTUlDX1RZUEUocng6OkltYWdlMTEqLCBpbWcpKTsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8cng6OkltYWdlMTEqPihpbWcpOwotfQotCi12b2lkIEltYWdlMTE6OmdlbmVy
YXRlTWlwbWFwKEltYWdlMTEgKmRlc3QsIEltYWdlMTEgKnNyYykKLXsKLSAgICBBU1NFUlQoc3Jj
LT5nZXREWEdJRm9ybWF0KCkgPT0gZGVzdC0+Z2V0RFhHSUZvcm1hdCgpKTsKLSAgICBBU1NFUlQo
c3JjLT5nZXRXaWR0aCgpID09IDEgfHwgc3JjLT5nZXRXaWR0aCgpIC8gMiA9PSBkZXN0LT5nZXRX
aWR0aCgpKTsKLSAgICBBU1NFUlQoc3JjLT5nZXRIZWlnaHQoKSA9PSAxIHx8IHNyYy0+Z2V0SGVp
Z2h0KCkgLyAyID09IGRlc3QtPmdldEhlaWdodCgpKTsKLQotICAgIEQzRDExX01BUFBFRF9TVUJS
RVNPVVJDRSBkZXN0TWFwcGVkLCBzcmNNYXBwZWQ7Ci0gICAgZGVzdC0+bWFwKEQzRDExX01BUF9X
UklURSwgJmRlc3RNYXBwZWQpOwotICAgIHNyYy0+bWFwKEQzRDExX01BUF9SRUFELCAmc3JjTWFw
cGVkKTsKLQotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihzcmNNYXBwZWQucERhdGEpOwotICAgIHVuc2ln
bmVkIGNoYXIgKmRlc3REYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZGVz
dE1hcHBlZC5wRGF0YSk7Ci0KLSAgICBpZiAoc291cmNlRGF0YSAmJiBkZXN0RGF0YSkKLSAgICB7
Ci0gICAgICAgIHN3aXRjaCAoc3JjLT5nZXREWEdJRm9ybWF0KCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOgotICAgICAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQjhHOFI4QThfVU5PUk06Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxSOEc4QjhB
OD4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBw
ZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQThfVU5PUk06Ci0gICAgICAgICAg
ICBHZW5lcmF0ZU1pcDxBOD4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3Vy
Y2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVU5P
Uk06Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxSOD4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdl
dEhlaWdodCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0
TWFwcGVkLlJvd1BpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8QTMy
QjMyRzMyUjMyRj4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRh
LCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZM
T0FUOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8UjMyRzMyQjMyRj4oc3JjLT5nZXRXaWR0aCgp
LCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRlc3RE
YXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X0ZMT0FUOgotICAgICAgICAgICAgR2VuZXJh
dGVNaXA8QTE2QjE2RzE2UjE2Rj4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBz
b3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1Bp
dGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhH
OF9VTk9STToKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPFI4Rzg+KHNyYy0+Z2V0V2lkdGgoKSwg
c3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0
YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBj
YXNlIERYR0lfRk9STUFUX1IxNl9GTE9BVDoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPFIxNkY+
KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVk
LlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9GTE9BVDoKLSAgICAgICAg
ICAgIEdlbmVyYXRlTWlwPFIxNkcxNkY+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQo
KSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5S
b3dQaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERYR0lfRk9STUFU
X1IzMl9GTE9BVDoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPFIzMkY+KHNyYy0+Z2V0V2lkdGgo
KSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0
RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICBjYXNlIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVDoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlw
PFIzMkczMkY+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwg
c3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVzdC0+dW5t
YXAoKTsKLSAgICAgICAgc3JjLT51bm1hcCgpOwotICAgIH0KLQotICAgIGRlc3QtPm1hcmtEaXJ0
eSgpOwotfQotCi1ib29sIEltYWdlMTE6OmlzRGlydHkoKSBjb25zdAotewotICAgIHJldHVybiAo
bVN0YWdpbmdUZXh0dXJlICYmIG1EaXJ0eSk7Ci19Ci0KLWJvb2wgSW1hZ2UxMTo6dXBkYXRlU3Vy
ZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQot
ewotICAgIFRleHR1cmVTdG9yYWdlMTFfMkQgKnN0b3JhZ2UxMSA9IFRleHR1cmVTdG9yYWdlMTFf
MkQ6Om1ha2VUZXh0dXJlU3RvcmFnZTExXzJEKHN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgp
KTsKLSAgICByZXR1cm4gc3RvcmFnZTExLT51cGRhdGVTdWJyZXNvdXJjZUxldmVsKGdldFN0YWdp
bmdUZXh0dXJlKCksIGdldFN0YWdpbmdTdWJyZXNvdXJjZSgpLCBsZXZlbCwgMCwgeG9mZnNldCwg
eW9mZnNldCwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLWJvb2wgSW1hZ2UxMTo6dXBkYXRlU3VyZmFj
ZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0KQotewotICAgIFRleHR1cmVTdG9yYWdlMTFfQ3ViZSAqc3RvcmFnZTExID0gVGV4dHVy
ZVN0b3JhZ2UxMV9DdWJlOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKHN0b3JhZ2UtPmdldFN0
b3JhZ2VJbnN0YW5jZSgpKTsKLSAgICByZXR1cm4gc3RvcmFnZTExLT51cGRhdGVTdWJyZXNvdXJj
ZUxldmVsKGdldFN0YWdpbmdUZXh0dXJlKCksIGdldFN0YWdpbmdTdWJyZXNvdXJjZSgpLCBsZXZl
bCwgZmFjZSwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLWJvb2wgSW1h
Z2UxMTo6cmVkZWZpbmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGludCBpbnRlcm5hbGZvcm1hdCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGJvb2wgZm9yY2VSZWxlYXNlKQotewotICAg
IGlmIChtV2lkdGggIT0gd2lkdGggfHwKLSAgICAgICAgbUhlaWdodCAhPSBoZWlnaHQgfHwKLSAg
ICAgICAgbUludGVybmFsRm9ybWF0ICE9IGludGVybmFsZm9ybWF0IHx8Ci0gICAgICAgIGZvcmNl
UmVsZWFzZSkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyMTE6Om1ha2VSZW5k
ZXJlcjExKHJlbmRlcmVyKTsKLQotICAgICAgICBtV2lkdGggPSB3aWR0aDsKLSAgICAgICAgbUhl
aWdodCA9IGhlaWdodDsKLSAgICAgICAgbUludGVybmFsRm9ybWF0ID0gaW50ZXJuYWxmb3JtYXQ7
Ci0gICAgICAgIC8vIGNvbXB1dGUgdGhlIGQzZCBmb3JtYXQgdGhhdCB3aWxsIGJlIHVzZWQKLSAg
ICAgICAgbURYR0lGb3JtYXQgPSBnbF9kM2QxMTo6Q29udmVydFRleHR1cmVGb3JtYXQoaW50ZXJu
YWxmb3JtYXQpOwotICAgICAgICBtQWN0dWFsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRUZXh0
dXJlSW50ZXJuYWxGb3JtYXQobURYR0lGb3JtYXQpOwotCi0gICAgICAgIGlmIChtU3RhZ2luZ1Rl
eHR1cmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1TdGFnaW5nVGV4dHVyZS0+UmVsZWFzZSgp
OwotICAgICAgICAgICAgbVN0YWdpbmdUZXh0dXJlID0gTlVMTDsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1ib29sIEltYWdlMTE6OmlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IFRleHR1cmVTdG9yYWdlMTE6OklzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUobURYR0lGb3JtYXQp
OwotfQotCi1EWEdJX0ZPUk1BVCBJbWFnZTExOjpnZXREWEdJRm9ybWF0KCkgY29uc3QKLXsKLSAg
ICAvLyB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiB0aGUgaW1hZ2UgaGFzbid0IGJlZW4gcmVk
ZWZpbmVkIGZpcnN0Ci0gICAgLy8gd2hpY2ggd291bGQgYmUgYSBidWcgYnkgdGhlIGNhbGxlcgot
ICAgIEFTU0VSVChtRFhHSUZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKTsKLQotICAgIHJl
dHVybiBtRFhHSUZvcm1hdDsKLX0KLQotLy8gU3RvcmUgdGhlIHBpeGVsIHJlY3RhbmdsZSBkZXNp
Z25hdGVkIGJ5IHhvZmZzZXQseW9mZnNldCx3aWR0aCxoZWlnaHQgd2l0aCBwaXhlbHMgc3RvcmVk
IGFzIGZvcm1hdC90eXBlIGF0IGlucHV0Ci0vLyBpbnRvIHRoZSB0YXJnZXQgcGl4ZWwgcmVjdGFu
Z2xlLgotdm9pZCBJbWFnZTExOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAg
R0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCkKLXsKLSAgICBEM0QxMV9N
QVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkSW1hZ2U7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBtYXAo
RDNEMTFfTUFQX1dSSVRFLCAmbWFwcGVkSW1hZ2UpOwotICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
LSAgICB7Ci0gICAgICAgIEVSUigiQ291bGQgbm90IG1hcCBpbWFnZSBmb3IgbG9hZGluZy4iKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSBn
bDo6Q29tcHV0ZVBpdGNoKHdpZHRoLCBtSW50ZXJuYWxGb3JtYXQsIHVucGFja0FsaWdubWVudCk7
Ci0gICAgc2l6ZV90IHBpeGVsU2l6ZSA9IGQzZDExOjpDb21wdXRlUGl4ZWxTaXplQml0cyhtRFhH
SUZvcm1hdCkgLyA4OwotICAgIHZvaWQqIG9mZnNldE1hcHBlZERhdGEgPSAodm9pZCopKChCWVRF
ICopbWFwcGVkSW1hZ2UucERhdGEgKyAoeW9mZnNldCAqIG1hcHBlZEltYWdlLlJvd1BpdGNoICsg
eG9mZnNldCAqIHBpeGVsU2l6ZSkpOwotCi0gICAgc3dpdGNoIChtSW50ZXJuYWxGb3JtYXQpCi0g
ICAgewotICAgICAgY2FzZSBHTF9BTFBIQThfRVhUOgotICAgICAgICBsb2FkQWxwaGFEYXRhVG9O
YXRpdmUod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1Bp
dGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xV
TUlOQU5DRThfRVhUOgotICAgICAgICBsb2FkTHVtaW5hbmNlRGF0YVRvTmF0aXZlT3JCR1JBKHdp
ZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zm
c2V0TWFwcGVkRGF0YSwgZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQUxQ
SEEzMkZfRVhUOgotICAgICAgICBsb2FkQWxwaGFGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWRE
YXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTMyRl9FWFQ6Ci0g
ICAgICAgIGxvYWRMdW1pbmFuY2VGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FMUEhBMTZGX0VYVDoKLSAgICAgICAgbG9hZEFs
cGhhSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwg
bWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZGX0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5jZUhh
bGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBl
ZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5jZUFs
cGhhRGF0YVRvTmF0aXZlT3JCR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBt
YXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSwgZmFsc2UpOwotICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVDoKLSAgICAgICAgbG9h
ZEx1bWluYW5jZUFscGhhRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhUOgotICAgICAgICBs
b2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgICAgbG9hZFJHQlVC
eXRlRGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1h
Z2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfUkdCNTY1OgotICAgICAgICBsb2FkUkdCNTY1RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERh
dGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQThfT0VTOgotICAgICAgICBs
b2FkUkdCQVVCeXRlRGF0YVRvTmF0aXZlKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0
LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9SR0JBNDoKLSAgICAgICAgbG9hZFJHQkE0NDQ0RGF0YVRvUkdCQSh3
aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9m
ZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCNV9BMToK
LSAgICAgICAgbG9hZFJHQkE1NTUxRGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNo
LCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkdSQThfRVhUOgotICAgICAgICBsb2FkQkdSQURhdGFU
b0JHUkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1Bp
dGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JH
QjMyRl9FWFQ6Ci0gICAgICAgIGxvYWRSR0JGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRh
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQjE2Rl9FWFQ6Ci0gICAgICAgIGxv
YWRSR0JIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0
LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9SR0JBMzJGX0VYVDoKLSAgICAgICAgbG9hZFJHQkFGbG9hdERhdGFU
b1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1Bp
dGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JH
QkExNkZfRVhUOgotICAgICAgICBsb2FkUkdCQUhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhl
aWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBw
ZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAK
LSAgICB9Ci0KLSAgICB1bm1hcCgpOwotfQotCi12b2lkIEltYWdlMTE6OmxvYWRDb21wcmVzc2Vk
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5w
dXQpCi17Ci0gICAgQVNTRVJUKHhvZmZzZXQgJSA0ID09IDApOwotICAgIEFTU0VSVCh5b2Zmc2V0
ICUgNCA9PSAwKTsKLQotICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRJbWFnZTsK
LSAgICBIUkVTVUxUIHJlc3VsdCA9IG1hcChEM0QxMV9NQVBfV1JJVEUsICZtYXBwZWRJbWFnZSk7
Ci0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgRVJSKCJDb3VsZCBub3Qg
bWFwIGltYWdlIGZvciBsb2FkaW5nLiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Ly8gU2l6ZSBjb21wdXRhdGlvbiBhc3N1bWVzIGEgNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVy
ZSBmb3JtYXQKLSAgICBzaXplX3QgYmxvY2tTaXplID0gZDNkMTE6OkNvbXB1dGVCbG9ja1NpemVC
aXRzKG1EWEdJRm9ybWF0KSAvIDg7Ci0gICAgdm9pZCogb2Zmc2V0TWFwcGVkRGF0YSA9ICh2b2lk
KikoKEJZVEUgKiltYXBwZWRJbWFnZS5wRGF0YSArICgoeW9mZnNldCAvIDQpICogbWFwcGVkSW1h
Z2UuUm93UGl0Y2ggKyAoeG9mZnNldCAvIDQpICogYmxvY2tTaXplKSk7Ci0KLSAgICBHTHNpemVp
IGlucHV0U2l6ZSA9IGdsOjpDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhlaWdodCwgbUlu
dGVybmFsRm9ybWF0KTsKLSAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSBnbDo6Q29tcHV0ZUNvbXBy
ZXNzZWRQaXRjaCh3aWR0aCwgbUludGVybmFsRm9ybWF0KTsKLSAgICBpbnQgcm93cyA9IGlucHV0
U2l6ZSAvIGlucHV0UGl0Y2g7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dzOyArK2kpCi0g
ICAgewotICAgICAgICBtZW1jcHkoKHZvaWQqKSgoQllURSopb2Zmc2V0TWFwcGVkRGF0YSArIGkg
KiBtYXBwZWRJbWFnZS5Sb3dQaXRjaCksICh2b2lkKikoKEJZVEUqKWlucHV0ICsgaSAqIGlucHV0
UGl0Y2gpLCBpbnB1dFBpdGNoKTsKLSAgICB9Ci0KLSAgICB1bm1hcCgpOwotfQotCi12b2lkIElt
YWdlMTE6OmNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAqc291cmNl
KQotewotICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gc291cmNlLT5nZXRSZWFk
Q29sb3JidWZmZXIoKTsKLQotICAgIGlmIChjb2xvcmJ1ZmZlciAmJiBjb2xvcmJ1ZmZlci0+Z2V0
QWN0dWFsRm9ybWF0KCkgPT0gKEdMdWludCltQWN0dWFsRm9ybWF0KQotICAgIHsKLSAgICAgICAg
Ly8gTm8gY29udmVyc2lvbiBuZWVkZWQtLSB1c2UgY29weWJhY2sgZmFzdHBhdGgKLSAgICAgICAg
SUQzRDExVGV4dHVyZTJEICpjb2xvckJ1ZmZlclRleHR1cmUgPSBOVUxMOwotICAgICAgICB1bnNp
Z25lZCBpbnQgc3VicmVzb3VyY2VJbmRleCA9IDA7Ci0KLSAgICAgICAgaWYgKG1SZW5kZXJlci0+
Z2V0UmVuZGVyVGFyZ2V0UmVzb3VyY2UoY29sb3JidWZmZXIsICZzdWJyZXNvdXJjZUluZGV4LCAm
Y29sb3JCdWZmZXJUZXh0dXJlKSkKLSAgICAgICAgewotICAgICAgICAgICAgRDNEMTFfVEVYVFVS
RTJEX0RFU0MgdGV4dHVyZURlc2M7Ci0gICAgICAgICAgICBjb2xvckJ1ZmZlclRleHR1cmUtPkdl
dERlc2MoJnRleHR1cmVEZXNjKTsKLQotICAgICAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2Ug
PSBtUmVuZGVyZXItPmdldERldmljZSgpOwotICAgICAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4
dCAqZGV2aWNlQ29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotCi0gICAg
ICAgICAgICBJRDNEMTFUZXh0dXJlMkQqIHNyY1RleCA9IE5VTEw7Ci0gICAgICAgICAgICBpZiAo
dGV4dHVyZURlc2MuU2FtcGxlRGVzYy5Db3VudCA+IDEpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgcmVzb2x2ZURlc2M7Ci0gICAgICAgICAgICAg
ICAgcmVzb2x2ZURlc2MuV2lkdGggPSB0ZXh0dXJlRGVzYy5XaWR0aDsKLSAgICAgICAgICAgICAg
ICByZXNvbHZlRGVzYy5IZWlnaHQgPSB0ZXh0dXJlRGVzYy5IZWlnaHQ7Ci0gICAgICAgICAgICAg
ICAgcmVzb2x2ZURlc2MuTWlwTGV2ZWxzID0gMTsKLSAgICAgICAgICAgICAgICByZXNvbHZlRGVz
Yy5BcnJheVNpemUgPSAxOwotICAgICAgICAgICAgICAgIHJlc29sdmVEZXNjLkZvcm1hdCA9IHRl
eHR1cmVEZXNjLkZvcm1hdDsKLSAgICAgICAgICAgICAgICByZXNvbHZlRGVzYy5TYW1wbGVEZXNj
LkNvdW50ID0gMTsKLSAgICAgICAgICAgICAgICByZXNvbHZlRGVzYy5TYW1wbGVEZXNjLlF1YWxp
dHkgPSAwOwotICAgICAgICAgICAgICAgIHJlc29sdmVEZXNjLlVzYWdlID0gRDNEMTFfVVNBR0Vf
REVGQVVMVDsKLSAgICAgICAgICAgICAgICByZXNvbHZlRGVzYy5CaW5kRmxhZ3MgPSAwOwotICAg
ICAgICAgICAgICAgIHJlc29sdmVEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKLSAgICAgICAgICAg
ICAgICByZXNvbHZlRGVzYy5NaXNjRmxhZ3MgPSAwOwotCi0gICAgICAgICAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmcmVzb2x2ZURlc2MsIE5VTEwsICZz
cmNUZXgpOwotICAgICAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIGNyZWF0ZSByZXNvbHZl
IHRleHR1cmUgZm9yIEltYWdlMTE6OmNvcHksIEhSRVNVTFQ6IDB4JVguIiwgcmVzdWx0KTsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIGRldmljZUNvbnRleHQtPlJlc29sdmVTdWJyZXNvdXJjZShzcmNUZXgsIDAsIGNvbG9y
QnVmZmVyVGV4dHVyZSwgc3VicmVzb3VyY2VJbmRleCwgdGV4dHVyZURlc2MuRm9ybWF0KTsKLSAg
ICAgICAgICAgICAgICBzdWJyZXNvdXJjZUluZGV4ID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzcmNUZXggPSBjb2xv
ckJ1ZmZlclRleHR1cmU7Ci0gICAgICAgICAgICAgICAgc3JjVGV4LT5BZGRSZWYoKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgRDNEMTFfQk9YIHNyY0JveDsKLSAgICAgICAgICAgIHNy
Y0JveC5sZWZ0ID0geDsKLSAgICAgICAgICAgIHNyY0JveC5yaWdodCA9IHggKyB3aWR0aDsKLSAg
ICAgICAgICAgIHNyY0JveC50b3AgPSB5OwotICAgICAgICAgICAgc3JjQm94LmJvdHRvbSA9IHkg
KyBoZWlnaHQ7Ci0gICAgICAgICAgICBzcmNCb3guZnJvbnQgPSAwOwotICAgICAgICAgICAgc3Jj
Qm94LmJhY2sgPSAxOwotCi0gICAgICAgICAgICBkZXZpY2VDb250ZXh0LT5Db3B5U3VicmVzb3Vy
Y2VSZWdpb24obVN0YWdpbmdUZXh0dXJlLCAwLCB4b2Zmc2V0LCB5b2Zmc2V0LCAwLCBzcmNUZXgs
IHN1YnJlc291cmNlSW5kZXgsICZzcmNCb3gpOwotCi0gICAgICAgICAgICBzcmNUZXgtPlJlbGVh
c2UoKTsKLSAgICAgICAgICAgIGNvbG9yQnVmZmVyVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgZm9ybWF0IHJlcXVp
cmVzIGNvbnZlcnNpb24sIHNvIHdlIG11c3QgY29weSB0aGUgdGV4dHVyZSB0byBzdGFnaW5nIGFu
ZCBtYW51YWxseSBjb252ZXJ0IHZpYSByZWFkUGl4ZWxzCi0gICAgICAgIEQzRDExX01BUFBFRF9T
VUJSRVNPVVJDRSBtYXBwZWRJbWFnZTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtYXAoRDNE
MTFfTUFQX1dSSVRFLCAmbWFwcGVkSW1hZ2UpOwotCi0gICAgICAgIC8vIGRldGVybWluZSB0aGUg
b2Zmc2V0IGNvb3JkaW5hdGUgaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyCi0gICAgICAgIEdM
c2l6ZWkgcm93T2Zmc2V0ID0gZ2w6OkNvbXB1dGVQaXhlbFNpemUobUFjdHVhbEZvcm1hdCkgKiB4
b2Zmc2V0OwotICAgICAgICB2b2lkICpkYXRhT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcio+KG1hcHBlZEltYWdlLnBEYXRhKSArIG1hcHBlZEltYWdlLlJvd1BpdGNoICogeW9mZnNl
dCArIHJvd09mZnNldDsKLQotICAgICAgICBtUmVuZGVyZXItPnJlYWRQaXhlbHMoc291cmNlLCB4
LCB5LCB3aWR0aCwgaGVpZ2h0LCBnbDo6RXh0cmFjdEZvcm1hdChtSW50ZXJuYWxGb3JtYXQpLCAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpFeHRyYWN0VHlwZShtSW50ZXJuYWxG
b3JtYXQpLCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgZmFsc2UsIDQsIGRhdGFPZmZzZXQpOwotCi0g
ICAgICAgIHVubWFwKCk7Ci0gICAgfQotfQotCi1JRDNEMTFUZXh0dXJlMkQgKkltYWdlMTE6Omdl
dFN0YWdpbmdUZXh0dXJlKCkKLXsKLSAgICBjcmVhdGVTdGFnaW5nVGV4dHVyZSgpOwotCi0gICAg
cmV0dXJuIG1TdGFnaW5nVGV4dHVyZTsKLX0KLQotdW5zaWduZWQgaW50IEltYWdlMTE6OmdldFN0
YWdpbmdTdWJyZXNvdXJjZSgpCi17Ci0gICAgY3JlYXRlU3RhZ2luZ1RleHR1cmUoKTsKLQotICAg
IHJldHVybiBtU3RhZ2luZ1N1YnJlc291cmNlOwotfQotCi12b2lkIEltYWdlMTE6OmNyZWF0ZVN0
YWdpbmdUZXh0dXJlKCkKLXsKLSAgICBpZiAobVN0YWdpbmdUZXh0dXJlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIElEM0QxMVRleHR1cmUyRCAqbmV3VGV4dHVyZSA9IE5V
TEw7Ci0gICAgaW50IGxvZE9mZnNldCA9IDE7Ci0gICAgY29uc3QgRFhHSV9GT1JNQVQgZHhnaUZv
cm1hdCA9IGdldERYR0lGb3JtYXQoKTsKLSAgICBBU1NFUlQoIWQzZDExOjpJc0RlcHRoU3RlbmNp
bEZvcm1hdChkeGdpRm9ybWF0KSk7IC8vIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSBmb3IgZGVw
dGggdGV4dHVyZXMKLQotICAgIGlmIChtV2lkdGggIT0gMCAmJiBtSGVpZ2h0ICE9IDApCi0gICAg
ewotICAgICAgICBHTHNpemVpIHdpZHRoID0gbVdpZHRoOwotICAgICAgICBHTHNpemVpIGhlaWdo
dCA9IG1IZWlnaHQ7Ci0KLSAgICAgICAgLy8gYWRqdXN0IHNpemUgaWYgbmVlZGVkIGZvciBjb21w
cmVzc2VkIHRleHR1cmVzCi0gICAgICAgIGdsOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBkM2QxMTo6
SXNDb21wcmVzc2VkKGR4Z2lGb3JtYXQpLCAmd2lkdGgsICZoZWlnaHQsICZsb2RPZmZzZXQpOwot
ICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0K
LSAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgZGVzYzsKLSAgICAgICAgZGVzYy5XaWR0aCA9
IHdpZHRoOwotICAgICAgICBkZXNjLkhlaWdodCA9IGhlaWdodDsKLSAgICAgICAgZGVzYy5NaXBM
ZXZlbHMgPSBsb2RPZmZzZXQgKyAxOwotICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IDE7Ci0gICAg
ICAgIGRlc2MuRm9ybWF0ID0gZHhnaUZvcm1hdDsKLSAgICAgICAgZGVzYy5TYW1wbGVEZXNjLkNv
dW50ID0gMTsKLSAgICAgICAgZGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOwotICAgICAgICBk
ZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfU1RBR0lORzsKLSAgICAgICAgZGVzYy5CaW5kRmxhZ3Mg
PSAwOwotICAgICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19SRUFE
IHwgRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsKLSAgICAgICAgZGVzYy5NaXNjRmxhZ3MgPSAwOwot
Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRlc2Ms
IE5VTEwsICZuZXdUZXh0dXJlKTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAg
ICAgICAgICBFUlIoIkNyZWF0aW5nIGltYWdlIGZhaWxlZC4iKTsKLSAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBt
U3RhZ2luZ1RleHR1cmUgPSBuZXdUZXh0dXJlOwotICAgIG1TdGFnaW5nU3VicmVzb3VyY2UgPSBE
M0QxMUNhbGNTdWJyZXNvdXJjZShsb2RPZmZzZXQsIDAsIGxvZE9mZnNldCArIDEpOwotICAgIG1E
aXJ0eSA9IGZhbHNlOwotfQotCi1IUkVTVUxUIEltYWdlMTE6Om1hcChEM0QxMV9NQVAgbWFwVHlw
ZSwgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFICptYXApCi17Ci0gICAgY3JlYXRlU3RhZ2luZ1Rl
eHR1cmUoKTsKLQotICAgIEhSRVNVTFQgcmVzdWx0ID0gRV9GQUlMOwotCi0gICAgaWYgKG1TdGFn
aW5nVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmRldmljZUNv
bnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKLSAgICAgICAgcmVzdWx0ID0g
ZGV2aWNlQ29udGV4dC0+TWFwKG1TdGFnaW5nVGV4dHVyZSwgbVN0YWdpbmdTdWJyZXNvdXJjZSwg
bWFwVHlwZSwgMCwgbWFwKTsKLQotICAgICAgICAvLyB0aGlzIGNhbiBmYWlsIGlmIHRoZSBkZXZp
Y2UgaXMgcmVtb3ZlZCAoZnJvbSBURFIpCi0gICAgICAgIGlmIChkM2QxMTo6aXNEZXZpY2VMb3N0
RXJyb3IocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgbVJlbmRlcmVyLT5ub3RpZnlE
ZXZpY2VMb3N0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoU1VDQ0VFREVEKHJlc3Vs
dCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EaXJ0eSA9IHRydWU7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEltYWdlMTE6OnVubWFwKCkKLXsK
LSAgICBpZiAobVN0YWdpbmdUZXh0dXJlKQotICAgIHsKLSAgICAgICAgSUQzRDExRGV2aWNlQ29u
dGV4dCAqZGV2aWNlQ29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotICAg
ICAgICBkZXZpY2VDb250ZXh0LT5Vbm1hcChtU3RhZ2luZ1RleHR1cmUsIG1TdGFnaW5nU3VicmVz
b3VyY2UpOwotICAgIH0KLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZTExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlMTEuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMTFhNjQ5MmRjODYzYTkxNjQxOWI1YmNkMTY0Y2E3ZDdiYjVkOTVkYi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlMTEuaAorKysgL2Rldi9udWxs
CkBAIC0xLDc2ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBJbWFnZTExLmg6IERlZmluZXMg
dGhlIHJ4OjpJbWFnZTExIGNsYXNzLCB3aGljaCBhY3RzIGFzIHRoZSBpbnRlcmZhY2UgdG8KLS8v
IHRoZSBhY3R1YWwgdW5kZXJseWluZyByZXNvdXJjZXMgb2YgYSBUZXh0dXJlCi0KLSNpZm5kZWYg
TElCR0xFU1YyX1JFTkRFUkVSX0lNQUdFMTFfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVS
X0lNQUdFMTFfSF8KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZS5oIgotCi0j
aW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0KLW5hbWVzcGFjZSBnbAotewotY2xhc3MgRnJhbWVi
dWZmZXI7Ci19Ci0KLW5hbWVzcGFjZSByeAotewotY2xhc3MgUmVuZGVyZXI7Ci1jbGFzcyBSZW5k
ZXJlcjExOwotY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRDsKLWNsYXNzIFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlQ3ViZTsKLQotY2xhc3MgSW1hZ2UxMSA6IHB1YmxpYyBJbWFnZQotewot
ICBwdWJsaWM6Ci0gICAgSW1hZ2UxMSgpOwotICAgIHZpcnR1YWwgfkltYWdlMTEoKTsKLQotICAg
IHN0YXRpYyBJbWFnZTExICptYWtlSW1hZ2UxMShJbWFnZSAqaW1nKTsKLQotICAgIHN0YXRpYyB2
b2lkIGdlbmVyYXRlTWlwbWFwKEltYWdlMTEgKmRlc3QsIEltYWdlMTEgKnNyYyk7Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgaXNEaXJ0eSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIHVwZGF0ZVN1
cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7
Ci0gICAgdmlydHVhbCBib29sIHVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VD
dWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0KLSAgICB2aXJ0dWFsIGJv
b2wgcmVkZWZpbmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGJvb2wgZm9yY2VSZWxlYXNlKTsKLQotICAgIHZp
cnR1YWwgYm9vbCBpc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdDsKLSAgICBEWEdJX0ZPUk1BVCBn
ZXREWEdJRm9ybWF0KCkgY29uc3Q7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGxvYWREYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpp
bnB1dCk7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0KTsKLQotICAgIHZp
cnR1YWwgdm9pZCBjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdM
aW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBnbDo6RnJhbWVidWZmZXIgKnNv
dXJjZSk7Ci0KLSAgcHJvdGVjdGVkOgotICAgIEhSRVNVTFQgbWFwKEQzRDExX01BUCBtYXBUeXBl
LCBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgKm1hcCk7Ci0gICAgdm9pZCB1bm1hcCgpOwotCi0g
IHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEltYWdlMTEpOwotCi0gICAg
SUQzRDExVGV4dHVyZTJEICpnZXRTdGFnaW5nVGV4dHVyZSgpOwotICAgIHVuc2lnbmVkIGludCBn
ZXRTdGFnaW5nU3VicmVzb3VyY2UoKTsKLSAgICB2b2lkIGNyZWF0ZVN0YWdpbmdUZXh0dXJlKCk7
Ci0KLSAgICBSZW5kZXJlcjExICptUmVuZGVyZXI7Ci0KLSAgICBEWEdJX0ZPUk1BVCBtRFhHSUZv
cm1hdDsKLSAgICBJRDNEMTFUZXh0dXJlMkQgKm1TdGFnaW5nVGV4dHVyZTsKLSAgICB1bnNpZ25l
ZCBpbnQgbVN0YWdpbmdTdWJyZXNvdXJjZTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIExJQkdMRVNW
Ml9SRU5ERVJFUl9JTUFHRTExX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlOS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlOS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGIzZGNjNTliNmJkOTk5ODk5ZWM4YzBkOWUyZmMyZWNiYWIxYjdiZjIuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZTkuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsNzMyICswLDAgQEAKLSNpbmNsdWRlICJwcmVjb21waWxlZC5oIgotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLQotLy8gSW1hZ2U5LmNwcDogSW1wbGVtZW50cyB0aGUgcng6OkltYWdlOSBjbGFz
cywgd2hpY2ggYWN0cyBhcyB0aGUgaW50ZXJmYWNlIHRvCi0vLyB0aGUgYWN0dWFsIHVuZGVybHlp
bmcgc3VyZmFjZXMgb2YgYSBUZXh0dXJlLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L0ltYWdlOS5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJH
TEVTdjIvRnJhbWVidWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgi
Ci0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyOS5oIgotI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQ5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL1RleHR1cmVTdG9yYWdlOS5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L3JlbmRlcmVyOV91dGlscy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9nZW5lcmF0
ZW1pcC5oIgotCi1uYW1lc3BhY2UgcngKLXsKLQotSW1hZ2U5OjpJbWFnZTkoKQotewotICAgIG1T
dXJmYWNlID0gTlVMTDsKLSAgICBtUmVuZGVyZXIgPSBOVUxMOwotCi0gICAgbUQzRFBvb2wgPSBE
M0RQT09MX1NZU1RFTU1FTTsKLSAgICBtRDNERm9ybWF0ID0gRDNERk1UX1VOS05PV047Ci19Ci0K
LUltYWdlOTo6fkltYWdlOSgpCi17Ci0gICAgaWYgKG1TdXJmYWNlKQotICAgIHsKLSAgICAgICAg
bVN1cmZhY2UtPlJlbGVhc2UoKTsKLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U5OjpnZW5lcmF0ZU1p
cChJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdFN1cmZhY2UsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3Vy
Y2VTdXJmYWNlKQotewotICAgIEQzRFNVUkZBQ0VfREVTQyBkZXN0RGVzYzsKLSAgICBIUkVTVUxU
IHJlc3VsdCA9IGRlc3RTdXJmYWNlLT5HZXREZXNjKCZkZXN0RGVzYyk7Ci0gICAgQVNTRVJUKFNV
Q0NFRURFRChyZXN1bHQpKTsKLQotICAgIEQzRFNVUkZBQ0VfREVTQyBzb3VyY2VEZXNjOwotICAg
IHJlc3VsdCA9IHNvdXJjZVN1cmZhY2UtPkdldERlc2MoJnNvdXJjZURlc2MpOwotICAgIEFTU0VS
VChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICBBU1NFUlQoc291cmNlRGVzYy5Gb3JtYXQgPT0g
ZGVzdERlc2MuRm9ybWF0KTsKLSAgICBBU1NFUlQoc291cmNlRGVzYy5XaWR0aCA9PSAxIHx8IHNv
dXJjZURlc2MuV2lkdGggLyAyID09IGRlc3REZXNjLldpZHRoKTsKLSAgICBBU1NFUlQoc291cmNl
RGVzYy5IZWlnaHQgPT0gMSB8fCBzb3VyY2VEZXNjLkhlaWdodCAvIDIgPT0gZGVzdERlc2MuSGVp
Z2h0KTsKLQotICAgIEQzRExPQ0tFRF9SRUNUIHNvdXJjZUxvY2tlZCA9IHswfTsKLSAgICByZXN1
bHQgPSBzb3VyY2VTdXJmYWNlLT5Mb2NrUmVjdCgmc291cmNlTG9ja2VkLCBOVUxMLCBEM0RMT0NL
X1JFQURPTkxZKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgRDNETE9D
S0VEX1JFQ1QgZGVzdExvY2tlZCA9IHswfTsKLSAgICByZXN1bHQgPSBkZXN0U3VyZmFjZS0+TG9j
a1JlY3QoJmRlc3RMb2NrZWQsIE5VTEwsIDApOwotICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2VEYXRhID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oc291cmNlTG9ja2VkLnBCaXRzKTsKLSAgICB1bnNp
Z25lZCBjaGFyICpkZXN0RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRl
c3RMb2NrZWQucEJpdHMpOwotCi0gICAgaWYgKHNvdXJjZURhdGEgJiYgZGVzdERhdGEpCi0gICAg
ewotICAgICAgICBzd2l0Y2ggKHNvdXJjZURlc2MuRm9ybWF0KQotICAgICAgICB7Ci0gICAgICAg
ICAgY2FzZSBEM0RGTVRfTDg6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxMOD4oc291cmNlRGVz
Yy5XaWR0aCwgc291cmNlRGVzYy5IZWlnaHQsIHNvdXJjZURhdGEsIHNvdXJjZUxvY2tlZC5QaXRj
aCwgZGVzdERhdGEsIGRlc3RMb2NrZWQuUGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgY2FzZSBEM0RGTVRfQThMODoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPEE4TDg+KHNv
dXJjZURlc2MuV2lkdGgsIHNvdXJjZURlc2MuSGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3VyY2VMb2Nr
ZWQuUGl0Y2gsIGRlc3REYXRhLCBkZXN0TG9ja2VkLlBpdGNoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgICAgIGNhc2UgRDNERk1U
X1g4UjhHOEI4OgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8QThSOEc4Qjg+KHNvdXJjZURlc2Mu
V2lkdGgsIHNvdXJjZURlc2MuSGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3VyY2VMb2NrZWQuUGl0Y2gs
IGRlc3REYXRhLCBkZXN0TG9ja2VkLlBpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxB
MTZCMTZHMTZSMTZGPihzb3VyY2VEZXNjLldpZHRoLCBzb3VyY2VEZXNjLkhlaWdodCwgc291cmNl
RGF0YSwgc291cmNlTG9ja2VkLlBpdGNoLCBkZXN0RGF0YSwgZGVzdExvY2tlZC5QaXRjaCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgot
ICAgICAgICAgICAgR2VuZXJhdGVNaXA8QTMyQjMyRzMyUjMyRj4oc291cmNlRGVzYy5XaWR0aCwg
c291cmNlRGVzYy5IZWlnaHQsIHNvdXJjZURhdGEsIHNvdXJjZUxvY2tlZC5QaXRjaCwgZGVzdERh
dGEsIGRlc3RMb2NrZWQuUGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgICAgIGRlc3RTdXJmYWNlLT5VbmxvY2tSZWN0KCk7Ci0gICAgICAgIHNv
dXJjZVN1cmZhY2UtPlVubG9ja1JlY3QoKTsKLSAgICB9Ci19Ci0KLUltYWdlOSAqSW1hZ2U5Ojpt
YWtlSW1hZ2U5KEltYWdlICppbWcpCi17Ci0gICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUocng6
OkltYWdlOSosIGltZykpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxyeDo6SW1hZ2U5Kj4oaW1n
KTsKLX0KLQotdm9pZCBJbWFnZTk6OmdlbmVyYXRlTWlwbWFwKEltYWdlOSAqZGVzdCwgSW1hZ2U5
ICpzb3VyY2UpCi17Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZVN1cmZhY2UgPSBzb3Vy
Y2UtPmdldFN1cmZhY2UoKTsKLSAgICBpZiAoc291cmNlU3VyZmFjZSA9PSBOVUxMKQotICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotCi0gICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKmRlc3RTdXJmYWNlID0gZGVzdC0+Z2V0U3VyZmFjZSgpOwotICAgIGdlbmVyYXRlTWlw
KGRlc3RTdXJmYWNlLCBzb3VyY2VTdXJmYWNlKTsKLQotICAgIGRlc3QtPm1hcmtEaXJ0eSgpOwot
fQotCi12b2lkIEltYWdlOTo6Y29weUxvY2thYmxlU3VyZmFjZXMoSURpcmVjdDNEU3VyZmFjZTkg
KmRlc3QsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UpCi17Ci0gICAgRDNETE9DS0VEX1JFQ1Qg
c291cmNlTG9jayA9IHswfTsKLSAgICBEM0RMT0NLRURfUkVDVCBkZXN0TG9jayA9IHswfTsKLSAg
ICAKLSAgICBzb3VyY2UtPkxvY2tSZWN0KCZzb3VyY2VMb2NrLCBOVUxMLCAwKTsKLSAgICBkZXN0
LT5Mb2NrUmVjdCgmZGVzdExvY2ssIE5VTEwsIDApOwotICAgIAotICAgIGlmIChzb3VyY2VMb2Nr
LnBCaXRzICYmIGRlc3RMb2NrLnBCaXRzKQotICAgIHsKLSAgICAgICAgRDNEU1VSRkFDRV9ERVND
IGRlc2M7Ci0gICAgICAgIHNvdXJjZS0+R2V0RGVzYygmZGVzYyk7Ci0KLSAgICAgICAgaW50IHJv
d3MgPSBkM2Q5OjpJc0NvbXByZXNzZWRGb3JtYXQoZGVzYy5Gb3JtYXQpID8gZGVzYy5IZWlnaHQg
LyA0IDogZGVzYy5IZWlnaHQ7Ci0gICAgICAgIGludCBieXRlcyA9IGQzZDk6OkNvbXB1dGVSb3dT
aXplKGRlc2MuRm9ybWF0LCBkZXNjLldpZHRoKTsKLSAgICAgICAgQVNTRVJUKGJ5dGVzIDw9IHNv
dXJjZUxvY2suUGl0Y2ggJiYgYnl0ZXMgPD0gZGVzdExvY2suUGl0Y2gpOwotCi0gICAgICAgIGZv
cihpbnQgaSA9IDA7IGkgPCByb3dzOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1lbWNw
eSgoY2hhciopZGVzdExvY2sucEJpdHMgKyBkZXN0TG9jay5QaXRjaCAqIGksIChjaGFyKilzb3Vy
Y2VMb2NrLnBCaXRzICsgc291cmNlTG9jay5QaXRjaCAqIGksIGJ5dGVzKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHNvdXJjZS0+VW5sb2NrUmVjdCgpOwotICAgICAgICBkZXN0LT5VbmxvY2tSZWN0
KCk7Ci0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLX0KLQotYm9vbCBJbWFnZTk6OnJl
ZGVmaW5lKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgYm9vbCBmb3JjZVJlbGVhc2UpCi17Ci0gICAgaWYg
KG1XaWR0aCAhPSB3aWR0aCB8fAotICAgICAgICBtSGVpZ2h0ICE9IGhlaWdodCB8fAotICAgICAg
ICBtSW50ZXJuYWxGb3JtYXQgIT0gaW50ZXJuYWxmb3JtYXQgfHwKLSAgICAgICAgZm9yY2VSZWxl
YXNlKQotICAgIHsKLSAgICAgICAgbVJlbmRlcmVyID0gUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5
KHJlbmRlcmVyKTsKLQotICAgICAgICBtV2lkdGggPSB3aWR0aDsKLSAgICAgICAgbUhlaWdodCA9
IGhlaWdodDsKLSAgICAgICAgbUludGVybmFsRm9ybWF0ID0gaW50ZXJuYWxmb3JtYXQ7Ci0gICAg
ICAgIC8vIGNvbXB1dGUgdGhlIGQzZCBmb3JtYXQgdGhhdCB3aWxsIGJlIHVzZWQKLSAgICAgICAg
bUQzREZvcm1hdCA9IG1SZW5kZXJlci0+Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRl
cm5hbGZvcm1hdCk7Ci0gICAgICAgIG1BY3R1YWxGb3JtYXQgPSBkM2Q5X2dsOjpHZXRFcXVpdmFs
ZW50Rm9ybWF0KG1EM0RGb3JtYXQpOwotCi0gICAgICAgIGlmIChtU3VyZmFjZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgbVN1cmZhY2UtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1TdXJmYWNl
ID0gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBJbWFnZTk6OmNyZWF0ZVN1cmZhY2UoKQotewotICAg
IGlmKG1TdXJmYWNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIElEaXJl
Y3QzRFRleHR1cmU5ICpuZXdUZXh0dXJlID0gTlVMTDsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAq
bmV3U3VyZmFjZSA9IE5VTEw7Ci0gICAgY29uc3QgRDNEUE9PTCBwb29sVG9Vc2UgPSBEM0RQT09M
X1NZU1RFTU1FTTsKLSAgICBjb25zdCBEM0RGT1JNQVQgZDNkRm9ybWF0ID0gZ2V0RDNERm9ybWF0
KCk7Ci0gICAgQVNTRVJUKGQzZEZvcm1hdCAhPSBEM0RGTVRfSU5UWik7IC8vIFdlIHNob3VsZCBu
ZXZlciBnZXQgaGVyZSBmb3IgZGVwdGggdGV4dHVyZXMKLQotICAgIGlmIChtV2lkdGggIT0gMCAm
JiBtSGVpZ2h0ICE9IDApCi0gICAgewotICAgICAgICBpbnQgbGV2ZWxUb0ZldGNoID0gMDsKLSAg
ICAgICAgR0xzaXplaSByZXF1ZXN0V2lkdGggPSBtV2lkdGg7Ci0gICAgICAgIEdMc2l6ZWkgcmVx
dWVzdEhlaWdodCA9IG1IZWlnaHQ7Ci0gICAgICAgIGdsOjpNYWtlVmFsaWRTaXplKHRydWUsIGds
OjpJc0NvbXByZXNzZWQobUludGVybmFsRm9ybWF0KSwgJnJlcXVlc3RXaWR0aCwgJnJlcXVlc3RI
ZWlnaHQsICZsZXZlbFRvRmV0Y2gpOwotCi0gICAgICAgIElEaXJlY3QzRERldmljZTkgKmRldmlj
ZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBk
ZXZpY2UtPkNyZWF0ZVRleHR1cmUocmVxdWVzdFdpZHRoLCByZXF1ZXN0SGVpZ2h0LCBsZXZlbFRv
RmV0Y2ggKyAxLCAwLCBkM2RGb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcG9vbFRvVXNlLCAmbmV3VGV4dHVyZSwgTlVMTCk7Ci0KLSAg
ICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQo
cmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVN
T1JZKTsKLSAgICAgICAgICAgIEVSUigiQ3JlYXRpbmcgaW1hZ2Ugc3VyZmFjZSBmYWlsZWQuIik7
Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgbmV3VGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKGxldmVsVG9GZXRjaCwg
Jm5ld1N1cmZhY2UpOwotICAgICAgICBuZXdUZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgfQotCi0g
ICAgbVN1cmZhY2UgPSBuZXdTdXJmYWNlOwotICAgIG1EaXJ0eSA9IGZhbHNlOwotICAgIG1EM0RQ
b29sID0gcG9vbFRvVXNlOwotfQotCi1IUkVTVUxUIEltYWdlOTo6bG9jayhEM0RMT0NLRURfUkVD
VCAqbG9ja2VkUmVjdCwgY29uc3QgUkVDVCAqcmVjdCkKLXsKLSAgICBjcmVhdGVTdXJmYWNlKCk7
Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9IEQzREVSUl9JTlZBTElEQ0FMTDsKLQotICAgIGlmICht
U3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIHJlc3VsdCA9IG1TdXJmYWNlLT5Mb2NrUmVjdChsb2Nr
ZWRSZWN0LCByZWN0LCAwKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQot
ICAgICAgICBtRGlydHkgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LXZvaWQgSW1hZ2U5Ojp1bmxvY2soKQotewotICAgIGlmIChtU3VyZmFjZSkKLSAgICB7Ci0gICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gbVN1cmZhY2UtPlVubG9ja1JlY3QoKTsKLSAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICB9Ci19Ci0KLWJvb2wgSW1hZ2U5Ojppc1JlbmRl
cmFibGVGb3JtYXQoKSBjb25zdAoteyAgICAKLSAgICByZXR1cm4gVGV4dHVyZVN0b3JhZ2U5OjpJ
c1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGdldEQzREZvcm1hdCgpKTsKLX0KLQotRDNERk9STUFU
IEltYWdlOTo6Z2V0RDNERm9ybWF0KCkgY29uc3QKLXsKLSAgICAvLyB0aGlzIHNob3VsZCBvbmx5
IGhhcHBlbiBpZiB0aGUgaW1hZ2UgaGFzbid0IGJlZW4gcmVkZWZpbmVkIGZpcnN0Ci0gICAgLy8g
d2hpY2ggd291bGQgYmUgYSBidWcgYnkgdGhlIGNhbGxlcgotICAgIEFTU0VSVChtRDNERm9ybWF0
ICE9IEQzREZNVF9VTktOT1dOKTsKLQotICAgIHJldHVybiBtRDNERm9ybWF0OwotfQotCi1JRGly
ZWN0M0RTdXJmYWNlOSAqSW1hZ2U5OjpnZXRTdXJmYWNlKCkKLXsKLSAgICBjcmVhdGVTdXJmYWNl
KCk7Ci0KLSAgICByZXR1cm4gbVN1cmZhY2U7Ci19Ci0KLXZvaWQgSW1hZ2U5OjpzZXRNYW5hZ2Vk
U3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwpCi17
Ci0gICAgVGV4dHVyZVN0b3JhZ2U5XzJEICpzdG9yYWdlOSA9IFRleHR1cmVTdG9yYWdlOV8yRDo6
bWFrZVRleHR1cmVTdG9yYWdlOV8yRChzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0g
ICAgc2V0TWFuYWdlZFN1cmZhY2Uoc3RvcmFnZTktPmdldFN1cmZhY2VMZXZlbChsZXZlbCwgZmFs
c2UpKTsKLX0KLQotdm9pZCBJbWFnZTk6OnNldE1hbmFnZWRTdXJmYWNlKFRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgaW50IGZhY2UsIGludCBsZXZlbCkKLXsKLSAgICBUZXh0
dXJlU3RvcmFnZTlfQ3ViZSAqc3RvcmFnZTkgPSBUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6bWFrZVRl
eHR1cmVTdG9yYWdlOV9DdWJlKHN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKLSAgICBz
ZXRNYW5hZ2VkU3VyZmFjZShzdG9yYWdlOS0+Z2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9YICsgZmFjZSwgbGV2ZWwsIGZhbHNlKSk7Ci19Ci0KLXZvaWQgSW1h
Z2U5OjpzZXRNYW5hZ2VkU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSkKLXsKLSAg
ICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKLSAgICBzdXJmYWNlLT5HZXREZXNjKCZkZXNjKTsKLSAg
ICBBU1NFUlQoZGVzYy5Qb29sID09IEQzRFBPT0xfTUFOQUdFRCk7Ci0KLSAgICBpZiAoKEdMc2l6
ZWkpZGVzYy5XaWR0aCA9PSBtV2lkdGggJiYgKEdMc2l6ZWkpZGVzYy5IZWlnaHQgPT0gbUhlaWdo
dCkKLSAgICB7Ci0gICAgICAgIGlmIChtU3VyZmFjZSkKLSAgICAgICAgewotICAgICAgICAgICAg
Y29weUxvY2thYmxlU3VyZmFjZXMoc3VyZmFjZSwgbVN1cmZhY2UpOwotICAgICAgICAgICAgbVN1
cmZhY2UtPlJlbGVhc2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1TdXJmYWNlID0gc3VyZmFj
ZTsKLSAgICAgICAgbUQzRFBvb2wgPSBkZXNjLlBvb2w7Ci0gICAgfQotfQotCi1ib29sIEltYWdl
OTo6dXBkYXRlU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0KQotewotICAgIEFTU0VSVChnZXRTdXJmYWNlKCkgIT0gTlVMTCk7Ci0gICAgVGV4
dHVyZVN0b3JhZ2U5XzJEICpzdG9yYWdlOSA9IFRleHR1cmVTdG9yYWdlOV8yRDo6bWFrZVRleHR1
cmVTdG9yYWdlOV8yRChzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgcmV0dXJu
IHVwZGF0ZVN1cmZhY2Uoc3RvcmFnZTktPmdldFN1cmZhY2VMZXZlbChsZXZlbCwgdHJ1ZSksIHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOwotfQotCi1ib29sIEltYWdlOTo6dXBkYXRl
U3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KQotewotICAgIEFTU0VSVChnZXRTdXJmYWNlKCkgIT0gTlVMTCk7Ci0gICAg
VGV4dHVyZVN0b3JhZ2U5X0N1YmUgKnN0b3JhZ2U5ID0gVGV4dHVyZVN0b3JhZ2U5X0N1YmU6Om1h
a2VUZXh0dXJlU3RvcmFnZTlfQ3ViZShzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0g
ICAgcmV0dXJuIHVwZGF0ZVN1cmZhY2Uoc3RvcmFnZTktPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsLCB0cnVlKSwgeG9mZnNldCwg
eW9mZnNldCwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLWJvb2wgSW1hZ2U5Ojp1cGRhdGVTdXJmYWNl
KElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0U3VyZmFjZSwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKCFkZXN0U3Vy
ZmFjZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnNv
dXJjZVN1cmZhY2UgPSBnZXRTdXJmYWNlKCk7Ci0KLSAgICBpZiAoc291cmNlU3VyZmFjZSAmJiBz
b3VyY2VTdXJmYWNlICE9IGRlc3RTdXJmYWNlKQotICAgIHsKLSAgICAgICAgUkVDVCByZWN0Owot
ICAgICAgICByZWN0LmxlZnQgPSB4b2Zmc2V0OwotICAgICAgICByZWN0LnRvcCA9IHlvZmZzZXQ7
Ci0gICAgICAgIHJlY3QucmlnaHQgPSB4b2Zmc2V0ICsgd2lkdGg7Ci0gICAgICAgIHJlY3QuYm90
dG9tID0geW9mZnNldCArIGhlaWdodDsKLQotICAgICAgICBQT0lOVCBwb2ludCA9IHtyZWN0Lmxl
ZnQsIHJlY3QudG9wfTsKLQotICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVu
ZGVyZXItPmdldERldmljZSgpOwotCi0gICAgICAgIGlmIChtRDNEUG9vbCA9PSBEM0RQT09MX01B
TkFHRUQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOwotICAg
ICAgICAgICAgc291cmNlU3VyZmFjZS0+R2V0RGVzYygmZGVzYyk7Ci0KLSAgICAgICAgICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpzdXJmID0gMDsKLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
ZGV2aWNlLT5DcmVhdGVPZmZzY3JlZW5QbGFpblN1cmZhY2UoZGVzYy5XaWR0aCwgZGVzYy5IZWln
aHQsIGRlc2MuRm9ybWF0LCBEM0RQT09MX1NZU1RFTU1FTSwgJnN1cmYsIE5VTEwpOwotCi0gICAg
ICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgY29weUxvY2thYmxlU3VyZmFjZXMoc3VyZiwgc291cmNlU3VyZmFjZSk7Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5VcGRhdGVTdXJmYWNlKHN1cmYsICZyZWN0LCBkZXN0
U3VyZmFjZSwgJnBvaW50KTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOwotICAgICAgICAgICAgICAgIHN1cmYtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFVwZGF0ZVN1
cmZhY2U6IHNvdXJjZSBtdXN0IGJlIFNZU1RFTU1FTSwgZGVzdCBtdXN0IGJlIERFRkFVTFQgcG9v
bHMgCi0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+VXBkYXRlU3VyZmFjZShz
b3VyY2VTdXJmYWNlLCAmcmVjdCwgZGVzdFN1cmZhY2UsICZwb2ludCk7Ci0gICAgICAgICAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZGVzdFN1
cmZhY2UtPlJlbGVhc2UoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gU3RvcmUgdGhlIHBp
eGVsIHJlY3RhbmdsZSBkZXNpZ25hdGVkIGJ5IHhvZmZzZXQseW9mZnNldCx3aWR0aCxoZWlnaHQg
d2l0aCBwaXhlbHMgc3RvcmVkIGFzIGZvcm1hdC90eXBlIGF0IGlucHV0Ci0vLyBpbnRvIHRoZSB0
YXJnZXQgcGl4ZWwgcmVjdGFuZ2xlLgotdm9pZCBJbWFnZTk6OmxvYWREYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQp
Ci17Ci0gICAgUkVDVCBsb2NrUmVjdCA9Ci0gICAgewotICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0
LAotICAgICAgICB4b2Zmc2V0ICsgd2lkdGgsIHlvZmZzZXQgKyBoZWlnaHQKLSAgICB9OwotCi0g
ICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOwotICAgIEhSRVNVTFQgcmVzdWx0ID0gbG9jaygmbG9j
a2VkLCAmbG9ja1JlY3QpOwotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLQotICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IGdsOjpDb21wdXRl
UGl0Y2god2lkdGgsIG1JbnRlcm5hbEZvcm1hdCwgdW5wYWNrQWxpZ25tZW50KTsKLQotICAgIHN3
aXRjaCAobUludGVybmFsRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfQUxQSEE4X0VYVDoK
LSAgICAgICAgaWYgKGdsOjpzdXBwb3J0c1NTRTIoKSkKLSAgICAgICAgewotICAgICAgICAgICAg
bG9hZEFscGhhRGF0YVRvQkdSQVNTRTIod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRBbHBoYURhdGFUb0JHUkEod2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOF9FWFQ6Ci0gICAgICAg
IGxvYWRMdW1pbmFuY2VEYXRhVG9OYXRpdmVPckJHUkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzLCBnZXREM0RGb3JtYXQoKSA9PSBE
M0RGTVRfTDgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQUxQSEEzMkZfRVhUOgot
ICAgICAgICBsb2FkQWxwaGFGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0xVTUlOQU5DRTMyRl9FWFQ6Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VGbG9h
dERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRj
aCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FMUEhBMTZG
X0VYVDoKLSAgICAgICAgbG9hZEFscGhhSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZGX0VYVDoKLSAgICAgICAgbG9hZEx1
bWluYW5jZUhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5jZUFscGhh
RGF0YVRvTmF0aXZlT3JCR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2Nr
ZWQuUGl0Y2gsIGxvY2tlZC5wQml0cywgZ2V0RDNERm9ybWF0KCkgPT0gRDNERk1UX0E4TDgpOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVDoKLSAg
ICAgICAgbG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhUOgotICAgICAgICBsb2Fk
THVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgICAgbG9hZFJHQlVCeXRlRGF0YVRvQkdSWCh3
aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJp
dHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCNTY1OgotICAgICAgICBsb2Fk
UkdCNTY1RGF0YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2Vk
LlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdC
QThfT0VTOgotICAgICAgICBpZiAoZ2w6OnN1cHBvcnRzU1NFMigpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBsb2FkUkdCQVVCeXRlRGF0YVRvQkdSQVNTRTIod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgfQotICAg
ICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhVG9CR1JB
KHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5w
Qml0cyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQkE0Ogot
ICAgICAgICBsb2FkUkdCQTQ0NDREYXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9SR0I1X0ExOgotICAgICAgICBsb2FkUkdCQTU1NTFEYXRhVG9CR1JBKHdpZHRo
LCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6Ci0gICAgICAgIGxvYWRC
R1JBRGF0YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBp
dGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIC8vIGZsb2F0IHRleHR1
cmVzIGFyZSBjb252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRoZXkncmUgc3RvcmVkIHRo
YXQgd2F5IGluIEQzRAotICAgICAgY2FzZSBHTF9SR0IzMkZfRVhUOgotICAgICAgICBsb2FkUkdC
RmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQu
UGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0Ix
NkZfRVhUOgotICAgICAgICBsb2FkUkdCSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQTMyRl9FWFQ6Ci0gICAgICAgIGxvYWRSR0JBRmxv
YXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0
Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0JBMTZG
X0VYVDoKLSAgICAgICAgbG9hZFJHQkFIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgCi0gICAgfQotCi0gICAgdW5s
b2NrKCk7Ci19Ci0KLXZvaWQgSW1hZ2U5Ojpsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0KQotewotICAgIEFTU0VS
VCh4b2Zmc2V0ICUgNCA9PSAwKTsKLSAgICBBU1NFUlQoeW9mZnNldCAlIDQgPT0gMCk7Ci0KLSAg
ICBSRUNUIGxvY2tSZWN0ID0gewotICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LAotICAgICAgICB4
b2Zmc2V0ICsgd2lkdGgsIHlvZmZzZXQgKyBoZWlnaHQKLSAgICB9OwotCi0gICAgRDNETE9DS0VE
X1JFQ1QgbG9ja2VkOwotICAgIEhSRVNVTFQgcmVzdWx0ID0gbG9jaygmbG9ja2VkLCAmbG9ja1Jl
Y3QpOwotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBHTHNpemVpIGlucHV0U2l6ZSA9IGdsOjpDb21wdXRlQ29tcHJlc3NlZFNpemUo
d2lkdGgsIGhlaWdodCwgbUludGVybmFsRm9ybWF0KTsKLSAgICBHTHNpemVpIGlucHV0UGl0Y2gg
PSBnbDo6Q29tcHV0ZUNvbXByZXNzZWRQaXRjaCh3aWR0aCwgbUludGVybmFsRm9ybWF0KTsKLSAg
ICBpbnQgcm93cyA9IGlucHV0U2l6ZSAvIGlucHV0UGl0Y2g7Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCByb3dzOyArK2kpCi0gICAgewotICAgICAgICBtZW1jcHkoKHZvaWQqKSgoQllURSopbG9j
a2VkLnBCaXRzICsgaSAqIGxvY2tlZC5QaXRjaCksICh2b2lkKikoKEJZVEUqKWlucHV0ICsgaSAq
IGlucHV0UGl0Y2gpLCBpbnB1dFBpdGNoKTsKLSAgICB9Ci0KLSAgICB1bmxvY2soKTsKLX0KLQot
Ly8gVGhpcyBpbXBsZW1lbnRzIGdsQ29weVRleFtTdWJdSW1hZ2UyRCBmb3Igbm9uLXJlbmRlcmFi
bGUgaW50ZXJuYWwgdGV4dHVyZSBmb3JtYXRzIGFuZCBpbmNvbXBsZXRlIHRleHR1cmVzCi12b2lk
IEltYWdlOTo6Y29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGlu
dCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgZ2w6OkZyYW1lYnVmZmVyICpzb3Vy
Y2UpCi17Ci0gICAgUmVuZGVyVGFyZ2V0OSAqcmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IE5VTEw7Ci0gICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29s
b3JidWZmZXIgPSBzb3VyY2UtPmdldENvbG9yYnVmZmVyKDApOwotCi0gICAgaWYgKGNvbG9yYnVm
ZmVyKQotICAgIHsKLSAgICAgICAgcmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0OTo6bWFrZVJl
bmRlclRhcmdldDkoY29sb3JidWZmZXItPmdldFJlbmRlclRhcmdldCgpKTsKLSAgICB9Ci0gICAg
Ci0gICAgaWYgKHJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIHN1cmZhY2UgPSByZW5kZXJU
YXJnZXQtPmdldFN1cmZhY2UoKTsKLSAgICB9Ci0KLSAgICBpZiAoIXN1cmZhY2UpCi0gICAgewot
ICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldC4iKTsKLSAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICBJ
RGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0gICAg
SURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldERhdGEgPSBOVUxMOwotICAgIEQzRFNVUkZB
Q0VfREVTQyBkZXNjcmlwdGlvbjsKLSAgICBzdXJmYWNlLT5HZXREZXNjKCZkZXNjcmlwdGlvbik7
Ci0gICAgCi0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZU9mZnNjcmVlblBsYWlu
U3VyZmFjZShkZXNjcmlwdGlvbi5XaWR0aCwgZGVzY3JpcHRpb24uSGVpZ2h0LCBkZXNjcmlwdGlv
bi5Gb3JtYXQsIEQzRFBPT0xfU1lTVEVNTUVNLCAmcmVuZGVyVGFyZ2V0RGF0YSwgTlVMTCk7Ci0K
LSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIoIkNvdWxkIG5vdCBj
cmVhdGUgbWF0Y2hpbmcgZGVzdGluYXRpb24gc3VyZmFjZS4iKTsKLSAgICAgICAgc3VyZmFjZS0+
UmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwot
ICAgIH0KLQotICAgIHJlc3VsdCA9IGRldmljZS0+R2V0UmVuZGVyVGFyZ2V0RGF0YShzdXJmYWNl
LCByZW5kZXJUYXJnZXREYXRhKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0g
ICAgICAgIEVSUigiR2V0UmVuZGVyVGFyZ2V0RGF0YSB1bmV4cGVjdGVkbHkgZmFpbGVkLiIpOwot
ICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7Ci0gICAgICAgIHN1cmZhY2UtPlJl
bGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAg
ICB9Ci0KLSAgICBSRUNUIHNvdXJjZVJlY3QgPSB7eCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0
fTsKLSAgICBSRUNUIGRlc3RSZWN0ID0ge3hvZmZzZXQsIHlvZmZzZXQsIHhvZmZzZXQgKyB3aWR0
aCwgeW9mZnNldCArIGhlaWdodH07Ci0KLSAgICBEM0RMT0NLRURfUkVDVCBzb3VyY2VMb2NrID0g
ezB9OwotICAgIHJlc3VsdCA9IHJlbmRlclRhcmdldERhdGEtPkxvY2tSZWN0KCZzb3VyY2VMb2Nr
LCAmc291cmNlUmVjdCwgMCk7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAg
ICAgICBFUlIoIkZhaWxlZCB0byBsb2NrIHRoZSBzb3VyY2Ugc3VyZmFjZSAocmVjdGFuZ2xlIG1p
Z2h0IGJlIGludmFsaWQpLiIpOwotICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7
Ci0gICAgICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICBEM0RMT0NLRURfUkVDVCBkZXN0TG9jayA9
IHswfTsKLSAgICByZXN1bHQgPSBsb2NrKCZkZXN0TG9jaywgJmRlc3RSZWN0KTsKLSAgICAKLSAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byBsb2Nr
IHRoZSBkZXN0aW5hdGlvbiBzdXJmYWNlIChyZWN0YW5nbGUgbWlnaHQgYmUgaW52YWxpZCkuIik7
Ci0gICAgICAgIHJlbmRlclRhcmdldERhdGEtPlVubG9ja1JlY3QoKTsKLSAgICAgICAgcmVuZGVy
VGFyZ2V0RGF0YS0+UmVsZWFzZSgpOwotICAgICAgICBzdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotCi0gICAgaWYg
KGRlc3RMb2NrLnBCaXRzICYmIHNvdXJjZUxvY2sucEJpdHMpCi0gICAgewotICAgICAgICB1bnNp
Z25lZCBjaGFyICpzb3VyY2UgPSAodW5zaWduZWQgY2hhciopc291cmNlTG9jay5wQml0czsKLSAg
ICAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9ICh1bnNpZ25lZCBjaGFyKilkZXN0TG9jay5wQml0
czsKLQotICAgICAgICBzd2l0Y2ggKGRlc2NyaXB0aW9uLkZvcm1hdCkKLSAgICAgICAgewotICAg
ICAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhH
OEI4OgotICAgICAgICAgICAgc3dpdGNoKGdldEQzREZvcm1hdCgpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAgICAgICAgICAgICAgY2FzZSBE
M0RGTVRfQThSOEc4Qjg6Ci0gICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdo
dDsgeSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbWVtY3B5KGRl
c3QsIHNvdXJjZSwgNCAqIHdpZHRoKTsKLQotICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0g
c291cmNlTG9jay5QaXRjaDsKLSAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5Q
aXRjaDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGNhc2UgRDNERk1UX0w4OgotICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkg
PCBoZWlnaHQ7IHkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGZv
cihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBkZXN0W3hdID0gc291cmNlW3ggKiA0ICsgMl07Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9j
ay5QaXRjaDsKLSAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh
c2UgRDNERk1UX0E4TDg6Ci0gICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdo
dDsgeSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4
ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3RbeCAqIDIgKyAwXSA9IHNvdXJjZVt4ICogNCArIDJdOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFt4ICogMiArIDFdID0gc291cmNlW3ggKiA0ICsgM107Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291
cmNlTG9jay5QaXRjaDsKLSAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRj
aDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKLSAg
ICAgICAgICAgIHN3aXRjaChnZXREM0RGb3JtYXQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICAgICAgICAgICAgZm9yKGludCB5ID0g
MDsgeSA8IGhlaWdodDsgeSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYiA9ICgodW5zaWduZWQg
c2hvcnQqKXNvdXJjZSlbeF07Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFy
IHJlZCA9IChyZ2IgJiAweEY4MDApID4+IDg7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBjaGFyIGdyZWVuID0gKHJnYiAmIDB4MDdFMCkgPj4gMzsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGNoYXIgYmx1ZSA9IChyZ2IgJiAweDAwMUYpIDw8IDM7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0W3ggKyAwXSA9IGJsdWUgfCAoYmx1ZSA+PiA1KTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc3RbeCArIDFdID0gZ3JlZW4gfCAoZ3JlZW4gPj4gNik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKyAyXSA9IHJlZCB8IChyZWQgPj4gNSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKyAzXSA9IDB4RkY7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5QaXRj
aDsKLSAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNE
Rk1UX0w4OgotICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHgg
PCB3aWR0aDsgeCsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBjaGFyIHJlZCA9IHNvdXJjZVt4ICogMiArIDFdICYgMHhGODsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc3RbeF0gPSByZWQgfCAocmVkID4+IDUpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2su
UGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKLSAgICAgICAg
ICAgIHN3aXRjaChnZXREM0RGb3JtYXQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
Y2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8
IGhlaWdodDsgeSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZm9y
KGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGFyZ2IgPSAoKHVuc2lnbmVkIHNob3J0
Kilzb3VyY2UpW3hdOwotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZWQg
PSAoYXJnYiAmIDB4N0MwMCkgPj4gNzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIgZ3JlZW4gPSAoYXJnYiAmIDB4MDNFMCkgPj4gMjsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGNoYXIgYmx1ZSA9IChhcmdiICYgMHgwMDFGKSA8PCAzOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdFt4ICsgMF0gPSBibHVlIHwgKGJsdWUgPj4gNSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0W3ggKyAxXSA9IGdyZWVuIHwgKGdyZWVuID4+IDUpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICsgMl0gPSByZWQgfCAocmVkID4+IDUpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICsgM10gPSAweEZGOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7
Ci0gICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZN
VF9BOFI4RzhCODoKLSAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5
KyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAw
OyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgc2hvcnQgYXJnYiA9ICgodW5zaWduZWQgc2hvcnQqKXNvdXJjZSlb
eF07Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHJlZCA9IChhcmdiICYg
MHg3QzAwKSA+PiA3OwotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBncmVl
biA9IChhcmdiICYgMHgwM0UwKSA+PiAyOwotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgY2hhciBibHVlID0gKGFyZ2IgJiAweDAwMUYpIDw8IDM7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBjaGFyIGFscGhhID0gKHNpZ25lZCBzaG9ydClhcmdiID4+IDE1OwotICAg
ICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICsgMF0gPSBibHVlIHwgKGJsdWUgPj4gNSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKyAxXSA9IGdyZWVuIHwgKGdyZWVuID4+IDUp
OwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICsgMl0gPSByZWQgfCAocmVkID4+IDUp
OwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICsgM10gPSBhbHBoYTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2Nr
LlBpdGNoOwotICAgICAgICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBEM0RGTVRfTDg6Ci0gICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsg
eSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0g
MDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVkID0gc291cmNlW3ggKiAyICsgMV0gJiAweDdDOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4XSA9IChyZWQgPDwgMSkgfCAocmVkID4+IDQp
OwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgc291cmNlICs9
IHNvdXJjZUxvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2su
UGl0Y2g7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEQzREZNVF9BOEw4OgotICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7
IHkgPCBoZWlnaHQ7IHkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHJlZCA9IHNvdXJjZVt4ICogMiAr
IDFdICYgMHg3QzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCAqIDIgKyAwXSA9IChy
ZWQgPDwgMSkgfCAocmVkID4+IDQpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICog
MiArIDFdID0gKHNpZ25lZCBjaGFyKXNvdXJjZVt4ICogMiArIDFdID4+IDc7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5Q
aXRjaDsKLSAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBVTlJFQUNIQUJM
RSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdW5sb2NrKCk7Ci0gICAgcmVuZGVyVGFyZ2V0
RGF0YS0+VW5sb2NrUmVjdCgpOwotCi0gICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgpOwot
ICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsKLQotICAgIG1EaXJ0eSA9IHRydWU7Ci19Ci0KLX0KXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlOS5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZTkuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMmZiYmNhMzEyNDNkMmFjNDdkNTc0OGQ1YTFjN2ZhZjdkNWNhODIwNi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlOS5oCisrKyAvZGV2L251bGwK
QEAgLTEsNzkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gSW1hZ2U5Lmg6IERlZmlu
ZXMgdGhlIHJ4OjpJbWFnZTkgY2xhc3MsIHdoaWNoIGFjdHMgYXMgdGhlIGludGVyZmFjZSB0bwot
Ly8gdGhlIGFjdHVhbCB1bmRlcmx5aW5nIHN1cmZhY2VzIG9mIGEgVGV4dHVyZS4KLQotI2lmbmRl
ZiBMSUJHTEVTVjJfUkVOREVSRVJfSU1BR0U5X0hfCi0jZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJF
Ul9JTUFHRTlfSF8KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZS5oIgotI2lu
Y2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLWNsYXNzIEZyYW1lYnVm
ZmVyOwotfQotCi1uYW1lc3BhY2UgcngKLXsKLWNsYXNzIFJlbmRlcmVyOwotY2xhc3MgUmVuZGVy
ZXI5OwotY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRDsKLWNsYXNzIFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlQ3ViZTsKLQotY2xhc3MgSW1hZ2U5IDogcHVibGljIEltYWdlCi17Ci0gIHB1
YmxpYzoKLSAgICBJbWFnZTkoKTsKLSAgICB+SW1hZ2U5KCk7Ci0KLSAgICBzdGF0aWMgSW1hZ2U5
ICptYWtlSW1hZ2U5KEltYWdlICppbWcpOwotCi0gICAgc3RhdGljIHZvaWQgZ2VuZXJhdGVNaXBt
YXAoSW1hZ2U5ICpkZXN0LCBJbWFnZTkgKnNvdXJjZSk7Ci0gICAgc3RhdGljIHZvaWQgZ2VuZXJh
dGVNaXAoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJmYWNlLCBJRGlyZWN0M0RTdXJmYWNlOSAq
c291cmNlU3VyZmFjZSk7Ci0gICAgc3RhdGljIHZvaWQgY29weUxvY2thYmxlU3VyZmFjZXMoSURp
cmVjdDNEU3VyZmFjZTkgKmRlc3QsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UpOwotCi0gICAg
dmlydHVhbCBib29sIHJlZGVmaW5lKFJlbmRlcmVyICpyZW5kZXJlciwgR0xpbnQgaW50ZXJuYWxm
b3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBib29sIGZvcmNlUmVsZWFzZSk7
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJhYmxlRm9ybWF0KCkgY29uc3Q7Ci0gICAgRDNE
Rk9STUFUIGdldEQzREZvcm1hdCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIGlzRGlydHko
KSBjb25zdCB7cmV0dXJuIG1TdXJmYWNlICYmIG1EaXJ0eTt9Ci0gICAgSURpcmVjdDNEU3VyZmFj
ZTkgKmdldFN1cmZhY2UoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRNYW5hZ2VkU3VyZmFjZShU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwpOwotICAgIHZpcnR1
YWwgdm9pZCBzZXRNYW5hZ2VkU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0
b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2ZWwpOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVTdXJm
YWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwot
ICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3Vi
ZSAqc3RvcmFnZSwgaW50IGZhY2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotCi0gICAgdmlydHVhbCB2b2lk
IGxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBj
b25zdCB2b2lkICppbnB1dCk7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0
KTsKLQotICAgIHZpcnR1YWwgdm9pZCBjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBnbDo6RnJh
bWVidWZmZXIgKnNvdXJjZSk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9B
U1NJR04oSW1hZ2U5KTsKLQotICAgIHZvaWQgY3JlYXRlU3VyZmFjZSgpOwotICAgIHZvaWQgc2V0
TWFuYWdlZFN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UpOwotICAgIGJvb2wgdXBk
YXRlU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotCi0gICAgSFJFU1VMVCBs
b2NrKEQzRExPQ0tFRF9SRUNUICpsb2NrZWRSZWN0LCBjb25zdCBSRUNUICpyZWN0KTsKLSAgICB2
b2lkIHVubG9jaygpOwotICAgIAotICAgIFJlbmRlcmVyOSAqbVJlbmRlcmVyOwotCi0gICAgRDNE
UE9PTCBtRDNEUG9vbDsgICAvLyBjYW4gb25seSBiZSBEM0RQT09MX1NZU1RFTU1FTSBvciBEM0RQ
T09MX01BTkFHRUQgc2luY2UgaXQgbmVlZHMgdG8gYmUgbG9ja2FibGUuCi0gICAgRDNERk9STUFU
IG1EM0RGb3JtYXQ7Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVN1cmZhY2U7Ci19OwotfQot
Ci0jZW5kaWYgICAvLyBMSUJHTEVTVjJfUkVOREVSRVJfSU1BR0U5X0hfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4QnVmZmVy
MTEuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9J
bmRleEJ1ZmZlcjExLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjY2MDRjNDU1
ODI0Y2Y2YTRhNzc2YjA2MTk4MmM1OTE4ZTVjOTZiYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL0luZGV4QnVmZmVyMTEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTgzICsw
LDAgQEAKLSNpbmNsdWRlICJwcmVjb21waWxlZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAx
MiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIEluZGV4
QnVmZmVyMTEuY3BwOiBEZWZpbmVzIHRoZSBEM0QxMSBJbmRleEJ1ZmZlciBpbXBsZW1lbnRhdGlv
bi4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZlcjExLmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyMTEuaCIKLQotbmFtZXNwYWNlIHJ4Ci17
Ci0KLUluZGV4QnVmZmVyMTE6OkluZGV4QnVmZmVyMTEoUmVuZGVyZXIxMSAqY29uc3QgcmVuZGVy
ZXIpIDogbVJlbmRlcmVyKHJlbmRlcmVyKQotewotICAgIG1CdWZmZXIgPSBOVUxMOwotICAgIG1C
dWZmZXJTaXplID0gMDsKLSAgICBtRHluYW1pY1VzYWdlID0gZmFsc2U7Ci19Ci0KLUluZGV4QnVm
ZmVyMTE6On5JbmRleEJ1ZmZlcjExKCkKLXsKLSAgICBpZiAobUJ1ZmZlcikKLSAgICB7Ci0gICAg
ICAgIG1CdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJ1ZmZlciA9IE5VTEw7Ci0gICAgfQot
fQotCi1ib29sIEluZGV4QnVmZmVyMTE6OmluaXRpYWxpemUodW5zaWduZWQgaW50IGJ1ZmZlclNp
emUsIEdMZW51bSBpbmRleFR5cGUsIGJvb2wgZHluYW1pYykKLXsKLSAgICBpZiAobUJ1ZmZlcikK
LSAgICB7Ci0gICAgICAgIG1CdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJ1ZmZlciA9IE5V
TEw7Ci0gICAgfQotCi0gICAgdXBkYXRlU2VyaWFsKCk7Ci0KLSAgICBpZiAoYnVmZmVyU2l6ZSA+
IDApCi0gICAgewotICAgICAgICBJRDNEMTFEZXZpY2UqIGR4RGV2aWNlID0gbVJlbmRlcmVyLT5n
ZXREZXZpY2UoKTsKLQotICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyBidWZmZXJEZXNjOwotICAg
ICAgICBidWZmZXJEZXNjLkJ5dGVXaWR0aCA9IGJ1ZmZlclNpemU7Ci0gICAgICAgIGJ1ZmZlckRl
c2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9EWU5BTUlDOwotICAgICAgICBidWZmZXJEZXNjLkJpbmRG
bGFncyA9IEQzRDExX0JJTkRfSU5ERVhfQlVGRkVSOwotICAgICAgICBidWZmZXJEZXNjLkNQVUFj
Y2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsKLSAgICAgICAgYnVmZmVyRGVzYy5N
aXNjRmxhZ3MgPSAwOwotICAgICAgICBidWZmZXJEZXNjLlN0cnVjdHVyZUJ5dGVTdHJpZGUgPSAw
OwotCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZHhEZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmYnVm
ZmVyRGVzYywgTlVMTCwgJm1CdWZmZXIpOwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIG1CdWZmZXJTaXplID0gYnVmZmVyU2l6ZTsKLSAgICBtSW5kZXhUeXBlID0gaW5kZXhUeXBl
OwotICAgIG1EeW5hbWljVXNhZ2UgPSBkeW5hbWljOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LUluZGV4QnVmZmVyMTEgKkluZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1ZmZlcjExKEluZGV4QnVm
ZmVyICppbmRleEJ1ZmZlcikKLXsKLSAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShJbmRleEJ1
ZmZlcjExKiwgaW5kZXhCdWZmZXIpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW5kZXhCdWZm
ZXIxMSo+KGluZGV4QnVmZmVyKTsKLX0KLQotYm9vbCBJbmRleEJ1ZmZlcjExOjptYXBCdWZmZXIo
dW5zaWduZWQgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IHNpemUsIHZvaWQqKiBvdXRNYXBwZWRN
ZW1vcnkpCi17Ci0gICAgaWYgKG1CdWZmZXIpCi0gICAgewotICAgICAgICAvLyBDaGVjayBmb3Ig
aW50ZWdlciBvdmVyZmxvd3MgYW5kIG91dC1vdXQtYm91bmRzIG1hcCByZXF1ZXN0cwotICAgICAg
ICBpZiAob2Zmc2V0ICsgc2l6ZSA8IG9mZnNldCB8fCBvZmZzZXQgKyBzaXplID4gbUJ1ZmZlclNp
emUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiSW5kZXggYnVmZmVyIG1hcCByYW5nZSBp
cyBub3QgaW5zaWRlIHRoZSBidWZmZXIuIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLQotICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpkeENvbnRleHQgPSBtUmVu
ZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKLQotICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVT
T1VSQ0UgbWFwcGVkUmVzb3VyY2U7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZHhDb250ZXh0
LT5NYXAobUJ1ZmZlciwgMCwgRDNEMTFfTUFQX1dSSVRFX05PX09WRVJXUklURSwgMCwgJm1hcHBl
ZFJlc291cmNlKTsKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBFUlIoIkluZGV4IGJ1ZmZlciBtYXAgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4Iiwg
cmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAg
ICpvdXRNYXBwZWRNZW1vcnkgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihtYXBwZWRSZXNvdXJj
ZS5wRGF0YSkgKyBvZmZzZXQ7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNl
Ci0gICAgewotICAgICAgICBFUlIoIkluZGV4IGJ1ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgSW5kZXhCdWZmZXIxMTo6dW5t
YXBCdWZmZXIoKQotewotICAgIGlmIChtQnVmZmVyKQotICAgIHsKLSAgICAgICAgSUQzRDExRGV2
aWNlQ29udGV4dCAqZHhDb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7Ci0g
ICAgICAgIGR4Q29udGV4dC0+VW5tYXAobUJ1ZmZlciwgMCk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBFUlIoIkluZGV4IGJ1ZmZlciBub3Qg
aW5pdGlhbGl6ZWQuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLUdMZW51
bSBJbmRleEJ1ZmZlcjExOjpnZXRJbmRleFR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBtSW5k
ZXhUeXBlOwotfQotCi11bnNpZ25lZCBpbnQgSW5kZXhCdWZmZXIxMTo6Z2V0QnVmZmVyU2l6ZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1CdWZmZXJTaXplOwotfQotCi1ib29sIEluZGV4QnVmZmVy
MTE6OnNldFNpemUodW5zaWduZWQgaW50IGJ1ZmZlclNpemUsIEdMZW51bSBpbmRleFR5cGUpCi17
Ci0gICAgaWYgKGJ1ZmZlclNpemUgPiBtQnVmZmVyU2l6ZSB8fCBpbmRleFR5cGUgIT0gbUluZGV4
VHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpbml0aWFsaXplKGJ1ZmZlclNpemUsIGluZGV4
VHlwZSwgbUR5bmFtaWNVc2FnZSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBJbmRleEJ1ZmZlcjExOjpkaXNjYXJkKCkKLXsK
LSAgICBpZiAobUJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmR4
Q29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotCi0gICAgICAgIEQzRDEx
X01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJjZTsKLSAgICAgICAgSFJFU1VMVCByZXN1
bHQgPSBkeENvbnRleHQtPk1hcChtQnVmZmVyLCAwLCBEM0QxMV9NQVBfV1JJVEVfRElTQ0FSRCwg
MCwgJm1hcHBlZFJlc291cmNlKTsKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBFUlIoIkluZGV4IGJ1ZmZlciBtYXAgZmFpbGVkIHdpdGggZXJyb3Ig
MHglMDh4IiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGR4Q29udGV4dC0+VW5tYXAobUJ1ZmZlciwgMCk7Ci0KLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIEVSUigiSW5kZXggYnVmZmVy
IG5vdCBpbml0aWFsaXplZC4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQot
RFhHSV9GT1JNQVQgSW5kZXhCdWZmZXIxMTo6Z2V0SW5kZXhGb3JtYXQoKSBjb25zdAotewotICAg
IHN3aXRjaCAobUluZGV4VHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6
ICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMTZfVUlOVDsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURf
U0hPUlQ6ICAgcmV0dXJuIERYR0lfRk9STUFUX1IxNl9VSU5UOwotICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9JTlQ6ICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjMyX1VJTlQ7Ci0gICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOyAgIHJldHVybiBEWEdJX0ZPUk1BVF9VTktOT1dOOwotICAgIH0KLX0K
LQotSUQzRDExQnVmZmVyICpJbmRleEJ1ZmZlcjExOjpnZXRCdWZmZXIoKSBjb25zdAotewotICAg
IHJldHVybiBtQnVmZmVyOwotfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9J
bmRleEJ1ZmZlcjExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL0luZGV4QnVmZmVyMTEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzlh
NjE5NDZhZDZlZjg5MmM0Y2E2NmI2MDdlNjU5YTM1Y2MwOWRlNi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL0luZGV4QnVmZmVyMTEuaAorKysgL2Rldi9udWxsCkBAIC0xLDUz
ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBJbmRleEJ1ZmZlcjExLmg6IERlZmluZXMgdGhl
IEQzRDExIEluZGV4QnVmZmVyIGltcGxlbWVudGF0aW9uLgotCi0jaWZuZGVmIExJQkdMRVNWMl9S
RU5ERVJFUl9JTkRFWEJVRkZFUjExX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9JTkRF
WEJVRkZFUjExX0hfCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhCdWZmZXIu
aCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci1jbGFzcyBSZW5kZXJlcjExOwotCi1jbGFzcyBJbmRleEJ1
ZmZlcjExIDogcHVibGljIEluZGV4QnVmZmVyCi17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBJ
bmRleEJ1ZmZlcjExKFJlbmRlcmVyMTEgKmNvbnN0IHJlbmRlcmVyKTsKLSAgICB2aXJ0dWFsIH5J
bmRleEJ1ZmZlcjExKCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZSh1bnNpZ25lZCBp
bnQgYnVmZmVyU2l6ZSwgR0xlbnVtIGluZGV4VHlwZSwgYm9vbCBkeW5hbWljKTsKLQotICAgIHN0
YXRpYyBJbmRleEJ1ZmZlcjExICptYWtlSW5kZXhCdWZmZXIxMShJbmRleEJ1ZmZlciAqaW5kZXhC
dWZmZXIpOwotCi0gICAgdmlydHVhbCBib29sIG1hcEJ1ZmZlcih1bnNpZ25lZCBpbnQgb2Zmc2V0
LCB1bnNpZ25lZCBpbnQgc2l6ZSwgdm9pZCoqIG91dE1hcHBlZE1lbW9yeSk7Ci0gICAgdmlydHVh
bCBib29sIHVubWFwQnVmZmVyKCk7Ci0KLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRJbmRleFR5cGUo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRCdWZmZXJTaXplKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBib29sIHNldFNpemUodW5zaWduZWQgaW50IGJ1ZmZlclNpemUsIEdMZW51
bSBpbmRleFR5cGUpOwotCi0gICAgdmlydHVhbCBib29sIGRpc2NhcmQoKTsKLQotICAgIERYR0lf
Rk9STUFUIGdldEluZGV4Rm9ybWF0KCkgY29uc3Q7Ci0gICAgSUQzRDExQnVmZmVyICpnZXRCdWZm
ZXIoKSBjb25zdDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihJ
bmRleEJ1ZmZlcjExKTsKLQotICAgIHJ4OjpSZW5kZXJlcjExICpjb25zdCBtUmVuZGVyZXI7Ci0K
LSAgICBJRDNEMTFCdWZmZXIgKm1CdWZmZXI7Ci0gICAgdW5zaWduZWQgaW50IG1CdWZmZXJTaXpl
OwotICAgIEdMZW51bSBtSW5kZXhUeXBlOwotICAgIGJvb2wgbUR5bmFtaWNVc2FnZTsKLX07Ci0K
LX0KLQotI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9JTkRFWEJVRkZFUjExX0hfClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZlcjkuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZlcjkuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmQ4M2M1ZGNhN2FmMzhlNjA5YjM0ZTI5YTM4MDY2
ZmFhYzE2YTUwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhCdWZm
ZXI5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwNyArMCwwIEBACi0jaW5jbHVkZSAicHJlY29t
cGlsZWQuaCIKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIEluZGV4ZmZlcjkuY3BwOiBEZWZpbmVz
IHRoZSBEM0Q5IEluZGV4QnVmZmVyIGltcGxlbWVudGF0aW9uLgotCi0jaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL0luZGV4QnVmZmVyOS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9SZW5kZXJlcjkuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLUluZGV4QnVmZmVyOTo6SW5kZXhC
dWZmZXI5KFJlbmRlcmVyOSAqY29uc3QgcmVuZGVyZXIpIDogbVJlbmRlcmVyKHJlbmRlcmVyKQot
ewotICAgIG1JbmRleEJ1ZmZlciA9IE5VTEw7Ci0gICAgbUJ1ZmZlclNpemUgPSAwOwotICAgIG1J
bmRleFR5cGUgPSAwOwotICAgIG1EeW5hbWljID0gZmFsc2U7Ci19Ci0KLUluZGV4QnVmZmVyOTo6
fkluZGV4QnVmZmVyOSgpCi17Ci0gICAgaWYgKG1JbmRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAg
IG1JbmRleEJ1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtSW5kZXhCdWZmZXIgPSBOVUxMOwot
ICAgIH0KLX0KLQotYm9vbCBJbmRleEJ1ZmZlcjk6OmluaXRpYWxpemUodW5zaWduZWQgaW50IGJ1
ZmZlclNpemUsIEdMZW51bSBpbmRleFR5cGUsIGJvb2wgZHluYW1pYykKLXsKLSAgICBpZiAobUlu
ZGV4QnVmZmVyKQotICAgIHsKLSAgICAgICAgbUluZGV4QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAg
ICAgIG1JbmRleEJ1ZmZlciA9IE5VTEw7Ci0gICAgfQotCi0gICAgdXBkYXRlU2VyaWFsKCk7Ci0K
LSAgICBpZiAoYnVmZmVyU2l6ZSA+IDApCi0gICAgewotICAgICAgICBEM0RGT1JNQVQgZm9ybWF0
OwotICAgICAgICBpZiAoaW5kZXhUeXBlID09IEdMX1VOU0lHTkVEX1NIT1JUIHx8IGluZGV4VHlw
ZSA9PSBHTF9VTlNJR05FRF9CWVRFKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3JtYXQgPSBE
M0RGTVRfSU5ERVgxNjsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChpbmRleFR5cGUgPT0g
R0xfVU5TSUdORURfSU5UKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobVJlbmRlcmVyLT5n
ZXQzMkJpdEluZGV4U3VwcG9ydCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZv
cm1hdCA9IEQzREZNVF9JTkRFWDMyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigiQXR0ZW1wdGVkIHRvIGNyZWF0ZSBh
IDMyLWJpdCBpbmRleCBidWZmZXIgYnV0IHJlbmRlcmVyIGRvZXMgbm90IHN1cHBvcnQgMzItYml0
IGluZGljZXMuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJJ
bnZhbGlkIGluZGV4IHR5cGUgJXUuIiwgaW5kZXhUeXBlKTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIERXT1JEIHVzYWdlRmxhZ3MgPSBEM0RVU0FHRV9X
UklURU9OTFk7Ci0gICAgICAgIGlmIChkeW5hbWljKQotICAgICAgICB7Ci0gICAgICAgICAgICB1
c2FnZUZsYWdzIHw9IEQzRFVTQUdFX0RZTkFNSUM7Ci0gICAgICAgIH0KLQotICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IG1SZW5kZXJlci0+Y3JlYXRlSW5kZXhCdWZmZXIoYnVmZmVyU2l6ZSwgdXNh
Z2VGbGFncywgZm9ybWF0LCAmbUluZGV4QnVmZmVyKTsKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1
bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBjcmVhdGUgYW4gaW5k
ZXggYnVmZmVyIG9mIHNpemUgJXUsIHJlc3VsdDogMHglMDh4LiIsIG1CdWZmZXJTaXplLCByZXN1
bHQpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
bUJ1ZmZlclNpemUgPSBidWZmZXJTaXplOwotICAgIG1JbmRleFR5cGUgPSBpbmRleFR5cGU7Ci0g
ICAgbUR5bmFtaWMgPSBkeW5hbWljOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUluZGV4QnVm
ZmVyOSAqSW5kZXhCdWZmZXI5OjptYWtlSW5kZXhCdWZmZXI5KEluZGV4QnVmZmVyICppbmRleEJ1
ZmZlcikKLXsKLSAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShJbmRleEJ1ZmZlcjkqLCBpbmRl
eEJ1ZmZlcikpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbmRleEJ1ZmZlcjkqPihpbmRleEJ1
ZmZlcik7Ci19Ci0KLWJvb2wgSW5kZXhCdWZmZXI5OjptYXBCdWZmZXIodW5zaWduZWQgaW50IG9m
ZnNldCwgdW5zaWduZWQgaW50IHNpemUsIHZvaWQqKiBvdXRNYXBwZWRNZW1vcnkpCi17Ci0gICAg
aWYgKG1JbmRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIERXT1JEIGxvY2tGbGFncyA9IG1EeW5h
bWljID8gRDNETE9DS19OT09WRVJXUklURSA6IDA7Ci0KLSAgICAgICAgdm9pZCAqbWFwUHRyID0g
TlVMTDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtSW5kZXhCdWZmZXItPkxvY2sob2Zmc2V0
LCBzaXplLCAmbWFwUHRyLCBsb2NrRmxhZ3MpOwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiSW5kZXggYnVmZmVyIGxvY2sgZmFpbGVkIHdp
dGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotCi0gICAgICAgICpvdXRNYXBwZWRNZW1vcnkgPSBtYXBQdHI7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBFUlIoIkluZGV4IGJ1
ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19
Ci0KLWJvb2wgSW5kZXhCdWZmZXI5Ojp1bm1hcEJ1ZmZlcigpCi17Ci0gICAgaWYgKG1JbmRleEJ1
ZmZlcikKLSAgICB7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUluZGV4QnVmZmVyLT5Vbmxv
Y2soKTsKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBFUlIoIkluZGV4IGJ1ZmZlciB1bmxvY2sgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVz
dWx0KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBFUlIoIkluZGV4IGJ1
ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19
Ci0KLUdMZW51bSBJbmRleEJ1ZmZlcjk6OmdldEluZGV4VHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1JbmRleFR5cGU7Ci19Ci0KLXVuc2lnbmVkIGludCBJbmRleEJ1ZmZlcjk6OmdldEJ1ZmZl
clNpemUoKSBjb25zdAotewotICAgIHJldHVybiBtQnVmZmVyU2l6ZTsKLX0KLQotYm9vbCBJbmRl
eEJ1ZmZlcjk6OnNldFNpemUodW5zaWduZWQgaW50IGJ1ZmZlclNpemUsIEdMZW51bSBpbmRleFR5
cGUpCi17Ci0gICAgaWYgKGJ1ZmZlclNpemUgPiBtQnVmZmVyU2l6ZSB8fCBpbmRleFR5cGUgIT0g
bUluZGV4VHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpbml0aWFsaXplKGJ1ZmZlclNpemUs
IGluZGV4VHlwZSwgbUR5bmFtaWMpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgSW5kZXhCdWZmZXI5OjpkaXNjYXJkKCkKLXsK
LSAgICBpZiAobUluZGV4QnVmZmVyKQotICAgIHsKLSAgICAgICAgdm9pZCAqZHVtbXk7Ci0gICAg
ICAgIEhSRVNVTFQgcmVzdWx0OwotCi0gICAgICAgIHJlc3VsdCA9IG1JbmRleEJ1ZmZlci0+TG9j
aygwLCAxLCAmZHVtbXksIEQzRExPQ0tfRElTQ0FSRCk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJEaXNjYXJkIGxvY2sgZmFpbGVkIHdp
dGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHJlc3VsdCA9IG1JbmRleEJ1ZmZlci0+VW5sb2NrKCk7Ci0gICAg
ICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJEaXNj
YXJkIHVubG9jayBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgiLCByZXN1bHQpOwotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIEVSUigiSW5kZXggYnVmZmVyIG5vdCBpbml0aWFs
aXplZC4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotRDNERk9STUFUIElu
ZGV4QnVmZmVyOTo6Z2V0SW5kZXhGb3JtYXQoKSBjb25zdAotewotICAgIHN3aXRjaCAobUluZGV4
VHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6ICAgIHJldHVybiBEM0RG
TVRfSU5ERVgxNjsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6ICAgcmV0dXJuIEQzREZN
VF9JTkRFWDE2OwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6ICAgICByZXR1cm4gRDNERk1U
X0lOREVYMzI7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgIHJldHVybiBEM0RGTVRf
VU5LTk9XTjsKLSAgICB9Ci19Ci0KLUlEaXJlY3QzREluZGV4QnVmZmVyOSAqIEluZGV4QnVmZmVy
OTo6Z2V0QnVmZmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUluZGV4QnVmZmVyOwotfQotCi19
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZlcjkuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhCdWZmZXI5LmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MDE4Njc1MzI0NTU3M2IzN2E4OGQ5YTVkZGFm
NWM0MDc0ZTBlMjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1
ZmZlcjkuaAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLS8vIEluZGV4ZmZlcjkuaDogRGVmaW5lcyB0aGUgRDNEOSBJbmRleEJ1ZmZlciBpbXBsZW1l
bnRhdGlvbi4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfSU5ERVhCVUZGRVI5X0hfCi0j
ZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9JTkRFWEJVRkZFUjlfSF8KLQotI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZlci5oIgotCi1uYW1lc3BhY2UgcngKLXsKLWNsYXNz
IFJlbmRlcmVyOTsKLQotY2xhc3MgSW5kZXhCdWZmZXI5IDogcHVibGljIEluZGV4QnVmZmVyCi17
Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBJbmRleEJ1ZmZlcjkoUmVuZGVyZXI5ICpjb25zdCBy
ZW5kZXJlcik7Ci0gICAgdmlydHVhbCB+SW5kZXhCdWZmZXI5KCk7Ci0KLSAgICB2aXJ0dWFsIGJv
b2wgaW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSwgR0xlbnVtIGluZGV4VHlwZSwg
Ym9vbCBkeW5hbWljKTsKLQotICAgIHN0YXRpYyBJbmRleEJ1ZmZlcjkgKm1ha2VJbmRleEJ1ZmZl
cjkoSW5kZXhCdWZmZXIgKmluZGV4QnVmZmVyKTsKLQotICAgIHZpcnR1YWwgYm9vbCBtYXBCdWZm
ZXIodW5zaWduZWQgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IHNpemUsIHZvaWQqKiBvdXRNYXBw
ZWRNZW1vcnkpOwotICAgIHZpcnR1YWwgYm9vbCB1bm1hcEJ1ZmZlcigpOwotCi0gICAgdmlydHVh
bCBHTGVudW0gZ2V0SW5kZXhUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQg
Z2V0QnVmZmVyU2l6ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBzZXRTaXplKHVuc2lnbmVk
IGludCBidWZmZXJTaXplLCBHTGVudW0gaW5kZXhUeXBlKTsKLQotICAgIHZpcnR1YWwgYm9vbCBk
aXNjYXJkKCk7Ci0KLSAgICBEM0RGT1JNQVQgZ2V0SW5kZXhGb3JtYXQoKSBjb25zdDsKLSAgICBJ
RGlyZWN0M0RJbmRleEJ1ZmZlcjkgKmdldEJ1ZmZlcigpIGNvbnN0OwotCi0gIHByaXZhdGU6Ci0g
ICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEluZGV4QnVmZmVyOSk7Ci0KLSAgICByeDo6UmVu
ZGVyZXI5ICpjb25zdCBtUmVuZGVyZXI7Ci0KLSAgICBJRGlyZWN0M0RJbmRleEJ1ZmZlcjkgKm1J
bmRleEJ1ZmZlcjsKLSAgICB1bnNpZ25lZCBpbnQgbUJ1ZmZlclNpemU7Ci0gICAgR0xlbnVtIG1J
bmRleFR5cGU7Ci0gICAgYm9vbCBtRHluYW1pYzsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIExJQkdM
RVNWMl9SRU5ERVJFUl9JTkRFWEJVRkZFUjlfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5wdXRMYXlvdXRDYWNoZS5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0lucHV0TGF5b3V0
Q2FjaGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTUyZjNhMzI2ZWFkYTUx
OGJlNDNkMDgwM2Q3ZTYxZTExZTBmZjk1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvSW5wdXRMYXlvdXRDYWNoZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMTMgKzAsMCBA
QAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gSW5wdXRMYXlv
dXRDYWNoZS5jcHA6IERlZmluZXMgSW5wdXRMYXlvdXRDYWNoZSwgYSBjbGFzcyB0aGF0IGJ1aWxk
cyBhbmQgY2FjaGVzCi0vLyBEM0QxMSBpbnB1dCBsYXlvdXRzLgotCi0jaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL0lucHV0TGF5b3V0Q2FjaGUuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvVmVydGV4QnVmZmVyMTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvQnVm
ZmVyU3RvcmFnZTExLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckV4ZWN1
dGFibGUxMS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL0NvbnRleHQuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVmVy
dGV4RGF0YU1hbmFnZXIuaCIKLQotI2luY2x1ZGUgInRoaXJkX3BhcnR5L211cm11cmhhc2gvTXVy
bXVySGFzaDMuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLWNvbnN0IHVuc2lnbmVkIGludCBJbnB1
dExheW91dENhY2hlOjprTWF4SW5wdXRMYXlvdXRzID0gMTAyNDsKLQotSW5wdXRMYXlvdXRDYWNo
ZTo6SW5wdXRMYXlvdXRDYWNoZSgpIDogbUlucHV0TGF5b3V0TWFwKGtNYXhJbnB1dExheW91dHMs
IGhhc2hJbnB1dExheW91dCwgY29tcGFyZUlucHV0TGF5b3V0cykKLXsKLSAgICBtQ291bnRlciA9
IDA7Ci0gICAgbURldmljZSA9IE5VTEw7Ci0gICAgbURldmljZUNvbnRleHQgPSBOVUxMOwotICAg
IG1DdXJyZW50SUwgPSBOVUxMOwotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6
Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAgICAgICAgbUN1cnJlbnRCdWZmZXJz
W2ldID0gLTE7Ci0gICAgICAgIG1DdXJyZW50VmVydGV4U3RyaWRlc1tpXSA9IC0xOwotICAgICAg
ICBtQ3VycmVudFZlcnRleE9mZnNldHNbaV0gPSAtMTsKLSAgICB9Ci19Ci0KLUlucHV0TGF5b3V0
Q2FjaGU6On5JbnB1dExheW91dENhY2hlKCkKLXsKLSAgICBjbGVhcigpOwotfQotCi12b2lkIElu
cHV0TGF5b3V0Q2FjaGU6OmluaXRpYWxpemUoSUQzRDExRGV2aWNlICpkZXZpY2UsIElEM0QxMURl
dmljZUNvbnRleHQgKmNvbnRleHQpCi17Ci0gICAgY2xlYXIoKTsKLSAgICBtRGV2aWNlID0gZGV2
aWNlOwotICAgIG1EZXZpY2VDb250ZXh0ID0gY29udGV4dDsKLX0KLQotdm9pZCBJbnB1dExheW91
dENhY2hlOjpjbGVhcigpCi17Ci0gICAgZm9yIChJbnB1dExheW91dE1hcDo6aXRlcmF0b3IgaSA9
IG1JbnB1dExheW91dE1hcC5iZWdpbigpOyBpICE9IG1JbnB1dExheW91dE1hcC5lbmQoKTsgaSsr
KQotICAgIHsKLSAgICAgICAgaS0+c2Vjb25kLmlucHV0TGF5b3V0LT5SZWxlYXNlKCk7Ci0gICAg
fQotICAgIG1JbnB1dExheW91dE1hcC5jbGVhcigpOwotICAgIG1hcmtEaXJ0eSgpOwotfQotCi12
b2lkIElucHV0TGF5b3V0Q2FjaGU6Om1hcmtEaXJ0eSgpCi17Ci0gICAgbUN1cnJlbnRJTCA9IE5V
TEw7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRS
SUJTOyBpKyspCi0gICAgewotICAgICAgICBtQ3VycmVudEJ1ZmZlcnNbaV0gPSAtMTsKLSAgICAg
ICAgbUN1cnJlbnRWZXJ0ZXhTdHJpZGVzW2ldID0gLTE7Ci0gICAgICAgIG1DdXJyZW50VmVydGV4
T2Zmc2V0c1tpXSA9IC0xOwotICAgIH0KLX0KLQotR0xlbnVtIElucHV0TGF5b3V0Q2FjaGU6OmFw
cGx5VmVydGV4QnVmZmVycyhUcmFuc2xhdGVkQXR0cmlidXRlIGF0dHJpYnV0ZXNbZ2w6Ok1BWF9W
RVJURVhfQVRUUklCU10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KQotewotICAgIGludCBzb3J0ZWRT
ZW1hbnRpY0luZGljZXNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107Ci0gICAgcHJvZ3JhbUJpbmFy
eS0+c29ydEF0dHJpYnV0ZXNCeUxheW91dChhdHRyaWJ1dGVzLCBzb3J0ZWRTZW1hbnRpY0luZGlj
ZXMpOwotCi0gICAgaWYgKCFtRGV2aWNlIHx8ICFtRGV2aWNlQ29udGV4dCkKLSAgICB7Ci0gICAg
ICAgIEVSUigiSW5wdXRMYXlvdXRDYWNoZSBpcyBub3QgaW5pdGlhbGl6ZWQuIik7Ci0gICAgICAg
IHJldHVybiBHTF9JTlZBTElEX09QRVJBVElPTjsKLSAgICB9Ci0KLSAgICBJbnB1dExheW91dEtl
eSBpbEtleSA9IHsgMCB9OwotCi0gICAgSUQzRDExQnVmZmVyICp2ZXJ0ZXhCdWZmZXJzW2dsOjpN
QVhfVkVSVEVYX0FUVFJJQlNdID0geyBOVUxMIH07Ci0gICAgdW5zaWduZWQgaW50IHZlcnRleEJ1
ZmZlclNlcmlhbHNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10gPSB7IDAgfTsKLSAgICBVSU5UIHZl
cnRleFN0cmlkZXNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10gPSB7IDAgfTsKLSAgICBVSU5UIHZl
cnRleE9mZnNldHNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10gPSB7IDAgfTsKLQotICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBzZW1hbnRpY05hbWUgPSAiVEVYQ09PUkQiOwotCi0gICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAgewot
ICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5hY3RpdmUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IFZlcnRleEJ1ZmZlcjExICp2ZXJ0ZXhCdWZmZXIgPSBWZXJ0ZXhCdWZmZXIxMTo6bWFrZVZlcnRl
eEJ1ZmZlcjExKGF0dHJpYnV0ZXNbaV0udmVydGV4QnVmZmVyKTsKLSAgICAgICAgICAgIEJ1ZmZl
clN0b3JhZ2UxMSAqYnVmZmVyU3RvcmFnZSA9IGF0dHJpYnV0ZXNbaV0uc3RvcmFnZSA/IEJ1ZmZl
clN0b3JhZ2UxMTo6bWFrZUJ1ZmZlclN0b3JhZ2UxMShhdHRyaWJ1dGVzW2ldLnN0b3JhZ2UpIDog
TlVMTDsKLQotICAgICAgICAgICAgRDNEMTFfSU5QVVRfQ0xBU1NJRklDQVRJT04gaW5wdXRDbGFz
cyA9IGF0dHJpYnV0ZXNbaV0uZGl2aXNvciA+IDAgPyBEM0QxMV9JTlBVVF9QRVJfSU5TVEFOQ0Vf
REFUQSA6IEQzRDExX0lOUFVUX1BFUl9WRVJURVhfREFUQTsKLQotICAgICAgICAgICAgLy8gUmVj
b3JkIHRoZSB0eXBlIG9mIHRoZSBhc3NvY2lhdGVkIHZlcnRleCBzaGFkZXIgdmVjdG9yIGluIG91
ciBrZXkKLSAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBwcmV2ZW50IG1pc21hdGNoZWQgdmVydGV4
IHNoYWRlcnMgZnJvbSB1c2luZyB0aGUgc2FtZSBpbnB1dCBsYXlvdXQKLSAgICAgICAgICAgIEdM
aW50IGF0dHJpYnV0ZVNpemU7Ci0gICAgICAgICAgICBwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVB
dHRyaWJ1dGUoaWxLZXkuZWxlbWVudENvdW50LCAwLCBOVUxMLCAmYXR0cmlidXRlU2l6ZSwgJmls
S2V5LmVsZW1lbnRzW2lsS2V5LmVsZW1lbnRDb3VudF0uZ2xzbEVsZW1lbnRUeXBlLCBOVUxMKTsK
LQotICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5kZXNjLlNl
bWFudGljTmFtZSA9IHNlbWFudGljTmFtZTsKLSAgICAgICAgICAgIGlsS2V5LmVsZW1lbnRzW2ls
S2V5LmVsZW1lbnRDb3VudF0uZGVzYy5TZW1hbnRpY0luZGV4ID0gc29ydGVkU2VtYW50aWNJbmRp
Y2VzW2ldOwotICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5k
ZXNjLkZvcm1hdCA9IGF0dHJpYnV0ZXNbaV0uYXR0cmlidXRlLT5tQXJyYXlFbmFibGVkID8gdmVy
dGV4QnVmZmVyLT5nZXREWEdJRm9ybWF0KCphdHRyaWJ1dGVzW2ldLmF0dHJpYnV0ZSkgOiBEWEdJ
X0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQ7Ci0gICAgICAgICAgICBpbEtleS5lbGVtZW50c1tp
bEtleS5lbGVtZW50Q291bnRdLmRlc2MuSW5wdXRTbG90ID0gaTsKLSAgICAgICAgICAgIGlsS2V5
LmVsZW1lbnRzW2lsS2V5LmVsZW1lbnRDb3VudF0uZGVzYy5BbGlnbmVkQnl0ZU9mZnNldCA9IDA7
Ci0gICAgICAgICAgICBpbEtleS5lbGVtZW50c1tpbEtleS5lbGVtZW50Q291bnRdLmRlc2MuSW5w
dXRTbG90Q2xhc3MgPSBpbnB1dENsYXNzOwotICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxL
ZXkuZWxlbWVudENvdW50XS5kZXNjLkluc3RhbmNlRGF0YVN0ZXBSYXRlID0gYXR0cmlidXRlc1tp
XS5kaXZpc29yOwotICAgICAgICAgICAgaWxLZXkuZWxlbWVudENvdW50Kys7Ci0KLSAgICAgICAg
ICAgIHZlcnRleEJ1ZmZlcnNbaV0gPSBidWZmZXJTdG9yYWdlID8gYnVmZmVyU3RvcmFnZS0+Z2V0
QnVmZmVyKCkgOiB2ZXJ0ZXhCdWZmZXItPmdldEJ1ZmZlcigpOwotICAgICAgICAgICAgdmVydGV4
QnVmZmVyU2VyaWFsc1tpXSA9IGJ1ZmZlclN0b3JhZ2UgPyBidWZmZXJTdG9yYWdlLT5nZXRTZXJp
YWwoKSA6IHZlcnRleEJ1ZmZlci0+Z2V0U2VyaWFsKCk7Ci0gICAgICAgICAgICB2ZXJ0ZXhTdHJp
ZGVzW2ldID0gYXR0cmlidXRlc1tpXS5zdHJpZGU7Ci0gICAgICAgICAgICB2ZXJ0ZXhPZmZzZXRz
W2ldID0gYXR0cmlidXRlc1tpXS5vZmZzZXQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBJRDNE
MTFJbnB1dExheW91dCAqaW5wdXRMYXlvdXQgPSBOVUxMOwotCi0gICAgSW5wdXRMYXlvdXRNYXA6
Oml0ZXJhdG9yIGkgPSBtSW5wdXRMYXlvdXRNYXAuZmluZChpbEtleSk7Ci0gICAgaWYgKGkgIT0g
bUlucHV0TGF5b3V0TWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgaW5wdXRMYXlvdXQgPSBpLT5z
ZWNvbmQuaW5wdXRMYXlvdXQ7Ci0gICAgICAgIGktPnNlY29uZC5sYXN0VXNlZFRpbWUgPSBtQ291
bnRlcisrOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBTaGFkZXJFeGVjdXRhYmxl
MTEgKnNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShw
cm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlKCkpOwotCi0gICAgICAgIEQzRDExX0lO
UFVUX0VMRU1FTlRfREVTQyBkZXNjc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBpbEtleS5lbGVtZW50Q291bnQ7ICsraikKLSAg
ICAgICAgewotICAgICAgICAgICAgZGVzY3Nbal0gPSBpbEtleS5lbGVtZW50c1tqXS5kZXNjOwot
ICAgICAgICB9Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVJbnB1
dExheW91dChkZXNjcywgaWxLZXkuZWxlbWVudENvdW50LCBzaGFkZXItPmdldEZ1bmN0aW9uKCks
IHNoYWRlci0+Z2V0TGVuZ3RoKCksICZpbnB1dExheW91dCk7Ci0gICAgICAgIGlmIChGQUlMRUQo
cmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gY3JhdGUgaW5w
dXQgbGF5b3V0LCByZXN1bHQ6IDB4JTA4eCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4g
R0xfSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobUlucHV0TGF5
b3V0TWFwLnNpemUoKSA+PSBrTWF4SW5wdXRMYXlvdXRzKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBUUkFDRSgiT3ZlcmZsb3dlZCB0aGUgbGltaXQgb2YgJXUgaW5wdXQgbGF5b3V0cywgcmVtb3Zp
bmcgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWQgIgotICAgICAgICAgICAgICAgICAgInRvIG1ha2Ug
cm9vbS4iLCBrTWF4SW5wdXRMYXlvdXRzKTsKLQotICAgICAgICAgICAgSW5wdXRMYXlvdXRNYXA6
Oml0ZXJhdG9yIGxlYXN0UmVjZW50bHlVc2VkID0gbUlucHV0TGF5b3V0TWFwLmJlZ2luKCk7Ci0g
ICAgICAgICAgICBmb3IgKElucHV0TGF5b3V0TWFwOjppdGVyYXRvciBpID0gbUlucHV0TGF5b3V0
TWFwLmJlZ2luKCk7IGkgIT0gbUlucHV0TGF5b3V0TWFwLmVuZCgpOyBpKyspCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgaWYgKGktPnNlY29uZC5sYXN0VXNlZFRpbWUgPCBsZWFzdFJl
Y2VudGx5VXNlZC0+c2Vjb25kLmxhc3RVc2VkVGltZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkID0gaTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmlu
cHV0TGF5b3V0LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBtSW5wdXRMYXlvdXRNYXAuZXJhc2Uo
bGVhc3RSZWNlbnRseVVzZWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgSW5wdXRMYXlvdXRDb3Vu
dGVyUGFpciBpbnB1dENvdW50ZXJQYWlyOwotICAgICAgICBpbnB1dENvdW50ZXJQYWlyLmlucHV0
TGF5b3V0ID0gaW5wdXRMYXlvdXQ7Ci0gICAgICAgIGlucHV0Q291bnRlclBhaXIubGFzdFVzZWRU
aW1lID0gbUNvdW50ZXIrKzsKLQotICAgICAgICBtSW5wdXRMYXlvdXRNYXAuaW5zZXJ0KHN0ZDo6
bWFrZV9wYWlyKGlsS2V5LCBpbnB1dENvdW50ZXJQYWlyKSk7Ci0gICAgfQotCi0gICAgaWYgKGlu
cHV0TGF5b3V0ICE9IG1DdXJyZW50SUwpCi0gICAgewotICAgICAgICBtRGV2aWNlQ29udGV4dC0+
SUFTZXRJbnB1dExheW91dChpbnB1dExheW91dCk7Ci0gICAgICAgIG1DdXJyZW50SUwgPSBpbnB1
dExheW91dDsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpN
QVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmICh2ZXJ0ZXhCdWZmZXJT
ZXJpYWxzW2ldICE9IG1DdXJyZW50QnVmZmVyc1tpXSB8fCB2ZXJ0ZXhTdHJpZGVzW2ldICE9IG1D
dXJyZW50VmVydGV4U3RyaWRlc1tpXSB8fAotICAgICAgICAgICAgdmVydGV4T2Zmc2V0c1tpXSAh
PSBtQ3VycmVudFZlcnRleE9mZnNldHNbaV0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZp
Y2VDb250ZXh0LT5JQVNldFZlcnRleEJ1ZmZlcnMoaSwgMSwgJnZlcnRleEJ1ZmZlcnNbaV0sICZ2
ZXJ0ZXhTdHJpZGVzW2ldLCAmdmVydGV4T2Zmc2V0c1tpXSk7Ci0gICAgICAgICAgICBtQ3VycmVu
dEJ1ZmZlcnNbaV0gPSB2ZXJ0ZXhCdWZmZXJTZXJpYWxzW2ldOwotICAgICAgICAgICAgbUN1cnJl
bnRWZXJ0ZXhTdHJpZGVzW2ldID0gdmVydGV4U3RyaWRlc1tpXTsKLSAgICAgICAgICAgIG1DdXJy
ZW50VmVydGV4T2Zmc2V0c1tpXSA9IHZlcnRleE9mZnNldHNbaV07Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gR0xfTk9fRVJST1I7Ci19Ci0KLXN0ZDo6c2l6ZV90IElucHV0TGF5b3V0
Q2FjaGU6Omhhc2hJbnB1dExheW91dChjb25zdCBJbnB1dExheW91dEtleSAmaW5wdXRMYXlvdXQp
Ci17Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZWVkID0gMHhERUFEQkVFRjsKLQot
ICAgIHN0ZDo6c2l6ZV90IGhhc2ggPSAwOwotICAgIE11cm11ckhhc2gzX3g4Nl8zMihpbnB1dExh
eW91dC5iZWdpbigpLCBpbnB1dExheW91dC5lbmQoKSAtIGlucHV0TGF5b3V0LmJlZ2luKCksIHNl
ZWQsICZoYXNoKTsKLSAgICByZXR1cm4gaGFzaDsKLX0KLQotYm9vbCBJbnB1dExheW91dENhY2hl
Ojpjb21wYXJlSW5wdXRMYXlvdXRzKGNvbnN0IElucHV0TGF5b3V0S2V5ICZhLCBjb25zdCBJbnB1
dExheW91dEtleSAmYikKLXsKLSAgICBpZiAoYS5lbGVtZW50Q291bnQgIT0gYi5lbGVtZW50Q291
bnQpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0
ZDo6ZXF1YWwoYS5iZWdpbigpLCBhLmVuZCgpLCBiLmJlZ2luKCkpOwotfQotCi19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0lucHV0
TGF5b3V0Q2FjaGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvSW5wdXRMYXlvdXRDYWNoZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBi
YjFhOGVlYmNmN2E2Y2E5OTBjYWI5MzgyNTU4ZjMzOTc4MTQ3YTAwLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvSW5wdXRMYXlvdXRDYWNoZS5oCisrKyAvZGV2L251bGwKQEAg
LTEsOTUgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIElucHV0TGF5b3V0Q2FjaGUuaDogRGVm
aW5lcyBJbnB1dExheW91dENhY2hlLCBhIGNsYXNzIHRoYXQgYnVpbGRzIGFuZCBjYWNoZXMKLS8v
IEQzRDExIGlucHV0IGxheW91dHMuCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0lOUFVU
TEFZT1VUQ0FDSEVfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX0lOUFVUTEFZT1VUQ0FD
SEVfSF8KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db25zdGFudHMuaCIKLSNpbmNsdWRlICJjb21t
b24vYW5nbGV1dGlscy5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLWNsYXNzIFByb2dyYW1CaW5hcnk7
Ci19Ci0KLW5hbWVzcGFjZSByeAotewotc3RydWN0IFRyYW5zbGF0ZWRBdHRyaWJ1dGU7Ci0KLWNs
YXNzIElucHV0TGF5b3V0Q2FjaGUKLXsKLSAgcHVibGljOgotICAgIElucHV0TGF5b3V0Q2FjaGUo
KTsKLSAgICB2aXJ0dWFsIH5JbnB1dExheW91dENhY2hlKCk7Ci0KLSAgICB2b2lkIGluaXRpYWxp
emUoSUQzRDExRGV2aWNlICpkZXZpY2UsIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQpOwot
ICAgIHZvaWQgY2xlYXIoKTsKLSAgICB2b2lkIG1hcmtEaXJ0eSgpOwotCi0gICAgR0xlbnVtIGFw
cGx5VmVydGV4QnVmZmVycyhUcmFuc2xhdGVkQXR0cmlidXRlIGF0dHJpYnV0ZXNbZ2w6Ok1BWF9W
RVJURVhfQVRUUklCU10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6UHJvZ3Jh
bUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oSW5wdXRMYXlvdXRDYWNoZSk7Ci0KLSAgICBzdHJ1Y3QgSW5wdXRMYXlvdXRF
bGVtZW50Ci0gICAgewotICAgICAgICBEM0QxMV9JTlBVVF9FTEVNRU5UX0RFU0MgZGVzYzsKLSAg
ICAgICAgR0xlbnVtIGdsc2xFbGVtZW50VHlwZTsKLSAgICB9OwotCi0gICAgc3RydWN0IElucHV0
TGF5b3V0S2V5Ci0gICAgewotICAgICAgICB1bnNpZ25lZCBpbnQgZWxlbWVudENvdW50OwotICAg
ICAgICBJbnB1dExheW91dEVsZW1lbnQgZWxlbWVudHNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107
Ci0KLSAgICAgICAgY29uc3QgY2hhciAqYmVnaW4oKSBjb25zdAotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oJmVsZW1lbnRDb3VudCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBjaGFyICplbmQoKSBjb25zdAotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oJmVsZW1l
bnRzW2VsZW1lbnRDb3VudF0pOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHN0cnVjdCBJbnB1
dExheW91dENvdW50ZXJQYWlyCi0gICAgewotICAgICAgICBJRDNEMTFJbnB1dExheW91dCAqaW5w
dXRMYXlvdXQ7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBsYXN0VXNlZFRpbWU7Ci0gICAg
fTsKLQotICAgIElEM0QxMUlucHV0TGF5b3V0ICptQ3VycmVudElMOwotICAgIHVuc2lnbmVkIGlu
dCBtQ3VycmVudEJ1ZmZlcnNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107Ci0gICAgVUlOVCBtQ3Vy
cmVudFZlcnRleFN0cmlkZXNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107Ci0gICAgVUlOVCBtQ3Vy
cmVudFZlcnRleE9mZnNldHNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107Ci0KLSAgICBzdGF0aWMg
c3RkOjpzaXplX3QgaGFzaElucHV0TGF5b3V0KGNvbnN0IElucHV0TGF5b3V0S2V5ICZpbnB1dExh
eW91dCk7Ci0gICAgc3RhdGljIGJvb2wgY29tcGFyZUlucHV0TGF5b3V0cyhjb25zdCBJbnB1dExh
eW91dEtleSAmYSwgY29uc3QgSW5wdXRMYXlvdXRLZXkgJmIpOwotCi0gICAgdHlwZWRlZiBzdGQ6
OnNpemVfdCAoKklucHV0TGF5b3V0SGFzaEZ1bmN0aW9uKShjb25zdCBJbnB1dExheW91dEtleSAm
KTsKLSAgICB0eXBlZGVmIGJvb2wgKCpJbnB1dExheW91dEVxdWFsaXR5RnVuY3Rpb24pKGNvbnN0
IElucHV0TGF5b3V0S2V5ICYsIGNvbnN0IElucHV0TGF5b3V0S2V5ICYpOwotICAgIHR5cGVkZWYg
c3RkOjp1bm9yZGVyZWRfbWFwPElucHV0TGF5b3V0S2V5LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIElucHV0TGF5b3V0Q291bnRlclBhaXIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSW5wdXRMYXlvdXRIYXNoRnVuY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSW5wdXRMYXlvdXRFcXVhbGl0eUZ1bmN0aW9uPiBJbnB1dExheW91dE1hcDsKLSAg
ICBJbnB1dExheW91dE1hcCBtSW5wdXRMYXlvdXRNYXA7Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgaW50IGtNYXhJbnB1dExheW91dHM7Ci0KLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgbUNv
dW50ZXI7Ci0KLSAgICBJRDNEMTFEZXZpY2UgKm1EZXZpY2U7Ci0gICAgSUQzRDExRGV2aWNlQ29u
dGV4dCAqbURldmljZUNvbnRleHQ7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVO
REVSRVJfSU5QVVRMQVlPVVRDQUNIRV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9RdWVyeTExLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUXVlcnkxMS5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDEzMjEwZmM5MjkxMzAzMDc2MjhhNGM5ZDFhZWVmZDQwMWQ5MjIw
NDguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9RdWVyeTExLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0jaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCi0vLwotCi0vLyBRdWVyeTExLmNwcDogRGVmaW5lcyB0aGUgcng6OlF1ZXJ5MTEgY2xh
c3Mgd2hpY2ggaW1wbGVtZW50cyByeDo6UXVlcnlJbXBsLgotCi0jaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL1F1ZXJ5MTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVy
ZXIxMS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0KLW5hbWVzcGFjZSByeAotewot
Ci1RdWVyeTExOjpRdWVyeTExKHJ4OjpSZW5kZXJlcjExICpyZW5kZXJlciwgR0xlbnVtIHR5cGUp
IDogUXVlcnlJbXBsKHR5cGUpCi17Ci0gICAgbVJlbmRlcmVyID0gcmVuZGVyZXI7Ci0gICAgbVF1
ZXJ5ID0gTlVMTDsKLX0KLQotUXVlcnkxMTo6flF1ZXJ5MTEoKQotewotICAgIGlmIChtUXVlcnkp
Ci0gICAgewotICAgICAgICBtUXVlcnktPlJlbGVhc2UoKTsKLSAgICAgICAgbVF1ZXJ5ID0gTlVM
TDsKLSAgICB9Ci19Ci0KLXZvaWQgUXVlcnkxMTo6YmVnaW4oKQotewotICAgIGlmIChtUXVlcnkg
PT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIEQzRDExX1FVRVJZX0RFU0MgcXVlcnlEZXNjOwotICAg
ICAgICBxdWVyeURlc2MuUXVlcnkgPSBEM0QxMV9RVUVSWV9PQ0NMVVNJT047Ci0gICAgICAgIHF1
ZXJ5RGVzYy5NaXNjRmxhZ3MgPSAwOwotCi0gICAgICAgIGlmIChGQUlMRUQobVJlbmRlcmVyLT5n
ZXREZXZpY2UoKS0+Q3JlYXRlUXVlcnkoJnF1ZXJ5RGVzYywgJm1RdWVyeSkpKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCktPkJlZ2luKG1R
dWVyeSk7Ci19Ci0KLXZvaWQgUXVlcnkxMTo6ZW5kKCkKLXsKLSAgICBpZiAobVF1ZXJ5ID09IE5V
TEwpCi0gICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICB9Ci0KLSAgICBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKS0+RW5kKG1RdWVy
eSk7Ci0KLSAgICBtU3RhdHVzID0gR0xfRkFMU0U7Ci0gICAgbVJlc3VsdCA9IEdMX0ZBTFNFOwot
fQotCi1HTHVpbnQgUXVlcnkxMTo6Z2V0UmVzdWx0KCkKLXsKLSAgICBpZiAobVF1ZXJ5ICE9IE5V
TEwpCi0gICAgewotICAgICAgICB3aGlsZSAoIXRlc3RRdWVyeSgpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBTbGVlcCgwKTsKLSAgICAgICAgICAgIC8vIGV4cGxpY2l0bHkgY2hlY2sgZm9yIGRl
dmljZSBsb3NzLCBzb21lIGRyaXZlcnMgc2VlbSB0byByZXR1cm4gU19GQUxTRQotICAgICAgICAg
ICAgLy8gaWYgdGhlIGRldmljZSBpcyBsb3N0Ci0gICAgICAgICAgICBpZiAobVJlbmRlcmVyLT50
ZXN0RGV2aWNlTG9zdCh0cnVlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIDApOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1SZXN1bHQ7Ci19Ci0KLUdMYm9vbGVhbiBRdWVyeTEx
Ojppc1Jlc3VsdEF2YWlsYWJsZSgpCi17Ci0gICAgaWYgKG1RdWVyeSAhPSBOVUxMKQotICAgIHsK
LSAgICAgICAgdGVzdFF1ZXJ5KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1TdGF0dXM7Ci19Ci0K
LUdMYm9vbGVhbiBRdWVyeTExOjp0ZXN0UXVlcnkoKQotewotICAgIGlmIChtUXVlcnkgIT0gTlVM
TCAmJiBtU3RhdHVzICE9IEdMX1RSVUUpCi0gICAgewotICAgICAgICBVSU5UNjQgbnVtUGl4ZWxz
ID0gMDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRl
eHQoKS0+R2V0RGF0YShtUXVlcnksICZudW1QaXhlbHMsIHNpemVvZihVSU5UNjQpLCAwKTsKLSAg
ICAgICAgaWYgKHJlc3VsdCA9PSBTX09LKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU3RhdHVz
ID0gR0xfVFJVRTsKLQotICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDoKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDoKLSAg
ICAgICAgICAgICAgICBtUmVzdWx0ID0gKG51bVBpeGVscyA+IDApID8gR0xfVFJVRSA6IEdMX0ZB
TFNFOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZSBpZiAobVJlbmRlcmVyLT50ZXN0RGV2aWNlTG9zdCh0cnVlKSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9UUlVF
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBtU3RhdHVzOwotICAgIH0KLQotICAgIHJl
dHVybiBHTF9UUlVFOyAvLyBwcmV2ZW50IGJsb2NraW5nIHdoZW4gcXVlcnkgaXMgbnVsbAotfQot
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL1F1ZXJ5MTEuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvUXVlcnkxMS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTAzZGU3
N2NhMzI4NTVkYmNkMTliMTNiYzQ0ZDk3ODM3OTRhNjc1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvUXVlcnkxMS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KLS8vCi0KLS8vIFF1ZXJ5MTEuaDogRGVmaW5lcyB0aGUgcng6OlF1ZXJ5MTEgY2xh
c3Mgd2hpY2ggaW1wbGVtZW50cyByeDo6UXVlcnlJbXBsLgotCi0jaWZuZGVmIExJQkdMRVNWMl9S
RU5ERVJFUl9RVUVSWTExX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9RVUVSWTExX0hf
Ci0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUXVlcnlJbXBsLmgiCi0KLW5hbWVzcGFj
ZSByeAotewotY2xhc3MgUmVuZGVyZXIxMTsKLQotY2xhc3MgUXVlcnkxMSA6IHB1YmxpYyBRdWVy
eUltcGwKLXsKLSAgcHVibGljOgotICAgIFF1ZXJ5MTEocng6OlJlbmRlcmVyMTEgKnJlbmRlcmVy
LCBHTGVudW0gdHlwZSk7Ci0gICAgdmlydHVhbCB+UXVlcnkxMSgpOwotCi0gICAgdm9pZCBiZWdp
bigpOwotICAgIHZvaWQgZW5kKCk7Ci0gICAgR0x1aW50IGdldFJlc3VsdCgpOwotICAgIEdMYm9v
bGVhbiBpc1Jlc3VsdEF2YWlsYWJsZSgpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKFF1ZXJ5MTEpOwotCi0gICAgR0xib29sZWFuIHRlc3RRdWVyeSgpOwotCi0g
ICAgcng6OlJlbmRlcmVyMTEgKm1SZW5kZXJlcjsKLSAgICBJRDNEMTFRdWVyeSAqbVF1ZXJ5Owot
fTsKLQotfQotCi0jZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1FVRVJZMTFfSF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUXVl
cnk5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
UXVlcnk5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY2OTQyNjdkZDFlMTU5
YzA5NTM4YmJiY2JlYTdmYWIwMDA5ZDVjMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL1F1ZXJ5OS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotI2luY2x1
ZGUgInByZWNvbXBpbGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0v
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gUXVlcnk5LmNwcDogRGVmaW5l
cyB0aGUgcng6OlF1ZXJ5OSBjbGFzcyB3aGljaCBpbXBsZW1lbnRzIHJ4OjpRdWVyeUltcGwuCi0K
LQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9RdWVyeTkuaCIKLSNpbmNsdWRlICJsaWJH
TEVTdjIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9yZW5kZXJlcjlfdXRp
bHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXI5LmgiCi0KLW5hbWVz
cGFjZSByeAotewotCi1RdWVyeTk6OlF1ZXJ5OShyeDo6UmVuZGVyZXI5ICpyZW5kZXJlciwgR0xl
bnVtIHR5cGUpIDogUXVlcnlJbXBsKHR5cGUpCi17Ci0gICAgbVJlbmRlcmVyID0gcmVuZGVyZXI7
Ci0gICAgbVF1ZXJ5ID0gTlVMTDsKLX0KLQotUXVlcnk5Ojp+UXVlcnk5KCkKLXsKLSAgICBpZiAo
bVF1ZXJ5KQotICAgIHsKLSAgICAgICAgbVF1ZXJ5LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1RdWVy
eSA9IE5VTEw7Ci0gICAgfQotfQotCi12b2lkIFF1ZXJ5OTo6YmVnaW4oKQotewotICAgIGlmICht
UXVlcnkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIGlmIChGQUlMRUQobVJlbmRlcmVyLT5nZXRE
ZXZpY2UoKS0+Q3JlYXRlUXVlcnkoRDNEUVVFUllUWVBFX09DQ0xVU0lPTiwgJm1RdWVyeSkpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgSFJFU1VMVCByZXN1bHQgPSBtUXVlcnktPklzc3Vl
KEQzRElTU1VFX0JFR0lOKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotfQotCi12
b2lkIFF1ZXJ5OTo6ZW5kKCkKLXsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAg
ICBIUkVTVUxUIHJlc3VsdCA9IG1RdWVyeS0+SXNzdWUoRDNESVNTVUVfRU5EKTsKLSAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgbVN0YXR1cyA9IEdMX0ZBTFNFOwotICAgIG1S
ZXN1bHQgPSBHTF9GQUxTRTsKLX0KLQotR0x1aW50IFF1ZXJ5OTo6Z2V0UmVzdWx0KCkKLXsKLSAg
ICBpZiAobVF1ZXJ5ICE9IE5VTEwpCi0gICAgewotICAgICAgICB3aGlsZSAoIXRlc3RRdWVyeSgp
KQotICAgICAgICB7Ci0gICAgICAgICAgICBTbGVlcCgwKTsKLSAgICAgICAgICAgIC8vIGV4cGxp
Y2l0bHkgY2hlY2sgZm9yIGRldmljZSBsb3NzCi0gICAgICAgICAgICAvLyBzb21lIGRyaXZlcnMg
c2VlbSB0byByZXR1cm4gU19GQUxTRSBldmVuIGlmIHRoZSBkZXZpY2UgaXMgbG9zdAotICAgICAg
ICAgICAgLy8gaW5zdGVhZCBvZiBEM0RFUlJfREVWSUNFTE9TVCBsaWtlIHRoZXkgc2hvdWxkCi0g
ICAgICAgICAgICBpZiAobVJlbmRlcmVyLT50ZXN0RGV2aWNlTG9zdCh0cnVlKSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlks
IDApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1SZXN1
bHQ7Ci19Ci0KLUdMYm9vbGVhbiBRdWVyeTk6OmlzUmVzdWx0QXZhaWxhYmxlKCkKLXsKLSAgICBp
ZiAobVF1ZXJ5ICE9IE5VTEwpCi0gICAgewotICAgICAgICB0ZXN0UXVlcnkoKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gbVN0YXR1czsKLX0KLQotR0xib29sZWFuIFF1ZXJ5OTo6dGVzdFF1ZXJ5KCkK
LXsKLSAgICBpZiAobVF1ZXJ5ICE9IE5VTEwgJiYgbVN0YXR1cyAhPSBHTF9UUlVFKQotICAgIHsK
LSAgICAgICAgRFdPUkQgbnVtUGl4ZWxzID0gMDsKLQotICAgICAgICBIUkVTVUxUIGhyZXMgPSBt
UXVlcnktPkdldERhdGEoJm51bVBpeGVscywgc2l6ZW9mKERXT1JEKSwgRDNER0VUREFUQV9GTFVT
SCk7Ci0gICAgICAgIGlmIChocmVzID09IFNfT0spCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1T
dGF0dXMgPSAgR0xfVFJVRTsKLQotICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDoK
LSAgICAgICAgICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VY
VDoKLSAgICAgICAgICAgICAgICBtUmVzdWx0ID0gKG51bVBpeGVscyA+IDApID8gR0xfVFJVRSA6
IEdMX0ZBTFNFOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZSBpZiAoZDNkOTo6aXNEZXZpY2VMb3N0RXJyb3IoaHJlcykpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1SZW5kZXJlci0+bm90aWZ5RGV2aWNlTG9zdCgpOwotICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9UUlVFKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiBtU3RhdHVzOwotICAgIH0KLQotICAgIHJldHVybiBHTF9U
UlVFOyAvLyBwcmV2ZW50IGJsb2NraW5nIHdoZW4gcXVlcnkgaXMgbnVsbAotfQotCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1F1
ZXJ5OS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9R
dWVyeTkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdlZWY4OTMzNmVmOGMzNDRh
YTUxNjdiNGY0MDIxYjEwNDFjMDcwYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL1F1ZXJ5OS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLy8KLS8vIENvcHly
aWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLS8vIFF1ZXJ5OS5oOiBEZWZpbmVzIHRoZSByeDo6UXVlcnk5IGNsYXNzIHdoaWNoIGltcGxl
bWVudHMgcng6OlF1ZXJ5SW1wbC4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfUVVFUlk5
X0hfCi0jZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9RVUVSWTlfSF8KLQotI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9RdWVyeUltcGwuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci1jbGFzcyBS
ZW5kZXJlcjk7Ci0KLWNsYXNzIFF1ZXJ5OSA6IHB1YmxpYyBRdWVyeUltcGwKLXsKLSAgcHVibGlj
OgotICAgIFF1ZXJ5OShyeDo6UmVuZGVyZXI5ICpyZW5kZXJlciwgR0xlbnVtIHR5cGUpOwotICAg
IHZpcnR1YWwgflF1ZXJ5OSgpOwotCi0gICAgdm9pZCBiZWdpbigpOwotICAgIHZvaWQgZW5kKCk7
Ci0gICAgR0x1aW50IGdldFJlc3VsdCgpOwotICAgIEdMYm9vbGVhbiBpc1Jlc3VsdEF2YWlsYWJs
ZSgpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFF1ZXJ5OSk7
Ci0KLSAgICBHTGJvb2xlYW4gdGVzdFF1ZXJ5KCk7Ci0KLSAgICByeDo6UmVuZGVyZXI5ICptUmVu
ZGVyZXI7Ci0gICAgSURpcmVjdDNEUXVlcnk5ICptUXVlcnk7Ci19OwotCi19Ci0KLSNlbmRpZiAv
LyBMSUJHTEVTVjJfUkVOREVSRVJfUVVFUlk5X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclN0YXRlQ2FjaGUuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJTdGF0
ZUNhY2hlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjMxMTFhZjcyYmUwY2Iy
ZDcyZmZhMGVjYjdhZjQ1NjM3YTVkNjk0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL1JlbmRlclN0YXRlQ2FjaGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDA2ICswLDAg
QEAKLSNpbmNsdWRlICJwcmVjb21waWxlZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0y
MDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gUmVu
ZGVyU3RhdGVDYWNoZS5jcHA6IERlZmluZXMgcng6OlJlbmRlclN0YXRlQ2FjaGUsIGEgY2FjaGUg
b2YgRGlyZWN0M0QgcmVuZGVyCi0vLyBzdGF0ZSBvYmplY3RzLgotCi0jaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL1JlbmRlclN0YXRlQ2FjaGUuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvcmVuZGVyZXIxMV91dGlscy5oIgotCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0j
aW5jbHVkZSAidGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJtdXJIYXNoMy5oIgotCi1uYW1lc3Bh
Y2UgcngKLXsKLQotLy8gTVNETidzIGRvY3VtZW50YXRpb24gb2YgSUQzRDExRGV2aWNlOjpDcmVh
dGVCbGVuZFN0YXRlLCBJRDNEMTFEZXZpY2U6OkNyZWF0ZVJhc3Rlcml6ZXJTdGF0ZSwKLS8vIElE
M0QxMURldmljZTo6Q3JlYXRlRGVwdGhTdGVuY2lsU3RhdGUgYW5kIElEM0QxMURldmljZTo6Q3Jl
YXRlU2FtcGxlclN0YXRlIGNsYWltcyB0aGUgbWF4aW11bQotLy8gbnVtYmVyIG9mIHVuaXF1ZSBz
dGF0ZXMgb2YgZWFjaCB0eXBlIGFuIGFwcGxpY2F0aW9uIGNhbiBjcmVhdGUgaXMgNDA5NgotY29u
c3QgdW5zaWduZWQgaW50IFJlbmRlclN0YXRlQ2FjaGU6OmtNYXhCbGVuZFN0YXRlcyA9IDQwOTY7
Ci1jb25zdCB1bnNpZ25lZCBpbnQgUmVuZGVyU3RhdGVDYWNoZTo6a01heFJhc3Rlcml6ZXJTdGF0
ZXMgPSA0MDk2OwotY29uc3QgdW5zaWduZWQgaW50IFJlbmRlclN0YXRlQ2FjaGU6OmtNYXhEZXB0
aFN0ZW5jaWxTdGF0ZXMgPSA0MDk2OwotY29uc3QgdW5zaWduZWQgaW50IFJlbmRlclN0YXRlQ2Fj
aGU6OmtNYXhTYW1wbGVyU3RhdGVzID0gNDA5NjsKLQotUmVuZGVyU3RhdGVDYWNoZTo6UmVuZGVy
U3RhdGVDYWNoZSgpIDogbURldmljZShOVUxMKSwgbUNvdW50ZXIoMCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtQmxlbmRTdGF0ZUNhY2hlKGtNYXhCbGVuZFN0YXRl
cywgaGFzaEJsZW5kU3RhdGUsIGNvbXBhcmVCbGVuZFN0YXRlcyksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtUmFzdGVyaXplclN0YXRlQ2FjaGUoa01heFJhc3Rlcml6
ZXJTdGF0ZXMsIGhhc2hSYXN0ZXJpemVyU3RhdGUsIGNvbXBhcmVSYXN0ZXJpemVyU3RhdGVzKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1EZXB0aFN0ZW5jaWxTdGF0
ZUNhY2hlKGtNYXhEZXB0aFN0ZW5jaWxTdGF0ZXMsIGhhc2hEZXB0aFN0ZW5jaWxTdGF0ZSwgY29t
cGFyZURlcHRoU3RlbmNpbFN0YXRlcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtU2FtcGxlclN0YXRlQ2FjaGUoa01heFNhbXBsZXJTdGF0ZXMsIGhhc2hTYW1wbGVy
U3RhdGUsIGNvbXBhcmVTYW1wbGVyU3RhdGVzKQotewotfQotCi1SZW5kZXJTdGF0ZUNhY2hlOjp+
UmVuZGVyU3RhdGVDYWNoZSgpCi17Ci0gICAgY2xlYXIoKTsKLX0KLQotdm9pZCBSZW5kZXJTdGF0
ZUNhY2hlOjppbml0aWFsaXplKElEM0QxMURldmljZSAqZGV2aWNlKQotewotICAgIGNsZWFyKCk7
Ci0gICAgbURldmljZSA9IGRldmljZTsKLX0KLQotdm9pZCBSZW5kZXJTdGF0ZUNhY2hlOjpjbGVh
cigpCi17Ci0gICAgZm9yIChCbGVuZFN0YXRlTWFwOjppdGVyYXRvciBpID0gbUJsZW5kU3RhdGVD
YWNoZS5iZWdpbigpOyBpICE9IG1CbGVuZFN0YXRlQ2FjaGUuZW5kKCk7IGkrKykKLSAgICB7Ci0g
ICAgICAgIGktPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOwotICAgIH0KLSAgICBtQmxlbmRTdGF0
ZUNhY2hlLmNsZWFyKCk7Ci0KLSAgICBmb3IgKFJhc3Rlcml6ZXJTdGF0ZU1hcDo6aXRlcmF0b3Ig
aSA9IG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5iZWdpbigpOyBpICE9IG1SYXN0ZXJpemVyU3RhdGVD
YWNoZS5lbmQoKTsgaSsrKQotICAgIHsKLSAgICAgICAgaS0+c2Vjb25kLmZpcnN0LT5SZWxlYXNl
KCk7Ci0gICAgfQotICAgIG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5jbGVhcigpOwotCi0gICAgZm9y
IChEZXB0aFN0ZW5jaWxTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1EZXB0aFN0ZW5jaWxTdGF0ZUNh
Y2hlLmJlZ2luKCk7IGkgIT0gbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuZW5kKCk7IGkrKykKLSAg
ICB7Ci0gICAgICAgIGktPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOwotICAgIH0KLSAgICBtRGVw
dGhTdGVuY2lsU3RhdGVDYWNoZS5jbGVhcigpOwotCi0gICAgZm9yIChTYW1wbGVyU3RhdGVNYXA6
Oml0ZXJhdG9yIGkgPSBtU2FtcGxlclN0YXRlQ2FjaGUuYmVnaW4oKTsgaSAhPSBtU2FtcGxlclN0
YXRlQ2FjaGUuZW5kKCk7IGkrKykKLSAgICB7Ci0gICAgICAgIGktPnNlY29uZC5maXJzdC0+UmVs
ZWFzZSgpOwotICAgIH0KLSAgICBtU2FtcGxlclN0YXRlQ2FjaGUuY2xlYXIoKTsKLX0KLQotc3Rk
OjpzaXplX3QgUmVuZGVyU3RhdGVDYWNoZTo6aGFzaEJsZW5kU3RhdGUoY29uc3QgZ2w6OkJsZW5k
U3RhdGUgJmJsZW5kU3RhdGUpCi17Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZWVk
ID0gMHhBQkNERUY5ODsKLQotICAgIHN0ZDo6c2l6ZV90IGhhc2ggPSAwOwotICAgIE11cm11ckhh
c2gzX3g4Nl8zMigmYmxlbmRTdGF0ZSwgc2l6ZW9mKGdsOjpCbGVuZFN0YXRlKSwgc2VlZCwgJmhh
c2gpOwotICAgIHJldHVybiBoYXNoOwotfQotCi1ib29sIFJlbmRlclN0YXRlQ2FjaGU6OmNvbXBh
cmVCbGVuZFN0YXRlcyhjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYSwgY29uc3QgZ2w6OkJsZW5kU3Rh
dGUgJmIpCi17Ci0gICAgcmV0dXJuIG1lbWNtcCgmYSwgJmIsIHNpemVvZihnbDo6QmxlbmRTdGF0
ZSkpID09IDA7Ci19Ci0KLUlEM0QxMUJsZW5kU3RhdGUgKlJlbmRlclN0YXRlQ2FjaGU6OmdldEJs
ZW5kU3RhdGUoY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUpCi17Ci0gICAgaWYgKCFt
RGV2aWNlKQotICAgIHsKLSAgICAgICAgRVJSKCJSZW5kZXJTdGF0ZUNhY2hlIGlzIG5vdCBpbml0
aWFsaXplZC4iKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgQmxlbmRTdGF0
ZU1hcDo6aXRlcmF0b3IgaSA9IG1CbGVuZFN0YXRlQ2FjaGUuZmluZChibGVuZFN0YXRlKTsKLSAg
ICBpZiAoaSAhPSBtQmxlbmRTdGF0ZUNhY2hlLmVuZCgpKQotICAgIHsKLSAgICAgICAgQmxlbmRT
dGF0ZUNvdW50ZXJQYWlyICZzdGF0ZSA9IGktPnNlY29uZDsKLSAgICAgICAgc3RhdGUuc2Vjb25k
ID0gbUNvdW50ZXIrKzsKLSAgICAgICAgcmV0dXJuIHN0YXRlLmZpcnN0OwotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICBpZiAobUJsZW5kU3RhdGVDYWNoZS5zaXplKCkgPj0ga01heEJs
ZW5kU3RhdGVzKQotICAgICAgICB7Ci0gICAgICAgICAgICBUUkFDRSgiT3ZlcmZsb3dlZCB0aGUg
bGltaXQgb2YgJXUgYmxlbmQgc3RhdGVzLCByZW1vdmluZyB0aGUgbGVhc3QgcmVjZW50bHkgdXNl
ZCAiCi0gICAgICAgICAgICAgICAgICAidG8gbWFrZSByb29tLiIsIGtNYXhCbGVuZFN0YXRlcyk7
Ci0KLSAgICAgICAgICAgIEJsZW5kU3RhdGVNYXA6Oml0ZXJhdG9yIGxlYXN0UmVjZW50bHlVc2Vk
ID0gbUJsZW5kU3RhdGVDYWNoZS5iZWdpbigpOwotICAgICAgICAgICAgZm9yIChCbGVuZFN0YXRl
TWFwOjppdGVyYXRvciBpID0gbUJsZW5kU3RhdGVDYWNoZS5iZWdpbigpOyBpICE9IG1CbGVuZFN0
YXRlQ2FjaGUuZW5kKCk7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAo
aS0+c2Vjb25kLnNlY29uZCA8IGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuc2Vjb25kKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQgPSBp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxlYXN0UmVj
ZW50bHlVc2VkLT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1CbGVuZFN0
YXRlQ2FjaGUuZXJhc2UobGVhc3RSZWNlbnRseVVzZWQpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gQ3JlYXRlIGEgbmV3IGJsZW5kIHN0YXRlIGFuZCBpbnNlcnQgaXQgaW50byB0aGUgY2FjaGUK
LSAgICAgICAgRDNEMTFfQkxFTkRfREVTQyBibGVuZERlc2MgPSB7IDAgfTsKLSAgICAgICAgYmxl
bmREZXNjLkFscGhhVG9Db3ZlcmFnZUVuYWJsZSA9IGJsZW5kU3RhdGUuc2FtcGxlQWxwaGFUb0Nv
dmVyYWdlOwotICAgICAgICBibGVuZERlc2MuSW5kZXBlbmRlbnRCbGVuZEVuYWJsZSA9IEZBTFNF
OwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgRDNEMTFfU0lNVUxUQU5F
T1VTX1JFTkRFUl9UQVJHRVRfQ09VTlQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgRDNE
MTFfUkVOREVSX1RBUkdFVF9CTEVORF9ERVNDICZydEJsZW5kID0gYmxlbmREZXNjLlJlbmRlclRh
cmdldFtpXTsKLQotICAgICAgICAgICAgcnRCbGVuZC5CbGVuZEVuYWJsZSA9IGJsZW5kU3RhdGUu
YmxlbmQ7Ci0gICAgICAgICAgICBpZiAoYmxlbmRTdGF0ZS5ibGVuZCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBydEJsZW5kLlNyY0JsZW5kID0gZ2xfZDNkMTE6OkNvbnZlcnRCbGVu
ZEZ1bmMoYmxlbmRTdGF0ZS5zb3VyY2VCbGVuZFJHQiwgZmFsc2UpOwotICAgICAgICAgICAgICAg
IHJ0QmxlbmQuRGVzdEJsZW5kID0gZ2xfZDNkMTE6OkNvbnZlcnRCbGVuZEZ1bmMoYmxlbmRTdGF0
ZS5kZXN0QmxlbmRSR0IsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICBydEJsZW5kLkJsZW5kT3Ag
PSBnbF9kM2QxMTo6Q29udmVydEJsZW5kT3AoYmxlbmRTdGF0ZS5ibGVuZEVxdWF0aW9uUkdCKTsK
LQotICAgICAgICAgICAgICAgIHJ0QmxlbmQuU3JjQmxlbmRBbHBoYSA9IGdsX2QzZDExOjpDb252
ZXJ0QmxlbmRGdW5jKGJsZW5kU3RhdGUuc291cmNlQmxlbmRBbHBoYSwgdHJ1ZSk7Ci0gICAgICAg
ICAgICAgICAgcnRCbGVuZC5EZXN0QmxlbmRBbHBoYSA9IGdsX2QzZDExOjpDb252ZXJ0QmxlbmRG
dW5jKGJsZW5kU3RhdGUuZGVzdEJsZW5kQWxwaGEsIHRydWUpOwotICAgICAgICAgICAgICAgIHJ0
QmxlbmQuQmxlbmRPcEFscGhhID0gZ2xfZDNkMTE6OkNvbnZlcnRCbGVuZE9wKGJsZW5kU3RhdGUu
YmxlbmRFcXVhdGlvbkFscGhhKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcnRCbGVu
ZC5SZW5kZXJUYXJnZXRXcml0ZU1hc2sgPSBnbF9kM2QxMTo6Q29udmVydENvbG9yTWFzayhibGVu
ZFN0YXRlLmNvbG9yTWFza1JlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRTdGF0ZS5jb2xvck1hc2tH
cmVlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYmxlbmRTdGF0ZS5jb2xvck1hc2tCbHVlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBibGVuZFN0YXRlLmNvbG9yTWFza0FscGhhKTsKLSAgICAgICAgfQotCi0gICAgICAgIElE
M0QxMUJsZW5kU3RhdGUgKmR4MTFCbGVuZFN0YXRlID0gTlVMTDsKLSAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVCbGVuZFN0YXRlKCZibGVuZERlc2MsICZkeDExQmxlbmRT
dGF0ZSk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSB8fCAhZHgxMUJsZW5kU3RhdGUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiVW5hYmxlIHRvIGNyZWF0ZSBhIElEM0QxMUJsZW5k
U3RhdGUsIEhSRVNVTFQ6IDB4JVguIiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxM
OwotICAgICAgICB9Ci0KLSAgICAgICAgbUJsZW5kU3RhdGVDYWNoZS5pbnNlcnQoc3RkOjptYWtl
X3BhaXIoYmxlbmRTdGF0ZSwgc3RkOjptYWtlX3BhaXIoZHgxMUJsZW5kU3RhdGUsIG1Db3VudGVy
KyspKSk7Ci0KLSAgICAgICAgcmV0dXJuIGR4MTFCbGVuZFN0YXRlOwotICAgIH0KLX0KLQotc3Rk
OjpzaXplX3QgUmVuZGVyU3RhdGVDYWNoZTo6aGFzaFJhc3Rlcml6ZXJTdGF0ZShjb25zdCBSYXN0
ZXJpemVyU3RhdGVLZXkgJnJhc3RlclN0YXRlKQotewotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBpbnQgc2VlZCA9IDB4QUJDREVGOTg7Ci0KLSAgICBzdGQ6OnNpemVfdCBoYXNoID0gMDsKLSAg
ICBNdXJtdXJIYXNoM194ODZfMzIoJnJhc3RlclN0YXRlLCBzaXplb2YoUmFzdGVyaXplclN0YXRl
S2V5KSwgc2VlZCwgJmhhc2gpOwotICAgIHJldHVybiBoYXNoOwotfQotCi1ib29sIFJlbmRlclN0
YXRlQ2FjaGU6OmNvbXBhcmVSYXN0ZXJpemVyU3RhdGVzKGNvbnN0IFJhc3Rlcml6ZXJTdGF0ZUtl
eSAmYSwgY29uc3QgUmFzdGVyaXplclN0YXRlS2V5ICZiKQotewotICAgIHJldHVybiBtZW1jbXAo
JmEsICZiLCBzaXplb2YoUmFzdGVyaXplclN0YXRlS2V5KSkgPT0gMDsKLX0KLQotSUQzRDExUmFz
dGVyaXplclN0YXRlICpSZW5kZXJTdGF0ZUNhY2hlOjpnZXRSYXN0ZXJpemVyU3RhdGUoY29uc3Qg
Z2w6OlJhc3Rlcml6ZXJTdGF0ZSAmcmFzdGVyU3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNjaXNzb3JFbmFibGVk
LCB1bnNpZ25lZCBpbnQgZGVwdGhTaXplKQotewotICAgIGlmICghbURldmljZSkKLSAgICB7Ci0g
ICAgICAgIEVSUigiUmVuZGVyU3RhdGVDYWNoZSBpcyBub3QgaW5pdGlhbGl6ZWQuIik7Ci0gICAg
ICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIFJhc3Rlcml6ZXJTdGF0ZUtleSBrZXk7Ci0g
ICAga2V5LnJhc3Rlcml6ZXJTdGF0ZSA9IHJhc3RlclN0YXRlOwotICAgIGtleS5zY2lzc29yRW5h
YmxlZCA9IHNjaXNzb3JFbmFibGVkOwotICAgIGtleS5kZXB0aFNpemUgPSBkZXB0aFNpemU7Ci0K
LSAgICBSYXN0ZXJpemVyU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtUmFzdGVyaXplclN0YXRlQ2Fj
aGUuZmluZChrZXkpOwotICAgIGlmIChpICE9IG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5lbmQoKSkK
LSAgICB7Ci0gICAgICAgIFJhc3Rlcml6ZXJTdGF0ZUNvdW50ZXJQYWlyICZzdGF0ZSA9IGktPnNl
Y29uZDsKLSAgICAgICAgc3RhdGUuc2Vjb25kID0gbUNvdW50ZXIrKzsKLSAgICAgICAgcmV0dXJu
IHN0YXRlLmZpcnN0OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAobVJhc3Rl
cml6ZXJTdGF0ZUNhY2hlLnNpemUoKSA+PSBrTWF4UmFzdGVyaXplclN0YXRlcykKLSAgICAgICAg
ewotICAgICAgICAgICAgVFJBQ0UoIk92ZXJmbG93ZWQgdGhlIGxpbWl0IG9mICV1IHJhc3Rlcml6
ZXIgc3RhdGVzLCByZW1vdmluZyB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCAiCi0gICAgICAgICAg
ICAgICAgICAidG8gbWFrZSByb29tLiIsIGtNYXhSYXN0ZXJpemVyU3RhdGVzKTsKLQotICAgICAg
ICAgICAgUmFzdGVyaXplclN0YXRlTWFwOjppdGVyYXRvciBsZWFzdFJlY2VudGx5VXNlZCA9IG1S
YXN0ZXJpemVyU3RhdGVDYWNoZS5iZWdpbigpOwotICAgICAgICAgICAgZm9yIChSYXN0ZXJpemVy
U3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtUmFzdGVyaXplclN0YXRlQ2FjaGUuYmVnaW4oKTsgaSAh
PSBtUmFzdGVyaXplclN0YXRlQ2FjaGUuZW5kKCk7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBpZiAoaS0+c2Vjb25kLnNlY29uZCA8IGxlYXN0UmVjZW50bHlVc2VkLT5zZWNv
bmQuc2Vjb25kKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbGVhc3RS
ZWNlbnRseVVzZWQgPSBpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKLSAgICAg
ICAgICAgIG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5lcmFzZShsZWFzdFJlY2VudGx5VXNlZCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBEM0QxMV9DVUxMX01PREUgY3VsbE1vZGUgPSBnbF9kM2QxMTo6
Q29udmVydEN1bGxNb2RlKHJhc3RlclN0YXRlLmN1bGxGYWNlLCByYXN0ZXJTdGF0ZS5jdWxsTW9k
ZSk7Ci0KLSAgICAgICAgLy8gRGlzYWJsZSBjdWxsaW5nIGlmIGRyYXdpbmcgcG9pbnRzCi0gICAg
ICAgIGlmIChyYXN0ZXJTdGF0ZS5wb2ludERyYXdNb2RlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBjdWxsTW9kZSA9IEQzRDExX0NVTExfTk9ORTsKLSAgICAgICAgfQotCi0gICAgICAgIEQzRDEx
X1JBU1RFUklaRVJfREVTQyByYXN0ZXJEZXNjOwotICAgICAgICByYXN0ZXJEZXNjLkZpbGxNb2Rl
ID0gRDNEMTFfRklMTF9TT0xJRDsKLSAgICAgICAgcmFzdGVyRGVzYy5DdWxsTW9kZSA9IGN1bGxN
b2RlOwotICAgICAgICByYXN0ZXJEZXNjLkZyb250Q291bnRlckNsb2Nrd2lzZSA9IChyYXN0ZXJT
dGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXKSA/IEZBTFNFOiBUUlVFOwotICAgICAgICByYXN0ZXJE
ZXNjLkRlcHRoQmlhcyA9IGxkZXhwKHJhc3RlclN0YXRlLnBvbHlnb25PZmZzZXRVbml0cywgLXN0
YXRpY19jYXN0PGludD4oZGVwdGhTaXplKSk7Ci0gICAgICAgIHJhc3RlckRlc2MuRGVwdGhCaWFz
Q2xhbXAgPSAwLjBmOyAvLyBNU0ROIGRvY3VtZW50YXRpb24gb2YgRGVwdGhCaWFzQ2xhbXAgaW1w
bGllcyBhIHZhbHVlIG9mIHplcm8gd2lsbCBwcmVmb3JtIG5vIGNsYW1waW5nLCBtdXN0IGJlIHRl
c3RlZCB0aG91Z2guCi0gICAgICAgIHJhc3RlckRlc2MuU2xvcGVTY2FsZWREZXB0aEJpYXMgPSBy
YXN0ZXJTdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yOwotICAgICAgICByYXN0ZXJEZXNjLkRlcHRo
Q2xpcEVuYWJsZSA9IFRSVUU7Ci0gICAgICAgIHJhc3RlckRlc2MuU2Npc3NvckVuYWJsZSA9IHNj
aXNzb3JFbmFibGVkID8gVFJVRSA6IEZBTFNFOwotICAgICAgICByYXN0ZXJEZXNjLk11bHRpc2Ft
cGxlRW5hYmxlID0gcmFzdGVyU3RhdGUubXVsdGlTYW1wbGU7Ci0gICAgICAgIHJhc3RlckRlc2Mu
QW50aWFsaWFzZWRMaW5lRW5hYmxlID0gRkFMU0U7Ci0KLSAgICAgICAgSUQzRDExUmFzdGVyaXpl
clN0YXRlICpkeDExUmFzdGVyaXplclN0YXRlID0gTlVMTDsKLSAgICAgICAgSFJFU1VMVCByZXN1
bHQgPSBtRGV2aWNlLT5DcmVhdGVSYXN0ZXJpemVyU3RhdGUoJnJhc3RlckRlc2MsICZkeDExUmFz
dGVyaXplclN0YXRlKTsKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpIHx8ICFkeDExUmFzdGVy
aXplclN0YXRlKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIlVuYWJsZSB0byBjcmVhdGUg
YSBJRDNEMTFSYXN0ZXJpemVyU3RhdGUsIEhSRVNVTFQ6IDB4JVguIiwgcmVzdWx0KTsKLSAgICAg
ICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgbVJhc3Rlcml6ZXJTdGF0
ZUNhY2hlLmluc2VydChzdGQ6Om1ha2VfcGFpcihrZXksIHN0ZDo6bWFrZV9wYWlyKGR4MTFSYXN0
ZXJpemVyU3RhdGUsIG1Db3VudGVyKyspKSk7Ci0KLSAgICAgICAgcmV0dXJuIGR4MTFSYXN0ZXJp
emVyU3RhdGU7Ci0gICAgfQotfQotCi1zdGQ6OnNpemVfdCBSZW5kZXJTdGF0ZUNhY2hlOjpoYXNo
RGVwdGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZkc1N0YXRlKQot
ewotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2VlZCA9IDB4QUJDREVGOTg7Ci0KLSAg
ICBzdGQ6OnNpemVfdCBoYXNoID0gMDsKLSAgICBNdXJtdXJIYXNoM194ODZfMzIoJmRzU3RhdGUs
IHNpemVvZihnbDo6RGVwdGhTdGVuY2lsU3RhdGUpLCBzZWVkLCAmaGFzaCk7Ci0gICAgcmV0dXJu
IGhhc2g7Ci19Ci0KLWJvb2wgUmVuZGVyU3RhdGVDYWNoZTo6Y29tcGFyZURlcHRoU3RlbmNpbFN0
YXRlcyhjb25zdCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmEsIGNvbnN0IGdsOjpEZXB0aFN0ZW5j
aWxTdGF0ZSAmYikKLXsKLSAgICByZXR1cm4gbWVtY21wKCZhLCAmYiwgc2l6ZW9mKGdsOjpEZXB0
aFN0ZW5jaWxTdGF0ZSkpID09IDA7Ci19Ci0KLUlEM0QxMURlcHRoU3RlbmNpbFN0YXRlICpSZW5k
ZXJTdGF0ZUNhY2hlOjpnZXREZXB0aFN0ZW5jaWxTdGF0ZShjb25zdCBnbDo6RGVwdGhTdGVuY2ls
U3RhdGUgJmRzU3RhdGUpCi17Ci0gICAgaWYgKCFtRGV2aWNlKQotICAgIHsKLSAgICAgICAgRVJS
KCJSZW5kZXJTdGF0ZUNhY2hlIGlzIG5vdCBpbml0aWFsaXplZC4iKTsKLSAgICAgICAgcmV0dXJu
IE5VTEw7Ci0gICAgfQotCi0gICAgRGVwdGhTdGVuY2lsU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBt
RGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5maW5kKGRzU3RhdGUpOwotICAgIGlmIChpICE9IG1EZXB0
aFN0ZW5jaWxTdGF0ZUNhY2hlLmVuZCgpKQotICAgIHsKLSAgICAgICAgRGVwdGhTdGVuY2lsU3Rh
dGVDb3VudGVyUGFpciAmc3RhdGUgPSBpLT5zZWNvbmQ7Ci0gICAgICAgIHN0YXRlLnNlY29uZCA9
IG1Db3VudGVyKys7Ci0gICAgICAgIHJldHVybiBzdGF0ZS5maXJzdDsKLSAgICB9Ci0gICAgZWxz
ZQotICAgIHsKLSAgICAgICAgaWYgKG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLnNpemUoKSA+PSBr
TWF4RGVwdGhTdGVuY2lsU3RhdGVzKQotICAgICAgICB7Ci0gICAgICAgICAgICBUUkFDRSgiT3Zl
cmZsb3dlZCB0aGUgbGltaXQgb2YgJXUgZGVwdGggc3RlbmNpbCBzdGF0ZXMsIHJlbW92aW5nIHRo
ZSBsZWFzdCByZWNlbnRseSB1c2VkICIKLSAgICAgICAgICAgICAgICAgICJ0byBtYWtlIHJvb20u
Iiwga01heERlcHRoU3RlbmNpbFN0YXRlcyk7Ci0KLSAgICAgICAgICAgIERlcHRoU3RlbmNpbFN0
YXRlTWFwOjppdGVyYXRvciBsZWFzdFJlY2VudGx5VXNlZCA9IG1EZXB0aFN0ZW5jaWxTdGF0ZUNh
Y2hlLmJlZ2luKCk7Ci0gICAgICAgICAgICBmb3IgKERlcHRoU3RlbmNpbFN0YXRlTWFwOjppdGVy
YXRvciBpID0gbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuYmVnaW4oKTsgaSAhPSBtRGVwdGhTdGVu
Y2lsU3RhdGVDYWNoZS5lbmQoKTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGlmIChpLT5zZWNvbmQuc2Vjb25kIDwgbGVhc3RSZWNlbnRseVVzZWQtPnNlY29uZC5zZWNvbmQp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNl
ZCA9IGk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGVh
c3RSZWNlbnRseVVzZWQtPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOwotICAgICAgICAgICAgbURl
cHRoU3RlbmNpbFN0YXRlQ2FjaGUuZXJhc2UobGVhc3RSZWNlbnRseVVzZWQpOwotICAgICAgICB9
Ci0KLSAgICAgICAgRDNEMTFfREVQVEhfU1RFTkNJTF9ERVNDIGRzRGVzYyA9IHsgMCB9OwotICAg
ICAgICBkc0Rlc2MuRGVwdGhFbmFibGUgPSBkc1N0YXRlLmRlcHRoVGVzdCA/IFRSVUUgOiBGQUxT
RTsKLSAgICAgICAgZHNEZXNjLkRlcHRoV3JpdGVNYXNrID0gZ2xfZDNkMTE6OkNvbnZlcnREZXB0
aE1hc2soZHNTdGF0ZS5kZXB0aE1hc2spOwotICAgICAgICBkc0Rlc2MuRGVwdGhGdW5jID0gZ2xf
ZDNkMTE6OkNvbnZlcnRDb21wYXJpc29uKGRzU3RhdGUuZGVwdGhGdW5jKTsKLSAgICAgICAgZHNE
ZXNjLlN0ZW5jaWxFbmFibGUgPSBkc1N0YXRlLnN0ZW5jaWxUZXN0ID8gVFJVRSA6IEZBTFNFOwot
ICAgICAgICBkc0Rlc2MuU3RlbmNpbFJlYWRNYXNrID0gZ2xfZDNkMTE6OkNvbnZlcnRTdGVuY2ls
TWFzayhkc1N0YXRlLnN0ZW5jaWxNYXNrKTsKLSAgICAgICAgZHNEZXNjLlN0ZW5jaWxXcml0ZU1h
c2sgPSBnbF9kM2QxMTo6Q29udmVydFN0ZW5jaWxNYXNrKGRzU3RhdGUuc3RlbmNpbFdyaXRlbWFz
ayk7Ci0gICAgICAgIGRzRGVzYy5Gcm9udEZhY2UuU3RlbmNpbEZhaWxPcCA9IGdsX2QzZDExOjpD
b252ZXJ0U3RlbmNpbE9wKGRzU3RhdGUuc3RlbmNpbEZhaWwpOwotICAgICAgICBkc0Rlc2MuRnJv
bnRGYWNlLlN0ZW5jaWxEZXB0aEZhaWxPcCA9IGdsX2QzZDExOjpDb252ZXJ0U3RlbmNpbE9wKGRz
U3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwpOwotICAgICAgICBkc0Rlc2MuRnJvbnRGYWNlLlN0
ZW5jaWxQYXNzT3AgPSBnbF9kM2QxMTo6Q29udmVydFN0ZW5jaWxPcChkc1N0YXRlLnN0ZW5jaWxQ
YXNzRGVwdGhQYXNzKTsKLSAgICAgICAgZHNEZXNjLkZyb250RmFjZS5TdGVuY2lsRnVuYyA9IGds
X2QzZDExOjpDb252ZXJ0Q29tcGFyaXNvbihkc1N0YXRlLnN0ZW5jaWxGdW5jKTsKLSAgICAgICAg
ZHNEZXNjLkJhY2tGYWNlLlN0ZW5jaWxGYWlsT3AgPSBnbF9kM2QxMTo6Q29udmVydFN0ZW5jaWxP
cChkc1N0YXRlLnN0ZW5jaWxCYWNrRmFpbCk7Ci0gICAgICAgIGRzRGVzYy5CYWNrRmFjZS5TdGVu
Y2lsRGVwdGhGYWlsT3AgPSBnbF9kM2QxMTo6Q29udmVydFN0ZW5jaWxPcChkc1N0YXRlLnN0ZW5j
aWxCYWNrUGFzc0RlcHRoRmFpbCk7Ci0gICAgICAgIGRzRGVzYy5CYWNrRmFjZS5TdGVuY2lsUGFz
c09wID0gZ2xfZDNkMTE6OkNvbnZlcnRTdGVuY2lsT3AoZHNTdGF0ZS5zdGVuY2lsQmFja1Bhc3NE
ZXB0aFBhc3MpOwotICAgICAgICBkc0Rlc2MuQmFja0ZhY2UuU3RlbmNpbEZ1bmMgPSBnbF9kM2Qx
MTo6Q29udmVydENvbXBhcmlzb24oZHNTdGF0ZS5zdGVuY2lsQmFja0Z1bmMpOwotCi0gICAgICAg
IElEM0QxMURlcHRoU3RlbmNpbFN0YXRlICpkeDExRGVwdGhTdGVuY2lsU3RhdGUgPSBOVUxMOwot
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFN0YXRl
KCZkc0Rlc2MsICZkeDExRGVwdGhTdGVuY2lsU3RhdGUpOwotICAgICAgICBpZiAoRkFJTEVEKHJl
c3VsdCkgfHwgIWR4MTFEZXB0aFN0ZW5jaWxTdGF0ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
RVJSKCJVbmFibGUgdG8gY3JlYXRlIGEgSUQzRDExRGVwdGhTdGVuY2lsU3RhdGUsIEhSRVNVTFQ6
IDB4JVguIiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0K
LSAgICAgICAgbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGRz
U3RhdGUsIHN0ZDo6bWFrZV9wYWlyKGR4MTFEZXB0aFN0ZW5jaWxTdGF0ZSwgbUNvdW50ZXIrKykp
KTsKLQotICAgICAgICByZXR1cm4gZHgxMURlcHRoU3RlbmNpbFN0YXRlOwotICAgIH0KLX0KLQot
c3RkOjpzaXplX3QgUmVuZGVyU3RhdGVDYWNoZTo6aGFzaFNhbXBsZXJTdGF0ZShjb25zdCBnbDo6
U2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpCi17Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGludCBzZWVkID0gMHhBQkNERUY5ODsKLQotICAgIHN0ZDo6c2l6ZV90IGhhc2ggPSAwOwotICAg
IE11cm11ckhhc2gzX3g4Nl8zMigmc2FtcGxlclN0YXRlLCBzaXplb2YoZ2w6OlNhbXBsZXJTdGF0
ZSksIHNlZWQsICZoYXNoKTsKLSAgICByZXR1cm4gaGFzaDsKLX0KLQotYm9vbCBSZW5kZXJTdGF0
ZUNhY2hlOjpjb21wYXJlU2FtcGxlclN0YXRlcyhjb25zdCBnbDo6U2FtcGxlclN0YXRlICZhLCBj
b25zdCBnbDo6U2FtcGxlclN0YXRlICZiKQotewotICAgIHJldHVybiBtZW1jbXAoJmEsICZiLCBz
aXplb2YoZ2w6OlNhbXBsZXJTdGF0ZSkpID09IDA7Ci19Ci0KLUlEM0QxMVNhbXBsZXJTdGF0ZSAq
UmVuZGVyU3RhdGVDYWNoZTo6Z2V0U2FtcGxlclN0YXRlKGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUg
JnNhbXBsZXJTdGF0ZSkKLXsKLSAgICBpZiAoIW1EZXZpY2UpCi0gICAgewotICAgICAgICBFUlIo
IlJlbmRlclN0YXRlQ2FjaGUgaXMgbm90IGluaXRpYWxpemVkLiIpOwotICAgICAgICByZXR1cm4g
TlVMTDsKLSAgICB9Ci0KLSAgICBTYW1wbGVyU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtU2FtcGxl
clN0YXRlQ2FjaGUuZmluZChzYW1wbGVyU3RhdGUpOwotICAgIGlmIChpICE9IG1TYW1wbGVyU3Rh
dGVDYWNoZS5lbmQoKSkKLSAgICB7Ci0gICAgICAgIFNhbXBsZXJTdGF0ZUNvdW50ZXJQYWlyICZz
dGF0ZSA9IGktPnNlY29uZDsKLSAgICAgICAgc3RhdGUuc2Vjb25kID0gbUNvdW50ZXIrKzsKLSAg
ICAgICAgcmV0dXJuIHN0YXRlLmZpcnN0OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAg
ICBpZiAobVNhbXBsZXJTdGF0ZUNhY2hlLnNpemUoKSA+PSBrTWF4U2FtcGxlclN0YXRlcykKLSAg
ICAgICAgewotICAgICAgICAgICAgVFJBQ0UoIk92ZXJmbG93ZWQgdGhlIGxpbWl0IG9mICV1IHNh
bXBsZXIgc3RhdGVzLCByZW1vdmluZyB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCAiCi0gICAgICAg
ICAgICAgICAgICAidG8gbWFrZSByb29tLiIsIGtNYXhTYW1wbGVyU3RhdGVzKTsKLQotICAgICAg
ICAgICAgU2FtcGxlclN0YXRlTWFwOjppdGVyYXRvciBsZWFzdFJlY2VudGx5VXNlZCA9IG1TYW1w
bGVyU3RhdGVDYWNoZS5iZWdpbigpOwotICAgICAgICAgICAgZm9yIChTYW1wbGVyU3RhdGVNYXA6
Oml0ZXJhdG9yIGkgPSBtU2FtcGxlclN0YXRlQ2FjaGUuYmVnaW4oKTsgaSAhPSBtU2FtcGxlclN0
YXRlQ2FjaGUuZW5kKCk7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAo
aS0+c2Vjb25kLnNlY29uZCA8IGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuc2Vjb25kKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQgPSBp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxlYXN0UmVj
ZW50bHlVc2VkLT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1TYW1wbGVy
U3RhdGVDYWNoZS5lcmFzZShsZWFzdFJlY2VudGx5VXNlZCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBEM0QxMV9TQU1QTEVSX0RFU0Mgc2FtcGxlckRlc2M7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkZp
bHRlciA9IGdsX2QzZDExOjpDb252ZXJ0RmlsdGVyKHNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIsIHNh
bXBsZXJTdGF0ZS5tYWdGaWx0ZXIsIHNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5KTsKLSAgICAg
ICAgc2FtcGxlckRlc2MuQWRkcmVzc1UgPSBnbF9kM2QxMTo6Q29udmVydFRleHR1cmVXcmFwKHNh
bXBsZXJTdGF0ZS53cmFwUyk7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkFkZHJlc3NWID0gZ2xfZDNk
MTE6OkNvbnZlcnRUZXh0dXJlV3JhcChzYW1wbGVyU3RhdGUud3JhcFQpOwotICAgICAgICBzYW1w
bGVyRGVzYy5BZGRyZXNzVyA9IEQzRDExX1RFWFRVUkVfQUREUkVTU19DTEFNUDsKLSAgICAgICAg
c2FtcGxlckRlc2MuTWlwTE9EQmlhcyA9IHN0YXRpY19jYXN0PGZsb2F0PihzYW1wbGVyU3RhdGUu
bG9kT2Zmc2V0KTsKLSAgICAgICAgc2FtcGxlckRlc2MuTWF4QW5pc290cm9weSA9IHNhbXBsZXJT
dGF0ZS5tYXhBbmlzb3Ryb3B5OwotICAgICAgICBzYW1wbGVyRGVzYy5Db21wYXJpc29uRnVuYyA9
IEQzRDExX0NPTVBBUklTT05fTkVWRVI7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9y
WzBdID0gMC4wZjsKLSAgICAgICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbMV0gPSAwLjBmOwot
ICAgICAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclsyXSA9IDAuMGY7Ci0gICAgICAgIHNhbXBs
ZXJEZXNjLkJvcmRlckNvbG9yWzNdID0gMC4wZjsKLSAgICAgICAgc2FtcGxlckRlc2MuTWluTE9E
ID0gZ2xfZDNkMTE6OkNvbnZlcnRNaW5MT0Qoc2FtcGxlclN0YXRlLm1pbkZpbHRlciwgc2FtcGxl
clN0YXRlLmxvZE9mZnNldCk7Ci0gICAgICAgIHNhbXBsZXJEZXNjLk1heExPRCA9IGdsX2QzZDEx
OjpDb252ZXJ0TWF4TE9EKHNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIsIHNhbXBsZXJTdGF0ZS5sb2RP
ZmZzZXQpOwotCi0gICAgICAgIElEM0QxMVNhbXBsZXJTdGF0ZSAqZHgxMVNhbXBsZXJTdGF0ZSA9
IE5VTEw7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlU2FtcGxlclN0
YXRlKCZzYW1wbGVyRGVzYywgJmR4MTFTYW1wbGVyU3RhdGUpOwotICAgICAgICBpZiAoRkFJTEVE
KHJlc3VsdCkgfHwgIWR4MTFTYW1wbGVyU3RhdGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVS
UigiVW5hYmxlIHRvIGNyZWF0ZSBhIElEM0QxMURlcHRoU3RlbmNpbFN0YXRlLCBIUkVTVUxUOiAw
eCVYLiIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotCi0g
ICAgICAgIG1TYW1wbGVyU3RhdGVDYWNoZS5pbnNlcnQoc3RkOjptYWtlX3BhaXIoc2FtcGxlclN0
YXRlLCBzdGQ6Om1ha2VfcGFpcihkeDExU2FtcGxlclN0YXRlLCBtQ291bnRlcisrKSkpOwotCi0g
ICAgICAgIHJldHVybiBkeDExU2FtcGxlclN0YXRlOwotICAgIH0KLX0KLQotfQpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyU3RhdGVDYWNoZS5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJTdGF0ZUNhY2hlLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4YjUxMTFkZTQ4ZjMyODgzMTRiZDUyNGEwN2U0Mzcw
NWQ5YmMzMjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJTdGF0
ZUNhY2hlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLQotLy8gUmVuZGVyU3RhdGVDYWNoZS5oOiBEZWZpbmVzIHJ4OjpSZW5kZXJTdGF0ZUNhY2hl
LCBhIGNhY2hlIG9mIERpcmVjdDNEIHJlbmRlcgotLy8gc3RhdGUgb2JqZWN0cy4KLQotI2lmbmRl
ZiBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSU1RBVEVDQUNIRV9IXwotI2RlZmluZSBMSUJHTEVT
VjJfUkVOREVSRVJfUkVOREVSU1RBVEVDQUNIRV9IXwotCi0jaW5jbHVkZSAibGliR0xFU3YyL2Fu
Z2xldHlwZXMuaCIKLSNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgotCi1uYW1lc3BhY2Ug
cngKLXsKLQotY2xhc3MgUmVuZGVyU3RhdGVDYWNoZQotewotICBwdWJsaWM6Ci0gICAgUmVuZGVy
U3RhdGVDYWNoZSgpOwotICAgIHZpcnR1YWwgflJlbmRlclN0YXRlQ2FjaGUoKTsKLQotICAgIHZv
aWQgaW5pdGlhbGl6ZShJRDNEMTFEZXZpY2UgKmRldmljZSk7Ci0gICAgdm9pZCBjbGVhcigpOwot
Ci0gICAgLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiB0aGUgcmV0dXJuZWQgYmxlbmQgc3RhdGUs
IFJlbGVhc2UoKSBtdXN0IGJlIGNhbGxlZC4KLSAgICBJRDNEMTFCbGVuZFN0YXRlICpnZXRCbGVu
ZFN0YXRlKGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRlKTsKLSAgICBJRDNEMTFSYXN0
ZXJpemVyU3RhdGUgKmdldFJhc3Rlcml6ZXJTdGF0ZShjb25zdCBnbDo6UmFzdGVyaXplclN0YXRl
ICZyYXN0ZXJTdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIHNjaXNzb3JFbmFibGVkLCB1bnNpZ25lZCBpbnQgZGVwdGhTaXplKTsKLSAgICBJ
RDNEMTFEZXB0aFN0ZW5jaWxTdGF0ZSAqZ2V0RGVwdGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6OkRl
cHRoU3RlbmNpbFN0YXRlICZkc1N0YXRlKTsKLSAgICBJRDNEMTFTYW1wbGVyU3RhdGUgKmdldFNh
bXBsZXJTdGF0ZShjb25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpOwotCi0gIHBy
aXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlclN0YXRlQ2FjaGUpOwot
Ci0gICAgdW5zaWduZWQgbG9uZyBsb25nIG1Db3VudGVyOwotCi0gICAgLy8gQmxlbmQgc3RhdGUg
Y2FjaGUKLSAgICBzdGF0aWMgc3RkOjpzaXplX3QgaGFzaEJsZW5kU3RhdGUoY29uc3QgZ2w6OkJs
ZW5kU3RhdGUgJmJsZW5kU3RhdGUpOwotICAgIHN0YXRpYyBib29sIGNvbXBhcmVCbGVuZFN0YXRl
cyhjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYSwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmIpOwotICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQga01heEJsZW5kU3RhdGVzOwotCi0gICAgdHlwZWRl
ZiBzdGQ6OnNpemVfdCAoKkJsZW5kU3RhdGVIYXNoRnVuY3Rpb24pKGNvbnN0IGdsOjpCbGVuZFN0
YXRlICYpOwotICAgIHR5cGVkZWYgYm9vbCAoKkJsZW5kU3RhdGVFcXVhbGl0eUZ1bmN0aW9uKShj
b25zdCBnbDo6QmxlbmRTdGF0ZSAmLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmKTsKLSAgICB0eXBl
ZGVmIHN0ZDo6cGFpcjxJRDNEMTFCbGVuZFN0YXRlKiwgdW5zaWduZWQgbG9uZyBsb25nPiBCbGVu
ZFN0YXRlQ291bnRlclBhaXI7Ci0gICAgdHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8Z2w6OkJs
ZW5kU3RhdGUsIEJsZW5kU3RhdGVDb3VudGVyUGFpciwgQmxlbmRTdGF0ZUhhc2hGdW5jdGlvbiwg
QmxlbmRTdGF0ZUVxdWFsaXR5RnVuY3Rpb24+IEJsZW5kU3RhdGVNYXA7Ci0gICAgQmxlbmRTdGF0
ZU1hcCBtQmxlbmRTdGF0ZUNhY2hlOwotCi0gICAgLy8gUmFzdGVyaXplciBzdGF0ZSBjYWNoZQot
ICAgIHN0cnVjdCBSYXN0ZXJpemVyU3RhdGVLZXkKLSAgICB7Ci0gICAgICAgIGdsOjpSYXN0ZXJp
emVyU3RhdGUgcmFzdGVyaXplclN0YXRlOwotICAgICAgICBib29sIHNjaXNzb3JFbmFibGVkOwot
ICAgICAgICB1bnNpZ25lZCBpbnQgZGVwdGhTaXplOwotICAgIH07Ci0gICAgc3RhdGljIHN0ZDo6
c2l6ZV90IGhhc2hSYXN0ZXJpemVyU3RhdGUoY29uc3QgUmFzdGVyaXplclN0YXRlS2V5ICZyYXN0
ZXJTdGF0ZSk7Ci0gICAgc3RhdGljIGJvb2wgY29tcGFyZVJhc3Rlcml6ZXJTdGF0ZXMoY29uc3Qg
UmFzdGVyaXplclN0YXRlS2V5ICZhLCBjb25zdCBSYXN0ZXJpemVyU3RhdGVLZXkgJmIpOwotICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQga01heFJhc3Rlcml6ZXJTdGF0ZXM7Ci0KLSAgICB0
eXBlZGVmIHN0ZDo6c2l6ZV90ICgqUmFzdGVyaXplclN0YXRlSGFzaEZ1bmN0aW9uKShjb25zdCBS
YXN0ZXJpemVyU3RhdGVLZXkgJik7Ci0gICAgdHlwZWRlZiBib29sICgqUmFzdGVyaXplclN0YXRl
RXF1YWxpdHlGdW5jdGlvbikoY29uc3QgUmFzdGVyaXplclN0YXRlS2V5ICYsIGNvbnN0IFJhc3Rl
cml6ZXJTdGF0ZUtleSAmKTsKLSAgICB0eXBlZGVmIHN0ZDo6cGFpcjxJRDNEMTFSYXN0ZXJpemVy
U3RhdGUqLCB1bnNpZ25lZCBsb25nIGxvbmc+IFJhc3Rlcml6ZXJTdGF0ZUNvdW50ZXJQYWlyOwot
ICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPFJhc3Rlcml6ZXJTdGF0ZUtleSwgUmFzdGVy
aXplclN0YXRlQ291bnRlclBhaXIsIFJhc3Rlcml6ZXJTdGF0ZUhhc2hGdW5jdGlvbiwgUmFzdGVy
aXplclN0YXRlRXF1YWxpdHlGdW5jdGlvbj4gUmFzdGVyaXplclN0YXRlTWFwOwotICAgIFJhc3Rl
cml6ZXJTdGF0ZU1hcCBtUmFzdGVyaXplclN0YXRlQ2FjaGU7Ci0KLSAgICAvLyBEZXB0aCBzdGVu
Y2lsIHN0YXRlIGNhY2hlCi0gICAgc3RhdGljIHN0ZDo6c2l6ZV90IGhhc2hEZXB0aFN0ZW5jaWxT
dGF0ZShjb25zdCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmRzU3RhdGUpOwotICAgIHN0YXRpYyBi
b29sIGNvbXBhcmVEZXB0aFN0ZW5jaWxTdGF0ZXMoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRl
ICZhLCBjb25zdCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmIpOwotICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBpbnQga01heERlcHRoU3RlbmNpbFN0YXRlczsKLQotICAgIHR5cGVkZWYgc3RkOjpz
aXplX3QgKCpEZXB0aFN0ZW5jaWxTdGF0ZUhhc2hGdW5jdGlvbikoY29uc3QgZ2w6OkRlcHRoU3Rl
bmNpbFN0YXRlICYpOwotICAgIHR5cGVkZWYgYm9vbCAoKkRlcHRoU3RlbmNpbFN0YXRlRXF1YWxp
dHlGdW5jdGlvbikoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICYsIGNvbnN0IGdsOjpEZXB0
aFN0ZW5jaWxTdGF0ZSAmKTsKLSAgICB0eXBlZGVmIHN0ZDo6cGFpcjxJRDNEMTFEZXB0aFN0ZW5j
aWxTdGF0ZSosIHVuc2lnbmVkIGxvbmcgbG9uZz4gRGVwdGhTdGVuY2lsU3RhdGVDb3VudGVyUGFp
cjsKLSAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxnbDo6RGVwdGhTdGVuY2lsU3RhdGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwdGhTdGVuY2lsU3RhdGVDb3VudGVy
UGFpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXB0aFN0ZW5jaWxTdGF0ZUhh
c2hGdW5jdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXB0aFN0ZW5jaWxT
dGF0ZUVxdWFsaXR5RnVuY3Rpb24+IERlcHRoU3RlbmNpbFN0YXRlTWFwOwotICAgIERlcHRoU3Rl
bmNpbFN0YXRlTWFwIG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlOwotCi0gICAgLy8gU2FtcGxlIHN0
YXRlIGNhY2hlCi0gICAgc3RhdGljIHN0ZDo6c2l6ZV90IGhhc2hTYW1wbGVyU3RhdGUoY29uc3Qg
Z2w6OlNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKTsKLSAgICBzdGF0aWMgYm9vbCBjb21wYXJl
U2FtcGxlclN0YXRlcyhjb25zdCBnbDo6U2FtcGxlclN0YXRlICZhLCBjb25zdCBnbDo6U2FtcGxl
clN0YXRlICZiKTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGtNYXhTYW1wbGVyU3Rh
dGVzOwotCi0gICAgdHlwZWRlZiBzdGQ6OnNpemVfdCAoKlNhbXBsZXJTdGF0ZUhhc2hGdW5jdGlv
bikoY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmKTsKLSAgICB0eXBlZGVmIGJvb2wgKCpTYW1wbGVy
U3RhdGVFcXVhbGl0eUZ1bmN0aW9uKShjb25zdCBnbDo6U2FtcGxlclN0YXRlICYsIGNvbnN0IGds
OjpTYW1wbGVyU3RhdGUgJik7Ci0gICAgdHlwZWRlZiBzdGQ6OnBhaXI8SUQzRDExU2FtcGxlclN0
YXRlKiwgdW5zaWduZWQgbG9uZyBsb25nPiBTYW1wbGVyU3RhdGVDb3VudGVyUGFpcjsKLSAgICB0
eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxnbDo6U2FtcGxlclN0YXRlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNhbXBsZXJTdGF0ZUNvdW50ZXJQYWlyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNhbXBsZXJTdGF0ZUhhc2hGdW5jdGlvbiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTYW1wbGVyU3RhdGVFcXVhbGl0eUZ1bmN0aW9uPiBTYW1wbGVy
U3RhdGVNYXA7Ci0gICAgU2FtcGxlclN0YXRlTWFwIG1TYW1wbGVyU3RhdGVDYWNoZTsKLQotICAg
IElEM0QxMURldmljZSAqbURldmljZTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIExJQkdMRVNWMl9S
RU5ERVJFUl9SRU5ERVJTVEFURUNBQ0hFX0hfClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9SZW5kZXJUYXJnZXQxMS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldDExLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMjY2N2NjNmZhNzgxYzc4MDQzNDdkNjAyN2QxMzk4NWMzOGMwZmRjZi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldDExLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDM1NSArMCwwIEBACi0jaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
Ci0vLwotCi0vLyBSZW5kZXJUYXJnZXQxMS5jcHA6IEltcGxlbWVudHMgYSBEWDExLXNwZWNpZmlj
IHdyYXBwZXIgZm9yIElEM0QxMVZpZXcgcG9pbnRlcnMKLS8vIHJldGFpbmVkIGJ5IFJlbmRlcmJ1
ZmZlcnMuCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0MTEuaCIK
LSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIxMS5oIgotCi0jaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL3JlbmRlcmVyMTFfdXRpbHMuaCIKLSNpbmNsdWRlICJsaWJHTEVT
djIvbWFpbi5oIgotCi1uYW1lc3BhY2UgcngKLXsKLQotc3RhdGljIHVuc2lnbmVkIGludCBnZXRS
VFZTdWJyZXNvdXJjZUluZGV4KElEM0QxMVRleHR1cmUyRCAqdGV4dHVyZSwgSUQzRDExUmVuZGVy
VGFyZ2V0VmlldyAqdmlldykKLXsKLSAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBy
dHZEZXNjOwotICAgIHZpZXctPkdldERlc2MoJnJ0dkRlc2MpOwotCi0gICAgRDNEMTFfVEVYVFVS
RTJEX0RFU0MgdGV4RGVzYzsKLSAgICB0ZXh0dXJlLT5HZXREZXNjKCZ0ZXhEZXNjKTsKLQotICAg
IHVuc2lnbmVkIGludCBtaXBTbGljZSA9IDA7Ci0gICAgdW5zaWduZWQgaW50IGFycmF5U2xpY2Ug
PSAwOwotICAgIHVuc2lnbmVkIGludCBtaXBMZXZlbHMgPSB0ZXhEZXNjLk1pcExldmVsczsKLQot
ICAgIHN3aXRjaCAocnR2RGVzYy5WaWV3RGltZW5zaW9uKQotICAgIHsKLSAgICAgIGNhc2UgRDNE
MTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMUQ6Ci0gICAgICAgIG1pcFNsaWNlID0gcnR2RGVzYy5U
ZXh0dXJlMUQuTWlwU2xpY2U7Ci0gICAgICAgIGFycmF5U2xpY2UgPSAwOwotICAgICAgICBicmVh
azsKLQotICAgICAgY2FzZSBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUxREFSUkFZOgotICAg
ICAgICBtaXBTbGljZSA9IHJ0dkRlc2MuVGV4dHVyZTFEQXJyYXkuTWlwU2xpY2U7Ci0gICAgICAg
IGFycmF5U2xpY2UgPSBydHZEZXNjLlRleHR1cmUxREFycmF5LkZpcnN0QXJyYXlTbGljZTsKLSAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMkQ6
Ci0gICAgICAgIG1pcFNsaWNlID0gcnR2RGVzYy5UZXh0dXJlMkQuTWlwU2xpY2U7Ci0gICAgICAg
IGFycmF5U2xpY2UgPSAwOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBEM0QxMV9SVFZf
RElNRU5TSU9OX1RFWFRVUkUyREFSUkFZOgotICAgICAgICBtaXBTbGljZSA9IHJ0dkRlc2MuVGV4
dHVyZTJEQXJyYXkuTWlwU2xpY2U7Ci0gICAgICAgIGFycmF5U2xpY2UgPSBydHZEZXNjLlRleHR1
cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2Ug
RDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMkRNUzoKLSAgICAgICAgbWlwU2xpY2UgPSAwOwot
ICAgICAgICBhcnJheVNsaWNlID0gMDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRDNE
MTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMkRNU0FSUkFZOgotICAgICAgICBtaXBTbGljZSA9IDA7
Ci0gICAgICAgIGFycmF5U2xpY2UgPSBydHZEZXNjLlRleHR1cmUyRE1TQXJyYXkuRmlyc3RBcnJh
eVNsaWNlOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBEM0QxMV9SVFZfRElNRU5TSU9O
X1RFWFRVUkUzRDoKLSAgICAgICAgbWlwU2xpY2UgPSBydHZEZXNjLlRleHR1cmUzRC5NaXBTbGlj
ZTsKLSAgICAgICAgYXJyYXlTbGljZSA9IDA7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNl
IEQzRDExX1JUVl9ESU1FTlNJT05fVU5LTk9XTjoKLSAgICAgIGNhc2UgRDNEMTFfUlRWX0RJTUVO
U0lPTl9CVUZGRVI6Ci0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsKLSAgICAgICAgYnJlYWs7Ci0K
LSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLQotICAgIHJldHVybiBEM0QxMUNhbGNTdWJyZXNvdXJjZShtaXBTbGljZSwgYXJyYXlT
bGljZSwgbWlwTGV2ZWxzKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBnZXREU1ZTdWJyZXNv
dXJjZUluZGV4KElEM0QxMVRleHR1cmUyRCAqdGV4dHVyZSwgSUQzRDExRGVwdGhTdGVuY2lsVmll
dyAqdmlldykKLXsKLSAgICBEM0QxMV9ERVBUSF9TVEVOQ0lMX1ZJRVdfREVTQyBkc3ZEZXNjOwot
ICAgIHZpZXctPkdldERlc2MoJmRzdkRlc2MpOwotCi0gICAgRDNEMTFfVEVYVFVSRTJEX0RFU0Mg
dGV4RGVzYzsKLSAgICB0ZXh0dXJlLT5HZXREZXNjKCZ0ZXhEZXNjKTsKLQotICAgIHVuc2lnbmVk
IGludCBtaXBTbGljZSA9IDA7Ci0gICAgdW5zaWduZWQgaW50IGFycmF5U2xpY2UgPSAwOwotICAg
IHVuc2lnbmVkIGludCBtaXBMZXZlbHMgPSB0ZXhEZXNjLk1pcExldmVsczsKLQotICAgIHN3aXRj
aCAoZHN2RGVzYy5WaWV3RGltZW5zaW9uKQotICAgIHsKLSAgICAgIGNhc2UgRDNEMTFfRFNWX0RJ
TUVOU0lPTl9URVhUVVJFMUQ6Ci0gICAgICAgIG1pcFNsaWNlID0gZHN2RGVzYy5UZXh0dXJlMUQu
TWlwU2xpY2U7Ci0gICAgICAgIGFycmF5U2xpY2UgPSAwOwotICAgICAgICBicmVhazsKLQotICAg
ICAgY2FzZSBEM0QxMV9EU1ZfRElNRU5TSU9OX1RFWFRVUkUxREFSUkFZOgotICAgICAgICBtaXBT
bGljZSA9IGRzdkRlc2MuVGV4dHVyZTFEQXJyYXkuTWlwU2xpY2U7Ci0gICAgICAgIGFycmF5U2xp
Y2UgPSBkc3ZEZXNjLlRleHR1cmUxREFycmF5LkZpcnN0QXJyYXlTbGljZTsKLSAgICAgICAgYnJl
YWs7Ci0KLSAgICAgIGNhc2UgRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMkQ6Ci0gICAgICAg
IG1pcFNsaWNlID0gZHN2RGVzYy5UZXh0dXJlMkQuTWlwU2xpY2U7Ci0gICAgICAgIGFycmF5U2xp
Y2UgPSAwOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBEM0QxMV9EU1ZfRElNRU5TSU9O
X1RFWFRVUkUyREFSUkFZOgotICAgICAgICBtaXBTbGljZSA9IGRzdkRlc2MuVGV4dHVyZTJEQXJy
YXkuTWlwU2xpY2U7Ci0gICAgICAgIGFycmF5U2xpY2UgPSBkc3ZEZXNjLlRleHR1cmUyREFycmF5
LkZpcnN0QXJyYXlTbGljZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRDNEMTFfRFNW
X0RJTUVOU0lPTl9URVhUVVJFMkRNUzoKLSAgICAgICAgbWlwU2xpY2UgPSAwOwotICAgICAgICBh
cnJheVNsaWNlID0gMDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRDNEMTFfRFNWX0RJ
TUVOU0lPTl9URVhUVVJFMkRNU0FSUkFZOgotICAgICAgICBtaXBTbGljZSA9IDA7Ci0gICAgICAg
IGFycmF5U2xpY2UgPSBkc3ZEZXNjLlRleHR1cmUyRE1TQXJyYXkuRmlyc3RBcnJheVNsaWNlOwot
ICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBEM0QxMV9SVFZfRElNRU5TSU9OX1VOS05PV046
Ci0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAg
IHJldHVybiBEM0QxMUNhbGNTdWJyZXNvdXJjZShtaXBTbGljZSwgYXJyYXlTbGljZSwgbWlwTGV2
ZWxzKTsKLX0KLQotUmVuZGVyVGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5k
ZXJlciwgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqcnR2LCBJRDNEMTFUZXh0dXJlMkQgKnRleCwg
SUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0KQotewotICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKHJlbmRl
cmVyKTsKLSAgICBtVGV4dHVyZSA9IHRleDsKLSAgICBtUmVuZGVyVGFyZ2V0ID0gcnR2OwotICAg
IG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIG1TaGFkZXJSZXNvdXJjZSA9IHNydjsKLSAgICBt
U3VicmVzb3VyY2VJbmRleCA9IDA7Ci0KLSAgICBpZiAobVJlbmRlclRhcmdldCAmJiBtVGV4dHVy
ZSkKLSAgICB7Ci0gICAgICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIGRlc2M7Ci0g
ICAgICAgIG1SZW5kZXJUYXJnZXQtPkdldERlc2MoJmRlc2MpOwotCi0gICAgICAgIEQzRDExX1RF
WFRVUkUyRF9ERVNDIHRleERlc2M7Ci0gICAgICAgIG1UZXh0dXJlLT5HZXREZXNjKCZ0ZXhEZXNj
KTsKLQotICAgICAgICBtU3VicmVzb3VyY2VJbmRleCA9IGdldFJUVlN1YnJlc291cmNlSW5kZXgo
bVRleHR1cmUsIG1SZW5kZXJUYXJnZXQpOwotICAgICAgICBtV2lkdGggPSB3aWR0aDsKLSAgICAg
ICAgbUhlaWdodCA9IGhlaWdodDsKLSAgICAgICAgbVNhbXBsZXMgPSAodGV4RGVzYy5TYW1wbGVE
ZXNjLkNvdW50ID4gMSkgPyB0ZXhEZXNjLlNhbXBsZURlc2MuQ291bnQgOiAwOwotCi0gICAgICAg
IG1JbnRlcm5hbEZvcm1hdCA9IGQzZDExX2dsOjpDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0
KGRlc2MuRm9ybWF0KTsKLSAgICAgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDExX2dsOjpDb252ZXJ0
VGV4dHVyZUludGVybmFsRm9ybWF0KGRlc2MuRm9ybWF0KTsKLSAgICB9Ci19Ci0KLVJlbmRlclRh
cmdldDExOjpSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIElEM0QxMURlcHRoU3Rl
bmNpbFZpZXcgKmRzdiwgSUQzRDExVGV4dHVyZTJEICp0ZXgsIElEM0QxMVNoYWRlclJlc291cmNl
VmlldyAqc3J2LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBtUmVuZGVy
ZXIgPSBSZW5kZXJlcjExOjptYWtlUmVuZGVyZXIxMShyZW5kZXJlcik7Ci0gICAgbVRleHR1cmUg
PSB0ZXg7Ci0gICAgbVJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgbURlcHRoU3RlbmNpbCA9IGRz
djsKLSAgICBtU2hhZGVyUmVzb3VyY2UgPSBzcnY7Ci0gICAgbVN1YnJlc291cmNlSW5kZXggPSAw
OwotCi0gICAgaWYgKG1EZXB0aFN0ZW5jaWwgJiYgbVRleHR1cmUpCi0gICAgewotICAgICAgICBE
M0QxMV9ERVBUSF9TVEVOQ0lMX1ZJRVdfREVTQyBkZXNjOwotICAgICAgICBtRGVwdGhTdGVuY2ls
LT5HZXREZXNjKCZkZXNjKTsKLQotICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyB0ZXhEZXNj
OwotICAgICAgICBtVGV4dHVyZS0+R2V0RGVzYygmdGV4RGVzYyk7Ci0KLSAgICAgICAgbVN1YnJl
c291cmNlSW5kZXggPSBnZXREU1ZTdWJyZXNvdXJjZUluZGV4KG1UZXh0dXJlLCBtRGVwdGhTdGVu
Y2lsKTsKLSAgICAgICAgbVdpZHRoID0gd2lkdGg7Ci0gICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7
Ci0gICAgICAgIG1TYW1wbGVzID0gKHRleERlc2MuU2FtcGxlRGVzYy5Db3VudCA+IDEpID8gdGV4
RGVzYy5TYW1wbGVEZXNjLkNvdW50IDogMDsKLQotICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBk
M2QxMV9nbDo6Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChkZXNjLkZvcm1hdCk7Ci0gICAg
ICAgIG1BY3R1YWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1h
dChkZXNjLkZvcm1hdCk7Ci0gICAgfQotfQotCi1SZW5kZXJUYXJnZXQxMTo6UmVuZGVyVGFyZ2V0
MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xl
bnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzLCBib29sIGRlcHRoKQotewotICAgIG1SZW5kZXJl
ciA9IFJlbmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKHJlbmRlcmVyKTsKLSAgICBtVGV4dHVyZSA9
IE5VTEw7Ci0gICAgbVJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgbURlcHRoU3RlbmNpbCA9IE5V
TEw7Ci0gICAgbVNoYWRlclJlc291cmNlID0gTlVMTDsKLQotICAgIERYR0lfRk9STUFUIHJlcXVl
c3RlZEZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KGZvcm1hdCk7
Ci0KLSAgICBpbnQgc3VwcG9ydGVkU2FtcGxlcyA9IG1SZW5kZXJlci0+Z2V0TmVhcmVzdFN1cHBv
cnRlZFNhbXBsZXMocmVxdWVzdGVkRm9ybWF0LCBzYW1wbGVzKTsKLSAgICBpZiAoc3VwcG9ydGVk
U2FtcGxlcyA8IDApCi0gICAgewotICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+
IDApCi0gICAgewotICAgICAgICAvLyBDcmVhdGUgdGV4dHVyZSByZXNvdXJjZQotICAgICAgICBE
M0QxMV9URVhUVVJFMkRfREVTQyBkZXNjOwotICAgICAgICBkZXNjLldpZHRoID0gd2lkdGg7IAot
ICAgICAgICBkZXNjLkhlaWdodCA9IGhlaWdodDsKLSAgICAgICAgZGVzYy5NaXBMZXZlbHMgPSAx
OwotICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IDE7Ci0gICAgICAgIGRlc2MuRm9ybWF0ID0gcmVx
dWVzdGVkRm9ybWF0OwotICAgICAgICBkZXNjLlNhbXBsZURlc2MuQ291bnQgPSAoc3VwcG9ydGVk
U2FtcGxlcyA9PSAwKSA/IDEgOiBzdXBwb3J0ZWRTYW1wbGVzOwotICAgICAgICBkZXNjLlNhbXBs
ZURlc2MuUXVhbGl0eSA9IDA7Ci0gICAgICAgIGRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZB
VUxUOwotICAgICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKLSAgICAgICAgZGVzYy5NaXNj
RmxhZ3MgPSAwOwotICAgICAgICBkZXNjLkJpbmRGbGFncyA9IChkZXB0aCA/IEQzRDExX0JJTkRf
REVQVEhfU1RFTkNJTCA6IChEM0QxMV9CSU5EX1JFTkRFUl9UQVJHRVQgfCBEM0QxMV9CSU5EX1NI
QURFUl9SRVNPVVJDRSkpOwotCi0gICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRl
cmVyLT5nZXREZXZpY2UoKTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJm1UZXh0dXJlKTsKLQotICAgICAgICBpZiAocmVzdWx0
ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgIGlmIChkZXB0aCkKLSAgICAgICAg
ewotICAgICAgICAgICAgRDNEMTFfREVQVEhfU1RFTkNJTF9WSUVXX0RFU0MgZHN2RGVzYzsKLSAg
ICAgICAgICAgIGRzdkRlc2MuRm9ybWF0ID0gcmVxdWVzdGVkRm9ybWF0OwotICAgICAgICAgICAg
ZHN2RGVzYy5WaWV3RGltZW5zaW9uID0gKHN1cHBvcnRlZFNhbXBsZXMgPT0gMCkgPyBEM0QxMV9E
U1ZfRElNRU5TSU9OX1RFWFRVUkUyRCA6IEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTJETVM7
Ci0gICAgICAgICAgICBkc3ZEZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IDA7Ci0gICAgICAgICAg
ICBkc3ZEZXNjLkZsYWdzID0gMDsKLSAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRl
RGVwdGhTdGVuY2lsVmlldyhtVGV4dHVyZSwgJmRzdkRlc2MsICZtRGVwdGhTdGVuY2lsKTsKLQot
ICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgbVRl
eHR1cmUgPSBOVUxMOwotICAgICAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBEM0QxMV9S
RU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOwotICAgICAgICAgICAgcnR2RGVzYy5Gb3Jt
YXQgPSByZXF1ZXN0ZWRGb3JtYXQ7Ci0gICAgICAgICAgICBydHZEZXNjLlZpZXdEaW1lbnNpb24g
PSAoc3VwcG9ydGVkU2FtcGxlcyA9PSAwKSA/IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJE
IDogRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMkRNUzsKLSAgICAgICAgICAgIHJ0dkRlc2Mu
VGV4dHVyZTJELk1pcFNsaWNlID0gMDsKLSAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3Jl
YXRlUmVuZGVyVGFyZ2V0VmlldyhtVGV4dHVyZSwgJnJ0dkRlc2MsICZtUmVuZGVyVGFyZ2V0KTsK
LQotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAg
bVRleHR1cmUgPSBOVUxMOwotICAgICAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgICAgICBEM0QxMV9TSEFERVJf
UkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7Ci0gICAgICAgICAgICBzcnZEZXNjLkZvcm1hdCA9
IHJlcXVlc3RlZEZvcm1hdDsKLSAgICAgICAgICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IChz
dXBwb3J0ZWRTYW1wbGVzID09IDApID8gRDNEMTFfU1JWX0RJTUVOU0lPTl9URVhUVVJFMkQgOiBE
M0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyRE1TOwotICAgICAgICAgICAgc3J2RGVzYy5UZXh0
dXJlMkQuTW9zdERldGFpbGVkTWlwID0gMDsKLSAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJE
Lk1pcExldmVscyA9IDE7Ci0gICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRl
clJlc291cmNlVmlldyhtVGV4dHVyZSwgJnNydkRlc2MsICZtU2hhZGVyUmVzb3VyY2UpOwotCi0g
ICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBtVGV4
dHVyZSA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwot
ICAgICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOwotICAgICAgICAgICAgICAgIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgbVdpZHRoID0gd2lkdGg7Ci0gICAgbUhlaWdodCA9IGhlaWdodDsK
LSAgICBtSW50ZXJuYWxGb3JtYXQgPSBmb3JtYXQ7Ci0gICAgbVNhbXBsZXMgPSBzdXBwb3J0ZWRT
YW1wbGVzOwotICAgIG1BY3R1YWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVydFRleHR1cmVJbnRl
cm5hbEZvcm1hdChyZXF1ZXN0ZWRGb3JtYXQpOwotICAgIG1TdWJyZXNvdXJjZUluZGV4ID0gRDNE
MTFDYWxjU3VicmVzb3VyY2UoMCwgMCwgMSk7Ci19Ci0KLVJlbmRlclRhcmdldDExOjp+UmVuZGVy
VGFyZ2V0MTEoKQotewotICAgIGlmIChtVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1UZXh0dXJl
LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAo
bVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsK
LSAgICAgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1EZXB0aFN0
ZW5jaWwpCi0gICAgewotICAgICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7Ci0gICAgICAg
IG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtU2hhZGVyUmVzb3VyY2Up
Ci0gICAgewotICAgICAgICBtU2hhZGVyUmVzb3VyY2UtPlJlbGVhc2UoKTsKLSAgICAgICAgbVNo
YWRlclJlc291cmNlID0gTlVMTDsKLSAgICB9Ci19Ci0KLVJlbmRlclRhcmdldDExICpSZW5kZXJU
YXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKFJlbmRlclRhcmdldCAqdGFyZ2V0KQotewotICAg
IEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKHJ4OjpSZW5kZXJUYXJnZXQxMSosIHRhcmdldCkpOwot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxyeDo6UmVuZGVyVGFyZ2V0MTEqPih0YXJnZXQpOwotfQot
Ci1JRDNEMTFUZXh0dXJlMkQgKlJlbmRlclRhcmdldDExOjpnZXRUZXh0dXJlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbVRleHR1cmU7Ci19Ci0KLUlEM0QxMVJlbmRlclRhcmdldFZpZXcgKlJlbmRl
clRhcmdldDExOjpnZXRSZW5kZXJUYXJnZXRWaWV3KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVJl
bmRlclRhcmdldDsKLX0KLQotSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqUmVuZGVyVGFyZ2V0MTE6
OmdldERlcHRoU3RlbmNpbFZpZXcoKSBjb25zdAotewotICAgIHJldHVybiBtRGVwdGhTdGVuY2ls
OwotfQotCi1JRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlJlbmRlclRhcmdldDExOjpnZXRTaGFk
ZXJSZXNvdXJjZVZpZXcoKSBjb25zdAotewotICAgIHJldHVybiBtU2hhZGVyUmVzb3VyY2U7Ci19
Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJUYXJnZXQxMTo6Z2V0U3VicmVzb3VyY2VJbmRleCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1TdWJyZXNvdXJjZUluZGV4OwotfQotCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRh
cmdldDExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L1JlbmRlclRhcmdldDExLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ODI3ZjI2
Mzk3MDcyOTQyODRhMmNjZDM0ODFjOTdiZWRlODliMDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQxMS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAs
MCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFJlbmRlclRhcmdldDExLmg6IERlZmluZXMgYSBEWDEx
LXNwZWNpZmljIHdyYXBwZXIgZm9yIElEM0QxMVZpZXcgcG9pbnRlcnMKLS8vIHJldGFpbmVkIGJ5
IFJlbmRlcmJ1ZmZlcnMuCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUlRBUkdF
VDExX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJUQVJHRVQxMV9IXwotCi0j
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldC5oIgotCi1uYW1lc3BhY2Ug
cngKLXsKLWNsYXNzIFJlbmRlcmVyOwotY2xhc3MgUmVuZGVyZXIxMTsKLQotY2xhc3MgUmVuZGVy
VGFyZ2V0MTEgOiBwdWJsaWMgUmVuZGVyVGFyZ2V0Ci17Ci0gIHB1YmxpYzoKLSAgICBSZW5kZXJU
YXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0diwg
SUQzRDExVGV4dHVyZTJEICp0ZXgsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgUmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIg
KnJlbmRlcmVyLCBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpkc3YsIElEM0QxMVRleHR1cmUyRCAq
dGV4LCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydiwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQpOwotICAgIFJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcywg
Ym9vbCBkZXB0aCk7Ci0gICAgdmlydHVhbCB+UmVuZGVyVGFyZ2V0MTEoKTsKLQotICAgIHN0YXRp
YyBSZW5kZXJUYXJnZXQxMSAqbWFrZVJlbmRlclRhcmdldDExKFJlbmRlclRhcmdldCAqcmVuZGVy
VGFyZ2V0KTsKLQotICAgIElEM0QxMVRleHR1cmUyRCAqZ2V0VGV4dHVyZSgpIGNvbnN0OwotICAg
IElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmdldFJlbmRlclRhcmdldFZpZXcoKSBjb25zdDsKLSAg
ICBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpnZXREZXB0aFN0ZW5jaWxWaWV3KCkgY29uc3Q7Ci0g
ICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpnZXRTaGFkZXJSZXNvdXJjZVZpZXcoKSBjb25z
dDsKLQotICAgIHVuc2lnbmVkIGludCBnZXRTdWJyZXNvdXJjZUluZGV4KCkgY29uc3Q7Ci0KLSAg
cHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyVGFyZ2V0MTEpOwot
Ci0gICAgdW5zaWduZWQgaW50IG1TdWJyZXNvdXJjZUluZGV4OwotICAgIElEM0QxMVRleHR1cmUy
RCAqbVRleHR1cmU7Ci0gICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqbVJlbmRlclRhcmdldDsK
LSAgICBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICptRGVwdGhTdGVuY2lsOwotICAgIElEM0QxMVNo
YWRlclJlc291cmNlVmlldyAqbVNoYWRlclJlc291cmNlOwotCi0gICAgUmVuZGVyZXIxMSAqbVJl
bmRlcmVyOwotfTsKLQotfQotCi0jZW5kaWYgTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUlRBUkdF
VDExX0hfClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQ5LmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFy
Z2V0OS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4NGM3MDkwNTk5YzkwZWMz
MDc4OTY1ZmNhOWUxYTA2MzIzYzc5OGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9SZW5kZXJUYXJnZXQ5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0j
aW5jbHVkZSAicHJlY29tcGlsZWQuaCIKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBSZW5kZXJUYXJnZXQ5
LmNwcDogSW1wbGVtZW50cyBhIEQzRDktc3BlY2lmaWMgd3JhcHBlciBmb3IgSURpcmVjdDNEU3Vy
ZmFjZTkKLS8vIHBvaW50ZXJzIHJldGFpbmVkIGJ5IHJlbmRlcmJ1ZmZlcnMuCi0KLSNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0OS5oIgotI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9SZW5kZXJlcjkuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9y
ZW5kZXJlcjlfdXRpbHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgotCi1uYW1lc3Bh
Y2UgcngKLXsKLQotUmVuZGVyVGFyZ2V0OTo6UmVuZGVyVGFyZ2V0OShSZW5kZXJlciAqcmVuZGVy
ZXIsIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlKQotewotICAgIG1SZW5kZXJlciA9IFJlbmRl
cmVyOTo6bWFrZVJlbmRlcmVyOShyZW5kZXJlcik7Ci0gICAgbVJlbmRlclRhcmdldCA9IHN1cmZh
Y2U7Ci0KLSAgICBpZiAobVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIEQzRFNVUkZBQ0Vf
REVTQyBkZXNjcmlwdGlvbjsKLSAgICAgICAgbVJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzY3Jp
cHRpb24pOwotCi0gICAgICAgIG1XaWR0aCA9IGRlc2NyaXB0aW9uLldpZHRoOwotICAgICAgICBt
SGVpZ2h0ID0gZGVzY3JpcHRpb24uSGVpZ2h0OwotICAgICAgICAKLSAgICAgICAgbUludGVybmFs
Rm9ybWF0ID0gZDNkOV9nbDo6R2V0RXF1aXZhbGVudEZvcm1hdChkZXNjcmlwdGlvbi5Gb3JtYXQp
OwotICAgICAgICBtQWN0dWFsRm9ybWF0ID0gZDNkOV9nbDo6R2V0RXF1aXZhbGVudEZvcm1hdChk
ZXNjcmlwdGlvbi5Gb3JtYXQpOwotICAgICAgICBtU2FtcGxlcyA9IGQzZDlfZ2w6OkdldFNhbXBs
ZXNGcm9tTXVsdGlzYW1wbGVUeXBlKGRlc2NyaXB0aW9uLk11bHRpU2FtcGxlVHlwZSk7Ci0gICAg
fQotfQotCi1SZW5kZXJUYXJnZXQ5OjpSZW5kZXJUYXJnZXQ5KFJlbmRlcmVyICpyZW5kZXJlciwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2Ft
cGxlcykKLXsKLSAgICBtUmVuZGVyZXIgPSBSZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjkocmVuZGVy
ZXIpOwotICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOwotCi0gICAgRDNERk9STUFUIHJlcXVlc3Rl
ZEZvcm1hdCA9IGdsX2QzZDk6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoZm9ybWF0KTsKLSAg
ICBpbnQgc3VwcG9ydGVkU2FtcGxlcyA9IG1SZW5kZXJlci0+Z2V0TmVhcmVzdFN1cHBvcnRlZFNh
bXBsZXMocmVxdWVzdGVkRm9ybWF0LCBzYW1wbGVzKTsKLQotICAgIGlmIChzdXBwb3J0ZWRTYW1w
bGVzID09IC0xKQotICAgIHsKLSAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwot
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9IEQzREVSUl9J
TlZBTElEQ0FMTDsKLSAgICAKLSAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApCi0gICAg
ewotICAgICAgICBpZiAocmVxdWVzdGVkRm9ybWF0ID09IEQzREZNVF9EMjRTOCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmVzdWx0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKS0+Q3JlYXRlRGVw
dGhTdGVuY2lsU3VyZmFjZSh3aWR0aCwgaGVpZ2h0LCByZXF1ZXN0ZWRGb3JtYXQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsX2QzZDk6OkdldE11bHRpc2FtcGxlVHlwZUZyb21TYW1wbGVzKHN1cHBvcnRlZFNh
bXBsZXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLCBGQUxTRSwgJm1SZW5kZXJUYXJnZXQsIE5VTEwpOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0g
bVJlbmRlcmVyLT5nZXREZXZpY2UoKS0+Q3JlYXRlUmVuZGVyVGFyZ2V0KHdpZHRoLCBoZWlnaHQs
IHJlcXVlc3RlZEZvcm1hdCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6R2V0TXVsdGlzYW1wbGVUeXBlRnJv
bVNhbXBsZXMoc3VwcG9ydGVkU2FtcGxlcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgRkFMU0UsICZtUmVuZGVyVGFy
Z2V0LCBOVUxMKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09V
VE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAg
ICB9Ci0KLSAgICBtV2lkdGggPSB3aWR0aDsKLSAgICBtSGVpZ2h0ID0gaGVpZ2h0OwotICAgIG1J
bnRlcm5hbEZvcm1hdCA9IGZvcm1hdDsKLSAgICBtU2FtcGxlcyA9IHN1cHBvcnRlZFNhbXBsZXM7
Ci0gICAgbUFjdHVhbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEVxdWl2YWxlbnRGb3JtYXQocmVxdWVz
dGVkRm9ybWF0KTsKLX0KLQotUmVuZGVyVGFyZ2V0OTo6flJlbmRlclRhcmdldDkoKQotewotICAg
IGlmIChtUmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFz
ZSgpOwotICAgIH0KLX0KLQotUmVuZGVyVGFyZ2V0OSAqUmVuZGVyVGFyZ2V0OTo6bWFrZVJlbmRl
clRhcmdldDkoUmVuZGVyVGFyZ2V0ICp0YXJnZXQpCi17Ci0gICAgQVNTRVJUKEhBU19EWU5BTUlD
X1RZUEUocng6OlJlbmRlclRhcmdldDkqLCB0YXJnZXQpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8cng6OlJlbmRlclRhcmdldDkqPih0YXJnZXQpOwotfQotCi1JRGlyZWN0M0RTdXJmYWNlOSAq
UmVuZGVyVGFyZ2V0OTo6Z2V0U3VyZmFjZSgpCi17Ci0gICAgLy8gQ2FsbGVyIGlzIHJlc3BvbnNp
YmxlIGZvciByZWxlYXNpbmcgdGhlIHJldHVybmVkIHN1cmZhY2UgcmVmZXJlbmNlLgotICAgIGlm
IChtUmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgbVJlbmRlclRhcmdldC0+QWRkUmVmKCk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7Ci19Ci0KLX0KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldDkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0OS5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBmYWY4YWQxYzZkMmQ2MjQyOTQwMGZlMzNjYjhjZGRlNzFmN2QzMjVl
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0OS5oCisr
KyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFJlbmRlclRh
cmdldDkuaDogRGVmaW5lcyBhIEQzRDktc3BlY2lmaWMgd3JhcHBlciBmb3IgSURpcmVjdDNEU3Vy
ZmFjZTkgcG9pbnRlcnMKLS8vIHJldGFpbmVkIGJ5IFJlbmRlcmJ1ZmZlcnMuCi0KLSNpZm5kZWYg
TElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUlRBUkdFVDlfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1JF
TkRFUkVSX1JFTkRFUlRBUkdFVDlfSF8KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9S
ZW5kZXJUYXJnZXQuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci1jbGFzcyBSZW5kZXJlcjsKLWNsYXNz
IFJlbmRlcmVyOTsKLQotY2xhc3MgUmVuZGVyVGFyZ2V0OSA6IHB1YmxpYyBSZW5kZXJUYXJnZXQK
LXsKLSAgcHVibGljOgotICAgIFJlbmRlclRhcmdldDkoUmVuZGVyZXIgKnJlbmRlcmVyLCBJRGly
ZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSk7Ci0gICAgUmVuZGVyVGFyZ2V0OShSZW5kZXJlciAqcmVu
ZGVyZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNp
emVpIHNhbXBsZXMpOwotICAgIHZpcnR1YWwgflJlbmRlclRhcmdldDkoKTsKLQotICAgIHN0YXRp
YyBSZW5kZXJUYXJnZXQ5ICptYWtlUmVuZGVyVGFyZ2V0OShSZW5kZXJUYXJnZXQgKnJlbmRlclRh
cmdldCk7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFN1cmZhY2UoKTsKLQotICBwcml2YXRl
OgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJUYXJnZXQ5KTsKLQotICAgIElE
aXJlY3QzRFN1cmZhY2U5ICptUmVuZGVyVGFyZ2V0OwotCi0gICAgUmVuZGVyZXI5ICptUmVuZGVy
ZXI7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSVEFSR0VU
OV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9SZW5kZXJlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL1JlbmRlcmVyLmNwcAppbmRleCBlMGIzYWJjZjg3OTllYzJjNmMwOTU2NDY0
ZDNkNWY5MWQ4ODdkODZhLi40YmQ0ZGNmODI2N2U0NDJkZjFiMGE3ZGNhYzg5OWI1OWU5NTRkMTgw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL1JlbmRlcmVyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL1JlbmRlcmVyLmNwcApAQCAtMTEsOCArMTEsOCBAQAogI2luY2x1ZGUgImxp
YkdMRVN2Mi9tYWluLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKICNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvUmVuZGVyZXI5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVy
MTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyZXIxMS5oIgogI2luY2x1ZGUg
ImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKICNpbmNsdWRlICJ0aGlyZF9wYXJ0eS90cmFjZV9ldmVu
dC90cmFjZV9ldmVudC5oIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgKaW5kZXggZTE4NjFmMDFlYjFkYWI5
MDMyMzE5NWQxOGYwY2NlOWJhYzJkMzJhMC4uNzI0NGEwYTNkNjExZjA5MTI4MWQ5NTY4ODYzNTdm
ZjBhYTljYzhlYiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaApAQCAtMTE5LDcgKzExOSw3IEBAIGNsYXNz
IFJlbmRlcmVyCiAgICAgdmlydHVhbCB2b2lkIHNldFRleHR1cmUoZ2w6OlNhbXBsZXJUeXBlIHR5
cGUsIGludCBpbmRleCwgZ2w6OlRleHR1cmUgKnRleHR1cmUpID0gMDsKIAogICAgIHZpcnR1YWwg
dm9pZCBzZXRSYXN0ZXJpemVyU3RhdGUoY29uc3QgZ2w6OlJhc3Rlcml6ZXJTdGF0ZSAmcmFzdGVy
U3RhdGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0ZShjb25zdCBnbDo6Qmxl
bmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNvbG9yICZibGVuZENvbG9yLAorICAgIHZp
cnR1YWwgdm9pZCBzZXRCbGVuZFN0YXRlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNv
bnN0IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRlLCBjb25zdCBnbDo6Q29sb3IgJmJsZW5kQ29s
b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZU1h
c2spID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVwdGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6
OkRlcHRoU3RlbmNpbFN0YXRlICZkZXB0aFN0ZW5jaWxTdGF0ZSwgaW50IHN0ZW5jaWxSZWYsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGVuY2lsQmFja1JlZiwg
Ym9vbCBmcm9udEZhY2VDQ1cpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIxMS5jcHAgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyMTEuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2JhMzU1ZDU4MjJmMGZjOTdlZWQwM2Q3MjhhZTBkNzdl
ZDQ2ZTU3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIxMS5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNTUxICswLDAgQEAKLSNpbmNsdWRlICJwcmVjb21waWxl
ZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gUmVuZGVyZXIxMS5jcHA6IEltcGxlbWVudHMg
YSBiYWNrLWVuZCBzcGVjaWZpYyBjbGFzcyBmb3IgdGhlIEQzRDExIHJlbmRlcmVyLgotCi0jaW5j
bHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgi
Ci0jaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9n
cmFtQmluYXJ5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9SZW5kZXJlcjExLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdl
dDExLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL3JlbmRlcmVyMTFfdXRpbHMuaCIK
LSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvU2hhZGVyRXhlY3V0YWJsZTExLmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1N3YXBDaGFpbjExLmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL0ltYWdlMTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVmVy
dGV4QnVmZmVyMTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhCdWZmZXIx
MS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdlMTEuaCIKLSNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGF0YU1hbmFnZXIuaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhEYXRhTWFuYWdlci5oIgotI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZTExLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL1F1ZXJ5MTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvRmVuY2UxMS5o
IgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Ro
cm91Z2gxMXZzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGls
ZWQvcGFzc3Rocm91Z2hyZ2JhMTFwcy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9z
aGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiMTFwcy5oIgotI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdobHVtMTFwcy5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdobHVtYWxw
aGExMXBzLmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxl
ZC9jbGVhcjExdnMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21w
aWxlZC9jbGVhcnNpbmdsZTExcHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvc2hh
ZGVycy9jb21waWxlZC9jbGVhcm11bHRpcGxlMTFwcy5oIgotCi0jaW5jbHVkZSAibGliRUdML0Rp
c3BsYXkuaCIKLQotI2lmZGVmIF9ERUJVRwotLy8gdGhpcyBmbGFnIGVuYWJsZXMgc3VwcHJlc3Np
bmcgc29tZSBzcHVyaW91cyB3YXJuaW5ncyB0aGF0IHBvcCB1cCBpbiBjZXJ0YWluIFdlYkdMIHNh
bXBsZXMKLS8vIGFuZCBjb25mb3JtYW5jZSB0ZXN0cy4gdG8gZW5hYmxlIGFsbCB3YXJuaW5ncywg
cmVtb3ZlIHRoaXMgZGVmaW5lLgotI2RlZmluZSBBTkdMRV9TVVBQUkVTU19EM0QxMV9IQVpBUkRf
V0FSTklOR1MgMQotI2VuZGlmCi0KLW5hbWVzcGFjZSByeAotewotc3RhdGljIGNvbnN0IERYR0lf
Rk9STUFUIFJlbmRlclRhcmdldEZvcm1hdHNbXSA9Ci0gICAgewotICAgICAgICBEWEdJX0ZPUk1B
VF9COEc4UjhBOF9VTk9STSwKLSAgICAgICAgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk0KLSAg
ICB9OwotCi1zdGF0aWMgY29uc3QgRFhHSV9GT1JNQVQgRGVwdGhTdGVuY2lsRm9ybWF0c1tdID0K
LSAgICB7Ci0gICAgICAgIERYR0lfRk9STUFUX1VOS05PV04sCi0gICAgICAgIERYR0lfRk9STUFU
X0QyNF9VTk9STV9TOF9VSU5ULAotICAgICAgICBEWEdJX0ZPUk1BVF9EMTZfVU5PUk0KLSAgICB9
OwotCi1lbnVtCi17Ci0gICAgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGX1NNNCA9IDE2Ci19
OwotCi1SZW5kZXJlcjExOjpSZW5kZXJlcjExKGVnbDo6RGlzcGxheSAqZGlzcGxheSwgSERDIGhE
YykgOiBSZW5kZXJlcihkaXNwbGF5KSwgbURjKGhEYykKLXsKLSAgICBtVmVydGV4RGF0YU1hbmFn
ZXIgPSBOVUxMOwotICAgIG1JbmRleERhdGFNYW5hZ2VyID0gTlVMTDsKLQotICAgIG1MaW5lTG9v
cElCID0gTlVMTDsKLSAgICBtVHJpYW5nbGVGYW5JQiA9IE5VTEw7Ci0KLSAgICBtQ29weVJlc291
cmNlc0luaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgbUNvcHlWQiA9IE5VTEw7Ci0gICAgbUNvcHlT
YW1wbGVyID0gTlVMTDsKLSAgICBtQ29weUlMID0gTlVMTDsKLSAgICBtQ29weVZTID0gTlVMTDsK
LSAgICBtQ29weVJHQkFQUyA9IE5VTEw7Ci0gICAgbUNvcHlSR0JQUyA9IE5VTEw7Ci0gICAgbUNv
cHlMdW1QUyA9IE5VTEw7Ci0gICAgbUNvcHlMdW1BbHBoYVBTID0gTlVMTDsKLQotICAgIG1DbGVh
clJlc291cmNlc0luaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgbUNsZWFyVkIgPSBOVUxMOwotICAg
IG1DbGVhcklMID0gTlVMTDsKLSAgICBtQ2xlYXJWUyA9IE5VTEw7Ci0gICAgbUNsZWFyU2luZ2xl
UFMgPSBOVUxMOwotICAgIG1DbGVhck11bHRpcGxlUFMgPSBOVUxMOwotICAgIG1DbGVhclNjaXNz
b3JSUyA9IE5VTEw7Ci0gICAgbUNsZWFyTm9TY2lzc29yUlMgPSBOVUxMOwotCi0gICAgbVN5bmNR
dWVyeSA9IE5VTEw7Ci0KLSAgICBtRDNkMTFNb2R1bGUgPSBOVUxMOwotICAgIG1EeGdpTW9kdWxl
ID0gTlVMTDsKLQotICAgIG1EZXZpY2VMb3N0ID0gZmFsc2U7Ci0KLSAgICBtTWF4U3VwcG9ydGVk
U2FtcGxlcyA9IDA7Ci0KLSAgICBtRGV2aWNlID0gTlVMTDsKLSAgICBtRGV2aWNlQ29udGV4dCA9
IE5VTEw7Ci0gICAgbUR4Z2lBZGFwdGVyID0gTlVMTDsKLSAgICBtRHhnaUZhY3RvcnkgPSBOVUxM
OwotCi0gICAgbURyaXZlckNvbnN0YW50QnVmZmVyVlMgPSBOVUxMOwotICAgIG1Ecml2ZXJDb25z
dGFudEJ1ZmZlclBTID0gTlVMTDsKLQotICAgIG1CR1JBVGV4dHVyZVN1cHBvcnQgPSBmYWxzZTsK
LQotICAgIG1Jc0dlb21ldHJ5U2hhZGVyQWN0aXZlID0gZmFsc2U7Ci19Ci0KLVJlbmRlcmVyMTE6
On5SZW5kZXJlcjExKCkKLXsKLSAgICByZWxlYXNlKCk7Ci19Ci0KLVJlbmRlcmVyMTEgKlJlbmRl
cmVyMTE6Om1ha2VSZW5kZXJlcjExKFJlbmRlcmVyICpyZW5kZXJlcikKLXsKLSAgICBBU1NFUlQo
SEFTX0RZTkFNSUNfVFlQRShyeDo6UmVuZGVyZXIxMSosIHJlbmRlcmVyKSk7Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PHJ4OjpSZW5kZXJlcjExKj4ocmVuZGVyZXIpOwotfQotCi0jaWZuZGVmIF9f
ZDNkMTFfMV9oX18KLSNkZWZpbmUgRDNEMTFfTUVTU0FHRV9JRF9ERVZJQ0VfRFJBV19SRU5ERVJU
QVJHRVRWSUVXX05PVF9TRVQgKChEM0QxMV9NRVNTQUdFX0lEKTMxNDYwODEpCi0jZW5kaWYKLQot
RUdMaW50IFJlbmRlcmVyMTE6OmluaXRpYWxpemUoKQotewotICAgIGlmICghaW5pdGlhbGl6ZUNv
bXBpbGVyKCkpCi0gICAgewotICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsKLSAg
ICB9Ci0KLSAgICBtRHhnaU1vZHVsZSA9IExvYWRMaWJyYXJ5KFRFWFQoImR4Z2kuZGxsIikpOwot
ICAgIG1EM2QxMU1vZHVsZSA9IExvYWRMaWJyYXJ5KFRFWFQoImQzZDExLmRsbCIpKTsKLQotICAg
IGlmIChtRDNkMTFNb2R1bGUgPT0gTlVMTCB8fCBtRHhnaU1vZHVsZSA9PSBOVUxMKQotICAgIHsK
LSAgICAgICAgRVJSKCJDb3VsZCBub3QgbG9hZCBEM0QxMSBvciBEWEdJIGxpYnJhcnkgLSBhYm9y
dGluZyFcbiIpOwotICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsKLSAgICB9Ci0K
LSAgICAvLyBjcmVhdGUgdGhlIEQzRDExIGRldmljZQotICAgIEFTU0VSVChtRGV2aWNlID09IE5V
TEwpOwotICAgIFBGTl9EM0QxMV9DUkVBVEVfREVWSUNFIEQzRDExQ3JlYXRlRGV2aWNlID0gKFBG
Tl9EM0QxMV9DUkVBVEVfREVWSUNFKUdldFByb2NBZGRyZXNzKG1EM2QxMU1vZHVsZSwgIkQzRDEx
Q3JlYXRlRGV2aWNlIik7Ci0KLSAgICBpZiAoRDNEMTFDcmVhdGVEZXZpY2UgPT0gTlVMTCkKLSAg
ICB7Ci0gICAgICAgIEVSUigiQ291bGQgbm90IHJldHJpZXZlIEQzRDExQ3JlYXRlRGV2aWNlIGFk
ZHJlc3MgLSBhYm9ydGluZyFcbiIpOwotICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpF
RDsKLSAgICB9Ci0KLSAgICBEM0RfRkVBVFVSRV9MRVZFTCBmZWF0dXJlTGV2ZWxzW10gPQotICAg
IHsKLSAgICAgICAgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMCwKLSAgICAgICAgRDNEX0ZFQVRVUkVf
TEVWRUxfMTBfMSwKLSAgICAgICAgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMCwKLSAgICB9OwotCi0g
ICAgSFJFU1VMVCByZXN1bHQgPSBTX09LOwotCi0jaWZkZWYgX0RFQlVHCi0gICAgcmVzdWx0ID0g
RDNEMTFDcmVhdGVEZXZpY2UoTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
M0RfRFJJVkVSX1RZUEVfSEFSRFdBUkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0QxMV9DUkVBVEVfREVWSUNF
X0RFQlVHLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVMZXZlbHMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlTaXplKGZlYXR1cmVMZXZlbHMpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRDExX1NES19WRVJTSU9OLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZtRGV2aWNlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZtRmVhdHVyZUxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZtRGV2aWNlQ29udGV4dCk7Ci0KLSAgICBpZiAoIW1EZXZpY2UgfHwgRkFJTEVEKHJlc3VsdCkp
Ci0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCBjcmVhdGluZyBEZWJ1ZyBEM0QxMSBkZXZpY2Ug
LSBmYWxsaW5nIGJhY2sgdG8gcmVsZWFzZSBydW50aW1lLlxuIik7Ci0gICAgfQotCi0gICAgaWYg
KCFtRGV2aWNlIHx8IEZBSUxFRChyZXN1bHQpKQotI2VuZGlmCi0gICAgewotICAgICAgICByZXN1
bHQgPSBEM0QxMUNyZWF0ZURldmljZShOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBEM0RfRFJJVkVSX1RZUEVfSEFSRFdBUkUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVMZXZlbHMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5U2l6ZShmZWF0dXJlTGV2ZWxzKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEMTFfU0RLX1ZFUlNJT04sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtRGV2aWNlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmbUZlYXR1cmVMZXZlbCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJm1EZXZpY2VDb250ZXh0KTsKLQotICAgICAgICBpZiAoIW1EZXZp
Y2UgfHwgRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiQ291bGQg
bm90IGNyZWF0ZSBEM0QxMSBkZXZpY2UgLSBhYm9ydGluZyFcbiIpOwotICAgICAgICAgICAgcmV0
dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7ICAgLy8gQ2xlYW51cCBkb25lIGJ5IGRlc3RydWN0b3Ig
dGhyb3VnaCBnbERlc3Ryb3lSZW5kZXJlcgotICAgICAgICB9Ci0gICAgfQotCi0gICAgSURYR0lE
ZXZpY2UgKmR4Z2lEZXZpY2UgPSBOVUxMOwotICAgIHJlc3VsdCA9IG1EZXZpY2UtPlF1ZXJ5SW50
ZXJmYWNlKF9fdXVpZG9mKElEWEdJRGV2aWNlKSwgKHZvaWQqKikmZHhnaURldmljZSk7Ci0KLSAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIoIkNvdWxkIG5vdCBxdWVy
eSBEWEdJIGRldmljZSAtIGFib3J0aW5nIVxuIik7Ci0gICAgICAgIHJldHVybiBFR0xfTk9UX0lO
SVRJQUxJWkVEOwotICAgIH0KLQotICAgIHJlc3VsdCA9IGR4Z2lEZXZpY2UtPkdldFBhcmVudChf
X3V1aWRvZihJRFhHSUFkYXB0ZXIpLCAodm9pZCoqKSZtRHhnaUFkYXB0ZXIpOwotCi0gICAgaWYg
KEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgRVJSKCJDb3VsZCBub3QgcmV0cmlldmUg
RFhHSSBhZGFwdGVyIC0gYWJvcnRpbmchXG4iKTsKLSAgICAgICAgcmV0dXJuIEVHTF9OT1RfSU5J
VElBTElaRUQ7Ci0gICAgfQotCi0gICAgZHhnaURldmljZS0+UmVsZWFzZSgpOwotCi0gICAgbUR4
Z2lBZGFwdGVyLT5HZXREZXNjKCZtQWRhcHRlckRlc2NyaXB0aW9uKTsKLSAgICBtZW1zZXQobURl
c2NyaXB0aW9uLCAwLCBzaXplb2YobURlc2NyaXB0aW9uKSk7Ci0gICAgd2NzdG9tYnMobURlc2Ny
aXB0aW9uLCBtQWRhcHRlckRlc2NyaXB0aW9uLkRlc2NyaXB0aW9uLCBzaXplb2YobURlc2NyaXB0
aW9uKSAtIDEpOwotCi0gICAgcmVzdWx0ID0gbUR4Z2lBZGFwdGVyLT5HZXRQYXJlbnQoX191dWlk
b2YoSURYR0lGYWN0b3J5KSwgKHZvaWQqKikmbUR4Z2lGYWN0b3J5KTsKLQotICAgIGlmICghbUR4
Z2lGYWN0b3J5IHx8IEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgRVJSKCJDb3VsZCBu
b3QgY3JlYXRlIERYR0kgZmFjdG9yeSAtIGFib3J0aW5nIVxuIik7Ci0gICAgICAgIHJldHVybiBF
R0xfTk9UX0lOSVRJQUxJWkVEOwotICAgIH0KLQotICAgIC8vIERpc2FibGUgc29tZSBzcHVyaW91
cyBEM0QxMSBkZWJ1ZyB3YXJuaW5ncyB0byBwcmV2ZW50IHRoZW0gZnJvbSBmbG9vZGluZyB0aGUg
b3V0cHV0IGxvZwotI2lmIGRlZmluZWQoQU5HTEVfU1VQUFJFU1NfRDNEMTFfSEFaQVJEX1dBUk5J
TkdTKSAmJiBkZWZpbmVkKF9ERUJVRykKLSAgICBJRDNEMTFJbmZvUXVldWUgKmluZm9RdWV1ZTsK
LSAgICByZXN1bHQgPSBtRGV2aWNlLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRDNEMTFJbmZv
UXVldWUpLCAgKHZvaWQgKiopJmluZm9RdWV1ZSk7Ci0KLSAgICBpZiAoU1VDQ0VFREVEKHJlc3Vs
dCkpCi0gICAgewotICAgICAgICBEM0QxMV9NRVNTQUdFX0lEIGhpZGVNZXNzYWdlc1tdID0KLSAg
ICAgICAgewotICAgICAgICAgICAgRDNEMTFfTUVTU0FHRV9JRF9ERVZJQ0VfRFJBV19SRU5ERVJU
QVJHRVRWSUVXX05PVF9TRVQKLSAgICAgICAgfTsKLQotICAgICAgICBEM0QxMV9JTkZPX1FVRVVF
X0ZJTFRFUiBmaWx0ZXIgPSB7MH07Ci0gICAgICAgIGZpbHRlci5EZW55TGlzdC5OdW1JRHMgPSBB
cnJheVNpemUoaGlkZU1lc3NhZ2VzKTsKLSAgICAgICAgZmlsdGVyLkRlbnlMaXN0LnBJRExpc3Qg
PSBoaWRlTWVzc2FnZXM7Ci0KLSAgICAgICAgaW5mb1F1ZXVlLT5BZGRTdG9yYWdlRmlsdGVyRW50
cmllcygmZmlsdGVyKTsKLQotICAgICAgICBpbmZvUXVldWUtPlJlbGVhc2UoKTsKLSAgICB9Ci0j
ZW5kaWYKLQotICAgIHVuc2lnbmVkIGludCBtYXhTdXBwb3J0ZWRTYW1wbGVzID0gMDsKLSAgICB1
bnNpZ25lZCBpbnQgcnRGb3JtYXRDb3VudCA9IEFycmF5U2l6ZShSZW5kZXJUYXJnZXRGb3JtYXRz
KTsKLSAgICB1bnNpZ25lZCBpbnQgZHNGb3JtYXRDb3VudCA9IEFycmF5U2l6ZShEZXB0aFN0ZW5j
aWxGb3JtYXRzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHJ0Rm9ybWF0Q291
bnQgKyBkc0Zvcm1hdENvdW50OyArK2kpCi0gICAgewotICAgICAgICBEWEdJX0ZPUk1BVCBmb3Jt
YXQgPSAoaSA8IHJ0Rm9ybWF0Q291bnQpID8gUmVuZGVyVGFyZ2V0Rm9ybWF0c1tpXSA6IERlcHRo
U3RlbmNpbEZvcm1hdHNbaSAtIHJ0Rm9ybWF0Q291bnRdOwotICAgICAgICBpZiAoZm9ybWF0ICE9
IERYR0lfRk9STUFUX1VOS05PV04pCi0gICAgICAgIHsKLSAgICAgICAgICAgIFVJTlQgZm9ybWF0
U3VwcG9ydDsKLSAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNoZWNrRm9ybWF0U3VwcG9y
dChmb3JtYXQsICZmb3JtYXRTdXBwb3J0KTsKLSAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVz
dWx0KSAmJiAoZm9ybWF0U3VwcG9ydCAmIEQzRDExX0ZPUk1BVF9TVVBQT1JUX01VTFRJU0FNUExF
X1JFTkRFUlRBUkdFVCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTXVsdGlzYW1w
bGVTdXBwb3J0SW5mbyBzdXBwb3J0SW5mbzsKLQotICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGogPSAxOyBqIDw9IEQzRDExX01BWF9NVUxUSVNBTVBMRV9TQU1QTEVfQ09VTlQ7IGor
KykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZp
Y2UtPkNoZWNrTXVsdGlzYW1wbGVRdWFsaXR5TGV2ZWxzKGZvcm1hdCwgaiwgJnN1cHBvcnRJbmZv
LnF1YWxpdHlMZXZlbHNbaiAtIDFdKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURF
RChyZXN1bHQpICYmIHN1cHBvcnRJbmZvLnF1YWxpdHlMZXZlbHNbaiAtIDFdID4gMCkKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbWF4U3VwcG9ydGVkU2Ft
cGxlcyA9IHN0ZDo6bWF4KGosIG1heFN1cHBvcnRlZFNhbXBsZXMpOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydEluZm8ucXVhbGl0eUxldmVsc1tqIC0gMV0g
PSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgbU11bHRpc2FtcGxlU3VwcG9ydE1hcC5pbnNlcnQoc3RkOjptYWtlX3BhaXIoZm9y
bWF0LCBzdXBwb3J0SW5mbykpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAg
IG1NYXhTdXBwb3J0ZWRTYW1wbGVzID0gbWF4U3VwcG9ydGVkU2FtcGxlczsKLQotICAgIGluaXRp
YWxpemVEZXZpY2UoKTsKLQotICAgIC8vIEJHUkEgdGV4dHVyZSBzdXBwb3J0IGlzIG9wdGlvbmFs
IGluIGZlYXR1cmUgbGV2ZWxzIDEwIGFuZCAxMF8xCi0gICAgVUlOVCBmb3JtYXRTdXBwb3J0Owot
ICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNoZWNrRm9ybWF0U3VwcG9ydChEWEdJX0ZPUk1BVF9COEc4
UjhBOF9VTk9STSwgJmZvcm1hdFN1cHBvcnQpOwotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAg
ICB7Ci0gICAgICAgIEVSUigiRXJyb3IgY2hlY2tpbmcgQkdSQSBmb3JtYXQgc3VwcG9ydDogMHgl
MDhYIiwgcmVzdWx0KTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgY29uc3QgaW50
IGZsYWdzID0gKEQzRDExX0ZPUk1BVF9TVVBQT1JUX1RFWFRVUkUyRCB8IEQzRDExX0ZPUk1BVF9T
VVBQT1JUX1JFTkRFUl9UQVJHRVQpOwotICAgICAgICBtQkdSQVRleHR1cmVTdXBwb3J0ID0gKGZv
cm1hdFN1cHBvcnQgJiBmbGFncykgPT0gZmxhZ3M7Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgZmxv
YXRpbmcgcG9pbnQgdGV4dHVyZSBzdXBwb3J0Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGlu
dCByZXF1aXJlZFRleHR1cmVGbGFncyA9IEQzRDExX0ZPUk1BVF9TVVBQT1JUX1RFWFRVUkUyRCB8
IEQzRDExX0ZPUk1BVF9TVVBQT1JUX1RFWFRVUkVDVUJFOwotICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBpbnQgcmVxdWlyZWRSZW5kZXJhYmxlRmxhZ3MgPSBEM0QxMV9GT1JNQVRfU1VQUE9SVF9S
RU5ERVJfVEFSR0VUOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcmVxdWlyZWRGaWx0
ZXJGbGFncyA9IEQzRDExX0ZPUk1BVF9TVVBQT1JUX1NIQURFUl9TQU1QTEU7Ci0KLSAgICBEWEdJ
X0ZPUk1BVCBmbG9hdDE2Rm9ybWF0c1tdID0KLSAgICB7Ci0gICAgICAgIERYR0lfRk9STUFUX1Ix
Nl9GTE9BVCwKLSAgICAgICAgRFhHSV9GT1JNQVRfUjE2RzE2X0ZMT0FULAotICAgICAgICBEWEdJ
X0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQsCi0gICAgfTsKLQotICAgIERYR0lfRk9STUFUIGZs
b2F0MzJGb3JtYXRzW10gPQotICAgIHsKLSAgICAgICAgRFhHSV9GT1JNQVRfUjMyX0ZMT0FULAot
ICAgICAgICBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsCi0gICAgICAgIERYR0lfRk9STUFUX1Iz
MkczMkIzMkEzMl9GTE9BVCwKLSAgICB9OwotCi0gICAgbUZsb2F0MTZUZXh0dXJlU3VwcG9ydCA9
IHRydWU7Ci0gICAgbUZsb2F0MTZGaWx0ZXJTdXBwb3J0ID0gdHJ1ZTsKLSAgICBtRmxvYXQxNlJl
bmRlclN1cHBvcnQgPSB0cnVlOwotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgQXJy
YXlTaXplKGZsb2F0MTZGb3JtYXRzKTsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKFNVQ0NFRURF
RChtRGV2aWNlLT5DaGVja0Zvcm1hdFN1cHBvcnQoZmxvYXQxNkZvcm1hdHNbaV0sICZmb3JtYXRT
dXBwb3J0KSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1GbG9hdDE2VGV4dHVyZVN1cHBvcnQg
PSBtRmxvYXQxNlRleHR1cmVTdXBwb3J0ICYmIChmb3JtYXRTdXBwb3J0ICYgcmVxdWlyZWRUZXh0
dXJlRmxhZ3MpID09IHJlcXVpcmVkVGV4dHVyZUZsYWdzOwotICAgICAgICAgICAgbUZsb2F0MTZG
aWx0ZXJTdXBwb3J0ID0gbUZsb2F0MTZGaWx0ZXJTdXBwb3J0ICYmIChmb3JtYXRTdXBwb3J0ICYg
cmVxdWlyZWRGaWx0ZXJGbGFncykgPT0gcmVxdWlyZWRGaWx0ZXJGbGFnczsKLSAgICAgICAgICAg
IG1GbG9hdDE2UmVuZGVyU3VwcG9ydCA9IG1GbG9hdDE2UmVuZGVyU3VwcG9ydCAmJiAoZm9ybWF0
U3VwcG9ydCAmIHJlcXVpcmVkUmVuZGVyYWJsZUZsYWdzKSA9PSByZXF1aXJlZFJlbmRlcmFibGVG
bGFnczsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1G
bG9hdDE2VGV4dHVyZVN1cHBvcnQgPSBmYWxzZTsKLSAgICAgICAgICAgIG1GbG9hdDE2UmVuZGVy
U3VwcG9ydCA9IGZhbHNlOwotICAgICAgICAgICAgbUZsb2F0MTZGaWx0ZXJTdXBwb3J0ID0gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtRmxvYXQzMlRleHR1cmVTdXBwb3J0ID0gdHJ1
ZTsKLSAgICBtRmxvYXQzMkZpbHRlclN1cHBvcnQgPSB0cnVlOwotICAgIG1GbG9hdDMyUmVuZGVy
U3VwcG9ydCA9IHRydWU7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNp
emUoZmxvYXQzMkZvcm1hdHMpOyBpKyspCi0gICAgewotICAgICAgICBpZiAoU1VDQ0VFREVEKG1E
ZXZpY2UtPkNoZWNrRm9ybWF0U3VwcG9ydChmbG9hdDMyRm9ybWF0c1tpXSwgJmZvcm1hdFN1cHBv
cnQpKSkKLSAgICAgICAgewotICAgICAgICAgICAgbUZsb2F0MzJUZXh0dXJlU3VwcG9ydCA9IG1G
bG9hdDMyVGV4dHVyZVN1cHBvcnQgJiYgKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZFRleHR1cmVG
bGFncykgPT0gcmVxdWlyZWRUZXh0dXJlRmxhZ3M7Ci0gICAgICAgICAgICBtRmxvYXQzMkZpbHRl
clN1cHBvcnQgPSBtRmxvYXQzMkZpbHRlclN1cHBvcnQgJiYgKGZvcm1hdFN1cHBvcnQgJiByZXF1
aXJlZEZpbHRlckZsYWdzKSA9PSByZXF1aXJlZEZpbHRlckZsYWdzOwotICAgICAgICAgICAgbUZs
b2F0MzJSZW5kZXJTdXBwb3J0ID0gbUZsb2F0MzJSZW5kZXJTdXBwb3J0ICYmIChmb3JtYXRTdXBw
b3J0ICYgcmVxdWlyZWRSZW5kZXJhYmxlRmxhZ3MpID09IHJlcXVpcmVkUmVuZGVyYWJsZUZsYWdz
OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbUZsb2F0
MzJUZXh0dXJlU3VwcG9ydCA9IGZhbHNlOwotICAgICAgICAgICAgbUZsb2F0MzJGaWx0ZXJTdXBw
b3J0ID0gZmFsc2U7Ci0gICAgICAgICAgICBtRmxvYXQzMlJlbmRlclN1cHBvcnQgPSBmYWxzZTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIENoZWNrIGNvbXByZXNzZWQgdGV4dHVyZSBzdXBw
b3J0Ci0gICAgY29uc3QgdW5zaWduZWQgaW50IHJlcXVpcmVkQ29tcHJlc3NlZFRleHR1cmVGbGFn
cyA9IEQzRDExX0ZPUk1BVF9TVVBQT1JUX1RFWFRVUkUyRDsKLQotICAgIGlmIChTVUNDRUVERUQo
bURldmljZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KERYR0lfRk9STUFUX0JDMV9VTk9STSwgJmZvcm1h
dFN1cHBvcnQpKSkKLSAgICB7Ci0gICAgICAgIG1EWFQxVGV4dHVyZVN1cHBvcnQgPSAoZm9ybWF0
U3VwcG9ydCAmIHJlcXVpcmVkQ29tcHJlc3NlZFRleHR1cmVGbGFncykgPT0gcmVxdWlyZWRDb21w
cmVzc2VkVGV4dHVyZUZsYWdzOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBtRFhU
MVRleHR1cmVTdXBwb3J0ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKFNVQ0NFRURFRChtRGV2
aWNlLT5DaGVja0Zvcm1hdFN1cHBvcnQoRFhHSV9GT1JNQVRfQkMzX1VOT1JNLCAmZm9ybWF0U3Vw
cG9ydCkpKQotICAgIHsKLSAgICAgICAgbURYVDNUZXh0dXJlU3VwcG9ydCA9IChmb3JtYXRTdXBw
b3J0ICYgcmVxdWlyZWRDb21wcmVzc2VkVGV4dHVyZUZsYWdzKSA9PSByZXF1aXJlZENvbXByZXNz
ZWRUZXh0dXJlRmxhZ3M7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG1EWFQzVGV4
dHVyZVN1cHBvcnQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoU1VDQ0VFREVEKG1EZXZpY2Ut
PkNoZWNrRm9ybWF0U3VwcG9ydChEWEdJX0ZPUk1BVF9CQzVfVU5PUk0sICZmb3JtYXRTdXBwb3J0
KSkpCi0gICAgewotICAgICAgICBtRFhUNVRleHR1cmVTdXBwb3J0ID0gKGZvcm1hdFN1cHBvcnQg
JiByZXF1aXJlZENvbXByZXNzZWRUZXh0dXJlRmxhZ3MpID09IHJlcXVpcmVkQ29tcHJlc3NlZFRl
eHR1cmVGbGFnczsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgbURYVDVUZXh0dXJl
U3VwcG9ydCA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIENoZWNrIGRlcHRoIHRleHR1cmUgc3Vw
cG9ydAotICAgIERYR0lfRk9STUFUIGRlcHRoVGV4dHVyZUZvcm1hdHNbXSA9Ci0gICAgewotICAg
ICAgICBEWEdJX0ZPUk1BVF9EMTZfVU5PUk0sCi0gICAgICAgIERYR0lfRk9STUFUX0QyNF9VTk9S
TV9TOF9VSU5ULAotICAgIH07Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHJlcXVp
cmVkRGVwdGhUZXh0dXJlRmxhZ3MgPSBEM0QxMV9GT1JNQVRfU1VQUE9SVF9ERVBUSF9TVEVOQ0lM
IHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBEM0QxMV9GT1JNQVRfU1VQUE9SVF9URVhUVVJFMkQ7Ci0KLSAgICBtRGVwdGhUZXh0dXJl
U3VwcG9ydCA9IHRydWU7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNp
emUoZGVwdGhUZXh0dXJlRm9ybWF0cyk7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmIChTVUNDRUVE
RUQobURldmljZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KGRlcHRoVGV4dHVyZUZvcm1hdHNbaV0sICZm
b3JtYXRTdXBwb3J0KSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXB0aFRleHR1cmVTdXBw
b3J0ID0gbURlcHRoVGV4dHVyZVN1cHBvcnQgJiYgKChmb3JtYXRTdXBwb3J0ICYgcmVxdWlyZWRE
ZXB0aFRleHR1cmVGbGFncykgPT0gcmVxdWlyZWREZXB0aFRleHR1cmVGbGFncyk7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGVwdGhUZXh0dXJlU3Vw
cG9ydCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIEVHTF9TVUNDRVNT
OwotfQotCi0vLyBkbyBhbnkgb25lLXRpbWUgZGV2aWNlIGluaXRpYWxpemF0aW9uCi0vLyBOT1RF
OiB0aGlzIGlzIGFsc28gbmVlZGVkIGFmdGVyIGEgZGV2aWNlIGxvc3QvcmVzZXQKLS8vIHRvIHJl
c2V0IHRoZSBzY2VuZSBzdGF0dXMgYW5kIGVuc3VyZSB0aGUgZGVmYXVsdCBzdGF0ZXMgYXJlIHJl
c2V0Lgotdm9pZCBSZW5kZXJlcjExOjppbml0aWFsaXplRGV2aWNlKCkKLXsKLSAgICBtU3RhdGVD
YWNoZS5pbml0aWFsaXplKG1EZXZpY2UpOwotICAgIG1JbnB1dExheW91dENhY2hlLmluaXRpYWxp
emUobURldmljZSwgbURldmljZUNvbnRleHQpOwotCi0gICAgQVNTRVJUKCFtVmVydGV4RGF0YU1h
bmFnZXIgJiYgIW1JbmRleERhdGFNYW5hZ2VyKTsKLSAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBu
ZXcgVmVydGV4RGF0YU1hbmFnZXIodGhpcyk7Ci0gICAgbUluZGV4RGF0YU1hbmFnZXIgPSBuZXcg
SW5kZXhEYXRhTWFuYWdlcih0aGlzKTsKLQotICAgIG1hcmtBbGxTdGF0ZURpcnR5KCk7Ci19Ci0K
LWludCBSZW5kZXJlcjExOjpnZW5lcmF0ZUNvbmZpZ3MoQ29uZmlnRGVzYyAqKmNvbmZpZ0Rlc2NM
aXN0KQotewotICAgIHVuc2lnbmVkIGludCBudW1SZW5kZXJGb3JtYXRzID0gQXJyYXlTaXplKFJl
bmRlclRhcmdldEZvcm1hdHMpOwotICAgIHVuc2lnbmVkIGludCBudW1EZXB0aEZvcm1hdHMgPSBB
cnJheVNpemUoRGVwdGhTdGVuY2lsRm9ybWF0cyk7Ci0gICAgKCpjb25maWdEZXNjTGlzdCkgPSBu
ZXcgQ29uZmlnRGVzY1tudW1SZW5kZXJGb3JtYXRzICogbnVtRGVwdGhGb3JtYXRzXTsKLSAgICBp
bnQgbnVtQ29uZmlncyA9IDA7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgZm9ybWF0SW5k
ZXggPSAwOyBmb3JtYXRJbmRleCA8IG51bVJlbmRlckZvcm1hdHM7IGZvcm1hdEluZGV4KyspCi0g
ICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBkZXB0aFN0ZW5jaWxJbmRleCA9IDA7IGRl
cHRoU3RlbmNpbEluZGV4IDwgbnVtRGVwdGhGb3JtYXRzOyBkZXB0aFN0ZW5jaWxJbmRleCsrKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBEWEdJX0ZPUk1BVCByZW5kZXJUYXJnZXRGb3JtYXQgPSBS
ZW5kZXJUYXJnZXRGb3JtYXRzW2Zvcm1hdEluZGV4XTsKLQotICAgICAgICAgICAgVUlOVCBmb3Jt
YXRTdXBwb3J0ID0gMDsKLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q2hl
Y2tGb3JtYXRTdXBwb3J0KHJlbmRlclRhcmdldEZvcm1hdCwgJmZvcm1hdFN1cHBvcnQpOwotCi0g
ICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkgJiYgKGZvcm1hdFN1cHBvcnQgJiBEM0Qx
MV9GT1JNQVRfU1VQUE9SVF9SRU5ERVJfVEFSR0VUKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBEWEdJX0ZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXQgPSBEZXB0aFN0ZW5jaWxGb3Jt
YXRzW2RlcHRoU3RlbmNpbEluZGV4XTsKLQotICAgICAgICAgICAgICAgIGJvb2wgZGVwdGhTdGVu
Y2lsRm9ybWF0T0sgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgaWYgKGRlcHRoU3RlbmNpbEZv
cm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgVUlOVCBmb3JtYXRTdXBwb3J0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ID0gbURldmljZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KGRlcHRoU3RlbmNpbEZvcm1hdCwg
JmZvcm1hdFN1cHBvcnQpOwotICAgICAgICAgICAgICAgICAgICBkZXB0aFN0ZW5jaWxGb3JtYXRP
SyA9IFNVQ0NFRURFRChyZXN1bHQpICYmIChmb3JtYXRTdXBwb3J0ICYgRDNEMTFfRk9STUFUX1NV
UFBPUlRfREVQVEhfU1RFTkNJTCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgaWYgKGRlcHRoU3RlbmNpbEZvcm1hdE9LKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgQ29uZmlnRGVzYyBuZXdDb25maWc7Ci0gICAgICAgICAgICAgICAgICAgIG5l
d0NvbmZpZy5yZW5kZXJUYXJnZXRGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVydEJhY2tCdWZmZXJG
b3JtYXQocmVuZGVyVGFyZ2V0Rm9ybWF0KTsKLSAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmln
LmRlcHRoU3RlbmNpbEZvcm1hdCA9IGQzZDExX2dsOjpDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0
KGRlcHRoU3RlbmNpbEZvcm1hdCk7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5tdWx0
aVNhbXBsZSA9IDA7ICAgICAvLyBGSVhNRTogZW51bWVyYXRlIG11bHRpLXNhbXBsaW5nCi0gICAg
ICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5mYXN0Q29uZmlnID0gdHJ1ZTsgICAvLyBBc3N1bWUg
YWxsIERYMTEgZm9ybWF0IGNvbnZlcnNpb25zIHRvIGJlIGZhc3QKLQotICAgICAgICAgICAgICAg
ICAgICAoKmNvbmZpZ0Rlc2NMaXN0KVtudW1Db25maWdzKytdID0gbmV3Q29uZmlnOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biBudW1Db25maWdzOwotfQotCi12b2lkIFJlbmRlcmVyMTE6OmRlbGV0ZUNvbmZpZ3MoQ29uZmln
RGVzYyAqY29uZmlnRGVzY0xpc3QpCi17Ci0gICAgZGVsZXRlIFtdIChjb25maWdEZXNjTGlzdCk7
Ci19Ci0KLXZvaWQgUmVuZGVyZXIxMTo6c3luYyhib29sIGJsb2NrKQotewotICAgIGlmIChibG9j
aykKLSAgICB7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0OwotCi0gICAgICAgIGlmICghbVN5bmNR
dWVyeSkKLSAgICAgICAgewotICAgICAgICAgICAgRDNEMTFfUVVFUllfREVTQyBxdWVyeURlc2M7
Ci0gICAgICAgICAgICBxdWVyeURlc2MuUXVlcnkgPSBEM0QxMV9RVUVSWV9FVkVOVDsKLSAgICAg
ICAgICAgIHF1ZXJ5RGVzYy5NaXNjRmxhZ3MgPSAwOwotCi0gICAgICAgICAgICByZXN1bHQgPSBt
RGV2aWNlLT5DcmVhdGVRdWVyeSgmcXVlcnlEZXNjLCAmbVN5bmNRdWVyeSk7Ci0gICAgICAgICAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgbURldmlj
ZUNvbnRleHQtPkVuZChtU3luY1F1ZXJ5KTsKLSAgICAgICAgbURldmljZUNvbnRleHQtPkZsdXNo
KCk7Ci0KLSAgICAgICAgZG8KLSAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gbURldmlj
ZUNvbnRleHQtPkdldERhdGEobVN5bmNRdWVyeSwgTlVMTCwgMCwgRDNEMTFfQVNZTkNfR0VUREFU
QV9ET05PVEZMVVNIKTsKLQotICAgICAgICAgICAgLy8gS2VlcCBwb2xsaW5nLCBidXQgYWxsb3cg
b3RoZXIgdGhyZWFkcyB0byBkbyBzb21ldGhpbmcgdXNlZnVsIGZpcnN0Ci0gICAgICAgICAgICBT
bGVlcCgwKTsKLQotICAgICAgICAgICAgaWYgKHRlc3REZXZpY2VMb3N0KHRydWUpKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICB3aGlsZSAocmVzdWx0ID09IFNfRkFMU0UpOwotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgICBtRGV2aWNlQ29udGV4dC0+Rmx1c2goKTsKLSAgICB9Ci19Ci0KLVN3YXBD
aGFpbiAqUmVuZGVyZXIxMTo6Y3JlYXRlU3dhcENoYWluKEhXTkQgd2luZG93LCBIQU5ETEUgc2hh
cmVIYW5kbGUsIEdMZW51bSBiYWNrQnVmZmVyRm9ybWF0LCBHTGVudW0gZGVwdGhCdWZmZXJGb3Jt
YXQpCi17Ci0gICAgcmV0dXJuIG5ldyByeDo6U3dhcENoYWluMTEodGhpcywgd2luZG93LCBzaGFy
ZUhhbmRsZSwgYmFja0J1ZmZlckZvcm1hdCwgZGVwdGhCdWZmZXJGb3JtYXQpOwotfQotCi12b2lk
IFJlbmRlcmVyMTE6OnNldFNhbXBsZXJTdGF0ZShnbDo6U2FtcGxlclR5cGUgdHlwZSwgaW50IGlu
ZGV4LCBjb25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpCi17Ci0gICAgaWYgKHR5
cGUgPT0gZ2w6OlNBTVBMRVJfUElYRUwpCi0gICAgewotICAgICAgICBpZiAoaW5kZXggPCAwIHx8
IGluZGV4ID49IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKLSAgICAgICAgewotICAgICAg
ICAgICAgRVJSKCJQaXhlbCBzaGFkZXIgc2FtcGxlciBpbmRleCAlaSBpcyBub3QgdmFsaWQuIiwg
aW5kZXgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1G
b3JjZVNldFBpeGVsU2FtcGxlclN0YXRlc1tpbmRleF0gfHwgbWVtY21wKCZzYW1wbGVyU3RhdGUs
ICZtQ3VyUGl4ZWxTYW1wbGVyU3RhdGVzW2luZGV4XSwgc2l6ZW9mKGdsOjpTYW1wbGVyU3RhdGUp
KSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBJRDNEMTFTYW1wbGVyU3RhdGUgKmR4U2Ft
cGxlclN0YXRlID0gbVN0YXRlQ2FjaGUuZ2V0U2FtcGxlclN0YXRlKHNhbXBsZXJTdGF0ZSk7Ci0K
LSAgICAgICAgICAgIGlmICghZHhTYW1wbGVyU3RhdGUpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgRVJSKCJOVUxMIHNhbXBsZXIgc3RhdGUgcmV0dXJuZWQgYnkgUmVuZGVyU3RhdGVD
YWNoZTo6Z2V0U2FtcGxlclN0YXRlLCBzZXR0aW5nIHRoZSBkZWZhdWx0IgotICAgICAgICAgICAg
ICAgICAgICAic2FtcGxlciBzdGF0ZSBmb3IgcGl4ZWwgc2hhZGVycyBhdCBzbG90ICVpLiIsIGlu
ZGV4KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbURldmljZUNvbnRleHQtPlBTU2V0
U2FtcGxlcnMoaW5kZXgsIDEsICZkeFNhbXBsZXJTdGF0ZSk7Ci0KLSAgICAgICAgICAgIG1DdXJQ
aXhlbFNhbXBsZXJTdGF0ZXNbaW5kZXhdID0gc2FtcGxlclN0YXRlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgbUZvcmNlU2V0UGl4ZWxTYW1wbGVyU3RhdGVzW2luZGV4XSA9IGZhbHNlOwotICAgIH0K
LSAgICBlbHNlIGlmICh0eXBlID09IGdsOjpTQU1QTEVSX1ZFUlRFWCkKLSAgICB7Ci0gICAgICAg
IGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gKGludClnZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VV
bml0cygpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIlZlcnRleCBzaGFkZXIgc2FtcGxl
ciBpbmRleCAlaSBpcyBub3QgdmFsaWQuIiwgaW5kZXgpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1Gb3JjZVNldFZlcnRleFNhbXBsZXJTdGF0ZXNbaW5k
ZXhdIHx8IG1lbWNtcCgmc2FtcGxlclN0YXRlLCAmbUN1clZlcnRleFNhbXBsZXJTdGF0ZXNbaW5k
ZXhdLCBzaXplb2YoZ2w6OlNhbXBsZXJTdGF0ZSkpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIElEM0QxMVNhbXBsZXJTdGF0ZSAqZHhTYW1wbGVyU3RhdGUgPSBtU3RhdGVDYWNoZS5nZXRT
YW1wbGVyU3RhdGUoc2FtcGxlclN0YXRlKTsKLQotICAgICAgICAgICAgaWYgKCFkeFNhbXBsZXJT
dGF0ZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBFUlIoIk5VTEwgc2FtcGxlciBz
dGF0ZSByZXR1cm5lZCBieSBSZW5kZXJTdGF0ZUNhY2hlOjpnZXRTYW1wbGVyU3RhdGUsIHNldHRp
bmcgdGhlIGRlZmF1bHQiCi0gICAgICAgICAgICAgICAgICAgICJzYW1wbGVyIHN0YXRlIGZvciB2
ZXJ0ZXggc2hhZGVycyBhdCBzbG90ICVpLiIsIGluZGV4KTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgbURldmljZUNvbnRleHQtPlZTU2V0U2FtcGxlcnMoaW5kZXgsIDEsICZkeFNhbXBs
ZXJTdGF0ZSk7Ci0KLSAgICAgICAgICAgIG1DdXJWZXJ0ZXhTYW1wbGVyU3RhdGVzW2luZGV4XSA9
IHNhbXBsZXJTdGF0ZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1Gb3JjZVNldFZlcnRleFNhbXBs
ZXJTdGF0ZXNbaW5kZXhdID0gZmFsc2U7Ci0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
LX0KLQotdm9pZCBSZW5kZXJlcjExOjpzZXRUZXh0dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBp
bnQgaW5kZXgsIGdsOjpUZXh0dXJlICp0ZXh0dXJlKQotewotICAgIElEM0QxMVNoYWRlclJlc291
cmNlVmlldyAqdGV4dHVyZVNSViA9IE5VTEw7Ci0gICAgdW5zaWduZWQgaW50IHNlcmlhbCA9IDA7
Ci0gICAgYm9vbCBmb3JjZVNldFRleHR1cmUgPSBmYWxzZTsKLQotICAgIGlmICh0ZXh0dXJlKQot
ICAgIHsKLSAgICAgICAgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKnRleFN0b3JhZ2UgPSB0ZXh0
dXJlLT5nZXROYXRpdmVUZXh0dXJlKCk7Ci0gICAgICAgIGlmICh0ZXhTdG9yYWdlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBUZXh0dXJlU3RvcmFnZTExICpzdG9yYWdlMTEgPSBUZXh0dXJlU3Rv
cmFnZTExOjptYWtlVGV4dHVyZVN0b3JhZ2UxMSh0ZXhTdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFu
Y2UoKSk7Ci0gICAgICAgICAgICB0ZXh0dXJlU1JWID0gc3RvcmFnZTExLT5nZXRTUlYoKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIElmIHdlIGdldCBOVUxMIGJhY2sgZnJvbSBnZXRTUlYgaGVy
ZSwgc29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gdGhlIHRleHR1cmUgY2xhc3MgYW5kIHdlJ3JlIHVu
ZXhwZWN0ZWRseQotICAgICAgICAvLyBtaXNzaW5nIHRoZSBzaGFkZXIgcmVzb3VyY2Ugdmlldwot
ICAgICAgICBBU1NFUlQodGV4dHVyZVNSViAhPSBOVUxMKTsKLQotICAgICAgICBzZXJpYWwgPSB0
ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCk7Ci0gICAgICAgIGZvcmNlU2V0VGV4dHVyZSA9IHRl
eHR1cmUtPmhhc0RpcnR5SW1hZ2VzKCk7Ci0gICAgfQotCi0gICAgaWYgKHR5cGUgPT0gZ2w6OlNB
TVBMRVJfUElYRUwpCi0gICAgewotICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGds
OjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJQ
aXhlbCBzaGFkZXIgc2FtcGxlciBpbmRleCAlaSBpcyBub3QgdmFsaWQuIiwgaW5kZXgpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGZvcmNlU2V0VGV4dHVy
ZSB8fCBtQ3VyUGl4ZWxUZXh0dXJlU2VyaWFsc1tpbmRleF0gIT0gc2VyaWFsKQotICAgICAgICB7
Ci0gICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXJSZXNvdXJjZXMoaW5kZXgs
IDEsICZ0ZXh0dXJlU1JWKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1DdXJQaXhlbFRleHR1cmVT
ZXJpYWxzW2luZGV4XSA9IHNlcmlhbDsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBnbDo6
U0FNUExFUl9WRVJURVgpCi0gICAgewotICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49
IChpbnQpZ2V0TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgRVJSKCJWZXJ0ZXggc2hhZGVyIHNhbXBsZXIgaW5kZXggJWkgaXMgbm90IHZhbGlkLiIs
IGluZGV4KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChm
b3JjZVNldFRleHR1cmUgfHwgbUN1clZlcnRleFRleHR1cmVTZXJpYWxzW2luZGV4XSAhPSBzZXJp
YWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5WU1NldFNoYWRlclJl
c291cmNlcyhpbmRleCwgMSwgJnRleHR1cmVTUlYpOwotICAgICAgICB9Ci0KLSAgICAgICAgbUN1
clZlcnRleFRleHR1cmVTZXJpYWxzW2luZGV4XSA9IHNlcmlhbDsKLSAgICB9Ci0gICAgZWxzZSBV
TlJFQUNIQUJMRSgpOwotfQotCi12b2lkIFJlbmRlcmVyMTE6OnNldFJhc3Rlcml6ZXJTdGF0ZShj
b25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZyYXN0ZXJTdGF0ZSkKLXsKLSAgICBpZiAobUZvcmNl
U2V0UmFzdGVyU3RhdGUgfHwgbWVtY21wKCZyYXN0ZXJTdGF0ZSwgJm1DdXJSYXN0ZXJTdGF0ZSwg
c2l6ZW9mKGdsOjpSYXN0ZXJpemVyU3RhdGUpKSAhPSAwKQotICAgIHsKLSAgICAgICAgSUQzRDEx
UmFzdGVyaXplclN0YXRlICpkeFJhc3RlclN0YXRlID0gbVN0YXRlQ2FjaGUuZ2V0UmFzdGVyaXpl
clN0YXRlKHJhc3RlclN0YXRlLCBtU2Npc3NvckVuYWJsZWQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtQ3VyRGVwdGhTaXplKTsKLSAgICAgICAgaWYgKCFkeFJhc3RlclN0YXRlKQotICAgICAgICB7
Ci0gICAgICAgICAgICBFUlIoIk5VTEwgcmFzdGVyaXplciBzdGF0ZSByZXR1cm5lZCBieSBSZW5k
ZXJTdGF0ZUNhY2hlOjpnZXRSYXN0ZXJpemVyU3RhdGUsIHNldHRpbmcgdGhlIGRlZmF1bHQiCi0g
ICAgICAgICAgICAgICAgInJhc3Rlcml6ZXIgc3RhdGUuIik7Ci0gICAgICAgIH0KLQotICAgICAg
ICBtRGV2aWNlQ29udGV4dC0+UlNTZXRTdGF0ZShkeFJhc3RlclN0YXRlKTsKLQotICAgICAgICBt
Q3VyUmFzdGVyU3RhdGUgPSByYXN0ZXJTdGF0ZTsKLSAgICB9Ci0KLSAgICBtRm9yY2VTZXRSYXN0
ZXJTdGF0ZSA9IGZhbHNlOwotfQotCi12b2lkIFJlbmRlcmVyMTE6OnNldEJsZW5kU3RhdGUoY29u
c3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xvciAmYmxlbmRDb2xv
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlTWFz
aykKLXsKLSAgICBpZiAobUZvcmNlU2V0QmxlbmRTdGF0ZSB8fAotICAgICAgICBtZW1jbXAoJmJs
ZW5kU3RhdGUsICZtQ3VyQmxlbmRTdGF0ZSwgc2l6ZW9mKGdsOjpCbGVuZFN0YXRlKSkgIT0gMCB8
fAotICAgICAgICBtZW1jbXAoJmJsZW5kQ29sb3IsICZtQ3VyQmxlbmRDb2xvciwgc2l6ZW9mKGds
OjpDb2xvcikpICE9IDAgfHwKLSAgICAgICAgc2FtcGxlTWFzayAhPSBtQ3VyU2FtcGxlTWFzaykK
LSAgICB7Ci0gICAgICAgIElEM0QxMUJsZW5kU3RhdGUgKmR4QmxlbmRTdGF0ZSA9IG1TdGF0ZUNh
Y2hlLmdldEJsZW5kU3RhdGUoYmxlbmRTdGF0ZSk7Ci0gICAgICAgIGlmICghZHhCbGVuZFN0YXRl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIk5VTEwgYmxlbmQgc3RhdGUgcmV0dXJuZWQg
YnkgUmVuZGVyU3RhdGVDYWNoZTo6Z2V0QmxlbmRTdGF0ZSwgc2V0dGluZyB0aGUgZGVmYXVsdCAi
Ci0gICAgICAgICAgICAgICAgImJsZW5kIHN0YXRlLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAg
ZmxvYXQgYmxlbmRDb2xvcnNbNF0gPSB7MC4wZn07Ci0gICAgICAgIGlmIChibGVuZFN0YXRlLnNv
dXJjZUJsZW5kUkdCICE9IEdMX0NPTlNUQU5UX0FMUEhBICYmIGJsZW5kU3RhdGUuc291cmNlQmxl
bmRSR0IgIT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBICYmCi0gICAgICAgICAgICBibGVu
ZFN0YXRlLmRlc3RCbGVuZFJHQiAhPSBHTF9DT05TVEFOVF9BTFBIQSAmJiBibGVuZFN0YXRlLmRl
c3RCbGVuZFJHQiAhPSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGJsZW5kQ29sb3JzWzBdID0gYmxlbmRDb2xvci5yZWQ7Ci0gICAgICAgICAgICBi
bGVuZENvbG9yc1sxXSA9IGJsZW5kQ29sb3IuZ3JlZW47Ci0gICAgICAgICAgICBibGVuZENvbG9y
c1syXSA9IGJsZW5kQ29sb3IuYmx1ZTsKLSAgICAgICAgICAgIGJsZW5kQ29sb3JzWzNdID0gYmxl
bmRDb2xvci5hbHBoYTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGJsZW5kQ29sb3JzWzBdID0gYmxlbmRDb2xvci5hbHBoYTsKLSAgICAgICAgICAgIGJs
ZW5kQ29sb3JzWzFdID0gYmxlbmRDb2xvci5hbHBoYTsKLSAgICAgICAgICAgIGJsZW5kQ29sb3Jz
WzJdID0gYmxlbmRDb2xvci5hbHBoYTsKLSAgICAgICAgICAgIGJsZW5kQ29sb3JzWzNdID0gYmxl
bmRDb2xvci5hbHBoYTsKLSAgICAgICAgfQotCi0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5PTVNl
dEJsZW5kU3RhdGUoZHhCbGVuZFN0YXRlLCBibGVuZENvbG9ycywgc2FtcGxlTWFzayk7Ci0KLSAg
ICAgICAgbUN1ckJsZW5kU3RhdGUgPSBibGVuZFN0YXRlOwotICAgICAgICBtQ3VyQmxlbmRDb2xv
ciA9IGJsZW5kQ29sb3I7Ci0gICAgICAgIG1DdXJTYW1wbGVNYXNrID0gc2FtcGxlTWFzazsKLSAg
ICB9Ci0KLSAgICBtRm9yY2VTZXRCbGVuZFN0YXRlID0gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVy
ZXIxMTo6c2V0RGVwdGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZk
ZXB0aFN0ZW5jaWxTdGF0ZSwgaW50IHN0ZW5jaWxSZWYsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBzdGVuY2lsQmFja1JlZiwgYm9vbCBmcm9udEZhY2VDQ1cpCi17
Ci0gICAgaWYgKG1Gb3JjZVNldERlcHRoU3RlbmNpbFN0YXRlIHx8Ci0gICAgICAgIG1lbWNtcCgm
ZGVwdGhTdGVuY2lsU3RhdGUsICZtQ3VyRGVwdGhTdGVuY2lsU3RhdGUsIHNpemVvZihnbDo6RGVw
dGhTdGVuY2lsU3RhdGUpKSAhPSAwIHx8Ci0gICAgICAgIHN0ZW5jaWxSZWYgIT0gbUN1clN0ZW5j
aWxSZWYgfHwgc3RlbmNpbEJhY2tSZWYgIT0gbUN1clN0ZW5jaWxCYWNrUmVmKQotICAgIHsKLSAg
ICAgICAgaWYgKGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sgIT0gZGVwdGhTdGVu
Y2lsU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgfHwKLSAgICAgICAgICAgIHN0ZW5jaWxSZWYg
IT0gc3RlbmNpbEJhY2tSZWYgfHwKLSAgICAgICAgICAgIGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5j
aWxNYXNrICE9IGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxCYWNrTWFzaykKLSAgICAgICAgewot
ICAgICAgICAgICAgRVJSKCJTZXBhcmF0ZSBmcm9udC9iYWNrIHN0ZW5jaWwgd3JpdGVtYXNrcywg
cmVmZXJlbmNlIHZhbHVlcywgb3Igc3RlbmNpbCBtYXNrIHZhbHVlcyBhcmUgIgotICAgICAgICAg
ICAgICAgICJpbnZhbGlkIHVuZGVyIFdlYkdMLiIpOwotICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLQotICAgICAgICBJRDNEMTFE
ZXB0aFN0ZW5jaWxTdGF0ZSAqZHhEZXB0aFN0ZW5jaWxTdGF0ZSA9IG1TdGF0ZUNhY2hlLmdldERl
cHRoU3RlbmNpbFN0YXRlKGRlcHRoU3RlbmNpbFN0YXRlKTsKLSAgICAgICAgaWYgKCFkeERlcHRo
U3RlbmNpbFN0YXRlKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIk5VTEwgZGVwdGggc3Rl
bmNpbCBzdGF0ZSByZXR1cm5lZCBieSBSZW5kZXJTdGF0ZUNhY2hlOjpnZXREZXB0aFN0ZW5jaWxT
dGF0ZSwgIgotICAgICAgICAgICAgICAgICJzZXR0aW5nIHRoZSBkZWZhdWx0IGRlcHRoIHN0ZW5j
aWwgc3RhdGUuIik7Ci0gICAgICAgIH0KLQotICAgICAgICBtRGV2aWNlQ29udGV4dC0+T01TZXRE
ZXB0aFN0ZW5jaWxTdGF0ZShkeERlcHRoU3RlbmNpbFN0YXRlLCBzdGF0aWNfY2FzdDxVSU5UPihz
dGVuY2lsUmVmKSk7Ci0KLSAgICAgICAgbUN1ckRlcHRoU3RlbmNpbFN0YXRlID0gZGVwdGhTdGVu
Y2lsU3RhdGU7Ci0gICAgICAgIG1DdXJTdGVuY2lsUmVmID0gc3RlbmNpbFJlZjsKLSAgICAgICAg
bUN1clN0ZW5jaWxCYWNrUmVmID0gc3RlbmNpbEJhY2tSZWY7Ci0gICAgfQotCi0gICAgbUZvcmNl
U2V0RGVwdGhTdGVuY2lsU3RhdGUgPSBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJlcjExOjpzZXRT
Y2lzc29yUmVjdGFuZ2xlKGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNjaXNzb3IsIGJvb2wgZW5hYmxl
ZCkKLXsKLSAgICBpZiAobUZvcmNlU2V0U2Npc3NvciB8fCBtZW1jbXAoJnNjaXNzb3IsICZtQ3Vy
U2Npc3Nvciwgc2l6ZW9mKGdsOjpSZWN0YW5nbGUpKSAhPSAwIHx8Ci0gICAgICAgIGVuYWJsZWQg
IT0gbVNjaXNzb3JFbmFibGVkKQotICAgIHsKLSAgICAgICAgaWYgKGVuYWJsZWQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEQzRDExX1JFQ1QgcmVjdDsKLSAgICAgICAgICAgIHJlY3QubGVmdCA9
IHN0ZDo6bWF4KDAsIHNjaXNzb3IueCk7Ci0gICAgICAgICAgICByZWN0LnRvcCA9IHN0ZDo6bWF4
KDAsIHNjaXNzb3IueSk7Ci0gICAgICAgICAgICByZWN0LnJpZ2h0ID0gc2Npc3Nvci54ICsgc3Rk
OjptYXgoMCwgc2Npc3Nvci53aWR0aCk7Ci0gICAgICAgICAgICByZWN0LmJvdHRvbSA9IHNjaXNz
b3IueSArIHN0ZDo6bWF4KDAsIHNjaXNzb3IuaGVpZ2h0KTsKLQotICAgICAgICAgICAgbURldmlj
ZUNvbnRleHQtPlJTU2V0U2Npc3NvclJlY3RzKDEsICZyZWN0KTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChlbmFibGVkICE9IG1TY2lzc29yRW5hYmxlZCkKLSAgICAgICAgewotICAgICAgICAg
ICAgbUZvcmNlU2V0UmFzdGVyU3RhdGUgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgbUN1
clNjaXNzb3IgPSBzY2lzc29yOwotICAgICAgICBtU2Npc3NvckVuYWJsZWQgPSBlbmFibGVkOwot
ICAgIH0KLQotICAgIG1Gb3JjZVNldFNjaXNzb3IgPSBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJl
cjExOjpzZXRWaWV3cG9ydChjb25zdCBnbDo6UmVjdGFuZ2xlICZ2aWV3cG9ydCwgZmxvYXQgek5l
YXIsIGZsb2F0IHpGYXIsIEdMZW51bSBkcmF3TW9kZSwgR0xlbnVtIGZyb250RmFjZSwgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaWdub3JlVmlld3BvcnQpCi17Ci0gICAgZ2w6
OlJlY3RhbmdsZSBhY3R1YWxWaWV3cG9ydCA9IHZpZXdwb3J0OwotICAgIGZsb2F0IGFjdHVhbFpO
ZWFyID0gZ2w6OmNsYW1wMDEoek5lYXIpOwotICAgIGZsb2F0IGFjdHVhbFpGYXIgPSBnbDo6Y2xh
bXAwMSh6RmFyKTsKLSAgICBpZiAoaWdub3JlVmlld3BvcnQpCi0gICAgewotICAgICAgICBhY3R1
YWxWaWV3cG9ydC54ID0gMDsKLSAgICAgICAgYWN0dWFsVmlld3BvcnQueSA9IDA7Ci0gICAgICAg
IGFjdHVhbFZpZXdwb3J0LndpZHRoID0gbVJlbmRlclRhcmdldERlc2Mud2lkdGg7Ci0gICAgICAg
IGFjdHVhbFZpZXdwb3J0LmhlaWdodCA9IG1SZW5kZXJUYXJnZXREZXNjLmhlaWdodDsKLSAgICAg
ICAgYWN0dWFsWk5lYXIgPSAwLjBmOwotICAgICAgICBhY3R1YWxaRmFyID0gMS4wZjsKLSAgICB9
Ci0KLSAgICAvLyBHZXQgRDNEIHZpZXdwb3J0IGJvdW5kcywgd2hpY2ggZGVwZW5kcyBvbiB0aGUg
ZmVhdHVyZSBsZXZlbAotICAgIGNvbnN0IFJhbmdlJiB2aWV3cG9ydEJvdW5kcyA9IGdldFZpZXdw
b3J0Qm91bmRzKCk7Ci0KLSAgICAvLyBDbGFtcCB3aWR0aCBhbmQgaGVpZ2h0IGZpcnN0IHRvIHRo
ZSBnbCBtYXhpbXVtLCB0aGVuIGNsYW1wIGZ1cnRoZXIgaWYgd2UgZXh0ZW5kIHBhc3QgdGhlIEQz
RCBtYXhpbXVtIGJvdW5kcwotICAgIEQzRDExX1ZJRVdQT1JUIGR4Vmlld3BvcnQ7Ci0gICAgZHhW
aWV3cG9ydC5Ub3BMZWZ0WCA9IGdsOjpjbGFtcChhY3R1YWxWaWV3cG9ydC54LCB2aWV3cG9ydEJv
dW5kcy5zdGFydCwgdmlld3BvcnRCb3VuZHMuZW5kKTsKLSAgICBkeFZpZXdwb3J0LlRvcExlZnRZ
ID0gZ2w6OmNsYW1wKGFjdHVhbFZpZXdwb3J0LnksIHZpZXdwb3J0Qm91bmRzLnN0YXJ0LCB2aWV3
cG9ydEJvdW5kcy5lbmQpOwotICAgIGR4Vmlld3BvcnQuV2lkdGggPSBnbDo6Y2xhbXAoYWN0dWFs
Vmlld3BvcnQud2lkdGgsIDAsIGdldE1heFZpZXdwb3J0RGltZW5zaW9uKCkpOwotICAgIGR4Vmll
d3BvcnQuSGVpZ2h0ID0gZ2w6OmNsYW1wKGFjdHVhbFZpZXdwb3J0LmhlaWdodCwgMCwgZ2V0TWF4
Vmlld3BvcnREaW1lbnNpb24oKSk7Ci0gICAgZHhWaWV3cG9ydC5XaWR0aCA9IHN0ZDo6bWluKChp
bnQpZHhWaWV3cG9ydC5XaWR0aCwgdmlld3BvcnRCb3VuZHMuZW5kIC0gc3RhdGljX2Nhc3Q8aW50
PihkeFZpZXdwb3J0LlRvcExlZnRYKSk7Ci0gICAgZHhWaWV3cG9ydC5IZWlnaHQgPSBzdGQ6Om1p
bigoaW50KWR4Vmlld3BvcnQuSGVpZ2h0LCB2aWV3cG9ydEJvdW5kcy5lbmQgLSBzdGF0aWNfY2Fz
dDxpbnQ+KGR4Vmlld3BvcnQuVG9wTGVmdFkpKTsKLSAgICBkeFZpZXdwb3J0Lk1pbkRlcHRoID0g
YWN0dWFsWk5lYXI7Ci0gICAgZHhWaWV3cG9ydC5NYXhEZXB0aCA9IGFjdHVhbFpGYXI7Ci0KLSAg
ICBpZiAoZHhWaWV3cG9ydC5XaWR0aCA8PSAwIHx8IGR4Vmlld3BvcnQuSGVpZ2h0IDw9IDApCi0g
ICAgewotICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gTm90aGluZyB0byByZW5kZXIKLSAgICB9
Ci0KLSAgICBib29sIHZpZXdwb3J0Q2hhbmdlZCA9IG1Gb3JjZVNldFZpZXdwb3J0IHx8IG1lbWNt
cCgmYWN0dWFsVmlld3BvcnQsICZtQ3VyVmlld3BvcnQsIHNpemVvZihnbDo6UmVjdGFuZ2xlKSkg
IT0gMCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsWk5lYXIgIT0gbUN1ck5l
YXIgfHwgYWN0dWFsWkZhciAhPSBtQ3VyRmFyOwotCi0gICAgaWYgKHZpZXdwb3J0Q2hhbmdlZCkK
LSAgICB7Ci0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5SU1NldFZpZXdwb3J0cygxLCAmZHhWaWV3
cG9ydCk7Ci0KLSAgICAgICAgbUN1clZpZXdwb3J0ID0gYWN0dWFsVmlld3BvcnQ7Ci0gICAgICAg
IG1DdXJOZWFyID0gYWN0dWFsWk5lYXI7Ci0gICAgICAgIG1DdXJGYXIgPSBhY3R1YWxaRmFyOwot
Ci0gICAgICAgIG1QaXhlbENvbnN0YW50cy52aWV3Q29vcmRzWzBdID0gYWN0dWFsVmlld3BvcnQu
d2lkdGggICogMC41ZjsKLSAgICAgICAgbVBpeGVsQ29uc3RhbnRzLnZpZXdDb29yZHNbMV0gPSBh
Y3R1YWxWaWV3cG9ydC5oZWlnaHQgKiAwLjVmOwotICAgICAgICBtUGl4ZWxDb25zdGFudHMudmll
d0Nvb3Jkc1syXSA9IGFjdHVhbFZpZXdwb3J0LnggKyAoYWN0dWFsVmlld3BvcnQud2lkdGggICog
MC41Zik7Ci0gICAgICAgIG1QaXhlbENvbnN0YW50cy52aWV3Q29vcmRzWzNdID0gYWN0dWFsVmll
d3BvcnQueSArIChhY3R1YWxWaWV3cG9ydC5oZWlnaHQgKiAwLjVmKTsKLQotICAgICAgICBtUGl4
ZWxDb25zdGFudHMuZGVwdGhGcm9udFswXSA9IChhY3R1YWxaRmFyIC0gYWN0dWFsWk5lYXIpICog
MC41ZjsKLSAgICAgICAgbVBpeGVsQ29uc3RhbnRzLmRlcHRoRnJvbnRbMV0gPSAoYWN0dWFsWk5l
YXIgKyBhY3R1YWxaRmFyKSAqIDAuNWY7Ci0KLSAgICAgICAgbVZlcnRleENvbnN0YW50cy5kZXB0
aFJhbmdlWzBdID0gYWN0dWFsWk5lYXI7Ci0gICAgICAgIG1WZXJ0ZXhDb25zdGFudHMuZGVwdGhS
YW5nZVsxXSA9IGFjdHVhbFpGYXI7Ci0gICAgICAgIG1WZXJ0ZXhDb25zdGFudHMuZGVwdGhSYW5n
ZVsyXSA9IGFjdHVhbFpGYXIgLSBhY3R1YWxaTmVhcjsKLQotICAgICAgICBtUGl4ZWxDb25zdGFu
dHMuZGVwdGhSYW5nZVswXSA9IGFjdHVhbFpOZWFyOwotICAgICAgICBtUGl4ZWxDb25zdGFudHMu
ZGVwdGhSYW5nZVsxXSA9IGFjdHVhbFpGYXI7Ci0gICAgICAgIG1QaXhlbENvbnN0YW50cy5kZXB0
aFJhbmdlWzJdID0gYWN0dWFsWkZhciAtIGFjdHVhbFpOZWFyOwotICAgIH0KLQotICAgIG1Gb3Jj
ZVNldFZpZXdwb3J0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUmVuZGVy
ZXIxMTo6YXBwbHlQcmltaXRpdmVUeXBlKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50KQotewot
ICAgIEQzRDExX1BSSU1JVElWRV9UT1BPTE9HWSBwcmltaXRpdmVUb3BvbG9neSA9IEQzRF9QUklN
SVRJVkVfVE9QT0xPR1lfVU5ERUZJTkVEOwotCi0gICAgR0xzaXplaSBtaW5Db3VudCA9IDA7Ci0K
LSAgICBzd2l0Y2ggKG1vZGUpCi0gICAgewotICAgICAgY2FzZSBHTF9QT0lOVFM6ICAgICAgICAg
cHJpbWl0aXZlVG9wb2xvZ3kgPSBEM0QxMV9QUklNSVRJVkVfVE9QT0xPR1lfUE9JTlRMSVNUOyAg
IG1pbkNvdW50ID0gMTsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xJTkVTOiAgICAgICAgICBwcmlt
aXRpdmVUb3BvbG9neSA9IEQzRF9QUklNSVRJVkVfVE9QT0xPR1lfTElORUxJU1Q7ICAgICAgbWlu
Q291bnQgPSAyOyBicmVhazsKLSAgICAgIGNhc2UgR0xfTElORV9MT09QOiAgICAgIHByaW1pdGl2
ZVRvcG9sb2d5ID0gRDNEX1BSSU1JVElWRV9UT1BPTE9HWV9MSU5FU1RSSVA7ICAgICBtaW5Db3Vu
dCA9IDI7IGJyZWFrOwotICAgICAgY2FzZSBHTF9MSU5FX1NUUklQOiAgICAgcHJpbWl0aXZlVG9w
b2xvZ3kgPSBEM0RfUFJJTUlUSVZFX1RPUE9MT0dZX0xJTkVTVFJJUDsgICAgIG1pbkNvdW50ID0g
MjsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1RSSUFOR0xFUzogICAgICBwcmltaXRpdmVUb3BvbG9n
eSA9IEQzRF9QUklNSVRJVkVfVE9QT0xPR1lfVFJJQU5HTEVMSVNUOyAgbWluQ291bnQgPSAzOyBi
cmVhazsKLSAgICAgIGNhc2UgR0xfVFJJQU5HTEVfU1RSSVA6IHByaW1pdGl2ZVRvcG9sb2d5ID0g
RDNEX1BSSU1JVElWRV9UT1BPTE9HWV9UUklBTkdMRVNUUklQOyBtaW5Db3VudCA9IDM7IGJyZWFr
OwotICAgICAgICAgIC8vIGVtdWxhdGUgZmFucyB2aWEgcmV3cml0aW5nIGluZGV4IGJ1ZmZlcgot
ICAgICAgY2FzZSBHTF9UUklBTkdMRV9GQU46ICAgcHJpbWl0aXZlVG9wb2xvZ3kgPSBEM0RfUFJJ
TUlUSVZFX1RPUE9MT0dZX1RSSUFOR0xFTElTVDsgIG1pbkNvdW50ID0gMzsgYnJlYWs7Ci0gICAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgZmFs
c2UpOwotICAgIH0KLQotICAgIGlmIChwcmltaXRpdmVUb3BvbG9neSAhPSBtQ3VycmVudFByaW1p
dGl2ZVRvcG9sb2d5KQotICAgIHsKLSAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0UHJpbWl0
aXZlVG9wb2xvZ3kocHJpbWl0aXZlVG9wb2xvZ3kpOwotICAgICAgICBtQ3VycmVudFByaW1pdGl2
ZVRvcG9sb2d5ID0gcHJpbWl0aXZlVG9wb2xvZ3k7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvdW50
ID49IG1pbkNvdW50OwotfQotCi1ib29sIFJlbmRlcmVyMTE6OmFwcGx5UmVuZGVyVGFyZ2V0KGds
OjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIpCi17Ci0gICAgLy8gR2V0IHRoZSBjb2xvciByZW5k
ZXIgYnVmZmVyIGFuZCBzZXJpYWwKLSAgICAvLyBBbHNvIGV4dHJhY3QgdGhlIHJlbmRlciB0YXJn
ZXQgZGltZW5zaW9ucyBhbmQgdmlldwotICAgIHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRXaWR0
aCA9IDA7Ci0gICAgdW5zaWduZWQgaW50IHJlbmRlclRhcmdldEhlaWdodCA9IDA7Ci0gICAgR0xl
bnVtIHJlbmRlclRhcmdldEZvcm1hdCA9IDA7Ci0gICAgdW5zaWduZWQgaW50IHJlbmRlclRhcmdl
dFNlcmlhbHNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlNdID0gezB9OwotICAg
IElEM0QxMVJlbmRlclRhcmdldFZpZXcqIGZyYW1lYnVmZmVyUlRWc1tnbDo6SU1QTEVNRU5UQVRJ
T05fTUFYX0RSQVdfQlVGRkVSU10gPSB7TlVMTH07Ci0gICAgYm9vbCBtaXNzaW5nQ29sb3JSZW5k
ZXJUYXJnZXQgPSB0cnVlOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50
ID0gMDsgY29sb3JBdHRhY2htZW50IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZF
UlM7IGNvbG9yQXR0YWNobWVudCsrKQotICAgIHsKLSAgICAgICAgY29uc3QgR0xlbnVtIGRyYXdC
dWZmZXJTdGF0ZSA9IGZyYW1lYnVmZmVyLT5nZXREcmF3QnVmZmVyU3RhdGUoY29sb3JBdHRhY2ht
ZW50KTsKLQotICAgICAgICBpZiAoZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlwZShjb2xv
ckF0dGFjaG1lbnQpICE9IEdMX05PTkUgJiYgZHJhd0J1ZmZlclN0YXRlICE9IEdMX05PTkUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIC8vIHRoZSBkcmF3IGJ1ZmZlciBtdXN0IGJlIGVpdGhlciAi
bm9uZSIsICJiYWNrIiBmb3IgdGhlIGRlZmF1bHQgYnVmZmVyIG9yIHRoZSBzYW1lIGluZGV4IGFz
IHRoaXMgY29sb3IgKGluIG9yZGVyKQotICAgICAgICAgICAgQVNTRVJUKGRyYXdCdWZmZXJTdGF0
ZSA9PSBHTF9CQUNLIHx8IGRyYXdCdWZmZXJTdGF0ZSA9PSAoR0xfQ09MT1JfQVRUQUNITUVOVDBf
RVhUICsgY29sb3JBdHRhY2htZW50KSk7Ci0KLSAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIg
KmNvbG9yYnVmZmVyID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKGNvbG9yQXR0YWNobWVu
dCk7Ci0KLSAgICAgICAgICAgIGlmICghY29sb3JidWZmZXIpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwu
Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAvLyBjaGVjayBmb3IgemVyby1zaXplZCBkZWZhdWx0IGZyYW1lYnVmZmVyLCB3aGlj
aCBpcyBhIHNwZWNpYWwgY2FzZS4KLSAgICAgICAgICAgIC8vIGluIHRoaXMgY2FzZSB3ZSBkbyBu
b3Qgd2lzaCB0byBtb2RpZnkgYW55IHN0YXRlIGFuZCBqdXN0IHNpbGVudGx5IHJldHVybiBmYWxz
ZS4KLSAgICAgICAgICAgIC8vIHRoaXMgd2lsbCBub3QgcmVwb3J0IGFueSBnbCBlcnJvciBidXQg
d2lsbCBjYXVzZSB0aGUgY2FsbGluZyBtZXRob2QgdG8gcmV0dXJuLgotICAgICAgICAgICAgaWYg
KGNvbG9yYnVmZmVyLT5nZXRXaWR0aCgpID09IDAgfHwgY29sb3JidWZmZXItPmdldEhlaWdodCgp
ID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICByZW5kZXJUYXJnZXRTZXJpYWxzW2NvbG9yQXR0YWNo
bWVudF0gPSBjb2xvcmJ1ZmZlci0+Z2V0U2VyaWFsKCk7Ci0KLSAgICAgICAgICAgIC8vIEV4dHJh
Y3QgdGhlIHJlbmRlciB0YXJnZXQgZGltZW5zaW9ucyBhbmQgdmlldwotICAgICAgICAgICAgUmVu
ZGVyVGFyZ2V0MTEgKnJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFy
Z2V0MTEoY29sb3JidWZmZXItPmdldFJlbmRlclRhcmdldCgpKTsKLSAgICAgICAgICAgIGlmICgh
cmVuZGVyVGFyZ2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigicmVuZGVy
IHRhcmdldCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZnJhbWVidWZmZXJSVFZz
W2NvbG9yQXR0YWNobWVudF0gPSByZW5kZXJUYXJnZXQtPmdldFJlbmRlclRhcmdldFZpZXcoKTsK
LSAgICAgICAgICAgIGlmICghZnJhbWVidWZmZXJSVFZzW2NvbG9yQXR0YWNobWVudF0pCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHZpZXcgcG9pbnRl
ciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtaXNzaW5nQ29sb3JSZW5kZXJUYXJnZXQp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVuZGVyVGFyZ2V0V2lkdGggPSBjb2xv
cmJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICAgICAgICAgICAgICByZW5kZXJUYXJnZXRIZWlnaHQg
PSBjb2xvcmJ1ZmZlci0+Z2V0SGVpZ2h0KCk7Ci0gICAgICAgICAgICAgICAgcmVuZGVyVGFyZ2V0
Rm9ybWF0ID0gY29sb3JidWZmZXItPmdldEFjdHVhbEZvcm1hdCgpOwotICAgICAgICAgICAgICAg
IG1pc3NpbmdDb2xvclJlbmRlclRhcmdldCA9IGZhbHNlOwotICAgICAgICAgICAgfQotCi0jaWZk
ZWYgX0RFQlVHCi0gICAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBEZWJ1ZyBTRVRTSEFERVJS
RVNPVVJDRVNfSEFaQVJEIEQzRDExIHdhcm5pbmdzCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCB2ZXJ0ZXhTZXJpYWxJbmRleCA9IDA7IHZlcnRleFNlcmlhbEluZGV4IDwgZ2w6OklNUExF
TUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgdmVydGV4U2VyaWFsSW5k
ZXgrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29sb3JidWZmZXItPmdl
dFRleHR1cmVTZXJpYWwoKSAhPSAwICYmIG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1t2ZXJ0ZXhT
ZXJpYWxJbmRleF0gPT0gY29sb3JidWZmZXItPmdldFRleHR1cmVTZXJpYWwoKSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHNldFRleHR1cmUoZ2w6OlNBTVBMRVJfVkVS
VEVYLCB2ZXJ0ZXhTZXJpYWxJbmRleCwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBwaXhlbFNlcmlhbEluZGV4
ID0gMDsgcGl4ZWxTZXJpYWxJbmRleCA8IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgcGl4
ZWxTZXJpYWxJbmRleCsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjb2xv
cmJ1ZmZlci0+Z2V0VGV4dHVyZVNlcmlhbCgpICE9IDAgJiYgbUN1clBpeGVsVGV4dHVyZVNlcmlh
bHNbcGl4ZWxTZXJpYWxJbmRleF0gPT0gY29sb3JidWZmZXItPmdldFRleHR1cmVTZXJpYWwoKSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHNldFRleHR1cmUoZ2w6OlNB
TVBMRVJfUElYRUwsIHBpeGVsU2VyaWFsSW5kZXgsIE5VTEwpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gR2V0IHRo
ZSBkZXB0aCBzdGVuY2lsIHJlbmRlciBidWZmZXIgYW5kIHNlcmlhbHMKLSAgICBnbDo6UmVuZGVy
YnVmZmVyICpkZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIHVuc2lnbmVkIGludCBkZXB0aGJ1ZmZl
clNlcmlhbCA9IDA7Ci0gICAgdW5zaWduZWQgaW50IHN0ZW5jaWxidWZmZXJTZXJpYWwgPSAwOwot
ICAgIGlmIChmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKLSAg
ICB7Ci0gICAgICAgIGRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigp
OwotICAgICAgICBpZiAoIWRlcHRoU3RlbmNpbCkKLSAgICAgICAgewotICAgICAgICAgICAgRVJS
KCJEZXB0aCBzdGVuY2lsIHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7Ci0gICAgICAgICAg
ICBTYWZlUmVsZWFzZShmcmFtZWJ1ZmZlclJUVnMpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0KLSAgICAgICAgZGVwdGhidWZmZXJTZXJpYWwgPSBkZXB0aFN0ZW5jaWwt
PmdldFNlcmlhbCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNp
bGJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQotICAgIHsKLSAgICAgICAgZGVwdGhTdGVuY2lsID0g
ZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKLSAgICAgICAgaWYgKCFkZXB0aFN0ZW5j
aWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVu
ZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAgICAgU2FmZVJlbGVhc2UoZnJhbWVidWZmZXJS
VFZzKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0
ZW5jaWxidWZmZXJTZXJpYWwgPSBkZXB0aFN0ZW5jaWwtPmdldFNlcmlhbCgpOwotICAgIH0KLQot
ICAgIC8vIEV4dHJhY3QgdGhlIGRlcHRoIHN0ZW5jaWwgc2l6ZXMgYW5kIHZpZXcKLSAgICB1bnNp
Z25lZCBpbnQgZGVwdGhTaXplID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbFNpemUgPSAw
OwotICAgIElEM0QxMURlcHRoU3RlbmNpbFZpZXcqIGZyYW1lYnVmZmVyRFNWID0gTlVMTDsKLSAg
ICBpZiAoZGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgUmVuZGVyVGFyZ2V0MTEgKmRlcHRo
U3RlbmNpbFJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEo
ZGVwdGhTdGVuY2lsLT5nZXREZXB0aFN0ZW5jaWwoKSk7Ci0gICAgICAgIGlmICghZGVwdGhTdGVu
Y2lsUmVuZGVyVGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoInJlbmRlciB0YXJn
ZXQgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgIFNhZmVSZWxlYXNl
KGZyYW1lYnVmZmVyUlRWcyk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LQotICAgICAgICBmcmFtZWJ1ZmZlckRTViA9IGRlcHRoU3RlbmNpbFJlbmRlclRhcmdldC0+Z2V0
RGVwdGhTdGVuY2lsVmlldygpOwotICAgICAgICBpZiAoIWZyYW1lYnVmZmVyRFNWKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBFUlIoImRlcHRoIHN0ZW5jaWwgdmlldyBwb2ludGVyIHVuZXhwZWN0
ZWRseSBudWxsLiIpOwotICAgICAgICAgICAgU2FmZVJlbGVhc2UoZnJhbWVidWZmZXJSVFZzKTsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRo
ZXJlIGlzIG5vIHJlbmRlciBidWZmZXIsIHRoZSB3aWR0aCwgaGVpZ2h0IGFuZCBmb3JtYXQgdmFs
dWVzIGNvbWUgZnJvbQotICAgICAgICAvLyB0aGUgZGVwdGggc3RlbmNpbAotICAgICAgICBpZiAo
bWlzc2luZ0NvbG9yUmVuZGVyVGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZW5kZXJU
YXJnZXRXaWR0aCA9IGRlcHRoU3RlbmNpbC0+Z2V0V2lkdGgoKTsKLSAgICAgICAgICAgIHJlbmRl
clRhcmdldEhlaWdodCA9IGRlcHRoU3RlbmNpbC0+Z2V0SGVpZ2h0KCk7Ci0gICAgICAgICAgICBy
ZW5kZXJUYXJnZXRGb3JtYXQgPSBkZXB0aFN0ZW5jaWwtPmdldEFjdHVhbEZvcm1hdCgpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZGVwdGhTaXplID0gZGVwdGhTdGVuY2lsLT5nZXREZXB0aFNpemUo
KTsKLSAgICAgICAgc3RlbmNpbFNpemUgPSBkZXB0aFN0ZW5jaWwtPmdldFN0ZW5jaWxTaXplKCk7
Ci0gICAgfQotCi0gICAgLy8gQXBwbHkgdGhlIHJlbmRlciB0YXJnZXQgYW5kIGRlcHRoIHN0ZW5j
aWwKLSAgICBpZiAoIW1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgfHwgIW1EZXB0aFN0ZW5j
aWxJbml0aWFsaXplZCB8fAotICAgICAgICBtZW1jbXAocmVuZGVyVGFyZ2V0U2VyaWFscywgbUFw
cGxpZWRSZW5kZXJUYXJnZXRTZXJpYWxzLCBzaXplb2YocmVuZGVyVGFyZ2V0U2VyaWFscykpICE9
IDAgfHwKLSAgICAgICAgZGVwdGhidWZmZXJTZXJpYWwgIT0gbUFwcGxpZWREZXB0aGJ1ZmZlclNl
cmlhbCB8fAotICAgICAgICBzdGVuY2lsYnVmZmVyU2VyaWFsICE9IG1BcHBsaWVkU3RlbmNpbGJ1
ZmZlclNlcmlhbCkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldFJlbmRlclRh
cmdldHMoZ2V0TWF4UmVuZGVyVGFyZ2V0cygpLCBmcmFtZWJ1ZmZlclJUVnMsIGZyYW1lYnVmZmVy
RFNWKTsKLQotICAgICAgICBtUmVuZGVyVGFyZ2V0RGVzYy53aWR0aCA9IHJlbmRlclRhcmdldFdp
ZHRoOwotICAgICAgICBtUmVuZGVyVGFyZ2V0RGVzYy5oZWlnaHQgPSByZW5kZXJUYXJnZXRIZWln
aHQ7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXREZXNjLmZvcm1hdCA9IHJlbmRlclRhcmdldEZvcm1h
dDsKLSAgICAgICAgbUZvcmNlU2V0Vmlld3BvcnQgPSB0cnVlOwotICAgICAgICBtRm9yY2VTZXRT
Y2lzc29yID0gdHJ1ZTsKLQotICAgICAgICBpZiAoIW1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCB8
fCBkZXB0aFNpemUgIT0gbUN1ckRlcHRoU2l6ZSkKLSAgICAgICAgewotICAgICAgICAgICAgbUN1
ckRlcHRoU2l6ZSA9IGRlcHRoU2l6ZTsKLSAgICAgICAgICAgIG1Gb3JjZVNldFJhc3RlclN0YXRl
ID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1DdXJTdGVuY2lsU2l6ZSA9IHN0ZW5jaWxT
aXplOwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaW50IHJ0SW5kZXggPSAwOyBydEluZGV4IDwg
Z2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IHJ0SW5kZXgrKykKLSAgICAgICAg
ewotICAgICAgICAgICAgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWxzW3J0SW5kZXhdID0gcmVu
ZGVyVGFyZ2V0U2VyaWFsc1tydEluZGV4XTsKLSAgICAgICAgfQotICAgICAgICBtQXBwbGllZERl
cHRoYnVmZmVyU2VyaWFsID0gZGVwdGhidWZmZXJTZXJpYWw7Ci0gICAgICAgIG1BcHBsaWVkU3Rl
bmNpbGJ1ZmZlclNlcmlhbCA9IHN0ZW5jaWxidWZmZXJTZXJpYWw7Ci0gICAgICAgIG1SZW5kZXJU
YXJnZXREZXNjSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgICAgICBtRGVwdGhTdGVuY2lsSW5pdGlh
bGl6ZWQgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1HTGVudW0gUmVu
ZGVyZXIxMTo6YXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5h
cnksIGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmlidXRlc1tdLCBHTGludCBmaXJzdCwg
R0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpCi17Ci0gICAgVHJhbnNsYXRlZEF0dHJp
YnV0ZSBhdHRyaWJ1dGVzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdOwotICAgIEdMZW51bSBlcnIg
PSBtVmVydGV4RGF0YU1hbmFnZXItPnByZXBhcmVWZXJ0ZXhEYXRhKHZlcnRleEF0dHJpYnV0ZXMs
IHByb2dyYW1CaW5hcnksIGZpcnN0LCBjb3VudCwgYXR0cmlidXRlcywgaW5zdGFuY2VzKTsKLSAg
ICBpZiAoZXJyICE9IEdMX05PX0VSUk9SKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gbUlucHV0TGF5b3V0Q2FjaGUuYXBwbHlWZXJ0ZXhCdWZmZXJzKGF0
dHJpYnV0ZXMsIHByb2dyYW1CaW5hcnkpOwotfQotCi1HTGVudW0gUmVuZGVyZXIxMTo6YXBwbHlJ
bmRleEJ1ZmZlcihjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJh
eUJ1ZmZlciwgR0xzaXplaSBjb3VudCwgR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xh
dGVkSW5kZXhEYXRhICppbmRleEluZm8pCi17Ci0gICAgR0xlbnVtIGVyciA9IG1JbmRleERhdGFN
YW5hZ2VyLT5wcmVwYXJlSW5kZXhEYXRhKHR5cGUsIGNvdW50LCBlbGVtZW50QXJyYXlCdWZmZXIs
IGluZGljZXMsIGluZGV4SW5mbyk7Ci0KLSAgICBpZiAoZXJyID09IEdMX05PX0VSUk9SKQotICAg
IHsKLSAgICAgICAgaWYgKGluZGV4SW5mby0+c3RvcmFnZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKGluZGV4SW5mby0+c2VyaWFsICE9IG1BcHBsaWVkU3RvcmFnZUlCU2VyaWFsIHx8IGlu
ZGV4SW5mby0+c3RhcnRPZmZzZXQgIT0gbUFwcGxpZWRJQk9mZnNldCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBCdWZmZXJTdG9yYWdlMTEgKnN0b3JhZ2UgPSBCdWZmZXJTdG9yYWdl
MTE6Om1ha2VCdWZmZXJTdG9yYWdlMTEoaW5kZXhJbmZvLT5zdG9yYWdlKTsKLSAgICAgICAgICAg
ICAgICBJbmRleEJ1ZmZlcjExKiBpbmRleEJ1ZmZlciA9IEluZGV4QnVmZmVyMTE6Om1ha2VJbmRl
eEJ1ZmZlcjExKGluZGV4SW5mby0+aW5kZXhCdWZmZXIpOwotCi0gICAgICAgICAgICAgICAgbURl
dmljZUNvbnRleHQtPklBU2V0SW5kZXhCdWZmZXIoc3RvcmFnZS0+Z2V0QnVmZmVyKCksIGluZGV4
QnVmZmVyLT5nZXRJbmRleEZvcm1hdCgpLCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0KTsKLQotICAg
ICAgICAgICAgICAgIG1BcHBsaWVkSUJTZXJpYWwgPSAwOwotICAgICAgICAgICAgICAgIG1BcHBs
aWVkU3RvcmFnZUlCU2VyaWFsID0gc3RvcmFnZS0+Z2V0U2VyaWFsKCk7Ci0gICAgICAgICAgICAg
ICAgbUFwcGxpZWRJQk9mZnNldCA9IGluZGV4SW5mby0+c3RhcnRPZmZzZXQ7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaW5kZXhJbmZvLT5zZXJpYWwgIT0gbUFw
cGxpZWRJQlNlcmlhbCB8fCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0ICE9IG1BcHBsaWVkSUJPZmZz
ZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEluZGV4QnVmZmVyMTEqIGluZGV4QnVmZmVyID0g
SW5kZXhCdWZmZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEoaW5kZXhJbmZvLT5pbmRleEJ1ZmZlcik7
Ci0KLSAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldEluZGV4QnVmZmVyKGluZGV4QnVm
ZmVyLT5nZXRCdWZmZXIoKSwgaW5kZXhCdWZmZXItPmdldEluZGV4Rm9ybWF0KCksIGluZGV4SW5m
by0+c3RhcnRPZmZzZXQpOwotCi0gICAgICAgICAgICBtQXBwbGllZElCU2VyaWFsID0gaW5kZXhJ
bmZvLT5zZXJpYWw7Ci0gICAgICAgICAgICBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbCA9IDA7Ci0g
ICAgICAgICAgICBtQXBwbGllZElCT2Zmc2V0ID0gaW5kZXhJbmZvLT5zdGFydE9mZnNldDsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBlcnI7Ci19Ci0KLXZvaWQgUmVuZGVyZXIxMTo6
ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMp
Ci17Ci0gICAgaWYgKG1vZGUgPT0gR0xfTElORV9MT09QKQotICAgIHsKLSAgICAgICAgZHJhd0xp
bmVMb29wKGNvdW50LCBHTF9OT05FLCBOVUxMLCAwLCBOVUxMKTsKLSAgICB9Ci0gICAgZWxzZSBp
ZiAobW9kZSA9PSBHTF9UUklBTkdMRV9GQU4pCi0gICAgewotICAgICAgICBkcmF3VHJpYW5nbGVG
YW4oY291bnQsIEdMX05PTkUsIE5VTEwsIDAsIE5VTEwsIGluc3RhbmNlcyk7Ci0gICAgfQotICAg
IGVsc2UgaWYgKGluc3RhbmNlcyA+IDApCi0gICAgewotICAgICAgICBtRGV2aWNlQ29udGV4dC0+
RHJhd0luc3RhbmNlZChjb3VudCwgaW5zdGFuY2VzLCAwLCAwKTsKLSAgICB9Ci0gICAgZWxzZQot
ICAgIHsKLSAgICAgICAgbURldmljZUNvbnRleHQtPkRyYXcoY291bnQsIDApOwotICAgIH0KLX0K
LQotdm9pZCBSZW5kZXJlcjExOjpkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291
bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1l
bnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvLCBHTHNp
emVpIGluc3RhbmNlcykKLXsKLSAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCi0gICAgewot
ICAgICAgICBkcmF3TGluZUxvb3AoY291bnQsIHR5cGUsIGluZGljZXMsIGluZGV4SW5mby5taW5J
bmRleCwgZWxlbWVudEFycmF5QnVmZmVyKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobW9kZSA9PSBH
TF9UUklBTkdMRV9GQU4pCi0gICAgewotICAgICAgICBkcmF3VHJpYW5nbGVGYW4oY291bnQsIHR5
cGUsIGluZGljZXMsIGluZGV4SW5mby5taW5JbmRleCwgZWxlbWVudEFycmF5QnVmZmVyLCBpbnN0
YW5jZXMpOwotICAgIH0KLSAgICBlbHNlIGlmIChpbnN0YW5jZXMgPiAwKQotICAgIHsKLSAgICAg
ICAgbURldmljZUNvbnRleHQtPkRyYXdJbmRleGVkSW5zdGFuY2VkKGNvdW50LCBpbnN0YW5jZXMs
IDAsIC1zdGF0aWNfY2FzdDxpbnQ+KGluZGV4SW5mby5taW5JbmRleCksIDApOwotICAgIH0KLSAg
ICBlbHNlCi0gICAgewotICAgICAgICBtRGV2aWNlQ29udGV4dC0+RHJhd0luZGV4ZWQoY291bnQs
IDAsIC1zdGF0aWNfY2FzdDxpbnQ+KGluZGV4SW5mby5taW5JbmRleCkpOwotICAgIH0KLX0KLQot
dm9pZCBSZW5kZXJlcjExOjpkcmF3TGluZUxvb3AoR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUs
IGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgaW50IG1pbkluZGV4LCBnbDo6QnVmZmVyICplbGVtZW50
QXJyYXlCdWZmZXIpCi17Ci0gICAgLy8gR2V0IHRoZSByYXcgaW5kaWNlcyBmb3IgYW4gaW5kZXhl
ZCBkcmF3Ci0gICAgaWYgKHR5cGUgIT0gR0xfTk9ORSAmJiBlbGVtZW50QXJyYXlCdWZmZXIpCi0g
ICAgewotICAgICAgICBnbDo6QnVmZmVyICppbmRleEJ1ZmZlciA9IGVsZW1lbnRBcnJheUJ1ZmZl
cjsKLSAgICAgICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGluZGV4QnVmZmVyLT5nZXRTdG9y
YWdlKCk7Ci0gICAgICAgIGludHB0cl90IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KGluZGljZXMpOwotICAgICAgICBpbmRpY2VzID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0
ZSo+KHN0b3JhZ2UtPmdldERhdGEoKSkgKyBvZmZzZXQ7Ci0gICAgfQotCi0gICAgaWYgKCFtTGlu
ZUxvb3BJQikKLSAgICB7Ci0gICAgICAgIG1MaW5lTG9vcElCID0gbmV3IFN0cmVhbWluZ0luZGV4
QnVmZmVySW50ZXJmYWNlKHRoaXMpOwotICAgICAgICBpZiAoIW1MaW5lTG9vcElCLT5yZXNlcnZl
QnVmZmVyU3BhY2UoSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwgR0xfVU5TSUdORURfSU5UKSkK
LSAgICAgICAgewotICAgICAgICAgICAgZGVsZXRlIG1MaW5lTG9vcElCOwotICAgICAgICAgICAg
bUxpbmVMb29wSUIgPSBOVUxMOwotCi0gICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUg
YSAzMi1iaXQgbG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKLSAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICAvLyBDaGVja2VkIGJ5IFJlbmRlcmVyMTE6OmFwcGx5UHJpbWl0aXZlVHlwZQot
ICAgIEFTU0VSVChjb3VudCA+PSAwKTsKLQotICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBp
bnQ+KGNvdW50KSArIDEgPiAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgo
KSAvIHNpemVvZih1bnNpZ25lZCBpbnQpKSkKLSAgICB7Ci0gICAgICAgIEVSUigiQ291bGQgbm90
IGNyZWF0ZSBhIDMyLWJpdCBsb29waW5nIGluZGV4IGJ1ZmZlciBmb3IgR0xfTElORV9MT09QLCB0
b28gbWFueSBpbmRpY2VzIHJlcXVpcmVkLiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAgIGNvbnN0IHVuc2lnbmVkIGludCBzcGFjZU5l
ZWRlZCA9IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGNvdW50KSArIDEpICogc2l6ZW9mKHVu
c2lnbmVkIGludCk7Ci0gICAgaWYgKCFtTGluZUxvb3BJQi0+cmVzZXJ2ZUJ1ZmZlclNwYWNlKHNw
YWNlTmVlZGVkLCBHTF9VTlNJR05FRF9JTlQpKQotICAgIHsKLSAgICAgICAgRVJSKCJDb3VsZCBu
b3QgcmVzZXJ2ZSBlbm91Z2ggc3BhY2UgaW4gbG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJ
TkVfTE9PUC4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
LSAgICB9Ci0KLSAgICB2b2lkKiBtYXBwZWRNZW1vcnkgPSBOVUxMOwotICAgIHVuc2lnbmVkIGlu
dCBvZmZzZXQ7Ci0gICAgaWYgKCFtTGluZUxvb3BJQi0+bWFwQnVmZmVyKHNwYWNlTmVlZGVkLCAm
bWFwcGVkTWVtb3J5LCAmb2Zmc2V0KSkKLSAgICB7Ci0gICAgICAgIEVSUigiQ291bGQgbm90IG1h
cCBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBpbnQgKmRhdGEg
PSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KG1hcHBlZE1lbW9yeSk7Ci0gICAgdW5z
aWduZWQgaW50IGluZGV4QnVmZmVyT2Zmc2V0ID0gb2Zmc2V0OwotCi0gICAgc3dpdGNoICh0eXBl
KQotICAgIHsKLSAgICAgIGNhc2UgR0xfTk9ORTogICAvLyBOb24taW5kZXhlZCBkcmF3Ci0gICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAg
ICAgZGF0YVtpXSA9IGk7Ci0gICAgICAgIH0KLSAgICAgICAgZGF0YVtjb3VudF0gPSAwOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkYXRhW2ld
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpW2ldOwotICAgICAgICB9Ci0g
ICAgICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMp
WzBdOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6Ci0gICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAg
ICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNlcylbaV07Ci0g
ICAgICAgIH0KLSAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9y
dCo+KGluZGljZXMpWzBdOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURf
SU5UOgotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2Vz
KVtpXTsKLSAgICAgICAgfQotICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNvbnN0
IEdMdWludCo+KGluZGljZXMpWzBdOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgaWYgKCFtTGluZUxvb3BJQi0+dW5tYXBCdWZmZXIo
KSkKLSAgICB7Ci0gICAgICAgIEVSUigiQ291bGQgbm90IHVubWFwIGluZGV4IGJ1ZmZlciBmb3Ig
R0xfTElORV9MT09QLiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgIH0KLQotICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9IG1MaW5lTG9vcElCLT5n
ZXRTZXJpYWwoKSB8fCBtQXBwbGllZElCT2Zmc2V0ICE9IGluZGV4QnVmZmVyT2Zmc2V0KQotICAg
IHsKLSAgICAgICAgSW5kZXhCdWZmZXIxMSAqaW5kZXhCdWZmZXIgPSBJbmRleEJ1ZmZlcjExOjpt
YWtlSW5kZXhCdWZmZXIxMShtTGluZUxvb3BJQi0+Z2V0SW5kZXhCdWZmZXIoKSk7Ci0KLSAgICAg
ICAgbURldmljZUNvbnRleHQtPklBU2V0SW5kZXhCdWZmZXIoaW5kZXhCdWZmZXItPmdldEJ1ZmZl
cigpLCBpbmRleEJ1ZmZlci0+Z2V0SW5kZXhGb3JtYXQoKSwgaW5kZXhCdWZmZXJPZmZzZXQpOwot
ICAgICAgICBtQXBwbGllZElCU2VyaWFsID0gbUxpbmVMb29wSUItPmdldFNlcmlhbCgpOwotICAg
ICAgICBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbCA9IDA7Ci0gICAgICAgIG1BcHBsaWVkSUJPZmZz
ZXQgPSBpbmRleEJ1ZmZlck9mZnNldDsKLSAgICB9Ci0KLSAgICBtRGV2aWNlQ29udGV4dC0+RHJh
d0luZGV4ZWQoY291bnQgKyAxLCAwLCAtbWluSW5kZXgpOwotfQotCi12b2lkIFJlbmRlcmVyMTE6
OmRyYXdUcmlhbmdsZUZhbihHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lk
ICppbmRpY2VzLCBpbnQgbWluSW5kZXgsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwg
aW50IGluc3RhbmNlcykKLXsKLSAgICAvLyBHZXQgdGhlIHJhdyBpbmRpY2VzIGZvciBhbiBpbmRl
eGVkIGRyYXcKLSAgICBpZiAodHlwZSAhPSBHTF9OT05FICYmIGVsZW1lbnRBcnJheUJ1ZmZlcikK
LSAgICB7Ci0gICAgICAgIGdsOjpCdWZmZXIgKmluZGV4QnVmZmVyID0gZWxlbWVudEFycmF5QnVm
ZmVyOwotICAgICAgICBCdWZmZXJTdG9yYWdlICpzdG9yYWdlID0gaW5kZXhCdWZmZXItPmdldFN0
b3JhZ2UoKTsKLSAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4oaW5kaWNlcyk7Ci0gICAgICAgIGluZGljZXMgPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVi
eXRlKj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSArIG9mZnNldDsKLSAgICB9Ci0KLSAgICBpZiAoIW1U
cmlhbmdsZUZhbklCKQotICAgIHsKLSAgICAgICAgbVRyaWFuZ2xlRmFuSUIgPSBuZXcgU3RyZWFt
aW5nSW5kZXhCdWZmZXJJbnRlcmZhY2UodGhpcyk7Ci0gICAgICAgIGlmICghbVRyaWFuZ2xlRmFu
SUItPnJlc2VydmVCdWZmZXJTcGFjZShJTklUSUFMX0lOREVYX0JVRkZFUl9TSVpFLCBHTF9VTlNJ
R05FRF9JTlQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZWxldGUgbVRyaWFuZ2xlRmFuSUI7
Ci0gICAgICAgICAgICBtVHJpYW5nbGVGYW5JQiA9IE5VTEw7Ci0KLSAgICAgICAgICAgIEVSUigi
Q291bGQgbm90IGNyZWF0ZSBhIHNjcmF0Y2ggaW5kZXggYnVmZmVyIGZvciBHTF9UUklBTkdMRV9G
QU4uIik7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQ2hlY2tlZCBieSBSZW5kZXJlcjExOjphcHBseVBy
aW1pdGl2ZVR5cGUKLSAgICBBU1NFUlQoY291bnQgPj0gMyk7Ci0KLSAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgbnVtVHJpcyA9IGNvdW50IC0gMjsKLQotICAgIGlmIChudW1UcmlzID4gKHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLyAoc2l6ZW9mKHVuc2lnbmVkIGludCkg
KiAzKSkpCi0gICAgewotICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSBzY3JhdGNoIGlu
ZGV4IGJ1ZmZlciBmb3IgR0xfVFJJQU5HTEVfRkFOLCB0b28gbWFueSBpbmRpY2VzIHJlcXVpcmVk
LiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0K
LQotICAgIGNvbnN0IHVuc2lnbmVkIGludCBzcGFjZU5lZWRlZCA9IChudW1UcmlzICogMykgKiBz
aXplb2YodW5zaWduZWQgaW50KTsKLSAgICBpZiAoIW1UcmlhbmdsZUZhbklCLT5yZXNlcnZlQnVm
ZmVyU3BhY2Uoc3BhY2VOZWVkZWQsIEdMX1VOU0lHTkVEX0lOVCkpCi0gICAgewotICAgICAgICBF
UlIoIkNvdWxkIG5vdCByZXNlcnZlIGVub3VnaCBzcGFjZSBpbiBzY3JhdGNoIGluZGV4IGJ1ZmZl
ciBmb3IgR0xfVFJJQU5HTEVfRkFOLiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAgIHZvaWQqIG1hcHBlZE1lbW9yeSA9IE5VTEw7Ci0g
ICAgdW5zaWduZWQgaW50IG9mZnNldDsKLSAgICBpZiAoIW1UcmlhbmdsZUZhbklCLT5tYXBCdWZm
ZXIoc3BhY2VOZWVkZWQsICZtYXBwZWRNZW1vcnksICZvZmZzZXQpKQotICAgIHsKLSAgICAgICAg
RVJSKCJDb3VsZCBub3QgbWFwIHNjcmF0Y2ggaW5kZXggYnVmZmVyIGZvciBHTF9UUklBTkdMRV9G
QU4uIik7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
fQotCi0gICAgdW5zaWduZWQgaW50ICpkYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBp
bnQqPihtYXBwZWRNZW1vcnkpOwotICAgIHVuc2lnbmVkIGludCBpbmRleEJ1ZmZlck9mZnNldCA9
IG9mZnNldDsKLQotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX05PTkU6
ICAgLy8gTm9uLWluZGV4ZWQgZHJhdwotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IG51bVRyaXM7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGF0YVtpKjMgKyAwXSA9
IDA7Ci0gICAgICAgICAgICBkYXRhW2kqMyArIDFdID0gaSArIDE7Ci0gICAgICAgICAgICBkYXRh
W2kqMyArIDJdID0gaSArIDI7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
bnVtVHJpczsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkYXRhW2kqMyArIDBdID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpWzBdOwotICAgICAgICAgICAgZGF0YVtp
KjMgKyAxXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKVtpICsgMV07Ci0g
ICAgICAgICAgICBkYXRhW2kqMyArIDJdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGlu
ZGljZXMpW2kgKyAyXTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
VU5TSUdORURfU0hPUlQ6Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVt
VHJpczsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkYXRhW2kqMyArIDBdID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVswXTsKLSAgICAgICAgICAgIGRhdGFbaSoz
ICsgMV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpW2kgKyAxXTsKLSAg
ICAgICAgICAgIGRhdGFbaSozICsgMl0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGlu
ZGljZXMpW2kgKyAyXTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
VU5TSUdORURfSU5UOgotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVRy
aXM7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGF0YVtpKjMgKyAwXSA9IHN0YXRpY19j
YXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMpWzBdOwotICAgICAgICAgICAgZGF0YVtpKjMgKyAx
XSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMpW2kgKyAxXTsKLSAgICAgICAg
ICAgIGRhdGFbaSozICsgMl0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVtp
ICsgMl07Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOwotICAgIH0KLQotICAgIGlmICghbVRyaWFuZ2xlRmFuSUItPnVubWFwQnVmZmVyKCkp
Ci0gICAgewotICAgICAgICBFUlIoIkNvdWxkIG5vdCB1bm1hcCBzY3JhdGNoIGluZGV4IGJ1ZmZl
ciBmb3IgR0xfVFJJQU5HTEVfRkFOLiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9IG1Ucmlh
bmdsZUZhbklCLT5nZXRTZXJpYWwoKSB8fCBtQXBwbGllZElCT2Zmc2V0ICE9IGluZGV4QnVmZmVy
T2Zmc2V0KQotICAgIHsKLSAgICAgICAgSW5kZXhCdWZmZXIxMSAqaW5kZXhCdWZmZXIgPSBJbmRl
eEJ1ZmZlcjExOjptYWtlSW5kZXhCdWZmZXIxMShtVHJpYW5nbGVGYW5JQi0+Z2V0SW5kZXhCdWZm
ZXIoKSk7Ci0KLSAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0SW5kZXhCdWZmZXIoaW5kZXhC
dWZmZXItPmdldEJ1ZmZlcigpLCBpbmRleEJ1ZmZlci0+Z2V0SW5kZXhGb3JtYXQoKSwgaW5kZXhC
dWZmZXJPZmZzZXQpOwotICAgICAgICBtQXBwbGllZElCU2VyaWFsID0gbVRyaWFuZ2xlRmFuSUIt
PmdldFNlcmlhbCgpOwotICAgICAgICBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbCA9IDA7Ci0gICAg
ICAgIG1BcHBsaWVkSUJPZmZzZXQgPSBpbmRleEJ1ZmZlck9mZnNldDsKLSAgICB9Ci0KLSAgICBp
ZiAoaW5zdGFuY2VzID4gMCkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5EcmF3SW5k
ZXhlZEluc3RhbmNlZChudW1UcmlzICogMywgaW5zdGFuY2VzLCAwLCAtbWluSW5kZXgsIDApOwot
ICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBtRGV2aWNlQ29udGV4dC0+RHJhd0luZGV4
ZWQobnVtVHJpcyAqIDMsIDAsIC1taW5JbmRleCk7Ci0gICAgfQotfQotCi12b2lkIFJlbmRlcmVy
MTE6OmFwcGx5U2hhZGVycyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSkKLXsKLSAg
ICB1bnNpZ25lZCBpbnQgcHJvZ3JhbUJpbmFyeVNlcmlhbCA9IHByb2dyYW1CaW5hcnktPmdldFNl
cmlhbCgpOwotICAgIGNvbnN0IGJvb2wgdXBkYXRlUHJvZ3JhbVN0YXRlID0gKHByb2dyYW1CaW5h
cnlTZXJpYWwgIT0gbUFwcGxpZWRQcm9ncmFtQmluYXJ5U2VyaWFsKTsKLQotICAgIGlmICh1cGRh
dGVQcm9ncmFtU3RhdGUpCi0gICAgewotICAgICAgICBTaGFkZXJFeGVjdXRhYmxlICp2ZXJ0ZXhF
eGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlKCk7Ci0gICAgICAgIFNoYWRl
ckV4ZWN1dGFibGUgKnBpeGVsRXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxFeGVjdXRhYmxl
KCk7Ci0KLSAgICAgICAgSUQzRDExVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIgPSBOVUxMOwot
ICAgICAgICBpZiAodmVydGV4RXhlKSB2ZXJ0ZXhTaGFkZXIgPSBTaGFkZXJFeGVjdXRhYmxlMTE6
Om1ha2VTaGFkZXJFeGVjdXRhYmxlMTEodmVydGV4RXhlKS0+Z2V0VmVydGV4U2hhZGVyKCk7Ci0K
LSAgICAgICAgSUQzRDExUGl4ZWxTaGFkZXIgKnBpeGVsU2hhZGVyID0gTlVMTDsKLSAgICAgICAg
aWYgKHBpeGVsRXhlKSBwaXhlbFNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRl
ckV4ZWN1dGFibGUxMShwaXhlbEV4ZSktPmdldFBpeGVsU2hhZGVyKCk7Ci0KLSAgICAgICAgbURl
dmljZUNvbnRleHQtPlBTU2V0U2hhZGVyKHBpeGVsU2hhZGVyLCBOVUxMLCAwKTsKLSAgICAgICAg
bURldmljZUNvbnRleHQtPlZTU2V0U2hhZGVyKHZlcnRleFNoYWRlciwgTlVMTCwgMCk7Ci0KLSAg
ICAgICAgcHJvZ3JhbUJpbmFyeS0+ZGlydHlBbGxVbmlmb3JtcygpOwotCi0gICAgICAgIG1BcHBs
aWVkUHJvZ3JhbUJpbmFyeVNlcmlhbCA9IHByb2dyYW1CaW5hcnlTZXJpYWw7Ci0gICAgfQotCi0g
ICAgLy8gT25seSB1c2UgdGhlIGdlb21ldHJ5IHNoYWRlciBjdXJyZW50bHkgZm9yIHBvaW50IHNw
cml0ZSBkcmF3aW5nCi0gICAgY29uc3QgYm9vbCB1c2VzR2VvbWV0cnlTaGFkZXIgPSAocHJvZ3Jh
bUJpbmFyeS0+dXNlc0dlb21ldHJ5U2hhZGVyKCkgJiYgbUN1clJhc3RlclN0YXRlLnBvaW50RHJh
d01vZGUpOwotCi0gICAgaWYgKHVwZGF0ZVByb2dyYW1TdGF0ZSB8fCB1c2VzR2VvbWV0cnlTaGFk
ZXIgIT0gbUlzR2VvbWV0cnlTaGFkZXJBY3RpdmUpCi0gICAgewotICAgICAgICBpZiAodXNlc0dl
b21ldHJ5U2hhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBTaGFkZXJFeGVjdXRhYmxlICpn
ZW9tZXRyeUV4ZSA9IHByb2dyYW1CaW5hcnktPmdldEdlb21ldHJ5RXhlY3V0YWJsZSgpOwotICAg
ICAgICAgICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmdlb21ldHJ5U2hhZGVyID0gU2hhZGVyRXhl
Y3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKGdlb21ldHJ5RXhlKS0+Z2V0R2VvbWV0
cnlTaGFkZXIoKTsKLSAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldFNoYWRlcihnZW9t
ZXRyeVNoYWRlciwgTlVMTCwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7
Ci0gICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIoTlVMTCwgTlVMTCwgMCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBtSXNHZW9tZXRyeVNoYWRlckFjdGl2ZSA9IHVzZXNHZW9t
ZXRyeVNoYWRlcjsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyZXIxMTo6YXBwbHlVbmlmb3Jtcyhn
bDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlVuaWZvcm1BcnJheSAqdW5pZm9y
bUFycmF5KQotewotICAgIFNoYWRlckV4ZWN1dGFibGUxMSAqdmVydGV4RXhlY3V0YWJsZSA9IFNo
YWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShwcm9ncmFtQmluYXJ5LT5n
ZXRWZXJ0ZXhFeGVjdXRhYmxlKCkpOwotICAgIFNoYWRlckV4ZWN1dGFibGUxMSAqcGl4ZWxFeGVj
dXRhYmxlID0gU2hhZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKHByb2dy
YW1CaW5hcnktPmdldFBpeGVsRXhlY3V0YWJsZSgpKTsKLQotICAgIHVuc2lnbmVkIGludCB0b3Rh
bFJlZ2lzdGVyQ291bnRWUyA9IDA7Ci0gICAgdW5zaWduZWQgaW50IHRvdGFsUmVnaXN0ZXJDb3Vu
dFBTID0gMDsKLQotICAgIGJvb2wgdmVydGV4VW5pZm9ybXNEaXJ0eSA9IGZhbHNlOwotICAgIGJv
b2wgcGl4ZWxVbmlmb3Jtc0RpcnR5ID0gZmFsc2U7Ci0KLSAgICBmb3IgKGdsOjpVbmlmb3JtQXJy
YXk6OmNvbnN0X2l0ZXJhdG9yIHVuaWZvcm1faXRlcmF0b3IgPSB1bmlmb3JtQXJyYXktPmJlZ2lu
KCk7IHVuaWZvcm1faXRlcmF0b3IgIT0gdW5pZm9ybUFycmF5LT5lbmQoKTsgdW5pZm9ybV9pdGVy
YXRvcisrKQotICAgIHsKLSAgICAgICAgY29uc3QgZ2w6OlVuaWZvcm0gKnVuaWZvcm0gPSAqdW5p
Zm9ybV9pdGVyYXRvcjsKLQotICAgICAgICBpZiAodW5pZm9ybS0+dnNSZWdpc3RlckluZGV4ID49
IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRvdGFsUmVnaXN0ZXJDb3VudFZTICs9IHVuaWZv
cm0tPnJlZ2lzdGVyQ291bnQ7Ci0gICAgICAgICAgICB2ZXJ0ZXhVbmlmb3Jtc0RpcnR5ID0gdmVy
dGV4VW5pZm9ybXNEaXJ0eSB8fCB1bmlmb3JtLT5kaXJ0eTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmICh1bmlmb3JtLT5wc1JlZ2lzdGVySW5kZXggPj0gMCkKLSAgICAgICAgewotICAgICAgICAg
ICAgdG90YWxSZWdpc3RlckNvdW50UFMgKz0gdW5pZm9ybS0+cmVnaXN0ZXJDb3VudDsKLSAgICAg
ICAgICAgIHBpeGVsVW5pZm9ybXNEaXJ0eSA9IHBpeGVsVW5pZm9ybXNEaXJ0eSB8fCB1bmlmb3Jt
LT5kaXJ0eTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIElEM0QxMUJ1ZmZlciAqdmVydGV4Q29u
c3RhbnRCdWZmZXIgPSB2ZXJ0ZXhFeGVjdXRhYmxlLT5nZXRDb25zdGFudEJ1ZmZlcihtRGV2aWNl
LCB0b3RhbFJlZ2lzdGVyQ291bnRWUyk7Ci0gICAgSUQzRDExQnVmZmVyICpwaXhlbENvbnN0YW50
QnVmZmVyID0gcGl4ZWxFeGVjdXRhYmxlLT5nZXRDb25zdGFudEJ1ZmZlcihtRGV2aWNlLCB0b3Rh
bFJlZ2lzdGVyQ291bnRQUyk7Ci0KLSAgICBmbG9hdCAoKm1hcFZTKVs0XSA9IE5VTEw7Ci0gICAg
ZmxvYXQgKCptYXBQUylbNF0gPSBOVUxMOwotCi0gICAgaWYgKHRvdGFsUmVnaXN0ZXJDb3VudFZT
ID4gMCAmJiB2ZXJ0ZXhVbmlmb3Jtc0RpcnR5KQotICAgIHsKLSAgICAgICAgRDNEMTFfTUFQUEVE
X1NVQlJFU09VUkNFIG1hcCA9IHswfTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNl
Q29udGV4dC0+TWFwKHZlcnRleENvbnN0YW50QnVmZmVyLCAwLCBEM0QxMV9NQVBfV1JJVEVfRElT
Q0FSRCwgMCwgJm1hcCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAg
ICAgIG1hcFZTID0gKGZsb2F0KCopWzRdKW1hcC5wRGF0YTsKLSAgICB9Ci0KLSAgICBpZiAodG90
YWxSZWdpc3RlckNvdW50UFMgPiAwICYmIHBpeGVsVW5pZm9ybXNEaXJ0eSkKLSAgICB7Ci0gICAg
ICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXAgPSB7MH07Ci0gICAgICAgIEhSRVNVTFQg
cmVzdWx0ID0gbURldmljZUNvbnRleHQtPk1hcChwaXhlbENvbnN0YW50QnVmZmVyLCAwLCBEM0Qx
MV9NQVBfV1JJVEVfRElTQ0FSRCwgMCwgJm1hcCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQo
cmVzdWx0KSk7Ci0gICAgICAgIG1hcFBTID0gKGZsb2F0KCopWzRdKW1hcC5wRGF0YTsKLSAgICB9
Ci0KLSAgICBmb3IgKGdsOjpVbmlmb3JtQXJyYXk6Oml0ZXJhdG9yIHVuaWZvcm1faXRlcmF0b3Ig
PSB1bmlmb3JtQXJyYXktPmJlZ2luKCk7IHVuaWZvcm1faXRlcmF0b3IgIT0gdW5pZm9ybUFycmF5
LT5lbmQoKTsgdW5pZm9ybV9pdGVyYXRvcisrKQotICAgIHsKLSAgICAgICAgZ2w6OlVuaWZvcm0g
KnVuaWZvcm0gPSAqdW5pZm9ybV9pdGVyYXRvcjsKLQotICAgICAgICBpZiAodW5pZm9ybS0+dHlw
ZSAhPSAgR0xfU0FNUExFUl8yRCAmJiB1bmlmb3JtLT50eXBlICE9IEdMX1NBTVBMRVJfQ1VCRSkK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKHVuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleCA+PSAw
ICYmIG1hcFZTKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1lbWNweShtYXBWUyAr
IHVuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleCwgdW5pZm9ybS0+ZGF0YSwgdW5pZm9ybS0+cmVnaXN0
ZXJDb3VudCAqIHNpemVvZihmbG9hdFs0XSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAodW5pZm9ybS0+cHNSZWdpc3RlckluZGV4ID49IDAgJiYgbWFwUFMpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KG1hcFBTICsgdW5pZm9ybS0+cHNSZWdpc3Rlcklu
ZGV4LCB1bmlmb3JtLT5kYXRhLCB1bmlmb3JtLT5yZWdpc3RlckNvdW50ICogc2l6ZW9mKGZsb2F0
WzRdKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB1bmlmb3JtLT5kaXJ0
eSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtYXBWUykKLSAgICB7Ci0gICAgICAgIG1EZXZp
Y2VDb250ZXh0LT5Vbm1hcCh2ZXJ0ZXhDb25zdGFudEJ1ZmZlciwgMCk7Ci0gICAgfQotCi0gICAg
aWYgKG1hcFBTKQotICAgIHsKLSAgICAgICAgbURldmljZUNvbnRleHQtPlVubWFwKHBpeGVsQ29u
c3RhbnRCdWZmZXIsIDApOwotICAgIH0KLQotICAgIGlmIChtQ3VycmVudFZlcnRleENvbnN0YW50
QnVmZmVyICE9IHZlcnRleENvbnN0YW50QnVmZmVyKQotICAgIHsKLSAgICAgICAgbURldmljZUNv
bnRleHQtPlZTU2V0Q29uc3RhbnRCdWZmZXJzKDAsIDEsICZ2ZXJ0ZXhDb25zdGFudEJ1ZmZlcik7
Ci0gICAgICAgIG1DdXJyZW50VmVydGV4Q29uc3RhbnRCdWZmZXIgPSB2ZXJ0ZXhDb25zdGFudEJ1
ZmZlcjsKLSAgICB9Ci0KLSAgICBpZiAobUN1cnJlbnRQaXhlbENvbnN0YW50QnVmZmVyICE9IHBp
eGVsQ29uc3RhbnRCdWZmZXIpCi0gICAgewotICAgICAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRD
b25zdGFudEJ1ZmZlcnMoMCwgMSwgJnBpeGVsQ29uc3RhbnRCdWZmZXIpOwotICAgICAgICBtQ3Vy
cmVudFBpeGVsQ29uc3RhbnRCdWZmZXIgPSBwaXhlbENvbnN0YW50QnVmZmVyOwotICAgIH0KLQot
ICAgIC8vIERyaXZlciB1bmlmb3JtcwotICAgIGlmICghbURyaXZlckNvbnN0YW50QnVmZmVyVlMp
Ci0gICAgewotICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyBjb25zdGFudEJ1ZmZlckRlc2NyaXB0
aW9uID0gezB9OwotICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLkJ5dGVXaWR0aCA9
IHNpemVvZihkeF9WZXJ0ZXhDb25zdGFudHMpOwotICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2Ny
aXB0aW9uLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKLSAgICAgICAgY29uc3RhbnRCdWZm
ZXJEZXNjcmlwdGlvbi5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX0NPTlNUQU5UX0JVRkZFUjsKLSAg
ICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5DUFVBY2Nlc3NGbGFncyA9IDA7Ci0gICAg
ICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgY29u
c3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKLQotICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmY29uc3RhbnRCdWZmZXJE
ZXNjcmlwdGlvbiwgTlVMTCwgJm1Ecml2ZXJDb25zdGFudEJ1ZmZlclZTKTsKLSAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgICAgICBtRGV2aWNlQ29udGV4dC0+VlNTZXRD
b25zdGFudEJ1ZmZlcnMoMSwgMSwgJm1Ecml2ZXJDb25zdGFudEJ1ZmZlclZTKTsKLSAgICB9Ci0K
LSAgICBpZiAoIW1Ecml2ZXJDb25zdGFudEJ1ZmZlclBTKQotICAgIHsKLSAgICAgICAgRDNEMTFf
QlVGRkVSX0RFU0MgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbiA9IHswfTsKLSAgICAgICAgY29u
c3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5CeXRlV2lkdGggPSBzaXplb2YoZHhfUGl4ZWxDb25zdGFu
dHMpOwotICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLlVzYWdlID0gRDNEMTFfVVNB
R0VfREVGQVVMVDsKLSAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5CaW5kRmxhZ3Mg
PSBEM0QxMV9CSU5EX0NPTlNUQU5UX0JVRkZFUjsKLSAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNj
cmlwdGlvbi5DUFVBY2Nlc3NGbGFncyA9IDA7Ci0gICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3Jp
cHRpb24uTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5T
dHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKLQotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZp
Y2UtPkNyZWF0ZUJ1ZmZlcigmY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbiwgTlVMTCwgJm1Ecml2
ZXJDb25zdGFudEJ1ZmZlclBTKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
LQotICAgICAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRDb25zdGFudEJ1ZmZlcnMoMSwgMSwgJm1E
cml2ZXJDb25zdGFudEJ1ZmZlclBTKTsKLSAgICB9Ci0KLSAgICBpZiAobWVtY21wKCZtVmVydGV4
Q29uc3RhbnRzLCAmbUFwcGxpZWRWZXJ0ZXhDb25zdGFudHMsIHNpemVvZihkeF9WZXJ0ZXhDb25z
dGFudHMpKSAhPSAwKQotICAgIHsKLSAgICAgICAgbURldmljZUNvbnRleHQtPlVwZGF0ZVN1YnJl
c291cmNlKG1Ecml2ZXJDb25zdGFudEJ1ZmZlclZTLCAwLCBOVUxMLCAmbVZlcnRleENvbnN0YW50
cywgMTYsIDApOwotICAgICAgICBtZW1jcHkoJm1BcHBsaWVkVmVydGV4Q29uc3RhbnRzLCAmbVZl
cnRleENvbnN0YW50cywgc2l6ZW9mKGR4X1ZlcnRleENvbnN0YW50cykpOwotICAgIH0KLQotICAg
IGlmIChtZW1jbXAoJm1QaXhlbENvbnN0YW50cywgJm1BcHBsaWVkUGl4ZWxDb25zdGFudHMsIHNp
emVvZihkeF9QaXhlbENvbnN0YW50cykpICE9IDApCi0gICAgewotICAgICAgICBtRGV2aWNlQ29u
dGV4dC0+VXBkYXRlU3VicmVzb3VyY2UobURyaXZlckNvbnN0YW50QnVmZmVyUFMsIDAsIE5VTEws
ICZtUGl4ZWxDb25zdGFudHMsIDE2LCAwKTsKLSAgICAgICAgbWVtY3B5KCZtQXBwbGllZFBpeGVs
Q29uc3RhbnRzLCAmbVBpeGVsQ29uc3RhbnRzLCBzaXplb2YoZHhfUGl4ZWxDb25zdGFudHMpKTsK
LSAgICB9Ci0KLSAgICAvLyBuZWVkZWQgZm9yIHRoZSBwb2ludCBzcHJpdGUgZ2VvbWV0cnkgc2hh
ZGVyCi0gICAgaWYgKG1DdXJyZW50R2VvbWV0cnlDb25zdGFudEJ1ZmZlciAhPSBtRHJpdmVyQ29u
c3RhbnRCdWZmZXJQUykKLSAgICB7Ci0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldENvbnN0
YW50QnVmZmVycygwLCAxLCAmbURyaXZlckNvbnN0YW50QnVmZmVyUFMpOwotICAgICAgICBtQ3Vy
cmVudEdlb21ldHJ5Q29uc3RhbnRCdWZmZXIgPSBtRHJpdmVyQ29uc3RhbnRCdWZmZXJQUzsKLSAg
ICB9Ci19Ci0KLXZvaWQgUmVuZGVyZXIxMTo6Y2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyYW1ldGVy
cyAmY2xlYXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpCi17Ci0gICAgIGJv
b2wgYWxwaGFVbm1hc2tlZCA9IChnbDo6R2V0QWxwaGFTaXplKG1SZW5kZXJUYXJnZXREZXNjLmZv
cm1hdCkgPT0gMCkgfHwgY2xlYXJQYXJhbXMuY29sb3JNYXNrQWxwaGE7Ci0gICAgIGJvb2wgbmVl
ZE1hc2tlZENvbG9yQ2xlYXIgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZFUl9C
SVQpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKGNsZWFyUGFyYW1zLmNv
bG9yTWFza1JlZCAmJiBjbGVhclBhcmFtcy5jb2xvck1hc2tHcmVlbiAmJgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tCbHVlICYmIGFscGhh
VW5tYXNrZWQpOwotCi0gICAgIHVuc2lnbmVkIGludCBzdGVuY2lsVW5tYXNrZWQgPSAweDA7Ci0g
ICAgIGlmIChmcmFtZUJ1ZmZlci0+aGFzU3RlbmNpbCgpKQotICAgICB7Ci0gICAgICAgICB1bnNp
Z25lZCBpbnQgc3RlbmNpbFNpemUgPSBnbDo6R2V0U3RlbmNpbFNpemUoZnJhbWVCdWZmZXItPmdl
dFN0ZW5jaWxidWZmZXIoKS0+Z2V0QWN0dWFsRm9ybWF0KCkpOwotICAgICAgICAgc3RlbmNpbFVu
bWFza2VkID0gKDB4MSA8PCBzdGVuY2lsU2l6ZSkgLSAxOwotICAgICB9Ci0gICAgIGJvb2wgbmVl
ZE1hc2tlZFN0ZW5jaWxDbGVhciA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfU1RFTkNJTF9CVUZG
RVJfQklUKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xlYXJQYXJh
bXMuc3RlbmNpbFdyaXRlTWFzayAmIHN0ZW5jaWxVbm1hc2tlZCkgIT0gc3RlbmNpbFVubWFza2Vk
OwotCi0gICAgIGJvb2wgbmVlZFNjaXNzb3JlZENsZWFyID0gbVNjaXNzb3JFbmFibGVkICYmICht
Q3VyU2Npc3Nvci54ID4gMCB8fCBtQ3VyU2Npc3Nvci55ID4gMCB8fAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUN1clNjaXNzb3IueCArIG1DdXJT
Y2lzc29yLndpZHRoIDwgbVJlbmRlclRhcmdldERlc2Mud2lkdGggfHwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1DdXJTY2lzc29yLnkgKyBtQ3Vy
U2Npc3Nvci5oZWlnaHQgPCBtUmVuZGVyVGFyZ2V0RGVzYy5oZWlnaHQpOwotCi0gICAgIGlmIChu
ZWVkTWFza2VkQ29sb3JDbGVhciB8fCBuZWVkTWFza2VkU3RlbmNpbENsZWFyIHx8IG5lZWRTY2lz
c29yZWRDbGVhcikKLSAgICAgewotICAgICAgICAgbWFza2VkQ2xlYXIoY2xlYXJQYXJhbXMsIGZy
YW1lQnVmZmVyLT51c2luZ0V4dGVuZGVkRHJhd0J1ZmZlcnMoKSk7Ci0gICAgIH0KLSAgICAgZWxz
ZQotICAgICB7Ci0gICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZF
Ul9CSVQpCi0gICAgICAgICB7Ci0gICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JB
dHRhY2htZW50ID0gMDsgY29sb3JBdHRhY2htZW50IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9E
UkFXX0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsrKQotICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgaWYgKGZyYW1lQnVmZmVyLT5pc0VuYWJsZWRDb2xvckF0dGFjaG1lbnQoY29sb3JB
dHRhY2htZW50KSkKLSAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgZ2w6
OlJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0ID0gZnJhbWVCdWZmZXItPmdldENvbG9y
YnVmZmVyKGNvbG9yQXR0YWNobWVudCk7Ci0gICAgICAgICAgICAgICAgICAgICBpZiAocmVuZGVy
YnVmZmVyT2JqZWN0KQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgUmVuZGVyVGFyZ2V0MTEgKnJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtl
UmVuZGVyVGFyZ2V0MTEocmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUlIoInJlbmRlciB0YXJn
ZXQgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmZyYW1lYnVmZmVyUlRWID0gcmVuZGVy
VGFyZ2V0LT5nZXRSZW5kZXJUYXJnZXRWaWV3KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIWZyYW1lYnVmZmVyUlRWKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEVSUigicmVuZGVyIHRhcmdldCB2aWV3IHBvaW50ZXIgdW5leHBl
Y3RlZGx5IG51bGwuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBm
bG9hdCBjbGVhclZhbHVlc1s0XSA9IHsgY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLnJlZCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
bGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUuZ3JlZW4sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJQYXJhbXMuY29sb3JDbGVhclZh
bHVlLmJsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLmFscGhhIH07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+Q2xlYXJSZW5kZXJUYXJnZXRWaWV3KGZyYW1l
YnVmZmVyUlRWLCBjbGVhclZhbHVlcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoY2xlYXJQ
YXJhbXMubWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQgfHwgY2xlYXJQYXJhbXMubWFzayAmIEdM
X1NURU5DSUxfQlVGRkVSX0JJVCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1
ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0ID0gZnJhbWVCdWZmZXItPmdldERlcHRoT3JTdGVuY2ls
YnVmZmVyKCk7Ci0gICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyT2JqZWN0KQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIFJlbmRlclRhcmdldDExICpyZW5kZXJUYXJnZXQgPSBSZW5k
ZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0RGVw
dGhTdGVuY2lsKCkpOwotICAgICAgICAgICAgICAgIGlmICghcmVuZGVyVGFyZ2V0KQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHBvaW50
ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3
ICpmcmFtZWJ1ZmZlckRTViA9IHJlbmRlclRhcmdldC0+Z2V0RGVwdGhTdGVuY2lsVmlldygpOwot
ICAgICAgICAgICAgICAgIGlmICghZnJhbWVidWZmZXJEU1YpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBFUlIoImRlcHRoIHN0ZW5jaWwgdmlldyBwb2ludGVyIHVuZXhw
ZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgVUlOVCBjbGVhckZsYWdzID0gMDsKLSAgICAgICAg
ICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjbGVhckZsYWdzIHw9IEQzRDExX0NM
RUFSX0RFUFRIOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY2xlYXJQ
YXJhbXMubWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNsZWFyRmxhZ3MgfD0gRDNEMTFfQ0xFQVJfU1RFTkNJTDsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBmbG9hdCBkZXB0aENsZWFyID0gZ2w6
OmNsYW1wMDEoY2xlYXJQYXJhbXMuZGVwdGhDbGVhclZhbHVlKTsKLSAgICAgICAgICAgICAgICBV
SU5UOCBzdGVuY2lsQ2xlYXIgPSBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSAmIDB4MDAw
MDAwRkY7Ci0KLSAgICAgICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+Q2xlYXJEZXB0aFN0ZW5j
aWxWaWV3KGZyYW1lYnVmZmVyRFNWLCBjbGVhckZsYWdzLCBkZXB0aENsZWFyLCBzdGVuY2lsQ2xl
YXIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFJlbmRlcmVy
MTE6Om1hc2tlZENsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBi
b29sIHVzaW5nRXh0ZW5kZWREcmF3QnVmZmVycykKLXsKLSAgICBIUkVTVUxUIHJlc3VsdDsKLQot
ICAgIGlmICghbUNsZWFyUmVzb3VyY2VzSW5pdGlhbGl6ZWQpCi0gICAgewotICAgICAgICBBU1NF
UlQoIW1DbGVhclZCICYmICFtQ2xlYXJWUyAmJiAhbUNsZWFyU2luZ2xlUFMgJiYgIW1DbGVhck11
bHRpcGxlUFMgJiYgIW1DbGVhclNjaXNzb3JSUyAmJiAhbUNsZWFyTm9TY2lzc29yUlMpOwotCi0g
ICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIHZiRGVzYzsKLSAgICAgICAgdmJEZXNjLkJ5dGVXaWR0
aCA9IHNpemVvZihkM2QxMTo6UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KSAqIDQ7Ci0gICAgICAg
IHZiRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZTkFNSUM7Ci0gICAgICAgIHZiRGVzYy5CaW5k
RmxhZ3MgPSBEM0QxMV9CSU5EX1ZFUlRFWF9CVUZGRVI7Ci0gICAgICAgIHZiRGVzYy5DUFVBY2Nl
c3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7Ci0gICAgICAgIHZiRGVzYy5NaXNjRmxh
Z3MgPSAwOwotICAgICAgICB2YkRlc2MuU3RydWN0dXJlQnl0ZVN0cmlkZSA9IDA7Ci0KLSAgICAg
ICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlQnVmZmVyKCZ2YkRlc2MsIE5VTEwsICZtQ2xlYXJW
Qik7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpT
ZXREZWJ1Z05hbWUobUNsZWFyVkIsICJSZW5kZXJlcjExIG1hc2tlZCBjbGVhciB2ZXJ0ZXggYnVm
ZmVyIik7Ci0KLSAgICAgICAgRDNEMTFfSU5QVVRfRUxFTUVOVF9ERVNDIHF1YWRMYXlvdXRbXSA9
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHsgIlBPU0lUSU9OIiwgMCwgRFhHSV9GT1JNQVRfUjMy
RzMyQjMyX0ZMT0FULCAgICAwLCAgMCwgRDNEMTFfSU5QVVRfUEVSX1ZFUlRFWF9EQVRBLCAwIH0s
Ci0gICAgICAgICAgICB7ICJDT0xPUiIsICAgIDAsIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9G
TE9BVCwgMCwgMTIsIEQzRDExX0lOUFVUX1BFUl9WRVJURVhfREFUQSwgMCB9LAotICAgICAgICB9
OwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUlucHV0TGF5b3V0KHF1YWRMYXlv
dXQsIDIsIGdfVlNfQ2xlYXIsIHNpemVvZihnX1ZTX0NsZWFyKSwgJm1DbGVhcklMKTsKLSAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFt
ZShtQ2xlYXJJTCwgIlJlbmRlcmVyMTEgbWFza2VkIGNsZWFyIGlucHV0IGxheW91dCIpOwotCi0g
ICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVZlcnRleFNoYWRlcihnX1ZTX0NsZWFyLCBz
aXplb2YoZ19WU19DbGVhciksIE5VTEwsICZtQ2xlYXJWUyk7Ci0gICAgICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNsZWFyVlMsICJS
ZW5kZXJlcjExIG1hc2tlZCBjbGVhciB2ZXJ0ZXggc2hhZGVyIik7Ci0KLSAgICAgICAgcmVzdWx0
ID0gbURldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19DbGVhclNpbmdsZSwgc2l6ZW9mKGdf
UFNfQ2xlYXJTaW5nbGUpLCBOVUxMLCAmbUNsZWFyU2luZ2xlUFMpOwotICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhclNp
bmdsZVBTLCAiUmVuZGVyZXIxMSBtYXNrZWQgY2xlYXIgcGl4ZWwgc2hhZGVyICgxIFJUKSIpOwot
Ci0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdfUFNfQ2xlYXJN
dWx0aXBsZSwgc2l6ZW9mKGdfUFNfQ2xlYXJNdWx0aXBsZSksIE5VTEwsICZtQ2xlYXJNdWx0aXBs
ZVBTKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6
OlNldERlYnVnTmFtZShtQ2xlYXJNdWx0aXBsZVBTLCAiUmVuZGVyZXIxMSBtYXNrZWQgY2xlYXIg
cGl4ZWwgc2hhZGVyIChNUlQpIik7Ci0KLSAgICAgICAgRDNEMTFfUkFTVEVSSVpFUl9ERVNDIHJz
U2Npc3NvckRlc2M7Ci0gICAgICAgIHJzU2Npc3NvckRlc2MuRmlsbE1vZGUgPSBEM0QxMV9GSUxM
X1NPTElEOwotICAgICAgICByc1NjaXNzb3JEZXNjLkN1bGxNb2RlID0gRDNEMTFfQ1VMTF9OT05F
OwotICAgICAgICByc1NjaXNzb3JEZXNjLkZyb250Q291bnRlckNsb2Nrd2lzZSA9IEZBTFNFOwot
ICAgICAgICByc1NjaXNzb3JEZXNjLkRlcHRoQmlhcyA9IDA7Ci0gICAgICAgIHJzU2Npc3NvckRl
c2MuRGVwdGhCaWFzQ2xhbXAgPSAwLjBmOwotICAgICAgICByc1NjaXNzb3JEZXNjLlNsb3BlU2Nh
bGVkRGVwdGhCaWFzID0gMC4wZjsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5EZXB0aENsaXBFbmFi
bGUgPSBGQUxTRTsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5TY2lzc29yRW5hYmxlID0gVFJVRTsK
LSAgICAgICAgcnNTY2lzc29yRGVzYy5NdWx0aXNhbXBsZUVuYWJsZSA9IEZBTFNFOwotICAgICAg
ICByc1NjaXNzb3JEZXNjLkFudGlhbGlhc2VkTGluZUVuYWJsZSA9IEZBTFNFOwotCi0gICAgICAg
IHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVJhc3Rlcml6ZXJTdGF0ZSgmcnNTY2lzc29yRGVzYywg
Jm1DbGVhclNjaXNzb3JSUyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0g
ICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNsZWFyU2Npc3NvclJTLCAiUmVuZGVyZXIxMSBt
YXNrZWQgY2xlYXIgc2Npc3NvciByYXN0ZXJpemVyIHN0YXRlIik7Ci0KLSAgICAgICAgRDNEMTFf
UkFTVEVSSVpFUl9ERVNDIHJzTm9TY2lzc29yRGVzYzsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNj
LkZpbGxNb2RlID0gRDNEMTFfRklMTF9TT0xJRDsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLkN1
bGxNb2RlID0gRDNEMTFfQ1VMTF9OT05FOwotICAgICAgICByc05vU2Npc3NvckRlc2MuRnJvbnRD
b3VudGVyQ2xvY2t3aXNlID0gRkFMU0U7Ci0gICAgICAgIHJzTm9TY2lzc29yRGVzYy5EZXB0aEJp
YXMgPSAwOwotICAgICAgICByc05vU2Npc3NvckRlc2MuRGVwdGhCaWFzQ2xhbXAgPSAwLjBmOwot
ICAgICAgICByc05vU2Npc3NvckRlc2MuU2xvcGVTY2FsZWREZXB0aEJpYXMgPSAwLjBmOwotICAg
ICAgICByc05vU2Npc3NvckRlc2MuRGVwdGhDbGlwRW5hYmxlID0gRkFMU0U7Ci0gICAgICAgIHJz
Tm9TY2lzc29yRGVzYy5TY2lzc29yRW5hYmxlID0gRkFMU0U7Ci0gICAgICAgIHJzTm9TY2lzc29y
RGVzYy5NdWx0aXNhbXBsZUVuYWJsZSA9IEZBTFNFOwotICAgICAgICByc05vU2Npc3NvckRlc2Mu
QW50aWFsaWFzZWRMaW5lRW5hYmxlID0gRkFMU0U7Ci0KLSAgICAgICAgcmVzdWx0ID0gbURldmlj
ZS0+Q3JlYXRlUmFzdGVyaXplclN0YXRlKCZyc05vU2Npc3NvckRlc2MsICZtQ2xlYXJOb1NjaXNz
b3JSUyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDEx
OjpTZXREZWJ1Z05hbWUobUNsZWFyTm9TY2lzc29yUlMsICJSZW5kZXJlcjExIG1hc2tlZCBjbGVh
ciBubyBzY2lzc29yIHJhc3Rlcml6ZXIgc3RhdGUiKTsKLQotICAgICAgICBtQ2xlYXJSZXNvdXJj
ZXNJbml0aWFsaXplZCA9IHRydWU7Ci0gICAgfQotCi0gICAgLy8gUHJlcGFyZSB0aGUgZGVwdGgg
c3RlbmNpbCBzdGF0ZSB0byB3cml0ZSBkZXB0aCB2YWx1ZXMgaWYgdGhlIGRlcHRoIHNob3VsZCBi
ZSBjbGVhcmVkCi0gICAgLy8gYW5kIHN0ZW5jaWwgdmFsdWVzIGlmIHRoZSBzdGVuY2lsIHNob3Vs
ZCBiZSBjbGVhcmVkCi0gICAgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlIGdsRFNTdGF0ZTsKLSAgICBn
bERTU3RhdGUuZGVwdGhUZXN0ID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9ERVBUSF9CVUZGRVJf
QklUKSAhPSAwOwotICAgIGdsRFNTdGF0ZS5kZXB0aEZ1bmMgPSBHTF9BTFdBWVM7Ci0gICAgZ2xE
U1N0YXRlLmRlcHRoTWFzayA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJ
VCkgIT0gMDsKLSAgICBnbERTU3RhdGUuc3RlbmNpbFRlc3QgPSAoY2xlYXJQYXJhbXMubWFzayAm
IEdMX1NURU5DSUxfQlVGRkVSX0JJVCkgIT0gMDsKLSAgICBnbERTU3RhdGUuc3RlbmNpbEZ1bmMg
PSBHTF9BTFdBWVM7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxNYXNrID0gMDsKLSAgICBnbERTU3Rh
dGUuc3RlbmNpbEZhaWwgPSBHTF9SRVBMQUNFOwotICAgIGdsRFNTdGF0ZS5zdGVuY2lsUGFzc0Rl
cHRoRmFpbCA9IEdMX1JFUExBQ0U7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNz
ID0gR0xfUkVQTEFDRTsKLSAgICBnbERTU3RhdGUuc3RlbmNpbFdyaXRlbWFzayA9IGNsZWFyUGFy
YW1zLnN0ZW5jaWxXcml0ZU1hc2s7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxCYWNrRnVuYyA9IEdM
X0FMV0FZUzsKLSAgICBnbERTU3RhdGUuc3RlbmNpbEJhY2tNYXNrID0gMDsKLSAgICBnbERTU3Rh
dGUuc3RlbmNpbEJhY2tGYWlsID0gR0xfUkVQTEFDRTsKLSAgICBnbERTU3RhdGUuc3RlbmNpbEJh
Y2tQYXNzRGVwdGhGYWlsID0gR0xfUkVQTEFDRTsKLSAgICBnbERTU3RhdGUuc3RlbmNpbEJhY2tQ
YXNzRGVwdGhQYXNzID0gR0xfUkVQTEFDRTsKLSAgICBnbERTU3RhdGUuc3RlbmNpbEJhY2tXcml0
ZW1hc2sgPSBjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrOwotCi0gICAgaW50IHN0ZW5jaWxD
bGVhciA9IGNsZWFyUGFyYW1zLnN0ZW5jaWxDbGVhclZhbHVlICYgMHgwMDAwMDBGRjsKLQotICAg
IElEM0QxMURlcHRoU3RlbmNpbFN0YXRlICpkc1N0YXRlID0gbVN0YXRlQ2FjaGUuZ2V0RGVwdGhT
dGVuY2lsU3RhdGUoZ2xEU1N0YXRlKTsKLQotICAgIC8vIFByZXBhcmUgdGhlIGJsZW5kIHN0YXRl
IHRvIHVzZSBhIHdyaXRlIG1hc2sgaWYgdGhlIGNvbG9yIGJ1ZmZlciBzaG91bGQgYmUgY2xlYXJl
ZAotICAgIGdsOjpCbGVuZFN0YXRlIGdsQmxlbmRTdGF0ZTsKLSAgICBnbEJsZW5kU3RhdGUuYmxl
bmQgPSBmYWxzZTsKLSAgICBnbEJsZW5kU3RhdGUuc291cmNlQmxlbmRSR0IgPSBHTF9PTkU7Ci0g
ICAgZ2xCbGVuZFN0YXRlLmRlc3RCbGVuZFJHQiA9IEdMX1pFUk87Ci0gICAgZ2xCbGVuZFN0YXRl
LnNvdXJjZUJsZW5kQWxwaGEgPSBHTF9PTkU7Ci0gICAgZ2xCbGVuZFN0YXRlLmRlc3RCbGVuZEFs
cGhhID0gR0xfWkVSTzsKLSAgICBnbEJsZW5kU3RhdGUuYmxlbmRFcXVhdGlvblJHQiA9IEdMX0ZV
TkNfQUREOwotICAgIGdsQmxlbmRTdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEgPSBHTF9GVU5DX0FE
RDsKLSAgICBnbEJsZW5kU3RhdGUuY29sb3JNYXNrUmVkID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBH
TF9DT0xPUl9CVUZGRVJfQklUKSA/IGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCA6IGZhbHNlOwot
ICAgIGdsQmxlbmRTdGF0ZS5jb2xvck1hc2tHcmVlbiA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xf
Q09MT1JfQlVGRkVSX0JJVCkgPyBjbGVhclBhcmFtcy5jb2xvck1hc2tHcmVlbiA6IGZhbHNlOwot
ICAgIGdsQmxlbmRTdGF0ZS5jb2xvck1hc2tCbHVlID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9D
T0xPUl9CVUZGRVJfQklUKSA/IGNsZWFyUGFyYW1zLmNvbG9yTWFza0JsdWUgOiBmYWxzZTsKLSAg
ICBnbEJsZW5kU3RhdGUuY29sb3JNYXNrQWxwaGEgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NP
TE9SX0JVRkZFUl9CSVQpID8gY2xlYXJQYXJhbXMuY29sb3JNYXNrQWxwaGEgOiBmYWxzZTsKLSAg
ICBnbEJsZW5kU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlID0gZmFsc2U7Ci0gICAgZ2xCbGVu
ZFN0YXRlLmRpdGhlciA9IGZhbHNlOwotCi0gICAgc3RhdGljIGNvbnN0IGZsb2F0IGJsZW5kRmFj
dG9yc1s0XSA9IHsgMS4wZiwgMS4wZiwgMS4wZiwgMS4wZiB9OwotICAgIHN0YXRpYyBjb25zdCBV
SU5UIHNhbXBsZU1hc2sgPSAweEZGRkZGRkZGOwotCi0gICAgSUQzRDExQmxlbmRTdGF0ZSAqYmxl
bmRTdGF0ZSA9IG1TdGF0ZUNhY2hlLmdldEJsZW5kU3RhdGUoZ2xCbGVuZFN0YXRlKTsKLQotICAg
IC8vIFNldCB0aGUgdmVydGljZXMKLSAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVk
UmVzb3VyY2U7Ci0gICAgcmVzdWx0ID0gbURldmljZUNvbnRleHQtPk1hcChtQ2xlYXJWQiwgMCwg
RDNEMTFfTUFQX1dSSVRFX0RJU0NBUkQsIDAsICZtYXBwZWRSZXNvdXJjZSk7Ci0gICAgaWYgKEZB
SUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gbWFwIG1hc2tlZCBj
bGVhciB2ZXJ0ZXggYnVmZmVyLCBIUkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBkM2QxMTo6UG9zaXRpb25EZXB0aENvbG9yVmVydGV4ICp2ZXJ0
aWNlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZDNkMTE6OlBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCo+
KG1hcHBlZFJlc291cmNlLnBEYXRhKTsKLQotICAgIGZsb2F0IGRlcHRoQ2xlYXIgPSBnbDo6Y2xh
bXAwMShjbGVhclBhcmFtcy5kZXB0aENsZWFyVmFsdWUpOwotICAgIGQzZDExOjpTZXRQb3NpdGlv
bkRlcHRoQ29sb3JWZXJ0ZXgoJnZlcnRpY2VzWzBdLCAtMS4wZiwgIDEuMGYsIGRlcHRoQ2xlYXIs
IGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZSk7Ci0gICAgZDNkMTE6OlNldFBvc2l0aW9uRGVw
dGhDb2xvclZlcnRleCgmdmVydGljZXNbMV0sIC0xLjBmLCAtMS4wZiwgZGVwdGhDbGVhciwgY2xl
YXJQYXJhbXMuY29sb3JDbGVhclZhbHVlKTsKLSAgICBkM2QxMTo6U2V0UG9zaXRpb25EZXB0aENv
bG9yVmVydGV4KCZ2ZXJ0aWNlc1syXSwgIDEuMGYsICAxLjBmLCBkZXB0aENsZWFyLCBjbGVhclBh
cmFtcy5jb2xvckNsZWFyVmFsdWUpOwotICAgIGQzZDExOjpTZXRQb3NpdGlvbkRlcHRoQ29sb3JW
ZXJ0ZXgoJnZlcnRpY2VzWzNdLCAgMS4wZiwgLTEuMGYsIGRlcHRoQ2xlYXIsIGNsZWFyUGFyYW1z
LmNvbG9yQ2xlYXJWYWx1ZSk7Ci0KLSAgICBtRGV2aWNlQ29udGV4dC0+VW5tYXAobUNsZWFyVkIs
IDApOwotCi0gICAgLy8gQXBwbHkgc3RhdGUKLSAgICBtRGV2aWNlQ29udGV4dC0+T01TZXRCbGVu
ZFN0YXRlKGJsZW5kU3RhdGUsIGJsZW5kRmFjdG9ycywgc2FtcGxlTWFzayk7Ci0gICAgbURldmlj
ZUNvbnRleHQtPk9NU2V0RGVwdGhTdGVuY2lsU3RhdGUoZHNTdGF0ZSwgc3RlbmNpbENsZWFyKTsK
LSAgICBtRGV2aWNlQ29udGV4dC0+UlNTZXRTdGF0ZShtU2Npc3NvckVuYWJsZWQgPyBtQ2xlYXJT
Y2lzc29yUlMgOiBtQ2xlYXJOb1NjaXNzb3JSUyk7Ci0KLSAgICAvLyBBcHBseSBzaGFkZXJzCi0g
ICAgSUQzRDExUGl4ZWxTaGFkZXIgKnBpeGVsU2hhZGVyID0gdXNpbmdFeHRlbmRlZERyYXdCdWZm
ZXJzID8gbUNsZWFyTXVsdGlwbGVQUyA6IG1DbGVhclNpbmdsZVBTOwotCi0gICAgbURldmljZUNv
bnRleHQtPklBU2V0SW5wdXRMYXlvdXQobUNsZWFySUwpOwotICAgIG1EZXZpY2VDb250ZXh0LT5W
U1NldFNoYWRlcihtQ2xlYXJWUywgTlVMTCwgMCk7Ci0gICAgbURldmljZUNvbnRleHQtPlBTU2V0
U2hhZGVyKHBpeGVsU2hhZGVyLCBOVUxMLCAwKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRT
aGFkZXIoTlVMTCwgTlVMTCwgMCk7Ci0KLSAgICAvLyBBcHBseSB2ZXJ0ZXggYnVmZmVyCi0gICAg
c3RhdGljIFVJTlQgc3RyaWRlID0gc2l6ZW9mKGQzZDExOjpQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0
ZXgpOwotICAgIHN0YXRpYyBVSU5UIHN0YXJ0SWR4ID0gMDsKLSAgICBtRGV2aWNlQ29udGV4dC0+
SUFTZXRWZXJ0ZXhCdWZmZXJzKDAsIDEsICZtQ2xlYXJWQiwgJnN0cmlkZSwgJnN0YXJ0SWR4KTsK
LSAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRQcmltaXRpdmVUb3BvbG9neShEM0RfUFJJTUlUSVZF
X1RPUE9MT0dZX1RSSUFOR0xFU1RSSVApOwotCi0gICAgLy8gRHJhdyB0aGUgY2xlYXIgcXVhZAot
ICAgIG1EZXZpY2VDb250ZXh0LT5EcmF3KDQsIDApOwotCi0gICAgLy8gQ2xlYW4gdXAKLSAgICBt
YXJrQWxsU3RhdGVEaXJ0eSgpOwotfQotCi12b2lkIFJlbmRlcmVyMTE6Om1hcmtBbGxTdGF0ZURp
cnR5KCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBydEluZGV4ID0gMDsgcnRJbmRleCA8IGds
OjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTOyBydEluZGV4KyspCi0gICAgewotICAg
ICAgICBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbHNbcnRJbmRleF0gPSAwOwotICAgIH0KLSAg
ICBtQXBwbGllZERlcHRoYnVmZmVyU2VyaWFsID0gMDsKLSAgICBtQXBwbGllZFN0ZW5jaWxidWZm
ZXJTZXJpYWwgPSAwOwotICAgIG1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCA9IGZhbHNlOwotICAg
IG1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklU
UzsgaSsrKQotICAgIHsKLSAgICAgICAgbUZvcmNlU2V0VmVydGV4U2FtcGxlclN0YXRlc1tpXSA9
IHRydWU7Ci0gICAgICAgIG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1tpXSA9IDA7Ci0gICAgfQot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyBpKysp
Ci0gICAgewotICAgICAgICBtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0ZXNbaV0gPSB0cnVlOwot
ICAgICAgICBtQ3VyUGl4ZWxUZXh0dXJlU2VyaWFsc1tpXSA9IDA7Ci0gICAgfQotCi0gICAgbUZv
cmNlU2V0QmxlbmRTdGF0ZSA9IHRydWU7Ci0gICAgbUZvcmNlU2V0UmFzdGVyU3RhdGUgPSB0cnVl
OwotICAgIG1Gb3JjZVNldERlcHRoU3RlbmNpbFN0YXRlID0gdHJ1ZTsKLSAgICBtRm9yY2VTZXRT
Y2lzc29yID0gdHJ1ZTsKLSAgICBtRm9yY2VTZXRWaWV3cG9ydCA9IHRydWU7Ci0KLSAgICBtQXBw
bGllZElCU2VyaWFsID0gMDsKLSAgICBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbCA9IDA7Ci0gICAg
bUFwcGxpZWRJQk9mZnNldCA9IDA7Ci0KLSAgICBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWwg
PSAwOwotICAgIG1lbXNldCgmbUFwcGxpZWRWZXJ0ZXhDb25zdGFudHMsIDAsIHNpemVvZihkeF9W
ZXJ0ZXhDb25zdGFudHMpKTsKLSAgICBtZW1zZXQoJm1BcHBsaWVkUGl4ZWxDb25zdGFudHMsIDAs
IHNpemVvZihkeF9QaXhlbENvbnN0YW50cykpOwotCi0gICAgbUlucHV0TGF5b3V0Q2FjaGUubWFy
a0RpcnR5KCk7Ci0KLSAgICBtQ3VycmVudFZlcnRleENvbnN0YW50QnVmZmVyID0gTlVMTDsKLSAg
ICBtQ3VycmVudFBpeGVsQ29uc3RhbnRCdWZmZXIgPSBOVUxMOwotICAgIG1DdXJyZW50R2VvbWV0
cnlDb25zdGFudEJ1ZmZlciA9IE5VTEw7Ci0KLSAgICBtQ3VycmVudFByaW1pdGl2ZVRvcG9sb2d5
ID0gRDNEX1BSSU1JVElWRV9UT1BPTE9HWV9VTkRFRklORUQ7Ci19Ci0KLXZvaWQgUmVuZGVyZXIx
MTo6cmVsZWFzZURldmljZVJlc291cmNlcygpCi17Ci0gICAgbVN0YXRlQ2FjaGUuY2xlYXIoKTsK
LSAgICBtSW5wdXRMYXlvdXRDYWNoZS5jbGVhcigpOwotCi0gICAgZGVsZXRlIG1WZXJ0ZXhEYXRh
TWFuYWdlcjsKLSAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBOVUxMOwotCi0gICAgZGVsZXRlIG1J
bmRleERhdGFNYW5hZ2VyOwotICAgIG1JbmRleERhdGFNYW5hZ2VyID0gTlVMTDsKLQotICAgIGRl
bGV0ZSBtTGluZUxvb3BJQjsKLSAgICBtTGluZUxvb3BJQiA9IE5VTEw7Ci0KLSAgICBkZWxldGUg
bVRyaWFuZ2xlRmFuSUI7Ci0gICAgbVRyaWFuZ2xlRmFuSUIgPSBOVUxMOwotCi0gICAgU2FmZVJl
bGVhc2UobUNvcHlWQik7Ci0gICAgU2FmZVJlbGVhc2UobUNvcHlTYW1wbGVyKTsKLSAgICBTYWZl
UmVsZWFzZShtQ29weUlMKTsKLSAgICBTYWZlUmVsZWFzZShtQ29weUlMKTsKLSAgICBTYWZlUmVs
ZWFzZShtQ29weVZTKTsKLSAgICBTYWZlUmVsZWFzZShtQ29weVJHQkFQUyk7Ci0gICAgU2FmZVJl
bGVhc2UobUNvcHlSR0JQUyk7Ci0gICAgU2FmZVJlbGVhc2UobUNvcHlMdW1QUyk7Ci0gICAgU2Fm
ZVJlbGVhc2UobUNvcHlMdW1BbHBoYVBTKTsKLQotICAgIG1Db3B5UmVzb3VyY2VzSW5pdGlhbGl6
ZWQgPSBmYWxzZTsKLQotICAgIFNhZmVSZWxlYXNlKG1DbGVhclZCKTsKLSAgICBTYWZlUmVsZWFz
ZShtQ2xlYXJJTCk7Ci0gICAgU2FmZVJlbGVhc2UobUNsZWFyVlMpOwotICAgIFNhZmVSZWxlYXNl
KG1DbGVhclNpbmdsZVBTKTsKLSAgICBTYWZlUmVsZWFzZShtQ2xlYXJNdWx0aXBsZVBTKTsKLSAg
ICBTYWZlUmVsZWFzZShtQ2xlYXJTY2lzc29yUlMpOwotICAgIFNhZmVSZWxlYXNlKG1DbGVhck5v
U2Npc3NvclJTKTsKLQotICAgIG1DbGVhclJlc291cmNlc0luaXRpYWxpemVkID0gZmFsc2U7Ci0K
LSAgICBTYWZlUmVsZWFzZShtRHJpdmVyQ29uc3RhbnRCdWZmZXJWUyk7Ci0gICAgU2FmZVJlbGVh
c2UobURyaXZlckNvbnN0YW50QnVmZmVyUFMpOwotICAgIFNhZmVSZWxlYXNlKG1TeW5jUXVlcnkp
OwotfQotCi12b2lkIFJlbmRlcmVyMTE6Om5vdGlmeURldmljZUxvc3QoKQotewotICAgIG1EZXZp
Y2VMb3N0ID0gdHJ1ZTsKLSAgICBtRGlzcGxheS0+bm90aWZ5RGV2aWNlTG9zdCgpOwotfQotCi1i
b29sIFJlbmRlcmVyMTE6OmlzRGV2aWNlTG9zdCgpCi17Ci0gICAgcmV0dXJuIG1EZXZpY2VMb3N0
OwotfQotCi0vLyBzZXQgbm90aWZ5IHRvIHRydWUgdG8gYnJvYWRjYXN0IGEgbWVzc2FnZSB0byBh
bGwgY29udGV4dHMgb2YgdGhlIGRldmljZSBsb3NzCi1ib29sIFJlbmRlcmVyMTE6OnRlc3REZXZp
Y2VMb3N0KGJvb2wgbm90aWZ5KQotewotICAgIGJvb2wgaXNMb3N0ID0gZmFsc2U7Ci0KLSAgICAv
LyBHZXRSZW1vdmVkUmVhc29uIGlzIHVzZWQgdG8gdGVzdCBpZiB0aGUgZGV2aWNlIGlzIHJlbW92
ZWQKLSAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkdldERldmljZVJlbW92ZWRSZWFzb24o
KTsKLSAgICBpc0xvc3QgPSBkM2QxMTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KTsKLQotICAg
IGlmIChpc0xvc3QpCi0gICAgewotICAgICAgICAvLyBMb2cgZXJyb3IgaWYgdGhpcyBpcyBhIG5l
dyBkZXZpY2UgbG9zdCBldmVudAotICAgICAgICBpZiAobURldmljZUxvc3QgPT0gZmFsc2UpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiVGhlIEQzRDExIGRldmljZSB3YXMgcmVtb3ZlZDog
MHglMDhYIiwgcmVzdWx0KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGVuc3VyZSB3ZSBub3Rl
IHRoZSBkZXZpY2UgbG9zcyAtLQotICAgICAgICAvLyB3ZSdsbCBwcm9iYWJseSBnZXQgdGhpcyBk
b25lIGFnYWluIGJ5IG5vdGlmeURldmljZUxvc3QKLSAgICAgICAgLy8gYnV0IGJlc3QgdG8gcmVt
ZW1iZXIgaXQhCi0gICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCB3YW50IHRvIGNsZWFyIHRo
ZSBkZXZpY2UgbG9zcyBzdGF0dXMgaGVyZQotICAgICAgICAvLyAtLSB0aGlzIG5lZWRzIHRvIGJl
IGRvbmUgYnkgcmVzZXREZXZpY2UKLSAgICAgICAgbURldmljZUxvc3QgPSB0cnVlOwotICAgICAg
ICBpZiAobm90aWZ5KQotICAgICAgICB7Ci0gICAgICAgICAgICBub3RpZnlEZXZpY2VMb3N0KCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gaXNMb3N0OwotfQotCi1ib29sIFJlbmRl
cmVyMTE6OnRlc3REZXZpY2VSZXNldHRhYmxlKCkKLXsKLSAgICAvLyBkZXRlcm1pbmUgaWYgdGhl
IGRldmljZSBpcyByZXNldHRhYmxlIGJ5IGNyZWF0aW5nIGEgZHVtbXkgZGV2aWNlCi0gICAgUEZO
X0QzRDExX0NSRUFURV9ERVZJQ0UgRDNEMTFDcmVhdGVEZXZpY2UgPSAoUEZOX0QzRDExX0NSRUFU
RV9ERVZJQ0UpR2V0UHJvY0FkZHJlc3MobUQzZDExTW9kdWxlLCAiRDNEMTFDcmVhdGVEZXZpY2Ui
KTsKLQotICAgIGlmIChEM0QxMUNyZWF0ZURldmljZSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEQzRF9GRUFUVVJFX0xFVkVMIGZlYXR1cmVMZXZl
bHNbXSA9Ci0gICAgewotICAgICAgICBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wLAotICAgICAgICBE
M0RfRkVBVFVSRV9MRVZFTF8xMF8xLAotICAgICAgICBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wLAot
ICAgIH07Ci0KLSAgICBJRDNEMTFEZXZpY2UqIGR1bW15RGV2aWNlOwotICAgIEQzRF9GRUFUVVJF
X0xFVkVMIGR1bW15RmVhdHVyZUxldmVsOwotICAgIElEM0QxMURldmljZUNvbnRleHQqIGR1bW15
Q29udGV4dDsKLQotICAgIEhSRVNVTFQgcmVzdWx0ID0gRDNEMTFDcmVhdGVEZXZpY2UoTlVMTCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRF9EUklWRVJfVFlQRV9I
QVJEV0FSRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjaWYgZGVmaW5lZChfREVCVUcp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0QxMV9DUkVBVEVfREVW
SUNFX0RFQlVHLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2Vsc2UK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZlYXR1cmVMZXZlbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBcnJheVNpemUoZmVhdHVyZUxldmVscyksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBEM0QxMV9TREtfVkVSU0lPTiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZkdW1teURldmljZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZkdW1teUZlYXR1cmVMZXZlbCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZkdW1teUNvbnRleHQpOwotCi0gICAgaWYgKCFtRGV2
aWNlIHx8IEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIGR1bW15Q29udGV4dC0+UmVsZWFzZSgpOwotICAgIGR1bW15RGV2aWNlLT5SZWxl
YXNlKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBSZW5kZXJlcjExOjpyZWxlYXNl
KCkKLXsKLSAgICByZWxlYXNlRGV2aWNlUmVzb3VyY2VzKCk7Ci0KLSAgICBpZiAobUR4Z2lGYWN0
b3J5KQotICAgIHsKLSAgICAgICAgbUR4Z2lGYWN0b3J5LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1E
eGdpRmFjdG9yeSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1EeGdpQWRhcHRlcikKLSAgICB7
Ci0gICAgICAgIG1EeGdpQWRhcHRlci0+UmVsZWFzZSgpOwotICAgICAgICBtRHhnaUFkYXB0ZXIg
PSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtRGV2aWNlQ29udGV4dCkKLSAgICB7Ci0gICAgICAg
IG1EZXZpY2VDb250ZXh0LT5DbGVhclN0YXRlKCk7Ci0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5G
bHVzaCgpOwotICAgICAgICBtRGV2aWNlQ29udGV4dC0+UmVsZWFzZSgpOwotICAgICAgICBtRGV2
aWNlQ29udGV4dCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1EZXZpY2UpCi0gICAgewotICAg
ICAgICBtRGV2aWNlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EZXZpY2UgPSBOVUxMOwotICAgIH0K
LQotICAgIGlmIChtRDNkMTFNb2R1bGUpCi0gICAgewotICAgICAgICBGcmVlTGlicmFyeShtRDNk
MTFNb2R1bGUpOwotICAgICAgICBtRDNkMTFNb2R1bGUgPSBOVUxMOwotICAgIH0KLQotICAgIGlm
IChtRHhnaU1vZHVsZSkKLSAgICB7Ci0gICAgICAgIEZyZWVMaWJyYXJ5KG1EeGdpTW9kdWxlKTsK
LSAgICAgICAgbUR4Z2lNb2R1bGUgPSBOVUxMOwotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJlcjEx
OjpyZXNldERldmljZSgpCi17Ci0gICAgLy8gcmVjcmVhdGUgZXZlcnl0aGluZwotICAgIHJlbGVh
c2UoKTsKLSAgICBFR0xpbnQgcmVzdWx0ID0gaW5pdGlhbGl6ZSgpOwotCi0gICAgaWYgKHJlc3Vs
dCAhPSBFR0xfU1VDQ0VTUykKLSAgICB7Ci0gICAgICAgIEVSUigiQ291bGQgbm90IHJlaW5pdGlh
bGl6ZSBEM0QxMSBkZXZpY2U6ICUwOFgiLCByZXN1bHQpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgbURldmljZUxvc3QgPSBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwot
fQotCi1EV09SRCBSZW5kZXJlcjExOjpnZXRBZGFwdGVyVmVuZG9yKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbUFkYXB0ZXJEZXNjcmlwdGlvbi5WZW5kb3JJZDsKLX0KLQotc3RkOjpzdHJpbmcgUmVu
ZGVyZXIxMTo6Z2V0UmVuZGVyZXJEZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgc3RkOjpvc3Ry
aW5nc3RyZWFtIHJlbmRlcmVyU3RyaW5nOwotCi0gICAgcmVuZGVyZXJTdHJpbmcgPDwgbURlc2Ny
aXB0aW9uOwotICAgIHJlbmRlcmVyU3RyaW5nIDw8ICIgRGlyZWN0M0QxMSI7Ci0KLSAgICByZW5k
ZXJlclN0cmluZyA8PCAiIHZzXyIgPDwgZ2V0TWFqb3JTaGFkZXJNb2RlbCgpIDw8ICJfIiA8PCBn
ZXRNaW5vclNoYWRlck1vZGVsKCk7Ci0gICAgcmVuZGVyZXJTdHJpbmcgPDwgIiBwc18iIDw8IGdl
dE1ham9yU2hhZGVyTW9kZWwoKSA8PCAiXyIgPDwgZ2V0TWlub3JTaGFkZXJNb2RlbCgpOwotCi0g
ICAgcmV0dXJuIHJlbmRlcmVyU3RyaW5nLnN0cigpOwotfQotCi1HVUlEIFJlbmRlcmVyMTE6Omdl
dEFkYXB0ZXJJZGVudGlmaWVyKCkgY29uc3QKLXsKLSAgICAvLyBVc2UgdGhlIGFkYXB0ZXIgTFVJ
RCBhcyBvdXIgYWRhcHRlciBJRAotICAgIC8vIFRoaXMgbnVtYmVyIGlzIGxvY2FsIHRvIGEgbWFj
aGluZSBpcyBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgdW5pcXVlIGJldHdlZW4gcmVzdGFydHMKLSAg
ICBNRVRBX0FTU0VSVChzaXplb2YoTFVJRCkgPD0gc2l6ZW9mKEdVSUQpKTsKLSAgICBHVUlEIGFk
YXB0ZXJJZCA9IHswfTsKLSAgICBtZW1jcHkoJmFkYXB0ZXJJZCwgJm1BZGFwdGVyRGVzY3JpcHRp
b24uQWRhcHRlckx1aWQsIHNpemVvZihMVUlEKSk7Ci0gICAgcmV0dXJuIGFkYXB0ZXJJZDsKLX0K
LQotYm9vbCBSZW5kZXJlcjExOjpnZXRCR1JBVGV4dHVyZVN1cHBvcnQoKSBjb25zdAotewotICAg
IHJldHVybiBtQkdSQVRleHR1cmVTdXBwb3J0OwotfQotCi1ib29sIFJlbmRlcmVyMTE6OmdldERY
VDFUZXh0dXJlU3VwcG9ydCgpCi17Ci0gICAgcmV0dXJuIG1EWFQxVGV4dHVyZVN1cHBvcnQ7Ci19
Ci0KLWJvb2wgUmVuZGVyZXIxMTo6Z2V0RFhUM1RleHR1cmVTdXBwb3J0KCkKLXsKLSAgICByZXR1
cm4gbURYVDNUZXh0dXJlU3VwcG9ydDsKLX0KLQotYm9vbCBSZW5kZXJlcjExOjpnZXREWFQ1VGV4
dHVyZVN1cHBvcnQoKQotewotICAgIHJldHVybiBtRFhUNVRleHR1cmVTdXBwb3J0OwotfQotCi1i
b29sIFJlbmRlcmVyMTE6OmdldERlcHRoVGV4dHVyZVN1cHBvcnQoKSBjb25zdAotewotICAgIHJl
dHVybiBtRGVwdGhUZXh0dXJlU3VwcG9ydDsKLX0KLQotYm9vbCBSZW5kZXJlcjExOjpnZXRGbG9h
dDMyVGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKQotewot
ICAgICpyZW5kZXJhYmxlID0gbUZsb2F0MzJSZW5kZXJTdXBwb3J0OwotICAgICpmaWx0ZXJpbmcg
PSBtRmxvYXQzMkZpbHRlclN1cHBvcnQ7Ci0gICAgcmV0dXJuIG1GbG9hdDMyVGV4dHVyZVN1cHBv
cnQ7Ci19Ci0KLWJvb2wgUmVuZGVyZXIxMTo6Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KGJvb2wg
KmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSkKLXsKLSAgICAqcmVuZGVyYWJsZSA9IG1GbG9h
dDE2UmVuZGVyU3VwcG9ydDsKLSAgICAqZmlsdGVyaW5nID0gbUZsb2F0MTZGaWx0ZXJTdXBwb3J0
OwotICAgIHJldHVybiBtRmxvYXQxNlRleHR1cmVTdXBwb3J0OwotfQotCi1ib29sIFJlbmRlcmVy
MTE6OmdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCkKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgUmVuZGVyZXIxMTo6Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpCi17
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlcmVyMTE6OmdldFRleHR1cmVGaWx0
ZXJBbmlzb3Ryb3B5U3VwcG9ydCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWZs
b2F0IFJlbmRlcmVyMTE6OmdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkgY29uc3QKLXsKLSAgICBz
d2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCi0gICAgewotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZF
TF8xMV8wOgotICAgICAgICByZXR1cm4gRDNEMTFfTUFYX01BWEFOSVNPVFJPUFk7Ci0gICAgICBj
YXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVM
XzEwXzA6Ci0gICAgICAgIHJldHVybiBEM0QxMF9NQVhfTUFYQU5JU09UUk9QWTsKLSAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotYm9v
bCBSZW5kZXJlcjExOjpnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpCi17Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLVJhbmdlIFJlbmRlcmVyMTE6OmdldFZpZXdwb3J0Qm91bmRzKCkgY29uc3QKLXsKLSAg
ICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCi0gICAgewotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9M
RVZFTF8xMV8wOgotICAgICAgICByZXR1cm4gUmFuZ2UoRDNEMTFfVklFV1BPUlRfQk9VTkRTX01J
TiwgRDNEMTFfVklFV1BPUlRfQk9VTkRTX01BWCk7Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xF
VkVMXzEwXzE6Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6Ci0gICAgICAgIHJl
dHVybiBSYW5nZShEM0QxMF9WSUVXUE9SVF9CT1VORFNfTUlOLCBEM0QxMF9WSUVXUE9SVF9CT1VO
RFNfTUFYKTsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiBS
YW5nZSgwLCAwKTsKLSAgICB9Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJlcjExOjpnZXRNYXhW
ZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0Ci17Ci0gICAgTUVUQV9BU1NFUlQoTUFYX1RF
WFRVUkVfSU1BR0VfVU5JVFNfVlRGX1NNNCA8PSBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRF
WF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKLSAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCi0gICAg
ewotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgotICAgICAgY2FzZSBEM0RfRkVB
VFVSRV9MRVZFTF8xMF8xOgotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgotICAg
ICAgICByZXR1cm4gTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGX1NNNDsKLSAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotdW5zaWdu
ZWQgaW50IFJlbmRlcmVyMTE6OmdldE1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSBjb25z
dAotewotICAgIHJldHVybiBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKyBnZXRNYXhWZXJ0
ZXhUZXh0dXJlSW1hZ2VVbml0cygpOwotfQotCi11bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0
UmVzZXJ2ZWRWZXJ0ZXhVbmlmb3JtVmVjdG9ycygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7ICAg
Ly8gRHJpdmVyIHVuaWZvcm1zIGFyZSBzdG9yZWQgaW4gYSBzZXBhcmF0ZSBjb25zdGFudCBidWZm
ZXIKLX0KLQotdW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldFJlc2VydmVkRnJhZ21lbnRVbmlm
b3JtVmVjdG9ycygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7ICAgLy8gRHJpdmVyIHVuaWZvcm1z
IGFyZSBzdG9yZWQgaW4gYSBzZXBhcmF0ZSBjb25zdGFudCBidWZmZXIKLX0KLQotdW5zaWduZWQg
aW50IFJlbmRlcmVyMTE6OmdldE1heFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29uc3QKLXsKLSAg
ICBNRVRBX0FTU0VSVChNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SU19EM0QxMSA8PSBEM0QxMF9S
RVFfQ09OU1RBTlRfQlVGRkVSX0VMRU1FTlRfQ09VTlQpOwotICAgIEFTU0VSVChtRmVhdHVyZUxl
dmVsID49IEQzRF9GRUFUVVJFX0xFVkVMXzEwXzApOwotICAgIHJldHVybiBNQVhfVkVSVEVYX1VO
SUZPUk1fVkVDVE9SU19EM0QxMTsKLX0KLQotdW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldE1h
eEZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdAotewotICAgIE1FVEFfQVNTRVJUKE1BWF9G
UkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlNfRDNEMTEgPD0gRDNEMTBfUkVRX0NPTlNUQU5UX0JVRkZF
Ul9FTEVNRU5UX0NPVU5UKTsKLSAgICBBU1NFUlQobUZlYXR1cmVMZXZlbCA+PSBEM0RfRkVBVFVS
RV9MRVZFTF8xMF8wKTsKLSAgICByZXR1cm4gTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SU19E
M0QxMTsKLX0KLQotdW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldE1heFZhcnlpbmdWZWN0b3Jz
KCkgY29uc3QKLXsKLSAgICBNRVRBX0FTU0VSVChnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZBUllJ
TkdfVkVDVE9SUyA9PSBEM0QxMV9WU19PVVRQVVRfUkVHSVNURVJfQ09VTlQpOwotICAgIHN3aXRj
aCAobUZlYXR1cmVMZXZlbCkKLSAgICB7Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEx
XzA6Ci0gICAgICAgIHJldHVybiBEM0QxMV9WU19PVVRQVVRfUkVHSVNURVJfQ09VTlQ7Ci0gICAg
ICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xF
VkVMXzEwXzA6Ci0gICAgICAgIHJldHVybiBEM0QxMF9WU19PVVRQVVRfUkVHSVNURVJfQ09VTlQ7
Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci19Ci0KLWJvb2wgUmVuZGVyZXIxMTo6Z2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25z
dAotewotICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKLSAgICB7Ci0gICAgICBjYXNlIEQzRF9G
RUFUVVJFX0xFVkVMXzExXzA6Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6Ci0g
ICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLX0KLQotYm9vbCBSZW5kZXJlcjExOjpnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKSBjb25z
dAotewotICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKLSAgICB7Ci0gICAgICBjYXNlIEQzRF9G
RUFUVVJFX0xFVkVMXzExXzA6Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6Ci0g
ICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLX0KLQotYm9vbCBSZW5kZXJlcjExOjpnZXRJbnN0YW5jaW5nU3VwcG9ydCgpIGNvbnN0Ci17
Ci0gICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQotICAgIHsKLSAgICAgIGNhc2UgRDNEX0ZFQVRV
UkVfTEVWRUxfMTFfMDoKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKLSAgICAg
IGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
fQotCi1ib29sIFJlbmRlcmVyMTE6OmdldFNoYXJlSGFuZGxlU3VwcG9ydCgpIGNvbnN0Ci17Ci0g
ICAgLy8gV2Ugb25seSBjdXJyZW50bHkgc3VwcG9ydCBzaGFyZSBoYW5kbGVzIHdpdGggQkdSQSBz
dXJmYWNlcywgYmVjYXVzZQotICAgIC8vIGNocm9tZSBuZWVkcyBCR1JBLiBPbmNlIGNocm9tZSBm
aXhlcyB0aGlzLCB3ZSBzaG91bGQgYWx3YXlzIHN1cHBvcnQgdGhlbS4KLSAgICAvLyBQSVggZG9l
c24ndCBzZWVtIHRvIHN1cHBvcnQgdXNpbmcgc2hhcmUgaGFuZGxlcywgc28gZGlzYWJsZSB0aGVt
LgotICAgIHJldHVybiBnZXRCR1JBVGV4dHVyZVN1cHBvcnQoKSAmJiAhZ2w6OnBlcmZBY3RpdmUo
KTsKLX0KLQotYm9vbCBSZW5kZXJlcjExOjpnZXREZXJpdmF0aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0
KCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCi0gICAgewotICAgICAgY2Fz
ZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8x
MF8xOgotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci19Ci0KLWJvb2wgUmVuZGVyZXIxMTo6Z2V0UG9zdFN1YkJ1ZmZlclN1cHBvcnQo
KSBjb25zdAotewotICAgIC8vIEQzRDExIGRvZXMgbm90IHN1cHBvcnQgcHJlc2VudCB3aXRoIGRp
cnR5IHJlY3RhbmdsZXMgdW50aWwgRDNEMTEuMSBhbmQgRFhHSSAxLjIuCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1pbnQgUmVuZGVyZXIxMTo6Z2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNvbnN0Ci17
Ci0gICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQotICAgIHsKLSAgICAgIGNhc2UgRDNEX0ZFQVRV
UkVfTEVWRUxfMTFfMDogcmV0dXJuIEQzRDExX1NIQURFUl9NQUpPUl9WRVJTSU9OOyAgIC8vIDUK
LSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMTogcmV0dXJuIEQzRDEwXzFfU0hBREVS
X01BSk9SX1ZFUlNJT047IC8vIDQKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDog
cmV0dXJuIEQzRDEwX1NIQURFUl9NQUpPUl9WRVJTSU9OOyAgIC8vIDQKLSAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1pbnQgUmVuZGVyZXIx
MTo6Z2V0TWlub3JTaGFkZXJNb2RlbCgpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtRmVhdHVyZUxl
dmVsKQotICAgIHsKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDogcmV0dXJuIEQz
RDExX1NIQURFUl9NSU5PUl9WRVJTSU9OOyAgIC8vIDAKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVf
TEVWRUxfMTBfMTogcmV0dXJuIEQzRDEwXzFfU0hBREVSX01JTk9SX1ZFUlNJT047IC8vIDEKLSAg
ICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDogcmV0dXJuIEQzRDEwX1NIQURFUl9NSU5P
Ul9WRVJTSU9OOyAgIC8vIDAKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotfQotCi1mbG9hdCBSZW5kZXJlcjExOjpnZXRNYXhQb2ludFNpemUoKSBj
b25zdAotewotICAgIC8vIGNob29zZSBhIHJlYXNvbmFibGUgbWF4aW11bS4gd2UgZW5mb3JjZSB0
aGlzIGluIHRoZSBzaGFkZXIuCi0gICAgLy8gKG5iOiBvbiBhIFJhZGVvbiAyNjAweHQsIERYOSBy
ZXBvcnRzIGEgMjU2IG1heCBwb2ludCBzaXplKQotICAgIHJldHVybiAxMDI0LjBmOwotfQotCi1p
bnQgUmVuZGVyZXIxMTo6Z2V0TWF4Vmlld3BvcnREaW1lbnNpb24oKSBjb25zdAotewotICAgIC8v
IE1heGltdW0gdmlld3BvcnQgc2l6ZSBtdXN0IGJlIGF0IGxlYXN0IGFzIGxhcmdlIGFzIHRoZSBs
YXJnZXN0IHJlbmRlciBidWZmZXIgKG9yIGxhcmdlcikuCi0gICAgLy8gSW4gb3VyIGNhc2UgcmV0
dXJuIHRoZSBtYXhpbXVtIHRleHR1cmUgc2l6ZSwgd2hpY2ggaXMgdGhlIG1heGltdW0gcmVuZGVy
IGJ1ZmZlciBzaXplLgotICAgIE1FVEFfQVNTRVJUKEQzRDExX1JFUV9URVhUVVJFMkRfVV9PUl9W
X0RJTUVOU0lPTiAqIDIgLSAxIDw9IEQzRDExX1ZJRVdQT1JUX0JPVU5EU19NQVgpOwotICAgIE1F
VEFfQVNTRVJUKEQzRDEwX1JFUV9URVhUVVJFMkRfVV9PUl9WX0RJTUVOU0lPTiAqIDIgLSAxIDw9
IEQzRDEwX1ZJRVdQT1JUX0JPVU5EU19NQVgpOwotCi0gICAgc3dpdGNoIChtRmVhdHVyZUxldmVs
KQotICAgIHsKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDogCi0gICAgICAgIHJl
dHVybiBEM0QxMV9SRVFfVEVYVFVSRTJEX1VfT1JfVl9ESU1FTlNJT047ICAgLy8gMTYzODQKLSAg
ICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVf
TEVWRUxfMTBfMDogCi0gICAgICAgIHJldHVybiBEM0QxMF9SRVFfVEVYVFVSRTJEX1VfT1JfVl9E
SU1FTlNJT047ICAgLy8gODE5MgotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1pbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VGV4
dHVyZVdpZHRoKCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCi0gICAgewot
ICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOiByZXR1cm4gRDNEMTFfUkVRX1RFWFRV
UkUyRF9VX09SX1ZfRElNRU5TSU9OOyAgIC8vIDE2Mzg0Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJF
X0xFVkVMXzEwXzE6Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6IHJldHVybiBE
M0QxMF9SRVFfVEVYVFVSRTJEX1VfT1JfVl9ESU1FTlNJT047ICAgLy8gODE5MgotICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLWludCBSZW5k
ZXJlcjExOjpnZXRNYXhUZXh0dXJlSGVpZ2h0KCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1GZWF0
dXJlTGV2ZWwpCi0gICAgewotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOiByZXR1
cm4gRDNEMTFfUkVRX1RFWFRVUkUyRF9VX09SX1ZfRElNRU5TSU9OOyAgIC8vIDE2Mzg0Ci0gICAg
ICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xF
VkVMXzEwXzA6IHJldHVybiBEM0QxMF9SRVFfVEVYVFVSRTJEX1VfT1JfVl9ESU1FTlNJT047ICAg
Ly8gODE5MgotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci19Ci0KLWJvb2wgUmVuZGVyZXIxMTo6Z2V0MzJCaXRJbmRleFN1cHBvcnQoKSBjb25zdAot
ewotICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKLSAgICB7Ci0gICAgICBjYXNlIEQzRF9GRUFU
VVJFX0xFVkVMXzExXzA6IAotICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgotICAg
ICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOiByZXR1cm4gRDNEMTBfUkVRX0RSQVdJTkRF
WEVEX0lOREVYX0NPVU5UXzJfVE9fRVhQID49IDMyOyAgIC8vIHRydWUKLSAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotaW50IFJlbmRl
cmVyMTE6OmdldE1pblN3YXBJbnRlcnZhbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LWludCBSZW5kZXJlcjExOjpnZXRNYXhTd2FwSW50ZXJ2YWwoKSBjb25zdAotewotICAgIHJldHVy
biA0OwotfQotCi1pbnQgUmVuZGVyZXIxMTo6Z2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1NYXhTdXBwb3J0ZWRTYW1wbGVzOwotfQotCi1pbnQgUmVuZGVyZXIx
MTo6Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMoRFhHSV9GT1JNQVQgZm9ybWF0LCB1bnNpZ25l
ZCBpbnQgcmVxdWVzdGVkKSBjb25zdAotewotICAgIGlmIChyZXF1ZXN0ZWQgPT0gMCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIE11bHRpc2FtcGxlU3VwcG9ydE1hcDo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1NdWx0aXNhbXBsZVN1cHBvcnRNYXAuZmluZChmb3JtYXQp
OwotICAgIGlmIChpdGVyICE9IG1NdWx0aXNhbXBsZVN1cHBvcnRNYXAuZW5kKCkpCi0gICAgewot
ICAgICAgICBjb25zdCBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvJiBpbmZvID0gaXRlci0+c2Vjb25k
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gcmVxdWVzdGVkIC0gMTsgaSA8IEQzRDEx
X01BWF9NVUxUSVNBTVBMRV9TQU1QTEVfQ09VTlQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKGluZm8ucXVhbGl0eUxldmVsc1tpXSA+IDApCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGkgKyAxOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcmV0dXJuIC0xOwotfQotCi11bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4UmVu
ZGVyVGFyZ2V0cygpIGNvbnN0Ci17Ci0gICAgTUVUQV9BU1NFUlQoRDNEMTFfU0lNVUxUQU5FT1VT
X1JFTkRFUl9UQVJHRVRfQ09VTlQgPD0gZ2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZF
UlMpOwotICAgIE1FVEFfQVNTRVJUKEQzRDEwX1NJTVVMVEFORU9VU19SRU5ERVJfVEFSR0VUX0NP
VU5UIDw9IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTKTsKLQotICAgIHN3aXRj
aCAobUZlYXR1cmVMZXZlbCkKLSAgICB7Ci0gICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEx
XzA6Ci0gICAgICAgIHJldHVybiBEM0QxMV9TSU1VTFRBTkVPVVNfUkVOREVSX1RBUkdFVF9DT1VO
VDsgIC8vIDgKLSAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKLSAgICAgIGNhc2Ug
RDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKLSAgICAgICAgcmV0dXJuIEQzRDEwX1NJTVVMVEFORU9V
U19SRU5ERVJfVEFSR0VUX0NPVU5UOyAgLy8gOAotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5S
RUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotfQotCi1ib29sIFJlbmRlcmVy
MTE6OmNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpkZXN0LCBU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzb3VyY2UpCi17Ci0gICAgaWYgKHNvdXJjZSAmJiBk
ZXN0KQotICAgIHsKLSAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMV8yRCAqc291cmNlMTEgPSBUZXh0
dXJlU3RvcmFnZTExXzJEOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yRChzb3VyY2UtPmdldFN0b3Jh
Z2VJbnN0YW5jZSgpKTsKLSAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMV8yRCAqZGVzdDExID0gVGV4
dHVyZVN0b3JhZ2UxMV8yRDo6bWFrZVRleHR1cmVTdG9yYWdlMTFfMkQoZGVzdC0+Z2V0U3RvcmFn
ZUluc3RhbmNlKCkpOwotCi0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5Db3B5UmVzb3VyY2UoZGVz
dDExLT5nZXRCYXNlVGV4dHVyZSgpLCBzb3VyY2UxMS0+Z2V0QmFzZVRleHR1cmUoKSk7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBS
ZW5kZXJlcjExOjpjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJl
ICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnNvdXJjZSkKLXsKLSAgICBpZiAo
c291cmNlICYmIGRlc3QpCi0gICAgewotICAgICAgICBUZXh0dXJlU3RvcmFnZTExX0N1YmUgKnNv
dXJjZTExID0gVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV9DdWJl
KHNvdXJjZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwotICAgICAgICBUZXh0dXJlU3RvcmFnZTEx
X0N1YmUgKmRlc3QxMSA9IFRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdl
MTFfQ3ViZShkZXN0LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0KLSAgICAgICAgbURldmljZUNv
bnRleHQtPkNvcHlSZXNvdXJjZShkZXN0MTEtPmdldEJhc2VUZXh0dXJlKCksIHNvdXJjZTExLT5n
ZXRCYXNlVGV4dHVyZSgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlcmVyMTE6OmNvcHlJbWFnZShnbDo6RnJhbWVidWZm
ZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0g
ZGVzdEZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIEdMaW50IGxl
dmVsKQotewotICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gZnJhbWVidWZmZXIt
PmdldFJlYWRDb2xvcmJ1ZmZlcigpOwotICAgIGlmICghY29sb3JidWZmZXIpCi0gICAgewotICAg
ICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgY29sb3IgYnVmZmVyIGZyb20gdGhlIGZy
YW1lIGJ1ZmZlci4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
LCBmYWxzZSk7Ci0gICAgfQotCi0gICAgUmVuZGVyVGFyZ2V0MTEgKnNvdXJjZVJlbmRlclRhcmdl
dCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoY29sb3JidWZmZXItPmdldFJl
bmRlclRhcmdldCgpKTsKLSAgICBpZiAoIXNvdXJjZVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAg
ICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGZy
YW1lIGJ1ZmZlci4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
LCBmYWxzZSk7Ci0gICAgfQotCi0gICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzb3VyY2Ug
PSBzb3VyY2VSZW5kZXJUYXJnZXQtPmdldFNoYWRlclJlc291cmNlVmlldygpOwotICAgIGlmICgh
c291cmNlKQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRl
ciB0YXJnZXQgdmlldyBmcm9tIHRoZSByZW5kZXIgdGFyZ2V0LiIpOwotICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBUZXh0dXJl
U3RvcmFnZTExXzJEICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFnZTExXzJEOjptYWtlVGV4dHVy
ZVN0b3JhZ2UxMV8yRChzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgaWYgKCFz
dG9yYWdlMTEpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgdGV4
dHVyZSBzdG9yYWdlIGZyb20gdGhlIGRlc3RpbmF0aW9uLiIpOwotICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBSZW5kZXJUYXJn
ZXQxMSAqZGVzdFJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0
MTEoc3RvcmFnZTExLT5nZXRSZW5kZXJUYXJnZXQobGV2ZWwpKTsKLSAgICBpZiAoIWRlc3RSZW5k
ZXJUYXJnZXQpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVu
ZGVyIHRhcmdldCBmcm9tIHRoZSBkZXN0aW5hdGlvbiBzdG9yYWdlLiIpOwotICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBJRDNE
MTFSZW5kZXJUYXJnZXRWaWV3ICpkZXN0ID0gZGVzdFJlbmRlclRhcmdldC0+Z2V0UmVuZGVyVGFy
Z2V0VmlldygpOwotICAgIGlmICghZGVzdCkKLSAgICB7Ci0gICAgICAgIEVSUigiRmFpbGVkIHRv
IHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0IHZpZXcgZnJvbSB0aGUgZGVzdGluYXRpb24gcmVu
ZGVyIHRhcmdldC4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
LCBmYWxzZSk7Ci0gICAgfQotCi0gICAgZ2w6OlJlY3RhbmdsZSBkZXN0UmVjdDsKLSAgICBkZXN0
UmVjdC54ID0geG9mZnNldDsKLSAgICBkZXN0UmVjdC55ID0geW9mZnNldDsKLSAgICBkZXN0UmVj
dC53aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGg7Ci0gICAgZGVzdFJlY3QuaGVpZ2h0ID0gc291cmNl
UmVjdC5oZWlnaHQ7Ci0KLSAgICBib29sIHJldCA9IGNvcHlUZXh0dXJlKHNvdXJjZSwgc291cmNl
UmVjdCwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBzb3VyY2VSZW5kZXJUYXJnZXQt
PmdldEhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCwgZGVzdFJlY3Qs
IGRlc3RSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIGRlc3RSZW5kZXJUYXJnZXQtPmdldEhlaWdo
dCgpLCBkZXN0Rm9ybWF0KTsKLQotICAgIHJldHVybiByZXQ7Ci19Ci0KLWJvb2wgUmVuZGVyZXIx
MTo6Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0
YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2VDdWJlICpzdG9yYWdlLCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkKLXsKLSAgICBn
bDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRSZWFkQ29sb3Ji
dWZmZXIoKTsKLSAgICBpZiAoIWNvbG9yYnVmZmVyKQotICAgIHsKLSAgICAgICAgRVJSKCJGYWls
ZWQgdG8gcmV0cmlldmUgdGhlIGNvbG9yIGJ1ZmZlciBmcm9tIHRoZSBmcmFtZSBidWZmZXIuIik7
Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAg
IH0KLQotICAgIFJlbmRlclRhcmdldDExICpzb3VyY2VSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJn
ZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGNvbG9yYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSk7
Ci0gICAgaWYgKCFzb3VyY2VSZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxl
ZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCBmcm9tIHRoZSBmcmFtZSBidWZmZXIuIik7
Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAg
IH0KLQotICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc291cmNlID0gc291cmNlUmVuZGVy
VGFyZ2V0LT5nZXRTaGFkZXJSZXNvdXJjZVZpZXcoKTsKLSAgICBpZiAoIXNvdXJjZSkKLSAgICB7
Ci0gICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0IHZpZXcg
ZnJvbSB0aGUgcmVuZGVyIHRhcmdldC4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgVGV4dHVyZVN0b3JhZ2UxMV9DdWJl
ICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFnZTExX0N1YmU6Om1ha2VUZXh0dXJlU3RvcmFnZTEx
X0N1YmUoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwotICAgIGlmICghc3RvcmFnZTEx
KQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHRleHR1cmUgc3Rv
cmFnZSBmcm9tIHRoZSBkZXN0aW5hdGlvbi4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgUmVuZGVyVGFyZ2V0MTEgKmRl
c3RSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKHN0b3Jh
Z2UxMS0+Z2V0UmVuZGVyVGFyZ2V0KHRhcmdldCwgbGV2ZWwpKTsKLSAgICBpZiAoIWRlc3RSZW5k
ZXJUYXJnZXQpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVu
ZGVyIHRhcmdldCBmcm9tIHRoZSBkZXN0aW5hdGlvbiBzdG9yYWdlLiIpOwotICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBJRDNE
MTFSZW5kZXJUYXJnZXRWaWV3ICpkZXN0ID0gZGVzdFJlbmRlclRhcmdldC0+Z2V0UmVuZGVyVGFy
Z2V0VmlldygpOwotICAgIGlmICghZGVzdCkKLSAgICB7Ci0gICAgICAgIEVSUigiRmFpbGVkIHRv
IHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0IHZpZXcgZnJvbSB0aGUgZGVzdGluYXRpb24gcmVu
ZGVyIHRhcmdldC4iKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
LCBmYWxzZSk7Ci0gICAgfQotCi0gICAgZ2w6OlJlY3RhbmdsZSBkZXN0UmVjdDsKLSAgICBkZXN0
UmVjdC54ID0geG9mZnNldDsKLSAgICBkZXN0UmVjdC55ID0geW9mZnNldDsKLSAgICBkZXN0UmVj
dC53aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGg7Ci0gICAgZGVzdFJlY3QuaGVpZ2h0ID0gc291cmNl
UmVjdC5oZWlnaHQ7Ci0KLSAgICBib29sIHJldCA9IGNvcHlUZXh0dXJlKHNvdXJjZSwgc291cmNl
UmVjdCwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBzb3VyY2VSZW5kZXJUYXJnZXQt
PmdldEhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCwgZGVzdFJlY3Qs
IGRlc3RSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIGRlc3RSZW5kZXJUYXJnZXQtPmdldEhlaWdo
dCgpLCBkZXN0Rm9ybWF0KTsKLQotICAgIHJldHVybiByZXQ7Ci19Ci0KLWJvb2wgUmVuZGVyZXIx
MTo6Y29weVRleHR1cmUoSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzb3VyY2UsIGNvbnN0IGds
OjpSZWN0YW5nbGUgJnNvdXJjZUFyZWEsIHVuc2lnbmVkIGludCBzb3VyY2VXaWR0aCwgdW5zaWdu
ZWQgaW50IHNvdXJjZUhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUQzRDEx
UmVuZGVyVGFyZ2V0VmlldyAqZGVzdCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZGVzdEFyZWEsIHVu
c2lnbmVkIGludCBkZXN0V2lkdGgsIHVuc2lnbmVkIGludCBkZXN0SGVpZ2h0LCBHTGVudW0gZGVz
dEZvcm1hdCkKLXsKLSAgICBIUkVTVUxUIHJlc3VsdDsKLQotICAgIGlmICghbUNvcHlSZXNvdXJj
ZXNJbml0aWFsaXplZCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghbUNvcHlWQiAmJiAhbUNvcHlT
YW1wbGVyICYmICFtQ29weUlMICYmICFtQ29weVZTICYmICFtQ29weVJHQkFQUyAmJiAhbUNvcHlS
R0JQUyAmJiAhbUNvcHlMdW1QUyAmJiAhbUNvcHlMdW1BbHBoYVBTKTsKLQotICAgICAgICBEM0Qx
MV9CVUZGRVJfREVTQyB2YkRlc2M7Ci0gICAgICAgIHZiRGVzYy5CeXRlV2lkdGggPSBzaXplb2Yo
ZDNkMTE6OlBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgpICogNDsKLSAgICAgICAgdmJEZXNjLlVzYWdl
ID0gRDNEMTFfVVNBR0VfRFlOQU1JQzsKLSAgICAgICAgdmJEZXNjLkJpbmRGbGFncyA9IEQzRDEx
X0JJTkRfVkVSVEVYX0JVRkZFUjsKLSAgICAgICAgdmJEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNE
MTFfQ1BVX0FDQ0VTU19XUklURTsKLSAgICAgICAgdmJEZXNjLk1pc2NGbGFncyA9IDA7Ci0gICAg
ICAgIHZiRGVzYy5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKLQotICAgICAgICByZXN1bHQgPSBt
RGV2aWNlLT5DcmVhdGVCdWZmZXIoJnZiRGVzYywgTlVMTCwgJm1Db3B5VkIpOwotICAgICAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1D
b3B5VkIsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSB2ZXJ0ZXggYnVmZmVyIik7Ci0KLSAgICAg
ICAgRDNEMTFfU0FNUExFUl9ERVNDIHNhbXBsZXJEZXNjOwotICAgICAgICBzYW1wbGVyRGVzYy5G
aWx0ZXIgPSBEM0QxMV9GSUxURVJfTUlOX01BR19NSVBfTElORUFSOwotICAgICAgICBzYW1wbGVy
RGVzYy5BZGRyZXNzVSA9IEQzRDExX1RFWFRVUkVfQUREUkVTU19DTEFNUDsKLSAgICAgICAgc2Ft
cGxlckRlc2MuQWRkcmVzc1YgPSBEM0QxMV9URVhUVVJFX0FERFJFU1NfQ0xBTVA7Ci0gICAgICAg
IHNhbXBsZXJEZXNjLkFkZHJlc3NXID0gRDNEMTFfVEVYVFVSRV9BRERSRVNTX0NMQU1QOwotICAg
ICAgICBzYW1wbGVyRGVzYy5NaXBMT0RCaWFzID0gMC4wZjsKLSAgICAgICAgc2FtcGxlckRlc2Mu
TWF4QW5pc290cm9weSA9IDA7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkNvbXBhcmlzb25GdW5jID0g
RDNEMTFfQ09NUEFSSVNPTl9ORVZFUjsKLSAgICAgICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3Jb
MF0gPSAwLjBmOwotICAgICAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclsxXSA9IDAuMGY7Ci0g
ICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzJdID0gMC4wZjsKLSAgICAgICAgc2FtcGxl
ckRlc2MuQm9yZGVyQ29sb3JbM10gPSAwLjBmOwotICAgICAgICBzYW1wbGVyRGVzYy5NaW5MT0Qg
PSAwLjBmOwotICAgICAgICBzYW1wbGVyRGVzYy5NYXhMT0QgPSAwLjBmOwotCi0gICAgICAgIHJl
c3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVNhbXBsZXJTdGF0ZSgmc2FtcGxlckRlc2MsICZtQ29weVNh
bXBsZXIpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2Qx
MTo6U2V0RGVidWdOYW1lKG1Db3B5U2FtcGxlciwgIlJlbmRlcmVyMTEgY29weSBzYW1wbGVyIik7
Ci0KLSAgICAgICAgRDNEMTFfSU5QVVRfRUxFTUVOVF9ERVNDIHF1YWRMYXlvdXRbXSA9Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIHsgIlBPU0lUSU9OIiwgMCwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZM
T0FULCAwLCAwLCBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAgfSwKLSAgICAgICAgICAg
IHsgIlRFWENPT1JEIiwgMCwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCAwLCA4LCBEM0QxMV9J
TlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAgfSwKLSAgICAgICAgfTsKLQotICAgICAgICByZXN1bHQg
PSBtRGV2aWNlLT5DcmVhdGVJbnB1dExheW91dChxdWFkTGF5b3V0LCAyLCBnX1ZTX1Bhc3N0aHJv
dWdoLCBzaXplb2YoZ19WU19QYXNzdGhyb3VnaCksICZtQ29weUlMKTsKLSAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ29weUlM
LCAiUmVuZGVyZXIxMSBjb3B5IHRleHR1cmUgaW5wdXQgbGF5b3V0Iik7Ci0KLSAgICAgICAgcmVz
dWx0ID0gbURldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKGdfVlNfUGFzc3Rocm91Z2gsIHNpemVv
ZihnX1ZTX1Bhc3N0aHJvdWdoKSwgTlVMTCwgJm1Db3B5VlMpOwotICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5VlMsICJS
ZW5kZXJlcjExIGNvcHkgdGV4dHVyZSB2ZXJ0ZXggc2hhZGVyIik7Ci0KLSAgICAgICAgcmVzdWx0
ID0gbURldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19QYXNzdGhyb3VnaFJHQkEsIHNpemVv
ZihnX1BTX1Bhc3N0aHJvdWdoUkdCQSksIE5VTEwsICZtQ29weVJHQkFQUyk7Ci0gICAgICAgIEFT
U0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNv
cHlSR0JBUFMsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSBSR0JBIHBpeGVsIHNoYWRlciIpOwot
Ci0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdfUFNfUGFzc3Ro
cm91Z2hSR0IsIHNpemVvZihnX1BTX1Bhc3N0aHJvdWdoUkdCKSwgTlVMTCwgJm1Db3B5UkdCUFMp
OwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0
RGVidWdOYW1lKG1Db3B5UkdCUFMsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSBSR0IgcGl4ZWwg
c2hhZGVyIik7Ci0KLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIo
Z19QU19QYXNzdGhyb3VnaEx1bSwgc2l6ZW9mKGdfUFNfUGFzc3Rocm91Z2hMdW0pLCBOVUxMLCAm
bUNvcHlMdW1QUyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAg
IGQzZDExOjpTZXREZWJ1Z05hbWUobUNvcHlMdW1QUywgIlJlbmRlcmVyMTEgY29weSB0ZXh0dXJl
IGx1bWluYW5jZSBwaXhlbCBzaGFkZXIiKTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5D
cmVhdGVQaXhlbFNoYWRlcihnX1BTX1Bhc3N0aHJvdWdoTHVtQWxwaGEsIHNpemVvZihnX1BTX1Bh
c3N0aHJvdWdoTHVtQWxwaGEpLCBOVUxMLCAmbUNvcHlMdW1BbHBoYVBTKTsKLSAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ29w
eUx1bUFscGhhUFMsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSBsdW1pbmFuY2UgYWxwaGEgcGl4
ZWwgc2hhZGVyIik7Ci0KLSAgICAgICAgbUNvcHlSZXNvdXJjZXNJbml0aWFsaXplZCA9IHRydWU7
Ci0gICAgfQotCi0gICAgLy8gVmVyaWZ5IHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZWEg
c2l6ZXMKLSAgICBpZiAoc291cmNlQXJlYS54IDwgMCB8fCBzb3VyY2VBcmVhLnggKyBzb3VyY2VB
cmVhLndpZHRoID4gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VXaWR0aCkgfHwKLSAgICAgICAgc291
cmNlQXJlYS55IDwgMCB8fCBzb3VyY2VBcmVhLnkgKyBzb3VyY2VBcmVhLmhlaWdodCA+IHN0YXRp
Y19jYXN0PGludD4oc291cmNlSGVpZ2h0KSB8fAotICAgICAgICBkZXN0QXJlYS54IDwgMCB8fCBk
ZXN0QXJlYS54ICsgZGVzdEFyZWEud2lkdGggPiBzdGF0aWNfY2FzdDxpbnQ+KGRlc3RXaWR0aCkg
fHwKLSAgICAgICAgZGVzdEFyZWEueSA8IDAgfHwgZGVzdEFyZWEueSArIGRlc3RBcmVhLmhlaWdo
dCA+IHN0YXRpY19jYXN0PGludD4oZGVzdEhlaWdodCkpCi0gICAgewotICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICAvLyBTZXQg
dmVydGljZXMKLSAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7Ci0g
ICAgcmVzdWx0ID0gbURldmljZUNvbnRleHQtPk1hcChtQ29weVZCLCAwLCBEM0QxMV9NQVBfV1JJ
VEVfRElTQ0FSRCwgMCwgJm1hcHBlZFJlc291cmNlKTsKLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
Ci0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byBtYXAgdmVydGV4IGJ1ZmZlciBmb3IgdGV4
dHVyZSBjb3B5LCBIUkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAgIH0KLQotICAgIGQzZDExOjpQb3Np
dGlvblRleENvb3JkVmVydGV4ICp2ZXJ0aWNlcyA9IHN0YXRpY19jYXN0PGQzZDExOjpQb3NpdGlv
blRleENvb3JkVmVydGV4Kj4obWFwcGVkUmVzb3VyY2UucERhdGEpOwotCi0gICAgLy8gQ3JlYXRl
IGEgcXVhZCBpbiBob21vZ2VuZW91cyBjb29yZGluYXRlcwotICAgIGZsb2F0IHgxID0gKGRlc3RB
cmVhLnggLyBmbG9hdChkZXN0V2lkdGgpKSAqIDIuMGYgLSAxLjBmOwotICAgIGZsb2F0IHkxID0g
KChkZXN0SGVpZ2h0IC0gZGVzdEFyZWEueSAtIGRlc3RBcmVhLmhlaWdodCkgLyBmbG9hdChkZXN0
SGVpZ2h0KSkgKiAyLjBmIC0gMS4wZjsKLSAgICBmbG9hdCB4MiA9ICgoZGVzdEFyZWEueCArIGRl
c3RBcmVhLndpZHRoKSAvIGZsb2F0KGRlc3RXaWR0aCkpICogMi4wZiAtIDEuMGY7Ci0gICAgZmxv
YXQgeTIgPSAoKGRlc3RIZWlnaHQgLSBkZXN0QXJlYS55KSAvIGZsb2F0KGRlc3RIZWlnaHQpKSAq
IDIuMGYgLSAxLjBmOwotCi0gICAgZmxvYXQgdTEgPSBzb3VyY2VBcmVhLnggLyBmbG9hdChzb3Vy
Y2VXaWR0aCk7Ci0gICAgZmxvYXQgdjEgPSBzb3VyY2VBcmVhLnkgLyBmbG9hdChzb3VyY2VIZWln
aHQpOwotICAgIGZsb2F0IHUyID0gKHNvdXJjZUFyZWEueCArIHNvdXJjZUFyZWEud2lkdGgpIC8g
ZmxvYXQoc291cmNlV2lkdGgpOwotICAgIGZsb2F0IHYyID0gKHNvdXJjZUFyZWEueSArIHNvdXJj
ZUFyZWEuaGVpZ2h0KSAvIGZsb2F0KHNvdXJjZUhlaWdodCk7Ci0KLSAgICBkM2QxMTo6U2V0UG9z
aXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNbMF0sIHgxLCB5MSwgdTEsIHYyKTsKLSAgICBk
M2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNbMV0sIHgxLCB5MiwgdTEs
IHYxKTsKLSAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNbMl0s
IHgyLCB5MSwgdTIsIHYyKTsKLSAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgm
dmVydGljZXNbM10sIHgyLCB5MiwgdTIsIHYxKTsKLQotICAgIG1EZXZpY2VDb250ZXh0LT5Vbm1h
cChtQ29weVZCLCAwKTsKLQotICAgIHN0YXRpYyBVSU5UIHN0cmlkZSA9IHNpemVvZihkM2QxMTo6
UG9zaXRpb25UZXhDb29yZFZlcnRleCk7Ci0gICAgc3RhdGljIFVJTlQgc3RhcnRJZHggPSAwOwot
ICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldFZlcnRleEJ1ZmZlcnMoMCwgMSwgJm1Db3B5VkIsICZz
dHJpZGUsICZzdGFydElkeCk7Ci0KLSAgICAvLyBBcHBseSBzdGF0ZQotICAgIG1EZXZpY2VDb250
ZXh0LT5PTVNldEJsZW5kU3RhdGUoTlVMTCwgTlVMTCwgMHhGRkZGRkZGKTsKLSAgICBtRGV2aWNl
Q29udGV4dC0+T01TZXREZXB0aFN0ZW5jaWxTdGF0ZShOVUxMLCAweEZGRkZGRkZGKTsKLSAgICBt
RGV2aWNlQ29udGV4dC0+UlNTZXRTdGF0ZShOVUxMKTsKLQotICAgIC8vIEFwcGx5IHNoYWRlcnMK
LSAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRJbnB1dExheW91dChtQ29weUlMKTsKLSAgICBtRGV2
aWNlQ29udGV4dC0+SUFTZXRQcmltaXRpdmVUb3BvbG9neShEM0RfUFJJTUlUSVZFX1RPUE9MT0dZ
X1RSSUFOR0xFU1RSSVApOwotICAgIG1EZXZpY2VDb250ZXh0LT5WU1NldFNoYWRlcihtQ29weVZT
LCBOVUxMLCAwKTsKLQotICAgIElEM0QxMVBpeGVsU2hhZGVyICpwcyA9IE5VTEw7Ci0gICAgc3dp
dGNoKGRlc3RGb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBHTF9SR0JBOiAgICAgICAgICAgIHBz
ID0gbUNvcHlSR0JBUFM7ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCOiAgICAgICAgICAg
ICBwcyA9IG1Db3B5UkdCUFM7ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FMUEhBOiAgICAg
ICAgICAgcHMgPSBtQ29weVJHQkFQUzsgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CR1JBX0VY
VDogICAgICAgIHBzID0gbUNvcHlSR0JBUFM7ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVN
SU5BTkNFOiAgICAgICBwcyA9IG1Db3B5THVtUFM7ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X0xVTUlOQU5DRV9BTFBIQTogcHMgPSBtQ29weUx1bUFscGhhUFM7IGJyZWFrOwotICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsgIHBzID0gTlVMTDsgICAgICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIocHMsIE5VTEwsIDApOwotICAgIG1E
ZXZpY2VDb250ZXh0LT5HU1NldFNoYWRlcihOVUxMLCBOVUxMLCAwKTsKLQotICAgIC8vIFVuc2V0
IHRoZSBjdXJyZW50bHkgYm91bmQgc2hhZGVyIHJlc291cmNlIHRvIGF2b2lkIGNvbmZsaWN0cwot
ICAgIHN0YXRpYyBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmNvbnN0IG51bGxTUlYgPSBOVUxM
OwotICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlclJlc291cmNlcygwLCAxLCAmbnVsbFNS
Vik7Ci0KLSAgICAvLyBBcHBseSByZW5kZXIgdGFyZ2V0Ci0gICAgc2V0T25lVGltZVJlbmRlclRh
cmdldChkZXN0KTsKLQotICAgIC8vIFNldCB0aGUgdmlld3BvcnQKLSAgICBEM0QxMV9WSUVXUE9S
VCB2aWV3cG9ydDsKLSAgICB2aWV3cG9ydC5Ub3BMZWZ0WCA9IDA7Ci0gICAgdmlld3BvcnQuVG9w
TGVmdFkgPSAwOwotICAgIHZpZXdwb3J0LldpZHRoID0gZGVzdFdpZHRoOwotICAgIHZpZXdwb3J0
LkhlaWdodCA9IGRlc3RIZWlnaHQ7Ci0gICAgdmlld3BvcnQuTWluRGVwdGggPSAwLjBmOwotICAg
IHZpZXdwb3J0Lk1heERlcHRoID0gMS4wZjsKLSAgICBtRGV2aWNlQ29udGV4dC0+UlNTZXRWaWV3
cG9ydHMoMSwgJnZpZXdwb3J0KTsKLQotICAgIC8vIEFwcGx5IHRleHR1cmVzCi0gICAgbURldmlj
ZUNvbnRleHQtPlBTU2V0U2hhZGVyUmVzb3VyY2VzKDAsIDEsICZzb3VyY2UpOwotICAgIG1EZXZp
Y2VDb250ZXh0LT5QU1NldFNhbXBsZXJzKDAsIDEsICZtQ29weVNhbXBsZXIpOwotCi0gICAgLy8g
RHJhdyB0aGUgcXVhZAotICAgIG1EZXZpY2VDb250ZXh0LT5EcmF3KDQsIDApOwotCi0gICAgLy8g
VW5iaW5kIHRleHR1cmVzIGFuZCByZW5kZXIgdGFyZ2V0cyBhbmQgdmVydGV4IGJ1ZmZlcgotICAg
IG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlclJlc291cmNlcygwLCAxLCAmbnVsbFNSVik7Ci0K
LSAgICB1bmFwcGx5UmVuZGVyVGFyZ2V0cygpOwotCi0gICAgVUlOVCB6ZXJvID0gMDsKLSAgICBJ
RDNEMTFCdWZmZXIgKmNvbnN0IG51bGxCdWZmZXIgPSBOVUxMOwotICAgIG1EZXZpY2VDb250ZXh0
LT5JQVNldFZlcnRleEJ1ZmZlcnMoMCwgMSwgJm51bGxCdWZmZXIsICZ6ZXJvLCAmemVybyk7Ci0K
LSAgICBtYXJrQWxsU3RhdGVEaXJ0eSgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQg
UmVuZGVyZXIxMTo6dW5hcHBseVJlbmRlclRhcmdldHMoKQotewotICAgIHNldE9uZVRpbWVSZW5k
ZXJUYXJnZXQoTlVMTCk7Ci19Ci0KLXZvaWQgUmVuZGVyZXIxMTo6c2V0T25lVGltZVJlbmRlclRh
cmdldChJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpyZW5kZXJUYXJnZXRWaWV3KQotewotICAgIElE
M0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0dkFycmF5W2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJB
V19CVUZGRVJTXSA9IHtOVUxMfTsKLQotICAgIHJ0dkFycmF5WzBdID0gcmVuZGVyVGFyZ2V0Vmll
dzsKLQotICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldFJlbmRlclRhcmdldHMoZ2V0TWF4UmVuZGVy
VGFyZ2V0cygpLCBydHZBcnJheSwgTlVMTCk7Ci0KLSAgICAvLyBEbyBub3QgcHJlc2VydmUgdGhl
IHNlcmlhbCBmb3IgdGhpcyBvbmUtdGltZS11c2UgcmVuZGVyIHRhcmdldAotICAgIGZvciAodW5z
aWduZWQgaW50IHJ0SW5kZXggPSAwOyBydEluZGV4IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9E
UkFXX0JVRkZFUlM7IHJ0SW5kZXgrKykKLSAgICB7Ci0gICAgICAgIG1BcHBsaWVkUmVuZGVyVGFy
Z2V0U2VyaWFsc1tydEluZGV4XSA9IDA7Ci0gICAgfQotfQotCi1SZW5kZXJUYXJnZXQgKlJlbmRl
cmVyMTE6OmNyZWF0ZVJlbmRlclRhcmdldChTd2FwQ2hhaW4gKnN3YXBDaGFpbiwgYm9vbCBkZXB0
aCkKLXsKLSAgICBTd2FwQ2hhaW4xMSAqc3dhcENoYWluMTEgPSBTd2FwQ2hhaW4xMTo6bWFrZVN3
YXBDaGFpbjExKHN3YXBDaGFpbik7Ci0gICAgUmVuZGVyVGFyZ2V0MTEgKnJlbmRlclRhcmdldCA9
IE5VTEw7Ci0KLSAgICBpZiAoZGVwdGgpCi0gICAgewotICAgICAgICAvLyBOb3RlOiBkZXB0aCBz
dGVuY2lsIG1heSBiZSBOVUxMIGZvciAwIHNpemVkIHN1cmZhY2VzCi0gICAgICAgIHJlbmRlclRh
cmdldCA9IG5ldyBSZW5kZXJUYXJnZXQxMSh0aGlzLCBzd2FwQ2hhaW4xMS0+Z2V0RGVwdGhTdGVu
Y2lsKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwQ2hh
aW4xMS0+Z2V0RGVwdGhTdGVuY2lsVGV4dHVyZSgpLCBOVUxMLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldFdpZHRoKCksIHN3YXBDaGFp
bjExLT5nZXRIZWlnaHQoKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIC8vIE5v
dGU6IHJlbmRlciB0YXJnZXQgbWF5IGJlIE5VTEwgZm9yIDAgc2l6ZWQgc3VyZmFjZXMKLSAgICAg
ICAgcmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldDExKHRoaXMsIHN3YXBDaGFpbjExLT5n
ZXRSZW5kZXJUYXJnZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN3YXBDaGFpbjExLT5nZXRPZmZzY3JlZW5UZXh0dXJlKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwQ2hhaW4xMS0+Z2V0UmVuZGVyVGFyZ2V0U2hh
ZGVyUmVzb3VyY2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN3YXBDaGFpbjExLT5nZXRXaWR0aCgpLCBzd2FwQ2hhaW4xMS0+Z2V0SGVpZ2h0KCkpOwotICAg
IH0KLSAgICByZXR1cm4gcmVuZGVyVGFyZ2V0OwotfQotCi1SZW5kZXJUYXJnZXQgKlJlbmRlcmVy
MTE6OmNyZWF0ZVJlbmRlclRhcmdldChpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsIEdMc2l6ZWkgc2FtcGxlcywgYm9vbCBkZXB0aCkKLXsKLSAgICBSZW5kZXJUYXJnZXQxMSAq
cmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldDExKHRoaXMsIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgc2FtcGxlcywgZGVwdGgpOwotICAgIHJldHVybiByZW5kZXJUYXJnZXQ7Ci19Ci0KLVNo
YWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyMTE6OmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1
bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCByeDo6U2hhZGVyVHlwZSB0eXBlKQotewotICAgIFNoYWRl
ckV4ZWN1dGFibGUxMSAqZXhlY3V0YWJsZSA9IE5VTEw7Ci0KLSAgICBzd2l0Y2ggKHR5cGUpCi0g
ICAgewotICAgICAgY2FzZSByeDo6U0hBREVSX1ZFUlRFWDoKLSAgICAgICAgewotICAgICAgICAg
ICAgSUQzRDExVmVydGV4U2hhZGVyICp2c2hhZGVyID0gTlVMTDsKLSAgICAgICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKGZ1bmN0aW9uLCBsZW5ndGgs
IE5VTEwsICZ2c2hhZGVyKTsKLSAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7
Ci0KLSAgICAgICAgICAgIGlmICh2c2hhZGVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGV4ZWN1dGFibGUgPSBuZXcgU2hhZGVyRXhlY3V0YWJsZTExKGZ1bmN0aW9uLCBsZW5ndGgs
IHZzaGFkZXIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSByeDo6U0hBREVSX1BJWEVMOgotICAgICAgICB7Ci0gICAgICAgICAgICBJRDNEMTFQ
aXhlbFNoYWRlciAqcHNoYWRlciA9IE5VTEw7Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGZ1bmN0aW9uLCBsZW5ndGgsIE5VTEwsICZwc2hh
ZGVyKTsKLSAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAg
ICAgIGlmIChwc2hhZGVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGV4ZWN1dGFi
bGUgPSBuZXcgU2hhZGVyRXhlY3V0YWJsZTExKGZ1bmN0aW9uLCBsZW5ndGgsIHBzaGFkZXIpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSByeDo6
U0hBREVSX0dFT01FVFJZOgotICAgICAgICB7Ci0gICAgICAgICAgICBJRDNEMTFHZW9tZXRyeVNo
YWRlciAqZ3NoYWRlciA9IE5VTEw7Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZp
Y2UtPkNyZWF0ZUdlb21ldHJ5U2hhZGVyKGZ1bmN0aW9uLCBsZW5ndGgsIE5VTEwsICZnc2hhZGVy
KTsKLSAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAgICAg
IGlmIChnc2hhZGVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUg
PSBuZXcgU2hhZGVyRXhlY3V0YWJsZTExKGZ1bmN0aW9uLCBsZW5ndGgsIGdzaGFkZXIpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGV4ZWN1dGFibGU7Ci19Ci0KLVNoYWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyMTE6OmNvbXBpbGVU
b0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRlckhMU0ws
IHJ4OjpTaGFkZXJUeXBlIHR5cGUsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91bmQpCi17Ci0g
ICAgY29uc3QgY2hhciAqcHJvZmlsZSA9IE5VTEw7Ci0KLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAg
ewotICAgICAgY2FzZSByeDo6U0hBREVSX1ZFUlRFWDoKLSAgICAgICAgcHJvZmlsZSA9ICJ2c180
XzAiOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ugcng6OlNIQURFUl9QSVhFTDoKLSAgICAg
ICAgcHJvZmlsZSA9ICJwc180XzAiOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ugcng6OlNI
QURFUl9HRU9NRVRSWToKLSAgICAgICAgcHJvZmlsZSA9ICJnc180XzAiOwotICAgICAgICBicmVh
azsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVy
biBOVUxMOwotICAgIH0KLQotICAgIElEM0RCbG9iICpiaW5hcnkgPSAoSUQzREJsb2IqKWNvbXBp
bGVUb0JpbmFyeShpbmZvTG9nLCBzaGFkZXJITFNMLCBwcm9maWxlLCBEM0RDT01QSUxFX09QVElN
SVpBVElPTl9MRVZFTDAsIGZhbHNlKTsKLSAgICBpZiAoIWJpbmFyeSkKLSAgICAgICAgcmV0dXJu
IE5VTEw7Ci0KLSAgICBTaGFkZXJFeGVjdXRhYmxlICpleGVjdXRhYmxlID0gbG9hZEV4ZWN1dGFi
bGUoKERXT1JEICopYmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksIGJpbmFyeS0+R2V0QnVmZmVy
U2l6ZSgpLCB0eXBlKTsKLSAgICBiaW5hcnktPlJlbGVhc2UoKTsKLQotICAgIHJldHVybiBleGVj
dXRhYmxlOwotfQotCi1WZXJ0ZXhCdWZmZXIgKlJlbmRlcmVyMTE6OmNyZWF0ZVZlcnRleEJ1ZmZl
cigpCi17Ci0gICAgcmV0dXJuIG5ldyBWZXJ0ZXhCdWZmZXIxMSh0aGlzKTsKLX0KLQotSW5kZXhC
dWZmZXIgKlJlbmRlcmVyMTE6OmNyZWF0ZUluZGV4QnVmZmVyKCkKLXsKLSAgICByZXR1cm4gbmV3
IEluZGV4QnVmZmVyMTEodGhpcyk7Ci19Ci0KLUJ1ZmZlclN0b3JhZ2UgKlJlbmRlcmVyMTE6OmNy
ZWF0ZUJ1ZmZlclN0b3JhZ2UoKQotewotICAgIHJldHVybiBuZXcgQnVmZmVyU3RvcmFnZTExKHRo
aXMpOwotfQotCi1RdWVyeUltcGwgKlJlbmRlcmVyMTE6OmNyZWF0ZVF1ZXJ5KEdMZW51bSB0eXBl
KQotewotICAgIHJldHVybiBuZXcgUXVlcnkxMSh0aGlzLCB0eXBlKTsKLX0KLQotRmVuY2VJbXBs
ICpSZW5kZXJlcjExOjpjcmVhdGVGZW5jZSgpCi17Ci0gICAgcmV0dXJuIG5ldyBGZW5jZTExKHRo
aXMpOwotfQotCi1ib29sIFJlbmRlcmVyMTE6OmdldFJlbmRlclRhcmdldFJlc291cmNlKGdsOjpS
ZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyLCB1bnNpZ25lZCBpbnQgKnN1YnJlc291cmNlSW5kZXgs
IElEM0QxMVRleHR1cmUyRCAqKnJlc291cmNlKQotewotICAgIEFTU0VSVChjb2xvcmJ1ZmZlciAh
PSBOVUxMKTsKLQotICAgIFJlbmRlclRhcmdldDExICpyZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJn
ZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGNvbG9yYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSk7
Ci0gICAgaWYgKHJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgICpzdWJyZXNvdXJjZUluZGV4
ID0gcmVuZGVyVGFyZ2V0LT5nZXRTdWJyZXNvdXJjZUluZGV4KCk7Ci0KLSAgICAgICAgSUQzRDEx
UmVuZGVyVGFyZ2V0VmlldyAqY29sb3JCdWZmZXJSVFYgPSByZW5kZXJUYXJnZXQtPmdldFJlbmRl
clRhcmdldFZpZXcoKTsKLSAgICAgICAgaWYgKGNvbG9yQnVmZmVyUlRWKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBJRDNEMTFSZXNvdXJjZSAqdGV4dHVyZVJlc291cmNlID0gTlVMTDsKLSAgICAg
ICAgICAgIGNvbG9yQnVmZmVyUlRWLT5HZXRSZXNvdXJjZSgmdGV4dHVyZVJlc291cmNlKTsKLQot
ICAgICAgICAgICAgaWYgKHRleHR1cmVSZXNvdXJjZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IHRleHR1cmVSZXNvdXJjZS0+UXVlcnlJbnRlcmZhY2Uo
SUlEX0lEM0QxMVRleHR1cmUyRCwgKHZvaWQqKilyZXNvdXJjZSk7Ci0gICAgICAgICAgICAgICAg
dGV4dHVyZVJlc291cmNlLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoU1VDQ0VF
REVEKHJlc3VsdCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gZXh0cmFjdCB0
aGUgSUQzRDExVGV4dHVyZTJEIGZyb20gdGhlIHJlbmRlciB0YXJnZXQgcmVzb3VyY2UsICIKLSAg
ICAgICAgICAgICAgICAgICAgICAgICJIUkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIFJlbmRlcmVyMTE6OmJsaXRSZWN0KGdsOjpGcmFtZWJ1ZmZlciAq
cmVhZFRhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGdsOjpGcmFtZWJ1ZmZl
ciAqZHJhd1RhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0RGVwdGhTdGVu
Y2lsKQotewotICAgIGlmIChibGl0UmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgZ2w6OlJl
bmRlcmJ1ZmZlciAqcmVhZEJ1ZmZlciA9IHJlYWRUYXJnZXQtPmdldFJlYWRDb2xvcmJ1ZmZlcigp
OwotCi0gICAgICAgIGlmICghcmVhZEJ1ZmZlcikKLSAgICAgICAgewotICAgICAgICAgICAgRVJS
KCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlYWQgYnVmZmVyIGZyb20gdGhlIHJlYWQgZnJhbWVi
dWZmZXIuIik7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlks
IGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlbmRlclRhcmdldCAqcmVhZFJlbmRlclRh
cmdldCA9IHJlYWRCdWZmZXItPmdldFJlbmRlclRhcmdldCgpOwotCi0gICAgICAgIGZvciAodW5z
aWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNobWVudCA8IGdsOjpJTVBM
RU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQrKykKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKGRyYXdUYXJnZXQtPmlzRW5hYmxlZENvbG9yQXR0YWNobWVudChj
b2xvckF0dGFjaG1lbnQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpSZW5k
ZXJidWZmZXIgKmRyYXdCdWZmZXIgPSBkcmF3VGFyZ2V0LT5nZXRDb2xvcmJ1ZmZlcihjb2xvckF0
dGFjaG1lbnQpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFkcmF3QnVmZmVyKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhl
IGRyYXcgYnVmZmVyIGZyb20gdGhlIGRyYXcgZnJhbWVidWZmZXIuIik7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIFJlbmRlclRhcmdldCAqZHJhd1JlbmRlclRh
cmdldCA9IGRyYXdCdWZmZXItPmdldFJlbmRlclRhcmdldCgpOwotCi0gICAgICAgICAgICAgICAg
aWYgKCFibGl0UmVuZGVyYnVmZmVyUmVjdChyZWFkUmVjdCwgZHJhd1JlY3QsIHJlYWRSZW5kZXJU
YXJnZXQsIGRyYXdSZW5kZXJUYXJnZXQsIGZhbHNlKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoYmxpdERlcHRoU3RlbmNpbCkKLSAg
ICB7Ci0gICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlYWRCdWZmZXIgPSByZWFkVGFyZ2V0LT5n
ZXREZXB0aE9yU3RlbmNpbGJ1ZmZlcigpOwotICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpkcmF3
QnVmZmVyID0gZHJhd1RhcmdldC0+Z2V0RGVwdGhPclN0ZW5jaWxidWZmZXIoKTsKLQotICAgICAg
ICBpZiAoIXJlYWRCdWZmZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiRmFpbGVkIHRv
IHJldHJpZXZlIHRoZSByZWFkIGRlcHRoLXN0ZW5jaWwgYnVmZmVyIGZyb20gdGhlIHJlYWQgZnJh
bWVidWZmZXIuIik7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlksIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghZHJhd0J1ZmZlcikKLSAgICAg
ICAgewotICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIGRyYXcgZGVwdGgt
c3RlbmNpbCBidWZmZXIgZnJvbSB0aGUgZHJhdyBmcmFtZWJ1ZmZlci4iKTsKLSAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAgICAgICB9Ci0K
LSAgICAgICAgUmVuZGVyVGFyZ2V0ICpyZWFkUmVuZGVyVGFyZ2V0ID0gcmVhZEJ1ZmZlci0+Z2V0
RGVwdGhTdGVuY2lsKCk7Ci0gICAgICAgIFJlbmRlclRhcmdldCAqZHJhd1JlbmRlclRhcmdldCA9
IGRyYXdCdWZmZXItPmdldERlcHRoU3RlbmNpbCgpOwotCi0gICAgICAgIGlmICghYmxpdFJlbmRl
cmJ1ZmZlclJlY3QocmVhZFJlY3QsIGRyYXdSZWN0LCByZWFkUmVuZGVyVGFyZ2V0LCBkcmF3UmVu
ZGVyVGFyZ2V0LCB0cnVlKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVyZXIx
MTo6cmVhZFBpeGVscyhnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBHTGludCB4LCBHTGlu
dCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBvdXRwdXRQaXRjaCwg
Ym9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLCBHTGludCBwYWNrQWxpZ25tZW50LCB2b2lkKiBwaXhl
bHMpCi17Ci0gICAgSUQzRDExVGV4dHVyZTJEICpjb2xvckJ1ZmZlclRleHR1cmUgPSBOVUxMOwot
ICAgIHVuc2lnbmVkIGludCBzdWJyZXNvdXJjZUluZGV4ID0gMDsKLQotICAgIGdsOjpSZW5kZXJi
dWZmZXIgKmNvbG9yYnVmZmVyID0gZnJhbWVidWZmZXItPmdldFJlYWRDb2xvcmJ1ZmZlcigpOwot
Ci0gICAgaWYgKGNvbG9yYnVmZmVyICYmIGdldFJlbmRlclRhcmdldFJlc291cmNlKGNvbG9yYnVm
ZmVyLCAmc3VicmVzb3VyY2VJbmRleCwgJmNvbG9yQnVmZmVyVGV4dHVyZSkpCi0gICAgewotICAg
ICAgICBnbDo6UmVjdGFuZ2xlIGFyZWE7Ci0gICAgICAgIGFyZWEueCA9IHg7Ci0gICAgICAgIGFy
ZWEueSA9IHk7Ci0gICAgICAgIGFyZWEud2lkdGggPSB3aWR0aDsKLSAgICAgICAgYXJlYS5oZWln
aHQgPSBoZWlnaHQ7Ci0KLSAgICAgICAgcmVhZFRleHR1cmVEYXRhKGNvbG9yQnVmZmVyVGV4dHVy
ZSwgc3VicmVzb3VyY2VJbmRleCwgYXJlYSwgZm9ybWF0LCB0eXBlLCBvdXRwdXRQaXRjaCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHBhY2tSZXZlcnNlUm93T3JkZXIsIHBhY2tBbGlnbm1lbnQs
IHBpeGVscyk7Ci0KLSAgICAgICAgY29sb3JCdWZmZXJUZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAg
ICAgIGNvbG9yQnVmZmVyVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQotfQotCi1JbWFnZSAqUmVuZGVy
ZXIxMTo6Y3JlYXRlSW1hZ2UoKQotewotICAgIHJldHVybiBuZXcgSW1hZ2UxMSgpOwotfQotCi12
b2lkIFJlbmRlcmVyMTE6OmdlbmVyYXRlTWlwbWFwKEltYWdlICpkZXN0LCBJbWFnZSAqc3JjKQot
ewotICAgIEltYWdlMTEgKmRlc3QxMSA9IEltYWdlMTE6Om1ha2VJbWFnZTExKGRlc3QpOwotICAg
IEltYWdlMTEgKnNyYzExID0gSW1hZ2UxMTo6bWFrZUltYWdlMTEoc3JjKTsKLSAgICBJbWFnZTEx
OjpnZW5lcmF0ZU1pcG1hcChkZXN0MTEsIHNyYzExKTsKLX0KLQotVGV4dHVyZVN0b3JhZ2UgKlJl
bmRlcmVyMTE6OmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoU3dhcENoYWluICpzd2FwQ2hhaW4pCi17
Ci0gICAgU3dhcENoYWluMTEgKnN3YXBDaGFpbjExID0gU3dhcENoYWluMTE6Om1ha2VTd2FwQ2hh
aW4xMShzd2FwQ2hhaW4pOwotICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2UxMV8yRCh0aGlz
LCBzd2FwQ2hhaW4xMSk7Ci19Ci0KLVRleHR1cmVTdG9yYWdlICpSZW5kZXJlcjExOjpjcmVhdGVU
ZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVt
IHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpCi17Ci0gICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTExXzJEKHRoaXMsIGxldmVscywg
aW50ZXJuYWxmb3JtYXQsIHVzYWdlLCBmb3JjZVJlbmRlcmFibGUsIHdpZHRoLCBoZWlnaHQpOwot
fQotCi1UZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXIxMTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJl
KGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZv
cmNlUmVuZGVyYWJsZSwgaW50IHNpemUpCi17Ci0gICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFn
ZTExX0N1YmUodGhpcywgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgdXNhZ2UsIGZvcmNlUmVuZGVy
YWJsZSwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldEZhc3RQaXhl
bENvcHlTaXplKERYR0lfRk9STUFUIHNvdXJjZUZvcm1hdCwgR0xlbnVtIGRlc3RGb3JtYXQsIEdM
ZW51bSBkZXN0VHlwZSkKLXsKLSAgICBpZiAoc291cmNlRm9ybWF0ID09IERYR0lfRk9STUFUX0E4
X1VOT1JNICYmCi0gICAgICAgIGRlc3RGb3JtYXQgICA9PSBHTF9BTFBIQSAmJgotICAgICAgICBk
ZXN0VHlwZSAgICAgPT0gR0xfVU5TSUdORURfQllURSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAx
OwotICAgIH0KLSAgICBlbHNlIGlmIChzb3VyY2VGb3JtYXQgPT0gRFhHSV9GT1JNQVRfUjhHOEI4
QThfVU5PUk0gJiYKLSAgICAgICAgICAgICBkZXN0Rm9ybWF0ICAgPT0gR0xfUkdCQSAmJgotICAg
ICAgICAgICAgIGRlc3RUeXBlICAgICA9PSBHTF9VTlNJR05FRF9CWVRFKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIDQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNvdXJjZUZvcm1hdCA9PSBEWEdJX0ZP
Uk1BVF9COEc4UjhBOF9VTk9STSAmJgotICAgICAgICAgICAgIGRlc3RGb3JtYXQgICA9PSBHTF9C
R1JBX0VYVCAmJgotICAgICAgICAgICAgIGRlc3RUeXBlICAgICA9PSBHTF9VTlNJR05FRF9CWVRF
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNvdXJjZUZv
cm1hdCA9PSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQgJiYKLSAgICAgICAgICAgICBk
ZXN0Rm9ybWF0ICAgPT0gR0xfUkdCQSAmJgotICAgICAgICAgICAgIGRlc3RUeXBlICAgICA9PSBH
TF9IQUxGX0ZMT0FUX09FUykKLSAgICB7Ci0gICAgICAgIHJldHVybiA4OwotICAgIH0KLSAgICBl
bHNlIGlmIChzb3VyY2VGb3JtYXQgPT0gRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FUICYmCi0g
ICAgICAgICAgICAgZGVzdEZvcm1hdCAgID09IEdMX1JHQiAmJgotICAgICAgICAgICAgIGRlc3RU
eXBlICAgICA9PSBHTF9GTE9BVCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAxMjsKLSAgICB9Ci0g
ICAgZWxzZSBpZiAoc291cmNlRm9ybWF0ID09IERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9B
VCAmJgotICAgICAgICAgICAgIGRlc3RGb3JtYXQgICA9PSBHTF9SR0JBICYmCi0gICAgICAgICAg
ICAgZGVzdFR5cGUgICAgID09IEdMX0ZMT0FUKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDE2Owot
ICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgdm9pZCByZWFkUGl4ZWxDb2xvcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRh
LCBEWEdJX0ZPUk1BVCBmb3JtYXQsIHVuc2lnbmVkIGludCB4LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB5LCBpbnQgaW5wdXRQaXRjaCwgZ2w6OkNvbG9y
ICpvdXRDb2xvcikKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOgotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgcmdiYSA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KGRhdGEg
KyA0ICogeCArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAg
IChyZ2JhICYgMHgwMDAwMDBGRikgKiAoMS4wZiAvIDB4MDAwMDAwRkYpOwotICAgICAgICAgICAg
b3V0Q29sb3ItPmdyZWVuID0gKHJnYmEgJiAweDAwMDBGRjAwKSAqICgxLjBmIC8gMHgwMDAwRkYw
MCk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAocmdiYSAmIDB4MDBGRjAwMDApICog
KDEuMGYgLyAweDAwRkYwMDAwKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IChyZ2Jh
ICYgMHhGRjAwMDAwMCkgKiAoMS4wZiAvIDB4RkYwMDAwMDApOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX0E4X1VOT1JNOgotICAgICAgICB7Ci0g
ICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICAwLjBmOwotICAgICAgICAgICAgb3V0Q29sb3It
PmdyZWVuID0gMC4wZjsKLSAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gIDAuMGY7Ci0gICAg
ICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAqKGRhdGEgKyB4ICsgeSAqIGlucHV0UGl0Y2gpIC8g
MjU1LjBmOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1IzMkczMkIzMkEzMl9GTE9BVDoKLSAgICAgICAgewotICAgICAgICAgICAgb3V0Q29sb3It
PnJlZCA9ICAgKihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDE2ICogeCAr
IHkgKiBpbnB1dFBpdGNoKSArIDApOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gKihy
ZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDE2ICogeCArIHkgKiBpbnB1dFBp
dGNoKSArIDEpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAgKihyZWludGVycHJldF9j
YXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDE2ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDIpOwot
ICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gKihyZWludGVycHJldF9jYXN0PGNvbnN0IGZs
b2F0Kj4oZGF0YSArIDE2ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDMpOwotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVDoK
LSAgICAgICAgewotICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAgKihyZWludGVycHJldF9j
YXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDEyICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDApOwot
ICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gKihyZWludGVycHJldF9jYXN0PGNvbnN0IGZs
b2F0Kj4oZGF0YSArIDEyICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDEpOwotICAgICAgICAgICAg
b3V0Q29sb3ItPmJsdWUgPSAgKihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSAr
IDEyICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDIpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmFs
cGhhID0gMS4wZjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG91dENv
bG9yLT5yZWQgPSAgIGdsOjpmbG9hdDE2VG9GbG9hdDMyKCoocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyA4ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDApKTsK
LSAgICAgICAgICAgIG91dENvbG9yLT5ncmVlbiA9IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCoocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyA4ICogeCArIHkgKiBp
bnB1dFBpdGNoKSArIDEpKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gIGdsOjpmbG9h
dDE2VG9GbG9hdDMyKCoocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRh
dGEgKyA4ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDIpKTsKLSAgICAgICAgICAgIG91dENvbG9y
LT5hbHBoYSA9IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCoocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyA4ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDMpKTsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhB
OF9VTk9STToKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IGJncmEgPSAqcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihkYXRhICsgNCAqIHggKyB5ICogaW5w
dXRQaXRjaCk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICAoYmdyYSAmIDB4MDBGRjAw
MDApICogKDEuMGYgLyAweDAwRkYwMDAwKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0g
IChiZ3JhICYgMHgwMDAwMDBGRikgKiAoMS4wZiAvIDB4MDAwMDAwRkYpOwotICAgICAgICAgICAg
b3V0Q29sb3ItPmdyZWVuID0gKGJncmEgJiAweDAwMDBGRjAwKSAqICgxLjBmIC8gMHgwMDAwRkYw
MCk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAoYmdyYSAmIDB4RkYwMDAwMDApICog
KDEuMGYgLyAweEZGMDAwMDAwKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SOF9VTk9STToKLSAgICAgICAgewotICAgICAgICAgICAgb3V0Q29s
b3ItPnJlZCA9ICAgKihkYXRhICsgeCArIHkgKiBpbnB1dFBpdGNoKSAvIDI1NS4wZjsKLSAgICAg
ICAgICAgIG91dENvbG9yLT5ncmVlbiA9IDAuMGY7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Ymx1
ZSA9ICAwLjBmOwotICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gMS4wZjsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNOgot
ICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZyA9ICpyZWludGVycHJldF9j
YXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oZGF0YSArIDIgKiB4ICsgeSAqIGlucHV0UGl0Y2gp
OwotCi0gICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICAocmcgJiAweEZGMDApICogKDEuMGYg
LyAweEZGMDApOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gKHJnICYgMHgwMEZGKSAq
ICgxLjBmIC8gMHgwMEZGKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gIDAuMGY7Ci0g
ICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNl9GTE9BVDoKLSAgICAgICAgewotICAg
ICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKnJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgMiAqIHggKyB5ICogaW5wdXRQ
aXRjaCkpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gMC4wZjsKLSAgICAgICAgICAg
IG91dENvbG9yLT5ibHVlID0gIDAuMGY7Ci0gICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAx
LjBmOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFU
X1IxNkcxNl9GTE9BVDoKLSAgICAgICAgewotICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAg
Z2w6OmZsb2F0MTZUb0Zsb2F0MzIoKihyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNo
b3J0Kj4oZGF0YSArIDQgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMCkpOwotICAgICAgICAgICAg
b3V0Q29sb3ItPmdyZWVuID0gZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKihyZWludGVycHJldF9jYXN0
PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oZGF0YSArIDQgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsg
MSkpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAgMC4wZjsKLSAgICAgICAgICAgIG91
dENvbG9yLT5hbHBoYSA9IDEuMGY7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIEVSUigiUmVhZFBpeGVsQ29sb3Igbm90IGltcGxlbWVudGVkIGZv
ciBEWEdJIGZvcm1hdCAldS4iLCBmb3JtYXQpOwotICAgICAgICBVTklNUExFTUVOVEVEKCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdyaXRlUGl4ZWxD
b2xvcihjb25zdCBnbDo6Q29sb3IgJmNvbG9yLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
dW5zaWduZWQgaW50IHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCB5LCBpbnQgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dERhdGEpCi17Ci0gICAgdW5zaWdu
ZWQgY2hhciogYnl0ZURhdGEgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRE
YXRhKTsKLSAgICB1bnNpZ25lZCBzaG9ydCogc2hvcnREYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBzaG9ydCo+KG91dERhdGEpOwotCi0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewot
ICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAg
ICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICBieXRlRGF0YVs0ICog
eCArIHkgKiBvdXRwdXRQaXRjaCArIDBdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1
ICogY29sb3IucmVkICAgKyAwLjVmKTsKLSAgICAgICAgICAgIGJ5dGVEYXRhWzQgKiB4ICsgeSAq
IG91dHB1dFBpdGNoICsgMV0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xv
ci5ncmVlbiArIDAuNWYpOwotICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0
UGl0Y2ggKyAyXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLmJsdWUg
ICsgMC41Zik7Ci0gICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCAr
IDNdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuYWxwaGEgKyAwLjVm
KTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IEVSUigiV3JpdGVQaXhlbENvbG9yIG5vdCBpbXBsZW1lbnRlZCBmb3IgZm9ybWF0IEdMX1JHQkEg
YW5kIHR5cGUgMHglWC4iLCB0eXBlKTsKLSAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNl
IEdMX0JHUkFfRVhUOgotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkg
KiBvdXRwdXRQaXRjaCArIDBdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29s
b3IuYmx1ZSAgKyAwLjVmKTsKLSAgICAgICAgICAgIGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1
dFBpdGNoICsgMV0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5ncmVl
biArIDAuNWYpOwotICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2gg
KyAyXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLnJlZCAgICsgMC41
Zik7Ci0gICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDNdID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuYWxwaGEgKyAwLjVmKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRf
NF80X1JFVl9FWFQ6Ci0gICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIGRlc2t0b3AgR0wg
c3BlYyBpbiB0aGUgIlRyYW5zZmVyIG9mIFBpeGVsIFJlY3RhbmdsZXMiIHNlY3Rpb24KLSAgICAg
ICAgICAgIC8vIHRoaXMgdHlwZSBpcyBwYWNrZWQgYXMgZm9sbG93czoKLSAgICAgICAgICAgIC8v
ICAgMTUgICAxNCAgIDEzICAgMTIgICAxMSAgIDEwICAgIDkgICAgOCAgICA3ICAgIDYgICAgNSAg
ICA0ICAgIDMgICAgMiAgICAxICAgIDAKLSAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotICAgICAgICAgICAgLy8gfCAgICAgICA0dGggICAgICAgICB8ICAgICAgICAzcmQg
ICAgICAgICB8ICAgICAgICAybmQgICAgICAgIHwgICAxc3QgY29tcG9uZW50ICAgfAotICAgICAg
ICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAvLyBpbiB0aGUg
Y2FzZSBvZiBCR1JBX0VYVCwgQiBpcyB0aGUgZmlyc3QgY29tcG9uZW50LCBHIHRoZSBzZWNvbmQs
IGFuZCBzbyBmb3J0aC4KLSAgICAgICAgICAgIHNob3J0RGF0YVt4ICsgeSAqIG91dHB1dFBpdGNo
IC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KV0gPQotICAgICAgICAgICAgICAgIChzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBzaG9ydD4oMTUgKiBjb2xvci5hbHBoYSArIDAuNWYpIDw8IDEyKSB8Ci0gICAg
ICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigxNSAqIGNvbG9yLnJlZCAg
ICsgMC41ZikgPDwgIDgpIHwKLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQg
c2hvcnQ+KDE1ICogY29sb3IuZ3JlZW4gKyAwLjVmKSA8PCAgNCkgfAotICAgICAgICAgICAgICAg
IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMTUgKiBjb2xvci5ibHVlICArIDAuNWYpIDw8
ICAwKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9T
SE9SVF8xXzVfNV81X1JFVl9FWFQ6Ci0gICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIGRl
c2t0b3AgR0wgc3BlYyBpbiB0aGUgIlRyYW5zZmVyIG9mIFBpeGVsIFJlY3RhbmdsZXMiIHNlY3Rp
b24KLSAgICAgICAgICAgIC8vIHRoaXMgdHlwZSBpcyBwYWNrZWQgYXMgZm9sbG93czoKLSAgICAg
ICAgICAgIC8vICAgMTUgICAxNCAgIDEzICAgMTIgICAxMSAgIDEwICAgIDkgICAgOCAgICA3ICAg
IDYgICAgNSAgICA0ICAgIDMgICAgMiAgICAxICAgIDAKLSAgICAgICAgICAgIC8vICAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgLy8gfCA0dGggfCAgICAgICAgICAzcmQgICAg
ICAgICAgIHwgICAgICAgICAgIDJuZCAgICAgICAgICB8ICAgICAgMXN0IGNvbXBvbmVudCAgICAg
fAotICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAv
LyBpbiB0aGUgY2FzZSBvZiBCR1JBX0VYVCwgQiBpcyB0aGUgZmlyc3QgY29tcG9uZW50LCBHIHRo
ZSBzZWNvbmQsIGFuZCBzbyBmb3J0aC4KLSAgICAgICAgICAgIHNob3J0RGF0YVt4ICsgeSAqIG91
dHB1dFBpdGNoIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KV0gPQotICAgICAgICAgICAgICAgIChz
dGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oICAgICBjb2xvci5hbHBoYSArIDAuNWYpIDw8IDE1
KSB8Ci0gICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigzMSAqIGNv
bG9yLnJlZCAgICsgMC41ZikgPDwgMTApIHwKLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8
dW5zaWduZWQgc2hvcnQ+KDMxICogY29sb3IuZ3JlZW4gKyAwLjVmKSA8PCAgNSkgfAotICAgICAg
ICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMzEgKiBjb2xvci5ibHVlICAr
IDAuNWYpIDw8ICAwKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIEVSUigiV3JpdGVQaXhlbENvbG9yIG5vdCBpbXBsZW1lbnRlZCBmb3IgZm9y
bWF0IEdMX0JHUkFfRVhUIGFuZCB0eXBlIDB4JVguIiwgdHlwZSk7Ci0gICAgICAgICAgICBVTklN
UExFTUVOVEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLQotICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAg
ewotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAgICAgICBz
aG9ydERhdGFbeCArIHkgKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0K
LSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDMxICogY29sb3Iu
Ymx1ZSAgKyAwLjVmKSA8PCAgMCkgfAotICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNp
Z25lZCBzaG9ydD4oNjMgKiBjb2xvci5ncmVlbiArIDAuNWYpIDw8ICA1KSB8Ci0gICAgICAgICAg
ICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigzMSAqIGNvbG9yLnJlZCAgICsgMC41
ZikgPDwgMTEpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX0JZVEU6Ci0gICAgICAgICAgICBieXRlRGF0YVszICogeCArIHkgKiBvdXRwdXRQaXRjaCAr
IDBdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IucmVkICsgICAwLjVm
KTsKLSAgICAgICAgICAgIGJ5dGVEYXRhWzMgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMV0gPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5ncmVlbiArIDAuNWYpOwotICAg
ICAgICAgICAgYnl0ZURhdGFbMyAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAyXSA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLmJsdWUgKyAgMC41Zik7Ci0gICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBFUlIoIldyaXRlUGl4
ZWxDb2xvciBub3QgaW1wbGVtZW50ZWQgZm9yIGZvcm1hdCBHTF9SR0IgYW5kIHR5cGUgMHglWC4i
LCB0eXBlKTsKLSAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICBF
UlIoIldyaXRlUGl4ZWxDb2xvciBub3QgaW1wbGVtZW50ZWQgZm9yIGZvcm1hdCAweCVYLiIsIGZv
cm1hdCk7Ci0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
fQotCi12b2lkIFJlbmRlcmVyMTE6OnJlYWRUZXh0dXJlRGF0YShJRDNEMTFUZXh0dXJlMkQgKnRl
eHR1cmUsIHVuc2lnbmVkIGludCBzdWJSZXNvdXJjZSwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmYXJl
YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBHTHNpemVpIG91dHB1dFBpdGNoLCBib29sIHBhY2tSZXZlcnNlUm93T3JkZXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBwYWNrQWxpZ25tZW50LCB2b2lk
ICpwaXhlbHMpCi17Ci0gICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4dHVyZURlc2M7Ci0gICAg
dGV4dHVyZS0+R2V0RGVzYygmdGV4dHVyZURlc2MpOwotCi0gICAgRDNEMTFfVEVYVFVSRTJEX0RF
U0Mgc3RhZ2luZ0Rlc2M7Ci0gICAgc3RhZ2luZ0Rlc2MuV2lkdGggPSBhcmVhLndpZHRoOwotICAg
IHN0YWdpbmdEZXNjLkhlaWdodCA9IGFyZWEuaGVpZ2h0OwotICAgIHN0YWdpbmdEZXNjLk1pcExl
dmVscyA9IDE7Ci0gICAgc3RhZ2luZ0Rlc2MuQXJyYXlTaXplID0gMTsKLSAgICBzdGFnaW5nRGVz
Yy5Gb3JtYXQgPSB0ZXh0dXJlRGVzYy5Gb3JtYXQ7Ci0gICAgc3RhZ2luZ0Rlc2MuU2FtcGxlRGVz
Yy5Db3VudCA9IDE7Ci0gICAgc3RhZ2luZ0Rlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKLSAg
ICBzdGFnaW5nRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX1NUQUdJTkc7Ci0gICAgc3RhZ2luZ0Rl
c2MuQmluZEZsYWdzID0gMDsKLSAgICBzdGFnaW5nRGVzYy5DUFVBY2Nlc3NGbGFncyA9IEQzRDEx
X0NQVV9BQ0NFU1NfUkVBRDsKLSAgICBzdGFnaW5nRGVzYy5NaXNjRmxhZ3MgPSAwOwotCi0gICAg
SUQzRDExVGV4dHVyZTJEKiBzdGFnaW5nVGV4ID0gTlVMTDsKLSAgICBIUkVTVUxUIHJlc3VsdCA9
IG1EZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmc3RhZ2luZ0Rlc2MsIE5VTEwsICZzdGFnaW5nVGV4
KTsKLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0
byBjcmVhdGUgc3RhZ2luZyB0ZXh0dXJlIGZvciByZWFkUGl4ZWxzLCBIUkVTVUxUOiAweCVYLiIs
IHJlc3VsdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJRDNEMTFUZXh0dXJlMkQq
IHNyY1RleCA9IE5VTEw7Ci0gICAgaWYgKHRleHR1cmVEZXNjLlNhbXBsZURlc2MuQ291bnQgPiAx
KQotICAgIHsKLSAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgcmVzb2x2ZURlc2M7Ci0gICAg
ICAgIHJlc29sdmVEZXNjLldpZHRoID0gdGV4dHVyZURlc2MuV2lkdGg7Ci0gICAgICAgIHJlc29s
dmVEZXNjLkhlaWdodCA9IHRleHR1cmVEZXNjLkhlaWdodDsKLSAgICAgICAgcmVzb2x2ZURlc2Mu
TWlwTGV2ZWxzID0gMTsKLSAgICAgICAgcmVzb2x2ZURlc2MuQXJyYXlTaXplID0gMTsKLSAgICAg
ICAgcmVzb2x2ZURlc2MuRm9ybWF0ID0gdGV4dHVyZURlc2MuRm9ybWF0OwotICAgICAgICByZXNv
bHZlRGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gMTsKLSAgICAgICAgcmVzb2x2ZURlc2MuU2FtcGxl
RGVzYy5RdWFsaXR5ID0gMDsKLSAgICAgICAgcmVzb2x2ZURlc2MuVXNhZ2UgPSBEM0QxMV9VU0FH
RV9ERUZBVUxUOwotICAgICAgICByZXNvbHZlRGVzYy5CaW5kRmxhZ3MgPSAwOwotICAgICAgICBy
ZXNvbHZlRGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7Ci0gICAgICAgIHJlc29sdmVEZXNjLk1pc2NG
bGFncyA9IDA7Ci0KLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZy
ZXNvbHZlRGVzYywgTlVMTCwgJnNyY1RleCk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
LSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gY3JlYXRlIHJlc29sdmUgdGV4
dHVyZSBmb3IgcmVhZFBpeGVscywgSFJFU1VMVDogMHglWC4iLCByZXN1bHQpOwotICAgICAgICAg
ICAgc3RhZ2luZ1RleC0+UmVsZWFzZSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0KLSAgICAgICAgbURldmljZUNvbnRleHQtPlJlc29sdmVTdWJyZXNvdXJjZShzcmNUZXgsIDAs
IHRleHR1cmUsIHN1YlJlc291cmNlLCB0ZXh0dXJlRGVzYy5Gb3JtYXQpOwotICAgICAgICBzdWJS
ZXNvdXJjZSA9IDA7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHNyY1RleCA9IHRl
eHR1cmU7Ci0gICAgICAgIHNyY1RleC0+QWRkUmVmKCk7Ci0gICAgfQotCi0gICAgRDNEMTFfQk9Y
IHNyY0JveDsKLSAgICBzcmNCb3gubGVmdCA9IGFyZWEueDsKLSAgICBzcmNCb3gucmlnaHQgPSBh
cmVhLnggKyBhcmVhLndpZHRoOwotICAgIHNyY0JveC50b3AgPSBhcmVhLnk7Ci0gICAgc3JjQm94
LmJvdHRvbSA9IGFyZWEueSArIGFyZWEuaGVpZ2h0OwotICAgIHNyY0JveC5mcm9udCA9IDA7Ci0g
ICAgc3JjQm94LmJhY2sgPSAxOwotCi0gICAgbURldmljZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJj
ZVJlZ2lvbihzdGFnaW5nVGV4LCAwLCAwLCAwLCAwLCBzcmNUZXgsIHN1YlJlc291cmNlLCAmc3Jj
Qm94KTsKLQotICAgIHNyY1RleC0+UmVsZWFzZSgpOwotICAgIHNyY1RleCA9IE5VTEw7Ci0KLSAg
ICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGluZzsKLSAgICBtRGV2aWNlQ29udGV4dC0+
TWFwKHN0YWdpbmdUZXgsIDAsIEQzRDExX01BUF9SRUFELCAwLCAmbWFwcGluZyk7Ci0KLSAgICB1
bnNpZ25lZCBjaGFyICpzb3VyY2U7Ci0gICAgaW50IGlucHV0UGl0Y2g7Ci0gICAgaWYgKHBhY2tS
ZXZlcnNlUm93T3JkZXIpCi0gICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyKj4obWFwcGluZy5wRGF0YSkgKyBtYXBwaW5nLlJvd1BpdGNoICogKGFyZWEuaGVp
Z2h0IC0gMSk7Ci0gICAgICAgIGlucHV0UGl0Y2ggPSAtc3RhdGljX2Nhc3Q8aW50PihtYXBwaW5n
LlJvd1BpdGNoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG1hcHBpbmcucERhdGEpOwotICAgICAgICBpbnB1dFBp
dGNoID0gc3RhdGljX2Nhc3Q8aW50PihtYXBwaW5nLlJvd1BpdGNoKTsKLSAgICB9Ci0KLSAgICB1
bnNpZ25lZCBpbnQgZmFzdFBpeGVsU2l6ZSA9IGdldEZhc3RQaXhlbENvcHlTaXplKHRleHR1cmVE
ZXNjLkZvcm1hdCwgZm9ybWF0LCB0eXBlKTsKLSAgICBpZiAoZmFzdFBpeGVsU2l6ZSAhPSAwKQot
ICAgIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXIqPihwaXhlbHMpOwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGFyZWEuaGVpZ2h0
OyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1lbWNweShkZXN0ICsgaiAqIG91dHB1dFBp
dGNoLCBzb3VyY2UgKyBqICogaW5wdXRQaXRjaCwgYXJlYS53aWR0aCAqIGZhc3RQaXhlbFNpemUp
OwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHRleHR1cmVEZXNjLkZvcm1hdCA9PSBE
WEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STSAmJgotICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9S
R0JBICYmCi0gICAgICAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQotICAgIHsKLSAg
ICAgICAgLy8gRmFzdCBwYXRoIGZvciBzd2FwcGluZyByZWQgd2l0aCBibHVlCi0gICAgICAgIHVu
c2lnbmVkIGNoYXIgKmRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxzKTsK
LQotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGFyZWEuaGVpZ2h0OyBqKyspCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJlYS53aWR0aDsgaSsrKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdiID0gKih1bnNpZ25l
ZCBpbnQqKShzb3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgICAgICAg
ICAqKHVuc2lnbmVkIGludCopKGRlc3QgKyA0ICogaSArIGogKiBvdXRwdXRQaXRjaCkgPQotICAg
ICAgICAgICAgICAgICAgICAoYXJnYiAmIDB4RkYwMEZGMDApIHwgICAgICAgLy8gS2VlcCBhbHBo
YSBhbmQgZ3JlZW4KLSAgICAgICAgICAgICAgICAgICAgKGFyZ2IgJiAweDAwRkYwMDAwKSA+PiAx
NiB8IC8vIE1vdmUgcmVkIHRvIGJsdWUKLSAgICAgICAgICAgICAgICAgICAgKGFyZ2IgJiAweDAw
MDAwMEZGKSA8PCAxNjsgIC8vIE1vdmUgYmx1ZSB0byByZWQKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBnbDo6Q29sb3IgcGl4ZWxDb2xv
cjsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBhcmVhLmhlaWdodDsgaisrKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZWEud2lkdGg7IGkrKykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZWFkUGl4ZWxDb2xvcihzb3VyY2UsIHRleHR1
cmVEZXNjLkZvcm1hdCwgaSwgaiwgaW5wdXRQaXRjaCwgJnBpeGVsQ29sb3IpOwotICAgICAgICAg
ICAgICAgIHdyaXRlUGl4ZWxDb2xvcihwaXhlbENvbG9yLCBmb3JtYXQsIHR5cGUsIGksIGosIG91
dHB1dFBpdGNoLCBwaXhlbHMpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgbURldmljZUNvbnRleHQtPlVubWFwKHN0YWdpbmdUZXgsIDApOwotCi0gICAgc3RhZ2luZ1Rl
eC0+UmVsZWFzZSgpOwotICAgIHN0YWdpbmdUZXggPSBOVUxMOwotfQotCi1ib29sIFJlbmRlcmVy
MTE6OmJsaXRSZW5kZXJidWZmZXJSZWN0KGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRSZWN0LCBj
b25zdCBnbDo6UmVjdGFuZ2xlICZkcmF3UmVjdCwgUmVuZGVyVGFyZ2V0ICpyZWFkUmVuZGVyVGFy
Z2V0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyVGFyZ2V0
ICpkcmF3UmVuZGVyVGFyZ2V0LCBib29sIHdob2xlQnVmZmVyQ29weSkKLXsKLSAgICBBU1NFUlQo
cmVhZFJlY3Qud2lkdGggPT0gZHJhd1JlY3Qud2lkdGggJiYgcmVhZFJlY3QuaGVpZ2h0ID09IGRy
YXdSZWN0LmhlaWdodCk7Ci0KLSAgICBSZW5kZXJUYXJnZXQxMSAqZHJhd1JlbmRlclRhcmdldDEx
ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShkcmF3UmVuZGVyVGFyZ2V0KTsK
LSAgICBpZiAoIWRyYXdSZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0
byByZXRyaWV2ZSB0aGUgZHJhdyByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGRyYXcgZnJhbWVidWZm
ZXIuIik7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2Up
OwotICAgIH0KLQotICAgIElEM0QxMVRleHR1cmUyRCAqZHJhd1RleHR1cmUgPSBkcmF3UmVuZGVy
VGFyZ2V0MTEtPmdldFRleHR1cmUoKTsKLSAgICB1bnNpZ25lZCBpbnQgZHJhd1N1YnJlc291cmNl
ID0gZHJhd1JlbmRlclRhcmdldDExLT5nZXRTdWJyZXNvdXJjZUluZGV4KCk7Ci0KLSAgICBSZW5k
ZXJUYXJnZXQxMSAqcmVhZFJlbmRlclRhcmdldDExID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5k
ZXJUYXJnZXQxMShyZWFkUmVuZGVyVGFyZ2V0KTsKLSAgICBpZiAoIXJlYWRSZW5kZXJUYXJnZXQp
Ci0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVhZCByZW5kZXIg
dGFyZ2V0IGZyb20gdGhlIHJlYWQgZnJhbWVidWZmZXIuIik7Ci0gICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAgIH0KLQotICAgIElEM0QxMVRleHR1
cmUyRCAqcmVhZFRleHR1cmUgPSBOVUxMOwotICAgIHVuc2lnbmVkIGludCByZWFkU3VicmVzb3Vy
Y2UgPSAwOwotICAgIGlmIChyZWFkUmVuZGVyVGFyZ2V0LT5nZXRTYW1wbGVzKCkgPiAwKQotICAg
IHsKLSAgICAgICAgcmVhZFRleHR1cmUgPSByZXNvbHZlTXVsdGlzYW1wbGVkVGV4dHVyZShyZWFk
UmVuZGVyVGFyZ2V0MTEtPmdldFRleHR1cmUoKSwgcmVhZFJlbmRlclRhcmdldDExLT5nZXRTdWJy
ZXNvdXJjZUluZGV4KCkpOwotICAgICAgICByZWFkU3VicmVzb3VyY2UgPSAwOwotICAgIH0KLSAg
ICBlbHNlCi0gICAgewotICAgICAgICByZWFkVGV4dHVyZSA9IHJlYWRSZW5kZXJUYXJnZXQxMS0+
Z2V0VGV4dHVyZSgpOwotICAgICAgICByZWFkVGV4dHVyZS0+QWRkUmVmKCk7Ci0gICAgICAgIHJl
YWRTdWJyZXNvdXJjZSA9IHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0U3VicmVzb3VyY2VJbmRleCgp
OwotICAgIH0KLQotICAgIGlmICghcmVhZFRleHR1cmUpCi0gICAgewotICAgICAgICBFUlIoIkZh
aWxlZCB0byByZXRyaWV2ZSB0aGUgcmVhZCByZW5kZXIgdGFyZ2V0IHZpZXcgZnJvbSB0aGUgcmVh
ZCByZW5kZXIgdGFyZ2V0LiIpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBEM0QxMV9CT1ggcmVhZEJveDsKLSAgICByZWFk
Qm94LmxlZnQgPSByZWFkUmVjdC54OwotICAgIHJlYWRCb3gucmlnaHQgPSByZWFkUmVjdC54ICsg
cmVhZFJlY3Qud2lkdGg7Ci0gICAgcmVhZEJveC50b3AgPSByZWFkUmVjdC55OwotICAgIHJlYWRC
b3guYm90dG9tID0gcmVhZFJlY3QueSArIHJlYWRSZWN0LmhlaWdodDsKLSAgICByZWFkQm94LmZy
b250ID0gMDsKLSAgICByZWFkQm94LmJhY2sgPSAxOwotCi0gICAgLy8gRDNEMTEgbmVlZHMgZGVw
dGgtc3RlbmNpbCBDb3B5U3VicmVzb3VyY2VSZWdpb25zIHRvIGhhdmUgYSBOVUxMIHBTcmNCb3gK
LSAgICAvLyBXZSBhbHNvIHJlcXVpcmUgY29tcGxldGUgZnJhbWVidWZmZXIgY29waWVzIGZvciBk
ZXB0aC1zdGVuY2lsIGJsaXQuCi0gICAgRDNEMTFfQk9YICpwU3JjQm94ID0gd2hvbGVCdWZmZXJD
b3B5ID8gTlVMTCA6ICZyZWFkQm94OwotCi0gICAgbURldmljZUNvbnRleHQtPkNvcHlTdWJyZXNv
dXJjZVJlZ2lvbihkcmF3VGV4dHVyZSwgZHJhd1N1YnJlc291cmNlLCBkcmF3UmVjdC54LCBkcmF3
UmVjdC55LCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVh
ZFRleHR1cmUsIHJlYWRTdWJyZXNvdXJjZSwgcFNyY0JveCk7Ci0KLSAgICBTYWZlUmVsZWFzZShy
ZWFkVGV4dHVyZSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotSUQzRDExVGV4dHVyZTJEICpS
ZW5kZXJlcjExOjpyZXNvbHZlTXVsdGlzYW1wbGVkVGV4dHVyZShJRDNEMTFUZXh0dXJlMkQgKnNv
dXJjZSwgdW5zaWduZWQgaW50IHN1YnJlc291cmNlKQotewotICAgIEQzRDExX1RFWFRVUkUyRF9E
RVNDIHRleHR1cmVEZXNjOwotICAgIHNvdXJjZS0+R2V0RGVzYygmdGV4dHVyZURlc2MpOwotCi0g
ICAgaWYgKHRleHR1cmVEZXNjLlNhbXBsZURlc2MuQ291bnQgPiAxKQotICAgIHsKLSAgICAgICAg
RDNEMTFfVEVYVFVSRTJEX0RFU0MgcmVzb2x2ZURlc2M7Ci0gICAgICAgIHJlc29sdmVEZXNjLldp
ZHRoID0gdGV4dHVyZURlc2MuV2lkdGg7Ci0gICAgICAgIHJlc29sdmVEZXNjLkhlaWdodCA9IHRl
eHR1cmVEZXNjLkhlaWdodDsKLSAgICAgICAgcmVzb2x2ZURlc2MuTWlwTGV2ZWxzID0gMTsKLSAg
ICAgICAgcmVzb2x2ZURlc2MuQXJyYXlTaXplID0gMTsKLSAgICAgICAgcmVzb2x2ZURlc2MuRm9y
bWF0ID0gdGV4dHVyZURlc2MuRm9ybWF0OwotICAgICAgICByZXNvbHZlRGVzYy5TYW1wbGVEZXNj
LkNvdW50ID0gMTsKLSAgICAgICAgcmVzb2x2ZURlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsK
LSAgICAgICAgcmVzb2x2ZURlc2MuVXNhZ2UgPSB0ZXh0dXJlRGVzYy5Vc2FnZTsKLSAgICAgICAg
cmVzb2x2ZURlc2MuQmluZEZsYWdzID0gdGV4dHVyZURlc2MuQmluZEZsYWdzOwotICAgICAgICBy
ZXNvbHZlRGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7Ci0gICAgICAgIHJlc29sdmVEZXNjLk1pc2NG
bGFncyA9IDA7Ci0KLSAgICAgICAgSUQzRDExVGV4dHVyZTJEICpyZXNvbHZlVGV4dHVyZSA9IE5V
TEw7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZy
ZXNvbHZlRGVzYywgTlVMTCwgJnJlc29sdmVUZXh0dXJlKTsKLSAgICAgICAgaWYgKEZBSUxFRChy
ZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBjcmVhdGUgYSBt
dWx0aXNhbXBsZSByZXNvbHZlIHRleHR1cmUsIEhSRVNVTFQ6IDB4JVguIiwgcmVzdWx0KTsKLSAg
ICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgbURldmljZUNvbnRl
eHQtPlJlc29sdmVTdWJyZXNvdXJjZShyZXNvbHZlVGV4dHVyZSwgMCwgc291cmNlLCBzdWJyZXNv
dXJjZSwgdGV4dHVyZURlc2MuRm9ybWF0KTsKLSAgICAgICAgcmV0dXJuIHJlc29sdmVUZXh0dXJl
OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBzb3VyY2UtPkFkZFJlZigpOwotICAg
ICAgICByZXR1cm4gc291cmNlOwotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJlcjExOjpnZXRMVUlE
KExVSUQgKmFkYXB0ZXJMdWlkKSBjb25zdAotewotICAgIGFkYXB0ZXJMdWlkLT5IaWdoUGFydCA9
IDA7Ci0gICAgYWRhcHRlckx1aWQtPkxvd1BhcnQgPSAwOwotCi0gICAgaWYgKCFtRHhnaUFkYXB0
ZXIpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgRFhHSV9BREFQ
VEVSX0RFU0MgYWRhcHRlckRlc2M7Ci0gICAgaWYgKEZBSUxFRChtRHhnaUFkYXB0ZXItPkdldERl
c2MoJmFkYXB0ZXJEZXNjKSkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgKmFkYXB0ZXJMdWlkID0gYWRhcHRlckRlc2MuQWRhcHRlckx1aWQ7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIxMS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlcjExLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGI4NmY0ODVmNDBjNThjOTQwZGM5YTNlNGFmYzU4MjViNGUyOWU4YmYuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlcjExLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwzNTggKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gUmVuZGVyZXIxMS5o
OiBEZWZpbmVzIGEgYmFjay1lbmQgc3BlY2lmaWMgY2xhc3MgZm9yIHRoZSBEM0QxMSByZW5kZXJl
ci4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSRVIxMV9IXwotI2RlZmluZSBM
SUJHTEVTVjJfUkVOREVSRVJfUkVOREVSRVIxMV9IXwotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xl
dXRpbHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgotI2luY2x1ZGUgImxp
YkdMRVN2Mi9tYXRodXRpbC5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRl
cmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclN0YXRlQ2FjaGUuaCIK
LSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvSW5wdXRMYXlvdXRDYWNoZS5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQuaCIKLQotbmFtZXNwYWNlIGdsCi17
Ci1jbGFzcyBSZW5kZXJidWZmZXI7Ci19Ci0KLW5hbWVzcGFjZSByeAotewotCi1jbGFzcyBWZXJ0
ZXhEYXRhTWFuYWdlcjsKLWNsYXNzIEluZGV4RGF0YU1hbmFnZXI7Ci1jbGFzcyBTdHJlYW1pbmdJ
bmRleEJ1ZmZlckludGVyZmFjZTsKLQotZW51bQotewotICAgIE1BWF9WRVJURVhfVU5JRk9STV9W
RUNUT1JTX0QzRDExID0gMTAyNCwKLSAgICBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTX0Qz
RDExID0gMTAyNAotfTsKLQotY2xhc3MgUmVuZGVyZXIxMSA6IHB1YmxpYyBSZW5kZXJlcgotewot
ICBwdWJsaWM6Ci0gICAgUmVuZGVyZXIxMShlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIEhEQyBoRGMp
OwotICAgIHZpcnR1YWwgflJlbmRlcmVyMTEoKTsKLQotICAgIHN0YXRpYyBSZW5kZXJlcjExICpt
YWtlUmVuZGVyZXIxMShSZW5kZXJlciAqcmVuZGVyZXIpOwotCi0gICAgdmlydHVhbCBFR0xpbnQg
aW5pdGlhbGl6ZSgpOwotICAgIHZpcnR1YWwgYm9vbCByZXNldERldmljZSgpOwotCi0gICAgdmly
dHVhbCBpbnQgZ2VuZXJhdGVDb25maWdzKENvbmZpZ0Rlc2MgKipjb25maWdEZXNjTGlzdCk7Ci0g
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZUNvbmZpZ3MoQ29uZmlnRGVzYyAqY29uZmlnRGVzY0xpc3Qp
OwotCi0gICAgdmlydHVhbCB2b2lkIHN5bmMoYm9vbCBibG9jayk7Ci0KLSAgICB2aXJ0dWFsIFN3
YXBDaGFpbiAqY3JlYXRlU3dhcENoYWluKEhXTkQgd2luZG93LCBIQU5ETEUgc2hhcmVIYW5kbGUs
IEdMZW51bSBiYWNrQnVmZmVyRm9ybWF0LCBHTGVudW0gZGVwdGhCdWZmZXJGb3JtYXQpOwotCi0g
ICAgdmlydHVhbCB2b2lkIHNldFNhbXBsZXJTdGF0ZShnbDo6U2FtcGxlclR5cGUgdHlwZSwgaW50
IGluZGV4LCBjb25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVyKTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0VGV4dHVyZShnbDo6U2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBnbDo6VGV4dHVy
ZSAqdGV4dHVyZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmFzdGVyaXplclN0YXRlKGNvbnN0
IGdsOjpSYXN0ZXJpemVyU3RhdGUgJnJhc3RlclN0YXRlKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
QmxlbmRTdGF0ZShjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNv
bG9yICZibGVuZENvbG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCBzYW1wbGVNYXNrKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RGVwdGhTdGVuY2lsU3RhdGUo
Y29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZkZXB0aFN0ZW5jaWxTdGF0ZSwgaW50IHN0ZW5j
aWxSZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGVuY2ls
QmFja1JlZiwgYm9vbCBmcm9udEZhY2VDQ1cpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldFNjaXNz
b3JSZWN0YW5nbGUoY29uc3QgZ2w6OlJlY3RhbmdsZSAmc2Npc3NvciwgYm9vbCBlbmFibGVkKTsK
LSAgICB2aXJ0dWFsIGJvb2wgc2V0Vmlld3BvcnQoY29uc3QgZ2w6OlJlY3RhbmdsZSAmdmlld3Bv
cnQsIGZsb2F0IHpOZWFyLCBmbG9hdCB6RmFyLCBHTGVudW0gZHJhd01vZGUsIEdMZW51bSBmcm9u
dEZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaWdub3JlVmlld3BvcnQp
OwotCi0gICAgdmlydHVhbCBib29sIGFwcGx5UHJpbWl0aXZlVHlwZShHTGVudW0gbW9kZSwgR0xz
aXplaSBjb3VudCk7Ci0gICAgdmlydHVhbCBib29sIGFwcGx5UmVuZGVyVGFyZ2V0KGdsOjpGcmFt
ZWJ1ZmZlciAqZnJhbWVCdWZmZXIpOwotICAgIHZpcnR1YWwgdm9pZCBhcHBseVNoYWRlcnMoZ2w6
OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpOwotICAgIHZpcnR1YWwgdm9pZCBhcHBseVVu
aWZvcm1zKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBnbDo6VW5pZm9ybUFycmF5
ICp1bmlmb3JtQXJyYXkpOwotICAgIHZpcnR1YWwgR0xlbnVtIGFwcGx5VmVydGV4QnVmZmVyKGds
OjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRl
eEF0dHJpYnV0ZXNbXSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFu
Y2VzKTsKLSAgICB2aXJ0dWFsIEdMZW51bSBhcHBseUluZGV4QnVmZmVyKGNvbnN0IEdMdm9pZCAq
aW5kaWNlcywgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyLCBHTHNpemVpIGNvdW50LCBH
TGVudW0gbW9kZSwgR0xlbnVtIHR5cGUsIFRyYW5zbGF0ZWRJbmRleERhdGEgKmluZGV4SW5mbyk7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3Vu
dCwgR0xzaXplaSBpbnN0YW5jZXMpOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxlbWVudHMoR0xl
bnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGlj
ZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4
RGF0YSAmaW5kZXhJbmZvLCBHTHNpemVpIGluc3RhbmNlcyk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyYW1ldGVycyAmY2xlYXJQYXJhbXMsIGdsOjpGcmFtZWJ1
ZmZlciAqZnJhbWVCdWZmZXIpOwotCi0gICAgdmlydHVhbCB2b2lkIG1hcmtBbGxTdGF0ZURpcnR5
KCk7Ci0KLSAgICAvLyBsb3N0IGRldmljZQotICAgIHZvaWQgbm90aWZ5RGV2aWNlTG9zdCgpOwot
ICAgIHZpcnR1YWwgYm9vbCBpc0RldmljZUxvc3QoKTsKLSAgICB2aXJ0dWFsIGJvb2wgdGVzdERl
dmljZUxvc3QoYm9vbCBub3RpZnkpOwotICAgIHZpcnR1YWwgYm9vbCB0ZXN0RGV2aWNlUmVzZXR0
YWJsZSgpOwotCi0gICAgLy8gUmVuZGVyZXIgY2FwYWJpbGl0aWVzCi0gICAgdmlydHVhbCBEV09S
RCBnZXRBZGFwdGVyVmVuZG9yKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBzdGQ6OnN0cmluZyBnZXRS
ZW5kZXJlckRlc2NyaXB0aW9uKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHVUlEIGdldEFkYXB0ZXJJ
ZGVudGlmaWVyKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0QkdSQVRleHR1cmVTdXBw
b3J0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdldERYVDFUZXh0dXJlU3VwcG9ydCgpOwot
ICAgIHZpcnR1YWwgYm9vbCBnZXREWFQzVGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJv
b2wgZ2V0RFhUNVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldEV2ZW50UXVl
cnlTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydChi
b29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRG
bG9hdDE2VGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKTsK
LSAgICB2aXJ0dWFsIGJvb2wgZ2V0THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0
dWFsIGJvb2wgZ2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1YWwg
dW5zaWduZWQgaW50IGdldE1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpIGNv
bnN0OwotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlc2VydmVkVmVydGV4VW5pZm9ybVZl
Y3RvcnMoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZXNlcnZlZEZyYWdt
ZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRN
YXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycygpIGNvbnN0OwotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50
IGdldE1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2ln
bmVkIGludCBnZXRNYXhWYXJ5aW5nVmVjdG9ycygpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBn
ZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBnZXRE
ZXB0aFRleHR1cmVTdXBwb3J0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdldE9jY2x1c2lv
blF1ZXJ5U3VwcG9ydCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBnZXRJbnN0YW5jaW5nU3Vw
cG9ydCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBnZXRUZXh0dXJlRmlsdGVyQW5pc290cm9w
eVN1cHBvcnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGZsb2F0IGdldFRleHR1cmVNYXhBbmlzb3Ry
b3B5KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdldFNoYXJlSGFuZGxlU3VwcG9ydCgpIGNv
bnN0OwotICAgIHZpcnR1YWwgYm9vbCBnZXREZXJpdmF0aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0KCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdldFBvc3RTdWJCdWZmZXJTdXBwb3J0KCkgY29uc3Q7
Ci0KLSAgICB2aXJ0dWFsIGludCBnZXRNYWpvclNoYWRlck1vZGVsKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBmbG9hdCBnZXRNYXhQb2ludFNpemUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBnZXRN
YXhWaWV3cG9ydERpbWVuc2lvbigpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1
cmVXaWR0aCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1cmVIZWlnaHQoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0MzJCaXRJbmRleFN1cHBvcnQoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGludCBnZXRNaW5Td2FwSW50ZXJ2YWwoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGlu
dCBnZXRNYXhTd2FwSW50ZXJ2YWwoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRN
YXhTdXBwb3J0ZWRTYW1wbGVzKCkgY29uc3Q7Ci0gICAgaW50IGdldE5lYXJlc3RTdXBwb3J0ZWRT
YW1wbGVzKERYR0lfRk9STUFUIGZvcm1hdCwgdW5zaWduZWQgaW50IHJlcXVlc3RlZCkgY29uc3Q7
Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhSZW5kZXJUYXJnZXRzKCkgY29uc3Q7
Ci0KLSAgICAvLyBQaXhlbCBvcGVyYXRpb25zCi0gICAgdmlydHVhbCBib29sIGNvcHlUb1JlbmRl
clRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpkZXN0LCBUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZTJEICpzb3VyY2UpOwotICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9SZW5kZXJUYXJnZXQo
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZUN1YmUgKnNvdXJjZSk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdlKGdsOjpGcmFtZWJ1
ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51
bSBkZXN0Rm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgR0xpbnQg
bGV2ZWwpOwotICAgIHZpcnR1YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFt
ZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3Jt
YXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIEdMZW51bSB0YXJnZXQs
IEdMaW50IGxldmVsKTsKLQotICAgIGJvb2wgY29weVRleHR1cmUoSUQzRDExU2hhZGVyUmVzb3Vy
Y2VWaWV3ICpzb3VyY2UsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZUFyZWEsIHVuc2lnbmVk
IGludCBzb3VyY2VXaWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmRlc3QsIGNvbnN0IGdsOjpSZWN0YW5n
bGUgJmRlc3RBcmVhLCB1bnNpZ25lZCBpbnQgZGVzdFdpZHRoLCB1bnNpZ25lZCBpbnQgZGVzdEhl
aWdodCwgR0xlbnVtIGRlc3RGb3JtYXQpOwotCi0gICAgdmlydHVhbCBib29sIGJsaXRSZWN0KGds
OjpGcmFtZWJ1ZmZlciAqcmVhZFRhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZFJlY3Qs
IGdsOjpGcmFtZWJ1ZmZlciAqZHJhd1RhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1Jl
Y3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9v
bCBibGl0RGVwdGhTdGVuY2lsKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVhZFBpeGVscyhnbDo6RnJh
bWVidWZmZXIgKmZyYW1lYnVmZmVyLCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xzaXplaSBvdXRwdXRQaXRjaCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09y
ZGVyLCBHTGludCBwYWNrQWxpZ25tZW50LCB2b2lkKiBwaXhlbHMpOwotCi0gICAgLy8gUmVuZGVy
VGFyZ2V0IGNyZWF0aW9uCi0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRlclRh
cmdldChTd2FwQ2hhaW4gKnN3YXBDaGFpbiwgYm9vbCBkZXB0aCk7Ci0gICAgdmlydHVhbCBSZW5k
ZXJUYXJnZXQgKmNyZWF0ZVJlbmRlclRhcmdldChpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51
bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcywgYm9vbCBkZXB0aCk7Ci0KLSAgICAvLyBTaGFkZXIg
b3BlcmF0aW9ucwotICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqbG9hZEV4ZWN1dGFibGUo
Y29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUp
OwotICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqY29tcGlsZVRvRXhlY3V0YWJsZShnbDo6
SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqc2hhZGVySExTTCwgcng6OlNoYWRlclR5cGUg
dHlwZSwgRDNEV29ya2Fyb3VuZFR5cGUgd29ya2Fyb3VuZCk7Ci0KLSAgICAvLyBJbWFnZSBvcGVy
YXRpb25zCi0gICAgdmlydHVhbCBJbWFnZSAqY3JlYXRlSW1hZ2UoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgZ2VuZXJhdGVNaXBtYXAoSW1hZ2UgKmRlc3QsIEltYWdlICpzb3VyY2UpOwotICAgIHZpcnR1
YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoU3dhcENoYWluICpzd2Fw
Q2hhaW4pOwotICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdl
MkQoaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wg
Zm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgdmly
dHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKGludCBsZXZlbHMs
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJs
ZSwgaW50IHNpemUpOwotCi0gICAgLy8gQnVmZmVyIGNyZWF0aW9uCi0gICAgdmlydHVhbCBWZXJ0
ZXhCdWZmZXIgKmNyZWF0ZVZlcnRleEJ1ZmZlcigpOwotICAgIHZpcnR1YWwgSW5kZXhCdWZmZXIg
KmNyZWF0ZUluZGV4QnVmZmVyKCk7Ci0gICAgdmlydHVhbCBCdWZmZXJTdG9yYWdlICpjcmVhdGVC
dWZmZXJTdG9yYWdlKCk7Ci0KLSAgICAvLyBRdWVyeSBhbmQgRmVuY2UgY3JlYXRpb24KLSAgICB2
aXJ0dWFsIFF1ZXJ5SW1wbCAqY3JlYXRlUXVlcnkoR0xlbnVtIHR5cGUpOwotICAgIHZpcnR1YWwg
RmVuY2VJbXBsICpjcmVhdGVGZW5jZSgpOwotCi0gICAgLy8gRDNEMTEtcmVuZGVyZXIgc3BlY2lm
aWMgbWV0aG9kcwotICAgIElEM0QxMURldmljZSAqZ2V0RGV2aWNlKCkgeyByZXR1cm4gbURldmlj
ZTsgfQotICAgIElEM0QxMURldmljZUNvbnRleHQgKmdldERldmljZUNvbnRleHQoKSB7IHJldHVy
biBtRGV2aWNlQ29udGV4dDsgfTsKLSAgICBJRFhHSUZhY3RvcnkgKmdldER4Z2lGYWN0b3J5KCkg
eyByZXR1cm4gbUR4Z2lGYWN0b3J5OyB9OwotCi0gICAgYm9vbCBnZXRSZW5kZXJUYXJnZXRSZXNv
dXJjZShnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciwgdW5zaWduZWQgaW50ICpzdWJyZXNv
dXJjZUluZGV4LCBJRDNEMTFUZXh0dXJlMkQgKipyZXNvdXJjZSk7Ci0gICAgdm9pZCB1bmFwcGx5
UmVuZGVyVGFyZ2V0cygpOwotICAgIHZvaWQgc2V0T25lVGltZVJlbmRlclRhcmdldChJRDNEMTFS
ZW5kZXJUYXJnZXRWaWV3ICpyZW5kZXJUYXJnZXRWaWV3KTsKLQotICAgIHZpcnR1YWwgYm9vbCBn
ZXRMVUlEKExVSUQgKmFkYXB0ZXJMdWlkKSBjb25zdDsKLQotICBwcml2YXRlOgotICAgIERJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJlcjExKTsKLQotICAgIHZvaWQgZHJhd0xpbmVMb29w
KEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGludCBt
aW5JbmRleCwgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyKTsKLSAgICB2b2lkIGRyYXdU
cmlhbmdsZUZhbihHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRp
Y2VzLCBpbnQgbWluSW5kZXgsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgaW50IGlu
c3RhbmNlcyk7Ci0KLSAgICB2b2lkIHJlYWRUZXh0dXJlRGF0YShJRDNEMTFUZXh0dXJlMkQgKnRl
eHR1cmUsIHVuc2lnbmVkIGludCBzdWJSZXNvdXJjZSwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmYXJl
YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
R0xzaXplaSBvdXRwdXRQaXRjaCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMaW50IHBhY2tBbGlnbm1lbnQsIHZvaWQgKnBpeGVscyk7Ci0KLSAg
ICB2b2lkIG1hc2tlZENsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1z
LCBib29sIHVzaW5nRXh0ZW5kZWREcmF3QnVmZmVycyk7Ci0gICAgcng6OlJhbmdlIGdldFZpZXdw
b3J0Qm91bmRzKCkgY29uc3Q7Ci0KLSAgICBib29sIGJsaXRSZW5kZXJidWZmZXJSZWN0KGNvbnN0
IGdsOjpSZWN0YW5nbGUgJnJlYWRSZWN0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkcmF3UmVjdCwg
UmVuZGVyVGFyZ2V0ICpyZWFkUmVuZGVyVGFyZ2V0LCAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJlbmRlclRhcmdldCAqZHJhd1JlbmRlclRhcmdldCwgYm9vbCB3aG9sZUJ1ZmZlckNv
cHkpOwotICAgIElEM0QxMVRleHR1cmUyRCAqcmVzb2x2ZU11bHRpc2FtcGxlZFRleHR1cmUoSUQz
RDExVGV4dHVyZTJEICpzb3VyY2UsIHVuc2lnbmVkIGludCBzdWJyZXNvdXJjZSk7Ci0KLSAgICBI
TU9EVUxFIG1EM2QxMU1vZHVsZTsKLSAgICBITU9EVUxFIG1EeGdpTW9kdWxlOwotICAgIEhEQyBt
RGM7Ci0KLSAgICBib29sIG1EZXZpY2VMb3N0OwotCi0gICAgdm9pZCBpbml0aWFsaXplRGV2aWNl
KCk7Ci0gICAgdm9pZCByZWxlYXNlRGV2aWNlUmVzb3VyY2VzKCk7Ci0gICAgaW50IGdldE1pbm9y
U2hhZGVyTW9kZWwoKSBjb25zdDsKLSAgICB2b2lkIHJlbGVhc2UoKTsKLQotICAgIFJlbmRlclN0
YXRlQ2FjaGUgbVN0YXRlQ2FjaGU7Ci0KLSAgICAvLyBTdXBwb3J0IGZsYWdzCi0gICAgYm9vbCBt
RmxvYXQxNlRleHR1cmVTdXBwb3J0OwotICAgIGJvb2wgbUZsb2F0MTZGaWx0ZXJTdXBwb3J0Owot
ICAgIGJvb2wgbUZsb2F0MTZSZW5kZXJTdXBwb3J0OwotCi0gICAgYm9vbCBtRmxvYXQzMlRleHR1
cmVTdXBwb3J0OwotICAgIGJvb2wgbUZsb2F0MzJGaWx0ZXJTdXBwb3J0OwotICAgIGJvb2wgbUZs
b2F0MzJSZW5kZXJTdXBwb3J0OwotCi0gICAgYm9vbCBtRFhUMVRleHR1cmVTdXBwb3J0OwotICAg
IGJvb2wgbURYVDNUZXh0dXJlU3VwcG9ydDsKLSAgICBib29sIG1EWFQ1VGV4dHVyZVN1cHBvcnQ7
Ci0KLSAgICBib29sIG1EZXB0aFRleHR1cmVTdXBwb3J0OwotCi0gICAgLy8gTXVsdGlzYW1wbGUg
Zm9ybWF0IHN1cHBvcnQKLSAgICBzdHJ1Y3QgTXVsdGlzYW1wbGVTdXBwb3J0SW5mbwotICAgIHsK
LSAgICAgICAgdW5zaWduZWQgaW50IHF1YWxpdHlMZXZlbHNbRDNEMTFfTUFYX01VTFRJU0FNUExF
X1NBTVBMRV9DT1VOVF07Ci0gICAgfTsKLQotICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFw
PERYR0lfRk9STUFULCBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvLCBzdGQ6Omhhc2g8aW50PiA+IE11
bHRpc2FtcGxlU3VwcG9ydE1hcDsKLSAgICBNdWx0aXNhbXBsZVN1cHBvcnRNYXAgbU11bHRpc2Ft
cGxlU3VwcG9ydE1hcDsKLQotICAgIHVuc2lnbmVkIGludCBtTWF4U3VwcG9ydGVkU2FtcGxlczsK
LQotICAgIC8vIGN1cnJlbnQgcmVuZGVyIHRhcmdldCBzdGF0ZXMKLSAgICB1bnNpZ25lZCBpbnQg
bUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWxzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19C
VUZGRVJTXTsKLSAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbDsKLSAg
ICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRTdGVuY2lsYnVmZmVyU2VyaWFsOwotICAgIGJvb2wgbURl
cHRoU3RlbmNpbEluaXRpYWxpemVkOwotICAgIGJvb2wgbVJlbmRlclRhcmdldERlc2NJbml0aWFs
aXplZDsKLSAgICByeDo6UmVuZGVyVGFyZ2V0OjpEZXNjIG1SZW5kZXJUYXJnZXREZXNjOwotICAg
IHVuc2lnbmVkIGludCBtQ3VyRGVwdGhTaXplOwotICAgIHVuc2lnbmVkIGludCBtQ3VyU3RlbmNp
bFNpemU7Ci0KLSAgICAvLyBDdXJyZW50bHkgYXBwbGllZCBzYW1wbGVyIHN0YXRlcwotICAgIGJv
b2wgbUZvcmNlU2V0VmVydGV4U2FtcGxlclN0YXRlc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZF
UlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKLSAgICBnbDo6U2FtcGxlclN0YXRlIG1DdXJWZXJ0
ZXhTYW1wbGVyU3RhdGVzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1B
R0VfVU5JVFNdOwotCi0gICAgYm9vbCBtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0ZXNbZ2w6Ok1B
WF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKLSAgICBnbDo6U2FtcGxlclN0YXRlIG1DdXJQaXhlbFNh
bXBsZXJTdGF0ZXNbZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKLQotICAgIC8vIEN1cnJl
bnRseSBhcHBsaWVkIHRleHR1cmVzCi0gICAgdW5zaWduZWQgaW50IG1DdXJWZXJ0ZXhUZXh0dXJl
U2VyaWFsc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRT
XTsKLSAgICB1bnNpZ25lZCBpbnQgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbZ2w6Ok1BWF9URVhU
VVJFX0lNQUdFX1VOSVRTXTsKLQotICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIGJsZW5kIHN0YXRl
Ci0gICAgYm9vbCBtRm9yY2VTZXRCbGVuZFN0YXRlOwotICAgIGdsOjpCbGVuZFN0YXRlIG1DdXJC
bGVuZFN0YXRlOwotICAgIGdsOjpDb2xvciBtQ3VyQmxlbmRDb2xvcjsKLSAgICB1bnNpZ25lZCBp
bnQgbUN1clNhbXBsZU1hc2s7Ci0KLSAgICAvLyBDdXJyZW50bHkgYXBwbGllZCByYXN0ZXJpemVy
IHN0YXRlCi0gICAgYm9vbCBtRm9yY2VTZXRSYXN0ZXJTdGF0ZTsKLSAgICBnbDo6UmFzdGVyaXpl
clN0YXRlIG1DdXJSYXN0ZXJTdGF0ZTsKLQotICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIGRlcHRo
IHN0ZW5jaWwgc3RhdGUKLSAgICBib29sIG1Gb3JjZVNldERlcHRoU3RlbmNpbFN0YXRlOwotICAg
IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSBtQ3VyRGVwdGhTdGVuY2lsU3RhdGU7Ci0gICAgaW50IG1D
dXJTdGVuY2lsUmVmOwotICAgIGludCBtQ3VyU3RlbmNpbEJhY2tSZWY7Ci0KLSAgICAvLyBDdXJy
ZW50bHkgYXBwbGllZCBzY2lzc29yIHJlY3RhbmdsZQotICAgIGJvb2wgbUZvcmNlU2V0U2Npc3Nv
cjsKLSAgICBib29sIG1TY2lzc29yRW5hYmxlZDsKLSAgICBnbDo6UmVjdGFuZ2xlIG1DdXJTY2lz
c29yOwotCi0gICAgLy8gQ3VycmVudGx5IGFwcGxpZWQgdmlld3BvcnQKLSAgICBib29sIG1Gb3Jj
ZVNldFZpZXdwb3J0OwotICAgIGdsOjpSZWN0YW5nbGUgbUN1clZpZXdwb3J0OwotICAgIGZsb2F0
IG1DdXJOZWFyOwotICAgIGZsb2F0IG1DdXJGYXI7Ci0KLSAgICAvLyBDdXJyZW50bHkgYXBwbGll
ZCBwcmltaXRpdmUgdG9wb2xvZ3kKLSAgICBEM0QxMV9QUklNSVRJVkVfVE9QT0xPR1kgbUN1cnJl
bnRQcmltaXRpdmVUb3BvbG9neTsKLQotICAgIHVuc2lnbmVkIGludCBtQXBwbGllZElCU2VyaWFs
OwotICAgIHVuc2lnbmVkIGludCBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbDsKLSAgICB1bnNpZ25l
ZCBpbnQgbUFwcGxpZWRJQk9mZnNldDsKLQotICAgIHVuc2lnbmVkIGludCBtQXBwbGllZFByb2dy
YW1CaW5hcnlTZXJpYWw7Ci0gICAgYm9vbCBtSXNHZW9tZXRyeVNoYWRlckFjdGl2ZTsKLQotICAg
IGR4X1ZlcnRleENvbnN0YW50cyBtVmVydGV4Q29uc3RhbnRzOwotICAgIGR4X1ZlcnRleENvbnN0
YW50cyBtQXBwbGllZFZlcnRleENvbnN0YW50czsKLSAgICBJRDNEMTFCdWZmZXIgKm1Ecml2ZXJD
b25zdGFudEJ1ZmZlclZTOwotICAgIElEM0QxMUJ1ZmZlciAqbUN1cnJlbnRWZXJ0ZXhDb25zdGFu
dEJ1ZmZlcjsKLQotICAgIGR4X1BpeGVsQ29uc3RhbnRzIG1QaXhlbENvbnN0YW50czsKLSAgICBk
eF9QaXhlbENvbnN0YW50cyBtQXBwbGllZFBpeGVsQ29uc3RhbnRzOwotICAgIElEM0QxMUJ1ZmZl
ciAqbURyaXZlckNvbnN0YW50QnVmZmVyUFM7Ci0gICAgSUQzRDExQnVmZmVyICptQ3VycmVudFBp
eGVsQ29uc3RhbnRCdWZmZXI7Ci0KLSAgICBJRDNEMTFCdWZmZXIgKm1DdXJyZW50R2VvbWV0cnlD
b25zdGFudEJ1ZmZlcjsKLQotICAgIC8vIFZlcnRleCwgaW5kZXggYW5kIGlucHV0IGxheW91dHMK
LSAgICBWZXJ0ZXhEYXRhTWFuYWdlciAqbVZlcnRleERhdGFNYW5hZ2VyOwotICAgIEluZGV4RGF0
YU1hbmFnZXIgKm1JbmRleERhdGFNYW5hZ2VyOwotICAgIElucHV0TGF5b3V0Q2FjaGUgbUlucHV0
TGF5b3V0Q2FjaGU7Ci0KLSAgICBTdHJlYW1pbmdJbmRleEJ1ZmZlckludGVyZmFjZSAqbUxpbmVM
b29wSUI7Ci0gICAgU3RyZWFtaW5nSW5kZXhCdWZmZXJJbnRlcmZhY2UgKm1UcmlhbmdsZUZhbklC
OwotCi0gICAgLy8gVGV4dHVyZSBjb3B5IHJlc291cmNlcwotICAgIGJvb2wgbUNvcHlSZXNvdXJj
ZXNJbml0aWFsaXplZDsKLSAgICBJRDNEMTFCdWZmZXIgKm1Db3B5VkI7Ci0gICAgSUQzRDExU2Ft
cGxlclN0YXRlICptQ29weVNhbXBsZXI7Ci0gICAgSUQzRDExSW5wdXRMYXlvdXQgKm1Db3B5SUw7
Ci0gICAgSUQzRDExVmVydGV4U2hhZGVyICptQ29weVZTOwotICAgIElEM0QxMVBpeGVsU2hhZGVy
ICptQ29weVJHQkFQUzsKLSAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUNvcHlSR0JQUzsKLSAgICBJ
RDNEMTFQaXhlbFNoYWRlciAqbUNvcHlMdW1QUzsKLSAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUNv
cHlMdW1BbHBoYVBTOwotCi0gICAgLy8gTWFza2VkIGNsZWFyIHJlc291cmNlcwotICAgIGJvb2wg
bUNsZWFyUmVzb3VyY2VzSW5pdGlhbGl6ZWQ7Ci0gICAgSUQzRDExQnVmZmVyICptQ2xlYXJWQjsK
LSAgICBJRDNEMTFJbnB1dExheW91dCAqbUNsZWFySUw7Ci0gICAgSUQzRDExVmVydGV4U2hhZGVy
ICptQ2xlYXJWUzsKLSAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUNsZWFyU2luZ2xlUFM7Ci0gICAg
SUQzRDExUGl4ZWxTaGFkZXIgKm1DbGVhck11bHRpcGxlUFM7Ci0gICAgSUQzRDExUmFzdGVyaXpl
clN0YXRlICptQ2xlYXJTY2lzc29yUlM7Ci0gICAgSUQzRDExUmFzdGVyaXplclN0YXRlICptQ2xl
YXJOb1NjaXNzb3JSUzsKLQotICAgIC8vIFN5bmMgcXVlcnkKLSAgICBJRDNEMTFRdWVyeSAqbVN5
bmNRdWVyeTsKLQotICAgIElEM0QxMURldmljZSAqbURldmljZTsKLSAgICBEM0RfRkVBVFVSRV9M
RVZFTCBtRmVhdHVyZUxldmVsOwotICAgIElEM0QxMURldmljZUNvbnRleHQgKm1EZXZpY2VDb250
ZXh0OwotICAgIElEWEdJQWRhcHRlciAqbUR4Z2lBZGFwdGVyOwotICAgIERYR0lfQURBUFRFUl9E
RVNDIG1BZGFwdGVyRGVzY3JpcHRpb247Ci0gICAgY2hhciBtRGVzY3JpcHRpb25bMTI4XTsKLSAg
ICBJRFhHSUZhY3RvcnkgKm1EeGdpRmFjdG9yeTsKLQotICAgIC8vIENhY2hlZCBkZXZpY2UgY2Fw
cwotICAgIGJvb2wgbUJHUkFUZXh0dXJlU3VwcG9ydDsKLX07Ci0KLX0KLSNlbmRpZiAvLyBMSUJH
TEVTVjJfUkVOREVSRVJfUkVOREVSRVIxMV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlcjkuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlcjkuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODlmOGJkZGM4ZDZjZmViMTI4YTQzM2VkMGY3ZTE0
ZWZlOGQzMTE5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXI5
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMyNjQgKzAsMCBAQAotI2luY2x1ZGUgInByZWNvbXBp
bGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBSZW5kZXJlcjkuY3BwOiBJbXBsZW1lbnRz
IGEgYmFjay1lbmQgc3BlY2lmaWMgY2xhc3MgZm9yIHRoZSBEM0Q5IHJlbmRlcmVyLgotCi0jaW5j
bHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVi
dWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
SW5kZXhEYXRhTWFuYWdlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJl
cjkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXI5X3V0aWxzLmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckV4ZWN1dGFibGU5LmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL1N3YXBDaGFpbjkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvVGV4dHVyZVN0b3JhZ2U5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L0ltYWdlOS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9CbGl0LmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldDkuaCIKLSNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvVmVydGV4QnVmZmVyOS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9JbmRleEJ1ZmZlcjkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3Rv
cmFnZTkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUXVlcnk5LmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL0ZlbmNlOS5oIgotCi0jaW5jbHVkZSAibGliRUdML0Rpc3Bs
YXkuaCIKLQotI2luY2x1ZGUgInRoaXJkX3BhcnR5L3RyYWNlX2V2ZW50L3RyYWNlX2V2ZW50Lmgi
Ci0KLS8vIENhbiBhbHNvIGJlIGVuYWJsZWQgYnkgZGVmaW5pbmcgRk9SQ0VfUkVGX1JBU1QgaW4g
dGhlIHByb2plY3QncyBwcmVkZWZpbmVkIG1hY3JvcwotI2RlZmluZSBSRUZfUkFTVCAwCi0KLS8v
IFRoZSAiRGVidWcgVGhpcyBQaXhlbC4uLiIgZmVhdHVyZSBpbiBQSVggb2Z0ZW4gZmFpbHMgd2hl
biB1c2luZyB0aGUKLS8vIEQzRDlFeCBpbnRlcmZhY2VzLiAgSW4gb3JkZXIgdG8gZ2V0IGRlYnVn
IHBpeGVsIHRvIHdvcmsgb24gYSBWaXN0YS9XaW4gNwotLy8gbWFjaGluZSwgZGVmaW5lICJBTkdM
RV9FTkFCTEVfRDNEOUVYPTAiIGluIHlvdXIgcHJvamVjdCBmaWxlLgotI2lmICFkZWZpbmVkKEFO
R0xFX0VOQUJMRV9EM0Q5RVgpCi0vLyBFbmFibGVzIHVzZSBvZiB0aGUgSURpcmVjdDNEOUV4IGlu
dGVyZmFjZSwgd2hlbiBhdmFpbGFibGUKLSNkZWZpbmUgQU5HTEVfRU5BQkxFX0QzRDlFWCAxCi0j
ZW5kaWYgLy8gIWRlZmluZWQoQU5HTEVfRU5BQkxFX0QzRDlFWCkKLQotbmFtZXNwYWNlIHJ4Ci17
Ci1zdGF0aWMgY29uc3QgRDNERk9STUFUIFJlbmRlclRhcmdldEZvcm1hdHNbXSA9Ci0gICAgewot
ICAgICAgICBEM0RGTVRfQTFSNUc1QjUsCi0gICAgLy8gIEQzREZNVF9BMlIxMEcxMEIxMCwgICAv
LyBUaGUgY29sb3JfcmFtcCBjb25mb3JtYW5jZSB0ZXN0IHVzZXMgUmVhZFBpeGVscyB3aXRoIFVO
U0lHTkVEX0JZVEUgY2F1c2luZyBpdCB0byB0aGluayB0aGF0IHJlbmRlcmluZyBza2lwcGVkIGEg
Y29sb3VyIHZhbHVlLgotICAgICAgICBEM0RGTVRfQThSOEc4QjgsCi0gICAgICAgIEQzREZNVF9S
NUc2QjUsCi0gICAgLy8gIEQzREZNVF9YMVI1RzVCNSwgICAgICAvLyBIYXMgbm8gY29tcGF0aWJs
ZSBPcGVuR0wgRVMgcmVuZGVyYnVmZmVyIGZvcm1hdAotICAgICAgICBEM0RGTVRfWDhSOEc4QjgK
LSAgICB9OwotCi1zdGF0aWMgY29uc3QgRDNERk9STUFUIERlcHRoU3RlbmNpbEZvcm1hdHNbXSA9
Ci0gICAgewotICAgICAgICBEM0RGTVRfVU5LTk9XTiwKLSAgICAvLyAgRDNERk1UX0QxNl9MT0NL
QUJMRSwKLSAgICAgICAgRDNERk1UX0QzMiwKLSAgICAvLyAgRDNERk1UX0QxNVMxLAotICAgICAg
ICBEM0RGTVRfRDI0UzgsCi0gICAgICAgIEQzREZNVF9EMjRYOCwKLSAgICAvLyAgRDNERk1UX0Qy
NFg0UzQsCi0gICAgICAgIEQzREZNVF9EMTYsCi0gICAgLy8gIEQzREZNVF9EMzJGX0xPQ0tBQkxF
LAotICAgIC8vICBEM0RGTVRfRDI0RlM4Ci0gICAgfTsKLQotZW51bQotewotICAgIE1BWF9WRVJU
RVhfQ09OU1RBTlRfVkVDVE9SU19EM0Q5ID0gMjU2LAotICAgIE1BWF9QSVhFTF9DT05TVEFOVF9W
RUNUT1JTX1NNMiA9IDMyLAotICAgIE1BWF9QSVhFTF9DT05TVEFOVF9WRUNUT1JTX1NNMyA9IDIy
NCwKLSAgICBNQVhfVkFSWUlOR19WRUNUT1JTX1NNMiA9IDgsCi0gICAgTUFYX1ZBUllJTkdfVkVD
VE9SU19TTTMgPSAxMCwKLQotICAgIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl9TTTMgPSA0
Ci19OwotCi1SZW5kZXJlcjk6OlJlbmRlcmVyOShlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIEhEQyBo
RGMsIGJvb2wgc29mdHdhcmVEZXZpY2UpIDogUmVuZGVyZXIoZGlzcGxheSksIG1EYyhoRGMpLCBt
U29mdHdhcmVEZXZpY2Uoc29mdHdhcmVEZXZpY2UpCi17Ci0gICAgbUQzZDlNb2R1bGUgPSBOVUxM
OwotCi0gICAgbUQzZDkgPSBOVUxMOwotICAgIG1EM2Q5RXggPSBOVUxMOwotICAgIG1EZXZpY2Ug
PSBOVUxMOwotICAgIG1EZXZpY2VFeCA9IE5VTEw7Ci0gICAgbURldmljZVdpbmRvdyA9IE5VTEw7
Ci0gICAgbUJsaXQgPSBOVUxMOwotCi0gICAgbUFkYXB0ZXIgPSBEM0RBREFQVEVSX0RFRkFVTFQ7
Ci0KLSAgICAjaWYgUkVGX1JBU1QgPT0gMSB8fCBkZWZpbmVkKEZPUkNFX1JFRl9SQVNUKQotICAg
ICAgICBtRGV2aWNlVHlwZSA9IEQzRERFVlRZUEVfUkVGOwotICAgICNlbHNlCi0gICAgICAgIG1E
ZXZpY2VUeXBlID0gRDNEREVWVFlQRV9IQUw7Ci0gICAgI2VuZGlmCi0KLSAgICBtRGV2aWNlTG9z
dCA9IGZhbHNlOwotCi0gICAgbU1heFN1cHBvcnRlZFNhbXBsZXMgPSAwOwotCi0gICAgbU1hc2tl
ZENsZWFyU2F2ZWRTdGF0ZSA9IE5VTEw7Ci0KLSAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBOVUxM
OwotICAgIG1JbmRleERhdGFNYW5hZ2VyID0gTlVMTDsKLSAgICBtTGluZUxvb3BJQiA9IE5VTEw7
Ci0KLSAgICBtTWF4TnVsbENvbG9yYnVmZmVyTFJVID0gMDsKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IE5VTV9OVUxMX0NPTE9SQlVGRkVSX0NBQ0hFX0VOVFJJRVM7IGkrKykKLSAgICB7Ci0gICAg
ICAgIG1OdWxsQ29sb3JidWZmZXJDYWNoZVtpXS5scnVDb3VudCA9IDA7Ci0gICAgICAgIG1OdWxs
Q29sb3JidWZmZXJDYWNoZVtpXS53aWR0aCA9IDA7Ci0gICAgICAgIG1OdWxsQ29sb3JidWZmZXJD
YWNoZVtpXS5oZWlnaHQgPSAwOwotICAgICAgICBtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0uYnVm
ZmVyID0gTlVMTDsKLSAgICB9Ci19Ci0KLVJlbmRlcmVyOTo6flJlbmRlcmVyOSgpCi17Ci0gICAg
cmVsZWFzZURldmljZVJlc291cmNlcygpOwotCi0gICAgaWYgKG1EZXZpY2UpCi0gICAgewotICAg
ICAgICAvLyBJZiB0aGUgZGV2aWNlIGlzIGxvc3QsIHJlc2V0IGl0IGZpcnN0IHRvIHByZXZlbnQg
bGVhdmluZyB0aGUgZHJpdmVyIGluIGFuIHVuc3RhYmxlIHN0YXRlCi0gICAgICAgIGlmICh0ZXN0
RGV2aWNlTG9zdChmYWxzZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc2V0RGV2aWNlKCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBtRGV2aWNlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EZXZp
Y2UgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtRGV2aWNlRXgpCi0gICAgewotICAgICAgICBt
RGV2aWNlRXgtPlJlbGVhc2UoKTsKLSAgICAgICAgbURldmljZUV4ID0gTlVMTDsKLSAgICB9Ci0K
LSAgICBpZiAobUQzZDkpCi0gICAgewotICAgICAgICBtRDNkOS0+UmVsZWFzZSgpOwotICAgICAg
ICBtRDNkOSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1EZXZpY2VXaW5kb3cpCi0gICAgewot
ICAgICAgICBEZXN0cm95V2luZG93KG1EZXZpY2VXaW5kb3cpOwotICAgICAgICBtRGV2aWNlV2lu
ZG93ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobUQzZDlFeCkKLSAgICB7Ci0gICAgICAgIG1E
M2Q5RXgtPlJlbGVhc2UoKTsKLSAgICAgICAgbUQzZDlFeCA9IE5VTEw7Ci0gICAgfQotCi0gICAg
aWYgKG1EM2Q5TW9kdWxlKQotICAgIHsKLSAgICAgICAgbUQzZDlNb2R1bGUgPSBOVUxMOwotICAg
IH0KLQotICAgIHdoaWxlICghbU11bHRpU2FtcGxlU3VwcG9ydC5lbXB0eSgpKQotICAgIHsKLSAg
ICAgICAgZGVsZXRlIFtdIG1NdWx0aVNhbXBsZVN1cHBvcnQuYmVnaW4oKS0+c2Vjb25kOwotICAg
ICAgICBtTXVsdGlTYW1wbGVTdXBwb3J0LmVyYXNlKG1NdWx0aVNhbXBsZVN1cHBvcnQuYmVnaW4o
KSk7Ci0gICAgfQotfQotCi1SZW5kZXJlcjkgKlJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShSZW5k
ZXJlciAqcmVuZGVyZXIpCi17Ci0gICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUocng6OlJlbmRl
cmVyOSosIHJlbmRlcmVyKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHJ4OjpSZW5kZXJlcjkq
PihyZW5kZXJlcik7Ci19Ci0KLUVHTGludCBSZW5kZXJlcjk6OmluaXRpYWxpemUoKQotewotICAg
IGlmICghaW5pdGlhbGl6ZUNvbXBpbGVyKCkpCi0gICAgewotICAgICAgICByZXR1cm4gRUdMX05P
VF9JTklUSUFMSVpFRDsKLSAgICB9Ci0KLSAgICBpZiAobVNvZnR3YXJlRGV2aWNlKQotICAgIHsK
LSAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiR2V0TW9kdWxlSGFuZGxlX3N3aWZ0c2hhZGVy
Iik7Ci0gICAgICAgIG1EM2Q5TW9kdWxlID0gR2V0TW9kdWxlSGFuZGxlKFRFWFQoInN3aWZ0c2hh
ZGVyX2QzZDkuZGxsIikpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBUUkFDRV9F
VkVOVDAoImdwdSIsICJHZXRNb2R1bGVIYW5kbGVfZDNkOSIpOwotICAgICAgICBtRDNkOU1vZHVs
ZSA9IEdldE1vZHVsZUhhbmRsZShURVhUKCJkM2Q5LmRsbCIpKTsKLSAgICB9Ci0KLSAgICBpZiAo
bUQzZDlNb2R1bGUgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIEVSUigiTm8gRDNEOSBtb2R1bGUg
Zm91bmQgLSBhYm9ydGluZyFcbiIpOwotICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpF
RDsKLSAgICB9Ci0KLSAgICB0eXBlZGVmIEhSRVNVTFQgKFdJTkFQSSAqRGlyZWN0M0RDcmVhdGU5
RXhGdW5jKShVSU5ULCBJRGlyZWN0M0Q5RXgqKik7Ci0gICAgRGlyZWN0M0RDcmVhdGU5RXhGdW5j
IERpcmVjdDNEQ3JlYXRlOUV4UHRyID0gcmVpbnRlcnByZXRfY2FzdDxEaXJlY3QzRENyZWF0ZTlF
eEZ1bmM+KEdldFByb2NBZGRyZXNzKG1EM2Q5TW9kdWxlLCAiRGlyZWN0M0RDcmVhdGU5RXgiKSk7
Ci0KLSAgICAvLyBVc2UgRGlyZWN0M0Q5RXggaWYgYXZhaWxhYmxlLiBBbW9uZyBvdGhlciB0aGlu
Z3MsIHRoaXMgdmVyc2lvbiBpcyBsZXNzCi0gICAgLy8gaW5jbGluZWQgdG8gcmVwb3J0IGEgbG9z
dCBjb250ZXh0LCBmb3IgZXhhbXBsZSB3aGVuIHRoZSB1c2VyIHN3aXRjaGVzCi0gICAgLy8gZGVz
a3RvcC4gRGlyZWN0M0Q5RXggaXMgYXZhaWxhYmxlIGluIFdpbmRvd3MgVmlzdGEgYW5kIGxhdGVy
IGlmIHN1aXRhYmxlIGRyaXZlcnMgYXJlIGF2YWlsYWJsZS4KLSAgICBpZiAoQU5HTEVfRU5BQkxF
X0QzRDlFWCAmJiBEaXJlY3QzRENyZWF0ZTlFeFB0ciAmJiBTVUNDRUVERUQoRGlyZWN0M0RDcmVh
dGU5RXhQdHIoRDNEX1NES19WRVJTSU9OLCAmbUQzZDlFeCkpKQotICAgIHsKLSAgICAgICAgVFJB
Q0VfRVZFTlQwKCJncHUiLCAiRDNkOUV4X1F1ZXJ5SW50ZXJmYWNlIik7Ci0gICAgICAgIEFTU0VS
VChtRDNkOUV4KTsKLSAgICAgICAgbUQzZDlFeC0+UXVlcnlJbnRlcmZhY2UoSUlEX0lEaXJlY3Qz
RDksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbUQzZDkpKTsKLSAgICAgICAgQVNTRVJUKG1E
M2Q5KTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUi
LCAiRGlyZWN0M0RDcmVhdGU5Iik7Ci0gICAgICAgIG1EM2Q5ID0gRGlyZWN0M0RDcmVhdGU5KEQz
RF9TREtfVkVSU0lPTik7Ci0gICAgfQotCi0gICAgaWYgKCFtRDNkOSkKLSAgICB7Ci0gICAgICAg
IEVSUigiQ291bGQgbm90IGNyZWF0ZSBEM0Q5IGRldmljZSAtIGFib3J0aW5nIVxuIik7Ci0gICAg
ICAgIHJldHVybiBFR0xfTk9UX0lOSVRJQUxJWkVEOwotICAgIH0KLQotICAgIGlmIChtRGMgIT0g
TlVMTCkKLSAgICB7Ci0gICAgLy8gIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRTogRGV0ZXJt
aW5lIHdoaWNoIGFkYXB0ZXIgaW5kZXggdGhlIGRldmljZSBjb250ZXh0IGNvcnJlc3BvbmRzIHRv
Ci0gICAgfQotCi0gICAgSFJFU1VMVCByZXN1bHQ7Ci0KLSAgICAvLyBHaXZlIHVwIG9uIGdldHRp
bmcgZGV2aWNlIGNhcHMgYWZ0ZXIgYWJvdXQgb25lIHNlY29uZC4KLSAgICB7Ci0gICAgICAgIFRS
QUNFX0VWRU5UMCgiZ3B1IiwgIkdldERldmljZUNhcHMiKTsKLSAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCAxMDsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBtRDNkOS0+
R2V0RGV2aWNlQ2FwcyhtQWRhcHRlciwgbURldmljZVR5cGUsICZtRGV2aWNlQ2Fwcyk7Ci0gICAg
ICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChyZXN1bHQg
PT0gRDNERVJSX05PVEFWQUlMQUJMRSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBT
bGVlcCgxMDApOyAgIC8vIEdpdmUgdGhlIGRyaXZlciBzb21lIHRpbWUgdG8gaW5pdGlhbGl6ZS9y
ZWNvdmVyCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChGQUlMRUQocmVzdWx0
KSkgICAvLyBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSwgRV9PVVRPRk1FTU9SWSwgRDNERVJSX0lO
VkFMSURERVZJQ0UsIG9yIGFub3RoZXIgZXJyb3Igd2UgY2FuJ3QgcmVjb3ZlciBmcm9tCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRVJSKCJmYWlsZWQgdG8gZ2V0IGRldmljZSBjYXBz
ICgweCV4KVxuIiwgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gRUdMX05PVF9JTklU
SUFMSVpFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtRGV2
aWNlQ2Fwcy5QaXhlbFNoYWRlclZlcnNpb24gPCBEM0RQU19WRVJTSU9OKDIsIDApKQotICAgIHsK
LSAgICAgICAgRVJSKCJSZW5kZXJlciBkb2VzIG5vdCBzdXBwb3J0IFBTIDIuMC4gYWJvcnRpbmch
XG4iKTsKLSAgICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7Ci0gICAgfQotCi0gICAg
Ly8gV2hlbiBEaXJlY3RYOSBpcyBydW5uaW5nIHdpdGggYW4gb2xkZXIgRGlyZWN0WDggZHJpdmVy
LCBhIFN0cmV0Y2hSZWN0IGZyb20gYSByZWd1bGFyIHRleHR1cmUgdG8gYSByZW5kZXIgdGFyZ2V0
IHRleHR1cmUgaXMgbm90IHN1cHBvcnRlZC4KLSAgICAvLyBUaGlzIGlzIHJlcXVpcmVkIGJ5IFRl
eHR1cmUyRDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0LgotICAgIGlmICgobURldmljZUNhcHMuRGV2
Q2FwczIgJiBEM0RERVZDQVBTMl9DQU5fU1RSRVRDSFJFQ1RfRlJPTV9URVhUVVJFUykgPT0gMCkK
LSAgICB7Ci0gICAgICAgIEVSUigiUmVuZGVyZXIgZG9lcyBub3Qgc3VwcG9ydCBzdHJldGN0cmVj
dCBmcm9tIHRleHR1cmVzIVxuIik7Ci0gICAgICAgIHJldHVybiBFR0xfTk9UX0lOSVRJQUxJWkVE
OwotICAgIH0KLQotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiR2V0QWRhcHRl
cklkZW50aWZpZXIiKTsKLSAgICAgICAgbUQzZDktPkdldEFkYXB0ZXJJZGVudGlmaWVyKG1BZGFw
dGVyLCAwLCAmbUFkYXB0ZXJJZGVudGlmaWVyKTsKLSAgICB9Ci0KLSAgICAvLyBBVEkgY2FyZHMg
b24gWFAgaGF2ZSBwcm9ibGVtcyB3aXRoIG5vbi1wb3dlci1vZi10d28gdGV4dHVyZXMuCi0gICAg
bVN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZXMgPSAhKG1EZXZpY2VDYXBzLlRleHR1cmVDYXBzICYg
RDNEUFRFWFRVUkVDQVBTX1BPVzIpICYmCi0gICAgICAgICEobURldmljZUNhcHMuVGV4dHVyZUNh
cHMgJiBEM0RQVEVYVFVSRUNBUFNfQ1VCRU1BUF9QT1cyKSAmJgotICAgICAgICAhKG1EZXZpY2VD
YXBzLlRleHR1cmVDYXBzICYgRDNEUFRFWFRVUkVDQVBTX05PTlBPVzJDT05ESVRJT05BTCkgJiYK
LSAgICAgICAgIShnZXRDb21wYXJhYmxlT1NWZXJzaW9uKCkgPCB2ZXJzaW9uV2luZG93c1Zpc3Rh
ICYmIG1BZGFwdGVySWRlbnRpZmllci5WZW5kb3JJZCA9PSBWRU5ET1JfSURfQU1EKTsKLQotICAg
IC8vIE11c3Qgc3VwcG9ydCBhIG1pbmltdW0gb2YgMjoxIGFuaXNvdHJvcHkgZm9yIG1heCBhbmlz
b3Ryb3B5IHRvIGJlIGNvbnNpZGVyZWQgc3VwcG9ydGVkLCBwZXIgdGhlIHNwZWMKLSAgICBtU3Vw
cG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSA9ICgobURldmljZUNhcHMuUmFzdGVyQ2FwcyAm
IEQzRFBSQVNURVJDQVBTX0FOSVNPVFJPUFkpICYmIChtRGV2aWNlQ2Fwcy5NYXhBbmlzb3Ryb3B5
ID49IDIpKTsKLQotICAgIG1NaW5Td2FwSW50ZXJ2YWwgPSA0OwotICAgIG1NYXhTd2FwSW50ZXJ2
YWwgPSAwOwotCi0gICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFscyAmIEQz
RFBSRVNFTlRfSU5URVJWQUxfSU1NRURJQVRFKQotICAgIHsKLSAgICAgICAgbU1pblN3YXBJbnRl
cnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDApOwotICAgICAgICBtTWF4U3dhcElu
dGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgMCk7Ci0gICAgfQotICAgIGlmICht
RGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX09O
RSkKLSAgICB7Ci0gICAgICAgIG1NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dhcElu
dGVydmFsLCAxKTsKLSAgICAgICAgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2Fw
SW50ZXJ2YWwsIDEpOwotICAgIH0KLSAgICBpZiAobURldmljZUNhcHMuUHJlc2VudGF0aW9uSW50
ZXJ2YWxzICYgRDNEUFJFU0VOVF9JTlRFUlZBTF9UV08pCi0gICAgewotICAgICAgICBtTWluU3dh
cEludGVydmFsID0gc3RkOjptaW4obU1pblN3YXBJbnRlcnZhbCwgMik7Ci0gICAgICAgIG1NYXhT
d2FwSW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4U3dhcEludGVydmFsLCAyKTsKLSAgICB9Ci0gICAg
aWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJW
QUxfVEhSRUUpCi0gICAgewotICAgICAgICBtTWluU3dhcEludGVydmFsID0gc3RkOjptaW4obU1p
blN3YXBJbnRlcnZhbCwgMyk7Ci0gICAgICAgIG1NYXhTd2FwSW50ZXJ2YWwgPSBzdGQ6Om1heCht
TWF4U3dhcEludGVydmFsLCAzKTsKLSAgICB9Ci0gICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRh
dGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfRk9VUikKLSAgICB7Ci0gICAgICAg
IG1NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dhcEludGVydmFsLCA0KTsKLSAgICAg
ICAgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2YWwsIDQpOwotICAg
IH0KLQotICAgIGludCBtYXggPSAwOwotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUi
LCAiZ2V0TXVsdGlTYW1wbGVTdXBwb3J0Iik7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgQXJyYXlTaXplKFJlbmRlclRhcmdldEZvcm1hdHMpOyArK2kpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGJvb2wgKm11bHRpc2FtcGxlQXJyYXkgPSBuZXcgYm9vbFtEM0RNVUxUSVNB
TVBMRV8xNl9TQU1QTEVTICsgMV07Ci0gICAgICAgICAgICBnZXRNdWx0aVNhbXBsZVN1cHBvcnQo
UmVuZGVyVGFyZ2V0Rm9ybWF0c1tpXSwgbXVsdGlzYW1wbGVBcnJheSk7Ci0gICAgICAgICAgICBt
TXVsdGlTYW1wbGVTdXBwb3J0W1JlbmRlclRhcmdldEZvcm1hdHNbaV1dID0gbXVsdGlzYW1wbGVB
cnJheTsKLQotICAgICAgICAgICAgZm9yIChpbnQgaiA9IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBM
RVM7IGogPj0gMDsgLS1qKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtdWx0
aXNhbXBsZUFycmF5W2pdICYmIGogIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUgJiYgaiA+
IG1heCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1heCA9IGo7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAg
ewotICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJnZXRNdWx0aVNhbXBsZVN1cHBvcnQyIik7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgQXJyYXlTaXplKERlcHRoU3Rl
bmNpbEZvcm1hdHMpOyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChEZXB0aFN0ZW5j
aWxGb3JtYXRzW2ldID09IEQzREZNVF9VTktOT1dOKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgICAgICBib29sICptdWx0aXNhbXBsZUFycmF5ID0gbmV3IGJvb2xbRDNETVVM
VElTQU1QTEVfMTZfU0FNUExFUyArIDFdOwotICAgICAgICAgICAgZ2V0TXVsdGlTYW1wbGVTdXBw
b3J0KERlcHRoU3RlbmNpbEZvcm1hdHNbaV0sIG11bHRpc2FtcGxlQXJyYXkpOwotICAgICAgICAg
ICAgbU11bHRpU2FtcGxlU3VwcG9ydFtEZXB0aFN0ZW5jaWxGb3JtYXRzW2ldXSA9IG11bHRpc2Ft
cGxlQXJyYXk7Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGogPSBEM0RNVUxUSVNBTVBMRV8xNl9T
QU1QTEVTOyBqID49IDA7IC0taikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAo
bXVsdGlzYW1wbGVBcnJheVtqXSAmJiBqICE9IEQzRE1VTFRJU0FNUExFX05PTk1BU0tBQkxFICYm
IGogPiBtYXgpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtYXggPSBq
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQot
ICAgIG1NYXhTdXBwb3J0ZWRTYW1wbGVzID0gbWF4OwotCi0gICAgc3RhdGljIGNvbnN0IFRDSEFS
IHdpbmRvd05hbWVbXSA9IFRFWFQoIkFuZ2xlSGlkZGVuV2luZG93Iik7Ci0gICAgc3RhdGljIGNv
bnN0IFRDSEFSIGNsYXNzTmFtZVtdID0gVEVYVCgiU1RBVElDIik7Ci0KLSAgICB7Ci0gICAgICAg
IFRSQUNFX0VWRU5UMCgiZ3B1IiwgIkNyZWF0ZVdpbmRvd0V4Iik7Ci0gICAgICAgIG1EZXZpY2VX
aW5kb3cgPSBDcmVhdGVXaW5kb3dFeChXU19FWF9OT0FDVElWQVRFLCBjbGFzc05hbWUsIHdpbmRv
d05hbWUsIFdTX0RJU0FCTEVEIHwgV1NfUE9QVVAsIDAsIDAsIDEsIDEsIEhXTkRfTUVTU0FHRSwg
TlVMTCwgR2V0TW9kdWxlSGFuZGxlKE5VTEwpLCBOVUxMKTsKLSAgICB9Ci0KLSAgICBEM0RQUkVT
RU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRlcnMgPSBnZXREZWZhdWx0UHJlc2VudFBhcmFt
ZXRlcnMoKTsKLSAgICBEV09SRCBiZWhhdmlvckZsYWdzID0gRDNEQ1JFQVRFX0ZQVV9QUkVTRVJW
RSB8IEQzRENSRUFURV9OT1dJTkRPV0NIQU5HRVM7Ci0KLSAgICB7Ci0gICAgICAgIFRSQUNFX0VW
RU5UMCgiZ3B1IiwgIkQzZDlfQ3JlYXRlRGV2aWNlIik7Ci0gICAgICAgIHJlc3VsdCA9IG1EM2Q5
LT5DcmVhdGVEZXZpY2UobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBtRGV2aWNlV2luZG93LCBiZWhh
dmlvckZsYWdzIHwgRDNEQ1JFQVRFX0hBUkRXQVJFX1ZFUlRFWFBST0NFU1NJTkcgfCBEM0RDUkVB
VEVfUFVSRURFVklDRSwgJnByZXNlbnRQYXJhbWV0ZXJzLCAmbURldmljZSk7Ci0gICAgfQotICAg
IGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkgfHwgcmVzdWx0ID09IEQzREVSUl9ERVZJQ0VMT1NUKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEVHTF9CQURfQUxMT0M7Ci0gICAgfQotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQot
ICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiRDNkOV9DcmVhdGVEZXZpY2UyIik7
Ci0gICAgICAgIHJlc3VsdCA9IG1EM2Q5LT5DcmVhdGVEZXZpY2UobUFkYXB0ZXIsIG1EZXZpY2VU
eXBlLCBtRGV2aWNlV2luZG93LCBiZWhhdmlvckZsYWdzIHwgRDNEQ1JFQVRFX1NPRlRXQVJFX1ZF
UlRFWFBST0NFU1NJTkcsICZwcmVzZW50UGFyYW1ldGVycywgJm1EZXZpY2UpOwotCi0gICAgICAg
IGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHJlc3Vs
dCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8
fCByZXN1bHQgPT0gRDNERVJSX05PVEFWQUlMQUJMRSB8fCByZXN1bHQgPT0gRDNERVJSX0RFVklD
RUxPU1QpOwotICAgICAgICAgICAgcmV0dXJuIEVHTF9CQURfQUxMT0M7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAobUQzZDlFeCkKLSAgICB7Ci0gICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1
IiwgIm1EZXZpY2VfUXVlcnlJbnRlcmZhY2UiKTsKLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+
UXVlcnlJbnRlcmZhY2UoSUlEX0lEaXJlY3QzRERldmljZTlFeCwgKHZvaWQqKikgJm1EZXZpY2VF
eCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgfQotCi0gICAgewot
ICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJTaGFkZXJDYWNoZSBpbml0aWFsaXplIik7Ci0g
ICAgICAgIG1WZXJ0ZXhTaGFkZXJDYWNoZS5pbml0aWFsaXplKG1EZXZpY2UpOwotICAgICAgICBt
UGl4ZWxTaGFkZXJDYWNoZS5pbml0aWFsaXplKG1EZXZpY2UpOwotICAgIH0KLQotICAgIC8vIENo
ZWNrIG9jY2x1c2lvbiBxdWVyeSBzdXBwb3J0Ci0gICAgSURpcmVjdDNEUXVlcnk5ICpvY2NsdXNp
b25RdWVyeSA9IE5VTEw7Ci0gICAgewotICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJkZXZp
Y2VfQ3JlYXRlUXVlcnkiKTsKLSAgICAgICAgaWYgKFNVQ0NFRURFRChtRGV2aWNlLT5DcmVhdGVR
dWVyeShEM0RRVUVSWVRZUEVfT0NDTFVTSU9OLCAmb2NjbHVzaW9uUXVlcnkpKSAmJiBvY2NsdXNp
b25RdWVyeSkKLSAgICAgICAgewotICAgICAgICAgICAgb2NjbHVzaW9uUXVlcnktPlJlbGVhc2Uo
KTsKLSAgICAgICAgICAgIG1PY2NsdXNpb25RdWVyeVN1cHBvcnQgPSB0cnVlOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbU9jY2x1c2lvblF1ZXJ5U3Vw
cG9ydCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgZXZlbnQgcXVl
cnkgc3VwcG9ydAotICAgIElEaXJlY3QzRFF1ZXJ5OSAqZXZlbnRRdWVyeSA9IE5VTEw7Ci0gICAg
ewotICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJkZXZpY2VfQ3JlYXRlUXVlcnkyIik7Ci0g
ICAgICAgIGlmIChTVUNDRUVERUQobURldmljZS0+Q3JlYXRlUXVlcnkoRDNEUVVFUllUWVBFX0VW
RU5ULCAmZXZlbnRRdWVyeSkpICYmIGV2ZW50UXVlcnkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGV2ZW50UXVlcnktPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1FdmVudFF1ZXJ5U3VwcG9ydCA9
IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBt
RXZlbnRRdWVyeVN1cHBvcnQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEQzRERJ
U1BMQVlNT0RFIGN1cnJlbnREaXNwbGF5TW9kZTsKLSAgICBtRDNkOS0+R2V0QWRhcHRlckRpc3Bs
YXlNb2RlKG1BZGFwdGVyLCAmY3VycmVudERpc3BsYXlNb2RlKTsKLQotICAgIC8vIENoZWNrIHZl
cnRleCB0ZXh0dXJlIHN1cHBvcnQKLSAgICAvLyBPbmx5IERpcmVjdDNEIDEwIHJlYWR5IGRldmlj
ZXMgc3VwcG9ydCBhbGwgdGhlIG5lY2Vzc2FyeSB2ZXJ0ZXggdGV4dHVyZSBmb3JtYXRzLgotICAg
IC8vIFdlIHRlc3QgdGhpcyB1c2luZyBEM0Q5IGJ5IGNoZWNraW5nIHN1cHBvcnQgZm9yIHRoZSBS
MTZGIGZvcm1hdC4KLSAgICBtVmVydGV4VGV4dHVyZVN1cHBvcnQgPSBtRGV2aWNlQ2Fwcy5QaXhl
bFNoYWRlclZlcnNpb24gPj0gRDNEUFNfVkVSU0lPTigzLCAwKSAmJgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIs
IG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEVVNBR0Vf
UVVFUllfVkVSVEVYVEVYVFVSRSwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX1IxNkYpKTsKLQot
ICAgIC8vIENoZWNrIGRlcHRoIHRleHR1cmUgc3VwcG9ydAotICAgIC8vIHdlIHVzZSBJTlRaIGZv
ciBkZXB0aCB0ZXh0dXJlcyBpbiBEaXJlY3QzRDkKLSAgICAvLyB3ZSBhbHNvIHdhbnQgTlVMTCB0
ZXh0dXJlIHN1cHBvcnQgdG8gZW5zdXJlIHRoZSB3ZSBjYW4gbWFrZSBkZXB0aC1vbmx5IEZCT3MK
LSAgICAvLyBzZWUgaHR0cDovL2FyYXMtcC5pbmZvL3RleHRzL0QzRDlHUFVIYWNrcy5odG1sCi0g
ICAgbURlcHRoVGV4dHVyZVN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9y
bWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRDNEVVNBR0VfREVQVEhTVEVOQ0lMLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfSU5UWikp
ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2
aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1h
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRDNEVVNBR0VfUkVOREVSVEFSR0VULCBEM0RSVFlQRV9TVVJGQUNFLCBEM0RGTVRf
TlVMTCkpOwotCi0gICAgLy8gQ2hlY2sgMzIgYml0IGZsb2F0aW5nIHBvaW50IHRleHR1cmUgc3Vw
cG9ydAotICAgIG1GbG9hdDMyRmlsdGVyU3VwcG9ydCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tE
ZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9y
bWF0LCBEM0RVU0FHRV9RVUVSWV9GSUxURVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9URVhUVVJFLCBEM0RG
TVRfQTMyQjMyRzMyUjMyRikpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VDQ0VF
REVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJl
bnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1FVRVJZX0ZJTFRFUiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJU
WVBFX0NVQkVURVhUVVJFLCBEM0RGTVRfQTMyQjMyRzMyUjMyRikpOwotCi0gICAgbUZsb2F0MzJS
ZW5kZXJTdXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRl
ciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1JFTkRF
UlRBUkdFVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9BMzJCMzJHMzJSMzJGKSkg
JiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2
aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1h
dCwgRDNEVVNBR0VfUkVOREVSVEFSR0VULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfQ1VCRVRFWFRVUkUsIEQz
REZNVF9BMzJCMzJHMzJSMzJGKSk7Ci0KLSAgICBpZiAoIW1GbG9hdDMyRmlsdGVyU3VwcG9ydCAm
JiAhbUZsb2F0MzJSZW5kZXJTdXBwb3J0KQotICAgIHsKLSAgICAgICAgbUZsb2F0MzJUZXh0dXJl
U3VwcG9ydCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1E
ZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RS
VFlQRV9URVhUVVJFLCBEM0RGTVRfQTMyQjMyRzMyUjMyRikpICYmCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFw
dGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRDNEUlRZUEVfQ1VCRVRFWFRVUkUsIEQzREZNVF9BMzJCMzJHMzJSMzJGKSk7Ci0gICAgfQot
ICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQgPSB0cnVlOwot
ICAgIH0KLQotICAgIC8vIENoZWNrIDE2IGJpdCBmbG9hdGluZyBwb2ludCB0ZXh0dXJlIHN1cHBv
cnQKLSAgICBtRmxvYXQxNkZpbHRlclN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2
aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1h
dCwgRDNEVVNBR0VfUVVFUllfRklMVEVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1U
X0ExNkIxNkcxNlIxNkYpKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVQ0NFRURF
RChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50
RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9RVUVSWV9GSUxURVIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQ
RV9DVUJFVEVYVFVSRSwgRDNERk1UX0ExNkIxNkcxNlIxNkYpKTsKLQotICAgIG1GbG9hdDE2UmVu
ZGVyU3VwcG9ydCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIs
IG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9SRU5ERVJU
QVJHRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfQTE2QjE2RzE2UjE2RikpICYm
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0Rldmlj
ZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQs
IEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX0NVQkVURVhUVVJFLCBEM0RG
TVRfQTE2QjE2RzE2UjE2RikpOwotCi0gICAgaWYgKCFtRmxvYXQxNkZpbHRlclN1cHBvcnQgJiYg
IW1GbG9hdDE2UmVuZGVyU3VwcG9ydCkKLSAgICB7Ci0gICAgICAgIG1GbG9hdDE2VGV4dHVyZVN1
cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2
aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZ
UEVfVEVYVFVSRSwgRDNERk1UX0ExNkIxNkcxNlIxNkYpKSAmJgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRl
ciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEQzRFJUWVBFX0NVQkVURVhUVVJFLCBEM0RGTVRfQTE2QjE2RzE2UjE2RikpOwotICAgIH0KLSAg
ICBlbHNlCi0gICAgewotICAgICAgICBtRmxvYXQxNlRleHR1cmVTdXBwb3J0ID0gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICAvLyBDaGVjayBEWFQgdGV4dHVyZSBzdXBwb3J0Ci0gICAgbURYVDFUZXh0dXJl
U3VwcG9ydCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1E
ZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLCBEM0RSVFlQRV9URVhUVVJF
LCBEM0RGTVRfRFhUMSkpOwotICAgIG1EWFQzVGV4dHVyZVN1cHBvcnQgPSBTVUNDRUVERUQobUQz
ZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3Bs
YXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0RYVDMpKTsKLSAgICBt
RFhUNVRleHR1cmVTdXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdCht
QWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsIEQzRFJU
WVBFX1RFWFRVUkUsIEQzREZNVF9EWFQ1KSk7Ci0KLSAgICAvLyBDaGVjayBsdW1pbmFuY2VbYWxw
aGFdIHRleHR1cmUgc3VwcG9ydAotICAgIG1MdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCA9IFNVQ0NF
RURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJy
ZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfTDgpKTsK
LSAgICBtTHVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hl
Y2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUu
Rm9ybWF0LCAwLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfQThMOCkpOwotCi0gICAgaW5pdGlh
bGl6ZURldmljZSgpOwotCi0gICAgcmV0dXJuIEVHTF9TVUNDRVNTOwotfQotCi0vLyBkbyBhbnkg
b25lLXRpbWUgZGV2aWNlIGluaXRpYWxpemF0aW9uCi0vLyBOT1RFOiB0aGlzIGlzIGFsc28gbmVl
ZGVkIGFmdGVyIGEgZGV2aWNlIGxvc3QvcmVzZXQKLS8vIHRvIHJlc2V0IHRoZSBzY2VuZSBzdGF0
dXMgYW5kIGVuc3VyZSB0aGUgZGVmYXVsdCBzdGF0ZXMgYXJlIHJlc2V0Lgotdm9pZCBSZW5kZXJl
cjk6OmluaXRpYWxpemVEZXZpY2UoKQotewotICAgIC8vIFBlcm1hbmVudCBub24tZGVmYXVsdCBz
dGF0ZXMKLSAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19QT0lOVFNQUklURUVOQUJM
RSwgVFJVRSk7Ci0gICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfTEFTVFBJWEVMLCBG
QUxTRSk7Ci0KLSAgICBpZiAobURldmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJzaW9uID49IEQzRFBT
X1ZFUlNJT04oMywgMCkpCi0gICAgewotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19QT0lOVFNJWkVfTUFYLCAoRFdPUkQmKW1EZXZpY2VDYXBzLk1heFBvaW50U2l6ZSk7Ci0g
ICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX1BPSU5UU0laRV9NQVgsIDB4M0Y4MDAwMDApOyAgIC8vIDEuMGYKLSAgICB9Ci0KLSAgICBt
YXJrQWxsU3RhdGVEaXJ0eSgpOwotCi0gICAgbVNjZW5lU3RhcnRlZCA9IGZhbHNlOwotCi0gICAg
QVNTRVJUKCFtQmxpdCAmJiAhbVZlcnRleERhdGFNYW5hZ2VyICYmICFtSW5kZXhEYXRhTWFuYWdl
cik7Ci0gICAgbUJsaXQgPSBuZXcgQmxpdCh0aGlzKTsKLSAgICBtVmVydGV4RGF0YU1hbmFnZXIg
PSBuZXcgcng6OlZlcnRleERhdGFNYW5hZ2VyKHRoaXMpOwotICAgIG1JbmRleERhdGFNYW5hZ2Vy
ID0gbmV3IHJ4OjpJbmRleERhdGFNYW5hZ2VyKHRoaXMpOwotfQotCi1EM0RQUkVTRU5UX1BBUkFN
RVRFUlMgUmVuZGVyZXI5OjpnZXREZWZhdWx0UHJlc2VudFBhcmFtZXRlcnMoKQotewotICAgIEQz
RFBSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50UGFyYW1ldGVycyA9IHswfTsKLQotICAgIC8vIFRo
ZSBkZWZhdWx0IHN3YXAgY2hhaW4gaXMgbmV2ZXIgYWN0dWFsbHkgdXNlZC4gU3VyZmFjZSB3aWxs
IGNyZWF0ZSBhIG5ldyBzd2FwIGNoYWluIHdpdGggdGhlIHByb3BlciBwYXJhbWV0ZXJzLgotICAg
IHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQgPSBEM0RGTVRfVU5LTk9X
TjsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyQ291bnQgPSAxOwotICAgIHByZXNl
bnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJGb3JtYXQgPSBEM0RGTVRfVU5LTk9XTjsKLSAgICBwcmVz
ZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGggPSAxOwotICAgIHByZXNlbnRQYXJhbWV0ZXJz
LkJhY2tCdWZmZXJIZWlnaHQgPSAxOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkVuYWJsZUF1dG9E
ZXB0aFN0ZW5jaWwgPSBGQUxTRTsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5GbGFncyA9IDA7Ci0g
ICAgcHJlc2VudFBhcmFtZXRlcnMuaERldmljZVdpbmRvdyA9IG1EZXZpY2VXaW5kb3c7Ci0gICAg
cHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVRdWFsaXR5ID0gMDsKLSAgICBwcmVzZW50UGFy
YW1ldGVycy5NdWx0aVNhbXBsZVR5cGUgPSBEM0RNVUxUSVNBTVBMRV9OT05FOwotICAgIHByZXNl
bnRQYXJhbWV0ZXJzLlByZXNlbnRhdGlvbkludGVydmFsID0gRDNEUFJFU0VOVF9JTlRFUlZBTF9E
RUZBVUxUOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLlN3YXBFZmZlY3QgPSBEM0RTV0FQRUZGRUNU
X0RJU0NBUkQ7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuV2luZG93ZWQgPSBUUlVFOwotCi0gICAg
cmV0dXJuIHByZXNlbnRQYXJhbWV0ZXJzOwotfQotCi1pbnQgUmVuZGVyZXI5OjpnZW5lcmF0ZUNv
bmZpZ3MoQ29uZmlnRGVzYyAqKmNvbmZpZ0Rlc2NMaXN0KQotewotICAgIEQzRERJU1BMQVlNT0RF
IGN1cnJlbnREaXNwbGF5TW9kZTsKLSAgICBtRDNkOS0+R2V0QWRhcHRlckRpc3BsYXlNb2RlKG1B
ZGFwdGVyLCAmY3VycmVudERpc3BsYXlNb2RlKTsKLQotICAgIHVuc2lnbmVkIGludCBudW1SZW5k
ZXJGb3JtYXRzID0gQXJyYXlTaXplKFJlbmRlclRhcmdldEZvcm1hdHMpOwotICAgIHVuc2lnbmVk
IGludCBudW1EZXB0aEZvcm1hdHMgPSBBcnJheVNpemUoRGVwdGhTdGVuY2lsRm9ybWF0cyk7Ci0g
ICAgKCpjb25maWdEZXNjTGlzdCkgPSBuZXcgQ29uZmlnRGVzY1tudW1SZW5kZXJGb3JtYXRzICog
bnVtRGVwdGhGb3JtYXRzXTsKLSAgICBpbnQgbnVtQ29uZmlncyA9IDA7Ci0KLSAgICBmb3IgKHVu
c2lnbmVkIGludCBmb3JtYXRJbmRleCA9IDA7IGZvcm1hdEluZGV4IDwgbnVtUmVuZGVyRm9ybWF0
czsgZm9ybWF0SW5kZXgrKykKLSAgICB7Ci0gICAgICAgIEQzREZPUk1BVCByZW5kZXJUYXJnZXRG
b3JtYXQgPSBSZW5kZXJUYXJnZXRGb3JtYXRzW2Zvcm1hdEluZGV4XTsKLQotICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5
cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgRDNE
UlRZUEVfU1VSRkFDRSwgcmVuZGVyVGFyZ2V0Rm9ybWF0KTsKLQotICAgICAgICBpZiAoU1VDQ0VF
REVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGRl
cHRoU3RlbmNpbEluZGV4ID0gMDsgZGVwdGhTdGVuY2lsSW5kZXggPCBudW1EZXB0aEZvcm1hdHM7
IGRlcHRoU3RlbmNpbEluZGV4KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRDNE
Rk9STUFUIGRlcHRoU3RlbmNpbEZvcm1hdCA9IERlcHRoU3RlbmNpbEZvcm1hdHNbZGVwdGhTdGVu
Y2lsSW5kZXhdOwotICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gRDNEX09LOwotCi0g
ICAgICAgICAgICAgICAgaWYoZGVwdGhTdGVuY2lsRm9ybWF0ICE9IEQzREZNVF9VTktOT1dOKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbUQzZDktPkNo
ZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2Rl
LkZvcm1hdCwgRDNEVVNBR0VfREVQVEhTVEVOQ0lMLCBEM0RSVFlQRV9TVVJGQUNFLCBkZXB0aFN0
ZW5jaWxGb3JtYXQpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChT
VUNDRUVERUQocmVzdWx0KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmKGRlcHRoU3RlbmNpbEZvcm1hdCAhPSBEM0RGTVRfVU5LTk9XTikKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbUQzZDktPkNoZWNrRGVw
dGhTdGVuY2lsTWF0Y2gobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUu
Rm9ybWF0LCByZW5kZXJUYXJnZXRGb3JtYXQsIGRlcHRoU3RlbmNpbEZvcm1hdCk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3Vs
dCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIENvbmZp
Z0Rlc2MgbmV3Q29uZmlnOwotICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLnJlbmRl
clRhcmdldEZvcm1hdCA9IGQzZDlfZ2w6OkNvbnZlcnRCYWNrQnVmZmVyRm9ybWF0KHJlbmRlclRh
cmdldEZvcm1hdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcuZGVwdGhTdGVu
Y2lsRm9ybWF0ID0gZDNkOV9nbDo6Q29udmVydERlcHRoU3RlbmNpbEZvcm1hdChkZXB0aFN0ZW5j
aWxGb3JtYXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLm11bHRpU2FtcGxl
ID0gMDsgLy8gRklYTUU6IGVudW1lcmF0ZSBtdWx0aS1zYW1wbGluZwotICAgICAgICAgICAgICAg
ICAgICAgICAgbmV3Q29uZmlnLmZhc3RDb25maWcgPSAoY3VycmVudERpc3BsYXlNb2RlLkZvcm1h
dCA9PSByZW5kZXJUYXJnZXRGb3JtYXQpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAoKmNv
bmZpZ0Rlc2NMaXN0KVtudW1Db25maWdzKytdID0gbmV3Q29uZmlnOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIG51bUNvbmZpZ3M7Ci19Ci0KLXZvaWQgUmVuZGVyZXI5OjpkZWxldGVD
b25maWdzKENvbmZpZ0Rlc2MgKmNvbmZpZ0Rlc2NMaXN0KQotewotICAgIGRlbGV0ZSBbXSAoY29u
ZmlnRGVzY0xpc3QpOwotfQotCi12b2lkIFJlbmRlcmVyOTo6c3RhcnRTY2VuZSgpCi17Ci0gICAg
aWYgKCFtU2NlbmVTdGFydGVkKQotICAgIHsKLSAgICAgICAgbG9uZyByZXN1bHQgPSBtRGV2aWNl
LT5CZWdpblNjZW5lKCk7Ci0gICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkgewotICAgICAg
ICAgICAgLy8gVGhpcyBpcyBkZWZlbnNpdmUgY2hlY2tpbmcgYWdhaW5zdCB0aGUgZGV2aWNlIGJl
aW5nCi0gICAgICAgICAgICAvLyBsb3N0IGF0IHVuZXhwZWN0ZWQgdGltZXMuCi0gICAgICAgICAg
ICBtU2NlbmVTdGFydGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBSZW5k
ZXJlcjk6OmVuZFNjZW5lKCkKLXsKLSAgICBpZiAobVNjZW5lU3RhcnRlZCkKLSAgICB7Ci0gICAg
ICAgIC8vIEVuZFNjZW5lIGNhbiBmYWlsIGlmIHRoZSBkZXZpY2Ugd2FzIGxvc3QsIGZvciBleGFt
cGxlIGR1ZQotICAgICAgICAvLyB0byBhIFREUiBkdXJpbmcgYSBkcmF3IGNhbGwuCi0gICAgICAg
IG1EZXZpY2UtPkVuZFNjZW5lKCk7Ci0gICAgICAgIG1TY2VuZVN0YXJ0ZWQgPSBmYWxzZTsKLSAg
ICB9Ci19Ci0KLXZvaWQgUmVuZGVyZXI5OjpzeW5jKGJvb2wgYmxvY2spCi17Ci0gICAgSFJFU1VM
VCByZXN1bHQ7Ci0KLSAgICBJRGlyZWN0M0RRdWVyeTkqIHF1ZXJ5ID0gYWxsb2NhdGVFdmVudFF1
ZXJ5KCk7Ci0gICAgaWYgKCFxdWVyeSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICByZXN1bHQgPSBxdWVyeS0+SXNzdWUoRDNESVNTVUVfRU5EKTsKLSAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOwotCi0gICAgZG8KLSAgICB7Ci0gICAgICAgIHJlc3VsdCA9IHF1ZXJ5
LT5HZXREYXRhKE5VTEwsIDAsIEQzREdFVERBVEFfRkxVU0gpOwotCi0gICAgICAgIGlmKGJsb2Nr
ICYmIHJlc3VsdCA9PSBTX0ZBTFNFKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBLZWVwIHBv
bGxpbmcsIGJ1dCBhbGxvdyBvdGhlciB0aHJlYWRzIHRvIGRvIHNvbWV0aGluZyB1c2VmdWwgZmly
c3QKLSAgICAgICAgICAgIFNsZWVwKDApOwotICAgICAgICAgICAgLy8gZXhwbGljaXRseSBjaGVj
ayBmb3IgZGV2aWNlIGxvc3MKLSAgICAgICAgICAgIC8vIHNvbWUgZHJpdmVycyBzZWVtIHRvIHJl
dHVybiBTX0ZBTFNFIGV2ZW4gaWYgdGhlIGRldmljZSBpcyBsb3N0Ci0gICAgICAgICAgICAvLyBp
bnN0ZWFkIG9mIEQzREVSUl9ERVZJQ0VMT1NUIGxpa2UgdGhleSBzaG91bGQKLSAgICAgICAgICAg
IGlmICh0ZXN0RGV2aWNlTG9zdChmYWxzZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgcmVzdWx0ID0gRDNERVJSX0RFVklDRUxPU1Q7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgd2hpbGUoYmxvY2sgJiYgcmVzdWx0ID09IFNfRkFMU0UpOwotCi0gICAgZnJl
ZUV2ZW50UXVlcnkocXVlcnkpOwotCi0gICAgaWYgKGQzZDk6OmlzRGV2aWNlTG9zdEVycm9yKHJl
c3VsdCkpCi0gICAgewotICAgICAgICBub3RpZnlEZXZpY2VMb3N0KCk7Ci0gICAgfQotfQotCi1T
d2FwQ2hhaW4gKlJlbmRlcmVyOTo6Y3JlYXRlU3dhcENoYWluKEhXTkQgd2luZG93LCBIQU5ETEUg
c2hhcmVIYW5kbGUsIEdMZW51bSBiYWNrQnVmZmVyRm9ybWF0LCBHTGVudW0gZGVwdGhCdWZmZXJG
b3JtYXQpCi17Ci0gICAgcmV0dXJuIG5ldyByeDo6U3dhcENoYWluOSh0aGlzLCB3aW5kb3csIHNo
YXJlSGFuZGxlLCBiYWNrQnVmZmVyRm9ybWF0LCBkZXB0aEJ1ZmZlckZvcm1hdCk7Ci19Ci0KLUlE
aXJlY3QzRFF1ZXJ5OSogUmVuZGVyZXI5OjphbGxvY2F0ZUV2ZW50UXVlcnkoKQotewotICAgIElE
aXJlY3QzRFF1ZXJ5OSAqcXVlcnkgPSBOVUxMOwotCi0gICAgaWYgKG1FdmVudFF1ZXJ5UG9vbC5l
bXB0eSgpKQotICAgIHsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVR
dWVyeShEM0RRVUVSWVRZUEVfRVZFTlQsICZxdWVyeSk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHF1ZXJ5ID0gbUV2
ZW50UXVlcnlQb29sLmJhY2soKTsKLSAgICAgICAgbUV2ZW50UXVlcnlQb29sLnBvcF9iYWNrKCk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHF1ZXJ5OwotfQotCi12b2lkIFJlbmRlcmVyOTo6ZnJlZUV2
ZW50UXVlcnkoSURpcmVjdDNEUXVlcnk5KiBxdWVyeSkKLXsKLSAgICBpZiAobUV2ZW50UXVlcnlQ
b29sLnNpemUoKSA+IDEwMDApCi0gICAgewotICAgICAgICBxdWVyeS0+UmVsZWFzZSgpOwotICAg
IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBtRXZlbnRRdWVyeVBvb2wucHVzaF9iYWNrKHF1
ZXJ5KTsKLSAgICB9Ci19Ci0KLUlEaXJlY3QzRFZlcnRleFNoYWRlcjkgKlJlbmRlcmVyOTo6Y3Jl
YXRlVmVydGV4U2hhZGVyKGNvbnN0IERXT1JEICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCkKLXsK
LSAgICByZXR1cm4gbVZlcnRleFNoYWRlckNhY2hlLmNyZWF0ZShmdW5jdGlvbiwgbGVuZ3RoKTsK
LX0KLQotSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpSZW5kZXJlcjk6OmNyZWF0ZVBpeGVsU2hhZGVy
KGNvbnN0IERXT1JEICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCkKLXsKLSAgICByZXR1cm4gbVBp
eGVsU2hhZGVyQ2FjaGUuY3JlYXRlKGZ1bmN0aW9uLCBsZW5ndGgpOwotfQotCi1IUkVTVUxUIFJl
bmRlcmVyOTo6Y3JlYXRlVmVydGV4QnVmZmVyKFVJTlQgTGVuZ3RoLCBEV09SRCBVc2FnZSwgSURp
cmVjdDNEVmVydGV4QnVmZmVyOSAqKnBwVmVydGV4QnVmZmVyKQotewotICAgIEQzRFBPT0wgUG9v
bCA9IGdldEJ1ZmZlclBvb2woVXNhZ2UpOwotICAgIHJldHVybiBtRGV2aWNlLT5DcmVhdGVWZXJ0
ZXhCdWZmZXIoTGVuZ3RoLCBVc2FnZSwgMCwgUG9vbCwgcHBWZXJ0ZXhCdWZmZXIsIE5VTEwpOwot
fQotCi1WZXJ0ZXhCdWZmZXIgKlJlbmRlcmVyOTo6Y3JlYXRlVmVydGV4QnVmZmVyKCkKLXsKLSAg
ICByZXR1cm4gbmV3IFZlcnRleEJ1ZmZlcjkodGhpcyk7Ci19Ci0KLUhSRVNVTFQgUmVuZGVyZXI5
OjpjcmVhdGVJbmRleEJ1ZmZlcihVSU5UIExlbmd0aCwgRFdPUkQgVXNhZ2UsIEQzREZPUk1BVCBG
b3JtYXQsIElEaXJlY3QzREluZGV4QnVmZmVyOSAqKnBwSW5kZXhCdWZmZXIpCi17Ci0gICAgRDNE
UE9PTCBQb29sID0gZ2V0QnVmZmVyUG9vbChVc2FnZSk7Ci0gICAgcmV0dXJuIG1EZXZpY2UtPkNy
ZWF0ZUluZGV4QnVmZmVyKExlbmd0aCwgVXNhZ2UsIEZvcm1hdCwgUG9vbCwgcHBJbmRleEJ1ZmZl
ciwgTlVMTCk7Ci19Ci0KLUluZGV4QnVmZmVyICpSZW5kZXJlcjk6OmNyZWF0ZUluZGV4QnVmZmVy
KCkKLXsKLSAgICByZXR1cm4gbmV3IEluZGV4QnVmZmVyOSh0aGlzKTsKLX0KLQotQnVmZmVyU3Rv
cmFnZSAqUmVuZGVyZXI5OjpjcmVhdGVCdWZmZXJTdG9yYWdlKCkKLXsKLSAgICByZXR1cm4gbmV3
IEJ1ZmZlclN0b3JhZ2U5KCk7Ci19Ci0KLVF1ZXJ5SW1wbCAqUmVuZGVyZXI5OjpjcmVhdGVRdWVy
eShHTGVudW0gdHlwZSkKLXsKLSAgICByZXR1cm4gbmV3IFF1ZXJ5OSh0aGlzLCB0eXBlKTsKLX0K
LQotRmVuY2VJbXBsICpSZW5kZXJlcjk6OmNyZWF0ZUZlbmNlKCkKLXsKLSAgICByZXR1cm4gbmV3
IEZlbmNlOSh0aGlzKTsKLX0KLQotdm9pZCBSZW5kZXJlcjk6OnNldFNhbXBsZXJTdGF0ZShnbDo6
U2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBjb25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1w
bGVyU3RhdGUpCi17Ci0gICAgYm9vbCAqZm9yY2VTZXRTYW1wbGVycyA9ICh0eXBlID09IGdsOjpT
QU1QTEVSX1BJWEVMKSA/IG1Gb3JjZVNldFBpeGVsU2FtcGxlclN0YXRlcyA6IG1Gb3JjZVNldFZl
cnRleFNhbXBsZXJTdGF0ZXM7Ci0gICAgZ2w6OlNhbXBsZXJTdGF0ZSAqYXBwbGllZFNhbXBsZXJz
ID0gKHR5cGUgPT0gZ2w6OlNBTVBMRVJfUElYRUwpID8gbUN1clBpeGVsU2FtcGxlclN0YXRlczog
bUN1clZlcnRleFNhbXBsZXJTdGF0ZXM7Ci0KLSAgICBpZiAoZm9yY2VTZXRTYW1wbGVyc1tpbmRl
eF0gfHwgbWVtY21wKCZzYW1wbGVyU3RhdGUsICZhcHBsaWVkU2FtcGxlcnNbaW5kZXhdLCBzaXpl
b2YoZ2w6OlNhbXBsZXJTdGF0ZSkpICE9IDApCi0gICAgewotICAgICAgICBpbnQgZDNkU2FtcGxl
ck9mZnNldCA9ICh0eXBlID09IGdsOjpTQU1QTEVSX1BJWEVMKSA/IDAgOiBEM0RWRVJURVhURVhU
VVJFU0FNUExFUjA7Ci0gICAgICAgIGludCBkM2RTYW1wbGVyID0gaW5kZXggKyBkM2RTYW1wbGVy
T2Zmc2V0OwotCi0gICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBE
M0RTQU1QX0FERFJFU1NVLCBnbF9kM2Q5OjpDb252ZXJ0VGV4dHVyZVdyYXAoc2FtcGxlclN0YXRl
LndyYXBTKSk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBE
M0RTQU1QX0FERFJFU1NWLCBnbF9kM2Q5OjpDb252ZXJ0VGV4dHVyZVdyYXAoc2FtcGxlclN0YXRl
LndyYXBUKSk7Ci0KLSAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIs
IEQzRFNBTVBfTUFHRklMVEVSLCBnbF9kM2Q5OjpDb252ZXJ0TWFnRmlsdGVyKHNhbXBsZXJTdGF0
ZS5tYWdGaWx0ZXIsIHNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5KSk7Ci0gICAgICAgIEQzRFRF
WFRVUkVGSUxURVJUWVBFIGQzZE1pbkZpbHRlciwgZDNkTWlwRmlsdGVyOwotICAgICAgICBnbF9k
M2Q5OjpDb252ZXJ0TWluRmlsdGVyKHNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIsICZkM2RNaW5GaWx0
ZXIsICZkM2RNaXBGaWx0ZXIsIHNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5KTsKLSAgICAgICAg
bURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUlORklMVEVSLCBk
M2RNaW5GaWx0ZXIpOwotICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxl
ciwgRDNEU0FNUF9NSVBGSUxURVIsIGQzZE1pcEZpbHRlcik7Ci0gICAgICAgIG1EZXZpY2UtPlNl
dFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01BWE1JUExFVkVMLCBzYW1wbGVyU3Rh
dGUubG9kT2Zmc2V0KTsKLSAgICAgICAgaWYgKG1TdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlzb3Ry
b3B5KQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNk
U2FtcGxlciwgRDNEU0FNUF9NQVhBTklTT1RST1BZLCAoRFdPUkQpc2FtcGxlclN0YXRlLm1heEFu
aXNvdHJvcHkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yY2VTZXRTYW1wbGVyc1tpbmRl
eF0gPSBmYWxzZTsKLSAgICBhcHBsaWVkU2FtcGxlcnNbaW5kZXhdID0gc2FtcGxlclN0YXRlOwot
fQotCi12b2lkIFJlbmRlcmVyOTo6c2V0VGV4dHVyZShnbDo6U2FtcGxlclR5cGUgdHlwZSwgaW50
IGluZGV4LCBnbDo6VGV4dHVyZSAqdGV4dHVyZSkKLXsKLSAgICBpbnQgZDNkU2FtcGxlck9mZnNl
dCA9ICh0eXBlID09IGdsOjpTQU1QTEVSX1BJWEVMKSA/IDAgOiBEM0RWRVJURVhURVhUVVJFU0FN
UExFUjA7Ci0gICAgaW50IGQzZFNhbXBsZXIgPSBpbmRleCArIGQzZFNhbXBsZXJPZmZzZXQ7Ci0g
ICAgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpkM2RUZXh0dXJlID0gTlVMTDsKLSAgICB1bnNpZ25l
ZCBpbnQgc2VyaWFsID0gMDsKLSAgICBib29sIGZvcmNlU2V0VGV4dHVyZSA9IGZhbHNlOwotCi0g
ICAgdW5zaWduZWQgaW50ICphcHBsaWVkU2VyaWFscyA9ICh0eXBlID09IGdsOjpTQU1QTEVSX1BJ
WEVMKSA/IG1DdXJQaXhlbFRleHR1cmVTZXJpYWxzIDogbUN1clZlcnRleFRleHR1cmVTZXJpYWxz
OwotCi0gICAgaWYgKHRleHR1cmUpCi0gICAgewotICAgICAgICBUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZSAqdGV4U3RvcmFnZSA9IHRleHR1cmUtPmdldE5hdGl2ZVRleHR1cmUoKTsKLSAgICAgICAg
aWYgKHRleFN0b3JhZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFRleHR1cmVTdG9yYWdlOSAq
c3RvcmFnZTkgPSBUZXh0dXJlU3RvcmFnZTk6Om1ha2VUZXh0dXJlU3RvcmFnZTkodGV4U3RvcmFn
ZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwotICAgICAgICAgICAgZDNkVGV4dHVyZSA9IHN0b3Jh
Z2U5LT5nZXRCYXNlVGV4dHVyZSgpOwotICAgICAgICB9Ci0gICAgICAgIC8vIElmIHdlIGdldCBO
VUxMIGJhY2sgZnJvbSBnZXRCYXNlVGV4dHVyZSBoZXJlLCBzb21ldGhpbmcgd2VudCB3cm9uZwot
ICAgICAgICAvLyBpbiB0aGUgdGV4dHVyZSBjbGFzcyBhbmQgd2UncmUgdW5leHBlY3RlZGx5IG1p
c3NpbmcgdGhlIGQzZCB0ZXh0dXJlCi0gICAgICAgIEFTU0VSVChkM2RUZXh0dXJlICE9IE5VTEwp
OwotCi0gICAgICAgIHNlcmlhbCA9IHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKTsKLSAgICAg
ICAgZm9yY2VTZXRUZXh0dXJlID0gdGV4dHVyZS0+aGFzRGlydHlJbWFnZXMoKTsKLSAgICB9Ci0K
LSAgICBpZiAoZm9yY2VTZXRUZXh0dXJlIHx8IGFwcGxpZWRTZXJpYWxzW2luZGV4XSAhPSBzZXJp
YWwpCi0gICAgewotICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlKGQzZFNhbXBsZXIsIGQzZFRl
eHR1cmUpOwotICAgIH0KLQotICAgIGFwcGxpZWRTZXJpYWxzW2luZGV4XSA9IHNlcmlhbDsKLX0K
LQotdm9pZCBSZW5kZXJlcjk6OnNldFJhc3Rlcml6ZXJTdGF0ZShjb25zdCBnbDo6UmFzdGVyaXpl
clN0YXRlICZyYXN0ZXJTdGF0ZSkKLXsKLSAgICBib29sIHJhc3RlclN0YXRlQ2hhbmdlZCA9IG1G
b3JjZVNldFJhc3RlclN0YXRlIHx8IG1lbWNtcCgmcmFzdGVyU3RhdGUsICZtQ3VyUmFzdGVyU3Rh
dGUsIHNpemVvZihnbDo6UmFzdGVyaXplclN0YXRlKSkgIT0gMDsKLQotICAgIGlmIChyYXN0ZXJT
dGF0ZUNoYW5nZWQpCi0gICAgewotICAgICAgICAvLyBTZXQgdGhlIGN1bGwgbW9kZQotICAgICAg
ICBpZiAocmFzdGVyU3RhdGUuY3VsbEZhY2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBnbF9kM2Q5OjpDb252ZXJ0Q3VsbE1v
ZGUocmFzdGVyU3RhdGUuY3VsbE1vZGUsIHJhc3RlclN0YXRlLmZyb250RmFjZSkpOwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQzRENVTExfTk9ORSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAocmFzdGVyU3RhdGUucG9seWdvbk9mZnNldEZpbGwpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChtQ3VyRGVwdGhTaXplID4gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TTE9QRVNDQUxFREVQVEhCSUFTLCAq
KERXT1JEKikmcmFzdGVyU3RhdGUucG9seWdvbk9mZnNldEZhY3Rvcik7Ci0KLSAgICAgICAgICAg
ICAgICBmbG9hdCBkZXB0aEJpYXMgPSBsZGV4cChyYXN0ZXJTdGF0ZS5wb2x5Z29uT2Zmc2V0VW5p
dHMsIC1zdGF0aWNfY2FzdDxpbnQ+KG1DdXJEZXB0aFNpemUpKTsKLSAgICAgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ERVBUSEJJQVMsICooRFdPUkQqKSZkZXB0aEJp
YXMpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewot
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0xPUEVTQ0FMRURFUFRI
QklBUywgMCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ERVBU
SEJJQVMsIDApOwotICAgICAgICB9Ci0KLSAgICAgICAgbUN1clJhc3RlclN0YXRlID0gcmFzdGVy
U3RhdGU7Ci0gICAgfQotCi0gICAgbUZvcmNlU2V0UmFzdGVyU3RhdGUgPSBmYWxzZTsKLX0KLQot
dm9pZCBSZW5kZXJlcjk6OnNldEJsZW5kU3RhdGUoY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5k
U3RhdGUsIGNvbnN0IGdsOjpDb2xvciAmYmxlbmRDb2xvciwgdW5zaWduZWQgaW50IHNhbXBsZU1h
c2spCi17Ci0gICAgYm9vbCBibGVuZFN0YXRlQ2hhbmdlZCA9IG1Gb3JjZVNldEJsZW5kU3RhdGUg
fHwgbWVtY21wKCZibGVuZFN0YXRlLCAmbUN1ckJsZW5kU3RhdGUsIHNpemVvZihnbDo6QmxlbmRT
dGF0ZSkpICE9IDA7Ci0gICAgYm9vbCBibGVuZENvbG9yQ2hhbmdlZCA9IG1Gb3JjZVNldEJsZW5k
U3RhdGUgfHwgbWVtY21wKCZibGVuZENvbG9yLCAmbUN1ckJsZW5kQ29sb3IsIHNpemVvZihnbDo6
Q29sb3IpKSAhPSAwOwotICAgIGJvb2wgc2FtcGxlTWFza0NoYW5nZWQgPSBtRm9yY2VTZXRCbGVu
ZFN0YXRlIHx8IHNhbXBsZU1hc2sgIT0gbUN1clNhbXBsZU1hc2s7Ci0KLSAgICBpZiAoYmxlbmRT
dGF0ZUNoYW5nZWQgfHwgYmxlbmRDb2xvckNoYW5nZWQpCi0gICAgewotICAgICAgICBpZiAoYmxl
bmRTdGF0ZS5ibGVuZCkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7Ci0KLSAgICAgICAgICAgIGlmIChi
bGVuZFN0YXRlLnNvdXJjZUJsZW5kUkdCICE9IEdMX0NPTlNUQU5UX0FMUEhBICYmIGJsZW5kU3Rh
dGUuc291cmNlQmxlbmRSR0IgIT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBICYmCi0gICAg
ICAgICAgICAgICAgYmxlbmRTdGF0ZS5kZXN0QmxlbmRSR0IgIT0gR0xfQ09OU1RBTlRfQUxQSEEg
JiYgYmxlbmRTdGF0ZS5kZXN0QmxlbmRSR0IgIT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhB
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX0JMRU5ERkFDVE9SLCBnbF9kM2Q5OjpDb252ZXJ0Q29sb3IoYmxlbmRDb2xvcikpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JMRU5ERkFDVE9SLCBEM0RDT0xP
Ul9SR0JBKGdsOjp1bm9ybTw4PihibGVuZENvbG9yLmFscGhhKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bDo6dW5vcm08OD4oYmxlbmRDb2xvci5hbHBoYSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3Jt
PDg+KGJsZW5kQ29sb3IuYWxwaGEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4PihibGVu
ZENvbG9yLmFscGhhKSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19TUkNCTEVORCwgZ2xfZDNkOTo6Q29udmVydEJsZW5kRnVuYyhi
bGVuZFN0YXRlLnNvdXJjZUJsZW5kUkdCKSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19ERVNUQkxFTkQsIGdsX2QzZDk6OkNvbnZlcnRCbGVuZEZ1bmMoYmxlbmRT
dGF0ZS5kZXN0QmxlbmRSR0IpKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX0JMRU5ET1AsIGdsX2QzZDk6OkNvbnZlcnRCbGVuZE9wKGJsZW5kU3RhdGUuYmxlbmRF
cXVhdGlvblJHQikpOwotCi0gICAgICAgICAgICBpZiAoYmxlbmRTdGF0ZS5zb3VyY2VCbGVuZFJH
QiAhPSBibGVuZFN0YXRlLnNvdXJjZUJsZW5kQWxwaGEgfHwKLSAgICAgICAgICAgICAgICBibGVu
ZFN0YXRlLmRlc3RCbGVuZFJHQiAhPSBibGVuZFN0YXRlLmRlc3RCbGVuZEFscGhhIHx8Ci0gICAg
ICAgICAgICAgICAgYmxlbmRTdGF0ZS5ibGVuZEVxdWF0aW9uUkdCICE9IGJsZW5kU3RhdGUuYmxl
bmRFcXVhdGlvbkFscGhhKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX1NFUEFSQVRFQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7Ci0K
LSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TUkNCTEVOREFM
UEhBLCBnbF9kM2Q5OjpDb252ZXJ0QmxlbmRGdW5jKGJsZW5kU3RhdGUuc291cmNlQmxlbmRBbHBo
YSkpOwotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RFU1RC
TEVOREFMUEhBLCBnbF9kM2Q5OjpDb252ZXJ0QmxlbmRGdW5jKGJsZW5kU3RhdGUuZGVzdEJsZW5k
QWxwaGEpKTsKLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19C
TEVORE9QQUxQSEEsIGdsX2QzZDk6OkNvbnZlcnRCbGVuZE9wKGJsZW5kU3RhdGUuYmxlbmRFcXVh
dGlvbkFscGhhKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQQVJB
VEVBTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoYmxlbmRTdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2UpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEZJWE1FKCJTYW1wbGUgYWxwaGEgdG8gY292ZXJhZ2UgaXMgdW5pbXBsZW1lbnRlZC4iKTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIFNldCB0aGUgY29sb3IgbWFzawotICAgICAgICBib29s
IHplcm9Db2xvck1hc2tBbGxvd2VkID0gZ2V0QWRhcHRlclZlbmRvcigpICE9IFZFTkRPUl9JRF9B
TUQ7Ci0gICAgICAgIC8vIEFwcGFyZW50bHkgc29tZSBBVEkgY2FyZHMgaGF2ZSBhIGJ1ZyB3aGVy
ZSBhIGRyYXcgd2l0aCBhIHplcm8gY29sb3IKLSAgICAgICAgLy8gd3JpdGUgbWFzayBjYW4gY2F1
c2UgbGF0ZXIgZHJhd3MgdG8gaGF2ZSBpbmNvcnJlY3QgcmVzdWx0cy4gSW5zdGVhZCwKLSAgICAg
ICAgLy8gc2V0IGEgbm9uemVybyBjb2xvciB3cml0ZSBtYXNrIGJ1dCBtb2RpZnkgdGhlIGJsZW5k
IHN0YXRlIHNvIHRoYXQgbm8KLSAgICAgICAgLy8gZHJhd2luZyBpcyBkb25lLgotICAgICAgICAv
LyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0L2lzc3Vlcy9kZXRhaWw/aWQ9
MTY5Ci0KLSAgICAgICAgRFdPUkQgY29sb3JNYXNrID0gZ2xfZDNkOTo6Q29udmVydENvbG9yTWFz
ayhibGVuZFN0YXRlLmNvbG9yTWFza1JlZCwgYmxlbmRTdGF0ZS5jb2xvck1hc2tHcmVlbiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGVuZFN0
YXRlLmNvbG9yTWFza0JsdWUsIGJsZW5kU3RhdGUuY29sb3JNYXNrQWxwaGEpOwotICAgICAgICBp
ZiAoY29sb3JNYXNrID09IDAgJiYgIXplcm9Db2xvck1hc2tBbGxvd2VkKQotICAgICAgICB7Ci0g
ICAgICAgICAgICAvLyBFbmFibGUgZ3JlZW4gY2hhbm5lbCwgYnV0IHNldCBibGVuZGluZyBzbyBu
b3RoaW5nIHdpbGwgYmUgZHJhd24uCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCBEM0RDT0xPUldSSVRFRU5BQkxFX0dSRUVOKTsKLSAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUs
IFRSVUUpOwotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TUkNC
TEVORCwgRDNEQkxFTkRfWkVSTyk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19ERVNUQkxFTkQsIEQzREJMRU5EX09ORSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVORE9QLCBEM0RCTEVORE9QX0FERCk7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCBjb2xvck1hc2spOwotICAgICAgICB9Ci0KLSAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfRElUSEVSRU5BQkxFLCBibGVuZFN0
YXRlLmRpdGhlciA/IFRSVUUgOiBGQUxTRSk7Ci0KLSAgICAgICAgbUN1ckJsZW5kU3RhdGUgPSBi
bGVuZFN0YXRlOwotICAgICAgICBtQ3VyQmxlbmRDb2xvciA9IGJsZW5kQ29sb3I7Ci0gICAgfQot
Ci0gICAgaWYgKHNhbXBsZU1hc2tDaGFuZ2VkKQotICAgIHsKLSAgICAgICAgLy8gU2V0IHRoZSBt
dWx0aXNhbXBsZSBtYXNrCi0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01V
TFRJU0FNUExFQU5USUFMSUFTLCBUUlVFKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfTVVMVElTQU1QTEVNQVNLLCBzdGF0aWNfY2FzdDxEV09SRD4oc2FtcGxlTWFzaykp
OwotCi0gICAgICAgIG1DdXJTYW1wbGVNYXNrID0gc2FtcGxlTWFzazsKLSAgICB9Ci0KLSAgICBt
Rm9yY2VTZXRCbGVuZFN0YXRlID0gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyZXI5OjpzZXREZXB0
aFN0ZW5jaWxTdGF0ZShjb25zdCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmRlcHRoU3RlbmNpbFN0
YXRlLCBpbnQgc3RlbmNpbFJlZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgc3RlbmNpbEJhY2tSZWYsIGJvb2wgZnJvbnRGYWNlQ0NXKQotewotICAgIGJvb2wgZGVw
dGhTdGVuY2lsU3RhdGVDaGFuZ2VkID0gbUZvcmNlU2V0RGVwdGhTdGVuY2lsU3RhdGUgfHwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNtcCgmZGVwdGhTdGVuY2lsU3Rh
dGUsICZtQ3VyRGVwdGhTdGVuY2lsU3RhdGUsIHNpemVvZihnbDo6RGVwdGhTdGVuY2lsU3RhdGUp
KSAhPSAwOwotICAgIGJvb2wgc3RlbmNpbFJlZkNoYW5nZWQgPSBtRm9yY2VTZXREZXB0aFN0ZW5j
aWxTdGF0ZSB8fCBzdGVuY2lsUmVmICE9IG1DdXJTdGVuY2lsUmVmIHx8Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZW5jaWxCYWNrUmVmICE9IG1DdXJTdGVuY2lsQmFja1JlZjsKLSAg
ICBib29sIGZyb250RmFjZUNDV0NoYW5nZWQgPSBtRm9yY2VTZXREZXB0aFN0ZW5jaWxTdGF0ZSB8
fCBmcm9udEZhY2VDQ1cgIT0gbUN1ckZyb250RmFjZUNDVzsKLQotICAgIGlmIChkZXB0aFN0ZW5j
aWxTdGF0ZUNoYW5nZWQpCi0gICAgewotICAgICAgICBpZiAoZGVwdGhTdGVuY2lsU3RhdGUuZGVw
dGhUZXN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19aRU5BQkxFLCBEM0RaQl9UUlVFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX1pGVU5DLCBnbF9kM2Q5OjpDb252ZXJ0Q29tcGFyaXNvbihkZXB0aFN0ZW5j
aWxTdGF0ZS5kZXB0aEZ1bmMpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEQzRFpC
X0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1DdXJEZXB0aFN0ZW5jaWxTdGF0ZSA9IGRl
cHRoU3RlbmNpbFN0YXRlOwotICAgIH0KLQotICAgIGlmIChkZXB0aFN0ZW5jaWxTdGF0ZUNoYW5n
ZWQgfHwgc3RlbmNpbFJlZkNoYW5nZWQgfHwgZnJvbnRGYWNlQ0NXQ2hhbmdlZCkKLSAgICB7Ci0g
ICAgICAgIGlmIChkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsVGVzdCAmJiBtQ3VyU3RlbmNpbFNp
emUgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19TVEVOQ0lMRU5BQkxFLCBUUlVFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX1RXT1NJREVEU1RFTkNJTE1PREUsIFRSVUUpOwotCi0gICAgICAgICAgICAv
LyBGSVhNRTogVW5zdXBwb3J0ZWQgYnkgRDNEOQotICAgICAgICAgICAgY29uc3QgRDNEUkVOREVS
U1RBVEVUWVBFIEQzRFJTX0NDV19TVEVOQ0lMUkVGID0gRDNEUlNfU1RFTkNJTFJFRjsKLSAgICAg
ICAgICAgIGNvbnN0IEQzRFJFTkRFUlNUQVRFVFlQRSBEM0RSU19DQ1dfU1RFTkNJTE1BU0sgPSBE
M0RSU19TVEVOQ0lMTUFTSzsKLSAgICAgICAgICAgIGNvbnN0IEQzRFJFTkRFUlNUQVRFVFlQRSBE
M0RSU19DQ1dfU1RFTkNJTFdSSVRFTUFTSyA9IEQzRFJTX1NURU5DSUxXUklURU1BU0s7Ci0gICAg
ICAgICAgICBpZiAoZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbFdyaXRlbWFzayAhPSBkZXB0aFN0
ZW5jaWxTdGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzayB8fAotICAgICAgICAgICAgICAgIHN0ZW5j
aWxSZWYgIT0gc3RlbmNpbEJhY2tSZWYgfHwKLSAgICAgICAgICAgICAgICBkZXB0aFN0ZW5jaWxT
dGF0ZS5zdGVuY2lsTWFzayAhPSBkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsQmFja01hc2spCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRVJSKCJTZXBhcmF0ZSBmcm9udC9iYWNrIHN0
ZW5jaWwgd3JpdGVtYXNrcywgcmVmZXJlbmNlIHZhbHVlcywgb3Igc3RlbmNpbCBtYXNrIHZhbHVl
cyBhcmUgaW52YWxpZCB1bmRlciBXZWJHTC4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgLy8gZ2V0IHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIHN0ZW5jaWwgcmVmCi0gICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgbWF4U3RlbmNpbCA9ICgxIDw8IG1DdXJTdGVuY2lsU2l6ZSkgLSAxOwot
Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShmcm9udEZhY2VDQ1cgPyBEM0RS
U19TVEVOQ0lMV1JJVEVNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxXUklURU1BU0ssCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsV3Jp
dGVtYXNrKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGZyb250RmFjZUND
VyA/IEQzRFJTX1NURU5DSUxGVU5DIDogRDNEUlNfQ0NXX1NURU5DSUxGVU5DLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6Q29udmVydENvbXBhcmlzb24oZGVw
dGhTdGVuY2lsU3RhdGUuc3RlbmNpbEZ1bmMpKTsKLQotICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoZnJvbnRGYWNlQ0NXID8gRDNEUlNfU1RFTkNJTFJFRiA6IEQzRFJTX0NDV19T
VEVOQ0lMUkVGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0ZW5jaWxS
ZWYgPCAoaW50KW1heFN0ZW5jaWwpID8gc3RlbmNpbFJlZiA6IG1heFN0ZW5jaWwpOwotICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoZnJvbnRGYWNlQ0NXID8gRDNEUlNfU1RFTkNJ
TE1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTE1BU0ssCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsTWFzayk7Ci0KLSAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGZyb250RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxGQUlM
IDogRDNEUlNfQ0NXX1NURU5DSUxGQUlMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2xfZDNkOTo6Q29udmVydFN0ZW5jaWxPcChkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2ls
RmFpbCkpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoZnJvbnRGYWNlQ0NX
ID8gRDNEUlNfU1RFTkNJTFpGQUlMIDogRDNEUlNfQ0NXX1NURU5DSUxaRkFJTCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRTdGVuY2lsT3AoZGVw
dGhTdGVuY2lsU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwpKTsKLSAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKGZyb250RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxQQVNTIDogRDNE
UlNfQ0NXX1NURU5DSUxQQVNTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2xfZDNkOTo6Q29udmVydFN0ZW5jaWxPcChkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsUGFzc0Rl
cHRoUGFzcykpOwotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZSghZnJvbnRG
YWNlQ0NXID8gRDNEUlNfU1RFTkNJTFdSSVRFTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMV1JJVEVN
QVNLLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGhTdGVuY2lsU3Rh
dGUuc3RlbmNpbEJhY2tXcml0ZW1hc2spOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoIWZyb250RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxGVU5DIDogRDNEUlNfQ0NXX1NURU5D
SUxGVU5DLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6Q29u
dmVydENvbXBhcmlzb24oZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbEJhY2tGdW5jKSk7Ci0KLSAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKCFmcm9udEZhY2VDQ1cgPyBEM0RSU19T
VEVOQ0lMUkVGIDogRDNEUlNfQ0NXX1NURU5DSUxSRUYsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoc3RlbmNpbEJhY2tSZWYgPCAoaW50KW1heFN0ZW5jaWwpID8gc3RlbmNp
bEJhY2tSZWYgOiBtYXhTdGVuY2lsKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKCFmcm9udEZhY2VDQ1cgPyBEM0RSU19TVEVOQ0lMTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lM
TUFTSywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoU3RlbmNpbFN0
YXRlLnN0ZW5jaWxCYWNrTWFzayk7Ci0KLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKCFmcm9udEZhY2VDQ1cgPyBEM0RSU19TVEVOQ0lMRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lM
RkFJTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZl
cnRTdGVuY2lsT3AoZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbEJhY2tGYWlsKSk7Ci0gICAgICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZSghZnJvbnRGYWNlQ0NXID8gRDNEUlNfU1RFTkNJ
TFpGQUlMIDogRDNEUlNfQ0NXX1NURU5DSUxaRkFJTCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRTdGVuY2lsT3AoZGVwdGhTdGVuY2lsU3RhdGUu
c3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsKSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZSghZnJvbnRGYWNlQ0NXID8gRDNEUlNfU1RFTkNJTFBBU1MgOiBEM0RSU19DQ1dfU1RF
TkNJTFBBU1MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9kM2Q5OjpD
b252ZXJ0U3RlbmNpbE9wKGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFz
cykpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRFRU5BQkxF
LCBkZXB0aFN0ZW5jaWxTdGF0ZS5kZXB0aE1hc2sgPyBUUlVFIDogRkFMU0UpOwotCi0gICAgICAg
IG1DdXJTdGVuY2lsUmVmID0gc3RlbmNpbFJlZjsKLSAgICAgICAgbUN1clN0ZW5jaWxCYWNrUmVm
ID0gc3RlbmNpbEJhY2tSZWY7Ci0gICAgICAgIG1DdXJGcm9udEZhY2VDQ1cgPSBmcm9udEZhY2VD
Q1c7Ci0gICAgfQotCi0gICAgbUZvcmNlU2V0RGVwdGhTdGVuY2lsU3RhdGUgPSBmYWxzZTsKLX0K
LQotdm9pZCBSZW5kZXJlcjk6OnNldFNjaXNzb3JSZWN0YW5nbGUoY29uc3QgZ2w6OlJlY3Rhbmds
ZSAmc2Npc3NvciwgYm9vbCBlbmFibGVkKQotewotICAgIGJvb2wgc2Npc3NvckNoYW5nZWQgPSBt
Rm9yY2VTZXRTY2lzc29yIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNtcCgmc2Np
c3NvciwgJm1DdXJTY2lzc29yLCBzaXplb2YoZ2w6OlJlY3RhbmdsZSkpICE9IDAgfHwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZCAhPSBtU2Npc3NvckVuYWJsZWQ7Ci0KLSAgICBp
ZiAoc2Npc3NvckNoYW5nZWQpCi0gICAgewotICAgICAgICBpZiAoZW5hYmxlZCkKLSAgICAgICAg
ewotICAgICAgICAgICAgUkVDVCByZWN0OwotICAgICAgICAgICAgcmVjdC5sZWZ0ID0gZ2w6OmNs
YW1wKHNjaXNzb3IueCwgMCwgc3RhdGljX2Nhc3Q8aW50PihtUmVuZGVyVGFyZ2V0RGVzYy53aWR0
aCkpOwotICAgICAgICAgICAgcmVjdC50b3AgPSBnbDo6Y2xhbXAoc2Npc3Nvci55LCAwLCBzdGF0
aWNfY2FzdDxpbnQ+KG1SZW5kZXJUYXJnZXREZXNjLmhlaWdodCkpOwotICAgICAgICAgICAgcmVj
dC5yaWdodCA9IGdsOjpjbGFtcChzY2lzc29yLnggKyBzY2lzc29yLndpZHRoLCAwLCBzdGF0aWNf
Y2FzdDxpbnQ+KG1SZW5kZXJUYXJnZXREZXNjLndpZHRoKSk7Ci0gICAgICAgICAgICByZWN0LmJv
dHRvbSA9IGdsOjpjbGFtcChzY2lzc29yLnkgKyBzY2lzc29yLmhlaWdodCwgMCwgc3RhdGljX2Nh
c3Q8aW50PihtUmVuZGVyVGFyZ2V0RGVzYy5oZWlnaHQpKTsKLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFNjaXNzb3JSZWN0KCZyZWN0KTsKLSAgICAgICAgfQotCi0gICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX1NDSVNTT1JURVNURU5BQkxFLCBlbmFibGVkID8gVFJVRSA6IEZB
TFNFKTsKLQotICAgICAgICBtU2Npc3NvckVuYWJsZWQgPSBlbmFibGVkOwotICAgICAgICBtQ3Vy
U2Npc3NvciA9IHNjaXNzb3I7Ci0gICAgfQotCi0gICAgbUZvcmNlU2V0U2Npc3NvciA9IGZhbHNl
OwotfQotCi1ib29sIFJlbmRlcmVyOTo6c2V0Vmlld3BvcnQoY29uc3QgZ2w6OlJlY3RhbmdsZSAm
dmlld3BvcnQsIGZsb2F0IHpOZWFyLCBmbG9hdCB6RmFyLCBHTGVudW0gZHJhd01vZGUsIEdMZW51
bSBmcm9udEZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpZ25vcmVWaWV3
cG9ydCkKLXsKLSAgICBnbDo6UmVjdGFuZ2xlIGFjdHVhbFZpZXdwb3J0ID0gdmlld3BvcnQ7Ci0g
ICAgZmxvYXQgYWN0dWFsWk5lYXIgPSBnbDo6Y2xhbXAwMSh6TmVhcik7Ci0gICAgZmxvYXQgYWN0
dWFsWkZhciA9IGdsOjpjbGFtcDAxKHpGYXIpOwotICAgIGlmIChpZ25vcmVWaWV3cG9ydCkKLSAg
ICB7Ci0gICAgICAgIGFjdHVhbFZpZXdwb3J0LnggPSAwOwotICAgICAgICBhY3R1YWxWaWV3cG9y
dC55ID0gMDsKLSAgICAgICAgYWN0dWFsVmlld3BvcnQud2lkdGggPSBtUmVuZGVyVGFyZ2V0RGVz
Yy53aWR0aDsKLSAgICAgICAgYWN0dWFsVmlld3BvcnQuaGVpZ2h0ID0gbVJlbmRlclRhcmdldERl
c2MuaGVpZ2h0OwotICAgICAgICBhY3R1YWxaTmVhciA9IDAuMGY7Ci0gICAgICAgIGFjdHVhbFpG
YXIgPSAxLjBmOwotICAgIH0KLQotICAgIEQzRFZJRVdQT1JUOSBkeFZpZXdwb3J0OwotICAgIGR4
Vmlld3BvcnQuWCA9IGdsOjpjbGFtcChhY3R1YWxWaWV3cG9ydC54LCAwLCBzdGF0aWNfY2FzdDxp
bnQ+KG1SZW5kZXJUYXJnZXREZXNjLndpZHRoKSk7Ci0gICAgZHhWaWV3cG9ydC5ZID0gZ2w6OmNs
YW1wKGFjdHVhbFZpZXdwb3J0LnksIDAsIHN0YXRpY19jYXN0PGludD4obVJlbmRlclRhcmdldERl
c2MuaGVpZ2h0KSk7Ci0gICAgZHhWaWV3cG9ydC5XaWR0aCA9IGdsOjpjbGFtcChhY3R1YWxWaWV3
cG9ydC53aWR0aCwgMCwgc3RhdGljX2Nhc3Q8aW50PihtUmVuZGVyVGFyZ2V0RGVzYy53aWR0aCkg
LSBzdGF0aWNfY2FzdDxpbnQ+KGR4Vmlld3BvcnQuWCkpOwotICAgIGR4Vmlld3BvcnQuSGVpZ2h0
ID0gZ2w6OmNsYW1wKGFjdHVhbFZpZXdwb3J0LmhlaWdodCwgMCwgc3RhdGljX2Nhc3Q8aW50Piht
UmVuZGVyVGFyZ2V0RGVzYy5oZWlnaHQpIC0gc3RhdGljX2Nhc3Q8aW50PihkeFZpZXdwb3J0Llkp
KTsKLSAgICBkeFZpZXdwb3J0Lk1pblogPSBhY3R1YWxaTmVhcjsKLSAgICBkeFZpZXdwb3J0Lk1h
eFogPSBhY3R1YWxaRmFyOwotCi0gICAgaWYgKGR4Vmlld3BvcnQuV2lkdGggPD0gMCB8fCBkeFZp
ZXdwb3J0LkhlaWdodCA8PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIE5v
dGhpbmcgdG8gcmVuZGVyCi0gICAgfQotCi0gICAgZmxvYXQgZGVwdGhGcm9udCA9ICFnbDo6SXNU
cmlhbmdsZU1vZGUoZHJhd01vZGUpID8gMC4wZiA6IChmcm9udEZhY2UgPT0gR0xfQ0NXID8gMS4w
ZiA6IC0xLjBmKTsKLQotICAgIGJvb2wgdmlld3BvcnRDaGFuZ2VkID0gbUZvcmNlU2V0Vmlld3Bv
cnQgfHwgbWVtY21wKCZhY3R1YWxWaWV3cG9ydCwgJm1DdXJWaWV3cG9ydCwgc2l6ZW9mKGdsOjpS
ZWN0YW5nbGUpKSAhPSAwIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxaTmVh
ciAhPSBtQ3VyTmVhciB8fCBhY3R1YWxaRmFyICE9IG1DdXJGYXIgfHwgbUN1ckRlcHRoRnJvbnQg
IT0gZGVwdGhGcm9udDsKLSAgICBpZiAodmlld3BvcnRDaGFuZ2VkKQotICAgIHsKLSAgICAgICAg
bURldmljZS0+U2V0Vmlld3BvcnQoJmR4Vmlld3BvcnQpOwotCi0gICAgICAgIG1DdXJWaWV3cG9y
dCA9IGFjdHVhbFZpZXdwb3J0OwotICAgICAgICBtQ3VyTmVhciA9IGFjdHVhbFpOZWFyOwotICAg
ICAgICBtQ3VyRmFyID0gYWN0dWFsWkZhcjsKLSAgICAgICAgbUN1ckRlcHRoRnJvbnQgPSBkZXB0
aEZyb250OwotCi0gICAgICAgIGR4X1ZlcnRleENvbnN0YW50cyB2YyA9IHswfTsKLSAgICAgICAg
ZHhfUGl4ZWxDb25zdGFudHMgcGMgPSB7MH07Ci0KLSAgICAgICAgdmMudmlld0FkanVzdFswXSA9
IChmbG9hdCkoKGFjdHVhbFZpZXdwb3J0LndpZHRoIC0gKGludClkeFZpZXdwb3J0LldpZHRoKSAr
IDIgKiAoYWN0dWFsVmlld3BvcnQueCAtIChpbnQpZHhWaWV3cG9ydC5YKSAtIDEpIC8gZHhWaWV3
cG9ydC5XaWR0aDsKLSAgICAgICAgdmMudmlld0FkanVzdFsxXSA9IChmbG9hdCkoKGFjdHVhbFZp
ZXdwb3J0LmhlaWdodCAtIChpbnQpZHhWaWV3cG9ydC5IZWlnaHQpICsgMiAqIChhY3R1YWxWaWV3
cG9ydC55IC0gKGludClkeFZpZXdwb3J0LlkpIC0gMSkgLyBkeFZpZXdwb3J0LkhlaWdodDsKLSAg
ICAgICAgdmMudmlld0FkanVzdFsyXSA9IChmbG9hdClhY3R1YWxWaWV3cG9ydC53aWR0aCAvIGR4
Vmlld3BvcnQuV2lkdGg7Ci0gICAgICAgIHZjLnZpZXdBZGp1c3RbM10gPSAoZmxvYXQpYWN0dWFs
Vmlld3BvcnQuaGVpZ2h0IC8gZHhWaWV3cG9ydC5IZWlnaHQ7Ci0KLSAgICAgICAgcGMudmlld0Nv
b3Jkc1swXSA9IGFjdHVhbFZpZXdwb3J0LndpZHRoICAqIDAuNWY7Ci0gICAgICAgIHBjLnZpZXdD
b29yZHNbMV0gPSBhY3R1YWxWaWV3cG9ydC5oZWlnaHQgKiAwLjVmOwotICAgICAgICBwYy52aWV3
Q29vcmRzWzJdID0gYWN0dWFsVmlld3BvcnQueCArIChhY3R1YWxWaWV3cG9ydC53aWR0aCAgKiAw
LjVmKTsKLSAgICAgICAgcGMudmlld0Nvb3Jkc1szXSA9IGFjdHVhbFZpZXdwb3J0LnkgKyAoYWN0
dWFsVmlld3BvcnQuaGVpZ2h0ICogMC41Zik7Ci0KLSAgICAgICAgcGMuZGVwdGhGcm9udFswXSA9
IChhY3R1YWxaRmFyIC0gYWN0dWFsWk5lYXIpICogMC41ZjsKLSAgICAgICAgcGMuZGVwdGhGcm9u
dFsxXSA9IChhY3R1YWxaTmVhciArIGFjdHVhbFpGYXIpICogMC41ZjsKLSAgICAgICAgcGMuZGVw
dGhGcm9udFsyXSA9IGRlcHRoRnJvbnQ7Ci0KLSAgICAgICAgdmMuZGVwdGhSYW5nZVswXSA9IGFj
dHVhbFpOZWFyOwotICAgICAgICB2Yy5kZXB0aFJhbmdlWzFdID0gYWN0dWFsWkZhcjsKLSAgICAg
ICAgdmMuZGVwdGhSYW5nZVsyXSA9IGFjdHVhbFpGYXIgLSBhY3R1YWxaTmVhcjsKLQotICAgICAg
ICBwYy5kZXB0aFJhbmdlWzBdID0gYWN0dWFsWk5lYXI7Ci0gICAgICAgIHBjLmRlcHRoUmFuZ2Vb
MV0gPSBhY3R1YWxaRmFyOwotICAgICAgICBwYy5kZXB0aFJhbmdlWzJdID0gYWN0dWFsWkZhciAt
IGFjdHVhbFpOZWFyOwotCi0gICAgICAgIGlmIChtZW1jbXAoJnZjLCAmbVZlcnRleENvbnN0YW50
cywgc2l6ZW9mKGR4X1ZlcnRleENvbnN0YW50cykpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1WZXJ0ZXhDb25zdGFudHMgPSB2YzsKLSAgICAgICAgICAgIG1EeFVuaWZvcm1zRGlydHkg
PSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1lbWNtcCgmcGMsICZtUGl4ZWxDb25z
dGFudHMsIHNpemVvZihkeF9QaXhlbENvbnN0YW50cykpICE9IDApCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG1QaXhlbENvbnN0YW50cyA9IHBjOwotICAgICAgICAgICAgbUR4VW5pZm9ybXNEaXJ0
eSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtRm9yY2VTZXRWaWV3cG9ydCA9IGZh
bHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFJlbmRlcmVyOTo6YXBwbHlQcmltaXRp
dmVUeXBlKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50KQotewotICAgIHN3aXRjaCAobW9kZSkK
LSAgICB7Ci0gICAgICBjYXNlIEdMX1BPSU5UUzoKLSAgICAgICAgbVByaW1pdGl2ZVR5cGUgPSBE
M0RQVF9QT0lOVExJU1Q7Ci0gICAgICAgIG1QcmltaXRpdmVDb3VudCA9IGNvdW50OwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfTElORVM6Ci0gICAgICAgIG1QcmltaXRpdmVUeXBlID0g
RDNEUFRfTElORUxJU1Q7Ci0gICAgICAgIG1QcmltaXRpdmVDb3VudCA9IGNvdW50IC8gMjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xJTkVfTE9PUDoKLSAgICAgICAgbVByaW1pdGl2
ZVR5cGUgPSBEM0RQVF9MSU5FU1RSSVA7Ci0gICAgICAgIG1QcmltaXRpdmVDb3VudCA9IGNvdW50
IC0gMTsgICAvLyBEM0QgZG9lc24ndCBzdXBwb3J0IGxpbmUgbG9vcHMsIHNvIHdlIGRyYXcgdGhl
IGxhc3QgbGluZSBzZXBhcmF0ZWx5Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MSU5F
X1NUUklQOgotICAgICAgICBtUHJpbWl0aXZlVHlwZSA9IEQzRFBUX0xJTkVTVFJJUDsKLSAgICAg
ICAgbVByaW1pdGl2ZUNvdW50ID0gY291bnQgLSAxOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfVFJJQU5HTEVTOgotICAgICAgICBtUHJpbWl0aXZlVHlwZSA9IEQzRFBUX1RSSUFOR0xF
TElTVDsKLSAgICAgICAgbVByaW1pdGl2ZUNvdW50ID0gY291bnQgLyAzOwotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfVFJJQU5HTEVfU1RSSVA6Ci0gICAgICAgIG1QcmltaXRpdmVUeXBl
ID0gRDNEUFRfVFJJQU5HTEVTVFJJUDsKLSAgICAgICAgbVByaW1pdGl2ZUNvdW50ID0gY291bnQg
LSAyOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVFJJQU5HTEVfRkFOOgotICAgICAg
ICBtUHJpbWl0aXZlVHlwZSA9IEQzRFBUX1RSSUFOR0xFRkFOOwotICAgICAgICBtUHJpbWl0aXZl
Q291bnQgPSBjb3VudCAtIDI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0sIGZhbHNlKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gbVByaW1pdGl2ZUNvdW50ID4gMDsKLX0KLQotCi1nbDo6UmVuZGVyYnVmZmVyICpS
ZW5kZXJlcjk6OmdldE51bGxDb2xvcmJ1ZmZlcihnbDo6UmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZl
cikKLXsKLSAgICBpZiAoIWRlcHRoYnVmZmVyKQotICAgIHsKLSAgICAgICAgRVJSKCJVbmV4cGVj
dGVkIG51bGwgZGVwdGhidWZmZXIgZm9yIGRlcHRoLW9ubHkgRkJPLiIpOwotICAgICAgICByZXR1
cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBHTHNpemVpIHdpZHRoICA9IGRlcHRoYnVmZmVyLT5nZXRX
aWR0aCgpOwotICAgIEdMc2l6ZWkgaGVpZ2h0ID0gZGVwdGhidWZmZXItPmdldEhlaWdodCgpOwot
Ci0gICAgLy8gc2VhcmNoIGNhY2hlZCBudWxsY29sb3JidWZmZXJzCi0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBOVU1fTlVMTF9DT0xPUkJVRkZFUl9DQUNIRV9FTlRSSUVTOyBpKyspCi0gICAgewot
ICAgICAgICBpZiAobU51bGxDb2xvcmJ1ZmZlckNhY2hlW2ldLmJ1ZmZlciAhPSBOVUxMICYmCi0g
ICAgICAgICAgICBtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0ud2lkdGggPT0gd2lkdGggJiYKLSAg
ICAgICAgICAgIG1OdWxsQ29sb3JidWZmZXJDYWNoZVtpXS5oZWlnaHQgPT0gaGVpZ2h0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0ubHJ1Q291bnQgPSAr
K21NYXhOdWxsQ29sb3JidWZmZXJMUlU7Ci0gICAgICAgICAgICByZXR1cm4gbU51bGxDb2xvcmJ1
ZmZlckNhY2hlW2ldLmJ1ZmZlcjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGdsOjpSZW5kZXJi
dWZmZXIgKm51bGxidWZmZXIgPSBuZXcgZ2w6OlJlbmRlcmJ1ZmZlcih0aGlzLCAwLCBuZXcgZ2w6
OkNvbG9yYnVmZmVyKHRoaXMsIHdpZHRoLCBoZWlnaHQsIEdMX05PTkUsIDApKTsKLQotICAgIC8v
IGFkZCBudWxsYnVmZmVyIHRvIHRoZSBjYWNoZQotICAgIE51bGxDb2xvcmJ1ZmZlckNhY2hlRW50
cnkgKm9sZGVzdCA9ICZtTnVsbENvbG9yYnVmZmVyQ2FjaGVbMF07Ci0gICAgZm9yIChpbnQgaSA9
IDE7IGkgPCBOVU1fTlVMTF9DT0xPUkJVRkZFUl9DQUNIRV9FTlRSSUVTOyBpKyspCi0gICAgewot
ICAgICAgICBpZiAobU51bGxDb2xvcmJ1ZmZlckNhY2hlW2ldLmxydUNvdW50IDwgb2xkZXN0LT5s
cnVDb3VudCkKLSAgICAgICAgewotICAgICAgICAgICAgb2xkZXN0ID0gJm1OdWxsQ29sb3JidWZm
ZXJDYWNoZVtpXTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGRlbGV0ZSBvbGRlc3QtPmJ1ZmZl
cjsKLSAgICBvbGRlc3QtPmJ1ZmZlciA9IG51bGxidWZmZXI7Ci0gICAgb2xkZXN0LT5scnVDb3Vu
dCA9ICsrbU1heE51bGxDb2xvcmJ1ZmZlckxSVTsKLSAgICBvbGRlc3QtPndpZHRoID0gd2lkdGg7
Ci0gICAgb2xkZXN0LT5oZWlnaHQgPSBoZWlnaHQ7Ci0KLSAgICByZXR1cm4gbnVsbGJ1ZmZlcjsK
LX0KLQotYm9vbCBSZW5kZXJlcjk6OmFwcGx5UmVuZGVyVGFyZ2V0KGdsOjpGcmFtZWJ1ZmZlciAq
ZnJhbWVidWZmZXIpCi17Ci0gICAgLy8gaWYgdGhlcmUgaXMgbm8gY29sb3IgYXR0YWNobWVudCB3
ZSBtdXN0IHN5bnRoZXNpemUgYSBOVUxMIGNvbG9yYXR0YWNobWVudAotICAgIC8vIHRvIGtlZXAg
dGhlIEQzRCBydW50aW1lIGhhcHB5LiAgVGhpcyBzaG91bGQgb25seSBiZSBwb3NzaWJsZSBpZiBk
ZXB0aCB0ZXh0dXJpbmcuCi0gICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0
ID0gTlVMTDsKLSAgICBpZiAoZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlwZSgwKSAhPSBH
TF9OT05FKQotICAgIHsKLSAgICAgICAgcmVuZGVyYnVmZmVyT2JqZWN0ID0gZnJhbWVidWZmZXIt
PmdldENvbG9yYnVmZmVyKDApOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZW5k
ZXJidWZmZXJPYmplY3QgPSBnZXROdWxsQ29sb3JidWZmZXIoZnJhbWVidWZmZXItPmdldERlcHRo
YnVmZmVyKCkpOwotICAgIH0KLSAgICBpZiAoIXJlbmRlcmJ1ZmZlck9iamVjdCkKLSAgICB7Ci0g
ICAgICAgIEVSUigidW5hYmxlIHRvIGxvY2F0ZSByZW5kZXJidWZmZXIgZm9yIEZCTy4iKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wgcmVuZGVyVGFyZ2V0Q2hhbmdl
ZCA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRTZXJpYWwgPSByZW5kZXJi
dWZmZXJPYmplY3QtPmdldFNlcmlhbCgpOwotICAgIGlmIChyZW5kZXJUYXJnZXRTZXJpYWwgIT0g
bUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwpCi0gICAgewotICAgICAgICAvLyBBcHBseSB0aGUg
cmVuZGVyIHRhcmdldCBvbiB0aGUgZGV2aWNlCi0gICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpy
ZW5kZXJUYXJnZXRTdXJmYWNlID0gTlVMTDsKLQotICAgICAgICBSZW5kZXJUYXJnZXQgKnJlbmRl
clRhcmdldCA9IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAg
IGlmIChyZW5kZXJUYXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlbmRlclRhcmdldFN1
cmZhY2UgPSBSZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShyZW5kZXJUYXJnZXQpLT5n
ZXRTdXJmYWNlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXJlbmRlclRhcmdldFN1cmZh
Y2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigicmVuZGVyIHRhcmdldCBwb2ludGVyIHVu
ZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIENvbnRl
eHQgbXVzdCBiZSBsb3N0Ci0gICAgICAgIH0KLQotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJU
YXJnZXQoMCwgcmVuZGVyVGFyZ2V0U3VyZmFjZSk7Ci0gICAgICAgIHJlbmRlclRhcmdldFN1cmZh
Y2UtPlJlbGVhc2UoKTsKLQotICAgICAgICBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbCA9IHJl
bmRlclRhcmdldFNlcmlhbDsKLSAgICAgICAgcmVuZGVyVGFyZ2V0Q2hhbmdlZCA9IHRydWU7Ci0g
ICAgfQotCi0gICAgZ2w6OlJlbmRlcmJ1ZmZlciAqZGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICB1
bnNpZ25lZCBpbnQgZGVwdGhidWZmZXJTZXJpYWwgPSAwOwotICAgIHVuc2lnbmVkIGludCBzdGVu
Y2lsYnVmZmVyU2VyaWFsID0gMDsKLSAgICBpZiAoZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVy
VHlwZSgpICE9IEdMX05PTkUpCi0gICAgewotICAgICAgICBkZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1
ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsKLSAgICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRs
eSBudWxsLiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZGVwdGhidWZmZXJTZXJpYWwgPSBkZXB0aFN0ZW5jaWwtPmdldFNlcmlhbCgpOwotICAgIH0K
LSAgICBlbHNlIGlmIChmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKSAhPSBHTF9O
T05FKQotICAgIHsKLSAgICAgICAgZGVwdGhTdGVuY2lsID0gZnJhbWVidWZmZXItPmdldFN0ZW5j
aWxidWZmZXIoKTsKLSAgICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RlbmNpbGJ1
ZmZlclNlcmlhbCA9IGRlcHRoU3RlbmNpbC0+Z2V0U2VyaWFsKCk7Ci0gICAgfQotCi0gICAgaWYg
KGRlcHRoYnVmZmVyU2VyaWFsICE9IG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWwgfHwKLSAgICAg
ICAgc3RlbmNpbGJ1ZmZlclNlcmlhbCAhPSBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwgfHwK
LSAgICAgICAgIW1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCkKLSAgICB7Ci0gICAgICAgIHVuc2ln
bmVkIGludCBkZXB0aFNpemUgPSAwOwotICAgICAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbFNpemUg
PSAwOwotCi0gICAgICAgIC8vIEFwcGx5IHRoZSBkZXB0aCBzdGVuY2lsIG9uIHRoZSBkZXZpY2UK
LSAgICAgICAgaWYgKGRlcHRoU3RlbmNpbCkKLSAgICAgICAgewotICAgICAgICAgICAgSURpcmVj
dDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbFN1cmZhY2UgPSBOVUxMOwotICAgICAgICAgICAgUmVu
ZGVyVGFyZ2V0ICpkZXB0aFN0ZW5jaWxSZW5kZXJUYXJnZXQgPSBkZXB0aFN0ZW5jaWwtPmdldERl
cHRoU3RlbmNpbCgpOwotCi0gICAgICAgICAgICBpZiAoZGVwdGhTdGVuY2lsUmVuZGVyVGFyZ2V0
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRlcHRoU3RlbmNpbFN1cmZhY2UgPSBS
ZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShkZXB0aFN0ZW5jaWxSZW5kZXJUYXJnZXQp
LT5nZXRTdXJmYWNlKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghZGVwdGhT
dGVuY2lsU3VyZmFjZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBFUlIoImRlcHRo
IHN0ZW5jaWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7ICAgLy8gQ29udGV4dCBtdXN0IGJlIGxvc3QKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgbURldmljZS0+U2V0RGVwdGhTdGVuY2lsU3VyZmFjZShkZXB0aFN0ZW5jaWxT
dXJmYWNlKTsKLSAgICAgICAgICAgIGRlcHRoU3RlbmNpbFN1cmZhY2UtPlJlbGVhc2UoKTsKLQot
ICAgICAgICAgICAgZGVwdGhTaXplID0gZGVwdGhTdGVuY2lsLT5nZXREZXB0aFNpemUoKTsKLSAg
ICAgICAgICAgIHN0ZW5jaWxTaXplID0gZGVwdGhTdGVuY2lsLT5nZXRTdGVuY2lsU2l6ZSgpOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+
U2V0RGVwdGhTdGVuY2lsU3VyZmFjZShOVUxMKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgh
bURlcHRoU3RlbmNpbEluaXRpYWxpemVkIHx8IGRlcHRoU2l6ZSAhPSBtQ3VyRGVwdGhTaXplKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtQ3VyRGVwdGhTaXplID0gZGVwdGhTaXplOwotICAgICAg
ICAgICAgbUZvcmNlU2V0UmFzdGVyU3RhdGUgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKCFtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgfHwgc3RlbmNpbFNpemUgIT0gbUN1clN0ZW5j
aWxTaXplKQotICAgICAgICB7Ci0gICAgICAgICAgICBtQ3VyU3RlbmNpbFNpemUgPSBzdGVuY2ls
U2l6ZTsKLSAgICAgICAgICAgIG1Gb3JjZVNldERlcHRoU3RlbmNpbFN0YXRlID0gdHJ1ZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWwgPSBkZXB0aGJ1ZmZl
clNlcmlhbDsKLSAgICAgICAgbUFwcGxpZWRTdGVuY2lsYnVmZmVyU2VyaWFsID0gc3RlbmNpbGJ1
ZmZlclNlcmlhbDsKLSAgICAgICAgbURlcHRoU3RlbmNpbEluaXRpYWxpemVkID0gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBpZiAocmVuZGVyVGFyZ2V0Q2hhbmdlZCB8fCAhbVJlbmRlclRhcmdldERlc2NJ
bml0aWFsaXplZCkKLSAgICB7Ci0gICAgICAgIG1Gb3JjZVNldFNjaXNzb3IgPSB0cnVlOwotICAg
ICAgICBtRm9yY2VTZXRWaWV3cG9ydCA9IHRydWU7Ci0KLSAgICAgICAgbVJlbmRlclRhcmdldERl
c2Mud2lkdGggPSByZW5kZXJidWZmZXJPYmplY3QtPmdldFdpZHRoKCk7Ci0gICAgICAgIG1SZW5k
ZXJUYXJnZXREZXNjLmhlaWdodCA9IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0SGVpZ2h0KCk7Ci0g
ICAgICAgIG1SZW5kZXJUYXJnZXREZXNjLmZvcm1hdCA9IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0
QWN0dWFsRm9ybWF0KCk7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgPSB0
cnVlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1HTGVudW0gUmVuZGVyZXI5Ojph
cHBseVZlcnRleEJ1ZmZlcihnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlZl
cnRleEF0dHJpYnV0ZSB2ZXJ0ZXhBdHRyaWJ1dGVzW10sIEdMaW50IGZpcnN0LCBHTHNpemVpIGNv
dW50LCBHTHNpemVpIGluc3RhbmNlcykKLXsKLSAgICBUcmFuc2xhdGVkQXR0cmlidXRlIGF0dHJp
YnV0ZXNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107Ci0gICAgR0xlbnVtIGVyciA9IG1WZXJ0ZXhE
YXRhTWFuYWdlci0+cHJlcGFyZVZlcnRleERhdGEodmVydGV4QXR0cmlidXRlcywgcHJvZ3JhbUJp
bmFyeSwgZmlyc3QsIGNvdW50LCBhdHRyaWJ1dGVzLCBpbnN0YW5jZXMpOwotICAgIGlmIChlcnIg
IT0gR0xfTk9fRVJST1IpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLSAgICAK
LSAgICByZXR1cm4gbVZlcnRleERlY2xhcmF0aW9uQ2FjaGUuYXBwbHlEZWNsYXJhdGlvbihtRGV2
aWNlLCBhdHRyaWJ1dGVzLCBwcm9ncmFtQmluYXJ5LCBpbnN0YW5jZXMsICZtUmVwZWF0RHJhdyk7
Ci19Ci0KLS8vIEFwcGxpZXMgdGhlIGluZGljZXMgYW5kIGVsZW1lbnQgYXJyYXkgYmluZGluZ3Mg
dG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlCi1HTGVudW0gUmVuZGVyZXI5OjphcHBseUluZGV4QnVm
ZmVyKGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVy
LCBHTHNpemVpIGNvdW50LCBHTGVudW0gbW9kZSwgR0xlbnVtIHR5cGUsIFRyYW5zbGF0ZWRJbmRl
eERhdGEgKmluZGV4SW5mbykKLXsKLSAgICBHTGVudW0gZXJyID0gbUluZGV4RGF0YU1hbmFnZXIt
PnByZXBhcmVJbmRleERhdGEodHlwZSwgY291bnQsIGVsZW1lbnRBcnJheUJ1ZmZlciwgaW5kaWNl
cywgaW5kZXhJbmZvKTsKLQotICAgIGlmIChlcnIgPT0gR0xfTk9fRVJST1IpCi0gICAgewotICAg
ICAgICAvLyBEaXJlY3RseSBiaW5kaW5nIHRoZSBzdG9yYWdlIGJ1ZmZlciBpcyBub3Qgc3VwcG9y
dGVkIGZvciBkM2Q5Ci0gICAgICAgIEFTU0VSVChpbmRleEluZm8tPnN0b3JhZ2UgPT0gTlVMTCk7
Ci0KLSAgICAgICAgaWYgKGluZGV4SW5mby0+c2VyaWFsICE9IG1BcHBsaWVkSUJTZXJpYWwpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEluZGV4QnVmZmVyOSogaW5kZXhCdWZmZXIgPSBJbmRleEJ1
ZmZlcjk6Om1ha2VJbmRleEJ1ZmZlcjkoaW5kZXhJbmZvLT5pbmRleEJ1ZmZlcik7Ci0KLSAgICAg
ICAgICAgIG1EZXZpY2UtPlNldEluZGljZXMoaW5kZXhCdWZmZXItPmdldEJ1ZmZlcigpKTsKLSAg
ICAgICAgICAgIG1BcHBsaWVkSUJTZXJpYWwgPSBpbmRleEluZm8tPnNlcmlhbDsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiBlcnI7Ci19Ci0KLXZvaWQgUmVuZGVyZXI5OjpkcmF3QXJy
YXlzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcykKLXsKLSAg
ICBzdGFydFNjZW5lKCk7Ci0gICAgICAgIAotICAgIGlmIChtb2RlID09IEdMX0xJTkVfTE9PUCkK
LSAgICB7Ci0gICAgICAgIGRyYXdMaW5lTG9vcChjb3VudCwgR0xfTk9ORSwgTlVMTCwgMCwgTlVM
TCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGluc3RhbmNlcyA+IDApCi0gICAgewotICAgICAgICBT
dGF0aWNJbmRleEJ1ZmZlckludGVyZmFjZSAqY291bnRpbmdJQiA9IG1JbmRleERhdGFNYW5hZ2Vy
LT5nZXRDb3VudGluZ0luZGljZXMoY291bnQpOwotICAgICAgICBpZiAoY291bnRpbmdJQikKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKG1BcHBsaWVkSUJTZXJpYWwgIT0gY291bnRpbmdJQi0+
Z2V0U2VyaWFsKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSW5kZXhCdWZmZXI5
ICppbmRleEJ1ZmZlciA9IEluZGV4QnVmZmVyOTo6bWFrZUluZGV4QnVmZmVyOShjb3VudGluZ0lC
LT5nZXRJbmRleEJ1ZmZlcigpKTsKLQotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldEluZGlj
ZXMoaW5kZXhCdWZmZXItPmdldEJ1ZmZlcigpKTsKLSAgICAgICAgICAgICAgICBtQXBwbGllZElC
U2VyaWFsID0gY291bnRpbmdJQi0+Z2V0U2VyaWFsKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbVJlcGVhdERyYXc7IGkrKykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5EcmF3SW5kZXhlZFByaW1pdGl2ZShtUHJpbWl0
aXZlVHlwZSwgMCwgMCwgY291bnQsIDAsIG1QcmltaXRpdmVDb3VudCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkNv
dWxkIG5vdCBjcmVhdGUgYSBjb3VudGluZyBpbmRleCBidWZmZXIgZm9yIGdsRHJhd0FycmF5c0lu
c3RhbmNlZC4iKTsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSAgIC8vIFJlZ3VsYXIgY2FzZQotICAgIHsK
LSAgICAgICAgbURldmljZS0+RHJhd1ByaW1pdGl2ZShtUHJpbWl0aXZlVHlwZSwgMCwgbVByaW1p
dGl2ZUNvdW50KTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyZXI5OjpkcmF3RWxlbWVudHMoR0xl
bnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGlj
ZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4
RGF0YSAmaW5kZXhJbmZvLCBHTHNpemVpIC8qaW5zdGFuY2VzKi8pCi17Ci0gICAgc3RhcnRTY2Vu
ZSgpOwotCi0gICAgaWYgKG1vZGUgPT0gR0xfUE9JTlRTKQotICAgIHsKLSAgICAgICAgZHJhd0lu
ZGV4ZWRQb2ludHMoY291bnQsIHR5cGUsIGluZGljZXMsIGVsZW1lbnRBcnJheUJ1ZmZlcik7Ci0g
ICAgfQotICAgIGVsc2UgaWYgKG1vZGUgPT0gR0xfTElORV9MT09QKQotICAgIHsKLSAgICAgICAg
ZHJhd0xpbmVMb29wKGNvdW50LCB0eXBlLCBpbmRpY2VzLCBpbmRleEluZm8ubWluSW5kZXgsIGVs
ZW1lbnRBcnJheUJ1ZmZlcik7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbVJlcGVhdERyYXc7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAg
R0xzaXplaSB2ZXJ0ZXhDb3VudCA9IGluZGV4SW5mby5tYXhJbmRleCAtIGluZGV4SW5mby5taW5J
bmRleCArIDE7Ci0gICAgICAgICAgICBtRGV2aWNlLT5EcmF3SW5kZXhlZFByaW1pdGl2ZShtUHJp
bWl0aXZlVHlwZSwgLShJTlQpaW5kZXhJbmZvLm1pbkluZGV4LCBpbmRleEluZm8ubWluSW5kZXgs
IHZlcnRleENvdW50LCBpbmRleEluZm8uc3RhcnRJbmRleCwgbVByaW1pdGl2ZUNvdW50KTsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJlcjk6OmRyYXdMaW5lTG9vcChHTHNpemVp
IGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBpbnQgbWluSW5kZXgs
IGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlcikKLXsKLSAgICAvLyBHZXQgdGhlIHJhdyBp
bmRpY2VzIGZvciBhbiBpbmRleGVkIGRyYXcKLSAgICBpZiAodHlwZSAhPSBHTF9OT05FICYmIGVs
ZW1lbnRBcnJheUJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIGdsOjpCdWZmZXIgKmluZGV4QnVmZmVy
ID0gZWxlbWVudEFycmF5QnVmZmVyOwotICAgICAgICBCdWZmZXJTdG9yYWdlICpzdG9yYWdlID0g
aW5kZXhCdWZmZXItPmdldFN0b3JhZ2UoKTsKLSAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gcmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5kaWNlcyk7Ci0gICAgICAgIGluZGljZXMgPSBzdGF0
aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSArIG9mZnNldDsKLSAg
ICB9Ci0KLSAgICB1bnNpZ25lZCBpbnQgc3RhcnRJbmRleCA9IDA7Ci0KLSAgICBpZiAoZ2V0MzJC
aXRJbmRleFN1cHBvcnQoKSkKLSAgICB7Ci0gICAgICAgIGlmICghbUxpbmVMb29wSUIpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1MaW5lTG9vcElCID0gbmV3IFN0cmVhbWluZ0luZGV4QnVmZmVy
SW50ZXJmYWNlKHRoaXMpOwotICAgICAgICAgICAgaWYgKCFtTGluZUxvb3BJQi0+cmVzZXJ2ZUJ1
ZmZlclNwYWNlKElOSVRJQUxfSU5ERVhfQlVGRkVSX1NJWkUsIEdMX1VOU0lHTkVEX0lOVCkpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIG1MaW5lTG9vcElCOwotICAgICAg
ICAgICAgICAgIG1MaW5lTG9vcElCID0gTlVMTDsKLQotICAgICAgICAgICAgICAgIEVSUigiQ291
bGQgbm90IGNyZWF0ZSBhIDMyLWJpdCBsb29waW5nIGluZGV4IGJ1ZmZlciBmb3IgR0xfTElORV9M
T09QLiIpOwotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8
dW5zaWduZWQgaW50Pihjb3VudCkgKyAxID4gKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQg
aW50Pjo6bWF4KCkgLyBzaXplb2YodW5zaWduZWQgaW50KSkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBhIDMyLWJpdCBsb29waW5nIGluZGV4IGJ1ZmZlciBm
b3IgR0xfTElORV9MT09QLCB0b28gbWFueSBpbmRpY2VzIHJlcXVpcmVkLiIpOwotICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIENoZWNrZWQgYnkgUmVuZGVyZXI5OjphcHBseVByaW1pdGl2ZVR5cGUKLSAgICAgICAg
QVNTRVJUKGNvdW50ID49IDApOwotCi0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBzcGFjZU5l
ZWRlZCA9IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGNvdW50KSArIDEpICogc2l6ZW9mKHVu
c2lnbmVkIGludCk7Ci0gICAgICAgIGlmICghbUxpbmVMb29wSUItPnJlc2VydmVCdWZmZXJTcGFj
ZShzcGFjZU5lZWRlZCwgR0xfVU5TSUdORURfSU5UKSkKLSAgICAgICAgewotICAgICAgICAgICAg
RVJSKCJDb3VsZCBub3QgcmVzZXJ2ZSBlbm91Z2ggc3BhY2UgaW4gbG9vcGluZyBpbmRleCBidWZm
ZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkKiBtYXBwZWRNZW1vcnkg
PSBOVUxMOwotICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMDsKLSAgICAgICAgaWYgKCFt
TGluZUxvb3BJQi0+bWFwQnVmZmVyKHNwYWNlTmVlZGVkLCAmbWFwcGVkTWVtb3J5LCAmb2Zmc2V0
KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgbWFwIGluZGV4IGJ1ZmZl
ciBmb3IgR0xfTElORV9MT09QLiIpOwotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXJ0SW5kZXggPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBpbnQ+KG9mZnNldCkgLyA0OwotICAgICAgICB1bnNpZ25lZCBpbnQgKmRh
dGEgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KG1hcHBlZE1lbW9yeSk7Ci0KLSAg
ICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9OT05FOiAg
IC8vIE5vbi1pbmRleGVkIGRyYXcKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291
bnQ7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkYXRhW2ldID0gaTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGRhdGFbY291bnRdID0gMDsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpW2ldOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBH
THVieXRlKj4oaW5kaWNlcylbMF07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX1NIT1JUOgotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNf
Y2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpW2ldOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMp
WzBdOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6
Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+
KGluZGljZXMpW2ldOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBz
dGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVswXTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoIW1MaW5lTG9vcElCLT51bm1hcEJ1ZmZlcigpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBFUlIoIkNvdWxkIG5vdCB1bm1hcCBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsK
LSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKCFtTGluZUxvb3BJQikKLSAg
ICAgICAgewotICAgICAgICAgICAgbUxpbmVMb29wSUIgPSBuZXcgU3RyZWFtaW5nSW5kZXhCdWZm
ZXJJbnRlcmZhY2UodGhpcyk7Ci0gICAgICAgICAgICBpZiAoIW1MaW5lTG9vcElCLT5yZXNlcnZl
QnVmZmVyU3BhY2UoSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwgR0xfVU5TSUdORURfU0hPUlQp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRlbGV0ZSBtTGluZUxvb3BJQjsKLSAg
ICAgICAgICAgICAgICBtTGluZUxvb3BJQiA9IE5VTEw7Ci0KLSAgICAgICAgICAgICAgICBFUlIo
IkNvdWxkIG5vdCBjcmVhdGUgYSAxNi1iaXQgbG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJ
TkVfTE9PUC4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2hlY2tlZCBi
eSBSZW5kZXJlcjk6OmFwcGx5UHJpbWl0aXZlVHlwZQotICAgICAgICBBU1NFUlQoY291bnQgPj0g
MCk7Ci0KLSAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oY291bnQpICsgMSA+
IChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0Pjo6bWF4KCkgLyBzaXplb2YodW5z
aWduZWQgc2hvcnQpKSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3Jl
YXRlIGEgMTYtYml0IGxvb3BpbmcgaW5kZXggYnVmZmVyIGZvciBHTF9MSU5FX0xPT1AsIHRvbyBt
YW55IGluZGljZXMgcmVxdWlyZWQuIik7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50
IHNwYWNlTmVlZGVkID0gKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oY291bnQpICsgMSkgKiBz
aXplb2YodW5zaWduZWQgc2hvcnQpOwotICAgICAgICBpZiAoIW1MaW5lTG9vcElCLT5yZXNlcnZl
QnVmZmVyU3BhY2Uoc3BhY2VOZWVkZWQsIEdMX1VOU0lHTkVEX1NIT1JUKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgcmVzZXJ2ZSBlbm91Z2ggc3BhY2UgaW4gbG9vcGlu
ZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKLSAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkKiBt
YXBwZWRNZW1vcnkgPSBOVUxMOwotICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0OwotICAgICAg
ICBpZiAobUxpbmVMb29wSUItPm1hcEJ1ZmZlcihzcGFjZU5lZWRlZCwgJm1hcHBlZE1lbW9yeSwg
Jm9mZnNldCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiQ291bGQgbm90IG1hcCBpbmRl
eCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGFydEluZGV4ID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihvZmZzZXQpIC8gMjsKLSAgICAgICAgdW5zaWduZWQg
c2hvcnQgKmRhdGEgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4obWFwcGVkTWVt
b3J5KTsKLQotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNl
IEdMX05PTkU6ICAgLy8gTm9uLWluZGV4ZWQgZHJhdwotICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRhdGFb
aV0gPSBpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGF0YVtjb3VudF0gPSAwOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oaW5kaWNl
cylbaV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19j
YXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKVswXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6Ci0gICAgICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZGF0YVtp
XSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNlcylbaV07Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0
Kj4oaW5kaWNlcylbMF07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVDoKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29u
c3QgR0x1aW50Kj4oaW5kaWNlcylbaV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkYXRh
W2NvdW50XSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMpWzBdOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmICghbUxpbmVMb29wSUItPnVubWFwQnVmZmVyKCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEVSUigiQ291bGQgbm90IHVubWFwIGluZGV4IGJ1ZmZlciBmb3IgR0xfTElO
RV9MT09QLiIpOwotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9IG1MaW5l
TG9vcElCLT5nZXRTZXJpYWwoKSkKLSAgICB7Ci0gICAgICAgIEluZGV4QnVmZmVyOSAqaW5kZXhC
dWZmZXIgPSBJbmRleEJ1ZmZlcjk6Om1ha2VJbmRleEJ1ZmZlcjkobUxpbmVMb29wSUItPmdldElu
ZGV4QnVmZmVyKCkpOwotCi0gICAgICAgIG1EZXZpY2UtPlNldEluZGljZXMoaW5kZXhCdWZmZXIt
PmdldEJ1ZmZlcigpKTsKLSAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IG1MaW5lTG9vcElCLT5n
ZXRTZXJpYWwoKTsKLSAgICB9Ci0KLSAgICBtRGV2aWNlLT5EcmF3SW5kZXhlZFByaW1pdGl2ZShE
M0RQVF9MSU5FU1RSSVAsIC1taW5JbmRleCwgbWluSW5kZXgsIGNvdW50LCBzdGFydEluZGV4LCBj
b3VudCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RhdGljIHZvaWQgZHJhd1BvaW50
cyhJRGlyZWN0M0REZXZpY2U5KiBkZXZpY2UsIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdm9pZCAq
aW5kaWNlcykKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewot
ICAgICAgICB1bnNpZ25lZCBpbnQgaW5kZXhWYWx1ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGlu
dD4oc3RhdGljX2Nhc3Q8Y29uc3QgVCo+KGluZGljZXMpW2ldKTsKLSAgICAgICAgZGV2aWNlLT5E
cmF3UHJpbWl0aXZlKEQzRFBUX1BPSU5UTElTVCwgaW5kZXhWYWx1ZSwgMSk7Ci0gICAgfQotfQot
Ci12b2lkIFJlbmRlcmVyOTo6ZHJhd0luZGV4ZWRQb2ludHMoR0xzaXplaSBjb3VudCwgR0xlbnVt
IHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVm
ZmVyKQotewotICAgIC8vIERyYXdpbmcgaW5kZXggcG9pbnQgbGlzdHMgaXMgdW5zdXBwb3J0ZWQg
aW4gZDNkOSwgZmFsbCBiYWNrIHRvIGEgcmVndWxhciBEcmF3UHJpbWl0aXZlIGNhbGwKLSAgICAv
LyBmb3IgZWFjaCBpbmRpdmlkdWFsIHBvaW50LiBUaGlzIGNhbGwgaXMgbm90IGV4cGVjdGVkIHRv
IGhhcHBlbiBvZnRlbi4KLQotICAgIGlmIChlbGVtZW50QXJyYXlCdWZmZXIpCi0gICAgewotICAg
ICAgICBCdWZmZXJTdG9yYWdlICpzdG9yYWdlID0gZWxlbWVudEFycmF5QnVmZmVyLT5nZXRTdG9y
YWdlKCk7Ci0gICAgICAgIGludHB0cl90IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KGluZGljZXMpOwotICAgICAgICBpbmRpY2VzID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0
ZSo+KHN0b3JhZ2UtPmdldERhdGEoKSkgKyBvZmZzZXQ7Ci0gICAgfQotCi0gICAgc3dpdGNoICh0
eXBlKQotICAgIHsKLSAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOiAgZHJhd1BvaW50czxH
THVieXRlPihtRGV2aWNlLCBjb3VudCwgaW5kaWNlcyk7ICBicmVhazsKLSAgICAgICAgY2FzZSBH
TF9VTlNJR05FRF9TSE9SVDogZHJhd1BvaW50czxHTHVzaG9ydD4obURldmljZSwgY291bnQsIGlu
ZGljZXMpOyBicmVhazsKLSAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6ICAgZHJhd1BvaW50
czxHTHVpbnQ+KG1EZXZpY2UsIGNvdW50LCBpbmRpY2VzKTsgICBicmVhazsKLSAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyZXI5OjphcHBseVNo
YWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpCi17Ci0gICAgdW5zaWduZWQg
aW50IHByb2dyYW1CaW5hcnlTZXJpYWwgPSBwcm9ncmFtQmluYXJ5LT5nZXRTZXJpYWwoKTsKLSAg
ICBpZiAocHJvZ3JhbUJpbmFyeVNlcmlhbCAhPSBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWwp
Ci0gICAgewotICAgICAgICBTaGFkZXJFeGVjdXRhYmxlICp2ZXJ0ZXhFeGUgPSBwcm9ncmFtQmlu
YXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlKCk7Ci0gICAgICAgIFNoYWRlckV4ZWN1dGFibGUgKnBp
eGVsRXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxFeGVjdXRhYmxlKCk7Ci0KLSAgICAgICAg
SURpcmVjdDNEVmVydGV4U2hhZGVyOSAqdmVydGV4U2hhZGVyID0gTlVMTDsKLSAgICAgICAgaWYg
KHZlcnRleEV4ZSkgdmVydGV4U2hhZGVyID0gU2hhZGVyRXhlY3V0YWJsZTk6Om1ha2VTaGFkZXJF
eGVjdXRhYmxlOSh2ZXJ0ZXhFeGUpLT5nZXRWZXJ0ZXhTaGFkZXIoKTsKLQotICAgICAgICBJRGly
ZWN0M0RQaXhlbFNoYWRlcjkgKnBpeGVsU2hhZGVyID0gTlVMTDsKLSAgICAgICAgaWYgKHBpeGVs
RXhlKSBwaXhlbFNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGU5OjptYWtlU2hhZGVyRXhlY3V0YWJs
ZTkocGl4ZWxFeGUpLT5nZXRQaXhlbFNoYWRlcigpOwotCi0gICAgICAgIG1EZXZpY2UtPlNldFBp
eGVsU2hhZGVyKHBpeGVsU2hhZGVyKTsKLSAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVy
KHZlcnRleFNoYWRlcik7Ci0gICAgICAgIHByb2dyYW1CaW5hcnktPmRpcnR5QWxsVW5pZm9ybXMo
KTsKLSAgICAgICAgbUR4VW5pZm9ybXNEaXJ0eSA9IHRydWU7Ci0KLSAgICAgICAgbUFwcGxpZWRQ
cm9ncmFtQmluYXJ5U2VyaWFsID0gcHJvZ3JhbUJpbmFyeVNlcmlhbDsKLSAgICB9Ci19Ci0KLXZv
aWQgUmVuZGVyZXI5OjphcHBseVVuaWZvcm1zKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5LCBnbDo6VW5pZm9ybUFycmF5ICp1bmlmb3JtQXJyYXkpCi17Ci0gICAgZm9yIChzdGQ6OnZl
Y3RvcjxnbDo6VW5pZm9ybSo+Ojpjb25zdF9pdGVyYXRvciB1YiA9IHVuaWZvcm1BcnJheS0+YmVn
aW4oKSwgdWUgPSB1bmlmb3JtQXJyYXktPmVuZCgpOyB1YiAhPSB1ZTsgKyt1YikKLSAgICB7Ci0g
ICAgICAgIGdsOjpVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gKnViOwotCi0gICAgICAgIGlmICh0
YXJnZXRVbmlmb3JtLT5kaXJ0eSkKLSAgICAgICAgewotICAgICAgICAgICAgR0xmbG9hdCAqZiA9
IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhOwotICAgICAgICAgICAgR0xpbnQgKmkgPSAo
R0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGE7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0
VW5pZm9ybS0+dHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1Q
TEVSXzJEOgotICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRVJfQ1VCRToKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MOgotICAgICAgICAgICAgICBj
YXNlIEdMX0JPT0xfVkVDMjoKLSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OgotICAgICAgICAgICAgICAgIGFwcGx5VW5pZm9y
bW5idih0YXJnZXRVbmlmb3JtLCBpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgot
ICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
RkxPQVRfVkVDNDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
NDoKLSAgICAgICAgICAgICAgICBhcHBseVVuaWZvcm1uZnYodGFyZ2V0VW5pZm9ybSwgZik7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UOgotICAgICAg
ICAgICAgICBjYXNlIEdMX0lOVF9WRUMyOgotICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMz
OgotICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUM0OgotICAgICAgICAgICAgICAgIGFwcGx5
VW5pZm9ybW5pdih0YXJnZXRVbmlmb3JtLCBpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IGZhbHNlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gRHJpdmVyIHVuaWZvcm1zCi0gICAgaWYgKG1EeFVu
aWZvcm1zRGlydHkpCi0gICAgewotICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25z
dGFudEYoMCwgKGZsb2F0KikmbVZlcnRleENvbnN0YW50cywgc2l6ZW9mKGR4X1ZlcnRleENvbnN0
YW50cykgLyBzaXplb2YoZmxvYXRbNF0pKTsKLSAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFk
ZXJDb25zdGFudEYoMCwgKGZsb2F0KikmbVBpeGVsQ29uc3RhbnRzLCBzaXplb2YoZHhfUGl4ZWxD
b25zdGFudHMpIC8gc2l6ZW9mKGZsb2F0WzRdKSk7Ci0gICAgICAgIG1EeFVuaWZvcm1zRGlydHkg
PSBmYWxzZTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyZXI5OjphcHBseVVuaWZvcm1uZnYoZ2w6
OlVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMZmxvYXQgKnYpCi17Ci0gICAgaWYgKHRh
cmdldFVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleCA+PSAwKQotICAgIHsKLSAgICAgICAgbURldmlj
ZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHNSZWdpc3RlckluZGV4
LCB2LCB0YXJnZXRVbmlmb3JtLT5yZWdpc3RlckNvdW50KTsKLSAgICB9Ci0KLSAgICBpZiAodGFy
Z2V0VW5pZm9ybS0+dnNSZWdpc3RlckluZGV4ID49IDApCi0gICAgewotICAgICAgICBtRGV2aWNl
LT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnNSZWdpc3RlckluZGV4
LCB2LCB0YXJnZXRVbmlmb3JtLT5yZWdpc3RlckNvdW50KTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVu
ZGVyZXI5OjphcHBseVVuaWZvcm1uaXYoZ2w6OlVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0
IEdMaW50ICp2KQotewotICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT5yZWdpc3RlckNvdW50IDw9
IE1BWF9WRVJURVhfQ09OU1RBTlRfVkVDVE9SU19EM0Q5KTsKLSAgICBHTGZsb2F0IHZlY3RvcltN
QVhfVkVSVEVYX0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOV1bNF07Ci0KLSAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IHRhcmdldFVuaWZvcm0tPnJlZ2lzdGVyQ291bnQ7IGkrKykKLSAgICB7
Ci0gICAgICAgIHZlY3RvcltpXVswXSA9IChHTGZsb2F0KXZbNCAqIGkgKyAwXTsKLSAgICAgICAg
dmVjdG9yW2ldWzFdID0gKEdMZmxvYXQpdls0ICogaSArIDFdOwotICAgICAgICB2ZWN0b3JbaV1b
Ml0gPSAoR0xmbG9hdCl2WzQgKiBpICsgMl07Ci0gICAgICAgIHZlY3RvcltpXVszXSA9IChHTGZs
b2F0KXZbNCAqIGkgKyAzXTsKLSAgICB9Ci0KLSAgICBhcHBseVVuaWZvcm1uZnYodGFyZ2V0VW5p
Zm9ybSwgKEdMZmxvYXQqKXZlY3Rvcik7Ci19Ci0KLXZvaWQgUmVuZGVyZXI5OjphcHBseVVuaWZv
cm1uYnYoZ2w6OlVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMaW50ICp2KQotewotICAg
IEFTU0VSVCh0YXJnZXRVbmlmb3JtLT5yZWdpc3RlckNvdW50IDw9IE1BWF9WRVJURVhfQ09OU1RB
TlRfVkVDVE9SU19EM0Q5KTsKLSAgICBHTGZsb2F0IHZlY3RvcltNQVhfVkVSVEVYX0NPTlNUQU5U
X1ZFQ1RPUlNfRDNEOV1bNF07Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHRh
cmdldFVuaWZvcm0tPnJlZ2lzdGVyQ291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHZlY3Rvcltp
XVswXSA9ICh2WzQgKiBpICsgMF0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7Ci0gICAgICAg
IHZlY3RvcltpXVsxXSA9ICh2WzQgKiBpICsgMV0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7
Ci0gICAgICAgIHZlY3RvcltpXVsyXSA9ICh2WzQgKiBpICsgMl0gPT0gR0xfRkFMU0UpID8gMC4w
ZiA6IDEuMGY7Ci0gICAgICAgIHZlY3RvcltpXVszXSA9ICh2WzQgKiBpICsgM10gPT0gR0xfRkFM
U0UpID8gMC4wZiA6IDEuMGY7Ci0gICAgfQotCi0gICAgYXBwbHlVbmlmb3JtbmZ2KHRhcmdldFVu
aWZvcm0sIChHTGZsb2F0Kil2ZWN0b3IpOwotfQotCi12b2lkIFJlbmRlcmVyOTo6Y2xlYXIoY29u
c3QgZ2w6OkNsZWFyUGFyYW1ldGVycyAmY2xlYXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJh
bWVCdWZmZXIpCi17Ci0gICAgRDNEQ09MT1IgY29sb3IgPSBEM0RDT0xPUl9BUkdCKGdsOjp1bm9y
bTw4PihjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUuYWxwaGEpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oY2xlYXJQYXJhbXMuY29sb3JDbGVhclZh
bHVlLnJlZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4
PihjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUuZ3JlZW4pLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVl
LmJsdWUpKTsKLSAgICBmbG9hdCBkZXB0aCA9IGdsOjpjbGFtcDAxKGNsZWFyUGFyYW1zLmRlcHRo
Q2xlYXJWYWx1ZSk7Ci0gICAgaW50IHN0ZW5jaWwgPSBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJW
YWx1ZSAmIDB4MDAwMDAwRkY7Ci0KLSAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbFVubWFza2VkID0g
MHgwOwotICAgIGlmICgoY2xlYXJQYXJhbXMubWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkg
JiYgZnJhbWVCdWZmZXItPmhhc1N0ZW5jaWwoKSkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGlu
dCBzdGVuY2lsU2l6ZSA9IGdsOjpHZXRTdGVuY2lsU2l6ZShmcmFtZUJ1ZmZlci0+Z2V0U3RlbmNp
bGJ1ZmZlcigpLT5nZXRBY3R1YWxGb3JtYXQoKSk7Ci0gICAgICAgIHN0ZW5jaWxVbm1hc2tlZCA9
ICgweDEgPDwgc3RlbmNpbFNpemUpIC0gMTsKLSAgICB9Ci0KLSAgICBib29sIGFscGhhVW5tYXNr
ZWQgPSAoZ2w6OkdldEFscGhhU2l6ZShtUmVuZGVyVGFyZ2V0RGVzYy5mb3JtYXQpID09IDApIHx8
IGNsZWFyUGFyYW1zLmNvbG9yTWFza0FscGhhOwotCi0gICAgY29uc3QgYm9vbCBuZWVkTWFza2Vk
U3RlbmNpbENsZWFyID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQp
ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsZWFyUGFyYW1z
LnN0ZW5jaWxXcml0ZU1hc2sgJiBzdGVuY2lsVW5tYXNrZWQpICE9IHN0ZW5jaWxVbm1hc2tlZDsK
LSAgICBjb25zdCBib29sIG5lZWRNYXNrZWRDb2xvckNsZWFyID0gKGNsZWFyUGFyYW1zLm1hc2sg
JiBHTF9DT0xPUl9CVUZGRVJfQklUKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAhKGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCAmJiBjbGVhclBhcmFtcy5jb2xvck1h
c2tHcmVlbiAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFy
UGFyYW1zLmNvbG9yTWFza0JsdWUgJiYgYWxwaGFVbm1hc2tlZCk7Ci0KLSAgICBpZiAobmVlZE1h
c2tlZENvbG9yQ2xlYXIgfHwgbmVlZE1hc2tlZFN0ZW5jaWxDbGVhcikKLSAgICB7Ci0gICAgICAg
IC8vIFN0YXRlIHdoaWNoIGlzIGFsdGVyZWQgaW4gYWxsIHBhdGhzIGZyb20gdGhpcyBwb2ludCB0
byB0aGUgY2xlYXIgY2FsbCBpcyBzYXZlZC4KLSAgICAgICAgLy8gU3RhdGUgd2hpY2ggaXMgYWx0
ZXJlZCBpbiBvbmx5IHNvbWUgcGF0aHMgd2lsbCBiZSBmbGFnZ2VkIGRpcnR5IGluIHRoZSBjYXNl
IHRoYXQKLSAgICAgICAgLy8gIHRoYXQgcGF0aCBpcyB0YWtlbi4KLSAgICAgICAgSFJFU1VMVCBo
cjsKLSAgICAgICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgPT0gTlVMTCkKLSAgICAgICAg
ewotICAgICAgICAgICAgaHIgPSBtRGV2aWNlLT5CZWdpblN0YXRlQmxvY2soKTsKLSAgICAgICAg
ICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZ
IHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOwotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX1pGVU5DLCBEM0RDTVBfQUxXQVlTKTsKLSAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUp
OwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfRklMTE1PREUsIEQz
REZJTExfU09MSUQpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
QUxQSEFURVNURU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOwotICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgMCk7Ci0gICAg
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBGQUxT
RSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsKLSAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlcihOVUxMKTsKLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldEZWRihEM0RGVkZfWFlaUkhXIHwgRDNERlZGX0RJRkZVU0UpOwotICAgICAgICAgICAgbURl
dmljZS0+U2V0U3RyZWFtU291cmNlKDAsIE5VTEwsIDAsIDApOwotICAgICAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsK
LSAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xP
Uk9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJl
U3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JBUkcxLCBEM0RUQV9URkFDVE9SKTsKLSAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19BTFBIQU9QLCBEM0RU
T1BfU0VMRUNUQVJHMSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0
ZSgwLCBEM0RUU1NfQUxQSEFBUkcxLCBEM0RUQV9URkFDVE9SKTsKLSAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1RFWFRVUkVGQUNUT1IsIGNvbG9yKTsKLSAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExFTUFTSywgMHhGRkZG
RkZGRik7Ci0KLSAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9B
VFRSSUJTOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+U2V0
U3RyZWFtU291cmNlRnJlcShpLCAxKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaHIg
PSBtRGV2aWNlLT5FbmRTdGF0ZUJsb2NrKCZtTWFza2VkQ2xlYXJTYXZlZFN0YXRlKTsKLSAgICAg
ICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJREVPTUVN
T1JZIHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJU
KG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgIT0gTlVMTCk7Ci0KLSAgICAgICAgaWYgKG1NYXNrZWRD
bGVhclNhdmVkU3RhdGUgIT0gTlVMTCkKLSAgICAgICAgewotICAgICAgICAgICAgaHIgPSBtTWFz
a2VkQ2xlYXJTYXZlZFN0YXRlLT5DYXB0dXJlKCk7Ci0gICAgICAgICAgICBBU1NFUlQoU1VDQ0VF
REVEKGhyKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19aV1JJVEVFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfWkZVTkMsIEQzRENNUF9BTFdBWVMpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOwotICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7Ci0gICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0UpOwotICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxT
RSk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NMSVBQTEFORUVOQUJM
RSwgMCk7Ci0KLSAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJf
QklUKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19DT0xPUldSSVRFRU5BQkxFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2xfZDNkOTo6Q29udmVydENvbG9yTWFzayhjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNsZWFyUGFyYW1zLmNvbG9yTWFza0dyZWVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tC
bHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tBbHBoYSkpOwotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfQ09MT1JXUklURUVOQUJMRSwgMCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3Rl
bmNpbFVubWFza2VkICE9IDB4MCAmJiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX1NURU5DSUxfQlVG
RkVSX0JJVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX1NURU5DSUxFTkFCTEUsIFRSVUUpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfVFdPU0lERURTVEVOQ0lMTU9ERSwgRkFMU0UpOwotICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEZVTkMsIEQzRENNUF9BTFdBWVMp
OwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFJFRiwg
c3RlbmNpbCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVO
Q0lMV1JJVEVNQVNLLCBjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrKTsKLSAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxGQUlMLCBEM0RTVEVOQ0lMT1Bf
UkVQTEFDRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVO
Q0lMWkZBSUwsIEQzRFNURU5DSUxPUF9SRVBMQUNFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxQQVNTLCBEM0RTVEVOQ0lMT1BfUkVQTEFDRSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsKLSAgICAgICAgbURldmljZS0+
U2V0VmVydGV4U2hhZGVyKE5VTEwpOwotICAgICAgICBtRGV2aWNlLT5TZXRGVkYoRDNERlZGX1hZ
WlJIVyk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NFUEFSQVRFQUxQ
SEFCTEVOREVOQUJMRSwgVFJVRSk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0
YXRlKDAsIEQzRFRTU19DT0xPUk9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7Ci0gICAgICAgIG1EZXZp
Y2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUkFSRzEsIEQzRFRBX1RGQUNU
T1IpOwotICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQUxQ
SEFPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOwotICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3Rh
Z2VTdGF0ZSgwLCBEM0RUU1NfQUxQSEFBUkcxLCBEM0RUQV9URkFDVE9SKTsKLSAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfVEVYVFVSRUZBQ1RPUiwgY29sb3IpOwotICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRU1BU0ssIDB4RkZGRkZG
RkYpOwotCi0gICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJT
OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZy
ZXEoaSwgMSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmbG9hdCBxdWFkWzRdWzRdOyAgIC8vIEEg
cXVhZHJpbGF0ZXJhbCBjb3ZlcmluZyB0aGUgdGFyZ2V0LCBhbGlnbmVkIHRvIG1hdGNoIHRoZSBl
ZGdlcwotICAgICAgICBxdWFkWzBdWzBdID0gLTAuNWY7Ci0gICAgICAgIHF1YWRbMF1bMV0gPSBt
UmVuZGVyVGFyZ2V0RGVzYy5oZWlnaHQgLSAwLjVmOwotICAgICAgICBxdWFkWzBdWzJdID0gMC4w
ZjsKLSAgICAgICAgcXVhZFswXVszXSA9IDEuMGY7Ci0KLSAgICAgICAgcXVhZFsxXVswXSA9IG1S
ZW5kZXJUYXJnZXREZXNjLndpZHRoIC0gMC41ZjsKLSAgICAgICAgcXVhZFsxXVsxXSA9IG1SZW5k
ZXJUYXJnZXREZXNjLmhlaWdodCAtIDAuNWY7Ci0gICAgICAgIHF1YWRbMV1bMl0gPSAwLjBmOwot
ICAgICAgICBxdWFkWzFdWzNdID0gMS4wZjsKLQotICAgICAgICBxdWFkWzJdWzBdID0gLTAuNWY7
Ci0gICAgICAgIHF1YWRbMl1bMV0gPSAtMC41ZjsKLSAgICAgICAgcXVhZFsyXVsyXSA9IDAuMGY7
Ci0gICAgICAgIHF1YWRbMl1bM10gPSAxLjBmOwotCi0gICAgICAgIHF1YWRbM11bMF0gPSBtUmVu
ZGVyVGFyZ2V0RGVzYy53aWR0aCAtIDAuNWY7Ci0gICAgICAgIHF1YWRbM11bMV0gPSAtMC41ZjsK
LSAgICAgICAgcXVhZFszXVsyXSA9IDAuMGY7Ci0gICAgICAgIHF1YWRbM11bM10gPSAxLjBmOwot
Ci0gICAgICAgIHN0YXJ0U2NlbmUoKTsKLSAgICAgICAgbURldmljZS0+RHJhd1ByaW1pdGl2ZVVQ
KEQzRFBUX1RSSUFOR0xFU1RSSVAsIDIsIHF1YWQsIHNpemVvZihmbG9hdFs0XSkpOwotCi0gICAg
ICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCkKLSAgICAgICAg
ewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgVFJV
RSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFC
TEUsIFRSVUUpOwotICAgICAgICAgICAgbURldmljZS0+Q2xlYXIoMCwgTlVMTCwgRDNEQ0xFQVJf
WkJVRkZFUiwgY29sb3IsIGRlcHRoLCBzdGVuY2lsKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlICE9IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG1NYXNrZWRDbGVhclNhdmVkU3RhdGUtPkFwcGx5KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
ZWxzZSBpZiAoY2xlYXJQYXJhbXMubWFzaykKLSAgICB7Ci0gICAgICAgIERXT1JEIGR4Q2xlYXJG
bGFncyA9IDA7Ci0gICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVGRkVS
X0JJVCkKLSAgICAgICAgewotICAgICAgICAgICAgZHhDbGVhckZsYWdzIHw9IEQzRENMRUFSX1RB
UkdFVDsKLSAgICAgICAgfQotICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0RFUFRI
X0JVRkZFUl9CSVQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGR4Q2xlYXJGbGFncyB8PSBEM0RD
TEVBUl9aQlVGRkVSOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYg
R0xfU1RFTkNJTF9CVUZGRVJfQklUKQotICAgICAgICB7Ci0gICAgICAgICAgICBkeENsZWFyRmxh
Z3MgfD0gRDNEQ0xFQVJfU1RFTkNJTDsKLSAgICAgICAgfQotCi0gICAgICAgIG1EZXZpY2UtPkNs
ZWFyKDAsIE5VTEwsIGR4Q2xlYXJGbGFncywgY29sb3IsIGRlcHRoLCBzdGVuY2lsKTsKLSAgICB9
Ci19Ci0KLXZvaWQgUmVuZGVyZXI5OjptYXJrQWxsU3RhdGVEaXJ0eSgpCi17Ci0gICAgbUFwcGxp
ZWRSZW5kZXJUYXJnZXRTZXJpYWwgPSAwOwotICAgIG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWwg
PSAwOwotICAgIG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCA9IDA7Ci0gICAgbURlcHRoU3Rl
bmNpbEluaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgbVJlbmRlclRhcmdldERlc2NJbml0aWFsaXpl
ZCA9IGZhbHNlOwotCi0gICAgbUZvcmNlU2V0RGVwdGhTdGVuY2lsU3RhdGUgPSB0cnVlOwotICAg
IG1Gb3JjZVNldFJhc3RlclN0YXRlID0gdHJ1ZTsKLSAgICBtRm9yY2VTZXRTY2lzc29yID0gdHJ1
ZTsKLSAgICBtRm9yY2VTZXRWaWV3cG9ydCA9IHRydWU7Ci0gICAgbUZvcmNlU2V0QmxlbmRTdGF0
ZSA9IHRydWU7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpJTVBMRU1F
TlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IGkrKykKLSAgICB7Ci0gICAg
ICAgIG1Gb3JjZVNldFZlcnRleFNhbXBsZXJTdGF0ZXNbaV0gPSB0cnVlOwotICAgICAgICBtQ3Vy
VmVydGV4VGV4dHVyZVNlcmlhbHNbaV0gPSAwOwotICAgIH0KLSAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgaSsrKQotICAgIHsKLSAg
ICAgICAgbUZvcmNlU2V0UGl4ZWxTYW1wbGVyU3RhdGVzW2ldID0gdHJ1ZTsKLSAgICAgICAgbUN1
clBpeGVsVGV4dHVyZVNlcmlhbHNbaV0gPSAwOwotICAgIH0KLQotICAgIG1BcHBsaWVkSUJTZXJp
YWwgPSAwOwotICAgIG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbCA9IDA7Ci0gICAgbUR4VW5p
Zm9ybXNEaXJ0eSA9IHRydWU7Ci0KLSAgICBtVmVydGV4RGVjbGFyYXRpb25DYWNoZS5tYXJrU3Rh
dGVEaXJ0eSgpOwotfQotCi12b2lkIFJlbmRlcmVyOTo6cmVsZWFzZURldmljZVJlc291cmNlcygp
Ci17Ci0gICAgd2hpbGUgKCFtRXZlbnRRdWVyeVBvb2wuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAg
IG1FdmVudFF1ZXJ5UG9vbC5iYWNrKCktPlJlbGVhc2UoKTsKLSAgICAgICAgbUV2ZW50UXVlcnlQ
b29sLnBvcF9iYWNrKCk7Ci0gICAgfQotCi0gICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUp
Ci0gICAgewotICAgICAgICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlLT5SZWxlYXNlKCk7Ci0gICAg
ICAgIG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgPSBOVUxMOwotICAgIH0KLQotICAgIG1WZXJ0ZXhT
aGFkZXJDYWNoZS5jbGVhcigpOwotICAgIG1QaXhlbFNoYWRlckNhY2hlLmNsZWFyKCk7Ci0KLSAg
ICBkZWxldGUgbUJsaXQ7Ci0gICAgbUJsaXQgPSBOVUxMOwotCi0gICAgZGVsZXRlIG1WZXJ0ZXhE
YXRhTWFuYWdlcjsKLSAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBOVUxMOwotCi0gICAgZGVsZXRl
IG1JbmRleERhdGFNYW5hZ2VyOwotICAgIG1JbmRleERhdGFNYW5hZ2VyID0gTlVMTDsKLQotICAg
IGRlbGV0ZSBtTGluZUxvb3BJQjsKLSAgICBtTGluZUxvb3BJQiA9IE5VTEw7Ci0KLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IE5VTV9OVUxMX0NPTE9SQlVGRkVSX0NBQ0hFX0VOVFJJRVM7IGkrKykK
LSAgICB7Ci0gICAgICAgIGRlbGV0ZSBtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0uYnVmZmVyOwot
ICAgICAgICBtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0uYnVmZmVyID0gTlVMTDsKLSAgICB9Ci0K
LX0KLQotCi12b2lkIFJlbmRlcmVyOTo6bm90aWZ5RGV2aWNlTG9zdCgpCi17Ci0gICAgbURldmlj
ZUxvc3QgPSB0cnVlOwotICAgIG1EaXNwbGF5LT5ub3RpZnlEZXZpY2VMb3N0KCk7Ci19Ci0KLWJv
b2wgUmVuZGVyZXI5Ojppc0RldmljZUxvc3QoKQotewotICAgIHJldHVybiBtRGV2aWNlTG9zdDsK
LX0KLQotLy8gc2V0IG5vdGlmeSB0byB0cnVlIHRvIGJyb2FkY2FzdCBhIG1lc3NhZ2UgdG8gYWxs
IGNvbnRleHRzIG9mIHRoZSBkZXZpY2UgbG9zcwotYm9vbCBSZW5kZXJlcjk6OnRlc3REZXZpY2VM
b3N0KGJvb2wgbm90aWZ5KQotewotICAgIEhSRVNVTFQgc3RhdHVzID0gU19PSzsKLQotICAgIGlm
IChtRGV2aWNlRXgpCi0gICAgewotICAgICAgICBzdGF0dXMgPSBtRGV2aWNlRXgtPkNoZWNrRGV2
aWNlU3RhdGUoTlVMTCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1EZXZpY2UpCi0gICAgewotICAg
ICAgICBzdGF0dXMgPSBtRGV2aWNlLT5UZXN0Q29vcGVyYXRpdmVMZXZlbCgpOwotICAgIH0KLSAg
ICBlbHNlCi0gICAgewotICAgICAgICAvLyBObyBkZXZpY2UgeWV0LCBzbyBubyByZXNldCByZXF1
aXJlZAotICAgIH0KLQotICAgIGJvb2wgaXNMb3N0ID0gRkFJTEVEKHN0YXR1cykgfHwgZDNkOTo6
aXNEZXZpY2VMb3N0RXJyb3Ioc3RhdHVzKTsKLQotICAgIGlmIChpc0xvc3QpCi0gICAgewotICAg
ICAgICAvLyBlbnN1cmUgd2Ugbm90ZSB0aGUgZGV2aWNlIGxvc3MgLS0KLSAgICAgICAgLy8gd2Un
bGwgcHJvYmFibHkgZ2V0IHRoaXMgZG9uZSBhZ2FpbiBieSBub3RpZnlEZXZpY2VMb3N0Ci0gICAg
ICAgIC8vIGJ1dCBiZXN0IHRvIHJlbWVtYmVyIGl0IQotICAgICAgICAvLyBOb3RlIHRoYXQgd2Ug
ZG9uJ3Qgd2FudCB0byBjbGVhciB0aGUgZGV2aWNlIGxvc3Mgc3RhdHVzIGhlcmUKLSAgICAgICAg
Ly8gLS0gdGhpcyBuZWVkcyB0byBiZSBkb25lIGJ5IHJlc2V0RGV2aWNlCi0gICAgICAgIG1EZXZp
Y2VMb3N0ID0gdHJ1ZTsKLSAgICAgICAgaWYgKG5vdGlmeSkKLSAgICAgICAgewotICAgICAgICAg
ICAgbm90aWZ5RGV2aWNlTG9zdCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGlz
TG9zdDsKLX0KLQotYm9vbCBSZW5kZXJlcjk6OnRlc3REZXZpY2VSZXNldHRhYmxlKCkKLXsKLSAg
ICBIUkVTVUxUIHN0YXR1cyA9IEQzRF9PSzsKLQotICAgIGlmIChtRGV2aWNlRXgpCi0gICAgewot
ICAgICAgICBzdGF0dXMgPSBtRGV2aWNlRXgtPkNoZWNrRGV2aWNlU3RhdGUoTlVMTCk7Ci0gICAg
fQotICAgIGVsc2UgaWYgKG1EZXZpY2UpCi0gICAgewotICAgICAgICBzdGF0dXMgPSBtRGV2aWNl
LT5UZXN0Q29vcGVyYXRpdmVMZXZlbCgpOwotICAgIH0KLQotICAgIC8vIE9uIEQzRDlFeCwgREVW
SUNFTE9TVCByZXByZXNlbnRzIGEgaHVuZyBkZXZpY2UgdGhhdCBuZWVkcyB0byBiZSByZXN0YXJ0
ZWQKLSAgICAvLyBERVZJQ0VSRU1PVkVEIGluZGljYXRlcyB0aGUgZGV2aWNlIGhhcyBiZWVuIHN0
b3BwZWQgYW5kIG11c3QgYmUgcmVjcmVhdGVkCi0gICAgc3dpdGNoIChzdGF0dXMpCi0gICAgewot
ICAgICAgY2FzZSBEM0RFUlJfREVWSUNFTk9UUkVTRVQ6Ci0gICAgICBjYXNlIEQzREVSUl9ERVZJ
Q0VIVU5HOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGNhc2UgRDNERVJSX0RFVklDRUxP
U1Q6Ci0gICAgICAgIHJldHVybiAobURldmljZUV4ICE9IE5VTEwpOwotICAgICAgY2FzZSBEM0RF
UlJfREVWSUNFUkVNT1ZFRDoKLSAgICAgICAgVU5JTVBMRU1FTlRFRCgpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
fQotCi1ib29sIFJlbmRlcmVyOTo6cmVzZXREZXZpY2UoKQotewotICAgIHJlbGVhc2VEZXZpY2VS
ZXNvdXJjZXMoKTsKLQotICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50UGFyYW1ldGVy
cyA9IGdldERlZmF1bHRQcmVzZW50UGFyYW1ldGVycygpOwotCi0gICAgSFJFU1VMVCByZXN1bHQg
PSBEM0RfT0s7Ci0gICAgYm9vbCBsb3N0ID0gdGVzdERldmljZUxvc3QoZmFsc2UpOwotICAgIGlu
dCBhdHRlbXB0cyA9IDM7Ci0KLSAgICB3aGlsZSAobG9zdCAmJiBhdHRlbXB0cyA+IDApCi0gICAg
ewotICAgICAgICBpZiAobURldmljZUV4KQotICAgICAgICB7Ci0gICAgICAgICAgICBTbGVlcCg1
MDApOyAgIC8vIEdpdmUgdGhlIGdyYXBoaWNzIGRyaXZlciBzb21lIENQVSB0aW1lCi0gICAgICAg
ICAgICByZXN1bHQgPSBtRGV2aWNlRXgtPlJlc2V0RXgoJnByZXNlbnRQYXJhbWV0ZXJzLCBOVUxM
KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc3Vs
dCA9IG1EZXZpY2UtPlRlc3RDb29wZXJhdGl2ZUxldmVsKCk7Ci0gICAgICAgICAgICB3aGlsZSAo
cmVzdWx0ID09IEQzREVSUl9ERVZJQ0VMT1NUKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIFNsZWVwKDEwMCk7ICAgLy8gR2l2ZSB0aGUgZ3JhcGhpY3MgZHJpdmVyIHNvbWUgQ1BVIHRp
bWUKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5UZXN0Q29vcGVyYXRpdmVMZXZl
bCgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9E
RVZJQ0VOT1RSRVNFVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBt
RGV2aWNlLT5SZXNldCgmcHJlc2VudFBhcmFtZXRlcnMpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgbG9zdCA9IHRlc3REZXZpY2VMb3N0KGZhbHNlKTsKLSAgICAgICAgYXR0
ZW1wdHMgLS07Ci0gICAgfQotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAg
ICAgRVJSKCJSZXNldC9SZXNldEV4IGZhaWxlZCBtdWx0aXBsZSB0aW1lczogMHglMDhYIiwgcmVz
dWx0KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIHJlc2V0IGRldmlj
ZSBkZWZhdWx0cwotICAgIGluaXRpYWxpemVEZXZpY2UoKTsKLSAgICBtRGV2aWNlTG9zdCA9IGZh
bHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLURXT1JEIFJlbmRlcmVyOTo6Z2V0QWRhcHRl
clZlbmRvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1BZGFwdGVySWRlbnRpZmllci5WZW5kb3JJ
ZDsKLX0KLQotc3RkOjpzdHJpbmcgUmVuZGVyZXI5OjpnZXRSZW5kZXJlckRlc2NyaXB0aW9uKCkg
Y29uc3QKLXsKLSAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gcmVuZGVyZXJTdHJpbmc7Ci0KLSAgICBy
ZW5kZXJlclN0cmluZyA8PCBtQWRhcHRlcklkZW50aWZpZXIuRGVzY3JpcHRpb247Ci0gICAgaWYg
KGdldFNoYXJlSGFuZGxlU3VwcG9ydCgpKQotICAgIHsKLSAgICAgICAgcmVuZGVyZXJTdHJpbmcg
PDwgIiBEaXJlY3QzRDlFeCI7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJlbmRl
cmVyU3RyaW5nIDw8ICIgRGlyZWN0M0Q5IjsKLSAgICB9Ci0KLSAgICByZW5kZXJlclN0cmluZyA8
PCAiIHZzXyIgPDwgRDNEU0hBREVSX1ZFUlNJT05fTUFKT1IobURldmljZUNhcHMuVmVydGV4U2hh
ZGVyVmVyc2lvbikgPDwgIl8iIDw8IEQzRFNIQURFUl9WRVJTSU9OX01JTk9SKG1EZXZpY2VDYXBz
LlZlcnRleFNoYWRlclZlcnNpb24pOwotICAgIHJlbmRlcmVyU3RyaW5nIDw8ICIgcHNfIiA8PCBE
M0RTSEFERVJfVkVSU0lPTl9NQUpPUihtRGV2aWNlQ2Fwcy5QaXhlbFNoYWRlclZlcnNpb24pIDw8
ICJfIiA8PCBEM0RTSEFERVJfVkVSU0lPTl9NSU5PUihtRGV2aWNlQ2Fwcy5QaXhlbFNoYWRlclZl
cnNpb24pOwotCi0gICAgcmV0dXJuIHJlbmRlcmVyU3RyaW5nLnN0cigpOwotfQotCi1HVUlEIFJl
bmRlcmVyOTo6Z2V0QWRhcHRlcklkZW50aWZpZXIoKSBjb25zdAotewotICAgIHJldHVybiBtQWRh
cHRlcklkZW50aWZpZXIuRGV2aWNlSWRlbnRpZmllcjsKLX0KLQotdm9pZCBSZW5kZXJlcjk6Omdl
dE11bHRpU2FtcGxlU3VwcG9ydChEM0RGT1JNQVQgZm9ybWF0LCBib29sICptdWx0aVNhbXBsZUFy
cmF5KQotewotICAgIGZvciAoaW50IG11bHRpU2FtcGxlSW5kZXggPSAwOyBtdWx0aVNhbXBsZUlu
ZGV4IDw9IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7IG11bHRpU2FtcGxlSW5kZXgrKykKLSAg
ICB7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQzZDktPkNoZWNrRGV2aWNlTXVsdGlTYW1w
bGVUeXBlKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgZm9ybWF0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLCAoRDNETVVMVElT
QU1QTEVfVFlQRSltdWx0aVNhbXBsZUluZGV4LCBOVUxMKTsKLQotICAgICAgICBtdWx0aVNhbXBs
ZUFycmF5W211bHRpU2FtcGxlSW5kZXhdID0gU1VDQ0VFREVEKHJlc3VsdCk7Ci0gICAgfQotfQot
Ci1ib29sIFJlbmRlcmVyOTo6Z2V0QkdSQVRleHR1cmVTdXBwb3J0KCkgY29uc3QKLXsKLSAgICAv
LyBEaXJlY3RYIDkgYWx3YXlzIHN1cHBvcnRzIEJHUkEKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBSZW5kZXJlcjk6OmdldERYVDFUZXh0dXJlU3VwcG9ydCgpCi17Ci0gICAgcmV0dXJuIG1E
WFQxVGV4dHVyZVN1cHBvcnQ7Ci19Ci0KLWJvb2wgUmVuZGVyZXI5OjpnZXREWFQzVGV4dHVyZVN1
cHBvcnQoKQotewotICAgIHJldHVybiBtRFhUM1RleHR1cmVTdXBwb3J0OwotfQotCi1ib29sIFJl
bmRlcmVyOTo6Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCkKLXsKLSAgICByZXR1cm4gbURYVDVUZXh0
dXJlU3VwcG9ydDsKLX0KLQotYm9vbCBSZW5kZXJlcjk6OmdldERlcHRoVGV4dHVyZVN1cHBvcnQo
KSBjb25zdAotewotICAgIHJldHVybiBtRGVwdGhUZXh0dXJlU3VwcG9ydDsKLX0KLQotYm9vbCBS
ZW5kZXJlcjk6OmdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wg
KnJlbmRlcmFibGUpCi17Ci0gICAgKmZpbHRlcmluZyA9IG1GbG9hdDMyRmlsdGVyU3VwcG9ydDsK
LSAgICAqcmVuZGVyYWJsZSA9IG1GbG9hdDMyUmVuZGVyU3VwcG9ydDsKLSAgICByZXR1cm4gbUZs
b2F0MzJUZXh0dXJlU3VwcG9ydDsKLX0KLQotYm9vbCBSZW5kZXJlcjk6OmdldEZsb2F0MTZUZXh0
dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpCi17Ci0gICAgKmZp
bHRlcmluZyA9IG1GbG9hdDE2RmlsdGVyU3VwcG9ydDsKLSAgICAqcmVuZGVyYWJsZSA9IG1GbG9h
dDE2UmVuZGVyU3VwcG9ydDsKLSAgICByZXR1cm4gbUZsb2F0MTZUZXh0dXJlU3VwcG9ydDsKLX0K
LQotYm9vbCBSZW5kZXJlcjk6OmdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCkKLXsKLSAgICBy
ZXR1cm4gbUx1bWluYW5jZVRleHR1cmVTdXBwb3J0OwotfQotCi1ib29sIFJlbmRlcmVyOTo6Z2V0
THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpCi17Ci0gICAgcmV0dXJuIG1MdW1pbmFuY2VB
bHBoYVRleHR1cmVTdXBwb3J0OwotfQotCi1ib29sIFJlbmRlcmVyOTo6Z2V0VGV4dHVyZUZpbHRl
ckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzVGV4dHVy
ZUZpbHRlckFuaXNvdHJvcHk7Ci19Ci0KLWZsb2F0IFJlbmRlcmVyOTo6Z2V0VGV4dHVyZU1heEFu
aXNvdHJvcHkoKSBjb25zdAotewotICAgIGlmIChtU3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290
cm9weSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obURldmljZUNh
cHMuTWF4QW5pc290cm9weSk7Ci0gICAgfQotICAgIHJldHVybiAxLjBmOwotfQotCi1ib29sIFJl
bmRlcmVyOTo6Z2V0RXZlbnRRdWVyeVN1cHBvcnQoKQotewotICAgIHJldHVybiBtRXZlbnRRdWVy
eVN1cHBvcnQ7Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldE1heFZlcnRleFRleHR1
cmVJbWFnZVVuaXRzKCkgY29uc3QKLXsKLSAgICBNRVRBX0FTU0VSVChNQVhfVEVYVFVSRV9JTUFH
RV9VTklUU19WVEZfU00zIDw9IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVf
SU1BR0VfVU5JVFMpOwotICAgIHJldHVybiBtVmVydGV4VGV4dHVyZVN1cHBvcnQgPyBNQVhfVEVY
VFVSRV9JTUFHRV9VTklUU19WVEZfU00zIDogMDsKLX0KLQotdW5zaWduZWQgaW50IFJlbmRlcmVy
OTo6Z2V0TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyArIGdldE1heFZlcnRleFRleHR1cmVJbWFnZVVu
aXRzKCk7Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldFJlc2VydmVkVmVydGV4VW5p
Zm9ybVZlY3RvcnMoKSBjb25zdAotewotICAgIHJldHVybiAyOyAgIC8vIGR4X1ZpZXdBZGp1c3Qg
YW5kIGR4X0RlcHRoUmFuZ2UuCi19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldFJlc2Vy
dmVkRnJhZ21lbnRVbmlmb3JtVmVjdG9ycygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDM7ICAgLy8g
ZHhfVmlld0Nvb3JkcywgZHhfRGVwdGhGcm9udCBhbmQgZHhfRGVwdGhSYW5nZS4KLX0KLQotdW5z
aWduZWQgaW50IFJlbmRlcmVyOTo6Z2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKSBjb25zdAot
ewotICAgIHJldHVybiBNQVhfVkVSVEVYX0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOSAtIGdldFJlc2Vy
dmVkVmVydGV4VW5pZm9ybVZlY3RvcnMoKTsKLX0KLQotdW5zaWduZWQgaW50IFJlbmRlcmVyOTo6
Z2V0TWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycygpIGNvbnN0Ci17Ci0gICAgY29uc3QgaW50IG1h
eFBpeGVsQ29uc3RhbnRWZWN0b3JzID0gKGdldE1ham9yU2hhZGVyTW9kZWwoKSA+PSAzKSA/IE1B
WF9QSVhFTF9DT05TVEFOVF9WRUNUT1JTX1NNMyA6IE1BWF9QSVhFTF9DT05TVEFOVF9WRUNUT1JT
X1NNMjsKLQotICAgIHJldHVybiBtYXhQaXhlbENvbnN0YW50VmVjdG9ycyAtIGdldFJlc2VydmVk
RnJhZ21lbnRVbmlmb3JtVmVjdG9ycygpOwotfQotCi11bnNpZ25lZCBpbnQgUmVuZGVyZXI5Ojpn
ZXRNYXhWYXJ5aW5nVmVjdG9ycygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChnZXRNYWpvclNoYWRl
ck1vZGVsKCkgPj0gMykgPyBNQVhfVkFSWUlOR19WRUNUT1JTX1NNMyA6IE1BWF9WQVJZSU5HX1ZF
Q1RPUlNfU00yOwotfQotCi1ib29sIFJlbmRlcmVyOTo6Z2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBv
cnQoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlczsKLX0K
LQotYm9vbCBSZW5kZXJlcjk6OmdldE9jY2x1c2lvblF1ZXJ5U3VwcG9ydCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1PY2NsdXNpb25RdWVyeVN1cHBvcnQ7Ci19Ci0KLWJvb2wgUmVuZGVyZXI5Ojpn
ZXRJbnN0YW5jaW5nU3VwcG9ydCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EZXZpY2VDYXBzLlBp
eGVsU2hhZGVyVmVyc2lvbiA+PSBEM0RQU19WRVJTSU9OKDMsIDApOwotfQotCi1ib29sIFJlbmRl
cmVyOTo6Z2V0U2hhcmVIYW5kbGVTdXBwb3J0KCkgY29uc3QKLXsKLSAgICAvLyBQSVggZG9lc24n
dCBzZWVtIHRvIHN1cHBvcnQgdXNpbmcgc2hhcmUgaGFuZGxlcywgc28gZGlzYWJsZSB0aGVtLgot
ICAgIHJldHVybiAobUQzZDlFeCAhPSBOVUxMKSAmJiAhZ2w6OnBlcmZBY3RpdmUoKTsKLX0KLQot
Ym9vbCBSZW5kZXJlcjk6OmdldERlcml2YXRpdmVJbnN0cnVjdGlvblN1cHBvcnQoKSBjb25zdAot
ewotICAgIHJldHVybiAobURldmljZUNhcHMuUFMyMENhcHMuQ2FwcyAmIEQzRFBTMjBDQVBTX0dS
QURJRU5USU5TVFJVQ1RJT05TKSAhPSAwOwotfQotCi1ib29sIFJlbmRlcmVyOTo6Z2V0UG9zdFN1
YkJ1ZmZlclN1cHBvcnQoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi1pbnQgUmVu
ZGVyZXI5OjpnZXRNYWpvclNoYWRlck1vZGVsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gRDNEU0hB
REVSX1ZFUlNJT05fTUFKT1IobURldmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJzaW9uKTsKLX0KLQot
ZmxvYXQgUmVuZGVyZXI5OjpnZXRNYXhQb2ludFNpemUoKSBjb25zdAotewotICAgIC8vIFBvaW50
IHNpemUgY2xhbXBlZCBhdCAxLjBmIGZvciBTTTIKLSAgICByZXR1cm4gZ2V0TWFqb3JTaGFkZXJN
b2RlbCgpID09IDMgPyBtRGV2aWNlQ2Fwcy5NYXhQb2ludFNpemUgOiAxLjBmOwotfQotCi1pbnQg
UmVuZGVyZXI5OjpnZXRNYXhWaWV3cG9ydERpbWVuc2lvbigpIGNvbnN0Ci17Ci0gICAgaW50IG1h
eFRleHR1cmVEaW1lbnNpb24gPSBzdGQ6Om1pbihzdGQ6Om1pbihnZXRNYXhUZXh0dXJlV2lkdGgo
KSwgZ2V0TWF4VGV4dHVyZUhlaWdodCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX1NJWkUpOwotICAg
IHJldHVybiBtYXhUZXh0dXJlRGltZW5zaW9uOwotfQotCi1pbnQgUmVuZGVyZXI5OjpnZXRNYXhU
ZXh0dXJlV2lkdGgoKSBjb25zdAotewotICAgIHJldHVybiAoaW50KW1EZXZpY2VDYXBzLk1heFRl
eHR1cmVXaWR0aDsKLX0KLQotaW50IFJlbmRlcmVyOTo6Z2V0TWF4VGV4dHVyZUhlaWdodCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIChpbnQpbURldmljZUNhcHMuTWF4VGV4dHVyZUhlaWdodDsKLX0K
LQotYm9vbCBSZW5kZXJlcjk6OmdldDMyQml0SW5kZXhTdXBwb3J0KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbURldmljZUNhcHMuTWF4VmVydGV4SW5kZXggPj0gKDEgPDwgMTYpOwotfQotCi1EV09S
RCBSZW5kZXJlcjk6OmdldENhcHNEZWNsVHlwZXMoKSBjb25zdAotewotICAgIHJldHVybiBtRGV2
aWNlQ2Fwcy5EZWNsVHlwZXM7Ci19Ci0KLWludCBSZW5kZXJlcjk6OmdldE1pblN3YXBJbnRlcnZh
bCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1NaW5Td2FwSW50ZXJ2YWw7Ci19Ci0KLWludCBSZW5k
ZXJlcjk6OmdldE1heFN3YXBJbnRlcnZhbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1NYXhTd2Fw
SW50ZXJ2YWw7Ci19Ci0KLWludCBSZW5kZXJlcjk6OmdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSBj
b25zdAotewotICAgIHJldHVybiBtTWF4U3VwcG9ydGVkU2FtcGxlczsKLX0KLQotaW50IFJlbmRl
cmVyOTo6Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMoRDNERk9STUFUIGZvcm1hdCwgaW50IHJl
cXVlc3RlZCkgY29uc3QKLXsKLSAgICBpZiAocmVxdWVzdGVkID09IDApCi0gICAgewotICAgICAg
ICByZXR1cm4gcmVxdWVzdGVkOwotICAgIH0KLQotICAgIHN0ZDo6bWFwPEQzREZPUk1BVCwgYm9v
bCAqPjo6Y29uc3RfaXRlcmF0b3IgaXRyID0gbU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1h
dCk7Ci0gICAgaWYgKGl0ciA9PSBtTXVsdGlTYW1wbGVTdXBwb3J0LmVuZCgpKQotICAgIHsKLSAg
ICAgICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfVU5LTk9XTikKLSAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IHJlcXVlc3Rl
ZDsgaSA8PSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTOyArK2kpCi0gICAgewotICAgICAgICBp
ZiAoaXRyLT5zZWNvbmRbaV0gJiYgaSAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gLTE7Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldE1heFJlbmRlclRhcmdl
dHMoKSBjb25zdAotewotICAgIC8vIHdlIGRvIG5vdCBzdXBwb3J0IE1SVCBpbiBkM2Q5Ci0gICAg
cmV0dXJuIDE7Ci19Ci0KLUQzREZPUk1BVCBSZW5kZXJlcjk6OkNvbnZlcnRUZXh0dXJlSW50ZXJu
YWxGb3JtYXQoR0xpbnQgaW50ZXJuYWxmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChpbnRlcm5hbGZv
cm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgY2Fz
ZSBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVM6Ci0gICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJ
TDhfT0VTOgotICAgICAgICByZXR1cm4gRDNERk1UX0lOVFo7Ci0gICAgICBjYXNlIEdMX0NPTVBS
RVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9T
M1RDX0RYVDFfRVhUOgotICAgICAgICByZXR1cm4gRDNERk1UX0RYVDE7Ci0gICAgICBjYXNlIEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6Ci0gICAgICAgIHJldHVybiBEM0RGTVRf
RFhUMzsKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKLSAg
ICAgICAgcmV0dXJuIEQzREZNVF9EWFQ1OwotICAgICAgY2FzZSBHTF9SR0JBMzJGX0VYVDoKLSAg
ICAgIGNhc2UgR0xfUkdCMzJGX0VYVDoKLSAgICAgIGNhc2UgR0xfQUxQSEEzMkZfRVhUOgotICAg
ICAgY2FzZSBHTF9MVU1JTkFOQ0UzMkZfRVhUOgotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQ
SEEzMkZfRVhUOgotICAgICAgICByZXR1cm4gRDNERk1UX0EzMkIzMkczMlIzMkY7Ci0gICAgICBj
YXNlIEdMX1JHQkExNkZfRVhUOgotICAgICAgY2FzZSBHTF9SR0IxNkZfRVhUOgotICAgICAgY2Fz
ZSBHTF9BTFBIQTE2Rl9FWFQ6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6Ci0gICAg
ICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6Ci0gICAgICAgIHJldHVybiBEM0RGTVRf
QTE2QjE2RzE2UjE2RjsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOF9FWFQ6Ci0gICAgICAgIGlm
IChnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gRDNERk1UX0w4OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQ6Ci0gICAgICAgIGlmIChnZXRMdW1pbmFuY2VBbHBoYVRl
eHR1cmVTdXBwb3J0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBEM0RGTVRfQThM
ODsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6Ci0g
ICAgICBjYXNlIEdMX1JHQjU2NToKLSAgICAgICAgcmV0dXJuIEQzREZNVF9YOFI4RzhCODsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gRDNERk1UX0E4UjhHOEI4OwotfQotCi1ib29sIFJlbmRlcmVyOTo6
Y29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKmRlc3QsIFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnNvdXJjZSkKLXsKLSAgICBib29sIHJlc3VsdCA9IGZhbHNl
OwotCi0gICAgaWYgKHNvdXJjZSAmJiBkZXN0KQotICAgIHsKLSAgICAgICAgVGV4dHVyZVN0b3Jh
Z2U5XzJEICpzb3VyY2U5ID0gVGV4dHVyZVN0b3JhZ2U5XzJEOjptYWtlVGV4dHVyZVN0b3JhZ2U5
XzJEKHNvdXJjZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwotICAgICAgICBUZXh0dXJlU3RvcmFn
ZTlfMkQgKmRlc3Q5ID0gVGV4dHVyZVN0b3JhZ2U5XzJEOjptYWtlVGV4dHVyZVN0b3JhZ2U5XzJE
KGRlc3QtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKLQotICAgICAgICBpbnQgbGV2ZWxzID0gc291
cmNlOS0+bGV2ZWxDb3VudCgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxldmVsczsg
KytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3JjU3VyZiA9
IHNvdXJjZTktPmdldFN1cmZhY2VMZXZlbChpLCBmYWxzZSk7Ci0gICAgICAgICAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqZHN0U3VyZiA9IGRlc3Q5LT5nZXRTdXJmYWNlTGV2ZWwoaSwgZmFsc2UpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICByZXN1bHQgPSBjb3B5VG9SZW5kZXJUYXJnZXQoZHN0
U3VyZiwgc3JjU3VyZiwgc291cmNlOS0+aXNNYW5hZ2VkKCkpOwotCi0gICAgICAgICAgICBpZiAo
c3JjU3VyZikgc3JjU3VyZi0+UmVsZWFzZSgpOwotICAgICAgICAgICAgaWYgKGRzdFN1cmYpIGRz
dFN1cmYtPlJlbGVhc2UoKTsKLQotICAgICAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotYm9vbCBSZW5kZXJlcjk6OmNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZUN1YmUgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc291cmNl
KQotewotICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0KLSAgICBpZiAoc291cmNlICYmIGRlc3Qp
Ci0gICAgewotICAgICAgICBUZXh0dXJlU3RvcmFnZTlfQ3ViZSAqc291cmNlOSA9IFRleHR1cmVT
dG9yYWdlOV9DdWJlOjptYWtlVGV4dHVyZVN0b3JhZ2U5X0N1YmUoc291cmNlLT5nZXRTdG9yYWdl
SW5zdGFuY2UoKSk7Ci0gICAgICAgIFRleHR1cmVTdG9yYWdlOV9DdWJlICpkZXN0OSA9IFRleHR1
cmVTdG9yYWdlOV9DdWJlOjptYWtlVGV4dHVyZVN0b3JhZ2U5X0N1YmUoZGVzdC0+Z2V0U3RvcmFn
ZUluc3RhbmNlKCkpOwotICAgICAgICBpbnQgbGV2ZWxzID0gc291cmNlOS0+bGV2ZWxDb3VudCgp
OwotICAgICAgICBmb3IgKGludCBmID0gMDsgZiA8IDY7IGYrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZXZlbHM7IGkrKykKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3JjU3VyZiA9IHNvdXJjZTktPmdldEN1
YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGYsIGksIGZhbHNl
KTsKLSAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZHN0U3VyZiA9IGRlc3Q5LT5n
ZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmLCBpLCB0
cnVlKTsKLQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvcHlUb1JlbmRlclRhcmdldChkc3RT
dXJmLCBzcmNTdXJmLCBzb3VyY2U5LT5pc01hbmFnZWQoKSk7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoc3JjU3VyZikgc3JjU3VyZi0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIGlmIChkc3RT
dXJmKSBkc3RTdXJmLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotRDNEUE9PTCBSZW5kZXJlcjk6
OmdldEJ1ZmZlclBvb2woRFdPUkQgdXNhZ2UpIGNvbnN0Ci17Ci0gICAgaWYgKG1EM2Q5RXggIT0g
TlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEM0RQT09MX0RFRkFVTFQ7Ci0gICAgfQotICAg
IGVsc2UKLSAgICB7Ci0gICAgICAgIGlmICghKHVzYWdlICYgRDNEVVNBR0VfRFlOQU1JQykpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBEM0RQT09MX01BTkFHRUQ7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gRDNEUE9PTF9ERUZBVUxUOwotfQotCi1ib29sIFJlbmRlcmVy
OTo6Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0
YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZTJEICpzdG9yYWdlLCBHTGludCBsZXZlbCkKLXsKLSAgICBSRUNUIHJlY3Q7Ci0gICAgcmVj
dC5sZWZ0ID0gc291cmNlUmVjdC54OwotICAgIHJlY3QudG9wID0gc291cmNlUmVjdC55OwotICAg
IHJlY3QucmlnaHQgPSBzb3VyY2VSZWN0LnggKyBzb3VyY2VSZWN0LndpZHRoOwotICAgIHJlY3Qu
Ym90dG9tID0gc291cmNlUmVjdC55ICsgc291cmNlUmVjdC5oZWlnaHQ7Ci0KLSAgICByZXR1cm4g
bUJsaXQtPmNvcHkoZnJhbWVidWZmZXIsIHJlY3QsIGRlc3RGb3JtYXQsIHhvZmZzZXQsIHlvZmZz
ZXQsIHN0b3JhZ2UsIGxldmVsKTsKLX0KLQotYm9vbCBSZW5kZXJlcjk6OmNvcHlJbWFnZShnbDo6
RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0
LCBHTGVudW0gZGVzdEZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdl
LCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkKLXsKLSAgICBSRUNUIHJlY3Q7Ci0gICAgcmVj
dC5sZWZ0ID0gc291cmNlUmVjdC54OwotICAgIHJlY3QudG9wID0gc291cmNlUmVjdC55OwotICAg
IHJlY3QucmlnaHQgPSBzb3VyY2VSZWN0LnggKyBzb3VyY2VSZWN0LndpZHRoOwotICAgIHJlY3Qu
Ym90dG9tID0gc291cmNlUmVjdC55ICsgc291cmNlUmVjdC5oZWlnaHQ7Ci0KLSAgICByZXR1cm4g
bUJsaXQtPmNvcHkoZnJhbWVidWZmZXIsIHJlY3QsIGRlc3RGb3JtYXQsIHhvZmZzZXQsIHlvZmZz
ZXQsIHN0b3JhZ2UsIHRhcmdldCwgbGV2ZWwpOwotfQotCi1ib29sIFJlbmRlcmVyOTo6YmxpdFJl
Y3QoZ2w6OkZyYW1lYnVmZmVyICpyZWFkRnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUg
JnJlYWRSZWN0LCBnbDo6RnJhbWVidWZmZXIgKmRyYXdGcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJl
Y3RhbmdsZSAmZHJhd1JlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGl0UmVu
ZGVyVGFyZ2V0LCBib29sIGJsaXREZXB0aFN0ZW5jaWwpCi17Ci0gICAgZW5kU2NlbmUoKTsKLQot
ICAgIGlmIChibGl0UmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZl
ciAqcmVhZEJ1ZmZlciA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoMCk7Ci0gICAg
ICAgIGdsOjpSZW5kZXJidWZmZXIgKmRyYXdCdWZmZXIgPSBkcmF3RnJhbWVidWZmZXItPmdldENv
bG9yYnVmZmVyKDApOwotICAgICAgICBSZW5kZXJUYXJnZXQ5ICpyZWFkUmVuZGVyVGFyZ2V0ID0g
TlVMTDsKLSAgICAgICAgUmVuZGVyVGFyZ2V0OSAqZHJhd1JlbmRlclRhcmdldCA9IE5VTEw7Ci0g
ICAgICAgIElEaXJlY3QzRFN1cmZhY2U5KiByZWFkU3VyZmFjZSA9IE5VTEw7Ci0gICAgICAgIElE
aXJlY3QzRFN1cmZhY2U5KiBkcmF3U3VyZmFjZSA9IE5VTEw7Ci0KLSAgICAgICAgaWYgKHJlYWRC
dWZmZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlYWRSZW5kZXJUYXJnZXQgPSBSZW5kZXJU
YXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShyZWFkQnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGRyYXdCdWZmZXIpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGRyYXdSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShk
cmF3QnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
cmVhZFJlbmRlclRhcmdldCkKLSAgICAgICAgewotICAgICAgICAgICAgcmVhZFN1cmZhY2UgPSBy
ZWFkUmVuZGVyVGFyZ2V0LT5nZXRTdXJmYWNlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGRy
YXdSZW5kZXJUYXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRyYXdTdXJmYWNlID0gZHJh
d1JlbmRlclRhcmdldC0+Z2V0U3VyZmFjZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFy
ZWFkU3VyZmFjZSB8fCAhZHJhd1N1cmZhY2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigi
RmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOwotICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBSRUNUIHNyY1JlY3Q7Ci0gICAgICAgIHNyY1JlY3QubGVmdCA9IHJlYWRSZWN0Lng7Ci0g
ICAgICAgIHNyY1JlY3QucmlnaHQgPSByZWFkUmVjdC54ICsgcmVhZFJlY3Qud2lkdGg7Ci0gICAg
ICAgIHNyY1JlY3QudG9wID0gcmVhZFJlY3QueTsKLSAgICAgICAgc3JjUmVjdC5ib3R0b20gPSBy
ZWFkUmVjdC55ICsgcmVhZFJlY3QuaGVpZ2h0OwotCi0gICAgICAgIFJFQ1QgZHN0UmVjdDsKLSAg
ICAgICAgZHN0UmVjdC5sZWZ0ID0gZHJhd1JlY3QueDsKLSAgICAgICAgZHN0UmVjdC5yaWdodCA9
IGRyYXdSZWN0LnggKyBkcmF3UmVjdC53aWR0aDsKLSAgICAgICAgZHN0UmVjdC50b3AgPSBkcmF3
UmVjdC55OwotICAgICAgICBkc3RSZWN0LmJvdHRvbSA9IGRyYXdSZWN0LnkgKyBkcmF3UmVjdC5o
ZWlnaHQ7Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5TdHJldGNoUmVjdChy
ZWFkU3VyZmFjZSwgJnNyY1JlY3QsIGRyYXdTdXJmYWNlLCAmZHN0UmVjdCwgRDNEVEVYRl9OT05F
KTsKLQotICAgICAgICByZWFkU3VyZmFjZS0+UmVsZWFzZSgpOwotICAgICAgICBkcmF3U3VyZmFj
ZS0+UmVsZWFzZSgpOwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewot
ICAgICAgICAgICAgRVJSKCJCbGl0RnJhbWVidWZmZXJBTkdMRSBmYWlsZWQ6IFN0cmV0Y2hSZWN0
IHJldHVybmVkICV4LiIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoYmxpdERlcHRoU3RlbmNpbCkKLSAgICB7Ci0gICAgICAg
IGdsOjpSZW5kZXJidWZmZXIgKnJlYWRCdWZmZXIgPSByZWFkRnJhbWVidWZmZXItPmdldERlcHRo
T3JTdGVuY2lsYnVmZmVyKCk7Ci0gICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmRyYXdCdWZmZXIg
PSBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoT3JTdGVuY2lsYnVmZmVyKCk7Ci0gICAgICAgIFJl
bmRlclRhcmdldDkgKnJlYWREZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgICAgICBSZW5kZXJUYXJn
ZXQ5ICpkcmF3RGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkq
IHJlYWRTdXJmYWNlID0gTlVMTDsKLSAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkqIGRyYXdTdXJm
YWNlID0gTlVMTDsKLQotICAgICAgICBpZiAocmVhZEJ1ZmZlcikKLSAgICAgICAgewotICAgICAg
ICAgICAgcmVhZERlcHRoU3RlbmNpbCA9IFJlbmRlclRhcmdldDk6Om1ha2VSZW5kZXJUYXJnZXQ5
KHJlYWRCdWZmZXItPmdldERlcHRoU3RlbmNpbCgpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAo
ZHJhd0J1ZmZlcikKLSAgICAgICAgewotICAgICAgICAgICAgZHJhd0RlcHRoU3RlbmNpbCA9IFJl
bmRlclRhcmdldDk6Om1ha2VSZW5kZXJUYXJnZXQ5KGRyYXdCdWZmZXItPmdldERlcHRoU3RlbmNp
bCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWFkRGVwdGhTdGVuY2lsKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZWFkU3VyZmFjZSA9IHJlYWREZXB0aFN0ZW5jaWwtPmdldFN1cmZh
Y2UoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZHJhd0RlcHRoU3RlbmNpbCkKLSAgICAgICAg
ewotICAgICAgICAgICAgZHJhd1N1cmZhY2UgPSBkcmF3RGVwdGhTdGVuY2lsLT5nZXRTdXJmYWNl
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXJlYWRTdXJmYWNlIHx8ICFkcmF3U3VyZmFj
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJl
bmRlciB0YXJnZXQuIik7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlksIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURl
dmljZS0+U3RyZXRjaFJlY3QocmVhZFN1cmZhY2UsIE5VTEwsIGRyYXdTdXJmYWNlLCBOVUxMLCBE
M0RURVhGX05PTkUpOwotCi0gICAgICAgIHJlYWRTdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgICAg
IGRyYXdTdXJmYWNlLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkJsaXRGcmFtZWJ1ZmZlckFOR0xFIGZhaWxlZDog
U3RyZXRjaFJlY3QgcmV0dXJuZWQgJXguIiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFJl
bmRlcmVyOTo6cmVhZFBpeGVscyhnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBHTGludCB4
LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBvdXRwdXRQ
aXRjaCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLCBHTGludCBwYWNrQWxpZ25tZW50LCB2b2lk
KiBwaXhlbHMpCi17Ci0gICAgUmVuZGVyVGFyZ2V0OSAqcmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IE5VTEw7Ci0gICAgZ2w6OlJlbmRlcmJ1ZmZl
ciAqY29sb3JidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoMCk7Ci0KLSAgICBp
ZiAoY29sb3JidWZmZXIpCi0gICAgewotICAgICAgICByZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJn
ZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShjb2xvcmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOwot
ICAgIH0KLSAgICAKLSAgICBpZiAocmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgc3VyZmFj
ZSA9IHJlbmRlclRhcmdldC0+Z2V0U3VyZmFjZSgpOwotICAgIH0KLQotICAgIGlmICghc3VyZmFj
ZSkKLSAgICB7Ci0gICAgICAgIC8vIGNvbnRleHQgbXVzdCBiZSBsb3N0Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKLSAgICBzdXJmYWNlLT5HZXRE
ZXNjKCZkZXNjKTsKLQotICAgIGlmIChkZXNjLk11bHRpU2FtcGxlVHlwZSAhPSBEM0RNVUxUSVNB
TVBMRV9OT05FKQotICAgIHsKLSAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FOiBS
ZXF1aXJlcyByZXNvbHZlIHVzaW5nIFN0cmV0Y2hSZWN0IGludG8gbm9uLW11bHRpc2FtcGxlZCBy
ZW5kZXIgdGFyZ2V0Ci0gICAgICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICBIUkVTVUxUIHJlc3Vs
dDsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3lzdGVtU3VyZmFjZSA9IE5VTEw7Ci0gICAgYm9v
bCBkaXJlY3RUb1BpeGVscyA9ICFwYWNrUmV2ZXJzZVJvd09yZGVyICYmIHBhY2tBbGlnbm1lbnQg
PD0gNCAmJiBnZXRTaGFyZUhhbmRsZVN1cHBvcnQoKSAmJgotICAgICAgICAgICAgICAgICAgICAg
ICAgICB4ID09IDAgJiYgeSA9PSAwICYmIFVJTlQod2lkdGgpID09IGRlc2MuV2lkdGggJiYgVUlO
VChoZWlnaHQpID09IGRlc2MuSGVpZ2h0ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRl
c2MuRm9ybWF0ID09IEQzREZNVF9BOFI4RzhCOCAmJiBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYg
dHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFOwotICAgIGlmIChkaXJlY3RUb1BpeGVscykKLSAgICB7
Ci0gICAgICAgIC8vIFVzZSB0aGUgcGl4ZWxzIHB0ciBhcyBhIHNoYXJlZCBoYW5kbGUgdG8gd3Jp
dGUgZGlyZWN0bHkgaW50byBjbGllbnQncyBtZW1vcnkKLSAgICAgICAgcmVzdWx0ID0gbURldmlj
ZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBk
ZXNjLkZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEQzRFBPT0xfU1lTVEVNTUVNLCAmc3lzdGVtU3VyZmFjZSwgJnBpeGVscyk7Ci0g
ICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gVHJ5
IGFnYWluIHdpdGhvdXQgdGhlIHNoYXJlZCBoYW5kbGUKLSAgICAgICAgICAgIGRpcmVjdFRvUGl4
ZWxzID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWRpcmVjdFRvUGl4ZWxz
KQotICAgIHsKLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5T
dXJmYWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBkZXNjLkZvcm1hdCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFBPT0xfU1lTVEVN
TUVNLCAmc3lzdGVtU3VyZmFjZSwgTlVMTCk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
LSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgICAgICBzdXJmYWNl
LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gbURldmljZS0+R2V0UmVuZGVy
VGFyZ2V0RGF0YShzdXJmYWNlLCBzeXN0ZW1TdXJmYWNlKTsKLSAgICBzdXJmYWNlLT5SZWxlYXNl
KCk7Ci0gICAgc3VyZmFjZSA9IE5VTEw7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAg
ewotICAgICAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgLy8gSXQgdHVy
bnMgb3V0IHRoYXQgRDNEIHdpbGwgc29tZXRpbWVzIHByb2R1Y2UgbW9yZSBlcnJvcgotICAgICAg
ICAvLyBjb2RlcyB0aGFuIHRob3NlIGRvY3VtZW50ZWQuCi0gICAgICAgIGlmIChkM2Q5Ojppc0Rl
dmljZUxvc3RFcnJvcihyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBub3RpZnlEZXZp
Y2VMb3N0KCk7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgfQotCi0gICAg
aWYgKGRpcmVjdFRvUGl4ZWxzKQotICAgIHsKLSAgICAgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFz
ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUkVDVCByZWN0OwotICAgIHJlY3Qu
bGVmdCA9IGdsOjpjbGFtcCh4LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVzYy5XaWR0aCkpOwot
ICAgIHJlY3QudG9wID0gZ2w6OmNsYW1wKHksIDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNjLkhl
aWdodCkpOwotICAgIHJlY3QucmlnaHQgPSBnbDo6Y2xhbXAoeCArIHdpZHRoLCAwTCwgc3RhdGlj
X2Nhc3Q8TE9ORz4oZGVzYy5XaWR0aCkpOwotICAgIHJlY3QuYm90dG9tID0gZ2w6OmNsYW1wKHkg
KyBoZWlnaHQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNjLkhlaWdodCkpOwotCi0gICAgRDNE
TE9DS0VEX1JFQ1QgbG9jazsKLSAgICByZXN1bHQgPSBzeXN0ZW1TdXJmYWNlLT5Mb2NrUmVjdCgm
bG9jaywgJnJlY3QsIEQzRExPQ0tfUkVBRE9OTFkpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQp
KQotICAgIHsKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgc3lzdGVtU3VyZmFjZS0+
UmVsZWFzZSgpOwotCi0gICAgICAgIHJldHVybjsgICAvLyBObyBzZW5zaWJsZSBlcnJvciB0byBn
ZW5lcmF0ZQotICAgIH0KLQotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSAodW5zaWduZWQgY2hh
ciopcGl4ZWxzOwotICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0MTYgPSAodW5zaWduZWQgc2hvcnQq
KXBpeGVsczsKLQotICAgIHVuc2lnbmVkIGNoYXIgKnNvdXJjZTsKLSAgICBpbnQgaW5wdXRQaXRj
aDsKLSAgICBpZiAocGFja1JldmVyc2VSb3dPcmRlcikKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9
ICgodW5zaWduZWQgY2hhciopbG9jay5wQml0cykgKyBsb2NrLlBpdGNoICogKHJlY3QuYm90dG9t
IC0gcmVjdC50b3AgLSAxKTsKLSAgICAgICAgaW5wdXRQaXRjaCA9IC1sb2NrLlBpdGNoOwotICAg
IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBzb3VyY2UgPSAodW5zaWduZWQgY2hhciopbG9j
ay5wQml0czsKLSAgICAgICAgaW5wdXRQaXRjaCA9IGxvY2suUGl0Y2g7Ci0gICAgfQotCi0gICAg
dW5zaWduZWQgaW50IGZhc3RQaXhlbFNpemUgPSAwOwotCi0gICAgaWYgKGRlc2MuRm9ybWF0ID09
IEQzREZNVF9BOFI4RzhCOCAmJgotICAgICAgICBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYKLSAg
ICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQotICAgIHsKLSAgICAgICAgZmFzdFBpeGVs
U2l6ZSA9IDQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKChkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQTRS
NEc0QjQgJiYKLSAgICAgICAgICAgICBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYKLSAgICAgICAg
ICAgICB0eXBlID09IEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVCkgfHwKLSAgICAg
ICAgICAgICAoZGVzYy5Gb3JtYXQgPT0gRDNERk1UX0ExUjVHNUI1ICYmCi0gICAgICAgICAgICAg
Zm9ybWF0ID09IEdMX0JHUkFfRVhUICYmCi0gICAgICAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05F
RF9TSE9SVF8xXzVfNV81X1JFVl9FWFQpKQotICAgIHsKLSAgICAgICAgZmFzdFBpeGVsU2l6ZSA9
IDI7Ci0gICAgfQotICAgIGVsc2UgaWYgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BMTZCMTZHMTZS
MTZGICYmCi0gICAgICAgICAgICAgZm9ybWF0ID09IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICB0
eXBlID09IEdMX0hBTEZfRkxPQVRfT0VTKQotICAgIHsKLSAgICAgICAgZmFzdFBpeGVsU2l6ZSA9
IDg7Ci0gICAgfQotICAgIGVsc2UgaWYgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BMzJCMzJHMzJS
MzJGICYmCi0gICAgICAgICAgICAgZm9ybWF0ID09IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICB0
eXBlID09IEdMX0ZMT0FUKQotICAgIHsKLSAgICAgICAgZmFzdFBpeGVsU2l6ZSA9IDE2OwotICAg
IH0KLQotICAgIGZvciAoaW50IGogPSAwOyBqIDwgcmVjdC5ib3R0b20gLSByZWN0LnRvcDsgaisr
KQotICAgIHsKLSAgICAgICAgaWYgKGZhc3RQaXhlbFNpemUgIT0gMCkKLSAgICAgICAgewotICAg
ICAgICAgICAgLy8gRmFzdCBwYXRoIGZvciBmb3JtYXRzIHdoaWNoIHJlcXVpcmUgbm8gdHJhbnNs
YXRpb246Ci0gICAgICAgICAgICAvLyBEM0RGTVRfQThSOEc4QjggdG8gQkdSQS9VTlNJR05FRF9C
WVRFCi0gICAgICAgICAgICAvLyBEM0RGTVRfQTRSNEc0QjQgdG8gQkdSQS9VTlNJR05FRF9TSE9S
VF80XzRfNF80X1JFVl9FWFQKLSAgICAgICAgICAgIC8vIEQzREZNVF9BMVI1RzVCNSB0byBCR1JB
L1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVAotICAgICAgICAgICAgLy8gRDNERk1UX0Ex
NkIxNkcxNlIxNkYgdG8gUkdCQS9IQUxGX0ZMT0FUX09FUwotICAgICAgICAgICAgLy8gRDNERk1U
X0EzMkIzMkczMlIzMkYgdG8gUkdCQS9GTE9BVAotICAgICAgICAgICAgLy8gCi0gICAgICAgICAg
ICAvLyBOb3RlIHRoYXQgYnVmZmVycyB3aXRoIG5vIGFscGhhIGdvIHRocm91Z2ggdGhlIHNsb3cg
cGF0aCBiZWxvdy4KLSAgICAgICAgICAgIG1lbWNweShkZXN0ICsgaiAqIG91dHB1dFBpdGNoLAot
ICAgICAgICAgICAgICAgICAgIHNvdXJjZSArIGogKiBpbnB1dFBpdGNoLAotICAgICAgICAgICAg
ICAgICAgIChyZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0KSAqIGZhc3RQaXhlbFNpemUpOwotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoZGVzYy5Gb3JtYXQg
PT0gRDNERk1UX0E4UjhHOEI4ICYmCi0gICAgICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9SR0JB
ICYmCi0gICAgICAgICAgICAgICAgIHR5cGUgPT0gR0xfVU5TSUdORURfQllURSkKLSAgICAgICAg
ewotICAgICAgICAgICAgLy8gRmFzdCBwYXRoIGZvciBzd2FwcGluZyByZWQgd2l0aCBibHVlCi0g
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3QucmlnaHQgLSByZWN0LmxlZnQ7IGkr
KykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoo
dW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7Ci0gICAgICAg
ICAgICAgICAgKih1bnNpZ25lZCBpbnQqKShkZXN0ICsgNCAqIGkgKyBqICogb3V0cHV0UGl0Y2gp
ID0KLSAgICAgICAgICAgICAgICAgICAgKGFyZ2IgJiAweEZGMDBGRjAwKSB8ICAgICAgIC8vIEtl
ZXAgYWxwaGEgYW5kIGdyZWVuCi0gICAgICAgICAgICAgICAgICAgIChhcmdiICYgMHgwMEZGMDAw
MCkgPj4gMTYgfCAvLyBNb3ZlIHJlZCB0byBibHVlCi0gICAgICAgICAgICAgICAgICAgIChhcmdi
ICYgMHgwMDAwMDBGRikgPDwgMTY7ICAvLyBNb3ZlIGJsdWUgdG8gcmVkCi0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgcmVjdC5yaWdodCAtIHJlY3QubGVmdDsgaSsrKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBmbG9hdCByOwotICAgICAgICAgICAgZmxvYXQgZzsKLSAgICAgICAgICAgIGZsb2F0IGI7
Ci0gICAgICAgICAgICBmbG9hdCBhOwotCi0gICAgICAgICAgICBzd2l0Y2ggKGRlc2MuRm9ybWF0
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6Ci0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2IgPSAq
KHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsgMiAqIGkgKyBqICogaW5wdXRQaXRjaCk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgYSA9IDEuMGY7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAocmdi
ICYgMHgwMDFGKSAqICgxLjBmIC8gMHgwMDFGKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IChy
Z2IgJiAweDA3RTApICogKDEuMGYgLyAweDA3RTApOwotICAgICAgICAgICAgICAgICAgICByID0g
KHJnYiAmIDB4RjgwMCkgKiAoMS4wZiAvIDB4RjgwMCk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGFy
Z2IgPSAqKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsgMiAqIGkgKyBqICogaW5wdXRQaXRjaCk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgYSA9IChhcmdiICYgMHg4MDAwKSA/IDEuMGYgOiAwLjBm
OwotICAgICAgICAgICAgICAgICAgICBiID0gKGFyZ2IgJiAweDAwMUYpICogKDEuMGYgLyAweDAw
MUYpOwotICAgICAgICAgICAgICAgICAgICBnID0gKGFyZ2IgJiAweDAzRTApICogKDEuMGYgLyAw
eDAzRTApOwotICAgICAgICAgICAgICAgICAgICByID0gKGFyZ2IgJiAweDdDMDApICogKDEuMGYg
LyAweDdDMDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Ci0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291
cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYSA9
IChhcmdiICYgMHhGRjAwMDAwMCkgKiAoMS4wZiAvIDB4RkYwMDAwMDApOwotICAgICAgICAgICAg
ICAgICAgICBiID0gKGFyZ2IgJiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBGRik7Ci0g
ICAgICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAweDAw
MDBGRjAwKTsKLSAgICAgICAgICAgICAgICAgICAgciA9IChhcmdiICYgMHgwMEZGMDAwMCkgKiAo
MS4wZiAvIDB4MDBGRjAwMDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgeHJnYiA9ICoodW5zaWduZWQg
aW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgYSA9IDEuMGY7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAoeHJnYiAmIDB4MDAwMDAw
RkYpICogKDEuMGYgLyAweDAwMDAwMEZGKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9ICh4cmdi
ICYgMHgwMDAwRkYwMCkgKiAoMS4wZiAvIDB4MDAwMEZGMDApOwotICAgICAgICAgICAgICAgICAg
ICByID0gKHhyZ2IgJiAweDAwRkYwMDAwKSAqICgxLjBmIC8gMHgwMEZGMDAwMCk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQz
REZNVF9BMlIxMEcxMEIxMDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGludCBhcmdiID0gKih1bnNpZ25lZCBpbnQqKShzb3VyY2UgKyA0ICogaSArIGog
KiBpbnB1dFBpdGNoKTsKLQotICAgICAgICAgICAgICAgICAgICBhID0gKGFyZ2IgJiAweEMwMDAw
MDAwKSAqICgxLjBmIC8gMHhDMDAwMDAwMCk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAoYXJn
YiAmIDB4MDAwMDAzRkYpICogKDEuMGYgLyAweDAwMDAwM0ZGKTsKLSAgICAgICAgICAgICAgICAg
ICAgZyA9IChhcmdiICYgMHgwMDBGRkMwMCkgKiAoMS4wZiAvIDB4MDAwRkZDMDApOwotICAgICAg
ICAgICAgICAgICAgICByID0gKGFyZ2IgJiAweDNGRjAwMDAwKSAqICgxLjBmIC8gMHgzRkYwMDAw
MCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gZmxvYXQgZm9ybWF0cyBpbiBEM0QgYXJlIHN0b3JlZCByZ2JhLCBy
YXRoZXIgdGhhbiB0aGUgb3RoZXIgd2F5IHJvdW5kCi0gICAgICAgICAgICAgICAgICAgIHIgPSAq
KChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDApOwotICAgICAg
ICAgICAgICAgICAgICBnID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICogaW5wdXRQ
aXRjaCkgKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgYiA9ICooKGZsb2F0Kikoc291cmNlICsg
MTYgKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMik7Ci0gICAgICAgICAgICAgICAgICAgIGEgPSAq
KChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDMpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBE
M0RGTVRfQTE2QjE2RzE2UjE2RjoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIGZsb2F0IGZvcm1hdHMgaW4gRDNEIGFyZSBzdG9yZWQgcmdiYSwgcmF0aGVyIHRoYW4g
dGhlIG90aGVyIHdheSByb3VuZAotICAgICAgICAgICAgICAgICAgICByID0gZ2w6OmZsb2F0MTZU
b0Zsb2F0MzIoKigodW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyA4ICogaSArIGogKiBpbnB1dFBp
dGNoKSArIDApKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IGdsOjpmbG9hdDE2VG9GbG9hdDMy
KCooKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsgOCAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAx
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKCh1bnNp
Z25lZCBzaG9ydCopKHNvdXJjZSArIDggKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMikpOwotICAg
ICAgICAgICAgICAgICAgICBhID0gZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKigodW5zaWduZWQgc2hv
cnQqKShzb3VyY2UgKyA4ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDMpKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAgICAgICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAg
ICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDBdID0gKHVu
c2lnbmVkIGNoYXIpKDI1NSAqIHIgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFs0
ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDFdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGcgKyAw
LjVmKTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCAr
IDJdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGIgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAg
ICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDNdID0gKHVuc2lnbmVkIGNoYXIpKDI1
NSAqIGEgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBp
ICsgaiAqIG91dHB1dFBpdGNoICsgMF0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYiArIDAuNWYp
OwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMV0g
PSAodW5zaWduZWQgY2hhcikoMjU1ICogZyArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBk
ZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMl0gPSAodW5zaWduZWQgY2hhcikoMjU1ICog
ciArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBp
dGNoICsgM10gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYSArIDAuNWYpOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRf
NF80XzRfNF9SRVZfRVhUOgotICAgICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhl
IGRlc2t0b3AgR0wgc3BlYyBpbiB0aGUgIlRyYW5zZmVyIG9mIFBpeGVsIFJlY3RhbmdsZXMiIHNl
Y3Rpb24KLSAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB0eXBlIGlzIHBhY2tlZCBhcyBmb2xs
b3dzOgotICAgICAgICAgICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAgIDEyICAgMTEgICAx
MCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAgMSAgICAwCi0gICAg
ICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAg
ICAgICAgICAvLyB8ICAgICAgIDR0aCAgICAgICAgIHwgICAgICAgIDNyZCAgICAgICAgIHwgICAg
ICAgIDJuZCAgICAgICAgfCAgIDFzdCBjb21wb25lbnQgICB8Ci0gICAgICAgICAgICAgICAgICAg
IC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAvLyBpbiB0
aGUgY2FzZSBvZiBCR1JBX0VYVCwgQiBpcyB0aGUgZmlyc3QgY29tcG9uZW50LCBHIHRoZSBzZWNv
bmQsIGFuZCBzbyBmb3J0aC4KLSAgICAgICAgICAgICAgICAgICAgZGVzdDE2W2kgKyBqICogb3V0
cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIGEgKyAwLjVmKSA8PCAxMil8Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIHIgKyAwLjVmKSA8PCA4KSB8Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIGcgKyAwLjVmKSA8
PCA0KSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIGIg
KyAwLjVmKSA8PCAwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVDoKLSAgICAgICAgICAg
ICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhlICJUcmFu
c2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCi0gICAgICAgICAgICAgICAgICAgIC8v
IHRoaXMgdHlwZSBpcyBwYWNrZWQgYXMgZm9sbG93czoKLSAgICAgICAgICAgICAgICAgICAgLy8g
ICAxNSAgIDE0ICAgMTMgICAxMiAgIDExICAgMTAgICAgOSAgICA4ICAgIDcgICAgNiAgICA1ICAg
IDQgICAgMyAgICAyICAgIDEgICAgMAotICAgICAgICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgICAgICAgICAgLy8gfCA0dGggfCAgICAgICAgICAz
cmQgICAgICAgICAgIHwgICAgICAgICAgIDJuZCAgICAgICAgICB8ICAgICAgMXN0IGNvbXBvbmVu
dCAgICAgfAotICAgICAgICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LSAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgQkdSQV9FWFQsIEIgaXMgdGhl
IGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28gZm9ydGguCi0gICAgICAgICAg
ICAgICAgICAgIGRlc3QxNltpICsgaiAqIG91dHB1dFBpdGNoIC8gc2l6ZW9mKHVuc2lnbmVkIHNo
b3J0KV0gPQotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoICAgICBh
ICsgMC41ZikgPDwgMTUpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hv
cnQpKDMxICogciArIDAuNWYpIDw8IDEwKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVu
c2lnbmVkIHNob3J0KSgzMSAqIGcgKyAwLjVmKSA8PCA1KSB8Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIGIgKyAwLjVmKSA8PCAwKTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6
Ci0gICAgICAgICAgICAgICAgICAgIGRlc3QxNltpICsgaiAqIG91dHB1dFBpdGNoIC8gc2l6ZW9m
KHVuc2lnbmVkIHNob3J0KV0gPSAKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQg
c2hvcnQpKDMxICogYiArIDAuNWYpIDw8IDApIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgo
dW5zaWduZWQgc2hvcnQpKDYzICogZyArIDAuNWYpIDw8IDUpIHwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogciArIDAuNWYpIDw8IDExKTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZ
VEU6Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbMyAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAw
XSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiByICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAg
IGRlc3RbMyAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUg
KiBnICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbMyAqIGkgKyBqICogb3V0cHV0
UGl0Y2ggKyAyXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBiICsgMC41Zik7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBzeXN0ZW1TdXJmYWNlLT5VbmxvY2tSZWN0KCk7Ci0KLSAgICBzeXN0ZW1TdXJm
YWNlLT5SZWxlYXNlKCk7Ci19Ci0KLVJlbmRlclRhcmdldCAqUmVuZGVyZXI5OjpjcmVhdGVSZW5k
ZXJUYXJnZXQoU3dhcENoYWluICpzd2FwQ2hhaW4sIGJvb2wgZGVwdGgpCi17Ci0gICAgU3dhcENo
YWluOSAqc3dhcENoYWluOSA9IFN3YXBDaGFpbjk6Om1ha2VTd2FwQ2hhaW45KHN3YXBDaGFpbik7
Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOwotICAgIGlmIChkZXB0aCkK
LSAgICB7Ci0gICAgICAgIHN1cmZhY2UgPSBzd2FwQ2hhaW45LT5nZXREZXB0aFN0ZW5jaWwoKTsK
LSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgc3VyZmFjZSA9IHN3YXBDaGFpbjktPmdl
dFJlbmRlclRhcmdldCgpOwotICAgIH0KLQotICAgIFJlbmRlclRhcmdldDkgKnJlbmRlclRhcmdl
dCA9IG5ldyBSZW5kZXJUYXJnZXQ5KHRoaXMsIHN1cmZhY2UpOwotCi0gICAgcmV0dXJuIHJlbmRl
clRhcmdldDsKLX0KLQotUmVuZGVyVGFyZ2V0ICpSZW5kZXJlcjk6OmNyZWF0ZVJlbmRlclRhcmdl
dChpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcywg
Ym9vbCBkZXB0aCkKLXsKLSAgICBSZW5kZXJUYXJnZXQ5ICpyZW5kZXJUYXJnZXQgPSBuZXcgUmVu
ZGVyVGFyZ2V0OSh0aGlzLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHNhbXBsZXMpOwotICAgIHJl
dHVybiByZW5kZXJUYXJnZXQ7Ci19Ci0KLVNoYWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyOTo6bG9h
ZEV4ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFk
ZXJUeXBlIHR5cGUpCi17Ci0gICAgU2hhZGVyRXhlY3V0YWJsZTkgKmV4ZWN1dGFibGUgPSBOVUxM
OwotCi0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2Ugcng6OlNIQURFUl9WRVJU
RVg6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKnZzaGFk
ZXIgPSBjcmVhdGVWZXJ0ZXhTaGFkZXIoKERXT1JEKilmdW5jdGlvbiwgbGVuZ3RoKTsKLSAgICAg
ICAgICAgIGlmICh2c2hhZGVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGV4ZWN1
dGFibGUgPSBuZXcgU2hhZGVyRXhlY3V0YWJsZTkoZnVuY3Rpb24sIGxlbmd0aCwgdnNoYWRlcik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIHJ4
OjpTSEFERVJfUElYRUw6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIElEaXJlY3QzRFBpeGVsU2hh
ZGVyOSAqcHNoYWRlciA9IGNyZWF0ZVBpeGVsU2hhZGVyKChEV09SRCopZnVuY3Rpb24sIGxlbmd0
aCk7Ci0gICAgICAgICAgICBpZiAocHNoYWRlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBleGVjdXRhYmxlID0gbmV3IFNoYWRlckV4ZWN1dGFibGU5KGZ1bmN0aW9uLCBsZW5ndGgs
IHBzaGFkZXIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgcmV0dXJuIGV4ZWN1dGFibGU7Ci19Ci0KLVNoYWRlckV4ZWN1dGFibGUgKlJlbmRl
cmVyOTo6Y29tcGlsZVRvRXhlY3V0YWJsZShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hh
ciAqc2hhZGVySExTTCwgcng6OlNoYWRlclR5cGUgdHlwZSwgRDNEV29ya2Fyb3VuZFR5cGUgd29y
a2Fyb3VuZCkKLXsKLSAgICBjb25zdCBjaGFyICpwcm9maWxlID0gTlVMTDsKLQotICAgIHN3aXRj
aCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIHJ4OjpTSEFERVJfVkVSVEVYOgotICAgICAgICBw
cm9maWxlID0gZ2V0TWFqb3JTaGFkZXJNb2RlbCgpID49IDMgPyAidnNfM18wIiA6ICJ2c18yXzAi
OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ugcng6OlNIQURFUl9QSVhFTDoKLSAgICAgICAg
cHJvZmlsZSA9IGdldE1ham9yU2hhZGVyTW9kZWwoKSA+PSAzID8gInBzXzNfMCIgOiAicHNfMl8w
IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgp
OwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICAvLyBBTkdMRSBpc3N1ZSA0ODY6
Ci0gICAgLy8gV29yay1hcm91bmQgYSBEM0Q5IGNvbXBpbGVyIGJ1ZyB0aGF0IHByZXNlbnRzIGl0
c2VsZiB3aGVuIHVzaW5nIGNvbmRpdGlvbmFsIGRpc2NhcmQsIGJ5IGRpc2FibGluZyBvcHRpbWl6
YXRpb24KLSAgICBVSU5UIG9wdGltaXphdGlvbkZsYWdzID0gKHdvcmthcm91bmQgPT0gQU5HTEVf
RDNEX1dPUktBUk9VTkRfU00zX09QVElNSVpFUiA/IEQzRENPTVBJTEVfU0tJUF9PUFRJTUlaQVRJ
T04gOiBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTCk7Ci0KLSAgICBJRDNEQmxvYiAq
YmluYXJ5ID0gKElEM0RCbG9iKiljb21waWxlVG9CaW5hcnkoaW5mb0xvZywgc2hhZGVySExTTCwg
cHJvZmlsZSwgb3B0aW1pemF0aW9uRmxhZ3MsIHRydWUpOwotICAgIGlmICghYmluYXJ5KQotICAg
ICAgICByZXR1cm4gTlVMTDsKLQotICAgIFNoYWRlckV4ZWN1dGFibGUgKmV4ZWN1dGFibGUgPSBs
b2FkRXhlY3V0YWJsZShiaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgYmluYXJ5LT5HZXRCdWZm
ZXJTaXplKCksIHR5cGUpOwotICAgIGJpbmFyeS0+UmVsZWFzZSgpOwotCi0gICAgcmV0dXJuIGV4
ZWN1dGFibGU7Ci19Ci0KLWJvb2wgUmVuZGVyZXI5Ojpib3hGaWx0ZXIoSURpcmVjdDNEU3VyZmFj
ZTkgKnNvdXJjZSwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpCi17Ci0gICAgcmV0dXJuIG1CbGl0
LT5ib3hGaWx0ZXIoc291cmNlLCBkZXN0KTsKLX0KLQotRDNEUE9PTCBSZW5kZXJlcjk6OmdldFRl
eHR1cmVQb29sKERXT1JEIHVzYWdlKSBjb25zdAotewotICAgIGlmIChtRDNkOUV4ICE9IE5VTEwp
Ci0gICAgewotICAgICAgICByZXR1cm4gRDNEUE9PTF9ERUZBVUxUOwotICAgIH0KLSAgICBlbHNl
Ci0gICAgewotICAgICAgICBpZiAoISh1c2FnZSAmIChEM0RVU0FHRV9ERVBUSFNURU5DSUwgfCBE
M0RVU0FHRV9SRU5ERVJUQVJHRVQpKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEQz
RFBPT0xfTUFOQUdFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBEM0RQT09MX0RF
RkFVTFQ7Ci19Ci0KLWJvb2wgUmVuZGVyZXI5Ojpjb3B5VG9SZW5kZXJUYXJnZXQoSURpcmVjdDNE
U3VyZmFjZTkgKmRlc3QsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGJvb2wgZnJvbU1hbmFn
ZWQpCi17Ci0gICAgaWYgKHNvdXJjZSAmJiBkZXN0KQotICAgIHsKLSAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWTsKLQotICAgICAgICBpZiAoZnJvbU1hbmFn
ZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOwotICAgICAg
ICAgICAgc291cmNlLT5HZXREZXNjKCZkZXNjKTsKLQotICAgICAgICAgICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKnN1cmYgPSAwOwotICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlT2Zm
c2NyZWVuUGxhaW5TdXJmYWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBkZXNjLkZvcm1hdCwg
RDNEUE9PTF9TWVNURU1NRU0sICZzdXJmLCBOVUxMKTsKLQotICAgICAgICAgICAgaWYgKFNVQ0NF
RURFRChyZXN1bHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEltYWdlOTo6Y29w
eUxvY2thYmxlU3VyZmFjZXMoc3VyZiwgc291cmNlKTsKLSAgICAgICAgICAgICAgICByZXN1bHQg
PSBtRGV2aWNlLT5VcGRhdGVTdXJmYWNlKHN1cmYsIE5VTEwsIGRlc3QsIE5VTEwpOwotICAgICAg
ICAgICAgICAgIHN1cmYtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVuZFNjZW5lKCk7Ci0gICAgICAgICAg
ICByZXN1bHQgPSBtRGV2aWNlLT5TdHJldGNoUmVjdChzb3VyY2UsIE5VTEwsIGRlc3QsIE5VTEws
IEQzRFRFWEZfTk9ORSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUltYWdl
ICpSZW5kZXJlcjk6OmNyZWF0ZUltYWdlKCkKLXsKLSAgICByZXR1cm4gbmV3IEltYWdlOSgpOwot
fQotCi12b2lkIFJlbmRlcmVyOTo6Z2VuZXJhdGVNaXBtYXAoSW1hZ2UgKmRlc3QsIEltYWdlICpz
cmMpCi17Ci0gICAgSW1hZ2U5ICpzcmM5ID0gSW1hZ2U5OjptYWtlSW1hZ2U5KHNyYyk7Ci0gICAg
SW1hZ2U5ICpkc3Q5ID0gSW1hZ2U5OjptYWtlSW1hZ2U5KGRlc3QpOwotICAgIEltYWdlOTo6Z2Vu
ZXJhdGVNaXBtYXAoZHN0OSwgc3JjOSk7Ci19Ci0KLVRleHR1cmVTdG9yYWdlICpSZW5kZXJlcjk6
OmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoU3dhcENoYWluICpzd2FwQ2hhaW4pCi17Ci0gICAgU3dh
cENoYWluOSAqc3dhcENoYWluOSA9IFN3YXBDaGFpbjk6Om1ha2VTd2FwQ2hhaW45KHN3YXBDaGFp
bik7Ci0gICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTlfMkQodGhpcywgc3dhcENoYWluOSk7
Ci19Ci0KLVRleHR1cmVTdG9yYWdlICpSZW5kZXJlcjk6OmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQo
aW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9y
Y2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICByZXR1
cm4gbmV3IFRleHR1cmVTdG9yYWdlOV8yRCh0aGlzLCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB1
c2FnZSwgZm9yY2VSZW5kZXJhYmxlLCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotVGV4dHVyZVN0b3Jh
Z2UgKlJlbmRlcmVyOTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKGludCBsZXZlbHMsIEdMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50
IHNpemUpCi17Ci0gICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTlfQ3ViZSh0aGlzLCBsZXZl
bHMsIGludGVybmFsZm9ybWF0LCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlLCBzaXplKTsKLX0KLQot
Ym9vbCBSZW5kZXJlcjk6OmdldExVSUQoTFVJRCAqYWRhcHRlckx1aWQpIGNvbnN0Ci17Ci0gICAg
YWRhcHRlckx1aWQtPkhpZ2hQYXJ0ID0gMDsKLSAgICBhZGFwdGVyTHVpZC0+TG93UGFydCA9IDA7
Ci0KLSAgICBpZiAobUQzZDlFeCkKLSAgICB7Ci0gICAgICAgIG1EM2Q5RXgtPkdldEFkYXB0ZXJM
VUlEKG1BZGFwdGVyLCBhZGFwdGVyTHVpZCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlcjkuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXI5LmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYzJkYzFkNTNlNGMwMzg0ZThjYmY5MDUwMmIwM2YwNjE3
MjgxODIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlcjkuaAor
KysgL2Rldi9udWxsCkBAIC0xLDM1MCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEy
LTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBS
ZW5kZXJlcjkuaDogRGVmaW5lcyBhIGJhY2stZW5kIHNwZWNpZmljIGNsYXNzIGZvciB0aGUgRDNE
OSByZW5kZXJlci4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSRVI5X0hfCi0j
ZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjlfSF8KLQotI2luY2x1ZGUgImNvbW1v
bi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckNhY2hlLmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL1ZlcnRleERlY2xhcmF0aW9uQ2FjaGUuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvUmVuZGVyZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVy
VGFyZ2V0LmgiCi0KLW5hbWVzcGFjZSBnbAotewotY2xhc3MgUmVuZGVyYnVmZmVyOwotfQotCi1u
YW1lc3BhY2UgcngKLXsKLWNsYXNzIFZlcnRleERhdGFNYW5hZ2VyOwotY2xhc3MgSW5kZXhEYXRh
TWFuYWdlcjsKLWNsYXNzIFN0cmVhbWluZ0luZGV4QnVmZmVySW50ZXJmYWNlOwotc3RydWN0IFRy
YW5zbGF0ZWRBdHRyaWJ1dGU7Ci0KLWNsYXNzIFJlbmRlcmVyOSA6IHB1YmxpYyBSZW5kZXJlcgot
ewotICBwdWJsaWM6Ci0gICAgUmVuZGVyZXI5KGVnbDo6RGlzcGxheSAqZGlzcGxheSwgSERDIGhE
YywgYm9vbCBzb2Z0d2FyZURldmljZSk7Ci0gICAgdmlydHVhbCB+UmVuZGVyZXI5KCk7Ci0KLSAg
ICBzdGF0aWMgUmVuZGVyZXI5ICptYWtlUmVuZGVyZXI5KFJlbmRlcmVyICpyZW5kZXJlcik7Ci0K
LSAgICB2aXJ0dWFsIEVHTGludCBpbml0aWFsaXplKCk7Ci0gICAgdmlydHVhbCBib29sIHJlc2V0
RGV2aWNlKCk7Ci0KLSAgICB2aXJ0dWFsIGludCBnZW5lcmF0ZUNvbmZpZ3MoQ29uZmlnRGVzYyAq
KmNvbmZpZ0Rlc2NMaXN0KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQ29uZmlncyhDb25maWdE
ZXNjICpjb25maWdEZXNjTGlzdCk7Ci0KLSAgICB2b2lkIHN0YXJ0U2NlbmUoKTsKLSAgICB2b2lk
IGVuZFNjZW5lKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3luYyhib29sIGJsb2NrKTsKLQotICAg
IHZpcnR1YWwgU3dhcENoYWluICpjcmVhdGVTd2FwQ2hhaW4oSFdORCB3aW5kb3csIEhBTkRMRSBz
aGFyZUhhbmRsZSwgR0xlbnVtIGJhY2tCdWZmZXJGb3JtYXQsIEdMZW51bSBkZXB0aEJ1ZmZlckZv
cm1hdCk7Ci0KLSAgICBJRGlyZWN0M0RRdWVyeTkqIGFsbG9jYXRlRXZlbnRRdWVyeSgpOwotICAg
IHZvaWQgZnJlZUV2ZW50UXVlcnkoSURpcmVjdDNEUXVlcnk5KiBxdWVyeSk7Ci0KLSAgICAvLyBy
ZXNvdXJjZSBjcmVhdGlvbgotICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKmNyZWF0ZVZlcnRl
eFNoYWRlcihjb25zdCBEV09SRCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgpOwotICAgIElEaXJl
Y3QzRFBpeGVsU2hhZGVyOSAqY3JlYXRlUGl4ZWxTaGFkZXIoY29uc3QgRFdPUkQgKmZ1bmN0aW9u
LCBzaXplX3QgbGVuZ3RoKTsKLSAgICBIUkVTVUxUIGNyZWF0ZVZlcnRleEJ1ZmZlcihVSU5UIExl
bmd0aCwgRFdPUkQgVXNhZ2UsIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKipwcFZlcnRleEJ1ZmZl
cik7Ci0gICAgSFJFU1VMVCBjcmVhdGVJbmRleEJ1ZmZlcihVSU5UIExlbmd0aCwgRFdPUkQgVXNh
Z2UsIEQzREZPUk1BVCBGb3JtYXQsIElEaXJlY3QzREluZGV4QnVmZmVyOSAqKnBwSW5kZXhCdWZm
ZXIpOwotI2lmIDAKLSAgICB2b2lkICpjcmVhdGVUZXh0dXJlMkQoKTsKLSAgICB2b2lkICpjcmVh
dGVUZXh0dXJlQ3ViZSgpOwotICAgIHZvaWQgKmNyZWF0ZVF1ZXJ5KCk7Ci0gICAgdm9pZCAqY3Jl
YXRlSW5kZXhCdWZmZXIoKTsKLSAgICB2b2lkICpjcmVhdGVWZXJ0ZXhidWZmZXIoKTsKLQotICAg
IC8vIHN0YXRlIHNldHVwCi0gICAgdm9pZCBhcHBseVNoYWRlcnMoKTsKLSAgICB2b2lkIGFwcGx5
Q29uc3RhbnRzKCk7Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2FtcGxlclN0YXRlKGds
OjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNh
bXBsZXIpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBl
LCBpbnQgaW5kZXgsIGdsOjpUZXh0dXJlICp0ZXh0dXJlKTsKLQotICAgIHZpcnR1YWwgdm9pZCBz
ZXRSYXN0ZXJpemVyU3RhdGUoY29uc3QgZ2w6OlJhc3Rlcml6ZXJTdGF0ZSAmcmFzdGVyU3RhdGUp
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRCbGVuZFN0YXRlKGNvbnN0IGdsOjpCbGVuZFN0YXRlICZi
bGVuZFN0YXRlLCBjb25zdCBnbDo6Q29sb3IgJmJsZW5kQ29sb3IsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZU1hc2spOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXREZXB0aFN0ZW5jaWxTdGF0ZShjb25zdCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmRlcHRo
U3RlbmNpbFN0YXRlLCBpbnQgc3RlbmNpbFJlZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IHN0ZW5jaWxCYWNrUmVmLCBib29sIGZyb250RmFjZUNDVyk7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0U2Npc3NvclJlY3RhbmdsZShjb25zdCBnbDo6UmVjdGFuZ2xlICZz
Y2lzc29yLCBib29sIGVuYWJsZWQpOwotICAgIHZpcnR1YWwgYm9vbCBzZXRWaWV3cG9ydChjb25z
dCBnbDo6UmVjdGFuZ2xlICZ2aWV3cG9ydCwgZmxvYXQgek5lYXIsIGZsb2F0IHpGYXIsIEdMZW51
bSBkcmF3TW9kZSwgR0xlbnVtIGZyb250RmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBpZ25vcmVWaWV3cG9ydCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZW5kZXJU
YXJnZXQoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcik7Ci0gICAgdmlydHVhbCB2b2lkIGFw
cGx5U2hhZGVycyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSk7Ci0gICAgdmlydHVh
bCB2b2lkIGFwcGx5VW5pZm9ybXMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGds
OjpVbmlmb3JtQXJyYXkgKnVuaWZvcm1BcnJheSk7Ci0gICAgdmlydHVhbCBib29sIGFwcGx5UHJp
bWl0aXZlVHlwZShHTGVudW0gcHJpbWl0aXZlVHlwZSwgR0xzaXplaSBlbGVtZW50Q291bnQpOwot
ICAgIHZpcnR1YWwgR0xlbnVtIGFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5LCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0ZXNbXSwgR0xp
bnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKLSAgICB2aXJ0dWFs
IEdMZW51bSBhcHBseUluZGV4QnVmZmVyKGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgZ2w6OkJ1ZmZl
ciAqZWxlbWVudEFycmF5QnVmZmVyLCBHTHNpemVpIGNvdW50LCBHTGVudW0gbW9kZSwgR0xlbnVt
IHR5cGUsIFRyYW5zbGF0ZWRJbmRleERhdGEgKmluZGV4SW5mbyk7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5j
ZXMpOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkg
Y291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpCdWZmZXIgKmVs
ZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvLCBH
THNpemVpIGluc3RhbmNlcyk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoY29uc3QgZ2w6OkNs
ZWFyUGFyYW1ldGVycyAmY2xlYXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIp
OwotCi0gICAgdmlydHVhbCB2b2lkIG1hcmtBbGxTdGF0ZURpcnR5KCk7Ci0KLSAgICAvLyBsb3N0
IGRldmljZQotICAgIHZvaWQgbm90aWZ5RGV2aWNlTG9zdCgpOwotICAgIHZpcnR1YWwgYm9vbCBp
c0RldmljZUxvc3QoKTsKLSAgICB2aXJ0dWFsIGJvb2wgdGVzdERldmljZUxvc3QoYm9vbCBub3Rp
ZnkpOwotICAgIHZpcnR1YWwgYm9vbCB0ZXN0RGV2aWNlUmVzZXR0YWJsZSgpOwotCi0gICAgLy8g
UmVuZGVyZXIgY2FwYWJpbGl0aWVzCi0gICAgSURpcmVjdDNERGV2aWNlOSAqZ2V0RGV2aWNlKCkg
eyByZXR1cm4gbURldmljZTsgfQotICAgIHZpcnR1YWwgRFdPUkQgZ2V0QWRhcHRlclZlbmRvcigp
IGNvbnN0OwotICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgZ2V0UmVuZGVyZXJEZXNjcmlwdGlvbigp
IGNvbnN0OwotICAgIHZpcnR1YWwgR1VJRCBnZXRBZGFwdGVySWRlbnRpZmllcigpIGNvbnN0Owot
Ci0gICAgdmlydHVhbCBib29sIGdldEJHUkFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwotICAgIHZp
cnR1YWwgYm9vbCBnZXREWFQxVGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0
RFhUM1RleHR1cmVTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldERYVDVUZXh0dXJlU3Vw
cG9ydCgpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpOwotICAgIHZp
cnR1YWwgYm9vbCBnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29s
ICpyZW5kZXJhYmxlKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0
KGJvb2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSk7Ci0gICAgdmlydHVhbCBib29sIGdl
dEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldEx1bWluYW5j
ZUFscGhhVGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhW
ZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0OwotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50
IGdldE1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVu
c2lnbmVkIGludCBnZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVzZXJ2ZWRGcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmVydGV4VW5pZm9ybVZlY3Rv
cnMoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhGcmFnbWVudFVuaWZv
cm1WZWN0b3JzKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmFyeWlu
Z1ZlY3RvcnMoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0Tm9uUG93ZXIyVGV4dHVyZVN1
cHBvcnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgp
IGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIGJvb2wgZ2V0VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBmbG9hdCBnZXRUZXh0dXJlTWF4QW5pc290cm9weSgpIGNvbnN0OwotICAgIHZp
cnR1YWwgYm9vbCBnZXRTaGFyZUhhbmRsZVN1cHBvcnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJv
b2wgZ2V0RGVyaXZhdGl2ZUluc3RydWN0aW9uU3VwcG9ydCgpIGNvbnN0OwotICAgIHZpcnR1YWwg
Ym9vbCBnZXRQb3N0U3ViQnVmZmVyU3VwcG9ydCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBpbnQg
Z2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNvbnN0OwotICAgIHZpcnR1YWwgZmxvYXQgZ2V0TWF4UG9p
bnRTaXplKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgZ2V0TWF4Vmlld3BvcnREaW1lbnNpb24o
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBnZXRNYXhUZXh0dXJlV2lkdGgoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGludCBnZXRNYXhUZXh0dXJlSGVpZ2h0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBi
b29sIGdldDMyQml0SW5kZXhTdXBwb3J0KCkgY29uc3Q7Ci0gICAgRFdPUkQgZ2V0Q2Fwc0RlY2xU
eXBlcygpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGdldE1pblN3YXBJbnRlcnZhbCgpIGNvbnN0
OwotICAgIHZpcnR1YWwgaW50IGdldE1heFN3YXBJbnRlcnZhbCgpIGNvbnN0OwotCi0gICAgdmly
dHVhbCBHTHNpemVpIGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSBjb25zdDsKLSAgICBpbnQgZ2V0
TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMoRDNERk9STUFUIGZvcm1hdCwgaW50IHJlcXVlc3RlZCkg
Y29uc3Q7Ci0gICAgCi0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4UmVuZGVyVGFyZ2V0
cygpIGNvbnN0OwotCi0gICAgRDNERk9STUFUIENvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQo
R0xpbnQgaW50ZXJuYWxmb3JtYXQpOwotCi0gICAgLy8gUGl4ZWwgb3BlcmF0aW9ucwotICAgIHZp
cnR1YWwgYm9vbCBjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAq
ZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc291cmNlKTsKLSAgICB2aXJ0dWFsIGJv
b2wgY29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqZGVzdCwg
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzb3VyY2UpOwotCi0gICAgdmlydHVhbCBib29s
IGNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFu
Z2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlMkQgKnN0b3JhZ2UsIEdMaW50IGxldmVsKTsKLSAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdl
KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJj
ZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpz
dG9yYWdlLCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wg
YmxpdFJlY3QoZ2w6OkZyYW1lYnVmZmVyICpyZWFkVGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xl
ICZyZWFkUmVjdCwgZ2w6OkZyYW1lYnVmZmVyICpkcmF3VGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFu
Z2xlICZkcmF3UmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGl0UmVuZGVy
VGFyZ2V0LCBib29sIGJsaXREZXB0aFN0ZW5jaWwpOwotICAgIHZpcnR1YWwgdm9pZCByZWFkUGl4
ZWxzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIG91dHB1dFBpdGNoLCBib29sIHBhY2tS
ZXZlcnNlUm93T3JkZXIsIEdMaW50IHBhY2tBbGlnbm1lbnQsIHZvaWQqIHBpeGVscyk7Ci0KLSAg
ICAvLyBSZW5kZXJUYXJnZXQgY3JlYXRpb24KLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqY3Jl
YXRlUmVuZGVyVGFyZ2V0KFN3YXBDaGFpbiAqc3dhcENoYWluLCBib29sIGRlcHRoKTsKLSAgICB2
aXJ0dWFsIFJlbmRlclRhcmdldCAqY3JlYXRlUmVuZGVyVGFyZ2V0KGludCB3aWR0aCwgaW50IGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzLCBib29sIGRlcHRoKTsKLQotICAg
IC8vIFNoYWRlciBvcGVyYXRpb25zCi0gICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpsb2Fk
RXhlY3V0YWJsZShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgcng6OlNoYWRl
clR5cGUgdHlwZSk7Ci0gICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpjb21waWxlVG9FeGVj
dXRhYmxlKGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpzaGFkZXJITFNMLCByeDo6
U2hhZGVyVHlwZSB0eXBlLCBEM0RXb3JrYXJvdW5kVHlwZSB3b3JrYXJvdW5kKTsKLQotICAgIC8v
IEltYWdlIG9wZXJhdGlvbnMKLSAgICB2aXJ0dWFsIEltYWdlICpjcmVhdGVJbWFnZSgpOwotICAg
IHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChJbWFnZSAqZGVzdCwgSW1hZ2UgKnNvdXJjZSk7
Ci0gICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChTd2Fw
Q2hhaW4gKnN3YXBDaGFpbik7Ci0gICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4
dHVyZVN0b3JhZ2UyRChpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1
c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KTsKLSAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUo
aW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9y
Y2VSZW5kZXJhYmxlLCBpbnQgc2l6ZSk7Ci0KLSAgICAvLyBCdWZmZXIgY3JlYXRpb24KLSAgICB2
aXJ0dWFsIFZlcnRleEJ1ZmZlciAqY3JlYXRlVmVydGV4QnVmZmVyKCk7Ci0gICAgdmlydHVhbCBJ
bmRleEJ1ZmZlciAqY3JlYXRlSW5kZXhCdWZmZXIoKTsKLSAgICB2aXJ0dWFsIEJ1ZmZlclN0b3Jh
Z2UgKmNyZWF0ZUJ1ZmZlclN0b3JhZ2UoKTsKLQotICAgIC8vIFF1ZXJ5IGFuZCBGZW5jZSBjcmVh
dGlvbgotICAgIHZpcnR1YWwgUXVlcnlJbXBsICpjcmVhdGVRdWVyeShHTGVudW0gdHlwZSk7Ci0g
ICAgdmlydHVhbCBGZW5jZUltcGwgKmNyZWF0ZUZlbmNlKCk7Ci0KLSAgICAvLyBEM0Q5LXJlbmRl
cmVyIHNwZWNpZmljIG1ldGhvZHMKLSAgICBib29sIGJveEZpbHRlcihJRGlyZWN0M0RTdXJmYWNl
OSAqc291cmNlLCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCk7Ci0KLSAgICBEM0RQT09MIGdldFRl
eHR1cmVQb29sKERXT1JEIHVzYWdlKSBjb25zdDsKLQotICAgIHZpcnR1YWwgYm9vbCBnZXRMVUlE
KExVSUQgKmFkYXB0ZXJMdWlkKSBjb25zdDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihSZW5kZXJlcjkpOwotCi0gICAgdm9pZCBhcHBseVVuaWZvcm1uZnYoZ2w6
OlVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMZmxvYXQgKnYpOwotICAgIHZvaWQgYXBw
bHlVbmlmb3Jtbml2KGdsOjpVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGludCAqdik7
Ci0gICAgdm9pZCBhcHBseVVuaWZvcm1uYnYoZ2w6OlVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNv
bnN0IEdMaW50ICp2KTsKLQotICAgIHZvaWQgZHJhd0xpbmVMb29wKEdMc2l6ZWkgY291bnQsIEdM
ZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGludCBtaW5JbmRleCwgZ2w6OkJ1ZmZl
ciAqZWxlbWVudEFycmF5QnVmZmVyKTsKLSAgICB2b2lkIGRyYXdJbmRleGVkUG9pbnRzKEdMc2l6
ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpCdWZmZXIg
KmVsZW1lbnRBcnJheUJ1ZmZlcik7Ci0KLSAgICB2b2lkIGdldE11bHRpU2FtcGxlU3VwcG9ydChE
M0RGT1JNQVQgZm9ybWF0LCBib29sICptdWx0aVNhbXBsZUFycmF5KTsKLSAgICBib29sIGNvcHlU
b1JlbmRlclRhcmdldChJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgSURpcmVjdDNEU3VyZmFjZTkg
KnNvdXJjZSwgYm9vbCBmcm9tTWFuYWdlZCk7Ci0gICAgZ2w6OlJlbmRlcmJ1ZmZlciAqZ2V0TnVs
bENvbG9yYnVmZmVyKGdsOjpSZW5kZXJidWZmZXIgKmRlcHRoYnVmZmVyKTsKLQotICAgIEQzRFBP
T0wgZ2V0QnVmZmVyUG9vbChEV09SRCB1c2FnZSkgY29uc3Q7Ci0KLSAgICBITU9EVUxFIG1EM2Q5
TW9kdWxlOwotICAgIEhEQyBtRGM7Ci0KLSAgICB2b2lkIGluaXRpYWxpemVEZXZpY2UoKTsKLSAg
ICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgZ2V0RGVmYXVsdFByZXNlbnRQYXJhbWV0ZXJzKCk7Ci0g
ICAgdm9pZCByZWxlYXNlRGV2aWNlUmVzb3VyY2VzKCk7Ci0KLSAgICBVSU5UIG1BZGFwdGVyOwot
ICAgIEQzRERFVlRZUEUgbURldmljZVR5cGU7Ci0gICAgYm9vbCBtU29mdHdhcmVEZXZpY2U7ICAg
Ly8gRklYTUU6IERlcHJlY2F0ZQotICAgIElEaXJlY3QzRDkgKm1EM2Q5OyAgLy8gQWx3YXlzIHZh
bGlkIGFmdGVyIHN1Y2Nlc3NmdWwgaW5pdGlhbGl6YXRpb24uCi0gICAgSURpcmVjdDNEOUV4ICpt
RDNkOUV4OyAgLy8gTWlnaHQgYmUgbnVsbCBpZiBEM0Q5RXggaXMgbm90IHN1cHBvcnRlZC4KLSAg
ICBJRGlyZWN0M0REZXZpY2U5ICptRGV2aWNlOwotICAgIElEaXJlY3QzRERldmljZTlFeCAqbURl
dmljZUV4OyAgLy8gTWlnaHQgYmUgbnVsbCBpZiBEM0Q5RXggaXMgbm90IHN1cHBvcnRlZC4KLQot
ICAgIEJsaXQgKm1CbGl0OwotCi0gICAgSFdORCBtRGV2aWNlV2luZG93OwotCi0gICAgYm9vbCBt
RGV2aWNlTG9zdDsKLSAgICBEM0RDQVBTOSBtRGV2aWNlQ2FwczsKLSAgICBEM0RBREFQVEVSX0lE
RU5USUZJRVI5IG1BZGFwdGVySWRlbnRpZmllcjsKLQotICAgIEQzRFBSSU1JVElWRVRZUEUgbVBy
aW1pdGl2ZVR5cGU7Ci0gICAgaW50IG1QcmltaXRpdmVDb3VudDsKLSAgICBHTHNpemVpIG1SZXBl
YXREcmF3OwotCi0gICAgYm9vbCBtU2NlbmVTdGFydGVkOwotICAgIGJvb2wgbVN1cHBvcnRzTm9u
UG93ZXIyVGV4dHVyZXM7Ci0gICAgYm9vbCBtU3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9w
eTsKLSAgICBpbnQgbU1pblN3YXBJbnRlcnZhbDsKLSAgICBpbnQgbU1heFN3YXBJbnRlcnZhbDsK
LQotICAgIGJvb2wgbU9jY2x1c2lvblF1ZXJ5U3VwcG9ydDsKLSAgICBib29sIG1FdmVudFF1ZXJ5
U3VwcG9ydDsKLSAgICBib29sIG1WZXJ0ZXhUZXh0dXJlU3VwcG9ydDsKLQotICAgIGJvb2wgbURl
cHRoVGV4dHVyZVN1cHBvcnQ7Ci0KLSAgICBib29sIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQ7Ci0g
ICAgYm9vbCBtRmxvYXQzMkZpbHRlclN1cHBvcnQ7Ci0gICAgYm9vbCBtRmxvYXQzMlJlbmRlclN1
cHBvcnQ7Ci0KLSAgICBib29sIG1GbG9hdDE2VGV4dHVyZVN1cHBvcnQ7Ci0gICAgYm9vbCBtRmxv
YXQxNkZpbHRlclN1cHBvcnQ7Ci0gICAgYm9vbCBtRmxvYXQxNlJlbmRlclN1cHBvcnQ7Ci0KLSAg
ICBib29sIG1EWFQxVGV4dHVyZVN1cHBvcnQ7Ci0gICAgYm9vbCBtRFhUM1RleHR1cmVTdXBwb3J0
OwotICAgIGJvb2wgbURYVDVUZXh0dXJlU3VwcG9ydDsKLQotICAgIGJvb2wgbUx1bWluYW5jZVRl
eHR1cmVTdXBwb3J0OwotICAgIGJvb2wgbUx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQ7Ci0K
LSAgICBzdGQ6Om1hcDxEM0RGT1JNQVQsIGJvb2wgKj4gbU11bHRpU2FtcGxlU3VwcG9ydDsKLSAg
ICBHTHNpemVpIG1NYXhTdXBwb3J0ZWRTYW1wbGVzOwotCi0gICAgLy8gY3VycmVudCByZW5kZXIg
dGFyZ2V0IHN0YXRlcwotICAgIHVuc2lnbmVkIGludCBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlh
bDsKLSAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbDsKLSAgICB1bnNp
Z25lZCBpbnQgbUFwcGxpZWRTdGVuY2lsYnVmZmVyU2VyaWFsOwotICAgIGJvb2wgbURlcHRoU3Rl
bmNpbEluaXRpYWxpemVkOwotICAgIGJvb2wgbVJlbmRlclRhcmdldERlc2NJbml0aWFsaXplZDsK
LSAgICByeDo6UmVuZGVyVGFyZ2V0OjpEZXNjIG1SZW5kZXJUYXJnZXREZXNjOwotICAgIHVuc2ln
bmVkIGludCBtQ3VyU3RlbmNpbFNpemU7Ci0gICAgdW5zaWduZWQgaW50IG1DdXJEZXB0aFNpemU7
Ci0KLSAgICBJRGlyZWN0M0RTdGF0ZUJsb2NrOSAqbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZTsKLQot
ICAgIC8vIHByZXZpb3VzbHkgc2V0IHJlbmRlciBzdGF0ZXMKLSAgICBib29sIG1Gb3JjZVNldERl
cHRoU3RlbmNpbFN0YXRlOwotICAgIGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSBtQ3VyRGVwdGhTdGVu
Y2lsU3RhdGU7Ci0gICAgaW50IG1DdXJTdGVuY2lsUmVmOwotICAgIGludCBtQ3VyU3RlbmNpbEJh
Y2tSZWY7Ci0gICAgYm9vbCBtQ3VyRnJvbnRGYWNlQ0NXOwotCi0gICAgYm9vbCBtRm9yY2VTZXRS
YXN0ZXJTdGF0ZTsKLSAgICBnbDo6UmFzdGVyaXplclN0YXRlIG1DdXJSYXN0ZXJTdGF0ZTsKLQot
ICAgIGJvb2wgbUZvcmNlU2V0U2Npc3NvcjsKLSAgICBnbDo6UmVjdGFuZ2xlIG1DdXJTY2lzc29y
OwotICAgIGJvb2wgbVNjaXNzb3JFbmFibGVkOwotCi0gICAgYm9vbCBtRm9yY2VTZXRWaWV3cG9y
dDsKLSAgICBnbDo6UmVjdGFuZ2xlIG1DdXJWaWV3cG9ydDsKLSAgICBmbG9hdCBtQ3VyTmVhcjsK
LSAgICBmbG9hdCBtQ3VyRmFyOwotICAgIGZsb2F0IG1DdXJEZXB0aEZyb250OwotCi0gICAgYm9v
bCBtRm9yY2VTZXRCbGVuZFN0YXRlOwotICAgIGdsOjpCbGVuZFN0YXRlIG1DdXJCbGVuZFN0YXRl
OwotICAgIGdsOjpDb2xvciBtQ3VyQmxlbmRDb2xvcjsKLSAgICBHTHVpbnQgbUN1clNhbXBsZU1h
c2s7Ci0KLSAgICAvLyBDdXJyZW50bHkgYXBwbGllZCBzYW1wbGVyIHN0YXRlcwotICAgIGJvb2wg
bUZvcmNlU2V0VmVydGV4U2FtcGxlclN0YXRlc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRF
WF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKLSAgICBnbDo6U2FtcGxlclN0YXRlIG1DdXJWZXJ0ZXhT
YW1wbGVyU3RhdGVzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0Vf
VU5JVFNdOwotCi0gICAgYm9vbCBtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0ZXNbZ2w6Ok1BWF9U
RVhUVVJFX0lNQUdFX1VOSVRTXTsKLSAgICBnbDo6U2FtcGxlclN0YXRlIG1DdXJQaXhlbFNhbXBs
ZXJTdGF0ZXNbZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKLQotICAgIC8vIEN1cnJlbnRs
eSBhcHBsaWVkIHRleHR1cmVzCi0gICAgdW5zaWduZWQgaW50IG1DdXJWZXJ0ZXhUZXh0dXJlU2Vy
aWFsc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsK
LSAgICB1bnNpZ25lZCBpbnQgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbZ2w6Ok1BWF9URVhUVVJF
X0lNQUdFX1VOSVRTXTsKLQotICAgIHVuc2lnbmVkIGludCBtQXBwbGllZElCU2VyaWFsOwotICAg
IHVuc2lnbmVkIGludCBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWw7Ci0gICAgCi0gICAgcng6
OmR4X1ZlcnRleENvbnN0YW50cyBtVmVydGV4Q29uc3RhbnRzOwotICAgIHJ4OjpkeF9QaXhlbENv
bnN0YW50cyBtUGl4ZWxDb25zdGFudHM7Ci0gICAgYm9vbCBtRHhVbmlmb3Jtc0RpcnR5OwotCi0g
ICAgLy8gQSBwb29sIG9mIGV2ZW50IHF1ZXJpZXMgdGhhdCBhcmUgY3VycmVudGx5IHVudXNlZC4K
LSAgICBzdGQ6OnZlY3RvcjxJRGlyZWN0M0RRdWVyeTkqPiBtRXZlbnRRdWVyeVBvb2w7Ci0gICAg
VmVydGV4U2hhZGVyQ2FjaGUgbVZlcnRleFNoYWRlckNhY2hlOwotICAgIFBpeGVsU2hhZGVyQ2Fj
aGUgbVBpeGVsU2hhZGVyQ2FjaGU7Ci0KLSAgICBWZXJ0ZXhEYXRhTWFuYWdlciAqbVZlcnRleERh
dGFNYW5hZ2VyOwotICAgIFZlcnRleERlY2xhcmF0aW9uQ2FjaGUgbVZlcnRleERlY2xhcmF0aW9u
Q2FjaGU7Ci0KLSAgICBJbmRleERhdGFNYW5hZ2VyICptSW5kZXhEYXRhTWFuYWdlcjsKLSAgICBT
dHJlYW1pbmdJbmRleEJ1ZmZlckludGVyZmFjZSAqbUxpbmVMb29wSUI7Ci0KLSAgICBlbnVtIHsg
TlVNX05VTExfQ09MT1JCVUZGRVJfQ0FDSEVfRU5UUklFUyA9IDEyIH07Ci0gICAgc3RydWN0IE51
bGxDb2xvcmJ1ZmZlckNhY2hlRW50cnkKLSAgICB7Ci0gICAgICAgIFVJTlQgbHJ1Q291bnQ7Ci0g
ICAgICAgIGludCB3aWR0aDsKLSAgICAgICAgaW50IGhlaWdodDsKLSAgICAgICAgZ2w6OlJlbmRl
cmJ1ZmZlciAqYnVmZmVyOwotICAgIH0gbU51bGxDb2xvcmJ1ZmZlckNhY2hlW05VTV9OVUxMX0NP
TE9SQlVGRkVSX0NBQ0hFX0VOVFJJRVNdOwotICAgIFVJTlQgbU1heE51bGxDb2xvcmJ1ZmZlckxS
VTsKLQotfTsKLQotfQotI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjlfSF8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvU2hhZGVyRXhlY3V0YWJsZTExLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvU2hhZGVyRXhlY3V0YWJsZTExLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZTFlYjU2MDMzNDgzZmZiMDkwMjI5MGU1OTY4NmRkNGMwZDhiMjBjMi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckV4ZWN1dGFibGUxMS5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVk
LmgiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBTaGFkZXJFeGVjdXRhYmxlMTEuY3BwOiBJbXBs
ZW1lbnRzIGEgRDNEMTEtc3BlY2lmaWMgY2xhc3MgdG8gY29udGFpbiBzaGFkZXIKLS8vIGV4ZWN1
dGFibGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9TaGFkZXJFeGVjdXRhYmxlMTEuaCIKLQotI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgot
Ci1uYW1lc3BhY2UgcngKLXsKLQotU2hhZGVyRXhlY3V0YWJsZTExOjpTaGFkZXJFeGVjdXRhYmxl
MTEoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIElEM0QxMVBpeGVsU2hhZGVy
ICpleGVjdXRhYmxlKQotICAgIDogU2hhZGVyRXhlY3V0YWJsZShmdW5jdGlvbiwgbGVuZ3RoKQot
ewotICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBleGVjdXRhYmxlOwotICAgIG1WZXJ0ZXhFeGVjdXRh
YmxlID0gTlVMTDsKLSAgICBtR2VvbWV0cnlFeGVjdXRhYmxlID0gTlVMTDsKLQotICAgIG1Db25z
dGFudEJ1ZmZlciA9IE5VTEw7Ci19Ci0KLVNoYWRlckV4ZWN1dGFibGUxMTo6U2hhZGVyRXhlY3V0
YWJsZTExKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFWZXJ0ZXhT
aGFkZXIgKmV4ZWN1dGFibGUpCi0gICAgOiBTaGFkZXJFeGVjdXRhYmxlKGZ1bmN0aW9uLCBsZW5n
dGgpCi17Ci0gICAgbVZlcnRleEV4ZWN1dGFibGUgPSBleGVjdXRhYmxlOwotICAgIG1QaXhlbEV4
ZWN1dGFibGUgPSBOVUxMOwotICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBOVUxMOwotCi0gICAg
bUNvbnN0YW50QnVmZmVyID0gTlVMTDsKLX0KLQotU2hhZGVyRXhlY3V0YWJsZTExOjpTaGFkZXJF
eGVjdXRhYmxlMTEoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIElEM0QxMUdl
b21ldHJ5U2hhZGVyICpleGVjdXRhYmxlKQotICAgIDogU2hhZGVyRXhlY3V0YWJsZShmdW5jdGlv
biwgbGVuZ3RoKQotewotICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBleGVjdXRhYmxlOwotICAg
IG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKLSAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsK
LQotICAgIG1Db25zdGFudEJ1ZmZlciA9IE5VTEw7Ci19Ci0KLVNoYWRlckV4ZWN1dGFibGUxMTo6
flNoYWRlckV4ZWN1dGFibGUxMSgpCi17Ci0gICAgaWYgKG1WZXJ0ZXhFeGVjdXRhYmxlKQotICAg
IHsKLSAgICAgICAgbVZlcnRleEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKLSAgICB9Ci0gICAgaWYg
KG1QaXhlbEV4ZWN1dGFibGUpCi0gICAgewotICAgICAgICBtUGl4ZWxFeGVjdXRhYmxlLT5SZWxl
YXNlKCk7Ci0gICAgfQotICAgIGlmIChtR2VvbWV0cnlFeGVjdXRhYmxlKQotICAgIHsKLSAgICAg
ICAgbUdlb21ldHJ5RXhlY3V0YWJsZS0+UmVsZWFzZSgpOwotICAgIH0KLSAgICAKLSAgICBpZiAo
bUNvbnN0YW50QnVmZmVyKQotICAgIHsKLSAgICAgICAgbUNvbnN0YW50QnVmZmVyLT5SZWxlYXNl
KCk7Ci0gICAgfQotfQotCi1TaGFkZXJFeGVjdXRhYmxlMTEgKlNoYWRlckV4ZWN1dGFibGUxMTo6
bWFrZVNoYWRlckV4ZWN1dGFibGUxMShTaGFkZXJFeGVjdXRhYmxlICpleGVjdXRhYmxlKQotewot
ICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKFNoYWRlckV4ZWN1dGFibGUxMSosIGV4ZWN1dGFi
bGUpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2hhZGVyRXhlY3V0YWJsZTExKj4oZXhlY3V0
YWJsZSk7Ci19Ci0KLUlEM0QxMVZlcnRleFNoYWRlciAqU2hhZGVyRXhlY3V0YWJsZTExOjpnZXRW
ZXJ0ZXhTaGFkZXIoKSBjb25zdAotewotICAgIHJldHVybiBtVmVydGV4RXhlY3V0YWJsZTsKLX0K
LQotSUQzRDExUGl4ZWxTaGFkZXIgKlNoYWRlckV4ZWN1dGFibGUxMTo6Z2V0UGl4ZWxTaGFkZXIo
KSBjb25zdAotewotICAgIHJldHVybiBtUGl4ZWxFeGVjdXRhYmxlOwotfQotCi1JRDNEMTFHZW9t
ZXRyeVNoYWRlciAqU2hhZGVyRXhlY3V0YWJsZTExOjpnZXRHZW9tZXRyeVNoYWRlcigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1HZW9tZXRyeUV4ZWN1dGFibGU7Ci19Ci0KLUlEM0QxMUJ1ZmZlciAq
U2hhZGVyRXhlY3V0YWJsZTExOjpnZXRDb25zdGFudEJ1ZmZlcihJRDNEMTFEZXZpY2UgKmRldmlj
ZSwgdW5zaWduZWQgaW50IHJlZ2lzdGVyQ291bnQpCi17Ci0gICAgaWYgKCFtQ29uc3RhbnRCdWZm
ZXIgJiYgcmVnaXN0ZXJDb3VudCA+IDApCi0gICAgewotICAgICAgICBEM0QxMV9CVUZGRVJfREVT
QyBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uID0gezB9OwotICAgICAgICBjb25zdGFudEJ1ZmZl
ckRlc2NyaXB0aW9uLkJ5dGVXaWR0aCA9IHJlZ2lzdGVyQ291bnQgKiBzaXplb2YoZmxvYXRbNF0p
OwotICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLlVzYWdlID0gRDNEMTFfVVNBR0Vf
RFlOQU1JQzsKLSAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5CaW5kRmxhZ3MgPSBE
M0QxMV9CSU5EX0NPTlNUQU5UX0JVRkZFUjsKLSAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlw
dGlvbi5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7Ci0gICAgICAgIGNv
bnN0YW50QnVmZmVyRGVzY3JpcHRpb24uTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgY29uc3RhbnRC
dWZmZXJEZXNjcmlwdGlvbi5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKLQotICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZjb25zdGFudEJ1ZmZlckRlc2NyaXB0
aW9uLCBOVUxMLCAmbUNvbnN0YW50QnVmZmVyKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbUNvbnN0YW50QnVmZmVyOwotfQotCi19Clwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlMTEuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvU2hhZGVyRXhlY3V0YWJs
ZTExLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZWMxY2Y3ZDJjZGFlYmE0NGQ0
YTViODU1NzlkMTgyOTdhNDFmYWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9TaGFkZXJFeGVjdXRhYmxlMTEuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLS8vCi0KLS8vIFNoYWRlckV4ZWN1dGFibGUxMS5oOiBEZWZpbmVzIGEgRDNE
MTEtc3BlY2lmaWMgY2xhc3MgdG8gY29udGFpbiBzaGFkZXIKLS8vIGV4ZWN1dGFibGUgaW1wbGVt
ZW50YXRpb24gZGV0YWlscy4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfU0hBREVSRVhF
Q1VUQUJMRTExX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9TSEFERVJFWEVDVVRBQkxF
MTFfSF8KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlLmgi
Ci0KLW5hbWVzcGFjZSByeAotewotCi1jbGFzcyBTaGFkZXJFeGVjdXRhYmxlMTEgOiBwdWJsaWMg
U2hhZGVyRXhlY3V0YWJsZQotewotICBwdWJsaWM6Ci0gICAgU2hhZGVyRXhlY3V0YWJsZTExKGNv
bnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFQaXhlbFNoYWRlciAqZXhl
Y3V0YWJsZSk7Ci0gICAgU2hhZGVyRXhlY3V0YWJsZTExKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBz
aXplX3QgbGVuZ3RoLCBJRDNEMTFWZXJ0ZXhTaGFkZXIgKmV4ZWN1dGFibGUpOwotICAgIFNoYWRl
ckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSUQzRDEx
R2VvbWV0cnlTaGFkZXIgKmV4ZWN1dGFibGUpOwotCi0gICAgdmlydHVhbCB+U2hhZGVyRXhlY3V0
YWJsZTExKCk7Ci0KLSAgICBzdGF0aWMgU2hhZGVyRXhlY3V0YWJsZTExICptYWtlU2hhZGVyRXhl
Y3V0YWJsZTExKFNoYWRlckV4ZWN1dGFibGUgKmV4ZWN1dGFibGUpOwotCi0gICAgSUQzRDExUGl4
ZWxTaGFkZXIgKmdldFBpeGVsU2hhZGVyKCkgY29uc3Q7Ci0gICAgSUQzRDExVmVydGV4U2hhZGVy
ICpnZXRWZXJ0ZXhTaGFkZXIoKSBjb25zdDsKLSAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZ2V0
R2VvbWV0cnlTaGFkZXIoKSBjb25zdDsKLQotICAgIElEM0QxMUJ1ZmZlciAqZ2V0Q29uc3RhbnRC
dWZmZXIoSUQzRDExRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGludCByZWdpc3RlckNvdW50KTsK
LQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTaGFkZXJFeGVjdXRh
YmxlMTEpOwotCi0gICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1QaXhlbEV4ZWN1dGFibGU7Ci0gICAg
SUQzRDExVmVydGV4U2hhZGVyICptVmVydGV4RXhlY3V0YWJsZTsKLSAgICBJRDNEMTFHZW9tZXRy
eVNoYWRlciAqbUdlb21ldHJ5RXhlY3V0YWJsZTsKLQotICAgIElEM0QxMUJ1ZmZlciAqbUNvbnN0
YW50QnVmZmVyOwotfTsKLQotfQotCi0jZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1NIQURF
UkVYRUNVVEFCTEUxMV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlOS5jcHAgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckV4ZWN1dGFibGU5LmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTg4NjhhM2ZiZjM4YTUzZmY0OWE4NzU5MTY4
ZWU5MmU0NTcwYTk4MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1NoYWRl
ckV4ZWN1dGFibGU5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLSNpbmNsdWRl
ICJwcmVjb21waWxlZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gU2hhZGVyRXhlY3V0YWJs
ZTkuY3BwOiBJbXBsZW1lbnRzIGEgRDNEOS1zcGVjaWZpYyBjbGFzcyB0byBjb250YWluIHNoYWRl
cgotLy8gZXhlY3V0YWJsZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgotCi0jaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL1NoYWRlckV4ZWN1dGFibGU5LmgiCi0KLSNpbmNsdWRlICJjb21tb24v
ZGVidWcuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLVNoYWRlckV4ZWN1dGFibGU5OjpTaGFkZXJF
eGVjdXRhYmxlOShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSURpcmVjdDNE
UGl4ZWxTaGFkZXI5ICpleGVjdXRhYmxlKQotICAgIDogU2hhZGVyRXhlY3V0YWJsZShmdW5jdGlv
biwgbGVuZ3RoKQotewotICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBleGVjdXRhYmxlOwotICAgIG1W
ZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKLX0KLQotU2hhZGVyRXhlY3V0YWJsZTk6OlNoYWRlckV4
ZWN1dGFibGU5KGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRGlyZWN0M0RW
ZXJ0ZXhTaGFkZXI5ICpleGVjdXRhYmxlKQotICAgIDogU2hhZGVyRXhlY3V0YWJsZShmdW5jdGlv
biwgbGVuZ3RoKQotewotICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gZXhlY3V0YWJsZTsKLSAgICBt
UGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKLX0KLQotU2hhZGVyRXhlY3V0YWJsZTk6On5TaGFkZXJF
eGVjdXRhYmxlOSgpCi17Ci0gICAgaWYgKG1WZXJ0ZXhFeGVjdXRhYmxlKQotICAgIHsKLSAgICAg
ICAgbVZlcnRleEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKLSAgICB9Ci0gICAgaWYgKG1QaXhlbEV4
ZWN1dGFibGUpCi0gICAgewotICAgICAgICBtUGl4ZWxFeGVjdXRhYmxlLT5SZWxlYXNlKCk7Ci0g
ICAgfQotfQotCi1TaGFkZXJFeGVjdXRhYmxlOSAqU2hhZGVyRXhlY3V0YWJsZTk6Om1ha2VTaGFk
ZXJFeGVjdXRhYmxlOShTaGFkZXJFeGVjdXRhYmxlICpleGVjdXRhYmxlKQotewotICAgIEFTU0VS
VChIQVNfRFlOQU1JQ19UWVBFKFNoYWRlckV4ZWN1dGFibGU5KiwgZXhlY3V0YWJsZSkpOwotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxTaGFkZXJFeGVjdXRhYmxlOSo+KGV4ZWN1dGFibGUpOwotfQot
Ci1JRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICpTaGFkZXJFeGVjdXRhYmxlOTo6Z2V0VmVydGV4U2hh
ZGVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVZlcnRleEV4ZWN1dGFibGU7Ci19Ci0KLUlEaXJl
Y3QzRFBpeGVsU2hhZGVyOSAqU2hhZGVyRXhlY3V0YWJsZTk6OmdldFBpeGVsU2hhZGVyKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbVBpeGVsRXhlY3V0YWJsZTsKLX0KLQotfQpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvU2hhZGVyRXhlY3V0YWJsZTkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvU2hhZGVyRXhlY3V0YWJsZTkuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmExZTZjMjg0NGE5OGJhNDI2OGYwZGRmMmI0OTRhMzZk
Mjc2YzViZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckV4ZWN1
dGFibGU5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwotCi0vLyBTaGFkZXJFeGVjdXRhYmxlOS5oOiBEZWZpbmVzIGEgRDNEOS1zcGVjaWZpYyBjbGFz
cyB0byBjb250YWluIHNoYWRlcgotLy8gZXhlY3V0YWJsZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxz
LgotCi0jaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9TSEFERVJFWEVDVVRBQkxFOV9IXwotI2Rl
ZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfU0hBREVSRVhFQ1VUQUJMRTlfSF8KLQotI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlLmgiCi0KLW5hbWVzcGFjZSByeAot
ewotCi1jbGFzcyBTaGFkZXJFeGVjdXRhYmxlOSA6IHB1YmxpYyBTaGFkZXJFeGVjdXRhYmxlCi17
Ci0gIHB1YmxpYzoKLSAgICBTaGFkZXJFeGVjdXRhYmxlOShjb25zdCB2b2lkICpmdW5jdGlvbiwg
c2l6ZV90IGxlbmd0aCwgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpleGVjdXRhYmxlKTsKLSAgICBT
aGFkZXJFeGVjdXRhYmxlOShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSURp
cmVjdDNEVmVydGV4U2hhZGVyOSAqZXhlY3V0YWJsZSk7Ci0gICAgdmlydHVhbCB+U2hhZGVyRXhl
Y3V0YWJsZTkoKTsKLQotICAgIHN0YXRpYyBTaGFkZXJFeGVjdXRhYmxlOSAqbWFrZVNoYWRlckV4
ZWN1dGFibGU5KFNoYWRlckV4ZWN1dGFibGUgKmV4ZWN1dGFibGUpOwotCi0gICAgSURpcmVjdDNE
UGl4ZWxTaGFkZXI5ICpnZXRQaXhlbFNoYWRlcigpIGNvbnN0OwotICAgIElEaXJlY3QzRFZlcnRl
eFNoYWRlcjkgKmdldFZlcnRleFNoYWRlcigpIGNvbnN0OwotCi0gIHByaXZhdGU6Ci0gICAgRElT
QUxMT1dfQ09QWV9BTkRfQVNTSUdOKFNoYWRlckV4ZWN1dGFibGU5KTsKLQotICAgIElEaXJlY3Qz
RFBpeGVsU2hhZGVyOSAqbVBpeGVsRXhlY3V0YWJsZTsKLSAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFk
ZXI5ICptVmVydGV4RXhlY3V0YWJsZTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIExJQkdMRVNWMl9S
RU5ERVJFUl9TSEFERVJFWEVDVVRBQkxFOV9IXwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvU3dhcENoYWluMTEuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9Td2FwQ2hhaW4xMS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAyMmNmZTQzMGRkZDlhYWViZGMxYzliMzZiNGM1ZWMxZmQzNzNmZDUuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9Td2FwQ2hhaW4xMS5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw3NzUgKzAsMCBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwotCi0vLyBTd2FwQ2hhaW4xMS5jcHA6IEltcGxlbWVudHMgYSBiYWNrLWVuZCBzcGVjaWZpYyBj
bGFzcyBmb3IgdGhlIEQzRDExIHN3YXAgY2hhaW4uCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvU3dhcENoYWluMTEuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9yZW5k
ZXJlcjExX3V0aWxzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyMTEu
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9wYXNzdGhy
b3VnaDExdnMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxl
ZC9wYXNzdGhyb3VnaHJnYmExMXBzLmgiCi0KLW5hbWVzcGFjZSByeAotewotCi1Td2FwQ2hhaW4x
MTo6U3dhcENoYWluMTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIsIEhXTkQgd2luZG93LCBIQU5ETEUg
c2hhcmVIYW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGJhY2tCdWZmZXJG
b3JtYXQsIEdMZW51bSBkZXB0aEJ1ZmZlckZvcm1hdCkKLSAgICA6IG1SZW5kZXJlcihyZW5kZXJl
ciksIFN3YXBDaGFpbih3aW5kb3csIHNoYXJlSGFuZGxlLCBiYWNrQnVmZmVyRm9ybWF0LCBkZXB0
aEJ1ZmZlckZvcm1hdCkKLXsKLSAgICBtU3dhcENoYWluID0gTlVMTDsKLSAgICBtQmFja0J1ZmZl
clRleHR1cmUgPSBOVUxMOwotICAgIG1CYWNrQnVmZmVyUlRWaWV3ID0gTlVMTDsKLSAgICBtT2Zm
c2NyZWVuVGV4dHVyZSA9IE5VTEw7Ci0gICAgbU9mZnNjcmVlblJUVmlldyA9IE5VTEw7Ci0gICAg
bU9mZnNjcmVlblNSVmlldyA9IE5VTEw7Ci0gICAgbURlcHRoU3RlbmNpbFRleHR1cmUgPSBOVUxM
OwotICAgIG1EZXB0aFN0ZW5jaWxEU1ZpZXcgPSBOVUxMOwotICAgIG1RdWFkVkIgPSBOVUxMOwot
ICAgIG1QYXNzVGhyb3VnaFNhbXBsZXIgPSBOVUxMOwotICAgIG1QYXNzVGhyb3VnaElMID0gTlVM
TDsKLSAgICBtUGFzc1Rocm91Z2hWUyA9IE5VTEw7Ci0gICAgbVBhc3NUaHJvdWdoUFMgPSBOVUxM
OwotICAgIG1XaWR0aCA9IC0xOwotICAgIG1IZWlnaHQgPSAtMTsKLSAgICBtU3dhcEludGVydmFs
ID0gMDsKLSAgICBtQXBwQ3JlYXRlZFNoYXJlSGFuZGxlID0gbVNoYXJlSGFuZGxlICE9IE5VTEw7
Ci0gICAgbVBhc3NUaHJvdWdoUmVzb3VyY2VzSW5pdCA9IGZhbHNlOwotfQotCi1Td2FwQ2hhaW4x
MTo6flN3YXBDaGFpbjExKCkKLXsKLSAgICByZWxlYXNlKCk7Ci19Ci0KLXZvaWQgU3dhcENoYWlu
MTE6OnJlbGVhc2UoKQotewotICAgIGlmIChtU3dhcENoYWluKQotICAgIHsKLSAgICAgICAgbVN3
YXBDaGFpbi0+UmVsZWFzZSgpOwotICAgICAgICBtU3dhcENoYWluID0gTlVMTDsKLSAgICB9Ci0K
LSAgICBpZiAobUJhY2tCdWZmZXJUZXh0dXJlKQotICAgIHsKLSAgICAgICAgbUJhY2tCdWZmZXJU
ZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1CYWNrQnVmZmVyVGV4dHVyZSA9IE5VTEw7Ci0g
ICAgfQotCi0gICAgaWYgKG1CYWNrQnVmZmVyUlRWaWV3KQotICAgIHsKLSAgICAgICAgbUJhY2tC
dWZmZXJSVFZpZXctPlJlbGVhc2UoKTsKLSAgICAgICAgbUJhY2tCdWZmZXJSVFZpZXcgPSBOVUxM
OwotICAgIH0KLQotICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1P
ZmZzY3JlZW5UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlID0g
TlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobU9mZnNjcmVlblJUVmlldykKLSAgICB7Ci0gICAgICAg
IG1PZmZzY3JlZW5SVFZpZXctPlJlbGVhc2UoKTsKLSAgICAgICAgbU9mZnNjcmVlblJUVmlldyA9
IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1PZmZzY3JlZW5TUlZpZXcpCi0gICAgewotICAgICAg
ICBtT2Zmc2NyZWVuU1JWaWV3LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1PZmZzY3JlZW5TUlZpZXcg
PSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtRGVwdGhTdGVuY2lsVGV4dHVyZSkKLSAgICB7Ci0g
ICAgICAgIG1EZXB0aFN0ZW5jaWxUZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EZXB0aFN0
ZW5jaWxUZXh0dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobURlcHRoU3RlbmNpbERTVmll
dykKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxEU1ZpZXctPlJlbGVhc2UoKTsKLSAgICAg
ICAgbURlcHRoU3RlbmNpbERTVmlldyA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1RdWFkVkIp
Ci0gICAgewotICAgICAgICBtUXVhZFZCLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1RdWFkVkIgPSBO
VUxMOwotICAgIH0KLQotICAgIGlmIChtUGFzc1Rocm91Z2hTYW1wbGVyKQotICAgIHsKLSAgICAg
ICAgbVBhc3NUaHJvdWdoU2FtcGxlci0+UmVsZWFzZSgpOwotICAgICAgICBtUGFzc1Rocm91Z2hT
YW1wbGVyID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVBhc3NUaHJvdWdoSUwpCi0gICAgewot
ICAgICAgICBtUGFzc1Rocm91Z2hJTC0+UmVsZWFzZSgpOwotICAgICAgICBtUGFzc1Rocm91Z2hJ
TCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1QYXNzVGhyb3VnaFZTKQotICAgIHsKLSAgICAg
ICAgbVBhc3NUaHJvdWdoVlMtPlJlbGVhc2UoKTsKLSAgICAgICAgbVBhc3NUaHJvdWdoVlMgPSBO
VUxMOwotICAgIH0KLQotICAgIGlmIChtUGFzc1Rocm91Z2hQUykKLSAgICB7Ci0gICAgICAgIG1Q
YXNzVGhyb3VnaFBTLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1QYXNzVGhyb3VnaFBTID0gTlVMTDsK
LSAgICB9Ci0KLSAgICBpZiAoIW1BcHBDcmVhdGVkU2hhcmVIYW5kbGUpCi0gICAgewotICAgICAg
ICBtU2hhcmVIYW5kbGUgPSBOVUxMOwotICAgIH0KLX0KLQotdm9pZCBTd2FwQ2hhaW4xMTo6cmVs
ZWFzZU9mZnNjcmVlblRleHR1cmUoKQotewotICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkKLSAg
ICB7Ci0gICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1PZmZz
Y3JlZW5UZXh0dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobU9mZnNjcmVlblJUVmlldykK
LSAgICB7Ci0gICAgICAgIG1PZmZzY3JlZW5SVFZpZXctPlJlbGVhc2UoKTsKLSAgICAgICAgbU9m
ZnNjcmVlblJUVmlldyA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1PZmZzY3JlZW5TUlZpZXcp
Ci0gICAgewotICAgICAgICBtT2Zmc2NyZWVuU1JWaWV3LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1P
ZmZzY3JlZW5TUlZpZXcgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtRGVwdGhTdGVuY2lsVGV4
dHVyZSkKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxUZXh0dXJlLT5SZWxlYXNlKCk7Ci0g
ICAgICAgIG1EZXB0aFN0ZW5jaWxUZXh0dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobURl
cHRoU3RlbmNpbERTVmlldykKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxEU1ZpZXctPlJl
bGVhc2UoKTsKLSAgICAgICAgbURlcHRoU3RlbmNpbERTVmlldyA9IE5VTEw7Ci0gICAgfQotfQot
Ci1FR0xpbnQgU3dhcENoYWluMTE6OnJlc2V0T2Zmc2NyZWVuVGV4dHVyZShpbnQgYmFja2J1ZmZl
cldpZHRoLCBpbnQgYmFja2J1ZmZlckhlaWdodCkKLXsKLSAgICBJRDNEMTFEZXZpY2UgKmRldmlj
ZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0KLSAgICBBU1NFUlQoZGV2aWNlICE9IE5VTEwp
OwotCi0gICAgLy8gRDNEMTEgZG9lcyBub3QgYWxsb3cgemVybyBzaXplIHRleHR1cmVzCi0gICAg
QVNTRVJUKGJhY2tidWZmZXJXaWR0aCA+PSAxKTsKLSAgICBBU1NFUlQoYmFja2J1ZmZlckhlaWdo
dCA+PSAxKTsKLQotICAgIC8vIFByZXNlcnZlIHRoZSByZW5kZXIgdGFyZ2V0IGNvbnRlbnQKLSAg
ICBJRDNEMTFUZXh0dXJlMkQgKnByZXZpb3VzT2Zmc2NyZWVuVGV4dHVyZSA9IG1PZmZzY3JlZW5U
ZXh0dXJlOwotICAgIGlmIChwcmV2aW91c09mZnNjcmVlblRleHR1cmUpCi0gICAgewotICAgICAg
ICBwcmV2aW91c09mZnNjcmVlblRleHR1cmUtPkFkZFJlZigpOwotICAgIH0KLSAgICBjb25zdCBp
bnQgcHJldmlvdXNXaWR0aCA9IG1XaWR0aDsKLSAgICBjb25zdCBpbnQgcHJldmlvdXNIZWlnaHQg
PSBtSGVpZ2h0OwotCi0gICAgcmVsZWFzZU9mZnNjcmVlblRleHR1cmUoKTsKLQotICAgIC8vIElm
IHRoZSBhcHAgcGFzc2VkIGluIGEgc2hhcmUgaGFuZGxlLCBvcGVuIHRoZSByZXNvdXJjZQotICAg
IC8vIFNlZSBFR0xfQU5HTEVfZDNkX3NoYXJlX2hhbmRsZV9jbGllbnRfYnVmZmVyCi0gICAgaWYg
KG1BcHBDcmVhdGVkU2hhcmVIYW5kbGUpCi0gICAgewotICAgICAgICBJRDNEMTFSZXNvdXJjZSAq
dGVtcFJlc291cmNlMTE7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5PcGVuU2hh
cmVkUmVzb3VyY2UobVNoYXJlSGFuZGxlLCBfX3V1aWRvZihJRDNEMTFSZXNvdXJjZSksICh2b2lk
KiopJnRlbXBSZXNvdXJjZTExKTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIG9wZW4gdGhlIHN3YXAgY2hhaW4gcGJ1
ZmZlciBzaGFyZSBoYW5kbGU6ICUwOGxYIiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJlbGVhc2Uo
KTsKLSAgICAgICAgICAgIHJldHVybiBFR0xfQkFEX1BBUkFNRVRFUjsKLSAgICAgICAgfQotCi0g
ICAgICAgIHJlc3VsdCA9IHRlbXBSZXNvdXJjZTExLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJ
RDNEMTFUZXh0dXJlMkQpLCAodm9pZCoqKSZtT2Zmc2NyZWVuVGV4dHVyZSk7Ci0gICAgICAgIHRl
bXBSZXNvdXJjZTExLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBxdWVyeSB0ZXh0dXJlMmQgaW50
ZXJmYWNlIGluIHBidWZmZXIgc2hhcmUgaGFuZGxlOiAlMDhsWCIsIHJlc3VsdCk7Ci0gICAgICAg
ICAgICByZWxlYXNlKCk7Ci0gICAgICAgICAgICByZXR1cm4gRUdMX0JBRF9QQVJBTUVURVI7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBWYWxpZGF0ZSBvZmZzY3JlZW4gdGV4dHVyZSBwYXJhbWV0
ZXJzCi0gICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIG9mZnNjcmVlblRleHR1cmVEZXNjID0g
ezB9OwotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+R2V0RGVzYygmb2Zmc2NyZWVuVGV4dHVy
ZURlc2MpOwotCi0gICAgICAgIGlmIChvZmZzY3JlZW5UZXh0dXJlRGVzYy5XaWR0aCAhPSAoVUlO
VCliYWNrYnVmZmVyV2lkdGgKLSAgICAgICAgICAgIHx8IG9mZnNjcmVlblRleHR1cmVEZXNjLkhl
aWdodCAhPSAoVUlOVCliYWNrYnVmZmVySGVpZ2h0Ci0gICAgICAgICAgICB8fCBvZmZzY3JlZW5U
ZXh0dXJlRGVzYy5Gb3JtYXQgIT0gZ2xfZDNkMTE6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQo
bUJhY2tCdWZmZXJGb3JtYXQpCi0gICAgICAgICAgICB8fCBvZmZzY3JlZW5UZXh0dXJlRGVzYy5N
aXBMZXZlbHMgIT0gMQotICAgICAgICAgICAgfHwgb2Zmc2NyZWVuVGV4dHVyZURlc2MuQXJyYXlT
aXplICE9IDEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiSW52YWxpZCB0ZXh0dXJlIHBh
cmFtZXRlcnMgaW4gdGhlIHNoYXJlZCBvZmZzY3JlZW4gdGV4dHVyZSBwYnVmZmVyIik7Ci0gICAg
ICAgICAgICByZWxlYXNlKCk7Ci0gICAgICAgICAgICByZXR1cm4gRUdMX0JBRF9QQVJBTUVURVI7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgY29uc3QgYm9vbCB1
c2VTaGFyZWRSZXNvdXJjZSA9ICFtV2luZG93ICYmIG1SZW5kZXJlci0+Z2V0U2hhcmVIYW5kbGVT
dXBwb3J0KCk7Ci0KLSAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0Mgb2Zmc2NyZWVuVGV4dHVy
ZURlc2MgPSB7MH07Ci0gICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLldpZHRoID0gYmFja2J1
ZmZlcldpZHRoOwotICAgICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5IZWlnaHQgPSBiYWNrYnVm
ZmVySGVpZ2h0OwotICAgICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5Gb3JtYXQgPSBnbF9kM2Qx
MTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCk7Ci0gICAgICAg
IG9mZnNjcmVlblRleHR1cmVEZXNjLk1pcExldmVscyA9IDE7Ci0gICAgICAgIG9mZnNjcmVlblRl
eHR1cmVEZXNjLkFycmF5U2l6ZSA9IDE7Ci0gICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLlNh
bXBsZURlc2MuQ291bnQgPSAxOwotICAgICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5TYW1wbGVE
ZXNjLlF1YWxpdHkgPSAwOwotICAgICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5Vc2FnZSA9IEQz
RDExX1VTQUdFX0RFRkFVTFQ7Ci0gICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLkJpbmRGbGFn
cyA9IEQzRDExX0JJTkRfUkVOREVSX1RBUkdFVCB8IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNF
OwotICAgICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7Ci0gICAg
ICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLk1pc2NGbGFncyA9IHVzZVNoYXJlZFJlc291cmNlID8g
RDNEMTFfUkVTT1VSQ0VfTUlTQ19TSEFSRUQgOiAwOwotCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJm9mZnNjcmVlblRleHR1cmVEZXNjLCBOVUxMLCAm
bU9mZnNjcmVlblRleHR1cmUpOwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAg
ICAgewotICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG9mZnNjcmVlbiB0ZXh0dXJl
OiAlMDhsWCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZWxlYXNlKCk7Ci0KLSAgICAgICAgICAg
IGlmIChkM2QxMTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gRUdMX0NPTlRFWFRfTE9TVDsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gRUdM
X0JBRF9BTExPQzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGQzZDExOjpT
ZXREZWJ1Z05hbWUobU9mZnNjcmVlblRleHR1cmUsICJPZmZzY3JlZW4gdGV4dHVyZSIpOwotCi0g
ICAgICAgIC8vIEVHTF9BTkdMRV9zdXJmYWNlX2QzZF90ZXh0dXJlXzJkX3NoYXJlX2hhbmRsZSBy
ZXF1aXJlcyB0aGF0IHdlIHN0b3JlIGEgc2hhcmUgaGFuZGxlIGZvciB0aGUgY2xpZW50Ci0gICAg
ICAgIGlmICh1c2VTaGFyZWRSZXNvdXJjZSkKLSAgICAgICAgewotICAgICAgICAgICAgSURYR0lS
ZXNvdXJjZSAqb2Zmc2NyZWVuVGV4dHVyZVJlc291cmNlID0gTlVMTDsKLSAgICAgICAgICAgIHJl
c3VsdCA9IG1PZmZzY3JlZW5UZXh0dXJlLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRFhHSVJl
c291cmNlKSwgKHZvaWQqKikmb2Zmc2NyZWVuVGV4dHVyZVJlc291cmNlKTsKLQotICAgICAgICAg
ICAgLy8gRmFsbCBiYWNrIHRvIG5vIHNoYXJlIGhhbmRsZSBvbiBmYWlsdXJlCi0gICAgICAgICAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRVJS
KCJDb3VsZCBub3QgcXVlcnkgb2Zmc2NyZWVuIHRleHR1cmUgcmVzb3VyY2U6ICUwOGxYIiwgcmVz
dWx0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXN1bHQgPSBvZmZzY3JlZW5UZXh0dXJlUmVzb3VyY2UtPkdldFNoYXJl
ZEhhbmRsZSgmbVNoYXJlSGFuZGxlKTsKLSAgICAgICAgICAgICAgICBvZmZzY3JlZW5UZXh0dXJl
UmVzb3VyY2UtPlJlbGVhc2UoKTsKLQotICAgICAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1TaGFyZUhhbmRsZSA9
IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGdldCBvZmZzY3JlZW4g
dGV4dHVyZSBzaGFyZWQgaGFuZGxlOiAlMDhsWCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgICAgICAKLSAgICBIUkVTVUxU
IHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0VmlldyhtT2Zmc2NyZWVuVGV4dHVy
ZSwgTlVMTCwgJm1PZmZzY3JlZW5SVFZpZXcpOwotCi0gICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1
bHQpKTsKLSAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1PZmZzY3JlZW5SVFZpZXcsICJPZmZzY3Jl
ZW4gcmVuZGVyIHRhcmdldCIpOwotCi0gICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFkZXJS
ZXNvdXJjZVZpZXcobU9mZnNjcmVlblRleHR1cmUsIE5VTEwsICZtT2Zmc2NyZWVuU1JWaWV3KTsK
LSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIGQzZDExOjpTZXREZWJ1Z05hbWUo
bU9mZnNjcmVlblNSVmlldywgIk9mZnNjcmVlbiBzaGFkZXIgcmVzb3VyY2UiKTsKLQotICAgIGlm
IChtRGVwdGhCdWZmZXJGb3JtYXQgIT0gR0xfTk9ORSkKLSAgICB7Ci0gICAgICAgIEQzRDExX1RF
WFRVUkUyRF9ERVNDIGRlcHRoU3RlbmNpbERlc2MgPSB7MH07Ci0gICAgICAgIGRlcHRoU3RlbmNp
bERlc2MuV2lkdGggPSBiYWNrYnVmZmVyV2lkdGg7Ci0gICAgICAgIGRlcHRoU3RlbmNpbERlc2Mu
SGVpZ2h0ID0gYmFja2J1ZmZlckhlaWdodDsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5Gb3Jt
YXQgPSBnbF9kM2QxMTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtRGVwdGhCdWZmZXJGb3Jt
YXQpOwotICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLk1pcExldmVscyA9IDE7Ci0gICAgICAgIGRl
cHRoU3RlbmNpbERlc2MuQXJyYXlTaXplID0gMTsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5T
YW1wbGVEZXNjLkNvdW50ID0gMTsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5TYW1wbGVEZXNj
LlF1YWxpdHkgPSAwOwotICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLlVzYWdlID0gRDNEMTFfVVNB
R0VfREVGQVVMVDsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9C
SU5EX0RFUFRIX1NURU5DSUw7Ci0gICAgICAgIGRlcHRoU3RlbmNpbERlc2MuQ1BVQWNjZXNzRmxh
Z3MgPSAwOwotICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLk1pc2NGbGFncyA9IDA7Ci0KLSAgICAg
ICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRlcHRoU3RlbmNpbERlc2MsIE5V
TEwsICZtRGVwdGhTdGVuY2lsVGV4dHVyZSk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
LSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGRlcHRoc3RlbmNp
bCBzdXJmYWNlIGZvciBuZXcgc3dhcCBjaGFpbjogMHglMDhYIiwgcmVzdWx0KTsKLSAgICAgICAg
ICAgIHJlbGVhc2UoKTsKLQotICAgICAgICAgICAgaWYgKGQzZDExOjppc0RldmljZUxvc3RFcnJv
cihyZXN1bHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBFR0xfQ09O
VEVYVF9MT1NUOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBFR0xfQkFEX0FMTE9DOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobURlcHRoU3RlbmNpbFRleHR1
cmUsICJEZXB0aCBzdGVuY2lsIHRleHR1cmUiKTsKLQotICAgICAgICByZXN1bHQgPSBkZXZpY2Ut
PkNyZWF0ZURlcHRoU3RlbmNpbFZpZXcobURlcHRoU3RlbmNpbFRleHR1cmUsIE5VTEwsICZtRGVw
dGhTdGVuY2lsRFNWaWV3KTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAg
ICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtRGVwdGhTdGVuY2lsRFNWaWV3LCAiRGVwdGggc3Rl
bmNpbCB2aWV3Iik7Ci0gICAgfQotCi0gICAgbVdpZHRoID0gYmFja2J1ZmZlcldpZHRoOwotICAg
IG1IZWlnaHQgPSBiYWNrYnVmZmVySGVpZ2h0OwotCi0gICAgaWYgKHByZXZpb3VzT2Zmc2NyZWVu
VGV4dHVyZSAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgRDNEMTFfQk9YIHNvdXJjZUJveCA9IHsw
fTsKLSAgICAgICAgc291cmNlQm94LmxlZnQgPSAwOwotICAgICAgICBzb3VyY2VCb3gucmlnaHQg
PSBzdGQ6Om1pbihwcmV2aW91c1dpZHRoLCBtV2lkdGgpOwotICAgICAgICBzb3VyY2VCb3gudG9w
ID0gc3RkOjptYXgocHJldmlvdXNIZWlnaHQgLSBtSGVpZ2h0LCAwKTsKLSAgICAgICAgc291cmNl
Qm94LmJvdHRvbSA9IHByZXZpb3VzSGVpZ2h0OwotICAgICAgICBzb3VyY2VCb3guZnJvbnQgPSAw
OwotICAgICAgICBzb3VyY2VCb3guYmFjayA9IDE7Ci0KLSAgICAgICAgSUQzRDExRGV2aWNlQ29u
dGV4dCAqZGV2aWNlQ29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotICAg
ICAgICBjb25zdCBpbnQgeW9mZnNldCA9IHN0ZDo6bWF4KG1IZWlnaHQgLSBwcmV2aW91c0hlaWdo
dCwgMCk7Ci0gICAgICAgIGRldmljZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihtT2Zm
c2NyZWVuVGV4dHVyZSwgMCwgMCwgeW9mZnNldCwgMCwgcHJldmlvdXNPZmZzY3JlZW5UZXh0dXJl
LCAwLCAmc291cmNlQm94KTsKLQotICAgICAgICBwcmV2aW91c09mZnNjcmVlblRleHR1cmUtPlJl
bGVhc2UoKTsKLQotICAgICAgICBpZiAobVN3YXBDaGFpbikKLSAgICAgICAgewotICAgICAgICAg
ICAgc3dhcFJlY3QoMCwgMCwgbVdpZHRoLCBtSGVpZ2h0KTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHJldHVybiBFR0xfU1VDQ0VTUzsKLX0KLQotRUdMaW50IFN3YXBDaGFpbjExOjpyZXNpemUo
RUdMaW50IGJhY2tidWZmZXJXaWR0aCwgRUdMaW50IGJhY2tidWZmZXJIZWlnaHQpCi17Ci0gICAg
SUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0gICAgaWYg
KGRldmljZSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEVHTF9CQURfQUNDRVNTOwot
ICAgIH0KLQotICAgIC8vIENhbiBvbmx5IGNhbGwgcmVzaXplIGlmIHdlIGhhdmUgYWxyZWFkeSBj
cmVhdGVkIG91ciBzd2FwIGJ1ZmZlciBhbmQgcmVzb3VyY2VzCi0gICAgQVNTRVJUKG1Td2FwQ2hh
aW4gJiYgbUJhY2tCdWZmZXJUZXh0dXJlICYmIG1CYWNrQnVmZmVyUlRWaWV3KTsKLQotICAgIGlm
IChtQmFja0J1ZmZlclRleHR1cmUpCi0gICAgewotICAgICAgICBtQmFja0J1ZmZlclRleHR1cmUt
PlJlbGVhc2UoKTsKLSAgICAgICAgbUJhY2tCdWZmZXJUZXh0dXJlID0gTlVMTDsKLSAgICB9Ci0K
LSAgICBpZiAobUJhY2tCdWZmZXJSVFZpZXcpCi0gICAgewotICAgICAgICBtQmFja0J1ZmZlclJU
Vmlldy0+UmVsZWFzZSgpOwotICAgICAgICBtQmFja0J1ZmZlclJUVmlldyA9IE5VTEw7Ci0gICAg
fQotCi0gICAgLy8gUmVzaXplIHN3YXAgY2hhaW4KLSAgICBEWEdJX0ZPUk1BVCBiYWNrYnVmZmVy
RFhHSUZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1CYWNrQnVm
ZmVyRm9ybWF0KTsKLSAgICBIUkVTVUxUIHJlc3VsdCA9IG1Td2FwQ2hhaW4tPlJlc2l6ZUJ1ZmZl
cnMoMiwgYmFja2J1ZmZlcldpZHRoLCBiYWNrYnVmZmVySGVpZ2h0LCBiYWNrYnVmZmVyRFhHSUZv
cm1hdCwgMCk7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIo
IkVycm9yIHJlc2l6aW5nIHN3YXAgY2hhaW4gYnVmZmVyczogMHglMDhYIiwgcmVzdWx0KTsKLSAg
ICAgICAgcmVsZWFzZSgpOwotCi0gICAgICAgIGlmIChkM2QxMTo6aXNEZXZpY2VMb3N0RXJyb3Io
cmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEVHTF9DT05URVhUX0xPU1Q7
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
RUdMX0JBRF9BTExPQzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlc3VsdCA9IG1Td2FwQ2hh
aW4tPkdldEJ1ZmZlcigwLCBfX3V1aWRvZihJRDNEMTFUZXh0dXJlMkQpLCAoTFBWT0lEKikmbUJh
Y2tCdWZmZXJUZXh0dXJlKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIGlm
IChTVUNDRUVERUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUo
bUJhY2tCdWZmZXJUZXh0dXJlLCAiQmFjayBidWZmZXIgdGV4dHVyZSIpOwotICAgIH0KLQotICAg
IHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0VmlldyhtQmFja0J1ZmZlclRleHR1
cmUsIE5VTEwsICZtQmFja0J1ZmZlclJUVmlldyk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1
bHQpKTsKLSAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBkM2QxMTo6
U2V0RGVidWdOYW1lKG1CYWNrQnVmZmVyUlRWaWV3LCAiQmFjayBidWZmZXIgcmVuZGVyIHRhcmdl
dCIpOwotICAgIH0KLQotICAgIHJldHVybiByZXNldE9mZnNjcmVlblRleHR1cmUoYmFja2J1ZmZl
cldpZHRoLCBiYWNrYnVmZmVySGVpZ2h0KTsKLX0KLQotRUdMaW50IFN3YXBDaGFpbjExOjpyZXNl
dChpbnQgYmFja2J1ZmZlcldpZHRoLCBpbnQgYmFja2J1ZmZlckhlaWdodCwgRUdMaW50IHN3YXBJ
bnRlcnZhbCkKLXsKLSAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2
aWNlKCk7Ci0KLSAgICBpZiAoZGV2aWNlID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4g
RUdMX0JBRF9BQ0NFU1M7Ci0gICAgfQotCi0gICAgLy8gUmVsZWFzZSBzcGVjaWZpYyByZXNvdXJj
ZXMgdG8gZnJlZSB1cCBtZW1vcnkgZm9yIHRoZSBuZXcgcmVuZGVyIHRhcmdldCwgd2hpbGUgdGhl
Ci0gICAgLy8gb2xkIHJlbmRlciB0YXJnZXQgc3RpbGwgZXhpc3RzIGZvciB0aGUgcHVycG9zZSBv
ZiBwcmVzZXJ2aW5nIGl0cyBjb250ZW50cy4KLSAgICBpZiAobVN3YXBDaGFpbikKLSAgICB7Ci0g
ICAgICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsKLSAgICAgICAgbVN3YXBDaGFpbiA9IE5VTEw7
Ci0gICAgfQotCi0gICAgaWYgKG1CYWNrQnVmZmVyVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1C
YWNrQnVmZmVyVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICBtQmFja0J1ZmZlclRleHR1cmUg
PSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtQmFja0J1ZmZlclJUVmlldykKLSAgICB7Ci0gICAg
ICAgIG1CYWNrQnVmZmVyUlRWaWV3LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1CYWNrQnVmZmVyUlRW
aWV3ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBtU3dhcEludGVydmFsID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgaW50Pihzd2FwSW50ZXJ2YWwpOwotICAgIGlmIChtU3dhcEludGVydmFsID4gNCkKLSAg
ICB7Ci0gICAgICAgIC8vIElEWEdJU3dhcENoYWluOjpQcmVzZW50IGRvY3VtZW50YXRpb24gc3Rh
dGVzIHRoYXQgdmFsaWQgc3luYyBpbnRlcnZhbHMgYXJlIGluIHRoZSBbMCw0XSByYW5nZQotICAg
ICAgICByZXR1cm4gRUdMX0JBRF9QQVJBTUVURVI7Ci0gICAgfQotCi0gICAgLy8gRUdMIGFsbG93
cyBjcmVhdGluZyBhIHN1cmZhY2Ugd2l0aCAweDAgZGltZW5zaW9uLCBob3dldmVyLCBEWEdJIGRv
ZXMgbm90IGxpa2UgMHgwIHN3YXBjaGFpbnMKLSAgICBpZiAoYmFja2J1ZmZlcldpZHRoIDwgMSB8
fCBiYWNrYnVmZmVySGVpZ2h0IDwgMSkKLSAgICB7Ci0gICAgICAgIHJlbGVhc2VPZmZzY3JlZW5U
ZXh0dXJlKCk7Ci0gICAgICAgIHJldHVybiBFR0xfU1VDQ0VTUzsKLSAgICB9Ci0KLSAgICBpZiAo
bVdpbmRvdykKLSAgICB7Ci0gICAgICAgIElEWEdJRmFjdG9yeSAqZmFjdG9yeSA9IG1SZW5kZXJl
ci0+Z2V0RHhnaUZhY3RvcnkoKTsKLQotICAgICAgICBEWEdJX1NXQVBfQ0hBSU5fREVTQyBzd2Fw
Q2hhaW5EZXNjID0gezB9OwotICAgICAgICBzd2FwQ2hhaW5EZXNjLkJ1ZmZlckNvdW50ID0gMjsK
LSAgICAgICAgc3dhcENoYWluRGVzYy5CdWZmZXJEZXNjLkZvcm1hdCA9IGdsX2QzZDExOjpDb252
ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0KTsKLSAgICAgICAgc3dhcENo
YWluRGVzYy5CdWZmZXJEZXNjLldpZHRoID0gYmFja2J1ZmZlcldpZHRoOwotICAgICAgICBzd2Fw
Q2hhaW5EZXNjLkJ1ZmZlckRlc2MuSGVpZ2h0ID0gYmFja2J1ZmZlckhlaWdodDsKLSAgICAgICAg
c3dhcENoYWluRGVzYy5CdWZmZXJEZXNjLlNjYWxpbmcgPSBEWEdJX01PREVfU0NBTElOR19VTlNQ
RUNJRklFRDsKLSAgICAgICAgc3dhcENoYWluRGVzYy5CdWZmZXJEZXNjLlNjYW5saW5lT3JkZXJp
bmcgPSBEWEdJX01PREVfU0NBTkxJTkVfT1JERVJfVU5TUEVDSUZJRUQ7Ci0gICAgICAgIHN3YXBD
aGFpbkRlc2MuQnVmZmVyRGVzYy5SZWZyZXNoUmF0ZS5OdW1lcmF0b3IgPSAwOwotICAgICAgICBz
d2FwQ2hhaW5EZXNjLkJ1ZmZlckRlc2MuUmVmcmVzaFJhdGUuRGVub21pbmF0b3IgPSAxOwotICAg
ICAgICBzd2FwQ2hhaW5EZXNjLkJ1ZmZlclVzYWdlID0gRFhHSV9VU0FHRV9SRU5ERVJfVEFSR0VU
X09VVFBVVDsKLSAgICAgICAgc3dhcENoYWluRGVzYy5GbGFncyA9IDA7Ci0gICAgICAgIHN3YXBD
aGFpbkRlc2MuT3V0cHV0V2luZG93ID0gbVdpbmRvdzsKLSAgICAgICAgc3dhcENoYWluRGVzYy5T
YW1wbGVEZXNjLkNvdW50ID0gMTsKLSAgICAgICAgc3dhcENoYWluRGVzYy5TYW1wbGVEZXNjLlF1
YWxpdHkgPSAwOwotICAgICAgICBzd2FwQ2hhaW5EZXNjLldpbmRvd2VkID0gVFJVRTsKLQotICAg
ICAgICBIUkVTVUxUIHJlc3VsdCA9IGZhY3RvcnktPkNyZWF0ZVN3YXBDaGFpbihkZXZpY2UsICZz
d2FwQ2hhaW5EZXNjLCAmbVN3YXBDaGFpbik7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQp
KQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYWRkaXRpb25h
bCBzd2FwIGNoYWlucyBvciBvZmZzY3JlZW4gc3VyZmFjZXM6ICUwOGxYIiwgcmVzdWx0KTsKLSAg
ICAgICAgICAgIHJlbGVhc2UoKTsKLQotICAgICAgICAgICAgaWYgKGQzZDExOjppc0RldmljZUxv
c3RFcnJvcihyZXN1bHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBF
R0xfQ09OVEVYVF9MT1NUOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIC8vIFdlIGNhbm5vdCBjcmVhdGUgYSBzd2FwIGNoYWlu
IGZvciBhbiBIV05EIHRoYXQgaXMgb3duZWQgYnkgYSBkaWZmZXJlbnQgcHJvY2VzcyBvbiBzb21l
IHZlcnNpb25zIG9mCi0gICAgICAgICAgICAgICAgLy8gd2luZG93cwotICAgICAgICAgICAgICAg
IERXT1JEIGN1cnJlbnRQcm9jZXNzSWQgPSBHZXRDdXJyZW50UHJvY2Vzc0lkKCk7Ci0gICAgICAg
ICAgICAgICAgRFdPUkQgd25kUHJvY2Vzc0lkOwotICAgICAgICAgICAgICAgIEdldFdpbmRvd1Ro
cmVhZFByb2Nlc3NJZChtV2luZG93LCAmd25kUHJvY2Vzc0lkKTsKLQotICAgICAgICAgICAgICAg
IGlmIChjdXJyZW50UHJvY2Vzc0lkICE9IHduZFByb2Nlc3NJZCkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBzd2FwIGNoYWluLCB3
aW5kb3cgb3duZWQgYnkgZGlmZmVyZW50IHByb2Nlc3MiKTsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEVHTF9CQURfTkFUSVZFX1dJTkRPVzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEVHTF9CQURfQUxMT0M7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgcmVzdWx0ID0gbVN3YXBDaGFpbi0+R2V0QnVmZmVyKDAsIF9fdXVp
ZG9mKElEM0QxMVRleHR1cmUyRCksIChMUFZPSUQqKSZtQmFja0J1ZmZlclRleHR1cmUpOwotICAg
ICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdO
YW1lKG1CYWNrQnVmZmVyVGV4dHVyZSwgIkJhY2sgYnVmZmVyIHRleHR1cmUiKTsKLQotICAgICAg
ICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobUJhY2tCdWZmZXJUZXh0
dXJlLCBOVUxMLCAmbUJhY2tCdWZmZXJSVFZpZXcpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1CYWNrQnVmZmVyUlRWaWV3
LCAiQmFjayBidWZmZXIgcmVuZGVyIHRhcmdldCIpOwotICAgIH0KLQotICAgIC8vIElmIHdlIGFy
ZSByZXNpemluZyB0aGUgc3dhcCBjaGFpbiwgd2UgZG9uJ3Qgd2lzaCB0byByZWNyZWF0ZSBhbGwg
dGhlIHN0YXRpYyByZXNvdXJjZXMKLSAgICBpZiAoIW1QYXNzVGhyb3VnaFJlc291cmNlc0luaXQp
Ci0gICAgewotICAgICAgICBtUGFzc1Rocm91Z2hSZXNvdXJjZXNJbml0ID0gdHJ1ZTsKLSAgICAg
ICAgaW5pdFBhc3NUaHJvdWdoUmVzb3VyY2VzKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc2V0
T2Zmc2NyZWVuVGV4dHVyZShiYWNrYnVmZmVyV2lkdGgsIGJhY2tidWZmZXJIZWlnaHQpOwotfQot
Ci12b2lkIFN3YXBDaGFpbjExOjppbml0UGFzc1Rocm91Z2hSZXNvdXJjZXMoKQotewotICAgIElE
M0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLQotICAgIEFTU0VS
VChkZXZpY2UgIT0gTlVMTCk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgb3VyIHJlc291cmNlcyBhcmUg
YWxsIG5vdCBhbGxvY2F0ZWQsIHdoZW4gd2UgY3JlYXRlCi0gICAgQVNTRVJUKG1RdWFkVkIgPT0g
TlVMTCAmJiBtUGFzc1Rocm91Z2hTYW1wbGVyID09IE5VTEwpOwotICAgIEFTU0VSVChtUGFzc1Ro
cm91Z2hJTCA9PSBOVUxMICYmIG1QYXNzVGhyb3VnaFZTID09IE5VTEwgJiYgbVBhc3NUaHJvdWdo
UFMgPT0gTlVMTCk7Ci0KLSAgICBEM0QxMV9CVUZGRVJfREVTQyB2YkRlc2M7Ci0gICAgdmJEZXNj
LkJ5dGVXaWR0aCA9IHNpemVvZihkM2QxMTo6UG9zaXRpb25UZXhDb29yZFZlcnRleCkgKiA0Owot
ICAgIHZiRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZTkFNSUM7Ci0gICAgdmJEZXNjLkJpbmRG
bGFncyA9IEQzRDExX0JJTkRfVkVSVEVYX0JVRkZFUjsKLSAgICB2YkRlc2MuQ1BVQWNjZXNzRmxh
Z3MgPSBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOwotICAgIHZiRGVzYy5NaXNjRmxhZ3MgPSAwOwot
ICAgIHZiRGVzYy5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKLQotICAgIEhSRVNVTFQgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVCdWZmZXIoJnZiRGVzYywgTlVMTCwgJm1RdWFkVkIpOwotICAgIEFT
U0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgZDNkMTE6OlNldERlYnVnTmFtZShtUXVhZFZC
LCAiU3dhcCBjaGFpbiBxdWFkIHZlcnRleCBidWZmZXIiKTsKLQotICAgIEQzRDExX1NBTVBMRVJf
REVTQyBzYW1wbGVyRGVzYzsKLSAgICBzYW1wbGVyRGVzYy5GaWx0ZXIgPSBEM0QxMV9GSUxURVJf
TUlOX01BR19NSVBfUE9JTlQ7Ci0gICAgc2FtcGxlckRlc2MuQWRkcmVzc1UgPSBEM0QxMV9URVhU
VVJFX0FERFJFU1NfQ0xBTVA7Ci0gICAgc2FtcGxlckRlc2MuQWRkcmVzc1YgPSBEM0QxMV9URVhU
VVJFX0FERFJFU1NfQ0xBTVA7Ci0gICAgc2FtcGxlckRlc2MuQWRkcmVzc1cgPSBEM0QxMV9URVhU
VVJFX0FERFJFU1NfQ0xBTVA7Ci0gICAgc2FtcGxlckRlc2MuTWlwTE9EQmlhcyA9IDAuMGY7Ci0g
ICAgc2FtcGxlckRlc2MuTWF4QW5pc290cm9weSA9IDA7Ci0gICAgc2FtcGxlckRlc2MuQ29tcGFy
aXNvbkZ1bmMgPSBEM0QxMV9DT01QQVJJU09OX05FVkVSOwotICAgIHNhbXBsZXJEZXNjLkJvcmRl
ckNvbG9yWzBdID0gMC4wZjsKLSAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclsxXSA9IDAuMGY7
Ci0gICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbMl0gPSAwLjBmOwotICAgIHNhbXBsZXJEZXNj
LkJvcmRlckNvbG9yWzNdID0gMC4wZjsKLSAgICBzYW1wbGVyRGVzYy5NaW5MT0QgPSAwOwotICAg
IHNhbXBsZXJEZXNjLk1heExPRCA9IEQzRDExX0ZMT0FUMzJfTUFYOwotCi0gICAgcmVzdWx0ID0g
ZGV2aWNlLT5DcmVhdGVTYW1wbGVyU3RhdGUoJnNhbXBsZXJEZXNjLCAmbVBhc3NUaHJvdWdoU2Ft
cGxlcik7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICBkM2QxMTo6U2V0RGVi
dWdOYW1lKG1QYXNzVGhyb3VnaFNhbXBsZXIsICJTd2FwIGNoYWluIHBhc3MgdGhyb3VnaCBzYW1w
bGVyIik7Ci0KLSAgICBEM0QxMV9JTlBVVF9FTEVNRU5UX0RFU0MgcXVhZExheW91dFtdID0KLSAg
ICB7Ci0gICAgICAgIHsgIlBPU0lUSU9OIiwgMCwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCAw
LCAwLCBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAgfSwKLSAgICAgICAgeyAiVEVYQ09P
UkQiLCAwLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDAsIDgsIEQzRDExX0lOUFVUX1BFUl9W
RVJURVhfREFUQSwgMCB9LAotICAgIH07Ci0KLSAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUlu
cHV0TGF5b3V0KHF1YWRMYXlvdXQsIDIsIGdfVlNfUGFzc3Rocm91Z2gsIHNpemVvZihnX1ZTX1Bh
c3N0aHJvdWdoKSwgJm1QYXNzVGhyb3VnaElMKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOwotICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobVBhc3NUaHJvdWdoSUwsICJTd2FwIGNoYWlu
IHBhc3MgdGhyb3VnaCBsYXlvdXQiKTsKLQotICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVmVy
dGV4U2hhZGVyKGdfVlNfUGFzc3Rocm91Z2gsIHNpemVvZihnX1ZTX1Bhc3N0aHJvdWdoKSwgTlVM
TCwgJm1QYXNzVGhyb3VnaFZTKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAg
IGQzZDExOjpTZXREZWJ1Z05hbWUobVBhc3NUaHJvdWdoVlMsICJTd2FwIGNoYWluIHBhc3MgdGhy
b3VnaCB2ZXJ0ZXggc2hhZGVyIik7Ci0KLSAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVBpeGVs
U2hhZGVyKGdfUFNfUGFzc3Rocm91Z2hSR0JBLCBzaXplb2YoZ19QU19QYXNzdGhyb3VnaFJHQkEp
LCBOVUxMLCAmbVBhc3NUaHJvdWdoUFMpOwotICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7
Ci0gICAgZDNkMTE6OlNldERlYnVnTmFtZShtUGFzc1Rocm91Z2hQUywgIlN3YXAgY2hhaW4gcGFz
cyB0aHJvdWdoIHBpeGVsIHNoYWRlciIpOwotfQotCi0vLyBwYXJhbWV0ZXJzIHNob3VsZCBiZSB2
YWxpZGF0ZWQvY2xhbXBlZCBieSBjYWxsZXIKLUVHTGludCBTd2FwQ2hhaW4xMTo6c3dhcFJlY3Qo
RUdMaW50IHgsIEVHTGludCB5LCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQpCi17Ci0gICAg
aWYgKCFtU3dhcENoYWluKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEVHTF9TVUNDRVNTOwotICAg
IH0KLQotICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsK
LSAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpkZXZpY2VDb250ZXh0ID0gbVJlbmRlcmVyLT5nZXRE
ZXZpY2VDb250ZXh0KCk7Ci0KLSAgICAvLyBTZXQgdmVydGljZXMKLSAgICBEM0QxMV9NQVBQRURf
U1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2VD
b250ZXh0LT5NYXAobVF1YWRWQiwgMCwgRDNEMTFfTUFQX1dSSVRFX0RJU0NBUkQsIDAsICZtYXBw
ZWRSZXNvdXJjZSk7Ci0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEVHTF9CQURfQUNDRVNTOwotICAgIH0KLQotICAgIGQzZDExOjpQb3NpdGlvblRleENvb3Jk
VmVydGV4ICp2ZXJ0aWNlcyA9IHN0YXRpY19jYXN0PGQzZDExOjpQb3NpdGlvblRleENvb3JkVmVy
dGV4Kj4obWFwcGVkUmVzb3VyY2UucERhdGEpOwotCi0gICAgLy8gQ3JlYXRlIGEgcXVhZCBpbiBo
b21vZ2VuZW91cyBjb29yZGluYXRlcwotICAgIGZsb2F0IHgxID0gKHggLyBmbG9hdChtV2lkdGgp
KSAqIDIuMGYgLSAxLjBmOwotICAgIGZsb2F0IHkxID0gKHkgLyBmbG9hdChtSGVpZ2h0KSkgKiAy
LjBmIC0gMS4wZjsKLSAgICBmbG9hdCB4MiA9ICgoeCArIHdpZHRoKSAvIGZsb2F0KG1XaWR0aCkp
ICogMi4wZiAtIDEuMGY7Ci0gICAgZmxvYXQgeTIgPSAoKHkgKyBoZWlnaHQpIC8gZmxvYXQobUhl
aWdodCkpICogMi4wZiAtIDEuMGY7Ci0KLSAgICBmbG9hdCB1MSA9IHggLyBmbG9hdChtV2lkdGgp
OwotICAgIGZsb2F0IHYxID0geSAvIGZsb2F0KG1IZWlnaHQpOwotICAgIGZsb2F0IHUyID0gKHgg
KyB3aWR0aCkgLyBmbG9hdChtV2lkdGgpOwotICAgIGZsb2F0IHYyID0gKHkgKyBoZWlnaHQpIC8g
ZmxvYXQobUhlaWdodCk7Ci0KLSAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgm
dmVydGljZXNbMF0sIHgxLCB5MSwgdTEsIHYxKTsKLSAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhD
b29yZFZlcnRleCgmdmVydGljZXNbMV0sIHgxLCB5MiwgdTEsIHYyKTsKLSAgICBkM2QxMTo6U2V0
UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNbMl0sIHgyLCB5MSwgdTIsIHYxKTsKLSAg
ICBkM2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNbM10sIHgyLCB5Miwg
dTIsIHYyKTsKLQotICAgIGRldmljZUNvbnRleHQtPlVubWFwKG1RdWFkVkIsIDApOwotCi0gICAg
c3RhdGljIFVJTlQgc3RyaWRlID0gc2l6ZW9mKGQzZDExOjpQb3NpdGlvblRleENvb3JkVmVydGV4
KTsKLSAgICBzdGF0aWMgVUlOVCBzdGFydElkeCA9IDA7Ci0gICAgZGV2aWNlQ29udGV4dC0+SUFT
ZXRWZXJ0ZXhCdWZmZXJzKDAsIDEsICZtUXVhZFZCLCAmc3RyaWRlLCAmc3RhcnRJZHgpOwotCi0g
ICAgLy8gQXBwbHkgc3RhdGUKLSAgICBkZXZpY2VDb250ZXh0LT5PTVNldERlcHRoU3RlbmNpbFN0
YXRlKE5VTEwsIDB4RkZGRkZGRkYpOwotCi0gICAgc3RhdGljIGNvbnN0IGZsb2F0IGJsZW5kRmFj
dG9yWzRdID0geyAxLjBmLCAxLjBmLCAxLjBmLCAxLjBmIH07Ci0gICAgZGV2aWNlQ29udGV4dC0+
T01TZXRCbGVuZFN0YXRlKE5VTEwsIGJsZW5kRmFjdG9yLCAweEZGRkZGRkYpOwotCi0gICAgZGV2
aWNlQ29udGV4dC0+UlNTZXRTdGF0ZShOVUxMKTsKLQotICAgIC8vIEFwcGx5IHNoYWRlcnMKLSAg
ICBkZXZpY2VDb250ZXh0LT5JQVNldElucHV0TGF5b3V0KG1QYXNzVGhyb3VnaElMKTsKLSAgICBk
ZXZpY2VDb250ZXh0LT5JQVNldFByaW1pdGl2ZVRvcG9sb2d5KEQzRF9QUklNSVRJVkVfVE9QT0xP
R1lfVFJJQU5HTEVTVFJJUCk7Ci0gICAgZGV2aWNlQ29udGV4dC0+VlNTZXRTaGFkZXIobVBhc3NU
aHJvdWdoVlMsIE5VTEwsIDApOwotICAgIGRldmljZUNvbnRleHQtPlBTU2V0U2hhZGVyKG1QYXNz
VGhyb3VnaFBTLCBOVUxMLCAwKTsKLSAgICBkZXZpY2VDb250ZXh0LT5HU1NldFNoYWRlcihOVUxM
LCBOVUxMLCAwKTsKLQotICAgIC8vIEFwcGx5IHJlbmRlciB0YXJnZXRzCi0gICAgbVJlbmRlcmVy
LT5zZXRPbmVUaW1lUmVuZGVyVGFyZ2V0KG1CYWNrQnVmZmVyUlRWaWV3KTsKLQotICAgIC8vIFNl
dCB0aGUgdmlld3BvcnQKLSAgICBEM0QxMV9WSUVXUE9SVCB2aWV3cG9ydDsKLSAgICB2aWV3cG9y
dC5Ub3BMZWZ0WCA9IDA7Ci0gICAgdmlld3BvcnQuVG9wTGVmdFkgPSAwOwotICAgIHZpZXdwb3J0
LldpZHRoID0gbVdpZHRoOwotICAgIHZpZXdwb3J0LkhlaWdodCA9IG1IZWlnaHQ7Ci0gICAgdmll
d3BvcnQuTWluRGVwdGggPSAwLjBmOwotICAgIHZpZXdwb3J0Lk1heERlcHRoID0gMS4wZjsKLSAg
ICBkZXZpY2VDb250ZXh0LT5SU1NldFZpZXdwb3J0cygxLCAmdmlld3BvcnQpOwotCi0gICAgLy8g
QXBwbHkgdGV4dHVyZXMKLSAgICBkZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlclJlc291cmNlcygw
LCAxLCAmbU9mZnNjcmVlblNSVmlldyk7Ci0gICAgZGV2aWNlQ29udGV4dC0+UFNTZXRTYW1wbGVy
cygwLCAxLCAmbVBhc3NUaHJvdWdoU2FtcGxlcik7Ci0KLSAgICAvLyBEcmF3Ci0gICAgZGV2aWNl
Q29udGV4dC0+RHJhdyg0LCAwKTsKLQotI2lmIEFOR0xFX0ZPUkNFX1ZTWU5DX09GRgotICAgIHJl
c3VsdCA9IG1Td2FwQ2hhaW4tPlByZXNlbnQoMCwgMCk7Ci0jZWxzZQotICAgIHJlc3VsdCA9IG1T
d2FwQ2hhaW4tPlByZXNlbnQobVN3YXBJbnRlcnZhbCwgMCk7Ci0jZW5kaWYKLQotICAgIGlmIChy
ZXN1bHQgPT0gRFhHSV9FUlJPUl9ERVZJQ0VfUkVNT1ZFRCkKLSAgICB7Ci0gICAgICAgIEhSRVNV
TFQgcmVtb3ZlZFJlYXNvbiA9IGRldmljZS0+R2V0RGV2aWNlUmVtb3ZlZFJlYXNvbigpOwotICAg
ICAgICBFUlIoIlByZXNlbnQgZmFpbGVkOiB0aGUgRDNEMTEgZGV2aWNlIHdhcyByZW1vdmVkOiAw
eCUwOFgiLCByZW1vdmVkUmVhc29uKTsKLSAgICAgICAgcmV0dXJuIEVHTF9DT05URVhUX0xPU1Q7
Ci0gICAgfQotICAgIGVsc2UgaWYgKHJlc3VsdCA9PSBEWEdJX0VSUk9SX0RFVklDRV9SRVNFVCkK
LSAgICB7Ci0gICAgICAgIEVSUigiUHJlc2VudCBmYWlsZWQ6IHRoZSBEM0QxMSBkZXZpY2Ugd2Fz
IHJlc2V0IGZyb20gYSBiYWQgY29tbWFuZC4iKTsKLSAgICAgICAgcmV0dXJuIEVHTF9DT05URVhU
X0xPU1Q7Ci0gICAgfQotICAgIGVsc2UgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAg
ICAgRVJSKCJQcmVzZW50IGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgMHglMDhYIiwgcmVzdWx0KTsK
LSAgICB9Ci0KLSAgICAvLyBVbmJpbmQKLSAgICBzdGF0aWMgSUQzRDExU2hhZGVyUmVzb3VyY2VW
aWV3ICpjb25zdCBudWxsU1JWID0gTlVMTDsKLSAgICBkZXZpY2VDb250ZXh0LT5QU1NldFNoYWRl
clJlc291cmNlcygwLCAxLCAmbnVsbFNSVik7Ci0KLSAgICBtUmVuZGVyZXItPnVuYXBwbHlSZW5k
ZXJUYXJnZXRzKCk7Ci0gICAgbVJlbmRlcmVyLT5tYXJrQWxsU3RhdGVEaXJ0eSgpOwotCi0gICAg
cmV0dXJuIEVHTF9TVUNDRVNTOwotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHRleHR1
cmUuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHRleHR1cmUKLUlEM0Qx
MVRleHR1cmUyRCAqU3dhcENoYWluMTE6OmdldE9mZnNjcmVlblRleHR1cmUoKQotewotICAgIGlm
IChtT2Zmc2NyZWVuVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5B
ZGRSZWYoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbU9mZnNjcmVlblRleHR1cmU7Ci19Ci0KLS8v
IEluY3JlbWVudHMgcmVmY291bnQgb24gdmlldy4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0
aGUgcmV0dXJuZWQgdmlldwotSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqU3dhcENoYWluMTE6Omdl
dFJlbmRlclRhcmdldCgpCi17Ci0gICAgaWYgKG1PZmZzY3JlZW5SVFZpZXcpCi0gICAgewotICAg
ICAgICBtT2Zmc2NyZWVuUlRWaWV3LT5BZGRSZWYoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbU9m
ZnNjcmVlblJUVmlldzsKLX0KLQotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiB2aWV3LgotLy8g
Y2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCB2aWV3Ci1JRDNEMTFTaGFkZXJSZXNv
dXJjZVZpZXcgKlN3YXBDaGFpbjExOjpnZXRSZW5kZXJUYXJnZXRTaGFkZXJSZXNvdXJjZSgpCi17
Ci0gICAgaWYgKG1PZmZzY3JlZW5TUlZpZXcpCi0gICAgewotICAgICAgICBtT2Zmc2NyZWVuU1JW
aWV3LT5BZGRSZWYoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbU9mZnNjcmVlblNSVmlldzsKLX0K
LQotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiB2aWV3LgotLy8gY2FsbGVyIG11c3QgUmVsZWFz
ZSgpIHRoZSByZXR1cm5lZCB2aWV3Ci1JRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpTd2FwQ2hhaW4x
MTo6Z2V0RGVwdGhTdGVuY2lsKCkKLXsKLSAgICBpZiAobURlcHRoU3RlbmNpbERTVmlldykKLSAg
ICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxEU1ZpZXctPkFkZFJlZigpOwotICAgIH0KLQotICAg
IHJldHVybiBtRGVwdGhTdGVuY2lsRFNWaWV3OwotfQotCi1JRDNEMTFUZXh0dXJlMkQgKlN3YXBD
aGFpbjExOjpnZXREZXB0aFN0ZW5jaWxUZXh0dXJlKCkKLXsKLSAgICBpZiAobURlcHRoU3RlbmNp
bFRleHR1cmUpCi0gICAgewotICAgICAgICBtRGVwdGhTdGVuY2lsVGV4dHVyZS0+QWRkUmVmKCk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWxUZXh0dXJlOwotfQotCi1Td2FwQ2hh
aW4xMSAqU3dhcENoYWluMTE6Om1ha2VTd2FwQ2hhaW4xMShTd2FwQ2hhaW4gKnN3YXBDaGFpbikK
LXsKLSAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShyeDo6U3dhcENoYWluMTEqLCBzd2FwQ2hh
aW4pKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8cng6OlN3YXBDaGFpbjExKj4oc3dhcENoYWlu
KTsKLX0KLQotdm9pZCBTd2FwQ2hhaW4xMTo6cmVjcmVhdGUoKQotewotICAgIC8vIHBvc3NpYmx5
IHNob3VsZCB1c2UgdGhpcyBtZXRob2QgaW5zdGVhZCBvZiByZXNldAotfQotCi19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1N3YXBD
aGFpbjExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L1N3YXBDaGFpbjExLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwMDEwNDYwMmUz
NWIwYmNiYTExMDM5YTE2ZWJmYzYxMTE2MWVmNjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9Td2FwQ2hhaW4xMS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KLS8vCi0KLS8vIFN3YXBDaGFpbjExLmg6IERlZmluZXMgYSBiYWNrLWVuZCBzcGVj
aWZpYyBjbGFzcyBmb3IgdGhlIEQzRDExIHN3YXAgY2hhaW4uCi0KLSNpZm5kZWYgTElCR0xFU1Yy
X1JFTkRFUkVSX1NXQVBDSEFJTjExX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9TV0FQ
Q0hBSU4xMV9IXwotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvU3dhcENoYWluLmgiCi0KLW5hbWVzcGFjZSByeAotewotY2xhc3Mg
UmVuZGVyZXIxMTsKLQotY2xhc3MgU3dhcENoYWluMTEgOiBwdWJsaWMgU3dhcENoYWluCi17Ci0g
IHB1YmxpYzoKLSAgICBTd2FwQ2hhaW4xMShSZW5kZXJlcjExICpyZW5kZXJlciwgSFdORCB3aW5k
b3csIEhBTkRMRSBzaGFyZUhhbmRsZSwKLSAgICAgICAgICAgICAgICBHTGVudW0gYmFja0J1ZmZl
ckZvcm1hdCwgR0xlbnVtIGRlcHRoQnVmZmVyRm9ybWF0KTsKLSAgICB2aXJ0dWFsIH5Td2FwQ2hh
aW4xMSgpOwotCi0gICAgRUdMaW50IHJlc2l6ZShFR0xpbnQgYmFja2J1ZmZlcldpZHRoLCBFR0xp
bnQgYmFja2J1ZmZlckhlaWdodCk7Ci0gICAgdmlydHVhbCBFR0xpbnQgcmVzZXQoRUdMaW50IGJh
Y2tidWZmZXJXaWR0aCwgRUdMaW50IGJhY2tidWZmZXJIZWlnaHQsIEVHTGludCBzd2FwSW50ZXJ2
YWwpOwotICAgIHZpcnR1YWwgRUdMaW50IHN3YXBSZWN0KEVHTGludCB4LCBFR0xpbnQgeSwgRUdM
aW50IHdpZHRoLCBFR0xpbnQgaGVpZ2h0KTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjcmVhdGUoKTsK
LQotICAgIHZpcnR1YWwgSUQzRDExVGV4dHVyZTJEICpnZXRPZmZzY3JlZW5UZXh0dXJlKCk7Ci0g
ICAgdmlydHVhbCBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpnZXRSZW5kZXJUYXJnZXQoKTsKLSAg
ICB2aXJ0dWFsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0UmVuZGVyVGFyZ2V0U2hhZGVy
UmVzb3VyY2UoKTsKLQotICAgIHZpcnR1YWwgSUQzRDExVGV4dHVyZTJEICpnZXREZXB0aFN0ZW5j
aWxUZXh0dXJlKCk7Ci0gICAgdmlydHVhbCBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpnZXREZXB0
aFN0ZW5jaWwoKTsKLQotICAgIEVHTGludCBnZXRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1XaWR0
aDsgfQotICAgIEVHTGludCBnZXRIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtSGVpZ2h0OyB9Ci0K
LSAgICBzdGF0aWMgU3dhcENoYWluMTEgKm1ha2VTd2FwQ2hhaW4xMShTd2FwQ2hhaW4gKnN3YXBD
aGFpbik7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU3dhcENo
YWluMTEpOwotCi0gICAgdm9pZCByZWxlYXNlKCk7Ci0gICAgdm9pZCBpbml0UGFzc1Rocm91Z2hS
ZXNvdXJjZXMoKTsKLSAgICB2b2lkIHJlbGVhc2VPZmZzY3JlZW5UZXh0dXJlKCk7Ci0gICAgRUdM
aW50IHJlc2V0T2Zmc2NyZWVuVGV4dHVyZShpbnQgYmFja2J1ZmZlcldpZHRoLCBpbnQgYmFja2J1
ZmZlckhlaWdodCk7Ci0KLSAgICBSZW5kZXJlcjExICptUmVuZGVyZXI7Ci0gICAgRUdMaW50IG1I
ZWlnaHQ7Ci0gICAgRUdMaW50IG1XaWR0aDsKLSAgICBib29sIG1BcHBDcmVhdGVkU2hhcmVIYW5k
bGU7Ci0gICAgdW5zaWduZWQgaW50IG1Td2FwSW50ZXJ2YWw7Ci0gICAgYm9vbCBtUGFzc1Rocm91
Z2hSZXNvdXJjZXNJbml0OwotCi0gICAgSURYR0lTd2FwQ2hhaW4gKm1Td2FwQ2hhaW47Ci0KLSAg
ICBJRDNEMTFUZXh0dXJlMkQgKm1CYWNrQnVmZmVyVGV4dHVyZTsKLSAgICBJRDNEMTFSZW5kZXJU
YXJnZXRWaWV3ICptQmFja0J1ZmZlclJUVmlldzsKLQotICAgIElEM0QxMVRleHR1cmUyRCAqbU9m
ZnNjcmVlblRleHR1cmU7Ci0gICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqbU9mZnNjcmVlblJU
VmlldzsKLSAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKm1PZmZzY3JlZW5TUlZpZXc7Ci0K
LSAgICBJRDNEMTFUZXh0dXJlMkQgKm1EZXB0aFN0ZW5jaWxUZXh0dXJlOwotICAgIElEM0QxMURl
cHRoU3RlbmNpbFZpZXcgKm1EZXB0aFN0ZW5jaWxEU1ZpZXc7Ci0KLSAgICBJRDNEMTFCdWZmZXIg
Km1RdWFkVkI7Ci0gICAgSUQzRDExU2FtcGxlclN0YXRlICptUGFzc1Rocm91Z2hTYW1wbGVyOwot
ICAgIElEM0QxMUlucHV0TGF5b3V0ICptUGFzc1Rocm91Z2hJTDsKLSAgICBJRDNEMTFWZXJ0ZXhT
aGFkZXIgKm1QYXNzVGhyb3VnaFZTOwotICAgIElEM0QxMVBpeGVsU2hhZGVyICptUGFzc1Rocm91
Z2hQUzsKLX07Ci0KLX0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfU1dBUENIQUlOMTFf
SF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvU3dhcENoYWluOS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL1N3YXBDaGFpbjkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA3NTdjZTFjYjAzNWI2MDNlZjYxYzQ5MTYxYzM5ZDA0MDEwZmM0MDEzLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvU3dhcENoYWluOS5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw0MzggKzAsMCBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwotCi0vLyBTd2FwQ2hhaW45LmNwcDogSW1wbGVtZW50cyBhIGJhY2stZW5kIHNwZWNpZmljIGNs
YXNzIGZvciB0aGUgRDNEOSBzd2FwIGNoYWluLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL1N3YXBDaGFpbjkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXI5
X3V0aWxzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyOS5oIgotCi1u
YW1lc3BhY2UgcngKLXsKLQotU3dhcENoYWluOTo6U3dhcENoYWluOShSZW5kZXJlcjkgKnJlbmRl
cmVyLCBIV05EIHdpbmRvdywgSEFORExFIHNoYXJlSGFuZGxlLAotICAgICAgICAgICAgICAgICAg
ICAgICBHTGVudW0gYmFja0J1ZmZlckZvcm1hdCwgR0xlbnVtIGRlcHRoQnVmZmVyRm9ybWF0KQot
ICAgIDogbVJlbmRlcmVyKHJlbmRlcmVyKSwgU3dhcENoYWluKHdpbmRvdywgc2hhcmVIYW5kbGUs
IGJhY2tCdWZmZXJGb3JtYXQsIGRlcHRoQnVmZmVyRm9ybWF0KQotewotICAgIG1Td2FwQ2hhaW4g
PSBOVUxMOwotICAgIG1CYWNrQnVmZmVyID0gTlVMTDsKLSAgICBtRGVwdGhTdGVuY2lsID0gTlVM
TDsKLSAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICBtT2Zmc2NyZWVuVGV4dHVyZSA9IE5V
TEw7Ci0gICAgbVdpZHRoID0gLTE7Ci0gICAgbUhlaWdodCA9IC0xOwotICAgIG1Td2FwSW50ZXJ2
YWwgPSAtMTsKLX0KLQotU3dhcENoYWluOTo6flN3YXBDaGFpbjkoKQotewotICAgIHJlbGVhc2Uo
KTsKLX0KLQotdm9pZCBTd2FwQ2hhaW45OjpyZWxlYXNlKCkKLXsKLSAgICBpZiAobVN3YXBDaGFp
bikKLSAgICB7Ci0gICAgICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsKLSAgICAgICAgbVN3YXBD
aGFpbiA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1CYWNrQnVmZmVyKQotICAgIHsKLSAgICAg
ICAgbUJhY2tCdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJhY2tCdWZmZXIgPSBOVUxMOwot
ICAgIH0KLQotICAgIGlmIChtRGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbURlcHRoU3Rl
bmNpbC0+UmVsZWFzZSgpOwotICAgICAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICB9Ci0K
LSAgICBpZiAobVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXQtPlJl
bGVhc2UoKTsKLSAgICAgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYg
KG1PZmZzY3JlZW5UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUtPlJl
bGVhc2UoKTsKLSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUgPSBOVUxMOwotICAgIH0KLQotICAg
IGlmIChtV2luZG93KQotICAgICAgICBtU2hhcmVIYW5kbGUgPSBOVUxMOwotfQotCi1zdGF0aWMg
RFdPUkQgY29udmVydEludGVydmFsKEVHTGludCBpbnRlcnZhbCkKLXsKLSNpZiBBTkdMRV9GT1JD
RV9WU1lOQ19PRkYKLSAgICByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9JTU1FRElBVEU7Ci0j
ZWxzZQotICAgIHN3aXRjaChpbnRlcnZhbCkKLSAgICB7Ci0gICAgICBjYXNlIDA6IHJldHVybiBE
M0RQUkVTRU5UX0lOVEVSVkFMX0lNTUVESUFURTsKLSAgICAgIGNhc2UgMTogcmV0dXJuIEQzRFBS
RVNFTlRfSU5URVJWQUxfT05FOwotICAgICAgY2FzZSAyOiByZXR1cm4gRDNEUFJFU0VOVF9JTlRF
UlZBTF9UV087Ci0gICAgICBjYXNlIDM6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX1RIUkVF
OwotICAgICAgY2FzZSA0OiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9GT1VSOwotICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gRDNEUFJFU0VOVF9J
TlRFUlZBTF9ERUZBVUxUOwotI2VuZGlmCi19Ci0KLUVHTGludCBTd2FwQ2hhaW45OjpyZXNpemUo
aW50IGJhY2tidWZmZXJXaWR0aCwgaW50IGJhY2tidWZmZXJIZWlnaHQpCi17Ci0gICAgLy8gRDNE
OSBkb2VzIG5vdCBzdXBwb3J0IHJlc2l6aW5nIHN3YXAgY2hhaW5zIHdpdGhvdXQgcmVjcmVhdGlu
ZyB0aGVtCi0gICAgcmV0dXJuIHJlc2V0KGJhY2tidWZmZXJXaWR0aCwgYmFja2J1ZmZlckhlaWdo
dCwgbVN3YXBJbnRlcnZhbCk7Ci19Ci0KLUVHTGludCBTd2FwQ2hhaW45OjpyZXNldChpbnQgYmFj
a2J1ZmZlcldpZHRoLCBpbnQgYmFja2J1ZmZlckhlaWdodCwgRUdMaW50IHN3YXBJbnRlcnZhbCkK
LXsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgp
OwotCi0gICAgaWYgKGRldmljZSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEVHTF9C
QURfQUNDRVNTOwotICAgIH0KLQotICAgIC8vIEV2aWN0IGFsbCBub24tcmVuZGVyIHRhcmdldCB0
ZXh0dXJlcyB0byBzeXN0ZW0gbWVtb3J5IGFuZCByZWxlYXNlIGFsbCByZXNvdXJjZXMKLSAgICAv
LyBiZWZvcmUgcmVhbGxvY2F0aW5nIHRoZW0gdG8gZnJlZSB1cCBhcyBtdWNoIHZpZGVvIG1lbW9y
eSBhcyBwb3NzaWJsZS4KLSAgICBkZXZpY2UtPkV2aWN0TWFuYWdlZFJlc291cmNlcygpOwotCi0g
ICAgSFJFU1VMVCByZXN1bHQ7Ci0KLSAgICAvLyBSZWxlYXNlIHNwZWNpZmljIHJlc291cmNlcyB0
byBmcmVlIHVwIG1lbW9yeSBmb3IgdGhlIG5ldyByZW5kZXIgdGFyZ2V0LCB3aGlsZSB0aGUKLSAg
ICAvLyBvbGQgcmVuZGVyIHRhcmdldCBzdGlsbCBleGlzdHMgZm9yIHRoZSBwdXJwb3NlIG9mIHBy
ZXNlcnZpbmcgaXRzIGNvbnRlbnRzLgotICAgIGlmIChtU3dhcENoYWluKQotICAgIHsKLSAgICAg
ICAgbVN3YXBDaGFpbi0+UmVsZWFzZSgpOwotICAgICAgICBtU3dhcENoYWluID0gTlVMTDsKLSAg
ICB9Ci0KLSAgICBpZiAobUJhY2tCdWZmZXIpCi0gICAgewotICAgICAgICBtQmFja0J1ZmZlci0+
UmVsZWFzZSgpOwotICAgICAgICBtQmFja0J1ZmZlciA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYg
KG1PZmZzY3JlZW5UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUtPlJl
bGVhc2UoKTsKLSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUgPSBOVUxMOwotICAgIH0KLQotICAg
IGlmIChtRGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbURlcHRoU3RlbmNpbC0+UmVsZWFz
ZSgpOwotICAgICAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICB9Ci0KLSAgICBIQU5ETEUg
KnBTaGFyZUhhbmRsZSA9IE5VTEw7Ci0gICAgaWYgKCFtV2luZG93ICYmIG1SZW5kZXJlci0+Z2V0
U2hhcmVIYW5kbGVTdXBwb3J0KCkpCi0gICAgewotICAgICAgICBwU2hhcmVIYW5kbGUgPSAmbVNo
YXJlSGFuZGxlOwotICAgIH0KLQotICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZShi
YWNrYnVmZmVyV2lkdGgsIGJhY2tidWZmZXJIZWlnaHQsIDEsIEQzRFVTQUdFX1JFTkRFUlRBUkdF
VCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6Q29udmVydFJl
bmRlcmJ1ZmZlckZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCksIEQzRFBPT0xfREVGQVVMVCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1PZmZzY3JlZW5UZXh0dXJlLCBwU2hh
cmVIYW5kbGUpOwotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEVSUigi
Q291bGQgbm90IGNyZWF0ZSBvZmZzY3JlZW4gdGV4dHVyZTogJTA4bFgiLCByZXN1bHQpOwotICAg
ICAgICByZWxlYXNlKCk7Ci0KLSAgICAgICAgaWYgKGQzZDk6OmlzRGV2aWNlTG9zdEVycm9yKHJl
c3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFR0xfQ09OVEVYVF9MT1NUOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEVH
TF9CQURfQUxMT0M7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAq
b2xkUmVuZGVyVGFyZ2V0ID0gbVJlbmRlclRhcmdldDsKLQotICAgIHJlc3VsdCA9IG1PZmZzY3Jl
ZW5UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoMCwgJm1SZW5kZXJUYXJnZXQpOwotICAgIEFTU0VS
VChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICBpZiAob2xkUmVuZGVyVGFyZ2V0KQotICAgIHsK
LSAgICAgICAgUkVDVCByZWN0ID0KLSAgICAgICAgewotICAgICAgICAgICAgMCwgMCwKLSAgICAg
ICAgICAgIG1XaWR0aCwgbUhlaWdodAotICAgICAgICB9OwotCi0gICAgICAgIGlmIChyZWN0LnJp
Z2h0ID4gc3RhdGljX2Nhc3Q8TE9ORz4oYmFja2J1ZmZlcldpZHRoKSkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmVjdC5yaWdodCA9IGJhY2tidWZmZXJXaWR0aDsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChyZWN0LmJvdHRvbSA+IHN0YXRpY19jYXN0PExPTkc+KGJhY2tidWZmZXJIZWlnaHQp
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZWN0LmJvdHRvbSA9IGJhY2tidWZmZXJIZWlnaHQ7
Ci0gICAgICAgIH0KLQotICAgICAgICBtUmVuZGVyZXItPmVuZFNjZW5lKCk7Ci0KLSAgICAgICAg
cmVzdWx0ID0gZGV2aWNlLT5TdHJldGNoUmVjdChvbGRSZW5kZXJUYXJnZXQsICZyZWN0LCBtUmVu
ZGVyVGFyZ2V0LCAmcmVjdCwgRDNEVEVYRl9OT05FKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURF
RChyZXN1bHQpKTsKLQotICAgICAgICBvbGRSZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICB9
Ci0KLSAgICBpZiAobVdpbmRvdykKLSAgICB7Ci0gICAgICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVS
UyBwcmVzZW50UGFyYW1ldGVycyA9IHswfTsKLSAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQXV0
b0RlcHRoU3RlbmNpbEZvcm1hdCA9IGdsX2QzZDk6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQo
bURlcHRoQnVmZmVyRm9ybWF0KTsKLSAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZl
ckNvdW50ID0gMTsKLSAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1hdCA9
IGdsX2QzZDk6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQpOwot
ICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5FbmFibGVBdXRvRGVwdGhTdGVuY2lsID0gRkFMU0U7
Ci0gICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkZsYWdzID0gMDsKLSAgICAgICAgcHJlc2VudFBh
cmFtZXRlcnMuaERldmljZVdpbmRvdyA9IG1XaW5kb3c7Ci0gICAgICAgIHByZXNlbnRQYXJhbWV0
ZXJzLk11bHRpU2FtcGxlUXVhbGl0eSA9IDA7ICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFVu
aW1wbGVtZW50ZWQKLSAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVUeXBlID0g
RDNETVVMVElTQU1QTEVfTk9ORTsgICAvLyBGSVhNRTogVW5pbXBsZW1lbnRlZAotICAgICAgICBw
cmVzZW50UGFyYW1ldGVycy5QcmVzZW50YXRpb25JbnRlcnZhbCA9IGNvbnZlcnRJbnRlcnZhbChz
d2FwSW50ZXJ2YWwpOwotICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5Td2FwRWZmZWN0ID0gRDNE
U1dBUEVGRkVDVF9ESVNDQVJEOwotICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5XaW5kb3dlZCA9
IFRSVUU7Ci0gICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCA9IGJhY2ti
dWZmZXJXaWR0aDsKLSAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCA9
IGJhY2tidWZmZXJIZWlnaHQ7Ci0KLSAgICAgICAgLy8gaHR0cDovL2NyYnVnLmNvbS8xNDAyMzkK
LSAgICAgICAgLy8gaHR0cDovL2NyYnVnLmNvbS8xNDM0MzQKLSAgICAgICAgLy8KLSAgICAgICAg
Ly8gU29tZSBBTUQvSW50ZWwgc3dpdGNoYWJsZSBzeXN0ZW1zIC8gZHJpdmVycyBhcHBlYXIgdG8g
cm91bmQgc3dhcCBjaGFpbiBzdXJmYWNlcyB0byBhIG11bHRpcGxlIG9mIDY0IHBpeGVscyBpbiB3
aWR0aAotICAgICAgICAvLyB3aGVuIHVzaW5nIHRoZSBpbnRlZ3JhdGVkIEludGVsLiBUaGlzIHJv
dW5kcyB0aGUgd2lkdGggdXAgcmF0aGVyIHRoYW4gZG93bi4KLSAgICAgICAgLy8KLSAgICAgICAg
Ly8gU29tZSBub24tc3dpdGNoYWJsZSBBTUQgR1BVcyAvIGRyaXZlcnMgZG8gbm90IHJlc3BlY3Qg
dGhlIHNvdXJjZSByZWN0YW5nbGUgdG8gUHJlc2VudC4gVGhlcmVmb3JlLCB3aGVuIHRoZSB2ZW5k
b3IgSUQKLSAgICAgICAgLy8gaXMgbm90IEludGVsLCB0aGUgYmFjayBidWZmZXIgd2lkdGggbXVz
dCBiZSBleGFjdGx5IHRoZSBzYW1lIHdpZHRoIGFzIHRoZSB3aW5kb3cgb3IgaG9yaXpvbnRhbCBz
Y2FsaW5nIHdpbGwgb2NjdXIuCi0gICAgICAgIGlmIChtUmVuZGVyZXItPmdldEFkYXB0ZXJWZW5k
b3IoKSA9PSBWRU5ET1JfSURfSU5URUwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHByZXNlbnRQ
YXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCA9IChwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVy
V2lkdGggKyA2MykgLyA2NCAqIDY0OwotICAgICAgICB9Ci0KLSAgICAgICAgcmVzdWx0ID0gZGV2
aWNlLT5DcmVhdGVBZGRpdGlvbmFsU3dhcENoYWluKCZwcmVzZW50UGFyYW1ldGVycywgJm1Td2Fw
Q2hhaW4pOwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAg
ICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQg
PT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0lOVkFMSURDQUxMIHx8IHJlc3Vs
dCA9PSBEM0RFUlJfREVWSUNFTE9TVCk7Ci0KLSAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNy
ZWF0ZSBhZGRpdGlvbmFsIHN3YXAgY2hhaW5zIG9yIG9mZnNjcmVlbiBzdXJmYWNlczogJTA4bFgi
LCByZXN1bHQpOwotICAgICAgICAgICAgcmVsZWFzZSgpOwotCi0gICAgICAgICAgICBpZiAoZDNk
OTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gRUdMX0NPTlRFWFRfTE9TVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gRUdMX0JBRF9BTExP
QzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJlc3VsdCA9IG1Td2FwQ2hh
aW4tPkdldEJhY2tCdWZmZXIoMCwgRDNEQkFDS0JVRkZFUl9UWVBFX01PTk8sICZtQmFja0J1ZmZl
cik7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIEludmFsaWRh
dGVSZWN0KG1XaW5kb3csIE5VTEwsIEZBTFNFKTsKLSAgICB9Ci0KLSAgICBpZiAobURlcHRoQnVm
ZmVyRm9ybWF0ICE9IEdMX05PTkUpCi0gICAgewotICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZURlcHRoU3RlbmNpbFN1cmZhY2UoYmFja2J1ZmZlcldpZHRoLCBiYWNrYnVmZmVySGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xf
ZDNkOTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtRGVwdGhCdWZmZXJGb3JtYXQpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNETVVMVElT
QU1QTEVfTk9ORSwgMCwgRkFMU0UsICZtRGVwdGhTdGVuY2lsLCBOVUxMKTsKLQotICAgICAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQg
PT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwg
cmVzdWx0ID09IEQzREVSUl9JTlZBTElEQ0FMTCk7Ci0KLSAgICAgICAgICAgIEVSUigiQ291bGQg
bm90IGNyZWF0ZSBkZXB0aHN0ZW5jaWwgc3VyZmFjZSBmb3IgbmV3IHN3YXAgY2hhaW46IDB4JTA4
WCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZWxlYXNlKCk7Ci0KLSAgICAgICAgICAgIGlmIChk
M2Q5Ojppc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBFR0xfQ09OVEVYVF9MT1NUOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBFR0xfQkFEX0FM
TE9DOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgbVdpZHRoID0gYmFj
a2J1ZmZlcldpZHRoOwotICAgIG1IZWlnaHQgPSBiYWNrYnVmZmVySGVpZ2h0OwotICAgIG1Td2Fw
SW50ZXJ2YWwgPSBzd2FwSW50ZXJ2YWw7Ci0KLSAgICByZXR1cm4gRUdMX1NVQ0NFU1M7Ci19Ci0K
LS8vIHBhcmFtZXRlcnMgc2hvdWxkIGJlIHZhbGlkYXRlZC9jbGFtcGVkIGJ5IGNhbGxlcgotRUdM
aW50IFN3YXBDaGFpbjk6OnN3YXBSZWN0KEVHTGludCB4LCBFR0xpbnQgeSwgRUdMaW50IHdpZHRo
LCBFR0xpbnQgaGVpZ2h0KQotewotICAgIGlmICghbVN3YXBDaGFpbikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBFR0xfU1VDQ0VTUzsKLSAgICB9Ci0KLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZp
Y2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0gICAgLy8gRGlzYWJsZSBhbGwgcGlwZWxp
bmUgb3BlcmF0aW9ucwotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwg
RDNEWkJfRkFMU0UpOwotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfRklMTE1PREUs
IEQzREZJTExfU09MSUQpOwotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFU
RVNURU5BQkxFLCBGQUxTRSk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBI
QUJMRU5ERU5BQkxFLCBGQUxTRSk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19D
VUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X1NURU5DSUxFTkFCTEUsIEZBTFNFKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X0NMSVBQTEFORUVOQUJMRSwgMCk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19D
T0xPUldSSVRFRU5BQkxFLCBEM0RDT0xPUldSSVRFRU5BQkxFX0FMUEhBIHwgRDNEQ09MT1JXUklU
RUVOQUJMRV9CTFVFIHwgRDNEQ09MT1JXUklURUVOQUJMRV9HUkVFTiB8IEQzRENPTE9SV1JJVEVF
TkFCTEVfUkVEKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NSR0JXUklURUVO
QUJMRSwgRkFMU0UpOwotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NPUlRF
U1RFTkFCTEUsIEZBTFNFKTsKLSAgICBkZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5VTEwpOwotICAg
IGRldmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOwotCi0gICAgZGV2aWNlLT5TZXRSZW5kZXJU
YXJnZXQoMCwgbUJhY2tCdWZmZXIpOwotICAgIGRldmljZS0+U2V0RGVwdGhTdGVuY2lsU3VyZmFj
ZShOVUxMKTsKLQotICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCBtT2Zmc2NyZWVuVGV4dHVyZSk7
Ci0gICAgZGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JPUCwgRDNE
VE9QX1NFTEVDVEFSRzEpOwotICAgIGRldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNE
VFNTX0NPTE9SQVJHMSwgRDNEVEFfVEVYVFVSRSk7Ci0gICAgZGV2aWNlLT5TZXRUZXh0dXJlU3Rh
Z2VTdGF0ZSgxLCBEM0RUU1NfQ09MT1JPUCwgRDNEVE9QX0RJU0FCTEUpOwotICAgIGRldmljZS0+
U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUFHRklMVEVSLCBEM0RURVhGX1BPSU5UKTsKLSAg
ICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01JTkZJTFRFUiwgRDNEVEVYRl9Q
T0lOVCk7Ci0gICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9BRERSRVNTVSwg
RDNEVEFERFJFU1NfQ0xBTVApOwotICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNB
TVBfQUREUkVTU1YsIEQzRFRBRERSRVNTX0NMQU1QKTsKLSAgICBkZXZpY2UtPlNldEZWRihEM0RG
VkZfWFlaUkhXIHwgRDNERlZGX1RFWDEpOwotCi0gICAgRDNEVklFV1BPUlQ5IHZpZXdwb3J0ID0g
ezAsIDAsIG1XaWR0aCwgbUhlaWdodCwgMC4wZiwgMS4wZn07Ci0gICAgZGV2aWNlLT5TZXRWaWV3
cG9ydCgmdmlld3BvcnQpOwotCi0gICAgZmxvYXQgeDEgPSB4IC0gMC41ZjsKLSAgICBmbG9hdCB5
MSA9IChtSGVpZ2h0IC0geSAtIGhlaWdodCkgLSAwLjVmOwotICAgIGZsb2F0IHgyID0gKHggKyB3
aWR0aCkgLSAwLjVmOwotICAgIGZsb2F0IHkyID0gKG1IZWlnaHQgLSB5KSAtIDAuNWY7Ci0KLSAg
ICBmbG9hdCB1MSA9IHggLyBmbG9hdChtV2lkdGgpOwotICAgIGZsb2F0IHYxID0geSAvIGZsb2F0
KG1IZWlnaHQpOwotICAgIGZsb2F0IHUyID0gKHggKyB3aWR0aCkgLyBmbG9hdChtV2lkdGgpOwot
ICAgIGZsb2F0IHYyID0gKHkgKyBoZWlnaHQpIC8gZmxvYXQobUhlaWdodCk7Ci0KLSAgICBmbG9h
dCBxdWFkWzRdWzZdID0ge3t4MSwgeTEsIDAuMGYsIDEuMGYsIHUxLCB2Mn0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICB7eDIsIHkxLCAwLjBmLCAxLjBmLCB1MiwgdjJ9LAotICAgICAgICAgICAg
ICAgICAgICAgICAge3gyLCB5MiwgMC4wZiwgMS4wZiwgdTIsIHYxfSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHt4MSwgeTIsIDAuMGYsIDEuMGYsIHUxLCB2MX19OyAgIC8vIHgsIHksIHosIHJo
dywgdSwgdgotCi0gICAgbVJlbmRlcmVyLT5zdGFydFNjZW5lKCk7Ci0gICAgZGV2aWNlLT5EcmF3
UHJpbWl0aXZlVVAoRDNEUFRfVFJJQU5HTEVGQU4sIDIsIHF1YWQsIDYgKiBzaXplb2YoZmxvYXQp
KTsKLSAgICBtUmVuZGVyZXItPmVuZFNjZW5lKCk7Ci0KLSAgICBkZXZpY2UtPlNldFRleHR1cmUo
MCwgTlVMTCk7Ci0KLSAgICBSRUNUIHJlY3QgPQotICAgIHsKLSAgICAgICAgeCwgbUhlaWdodCAt
IHkgLSBoZWlnaHQsCi0gICAgICAgIHggKyB3aWR0aCwgbUhlaWdodCAtIHkKLSAgICB9OwotCi0g
ICAgSFJFU1VMVCByZXN1bHQgPSBtU3dhcENoYWluLT5QcmVzZW50KCZyZWN0LCAmcmVjdCwgTlVM
TCwgTlVMTCwgMCk7Ci0KLSAgICBtUmVuZGVyZXItPm1hcmtBbGxTdGF0ZURpcnR5KCk7Ci0KLSAg
ICBpZiAoZDNkOTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBFR0xfQ09OVEVYVF9MT1NUOwotICAgIH0KLQotICAgIGlmIChyZXN1bHQgPT0gRDNERVJS
X09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcmVzdWx0ID09
IEQzREVSUl9EUklWRVJJTlRFUk5BTEVSUk9SKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEVHTF9C
QURfQUxMT0M7Ci0gICAgfQotCi0gICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAg
IHJldHVybiBFR0xfU1VDQ0VTUzsKLX0KLQotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJm
YWNlLgotLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCi1JRGly
ZWN0M0RTdXJmYWNlOSAqU3dhcENoYWluOTo6Z2V0UmVuZGVyVGFyZ2V0KCkKLXsKLSAgICBpZiAo
bVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXQtPkFkZFJlZigpOwot
ICAgIH0KLQotICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OwotfQotCi0vLyBJbmNyZW1lbnRzIHJl
ZmNvdW50IG9uIHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVk
IHN1cmZhY2UKLUlEaXJlY3QzRFN1cmZhY2U5ICpTd2FwQ2hhaW45OjpnZXREZXB0aFN0ZW5jaWwo
KQotewotICAgIGlmIChtRGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbURlcHRoU3RlbmNp
bC0+QWRkUmVmKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7Ci19Ci0KLS8v
IEluY3JlbWVudHMgcmVmY291bnQgb24gdGV4dHVyZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2Uo
KSB0aGUgcmV0dXJuZWQgdGV4dHVyZQotSURpcmVjdDNEVGV4dHVyZTkgKlN3YXBDaGFpbjk6Omdl
dE9mZnNjcmVlblRleHR1cmUoKQotewotICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkKLSAgICB7
Ci0gICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5BZGRSZWYoKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gbU9mZnNjcmVlblRleHR1cmU7Ci19Ci0KLVN3YXBDaGFpbjkgKlN3YXBDaGFpbjk6Om1ha2VT
d2FwQ2hhaW45KFN3YXBDaGFpbiAqc3dhcENoYWluKQotewotICAgIEFTU0VSVChIQVNfRFlOQU1J
Q19UWVBFKHJ4OjpTd2FwQ2hhaW45Kiwgc3dhcENoYWluKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PHJ4OjpTd2FwQ2hhaW45Kj4oc3dhcENoYWluKTsKLX0KLQotdm9pZCBTd2FwQ2hhaW45Ojpy
ZWNyZWF0ZSgpCi17Ci0gICAgaWYgKCFtU3dhcENoYWluKQotICAgIHsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0
RGV2aWNlKCk7Ci0gICAgaWYgKGRldmljZSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50UGFyYW1ldGVyczsK
LSAgICBIUkVTVUxUIHJlc3VsdCA9IG1Td2FwQ2hhaW4tPkdldFByZXNlbnRQYXJhbWV0ZXJzKCZw
cmVzZW50UGFyYW1ldGVycyk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAg
IElEaXJlY3QzRFN3YXBDaGFpbjkqIG5ld1N3YXBDaGFpbiA9IE5VTEw7Ci0gICAgcmVzdWx0ID0g
ZGV2aWNlLT5DcmVhdGVBZGRpdGlvbmFsU3dhcENoYWluKCZwcmVzZW50UGFyYW1ldGVycywgJm5l
d1N3YXBDaGFpbik7Ci0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsKLSAgICBtU3dhcENoYWlu
ID0gbmV3U3dhcENoYWluOwotCi0gICAgbUJhY2tCdWZmZXItPlJlbGVhc2UoKTsKLSAgICByZXN1
bHQgPSBtU3dhcENoYWluLT5HZXRCYWNrQnVmZmVyKDAsIEQzREJBQ0tCVUZGRVJfVFlQRV9NT05P
LCAmbUJhY2tCdWZmZXIpOwotICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci19Ci0KLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvU3dhcENoYWluOS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9Td2FwQ2hhaW45LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2YTYy
YmQ4NmY2YTY1YjdkZDhiN2JkNDIyMDc2NDE0ZjQ5MGQ0NWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9Td2FwQ2hhaW45LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCww
IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotLy8KLQotLy8gU3dhcENoYWluOS5oOiBEZWZpbmVzIGEgYmFjay1lbmQg
c3BlY2lmaWMgY2xhc3MgZm9yIHRoZSBEM0Q5IHN3YXAgY2hhaW4uCi0KLSNpZm5kZWYgTElCR0xF
U1YyX1JFTkRFUkVSX1NXQVBDSEFJTjlfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1NX
QVBDSEFJTjlfSF8KLQotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL1N3YXBDaGFpbi5oIgotCi1uYW1lc3BhY2UgcngKLXsKLWNsYXNz
IFJlbmRlcmVyOTsKLQotY2xhc3MgU3dhcENoYWluOSA6IHB1YmxpYyBTd2FwQ2hhaW4KLXsKLSAg
cHVibGljOgotICAgIFN3YXBDaGFpbjkoUmVuZGVyZXI5ICpyZW5kZXJlciwgSFdORCB3aW5kb3cs
IEhBTkRMRSBzaGFyZUhhbmRsZSwKLSAgICAgICAgICAgICAgIEdMZW51bSBiYWNrQnVmZmVyRm9y
bWF0LCBHTGVudW0gZGVwdGhCdWZmZXJGb3JtYXQpOwotICAgIHZpcnR1YWwgflN3YXBDaGFpbjko
KTsKLQotICAgIEVHTGludCByZXNpemUoRUdMaW50IGJhY2tidWZmZXJXaWR0aCwgRUdMaW50IGJh
Y2tidWZmZXJIZWlnaHQpOwotICAgIHZpcnR1YWwgRUdMaW50IHJlc2V0KEVHTGludCBiYWNrYnVm
ZmVyV2lkdGgsIEVHTGludCBiYWNrYnVmZmVySGVpZ2h0LCBFR0xpbnQgc3dhcEludGVydmFsKTsK
LSAgICB2aXJ0dWFsIEVHTGludCBzd2FwUmVjdChFR0xpbnQgeCwgRUdMaW50IHksIEVHTGludCB3
aWR0aCwgRUdMaW50IGhlaWdodCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlY3JlYXRlKCk7Ci0KLSAg
ICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoKTsKLSAgICB2aXJ0
dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5jaWwoKTsKLSAgICB2aXJ0dWFsIElE
aXJlY3QzRFRleHR1cmU5ICpnZXRPZmZzY3JlZW5UZXh0dXJlKCk7Ci0KLSAgICBzdGF0aWMgU3dh
cENoYWluOSAqbWFrZVN3YXBDaGFpbjkoU3dhcENoYWluICpzd2FwQ2hhaW4pOwotCi0gIHByaXZh
dGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFN3YXBDaGFpbjkpOwotCi0gICAgdm9p
ZCByZWxlYXNlKCk7Ci0KLSAgICBSZW5kZXJlcjkgKm1SZW5kZXJlcjsKLSAgICBFR0xpbnQgbUhl
aWdodDsKLSAgICBFR0xpbnQgbVdpZHRoOwotICAgIEVHTGludCBtU3dhcEludGVydmFsOwotCi0g
ICAgSURpcmVjdDNEU3dhcENoYWluOSAqbVN3YXBDaGFpbjsKLSAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqbUJhY2tCdWZmZXI7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKm1SZW5kZXJUYXJnZXQ7Ci0g
ICAgSURpcmVjdDNEU3VyZmFjZTkgKm1EZXB0aFN0ZW5jaWw7Ci0gICAgSURpcmVjdDNEVGV4dHVy
ZTkqIG1PZmZzY3JlZW5UZXh0dXJlOwotfTsKLQotfQotI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5E
RVJFUl9TV0FQQ0hBSU45X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlMTEuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZTExLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDE1MTVlZDc2OTYyNDk1OThlNTMzNDM0OTYw
YTMyMjFhYjRmMjM1Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1RleHR1
cmVTdG9yYWdlMTEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjY3ICswLDAgQEAKLSNpbmNsdWRl
ICJwcmVjb21waWxlZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRleHR1cmVTdG9yYWdlMTEuY3Bw
OiBJbXBsZW1lbnRzIHRoZSBhYnN0cmFjdCByeDo6VGV4dHVyZVN0b3JhZ2UxMSBjbGFzcyBhbmQg
aXRzIGNvbmNyZXRlIGRlcml2ZWQKLS8vIGNsYXNzZXMgVGV4dHVyZVN0b3JhZ2UxMV8yRCBhbmQg
VGV4dHVyZVN0b3JhZ2UxMV9DdWJlLCB3aGljaCBhY3QgYXMgdGhlIGludGVyZmFjZSB0byB0aGUg
RDNEMTEgdGV4dHVyZS4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3Rv
cmFnZTExLmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIxMS5oIgot
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQxMS5oIgotI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9Td2FwQ2hhaW4xMS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9yZW5kZXJlcjExX3V0aWxzLmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0
aWVzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0K
LVRleHR1cmVTdG9yYWdlMTE6OlRleHR1cmVTdG9yYWdlMTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBV
SU5UIGJpbmRGbGFncykKLSAgICA6IG1CaW5kRmxhZ3MoYmluZEZsYWdzKSwKLSAgICAgIG1Mb2RP
ZmZzZXQoMCksCi0gICAgICBtTWlwTGV2ZWxzKDApLAotICAgICAgbVRleHR1cmUoTlVMTCksCi0g
ICAgICBtVGV4dHVyZUZvcm1hdChEWEdJX0ZPUk1BVF9VTktOT1dOKSwKLSAgICAgIG1TaGFkZXJS
ZXNvdXJjZUZvcm1hdChEWEdJX0ZPUk1BVF9VTktOT1dOKSwKLSAgICAgIG1SZW5kZXJUYXJnZXRG
b3JtYXQoRFhHSV9GT1JNQVRfVU5LTk9XTiksCi0gICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0KERY
R0lfRk9STUFUX1VOS05PV04pLAotICAgICAgbVNSVihOVUxMKSwKLSAgICAgIG1UZXh0dXJlV2lk
dGgoMCksCi0gICAgICBtVGV4dHVyZUhlaWdodCgwKQotewotICAgIG1SZW5kZXJlciA9IFJlbmRl
cmVyMTE6Om1ha2VSZW5kZXJlcjExKHJlbmRlcmVyKTsKLX0KLQotVGV4dHVyZVN0b3JhZ2UxMTo6
flRleHR1cmVTdG9yYWdlMTEoKQotewotfQotCi1UZXh0dXJlU3RvcmFnZTExICpUZXh0dXJlU3Rv
cmFnZTExOjptYWtlVGV4dHVyZVN0b3JhZ2UxMShUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSkKLXsK
LSAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShUZXh0dXJlU3RvcmFnZTExKiwgc3RvcmFnZSkp
OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlU3RvcmFnZTExKj4oc3RvcmFnZSk7Ci19
Ci0KLURXT1JEIFRleHR1cmVTdG9yYWdlMTE6OkdldFRleHR1cmVCaW5kRmxhZ3MoRFhHSV9GT1JN
QVQgZm9ybWF0LCBHTGVudW0gZ2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUpCi17Ci0gICAg
VUlOVCBiaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRTsKLSAgICAKLSAgICBp
ZiAoZDNkMTE6OklzRGVwdGhTdGVuY2lsRm9ybWF0KGZvcm1hdCkpCi0gICAgewotICAgICAgICBi
aW5kRmxhZ3MgfD0gRDNEMTFfQklORF9ERVBUSF9TVEVOQ0lMOwotICAgIH0KLSAgICBlbHNlIGlm
KGZvcmNlUmVuZGVyYWJsZSB8fCAoVGV4dHVyZVN0b3JhZ2UxMTo6SXNUZXh0dXJlRm9ybWF0UmVu
ZGVyYWJsZShmb3JtYXQpICYmIChnbHVzYWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRf
QU5HTEUpKSkKLSAgICB7Ci0gICAgICAgIGJpbmRGbGFncyB8PSBEM0QxMV9CSU5EX1JFTkRFUl9U
QVJHRVQ7Ci0gICAgfQotICAgIHJldHVybiBiaW5kRmxhZ3M7Ci19Ci0KLWJvb2wgVGV4dHVyZVN0
b3JhZ2UxMTo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEWEdJX0ZPUk1BVCBmb3JtYXQpCi17
Ci0gICAgc3dpdGNoKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhC
OEE4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9BOF9VTk9STToKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
MTZHMTZCMTZBMTZfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjhHOF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X0ZMT0FUOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfRkxPQVQ6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JD
Ml9VTk9STTogCi0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STToKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FUOiAvLyBub3QgcmVuZGVyYWJsZSBvbiBhbGwgZGV2
aWNlcwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJF
QUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1VSU5UIFRleHR1
cmVTdG9yYWdlMTE6OmdldEJpbmRGbGFncygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1CaW5kRmxh
Z3M7Ci19Ci0KLUlEM0QxMVRleHR1cmUyRCAqVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0QmFzZVRleHR1
cmUoKSBjb25zdAotewotICAgIHJldHVybiBtVGV4dHVyZTsKLX0KLQotaW50IFRleHR1cmVTdG9y
YWdlMTE6OmdldExvZE9mZnNldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1Mb2RPZmZzZXQ7Ci19
Ci0KLWJvb2wgVGV4dHVyZVN0b3JhZ2UxMTo6aXNSZW5kZXJUYXJnZXQoKSBjb25zdAotewotICAg
IHJldHVybiAobUJpbmRGbGFncyAmIChEM0QxMV9CSU5EX1JFTkRFUl9UQVJHRVQgfCBEM0QxMV9C
SU5EX0RFUFRIX1NURU5DSUwpKSAhPSAwOwotfQotICAgIAotYm9vbCBUZXh0dXJlU3RvcmFnZTEx
Ojppc01hbmFnZWQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotaW50IFRleHR1
cmVTdG9yYWdlMTE6OmxldmVsQ291bnQoKQotewotICAgIGludCBsZXZlbHMgPSAwOwotICAgIGlm
IChnZXRCYXNlVGV4dHVyZSgpKQotICAgIHsKLSAgICAgICAgbGV2ZWxzID0gbU1pcExldmVscyAt
IGdldExvZE9mZnNldCgpOwotICAgIH0KLSAgICByZXR1cm4gbGV2ZWxzOwotfQotCi1VSU5UIFRl
eHR1cmVTdG9yYWdlMTE6OmdldFN1YnJlc291cmNlSW5kZXgoaW50IGxldmVsLCBpbnQgZmFjZUlu
ZGV4KQotewotICAgIFVJTlQgaW5kZXggPSAwOwotICAgIGlmIChnZXRCYXNlVGV4dHVyZSgpKQot
ICAgIHsKLSAgICAgICAgaW5kZXggPSBEM0QxMUNhbGNTdWJyZXNvdXJjZShsZXZlbCwgZmFjZUlu
ZGV4LCBtTWlwTGV2ZWxzKTsKLSAgICB9Ci0gICAgcmV0dXJuIGluZGV4OwotfQotCi1ib29sIFRl
eHR1cmVTdG9yYWdlMTE6OnVwZGF0ZVN1YnJlc291cmNlTGV2ZWwoSUQzRDExVGV4dHVyZTJEICpz
cmNUZXh0dXJlLCB1bnNpZ25lZCBpbnQgc291cmNlU3VicmVzb3VyY2UsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxldmVsLCBpbnQgZmFjZSwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBp
ZiAoc3JjVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIC8vIFJvdW5kIHVwIHRoZSB3aWR0aCBhbmQg
aGVpZ2h0IHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIGRpbWVuc2lvbiBhbGlnbm1lbnQKLSAg
ICAgICAgdW5zaWduZWQgaW50IGRpbWVuc2lvbkFsaWdubWVudCA9IGQzZDExOjpHZXRUZXh0dXJl
Rm9ybWF0RGltZW5zaW9uQWxpZ25tZW50KG1UZXh0dXJlRm9ybWF0KTsKLSAgICAgICAgd2lkdGgg
PSB3aWR0aCArIGRpbWVuc2lvbkFsaWdubWVudCAtIDEgLSAod2lkdGggLSAxKSAlIGRpbWVuc2lv
bkFsaWdubWVudDsKLSAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0ICsgZGltZW5zaW9uQWxpZ25tZW50
IC0gMSAtIChoZWlnaHQgLSAxKSAlIGRpbWVuc2lvbkFsaWdubWVudDsKLQotICAgICAgICBEM0Qx
MV9CT1ggc3JjQm94OwotICAgICAgICBzcmNCb3gubGVmdCA9IHhvZmZzZXQ7Ci0gICAgICAgIHNy
Y0JveC50b3AgPSB5b2Zmc2V0OwotICAgICAgICBzcmNCb3gucmlnaHQgPSB4b2Zmc2V0ICsgd2lk
dGg7Ci0gICAgICAgIHNyY0JveC5ib3R0b20gPSB5b2Zmc2V0ICsgaGVpZ2h0OwotICAgICAgICBz
cmNCb3guZnJvbnQgPSAwOwotICAgICAgICBzcmNCb3guYmFjayA9IDE7Ci0KLSAgICAgICAgSUQz
RDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgp
OwotICAgICAgICAKLSAgICAgICAgQVNTRVJUKGdldEJhc2VUZXh0dXJlKCkpOwotICAgICAgICBj
b250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24oZ2V0QmFzZVRleHR1cmUoKSwgZ2V0U3VicmVz
b3VyY2VJbmRleChsZXZlbCArIG1Mb2RPZmZzZXQsIGZhY2UpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeG9mZnNldCwgeW9mZnNldCwgMCwgc3JjVGV4dHVyZSwgc291
cmNlU3VicmVzb3VyY2UsICZzcmNCb3gpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2VuZXJhdGVN
aXBtYXBMYXllcihSZW5kZXJUYXJnZXQxMSAqc291cmNlLCBSZW5kZXJUYXJnZXQxMSAqZGVzdCkK
LXsKLSAgICBpZiAoc291cmNlICYmIGRlc3QpCi0gICAgewotICAgICAgICBJRDNEMTFTaGFkZXJS
ZXNvdXJjZVZpZXcgKnNvdXJjZVNSViA9IHNvdXJjZS0+Z2V0U2hhZGVyUmVzb3VyY2VWaWV3KCk7
Ci0gICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmRlc3RSVFYgPSBkZXN0LT5nZXRSZW5k
ZXJUYXJnZXRWaWV3KCk7Ci0KLSAgICAgICAgaWYgKHNvdXJjZVNSViAmJiBkZXN0UlRWKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBnbDo6UmVjdGFuZ2xlIHNvdXJjZUFyZWE7Ci0gICAgICAgICAg
ICBzb3VyY2VBcmVhLnggPSAwOwotICAgICAgICAgICAgc291cmNlQXJlYS55ID0gMDsKLSAgICAg
ICAgICAgIHNvdXJjZUFyZWEud2lkdGggPSBzb3VyY2UtPmdldFdpZHRoKCk7Ci0gICAgICAgICAg
ICBzb3VyY2VBcmVhLmhlaWdodCA9IHNvdXJjZS0+Z2V0SGVpZ2h0KCk7Ci0KLSAgICAgICAgICAg
IGdsOjpSZWN0YW5nbGUgZGVzdEFyZWE7Ci0gICAgICAgICAgICBkZXN0QXJlYS54ID0gMDsKLSAg
ICAgICAgICAgIGRlc3RBcmVhLnkgPSAwOwotICAgICAgICAgICAgZGVzdEFyZWEud2lkdGggPSBk
ZXN0LT5nZXRXaWR0aCgpOwotICAgICAgICAgICAgZGVzdEFyZWEuaGVpZ2h0ID0gZGVzdC0+Z2V0
SGVpZ2h0KCk7Ci0KLSAgICAgICAgICAgIG1SZW5kZXJlci0+Y29weVRleHR1cmUoc291cmNlU1JW
LCBzb3VyY2VBcmVhLCBzb3VyY2UtPmdldFdpZHRoKCksIHNvdXJjZS0+Z2V0SGVpZ2h0KCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSVFYsIGRlc3RBcmVhLCBkZXN0
LT5nZXRXaWR0aCgpLCBkZXN0LT5nZXRIZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xfUkdCQSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVRleHR1cmVTdG9y
YWdlMTFfMkQ6OlRleHR1cmVTdG9yYWdlMTFfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBTd2FwQ2hh
aW4xMSAqc3dhcGNoYWluKQotICAgIDogVGV4dHVyZVN0b3JhZ2UxMShyZW5kZXJlciwgRDNEMTFf
QklORF9SRU5ERVJfVEFSR0VUIHwgRDNEMTFfQklORF9TSEFERVJfUkVTT1VSQ0UpCi17Ci0gICAg
bVRleHR1cmUgPSBzd2FwY2hhaW4tPmdldE9mZnNjcmVlblRleHR1cmUoKTsKLSAgICBtU1JWID0g
c3dhcGNoYWluLT5nZXRSZW5kZXJUYXJnZXRTaGFkZXJSZXNvdXJjZSgpOwotCi0gICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVW
RUxTOyBpKyspCi0gICAgewotICAgICAgICBtUmVuZGVyVGFyZ2V0W2ldID0gTlVMTDsKLSAgICB9
Ci0KLSAgICBEM0QxMV9URVhUVVJFMkRfREVTQyB0ZXhEZXNjOwotICAgIG1UZXh0dXJlLT5HZXRE
ZXNjKCZ0ZXhEZXNjKTsKLSAgICBtTWlwTGV2ZWxzID0gdGV4RGVzYy5NaXBMZXZlbHM7Ci0gICAg
bVRleHR1cmVGb3JtYXQgPSB0ZXhEZXNjLkZvcm1hdDsKLSAgICBtVGV4dHVyZVdpZHRoID0gdGV4
RGVzYy5XaWR0aDsKLSAgICBtVGV4dHVyZUhlaWdodCA9IHRleERlc2MuSGVpZ2h0OwotCi0gICAg
RDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOwotICAgIG1TUlYtPkdldERl
c2MoJnNydkRlc2MpOwotICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IHNydkRlc2MuRm9ybWF0
OwotCi0gICAgSUQzRDExUmVuZGVyVGFyZ2V0Vmlldyogb2Zmc2NyZWVuUlRWID0gc3dhcGNoYWlu
LT5nZXRSZW5kZXJUYXJnZXQoKTsKLSAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBy
dHZEZXNjOwotICAgIG9mZnNjcmVlblJUVi0+R2V0RGVzYygmcnR2RGVzYyk7Ci0gICAgbVJlbmRl
clRhcmdldEZvcm1hdCA9IHJ0dkRlc2MuRm9ybWF0OwotICAgIG9mZnNjcmVlblJUVi0+UmVsZWFz
ZSgpOwotCi0gICAgbURlcHRoU3RlbmNpbEZvcm1hdCA9IERYR0lfRk9STUFUX1VOS05PV047Ci19
Ci0KLVRleHR1cmVTdG9yYWdlMTFfMkQ6OlRleHR1cmVTdG9yYWdlMTFfMkQoUmVuZGVyZXIgKnJl
bmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwg
Ym9vbCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotICAg
IDogVGV4dHVyZVN0b3JhZ2UxMShyZW5kZXJlciwgR2V0VGV4dHVyZUJpbmRGbGFncyhnbF9kM2Qx
MTo6Q29udmVydFRleHR1cmVGb3JtYXQoaW50ZXJuYWxmb3JtYXQpLCB1c2FnZSwgZm9yY2VSZW5k
ZXJhYmxlKSkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpJTVBMRU1F
TlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJU
YXJnZXRbaV0gPSBOVUxMOwotICAgIH0KLQotICAgIERYR0lfRk9STUFUIGNvbnZlcnRlZEZvcm1h
dCA9IGdsX2QzZDExOjpDb252ZXJ0VGV4dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAg
aWYgKGQzZDExOjpJc0RlcHRoU3RlbmNpbEZvcm1hdChjb252ZXJ0ZWRGb3JtYXQpKQotICAgIHsK
LSAgICAgICAgbVRleHR1cmVGb3JtYXQgPSBkM2QxMTo6R2V0RGVwdGhUZXh0dXJlRm9ybWF0KGNv
bnZlcnRlZEZvcm1hdCk7Ci0gICAgICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IGQzZDExOjpH
ZXREZXB0aFNoYWRlclJlc291cmNlRm9ybWF0KGNvbnZlcnRlZEZvcm1hdCk7Ci0gICAgICAgIG1E
ZXB0aFN0ZW5jaWxGb3JtYXQgPSBjb252ZXJ0ZWRGb3JtYXQ7Ci0gICAgICAgIG1SZW5kZXJUYXJn
ZXRGb3JtYXQgPSBEWEdJX0ZPUk1BVF9VTktOT1dOOwotICAgIH0KLSAgICBlbHNlCi0gICAgewot
ICAgICAgICBtVGV4dHVyZUZvcm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKLSAgICAgICAgbVNoYWRl
clJlc291cmNlRm9ybWF0ID0gY29udmVydGVkRm9ybWF0OwotICAgICAgICBtRGVwdGhTdGVuY2ls
Rm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5LTk9XTjsKLSAgICAgICAgbVJlbmRlclRhcmdldEZvcm1h
dCA9IGNvbnZlcnRlZEZvcm1hdDsKLSAgICB9Ci0KLSAgICAvLyBpZiB0aGUgd2lkdGggb3IgaGVp
Z2h0IGlzIG5vdCBwb3NpdGl2ZSB0aGlzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGluY29tcGxl
dGUgdGV4dHVyZQotICAgIC8vIHdlIGhhbmRsZSB0aGF0IGhlcmUgYnkgc2tpcHBpbmcgdGhlIGQz
ZCB0ZXh0dXJlIGNyZWF0aW9uCi0gICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKQotICAg
IHsKLSAgICAgICAgLy8gYWRqdXN0IHNpemUgaWYgbmVlZGVkIGZvciBjb21wcmVzc2VkIHRleHR1
cmVzCi0gICAgICAgIGdsOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBnbDo6SXNDb21wcmVzc2VkKGlu
dGVybmFsZm9ybWF0KSwgJndpZHRoLCAmaGVpZ2h0LCAmbUxvZE9mZnNldCk7Ci0KLSAgICAgICAg
SUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0gICAgICAg
IEQzRDExX1RFWFRVUkUyRF9ERVNDIGRlc2M7Ci0gICAgICAgIGRlc2MuV2lkdGggPSB3aWR0aDsg
ICAgICAvLyBDb21wcmVzc2VkIHRleHR1cmUgc2l6ZSBjb25zdHJhaW50cz8KLSAgICAgICAgZGVz
Yy5IZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIGRlc2MuTWlwTGV2ZWxzID0gKGxldmVscyA+IDAp
ID8gbGV2ZWxzICsgbUxvZE9mZnNldCA6IDA7Ci0gICAgICAgIGRlc2MuQXJyYXlTaXplID0gMTsK
LSAgICAgICAgZGVzYy5Gb3JtYXQgPSBtVGV4dHVyZUZvcm1hdDsKLSAgICAgICAgZGVzYy5TYW1w
bGVEZXNjLkNvdW50ID0gMTsKLSAgICAgICAgZGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOwot
ICAgICAgICBkZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKLSAgICAgICAgZGVzYy5C
aW5kRmxhZ3MgPSBnZXRCaW5kRmxhZ3MoKTsKLSAgICAgICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9
IDA7Ci0gICAgICAgIGRlc2MuTWlzY0ZsYWdzID0gMDsKLQotICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXNjLCBOVUxMLCAmbVRleHR1cmUpOwotCi0g
ICAgICAgIC8vIHRoaXMgY2FuIGhhcHBlbiBmcm9tIHdpbmRvd3MgVERSCi0gICAgICAgIGlmIChk
M2QxMTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAg
bVJlbmRlcmVyLT5ub3RpZnlEZXZpY2VMb3N0KCk7Ci0gICAgICAgICAgICBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoRkFJTEVEKHJlc3Vs
dCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRV9PVVRPRk1FTU9S
WSk7Ci0gICAgICAgICAgICBFUlIoIkNyZWF0aW5nIGltYWdlIGZhaWxlZC4iKTsKLSAgICAgICAg
ICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotICAgICAgICBlbHNl
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1UZXh0dXJlLT5HZXREZXNjKCZkZXNjKTsKLSAgICAg
ICAgICAgIG1NaXBMZXZlbHMgPSBkZXNjLk1pcExldmVsczsKLSAgICAgICAgICAgIG1UZXh0dXJl
V2lkdGggPSBkZXNjLldpZHRoOwotICAgICAgICAgICAgbVRleHR1cmVIZWlnaHQgPSBkZXNjLkhl
aWdodDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotVGV4dHVyZVN0b3JhZ2UxMV8yRDo6flRleHR1
cmVTdG9yYWdlMTFfMkQoKQotewotICAgIGlmIChtVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1U
ZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAg
ICBpZiAobVNSVikKLSAgICB7Ci0gICAgICAgIG1TUlYtPlJlbGVhc2UoKTsKLSAgICAgICAgbVNS
ViA9IE5VTEw7Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6
SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCi0gICAgewotICAgICAgICBk
ZWxldGUgbVJlbmRlclRhcmdldFtpXTsKLSAgICAgICAgbVJlbmRlclRhcmdldFtpXSA9IE5VTEw7
Ci0gICAgfQotfQotCi1UZXh0dXJlU3RvcmFnZTExXzJEICpUZXh0dXJlU3RvcmFnZTExXzJEOjpt
YWtlVGV4dHVyZVN0b3JhZ2UxMV8yRChUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSkKLXsKLSAgICBB
U1NFUlQoSEFTX0RZTkFNSUNfVFlQRShUZXh0dXJlU3RvcmFnZTExXzJEKiwgc3RvcmFnZSkpOwot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlU3RvcmFnZTExXzJEKj4oc3RvcmFnZSk7Ci19
Ci0KLVJlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2UxMV8yRDo6Z2V0UmVuZGVyVGFyZ2V0KGlu
dCBsZXZlbCkKLXsKLSAgICBpZiAobGV2ZWwgPj0gMCAmJiBsZXZlbCA8IHN0YXRpY19jYXN0PGlu
dD4obU1pcExldmVscykpCi0gICAgewotICAgICAgICBpZiAoIW1SZW5kZXJUYXJnZXRbbGV2ZWxd
KQotICAgICAgICB7Ci0gICAgICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJl
ci0+Z2V0RGV2aWNlKCk7Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdDsKLQotICAgICAgICAg
ICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOwotICAgICAgICAgICAg
c3J2RGVzYy5Gb3JtYXQgPSBtU2hhZGVyUmVzb3VyY2VGb3JtYXQ7Ci0gICAgICAgICAgICBzcnZE
ZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyRDsKLSAgICAg
ICAgICAgIHNydkRlc2MuVGV4dHVyZTJELk1vc3REZXRhaWxlZE1pcCA9IGxldmVsOwotICAgICAg
ICAgICAgc3J2RGVzYy5UZXh0dXJlMkQuTWlwTGV2ZWxzID0gMTsKLQotICAgICAgICAgICAgSUQz
RDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnY7Ci0gICAgICAgICAgICByZXN1bHQgPSBkZXZpY2Ut
PkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyhtVGV4dHVyZSwgJnNydkRlc2MsICZzcnYpOwotCi0g
ICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNf
Y2FzdDxSZW5kZXJUYXJnZXQqPihOVUxMKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgICAgICBpZiAobVJlbmRlclRhcmdl
dEZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7Ci0gICAgICAgICAg
ICAgICAgcnR2RGVzYy5Gb3JtYXQgPSBtUmVuZGVyVGFyZ2V0Rm9ybWF0OwotICAgICAgICAgICAg
ICAgIHJ0dkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJE
OwotICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJELk1pcFNsaWNlID0gbGV2ZWw7Ci0K
LSAgICAgICAgICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpydHY7Ci0gICAgICAgICAg
ICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1UZXh0dXJlLCAm
cnR2RGVzYywgJnJ0dik7Ci0KLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZN
RU1PUlkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzcnYtPlJlbGVh
c2UoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZLCBzdGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihOVUxMKSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAg
ICAgICAgICAvLyBSZW5kZXJUYXJnZXQxMSBleHBlY3RzIHRvIGJlIHRoZSBvd25lciBvZiB0aGUg
cmVzb3VyY2VzIGl0IGlzIGdpdmVuIGJ1dCBUZXh0dXJlU3RvcmFnZTExCi0gICAgICAgICAgICAg
ICAgLy8gYWxzbyBuZWVkcyB0byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0dXJlLgotICAg
ICAgICAgICAgICAgIG1UZXh0dXJlLT5BZGRSZWYoKTsKLQotICAgICAgICAgICAgICAgIG1SZW5k
ZXJUYXJnZXRbbGV2ZWxdID0gbmV3IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwgcnR2LCBtVGV4
dHVyZSwgc3J2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6bWF4KG1UZXh0dXJlV2lkdGggPj4gbGV2ZWwsIDFVKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6
Om1heChtVGV4dHVyZUhlaWdodCA+PiBsZXZlbCwgMVUpKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UgaWYgKG1EZXB0aFN0ZW5jaWxGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9X
TikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBEM0QxMV9ERVBUSF9TVEVOQ0lMX1ZJ
RVdfREVTQyBkc3ZEZXNjOwotICAgICAgICAgICAgICAgIGRzdkRlc2MuRm9ybWF0ID0gbURlcHRo
U3RlbmNpbEZvcm1hdDsKLSAgICAgICAgICAgICAgICBkc3ZEZXNjLlZpZXdEaW1lbnNpb24gPSBE
M0QxMV9EU1ZfRElNRU5TSU9OX1RFWFRVUkUyRDsKLSAgICAgICAgICAgICAgICBkc3ZEZXNjLlRl
eHR1cmUyRC5NaXBTbGljZSA9IGxldmVsOwotICAgICAgICAgICAgICAgIGRzdkRlc2MuRmxhZ3Mg
PSAwOwotCi0gICAgICAgICAgICAgICAgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZHN2OwotICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsVmlldyhtVGV4
dHVyZSwgJmRzdkRlc2MsICZkc3YpOwotCi0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBF
X09VVE9GTUVNT1JZKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3J2
LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0g
ICAgICAgICAgICAgICAgLy8gUmVuZGVyVGFyZ2V0MTEgZXhwZWN0cyB0byBiZSB0aGUgb3duZXIg
b2YgdGhlIHJlc291cmNlcyBpdCBpcyBnaXZlbiBidXQgVGV4dHVyZVN0b3JhZ2UxMQotICAgICAg
ICAgICAgICAgIC8vIGFsc28gbmVlZHMgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgdGV4dHVy
ZS4KLSAgICAgICAgICAgICAgICBtVGV4dHVyZS0+QWRkUmVmKCk7Ci0KLSAgICAgICAgICAgICAg
ICBtUmVuZGVyVGFyZ2V0W2xldmVsXSA9IG5ldyBSZW5kZXJUYXJnZXQxMShtUmVuZGVyZXIsIGRz
diwgbVRleHR1cmUsIHNydiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVyZVdpZHRoID4+IGxldmVsLCAxVSks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RkOjptYXgobVRleHR1cmVIZWlnaHQgPj4gbGV2ZWwsIDFVKSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBtUmVu
ZGVyVGFyZ2V0W2xldmVsXTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJu
IE5VTEw7Ci0gICAgfQotfQotCi1JRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlRleHR1cmVTdG9y
YWdlMTFfMkQ6OmdldFNSVigpCi17Ci0gICAgaWYgKCFtU1JWKQotICAgIHsKLSAgICAgICAgSUQz
RDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0gICAgICAgIEQz
RDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKLSAgICAgICAgc3J2RGVzYy5G
b3JtYXQgPSBtU2hhZGVyUmVzb3VyY2VGb3JtYXQ7Ci0gICAgICAgIHNydkRlc2MuVmlld0RpbWVu
c2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTJEOwotICAgICAgICBzcnZEZXNjLlRl
eHR1cmUyRC5NaXBMZXZlbHMgPSAobU1pcExldmVscyA9PSAwID8gLTEgOiBtTWlwTGV2ZWxzKTsK
LSAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkQuTW9zdERldGFpbGVkTWlwID0gMDsKLQotICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KG1UZXh0
dXJlLCAmc3J2RGVzYywgJm1TUlYpOwotCi0gICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1F
TU9SWSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZLCBzdGF0aWNfY2FzdDxJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcqPihOVUxMKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gbVNSVjsKLX0KLQotdm9pZCBUZXh0dXJlU3RvcmFnZTExXzJEOjpnZW5lcmF0ZU1p
cG1hcChpbnQgbGV2ZWwpCi17Ci0gICAgUmVuZGVyVGFyZ2V0MTEgKnNvdXJjZSA9IFJlbmRlclRh
cmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFyZ2V0KGxldmVsIC0gMSkpOwot
ICAgIFJlbmRlclRhcmdldDExICpkZXN0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJn
ZXQxMShnZXRSZW5kZXJUYXJnZXQobGV2ZWwpKTsKLQotICAgIGdlbmVyYXRlTWlwbWFwTGF5ZXIo
c291cmNlLCBkZXN0KTsKLX0KLQotVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpUZXh0dXJlU3RvcmFn
ZTExX0N1YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKQotICAg
IDogVGV4dHVyZVN0b3JhZ2UxMShyZW5kZXJlciwgR2V0VGV4dHVyZUJpbmRGbGFncyhnbF9kM2Qx
MTo6Q29udmVydFRleHR1cmVGb3JtYXQoaW50ZXJuYWxmb3JtYXQpLCB1c2FnZSwgZm9yY2VSZW5k
ZXJhYmxlKSkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IDY7IGkrKykKLSAg
ICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgZ2w6OklNUExFTUVOVEFU
SU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtUmVu
ZGVyVGFyZ2V0W2ldW2pdID0gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIERYR0lfRk9S
TUFUIGNvbnZlcnRlZEZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0VGV4dHVyZUZvcm1hdChpbnRl
cm5hbGZvcm1hdCk7Ci0gICAgaWYgKGQzZDExOjpJc0RlcHRoU3RlbmNpbEZvcm1hdChjb252ZXJ0
ZWRGb3JtYXQpKQotICAgIHsKLSAgICAgICAgbVRleHR1cmVGb3JtYXQgPSBkM2QxMTo6R2V0RGVw
dGhUZXh0dXJlRm9ybWF0KGNvbnZlcnRlZEZvcm1hdCk7Ci0gICAgICAgIG1TaGFkZXJSZXNvdXJj
ZUZvcm1hdCA9IGQzZDExOjpHZXREZXB0aFNoYWRlclJlc291cmNlRm9ybWF0KGNvbnZlcnRlZEZv
cm1hdCk7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBjb252ZXJ0ZWRGb3JtYXQ7Ci0g
ICAgICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBEWEdJX0ZPUk1BVF9VTktOT1dOOwotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICBtVGV4dHVyZUZvcm1hdCA9IGNvbnZlcnRlZEZvcm1h
dDsKLSAgICAgICAgbVNoYWRlclJlc291cmNlRm9ybWF0ID0gY29udmVydGVkRm9ybWF0OwotICAg
ICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5LTk9XTjsKLSAgICAgICAg
bVJlbmRlclRhcmdldEZvcm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKLSAgICB9Ci0KLSAgICAvLyBp
ZiB0aGUgc2l6ZSBpcyBub3QgcG9zaXRpdmUgdGhpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBp
bmNvbXBsZXRlIHRleHR1cmUKLSAgICAvLyB3ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBwaW5n
IHRoZSBkM2QgdGV4dHVyZSBjcmVhdGlvbgotICAgIGlmIChzaXplID4gMCkKLSAgICB7Ci0gICAg
ICAgIC8vIGFkanVzdCBzaXplIGlmIG5lZWRlZCBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlcwotICAg
ICAgICBpbnQgaGVpZ2h0ID0gc2l6ZTsKLSAgICAgICAgZ2w6Ok1ha2VWYWxpZFNpemUoZmFsc2Us
IGdsOjpJc0NvbXByZXNzZWQoaW50ZXJuYWxmb3JtYXQpLCAmc2l6ZSwgJmhlaWdodCwgJm1Mb2RP
ZmZzZXQpOwotCi0gICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXRE
ZXZpY2UoKTsKLQotICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXNjOwotICAgICAgICBk
ZXNjLldpZHRoID0gc2l6ZTsKLSAgICAgICAgZGVzYy5IZWlnaHQgPSBzaXplOwotICAgICAgICBk
ZXNjLk1pcExldmVscyA9IChsZXZlbHMgPiAwKSA/IGxldmVscyArIG1Mb2RPZmZzZXQgOiAwOwot
ICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IDY7Ci0gICAgICAgIGRlc2MuRm9ybWF0ID0gbVRleHR1
cmVGb3JtYXQ7Ci0gICAgICAgIGRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7Ci0gICAgICAgIGRl
c2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKLSAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VT
QUdFX0RFRkFVTFQ7Ci0gICAgICAgIGRlc2MuQmluZEZsYWdzID0gZ2V0QmluZEZsYWdzKCk7Ci0g
ICAgICAgIGRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOwotICAgICAgICBkZXNjLk1pc2NGbGFncyA9
IEQzRDExX1JFU09VUkNFX01JU0NfVEVYVFVSRUNVQkU7Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJm1UZXh0dXJlKTsKLQot
ICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VS
VChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgICAgICBFUlIoIkNyZWF0aW5nIGlt
YWdlIGZhaWxlZC4iKTsKLSAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
LSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1UZXh0dXJl
LT5HZXREZXNjKCZkZXNjKTsKLSAgICAgICAgICAgIG1NaXBMZXZlbHMgPSBkZXNjLk1pcExldmVs
czsKLSAgICAgICAgICAgIG1UZXh0dXJlV2lkdGggPSBkZXNjLldpZHRoOwotICAgICAgICAgICAg
bVRleHR1cmVIZWlnaHQgPSBkZXNjLkhlaWdodDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotVGV4
dHVyZVN0b3JhZ2UxMV9DdWJlOjp+VGV4dHVyZVN0b3JhZ2UxMV9DdWJlKCkKLXsKLSAgICBpZiAo
bVRleHR1cmUpCi0gICAgewotICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICBt
VGV4dHVyZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1TUlYpCi0gICAgewotICAgICAgICBt
U1JWLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1TUlYgPSBOVUxMOwotICAgIH0KLQotICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgNjsgaSsrKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaiA9IDA7IGogPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxT
OyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlbGV0ZSBtUmVuZGVyVGFyZ2V0W2ldW2pd
OwotICAgICAgICAgICAgbVJlbmRlclRhcmdldFtpXVtqXSA9IE5VTEw7Ci0gICAgICAgIH0KLSAg
ICB9Ci19Ci0KLVRleHR1cmVTdG9yYWdlMTFfQ3ViZSAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpt
YWtlVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKQotewotICAg
IEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKFRleHR1cmVTdG9yYWdlMTFfQ3ViZSosIHN0b3JhZ2Up
KTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZVN0b3JhZ2UxMV9DdWJlKj4oc3RvcmFn
ZSk7Ci19Ci0KLVJlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXRSZW5kZXJU
YXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkKLXsKLSAgICB1bnNpZ25lZCBpbnQg
ZmFjZUlkeCA9IGdsOjpUZXh0dXJlQ3ViZU1hcDo6ZmFjZUluZGV4KGZhY2VUYXJnZXQpOwotICAg
IGlmIChsZXZlbCA+PSAwICYmIGxldmVsIDwgc3RhdGljX2Nhc3Q8aW50PihtTWlwTGV2ZWxzKSkK
LSAgICB7Ci0gICAgICAgIGlmICghbVJlbmRlclRhcmdldFtmYWNlSWR4XVtsZXZlbF0pCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXRE
ZXZpY2UoKTsKLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0OwotCi0gICAgICAgICAgICBEM0Qx
MV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7Ci0gICAgICAgICAgICBzcnZEZXNj
LkZvcm1hdCA9IG1TaGFkZXJSZXNvdXJjZUZvcm1hdDsKLSAgICAgICAgICAgIHNydkRlc2MuVmll
d0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTJEQVJSQVk7IC8vIFdpbGwg
YmUgdXNlZCB3aXRoIFRleHR1cmUyRCBzYW1wbGVyLCBub3QgVGV4dHVyZUN1YmUKLSAgICAgICAg
ICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuTW9zdERldGFpbGVkTWlwID0gbGV2ZWw7Ci0gICAg
ICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5Lk1pcExldmVscyA9IDE7Ci0gICAgICAgICAg
ICBzcnZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9IGZhY2VJZHg7Ci0gICAg
ICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5LkFycmF5U2l6ZSA9IDE7Ci0KLSAgICAgICAg
ICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2OwotICAgICAgICAgICAgcmVzdWx0ID0g
ZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcobVRleHR1cmUsICZzcnZEZXNjLCAmc3J2
KTsKLQotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
c3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgICAgICAgICAgaWYgKG1SZW5k
ZXJUYXJnZXRGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOwotICAg
ICAgICAgICAgICAgIHJ0dkRlc2MuRm9ybWF0ID0gbVJlbmRlclRhcmdldEZvcm1hdDsKLSAgICAg
ICAgICAgICAgICBydHZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9SVFZfRElNRU5TSU9OX1RF
WFRVUkUyREFSUkFZOwotICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlw
U2xpY2UgPSBsZXZlbDsKLSAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5LkZp
cnN0QXJyYXlTbGljZSA9IGZhY2VJZHg7Ci0gICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJl
MkRBcnJheS5BcnJheVNpemUgPSAxOwotCi0gICAgICAgICAgICAgICAgSUQzRDExUmVuZGVyVGFy
Z2V0VmlldyAqcnR2OwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVu
ZGVyVGFyZ2V0VmlldyhtVGV4dHVyZSwgJnJ0dkRlc2MsICZydHYpOwotCi0gICAgICAgICAgICAg
ICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgc3J2LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4o
TlVMTCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOwotCi0gICAgICAgICAgICAgICAgLy8gUmVuZGVyVGFyZ2V0MTEgZXhwZWN0
cyB0byBiZSB0aGUgb3duZXIgb2YgdGhlIHJlc291cmNlcyBpdCBpcyBnaXZlbiBidXQgVGV4dHVy
ZVN0b3JhZ2UxMQotICAgICAgICAgICAgICAgIC8vIGFsc28gbmVlZHMgdG8ga2VlcCBhIHJlZmVy
ZW5jZSB0byB0aGUgdGV4dHVyZS4KLSAgICAgICAgICAgICAgICBtVGV4dHVyZS0+QWRkUmVmKCk7
Ci0KLSAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2ZhY2VJZHhdW2xldmVsXSA9IG5ldyBS
ZW5kZXJUYXJnZXQxMShtUmVuZGVyZXIsIHJ0diwgbVRleHR1cmUsIHNydiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGQ6Om1heChtVGV4dHVyZVdpZHRoID4+IGxldmVsLCAxVSksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgo
bVRleHR1cmVIZWlnaHQgPj4gbGV2ZWwsIDFVKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlIGlmIChtRGVwdGhTdGVuY2lsRm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRDNEMTFfREVQVEhfU1RFTkNJTF9WSUVXX0RF
U0MgZHN2RGVzYzsKLSAgICAgICAgICAgICAgICBkc3ZEZXNjLkZvcm1hdCA9IG1SZW5kZXJUYXJn
ZXRGb3JtYXQ7Ci0gICAgICAgICAgICAgICAgZHN2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFf
RFNWX0RJTUVOU0lPTl9URVhUVVJFMkRBUlJBWTsKLSAgICAgICAgICAgICAgICBkc3ZEZXNjLlRl
eHR1cmUyREFycmF5Lk1pcFNsaWNlID0gbGV2ZWw7Ci0gICAgICAgICAgICAgICAgZHN2RGVzYy5U
ZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSBmYWNlSWR4OwotICAgICAgICAgICAgICAg
IGRzdkRlc2MuVGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0gMTsKLQotICAgICAgICAgICAgICAg
IElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKmRzdjsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBk
ZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFZpZXcobVRleHR1cmUsICZkc3ZEZXNjLCAmZHN2KTsK
LQotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHNydi0+UmVsZWFzZSgpOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0
PFJlbmRlclRhcmdldCo+KE5VTEwpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgICAgICAgICAgICAgIC8vIFJlbmRl
clRhcmdldDExIGV4cGVjdHMgdG8gYmUgdGhlIG93bmVyIG9mIHRoZSByZXNvdXJjZXMgaXQgaXMg
Z2l2ZW4gYnV0IFRleHR1cmVTdG9yYWdlMTEKLSAgICAgICAgICAgICAgICAvLyBhbHNvIG5lZWRz
IHRvIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIHRleHR1cmUuCi0gICAgICAgICAgICAgICAgbVRl
eHR1cmUtPkFkZFJlZigpOwotCi0gICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldFtmYWNlSWR4
XVtsZXZlbF0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJlbmRlcmVyLCBkc3YsIG1UZXh0dXJlLCBz
cnYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjptYXgobVRleHR1cmVXaWR0aCA+PiBsZXZlbCwgMVUpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZDo6bWF4KG1UZXh0dXJlSGVpZ2h0ID4+IGxldmVsLCAxVSkpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4g
bVJlbmRlclRhcmdldFtmYWNlSWR4XVtsZXZlbF07Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLX0KLQotSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3
ICpUZXh0dXJlU3RvcmFnZTExX0N1YmU6OmdldFNSVigpCi17Ci0gICAgaWYgKCFtU1JWKQotICAg
IHsKLSAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgp
OwotCi0gICAgICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKLSAg
ICAgICAgc3J2RGVzYy5Gb3JtYXQgPSBtU2hhZGVyUmVzb3VyY2VGb3JtYXQ7Ci0gICAgICAgIHNy
dkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRUNVQkU7Ci0g
ICAgICAgIHNydkRlc2MuVGV4dHVyZUN1YmUuTWlwTGV2ZWxzID0gKG1NaXBMZXZlbHMgPT0gMCA/
IC0xIDogbU1pcExldmVscyk7Ci0gICAgICAgIHNydkRlc2MuVGV4dHVyZUN1YmUuTW9zdERldGFp
bGVkTWlwID0gMDsKLQotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hh
ZGVyUmVzb3VyY2VWaWV3KG1UZXh0dXJlLCAmc3J2RGVzYywgJm1TUlYpOwotCi0gICAgICAgIGlm
IChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxJRDNEMTFTaGFkZXJSZXNv
dXJjZVZpZXcqPihOVUxMKSk7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbVNSVjsKLX0KLQotdm9pZCBUZXh0dXJlU3Rv
cmFnZTExX0N1YmU6OmdlbmVyYXRlTWlwbWFwKGludCBmYWNlLCBpbnQgbGV2ZWwpCi17Ci0gICAg
UmVuZGVyVGFyZ2V0MTEgKnNvdXJjZSA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0
MTEoZ2V0UmVuZGVyVGFyZ2V0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2Us
IGxldmVsIC0gMSkpOwotICAgIFJlbmRlclRhcmdldDExICpkZXN0ID0gUmVuZGVyVGFyZ2V0MTE6
Om1ha2VSZW5kZXJUYXJnZXQxMShnZXRSZW5kZXJUYXJnZXQoR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9YICsgZmFjZSwgbGV2ZWwpKTsKLQotICAgIGdlbmVyYXRlTWlwbWFwTGF5ZXIoc291
cmNlLCBkZXN0KTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZTExLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlMTEuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M1ZGVkMDViODg5NzY5N2QzOTM2ZDA1MDk3ZGY0
ZGU5OGI3OWJjZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVT
dG9yYWdlMTEuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LQotLy8gVGV4dHVyZVN0b3JhZ2UxMS5oOiBEZWZpbmVzIHRoZSBhYnN0cmFjdCByeDo6VGV4dHVy
ZVN0b3JhZ2UxMSBjbGFzcyBhbmQgaXRzIGNvbmNyZXRlIGRlcml2ZWQKLS8vIGNsYXNzZXMgVGV4
dHVyZVN0b3JhZ2UxMV8yRCBhbmQgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlLCB3aGljaCBhY3QgYXMg
dGhlIGludGVyZmFjZSB0byB0aGUgRDNEMTEgdGV4dHVyZS4KLQotI2lmbmRlZiBMSUJHTEVTVjJf
UkVOREVSRVJfVEVYVFVSRVNUT1JBR0UxMV9IXwotI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJf
VEVYVFVSRVNUT1JBR0UxMV9IXwotCi0jaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKLSNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0b3JhZ2UuaCIKLQotbmFtZXNwYWNl
IHJ4Ci17Ci1jbGFzcyBSZW5kZXJUYXJnZXQ7Ci1jbGFzcyBSZW5kZXJUYXJnZXQxMTsKLWNsYXNz
IFJlbmRlcmVyOwotY2xhc3MgUmVuZGVyZXIxMTsKLWNsYXNzIFN3YXBDaGFpbjExOwotCi1jbGFz
cyBUZXh0dXJlU3RvcmFnZTExIDogcHVibGljIFRleHR1cmVTdG9yYWdlCi17Ci0gIHB1YmxpYzoK
LSAgICBUZXh0dXJlU3RvcmFnZTExKFJlbmRlcmVyICpyZW5kZXJlciwgVUlOVCBiaW5kRmxhZ3Mp
OwotICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlMTEoKTsKLQotICAgIHN0YXRpYyBUZXh0dXJl
U3RvcmFnZTExICptYWtlVGV4dHVyZVN0b3JhZ2UxMShUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSk7
Ci0KLSAgICBzdGF0aWMgRFdPUkQgR2V0VGV4dHVyZUJpbmRGbGFncyhEWEdJX0ZPUk1BVCBkM2Rm
bXQsIEdMZW51bSBnbHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSk7Ci0gICAgc3RhdGljIGJv
b2wgSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEWEdJX0ZPUk1BVCBmb3JtYXQpOwotCi0gICAg
VUlOVCBnZXRCaW5kRmxhZ3MoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgSUQzRDExVGV4dHVyZTJE
ICpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3Vy
Y2VWaWV3ICpnZXRTUlYoKSA9IDA7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRl
clRhcmdldCgpIHsgcmV0dXJuIGdldFJlbmRlclRhcmdldCgwKTsgfQotICAgIHZpcnR1YWwgUmVu
ZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoaW50IGxldmVsKSB7IHJldHVybiBOVUxMOyB9Ci0g
ICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVudW0gZmFjZVRhcmdl
dCkgeyByZXR1cm4gZ2V0UmVuZGVyVGFyZ2V0KGZhY2VUYXJnZXQsIDApOyB9Ci0gICAgdmlydHVh
bCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVudW0gZmFjZVRhcmdldCwgaW50IGxl
dmVsKSB7IHJldHVybiBOVUxMOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAo
aW50IGxldmVsKSB7fTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2Us
IGludCBsZXZlbCkge307Ci0KLSAgICB2aXJ0dWFsIGludCBnZXRMb2RPZmZzZXQoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJUYXJnZXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJv
b2wgaXNNYW5hZ2VkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgbGV2ZWxDb3VudCgpOwotICAg
IFVJTlQgZ2V0U3VicmVzb3VyY2VJbmRleChpbnQgbGV2ZWwsIGludCBmYWNlVGFyZ2V0KTsKLQot
ICAgIGJvb2wgdXBkYXRlU3VicmVzb3VyY2VMZXZlbChJRDNEMTFUZXh0dXJlMkQgKnRleHR1cmUs
IHVuc2lnbmVkIGludCBzb3VyY2VTdWJyZXNvdXJjZSwgaW50IGxldmVsLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgZmFjZVRhcmdldCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotCi0gIHByb3RlY3RlZDoK
LSAgICB2b2lkIGdlbmVyYXRlTWlwbWFwTGF5ZXIoUmVuZGVyVGFyZ2V0MTEgKnNvdXJjZSwgUmVu
ZGVyVGFyZ2V0MTEgKmRlc3QpOwotCi0gICAgUmVuZGVyZXIxMSAqbVJlbmRlcmVyOwotICAgIGlu
dCBtTG9kT2Zmc2V0OwotICAgIHVuc2lnbmVkIGludCBtTWlwTGV2ZWxzOwotCi0gICAgSUQzRDEx
VGV4dHVyZTJEICptVGV4dHVyZTsKLSAgICBEWEdJX0ZPUk1BVCBtVGV4dHVyZUZvcm1hdDsKLSAg
ICBEWEdJX0ZPUk1BVCBtU2hhZGVyUmVzb3VyY2VGb3JtYXQ7Ci0gICAgRFhHSV9GT1JNQVQgbVJl
bmRlclRhcmdldEZvcm1hdDsKLSAgICBEWEdJX0ZPUk1BVCBtRGVwdGhTdGVuY2lsRm9ybWF0Owot
ICAgIHVuc2lnbmVkIGludCBtVGV4dHVyZVdpZHRoOwotICAgIHVuc2lnbmVkIGludCBtVGV4dHVy
ZUhlaWdodDsKLQotICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqbVNSVjsKLQotICBwcml2
YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZTExKTsKLQot
ICAgIGNvbnN0IFVJTlQgbUJpbmRGbGFnczsKLX07Ci0KLWNsYXNzIFRleHR1cmVTdG9yYWdlMTFf
MkQgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UxMQotewotICBwdWJsaWM6Ci0gICAgVGV4dHVyZVN0
b3JhZ2UxMV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBDaGFpbjExICpzd2FwY2hhaW4pOwot
ICAgIFRleHR1cmVTdG9yYWdlMTFfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICB2aXJ0dWFsIH5UZXh0dXJlU3Rv
cmFnZTExXzJEKCk7Ci0KLSAgICBzdGF0aWMgVGV4dHVyZVN0b3JhZ2UxMV8yRCAqbWFrZVRleHR1
cmVTdG9yYWdlMTFfMkQoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpOwotCi0gICAgdmlydHVhbCBJ
RDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmdldFNSVigpOwotICAgIHZpcnR1YWwgUmVuZGVyVGFy
Z2V0ICpnZXRSZW5kZXJUYXJnZXQoaW50IGxldmVsKTsKLQotICAgIHZpcnR1YWwgdm9pZCBnZW5l
cmF0ZU1pcG1hcChpbnQgbGV2ZWwpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlMTFfMkQpOwotCi0gICAgUmVuZGVyVGFyZ2V0MTEgKm1S
ZW5kZXJUYXJnZXRbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107Ci19Owot
Ci1jbGFzcyBUZXh0dXJlU3RvcmFnZTExX0N1YmUgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UxMQot
ewotICBwdWJsaWM6Ci0gICAgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKFJlbmRlcmVyICpyZW5kZXJl
ciwgaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wg
Zm9yY2VSZW5kZXJhYmxlLCBpbnQgc2l6ZSk7Ci0gICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2Ux
MV9DdWJlKCk7Ci0KLSAgICBzdGF0aWMgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlICptYWtlVGV4dHVy
ZVN0b3JhZ2UxMV9DdWJlKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKTsKLQotICAgIHZpcnR1YWwg
SUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpnZXRTUlYoKTsKLSAgICB2aXJ0dWFsIFJlbmRlclRh
cmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpOwotCi0g
ICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBmYWNlLCBpbnQgbGV2ZWwpOwotCi0g
IHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlMTFf
Q3ViZSk7Ci0KLSAgICBSZW5kZXJUYXJnZXQxMSAqbVJlbmRlclRhcmdldFs2XVtnbDo6SU1QTEVN
RU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIExJQkdM
RVNWMl9SRU5ERVJFUl9URVhUVVJFU1RPUkFHRTExX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlOS5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVT
dG9yYWdlOS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhYTc0YTdjYmExYjQz
NzA4ZTMwYTNhZjllNzVhNzEwYjk3ODY0YTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9UZXh0dXJlU3RvcmFnZTkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAg
QEAKLSNpbmNsdWRlICJwcmVjb21waWxlZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRleHR1cmVT
dG9yYWdlOS5jcHA6IEltcGxlbWVudHMgdGhlIGFic3RyYWN0IHJ4OjpUZXh0dXJlU3RvcmFnZTkg
Y2xhc3MgYW5kIGl0cyBjb25jcmV0ZSBkZXJpdmVkCi0vLyBjbGFzc2VzIFRleHR1cmVTdG9yYWdl
OV8yRCBhbmQgVGV4dHVyZVN0b3JhZ2U5X0N1YmUsIHdoaWNoIGFjdCBhcyB0aGUgaW50ZXJmYWNl
IHRvIHRoZQotLy8gRDNEOSB0ZXh0dXJlLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIK
LSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXI5LmgiCi0jaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlOS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9Td2FwQ2hhaW45LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRl
clRhcmdldDkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXI5X3V0aWxz
LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci1U
ZXh0dXJlU3RvcmFnZTk6OlRleHR1cmVTdG9yYWdlOShSZW5kZXJlciAqcmVuZGVyZXIsIERXT1JE
IHVzYWdlKQotICAgIDogbUxvZE9mZnNldCgwKSwKLSAgICAgIG1SZW5kZXJlcihSZW5kZXJlcjk6
Om1ha2VSZW5kZXJlcjkocmVuZGVyZXIpKSwKLSAgICAgIG1EM0RVc2FnZSh1c2FnZSksCi0gICAg
ICBtRDNEUG9vbChtUmVuZGVyZXItPmdldFRleHR1cmVQb29sKHVzYWdlKSkKLXsKLX0KLQotVGV4
dHVyZVN0b3JhZ2U5Ojp+VGV4dHVyZVN0b3JhZ2U5KCkKLXsKLX0KLQotVGV4dHVyZVN0b3JhZ2U5
ICpUZXh0dXJlU3RvcmFnZTk6Om1ha2VUZXh0dXJlU3RvcmFnZTkoVGV4dHVyZVN0b3JhZ2UgKnN0
b3JhZ2UpCi17Ci0gICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoVGV4dHVyZVN0b3JhZ2U5Kiwg
c3RvcmFnZSkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlU3RvcmFnZTkqPihzdG9y
YWdlKTsKLX0KLQotRFdPUkQgVGV4dHVyZVN0b3JhZ2U5OjpHZXRUZXh0dXJlVXNhZ2UoRDNERk9S
TUFUIGQzZGZtdCwgR0xlbnVtIGdsdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlKQotewotICAg
IERXT1JEIGQzZHVzYWdlID0gMDsKLQotICAgIGlmIChkM2RmbXQgPT0gRDNERk1UX0lOVFopCi0g
ICAgewotICAgICAgICBkM2R1c2FnZSB8PSBEM0RVU0FHRV9ERVBUSFNURU5DSUw7Ci0gICAgfQot
ICAgIGVsc2UgaWYoZm9yY2VSZW5kZXJhYmxlIHx8IChUZXh0dXJlU3RvcmFnZTk6OklzVGV4dHVy
ZUZvcm1hdFJlbmRlcmFibGUoZDNkZm10KSAmJiAoZ2x1c2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9B
VFRBQ0hNRU5UX0FOR0xFKSkpCi0gICAgewotICAgICAgICBkM2R1c2FnZSB8PSBEM0RVU0FHRV9S
RU5ERVJUQVJHRVQ7Ci0gICAgfQotICAgIHJldHVybiBkM2R1c2FnZTsKLX0KLQotYm9vbCBUZXh0
dXJlU3RvcmFnZTk6OklzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoRDNERk9STUFUIGZvcm1hdCkK
LXsKLSAgICBpZiAoZm9ybWF0ID09IEQzREZNVF9JTlRaKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIHN3aXRjaChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RG
TVRfTDg6Ci0gICAgICBjYXNlIEQzREZNVF9BOEw4OgotICAgICAgY2FzZSBEM0RGTVRfRFhUMToK
LSAgICAgIGNhc2UgRDNERk1UX0RYVDM6Ci0gICAgICBjYXNlIEQzREZNVF9EWFQ1OgotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgIGNhc2Ug
RDNERk1UX1g4UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKLSAgICAg
IGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgVGV4dHVyZVN0b3JhZ2U5Ojppc1JlbmRlclRhcmdldCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIChtRDNEVXNhZ2UgJiAoRDNEVVNBR0VfUkVOREVSVEFSR0VUIHwgRDNEVVNB
R0VfREVQVEhTVEVOQ0lMKSkgIT0gMDsKLX0KLQotYm9vbCBUZXh0dXJlU3RvcmFnZTk6OmlzTWFu
YWdlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChtRDNEUG9vbCA9PSBEM0RQT09MX01BTkFHRUQp
OwotfQotCi1EM0RQT09MIFRleHR1cmVTdG9yYWdlOTo6Z2V0UG9vbCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1EM0RQb29sOwotfQotCi1EV09SRCBUZXh0dXJlU3RvcmFnZTk6OmdldFVzYWdlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbUQzRFVzYWdlOwotfQotCi1pbnQgVGV4dHVyZVN0b3JhZ2U5
OjpnZXRMb2RPZmZzZXQoKSBjb25zdAotewotICAgIHJldHVybiBtTG9kT2Zmc2V0OwotfQotCi1p
bnQgVGV4dHVyZVN0b3JhZ2U5OjpsZXZlbENvdW50KCkKLXsKLSAgICByZXR1cm4gZ2V0QmFzZVRl
eHR1cmUoKSA/IGdldEJhc2VUZXh0dXJlKCktPkdldExldmVsQ291bnQoKSAtIGdldExvZE9mZnNl
dCgpIDogMDsKLX0KLQotVGV4dHVyZVN0b3JhZ2U5XzJEOjpUZXh0dXJlU3RvcmFnZTlfMkQoUmVu
ZGVyZXIgKnJlbmRlcmVyLCBTd2FwQ2hhaW45ICpzd2FwY2hhaW4pIDogVGV4dHVyZVN0b3JhZ2U5
KHJlbmRlcmVyLCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQpCi17Ci0gICAgSURpcmVjdDNEVGV4dHVy
ZTkgKnN1cmZhY2VUZXh0dXJlID0gc3dhcGNoYWluLT5nZXRPZmZzY3JlZW5UZXh0dXJlKCk7Ci0g
ICAgbVRleHR1cmUgPSBzdXJmYWNlVGV4dHVyZTsKLSAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsK
LQotICAgIGluaXRpYWxpemVSZW5kZXJUYXJnZXQoKTsKLX0KLQotVGV4dHVyZVN0b3JhZ2U5XzJE
OjpUZXh0dXJlU3RvcmFnZTlfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotICAgIDogVGV4dHVyZVN0b3JhZ2U5KHJlbmRl
cmVyLCBHZXRUZXh0dXJlVXNhZ2UoUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5KHJlbmRlcmVyKS0+
Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCksIHVzYWdlLCBmb3Jj
ZVJlbmRlcmFibGUpKQotewotICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICBtUmVuZGVyVGFyZ2V0
ID0gTlVMTDsKLSAgICAvLyBpZiB0aGUgd2lkdGggb3IgaGVpZ2h0IGlzIG5vdCBwb3NpdGl2ZSB0
aGlzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGluY29tcGxldGUgdGV4dHVyZQotICAgIC8vIHdl
IGhhbmRsZSB0aGF0IGhlcmUgYnkgc2tpcHBpbmcgdGhlIGQzZCB0ZXh0dXJlIGNyZWF0aW9uCi0g
ICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKQotICAgIHsKLSAgICAgICAgSURpcmVjdDNE
RGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLSAgICAgICAgZ2w6Ok1h
a2VWYWxpZFNpemUoZmFsc2UsIGdsOjpJc0NvbXByZXNzZWQoaW50ZXJuYWxmb3JtYXQpLCAmd2lk
dGgsICZoZWlnaHQsICZtTG9kT2Zmc2V0KTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZp
Y2UtPkNyZWF0ZVRleHR1cmUod2lkdGgsIGhlaWdodCwgbGV2ZWxzID8gbGV2ZWxzICsgbUxvZE9m
ZnNldCA6IDAsIGdldFVzYWdlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1SZW5kZXJlci0+Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRl
cm5hbGZvcm1hdCksIGdldFBvb2woKSwgJm1UZXh0dXJlLCBOVUxMKTsKLQotICAgICAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0g
RDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAg
ICAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaW5pdGlhbGl6ZVJlbmRlclRhcmdldCgpOwotfQotCi1UZXh0dXJlU3RvcmFnZTlfMkQ6
On5UZXh0dXJlU3RvcmFnZTlfMkQoKQotewotICAgIGlmIChtVGV4dHVyZSkKLSAgICB7Ci0gICAg
ICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgZGVsZXRlIG1SZW5kZXJUYXJn
ZXQ7Ci19Ci0KLVRleHR1cmVTdG9yYWdlOV8yRCAqVGV4dHVyZVN0b3JhZ2U5XzJEOjptYWtlVGV4
dHVyZVN0b3JhZ2U5XzJEKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKQotewotICAgIEFTU0VSVChI
QVNfRFlOQU1JQ19UWVBFKFRleHR1cmVTdG9yYWdlOV8yRCosIHN0b3JhZ2UpKTsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZVN0b3JhZ2U5XzJEKj4oc3RvcmFnZSk7Ci19Ci0KLS8vIElu
Y3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0
aGUgcmV0dXJuZWQgc3VyZmFjZQotSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVTdG9yYWdlOV8y
RDo6Z2V0U3VyZmFjZUxldmVsKGludCBsZXZlbCwgYm9vbCBkaXJ0eSkKLXsKLSAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqc3VyZmFjZSA9IE5VTEw7Ci0KLSAgICBpZiAobVRleHR1cmUpCi0gICAgewot
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWwg
KyBtTG9kT2Zmc2V0LCAmc3VyZmFjZSk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7Ci0KLSAgICAgICAgLy8gV2l0aCBtYW5hZ2VkIHRleHR1cmVzIHRoZSBkcml2ZXIgbmVlZHMg
dG8gYmUgaW5mb3JtZWQgb2YgdXBkYXRlcyB0byB0aGUgbG93ZXIgbWlwbWFwIGxldmVscwotICAg
ICAgICBpZiAobGV2ZWwgKyBtTG9kT2Zmc2V0ICE9IDAgJiYgaXNNYW5hZ2VkKCkgJiYgZGlydHkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1UZXh0dXJlLT5BZGREaXJ0eVJlY3QoTlVMTCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gc3VyZmFjZTsKLX0KLQotUmVuZGVyVGFyZ2V0
ICpUZXh0dXJlU3RvcmFnZTlfMkQ6OmdldFJlbmRlclRhcmdldCgpCi17Ci0gICAgcmV0dXJuIG1S
ZW5kZXJUYXJnZXQ7Ci19Ci0KLXZvaWQgVGV4dHVyZVN0b3JhZ2U5XzJEOjpnZW5lcmF0ZU1pcG1h
cChpbnQgbGV2ZWwpCi17Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnVwcGVyID0gZ2V0U3VyZmFj
ZUxldmVsKGxldmVsIC0gMSwgZmFsc2UpOwotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpsb3dlciA9
IGdldFN1cmZhY2VMZXZlbChsZXZlbCwgdHJ1ZSk7Ci0KLSAgICBpZiAodXBwZXIgIT0gTlVMTCAm
JiBsb3dlciAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgbVJlbmRlcmVyLT5ib3hGaWx0ZXIodXBw
ZXIsIGxvd2VyKTsKLSAgICB9Ci0KLSAgICBpZiAodXBwZXIgIT0gTlVMTCkgdXBwZXItPlJlbGVh
c2UoKTsKLSAgICBpZiAobG93ZXIgIT0gTlVMTCkgbG93ZXItPlJlbGVhc2UoKTsKLX0KLQotSURp
cmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlU3RvcmFnZTlfMkQ6OmdldEJhc2VUZXh0dXJlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbVRleHR1cmU7Ci19Ci0KLXZvaWQgVGV4dHVyZVN0b3JhZ2U5
XzJEOjppbml0aWFsaXplUmVuZGVyVGFyZ2V0KCkKLXsKLSAgICBBU1NFUlQobVJlbmRlclRhcmdl
dCA9PSBOVUxMKTsKLQotICAgIGlmIChtVGV4dHVyZSAhPSBOVUxMICYmIGlzUmVuZGVyVGFyZ2V0
KCkpCi0gICAgewotICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IGdldFN1cmZh
Y2VMZXZlbCgwLCBmYWxzZSk7Ci0KLSAgICAgICAgbVJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJU
YXJnZXQ5KG1SZW5kZXJlciwgc3VyZmFjZSk7Ci0gICAgfQotfQotCi1UZXh0dXJlU3RvcmFnZTlf
Q3ViZTo6VGV4dHVyZVN0b3JhZ2U5X0N1YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxz
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFi
bGUsIGludCBzaXplKQotICAgIDogVGV4dHVyZVN0b3JhZ2U5KHJlbmRlcmVyLCBHZXRUZXh0dXJl
VXNhZ2UoUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5KHJlbmRlcmVyKS0+Q29udmVydFRleHR1cmVJ
bnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCksIHVzYWdlLCBmb3JjZVJlbmRlcmFibGUpKQot
ewotICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7ICsraSkK
LSAgICB7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXRbaV0gPSBOVUxMOwotICAgIH0KLQotICAgIC8v
IGlmIHRoZSBzaXplIGlzIG5vdCBwb3NpdGl2ZSB0aGlzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFu
IGluY29tcGxldGUgdGV4dHVyZQotICAgIC8vIHdlIGhhbmRsZSB0aGF0IGhlcmUgYnkgc2tpcHBp
bmcgdGhlIGQzZCB0ZXh0dXJlIGNyZWF0aW9uCi0gICAgaWYgKHNpemUgPiAwKQotICAgIHsKLSAg
ICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsK
LSAgICAgICAgaW50IGhlaWdodCA9IHNpemU7Ci0gICAgICAgIGdsOjpNYWtlVmFsaWRTaXplKGZh
bHNlLCBnbDo6SXNDb21wcmVzc2VkKGludGVybmFsZm9ybWF0KSwgJnNpemUsICZoZWlnaHQsICZt
TG9kT2Zmc2V0KTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUN1YmVU
ZXh0dXJlKHNpemUsIGxldmVscyA/IGxldmVscyArIG1Mb2RPZmZzZXQgOiAwLCBnZXRVc2FnZSgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJl
bmRlcmVyLT5Db252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0KSwgZ2V0
UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
LSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgICAgICBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpbml0aWFsaXpl
UmVuZGVyVGFyZ2V0KCk7Ci19Ci0KLVRleHR1cmVTdG9yYWdlOV9DdWJlOjp+VGV4dHVyZVN0b3Jh
Z2U5X0N1YmUoKQotewotICAgIGlmIChtVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1UZXh0dXJl
LT5SZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyArK2kpCi0g
ICAgewotICAgICAgICBkZWxldGUgbVJlbmRlclRhcmdldFtpXTsKLSAgICB9Ci19Ci0KLVRleHR1
cmVTdG9yYWdlOV9DdWJlICpUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdl
OV9DdWJlKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKQotewotICAgIEFTU0VSVChIQVNfRFlOQU1J
Q19UWVBFKFRleHR1cmVTdG9yYWdlOV9DdWJlKiwgc3RvcmFnZSkpOwotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxUZXh0dXJlU3RvcmFnZTlfQ3ViZSo+KHN0b3JhZ2UpOwotfQotCi0vLyBJbmNyZW1l
bnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJl
dHVybmVkIHN1cmZhY2UKLUlEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6
Z2V0Q3ViZU1hcFN1cmZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCwgYm9vbCBkaXJ0
eSkKLXsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IE5VTEw7Ci0KLSAgICBpZiAo
bVRleHR1cmUpCi0gICAgewotICAgICAgICBEM0RDVUJFTUFQX0ZBQ0VTIGZhY2UgPSBnbF9kM2Q5
OjpDb252ZXJ0Q3ViZUZhY2UoZmFjZVRhcmdldCk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
bVRleHR1cmUtPkdldEN1YmVNYXBTdXJmYWNlKGZhY2UsIGxldmVsICsgbUxvZE9mZnNldCwgJnN1
cmZhY2UpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgIC8v
IFdpdGggbWFuYWdlZCB0ZXh0dXJlcyB0aGUgZHJpdmVyIG5lZWRzIHRvIGJlIGluZm9ybWVkIG9m
IHVwZGF0ZXMgdG8gdGhlIGxvd2VyIG1pcG1hcCBsZXZlbHMKLSAgICAgICAgaWYgKGxldmVsICE9
IDAgJiYgaXNNYW5hZ2VkKCkgJiYgZGlydHkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1UZXh0
dXJlLT5BZGREaXJ0eVJlY3QoZmFjZSwgTlVMTCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gc3VyZmFjZTsKLX0KLQotUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6
Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0KQotewotICAgIHJldHVybiBtUmVuZGVy
VGFyZ2V0W2dsOjpUZXh0dXJlQ3ViZU1hcDo6ZmFjZUluZGV4KGZhY2VUYXJnZXQpXTsKLX0KLQot
dm9pZCBUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6Z2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBs
ZXZlbCkKLXsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqdXBwZXIgPSBnZXRDdWJlTWFwU3VyZmFj
ZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCAtIDEsIGZhbHNl
KTsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbG93ZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShHTF9U
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCwgdHJ1ZSk7Ci0KLSAgICBp
ZiAodXBwZXIgIT0gTlVMTCAmJiBsb3dlciAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgbVJlbmRl
cmVyLT5ib3hGaWx0ZXIodXBwZXIsIGxvd2VyKTsKLSAgICB9Ci0KLSAgICBpZiAodXBwZXIgIT0g
TlVMTCkgdXBwZXItPlJlbGVhc2UoKTsKLSAgICBpZiAobG93ZXIgIT0gTlVMTCkgbG93ZXItPlJl
bGVhc2UoKTsKLX0KLQotSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlU3RvcmFnZTlfQ3Vi
ZTo6Z2V0QmFzZVRleHR1cmUoKSBjb25zdAotewotICAgIHJldHVybiBtVGV4dHVyZTsKLX0KLQot
dm9pZCBUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6aW5pdGlhbGl6ZVJlbmRlclRhcmdldCgpCi17Ci0g
ICAgaWYgKG1UZXh0dXJlICE9IE5VTEwgJiYgaXNSZW5kZXJUYXJnZXQoKSkKLSAgICB7Ci0gICAg
ICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gTlVMTDsKLQotICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IDY7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1SZW5k
ZXJUYXJnZXRbaV0gPT0gTlVMTCk7Ci0KLSAgICAgICAgICAgIHN1cmZhY2UgPSBnZXRDdWJlTWFw
U3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBpLCAwLCBmYWxzZSk7Ci0K
LSAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbaV0gPSBuZXcgUmVuZGVyVGFyZ2V0OShtUmVuZGVy
ZXIsIHN1cmZhY2UpOwotICAgICAgICB9Ci0gICAgfQotfQotCi19ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZTkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0b3JhZ2U5LmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDg2ZjU1MWExMzE1ZGE0NTM3MTNmYTE5NmQ3NzI4ZjcyNTdlMmJkODYu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZTkuaAor
KysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVGV4dHVy
ZVN0b3JhZ2U5Lmg6IERlZmluZXMgdGhlIGFic3RyYWN0IHJ4OjpUZXh0dXJlU3RvcmFnZTkgY2xh
c3MgYW5kIGl0cyBjb25jcmV0ZSBkZXJpdmVkCi0vLyBjbGFzc2VzIFRleHR1cmVTdG9yYWdlOV8y
RCBhbmQgVGV4dHVyZVN0b3JhZ2U5X0N1YmUsIHdoaWNoIGFjdCBhcyB0aGUgaW50ZXJmYWNlIHRv
IHRoZQotLy8gRDNEOSB0ZXh0dXJlLgotCi0jaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9URVhU
VVJFU1RPUkFHRTlfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1RFWFRVUkVTVE9SQUdF
OV9IXwotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlLmgiCi0j
aW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0KLW5hbWVzcGFjZSByeAotewotY2xhc3MgUmVuZGVy
ZXI5OwotY2xhc3MgU3dhcENoYWluOTsKLWNsYXNzIFJlbmRlclRhcmdldDsKLWNsYXNzIFJlbmRl
clRhcmdldDk7Ci1jbGFzcyBCbGl0OwotCi1jbGFzcyBUZXh0dXJlU3RvcmFnZTkgOiBwdWJsaWMg
VGV4dHVyZVN0b3JhZ2UKLXsKLSAgcHVibGljOgotICAgIFRleHR1cmVTdG9yYWdlOShSZW5kZXJl
ciAqcmVuZGVyZXIsIERXT1JEIHVzYWdlKTsKLSAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTko
KTsKLQotICAgIHN0YXRpYyBUZXh0dXJlU3RvcmFnZTkgKm1ha2VUZXh0dXJlU3RvcmFnZTkoVGV4
dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpOwotCi0gICAgc3RhdGljIERXT1JEIEdldFRleHR1cmVVc2Fn
ZShEM0RGT1JNQVQgZDNkZm10LCBHTGVudW0gZ2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUp
OwotICAgIHN0YXRpYyBib29sIElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoRDNERk9STUFUIGZv
cm1hdCk7Ci0KLSAgICBEM0RQT09MIGdldFBvb2woKSBjb25zdDsKLSAgICBEV09SRCBnZXRVc2Fn
ZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VU
ZXh0dXJlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJU
YXJnZXQoKSB7IHJldHVybiBOVUxMOyB9Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJl
bmRlclRhcmdldChHTGVudW0gZmFjZVRhcmdldCkgeyByZXR1cm4gTlVMTDsgfQotICAgIHZpcnR1
YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpIHt9OwotICAgIHZpcnR1YWwgdm9pZCBn
ZW5lcmF0ZU1pcG1hcChpbnQgZmFjZSwgaW50IGxldmVsKSB7fTsKLQotICAgIHZpcnR1YWwgaW50
IGdldExvZE9mZnNldCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlclRhcmdldCgp
IGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc01hbmFnZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGludCBsZXZlbENvdW50KCk7Ci0KLSAgcHJvdGVjdGVkOgotICAgIGludCBtTG9kT2Zmc2V0Owot
ICAgIFJlbmRlcmVyOSAqbVJlbmRlcmVyOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlOSk7Ci0KLSAgICBjb25zdCBEV09SRCBtRDNEVXNh
Z2U7Ci0gICAgY29uc3QgRDNEUE9PTCBtRDNEUG9vbDsKLX07Ci0KLWNsYXNzIFRleHR1cmVTdG9y
YWdlOV8yRCA6IHB1YmxpYyBUZXh0dXJlU3RvcmFnZTkKLXsKLSAgcHVibGljOgotICAgIFRleHR1
cmVTdG9yYWdlOV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBDaGFpbjkgKnN3YXBjaGFpbik7
Ci0gICAgVGV4dHVyZVN0b3JhZ2U5XzJEKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywg
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxl
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgdmlydHVhbCB+VGV4dHVyZVN0
b3JhZ2U5XzJEKCk7Ci0KLSAgICBzdGF0aWMgVGV4dHVyZVN0b3JhZ2U5XzJEICptYWtlVGV4dHVy
ZVN0b3JhZ2U5XzJEKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKTsKLQotICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpnZXRTdXJmYWNlTGV2ZWwoaW50IGxldmVsLCBib29sIGRpcnR5KTsKLSAgICB2aXJ0
dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KCk7Ci0gICAgdmlydHVhbCBJRGlyZWN0
M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lk
IGdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2U5XzJEKTsKLQotICAgIHZvaWQgaW5pdGlhbGl6
ZVJlbmRlclRhcmdldCgpOwotCi0gICAgSURpcmVjdDNEVGV4dHVyZTkgKm1UZXh0dXJlOwotICAg
IFJlbmRlclRhcmdldDkgKm1SZW5kZXJUYXJnZXQ7Ci19OwotCi1jbGFzcyBUZXh0dXJlU3RvcmFn
ZTlfQ3ViZSA6IHB1YmxpYyBUZXh0dXJlU3RvcmFnZTkKLXsKLSAgcHVibGljOgotICAgIFRleHR1
cmVTdG9yYWdlOV9DdWJlKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBpbnQgc2l6
ZSk7Ci0gICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2U5X0N1YmUoKTsKLQotICAgIHN0YXRpYyBU
ZXh0dXJlU3RvcmFnZTlfQ3ViZSAqbWFrZVRleHR1cmVTdG9yYWdlOV9DdWJlKFRleHR1cmVTdG9y
YWdlICpzdG9yYWdlKTsKLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRDdWJlTWFwU3VyZmFj
ZShHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsLCBib29sIGRpcnR5KTsKLSAgICB2aXJ0dWFs
IFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0KTsKLSAgICB2
aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCk7Ci0KLSAg
cHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2U5X0N1
YmUpOwotCi0gICAgdm9pZCBpbml0aWFsaXplUmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBJRGlyZWN0
M0RDdWJlVGV4dHVyZTkgKm1UZXh0dXJlOwotICAgIFJlbmRlclRhcmdldDkgKm1SZW5kZXJUYXJn
ZXRbNl07Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfVEVYVFVSRVNU
T1JBR0U5X0hfCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvVmVydGV4QnVmZmVyMTEuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXIxMS5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDUyMWRhODBjM2Q3ZTlmNzdiZjI2YjEzMTU0ODlmODliMjZhY2Iy
ZDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXIxMS5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NDAgKzAsMCBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVk
LmgiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotLy8KLQotLy8gVmVydGV4QnVmZmVyMTEuY3BwOiBEZWZpbmVzIHRoZSBE
M0QxMSBWZXJ0ZXhCdWZmZXIgaW1wbGVtZW50YXRpb24uCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvVmVydGV4QnVmZmVyMTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
QnVmZmVyU3RvcmFnZS5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlcjExLmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L0NvbnRleHQuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci0KLVZlcnRleEJ1ZmZlcjExOjpWZXJ0ZXhC
dWZmZXIxMShyeDo6UmVuZGVyZXIxMSAqY29uc3QgcmVuZGVyZXIpIDogbVJlbmRlcmVyKHJlbmRl
cmVyKQotewotICAgIG1CdWZmZXIgPSBOVUxMOwotICAgIG1CdWZmZXJTaXplID0gMDsKLSAgICBt
RHluYW1pY1VzYWdlID0gZmFsc2U7Ci19Ci0KLVZlcnRleEJ1ZmZlcjExOjp+VmVydGV4QnVmZmVy
MTEoKQotewotICAgIGlmIChtQnVmZmVyKQotICAgIHsKLSAgICAgICAgbUJ1ZmZlci0+UmVsZWFz
ZSgpOwotICAgICAgICBtQnVmZmVyID0gTlVMTDsKLSAgICB9Ci19Ci0KLWJvb2wgVmVydGV4QnVm
ZmVyMTE6OmluaXRpYWxpemUodW5zaWduZWQgaW50IHNpemUsIGJvb2wgZHluYW1pY1VzYWdlKQot
ewotICAgIGlmIChtQnVmZmVyKQotICAgIHsKLSAgICAgICAgbUJ1ZmZlci0+UmVsZWFzZSgpOwot
ICAgICAgICBtQnVmZmVyID0gTlVMTDsKLSAgICB9Ci0KLSAgICB1cGRhdGVTZXJpYWwoKTsKLQot
ICAgIGlmIChzaXplID4gMCkKLSAgICB7Ci0gICAgICAgIElEM0QxMURldmljZSogZHhEZXZpY2Ug
PSBtUmVuZGVyZXItPmdldERldmljZSgpOwotCi0gICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIGJ1
ZmZlckRlc2M7Ci0gICAgICAgIGJ1ZmZlckRlc2MuQnl0ZVdpZHRoID0gc2l6ZTsKLSAgICAgICAg
YnVmZmVyRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZTkFNSUM7Ci0gICAgICAgIGJ1ZmZlckRl
c2MuQmluZEZsYWdzID0gRDNEMTFfQklORF9WRVJURVhfQlVGRkVSOwotICAgICAgICBidWZmZXJE
ZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsKLSAgICAgICAgYnVm
ZmVyRGVzYy5NaXNjRmxhZ3MgPSAwOwotICAgICAgICBidWZmZXJEZXNjLlN0cnVjdHVyZUJ5dGVT
dHJpZGUgPSAwOwotCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZHhEZXZpY2UtPkNyZWF0ZUJ1
ZmZlcigmYnVmZmVyRGVzYywgTlVMTCwgJm1CdWZmZXIpOwotICAgICAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIG1CdWZmZXJTaXplID0gc2l6ZTsKLSAgICBtRHluYW1pY1VzYWdlID0gZHlu
YW1pY1VzYWdlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1WZXJ0ZXhCdWZmZXIxMSAqVmVydGV4
QnVmZmVyMTE6Om1ha2VWZXJ0ZXhCdWZmZXIxMShWZXJ0ZXhCdWZmZXIgKnZldGV4QnVmZmVyKQot
ewotICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKFZlcnRleEJ1ZmZlcjExKiwgdmV0ZXhCdWZm
ZXIpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VmVydGV4QnVmZmVyMTEqPih2ZXRleEJ1ZmZl
cik7Ci19Ci0KLWJvb2wgVmVydGV4QnVmZmVyMTE6OnN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25z
dCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgaW5z
dGFuY2VzLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQotewotICAgIGlmIChtQnVmZmVyKQotICAgIHsK
LSAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gYXR0cmliLm1Cb3VuZEJ1ZmZlci5nZXQoKTsK
LQotICAgICAgICBpbnQgaW5wdXRTdHJpZGUgPSBhdHRyaWIuc3RyaWRlKCk7Ci0gICAgICAgIGNv
bnN0IFZlcnRleENvbnZlcnRlciAmY29udmVydGVyID0gZ2V0VmVydGV4Q29udmVyc2lvbihhdHRy
aWIpOwotCi0gICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmR4Q29udGV4dCA9IG1SZW5kZXJl
ci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotCi0gICAgICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJD
RSBtYXBwZWRSZXNvdXJjZTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkeENvbnRleHQtPk1h
cChtQnVmZmVyLCAwLCBEM0QxMV9NQVBfV1JJVEVfTk9fT1ZFUldSSVRFLCAwLCAmbWFwcGVkUmVz
b3VyY2UpOwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEVSUigiVmVydGV4IGJ1ZmZlciBtYXAgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVz
dWx0KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGNo
YXIqIG91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1hcHBlZFJlc291cmNlLnBEYXRh
KSArIG9mZnNldDsKLQotICAgICAgICBjb25zdCBjaGFyICppbnB1dCA9IE5VTEw7Ci0gICAgICAg
IGlmIChidWZmZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2UgKnN0b3Jh
Z2UgPSBidWZmZXItPmdldFN0b3JhZ2UoKTsKLSAgICAgICAgICAgIGlucHV0ID0gc3RhdGljX2Nh
c3Q8Y29uc3QgY2hhcio+KHN0b3JhZ2UtPmdldERhdGEoKSkgKyBzdGF0aWNfY2FzdDxpbnQ+KGF0
dHJpYi5tT2Zmc2V0KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGF0dHJpYi5tUG9pbnRlcik7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaW5zdGFuY2VzID09IDAgfHwgYXR0cmliLm1EaXZp
c29yID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlucHV0ICs9IGlucHV0U3RyaWRlICog
c3RhcnQ7Ci0gICAgICAgIH0KLQotICAgICAgICBjb252ZXJ0ZXIuY29udmVyc2lvbkZ1bmMoaW5w
dXQsIGlucHV0U3RyaWRlLCBjb3VudCwgb3V0cHV0KTsKLQotICAgICAgICBkeENvbnRleHQtPlVu
bWFwKG1CdWZmZXIsIDApOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNl
Ci0gICAgewotICAgICAgICBFUlIoIlZlcnRleCBidWZmZXIgbm90IGluaXRpYWxpemVkLiIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFZlcnRleEJ1ZmZlcjExOjpz
dG9yZVJhd0RhdGEoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVk
IGludCBvZmZzZXQpCi17Ci0gICAgaWYgKG1CdWZmZXIpCi0gICAgewotICAgICAgICBJRDNEMTFE
ZXZpY2VDb250ZXh0ICpkeENvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsK
LQotICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7Ci0gICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gZHhDb250ZXh0LT5NYXAobUJ1ZmZlciwgMCwgRDNEMTFfTUFQ
X1dSSVRFX05PX09WRVJXUklURSwgMCwgJm1hcHBlZFJlc291cmNlKTsKLSAgICAgICAgaWYgKEZB
SUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIlZlcnRleCBidWZmZXIg
bWFwIGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBjaGFyKiBidWZmZXJEYXRhID0gc3RhdGlj
X2Nhc3Q8Y2hhcio+KG1hcHBlZFJlc291cmNlLnBEYXRhKTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZl
ckRhdGEgKyBvZmZzZXQsIGRhdGEsIHNpemUpOwotCi0gICAgICAgIGR4Q29udGV4dC0+VW5tYXAo
bUJ1ZmZlciwgMCk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAg
ICB7Ci0gICAgICAgIEVSUigiVmVydGV4IGJ1ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgVmVydGV4QnVmZmVyMTE6OmdldFNw
YWNlUmVxdWlyZWQoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTHNpemVpIGNv
dW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluc3Rh
bmNlcywgdW5zaWduZWQgaW50ICpvdXRTcGFjZVJlcXVpcmVkKSBjb25zdAotewotICAgIHVuc2ln
bmVkIGludCBlbGVtZW50U2l6ZSA9IGdldFZlcnRleENvbnZlcnNpb24oYXR0cmliKS5vdXRwdXRF
bGVtZW50U2l6ZTsKLQotICAgIHVuc2lnbmVkIGludCBlbGVtZW50Q291bnQgPSAwOwotICAgIGlm
IChpbnN0YW5jZXMgPT0gMCB8fCBhdHRyaWIubURpdmlzb3IgPT0gMCkKLSAgICB7Ci0gICAgICAg
IGVsZW1lbnRDb3VudCA9IGNvdW50OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBp
ZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihpbnN0YW5jZXMpIDwgc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSAtIChhdHRyaWIubURpdmlzb3IgLSAxKSkKLSAgICAg
ICAgewotICAgICAgICAgICAgLy8gUm91bmQgdXAKLSAgICAgICAgICAgIGVsZW1lbnRDb3VudCA9
IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGluc3RhbmNlcykgKyAoYXR0cmliLm1EaXZpc29y
IC0gMSkpIC8gYXR0cmliLm1EaXZpc29yOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgewotICAgICAgICAgICAgZWxlbWVudENvdW50ID0gaW5zdGFuY2VzIC8gYXR0cmliLm1EaXZp
c29yOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGVsZW1lbnRTaXplIDw9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLyBlbGVtZW50Q291bnQpCi0gICAgewot
ICAgICAgICBpZiAob3V0U3BhY2VSZXF1aXJlZCkKLSAgICAgICAgewotICAgICAgICAgICAgKm91
dFNwYWNlUmVxdWlyZWQgPSBlbGVtZW50U2l6ZSAqIGVsZW1lbnRDb3VudDsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6cmVxdWlyZXNDb252
ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QKLXsKLSAgICBy
ZXR1cm4gIWdldFZlcnRleENvbnZlcnNpb24oYXR0cmliKS5pZGVudGl0eTsKLX0KLQotdW5zaWdu
ZWQgaW50IFZlcnRleEJ1ZmZlcjExOjpnZXRCdWZmZXJTaXplKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbUJ1ZmZlclNpemU7Ci19Ci0KLWJvb2wgVmVydGV4QnVmZmVyMTE6OnNldEJ1ZmZlclNpemUo
dW5zaWduZWQgaW50IHNpemUpCi17Ci0gICAgaWYgKHNpemUgPiBtQnVmZmVyU2l6ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBpbml0aWFsaXplKHNpemUsIG1EeW5hbWljVXNhZ2UpOwotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wg
VmVydGV4QnVmZmVyMTE6OmRpc2NhcmQoKQotewotICAgIGlmIChtQnVmZmVyKQotICAgIHsKLSAg
ICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqZHhDb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZp
Y2VDb250ZXh0KCk7Ci0KLSAgICAgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJl
c291cmNlOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGR4Q29udGV4dC0+TWFwKG1CdWZmZXIs
IDAsIEQzRDExX01BUF9XUklURV9ESVNDQVJELCAwLCAmbWFwcGVkUmVzb3VyY2UpOwotICAgICAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiVmVydGV4
IGJ1ZmZlciBtYXAgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGR4Q29udGV4dC0+VW5tYXAo
bUJ1ZmZlciwgMCk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAg
ICB7Ci0gICAgICAgIEVSUigiVmVydGV4IGJ1ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLXVuc2lnbmVkIGludCBWZXJ0ZXhCdWZmZXIx
MTo6Z2V0VmVydGV4U2l6ZShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGdldFZlcnRleENvbnZlcnNpb24oYXR0cmliKS5vdXRwdXRFbGVtZW50
U2l6ZTsKLX0KLQotRFhHSV9GT1JNQVQgVmVydGV4QnVmZmVyMTE6OmdldERYR0lGb3JtYXQoY29u
c3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdAotewotICAgIHJldHVybiBnZXRW
ZXJ0ZXhDb252ZXJzaW9uKGF0dHJpYikuZHhnaUZvcm1hdDsKLX0KLQotSUQzRDExQnVmZmVyICpW
ZXJ0ZXhCdWZmZXIxMTo6Z2V0QnVmZmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUJ1ZmZlcjsK
LX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGludCBjb21wb25lbnRDb3VudCwg
Ym9vbCB3aWRlbiwgYm9vbCBub3JtYWxpemVkPgotc3RhdGljIHZvaWQgY29weVZlcnRleERhdGEo
Y29uc3Qgdm9pZCAqaW5wdXQsIHVuc2lnbmVkIGludCBzdHJpZGUsIHVuc2lnbmVkIGludCBjb3Vu
dCwgdm9pZCAqb3V0cHV0KQotewotICAgIHVuc2lnbmVkIGludCBhdHRyaWJTaXplID0gc2l6ZW9m
KFQpICogY29tcG9uZW50Q291bnQ7Ci0KLSAgICBpZiAoYXR0cmliU2l6ZSA9PSBzdHJpZGUgJiYg
IXdpZGVuKQotICAgIHsKLSAgICAgICAgbWVtY3B5KG91dHB1dCwgaW5wdXQsIGNvdW50ICogYXR0
cmliU2l6ZSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBv
dXRwdXRTdHJpZGUgPSB3aWRlbiA/IDQgOiBjb21wb25lbnRDb3VudDsKLSAgICAgICAgVCBkZWZh
dWx0VmFsID0gbm9ybWFsaXplZCA/IHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCgpIDogVCgx
KTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IFQgKm9mZnNldElucHV0ID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBUKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaW5wdXQpICsgaSAq
IHN0cmlkZSk7Ci0gICAgICAgICAgICBUICpvZmZzZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0
PFQqPihvdXRwdXQpICsgaSAqIG91dHB1dFN0cmlkZTsKLQotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaiA9IDA7IGogPCBjb21wb25lbnRDb3VudDsgaisrKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIG9mZnNldE91dHB1dFtqXSA9IG9mZnNldElucHV0W2pdOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBpZiAod2lkZW4pCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgb2Zmc2V0T3V0cHV0WzNdID0gZGVmYXVsdFZhbDsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLX0KLQotdGVtcGxhdGUgPHVuc2lnbmVkIGludCBjb21wb25lbnRDb3Vu
dD4KLXN0YXRpYyB2b2lkIGNvcHlGaXhlZFZlcnRleERhdGEoY29uc3Qgdm9pZCogaW5wdXQsIHVu
c2lnbmVkIGludCBzdHJpZGUsIHVuc2lnbmVkIGludCBjb3VudCwgdm9pZCogb3V0cHV0KQotewot
ICAgIHN0YXRpYyBjb25zdCBmbG9hdCBkaXZpc29yID0gMS4wZiAvICgxIDw8IDE2KTsKLQotICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAg
IGNvbnN0IEdMZml4ZWQqIG9mZnNldElucHV0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBHTGZp
eGVkKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaW5wdXQpICsgc3RyaWRlICogaSk7
Ci0gICAgICAgIGZsb2F0KiBvZmZzZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4o
b3V0cHV0KSArIGkgKiBjb21wb25lbnRDb3VudDsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBqID0gMDsgaiA8IGNvbXBvbmVudENvdW50OyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG9mZnNldE91dHB1dFtqXSA9IHN0YXRpY19jYXN0PGZsb2F0PihvZmZzZXRJbnB1dFtqXSkgKiBk
aXZpc29yOwotICAgICAgICB9Ci0gICAgfQotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdW5z
aWduZWQgaW50IGNvbXBvbmVudENvdW50LCBib29sIG5vcm1hbGl6ZWQ+Ci1zdGF0aWMgdm9pZCBj
b3B5VG9GbG9hdFZlcnRleERhdGEoY29uc3Qgdm9pZCogaW5wdXQsIHVuc2lnbmVkIGludCBzdHJp
ZGUsIHVuc2lnbmVkIGludCBjb3VudCwgdm9pZCogb3V0cHV0KQotewotICAgIHR5cGVkZWYgc3Rk
OjpudW1lcmljX2xpbWl0czxUPiBOTDsKLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIGNvbnN0IFQgKm9mZnNldElucHV0ID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBUKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaW5w
dXQpICsgc3RyaWRlICogaSk7Ci0gICAgICAgIGZsb2F0ICpvZmZzZXRPdXRwdXQgPSByZWludGVy
cHJldF9jYXN0PGZsb2F0Kj4ob3V0cHV0KSArIGkgKiBjb21wb25lbnRDb3VudDsKLQotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IGNvbXBvbmVudENvdW50OyBqKyspCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmIChub3JtYWxpemVkKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGlmIChOTDo6aXNfc2lnbmVkKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgY29uc3QgZmxvYXQgZGl2aXNvciA9IDEuMGYgLyAoMiAqIHN0YXRpY19jYXN0
PGZsb2F0PihOTDo6bWF4KCkpICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgIG9mZnNldE91dHB1
dFtqXSA9ICgyICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KG9mZnNldElucHV0W2pdKSArIDEpICogZGl2
aXNvcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0T3V0cHV0W2pdID0gIHN0YXRpY19j
YXN0PGZsb2F0PihvZmZzZXRJbnB1dFtqXSkgLyBOTDo6bWF4KCk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG9mZnNldE91dHB1dFtqXSA9ICBzdGF0aWNfY2FzdDxmbG9hdD4ob2Zmc2V0SW5w
dXRbal0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1jb25zdCBWZXJ0
ZXhCdWZmZXIxMTo6VmVydGV4Q29udmVydGVyIFZlcnRleEJ1ZmZlcjExOjptUG9zc2libGVUcmFu
c2xhdGlvbnNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVNdWzJdWzRdID0KLXsKLSAgICB7IC8v
IEdMX0JZVEUKLSAgICAgICAgeyAvLyB1bm5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlU
b0Zsb2F0VmVydGV4RGF0YTxHTGJ5dGUsIDEsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1Iz
Ml9GTE9BVCwgNCB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMYnl0
ZSwgMiwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCA4IH0sCi0gICAg
ICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xieXRlLCAzLCBmYWxzZT4sIGZhbHNl
LCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0sCi0gICAgICAgICAgICB7ICZjb3B5
VG9GbG9hdFZlcnRleERhdGE8R0xieXRlLCA0LCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9S
MzJHMzJCMzJBMzJfRkxPQVQsIDE2IH0sCi0gICAgICAgIH0sCi0gICAgICAgIHsgLy8gbm9ybWFs
aXplZAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xieXRlLCAxLCBmYWxzZSwgdHJ1
ZT4sIHRydWUsIERYR0lfRk9STUFUX1I4X1NOT1JNLCAxIH0sCi0gICAgICAgICAgICB7ICZjb3B5
VmVydGV4RGF0YTxHTGJ5dGUsIDIsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjhH
OF9TTk9STSwgMiB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xieXRlLCAzLCB0
cnVlLCB0cnVlPiwgZmFsc2UsIERYR0lfRk9STUFUX1I4RzhCOEE4X1NOT1JNLCA0IH0sCi0gICAg
ICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGJ5dGUsIDQsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwg
RFhHSV9GT1JNQVRfUjhHOEI4QThfU05PUk0sIDQgfSwKLSAgICAgICAgfSwKLSAgICB9LAotICAg
IHsgLy8gR0xfVU5TSUdORURfQllURQotICAgICAgICB7IC8vIHVubm9ybWFsaXplZAotICAgICAg
ICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDEsIGZhbHNlPiwgZmFsc2Us
IERYR0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRW
ZXJ0ZXhEYXRhPEdMdWJ5dGUsIDIsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMl9G
TE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMdWJ5dGUs
IDMsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKLSAg
ICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVieXRlLCA0LCBmYWxzZT4sIGZh
bHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsIDE2IH0sCi0gICAgICAgIH0sCi0g
ICAgICAgIHsgLy8gbm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1
Ynl0ZSwgMSwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SOF9VTk9STSwgMSB9LAot
ICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1Ynl0ZSwgMiwgZmFsc2UsIHRydWU+LCB0
cnVlLCBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNLCAyIH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVy
dGV4RGF0YTxHTHVieXRlLCAzLCB0cnVlLCB0cnVlPiwgZmFsc2UsIERYR0lfRk9STUFUX1I4RzhC
OEE4X1VOT1JNLCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHVieXRlLCA0
LCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNLCA0IH0sCi0g
ICAgICAgIH0sCi0gICAgfSwKLSAgICB7IC8vIEdMX1NIT1JUCi0gICAgICAgIHsgLy8gdW5ub3Jt
YWxpemVkCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xzaG9ydCwgMSwg
ZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyX0ZMT0FULCA0IH0sCi0gICAgICAgICAgICB7
ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xzaG9ydCwgMiwgZmFsc2U+LCBmYWxzZSwgRFhHSV9G
T1JNQVRfUjMyRzMyX0ZMT0FULCA4IH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRl
eERhdGE8R0xzaG9ydCwgMywgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZM
T0FULCAxMiB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMc2hvcnQs
IDQsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCwgMTYgfSwK
LSAgICAgICAgfSwKLSAgICAgICAgeyAvLyBub3JtYWxpemVkCi0gICAgICAgICAgICB7ICZjb3B5
VmVydGV4RGF0YTxHTHNob3J0LCAxLCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1Ix
Nl9TTk9STSwgMiB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xzaG9ydCwgMiwg
ZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMTZHMTZfU05PUk0sIDQgfSwKLSAgICAg
ICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMc2hvcnQsIDMsIHRydWUsIHRydWU+LCBmYWxzZSwg
RFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1NOT1JNLCA4IH0sCi0gICAgICAgICAgICB7ICZjb3B5
VmVydGV4RGF0YTxHTHNob3J0LCA0LCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1Ix
NkcxNkIxNkExNl9TTk9STSwgOCB9LAotICAgICAgICB9LAotICAgIH0sCi0gICAgeyAvLyBHTF9V
TlNJR05FRF9TSE9SVAotICAgICAgICB7IC8vIHVubm9ybWFsaXplZAotICAgICAgICAgICAgeyAm
Y29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMdXNob3J0LCAxLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZP
Uk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0
YTxHTHVzaG9ydCwgMiwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCA4
IH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0x1c2hvcnQsIDMsIGZh
bHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAgICAg
ICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVzaG9ydCwgNCwgZmFsc2U+LCBmYWxzZSwg
RFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAgICAgICB9LAotICAgICAg
ICB7IC8vIG5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdXNob3J0
LCAxLCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1IxNl9VTk9STSwgMiB9LAotICAg
ICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1c2hvcnQsIDIsIGZhbHNlLCB0cnVlPiwgdHJ1
ZSwgRFhHSV9GT1JNQVRfUjE2RzE2X1VOT1JNLCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVy
dGV4RGF0YTxHTHVzaG9ydCwgMywgdHJ1ZSwgdHJ1ZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMTZH
MTZCMTZBMTZfVU5PUk0sIDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdXNo
b3J0LCA0LCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9VTk9S
TSwgOCB9LAotICAgICAgICB9LAotICAgIH0sCi0gICAgeyAvLyBHTF9GSVhFRAotICAgICAgICB7
IC8vIHVubm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29weUZpeGVkVmVydGV4RGF0YTwxPiwg
ZmFsc2UsIERYR0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9LAotICAgICAgICAgICAgeyAmY29weUZp
eGVkVmVydGV4RGF0YTwyPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAot
ICAgICAgICAgICAgeyAmY29weUZpeGVkVmVydGV4RGF0YTwzPiwgZmFsc2UsIERYR0lfRk9STUFU
X1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERh
dGE8ND4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsIDE2IH0sCi0gICAg
ICAgIH0sCi0gICAgICAgIHsgLy8gbm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29weUZpeGVk
VmVydGV4RGF0YTwxPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9LAotICAgICAg
ICAgICAgeyAmY29weUZpeGVkVmVydGV4RGF0YTwyPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkcz
Ml9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weUZpeGVkVmVydGV4RGF0YTwzPiwgZmFs
c2UsIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsgJmNv
cHlGaXhlZFZlcnRleERhdGE8ND4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxP
QVQsIDE2IH0sCi0gICAgICAgIH0sCi0gICAgfSwKLSAgICB7IC8vIEdMX0ZMT0FUCi0gICAgICAg
IHsgLy8gdW5ub3JtYWxpemVkCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0
LCAxLCBmYWxzZSwgZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAg
ICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDIsIGZhbHNlLCBmYWxzZT4sIHRy
dWUsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVZl
cnRleERhdGE8R0xmbG9hdCwgMywgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMy
RzMyQjMyX0ZMT0FULCAxMiB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xmbG9h
dCwgNCwgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FU
LCAxNiB9LAotICAgICAgICB9LAotICAgICAgICB7IC8vIG5vcm1hbGl6ZWQKLSAgICAgICAgICAg
IHsgJmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDEsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lf
Rk9STUFUX1IzMl9GTE9BVCwgNCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xm
bG9hdCwgMiwgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCA4
IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCAzLCBmYWxzZSwgZmFs
c2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0sCi0gICAgICAgICAg
ICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCA0LCBmYWxzZSwgZmFsc2U+LCB0cnVlLCBEWEdJ
X0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsIDE2IH0sCi0gICAgICAgIH0sCi0gICAgfSwKLX07
Ci0KLWNvbnN0IFZlcnRleEJ1ZmZlcjExOjpWZXJ0ZXhDb252ZXJ0ZXIgJlZlcnRleEJ1ZmZlcjEx
OjpnZXRWZXJ0ZXhDb252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0
ZSkKLXsKLSAgICB1bnNpZ25lZCBpbnQgdHlwZUluZGV4ID0gMDsKLSAgICBzd2l0Y2ggKGF0dHJp
YnV0ZS5tVHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0JZVEU6ICAgICAgICAgICAgIHR5cGVJ
bmRleCA9IDA7IGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOiAgICB0eXBlSW5k
ZXggPSAxOyBicmVhazsKLSAgICAgIGNhc2UgR0xfU0hPUlQ6ICAgICAgICAgICAgdHlwZUluZGV4
ID0gMjsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOiAgIHR5cGVJbmRleCA9
IDM7IGJyZWFrOwotICAgICAgY2FzZSBHTF9GSVhFRDogICAgICAgICAgICB0eXBlSW5kZXggPSA0
OyBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgICAgICAgdHlwZUluZGV4ID0gNTsg
YnJlYWs7Ci0gICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7IGJy
ZWFrOwotICAgIH0KLQotICAgIHJldHVybiBtUG9zc2libGVUcmFuc2xhdGlvbnNbdHlwZUluZGV4
XVthdHRyaWJ1dGUubU5vcm1hbGl6ZWQgPyAxIDogMF1bYXR0cmlidXRlLm1TaXplIC0gMV07Ci19
Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvVmVydGV4QnVmZmVyMTEuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4QnVmZmVyMTEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZWNlYjQyNmU4MmQ0MmI1NTY2NmM1NzljM2ZlZTFmZTJhYjdiYTgwMS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlcjExLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw3NCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVmVydGV4QnVmZmVyMTEu
aDogRGVmaW5lcyB0aGUgRDNEMTEgVmVydGV4QnVmZmVyIGltcGxlbWVudGF0aW9uLgotCi0jaWZu
ZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9WRVJURVhCVUZGRVIxMV9IXwotI2RlZmluZSBMSUJHTEVT
VjJfUkVOREVSRVJfVkVSVEVYQlVGRkVSMTFfSF8KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9WZXJ0ZXhCdWZmZXIuaCIKLQotbmFtZXNwYWNlIHJ4Ci17Ci1jbGFzcyBSZW5kZXJlcjEx
OwotCi1jbGFzcyBWZXJ0ZXhCdWZmZXIxMSA6IHB1YmxpYyBWZXJ0ZXhCdWZmZXIKLXsKLSAgcHVi
bGljOgotICAgIGV4cGxpY2l0IFZlcnRleEJ1ZmZlcjExKHJ4OjpSZW5kZXJlcjExICpjb25zdCBy
ZW5kZXJlcik7Ci0gICAgdmlydHVhbCB+VmVydGV4QnVmZmVyMTEoKTsKLQotICAgIHZpcnR1YWwg
Ym9vbCBpbml0aWFsaXplKHVuc2lnbmVkIGludCBzaXplLCBib29sIGR5bmFtaWNVc2FnZSk7Ci0K
LSAgICBzdGF0aWMgVmVydGV4QnVmZmVyMTEgKm1ha2VWZXJ0ZXhCdWZmZXIxMShWZXJ0ZXhCdWZm
ZXIgKnZldGV4QnVmZmVyKTsKLQotICAgIHZpcnR1YWwgYm9vbCBzdG9yZVZlcnRleEF0dHJpYnV0
ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTGludCBzdGFydCwgR0xzaXpl
aSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKLSAgICB2aXJ0dWFsIGJvb2wgc3RvcmVS
YXdEYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQg
b2Zmc2V0KTsKLQotICAgIHZpcnR1YWwgYm9vbCBnZXRTcGFjZVJlcXVpcmVkKGNvbnN0IGdsOjpW
ZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTcGFj
ZVJlcXVpcmVkKSBjb25zdDsKLQotICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0NvbnZlcnNpb24o
Y29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdDsKLQotICAgIHZpcnR1YWwg
dW5zaWduZWQgaW50IGdldEJ1ZmZlclNpemUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgc2V0
QnVmZmVyU2l6ZSh1bnNpZ25lZCBpbnQgc2l6ZSk7Ci0gICAgdmlydHVhbCBib29sIGRpc2NhcmQo
KTsKLQotICAgIHVuc2lnbmVkIGludCBnZXRWZXJ0ZXhTaXplKGNvbnN0IGdsOjpWZXJ0ZXhBdHRy
aWJ1dGUgJmF0dHJpYikgY29uc3Q7Ci0gICAgRFhHSV9GT1JNQVQgZ2V0RFhHSUZvcm1hdChjb25z
dCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0OwotCi0gICAgSUQzRDExQnVmZmVy
ICpnZXRCdWZmZXIoKSBjb25zdDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihWZXJ0ZXhCdWZmZXIxMSk7Ci0KLSAgICByeDo6UmVuZGVyZXIxMSAqY29uc3QgbVJl
bmRlcmVyOwotCi0gICAgSUQzRDExQnVmZmVyICptQnVmZmVyOwotICAgIHVuc2lnbmVkIGludCBt
QnVmZmVyU2l6ZTsKLSAgICBib29sIG1EeW5hbWljVXNhZ2U7Ci0KLSAgICB0eXBlZGVmIHZvaWQg
KCpWZXJ0ZXhDb252ZXJzaW9uRnVuY3Rpb24pKGNvbnN0IHZvaWQgKiwgdW5zaWduZWQgaW50LCB1
bnNpZ25lZCBpbnQsIHZvaWQgKik7Ci0gICAgc3RydWN0IFZlcnRleENvbnZlcnRlcgotICAgIHsK
LSAgICAgICAgVmVydGV4Q29udmVyc2lvbkZ1bmN0aW9uIGNvbnZlcnNpb25GdW5jOwotICAgICAg
ICBib29sIGlkZW50aXR5OwotICAgICAgICBEWEdJX0ZPUk1BVCBkeGdpRm9ybWF0OwotICAgICAg
ICB1bnNpZ25lZCBpbnQgb3V0cHV0RWxlbWVudFNpemU7Ci0gICAgfTsKLQotICAgIGVudW0geyBO
VU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFUyA9IDYgfTsKLQotICAgIC8vIFRoaXMgdGFibGUgaXMg
dXNlZCB0byBnZW5lcmF0ZSBtQXR0cmlidXRlVHlwZXMuCi0gICAgc3RhdGljIGNvbnN0IFZlcnRl
eENvbnZlcnRlciBtUG9zc2libGVUcmFuc2xhdGlvbnNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQ
RVNdWzJdWzRdOyAvLyBbR0wgdHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9y
bWFsaXplZF1bc2l6ZSAtIDFdCi0KLSAgICBzdGF0aWMgY29uc3QgVmVydGV4Q29udmVydGVyICZn
ZXRWZXJ0ZXhDb252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSk7
Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfVkVSVEVYQlVGRkVSMTFf
SF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvVmVydGV4QnVmZmVyOS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlcjkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA1YTc5MmI5N2YyNTRhNmI0ZjgwN2E5MTliZjY4N2JhZGIyZDM2YzM5Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4QnVmZmVyOS5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw1MzAgKzAsMCBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCi0vLwotLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCi0vLwotCi0vLyBWZXJ0ZXhCdWZmZXI5LmNwcDogRGVmaW5lcyB0aGUgRDNEOSBWZXJ0
ZXhCdWZmZXIgaW1wbGVtZW50YXRpb24uCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
VmVydGV4QnVmZmVyOS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci92ZXJ0ZXhjb252
ZXJzaW9uLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaCIK
LSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9SZW5kZXJlcjkuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKLQotbmFt
ZXNwYWNlIHJ4Ci17Ci0KLWJvb2wgVmVydGV4QnVmZmVyOTo6bVRyYW5zbGF0aW9uc0luaXRpYWxp
emVkID0gZmFsc2U7Ci1WZXJ0ZXhCdWZmZXI5OjpGb3JtYXRDb252ZXJ0ZXIgVmVydGV4QnVmZmVy
OTo6bUZvcm1hdENvbnZlcnRlcnNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVNdWzJdWzRdOwot
Ci1WZXJ0ZXhCdWZmZXI5OjpWZXJ0ZXhCdWZmZXI5KHJ4OjpSZW5kZXJlcjkgKmNvbnN0IHJlbmRl
cmVyKSA6IG1SZW5kZXJlcihyZW5kZXJlcikKLXsKLSAgICBtVmVydGV4QnVmZmVyID0gTlVMTDsK
LSAgICBtQnVmZmVyU2l6ZSA9IDA7Ci0gICAgbUR5bmFtaWNVc2FnZSA9IGZhbHNlOwotCi0gICAg
aWYgKCFtVHJhbnNsYXRpb25zSW5pdGlhbGl6ZWQpCi0gICAgewotICAgICAgICBpbml0aWFsaXpl
VHJhbnNsYXRpb25zKHJlbmRlcmVyLT5nZXRDYXBzRGVjbFR5cGVzKCkpOwotICAgICAgICBtVHJh
bnNsYXRpb25zSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KLX0KLQotVmVydGV4QnVmZmVyOTo6
flZlcnRleEJ1ZmZlcjkoKQotewotICAgIGlmIChtVmVydGV4QnVmZmVyKQotICAgIHsKLSAgICAg
ICAgbVZlcnRleEJ1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtVmVydGV4QnVmZmVyID0gTlVM
TDsKLSAgICB9Ci19Ci0KLWJvb2wgVmVydGV4QnVmZmVyOTo6aW5pdGlhbGl6ZSh1bnNpZ25lZCBp
bnQgc2l6ZSwgYm9vbCBkeW5hbWljVXNhZ2UpCi17Ci0gICAgaWYgKG1WZXJ0ZXhCdWZmZXIpCi0g
ICAgewotICAgICAgICBtVmVydGV4QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1WZXJ0ZXhC
dWZmZXIgPSBOVUxMOwotICAgIH0KLQotICAgIHVwZGF0ZVNlcmlhbCgpOwotCi0gICAgaWYgKHNp
emUgPiAwKQotICAgIHsKLSAgICAgICAgRFdPUkQgZmxhZ3MgPSBEM0RVU0FHRV9XUklURU9OTFk7
Ci0gICAgICAgIGlmIChkeW5hbWljVXNhZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZsYWdz
IHw9IEQzRFVTQUdFX0RZTkFNSUM7Ci0gICAgICAgIH0KLQotICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IG1SZW5kZXJlci0+Y3JlYXRlVmVydGV4QnVmZmVyKHNpemUsIGZsYWdzLCAmbVZlcnRleEJ1
ZmZlcik7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBFUlIoIk91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBhIHZlcnRleCBidWZmZXIgb2Ygc2l6
ZSAlbHUuIiwgc2l6ZSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBtQnVmZmVyU2l6ZSA9IHNpemU7Ci0gICAgbUR5bmFtaWNVc2FnZSA9IGR5bmFt
aWNVc2FnZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotVmVydGV4QnVmZmVyOSAqVmVydGV4QnVm
ZmVyOTo6bWFrZVZlcnRleEJ1ZmZlcjkoVmVydGV4QnVmZmVyICp2ZXJ0ZXhCdWZmZXIpCi17Ci0g
ICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoVmVydGV4QnVmZmVyOSosIHZlcnRleEJ1ZmZlcikp
OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxWZXJ0ZXhCdWZmZXI5Kj4odmVydGV4QnVmZmVyKTsK
LX0KLQotYm9vbCBWZXJ0ZXhCdWZmZXI5OjpzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6
OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgaW5zdGFu
Y2VzLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQotewotICAgIGlmIChtVmVydGV4QnVmZmVyKQotICAg
IHsKLSAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gYXR0cmliLm1Cb3VuZEJ1ZmZlci5nZXQo
KTsKLQotICAgICAgICBpbnQgaW5wdXRTdHJpZGUgPSBhdHRyaWIuc3RyaWRlKCk7Ci0gICAgICAg
IGludCBlbGVtZW50U2l6ZSA9IGF0dHJpYi50eXBlU2l6ZSgpOwotICAgICAgICBjb25zdCBGb3Jt
YXRDb252ZXJ0ZXIgJmNvbnZlcnRlciA9IGZvcm1hdENvbnZlcnRlcihhdHRyaWIpOwotCi0gICAg
ICAgIERXT1JEIGxvY2tGbGFncyA9IG1EeW5hbWljVXNhZ2UgPyBEM0RMT0NLX05PT1ZFUldSSVRF
IDogMDsKLQotICAgICAgICB2b2lkICptYXBQdHIgPSBOVUxMOwotCi0gICAgICAgIHVuc2lnbmVk
IGludCBtYXBTaXplOwotICAgICAgICBpZiAoIXNwYWNlUmVxdWlyZWQoYXR0cmliLCBjb3VudCwg
aW5zdGFuY2VzLCAmbWFwU2l6ZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVZlcnRleEJ1ZmZlci0+
TG9jayhvZmZzZXQsIG1hcFNpemUsICZtYXBQdHIsIGxvY2tGbGFncyk7Ci0KLSAgICAgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkxvY2sgZmFpbGVk
IHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IGNoYXIgKmlucHV0ID0gTlVMTDsKLSAgICAgICAg
aWYgKGJ1ZmZlcikKLSAgICAgICAgewotICAgICAgICAgICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFn
ZSA9IGJ1ZmZlci0+Z2V0U3RvcmFnZSgpOwotICAgICAgICAgICAgaW5wdXQgPSBzdGF0aWNfY2Fz
dDxjb25zdCBjaGFyKj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSArIHN0YXRpY19jYXN0PGludD4oYXR0
cmliLm1PZmZzZXQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAg
ICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYXR0cmliLm1Qb2ludGVyKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBhdHRyaWIubURpdmlz
b3IgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgaW5wdXQgKz0gaW5wdXRTdHJpZGUgKiBz
dGFydDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjb252ZXJ0ZXIuaWRlbnRpdHkgJiYgaW5w
dXRTdHJpZGUgPT0gZWxlbWVudFNpemUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1lbWNweSht
YXBQdHIsIGlucHV0LCBjb3VudCAqIGlucHV0U3RyaWRlKTsKLSAgICAgICAgfQotICAgICAgICBl
bHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnZlcnRlci5jb252ZXJ0QXJyYXkoaW5wdXQs
IGlucHV0U3RyaWRlLCBjb3VudCwgbWFwUHRyKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1WZXJ0
ZXhCdWZmZXItPlVubG9jaygpOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICBFUlIoIlZlcnRleCBidWZmZXIgbm90IGluaXRpYWxpemVkLiIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFZlcnRleEJ1ZmZlcjk6
OnN0b3JlUmF3RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWdu
ZWQgaW50IG9mZnNldCkKLXsKLSAgICBpZiAobVZlcnRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAg
IERXT1JEIGxvY2tGbGFncyA9IG1EeW5hbWljVXNhZ2UgPyBEM0RMT0NLX05PT1ZFUldSSVRFIDog
MDsKLQotICAgICAgICB2b2lkICptYXBQdHIgPSBOVUxMOwotICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IG1WZXJ0ZXhCdWZmZXItPkxvY2sob2Zmc2V0LCBzaXplLCAmbWFwUHRyLCBsb2NrRmxhZ3Mp
OwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAg
RVJSKCJMb2NrIGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBtZW1jcHkobWFwUHRyLCBkYXRh
LCBzaXplKTsKLQotICAgICAgICBtVmVydGV4QnVmZmVyLT5VbmxvY2soKTsKLQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgRVJSKCJWZXJ0ZXgg
YnVmZmVyIG5vdCBpbml0aWFsaXplZC4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LX0KLQotYm9vbCBWZXJ0ZXhCdWZmZXI5OjpnZXRTcGFjZVJlcXVpcmVkKGNvbnN0IGdsOjpWZXJ0
ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTcGFj
ZVJlcXVpcmVkKSBjb25zdAotewotICAgIHJldHVybiBzcGFjZVJlcXVpcmVkKGF0dHJpYiwgY291
bnQsIGluc3RhbmNlcywgb3V0U3BhY2VSZXF1aXJlZCk7Ci19Ci0KLWJvb2wgVmVydGV4QnVmZmVy
OTo6cmVxdWlyZXNDb252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikg
Y29uc3QKLXsKLSAgICByZXR1cm4gIWZvcm1hdENvbnZlcnRlcihhdHRyaWIpLmlkZW50aXR5Owot
fQotCi11bnNpZ25lZCBpbnQgVmVydGV4QnVmZmVyOTo6Z2V0VmVydGV4U2l6ZShjb25zdCBnbDo6
VmVydGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0Ci17Ci0gICAgdW5zaWduZWQgaW50IHNwYWNl
UmVxdWlyZWQ7Ci0gICAgcmV0dXJuIGdldFNwYWNlUmVxdWlyZWQoYXR0cmliLCAxLCAwLCAmc3Bh
Y2VSZXF1aXJlZCkgPyBzcGFjZVJlcXVpcmVkIDogMDsKLX0KLQotRDNEREVDTFRZUEUgVmVydGV4
QnVmZmVyOTo6Z2V0RGVjbFR5cGUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBj
b25zdAotewotICAgIHJldHVybiBmb3JtYXRDb252ZXJ0ZXIoYXR0cmliKS5kM2REZWNsVHlwZTsK
LX0KLQotdW5zaWduZWQgaW50IFZlcnRleEJ1ZmZlcjk6OmdldEJ1ZmZlclNpemUoKSBjb25zdAot
ewotICAgIHJldHVybiBtQnVmZmVyU2l6ZTsKLX0KLQotYm9vbCBWZXJ0ZXhCdWZmZXI5OjpzZXRC
dWZmZXJTaXplKHVuc2lnbmVkIGludCBzaXplKQotewotICAgIGlmIChzaXplID4gbUJ1ZmZlclNp
emUpCi0gICAgewotICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZShzaXplLCBtRHluYW1pY1VzYWdl
KTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
fQotCi1ib29sIFZlcnRleEJ1ZmZlcjk6OmRpc2NhcmQoKQotewotICAgIGlmIChtVmVydGV4QnVm
ZmVyKQotICAgIHsKLSAgICAgICAgdm9pZCAqZHVtbXk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0
OwotCi0gICAgICAgIHJlc3VsdCA9IG1WZXJ0ZXhCdWZmZXItPkxvY2soMCwgMSwgJmR1bW15LCBE
M0RMT0NLX0RJU0NBUkQpOwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEVSUigiRGlzY2FyZCBsb2NrIGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4eCIs
IHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXN1bHQgPSBtVmVydGV4QnVmZmVyLT5VbmxvY2soKTsKLSAgICAgICAgaWYgKEZBSUxFRChy
ZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkRpc2NhcmQgdW5sb2NrIGZhaWxl
ZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAg
IHsKLSAgICAgICAgRVJSKCJWZXJ0ZXggYnVmZmVyIG5vdCBpbml0aWFsaXplZC4iKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotSURpcmVjdDNEVmVydGV4QnVmZmVyOSAqIFZl
cnRleEJ1ZmZlcjk6OmdldEJ1ZmZlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1WZXJ0ZXhCdWZm
ZXI7Ci19Ci0KLS8vIE1hcHBpbmcgZnJvbSBPcGVuR0wtRVMgdmVydGV4IGF0dHJpYiB0eXBlIHRv
IEQzRCBkZWNsIHR5cGU6Ci0vLwotLy8gQllURSAgICAgICAgICAgICAgICAgU0hPUlQgKENhc3Qp
Ci0vLyBCWVRFLW5vcm0gICAgICAgICAgICBGTE9BVCAoTm9ybWFsaXplKSAoY2FuJ3QgYmUgZXhh
Y3RseSByZXByZXNlbnRlZCBhcyBTSE9SVC1ub3JtKQotLy8gVU5TSUdORURfQllURSAgICAgICAg
VUJZVEU0IChJZGVudGl0eSkgb3IgU0hPUlQgKENhc3QpCi0vLyBVTlNJR05FRF9CWVRFLW5vcm0g
ICBVQllURTROIChJZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1hbGl6ZSkKLS8vIFNIT1JUICAgICAg
ICAgICAgICAgIFNIT1JUIChJZGVudGl0eSkKLS8vIFNIT1JULW5vcm0gICAgICAgICAgIFNIT1JU
LW5vcm0gKElkZW50aXR5KSBvciBGTE9BVCAoTm9ybWFsaXplKQotLy8gVU5TSUdORURfU0hPUlQg
ICAgICAgRkxPQVQgKENhc3QpCi0vLyBVTlNJR05FRF9TSE9SVC1ub3JtICBVU0hPUlQtbm9ybSAo
SWRlbnRpdHkpIG9yIEZMT0FUIChOb3JtYWxpemUpCi0vLyBGSVhFRCAobm90IGluIFdlYkdMKSBG
TE9BVCAoRml4ZWRUb0Zsb2F0KQotLy8gRkxPQVQgICAgICAgICAgICAgICAgRkxPQVQgKElkZW50
aXR5KQotCi0vLyBHTFRvQ1R5cGUgbWFwcyBmcm9tIEdMIHR5cGUgKGFzIEdMZW51bSkgdG8gdGhl
IEMgdHlwZWRlZi4KLXRlbXBsYXRlIDxHTGVudW0gR0xUeXBlPiBzdHJ1Y3QgR0xUb0NUeXBlIHsg
fTsKLQotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9CWVRFPiAgICAgICAgICAgeyB0
eXBlZGVmIEdMYnl0ZSB0eXBlOyAgICAgIH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBl
PEdMX1VOU0lHTkVEX0JZVEU+ICB7IHR5cGVkZWYgR0x1Ynl0ZSB0eXBlOyAgICAgfTsKLXRlbXBs
YXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfU0hPUlQ+ICAgICAgICAgIHsgdHlwZWRlZiBHTHNo
b3J0IHR5cGU7ICAgICB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9VTlNJR05F
RF9TSE9SVD4geyB0eXBlZGVmIEdMdXNob3J0IHR5cGU7ICAgIH07Ci10ZW1wbGF0ZSA8PiBzdHJ1
Y3QgR0xUb0NUeXBlPEdMX0ZJWEVEPiAgICAgICAgICB7IHR5cGVkZWYgR0x1aW50IHR5cGU7ICAg
ICAgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfRkxPQVQ+ICAgICAgICAgIHsg
dHlwZWRlZiBHTGZsb2F0IHR5cGU7ICAgICB9OwotCi0vLyBUaGlzIGRpZmZlcnMgZnJvbSBEM0RE
RUNMVFlQRSBpbiB0aGF0IGl0IGlzIHVuc2l6ZWQuIChTaXplIGV4cGFuc2lvbiBpcyBhcHBsaWVk
IGxhc3QuKQotZW51bSBEM0RWZXJ0ZXhUeXBlCi17Ci0gICAgRDNEVlRfRkxPQVQsCi0gICAgRDNE
VlRfU0hPUlQsCi0gICAgRDNEVlRfU0hPUlRfTk9STSwKLSAgICBEM0RWVF9VQllURSwKLSAgICBE
M0RWVF9VQllURV9OT1JNLAotICAgIEQzRFZUX1VTSE9SVF9OT1JNCi19OwotCi0vLyBEM0RUb0NU
eXBlIG1hcHMgZnJvbSBEM0QgdmVydGV4IHR5cGUgKGFzIGVudW0gRDNEVmVydGV4VHlwZSkgdG8g
dGhlIGNvcnJlc3BvbmRpbmcgQyB0eXBlLgotdGVtcGxhdGUgPHVuc2lnbmVkIGludCBEM0RUeXBl
PiBzdHJ1Y3QgRDNEVG9DVHlwZSB7IH07Ci0KLXRlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBl
PEQzRFZUX0ZMT0FUPiB7IHR5cGVkZWYgZmxvYXQgdHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVj
dCBEM0RUb0NUeXBlPEQzRFZUX1NIT1JUPiB7IHR5cGVkZWYgc2hvcnQgdHlwZTsgfTsKLXRlbXBs
YXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1NIT1JUX05PUk0+IHsgdHlwZWRlZiBzaG9y
dCB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfVUJZVEU+IHsg
dHlwZWRlZiB1bnNpZ25lZCBjaGFyIHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9D
VHlwZTxEM0RWVF9VQllURV9OT1JNPiB7IHR5cGVkZWYgdW5zaWduZWQgY2hhciB0eXBlOyB9Owot
dGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfVVNIT1JUX05PUk0+IHsgdHlwZWRl
ZiB1bnNpZ25lZCBzaG9ydCB0eXBlOyB9OwotCi0vLyBFbmNvZGUgdGhlIHR5cGUvc2l6ZSBjb21i
aW5hdGlvbnMgdGhhdCBEM0QgcGVybWl0cy4gRm9yIGVhY2ggdHlwZS9zaXplIGl0IGV4cGFuZHMg
dG8gYSB3aWRlbmVyIHRoYXQgd2lsbCBwcm92aWRlIHRoZSBhcHByb3ByaWF0ZSBmaW5hbCBzaXpl
LgotdGVtcGxhdGUgPHVuc2lnbmVkIGludCB0eXBlLCBpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVs
ZSB7IH07Ci0KLXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9GTE9B
VCwgc2l6ZT4gICAgICAgICAgOiBOb1dpZGVuPHNpemU+IHsgfTsKLXRlbXBsYXRlIDxpbnQgc2l6
ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9TSE9SVCwgc2l6ZT4gICAgICAgICAgOiBXaWRlblRv
RXZlbjxzaXplPiB7IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNE
VlRfU0hPUlRfTk9STSwgc2l6ZT4gICAgIDogV2lkZW5Ub0V2ZW48c2l6ZT4geyB9OwotdGVtcGxh
dGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1VCWVRFLCBzaXplPiAgICAgICAg
ICA6IFdpZGVuVG9Gb3VyPHNpemU+IHsgfTsKLXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdp
ZGVuUnVsZTxEM0RWVF9VQllURV9OT1JNLCBzaXplPiAgICAgOiBXaWRlblRvRm91cjxzaXplPiB7
IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfVVNIT1JUX05P
Uk0sIHNpemU+ICAgIDogV2lkZW5Ub0V2ZW48c2l6ZT4geyB9OwotCi0vLyBWZXJ0ZXhUeXBlRmxh
Z3MgZW5jb2RlcyB0aGUgRDNEQ0FQUzk6OkRlY2xUeXBlIGZsYWcgYW5kIHZlcnRleCBkZWNsYXJh
dGlvbiBmbGFnIGZvciBlYWNoIEQzRCB2ZXJ0ZXggdHlwZSAmIHNpemUgY29tYmluYXRpb24uCi10
ZW1wbGF0ZSA8dW5zaWduZWQgaW50IGQzZHR5cGUsIGludCBzaXplPiBzdHJ1Y3QgVmVydGV4VHlw
ZUZsYWdzIHsgfTsKLQotdGVtcGxhdGUgPHVuc2lnbmVkIGludCBfY2FwZmxhZywgdW5zaWduZWQg
aW50IF9kZWNsZmxhZz4KLXN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXIKLXsKLSAgICBlbnVt
IHsgY2FwZmxhZyA9IF9jYXBmbGFnIH07Ci0gICAgZW51bSB7IGRlY2xmbGFnID0gX2RlY2xmbGFn
IH07Ci19OwotCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FU
LCAxPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9GTE9BVDE+IHsgfTsK
LXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfRkxPQVQsIDI+IDogVmVy
dGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FUMj4geyB9OwotdGVtcGxhdGUg
PD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwgMz4gOiBWZXJ0ZXhUeXBlRmxh
Z3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQzPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
VmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FULCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjww
LCBEM0RERUNMVFlQRV9GTE9BVDQ+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBl
RmxhZ3M8RDNEVlRfU0hPUlQsIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xU
WVBFX1NIT1JUMj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RW
VF9TSE9SVCwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfU0hPUlQ0
PiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JUX05P
Uk0sIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19TSE9SVDJOLCBEM0RERUNM
VFlQRV9TSE9SVDJOPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQz
RFZUX1NIT1JUX05PUk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19TSE9S
VDROLCBEM0RERUNMVFlQRV9TSE9SVDROPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4
VHlwZUZsYWdzPEQzRFZUX1VCWVRFLCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENB
UFNfVUJZVEU0LCBEM0RERUNMVFlQRV9VQllURTQ+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBW
ZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVUJZVEVfTk9STSwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxw
ZXI8RDNERFRDQVBTX1VCWVRFNE4sIEQzRERFQ0xUWVBFX1VCWVRFNE4+IHsgfTsKLXRlbXBsYXRl
IDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVVNIT1JUX05PUk0sIDI+IDogVmVydGV4
VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VU0hPUlQyTiwgRDNEREVDTFRZUEVfVVNIT1JUMk4+
IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVVNIT1JUX05P
Uk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VU0hPUlQ0TiwgRDNEREVD
TFRZUEVfVVNIT1JUNE4+IHsgfTsKLQotCi0vLyBWZXJ0ZXhUeXBlTWFwcGluZyBtYXBzIEdMIHR5
cGUgJiBub3JtYWxpemVkIGZsYWcgdG8gcHJlZmVycmVkIGFuZCBmYWxsYmFjayBEM0QgdmVydGV4
IHR5cGVzIChhcyBEM0RWZXJ0ZXhUeXBlIGVudW1zKS4KLXRlbXBsYXRlIDxHTGVudW0gR0x0eXBl
LCBib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZyB7IH07Ci0KLXRlbXBs
YXRlIDxEM0RWZXJ0ZXhUeXBlIFByZWZlcnJlZCwgRDNEVmVydGV4VHlwZSBGYWxsYmFjayA9IFBy
ZWZlcnJlZD4KLXN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2UKLXsKLSAgICBlbnVtIHsgcHJl
ZmVycmVkID0gUHJlZmVycmVkIH07Ci0gICAgZW51bSB7IGZhbGxiYWNrID0gRmFsbGJhY2sgfTsK
LX07Ci0KLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9CWVRFLCBmYWxz
ZT4gICAgICAgICAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9T
SE9SVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FzdAotdGVtcGxhdGUgPD4gc3Ry
dWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX0JZVEUsIHRydWU+ICAgICAgICAgICAgICAgICAgICAg
ICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgICAg
ICAgICAgICAgICAvLyBOb3JtYWxpemUKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFw
cGluZzxHTF9VTlNJR05FRF9CWVRFLCBmYWxzZT4gICAgICAgICAgICAgICA6IFZlcnRleFR5cGVN
YXBwaW5nQmFzZTxEM0RWVF9VQllURSwgRDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgLy8gSWRl
bnRpdHksIENhc3QKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJ
R05FRF9CWVRFLCB0cnVlPiAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxE
M0RWVF9VQllURV9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAgICAgLy8gSWRlbnRpdHksIE5vcm1h
bGl6ZQotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1NIT1JULCBmYWxz
ZT4gICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1NI
T1JUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBJZGVudGl0eQotdGVtcGxhdGUgPD4g
c3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1NIT1JULCB0cnVlPiAgICAgICAgICAgICAgICAg
ICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1NIT1JUX05PUk0sIEQzRFZUX0ZM
T0FUPiB7IH07ICAgICAvLyBDYXN0LCBOb3JtYWxpemUKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0
ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9TSE9SVCwgZmFsc2U+ICAgICAgICAgICAgICA6IFZl
cnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQ2FzdAotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1VOU0lH
TkVEX1NIT1JULCB0cnVlPiAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQz
RFZUX1VTSE9SVF9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAgICAvLyBDYXN0LCBOb3JtYWxpemUK
LXRlbXBsYXRlIDxib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9G
SVhFRCwgbm9ybWFsaXplZD4gICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4g
eyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gRml4ZWRUb0Zsb2F0Ci10ZW1wbGF0ZSA8Ym9v
bCBub3JtYWxpemVkPiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfRkxPQVQsIG5vcm1hbGl6
ZWQ+ICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAg
ICAgICAgICAgICAgIC8vIElkZW50aXR5Ci0KLQotLy8gR2l2ZW4gYSBHTCB0eXBlICYgbm9ybSBm
bGFnIGFuZCBhIEQzRCB0eXBlLCBDb252ZXJzaW9uUnVsZSBwcm92aWRlcyB0aGUgdHlwZSBjb252
ZXJzaW9uIHJ1bGUgKENhc3QsIE5vcm1hbGl6ZSwgSWRlbnRpdHksIEZpeGVkVG9GbG9hdCkuCi0v
LyBUaGUgY29udmVyc2lvbiBydWxlcyB0aGVtc2VsdmVzIGFyZSBkZWZpbmVkIGluIHZlcnRleGNv
bnZlcnNpb24uaC4KLQotLy8gQWxtb3N0IGFsbCBjYXNlcyBhcmUgY292ZXJlZCBieSBDYXN0IChp
bmNsdWRpbmcgdGhvc2UgdGhhdCBhcmUgYWN0dWFsbHkgSWRlbnRpdHkgc2luY2UgQ2FzdDxULFQ+
IGtub3dzIGl0J3MgYW4gaWRlbnRpdHkgbWFwcGluZykuCi10ZW1wbGF0ZSA8R0xlbnVtIGZyb21U
eXBlLCBib29sIG5vcm1hbGl6ZWQsIHVuc2lnbmVkIGludCB0b1R5cGU+Ci1zdHJ1Y3QgQ29udmVy
c2lvblJ1bGUgOiBDYXN0PHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5cGUsIHR5cGVu
YW1lIEQzRFRvQ1R5cGU8dG9UeXBlPjo6dHlwZT4geyB9OwotCi0vLyBBbGwgY29udmVyc2lvbnMg
ZnJvbSBub3JtYWxpemVkIHR5cGVzIHRvIGZsb2F0IHVzZSB0aGUgTm9ybWFsaXplIG9wZXJhdG9y
LgotdGVtcGxhdGUgPEdMZW51bSBmcm9tVHlwZT4gc3RydWN0IENvbnZlcnNpb25SdWxlPGZyb21U
eXBlLCB0cnVlLCBEM0RWVF9GTE9BVD4gOiBOb3JtYWxpemU8dHlwZW5hbWUgR0xUb0NUeXBlPGZy
b21UeXBlPjo6dHlwZT4geyB9OwotCi0vLyBVc2UgYSBmdWxsIHNwZWNpYWxpemF0aW9uIGZvciB0
aGlzIHNvIHRoYXQgaXQgcHJlZmVyZW50aWFsbHkgbWF0Y2hlcyBhaGVhZCBvZiB0aGUgZ2VuZXJp
YyBub3JtYWxpemUtdG8tZmxvYXQgcnVsZXMuCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lv
blJ1bGU8R0xfRklYRUQsIHRydWUsIEQzRFZUX0ZMT0FUPiAgOiBGaXhlZFRvRmxvYXQ8R0xpbnQs
IDE2PiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklYRUQsIGZh
bHNlLCBEM0RWVF9GTE9BVD4gOiBGaXhlZFRvRmxvYXQ8R0xpbnQsIDE2PiB7IH07Ci0KLS8vIEEg
Mi1zdGFnZSBjb25zdHJ1Y3Rpb24gaXMgdXNlZCBmb3IgRGVmYXVsdFZlcnRleFZhbHVlcyBiZWNh
dXNlIGZsb2F0IG11c3QgdXNlIFNpbXBsZURlZmF1bHRWYWx1ZXMgKGkuZS4gMC8xKQotLy8gd2hl
dGhlciBpdCBpcyBub3JtYWxpemVkIG9yIG5vdC4KLXRlbXBsYXRlIDxjbGFzcyBULCBib29sIG5v
cm1hbGl6ZWQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyIHsgfTsKLQotdGVtcGxh
dGUgPGNsYXNzIFQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyPFQsIHRydWU+ICA6
IE5vcm1hbGl6ZWREZWZhdWx0VmFsdWVzPFQ+IHsgfTsKLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1
Y3QgRGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMjxULCBmYWxzZT4gOiBTaW1wbGVEZWZhdWx0VmFs
dWVzPFQ+IHsgfTsKLQotLy8gV29yayBvdXQgdGhlIGRlZmF1bHQgdmFsdWUgcnVsZSBmb3IgYSBE
M0QgdHlwZSAoZXhwcmVzc2VkIGFzIHRoZSBDIHR5cGUpIGFuZAotdGVtcGxhdGUgPGNsYXNzIFQs
IGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXMgOiBEZWZhdWx0VmVy
dGV4VmFsdWVzU3RhZ2UyPFQsIG5vcm1hbGl6ZWQ+IHsgfTsKLXRlbXBsYXRlIDxib29sIG5vcm1h
bGl6ZWQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzPGZsb2F0LCBub3JtYWxpemVkPiA6IFNp
bXBsZURlZmF1bHRWYWx1ZXM8ZmxvYXQ+IHsgfTsKLQotLy8gUG9saWN5IHJ1bGVzIGZvciB1c2Ug
d2l0aCBDb252ZXJ0ZXIsIHRvIGNob29zZSB3aGV0aGVyIHRvIHVzZSB0aGUgcHJlZmVycmVkIG9y
IGZhbGxiYWNrIGNvbnZlcnNpb24uCi0vLyBUaGUgZmFsbGJhY2sgY29udmVyc2lvbiBwcm9kdWNl
cyBhbiBvdXRwdXQgdGhhdCBhbGwgRDNEOSBkZXZpY2VzIG11c3Qgc3VwcG9ydC4KLXRlbXBsYXRl
IDxjbGFzcyBUPiBzdHJ1Y3QgVXNlUHJlZmVycmVkIHsgZW51bSB7IHR5cGUgPSBUOjpwcmVmZXJy
ZWQgfTsgfTsKLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgVXNlRmFsbGJhY2sgeyBlbnVtIHsg
dHlwZSA9IFQ6OmZhbGxiYWNrIH07IH07Ci0KLS8vIENvbnZlcnRlciB0aWVzIGl0IGFsbCB0b2dl
dGhlci4gR2l2ZW4gYW4gT3BlbkdMIHR5cGUvbm9ybS9zaXplIGFuZCBjaG9pY2Ugb2YgcHJlZmVy
cmVkL2ZhbGxiYWNrIGNvbnZlcnNpb24sCi0vLyBpdCBwcm92aWRlcyBhbGwgdGhlIG1lbWJlcnMg
b2YgdGhlIGFwcHJvcHJpYXRlIFZlcnRleERhdGFDb252ZXJ0ZXIsIHRoZSBEM0RDQVBTOTo6RGVj
bFR5cGVzIGZsYWcgaW4gY2FwIGZsYWcKLS8vIGFuZCB0aGUgRDNEREVDTFRZUEUgbWVtYmVyIG5l
ZWRlZCBmb3IgdGhlIHZlcnRleCBkZWNsYXJhdGlvbiBpbiBkZWNsZmxhZy4KLXRlbXBsYXRlIDxH
TGVudW0gZnJvbVR5cGUsIGJvb2wgbm9ybWFsaXplZCwgaW50IHNpemUsIHRlbXBsYXRlIDxjbGFz
cyBUPiBjbGFzcyBQcmVmZXJlbmNlUnVsZT4KLXN0cnVjdCBDb252ZXJ0ZXIKLSAgICA6IFZlcnRl
eERhdGFDb252ZXJ0ZXI8dHlwZW5hbWUgR0xUb0NUeXBlPGZyb21UeXBlPjo6dHlwZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2lkZW5SdWxlPFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBl
TWFwcGluZzxmcm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6dHlwZSwgc2l6ZT4sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgIENvbnZlcnNpb25SdWxlPGZyb21UeXBlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQcmVmZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8
ZnJvbVR5cGUsIG5vcm1hbGl6ZWQ+ID46OnR5cGU+LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICBEZWZhdWx0VmVydGV4VmFsdWVzPHR5cGVuYW1lIEQzRFRvQ1R5cGU8UHJlZmVyZW5jZVJ1bGU8
IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBlPjo6dHlwZSwg
bm9ybWFsaXplZCA+ID4KLXsKLXByaXZhdGU6Ci0gICAgZW51bSB7IGQzZHR5cGUgPSBQcmVmZXJl
bmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6ZWQ+ID46OnR5cGUg
fTsKLSAgICBlbnVtIHsgZDNkc2l6ZSA9IFdpZGVuUnVsZTxkM2R0eXBlLCBzaXplPjo6ZmluYWxX
aWR0aCB9OwotCi1wdWJsaWM6Ci0gICAgZW51bSB7IGNhcGZsYWcgPSBWZXJ0ZXhUeXBlRmxhZ3M8
ZDNkdHlwZSwgZDNkc2l6ZT46OmNhcGZsYWcgfTsKLSAgICBlbnVtIHsgZGVjbGZsYWcgPSBWZXJ0
ZXhUeXBlRmxhZ3M8ZDNkdHlwZSwgZDNkc2l6ZT46OmRlY2xmbGFnIH07Ci19OwotCi0vLyBJbml0
aWFsaXplIGEgVHJhbnNsYXRpb25JbmZvCi0jZGVmaW5lIFRSQU5TTEFUSU9OKHR5cGUsIG5vcm0s
IHNpemUsIHByZWZlcnJlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3Jt
LCBzaXplLCBwcmVmZXJyZWQ+OjppZGVudGl0eSwgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQ+OjpmaW5hbFNp
emUsICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIENvbnZlcnRlcjx0eXBlLCBu
b3JtLCBzaXplLCBwcmVmZXJyZWQ+Ojpjb252ZXJ0QXJyYXksICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgIHN0YXRpY19jYXN0PEQzRERFQ0xUWVBFPihDb252ZXJ0ZXI8dHlwZSwgbm9y
bSwgc2l6ZSwgcHJlZmVycmVkPjo6ZGVjbGZsYWcpICBcCi0gICAgfQotCi0jZGVmaW5lIFRSQU5T
TEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBub3JtLCBzaXplKSAgICBcCi0gICAgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBVc2VQcmVmZXJyZWQ+OjpjYXBmbGFn
LCBcCi0gICAgICAgIFRSQU5TTEFUSU9OKHR5cGUsIG5vcm0sIHNpemUsIFVzZVByZWZlcnJlZCks
ICAgICAgICBcCi0gICAgICAgIFRSQU5TTEFUSU9OKHR5cGUsIG5vcm0sIHNpemUsIFVzZUZhbGxi
YWNrKSAgICAgICAgICBcCi0gICAgfQotCi0jZGVmaW5lIFRSQU5TTEFUSU9OU19GT1JfVFlQRSh0
eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHsgVFJBTlNM
QVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAxKSwgVFJBTlNMQVRJT05fRk9S
X1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAyKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9S
TV9TSVpFKHR5cGUsIGZhbHNlLCAzKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5
cGUsIGZhbHNlLCA0KSB9LCBcCi0gICAgICAgIHsgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9T
SVpFKHR5cGUsIHRydWUsIDEpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwg
dHJ1ZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCB0cnVlLCAzKSwg
VFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRydWUsIDQpIH0sICAgICBcCi0g
ICAgfQotCi0jZGVmaW5lIFRSQU5TTEFUSU9OU19GT1JfVFlQRV9OT19OT1JNKHR5cGUpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHsgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9S
TV9TSVpFKHR5cGUsIGZhbHNlLCAxKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5
cGUsIGZhbHNlLCAyKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNl
LCAzKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCA0KSB9LCBc
Ci0gICAgICAgIHsgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAx
KSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAyKSwgVFJBTlNM
QVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAzKSwgVFJBTlNMQVRJT05fRk9S
X1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCA0KSB9LCBcCi0gICAgfQotCi1jb25zdCBWZXJ0
ZXhCdWZmZXI5OjpUcmFuc2xhdGlvbkRlc2NyaXB0aW9uIFZlcnRleEJ1ZmZlcjk6Om1Qb3NzaWJs
ZVRyYW5zbGF0aW9uc1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFU11bMl1bNF0gPSAvLyBbR0wg
dHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXplZF1bc2l6ZS0xXQot
ewotICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9CWVRFKSwKLSAgICBUUkFOU0xBVElPTlNf
Rk9SX1RZUEUoR0xfVU5TSUdORURfQllURSksCi0gICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKEdM
X1NIT1JUKSwKLSAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xfVU5TSUdORURfU0hPUlQpLAot
ICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRV9OT19OT1JNKEdMX0ZJWEVEKSwKLSAgICBUUkFOU0xB
VElPTlNfRk9SX1RZUEVfTk9fTk9STShHTF9GTE9BVCkKLX07Ci0KLXZvaWQgVmVydGV4QnVmZmVy
OTo6aW5pdGlhbGl6ZVRyYW5zbGF0aW9ucyhEV09SRCBkZWNsVHlwZXMpCi17Ci0gICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFUzsgaSsrKQot
ICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCAyOyBqKyspCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGsgPSAwOyBrIDwgNDsgaysrKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtUG9zc2libGVUcmFuc2xhdGlvbnNb
aV1bal1ba10uY2Fwc0ZsYWcgPT0gMCB8fCAoZGVjbFR5cGVzICYgbVBvc3NpYmxlVHJhbnNsYXRp
b25zW2ldW2pdW2tdLmNhcHNGbGFnKSAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgbUZvcm1hdENvbnZlcnRlcnNbaV1bal1ba10gPSBtUG9zc2libGVUcmFuc2xh
dGlvbnNbaV1bal1ba10ucHJlZmVycmVkQ29udmVyc2lvbjsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgbUZvcm1hdENvbnZlcnRlcnNbaV1bal1ba10gPSBtUG9zc2libGVUcmFuc2xhdGlvbnNbaV1b
al1ba10uZmFsbGJhY2tDb252ZXJzaW9uOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotdW5zaWduZWQgaW50IFZlcnRleEJ1ZmZlcjk6OnR5
cGVJbmRleChHTGVudW0gdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAg
Y2FzZSBHTF9CWVRFOiByZXR1cm4gMDsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURTogcmV0
dXJuIDE7Ci0gICAgICBjYXNlIEdMX1NIT1JUOiByZXR1cm4gMjsKLSAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlQ6IHJldHVybiAzOwotICAgICAgY2FzZSBHTF9GSVhFRDogcmV0dXJuIDQ7Ci0g
ICAgICBjYXNlIEdMX0ZMT0FUOiByZXR1cm4gNTsKLQotICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsgcmV0dXJuIDU7Ci0gICAgfQotfQotCi1jb25zdCBWZXJ0ZXhCdWZmZXI5OjpGb3JtYXRD
b252ZXJ0ZXIgJlZlcnRleEJ1ZmZlcjk6OmZvcm1hdENvbnZlcnRlcihjb25zdCBnbDo6VmVydGV4
QXR0cmlidXRlICZhdHRyaWJ1dGUpCi17Ci0gICAgcmV0dXJuIG1Gb3JtYXRDb252ZXJ0ZXJzW3R5
cGVJbmRleChhdHRyaWJ1dGUubVR5cGUpXVthdHRyaWJ1dGUubU5vcm1hbGl6ZWRdW2F0dHJpYnV0
ZS5tU2l6ZSAtIDFdOwotfQotCi1ib29sIFZlcnRleEJ1ZmZlcjk6OnNwYWNlUmVxdWlyZWQoY29u
c3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBzdGQ6OnNpemVfdCBjb3VudCwgR0xzaXpl
aSBpbnN0YW5jZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
aW50ICpvdXRTcGFjZVJlcXVpcmVkKQotewotICAgIHVuc2lnbmVkIGludCBlbGVtZW50U2l6ZSA9
IGZvcm1hdENvbnZlcnRlcihhdHRyaWIpLm91dHB1dEVsZW1lbnRTaXplOwotCi0gICAgaWYgKGF0
dHJpYi5tQXJyYXlFbmFibGVkKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgaW50IGVsZW1lbnRD
b3VudCA9IDA7Ci0gICAgICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBhdHRyaWIubURpdmlzb3Ig
PT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgZWxlbWVudENvdW50ID0gY291bnQ7Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoc3RhdGljX2Nh
c3Q8dW5zaWduZWQgaW50PihpbnN0YW5jZXMpIDwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZCBpbnQ+OjptYXgoKSAtIChhdHRyaWIubURpdmlzb3IgLSAxKSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAvLyBSb3VuZCB1cAotICAgICAgICAgICAgICAgIGVsZW1lbnRDb3VudCA9
IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGluc3RhbmNlcykgKyAoYXR0cmliLm1EaXZpc29y
IC0gMSkpIC8gYXR0cmliLm1EaXZpc29yOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGVsZW1lbnRDb3VudCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGludD4oaW5zdGFuY2VzKSAvIGF0dHJpYi5tRGl2aXNvcjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChlbGVtZW50U2l6ZSA8PSBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpIC8gZWxlbWVudENvdW50KQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAob3V0U3BhY2VSZXF1aXJlZCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAqb3V0U3BhY2VSZXF1aXJlZCA9IGVsZW1lbnRTaXplICogZWxlbWVudENvdW50
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGVs
ZW1lbnRTaXplID0gNDsKLSAgICAgICAgaWYgKG91dFNwYWNlUmVxdWlyZWQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgICpvdXRTcGFjZVJlcXVpcmVkID0gZWxlbWVudFNpemUgKiA0OwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXI5
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRl
eEJ1ZmZlcjkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY4ODExN2JkYTI1MGVj
OTExNzA2N2I4YTY4YTg0NGQ2NDBlMzBiMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL1ZlcnRleEJ1ZmZlcjkuaAorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLS8vCi0KLS8vIFZlcnRleEJ1ZmZlcjkuaDogRGVmaW5lcyB0aGUgRDNEOSBW
ZXJ0ZXhCdWZmZXIgaW1wbGVtZW50YXRpb24uCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVS
X1ZFUlRFWEJVRkZFUjlfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1ZFUlRFWEJVRkZF
UjlfSF8KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXIuaCIKLQot
bmFtZXNwYWNlIHJ4Ci17Ci1jbGFzcyBSZW5kZXJlcjk7Ci0KLWNsYXNzIFZlcnRleEJ1ZmZlcjkg
OiBwdWJsaWMgVmVydGV4QnVmZmVyCi17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBWZXJ0ZXhC
dWZmZXI5KHJ4OjpSZW5kZXJlcjkgKmNvbnN0IHJlbmRlcmVyKTsKLSAgICB2aXJ0dWFsIH5WZXJ0
ZXhCdWZmZXI5KCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQg
c2l6ZSwgYm9vbCBkeW5hbWljVXNhZ2UpOwotCi0gICAgc3RhdGljIFZlcnRleEJ1ZmZlcjkgKm1h
a2VWZXJ0ZXhCdWZmZXI5KFZlcnRleEJ1ZmZlciAqdmVydGV4QnVmZmVyKTsKLQotICAgIHZpcnR1
YWwgYm9vbCBzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAm
YXR0cmliLCBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0
KTsKLSAgICB2aXJ0dWFsIGJvb2wgc3RvcmVSYXdEYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2ln
bmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKLQotICAgIHZpcnR1YWwgYm9vbCBn
ZXRTcGFjZVJlcXVpcmVkKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xzaXpl
aSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCAqb3V0U3BhY2VSZXF1aXJl
ZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNDb252ZXJzaW9uKGNvbnN0IGds
OjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3Q7Ci0KLSAgICB1bnNpZ25lZCBpbnQgZ2V0
VmVydGV4U2l6ZShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0OwotICAg
IEQzRERFQ0xUWVBFIGdldERlY2xUeXBlKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJp
YikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRCdWZmZXJTaXplKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBib29sIHNldEJ1ZmZlclNpemUodW5zaWduZWQgaW50IHNpemUpOwot
ICAgIHZpcnR1YWwgYm9vbCBkaXNjYXJkKCk7Ci0KLSAgICBJRGlyZWN0M0RWZXJ0ZXhCdWZmZXI5
ICpnZXRCdWZmZXIoKSBjb25zdDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihWZXJ0ZXhCdWZmZXI5KTsKLQotICAgIHJ4OjpSZW5kZXJlcjkgKmNvbnN0IG1SZW5k
ZXJlcjsKLQotICAgIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKm1WZXJ0ZXhCdWZmZXI7Ci0gICAg
dW5zaWduZWQgaW50IG1CdWZmZXJTaXplOwotICAgIGJvb2wgbUR5bmFtaWNVc2FnZTsKLQotICAg
IC8vIEF0dHJpYnV0ZSBmb3JtYXQgY29udmVyc2lvbgotICAgIGVudW0geyBOVU1fR0xfVkVSVEVY
X0FUVFJJQl9UWVBFUyA9IDYgfTsKLQotICAgIHN0cnVjdCBGb3JtYXRDb252ZXJ0ZXIKLSAgICB7
Ci0gICAgICAgIGJvb2wgaWRlbnRpdHk7Ci0gICAgICAgIHN0ZDo6c2l6ZV90IG91dHB1dEVsZW1l
bnRTaXplOwotICAgICAgICB2b2lkICgqY29udmVydEFycmF5KShjb25zdCB2b2lkICppbiwgc3Rk
OjpzaXplX3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBuLCB2b2lkICpvdXQpOwotICAgICAgICBEM0RE
RUNMVFlQRSBkM2REZWNsVHlwZTsKLSAgICB9OwotCi0gICAgc3RhdGljIGJvb2wgbVRyYW5zbGF0
aW9uc0luaXRpYWxpemVkOwotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVUcmFuc2xhdGlvbnMo
RFdPUkQgZGVjbFR5cGVzKTsKLQotICAgIC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5
cGVJbmRleCgpXVtub3JtYWxpemVkXVtzaXplIC0gMV0KLSAgICBzdGF0aWMgRm9ybWF0Q29udmVy
dGVyIG1Gb3JtYXRDb252ZXJ0ZXJzW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsK
LQotICAgIHN0cnVjdCBUcmFuc2xhdGlvbkRlc2NyaXB0aW9uCi0gICAgewotICAgICAgICBEV09S
RCBjYXBzRmxhZzsKLSAgICAgICAgRm9ybWF0Q29udmVydGVyIHByZWZlcnJlZENvbnZlcnNpb247
Ci0gICAgICAgIEZvcm1hdENvbnZlcnRlciBmYWxsYmFja0NvbnZlcnNpb247Ci0gICAgfTsKLQot
ICAgIC8vIFRoaXMgdGFibGUgaXMgdXNlZCB0byBnZW5lcmF0ZSBtRm9ybWF0Q29udmVydGVycy4K
LSAgICAvLyBbR0wgdHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXpl
ZF1bc2l6ZSAtIDFdCi0gICAgc3RhdGljIGNvbnN0IFRyYW5zbGF0aW9uRGVzY3JpcHRpb24gbVBv
c3NpYmxlVHJhbnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsKLQot
ICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgdHlwZUluZGV4KEdMZW51bSB0eXBlKTsKLSAgICBzdGF0
aWMgY29uc3QgRm9ybWF0Q29udmVydGVyICZmb3JtYXRDb252ZXJ0ZXIoY29uc3QgZ2w6OlZlcnRl
eEF0dHJpYnV0ZSAmYXR0cmlidXRlKTsKLQotICAgIHN0YXRpYyBib29sIHNwYWNlUmVxdWlyZWQo
Y29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBzdGQ6OnNpemVfdCBjb3VudCwgR0xz
aXplaSBpbnN0YW5jZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgKm91dFNwYWNlUmVxdWlyZWQpOwotfTsKLQotfQotCi0jZW5kaWYgLy8gTElCR0xFU1YyX1JF
TkRFUkVSX1ZFUlRFWEJVRkZFUjlfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGVjbGFyYXRpb25DYWNoZS5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERlY2xh
cmF0aW9uQ2FjaGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjgzYTY0NzZl
YmNjNmJiOGQ2MTU1ZGU1NmJiMjYwMzYzMWQ5ZGY3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvVmVydGV4RGVjbGFyYXRpb25DYWNoZS5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwyMTcgKzAsMCBAQAotI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
Ly8gVmVydGV4RGVjbGFyYXRpb25DYWNoZS5jcHA6IEltcGxlbWVudHMgYSBoZWxwZXIgY2xhc3Mg
dG8gY29uc3RydWN0IGFuZCBjYWNoZSB2ZXJ0ZXggZGVjbGFyYXRpb25zLgotCi0jaW5jbHVkZSAi
bGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXI5LmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERlY2xhcmF0aW9uQ2FjaGUuaCIKLQotbmFtZXNw
YWNlIHJ4Ci17Ci0KLVZlcnRleERlY2xhcmF0aW9uQ2FjaGU6OlZlcnRleERlY2xhcmF0aW9uQ2Fj
aGUoKSA6IG1NYXhMcnUoMCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9WRVJURVhf
REVDTF9DQUNIRV9FTlRSSUVTOyBpKyspCi0gICAgewotICAgICAgICBtVmVydGV4RGVjbENhY2hl
W2ldLnZlcnRleERlY2xhcmF0aW9uID0gTlVMTDsKLSAgICAgICAgbVZlcnRleERlY2xDYWNoZVtp
XS5scnVDb3VudCA9IDA7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBnbDo6TUFY
X1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAgewotICAgICAgICBtQXBwbGllZFZCc1tpXS5zZXJp
YWwgPSAwOwotICAgIH0KLQotICAgIG1MYXN0U2V0VkRlY2wgPSBOVUxMOwotICAgIG1JbnN0YW5j
aW5nRW5hYmxlZCA9IHRydWU7Ci19Ci0KLVZlcnRleERlY2xhcmF0aW9uQ2FjaGU6On5WZXJ0ZXhE
ZWNsYXJhdGlvbkNhY2hlKCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9WRVJURVhf
REVDTF9DQUNIRV9FTlRSSUVTOyBpKyspCi0gICAgewotICAgICAgICBpZiAobVZlcnRleERlY2xD
YWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgbVZlcnRl
eERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlvbi0+UmVsZWFzZSgpOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi1HTGVudW0gVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6YXBwbHlEZWNsYXJhdGlv
bihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0cmlidXRl
c1tdLCBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgR0xzaXplaSBpbnN0YW5jZXMs
IEdMc2l6ZWkgKnJlcGVhdERyYXcpCi17Ci0gICAgKnJlcGVhdERyYXcgPSAxOwotCi0gICAgaW50
IGluZGV4ZWRBdHRyaWJ1dGUgPSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOwotICAgIGludCBpbnN0
YW5jZWRBdHRyaWJ1dGUgPSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOwotCi0gICAgaWYgKGluc3Rh
bmNlcyA+IDApCi0gICAgewotICAgICAgICAvLyBGaW5kIGFuIGluZGV4ZWQgYXR0cmlidXRlIHRv
IGJlIG1hcHBlZCB0byBEM0Qgc3RyZWFtIDAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBn
bDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChh
dHRyaWJ1dGVzW2ldLmFjdGl2ZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAo
aW5kZXhlZEF0dHJpYnV0ZSA9PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTICYmIGF0dHJpYnV0ZXNb
aV0uZGl2aXNvciA9PSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
aW5kZXhlZEF0dHJpYnV0ZSA9IGk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGluc3RhbmNlZEF0dHJpYnV0ZSA9PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTICYm
IGF0dHJpYnV0ZXNbaV0uZGl2aXNvciAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgaW5zdGFuY2VkQXR0cmlidXRlID0gaTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgaWYgKGluZGV4ZWRBdHRyaWJ1dGUgIT0gZ2w6Ok1BWF9WRVJURVhfQVRU
UklCUyAmJiBpbnN0YW5jZWRBdHRyaWJ1dGUgIT0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgLy8gRm91bmQgYm90aCBhbiBpbmRleGVkIGFuZCBp
bnN0YW5jZWQgYXR0cmlidXRlCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoaW5kZXhlZEF0dHJpYnV0ZSA9PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBEM0RWRVJURVhFTEVNRU5UOSBlbGVtZW50c1tnbDo6TUFYX1ZFUlRFWF9BVFRS
SUJTICsgMV07Ci0gICAgRDNEVkVSVEVYRUxFTUVOVDkgKmVsZW1lbnQgPSAmZWxlbWVudHNbMF07
Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykK
LSAgICB7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmFjdGl2ZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgLy8gRGlyZWN0bHkgYmluZGluZyB0aGUgc3RvcmFnZSBidWZmZXIgaXMgbm90IHN1
cHBvcnRlZCBmb3IgZDNkOQotICAgICAgICAgICAgQVNTRVJUKGF0dHJpYnV0ZXNbaV0uc3RvcmFn
ZSA9PSBOVUxMKTsKLQotICAgICAgICAgICAgaW50IHN0cmVhbSA9IGk7Ci0KLSAgICAgICAgICAg
IGlmIChpbnN0YW5jZXMgPiAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIER1
ZSB0byBhIGJ1ZyBvbiBBVEkgY2FyZHMgd2UgY2FuJ3QgZW5hYmxlIGluc3RhbmNpbmcgd2hlbiBu
b25lIG9mIHRoZSBhdHRyaWJ1dGVzIGFyZSBpbnN0YW5jZWQuCi0gICAgICAgICAgICAgICAgaWYg
KGluc3RhbmNlZEF0dHJpYnV0ZSA9PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgKnJlcGVhdERyYXcgPSBpbnN0YW5jZXM7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpID09IGluZGV4ZWRBdHRyaWJ1dGUpCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9IDA7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaSA9PSAwKQot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSBp
bmRleGVkQXR0cmlidXRlOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgVUlOVCBmcmVxdWVuY3kgPSAxOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uZGl2aXNvciA9PSAwKQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcmVxdWVuY3kgPSBEM0RTVFJFQU1T
T1VSQ0VfSU5ERVhFRERBVEEgfCBpbnN0YW5jZXM7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBmcmVxdWVuY3kgPSBEM0RTVFJFQU1TT1VSQ0VfSU5TVEFOQ0VEQVRBIHwg
YXR0cmlidXRlc1tpXS5kaXZpc29yOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZy
ZXEoc3RyZWFtLCBmcmVxdWVuY3kpOwotICAgICAgICAgICAgICAgICAgICBtSW5zdGFuY2luZ0Vu
YWJsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgVmVydGV4QnVmZmVyOSAqdmVydGV4QnVmZmVyID0gVmVydGV4QnVmZmVyOTo6bWFrZVZl
cnRleEJ1ZmZlcjkoYXR0cmlidXRlc1tpXS52ZXJ0ZXhCdWZmZXIpOwotCi0gICAgICAgICAgICBp
ZiAobUFwcGxpZWRWQnNbc3RyZWFtXS5zZXJpYWwgIT0gYXR0cmlidXRlc1tpXS5zZXJpYWwgfHwK
LSAgICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJlYW1dLnN0cmlkZSAhPSBhdHRyaWJ1dGVz
W2ldLnN0cmlkZSB8fAotICAgICAgICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVhbV0ub2Zmc2V0
ICE9IGF0dHJpYnV0ZXNbaV0ub2Zmc2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGRldmljZS0+U2V0U3RyZWFtU291cmNlKHN0cmVhbSwgdmVydGV4QnVmZmVyLT5nZXRCdWZmZXIo
KSwgYXR0cmlidXRlc1tpXS5vZmZzZXQsIGF0dHJpYnV0ZXNbaV0uc3RyaWRlKTsKLSAgICAgICAg
ICAgICAgICBtQXBwbGllZFZCc1tzdHJlYW1dLnNlcmlhbCA9IGF0dHJpYnV0ZXNbaV0uc2VyaWFs
OwotICAgICAgICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVhbV0uc3RyaWRlID0gYXR0cmlidXRl
c1tpXS5zdHJpZGU7Ci0gICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5vZmZzZXQg
PSBhdHRyaWJ1dGVzW2ldLm9mZnNldDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZWxl
bWVudC0+U3RyZWFtID0gc3RyZWFtOwotICAgICAgICAgICAgZWxlbWVudC0+T2Zmc2V0ID0gMDsK
LSAgICAgICAgICAgIGVsZW1lbnQtPlR5cGUgPSBhdHRyaWJ1dGVzW2ldLmF0dHJpYnV0ZS0+bUFy
cmF5RW5hYmxlZCA/IHZlcnRleEJ1ZmZlci0+Z2V0RGVjbFR5cGUoKmF0dHJpYnV0ZXNbaV0uYXR0
cmlidXRlKSA6IEQzRERFQ0xUWVBFX0ZMT0FUNDsKLSAgICAgICAgICAgIGVsZW1lbnQtPk1ldGhv
ZCA9IEQzRERFQ0xNRVRIT0RfREVGQVVMVDsKLSAgICAgICAgICAgIGVsZW1lbnQtPlVzYWdlID0g
RDNEREVDTFVTQUdFX1RFWENPT1JEOwotICAgICAgICAgICAgZWxlbWVudC0+VXNhZ2VJbmRleCA9
IHByb2dyYW1CaW5hcnktPmdldFNlbWFudGljSW5kZXgoaSk7Ci0gICAgICAgICAgICBlbGVtZW50
Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoaW5zdGFuY2VzID09IDAgfHwgaW5zdGFu
Y2VkQXR0cmlidXRlID09IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgewotICAgICAgICBp
ZiAobUluc3RhbmNpbmdFbmFibGVkKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoaSwgMSk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIG1JbnN0YW5jaW5nRW5hYmxlZCA9IGZhbHNlOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IEQzRFZFUlRFWEVMRU1FTlQ5IGVuZCA9IEQz
RERFQ0xfRU5EKCk7Ci0gICAgKihlbGVtZW50KyspID0gZW5kOwotCi0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUzsgaSsrKQotICAgIHsKLSAgICAg
ICAgVmVydGV4RGVjbENhY2hlRW50cnkgKmVudHJ5ID0gJm1WZXJ0ZXhEZWNsQ2FjaGVbaV07Ci0g
ICAgICAgIGlmIChtZW1jbXAoZW50cnktPmNhY2hlZEVsZW1lbnRzLCBlbGVtZW50cywgKGVsZW1l
bnQgLSBlbGVtZW50cykgKiBzaXplb2YoRDNEVkVSVEVYRUxFTUVOVDkpKSA9PSAwICYmIGVudHJ5
LT52ZXJ0ZXhEZWNsYXJhdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgZW50cnktPmxydUNv
dW50ID0gKyttTWF4THJ1OwotICAgICAgICAgICAgaWYoZW50cnktPnZlcnRleERlY2xhcmF0aW9u
ICE9IG1MYXN0U2V0VkRlY2wpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZGV2aWNl
LT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbihlbnRyeS0+dmVydGV4RGVjbGFyYXRpb24pOwotICAgICAg
ICAgICAgICAgIG1MYXN0U2V0VkRlY2wgPSBlbnRyeS0+dmVydGV4RGVjbGFyYXRpb247Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBHTF9OT19FUlJPUjsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIFZlcnRleERlY2xDYWNoZUVudHJ5ICpsYXN0Q2FjaGUgPSBtVmVydGV4RGVj
bENhY2hlOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVf
RU5UUklFUzsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKG1WZXJ0ZXhEZWNsQ2FjaGVbaV0ubHJ1
Q291bnQgPCBsYXN0Q2FjaGUtPmxydUNvdW50KQotICAgICAgICB7Ci0gICAgICAgICAgICBsYXN0
Q2FjaGUgPSAmbVZlcnRleERlY2xDYWNoZVtpXTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
IChsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uICE9IE5VTEwpCi0gICAgewotICAgICAgICBs
YXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uLT5SZWxlYXNlKCk7Ci0gICAgICAgIGxhc3RDYWNo
ZS0+dmVydGV4RGVjbGFyYXRpb24gPSBOVUxMOwotICAgICAgICAvLyBtTGFzdFNldFZEZWNsIGlz
IHNldCB0byB0aGUgcmVwbGFjZW1lbnQsIHNvIHdlIGRvbid0IGhhdmUgdG8gd29ycnkKLSAgICAg
ICAgLy8gYWJvdXQgaXQuCi0gICAgfQotCi0gICAgbWVtY3B5KGxhc3RDYWNoZS0+Y2FjaGVkRWxl
bWVudHMsIGVsZW1lbnRzLCAoZWxlbWVudCAtIGVsZW1lbnRzKSAqIHNpemVvZihEM0RWRVJURVhF
TEVNRU5UOSkpOwotICAgIGRldmljZS0+Q3JlYXRlVmVydGV4RGVjbGFyYXRpb24oZWxlbWVudHMs
ICZsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uKTsKLSAgICBkZXZpY2UtPlNldFZlcnRleERl
Y2xhcmF0aW9uKGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24pOwotICAgIG1MYXN0U2V0VkRl
Y2wgPSBsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uOwotICAgIGxhc3RDYWNoZS0+bHJ1Q291
bnQgPSArK21NYXhMcnU7Ci0KLSAgICByZXR1cm4gR0xfTk9fRVJST1I7Ci19Ci0KLXZvaWQgVmVy
dGV4RGVjbGFyYXRpb25DYWNoZTo6bWFya1N0YXRlRGlydHkoKQotewotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAgICAgICAgbUFw
cGxpZWRWQnNbaV0uc2VyaWFsID0gMDsKLSAgICB9Ci0KLSAgICBtTGFzdFNldFZEZWNsID0gTlVM
TDsKLSAgICBtSW5zdGFuY2luZ0VuYWJsZWQgPSB0cnVlOyAgIC8vIEZvcmNlcyBpdCB0byBiZSBk
aXNhYmxlZCB3aGVuIG5vdCB1c2VkCi19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGVjbGFyYXRpb25DYWNoZS5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhE
ZWNsYXJhdGlvbkNhY2hlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmYzAyNGE5
YmFiNDhiMTljMDZhYjk3NTcwZThiNWQ1NDg3MTMxODcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw1OCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVmVydGV4RGVjbGFyYXRpb25DYWNoZS5o
OiBEZWZpbmVzIGEgaGVscGVyIGNsYXNzIHRvIGNvbnN0cnVjdCBhbmQgY2FjaGUgdmVydGV4IGRl
Y2xhcmF0aW9ucy4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfVkVSVEVYREVDTEFSQVRJ
T05DQUNIRV9IXwotI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfVkVSVEVYREVDTEFSQVRJT05D
QUNIRV9IXwotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERhdGFNYW5hZ2Vy
LmgiCi0KLW5hbWVzcGFjZSBnbAotewotY2xhc3MgVmVydGV4RGF0YU1hbmFnZXI7Ci19Ci0KLW5h
bWVzcGFjZSByeAotewotCi1jbGFzcyBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlCi17Ci0gIHB1Ymxp
YzoKLSAgICBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKCk7Ci0gICAgflZlcnRleERlY2xhcmF0aW9u
Q2FjaGUoKTsKLQotICAgIEdMZW51bSBhcHBseURlY2xhcmF0aW9uKElEaXJlY3QzRERldmljZTkg
KmRldmljZSwgVHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW10sIGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5LCBHTHNpemVpIGluc3RhbmNlcywgR0xzaXplaSAqcmVwZWF0RHJh
dyk7Ci0KLSAgICB2b2lkIG1hcmtTdGF0ZURpcnR5KCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBVSU5U
IG1NYXhMcnU7Ci0KLSAgICBlbnVtIHsgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVMgPSAz
MiB9OwotCi0gICAgc3RydWN0IFZCRGF0YQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgaW50IHNl
cmlhbDsKLSAgICAgICAgdW5zaWduZWQgaW50IHN0cmlkZTsKLSAgICAgICAgdW5zaWduZWQgaW50
IG9mZnNldDsKLSAgICB9OwotCi0gICAgVkJEYXRhIG1BcHBsaWVkVkJzW2dsOjpNQVhfVkVSVEVY
X0FUVFJJQlNdOwotICAgIElEaXJlY3QzRFZlcnRleERlY2xhcmF0aW9uOSAqbUxhc3RTZXRWRGVj
bDsKLSAgICBib29sIG1JbnN0YW5jaW5nRW5hYmxlZDsKLQotICAgIHN0cnVjdCBWZXJ0ZXhEZWNs
Q2FjaGVFbnRyeQotICAgIHsKLSAgICAgICAgRDNEVkVSVEVYRUxFTUVOVDkgY2FjaGVkRWxlbWVu
dHNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCUyArIDFdOwotICAgICAgICBVSU5UIGxydUNvdW50Owot
ICAgICAgICBJRGlyZWN0M0RWZXJ0ZXhEZWNsYXJhdGlvbjkgKnZlcnRleERlY2xhcmF0aW9uOwot
ICAgIH0gbVZlcnRleERlY2xDYWNoZVtOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFU107Ci19
OwotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfVkVSVEVYREVDTEFSQVRJT05D
QUNIRV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9CdWZmZXJTdG9yYWdlMTEuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9CdWZmZXJTdG9yYWdlMTEuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjMxZDViOGI4ODY4ZWNiOGY4ZTdmNjI2MWQwZTI5MWMwZDUxZmM1YjkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL0J1ZmZlclN0b3JhZ2UxMS5jcHAKQEAgLTAsMCArMSwzNjYgQEAKKyNpbmNsdWRl
ICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIEJ1ZmZlclN0b3JhZ2UxMS5jcHAg
RGVmaW5lcyB0aGUgQnVmZmVyU3RvcmFnZTExIGNsYXNzLgorCisjaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL0J1ZmZlclN0b3JhZ2UxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9t
YWluLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIK
KworbmFtZXNwYWNlIHJ4Cit7CisKK0J1ZmZlclN0b3JhZ2UxMTo6QnVmZmVyU3RvcmFnZTExKFJl
bmRlcmVyMTEgKnJlbmRlcmVyKQoreworICAgIG1SZW5kZXJlciA9IHJlbmRlcmVyOworCisgICAg
bVN0YWdpbmdCdWZmZXIgPSBOVUxMOworICAgIG1TdGFnaW5nQnVmZmVyU2l6ZSA9IDA7CisKKyAg
ICBtU2l6ZSA9IDA7CisKKyAgICBtUmVzb2x2ZWREYXRhID0gTlVMTDsKKyAgICBtUmVzb2x2ZWRE
YXRhU2l6ZSA9IDA7CisgICAgbVJlc29sdmVkRGF0YVZhbGlkID0gZmFsc2U7CisKKyAgICBtUmVh
ZFVzYWdlQ291bnQgPSAwOworICAgIG1Xcml0ZVVzYWdlQ291bnQgPSAwOworfQorCitCdWZmZXJT
dG9yYWdlMTE6On5CdWZmZXJTdG9yYWdlMTEoKQoreworICAgIFNhZmVSZWxlYXNlKG1TdGFnaW5n
QnVmZmVyKTsKKworICAgIGlmIChtUmVzb2x2ZWREYXRhKQorICAgIHsKKyAgICAgICAgZnJlZSht
UmVzb2x2ZWREYXRhKTsKKyAgICAgICAgbVJlc29sdmVkRGF0YSA9IE5VTEw7CisgICAgfQorCisg
ICAgZm9yIChhdXRvIGl0ID0gbURpcmVjdEJ1ZmZlcnMuYmVnaW4oKTsgaXQgIT0gbURpcmVjdEJ1
ZmZlcnMuZW5kKCk7IGl0KyspCisgICAgeworICAgICAgICBTYWZlRGVsZXRlKGl0LT5zZWNvbmQp
OworICAgIH0KK30KKworQnVmZmVyU3RvcmFnZTExICpCdWZmZXJTdG9yYWdlMTE6Om1ha2VCdWZm
ZXJTdG9yYWdlMTEoQnVmZmVyU3RvcmFnZSAqYnVmZmVyU3RvcmFnZSkKK3sKKyAgICBBU1NFUlQo
SEFTX0RZTkFNSUNfVFlQRShCdWZmZXJTdG9yYWdlMTEqLCBidWZmZXJTdG9yYWdlKSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEJ1ZmZlclN0b3JhZ2UxMSo+KGJ1ZmZlclN0b3JhZ2UpOworfQor
Cit2b2lkICpCdWZmZXJTdG9yYWdlMTE6OmdldERhdGEoKQoreworICAgIEFTU0VSVChtU3RhZ2lu
Z0J1ZmZlcik7CisKKyAgICBpZiAoIW1SZXNvbHZlZERhdGFWYWxpZCkKKyAgICB7CisgICAgICAg
IElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICAgICAg
SUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4
dCgpOworICAgICAgICBIUkVTVUxUIHJlc3VsdDsKKworICAgICAgICBpZiAoIW1SZXNvbHZlZERh
dGEgfHwgbVJlc29sdmVkRGF0YVNpemUgPCBtU3RhZ2luZ0J1ZmZlclNpemUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGZyZWUobVJlc29sdmVkRGF0YSk7CisgICAgICAgICAgICBtUmVzb2x2ZWRE
YXRhID0gbWFsbG9jKG1TaXplKTsKKyAgICAgICAgICAgIG1SZXNvbHZlZERhdGFTaXplID0gbVNp
emU7CisgICAgICAgIH0KKworICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVk
UmVzb3VyY2U7CisgICAgICAgIHJlc3VsdCA9IGNvbnRleHQtPk1hcChtU3RhZ2luZ0J1ZmZlciwg
MCwgRDNEMTFfTUFQX1JFQUQsIDAsICZtYXBwZWRSZXNvdXJjZSk7CisgICAgICAgIGlmIChGQUlM
RUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZLCAodm9pZCopTlVMTCk7CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHko
bVJlc29sdmVkRGF0YSwgbWFwcGVkUmVzb3VyY2UucERhdGEsIG1TaXplKTsKKworICAgICAgICBj
b250ZXh0LT5Vbm1hcChtU3RhZ2luZ0J1ZmZlciwgMCk7CisKKyAgICAgICAgbVJlc29sdmVkRGF0
YVZhbGlkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBtUmVhZFVzYWdlQ291bnQgPSAwOworCisgICAg
cmV0dXJuIG1SZXNvbHZlZERhdGE7Cit9CisKK3ZvaWQgQnVmZmVyU3RvcmFnZTExOjpzZXREYXRh
KGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0
KQoreworICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsK
KyAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VD
b250ZXh0KCk7CisgICAgSFJFU1VMVCByZXN1bHQ7CisKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQg
cmVxdWlyZWRTdGFnaW5nQnVmZmVyU2l6ZSA9IHNpemUgKyBvZmZzZXQ7CisgICAgY29uc3QgYm9v
bCBjcmVhdGVTdGFnaW5nQnVmZmVyID0gIW1TdGFnaW5nQnVmZmVyIHx8IG1TdGFnaW5nQnVmZmVy
U2l6ZSA8IHJlcXVpcmVkU3RhZ2luZ0J1ZmZlclNpemU7CisKKyAgICBpZiAoY3JlYXRlU3RhZ2lu
Z0J1ZmZlcikKKyAgICB7CisgICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIGJ1ZmZlckRlc2M7Cisg
ICAgICAgIGJ1ZmZlckRlc2MuQnl0ZVdpZHRoID0gcmVxdWlyZWRTdGFnaW5nQnVmZmVyU2l6ZTsK
KyAgICAgICAgYnVmZmVyRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX1NUQUdJTkc7CisgICAgICAg
IGJ1ZmZlckRlc2MuQmluZEZsYWdzID0gMDsKKyAgICAgICAgYnVmZmVyRGVzYy5DUFVBY2Nlc3NG
bGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfUkVBRCB8IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7Cisg
ICAgICAgIGJ1ZmZlckRlc2MuTWlzY0ZsYWdzID0gMDsKKyAgICAgICAgYnVmZmVyRGVzYy5TdHJ1
Y3R1cmVCeXRlU3RyaWRlID0gMDsKKworICAgICAgICBIUkVTVUxUIHJlc3VsdDsKKyAgICAgICAg
SUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworICAgICAgICBJ
RDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0
KCk7CisgICAgICAgIElEM0QxMUJ1ZmZlciAqbmV3U3RhZ2luZ0J1ZmZlcjsKKworICAgICAgICBp
ZiAoZGF0YSAmJiBvZmZzZXQgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgRDNEMTFfU1VC
UkVTT1VSQ0VfREFUQSBpbml0aWFsRGF0YTsKKyAgICAgICAgICAgIGluaXRpYWxEYXRhLnBTeXNN
ZW0gPSBkYXRhOworICAgICAgICAgICAgaW5pdGlhbERhdGEuU3lzTWVtUGl0Y2ggPSByZXF1aXJl
ZFN0YWdpbmdCdWZmZXJTaXplOworICAgICAgICAgICAgaW5pdGlhbERhdGEuU3lzTWVtU2xpY2VQ
aXRjaCA9IDA7CisKKyAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZi
dWZmZXJEZXNjLCAmaW5pdGlhbERhdGEsICZuZXdTdGFnaW5nQnVmZmVyKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3Jl
YXRlQnVmZmVyKCZidWZmZXJEZXNjLCBOVUxMLCAmbmV3U3RhZ2luZ0J1ZmZlcik7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1TdGFnaW5nQnVmZmVyU2l6ZSA9IDA7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisKKyAgICAgICAgbVN0YWdpbmdCdWZmZXJTaXpl
ID0gcmVxdWlyZWRTdGFnaW5nQnVmZmVyU2l6ZTsKKworICAgICAgICBpZiAobVN0YWdpbmdCdWZm
ZXIgJiYgb2Zmc2V0ID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gSWYgb2Zmc2V0IGlz
IGdyZWF0ZXIgdGhhbiB6ZXJvIGFuZCB0aGUgYnVmZmVyIGlzIG5vbi1udWxsLCBuZWVkIHRvIHBy
ZXNlcnZlIHRoZSBkYXRhIGZyb20KKyAgICAgICAgICAgIC8vIHRoZSBvbGQgYnVmZmVyIHVwIHRv
IG9mZnNldAorICAgICAgICAgICAgRDNEMTFfQk9YIHNyY0JveDsKKyAgICAgICAgICAgIHNyY0Jv
eC5sZWZ0ID0gMDsKKyAgICAgICAgICAgIHNyY0JveC5yaWdodCA9IHN0ZDo6bWluKG9mZnNldCwg
cmVxdWlyZWRTdGFnaW5nQnVmZmVyU2l6ZSk7CisgICAgICAgICAgICBzcmNCb3gudG9wID0gMDsK
KyAgICAgICAgICAgIHNyY0JveC5ib3R0b20gPSAxOworICAgICAgICAgICAgc3JjQm94LmZyb250
ID0gMDsKKyAgICAgICAgICAgIHNyY0JveC5iYWNrID0gMTsKKworICAgICAgICAgICAgY29udGV4
dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKG5ld1N0YWdpbmdCdWZmZXIsIDAsIDAsIDAsIDAsIG1T
dGFnaW5nQnVmZmVyLCAwLCAmc3JjQm94KTsKKyAgICAgICAgfQorCisgICAgICAgIFNhZmVSZWxl
YXNlKG1TdGFnaW5nQnVmZmVyKTsKKyAgICAgICAgbVN0YWdpbmdCdWZmZXIgPSBuZXdTdGFnaW5n
QnVmZmVyOworICAgIH0KKworICAgIGlmIChkYXRhICYmIChvZmZzZXQgIT0gMCB8fCAhY3JlYXRl
U3RhZ2luZ0J1ZmZlcikpCisgICAgeworICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0Ug
bWFwcGVkUmVzb3VyY2U7CisgICAgICAgIHJlc3VsdCA9IGNvbnRleHQtPk1hcChtU3RhZ2luZ0J1
ZmZlciwgMCwgRDNEMTFfTUFQX1dSSVRFLCAwLCAmbWFwcGVkUmVzb3VyY2UpOworICAgICAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBjaGFy
ICpvZmZzZXRCdWZmZXJQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyICo+
KG1hcHBlZFJlc291cmNlLnBEYXRhKSArIG9mZnNldDsKKyAgICAgICAgbWVtY3B5KG9mZnNldEJ1
ZmZlclBvaW50ZXIsIGRhdGEsIHNpemUpOworCisgICAgICAgIGNvbnRleHQtPlVubWFwKG1TdGFn
aW5nQnVmZmVyLCAwKTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8gaXQgPSBtRGlyZWN0QnVmZmVy
cy5iZWdpbigpOyBpdCAhPSBtRGlyZWN0QnVmZmVycy5lbmQoKTsgaXQrKykKKyAgICB7CisgICAg
ICAgIGl0LT5zZWNvbmQtPm1hcmtEaXJ0eSgpOworICAgIH0KKworICAgIG1TaXplID0gc3RkOjpt
YXgobVNpemUsIHJlcXVpcmVkU3RhZ2luZ0J1ZmZlclNpemUpOworICAgIG1Xcml0ZVVzYWdlQ291
bnQgPSAwOworCisgICAgbVJlc29sdmVkRGF0YVZhbGlkID0gZmFsc2U7Cit9CisKK3ZvaWQgQnVm
ZmVyU3RvcmFnZTExOjpjb3B5RGF0YShCdWZmZXJTdG9yYWdlKiBzb3VyY2VTdG9yYWdlLCB1bnNp
Z25lZCBpbnQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgc291cmNlT2Zmc2V0LCB1bnNpZ25lZCBpbnQgZGVzdE9mZnNldCkKK3sKKyAgICBCdWZmZXJT
dG9yYWdlMTEqIHNvdXJjZSA9IG1ha2VCdWZmZXJTdG9yYWdlMTEoc291cmNlU3RvcmFnZSk7Cisg
ICAgaWYgKHNvdXJjZSkKKyAgICB7CisgICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRl
eHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKKworICAgICAgICBEM0QxMV9CT1gg
c3JjQm94OworICAgICAgICBzcmNCb3gubGVmdCA9IHNvdXJjZU9mZnNldDsKKyAgICAgICAgc3Jj
Qm94LnJpZ2h0ID0gc291cmNlT2Zmc2V0ICsgc2l6ZTsKKyAgICAgICAgc3JjQm94LnRvcCA9IDA7
CisgICAgICAgIHNyY0JveC5ib3R0b20gPSAxOworICAgICAgICBzcmNCb3guZnJvbnQgPSAwOwor
ICAgICAgICBzcmNCb3guYmFjayA9IDE7CisKKyAgICAgICAgQVNTRVJUKG1TdGFnaW5nQnVmZmVy
ICYmIHNvdXJjZS0+bVN0YWdpbmdCdWZmZXIpOworICAgICAgICBjb250ZXh0LT5Db3B5U3VicmVz
b3VyY2VSZWdpb24obVN0YWdpbmdCdWZmZXIsIDAsIGRlc3RPZmZzZXQsIDAsIDAsIHNvdXJjZS0+
bVN0YWdpbmdCdWZmZXIsIDAsICZzcmNCb3gpOworICAgIH0KK30KKwordm9pZCBCdWZmZXJTdG9y
YWdlMTE6OmNsZWFyKCkKK3sKKyAgICBtUmVzb2x2ZWREYXRhVmFsaWQgPSBmYWxzZTsKKyAgICBt
U2l6ZSA9IDA7Cit9CisKK3Vuc2lnbmVkIGludCBCdWZmZXJTdG9yYWdlMTE6OmdldFNpemUoKSBj
b25zdAoreworICAgIHJldHVybiBtU2l6ZTsKK30KKworYm9vbCBCdWZmZXJTdG9yYWdlMTE6OnN1
cHBvcnRzRGlyZWN0QmluZGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgQnVmZmVyU3RvcmFnZTExOjptYXJrQnVmZmVyVXNhZ2UoKQoreworICAgIG1SZWFkVXNhZ2VD
b3VudCsrOworICAgIG1Xcml0ZVVzYWdlQ291bnQrKzsKKworICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCB1c2FnZUxpbWl0ID0gNTsKKworICAgIGlmIChtUmVhZFVzYWdlQ291bnQgPiB1c2FnZUxpbWl0
ICYmIG1SZXNvbHZlZERhdGEpCisgICAgeworICAgICAgICBmcmVlKG1SZXNvbHZlZERhdGEpOwor
ICAgICAgICBtUmVzb2x2ZWREYXRhID0gTlVMTDsKKyAgICAgICAgbVJlc29sdmVkRGF0YVNpemUg
PSAwOworICAgICAgICBtUmVzb2x2ZWREYXRhVmFsaWQgPSBmYWxzZTsKKyAgICB9Cit9CisKK0lE
M0QxMUJ1ZmZlciAqQnVmZmVyU3RvcmFnZTExOjpnZXRCdWZmZXIoQnVmZmVyVXNhZ2UgdXNhZ2Up
Cit7CisgICAgbWFya0J1ZmZlclVzYWdlKCk7CisKKyAgICBEaXJlY3RCdWZmZXJTdG9yYWdlMTEg
KmRpcmVjdEJ1ZmZlciA9IE5VTEw7CisKKyAgICBhdXRvIGRpcmVjdEJ1ZmZlckl0ID0gbURpcmVj
dEJ1ZmZlcnMuZmluZCh1c2FnZSk7CisgICAgaWYgKGRpcmVjdEJ1ZmZlckl0ICE9IG1EaXJlY3RC
dWZmZXJzLmVuZCgpKQorICAgIHsKKyAgICAgICAgZGlyZWN0QnVmZmVyID0gZGlyZWN0QnVmZmVy
SXQtPnNlY29uZDsKKyAgICB9CisKKyAgICBpZiAoZGlyZWN0QnVmZmVyKQorICAgIHsKKyAgICAg
ICAgaWYgKGRpcmVjdEJ1ZmZlci0+aXNEaXJ0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICAv
LyBpZiB1cGRhdGVGcm9tU3RhZ2luZ0J1ZmZlciByZXR1cm5zIHRydWUsIHRoZSBEM0QgYnVmZmVy
IGhhcyBiZWVuIHJlY3JlYXRlZAorICAgICAgICAgICAgLy8gYW5kIHdlIHNob3VsZCB1cGRhdGUg
b3VyIHNlcmlhbAorICAgICAgICAgICAgaWYgKGRpcmVjdEJ1ZmZlci0+dXBkYXRlRnJvbVN0YWdp
bmdCdWZmZXIobVN0YWdpbmdCdWZmZXIsIG1TaXplLCAwKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICB1cGRhdGVTZXJpYWwoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBidWZmZXIgaXMgbm90IGFsbG9jYXRlZCwg
Y3JlYXRlIGl0CisgICAgICAgIGRpcmVjdEJ1ZmZlciA9IG5ldyBEaXJlY3RCdWZmZXJTdG9yYWdl
MTEobVJlbmRlcmVyLCB1c2FnZSk7CisgICAgICAgIGRpcmVjdEJ1ZmZlci0+dXBkYXRlRnJvbVN0
YWdpbmdCdWZmZXIobVN0YWdpbmdCdWZmZXIsIG1TaXplLCAwKTsKKworICAgICAgICBtRGlyZWN0
QnVmZmVycy5pbnNlcnQoc3RkOjptYWtlX3BhaXIodXNhZ2UsIGRpcmVjdEJ1ZmZlcikpOworICAg
ICAgICB1cGRhdGVTZXJpYWwoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZGlyZWN0QnVmZmVyLT5n
ZXREM0RCdWZmZXIoKTsKK30KKworRGlyZWN0QnVmZmVyU3RvcmFnZTExOjpEaXJlY3RCdWZmZXJT
dG9yYWdlMTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIsIEJ1ZmZlclVzYWdlIHVzYWdlKQorICAgIDog
bVJlbmRlcmVyKHJlbmRlcmVyKSwKKyAgICAgIG1Vc2FnZSh1c2FnZSksCisgICAgICBtRGlyZWN0
QnVmZmVyKE5VTEwpLAorICAgICAgbUJ1ZmZlclNpemUoMCksCisgICAgICBtRGlydHkoZmFsc2Up
Cit7Cit9CisKK0RpcmVjdEJ1ZmZlclN0b3JhZ2UxMTo6fkRpcmVjdEJ1ZmZlclN0b3JhZ2UxMSgp
Cit7CisgICAgU2FmZVJlbGVhc2UobURpcmVjdEJ1ZmZlcik7Cit9CisKK0J1ZmZlclVzYWdlIERp
cmVjdEJ1ZmZlclN0b3JhZ2UxMTo6Z2V0VXNhZ2UoKSBjb25zdAoreworICAgIHJldHVybiBtVXNh
Z2U7Cit9CisKKy8vIFJldHVybnMgdHJ1ZSBpZiBpdCByZWNyZWF0ZXMgdGhlIGRpcmVjdCBidWZm
ZXIKK2Jvb2wgRGlyZWN0QnVmZmVyU3RvcmFnZTExOjp1cGRhdGVGcm9tU3RhZ2luZ0J1ZmZlcihJ
RDNEMTFCdWZmZXIgKnN0YWdpbmdCdWZmZXIsIHNpemVfdCBzaXplLCBzaXplX3Qgb2Zmc2V0KQor
eworICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAg
ICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250
ZXh0KCk7CisKKyAgICAvLyB1bnVzZWQgZm9yIG5vdworICAgIEFTU0VSVChvZmZzZXQgPT0gMCk7
CisKKyAgICB1bnNpZ25lZCBpbnQgcmVxdWlyZWRCdWZmZXJTaXplID0gc2l6ZSArIG9mZnNldDsK
KyAgICBib29sIGNyZWF0ZUJ1ZmZlciA9ICFtRGlyZWN0QnVmZmVyIHx8IG1CdWZmZXJTaXplIDwg
cmVxdWlyZWRCdWZmZXJTaXplOworCisgICAgLy8gKFJlKWluaXRpYWxpemUgRDNEIGJ1ZmZlciBp
ZiBuZWVkZWQKKyAgICBpZiAoY3JlYXRlQnVmZmVyKQorICAgIHsKKyAgICAgICAgRDNEMTFfQlVG
RkVSX0RFU0MgYnVmZmVyRGVzYzsKKyAgICAgICAgZmlsbEJ1ZmZlckRlc2MoJmJ1ZmZlckRlc2Ms
IG1SZW5kZXJlciwgbVVzYWdlLCByZXF1aXJlZEJ1ZmZlclNpemUpOworCisgICAgICAgIElEM0Qx
MUJ1ZmZlciAqbmV3QnVmZmVyOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3Jl
YXRlQnVmZmVyKCZidWZmZXJEZXNjLCBOVUxMLCAmbmV3QnVmZmVyKTsKKworICAgICAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgLy8gTm8gbG9u
Z2VyIG5lZWQgdGhlIG9sZCBidWZmZXIKKyAgICAgICAgU2FmZVJlbGVhc2UobURpcmVjdEJ1ZmZl
cik7CisgICAgICAgIG1EaXJlY3RCdWZmZXIgPSBuZXdCdWZmZXI7CisKKyAgICAgICAgbUJ1ZmZl
clNpemUgPSBidWZmZXJEZXNjLkJ5dGVXaWR0aDsKKyAgICB9CisKKyAgICAvLyBDb3B5IGRhdGEg
dmlhIHN0YWdpbmcgYnVmZmVyCisgICAgRDNEMTFfQk9YIHNyY0JveDsKKyAgICBzcmNCb3gubGVm
dCA9IDA7CisgICAgc3JjQm94LnJpZ2h0ID0gc2l6ZTsKKyAgICBzcmNCb3gudG9wID0gMDsKKyAg
ICBzcmNCb3guYm90dG9tID0gMTsKKyAgICBzcmNCb3guZnJvbnQgPSAwOworICAgIHNyY0JveC5i
YWNrID0gMTsKKworICAgIGNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihtRGlyZWN0QnVm
ZmVyLCAwLCBvZmZzZXQsIDAsIDAsIHN0YWdpbmdCdWZmZXIsIDAsICZzcmNCb3gpOworCisgICAg
bURpcnR5ID0gZmFsc2U7CisKKyAgICByZXR1cm4gY3JlYXRlQnVmZmVyOworfQorCit2b2lkIERp
cmVjdEJ1ZmZlclN0b3JhZ2UxMTo6ZmlsbEJ1ZmZlckRlc2MoRDNEMTFfQlVGRkVSX0RFU0MqIGJ1
ZmZlckRlc2MsIFJlbmRlcmVyICpyZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2UsIHVuc2lnbmVk
IGludCBidWZmZXJTaXplKQoreworICAgIGJ1ZmZlckRlc2MtPkJ5dGVXaWR0aCA9IGJ1ZmZlclNp
emU7CisgICAgYnVmZmVyRGVzYy0+TWlzY0ZsYWdzID0gMDsKKyAgICBidWZmZXJEZXNjLT5TdHJ1
Y3R1cmVCeXRlU3RyaWRlID0gMDsKKworICAgIHN3aXRjaCAodXNhZ2UpCisgICAgeworICAgICAg
Y2FzZSBCVUZGRVJfVVNBR0VfVkVSVEVYOgorICAgICAgICBidWZmZXJEZXNjLT5Vc2FnZSA9IEQz
RDExX1VTQUdFX0RFRkFVTFQ7CisgICAgICAgIGJ1ZmZlckRlc2MtPkJpbmRGbGFncyA9IEQzRDEx
X0JJTkRfVkVSVEVYX0JVRkZFUjsKKyAgICAgICAgYnVmZmVyRGVzYy0+Q1BVQWNjZXNzRmxhZ3Mg
PSAwOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBCVUZGRVJfVVNBR0VfSU5ERVg6Cisg
ICAgICAgIGJ1ZmZlckRlc2MtPlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKKyAgICAgICAg
YnVmZmVyRGVzYy0+QmluZEZsYWdzID0gRDNEMTFfQklORF9JTkRFWF9CVUZGRVI7CisgICAgICAg
IGJ1ZmZlckRlc2MtPkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBk
ZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KK30KKworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9C
dWZmZXJTdG9yYWdlMTEuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvQnVmZmVyU3RvcmFnZTExLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTZhZmFmZTFiNDQ3
ZTc3YTFkMmE2ZTI2NTk1ZmM3NjIyZDYwNmRiMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvQnVmZmVyU3RvcmFn
ZTExLmgKQEAgLTAsMCArMSw5MiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIEJ1ZmZlclN0b3JhZ2Ux
MS5oIERlZmluZXMgdGhlIEJ1ZmZlclN0b3JhZ2UxMSBjbGFzcy4KKworI2lmbmRlZiBMSUJHTEVT
VjJfUkVOREVSRVJfQlVGRkVSU1RPUkFHRTExX0hfCisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJF
Ul9CVUZGRVJTVE9SQUdFMTFfSF8KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9CdWZm
ZXJTdG9yYWdlLmgiCisKK25hbWVzcGFjZSByeAoreworY2xhc3MgUmVuZGVyZXI7CitjbGFzcyBS
ZW5kZXJlcjExOworY2xhc3MgRGlyZWN0QnVmZmVyU3RvcmFnZTExOworCitlbnVtIEJ1ZmZlclVz
YWdlCit7CisgICAgQlVGRkVSX1VTQUdFX1ZFUlRFWCwKKyAgICBCVUZGRVJfVVNBR0VfSU5ERVgs
Cit9OworCitjbGFzcyBCdWZmZXJTdG9yYWdlMTEgOiBwdWJsaWMgQnVmZmVyU3RvcmFnZQorewor
ICBwdWJsaWM6CisgICAgZXhwbGljaXQgQnVmZmVyU3RvcmFnZTExKFJlbmRlcmVyMTEgKnJlbmRl
cmVyKTsKKyAgICB2aXJ0dWFsIH5CdWZmZXJTdG9yYWdlMTEoKTsKKworICAgIHN0YXRpYyBCdWZm
ZXJTdG9yYWdlMTEgKm1ha2VCdWZmZXJTdG9yYWdlMTEoQnVmZmVyU3RvcmFnZSAqYnVmZmVyU3Rv
cmFnZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgKmdldERhdGEoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50
IG9mZnNldCk7CisgICAgdmlydHVhbCB2b2lkIGNvcHlEYXRhKEJ1ZmZlclN0b3JhZ2UqIHNvdXJj
ZVN0b3JhZ2UsIHVuc2lnbmVkIGludCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgc291cmNlT2Zmc2V0LCB1bnNpZ25lZCBpbnQgZGVzdE9mZnNldCk7CisgICAg
dmlydHVhbCB2b2lkIGNsZWFyKCk7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2l6ZSgp
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0RpcmVjdEJpbmRpbmcoKSBjb25zdDsK
KworICAgIElEM0QxMUJ1ZmZlciAqZ2V0QnVmZmVyKEJ1ZmZlclVzYWdlIHVzYWdlKTsKKworICBw
cml2YXRlOgorICAgIFJlbmRlcmVyMTEgKm1SZW5kZXJlcjsKKworICAgIElEM0QxMUJ1ZmZlciAq
bVN0YWdpbmdCdWZmZXI7CisgICAgdW5zaWduZWQgaW50IG1TdGFnaW5nQnVmZmVyU2l6ZTsKKwor
ICAgIHN0ZDo6bWFwPEJ1ZmZlclVzYWdlLCBEaXJlY3RCdWZmZXJTdG9yYWdlMTEqPiBtRGlyZWN0
QnVmZmVyczsKKworICAgIHVuc2lnbmVkIGludCBtU2l6ZTsKKworICAgIHZvaWQgKm1SZXNvbHZl
ZERhdGE7CisgICAgdW5zaWduZWQgaW50IG1SZXNvbHZlZERhdGFTaXplOworICAgIGJvb2wgbVJl
c29sdmVkRGF0YVZhbGlkOworCisgICAgdW5zaWduZWQgaW50IG1SZWFkVXNhZ2VDb3VudDsKKyAg
ICB1bnNpZ25lZCBpbnQgbVdyaXRlVXNhZ2VDb3VudDsKKworICAgIHZvaWQgbWFya0J1ZmZlclVz
YWdlKCk7Cit9OworCisvLyBFYWNoIGluc3RhbmNlIG9mIEJ1ZmZlclN0b3JhZ2VEM0RCdWZmZXIx
MSBpcyBzcGVjaWFsaXplZCBmb3IgYSBjbGFzcyBvZiBEM0QgYmluZGluZyBwb2ludHMKKy8vIC0g
dmVydGV4IGJ1ZmZlcnMKKy8vIC0gaW5kZXggYnVmZmVycworY2xhc3MgRGlyZWN0QnVmZmVyU3Rv
cmFnZTExCit7CisgIHB1YmxpYzoKKyAgICBEaXJlY3RCdWZmZXJTdG9yYWdlMTEoUmVuZGVyZXIx
MSAqcmVuZGVyZXIsIEJ1ZmZlclVzYWdlIHVzYWdlKTsKKyAgICB+RGlyZWN0QnVmZmVyU3RvcmFn
ZTExKCk7CisKKyAgICBCdWZmZXJVc2FnZSBnZXRVc2FnZSgpIGNvbnN0OworICAgIGJvb2wgdXBk
YXRlRnJvbVN0YWdpbmdCdWZmZXIoSUQzRDExQnVmZmVyICpzdGFnaW5nQnVmZmVyLCBzaXplX3Qg
c2l6ZSwgc2l6ZV90IG9mZnNldCk7CisKKyAgICBJRDNEMTFCdWZmZXIgKmdldEQzREJ1ZmZlcigp
IHsgcmV0dXJuIG1EaXJlY3RCdWZmZXI7IH0KKyAgICBib29sIGlzRGlydHkoKSBjb25zdCB7IHJl
dHVybiBtRGlydHk7IH0KKyAgICB2b2lkIG1hcmtEaXJ0eSgpIHsgbURpcnR5ID0gdHJ1ZTsgfQor
CisgIHByaXZhdGU6CisgICAgUmVuZGVyZXIxMSAqbVJlbmRlcmVyOworICAgIGNvbnN0IEJ1ZmZl
clVzYWdlIG1Vc2FnZTsKKyAgICBJRDNEMTFCdWZmZXIgKm1EaXJlY3RCdWZmZXI7CisgICAgc2l6
ZV90IG1CdWZmZXJTaXplOworICAgIGJvb2wgbURpcnR5OworCisgICAgc3RhdGljIHZvaWQgZmls
bEJ1ZmZlckRlc2MoRDNEMTFfQlVGRkVSX0RFU0MqIGJ1ZmZlckRlc2MsIFJlbmRlcmVyICpyZW5k
ZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2UsIHVuc2lnbmVkIGludCBidWZmZXJTaXplKTsKK307CisK
K30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9CVUZGRVJTVE9SQUdFMTFfSF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkMTEvRmVuY2UxMS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL0ZlbmNlMTEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJhN2Q0ZDQzZWYzYTdlZGU5
NWZkZmZlNGE0NGM0MjE0OWM1OWY5NjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ZlbmNlMTEuY3BwCkBAIC0w
LDAgKzEsMTM0IEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisv
LyBGZW5jZTExLmNwcDogRGVmaW5lcyB0aGUgcng6OkZlbmNlMTEgY2xhc3Mgd2hpY2ggaW1wbGVt
ZW50cyByeDo6RmVuY2VJbXBsLgorCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L0ZlbmNlMTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgiCisKK25hbWVzcGFjZSByeAoreworCitG
ZW5jZTExOjpGZW5jZTExKHJ4OjpSZW5kZXJlcjExICpyZW5kZXJlcikKK3sKKyAgICBtUmVuZGVy
ZXIgPSByZW5kZXJlcjsKKyAgICBtUXVlcnkgPSBOVUxMOworfQorCitGZW5jZTExOjp+RmVuY2Ux
MSgpCit7CisgICAgaWYgKG1RdWVyeSkKKyAgICB7CisgICAgICAgIG1RdWVyeS0+UmVsZWFzZSgp
OworICAgICAgICBtUXVlcnkgPSBOVUxMOworICAgIH0KK30KKworR0xib29sZWFuIEZlbmNlMTE6
OmlzRmVuY2UoKQoreworICAgIC8vIEdMX05WX2ZlbmNlIHNwZWM6CisgICAgLy8gQSBuYW1lIHJl
dHVybmVkIGJ5IEdlbkZlbmNlc05WLCBidXQgbm90IHlldCBzZXQgdmlhIFNldEZlbmNlTlYsIGlz
IG5vdCB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBmZW5jZS4KKyAgICByZXR1cm4gbVF1ZXJ5ICE9
IE5VTEw7Cit9CisKK3ZvaWQgRmVuY2UxMTo6c2V0RmVuY2UoR0xlbnVtIGNvbmRpdGlvbikKK3sK
KyAgICBpZiAoIW1RdWVyeSkKKyAgICB7CisgICAgICAgIEQzRDExX1FVRVJZX0RFU0MgcXVlcnlE
ZXNjOworICAgICAgICBxdWVyeURlc2MuUXVlcnkgPSBEM0QxMV9RVUVSWV9FVkVOVDsKKyAgICAg
ICAgcXVlcnlEZXNjLk1pc2NGbGFncyA9IDA7CisKKyAgICAgICAgaWYgKEZBSUxFRChtUmVuZGVy
ZXItPmdldERldmljZSgpLT5DcmVhdGVRdWVyeSgmcXVlcnlEZXNjLCAmbVF1ZXJ5KSkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKS0+RW5k
KG1RdWVyeSk7CisKKyAgICBzZXRDb25kaXRpb24oY29uZGl0aW9uKTsKKyAgICBzZXRTdGF0dXMo
R0xfRkFMU0UpOworfQorCitHTGJvb2xlYW4gRmVuY2UxMTo6dGVzdEZlbmNlKCkKK3sKKyAgICBp
ZiAobVF1ZXJ5ID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OLCBHTF9UUlVFKTsKKyAgICB9CisKKyAgICBIUkVTVUxUIHJlc3VsdCA9
IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpLT5HZXREYXRhKG1RdWVyeSwgTlVMTCwgMCwg
MCk7CisKKyAgICBpZiAobVJlbmRlcmVyLT5pc0RldmljZUxvc3QoKSkKKyAgICB7CisgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9UUlVFKTsKKyAgICB9CisKKyAg
ICBBU1NFUlQocmVzdWx0ID09IFNfT0sgfHwgcmVzdWx0ID09IFNfRkFMU0UpOworICAgIHNldFN0
YXR1cyhyZXN1bHQgPT0gU19PSyk7CisgICAgcmV0dXJuIGdldFN0YXR1cygpOworfQorCit2b2lk
IEZlbmNlMTE6OmZpbmlzaEZlbmNlKCkKK3sKKyAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCisgICAg
eworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICB9
CisKKyAgICB3aGlsZSAoIXRlc3RGZW5jZSgpKQorICAgIHsKKyAgICAgICAgU2xlZXAoMCk7Cisg
ICAgfQorfQorCit2b2lkIEZlbmNlMTE6OmdldEZlbmNlaXYoR0xlbnVtIHBuYW1lLCBHTGludCAq
cGFyYW1zKQoreworICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgIH0KKworICAgIHN3aXRjaCAo
cG5hbWUpCisgICAgeworICAgICAgY2FzZSBHTF9GRU5DRV9TVEFUVVNfTlY6CisgICAgICAgIHsK
KyAgICAgICAgICAgIC8vIEdMX05WX2ZlbmNlIHNwZWM6CisgICAgICAgICAgICAvLyBPbmNlIHRo
ZSBzdGF0dXMgb2YgYSBmZW5jZSBoYXMgYmVlbiBmaW5pc2hlZCAodmlhIEZpbmlzaEZlbmNlTlYp
IG9yIHRlc3RlZCBhbmQgdGhlIHJldHVybmVkIHN0YXR1cyBpcyBUUlVFICh2aWEgZWl0aGVyIFRl
c3RGZW5jZU5WCisgICAgICAgICAgICAvLyBvciBHZXRGZW5jZWl2TlYgcXVlcnlpbmcgdGhlIEZF
TkNFX1NUQVRVU19OViksIHRoZSBzdGF0dXMgcmVtYWlucyBUUlVFIHVudGlsIHRoZSBuZXh0IFNl
dEZlbmNlTlYgb2YgdGhlIGZlbmNlLgorICAgICAgICAgICAgaWYgKGdldFN0YXR1cygpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9IEdMX1RSVUU7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBIUkVTVUxUIHJl
c3VsdCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpLT5HZXREYXRhKG1RdWVyeSwgTlVM
TCwgMCwgRDNEMTFfQVNZTkNfR0VUREFUQV9ET05PVEZMVVNIKTsKKworICAgICAgICAgICAgaWYg
KG1SZW5kZXJlci0+aXNEZXZpY2VMb3N0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcGFyYW1zWzBdID0gR0xfVFJVRTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBBU1NFUlQo
cmVzdWx0ID09IFNfT0sgfHwgcmVzdWx0ID09IFNfRkFMU0UpOworICAgICAgICAgICAgc2V0U3Rh
dHVzKHJlc3VsdCA9PSBTX09LKTsKKyAgICAgICAgICAgIHBhcmFtc1swXSA9IGdldFN0YXR1cygp
OworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgY2FzZSBHTF9GRU5DRV9D
T05ESVRJT05fTlY6CisgICAgICAgIHBhcmFtc1swXSA9IGdldENvbmRpdGlvbigpOworICAgICAg
ICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ZlbmNl
MTEuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvRmVuY2UxMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1Mzk4YmNhMTQ5MDA2NDdiMDNkZjI3YTEwMTkxZDkw
NjkxOTExMTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ZlbmNlMTEuaApAQCAtMCwwICsxLDM5IEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworLy8gRmVuY2UxMS5oOiBEZWZpbmVzIHRoZSByeDo6RmVuY2UxMSBjbGFzcyB3
aGljaCBpbXBsZW1lbnRzIHJ4OjpGZW5jZUltcGwuCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRF
UkVSX0ZlbmNlMTFfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX0ZlbmNlMTFfSF8KKwor
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZUltcGwuaCIKKworbmFtZXNwYWNlIHJ4
Cit7CitjbGFzcyBSZW5kZXJlcjExOworCitjbGFzcyBGZW5jZTExIDogcHVibGljIEZlbmNlSW1w
bAoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgRmVuY2UxMShyeDo6UmVuZGVyZXIxMSAqcmVu
ZGVyZXIpOworICAgIHZpcnR1YWwgfkZlbmNlMTEoKTsKKworICAgIEdMYm9vbGVhbiBpc0ZlbmNl
KCk7CisgICAgdm9pZCBzZXRGZW5jZShHTGVudW0gY29uZGl0aW9uKTsKKyAgICBHTGJvb2xlYW4g
dGVzdEZlbmNlKCk7CisgICAgdm9pZCBmaW5pc2hGZW5jZSgpOworICAgIHZvaWQgZ2V0RmVuY2Vp
dihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpOworCisgIHByaXZhdGU6CisgICAgRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKEZlbmNlMTEpOworCisgICAgcng6OlJlbmRlcmVyMTEgKm1SZW5k
ZXJlcjsKKyAgICBJRDNEMTFRdWVyeSAqbVF1ZXJ5OworfTsKKworfQorCisjZW5kaWYgLy8gTElC
R0xFU1YyX1JFTkRFUkVSX0ZFTkNFMTFfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW1hZ2UxMS5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ltYWdlMTEuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjJiMDdiOWQxODI4YThiMzE2Y2U4ZGViMzRhNTY0ZDM0OWNiM2I4ZGMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL0ltYWdlMTEuY3BwCkBAIC0wLDAgKzEsNDk1IEBACisjaW5jbHVkZSAicHJl
Y29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBJbWFnZTExLmg6IEltcGxlbWVudHMgdGhl
IHJ4OjpJbWFnZTExIGNsYXNzLCB3aGljaCBhY3RzIGFzIHRoZSBpbnRlcmZhY2UgdG8KKy8vIHRo
ZSBhY3R1YWwgdW5kZXJseWluZyByZXNvdXJjZXMgb2YgYSBUZXh0dXJlCisKKyNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyZXIxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9JbWFnZTExLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL1RleHR1cmVTdG9yYWdlMTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZm
ZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCisKKyNpbmNsdWRlICJs
aWJHTEVTdjIvbWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9nZW5lcmF0ZW1pcC5oIgorCituYW1lc3BhY2UgcngKK3sK
KworSW1hZ2UxMTo6SW1hZ2UxMSgpCit7CisgICAgbVN0YWdpbmdUZXh0dXJlID0gTlVMTDsKKyAg
ICBtUmVuZGVyZXIgPSBOVUxMOworICAgIG1EWEdJRm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5LTk9X
TjsKK30KKworSW1hZ2UxMTo6fkltYWdlMTEoKQoreworICAgIGlmIChtU3RhZ2luZ1RleHR1cmUp
CisgICAgeworICAgICAgICBtU3RhZ2luZ1RleHR1cmUtPlJlbGVhc2UoKTsKKyAgICB9Cit9CisK
K0ltYWdlMTEgKkltYWdlMTE6Om1ha2VJbWFnZTExKEltYWdlICppbWcpCit7CisgICAgQVNTRVJU
KEhBU19EWU5BTUlDX1RZUEUocng6OkltYWdlMTEqLCBpbWcpKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8cng6OkltYWdlMTEqPihpbWcpOworfQorCit2b2lkIEltYWdlMTE6OmdlbmVyYXRlTWlw
bWFwKEltYWdlMTEgKmRlc3QsIEltYWdlMTEgKnNyYykKK3sKKyAgICBBU1NFUlQoc3JjLT5nZXRE
WEdJRm9ybWF0KCkgPT0gZGVzdC0+Z2V0RFhHSUZvcm1hdCgpKTsKKyAgICBBU1NFUlQoc3JjLT5n
ZXRXaWR0aCgpID09IDEgfHwgc3JjLT5nZXRXaWR0aCgpIC8gMiA9PSBkZXN0LT5nZXRXaWR0aCgp
KTsKKyAgICBBU1NFUlQoc3JjLT5nZXRIZWlnaHQoKSA9PSAxIHx8IHNyYy0+Z2V0SGVpZ2h0KCkg
LyAyID09IGRlc3QtPmdldEhlaWdodCgpKTsKKworICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJD
RSBkZXN0TWFwcGVkLCBzcmNNYXBwZWQ7CisgICAgZGVzdC0+bWFwKEQzRDExX01BUF9XUklURSwg
JmRlc3RNYXBwZWQpOworICAgIHNyYy0+bWFwKEQzRDExX01BUF9SRUFELCAmc3JjTWFwcGVkKTsK
KworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihzcmNNYXBwZWQucERhdGEpOworICAgIHVuc2lnbmVkIGNo
YXIgKmRlc3REYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZGVzdE1hcHBl
ZC5wRGF0YSk7CisKKyAgICBpZiAoc291cmNlRGF0YSAmJiBkZXN0RGF0YSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAoc3JjLT5nZXREWEdJRm9ybWF0KCkpCisgICAgICAgIHsKKyAgICAgICAgICBj
YXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOgorICAgICAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQjhHOFI4QThfVU5PUk06CisgICAgICAgICAgICBHZW5lcmF0ZU1pcDxSOEc4QjhBOD4oc3Jj
LT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93
UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQThfVU5PUk06CisgICAgICAgICAgICBHZW5l
cmF0ZU1pcDxBOD4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRh
LCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVU5PUk06Cisg
ICAgICAgICAgICBHZW5lcmF0ZU1pcDxSOD4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdo
dCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVk
LlJvd1BpdGNoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjMyRzMyQjMyQTMyX0ZMT0FUOgorICAgICAgICAgICAgR2VuZXJhdGVNaXA8QTMyQjMyRzMy
UjMyRj4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRhLCBzcmNN
YXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FUOgor
ICAgICAgICAgICAgR2VuZXJhdGVNaXA8UjMyRzMyQjMyRj4oc3JjLT5nZXRXaWR0aCgpLCBzcmMt
PmdldEhlaWdodCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBk
ZXN0TWFwcGVkLlJvd1BpdGNoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X0ZMT0FUOgorICAgICAgICAgICAgR2VuZXJhdGVNaXA8
QTE2QjE2RzE2UjE2Rj4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VE
YXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9VTk9S
TToKKyAgICAgICAgICAgIEdlbmVyYXRlTWlwPFI4Rzg+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5n
ZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVz
dE1hcHBlZC5Sb3dQaXRjaCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIERY
R0lfRk9STUFUX1IxNl9GTE9BVDoKKyAgICAgICAgICAgIEdlbmVyYXRlTWlwPFIxNkY+KHNyYy0+
Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1Bp
dGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9GTE9BVDoKKyAgICAgICAgICAgIEdl
bmVyYXRlTWlwPFIxNkcxNkY+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291
cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRj
aCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMl9G
TE9BVDoKKyAgICAgICAgICAgIEdlbmVyYXRlTWlwPFIzMkY+KHNyYy0+Z2V0V2lkdGgoKSwgc3Jj
LT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwg
ZGVzdE1hcHBlZC5Sb3dQaXRjaCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNl
IERYR0lfRk9STUFUX1IzMkczMl9GTE9BVDoKKyAgICAgICAgICAgIEdlbmVyYXRlTWlwPFIzMkcz
MkY+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFw
cGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVzdC0+dW5tYXAoKTsK
KyAgICAgICAgc3JjLT51bm1hcCgpOworICAgIH0KKworICAgIGRlc3QtPm1hcmtEaXJ0eSgpOwor
fQorCitzdGF0aWMgYm9vbCBGb3JtYXRSZXF1aXJlc0luaXRpYWxpemF0aW9uKERYR0lfRk9STUFU
IGR4Z2lGb3JtYXQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCkKK3sKKyAgICByZXR1cm4gKGR4Z2lG
b3JtYXQgPT0gRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk0gJiYgZ2w6OkdldEFscGhhU2l6ZShp
bnRlcm5hbEZvcm1hdCkgPT0gMCkgfHwKKyAgICAgICAgICAgKGR4Z2lGb3JtYXQgPT0gRFhHSV9G
T1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUICYmIGdsOjpHZXRBbHBoYVNpemUoaW50ZXJuYWxGb3Jt
YXQpID09IDApOworfQorCitib29sIEltYWdlMTE6OmlzRGlydHkoKSBjb25zdAoreworICAgIHJl
dHVybiAoKG1TdGFnaW5nVGV4dHVyZSB8fCBGb3JtYXRSZXF1aXJlc0luaXRpYWxpemF0aW9uKG1E
WEdJRm9ybWF0LCBtSW50ZXJuYWxGb3JtYXQpKSAmJiBtRGlydHkpOworfQorCitib29sIEltYWdl
MTE6OnVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCkKK3sKKyAgICBUZXh0dXJlU3RvcmFnZTExXzJEICpzdG9yYWdlMTEgPSBUZXh0
dXJlU3RvcmFnZTExXzJEOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yRChzdG9yYWdlLT5nZXRTdG9y
YWdlSW5zdGFuY2UoKSk7CisgICAgcmV0dXJuIHN0b3JhZ2UxMS0+dXBkYXRlU3VicmVzb3VyY2VM
ZXZlbChnZXRTdGFnaW5nVGV4dHVyZSgpLCBnZXRTdGFnaW5nU3VicmVzb3VyY2UoKSwgbGV2ZWws
IDAsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOworfQorCitib29sIEltYWdlMTE6
OnVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQg
ZmFjZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBUZXh0dXJlU3RvcmFnZTExX0N1YmUgKnN0b3Jh
Z2UxMSA9IFRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlMTFfQ3ViZShz
dG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CisgICAgcmV0dXJuIHN0b3JhZ2UxMS0+dXBk
YXRlU3VicmVzb3VyY2VMZXZlbChnZXRTdGFnaW5nVGV4dHVyZSgpLCBnZXRTdGFnaW5nU3VicmVz
b3VyY2UoKSwgbGV2ZWwsIGZhY2UsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOwor
fQorCitib29sIEltYWdlMTE6OnJlZGVmaW5lKFJlbmRlcmVyICpyZW5kZXJlciwgR0xpbnQgaW50
ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBib29sIGZvcmNlUmVs
ZWFzZSkKK3sKKyAgICBpZiAobVdpZHRoICE9IHdpZHRoIHx8CisgICAgICAgIG1IZWlnaHQgIT0g
aGVpZ2h0IHx8CisgICAgICAgIG1JbnRlcm5hbEZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCB8fAor
ICAgICAgICBmb3JjZVJlbGVhc2UpCisgICAgeworICAgICAgICBtUmVuZGVyZXIgPSBSZW5kZXJl
cjExOjptYWtlUmVuZGVyZXIxMShyZW5kZXJlcik7CisKKyAgICAgICAgbVdpZHRoID0gd2lkdGg7
CisgICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGlu
dGVybmFsZm9ybWF0OworICAgICAgICAvLyBjb21wdXRlIHRoZSBkM2QgZm9ybWF0IHRoYXQgd2ls
bCBiZSB1c2VkCisgICAgICAgIG1EWEdJRm9ybWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJl
Rm9ybWF0KGludGVybmFsZm9ybWF0KTsKKyAgICAgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDExX2ds
OjpDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KG1EWEdJRm9ybWF0KTsKKworICAgICAgICBp
ZiAobVN0YWdpbmdUZXh0dXJlKQorICAgICAgICB7CisgICAgICAgICAgICBtU3RhZ2luZ1RleHR1
cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1TdGFnaW5nVGV4dHVyZSA9IE5VTEw7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBJbWFnZTExOjppc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdAor
eworICAgIHJldHVybiBUZXh0dXJlU3RvcmFnZTExOjpJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxl
KG1EWEdJRm9ybWF0KTsKK30KKworRFhHSV9GT1JNQVQgSW1hZ2UxMTo6Z2V0RFhHSUZvcm1hdCgp
IGNvbnN0Cit7CisgICAgLy8gdGhpcyBzaG91bGQgb25seSBoYXBwZW4gaWYgdGhlIGltYWdlIGhh
c24ndCBiZWVuIHJlZGVmaW5lZCBmaXJzdAorICAgIC8vIHdoaWNoIHdvdWxkIGJlIGEgYnVnIGJ5
IHRoZSBjYWxsZXIKKyAgICBBU1NFUlQobURYR0lGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9X
Tik7CisKKyAgICByZXR1cm4gbURYR0lGb3JtYXQ7Cit9CisKKy8vIFN0b3JlIHRoZSBwaXhlbCBy
ZWN0YW5nbGUgZGVzaWduYXRlZCBieSB4b2Zmc2V0LHlvZmZzZXQsd2lkdGgsaGVpZ2h0IHdpdGgg
cGl4ZWxzIHN0b3JlZCBhcyBmb3JtYXQvdHlwZSBhdCBpbnB1dAorLy8gaW50byB0aGUgdGFyZ2V0
IHBpeGVsIHJlY3RhbmdsZS4KK3ZvaWQgSW1hZ2UxMTo6bG9hZERhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAg
ICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQpCit7
CisgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZEltYWdlOworICAgIEhSRVNVTFQg
cmVzdWx0ID0gbWFwKEQzRDExX01BUF9XUklURSwgJm1hcHBlZEltYWdlKTsKKyAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBFUlIoIkNvdWxkIG5vdCBtYXAgaW1hZ2UgZm9y
IGxvYWRpbmcuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgR0xzaXplaSBp
bnB1dFBpdGNoID0gZ2w6OkNvbXB1dGVQaXRjaCh3aWR0aCwgbUludGVybmFsRm9ybWF0LCB1bnBh
Y2tBbGlnbm1lbnQpOworICAgIHNpemVfdCBwaXhlbFNpemUgPSBkM2QxMTo6Q29tcHV0ZVBpeGVs
U2l6ZUJpdHMobURYR0lGb3JtYXQpIC8gODsKKyAgICB2b2lkKiBvZmZzZXRNYXBwZWREYXRhID0g
KHZvaWQqKSgoQllURSAqKW1hcHBlZEltYWdlLnBEYXRhICsgKHlvZmZzZXQgKiBtYXBwZWRJbWFn
ZS5Sb3dQaXRjaCArIHhvZmZzZXQgKiBwaXhlbFNpemUpKTsKKworICAgIHN3aXRjaCAobUludGVy
bmFsRm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgR0xfQUxQSEE4X0VYVDoKKyAgICAgICAgbG9h
ZEFscGhhRGF0YVRvTmF0aXZlKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBw
ZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0VYVDoKKyAgICAgICAgbG9hZEx1bWluYW5jZURhdGFUb05h
dGl2ZU9yQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2Uu
Um93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEsIGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX0FMUEhBMzJGX0VYVDoKKyAgICAgICAgbG9hZEFscGhhRmxvYXREYXRhVG9SR0JB
KHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwg
b2Zmc2V0TWFwcGVkRGF0YSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MVU1JTkFO
Q0UzMkZfRVhUOgorICAgICAgICBsb2FkTHVtaW5hbmNlRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFw
cGVkRGF0YSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9BTFBIQTE2Rl9FWFQ6Cisg
ICAgICAgIGxvYWRBbHBoYUhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6CisgICAgICAgIGxv
YWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQ6CisgICAgICAgIGxv
YWRMdW1pbmFuY2VBbHBoYURhdGFUb05hdGl2ZU9yQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBp
dGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEsIGZhbHNl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQ6
CisgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERh
dGEpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VY
VDoKKyAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1h
cHBlZERhdGEpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUkdCOF9PRVM6CisgICAg
ICAgIGxvYWRSR0JVQnl0ZURhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX1JHQjU2NToKKyAgICAgICAgbG9hZFJHQjU2NURhdGFUb1JHQkEo
d2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBv
ZmZzZXRNYXBwZWREYXRhKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JHQkE4X09F
UzoKKyAgICAgICAgbG9hZFJHQkFVQnl0ZURhdGFUb05hdGl2ZSh3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUkdCQTQ6CisgICAgICAgIGxvYWRSR0JBNDQ0
NERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdl
LlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX1JHQjVfQTE6CisgICAgICAgIGxvYWRSR0JBNTU1MURhdGFUb1JHQkEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWRE
YXRhKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JHUkE4X0VYVDoKKyAgICAgICAg
bG9hZEJHUkFEYXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBw
ZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9SR0IzMkZfRVhUOgorICAgICAgICBsb2FkUkdCRmxvYXREYXRhVG9SR0JBKHdp
ZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zm
c2V0TWFwcGVkRGF0YSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9SR0IxNkZfRVhU
OgorICAgICAgICBsb2FkUkdCSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUkdCQTMyRl9FWFQ6CisgICAgICAgIGxvYWRS
R0JBRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBw
ZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9SR0JBMTZGX0VYVDoKKyAgICAgICAgbG9hZFJHQkFIYWxmRmxvYXREYXRhVG9S
R0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRj
aCwgb2Zmc2V0TWFwcGVkRGF0YSk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsgCisgICAgfQorCisgICAgdW5tYXAoKTsKK30KKwordm9pZCBJbWFnZTExOjps
b2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHZvaWQgKmlucHV0KQoreworICAgIEFTU0VSVCh4b2Zmc2V0ICUgNCA9PSAwKTsKKyAgICBB
U1NFUlQoeW9mZnNldCAlIDQgPT0gMCk7CisKKyAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0Ug
bWFwcGVkSW1hZ2U7CisgICAgSFJFU1VMVCByZXN1bHQgPSBtYXAoRDNEMTFfTUFQX1dSSVRFLCAm
bWFwcGVkSW1hZ2UpOworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEVS
UigiQ291bGQgbm90IG1hcCBpbWFnZSBmb3IgbG9hZGluZy4iKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIFNpemUgY29tcHV0YXRpb24gYXNzdW1lcyBhIDR4NCBibG9jayBjb21w
cmVzc2VkIHRleHR1cmUgZm9ybWF0CisgICAgc2l6ZV90IGJsb2NrU2l6ZSA9IGQzZDExOjpDb21w
dXRlQmxvY2tTaXplQml0cyhtRFhHSUZvcm1hdCkgLyA4OworICAgIHZvaWQqIG9mZnNldE1hcHBl
ZERhdGEgPSAodm9pZCopKChCWVRFICopbWFwcGVkSW1hZ2UucERhdGEgKyAoKHlvZmZzZXQgLyA0
KSAqIG1hcHBlZEltYWdlLlJvd1BpdGNoICsgKHhvZmZzZXQgLyA0KSAqIGJsb2NrU2l6ZSkpOwor
CisgICAgR0xzaXplaSBpbnB1dFNpemUgPSBnbDo6Q29tcHV0ZUNvbXByZXNzZWRTaXplKHdpZHRo
LCBoZWlnaHQsIG1JbnRlcm5hbEZvcm1hdCk7CisgICAgR0xzaXplaSBpbnB1dFBpdGNoID0gZ2w6
OkNvbXB1dGVDb21wcmVzc2VkUGl0Y2god2lkdGgsIG1JbnRlcm5hbEZvcm1hdCk7CisgICAgaW50
IHJvd3MgPSBpbnB1dFNpemUgLyBpbnB1dFBpdGNoOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
cm93czsgKytpKQorICAgIHsKKyAgICAgICAgbWVtY3B5KCh2b2lkKikoKEJZVEUqKW9mZnNldE1h
cHBlZERhdGEgKyBpICogbWFwcGVkSW1hZ2UuUm93UGl0Y2gpLCAodm9pZCopKChCWVRFKilpbnB1
dCArIGkgKiBpbnB1dFBpdGNoKSwgaW5wdXRQaXRjaCk7CisgICAgfQorCisgICAgdW5tYXAoKTsK
K30KKwordm9pZCBJbWFnZTExOjpjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
aW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBnbDo6RnJhbWVi
dWZmZXIgKnNvdXJjZSkKK3sKKyAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IHNv
dXJjZS0+Z2V0UmVhZENvbG9yYnVmZmVyKCk7CisKKyAgICBpZiAoY29sb3JidWZmZXIgJiYgY29s
b3JidWZmZXItPmdldEFjdHVhbEZvcm1hdCgpID09IChHTHVpbnQpbUFjdHVhbEZvcm1hdCkKKyAg
ICB7CisgICAgICAgIC8vIE5vIGNvbnZlcnNpb24gbmVlZGVkLS0gdXNlIGNvcHliYWNrIGZhc3Rw
YXRoCisgICAgICAgIElEM0QxMVRleHR1cmUyRCAqY29sb3JCdWZmZXJUZXh0dXJlID0gTlVMTDsK
KyAgICAgICAgdW5zaWduZWQgaW50IHN1YnJlc291cmNlSW5kZXggPSAwOworCisgICAgICAgIGlm
IChtUmVuZGVyZXItPmdldFJlbmRlclRhcmdldFJlc291cmNlKGNvbG9yYnVmZmVyLCAmc3VicmVz
b3VyY2VJbmRleCwgJmNvbG9yQnVmZmVyVGV4dHVyZSkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleHR1cmVEZXNjOworICAgICAgICAgICAgY29sb3JCdWZm
ZXJUZXh0dXJlLT5HZXREZXNjKCZ0ZXh0dXJlRGVzYyk7CisKKyAgICAgICAgICAgIElEM0QxMURl
dmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICAgICAgICAgIElEM0Qx
MURldmljZUNvbnRleHQgKmRldmljZUNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRl
eHQoKTsKKworICAgICAgICAgICAgSUQzRDExVGV4dHVyZTJEKiBzcmNUZXggPSBOVUxMOworICAg
ICAgICAgICAgaWYgKHRleHR1cmVEZXNjLlNhbXBsZURlc2MuQ291bnQgPiAxKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHJlc29sdmVEZXNjOwor
ICAgICAgICAgICAgICAgIHJlc29sdmVEZXNjLldpZHRoID0gdGV4dHVyZURlc2MuV2lkdGg7Cisg
ICAgICAgICAgICAgICAgcmVzb2x2ZURlc2MuSGVpZ2h0ID0gdGV4dHVyZURlc2MuSGVpZ2h0Owor
ICAgICAgICAgICAgICAgIHJlc29sdmVEZXNjLk1pcExldmVscyA9IDE7CisgICAgICAgICAgICAg
ICAgcmVzb2x2ZURlc2MuQXJyYXlTaXplID0gMTsKKyAgICAgICAgICAgICAgICByZXNvbHZlRGVz
Yy5Gb3JtYXQgPSB0ZXh0dXJlRGVzYy5Gb3JtYXQ7CisgICAgICAgICAgICAgICAgcmVzb2x2ZURl
c2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAgICAgICAgICAgcmVzb2x2ZURlc2MuU2Ft
cGxlRGVzYy5RdWFsaXR5ID0gMDsKKyAgICAgICAgICAgICAgICByZXNvbHZlRGVzYy5Vc2FnZSA9
IEQzRDExX1VTQUdFX0RFRkFVTFQ7CisgICAgICAgICAgICAgICAgcmVzb2x2ZURlc2MuQmluZEZs
YWdzID0gMDsKKyAgICAgICAgICAgICAgICByZXNvbHZlRGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7
CisgICAgICAgICAgICAgICAgcmVzb2x2ZURlc2MuTWlzY0ZsYWdzID0gMDsKKworICAgICAgICAg
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJnJlc29sdmVE
ZXNjLCBOVUxMLCAmc3JjVGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBj
cmVhdGUgcmVzb2x2ZSB0ZXh0dXJlIGZvciBJbWFnZTExOjpjb3B5LCBIUkVTVUxUOiAweCVYLiIs
IHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBkZXZpY2VDb250ZXh0LT5SZXNvbHZlU3VicmVzb3VyY2Uoc3Jj
VGV4LCAwLCBjb2xvckJ1ZmZlclRleHR1cmUsIHN1YnJlc291cmNlSW5kZXgsIHRleHR1cmVEZXNj
LkZvcm1hdCk7CisgICAgICAgICAgICAgICAgc3VicmVzb3VyY2VJbmRleCA9IDA7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
c3JjVGV4ID0gY29sb3JCdWZmZXJUZXh0dXJlOworICAgICAgICAgICAgICAgIHNyY1RleC0+QWRk
UmVmKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEQzRDExX0JPWCBzcmNCb3g7Cisg
ICAgICAgICAgICBzcmNCb3gubGVmdCA9IHg7CisgICAgICAgICAgICBzcmNCb3gucmlnaHQgPSB4
ICsgd2lkdGg7CisgICAgICAgICAgICBzcmNCb3gudG9wID0geTsKKyAgICAgICAgICAgIHNyY0Jv
eC5ib3R0b20gPSB5ICsgaGVpZ2h0OworICAgICAgICAgICAgc3JjQm94LmZyb250ID0gMDsKKyAg
ICAgICAgICAgIHNyY0JveC5iYWNrID0gMTsKKworICAgICAgICAgICAgZGV2aWNlQ29udGV4dC0+
Q29weVN1YnJlc291cmNlUmVnaW9uKG1TdGFnaW5nVGV4dHVyZSwgMCwgeG9mZnNldCwgeW9mZnNl
dCwgMCwgc3JjVGV4LCBzdWJyZXNvdXJjZUluZGV4LCAmc3JjQm94KTsKKworICAgICAgICAgICAg
c3JjVGV4LT5SZWxlYXNlKCk7CisgICAgICAgICAgICBjb2xvckJ1ZmZlclRleHR1cmUtPlJlbGVh
c2UoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBUaGlz
IGZvcm1hdCByZXF1aXJlcyBjb252ZXJzaW9uLCBzbyB3ZSBtdXN0IGNvcHkgdGhlIHRleHR1cmUg
dG8gc3RhZ2luZyBhbmQgbWFudWFsbHkgY29udmVydCB2aWEgcmVhZFBpeGVscworICAgICAgICBE
M0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkSW1hZ2U7CisgICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gbWFwKEQzRDExX01BUF9XUklURSwgJm1hcHBlZEltYWdlKTsKKworICAgICAgICAvLyBk
ZXRlcm1pbmUgdGhlIG9mZnNldCBjb29yZGluYXRlIGludG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZl
cgorICAgICAgICBHTHNpemVpIHJvd09mZnNldCA9IGdsOjpDb21wdXRlUGl4ZWxTaXplKG1BY3R1
YWxGb3JtYXQpICogeG9mZnNldDsKKyAgICAgICAgdm9pZCAqZGF0YU9mZnNldCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXIqPihtYXBwZWRJbWFnZS5wRGF0YSkgKyBtYXBwZWRJbWFnZS5Sb3dQ
aXRjaCAqIHlvZmZzZXQgKyByb3dPZmZzZXQ7CisKKyAgICAgICAgbVJlbmRlcmVyLT5yZWFkUGl4
ZWxzKHNvdXJjZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZ2w6OkV4dHJhY3RGb3JtYXQobUludGVy
bmFsRm9ybWF0KSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RXh0cmFjdFR5
cGUobUludGVybmFsRm9ybWF0KSwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIGZhbHNlLCA0LCBkYXRh
T2Zmc2V0KTsKKworICAgICAgICB1bm1hcCgpOworICAgIH0KK30KKworSUQzRDExVGV4dHVyZTJE
ICpJbWFnZTExOjpnZXRTdGFnaW5nVGV4dHVyZSgpCit7CisgICAgY3JlYXRlU3RhZ2luZ1RleHR1
cmUoKTsKKworICAgIHJldHVybiBtU3RhZ2luZ1RleHR1cmU7Cit9CisKK3Vuc2lnbmVkIGludCBJ
bWFnZTExOjpnZXRTdGFnaW5nU3VicmVzb3VyY2UoKQoreworICAgIGNyZWF0ZVN0YWdpbmdUZXh0
dXJlKCk7CisKKyAgICByZXR1cm4gbVN0YWdpbmdTdWJyZXNvdXJjZTsKK30KKwordGVtcGxhdGUg
PHR5cGVuYW1lIFQsIHNpemVfdCBOPgorc3RhdGljIHZvaWQgc2V0RGVmYXVsdERhdGEoSUQzRDEx
RGV2aWNlQ29udGV4dCAqZGV2aWNlQ29udGV4dCwgSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCBV
SU5UIHN1YnJlc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIGNvbnN0IFQgKCZkZWZhdWx0RGF0YSlbTl0pCit7CisgICAgRDNE
MTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcDsKKyAgICBkZXZpY2VDb250ZXh0LT5NYXAodGV4dHVy
ZSwgc3VicmVzb3VyY2UsIEQzRDExX01BUF9XUklURSwgMCwgJm1hcCk7CisKKyAgICB1bnNpZ25l
ZCBjaGFyKiBwdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihtYXAucERhdGEp
OworICAgIHNpemVfdCBwaXhlbFNpemUgPSBzaXplb2YoVCkgKiBOOworCisgICAgZm9yIChHTHNp
emVpIHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBmb3IgKEdMc2l6ZWkg
eCA9IDA7IHggPCB3aWR0aDsgeCsrKQorICAgICAgICB7CisgICAgICAgICAgICBtZW1jcHkocHRy
ICsgKHkgKiBtYXAuUm93UGl0Y2gpICsgKHggKiBwaXhlbFNpemUpLCBkZWZhdWx0RGF0YSwgcGl4
ZWxTaXplKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGRldmljZUNvbnRleHQtPlVubWFwKHRl
eHR1cmUsIHN1YnJlc291cmNlKTsKK30KKwordm9pZCBJbWFnZTExOjpjcmVhdGVTdGFnaW5nVGV4
dHVyZSgpCit7CisgICAgaWYgKG1TdGFnaW5nVGV4dHVyZSkKKyAgICB7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBJRDNEMTFUZXh0dXJlMkQgKm5ld1RleHR1cmUgPSBOVUxMOworICAg
IGludCBsb2RPZmZzZXQgPSAxOworICAgIGNvbnN0IERYR0lfRk9STUFUIGR4Z2lGb3JtYXQgPSBn
ZXREWEdJRm9ybWF0KCk7CisgICAgQVNTRVJUKCFkM2QxMTo6SXNEZXB0aFN0ZW5jaWxGb3JtYXQo
ZHhnaUZvcm1hdCkpOyAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgZm9yIGRlcHRoIHRleHR1
cmVzCisKKyAgICBpZiAobVdpZHRoICE9IDAgJiYgbUhlaWdodCAhPSAwKQorICAgIHsKKyAgICAg
ICAgR0xzaXplaSB3aWR0aCA9IG1XaWR0aDsKKyAgICAgICAgR0xzaXplaSBoZWlnaHQgPSBtSGVp
Z2h0OworCisgICAgICAgIC8vIGFkanVzdCBzaXplIGlmIG5lZWRlZCBmb3IgY29tcHJlc3NlZCB0
ZXh0dXJlcworICAgICAgICBnbDo6TWFrZVZhbGlkU2l6ZShmYWxzZSwgZDNkMTE6OklzQ29tcHJl
c3NlZChkeGdpRm9ybWF0KSwgJndpZHRoLCAmaGVpZ2h0LCAmbG9kT2Zmc2V0KTsKKyAgICAgICAg
SUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAg
IEQzRDExX1RFWFRVUkUyRF9ERVNDIGRlc2M7CisgICAgICAgIGRlc2MuV2lkdGggPSB3aWR0aDsK
KyAgICAgICAgZGVzYy5IZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIGRlc2MuTWlwTGV2ZWxzID0g
bG9kT2Zmc2V0ICsgMTsKKyAgICAgICAgZGVzYy5BcnJheVNpemUgPSAxOworICAgICAgICBkZXNj
LkZvcm1hdCA9IGR4Z2lGb3JtYXQ7CisgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7
CisgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKKyAgICAgICAgZGVzYy5Vc2Fn
ZSA9IEQzRDExX1VTQUdFX1NUQUdJTkc7CisgICAgICAgIGRlc2MuQmluZEZsYWdzID0gMDsKKyAg
ICAgICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfUkVBRCB8IEQzRDEx
X0NQVV9BQ0NFU1NfV1JJVEU7CisgICAgICAgIGRlc2MuTWlzY0ZsYWdzID0gMDsKKworICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXNjLCBOVUxMLCAm
bmV3VGV4dHVyZSk7CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAg
RVJSKCJDcmVhdGluZyBpbWFnZSBmYWlsZWQuIik7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgfQorCisgICAgbVN0YWdpbmdU
ZXh0dXJlID0gbmV3VGV4dHVyZTsKKyAgICBtU3RhZ2luZ1N1YnJlc291cmNlID0gRDNEMTFDYWxj
U3VicmVzb3VyY2UobG9kT2Zmc2V0LCAwLCBsb2RPZmZzZXQgKyAxKTsKKyAgICBtRGlydHkgPSBm
YWxzZTsKKworICAgIGlmIChtRFhHSUZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9S
TSAmJiBnbDo6R2V0QWxwaGFTaXplKG1JbnRlcm5hbEZvcm1hdCkgPT0gMCkKKyAgICB7CisgICAg
ICAgIHVuc2lnbmVkIGNoYXIgZGVmYXVsdFBpeGVsWzRdID0geyAwLCAwLCAwLCAyNTUgfTsKKyAg
ICAgICAgc2V0RGVmYXVsdERhdGEobVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCksIG1TdGFn
aW5nVGV4dHVyZSwgbVN0YWdpbmdTdWJyZXNvdXJjZSwgbVdpZHRoLCBtSGVpZ2h0LCBkZWZhdWx0
UGl4ZWwpOworICAgIH0KKyAgICBlbHNlIGlmIChtRFhHSUZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9S
MzJHMzJCMzJBMzJfRkxPQVQgJiYgZ2w6OkdldEFscGhhU2l6ZShtSW50ZXJuYWxGb3JtYXQpID09
IDApCisgICAgeworICAgICAgICBmbG9hdCBkZWZhdWx0UGl4ZWxbNF0gPSB7IDAuMGYsIDAuMGYs
IDAuMGYsIDEuMGYgfTsKKyAgICAgICAgc2V0RGVmYXVsdERhdGEobVJlbmRlcmVyLT5nZXREZXZp
Y2VDb250ZXh0KCksIG1TdGFnaW5nVGV4dHVyZSwgbVN0YWdpbmdTdWJyZXNvdXJjZSwgbVdpZHRo
LCBtSGVpZ2h0LCBkZWZhdWx0UGl4ZWwpOworICAgIH0KK30KKworSFJFU1VMVCBJbWFnZTExOjpt
YXAoRDNEMTFfTUFQIG1hcFR5cGUsIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSAqbWFwKQorewor
ICAgIGNyZWF0ZVN0YWdpbmdUZXh0dXJlKCk7CisKKyAgICBIUkVTVUxUIHJlc3VsdCA9IEVfRkFJ
TDsKKworICAgIGlmIChtU3RhZ2luZ1RleHR1cmUpCisgICAgeworICAgICAgICBJRDNEMTFEZXZp
Y2VDb250ZXh0ICpkZXZpY2VDb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7
CisgICAgICAgIHJlc3VsdCA9IGRldmljZUNvbnRleHQtPk1hcChtU3RhZ2luZ1RleHR1cmUsIG1T
dGFnaW5nU3VicmVzb3VyY2UsIG1hcFR5cGUsIDAsIG1hcCk7CisKKyAgICAgICAgLy8gdGhpcyBj
YW4gZmFpbCBpZiB0aGUgZGV2aWNlIGlzIHJlbW92ZWQgKGZyb20gVERSKQorICAgICAgICBpZiAo
ZDNkMTE6OmlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1SZW5kZXJlci0+bm90aWZ5RGV2aWNlTG9zdCgpOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBtRGlydHkgPSB0
cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBJ
bWFnZTExOjp1bm1hcCgpCit7CisgICAgaWYgKG1TdGFnaW5nVGV4dHVyZSkKKyAgICB7CisgICAg
ICAgIElEM0QxMURldmljZUNvbnRleHQgKmRldmljZUNvbnRleHQgPSBtUmVuZGVyZXItPmdldERl
dmljZUNvbnRleHQoKTsKKyAgICAgICAgZGV2aWNlQ29udGV4dC0+VW5tYXAobVN0YWdpbmdUZXh0
dXJlLCBtU3RhZ2luZ1N1YnJlc291cmNlKTsKKyAgICB9Cit9CisKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW1hZ2Ux
MS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9JbWFnZTExLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTFhNjQ5MmRjODYzYTkxNjQxOWI1YmNkMTY0Y2E3ZDdi
YjVkOTVkYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW1hZ2UxMS5oCkBAIC0wLDAgKzEsNzYgQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisvLyBJbWFnZTExLmg6IERlZmluZXMgdGhlIHJ4OjpJbWFnZTExIGNsYXNzLCB3
aGljaCBhY3RzIGFzIHRoZSBpbnRlcmZhY2UgdG8KKy8vIHRoZSBhY3R1YWwgdW5kZXJseWluZyBy
ZXNvdXJjZXMgb2YgYSBUZXh0dXJlCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0lNQUdF
MTFfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX0lNQUdFMTFfSF8KKworI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZS5oIgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgi
CisKK25hbWVzcGFjZSBnbAoreworY2xhc3MgRnJhbWVidWZmZXI7Cit9CisKK25hbWVzcGFjZSBy
eAoreworY2xhc3MgUmVuZGVyZXI7CitjbGFzcyBSZW5kZXJlcjExOworY2xhc3MgVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UyRDsKK2NsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTsKKwor
Y2xhc3MgSW1hZ2UxMSA6IHB1YmxpYyBJbWFnZQoreworICBwdWJsaWM6CisgICAgSW1hZ2UxMSgp
OworICAgIHZpcnR1YWwgfkltYWdlMTEoKTsKKworICAgIHN0YXRpYyBJbWFnZTExICptYWtlSW1h
Z2UxMShJbWFnZSAqaW1nKTsKKworICAgIHN0YXRpYyB2b2lkIGdlbmVyYXRlTWlwbWFwKEltYWdl
MTEgKmRlc3QsIEltYWdlMTEgKnNyYyk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNEaXJ0eSgpIGNv
bnN0OworCisgICAgdmlydHVhbCBib29sIHVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAgdmlydHVhbCBib29sIHVwZGF0
ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwg
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgcmVkZWZpbmUoUmVuZGVyZXIgKnJl
bmRlcmVyLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIGJvb2wgZm9yY2VSZWxlYXNlKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlcmFibGVG
b3JtYXQoKSBjb25zdDsKKyAgICBEWEdJX0ZPUk1BVCBnZXREWEdJRm9ybWF0KCkgY29uc3Q7Cisg
ICAgCisgICAgdmlydHVhbCB2b2lkIGxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgR0xp
bnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCk7CisgICAgdmlydHVhbCB2b2lk
IGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHZvaWQgKmlucHV0KTsKKworICAgIHZpcnR1YWwgdm9pZCBjb3B5KEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSk7CisKKyAgcHJvdGVjdGVkOgor
ICAgIEhSRVNVTFQgbWFwKEQzRDExX01BUCBtYXBUeXBlLCBEM0QxMV9NQVBQRURfU1VCUkVTT1VS
Q0UgKm1hcCk7CisgICAgdm9pZCB1bm1hcCgpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1df
Q09QWV9BTkRfQVNTSUdOKEltYWdlMTEpOworCisgICAgSUQzRDExVGV4dHVyZTJEICpnZXRTdGFn
aW5nVGV4dHVyZSgpOworICAgIHVuc2lnbmVkIGludCBnZXRTdGFnaW5nU3VicmVzb3VyY2UoKTsK
KyAgICB2b2lkIGNyZWF0ZVN0YWdpbmdUZXh0dXJlKCk7CisKKyAgICBSZW5kZXJlcjExICptUmVu
ZGVyZXI7CisKKyAgICBEWEdJX0ZPUk1BVCBtRFhHSUZvcm1hdDsKKyAgICBJRDNEMTFUZXh0dXJl
MkQgKm1TdGFnaW5nVGV4dHVyZTsKKyAgICB1bnNpZ25lZCBpbnQgbVN0YWdpbmdTdWJyZXNvdXJj
ZTsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9JTUFHRTExX0hfCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL0luZGV4QnVmZmVyMTEuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbmRleEJ1ZmZlcjExLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NGY5
OTc2ZDQzZDFkYjRjYTQwMDJkNDc1YjlmNjE1NDRiZmMzMjA3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbmRl
eEJ1ZmZlcjExLmNwcApAQCAtMCwwICsxLDE4MyBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgi
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworLy8gSW5kZXhCdWZmZXIxMS5jcHA6IERlZmluZXMgdGhlIEQzRDEx
IEluZGV4QnVmZmVyIGltcGxlbWVudGF0aW9uLgorCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL0luZGV4QnVmZmVyMTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
ZDNkMTEvUmVuZGVyZXIxMS5oIgorCituYW1lc3BhY2UgcngKK3sKKworSW5kZXhCdWZmZXIxMTo6
SW5kZXhCdWZmZXIxMShSZW5kZXJlcjExICpjb25zdCByZW5kZXJlcikgOiBtUmVuZGVyZXIocmVu
ZGVyZXIpCit7CisgICAgbUJ1ZmZlciA9IE5VTEw7CisgICAgbUJ1ZmZlclNpemUgPSAwOworICAg
IG1EeW5hbWljVXNhZ2UgPSBmYWxzZTsKK30KKworSW5kZXhCdWZmZXIxMTo6fkluZGV4QnVmZmVy
MTEoKQoreworICAgIGlmIChtQnVmZmVyKQorICAgIHsKKyAgICAgICAgbUJ1ZmZlci0+UmVsZWFz
ZSgpOworICAgICAgICBtQnVmZmVyID0gTlVMTDsKKyAgICB9Cit9CisKK2Jvb2wgSW5kZXhCdWZm
ZXIxMTo6aW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSwgR0xlbnVtIGluZGV4VHlw
ZSwgYm9vbCBkeW5hbWljKQoreworICAgIGlmIChtQnVmZmVyKQorICAgIHsKKyAgICAgICAgbUJ1
ZmZlci0+UmVsZWFzZSgpOworICAgICAgICBtQnVmZmVyID0gTlVMTDsKKyAgICB9CisKKyAgICB1
cGRhdGVTZXJpYWwoKTsKKworICAgIGlmIChidWZmZXJTaXplID4gMCkKKyAgICB7CisgICAgICAg
IElEM0QxMURldmljZSogZHhEZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAg
ICAgIEQzRDExX0JVRkZFUl9ERVNDIGJ1ZmZlckRlc2M7CisgICAgICAgIGJ1ZmZlckRlc2MuQnl0
ZVdpZHRoID0gYnVmZmVyU2l6ZTsKKyAgICAgICAgYnVmZmVyRGVzYy5Vc2FnZSA9IEQzRDExX1VT
QUdFX0RZTkFNSUM7CisgICAgICAgIGJ1ZmZlckRlc2MuQmluZEZsYWdzID0gRDNEMTFfQklORF9J
TkRFWF9CVUZGRVI7CisgICAgICAgIGJ1ZmZlckRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9D
UFVfQUNDRVNTX1dSSVRFOworICAgICAgICBidWZmZXJEZXNjLk1pc2NGbGFncyA9IDA7CisgICAg
ICAgIGJ1ZmZlckRlc2MuU3RydWN0dXJlQnl0ZVN0cmlkZSA9IDA7CisKKyAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBkeERldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJEZXNjLCBOVUxMLCAmbUJ1
ZmZlcik7CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgbUJ1ZmZlclNpemUgPSBi
dWZmZXJTaXplOworICAgIG1JbmRleFR5cGUgPSBpbmRleFR5cGU7CisgICAgbUR5bmFtaWNVc2Fn
ZSA9IGR5bmFtaWM7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworSW5kZXhCdWZmZXIxMSAqSW5k
ZXhCdWZmZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEoSW5kZXhCdWZmZXIgKmluZGV4QnVmZmVyKQor
eworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKEluZGV4QnVmZmVyMTEqLCBpbmRleEJ1ZmZl
cikpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbmRleEJ1ZmZlcjExKj4oaW5kZXhCdWZmZXIp
OworfQorCitib29sIEluZGV4QnVmZmVyMTE6Om1hcEJ1ZmZlcih1bnNpZ25lZCBpbnQgb2Zmc2V0
LCB1bnNpZ25lZCBpbnQgc2l6ZSwgdm9pZCoqIG91dE1hcHBlZE1lbW9yeSkKK3sKKyAgICBpZiAo
bUJ1ZmZlcikKKyAgICB7CisgICAgICAgIC8vIENoZWNrIGZvciBpbnRlZ2VyIG92ZXJmbG93cyBh
bmQgb3V0LW91dC1ib3VuZHMgbWFwIHJlcXVlc3RzCisgICAgICAgIGlmIChvZmZzZXQgKyBzaXpl
IDwgb2Zmc2V0IHx8IG9mZnNldCArIHNpemUgPiBtQnVmZmVyU2l6ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgRVJSKCJJbmRleCBidWZmZXIgbWFwIHJhbmdlIGlzIG5vdCBpbnNpZGUgdGhlIGJ1
ZmZlci4iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAg
IElEM0QxMURldmljZUNvbnRleHQgKmR4Q29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29u
dGV4dCgpOworCisgICAgICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJj
ZTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkeENvbnRleHQtPk1hcChtQnVmZmVyLCAwLCBE
M0QxMV9NQVBfV1JJVEVfTk9fT1ZFUldSSVRFLCAwLCAmbWFwcGVkUmVzb3VyY2UpOworICAgICAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiSW5kZXgg
YnVmZmVyIG1hcCBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgiLCByZXN1bHQpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgKm91dE1hcHBlZE1lbW9yeSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1hcHBlZFJlc291cmNlLnBEYXRhKSArIG9mZnNldDsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEVS
UigiSW5kZXggYnVmZmVyIG5vdCBpbml0aWFsaXplZC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKworYm9vbCBJbmRleEJ1ZmZlcjExOjp1bm1hcEJ1ZmZlcigpCit7CisgICAg
aWYgKG1CdWZmZXIpCisgICAgeworICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpkeENvbnRl
eHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKKyAgICAgICAgZHhDb250ZXh0LT5V
bm1hcChtQnVmZmVyLCAwKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIEVSUigiSW5kZXggYnVmZmVyIG5vdCBpbml0aWFsaXplZC4iKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworR0xlbnVtIEluZGV4QnVmZmVyMTE6Omdl
dEluZGV4VHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1JbmRleFR5cGU7Cit9CisKK3Vuc2ln
bmVkIGludCBJbmRleEJ1ZmZlcjExOjpnZXRCdWZmZXJTaXplKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbUJ1ZmZlclNpemU7Cit9CisKK2Jvb2wgSW5kZXhCdWZmZXIxMTo6c2V0U2l6ZSh1bnNpZ25l
ZCBpbnQgYnVmZmVyU2l6ZSwgR0xlbnVtIGluZGV4VHlwZSkKK3sKKyAgICBpZiAoYnVmZmVyU2l6
ZSA+IG1CdWZmZXJTaXplIHx8IGluZGV4VHlwZSAhPSBtSW5kZXhUeXBlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGluaXRpYWxpemUoYnVmZmVyU2l6ZSwgaW5kZXhUeXBlLCBtRHluYW1pY1VzYWdl
KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
fQorCitib29sIEluZGV4QnVmZmVyMTE6OmRpc2NhcmQoKQoreworICAgIGlmIChtQnVmZmVyKQor
ICAgIHsKKyAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqZHhDb250ZXh0ID0gbVJlbmRlcmVy
LT5nZXREZXZpY2VDb250ZXh0KCk7CisKKyAgICAgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNF
IG1hcHBlZFJlc291cmNlOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGR4Q29udGV4dC0+TWFw
KG1CdWZmZXIsIDAsIEQzRDExX01BUF9XUklURV9ESVNDQVJELCAwLCAmbWFwcGVkUmVzb3VyY2Up
OworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVS
UigiSW5kZXggYnVmZmVyIG1hcCBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgiLCByZXN1bHQpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgZHhDb250ZXh0
LT5Vbm1hcChtQnVmZmVyLCAwKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgRVJSKCJJbmRleCBidWZmZXIgbm90IGluaXRpYWxpemVkLiIp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitEWEdJX0ZPUk1BVCBJbmRleEJ1
ZmZlcjExOjpnZXRJbmRleEZvcm1hdCgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtSW5kZXhUeXBl
KQorICAgIHsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURTogICAgcmV0dXJuIERYR0lfRk9S
TUFUX1IxNl9VSU5UOworICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDogICByZXR1cm4gRFhH
SV9GT1JNQVRfUjE2X1VJTlQ7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDogICAgIHJldHVy
biBEWEdJX0ZPUk1BVF9SMzJfVUlOVDsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAg
cmV0dXJuIERYR0lfRk9STUFUX1VOS05PV047CisgICAgfQorfQorCitJRDNEMTFCdWZmZXIgKklu
ZGV4QnVmZmVyMTE6OmdldEJ1ZmZlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1CdWZmZXI7Cit9
CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0luZGV4QnVmZmVyMTEu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
SW5kZXhCdWZmZXIxMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM5YTYxOTQ2YWQ2ZWY4OTJjNGNhNjZiNjA3ZTY1
OWEzNWNjMDlkZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0luZGV4QnVmZmVyMTEuaApAQCAtMCwwICsxLDUz
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworLy8gSW5kZXhCdWZmZXIxMS5oOiBEZWZpbmVzIHRoZSBEM0Qx
MSBJbmRleEJ1ZmZlciBpbXBsZW1lbnRhdGlvbi4KKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVS
RVJfSU5ERVhCVUZGRVIxMV9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfSU5ERVhCVUZG
RVIxMV9IXworCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0luZGV4QnVmZmVyLmgiCisK
K25hbWVzcGFjZSByeAoreworY2xhc3MgUmVuZGVyZXIxMTsKKworY2xhc3MgSW5kZXhCdWZmZXIx
MSA6IHB1YmxpYyBJbmRleEJ1ZmZlcgoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgSW5kZXhC
dWZmZXIxMShSZW5kZXJlcjExICpjb25zdCByZW5kZXJlcik7CisgICAgdmlydHVhbCB+SW5kZXhC
dWZmZXIxMSgpOworCisgICAgdmlydHVhbCBib29sIGluaXRpYWxpemUodW5zaWduZWQgaW50IGJ1
ZmZlclNpemUsIEdMZW51bSBpbmRleFR5cGUsIGJvb2wgZHluYW1pYyk7CisKKyAgICBzdGF0aWMg
SW5kZXhCdWZmZXIxMSAqbWFrZUluZGV4QnVmZmVyMTEoSW5kZXhCdWZmZXIgKmluZGV4QnVmZmVy
KTsKKworICAgIHZpcnR1YWwgYm9vbCBtYXBCdWZmZXIodW5zaWduZWQgaW50IG9mZnNldCwgdW5z
aWduZWQgaW50IHNpemUsIHZvaWQqKiBvdXRNYXBwZWRNZW1vcnkpOworICAgIHZpcnR1YWwgYm9v
bCB1bm1hcEJ1ZmZlcigpOworCisgICAgdmlydHVhbCBHTGVudW0gZ2V0SW5kZXhUeXBlKCkgY29u
c3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0QnVmZmVyU2l6ZSgpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBzZXRTaXplKHVuc2lnbmVkIGludCBidWZmZXJTaXplLCBHTGVudW0gaW5k
ZXhUeXBlKTsKKworICAgIHZpcnR1YWwgYm9vbCBkaXNjYXJkKCk7CisKKyAgICBEWEdJX0ZPUk1B
VCBnZXRJbmRleEZvcm1hdCgpIGNvbnN0OworICAgIElEM0QxMUJ1ZmZlciAqZ2V0QnVmZmVyKCkg
Y29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oSW5kZXhC
dWZmZXIxMSk7CisKKyAgICByeDo6UmVuZGVyZXIxMSAqY29uc3QgbVJlbmRlcmVyOworCisgICAg
SUQzRDExQnVmZmVyICptQnVmZmVyOworICAgIHVuc2lnbmVkIGludCBtQnVmZmVyU2l6ZTsKKyAg
ICBHTGVudW0gbUluZGV4VHlwZTsKKyAgICBib29sIG1EeW5hbWljVXNhZ2U7Cit9OworCit9CisK
KyNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfSU5ERVhCVUZGRVIxMV9IXwpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5wdXRMYXlvdXRDYWNoZS5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0
Q2FjaGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM0MThlODk0MmM4ODVkYjdjZjIyZjE2NjcxZThiYWViMzBh
MGUyNTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuY3BwCkBAIC0wLDAgKzEsMjEz
IEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBJbnB1dExh
eW91dENhY2hlLmNwcDogRGVmaW5lcyBJbnB1dExheW91dENhY2hlLCBhIGNsYXNzIHRoYXQgYnVp
bGRzIGFuZCBjYWNoZXMKKy8vIEQzRDExIGlucHV0IGxheW91dHMuCisKKyNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5wdXRMYXlvdXRDYWNoZS5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9WZXJ0ZXhCdWZmZXIxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9CdWZmZXJTdG9yYWdlMTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvU2hhZGVyRXhlY3V0YWJsZTExLmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L1Byb2dyYW1CaW5hcnkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhEYXRhTWFuYWdlci5oIgorCisjaW5jbHVkZSAi
dGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJtdXJIYXNoMy5oIgorCituYW1lc3BhY2UgcngKK3sK
KworY29uc3QgdW5zaWduZWQgaW50IElucHV0TGF5b3V0Q2FjaGU6OmtNYXhJbnB1dExheW91dHMg
PSAxMDI0OworCitJbnB1dExheW91dENhY2hlOjpJbnB1dExheW91dENhY2hlKCkgOiBtSW5wdXRM
YXlvdXRNYXAoa01heElucHV0TGF5b3V0cywgaGFzaElucHV0TGF5b3V0LCBjb21wYXJlSW5wdXRM
YXlvdXRzKQoreworICAgIG1Db3VudGVyID0gMDsKKyAgICBtRGV2aWNlID0gTlVMTDsKKyAgICBt
RGV2aWNlQ29udGV4dCA9IE5VTEw7CisgICAgbUN1cnJlbnRJTCA9IE5VTEw7CisgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAg
eworICAgICAgICBtQ3VycmVudEJ1ZmZlcnNbaV0gPSAtMTsKKyAgICAgICAgbUN1cnJlbnRWZXJ0
ZXhTdHJpZGVzW2ldID0gLTE7CisgICAgICAgIG1DdXJyZW50VmVydGV4T2Zmc2V0c1tpXSA9IC0x
OworICAgIH0KK30KKworSW5wdXRMYXlvdXRDYWNoZTo6fklucHV0TGF5b3V0Q2FjaGUoKQorewor
ICAgIGNsZWFyKCk7Cit9CisKK3ZvaWQgSW5wdXRMYXlvdXRDYWNoZTo6aW5pdGlhbGl6ZShJRDNE
MTFEZXZpY2UgKmRldmljZSwgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCkKK3sKKyAgICBj
bGVhcigpOworICAgIG1EZXZpY2UgPSBkZXZpY2U7CisgICAgbURldmljZUNvbnRleHQgPSBjb250
ZXh0OworfQorCit2b2lkIElucHV0TGF5b3V0Q2FjaGU6OmNsZWFyKCkKK3sKKyAgICBmb3IgKElu
cHV0TGF5b3V0TWFwOjppdGVyYXRvciBpID0gbUlucHV0TGF5b3V0TWFwLmJlZ2luKCk7IGkgIT0g
bUlucHV0TGF5b3V0TWFwLmVuZCgpOyBpKyspCisgICAgeworICAgICAgICBpLT5zZWNvbmQuaW5w
dXRMYXlvdXQtPlJlbGVhc2UoKTsKKyAgICB9CisgICAgbUlucHV0TGF5b3V0TWFwLmNsZWFyKCk7
CisgICAgbWFya0RpcnR5KCk7Cit9CisKK3ZvaWQgSW5wdXRMYXlvdXRDYWNoZTo6bWFya0RpcnR5
KCkKK3sKKyAgICBtQ3VycmVudElMID0gTlVMTDsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKKyAgICB7CisgICAgICAgIG1DdXJy
ZW50QnVmZmVyc1tpXSA9IC0xOworICAgICAgICBtQ3VycmVudFZlcnRleFN0cmlkZXNbaV0gPSAt
MTsKKyAgICAgICAgbUN1cnJlbnRWZXJ0ZXhPZmZzZXRzW2ldID0gLTE7CisgICAgfQorfQorCitH
TGVudW0gSW5wdXRMYXlvdXRDYWNoZTo6YXBwbHlWZXJ0ZXhCdWZmZXJzKFRyYW5zbGF0ZWRBdHRy
aWJ1dGUgYXR0cmlidXRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1C
aW5hcnkpCit7CisgICAgaW50IHNvcnRlZFNlbWFudGljSW5kaWNlc1tnbDo6TUFYX1ZFUlRFWF9B
VFRSSUJTXTsKKyAgICBwcm9ncmFtQmluYXJ5LT5zb3J0QXR0cmlidXRlc0J5TGF5b3V0KGF0dHJp
YnV0ZXMsIHNvcnRlZFNlbWFudGljSW5kaWNlcyk7CisKKyAgICBpZiAoIW1EZXZpY2UgfHwgIW1E
ZXZpY2VDb250ZXh0KQorICAgIHsKKyAgICAgICAgRVJSKCJJbnB1dExheW91dENhY2hlIGlzIG5v
dCBpbml0aWFsaXplZC4iKTsKKyAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOwor
ICAgIH0KKworICAgIElucHV0TGF5b3V0S2V5IGlsS2V5ID0geyAwIH07CisKKyAgICBJRDNEMTFC
dWZmZXIgKnZlcnRleEJ1ZmZlcnNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10gPSB7IE5VTEwgfTsK
KyAgICB1bnNpZ25lZCBpbnQgdmVydGV4QnVmZmVyU2VyaWFsc1tnbDo6TUFYX1ZFUlRFWF9BVFRS
SUJTXSA9IHsgMCB9OworICAgIFVJTlQgdmVydGV4U3RyaWRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRS
SUJTXSA9IHsgMCB9OworICAgIFVJTlQgdmVydGV4T2Zmc2V0c1tnbDo6TUFYX1ZFUlRFWF9BVFRS
SUJTXSA9IHsgMCB9OworCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHNlbWFudGljTmFtZSA9ICJU
RVhDT09SRCI7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpNQVhfVkVS
VEVYX0FUVFJJQlM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmFjdGl2
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgVmVydGV4QnVmZmVyMTEgKnZlcnRleEJ1ZmZlciA9
IFZlcnRleEJ1ZmZlcjExOjptYWtlVmVydGV4QnVmZmVyMTEoYXR0cmlidXRlc1tpXS52ZXJ0ZXhC
dWZmZXIpOworICAgICAgICAgICAgQnVmZmVyU3RvcmFnZTExICpidWZmZXJTdG9yYWdlID0gYXR0
cmlidXRlc1tpXS5zdG9yYWdlID8gQnVmZmVyU3RvcmFnZTExOjptYWtlQnVmZmVyU3RvcmFnZTEx
KGF0dHJpYnV0ZXNbaV0uc3RvcmFnZSkgOiBOVUxMOworCisgICAgICAgICAgICBEM0QxMV9JTlBV
VF9DTEFTU0lGSUNBVElPTiBpbnB1dENsYXNzID0gYXR0cmlidXRlc1tpXS5kaXZpc29yID4gMCA/
IEQzRDExX0lOUFVUX1BFUl9JTlNUQU5DRV9EQVRBIDogRDNEMTFfSU5QVVRfUEVSX1ZFUlRFWF9E
QVRBOworCisgICAgICAgICAgICAvLyBSZWNvcmQgdGhlIHR5cGUgb2YgdGhlIGFzc29jaWF0ZWQg
dmVydGV4IHNoYWRlciB2ZWN0b3IgaW4gb3VyIGtleQorICAgICAgICAgICAgLy8gVGhpcyB3aWxs
IHByZXZlbnQgbWlzbWF0Y2hlZCB2ZXJ0ZXggc2hhZGVycyBmcm9tIHVzaW5nIHRoZSBzYW1lIGlu
cHV0IGxheW91dAorICAgICAgICAgICAgR0xpbnQgYXR0cmlidXRlU2l6ZTsKKyAgICAgICAgICAg
IHByb2dyYW1CaW5hcnktPmdldEFjdGl2ZUF0dHJpYnV0ZShpbEtleS5lbGVtZW50Q291bnQsIDAs
IE5VTEwsICZhdHRyaWJ1dGVTaXplLCAmaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50
XS5nbHNsRWxlbWVudFR5cGUsIE5VTEwpOworCisgICAgICAgICAgICBpbEtleS5lbGVtZW50c1tp
bEtleS5lbGVtZW50Q291bnRdLmRlc2MuU2VtYW50aWNOYW1lID0gc2VtYW50aWNOYW1lOworICAg
ICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5kZXNjLlNlbWFudGlj
SW5kZXggPSBzb3J0ZWRTZW1hbnRpY0luZGljZXNbaV07CisgICAgICAgICAgICBpbEtleS5lbGVt
ZW50c1tpbEtleS5lbGVtZW50Q291bnRdLmRlc2MuRm9ybWF0ID0gYXR0cmlidXRlc1tpXS5hdHRy
aWJ1dGUtPm1BcnJheUVuYWJsZWQgPyB2ZXJ0ZXhCdWZmZXItPmdldERYR0lGb3JtYXQoKmF0dHJp
YnV0ZXNbaV0uYXR0cmlidXRlKSA6IERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDsKKyAg
ICAgICAgICAgIGlsS2V5LmVsZW1lbnRzW2lsS2V5LmVsZW1lbnRDb3VudF0uZGVzYy5JbnB1dFNs
b3QgPSBpOworICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5k
ZXNjLkFsaWduZWRCeXRlT2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIGlsS2V5LmVsZW1lbnRzW2ls
S2V5LmVsZW1lbnRDb3VudF0uZGVzYy5JbnB1dFNsb3RDbGFzcyA9IGlucHV0Q2xhc3M7CisgICAg
ICAgICAgICBpbEtleS5lbGVtZW50c1tpbEtleS5lbGVtZW50Q291bnRdLmRlc2MuSW5zdGFuY2VE
YXRhU3RlcFJhdGUgPSBhdHRyaWJ1dGVzW2ldLmRpdmlzb3I7CisgICAgICAgICAgICBpbEtleS5l
bGVtZW50Q291bnQrKzsKKworICAgICAgICAgICAgdmVydGV4QnVmZmVyc1tpXSA9IGJ1ZmZlclN0
b3JhZ2UgPyBidWZmZXJTdG9yYWdlLT5nZXRCdWZmZXIoQlVGRkVSX1VTQUdFX1ZFUlRFWCkgOiB2
ZXJ0ZXhCdWZmZXItPmdldEJ1ZmZlcigpOworICAgICAgICAgICAgdmVydGV4QnVmZmVyU2VyaWFs
c1tpXSA9IGJ1ZmZlclN0b3JhZ2UgPyBidWZmZXJTdG9yYWdlLT5nZXRTZXJpYWwoKSA6IHZlcnRl
eEJ1ZmZlci0+Z2V0U2VyaWFsKCk7CisgICAgICAgICAgICB2ZXJ0ZXhTdHJpZGVzW2ldID0gYXR0
cmlidXRlc1tpXS5zdHJpZGU7CisgICAgICAgICAgICB2ZXJ0ZXhPZmZzZXRzW2ldID0gYXR0cmli
dXRlc1tpXS5vZmZzZXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBJRDNEMTFJbnB1dExheW91
dCAqaW5wdXRMYXlvdXQgPSBOVUxMOworCisgICAgSW5wdXRMYXlvdXRNYXA6Oml0ZXJhdG9yIGkg
PSBtSW5wdXRMYXlvdXRNYXAuZmluZChpbEtleSk7CisgICAgaWYgKGkgIT0gbUlucHV0TGF5b3V0
TWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgaW5wdXRMYXlvdXQgPSBpLT5zZWNvbmQuaW5wdXRM
YXlvdXQ7CisgICAgICAgIGktPnNlY29uZC5sYXN0VXNlZFRpbWUgPSBtQ291bnRlcisrOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBTaGFkZXJFeGVjdXRhYmxlMTEgKnNoYWRlciA9
IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShwcm9ncmFtQmluYXJ5
LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlKCkpOworCisgICAgICAgIEQzRDExX0lOUFVUX0VMRU1FTlRf
REVTQyBkZXNjc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaiA9IDA7IGogPCBpbEtleS5lbGVtZW50Q291bnQ7ICsraikKKyAgICAgICAgeworICAg
ICAgICAgICAgZGVzY3Nbal0gPSBpbEtleS5lbGVtZW50c1tqXS5kZXNjOworICAgICAgICB9CisK
KyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVJbnB1dExheW91dChkZXNj
cywgaWxLZXkuZWxlbWVudENvdW50LCBzaGFkZXItPmdldEZ1bmN0aW9uKCksIHNoYWRlci0+Z2V0
TGVuZ3RoKCksICZpbnB1dExheW91dCk7CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAg
ICAgICAgeworICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gY3JhdGUgaW5wdXQgbGF5b3V0LCBy
ZXN1bHQ6IDB4JTA4eCIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9P
UEVSQVRJT047CisgICAgICAgIH0KKworICAgICAgICBpZiAobUlucHV0TGF5b3V0TWFwLnNpemUo
KSA+PSBrTWF4SW5wdXRMYXlvdXRzKQorICAgICAgICB7CisgICAgICAgICAgICBUUkFDRSgiT3Zl
cmZsb3dlZCB0aGUgbGltaXQgb2YgJXUgaW5wdXQgbGF5b3V0cywgcmVtb3ZpbmcgdGhlIGxlYXN0
IHJlY2VudGx5IHVzZWQgIgorICAgICAgICAgICAgICAgICAgInRvIG1ha2Ugcm9vbS4iLCBrTWF4
SW5wdXRMYXlvdXRzKTsKKworICAgICAgICAgICAgSW5wdXRMYXlvdXRNYXA6Oml0ZXJhdG9yIGxl
YXN0UmVjZW50bHlVc2VkID0gbUlucHV0TGF5b3V0TWFwLmJlZ2luKCk7CisgICAgICAgICAgICBm
b3IgKElucHV0TGF5b3V0TWFwOjppdGVyYXRvciBpID0gbUlucHV0TGF5b3V0TWFwLmJlZ2luKCk7
IGkgIT0gbUlucHV0TGF5b3V0TWFwLmVuZCgpOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaWYgKGktPnNlY29uZC5sYXN0VXNlZFRpbWUgPCBsZWFzdFJlY2VudGx5VXNlZC0+
c2Vjb25kLmxhc3RVc2VkVGltZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIGxlYXN0UmVjZW50bHlVc2VkID0gaTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmlucHV0TGF5b3V0LT5S
ZWxlYXNlKCk7CisgICAgICAgICAgICBtSW5wdXRMYXlvdXRNYXAuZXJhc2UobGVhc3RSZWNlbnRs
eVVzZWQpOworICAgICAgICB9CisKKyAgICAgICAgSW5wdXRMYXlvdXRDb3VudGVyUGFpciBpbnB1
dENvdW50ZXJQYWlyOworICAgICAgICBpbnB1dENvdW50ZXJQYWlyLmlucHV0TGF5b3V0ID0gaW5w
dXRMYXlvdXQ7CisgICAgICAgIGlucHV0Q291bnRlclBhaXIubGFzdFVzZWRUaW1lID0gbUNvdW50
ZXIrKzsKKworICAgICAgICBtSW5wdXRMYXlvdXRNYXAuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGls
S2V5LCBpbnB1dENvdW50ZXJQYWlyKSk7CisgICAgfQorCisgICAgaWYgKGlucHV0TGF5b3V0ICE9
IG1DdXJyZW50SUwpCisgICAgeworICAgICAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRJbnB1dExh
eW91dChpbnB1dExheW91dCk7CisgICAgICAgIG1DdXJyZW50SUwgPSBpbnB1dExheW91dDsKKyAg
ICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpNQVhfVkVSVEVYX0FU
VFJJQlM7IGkrKykKKyAgICB7CisgICAgICAgIGlmICh2ZXJ0ZXhCdWZmZXJTZXJpYWxzW2ldICE9
IG1DdXJyZW50QnVmZmVyc1tpXSB8fCB2ZXJ0ZXhTdHJpZGVzW2ldICE9IG1DdXJyZW50VmVydGV4
U3RyaWRlc1tpXSB8fAorICAgICAgICAgICAgdmVydGV4T2Zmc2V0c1tpXSAhPSBtQ3VycmVudFZl
cnRleE9mZnNldHNbaV0pCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5J
QVNldFZlcnRleEJ1ZmZlcnMoaSwgMSwgJnZlcnRleEJ1ZmZlcnNbaV0sICZ2ZXJ0ZXhTdHJpZGVz
W2ldLCAmdmVydGV4T2Zmc2V0c1tpXSk7CisgICAgICAgICAgICBtQ3VycmVudEJ1ZmZlcnNbaV0g
PSB2ZXJ0ZXhCdWZmZXJTZXJpYWxzW2ldOworICAgICAgICAgICAgbUN1cnJlbnRWZXJ0ZXhTdHJp
ZGVzW2ldID0gdmVydGV4U3RyaWRlc1tpXTsKKyAgICAgICAgICAgIG1DdXJyZW50VmVydGV4T2Zm
c2V0c1tpXSA9IHZlcnRleE9mZnNldHNbaV07CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gR0xfTk9fRVJST1I7Cit9CisKK3N0ZDo6c2l6ZV90IElucHV0TGF5b3V0Q2FjaGU6Omhhc2hJ
bnB1dExheW91dChjb25zdCBJbnB1dExheW91dEtleSAmaW5wdXRMYXlvdXQpCit7CisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIGludCBzZWVkID0gMHhERUFEQkVFRjsKKworICAgIHN0ZDo6c2l6
ZV90IGhhc2ggPSAwOworICAgIE11cm11ckhhc2gzX3g4Nl8zMihpbnB1dExheW91dC5iZWdpbigp
LCBpbnB1dExheW91dC5lbmQoKSAtIGlucHV0TGF5b3V0LmJlZ2luKCksIHNlZWQsICZoYXNoKTsK
KyAgICByZXR1cm4gaGFzaDsKK30KKworYm9vbCBJbnB1dExheW91dENhY2hlOjpjb21wYXJlSW5w
dXRMYXlvdXRzKGNvbnN0IElucHV0TGF5b3V0S2V5ICZhLCBjb25zdCBJbnB1dExheW91dEtleSAm
YikKK3sKKyAgICBpZiAoYS5lbGVtZW50Q291bnQgIT0gYi5lbGVtZW50Q291bnQpCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHN0ZDo6ZXF1YWwoYS5i
ZWdpbigpLCBhLmVuZCgpLCBiLmJlZ2luKCkpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0
Q2FjaGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkMTEvSW5wdXRMYXlvdXRDYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiMWE4ZWViY2Y3YTZjYTk5MGNh
YjkzODI1NThmMzM5NzgxNDdhMDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuaApA
QCAtMCwwICsxLDk1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gSW5wdXRMYXlvdXRDYWNoZS5oOiBE
ZWZpbmVzIElucHV0TGF5b3V0Q2FjaGUsIGEgY2xhc3MgdGhhdCBidWlsZHMgYW5kIGNhY2hlcwor
Ly8gRDNEMTEgaW5wdXQgbGF5b3V0cy4KKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfSU5Q
VVRMQVlPVVRDQUNIRV9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfSU5QVVRMQVlPVVRD
QUNIRV9IXworCisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnN0YW50cy5oIgorI2luY2x1ZGUgImNv
bW1vbi9hbmdsZXV0aWxzLmgiCisKK25hbWVzcGFjZSBnbAoreworY2xhc3MgUHJvZ3JhbUJpbmFy
eTsKK30KKworbmFtZXNwYWNlIHJ4Cit7CitzdHJ1Y3QgVHJhbnNsYXRlZEF0dHJpYnV0ZTsKKwor
Y2xhc3MgSW5wdXRMYXlvdXRDYWNoZQoreworICBwdWJsaWM6CisgICAgSW5wdXRMYXlvdXRDYWNo
ZSgpOworICAgIHZpcnR1YWwgfklucHV0TGF5b3V0Q2FjaGUoKTsKKworICAgIHZvaWQgaW5pdGlh
bGl6ZShJRDNEMTFEZXZpY2UgKmRldmljZSwgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCk7
CisgICAgdm9pZCBjbGVhcigpOworICAgIHZvaWQgbWFya0RpcnR5KCk7CisKKyAgICBHTGVudW0g
YXBwbHlWZXJ0ZXhCdWZmZXJzKFRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0cmlidXRlc1tnbDo6TUFY
X1ZFUlRFWF9BVFRSSUJTXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KTsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihJbnB1dExheW91dENhY2hlKTsKKworICAgIHN0cnVjdCBJbnB1dExheW91
dEVsZW1lbnQKKyAgICB7CisgICAgICAgIEQzRDExX0lOUFVUX0VMRU1FTlRfREVTQyBkZXNjOwor
ICAgICAgICBHTGVudW0gZ2xzbEVsZW1lbnRUeXBlOworICAgIH07CisKKyAgICBzdHJ1Y3QgSW5w
dXRMYXlvdXRLZXkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBlbGVtZW50Q291bnQ7Cisg
ICAgICAgIElucHV0TGF5b3V0RWxlbWVudCBlbGVtZW50c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJT
XTsKKworICAgICAgICBjb25zdCBjaGFyICpiZWdpbigpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigmZWxlbWVudENvdW50
KTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IGNoYXIgKmVuZCgpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigmZWxl
bWVudHNbZWxlbWVudENvdW50XSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgc3RydWN0IElu
cHV0TGF5b3V0Q291bnRlclBhaXIKKyAgICB7CisgICAgICAgIElEM0QxMUlucHV0TGF5b3V0ICpp
bnB1dExheW91dDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGxhc3RVc2VkVGltZTsKKyAg
ICB9OworCisgICAgSUQzRDExSW5wdXRMYXlvdXQgKm1DdXJyZW50SUw7CisgICAgdW5zaWduZWQg
aW50IG1DdXJyZW50QnVmZmVyc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICBVSU5UIG1D
dXJyZW50VmVydGV4U3RyaWRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICBVSU5UIG1D
dXJyZW50VmVydGV4T2Zmc2V0c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKworICAgIHN0YXRp
YyBzdGQ6OnNpemVfdCBoYXNoSW5wdXRMYXlvdXQoY29uc3QgSW5wdXRMYXlvdXRLZXkgJmlucHV0
TGF5b3V0KTsKKyAgICBzdGF0aWMgYm9vbCBjb21wYXJlSW5wdXRMYXlvdXRzKGNvbnN0IElucHV0
TGF5b3V0S2V5ICZhLCBjb25zdCBJbnB1dExheW91dEtleSAmYik7CisKKyAgICB0eXBlZGVmIHN0
ZDo6c2l6ZV90ICgqSW5wdXRMYXlvdXRIYXNoRnVuY3Rpb24pKGNvbnN0IElucHV0TGF5b3V0S2V5
ICYpOworICAgIHR5cGVkZWYgYm9vbCAoKklucHV0TGF5b3V0RXF1YWxpdHlGdW5jdGlvbikoY29u
c3QgSW5wdXRMYXlvdXRLZXkgJiwgY29uc3QgSW5wdXRMYXlvdXRLZXkgJik7CisgICAgdHlwZWRl
ZiBzdGQ6OnVub3JkZXJlZF9tYXA8SW5wdXRMYXlvdXRLZXksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSW5wdXRMYXlvdXRDb3VudGVyUGFpciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBJbnB1dExheW91dEhhc2hGdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBJbnB1dExheW91dEVxdWFsaXR5RnVuY3Rpb24+IElucHV0TGF5b3V0TWFwOwor
ICAgIElucHV0TGF5b3V0TWFwIG1JbnB1dExheW91dE1hcDsKKworICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBpbnQga01heElucHV0TGF5b3V0czsKKworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBt
Q291bnRlcjsKKworICAgIElEM0QxMURldmljZSAqbURldmljZTsKKyAgICBJRDNEMTFEZXZpY2VD
b250ZXh0ICptRGV2aWNlQ29udGV4dDsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9S
RU5ERVJFUl9JTlBVVExBWU9VVENBQ0hFX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1F1ZXJ5MTEuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9RdWVyeTExLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yNGMwMzMwYTFlMmMyYTQ3OTE0YzM3OWZjNzM1OTE5MTU3NDJhMjMxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9RdWVyeTExLmNwcApAQCAtMCwwICsxLDEyMiBAQAorI2luY2x1ZGUgInBy
ZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUXVlcnkxMS5jcHA6IERlZmluZXMgdGhl
IHJ4OjpRdWVyeTExIGNsYXNzIHdoaWNoIGltcGxlbWVudHMgcng6OlF1ZXJ5SW1wbC4KKworI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9RdWVyeTExLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIv
bWFpbi5oIgorCituYW1lc3BhY2UgcngKK3sKKworUXVlcnkxMTo6UXVlcnkxMShyeDo6UmVuZGVy
ZXIxMSAqcmVuZGVyZXIsIEdMZW51bSB0eXBlKSA6IFF1ZXJ5SW1wbCh0eXBlKQoreworICAgIG1S
ZW5kZXJlciA9IHJlbmRlcmVyOworICAgIG1RdWVyeSA9IE5VTEw7Cit9CisKK1F1ZXJ5MTE6On5R
dWVyeTExKCkKK3sKKyAgICBpZiAobVF1ZXJ5KQorICAgIHsKKyAgICAgICAgbVF1ZXJ5LT5SZWxl
YXNlKCk7CisgICAgICAgIG1RdWVyeSA9IE5VTEw7CisgICAgfQorfQorCit2b2lkIFF1ZXJ5MTE6
OmJlZ2luKCkKK3sKKyAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCisgICAgeworICAgICAgICBEM0Qx
MV9RVUVSWV9ERVNDIHF1ZXJ5RGVzYzsKKyAgICAgICAgcXVlcnlEZXNjLlF1ZXJ5ID0gRDNEMTFf
UVVFUllfT0NDTFVTSU9OOworICAgICAgICBxdWVyeURlc2MuTWlzY0ZsYWdzID0gMDsKKworICAg
ICAgICBpZiAoRkFJTEVEKG1SZW5kZXJlci0+Z2V0RGV2aWNlKCktPkNyZWF0ZVF1ZXJ5KCZxdWVy
eURlc2MsICZtUXVlcnkpKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1SZW5kZXJlci0+
Z2V0RGV2aWNlQ29udGV4dCgpLT5CZWdpbihtUXVlcnkpOworfQorCit2b2lkIFF1ZXJ5MTE6OmVu
ZCgpCit7CisgICAgaWYgKG1RdWVyeSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgfQorCisgICAgbVJlbmRlcmVyLT5n
ZXREZXZpY2VDb250ZXh0KCktPkVuZChtUXVlcnkpOworCisgICAgbVN0YXR1cyA9IEdMX0ZBTFNF
OworICAgIG1SZXN1bHQgPSBHTF9GQUxTRTsKK30KKworR0x1aW50IFF1ZXJ5MTE6OmdldFJlc3Vs
dCgpCit7CisgICAgaWYgKG1RdWVyeSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgd2hpbGUgKCF0
ZXN0UXVlcnkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgU2xlZXAoMCk7CisgICAgICAgICAg
ICAvLyBleHBsaWNpdGx5IGNoZWNrIGZvciBkZXZpY2UgbG9zcywgc29tZSBkcml2ZXJzIHNlZW0g
dG8gcmV0dXJuIFNfRkFMU0UKKyAgICAgICAgICAgIC8vIGlmIHRoZSBkZXZpY2UgaXMgbG9zdAor
ICAgICAgICAgICAgaWYgKG1SZW5kZXJlci0+dGVzdERldmljZUxvc3QodHJ1ZSkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
LCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBtUmVz
dWx0OworfQorCitHTGJvb2xlYW4gUXVlcnkxMTo6aXNSZXN1bHRBdmFpbGFibGUoKQoreworICAg
IGlmIChtUXVlcnkgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIHRlc3RRdWVyeSgpOworICAgIH0K
KworICAgIHJldHVybiBtU3RhdHVzOworfQorCitHTGJvb2xlYW4gUXVlcnkxMTo6dGVzdFF1ZXJ5
KCkKK3sKKyAgICBpZiAobVF1ZXJ5ICE9IE5VTEwgJiYgbVN0YXR1cyAhPSBHTF9UUlVFKQorICAg
IHsKKyAgICAgICAgVUlOVDY0IG51bVBpeGVscyA9IDA7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCktPkdldERhdGEobVF1ZXJ5LCAmbnVtUGl4
ZWxzLCBzaXplb2YoVUlOVDY0KSwgMCk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gU19PSykKKyAg
ICAgICAgeworICAgICAgICAgICAgbVN0YXR1cyA9IEdMX1RSVUU7CisKKyAgICAgICAgICAgIHN3
aXRjaCAoZ2V0VHlwZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0FO
WV9TQU1QTEVTX1BBU1NFRF9FWFQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNf
UEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6CisgICAgICAgICAgICAgICAgbVJlc3VsdCA9IChudW1Q
aXhlbHMgPiAwKSA/IEdMX1RSVUUgOiBHTF9GQUxTRTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG1SZW5kZXJlci0+dGVz
dERldmljZUxvc3QodHJ1ZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSwgR0xfVFJVRSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gbVN0YXR1czsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfVFJVRTsgLy8gcHJldmVudCBibG9j
a2luZyB3aGVuIHF1ZXJ5IGlzIG51bGwKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9RdWVyeTExLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1F1ZXJ5MTEu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4wYTAzZGU3N2NhMzI4NTVkYmNkMTliMTNiYzQ0ZDk3ODM3OTRhNjc1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9RdWVyeTExLmgKQEAgLTAsMCArMSw0MCBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
Ky8vIFF1ZXJ5MTEuaDogRGVmaW5lcyB0aGUgcng6OlF1ZXJ5MTEgY2xhc3Mgd2hpY2ggaW1wbGVt
ZW50cyByeDo6UXVlcnlJbXBsLgorCisjaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9RVUVSWTEx
X0hfCisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9RVUVSWTExX0hfCisKKyNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvUXVlcnlJbXBsLmgiCisKK25hbWVzcGFjZSByeAoreworY2xhc3Mg
UmVuZGVyZXIxMTsKKworY2xhc3MgUXVlcnkxMSA6IHB1YmxpYyBRdWVyeUltcGwKK3sKKyAgcHVi
bGljOgorICAgIFF1ZXJ5MTEocng6OlJlbmRlcmVyMTEgKnJlbmRlcmVyLCBHTGVudW0gdHlwZSk7
CisgICAgdmlydHVhbCB+UXVlcnkxMSgpOworCisgICAgdm9pZCBiZWdpbigpOworICAgIHZvaWQg
ZW5kKCk7CisgICAgR0x1aW50IGdldFJlc3VsdCgpOworICAgIEdMYm9vbGVhbiBpc1Jlc3VsdEF2
YWlsYWJsZSgpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFF1
ZXJ5MTEpOworCisgICAgR0xib29sZWFuIHRlc3RRdWVyeSgpOworCisgICAgcng6OlJlbmRlcmVy
MTEgKm1SZW5kZXJlcjsKKyAgICBJRDNEMTFRdWVyeSAqbVF1ZXJ5OworfTsKKworfQorCisjZW5k
aWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1FVRVJZMTFfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyU3RhdGVD
YWNoZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL1JlbmRlclN0YXRlQ2FjaGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAwNDdlMDRlODE4MGFmOWYx
YzJjMzE0MGE3YjAzMmIzMmVhMjUwMDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclN0YXRlQ2FjaGUu
Y3BwCkBAIC0wLDAgKzEsNDM4IEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKy8vIFJlbmRlclN0YXRlQ2FjaGUuY3BwOiBEZWZpbmVzIHJ4OjpSZW5kZXJT
dGF0ZUNhY2hlLCBhIGNhY2hlIG9mIERpcmVjdDNEIHJlbmRlcgorLy8gc3RhdGUgb2JqZWN0cy4K
KworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaCIK
KworI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9SZW5kZXJidWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisjaW5j
bHVkZSAiY29tbW9uL2RlYnVnLmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvbXVybXVyaGFzaC9N
dXJtdXJIYXNoMy5oIgorCituYW1lc3BhY2UgcngKK3sKKworLy8gTVNETidzIGRvY3VtZW50YXRp
b24gb2YgSUQzRDExRGV2aWNlOjpDcmVhdGVCbGVuZFN0YXRlLCBJRDNEMTFEZXZpY2U6OkNyZWF0
ZVJhc3Rlcml6ZXJTdGF0ZSwKKy8vIElEM0QxMURldmljZTo6Q3JlYXRlRGVwdGhTdGVuY2lsU3Rh
dGUgYW5kIElEM0QxMURldmljZTo6Q3JlYXRlU2FtcGxlclN0YXRlIGNsYWltcyB0aGUgbWF4aW11
bQorLy8gbnVtYmVyIG9mIHVuaXF1ZSBzdGF0ZXMgb2YgZWFjaCB0eXBlIGFuIGFwcGxpY2F0aW9u
IGNhbiBjcmVhdGUgaXMgNDA5NgorY29uc3QgdW5zaWduZWQgaW50IFJlbmRlclN0YXRlQ2FjaGU6
OmtNYXhCbGVuZFN0YXRlcyA9IDQwOTY7Citjb25zdCB1bnNpZ25lZCBpbnQgUmVuZGVyU3RhdGVD
YWNoZTo6a01heFJhc3Rlcml6ZXJTdGF0ZXMgPSA0MDk2OworY29uc3QgdW5zaWduZWQgaW50IFJl
bmRlclN0YXRlQ2FjaGU6OmtNYXhEZXB0aFN0ZW5jaWxTdGF0ZXMgPSA0MDk2OworY29uc3QgdW5z
aWduZWQgaW50IFJlbmRlclN0YXRlQ2FjaGU6OmtNYXhTYW1wbGVyU3RhdGVzID0gNDA5NjsKKwor
UmVuZGVyU3RhdGVDYWNoZTo6UmVuZGVyU3RhdGVDYWNoZSgpIDogbURldmljZShOVUxMKSwgbUNv
dW50ZXIoMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQmxlbmRT
dGF0ZUNhY2hlKGtNYXhCbGVuZFN0YXRlcywgaGFzaEJsZW5kU3RhdGUsIGNvbXBhcmVCbGVuZFN0
YXRlcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUmFzdGVyaXpl
clN0YXRlQ2FjaGUoa01heFJhc3Rlcml6ZXJTdGF0ZXMsIGhhc2hSYXN0ZXJpemVyU3RhdGUsIGNv
bXBhcmVSYXN0ZXJpemVyU3RhdGVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlKGtNYXhEZXB0aFN0ZW5jaWxTdGF0ZXMsIGhh
c2hEZXB0aFN0ZW5jaWxTdGF0ZSwgY29tcGFyZURlcHRoU3RlbmNpbFN0YXRlcyksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU2FtcGxlclN0YXRlQ2FjaGUoa01heFNh
bXBsZXJTdGF0ZXMsIGhhc2hTYW1wbGVyU3RhdGUsIGNvbXBhcmVTYW1wbGVyU3RhdGVzKQorewor
fQorCitSZW5kZXJTdGF0ZUNhY2hlOjp+UmVuZGVyU3RhdGVDYWNoZSgpCit7CisgICAgY2xlYXIo
KTsKK30KKwordm9pZCBSZW5kZXJTdGF0ZUNhY2hlOjppbml0aWFsaXplKElEM0QxMURldmljZSAq
ZGV2aWNlKQoreworICAgIGNsZWFyKCk7CisgICAgbURldmljZSA9IGRldmljZTsKK30KKwordm9p
ZCBSZW5kZXJTdGF0ZUNhY2hlOjpjbGVhcigpCit7CisgICAgZm9yIChCbGVuZFN0YXRlTWFwOjpp
dGVyYXRvciBpID0gbUJsZW5kU3RhdGVDYWNoZS5iZWdpbigpOyBpICE9IG1CbGVuZFN0YXRlQ2Fj
aGUuZW5kKCk7IGkrKykKKyAgICB7CisgICAgICAgIGktPnNlY29uZC5maXJzdC0+UmVsZWFzZSgp
OworICAgIH0KKyAgICBtQmxlbmRTdGF0ZUNhY2hlLmNsZWFyKCk7CisKKyAgICBmb3IgKFJhc3Rl
cml6ZXJTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5iZWdpbigp
OyBpICE9IG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5lbmQoKTsgaSsrKQorICAgIHsKKyAgICAgICAg
aS0+c2Vjb25kLmZpcnN0LT5SZWxlYXNlKCk7CisgICAgfQorICAgIG1SYXN0ZXJpemVyU3RhdGVD
YWNoZS5jbGVhcigpOworCisgICAgZm9yIChEZXB0aFN0ZW5jaWxTdGF0ZU1hcDo6aXRlcmF0b3Ig
aSA9IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmJlZ2luKCk7IGkgIT0gbURlcHRoU3RlbmNpbFN0
YXRlQ2FjaGUuZW5kKCk7IGkrKykKKyAgICB7CisgICAgICAgIGktPnNlY29uZC5maXJzdC0+UmVs
ZWFzZSgpOworICAgIH0KKyAgICBtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5jbGVhcigpOworCisg
ICAgZm9yIChTYW1wbGVyU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtU2FtcGxlclN0YXRlQ2FjaGUu
YmVnaW4oKTsgaSAhPSBtU2FtcGxlclN0YXRlQ2FjaGUuZW5kKCk7IGkrKykKKyAgICB7CisgICAg
ICAgIGktPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOworICAgIH0KKyAgICBtU2FtcGxlclN0YXRl
Q2FjaGUuY2xlYXIoKTsKK30KKworc3RkOjpzaXplX3QgUmVuZGVyU3RhdGVDYWNoZTo6aGFzaEJs
ZW5kU3RhdGUoY29uc3QgQmxlbmRTdGF0ZUtleSAmYmxlbmRTdGF0ZSkKK3sKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgaW50IHNlZWQgPSAweEFCQ0RFRjk4OworCisgICAgc3RkOjpzaXplX3Qg
aGFzaCA9IDA7CisgICAgTXVybXVySGFzaDNfeDg2XzMyKCZibGVuZFN0YXRlLCBzaXplb2YoQmxl
bmRTdGF0ZUtleSksIHNlZWQsICZoYXNoKTsKKyAgICByZXR1cm4gaGFzaDsKK30KKworYm9vbCBS
ZW5kZXJTdGF0ZUNhY2hlOjpjb21wYXJlQmxlbmRTdGF0ZXMoY29uc3QgQmxlbmRTdGF0ZUtleSAm
YSwgY29uc3QgQmxlbmRTdGF0ZUtleSAmYikKK3sKKyAgICByZXR1cm4gbWVtY21wKCZhLCAmYiwg
c2l6ZW9mKGdsOjpCbGVuZFN0YXRlKSkgPT0gMDsKK30KKworSUQzRDExQmxlbmRTdGF0ZSAqUmVu
ZGVyU3RhdGVDYWNoZTo6Z2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVy
LCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSkKK3sKKyAgICBpZiAoIW1EZXZpY2Up
CisgICAgeworICAgICAgICBFUlIoIlJlbmRlclN0YXRlQ2FjaGUgaXMgbm90IGluaXRpYWxpemVk
LiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBib29sIG1ydCA9IGZhbHNl
OworCisgICAgQmxlbmRTdGF0ZUtleSBrZXkgPSB7IDAgfTsKKyAgICBrZXkuYmxlbmRTdGF0ZSA9
IGJsZW5kU3RhdGU7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBEM0QxMV9TSU1V
TFRBTkVPVVNfUkVOREVSX1RBUkdFVF9DT1VOVDsgaSsrKQorICAgIHsKKyAgICAgICAgZ2w6OlJl
bmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKGkp
OworICAgICAgICBpZiAocmVuZGVyQnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
aSA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbXJ0ID0gdHJ1ZTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgR0xlbnVtIGludGVybmFsRm9ybWF0ID0gcmVuZGVyQnVm
ZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpOworICAgICAgICAgICAga2V5LnJ0Q2hhbm5lbHNbaV1b
MF0gPSBnbDo6R2V0UmVkU2l6ZShpbnRlcm5hbEZvcm1hdCkgPiAwOworICAgICAgICAgICAga2V5
LnJ0Q2hhbm5lbHNbaV1bMV0gPSBnbDo6R2V0R3JlZW5TaXplKGludGVybmFsRm9ybWF0KSA+IDA7
CisgICAgICAgICAgICBrZXkucnRDaGFubmVsc1tpXVsyXSA9IGdsOjpHZXRCbHVlU2l6ZShpbnRl
cm5hbEZvcm1hdCkgPiAwOzsKKyAgICAgICAgICAgIGtleS5ydENoYW5uZWxzW2ldWzNdID0gZ2w6
OkdldEFscGhhU2l6ZShpbnRlcm5hbEZvcm1hdCkgPiAwOworICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAga2V5LnJ0Q2hhbm5lbHNbaV1bMF0gPSBmYWxzZTsK
KyAgICAgICAgICAgIGtleS5ydENoYW5uZWxzW2ldWzFdID0gZmFsc2U7CisgICAgICAgICAgICBr
ZXkucnRDaGFubmVsc1tpXVsyXSA9IGZhbHNlOworICAgICAgICAgICAga2V5LnJ0Q2hhbm5lbHNb
aV1bM10gPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEJsZW5kU3RhdGVNYXA6Oml0
ZXJhdG9yIGkgPSBtQmxlbmRTdGF0ZUNhY2hlLmZpbmQoa2V5KTsKKyAgICBpZiAoaSAhPSBtQmxl
bmRTdGF0ZUNhY2hlLmVuZCgpKQorICAgIHsKKyAgICAgICAgQmxlbmRTdGF0ZUNvdW50ZXJQYWly
ICZzdGF0ZSA9IGktPnNlY29uZDsKKyAgICAgICAgc3RhdGUuc2Vjb25kID0gbUNvdW50ZXIrKzsK
KyAgICAgICAgcmV0dXJuIHN0YXRlLmZpcnN0OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICBpZiAobUJsZW5kU3RhdGVDYWNoZS5zaXplKCkgPj0ga01heEJsZW5kU3RhdGVzKQorICAg
ICAgICB7CisgICAgICAgICAgICBUUkFDRSgiT3ZlcmZsb3dlZCB0aGUgbGltaXQgb2YgJXUgYmxl
bmQgc3RhdGVzLCByZW1vdmluZyB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCAiCisgICAgICAgICAg
ICAgICAgICAidG8gbWFrZSByb29tLiIsIGtNYXhCbGVuZFN0YXRlcyk7CisKKyAgICAgICAgICAg
IEJsZW5kU3RhdGVNYXA6Oml0ZXJhdG9yIGxlYXN0UmVjZW50bHlVc2VkID0gbUJsZW5kU3RhdGVD
YWNoZS5iZWdpbigpOworICAgICAgICAgICAgZm9yIChCbGVuZFN0YXRlTWFwOjppdGVyYXRvciBp
ID0gbUJsZW5kU3RhdGVDYWNoZS5iZWdpbigpOyBpICE9IG1CbGVuZFN0YXRlQ2FjaGUuZW5kKCk7
IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaS0+c2Vjb25kLnNlY29u
ZCA8IGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuc2Vjb25kKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQgPSBpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkLT5zZWNv
bmQuZmlyc3QtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1CbGVuZFN0YXRlQ2FjaGUuZXJhc2Uo
bGVhc3RSZWNlbnRseVVzZWQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ3JlYXRlIGEgbmV3
IGJsZW5kIHN0YXRlIGFuZCBpbnNlcnQgaXQgaW50byB0aGUgY2FjaGUKKyAgICAgICAgRDNEMTFf
QkxFTkRfREVTQyBibGVuZERlc2MgPSB7IDAgfTsKKyAgICAgICAgYmxlbmREZXNjLkFscGhhVG9D
b3ZlcmFnZUVuYWJsZSA9IGJsZW5kU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlOworICAgICAg
ICBibGVuZERlc2MuSW5kZXBlbmRlbnRCbGVuZEVuYWJsZSA9IG1ydCA/IFRSVUUgOiBGQUxTRTsK
KworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEQzRDExX1NJTVVMVEFORU9V
U19SRU5ERVJfVEFSR0VUX0NPVU5UOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIEQzRDEx
X1JFTkRFUl9UQVJHRVRfQkxFTkRfREVTQyAmcnRCbGVuZCA9IGJsZW5kRGVzYy5SZW5kZXJUYXJn
ZXRbaV07CisKKyAgICAgICAgICAgIHJ0QmxlbmQuQmxlbmRFbmFibGUgPSBibGVuZFN0YXRlLmJs
ZW5kOworICAgICAgICAgICAgaWYgKGJsZW5kU3RhdGUuYmxlbmQpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcnRCbGVuZC5TcmNCbGVuZCA9IGdsX2QzZDExOjpDb252ZXJ0QmxlbmRG
dW5jKGJsZW5kU3RhdGUuc291cmNlQmxlbmRSR0IsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBy
dEJsZW5kLkRlc3RCbGVuZCA9IGdsX2QzZDExOjpDb252ZXJ0QmxlbmRGdW5jKGJsZW5kU3RhdGUu
ZGVzdEJsZW5kUkdCLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgcnRCbGVuZC5CbGVuZE9wID0g
Z2xfZDNkMTE6OkNvbnZlcnRCbGVuZE9wKGJsZW5kU3RhdGUuYmxlbmRFcXVhdGlvblJHQik7CisK
KyAgICAgICAgICAgICAgICBydEJsZW5kLlNyY0JsZW5kQWxwaGEgPSBnbF9kM2QxMTo6Q29udmVy
dEJsZW5kRnVuYyhibGVuZFN0YXRlLnNvdXJjZUJsZW5kQWxwaGEsIHRydWUpOworICAgICAgICAg
ICAgICAgIHJ0QmxlbmQuRGVzdEJsZW5kQWxwaGEgPSBnbF9kM2QxMTo6Q29udmVydEJsZW5kRnVu
YyhibGVuZFN0YXRlLmRlc3RCbGVuZEFscGhhLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBydEJs
ZW5kLkJsZW5kT3BBbHBoYSA9IGdsX2QzZDExOjpDb252ZXJ0QmxlbmRPcChibGVuZFN0YXRlLmJs
ZW5kRXF1YXRpb25BbHBoYSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJ0QmxlbmQu
UmVuZGVyVGFyZ2V0V3JpdGVNYXNrID0gZ2xfZDNkMTE6OkNvbnZlcnRDb2xvck1hc2soa2V5LnJ0
Q2hhbm5lbHNbaV1bMF0gJiYgYmxlbmRTdGF0ZS5jb2xvck1hc2tSZWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGtleS5ydENoYW5uZWxzW2ldWzFdICYmIGJsZW5kU3RhdGUuY29sb3JNYXNrR3JlZW4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGtleS5ydENoYW5uZWxzW2ldWzJdICYmIGJsZW5kU3RhdGUuY29sb3JNYXNrQmx1
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAga2V5LnJ0Q2hhbm5lbHNbaV1bM10gJiYgYmxlbmRTdGF0ZS5jb2xv
ck1hc2tBbHBoYSk7CisgICAgICAgIH0KKworICAgICAgICBJRDNEMTFCbGVuZFN0YXRlICpkeDEx
QmxlbmRTdGF0ZSA9IE5VTEw7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3Jl
YXRlQmxlbmRTdGF0ZSgmYmxlbmREZXNjLCAmZHgxMUJsZW5kU3RhdGUpOworICAgICAgICBpZiAo
RkFJTEVEKHJlc3VsdCkgfHwgIWR4MTFCbGVuZFN0YXRlKQorICAgICAgICB7CisgICAgICAgICAg
ICBFUlIoIlVuYWJsZSB0byBjcmVhdGUgYSBJRDNEMTFCbGVuZFN0YXRlLCBIUkVTVUxUOiAweCVY
LiIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAg
ICAgIG1CbGVuZFN0YXRlQ2FjaGUuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGtleSwgc3RkOjptYWtl
X3BhaXIoZHgxMUJsZW5kU3RhdGUsIG1Db3VudGVyKyspKSk7CisKKyAgICAgICAgcmV0dXJuIGR4
MTFCbGVuZFN0YXRlOworICAgIH0KK30KKworc3RkOjpzaXplX3QgUmVuZGVyU3RhdGVDYWNoZTo6
aGFzaFJhc3Rlcml6ZXJTdGF0ZShjb25zdCBSYXN0ZXJpemVyU3RhdGVLZXkgJnJhc3RlclN0YXRl
KQoreworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2VlZCA9IDB4QUJDREVGOTg7CisK
KyAgICBzdGQ6OnNpemVfdCBoYXNoID0gMDsKKyAgICBNdXJtdXJIYXNoM194ODZfMzIoJnJhc3Rl
clN0YXRlLCBzaXplb2YoUmFzdGVyaXplclN0YXRlS2V5KSwgc2VlZCwgJmhhc2gpOworICAgIHJl
dHVybiBoYXNoOworfQorCitib29sIFJlbmRlclN0YXRlQ2FjaGU6OmNvbXBhcmVSYXN0ZXJpemVy
U3RhdGVzKGNvbnN0IFJhc3Rlcml6ZXJTdGF0ZUtleSAmYSwgY29uc3QgUmFzdGVyaXplclN0YXRl
S2V5ICZiKQoreworICAgIHJldHVybiBtZW1jbXAoJmEsICZiLCBzaXplb2YoUmFzdGVyaXplclN0
YXRlS2V5KSkgPT0gMDsKK30KKworSUQzRDExUmFzdGVyaXplclN0YXRlICpSZW5kZXJTdGF0ZUNh
Y2hlOjpnZXRSYXN0ZXJpemVyU3RhdGUoY29uc3QgZ2w6OlJhc3Rlcml6ZXJTdGF0ZSAmcmFzdGVy
U3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIHNjaXNzb3JFbmFibGVkLCB1bnNpZ25lZCBpbnQgZGVwdGhTaXplKQor
eworICAgIGlmICghbURldmljZSkKKyAgICB7CisgICAgICAgIEVSUigiUmVuZGVyU3RhdGVDYWNo
ZSBpcyBub3QgaW5pdGlhbGl6ZWQuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKwor
ICAgIFJhc3Rlcml6ZXJTdGF0ZUtleSBrZXk7CisgICAga2V5LnJhc3Rlcml6ZXJTdGF0ZSA9IHJh
c3RlclN0YXRlOworICAgIGtleS5zY2lzc29yRW5hYmxlZCA9IHNjaXNzb3JFbmFibGVkOworICAg
IGtleS5kZXB0aFNpemUgPSBkZXB0aFNpemU7CisKKyAgICBSYXN0ZXJpemVyU3RhdGVNYXA6Oml0
ZXJhdG9yIGkgPSBtUmFzdGVyaXplclN0YXRlQ2FjaGUuZmluZChrZXkpOworICAgIGlmIChpICE9
IG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5lbmQoKSkKKyAgICB7CisgICAgICAgIFJhc3Rlcml6ZXJT
dGF0ZUNvdW50ZXJQYWlyICZzdGF0ZSA9IGktPnNlY29uZDsKKyAgICAgICAgc3RhdGUuc2Vjb25k
ID0gbUNvdW50ZXIrKzsKKyAgICAgICAgcmV0dXJuIHN0YXRlLmZpcnN0OworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBpZiAobVJhc3Rlcml6ZXJTdGF0ZUNhY2hlLnNpemUoKSA+PSBr
TWF4UmFzdGVyaXplclN0YXRlcykKKyAgICAgICAgeworICAgICAgICAgICAgVFJBQ0UoIk92ZXJm
bG93ZWQgdGhlIGxpbWl0IG9mICV1IHJhc3Rlcml6ZXIgc3RhdGVzLCByZW1vdmluZyB0aGUgbGVh
c3QgcmVjZW50bHkgdXNlZCAiCisgICAgICAgICAgICAgICAgICAidG8gbWFrZSByb29tLiIsIGtN
YXhSYXN0ZXJpemVyU3RhdGVzKTsKKworICAgICAgICAgICAgUmFzdGVyaXplclN0YXRlTWFwOjpp
dGVyYXRvciBsZWFzdFJlY2VudGx5VXNlZCA9IG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5iZWdpbigp
OworICAgICAgICAgICAgZm9yIChSYXN0ZXJpemVyU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtUmFz
dGVyaXplclN0YXRlQ2FjaGUuYmVnaW4oKTsgaSAhPSBtUmFzdGVyaXplclN0YXRlQ2FjaGUuZW5k
KCk7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaS0+c2Vjb25kLnNl
Y29uZCA8IGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuc2Vjb25kKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQgPSBpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkLT5z
ZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1SYXN0ZXJpemVyU3RhdGVDYWNo
ZS5lcmFzZShsZWFzdFJlY2VudGx5VXNlZCk7CisgICAgICAgIH0KKworICAgICAgICBEM0QxMV9D
VUxMX01PREUgY3VsbE1vZGUgPSBnbF9kM2QxMTo6Q29udmVydEN1bGxNb2RlKHJhc3RlclN0YXRl
LmN1bGxGYWNlLCByYXN0ZXJTdGF0ZS5jdWxsTW9kZSk7CisKKyAgICAgICAgLy8gRGlzYWJsZSBj
dWxsaW5nIGlmIGRyYXdpbmcgcG9pbnRzCisgICAgICAgIGlmIChyYXN0ZXJTdGF0ZS5wb2ludERy
YXdNb2RlKQorICAgICAgICB7CisgICAgICAgICAgICBjdWxsTW9kZSA9IEQzRDExX0NVTExfTk9O
RTsKKyAgICAgICAgfQorCisgICAgICAgIEQzRDExX1JBU1RFUklaRVJfREVTQyByYXN0ZXJEZXNj
OworICAgICAgICByYXN0ZXJEZXNjLkZpbGxNb2RlID0gRDNEMTFfRklMTF9TT0xJRDsKKyAgICAg
ICAgcmFzdGVyRGVzYy5DdWxsTW9kZSA9IGN1bGxNb2RlOworICAgICAgICByYXN0ZXJEZXNjLkZy
b250Q291bnRlckNsb2Nrd2lzZSA9IChyYXN0ZXJTdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXKSA/
IEZBTFNFOiBUUlVFOworICAgICAgICByYXN0ZXJEZXNjLkRlcHRoQmlhcyA9IGxkZXhwKHJhc3Rl
clN0YXRlLnBvbHlnb25PZmZzZXRVbml0cywgLXN0YXRpY19jYXN0PGludD4oZGVwdGhTaXplKSk7
CisgICAgICAgIHJhc3RlckRlc2MuRGVwdGhCaWFzQ2xhbXAgPSAwLjBmOyAvLyBNU0ROIGRvY3Vt
ZW50YXRpb24gb2YgRGVwdGhCaWFzQ2xhbXAgaW1wbGllcyBhIHZhbHVlIG9mIHplcm8gd2lsbCBw
cmVmb3JtIG5vIGNsYW1waW5nLCBtdXN0IGJlIHRlc3RlZCB0aG91Z2guCisgICAgICAgIHJhc3Rl
ckRlc2MuU2xvcGVTY2FsZWREZXB0aEJpYXMgPSByYXN0ZXJTdGF0ZS5wb2x5Z29uT2Zmc2V0RmFj
dG9yOworICAgICAgICByYXN0ZXJEZXNjLkRlcHRoQ2xpcEVuYWJsZSA9IFRSVUU7CisgICAgICAg
IHJhc3RlckRlc2MuU2Npc3NvckVuYWJsZSA9IHNjaXNzb3JFbmFibGVkID8gVFJVRSA6IEZBTFNF
OworICAgICAgICByYXN0ZXJEZXNjLk11bHRpc2FtcGxlRW5hYmxlID0gcmFzdGVyU3RhdGUubXVs
dGlTYW1wbGU7CisgICAgICAgIHJhc3RlckRlc2MuQW50aWFsaWFzZWRMaW5lRW5hYmxlID0gRkFM
U0U7CisKKyAgICAgICAgSUQzRDExUmFzdGVyaXplclN0YXRlICpkeDExUmFzdGVyaXplclN0YXRl
ID0gTlVMTDsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVSYXN0ZXJp
emVyU3RhdGUoJnJhc3RlckRlc2MsICZkeDExUmFzdGVyaXplclN0YXRlKTsKKyAgICAgICAgaWYg
KEZBSUxFRChyZXN1bHQpIHx8ICFkeDExUmFzdGVyaXplclN0YXRlKQorICAgICAgICB7CisgICAg
ICAgICAgICBFUlIoIlVuYWJsZSB0byBjcmVhdGUgYSBJRDNEMTFSYXN0ZXJpemVyU3RhdGUsIEhS
RVNVTFQ6IDB4JVguIiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAg
ICB9CisKKyAgICAgICAgbVJhc3Rlcml6ZXJTdGF0ZUNhY2hlLmluc2VydChzdGQ6Om1ha2VfcGFp
cihrZXksIHN0ZDo6bWFrZV9wYWlyKGR4MTFSYXN0ZXJpemVyU3RhdGUsIG1Db3VudGVyKyspKSk7
CisKKyAgICAgICAgcmV0dXJuIGR4MTFSYXN0ZXJpemVyU3RhdGU7CisgICAgfQorfQorCitzdGQ6
OnNpemVfdCBSZW5kZXJTdGF0ZUNhY2hlOjpoYXNoRGVwdGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6
OkRlcHRoU3RlbmNpbFN0YXRlICZkc1N0YXRlKQoreworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBpbnQgc2VlZCA9IDB4QUJDREVGOTg7CisKKyAgICBzdGQ6OnNpemVfdCBoYXNoID0gMDsKKyAg
ICBNdXJtdXJIYXNoM194ODZfMzIoJmRzU3RhdGUsIHNpemVvZihnbDo6RGVwdGhTdGVuY2lsU3Rh
dGUpLCBzZWVkLCAmaGFzaCk7CisgICAgcmV0dXJuIGhhc2g7Cit9CisKK2Jvb2wgUmVuZGVyU3Rh
dGVDYWNoZTo6Y29tcGFyZURlcHRoU3RlbmNpbFN0YXRlcyhjb25zdCBnbDo6RGVwdGhTdGVuY2ls
U3RhdGUgJmEsIGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmYikKK3sKKyAgICByZXR1cm4g
bWVtY21wKCZhLCAmYiwgc2l6ZW9mKGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSkpID09IDA7Cit9CisK
K0lEM0QxMURlcHRoU3RlbmNpbFN0YXRlICpSZW5kZXJTdGF0ZUNhY2hlOjpnZXREZXB0aFN0ZW5j
aWxTdGF0ZShjb25zdCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmRzU3RhdGUpCit7CisgICAgaWYg
KCFtRGV2aWNlKQorICAgIHsKKyAgICAgICAgRVJSKCJSZW5kZXJTdGF0ZUNhY2hlIGlzIG5vdCBp
bml0aWFsaXplZC4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgRGVwdGhT
dGVuY2lsU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5maW5k
KGRzU3RhdGUpOworICAgIGlmIChpICE9IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmVuZCgpKQor
ICAgIHsKKyAgICAgICAgRGVwdGhTdGVuY2lsU3RhdGVDb3VudGVyUGFpciAmc3RhdGUgPSBpLT5z
ZWNvbmQ7CisgICAgICAgIHN0YXRlLnNlY29uZCA9IG1Db3VudGVyKys7CisgICAgICAgIHJldHVy
biBzdGF0ZS5maXJzdDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKG1EZXB0
aFN0ZW5jaWxTdGF0ZUNhY2hlLnNpemUoKSA+PSBrTWF4RGVwdGhTdGVuY2lsU3RhdGVzKQorICAg
ICAgICB7CisgICAgICAgICAgICBUUkFDRSgiT3ZlcmZsb3dlZCB0aGUgbGltaXQgb2YgJXUgZGVw
dGggc3RlbmNpbCBzdGF0ZXMsIHJlbW92aW5nIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkICIKKyAg
ICAgICAgICAgICAgICAgICJ0byBtYWtlIHJvb20uIiwga01heERlcHRoU3RlbmNpbFN0YXRlcyk7
CisKKyAgICAgICAgICAgIERlcHRoU3RlbmNpbFN0YXRlTWFwOjppdGVyYXRvciBsZWFzdFJlY2Vu
dGx5VXNlZCA9IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmJlZ2luKCk7CisgICAgICAgICAgICBm
b3IgKERlcHRoU3RlbmNpbFN0YXRlTWFwOjppdGVyYXRvciBpID0gbURlcHRoU3RlbmNpbFN0YXRl
Q2FjaGUuYmVnaW4oKTsgaSAhPSBtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5lbmQoKTsgaSsrKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChpLT5zZWNvbmQuc2Vjb25kIDwgbGVh
c3RSZWNlbnRseVVzZWQtPnNlY29uZC5zZWNvbmQpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZCA9IGk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQtPnNlY29uZC5maXJz
dC0+UmVsZWFzZSgpOworICAgICAgICAgICAgbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuZXJhc2Uo
bGVhc3RSZWNlbnRseVVzZWQpOworICAgICAgICB9CisKKyAgICAgICAgRDNEMTFfREVQVEhfU1RF
TkNJTF9ERVNDIGRzRGVzYyA9IHsgMCB9OworICAgICAgICBkc0Rlc2MuRGVwdGhFbmFibGUgPSBk
c1N0YXRlLmRlcHRoVGVzdCA/IFRSVUUgOiBGQUxTRTsKKyAgICAgICAgZHNEZXNjLkRlcHRoV3Jp
dGVNYXNrID0gZ2xfZDNkMTE6OkNvbnZlcnREZXB0aE1hc2soZHNTdGF0ZS5kZXB0aE1hc2spOwor
ICAgICAgICBkc0Rlc2MuRGVwdGhGdW5jID0gZ2xfZDNkMTE6OkNvbnZlcnRDb21wYXJpc29uKGRz
U3RhdGUuZGVwdGhGdW5jKTsKKyAgICAgICAgZHNEZXNjLlN0ZW5jaWxFbmFibGUgPSBkc1N0YXRl
LnN0ZW5jaWxUZXN0ID8gVFJVRSA6IEZBTFNFOworICAgICAgICBkc0Rlc2MuU3RlbmNpbFJlYWRN
YXNrID0gZ2xfZDNkMTE6OkNvbnZlcnRTdGVuY2lsTWFzayhkc1N0YXRlLnN0ZW5jaWxNYXNrKTsK
KyAgICAgICAgZHNEZXNjLlN0ZW5jaWxXcml0ZU1hc2sgPSBnbF9kM2QxMTo6Q29udmVydFN0ZW5j
aWxNYXNrKGRzU3RhdGUuc3RlbmNpbFdyaXRlbWFzayk7CisgICAgICAgIGRzRGVzYy5Gcm9udEZh
Y2UuU3RlbmNpbEZhaWxPcCA9IGdsX2QzZDExOjpDb252ZXJ0U3RlbmNpbE9wKGRzU3RhdGUuc3Rl
bmNpbEZhaWwpOworICAgICAgICBkc0Rlc2MuRnJvbnRGYWNlLlN0ZW5jaWxEZXB0aEZhaWxPcCA9
IGdsX2QzZDExOjpDb252ZXJ0U3RlbmNpbE9wKGRzU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwp
OworICAgICAgICBkc0Rlc2MuRnJvbnRGYWNlLlN0ZW5jaWxQYXNzT3AgPSBnbF9kM2QxMTo6Q29u
dmVydFN0ZW5jaWxPcChkc1N0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzKTsKKyAgICAgICAgZHNE
ZXNjLkZyb250RmFjZS5TdGVuY2lsRnVuYyA9IGdsX2QzZDExOjpDb252ZXJ0Q29tcGFyaXNvbihk
c1N0YXRlLnN0ZW5jaWxGdW5jKTsKKyAgICAgICAgZHNEZXNjLkJhY2tGYWNlLlN0ZW5jaWxGYWls
T3AgPSBnbF9kM2QxMTo6Q29udmVydFN0ZW5jaWxPcChkc1N0YXRlLnN0ZW5jaWxCYWNrRmFpbCk7
CisgICAgICAgIGRzRGVzYy5CYWNrRmFjZS5TdGVuY2lsRGVwdGhGYWlsT3AgPSBnbF9kM2QxMTo6
Q29udmVydFN0ZW5jaWxPcChkc1N0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCk7CisgICAg
ICAgIGRzRGVzYy5CYWNrRmFjZS5TdGVuY2lsUGFzc09wID0gZ2xfZDNkMTE6OkNvbnZlcnRTdGVu
Y2lsT3AoZHNTdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MpOworICAgICAgICBkc0Rlc2Mu
QmFja0ZhY2UuU3RlbmNpbEZ1bmMgPSBnbF9kM2QxMTo6Q29udmVydENvbXBhcmlzb24oZHNTdGF0
ZS5zdGVuY2lsQmFja0Z1bmMpOworCisgICAgICAgIElEM0QxMURlcHRoU3RlbmNpbFN0YXRlICpk
eDExRGVwdGhTdGVuY2lsU3RhdGUgPSBOVUxMOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1E
ZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFN0YXRlKCZkc0Rlc2MsICZkeDExRGVwdGhTdGVuY2ls
U3RhdGUpOworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkgfHwgIWR4MTFEZXB0aFN0ZW5jaWxT
dGF0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJVbmFibGUgdG8gY3JlYXRlIGEgSUQz
RDExRGVwdGhTdGVuY2lsU3RhdGUsIEhSRVNVTFQ6IDB4JVguIiwgcmVzdWx0KTsKKyAgICAgICAg
ICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgbURlcHRoU3RlbmNpbFN0YXRl
Q2FjaGUuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGRzU3RhdGUsIHN0ZDo6bWFrZV9wYWlyKGR4MTFE
ZXB0aFN0ZW5jaWxTdGF0ZSwgbUNvdW50ZXIrKykpKTsKKworICAgICAgICByZXR1cm4gZHgxMURl
cHRoU3RlbmNpbFN0YXRlOworICAgIH0KK30KKworc3RkOjpzaXplX3QgUmVuZGVyU3RhdGVDYWNo
ZTo6aGFzaFNhbXBsZXJTdGF0ZShjb25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUp
Cit7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZWVkID0gMHhBQkNERUY5ODsKKwor
ICAgIHN0ZDo6c2l6ZV90IGhhc2ggPSAwOworICAgIE11cm11ckhhc2gzX3g4Nl8zMigmc2FtcGxl
clN0YXRlLCBzaXplb2YoZ2w6OlNhbXBsZXJTdGF0ZSksIHNlZWQsICZoYXNoKTsKKyAgICByZXR1
cm4gaGFzaDsKK30KKworYm9vbCBSZW5kZXJTdGF0ZUNhY2hlOjpjb21wYXJlU2FtcGxlclN0YXRl
cyhjb25zdCBnbDo6U2FtcGxlclN0YXRlICZhLCBjb25zdCBnbDo6U2FtcGxlclN0YXRlICZiKQor
eworICAgIHJldHVybiBtZW1jbXAoJmEsICZiLCBzaXplb2YoZ2w6OlNhbXBsZXJTdGF0ZSkpID09
IDA7Cit9CisKK0lEM0QxMVNhbXBsZXJTdGF0ZSAqUmVuZGVyU3RhdGVDYWNoZTo6Z2V0U2FtcGxl
clN0YXRlKGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkKK3sKKyAgICBpZiAo
IW1EZXZpY2UpCisgICAgeworICAgICAgICBFUlIoIlJlbmRlclN0YXRlQ2FjaGUgaXMgbm90IGlu
aXRpYWxpemVkLiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBTYW1wbGVy
U3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtU2FtcGxlclN0YXRlQ2FjaGUuZmluZChzYW1wbGVyU3Rh
dGUpOworICAgIGlmIChpICE9IG1TYW1wbGVyU3RhdGVDYWNoZS5lbmQoKSkKKyAgICB7CisgICAg
ICAgIFNhbXBsZXJTdGF0ZUNvdW50ZXJQYWlyICZzdGF0ZSA9IGktPnNlY29uZDsKKyAgICAgICAg
c3RhdGUuc2Vjb25kID0gbUNvdW50ZXIrKzsKKyAgICAgICAgcmV0dXJuIHN0YXRlLmZpcnN0Owor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAobVNhbXBsZXJTdGF0ZUNhY2hlLnNp
emUoKSA+PSBrTWF4U2FtcGxlclN0YXRlcykKKyAgICAgICAgeworICAgICAgICAgICAgVFJBQ0Uo
Ik92ZXJmbG93ZWQgdGhlIGxpbWl0IG9mICV1IHNhbXBsZXIgc3RhdGVzLCByZW1vdmluZyB0aGUg
bGVhc3QgcmVjZW50bHkgdXNlZCAiCisgICAgICAgICAgICAgICAgICAidG8gbWFrZSByb29tLiIs
IGtNYXhTYW1wbGVyU3RhdGVzKTsKKworICAgICAgICAgICAgU2FtcGxlclN0YXRlTWFwOjppdGVy
YXRvciBsZWFzdFJlY2VudGx5VXNlZCA9IG1TYW1wbGVyU3RhdGVDYWNoZS5iZWdpbigpOworICAg
ICAgICAgICAgZm9yIChTYW1wbGVyU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtU2FtcGxlclN0YXRl
Q2FjaGUuYmVnaW4oKTsgaSAhPSBtU2FtcGxlclN0YXRlQ2FjaGUuZW5kKCk7IGkrKykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaS0+c2Vjb25kLnNlY29uZCA8IGxlYXN0UmVj
ZW50bHlVc2VkLT5zZWNvbmQuc2Vjb25kKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQgPSBpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuZmlyc3QtPlJl
bGVhc2UoKTsKKyAgICAgICAgICAgIG1TYW1wbGVyU3RhdGVDYWNoZS5lcmFzZShsZWFzdFJlY2Vu
dGx5VXNlZCk7CisgICAgICAgIH0KKworICAgICAgICBEM0QxMV9TQU1QTEVSX0RFU0Mgc2FtcGxl
ckRlc2M7CisgICAgICAgIHNhbXBsZXJEZXNjLkZpbHRlciA9IGdsX2QzZDExOjpDb252ZXJ0Rmls
dGVyKHNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIsIHNhbXBsZXJTdGF0ZS5tYWdGaWx0ZXIsIHNhbXBs
ZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5KTsKKyAgICAgICAgc2FtcGxlckRlc2MuQWRkcmVzc1UgPSBn
bF9kM2QxMTo6Q29udmVydFRleHR1cmVXcmFwKHNhbXBsZXJTdGF0ZS53cmFwUyk7CisgICAgICAg
IHNhbXBsZXJEZXNjLkFkZHJlc3NWID0gZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlV3JhcChzYW1w
bGVyU3RhdGUud3JhcFQpOworICAgICAgICBzYW1wbGVyRGVzYy5BZGRyZXNzVyA9IEQzRDExX1RF
WFRVUkVfQUREUkVTU19DTEFNUDsKKyAgICAgICAgc2FtcGxlckRlc2MuTWlwTE9EQmlhcyA9IHN0
YXRpY19jYXN0PGZsb2F0PihzYW1wbGVyU3RhdGUubG9kT2Zmc2V0KTsKKyAgICAgICAgc2FtcGxl
ckRlc2MuTWF4QW5pc290cm9weSA9IHNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5OworICAgICAg
ICBzYW1wbGVyRGVzYy5Db21wYXJpc29uRnVuYyA9IEQzRDExX0NPTVBBUklTT05fTkVWRVI7Cisg
ICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzBdID0gMC4wZjsKKyAgICAgICAgc2FtcGxl
ckRlc2MuQm9yZGVyQ29sb3JbMV0gPSAwLjBmOworICAgICAgICBzYW1wbGVyRGVzYy5Cb3JkZXJD
b2xvclsyXSA9IDAuMGY7CisgICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzNdID0gMC4w
ZjsKKyAgICAgICAgc2FtcGxlckRlc2MuTWluTE9EID0gZ2xfZDNkMTE6OkNvbnZlcnRNaW5MT0Qo
c2FtcGxlclN0YXRlLm1pbkZpbHRlciwgc2FtcGxlclN0YXRlLmxvZE9mZnNldCk7CisgICAgICAg
IHNhbXBsZXJEZXNjLk1heExPRCA9IGdsX2QzZDExOjpDb252ZXJ0TWF4TE9EKHNhbXBsZXJTdGF0
ZS5taW5GaWx0ZXIsIHNhbXBsZXJTdGF0ZS5sb2RPZmZzZXQpOworCisgICAgICAgIElEM0QxMVNh
bXBsZXJTdGF0ZSAqZHgxMVNhbXBsZXJTdGF0ZSA9IE5VTEw7CisgICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gbURldmljZS0+Q3JlYXRlU2FtcGxlclN0YXRlKCZzYW1wbGVyRGVzYywgJmR4MTFTYW1w
bGVyU3RhdGUpOworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkgfHwgIWR4MTFTYW1wbGVyU3Rh
dGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiVW5hYmxlIHRvIGNyZWF0ZSBhIElEM0Qx
MURlcHRoU3RlbmNpbFN0YXRlLCBIUkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7CisgICAgICAgICAg
ICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIG1TYW1wbGVyU3RhdGVDYWNoZS5p
bnNlcnQoc3RkOjptYWtlX3BhaXIoc2FtcGxlclN0YXRlLCBzdGQ6Om1ha2VfcGFpcihkeDExU2Ft
cGxlclN0YXRlLCBtQ291bnRlcisrKSkpOworCisgICAgICAgIHJldHVybiBkeDExU2FtcGxlclN0
YXRlOworICAgIH0KK30KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
UmVuZGVyU3RhdGVDYWNoZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjRiODcxYTRi
ZDg1NzExNGFiOGE3MGMwYzc1ODk1ZDBlMjEwODM2OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyU3Rh
dGVDYWNoZS5oCkBAIC0wLDAgKzEsMTExIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIw
MTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBSZW5k
ZXJTdGF0ZUNhY2hlLmg6IERlZmluZXMgcng6OlJlbmRlclN0YXRlQ2FjaGUsIGEgY2FjaGUgb2Yg
RGlyZWN0M0QgcmVuZGVyCisvLyBzdGF0ZSBvYmplY3RzLgorCisjaWZuZGVmIExJQkdMRVNWMl9S
RU5ERVJFUl9SRU5ERVJTVEFURUNBQ0hFX0hfCisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9S
RU5ERVJTVEFURUNBQ0hFX0hfCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgor
I2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisKK25hbWVzcGFjZSBnbAoreworY2xhc3Mg
RnJhbWVidWZmZXI7Cit9CisKK25hbWVzcGFjZSByeAoreworCitjbGFzcyBSZW5kZXJTdGF0ZUNh
Y2hlCit7CisgIHB1YmxpYzoKKyAgICBSZW5kZXJTdGF0ZUNhY2hlKCk7CisgICAgdmlydHVhbCB+
UmVuZGVyU3RhdGVDYWNoZSgpOworCisgICAgdm9pZCBpbml0aWFsaXplKElEM0QxMURldmljZSAq
ZGV2aWNlKTsKKyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICAvLyBJbmNyZW1lbnRzIHJlZmNvdW50
IG9uIHRoZSByZXR1cm5lZCBibGVuZCBzdGF0ZSwgUmVsZWFzZSgpIG11c3QgYmUgY2FsbGVkLgor
ICAgIElEM0QxMUJsZW5kU3RhdGUgKmdldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFt
ZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUpOworICAgIElEM0QxMVJh
c3Rlcml6ZXJTdGF0ZSAqZ2V0UmFzdGVyaXplclN0YXRlKGNvbnN0IGdsOjpSYXN0ZXJpemVyU3Rh
dGUgJnJhc3RlclN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgc2Npc3NvckVuYWJsZWQsIHVuc2lnbmVkIGludCBkZXB0aFNpemUpOworICAg
IElEM0QxMURlcHRoU3RlbmNpbFN0YXRlICpnZXREZXB0aFN0ZW5jaWxTdGF0ZShjb25zdCBnbDo6
RGVwdGhTdGVuY2lsU3RhdGUgJmRzU3RhdGUpOworICAgIElEM0QxMVNhbXBsZXJTdGF0ZSAqZ2V0
U2FtcGxlclN0YXRlKGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSk7CisKKyAg
cHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyU3RhdGVDYWNoZSk7
CisKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbUNvdW50ZXI7CisKKyAgICAvLyBCbGVuZCBzdGF0
ZSBjYWNoZQorICAgIHN0cnVjdCBCbGVuZFN0YXRlS2V5CisgICAgeworICAgICAgICBnbDo6Qmxl
bmRTdGF0ZSBibGVuZFN0YXRlOworICAgICAgICBib29sIHJ0Q2hhbm5lbHNbRDNEMTFfU0lNVUxU
QU5FT1VTX1JFTkRFUl9UQVJHRVRfQ09VTlRdWzRdOworICAgIH07CisgICAgc3RhdGljIHN0ZDo6
c2l6ZV90IGhhc2hCbGVuZFN0YXRlKGNvbnN0IEJsZW5kU3RhdGVLZXkgJmJsZW5kU3RhdGUpOwor
ICAgIHN0YXRpYyBib29sIGNvbXBhcmVCbGVuZFN0YXRlcyhjb25zdCBCbGVuZFN0YXRlS2V5ICZh
LCBjb25zdCBCbGVuZFN0YXRlS2V5ICZiKTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50
IGtNYXhCbGVuZFN0YXRlczsKKworICAgIHR5cGVkZWYgc3RkOjpzaXplX3QgKCpCbGVuZFN0YXRl
SGFzaEZ1bmN0aW9uKShjb25zdCBCbGVuZFN0YXRlS2V5ICYpOworICAgIHR5cGVkZWYgYm9vbCAo
KkJsZW5kU3RhdGVFcXVhbGl0eUZ1bmN0aW9uKShjb25zdCBCbGVuZFN0YXRlS2V5ICYsIGNvbnN0
IEJsZW5kU3RhdGVLZXkgJik7CisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8SUQzRDExQmxlbmRTdGF0
ZSosIHVuc2lnbmVkIGxvbmcgbG9uZz4gQmxlbmRTdGF0ZUNvdW50ZXJQYWlyOworICAgIHR5cGVk
ZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEJsZW5kU3RhdGVLZXksIEJsZW5kU3RhdGVDb3VudGVyUGFp
ciwgQmxlbmRTdGF0ZUhhc2hGdW5jdGlvbiwgQmxlbmRTdGF0ZUVxdWFsaXR5RnVuY3Rpb24+IEJs
ZW5kU3RhdGVNYXA7CisgICAgQmxlbmRTdGF0ZU1hcCBtQmxlbmRTdGF0ZUNhY2hlOworCisgICAg
Ly8gUmFzdGVyaXplciBzdGF0ZSBjYWNoZQorICAgIHN0cnVjdCBSYXN0ZXJpemVyU3RhdGVLZXkK
KyAgICB7CisgICAgICAgIGdsOjpSYXN0ZXJpemVyU3RhdGUgcmFzdGVyaXplclN0YXRlOworICAg
ICAgICBib29sIHNjaXNzb3JFbmFibGVkOworICAgICAgICB1bnNpZ25lZCBpbnQgZGVwdGhTaXpl
OworICAgIH07CisgICAgc3RhdGljIHN0ZDo6c2l6ZV90IGhhc2hSYXN0ZXJpemVyU3RhdGUoY29u
c3QgUmFzdGVyaXplclN0YXRlS2V5ICZyYXN0ZXJTdGF0ZSk7CisgICAgc3RhdGljIGJvb2wgY29t
cGFyZVJhc3Rlcml6ZXJTdGF0ZXMoY29uc3QgUmFzdGVyaXplclN0YXRlS2V5ICZhLCBjb25zdCBS
YXN0ZXJpemVyU3RhdGVLZXkgJmIpOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQga01h
eFJhc3Rlcml6ZXJTdGF0ZXM7CisKKyAgICB0eXBlZGVmIHN0ZDo6c2l6ZV90ICgqUmFzdGVyaXpl
clN0YXRlSGFzaEZ1bmN0aW9uKShjb25zdCBSYXN0ZXJpemVyU3RhdGVLZXkgJik7CisgICAgdHlw
ZWRlZiBib29sICgqUmFzdGVyaXplclN0YXRlRXF1YWxpdHlGdW5jdGlvbikoY29uc3QgUmFzdGVy
aXplclN0YXRlS2V5ICYsIGNvbnN0IFJhc3Rlcml6ZXJTdGF0ZUtleSAmKTsKKyAgICB0eXBlZGVm
IHN0ZDo6cGFpcjxJRDNEMTFSYXN0ZXJpemVyU3RhdGUqLCB1bnNpZ25lZCBsb25nIGxvbmc+IFJh
c3Rlcml6ZXJTdGF0ZUNvdW50ZXJQYWlyOworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFw
PFJhc3Rlcml6ZXJTdGF0ZUtleSwgUmFzdGVyaXplclN0YXRlQ291bnRlclBhaXIsIFJhc3Rlcml6
ZXJTdGF0ZUhhc2hGdW5jdGlvbiwgUmFzdGVyaXplclN0YXRlRXF1YWxpdHlGdW5jdGlvbj4gUmFz
dGVyaXplclN0YXRlTWFwOworICAgIFJhc3Rlcml6ZXJTdGF0ZU1hcCBtUmFzdGVyaXplclN0YXRl
Q2FjaGU7CisKKyAgICAvLyBEZXB0aCBzdGVuY2lsIHN0YXRlIGNhY2hlCisgICAgc3RhdGljIHN0
ZDo6c2l6ZV90IGhhc2hEZXB0aFN0ZW5jaWxTdGF0ZShjb25zdCBnbDo6RGVwdGhTdGVuY2lsU3Rh
dGUgJmRzU3RhdGUpOworICAgIHN0YXRpYyBib29sIGNvbXBhcmVEZXB0aFN0ZW5jaWxTdGF0ZXMo
Y29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZhLCBjb25zdCBnbDo6RGVwdGhTdGVuY2lsU3Rh
dGUgJmIpOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQga01heERlcHRoU3RlbmNpbFN0
YXRlczsKKworICAgIHR5cGVkZWYgc3RkOjpzaXplX3QgKCpEZXB0aFN0ZW5jaWxTdGF0ZUhhc2hG
dW5jdGlvbikoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICYpOworICAgIHR5cGVkZWYgYm9v
bCAoKkRlcHRoU3RlbmNpbFN0YXRlRXF1YWxpdHlGdW5jdGlvbikoY29uc3QgZ2w6OkRlcHRoU3Rl
bmNpbFN0YXRlICYsIGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmKTsKKyAgICB0eXBlZGVm
IHN0ZDo6cGFpcjxJRDNEMTFEZXB0aFN0ZW5jaWxTdGF0ZSosIHVuc2lnbmVkIGxvbmcgbG9uZz4g
RGVwdGhTdGVuY2lsU3RhdGVDb3VudGVyUGFpcjsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVk
X21hcDxnbDo6RGVwdGhTdGVuY2lsU3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRGVwdGhTdGVuY2lsU3RhdGVDb3VudGVyUGFpciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBEZXB0aFN0ZW5jaWxTdGF0ZUhhc2hGdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBEZXB0aFN0ZW5jaWxTdGF0ZUVxdWFsaXR5RnVuY3Rpb24+IERlcHRoU3Rl
bmNpbFN0YXRlTWFwOworICAgIERlcHRoU3RlbmNpbFN0YXRlTWFwIG1EZXB0aFN0ZW5jaWxTdGF0
ZUNhY2hlOworCisgICAgLy8gU2FtcGxlIHN0YXRlIGNhY2hlCisgICAgc3RhdGljIHN0ZDo6c2l6
ZV90IGhhc2hTYW1wbGVyU3RhdGUoY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRl
KTsKKyAgICBzdGF0aWMgYm9vbCBjb21wYXJlU2FtcGxlclN0YXRlcyhjb25zdCBnbDo6U2FtcGxl
clN0YXRlICZhLCBjb25zdCBnbDo6U2FtcGxlclN0YXRlICZiKTsKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgaW50IGtNYXhTYW1wbGVyU3RhdGVzOworCisgICAgdHlwZWRlZiBzdGQ6OnNpemVf
dCAoKlNhbXBsZXJTdGF0ZUhhc2hGdW5jdGlvbikoY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmKTsK
KyAgICB0eXBlZGVmIGJvb2wgKCpTYW1wbGVyU3RhdGVFcXVhbGl0eUZ1bmN0aW9uKShjb25zdCBn
bDo6U2FtcGxlclN0YXRlICYsIGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJik7CisgICAgdHlwZWRl
ZiBzdGQ6OnBhaXI8SUQzRDExU2FtcGxlclN0YXRlKiwgdW5zaWduZWQgbG9uZyBsb25nPiBTYW1w
bGVyU3RhdGVDb3VudGVyUGFpcjsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxnbDo6
U2FtcGxlclN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhbXBsZXJTdGF0
ZUNvdW50ZXJQYWlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhbXBsZXJTdGF0
ZUhhc2hGdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYW1wbGVyU3Rh
dGVFcXVhbGl0eUZ1bmN0aW9uPiBTYW1wbGVyU3RhdGVNYXA7CisgICAgU2FtcGxlclN0YXRlTWFw
IG1TYW1wbGVyU3RhdGVDYWNoZTsKKworICAgIElEM0QxMURldmljZSAqbURldmljZTsKK307CisK
K30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJTVEFURUNBQ0hFX0hfClwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJUYXJnZXQxMS5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRl
clRhcmdldDExLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNzA3MDk3YWE0NTQ0OThhMDYwMDRlZDg1NTgyZWE5
M2E5OGM2NWVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJUYXJnZXQxMS5jcHAKQEAgLTAsMCArMSwz
NTUgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAx
MiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFJlbmRl
clRhcmdldDExLmNwcDogSW1wbGVtZW50cyBhIERYMTEtc3BlY2lmaWMgd3JhcHBlciBmb3IgSUQz
RDExVmlldyBwb2ludGVycworLy8gcmV0YWluZWQgYnkgUmVuZGVyYnVmZmVycy4KKworI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJUYXJnZXQxMS5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgiCisKKyNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9tYWluLmgiCisKK25hbWVzcGFjZSByeAoreworCitzdGF0aWMgdW5zaWduZWQgaW50IGdl
dFJUVlN1YnJlc291cmNlSW5kZXgoSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCBJRDNEMTFSZW5k
ZXJUYXJnZXRWaWV3ICp2aWV3KQoreworICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVND
IHJ0dkRlc2M7CisgICAgdmlldy0+R2V0RGVzYygmcnR2RGVzYyk7CisKKyAgICBEM0QxMV9URVhU
VVJFMkRfREVTQyB0ZXhEZXNjOworICAgIHRleHR1cmUtPkdldERlc2MoJnRleERlc2MpOworCisg
ICAgdW5zaWduZWQgaW50IG1pcFNsaWNlID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgYXJyYXlTbGlj
ZSA9IDA7CisgICAgdW5zaWduZWQgaW50IG1pcExldmVscyA9IHRleERlc2MuTWlwTGV2ZWxzOwor
CisgICAgc3dpdGNoIChydHZEZXNjLlZpZXdEaW1lbnNpb24pCisgICAgeworICAgICAgY2FzZSBE
M0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUxRDoKKyAgICAgICAgbWlwU2xpY2UgPSBydHZEZXNj
LlRleHR1cmUxRC5NaXBTbGljZTsKKyAgICAgICAgYXJyYXlTbGljZSA9IDA7CisgICAgICAgIGJy
ZWFrOworCisgICAgICBjYXNlIEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTFEQVJSQVk6Cisg
ICAgICAgIG1pcFNsaWNlID0gcnR2RGVzYy5UZXh0dXJlMURBcnJheS5NaXBTbGljZTsKKyAgICAg
ICAgYXJyYXlTbGljZSA9IHJ0dkRlc2MuVGV4dHVyZTFEQXJyYXkuRmlyc3RBcnJheVNsaWNlOwor
ICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUy
RDoKKyAgICAgICAgbWlwU2xpY2UgPSBydHZEZXNjLlRleHR1cmUyRC5NaXBTbGljZTsKKyAgICAg
ICAgYXJyYXlTbGljZSA9IDA7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEQzRDExX1JU
Vl9ESU1FTlNJT05fVEVYVFVSRTJEQVJSQVk6CisgICAgICAgIG1pcFNsaWNlID0gcnR2RGVzYy5U
ZXh0dXJlMkRBcnJheS5NaXBTbGljZTsKKyAgICAgICAgYXJyYXlTbGljZSA9IHJ0dkRlc2MuVGV4
dHVyZTJEQXJyYXkuRmlyc3RBcnJheVNsaWNlOworICAgICAgICBicmVhazsKKworICAgICAgY2Fz
ZSBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyRE1TOgorICAgICAgICBtaXBTbGljZSA9IDA7
CisgICAgICAgIGFycmF5U2xpY2UgPSAwOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBE
M0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyRE1TQVJSQVk6CisgICAgICAgIG1pcFNsaWNlID0g
MDsKKyAgICAgICAgYXJyYXlTbGljZSA9IHJ0dkRlc2MuVGV4dHVyZTJETVNBcnJheS5GaXJzdEFy
cmF5U2xpY2U7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEQzRDExX1JUVl9ESU1FTlNJ
T05fVEVYVFVSRTNEOgorICAgICAgICBtaXBTbGljZSA9IHJ0dkRlc2MuVGV4dHVyZTNELk1pcFNs
aWNlOworICAgICAgICBhcnJheVNsaWNlID0gMDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNh
c2UgRDNEMTFfUlRWX0RJTUVOU0lPTl9VTktOT1dOOgorICAgICAgY2FzZSBEM0QxMV9SVFZfRElN
RU5TSU9OX0JVRkZFUjoKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAgICBicmVhazsK
KworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgcmV0dXJuIEQzRDExQ2FsY1N1YnJlc291cmNlKG1pcFNsaWNlLCBhcnJh
eVNsaWNlLCBtaXBMZXZlbHMpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGdldERTVlN1YnJl
c291cmNlSW5kZXgoSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCBJRDNEMTFEZXB0aFN0ZW5jaWxW
aWV3ICp2aWV3KQoreworICAgIEQzRDExX0RFUFRIX1NURU5DSUxfVklFV19ERVNDIGRzdkRlc2M7
CisgICAgdmlldy0+R2V0RGVzYygmZHN2RGVzYyk7CisKKyAgICBEM0QxMV9URVhUVVJFMkRfREVT
QyB0ZXhEZXNjOworICAgIHRleHR1cmUtPkdldERlc2MoJnRleERlc2MpOworCisgICAgdW5zaWdu
ZWQgaW50IG1pcFNsaWNlID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgYXJyYXlTbGljZSA9IDA7Cisg
ICAgdW5zaWduZWQgaW50IG1pcExldmVscyA9IHRleERlc2MuTWlwTGV2ZWxzOworCisgICAgc3dp
dGNoIChkc3ZEZXNjLlZpZXdEaW1lbnNpb24pCisgICAgeworICAgICAgY2FzZSBEM0QxMV9EU1Zf
RElNRU5TSU9OX1RFWFRVUkUxRDoKKyAgICAgICAgbWlwU2xpY2UgPSBkc3ZEZXNjLlRleHR1cmUx
RC5NaXBTbGljZTsKKyAgICAgICAgYXJyYXlTbGljZSA9IDA7CisgICAgICAgIGJyZWFrOworCisg
ICAgICBjYXNlIEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTFEQVJSQVk6CisgICAgICAgIG1p
cFNsaWNlID0gZHN2RGVzYy5UZXh0dXJlMURBcnJheS5NaXBTbGljZTsKKyAgICAgICAgYXJyYXlT
bGljZSA9IGRzdkRlc2MuVGV4dHVyZTFEQXJyYXkuRmlyc3RBcnJheVNsaWNlOworICAgICAgICBi
cmVhazsKKworICAgICAgY2FzZSBEM0QxMV9EU1ZfRElNRU5TSU9OX1RFWFRVUkUyRDoKKyAgICAg
ICAgbWlwU2xpY2UgPSBkc3ZEZXNjLlRleHR1cmUyRC5NaXBTbGljZTsKKyAgICAgICAgYXJyYXlT
bGljZSA9IDA7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEQzRDExX0RTVl9ESU1FTlNJ
T05fVEVYVFVSRTJEQVJSQVk6CisgICAgICAgIG1pcFNsaWNlID0gZHN2RGVzYy5UZXh0dXJlMkRB
cnJheS5NaXBTbGljZTsKKyAgICAgICAgYXJyYXlTbGljZSA9IGRzdkRlc2MuVGV4dHVyZTJEQXJy
YXkuRmlyc3RBcnJheVNsaWNlOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBEM0QxMV9E
U1ZfRElNRU5TSU9OX1RFWFRVUkUyRE1TOgorICAgICAgICBtaXBTbGljZSA9IDA7CisgICAgICAg
IGFycmF5U2xpY2UgPSAwOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBEM0QxMV9EU1Zf
RElNRU5TSU9OX1RFWFRVUkUyRE1TQVJSQVk6CisgICAgICAgIG1pcFNsaWNlID0gMDsKKyAgICAg
ICAgYXJyYXlTbGljZSA9IGRzdkRlc2MuVGV4dHVyZTJETVNBcnJheS5GaXJzdEFycmF5U2xpY2U7
CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEQzRDExX1JUVl9ESU1FTlNJT05fVU5LTk9X
TjoKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAgICBicmVhazsKKworICAgICAgZGVm
YXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgcmV0dXJuIEQzRDExQ2FsY1N1YnJlc291cmNlKG1pcFNsaWNlLCBhcnJheVNsaWNlLCBtaXBM
ZXZlbHMpOworfQorCitSZW5kZXJUYXJnZXQxMTo6UmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJl
bmRlcmVyLCBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpydHYsIElEM0QxMVRleHR1cmUyRCAqdGV4
LCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpCit7CisgICAgbVJlbmRlcmVyID0gUmVuZGVyZXIxMTo6bWFrZVJlbmRlcmVyMTEocmVu
ZGVyZXIpOworICAgIG1UZXh0dXJlID0gdGV4OworICAgIG1SZW5kZXJUYXJnZXQgPSBydHY7Cisg
ICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7CisgICAgbVNoYWRlclJlc291cmNlID0gc3J2OworICAg
IG1TdWJyZXNvdXJjZUluZGV4ID0gMDsKKworICAgIGlmIChtUmVuZGVyVGFyZ2V0ICYmIG1UZXh0
dXJlKQorICAgIHsKKyAgICAgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgZGVzYzsK
KyAgICAgICAgbVJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzYyk7CisKKyAgICAgICAgRDNEMTFf
VEVYVFVSRTJEX0RFU0MgdGV4RGVzYzsKKyAgICAgICAgbVRleHR1cmUtPkdldERlc2MoJnRleERl
c2MpOworCisgICAgICAgIG1TdWJyZXNvdXJjZUluZGV4ID0gZ2V0UlRWU3VicmVzb3VyY2VJbmRl
eChtVGV4dHVyZSwgbVJlbmRlclRhcmdldCk7CisgICAgICAgIG1XaWR0aCA9IHdpZHRoOworICAg
ICAgICBtSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICBtU2FtcGxlcyA9ICh0ZXhEZXNjLlNhbXBs
ZURlc2MuQ291bnQgPiAxKSA/IHRleERlc2MuU2FtcGxlRGVzYy5Db3VudCA6IDA7CisKKyAgICAg
ICAgbUludGVybmFsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3Jt
YXQoZGVzYy5Gb3JtYXQpOworICAgICAgICBtQWN0dWFsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZl
cnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQpOworICAgIH0KK30KKworUmVuZGVy
VGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgSUQzRDExRGVwdGhT
dGVuY2lsVmlldyAqZHN2LCBJRDNEMTFUZXh0dXJlMkQgKnRleCwgSUQzRDExU2hhZGVyUmVzb3Vy
Y2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIG1SZW5k
ZXJlciA9IFJlbmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKHJlbmRlcmVyKTsKKyAgICBtVGV4dHVy
ZSA9IHRleDsKKyAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICBtRGVwdGhTdGVuY2lsID0g
ZHN2OworICAgIG1TaGFkZXJSZXNvdXJjZSA9IHNydjsKKyAgICBtU3VicmVzb3VyY2VJbmRleCA9
IDA7CisKKyAgICBpZiAobURlcHRoU3RlbmNpbCAmJiBtVGV4dHVyZSkKKyAgICB7CisgICAgICAg
IEQzRDExX0RFUFRIX1NURU5DSUxfVklFV19ERVNDIGRlc2M7CisgICAgICAgIG1EZXB0aFN0ZW5j
aWwtPkdldERlc2MoJmRlc2MpOworCisgICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleERl
c2M7CisgICAgICAgIG1UZXh0dXJlLT5HZXREZXNjKCZ0ZXhEZXNjKTsKKworICAgICAgICBtU3Vi
cmVzb3VyY2VJbmRleCA9IGdldERTVlN1YnJlc291cmNlSW5kZXgobVRleHR1cmUsIG1EZXB0aFN0
ZW5jaWwpOworICAgICAgICBtV2lkdGggPSB3aWR0aDsKKyAgICAgICAgbUhlaWdodCA9IGhlaWdo
dDsKKyAgICAgICAgbVNhbXBsZXMgPSAodGV4RGVzYy5TYW1wbGVEZXNjLkNvdW50ID4gMSkgPyB0
ZXhEZXNjLlNhbXBsZURlc2MuQ291bnQgOiAwOworCisgICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9
IGQzZDExX2dsOjpDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGRlc2MuRm9ybWF0KTsKKyAg
ICAgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDExX2dsOjpDb252ZXJ0VGV4dHVyZUludGVybmFsRm9y
bWF0KGRlc2MuRm9ybWF0KTsKKyAgICB9Cit9CisKK1JlbmRlclRhcmdldDExOjpSZW5kZXJUYXJn
ZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMsIGJvb2wgZGVwdGgpCit7CisgICAgbVJlbmRl
cmVyID0gUmVuZGVyZXIxMTo6bWFrZVJlbmRlcmVyMTEocmVuZGVyZXIpOworICAgIG1UZXh0dXJl
ID0gTlVMTDsKKyAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICBtRGVwdGhTdGVuY2lsID0g
TlVMTDsKKyAgICBtU2hhZGVyUmVzb3VyY2UgPSBOVUxMOworCisgICAgRFhHSV9GT1JNQVQgcmVx
dWVzdGVkRm9ybWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoZm9ybWF0
KTsKKworICAgIGludCBzdXBwb3J0ZWRTYW1wbGVzID0gbVJlbmRlcmVyLT5nZXROZWFyZXN0U3Vw
cG9ydGVkU2FtcGxlcyhyZXF1ZXN0ZWRGb3JtYXQsIHNhbXBsZXMpOworICAgIGlmIChzdXBwb3J0
ZWRTYW1wbGVzIDwgMCkKKyAgICB7CisgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0
ID4gMCkKKyAgICB7CisgICAgICAgIC8vIENyZWF0ZSB0ZXh0dXJlIHJlc291cmNlCisgICAgICAg
IEQzRDExX1RFWFRVUkUyRF9ERVNDIGRlc2M7CisgICAgICAgIGRlc2MuV2lkdGggPSB3aWR0aDsg
CisgICAgICAgIGRlc2MuSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICBkZXNjLk1pcExldmVscyA9
IDE7CisgICAgICAgIGRlc2MuQXJyYXlTaXplID0gMTsKKyAgICAgICAgZGVzYy5Gb3JtYXQgPSBy
ZXF1ZXN0ZWRGb3JtYXQ7CisgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IChzdXBwb3J0
ZWRTYW1wbGVzID09IDApID8gMSA6IHN1cHBvcnRlZFNhbXBsZXM7CisgICAgICAgIGRlc2MuU2Ft
cGxlRGVzYy5RdWFsaXR5ID0gMDsKKyAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RF
RkFVTFQ7CisgICAgICAgIGRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOworICAgICAgICBkZXNjLk1p
c2NGbGFncyA9IDA7CisgICAgICAgIGRlc2MuQmluZEZsYWdzID0gKGRlcHRoID8gRDNEMTFfQklO
RF9ERVBUSF9TVEVOQ0lMIDogKEQzRDExX0JJTkRfUkVOREVSX1RBUkdFVCB8IEQzRDExX0JJTkRf
U0hBREVSX1JFU09VUkNFKSk7CisKKyAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVu
ZGVyZXItPmdldERldmljZSgpOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3Jl
YXRlVGV4dHVyZTJEKCZkZXNjLCBOVUxMLCAmbVRleHR1cmUpOworCisgICAgICAgIGlmIChyZXN1
bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgaWYgKGRlcHRoKQorICAgICAg
ICB7CisgICAgICAgICAgICBEM0QxMV9ERVBUSF9TVEVOQ0lMX1ZJRVdfREVTQyBkc3ZEZXNjOwor
ICAgICAgICAgICAgZHN2RGVzYy5Gb3JtYXQgPSByZXF1ZXN0ZWRGb3JtYXQ7CisgICAgICAgICAg
ICBkc3ZEZXNjLlZpZXdEaW1lbnNpb24gPSAoc3VwcG9ydGVkU2FtcGxlcyA9PSAwKSA/IEQzRDEx
X0RTVl9ESU1FTlNJT05fVEVYVFVSRTJEIDogRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMkRN
UzsKKyAgICAgICAgICAgIGRzdkRlc2MuVGV4dHVyZTJELk1pcFNsaWNlID0gMDsKKyAgICAgICAg
ICAgIGRzdkRlc2MuRmxhZ3MgPSAwOworICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVh
dGVEZXB0aFN0ZW5jaWxWaWV3KG1UZXh0dXJlLCAmZHN2RGVzYywgJm1EZXB0aFN0ZW5jaWwpOwor
CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICBt
VGV4dHVyZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEQzRDEx
X1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CisgICAgICAgICAgICBydHZEZXNjLkZv
cm1hdCA9IHJlcXVlc3RlZEZvcm1hdDsKKyAgICAgICAgICAgIHJ0dkRlc2MuVmlld0RpbWVuc2lv
biA9IChzdXBwb3J0ZWRTYW1wbGVzID09IDApID8gRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJF
MkQgOiBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyRE1TOworICAgICAgICAgICAgcnR2RGVz
Yy5UZXh0dXJlMkQuTWlwU2xpY2UgPSAwOworICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5D
cmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1UZXh0dXJlLCAmcnR2RGVzYywgJm1SZW5kZXJUYXJnZXQp
OworCisgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAg
ICBtVGV4dHVyZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgICAgIEQzRDExX1NIQURF
Ul9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKKyAgICAgICAgICAgIHNydkRlc2MuRm9ybWF0
ID0gcmVxdWVzdGVkRm9ybWF0OworICAgICAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0g
KHN1cHBvcnRlZFNhbXBsZXMgPT0gMCkgPyBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyRCA6
IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTJETVM7CisgICAgICAgICAgICBzcnZEZXNjLlRl
eHR1cmUyRC5Nb3N0RGV0YWlsZWRNaXAgPSAwOworICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJl
MkQuTWlwTGV2ZWxzID0gMTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hh
ZGVyUmVzb3VyY2VWaWV3KG1UZXh0dXJlLCAmc3J2RGVzYywgJm1TaGFkZXJSZXNvdXJjZSk7CisK
KyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgIG1U
ZXh0dXJlID0gTlVMTDsKKyAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7
CisgICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7CisgICAgICAgICAgICAgICAg
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBtV2lkdGggPSB3aWR0aDsKKyAgICBtSGVpZ2h0ID0gaGVpZ2h0
OworICAgIG1JbnRlcm5hbEZvcm1hdCA9IGZvcm1hdDsKKyAgICBtU2FtcGxlcyA9IHN1cHBvcnRl
ZFNhbXBsZXM7CisgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDExX2dsOjpDb252ZXJ0VGV4dHVyZUlu
dGVybmFsRm9ybWF0KHJlcXVlc3RlZEZvcm1hdCk7CisgICAgbVN1YnJlc291cmNlSW5kZXggPSBE
M0QxMUNhbGNTdWJyZXNvdXJjZSgwLCAwLCAxKTsKK30KKworUmVuZGVyVGFyZ2V0MTE6On5SZW5k
ZXJUYXJnZXQxMSgpCit7CisgICAgaWYgKG1UZXh0dXJlKQorICAgIHsKKyAgICAgICAgbVRleHR1
cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgbVRleHR1cmUgPSBOVUxMOworICAgIH0KKworICAgIGlm
IChtUmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgp
OworICAgICAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAobURlcHRo
U3RlbmNpbCkKKyAgICB7CisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKKyAgICAg
ICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKG1TaGFkZXJSZXNvdXJj
ZSkKKyAgICB7CisgICAgICAgIG1TaGFkZXJSZXNvdXJjZS0+UmVsZWFzZSgpOworICAgICAgICBt
U2hhZGVyUmVzb3VyY2UgPSBOVUxMOworICAgIH0KK30KKworUmVuZGVyVGFyZ2V0MTEgKlJlbmRl
clRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoUmVuZGVyVGFyZ2V0ICp0YXJnZXQpCit7Cisg
ICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUocng6OlJlbmRlclRhcmdldDExKiwgdGFyZ2V0KSk7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHJ4OjpSZW5kZXJUYXJnZXQxMSo+KHRhcmdldCk7Cit9
CisKK0lEM0QxMVRleHR1cmUyRCAqUmVuZGVyVGFyZ2V0MTE6OmdldFRleHR1cmUoKSBjb25zdAor
eworICAgIHJldHVybiBtVGV4dHVyZTsKK30KKworSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqUmVu
ZGVyVGFyZ2V0MTE6OmdldFJlbmRlclRhcmdldFZpZXcoKSBjb25zdAoreworICAgIHJldHVybiBt
UmVuZGVyVGFyZ2V0OworfQorCitJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpSZW5kZXJUYXJnZXQx
MTo6Z2V0RGVwdGhTdGVuY2lsVmlldygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EZXB0aFN0ZW5j
aWw7Cit9CisKK0lEM0QxMVNoYWRlclJlc291cmNlVmlldyAqUmVuZGVyVGFyZ2V0MTE6OmdldFNo
YWRlclJlc291cmNlVmlldygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TaGFkZXJSZXNvdXJjZTsK
K30KKwordW5zaWduZWQgaW50IFJlbmRlclRhcmdldDExOjpnZXRTdWJyZXNvdXJjZUluZGV4KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbVN1YnJlc291cmNlSW5kZXg7Cit9CisKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
UmVuZGVyVGFyZ2V0MTEuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFyZ2V0MTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NzgyN2YyNjM5NzA3
Mjk0Mjg0YTJjY2QzNDgxYzk3YmVkZTg5YjA3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJUYXJnZXQx
MS5oCkBAIC0wLDAgKzEsNTEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBSZW5kZXJUYXJnZXQxMS5o
OiBEZWZpbmVzIGEgRFgxMS1zcGVjaWZpYyB3cmFwcGVyIGZvciBJRDNEMTFWaWV3IHBvaW50ZXJz
CisvLyByZXRhaW5lZCBieSBSZW5kZXJidWZmZXJzLgorCisjaWZuZGVmIExJQkdMRVNWMl9SRU5E
RVJFUl9SRU5ERVJUQVJHRVQxMV9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVS
VEFSR0VUMTFfSF8KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQu
aCIKKworbmFtZXNwYWNlIHJ4Cit7CitjbGFzcyBSZW5kZXJlcjsKK2NsYXNzIFJlbmRlcmVyMTE7
CisKK2NsYXNzIFJlbmRlclRhcmdldDExIDogcHVibGljIFJlbmRlclRhcmdldAoreworICBwdWJs
aWM6CisgICAgUmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBJRDNEMTFSZW5kZXJU
YXJnZXRWaWV3ICpydHYsIElEM0QxMVRleHR1cmUyRCAqdGV4LCBJRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKnNydiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAgIFJlbmRlclRh
cmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZHN2LCBJ
RDNEMTFUZXh0dXJlMkQgKnRleCwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICBSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAq
cmVuZGVyZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
THNpemVpIHNhbXBsZXMsIGJvb2wgZGVwdGgpOworICAgIHZpcnR1YWwgflJlbmRlclRhcmdldDEx
KCk7CisKKyAgICBzdGF0aWMgUmVuZGVyVGFyZ2V0MTEgKm1ha2VSZW5kZXJUYXJnZXQxMShSZW5k
ZXJUYXJnZXQgKnJlbmRlclRhcmdldCk7CisKKyAgICBJRDNEMTFUZXh0dXJlMkQgKmdldFRleHR1
cmUoKSBjb25zdDsKKyAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpnZXRSZW5kZXJUYXJnZXRW
aWV3KCkgY29uc3Q7CisgICAgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZ2V0RGVwdGhTdGVuY2ls
VmlldygpIGNvbnN0OworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0U2hhZGVyUmVz
b3VyY2VWaWV3KCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBpbnQgZ2V0U3VicmVzb3VyY2VJbmRl
eCgpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJl
bmRlclRhcmdldDExKTsKKworICAgIHVuc2lnbmVkIGludCBtU3VicmVzb3VyY2VJbmRleDsKKyAg
ICBJRDNEMTFUZXh0dXJlMkQgKm1UZXh0dXJlOworICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcg
Km1SZW5kZXJUYXJnZXQ7CisgICAgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqbURlcHRoU3RlbmNp
bDsKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKm1TaGFkZXJSZXNvdXJjZTsKKworICAg
IFJlbmRlcmVyMTEgKm1SZW5kZXJlcjsKK307CisKK30KKworI2VuZGlmIExJQkdMRVNWMl9SRU5E
RVJFUl9SRU5ERVJUQVJHRVQxMV9IXwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvUmVuZGVyZXIxMS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcyMmYwYzVhNDU1M2Q4
MDUzMGFkN2VkOWI4YjU3NDU4NTVlNWUyMDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuY3Bw
CkBAIC0wLDAgKzEsMzYyMyBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisvLyBSZW5kZXJlcjExLmNwcDogSW1wbGVtZW50cyBhIGJhY2stZW5kIHNwZWNp
ZmljIGNsYXNzIGZvciB0aGUgRDNEMTEgcmVuZGVyZXIuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIv
bWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvQnVmZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVu
ZGVyYnVmZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVy
MTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFyZ2V0MTEu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dhcENoYWluMTEuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW1hZ2UxMS5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9WZXJ0ZXhCdWZmZXIxMS5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9JbmRleEJ1ZmZlcjExLmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL0J1ZmZlclN0b3JhZ2UxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9WZXJ0ZXhEYXRhTWFuYWdlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9JbmRleERhdGFNYW5hZ2VyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L1RleHR1cmVTdG9yYWdlMTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
UXVlcnkxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9GZW5jZTExLmgi
CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9w
YXNzdGhyb3VnaDExdnMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hh
ZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmExMXBzLmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2IxMXBzLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Ro
cm91Z2hsdW0xMXBzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRl
cnMvY29tcGlsZWQvcGFzc3Rocm91Z2hsdW1hbHBoYTExcHMuaCIKKworI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyMTF2cy5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyc2luZ2xl
MTFwcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBp
bGVkL2NsZWFybXVsdGlwbGUxMXBzLmgiCisKKyNpbmNsdWRlICJsaWJFR0wvRGlzcGxheS5oIgor
CisvLyBFbmFibGUgQU5HTEVfU0tJUF9EWEdJXzFfMl9DSEVDSyBpZiB0aGVyZSBpcyBub3QgYSBw
b3NzaWJpbGl0eSBvZiB1c2luZyBjcm9zcy1wcm9jZXNzCisvLyBIV05EcyBvciB0aGUgV2luZG93
cyA3IFBsYXRmb3JtIFVwZGF0ZSAoS0IyNjcwODM4KSBpcyBleHBlY3RlZCB0byBiZSBpbnN0YWxs
ZWQuCisjaWZuZGVmIEFOR0xFX1NLSVBfRFhHSV8xXzJfQ0hFQ0sKKyNkZWZpbmUgQU5HTEVfU0tJ
UF9EWEdJXzFfMl9DSEVDSyAwCisjZW5kaWYKKworI2lmZGVmIF9ERUJVRworLy8gdGhpcyBmbGFn
IGVuYWJsZXMgc3VwcHJlc3Npbmcgc29tZSBzcHVyaW91cyB3YXJuaW5ncyB0aGF0IHBvcCB1cCBp
biBjZXJ0YWluIFdlYkdMIHNhbXBsZXMKKy8vIGFuZCBjb25mb3JtYW5jZSB0ZXN0cy4gdG8gZW5h
YmxlIGFsbCB3YXJuaW5ncywgcmVtb3ZlIHRoaXMgZGVmaW5lLgorI2RlZmluZSBBTkdMRV9TVVBQ
UkVTU19EM0QxMV9IQVpBUkRfV0FSTklOR1MgMQorI2VuZGlmCisKK25hbWVzcGFjZSByeAorewor
c3RhdGljIGNvbnN0IERYR0lfRk9STUFUIFJlbmRlclRhcmdldEZvcm1hdHNbXSA9CisgICAgewor
ICAgICAgICBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STSwKKyAgICAgICAgRFhHSV9GT1JNQVRf
UjhHOEI4QThfVU5PUk0KKyAgICB9OworCitzdGF0aWMgY29uc3QgRFhHSV9GT1JNQVQgRGVwdGhT
dGVuY2lsRm9ybWF0c1tdID0KKyAgICB7CisgICAgICAgIERYR0lfRk9STUFUX1VOS05PV04sCisg
ICAgICAgIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5ULAorICAgICAgICBEWEdJX0ZPUk1B
VF9EMTZfVU5PUk0KKyAgICB9OworCitlbnVtCit7CisgICAgTUFYX1RFWFRVUkVfSU1BR0VfVU5J
VFNfVlRGX1NNNCA9IDE2Cit9OworCitSZW5kZXJlcjExOjpSZW5kZXJlcjExKGVnbDo6RGlzcGxh
eSAqZGlzcGxheSwgSERDIGhEYykgOiBSZW5kZXJlcihkaXNwbGF5KSwgbURjKGhEYykKK3sKKyAg
ICBtVmVydGV4RGF0YU1hbmFnZXIgPSBOVUxMOworICAgIG1JbmRleERhdGFNYW5hZ2VyID0gTlVM
TDsKKworICAgIG1MaW5lTG9vcElCID0gTlVMTDsKKyAgICBtVHJpYW5nbGVGYW5JQiA9IE5VTEw7
CisKKyAgICBtQ29weVJlc291cmNlc0luaXRpYWxpemVkID0gZmFsc2U7CisgICAgbUNvcHlWQiA9
IE5VTEw7CisgICAgbUNvcHlTYW1wbGVyID0gTlVMTDsKKyAgICBtQ29weUlMID0gTlVMTDsKKyAg
ICBtQ29weVZTID0gTlVMTDsKKyAgICBtQ29weVJHQkFQUyA9IE5VTEw7CisgICAgbUNvcHlSR0JQ
UyA9IE5VTEw7CisgICAgbUNvcHlMdW1QUyA9IE5VTEw7CisgICAgbUNvcHlMdW1BbHBoYVBTID0g
TlVMTDsKKworICAgIG1DbGVhclJlc291cmNlc0luaXRpYWxpemVkID0gZmFsc2U7CisgICAgbUNs
ZWFyVkIgPSBOVUxMOworICAgIG1DbGVhcklMID0gTlVMTDsKKyAgICBtQ2xlYXJWUyA9IE5VTEw7
CisgICAgbUNsZWFyU2luZ2xlUFMgPSBOVUxMOworICAgIG1DbGVhck11bHRpcGxlUFMgPSBOVUxM
OworICAgIG1DbGVhclNjaXNzb3JSUyA9IE5VTEw7CisgICAgbUNsZWFyTm9TY2lzc29yUlMgPSBO
VUxMOworCisgICAgbVN5bmNRdWVyeSA9IE5VTEw7CisKKyAgICBtRDNkMTFNb2R1bGUgPSBOVUxM
OworICAgIG1EeGdpTW9kdWxlID0gTlVMTDsKKworICAgIG1EZXZpY2VMb3N0ID0gZmFsc2U7CisK
KyAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9IDA7CisKKyAgICBtRGV2aWNlID0gTlVMTDsKKyAg
ICBtRGV2aWNlQ29udGV4dCA9IE5VTEw7CisgICAgbUR4Z2lBZGFwdGVyID0gTlVMTDsKKyAgICBt
RHhnaUZhY3RvcnkgPSBOVUxMOworCisgICAgbURyaXZlckNvbnN0YW50QnVmZmVyVlMgPSBOVUxM
OworICAgIG1Ecml2ZXJDb25zdGFudEJ1ZmZlclBTID0gTlVMTDsKKworICAgIG1CR1JBVGV4dHVy
ZVN1cHBvcnQgPSBmYWxzZTsKKworICAgIG1Jc0dlb21ldHJ5U2hhZGVyQWN0aXZlID0gZmFsc2U7
Cit9CisKK1JlbmRlcmVyMTE6On5SZW5kZXJlcjExKCkKK3sKKyAgICByZWxlYXNlKCk7Cit9CisK
K1JlbmRlcmVyMTEgKlJlbmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKFJlbmRlcmVyICpyZW5kZXJl
cikKK3sKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShyeDo6UmVuZGVyZXIxMSosIHJlbmRl
cmVyKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHJ4OjpSZW5kZXJlcjExKj4ocmVuZGVyZXIp
OworfQorCisjaWZuZGVmIF9fZDNkMTFfMV9oX18KKyNkZWZpbmUgRDNEMTFfTUVTU0FHRV9JRF9E
RVZJQ0VfRFJBV19SRU5ERVJUQVJHRVRWSUVXX05PVF9TRVQgKChEM0QxMV9NRVNTQUdFX0lEKTMx
NDYwODEpCisjZW5kaWYKKworRUdMaW50IFJlbmRlcmVyMTE6OmluaXRpYWxpemUoKQoreworICAg
IGlmICghaW5pdGlhbGl6ZUNvbXBpbGVyKCkpCisgICAgeworICAgICAgICByZXR1cm4gRUdMX05P
VF9JTklUSUFMSVpFRDsKKyAgICB9CisKKyAgICBtRHhnaU1vZHVsZSA9IExvYWRMaWJyYXJ5KFRF
WFQoImR4Z2kuZGxsIikpOworICAgIG1EM2QxMU1vZHVsZSA9IExvYWRMaWJyYXJ5KFRFWFQoImQz
ZDExLmRsbCIpKTsKKworICAgIGlmIChtRDNkMTFNb2R1bGUgPT0gTlVMTCB8fCBtRHhnaU1vZHVs
ZSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgRVJSKCJDb3VsZCBub3QgbG9hZCBEM0QxMSBvciBE
WEdJIGxpYnJhcnkgLSBhYm9ydGluZyFcbiIpOworICAgICAgICByZXR1cm4gRUdMX05PVF9JTklU
SUFMSVpFRDsKKyAgICB9CisKKyAgICAvLyBjcmVhdGUgdGhlIEQzRDExIGRldmljZQorICAgIEFT
U0VSVChtRGV2aWNlID09IE5VTEwpOworICAgIFBGTl9EM0QxMV9DUkVBVEVfREVWSUNFIEQzRDEx
Q3JlYXRlRGV2aWNlID0gKFBGTl9EM0QxMV9DUkVBVEVfREVWSUNFKUdldFByb2NBZGRyZXNzKG1E
M2QxMU1vZHVsZSwgIkQzRDExQ3JlYXRlRGV2aWNlIik7CisKKyAgICBpZiAoRDNEMTFDcmVhdGVE
ZXZpY2UgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIEVSUigiQ291bGQgbm90IHJldHJpZXZlIEQz
RDExQ3JlYXRlRGV2aWNlIGFkZHJlc3MgLSBhYm9ydGluZyFcbiIpOworICAgICAgICByZXR1cm4g
RUdMX05PVF9JTklUSUFMSVpFRDsKKyAgICB9CisKKyAgICBEM0RfRkVBVFVSRV9MRVZFTCBmZWF0
dXJlTGV2ZWxzW10gPQorICAgIHsKKyAgICAgICAgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMCwKKyAg
ICAgICAgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMSwKKyAgICAgICAgRDNEX0ZFQVRVUkVfTEVWRUxf
MTBfMCwKKyAgICB9OworCisgICAgSFJFU1VMVCByZXN1bHQgPSBTX09LOworCisjaWZkZWYgX0RF
QlVHCisgICAgcmVzdWx0ID0gRDNEMTFDcmVhdGVEZXZpY2UoTlVMTCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBEM0RfRFJJVkVSX1RZUEVfSEFSRFdBUkUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
M0QxMV9DUkVBVEVfREVWSUNFX0RFQlVHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZlYXR1cmVMZXZlbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlTaXpl
KGZlYXR1cmVMZXZlbHMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRDExX1NE
S19WRVJTSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtRGV2aWNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtRmVhdHVyZUxldmVsLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZtRGV2aWNlQ29udGV4dCk7CisKKyAgICBpZiAoIW1EZXZpY2Ug
fHwgRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCBjcmVhdGluZyBE
ZWJ1ZyBEM0QxMSBkZXZpY2UgLSBmYWxsaW5nIGJhY2sgdG8gcmVsZWFzZSBydW50aW1lLlxuIik7
CisgICAgfQorCisgICAgaWYgKCFtRGV2aWNlIHx8IEZBSUxFRChyZXN1bHQpKQorI2VuZGlmCisg
ICAgeworICAgICAgICByZXN1bHQgPSBEM0QxMUNyZWF0ZURldmljZShOVUxMLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RfRFJJVkVSX1RZUEVfSEFSRFdBUkUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZl
YXR1cmVMZXZlbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5U2l6
ZShmZWF0dXJlTGV2ZWxzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNE
MTFfU0RLX1ZFUlNJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtRGV2
aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbUZlYXR1cmVMZXZlbCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1EZXZpY2VDb250ZXh0KTsKKwor
ICAgICAgICBpZiAoIW1EZXZpY2UgfHwgRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBEM0QxMSBkZXZpY2UgLSBhYm9ydGluZyFcbiIp
OworICAgICAgICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7ICAgLy8gQ2xlYW51cCBk
b25lIGJ5IGRlc3RydWN0b3IgdGhyb3VnaCBnbERlc3Ryb3lSZW5kZXJlcgorICAgICAgICB9Cisg
ICAgfQorCisjaWYgIUFOR0xFX1NLSVBfRFhHSV8xXzJfQ0hFQ0sKKyAgICAvLyBJbiBvcmRlciB0
byBjcmVhdGUgYSBzd2FwIGNoYWluIGZvciBhbiBIV05EIG93bmVkIGJ5IGFub3RoZXIgcHJvY2Vz
cywgRFhHSSAxLjIgaXMgcmVxdWlyZWQuCisgICAgLy8gVGhlIGVhc2llc3Qgd2F5IHRvIGNoZWNr
IGlzIHRvIHF1ZXJ5IGZvciBhIElEWEdJRGV2aWNlMi4KKyAgICBib29sIHJlcXVpcmVEWEdJMV8y
ID0gZmFsc2U7CisgICAgSFdORCBod25kID0gV2luZG93RnJvbURDKG1EYyk7CisgICAgaWYgKGh3
bmQpCisgICAgeworICAgICAgICBEV09SRCBjdXJyZW50UHJvY2Vzc0lkID0gR2V0Q3VycmVudFBy
b2Nlc3NJZCgpOworICAgICAgICBEV09SRCB3bmRQcm9jZXNzSWQ7CisgICAgICAgIEdldFdpbmRv
d1RocmVhZFByb2Nlc3NJZChod25kLCAmd25kUHJvY2Vzc0lkKTsKKyAgICAgICAgcmVxdWlyZURY
R0kxXzIgPSAoY3VycmVudFByb2Nlc3NJZCAhPSB3bmRQcm9jZXNzSWQpOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICByZXF1aXJlRFhHSTFfMiA9IHRydWU7CisgICAgfQorCisgICAg
aWYgKHJlcXVpcmVEWEdJMV8yKQorICAgIHsKKyAgICAgICAgSURYR0lEZXZpY2UyICpkeGdpRGV2
aWNlMiA9IE5VTEw7CisgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPlF1ZXJ5SW50ZXJmYWNlKF9f
dXVpZG9mKElEWEdJRGV2aWNlMiksICh2b2lkKiopJmR4Z2lEZXZpY2UyKTsKKyAgICAgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkRYR0kgMS4yIHJl
cXVpcmVkIHRvIHByZXNlbnQgdG8gSFdORHMgb3duZWQgYnkgYW5vdGhlciBwcm9jZXNzLlxuIik7
CisgICAgICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsKKyAgICAgICAgfQorICAg
ICAgICBTYWZlUmVsZWFzZShkeGdpRGV2aWNlMik7CisgICAgfQorI2VuZGlmCisKKyAgICBJRFhH
SURldmljZSAqZHhnaURldmljZSA9IE5VTEw7CisgICAgcmVzdWx0ID0gbURldmljZS0+UXVlcnlJ
bnRlcmZhY2UoX191dWlkb2YoSURYR0lEZXZpY2UpLCAodm9pZCoqKSZkeGdpRGV2aWNlKTsKKwor
ICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEVSUigiQ291bGQgbm90IHF1
ZXJ5IERYR0kgZGV2aWNlIC0gYWJvcnRpbmchXG4iKTsKKyAgICAgICAgcmV0dXJuIEVHTF9OT1Rf
SU5JVElBTElaRUQ7CisgICAgfQorCisgICAgcmVzdWx0ID0gZHhnaURldmljZS0+R2V0UGFyZW50
KF9fdXVpZG9mKElEWEdJQWRhcHRlciksICh2b2lkKiopJm1EeGdpQWRhcHRlcik7CisKKyAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBFUlIoIkNvdWxkIG5vdCByZXRyaWV2
ZSBEWEdJIGFkYXB0ZXIgLSBhYm9ydGluZyFcbiIpOworICAgICAgICByZXR1cm4gRUdMX05PVF9J
TklUSUFMSVpFRDsKKyAgICB9CisKKyAgICBkeGdpRGV2aWNlLT5SZWxlYXNlKCk7CisKKyAgICBt
RHhnaUFkYXB0ZXItPkdldERlc2MoJm1BZGFwdGVyRGVzY3JpcHRpb24pOworICAgIG1lbXNldCht
RGVzY3JpcHRpb24sIDAsIHNpemVvZihtRGVzY3JpcHRpb24pKTsKKyAgICB3Y3N0b21icyhtRGVz
Y3JpcHRpb24sIG1BZGFwdGVyRGVzY3JpcHRpb24uRGVzY3JpcHRpb24sIHNpemVvZihtRGVzY3Jp
cHRpb24pIC0gMSk7CisKKyAgICByZXN1bHQgPSBtRHhnaUFkYXB0ZXItPkdldFBhcmVudChfX3V1
aWRvZihJRFhHSUZhY3RvcnkpLCAodm9pZCoqKSZtRHhnaUZhY3RvcnkpOworCisgICAgaWYgKCFt
RHhnaUZhY3RvcnkgfHwgRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBFUlIoIkNvdWxk
IG5vdCBjcmVhdGUgRFhHSSBmYWN0b3J5IC0gYWJvcnRpbmchXG4iKTsKKyAgICAgICAgcmV0dXJu
IEVHTF9OT1RfSU5JVElBTElaRUQ7CisgICAgfQorCisgICAgLy8gRGlzYWJsZSBzb21lIHNwdXJp
b3VzIEQzRDExIGRlYnVnIHdhcm5pbmdzIHRvIHByZXZlbnQgdGhlbSBmcm9tIGZsb29kaW5nIHRo
ZSBvdXRwdXQgbG9nCisjaWYgZGVmaW5lZChBTkdMRV9TVVBQUkVTU19EM0QxMV9IQVpBUkRfV0FS
TklOR1MpICYmIGRlZmluZWQoX0RFQlVHKQorICAgIElEM0QxMUluZm9RdWV1ZSAqaW5mb1F1ZXVl
OworICAgIHJlc3VsdCA9IG1EZXZpY2UtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEM0QxMUlu
Zm9RdWV1ZSksICAodm9pZCAqKikmaW5mb1F1ZXVlKTsKKworICAgIGlmIChTVUNDRUVERUQocmVz
dWx0KSkKKyAgICB7CisgICAgICAgIEQzRDExX01FU1NBR0VfSUQgaGlkZU1lc3NhZ2VzW10gPQor
ICAgICAgICB7CisgICAgICAgICAgICBEM0QxMV9NRVNTQUdFX0lEX0RFVklDRV9EUkFXX1JFTkRF
UlRBUkdFVFZJRVdfTk9UX1NFVAorICAgICAgICB9OworCisgICAgICAgIEQzRDExX0lORk9fUVVF
VUVfRklMVEVSIGZpbHRlciA9IHswfTsKKyAgICAgICAgZmlsdGVyLkRlbnlMaXN0Lk51bUlEcyA9
IEFycmF5U2l6ZShoaWRlTWVzc2FnZXMpOworICAgICAgICBmaWx0ZXIuRGVueUxpc3QucElETGlz
dCA9IGhpZGVNZXNzYWdlczsKKworICAgICAgICBpbmZvUXVldWUtPkFkZFN0b3JhZ2VGaWx0ZXJF
bnRyaWVzKCZmaWx0ZXIpOworCisgICAgICAgIGluZm9RdWV1ZS0+UmVsZWFzZSgpOworICAgIH0K
KyNlbmRpZgorCisgICAgdW5zaWduZWQgaW50IG1heFN1cHBvcnRlZFNhbXBsZXMgPSAwOworICAg
IHVuc2lnbmVkIGludCBydEZvcm1hdENvdW50ID0gQXJyYXlTaXplKFJlbmRlclRhcmdldEZvcm1h
dHMpOworICAgIHVuc2lnbmVkIGludCBkc0Zvcm1hdENvdW50ID0gQXJyYXlTaXplKERlcHRoU3Rl
bmNpbEZvcm1hdHMpOworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcnRGb3JtYXRD
b3VudCArIGRzRm9ybWF0Q291bnQ7ICsraSkKKyAgICB7CisgICAgICAgIERYR0lfRk9STUFUIGZv
cm1hdCA9IChpIDwgcnRGb3JtYXRDb3VudCkgPyBSZW5kZXJUYXJnZXRGb3JtYXRzW2ldIDogRGVw
dGhTdGVuY2lsRm9ybWF0c1tpIC0gcnRGb3JtYXRDb3VudF07CisgICAgICAgIGlmIChmb3JtYXQg
IT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKKyAgICAgICAgeworICAgICAgICAgICAgVUlOVCBmb3Jt
YXRTdXBwb3J0OworICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q2hlY2tGb3JtYXRTdXBw
b3J0KGZvcm1hdCwgJmZvcm1hdFN1cHBvcnQpOworICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChy
ZXN1bHQpICYmIChmb3JtYXRTdXBwb3J0ICYgRDNEMTFfRk9STUFUX1NVUFBPUlRfTVVMVElTQU1Q
TEVfUkVOREVSVEFSR0VUKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNdWx0aXNh
bXBsZVN1cHBvcnRJbmZvIHN1cHBvcnRJbmZvOworCisgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaiA9IDE7IGogPD0gRDNEMTFfTUFYX01VTFRJU0FNUExFX1NBTVBMRV9DT1VOVDsg
aisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbURl
dmljZS0+Q2hlY2tNdWx0aXNhbXBsZVF1YWxpdHlMZXZlbHMoZm9ybWF0LCBqLCAmc3VwcG9ydElu
Zm8ucXVhbGl0eUxldmVsc1tqIC0gMV0pOworICAgICAgICAgICAgICAgICAgICBpZiAoU1VDQ0VF
REVEKHJlc3VsdCkgJiYgc3VwcG9ydEluZm8ucXVhbGl0eUxldmVsc1tqIC0gMV0gPiAwKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXhTdXBwb3J0ZWRT
YW1wbGVzID0gc3RkOjptYXgoaiwgbWF4U3VwcG9ydGVkU2FtcGxlcyk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0SW5mby5xdWFsaXR5TGV2ZWxzW2ogLSAx
XSA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBtTXVsdGlzYW1wbGVTdXBwb3J0TWFwLmluc2VydChzdGQ6Om1ha2VfcGFpcihm
b3JtYXQsIHN1cHBvcnRJbmZvKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgbU1heFN1cHBvcnRlZFNhbXBsZXMgPSBtYXhTdXBwb3J0ZWRTYW1wbGVzOworCisgICAgaW5p
dGlhbGl6ZURldmljZSgpOworCisgICAgLy8gQkdSQSB0ZXh0dXJlIHN1cHBvcnQgaXMgb3B0aW9u
YWwgaW4gZmVhdHVyZSBsZXZlbHMgMTAgYW5kIDEwXzEKKyAgICBVSU5UIGZvcm1hdFN1cHBvcnQ7
CisgICAgcmVzdWx0ID0gbURldmljZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KERYR0lfRk9STUFUX0I4
RzhSOEE4X1VOT1JNLCAmZm9ybWF0U3VwcG9ydCk7CisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQor
ICAgIHsKKyAgICAgICAgRVJSKCJFcnJvciBjaGVja2luZyBCR1JBIGZvcm1hdCBzdXBwb3J0OiAw
eCUwOFgiLCByZXN1bHQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjb25zdCBp
bnQgZmxhZ3MgPSAoRDNEMTFfRk9STUFUX1NVUFBPUlRfVEVYVFVSRTJEIHwgRDNEMTFfRk9STUFU
X1NVUFBPUlRfUkVOREVSX1RBUkdFVCk7CisgICAgICAgIG1CR1JBVGV4dHVyZVN1cHBvcnQgPSAo
Zm9ybWF0U3VwcG9ydCAmIGZsYWdzKSA9PSBmbGFnczsKKyAgICB9CisKKyAgICAvLyBDaGVjayBm
bG9hdGluZyBwb2ludCB0ZXh0dXJlIHN1cHBvcnQKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
aW50IHJlcXVpcmVkVGV4dHVyZUZsYWdzID0gRDNEMTFfRk9STUFUX1NVUFBPUlRfVEVYVFVSRTJE
IHwgRDNEMTFfRk9STUFUX1NVUFBPUlRfVEVYVFVSRUNVQkU7CisgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIGludCByZXF1aXJlZFJlbmRlcmFibGVGbGFncyA9IEQzRDExX0ZPUk1BVF9TVVBQT1JU
X1JFTkRFUl9UQVJHRVQ7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCByZXF1aXJlZEZp
bHRlckZsYWdzID0gRDNEMTFfRk9STUFUX1NVUFBPUlRfU0hBREVSX1NBTVBMRTsKKworICAgIERY
R0lfRk9STUFUIGZsb2F0MTZGb3JtYXRzW10gPQorICAgIHsKKyAgICAgICAgRFhHSV9GT1JNQVRf
UjE2X0ZMT0FULAorICAgICAgICBEWEdJX0ZPUk1BVF9SMTZHMTZfRkxPQVQsCisgICAgICAgIERY
R0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9BVCwKKyAgICB9OworCisgICAgRFhHSV9GT1JNQVQg
ZmxvYXQzMkZvcm1hdHNbXSA9CisgICAgeworICAgICAgICBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQs
CisgICAgICAgIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwKKyAgICAgICAgRFhHSV9GT1JNQVRf
UjMyRzMyQjMyQTMyX0ZMT0FULAorICAgIH07CisKKyAgICBtRmxvYXQxNlRleHR1cmVTdXBwb3J0
ID0gdHJ1ZTsKKyAgICBtRmxvYXQxNkZpbHRlclN1cHBvcnQgPSB0cnVlOworICAgIG1GbG9hdDE2
UmVuZGVyU3VwcG9ydCA9IHRydWU7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBB
cnJheVNpemUoZmxvYXQxNkZvcm1hdHMpOyBpKyspCisgICAgeworICAgICAgICBpZiAoU1VDQ0VF
REVEKG1EZXZpY2UtPkNoZWNrRm9ybWF0U3VwcG9ydChmbG9hdDE2Rm9ybWF0c1tpXSwgJmZvcm1h
dFN1cHBvcnQpKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUZsb2F0MTZUZXh0dXJlU3VwcG9y
dCA9IG1GbG9hdDE2VGV4dHVyZVN1cHBvcnQgJiYgKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZFRl
eHR1cmVGbGFncykgPT0gcmVxdWlyZWRUZXh0dXJlRmxhZ3M7CisgICAgICAgICAgICBtRmxvYXQx
NkZpbHRlclN1cHBvcnQgPSBtRmxvYXQxNkZpbHRlclN1cHBvcnQgJiYgKGZvcm1hdFN1cHBvcnQg
JiByZXF1aXJlZEZpbHRlckZsYWdzKSA9PSByZXF1aXJlZEZpbHRlckZsYWdzOworICAgICAgICAg
ICAgbUZsb2F0MTZSZW5kZXJTdXBwb3J0ID0gbUZsb2F0MTZSZW5kZXJTdXBwb3J0ICYmIChmb3Jt
YXRTdXBwb3J0ICYgcmVxdWlyZWRSZW5kZXJhYmxlRmxhZ3MpID09IHJlcXVpcmVkUmVuZGVyYWJs
ZUZsYWdzOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAg
bUZsb2F0MTZUZXh0dXJlU3VwcG9ydCA9IGZhbHNlOworICAgICAgICAgICAgbUZsb2F0MTZSZW5k
ZXJTdXBwb3J0ID0gZmFsc2U7CisgICAgICAgICAgICBtRmxvYXQxNkZpbHRlclN1cHBvcnQgPSBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQgPSB0
cnVlOworICAgIG1GbG9hdDMyRmlsdGVyU3VwcG9ydCA9IHRydWU7CisgICAgbUZsb2F0MzJSZW5k
ZXJTdXBwb3J0ID0gdHJ1ZTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5
U2l6ZShmbG9hdDMyRm9ybWF0cyk7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChTVUNDRUVERUQo
bURldmljZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KGZsb2F0MzJGb3JtYXRzW2ldLCAmZm9ybWF0U3Vw
cG9ydCkpKQorICAgICAgICB7CisgICAgICAgICAgICBtRmxvYXQzMlRleHR1cmVTdXBwb3J0ID0g
bUZsb2F0MzJUZXh0dXJlU3VwcG9ydCAmJiAoZm9ybWF0U3VwcG9ydCAmIHJlcXVpcmVkVGV4dHVy
ZUZsYWdzKSA9PSByZXF1aXJlZFRleHR1cmVGbGFnczsKKyAgICAgICAgICAgIG1GbG9hdDMyRmls
dGVyU3VwcG9ydCA9IG1GbG9hdDMyRmlsdGVyU3VwcG9ydCAmJiAoZm9ybWF0U3VwcG9ydCAmIHJl
cXVpcmVkRmlsdGVyRmxhZ3MpID09IHJlcXVpcmVkRmlsdGVyRmxhZ3M7CisgICAgICAgICAgICBt
RmxvYXQzMlJlbmRlclN1cHBvcnQgPSBtRmxvYXQzMlJlbmRlclN1cHBvcnQgJiYgKGZvcm1hdFN1
cHBvcnQgJiByZXF1aXJlZFJlbmRlcmFibGVGbGFncykgPT0gcmVxdWlyZWRSZW5kZXJhYmxlRmxh
Z3M7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtRmxv
YXQzMlRleHR1cmVTdXBwb3J0ID0gZmFsc2U7CisgICAgICAgICAgICBtRmxvYXQzMkZpbHRlclN1
cHBvcnQgPSBmYWxzZTsKKyAgICAgICAgICAgIG1GbG9hdDMyUmVuZGVyU3VwcG9ydCA9IGZhbHNl
OworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ2hlY2sgY29tcHJlc3NlZCB0ZXh0dXJlIHN1
cHBvcnQKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgcmVxdWlyZWRDb21wcmVzc2VkVGV4dHVyZUZs
YWdzID0gRDNEMTFfRk9STUFUX1NVUFBPUlRfVEVYVFVSRTJEOworCisgICAgaWYgKFNVQ0NFRURF
RChtRGV2aWNlLT5DaGVja0Zvcm1hdFN1cHBvcnQoRFhHSV9GT1JNQVRfQkMxX1VOT1JNLCAmZm9y
bWF0U3VwcG9ydCkpKQorICAgIHsKKyAgICAgICAgbURYVDFUZXh0dXJlU3VwcG9ydCA9IChmb3Jt
YXRTdXBwb3J0ICYgcmVxdWlyZWRDb21wcmVzc2VkVGV4dHVyZUZsYWdzKSA9PSByZXF1aXJlZENv
bXByZXNzZWRUZXh0dXJlRmxhZ3M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1E
WFQxVGV4dHVyZVN1cHBvcnQgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoU1VDQ0VFREVEKG1E
ZXZpY2UtPkNoZWNrRm9ybWF0U3VwcG9ydChEWEdJX0ZPUk1BVF9CQzNfVU5PUk0sICZmb3JtYXRT
dXBwb3J0KSkpCisgICAgeworICAgICAgICBtRFhUM1RleHR1cmVTdXBwb3J0ID0gKGZvcm1hdFN1
cHBvcnQgJiByZXF1aXJlZENvbXByZXNzZWRUZXh0dXJlRmxhZ3MpID09IHJlcXVpcmVkQ29tcHJl
c3NlZFRleHR1cmVGbGFnczsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbURYVDNU
ZXh0dXJlU3VwcG9ydCA9IGZhbHNlOworICAgIH0KKworICAgIGlmIChTVUNDRUVERUQobURldmlj
ZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KERYR0lfRk9STUFUX0JDNV9VTk9STSwgJmZvcm1hdFN1cHBv
cnQpKSkKKyAgICB7CisgICAgICAgIG1EWFQ1VGV4dHVyZVN1cHBvcnQgPSAoZm9ybWF0U3VwcG9y
dCAmIHJlcXVpcmVkQ29tcHJlc3NlZFRleHR1cmVGbGFncykgPT0gcmVxdWlyZWRDb21wcmVzc2Vk
VGV4dHVyZUZsYWdzOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRFhUNVRleHR1
cmVTdXBwb3J0ID0gZmFsc2U7CisgICAgfQorCisgICAgLy8gQ2hlY2sgZGVwdGggdGV4dHVyZSBz
dXBwb3J0CisgICAgRFhHSV9GT1JNQVQgZGVwdGhUZXh0dXJlRm9ybWF0c1tdID0KKyAgICB7Cisg
ICAgICAgIERYR0lfRk9STUFUX0QxNl9VTk9STSwKKyAgICAgICAgRFhHSV9GT1JNQVRfRDI0X1VO
T1JNX1M4X1VJTlQsCisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcmVx
dWlyZWREZXB0aFRleHR1cmVGbGFncyA9IEQzRDExX0ZPUk1BVF9TVVBQT1JUX0RFUFRIX1NURU5D
SUwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEQzRDExX0ZPUk1BVF9TVVBQT1JUX1RFWFRVUkUyRDsKKworICAgIG1EZXB0aFRleHR1
cmVTdXBwb3J0ID0gdHJ1ZTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5
U2l6ZShkZXB0aFRleHR1cmVGb3JtYXRzKTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKFNVQ0NF
RURFRChtRGV2aWNlLT5DaGVja0Zvcm1hdFN1cHBvcnQoZGVwdGhUZXh0dXJlRm9ybWF0c1tpXSwg
JmZvcm1hdFN1cHBvcnQpKSkKKyAgICAgICAgeworICAgICAgICAgICAgbURlcHRoVGV4dHVyZVN1
cHBvcnQgPSBtRGVwdGhUZXh0dXJlU3VwcG9ydCAmJiAoKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJl
ZERlcHRoVGV4dHVyZUZsYWdzKSA9PSByZXF1aXJlZERlcHRoVGV4dHVyZUZsYWdzKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXB0aFRleHR1cmVT
dXBwb3J0ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gRUdMX1NVQ0NF
U1M7Cit9CisKKy8vIGRvIGFueSBvbmUtdGltZSBkZXZpY2UgaW5pdGlhbGl6YXRpb24KKy8vIE5P
VEU6IHRoaXMgaXMgYWxzbyBuZWVkZWQgYWZ0ZXIgYSBkZXZpY2UgbG9zdC9yZXNldAorLy8gdG8g
cmVzZXQgdGhlIHNjZW5lIHN0YXR1cyBhbmQgZW5zdXJlIHRoZSBkZWZhdWx0IHN0YXRlcyBhcmUg
cmVzZXQuCit2b2lkIFJlbmRlcmVyMTE6OmluaXRpYWxpemVEZXZpY2UoKQoreworICAgIG1TdGF0
ZUNhY2hlLmluaXRpYWxpemUobURldmljZSk7CisgICAgbUlucHV0TGF5b3V0Q2FjaGUuaW5pdGlh
bGl6ZShtRGV2aWNlLCBtRGV2aWNlQ29udGV4dCk7CisKKyAgICBBU1NFUlQoIW1WZXJ0ZXhEYXRh
TWFuYWdlciAmJiAhbUluZGV4RGF0YU1hbmFnZXIpOworICAgIG1WZXJ0ZXhEYXRhTWFuYWdlciA9
IG5ldyBWZXJ0ZXhEYXRhTWFuYWdlcih0aGlzKTsKKyAgICBtSW5kZXhEYXRhTWFuYWdlciA9IG5l
dyBJbmRleERhdGFNYW5hZ2VyKHRoaXMpOworCisgICAgbWFya0FsbFN0YXRlRGlydHkoKTsKK30K
KworaW50IFJlbmRlcmVyMTE6OmdlbmVyYXRlQ29uZmlncyhDb25maWdEZXNjICoqY29uZmlnRGVz
Y0xpc3QpCit7CisgICAgdW5zaWduZWQgaW50IG51bVJlbmRlckZvcm1hdHMgPSBBcnJheVNpemUo
UmVuZGVyVGFyZ2V0Rm9ybWF0cyk7CisgICAgdW5zaWduZWQgaW50IG51bURlcHRoRm9ybWF0cyA9
IEFycmF5U2l6ZShEZXB0aFN0ZW5jaWxGb3JtYXRzKTsKKyAgICAoKmNvbmZpZ0Rlc2NMaXN0KSA9
IG5ldyBDb25maWdEZXNjW251bVJlbmRlckZvcm1hdHMgKiBudW1EZXB0aEZvcm1hdHNdOworICAg
IGludCBudW1Db25maWdzID0gMDsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGludCBmb3JtYXRJ
bmRleCA9IDA7IGZvcm1hdEluZGV4IDwgbnVtUmVuZGVyRm9ybWF0czsgZm9ybWF0SW5kZXgrKykK
KyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGRlcHRoU3RlbmNpbEluZGV4ID0gMDsg
ZGVwdGhTdGVuY2lsSW5kZXggPCBudW1EZXB0aEZvcm1hdHM7IGRlcHRoU3RlbmNpbEluZGV4Kysp
CisgICAgICAgIHsKKyAgICAgICAgICAgIERYR0lfRk9STUFUIHJlbmRlclRhcmdldEZvcm1hdCA9
IFJlbmRlclRhcmdldEZvcm1hdHNbZm9ybWF0SW5kZXhdOworCisgICAgICAgICAgICBVSU5UIGZv
cm1hdFN1cHBvcnQgPSAwOworICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5D
aGVja0Zvcm1hdFN1cHBvcnQocmVuZGVyVGFyZ2V0Rm9ybWF0LCAmZm9ybWF0U3VwcG9ydCk7CisK
KyAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSAmJiAoZm9ybWF0U3VwcG9ydCAmIEQz
RDExX0ZPUk1BVF9TVVBQT1JUX1JFTkRFUl9UQVJHRVQpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIERYR0lfRk9STUFUIGRlcHRoU3RlbmNpbEZvcm1hdCA9IERlcHRoU3RlbmNpbEZv
cm1hdHNbZGVwdGhTdGVuY2lsSW5kZXhdOworCisgICAgICAgICAgICAgICAgYm9vbCBkZXB0aFN0
ZW5jaWxGb3JtYXRPSyA9IHRydWU7CisKKyAgICAgICAgICAgICAgICBpZiAoZGVwdGhTdGVuY2ls
Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBVSU5UIGZvcm1hdFN1cHBvcnQgPSAwOworICAgICAgICAgICAgICAgICAg
ICByZXN1bHQgPSBtRGV2aWNlLT5DaGVja0Zvcm1hdFN1cHBvcnQoZGVwdGhTdGVuY2lsRm9ybWF0
LCAmZm9ybWF0U3VwcG9ydCk7CisgICAgICAgICAgICAgICAgICAgIGRlcHRoU3RlbmNpbEZvcm1h
dE9LID0gU1VDQ0VFREVEKHJlc3VsdCkgJiYgKGZvcm1hdFN1cHBvcnQgJiBEM0QxMV9GT1JNQVRf
U1VQUE9SVF9ERVBUSF9TVEVOQ0lMKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBpZiAoZGVwdGhTdGVuY2lsRm9ybWF0T0spCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBDb25maWdEZXNjIG5ld0NvbmZpZzsKKyAgICAgICAgICAgICAgICAgICAg
bmV3Q29uZmlnLnJlbmRlclRhcmdldEZvcm1hdCA9IGQzZDExX2dsOjpDb252ZXJ0QmFja0J1ZmZl
ckZvcm1hdChyZW5kZXJUYXJnZXRGb3JtYXQpOworICAgICAgICAgICAgICAgICAgICBuZXdDb25m
aWcuZGVwdGhTdGVuY2lsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnREZXB0aFN0ZW5jaWxGb3Jt
YXQoZGVwdGhTdGVuY2lsRm9ybWF0KTsKKyAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLm11
bHRpU2FtcGxlID0gMDsgICAgIC8vIEZJWE1FOiBlbnVtZXJhdGUgbXVsdGktc2FtcGxpbmcKKyAg
ICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmZhc3RDb25maWcgPSB0cnVlOyAgIC8vIEFzc3Vt
ZSBhbGwgRFgxMSBmb3JtYXQgY29udmVyc2lvbnMgdG8gYmUgZmFzdAorCisgICAgICAgICAgICAg
ICAgICAgICgqY29uZmlnRGVzY0xpc3QpW251bUNvbmZpZ3MrK10gPSBuZXdDb25maWc7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIG51bUNvbmZpZ3M7Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6ZGVsZXRlQ29uZmlncyhDb25m
aWdEZXNjICpjb25maWdEZXNjTGlzdCkKK3sKKyAgICBkZWxldGUgW10gKGNvbmZpZ0Rlc2NMaXN0
KTsKK30KKwordm9pZCBSZW5kZXJlcjExOjpzeW5jKGJvb2wgYmxvY2spCit7CisgICAgaWYgKGJs
b2NrKQorICAgIHsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQ7CisKKyAgICAgICAgaWYgKCFtU3lu
Y1F1ZXJ5KQorICAgICAgICB7CisgICAgICAgICAgICBEM0QxMV9RVUVSWV9ERVNDIHF1ZXJ5RGVz
YzsKKyAgICAgICAgICAgIHF1ZXJ5RGVzYy5RdWVyeSA9IEQzRDExX1FVRVJZX0VWRU5UOworICAg
ICAgICAgICAgcXVlcnlEZXNjLk1pc2NGbGFncyA9IDA7CisKKyAgICAgICAgICAgIHJlc3VsdCA9
IG1EZXZpY2UtPkNyZWF0ZVF1ZXJ5KCZxdWVyeURlc2MsICZtU3luY1F1ZXJ5KTsKKyAgICAgICAg
ICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIH0KKworICAgICAgICBtRGV2
aWNlQ29udGV4dC0+RW5kKG1TeW5jUXVlcnkpOworICAgICAgICBtRGV2aWNlQ29udGV4dC0+Rmx1
c2goKTsKKworICAgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgICByZXN1bHQgPSBtRGV2
aWNlQ29udGV4dC0+R2V0RGF0YShtU3luY1F1ZXJ5LCBOVUxMLCAwLCBEM0QxMV9BU1lOQ19HRVRE
QVRBX0RPTk9URkxVU0gpOworCisgICAgICAgICAgICAvLyBLZWVwIHBvbGxpbmcsIGJ1dCBhbGxv
dyBvdGhlciB0aHJlYWRzIHRvIGRvIHNvbWV0aGluZyB1c2VmdWwgZmlyc3QKKyAgICAgICAgICAg
IFNsZWVwKDApOworCisgICAgICAgICAgICBpZiAodGVzdERldmljZUxvc3QodHJ1ZSkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHdoaWxlIChyZXN1bHQgPT0gU19GQUxTRSk7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5GbHVzaCgpOworICAgIH0KK30KKworU3dh
cENoYWluICpSZW5kZXJlcjExOjpjcmVhdGVTd2FwQ2hhaW4oSFdORCB3aW5kb3csIEhBTkRMRSBz
aGFyZUhhbmRsZSwgR0xlbnVtIGJhY2tCdWZmZXJGb3JtYXQsIEdMZW51bSBkZXB0aEJ1ZmZlckZv
cm1hdCkKK3sKKyAgICByZXR1cm4gbmV3IHJ4OjpTd2FwQ2hhaW4xMSh0aGlzLCB3aW5kb3csIHNo
YXJlSGFuZGxlLCBiYWNrQnVmZmVyRm9ybWF0LCBkZXB0aEJ1ZmZlckZvcm1hdCk7Cit9CisKK3Zv
aWQgUmVuZGVyZXIxMTo6c2V0U2FtcGxlclN0YXRlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQg
aW5kZXgsIGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkKK3sKKyAgICBpZiAo
dHlwZSA9PSBnbDo6U0FNUExFUl9QSVhFTCkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA8IDAg
fHwgaW5kZXggPj0gZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKQorICAgICAgICB7CisgICAg
ICAgICAgICBFUlIoIlBpeGVsIHNoYWRlciBzYW1wbGVyIGluZGV4ICVpIGlzIG5vdCB2YWxpZC4i
LCBpbmRleCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bUZvcmNlU2V0UGl4ZWxTYW1wbGVyU3RhdGVzW2luZGV4XSB8fCBtZW1jbXAoJnNhbXBsZXJTdGF0
ZSwgJm1DdXJQaXhlbFNhbXBsZXJTdGF0ZXNbaW5kZXhdLCBzaXplb2YoZ2w6OlNhbXBsZXJTdGF0
ZSkpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIElEM0QxMVNhbXBsZXJTdGF0ZSAqZHhT
YW1wbGVyU3RhdGUgPSBtU3RhdGVDYWNoZS5nZXRTYW1wbGVyU3RhdGUoc2FtcGxlclN0YXRlKTsK
KworICAgICAgICAgICAgaWYgKCFkeFNhbXBsZXJTdGF0ZSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBFUlIoIk5VTEwgc2FtcGxlciBzdGF0ZSByZXR1cm5lZCBieSBSZW5kZXJTdGF0
ZUNhY2hlOjpnZXRTYW1wbGVyU3RhdGUsIHNldHRpbmcgdGhlIGRlZmF1bHQiCisgICAgICAgICAg
ICAgICAgICAgICJzYW1wbGVyIHN0YXRlIGZvciBwaXhlbCBzaGFkZXJzIGF0IHNsb3QgJWkuIiwg
aW5kZXgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+UFNT
ZXRTYW1wbGVycyhpbmRleCwgMSwgJmR4U2FtcGxlclN0YXRlKTsKKworICAgICAgICAgICAgbUN1
clBpeGVsU2FtcGxlclN0YXRlc1tpbmRleF0gPSBzYW1wbGVyU3RhdGU7CisgICAgICAgIH0KKwor
ICAgICAgICBtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0ZXNbaW5kZXhdID0gZmFsc2U7CisgICAg
fQorICAgIGVsc2UgaWYgKHR5cGUgPT0gZ2w6OlNBTVBMRVJfVkVSVEVYKQorICAgIHsKKyAgICAg
ICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSAoaW50KWdldE1heFZlcnRleFRleHR1cmVJbWFn
ZVVuaXRzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiVmVydGV4IHNoYWRlciBzYW1w
bGVyIGluZGV4ICVpIGlzIG5vdCB2YWxpZC4iLCBpbmRleCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBpZiAobUZvcmNlU2V0VmVydGV4U2FtcGxlclN0YXRlc1tp
bmRleF0gfHwgbWVtY21wKCZzYW1wbGVyU3RhdGUsICZtQ3VyVmVydGV4U2FtcGxlclN0YXRlc1tp
bmRleF0sIHNpemVvZihnbDo6U2FtcGxlclN0YXRlKSkgIT0gMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgSUQzRDExU2FtcGxlclN0YXRlICpkeFNhbXBsZXJTdGF0ZSA9IG1TdGF0ZUNhY2hlLmdl
dFNhbXBsZXJTdGF0ZShzYW1wbGVyU3RhdGUpOworCisgICAgICAgICAgICBpZiAoIWR4U2FtcGxl
clN0YXRlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEVSUigiTlVMTCBzYW1wbGVy
IHN0YXRlIHJldHVybmVkIGJ5IFJlbmRlclN0YXRlQ2FjaGU6OmdldFNhbXBsZXJTdGF0ZSwgc2V0
dGluZyB0aGUgZGVmYXVsdCIKKyAgICAgICAgICAgICAgICAgICAgInNhbXBsZXIgc3RhdGUgZm9y
IHZlcnRleCBzaGFkZXJzIGF0IHNsb3QgJWkuIiwgaW5kZXgpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+VlNTZXRTYW1wbGVycyhpbmRleCwgMSwgJmR4U2Ft
cGxlclN0YXRlKTsKKworICAgICAgICAgICAgbUN1clZlcnRleFNhbXBsZXJTdGF0ZXNbaW5kZXhd
ID0gc2FtcGxlclN0YXRlOworICAgICAgICB9CisKKyAgICAgICAgbUZvcmNlU2V0VmVydGV4U2Ft
cGxlclN0YXRlc1tpbmRleF0gPSBmYWxzZTsKKyAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgp
OworfQorCit2b2lkIFJlbmRlcmVyMTE6OnNldFRleHR1cmUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUs
IGludCBpbmRleCwgZ2w6OlRleHR1cmUgKnRleHR1cmUpCit7CisgICAgSUQzRDExU2hhZGVyUmVz
b3VyY2VWaWV3ICp0ZXh0dXJlU1JWID0gTlVMTDsKKyAgICB1bnNpZ25lZCBpbnQgc2VyaWFsID0g
MDsKKyAgICBib29sIGZvcmNlU2V0VGV4dHVyZSA9IGZhbHNlOworCisgICAgaWYgKHRleHR1cmUp
CisgICAgeworICAgICAgICBUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqdGV4U3RvcmFnZSA9IHRl
eHR1cmUtPmdldE5hdGl2ZVRleHR1cmUoKTsKKyAgICAgICAgaWYgKHRleFN0b3JhZ2UpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIFRleHR1cmVTdG9yYWdlMTEgKnN0b3JhZ2UxMSA9IFRleHR1cmVT
dG9yYWdlMTE6Om1ha2VUZXh0dXJlU3RvcmFnZTExKHRleFN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0
YW5jZSgpKTsKKyAgICAgICAgICAgIHRleHR1cmVTUlYgPSBzdG9yYWdlMTEtPmdldFNSVigpOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgd2UgZ2V0IE5VTEwgYmFjayBmcm9tIGdldFNSViBo
ZXJlLCBzb21ldGhpbmcgd2VudCB3cm9uZyBpbiB0aGUgdGV4dHVyZSBjbGFzcyBhbmQgd2UncmUg
dW5leHBlY3RlZGx5CisgICAgICAgIC8vIG1pc3NpbmcgdGhlIHNoYWRlciByZXNvdXJjZSB2aWV3
CisgICAgICAgIEFTU0VSVCh0ZXh0dXJlU1JWICE9IE5VTEwpOworCisgICAgICAgIHNlcmlhbCA9
IHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKTsKKyAgICAgICAgZm9yY2VTZXRUZXh0dXJlID0g
dGV4dHVyZS0+aGFzRGlydHlJbWFnZXMoKTsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSBnbDo6
U0FNUExFUl9QSVhFTCkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0g
Z2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIo
IlBpeGVsIHNoYWRlciBzYW1wbGVyIGluZGV4ICVpIGlzIG5vdCB2YWxpZC4iLCBpbmRleCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoZm9yY2VTZXRUZXh0
dXJlIHx8IG1DdXJQaXhlbFRleHR1cmVTZXJpYWxzW2luZGV4XSAhPSBzZXJpYWwpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlclJlc291cmNlcyhpbmRl
eCwgMSwgJnRleHR1cmVTUlYpOworICAgICAgICB9CisKKyAgICAgICAgbUN1clBpeGVsVGV4dHVy
ZVNlcmlhbHNbaW5kZXhdID0gc2VyaWFsOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlID09IGds
OjpTQU1QTEVSX1ZFUlRFWCkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXgg
Pj0gKGludClnZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpKQorICAgICAgICB7CisgICAg
ICAgICAgICBFUlIoIlZlcnRleCBzaGFkZXIgc2FtcGxlciBpbmRleCAlaSBpcyBub3QgdmFsaWQu
IiwgaW5kZXgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGZvcmNlU2V0VGV4dHVyZSB8fCBtQ3VyVmVydGV4VGV4dHVyZVNlcmlhbHNbaW5kZXhdICE9IHNl
cmlhbCkKKyAgICAgICAgeworICAgICAgICAgICAgbURldmljZUNvbnRleHQtPlZTU2V0U2hhZGVy
UmVzb3VyY2VzKGluZGV4LCAxLCAmdGV4dHVyZVNSVik7CisgICAgICAgIH0KKworICAgICAgICBt
Q3VyVmVydGV4VGV4dHVyZVNlcmlhbHNbaW5kZXhdID0gc2VyaWFsOworICAgIH0KKyAgICBlbHNl
IFVOUkVBQ0hBQkxFKCk7Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6c2V0UmFzdGVyaXplclN0YXRl
KGNvbnN0IGdsOjpSYXN0ZXJpemVyU3RhdGUgJnJhc3RlclN0YXRlKQoreworICAgIGlmIChtRm9y
Y2VTZXRSYXN0ZXJTdGF0ZSB8fCBtZW1jbXAoJnJhc3RlclN0YXRlLCAmbUN1clJhc3RlclN0YXRl
LCBzaXplb2YoZ2w6OlJhc3Rlcml6ZXJTdGF0ZSkpICE9IDApCisgICAgeworICAgICAgICBJRDNE
MTFSYXN0ZXJpemVyU3RhdGUgKmR4UmFzdGVyU3RhdGUgPSBtU3RhdGVDYWNoZS5nZXRSYXN0ZXJp
emVyU3RhdGUocmFzdGVyU3RhdGUsIG1TY2lzc29yRW5hYmxlZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1DdXJEZXB0aFNpemUpOworICAgICAgICBpZiAoIWR4UmFzdGVyU3RhdGUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIEVSUigiTlVMTCByYXN0ZXJpemVyIHN0YXRlIHJldHVybmVkIGJ5IFJl
bmRlclN0YXRlQ2FjaGU6OmdldFJhc3Rlcml6ZXJTdGF0ZSwgc2V0dGluZyB0aGUgZGVmYXVsdCIK
KyAgICAgICAgICAgICAgICAicmFzdGVyaXplciBzdGF0ZS4iKTsKKyAgICAgICAgfQorCisgICAg
ICAgIG1EZXZpY2VDb250ZXh0LT5SU1NldFN0YXRlKGR4UmFzdGVyU3RhdGUpOworCisgICAgICAg
IG1DdXJSYXN0ZXJTdGF0ZSA9IHJhc3RlclN0YXRlOworICAgIH0KKworICAgIG1Gb3JjZVNldFJh
c3RlclN0YXRlID0gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6c2V0QmxlbmRTdGF0ZShn
bDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRT
dGF0ZSwgY29uc3QgZ2w6OkNvbG9yICZibGVuZENvbG9yLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVNYXNrKQoreworICAgIGlmIChtRm9yY2VTZXRC
bGVuZFN0YXRlIHx8CisgICAgICAgIG1lbWNtcCgmYmxlbmRTdGF0ZSwgJm1DdXJCbGVuZFN0YXRl
LCBzaXplb2YoZ2w6OkJsZW5kU3RhdGUpKSAhPSAwIHx8CisgICAgICAgIG1lbWNtcCgmYmxlbmRD
b2xvciwgJm1DdXJCbGVuZENvbG9yLCBzaXplb2YoZ2w6OkNvbG9yKSkgIT0gMCB8fAorICAgICAg
ICBzYW1wbGVNYXNrICE9IG1DdXJTYW1wbGVNYXNrKQorICAgIHsKKyAgICAgICAgSUQzRDExQmxl
bmRTdGF0ZSAqZHhCbGVuZFN0YXRlID0gbVN0YXRlQ2FjaGUuZ2V0QmxlbmRTdGF0ZShmcmFtZWJ1
ZmZlciwgYmxlbmRTdGF0ZSk7CisgICAgICAgIGlmICghZHhCbGVuZFN0YXRlKQorICAgICAgICB7
CisgICAgICAgICAgICBFUlIoIk5VTEwgYmxlbmQgc3RhdGUgcmV0dXJuZWQgYnkgUmVuZGVyU3Rh
dGVDYWNoZTo6Z2V0QmxlbmRTdGF0ZSwgc2V0dGluZyB0aGUgZGVmYXVsdCAiCisgICAgICAgICAg
ICAgICAgImJsZW5kIHN0YXRlLiIpOworICAgICAgICB9CisKKyAgICAgICAgZmxvYXQgYmxlbmRD
b2xvcnNbNF0gPSB7MC4wZn07CisgICAgICAgIGlmIChibGVuZFN0YXRlLnNvdXJjZUJsZW5kUkdC
ICE9IEdMX0NPTlNUQU5UX0FMUEhBICYmIGJsZW5kU3RhdGUuc291cmNlQmxlbmRSR0IgIT0gR0xf
T05FX01JTlVTX0NPTlNUQU5UX0FMUEhBICYmCisgICAgICAgICAgICBibGVuZFN0YXRlLmRlc3RC
bGVuZFJHQiAhPSBHTF9DT05TVEFOVF9BTFBIQSAmJiBibGVuZFN0YXRlLmRlc3RCbGVuZFJHQiAh
PSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJs
ZW5kQ29sb3JzWzBdID0gYmxlbmRDb2xvci5yZWQ7CisgICAgICAgICAgICBibGVuZENvbG9yc1sx
XSA9IGJsZW5kQ29sb3IuZ3JlZW47CisgICAgICAgICAgICBibGVuZENvbG9yc1syXSA9IGJsZW5k
Q29sb3IuYmx1ZTsKKyAgICAgICAgICAgIGJsZW5kQ29sb3JzWzNdID0gYmxlbmRDb2xvci5hbHBo
YTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGJsZW5k
Q29sb3JzWzBdID0gYmxlbmRDb2xvci5hbHBoYTsKKyAgICAgICAgICAgIGJsZW5kQ29sb3JzWzFd
ID0gYmxlbmRDb2xvci5hbHBoYTsKKyAgICAgICAgICAgIGJsZW5kQ29sb3JzWzJdID0gYmxlbmRD
b2xvci5hbHBoYTsKKyAgICAgICAgICAgIGJsZW5kQ29sb3JzWzNdID0gYmxlbmRDb2xvci5hbHBo
YTsKKyAgICAgICAgfQorCisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldEJsZW5kU3RhdGUo
ZHhCbGVuZFN0YXRlLCBibGVuZENvbG9ycywgc2FtcGxlTWFzayk7CisKKyAgICAgICAgbUN1ckJs
ZW5kU3RhdGUgPSBibGVuZFN0YXRlOworICAgICAgICBtQ3VyQmxlbmRDb2xvciA9IGJsZW5kQ29s
b3I7CisgICAgICAgIG1DdXJTYW1wbGVNYXNrID0gc2FtcGxlTWFzazsKKyAgICB9CisKKyAgICBt
Rm9yY2VTZXRCbGVuZFN0YXRlID0gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6c2V0RGVw
dGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZkZXB0aFN0ZW5jaWxT
dGF0ZSwgaW50IHN0ZW5jaWxSZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBzdGVuY2lsQmFja1JlZiwgYm9vbCBmcm9udEZhY2VDQ1cpCit7CisgICAgaWYgKG1G
b3JjZVNldERlcHRoU3RlbmNpbFN0YXRlIHx8CisgICAgICAgIG1lbWNtcCgmZGVwdGhTdGVuY2ls
U3RhdGUsICZtQ3VyRGVwdGhTdGVuY2lsU3RhdGUsIHNpemVvZihnbDo6RGVwdGhTdGVuY2lsU3Rh
dGUpKSAhPSAwIHx8CisgICAgICAgIHN0ZW5jaWxSZWYgIT0gbUN1clN0ZW5jaWxSZWYgfHwgc3Rl
bmNpbEJhY2tSZWYgIT0gbUN1clN0ZW5jaWxCYWNrUmVmKQorICAgIHsKKyAgICAgICAgaWYgKGRl
cHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sgIT0gZGVwdGhTdGVuY2lsU3RhdGUuc3Rl
bmNpbEJhY2tXcml0ZW1hc2sgfHwKKyAgICAgICAgICAgIHN0ZW5jaWxSZWYgIT0gc3RlbmNpbEJh
Y2tSZWYgfHwKKyAgICAgICAgICAgIGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxNYXNrICE9IGRl
cHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxCYWNrTWFzaykKKyAgICAgICAgeworICAgICAgICAgICAg
RVJSKCJTZXBhcmF0ZSBmcm9udC9iYWNrIHN0ZW5jaWwgd3JpdGVtYXNrcywgcmVmZXJlbmNlIHZh
bHVlcywgb3Igc3RlbmNpbCBtYXNrIHZhbHVlcyBhcmUgIgorICAgICAgICAgICAgICAgICJpbnZh
bGlkIHVuZGVyIFdlYkdMLiIpOworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgIH0KKworICAgICAgICBJRDNEMTFEZXB0aFN0ZW5jaWxT
dGF0ZSAqZHhEZXB0aFN0ZW5jaWxTdGF0ZSA9IG1TdGF0ZUNhY2hlLmdldERlcHRoU3RlbmNpbFN0
YXRlKGRlcHRoU3RlbmNpbFN0YXRlKTsKKyAgICAgICAgaWYgKCFkeERlcHRoU3RlbmNpbFN0YXRl
KQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIk5VTEwgZGVwdGggc3RlbmNpbCBzdGF0ZSBy
ZXR1cm5lZCBieSBSZW5kZXJTdGF0ZUNhY2hlOjpnZXREZXB0aFN0ZW5jaWxTdGF0ZSwgIgorICAg
ICAgICAgICAgICAgICJzZXR0aW5nIHRoZSBkZWZhdWx0IGRlcHRoIHN0ZW5jaWwgc3RhdGUuIik7
CisgICAgICAgIH0KKworICAgICAgICBtRGV2aWNlQ29udGV4dC0+T01TZXREZXB0aFN0ZW5jaWxT
dGF0ZShkeERlcHRoU3RlbmNpbFN0YXRlLCBzdGF0aWNfY2FzdDxVSU5UPihzdGVuY2lsUmVmKSk7
CisKKyAgICAgICAgbUN1ckRlcHRoU3RlbmNpbFN0YXRlID0gZGVwdGhTdGVuY2lsU3RhdGU7Cisg
ICAgICAgIG1DdXJTdGVuY2lsUmVmID0gc3RlbmNpbFJlZjsKKyAgICAgICAgbUN1clN0ZW5jaWxC
YWNrUmVmID0gc3RlbmNpbEJhY2tSZWY7CisgICAgfQorCisgICAgbUZvcmNlU2V0RGVwdGhTdGVu
Y2lsU3RhdGUgPSBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJlcjExOjpzZXRTY2lzc29yUmVjdGFu
Z2xlKGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNjaXNzb3IsIGJvb2wgZW5hYmxlZCkKK3sKKyAgICBp
ZiAobUZvcmNlU2V0U2Npc3NvciB8fCBtZW1jbXAoJnNjaXNzb3IsICZtQ3VyU2Npc3Nvciwgc2l6
ZW9mKGdsOjpSZWN0YW5nbGUpKSAhPSAwIHx8CisgICAgICAgIGVuYWJsZWQgIT0gbVNjaXNzb3JF
bmFibGVkKQorICAgIHsKKyAgICAgICAgaWYgKGVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEQzRDExX1JFQ1QgcmVjdDsKKyAgICAgICAgICAgIHJlY3QubGVmdCA9IHN0ZDo6bWF4KDAs
IHNjaXNzb3IueCk7CisgICAgICAgICAgICByZWN0LnRvcCA9IHN0ZDo6bWF4KDAsIHNjaXNzb3Iu
eSk7CisgICAgICAgICAgICByZWN0LnJpZ2h0ID0gc2Npc3Nvci54ICsgc3RkOjptYXgoMCwgc2Np
c3Nvci53aWR0aCk7CisgICAgICAgICAgICByZWN0LmJvdHRvbSA9IHNjaXNzb3IueSArIHN0ZDo6
bWF4KDAsIHNjaXNzb3IuaGVpZ2h0KTsKKworICAgICAgICAgICAgbURldmljZUNvbnRleHQtPlJT
U2V0U2Npc3NvclJlY3RzKDEsICZyZWN0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlbmFi
bGVkICE9IG1TY2lzc29yRW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAgbUZvcmNlU2V0
UmFzdGVyU3RhdGUgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgbUN1clNjaXNzb3IgPSBz
Y2lzc29yOworICAgICAgICBtU2Npc3NvckVuYWJsZWQgPSBlbmFibGVkOworICAgIH0KKworICAg
IG1Gb3JjZVNldFNjaXNzb3IgPSBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJlcjExOjpzZXRWaWV3
cG9ydChjb25zdCBnbDo6UmVjdGFuZ2xlICZ2aWV3cG9ydCwgZmxvYXQgek5lYXIsIGZsb2F0IHpG
YXIsIEdMZW51bSBkcmF3TW9kZSwgR0xlbnVtIGZyb250RmFjZSwgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgaWdub3JlVmlld3BvcnQpCit7CisgICAgZ2w6OlJlY3RhbmdsZSBh
Y3R1YWxWaWV3cG9ydCA9IHZpZXdwb3J0OworICAgIGZsb2F0IGFjdHVhbFpOZWFyID0gZ2w6OmNs
YW1wMDEoek5lYXIpOworICAgIGZsb2F0IGFjdHVhbFpGYXIgPSBnbDo6Y2xhbXAwMSh6RmFyKTsK
KyAgICBpZiAoaWdub3JlVmlld3BvcnQpCisgICAgeworICAgICAgICBhY3R1YWxWaWV3cG9ydC54
ID0gMDsKKyAgICAgICAgYWN0dWFsVmlld3BvcnQueSA9IDA7CisgICAgICAgIGFjdHVhbFZpZXdw
b3J0LndpZHRoID0gbVJlbmRlclRhcmdldERlc2Mud2lkdGg7CisgICAgICAgIGFjdHVhbFZpZXdw
b3J0LmhlaWdodCA9IG1SZW5kZXJUYXJnZXREZXNjLmhlaWdodDsKKyAgICAgICAgYWN0dWFsWk5l
YXIgPSAwLjBmOworICAgICAgICBhY3R1YWxaRmFyID0gMS4wZjsKKyAgICB9CisKKyAgICAvLyBH
ZXQgRDNEIHZpZXdwb3J0IGJvdW5kcywgd2hpY2ggZGVwZW5kcyBvbiB0aGUgZmVhdHVyZSBsZXZl
bAorICAgIGNvbnN0IFJhbmdlJiB2aWV3cG9ydEJvdW5kcyA9IGdldFZpZXdwb3J0Qm91bmRzKCk7
CisKKyAgICAvLyBDbGFtcCB3aWR0aCBhbmQgaGVpZ2h0IGZpcnN0IHRvIHRoZSBnbCBtYXhpbXVt
LCB0aGVuIGNsYW1wIGZ1cnRoZXIgaWYgd2UgZXh0ZW5kIHBhc3QgdGhlIEQzRCBtYXhpbXVtIGJv
dW5kcworICAgIEQzRDExX1ZJRVdQT1JUIGR4Vmlld3BvcnQ7CisgICAgZHhWaWV3cG9ydC5Ub3BM
ZWZ0WCA9IGdsOjpjbGFtcChhY3R1YWxWaWV3cG9ydC54LCB2aWV3cG9ydEJvdW5kcy5zdGFydCwg
dmlld3BvcnRCb3VuZHMuZW5kKTsKKyAgICBkeFZpZXdwb3J0LlRvcExlZnRZID0gZ2w6OmNsYW1w
KGFjdHVhbFZpZXdwb3J0LnksIHZpZXdwb3J0Qm91bmRzLnN0YXJ0LCB2aWV3cG9ydEJvdW5kcy5l
bmQpOworICAgIGR4Vmlld3BvcnQuV2lkdGggPSBnbDo6Y2xhbXAoYWN0dWFsVmlld3BvcnQud2lk
dGgsIDAsIGdldE1heFZpZXdwb3J0RGltZW5zaW9uKCkpOworICAgIGR4Vmlld3BvcnQuSGVpZ2h0
ID0gZ2w6OmNsYW1wKGFjdHVhbFZpZXdwb3J0LmhlaWdodCwgMCwgZ2V0TWF4Vmlld3BvcnREaW1l
bnNpb24oKSk7CisgICAgZHhWaWV3cG9ydC5XaWR0aCA9IHN0ZDo6bWluKChpbnQpZHhWaWV3cG9y
dC5XaWR0aCwgdmlld3BvcnRCb3VuZHMuZW5kIC0gc3RhdGljX2Nhc3Q8aW50PihkeFZpZXdwb3J0
LlRvcExlZnRYKSk7CisgICAgZHhWaWV3cG9ydC5IZWlnaHQgPSBzdGQ6Om1pbigoaW50KWR4Vmll
d3BvcnQuSGVpZ2h0LCB2aWV3cG9ydEJvdW5kcy5lbmQgLSBzdGF0aWNfY2FzdDxpbnQ+KGR4Vmll
d3BvcnQuVG9wTGVmdFkpKTsKKyAgICBkeFZpZXdwb3J0Lk1pbkRlcHRoID0gYWN0dWFsWk5lYXI7
CisgICAgZHhWaWV3cG9ydC5NYXhEZXB0aCA9IGFjdHVhbFpGYXI7CisKKyAgICBpZiAoZHhWaWV3
cG9ydC5XaWR0aCA8PSAwIHx8IGR4Vmlld3BvcnQuSGVpZ2h0IDw9IDApCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7ICAgLy8gTm90aGluZyB0byByZW5kZXIKKyAgICB9CisKKyAgICBib29s
IHZpZXdwb3J0Q2hhbmdlZCA9IG1Gb3JjZVNldFZpZXdwb3J0IHx8IG1lbWNtcCgmYWN0dWFsVmll
d3BvcnQsICZtQ3VyVmlld3BvcnQsIHNpemVvZihnbDo6UmVjdGFuZ2xlKSkgIT0gMCB8fAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsWk5lYXIgIT0gbUN1ck5lYXIgfHwgYWN0dWFs
WkZhciAhPSBtQ3VyRmFyOworCisgICAgaWYgKHZpZXdwb3J0Q2hhbmdlZCkKKyAgICB7CisgICAg
ICAgIG1EZXZpY2VDb250ZXh0LT5SU1NldFZpZXdwb3J0cygxLCAmZHhWaWV3cG9ydCk7CisKKyAg
ICAgICAgbUN1clZpZXdwb3J0ID0gYWN0dWFsVmlld3BvcnQ7CisgICAgICAgIG1DdXJOZWFyID0g
YWN0dWFsWk5lYXI7CisgICAgICAgIG1DdXJGYXIgPSBhY3R1YWxaRmFyOworCisgICAgICAgIG1Q
aXhlbENvbnN0YW50cy52aWV3Q29vcmRzWzBdID0gYWN0dWFsVmlld3BvcnQud2lkdGggICogMC41
ZjsKKyAgICAgICAgbVBpeGVsQ29uc3RhbnRzLnZpZXdDb29yZHNbMV0gPSBhY3R1YWxWaWV3cG9y
dC5oZWlnaHQgKiAwLjVmOworICAgICAgICBtUGl4ZWxDb25zdGFudHMudmlld0Nvb3Jkc1syXSA9
IGFjdHVhbFZpZXdwb3J0LnggKyAoYWN0dWFsVmlld3BvcnQud2lkdGggICogMC41Zik7CisgICAg
ICAgIG1QaXhlbENvbnN0YW50cy52aWV3Q29vcmRzWzNdID0gYWN0dWFsVmlld3BvcnQueSArIChh
Y3R1YWxWaWV3cG9ydC5oZWlnaHQgKiAwLjVmKTsKKworICAgICAgICBtUGl4ZWxDb25zdGFudHMu
ZGVwdGhGcm9udFswXSA9IChhY3R1YWxaRmFyIC0gYWN0dWFsWk5lYXIpICogMC41ZjsKKyAgICAg
ICAgbVBpeGVsQ29uc3RhbnRzLmRlcHRoRnJvbnRbMV0gPSAoYWN0dWFsWk5lYXIgKyBhY3R1YWxa
RmFyKSAqIDAuNWY7CisKKyAgICAgICAgbVZlcnRleENvbnN0YW50cy5kZXB0aFJhbmdlWzBdID0g
YWN0dWFsWk5lYXI7CisgICAgICAgIG1WZXJ0ZXhDb25zdGFudHMuZGVwdGhSYW5nZVsxXSA9IGFj
dHVhbFpGYXI7CisgICAgICAgIG1WZXJ0ZXhDb25zdGFudHMuZGVwdGhSYW5nZVsyXSA9IGFjdHVh
bFpGYXIgLSBhY3R1YWxaTmVhcjsKKworICAgICAgICBtUGl4ZWxDb25zdGFudHMuZGVwdGhSYW5n
ZVswXSA9IGFjdHVhbFpOZWFyOworICAgICAgICBtUGl4ZWxDb25zdGFudHMuZGVwdGhSYW5nZVsx
XSA9IGFjdHVhbFpGYXI7CisgICAgICAgIG1QaXhlbENvbnN0YW50cy5kZXB0aFJhbmdlWzJdID0g
YWN0dWFsWkZhciAtIGFjdHVhbFpOZWFyOworICAgIH0KKworICAgIG1Gb3JjZVNldFZpZXdwb3J0
ID0gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6YXBwbHlQ
cmltaXRpdmVUeXBlKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50KQoreworICAgIEQzRDExX1BS
SU1JVElWRV9UT1BPTE9HWSBwcmltaXRpdmVUb3BvbG9neSA9IEQzRF9QUklNSVRJVkVfVE9QT0xP
R1lfVU5ERUZJTkVEOworCisgICAgR0xzaXplaSBtaW5Db3VudCA9IDA7CisKKyAgICBzd2l0Y2gg
KG1vZGUpCisgICAgeworICAgICAgY2FzZSBHTF9QT0lOVFM6ICAgICAgICAgcHJpbWl0aXZlVG9w
b2xvZ3kgPSBEM0QxMV9QUklNSVRJVkVfVE9QT0xPR1lfUE9JTlRMSVNUOyAgIG1pbkNvdW50ID0g
MTsgYnJlYWs7CisgICAgICBjYXNlIEdMX0xJTkVTOiAgICAgICAgICBwcmltaXRpdmVUb3BvbG9n
eSA9IEQzRF9QUklNSVRJVkVfVE9QT0xPR1lfTElORUxJU1Q7ICAgICAgbWluQ291bnQgPSAyOyBi
cmVhazsKKyAgICAgIGNhc2UgR0xfTElORV9MT09QOiAgICAgIHByaW1pdGl2ZVRvcG9sb2d5ID0g
RDNEX1BSSU1JVElWRV9UT1BPTE9HWV9MSU5FU1RSSVA7ICAgICBtaW5Db3VudCA9IDI7IGJyZWFr
OworICAgICAgY2FzZSBHTF9MSU5FX1NUUklQOiAgICAgcHJpbWl0aXZlVG9wb2xvZ3kgPSBEM0Rf
UFJJTUlUSVZFX1RPUE9MT0dZX0xJTkVTVFJJUDsgICAgIG1pbkNvdW50ID0gMjsgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX1RSSUFOR0xFUzogICAgICBwcmltaXRpdmVUb3BvbG9neSA9IEQzRF9QUklN
SVRJVkVfVE9QT0xPR1lfVFJJQU5HTEVMSVNUOyAgbWluQ291bnQgPSAzOyBicmVhazsKKyAgICAg
IGNhc2UgR0xfVFJJQU5HTEVfU1RSSVA6IHByaW1pdGl2ZVRvcG9sb2d5ID0gRDNEX1BSSU1JVElW
RV9UT1BPTE9HWV9UUklBTkdMRVNUUklQOyBtaW5Db3VudCA9IDM7IGJyZWFrOworICAgICAgICAg
IC8vIGVtdWxhdGUgZmFucyB2aWEgcmV3cml0aW5nIGluZGV4IGJ1ZmZlcgorICAgICAgY2FzZSBH
TF9UUklBTkdMRV9GQU46ICAgcHJpbWl0aXZlVG9wb2xvZ3kgPSBEM0RfUFJJTUlUSVZFX1RPUE9M
T0dZX1RSSUFOR0xFTElTVDsgIG1pbkNvdW50ID0gMzsgYnJlYWs7CisgICAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgZmFsc2UpOworICAgIH0K
KworICAgIGlmIChwcmltaXRpdmVUb3BvbG9neSAhPSBtQ3VycmVudFByaW1pdGl2ZVRvcG9sb2d5
KQorICAgIHsKKyAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0UHJpbWl0aXZlVG9wb2xvZ3ko
cHJpbWl0aXZlVG9wb2xvZ3kpOworICAgICAgICBtQ3VycmVudFByaW1pdGl2ZVRvcG9sb2d5ID0g
cHJpbWl0aXZlVG9wb2xvZ3k7CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50ID49IG1pbkNvdW50
OworfQorCitib29sIFJlbmRlcmVyMTE6OmFwcGx5UmVuZGVyVGFyZ2V0KGdsOjpGcmFtZWJ1ZmZl
ciAqZnJhbWVidWZmZXIpCit7CisgICAgLy8gR2V0IHRoZSBjb2xvciByZW5kZXIgYnVmZmVyIGFu
ZCBzZXJpYWwKKyAgICAvLyBBbHNvIGV4dHJhY3QgdGhlIHJlbmRlciB0YXJnZXQgZGltZW5zaW9u
cyBhbmQgdmlldworICAgIHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRXaWR0aCA9IDA7CisgICAg
dW5zaWduZWQgaW50IHJlbmRlclRhcmdldEhlaWdodCA9IDA7CisgICAgR0xlbnVtIHJlbmRlclRh
cmdldEZvcm1hdCA9IDA7CisgICAgdW5zaWduZWQgaW50IHJlbmRlclRhcmdldFNlcmlhbHNbZ2w6
OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlNdID0gezB9OworICAgIElEM0QxMVJlbmRl
clRhcmdldFZpZXcqIGZyYW1lYnVmZmVyUlRWc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0RSQVdf
QlVGRkVSU10gPSB7TlVMTH07CisgICAgYm9vbCBtaXNzaW5nQ29sb3JSZW5kZXJUYXJnZXQgPSB0
cnVlOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gMDsgY29sb3JB
dHRhY2htZW50IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IGNvbG9yQXR0
YWNobWVudCsrKQorICAgIHsKKyAgICAgICAgY29uc3QgR0xlbnVtIGRyYXdCdWZmZXJTdGF0ZSA9
IGZyYW1lYnVmZmVyLT5nZXREcmF3QnVmZmVyU3RhdGUoY29sb3JBdHRhY2htZW50KTsKKworICAg
ICAgICBpZiAoZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlwZShjb2xvckF0dGFjaG1lbnQp
ICE9IEdMX05PTkUgJiYgZHJhd0J1ZmZlclN0YXRlICE9IEdMX05PTkUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIC8vIHRoZSBkcmF3IGJ1ZmZlciBtdXN0IGJlIGVpdGhlciAibm9uZSIsICJiYWNr
IiBmb3IgdGhlIGRlZmF1bHQgYnVmZmVyIG9yIHRoZSBzYW1lIGluZGV4IGFzIHRoaXMgY29sb3Ig
KGluIG9yZGVyKQorICAgICAgICAgICAgQVNTRVJUKGRyYXdCdWZmZXJTdGF0ZSA9PSBHTF9CQUNL
IHx8IGRyYXdCdWZmZXJTdGF0ZSA9PSAoR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUICsgY29sb3JB
dHRhY2htZW50KSk7CisKKyAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVy
ID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKGNvbG9yQXR0YWNobWVudCk7CisKKyAgICAg
ICAgICAgIGlmICghY29sb3JidWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
RVJSKCJyZW5kZXIgdGFyZ2V0IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBj
aGVjayBmb3IgemVyby1zaXplZCBkZWZhdWx0IGZyYW1lYnVmZmVyLCB3aGljaCBpcyBhIHNwZWNp
YWwgY2FzZS4KKyAgICAgICAgICAgIC8vIGluIHRoaXMgY2FzZSB3ZSBkbyBub3Qgd2lzaCB0byBt
b2RpZnkgYW55IHN0YXRlIGFuZCBqdXN0IHNpbGVudGx5IHJldHVybiBmYWxzZS4KKyAgICAgICAg
ICAgIC8vIHRoaXMgd2lsbCBub3QgcmVwb3J0IGFueSBnbCBlcnJvciBidXQgd2lsbCBjYXVzZSB0
aGUgY2FsbGluZyBtZXRob2QgdG8gcmV0dXJuLgorICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVy
LT5nZXRXaWR0aCgpID09IDAgfHwgY29sb3JidWZmZXItPmdldEhlaWdodCgpID09IDApCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICByZW5kZXJUYXJnZXRTZXJpYWxzW2NvbG9yQXR0YWNobWVudF0gPSBjb2xv
cmJ1ZmZlci0+Z2V0U2VyaWFsKCk7CisKKyAgICAgICAgICAgIC8vIEV4dHJhY3QgdGhlIHJlbmRl
ciB0YXJnZXQgZGltZW5zaW9ucyBhbmQgdmlldworICAgICAgICAgICAgUmVuZGVyVGFyZ2V0MTEg
KnJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoY29sb3Ji
dWZmZXItPmdldFJlbmRlclRhcmdldCgpKTsKKyAgICAgICAgICAgIGlmICghcmVuZGVyVGFyZ2V0
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEVSUigicmVuZGVyIHRhcmdldCBwb2lu
dGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZnJhbWVidWZmZXJSVFZzW2NvbG9yQXR0YWNo
bWVudF0gPSByZW5kZXJUYXJnZXQtPmdldFJlbmRlclRhcmdldFZpZXcoKTsKKyAgICAgICAgICAg
IGlmICghZnJhbWVidWZmZXJSVFZzW2NvbG9yQXR0YWNobWVudF0pCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHZpZXcgcG9pbnRlciB1bmV4cGVjdGVk
bHkgbnVsbC4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChtaXNzaW5nQ29sb3JSZW5kZXJUYXJnZXQpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmVuZGVyVGFyZ2V0V2lkdGggPSBjb2xvcmJ1ZmZlci0+Z2V0
V2lkdGgoKTsKKyAgICAgICAgICAgICAgICByZW5kZXJUYXJnZXRIZWlnaHQgPSBjb2xvcmJ1ZmZl
ci0+Z2V0SGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgcmVuZGVyVGFyZ2V0Rm9ybWF0ID0gY29s
b3JidWZmZXItPmdldEFjdHVhbEZvcm1hdCgpOworICAgICAgICAgICAgICAgIG1pc3NpbmdDb2xv
clJlbmRlclRhcmdldCA9IGZhbHNlOworICAgICAgICAgICAgfQorCisjaWZkZWYgX0RFQlVHCisg
ICAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBEZWJ1ZyBTRVRTSEFERVJSRVNPVVJDRVNfSEFa
QVJEIEQzRDExIHdhcm5pbmdzCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB2ZXJ0ZXhT
ZXJpYWxJbmRleCA9IDA7IHZlcnRleFNlcmlhbEluZGV4IDwgZ2w6OklNUExFTUVOVEFUSU9OX01B
WF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgdmVydGV4U2VyaWFsSW5kZXgrKykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29sb3JidWZmZXItPmdldFRleHR1cmVTZXJp
YWwoKSAhPSAwICYmIG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1t2ZXJ0ZXhTZXJpYWxJbmRleF0g
PT0gY29sb3JidWZmZXItPmdldFRleHR1cmVTZXJpYWwoKSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHNldFRleHR1cmUoZ2w6OlNBTVBMRVJfVkVSVEVYLCB2ZXJ0ZXhT
ZXJpYWxJbmRleCwgTlVMTCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBwaXhlbFNlcmlhbEluZGV4ID0gMDsgcGl4ZWxT
ZXJpYWxJbmRleCA8IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgcGl4ZWxTZXJpYWxJbmRl
eCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlci0+Z2V0
VGV4dHVyZVNlcmlhbCgpICE9IDAgJiYgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbcGl4ZWxTZXJp
YWxJbmRleF0gPT0gY29sb3JidWZmZXItPmdldFRleHR1cmVTZXJpYWwoKSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHNldFRleHR1cmUoZ2w6OlNBTVBMRVJfUElYRUws
IHBpeGVsU2VyaWFsSW5kZXgsIE5VTEwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyNlbmRpZgorICAgICAgICB9CisgICAgfQorCisgICAgLy8gR2V0IHRoZSBkZXB0aCBzdGVu
Y2lsIHJlbmRlciBidWZmZXIgYW5kIHNlcmlhbHMKKyAgICBnbDo6UmVuZGVyYnVmZmVyICpkZXB0
aFN0ZW5jaWwgPSBOVUxMOworICAgIHVuc2lnbmVkIGludCBkZXB0aGJ1ZmZlclNlcmlhbCA9IDA7
CisgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxidWZmZXJTZXJpYWwgPSAwOworICAgIGlmIChmcmFt
ZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKKyAgICB7CisgICAgICAg
IGRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOworICAgICAgICBp
ZiAoIWRlcHRoU3RlbmNpbCkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJEZXB0aCBzdGVu
Y2lsIHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7CisgICAgICAgICAgICBTYWZlUmVsZWFz
ZShmcmFtZWJ1ZmZlclJUVnMpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisKKyAgICAgICAgZGVwdGhidWZmZXJTZXJpYWwgPSBkZXB0aFN0ZW5jaWwtPmdldFNlcmlhbCgp
OworICAgIH0KKyAgICBlbHNlIGlmIChmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUo
KSAhPSBHTF9OT05FKQorICAgIHsKKyAgICAgICAgZGVwdGhTdGVuY2lsID0gZnJhbWVidWZmZXIt
PmdldFN0ZW5jaWxidWZmZXIoKTsKKyAgICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpCisgICAgICAg
IHsKKyAgICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBu
dWxsLiIpOworICAgICAgICAgICAgU2FmZVJlbGVhc2UoZnJhbWVidWZmZXJSVFZzKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHN0ZW5jaWxidWZmZXJT
ZXJpYWwgPSBkZXB0aFN0ZW5jaWwtPmdldFNlcmlhbCgpOworICAgIH0KKworICAgIC8vIEV4dHJh
Y3QgdGhlIGRlcHRoIHN0ZW5jaWwgc2l6ZXMgYW5kIHZpZXcKKyAgICB1bnNpZ25lZCBpbnQgZGVw
dGhTaXplID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbFNpemUgPSAwOworICAgIElEM0Qx
MURlcHRoU3RlbmNpbFZpZXcqIGZyYW1lYnVmZmVyRFNWID0gTlVMTDsKKyAgICBpZiAoZGVwdGhT
dGVuY2lsKQorICAgIHsKKyAgICAgICAgUmVuZGVyVGFyZ2V0MTEgKmRlcHRoU3RlbmNpbFJlbmRl
clRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoZGVwdGhTdGVuY2ls
LT5nZXREZXB0aFN0ZW5jaWwoKSk7CisgICAgICAgIGlmICghZGVwdGhTdGVuY2lsUmVuZGVyVGFy
Z2V0KQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoInJlbmRlciB0YXJnZXQgcG9pbnRlciB1
bmV4cGVjdGVkbHkgbnVsbC4iKTsKKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKGZyYW1lYnVmZmVy
UlRWcyk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBm
cmFtZWJ1ZmZlckRTViA9IGRlcHRoU3RlbmNpbFJlbmRlclRhcmdldC0+Z2V0RGVwdGhTdGVuY2ls
VmlldygpOworICAgICAgICBpZiAoIWZyYW1lYnVmZmVyRFNWKQorICAgICAgICB7CisgICAgICAg
ICAgICBFUlIoImRlcHRoIHN0ZW5jaWwgdmlldyBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIp
OworICAgICAgICAgICAgU2FmZVJlbGVhc2UoZnJhbWVidWZmZXJSVFZzKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIHJl
bmRlciBidWZmZXIsIHRoZSB3aWR0aCwgaGVpZ2h0IGFuZCBmb3JtYXQgdmFsdWVzIGNvbWUgZnJv
bQorICAgICAgICAvLyB0aGUgZGVwdGggc3RlbmNpbAorICAgICAgICBpZiAobWlzc2luZ0NvbG9y
UmVuZGVyVGFyZ2V0KQorICAgICAgICB7CisgICAgICAgICAgICByZW5kZXJUYXJnZXRXaWR0aCA9
IGRlcHRoU3RlbmNpbC0+Z2V0V2lkdGgoKTsKKyAgICAgICAgICAgIHJlbmRlclRhcmdldEhlaWdo
dCA9IGRlcHRoU3RlbmNpbC0+Z2V0SGVpZ2h0KCk7CisgICAgICAgICAgICByZW5kZXJUYXJnZXRG
b3JtYXQgPSBkZXB0aFN0ZW5jaWwtPmdldEFjdHVhbEZvcm1hdCgpOworICAgICAgICB9CisKKyAg
ICAgICAgZGVwdGhTaXplID0gZGVwdGhTdGVuY2lsLT5nZXREZXB0aFNpemUoKTsKKyAgICAgICAg
c3RlbmNpbFNpemUgPSBkZXB0aFN0ZW5jaWwtPmdldFN0ZW5jaWxTaXplKCk7CisgICAgfQorCisg
ICAgLy8gQXBwbHkgdGhlIHJlbmRlciB0YXJnZXQgYW5kIGRlcHRoIHN0ZW5jaWwKKyAgICBpZiAo
IW1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgfHwgIW1EZXB0aFN0ZW5jaWxJbml0aWFsaXpl
ZCB8fAorICAgICAgICBtZW1jbXAocmVuZGVyVGFyZ2V0U2VyaWFscywgbUFwcGxpZWRSZW5kZXJU
YXJnZXRTZXJpYWxzLCBzaXplb2YocmVuZGVyVGFyZ2V0U2VyaWFscykpICE9IDAgfHwKKyAgICAg
ICAgZGVwdGhidWZmZXJTZXJpYWwgIT0gbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCB8fAorICAg
ICAgICBzdGVuY2lsYnVmZmVyU2VyaWFsICE9IG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCkK
KyAgICB7CisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldFJlbmRlclRhcmdldHMoZ2V0TWF4
UmVuZGVyVGFyZ2V0cygpLCBmcmFtZWJ1ZmZlclJUVnMsIGZyYW1lYnVmZmVyRFNWKTsKKworICAg
ICAgICBtUmVuZGVyVGFyZ2V0RGVzYy53aWR0aCA9IHJlbmRlclRhcmdldFdpZHRoOworICAgICAg
ICBtUmVuZGVyVGFyZ2V0RGVzYy5oZWlnaHQgPSByZW5kZXJUYXJnZXRIZWlnaHQ7CisgICAgICAg
IG1SZW5kZXJUYXJnZXREZXNjLmZvcm1hdCA9IHJlbmRlclRhcmdldEZvcm1hdDsKKyAgICAgICAg
bUZvcmNlU2V0Vmlld3BvcnQgPSB0cnVlOworICAgICAgICBtRm9yY2VTZXRTY2lzc29yID0gdHJ1
ZTsKKworICAgICAgICBpZiAoIW1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCB8fCBkZXB0aFNpemUg
IT0gbUN1ckRlcHRoU2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbUN1ckRlcHRoU2l6ZSA9
IGRlcHRoU2l6ZTsKKyAgICAgICAgICAgIG1Gb3JjZVNldFJhc3RlclN0YXRlID0gdHJ1ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIG1DdXJTdGVuY2lsU2l6ZSA9IHN0ZW5jaWxTaXplOworCisgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IHJ0SW5kZXggPSAwOyBydEluZGV4IDwgZ2w6OklNUExFTUVO
VEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IHJ0SW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWxzW3J0SW5kZXhdID0gcmVuZGVyVGFyZ2V0U2Vy
aWFsc1tydEluZGV4XTsKKyAgICAgICAgfQorICAgICAgICBtQXBwbGllZERlcHRoYnVmZmVyU2Vy
aWFsID0gZGVwdGhidWZmZXJTZXJpYWw7CisgICAgICAgIG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNl
cmlhbCA9IHN0ZW5jaWxidWZmZXJTZXJpYWw7CisgICAgICAgIG1SZW5kZXJUYXJnZXREZXNjSW5p
dGlhbGl6ZWQgPSB0cnVlOworICAgICAgICBtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgPSB0cnVl
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitHTGVudW0gUmVuZGVyZXIxMTo6YXBw
bHlWZXJ0ZXhCdWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGdsOjpWZXJ0
ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmlidXRlc1tdLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3Vu
dCwgR0xzaXplaSBpbnN0YW5jZXMpCit7CisgICAgVHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRyaWJ1
dGVzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgIEdMZW51bSBlcnIgPSBtVmVydGV4RGF0
YU1hbmFnZXItPnByZXBhcmVWZXJ0ZXhEYXRhKHZlcnRleEF0dHJpYnV0ZXMsIHByb2dyYW1CaW5h
cnksIGZpcnN0LCBjb3VudCwgYXR0cmlidXRlcywgaW5zdGFuY2VzKTsKKyAgICBpZiAoZXJyICE9
IEdMX05PX0VSUk9SKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICBy
ZXR1cm4gbUlucHV0TGF5b3V0Q2FjaGUuYXBwbHlWZXJ0ZXhCdWZmZXJzKGF0dHJpYnV0ZXMsIHBy
b2dyYW1CaW5hcnkpOworfQorCitHTGVudW0gUmVuZGVyZXIxMTo6YXBwbHlJbmRleEJ1ZmZlcihj
b25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgR0xz
aXplaSBjb3VudCwgR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRh
ICppbmRleEluZm8pCit7CisgICAgR0xlbnVtIGVyciA9IG1JbmRleERhdGFNYW5hZ2VyLT5wcmVw
YXJlSW5kZXhEYXRhKHR5cGUsIGNvdW50LCBlbGVtZW50QXJyYXlCdWZmZXIsIGluZGljZXMsIGlu
ZGV4SW5mbyk7CisKKyAgICBpZiAoZXJyID09IEdMX05PX0VSUk9SKQorICAgIHsKKyAgICAgICAg
aWYgKGluZGV4SW5mby0+c3RvcmFnZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGluZGV4
SW5mby0+c2VyaWFsICE9IG1BcHBsaWVkU3RvcmFnZUlCU2VyaWFsIHx8IGluZGV4SW5mby0+c3Rh
cnRPZmZzZXQgIT0gbUFwcGxpZWRJQk9mZnNldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBCdWZmZXJTdG9yYWdlMTEgKnN0b3JhZ2UgPSBCdWZmZXJTdG9yYWdlMTE6Om1ha2VCdWZm
ZXJTdG9yYWdlMTEoaW5kZXhJbmZvLT5zdG9yYWdlKTsKKyAgICAgICAgICAgICAgICBJbmRleEJ1
ZmZlcjExKiBpbmRleEJ1ZmZlciA9IEluZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1ZmZlcjExKGlu
ZGV4SW5mby0+aW5kZXhCdWZmZXIpOworCisgICAgICAgICAgICAgICAgbURldmljZUNvbnRleHQt
PklBU2V0SW5kZXhCdWZmZXIoc3RvcmFnZS0+Z2V0QnVmZmVyKEJVRkZFUl9VU0FHRV9JTkRFWCks
IGluZGV4QnVmZmVyLT5nZXRJbmRleEZvcm1hdCgpLCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0KTsK
KworICAgICAgICAgICAgICAgIG1BcHBsaWVkSUJTZXJpYWwgPSAwOworICAgICAgICAgICAgICAg
IG1BcHBsaWVkU3RvcmFnZUlCU2VyaWFsID0gc3RvcmFnZS0+Z2V0U2VyaWFsKCk7CisgICAgICAg
ICAgICAgICAgbUFwcGxpZWRJQk9mZnNldCA9IGluZGV4SW5mby0+c3RhcnRPZmZzZXQ7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaW5kZXhJbmZvLT5zZXJpYWwg
IT0gbUFwcGxpZWRJQlNlcmlhbCB8fCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0ICE9IG1BcHBsaWVk
SUJPZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEluZGV4QnVmZmVyMTEqIGluZGV4QnVm
ZmVyID0gSW5kZXhCdWZmZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEoaW5kZXhJbmZvLT5pbmRleEJ1
ZmZlcik7CisKKyAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldEluZGV4QnVmZmVyKGlu
ZGV4QnVmZmVyLT5nZXRCdWZmZXIoKSwgaW5kZXhCdWZmZXItPmdldEluZGV4Rm9ybWF0KCksIGlu
ZGV4SW5mby0+c3RhcnRPZmZzZXQpOworCisgICAgICAgICAgICBtQXBwbGllZElCU2VyaWFsID0g
aW5kZXhJbmZvLT5zZXJpYWw7CisgICAgICAgICAgICBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbCA9
IDA7CisgICAgICAgICAgICBtQXBwbGllZElCT2Zmc2V0ID0gaW5kZXhJbmZvLT5zdGFydE9mZnNl
dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBlcnI7Cit9CisKK3ZvaWQgUmVuZGVy
ZXIxMTo6ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0
YW5jZXMpCit7CisgICAgaWYgKG1vZGUgPT0gR0xfTElORV9MT09QKQorICAgIHsKKyAgICAgICAg
ZHJhd0xpbmVMb29wKGNvdW50LCBHTF9OT05FLCBOVUxMLCAwLCBOVUxMKTsKKyAgICB9CisgICAg
ZWxzZSBpZiAobW9kZSA9PSBHTF9UUklBTkdMRV9GQU4pCisgICAgeworICAgICAgICBkcmF3VHJp
YW5nbGVGYW4oY291bnQsIEdMX05PTkUsIE5VTEwsIDAsIE5VTEwsIGluc3RhbmNlcyk7CisgICAg
fQorICAgIGVsc2UgaWYgKGluc3RhbmNlcyA+IDApCisgICAgeworICAgICAgICBtRGV2aWNlQ29u
dGV4dC0+RHJhd0luc3RhbmNlZChjb3VudCwgaW5zdGFuY2VzLCAwLCAwKTsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgbURldmljZUNvbnRleHQtPkRyYXcoY291bnQsIDApOworICAg
IH0KK30KKwordm9pZCBSZW5kZXJlcjExOjpkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6
ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpCdWZmZXIg
KmVsZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZv
LCBHTHNpemVpIGluc3RhbmNlcykKK3sKKyAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCisg
ICAgeworICAgICAgICBkcmF3TGluZUxvb3AoY291bnQsIHR5cGUsIGluZGljZXMsIGluZGV4SW5m
by5taW5JbmRleCwgZWxlbWVudEFycmF5QnVmZmVyKTsKKyAgICB9CisgICAgZWxzZSBpZiAobW9k
ZSA9PSBHTF9UUklBTkdMRV9GQU4pCisgICAgeworICAgICAgICBkcmF3VHJpYW5nbGVGYW4oY291
bnQsIHR5cGUsIGluZGljZXMsIGluZGV4SW5mby5taW5JbmRleCwgZWxlbWVudEFycmF5QnVmZmVy
LCBpbnN0YW5jZXMpOworICAgIH0KKyAgICBlbHNlIGlmIChpbnN0YW5jZXMgPiAwKQorICAgIHsK
KyAgICAgICAgbURldmljZUNvbnRleHQtPkRyYXdJbmRleGVkSW5zdGFuY2VkKGNvdW50LCBpbnN0
YW5jZXMsIDAsIC1zdGF0aWNfY2FzdDxpbnQ+KGluZGV4SW5mby5taW5JbmRleCksIDApOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRGV2aWNlQ29udGV4dC0+RHJhd0luZGV4ZWQo
Y291bnQsIDAsIC1zdGF0aWNfY2FzdDxpbnQ+KGluZGV4SW5mby5taW5JbmRleCkpOworICAgIH0K
K30KKwordm9pZCBSZW5kZXJlcjExOjpkcmF3TGluZUxvb3AoR0xzaXplaSBjb3VudCwgR0xlbnVt
IHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgaW50IG1pbkluZGV4LCBnbDo6QnVmZmVyICpl
bGVtZW50QXJyYXlCdWZmZXIpCit7CisgICAgLy8gR2V0IHRoZSByYXcgaW5kaWNlcyBmb3IgYW4g
aW5kZXhlZCBkcmF3CisgICAgaWYgKHR5cGUgIT0gR0xfTk9ORSAmJiBlbGVtZW50QXJyYXlCdWZm
ZXIpCisgICAgeworICAgICAgICBnbDo6QnVmZmVyICppbmRleEJ1ZmZlciA9IGVsZW1lbnRBcnJh
eUJ1ZmZlcjsKKyAgICAgICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGluZGV4QnVmZmVyLT5n
ZXRTdG9yYWdlKCk7CisgICAgICAgIGludHB0cl90IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KGluZGljZXMpOworICAgICAgICBpbmRpY2VzID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
R0x1Ynl0ZSo+KHN0b3JhZ2UtPmdldERhdGEoKSkgKyBvZmZzZXQ7CisgICAgfQorCisgICAgaWYg
KCFtTGluZUxvb3BJQikKKyAgICB7CisgICAgICAgIG1MaW5lTG9vcElCID0gbmV3IFN0cmVhbWlu
Z0luZGV4QnVmZmVySW50ZXJmYWNlKHRoaXMpOworICAgICAgICBpZiAoIW1MaW5lTG9vcElCLT5y
ZXNlcnZlQnVmZmVyU3BhY2UoSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwgR0xfVU5TSUdORURf
SU5UKSkKKyAgICAgICAgeworICAgICAgICAgICAgZGVsZXRlIG1MaW5lTG9vcElCOworICAgICAg
ICAgICAgbUxpbmVMb29wSUIgPSBOVUxMOworCisgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBj
cmVhdGUgYSAzMi1iaXQgbG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsK
KyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBDaGVja2VkIGJ5IFJlbmRlcmVyMTE6OmFwcGx5UHJpbWl0aXZl
VHlwZQorICAgIEFTU0VSVChjb3VudCA+PSAwKTsKKworICAgIGlmIChzdGF0aWNfY2FzdDx1bnNp
Z25lZCBpbnQ+KGNvdW50KSArIDEgPiAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+
OjptYXgoKSAvIHNpemVvZih1bnNpZ25lZCBpbnQpKSkKKyAgICB7CisgICAgICAgIEVSUigiQ291
bGQgbm90IGNyZWF0ZSBhIDMyLWJpdCBsb29waW5nIGluZGV4IGJ1ZmZlciBmb3IgR0xfTElORV9M
T09QLCB0b28gbWFueSBpbmRpY2VzIHJlcXVpcmVkLiIpOworICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KKworICAgIGNvbnN0IHVuc2lnbmVkIGludCBz
cGFjZU5lZWRlZCA9IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGNvdW50KSArIDEpICogc2l6
ZW9mKHVuc2lnbmVkIGludCk7CisgICAgaWYgKCFtTGluZUxvb3BJQi0+cmVzZXJ2ZUJ1ZmZlclNw
YWNlKHNwYWNlTmVlZGVkLCBHTF9VTlNJR05FRF9JTlQpKQorICAgIHsKKyAgICAgICAgRVJSKCJD
b3VsZCBub3QgcmVzZXJ2ZSBlbm91Z2ggc3BhY2UgaW4gbG9vcGluZyBpbmRleCBidWZmZXIgZm9y
IEdMX0xJTkVfTE9PUC4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICB9CisKKyAgICB2b2lkKiBtYXBwZWRNZW1vcnkgPSBOVUxMOworICAgIHVuc2ln
bmVkIGludCBvZmZzZXQ7CisgICAgaWYgKCFtTGluZUxvb3BJQi0+bWFwQnVmZmVyKHNwYWNlTmVl
ZGVkLCAmbWFwcGVkTWVtb3J5LCAmb2Zmc2V0KSkKKyAgICB7CisgICAgICAgIEVSUigiQ291bGQg
bm90IG1hcCBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKKyAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBpbnQg
KmRhdGEgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KG1hcHBlZE1lbW9yeSk7Cisg
ICAgdW5zaWduZWQgaW50IGluZGV4QnVmZmVyT2Zmc2V0ID0gb2Zmc2V0OworCisgICAgc3dpdGNo
ICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfTk9ORTogICAvLyBOb24taW5kZXhlZCBkcmF3
CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgeworICAg
ICAgICAgICAgZGF0YVtpXSA9IGk7CisgICAgICAgIH0KKyAgICAgICAgZGF0YVtjb3VudF0gPSAw
OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBk
YXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpW2ldOworICAgICAg
ICB9CisgICAgICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGlu
ZGljZXMpWzBdOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6
CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgeworICAg
ICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNlcylb
aV07CisgICAgICAgIH0KKyAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBH
THVzaG9ydCo+KGluZGljZXMpWzBdOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5T
SUdORURfSU5UOgorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihp
bmRpY2VzKVtpXTsKKyAgICAgICAgfQorICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0
PGNvbnN0IEdMdWludCo+KGluZGljZXMpWzBdOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgaWYgKCFtTGluZUxvb3BJQi0+dW5tYXBC
dWZmZXIoKSkKKyAgICB7CisgICAgICAgIEVSUigiQ291bGQgbm90IHVubWFwIGluZGV4IGJ1ZmZl
ciBmb3IgR0xfTElORV9MT09QLiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KKworICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9IG1MaW5lTG9v
cElCLT5nZXRTZXJpYWwoKSB8fCBtQXBwbGllZElCT2Zmc2V0ICE9IGluZGV4QnVmZmVyT2Zmc2V0
KQorICAgIHsKKyAgICAgICAgSW5kZXhCdWZmZXIxMSAqaW5kZXhCdWZmZXIgPSBJbmRleEJ1ZmZl
cjExOjptYWtlSW5kZXhCdWZmZXIxMShtTGluZUxvb3BJQi0+Z2V0SW5kZXhCdWZmZXIoKSk7CisK
KyAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0SW5kZXhCdWZmZXIoaW5kZXhCdWZmZXItPmdl
dEJ1ZmZlcigpLCBpbmRleEJ1ZmZlci0+Z2V0SW5kZXhGb3JtYXQoKSwgaW5kZXhCdWZmZXJPZmZz
ZXQpOworICAgICAgICBtQXBwbGllZElCU2VyaWFsID0gbUxpbmVMb29wSUItPmdldFNlcmlhbCgp
OworICAgICAgICBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbCA9IDA7CisgICAgICAgIG1BcHBsaWVk
SUJPZmZzZXQgPSBpbmRleEJ1ZmZlck9mZnNldDsKKyAgICB9CisKKyAgICBtRGV2aWNlQ29udGV4
dC0+RHJhd0luZGV4ZWQoY291bnQgKyAxLCAwLCAtbWluSW5kZXgpOworfQorCit2b2lkIFJlbmRl
cmVyMTE6OmRyYXdUcmlhbmdsZUZhbihHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3Qg
R0x2b2lkICppbmRpY2VzLCBpbnQgbWluSW5kZXgsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1
ZmZlciwgaW50IGluc3RhbmNlcykKK3sKKyAgICAvLyBHZXQgdGhlIHJhdyBpbmRpY2VzIGZvciBh
biBpbmRleGVkIGRyYXcKKyAgICBpZiAodHlwZSAhPSBHTF9OT05FICYmIGVsZW1lbnRBcnJheUJ1
ZmZlcikKKyAgICB7CisgICAgICAgIGdsOjpCdWZmZXIgKmluZGV4QnVmZmVyID0gZWxlbWVudEFy
cmF5QnVmZmVyOworICAgICAgICBCdWZmZXJTdG9yYWdlICpzdG9yYWdlID0gaW5kZXhCdWZmZXIt
PmdldFN0b3JhZ2UoKTsKKyAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gcmVpbnRlcnByZXRfY2Fz
dDxpbnRwdHJfdD4oaW5kaWNlcyk7CisgICAgICAgIGluZGljZXMgPSBzdGF0aWNfY2FzdDxjb25z
dCBHTHVieXRlKj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSArIG9mZnNldDsKKyAgICB9CisKKyAgICBp
ZiAoIW1UcmlhbmdsZUZhbklCKQorICAgIHsKKyAgICAgICAgbVRyaWFuZ2xlRmFuSUIgPSBuZXcg
U3RyZWFtaW5nSW5kZXhCdWZmZXJJbnRlcmZhY2UodGhpcyk7CisgICAgICAgIGlmICghbVRyaWFu
Z2xlRmFuSUItPnJlc2VydmVCdWZmZXJTcGFjZShJTklUSUFMX0lOREVYX0JVRkZFUl9TSVpFLCBH
TF9VTlNJR05FRF9JTlQpKQorICAgICAgICB7CisgICAgICAgICAgICBkZWxldGUgbVRyaWFuZ2xl
RmFuSUI7CisgICAgICAgICAgICBtVHJpYW5nbGVGYW5JQiA9IE5VTEw7CisKKyAgICAgICAgICAg
IEVSUigiQ291bGQgbm90IGNyZWF0ZSBhIHNjcmF0Y2ggaW5kZXggYnVmZmVyIGZvciBHTF9UUklB
TkdMRV9GQU4uIik7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ2hlY2tlZCBieSBSZW5kZXJlcjExOjph
cHBseVByaW1pdGl2ZVR5cGUKKyAgICBBU1NFUlQoY291bnQgPj0gMyk7CisKKyAgICBjb25zdCB1
bnNpZ25lZCBpbnQgbnVtVHJpcyA9IGNvdW50IC0gMjsKKworICAgIGlmIChudW1UcmlzID4gKHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLyAoc2l6ZW9mKHVuc2lnbmVk
IGludCkgKiAzKSkpCisgICAgeworICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSBzY3Jh
dGNoIGluZGV4IGJ1ZmZlciBmb3IgR0xfVFJJQU5HTEVfRkFOLCB0b28gbWFueSBpbmRpY2VzIHJl
cXVpcmVkLiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KKworICAgIGNvbnN0IHVuc2lnbmVkIGludCBzcGFjZU5lZWRlZCA9IChudW1UcmlzICog
MykgKiBzaXplb2YodW5zaWduZWQgaW50KTsKKyAgICBpZiAoIW1UcmlhbmdsZUZhbklCLT5yZXNl
cnZlQnVmZmVyU3BhY2Uoc3BhY2VOZWVkZWQsIEdMX1VOU0lHTkVEX0lOVCkpCisgICAgeworICAg
ICAgICBFUlIoIkNvdWxkIG5vdCByZXNlcnZlIGVub3VnaCBzcGFjZSBpbiBzY3JhdGNoIGluZGV4
IGJ1ZmZlciBmb3IgR0xfVFJJQU5HTEVfRkFOLiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KKworICAgIHZvaWQqIG1hcHBlZE1lbW9yeSA9IE5V
TEw7CisgICAgdW5zaWduZWQgaW50IG9mZnNldDsKKyAgICBpZiAoIW1UcmlhbmdsZUZhbklCLT5t
YXBCdWZmZXIoc3BhY2VOZWVkZWQsICZtYXBwZWRNZW1vcnksICZvZmZzZXQpKQorICAgIHsKKyAg
ICAgICAgRVJSKCJDb3VsZCBub3QgbWFwIHNjcmF0Y2ggaW5kZXggYnVmZmVyIGZvciBHTF9UUklB
TkdMRV9GQU4uIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorCisgICAgdW5zaWduZWQgaW50ICpkYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNp
Z25lZCBpbnQqPihtYXBwZWRNZW1vcnkpOworICAgIHVuc2lnbmVkIGludCBpbmRleEJ1ZmZlck9m
ZnNldCA9IG9mZnNldDsKKworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdM
X05PTkU6ICAgLy8gTm9uLWluZGV4ZWQgZHJhdworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8IG51bVRyaXM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgZGF0YVtpKjMg
KyAwXSA9IDA7CisgICAgICAgICAgICBkYXRhW2kqMyArIDFdID0gaSArIDE7CisgICAgICAgICAg
ICBkYXRhW2kqMyArIDJdID0gaSArIDI7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgbnVtVHJpczsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBkYXRhW2kqMyArIDBd
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpWzBdOworICAgICAgICAgICAg
ZGF0YVtpKjMgKyAxXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKVtpICsg
MV07CisgICAgICAgICAgICBkYXRhW2kqMyArIDJdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0
ZSo+KGluZGljZXMpW2kgKyAyXTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfVU5TSUdORURfU0hPUlQ6CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgbnVtVHJpczsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBkYXRhW2kqMyArIDBdID0g
c3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVswXTsKKyAgICAgICAgICAgIGRh
dGFbaSozICsgMV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpW2kgKyAx
XTsKKyAgICAgICAgICAgIGRhdGFbaSozICsgMl0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9y
dCo+KGluZGljZXMpW2kgKyAyXTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IG51bVRyaXM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgZGF0YVtpKjMgKyAwXSA9IHN0
YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMpWzBdOworICAgICAgICAgICAgZGF0YVtp
KjMgKyAxXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMpW2kgKyAxXTsKKyAg
ICAgICAgICAgIGRhdGFbaSozICsgMl0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRp
Y2VzKVtpICsgMl07CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIGlmICghbVRyaWFuZ2xlRmFuSUItPnVubWFwQnVm
ZmVyKCkpCisgICAgeworICAgICAgICBFUlIoIkNvdWxkIG5vdCB1bm1hcCBzY3JhdGNoIGluZGV4
IGJ1ZmZlciBmb3IgR0xfVFJJQU5HTEVfRkFOLiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KKworICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9
IG1UcmlhbmdsZUZhbklCLT5nZXRTZXJpYWwoKSB8fCBtQXBwbGllZElCT2Zmc2V0ICE9IGluZGV4
QnVmZmVyT2Zmc2V0KQorICAgIHsKKyAgICAgICAgSW5kZXhCdWZmZXIxMSAqaW5kZXhCdWZmZXIg
PSBJbmRleEJ1ZmZlcjExOjptYWtlSW5kZXhCdWZmZXIxMShtVHJpYW5nbGVGYW5JQi0+Z2V0SW5k
ZXhCdWZmZXIoKSk7CisKKyAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0SW5kZXhCdWZmZXIo
aW5kZXhCdWZmZXItPmdldEJ1ZmZlcigpLCBpbmRleEJ1ZmZlci0+Z2V0SW5kZXhGb3JtYXQoKSwg
aW5kZXhCdWZmZXJPZmZzZXQpOworICAgICAgICBtQXBwbGllZElCU2VyaWFsID0gbVRyaWFuZ2xl
RmFuSUItPmdldFNlcmlhbCgpOworICAgICAgICBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbCA9IDA7
CisgICAgICAgIG1BcHBsaWVkSUJPZmZzZXQgPSBpbmRleEJ1ZmZlck9mZnNldDsKKyAgICB9CisK
KyAgICBpZiAoaW5zdGFuY2VzID4gMCkKKyAgICB7CisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5E
cmF3SW5kZXhlZEluc3RhbmNlZChudW1UcmlzICogMywgaW5zdGFuY2VzLCAwLCAtbWluSW5kZXgs
IDApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRGV2aWNlQ29udGV4dC0+RHJh
d0luZGV4ZWQobnVtVHJpcyAqIDMsIDAsIC1taW5JbmRleCk7CisgICAgfQorfQorCit2b2lkIFJl
bmRlcmVyMTE6OmFwcGx5U2hhZGVycyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSkK
K3sKKyAgICB1bnNpZ25lZCBpbnQgcHJvZ3JhbUJpbmFyeVNlcmlhbCA9IHByb2dyYW1CaW5hcnkt
PmdldFNlcmlhbCgpOworICAgIGNvbnN0IGJvb2wgdXBkYXRlUHJvZ3JhbVN0YXRlID0gKHByb2dy
YW1CaW5hcnlTZXJpYWwgIT0gbUFwcGxpZWRQcm9ncmFtQmluYXJ5U2VyaWFsKTsKKworICAgIGlm
ICh1cGRhdGVQcm9ncmFtU3RhdGUpCisgICAgeworICAgICAgICBTaGFkZXJFeGVjdXRhYmxlICp2
ZXJ0ZXhFeGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlKCk7CisgICAgICAg
IFNoYWRlckV4ZWN1dGFibGUgKnBpeGVsRXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxFeGVj
dXRhYmxlKCk7CisKKyAgICAgICAgSUQzRDExVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIgPSBO
VUxMOworICAgICAgICBpZiAodmVydGV4RXhlKSB2ZXJ0ZXhTaGFkZXIgPSBTaGFkZXJFeGVjdXRh
YmxlMTE6Om1ha2VTaGFkZXJFeGVjdXRhYmxlMTEodmVydGV4RXhlKS0+Z2V0VmVydGV4U2hhZGVy
KCk7CisKKyAgICAgICAgSUQzRDExUGl4ZWxTaGFkZXIgKnBpeGVsU2hhZGVyID0gTlVMTDsKKyAg
ICAgICAgaWYgKHBpeGVsRXhlKSBwaXhlbFNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFr
ZVNoYWRlckV4ZWN1dGFibGUxMShwaXhlbEV4ZSktPmdldFBpeGVsU2hhZGVyKCk7CisKKyAgICAg
ICAgbURldmljZUNvbnRleHQtPlBTU2V0U2hhZGVyKHBpeGVsU2hhZGVyLCBOVUxMLCAwKTsKKyAg
ICAgICAgbURldmljZUNvbnRleHQtPlZTU2V0U2hhZGVyKHZlcnRleFNoYWRlciwgTlVMTCwgMCk7
CisKKyAgICAgICAgcHJvZ3JhbUJpbmFyeS0+ZGlydHlBbGxVbmlmb3JtcygpOworCisgICAgICAg
IG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbCA9IHByb2dyYW1CaW5hcnlTZXJpYWw7CisgICAg
fQorCisgICAgLy8gT25seSB1c2UgdGhlIGdlb21ldHJ5IHNoYWRlciBjdXJyZW50bHkgZm9yIHBv
aW50IHNwcml0ZSBkcmF3aW5nCisgICAgY29uc3QgYm9vbCB1c2VzR2VvbWV0cnlTaGFkZXIgPSAo
cHJvZ3JhbUJpbmFyeS0+dXNlc0dlb21ldHJ5U2hhZGVyKCkgJiYgbUN1clJhc3RlclN0YXRlLnBv
aW50RHJhd01vZGUpOworCisgICAgaWYgKHVwZGF0ZVByb2dyYW1TdGF0ZSB8fCB1c2VzR2VvbWV0
cnlTaGFkZXIgIT0gbUlzR2VvbWV0cnlTaGFkZXJBY3RpdmUpCisgICAgeworICAgICAgICBpZiAo
dXNlc0dlb21ldHJ5U2hhZGVyKQorICAgICAgICB7CisgICAgICAgICAgICBTaGFkZXJFeGVjdXRh
YmxlICpnZW9tZXRyeUV4ZSA9IHByb2dyYW1CaW5hcnktPmdldEdlb21ldHJ5RXhlY3V0YWJsZSgp
OworICAgICAgICAgICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmdlb21ldHJ5U2hhZGVyID0gU2hh
ZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKGdlb21ldHJ5RXhlKS0+Z2V0
R2VvbWV0cnlTaGFkZXIoKTsKKyAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldFNoYWRl
cihnZW9tZXRyeVNoYWRlciwgTlVMTCwgMCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIoTlVMTCwgTlVM
TCwgMCk7CisgICAgICAgIH0KKworICAgICAgICBtSXNHZW9tZXRyeVNoYWRlckFjdGl2ZSA9IHVz
ZXNHZW9tZXRyeVNoYWRlcjsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6YXBwbHlVbmlm
b3JtcyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlVuaWZvcm1BcnJheSAq
dW5pZm9ybUFycmF5KQoreworICAgIFNoYWRlckV4ZWN1dGFibGUxMSAqdmVydGV4RXhlY3V0YWJs
ZSA9IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShwcm9ncmFtQmlu
YXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlKCkpOworICAgIFNoYWRlckV4ZWN1dGFibGUxMSAqcGl4
ZWxFeGVjdXRhYmxlID0gU2hhZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTEx
KHByb2dyYW1CaW5hcnktPmdldFBpeGVsRXhlY3V0YWJsZSgpKTsKKworICAgIHVuc2lnbmVkIGlu
dCB0b3RhbFJlZ2lzdGVyQ291bnRWUyA9IDA7CisgICAgdW5zaWduZWQgaW50IHRvdGFsUmVnaXN0
ZXJDb3VudFBTID0gMDsKKworICAgIGJvb2wgdmVydGV4VW5pZm9ybXNEaXJ0eSA9IGZhbHNlOwor
ICAgIGJvb2wgcGl4ZWxVbmlmb3Jtc0RpcnR5ID0gZmFsc2U7CisKKyAgICBmb3IgKGdsOjpVbmlm
b3JtQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIHVuaWZvcm1faXRlcmF0b3IgPSB1bmlmb3JtQXJyYXkt
PmJlZ2luKCk7IHVuaWZvcm1faXRlcmF0b3IgIT0gdW5pZm9ybUFycmF5LT5lbmQoKTsgdW5pZm9y
bV9pdGVyYXRvcisrKQorICAgIHsKKyAgICAgICAgY29uc3QgZ2w6OlVuaWZvcm0gKnVuaWZvcm0g
PSAqdW5pZm9ybV9pdGVyYXRvcjsKKworICAgICAgICBpZiAodW5pZm9ybS0+dnNSZWdpc3Rlcklu
ZGV4ID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHRvdGFsUmVnaXN0ZXJDb3VudFZTICs9
IHVuaWZvcm0tPnJlZ2lzdGVyQ291bnQ7CisgICAgICAgICAgICB2ZXJ0ZXhVbmlmb3Jtc0RpcnR5
ID0gdmVydGV4VW5pZm9ybXNEaXJ0eSB8fCB1bmlmb3JtLT5kaXJ0eTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICh1bmlmb3JtLT5wc1JlZ2lzdGVySW5kZXggPj0gMCkKKyAgICAgICAgeworICAg
ICAgICAgICAgdG90YWxSZWdpc3RlckNvdW50UFMgKz0gdW5pZm9ybS0+cmVnaXN0ZXJDb3VudDsK
KyAgICAgICAgICAgIHBpeGVsVW5pZm9ybXNEaXJ0eSA9IHBpeGVsVW5pZm9ybXNEaXJ0eSB8fCB1
bmlmb3JtLT5kaXJ0eTsKKyAgICAgICAgfQorICAgIH0KKworICAgIElEM0QxMUJ1ZmZlciAqdmVy
dGV4Q29uc3RhbnRCdWZmZXIgPSB2ZXJ0ZXhFeGVjdXRhYmxlLT5nZXRDb25zdGFudEJ1ZmZlciht
RGV2aWNlLCB0b3RhbFJlZ2lzdGVyQ291bnRWUyk7CisgICAgSUQzRDExQnVmZmVyICpwaXhlbENv
bnN0YW50QnVmZmVyID0gcGl4ZWxFeGVjdXRhYmxlLT5nZXRDb25zdGFudEJ1ZmZlcihtRGV2aWNl
LCB0b3RhbFJlZ2lzdGVyQ291bnRQUyk7CisKKyAgICBmbG9hdCAoKm1hcFZTKVs0XSA9IE5VTEw7
CisgICAgZmxvYXQgKCptYXBQUylbNF0gPSBOVUxMOworCisgICAgaWYgKHRvdGFsUmVnaXN0ZXJD
b3VudFZTID4gMCAmJiB2ZXJ0ZXhVbmlmb3Jtc0RpcnR5KQorICAgIHsKKyAgICAgICAgRDNEMTFf
TUFQUEVEX1NVQlJFU09VUkNFIG1hcCA9IHswfTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBt
RGV2aWNlQ29udGV4dC0+TWFwKHZlcnRleENvbnN0YW50QnVmZmVyLCAwLCBEM0QxMV9NQVBfV1JJ
VEVfRElTQ0FSRCwgMCwgJm1hcCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7
CisgICAgICAgIG1hcFZTID0gKGZsb2F0KCopWzRdKW1hcC5wRGF0YTsKKyAgICB9CisKKyAgICBp
ZiAodG90YWxSZWdpc3RlckNvdW50UFMgPiAwICYmIHBpeGVsVW5pZm9ybXNEaXJ0eSkKKyAgICB7
CisgICAgICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXAgPSB7MH07CisgICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gbURldmljZUNvbnRleHQtPk1hcChwaXhlbENvbnN0YW50QnVmZmVyLCAw
LCBEM0QxMV9NQVBfV1JJVEVfRElTQ0FSRCwgMCwgJm1hcCk7CisgICAgICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7CisgICAgICAgIG1hcFBTID0gKGZsb2F0KCopWzRdKW1hcC5wRGF0YTsK
KyAgICB9CisKKyAgICBmb3IgKGdsOjpVbmlmb3JtQXJyYXk6Oml0ZXJhdG9yIHVuaWZvcm1faXRl
cmF0b3IgPSB1bmlmb3JtQXJyYXktPmJlZ2luKCk7IHVuaWZvcm1faXRlcmF0b3IgIT0gdW5pZm9y
bUFycmF5LT5lbmQoKTsgdW5pZm9ybV9pdGVyYXRvcisrKQorICAgIHsKKyAgICAgICAgZ2w6OlVu
aWZvcm0gKnVuaWZvcm0gPSAqdW5pZm9ybV9pdGVyYXRvcjsKKworICAgICAgICBpZiAodW5pZm9y
bS0+dHlwZSAhPSAgR0xfU0FNUExFUl8yRCAmJiB1bmlmb3JtLT50eXBlICE9IEdMX1NBTVBMRVJf
Q1VCRSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHVuaWZvcm0tPnZzUmVnaXN0ZXJJbmRl
eCA+PSAwICYmIG1hcFZTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1lbWNweSht
YXBWUyArIHVuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleCwgdW5pZm9ybS0+ZGF0YSwgdW5pZm9ybS0+
cmVnaXN0ZXJDb3VudCAqIHNpemVvZihmbG9hdFs0XSkpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAodW5pZm9ybS0+cHNSZWdpc3RlckluZGV4ID49IDAgJiYgbWFwUFMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgbWVtY3B5KG1hcFBTICsgdW5pZm9ybS0+cHNSZWdp
c3RlckluZGV4LCB1bmlmb3JtLT5kYXRhLCB1bmlmb3JtLT5yZWdpc3RlckNvdW50ICogc2l6ZW9m
KGZsb2F0WzRdKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB1bmlmb3Jt
LT5kaXJ0eSA9IGZhbHNlOworICAgIH0KKworICAgIGlmIChtYXBWUykKKyAgICB7CisgICAgICAg
IG1EZXZpY2VDb250ZXh0LT5Vbm1hcCh2ZXJ0ZXhDb25zdGFudEJ1ZmZlciwgMCk7CisgICAgfQor
CisgICAgaWYgKG1hcFBTKQorICAgIHsKKyAgICAgICAgbURldmljZUNvbnRleHQtPlVubWFwKHBp
eGVsQ29uc3RhbnRCdWZmZXIsIDApOworICAgIH0KKworICAgIGlmIChtQ3VycmVudFZlcnRleENv
bnN0YW50QnVmZmVyICE9IHZlcnRleENvbnN0YW50QnVmZmVyKQorICAgIHsKKyAgICAgICAgbURl
dmljZUNvbnRleHQtPlZTU2V0Q29uc3RhbnRCdWZmZXJzKDAsIDEsICZ2ZXJ0ZXhDb25zdGFudEJ1
ZmZlcik7CisgICAgICAgIG1DdXJyZW50VmVydGV4Q29uc3RhbnRCdWZmZXIgPSB2ZXJ0ZXhDb25z
dGFudEJ1ZmZlcjsKKyAgICB9CisKKyAgICBpZiAobUN1cnJlbnRQaXhlbENvbnN0YW50QnVmZmVy
ICE9IHBpeGVsQ29uc3RhbnRCdWZmZXIpCisgICAgeworICAgICAgICBtRGV2aWNlQ29udGV4dC0+
UFNTZXRDb25zdGFudEJ1ZmZlcnMoMCwgMSwgJnBpeGVsQ29uc3RhbnRCdWZmZXIpOworICAgICAg
ICBtQ3VycmVudFBpeGVsQ29uc3RhbnRCdWZmZXIgPSBwaXhlbENvbnN0YW50QnVmZmVyOworICAg
IH0KKworICAgIC8vIERyaXZlciB1bmlmb3JtcworICAgIGlmICghbURyaXZlckNvbnN0YW50QnVm
ZmVyVlMpCisgICAgeworICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyBjb25zdGFudEJ1ZmZlckRl
c2NyaXB0aW9uID0gezB9OworICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLkJ5dGVX
aWR0aCA9IHNpemVvZihkeF9WZXJ0ZXhDb25zdGFudHMpOworICAgICAgICBjb25zdGFudEJ1ZmZl
ckRlc2NyaXB0aW9uLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKKyAgICAgICAgY29uc3Rh
bnRCdWZmZXJEZXNjcmlwdGlvbi5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX0NPTlNUQU5UX0JVRkZF
UjsKKyAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5DUFVBY2Nlc3NGbGFncyA9IDA7
CisgICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uTWlzY0ZsYWdzID0gMDsKKyAgICAg
ICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKKwor
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmY29uc3RhbnRC
dWZmZXJEZXNjcmlwdGlvbiwgTlVMTCwgJm1Ecml2ZXJDb25zdGFudEJ1ZmZlclZTKTsKKyAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICBtRGV2aWNlQ29udGV4dC0+
VlNTZXRDb25zdGFudEJ1ZmZlcnMoMSwgMSwgJm1Ecml2ZXJDb25zdGFudEJ1ZmZlclZTKTsKKyAg
ICB9CisKKyAgICBpZiAoIW1Ecml2ZXJDb25zdGFudEJ1ZmZlclBTKQorICAgIHsKKyAgICAgICAg
RDNEMTFfQlVGRkVSX0RFU0MgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbiA9IHswfTsKKyAgICAg
ICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5CeXRlV2lkdGggPSBzaXplb2YoZHhfUGl4ZWxD
b25zdGFudHMpOworICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLlVzYWdlID0gRDNE
MTFfVVNBR0VfREVGQVVMVDsKKyAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5CaW5k
RmxhZ3MgPSBEM0QxMV9CSU5EX0NPTlNUQU5UX0JVRkZFUjsKKyAgICAgICAgY29uc3RhbnRCdWZm
ZXJEZXNjcmlwdGlvbi5DUFVBY2Nlc3NGbGFncyA9IDA7CisgICAgICAgIGNvbnN0YW50QnVmZmVy
RGVzY3JpcHRpb24uTWlzY0ZsYWdzID0gMDsKKyAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlw
dGlvbi5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKKworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IG1EZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbiwgTlVMTCwg
Jm1Ecml2ZXJDb25zdGFudEJ1ZmZlclBTKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1
bHQpKTsKKworICAgICAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRDb25zdGFudEJ1ZmZlcnMoMSwg
MSwgJm1Ecml2ZXJDb25zdGFudEJ1ZmZlclBTKTsKKyAgICB9CisKKyAgICBpZiAobWVtY21wKCZt
VmVydGV4Q29uc3RhbnRzLCAmbUFwcGxpZWRWZXJ0ZXhDb25zdGFudHMsIHNpemVvZihkeF9WZXJ0
ZXhDb25zdGFudHMpKSAhPSAwKQorICAgIHsKKyAgICAgICAgbURldmljZUNvbnRleHQtPlVwZGF0
ZVN1YnJlc291cmNlKG1Ecml2ZXJDb25zdGFudEJ1ZmZlclZTLCAwLCBOVUxMLCAmbVZlcnRleENv
bnN0YW50cywgMTYsIDApOworICAgICAgICBtZW1jcHkoJm1BcHBsaWVkVmVydGV4Q29uc3RhbnRz
LCAmbVZlcnRleENvbnN0YW50cywgc2l6ZW9mKGR4X1ZlcnRleENvbnN0YW50cykpOworICAgIH0K
KworICAgIGlmIChtZW1jbXAoJm1QaXhlbENvbnN0YW50cywgJm1BcHBsaWVkUGl4ZWxDb25zdGFu
dHMsIHNpemVvZihkeF9QaXhlbENvbnN0YW50cykpICE9IDApCisgICAgeworICAgICAgICBtRGV2
aWNlQ29udGV4dC0+VXBkYXRlU3VicmVzb3VyY2UobURyaXZlckNvbnN0YW50QnVmZmVyUFMsIDAs
IE5VTEwsICZtUGl4ZWxDb25zdGFudHMsIDE2LCAwKTsKKyAgICAgICAgbWVtY3B5KCZtQXBwbGll
ZFBpeGVsQ29uc3RhbnRzLCAmbVBpeGVsQ29uc3RhbnRzLCBzaXplb2YoZHhfUGl4ZWxDb25zdGFu
dHMpKTsKKyAgICB9CisKKyAgICAvLyBuZWVkZWQgZm9yIHRoZSBwb2ludCBzcHJpdGUgZ2VvbWV0
cnkgc2hhZGVyCisgICAgaWYgKG1DdXJyZW50R2VvbWV0cnlDb25zdGFudEJ1ZmZlciAhPSBtRHJp
dmVyQ29uc3RhbnRCdWZmZXJQUykKKyAgICB7CisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5HU1Nl
dENvbnN0YW50QnVmZmVycygwLCAxLCAmbURyaXZlckNvbnN0YW50QnVmZmVyUFMpOworICAgICAg
ICBtQ3VycmVudEdlb21ldHJ5Q29uc3RhbnRCdWZmZXIgPSBtRHJpdmVyQ29uc3RhbnRCdWZmZXJQ
UzsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6Y2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFy
YW1ldGVycyAmY2xlYXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpCit7Cisg
ICAgIGdsOjpSZW5kZXJidWZmZXIgKmZpcnN0UmVuZGVyYnVmZmVyID0gZnJhbWVCdWZmZXItPmdl
dEZpcnN0Q29sb3JidWZmZXIoKTsKKyAgICAgR0xlbnVtIGludGVybmFsRm9ybWF0ID0gZmlyc3RS
ZW5kZXJidWZmZXIgPyBmaXJzdFJlbmRlcmJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSA6IEdM
X05PTkU7CisKKyAgICAgYm9vbCBuZWVkTWFza2VkQ29sb3JDbGVhciA9IChjbGVhclBhcmFtcy5t
YXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICgoIWNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCAmJiBnbDo6R2V0UmVkU2l6ZShpbnRl
cm5hbEZvcm1hdCkgPiAwKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgh
Y2xlYXJQYXJhbXMuY29sb3JNYXNrR3JlZW4gJiYgZ2w6OkdldEdyZWVuU2l6ZShpbnRlcm5hbEZv
cm1hdCkgPiAwKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghY2xlYXJQ
YXJhbXMuY29sb3JNYXNrQmx1ZSAmJiBnbDo6R2V0Qmx1ZVNpemUoaW50ZXJuYWxGb3JtYXQpID4g
MCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIWNsZWFyUGFyYW1zLmNv
bG9yTWFza0FscGhhICYmIGdsOjpHZXRBbHBoYVNpemUoaW50ZXJuYWxGb3JtYXQpID4gMCkpOwor
CisgICAgIHVuc2lnbmVkIGludCBzdGVuY2lsVW5tYXNrZWQgPSAweDA7CisgICAgIGlmIChmcmFt
ZUJ1ZmZlci0+aGFzU3RlbmNpbCgpKQorICAgICB7CisgICAgICAgICB1bnNpZ25lZCBpbnQgc3Rl
bmNpbFNpemUgPSBnbDo6R2V0U3RlbmNpbFNpemUoZnJhbWVCdWZmZXItPmdldFN0ZW5jaWxidWZm
ZXIoKS0+Z2V0QWN0dWFsRm9ybWF0KCkpOworICAgICAgICAgc3RlbmNpbFVubWFza2VkID0gKDB4
MSA8PCBzdGVuY2lsU2l6ZSkgLSAxOworICAgICB9CisgICAgIGJvb2wgbmVlZE1hc2tlZFN0ZW5j
aWxDbGVhciA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKSAmJgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xlYXJQYXJhbXMuc3RlbmNpbFdy
aXRlTWFzayAmIHN0ZW5jaWxVbm1hc2tlZCkgIT0gc3RlbmNpbFVubWFza2VkOworCisgICAgIGJv
b2wgbmVlZFNjaXNzb3JlZENsZWFyID0gbVNjaXNzb3JFbmFibGVkICYmIChtQ3VyU2Npc3Nvci54
ID4gMCB8fCBtQ3VyU2Npc3Nvci55ID4gMCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbUN1clNjaXNzb3IueCArIG1DdXJTY2lzc29yLndpZHRo
IDwgbVJlbmRlclRhcmdldERlc2Mud2lkdGggfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1DdXJTY2lzc29yLnkgKyBtQ3VyU2Npc3Nvci5oZWln
aHQgPCBtUmVuZGVyVGFyZ2V0RGVzYy5oZWlnaHQpOworCisgICAgIGlmIChuZWVkTWFza2VkQ29s
b3JDbGVhciB8fCBuZWVkTWFza2VkU3RlbmNpbENsZWFyIHx8IG5lZWRTY2lzc29yZWRDbGVhcikK
KyAgICAgeworICAgICAgICAgbWFza2VkQ2xlYXIoY2xlYXJQYXJhbXMsIGZyYW1lQnVmZmVyKTsK
KyAgICAgfQorICAgICBlbHNlCisgICAgIHsKKyAgICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNr
ICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQgPCBnbDo6SU1Q
TEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSUzsgY29sb3JBdHRhY2htZW50KyspCisgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICBpZiAoZnJhbWVCdWZmZXItPmlzRW5hYmxlZENvbG9y
QXR0YWNobWVudChjb2xvckF0dGFjaG1lbnQpKQorICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXJPYmplY3QgPSBmcmFt
ZUJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoY29sb3JBdHRhY2htZW50KTsKKyAgICAgICAgICAgICAg
ICAgICAgIGlmIChyZW5kZXJidWZmZXJPYmplY3QpCisgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJUYXJnZXQxMSAqcmVuZGVyVGFyZ2V0ID0gUmVu
ZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShyZW5kZXJidWZmZXJPYmplY3QtPmdldFJl
bmRlclRhcmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVuZGVyVGFyZ2V0
KQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEVSUigicmVuZGVyIHRhcmdldCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZnJhbWVi
dWZmZXJSVFYgPSByZW5kZXJUYXJnZXQtPmdldFJlbmRlclRhcmdldFZpZXcoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghZnJhbWVidWZmZXJSVFYpCisgICAgICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHZp
ZXcgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEdMZW51bSBmb3JtYXQgPSByZW5kZXJidWZmZXJPYmplY3QtPmdldEludGVybmFs
Rm9ybWF0KCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGNsZWFyVmFs
dWVzWzRdID0geyAoZ2w6OkdldFJlZFNpemUoZm9ybWF0KSA+IDApICAgPyBjbGVhclBhcmFtcy5j
b2xvckNsZWFyVmFsdWUucmVkICAgOiAwLjBmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnbDo6R2V0R3JlZW5TaXplKGZvcm1hdCkgPiAw
KSA/IGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5ncmVlbiA6IDAuMGYsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdsOjpHZXRCbHVl
U2l6ZShmb3JtYXQpID4gMCkgID8gY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLmJsdWUgIDog
MC4wZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoZ2w6OkdldEFscGhhU2l6ZShmb3JtYXQpID4gMCkgPyBjbGVhclBhcmFtcy5jb2xvckNs
ZWFyVmFsdWUuYWxwaGEgOiAxLjBmIH07CisgICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNl
Q29udGV4dC0+Q2xlYXJSZW5kZXJUYXJnZXRWaWV3KGZyYW1lYnVmZmVyUlRWLCBjbGVhclZhbHVl
cyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0RFUFRI
X0JVRkZFUl9CSVQgfHwgY2xlYXJQYXJhbXMubWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkK
KyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyT2Jq
ZWN0ID0gZnJhbWVCdWZmZXItPmdldERlcHRoT3JTdGVuY2lsYnVmZmVyKCk7CisgICAgICAgICAg
ICBpZiAocmVuZGVyYnVmZmVyT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IFJlbmRlclRhcmdldDExICpyZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRl
clRhcmdldDExKHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhTdGVuY2lsKCkpOworICAgICAg
ICAgICAgICAgIGlmICghcmVuZGVyVGFyZ2V0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwu
Iik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpmcmFtZWJ1ZmZlckRTViA9IHJl
bmRlclRhcmdldC0+Z2V0RGVwdGhTdGVuY2lsVmlldygpOworICAgICAgICAgICAgICAgIGlmICgh
ZnJhbWVidWZmZXJEU1YpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBF
UlIoImRlcHRoIHN0ZW5jaWwgdmlldyBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgVUlOVCBjbGVhckZsYWdzID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoY2xlYXJQYXJh
bXMubWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBjbGVhckZsYWdzIHw9IEQzRDExX0NMRUFSX0RFUFRIOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX1NURU5D
SUxfQlVGRkVSX0JJVCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNs
ZWFyRmxhZ3MgfD0gRDNEMTFfQ0xFQVJfU1RFTkNJTDsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBmbG9hdCBkZXB0aENsZWFyID0gZ2w6OmNsYW1wMDEoY2xlYXJQYXJhbXMu
ZGVwdGhDbGVhclZhbHVlKTsKKyAgICAgICAgICAgICAgICBVSU5UOCBzdGVuY2lsQ2xlYXIgPSBj
bGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSAmIDB4MDAwMDAwRkY7CisKKyAgICAgICAgICAg
ICAgICBtRGV2aWNlQ29udGV4dC0+Q2xlYXJEZXB0aFN0ZW5jaWxWaWV3KGZyYW1lYnVmZmVyRFNW
LCBjbGVhckZsYWdzLCBkZXB0aENsZWFyLCBzdGVuY2lsQ2xlYXIpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFJlbmRlcmVyMTE6Om1hc2tlZENsZWFyKGNvbnN0
IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBnbDo6RnJhbWVidWZmZXIgKmZyYW1l
QnVmZmVyKQoreworICAgIEhSRVNVTFQgcmVzdWx0OworCisgICAgaWYgKCFtQ2xlYXJSZXNvdXJj
ZXNJbml0aWFsaXplZCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbUNsZWFyVkIgJiYgIW1DbGVh
clZTICYmICFtQ2xlYXJTaW5nbGVQUyAmJiAhbUNsZWFyTXVsdGlwbGVQUyAmJiAhbUNsZWFyU2Np
c3NvclJTICYmICFtQ2xlYXJOb1NjaXNzb3JSUyk7CisKKyAgICAgICAgRDNEMTFfQlVGRkVSX0RF
U0MgdmJEZXNjOworICAgICAgICB2YkRlc2MuQnl0ZVdpZHRoID0gc2l6ZW9mKGQzZDExOjpQb3Np
dGlvbkRlcHRoQ29sb3JWZXJ0ZXgpICogNDsKKyAgICAgICAgdmJEZXNjLlVzYWdlID0gRDNEMTFf
VVNBR0VfRFlOQU1JQzsKKyAgICAgICAgdmJEZXNjLkJpbmRGbGFncyA9IEQzRDExX0JJTkRfVkVS
VEVYX0JVRkZFUjsKKyAgICAgICAgdmJEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FD
Q0VTU19XUklURTsKKyAgICAgICAgdmJEZXNjLk1pc2NGbGFncyA9IDA7CisgICAgICAgIHZiRGVz
Yy5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKKworICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5D
cmVhdGVCdWZmZXIoJnZiRGVzYywgTlVMTCwgJm1DbGVhclZCKTsKKyAgICAgICAgQVNTRVJUKFNV
Q0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ2xlYXJWQiwg
IlJlbmRlcmVyMTEgbWFza2VkIGNsZWFyIHZlcnRleCBidWZmZXIiKTsKKworICAgICAgICBEM0Qx
MV9JTlBVVF9FTEVNRU5UX0RFU0MgcXVhZExheW91dFtdID0KKyAgICAgICAgeworICAgICAgICAg
ICAgeyAiUE9TSVRJT04iLCAwLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsICAgIDAsICAw
LCBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAgfSwKKyAgICAgICAgICAgIHsgIkNPTE9S
IiwgICAgMCwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAwLCAxMiwgRDNEMTFfSU5Q
VVRfUEVSX1ZFUlRFWF9EQVRBLCAwIH0sCisgICAgICAgIH07CisKKyAgICAgICAgcmVzdWx0ID0g
bURldmljZS0+Q3JlYXRlSW5wdXRMYXlvdXQocXVhZExheW91dCwgMiwgZ19WU19DbGVhciwgc2l6
ZW9mKGdfVlNfQ2xlYXIpLCAmbUNsZWFySUwpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOworICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhcklMLCAiUmVuZGVyZXIx
MSBtYXNrZWQgY2xlYXIgaW5wdXQgbGF5b3V0Iik7CisKKyAgICAgICAgcmVzdWx0ID0gbURldmlj
ZS0+Q3JlYXRlVmVydGV4U2hhZGVyKGdfVlNfQ2xlYXIsIHNpemVvZihnX1ZTX0NsZWFyKSwgTlVM
TCwgJm1DbGVhclZTKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAg
ICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ2xlYXJWUywgIlJlbmRlcmVyMTEgbWFza2VkIGNsZWFy
IHZlcnRleCBzaGFkZXIiKTsKKworICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhl
bFNoYWRlcihnX1BTX0NsZWFyU2luZ2xlLCBzaXplb2YoZ19QU19DbGVhclNpbmdsZSksIE5VTEws
ICZtQ2xlYXJTaW5nbGVQUyk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Cisg
ICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNsZWFyU2luZ2xlUFMsICJSZW5kZXJlcjExIG1h
c2tlZCBjbGVhciBwaXhlbCBzaGFkZXIgKDEgUlQpIik7CisKKyAgICAgICAgcmVzdWx0ID0gbURl
dmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19DbGVhck11bHRpcGxlLCBzaXplb2YoZ19QU19D
bGVhck11bHRpcGxlKSwgTlVMTCwgJm1DbGVhck11bHRpcGxlUFMpOworICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhck11
bHRpcGxlUFMsICJSZW5kZXJlcjExIG1hc2tlZCBjbGVhciBwaXhlbCBzaGFkZXIgKE1SVCkiKTsK
KworICAgICAgICBEM0QxMV9SQVNURVJJWkVSX0RFU0MgcnNTY2lzc29yRGVzYzsKKyAgICAgICAg
cnNTY2lzc29yRGVzYy5GaWxsTW9kZSA9IEQzRDExX0ZJTExfU09MSUQ7CisgICAgICAgIHJzU2Np
c3NvckRlc2MuQ3VsbE1vZGUgPSBEM0QxMV9DVUxMX05PTkU7CisgICAgICAgIHJzU2Npc3NvckRl
c2MuRnJvbnRDb3VudGVyQ2xvY2t3aXNlID0gRkFMU0U7CisgICAgICAgIHJzU2Npc3NvckRlc2Mu
RGVwdGhCaWFzID0gMDsKKyAgICAgICAgcnNTY2lzc29yRGVzYy5EZXB0aEJpYXNDbGFtcCA9IDAu
MGY7CisgICAgICAgIHJzU2Npc3NvckRlc2MuU2xvcGVTY2FsZWREZXB0aEJpYXMgPSAwLjBmOwor
ICAgICAgICByc1NjaXNzb3JEZXNjLkRlcHRoQ2xpcEVuYWJsZSA9IEZBTFNFOworICAgICAgICBy
c1NjaXNzb3JEZXNjLlNjaXNzb3JFbmFibGUgPSBUUlVFOworICAgICAgICByc1NjaXNzb3JEZXNj
Lk11bHRpc2FtcGxlRW5hYmxlID0gRkFMU0U7CisgICAgICAgIHJzU2Npc3NvckRlc2MuQW50aWFs
aWFzZWRMaW5lRW5hYmxlID0gRkFMU0U7CisKKyAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3Jl
YXRlUmFzdGVyaXplclN0YXRlKCZyc1NjaXNzb3JEZXNjLCAmbUNsZWFyU2Npc3NvclJTKTsKKyAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgZDNkMTE6OlNldERlYnVn
TmFtZShtQ2xlYXJTY2lzc29yUlMsICJSZW5kZXJlcjExIG1hc2tlZCBjbGVhciBzY2lzc29yIHJh
c3Rlcml6ZXIgc3RhdGUiKTsKKworICAgICAgICBEM0QxMV9SQVNURVJJWkVSX0RFU0MgcnNOb1Nj
aXNzb3JEZXNjOworICAgICAgICByc05vU2Npc3NvckRlc2MuRmlsbE1vZGUgPSBEM0QxMV9GSUxM
X1NPTElEOworICAgICAgICByc05vU2Npc3NvckRlc2MuQ3VsbE1vZGUgPSBEM0QxMV9DVUxMX05P
TkU7CisgICAgICAgIHJzTm9TY2lzc29yRGVzYy5Gcm9udENvdW50ZXJDbG9ja3dpc2UgPSBGQUxT
RTsKKyAgICAgICAgcnNOb1NjaXNzb3JEZXNjLkRlcHRoQmlhcyA9IDA7CisgICAgICAgIHJzTm9T
Y2lzc29yRGVzYy5EZXB0aEJpYXNDbGFtcCA9IDAuMGY7CisgICAgICAgIHJzTm9TY2lzc29yRGVz
Yy5TbG9wZVNjYWxlZERlcHRoQmlhcyA9IDAuMGY7CisgICAgICAgIHJzTm9TY2lzc29yRGVzYy5E
ZXB0aENsaXBFbmFibGUgPSBGQUxTRTsKKyAgICAgICAgcnNOb1NjaXNzb3JEZXNjLlNjaXNzb3JF
bmFibGUgPSBGQUxTRTsKKyAgICAgICAgcnNOb1NjaXNzb3JEZXNjLk11bHRpc2FtcGxlRW5hYmxl
ID0gRkFMU0U7CisgICAgICAgIHJzTm9TY2lzc29yRGVzYy5BbnRpYWxpYXNlZExpbmVFbmFibGUg
PSBGQUxTRTsKKworICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVSYXN0ZXJpemVyU3Rh
dGUoJnJzTm9TY2lzc29yRGVzYywgJm1DbGVhck5vU2Npc3NvclJTKTsKKyAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ2xlYXJO
b1NjaXNzb3JSUywgIlJlbmRlcmVyMTEgbWFza2VkIGNsZWFyIG5vIHNjaXNzb3IgcmFzdGVyaXpl
ciBzdGF0ZSIpOworCisgICAgICAgIG1DbGVhclJlc291cmNlc0luaXRpYWxpemVkID0gdHJ1ZTsK
KyAgICB9CisKKyAgICAvLyBQcmVwYXJlIHRoZSBkZXB0aCBzdGVuY2lsIHN0YXRlIHRvIHdyaXRl
IGRlcHRoIHZhbHVlcyBpZiB0aGUgZGVwdGggc2hvdWxkIGJlIGNsZWFyZWQKKyAgICAvLyBhbmQg
c3RlbmNpbCB2YWx1ZXMgaWYgdGhlIHN0ZW5jaWwgc2hvdWxkIGJlIGNsZWFyZWQKKyAgICBnbDo6
RGVwdGhTdGVuY2lsU3RhdGUgZ2xEU1N0YXRlOworICAgIGdsRFNTdGF0ZS5kZXB0aFRlc3QgPSAo
Y2xlYXJQYXJhbXMubWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpICE9IDA7CisgICAgZ2xEU1N0
YXRlLmRlcHRoRnVuYyA9IEdMX0FMV0FZUzsKKyAgICBnbERTU3RhdGUuZGVwdGhNYXNrID0gKGNs
ZWFyUGFyYW1zLm1hc2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUKSAhPSAwOworICAgIGdsRFNTdGF0
ZS5zdGVuY2lsVGVzdCA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklU
KSAhPSAwOworICAgIGdsRFNTdGF0ZS5zdGVuY2lsRnVuYyA9IEdMX0FMV0FZUzsKKyAgICBnbERT
U3RhdGUuc3RlbmNpbE1hc2sgPSAwOworICAgIGdsRFNTdGF0ZS5zdGVuY2lsRmFpbCA9IEdMX1JF
UExBQ0U7CisgICAgZ2xEU1N0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsID0gR0xfUkVQTEFDRTsK
KyAgICBnbERTU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MgPSBHTF9SRVBMQUNFOworICAgIGds
RFNTdGF0ZS5zdGVuY2lsV3JpdGVtYXNrID0gY2xlYXJQYXJhbXMuc3RlbmNpbFdyaXRlTWFzazsK
KyAgICBnbERTU3RhdGUuc3RlbmNpbEJhY2tGdW5jID0gR0xfQUxXQVlTOworICAgIGdsRFNTdGF0
ZS5zdGVuY2lsQmFja01hc2sgPSAwOworICAgIGdsRFNTdGF0ZS5zdGVuY2lsQmFja0ZhaWwgPSBH
TF9SRVBMQUNFOworICAgIGdsRFNTdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwgPSBHTF9S
RVBMQUNFOworICAgIGdsRFNTdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MgPSBHTF9SRVBM
QUNFOworICAgIGdsRFNTdGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzayA9IGNsZWFyUGFyYW1zLnN0
ZW5jaWxXcml0ZU1hc2s7CisKKyAgICBpbnQgc3RlbmNpbENsZWFyID0gY2xlYXJQYXJhbXMuc3Rl
bmNpbENsZWFyVmFsdWUgJiAweDAwMDAwMEZGOworCisgICAgSUQzRDExRGVwdGhTdGVuY2lsU3Rh
dGUgKmRzU3RhdGUgPSBtU3RhdGVDYWNoZS5nZXREZXB0aFN0ZW5jaWxTdGF0ZShnbERTU3RhdGUp
OworCisgICAgLy8gUHJlcGFyZSB0aGUgYmxlbmQgc3RhdGUgdG8gdXNlIGEgd3JpdGUgbWFzayBp
ZiB0aGUgY29sb3IgYnVmZmVyIHNob3VsZCBiZSBjbGVhcmVkCisgICAgZ2w6OkJsZW5kU3RhdGUg
Z2xCbGVuZFN0YXRlOworICAgIGdsQmxlbmRTdGF0ZS5ibGVuZCA9IGZhbHNlOworICAgIGdsQmxl
bmRTdGF0ZS5zb3VyY2VCbGVuZFJHQiA9IEdMX09ORTsKKyAgICBnbEJsZW5kU3RhdGUuZGVzdEJs
ZW5kUkdCID0gR0xfWkVSTzsKKyAgICBnbEJsZW5kU3RhdGUuc291cmNlQmxlbmRBbHBoYSA9IEdM
X09ORTsKKyAgICBnbEJsZW5kU3RhdGUuZGVzdEJsZW5kQWxwaGEgPSBHTF9aRVJPOworICAgIGds
QmxlbmRTdGF0ZS5ibGVuZEVxdWF0aW9uUkdCID0gR0xfRlVOQ19BREQ7CisgICAgZ2xCbGVuZFN0
YXRlLmJsZW5kRXF1YXRpb25BbHBoYSA9IEdMX0ZVTkNfQUREOworICAgIGdsQmxlbmRTdGF0ZS5j
b2xvck1hc2tSZWQgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpID8g
Y2xlYXJQYXJhbXMuY29sb3JNYXNrUmVkIDogZmFsc2U7CisgICAgZ2xCbGVuZFN0YXRlLmNvbG9y
TWFza0dyZWVuID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSA/IGNs
ZWFyUGFyYW1zLmNvbG9yTWFza0dyZWVuIDogZmFsc2U7CisgICAgZ2xCbGVuZFN0YXRlLmNvbG9y
TWFza0JsdWUgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpID8gY2xl
YXJQYXJhbXMuY29sb3JNYXNrQmx1ZSA6IGZhbHNlOworICAgIGdsQmxlbmRTdGF0ZS5jb2xvck1h
c2tBbHBoYSA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkgPyBjbGVh
clBhcmFtcy5jb2xvck1hc2tBbHBoYSA6IGZhbHNlOworICAgIGdsQmxlbmRTdGF0ZS5zYW1wbGVB
bHBoYVRvQ292ZXJhZ2UgPSBmYWxzZTsKKyAgICBnbEJsZW5kU3RhdGUuZGl0aGVyID0gZmFsc2U7
CisKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgYmxlbmRGYWN0b3JzWzRdID0geyAxLjBmLCAxLjBm
LCAxLjBmLCAxLjBmIH07CisgICAgc3RhdGljIGNvbnN0IFVJTlQgc2FtcGxlTWFzayA9IDB4RkZG
RkZGRkY7CisKKyAgICBJRDNEMTFCbGVuZFN0YXRlICpibGVuZFN0YXRlID0gbVN0YXRlQ2FjaGUu
Z2V0QmxlbmRTdGF0ZShmcmFtZUJ1ZmZlciwgZ2xCbGVuZFN0YXRlKTsKKworICAgIC8vIFNldCB0
aGUgdmVydGljZXMKKyAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7
CisgICAgcmVzdWx0ID0gbURldmljZUNvbnRleHQtPk1hcChtQ2xlYXJWQiwgMCwgRDNEMTFfTUFQ
X1dSSVRFX0RJU0NBUkQsIDAsICZtYXBwZWRSZXNvdXJjZSk7CisgICAgaWYgKEZBSUxFRChyZXN1
bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gbWFwIG1hc2tlZCBjbGVhciB2ZXJ0
ZXggYnVmZmVyLCBIUkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBkM2QxMTo6UG9zaXRpb25EZXB0aENvbG9yVmVydGV4ICp2ZXJ0aWNlcyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8ZDNkMTE6OlBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCo+KG1hcHBlZFJl
c291cmNlLnBEYXRhKTsKKworICAgIGZsb2F0IGRlcHRoQ2xlYXIgPSBnbDo6Y2xhbXAwMShjbGVh
clBhcmFtcy5kZXB0aENsZWFyVmFsdWUpOworICAgIGQzZDExOjpTZXRQb3NpdGlvbkRlcHRoQ29s
b3JWZXJ0ZXgoJnZlcnRpY2VzWzBdLCAtMS4wZiwgIDEuMGYsIGRlcHRoQ2xlYXIsIGNsZWFyUGFy
YW1zLmNvbG9yQ2xlYXJWYWx1ZSk7CisgICAgZDNkMTE6OlNldFBvc2l0aW9uRGVwdGhDb2xvclZl
cnRleCgmdmVydGljZXNbMV0sIC0xLjBmLCAtMS4wZiwgZGVwdGhDbGVhciwgY2xlYXJQYXJhbXMu
Y29sb3JDbGVhclZhbHVlKTsKKyAgICBkM2QxMTo6U2V0UG9zaXRpb25EZXB0aENvbG9yVmVydGV4
KCZ2ZXJ0aWNlc1syXSwgIDEuMGYsICAxLjBmLCBkZXB0aENsZWFyLCBjbGVhclBhcmFtcy5jb2xv
ckNsZWFyVmFsdWUpOworICAgIGQzZDExOjpTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgoJnZl
cnRpY2VzWzNdLCAgMS4wZiwgLTEuMGYsIGRlcHRoQ2xlYXIsIGNsZWFyUGFyYW1zLmNvbG9yQ2xl
YXJWYWx1ZSk7CisKKyAgICBtRGV2aWNlQ29udGV4dC0+VW5tYXAobUNsZWFyVkIsIDApOworCisg
ICAgLy8gQXBwbHkgc3RhdGUKKyAgICBtRGV2aWNlQ29udGV4dC0+T01TZXRCbGVuZFN0YXRlKGJs
ZW5kU3RhdGUsIGJsZW5kRmFjdG9ycywgc2FtcGxlTWFzayk7CisgICAgbURldmljZUNvbnRleHQt
Pk9NU2V0RGVwdGhTdGVuY2lsU3RhdGUoZHNTdGF0ZSwgc3RlbmNpbENsZWFyKTsKKyAgICBtRGV2
aWNlQ29udGV4dC0+UlNTZXRTdGF0ZShtU2Npc3NvckVuYWJsZWQgPyBtQ2xlYXJTY2lzc29yUlMg
OiBtQ2xlYXJOb1NjaXNzb3JSUyk7CisKKyAgICAvLyBBcHBseSBzaGFkZXJzCisgICAgSUQzRDEx
UGl4ZWxTaGFkZXIgKnBpeGVsU2hhZGVyID0gZnJhbWVCdWZmZXItPnVzaW5nRXh0ZW5kZWREcmF3
QnVmZmVycygpID8gbUNsZWFyTXVsdGlwbGVQUyA6IG1DbGVhclNpbmdsZVBTOworCisgICAgbURl
dmljZUNvbnRleHQtPklBU2V0SW5wdXRMYXlvdXQobUNsZWFySUwpOworICAgIG1EZXZpY2VDb250
ZXh0LT5WU1NldFNoYWRlcihtQ2xlYXJWUywgTlVMTCwgMCk7CisgICAgbURldmljZUNvbnRleHQt
PlBTU2V0U2hhZGVyKHBpeGVsU2hhZGVyLCBOVUxMLCAwKTsKKyAgICBtRGV2aWNlQ29udGV4dC0+
R1NTZXRTaGFkZXIoTlVMTCwgTlVMTCwgMCk7CisKKyAgICAvLyBBcHBseSB2ZXJ0ZXggYnVmZmVy
CisgICAgc3RhdGljIFVJTlQgc3RyaWRlID0gc2l6ZW9mKGQzZDExOjpQb3NpdGlvbkRlcHRoQ29s
b3JWZXJ0ZXgpOworICAgIHN0YXRpYyBVSU5UIHN0YXJ0SWR4ID0gMDsKKyAgICBtRGV2aWNlQ29u
dGV4dC0+SUFTZXRWZXJ0ZXhCdWZmZXJzKDAsIDEsICZtQ2xlYXJWQiwgJnN0cmlkZSwgJnN0YXJ0
SWR4KTsKKyAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRQcmltaXRpdmVUb3BvbG9neShEM0RfUFJJ
TUlUSVZFX1RPUE9MT0dZX1RSSUFOR0xFU1RSSVApOworCisgICAgLy8gRHJhdyB0aGUgY2xlYXIg
cXVhZAorICAgIG1EZXZpY2VDb250ZXh0LT5EcmF3KDQsIDApOworCisgICAgLy8gQ2xlYW4gdXAK
KyAgICBtYXJrQWxsU3RhdGVEaXJ0eSgpOworfQorCit2b2lkIFJlbmRlcmVyMTE6Om1hcmtBbGxT
dGF0ZURpcnR5KCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGludCBydEluZGV4ID0gMDsgcnRJbmRl
eCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTOyBydEluZGV4KyspCisgICAg
eworICAgICAgICBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbHNbcnRJbmRleF0gPSAwOworICAg
IH0KKyAgICBtQXBwbGllZERlcHRoYnVmZmVyU2VyaWFsID0gMDsKKyAgICBtQXBwbGllZFN0ZW5j
aWxidWZmZXJTZXJpYWwgPSAwOworICAgIG1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCA9IGZhbHNl
OworICAgIG1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVSRV9JTUFH
RV9VTklUUzsgaSsrKQorICAgIHsKKyAgICAgICAgbUZvcmNlU2V0VmVydGV4U2FtcGxlclN0YXRl
c1tpXSA9IHRydWU7CisgICAgICAgIG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1tpXSA9IDA7Cisg
ICAgfQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRT
OyBpKyspCisgICAgeworICAgICAgICBtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0ZXNbaV0gPSB0
cnVlOworICAgICAgICBtQ3VyUGl4ZWxUZXh0dXJlU2VyaWFsc1tpXSA9IDA7CisgICAgfQorCisg
ICAgbUZvcmNlU2V0QmxlbmRTdGF0ZSA9IHRydWU7CisgICAgbUZvcmNlU2V0UmFzdGVyU3RhdGUg
PSB0cnVlOworICAgIG1Gb3JjZVNldERlcHRoU3RlbmNpbFN0YXRlID0gdHJ1ZTsKKyAgICBtRm9y
Y2VTZXRTY2lzc29yID0gdHJ1ZTsKKyAgICBtRm9yY2VTZXRWaWV3cG9ydCA9IHRydWU7CisKKyAg
ICBtQXBwbGllZElCU2VyaWFsID0gMDsKKyAgICBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbCA9IDA7
CisgICAgbUFwcGxpZWRJQk9mZnNldCA9IDA7CisKKyAgICBtQXBwbGllZFByb2dyYW1CaW5hcnlT
ZXJpYWwgPSAwOworICAgIG1lbXNldCgmbUFwcGxpZWRWZXJ0ZXhDb25zdGFudHMsIDAsIHNpemVv
ZihkeF9WZXJ0ZXhDb25zdGFudHMpKTsKKyAgICBtZW1zZXQoJm1BcHBsaWVkUGl4ZWxDb25zdGFu
dHMsIDAsIHNpemVvZihkeF9QaXhlbENvbnN0YW50cykpOworCisgICAgbUlucHV0TGF5b3V0Q2Fj
aGUubWFya0RpcnR5KCk7CisKKyAgICBtQ3VycmVudFZlcnRleENvbnN0YW50QnVmZmVyID0gTlVM
TDsKKyAgICBtQ3VycmVudFBpeGVsQ29uc3RhbnRCdWZmZXIgPSBOVUxMOworICAgIG1DdXJyZW50
R2VvbWV0cnlDb25zdGFudEJ1ZmZlciA9IE5VTEw7CisKKyAgICBtQ3VycmVudFByaW1pdGl2ZVRv
cG9sb2d5ID0gRDNEX1BSSU1JVElWRV9UT1BPTE9HWV9VTkRFRklORUQ7Cit9CisKK3ZvaWQgUmVu
ZGVyZXIxMTo6cmVsZWFzZURldmljZVJlc291cmNlcygpCit7CisgICAgbVN0YXRlQ2FjaGUuY2xl
YXIoKTsKKyAgICBtSW5wdXRMYXlvdXRDYWNoZS5jbGVhcigpOworCisgICAgZGVsZXRlIG1WZXJ0
ZXhEYXRhTWFuYWdlcjsKKyAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBOVUxMOworCisgICAgZGVs
ZXRlIG1JbmRleERhdGFNYW5hZ2VyOworICAgIG1JbmRleERhdGFNYW5hZ2VyID0gTlVMTDsKKwor
ICAgIGRlbGV0ZSBtTGluZUxvb3BJQjsKKyAgICBtTGluZUxvb3BJQiA9IE5VTEw7CisKKyAgICBk
ZWxldGUgbVRyaWFuZ2xlRmFuSUI7CisgICAgbVRyaWFuZ2xlRmFuSUIgPSBOVUxMOworCisgICAg
U2FmZVJlbGVhc2UobUNvcHlWQik7CisgICAgU2FmZVJlbGVhc2UobUNvcHlTYW1wbGVyKTsKKyAg
ICBTYWZlUmVsZWFzZShtQ29weUlMKTsKKyAgICBTYWZlUmVsZWFzZShtQ29weUlMKTsKKyAgICBT
YWZlUmVsZWFzZShtQ29weVZTKTsKKyAgICBTYWZlUmVsZWFzZShtQ29weVJHQkFQUyk7CisgICAg
U2FmZVJlbGVhc2UobUNvcHlSR0JQUyk7CisgICAgU2FmZVJlbGVhc2UobUNvcHlMdW1QUyk7Cisg
ICAgU2FmZVJlbGVhc2UobUNvcHlMdW1BbHBoYVBTKTsKKworICAgIG1Db3B5UmVzb3VyY2VzSW5p
dGlhbGl6ZWQgPSBmYWxzZTsKKworICAgIFNhZmVSZWxlYXNlKG1DbGVhclZCKTsKKyAgICBTYWZl
UmVsZWFzZShtQ2xlYXJJTCk7CisgICAgU2FmZVJlbGVhc2UobUNsZWFyVlMpOworICAgIFNhZmVS
ZWxlYXNlKG1DbGVhclNpbmdsZVBTKTsKKyAgICBTYWZlUmVsZWFzZShtQ2xlYXJNdWx0aXBsZVBT
KTsKKyAgICBTYWZlUmVsZWFzZShtQ2xlYXJTY2lzc29yUlMpOworICAgIFNhZmVSZWxlYXNlKG1D
bGVhck5vU2Npc3NvclJTKTsKKworICAgIG1DbGVhclJlc291cmNlc0luaXRpYWxpemVkID0gZmFs
c2U7CisKKyAgICBTYWZlUmVsZWFzZShtRHJpdmVyQ29uc3RhbnRCdWZmZXJWUyk7CisgICAgU2Fm
ZVJlbGVhc2UobURyaXZlckNvbnN0YW50QnVmZmVyUFMpOworICAgIFNhZmVSZWxlYXNlKG1TeW5j
UXVlcnkpOworfQorCit2b2lkIFJlbmRlcmVyMTE6Om5vdGlmeURldmljZUxvc3QoKQoreworICAg
IG1EZXZpY2VMb3N0ID0gdHJ1ZTsKKyAgICBtRGlzcGxheS0+bm90aWZ5RGV2aWNlTG9zdCgpOwor
fQorCitib29sIFJlbmRlcmVyMTE6OmlzRGV2aWNlTG9zdCgpCit7CisgICAgcmV0dXJuIG1EZXZp
Y2VMb3N0OworfQorCisvLyBzZXQgbm90aWZ5IHRvIHRydWUgdG8gYnJvYWRjYXN0IGEgbWVzc2Fn
ZSB0byBhbGwgY29udGV4dHMgb2YgdGhlIGRldmljZSBsb3NzCitib29sIFJlbmRlcmVyMTE6OnRl
c3REZXZpY2VMb3N0KGJvb2wgbm90aWZ5KQoreworICAgIGJvb2wgaXNMb3N0ID0gZmFsc2U7CisK
KyAgICAvLyBHZXRSZW1vdmVkUmVhc29uIGlzIHVzZWQgdG8gdGVzdCBpZiB0aGUgZGV2aWNlIGlz
IHJlbW92ZWQKKyAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkdldERldmljZVJlbW92ZWRS
ZWFzb24oKTsKKyAgICBpc0xvc3QgPSBkM2QxMTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KTsK
KworICAgIGlmIChpc0xvc3QpCisgICAgeworICAgICAgICAvLyBMb2cgZXJyb3IgaWYgdGhpcyBp
cyBhIG5ldyBkZXZpY2UgbG9zdCBldmVudAorICAgICAgICBpZiAobURldmljZUxvc3QgPT0gZmFs
c2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiVGhlIEQzRDExIGRldmljZSB3YXMgcmVt
b3ZlZDogMHglMDhYIiwgcmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGVuc3VyZSB3
ZSBub3RlIHRoZSBkZXZpY2UgbG9zcyAtLQorICAgICAgICAvLyB3ZSdsbCBwcm9iYWJseSBnZXQg
dGhpcyBkb25lIGFnYWluIGJ5IG5vdGlmeURldmljZUxvc3QKKyAgICAgICAgLy8gYnV0IGJlc3Qg
dG8gcmVtZW1iZXIgaXQhCisgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCB3YW50IHRvIGNs
ZWFyIHRoZSBkZXZpY2UgbG9zcyBzdGF0dXMgaGVyZQorICAgICAgICAvLyAtLSB0aGlzIG5lZWRz
IHRvIGJlIGRvbmUgYnkgcmVzZXREZXZpY2UKKyAgICAgICAgbURldmljZUxvc3QgPSB0cnVlOwor
ICAgICAgICBpZiAobm90aWZ5KQorICAgICAgICB7CisgICAgICAgICAgICBub3RpZnlEZXZpY2VM
b3N0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gaXNMb3N0OworfQorCitib29s
IFJlbmRlcmVyMTE6OnRlc3REZXZpY2VSZXNldHRhYmxlKCkKK3sKKyAgICAvLyBkZXRlcm1pbmUg
aWYgdGhlIGRldmljZSBpcyByZXNldHRhYmxlIGJ5IGNyZWF0aW5nIGEgZHVtbXkgZGV2aWNlCisg
ICAgUEZOX0QzRDExX0NSRUFURV9ERVZJQ0UgRDNEMTFDcmVhdGVEZXZpY2UgPSAoUEZOX0QzRDEx
X0NSRUFURV9ERVZJQ0UpR2V0UHJvY0FkZHJlc3MobUQzZDExTW9kdWxlLCAiRDNEMTFDcmVhdGVE
ZXZpY2UiKTsKKworICAgIGlmIChEM0QxMUNyZWF0ZURldmljZSA9PSBOVUxMKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEQzRF9GRUFUVVJFX0xFVkVMIGZlYXR1
cmVMZXZlbHNbXSA9CisgICAgeworICAgICAgICBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wLAorICAg
ICAgICBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xLAorICAgICAgICBEM0RfRkVBVFVSRV9MRVZFTF8x
MF8wLAorICAgIH07CisKKyAgICBJRDNEMTFEZXZpY2UqIGR1bW15RGV2aWNlOworICAgIEQzRF9G
RUFUVVJFX0xFVkVMIGR1bW15RmVhdHVyZUxldmVsOworICAgIElEM0QxMURldmljZUNvbnRleHQq
IGR1bW15Q29udGV4dDsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gRDNEMTFDcmVhdGVEZXZpY2Uo
TlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRF9EUklWRVJf
VFlQRV9IQVJEV0FSRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V
TEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjaWYgZGVmaW5lZChf
REVCVUcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0QxMV9DUkVB
VEVfREVWSUNFX0RFQlVHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
I2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVMZXZlbHMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBcnJheVNpemUoZmVhdHVyZUxldmVscyksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0QxMV9TREtfVkVSU0lPTiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkdW1teURldmljZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkdW1teUZlYXR1cmVMZXZlbCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkdW1teUNvbnRleHQpOworCisgICAgaWYg
KCFtRGV2aWNlIHx8IEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGR1bW15Q29udGV4dC0+UmVsZWFzZSgpOworICAgIGR1bW15RGV2aWNl
LT5SZWxlYXNlKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJlcjExOjpy
ZWxlYXNlKCkKK3sKKyAgICByZWxlYXNlRGV2aWNlUmVzb3VyY2VzKCk7CisKKyAgICBpZiAobUR4
Z2lGYWN0b3J5KQorICAgIHsKKyAgICAgICAgbUR4Z2lGYWN0b3J5LT5SZWxlYXNlKCk7CisgICAg
ICAgIG1EeGdpRmFjdG9yeSA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKG1EeGdpQWRhcHRlcikK
KyAgICB7CisgICAgICAgIG1EeGdpQWRhcHRlci0+UmVsZWFzZSgpOworICAgICAgICBtRHhnaUFk
YXB0ZXIgPSBOVUxMOworICAgIH0KKworICAgIGlmIChtRGV2aWNlQ29udGV4dCkKKyAgICB7Cisg
ICAgICAgIG1EZXZpY2VDb250ZXh0LT5DbGVhclN0YXRlKCk7CisgICAgICAgIG1EZXZpY2VDb250
ZXh0LT5GbHVzaCgpOworICAgICAgICBtRGV2aWNlQ29udGV4dC0+UmVsZWFzZSgpOworICAgICAg
ICBtRGV2aWNlQ29udGV4dCA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKG1EZXZpY2UpCisgICAg
eworICAgICAgICBtRGV2aWNlLT5SZWxlYXNlKCk7CisgICAgICAgIG1EZXZpY2UgPSBOVUxMOwor
ICAgIH0KKworICAgIGlmIChtRDNkMTFNb2R1bGUpCisgICAgeworICAgICAgICBGcmVlTGlicmFy
eShtRDNkMTFNb2R1bGUpOworICAgICAgICBtRDNkMTFNb2R1bGUgPSBOVUxMOworICAgIH0KKwor
ICAgIGlmIChtRHhnaU1vZHVsZSkKKyAgICB7CisgICAgICAgIEZyZWVMaWJyYXJ5KG1EeGdpTW9k
dWxlKTsKKyAgICAgICAgbUR4Z2lNb2R1bGUgPSBOVUxMOworICAgIH0KK30KKworYm9vbCBSZW5k
ZXJlcjExOjpyZXNldERldmljZSgpCit7CisgICAgLy8gcmVjcmVhdGUgZXZlcnl0aGluZworICAg
IHJlbGVhc2UoKTsKKyAgICBFR0xpbnQgcmVzdWx0ID0gaW5pdGlhbGl6ZSgpOworCisgICAgaWYg
KHJlc3VsdCAhPSBFR0xfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIEVSUigiQ291bGQgbm90IHJl
aW5pdGlhbGl6ZSBEM0QxMSBkZXZpY2U6ICUwOFgiLCByZXN1bHQpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgbURldmljZUxvc3QgPSBmYWxzZTsKKworICAgIHJldHVybiB0
cnVlOworfQorCitEV09SRCBSZW5kZXJlcjExOjpnZXRBZGFwdGVyVmVuZG9yKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbUFkYXB0ZXJEZXNjcmlwdGlvbi5WZW5kb3JJZDsKK30KKworc3RkOjpzdHJp
bmcgUmVuZGVyZXIxMTo6Z2V0UmVuZGVyZXJEZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgc3Rk
Ojpvc3RyaW5nc3RyZWFtIHJlbmRlcmVyU3RyaW5nOworCisgICAgcmVuZGVyZXJTdHJpbmcgPDwg
bURlc2NyaXB0aW9uOworICAgIHJlbmRlcmVyU3RyaW5nIDw8ICIgRGlyZWN0M0QxMSI7CisKKyAg
ICByZW5kZXJlclN0cmluZyA8PCAiIHZzXyIgPDwgZ2V0TWFqb3JTaGFkZXJNb2RlbCgpIDw8ICJf
IiA8PCBnZXRNaW5vclNoYWRlck1vZGVsKCk7CisgICAgcmVuZGVyZXJTdHJpbmcgPDwgIiBwc18i
IDw8IGdldE1ham9yU2hhZGVyTW9kZWwoKSA8PCAiXyIgPDwgZ2V0TWlub3JTaGFkZXJNb2RlbCgp
OworCisgICAgcmV0dXJuIHJlbmRlcmVyU3RyaW5nLnN0cigpOworfQorCitHVUlEIFJlbmRlcmVy
MTE6OmdldEFkYXB0ZXJJZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICAvLyBVc2UgdGhlIGFkYXB0
ZXIgTFVJRCBhcyBvdXIgYWRhcHRlciBJRAorICAgIC8vIFRoaXMgbnVtYmVyIGlzIGxvY2FsIHRv
IGEgbWFjaGluZSBpcyBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgdW5pcXVlIGJldHdlZW4gcmVzdGFy
dHMKKyAgICBNRVRBX0FTU0VSVChzaXplb2YoTFVJRCkgPD0gc2l6ZW9mKEdVSUQpKTsKKyAgICBH
VUlEIGFkYXB0ZXJJZCA9IHswfTsKKyAgICBtZW1jcHkoJmFkYXB0ZXJJZCwgJm1BZGFwdGVyRGVz
Y3JpcHRpb24uQWRhcHRlckx1aWQsIHNpemVvZihMVUlEKSk7CisgICAgcmV0dXJuIGFkYXB0ZXJJ
ZDsKK30KKworYm9vbCBSZW5kZXJlcjExOjpnZXRCR1JBVGV4dHVyZVN1cHBvcnQoKSBjb25zdAor
eworICAgIHJldHVybiBtQkdSQVRleHR1cmVTdXBwb3J0OworfQorCitib29sIFJlbmRlcmVyMTE6
OmdldERYVDFUZXh0dXJlU3VwcG9ydCgpCit7CisgICAgcmV0dXJuIG1EWFQxVGV4dHVyZVN1cHBv
cnQ7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RFhUM1RleHR1cmVTdXBwb3J0KCkKK3sKKyAg
ICByZXR1cm4gbURYVDNUZXh0dXJlU3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjExOjpnZXRE
WFQ1VGV4dHVyZVN1cHBvcnQoKQoreworICAgIHJldHVybiBtRFhUNVRleHR1cmVTdXBwb3J0Owor
fQorCitib29sIFJlbmRlcmVyMTE6OmdldERlcHRoVGV4dHVyZVN1cHBvcnQoKSBjb25zdAorewor
ICAgIHJldHVybiBtRGVwdGhUZXh0dXJlU3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjExOjpn
ZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxl
KQoreworICAgICpyZW5kZXJhYmxlID0gbUZsb2F0MzJSZW5kZXJTdXBwb3J0OworICAgICpmaWx0
ZXJpbmcgPSBtRmxvYXQzMkZpbHRlclN1cHBvcnQ7CisgICAgcmV0dXJuIG1GbG9hdDMyVGV4dHVy
ZVN1cHBvcnQ7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0
KGJvb2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSkKK3sKKyAgICAqcmVuZGVyYWJsZSA9
IG1GbG9hdDE2UmVuZGVyU3VwcG9ydDsKKyAgICAqZmlsdGVyaW5nID0gbUZsb2F0MTZGaWx0ZXJT
dXBwb3J0OworICAgIHJldHVybiBtRmxvYXQxNlRleHR1cmVTdXBwb3J0OworfQorCitib29sIFJl
bmRlcmVyMTE6OmdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCkKK3sKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9y
dCgpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlcmVyMTE6OmdldFRleHR1
cmVGaWx0ZXJBbmlzb3Ryb3B5U3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Zsb2F0IFJlbmRlcmVyMTE6OmdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkgY29uc3QKK3sK
KyAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCisgICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVS
RV9MRVZFTF8xMV8wOgorICAgICAgICByZXR1cm4gRDNEMTFfTUFYX01BWEFOSVNPVFJPUFk7Cisg
ICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAgICBjYXNlIEQzRF9GRUFUVVJF
X0xFVkVMXzEwXzA6CisgICAgICAgIHJldHVybiBEM0QxMF9NQVhfTUFYQU5JU09UUk9QWTsKKyAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30K
KworYm9vbCBSZW5kZXJlcjExOjpnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpCit7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK1JhbmdlIFJlbmRlcmVyMTE6OmdldFZpZXdwb3J0Qm91bmRzKCkgY29uc3QK
K3sKKyAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCisgICAgeworICAgICAgY2FzZSBEM0RfRkVB
VFVSRV9MRVZFTF8xMV8wOgorICAgICAgICByZXR1cm4gUmFuZ2UoRDNEMTFfVklFV1BPUlRfQk9V
TkRTX01JTiwgRDNEMTFfVklFV1BPUlRfQk9VTkRTX01BWCk7CisgICAgICBjYXNlIEQzRF9GRUFU
VVJFX0xFVkVMXzEwXzE6CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6CisgICAg
ICAgIHJldHVybiBSYW5nZShEM0QxMF9WSUVXUE9SVF9CT1VORFNfTUlOLCBEM0QxMF9WSUVXUE9S
VF9CT1VORFNfTUFYKTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJl
dHVybiBSYW5nZSgwLCAwKTsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjExOjpn
ZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0Cit7CisgICAgTUVUQV9BU1NFUlQo
TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGX1NNNCA8PSBnbDo6SU1QTEVNRU5UQVRJT05fTUFY
X1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKKyAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwp
CisgICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgorICAgICAgY2FzZSBE
M0RfRkVBVFVSRV9MRVZFTF8xMF8xOgorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8w
OgorICAgICAgICByZXR1cm4gTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGX1NNNDsKKyAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwor
dW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldE1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMo
KSBjb25zdAoreworICAgIHJldHVybiBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKyBnZXRN
YXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXIx
MTo6Z2V0UmVzZXJ2ZWRWZXJ0ZXhVbmlmb3JtVmVjdG9ycygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IDA7ICAgLy8gRHJpdmVyIHVuaWZvcm1zIGFyZSBzdG9yZWQgaW4gYSBzZXBhcmF0ZSBjb25zdGFu
dCBidWZmZXIKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldFJlc2VydmVkRnJhZ21l
bnRVbmlmb3JtVmVjdG9ycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7ICAgLy8gRHJpdmVyIHVu
aWZvcm1zIGFyZSBzdG9yZWQgaW4gYSBzZXBhcmF0ZSBjb25zdGFudCBidWZmZXIKK30KKwordW5z
aWduZWQgaW50IFJlbmRlcmVyMTE6OmdldE1heFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29uc3QK
K3sKKyAgICBNRVRBX0FTU0VSVChNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SU19EM0QxMSA8PSBE
M0QxMF9SRVFfQ09OU1RBTlRfQlVGRkVSX0VMRU1FTlRfQ09VTlQpOworICAgIEFTU0VSVChtRmVh
dHVyZUxldmVsID49IEQzRF9GRUFUVVJFX0xFVkVMXzEwXzApOworICAgIHJldHVybiBNQVhfVkVS
VEVYX1VOSUZPUk1fVkVDVE9SU19EM0QxMTsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyMTE6
OmdldE1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdAoreworICAgIE1FVEFfQVNTRVJU
KE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlNfRDNEMTEgPD0gRDNEMTBfUkVRX0NPTlNUQU5U
X0JVRkZFUl9FTEVNRU5UX0NPVU5UKTsKKyAgICBBU1NFUlQobUZlYXR1cmVMZXZlbCA+PSBEM0Rf
RkVBVFVSRV9MRVZFTF8xMF8wKTsKKyAgICByZXR1cm4gTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVD
VE9SU19EM0QxMTsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldE1heFZhcnlpbmdW
ZWN0b3JzKCkgY29uc3QKK3sKKyAgICBNRVRBX0FTU0VSVChnbDo6SU1QTEVNRU5UQVRJT05fTUFY
X1ZBUllJTkdfVkVDVE9SUyA9PSBEM0QxMV9WU19PVVRQVVRfUkVHSVNURVJfQ09VTlQpOworICAg
IHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xF
VkVMXzExXzA6CisgICAgICAgIHJldHVybiBEM0QxMV9WU19PVVRQVVRfUkVHSVNURVJfQ09VTlQ7
CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAgICBjYXNlIEQzRF9GRUFU
VVJFX0xFVkVMXzEwXzA6CisgICAgICAgIHJldHVybiBEM0QxMF9WU19PVVRQVVRfUkVHSVNURVJf
Q09VTlQ7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQo
KSBjb25zdAoreworICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNl
IEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEw
XzE6CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6CisgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKworYm9vbCBSZW5kZXJlcjExOjpnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQo
KSBjb25zdAoreworICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNl
IEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEw
XzE6CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6CisgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKworYm9vbCBSZW5kZXJlcjExOjpnZXRJbnN0YW5jaW5nU3VwcG9ydCgpIGNv
bnN0Cit7CisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsKKyAgICAgIGNhc2UgRDNE
X0ZFQVRVUkVfTEVWRUxfMTFfMDoKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToK
KyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCitib29sIFJlbmRlcmVyMTE6OmdldFNoYXJlSGFuZGxlU3VwcG9ydCgpIGNvbnN0
Cit7CisgICAgLy8gV2Ugb25seSBjdXJyZW50bHkgc3VwcG9ydCBzaGFyZSBoYW5kbGVzIHdpdGgg
QkdSQSBzdXJmYWNlcywgYmVjYXVzZQorICAgIC8vIGNocm9tZSBuZWVkcyBCR1JBLiBPbmNlIGNo
cm9tZSBmaXhlcyB0aGlzLCB3ZSBzaG91bGQgYWx3YXlzIHN1cHBvcnQgdGhlbS4KKyAgICAvLyBQ
SVggZG9lc24ndCBzZWVtIHRvIHN1cHBvcnQgdXNpbmcgc2hhcmUgaGFuZGxlcywgc28gZGlzYWJs
ZSB0aGVtLgorICAgIHJldHVybiBnZXRCR1JBVGV4dHVyZVN1cHBvcnQoKSAmJiAhZ2w6OnBlcmZB
Y3RpdmUoKTsKK30KKworYm9vbCBSZW5kZXJlcjExOjpnZXREZXJpdmF0aXZlSW5zdHJ1Y3Rpb25T
dXBwb3J0KCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCisgICAgeworICAg
ICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9M
RVZFTF8xMF8xOgorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0UG9zdFN1YkJ1ZmZlclN1
cHBvcnQoKSBjb25zdAoreworICAgIC8vIEQzRDExIGRvZXMgbm90IHN1cHBvcnQgcHJlc2VudCB3
aXRoIGRpcnR5IHJlY3RhbmdsZXMgdW50aWwgRDNEMTEuMSBhbmQgRFhHSSAxLjIuCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitpbnQgUmVuZGVyZXIxMTo6Z2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNv
bnN0Cit7CisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsKKyAgICAgIGNhc2UgRDNE
X0ZFQVRVUkVfTEVWRUxfMTFfMDogcmV0dXJuIEQzRDExX1NIQURFUl9NQUpPUl9WRVJTSU9OOyAg
IC8vIDUKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMTogcmV0dXJuIEQzRDEwXzFf
U0hBREVSX01BSk9SX1ZFUlNJT047IC8vIDQKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxf
MTBfMDogcmV0dXJuIEQzRDEwX1NIQURFUl9NQUpPUl9WRVJTSU9OOyAgIC8vIDQKKyAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitpbnQgUmVu
ZGVyZXIxMTo6Z2V0TWlub3JTaGFkZXJNb2RlbCgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtRmVh
dHVyZUxldmVsKQorICAgIHsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDogcmV0
dXJuIEQzRDExX1NIQURFUl9NSU5PUl9WRVJTSU9OOyAgIC8vIDAKKyAgICAgIGNhc2UgRDNEX0ZF
QVRVUkVfTEVWRUxfMTBfMTogcmV0dXJuIEQzRDEwXzFfU0hBREVSX01JTk9SX1ZFUlNJT047IC8v
IDEKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDogcmV0dXJuIEQzRDEwX1NIQURF
Ul9NSU5PUl9WRVJTSU9OOyAgIC8vIDAKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAg
ICAgcmV0dXJuIDA7CisgICAgfQorfQorCitmbG9hdCBSZW5kZXJlcjExOjpnZXRNYXhQb2ludFNp
emUoKSBjb25zdAoreworICAgIC8vIGNob29zZSBhIHJlYXNvbmFibGUgbWF4aW11bS4gd2UgZW5m
b3JjZSB0aGlzIGluIHRoZSBzaGFkZXIuCisgICAgLy8gKG5iOiBvbiBhIFJhZGVvbiAyNjAweHQs
IERYOSByZXBvcnRzIGEgMjU2IG1heCBwb2ludCBzaXplKQorICAgIHJldHVybiAxMDI0LjBmOwor
fQorCitpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4Vmlld3BvcnREaW1lbnNpb24oKSBjb25zdAorewor
ICAgIC8vIE1heGltdW0gdmlld3BvcnQgc2l6ZSBtdXN0IGJlIGF0IGxlYXN0IGFzIGxhcmdlIGFz
IHRoZSBsYXJnZXN0IHJlbmRlciBidWZmZXIgKG9yIGxhcmdlcikuCisgICAgLy8gSW4gb3VyIGNh
c2UgcmV0dXJuIHRoZSBtYXhpbXVtIHRleHR1cmUgc2l6ZSwgd2hpY2ggaXMgdGhlIG1heGltdW0g
cmVuZGVyIGJ1ZmZlciBzaXplLgorICAgIE1FVEFfQVNTRVJUKEQzRDExX1JFUV9URVhUVVJFMkRf
VV9PUl9WX0RJTUVOU0lPTiAqIDIgLSAxIDw9IEQzRDExX1ZJRVdQT1JUX0JPVU5EU19NQVgpOwor
ICAgIE1FVEFfQVNTRVJUKEQzRDEwX1JFUV9URVhUVVJFMkRfVV9PUl9WX0RJTUVOU0lPTiAqIDIg
LSAxIDw9IEQzRDEwX1ZJRVdQT1JUX0JPVU5EU19NQVgpOworCisgICAgc3dpdGNoIChtRmVhdHVy
ZUxldmVsKQorICAgIHsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDogCisgICAg
ICAgIHJldHVybiBEM0QxMV9SRVFfVEVYVFVSRTJEX1VfT1JfVl9ESU1FTlNJT047ICAgLy8gMTYz
ODQKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAgICAgIGNhc2UgRDNEX0ZF
QVRVUkVfTEVWRUxfMTBfMDogCisgICAgICAgIHJldHVybiBEM0QxMF9SRVFfVEVYVFVSRTJEX1Vf
T1JfVl9ESU1FTlNJT047ICAgLy8gODE5MgorICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsg
ICAgICAKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitpbnQgUmVuZGVyZXIxMTo6Z2V0
TWF4VGV4dHVyZVdpZHRoKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCisg
ICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOiByZXR1cm4gRDNEMTFfUkVR
X1RFWFRVUkUyRF9VX09SX1ZfRElNRU5TSU9OOyAgIC8vIDE2Mzg0CisgICAgICBjYXNlIEQzRF9G
RUFUVVJFX0xFVkVMXzEwXzE6CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6IHJl
dHVybiBEM0QxMF9SRVFfVEVYVFVSRTJEX1VfT1JfVl9ESU1FTlNJT047ICAgLy8gODE5MgorICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK2lu
dCBSZW5kZXJlcjExOjpnZXRNYXhUZXh0dXJlSGVpZ2h0KCkgY29uc3QKK3sKKyAgICBzd2l0Y2gg
KG1GZWF0dXJlTGV2ZWwpCisgICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8w
OiByZXR1cm4gRDNEMTFfUkVRX1RFWFRVUkUyRF9VX09SX1ZfRElNRU5TSU9OOyAgIC8vIDE2Mzg0
CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAgICBjYXNlIEQzRF9GRUFU
VVJFX0xFVkVMXzEwXzA6IHJldHVybiBEM0QxMF9SRVFfVEVYVFVSRTJEX1VfT1JfVl9ESU1FTlNJ
T047ICAgLy8gODE5MgorICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICByZXR1cm4g
MDsKKyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0MzJCaXRJbmRleFN1cHBvcnQoKSBj
b25zdAoreworICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQz
RF9GRUFUVVJFX0xFVkVMXzExXzA6IAorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8x
OgorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOiByZXR1cm4gRDNEMTBfUkVRX0RS
QVdJTkRFWEVEX0lOREVYX0NPVU5UXzJfVE9fRVhQID49IDMyOyAgIC8vIHRydWUKKyAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW50
IFJlbmRlcmVyMTE6OmdldE1pblN3YXBJbnRlcnZhbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7
Cit9CisKK2ludCBSZW5kZXJlcjExOjpnZXRNYXhTd2FwSW50ZXJ2YWwoKSBjb25zdAoreworICAg
IHJldHVybiA0OworfQorCitpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4U3VwcG9ydGVkU2FtcGxlcygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1NYXhTdXBwb3J0ZWRTYW1wbGVzOworfQorCitpbnQgUmVu
ZGVyZXIxMTo6Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMoRFhHSV9GT1JNQVQgZm9ybWF0LCB1
bnNpZ25lZCBpbnQgcmVxdWVzdGVkKSBjb25zdAoreworICAgIGlmIChyZXF1ZXN0ZWQgPT0gMCkK
KyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIE11bHRpc2FtcGxlU3VwcG9y
dE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1NdWx0aXNhbXBsZVN1cHBvcnRNYXAuZmluZChm
b3JtYXQpOworICAgIGlmIChpdGVyICE9IG1NdWx0aXNhbXBsZVN1cHBvcnRNYXAuZW5kKCkpCisg
ICAgeworICAgICAgICBjb25zdCBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvJiBpbmZvID0gaXRlci0+
c2Vjb25kOworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gcmVxdWVzdGVkIC0gMTsgaSA8
IEQzRDExX01BWF9NVUxUSVNBTVBMRV9TQU1QTEVfQ09VTlQ7IGkrKykKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKGluZm8ucXVhbGl0eUxldmVsc1tpXSA+IDApCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAxOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0
TWF4UmVuZGVyVGFyZ2V0cygpIGNvbnN0Cit7CisgICAgTUVUQV9BU1NFUlQoRDNEMTFfU0lNVUxU
QU5FT1VTX1JFTkRFUl9UQVJHRVRfQ09VTlQgPD0gZ2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFX
X0JVRkZFUlMpOworICAgIE1FVEFfQVNTRVJUKEQzRDEwX1NJTVVMVEFORU9VU19SRU5ERVJfVEFS
R0VUX0NPVU5UIDw9IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTKTsKKworICAg
IHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xF
VkVMXzExXzA6CisgICAgICAgIHJldHVybiBEM0QxMV9TSU1VTFRBTkVPVVNfUkVOREVSX1RBUkdF
VF9DT1VOVDsgIC8vIDgKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAgICAg
IGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAgICAgICAgLy8gRmVhdHVyZSBsZXZlbCAx
MC4wIGFuZCAxMC4xIGNhcmRzIHBlcmZvcm0gdmVyeSBwb29ybHkgd2hlbiB0aGUgcGl4ZWwgc2hh
ZGVyCisgICAgICAgIC8vIG91dHB1dHMgdG8gbXVsdGlwbGUgUlRzIHRoYXQgYXJlIG5vdCBib3Vu
ZC4KKyAgICAgICAgLy8gVE9ETzogUmVtb3ZlIHBpeGVsIHNoYWRlciBvdXRwdXRzIGZvciByZW5k
ZXIgdGFyZ2V0cyB0aGF0IGFyZSBub3QgYm91bmQuCisgICAgICAgIHJldHVybiAxOworICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAg
fQorfQorCitib29sIFJlbmRlcmVyMTE6OmNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZTJEICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzb3VyY2UpCit7
CisgICAgaWYgKHNvdXJjZSAmJiBkZXN0KQorICAgIHsKKyAgICAgICAgVGV4dHVyZVN0b3JhZ2Ux
MV8yRCAqc291cmNlMTEgPSBUZXh0dXJlU3RvcmFnZTExXzJEOjptYWtlVGV4dHVyZVN0b3JhZ2Ux
MV8yRChzb3VyY2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICAgICAgVGV4dHVyZVN0b3Jh
Z2UxMV8yRCAqZGVzdDExID0gVGV4dHVyZVN0b3JhZ2UxMV8yRDo6bWFrZVRleHR1cmVTdG9yYWdl
MTFfMkQoZGVzdC0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworCisgICAgICAgIG1EZXZpY2VDb250
ZXh0LT5Db3B5UmVzb3VyY2UoZGVzdDExLT5nZXRCYXNlVGV4dHVyZSgpLCBzb3VyY2UxMS0+Z2V0
QmFzZVRleHR1cmUoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJlcjExOjpjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUg
KnNvdXJjZSkKK3sKKyAgICBpZiAoc291cmNlICYmIGRlc3QpCisgICAgeworICAgICAgICBUZXh0
dXJlU3RvcmFnZTExX0N1YmUgKnNvdXJjZTExID0gVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjptYWtl
VGV4dHVyZVN0b3JhZ2UxMV9DdWJlKHNvdXJjZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAg
ICAgICBUZXh0dXJlU3RvcmFnZTExX0N1YmUgKmRlc3QxMSA9IFRleHR1cmVTdG9yYWdlMTFfQ3Vi
ZTo6bWFrZVRleHR1cmVTdG9yYWdlMTFfQ3ViZShkZXN0LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7
CisKKyAgICAgICAgbURldmljZUNvbnRleHQtPkNvcHlSZXNvdXJjZShkZXN0MTEtPmdldEJhc2VU
ZXh0dXJlKCksIHNvdXJjZTExLT5nZXRCYXNlVGV4dHVyZSgpKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlcmVyMTE6OmNv
cHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xl
ICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
MkQgKnN0b3JhZ2UsIEdMaW50IGxldmVsKQoreworICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9y
YnVmZmVyID0gZnJhbWVidWZmZXItPmdldFJlYWRDb2xvcmJ1ZmZlcigpOworICAgIGlmICghY29s
b3JidWZmZXIpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgY29s
b3IgYnVmZmVyIGZyb20gdGhlIGZyYW1lIGJ1ZmZlci4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisgICAgUmVuZGVyVGFyZ2V0
MTEgKnNvdXJjZVJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0
MTEoY29sb3JidWZmZXItPmdldFJlbmRlclRhcmdldCgpKTsKKyAgICBpZiAoIXNvdXJjZVJlbmRl
clRhcmdldCkKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5k
ZXIgdGFyZ2V0IGZyb20gdGhlIGZyYW1lIGJ1ZmZlci4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisgICAgSUQzRDExU2hhZGVy
UmVzb3VyY2VWaWV3ICpzb3VyY2UgPSBzb3VyY2VSZW5kZXJUYXJnZXQtPmdldFNoYWRlclJlc291
cmNlVmlldygpOworICAgIGlmICghc291cmNlKQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQg
dG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQgdmlldyBmcm9tIHRoZSByZW5kZXIgdGFyZ2V0
LiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsK
KyAgICB9CisKKyAgICBUZXh0dXJlU3RvcmFnZTExXzJEICpzdG9yYWdlMTEgPSBUZXh0dXJlU3Rv
cmFnZTExXzJEOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yRChzdG9yYWdlLT5nZXRTdG9yYWdlSW5z
dGFuY2UoKSk7CisgICAgaWYgKCFzdG9yYWdlMTEpCisgICAgeworICAgICAgICBFUlIoIkZhaWxl
ZCB0byByZXRyaWV2ZSB0aGUgdGV4dHVyZSBzdG9yYWdlIGZyb20gdGhlIGRlc3RpbmF0aW9uLiIp
OworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAg
ICB9CisKKyAgICBSZW5kZXJUYXJnZXQxMSAqZGVzdFJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdl
dDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoc3RvcmFnZTExLT5nZXRSZW5kZXJUYXJnZXQobGV2ZWwp
KTsKKyAgICBpZiAoIWRlc3RSZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBFUlIoIkZhaWxl
ZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCBmcm9tIHRoZSBkZXN0aW5hdGlvbiBzdG9y
YWdlLiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNl
KTsKKyAgICB9CisKKyAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpkZXN0ID0gZGVzdFJlbmRl
clRhcmdldC0+Z2V0UmVuZGVyVGFyZ2V0VmlldygpOworICAgIGlmICghZGVzdCkKKyAgICB7Cisg
ICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0IHZpZXcgZnJv
bSB0aGUgZGVzdGluYXRpb24gcmVuZGVyIHRhcmdldC4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisgICAgZ2w6OlJlY3Rhbmds
ZSBkZXN0UmVjdDsKKyAgICBkZXN0UmVjdC54ID0geG9mZnNldDsKKyAgICBkZXN0UmVjdC55ID0g
eW9mZnNldDsKKyAgICBkZXN0UmVjdC53aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGg7CisgICAgZGVz
dFJlY3QuaGVpZ2h0ID0gc291cmNlUmVjdC5oZWlnaHQ7CisKKyAgICBib29sIHJldCA9IGNvcHlU
ZXh0dXJlKHNvdXJjZSwgc291cmNlUmVjdCwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgp
LCBzb3VyY2VSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdCwgZGVzdFJlY3QsIGRlc3RSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIGRlc3RS
ZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCBkZXN0Rm9ybWF0KTsKKworICAgIHJldHVybiByZXQ7
Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCkKK3sKKyAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1l
YnVmZmVyLT5nZXRSZWFkQ29sb3JidWZmZXIoKTsKKyAgICBpZiAoIWNvbG9yYnVmZmVyKQorICAg
IHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIGNvbG9yIGJ1ZmZlciBmcm9t
IHRoZSBmcmFtZSBidWZmZXIuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSwgZmFsc2UpOworICAgIH0KKworICAgIFJlbmRlclRhcmdldDExICpzb3VyY2VSZW5k
ZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGNvbG9yYnVmZmVy
LT5nZXRSZW5kZXJUYXJnZXQoKSk7CisgICAgaWYgKCFzb3VyY2VSZW5kZXJUYXJnZXQpCisgICAg
eworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCBmcm9t
IHRoZSBmcmFtZSBidWZmZXIuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSwgZmFsc2UpOworICAgIH0KKworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAq
c291cmNlID0gc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRTaGFkZXJSZXNvdXJjZVZpZXcoKTsKKyAg
ICBpZiAoIXNvdXJjZSkKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRo
ZSByZW5kZXIgdGFyZ2V0IHZpZXcgZnJvbSB0aGUgcmVuZGVyIHRhcmdldC4iKTsKKyAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisgICAg
VGV4dHVyZVN0b3JhZ2UxMV9DdWJlICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFnZTExX0N1YmU6
Om1ha2VUZXh0dXJlU3RvcmFnZTExX0N1YmUoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkp
OworICAgIGlmICghc3RvcmFnZTExKQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0
cmlldmUgdGhlIHRleHR1cmUgc3RvcmFnZSBmcm9tIHRoZSBkZXN0aW5hdGlvbi4iKTsKKyAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisg
ICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3RSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFr
ZVJlbmRlclRhcmdldDExKHN0b3JhZ2UxMS0+Z2V0UmVuZGVyVGFyZ2V0KHRhcmdldCwgbGV2ZWwp
KTsKKyAgICBpZiAoIWRlc3RSZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBFUlIoIkZhaWxl
ZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCBmcm9tIHRoZSBkZXN0aW5hdGlvbiBzdG9y
YWdlLiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNl
KTsKKyAgICB9CisKKyAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpkZXN0ID0gZGVzdFJlbmRl
clRhcmdldC0+Z2V0UmVuZGVyVGFyZ2V0VmlldygpOworICAgIGlmICghZGVzdCkKKyAgICB7Cisg
ICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0IHZpZXcgZnJv
bSB0aGUgZGVzdGluYXRpb24gcmVuZGVyIHRhcmdldC4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisgICAgZ2w6OlJlY3Rhbmds
ZSBkZXN0UmVjdDsKKyAgICBkZXN0UmVjdC54ID0geG9mZnNldDsKKyAgICBkZXN0UmVjdC55ID0g
eW9mZnNldDsKKyAgICBkZXN0UmVjdC53aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGg7CisgICAgZGVz
dFJlY3QuaGVpZ2h0ID0gc291cmNlUmVjdC5oZWlnaHQ7CisKKyAgICBib29sIHJldCA9IGNvcHlU
ZXh0dXJlKHNvdXJjZSwgc291cmNlUmVjdCwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgp
LCBzb3VyY2VSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdCwgZGVzdFJlY3QsIGRlc3RSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIGRlc3RS
ZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCBkZXN0Rm9ybWF0KTsKKworICAgIHJldHVybiByZXQ7
Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Y29weVRleHR1cmUoSUQzRDExU2hhZGVyUmVzb3VyY2VW
aWV3ICpzb3VyY2UsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZUFyZWEsIHVuc2lnbmVkIGlu
dCBzb3VyY2VXaWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZGVzdCwgY29uc3QgZ2w6OlJl
Y3RhbmdsZSAmZGVzdEFyZWEsIHVuc2lnbmVkIGludCBkZXN0V2lkdGgsIHVuc2lnbmVkIGludCBk
ZXN0SGVpZ2h0LCBHTGVudW0gZGVzdEZvcm1hdCkKK3sKKyAgICBIUkVTVUxUIHJlc3VsdDsKKwor
ICAgIGlmICghbUNvcHlSZXNvdXJjZXNJbml0aWFsaXplZCkKKyAgICB7CisgICAgICAgIEFTU0VS
VCghbUNvcHlWQiAmJiAhbUNvcHlTYW1wbGVyICYmICFtQ29weUlMICYmICFtQ29weVZTICYmICFt
Q29weVJHQkFQUyAmJiAhbUNvcHlSR0JQUyAmJiAhbUNvcHlMdW1QUyAmJiAhbUNvcHlMdW1BbHBo
YVBTKTsKKworICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyB2YkRlc2M7CisgICAgICAgIHZiRGVz
Yy5CeXRlV2lkdGggPSBzaXplb2YoZDNkMTE6OlBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgpICogNDsK
KyAgICAgICAgdmJEZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfRFlOQU1JQzsKKyAgICAgICAgdmJE
ZXNjLkJpbmRGbGFncyA9IEQzRDExX0JJTkRfVkVSVEVYX0JVRkZFUjsKKyAgICAgICAgdmJEZXNj
LkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsKKyAgICAgICAgdmJEZXNj
Lk1pc2NGbGFncyA9IDA7CisgICAgICAgIHZiRGVzYy5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsK
KworICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVCdWZmZXIoJnZiRGVzYywgTlVMTCwg
Jm1Db3B5VkIpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICBk
M2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5VkIsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSB2ZXJ0
ZXggYnVmZmVyIik7CisKKyAgICAgICAgRDNEMTFfU0FNUExFUl9ERVNDIHNhbXBsZXJEZXNjOwor
ICAgICAgICBzYW1wbGVyRGVzYy5GaWx0ZXIgPSBEM0QxMV9GSUxURVJfTUlOX01BR19NSVBfTElO
RUFSOworICAgICAgICBzYW1wbGVyRGVzYy5BZGRyZXNzVSA9IEQzRDExX1RFWFRVUkVfQUREUkVT
U19DTEFNUDsKKyAgICAgICAgc2FtcGxlckRlc2MuQWRkcmVzc1YgPSBEM0QxMV9URVhUVVJFX0FE
RFJFU1NfQ0xBTVA7CisgICAgICAgIHNhbXBsZXJEZXNjLkFkZHJlc3NXID0gRDNEMTFfVEVYVFVS
RV9BRERSRVNTX0NMQU1QOworICAgICAgICBzYW1wbGVyRGVzYy5NaXBMT0RCaWFzID0gMC4wZjsK
KyAgICAgICAgc2FtcGxlckRlc2MuTWF4QW5pc290cm9weSA9IDA7CisgICAgICAgIHNhbXBsZXJE
ZXNjLkNvbXBhcmlzb25GdW5jID0gRDNEMTFfQ09NUEFSSVNPTl9ORVZFUjsKKyAgICAgICAgc2Ft
cGxlckRlc2MuQm9yZGVyQ29sb3JbMF0gPSAwLjBmOworICAgICAgICBzYW1wbGVyRGVzYy5Cb3Jk
ZXJDb2xvclsxXSA9IDAuMGY7CisgICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzJdID0g
MC4wZjsKKyAgICAgICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbM10gPSAwLjBmOworICAgICAg
ICBzYW1wbGVyRGVzYy5NaW5MT0QgPSAwLjBmOworICAgICAgICBzYW1wbGVyRGVzYy5NYXhMT0Qg
PSAwLjBmOworCisgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVNhbXBsZXJTdGF0ZSgm
c2FtcGxlckRlc2MsICZtQ29weVNhbXBsZXIpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOworICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5U2FtcGxlciwgIlJlbmRl
cmVyMTEgY29weSBzYW1wbGVyIik7CisKKyAgICAgICAgRDNEMTFfSU5QVVRfRUxFTUVOVF9ERVND
IHF1YWRMYXlvdXRbXSA9CisgICAgICAgIHsKKyAgICAgICAgICAgIHsgIlBPU0lUSU9OIiwgMCwg
RFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCAwLCAwLCBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RB
VEEsIDAgfSwKKyAgICAgICAgICAgIHsgIlRFWENPT1JEIiwgMCwgRFhHSV9GT1JNQVRfUjMyRzMy
X0ZMT0FULCAwLCA4LCBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAgfSwKKyAgICAgICAg
fTsKKworICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVJbnB1dExheW91dChxdWFkTGF5
b3V0LCAyLCBnX1ZTX1Bhc3N0aHJvdWdoLCBzaXplb2YoZ19WU19QYXNzdGhyb3VnaCksICZtQ29w
eUlMKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgZDNkMTE6
OlNldERlYnVnTmFtZShtQ29weUlMLCAiUmVuZGVyZXIxMSBjb3B5IHRleHR1cmUgaW5wdXQgbGF5
b3V0Iik7CisKKyAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKGdf
VlNfUGFzc3Rocm91Z2gsIHNpemVvZihnX1ZTX1Bhc3N0aHJvdWdoKSwgTlVMTCwgJm1Db3B5VlMp
OworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICBkM2QxMTo6U2V0
RGVidWdOYW1lKG1Db3B5VlMsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSB2ZXJ0ZXggc2hhZGVy
Iik7CisKKyAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19Q
YXNzdGhyb3VnaFJHQkEsIHNpemVvZihnX1BTX1Bhc3N0aHJvdWdoUkdCQSksIE5VTEwsICZtQ29w
eVJHQkFQUyk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIGQz
ZDExOjpTZXREZWJ1Z05hbWUobUNvcHlSR0JBUFMsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSBS
R0JBIHBpeGVsIHNoYWRlciIpOworCisgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBp
eGVsU2hhZGVyKGdfUFNfUGFzc3Rocm91Z2hSR0IsIHNpemVvZihnX1BTX1Bhc3N0aHJvdWdoUkdC
KSwgTlVMTCwgJm1Db3B5UkdCUFMpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkp
OworICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5UkdCUFMsICJSZW5kZXJlcjExIGNv
cHkgdGV4dHVyZSBSR0IgcGl4ZWwgc2hhZGVyIik7CisKKyAgICAgICAgcmVzdWx0ID0gbURldmlj
ZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19QYXNzdGhyb3VnaEx1bSwgc2l6ZW9mKGdfUFNfUGFz
c3Rocm91Z2hMdW0pLCBOVUxMLCAmbUNvcHlMdW1QUyk7CisgICAgICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7CisgICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNvcHlMdW1QUywgIlJl
bmRlcmVyMTEgY29weSB0ZXh0dXJlIGx1bWluYW5jZSBwaXhlbCBzaGFkZXIiKTsKKworICAgICAg
ICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihnX1BTX1Bhc3N0aHJvdWdoTHVt
QWxwaGEsIHNpemVvZihnX1BTX1Bhc3N0aHJvdWdoTHVtQWxwaGEpLCBOVUxMLCAmbUNvcHlMdW1B
bHBoYVBTKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgZDNk
MTE6OlNldERlYnVnTmFtZShtQ29weUx1bUFscGhhUFMsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVy
ZSBsdW1pbmFuY2UgYWxwaGEgcGl4ZWwgc2hhZGVyIik7CisKKyAgICAgICAgbUNvcHlSZXNvdXJj
ZXNJbml0aWFsaXplZCA9IHRydWU7CisgICAgfQorCisgICAgLy8gVmVyaWZ5IHRoZSBzb3VyY2Ug
YW5kIGRlc3RpbmF0aW9uIGFyZWEgc2l6ZXMKKyAgICBpZiAoc291cmNlQXJlYS54IDwgMCB8fCBz
b3VyY2VBcmVhLnggKyBzb3VyY2VBcmVhLndpZHRoID4gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VX
aWR0aCkgfHwKKyAgICAgICAgc291cmNlQXJlYS55IDwgMCB8fCBzb3VyY2VBcmVhLnkgKyBzb3Vy
Y2VBcmVhLmhlaWdodCA+IHN0YXRpY19jYXN0PGludD4oc291cmNlSGVpZ2h0KSB8fAorICAgICAg
ICBkZXN0QXJlYS54IDwgMCB8fCBkZXN0QXJlYS54ICsgZGVzdEFyZWEud2lkdGggPiBzdGF0aWNf
Y2FzdDxpbnQ+KGRlc3RXaWR0aCkgfHwKKyAgICAgICAgZGVzdEFyZWEueSA8IDAgfHwgZGVzdEFy
ZWEueSArIGRlc3RBcmVhLmhlaWdodCA+IHN0YXRpY19jYXN0PGludD4oZGVzdEhlaWdodCkpCisg
ICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUsIGZhbHNlKTsK
KyAgICB9CisKKyAgICAvLyBTZXQgdmVydGljZXMKKyAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VS
Q0UgbWFwcGVkUmVzb3VyY2U7CisgICAgcmVzdWx0ID0gbURldmljZUNvbnRleHQtPk1hcChtQ29w
eVZCLCAwLCBEM0QxMV9NQVBfV1JJVEVfRElTQ0FSRCwgMCwgJm1hcHBlZFJlc291cmNlKTsKKyAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byBtYXAg
dmVydGV4IGJ1ZmZlciBmb3IgdGV4dHVyZSBjb3B5LCBIUkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7
CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOworICAg
IH0KKworICAgIGQzZDExOjpQb3NpdGlvblRleENvb3JkVmVydGV4ICp2ZXJ0aWNlcyA9IHN0YXRp
Y19jYXN0PGQzZDExOjpQb3NpdGlvblRleENvb3JkVmVydGV4Kj4obWFwcGVkUmVzb3VyY2UucERh
dGEpOworCisgICAgLy8gQ3JlYXRlIGEgcXVhZCBpbiBob21vZ2VuZW91cyBjb29yZGluYXRlcwor
ICAgIGZsb2F0IHgxID0gKGRlc3RBcmVhLnggLyBmbG9hdChkZXN0V2lkdGgpKSAqIDIuMGYgLSAx
LjBmOworICAgIGZsb2F0IHkxID0gKChkZXN0SGVpZ2h0IC0gZGVzdEFyZWEueSAtIGRlc3RBcmVh
LmhlaWdodCkgLyBmbG9hdChkZXN0SGVpZ2h0KSkgKiAyLjBmIC0gMS4wZjsKKyAgICBmbG9hdCB4
MiA9ICgoZGVzdEFyZWEueCArIGRlc3RBcmVhLndpZHRoKSAvIGZsb2F0KGRlc3RXaWR0aCkpICog
Mi4wZiAtIDEuMGY7CisgICAgZmxvYXQgeTIgPSAoKGRlc3RIZWlnaHQgLSBkZXN0QXJlYS55KSAv
IGZsb2F0KGRlc3RIZWlnaHQpKSAqIDIuMGYgLSAxLjBmOworCisgICAgZmxvYXQgdTEgPSBzb3Vy
Y2VBcmVhLnggLyBmbG9hdChzb3VyY2VXaWR0aCk7CisgICAgZmxvYXQgdjEgPSBzb3VyY2VBcmVh
LnkgLyBmbG9hdChzb3VyY2VIZWlnaHQpOworICAgIGZsb2F0IHUyID0gKHNvdXJjZUFyZWEueCAr
IHNvdXJjZUFyZWEud2lkdGgpIC8gZmxvYXQoc291cmNlV2lkdGgpOworICAgIGZsb2F0IHYyID0g
KHNvdXJjZUFyZWEueSArIHNvdXJjZUFyZWEuaGVpZ2h0KSAvIGZsb2F0KHNvdXJjZUhlaWdodCk7
CisKKyAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNbMF0sIHgx
LCB5MSwgdTEsIHYyKTsKKyAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVy
dGljZXNbMV0sIHgxLCB5MiwgdTEsIHYxKTsKKyAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhDb29y
ZFZlcnRleCgmdmVydGljZXNbMl0sIHgyLCB5MSwgdTIsIHYyKTsKKyAgICBkM2QxMTo6U2V0UG9z
aXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNbM10sIHgyLCB5MiwgdTIsIHYxKTsKKworICAg
IG1EZXZpY2VDb250ZXh0LT5Vbm1hcChtQ29weVZCLCAwKTsKKworICAgIHN0YXRpYyBVSU5UIHN0
cmlkZSA9IHNpemVvZihkM2QxMTo6UG9zaXRpb25UZXhDb29yZFZlcnRleCk7CisgICAgc3RhdGlj
IFVJTlQgc3RhcnRJZHggPSAwOworICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldFZlcnRleEJ1ZmZl
cnMoMCwgMSwgJm1Db3B5VkIsICZzdHJpZGUsICZzdGFydElkeCk7CisKKyAgICAvLyBBcHBseSBz
dGF0ZQorICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldEJsZW5kU3RhdGUoTlVMTCwgTlVMTCwgMHhG
RkZGRkZGKTsKKyAgICBtRGV2aWNlQ29udGV4dC0+T01TZXREZXB0aFN0ZW5jaWxTdGF0ZShOVUxM
LCAweEZGRkZGRkZGKTsKKyAgICBtRGV2aWNlQ29udGV4dC0+UlNTZXRTdGF0ZShOVUxMKTsKKwor
ICAgIC8vIEFwcGx5IHNoYWRlcnMKKyAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRJbnB1dExheW91
dChtQ29weUlMKTsKKyAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRQcmltaXRpdmVUb3BvbG9neShE
M0RfUFJJTUlUSVZFX1RPUE9MT0dZX1RSSUFOR0xFU1RSSVApOworICAgIG1EZXZpY2VDb250ZXh0
LT5WU1NldFNoYWRlcihtQ29weVZTLCBOVUxMLCAwKTsKKworICAgIElEM0QxMVBpeGVsU2hhZGVy
ICpwcyA9IE5VTEw7CisgICAgc3dpdGNoKGRlc3RGb3JtYXQpCisgICAgeworICAgICAgY2FzZSBH
TF9SR0JBOiAgICAgICAgICAgIHBzID0gbUNvcHlSR0JBUFM7ICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfUkdCOiAgICAgICAgICAgICBwcyA9IG1Db3B5UkdCUFM7ICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX0FMUEhBOiAgICAgICAgICAgcHMgPSBtQ29weVJHQkFQUzsgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9CR1JBX0VYVDogICAgICAgIHBzID0gbUNvcHlSR0JBUFM7ICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOiAgICAgICBwcyA9IG1Db3B5THVtUFM7ICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTogcHMgPSBtQ29weUx1bUFscGhh
UFM7IGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgIHBzID0gTlVMTDsgICAg
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIo
cHMsIE5VTEwsIDApOworICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldFNoYWRlcihOVUxMLCBOVUxM
LCAwKTsKKworICAgIC8vIFVuc2V0IHRoZSBjdXJyZW50bHkgYm91bmQgc2hhZGVyIHJlc291cmNl
IHRvIGF2b2lkIGNvbmZsaWN0cworICAgIHN0YXRpYyBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcg
KmNvbnN0IG51bGxTUlYgPSBOVUxMOworICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlclJl
c291cmNlcygwLCAxLCAmbnVsbFNSVik7CisKKyAgICAvLyBBcHBseSByZW5kZXIgdGFyZ2V0Cisg
ICAgc2V0T25lVGltZVJlbmRlclRhcmdldChkZXN0KTsKKworICAgIC8vIFNldCB0aGUgdmlld3Bv
cnQKKyAgICBEM0QxMV9WSUVXUE9SVCB2aWV3cG9ydDsKKyAgICB2aWV3cG9ydC5Ub3BMZWZ0WCA9
IDA7CisgICAgdmlld3BvcnQuVG9wTGVmdFkgPSAwOworICAgIHZpZXdwb3J0LldpZHRoID0gZGVz
dFdpZHRoOworICAgIHZpZXdwb3J0LkhlaWdodCA9IGRlc3RIZWlnaHQ7CisgICAgdmlld3BvcnQu
TWluRGVwdGggPSAwLjBmOworICAgIHZpZXdwb3J0Lk1heERlcHRoID0gMS4wZjsKKyAgICBtRGV2
aWNlQ29udGV4dC0+UlNTZXRWaWV3cG9ydHMoMSwgJnZpZXdwb3J0KTsKKworICAgIC8vIEFwcGx5
IHRleHR1cmVzCisgICAgbURldmljZUNvbnRleHQtPlBTU2V0U2hhZGVyUmVzb3VyY2VzKDAsIDEs
ICZzb3VyY2UpOworICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNhbXBsZXJzKDAsIDEsICZtQ29w
eVNhbXBsZXIpOworCisgICAgLy8gRHJhdyB0aGUgcXVhZAorICAgIG1EZXZpY2VDb250ZXh0LT5E
cmF3KDQsIDApOworCisgICAgLy8gVW5iaW5kIHRleHR1cmVzIGFuZCByZW5kZXIgdGFyZ2V0cyBh
bmQgdmVydGV4IGJ1ZmZlcgorICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlclJlc291cmNl
cygwLCAxLCAmbnVsbFNSVik7CisKKyAgICB1bmFwcGx5UmVuZGVyVGFyZ2V0cygpOworCisgICAg
VUlOVCB6ZXJvID0gMDsKKyAgICBJRDNEMTFCdWZmZXIgKmNvbnN0IG51bGxCdWZmZXIgPSBOVUxM
OworICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldFZlcnRleEJ1ZmZlcnMoMCwgMSwgJm51bGxCdWZm
ZXIsICZ6ZXJvLCAmemVybyk7CisKKyAgICBtYXJrQWxsU3RhdGVEaXJ0eSgpOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6dW5hcHBseVJlbmRlclRhcmdldHMoKQor
eworICAgIHNldE9uZVRpbWVSZW5kZXJUYXJnZXQoTlVMTCk7Cit9CisKK3ZvaWQgUmVuZGVyZXIx
MTo6c2V0T25lVGltZVJlbmRlclRhcmdldChJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpyZW5kZXJU
YXJnZXRWaWV3KQoreworICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0dkFycmF5W2dsOjpJ
TVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTXSA9IHtOVUxMfTsKKworICAgIHJ0dkFycmF5
WzBdID0gcmVuZGVyVGFyZ2V0VmlldzsKKworICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldFJlbmRl
clRhcmdldHMoZ2V0TWF4UmVuZGVyVGFyZ2V0cygpLCBydHZBcnJheSwgTlVMTCk7CisKKyAgICAv
LyBEbyBub3QgcHJlc2VydmUgdGhlIHNlcmlhbCBmb3IgdGhpcyBvbmUtdGltZS11c2UgcmVuZGVy
IHRhcmdldAorICAgIGZvciAodW5zaWduZWQgaW50IHJ0SW5kZXggPSAwOyBydEluZGV4IDwgZ2w6
OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IHJ0SW5kZXgrKykKKyAgICB7CisgICAg
ICAgIG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsc1tydEluZGV4XSA9IDA7CisgICAgfQorfQor
CitSZW5kZXJUYXJnZXQgKlJlbmRlcmVyMTE6OmNyZWF0ZVJlbmRlclRhcmdldChTd2FwQ2hhaW4g
KnN3YXBDaGFpbiwgYm9vbCBkZXB0aCkKK3sKKyAgICBTd2FwQ2hhaW4xMSAqc3dhcENoYWluMTEg
PSBTd2FwQ2hhaW4xMTo6bWFrZVN3YXBDaGFpbjExKHN3YXBDaGFpbik7CisgICAgUmVuZGVyVGFy
Z2V0MTEgKnJlbmRlclRhcmdldCA9IE5VTEw7CisKKyAgICBpZiAoZGVwdGgpCisgICAgeworICAg
ICAgICAvLyBOb3RlOiBkZXB0aCBzdGVuY2lsIG1heSBiZSBOVUxMIGZvciAwIHNpemVkIHN1cmZh
Y2VzCisgICAgICAgIHJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQxMSh0aGlzLCBzd2Fw
Q2hhaW4xMS0+Z2V0RGVwdGhTdGVuY2lsKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzd2FwQ2hhaW4xMS0+Z2V0RGVwdGhTdGVuY2lsVGV4dHVyZSgpLCBOVUxM
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhcENoYWluMTEt
PmdldFdpZHRoKCksIHN3YXBDaGFpbjExLT5nZXRIZWlnaHQoKSk7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIC8vIE5vdGU6IHJlbmRlciB0YXJnZXQgbWF5IGJlIE5VTEwgZm9yIDAg
c2l6ZWQgc3VyZmFjZXMKKyAgICAgICAgcmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldDEx
KHRoaXMsIHN3YXBDaGFpbjExLT5nZXRSZW5kZXJUYXJnZXQoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBDaGFpbjExLT5nZXRPZmZzY3JlZW5UZXh0dXJl
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwQ2hhaW4x
MS0+Z2V0UmVuZGVyVGFyZ2V0U2hhZGVyUmVzb3VyY2UoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN3YXBDaGFpbjExLT5nZXRXaWR0aCgpLCBzd2FwQ2hhaW4x
MS0+Z2V0SGVpZ2h0KCkpOworICAgIH0KKyAgICByZXR1cm4gcmVuZGVyVGFyZ2V0OworfQorCitS
ZW5kZXJUYXJnZXQgKlJlbmRlcmVyMTE6OmNyZWF0ZVJlbmRlclRhcmdldChpbnQgd2lkdGgsIGlu
dCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcywgYm9vbCBkZXB0aCkKK3sK
KyAgICBSZW5kZXJUYXJnZXQxMSAqcmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldDExKHRo
aXMsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgc2FtcGxlcywgZGVwdGgpOworICAgIHJldHVybiBy
ZW5kZXJUYXJnZXQ7Cit9CisKK1NoYWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyMTE6OmxvYWRFeGVj
dXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCByeDo6U2hhZGVyVHlw
ZSB0eXBlKQoreworICAgIFNoYWRlckV4ZWN1dGFibGUxMSAqZXhlY3V0YWJsZSA9IE5VTEw7CisK
KyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSByeDo6U0hBREVSX1ZFUlRFWDoK
KyAgICAgICAgeworICAgICAgICAgICAgSUQzRDExVmVydGV4U2hhZGVyICp2c2hhZGVyID0gTlVM
TDsKKyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVydGV4U2hh
ZGVyKGZ1bmN0aW9uLCBsZW5ndGgsIE5VTEwsICZ2c2hhZGVyKTsKKyAgICAgICAgICAgIEFTU0VS
VChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgICAgIGlmICh2c2hhZGVyKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBuZXcgU2hhZGVyRXhlY3V0YWJs
ZTExKGZ1bmN0aW9uLCBsZW5ndGgsIHZzaGFkZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSByeDo6U0hBREVSX1BJWEVMOgorICAgICAgICB7
CisgICAgICAgICAgICBJRDNEMTFQaXhlbFNoYWRlciAqcHNoYWRlciA9IE5VTEw7CisgICAgICAg
ICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGZ1bmN0aW9u
LCBsZW5ndGgsIE5VTEwsICZwc2hhZGVyKTsKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQo
cmVzdWx0KSk7CisKKyAgICAgICAgICAgIGlmIChwc2hhZGVyKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBuZXcgU2hhZGVyRXhlY3V0YWJsZTExKGZ1bmN0aW9u
LCBsZW5ndGgsIHBzaGFkZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSByeDo6U0hBREVSX0dFT01FVFJZOgorICAgICAgICB7CisgICAgICAg
ICAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZ3NoYWRlciA9IE5VTEw7CisgICAgICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUdlb21ldHJ5U2hhZGVyKGZ1bmN0aW9uLCBs
ZW5ndGgsIE5VTEwsICZnc2hhZGVyKTsKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CisKKyAgICAgICAgICAgIGlmIChnc2hhZGVyKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGV4ZWN1dGFibGUgPSBuZXcgU2hhZGVyRXhlY3V0YWJsZTExKGZ1bmN0aW9uLCBs
ZW5ndGgsIGdzaGFkZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgcmV0dXJuIGV4ZWN1dGFibGU7Cit9CisKK1NoYWRlckV4ZWN1dGFibGUg
KlJlbmRlcmVyMTE6OmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNv
bnN0IGNoYXIgKnNoYWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsIEQzRFdvcmthcm91bmRU
eXBlIHdvcmthcm91bmQpCit7CisgICAgY29uc3QgY2hhciAqcHJvZmlsZSA9IE5VTEw7CisKKyAg
ICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSByeDo6U0hBREVSX1ZFUlRFWDoKKyAg
ICAgICAgcHJvZmlsZSA9ICJ2c180XzAiOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ugcng6
OlNIQURFUl9QSVhFTDoKKyAgICAgICAgcHJvZmlsZSA9ICJwc180XzAiOworICAgICAgICBicmVh
azsKKyAgICAgIGNhc2Ugcng6OlNIQURFUl9HRU9NRVRSWToKKyAgICAgICAgcHJvZmlsZSA9ICJn
c180XzAiOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIElEM0RCbG9iICpiaW5h
cnkgPSAoSUQzREJsb2IqKWNvbXBpbGVUb0JpbmFyeShpbmZvTG9nLCBzaGFkZXJITFNMLCBwcm9m
aWxlLCBEM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDAsIGZhbHNlKTsKKyAgICBpZiAoIWJp
bmFyeSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBTaGFkZXJFeGVjdXRhYmxlICpleGVj
dXRhYmxlID0gbG9hZEV4ZWN1dGFibGUoKERXT1JEICopYmluYXJ5LT5HZXRCdWZmZXJQb2ludGVy
KCksIGJpbmFyeS0+R2V0QnVmZmVyU2l6ZSgpLCB0eXBlKTsKKyAgICBiaW5hcnktPlJlbGVhc2Uo
KTsKKworICAgIHJldHVybiBleGVjdXRhYmxlOworfQorCitWZXJ0ZXhCdWZmZXIgKlJlbmRlcmVy
MTE6OmNyZWF0ZVZlcnRleEJ1ZmZlcigpCit7CisgICAgcmV0dXJuIG5ldyBWZXJ0ZXhCdWZmZXIx
MSh0aGlzKTsKK30KKworSW5kZXhCdWZmZXIgKlJlbmRlcmVyMTE6OmNyZWF0ZUluZGV4QnVmZmVy
KCkKK3sKKyAgICByZXR1cm4gbmV3IEluZGV4QnVmZmVyMTEodGhpcyk7Cit9CisKK0J1ZmZlclN0
b3JhZ2UgKlJlbmRlcmVyMTE6OmNyZWF0ZUJ1ZmZlclN0b3JhZ2UoKQoreworICAgIHJldHVybiBu
ZXcgQnVmZmVyU3RvcmFnZTExKHRoaXMpOworfQorCitRdWVyeUltcGwgKlJlbmRlcmVyMTE6OmNy
ZWF0ZVF1ZXJ5KEdMZW51bSB0eXBlKQoreworICAgIHJldHVybiBuZXcgUXVlcnkxMSh0aGlzLCB0
eXBlKTsKK30KKworRmVuY2VJbXBsICpSZW5kZXJlcjExOjpjcmVhdGVGZW5jZSgpCit7CisgICAg
cmV0dXJuIG5ldyBGZW5jZTExKHRoaXMpOworfQorCitib29sIFJlbmRlcmVyMTE6OmdldFJlbmRl
clRhcmdldFJlc291cmNlKGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyLCB1bnNpZ25lZCBp
bnQgKnN1YnJlc291cmNlSW5kZXgsIElEM0QxMVRleHR1cmUyRCAqKnJlc291cmNlKQoreworICAg
IEFTU0VSVChjb2xvcmJ1ZmZlciAhPSBOVUxMKTsKKworICAgIFJlbmRlclRhcmdldDExICpyZW5k
ZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGNvbG9yYnVmZmVy
LT5nZXRSZW5kZXJUYXJnZXQoKSk7CisgICAgaWYgKHJlbmRlclRhcmdldCkKKyAgICB7CisgICAg
ICAgICpzdWJyZXNvdXJjZUluZGV4ID0gcmVuZGVyVGFyZ2V0LT5nZXRTdWJyZXNvdXJjZUluZGV4
KCk7CisKKyAgICAgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqY29sb3JCdWZmZXJSVFYgPSBy
ZW5kZXJUYXJnZXQtPmdldFJlbmRlclRhcmdldFZpZXcoKTsKKyAgICAgICAgaWYgKGNvbG9yQnVm
ZmVyUlRWKQorICAgICAgICB7CisgICAgICAgICAgICBJRDNEMTFSZXNvdXJjZSAqdGV4dHVyZVJl
c291cmNlID0gTlVMTDsKKyAgICAgICAgICAgIGNvbG9yQnVmZmVyUlRWLT5HZXRSZXNvdXJjZSgm
dGV4dHVyZVJlc291cmNlKTsKKworICAgICAgICAgICAgaWYgKHRleHR1cmVSZXNvdXJjZSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IHRleHR1cmVSZXNv
dXJjZS0+UXVlcnlJbnRlcmZhY2UoSUlEX0lEM0QxMVRleHR1cmUyRCwgKHZvaWQqKilyZXNvdXJj
ZSk7CisgICAgICAgICAgICAgICAgdGV4dHVyZVJlc291cmNlLT5SZWxlYXNlKCk7CisKKyAgICAg
ICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRVJS
KCJGYWlsZWQgdG8gZXh0cmFjdCB0aGUgSUQzRDExVGV4dHVyZTJEIGZyb20gdGhlIHJlbmRlciB0
YXJnZXQgcmVzb3VyY2UsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJIUkVTVUxUOiAweCVY
LiIsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlcmVyMTE6OmJsaXRS
ZWN0KGdsOjpGcmFtZWJ1ZmZlciAqcmVhZFRhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVh
ZFJlY3QsIGdsOjpGcmFtZWJ1ZmZlciAqZHJhd1RhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAm
ZHJhd1JlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYmxpdFJlbmRlclRhcmdl
dCwgYm9vbCBibGl0RGVwdGhTdGVuY2lsKQoreworICAgIGlmIChibGl0UmVuZGVyVGFyZ2V0KQor
ICAgIHsKKyAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVhZEJ1ZmZlciA9IHJlYWRUYXJnZXQt
PmdldFJlYWRDb2xvcmJ1ZmZlcigpOworCisgICAgICAgIGlmICghcmVhZEJ1ZmZlcikKKyAgICAg
ICAgeworICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlYWQgYnVmZmVy
IGZyb20gdGhlIHJlYWQgZnJhbWVidWZmZXIuIik7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlbmRl
clRhcmdldCAqcmVhZFJlbmRlclRhcmdldCA9IHJlYWRCdWZmZXItPmdldFJlbmRlclRhcmdldCgp
OworCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IDA7IGNvbG9y
QXR0YWNobWVudCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTOyBjb2xvckF0
dGFjaG1lbnQrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGRyYXdUYXJnZXQtPmlzRW5h
YmxlZENvbG9yQXR0YWNobWVudChjb2xvckF0dGFjaG1lbnQpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmRyYXdCdWZmZXIgPSBkcmF3VGFyZ2V0LT5n
ZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQpOworCisgICAgICAgICAgICAgICAgaWYgKCFk
cmF3QnVmZmVyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRVJSKCJG
YWlsZWQgdG8gcmV0cmlldmUgdGhlIGRyYXcgYnVmZmVyIGZyb20gdGhlIGRyYXcgZnJhbWVidWZm
ZXIuIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSwgZmFsc2UpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIFJlbmRl
clRhcmdldCAqZHJhd1JlbmRlclRhcmdldCA9IGRyYXdCdWZmZXItPmdldFJlbmRlclRhcmdldCgp
OworCisgICAgICAgICAgICAgICAgaWYgKCFibGl0UmVuZGVyYnVmZmVyUmVjdChyZWFkUmVjdCwg
ZHJhd1JlY3QsIHJlYWRSZW5kZXJUYXJnZXQsIGRyYXdSZW5kZXJUYXJnZXQsIGZhbHNlKSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
YmxpdERlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlYWRC
dWZmZXIgPSByZWFkVGFyZ2V0LT5nZXREZXB0aE9yU3RlbmNpbGJ1ZmZlcigpOworICAgICAgICBn
bDo6UmVuZGVyYnVmZmVyICpkcmF3QnVmZmVyID0gZHJhd1RhcmdldC0+Z2V0RGVwdGhPclN0ZW5j
aWxidWZmZXIoKTsKKworICAgICAgICBpZiAoIXJlYWRCdWZmZXIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZWFkIGRlcHRoLXN0ZW5jaWwgYnVm
ZmVyIGZyb20gdGhlIHJlYWQgZnJhbWVidWZmZXIuIik7CisgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICghZHJhd0J1ZmZlcikKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0
cmlldmUgdGhlIGRyYXcgZGVwdGgtc3RlbmNpbCBidWZmZXIgZnJvbSB0aGUgZHJhdyBmcmFtZWJ1
ZmZlci4iKTsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
ZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgUmVuZGVyVGFyZ2V0ICpyZWFkUmVuZGVyVGFy
Z2V0ID0gcmVhZEJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7CisgICAgICAgIFJlbmRlclRhcmdl
dCAqZHJhd1JlbmRlclRhcmdldCA9IGRyYXdCdWZmZXItPmdldERlcHRoU3RlbmNpbCgpOworCisg
ICAgICAgIGlmICghYmxpdFJlbmRlcmJ1ZmZlclJlY3QocmVhZFJlY3QsIGRyYXdSZWN0LCByZWFk
UmVuZGVyVGFyZ2V0LCBkcmF3UmVuZGVyVGFyZ2V0LCB0cnVlKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6cmVhZFBpeGVscyhnbDo6RnJhbWVidWZmZXIgKmZyYW1l
YnVmZmVyLCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xzaXplaSBvdXRwdXRQaXRjaCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLCBHTGludCBwYWNr
QWxpZ25tZW50LCB2b2lkKiBwaXhlbHMpCit7CisgICAgSUQzRDExVGV4dHVyZTJEICpjb2xvckJ1
ZmZlclRleHR1cmUgPSBOVUxMOworICAgIHVuc2lnbmVkIGludCBzdWJyZXNvdXJjZUluZGV4ID0g
MDsKKworICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gZnJhbWVidWZmZXItPmdl
dFJlYWRDb2xvcmJ1ZmZlcigpOworCisgICAgaWYgKGNvbG9yYnVmZmVyICYmIGdldFJlbmRlclRh
cmdldFJlc291cmNlKGNvbG9yYnVmZmVyLCAmc3VicmVzb3VyY2VJbmRleCwgJmNvbG9yQnVmZmVy
VGV4dHVyZSkpCisgICAgeworICAgICAgICBnbDo6UmVjdGFuZ2xlIGFyZWE7CisgICAgICAgIGFy
ZWEueCA9IHg7CisgICAgICAgIGFyZWEueSA9IHk7CisgICAgICAgIGFyZWEud2lkdGggPSB3aWR0
aDsKKyAgICAgICAgYXJlYS5oZWlnaHQgPSBoZWlnaHQ7CisKKyAgICAgICAgcmVhZFRleHR1cmVE
YXRhKGNvbG9yQnVmZmVyVGV4dHVyZSwgc3VicmVzb3VyY2VJbmRleCwgYXJlYSwgY29sb3JidWZm
ZXItPmdldEFjdHVhbEZvcm1hdCgpLCBmb3JtYXQsIHR5cGUsIG91dHB1dFBpdGNoLAorICAgICAg
ICAgICAgICAgICAgICAgICAgcGFja1JldmVyc2VSb3dPcmRlciwgcGFja0FsaWdubWVudCwgcGl4
ZWxzKTsKKworICAgICAgICBjb2xvckJ1ZmZlclRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAg
Y29sb3JCdWZmZXJUZXh0dXJlID0gTlVMTDsKKyAgICB9Cit9CisKK0ltYWdlICpSZW5kZXJlcjEx
OjpjcmVhdGVJbWFnZSgpCit7CisgICAgcmV0dXJuIG5ldyBJbWFnZTExKCk7Cit9CisKK3ZvaWQg
UmVuZGVyZXIxMTo6Z2VuZXJhdGVNaXBtYXAoSW1hZ2UgKmRlc3QsIEltYWdlICpzcmMpCit7Cisg
ICAgSW1hZ2UxMSAqZGVzdDExID0gSW1hZ2UxMTo6bWFrZUltYWdlMTEoZGVzdCk7CisgICAgSW1h
Z2UxMSAqc3JjMTEgPSBJbWFnZTExOjptYWtlSW1hZ2UxMShzcmMpOworICAgIEltYWdlMTE6Omdl
bmVyYXRlTWlwbWFwKGRlc3QxMSwgc3JjMTEpOworfQorCitUZXh0dXJlU3RvcmFnZSAqUmVuZGVy
ZXIxMTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChTd2FwQ2hhaW4gKnN3YXBDaGFpbikKK3sKKyAg
ICBTd2FwQ2hhaW4xMSAqc3dhcENoYWluMTEgPSBTd2FwQ2hhaW4xMTo6bWFrZVN3YXBDaGFpbjEx
KHN3YXBDaGFpbik7CisgICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTExXzJEKHRoaXMsIHN3
YXBDaGFpbjExKTsKK30KKworVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyMTE6OmNyZWF0ZVRleHR1
cmVTdG9yYWdlMkQoaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNh
Z2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkK
K3sKKyAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlMTFfMkQodGhpcywgbGV2ZWxzLCBpbnRl
cm5hbGZvcm1hdCwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSwgd2lkdGgsIGhlaWdodCk7Cit9CisK
K1RleHR1cmVTdG9yYWdlICpSZW5kZXJlcjExOjpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUoaW50
IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VS
ZW5kZXJhYmxlLCBpbnQgc2l6ZSkKK3sKKyAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlMTFf
Q3ViZSh0aGlzLCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxl
LCBzaXplKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0RmFzdFBpeGVsQ29w
eVNpemUoRFhHSV9GT1JNQVQgc291cmNlRm9ybWF0LCBHTGVudW0gc291cmNlR0xGb3JtYXQsIEdM
ZW51bSBkZXN0Rm9ybWF0LCBHTGVudW0gZGVzdFR5cGUpCit7CisgICAgaWYgKHNvdXJjZUZvcm1h
dCA9PSBEWEdJX0ZPUk1BVF9BOF9VTk9STSAmJgorICAgICAgICBkZXN0Rm9ybWF0ICAgPT0gR0xf
QUxQSEEgJiYKKyAgICAgICAgZGVzdFR5cGUgICAgID09IEdMX1VOU0lHTkVEX0JZVEUpCisgICAg
eworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgZWxzZSBpZiAoc291cmNlRm9ybWF0ICAg
PT0gRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk0gJiYKKyAgICAgICAgICAgICBzb3VyY2VHTEZv
cm1hdCA9PSBHTF9SR0JBOF9PRVMgJiYKKyAgICAgICAgICAgICBkZXN0Rm9ybWF0ICAgICA9PSBH
TF9SR0JBICYmCisgICAgICAgICAgICAgZGVzdFR5cGUgICAgICAgPT0gR0xfVU5TSUdORURfQllU
RSkKKyAgICB7CisgICAgICAgIHJldHVybiA0OworICAgIH0KKyAgICBlbHNlIGlmIChzb3VyY2VG
b3JtYXQgPT0gRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk0gJiYKKyAgICAgICAgICAgICBkZXN0
Rm9ybWF0ICAgPT0gR0xfQkdSQV9FWFQgJiYKKyAgICAgICAgICAgICBkZXN0VHlwZSAgICAgPT0g
R0xfVU5TSUdORURfQllURSkKKyAgICB7CisgICAgICAgIHJldHVybiA0OworICAgIH0KKyAgICBl
bHNlIGlmIChzb3VyY2VGb3JtYXQgICA9PSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQg
JiYKKyAgICAgICAgICAgICBzb3VyY2VHTEZvcm1hdCA9PSBHTF9SR0JBMTZGX0VYVCAmJgorICAg
ICAgICAgICAgIGRlc3RGb3JtYXQgICAgID09IEdMX1JHQkEgJiYKKyAgICAgICAgICAgICBkZXN0
VHlwZSAgICAgICA9PSBHTF9IQUxGX0ZMT0FUX09FUykKKyAgICB7CisgICAgICAgIHJldHVybiA4
OworICAgIH0KKyAgICBlbHNlIGlmIChzb3VyY2VGb3JtYXQgPT0gRFhHSV9GT1JNQVRfUjMyRzMy
QjMyX0ZMT0FUICYmCisgICAgICAgICAgICAgZGVzdEZvcm1hdCAgID09IEdMX1JHQiAmJgorICAg
ICAgICAgICAgIGRlc3RUeXBlICAgICA9PSBHTF9GTE9BVCkKKyAgICB7CisgICAgICAgIHJldHVy
biAxMjsKKyAgICB9CisgICAgZWxzZSBpZiAoc291cmNlRm9ybWF0ICAgPT0gRFhHSV9GT1JNQVRf
UjMyRzMyQjMyQTMyX0ZMT0FUICYmCisgICAgICAgICAgICAgc291cmNlR0xGb3JtYXQgPT0gR0xf
UkdCQTMyRl9FWFQgJiYKKyAgICAgICAgICAgICBkZXN0Rm9ybWF0ICAgICA9PSBHTF9SR0JBICYm
CisgICAgICAgICAgICAgZGVzdFR5cGUgICAgICAgPT0gR0xfRkxPQVQpCisgICAgeworICAgICAg
ICByZXR1cm4gMTY7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlYWRQaXhlbENvbG9yKGNvbnN0IHVuc2ln
bmVkIGNoYXIgKmRhdGEsIERYR0lfRk9STUFUIGZvcm1hdCwgR0xlbnVtIGdsRm9ybWF0LCB1bnNp
Z25lZCBpbnQgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgeSwgaW50IGlucHV0UGl0Y2gsIGdsOjpDb2xvciAqb3V0Q29sb3IpCit7CisgICAgc3dpdGNo
IChmb3JtYXQpCisgICAgeworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STToK
KyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IHJnYmEgPSAqcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihkYXRhICsgNCAqIHggKyB5ICogaW5wdXRQaXRjaCk7
CisgICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICAocmdiYSAmIDB4MDAwMDAwRkYpICogKDEu
MGYgLyAweDAwMDAwMEZGKTsKKyAgICAgICAgICAgIG91dENvbG9yLT5ncmVlbiA9IChyZ2JhICYg
MHgwMDAwRkYwMCkgKiAoMS4wZiAvIDB4MDAwMEZGMDApOworICAgICAgICAgICAgb3V0Q29sb3It
PmJsdWUgPSAgKHJnYmEgJiAweDAwRkYwMDAwKSAqICgxLjBmIC8gMHgwMEZGMDAwMCk7CisKKyAg
ICAgICAgICAgIGlmIChnbDo6R2V0QWxwaGFTaXplKGdsRm9ybWF0KSA+IDApCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gKHJnYmEgJiAweEZGMDAwMDAw
KSAqICgxLjBmIC8gMHhGRjAwMDAwMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gMS4wZjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9BOF9VTk9STToKKyAgICAgICAgeworICAgICAgICAgICAgb3V0Q29sb3ItPnJl
ZCA9ICAgMC4wZjsKKyAgICAgICAgICAgIG91dENvbG9yLT5ncmVlbiA9IDAuMGY7CisgICAgICAg
ICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAwLjBmOworICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhh
ID0gKihkYXRhICsgeCArIHkgKiBpbnB1dFBpdGNoKSAvIDI1NS4wZjsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQ6
CisgICAgICAgIHsKKyAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgICoocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBmbG9hdCo+KGRhdGEgKyAxNiAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAwKTsK
KyAgICAgICAgICAgIG91dENvbG9yLT5ncmVlbiA9ICoocmVpbnRlcnByZXRfY2FzdDxjb25zdCBm
bG9hdCo+KGRhdGEgKyAxNiAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAxKTsKKyAgICAgICAgICAg
IG91dENvbG9yLT5ibHVlID0gICoocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KGRhdGEg
KyAxNiAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAyKTsKKworICAgICAgICAgICAgaWYgKGdsOjpH
ZXRBbHBoYVNpemUoZ2xGb3JtYXQpID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBvdXRDb2xvci0+YWxwaGEgPSAqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRh
ICsgMTYgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMyk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhh
ID0gMS4wZjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQ6CisgICAgICAgIHsKKyAgICAgICAg
ICAgIG91dENvbG9yLT5yZWQgPSAgICoocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KGRh
dGEgKyAxMiAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAwKTsKKyAgICAgICAgICAgIG91dENvbG9y
LT5ncmVlbiA9ICoocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KGRhdGEgKyAxMiAqIHgg
KyB5ICogaW5wdXRQaXRjaCkgKyAxKTsKKyAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gICoo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KGRhdGEgKyAxMiAqIHggKyB5ICogaW5wdXRQ
aXRjaCkgKyAyKTsKKyAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IDEuMGY7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2
X0ZMT0FUOgorICAgICAgICB7CisgICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICBnbDo6Zmxv
YXQxNlRvRmxvYXQzMigqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihk
YXRhICsgOCAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAwKSk7CisgICAgICAgICAgICBvdXRDb2xv
ci0+Z3JlZW4gPSBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgc2hvcnQqPihkYXRhICsgOCAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAxKSk7Cisg
ICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgOCAqIHggKyB5ICogaW5w
dXRQaXRjaCkgKyAyKSk7CisKKyAgICAgICAgICAgIGlmIChnbDo6R2V0QWxwaGFTaXplKGdsRm9y
bWF0KSA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhh
ID0gZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKihyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVk
IHNob3J0Kj4oZGF0YSArIDggKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMykpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91
dENvbG9yLT5hbHBoYSA9IDEuMGY7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06CisgICAgICAg
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBiZ3JhID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdW5zaWduZWQgaW50Kj4oZGF0YSArIDQgKiB4ICsgeSAqIGlucHV0UGl0Y2gpOworICAgICAg
ICAgICAgb3V0Q29sb3ItPnJlZCA9ICAgKGJncmEgJiAweDAwRkYwMDAwKSAqICgxLjBmIC8gMHgw
MEZGMDAwMCk7CisgICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAoYmdyYSAmIDB4MDAwMDAw
RkYpICogKDEuMGYgLyAweDAwMDAwMEZGKTsKKyAgICAgICAgICAgIG91dENvbG9yLT5ncmVlbiA9
IChiZ3JhICYgMHgwMDAwRkYwMCkgKiAoMS4wZiAvIDB4MDAwMEZGMDApOworICAgICAgICAgICAg
b3V0Q29sb3ItPmFscGhhID0gKGJncmEgJiAweEZGMDAwMDAwKSAqICgxLjBmIC8gMHhGRjAwMDAw
MCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjhfVU5PUk06CisgICAgICAgIHsKKyAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgICooZGF0
YSArIHggKyB5ICogaW5wdXRQaXRjaCkgLyAyNTUuMGY7CisgICAgICAgICAgICBvdXRDb2xvci0+
Z3JlZW4gPSAwLjBmOworICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAgMC4wZjsKKyAgICAg
ICAgICAgIG91dENvbG9yLT5hbHBoYSA9IDEuMGY7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9VTk9STToKKyAgICAgICAgeworICAgICAg
ICAgICAgdW5zaWduZWQgc2hvcnQgcmcgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25l
ZCBzaG9ydCo+KGRhdGEgKyAyICogeCArIHkgKiBpbnB1dFBpdGNoKTsKKworICAgICAgICAgICAg
b3V0Q29sb3ItPnJlZCA9ICAgKHJnICYgMHhGRjAwKSAqICgxLjBmIC8gMHhGRjAwKTsKKyAgICAg
ICAgICAgIG91dENvbG9yLT5ncmVlbiA9IChyZyAmIDB4MDBGRikgKiAoMS4wZiAvIDB4MDBGRik7
CisgICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAwLjBmOworICAgICAgICAgICAgb3V0Q29s
b3ItPmFscGhhID0gMS4wZjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9SMTZfRkxPQVQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIG91dENvbG9y
LT5yZWQgPSAgIGdsOjpmbG9hdDE2VG9GbG9hdDMyKCpyZWludGVycHJldF9jYXN0PGNvbnN0IHVu
c2lnbmVkIHNob3J0Kj4oZGF0YSArIDIgKiB4ICsgeSAqIGlucHV0UGl0Y2gpKTsKKyAgICAgICAg
ICAgIG91dENvbG9yLT5ncmVlbiA9IDAuMGY7CisgICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9
ICAwLjBmOworICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gMS4wZjsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfRkxPQVQ6Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgIGdsOjpmbG9hdDE2VG9GbG9h
dDMyKCoocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyA0ICog
eCArIHkgKiBpbnB1dFBpdGNoKSArIDApKTsKKyAgICAgICAgICAgIG91dENvbG9yLT5ncmVlbiA9
IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCoocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBz
aG9ydCo+KGRhdGEgKyA0ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDEpKTsKKyAgICAgICAgICAg
IG91dENvbG9yLT5ibHVlID0gIDAuMGY7CisgICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAx
LjBmOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAg
ICBFUlIoIlJlYWRQaXhlbENvbG9yIG5vdCBpbXBsZW1lbnRlZCBmb3IgRFhHSSBmb3JtYXQgJXUu
IiwgZm9ybWF0KTsKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZVBpeGVsQ29sb3IoY29uc3QgZ2w6OkNv
bG9yICZjb2xvciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCB4LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgeSwgaW50IG91
dHB1dFBpdGNoLCB2b2lkICpvdXREYXRhKQoreworICAgIHVuc2lnbmVkIGNoYXIqIGJ5dGVEYXRh
ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0RGF0YSk7CisgICAgdW5zaWdu
ZWQgc2hvcnQqIHNob3J0RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihv
dXREYXRhKTsKKworICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgR0xfUkdC
QToKKyAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9V
TlNJR05FRF9CWVRFOgorICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0
Y2ggKyAwXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLnJlZCAgICsg
MC41Zik7CisgICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDFd
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuZ3JlZW4gKyAwLjVmKTsK
KyAgICAgICAgICAgIGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMl0gPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5ibHVlICArIDAuNWYpOworICAgICAg
ICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAzXSA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLmFscGhhICsgMC41Zik7CisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBFUlIoIldyaXRlUGl4ZWxD
b2xvciBub3QgaW1wbGVtZW50ZWQgZm9yIGZvcm1hdCBHTF9SR0JBIGFuZCB0eXBlIDB4JVguIiwg
dHlwZSk7CisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKKyAg
ICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05F
RF9CWVRFOgorICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAw
XSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLmJsdWUgICsgMC41Zik7
CisgICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDFdID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuZ3JlZW4gKyAwLjVmKTsKKyAgICAg
ICAgICAgIGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMl0gPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5yZWQgICArIDAuNWYpOworICAgICAgICAgICAg
Ynl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAzXSA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXI+KDI1NSAqIGNvbG9yLmFscGhhICsgMC41Zik7CisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhUOgorICAg
ICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhlICJUcmFu
c2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCisgICAgICAgICAgICAvLyB0aGlzIHR5
cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAg
IDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAg
MSAgICAwCisgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAg
ICAgIC8vIHwgICAgICAgNHRoICAgICAgICAgfCAgICAgICAgM3JkICAgICAgICAgfCAgICAgICAg
Mm5kICAgICAgICB8ICAgMXN0IGNvbXBvbmVudCAgIHwKKyAgICAgICAgICAgIC8vICAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgQkdSQV9FWFQs
IEIgaXMgdGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28gZm9ydGguCisg
ICAgICAgICAgICBzaG9ydERhdGFbeCArIHkgKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25l
ZCBzaG9ydCldID0KKyAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+
KDE1ICogY29sb3IuYWxwaGEgKyAwLjVmKSA8PCAxMikgfAorICAgICAgICAgICAgICAgIChzdGF0
aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMTUgKiBjb2xvci5yZWQgICArIDAuNWYpIDw8ICA4KSB8
CisgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigxNSAqIGNvbG9y
LmdyZWVuICsgMC41ZikgPDwgIDQpIHwKKyAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5z
aWduZWQgc2hvcnQ+KDE1ICogY29sb3IuYmx1ZSAgKyAwLjVmKSA8PCAgMCk7CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9SRVZf
RVhUOgorICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4g
dGhlICJUcmFuc2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCisgICAgICAgICAgICAv
LyB0aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAvLyAgIDE1ICAg
MTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAgICAz
ICAgIDIgICAgMSAgICAwCisgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KyAgICAgICAgICAgIC8vIHwgNHRoIHwgICAgICAgICAgM3JkICAgICAgICAgICB8ICAgICAgICAg
ICAybmQgICAgICAgICAgfCAgICAgIDFzdCBjb21wb25lbnQgICAgIHwKKyAgICAgICAgICAgIC8v
ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2Yg
QkdSQV9FWFQsIEIgaXMgdGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28g
Zm9ydGguCisgICAgICAgICAgICBzaG9ydERhdGFbeCArIHkgKiBvdXRwdXRQaXRjaCAvIHNpemVv
Zih1bnNpZ25lZCBzaG9ydCldID0KKyAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgc2hvcnQ+KCAgICAgY29sb3IuYWxwaGEgKyAwLjVmKSA8PCAxNSkgfAorICAgICAgICAgICAg
ICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMzEgKiBjb2xvci5yZWQgICArIDAuNWYp
IDw8IDEwKSB8CisgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pigz
MSAqIGNvbG9yLmdyZWVuICsgMC41ZikgPDwgIDUpIHwKKyAgICAgICAgICAgICAgICAoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDMxICogY29sb3IuYmx1ZSAgKyAwLjVmKSA8PCAgMCk7Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBFUlIo
IldyaXRlUGl4ZWxDb2xvciBub3QgaW1wbGVtZW50ZWQgZm9yIGZvcm1hdCBHTF9CR1JBX0VYVCBh
bmQgdHlwZSAweCVYLiIsIHR5cGUpOworICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2Ug
R0xfUkdCOgorICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgICAgICAgICAgc2hvcnREYXRhW3ggKyB5ICog
b3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9CisgICAgICAgICAgICAgICAg
KHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigzMSAqIGNvbG9yLmJsdWUgICsgMC41ZikgPDwg
IDApIHwKKyAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDYzICog
Y29sb3IuZ3JlZW4gKyAwLjVmKSA8PCAgNSkgfAorICAgICAgICAgICAgICAgIChzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBzaG9ydD4oMzEgKiBjb2xvci5yZWQgICArIDAuNWYpIDw8IDExKTsKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAg
ICAgICAgYnl0ZURhdGFbMyAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAwXSA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLnJlZCArICAgMC41Zik7CisgICAgICAgICAgICBi
eXRlRGF0YVszICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDFdID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcj4oMjU1ICogY29sb3IuZ3JlZW4gKyAwLjVmKTsKKyAgICAgICAgICAgIGJ5dGVEYXRh
WzMgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMl0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
PigyNTUgKiBjb2xvci5ibHVlICsgIDAuNWYpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgRVJSKCJXcml0ZVBpeGVsQ29sb3Igbm90IGltcGxl
bWVudGVkIGZvciBmb3JtYXQgR0xfUkdCIGFuZCB0eXBlIDB4JVguIiwgdHlwZSk7CisgICAgICAg
ICAgICBVTklNUExFTUVOVEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgRVJSKCJXcml0ZVBpeGVsQ29s
b3Igbm90IGltcGxlbWVudGVkIGZvciBmb3JtYXQgMHglWC4iLCBmb3JtYXQpOworICAgICAgICBV
TklNUExFTUVOVEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBSZW5kZXJl
cjExOjpyZWFkVGV4dHVyZURhdGEoSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCB1bnNpZ25lZCBp
bnQgc3ViUmVzb3VyY2UsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmFyZWEsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGVudW0gc291cmNlRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgR0xzaXplaSBvdXRwdXRQaXRjaCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgcGFja0FsaWdubWVudCwg
dm9pZCAqcGl4ZWxzKQoreworICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleHR1cmVEZXNjOwor
ICAgIHRleHR1cmUtPkdldERlc2MoJnRleHR1cmVEZXNjKTsKKworICAgIEQzRDExX1RFWFRVUkUy
RF9ERVNDIHN0YWdpbmdEZXNjOworICAgIHN0YWdpbmdEZXNjLldpZHRoID0gYXJlYS53aWR0aDsK
KyAgICBzdGFnaW5nRGVzYy5IZWlnaHQgPSBhcmVhLmhlaWdodDsKKyAgICBzdGFnaW5nRGVzYy5N
aXBMZXZlbHMgPSAxOworICAgIHN0YWdpbmdEZXNjLkFycmF5U2l6ZSA9IDE7CisgICAgc3RhZ2lu
Z0Rlc2MuRm9ybWF0ID0gdGV4dHVyZURlc2MuRm9ybWF0OworICAgIHN0YWdpbmdEZXNjLlNhbXBs
ZURlc2MuQ291bnQgPSAxOworICAgIHN0YWdpbmdEZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7
CisgICAgc3RhZ2luZ0Rlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9TVEFHSU5HOworICAgIHN0YWdp
bmdEZXNjLkJpbmRGbGFncyA9IDA7CisgICAgc3RhZ2luZ0Rlc2MuQ1BVQWNjZXNzRmxhZ3MgPSBE
M0QxMV9DUFVfQUNDRVNTX1JFQUQ7CisgICAgc3RhZ2luZ0Rlc2MuTWlzY0ZsYWdzID0gMDsKKwor
ICAgIElEM0QxMVRleHR1cmUyRCogc3RhZ2luZ1RleCA9IE5VTEw7CisgICAgSFJFU1VMVCByZXN1
bHQgPSBtRGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJnN0YWdpbmdEZXNjLCBOVUxMLCAmc3RhZ2lu
Z1RleCk7CisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJGYWls
ZWQgdG8gY3JlYXRlIHN0YWdpbmcgdGV4dHVyZSBmb3IgcmVhZFBpeGVscywgSFJFU1VMVDogMHgl
WC4iLCByZXN1bHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSUQzRDExVGV4dHVy
ZTJEKiBzcmNUZXggPSBOVUxMOworICAgIGlmICh0ZXh0dXJlRGVzYy5TYW1wbGVEZXNjLkNvdW50
ID4gMSkKKyAgICB7CisgICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHJlc29sdmVEZXNjOwor
ICAgICAgICByZXNvbHZlRGVzYy5XaWR0aCA9IHRleHR1cmVEZXNjLldpZHRoOworICAgICAgICBy
ZXNvbHZlRGVzYy5IZWlnaHQgPSB0ZXh0dXJlRGVzYy5IZWlnaHQ7CisgICAgICAgIHJlc29sdmVE
ZXNjLk1pcExldmVscyA9IDE7CisgICAgICAgIHJlc29sdmVEZXNjLkFycmF5U2l6ZSA9IDE7Cisg
ICAgICAgIHJlc29sdmVEZXNjLkZvcm1hdCA9IHRleHR1cmVEZXNjLkZvcm1hdDsKKyAgICAgICAg
cmVzb2x2ZURlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAgIHJlc29sdmVEZXNjLlNh
bXBsZURlc2MuUXVhbGl0eSA9IDA7CisgICAgICAgIHJlc29sdmVEZXNjLlVzYWdlID0gRDNEMTFf
VVNBR0VfREVGQVVMVDsKKyAgICAgICAgcmVzb2x2ZURlc2MuQmluZEZsYWdzID0gMDsKKyAgICAg
ICAgcmVzb2x2ZURlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOworICAgICAgICByZXNvbHZlRGVzYy5N
aXNjRmxhZ3MgPSAwOworCisgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVRleHR1cmUy
RCgmcmVzb2x2ZURlc2MsIE5VTEwsICZzcmNUZXgpOworICAgICAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIGNyZWF0ZSByZXNvbHZl
IHRleHR1cmUgZm9yIHJlYWRQaXhlbHMsIEhSRVNVTFQ6IDB4JVguIiwgcmVzdWx0KTsKKyAgICAg
ICAgICAgIHN0YWdpbmdUZXgtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5SZXNvbHZlU3VicmVzb3VyY2Uoc3JjVGV4
LCAwLCB0ZXh0dXJlLCBzdWJSZXNvdXJjZSwgdGV4dHVyZURlc2MuRm9ybWF0KTsKKyAgICAgICAg
c3ViUmVzb3VyY2UgPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzcmNUZXgg
PSB0ZXh0dXJlOworICAgICAgICBzcmNUZXgtPkFkZFJlZigpOworICAgIH0KKworICAgIEQzRDEx
X0JPWCBzcmNCb3g7CisgICAgc3JjQm94LmxlZnQgPSBhcmVhLng7CisgICAgc3JjQm94LnJpZ2h0
ID0gYXJlYS54ICsgYXJlYS53aWR0aDsKKyAgICBzcmNCb3gudG9wID0gYXJlYS55OworICAgIHNy
Y0JveC5ib3R0b20gPSBhcmVhLnkgKyBhcmVhLmhlaWdodDsKKyAgICBzcmNCb3guZnJvbnQgPSAw
OworICAgIHNyY0JveC5iYWNrID0gMTsKKworICAgIG1EZXZpY2VDb250ZXh0LT5Db3B5U3VicmVz
b3VyY2VSZWdpb24oc3RhZ2luZ1RleCwgMCwgMCwgMCwgMCwgc3JjVGV4LCBzdWJSZXNvdXJjZSwg
JnNyY0JveCk7CisKKyAgICBzcmNUZXgtPlJlbGVhc2UoKTsKKyAgICBzcmNUZXggPSBOVUxMOwor
CisgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBpbmc7CisgICAgbURldmljZUNvbnRl
eHQtPk1hcChzdGFnaW5nVGV4LCAwLCBEM0QxMV9NQVBfUkVBRCwgMCwgJm1hcHBpbmcpOworCisg
ICAgdW5zaWduZWQgY2hhciAqc291cmNlOworICAgIGludCBpbnB1dFBpdGNoOworICAgIGlmIChw
YWNrUmV2ZXJzZVJvd09yZGVyKQorICAgIHsKKyAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcio+KG1hcHBpbmcucERhdGEpICsgbWFwcGluZy5Sb3dQaXRjaCAqIChhcmVh
LmhlaWdodCAtIDEpOworICAgICAgICBpbnB1dFBpdGNoID0gLXN0YXRpY19jYXN0PGludD4obWFw
cGluZy5Sb3dQaXRjaCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNvdXJjZSA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihtYXBwaW5nLnBEYXRhKTsKKyAgICAgICAgaW5w
dXRQaXRjaCA9IHN0YXRpY19jYXN0PGludD4obWFwcGluZy5Sb3dQaXRjaCk7CisgICAgfQorCisg
ICAgdW5zaWduZWQgaW50IGZhc3RQaXhlbFNpemUgPSBnZXRGYXN0UGl4ZWxDb3B5U2l6ZSh0ZXh0
dXJlRGVzYy5Gb3JtYXQsIHNvdXJjZUZvcm1hdCwgZm9ybWF0LCB0eXBlKTsKKyAgICBpZiAoZmFz
dFBpeGVsU2l6ZSAhPSAwKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihwaXhlbHMpOworICAgICAgICBmb3IgKGludCBqID0g
MDsgaiA8IGFyZWEuaGVpZ2h0OyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbWNweShk
ZXN0ICsgaiAqIG91dHB1dFBpdGNoLCBzb3VyY2UgKyBqICogaW5wdXRQaXRjaCwgYXJlYS53aWR0
aCAqIGZhc3RQaXhlbFNpemUpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKHRleHR1
cmVEZXNjLkZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STSAmJgorICAgICAgICAg
ICAgIGZvcm1hdCA9PSBHTF9SR0JBICYmCisgICAgICAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05F
RF9CWVRFKQorICAgIHsKKyAgICAgICAgLy8gRmFzdCBwYXRoIGZvciBzd2FwcGluZyByZWQgd2l0
aCBibHVlCisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyKj4ocGl4ZWxzKTsKKworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGFyZWEuaGVp
Z2h0OyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJl
YS53aWR0aDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBhcmdiID0gKih1bnNpZ25lZCBpbnQqKShzb3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBpdGNo
KTsKKyAgICAgICAgICAgICAgICAqKHVuc2lnbmVkIGludCopKGRlc3QgKyA0ICogaSArIGogKiBv
dXRwdXRQaXRjaCkgPQorICAgICAgICAgICAgICAgICAgICAoYXJnYiAmIDB4RkYwMEZGMDApIHwg
ICAgICAgLy8gS2VlcCBhbHBoYSBhbmQgZ3JlZW4KKyAgICAgICAgICAgICAgICAgICAgKGFyZ2Ig
JiAweDAwRkYwMDAwKSA+PiAxNiB8IC8vIE1vdmUgcmVkIHRvIGJsdWUKKyAgICAgICAgICAgICAg
ICAgICAgKGFyZ2IgJiAweDAwMDAwMEZGKSA8PCAxNjsgIC8vIE1vdmUgYmx1ZSB0byByZWQKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBn
bDo6Q29sb3IgcGl4ZWxDb2xvcjsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBhcmVhLmhl
aWdodDsgaisrKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFy
ZWEud2lkdGg7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZWFkUGl4ZWxD
b2xvcihzb3VyY2UsIHRleHR1cmVEZXNjLkZvcm1hdCwgc291cmNlRm9ybWF0LCBpLCBqLCBpbnB1
dFBpdGNoLCAmcGl4ZWxDb2xvcik7CisgICAgICAgICAgICAgICAgd3JpdGVQaXhlbENvbG9yKHBp
eGVsQ29sb3IsIGZvcm1hdCwgdHlwZSwgaSwgaiwgb3V0cHV0UGl0Y2gsIHBpeGVscyk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtRGV2aWNlQ29udGV4dC0+VW5tYXAo
c3RhZ2luZ1RleCwgMCk7CisKKyAgICBzdGFnaW5nVGV4LT5SZWxlYXNlKCk7CisgICAgc3RhZ2lu
Z1RleCA9IE5VTEw7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6YmxpdFJlbmRlcmJ1ZmZlclJlY3Qo
Y29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRyYXdS
ZWN0LCBSZW5kZXJUYXJnZXQgKnJlYWRSZW5kZXJUYXJnZXQsIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBSZW5kZXJUYXJnZXQgKmRyYXdSZW5kZXJUYXJnZXQsIGJvb2wg
d2hvbGVCdWZmZXJDb3B5KQoreworICAgIEFTU0VSVChyZWFkUmVjdC53aWR0aCA9PSBkcmF3UmVj
dC53aWR0aCAmJiByZWFkUmVjdC5oZWlnaHQgPT0gZHJhd1JlY3QuaGVpZ2h0KTsKKworICAgIFJl
bmRlclRhcmdldDExICpkcmF3UmVuZGVyVGFyZ2V0MTEgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJl
bmRlclRhcmdldDExKGRyYXdSZW5kZXJUYXJnZXQpOworICAgIGlmICghZHJhd1JlbmRlclRhcmdl
dCkKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSBkcmF3IHJlbmRl
ciB0YXJnZXQgZnJvbSB0aGUgZHJhdyBmcmFtZWJ1ZmZlci4iKTsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisgICAgSUQzRDExVGV4
dHVyZTJEICpkcmF3VGV4dHVyZSA9IGRyYXdSZW5kZXJUYXJnZXQxMS0+Z2V0VGV4dHVyZSgpOwor
ICAgIHVuc2lnbmVkIGludCBkcmF3U3VicmVzb3VyY2UgPSBkcmF3UmVuZGVyVGFyZ2V0MTEtPmdl
dFN1YnJlc291cmNlSW5kZXgoKTsKKworICAgIFJlbmRlclRhcmdldDExICpyZWFkUmVuZGVyVGFy
Z2V0MTEgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKHJlYWRSZW5kZXJUYXJn
ZXQpOworICAgIGlmICghcmVhZFJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIEVSUigiRmFp
bGVkIHRvIHJldHJpZXZlIHRoZSByZWFkIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgcmVhZCBmcmFt
ZWJ1ZmZlci4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBm
YWxzZSk7CisgICAgfQorCisgICAgSUQzRDExVGV4dHVyZTJEICpyZWFkVGV4dHVyZSA9IE5VTEw7
CisgICAgdW5zaWduZWQgaW50IHJlYWRTdWJyZXNvdXJjZSA9IDA7CisgICAgaWYgKHJlYWRSZW5k
ZXJUYXJnZXQtPmdldFNhbXBsZXMoKSA+IDApCisgICAgeworICAgICAgICByZWFkVGV4dHVyZSA9
IHJlc29sdmVNdWx0aXNhbXBsZWRUZXh0dXJlKHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0VGV4dHVy
ZSgpLCByZWFkUmVuZGVyVGFyZ2V0MTEtPmdldFN1YnJlc291cmNlSW5kZXgoKSk7CisgICAgICAg
IHJlYWRTdWJyZXNvdXJjZSA9IDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJl
YWRUZXh0dXJlID0gcmVhZFJlbmRlclRhcmdldDExLT5nZXRUZXh0dXJlKCk7CisgICAgICAgIHJl
YWRUZXh0dXJlLT5BZGRSZWYoKTsKKyAgICAgICAgcmVhZFN1YnJlc291cmNlID0gcmVhZFJlbmRl
clRhcmdldDExLT5nZXRTdWJyZXNvdXJjZUluZGV4KCk7CisgICAgfQorCisgICAgaWYgKCFyZWFk
VGV4dHVyZSkKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZWFk
IHJlbmRlciB0YXJnZXQgdmlldyBmcm9tIHRoZSByZWFkIHJlbmRlciB0YXJnZXQuIik7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgIH0KKwor
ICAgIEQzRDExX0JPWCByZWFkQm94OworICAgIHJlYWRCb3gubGVmdCA9IHJlYWRSZWN0Lng7Cisg
ICAgcmVhZEJveC5yaWdodCA9IHJlYWRSZWN0LnggKyByZWFkUmVjdC53aWR0aDsKKyAgICByZWFk
Qm94LnRvcCA9IHJlYWRSZWN0Lnk7CisgICAgcmVhZEJveC5ib3R0b20gPSByZWFkUmVjdC55ICsg
cmVhZFJlY3QuaGVpZ2h0OworICAgIHJlYWRCb3guZnJvbnQgPSAwOworICAgIHJlYWRCb3guYmFj
ayA9IDE7CisKKyAgICAvLyBEM0QxMSBuZWVkcyBkZXB0aC1zdGVuY2lsIENvcHlTdWJyZXNvdXJj
ZVJlZ2lvbnMgdG8gaGF2ZSBhIE5VTEwgcFNyY0JveAorICAgIC8vIFdlIGFsc28gcmVxdWlyZSBj
b21wbGV0ZSBmcmFtZWJ1ZmZlciBjb3BpZXMgZm9yIGRlcHRoLXN0ZW5jaWwgYmxpdC4KKyAgICBE
M0QxMV9CT1ggKnBTcmNCb3ggPSB3aG9sZUJ1ZmZlckNvcHkgPyBOVUxMIDogJnJlYWRCb3g7CisK
KyAgICBtRGV2aWNlQ29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKGRyYXdUZXh0dXJlLCBk
cmF3U3VicmVzb3VyY2UsIGRyYXdSZWN0LngsIGRyYXdSZWN0LnksIDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkVGV4dHVyZSwgcmVhZFN1YnJlc291cmNl
LCBwU3JjQm94KTsKKworICAgIFNhZmVSZWxlYXNlKHJlYWRUZXh0dXJlKTsKKworICAgIHJldHVy
biB0cnVlOworfQorCitJRDNEMTFUZXh0dXJlMkQgKlJlbmRlcmVyMTE6OnJlc29sdmVNdWx0aXNh
bXBsZWRUZXh0dXJlKElEM0QxMVRleHR1cmUyRCAqc291cmNlLCB1bnNpZ25lZCBpbnQgc3VicmVz
b3VyY2UpCit7CisgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4dHVyZURlc2M7CisgICAgc291
cmNlLT5HZXREZXNjKCZ0ZXh0dXJlRGVzYyk7CisKKyAgICBpZiAodGV4dHVyZURlc2MuU2FtcGxl
RGVzYy5Db3VudCA+IDEpCisgICAgeworICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyByZXNv
bHZlRGVzYzsKKyAgICAgICAgcmVzb2x2ZURlc2MuV2lkdGggPSB0ZXh0dXJlRGVzYy5XaWR0aDsK
KyAgICAgICAgcmVzb2x2ZURlc2MuSGVpZ2h0ID0gdGV4dHVyZURlc2MuSGVpZ2h0OworICAgICAg
ICByZXNvbHZlRGVzYy5NaXBMZXZlbHMgPSAxOworICAgICAgICByZXNvbHZlRGVzYy5BcnJheVNp
emUgPSAxOworICAgICAgICByZXNvbHZlRGVzYy5Gb3JtYXQgPSB0ZXh0dXJlRGVzYy5Gb3JtYXQ7
CisgICAgICAgIHJlc29sdmVEZXNjLlNhbXBsZURlc2MuQ291bnQgPSAxOworICAgICAgICByZXNv
bHZlRGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOworICAgICAgICByZXNvbHZlRGVzYy5Vc2Fn
ZSA9IHRleHR1cmVEZXNjLlVzYWdlOworICAgICAgICByZXNvbHZlRGVzYy5CaW5kRmxhZ3MgPSB0
ZXh0dXJlRGVzYy5CaW5kRmxhZ3M7CisgICAgICAgIHJlc29sdmVEZXNjLkNQVUFjY2Vzc0ZsYWdz
ID0gMDsKKyAgICAgICAgcmVzb2x2ZURlc2MuTWlzY0ZsYWdzID0gMDsKKworICAgICAgICBJRDNE
MTFUZXh0dXJlMkQgKnJlc29sdmVUZXh0dXJlID0gTlVMTDsKKyAgICAgICAgSFJFU1VMVCByZXN1
bHQgPSBtRGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJnJlc29sdmVEZXNjLCBOVUxMLCAmcmVzb2x2
ZVRleHR1cmUpOworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEVSUigiRmFpbGVkIHRvIGNyZWF0ZSBhIG11bHRpc2FtcGxlIHJlc29sdmUgdGV4dHVy
ZSwgSFJFU1VMVDogMHglWC4iLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7Cisg
ICAgICAgIH0KKworICAgICAgICBtRGV2aWNlQ29udGV4dC0+UmVzb2x2ZVN1YnJlc291cmNlKHJl
c29sdmVUZXh0dXJlLCAwLCBzb3VyY2UsIHN1YnJlc291cmNlLCB0ZXh0dXJlRGVzYy5Gb3JtYXQp
OworICAgICAgICByZXR1cm4gcmVzb2x2ZVRleHR1cmU7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIHNvdXJjZS0+QWRkUmVmKCk7CisgICAgICAgIHJldHVybiBzb3VyY2U7CisgICAg
fQorfQorCitib29sIFJlbmRlcmVyMTE6OmdldExVSUQoTFVJRCAqYWRhcHRlckx1aWQpIGNvbnN0
Cit7CisgICAgYWRhcHRlckx1aWQtPkhpZ2hQYXJ0ID0gMDsKKyAgICBhZGFwdGVyTHVpZC0+TG93
UGFydCA9IDA7CisKKyAgICBpZiAoIW1EeGdpQWRhcHRlcikKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBEWEdJX0FEQVBURVJfREVTQyBhZGFwdGVyRGVzYzsKKyAg
ICBpZiAoRkFJTEVEKG1EeGdpQWRhcHRlci0+R2V0RGVzYygmYWRhcHRlckRlc2MpKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAqYWRhcHRlckx1aWQgPSBhZGFw
dGVyRGVzYy5BZGFwdGVyTHVpZDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9S
ZW5kZXJlcjExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL1JlbmRlcmVyMTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYjY3NjBiOTE3OTI5NWM0Y2Q3ZTEy
YmQ4OTVkOTM4MzI4MzhjYmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgKQEAgLTAsMCAr
MSwzNTggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFJlbmRlcmVyMTEuaDogRGVmaW5lcyBh
IGJhY2stZW5kIHNwZWNpZmljIGNsYXNzIGZvciB0aGUgRDNEMTEgcmVuZGVyZXIuCisKKyNpZm5k
ZWYgTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUkVSMTFfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JF
TkRFUkVSX1JFTkRFUkVSMTFfSF8KKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWF0
aHV0aWwuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0LmgiCisKK25hbWVzcGFjZSBnbAor
eworY2xhc3MgUmVuZGVyYnVmZmVyOworfQorCituYW1lc3BhY2UgcngKK3sKKworY2xhc3MgVmVy
dGV4RGF0YU1hbmFnZXI7CitjbGFzcyBJbmRleERhdGFNYW5hZ2VyOworY2xhc3MgU3RyZWFtaW5n
SW5kZXhCdWZmZXJJbnRlcmZhY2U7CisKK2VudW0KK3sKKyAgICBNQVhfVkVSVEVYX1VOSUZPUk1f
VkVDVE9SU19EM0QxMSA9IDEwMjQsCisgICAgTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SU19E
M0QxMSA9IDEwMjQKK307CisKK2NsYXNzIFJlbmRlcmVyMTEgOiBwdWJsaWMgUmVuZGVyZXIKK3sK
KyAgcHVibGljOgorICAgIFJlbmRlcmVyMTEoZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBIREMgaERj
KTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJlcjExKCk7CisKKyAgICBzdGF0aWMgUmVuZGVyZXIxMSAq
bWFrZVJlbmRlcmVyMTEoUmVuZGVyZXIgKnJlbmRlcmVyKTsKKworICAgIHZpcnR1YWwgRUdMaW50
IGluaXRpYWxpemUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVzZXREZXZpY2UoKTsKKworICAgIHZp
cnR1YWwgaW50IGdlbmVyYXRlQ29uZmlncyhDb25maWdEZXNjICoqY29uZmlnRGVzY0xpc3QpOwor
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVDb25maWdzKENvbmZpZ0Rlc2MgKmNvbmZpZ0Rlc2NMaXN0
KTsKKworICAgIHZpcnR1YWwgdm9pZCBzeW5jKGJvb2wgYmxvY2spOworCisgICAgdmlydHVhbCBT
d2FwQ2hhaW4gKmNyZWF0ZVN3YXBDaGFpbihIV05EIHdpbmRvdywgSEFORExFIHNoYXJlSGFuZGxl
LCBHTGVudW0gYmFja0J1ZmZlckZvcm1hdCwgR0xlbnVtIGRlcHRoQnVmZmVyRm9ybWF0KTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRTYW1wbGVyU3RhdGUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUsIGlu
dCBpbmRleCwgY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmc2FtcGxlcik7CisgICAgdmlydHVhbCB2
b2lkIHNldFRleHR1cmUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRleCwgZ2w6OlRleHR1
cmUgKnRleHR1cmUpOworCisgICAgdmlydHVhbCB2b2lkIHNldFJhc3Rlcml6ZXJTdGF0ZShjb25z
dCBnbDo6UmFzdGVyaXplclN0YXRlICZyYXN0ZXJTdGF0ZSk7CisgICAgdmlydHVhbCB2b2lkIHNl
dEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5k
U3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xvciAmYmxlbmRDb2xvciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlTWFzayk7CisgICAgdmly
dHVhbCB2b2lkIHNldERlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0
ZSAmZGVwdGhTdGVuY2lsU3RhdGUsIGludCBzdGVuY2lsUmVmLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgc3RlbmNpbEJhY2tSZWYsIGJvb2wgZnJvbnRGYWNlQ0NX
KTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRTY2lzc29yUmVjdGFuZ2xlKGNvbnN0IGdsOjpSZWN0
YW5nbGUgJnNjaXNzb3IsIGJvb2wgZW5hYmxlZCk7CisgICAgdmlydHVhbCBib29sIHNldFZpZXdw
b3J0KGNvbnN0IGdsOjpSZWN0YW5nbGUgJnZpZXdwb3J0LCBmbG9hdCB6TmVhciwgZmxvYXQgekZh
ciwgR0xlbnVtIGRyYXdNb2RlLCBHTGVudW0gZnJvbnRGYWNlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGlnbm9yZVZpZXdwb3J0KTsKKworICAgIHZpcnR1YWwgYm9vbCBhcHBs
eVByaW1pdGl2ZVR5cGUoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQpOworICAgIHZpcnR1YWwg
Ym9vbCBhcHBseVJlbmRlclRhcmdldChnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHlTaGFkZXJzKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5KTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlVbmlmb3JtcyhnbDo6UHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSwgZ2w6OlVuaWZvcm1BcnJheSAqdW5pZm9ybUFycmF5KTsKKyAgICB2aXJ0
dWFsIEdMZW51bSBhcHBseVZlcnRleEJ1ZmZlcihnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSwgZ2w6OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0ZXhBdHRyaWJ1dGVzW10sIEdMaW50IGZpcnN0
LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcyk7CisgICAgdmlydHVhbCBHTGVudW0g
YXBwbHlJbmRleEJ1ZmZlcihjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1l
bnRBcnJheUJ1ZmZlciwgR0xzaXplaSBjb3VudCwgR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBU
cmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pOworCisgICAgdmlydHVhbCB2b2lkIGRyYXdB
cnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBH
TGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJy
YXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbywgR0xzaXplaSBp
bnN0YW5jZXMpOworCisgICAgdmlydHVhbCB2b2lkIGNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFt
ZXRlcnMgJmNsZWFyUGFyYW1zLCBnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKTsKKworICAg
IHZpcnR1YWwgdm9pZCBtYXJrQWxsU3RhdGVEaXJ0eSgpOworCisgICAgLy8gbG9zdCBkZXZpY2UK
KyAgICB2b2lkIG5vdGlmeURldmljZUxvc3QoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNEZXZpY2VM
b3N0KCk7CisgICAgdmlydHVhbCBib29sIHRlc3REZXZpY2VMb3N0KGJvb2wgbm90aWZ5KTsKKyAg
ICB2aXJ0dWFsIGJvb2wgdGVzdERldmljZVJlc2V0dGFibGUoKTsKKworICAgIC8vIFJlbmRlcmVy
IGNhcGFiaWxpdGllcworICAgIHZpcnR1YWwgRFdPUkQgZ2V0QWRhcHRlclZlbmRvcigpIGNvbnN0
OworICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgZ2V0UmVuZGVyZXJEZXNjcmlwdGlvbigpIGNvbnN0
OworICAgIHZpcnR1YWwgR1VJRCBnZXRBZGFwdGVySWRlbnRpZmllcigpIGNvbnN0OworCisgICAg
dmlydHVhbCBib29sIGdldEJHUkFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwg
Ym9vbCBnZXREWFQxVGV4dHVyZVN1cHBvcnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUM1Rl
eHR1cmVTdXBwb3J0KCk7CisgICAgdmlydHVhbCBib29sIGdldERYVDVUZXh0dXJlU3VwcG9ydCgp
OworICAgIHZpcnR1YWwgYm9vbCBnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpOworICAgIHZpcnR1YWwg
Ym9vbCBnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5k
ZXJhYmxlKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KGJvb2wg
KmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSk7CisgICAgdmlydHVhbCBib29sIGdldEx1bWlu
YW5jZVRleHR1cmVTdXBwb3J0KCk7CisgICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZUFscGhh
VGV4dHVyZVN1cHBvcnQoKTsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhU
ZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1h
eENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVk
IGludCBnZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29uc3Q7CisgICAgdmlydHVh
bCB1bnNpZ25lZCBpbnQgZ2V0UmVzZXJ2ZWRGcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgY29uc3Q7
CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhGcmFnbWVudFVuaWZvcm1WZWN0
b3JzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmFyeWluZ1ZlY3Rv
cnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCBnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGJvb2wgZ2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGJvb2wgZ2V0VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3Q7CisgICAgdmly
dHVhbCBmbG9hdCBnZXRUZXh0dXJlTWF4QW5pc290cm9weSgpIGNvbnN0OworICAgIHZpcnR1YWwg
Ym9vbCBnZXRTaGFyZUhhbmRsZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0
RGVyaXZhdGl2ZUluc3RydWN0aW9uU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBn
ZXRQb3N0U3ViQnVmZmVyU3VwcG9ydCgpIGNvbnN0OworCisgICAgdmlydHVhbCBpbnQgZ2V0TWFq
b3JTaGFkZXJNb2RlbCgpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgZ2V0TWF4UG9pbnRTaXpl
KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4Vmlld3BvcnREaW1lbnNpb24oKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGludCBnZXRNYXhUZXh0dXJlV2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGludCBnZXRNYXhUZXh0dXJlSGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdl
dDMyQml0SW5kZXhTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWluU3dhcElu
dGVydmFsKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4U3dhcEludGVydmFsKCkgY29u
c3Q7CisKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpIGNvbnN0
OworICAgIGludCBnZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhEWEdJX0ZPUk1BVCBmb3JtYXQs
IHVuc2lnbmVkIGludCByZXF1ZXN0ZWQpIGNvbnN0OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBp
bnQgZ2V0TWF4UmVuZGVyVGFyZ2V0cygpIGNvbnN0OworCisgICAgLy8gUGl4ZWwgb3BlcmF0aW9u
cworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UyRCAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc291cmNlKTsKKyAgICB2
aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3Vi
ZSAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzb3VyY2UpOworCisgICAgdmly
dHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBn
bDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIEdMaW50IGxldmVsKTsKKyAgICB2aXJ0dWFsIGJvb2wg
Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5n
bGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2VDdWJlICpzdG9yYWdlLCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCk7CisKKyAgICBib29s
IGNvcHlUZXh0dXJlKElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc291cmNlLCBjb25zdCBnbDo6
UmVjdGFuZ2xlICZzb3VyY2VBcmVhLCB1bnNpZ25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVk
IGludCBzb3VyY2VIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICBJRDNEMTFSZW5kZXJUYXJn
ZXRWaWV3ICpkZXN0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkZXN0QXJlYSwgdW5zaWduZWQgaW50
IGRlc3RXaWR0aCwgdW5zaWduZWQgaW50IGRlc3RIZWlnaHQsIEdMZW51bSBkZXN0Rm9ybWF0KTsK
KworICAgIHZpcnR1YWwgYm9vbCBibGl0UmVjdChnbDo6RnJhbWVidWZmZXIgKnJlYWRUYXJnZXQs
IGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRSZWN0LCBnbDo6RnJhbWVidWZmZXIgKmRyYXdUYXJn
ZXQsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRyYXdSZWN0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERlcHRoU3RlbmNpbCk7CisgICAg
dmlydHVhbCB2b2lkIHJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xp
bnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgb3V0
cHV0UGl0Y2gsIGJvb2wgcGFja1JldmVyc2VSb3dPcmRlciwgR0xpbnQgcGFja0FsaWdubWVudCwg
dm9pZCogcGl4ZWxzKTsKKworICAgIC8vIFJlbmRlclRhcmdldCBjcmVhdGlvbgorICAgIHZpcnR1
YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJnZXQoU3dhcENoYWluICpzd2FwQ2hhaW4s
IGJvb2wgZGVwdGgpOworICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJn
ZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMs
IGJvb2wgZGVwdGgpOworCisgICAgLy8gU2hhZGVyIG9wZXJhdGlvbnMKKyAgICB2aXJ0dWFsIFNo
YWRlckV4ZWN1dGFibGUgKmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXpl
X3QgbGVuZ3RoLCByeDo6U2hhZGVyVHlwZSB0eXBlKTsKKyAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1
dGFibGUgKmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNo
YXIgKnNoYWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsIEQzRFdvcmthcm91bmRUeXBlIHdv
cmthcm91bmQpOworCisgICAgLy8gSW1hZ2Ugb3BlcmF0aW9ucworICAgIHZpcnR1YWwgSW1hZ2Ug
KmNyZWF0ZUltYWdlKCk7CisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKEltYWdlICpk
ZXN0LCBJbWFnZSAqc291cmNlKTsKKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVU
ZXh0dXJlU3RvcmFnZTJEKFN3YXBDaGFpbiAqc3dhcENoYWluKTsKKyAgICB2aXJ0dWFsIFRleHR1
cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEdMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0
ZVRleHR1cmVTdG9yYWdlQ3ViZShpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdM
ZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKTsKKworICAgIC8vIEJ1
ZmZlciBjcmVhdGlvbgorICAgIHZpcnR1YWwgVmVydGV4QnVmZmVyICpjcmVhdGVWZXJ0ZXhCdWZm
ZXIoKTsKKyAgICB2aXJ0dWFsIEluZGV4QnVmZmVyICpjcmVhdGVJbmRleEJ1ZmZlcigpOworICAg
IHZpcnR1YWwgQnVmZmVyU3RvcmFnZSAqY3JlYXRlQnVmZmVyU3RvcmFnZSgpOworCisgICAgLy8g
UXVlcnkgYW5kIEZlbmNlIGNyZWF0aW9uCisgICAgdmlydHVhbCBRdWVyeUltcGwgKmNyZWF0ZVF1
ZXJ5KEdMZW51bSB0eXBlKTsKKyAgICB2aXJ0dWFsIEZlbmNlSW1wbCAqY3JlYXRlRmVuY2UoKTsK
KworICAgIC8vIEQzRDExLXJlbmRlcmVyIHNwZWNpZmljIG1ldGhvZHMKKyAgICBJRDNEMTFEZXZp
Y2UgKmdldERldmljZSgpIHsgcmV0dXJuIG1EZXZpY2U7IH0KKyAgICBJRDNEMTFEZXZpY2VDb250
ZXh0ICpnZXREZXZpY2VDb250ZXh0KCkgeyByZXR1cm4gbURldmljZUNvbnRleHQ7IH07CisgICAg
SURYR0lGYWN0b3J5ICpnZXREeGdpRmFjdG9yeSgpIHsgcmV0dXJuIG1EeGdpRmFjdG9yeTsgfTsK
KworICAgIGJvb2wgZ2V0UmVuZGVyVGFyZ2V0UmVzb3VyY2UoZ2w6OlJlbmRlcmJ1ZmZlciAqY29s
b3JidWZmZXIsIHVuc2lnbmVkIGludCAqc3VicmVzb3VyY2VJbmRleCwgSUQzRDExVGV4dHVyZTJE
ICoqcmVzb3VyY2UpOworICAgIHZvaWQgdW5hcHBseVJlbmRlclRhcmdldHMoKTsKKyAgICB2b2lk
IHNldE9uZVRpbWVSZW5kZXJUYXJnZXQoSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqcmVuZGVyVGFy
Z2V0Vmlldyk7CisKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0TFVJRChMVUlEICphZGFwdGVyTHVpZCkg
Y29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVy
ZXIxMSk7CisKKyAgICB2b2lkIGRyYXdMaW5lTG9vcChHTHNpemVpIGNvdW50LCBHTGVudW0gdHlw
ZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBpbnQgbWluSW5kZXgsIGdsOjpCdWZmZXIgKmVsZW1l
bnRBcnJheUJ1ZmZlcik7CisgICAgdm9pZCBkcmF3VHJpYW5nbGVGYW4oR0xzaXplaSBjb3VudCwg
R0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgaW50IG1pbkluZGV4LCBnbDo6QnVm
ZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGludCBpbnN0YW5jZXMpOworCisgICAgdm9pZCByZWFk
VGV4dHVyZURhdGEoSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCB1bnNpZ25lZCBpbnQgc3ViUmVz
b3VyY2UsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmFyZWEsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xlbnVtIHNvdXJjZUZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMc2l6
ZWkgb3V0cHV0UGl0Y2gsIGJvb2wgcGFja1JldmVyc2VSb3dPcmRlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBHTGludCBwYWNrQWxpZ25tZW50LCB2b2lkICpwaXhlbHMpOworCisgICAgdm9p
ZCBtYXNrZWRDbGVhcihjb25zdCBnbDo6Q2xlYXJQYXJhbWV0ZXJzICZjbGVhclBhcmFtcywgZ2w6
OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcik7CisgICAgcng6OlJhbmdlIGdldFZpZXdwb3J0Qm91
bmRzKCkgY29uc3Q7CisKKyAgICBib29sIGJsaXRSZW5kZXJidWZmZXJSZWN0KGNvbnN0IGdsOjpS
ZWN0YW5nbGUgJnJlYWRSZWN0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkcmF3UmVjdCwgUmVuZGVy
VGFyZ2V0ICpyZWFkUmVuZGVyVGFyZ2V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFJlbmRlclRhcmdldCAqZHJhd1JlbmRlclRhcmdldCwgYm9vbCB3aG9sZUJ1ZmZlckNvcHkpOwor
ICAgIElEM0QxMVRleHR1cmUyRCAqcmVzb2x2ZU11bHRpc2FtcGxlZFRleHR1cmUoSUQzRDExVGV4
dHVyZTJEICpzb3VyY2UsIHVuc2lnbmVkIGludCBzdWJyZXNvdXJjZSk7CisKKyAgICBITU9EVUxF
IG1EM2QxMU1vZHVsZTsKKyAgICBITU9EVUxFIG1EeGdpTW9kdWxlOworICAgIEhEQyBtRGM7CisK
KyAgICBib29sIG1EZXZpY2VMb3N0OworCisgICAgdm9pZCBpbml0aWFsaXplRGV2aWNlKCk7Cisg
ICAgdm9pZCByZWxlYXNlRGV2aWNlUmVzb3VyY2VzKCk7CisgICAgaW50IGdldE1pbm9yU2hhZGVy
TW9kZWwoKSBjb25zdDsKKyAgICB2b2lkIHJlbGVhc2UoKTsKKworICAgIFJlbmRlclN0YXRlQ2Fj
aGUgbVN0YXRlQ2FjaGU7CisKKyAgICAvLyBTdXBwb3J0IGZsYWdzCisgICAgYm9vbCBtRmxvYXQx
NlRleHR1cmVTdXBwb3J0OworICAgIGJvb2wgbUZsb2F0MTZGaWx0ZXJTdXBwb3J0OworICAgIGJv
b2wgbUZsb2F0MTZSZW5kZXJTdXBwb3J0OworCisgICAgYm9vbCBtRmxvYXQzMlRleHR1cmVTdXBw
b3J0OworICAgIGJvb2wgbUZsb2F0MzJGaWx0ZXJTdXBwb3J0OworICAgIGJvb2wgbUZsb2F0MzJS
ZW5kZXJTdXBwb3J0OworCisgICAgYm9vbCBtRFhUMVRleHR1cmVTdXBwb3J0OworICAgIGJvb2wg
bURYVDNUZXh0dXJlU3VwcG9ydDsKKyAgICBib29sIG1EWFQ1VGV4dHVyZVN1cHBvcnQ7CisKKyAg
ICBib29sIG1EZXB0aFRleHR1cmVTdXBwb3J0OworCisgICAgLy8gTXVsdGlzYW1wbGUgZm9ybWF0
IHN1cHBvcnQKKyAgICBzdHJ1Y3QgTXVsdGlzYW1wbGVTdXBwb3J0SW5mbworICAgIHsKKyAgICAg
ICAgdW5zaWduZWQgaW50IHF1YWxpdHlMZXZlbHNbRDNEMTFfTUFYX01VTFRJU0FNUExFX1NBTVBM
RV9DT1VOVF07CisgICAgfTsKKworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPERYR0lf
Rk9STUFULCBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvLCBzdGQ6Omhhc2g8aW50PiA+IE11bHRpc2Ft
cGxlU3VwcG9ydE1hcDsKKyAgICBNdWx0aXNhbXBsZVN1cHBvcnRNYXAgbU11bHRpc2FtcGxlU3Vw
cG9ydE1hcDsKKworICAgIHVuc2lnbmVkIGludCBtTWF4U3VwcG9ydGVkU2FtcGxlczsKKworICAg
IC8vIGN1cnJlbnQgcmVuZGVyIHRhcmdldCBzdGF0ZXMKKyAgICB1bnNpZ25lZCBpbnQgbUFwcGxp
ZWRSZW5kZXJUYXJnZXRTZXJpYWxzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJT
XTsKKyAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbDsKKyAgICB1bnNp
Z25lZCBpbnQgbUFwcGxpZWRTdGVuY2lsYnVmZmVyU2VyaWFsOworICAgIGJvb2wgbURlcHRoU3Rl
bmNpbEluaXRpYWxpemVkOworICAgIGJvb2wgbVJlbmRlclRhcmdldERlc2NJbml0aWFsaXplZDsK
KyAgICByeDo6UmVuZGVyVGFyZ2V0OjpEZXNjIG1SZW5kZXJUYXJnZXREZXNjOworICAgIHVuc2ln
bmVkIGludCBtQ3VyRGVwdGhTaXplOworICAgIHVuc2lnbmVkIGludCBtQ3VyU3RlbmNpbFNpemU7
CisKKyAgICAvLyBDdXJyZW50bHkgYXBwbGllZCBzYW1wbGVyIHN0YXRlcworICAgIGJvb2wgbUZv
cmNlU2V0VmVydGV4U2FtcGxlclN0YXRlc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9U
RVhUVVJFX0lNQUdFX1VOSVRTXTsKKyAgICBnbDo6U2FtcGxlclN0YXRlIG1DdXJWZXJ0ZXhTYW1w
bGVyU3RhdGVzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5J
VFNdOworCisgICAgYm9vbCBtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0ZXNbZ2w6Ok1BWF9URVhU
VVJFX0lNQUdFX1VOSVRTXTsKKyAgICBnbDo6U2FtcGxlclN0YXRlIG1DdXJQaXhlbFNhbXBsZXJT
dGF0ZXNbZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKKworICAgIC8vIEN1cnJlbnRseSBh
cHBsaWVkIHRleHR1cmVzCisgICAgdW5zaWduZWQgaW50IG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFs
c1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKKyAg
ICB1bnNpZ25lZCBpbnQgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbZ2w6Ok1BWF9URVhUVVJFX0lN
QUdFX1VOSVRTXTsKKworICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIGJsZW5kIHN0YXRlCisgICAg
Ym9vbCBtRm9yY2VTZXRCbGVuZFN0YXRlOworICAgIGdsOjpCbGVuZFN0YXRlIG1DdXJCbGVuZFN0
YXRlOworICAgIGdsOjpDb2xvciBtQ3VyQmxlbmRDb2xvcjsKKyAgICB1bnNpZ25lZCBpbnQgbUN1
clNhbXBsZU1hc2s7CisKKyAgICAvLyBDdXJyZW50bHkgYXBwbGllZCByYXN0ZXJpemVyIHN0YXRl
CisgICAgYm9vbCBtRm9yY2VTZXRSYXN0ZXJTdGF0ZTsKKyAgICBnbDo6UmFzdGVyaXplclN0YXRl
IG1DdXJSYXN0ZXJTdGF0ZTsKKworICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIGRlcHRoIHN0ZW5j
aWwgc3RhdGUKKyAgICBib29sIG1Gb3JjZVNldERlcHRoU3RlbmNpbFN0YXRlOworICAgIGdsOjpE
ZXB0aFN0ZW5jaWxTdGF0ZSBtQ3VyRGVwdGhTdGVuY2lsU3RhdGU7CisgICAgaW50IG1DdXJTdGVu
Y2lsUmVmOworICAgIGludCBtQ3VyU3RlbmNpbEJhY2tSZWY7CisKKyAgICAvLyBDdXJyZW50bHkg
YXBwbGllZCBzY2lzc29yIHJlY3RhbmdsZQorICAgIGJvb2wgbUZvcmNlU2V0U2Npc3NvcjsKKyAg
ICBib29sIG1TY2lzc29yRW5hYmxlZDsKKyAgICBnbDo6UmVjdGFuZ2xlIG1DdXJTY2lzc29yOwor
CisgICAgLy8gQ3VycmVudGx5IGFwcGxpZWQgdmlld3BvcnQKKyAgICBib29sIG1Gb3JjZVNldFZp
ZXdwb3J0OworICAgIGdsOjpSZWN0YW5nbGUgbUN1clZpZXdwb3J0OworICAgIGZsb2F0IG1DdXJO
ZWFyOworICAgIGZsb2F0IG1DdXJGYXI7CisKKyAgICAvLyBDdXJyZW50bHkgYXBwbGllZCBwcmlt
aXRpdmUgdG9wb2xvZ3kKKyAgICBEM0QxMV9QUklNSVRJVkVfVE9QT0xPR1kgbUN1cnJlbnRQcmlt
aXRpdmVUb3BvbG9neTsKKworICAgIHVuc2lnbmVkIGludCBtQXBwbGllZElCU2VyaWFsOworICAg
IHVuc2lnbmVkIGludCBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbDsKKyAgICB1bnNpZ25lZCBpbnQg
bUFwcGxpZWRJQk9mZnNldDsKKworICAgIHVuc2lnbmVkIGludCBtQXBwbGllZFByb2dyYW1CaW5h
cnlTZXJpYWw7CisgICAgYm9vbCBtSXNHZW9tZXRyeVNoYWRlckFjdGl2ZTsKKworICAgIGR4X1Zl
cnRleENvbnN0YW50cyBtVmVydGV4Q29uc3RhbnRzOworICAgIGR4X1ZlcnRleENvbnN0YW50cyBt
QXBwbGllZFZlcnRleENvbnN0YW50czsKKyAgICBJRDNEMTFCdWZmZXIgKm1Ecml2ZXJDb25zdGFu
dEJ1ZmZlclZTOworICAgIElEM0QxMUJ1ZmZlciAqbUN1cnJlbnRWZXJ0ZXhDb25zdGFudEJ1ZmZl
cjsKKworICAgIGR4X1BpeGVsQ29uc3RhbnRzIG1QaXhlbENvbnN0YW50czsKKyAgICBkeF9QaXhl
bENvbnN0YW50cyBtQXBwbGllZFBpeGVsQ29uc3RhbnRzOworICAgIElEM0QxMUJ1ZmZlciAqbURy
aXZlckNvbnN0YW50QnVmZmVyUFM7CisgICAgSUQzRDExQnVmZmVyICptQ3VycmVudFBpeGVsQ29u
c3RhbnRCdWZmZXI7CisKKyAgICBJRDNEMTFCdWZmZXIgKm1DdXJyZW50R2VvbWV0cnlDb25zdGFu
dEJ1ZmZlcjsKKworICAgIC8vIFZlcnRleCwgaW5kZXggYW5kIGlucHV0IGxheW91dHMKKyAgICBW
ZXJ0ZXhEYXRhTWFuYWdlciAqbVZlcnRleERhdGFNYW5hZ2VyOworICAgIEluZGV4RGF0YU1hbmFn
ZXIgKm1JbmRleERhdGFNYW5hZ2VyOworICAgIElucHV0TGF5b3V0Q2FjaGUgbUlucHV0TGF5b3V0
Q2FjaGU7CisKKyAgICBTdHJlYW1pbmdJbmRleEJ1ZmZlckludGVyZmFjZSAqbUxpbmVMb29wSUI7
CisgICAgU3RyZWFtaW5nSW5kZXhCdWZmZXJJbnRlcmZhY2UgKm1UcmlhbmdsZUZhbklCOworCisg
ICAgLy8gVGV4dHVyZSBjb3B5IHJlc291cmNlcworICAgIGJvb2wgbUNvcHlSZXNvdXJjZXNJbml0
aWFsaXplZDsKKyAgICBJRDNEMTFCdWZmZXIgKm1Db3B5VkI7CisgICAgSUQzRDExU2FtcGxlclN0
YXRlICptQ29weVNhbXBsZXI7CisgICAgSUQzRDExSW5wdXRMYXlvdXQgKm1Db3B5SUw7CisgICAg
SUQzRDExVmVydGV4U2hhZGVyICptQ29weVZTOworICAgIElEM0QxMVBpeGVsU2hhZGVyICptQ29w
eVJHQkFQUzsKKyAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUNvcHlSR0JQUzsKKyAgICBJRDNEMTFQ
aXhlbFNoYWRlciAqbUNvcHlMdW1QUzsKKyAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUNvcHlMdW1B
bHBoYVBTOworCisgICAgLy8gTWFza2VkIGNsZWFyIHJlc291cmNlcworICAgIGJvb2wgbUNsZWFy
UmVzb3VyY2VzSW5pdGlhbGl6ZWQ7CisgICAgSUQzRDExQnVmZmVyICptQ2xlYXJWQjsKKyAgICBJ
RDNEMTFJbnB1dExheW91dCAqbUNsZWFySUw7CisgICAgSUQzRDExVmVydGV4U2hhZGVyICptQ2xl
YXJWUzsKKyAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUNsZWFyU2luZ2xlUFM7CisgICAgSUQzRDEx
UGl4ZWxTaGFkZXIgKm1DbGVhck11bHRpcGxlUFM7CisgICAgSUQzRDExUmFzdGVyaXplclN0YXRl
ICptQ2xlYXJTY2lzc29yUlM7CisgICAgSUQzRDExUmFzdGVyaXplclN0YXRlICptQ2xlYXJOb1Nj
aXNzb3JSUzsKKworICAgIC8vIFN5bmMgcXVlcnkKKyAgICBJRDNEMTFRdWVyeSAqbVN5bmNRdWVy
eTsKKworICAgIElEM0QxMURldmljZSAqbURldmljZTsKKyAgICBEM0RfRkVBVFVSRV9MRVZFTCBt
RmVhdHVyZUxldmVsOworICAgIElEM0QxMURldmljZUNvbnRleHQgKm1EZXZpY2VDb250ZXh0Owor
ICAgIElEWEdJQWRhcHRlciAqbUR4Z2lBZGFwdGVyOworICAgIERYR0lfQURBUFRFUl9ERVNDIG1B
ZGFwdGVyRGVzY3JpcHRpb247CisgICAgY2hhciBtRGVzY3JpcHRpb25bMTI4XTsKKyAgICBJRFhH
SUZhY3RvcnkgKm1EeGdpRmFjdG9yeTsKKworICAgIC8vIENhY2hlZCBkZXZpY2UgY2FwcworICAg
IGJvb2wgbUJHUkFUZXh0dXJlU3VwcG9ydDsKK307CisKK30KKyNlbmRpZiAvLyBMSUJHTEVTVjJf
UkVOREVSRVJfUkVOREVSRVIxMV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFk
ZXJFeGVjdXRhYmxlMTEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJlNDU1ZTNhZjVlM2IzNWYwMDhmMDE5MDgx
ZGFhNmUyNzA3ZjIwNmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1dGFibGUxMS5jcHAKQEAg
LTAsMCArMSwxMDkgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworLy8gU2hhZGVyRXhlY3V0YWJsZTExLmNwcDogSW1wbGVtZW50cyBhIEQzRDExLXNwZWNp
ZmljIGNsYXNzIHRvIGNvbnRhaW4gc2hhZGVyCisvLyBleGVjdXRhYmxlIGltcGxlbWVudGF0aW9u
IGRldGFpbHMuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU2hhZGVyRXhl
Y3V0YWJsZTExLmgiCisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKworbmFtZXNwYWNlIHJ4
Cit7CisKK1NoYWRlckV4ZWN1dGFibGUxMTo6U2hhZGVyRXhlY3V0YWJsZTExKGNvbnN0IHZvaWQg
KmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFQaXhlbFNoYWRlciAqZXhlY3V0YWJsZSkK
KyAgICA6IFNoYWRlckV4ZWN1dGFibGUoZnVuY3Rpb24sIGxlbmd0aCkKK3sKKyAgICBtUGl4ZWxF
eGVjdXRhYmxlID0gZXhlY3V0YWJsZTsKKyAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7Cisg
ICAgbUdlb21ldHJ5RXhlY3V0YWJsZSA9IE5VTEw7CisKKyAgICBtQ29uc3RhbnRCdWZmZXIgPSBO
VUxMOworfQorCitTaGFkZXJFeGVjdXRhYmxlMTE6OlNoYWRlckV4ZWN1dGFibGUxMShjb25zdCB2
b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSUQzRDExVmVydGV4U2hhZGVyICpleGVjdXRh
YmxlKQorICAgIDogU2hhZGVyRXhlY3V0YWJsZShmdW5jdGlvbiwgbGVuZ3RoKQoreworICAgIG1W
ZXJ0ZXhFeGVjdXRhYmxlID0gZXhlY3V0YWJsZTsKKyAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVM
TDsKKyAgICBtR2VvbWV0cnlFeGVjdXRhYmxlID0gTlVMTDsKKworICAgIG1Db25zdGFudEJ1ZmZl
ciA9IE5VTEw7Cit9CisKK1NoYWRlckV4ZWN1dGFibGUxMTo6U2hhZGVyRXhlY3V0YWJsZTExKGNv
bnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFHZW9tZXRyeVNoYWRlciAq
ZXhlY3V0YWJsZSkKKyAgICA6IFNoYWRlckV4ZWN1dGFibGUoZnVuY3Rpb24sIGxlbmd0aCkKK3sK
KyAgICBtR2VvbWV0cnlFeGVjdXRhYmxlID0gZXhlY3V0YWJsZTsKKyAgICBtVmVydGV4RXhlY3V0
YWJsZSA9IE5VTEw7CisgICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7CisKKyAgICBtQ29uc3Rh
bnRCdWZmZXIgPSBOVUxMOworfQorCitTaGFkZXJFeGVjdXRhYmxlMTE6On5TaGFkZXJFeGVjdXRh
YmxlMTEoKQoreworICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSkKKyAgICB7CisgICAgICAgIG1W
ZXJ0ZXhFeGVjdXRhYmxlLT5SZWxlYXNlKCk7CisgICAgfQorICAgIGlmIChtUGl4ZWxFeGVjdXRh
YmxlKQorICAgIHsKKyAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFzZSgpOworICAgIH0K
KyAgICBpZiAobUdlb21ldHJ5RXhlY3V0YWJsZSkKKyAgICB7CisgICAgICAgIG1HZW9tZXRyeUV4
ZWN1dGFibGUtPlJlbGVhc2UoKTsKKyAgICB9CisgICAgCisgICAgaWYgKG1Db25zdGFudEJ1ZmZl
cikKKyAgICB7CisgICAgICAgIG1Db25zdGFudEJ1ZmZlci0+UmVsZWFzZSgpOworICAgIH0KK30K
KworU2hhZGVyRXhlY3V0YWJsZTExICpTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VTaGFkZXJFeGVj
dXRhYmxlMTEoU2hhZGVyRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSkKK3sKKyAgICBBU1NFUlQoSEFT
X0RZTkFNSUNfVFlQRShTaGFkZXJFeGVjdXRhYmxlMTEqLCBleGVjdXRhYmxlKSk7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFNoYWRlckV4ZWN1dGFibGUxMSo+KGV4ZWN1dGFibGUpOworfQorCitJ
RDNEMTFWZXJ0ZXhTaGFkZXIgKlNoYWRlckV4ZWN1dGFibGUxMTo6Z2V0VmVydGV4U2hhZGVyKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbVZlcnRleEV4ZWN1dGFibGU7Cit9CisKK0lEM0QxMVBpeGVs
U2hhZGVyICpTaGFkZXJFeGVjdXRhYmxlMTE6OmdldFBpeGVsU2hhZGVyKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbVBpeGVsRXhlY3V0YWJsZTsKK30KKworSUQzRDExR2VvbWV0cnlTaGFkZXIgKlNo
YWRlckV4ZWN1dGFibGUxMTo6Z2V0R2VvbWV0cnlTaGFkZXIoKSBjb25zdAoreworICAgIHJldHVy
biBtR2VvbWV0cnlFeGVjdXRhYmxlOworfQorCitJRDNEMTFCdWZmZXIgKlNoYWRlckV4ZWN1dGFi
bGUxMTo6Z2V0Q29uc3RhbnRCdWZmZXIoSUQzRDExRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGlu
dCByZWdpc3RlckNvdW50KQoreworICAgIGlmICghbUNvbnN0YW50QnVmZmVyICYmIHJlZ2lzdGVy
Q291bnQgPiAwKQorICAgIHsKKyAgICAgICAgRDNEMTFfQlVGRkVSX0RFU0MgY29uc3RhbnRCdWZm
ZXJEZXNjcmlwdGlvbiA9IHswfTsKKyAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5C
eXRlV2lkdGggPSByZWdpc3RlckNvdW50ICogc2l6ZW9mKGZsb2F0WzRdKTsKKyAgICAgICAgY29u
c3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZTkFNSUM7CisgICAg
ICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uQmluZEZsYWdzID0gRDNEMTFfQklORF9DT05T
VEFOVF9CVUZGRVI7CisgICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uQ1BVQWNjZXNz
RmxhZ3MgPSBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOworICAgICAgICBjb25zdGFudEJ1ZmZlckRl
c2NyaXB0aW9uLk1pc2NGbGFncyA9IDA7CisgICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRp
b24uU3RydWN0dXJlQnl0ZVN0cmlkZSA9IDA7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBk
ZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbiwgTlVMTCwgJm1D
b25zdGFudEJ1ZmZlcik7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAg
fQorCisgICAgcmV0dXJuIG1Db25zdGFudEJ1ZmZlcjsKK30KKworfQpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkMTEvU2hhZGVyRXhlY3V0YWJsZTExLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1dGFibGUx
MS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmM2ZWMxY2Y3ZDJjZGFlYmE0NGQ0YTViODU1NzlkMTgyOTdhNDFmYWQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1dGFibGUxMS5oCkBAIC0wLDAgKzEsNDcgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKy8vIFNoYWRlckV4ZWN1dGFibGUxMS5oOiBEZWZpbmVzIGEgRDNE
MTEtc3BlY2lmaWMgY2xhc3MgdG8gY29udGFpbiBzaGFkZXIKKy8vIGV4ZWN1dGFibGUgaW1wbGVt
ZW50YXRpb24gZGV0YWlscy4KKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfU0hBREVSRVhF
Q1VUQUJMRTExX0hfCisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9TSEFERVJFWEVDVVRBQkxF
MTFfSF8KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlLmgi
CisKK25hbWVzcGFjZSByeAoreworCitjbGFzcyBTaGFkZXJFeGVjdXRhYmxlMTEgOiBwdWJsaWMg
U2hhZGVyRXhlY3V0YWJsZQoreworICBwdWJsaWM6CisgICAgU2hhZGVyRXhlY3V0YWJsZTExKGNv
bnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFQaXhlbFNoYWRlciAqZXhl
Y3V0YWJsZSk7CisgICAgU2hhZGVyRXhlY3V0YWJsZTExKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBz
aXplX3QgbGVuZ3RoLCBJRDNEMTFWZXJ0ZXhTaGFkZXIgKmV4ZWN1dGFibGUpOworICAgIFNoYWRl
ckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSUQzRDEx
R2VvbWV0cnlTaGFkZXIgKmV4ZWN1dGFibGUpOworCisgICAgdmlydHVhbCB+U2hhZGVyRXhlY3V0
YWJsZTExKCk7CisKKyAgICBzdGF0aWMgU2hhZGVyRXhlY3V0YWJsZTExICptYWtlU2hhZGVyRXhl
Y3V0YWJsZTExKFNoYWRlckV4ZWN1dGFibGUgKmV4ZWN1dGFibGUpOworCisgICAgSUQzRDExUGl4
ZWxTaGFkZXIgKmdldFBpeGVsU2hhZGVyKCkgY29uc3Q7CisgICAgSUQzRDExVmVydGV4U2hhZGVy
ICpnZXRWZXJ0ZXhTaGFkZXIoKSBjb25zdDsKKyAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZ2V0
R2VvbWV0cnlTaGFkZXIoKSBjb25zdDsKKworICAgIElEM0QxMUJ1ZmZlciAqZ2V0Q29uc3RhbnRC
dWZmZXIoSUQzRDExRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGludCByZWdpc3RlckNvdW50KTsK
KworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTaGFkZXJFeGVjdXRh
YmxlMTEpOworCisgICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1QaXhlbEV4ZWN1dGFibGU7CisgICAg
SUQzRDExVmVydGV4U2hhZGVyICptVmVydGV4RXhlY3V0YWJsZTsKKyAgICBJRDNEMTFHZW9tZXRy
eVNoYWRlciAqbUdlb21ldHJ5RXhlY3V0YWJsZTsKKworICAgIElEM0QxMUJ1ZmZlciAqbUNvbnN0
YW50QnVmZmVyOworfTsKKworfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1NIQURF
UkVYRUNVVEFCTEUxMV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9Td2FwQ2hhaW4xMS5jcHAgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFpbjExLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4yNjlkNDUxNjY4ZmQwMDA2YzQ2MmY4YTVlMGNjMDE0NmY3MDhhZmIxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9Td2FwQ2hhaW4xMS5jcHAKQEAgLTAsMCArMSw2NTcgQEAKKyNpbmNsdWRlICJw
cmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gU3dhcENoYWluMTEuY3BwOiBJ
bXBsZW1lbnRzIGEgYmFjay1lbmQgc3BlY2lmaWMgY2xhc3MgZm9yIHRoZSBEM0QxMSBzd2FwIGNo
YWluLgorCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFpbjExLmgi
CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgiCisKKyNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhy
b3VnaDExdnMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9j
b21waWxlZC9wYXNzdGhyb3VnaHJnYmExMXBzLmgiCisKK25hbWVzcGFjZSByeAoreworCitTd2Fw
Q2hhaW4xMTo6U3dhcENoYWluMTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIsIEhXTkQgd2luZG93LCBI
QU5ETEUgc2hhcmVIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGJhY2tC
dWZmZXJGb3JtYXQsIEdMZW51bSBkZXB0aEJ1ZmZlckZvcm1hdCkKKyAgICA6IG1SZW5kZXJlcihy
ZW5kZXJlciksIFN3YXBDaGFpbih3aW5kb3csIHNoYXJlSGFuZGxlLCBiYWNrQnVmZmVyRm9ybWF0
LCBkZXB0aEJ1ZmZlckZvcm1hdCkKK3sKKyAgICBtU3dhcENoYWluID0gTlVMTDsKKyAgICBtQmFj
a0J1ZmZlclRleHR1cmUgPSBOVUxMOworICAgIG1CYWNrQnVmZmVyUlRWaWV3ID0gTlVMTDsKKyAg
ICBtT2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7CisgICAgbU9mZnNjcmVlblJUVmlldyA9IE5VTEw7
CisgICAgbU9mZnNjcmVlblNSVmlldyA9IE5VTEw7CisgICAgbURlcHRoU3RlbmNpbFRleHR1cmUg
PSBOVUxMOworICAgIG1EZXB0aFN0ZW5jaWxEU1ZpZXcgPSBOVUxMOworICAgIG1RdWFkVkIgPSBO
VUxMOworICAgIG1QYXNzVGhyb3VnaFNhbXBsZXIgPSBOVUxMOworICAgIG1QYXNzVGhyb3VnaElM
ID0gTlVMTDsKKyAgICBtUGFzc1Rocm91Z2hWUyA9IE5VTEw7CisgICAgbVBhc3NUaHJvdWdoUFMg
PSBOVUxMOworICAgIG1XaWR0aCA9IC0xOworICAgIG1IZWlnaHQgPSAtMTsKKyAgICBtU3dhcElu
dGVydmFsID0gMDsKKyAgICBtQXBwQ3JlYXRlZFNoYXJlSGFuZGxlID0gbVNoYXJlSGFuZGxlICE9
IE5VTEw7CisgICAgbVBhc3NUaHJvdWdoUmVzb3VyY2VzSW5pdCA9IGZhbHNlOworfQorCitTd2Fw
Q2hhaW4xMTo6flN3YXBDaGFpbjExKCkKK3sKKyAgICByZWxlYXNlKCk7Cit9CisKK3ZvaWQgU3dh
cENoYWluMTE6OnJlbGVhc2UoKQoreworICAgIFNhZmVSZWxlYXNlKG1Td2FwQ2hhaW4pOworICAg
IFNhZmVSZWxlYXNlKG1CYWNrQnVmZmVyVGV4dHVyZSk7CisgICAgU2FmZVJlbGVhc2UobUJhY2tC
dWZmZXJSVFZpZXcpOworICAgIFNhZmVSZWxlYXNlKG1PZmZzY3JlZW5UZXh0dXJlKTsKKyAgICBT
YWZlUmVsZWFzZShtT2Zmc2NyZWVuUlRWaWV3KTsKKyAgICBTYWZlUmVsZWFzZShtT2Zmc2NyZWVu
U1JWaWV3KTsKKyAgICBTYWZlUmVsZWFzZShtRGVwdGhTdGVuY2lsVGV4dHVyZSk7CisgICAgU2Fm
ZVJlbGVhc2UobURlcHRoU3RlbmNpbERTVmlldyk7CisgICAgU2FmZVJlbGVhc2UobVF1YWRWQik7
CisgICAgU2FmZVJlbGVhc2UobVBhc3NUaHJvdWdoU2FtcGxlcik7CisgICAgU2FmZVJlbGVhc2Uo
bVBhc3NUaHJvdWdoSUwpOworICAgIFNhZmVSZWxlYXNlKG1QYXNzVGhyb3VnaFZTKTsKKyAgICBT
YWZlUmVsZWFzZShtUGFzc1Rocm91Z2hQUyk7CisKKyAgICBpZiAoIW1BcHBDcmVhdGVkU2hhcmVI
YW5kbGUpCisgICAgeworICAgICAgICBtU2hhcmVIYW5kbGUgPSBOVUxMOworICAgIH0KK30KKwor
dm9pZCBTd2FwQ2hhaW4xMTo6cmVsZWFzZU9mZnNjcmVlblRleHR1cmUoKQoreworICAgIFNhZmVS
ZWxlYXNlKG1PZmZzY3JlZW5UZXh0dXJlKTsKKyAgICBTYWZlUmVsZWFzZShtT2Zmc2NyZWVuUlRW
aWV3KTsKKyAgICBTYWZlUmVsZWFzZShtT2Zmc2NyZWVuU1JWaWV3KTsKKyAgICBTYWZlUmVsZWFz
ZShtRGVwdGhTdGVuY2lsVGV4dHVyZSk7CisgICAgU2FmZVJlbGVhc2UobURlcHRoU3RlbmNpbERT
Vmlldyk7Cit9CisKK0VHTGludCBTd2FwQ2hhaW4xMTo6cmVzZXRPZmZzY3JlZW5UZXh0dXJlKGlu
dCBiYWNrYnVmZmVyV2lkdGgsIGludCBiYWNrYnVmZmVySGVpZ2h0KQoreworICAgIElEM0QxMURl
dmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgIEFTU0VSVChkZXZp
Y2UgIT0gTlVMTCk7CisKKyAgICAvLyBEM0QxMSBkb2VzIG5vdCBhbGxvdyB6ZXJvIHNpemUgdGV4
dHVyZXMKKyAgICBBU1NFUlQoYmFja2J1ZmZlcldpZHRoID49IDEpOworICAgIEFTU0VSVChiYWNr
YnVmZmVySGVpZ2h0ID49IDEpOworCisgICAgLy8gUHJlc2VydmUgdGhlIHJlbmRlciB0YXJnZXQg
Y29udGVudAorICAgIElEM0QxMVRleHR1cmUyRCAqcHJldmlvdXNPZmZzY3JlZW5UZXh0dXJlID0g
bU9mZnNjcmVlblRleHR1cmU7CisgICAgaWYgKHByZXZpb3VzT2Zmc2NyZWVuVGV4dHVyZSkKKyAg
ICB7CisgICAgICAgIHByZXZpb3VzT2Zmc2NyZWVuVGV4dHVyZS0+QWRkUmVmKCk7CisgICAgfQor
ICAgIGNvbnN0IGludCBwcmV2aW91c1dpZHRoID0gbVdpZHRoOworICAgIGNvbnN0IGludCBwcmV2
aW91c0hlaWdodCA9IG1IZWlnaHQ7CisKKyAgICByZWxlYXNlT2Zmc2NyZWVuVGV4dHVyZSgpOwor
CisgICAgLy8gSWYgdGhlIGFwcCBwYXNzZWQgaW4gYSBzaGFyZSBoYW5kbGUsIG9wZW4gdGhlIHJl
c291cmNlCisgICAgLy8gU2VlIEVHTF9BTkdMRV9kM2Rfc2hhcmVfaGFuZGxlX2NsaWVudF9idWZm
ZXIKKyAgICBpZiAobUFwcENyZWF0ZWRTaGFyZUhhbmRsZSkKKyAgICB7CisgICAgICAgIElEM0Qx
MVJlc291cmNlICp0ZW1wUmVzb3VyY2UxMTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZp
Y2UtPk9wZW5TaGFyZWRSZXNvdXJjZShtU2hhcmVIYW5kbGUsIF9fdXVpZG9mKElEM0QxMVJlc291
cmNlKSwgKHZvaWQqKikmdGVtcFJlc291cmNlMTEpOworCisgICAgICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gb3BlbiB0aGUgc3dh
cCBjaGFpbiBwYnVmZmVyIHNoYXJlIGhhbmRsZTogJTA4bFgiLCByZXN1bHQpOworICAgICAgICAg
ICAgcmVsZWFzZSgpOworICAgICAgICAgICAgcmV0dXJuIEVHTF9CQURfUEFSQU1FVEVSOworICAg
ICAgICB9CisKKyAgICAgICAgcmVzdWx0ID0gdGVtcFJlc291cmNlMTEtPlF1ZXJ5SW50ZXJmYWNl
KF9fdXVpZG9mKElEM0QxMVRleHR1cmUyRCksICh2b2lkKiopJm1PZmZzY3JlZW5UZXh0dXJlKTsK
KyAgICAgICAgdGVtcFJlc291cmNlMTEtPlJlbGVhc2UoKTsKKworICAgICAgICBpZiAoRkFJTEVE
KHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIHF1ZXJ5IHRl
eHR1cmUyZCBpbnRlcmZhY2UgaW4gcGJ1ZmZlciBzaGFyZSBoYW5kbGU6ICUwOGxYIiwgcmVzdWx0
KTsKKyAgICAgICAgICAgIHJlbGVhc2UoKTsKKyAgICAgICAgICAgIHJldHVybiBFR0xfQkFEX1BB
UkFNRVRFUjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFZhbGlkYXRlIG9mZnNjcmVlbiB0ZXh0
dXJlIHBhcmFtZXRlcnMKKyAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0Mgb2Zmc2NyZWVuVGV4
dHVyZURlc2MgPSB7MH07CisgICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5HZXREZXNjKCZvZmZz
Y3JlZW5UZXh0dXJlRGVzYyk7CisKKyAgICAgICAgaWYgKG9mZnNjcmVlblRleHR1cmVEZXNjLldp
ZHRoICE9IChVSU5UKWJhY2tidWZmZXJXaWR0aAorICAgICAgICAgICAgfHwgb2Zmc2NyZWVuVGV4
dHVyZURlc2MuSGVpZ2h0ICE9IChVSU5UKWJhY2tidWZmZXJIZWlnaHQKKyAgICAgICAgICAgIHx8
IG9mZnNjcmVlblRleHR1cmVEZXNjLkZvcm1hdCAhPSBnbF9kM2QxMTo6Q29udmVydFJlbmRlcmJ1
ZmZlckZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCkKKyAgICAgICAgICAgIHx8IG9mZnNjcmVlblRl
eHR1cmVEZXNjLk1pcExldmVscyAhPSAxCisgICAgICAgICAgICB8fCBvZmZzY3JlZW5UZXh0dXJl
RGVzYy5BcnJheVNpemUgIT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJJbnZhbGlk
IHRleHR1cmUgcGFyYW1ldGVycyBpbiB0aGUgc2hhcmVkIG9mZnNjcmVlbiB0ZXh0dXJlIHBidWZm
ZXIiKTsKKyAgICAgICAgICAgIHJlbGVhc2UoKTsKKyAgICAgICAgICAgIHJldHVybiBFR0xfQkFE
X1BBUkFNRVRFUjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBj
b25zdCBib29sIHVzZVNoYXJlZFJlc291cmNlID0gIW1XaW5kb3cgJiYgbVJlbmRlcmVyLT5nZXRT
aGFyZUhhbmRsZVN1cHBvcnQoKTsKKworICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBvZmZz
Y3JlZW5UZXh0dXJlRGVzYyA9IHswfTsKKyAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuV2lk
dGggPSBiYWNrYnVmZmVyV2lkdGg7CisgICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLkhlaWdo
dCA9IGJhY2tidWZmZXJIZWlnaHQ7CisgICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLkZvcm1h
dCA9IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0
KTsKKyAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuTWlwTGV2ZWxzID0gMTsKKyAgICAgICAg
b2Zmc2NyZWVuVGV4dHVyZURlc2MuQXJyYXlTaXplID0gMTsKKyAgICAgICAgb2Zmc2NyZWVuVGV4
dHVyZURlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAgIG9mZnNjcmVlblRleHR1cmVE
ZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7CisgICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNj
LlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKKyAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURl
c2MuQmluZEZsYWdzID0gRDNEMTFfQklORF9SRU5ERVJfVEFSR0VUIHwgRDNEMTFfQklORF9TSEFE
RVJfUkVTT1VSQ0U7CisgICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLkNQVUFjY2Vzc0ZsYWdz
ID0gMDsKKyAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuTWlzY0ZsYWdzID0gdXNlU2hhcmVk
UmVzb3VyY2UgPyBEM0QxMV9SRVNPVVJDRV9NSVNDX1NIQVJFRCA6IDA7CisKKyAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmb2Zmc2NyZWVuVGV4dHVyZURl
c2MsIE5VTEwsICZtT2Zmc2NyZWVuVGV4dHVyZSk7CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1
bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgb2Zmc2Ny
ZWVuIHRleHR1cmU6ICUwOGxYIiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJlbGVhc2UoKTsKKwor
ICAgICAgICAgICAgaWYgKGQzZDExOjppc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBFR0xfQ09OVEVYVF9MT1NUOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBFR0xfQkFEX0FMTE9DOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgZDNkMTE6OlNldERlYnVnTmFtZShtT2Zmc2NyZWVuVGV4dHVyZSwgIk9mZnNjcmVlbiB0ZXh0
dXJlIik7CisKKyAgICAgICAgLy8gRUdMX0FOR0xFX3N1cmZhY2VfZDNkX3RleHR1cmVfMmRfc2hh
cmVfaGFuZGxlIHJlcXVpcmVzIHRoYXQgd2Ugc3RvcmUgYSBzaGFyZSBoYW5kbGUgZm9yIHRoZSBj
bGllbnQKKyAgICAgICAgaWYgKHVzZVNoYXJlZFJlc291cmNlKQorICAgICAgICB7CisgICAgICAg
ICAgICBJRFhHSVJlc291cmNlICpvZmZzY3JlZW5UZXh0dXJlUmVzb3VyY2UgPSBOVUxMOworICAg
ICAgICAgICAgcmVzdWx0ID0gbU9mZnNjcmVlblRleHR1cmUtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVp
ZG9mKElEWEdJUmVzb3VyY2UpLCAodm9pZCoqKSZvZmZzY3JlZW5UZXh0dXJlUmVzb3VyY2UpOwor
CisgICAgICAgICAgICAvLyBGYWxsIGJhY2sgdG8gbm8gc2hhcmUgaGFuZGxlIG9uIGZhaWx1cmUK
KyAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBFUlIoIkNvdWxkIG5vdCBxdWVyeSBvZmZzY3JlZW4gdGV4dHVyZSByZXNvdXJjZTog
JTA4bFgiLCByZXN1bHQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IG9mZnNjcmVlblRleHR1cmVSZXNvdXJj
ZS0+R2V0U2hhcmVkSGFuZGxlKCZtU2hhcmVIYW5kbGUpOworICAgICAgICAgICAgICAgIG9mZnNj
cmVlblRleHR1cmVSZXNvdXJjZS0+UmVsZWFzZSgpOworCisgICAgICAgICAgICAgICAgaWYgKEZB
SUxFRChyZXN1bHQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbVNo
YXJlSGFuZGxlID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgZ2V0
IG9mZnNjcmVlbiB0ZXh0dXJlIHNoYXJlZCBoYW5kbGU6ICUwOGxYIiwgcmVzdWx0KTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgICAgIAor
ICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1PZmZz
Y3JlZW5UZXh0dXJlLCBOVUxMLCAmbU9mZnNjcmVlblJUVmlldyk7CisKKyAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOworICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobU9mZnNjcmVlblJUVmll
dywgIk9mZnNjcmVlbiByZW5kZXIgdGFyZ2V0Iik7CisKKyAgICByZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZVNoYWRlclJlc291cmNlVmlldyhtT2Zmc2NyZWVuVGV4dHVyZSwgTlVMTCwgJm1PZmZzY3Jl
ZW5TUlZpZXcpOworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgZDNkMTE6OlNl
dERlYnVnTmFtZShtT2Zmc2NyZWVuU1JWaWV3LCAiT2Zmc2NyZWVuIHNoYWRlciByZXNvdXJjZSIp
OworCisgICAgaWYgKG1EZXB0aEJ1ZmZlckZvcm1hdCAhPSBHTF9OT05FKQorICAgIHsKKyAgICAg
ICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgZGVwdGhTdGVuY2lsRGVzYyA9IHswfTsKKyAgICAgICAg
ZGVwdGhTdGVuY2lsRGVzYy5XaWR0aCA9IGJhY2tidWZmZXJXaWR0aDsKKyAgICAgICAgZGVwdGhT
dGVuY2lsRGVzYy5IZWlnaHQgPSBiYWNrYnVmZmVySGVpZ2h0OworICAgICAgICBkZXB0aFN0ZW5j
aWxEZXNjLkZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1EZXB0
aEJ1ZmZlckZvcm1hdCk7CisgICAgICAgIGRlcHRoU3RlbmNpbERlc2MuTWlwTGV2ZWxzID0gMTsK
KyAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5BcnJheVNpemUgPSAxOworICAgICAgICBkZXB0aFN0
ZW5jaWxEZXNjLlNhbXBsZURlc2MuQ291bnQgPSAxOworICAgICAgICBkZXB0aFN0ZW5jaWxEZXNj
LlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7CisgICAgICAgIGRlcHRoU3RlbmNpbERlc2MuVXNhZ2Ug
PSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLkJpbmRGbGFn
cyA9IEQzRDExX0JJTkRfREVQVEhfU1RFTkNJTDsKKyAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5D
UFVBY2Nlc3NGbGFncyA9IDA7CisgICAgICAgIGRlcHRoU3RlbmNpbERlc2MuTWlzY0ZsYWdzID0g
MDsKKworICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVwdGhTdGVu
Y2lsRGVzYywgTlVMTCwgJm1EZXB0aFN0ZW5jaWxUZXh0dXJlKTsKKyAgICAgICAgaWYgKEZBSUxF
RChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUg
ZGVwdGhzdGVuY2lsIHN1cmZhY2UgZm9yIG5ldyBzd2FwIGNoYWluOiAweCUwOFgiLCByZXN1bHQp
OworICAgICAgICAgICAgcmVsZWFzZSgpOworCisgICAgICAgICAgICBpZiAoZDNkMTE6OmlzRGV2
aWNlTG9zdEVycm9yKHJlc3VsdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIEVHTF9DT05URVhUX0xPU1Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEVHTF9CQURfQUxMT0M7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtRGVwdGhT
dGVuY2lsVGV4dHVyZSwgIkRlcHRoIHN0ZW5jaWwgdGV4dHVyZSIpOworCisgICAgICAgIHJlc3Vs
dCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsVmlldyhtRGVwdGhTdGVuY2lsVGV4dHVyZSwg
TlVMTCwgJm1EZXB0aFN0ZW5jaWxEU1ZpZXcpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOworICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1EZXB0aFN0ZW5jaWxEU1ZpZXcs
ICJEZXB0aCBzdGVuY2lsIHZpZXciKTsKKyAgICB9CisKKyAgICBtV2lkdGggPSBiYWNrYnVmZmVy
V2lkdGg7CisgICAgbUhlaWdodCA9IGJhY2tidWZmZXJIZWlnaHQ7CisKKyAgICBpZiAocHJldmlv
dXNPZmZzY3JlZW5UZXh0dXJlICE9IE5VTEwpCisgICAgeworICAgICAgICBEM0QxMV9CT1ggc291
cmNlQm94ID0gezB9OworICAgICAgICBzb3VyY2VCb3gubGVmdCA9IDA7CisgICAgICAgIHNvdXJj
ZUJveC5yaWdodCA9IHN0ZDo6bWluKHByZXZpb3VzV2lkdGgsIG1XaWR0aCk7CisgICAgICAgIHNv
dXJjZUJveC50b3AgPSBzdGQ6Om1heChwcmV2aW91c0hlaWdodCAtIG1IZWlnaHQsIDApOworICAg
ICAgICBzb3VyY2VCb3guYm90dG9tID0gcHJldmlvdXNIZWlnaHQ7CisgICAgICAgIHNvdXJjZUJv
eC5mcm9udCA9IDA7CisgICAgICAgIHNvdXJjZUJveC5iYWNrID0gMTsKKworICAgICAgICBJRDNE
MTFEZXZpY2VDb250ZXh0ICpkZXZpY2VDb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250
ZXh0KCk7CisgICAgICAgIGNvbnN0IGludCB5b2Zmc2V0ID0gc3RkOjptYXgobUhlaWdodCAtIHBy
ZXZpb3VzSGVpZ2h0LCAwKTsKKyAgICAgICAgZGV2aWNlQ29udGV4dC0+Q29weVN1YnJlc291cmNl
UmVnaW9uKG1PZmZzY3JlZW5UZXh0dXJlLCAwLCAwLCB5b2Zmc2V0LCAwLCBwcmV2aW91c09mZnNj
cmVlblRleHR1cmUsIDAsICZzb3VyY2VCb3gpOworCisgICAgICAgIHByZXZpb3VzT2Zmc2NyZWVu
VGV4dHVyZS0+UmVsZWFzZSgpOworCisgICAgICAgIGlmIChtU3dhcENoYWluKQorICAgICAgICB7
CisgICAgICAgICAgICBzd2FwUmVjdCgwLCAwLCBtV2lkdGgsIG1IZWlnaHQpOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9TVUNDRVNTOworfQorCitFR0xpbnQgU3dhcENoYWlu
MTE6OnJlc2l6ZShFR0xpbnQgYmFja2J1ZmZlcldpZHRoLCBFR0xpbnQgYmFja2J1ZmZlckhlaWdo
dCkKK3sKKyAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7
CisKKyAgICBpZiAoZGV2aWNlID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4gRUdMX0JB
RF9BQ0NFU1M7CisgICAgfQorCisgICAgLy8gRUdMIGFsbG93cyBjcmVhdGluZyBhIHN1cmZhY2Ug
d2l0aCAweDAgZGltZW5zaW9uLCBob3dldmVyLCBEWEdJIGRvZXMgbm90IGxpa2UgMHgwIHN3YXBj
aGFpbnMKKyAgICBpZiAoYmFja2J1ZmZlcldpZHRoIDwgMSB8fCBiYWNrYnVmZmVySGVpZ2h0IDwg
MSkKKyAgICB7CisgICAgICAgIHJldHVybiBFR0xfU1VDQ0VTUzsKKyAgICB9CisKKyAgICAvLyBD
YW4gb25seSBjYWxsIHJlc2l6ZSBpZiB3ZSBoYXZlIGFscmVhZHkgY3JlYXRlZCBvdXIgc3dhcCBi
dWZmZXIgYW5kIHJlc291cmNlcworICAgIEFTU0VSVChtU3dhcENoYWluICYmIG1CYWNrQnVmZmVy
VGV4dHVyZSAmJiBtQmFja0J1ZmZlclJUVmlldyk7CisKKyAgICBTYWZlUmVsZWFzZShtQmFja0J1
ZmZlclRleHR1cmUpOworICAgIFNhZmVSZWxlYXNlKG1CYWNrQnVmZmVyUlRWaWV3KTsKKworICAg
IC8vIFJlc2l6ZSBzd2FwIGNoYWluCisgICAgRFhHSV9GT1JNQVQgYmFja2J1ZmZlckRYR0lGb3Jt
YXQgPSBnbF9kM2QxMTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtQmFja0J1ZmZlckZvcm1h
dCk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBtU3dhcENoYWluLT5SZXNpemVCdWZmZXJzKDIsIGJh
Y2tidWZmZXJXaWR0aCwgYmFja2J1ZmZlckhlaWdodCwgYmFja2J1ZmZlckRYR0lGb3JtYXQsIDAp
OworCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJFcnJvciBy
ZXNpemluZyBzd2FwIGNoYWluIGJ1ZmZlcnM6IDB4JTA4WCIsIHJlc3VsdCk7CisgICAgICAgIHJl
bGVhc2UoKTsKKworICAgICAgICBpZiAoZDNkMTE6OmlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBFR0xfQ09OVEVYVF9MT1NUOworICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9CQURf
QUxMT0M7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXN1bHQgPSBtU3dhcENoYWluLT5HZXRC
dWZmZXIoMCwgX191dWlkb2YoSUQzRDExVGV4dHVyZTJEKSwgKExQVk9JRCopJm1CYWNrQnVmZmVy
VGV4dHVyZSk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICBpZiAoU1VDQ0VF
REVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1CYWNrQnVm
ZmVyVGV4dHVyZSwgIkJhY2sgYnVmZmVyIHRleHR1cmUiKTsKKyAgICB9CisKKyAgICByZXN1bHQg
PSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobUJhY2tCdWZmZXJUZXh0dXJlLCBOVUxM
LCAmbUJhY2tCdWZmZXJSVFZpZXcpOworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Cisg
ICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgZDNkMTE6OlNldERlYnVn
TmFtZShtQmFja0J1ZmZlclJUVmlldywgIkJhY2sgYnVmZmVyIHJlbmRlciB0YXJnZXQiKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gcmVzZXRPZmZzY3JlZW5UZXh0dXJlKGJhY2tidWZmZXJXaWR0aCwg
YmFja2J1ZmZlckhlaWdodCk7Cit9CisKK0VHTGludCBTd2FwQ2hhaW4xMTo6cmVzZXQoaW50IGJh
Y2tidWZmZXJXaWR0aCwgaW50IGJhY2tidWZmZXJIZWlnaHQsIEVHTGludCBzd2FwSW50ZXJ2YWwp
Cit7CisgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwor
CisgICAgaWYgKGRldmljZSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEVHTF9CQURf
QUNDRVNTOworICAgIH0KKworICAgIC8vIFJlbGVhc2Ugc3BlY2lmaWMgcmVzb3VyY2VzIHRvIGZy
ZWUgdXAgbWVtb3J5IGZvciB0aGUgbmV3IHJlbmRlciB0YXJnZXQsIHdoaWxlIHRoZQorICAgIC8v
IG9sZCByZW5kZXIgdGFyZ2V0IHN0aWxsIGV4aXN0cyBmb3IgdGhlIHB1cnBvc2Ugb2YgcHJlc2Vy
dmluZyBpdHMgY29udGVudHMuCisgICAgU2FmZVJlbGVhc2UobVN3YXBDaGFpbik7CisgICAgU2Fm
ZVJlbGVhc2UobUJhY2tCdWZmZXJUZXh0dXJlKTsKKyAgICBTYWZlUmVsZWFzZShtQmFja0J1ZmZl
clJUVmlldyk7CisKKyAgICBtU3dhcEludGVydmFsID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50
Pihzd2FwSW50ZXJ2YWwpOworICAgIGlmIChtU3dhcEludGVydmFsID4gNCkKKyAgICB7CisgICAg
ICAgIC8vIElEWEdJU3dhcENoYWluOjpQcmVzZW50IGRvY3VtZW50YXRpb24gc3RhdGVzIHRoYXQg
dmFsaWQgc3luYyBpbnRlcnZhbHMgYXJlIGluIHRoZSBbMCw0XSByYW5nZQorICAgICAgICByZXR1
cm4gRUdMX0JBRF9QQVJBTUVURVI7CisgICAgfQorCisgICAgLy8gRUdMIGFsbG93cyBjcmVhdGlu
ZyBhIHN1cmZhY2Ugd2l0aCAweDAgZGltZW5zaW9uLCBob3dldmVyLCBEWEdJIGRvZXMgbm90IGxp
a2UgMHgwIHN3YXBjaGFpbnMKKyAgICBpZiAoYmFja2J1ZmZlcldpZHRoIDwgMSB8fCBiYWNrYnVm
ZmVySGVpZ2h0IDwgMSkKKyAgICB7CisgICAgICAgIHJlbGVhc2VPZmZzY3JlZW5UZXh0dXJlKCk7
CisgICAgICAgIHJldHVybiBFR0xfU1VDQ0VTUzsKKyAgICB9CisKKyAgICBpZiAobVdpbmRvdykK
KyAgICB7CisgICAgICAgIElEWEdJRmFjdG9yeSAqZmFjdG9yeSA9IG1SZW5kZXJlci0+Z2V0RHhn
aUZhY3RvcnkoKTsKKworICAgICAgICBEWEdJX1NXQVBfQ0hBSU5fREVTQyBzd2FwQ2hhaW5EZXNj
ID0gezB9OworICAgICAgICBzd2FwQ2hhaW5EZXNjLkJ1ZmZlckNvdW50ID0gMjsKKyAgICAgICAg
c3dhcENoYWluRGVzYy5CdWZmZXJEZXNjLkZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVy
YnVmZmVyRm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0KTsKKyAgICAgICAgc3dhcENoYWluRGVzYy5C
dWZmZXJEZXNjLldpZHRoID0gYmFja2J1ZmZlcldpZHRoOworICAgICAgICBzd2FwQ2hhaW5EZXNj
LkJ1ZmZlckRlc2MuSGVpZ2h0ID0gYmFja2J1ZmZlckhlaWdodDsKKyAgICAgICAgc3dhcENoYWlu
RGVzYy5CdWZmZXJEZXNjLlNjYWxpbmcgPSBEWEdJX01PREVfU0NBTElOR19VTlNQRUNJRklFRDsK
KyAgICAgICAgc3dhcENoYWluRGVzYy5CdWZmZXJEZXNjLlNjYW5saW5lT3JkZXJpbmcgPSBEWEdJ
X01PREVfU0NBTkxJTkVfT1JERVJfVU5TUEVDSUZJRUQ7CisgICAgICAgIHN3YXBDaGFpbkRlc2Mu
QnVmZmVyRGVzYy5SZWZyZXNoUmF0ZS5OdW1lcmF0b3IgPSAwOworICAgICAgICBzd2FwQ2hhaW5E
ZXNjLkJ1ZmZlckRlc2MuUmVmcmVzaFJhdGUuRGVub21pbmF0b3IgPSAxOworICAgICAgICBzd2Fw
Q2hhaW5EZXNjLkJ1ZmZlclVzYWdlID0gRFhHSV9VU0FHRV9SRU5ERVJfVEFSR0VUX09VVFBVVDsK
KyAgICAgICAgc3dhcENoYWluRGVzYy5GbGFncyA9IDA7CisgICAgICAgIHN3YXBDaGFpbkRlc2Mu
T3V0cHV0V2luZG93ID0gbVdpbmRvdzsKKyAgICAgICAgc3dhcENoYWluRGVzYy5TYW1wbGVEZXNj
LkNvdW50ID0gMTsKKyAgICAgICAgc3dhcENoYWluRGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAw
OworICAgICAgICBzd2FwQ2hhaW5EZXNjLldpbmRvd2VkID0gVFJVRTsKKworICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IGZhY3RvcnktPkNyZWF0ZVN3YXBDaGFpbihkZXZpY2UsICZzd2FwQ2hhaW5E
ZXNjLCAmbVN3YXBDaGFpbik7CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAg
ICB7CisgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYWRkaXRpb25hbCBzd2FwIGNo
YWlucyBvciBvZmZzY3JlZW4gc3VyZmFjZXM6ICUwOGxYIiwgcmVzdWx0KTsKKyAgICAgICAgICAg
IHJlbGVhc2UoKTsKKworICAgICAgICAgICAgaWYgKGQzZDExOjppc0RldmljZUxvc3RFcnJvcihy
ZXN1bHQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBFR0xfQ09OVEVY
VF9MT1NUOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBFR0xfQkFEX0FMTE9DOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgcmVzdWx0ID0gbVN3YXBDaGFpbi0+R2V0QnVmZmVyKDAsIF9fdXVp
ZG9mKElEM0QxMVRleHR1cmUyRCksIChMUFZPSUQqKSZtQmFja0J1ZmZlclRleHR1cmUpOworICAg
ICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICBkM2QxMTo6U2V0RGVidWdO
YW1lKG1CYWNrQnVmZmVyVGV4dHVyZSwgIkJhY2sgYnVmZmVyIHRleHR1cmUiKTsKKworICAgICAg
ICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobUJhY2tCdWZmZXJUZXh0
dXJlLCBOVUxMLCAmbUJhY2tCdWZmZXJSVFZpZXcpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOworICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1CYWNrQnVmZmVyUlRWaWV3
LCAiQmFjayBidWZmZXIgcmVuZGVyIHRhcmdldCIpOworICAgIH0KKworICAgIC8vIElmIHdlIGFy
ZSByZXNpemluZyB0aGUgc3dhcCBjaGFpbiwgd2UgZG9uJ3Qgd2lzaCB0byByZWNyZWF0ZSBhbGwg
dGhlIHN0YXRpYyByZXNvdXJjZXMKKyAgICBpZiAoIW1QYXNzVGhyb3VnaFJlc291cmNlc0luaXQp
CisgICAgeworICAgICAgICBtUGFzc1Rocm91Z2hSZXNvdXJjZXNJbml0ID0gdHJ1ZTsKKyAgICAg
ICAgaW5pdFBhc3NUaHJvdWdoUmVzb3VyY2VzKCk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc2V0
T2Zmc2NyZWVuVGV4dHVyZShiYWNrYnVmZmVyV2lkdGgsIGJhY2tidWZmZXJIZWlnaHQpOworfQor
Cit2b2lkIFN3YXBDaGFpbjExOjppbml0UGFzc1Rocm91Z2hSZXNvdXJjZXMoKQoreworICAgIElE
M0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgIEFTU0VS
VChkZXZpY2UgIT0gTlVMTCk7CisKKyAgICAvLyBNYWtlIHN1cmUgb3VyIHJlc291cmNlcyBhcmUg
YWxsIG5vdCBhbGxvY2F0ZWQsIHdoZW4gd2UgY3JlYXRlCisgICAgQVNTRVJUKG1RdWFkVkIgPT0g
TlVMTCAmJiBtUGFzc1Rocm91Z2hTYW1wbGVyID09IE5VTEwpOworICAgIEFTU0VSVChtUGFzc1Ro
cm91Z2hJTCA9PSBOVUxMICYmIG1QYXNzVGhyb3VnaFZTID09IE5VTEwgJiYgbVBhc3NUaHJvdWdo
UFMgPT0gTlVMTCk7CisKKyAgICBEM0QxMV9CVUZGRVJfREVTQyB2YkRlc2M7CisgICAgdmJEZXNj
LkJ5dGVXaWR0aCA9IHNpemVvZihkM2QxMTo6UG9zaXRpb25UZXhDb29yZFZlcnRleCkgKiA0Owor
ICAgIHZiRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZTkFNSUM7CisgICAgdmJEZXNjLkJpbmRG
bGFncyA9IEQzRDExX0JJTkRfVkVSVEVYX0JVRkZFUjsKKyAgICB2YkRlc2MuQ1BVQWNjZXNzRmxh
Z3MgPSBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOworICAgIHZiRGVzYy5NaXNjRmxhZ3MgPSAwOwor
ICAgIHZiRGVzYy5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKKworICAgIEhSRVNVTFQgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVCdWZmZXIoJnZiRGVzYywgTlVMTCwgJm1RdWFkVkIpOworICAgIEFT
U0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgZDNkMTE6OlNldERlYnVnTmFtZShtUXVhZFZC
LCAiU3dhcCBjaGFpbiBxdWFkIHZlcnRleCBidWZmZXIiKTsKKworICAgIEQzRDExX1NBTVBMRVJf
REVTQyBzYW1wbGVyRGVzYzsKKyAgICBzYW1wbGVyRGVzYy5GaWx0ZXIgPSBEM0QxMV9GSUxURVJf
TUlOX01BR19NSVBfUE9JTlQ7CisgICAgc2FtcGxlckRlc2MuQWRkcmVzc1UgPSBEM0QxMV9URVhU
VVJFX0FERFJFU1NfQ0xBTVA7CisgICAgc2FtcGxlckRlc2MuQWRkcmVzc1YgPSBEM0QxMV9URVhU
VVJFX0FERFJFU1NfQ0xBTVA7CisgICAgc2FtcGxlckRlc2MuQWRkcmVzc1cgPSBEM0QxMV9URVhU
VVJFX0FERFJFU1NfQ0xBTVA7CisgICAgc2FtcGxlckRlc2MuTWlwTE9EQmlhcyA9IDAuMGY7Cisg
ICAgc2FtcGxlckRlc2MuTWF4QW5pc290cm9weSA9IDA7CisgICAgc2FtcGxlckRlc2MuQ29tcGFy
aXNvbkZ1bmMgPSBEM0QxMV9DT01QQVJJU09OX05FVkVSOworICAgIHNhbXBsZXJEZXNjLkJvcmRl
ckNvbG9yWzBdID0gMC4wZjsKKyAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclsxXSA9IDAuMGY7
CisgICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbMl0gPSAwLjBmOworICAgIHNhbXBsZXJEZXNj
LkJvcmRlckNvbG9yWzNdID0gMC4wZjsKKyAgICBzYW1wbGVyRGVzYy5NaW5MT0QgPSAwOworICAg
IHNhbXBsZXJEZXNjLk1heExPRCA9IEQzRDExX0ZMT0FUMzJfTUFYOworCisgICAgcmVzdWx0ID0g
ZGV2aWNlLT5DcmVhdGVTYW1wbGVyU3RhdGUoJnNhbXBsZXJEZXNjLCAmbVBhc3NUaHJvdWdoU2Ft
cGxlcik7CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICBkM2QxMTo6U2V0RGVi
dWdOYW1lKG1QYXNzVGhyb3VnaFNhbXBsZXIsICJTd2FwIGNoYWluIHBhc3MgdGhyb3VnaCBzYW1w
bGVyIik7CisKKyAgICBEM0QxMV9JTlBVVF9FTEVNRU5UX0RFU0MgcXVhZExheW91dFtdID0KKyAg
ICB7CisgICAgICAgIHsgIlBPU0lUSU9OIiwgMCwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCAw
LCAwLCBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAgfSwKKyAgICAgICAgeyAiVEVYQ09P
UkQiLCAwLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDAsIDgsIEQzRDExX0lOUFVUX1BFUl9W
RVJURVhfREFUQSwgMCB9LAorICAgIH07CisKKyAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUlu
cHV0TGF5b3V0KHF1YWRMYXlvdXQsIDIsIGdfVlNfUGFzc3Rocm91Z2gsIHNpemVvZihnX1ZTX1Bh
c3N0aHJvdWdoKSwgJm1QYXNzVGhyb3VnaElMKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOworICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobVBhc3NUaHJvdWdoSUwsICJTd2FwIGNoYWlu
IHBhc3MgdGhyb3VnaCBsYXlvdXQiKTsKKworICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVmVy
dGV4U2hhZGVyKGdfVlNfUGFzc3Rocm91Z2gsIHNpemVvZihnX1ZTX1Bhc3N0aHJvdWdoKSwgTlVM
TCwgJm1QYXNzVGhyb3VnaFZTKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAg
IGQzZDExOjpTZXREZWJ1Z05hbWUobVBhc3NUaHJvdWdoVlMsICJTd2FwIGNoYWluIHBhc3MgdGhy
b3VnaCB2ZXJ0ZXggc2hhZGVyIik7CisKKyAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVBpeGVs
U2hhZGVyKGdfUFNfUGFzc3Rocm91Z2hSR0JBLCBzaXplb2YoZ19QU19QYXNzdGhyb3VnaFJHQkEp
LCBOVUxMLCAmbVBhc3NUaHJvdWdoUFMpOworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7
CisgICAgZDNkMTE6OlNldERlYnVnTmFtZShtUGFzc1Rocm91Z2hQUywgIlN3YXAgY2hhaW4gcGFz
cyB0aHJvdWdoIHBpeGVsIHNoYWRlciIpOworfQorCisvLyBwYXJhbWV0ZXJzIHNob3VsZCBiZSB2
YWxpZGF0ZWQvY2xhbXBlZCBieSBjYWxsZXIKK0VHTGludCBTd2FwQ2hhaW4xMTo6c3dhcFJlY3Qo
RUdMaW50IHgsIEVHTGludCB5LCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQpCit7CisgICAg
aWYgKCFtU3dhcENoYWluKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEVHTF9TVUNDRVNTOworICAg
IH0KKworICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsK
KyAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpkZXZpY2VDb250ZXh0ID0gbVJlbmRlcmVyLT5nZXRE
ZXZpY2VDb250ZXh0KCk7CisKKyAgICAvLyBTZXQgdmVydGljZXMKKyAgICBEM0QxMV9NQVBQRURf
U1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2VD
b250ZXh0LT5NYXAobVF1YWRWQiwgMCwgRDNEMTFfTUFQX1dSSVRFX0RJU0NBUkQsIDAsICZtYXBw
ZWRSZXNvdXJjZSk7CisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEVHTF9CQURfQUNDRVNTOworICAgIH0KKworICAgIGQzZDExOjpQb3NpdGlvblRleENvb3Jk
VmVydGV4ICp2ZXJ0aWNlcyA9IHN0YXRpY19jYXN0PGQzZDExOjpQb3NpdGlvblRleENvb3JkVmVy
dGV4Kj4obWFwcGVkUmVzb3VyY2UucERhdGEpOworCisgICAgLy8gQ3JlYXRlIGEgcXVhZCBpbiBo
b21vZ2VuZW91cyBjb29yZGluYXRlcworICAgIGZsb2F0IHgxID0gKHggLyBmbG9hdChtV2lkdGgp
KSAqIDIuMGYgLSAxLjBmOworICAgIGZsb2F0IHkxID0gKHkgLyBmbG9hdChtSGVpZ2h0KSkgKiAy
LjBmIC0gMS4wZjsKKyAgICBmbG9hdCB4MiA9ICgoeCArIHdpZHRoKSAvIGZsb2F0KG1XaWR0aCkp
ICogMi4wZiAtIDEuMGY7CisgICAgZmxvYXQgeTIgPSAoKHkgKyBoZWlnaHQpIC8gZmxvYXQobUhl
aWdodCkpICogMi4wZiAtIDEuMGY7CisKKyAgICBmbG9hdCB1MSA9IHggLyBmbG9hdChtV2lkdGgp
OworICAgIGZsb2F0IHYxID0geSAvIGZsb2F0KG1IZWlnaHQpOworICAgIGZsb2F0IHUyID0gKHgg
KyB3aWR0aCkgLyBmbG9hdChtV2lkdGgpOworICAgIGZsb2F0IHYyID0gKHkgKyBoZWlnaHQpIC8g
ZmxvYXQobUhlaWdodCk7CisKKyAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgm
dmVydGljZXNbMF0sIHgxLCB5MSwgdTEsIHYxKTsKKyAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhD
b29yZFZlcnRleCgmdmVydGljZXNbMV0sIHgxLCB5MiwgdTEsIHYyKTsKKyAgICBkM2QxMTo6U2V0
UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNbMl0sIHgyLCB5MSwgdTIsIHYxKTsKKyAg
ICBkM2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNbM10sIHgyLCB5Miwg
dTIsIHYyKTsKKworICAgIGRldmljZUNvbnRleHQtPlVubWFwKG1RdWFkVkIsIDApOworCisgICAg
c3RhdGljIFVJTlQgc3RyaWRlID0gc2l6ZW9mKGQzZDExOjpQb3NpdGlvblRleENvb3JkVmVydGV4
KTsKKyAgICBzdGF0aWMgVUlOVCBzdGFydElkeCA9IDA7CisgICAgZGV2aWNlQ29udGV4dC0+SUFT
ZXRWZXJ0ZXhCdWZmZXJzKDAsIDEsICZtUXVhZFZCLCAmc3RyaWRlLCAmc3RhcnRJZHgpOworCisg
ICAgLy8gQXBwbHkgc3RhdGUKKyAgICBkZXZpY2VDb250ZXh0LT5PTVNldERlcHRoU3RlbmNpbFN0
YXRlKE5VTEwsIDB4RkZGRkZGRkYpOworCisgICAgc3RhdGljIGNvbnN0IGZsb2F0IGJsZW5kRmFj
dG9yWzRdID0geyAxLjBmLCAxLjBmLCAxLjBmLCAxLjBmIH07CisgICAgZGV2aWNlQ29udGV4dC0+
T01TZXRCbGVuZFN0YXRlKE5VTEwsIGJsZW5kRmFjdG9yLCAweEZGRkZGRkYpOworCisgICAgZGV2
aWNlQ29udGV4dC0+UlNTZXRTdGF0ZShOVUxMKTsKKworICAgIC8vIEFwcGx5IHNoYWRlcnMKKyAg
ICBkZXZpY2VDb250ZXh0LT5JQVNldElucHV0TGF5b3V0KG1QYXNzVGhyb3VnaElMKTsKKyAgICBk
ZXZpY2VDb250ZXh0LT5JQVNldFByaW1pdGl2ZVRvcG9sb2d5KEQzRF9QUklNSVRJVkVfVE9QT0xP
R1lfVFJJQU5HTEVTVFJJUCk7CisgICAgZGV2aWNlQ29udGV4dC0+VlNTZXRTaGFkZXIobVBhc3NU
aHJvdWdoVlMsIE5VTEwsIDApOworICAgIGRldmljZUNvbnRleHQtPlBTU2V0U2hhZGVyKG1QYXNz
VGhyb3VnaFBTLCBOVUxMLCAwKTsKKyAgICBkZXZpY2VDb250ZXh0LT5HU1NldFNoYWRlcihOVUxM
LCBOVUxMLCAwKTsKKworICAgIC8vIEFwcGx5IHJlbmRlciB0YXJnZXRzCisgICAgbVJlbmRlcmVy
LT5zZXRPbmVUaW1lUmVuZGVyVGFyZ2V0KG1CYWNrQnVmZmVyUlRWaWV3KTsKKworICAgIC8vIFNl
dCB0aGUgdmlld3BvcnQKKyAgICBEM0QxMV9WSUVXUE9SVCB2aWV3cG9ydDsKKyAgICB2aWV3cG9y
dC5Ub3BMZWZ0WCA9IDA7CisgICAgdmlld3BvcnQuVG9wTGVmdFkgPSAwOworICAgIHZpZXdwb3J0
LldpZHRoID0gbVdpZHRoOworICAgIHZpZXdwb3J0LkhlaWdodCA9IG1IZWlnaHQ7CisgICAgdmll
d3BvcnQuTWluRGVwdGggPSAwLjBmOworICAgIHZpZXdwb3J0Lk1heERlcHRoID0gMS4wZjsKKyAg
ICBkZXZpY2VDb250ZXh0LT5SU1NldFZpZXdwb3J0cygxLCAmdmlld3BvcnQpOworCisgICAgLy8g
QXBwbHkgdGV4dHVyZXMKKyAgICBkZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlclJlc291cmNlcygw
LCAxLCAmbU9mZnNjcmVlblNSVmlldyk7CisgICAgZGV2aWNlQ29udGV4dC0+UFNTZXRTYW1wbGVy
cygwLCAxLCAmbVBhc3NUaHJvdWdoU2FtcGxlcik7CisKKyAgICAvLyBEcmF3CisgICAgZGV2aWNl
Q29udGV4dC0+RHJhdyg0LCAwKTsKKworI2lmIEFOR0xFX0ZPUkNFX1ZTWU5DX09GRgorICAgIHJl
c3VsdCA9IG1Td2FwQ2hhaW4tPlByZXNlbnQoMCwgMCk7CisjZWxzZQorICAgIHJlc3VsdCA9IG1T
d2FwQ2hhaW4tPlByZXNlbnQobVN3YXBJbnRlcnZhbCwgMCk7CisjZW5kaWYKKworICAgIGlmIChy
ZXN1bHQgPT0gRFhHSV9FUlJPUl9ERVZJQ0VfUkVNT1ZFRCkKKyAgICB7CisgICAgICAgIEhSRVNV
TFQgcmVtb3ZlZFJlYXNvbiA9IGRldmljZS0+R2V0RGV2aWNlUmVtb3ZlZFJlYXNvbigpOworICAg
ICAgICBFUlIoIlByZXNlbnQgZmFpbGVkOiB0aGUgRDNEMTEgZGV2aWNlIHdhcyByZW1vdmVkOiAw
eCUwOFgiLCByZW1vdmVkUmVhc29uKTsKKyAgICAgICAgcmV0dXJuIEVHTF9DT05URVhUX0xPU1Q7
CisgICAgfQorICAgIGVsc2UgaWYgKHJlc3VsdCA9PSBEWEdJX0VSUk9SX0RFVklDRV9SRVNFVCkK
KyAgICB7CisgICAgICAgIEVSUigiUHJlc2VudCBmYWlsZWQ6IHRoZSBEM0QxMSBkZXZpY2Ugd2Fz
IHJlc2V0IGZyb20gYSBiYWQgY29tbWFuZC4iKTsKKyAgICAgICAgcmV0dXJuIEVHTF9DT05URVhU
X0xPU1Q7CisgICAgfQorICAgIGVsc2UgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAg
ICAgRVJSKCJQcmVzZW50IGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgMHglMDhYIiwgcmVzdWx0KTsK
KyAgICB9CisKKyAgICAvLyBVbmJpbmQKKyAgICBzdGF0aWMgSUQzRDExU2hhZGVyUmVzb3VyY2VW
aWV3ICpjb25zdCBudWxsU1JWID0gTlVMTDsKKyAgICBkZXZpY2VDb250ZXh0LT5QU1NldFNoYWRl
clJlc291cmNlcygwLCAxLCAmbnVsbFNSVik7CisKKyAgICBtUmVuZGVyZXItPnVuYXBwbHlSZW5k
ZXJUYXJnZXRzKCk7CisgICAgbVJlbmRlcmVyLT5tYXJrQWxsU3RhdGVEaXJ0eSgpOworCisgICAg
cmV0dXJuIEVHTF9TVUNDRVNTOworfQorCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHRleHR1
cmUuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHRleHR1cmUKK0lEM0Qx
MVRleHR1cmUyRCAqU3dhcENoYWluMTE6OmdldE9mZnNjcmVlblRleHR1cmUoKQoreworICAgIGlm
IChtT2Zmc2NyZWVuVGV4dHVyZSkKKyAgICB7CisgICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5B
ZGRSZWYoKTsKKyAgICB9CisKKyAgICByZXR1cm4gbU9mZnNjcmVlblRleHR1cmU7Cit9CisKKy8v
IEluY3JlbWVudHMgcmVmY291bnQgb24gdmlldy4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0
aGUgcmV0dXJuZWQgdmlldworSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqU3dhcENoYWluMTE6Omdl
dFJlbmRlclRhcmdldCgpCit7CisgICAgaWYgKG1PZmZzY3JlZW5SVFZpZXcpCisgICAgeworICAg
ICAgICBtT2Zmc2NyZWVuUlRWaWV3LT5BZGRSZWYoKTsKKyAgICB9CisKKyAgICByZXR1cm4gbU9m
ZnNjcmVlblJUVmlldzsKK30KKworLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiB2aWV3LgorLy8g
Y2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCB2aWV3CitJRDNEMTFTaGFkZXJSZXNv
dXJjZVZpZXcgKlN3YXBDaGFpbjExOjpnZXRSZW5kZXJUYXJnZXRTaGFkZXJSZXNvdXJjZSgpCit7
CisgICAgaWYgKG1PZmZzY3JlZW5TUlZpZXcpCisgICAgeworICAgICAgICBtT2Zmc2NyZWVuU1JW
aWV3LT5BZGRSZWYoKTsKKyAgICB9CisKKyAgICByZXR1cm4gbU9mZnNjcmVlblNSVmlldzsKK30K
KworLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiB2aWV3LgorLy8gY2FsbGVyIG11c3QgUmVsZWFz
ZSgpIHRoZSByZXR1cm5lZCB2aWV3CitJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpTd2FwQ2hhaW4x
MTo6Z2V0RGVwdGhTdGVuY2lsKCkKK3sKKyAgICBpZiAobURlcHRoU3RlbmNpbERTVmlldykKKyAg
ICB7CisgICAgICAgIG1EZXB0aFN0ZW5jaWxEU1ZpZXctPkFkZFJlZigpOworICAgIH0KKworICAg
IHJldHVybiBtRGVwdGhTdGVuY2lsRFNWaWV3OworfQorCitJRDNEMTFUZXh0dXJlMkQgKlN3YXBD
aGFpbjExOjpnZXREZXB0aFN0ZW5jaWxUZXh0dXJlKCkKK3sKKyAgICBpZiAobURlcHRoU3RlbmNp
bFRleHR1cmUpCisgICAgeworICAgICAgICBtRGVwdGhTdGVuY2lsVGV4dHVyZS0+QWRkUmVmKCk7
CisgICAgfQorCisgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWxUZXh0dXJlOworfQorCitTd2FwQ2hh
aW4xMSAqU3dhcENoYWluMTE6Om1ha2VTd2FwQ2hhaW4xMShTd2FwQ2hhaW4gKnN3YXBDaGFpbikK
K3sKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShyeDo6U3dhcENoYWluMTEqLCBzd2FwQ2hh
aW4pKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8cng6OlN3YXBDaGFpbjExKj4oc3dhcENoYWlu
KTsKK30KKwordm9pZCBTd2FwQ2hhaW4xMTo6cmVjcmVhdGUoKQoreworICAgIC8vIHBvc3NpYmx5
IHNob3VsZCB1c2UgdGhpcyBtZXRob2QgaW5zdGVhZCBvZiByZXNldAorfQorCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L1N3YXBDaGFpbjExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL1N3YXBDaGFpbjExLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODAwMTA0NjAyZTM1YjBiY2Jh
MTEwMzlhMTZlYmZjNjExMTYxZWY2MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dhcENoYWluMTEuaApAQCAt
MCwwICsxLDc4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gU3dhcENoYWluMTEuaDogRGVmaW5lcyBh
IGJhY2stZW5kIHNwZWNpZmljIGNsYXNzIGZvciB0aGUgRDNEMTEgc3dhcCBjaGFpbi4KKworI2lm
bmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfU1dBUENIQUlOMTFfSF8KKyNkZWZpbmUgTElCR0xFU1Yy
X1JFTkRFUkVSX1NXQVBDSEFJTjExX0hfCisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9Td2FwQ2hhaW4uaCIKKworbmFtZXNwYWNl
IHJ4Cit7CitjbGFzcyBSZW5kZXJlcjExOworCitjbGFzcyBTd2FwQ2hhaW4xMSA6IHB1YmxpYyBT
d2FwQ2hhaW4KK3sKKyAgcHVibGljOgorICAgIFN3YXBDaGFpbjExKFJlbmRlcmVyMTEgKnJlbmRl
cmVyLCBIV05EIHdpbmRvdywgSEFORExFIHNoYXJlSGFuZGxlLAorICAgICAgICAgICAgICAgIEdM
ZW51bSBiYWNrQnVmZmVyRm9ybWF0LCBHTGVudW0gZGVwdGhCdWZmZXJGb3JtYXQpOworICAgIHZp
cnR1YWwgflN3YXBDaGFpbjExKCk7CisKKyAgICBFR0xpbnQgcmVzaXplKEVHTGludCBiYWNrYnVm
ZmVyV2lkdGgsIEVHTGludCBiYWNrYnVmZmVySGVpZ2h0KTsKKyAgICB2aXJ0dWFsIEVHTGludCBy
ZXNldChFR0xpbnQgYmFja2J1ZmZlcldpZHRoLCBFR0xpbnQgYmFja2J1ZmZlckhlaWdodCwgRUdM
aW50IHN3YXBJbnRlcnZhbCk7CisgICAgdmlydHVhbCBFR0xpbnQgc3dhcFJlY3QoRUdMaW50IHgs
IEVHTGludCB5LCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQpOworICAgIHZpcnR1YWwgdm9p
ZCByZWNyZWF0ZSgpOworCisgICAgdmlydHVhbCBJRDNEMTFUZXh0dXJlMkQgKmdldE9mZnNjcmVl
blRleHR1cmUoKTsKKyAgICB2aXJ0dWFsIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmdldFJlbmRl
clRhcmdldCgpOworICAgIHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpnZXRSZW5k
ZXJUYXJnZXRTaGFkZXJSZXNvdXJjZSgpOworCisgICAgdmlydHVhbCBJRDNEMTFUZXh0dXJlMkQg
KmdldERlcHRoU3RlbmNpbFRleHR1cmUoKTsKKyAgICB2aXJ0dWFsIElEM0QxMURlcHRoU3RlbmNp
bFZpZXcgKmdldERlcHRoU3RlbmNpbCgpOworCisgICAgRUdMaW50IGdldFdpZHRoKCkgY29uc3Qg
eyByZXR1cm4gbVdpZHRoOyB9CisgICAgRUdMaW50IGdldEhlaWdodCgpIGNvbnN0IHsgcmV0dXJu
IG1IZWlnaHQ7IH0KKworICAgIHN0YXRpYyBTd2FwQ2hhaW4xMSAqbWFrZVN3YXBDaGFpbjExKFN3
YXBDaGFpbiAqc3dhcENoYWluKTsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihTd2FwQ2hhaW4xMSk7CisKKyAgICB2b2lkIHJlbGVhc2UoKTsKKyAgICB2b2lkIGlu
aXRQYXNzVGhyb3VnaFJlc291cmNlcygpOworICAgIHZvaWQgcmVsZWFzZU9mZnNjcmVlblRleHR1
cmUoKTsKKyAgICBFR0xpbnQgcmVzZXRPZmZzY3JlZW5UZXh0dXJlKGludCBiYWNrYnVmZmVyV2lk
dGgsIGludCBiYWNrYnVmZmVySGVpZ2h0KTsKKworICAgIFJlbmRlcmVyMTEgKm1SZW5kZXJlcjsK
KyAgICBFR0xpbnQgbUhlaWdodDsKKyAgICBFR0xpbnQgbVdpZHRoOworICAgIGJvb2wgbUFwcENy
ZWF0ZWRTaGFyZUhhbmRsZTsKKyAgICB1bnNpZ25lZCBpbnQgbVN3YXBJbnRlcnZhbDsKKyAgICBi
b29sIG1QYXNzVGhyb3VnaFJlc291cmNlc0luaXQ7CisKKyAgICBJRFhHSVN3YXBDaGFpbiAqbVN3
YXBDaGFpbjsKKworICAgIElEM0QxMVRleHR1cmUyRCAqbUJhY2tCdWZmZXJUZXh0dXJlOworICAg
IElEM0QxMVJlbmRlclRhcmdldFZpZXcgKm1CYWNrQnVmZmVyUlRWaWV3OworCisgICAgSUQzRDEx
VGV4dHVyZTJEICptT2Zmc2NyZWVuVGV4dHVyZTsKKyAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3
ICptT2Zmc2NyZWVuUlRWaWV3OworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqbU9mZnNj
cmVlblNSVmlldzsKKworICAgIElEM0QxMVRleHR1cmUyRCAqbURlcHRoU3RlbmNpbFRleHR1cmU7
CisgICAgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqbURlcHRoU3RlbmNpbERTVmlldzsKKworICAg
IElEM0QxMUJ1ZmZlciAqbVF1YWRWQjsKKyAgICBJRDNEMTFTYW1wbGVyU3RhdGUgKm1QYXNzVGhy
b3VnaFNhbXBsZXI7CisgICAgSUQzRDExSW5wdXRMYXlvdXQgKm1QYXNzVGhyb3VnaElMOworICAg
IElEM0QxMVZlcnRleFNoYWRlciAqbVBhc3NUaHJvdWdoVlM7CisgICAgSUQzRDExUGl4ZWxTaGFk
ZXIgKm1QYXNzVGhyb3VnaFBTOworfTsKKworfQorI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJF
Ul9TV0FQQ0hBSU4xMV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9UZXh0dXJlU3RvcmFnZTExLmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVGV4dHVyZVN0b3Jh
Z2UxMS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNWY2ZWEyMTJkNWEwNjAxNzk3OThhOGNkMGY4MDI3NGE5NWM2
YjQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkMTEvVGV4dHVyZVN0b3JhZ2UxMS5jcHAKQEAgLTAsMCArMSw2Njcg
QEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFRleHR1cmVT
dG9yYWdlMTEuY3BwOiBJbXBsZW1lbnRzIHRoZSBhYnN0cmFjdCByeDo6VGV4dHVyZVN0b3JhZ2Ux
MSBjbGFzcyBhbmQgaXRzIGNvbmNyZXRlIGRlcml2ZWQKKy8vIGNsYXNzZXMgVGV4dHVyZVN0b3Jh
Z2UxMV8yRCBhbmQgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlLCB3aGljaCBhY3QgYXMgdGhlIGludGVy
ZmFjZSB0byB0aGUgRDNEMTEgdGV4dHVyZS4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9UZXh0dXJlU3RvcmFnZTExLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvZDNkMTEvUmVuZGVyZXIxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9SZW5kZXJUYXJnZXQxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9T
d2FwQ2hhaW4xMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJl
cjExX3V0aWxzLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL21haW4uaCIKKworbmFtZXNwYWNlIHJ4Cit7CisKK1RleHR1cmVTdG9yYWdl
MTE6OlRleHR1cmVTdG9yYWdlMTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBVSU5UIGJpbmRGbGFncykK
KyAgICA6IG1CaW5kRmxhZ3MoYmluZEZsYWdzKSwKKyAgICAgIG1Mb2RPZmZzZXQoMCksCisgICAg
ICBtTWlwTGV2ZWxzKDApLAorICAgICAgbVRleHR1cmUoTlVMTCksCisgICAgICBtVGV4dHVyZUZv
cm1hdChEWEdJX0ZPUk1BVF9VTktOT1dOKSwKKyAgICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdChE
WEdJX0ZPUk1BVF9VTktOT1dOKSwKKyAgICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQoRFhHSV9GT1JN
QVRfVU5LTk9XTiksCisgICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFUX1VOS05P
V04pLAorICAgICAgbVNSVihOVUxMKSwKKyAgICAgIG1UZXh0dXJlV2lkdGgoMCksCisgICAgICBt
VGV4dHVyZUhlaWdodCgwKQoreworICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyMTE6Om1ha2VSZW5k
ZXJlcjExKHJlbmRlcmVyKTsKK30KKworVGV4dHVyZVN0b3JhZ2UxMTo6flRleHR1cmVTdG9yYWdl
MTEoKQoreworfQorCitUZXh0dXJlU3RvcmFnZTExICpUZXh0dXJlU3RvcmFnZTExOjptYWtlVGV4
dHVyZVN0b3JhZ2UxMShUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSkKK3sKKyAgICBBU1NFUlQoSEFT
X0RZTkFNSUNfVFlQRShUZXh0dXJlU3RvcmFnZTExKiwgc3RvcmFnZSkpOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUZXh0dXJlU3RvcmFnZTExKj4oc3RvcmFnZSk7Cit9CisKK0RXT1JEIFRleHR1
cmVTdG9yYWdlMTE6OkdldFRleHR1cmVCaW5kRmxhZ3MoRFhHSV9GT1JNQVQgZm9ybWF0LCBHTGVu
dW0gZ2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUpCit7CisgICAgVUlOVCBiaW5kRmxhZ3Mg
PSBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRTsKKyAgICAKKyAgICBpZiAoZDNkMTE6OklzRGVw
dGhTdGVuY2lsRm9ybWF0KGZvcm1hdCkpCisgICAgeworICAgICAgICBiaW5kRmxhZ3MgfD0gRDNE
MTFfQklORF9ERVBUSF9TVEVOQ0lMOworICAgIH0KKyAgICBlbHNlIGlmKGZvcmNlUmVuZGVyYWJs
ZSB8fCAoVGV4dHVyZVN0b3JhZ2UxMTo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShmb3JtYXQp
ICYmIChnbHVzYWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpKSkKKyAgICB7
CisgICAgICAgIGJpbmRGbGFncyB8PSBEM0QxMV9CSU5EX1JFTkRFUl9UQVJHRVQ7CisgICAgfQor
ICAgIHJldHVybiBiaW5kRmxhZ3M7Cit9CisKK2Jvb2wgVGV4dHVyZVN0b3JhZ2UxMTo6SXNUZXh0
dXJlRm9ybWF0UmVuZGVyYWJsZShEWEdJX0ZPUk1BVCBmb3JtYXQpCit7CisgICAgc3dpdGNoKGZv
cm1hdCkKKyAgICB7CisgICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOgorICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9BOF9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMy
RzMyQjMyQTMyX0ZMT0FUOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxP
QVQ6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOgorICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9SOF9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9VTk9STToK
KyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X0ZMT0FUOgorICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9SMTZHMTZfRkxPQVQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzFfVU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STTogCisgICAg
ICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMy
RzMyQjMyX0ZMT0FUOiAvLyBub3QgcmVuZGVyYWJsZSBvbiBhbGwgZGV2aWNlcworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitVSU5UIFRleHR1cmVTdG9yYWdlMTE6Omdl
dEJpbmRGbGFncygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1CaW5kRmxhZ3M7Cit9CisKK0lEM0Qx
MVRleHR1cmUyRCAqVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0QmFzZVRleHR1cmUoKSBjb25zdAorewor
ICAgIHJldHVybiBtVGV4dHVyZTsKK30KKworaW50IFRleHR1cmVTdG9yYWdlMTE6OmdldExvZE9m
ZnNldCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1Mb2RPZmZzZXQ7Cit9CisKK2Jvb2wgVGV4dHVy
ZVN0b3JhZ2UxMTo6aXNSZW5kZXJUYXJnZXQoKSBjb25zdAoreworICAgIHJldHVybiAobUJpbmRG
bGFncyAmIChEM0QxMV9CSU5EX1JFTkRFUl9UQVJHRVQgfCBEM0QxMV9CSU5EX0RFUFRIX1NURU5D
SUwpKSAhPSAwOworfQorICAgIAorYm9vbCBUZXh0dXJlU3RvcmFnZTExOjppc01hbmFnZWQoKSBj
b25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworaW50IFRleHR1cmVTdG9yYWdlMTE6Omxl
dmVsQ291bnQoKQoreworICAgIGludCBsZXZlbHMgPSAwOworICAgIGlmIChnZXRCYXNlVGV4dHVy
ZSgpKQorICAgIHsKKyAgICAgICAgbGV2ZWxzID0gbU1pcExldmVscyAtIGdldExvZE9mZnNldCgp
OworICAgIH0KKyAgICByZXR1cm4gbGV2ZWxzOworfQorCitVSU5UIFRleHR1cmVTdG9yYWdlMTE6
OmdldFN1YnJlc291cmNlSW5kZXgoaW50IGxldmVsLCBpbnQgZmFjZUluZGV4KQoreworICAgIFVJ
TlQgaW5kZXggPSAwOworICAgIGlmIChnZXRCYXNlVGV4dHVyZSgpKQorICAgIHsKKyAgICAgICAg
aW5kZXggPSBEM0QxMUNhbGNTdWJyZXNvdXJjZShsZXZlbCwgZmFjZUluZGV4LCBtTWlwTGV2ZWxz
KTsKKyAgICB9CisgICAgcmV0dXJuIGluZGV4OworfQorCitib29sIFRleHR1cmVTdG9yYWdlMTE6
OnVwZGF0ZVN1YnJlc291cmNlTGV2ZWwoSUQzRDExVGV4dHVyZTJEICpzcmNUZXh0dXJlLCB1bnNp
Z25lZCBpbnQgc291cmNlU3VicmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGxldmVsLCBpbnQgZmFjZSwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBpZiAoc3JjVGV4dHVyZSkK
KyAgICB7CisgICAgICAgIC8vIFJvdW5kIHVwIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IHRvIHRoZSBu
ZWFyZXN0IG11bHRpcGxlIG9mIGRpbWVuc2lvbiBhbGlnbm1lbnQKKyAgICAgICAgdW5zaWduZWQg
aW50IGRpbWVuc2lvbkFsaWdubWVudCA9IGQzZDExOjpHZXRUZXh0dXJlRm9ybWF0RGltZW5zaW9u
QWxpZ25tZW50KG1UZXh0dXJlRm9ybWF0KTsKKyAgICAgICAgd2lkdGggPSB3aWR0aCArIGRpbWVu
c2lvbkFsaWdubWVudCAtIDEgLSAod2lkdGggLSAxKSAlIGRpbWVuc2lvbkFsaWdubWVudDsKKyAg
ICAgICAgaGVpZ2h0ID0gaGVpZ2h0ICsgZGltZW5zaW9uQWxpZ25tZW50IC0gMSAtIChoZWlnaHQg
LSAxKSAlIGRpbWVuc2lvbkFsaWdubWVudDsKKworICAgICAgICBEM0QxMV9CT1ggc3JjQm94Owor
ICAgICAgICBzcmNCb3gubGVmdCA9IHhvZmZzZXQ7CisgICAgICAgIHNyY0JveC50b3AgPSB5b2Zm
c2V0OworICAgICAgICBzcmNCb3gucmlnaHQgPSB4b2Zmc2V0ICsgd2lkdGg7CisgICAgICAgIHNy
Y0JveC5ib3R0b20gPSB5b2Zmc2V0ICsgaGVpZ2h0OworICAgICAgICBzcmNCb3guZnJvbnQgPSAw
OworICAgICAgICBzcmNCb3guYmFjayA9IDE7CisKKyAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4
dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworICAgICAgICAKKyAg
ICAgICAgQVNTRVJUKGdldEJhc2VUZXh0dXJlKCkpOworICAgICAgICBjb250ZXh0LT5Db3B5U3Vi
cmVzb3VyY2VSZWdpb24oZ2V0QmFzZVRleHR1cmUoKSwgZ2V0U3VicmVzb3VyY2VJbmRleChsZXZl
bCArIG1Mb2RPZmZzZXQsIGZhY2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeG9mZnNldCwgeW9mZnNldCwgMCwgc3JjVGV4dHVyZSwgc291cmNlU3VicmVzb3VyY2Us
ICZzcmNCb3gpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3ZvaWQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2VuZXJhdGVNaXBtYXBMYXllcihSZW5k
ZXJUYXJnZXQxMSAqc291cmNlLCBSZW5kZXJUYXJnZXQxMSAqZGVzdCkKK3sKKyAgICBpZiAoc291
cmNlICYmIGRlc3QpCisgICAgeworICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNv
dXJjZVNSViA9IHNvdXJjZS0+Z2V0U2hhZGVyUmVzb3VyY2VWaWV3KCk7CisgICAgICAgIElEM0Qx
MVJlbmRlclRhcmdldFZpZXcgKmRlc3RSVFYgPSBkZXN0LT5nZXRSZW5kZXJUYXJnZXRWaWV3KCk7
CisKKyAgICAgICAgaWYgKHNvdXJjZVNSViAmJiBkZXN0UlRWKQorICAgICAgICB7CisgICAgICAg
ICAgICBnbDo6UmVjdGFuZ2xlIHNvdXJjZUFyZWE7CisgICAgICAgICAgICBzb3VyY2VBcmVhLngg
PSAwOworICAgICAgICAgICAgc291cmNlQXJlYS55ID0gMDsKKyAgICAgICAgICAgIHNvdXJjZUFy
ZWEud2lkdGggPSBzb3VyY2UtPmdldFdpZHRoKCk7CisgICAgICAgICAgICBzb3VyY2VBcmVhLmhl
aWdodCA9IHNvdXJjZS0+Z2V0SGVpZ2h0KCk7CisKKyAgICAgICAgICAgIGdsOjpSZWN0YW5nbGUg
ZGVzdEFyZWE7CisgICAgICAgICAgICBkZXN0QXJlYS54ID0gMDsKKyAgICAgICAgICAgIGRlc3RB
cmVhLnkgPSAwOworICAgICAgICAgICAgZGVzdEFyZWEud2lkdGggPSBkZXN0LT5nZXRXaWR0aCgp
OworICAgICAgICAgICAgZGVzdEFyZWEuaGVpZ2h0ID0gZGVzdC0+Z2V0SGVpZ2h0KCk7CisKKyAg
ICAgICAgICAgIG1SZW5kZXJlci0+Y29weVRleHR1cmUoc291cmNlU1JWLCBzb3VyY2VBcmVhLCBz
b3VyY2UtPmdldFdpZHRoKCksIHNvdXJjZS0+Z2V0SGVpZ2h0KCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc3RSVFYsIGRlc3RBcmVhLCBkZXN0LT5nZXRXaWR0aCgpLCBk
ZXN0LT5nZXRIZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xf
UkdCQSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1RleHR1cmVTdG9yYWdlMTFfMkQ6OlRleHR1
cmVTdG9yYWdlMTFfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBTd2FwQ2hhaW4xMSAqc3dhcGNoYWlu
KQorICAgIDogVGV4dHVyZVN0b3JhZ2UxMShyZW5kZXJlciwgRDNEMTFfQklORF9SRU5ERVJfVEFS
R0VUIHwgRDNEMTFfQklORF9TSEFERVJfUkVTT1VSQ0UpCit7CisgICAgbVRleHR1cmUgPSBzd2Fw
Y2hhaW4tPmdldE9mZnNjcmVlblRleHR1cmUoKTsKKyAgICBtU1JWID0gc3dhcGNoYWluLT5nZXRS
ZW5kZXJUYXJnZXRTaGFkZXJSZXNvdXJjZSgpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCisgICAg
eworICAgICAgICBtUmVuZGVyVGFyZ2V0W2ldID0gTlVMTDsKKyAgICB9CisKKyAgICBEM0QxMV9U
RVhUVVJFMkRfREVTQyB0ZXhEZXNjOworICAgIG1UZXh0dXJlLT5HZXREZXNjKCZ0ZXhEZXNjKTsK
KyAgICBtTWlwTGV2ZWxzID0gdGV4RGVzYy5NaXBMZXZlbHM7CisgICAgbVRleHR1cmVGb3JtYXQg
PSB0ZXhEZXNjLkZvcm1hdDsKKyAgICBtVGV4dHVyZVdpZHRoID0gdGV4RGVzYy5XaWR0aDsKKyAg
ICBtVGV4dHVyZUhlaWdodCA9IHRleERlc2MuSGVpZ2h0OworCisgICAgRDNEMTFfU0hBREVSX1JF
U09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOworICAgIG1TUlYtPkdldERlc2MoJnNydkRlc2MpOwor
ICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IHNydkRlc2MuRm9ybWF0OworCisgICAgSUQzRDEx
UmVuZGVyVGFyZ2V0Vmlldyogb2Zmc2NyZWVuUlRWID0gc3dhcGNoYWluLT5nZXRSZW5kZXJUYXJn
ZXQoKTsKKyAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOworICAgIG9m
ZnNjcmVlblJUVi0+R2V0RGVzYygmcnR2RGVzYyk7CisgICAgbVJlbmRlclRhcmdldEZvcm1hdCA9
IHJ0dkRlc2MuRm9ybWF0OworICAgIG9mZnNjcmVlblJUVi0+UmVsZWFzZSgpOworCisgICAgbURl
cHRoU3RlbmNpbEZvcm1hdCA9IERYR0lfRk9STUFUX1VOS05PV047Cit9CisKK1RleHR1cmVTdG9y
YWdlMTFfMkQ6OlRleHR1cmVTdG9yYWdlMTFfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2
ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRl
cmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQorICAgIDogVGV4dHVyZVN0b3Jh
Z2UxMShyZW5kZXJlciwgR2V0VGV4dHVyZUJpbmRGbGFncyhnbF9kM2QxMTo6Q29udmVydFRleHR1
cmVGb3JtYXQoaW50ZXJuYWxmb3JtYXQpLCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlKSkKK3sKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVY
VFVSRV9MRVZFTFM7IGkrKykKKyAgICB7CisgICAgICAgIG1SZW5kZXJUYXJnZXRbaV0gPSBOVUxM
OworICAgIH0KKworICAgIERYR0lfRk9STUFUIGNvbnZlcnRlZEZvcm1hdCA9IGdsX2QzZDExOjpD
b252ZXJ0VGV4dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1hdCk7CisgICAgaWYgKGQzZDExOjpJc0Rl
cHRoU3RlbmNpbEZvcm1hdChjb252ZXJ0ZWRGb3JtYXQpKQorICAgIHsKKyAgICAgICAgbVRleHR1
cmVGb3JtYXQgPSBkM2QxMTo6R2V0RGVwdGhUZXh0dXJlRm9ybWF0KGNvbnZlcnRlZEZvcm1hdCk7
CisgICAgICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IGQzZDExOjpHZXREZXB0aFNoYWRlclJl
c291cmNlRm9ybWF0KGNvbnZlcnRlZEZvcm1hdCk7CisgICAgICAgIG1EZXB0aFN0ZW5jaWxGb3Jt
YXQgPSBjb252ZXJ0ZWRGb3JtYXQ7CisgICAgICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBEWEdJ
X0ZPUk1BVF9VTktOT1dOOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtVGV4dHVy
ZUZvcm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKKyAgICAgICAgbVNoYWRlclJlc291cmNlRm9ybWF0
ID0gY29udmVydGVkRm9ybWF0OworICAgICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0ID0gRFhHSV9G
T1JNQVRfVU5LTk9XTjsKKyAgICAgICAgbVJlbmRlclRhcmdldEZvcm1hdCA9IGNvbnZlcnRlZEZv
cm1hdDsKKyAgICB9CisKKyAgICAvLyBpZiB0aGUgd2lkdGggb3IgaGVpZ2h0IGlzIG5vdCBwb3Np
dGl2ZSB0aGlzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGluY29tcGxldGUgdGV4dHVyZQorICAg
IC8vIHdlIGhhbmRsZSB0aGF0IGhlcmUgYnkgc2tpcHBpbmcgdGhlIGQzZCB0ZXh0dXJlIGNyZWF0
aW9uCisgICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKQorICAgIHsKKyAgICAgICAgLy8g
YWRqdXN0IHNpemUgaWYgbmVlZGVkIGZvciBjb21wcmVzc2VkIHRleHR1cmVzCisgICAgICAgIGds
OjpNYWtlVmFsaWRTaXplKGZhbHNlLCBnbDo6SXNDb21wcmVzc2VkKGludGVybmFsZm9ybWF0KSwg
JndpZHRoLCAmaGVpZ2h0LCAmbUxvZE9mZnNldCk7CisKKyAgICAgICAgSUQzRDExRGV2aWNlICpk
ZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgIEQzRDExX1RFWFRVUkUy
RF9ERVNDIGRlc2M7CisgICAgICAgIGRlc2MuV2lkdGggPSB3aWR0aDsgICAgICAvLyBDb21wcmVz
c2VkIHRleHR1cmUgc2l6ZSBjb25zdHJhaW50cz8KKyAgICAgICAgZGVzYy5IZWlnaHQgPSBoZWln
aHQ7CisgICAgICAgIGRlc2MuTWlwTGV2ZWxzID0gKGxldmVscyA+IDApID8gbGV2ZWxzICsgbUxv
ZE9mZnNldCA6IDA7CisgICAgICAgIGRlc2MuQXJyYXlTaXplID0gMTsKKyAgICAgICAgZGVzYy5G
b3JtYXQgPSBtVGV4dHVyZUZvcm1hdDsKKyAgICAgICAgZGVzYy5TYW1wbGVEZXNjLkNvdW50ID0g
MTsKKyAgICAgICAgZGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOworICAgICAgICBkZXNjLlVz
YWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKKyAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSBnZXRC
aW5kRmxhZ3MoKTsKKyAgICAgICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7CisgICAgICAgIGRl
c2MuTWlzY0ZsYWdzID0gMDsKKworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3Jl
YXRlVGV4dHVyZTJEKCZkZXNjLCBOVUxMLCAmbVRleHR1cmUpOworCisgICAgICAgIC8vIHRoaXMg
Y2FuIGhhcHBlbiBmcm9tIHdpbmRvd3MgVERSCisgICAgICAgIGlmIChkM2QxMTo6aXNEZXZpY2VM
b3N0RXJyb3IocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgbVJlbmRlcmVyLT5ub3Rp
ZnlEZXZpY2VMb3N0KCk7CisgICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgICAg
ICBFUlIoIkNyZWF0aW5nIGltYWdlIGZhaWxlZC4iKTsKKyAgICAgICAgICAgIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1UZXh0dXJlLT5HZXREZXNjKCZkZXNjKTsKKyAgICAgICAgICAgIG1NaXBMZXZl
bHMgPSBkZXNjLk1pcExldmVsczsKKyAgICAgICAgICAgIG1UZXh0dXJlV2lkdGggPSBkZXNjLldp
ZHRoOworICAgICAgICAgICAgbVRleHR1cmVIZWlnaHQgPSBkZXNjLkhlaWdodDsKKyAgICAgICAg
fQorICAgIH0KK30KKworVGV4dHVyZVN0b3JhZ2UxMV8yRDo6flRleHR1cmVTdG9yYWdlMTFfMkQo
KQoreworICAgIGlmIChtVGV4dHVyZSkKKyAgICB7CisgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNl
KCk7CisgICAgICAgIG1UZXh0dXJlID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAobVNSVikKKyAg
ICB7CisgICAgICAgIG1TUlYtPlJlbGVhc2UoKTsKKyAgICAgICAgbVNSViA9IE5VTEw7CisgICAg
fQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05f
TUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCisgICAgeworICAgICAgICBkZWxldGUgbVJlbmRlclRh
cmdldFtpXTsKKyAgICAgICAgbVJlbmRlclRhcmdldFtpXSA9IE5VTEw7CisgICAgfQorfQorCitU
ZXh0dXJlU3RvcmFnZTExXzJEICpUZXh0dXJlU3RvcmFnZTExXzJEOjptYWtlVGV4dHVyZVN0b3Jh
Z2UxMV8yRChUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSkKK3sKKyAgICBBU1NFUlQoSEFTX0RZTkFN
SUNfVFlQRShUZXh0dXJlU3RvcmFnZTExXzJEKiwgc3RvcmFnZSkpOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxUZXh0dXJlU3RvcmFnZTExXzJEKj4oc3RvcmFnZSk7Cit9CisKK1JlbmRlclRhcmdl
dCAqVGV4dHVyZVN0b3JhZ2UxMV8yRDo6Z2V0UmVuZGVyVGFyZ2V0KGludCBsZXZlbCkKK3sKKyAg
ICBpZiAobGV2ZWwgPj0gMCAmJiBsZXZlbCA8IHN0YXRpY19jYXN0PGludD4obU1pcExldmVscykp
CisgICAgeworICAgICAgICBpZiAoIW1SZW5kZXJUYXJnZXRbbGV2ZWxdKQorICAgICAgICB7Cisg
ICAgICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7
CisgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdDsKKworICAgICAgICAgICAgRDNEMTFfU0hBREVS
X1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOworICAgICAgICAgICAgc3J2RGVzYy5Gb3JtYXQg
PSBtU2hhZGVyUmVzb3VyY2VGb3JtYXQ7CisgICAgICAgICAgICBzcnZEZXNjLlZpZXdEaW1lbnNp
b24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyRDsKKyAgICAgICAgICAgIHNydkRlc2Mu
VGV4dHVyZTJELk1vc3REZXRhaWxlZE1pcCA9IGxldmVsOworICAgICAgICAgICAgc3J2RGVzYy5U
ZXh0dXJlMkQuTWlwTGV2ZWxzID0gMTsKKworICAgICAgICAgICAgSUQzRDExU2hhZGVyUmVzb3Vy
Y2VWaWV3ICpzcnY7CisgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJl
c291cmNlVmlldyhtVGV4dHVyZSwgJnNydkRlc2MsICZzcnYpOworCisgICAgICAgICAgICBpZiAo
cmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5kZXJUYXJn
ZXQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOworCisgICAgICAgICAgICBpZiAobVJlbmRlclRhcmdldEZvcm1hdCAhPSBEWEdJ
X0ZPUk1BVF9VTktOT1dOKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEQzRDExX1JF
TkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5G
b3JtYXQgPSBtUmVuZGVyVGFyZ2V0Rm9ybWF0OworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVmll
d0RpbWVuc2lvbiA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJEOworICAgICAgICAgICAg
ICAgIHJ0dkRlc2MuVGV4dHVyZTJELk1pcFNsaWNlID0gbGV2ZWw7CisKKyAgICAgICAgICAgICAg
ICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpydHY7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0g
ZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1UZXh0dXJlLCAmcnR2RGVzYywgJnJ0dik7
CisKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzcnYtPlJlbGVhc2UoKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2Fz
dDxSZW5kZXJUYXJnZXQqPihOVUxMKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgICAgICAgICAvLyBSZW5k
ZXJUYXJnZXQxMSBleHBlY3RzIHRvIGJlIHRoZSBvd25lciBvZiB0aGUgcmVzb3VyY2VzIGl0IGlz
IGdpdmVuIGJ1dCBUZXh0dXJlU3RvcmFnZTExCisgICAgICAgICAgICAgICAgLy8gYWxzbyBuZWVk
cyB0byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0dXJlLgorICAgICAgICAgICAgICAgIG1U
ZXh0dXJlLT5BZGRSZWYoKTsKKworICAgICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbbGV2ZWxd
ID0gbmV3IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwgcnR2LCBtVGV4dHVyZSwgc3J2LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ZDo6bWF4KG1UZXh0dXJlV2lkdGggPj4gbGV2ZWwsIDFVKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVyZUhl
aWdodCA+PiBsZXZlbCwgMVUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYg
KG1EZXB0aFN0ZW5jaWxGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBEM0QxMV9ERVBUSF9TVEVOQ0lMX1ZJRVdfREVTQyBkc3ZEZXNj
OworICAgICAgICAgICAgICAgIGRzdkRlc2MuRm9ybWF0ID0gbURlcHRoU3RlbmNpbEZvcm1hdDsK
KyAgICAgICAgICAgICAgICBkc3ZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9EU1ZfRElNRU5T
SU9OX1RFWFRVUkUyRDsKKyAgICAgICAgICAgICAgICBkc3ZEZXNjLlRleHR1cmUyRC5NaXBTbGlj
ZSA9IGxldmVsOworICAgICAgICAgICAgICAgIGRzdkRlc2MuRmxhZ3MgPSAwOworCisgICAgICAg
ICAgICAgICAgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZHN2OworICAgICAgICAgICAgICAgIHJl
c3VsdCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsVmlldyhtVGV4dHVyZSwgJmRzdkRlc2Ms
ICZkc3YpOworCisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3J2LT5SZWxlYXNlKCk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3Rh
dGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAgICAgICAg
Ly8gUmVuZGVyVGFyZ2V0MTEgZXhwZWN0cyB0byBiZSB0aGUgb3duZXIgb2YgdGhlIHJlc291cmNl
cyBpdCBpcyBnaXZlbiBidXQgVGV4dHVyZVN0b3JhZ2UxMQorICAgICAgICAgICAgICAgIC8vIGFs
c28gbmVlZHMgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgdGV4dHVyZS4KKyAgICAgICAgICAg
ICAgICBtVGV4dHVyZS0+QWRkUmVmKCk7CisKKyAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0
W2xldmVsXSA9IG5ldyBSZW5kZXJUYXJnZXQxMShtUmVuZGVyZXIsIGRzdiwgbVRleHR1cmUsIHNy
diwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGQ6Om1heChtVGV4dHVyZVdpZHRoID4+IGxldmVsLCAxVSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobVRl
eHR1cmVIZWlnaHQgPj4gbGV2ZWwsIDFVKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0W2xldmVs
XTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQor
fQorCitJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlRleHR1cmVTdG9yYWdlMTFfMkQ6OmdldFNS
VigpCit7CisgICAgaWYgKCFtU1JWKQorICAgIHsKKyAgICAgICAgSUQzRDExRGV2aWNlICpkZXZp
Y2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgIEQzRDExX1NIQURFUl9SRVNP
VVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKKyAgICAgICAgc3J2RGVzYy5Gb3JtYXQgPSBtU2hhZGVy
UmVzb3VyY2VGb3JtYXQ7CisgICAgICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NS
Vl9ESU1FTlNJT05fVEVYVFVSRTJEOworICAgICAgICBzcnZEZXNjLlRleHR1cmUyRC5NaXBMZXZl
bHMgPSAobU1pcExldmVscyA9PSAwID8gLTEgOiBtTWlwTGV2ZWxzKTsKKyAgICAgICAgc3J2RGVz
Yy5UZXh0dXJlMkQuTW9zdERldGFpbGVkTWlwID0gMDsKKworICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KG1UZXh0dXJlLCAmc3J2RGVzYywg
Jm1TUlYpOworCisgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNf
Y2FzdDxJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcqPihOVUxMKSk7CisgICAgICAgIH0KKyAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICB9CisKKyAgICByZXR1cm4gbVNSVjsK
K30KKwordm9pZCBUZXh0dXJlU3RvcmFnZTExXzJEOjpnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwp
Cit7CisgICAgUmVuZGVyVGFyZ2V0MTEgKnNvdXJjZSA9IFJlbmRlclRhcmdldDExOjptYWtlUmVu
ZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFyZ2V0KGxldmVsIC0gMSkpOworICAgIFJlbmRlclRhcmdl
dDExICpkZXN0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShnZXRSZW5kZXJU
YXJnZXQobGV2ZWwpKTsKKworICAgIGdlbmVyYXRlTWlwbWFwTGF5ZXIoc291cmNlLCBkZXN0KTsK
K30KKworVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpUZXh0dXJlU3RvcmFnZTExX0N1YmUoUmVuZGVy
ZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1
c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKQorICAgIDogVGV4dHVyZVN0b3Jh
Z2UxMShyZW5kZXJlciwgR2V0VGV4dHVyZUJpbmRGbGFncyhnbF9kM2QxMTo6Q29udmVydFRleHR1
cmVGb3JtYXQoaW50ZXJuYWxmb3JtYXQpLCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlKSkKK3sKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IDY7IGkrKykKKyAgICB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJF
X0xFVkVMUzsgaisrKQorICAgICAgICB7CisgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2ldW2pd
ID0gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKworICAgIERYR0lfRk9STUFUIGNvbnZlcnRlZEZv
cm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0VGV4dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Cisg
ICAgaWYgKGQzZDExOjpJc0RlcHRoU3RlbmNpbEZvcm1hdChjb252ZXJ0ZWRGb3JtYXQpKQorICAg
IHsKKyAgICAgICAgbVRleHR1cmVGb3JtYXQgPSBkM2QxMTo6R2V0RGVwdGhUZXh0dXJlRm9ybWF0
KGNvbnZlcnRlZEZvcm1hdCk7CisgICAgICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IGQzZDEx
OjpHZXREZXB0aFNoYWRlclJlc291cmNlRm9ybWF0KGNvbnZlcnRlZEZvcm1hdCk7CisgICAgICAg
IG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBjb252ZXJ0ZWRGb3JtYXQ7CisgICAgICAgIG1SZW5kZXJU
YXJnZXRGb3JtYXQgPSBEWEdJX0ZPUk1BVF9VTktOT1dOOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICBtVGV4dHVyZUZvcm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKKyAgICAgICAgbVNo
YWRlclJlc291cmNlRm9ybWF0ID0gY29udmVydGVkRm9ybWF0OworICAgICAgICBtRGVwdGhTdGVu
Y2lsRm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5LTk9XTjsKKyAgICAgICAgbVJlbmRlclRhcmdldEZv
cm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKKyAgICB9CisKKyAgICAvLyBpZiB0aGUgc2l6ZSBpcyBu
b3QgcG9zaXRpdmUgdGhpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBsZXRlIHRleHR1
cmUKKyAgICAvLyB3ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBkM2QgdGV4dHVy
ZSBjcmVhdGlvbgorICAgIGlmIChzaXplID4gMCkKKyAgICB7CisgICAgICAgIC8vIGFkanVzdCBz
aXplIGlmIG5lZWRlZCBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlcworICAgICAgICBpbnQgaGVpZ2h0
ID0gc2l6ZTsKKyAgICAgICAgZ2w6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIGdsOjpJc0NvbXByZXNz
ZWQoaW50ZXJuYWxmb3JtYXQpLCAmc2l6ZSwgJmhlaWdodCwgJm1Mb2RPZmZzZXQpOworCisgICAg
ICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAg
ICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXNjOworICAgICAgICBkZXNjLldpZHRoID0gc2l6
ZTsKKyAgICAgICAgZGVzYy5IZWlnaHQgPSBzaXplOworICAgICAgICBkZXNjLk1pcExldmVscyA9
IChsZXZlbHMgPiAwKSA/IGxldmVscyArIG1Mb2RPZmZzZXQgOiAwOworICAgICAgICBkZXNjLkFy
cmF5U2l6ZSA9IDY7CisgICAgICAgIGRlc2MuRm9ybWF0ID0gbVRleHR1cmVGb3JtYXQ7CisgICAg
ICAgIGRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5R
dWFsaXR5ID0gMDsKKyAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7Cisg
ICAgICAgIGRlc2MuQmluZEZsYWdzID0gZ2V0QmluZEZsYWdzKCk7CisgICAgICAgIGRlc2MuQ1BV
QWNjZXNzRmxhZ3MgPSAwOworICAgICAgICBkZXNjLk1pc2NGbGFncyA9IEQzRDExX1JFU09VUkNF
X01JU0NfVEVYVFVSRUNVQkU7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJm1UZXh0dXJlKTsKKworICAgICAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRV9P
VVRPRk1FTU9SWSk7CisgICAgICAgICAgICBFUlIoIkNyZWF0aW5nIGltYWdlIGZhaWxlZC4iKTsK
KyAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1UZXh0dXJlLT5HZXREZXNjKCZkZXNj
KTsKKyAgICAgICAgICAgIG1NaXBMZXZlbHMgPSBkZXNjLk1pcExldmVsczsKKyAgICAgICAgICAg
IG1UZXh0dXJlV2lkdGggPSBkZXNjLldpZHRoOworICAgICAgICAgICAgbVRleHR1cmVIZWlnaHQg
PSBkZXNjLkhlaWdodDsKKyAgICAgICAgfQorICAgIH0KK30KKworVGV4dHVyZVN0b3JhZ2UxMV9D
dWJlOjp+VGV4dHVyZVN0b3JhZ2UxMV9DdWJlKCkKK3sKKyAgICBpZiAobVRleHR1cmUpCisgICAg
eworICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOworICAgICAgICBtVGV4dHVyZSA9IE5VTEw7
CisgICAgfQorCisgICAgaWYgKG1TUlYpCisgICAgeworICAgICAgICBtU1JWLT5SZWxlYXNlKCk7
CisgICAgICAgIG1TUlYgPSBOVUxMOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgNjsgaSsrKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7
IGogPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBqKyspCisgICAgICAg
IHsKKyAgICAgICAgICAgIGRlbGV0ZSBtUmVuZGVyVGFyZ2V0W2ldW2pdOworICAgICAgICAgICAg
bVJlbmRlclRhcmdldFtpXVtqXSA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1RleHR1
cmVTdG9yYWdlMTFfQ3ViZSAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjptYWtlVGV4dHVyZVN0b3Jh
Z2UxMV9DdWJlKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKQoreworICAgIEFTU0VSVChIQVNfRFlO
QU1JQ19UWVBFKFRleHR1cmVTdG9yYWdlMTFfQ3ViZSosIHN0b3JhZ2UpKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8VGV4dHVyZVN0b3JhZ2UxMV9DdWJlKj4oc3RvcmFnZSk7Cit9CisKK1JlbmRl
clRhcmdldCAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZh
Y2VUYXJnZXQsIGludCBsZXZlbCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgZmFjZUlkeCA9IGdsOjpU
ZXh0dXJlQ3ViZU1hcDo6ZmFjZUluZGV4KGZhY2VUYXJnZXQpOworICAgIGlmIChsZXZlbCA+PSAw
ICYmIGxldmVsIDwgc3RhdGljX2Nhc3Q8aW50PihtTWlwTGV2ZWxzKSkKKyAgICB7CisgICAgICAg
IGlmICghbVJlbmRlclRhcmdldFtmYWNlSWR4XVtsZXZlbF0pCisgICAgICAgIHsKKyAgICAgICAg
ICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICAg
ICAgICAgIEhSRVNVTFQgcmVzdWx0OworCisgICAgICAgICAgICBEM0QxMV9TSEFERVJfUkVTT1VS
Q0VfVklFV19ERVNDIHNydkRlc2M7CisgICAgICAgICAgICBzcnZEZXNjLkZvcm1hdCA9IG1TaGFk
ZXJSZXNvdXJjZUZvcm1hdDsKKyAgICAgICAgICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQz
RDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTJEQVJSQVk7IC8vIFdpbGwgYmUgdXNlZCB3aXRoIFRl
eHR1cmUyRCBzYW1wbGVyLCBub3QgVGV4dHVyZUN1YmUKKyAgICAgICAgICAgIHNydkRlc2MuVGV4
dHVyZTJEQXJyYXkuTW9zdERldGFpbGVkTWlwID0gbGV2ZWw7CisgICAgICAgICAgICBzcnZEZXNj
LlRleHR1cmUyREFycmF5Lk1pcExldmVscyA9IDE7CisgICAgICAgICAgICBzcnZEZXNjLlRleHR1
cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9IGZhY2VJZHg7CisgICAgICAgICAgICBzcnZEZXNj
LlRleHR1cmUyREFycmF5LkFycmF5U2l6ZSA9IDE7CisKKyAgICAgICAgICAgIElEM0QxMVNoYWRl
clJlc291cmNlVmlldyAqc3J2OworICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVT
aGFkZXJSZXNvdXJjZVZpZXcobVRleHR1cmUsICZzcnZEZXNjLCAmc3J2KTsKKworICAgICAgICAg
ICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVu
ZGVyVGFyZ2V0Kj4oTlVMTCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKFNV
Q0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICAgICAgaWYgKG1SZW5kZXJUYXJnZXRGb3JtYXQg
IT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBE
M0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOworICAgICAgICAgICAgICAgIHJ0
dkRlc2MuRm9ybWF0ID0gbVJlbmRlclRhcmdldEZvcm1hdDsKKyAgICAgICAgICAgICAgICBydHZE
ZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyREFSUkFZOwor
ICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlwU2xpY2UgPSBsZXZlbDsK
KyAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9
IGZhY2VJZHg7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlMkRBcnJheS5BcnJheVNp
emUgPSAxOworCisgICAgICAgICAgICAgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqcnR2Owor
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0Vmlldyht
VGV4dHVyZSwgJnJ0dkRlc2MsICZydHYpOworCisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
c3J2LT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwor
CisgICAgICAgICAgICAgICAgLy8gUmVuZGVyVGFyZ2V0MTEgZXhwZWN0cyB0byBiZSB0aGUgb3du
ZXIgb2YgdGhlIHJlc291cmNlcyBpdCBpcyBnaXZlbiBidXQgVGV4dHVyZVN0b3JhZ2UxMQorICAg
ICAgICAgICAgICAgIC8vIGFsc28gbmVlZHMgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgdGV4
dHVyZS4KKyAgICAgICAgICAgICAgICBtVGV4dHVyZS0+QWRkUmVmKCk7CisKKyAgICAgICAgICAg
ICAgICBtUmVuZGVyVGFyZ2V0W2ZhY2VJZHhdW2xldmVsXSA9IG5ldyBSZW5kZXJUYXJnZXQxMSht
UmVuZGVyZXIsIHJ0diwgbVRleHR1cmUsIHNydiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVy
ZVdpZHRoID4+IGxldmVsLCAxVSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobVRleHR1cmVIZWlnaHQg
Pj4gbGV2ZWwsIDFVKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtRGVw
dGhTdGVuY2lsRm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgRDNEMTFfREVQVEhfU1RFTkNJTF9WSUVXX0RFU0MgZHN2RGVzYzsKKyAg
ICAgICAgICAgICAgICBkc3ZEZXNjLkZvcm1hdCA9IG1SZW5kZXJUYXJnZXRGb3JtYXQ7CisgICAg
ICAgICAgICAgICAgZHN2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfRFNWX0RJTUVOU0lPTl9U
RVhUVVJFMkRBUlJBWTsKKyAgICAgICAgICAgICAgICBkc3ZEZXNjLlRleHR1cmUyREFycmF5Lk1p
cFNsaWNlID0gbGV2ZWw7CisgICAgICAgICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkRBcnJheS5G
aXJzdEFycmF5U2xpY2UgPSBmYWNlSWR4OworICAgICAgICAgICAgICAgIGRzdkRlc2MuVGV4dHVy
ZTJEQXJyYXkuQXJyYXlTaXplID0gMTsKKworICAgICAgICAgICAgICAgIElEM0QxMURlcHRoU3Rl
bmNpbFZpZXcgKmRzdjsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURl
cHRoU3RlbmNpbFZpZXcobVRleHR1cmUsICZkc3ZEZXNjLCAmZHN2KTsKKworICAgICAgICAgICAg
ICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHNydi0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PFJlbmRlclRhcmdldCo+
KE5VTEwpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChyZXN1bHQpKTsKKworICAgICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdldDExIGV4cGVj
dHMgdG8gYmUgdGhlIG93bmVyIG9mIHRoZSByZXNvdXJjZXMgaXQgaXMgZ2l2ZW4gYnV0IFRleHR1
cmVTdG9yYWdlMTEKKyAgICAgICAgICAgICAgICAvLyBhbHNvIG5lZWRzIHRvIGtlZXAgYSByZWZl
cmVuY2UgdG8gdGhlIHRleHR1cmUuCisgICAgICAgICAgICAgICAgbVRleHR1cmUtPkFkZFJlZigp
OworCisgICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldFtmYWNlSWR4XVtsZXZlbF0gPSBuZXcg
UmVuZGVyVGFyZ2V0MTEobVJlbmRlcmVyLCBkc3YsIG1UZXh0dXJlLCBzcnYsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RkOjptYXgobVRleHR1cmVXaWR0aCA+PiBsZXZlbCwgMVUpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4
KG1UZXh0dXJlSGVpZ2h0ID4+IGxldmVsLCAxVSkpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbVJlbmRlclRhcmdldFtm
YWNlSWR4XVtsZXZlbF07CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBO
VUxMOworICAgIH0KK30KKworSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3RvcmFn
ZTExX0N1YmU6OmdldFNSVigpCit7CisgICAgaWYgKCFtU1JWKQorICAgIHsKKyAgICAgICAgSUQz
RDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgIEQz
RDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKKyAgICAgICAgc3J2RGVzYy5G
b3JtYXQgPSBtU2hhZGVyUmVzb3VyY2VGb3JtYXQ7CisgICAgICAgIHNydkRlc2MuVmlld0RpbWVu
c2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRUNVQkU7CisgICAgICAgIHNydkRlc2Mu
VGV4dHVyZUN1YmUuTWlwTGV2ZWxzID0gKG1NaXBMZXZlbHMgPT0gMCA/IC0xIDogbU1pcExldmVs
cyk7CisgICAgICAgIHNydkRlc2MuVGV4dHVyZUN1YmUuTW9zdERldGFpbGVkTWlwID0gMDsKKwor
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3
KG1UZXh0dXJlLCAmc3J2RGVzYywgJm1TUlYpOworCisgICAgICAgIGlmIChyZXN1bHQgPT0gRV9P
VVRPRk1FTU9SWSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcqPihOVUxM
KSk7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICB9
CisKKyAgICByZXR1cm4gbVNSVjsKK30KKwordm9pZCBUZXh0dXJlU3RvcmFnZTExX0N1YmU6Omdl
bmVyYXRlTWlwbWFwKGludCBmYWNlLCBpbnQgbGV2ZWwpCit7CisgICAgUmVuZGVyVGFyZ2V0MTEg
KnNvdXJjZSA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFy
Z2V0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsIC0gMSkpOwor
ICAgIFJlbmRlclRhcmdldDExICpkZXN0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJn
ZXQxMShnZXRSZW5kZXJUYXJnZXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFj
ZSwgbGV2ZWwpKTsKKworICAgIGdlbmVyYXRlTWlwbWFwTGF5ZXIoc291cmNlLCBkZXN0KTsKK30K
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9UZXh0dXJlU3RvcmFnZTExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1RleHR1cmVTdG9yYWdlMTEuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zYzVkZWQwNWI4ODk3Njk3ZDM5MzZkMDUwOTdkZjRkZTk4Yjc5YmNkCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9UZXh0dXJlU3RvcmFnZTExLmgKQEAgLTAsMCArMSwxMjAgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisvLyBUZXh0dXJlU3RvcmFnZTExLmg6IERlZmluZXMgdGhlIGFic3RyYWN0IHJ4OjpUZXh0dXJl
U3RvcmFnZTExIGNsYXNzIGFuZCBpdHMgY29uY3JldGUgZGVyaXZlZAorLy8gY2xhc3NlcyBUZXh0
dXJlU3RvcmFnZTExXzJEIGFuZCBUZXh0dXJlU3RvcmFnZTExX0N1YmUsIHdoaWNoIGFjdCBhcyB0
aGUgaW50ZXJmYWNlIHRvIHRoZSBEM0QxMSB0ZXh0dXJlLgorCisjaWZuZGVmIExJQkdMRVNWMl9S
RU5ERVJFUl9URVhUVVJFU1RPUkFHRTExX0hfCisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9U
RVhUVVJFU1RPUkFHRTExX0hfCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZS5oIgorCituYW1lc3BhY2Ug
cngKK3sKK2NsYXNzIFJlbmRlclRhcmdldDsKK2NsYXNzIFJlbmRlclRhcmdldDExOworY2xhc3Mg
UmVuZGVyZXI7CitjbGFzcyBSZW5kZXJlcjExOworY2xhc3MgU3dhcENoYWluMTE7CisKK2NsYXNz
IFRleHR1cmVTdG9yYWdlMTEgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UKK3sKKyAgcHVibGljOgor
ICAgIFRleHR1cmVTdG9yYWdlMTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBVSU5UIGJpbmRGbGFncyk7
CisgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2UxMSgpOworCisgICAgc3RhdGljIFRleHR1cmVT
dG9yYWdlMTEgKm1ha2VUZXh0dXJlU3RvcmFnZTExKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKTsK
KworICAgIHN0YXRpYyBEV09SRCBHZXRUZXh0dXJlQmluZEZsYWdzKERYR0lfRk9STUFUIGQzZGZt
dCwgR0xlbnVtIGdsdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlKTsKKyAgICBzdGF0aWMgYm9v
bCBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKERYR0lfRk9STUFUIGZvcm1hdCk7CisKKyAgICBV
SU5UIGdldEJpbmRGbGFncygpIGNvbnN0OworCisgICAgdmlydHVhbCBJRDNEMTFUZXh0dXJlMkQg
KmdldEJhc2VUZXh0dXJlKCkgY29uc3Q7CisgICAgdmlydHVhbCBJRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKmdldFNSVigpID0gMDsKKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVy
VGFyZ2V0KCkgeyByZXR1cm4gZ2V0UmVuZGVyVGFyZ2V0KDApOyB9CisgICAgdmlydHVhbCBSZW5k
ZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChpbnQgbGV2ZWwpIHsgcmV0dXJuIE5VTEw7IH0KKyAg
ICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0
KSB7IHJldHVybiBnZXRSZW5kZXJUYXJnZXQoZmFjZVRhcmdldCwgMCk7IH0KKyAgICB2aXJ0dWFs
IFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2
ZWwpIHsgcmV0dXJuIE5VTEw7IH0KKworICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChp
bnQgbGV2ZWwpIHt9OworICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgZmFjZSwg
aW50IGxldmVsKSB7fTsKKworICAgIHZpcnR1YWwgaW50IGdldExvZE9mZnNldCgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlclRhcmdldCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBpc01hbmFnZWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBsZXZlbENvdW50KCk7CisgICAg
VUlOVCBnZXRTdWJyZXNvdXJjZUluZGV4KGludCBsZXZlbCwgaW50IGZhY2VUYXJnZXQpOworCisg
ICAgYm9vbCB1cGRhdGVTdWJyZXNvdXJjZUxldmVsKElEM0QxMVRleHR1cmUyRCAqdGV4dHVyZSwg
dW5zaWduZWQgaW50IHNvdXJjZVN1YnJlc291cmNlLCBpbnQgbGV2ZWwsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBmYWNlVGFyZ2V0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisKKyAgcHJvdGVjdGVkOgor
ICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXBMYXllcihSZW5kZXJUYXJnZXQxMSAqc291cmNlLCBSZW5k
ZXJUYXJnZXQxMSAqZGVzdCk7CisKKyAgICBSZW5kZXJlcjExICptUmVuZGVyZXI7CisgICAgaW50
IG1Mb2RPZmZzZXQ7CisgICAgdW5zaWduZWQgaW50IG1NaXBMZXZlbHM7CisKKyAgICBJRDNEMTFU
ZXh0dXJlMkQgKm1UZXh0dXJlOworICAgIERYR0lfRk9STUFUIG1UZXh0dXJlRm9ybWF0OworICAg
IERYR0lfRk9STUFUIG1TaGFkZXJSZXNvdXJjZUZvcm1hdDsKKyAgICBEWEdJX0ZPUk1BVCBtUmVu
ZGVyVGFyZ2V0Rm9ybWF0OworICAgIERYR0lfRk9STUFUIG1EZXB0aFN0ZW5jaWxGb3JtYXQ7Cisg
ICAgdW5zaWduZWQgaW50IG1UZXh0dXJlV2lkdGg7CisgICAgdW5zaWduZWQgaW50IG1UZXh0dXJl
SGVpZ2h0OworCisgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICptU1JWOworCisgIHByaXZh
dGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlMTEpOworCisg
ICAgY29uc3QgVUlOVCBtQmluZEZsYWdzOworfTsKKworY2xhc3MgVGV4dHVyZVN0b3JhZ2UxMV8y
RCA6IHB1YmxpYyBUZXh0dXJlU3RvcmFnZTExCit7CisgIHB1YmxpYzoKKyAgICBUZXh0dXJlU3Rv
cmFnZTExXzJEKFJlbmRlcmVyICpyZW5kZXJlciwgU3dhcENoYWluMTEgKnN3YXBjaGFpbik7Cisg
ICAgVGV4dHVyZVN0b3JhZ2UxMV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAgIHZpcnR1YWwgflRleHR1cmVTdG9y
YWdlMTFfMkQoKTsKKworICAgIHN0YXRpYyBUZXh0dXJlU3RvcmFnZTExXzJEICptYWtlVGV4dHVy
ZVN0b3JhZ2UxMV8yRChUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSk7CisKKyAgICB2aXJ0dWFsIElE
M0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0U1JWKCk7CisgICAgdmlydHVhbCBSZW5kZXJUYXJn
ZXQgKmdldFJlbmRlclRhcmdldChpbnQgbGV2ZWwpOworCisgICAgdmlydHVhbCB2b2lkIGdlbmVy
YXRlTWlwbWFwKGludCBsZXZlbCk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oVGV4dHVyZVN0b3JhZ2UxMV8yRCk7CisKKyAgICBSZW5kZXJUYXJnZXQxMSAqbVJl
bmRlclRhcmdldFtnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKK307CisK
K2NsYXNzIFRleHR1cmVTdG9yYWdlMTFfQ3ViZSA6IHB1YmxpYyBUZXh0dXJlU3RvcmFnZTExCit7
CisgIHB1YmxpYzoKKyAgICBUZXh0dXJlU3RvcmFnZTExX0N1YmUoUmVuZGVyZXIgKnJlbmRlcmVy
LCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBm
b3JjZVJlbmRlcmFibGUsIGludCBzaXplKTsKKyAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTEx
X0N1YmUoKTsKKworICAgIHN0YXRpYyBUZXh0dXJlU3RvcmFnZTExX0N1YmUgKm1ha2VUZXh0dXJl
U3RvcmFnZTExX0N1YmUoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpOworCisgICAgdmlydHVhbCBJ
RDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmdldFNSVigpOworICAgIHZpcnR1YWwgUmVuZGVyVGFy
Z2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCk7CisKKyAg
cHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2UxMV9D
dWJlKTsKKworICAgIFJlbmRlclRhcmdldDExICptUmVuZGVyVGFyZ2V0WzZdW2dsOjpJTVBMRU1F
TlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOworfTsKKworfQorCisjZW5kaWYgLy8gTElCR0xF
U1YyX1JFTkRFUkVSX1RFWFRVUkVTVE9SQUdFMTFfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVydGV4QnVmZmVyMTEu
Y3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9WZXJ0ZXhCdWZmZXIxMS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmY5YjQxODFmMTJhY2M3YzhlODU4YjYw
NGQ4MzMyZjE1Y2E0NjYyMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVydGV4QnVmZmVyMTEuY3BwCkBAIC0w
LDAgKzEsNDQwIEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisv
LyBWZXJ0ZXhCdWZmZXIxMS5jcHA6IERlZmluZXMgdGhlIEQzRDExIFZlcnRleEJ1ZmZlciBpbXBs
ZW1lbnRhdGlvbi4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9WZXJ0ZXhC
dWZmZXIxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdlLmgi
CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5o
IgorCituYW1lc3BhY2UgcngKK3sKKworVmVydGV4QnVmZmVyMTE6OlZlcnRleEJ1ZmZlcjExKHJ4
OjpSZW5kZXJlcjExICpjb25zdCByZW5kZXJlcikgOiBtUmVuZGVyZXIocmVuZGVyZXIpCit7Cisg
ICAgbUJ1ZmZlciA9IE5VTEw7CisgICAgbUJ1ZmZlclNpemUgPSAwOworICAgIG1EeW5hbWljVXNh
Z2UgPSBmYWxzZTsKK30KKworVmVydGV4QnVmZmVyMTE6On5WZXJ0ZXhCdWZmZXIxMSgpCit7Cisg
ICAgaWYgKG1CdWZmZXIpCisgICAgeworICAgICAgICBtQnVmZmVyLT5SZWxlYXNlKCk7CisgICAg
ICAgIG1CdWZmZXIgPSBOVUxMOworICAgIH0KK30KKworYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6aW5p
dGlhbGl6ZSh1bnNpZ25lZCBpbnQgc2l6ZSwgYm9vbCBkeW5hbWljVXNhZ2UpCit7CisgICAgaWYg
KG1CdWZmZXIpCisgICAgeworICAgICAgICBtQnVmZmVyLT5SZWxlYXNlKCk7CisgICAgICAgIG1C
dWZmZXIgPSBOVUxMOworICAgIH0KKworICAgIHVwZGF0ZVNlcmlhbCgpOworCisgICAgaWYgKHNp
emUgPiAwKQorICAgIHsKKyAgICAgICAgSUQzRDExRGV2aWNlKiBkeERldmljZSA9IG1SZW5kZXJl
ci0+Z2V0RGV2aWNlKCk7CisKKyAgICAgICAgRDNEMTFfQlVGRkVSX0RFU0MgYnVmZmVyRGVzYzsK
KyAgICAgICAgYnVmZmVyRGVzYy5CeXRlV2lkdGggPSBzaXplOworICAgICAgICBidWZmZXJEZXNj
LlVzYWdlID0gRDNEMTFfVVNBR0VfRFlOQU1JQzsKKyAgICAgICAgYnVmZmVyRGVzYy5CaW5kRmxh
Z3MgPSBEM0QxMV9CSU5EX1ZFUlRFWF9CVUZGRVI7CisgICAgICAgIGJ1ZmZlckRlc2MuQ1BVQWNj
ZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOworICAgICAgICBidWZmZXJEZXNjLk1p
c2NGbGFncyA9IDA7CisgICAgICAgIGJ1ZmZlckRlc2MuU3RydWN0dXJlQnl0ZVN0cmlkZSA9IDA7
CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkeERldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZm
ZXJEZXNjLCBOVUxMLCAmbUJ1ZmZlcik7CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisg
ICAgbUJ1ZmZlclNpemUgPSBzaXplOworICAgIG1EeW5hbWljVXNhZ2UgPSBkeW5hbWljVXNhZ2U7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1ZlcnRleEJ1ZmZlcjExICpWZXJ0ZXhCdWZmZXIxMTo6
bWFrZVZlcnRleEJ1ZmZlcjExKFZlcnRleEJ1ZmZlciAqdmV0ZXhCdWZmZXIpCit7CisgICAgQVNT
RVJUKEhBU19EWU5BTUlDX1RZUEUoVmVydGV4QnVmZmVyMTEqLCB2ZXRleEJ1ZmZlcikpOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxWZXJ0ZXhCdWZmZXIxMSo+KHZldGV4QnVmZmVyKTsKK30KKwor
Ym9vbCBWZXJ0ZXhCdWZmZXIxMTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0
ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBpbnN0YW5jZXMsIHVu
c2lnbmVkIGludCBvZmZzZXQpCit7CisgICAgaWYgKG1CdWZmZXIpCisgICAgeworICAgICAgICBn
bDo6QnVmZmVyICpidWZmZXIgPSBhdHRyaWIubUJvdW5kQnVmZmVyLmdldCgpOworCisgICAgICAg
IGludCBpbnB1dFN0cmlkZSA9IGF0dHJpYi5zdHJpZGUoKTsKKyAgICAgICAgY29uc3QgVmVydGV4
Q29udmVydGVyICZjb252ZXJ0ZXIgPSBnZXRWZXJ0ZXhDb252ZXJzaW9uKGF0dHJpYik7CisKKyAg
ICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqZHhDb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZp
Y2VDb250ZXh0KCk7CisKKyAgICAgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJl
c291cmNlOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGR4Q29udGV4dC0+TWFwKG1CdWZmZXIs
IDAsIEQzRDExX01BUF9XUklURV9OT19PVkVSV1JJVEUsIDAsICZtYXBwZWRSZXNvdXJjZSk7Cisg
ICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJW
ZXJ0ZXggYnVmZmVyIG1hcCBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgiLCByZXN1bHQpOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgY2hhciogb3V0cHV0
ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obWFwcGVkUmVzb3VyY2UucERhdGEpICsgb2Zmc2V0
OworCisgICAgICAgIGNvbnN0IGNoYXIgKmlucHV0ID0gTlVMTDsKKyAgICAgICAgaWYgKGJ1ZmZl
cikKKyAgICAgICAgeworICAgICAgICAgICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGJ1ZmZl
ci0+Z2V0U3RvcmFnZSgpOworICAgICAgICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBj
aGFyKj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSArIHN0YXRpY19jYXN0PGludD4oYXR0cmliLm1PZmZz
ZXQpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaW5w
dXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYXR0cmliLm1Qb2ludGVyKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBhdHRyaWIubURpdmlzb3IgPT0gMCkK
KyAgICAgICAgeworICAgICAgICAgICAgaW5wdXQgKz0gaW5wdXRTdHJpZGUgKiBzdGFydDsKKyAg
ICAgICAgfQorCisgICAgICAgIGNvbnZlcnRlci5jb252ZXJzaW9uRnVuYyhpbnB1dCwgaW5wdXRT
dHJpZGUsIGNvdW50LCBvdXRwdXQpOworCisgICAgICAgIGR4Q29udGV4dC0+VW5tYXAobUJ1ZmZl
ciwgMCk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIEVSUigiVmVydGV4IGJ1ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgVmVydGV4QnVmZmVyMTE6OnN0b3JlUmF3RGF0
YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNl
dCkKK3sKKyAgICBpZiAobUJ1ZmZlcikKKyAgICB7CisgICAgICAgIElEM0QxMURldmljZUNvbnRl
eHQgKmR4Q29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworCisgICAgICAg
IEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJjZTsKKyAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBkeENvbnRleHQtPk1hcChtQnVmZmVyLCAwLCBEM0QxMV9NQVBfV1JJVEVfTk9f
T1ZFUldSSVRFLCAwLCAmbWFwcGVkUmVzb3VyY2UpOworICAgICAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiVmVydGV4IGJ1ZmZlciBtYXAgZmFpbGVk
IHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorCisgICAgICAgIGNoYXIqIGJ1ZmZlckRhdGEgPSBzdGF0aWNfY2FzdDxjaGFy
Kj4obWFwcGVkUmVzb3VyY2UucERhdGEpOworICAgICAgICBtZW1jcHkoYnVmZmVyRGF0YSArIG9m
ZnNldCwgZGF0YSwgc2l6ZSk7CisKKyAgICAgICAgZHhDb250ZXh0LT5Vbm1hcChtQnVmZmVyLCAw
KTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgRVJSKCJWZXJ0ZXggYnVmZmVyIG5vdCBpbml0aWFsaXplZC4iKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKworYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6Z2V0U3BhY2VSZXF1aXJl
ZChjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdMc2l6ZWkgY291bnQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNp
Z25lZCBpbnQgKm91dFNwYWNlUmVxdWlyZWQpIGNvbnN0Cit7CisgICAgdW5zaWduZWQgaW50IGVs
ZW1lbnRTaXplID0gZ2V0VmVydGV4Q29udmVyc2lvbihhdHRyaWIpLm91dHB1dEVsZW1lbnRTaXpl
OworCisgICAgdW5zaWduZWQgaW50IGVsZW1lbnRDb3VudCA9IDA7CisgICAgaWYgKGluc3RhbmNl
cyA9PSAwIHx8IGF0dHJpYi5tRGl2aXNvciA9PSAwKQorICAgIHsKKyAgICAgICAgZWxlbWVudENv
dW50ID0gY291bnQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBpbnQ+KGluc3RhbmNlcykgPCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkIGludD46Om1heCgpIC0gKGF0dHJpYi5tRGl2aXNvciAtIDEpKQorICAgICAgICB7CisgICAg
ICAgICAgICAvLyBSb3VuZCB1cAorICAgICAgICAgICAgZWxlbWVudENvdW50ID0gKHN0YXRpY19j
YXN0PHVuc2lnbmVkIGludD4oaW5zdGFuY2VzKSArIChhdHRyaWIubURpdmlzb3IgLSAxKSkgLyBh
dHRyaWIubURpdmlzb3I7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgICBlbGVtZW50Q291bnQgPSBpbnN0YW5jZXMgLyBhdHRyaWIubURpdmlzb3I7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoZWxlbWVudFNpemUgPD0gc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZCBpbnQ+OjptYXgoKSAvIGVsZW1lbnRDb3VudCkKKyAgICB7CisgICAgICAgIGlm
IChvdXRTcGFjZVJlcXVpcmVkKQorICAgICAgICB7CisgICAgICAgICAgICAqb3V0U3BhY2VSZXF1
aXJlZCA9IGVsZW1lbnRTaXplICogZWxlbWVudENvdW50OworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorfQorCitib29sIFZlcnRleEJ1ZmZlcjExOjpyZXF1aXJlc0NvbnZlcnNpb24oY29u
c3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdAoreworICAgIHJldHVybiAhZ2V0
VmVydGV4Q29udmVyc2lvbihhdHRyaWIpLmlkZW50aXR5OworfQorCit1bnNpZ25lZCBpbnQgVmVy
dGV4QnVmZmVyMTE6OmdldEJ1ZmZlclNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtQnVmZmVy
U2l6ZTsKK30KKworYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6c2V0QnVmZmVyU2l6ZSh1bnNpZ25lZCBp
bnQgc2l6ZSkKK3sKKyAgICBpZiAoc2l6ZSA+IG1CdWZmZXJTaXplKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGluaXRpYWxpemUoc2l6ZSwgbUR5bmFtaWNVc2FnZSk7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKworYm9vbCBWZXJ0ZXhCdWZm
ZXIxMTo6ZGlzY2FyZCgpCit7CisgICAgaWYgKG1CdWZmZXIpCisgICAgeworICAgICAgICBJRDNE
MTFEZXZpY2VDb250ZXh0ICpkeENvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQo
KTsKKworICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7Cisg
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZHhDb250ZXh0LT5NYXAobUJ1ZmZlciwgMCwgRDNEMTFf
TUFQX1dSSVRFX0RJU0NBUkQsIDAsICZtYXBwZWRSZXNvdXJjZSk7CisgICAgICAgIGlmIChGQUlM
RUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJWZXJ0ZXggYnVmZmVyIG1h
cCBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgiLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgZHhDb250ZXh0LT5Vbm1hcChtQnVmZmVyLCAw
KTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgRVJSKCJWZXJ0ZXggYnVmZmVyIG5vdCBpbml0aWFsaXplZC4iKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKwordW5zaWduZWQgaW50IFZlcnRleEJ1ZmZlcjExOjpnZXRWZXJ0
ZXhTaXplKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QKK3sKKyAgICBy
ZXR1cm4gZ2V0VmVydGV4Q29udmVyc2lvbihhdHRyaWIpLm91dHB1dEVsZW1lbnRTaXplOworfQor
CitEWEdJX0ZPUk1BVCBWZXJ0ZXhCdWZmZXIxMTo6Z2V0RFhHSUZvcm1hdChjb25zdCBnbDo6VmVy
dGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdldFZlcnRleENvbnZl
cnNpb24oYXR0cmliKS5keGdpRm9ybWF0OworfQorCitJRDNEMTFCdWZmZXIgKlZlcnRleEJ1ZmZl
cjExOjpnZXRCdWZmZXIoKSBjb25zdAoreworICAgIHJldHVybiBtQnVmZmVyOworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW50IGNvbXBvbmVudENvdW50LCBib29sIHdpZGVu
LCBib29sIG5vcm1hbGl6ZWQ+CitzdGF0aWMgdm9pZCBjb3B5VmVydGV4RGF0YShjb25zdCB2b2lk
ICppbnB1dCwgdW5zaWduZWQgaW50IHN0cmlkZSwgdW5zaWduZWQgaW50IGNvdW50LCB2b2lkICpv
dXRwdXQpCit7CisgICAgdW5zaWduZWQgaW50IGF0dHJpYlNpemUgPSBzaXplb2YoVCkgKiBjb21w
b25lbnRDb3VudDsKKworICAgIGlmIChhdHRyaWJTaXplID09IHN0cmlkZSAmJiAhd2lkZW4pCisg
ICAgeworICAgICAgICBtZW1jcHkob3V0cHV0LCBpbnB1dCwgY291bnQgKiBhdHRyaWJTaXplKTsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IG91dHB1dFN0cmlk
ZSA9IHdpZGVuID8gNCA6IGNvbXBvbmVudENvdW50OworICAgICAgICBUIGRlZmF1bHRWYWwgPSBu
b3JtYWxpemVkID8gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCkgOiBUKDEpOworCisgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgewor
ICAgICAgICAgICAgY29uc3QgVCAqb2Zmc2V0SW5wdXQgPSByZWludGVycHJldF9jYXN0PGNvbnN0
IFQqPihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihpbnB1dCkgKyBpICogc3RyaWRlKTsK
KyAgICAgICAgICAgIFQgKm9mZnNldE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KG91dHB1
dCkgKyBpICogb3V0cHV0U3RyaWRlOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBq
ID0gMDsgaiA8IGNvbXBvbmVudENvdW50OyBqKyspCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgb2Zmc2V0T3V0cHV0W2pdID0gb2Zmc2V0SW5wdXRbal07CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICh3aWRlbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBv
ZmZzZXRPdXRwdXRbM10gPSBkZWZhdWx0VmFsOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorfQorCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IGNvbXBvbmVudENvdW50Pgorc3RhdGlj
IHZvaWQgY29weUZpeGVkVmVydGV4RGF0YShjb25zdCB2b2lkKiBpbnB1dCwgdW5zaWduZWQgaW50
IHN0cmlkZSwgdW5zaWduZWQgaW50IGNvdW50LCB2b2lkKiBvdXRwdXQpCit7CisgICAgc3RhdGlj
IGNvbnN0IGZsb2F0IGRpdmlzb3IgPSAxLjBmIC8gKDEgPDwgMTYpOworCisgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3QgR0xm
aXhlZCogb2Zmc2V0SW5wdXQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEdMZml4ZWQqPihyZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihpbnB1dCkgKyBzdHJpZGUgKiBpKTsKKyAgICAgICAg
ZmxvYXQqIG9mZnNldE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihvdXRwdXQpICsg
aSAqIGNvbXBvbmVudENvdW50OworCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBq
IDwgY29tcG9uZW50Q291bnQ7IGorKykKKyAgICAgICAgeworICAgICAgICAgICAgb2Zmc2V0T3V0
cHV0W2pdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG9mZnNldElucHV0W2pdKSAqIGRpdmlzb3I7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbnQg
Y29tcG9uZW50Q291bnQsIGJvb2wgbm9ybWFsaXplZD4KK3N0YXRpYyB2b2lkIGNvcHlUb0Zsb2F0
VmVydGV4RGF0YShjb25zdCB2b2lkKiBpbnB1dCwgdW5zaWduZWQgaW50IHN0cmlkZSwgdW5zaWdu
ZWQgaW50IGNvdW50LCB2b2lkKiBvdXRwdXQpCit7CisgICAgdHlwZWRlZiBzdGQ6Om51bWVyaWNf
bGltaXRzPFQ+IE5MOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKQorICAgIHsKKyAgICAgICAgY29uc3QgVCAqb2Zmc2V0SW5wdXQgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IFQqPihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihpbnB1dCkgKyBzdHJp
ZGUgKiBpKTsKKyAgICAgICAgZmxvYXQgKm9mZnNldE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
ZmxvYXQqPihvdXRwdXQpICsgaSAqIGNvbXBvbmVudENvdW50OworCisgICAgICAgIGZvciAodW5z
aWduZWQgaW50IGogPSAwOyBqIDwgY29tcG9uZW50Q291bnQ7IGorKykKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKG5vcm1hbGl6ZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aWYgKE5MOjppc19zaWduZWQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBjb25zdCBmbG9hdCBkaXZpc29yID0gMS4wZiAvICgyICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KE5M
OjptYXgoKSkgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0T3V0cHV0W2pdID0gKDIg
KiBzdGF0aWNfY2FzdDxmbG9hdD4ob2Zmc2V0SW5wdXRbal0pICsgMSkgKiBkaXZpc29yOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSAgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG9mZnNldElucHV0W2pdKSAvIE5MOjptYXgoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
b2Zmc2V0T3V0cHV0W2pdID0gIHN0YXRpY19jYXN0PGZsb2F0PihvZmZzZXRJbnB1dFtqXSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK2NvbnN0IFZlcnRleEJ1ZmZlcjEx
OjpWZXJ0ZXhDb252ZXJ0ZXIgVmVydGV4QnVmZmVyMTE6Om1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tO
VU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFU11bMl1bNF0gPQoreworICAgIHsgLy8gR0xfQllURQor
ICAgICAgICB7IC8vIHVubm9ybWFsaXplZAorICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0
ZXhEYXRhPEdMYnl0ZSwgMSwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyX0ZMT0FULCA0
IH0sCisgICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xieXRlLCAyLCBmYWxz
ZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKKyAgICAgICAgICAgIHsg
JmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTGJ5dGUsIDMsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9S
TUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKKyAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVy
dGV4RGF0YTxHTGJ5dGUsIDQsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMkEz
Ml9GTE9BVCwgMTYgfSwKKyAgICAgICAgfSwKKyAgICAgICAgeyAvLyBub3JtYWxpemVkCisgICAg
ICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGJ5dGUsIDEsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwg
RFhHSV9GT1JNQVRfUjhfU05PUk0sIDEgfSwKKyAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRh
PEdMYnl0ZSwgMiwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SOEc4X1NOT1JNLCAy
IH0sCisgICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGJ5dGUsIDMsIHRydWUsIHRydWU+
LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjhHOEI4QThfU05PUk0sIDQgfSwKKyAgICAgICAgICAgIHsg
JmNvcHlWZXJ0ZXhEYXRhPEdMYnl0ZSwgNCwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1B
VF9SOEc4QjhBOF9TTk9STSwgNCB9LAorICAgICAgICB9LAorICAgIH0sCisgICAgeyAvLyBHTF9V
TlNJR05FRF9CWVRFCisgICAgICAgIHsgLy8gdW5ub3JtYWxpemVkCisgICAgICAgICAgICB7ICZj
b3B5VG9GbG9hdFZlcnRleERhdGE8R0x1Ynl0ZSwgMSwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JN
QVRfUjMyX0ZMT0FULCA0IH0sCisgICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8
R0x1Ynl0ZSwgMiwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCA4IH0s
CisgICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0x1Ynl0ZSwgMywgZmFsc2U+
LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAxMiB9LAorICAgICAgICAgICAg
eyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDQsIGZhbHNlPiwgZmFsc2UsIERYR0lf
Rk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCwgMTYgfSwKKyAgICAgICAgfSwKKyAgICAgICAgeyAv
LyBub3JtYWxpemVkCisgICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHVieXRlLCAxLCBm
YWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1I4X1VOT1JNLCAxIH0sCisgICAgICAgICAg
ICB7ICZjb3B5VmVydGV4RGF0YTxHTHVieXRlLCAyLCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lf
Rk9STUFUX1I4RzhfVU5PUk0sIDIgfSwKKyAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdM
dWJ5dGUsIDMsIHRydWUsIHRydWU+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk0s
IDQgfSwKKyAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDQsIGZhbHNlLCB0
cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk0sIDQgfSwKKyAgICAgICAgfSwK
KyAgICB9LAorICAgIHsgLy8gR0xfU0hPUlQKKyAgICAgICAgeyAvLyB1bm5vcm1hbGl6ZWQKKyAg
ICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHNob3J0LCAxLCBmYWxzZT4sIGZh
bHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKKyAgICAgICAgICAgIHsgJmNvcHlUb0Zs
b2F0VmVydGV4RGF0YTxHTHNob3J0LCAyLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJH
MzJfRkxPQVQsIDggfSwKKyAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHNo
b3J0LCAzLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0s
CisgICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xzaG9ydCwgNCwgZmFsc2U+
LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAorICAgICAgICB9
LAorICAgICAgICB7IC8vIG5vcm1hbGl6ZWQKKyAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRh
PEdMc2hvcnQsIDEsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjE2X1NOT1JNLCAy
IH0sCisgICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHNob3J0LCAyLCBmYWxzZSwgdHJ1
ZT4sIHRydWUsIERYR0lfRk9STUFUX1IxNkcxNl9TTk9STSwgNCB9LAorICAgICAgICAgICAgeyAm
Y29weVZlcnRleERhdGE8R0xzaG9ydCwgMywgdHJ1ZSwgdHJ1ZT4sIGZhbHNlLCBEWEdJX0ZPUk1B
VF9SMTZHMTZCMTZBMTZfU05PUk0sIDggfSwKKyAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRh
PEdMc2hvcnQsIDQsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2
X1NOT1JNLCA4IH0sCisgICAgICAgIH0sCisgICAgfSwKKyAgICB7IC8vIEdMX1VOU0lHTkVEX1NI
T1JUCisgICAgICAgIHsgLy8gdW5ub3JtYWxpemVkCisgICAgICAgICAgICB7ICZjb3B5VG9GbG9h
dFZlcnRleERhdGE8R0x1c2hvcnQsIDEsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMl9G
TE9BVCwgNCB9LAorICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMdXNob3J0
LCAyLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKKyAgICAg
ICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVzaG9ydCwgMywgZmFsc2U+LCBmYWxz
ZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAxMiB9LAorICAgICAgICAgICAgeyAmY29w
eVRvRmxvYXRWZXJ0ZXhEYXRhPEdMdXNob3J0LCA0LCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1B
VF9SMzJHMzJCMzJBMzJfRkxPQVQsIDE2IH0sCisgICAgICAgIH0sCisgICAgICAgIHsgLy8gbm9y
bWFsaXplZAorICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1c2hvcnQsIDEsIGZhbHNl
LCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjE2X1VOT1JNLCAyIH0sCisgICAgICAgICAgICB7
ICZjb3B5VmVydGV4RGF0YTxHTHVzaG9ydCwgMiwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZP
Uk1BVF9SMTZHMTZfVU5PUk0sIDQgfSwKKyAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdM
dXNob3J0LCAzLCB0cnVlLCB0cnVlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9V
Tk9STSwgOCB9LAorICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1c2hvcnQsIDQsIGZh
bHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1VOT1JNLCA4IH0sCisg
ICAgICAgIH0sCisgICAgfSwKKyAgICB7IC8vIEdMX0ZJWEVECisgICAgICAgIHsgLy8gdW5ub3Jt
YWxpemVkCisgICAgICAgICAgICB7ICZjb3B5Rml4ZWRWZXJ0ZXhEYXRhPDE+LCBmYWxzZSwgRFhH
SV9GT1JNQVRfUjMyX0ZMT0FULCA0IH0sCisgICAgICAgICAgICB7ICZjb3B5Rml4ZWRWZXJ0ZXhE
YXRhPDI+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCA4IH0sCisgICAgICAgICAg
ICB7ICZjb3B5Rml4ZWRWZXJ0ZXhEYXRhPDM+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMy
X0ZMT0FULCAxMiB9LAorICAgICAgICAgICAgeyAmY29weUZpeGVkVmVydGV4RGF0YTw0PiwgZmFs
c2UsIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCwgMTYgfSwKKyAgICAgICAgfSwKKyAg
ICAgICAgeyAvLyBub3JtYWxpemVkCisgICAgICAgICAgICB7ICZjb3B5Rml4ZWRWZXJ0ZXhEYXRh
PDE+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyX0ZMT0FULCA0IH0sCisgICAgICAgICAgICB7ICZj
b3B5Rml4ZWRWZXJ0ZXhEYXRhPDI+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCA4
IH0sCisgICAgICAgICAgICB7ICZjb3B5Rml4ZWRWZXJ0ZXhEYXRhPDM+LCBmYWxzZSwgRFhHSV9G
T1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAxMiB9LAorICAgICAgICAgICAgeyAmY29weUZpeGVkVmVy
dGV4RGF0YTw0PiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCwgMTYgfSwK
KyAgICAgICAgfSwKKyAgICB9LAorICAgIHsgLy8gR0xfRkxPQVQKKyAgICAgICAgeyAvLyB1bm5v
cm1hbGl6ZWQKKyAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDEsIGZhbHNl
LCBmYWxzZT4sIHRydWUsIERYR0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9LAorICAgICAgICAgICAg
eyAmY29weVZlcnRleERhdGE8R0xmbG9hdCwgMiwgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9G
T1JNQVRfUjMyRzMyX0ZMT0FULCA4IH0sCisgICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxH
TGZsb2F0LCAzLCBmYWxzZSwgZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxP
QVQsIDEyIH0sCisgICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCA0LCBmYWxz
ZSwgZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsIDE2IH0sCisg
ICAgICAgIH0sCisgICAgICAgIHsgLy8gbm9ybWFsaXplZAorICAgICAgICAgICAgeyAmY29weVZl
cnRleERhdGE8R0xmbG9hdCwgMSwgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMy
X0ZMT0FULCA0IH0sCisgICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCAyLCBm
YWxzZSwgZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKKyAgICAg
ICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDMsIGZhbHNlLCBmYWxzZT4sIHRydWUs
IERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKKyAgICAgICAgICAgIHsgJmNvcHlW
ZXJ0ZXhEYXRhPEdMZmxvYXQsIDQsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lfRk9STUFUX1Iz
MkczMkIzMkEzMl9GTE9BVCwgMTYgfSwKKyAgICAgICAgfSwKKyAgICB9LAorfTsKKworY29uc3Qg
VmVydGV4QnVmZmVyMTE6OlZlcnRleENvbnZlcnRlciAmVmVydGV4QnVmZmVyMTE6OmdldFZlcnRl
eENvbnZlcnNpb24oY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlKQoreworICAg
IHVuc2lnbmVkIGludCB0eXBlSW5kZXggPSAwOworICAgIHN3aXRjaCAoYXR0cmlidXRlLm1UeXBl
KQorICAgIHsKKyAgICAgIGNhc2UgR0xfQllURTogICAgICAgICAgICAgdHlwZUluZGV4ID0gMDsg
YnJlYWs7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6ICAgIHR5cGVJbmRleCA9IDE7IGJy
ZWFrOworICAgICAgY2FzZSBHTF9TSE9SVDogICAgICAgICAgICB0eXBlSW5kZXggPSAyOyBicmVh
azsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6ICAgdHlwZUluZGV4ID0gMzsgYnJlYWs7
CisgICAgICBjYXNlIEdMX0ZJWEVEOiAgICAgICAgICAgIHR5cGVJbmRleCA9IDQ7IGJyZWFrOwor
ICAgICAgY2FzZSBHTF9GTE9BVDogICAgICAgICAgICB0eXBlSW5kZXggPSA1OyBicmVhazsKKyAg
ICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsgYnJlYWs7CisgICAg
fQorCisgICAgcmV0dXJuIG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1t0eXBlSW5kZXhdW2F0dHJpYnV0
ZS5tTm9ybWFsaXplZCA/IDEgOiAwXVthdHRyaWJ1dGUubVNpemUgLSAxXTsKK30KKworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9WZXJ0ZXhCdWZmZXIxMS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9WZXJ0ZXhCdWZmZXIxMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVjZWI0MjZl
ODJkNDJiNTU2NjZjNTc5YzNmZWUxZmUyYWI3YmE4MDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1ZlcnRleEJ1
ZmZlcjExLmgKQEAgLTAsMCArMSw3NCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFZlcnRleEJ1ZmZl
cjExLmg6IERlZmluZXMgdGhlIEQzRDExIFZlcnRleEJ1ZmZlciBpbXBsZW1lbnRhdGlvbi4KKwor
I2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfVkVSVEVYQlVGRkVSMTFfSF8KKyNkZWZpbmUgTElC
R0xFU1YyX1JFTkRFUkVSX1ZFUlRFWEJVRkZFUjExX0hfCisKKyNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvVmVydGV4QnVmZmVyLmgiCisKK25hbWVzcGFjZSByeAoreworY2xhc3MgUmVuZGVy
ZXIxMTsKKworY2xhc3MgVmVydGV4QnVmZmVyMTEgOiBwdWJsaWMgVmVydGV4QnVmZmVyCit7Cisg
IHB1YmxpYzoKKyAgICBleHBsaWNpdCBWZXJ0ZXhCdWZmZXIxMShyeDo6UmVuZGVyZXIxMSAqY29u
c3QgcmVuZGVyZXIpOworICAgIHZpcnR1YWwgflZlcnRleEJ1ZmZlcjExKCk7CisKKyAgICB2aXJ0
dWFsIGJvb2wgaW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgc2l6ZSwgYm9vbCBkeW5hbWljVXNhZ2Up
OworCisgICAgc3RhdGljIFZlcnRleEJ1ZmZlcjExICptYWtlVmVydGV4QnVmZmVyMTEoVmVydGV4
QnVmZmVyICp2ZXRleEJ1ZmZlcik7CisKKyAgICB2aXJ0dWFsIGJvb2wgc3RvcmVWZXJ0ZXhBdHRy
aWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdM
c2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldCk7CisgICAgdmlydHVhbCBib29sIHN0
b3JlUmF3RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQg
aW50IG9mZnNldCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0U3BhY2VSZXF1aXJlZChjb25zdCBn
bDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFu
Y2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqb3V0
U3BhY2VSZXF1aXJlZCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNDb252ZXJz
aW9uKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3Q7CisKKyAgICB2aXJ0
dWFsIHVuc2lnbmVkIGludCBnZXRCdWZmZXJTaXplKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29s
IHNldEJ1ZmZlclNpemUodW5zaWduZWQgaW50IHNpemUpOworICAgIHZpcnR1YWwgYm9vbCBkaXNj
YXJkKCk7CisKKyAgICB1bnNpZ25lZCBpbnQgZ2V0VmVydGV4U2l6ZShjb25zdCBnbDo6VmVydGV4
QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0OworICAgIERYR0lfRk9STUFUIGdldERYR0lGb3JtYXQo
Y29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdDsKKworICAgIElEM0QxMUJ1
ZmZlciAqZ2V0QnVmZmVyKCkgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oVmVydGV4QnVmZmVyMTEpOworCisgICAgcng6OlJlbmRlcmVyMTEgKmNvbnN0
IG1SZW5kZXJlcjsKKworICAgIElEM0QxMUJ1ZmZlciAqbUJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBp
bnQgbUJ1ZmZlclNpemU7CisgICAgYm9vbCBtRHluYW1pY1VzYWdlOworCisgICAgdHlwZWRlZiB2
b2lkICgqVmVydGV4Q29udmVyc2lvbkZ1bmN0aW9uKShjb25zdCB2b2lkICosIHVuc2lnbmVkIGlu
dCwgdW5zaWduZWQgaW50LCB2b2lkICopOworICAgIHN0cnVjdCBWZXJ0ZXhDb252ZXJ0ZXIKKyAg
ICB7CisgICAgICAgIFZlcnRleENvbnZlcnNpb25GdW5jdGlvbiBjb252ZXJzaW9uRnVuYzsKKyAg
ICAgICAgYm9vbCBpZGVudGl0eTsKKyAgICAgICAgRFhHSV9GT1JNQVQgZHhnaUZvcm1hdDsKKyAg
ICAgICAgdW5zaWduZWQgaW50IG91dHB1dEVsZW1lbnRTaXplOworICAgIH07CisKKyAgICBlbnVt
IHsgTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVMgPSA2IH07CisKKyAgICAvLyBUaGlzIHRhYmxl
IGlzIHVzZWQgdG8gZ2VuZXJhdGUgbUF0dHJpYnV0ZVR5cGVzLgorICAgIHN0YXRpYyBjb25zdCBW
ZXJ0ZXhDb252ZXJ0ZXIgbVBvc3NpYmxlVHJhbnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklC
X1RZUEVTXVsyXVs0XTsgLy8gW0dMIHR5cGVzIGFzIGVudW1lcmF0ZWQgYnkgdHlwZUluZGV4KCld
W25vcm1hbGl6ZWRdW3NpemUgLSAxXQorCisgICAgc3RhdGljIGNvbnN0IFZlcnRleENvbnZlcnRl
ciAmZ2V0VmVydGV4Q29udmVyc2lvbihjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJ1
dGUpOworfTsKKworfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1ZFUlRFWEJVRkZF
UjExX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi42ZjA2MDI0ZmI1YWExMTI4YWQ1ZDFmMGU5ZDIzNDFlNzhkYTBhYTk0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmNwcApAQCAtMCwwICsxLDY4OCBAQAorI2luY2x1
ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gcmVuZGVyZXIxMV91dGlscy5j
cHA6IENvbnZlcnNpb24gZnVuY3Rpb25zIGFuZCBvdGhlciB1dGlsaXR5IHJvdXRpbmVzCisvLyBz
cGVjaWZpYyB0byB0aGUgRDNEMTEgcmVuZGVyZXIuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oIgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVn
LmgiCisKK25hbWVzcGFjZSBnbF9kM2QxMQoreworCitEM0QxMV9CTEVORCBDb252ZXJ0QmxlbmRG
dW5jKEdMZW51bSBnbEJsZW5kLCBib29sIGlzQWxwaGEpCit7CisgICAgRDNEMTFfQkxFTkQgZDNk
QmxlbmQgPSBEM0QxMV9CTEVORF9aRVJPOworCisgICAgc3dpdGNoIChnbEJsZW5kKQorICAgIHsK
KyAgICAgIGNhc2UgR0xfWkVSTzogICAgICAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzRDEx
X0JMRU5EX1pFUk87ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9PTkU6ICAg
ICAgICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gRDNEMTFfQkxFTkRfT05FOyAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NSQ19DT0xPUjogICAgICAgICAgICAgICAgZDNk
QmxlbmQgPSAoaXNBbHBoYSA/IEQzRDExX0JMRU5EX1NSQ19BTFBIQSA6IEQzRDExX0JMRU5EX1NS
Q19DT0xPUik7ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19D
T0xPUjogICAgICBkM2RCbGVuZCA9IChpc0FscGhhID8gRDNEMTFfQkxFTkRfSU5WX1NSQ19BTFBI
QSA6IEQzRDExX0JMRU5EX0lOVl9TUkNfQ09MT1IpOyAgIGJyZWFrOworICAgICAgY2FzZSBHTF9E
U1RfQ09MT1I6ICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gKGlzQWxwaGEgPyBEM0QxMV9CTEVO
RF9ERVNUX0FMUEhBIDogRDNEMTFfQkxFTkRfREVTVF9DT0xPUik7ICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQ09MT1I6ICAgICAgZDNkQmxlbmQgPSAoaXNBbHBo
YSA/IEQzRDExX0JMRU5EX0lOVl9ERVNUX0FMUEhBIDogRDNEMTFfQkxFTkRfSU5WX0RFU1RfQ09M
T1IpOyBicmVhazsKKyAgICAgIGNhc2UgR0xfU1JDX0FMUEhBOiAgICAgICAgICAgICAgICBkM2RC
bGVuZCA9IEQzRDExX0JMRU5EX1NSQ19BTFBIQTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBOiAgICAgIGQzZEJsZW5kID0gRDNEMTFfQkxFTkRfSU5W
X1NSQ19BTFBIQTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0RTVF9BTFBIQTogICAgICAg
ICAgICAgICAgZDNkQmxlbmQgPSBEM0QxMV9CTEVORF9ERVNUX0FMUEhBOyAgICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9BTFBIQTogICAgICBkM2RCbGVuZCA9IEQz
RDExX0JMRU5EX0lOVl9ERVNUX0FMUEhBOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9DT05T
VEFOVF9DT0xPUjogICAgICAgICAgIGQzZEJsZW5kID0gRDNEMTFfQkxFTkRfQkxFTkRfRkFDVE9S
OyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUjog
ZDNkQmxlbmQgPSBEM0QxMV9CTEVORF9JTlZfQkxFTkRfRkFDVE9SOyAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfQ09OU1RBTlRfQUxQSEE6ICAgICAgICAgICBkM2RCbGVuZCA9IEQzRDExX0JMRU5E
X0JMRU5EX0ZBQ1RPUjsgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09O
U1RBTlRfQUxQSEE6IGQzZEJsZW5kID0gRDNEMTFfQkxFTkRfSU5WX0JMRU5EX0ZBQ1RPUjsgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX1NSQ19BTFBIQV9TQVRVUkFURTogICAgICAgZDNkQmxlbmQg
PSBEM0QxMV9CTEVORF9TUkNfQUxQSEFfU0FUOyAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIGQzZEJsZW5kOworfQorCitEM0Qx
MV9CTEVORF9PUCBDb252ZXJ0QmxlbmRPcChHTGVudW0gZ2xCbGVuZE9wKQoreworICAgIEQzRDEx
X0JMRU5EX09QIGQzZEJsZW5kT3AgPSBEM0QxMV9CTEVORF9PUF9BREQ7CisKKyAgICBzd2l0Y2gg
KGdsQmxlbmRPcCkKKyAgICB7CisgICAgICBjYXNlIEdMX0ZVTkNfQUREOiAgICAgICAgICAgICAg
ZDNkQmxlbmRPcCA9IEQzRDExX0JMRU5EX09QX0FERDsgICAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9GVU5DX1NVQlRSQUNUOiAgICAgICAgIGQzZEJsZW5kT3AgPSBEM0QxMV9CTEVORF9P
UF9TVUJUUkFDVDsgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NVQlRS
QUNUOiBkM2RCbGVuZE9wID0gRDNEMTFfQkxFTkRfT1BfUkVWX1NVQlRSQUNUOyAgYnJlYWs7Cisg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBkM2RCbGVu
ZE9wOworfQorCitVSU5UOCBDb252ZXJ0Q29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBi
b29sIGJsdWUsIGJvb2wgYWxwaGEpCit7CisgICAgVUlOVDggbWFzayA9IDA7CisgICAgaWYgKHJl
ZCkKKyAgICB7CisgICAgICAgIG1hc2sgfD0gRDNEMTFfQ09MT1JfV1JJVEVfRU5BQkxFX1JFRDsK
KyAgICB9CisgICAgaWYgKGdyZWVuKQorICAgIHsKKyAgICAgICAgbWFzayB8PSBEM0QxMV9DT0xP
Ul9XUklURV9FTkFCTEVfR1JFRU47CisgICAgfQorICAgIGlmIChibHVlKQorICAgIHsKKyAgICAg
ICAgbWFzayB8PSBEM0QxMV9DT0xPUl9XUklURV9FTkFCTEVfQkxVRTsKKyAgICB9CisgICAgaWYg
KGFscGhhKQorICAgIHsKKyAgICAgICAgbWFzayB8PSBEM0QxMV9DT0xPUl9XUklURV9FTkFCTEVf
QUxQSEE7CisgICAgfQorICAgIHJldHVybiBtYXNrOworfQorCitEM0QxMV9DVUxMX01PREUgQ29u
dmVydEN1bGxNb2RlKGJvb2wgY3VsbEVuYWJsZWQsIEdMZW51bSBjdWxsTW9kZSkKK3sKKyAgICBE
M0QxMV9DVUxMX01PREUgY3VsbCA9IEQzRDExX0NVTExfTk9ORTsKKworICAgIGlmIChjdWxsRW5h
YmxlZCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY3VsbE1vZGUpCisgICAgICAgIHsKKyAgICAg
ICAgICBjYXNlIEdMX0ZST05UOiAgICAgICAgICAgIGN1bGwgPSBEM0QxMV9DVUxMX0ZST05UOyAg
ICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0JBQ0s6ICAgICAgICAgICAgIGN1bGwgPSBEM0Qx
MV9DVUxMX0JBQ0s7ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZST05UX0FORF9CQUNL
OiAgIGN1bGwgPSBEM0QxMV9DVUxMX05PTkU7ICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIGN1bGwgPSBEM0QxMV9DVUxMX05PTkU7CisgICAgfQorCisgICAgcmV0dXJuIGN1bGw7Cit9
CisKK0QzRDExX0NPTVBBUklTT05fRlVOQyBDb252ZXJ0Q29tcGFyaXNvbihHTGVudW0gY29tcGFy
aXNvbikKK3sKKyAgICBEM0QxMV9DT01QQVJJU09OX0ZVTkMgZDNkQ29tcCA9IEQzRDExX0NPTVBB
UklTT05fTkVWRVI7CisgICAgc3dpdGNoIChjb21wYXJpc29uKQorICAgIHsKKyAgICAgIGNhc2Ug
R0xfTkVWRVI6ICAgIGQzZENvbXAgPSBEM0QxMV9DT01QQVJJU09OX05FVkVSOyAgICAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX0FMV0FZUzogICBkM2RDb21wID0gRDNEMTFfQ09NUEFSSVNP
Tl9BTFdBWVM7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MRVNTOiAgICAgZDNkQ29t
cCA9IEQzRDExX0NPTVBBUklTT05fTEVTUzsgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfTEVRVUFMOiAgIGQzZENvbXAgPSBEM0QxMV9DT01QQVJJU09OX0xFU1NfRVFVQUw7ICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX0VRVUFMOiAgICBkM2RDb21wID0gRDNEMTFfQ09NUEFSSVNP
Tl9FUVVBTDsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9HUkVBVEVSOiAgZDNkQ29t
cCA9IEQzRDExX0NPTVBBUklTT05fR1JFQVRFUjsgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfR0VRVUFMOiAgIGQzZENvbXAgPSBEM0QxMV9DT01QQVJJU09OX0dSRUFURVJfRVFVQUw7ICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX05PVEVRVUFMOiBkM2RDb21wID0gRDNEMTFfQ09NUEFSSVNP
Tl9OT1RfRVFVQUw7ICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
KyAgICB9CisKKyAgICByZXR1cm4gZDNkQ29tcDsKK30KKworRDNEMTFfREVQVEhfV1JJVEVfTUFT
SyBDb252ZXJ0RGVwdGhNYXNrKGJvb2wgZGVwdGhXcml0ZUVuYWJsZWQpCit7CisgICAgcmV0dXJu
IGRlcHRoV3JpdGVFbmFibGVkID8gRDNEMTFfREVQVEhfV1JJVEVfTUFTS19BTEwgOiBEM0QxMV9E
RVBUSF9XUklURV9NQVNLX1pFUk87Cit9CisKK1VJTlQ4IENvbnZlcnRTdGVuY2lsTWFzayhHTHVp
bnQgc3RlbmNpbG1hc2spCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFVJTlQ4PihzdGVuY2ls
bWFzayk7Cit9CisKK0QzRDExX1NURU5DSUxfT1AgQ29udmVydFN0ZW5jaWxPcChHTGVudW0gc3Rl
bmNpbE9wKQoreworICAgIEQzRDExX1NURU5DSUxfT1AgZDNkU3RlbmNpbE9wID0gRDNEMTFfU1RF
TkNJTF9PUF9LRUVQOworCisgICAgc3dpdGNoIChzdGVuY2lsT3ApCisgICAgeworICAgICAgY2Fz
ZSBHTF9aRVJPOiAgICAgIGQzZFN0ZW5jaWxPcCA9IEQzRDExX1NURU5DSUxfT1BfWkVSTzsgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfS0VFUDogICAgICBkM2RTdGVuY2lsT3AgPSBEM0QxMV9T
VEVOQ0lMX09QX0tFRVA7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JFUExBQ0U6ICAgZDNk
U3RlbmNpbE9wID0gRDNEMTFfU1RFTkNJTF9PUF9SRVBMQUNFOyAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9JTkNSOiAgICAgIGQzZFN0ZW5jaWxPcCA9IEQzRDExX1NURU5DSUxfT1BfSU5DUl9TQVQ7
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfREVDUjogICAgICBkM2RTdGVuY2lsT3AgPSBEM0QxMV9T
VEVOQ0lMX09QX0RFQ1JfU0FUOyAgYnJlYWs7CisgICAgICBjYXNlIEdMX0lOVkVSVDogICAgZDNk
U3RlbmNpbE9wID0gRDNEMTFfU1RFTkNJTF9PUF9JTlZFUlQ7ICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9JTkNSX1dSQVA6IGQzZFN0ZW5jaWxPcCA9IEQzRDExX1NURU5DSUxfT1BfSU5DUjsgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfREVDUl9XUkFQOiBkM2RTdGVuY2lsT3AgPSBEM0QxMV9T
VEVOQ0lMX09QX0RFQ1I7ICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OworICAgIH0KKworICAgIHJldHVybiBkM2RTdGVuY2lsT3A7Cit9CisKK0QzRDExX0ZJTFRFUiBD
b252ZXJ0RmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIsIEdMZW51bSBtYWdGaWx0ZXIsIGZsb2F0IG1h
eEFuaXNvdHJvcHkpCit7CisgICAgaWYgKG1heEFuaXNvdHJvcHkgPiAxLjBmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEQzRDExX0VOQ09ERV9BTklTT1RST1BJQ19GSUxURVIoZmFsc2UpOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBEM0QxMV9GSUxURVJfVFlQRSBkeE1pbiA9IEQz
RDExX0ZJTFRFUl9UWVBFX1BPSU5UOworICAgICAgICBEM0QxMV9GSUxURVJfVFlQRSBkeE1pcCA9
IEQzRDExX0ZJTFRFUl9UWVBFX1BPSU5UOworICAgICAgICBzd2l0Y2ggKG1pbkZpbHRlcikKKyAg
ICAgICAgeworICAgICAgICAgIGNhc2UgR0xfTkVBUkVTVDogICAgICAgICAgICAgICAgZHhNaW4g
PSBEM0QxMV9GSUxURVJfVFlQRV9QT0lOVDsgIGR4TWlwID0gRDNEMTFfRklMVEVSX1RZUEVfUE9J
TlQ7ICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0xJTkVBUjogICAgICAgICAgICAgICAgIGR4
TWluID0gRDNEMTFfRklMVEVSX1RZUEVfTElORUFSOyBkeE1pcCA9IEQzRDExX0ZJTFRFUl9UWVBF
X1BPSU5UOyAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNU
OiBkeE1pbiA9IEQzRDExX0ZJTFRFUl9UWVBFX1BPSU5UOyAgZHhNaXAgPSBEM0QxMV9GSUxURVJf
VFlQRV9QT0lOVDsgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFS
RVNUOiAgZHhNaW4gPSBEM0QxMV9GSUxURVJfVFlQRV9MSU5FQVI7IGR4TWlwID0gRDNEMTFfRklM
VEVSX1RZUEVfUE9JTlQ7ICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQ
X0xJTkVBUjogIGR4TWluID0gRDNEMTFfRklMVEVSX1RZUEVfUE9JTlQ7ICBkeE1pcCA9IEQzRDEx
X0ZJTFRFUl9UWVBFX0xJTkVBUjsgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQ
TUFQX0xJTkVBUjogICBkeE1pbiA9IEQzRDExX0ZJTFRFUl9UWVBFX0xJTkVBUjsgZHhNaXAgPSBE
M0QxMV9GSUxURVJfVFlQRV9MSU5FQVI7IGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6ICAgICAg
ICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorCisgICAgICAgIEQz
RDExX0ZJTFRFUl9UWVBFIGR4TWFnID0gRDNEMTFfRklMVEVSX1RZUEVfUE9JTlQ7CisgICAgICAg
IHN3aXRjaCAobWFnRmlsdGVyKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9ORUFSRVNU
OiBkeE1hZyA9IEQzRDExX0ZJTFRFUl9UWVBFX1BPSU5UOyAgYnJlYWs7CisgICAgICAgICAgY2Fz
ZSBHTF9MSU5FQVI6ICBkeE1hZyA9IEQzRDExX0ZJTFRFUl9UWVBFX0xJTkVBUjsgYnJlYWs7Cisg
ICAgICAgICAgZGVmYXVsdDogICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIEQzRDExX0VOQ09ERV9CQVNJQ19GSUxURVIoZHhNaW4sIGR4TWFnLCBkeE1p
cCwgZmFsc2UpOworICAgIH0KK30KKworRDNEMTFfVEVYVFVSRV9BRERSRVNTX01PREUgQ29udmVy
dFRleHR1cmVXcmFwKEdMZW51bSB3cmFwKQoreworICAgIHN3aXRjaCAod3JhcCkKKyAgICB7Cisg
ICAgICBjYXNlIEdMX1JFUEVBVDogICAgICAgICAgcmV0dXJuIEQzRDExX1RFWFRVUkVfQUREUkVT
U19XUkFQOworICAgICAgY2FzZSBHTF9DTEFNUF9UT19FREdFOiAgIHJldHVybiBEM0QxMV9URVhU
VVJFX0FERFJFU1NfQ0xBTVA7CisgICAgICBjYXNlIEdMX01JUlJPUkVEX1JFUEVBVDogcmV0dXJu
IEQzRDExX1RFWFRVUkVfQUREUkVTU19NSVJST1I7CisgICAgICBkZWZhdWx0OiAgICAgICAgICAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gRDNEMTFfVEVYVFVSRV9B
RERSRVNTX1dSQVA7Cit9CisKK0ZMT0FUIENvbnZlcnRNaW5MT0QoR0xlbnVtIG1pbkZpbHRlciwg
dW5zaWduZWQgaW50IGxvZE9mZnNldCkKK3sKKyAgICByZXR1cm4gKG1pbkZpbHRlciA9PSBHTF9O
RUFSRVNUIHx8IG1pbkZpbHRlciA9PSBHTF9MSU5FQVIpID8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGxv
ZE9mZnNldCkgOiAtRkxUX01BWDsKK30KKworRkxPQVQgQ29udmVydE1heExPRChHTGVudW0gbWlu
RmlsdGVyLCB1bnNpZ25lZCBpbnQgbG9kT2Zmc2V0KQoreworICAgIHJldHVybiAobWluRmlsdGVy
ID09IEdMX05FQVJFU1QgfHwgbWluRmlsdGVyID09IEdMX0xJTkVBUikgPyBzdGF0aWNfY2FzdDxm
bG9hdD4obG9kT2Zmc2V0KSA6IEZMVF9NQVg7Cit9CisKK30KKworbmFtZXNwYWNlIGQzZDExX2ds
Cit7CisKK0dMZW51bSBDb252ZXJ0QmFja0J1ZmZlckZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQp
Cit7CisgICAgc3dpdGNoIChmb3JtYXQpCisgICAgeworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
OEc4QjhBOF9VTk9STTogcmV0dXJuIEdMX1JHQkE4X09FUzsKKyAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQjhHOFI4QThfVU5PUk06IHJldHVybiBHTF9CR1JBOF9FWFQ7CisgICAgICBkZWZhdWx0Ogor
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBHTF9SR0JBOF9PRVM7
Cit9CisKK0dMZW51bSBDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1h
dCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIERYR0lfRk9STUFU
X1VOS05PV046IHJldHVybiBHTF9OT05FOworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZfVU5P
Uk06IHJldHVybiBHTF9ERVBUSF9DT01QT05FTlQxNjsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
RDI0X1VOT1JNX1M4X1VJTlQ6IHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKKyAgICAg
IGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIEdM
X0RFUFRIMjRfU1RFTkNJTDhfT0VTOworfQorCitHTGVudW0gQ29udmVydFJlbmRlcmJ1ZmZlckZv
cm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpCisgICAgewor
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STToKKyAgICAgICAgcmV0dXJuIEdM
X0JHUkE4X0VYVDsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk06CisgICAg
ICAgIHJldHVybiBHTF9SR0JBOF9PRVM7CisgICAgICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9S
TToKKyAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2OworICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDoKKyAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RF
TkNJTDhfT0VTOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9
CisKKyAgICByZXR1cm4gR0xfUkdCQThfT0VTOworfQorCitHTGVudW0gQ29udmVydFRleHR1cmVJ
bnRlcm5hbEZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQp
CisgICAgeworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STToKKyAgICAgICAg
cmV0dXJuIEdMX1JHQkE4X09FUzsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQThfVU5PUk06Cisg
ICAgICAgIHJldHVybiBHTF9BTFBIQThfRVhUOworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFf
VU5PUk06CisgICAgICAgIHJldHVybiBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDsK
KyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNOgorICAgICAgICByZXR1cm4gR0xfQ09N
UFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRTsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMz
X1VOT1JNOgorICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdM
RTsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUOgorICAgICAgICBy
ZXR1cm4gR0xfUkdCQTMyRl9FWFQ7CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9G
TE9BVDoKKyAgICAgICAgcmV0dXJuIEdMX1JHQjMyRl9FWFQ7CisgICAgICBjYXNlIERYR0lfRk9S
TUFUX1IxNkcxNkIxNkExNl9GTE9BVDoKKyAgICAgICAgcmV0dXJuIEdMX1JHQkExNkZfRVhUOwor
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STToKKyAgICAgICAgcmV0dXJuIEdM
X0JHUkE4X0VYVDsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVU5PUk06CisgICAgICAgIHJl
dHVybiBHTF9SOF9FWFQ7CisgICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfVU5PUk06CisgICAg
ICAgIHJldHVybiBHTF9SRzhfRVhUOworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfRkxPQVQ6
CisgICAgICAgIHJldHVybiBHTF9SMTZGX0VYVDsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2
RzE2X0ZMT0FUOgorICAgICAgICByZXR1cm4gR0xfUkcxNkZfRVhUOworICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9EMTZfVU5PUk06CisgICAgICAgIHJldHVybiBHTF9ERVBUSF9DT01QT05FTlQxNjsK
KyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ6CisgICAgICAgIHJldHVy
biBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfVU5LTk9X
TjoKKyAgICAgICAgcmV0dXJuIEdMX05PTkU7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJF
QUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Cit9CisKK30KKwor
bmFtZXNwYWNlIGdsX2QzZDExCit7CisKK0RYR0lfRk9STUFUIENvbnZlcnRSZW5kZXJidWZmZXJG
b3JtYXQoR0xlbnVtIGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICB7CisgICAg
ICBjYXNlIEdMX1JHQkE0OgorICAgICAgY2FzZSBHTF9SR0I1X0ExOgorICAgICAgY2FzZSBHTF9S
R0JBOF9PRVM6CisgICAgICBjYXNlIEdMX1JHQjU2NToKKyAgICAgIGNhc2UgR0xfUkdCOF9PRVM6
CisgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STTsKKyAgICAgIGNhc2Ug
R0xfQkdSQThfRVhUOgorICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk07
CisgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgorICAgICAgICByZXR1cm4gRFhHSV9G
T1JNQVRfRDE2X1VOT1JNOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVYODoKKyAgICAgIGNh
c2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6CisgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9E
MjRfVU5PUk1fUzhfVUlOVDsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7
CisgICAgfQorCisgICAgcmV0dXJuIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOworfQorCitE
WEdJX0ZPUk1BVCBDb252ZXJ0VGV4dHVyZUZvcm1hdChHTGVudW0gaW50ZXJuYWxmb3JtYXQpCit7
CisgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEdMX1JHQjU2
NToKKyAgICAgIGNhc2UgR0xfUkdCQTQ6CisgICAgICBjYXNlIEdMX1JHQjVfQTE6CisgICAgICBj
YXNlIEdMX1JHQjhfT0VTOgorICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6CisgICAgICBjYXNlIEdM
X0xVTUlOQU5DRThfRVhUOgorICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQ6Cisg
ICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STTsKKyAgICAgIGNhc2UgR0xf
QUxQSEE4X0VYVDoKKyAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0E4X1VOT1JNOworICAgICAg
Y2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgorICAgICAgY2FzZSBHTF9DT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKKyAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0JD
MV9VTk9STTsKKyAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToK
KyAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0JDMl9VTk9STTsKKyAgICAgIGNhc2UgR0xfQ09N
UFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKKyAgICAgICAgcmV0dXJuIERYR0lfRk9STUFU
X0JDM19VTk9STTsKKyAgICAgIGNhc2UgR0xfUkdCQTMyRl9FWFQ6CisgICAgICBjYXNlIEdMX0FM
UEhBMzJGX0VYVDoKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVDoKKyAgICAg
ICAgcmV0dXJuIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDsKKyAgICAgIGNhc2UgR0xf
UkdCMzJGX0VYVDoKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMzJGX0VYVDoKKyAgICAgICAgcmV0
dXJuIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDsKKyAgICAgIGNhc2UgR0xfUkdCQTE2
Rl9FWFQ6CisgICAgICBjYXNlIEdMX0FMUEhBMTZGX0VYVDoKKyAgICAgIGNhc2UgR0xfTFVNSU5B
TkNFX0FMUEhBMTZGX0VYVDoKKyAgICAgIGNhc2UgR0xfUkdCMTZGX0VYVDoKKyAgICAgIGNhc2Ug
R0xfTFVNSU5BTkNFMTZGX0VYVDoKKyAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1IxNkcxNkIx
NkExNl9GTE9BVDsKKyAgICAgIGNhc2UgR0xfQkdSQThfRVhUOgorICAgICAgICByZXR1cm4gRFhH
SV9GT1JNQVRfQjhHOFI4QThfVU5PUk07CisgICAgICBjYXNlIEdMX1I4X0VYVDoKKyAgICAgICAg
cmV0dXJuIERYR0lfRk9STUFUX1I4X1VOT1JNOworICAgICAgY2FzZSBHTF9SRzhfRVhUOgorICAg
ICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjhHOF9VTk9STTsKKyAgICAgIGNhc2UgR0xfUjE2Rl9F
WFQ6CisgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMTZfRkxPQVQ7CisgICAgICBjYXNlIEdM
X1JHMTZGX0VYVDoKKyAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1IxNkcxNl9GTE9BVDsKKyAg
ICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6CisgICAgICAgIHJldHVybiBEWEdJX0ZPUk1B
VF9EMTZfVU5PUk07CisgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUzoKKyAgICAg
IGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6CisgICAgICAgIHJldHVybiBEWEdJX0ZPUk1B
VF9EMjRfVU5PUk1fUzhfVUlOVDsKKyAgICAgIGNhc2UgR0xfTk9ORToKKyAgICAgICAgcmV0dXJu
IERYR0lfRk9STUFUX1VOS05PV047CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgIH0KKworICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STTsKK30K
KworfQorCituYW1lc3BhY2UgZDNkMTEKK3sKKwordm9pZCBTZXRQb3NpdGlvblRleENvb3JkVmVy
dGV4KFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgqIHZlcnRleCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxv
YXQgdSwgZmxvYXQgdikKK3sKKyAgICB2ZXJ0ZXgtPnggPSB4OworICAgIHZlcnRleC0+eSA9IHk7
CisgICAgdmVydGV4LT51ID0gdTsKKyAgICB2ZXJ0ZXgtPnYgPSB2OworfQorCit2b2lkIFNldFBv
c2l0aW9uRGVwdGhDb2xvclZlcnRleChQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgqIHZlcnRleCwg
ZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGdsOjpDb2xvciAmY29sb3IpCit7CisgICAgdmVydGV4LT54ID0geDsKKyAgICB2
ZXJ0ZXgtPnkgPSB5OworICAgIHZlcnRleC0+eiA9IHo7CisgICAgdmVydGV4LT5yID0gY29sb3Iu
cmVkOworICAgIHZlcnRleC0+ZyA9IGNvbG9yLmdyZWVuOworICAgIHZlcnRleC0+YiA9IGNvbG9y
LmJsdWU7CisgICAgdmVydGV4LT5hID0gY29sb3IuYWxwaGE7Cit9CisKK3NpemVfdCBDb21wdXRl
UGl4ZWxTaXplQml0cyhEWEdJX0ZPUk1BVCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQp
CisgICAgeworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMV9VTk9STToKKyAgICAgICAgcmV0dXJu
IDE7CisKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQThfVU5PUk06CisgICAgICBjYXNlIERYR0lf
Rk9STUFUX1I4X1NJTlQ6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1NOT1JNOgorICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SOF9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhf
VUlOVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVU5PUk06CisgICAgICAgIHJldHVybiA4
OworCisgICAgICBjYXNlIERYR0lfRk9STUFUX0I1RzVSNUExX1VOT1JNOgorICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9CNUc2UjVfVU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9S
TToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X0ZMT0FUOgorICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SMTZfU0lOVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X1NOT1JNOgorICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMTZfVFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1Ix
Nl9VSU5UOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfVU5PUk06CisgICAgICBjYXNlIERY
R0lfRk9STUFUX1I4RzhfU0lOVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9TTk9STToK
KyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjhHOF9VSU5UOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNOgorICAg
ICAgICByZXR1cm4gMTY7CisKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4WDhfVFlQRUxF
U1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOFg4X1VOT1JNOgorICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9COEc4UjhYOF9VTk9STV9TUkdCOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9E
MjRfVU5PUk1fUzhfVUlOVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FUOgorICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVRfUzhYMjRfVUlOVDoKKyAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfRzhSOF9HOEI4X1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTBHMTBC
MTBfWFJfQklBU19BMl9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjEwRzEwQjEwQTJf
VFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IxMEcxMEIxMEEyX1VJTlQ6CisgICAg
ICBjYXNlIERYR0lfRk9STUFUX1IxMEcxMEIxMEEyX1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SMTFHMTFCMTBfRkxPQVQ6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9GTE9B
VDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X1NJTlQ6CisgICAgICBjYXNlIERYR0lf
Rk9STUFUX1IxNkcxNl9TTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X1RZUEVM
RVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfVUlOVDoKKyAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfUjE2RzE2X1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMjRfVU5PUk1f
WDhfVFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IyNEc4X1RZUEVMRVNTOgorICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQ6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1Iz
Ml9GTE9BVF9YOFgyNF9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyX1NJTlQ6
CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMl9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjMyX1VJTlQ6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfQjhHOF9VTk9STToK
KyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfU0lOVDoKKyAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjhHOEI4QThfU05PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1RZ
UEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VSU5UOgorICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhH
OEI4QThfVU5PUk1fU1JHQjoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVFlQRUxF
U1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOgorICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STV9TUkdCOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
OUc5QjlFNV9TSEFSRURFWFA6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1gyNF9UWVBFTEVTU19H
OF9VSU5UOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9YMzJfVFlQRUxFU1NfRzhYMjRfVUlOVDoK
KyAgICAgICAgcmV0dXJuIDMyOworCisgICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkEx
Nl9GTE9BVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1NJTlQ6CisgICAg
ICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9TTk9STToKKyAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjE2RzE2QjE2QTE2X1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZH
MTZCMTZBMTZfVUlOVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1VOT1JN
OgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQ6CisgICAgICBjYXNlIERYR0lf
Rk9STUFUX1IzMkczMl9TSU5UOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJfVFlQRUxF
U1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMl9VSU5UOgorICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SMzJHOFgyNF9UWVBFTEVTUzoKKyAgICAgICAgcmV0dXJuIDY0OworCisgICAgICBj
YXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVDoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjMyRzMyQjMyX1NJTlQ6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9UWVBFTEVT
UzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX1VJTlQ6CisgICAgICAgIHJldHVy
biA5NjsKKworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQ6CisgICAg
ICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9TSU5UOgorICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SMzJHMzJCMzJBMzJfVFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkcz
MkIzMkEzMl9VSU5UOgorICAgICAgICByZXR1cm4gMTI4OworCisgICAgICBjYXNlIERYR0lfRk9S
TUFUX0JDMV9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNOgorICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk1fU1JHQjoKKyAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkM0X1NOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVFlQRUxFU1M6CisgICAg
ICBjYXNlIERYR0lfRk9STUFUX0JDNF9VTk9STToKKyAgICAgICAgcmV0dXJuIDQ7CisKKyAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkMyX1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzJfVU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STV9TUkdCOgorICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9CQzNfVFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JD
M19VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNX1NSR0I6CisgICAgICBj
YXNlIERYR0lfRk9STUFUX0JDNV9TTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1RZ
UEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfVU5PUk06CisgICAgICBjYXNlIERY
R0lfRk9STUFUX0JDNkhfU0YxNjoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9UWVBFTEVT
UzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9VRjE2OgorICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzdfVFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9STToKKyAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1VOT1JNX1NSR0I6CisgICAgICAgIHJldHVybiA4Owor
CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3NpemVfdCBD
b21wdXRlQmxvY2tTaXplQml0cyhEWEdJX0ZPUk1BVCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChm
b3JtYXQpCisgICAgeworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVFlQRUxFU1M6CisgICAg
ICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMx
X1VOT1JNX1NSR0I6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9TTk9STToKKyAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfQkM0X1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRf
VU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9UWVBFTEVTUzoKKyAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkMyX1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk1f
U1JHQjoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1RZUEVMRVNTOgorICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9CQzNfVU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STV9T
UkdCOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfU05PUk06CisgICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDNV9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1VOT1JNOgor
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1NGMTY6CisgICAgICBjYXNlIERYR0lfRk9STUFU
X0JDNkhfVFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVUYxNjoKKyAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkM3X1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzdfVU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9STV9TUkdCOgorICAgICAg
ICByZXR1cm4gQ29tcHV0ZVBpeGVsU2l6ZUJpdHMoZm9ybWF0KSAqIDE2OworICAgICAgZGVmYXVs
dDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQor
Citib29sIElzQ29tcHJlc3NlZChEWEdJX0ZPUk1BVCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChm
b3JtYXQpCisgICAgeworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVFlQRUxFU1M6CisgICAg
ICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMx
X1VOT1JNX1NSR0I6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9TTk9STToKKyAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfQkM0X1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRf
VU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9UWVBFTEVTUzoKKyAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkMyX1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk1f
U1JHQjoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1RZUEVMRVNTOgorICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9CQzNfVU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STV9T
UkdCOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfU05PUk06CisgICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDNV9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1VOT1JNOgor
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1NGMTY6CisgICAgICBjYXNlIERYR0lfRk9STUFU
X0JDNkhfVFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVUYxNjoKKyAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkM3X1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzdfVU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9STV9TUkdCOgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfVU5LTk9XTjoKKyAgICAgICAg
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwordW5zaWduZWQgaW50IEdldFRleHR1cmVG
b3JtYXREaW1lbnNpb25BbGlnbm1lbnQoRFhHSV9GT1JNQVQgZm9ybWF0KQoreworICAgIHN3aXRj
aCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1RZUEVMRVNTOgor
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk06CisgICAgICBjYXNlIERYR0lfRk9STUFU
X0JDMV9VTk9STV9TUkdCOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfU05PUk06CisgICAg
ICBjYXNlIERYR0lfRk9STUFUX0JDNF9UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
QkM0X1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVFlQRUxFU1M6CisgICAgICBj
YXNlIERYR0lfRk9STUFUX0JDMl9VTk9STToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VO
T1JNX1NSR0I6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19UWVBFTEVTUzoKKyAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5P
Uk1fU1JHQjoKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1NOT1JNOgorICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9CQzVfVFlQRUxFU1M6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9VTk9S
TToKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9TRjE2OgorICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzZIX1RZUEVMRVNTOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1VGMTY6Cisg
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19UWVBFTEVTUzoKKyAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkM3X1VOT1JNOgorICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk1fU1JHQjoKKyAg
ICAgICAgcmV0dXJuIDQ7CisgICAgICBjYXNlIERYR0lfRk9STUFUX1VOS05PV046CisgICAgICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAxOworICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIDE7CisgICAgfQorfQorCitib29sIElzRGVwdGhTdGVuY2lsRm9ybWF0KERYR0lf
Rk9STUFUIGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNl
IERYR0lfRk9STUFUX0QzMl9GTE9BVF9TOFgyNF9VSU5UOgorICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9EMzJfRkxPQVQ6CisgICAgICBjYXNlIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOgor
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZfVU5PUk06CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworRFhHSV9G
T1JNQVQgR2V0RGVwdGhUZXh0dXJlRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKK3sKKyAgICBz
d2l0Y2ggKGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIERYR0lfRk9STUFUX0QzMl9GTE9BVF9T
OFgyNF9VSU5UOiByZXR1cm4gRFhHSV9GT1JNQVRfUjMyRzhYMjRfVFlQRUxFU1M7CisgICAgICBj
YXNlIERYR0lfRk9STUFUX0QzMl9GTE9BVDogICAgICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRf
UjMyX1RZUEVMRVNTOworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDog
ICAgcmV0dXJuIERYR0lfRk9STUFUX1IyNEc4X1RZUEVMRVNTOworICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9EMTZfVU5PUk06ICAgICAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1IxNl9UWVBFTEVT
UzsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgICAgICAgICAgIHJldHVybiBE
WEdJX0ZPUk1BVF9VTktOT1dOOworICAgIH0KK30KKworRFhHSV9GT1JNQVQgR2V0RGVwdGhTaGFk
ZXJSZXNvdXJjZUZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3Jt
YXQpCisgICAgeworICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVRfUzhYMjRfVUlOVDog
cmV0dXJuIERYR0lfRk9STUFUX1IzMl9GTE9BVF9YOFgyNF9UWVBFTEVTUzsKKyAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfRDMyX0ZMT0FUOiAgICAgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMzJf
VUlOVDsKKyAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ6ICAgIHJldHVy
biBEWEdJX0ZPUk1BVF9SMjRfVU5PUk1fWDhfVFlQRUxFU1M7CisgICAgICBjYXNlIERYR0lfRk9S
TUFUX0QxNl9VTk9STTogICAgICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjE2X1VOT1JNOwor
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAgICAgICAgICAgcmV0dXJuIERYR0lf
Rk9STUFUX1VOS05PV047CisgICAgfQorfQorCitIUkVTVUxUIFNldERlYnVnTmFtZShJRDNEMTFE
ZXZpY2VDaGlsZCAqcmVzb3VyY2UsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisjaWYgZGVmaW5lZChf
REVCVUcpCisgICAgcmV0dXJuIHJlc291cmNlLT5TZXRQcml2YXRlRGF0YShXS1BESURfRDNERGVi
dWdPYmplY3ROYW1lLCBzdHJsZW4obmFtZSksIG5hbWUpOworI2Vsc2UKKyAgICByZXR1cm4gU19P
SzsKKyNlbmRpZgorfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91
dGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjFiYzQ4YzFhMTM1YTVkODhhODliZDU2ODU2OWZkNmU5ZGQ2Nzcz
ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaApAQCAtMCwwICsxLDk1IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworLy8gcmVuZGVyZXIxMV91dGlscy5oOiBDb252ZXJzaW9uIGZ1bmN0aW9u
cyBhbmQgb3RoZXIgdXRpbGl0eSByb3V0aW5lcworLy8gc3BlY2lmaWMgdG8gdGhlIEQzRDExIHJl
bmRlcmVyLgorCisjaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjExX1VUSUxTX0gK
KyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUkVSMTFfVVRJTFNfSAorCisjaW5jbHVk
ZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKKworbmFtZXNwYWNlIGdsX2QzZDExCit7CisKK0Qz
RDExX0JMRU5EIENvbnZlcnRCbGVuZEZ1bmMoR0xlbnVtIGdsQmxlbmQsIGJvb2wgaXNBbHBoYSk7
CitEM0QxMV9CTEVORF9PUCBDb252ZXJ0QmxlbmRPcChHTGVudW0gZ2xCbGVuZE9wKTsKK1VJTlQ4
IENvbnZlcnRDb2xvck1hc2soYm9vbCBtYXNrUmVkLCBib29sIG1hc2tHcmVlbiwgYm9vbCBtYXNr
Qmx1ZSwgYm9vbCBtYXNrQWxwaGEpOworCitEM0QxMV9DVUxMX01PREUgQ29udmVydEN1bGxNb2Rl
KGJvb2wgY3VsbEVuYWJsZWQsIEdMZW51bSBjdWxsTW9kZSk7CisKK0QzRDExX0NPTVBBUklTT05f
RlVOQyBDb252ZXJ0Q29tcGFyaXNvbihHTGVudW0gY29tcGFyaXNvbik7CitEM0QxMV9ERVBUSF9X
UklURV9NQVNLIENvbnZlcnREZXB0aE1hc2soYm9vbCBkZXB0aFdyaXRlRW5hYmxlZCk7CitVSU5U
OCBDb252ZXJ0U3RlbmNpbE1hc2soR0x1aW50IHN0ZW5jaWxtYXNrKTsKK0QzRDExX1NURU5DSUxf
T1AgQ29udmVydFN0ZW5jaWxPcChHTGVudW0gc3RlbmNpbE9wKTsKKworRDNEMTFfRklMVEVSIENv
bnZlcnRGaWx0ZXIoR0xlbnVtIG1pbkZpbHRlciwgR0xlbnVtIG1hZ0ZpbHRlciwgZmxvYXQgbWF4
QW5pc290cm9weSk7CitEM0QxMV9URVhUVVJFX0FERFJFU1NfTU9ERSBDb252ZXJ0VGV4dHVyZVdy
YXAoR0xlbnVtIHdyYXApOworRkxPQVQgQ29udmVydE1pbkxPRChHTGVudW0gbWluRmlsdGVyLCB1
bnNpZ25lZCBpbnQgbG9kT2Zmc2V0KTsKK0ZMT0FUIENvbnZlcnRNYXhMT0QoR0xlbnVtIG1pbkZp
bHRlciwgdW5zaWduZWQgaW50IGxvZE9mZnNldCk7CisKK0RYR0lfRk9STUFUIENvbnZlcnRSZW5k
ZXJidWZmZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCk7CitEWEdJX0ZPUk1BVCBDb252ZXJ0VGV4dHVy
ZUZvcm1hdChHTGVudW0gZm9ybWF0KTsKK30KKworbmFtZXNwYWNlIGQzZDExX2dsCit7CisKK0dM
ZW51bSBDb252ZXJ0QmFja0J1ZmZlckZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpOworR0xlbnVt
IENvbnZlcnREZXB0aFN0ZW5jaWxGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKK0dMZW51bSBD
b252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCk7CitHTGVudW0gQ29u
dmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpOworCit9CisKK25h
bWVzcGFjZSBkM2QxMQoreworCitzdHJ1Y3QgUG9zaXRpb25UZXhDb29yZFZlcnRleAoreworICAg
IGZsb2F0IHgsIHk7CisgICAgZmxvYXQgdSwgdjsKK307Cit2b2lkIFNldFBvc2l0aW9uVGV4Q29v
cmRWZXJ0ZXgoUG9zaXRpb25UZXhDb29yZFZlcnRleCogdmVydGV4LCBmbG9hdCB4LCBmbG9hdCB5
LCBmbG9hdCB1LCBmbG9hdCB2KTsKKworc3RydWN0IFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleAor
eworICAgIGZsb2F0IHgsIHksIHo7CisgICAgZmxvYXQgciwgZywgYiwgYTsKK307Cit2b2lkIFNl
dFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleChQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgqIHZlcnRl
eCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGdsOjpDb2xvciAmY29sb3IpOworCitzaXplX3QgQ29tcHV0ZVBpeGVsU2l6
ZUJpdHMoRFhHSV9GT1JNQVQgZm9ybWF0KTsKK3NpemVfdCBDb21wdXRlQmxvY2tTaXplQml0cyhE
WEdJX0ZPUk1BVCBmb3JtYXQpOworCitib29sIElzQ29tcHJlc3NlZChEWEdJX0ZPUk1BVCBmb3Jt
YXQpOwordW5zaWduZWQgaW50IEdldFRleHR1cmVGb3JtYXREaW1lbnNpb25BbGlnbm1lbnQoRFhH
SV9GT1JNQVQgZm9ybWF0KTsKKworYm9vbCBJc0RlcHRoU3RlbmNpbEZvcm1hdChEWEdJX0ZPUk1B
VCBmb3JtYXQpOworRFhHSV9GT1JNQVQgR2V0RGVwdGhUZXh0dXJlRm9ybWF0KERYR0lfRk9STUFU
IGZvcm1hdCk7CitEWEdJX0ZPUk1BVCBHZXREZXB0aFNoYWRlclJlc291cmNlRm9ybWF0KERYR0lf
Rk9STUFUIGZvcm1hdCk7CisKK0hSRVNVTFQgU2V0RGVidWdOYW1lKElEM0QxMURldmljZUNoaWxk
ICpyZXNvdXJjZSwgY29uc3QgY2hhciAqbmFtZSk7CisKK2lubGluZSBib29sIGlzRGV2aWNlTG9z
dEVycm9yKEhSRVNVTFQgZXJyb3JDb2RlKQoreworICAgIHN3aXRjaCAoZXJyb3JDb2RlKQorICAg
IHsKKyAgICAgIGNhc2UgRFhHSV9FUlJPUl9ERVZJQ0VfSFVORzoKKyAgICAgIGNhc2UgRFhHSV9F
UlJPUl9ERVZJQ0VfUkVNT1ZFRDoKKyAgICAgIGNhc2UgRFhHSV9FUlJPUl9ERVZJQ0VfUkVTRVQ6
CisgICAgICBjYXNlIERYR0lfRVJST1JfRFJJVkVSX0lOVEVSTkFMX0VSUk9SOgorICAgICAgY2Fz
ZSBEWEdJX0VSUk9SX05PVF9DVVJSRU5UTFlfQVZBSUxBQkxFOgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK30K
KworI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjExX1VUSUxTX0gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvc2hhZGVycy9DbGVhcjExLmhsc2wgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvQ2xlYXIxMS5obHNsCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA0
MmFjNjk5YjY2YTIyMzlhZGJmNTI1MWZhYWYzYjNlNGMzZmVjNWYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3No
YWRlcnMvQ2xlYXIxMS5obHNsCkBAIC0wLDAgKzEsMzggQEAKK3ZvaWQgVlNfQ2xlYXIoIGluIGZs
b2F0MyAgaW5Qb3NpdGlvbiA6ICAgIFBPU0lUSU9OLCAgaW4gZmxvYXQ0ICBpbkNvbG9yIDogQ09M
T1IsCisgICAgICAgICAgICAgIG91dCBmbG9hdDQgb3V0UG9zaXRpb24gOiBTVl9QT1NJVElPTiwg
b3V0IGZsb2F0NCBvdXRDb2xvciA6IENPTE9SKQoreworICAgIG91dFBvc2l0aW9uID0gZmxvYXQ0
KGluUG9zaXRpb24sIDEuMGYpOworICAgIG91dENvbG9yID0gaW5Db2xvcjsKK30KKworLy8gQXNz
dW1lIHdlIGFyZSBpbiBTTTQrLCB3aGljaCBoYXMgOCBjb2xvciBvdXRwdXRzCitzdHJ1Y3QgUFNf
T3V0cHV0TXVsdGlwbGUKK3sKKwlmbG9hdDQgY29sb3IwIDogU1ZfVEFSR0VUMDsKKwlmbG9hdDQg
Y29sb3IxIDogU1ZfVEFSR0VUMTsKKwlmbG9hdDQgY29sb3IyIDogU1ZfVEFSR0VUMjsKKwlmbG9h
dDQgY29sb3IzIDogU1ZfVEFSR0VUMzsKKwlmbG9hdDQgY29sb3I0IDogU1ZfVEFSR0VUNDsKKwlm
bG9hdDQgY29sb3I1IDogU1ZfVEFSR0VUNTsKKwlmbG9hdDQgY29sb3I2IDogU1ZfVEFSR0VUNjsK
KwlmbG9hdDQgY29sb3I3IDogU1ZfVEFSR0VUNzsKK307CisKK1BTX091dHB1dE11bHRpcGxlIFBT
X0NsZWFyTXVsdGlwbGUoaW4gZmxvYXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxv
YXQ0IGluQ29sb3IgOiBDT0xPUikKK3sKKwlQU19PdXRwdXRNdWx0aXBsZSBvdXRDb2xvcjsKKwlv
dXRDb2xvci5jb2xvcjAgPSBpbkNvbG9yOworCW91dENvbG9yLmNvbG9yMSA9IGluQ29sb3I7CisJ
b3V0Q29sb3IuY29sb3IyID0gaW5Db2xvcjsKKwlvdXRDb2xvci5jb2xvcjMgPSBpbkNvbG9yOwor
CW91dENvbG9yLmNvbG9yNCA9IGluQ29sb3I7CisJb3V0Q29sb3IuY29sb3I1ID0gaW5Db2xvcjsK
KwlvdXRDb2xvci5jb2xvcjYgPSBpbkNvbG9yOworCW91dENvbG9yLmNvbG9yNyA9IGluQ29sb3I7
CisJcmV0dXJuIG91dENvbG9yOworfQorCitmbG9hdDQgUFNfQ2xlYXJTaW5nbGUoaW4gZmxvYXQ0
IGluUG9zaXRpb24gOiBTVl9Qb3NpdGlvbiwgaW4gZmxvYXQ0IGluQ29sb3IgOiBDT0xPUikgOiBT
Vl9UYXJnZXQwCit7CisJcmV0dXJuIGluQ29sb3I7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvUGFzc3Ro
cm91Z2gxMS5obHNsIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9zaGFkZXJzL1Bhc3N0aHJvdWdoMTEuaGxzbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40M2I3ODAx
ZWZjMWZlZjZlMjM5MTgwMDY3ZGQwMjM2OTk4NTViOWEzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJz
L1Bhc3N0aHJvdWdoMTEuaGxzbApAQCAtMCwwICsxLDI5IEBACitUZXh0dXJlMkQgVGV4dHVyZSA6
IHJlZ2lzdGVyKHQwKTsKK1NhbXBsZXJTdGF0ZSBTYW1wbGVyIDogcmVnaXN0ZXIoczApOworCit2
b2lkIFZTX1Bhc3N0aHJvdWdoKCBpbiBmbG9hdDIgIGluUG9zaXRpb24gOiAgICBQT1NJVElPTiwg
IGluIGZsb2F0MiAgaW5UZXhDb29yZCA6IFRFWENPT1JEMCwKKyAgICAgICAgICAgICAgICAgICAg
b3V0IGZsb2F0NCBvdXRQb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBvdXQgZmxvYXQyIG91dFRleENv
b3JkIDogVEVYQ09PUkQwKQoreworICAgIG91dFBvc2l0aW9uID0gZmxvYXQ0KGluUG9zaXRpb24s
IDAuMGYsIDEuMGYpOworICAgIG91dFRleENvb3JkID0gaW5UZXhDb29yZDsKK30KKworZmxvYXQ0
IFBTX1Bhc3N0aHJvdWdoUkdCQShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBp
biBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgcmV0
dXJuIFRleHR1cmUuU2FtcGxlKFNhbXBsZXIsIGluVGV4Q29vcmQpLnJnYmE7Cit9CisKK2Zsb2F0
NCBQU19QYXNzdGhyb3VnaFJHQihpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBp
biBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgcmV0
dXJuIGZsb2F0NChUZXh0dXJlLlNhbXBsZShTYW1wbGVyLCBpblRleENvb3JkKS5yZ2IsIDEuMGYp
OworfQorCitmbG9hdDQgUFNfUGFzc3Rocm91Z2hMdW0oaW4gZmxvYXQ0IGluUG9zaXRpb24gOiBT
Vl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDApIDogU1ZfVEFSR0VU
MAoreworICAgIHJldHVybiBmbG9hdDQoVGV4dHVyZS5TYW1wbGUoU2FtcGxlciwgaW5UZXhDb29y
ZCkucnJyLCAxLjBmKTsKK30KKworZmxvYXQ0IFBTX1Bhc3N0aHJvdWdoTHVtQWxwaGEoaW4gZmxv
YXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhD
T09SRDApIDogU1ZfVEFSR0VUMAoreworICAgIHJldHVybiBUZXh0dXJlLlNhbXBsZShTYW1wbGVy
LCBpblRleENvb3JkKS5ycnJhOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyMTF2
cy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyMTF2cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZiYzc0MzEyNmVkMDZj
OGY2NzU4ZTEwZTVkMTc3MjAxNDk1Yzk2ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGls
ZWQvY2xlYXIxMXZzLmgKQEAgLTAsMCArMSwxMzEgQEAKKyNpZiAwDQorLy8NCisvLyBHZW5lcmF0
ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQN
CisvLw0KKy8vDQorLy8vDQorLy8NCisvLyBJbnB1dCBzaWduYXR1cmU6DQorLy8NCisvLyBOYW1l
ICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAg
IFVzZWQNCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0t
LS0tLS0gLS0tLS0tLSAtLS0tLS0NCisvLyBQT1NJVElPTiAgICAgICAgICAgICAgICAgMCAgIHh5
eiAgICAgICAgIDAgICAgIE5PTkUgICBmbG9hdCAgIHh5eiANCisvLyBDT0xPUiAgICAgICAgICAg
ICAgICAgICAgMCAgIHh5encgICAgICAgIDEgICAgIE5PTkUgICBmbG9hdCAgIHh5encNCisvLw0K
Ky8vDQorLy8gT3V0cHV0IHNpZ25hdHVyZToNCisvLw0KKy8vIE5hbWUgICAgICAgICAgICAgICAg
IEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KKy8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0t
LS0tLQ0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAg
IFBPUyAgIGZsb2F0ICAgeHl6dw0KKy8vIENPTE9SICAgICAgICAgICAgICAgICAgICAwICAgeHl6
dyAgICAgICAgMSAgICAgTk9ORSAgIGZsb2F0ICAgeHl6dw0KKy8vDQordnNfNF8wDQorZGNsX2lu
cHV0IHYwLnh5eg0KK2RjbF9pbnB1dCB2MS54eXp3DQorZGNsX291dHB1dF9zaXYgbzAueHl6dywg
cG9zaXRpb24NCitkY2xfb3V0cHV0IG8xLnh5encNCittb3YgbzAueHl6LCB2MC54eXp4DQorbW92
IG8wLncsIGwoMS4wMDAwMDApDQorbW92IG8xLnh5encsIHYxLnh5encNCityZXQgDQorLy8gQXBw
cm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCisjZW5kaWYNCisNCitjb25zdCBC
WVRFIGdfVlNfQ2xlYXJbXSA9DQorew0KKyAgICAgNjgsICA4OCwgIDY2LCAgNjcsICA5NywgICA1
LCANCisgICAgIDEzLCAxNjMsIDE2MCwgMjU0LCAgOTUsIDEyNywgDQorICAgICAzMCwgMTk0LCAx
MjEsIDE0NCwgMjM2LCAxODUsIA0KKyAgICAgNTksICAyOSwgICAxLCAgIDAsICAgMCwgICAwLCAN
CisgICAgIDQ4LCAgIDIsICAgMCwgICAwLCAgIDUsICAgMCwgDQorICAgICAgMCwgICAwLCAgNTIs
ICAgMCwgICAwLCAgIDAsIA0KKyAgICAxNDAsICAgMCwgICAwLCAgIDAsIDIyMCwgICAwLCANCisg
ICAgICAwLCAgIDAsICA0OCwgICAxLCAgIDAsICAgMCwgDQorICAgIDE4MCwgICAxLCAgIDAsICAg
MCwgIDgyLCAgNjgsIA0KKyAgICAgNjksICA3MCwgIDgwLCAgIDAsICAgMCwgICAwLCANCisgICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgMjgsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCANCisgICAgMjU0
LCAyNTUsICAgMCwgICAxLCAgIDAsICAgMCwgDQorICAgICAyOCwgICAwLCAgIDAsICAgMCwgIDc3
LCAxMDUsIA0KKyAgICAgOTksIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCANCisgICAgMTE2LCAg
MzIsICA0MCwgIDgyLCAgNDEsICAzMiwgDQorICAgICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAg
ODMsIA0KKyAgICAxMDQsICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCANCisgICAgIDY3LCAxMTEs
IDEwOSwgMTEyLCAxMDUsIDEwOCwgDQorICAgIDEwMSwgMTE0LCAgMzIsICA1NywgIDQ2LCAgNTEs
IA0KKyAgICAgNDgsICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4LCANCisgICAgIDQ2LCAgNDksICA1
NCwgIDUxLCAgNTYsICA1MiwgDQorICAgICAgMCwgMTcxLCAgNzMsICA4MywgIDcxLCAgNzgsIA0K
KyAgICAgNzIsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCANCisgICAgICAwLCAgIDAsICAgOCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICA1NiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAzLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDcsICAgNywgICAwLCAgIDAsIA0KKyAgICAg
NjUsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgIDE1LCAgMTUsICAgMCwgICAwLCANCisgICAgIDgwLCAgNzksICA4MywgIDczLCAgODQs
ICA3MywgDQorICAgICA3OSwgIDc4LCAgIDAsICA2NywgIDc5LCAgNzYsIA0KKyAgICAgNzksICA4
MiwgICAwLCAxNzEsICA3OSwgIDgzLCANCisgICAgIDcxLCAgNzgsICA3NiwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsIA0KKyAgICAgIDAsICAgMCwg
IDU2LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAxNSwgICAwLCANCisgICAgICAwLCAgIDAsICA2OCwgICAwLCAgIDAsICAgMCwgDQor
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAzLCAg
IDAsICAgMCwgICAwLCANCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgMTUsICAgMCwgDQorICAg
ICAgMCwgICAwLCAgODMsICA4NiwgIDk1LCAgODAsIA0KKyAgICAgNzksICA4MywgIDczLCAgODQs
ICA3MywgIDc5LCANCisgICAgIDc4LCAgIDAsICA2NywgIDc5LCAgNzYsICA3OSwgDQorICAgICA4
MiwgICAwLCAxNzEsIDE3MSwgIDgzLCAgNzIsIA0KKyAgICAgNjgsICA4MiwgMTI0LCAgIDAsICAg
MCwgICAwLCANCisgICAgIDY0LCAgIDAsICAgMSwgICAwLCAgMzEsICAgMCwgDQorICAgICAgMCwg
ICAwLCAgOTUsICAgMCwgICAwLCAgIDMsIA0KKyAgICAxMTQsICAxNiwgIDE2LCAgIDAsICAgMCwg
ICAwLCANCisgICAgICAwLCAgIDAsICA5NSwgICAwLCAgIDAsICAgMywgDQorICAgIDI0MiwgIDE2
LCAgMTYsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgMTAzLCAgIDAsICAgMCwgICA0
LCANCisgICAgMjQyLCAgMzIsICAxNiwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAg
IDEsICAgMCwgICAwLCAgIDAsIA0KKyAgICAxMDEsICAgMCwgICAwLCAgIDMsIDI0MiwgIDMyLCAN
CisgICAgIDE2LCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgICA1NCwgICAwLCAgIDAs
ICAgNSwgMTE0LCAgMzIsIA0KKyAgICAgMTYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisg
ICAgIDcwLCAgMTgsICAxNiwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgNTQsICAg
MCwgICAwLCAgIDUsIA0KKyAgICAxMzAsICAzMiwgIDE2LCAgIDAsICAgMCwgICAwLCANCisgICAg
ICAwLCAgIDAsICAgMSwgIDY0LCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAxMjgsICA2Mywg
IDU0LCAgIDAsIA0KKyAgICAgIDAsICAgNSwgMjQyLCAgMzIsICAxNiwgICAwLCANCisgICAgICAx
LCAgIDAsICAgMCwgICAwLCAgNzAsICAzMCwgDQorICAgICAxNiwgICAwLCAgIDEsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAgNjIsICAgMCwgICAwLCAgIDEsICA4MywgIDg0LCANCisgICAgIDY1LCAg
ODQsIDExNiwgICAwLCAgIDAsICAgMCwgDQorICAgICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICA0LCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsIA0KKyAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MA0KK307DQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFybXVsdGlwbGUxMXBzLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRl
cnMvY29tcGlsZWQvY2xlYXJtdWx0aXBsZTExcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNGI0NDVhYzNmNmE3
MWU0YzVlMjFhZGM0YmFlOWFmZGI5MjgzOWU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBp
bGVkL2NsZWFybXVsdGlwbGUxMXBzLmgKQEAgLTAsMCArMSwxOTYgQEAKKyNpZiAwDQorLy8NCisv
LyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjky
MDAuMTYzODQNCisvLw0KKy8vDQorLy8vDQorLy8NCisvLyBJbnB1dCBzaWduYXR1cmU6DQorLy8N
CisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUg
IEZvcm1hdCAgIFVzZWQNCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0t
LS0tLS0gLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0NCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAg
ICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgICBmbG9hdCAgICAgICANCisvLyBDT0xPUiAg
ICAgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDEgICAgIE5PTkUgICBmbG9hdCAgIHh5
encNCisvLw0KKy8vDQorLy8gT3V0cHV0IHNpZ25hdHVyZToNCisvLw0KKy8vIE5hbWUgICAgICAg
ICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0K
Ky8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAt
LS0tLS0tIC0tLS0tLQ0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAg
ICAgMCAgIFRBUkdFVCAgIGZsb2F0ICAgeHl6dw0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAg
ICAxICAgeHl6dyAgICAgICAgMSAgIFRBUkdFVCAgIGZsb2F0ICAgeHl6dw0KKy8vIFNWX1RBUkdF
VCAgICAgICAgICAgICAgICAyICAgeHl6dyAgICAgICAgMiAgIFRBUkdFVCAgIGZsb2F0ICAgeHl6
dw0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAzICAgeHl6dyAgICAgICAgMyAgIFRBUkdF
VCAgIGZsb2F0ICAgeHl6dw0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICA0ICAgeHl6dyAg
ICAgICAgNCAgIFRBUkdFVCAgIGZsb2F0ICAgeHl6dw0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAg
ICAgICA1ICAgeHl6dyAgICAgICAgNSAgIFRBUkdFVCAgIGZsb2F0ICAgeHl6dw0KKy8vIFNWX1RB
UkdFVCAgICAgICAgICAgICAgICA2ICAgeHl6dyAgICAgICAgNiAgIFRBUkdFVCAgIGZsb2F0ICAg
eHl6dw0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICA3ICAgeHl6dyAgICAgICAgNyAgIFRB
UkdFVCAgIGZsb2F0ICAgeHl6dw0KKy8vDQorcHNfNF8wDQorZGNsX2lucHV0X3BzIGxpbmVhciB2
MS54eXp3DQorZGNsX291dHB1dCBvMC54eXp3DQorZGNsX291dHB1dCBvMS54eXp3DQorZGNsX291
dHB1dCBvMi54eXp3DQorZGNsX291dHB1dCBvMy54eXp3DQorZGNsX291dHB1dCBvNC54eXp3DQor
ZGNsX291dHB1dCBvNS54eXp3DQorZGNsX291dHB1dCBvNi54eXp3DQorZGNsX291dHB1dCBvNy54
eXp3DQorbW92IG8wLnh5encsIHYxLnh5encNCittb3YgbzEueHl6dywgdjEueHl6dw0KK21vdiBv
Mi54eXp3LCB2MS54eXp3DQorbW92IG8zLnh5encsIHYxLnh5encNCittb3YgbzQueHl6dywgdjEu
eHl6dw0KK21vdiBvNS54eXp3LCB2MS54eXp3DQorbW92IG82Lnh5encsIHYxLnh5encNCittb3Yg
bzcueHl6dywgdjEueHl6dw0KK3JldCANCisvLyBBcHByb3hpbWF0ZWx5IDkgaW5zdHJ1Y3Rpb24g
c2xvdHMgdXNlZA0KKyNlbmRpZg0KKw0KK2NvbnN0IEJZVEUgZ19QU19DbGVhck11bHRpcGxlW10g
PQ0KK3sNCisgICAgIDY4LCAgODgsICA2NiwgIDY3LCAgOTIsICA1NCwgDQorICAgIDEyMCwgMTA1
LCAxNjYsIDE5NiwgMTMyLCAxNTgsIA0KKyAgICAyMDksICAzMywgMTg1LCAxMjIsICAgOCwgMTg5
LCANCisgICAgMTQ1LCAxMTQsICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgICA4OCwgICAzLCAg
IDAsICAgMCwgICA1LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDUyLCAgIDAsICAgMCwgICAwLCAN
CisgICAgMTQwLCAgIDAsICAgMCwgICAwLCAyMjQsICAgMCwgDQorICAgICAgMCwgICAwLCAxODgs
ICAgMSwgICAwLCAgIDAsIA0KKyAgICAyMjAsICAgMiwgICAwLCAgIDAsICA4MiwgIDY4LCANCisg
ICAgIDY5LCAgNzAsICA4MCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAg
IDI4LCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgDQorICAgIDI1NSwgMjU1LCAgIDAsICAgMSwg
ICAwLCAgIDAsIA0KKyAgICAgMjgsICAgMCwgICAwLCAgIDAsICA3NywgMTA1LCANCisgICAgIDk5
LCAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgDQorICAgIDExNiwgIDMyLCAgNDAsICA4MiwgIDQx
LCAgMzIsIA0KKyAgICAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCANCisgICAgMTA0LCAg
OTcsIDEwMCwgMTAxLCAxMTQsICAzMiwgDQorICAgICA2NywgMTExLCAxMDksIDExMiwgMTA1LCAx
MDgsIA0KKyAgICAxMDEsIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCANCisgICAgIDQ4LCAgNDYs
ICA1NywgIDUwLCAgNDgsICA0OCwgDQorICAgICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIs
IA0KKyAgICAgIDAsIDE3MSwgIDczLCAgODMsICA3MSwgIDc4LCANCisgICAgIDc2LCAgIDAsICAg
MCwgICAwLCAgIDIsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAgNTYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMSwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgIDE1LCAgIDAsICAgMCwgICAwLCANCisgICAgIDY4LCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
IDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAxNSwgIDE1LCAg
IDAsICAgMCwgDQorICAgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsIA0KKyAgICAgNzMs
ICA4NCwgIDczLCAgNzksICA3OCwgICAwLCANCisgICAgIDY3LCAgNzksICA3NiwgIDc5LCAgODIs
ICAgMCwgDQorICAgIDE3MSwgMTcxLCAgNzksICA4MywgIDcxLCAgNzgsIA0KKyAgICAyMTIsICAg
MCwgICAwLCAgIDAsICAgOCwgICAwLCANCisgICAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAg
MCwgDQorICAgIDIwMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMCwgICAwLCAgMTUsICAgMCwgICAwLCAgIDAsIA0KKyAgICAyMDAsICAgMCwgICAw
LCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQor
ICAgICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDE1LCAg
IDAsICAgMCwgICAwLCANCisgICAgMjAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgDQorICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDMsICAgMCwgICAwLCAgIDAs
ICAgMiwgICAwLCANCisgICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQorICAgIDIw
MCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgDQorICAgICAgMCwg
ICAwLCAgMTUsICAgMCwgICAwLCAgIDAsIA0KKyAgICAyMDAsICAgMCwgICAwLCAgIDAsICAgNCwg
ICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMywgICAw
LCAgIDAsICAgMCwgICA0LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDE1LCAgIDAsICAgMCwgICAw
LCANCisgICAgMjAwLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgDQorICAgICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDMsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAN
CisgICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQorICAgIDIwMCwgICAwLCAgIDAs
ICAgMCwgICA2LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisg
ICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgDQorICAgICAgMCwgICAwLCAgMTUsICAg
MCwgICAwLCAgIDAsIA0KKyAgICAyMDAsICAgMCwgICAwLCAgIDAsICAgNywgICAwLCANCisgICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMywgICAwLCAgIDAsICAgMCwg
ICA3LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDE1LCAgIDAsICAgMCwgICAwLCANCisgICAgIDgz
LCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgDQorICAgICA3MSwgIDY5LCAgODQsICAgMCwgMTcx
LCAxNzEsIA0KKyAgICAgODMsICA3MiwgIDY4LCAgODIsICAyNCwgICAxLCANCisgICAgICAwLCAg
IDAsICA2NCwgICAwLCAgIDAsICAgMCwgDQorICAgICA3MCwgICAwLCAgIDAsICAgMCwgIDk4LCAg
MTYsIA0KKyAgICAgIDAsICAgMywgMjQyLCAgMTYsICAxNiwgICAwLCANCisgICAgICAxLCAgIDAs
ICAgMCwgICAwLCAxMDEsICAgMCwgDQorICAgICAgMCwgICAzLCAyNDIsICAzMiwgIDE2LCAgIDAs
IA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsIDEwMSwgICAwLCANCisgICAgICAwLCAgIDMsIDI0
MiwgIDMyLCAgMTYsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgMTAxLCAgIDAsIA0K
KyAgICAgIDAsICAgMywgMjQyLCAgMzIsICAxNiwgICAwLCANCisgICAgICAyLCAgIDAsICAgMCwg
ICAwLCAxMDEsICAgMCwgDQorICAgICAgMCwgICAzLCAyNDIsICAzMiwgIDE2LCAgIDAsIA0KKyAg
ICAgIDMsICAgMCwgICAwLCAgIDAsIDEwMSwgICAwLCANCisgICAgICAwLCAgIDMsIDI0MiwgIDMy
LCAgMTYsICAgMCwgDQorICAgICAgNCwgICAwLCAgIDAsICAgMCwgMTAxLCAgIDAsIA0KKyAgICAg
IDAsICAgMywgMjQyLCAgMzIsICAxNiwgICAwLCANCisgICAgICA1LCAgIDAsICAgMCwgICAwLCAx
MDEsICAgMCwgDQorICAgICAgMCwgICAzLCAyNDIsICAzMiwgIDE2LCAgIDAsIA0KKyAgICAgIDYs
ICAgMCwgICAwLCAgIDAsIDEwMSwgICAwLCANCisgICAgICAwLCAgIDMsIDI0MiwgIDMyLCAgMTYs
ICAgMCwgDQorICAgICAgNywgICAwLCAgIDAsICAgMCwgIDU0LCAgIDAsIA0KKyAgICAgIDAsICAg
NSwgMjQyLCAgMzIsICAxNiwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgNzAsICAz
MCwgDQorICAgICAxNiwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgNTQsICAgMCwg
ICAwLCAgIDUsIDI0MiwgIDMyLCANCisgICAgIDE2LCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwg
DQorICAgICA3MCwgIDMwLCAgMTYsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDU0
LCAgIDAsICAgMCwgICA1LCANCisgICAgMjQyLCAgMzIsICAxNiwgICAwLCAgIDIsICAgMCwgDQor
ICAgICAgMCwgICAwLCAgNzAsICAzMCwgIDE2LCAgIDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAg
IDAsICA1NCwgICAwLCANCisgICAgICAwLCAgIDUsIDI0MiwgIDMyLCAgMTYsICAgMCwgDQorICAg
ICAgMywgICAwLCAgIDAsICAgMCwgIDcwLCAgMzAsIA0KKyAgICAgMTYsICAgMCwgICAxLCAgIDAs
ICAgMCwgICAwLCANCisgICAgIDU0LCAgIDAsICAgMCwgICA1LCAyNDIsICAzMiwgDQorICAgICAx
NiwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgNzAsICAzMCwgIDE2LCAgIDAsICAg
MSwgICAwLCANCisgICAgICAwLCAgIDAsICA1NCwgICAwLCAgIDAsICAgNSwgDQorICAgIDI0Miwg
IDMyLCAgMTYsICAgMCwgICA1LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDcwLCAgMzAsICAxNiwg
ICAwLCANCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgNTQsICAgMCwgDQorICAgICAgMCwgICA1
LCAyNDIsICAzMiwgIDE2LCAgIDAsIA0KKyAgICAgIDYsICAgMCwgICAwLCAgIDAsICA3MCwgIDMw
LCANCisgICAgIDE2LCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgICA1NCwgICAwLCAg
IDAsICAgNSwgMjQyLCAgMzIsIA0KKyAgICAgMTYsICAgMCwgICA3LCAgIDAsICAgMCwgICAwLCAN
CisgICAgIDcwLCAgMzAsICAxNiwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAwLCAgNjIs
ICAgMCwgICAwLCAgIDEsIA0KKyAgICAgODMsICA4NCwgIDY1LCAgODQsIDExNiwgICAwLCANCisg
ICAgICAwLCAgIDAsICAgOSwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICA5LCAgIDAsICAgMCwgICAwLCANCisgICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgOSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMA0KK307DQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9z
aGFkZXJzL2NvbXBpbGVkL2NsZWFyc2luZ2xlMTFwcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyc2lu
Z2xlMTFwcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg3Y2IwODdjNzUwNTI2MmM4MDdiM2Y0YTUxNzFhMWQ4MGU2
MjFmNWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJzaW5nbGUxMXBzLmgK
QEAgLTAsMCArMSwxMTAgQEAKKyNpZiAwDQorLy8NCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0
IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQNCisvLw0KKy8vDQorLy8v
DQorLy8NCisvLyBJbnB1dCBzaWduYXR1cmU6DQorLy8NCisvLyBOYW1lICAgICAgICAgICAgICAg
ICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAgIFVzZWQNCisvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLSAt
LS0tLS0NCisvLyBTVl9Qb3NpdGlvbiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAg
ICBQT1MgICBmbG9hdCAgICAgICANCisvLyBDT0xPUiAgICAgICAgICAgICAgICAgICAgMCAgIHh5
encgICAgICAgIDEgICAgIE5PTkUgICBmbG9hdCAgIHh5encNCisvLw0KKy8vDQorLy8gT3V0cHV0
IHNpZ25hdHVyZToNCisvLw0KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBS
ZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
IC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0tLQ0KKy8vIFNWX1Rh
cmdldCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIGZsb2F0ICAg
eHl6dw0KKy8vDQorcHNfNF8wDQorZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eXp3DQorZGNsX291
dHB1dCBvMC54eXp3DQorbW92IG8wLnh5encsIHYxLnh5encNCityZXQgDQorLy8gQXBwcm94aW1h
dGVseSAyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCisjZW5kaWYNCisNCitjb25zdCBCWVRFIGdf
UFNfQ2xlYXJTaW5nbGVbXSA9DQorew0KKyAgICAgNjgsICA4OCwgIDY2LCAgNjcsICAxMywgMTUy
LCANCisgICAgIDMyLCAgNDksIDIyMiwgMjM2LCAgOTIsICAyMCwgDQorICAgIDE4OCwgIDcxLCAg
ODgsICA0NiwgMTYzLCAyNDEsIA0KKyAgICAxODgsIDIzOCwgICAxLCAgIDAsICAgMCwgICAwLCAN
CisgICAgMjA4LCAgIDEsICAgMCwgICAwLCAgIDUsICAgMCwgDQorICAgICAgMCwgICAwLCAgNTIs
ICAgMCwgICAwLCAgIDAsIA0KKyAgICAxNDAsICAgMCwgICAwLCAgIDAsIDIyNCwgICAwLCANCisg
ICAgICAwLCAgIDAsICAyMCwgICAxLCAgIDAsICAgMCwgDQorICAgICA4NCwgICAxLCAgIDAsICAg
MCwgIDgyLCAgNjgsIA0KKyAgICAgNjksICA3MCwgIDgwLCAgIDAsICAgMCwgICAwLCANCisgICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgMjgsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCANCisgICAgMjU1
LCAyNTUsICAgMCwgICAxLCAgIDAsICAgMCwgDQorICAgICAyOCwgICAwLCAgIDAsICAgMCwgIDc3
LCAxMDUsIA0KKyAgICAgOTksIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCANCisgICAgMTE2LCAg
MzIsICA0MCwgIDgyLCAgNDEsICAzMiwgDQorICAgICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAg
ODMsIA0KKyAgICAxMDQsICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCANCisgICAgIDY3LCAxMTEs
IDEwOSwgMTEyLCAxMDUsIDEwOCwgDQorICAgIDEwMSwgMTE0LCAgMzIsICA1NywgIDQ2LCAgNTEs
IA0KKyAgICAgNDgsICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4LCANCisgICAgIDQ2LCAgNDksICA1
NCwgIDUxLCAgNTYsICA1MiwgDQorICAgICAgMCwgMTcxLCAgNzMsICA4MywgIDcxLCAgNzgsIA0K
KyAgICAgNzYsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCANCisgICAgICAwLCAgIDAsICAgOCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICA1NiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCisgICAgICAzLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgMTUsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
NjgsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgIDE1LCAgMTUsICAgMCwgICAwLCANCisgICAgIDgzLCAgODYsICA5NSwgIDgwLCAxMTEs
IDExNSwgDQorICAgIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCAgIDAsIA0KKyAgICAgNjcsICA3
OSwgIDc2LCAgNzksICA4MiwgICAwLCANCisgICAgMTcxLCAxNzEsICA3OSwgIDgzLCAgNzEsICA3
OCwgDQorICAgICA0NCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwg
ICA4LCAgIDAsICAgMCwgICAwLCANCisgICAgIDMyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDMsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQor
ICAgICA4MywgIDg2LCAgOTUsICA4NCwgIDk3LCAxMTQsIA0KKyAgICAxMDMsIDEwMSwgMTE2LCAg
IDAsIDE3MSwgMTcxLCANCisgICAgIDgzLCAgNzIsICA2OCwgIDgyLCAgNTYsICAgMCwgDQorICAg
ICAgMCwgICAwLCAgNjQsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgMTQsICAgMCwgICAwLCAgIDAs
ICA5OCwgIDE2LCANCisgICAgICAwLCAgIDMsIDI0MiwgIDE2LCAgMTYsICAgMCwgDQorICAgICAg
MSwgICAwLCAgIDAsICAgMCwgMTAxLCAgIDAsIA0KKyAgICAgIDAsICAgMywgMjQyLCAgMzIsICAx
NiwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgNTQsICAgMCwgDQorICAgICAgMCwg
ICA1LCAyNDIsICAzMiwgIDE2LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICA3MCwg
IDMwLCANCisgICAgIDE2LCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgICA2MiwgICAw
LCAgIDAsICAgMSwgIDgzLCAgODQsIA0KKyAgICAgNjUsICA4NCwgMTE2LCAgIDAsICAgMCwgICAw
LCANCisgICAgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAN
CisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAs
ICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisg
ICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwDQorfTsNCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRl
cnMvY29tcGlsZWQvcGFzc3Rocm91Z2gxMXZzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2gx
MXZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYmYzOTUyMTZlOTkyMGZjY2EwMzJiMWVhYzg1M2U4NWFiOGIxYjY2
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaDExdnMuaApAQCAt
MCwwICsxLDEzNCBAQAorI2lmIDANCisvLw0KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIp
IEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NA0KKy8vDQorLy8NCisvLy8NCisv
Lw0KKy8vIElucHV0IHNpZ25hdHVyZToNCisvLw0KKy8vIE5hbWUgICAgICAgICAgICAgICAgIElu
ZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KKy8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0t
LQ0KKy8vIFBPU0lUSU9OICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMCAgICAgTk9O
RSAgIGZsb2F0ICAgeHkgIA0KKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAg
ICAgICAgMSAgICAgTk9ORSAgIGZsb2F0ICAgeHkgIA0KKy8vDQorLy8NCisvLyBPdXRwdXQgc2ln
bmF0dXJlOg0KKy8vDQorLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lz
dGVyIFN5c1ZhbHVlICBGb3JtYXQgICBVc2VkDQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0t
LS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tDQorLy8gU1ZfUE9TSVRJ
T04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICAgZmxvYXQgICB4eXp3
DQorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05F
ICAgZmxvYXQgICB4eSAgDQorLy8NCit2c180XzANCitkY2xfaW5wdXQgdjAueHkNCitkY2xfaW5w
dXQgdjEueHkNCitkY2xfb3V0cHV0X3NpdiBvMC54eXp3LCBwb3NpdGlvbg0KK2RjbF9vdXRwdXQg
bzEueHkNCittb3YgbzAueHksIHYwLnh5eHgNCittb3YgbzAuencsIGwoMCwwLDAsMS4wMDAwMDAp
DQorbW92IG8xLnh5LCB2MS54eXh4DQorcmV0IA0KKy8vIEFwcHJveGltYXRlbHkgNCBpbnN0cnVj
dGlvbiBzbG90cyB1c2VkDQorI2VuZGlmDQorDQorY29uc3QgQllURSBnX1ZTX1Bhc3N0aHJvdWdo
W10gPQ0KK3sNCisgICAgIDY4LCAgODgsICA2NiwgIDY3LCAxOTcsIDIxNCwgDQorICAgIDE4NCwg
IDg1LCAyNDAsICA5NCwgIDcxLCAgNDgsIA0KKyAgICAxNjUsICAzNCwgMTQyLCAyMzMsICAgMCwg
MTM1LCANCisgICAgMTkzLCAxNzgsICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgICA2OCwgICAy
LCAgIDAsICAgMCwgICA1LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDUyLCAgIDAsICAgMCwgICAw
LCANCisgICAgMTQwLCAgIDAsICAgMCwgICAwLCAyMjQsICAgMCwgDQorICAgICAgMCwgICAwLCAg
NTYsICAgMSwgICAwLCAgIDAsIA0KKyAgICAyMDAsICAgMSwgICAwLCAgIDAsICA4MiwgIDY4LCAN
CisgICAgIDY5LCAgNzAsICA4MCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisg
ICAgIDI4LCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgDQorICAgIDI1NCwgMjU1LCAgIDAsICAg
MSwgICAwLCAgIDAsIA0KKyAgICAgMjgsICAgMCwgICAwLCAgIDAsICA3NywgMTA1LCANCisgICAg
IDk5LCAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgDQorICAgIDExNiwgIDMyLCAgNDAsICA4Miwg
IDQxLCAgMzIsIA0KKyAgICAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCANCisgICAgMTA0
LCAgOTcsIDEwMCwgMTAxLCAxMTQsICAzMiwgDQorICAgICA2NywgMTExLCAxMDksIDExMiwgMTA1
LCAxMDgsIA0KKyAgICAxMDEsIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCANCisgICAgIDQ4LCAg
NDYsICA1NywgIDUwLCAgNDgsICA0OCwgDQorICAgICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAg
NTIsIA0KKyAgICAgIDAsIDE3MSwgIDczLCAgODMsICA3MSwgIDc4LCANCisgICAgIDc2LCAgIDAs
ICAgMCwgICAwLCAgIDIsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgNTYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgICAzLCAgIDMsICAgMCwgICAwLCANCisgICAgIDY1LCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAgMywgICAz
LCAgIDAsICAgMCwgDQorICAgICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsIA0KKyAgICAg
NzksICA3OCwgICAwLCAgODQsICA2OSwgIDg4LCANCisgICAgIDY3LCAgNzksICA3OSwgIDgyLCAg
NjgsICAgMCwgDQorICAgIDE3MSwgMTcxLCAgNzksICA4MywgIDcxLCAgNzgsIA0KKyAgICAgODAs
ICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCANCisgICAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICA1NiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAxLCAgIDAsICAgMCwgICAwLCANCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwLCAgMTUsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgNjgsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAz
LCAgMTIsICAgMCwgICAwLCANCisgICAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgDQor
ICAgICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgIDAsIA0KKyAgICAgODQsICA2OSwgIDg4LCAg
NjcsICA3OSwgIDc5LCANCisgICAgIDgyLCAgNjgsICAgMCwgMTcxLCAxNzEsIDE3MSwgDQorICAg
ICA4MywgIDcyLCAgNjgsICA4MiwgMTM2LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDY0LCAgIDAs
ICAgMSwgICAwLCANCisgICAgIDM0LCAgIDAsICAgMCwgICAwLCAgOTUsICAgMCwgDQorICAgICAg
MCwgICAzLCAgNTAsICAxNiwgIDE2LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICA5
NSwgICAwLCANCisgICAgICAwLCAgIDMsICA1MCwgIDE2LCAgMTYsICAgMCwgDQorICAgICAgMSwg
ICAwLCAgIDAsICAgMCwgMTAzLCAgIDAsIA0KKyAgICAgIDAsICAgNCwgMjQyLCAgMzIsICAxNiwg
ICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAw
LCAxMDEsICAgMCwgICAwLCAgIDMsIA0KKyAgICAgNTAsICAzMiwgIDE2LCAgIDAsICAgMSwgICAw
LCANCisgICAgICAwLCAgIDAsICA1NCwgICAwLCAgIDAsICAgNSwgDQorICAgICA1MCwgIDMyLCAg
MTYsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDcwLCAgMTYsICAxNiwgICAwLCAN
CisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgNTQsICAgMCwgDQorICAgICAgMCwgICA4LCAxOTQs
ICAzMiwgIDE2LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgIDY0LCANCisg
ICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsIDEyOCwgIDYzLCANCisgICAg
IDU0LCAgIDAsICAgMCwgICA1LCAgNTAsICAzMiwgDQorICAgICAxNiwgICAwLCAgIDEsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgNzAsICAxNiwgIDE2LCAgIDAsICAgMSwgICAwLCANCisgICAgICAw
LCAgIDAsICA2MiwgICAwLCAgIDAsICAgMSwgDQorICAgICA4MywgIDg0LCAgNjUsICA4NCwgMTE2
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICA0LCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwDQorfTsN
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hsdW0xMXBzLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29t
cGlsZWQvcGFzc3Rocm91Z2hsdW0xMXBzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2YwN2I0YTNjYmQ4OTY1ZDE4
Y2I0OGQwMThlNDEyZDg0MjQyMDg5NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9w
YXNzdGhyb3VnaGx1bTExcHMuaApAQCAtMCwwICsxLDE1MiBAQAorI2lmIDANCisvLw0KKy8vIEdl
bmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4x
NjM4NA0KKy8vDQorLy8NCisvLy8NCisvLyBSZXNvdXJjZSBCaW5kaW5nczoNCisvLw0KKy8vIE5h
bWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBE
aW0gU2xvdCBFbGVtZW50cw0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0t
LS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KKy8vIFNhbXBsZXIgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAg
ICAgICAgMQ0KKy8vIFRleHR1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBm
bG9hdDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQ0KKy8vDQorLy8NCisvLw0KKy8vIElucHV0
IHNpZ25hdHVyZToNCisvLw0KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBS
ZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
IC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0tLQ0KKy8vIFNWX1BP
U0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgIGZsb2F0ICAg
ICAgIA0KKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAg
Tk9ORSAgIGZsb2F0ICAgeHkgIA0KKy8vDQorLy8NCisvLyBPdXRwdXQgc2lnbmF0dXJlOg0KKy8v
DQorLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVl
ICBGb3JtYXQgICBVc2VkDQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0t
LS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tDQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAg
ICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgZmxvYXQgICB4eXp3DQorLy8NCitwc180
XzANCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQorZGNsX3Jlc291cmNlX3RleHR1cmUy
ZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQorZGNsX2lucHV0X3BzIGxpbmVhciB2MS54
eQ0KK2RjbF9vdXRwdXQgbzAueHl6dw0KK2RjbF90ZW1wcyAxDQorc2FtcGxlIHIwLnh5encsIHYx
Lnh5eHgsIHQwLnh5encsIHMwDQorbW92IG8wLnh5eiwgcjAueHh4eA0KK21vdiBvMC53LCBsKDEu
MDAwMDAwKQ0KK3JldCANCisvLyBBcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNl
ZA0KKyNlbmRpZg0KKw0KK2NvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaEx1bVtdID0NCit7DQor
ICAgICA2OCwgIDg4LCAgNjYsICA2NywgMjQ0LCAgIDksIA0KKyAgICAyMTMsIDE0NywgIDE5LCAy
NDksICA3MCwgMTExLCANCisgICAgMTU3LCAgOTIsIDI0MywgMTYwLCAgNDAsIDE0NCwgDQorICAg
IDIzOCwgMjIxLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KKyAgICAxMjgsICAgMiwgICAwLCAgIDAs
ICAgNSwgICAwLCANCisgICAgICAwLCAgIDAsICA1MiwgICAwLCAgIDAsICAgMCwgDQorICAgIDIy
MCwgICAwLCAgIDAsICAgMCwgIDUyLCAgIDEsIA0KKyAgICAgIDAsICAgMCwgMTA0LCAgIDEsICAg
MCwgICAwLCANCisgICAgICA0LCAgIDIsICAgMCwgICAwLCAgODIsICA2OCwgDQorICAgICA2OSwg
IDcwLCAxNjAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCANCisgICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgDQorICAgICAyOCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDQsIA0KKyAgICAyNTUsIDI1NSwgICAwLCAgIDEsICAgMCwgICAw
LCANCisgICAgMTA4LCAgIDAsICAgMCwgICAwLCAgOTIsICAgMCwgDQorICAgICAgMCwgICAwLCAg
IDMsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAN
CisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAs
ICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCisg
ICAgMTAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDUsICAg
MCwgICAwLCAgIDAsIA0KKyAgICAgIDQsICAgMCwgICAwLCAgIDAsIDI1NSwgMjU1LCANCisgICAg
MjU1LCAyNTUsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwg
IDEzLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDgzLCAgOTcsIDEwOSwgMTEyLCANCisgICAgMTA4
LCAxMDEsIDExNCwgICAwLCAgODQsIDEwMSwgDQorICAgIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAx
LCAgIDAsIA0KKyAgICAgNzcsIDEwNSwgIDk5LCAxMTQsIDExMSwgMTE1LCANCisgICAgMTExLCAx
MDIsIDExNiwgIDMyLCAgNDAsICA4MiwgDQorICAgICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAg
NzYsIA0KKyAgICAgMzIsICA4MywgMTA0LCAgOTcsIDEwMCwgMTAxLCANCisgICAgMTE0LCAgMzIs
ICA2NywgMTExLCAxMDksIDExMiwgDQorICAgIDEwNSwgMTA4LCAxMDEsIDExNCwgIDMyLCAgNTcs
IA0KKyAgICAgNDYsICA1MSwgIDQ4LCAgNDYsICA1NywgIDUwLCANCisgICAgIDQ4LCAgNDgsICA0
NiwgIDQ5LCAgNTQsICA1MSwgDQorICAgICA1NiwgIDUyLCAgIDAsIDE3MSwgIDczLCAgODMsIA0K
KyAgICAgNzEsICA3OCwgIDgwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAyLCAgIDAsICAgMCwg
ICAwLCAgIDgsICAgMCwgDQorICAgICAgMCwgICAwLCAgNTYsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAgMywgICAw
LCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDE1LCAgIDAsIA0KKyAgICAg
IDAsICAgMCwgIDY4LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDEs
ICAgMCwgICAwLCAgIDAsICAgMywgICAzLCANCisgICAgICAwLCAgIDAsICA4MywgIDg2LCAgOTUs
ICA4MCwgDQorICAgICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksIA0KKyAgICAgNzgsICAg
MCwgIDg0LCAgNjksICA4OCwgIDY3LCANCisgICAgIDc5LCAgNzksICA4MiwgIDY4LCAgIDAsIDE3
MSwgDQorICAgIDE3MSwgMTcxLCAgNzksICA4MywgIDcxLCAgNzgsIA0KKyAgICAgNDQsICAgMCwg
ICAwLCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwg
DQorICAgICAzMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQor
ICAgICAgMCwgICAwLCAgMTUsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgODMsICA4NiwgIDk1LCAg
ODQsICA2NSwgIDgyLCANCisgICAgIDcxLCAgNjksICA4NCwgICAwLCAxNzEsIDE3MSwgDQorICAg
ICA4MywgIDcyLCAgNjgsICA4MiwgMTQ4LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDY0LCAgIDAs
ICAgMCwgICAwLCANCisgICAgIDM3LCAgIDAsICAgMCwgICAwLCAgOTAsICAgMCwgDQorICAgICAg
MCwgICAzLCAgIDAsICA5NiwgIDE2LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICA4
OCwgIDI0LCANCisgICAgICAwLCAgIDQsICAgMCwgMTEyLCAgMTYsICAgMCwgDQorICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgIDg1LCAgODUsIA0KKyAgICAgIDAsICAgMCwgIDk4LCAgMTYsICAgMCwg
ICAzLCANCisgICAgIDUwLCAgMTYsICAxNiwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAw
LCAxMDEsICAgMCwgICAwLCAgIDMsIA0KKyAgICAyNDIsICAzMiwgIDE2LCAgIDAsICAgMCwgICAw
LCANCisgICAgICAwLCAgIDAsIDEwNCwgICAwLCAgIDAsICAgMiwgDQorICAgICAgMSwgICAwLCAg
IDAsICAgMCwgIDY5LCAgIDAsIA0KKyAgICAgIDAsICAgOSwgMjQyLCAgIDAsICAxNiwgICAwLCAN
CisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgNzAsICAxNiwgDQorICAgICAxNiwgICAwLCAgIDEs
ICAgMCwgICAwLCAgIDAsIA0KKyAgICAgNzAsIDEyNiwgIDE2LCAgIDAsICAgMCwgICAwLCANCisg
ICAgICAwLCAgIDAsICAgMCwgIDk2LCAgMTYsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAg
MCwgIDU0LCAgIDAsIA0KKyAgICAgIDAsICAgNSwgMTE0LCAgMzIsICAxNiwgICAwLCANCisgICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgDQorICAgICAxNiwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgNTQsICAgMCwgICAwLCAgIDUsIDEzMCwgIDMyLCANCisgICAgIDE2
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMSwgIDY0LCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAxMjgsICA2MywgIDYyLCAgIDAsICAgMCwgICAxLCANCisgICAgIDgzLCAg
ODQsICA2NSwgIDg0LCAxMTYsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAs
ICAgMiwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAxLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
IDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDANCit9Ow0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaGx1
bWFscGhhMTFwcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdobHVtYWxwaGExMXBzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYjU1ZDYwZWIzYjIyNmRkMGU3ZGFlNDhiZWQ1NTQ0N2E5OGZiMTM0MQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaGx1bWFscGhhMTFwcy5oCkBAIC0w
LDAgKzEsMTQ4IEBACisjaWYgMA0KKy8vDQorLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikg
SExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0DQorLy8NCisvLw0KKy8vLw0KKy8v
IFJlc291cmNlIEJpbmRpbmdzOg0KKy8vDQorLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQorLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0t
LSAtLS0tIC0tLS0tLS0tDQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNh
bXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQorLy8gVGV4dHVyZSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAwICAg
ICAgICAxDQorLy8NCisvLw0KKy8vDQorLy8gSW5wdXQgc2lnbmF0dXJlOg0KKy8vDQorLy8gTmFt
ZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlICBGb3JtYXQg
ICBVc2VkDQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0t
LS0tLS0tIC0tLS0tLS0gLS0tLS0tDQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4
eXp3ICAgICAgICAwICAgICAgUE9TICAgZmxvYXQgICAgICAgDQorLy8gVEVYQ09PUkQgICAgICAg
ICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICAgZmxvYXQgICB4eSAgDQorLy8N
CisvLw0KKy8vIE91dHB1dCBzaWduYXR1cmU6DQorLy8NCisvLyBOYW1lICAgICAgICAgICAgICAg
ICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAgIFVzZWQNCisvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLSAt
LS0tLS0NCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBU
QVJHRVQgICBmbG9hdCAgIHh5encNCisvLw0KK3BzXzRfMA0KK2RjbF9zYW1wbGVyIHMwLCBtb2Rl
X2RlZmF1bHQNCitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9h
dCkgdDANCitkY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5DQorZGNsX291dHB1dCBvMC54eXp3DQor
ZGNsX3RlbXBzIDENCitzYW1wbGUgcjAueHl6dywgdjEueHl4eCwgdDAueHl6dywgczANCittb3Yg
bzAueHl6dywgcjAueHh4dw0KK3JldCANCisvLyBBcHByb3hpbWF0ZWx5IDMgaW5zdHJ1Y3Rpb24g
c2xvdHMgdXNlZA0KKyNlbmRpZg0KKw0KK2NvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaEx1bUFs
cGhhW10gPQ0KK3sNCisgICAgIDY4LCAgODgsICA2NiwgIDY3LCAxODUsICAxNCwgDQorICAgICA4
NCwgMjIzLCAxOTIsICA0MiwgIDE2LCAxMzMsIA0KKyAgICAgNDYsIDEwMCwgIDk1LCAyMjEsIDE4
MywgIDk3LCANCisgICAgMTkyLCAgMjMsICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgIDEwOCwg
ICAyLCAgIDAsICAgMCwgICA1LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDUyLCAgIDAsICAgMCwg
ICAwLCANCisgICAgMjIwLCAgIDAsICAgMCwgICAwLCAgNTIsICAgMSwgDQorICAgICAgMCwgICAw
LCAxMDQsICAgMSwgICAwLCAgIDAsIA0KKyAgICAyNDAsICAgMSwgICAwLCAgIDAsICA4MiwgIDY4
LCANCisgICAgIDY5LCAgNzAsIDE2MCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAN
CisgICAgIDI4LCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgDQorICAgIDI1NSwgMjU1LCAgIDAs
ICAgMSwgICAwLCAgIDAsIA0KKyAgICAxMDgsICAgMCwgICAwLCAgIDAsICA5MiwgICAwLCANCisg
ICAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDEsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAxMDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCANCisgICAgICAw
LCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgDQorICAgICAgNCwgICAwLCAgIDAsICAgMCwgMjU1
LCAyNTUsIA0KKyAgICAyNTUsIDI1NSwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAxLCAg
IDAsICAgMCwgICAwLCAgMTMsICAgMCwgDQorICAgICAgMCwgICAwLCAgODMsICA5NywgMTA5LCAx
MTIsIA0KKyAgICAxMDgsIDEwMSwgMTE0LCAgIDAsICA4NCwgMTAxLCANCisgICAgMTIwLCAxMTYs
IDExNywgMTE0LCAxMDEsICAgMCwgDQorICAgICA3NywgMTA1LCAgOTksIDExNCwgMTExLCAxMTUs
IA0KKyAgICAxMTEsIDEwMiwgMTE2LCAgMzIsICA0MCwgIDgyLCANCisgICAgIDQxLCAgMzIsICA3
MiwgIDc2LCAgODMsICA3NiwgDQorICAgICAzMiwgIDgzLCAxMDQsICA5NywgMTAwLCAxMDEsIA0K
KyAgICAxMTQsICAzMiwgIDY3LCAxMTEsIDEwOSwgMTEyLCANCisgICAgMTA1LCAxMDgsIDEwMSwg
MTE0LCAgMzIsICA1NywgDQorICAgICA0NiwgIDUxLCAgNDgsICA0NiwgIDU3LCAgNTAsIA0KKyAg
ICAgNDgsICA0OCwgIDQ2LCAgNDksICA1NCwgIDUxLCANCisgICAgIDU2LCAgNTIsICAgMCwgMTcx
LCAgNzMsICA4MywgDQorICAgICA3MSwgIDc4LCAgODAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
IDIsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCANCisgICAgICAwLCAgIDAsICA1NiwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgMTUs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgNjgsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsIA0KKyAgICAgIDAsICAgMCwg
IDgzLCAgODYsICA5NSwgIDgwLCANCisgICAgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwg
DQorICAgICA3OCwgICAwLCAgODQsICA2OSwgIDg4LCAgNjcsIA0KKyAgICAgNzksICA3OSwgIDgy
LCAgNjgsICAgMCwgMTcxLCANCisgICAgMTcxLCAxNzEsICA3OSwgIDgzLCAgNzEsICA3OCwgDQor
ICAgICA0NCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICA4LCAg
IDAsICAgMCwgICAwLCANCisgICAgIDMyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDMsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQorICAgICA4
MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsIA0KKyAgICAgNzEsICA2OSwgIDg0LCAgIDAsIDE3
MSwgMTcxLCANCisgICAgIDgzLCAgNzIsICA2OCwgIDgyLCAxMjgsICAgMCwgDQorICAgICAgMCwg
ICAwLCAgNjQsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgMzIsICAgMCwgICAwLCAgIDAsICA5MCwg
ICAwLCANCisgICAgICAwLCAgIDMsICAgMCwgIDk2LCAgMTYsICAgMCwgDQorICAgICAgMCwgICAw
LCAgIDAsICAgMCwgIDg4LCAgMjQsIA0KKyAgICAgIDAsICAgNCwgICAwLCAxMTIsICAxNiwgICAw
LCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgODUsICA4NSwgDQorICAgICAgMCwgICAwLCAg
OTgsICAxNiwgICAwLCAgIDMsIA0KKyAgICAgNTAsICAxNiwgIDE2LCAgIDAsICAgMSwgICAwLCAN
CisgICAgICAwLCAgIDAsIDEwMSwgICAwLCAgIDAsICAgMywgDQorICAgIDI0MiwgIDMyLCAgMTYs
ICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgMTA0LCAgIDAsICAgMCwgICAyLCANCisg
ICAgICAxLCAgIDAsICAgMCwgICAwLCAgNjksICAgMCwgDQorICAgICAgMCwgICA5LCAyNDIsICAg
MCwgIDE2LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICA3MCwgIDE2LCANCisgICAg
IDE2LCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQorICAgICA3MCwgMTI2LCAgMTYsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgOTYsICAxNiwgICAwLCANCisgICAgICAw
LCAgIDAsICAgMCwgICAwLCAgNTQsICAgMCwgDQorICAgICAgMCwgICA1LCAyNDIsICAzMiwgIDE2
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgIDEyLCANCisgICAgIDE2LCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICA2MiwgICAwLCAgIDAsICAgMSwgIDgzLCAg
ODQsIA0KKyAgICAgNjUsICA4NCwgMTE2LCAgIDAsICAgMCwgICAwLCANCisgICAgICAzLCAgIDAs
ICAgMCwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMSwgICAw
LCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDIsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwDQorfTsNCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Ro
cm91Z2hyZ2IxMXBzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2IxMXBzLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNTg2Y2JjZjZiODJjZmQ5NjU4NjAxOGRlMTk5Nzk5NzM4NjE4NzczOQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYjExcHMuaApAQCAtMCwwICsxLDE1
MiBAQAorI2lmIDANCisvLw0KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hh
ZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NA0KKy8vDQorLy8NCisvLy8NCisvLyBSZXNvdXJj
ZSBCaW5kaW5nczoNCisvLw0KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KKy8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAt
LS0tLS0tLQ0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAg
ICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KKy8vIFRleHR1cmUgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQ0K
Ky8vDQorLy8NCisvLw0KKy8vIElucHV0IHNpZ25hdHVyZToNCisvLw0KKy8vIE5hbWUgICAgICAg
ICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0K
Ky8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAt
LS0tLS0tIC0tLS0tLQ0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAg
ICAgMCAgICAgIFBPUyAgIGZsb2F0ICAgICAgIA0KKy8vIFRFWENPT1JEICAgICAgICAgICAgICAg
ICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgIGZsb2F0ICAgeHkgIA0KKy8vDQorLy8NCisv
LyBPdXRwdXQgc2lnbmF0dXJlOg0KKy8vDQorLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXgg
ICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlICBGb3JtYXQgICBVc2VkDQorLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tDQor
Ly8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAg
ZmxvYXQgICB4eXp3DQorLy8NCitwc180XzANCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0
DQorZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQor
ZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQ0KK2RjbF9vdXRwdXQgbzAueHl6dw0KK2RjbF90ZW1w
cyAxDQorc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwDQorbW92IG8wLnh5eiwg
cjAueHl6eA0KK21vdiBvMC53LCBsKDEuMDAwMDAwKQ0KK3JldCANCisvLyBBcHByb3hpbWF0ZWx5
IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KKyNlbmRpZg0KKw0KK2NvbnN0IEJZVEUgZ19QU19Q
YXNzdGhyb3VnaFJHQltdID0NCit7DQorICAgICA2OCwgIDg4LCAgNjYsICA2NywgMTI1LCAxODYs
IA0KKyAgICAyNTAsIDI0MiwgMTEzLCAyNTUsICA1OSwgMjM5LCANCisgICAgMTE5LCAxNTgsIDIz
NywgIDc4LCAyMjAsICA0MywgDQorICAgIDE2MCwgIDQ2LCAgIDEsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAxMjgsICAgMiwgICAwLCAgIDAsICAgNSwgICAwLCANCisgICAgICAwLCAgIDAsICA1Miwg
ICAwLCAgIDAsICAgMCwgDQorICAgIDIyMCwgICAwLCAgIDAsICAgMCwgIDUyLCAgIDEsIA0KKyAg
ICAgIDAsICAgMCwgMTA0LCAgIDEsICAgMCwgICAwLCANCisgICAgICA0LCAgIDIsICAgMCwgICAw
LCAgODIsICA2OCwgDQorICAgICA2OSwgIDcwLCAxNjAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMiwgICAwLCAg
IDAsICAgMCwgDQorICAgICAyOCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsIA0KKyAgICAyNTUs
IDI1NSwgICAwLCAgIDEsICAgMCwgICAwLCANCisgICAgMTA4LCAgIDAsICAgMCwgICAwLCAgOTIs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwg
ICAxLCAgIDAsICAgMCwgICAwLCANCisgICAgMTAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDQsICAgMCwgICAw
LCAgIDAsIDI1NSwgMjU1LCANCisgICAgMjU1LCAyNTUsICAgMCwgICAwLCAgIDAsICAgMCwgDQor
ICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDEzLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDgzLCAg
OTcsIDEwOSwgMTEyLCANCisgICAgMTA4LCAxMDEsIDExNCwgICAwLCAgODQsIDEwMSwgDQorICAg
IDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCAgIDAsIA0KKyAgICAgNzcsIDEwNSwgIDk5LCAxMTQs
IDExMSwgMTE1LCANCisgICAgMTExLCAxMDIsIDExNiwgIDMyLCAgNDAsICA4MiwgDQorICAgICA0
MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsIA0KKyAgICAgMzIsICA4MywgMTA0LCAgOTcsIDEw
MCwgMTAxLCANCisgICAgMTE0LCAgMzIsICA2NywgMTExLCAxMDksIDExMiwgDQorICAgIDEwNSwg
MTA4LCAxMDEsIDExNCwgIDMyLCAgNTcsIA0KKyAgICAgNDYsICA1MSwgIDQ4LCAgNDYsICA1Nywg
IDUwLCANCisgICAgIDQ4LCAgNDgsICA0NiwgIDQ5LCAgNTQsICA1MSwgDQorICAgICA1NiwgIDUy
LCAgIDAsIDE3MSwgIDczLCAgODMsIA0KKyAgICAgNzEsICA3OCwgIDgwLCAgIDAsICAgMCwgICAw
LCANCisgICAgICAyLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgDQorICAgICAgMCwgICAwLCAg
NTYsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAN
CisgICAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAs
ICAgMCwgIDE1LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDY4LCAgIDAsICAgMCwgICAwLCANCisg
ICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDMsICAg
MCwgICAwLCAgIDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLCANCisgICAg
ICAwLCAgIDAsICA4MywgIDg2LCAgOTUsICA4MCwgDQorICAgICA3OSwgIDgzLCAgNzMsICA4NCwg
IDczLCAgNzksIA0KKyAgICAgNzgsICAgMCwgIDg0LCAgNjksICA4OCwgIDY3LCANCisgICAgIDc5
LCAgNzksICA4MiwgIDY4LCAgIDAsIDE3MSwgDQorICAgIDE3MSwgMTcxLCAgNzksICA4MywgIDcx
LCAgNzgsIA0KKyAgICAgNDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAg
IDAsICAgOCwgICAwLCAgIDAsICAgMCwgDQorICAgICAzMiwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAzLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgMTUsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCANCisgICAgIDcxLCAgNjksICA4
NCwgICAwLCAxNzEsIDE3MSwgDQorICAgICA4MywgIDcyLCAgNjgsICA4MiwgMTQ4LCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgIDY0LCAgIDAsICAgMCwgICAwLCANCisgICAgIDM3LCAgIDAsICAgMCwg
ICAwLCAgOTAsICAgMCwgDQorICAgICAgMCwgICAzLCAgIDAsICA5NiwgIDE2LCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICA4OCwgIDI0LCANCisgICAgICAwLCAgIDQsICAgMCwgMTEy
LCAgMTYsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDg1LCAgODUsIA0KKyAgICAg
IDAsICAgMCwgIDk4LCAgMTYsICAgMCwgICAzLCANCisgICAgIDUwLCAgMTYsICAxNiwgICAwLCAg
IDEsICAgMCwgDQorICAgICAgMCwgICAwLCAxMDEsICAgMCwgICAwLCAgIDMsIA0KKyAgICAyNDIs
ICAzMiwgIDE2LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsIDEwNCwgICAwLCAgIDAs
ICAgMiwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDY5LCAgIDAsIA0KKyAgICAgIDAsICAg
OSwgMjQyLCAgIDAsICAxNiwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgNzAsICAx
NiwgDQorICAgICAxNiwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgNzAsIDEyNiwg
IDE2LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgIDk2LCAgMTYsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDU0LCAgIDAsIA0KKyAgICAgIDAsICAgNSwgMTE0
LCAgMzIsICAxNiwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgNzAsICAgMiwgDQor
ICAgICAxNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgNTQsICAgMCwgICAwLCAg
IDUsIDEzMCwgIDMyLCANCisgICAgIDE2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAg
ICAgMSwgIDY0LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAxMjgsICA2MywgIDYyLCAgIDAs
ICAgMCwgICAxLCANCisgICAgIDgzLCAgODQsICA2NSwgIDg0LCAxMTYsICAgMCwgDQorICAgICAg
MCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCANCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAg
IDAsICAgMCwgICAxLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAN
CisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisg
ICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDANCit9Ow0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVy
cy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmExMXBzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91
Z2hyZ2JhMTFwcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ3ZDJhMjVhYmEwOTZjM2ZhYTM3ZGYyMWViNTNjOTg0
MzhkMDRiYTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2Jh
MTFwcy5oCkBAIC0wLDAgKzEsMTQxIEBACisjaWYgMA0KKy8vDQorLy8gR2VuZXJhdGVkIGJ5IE1p
Y3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0DQorLy8NCisv
Lw0KKy8vLw0KKy8vIFJlc291cmNlIEJpbmRpbmdzOg0KKy8vDQorLy8gTmFtZSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1l
bnRzDQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0t
LSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQorLy8g
VGV4dHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAg
ICAyZCAgICAwICAgICAgICAxDQorLy8NCisvLw0KKy8vDQorLy8gSW5wdXQgc2lnbmF0dXJlOg0K
Ky8vDQorLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1Zh
bHVlICBGb3JtYXQgICBVc2VkDQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0t
IC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tDQorLy8gU1ZfUE9TSVRJT04gICAgICAg
ICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICAgZmxvYXQgICAgICAgDQorLy8gVEVY
Q09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICAgZmxvYXQg
ICB4eSAgDQorLy8NCisvLw0KKy8vIE91dHB1dCBzaWduYXR1cmU6DQorLy8NCisvLyBOYW1lICAg
ICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAgIFVz
ZWQNCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0t
LS0gLS0tLS0tLSAtLS0tLS0NCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encg
ICAgICAgIDAgICBUQVJHRVQgICBmbG9hdCAgIHh5encNCisvLw0KK3BzXzRfMA0KK2RjbF9zYW1w
bGVyIHMwLCBtb2RlX2RlZmF1bHQNCitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkIChmbG9hdCxmbG9h
dCxmbG9hdCxmbG9hdCkgdDANCitkY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5DQorZGNsX291dHB1
dCBvMC54eXp3DQorc2FtcGxlIG8wLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwDQorcmV0IA0K
Ky8vIEFwcHJveGltYXRlbHkgMiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQorI2VuZGlmDQorDQor
Y29uc3QgQllURSBnX1BTX1Bhc3N0aHJvdWdoUkdCQVtdID0NCit7DQorICAgICA2OCwgIDg4LCAg
NjYsICA2NywgMTUxLCAxNTIsIA0KKyAgICAgIDgsIDEwMiwgMTc0LCAxMzUsICA3NiwgIDU3LCAN
CisgICAgMTAwLCAxNDYsICA1OSwgIDc0LCAyMDUsICAzNSwgDQorICAgIDIwNiwgIDIxLCAgIDEs
ICAgMCwgICAwLCAgIDAsIA0KKyAgICAgODAsICAgMiwgICAwLCAgIDAsICAgNSwgICAwLCANCisg
ICAgICAwLCAgIDAsICA1MiwgICAwLCAgIDAsICAgMCwgDQorICAgIDIyMCwgICAwLCAgIDAsICAg
MCwgIDUyLCAgIDEsIA0KKyAgICAgIDAsICAgMCwgMTA0LCAgIDEsICAgMCwgICAwLCANCisgICAg
MjEyLCAgIDEsICAgMCwgICAwLCAgODIsICA2OCwgDQorICAgICA2OSwgIDcwLCAxNjAsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAw
LCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgDQorICAgICAyOCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDQsIA0KKyAgICAyNTUsIDI1NSwgICAwLCAgIDEsICAgMCwgICAwLCANCisgICAgMTA4LCAg
IDAsICAgMCwgICAwLCAgOTIsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAs
IA0KKyAgICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCisgICAgMTAwLCAgIDAsICAg
MCwgICAwLCAgIDIsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsIA0K
KyAgICAgIDQsICAgMCwgICAwLCAgIDAsIDI1NSwgMjU1LCANCisgICAgMjU1LCAyNTUsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDEzLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgIDgzLCAgOTcsIDEwOSwgMTEyLCANCisgICAgMTA4LCAxMDEsIDExNCwgICAw
LCAgODQsIDEwMSwgDQorICAgIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCAgIDAsIA0KKyAgICAg
NzcsIDEwNSwgIDk5LCAxMTQsIDExMSwgMTE1LCANCisgICAgMTExLCAxMDIsIDExNiwgIDMyLCAg
NDAsICA4MiwgDQorICAgICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsIA0KKyAgICAgMzIs
ICA4MywgMTA0LCAgOTcsIDEwMCwgMTAxLCANCisgICAgMTE0LCAgMzIsICA2NywgMTExLCAxMDks
IDExMiwgDQorICAgIDEwNSwgMTA4LCAxMDEsIDExNCwgIDMyLCAgNTcsIA0KKyAgICAgNDYsICA1
MSwgIDQ4LCAgNDYsICA1NywgIDUwLCANCisgICAgIDQ4LCAgNDgsICA0NiwgIDQ5LCAgNTQsICA1
MSwgDQorICAgICA1NiwgIDUyLCAgIDAsIDE3MSwgIDczLCAgODMsIA0KKyAgICAgNzEsICA3OCwg
IDgwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAyLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwg
DQorICAgICAgMCwgICAwLCAgNTYsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgDQor
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDE1LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDY4LCAg
IDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAg
ICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAs
ICAgMywgICAzLCANCisgICAgICAwLCAgIDAsICA4MywgIDg2LCAgOTUsICA4MCwgDQorICAgICA3
OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksIA0KKyAgICAgNzgsICAgMCwgIDg0LCAgNjksICA4
OCwgIDY3LCANCisgICAgIDc5LCAgNzksICA4MiwgIDY4LCAgIDAsIDE3MSwgDQorICAgIDE3MSwg
MTcxLCAgNzksICA4MywgIDcxLCAgNzgsIA0KKyAgICAgNDQsICAgMCwgICAwLCAgIDAsICAgMSwg
ICAwLCANCisgICAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgDQorICAgICAzMiwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCANCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAg
MTUsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAN
CisgICAgIDcxLCAgNjksICA4NCwgICAwLCAxNzEsIDE3MSwgDQorICAgICA4MywgIDcyLCAgNjgs
ICA4MiwgMTAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgIDY0LCAgIDAsICAgMCwgICAwLCANCisg
ICAgIDI1LCAgIDAsICAgMCwgICAwLCAgOTAsICAgMCwgDQorICAgICAgMCwgICAzLCAgIDAsICA5
NiwgIDE2LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICA4OCwgIDI0LCANCisgICAg
ICAwLCAgIDQsICAgMCwgMTEyLCAgMTYsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwg
IDg1LCAgODUsIA0KKyAgICAgIDAsICAgMCwgIDk4LCAgMTYsICAgMCwgICAzLCANCisgICAgIDUw
LCAgMTYsICAxNiwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAwLCAxMDEsICAgMCwgICAw
LCAgIDMsIA0KKyAgICAyNDIsICAzMiwgIDE2LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAg
IDAsICA2OSwgICAwLCAgIDAsICAgOSwgDQorICAgIDI0MiwgIDMyLCAgMTYsICAgMCwgICAwLCAg
IDAsIA0KKyAgICAgIDAsICAgMCwgIDcwLCAgMTYsICAxNiwgICAwLCANCisgICAgICAxLCAgIDAs
ICAgMCwgICAwLCAgNzAsIDEyNiwgDQorICAgICAxNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KKyAgICAgIDAsICA5NiwgIDE2LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICA2
MiwgICAwLCAgIDAsICAgMSwgDQorICAgICA4MywgIDg0LCAgNjUsICA4NCwgMTE2LCAgIDAsIA0K
KyAgICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwDQorfTsNCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVycy5iYXQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVycy5iYXQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYjM1N2Q0ZWY1ODczZjE3NmZiMGY5MTZhNjRmOTUzNjI5YTY1M2E2MgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvc2hhZGVycy9nZW5lcmF0ZV9zaGFkZXJzLmJhdApAQCAtMCwwICsxLDE4IEBA
CitARUNITyBPRkYNCitSRU0NCitSRU0gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorUkVNIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCitS
RU0gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCitSRU0NCisNCitQQVRIICVQQVRIJTslUHJv
Z3JhbUZpbGVzKHg4NiklXFdpbmRvd3MgS2l0c1w4LjBcYmluXHg4NjslRFhTREtfRElSJVxVdGls
aXRpZXNcYmluXHg4Ng0KKw0KK2Z4YyAvRSBWU19QYXNzdGhyb3VnaCAvVCB2c180XzAgL0ZoIGNv
bXBpbGVkL3Bhc3N0aHJvdWdoMTF2cy5oIFBhc3N0aHJvdWdoMTEuaGxzbA0KK2Z4YyAvRSBQU19Q
YXNzdGhyb3VnaFJHQkEgL1QgcHNfNF8wIC9GaCBjb21waWxlZC9wYXNzdGhyb3VnaHJnYmExMXBz
LmggUGFzc3Rocm91Z2gxMS5obHNsDQorZnhjIC9FIFBTX1Bhc3N0aHJvdWdoUkdCIC9UIHBzXzRf
MCAvRmggY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2IxMXBzLmggUGFzc3Rocm91Z2gxMS5obHNsDQor
ZnhjIC9FIFBTX1Bhc3N0aHJvdWdoTHVtIC9UIHBzXzRfMCAvRmggY29tcGlsZWQvcGFzc3Rocm91
Z2hsdW0xMXBzLmggUGFzc3Rocm91Z2gxMS5obHNsDQorZnhjIC9FIFBTX1Bhc3N0aHJvdWdoTHVt
QWxwaGEgL1QgcHNfNF8wIC9GaCBjb21waWxlZC9wYXNzdGhyb3VnaGx1bWFscGhhMTFwcy5oIFBh
c3N0aHJvdWdoMTEuaGxzbA0KKw0KK2Z4YyAvRSBWU19DbGVhciAvVCB2c180XzAgL0ZoIGNvbXBp
bGVkL2NsZWFyMTF2cy5oIENsZWFyMTEuaGxzbA0KK2Z4YyAvRSBQU19DbGVhclNpbmdsZSAvVCBw
c180XzAgL0ZoIGNvbXBpbGVkL2NsZWFyc2luZ2xlMTFwcy5oIENsZWFyMTEuaGxzbA0KK2Z4YyAv
RSBQU19DbGVhck11bHRpcGxlIC9UIHBzXzRfMCAvRmggY29tcGlsZWQvY2xlYXJtdWx0aXBsZTEx
cHMuaCBDbGVhcjExLmhsc2wNCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvQmxpdC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvQmxpdC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDcz
ZGY2NDE4ZGRlYjFmZDY1ZTVjZTc5MDFkYzgwMjA2ZDI4ODViOAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CbGl0
LmNwcApAQCAtMCwwICsxLDU5NSBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisvLyBCbGl0LmNwcDogU3VyZmFjZSBjb3B5IHV0aWxpdHkgY2xhc3MuCisK
KyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CbGl0LmgiCisKKyNpbmNsdWRlICJs
aWJHTEVTdjIvbWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRl
cmVyOV91dGlscy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1RleHR1cmVT
dG9yYWdlOS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlclRhcmdl
dDkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVu
ZGVyYnVmZmVyLmgiCisKK25hbWVzcGFjZQoreworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvc3RhbmRhcmR2cy5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvZmxpcHl2cy5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hwcy5oIgor
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvbHVtaW5h
bmNlcHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBp
bGVkL2NvbXBvbmVudG1hc2twcy5oIgorCitjb25zdCBCWVRFKiBjb25zdCBnX3NoYWRlckNvZGVb
XSA9Cit7CisgICAgZ192czIwX3N0YW5kYXJkdnMsCisgICAgZ192czIwX2ZsaXB5dnMsCisgICAg
Z19wczIwX3Bhc3N0aHJvdWdocHMsCisgICAgZ19wczIwX2x1bWluYW5jZXBzLAorICAgIGdfcHMy
MF9jb21wb25lbnRtYXNrcHMKK307CisKK2NvbnN0IHNpemVfdCBnX3NoYWRlclNpemVbXSA9Cit7
CisgICAgc2l6ZW9mKGdfdnMyMF9zdGFuZGFyZHZzKSwKKyAgICBzaXplb2YoZ192czIwX2ZsaXB5
dnMpLAorICAgIHNpemVvZihnX3BzMjBfcGFzc3Rocm91Z2hwcyksCisgICAgc2l6ZW9mKGdfcHMy
MF9sdW1pbmFuY2VwcyksCisgICAgc2l6ZW9mKGdfcHMyMF9jb21wb25lbnRtYXNrcHMpCit9Owor
fQorCituYW1lc3BhY2UgcngKK3sKK0JsaXQ6OkJsaXQocng6OlJlbmRlcmVyOSAqcmVuZGVyZXIp
CisgIDogbVJlbmRlcmVyKHJlbmRlcmVyKSwgbVF1YWRWZXJ0ZXhCdWZmZXIoTlVMTCksIG1RdWFk
VmVydGV4RGVjbGFyYXRpb24oTlVMTCksIG1TYXZlZFN0YXRlQmxvY2soTlVMTCksIG1TYXZlZFJl
bmRlclRhcmdldChOVUxMKSwgbVNhdmVkRGVwdGhTdGVuY2lsKE5VTEwpCit7CisgICAgaW5pdEdl
b21ldHJ5KCk7CisgICAgbWVtc2V0KG1Db21waWxlZFNoYWRlcnMsIDAsIHNpemVvZihtQ29tcGls
ZWRTaGFkZXJzKSk7Cit9CisKK0JsaXQ6On5CbGl0KCkKK3sKKyAgICBpZiAobVNhdmVkU3RhdGVC
bG9jaykgbVNhdmVkU3RhdGVCbG9jay0+UmVsZWFzZSgpOworICAgIGlmIChtUXVhZFZlcnRleEJ1
ZmZlcikgbVF1YWRWZXJ0ZXhCdWZmZXItPlJlbGVhc2UoKTsKKyAgICBpZiAobVF1YWRWZXJ0ZXhE
ZWNsYXJhdGlvbikgbVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbi0+UmVsZWFzZSgpOworCisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBTSEFERVJfQ09VTlQ7IGkrKykKKyAgICB7CisgICAgICAgIGlmICht
Q29tcGlsZWRTaGFkZXJzW2ldKQorICAgICAgICB7CisgICAgICAgICAgICBtQ29tcGlsZWRTaGFk
ZXJzW2ldLT5SZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQmxpdDo6aW5p
dEdlb21ldHJ5KCkKK3sKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgcXVhZFtdID0KKyAgICB7Cisg
ICAgICAgIC0xLCAtMSwKKyAgICAgICAgLTEsICAxLAorICAgICAgICAgMSwgLTEsCisgICAgICAg
ICAxLCAgMQorICAgIH07CisKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVy
ZXItPmdldERldmljZSgpOworCisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVZl
cnRleEJ1ZmZlcihzaXplb2YocXVhZCksIEQzRFVTQUdFX1dSSVRFT05MWSwgMCwgRDNEUE9PTF9E
RUZBVUxULCAmbVF1YWRWZXJ0ZXhCdWZmZXIsIE5VTEwpOworCisgICAgaWYgKEZBSUxFRChyZXN1
bHQpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01F
TU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorCisgICAgdm9pZCAqbG9ja1B0ciA9IE5VTEw7
CisgICAgcmVzdWx0ID0gbVF1YWRWZXJ0ZXhCdWZmZXItPkxvY2soMCwgMCwgJmxvY2tQdHIsIDAp
OworCisgICAgaWYgKEZBSUxFRChyZXN1bHQpIHx8IGxvY2tQdHIgPT0gTlVMTCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0
ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KKworICAgIG1lbWNweShsb2NrUHRyLCBxdWFkLCBzaXplb2YocXVhZCkp
OworICAgIG1RdWFkVmVydGV4QnVmZmVyLT5VbmxvY2soKTsKKworICAgIHN0YXRpYyBjb25zdCBE
M0RWRVJURVhFTEVNRU5UOSBlbGVtZW50c1tdID0KKyAgICB7CisgICAgICAgIHsgMCwgMCwgRDNE
REVDTFRZUEVfRkxPQVQyLCBEM0RERUNMTUVUSE9EX0RFRkFVTFQsIEQzRERFQ0xVU0FHRV9QT1NJ
VElPTiwgMCB9LAorICAgICAgICBEM0RERUNMX0VORCgpCisgICAgfTsKKworICAgIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlVmVydGV4RGVjbGFyYXRpb24oZWxlbWVudHMsICZtUXVhZFZlcnRleERl
Y2xhcmF0aW9uKTsKKworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEFT
U0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordGVtcGxhdGUgPGNsYXNzIEQzRFNoYWRlclR5cGU+Citib29sIEJsaXQ6OnNl
dFNoYWRlcihTaGFkZXJJZCBzb3VyY2UsIGNvbnN0IGNoYXIgKnByb2ZpbGUsCisgICAgICAgICAg
ICAgICAgICAgICBEM0RTaGFkZXJUeXBlICoocng6OlJlbmRlcmVyOTo6KmNyZWF0ZVNoYWRlciko
Y29uc3QgRFdPUkQgKiwgc2l6ZV90IGxlbmd0aCksCisgICAgICAgICAgICAgICAgICAgICBIUkVT
VUxUIChXSU5BUEkgSURpcmVjdDNERGV2aWNlOTo6KnNldFNoYWRlcikoRDNEU2hhZGVyVHlwZSop
KQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNl
KCk7CisKKyAgICBEM0RTaGFkZXJUeXBlICpzaGFkZXI7CisKKyAgICBpZiAobUNvbXBpbGVkU2hh
ZGVyc1tzb3VyY2VdICE9IE5VTEwpCisgICAgeworICAgICAgICBzaGFkZXIgPSBzdGF0aWNfY2Fz
dDxEM0RTaGFkZXJUeXBlKj4obUNvbXBpbGVkU2hhZGVyc1tzb3VyY2VdKTsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgY29uc3QgQllURSogc2hhZGVyQ29kZSA9IGdfc2hhZGVyQ29k
ZVtzb3VyY2VdOworICAgICAgICBzaXplX3Qgc2hhZGVyU2l6ZSA9IGdfc2hhZGVyU2l6ZVtzb3Vy
Y2VdOworCisgICAgICAgIHNoYWRlciA9IChtUmVuZGVyZXItPipjcmVhdGVTaGFkZXIpKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgRFdPUkQqPihzaGFkZXJDb2RlKSwgc2hhZGVyU2l6ZSk7CisgICAg
ICAgIGlmICghc2hhZGVyKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBj
cmVhdGUgc2hhZGVyIGZvciBibGl0IG9wZXJhdGlvbiIpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisKKyAgICAgICAgbUNvbXBpbGVkU2hhZGVyc1tzb3VyY2VdID0gc2hh
ZGVyOworICAgIH0KKworICAgIEhSRVNVTFQgaHIgPSAoZGV2aWNlLT4qc2V0U2hhZGVyKShzaGFk
ZXIpOworCisgICAgaWYgKEZBSUxFRChocikpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0
byBzZXQgc2hhZGVyIGZvciBibGl0IG9wZXJhdGlvbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQmxpdDo6c2V0VmVydGV4U2hh
ZGVyKFNoYWRlcklkIHNoYWRlcikKK3sKKyAgICByZXR1cm4gc2V0U2hhZGVyPElEaXJlY3QzRFZl
cnRleFNoYWRlcjk+KHNoYWRlciwgInZzXzJfMCIsICZyeDo6UmVuZGVyZXI5OjpjcmVhdGVWZXJ0
ZXhTaGFkZXIsICZJRGlyZWN0M0REZXZpY2U5OjpTZXRWZXJ0ZXhTaGFkZXIpOworfQorCitib29s
IEJsaXQ6OnNldFBpeGVsU2hhZGVyKFNoYWRlcklkIHNoYWRlcikKK3sKKyAgICByZXR1cm4gc2V0
U2hhZGVyPElEaXJlY3QzRFBpeGVsU2hhZGVyOT4oc2hhZGVyLCAicHNfMl8wIiwgJnJ4OjpSZW5k
ZXJlcjk6OmNyZWF0ZVBpeGVsU2hhZGVyLCAmSURpcmVjdDNERGV2aWNlOTo6U2V0UGl4ZWxTaGFk
ZXIpOworfQorCitSRUNUIEJsaXQ6OmdldFN1cmZhY2VSZWN0KElEaXJlY3QzRFN1cmZhY2U5ICpz
dXJmYWNlKSBjb25zdAoreworICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOworICAgIHN1cmZhY2Ut
PkdldERlc2MoJmRlc2MpOworCisgICAgUkVDVCByZWN0OworICAgIHJlY3QubGVmdCA9IDA7Cisg
ICAgcmVjdC50b3AgPSAwOworICAgIHJlY3QucmlnaHQgPSBkZXNjLldpZHRoOworICAgIHJlY3Qu
Ym90dG9tID0gZGVzYy5IZWlnaHQ7CisKKyAgICByZXR1cm4gcmVjdDsKK30KKworYm9vbCBCbGl0
Ojpib3hGaWx0ZXIoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgSURpcmVjdDNEU3VyZmFjZTkg
KmRlc3QpCit7CisgICAgSURpcmVjdDNEVGV4dHVyZTkgKnRleHR1cmUgPSBjb3B5U3VyZmFjZVRv
VGV4dHVyZShzb3VyY2UsIGdldFN1cmZhY2VSZWN0KHNvdXJjZSkpOworICAgIGlmICghdGV4dHVy
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBJRGlyZWN0M0RE
ZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgc2F2ZVN0YXRl
KCk7CisKKyAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwgdGV4dHVyZSk7CisgICAgZGV2aWNlLT5T
ZXRSZW5kZXJUYXJnZXQoMCwgZGVzdCk7CisKKyAgICBzZXRWZXJ0ZXhTaGFkZXIoU0hBREVSX1ZT
X1NUQU5EQVJEKTsKKyAgICBzZXRQaXhlbFNoYWRlcihTSEFERVJfUFNfUEFTU1RIUk9VR0gpOwor
CisgICAgc2V0Q29tbW9uQmxpdFN0YXRlKCk7CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUo
MCwgRDNEU0FNUF9NSU5GSUxURVIsIEQzRFRFWEZfTElORUFSKTsKKyAgICBkZXZpY2UtPlNldFNh
bXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01BR0ZJTFRFUiwgRDNEVEVYRl9MSU5FQVIpOworCisgICAg
c2V0Vmlld3BvcnQoZ2V0U3VyZmFjZVJlY3QoZGVzdCksIDAsIDApOworCisgICAgcmVuZGVyKCk7
CisKKyAgICB0ZXh0dXJlLT5SZWxlYXNlKCk7CisKKyAgICByZXN0b3JlU3RhdGUoKTsKKworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIEJsaXQ6OmNvcHkoZ2w6OkZyYW1lYnVmZmVyICpmcmFt
ZWJ1ZmZlciwgY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3Jh
Z2UsIEdMaW50IGxldmVsKQoreworICAgIFJlbmRlclRhcmdldDkgKnJlbmRlclRhcmdldCA9IE5V
TEw7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSA9IE5VTEw7CisgICAgZ2w6OlJlbmRl
cmJ1ZmZlciAqY29sb3JidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoMCk7CisK
KyAgICBpZiAoY29sb3JidWZmZXIpCisgICAgeworICAgICAgICByZW5kZXJUYXJnZXQgPSBSZW5k
ZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShjb2xvcmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0
KCkpOworICAgIH0KKyAgICAKKyAgICBpZiAocmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAg
c291cmNlID0gcmVuZGVyVGFyZ2V0LT5nZXRTdXJmYWNlKCk7CisgICAgfQorCisgICAgaWYgKCFz
b3VyY2UpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVy
IHRhcmdldC4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBm
YWxzZSk7CisgICAgfQorCisgICAgVGV4dHVyZVN0b3JhZ2U5XzJEICpzdG9yYWdlOSA9IFRleHR1
cmVTdG9yYWdlOV8yRDo6bWFrZVRleHR1cmVTdG9yYWdlOV8yRChzdG9yYWdlLT5nZXRTdG9yYWdl
SW5zdGFuY2UoKSk7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJmYWNlID0gc3RvcmFn
ZTktPmdldFN1cmZhY2VMZXZlbChsZXZlbCwgdHJ1ZSk7CisgICAgYm9vbCByZXN1bHQgPSBmYWxz
ZTsKKyAgICAgICAgCisgICAgaWYgKGRlc3RTdXJmYWNlKQorICAgIHsKKyAgICAgICAgcmVzdWx0
ID0gY29weShzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RGb3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQs
IGRlc3RTdXJmYWNlKTsKKyAgICAgICAgZGVzdFN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICB9CisK
KyAgICBzb3VyY2UtPlJlbGVhc2UoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIEJs
aXQ6OmNvcHkoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgUkVDVCAmc291cmNl
UmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwpCit7CisgICAgUmVuZGVyVGFyZ2V0OSAqcmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqc291cmNlID0gTlVMTDsKKyAgICBnbDo6UmVuZGVyYnVmZmVyICpj
b2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigwKTsKKworICAgIGlmIChj
b2xvcmJ1ZmZlcikKKyAgICB7CisgICAgICAgIHJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDk6
Om1ha2VSZW5kZXJUYXJnZXQ5KGNvbG9yYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSk7CisgICAg
fQorICAgIAorICAgIGlmIChyZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBzb3VyY2UgPSBy
ZW5kZXJUYXJnZXQtPmdldFN1cmZhY2UoKTsKKyAgICB9CisKKyAgICBpZiAoIXNvdXJjZSkKKyAg
ICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIp
OworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAg
ICB9CisKKyAgICBUZXh0dXJlU3RvcmFnZTlfQ3ViZSAqc3RvcmFnZTkgPSBUZXh0dXJlU3RvcmFn
ZTlfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlOV9DdWJlKHN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0
YW5jZSgpKTsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdFN1cmZhY2UgPSBzdG9yYWdlOS0+
Z2V0Q3ViZU1hcFN1cmZhY2UodGFyZ2V0LCBsZXZlbCwgdHJ1ZSk7CisgICAgYm9vbCByZXN1bHQg
PSBmYWxzZTsKKworICAgIGlmIChkZXN0U3VyZmFjZSkKKyAgICB7CisgICAgICAgIHJlc3VsdCA9
IGNvcHkoc291cmNlLCBzb3VyY2VSZWN0LCBkZXN0Rm9ybWF0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBk
ZXN0U3VyZmFjZSk7CisgICAgICAgIGRlc3RTdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgfQorCisg
ICAgc291cmNlLT5SZWxlYXNlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBCbGl0
Ojpjb3B5KElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3Qs
IEdMZW51bSBkZXN0Rm9ybWF0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBJRGlyZWN0
M0RTdXJmYWNlOSAqZGVzdCkKK3sKKyAgICBpZiAoIWRlc3QpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRl
cmVyLT5nZXREZXZpY2UoKTsKKworICAgIEQzRFNVUkZBQ0VfREVTQyBzb3VyY2VEZXNjOworICAg
IEQzRFNVUkZBQ0VfREVTQyBkZXN0RGVzYzsKKyAgICBzb3VyY2UtPkdldERlc2MoJnNvdXJjZURl
c2MpOworICAgIGRlc3QtPkdldERlc2MoJmRlc3REZXNjKTsKKworICAgIGlmIChzb3VyY2VEZXNj
LkZvcm1hdCA9PSBkZXN0RGVzYy5Gb3JtYXQgJiYgZGVzdERlc2MuVXNhZ2UgJiBEM0RVU0FHRV9S
RU5ERVJUQVJHRVQgJiYKKyAgICAgICAgZDNkOV9nbDo6SXNGb3JtYXRDaGFubmVsRXF1aXZhbGVu
dChkZXN0RGVzYy5Gb3JtYXQsIGRlc3RGb3JtYXQpKSAgIC8vIENhbiB1c2UgU3RyZXRjaFJlY3QK
KyAgICB7CisgICAgICAgIFJFQ1QgZGVzdFJlY3QgPSB7eG9mZnNldCwgeW9mZnNldCwgeG9mZnNl
dCArIChzb3VyY2VSZWN0LnJpZ2h0IC0gc291cmNlUmVjdC5sZWZ0KSwgeW9mZnNldCArIChzb3Vy
Y2VSZWN0LmJvdHRvbSAtIHNvdXJjZVJlY3QudG9wKX07CisgICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gZGV2aWNlLT5TdHJldGNoUmVjdChzb3VyY2UsICZzb3VyY2VSZWN0LCBkZXN0LCAmZGVzdFJl
Y3QsIEQzRFRFWEZfUE9JTlQpOworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9S
WSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICByZXR1cm4gZm9ybWF0Q29udmVydChzb3VyY2UsIHNvdXJjZVJlY3Qs
IGRlc3RGb3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQsIGRlc3QpOworICAgIH0KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBCbGl0Ojpmb3JtYXRDb252ZXJ0KElEaXJlY3QzRFN1cmZhY2U5ICpz
b3VyY2UsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCkKK3sKKyAgICBJ
RGlyZWN0M0RUZXh0dXJlOSAqdGV4dHVyZSA9IGNvcHlTdXJmYWNlVG9UZXh0dXJlKHNvdXJjZSwg
c291cmNlUmVjdCk7CisgICAgaWYgKCF0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+
Z2V0RGV2aWNlKCk7CisKKyAgICBzYXZlU3RhdGUoKTsKKworICAgIGRldmljZS0+U2V0VGV4dHVy
ZSgwLCB0ZXh0dXJlKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBkZXN0KTsKKwor
ICAgIHNldFZpZXdwb3J0KHNvdXJjZVJlY3QsIHhvZmZzZXQsIHlvZmZzZXQpOworCisgICAgc2V0
Q29tbW9uQmxpdFN0YXRlKCk7CisgICAgaWYgKHNldEZvcm1hdENvbnZlcnRTaGFkZXJzKGRlc3RG
b3JtYXQpKQorICAgIHsKKyAgICAgICAgcmVuZGVyKCk7CisgICAgfQorCisgICAgdGV4dHVyZS0+
UmVsZWFzZSgpOworCisgICAgcmVzdG9yZVN0YXRlKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBCbGl0OjpzZXRGb3JtYXRDb252ZXJ0U2hhZGVycyhHTGVudW0gZGVzdEZvcm1hdCkK
K3sKKyAgICBib29sIG9rYXkgPSBzZXRWZXJ0ZXhTaGFkZXIoU0hBREVSX1ZTX1NUQU5EQVJEKTsK
KworICAgIHN3aXRjaCAoZGVzdEZvcm1hdCkKKyAgICB7CisgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOworICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKKyAg
ICAgIGNhc2UgR0xfUkdCOgorICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAgb2theSA9IG9r
YXkgJiYgc2V0UGl4ZWxTaGFkZXIoU0hBREVSX1BTX0NPTVBPTkVOVE1BU0spOworICAgICAgICBi
cmVhazsKKworICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6CisgICAgICBjYXNlIEdMX0xVTUlOQU5D
RV9BTFBIQToKKyAgICAgICAgb2theSA9IG9rYXkgJiYgc2V0UGl4ZWxTaGFkZXIoU0hBREVSX1BT
X0xVTUlOQU5DRSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICghb2theSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBlbnVtIHsgWCA9IDAsIFkg
PSAxLCBaID0gMiwgVyA9IDMgfTsKKworICAgIC8vIFRoZSBtZWFuaW5nIG9mIHRoaXMgY29uc3Rh
bnQgZGVwZW5kcyBvbiB0aGUgc2hhZGVyIHRoYXQgd2FzIHNlbGVjdGVkLgorICAgIC8vIFNlZSB0
aGUgc2hhZGVyIGFzc2VtYmx5IGNvZGUgYWJvdmUgZm9yIGRldGFpbHMuCisgICAgZmxvYXQgcHND
b25zdDBbNF0gPSB7IDAsIDAsIDAsIDAgfTsKKworICAgIHN3aXRjaCAoZGVzdEZvcm1hdCkKKyAg
ICB7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgY2FzZSBHTF9SR0JBOgor
ICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKKyAgICAgICAgcHNDb25zdDBbWF0gPSAxOworICAgICAg
ICBwc0NvbnN0MFtaXSA9IDE7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEdMX1JHQjoK
KyAgICAgICAgcHNDb25zdDBbWF0gPSAxOworICAgICAgICBwc0NvbnN0MFtXXSA9IDE7CisgICAg
ICAgIGJyZWFrOworCisgICAgICBjYXNlIEdMX0FMUEhBOgorICAgICAgICBwc0NvbnN0MFtaXSA9
IDE7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKKyAgICAgICAg
cHNDb25zdDBbWV0gPSAxOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBHTF9MVU1JTkFO
Q0VfQUxQSEE6CisgICAgICAgIHBzQ29uc3QwW1hdID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgbVJlbmRlcmVyLT5nZXREZXZpY2UoKS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYo
MCwgcHNDb25zdDAsIDEpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0lEaXJlY3QzRFRleHR1
cmU5ICpCbGl0Ojpjb3B5U3VyZmFjZVRvVGV4dHVyZShJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFj
ZSwgY29uc3QgUkVDVCAmc291cmNlUmVjdCkKK3sKKyAgICBpZiAoIXN1cmZhY2UpCisgICAgewor
ICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZp
Y2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgRDNEU1VSRkFDRV9ERVNDIHNvdXJj
ZURlc2M7CisgICAgc3VyZmFjZS0+R2V0RGVzYygmc291cmNlRGVzYyk7CisKKyAgICAvLyBDb3B5
IHRoZSByZW5kZXIgdGFyZ2V0IGludG8gYSB0ZXh0dXJlCisgICAgSURpcmVjdDNEVGV4dHVyZTkg
KnRleHR1cmU7CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUoc291
cmNlUmVjdC5yaWdodCAtIHNvdXJjZVJlY3QubGVmdCwgc291cmNlUmVjdC5ib3R0b20gLSBzb3Vy
Y2VSZWN0LnRvcCwgMSwgRDNEVVNBR0VfUkVOREVSVEFSR0VULCBzb3VyY2VEZXNjLkZvcm1hdCwg
RDNEUE9PTF9ERUZBVUxULCAmdGV4dHVyZSwgTlVMTCk7CisKKyAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCisgICAgeworICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVN
T1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZLCAoSURpcmVjdDNEVGV4dHVyZTkqKU5VTEwpOworICAgIH0KKwor
ICAgIElEaXJlY3QzRFN1cmZhY2U5ICp0ZXh0dXJlU3VyZmFjZTsKKyAgICByZXN1bHQgPSB0ZXh0
dXJlLT5HZXRTdXJmYWNlTGV2ZWwoMCwgJnRleHR1cmVTdXJmYWNlKTsKKworICAgIGlmIChGQUlM
RUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9G
VklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICB0ZXh0dXJl
LT5SZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
KElEaXJlY3QzRFRleHR1cmU5KilOVUxMKTsKKyAgICB9CisKKyAgICBtUmVuZGVyZXItPmVuZFNj
ZW5lKCk7CisgICAgcmVzdWx0ID0gZGV2aWNlLT5TdHJldGNoUmVjdChzdXJmYWNlLCAmc291cmNl
UmVjdCwgdGV4dHVyZVN1cmZhY2UsIE5VTEwsIEQzRFRFWEZfTk9ORSk7CisKKyAgICB0ZXh0dXJl
U3VyZmFjZS0+UmVsZWFzZSgpOworCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQg
PT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgIHRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSURpcmVjdDNEVGV4dHVyZTkqKU5V
TEwpOworICAgIH0KKworICAgIHJldHVybiB0ZXh0dXJlOworfQorCit2b2lkIEJsaXQ6OnNldFZp
ZXdwb3J0KGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZp
Y2UoKTsKKworICAgIEQzRFZJRVdQT1JUOSB2cDsKKyAgICB2cC5YICAgICAgPSB4b2Zmc2V0Owor
ICAgIHZwLlkgICAgICA9IHlvZmZzZXQ7CisgICAgdnAuV2lkdGggID0gc291cmNlUmVjdC5yaWdo
dCAtIHNvdXJjZVJlY3QubGVmdDsKKyAgICB2cC5IZWlnaHQgPSBzb3VyY2VSZWN0LmJvdHRvbSAt
IHNvdXJjZVJlY3QudG9wOworICAgIHZwLk1pblogICA9IDAuMGY7CisgICAgdnAuTWF4WiAgID0g
MS4wZjsKKyAgICBkZXZpY2UtPlNldFZpZXdwb3J0KCZ2cCk7CisKKyAgICBmbG9hdCBoYWxmUGl4
ZWxBZGp1c3RbNF0gPSB7IC0xLjBmL3ZwLldpZHRoLCAxLjBmL3ZwLkhlaWdodCwgMCwgMCB9Owor
ICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKDAsIGhhbGZQaXhlbEFkanVzdCwg
MSk7Cit9CisKK3ZvaWQgQmxpdDo6c2V0Q29tbW9uQmxpdFN0YXRlKCkKK3sKKyAgICBJRGlyZWN0
M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgZGV2aWNl
LT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKE5VTEwpOworCisgICAgZGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7CisgICAgZGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsKKyAgICBkZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKKyAgICBkZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOworICAgIGRldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsKKyAgICBkZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIEQzRENPTE9SV1JJVEVFTkFCTEVf
QUxQSEEgfCBEM0RDT0xPUldSSVRFRU5BQkxFX0JMVUUgfCBEM0RDT0xPUldSSVRFRU5BQkxFX0dS
RUVOIHwgRDNEQ09MT1JXUklURUVOQUJMRV9SRUQpOworICAgIGRldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfU1JHQldSSVRFRU5BQkxFLCBGQUxTRSk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSwgRkFMU0UpOworCisgICAgZGV2aWNlLT5TZXRT
YW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NQUdGSUxURVIsIEQzRFRFWEZfUE9JTlQpOworICAgIGRl
dmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUlORklMVEVSLCBEM0RURVhGX1BPSU5U
KTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX1NSR0JURVhUVVJFLCBG
QUxTRSk7CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9BRERSRVNTVSwg
RDNEVEFERFJFU1NfQ0xBTVApOworICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNB
TVBfQUREUkVTU1YsIEQzRFRBRERSRVNTX0NMQU1QKTsKKworICAgIFJFQ1Qgc2Npc3NvclJlY3Qg
PSB7MH07ICAgLy8gU2Npc3NvcmluZyBpcyBkaXNhYmxlZCBmb3IgZmxpcHBpbmcsIGJ1dCB3ZSBu
ZWVkIHRoaXMgdG8gY2FwdHVyZSBhbmQgcmVzdG9yZSB0aGUgb2xkIHJlY3RhbmdsZQorICAgIGRl
dmljZS0+U2V0U2Npc3NvclJlY3QoJnNjaXNzb3JSZWN0KTsKKworICAgIGZvcihpbnQgaSA9IDA7
IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgeworICAgICAgICBkZXZpY2Ut
PlNldFN0cmVhbVNvdXJjZUZyZXEoaSwgMSk7CisgICAgfQorfQorCit2b2lkIEJsaXQ6OnJlbmRl
cigpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZp
Y2UoKTsKKworICAgIEhSRVNVTFQgaHIgPSBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZSgwLCBtUXVh
ZFZlcnRleEJ1ZmZlciwgMCwgMiAqIHNpemVvZihmbG9hdCkpOworICAgIGhyID0gZGV2aWNlLT5T
ZXRWZXJ0ZXhEZWNsYXJhdGlvbihtUXVhZFZlcnRleERlY2xhcmF0aW9uKTsKKworICAgIG1SZW5k
ZXJlci0+c3RhcnRTY2VuZSgpOworICAgIGhyID0gZGV2aWNlLT5EcmF3UHJpbWl0aXZlKEQzRFBU
X1RSSUFOR0xFU1RSSVAsIDAsIDIpOworfQorCit2b2lkIEJsaXQ6OnNhdmVTdGF0ZSgpCit7Cisg
ICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKwor
ICAgIEhSRVNVTFQgaHI7CisKKyAgICBkZXZpY2UtPkdldERlcHRoU3RlbmNpbFN1cmZhY2UoJm1T
YXZlZERlcHRoU3RlbmNpbCk7CisgICAgZGV2aWNlLT5HZXRSZW5kZXJUYXJnZXQoMCwgJm1TYXZl
ZFJlbmRlclRhcmdldCk7CisKKyAgICBpZiAobVNhdmVkU3RhdGVCbG9jayA9PSBOVUxMKQorICAg
IHsKKyAgICAgICAgaHIgPSBkZXZpY2UtPkJlZ2luU3RhdGVCbG9jaygpOworICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9
PSBFX09VVE9GTUVNT1JZKTsKKworICAgICAgICBzZXRDb21tb25CbGl0U3RhdGUoKTsKKworICAg
ICAgICBzdGF0aWMgY29uc3QgZmxvYXQgZHVtbXlDb25zdFs0XSA9IHsgMCwgMCwgMCwgMCB9Owor
CisgICAgICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOworICAgICAgICBkZXZpY2Ut
PlNldFZlcnRleFNoYWRlckNvbnN0YW50RigwLCBkdW1teUNvbnN0LCAxKTsKKyAgICAgICAgZGV2
aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsKKyAgICAgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRl
ckNvbnN0YW50RigwLCBkdW1teUNvbnN0LCAxKTsKKworICAgICAgICBEM0RWSUVXUE9SVDkgZHVt
bXlWcDsKKyAgICAgICAgZHVtbXlWcC5YID0gMDsKKyAgICAgICAgZHVtbXlWcC5ZID0gMDsKKyAg
ICAgICAgZHVtbXlWcC5XaWR0aCA9IDE7CisgICAgICAgIGR1bW15VnAuSGVpZ2h0ID0gMTsKKyAg
ICAgICAgZHVtbXlWcC5NaW5aID0gMDsKKyAgICAgICAgZHVtbXlWcC5NYXhaID0gMTsKKworICAg
ICAgICBkZXZpY2UtPlNldFZpZXdwb3J0KCZkdW1teVZwKTsKKworICAgICAgICBkZXZpY2UtPlNl
dFRleHR1cmUoMCwgTlVMTCk7CisKKyAgICAgICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2UoMCwg
bVF1YWRWZXJ0ZXhCdWZmZXIsIDAsIDApOworCisgICAgICAgIGRldmljZS0+U2V0VmVydGV4RGVj
bGFyYXRpb24obVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbik7CisKKyAgICAgICAgaHIgPSBkZXZpY2Ut
PkVuZFN0YXRlQmxvY2soJm1TYXZlZFN0YXRlQmxvY2spOworICAgICAgICBBU1NFUlQoU1VDQ0VF
REVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9G
TUVNT1JZKTsKKyAgICB9CisKKyAgICBBU1NFUlQobVNhdmVkU3RhdGVCbG9jayAhPSBOVUxMKTsK
KworICAgIGlmIChtU2F2ZWRTdGF0ZUJsb2NrICE9IE5VTEwpCisgICAgeworICAgICAgICBociA9
IG1TYXZlZFN0YXRlQmxvY2stPkNhcHR1cmUoKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRCho
cikpOworICAgIH0KK30KKwordm9pZCBCbGl0OjpyZXN0b3JlU3RhdGUoKQoreworICAgIElEaXJl
Y3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICBkZXZp
Y2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UobVNhdmVkRGVwdGhTdGVuY2lsKTsKKyAgICBpZiAo
bVNhdmVkRGVwdGhTdGVuY2lsICE9IE5VTEwpCisgICAgeworICAgICAgICBtU2F2ZWREZXB0aFN0
ZW5jaWwtPlJlbGVhc2UoKTsKKyAgICAgICAgbVNhdmVkRGVwdGhTdGVuY2lsID0gTlVMTDsKKyAg
ICB9CisKKyAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBtU2F2ZWRSZW5kZXJUYXJnZXQp
OworICAgIGlmIChtU2F2ZWRSZW5kZXJUYXJnZXQgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1T
YXZlZFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworICAgICAgICBtU2F2ZWRSZW5kZXJUYXJnZXQg
PSBOVUxMOworICAgIH0KKworICAgIEFTU0VSVChtU2F2ZWRTdGF0ZUJsb2NrICE9IE5VTEwpOwor
CisgICAgaWYgKG1TYXZlZFN0YXRlQmxvY2sgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1TYXZl
ZFN0YXRlQmxvY2stPkFwcGx5KCk7CisgICAgfQorfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvQmxpdC5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0JsaXQuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zNzE4MDI4ZTY2MmQzZDU2MWM3NmNkMGNhNmY1MmU4MTNlNjcyNWMzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L0JsaXQuaApAQCAtMCwwICsxLDk0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisv
LyBCbGl0LmNwcDogU3VyZmFjZSBjb3B5IHV0aWxpdHkgY2xhc3MuCisKKyNpZm5kZWYgTElCR0xF
U1YyX0JMSVRfSF8KKyNkZWZpbmUgTElCR0xFU1YyX0JMSVRfSF8KKworI2luY2x1ZGUgImNvbW1v
bi9hbmdsZXV0aWxzLmgiCisKK25hbWVzcGFjZSBnbAoreworY2xhc3MgRnJhbWVidWZmZXI7Cit9
CisKK25hbWVzcGFjZSByeAoreworY2xhc3MgUmVuZGVyZXI5OworY2xhc3MgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyRDsKK2NsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTsKKworY2xh
c3MgQmxpdAoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgQmxpdChSZW5kZXJlcjkgKnJlbmRl
cmVyKTsKKyAgICB+QmxpdCgpOworCisgICAgLy8gQ29weSBmcm9tIHNvdXJjZSBzdXJmYWNlIHRv
IGRlc3Qgc3VyZmFjZS4KKyAgICAvLyBzb3VyY2VSZWN0LCB4b2Zmc2V0LCB5b2Zmc2V0IGFyZSBp
biBEM0QgY29vcmRpbmF0ZXMgKDAsMCBpbiB1cHBlci1sZWZ0KQorICAgIGJvb2wgY29weShnbDo6
RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBSRUNUICZzb3VyY2VSZWN0LCBHTGVudW0g
ZGVzdEZvcm1hdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyRCAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpOworICAgIGJvb2wgY29weShnbDo6RnJh
bWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBSRUNUICZzb3VyY2VSZWN0LCBHTGVudW0gZGVz
dEZvcm1hdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2VDdWJlICpzdG9yYWdlLCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCk7CisKKyAgICAv
LyBDb3B5IGZyb20gc291cmNlIHN1cmZhY2UgdG8gZGVzdCBzdXJmYWNlLgorICAgIC8vIHNvdXJj
ZVJlY3QsIHhvZmZzZXQsIHlvZmZzZXQgYXJlIGluIEQzRCBjb29yZGluYXRlcyAoMCwwIGluIHVw
cGVyLWxlZnQpCisgICAgLy8gc291cmNlIGlzIGludGVycHJldGVkIGFzIFJHQkEgYW5kIGRlc3RG
b3JtYXQgc3BlY2lmaWVzIHRoZSBkZXNpcmVkIHJlc3VsdCBmb3JtYXQuIEZvciBleGFtcGxlLCBp
ZiBkZXN0Rm9ybWF0ID0gR0xfUkdCLCB0aGUgYWxwaGEgY2hhbm5lbCB3aWxsIGJlIGZvcmNlZCB0
byAwLgorICAgIGJvb2wgZm9ybWF0Q29udmVydChJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBj
b25zdCBSRUNUICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpOworCisgICAgLy8gMngyIGJv
eCBmaWx0ZXIgc2FtcGxlIGZyb20gc291cmNlIHRvIGRlc3QuCisgICAgLy8gUmVxdWlyZXMgdGhh
dCBzb3VyY2UgaXMgUkdCKEEpIGFuZCBkZXN0IGhhcyB0aGUgc2FtZSBmb3JtYXQgYXMgc291cmNl
LgorICAgIGJvb2wgYm94RmlsdGVyKElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIElEaXJlY3Qz
RFN1cmZhY2U5ICpkZXN0KTsKKworICBwcml2YXRlOgorICAgIHJ4OjpSZW5kZXJlcjkgKm1SZW5k
ZXJlcjsKKworICAgIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKm1RdWFkVmVydGV4QnVmZmVyOwor
ICAgIElEaXJlY3QzRFZlcnRleERlY2xhcmF0aW9uOSAqbVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbjsK
KworICAgIHZvaWQgaW5pdEdlb21ldHJ5KCk7CisKKyAgICBib29sIHNldEZvcm1hdENvbnZlcnRT
aGFkZXJzKEdMZW51bSBkZXN0Rm9ybWF0KTsKKworICAgIGJvb2wgY29weShJRGlyZWN0M0RTdXJm
YWNlOSAqc291cmNlLCBjb25zdCBSRUNUICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpOwor
ICAgIElEaXJlY3QzRFRleHR1cmU5ICpjb3B5U3VyZmFjZVRvVGV4dHVyZShJRGlyZWN0M0RTdXJm
YWNlOSAqc3VyZmFjZSwgY29uc3QgUkVDVCAmc291cmNlUmVjdCk7CisgICAgdm9pZCBzZXRWaWV3
cG9ydChjb25zdCBSRUNUICZzb3VyY2VSZWN0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
KTsKKyAgICB2b2lkIHNldENvbW1vbkJsaXRTdGF0ZSgpOworICAgIFJFQ1QgZ2V0U3VyZmFjZVJl
Y3QoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UpIGNvbnN0OworCisgICAgLy8gVGhpcyBlbnVt
IGlzIHVzZWQgdG8gaW5kZXggbUNvbXBpbGVkU2hhZGVycyBhbmQgbVNoYWRlclNvdXJjZS4KKyAg
ICBlbnVtIFNoYWRlcklkCisgICAgeworICAgICAgICBTSEFERVJfVlNfU1RBTkRBUkQsCisgICAg
ICAgIFNIQURFUl9WU19GTElQWSwKKyAgICAgICAgU0hBREVSX1BTX1BBU1NUSFJPVUdILAorICAg
ICAgICBTSEFERVJfUFNfTFVNSU5BTkNFLAorICAgICAgICBTSEFERVJfUFNfQ09NUE9ORU5UTUFT
SywKKyAgICAgICAgU0hBREVSX0NPVU5UCisgICAgfTsKKworICAgIC8vIFRoaXMgYWN0dWFsbHkg
Y29udGFpbnMgSURpcmVjdDNEVmVydGV4U2hhZGVyOSBvciBJRGlyZWN0M0RQaXhlbFNoYWRlcjkg
Y2FzdGVkIHRvIElVbmtub3duLgorICAgIElVbmtub3duICptQ29tcGlsZWRTaGFkZXJzW1NIQURF
Ul9DT1VOVF07CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgRDNEU2hhZGVyVHlwZT4KKyAgICBib29s
IHNldFNoYWRlcihTaGFkZXJJZCBzb3VyY2UsIGNvbnN0IGNoYXIgKnByb2ZpbGUsCisgICAgICAg
ICAgICAgICAgICAgRDNEU2hhZGVyVHlwZSAqKFJlbmRlcmVyOTo6KmNyZWF0ZVNoYWRlcikoY29u
c3QgRFdPUkQgKiwgc2l6ZV90IGxlbmd0aCksCisgICAgICAgICAgICAgICAgICAgSFJFU1VMVCAo
V0lOQVBJIElEaXJlY3QzRERldmljZTk6OipzZXRTaGFkZXIpKEQzRFNoYWRlclR5cGUqKSk7CisK
KyAgICBib29sIHNldFZlcnRleFNoYWRlcihTaGFkZXJJZCBzaGFkZXIpOworICAgIGJvb2wgc2V0
UGl4ZWxTaGFkZXIoU2hhZGVySWQgc2hhZGVyKTsKKyAgICB2b2lkIHJlbmRlcigpOworCisgICAg
dm9pZCBzYXZlU3RhdGUoKTsKKyAgICB2b2lkIHJlc3RvcmVTdGF0ZSgpOworICAgIElEaXJlY3Qz
RFN0YXRlQmxvY2s5ICptU2F2ZWRTdGF0ZUJsb2NrOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpt
U2F2ZWRSZW5kZXJUYXJnZXQ7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1TYXZlZERlcHRoU3Rl
bmNpbDsKKworICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihCbGl0KTsKK307Cit9CisKKyNl
bmRpZiAgIC8vIExJQkdMRVNWMl9CTElUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvQnVmZmVyU3RvcmFnZTkuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0J1ZmZl
clN0b3JhZ2U5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZmRjMTI0NmYxNzQzNmQ3ZjRjNGNjZjNlNTQ5NjA2
NTIwODkzNTkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0J1ZmZlclN0b3JhZ2U5LmNwcApAQCAtMCwwICsxLDc4
IEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBCdWZmZXJT
dG9yYWdlOS5jcHAgRGVmaW5lcyB0aGUgQnVmZmVyU3RvcmFnZTkgY2xhc3MuCisKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CdWZmZXJTdG9yYWdlOS5oIgorI2luY2x1ZGUgImNv
bW1vbi9kZWJ1Zy5oIgorCituYW1lc3BhY2UgcngKK3sKKworQnVmZmVyU3RvcmFnZTk6OkJ1ZmZl
clN0b3JhZ2U5KCkKK3sKKyAgICBtTWVtb3J5ID0gTlVMTDsKKyAgICBtQWxsb2NhdGVkU2l6ZSA9
IDA7CisgICAgbVNpemUgPSAwOworfQorCitCdWZmZXJTdG9yYWdlOTo6fkJ1ZmZlclN0b3JhZ2U5
KCkKK3sKKyAgICBkZWxldGVbXSBtTWVtb3J5OworfQorCitCdWZmZXJTdG9yYWdlOSAqQnVmZmVy
U3RvcmFnZTk6Om1ha2VCdWZmZXJTdG9yYWdlOShCdWZmZXJTdG9yYWdlICpidWZmZXJTdG9yYWdl
KQoreworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKEJ1ZmZlclN0b3JhZ2U5KiwgYnVmZmVy
U3RvcmFnZSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxCdWZmZXJTdG9yYWdlOSo+KGJ1ZmZl
clN0b3JhZ2UpOworfQorCit2b2lkICpCdWZmZXJTdG9yYWdlOTo6Z2V0RGF0YSgpCit7CisgICAg
cmV0dXJuIG1NZW1vcnk7Cit9CisKK3ZvaWQgQnVmZmVyU3RvcmFnZTk6OnNldERhdGEoY29uc3Qg
dm9pZCogZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBvZmZzZXQpCit7Cisg
ICAgaWYgKCFtTWVtb3J5IHx8IG9mZnNldCArIHNpemUgPiBtQWxsb2NhdGVkU2l6ZSkKKyAgICB7
CisgICAgICAgIHVuc2lnbmVkIGludCBuZXdBbGxvY2F0ZWRTaXplID0gb2Zmc2V0ICsgc2l6ZTsK
KyAgICAgICAgdm9pZCAqbmV3TWVtb3J5ID0gbmV3IGNoYXJbbmV3QWxsb2NhdGVkU2l6ZV07CisK
KyAgICAgICAgaWYgKG9mZnNldCA+IDAgJiYgbU1lbW9yeSAmJiBtQWxsb2NhdGVkU2l6ZSA+IDAp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbWNweShuZXdNZW1vcnksIG1NZW1vcnksIHN0ZDo6
bWluKG9mZnNldCwgbUFsbG9jYXRlZFNpemUpKTsKKyAgICAgICAgfQorCisgICAgICAgIGRlbGV0
ZVtdIG1NZW1vcnk7CisgICAgICAgIG1NZW1vcnkgPSBuZXdNZW1vcnk7CisgICAgICAgIG1BbGxv
Y2F0ZWRTaXplID0gbmV3QWxsb2NhdGVkU2l6ZTsKKyAgICB9CisKKyAgICBtU2l6ZSA9IHN0ZDo6
bWF4KG1TaXplLCBvZmZzZXQgKyBzaXplKTsKKyAgICBpZiAoZGF0YSkKKyAgICB7CisgICAgICAg
IG1lbWNweShyZWludGVycHJldF9jYXN0PGNoYXIqPihtTWVtb3J5KSArIG9mZnNldCwgZGF0YSwg
c2l6ZSk7CisgICAgfQorfQorCit2b2lkIEJ1ZmZlclN0b3JhZ2U5OjpjbGVhcigpCit7CisgICAg
bVNpemUgPSAwOworfQorCit1bnNpZ25lZCBpbnQgQnVmZmVyU3RvcmFnZTk6OmdldFNpemUoKSBj
b25zdAoreworICAgIHJldHVybiBtU2l6ZTsKK30KKworYm9vbCBCdWZmZXJTdG9yYWdlOTo6c3Vw
cG9ydHNEaXJlY3RCaW5kaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9CdWZmZXJTdG9yYWdlOS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0J1ZmZlclN0b3JhZ2U5LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2U4MDM5
NjliYzM1ZDRlYTExMWRhMjI4MWYyNWIzZTE3MWRkYzIzNAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CdWZmZXJT
dG9yYWdlOS5oCkBAIC0wLDAgKzEsNDIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBCdWZmZXJTdG9y
YWdlOS5oIERlZmluZXMgdGhlIEJ1ZmZlclN0b3JhZ2U5IGNsYXNzLgorCisjaWZuZGVmIExJQkdM
RVNWMl9SRU5ERVJFUl9CVUZGRVJTVE9SQUdFOV9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVS
RVJfQlVGRkVSU1RPUkFHRTlfSF8KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9CdWZm
ZXJTdG9yYWdlLmgiCisKK25hbWVzcGFjZSByeAoreworCitjbGFzcyBCdWZmZXJTdG9yYWdlOSA6
IHB1YmxpYyBCdWZmZXJTdG9yYWdlCit7CisgIHB1YmxpYzoKKyAgICBCdWZmZXJTdG9yYWdlOSgp
OworICAgIHZpcnR1YWwgfkJ1ZmZlclN0b3JhZ2U5KCk7CisKKyAgICBzdGF0aWMgQnVmZmVyU3Rv
cmFnZTkgKm1ha2VCdWZmZXJTdG9yYWdlOShCdWZmZXJTdG9yYWdlICpidWZmZXJTdG9yYWdlKTsK
KworICAgIHZpcnR1YWwgdm9pZCAqZ2V0RGF0YSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXREYXRh
KGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0
KTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKTsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBn
ZXRTaXplKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRGlyZWN0QmluZGluZygp
IGNvbnN0OworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEJ1ZmZl
clN0b3JhZ2U5KTsKKworICAgIHZvaWQgKm1NZW1vcnk7CisgICAgdW5zaWduZWQgaW50IG1BbGxv
Y2F0ZWRTaXplOworCisgICAgdW5zaWduZWQgaW50IG1TaXplOworfTsKKworfQorCisjZW5kaWYg
Ly8gTElCR0xFU1YyX1JFTkRFUkVSX0JVRkZFUlNUT1JBR0U5X0hfCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvRmVuY2U5LmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9G
ZW5jZTkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYzOWMzN2I0ZTQzOTljYjRmZmQ4NzlmNDdmMTUxZmMwY2Jh
YzMwOGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvRmVuY2U5LmNwcApAQCAtMCwwICsxLDEzNSBAQAorI2luY2x1
ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gRmVuY2U5LmNwcDogRGVmaW5l
cyB0aGUgcng6OkZlbmNlOSBjbGFzcy4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L0ZlbmNlOS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmgiCisKK25hbWVzcGFjZSByeAoreworCitGZW5j
ZTk6OkZlbmNlOShyeDo6UmVuZGVyZXI5ICpyZW5kZXJlcikKK3sKKyAgICBtUmVuZGVyZXIgPSBy
ZW5kZXJlcjsKKyAgICBtUXVlcnkgPSBOVUxMOworfQorCitGZW5jZTk6On5GZW5jZTkoKQorewor
ICAgIGlmIChtUXVlcnkpCisgICAgeworICAgICAgICBtUmVuZGVyZXItPmZyZWVFdmVudFF1ZXJ5
KG1RdWVyeSk7CisgICAgICAgIG1RdWVyeSA9IE5VTEw7CisgICAgfQorfQorCitHTGJvb2xlYW4g
RmVuY2U5Ojppc0ZlbmNlKCkKK3sKKyAgICAvLyBHTF9OVl9mZW5jZSBzcGVjOgorICAgIC8vIEEg
bmFtZSByZXR1cm5lZCBieSBHZW5GZW5jZXNOViwgYnV0IG5vdCB5ZXQgc2V0IHZpYSBTZXRGZW5j
ZU5WLCBpcyBub3QgdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgZmVuY2UuCisgICAgcmV0dXJuIG1R
dWVyeSAhPSBOVUxMOworfQorCit2b2lkIEZlbmNlOTo6c2V0RmVuY2UoR0xlbnVtIGNvbmRpdGlv
bikKK3sKKyAgICBpZiAoIW1RdWVyeSkKKyAgICB7CisgICAgICAgIG1RdWVyeSA9IG1SZW5kZXJl
ci0+YWxsb2NhdGVFdmVudFF1ZXJ5KCk7CisgICAgICAgIGlmICghbVF1ZXJ5KQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAg
ICB9CisgICAgfQorCisgICAgSFJFU1VMVCByZXN1bHQgPSBtUXVlcnktPklzc3VlKEQzRElTU1VF
X0VORCk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIHNldENvbmRpdGlv
bihjb25kaXRpb24pOworICAgIHNldFN0YXR1cyhHTF9GQUxTRSk7Cit9CisKK0dMYm9vbGVhbiBG
ZW5jZTk6OnRlc3RGZW5jZSgpCit7CisgICAgaWYgKG1RdWVyeSA9PSBOVUxMKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfVFJVRSk7Cisg
ICAgfQorCisgICAgSFJFU1VMVCByZXN1bHQgPSBtUXVlcnktPkdldERhdGEoTlVMTCwgMCwgRDNE
R0VUREFUQV9GTFVTSCk7CisKKyAgICBpZiAoZDNkOTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0
KSkKKyAgICB7CisgICAgICAgIG1SZW5kZXJlci0+bm90aWZ5RGV2aWNlTG9zdCgpOworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX1RSVUUpOworICAgIH0KKwor
ICAgIEFTU0VSVChyZXN1bHQgPT0gU19PSyB8fCByZXN1bHQgPT0gU19GQUxTRSk7CisgICAgc2V0
U3RhdHVzKHJlc3VsdCA9PSBTX09LKTsKKyAgICByZXR1cm4gZ2V0U3RhdHVzKCk7Cit9CisKK3Zv
aWQgRmVuY2U5OjpmaW5pc2hGZW5jZSgpCit7CisgICAgaWYgKG1RdWVyeSA9PSBOVUxMKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
fQorCisgICAgd2hpbGUgKCF0ZXN0RmVuY2UoKSkKKyAgICB7CisgICAgICAgIFNsZWVwKDApOwor
ICAgIH0KK30KKwordm9pZCBGZW5jZTk6OmdldEZlbmNlaXYoR0xlbnVtIHBuYW1lLCBHTGludCAq
cGFyYW1zKQoreworICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgIH0KKworICAgIHN3aXRjaCAo
cG5hbWUpCisgICAgeworICAgICAgICBjYXNlIEdMX0ZFTkNFX1NUQVRVU19OVjoKKyAgICAgICAg
eworICAgICAgICAgICAgLy8gR0xfTlZfZmVuY2Ugc3BlYzoKKyAgICAgICAgICAgIC8vIE9uY2Ug
dGhlIHN0YXR1cyBvZiBhIGZlbmNlIGhhcyBiZWVuIGZpbmlzaGVkICh2aWEgRmluaXNoRmVuY2VO
Vikgb3IgdGVzdGVkIGFuZCB0aGUgcmV0dXJuZWQgc3RhdHVzIGlzIFRSVUUgKHZpYSBlaXRoZXIg
VGVzdEZlbmNlTlYKKyAgICAgICAgICAgIC8vIG9yIEdldEZlbmNlaXZOViBxdWVyeWluZyB0aGUg
RkVOQ0VfU1RBVFVTX05WKSwgdGhlIHN0YXR1cyByZW1haW5zIFRSVUUgdW50aWwgdGhlIG5leHQg
U2V0RmVuY2VOViBvZiB0aGUgZmVuY2UuCisgICAgICAgICAgICBpZiAoZ2V0U3RhdHVzKCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGFyYW1zWzBdID0gR0xfVFJVRTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gbVF1ZXJ5LT5HZXREYXRhKE5VTEwsIDAsIDApOworCisgICAg
ICAgICAgICBpZiAoZDNkOTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBwYXJhbXNbMF0gPSBHTF9UUlVFOworICAgICAgICAgICAgICAg
IG1SZW5kZXJlci0+bm90aWZ5RGV2aWNlTG9zdCgpOworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IEFTU0VSVChyZXN1bHQgPT0gU19PSyB8fCByZXN1bHQgPT0gU19GQUxTRSk7CisgICAgICAgICAg
ICBzZXRTdGF0dXMocmVzdWx0ID09IFNfT0spOworICAgICAgICAgICAgcGFyYW1zWzBdID0gZ2V0
U3RhdHVzKCk7CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
R0xfRkVOQ0VfQ09ORElUSU9OX05WOgorICAgICAgICAgICAgcGFyYW1zWzBdID0gZ2V0Q29uZGl0
aW9uKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ZlbmNlOS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ZlbmNlOS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmMTc2NDFl
NTE5YWI0Nzg0MDdlODBjY2JmZDI1MzgwYTNkY2M4YmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvRmVuY2U5LmgK
QEAgLTAsMCArMSwzOSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIEZlbmNlOS5oOiBEZWZpbmVzIHRo
ZSByeDo6RmVuY2U5IGNsYXNzIHdoaWNoIGltcGxlbWVudHMgcng6OkZlbmNlSW1wbC4KKworI2lm
bmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfRkVOQ0U5X0hfCisjZGVmaW5lIExJQkdMRVNWMl9SRU5E
RVJFUl9GRU5DRTlfSF8KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZUltcGwu
aCIKKworbmFtZXNwYWNlIHJ4Cit7CitjbGFzcyBSZW5kZXJlcjk7CisKK2NsYXNzIEZlbmNlOSA6
IHB1YmxpYyBGZW5jZUltcGwKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IEZlbmNlOShyeDo6
UmVuZGVyZXI5ICpyZW5kZXJlcik7CisgICAgdmlydHVhbCB+RmVuY2U5KCk7CisKKyAgICBHTGJv
b2xlYW4gaXNGZW5jZSgpOworICAgIHZvaWQgc2V0RmVuY2UoR0xlbnVtIGNvbmRpdGlvbik7Cisg
ICAgR0xib29sZWFuIHRlc3RGZW5jZSgpOworICAgIHZvaWQgZmluaXNoRmVuY2UoKTsKKyAgICB2
b2lkIGdldEZlbmNlaXYoR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKTsKKworICBwcml2YXRl
OgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihGZW5jZTkpOworCisgICAgcng6OlJlbmRl
cmVyOSAqbVJlbmRlcmVyOworICAgIElEaXJlY3QzRFF1ZXJ5OSAqbVF1ZXJ5OworfTsKKworfQor
CisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX0ZFTkNFOV9IXwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ltYWdlOS5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
SW1hZ2U5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NTExOTQ2MzZkMGIzMTk2ZjlhMjY0YWFhZmYyYTIxNzU3
YTg5OWMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ltYWdlOS5jcHAKQEAgLTAsMCArMSw3MzIgQEAKKyNpbmNs
dWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gSW1hZ2U5LmNwcDog
SW1wbGVtZW50cyB0aGUgcng6OkltYWdlOSBjbGFzcywgd2hpY2ggYWN0cyBhcyB0aGUgaW50ZXJm
YWNlIHRvCisvLyB0aGUgYWN0dWFsIHVuZGVybHlpbmcgc3VyZmFjZXMgb2YgYSBUZXh0dXJlLgor
CisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW1hZ2U5LmgiCisKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvbWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgor
I2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9SZW5kZXJUYXJnZXQ5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
VGV4dHVyZVN0b3JhZ2U5LmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9y
ZW5kZXJlcjlfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZ2VuZXJhdGVt
aXAuaCIKKworbmFtZXNwYWNlIHJ4Cit7CisKK0ltYWdlOTo6SW1hZ2U5KCkKK3sKKyAgICBtU3Vy
ZmFjZSA9IE5VTEw7CisgICAgbVJlbmRlcmVyID0gTlVMTDsKKworICAgIG1EM0RQb29sID0gRDNE
UE9PTF9TWVNURU1NRU07CisgICAgbUQzREZvcm1hdCA9IEQzREZNVF9VTktOT1dOOworfQorCitJ
bWFnZTk6On5JbWFnZTkoKQoreworICAgIGlmIChtU3VyZmFjZSkKKyAgICB7CisgICAgICAgIG1T
dXJmYWNlLT5SZWxlYXNlKCk7CisgICAgfQorfQorCit2b2lkIEltYWdlOTo6Z2VuZXJhdGVNaXAo
SURpcmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJmYWNlLCBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNl
U3VyZmFjZSkKK3sKKyAgICBEM0RTVVJGQUNFX0RFU0MgZGVzdERlc2M7CisgICAgSFJFU1VMVCBy
ZXN1bHQgPSBkZXN0U3VyZmFjZS0+R2V0RGVzYygmZGVzdERlc2MpOworICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7CisKKyAgICBEM0RTVVJGQUNFX0RFU0Mgc291cmNlRGVzYzsKKyAgICBy
ZXN1bHQgPSBzb3VyY2VTdXJmYWNlLT5HZXREZXNjKCZzb3VyY2VEZXNjKTsKKyAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgQVNTRVJUKHNvdXJjZURlc2MuRm9ybWF0ID09IGRl
c3REZXNjLkZvcm1hdCk7CisgICAgQVNTRVJUKHNvdXJjZURlc2MuV2lkdGggPT0gMSB8fCBzb3Vy
Y2VEZXNjLldpZHRoIC8gMiA9PSBkZXN0RGVzYy5XaWR0aCk7CisgICAgQVNTRVJUKHNvdXJjZURl
c2MuSGVpZ2h0ID09IDEgfHwgc291cmNlRGVzYy5IZWlnaHQgLyAyID09IGRlc3REZXNjLkhlaWdo
dCk7CisKKyAgICBEM0RMT0NLRURfUkVDVCBzb3VyY2VMb2NrZWQgPSB7MH07CisgICAgcmVzdWx0
ID0gc291cmNlU3VyZmFjZS0+TG9ja1JlY3QoJnNvdXJjZUxvY2tlZCwgTlVMTCwgRDNETE9DS19S
RUFET05MWSk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIEQzRExPQ0tF
RF9SRUNUIGRlc3RMb2NrZWQgPSB7MH07CisgICAgcmVzdWx0ID0gZGVzdFN1cmZhY2UtPkxvY2tS
ZWN0KCZkZXN0TG9ja2VkLCBOVUxMLCAwKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkp
OworCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0YSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KHNvdXJjZUxvY2tlZC5wQml0cyk7CisgICAgdW5zaWdu
ZWQgY2hhciAqZGVzdERhdGEgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihkZXN0
TG9ja2VkLnBCaXRzKTsKKworICAgIGlmIChzb3VyY2VEYXRhICYmIGRlc3REYXRhKQorICAgIHsK
KyAgICAgICAgc3dpdGNoIChzb3VyY2VEZXNjLkZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAg
IGNhc2UgRDNERk1UX0w4OgorICAgICAgICAgICAgR2VuZXJhdGVNaXA8TDg+KHNvdXJjZURlc2Mu
V2lkdGgsIHNvdXJjZURlc2MuSGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3VyY2VMb2NrZWQuUGl0Y2gs
IGRlc3REYXRhLCBkZXN0TG9ja2VkLlBpdGNoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgIGNhc2UgRDNERk1UX0E4TDg6CisgICAgICAgICAgICBHZW5lcmF0ZU1pcDxBOEw4Pihzb3Vy
Y2VEZXNjLldpZHRoLCBzb3VyY2VEZXNjLkhlaWdodCwgc291cmNlRGF0YSwgc291cmNlTG9ja2Vk
LlBpdGNoLCBkZXN0RGF0YSwgZGVzdExvY2tlZC5QaXRjaCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKKyAgICAgICAgICBjYXNlIEQzREZNVF9Y
OFI4RzhCODoKKyAgICAgICAgICAgIEdlbmVyYXRlTWlwPEE4UjhHOEI4Pihzb3VyY2VEZXNjLldp
ZHRoLCBzb3VyY2VEZXNjLkhlaWdodCwgc291cmNlRGF0YSwgc291cmNlTG9ja2VkLlBpdGNoLCBk
ZXN0RGF0YSwgZGVzdExvY2tlZC5QaXRjaCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgorICAgICAgICAgICAgR2VuZXJhdGVNaXA8QTE2
QjE2RzE2UjE2Rj4oc291cmNlRGVzYy5XaWR0aCwgc291cmNlRGVzYy5IZWlnaHQsIHNvdXJjZURh
dGEsIHNvdXJjZUxvY2tlZC5QaXRjaCwgZGVzdERhdGEsIGRlc3RMb2NrZWQuUGl0Y2gpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKKyAg
ICAgICAgICAgIEdlbmVyYXRlTWlwPEEzMkIzMkczMlIzMkY+KHNvdXJjZURlc2MuV2lkdGgsIHNv
dXJjZURlc2MuSGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3VyY2VMb2NrZWQuUGl0Y2gsIGRlc3REYXRh
LCBkZXN0TG9ja2VkLlBpdGNoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICBkZXN0U3VyZmFjZS0+VW5sb2NrUmVjdCgpOworICAgICAgICBzb3Vy
Y2VTdXJmYWNlLT5VbmxvY2tSZWN0KCk7CisgICAgfQorfQorCitJbWFnZTkgKkltYWdlOTo6bWFr
ZUltYWdlOShJbWFnZSAqaW1nKQoreworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKHJ4OjpJ
bWFnZTkqLCBpbWcpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8cng6OkltYWdlOSo+KGltZyk7
Cit9CisKK3ZvaWQgSW1hZ2U5OjpnZW5lcmF0ZU1pcG1hcChJbWFnZTkgKmRlc3QsIEltYWdlOSAq
c291cmNlKQoreworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2VTdXJmYWNlID0gc291cmNl
LT5nZXRTdXJmYWNlKCk7CisgICAgaWYgKHNvdXJjZVN1cmZhY2UgPT0gTlVMTCkKKyAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKworICAgIElEaXJlY3QzRFN1cmZh
Y2U5ICpkZXN0U3VyZmFjZSA9IGRlc3QtPmdldFN1cmZhY2UoKTsKKyAgICBnZW5lcmF0ZU1pcChk
ZXN0U3VyZmFjZSwgc291cmNlU3VyZmFjZSk7CisKKyAgICBkZXN0LT5tYXJrRGlydHkoKTsKK30K
Kwordm9pZCBJbWFnZTk6OmNvcHlMb2NrYWJsZVN1cmZhY2VzKElEaXJlY3QzRFN1cmZhY2U5ICpk
ZXN0LCBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlKQoreworICAgIEQzRExPQ0tFRF9SRUNUIHNv
dXJjZUxvY2sgPSB7MH07CisgICAgRDNETE9DS0VEX1JFQ1QgZGVzdExvY2sgPSB7MH07CisgICAg
CisgICAgc291cmNlLT5Mb2NrUmVjdCgmc291cmNlTG9jaywgTlVMTCwgMCk7CisgICAgZGVzdC0+
TG9ja1JlY3QoJmRlc3RMb2NrLCBOVUxMLCAwKTsKKyAgICAKKyAgICBpZiAoc291cmNlTG9jay5w
Qml0cyAmJiBkZXN0TG9jay5wQml0cykKKyAgICB7CisgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBk
ZXNjOworICAgICAgICBzb3VyY2UtPkdldERlc2MoJmRlc2MpOworCisgICAgICAgIGludCByb3dz
ID0gZDNkOTo6SXNDb21wcmVzc2VkRm9ybWF0KGRlc2MuRm9ybWF0KSA/IGRlc2MuSGVpZ2h0IC8g
NCA6IGRlc2MuSGVpZ2h0OworICAgICAgICBpbnQgYnl0ZXMgPSBkM2Q5OjpDb21wdXRlUm93U2l6
ZShkZXNjLkZvcm1hdCwgZGVzYy5XaWR0aCk7CisgICAgICAgIEFTU0VSVChieXRlcyA8PSBzb3Vy
Y2VMb2NrLlBpdGNoICYmIGJ5dGVzIDw9IGRlc3RMb2NrLlBpdGNoKTsKKworICAgICAgICBmb3Io
aW50IGkgPSAwOyBpIDwgcm93czsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBtZW1jcHko
KGNoYXIqKWRlc3RMb2NrLnBCaXRzICsgZGVzdExvY2suUGl0Y2ggKiBpLCAoY2hhciopc291cmNl
TG9jay5wQml0cyArIHNvdXJjZUxvY2suUGl0Y2ggKiBpLCBieXRlcyk7CisgICAgICAgIH0KKwor
ICAgICAgICBzb3VyY2UtPlVubG9ja1JlY3QoKTsKKyAgICAgICAgZGVzdC0+VW5sb2NrUmVjdCgp
OworICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Cit9CisKK2Jvb2wgSW1hZ2U5OjpyZWRl
ZmluZShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGJvb2wgZm9yY2VSZWxlYXNlKQoreworICAgIGlmICht
V2lkdGggIT0gd2lkdGggfHwKKyAgICAgICAgbUhlaWdodCAhPSBoZWlnaHQgfHwKKyAgICAgICAg
bUludGVybmFsRm9ybWF0ICE9IGludGVybmFsZm9ybWF0IHx8CisgICAgICAgIGZvcmNlUmVsZWFz
ZSkKKyAgICB7CisgICAgICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShy
ZW5kZXJlcik7CisKKyAgICAgICAgbVdpZHRoID0gd2lkdGg7CisgICAgICAgIG1IZWlnaHQgPSBo
ZWlnaHQ7CisgICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGludGVybmFsZm9ybWF0OworICAgICAg
ICAvLyBjb21wdXRlIHRoZSBkM2QgZm9ybWF0IHRoYXQgd2lsbCBiZSB1c2VkCisgICAgICAgIG1E
M0RGb3JtYXQgPSBtUmVuZGVyZXItPkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoaW50ZXJu
YWxmb3JtYXQpOworICAgICAgICBtQWN0dWFsRm9ybWF0ID0gZDNkOV9nbDo6R2V0RXF1aXZhbGVu
dEZvcm1hdChtRDNERm9ybWF0KTsKKworICAgICAgICBpZiAobVN1cmZhY2UpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1TdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICBtU3VyZmFjZSA9
IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSW1hZ2U5OjpjcmVhdGVTdXJmYWNlKCkKK3sKKyAgICBp
ZihtU3VyZmFjZSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJRGlyZWN0
M0RUZXh0dXJlOSAqbmV3VGV4dHVyZSA9IE5VTEw7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm5l
d1N1cmZhY2UgPSBOVUxMOworICAgIGNvbnN0IEQzRFBPT0wgcG9vbFRvVXNlID0gRDNEUE9PTF9T
WVNURU1NRU07CisgICAgY29uc3QgRDNERk9STUFUIGQzZEZvcm1hdCA9IGdldEQzREZvcm1hdCgp
OworICAgIEFTU0VSVChkM2RGb3JtYXQgIT0gRDNERk1UX0lOVFopOyAvLyBXZSBzaG91bGQgbmV2
ZXIgZ2V0IGhlcmUgZm9yIGRlcHRoIHRleHR1cmVzCisKKyAgICBpZiAobVdpZHRoICE9IDAgJiYg
bUhlaWdodCAhPSAwKQorICAgIHsKKyAgICAgICAgaW50IGxldmVsVG9GZXRjaCA9IDA7CisgICAg
ICAgIEdMc2l6ZWkgcmVxdWVzdFdpZHRoID0gbVdpZHRoOworICAgICAgICBHTHNpemVpIHJlcXVl
c3RIZWlnaHQgPSBtSGVpZ2h0OworICAgICAgICBnbDo6TWFrZVZhbGlkU2l6ZSh0cnVlLCBnbDo6
SXNDb21wcmVzc2VkKG1JbnRlcm5hbEZvcm1hdCksICZyZXF1ZXN0V2lkdGgsICZyZXF1ZXN0SGVp
Z2h0LCAmbGV2ZWxUb0ZldGNoKTsKKworICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2Ug
PSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2
aWNlLT5DcmVhdGVUZXh0dXJlKHJlcXVlc3RXaWR0aCwgcmVxdWVzdEhlaWdodCwgbGV2ZWxUb0Zl
dGNoICsgMSwgMCwgZDNkRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBvb2xUb1VzZSwgJm5ld1RleHR1cmUsIE5VTEwpOworCisgICAg
ICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJl
c3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9S
WSk7CisgICAgICAgICAgICBFUlIoIkNyZWF0aW5nIGltYWdlIHN1cmZhY2UgZmFpbGVkLiIpOwor
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAg
fQorCisgICAgICAgIG5ld1RleHR1cmUtPkdldFN1cmZhY2VMZXZlbChsZXZlbFRvRmV0Y2gsICZu
ZXdTdXJmYWNlKTsKKyAgICAgICAgbmV3VGV4dHVyZS0+UmVsZWFzZSgpOworICAgIH0KKworICAg
IG1TdXJmYWNlID0gbmV3U3VyZmFjZTsKKyAgICBtRGlydHkgPSBmYWxzZTsKKyAgICBtRDNEUG9v
bCA9IHBvb2xUb1VzZTsKK30KKworSFJFU1VMVCBJbWFnZTk6OmxvY2soRDNETE9DS0VEX1JFQ1Qg
KmxvY2tlZFJlY3QsIGNvbnN0IFJFQ1QgKnJlY3QpCit7CisgICAgY3JlYXRlU3VyZmFjZSgpOwor
CisgICAgSFJFU1VMVCByZXN1bHQgPSBEM0RFUlJfSU5WQUxJRENBTEw7CisKKyAgICBpZiAobVN1
cmZhY2UpCisgICAgeworICAgICAgICByZXN1bHQgPSBtU3VyZmFjZS0+TG9ja1JlY3QobG9ja2Vk
UmVjdCwgcmVjdCwgMCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAg
ICAgICAgbURpcnR5ID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIEltYWdlOTo6dW5sb2NrKCkKK3sKKyAgICBpZiAobVN1cmZhY2UpCisgICAgeworICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IG1TdXJmYWNlLT5VbmxvY2tSZWN0KCk7CisgICAgICAgIEFTU0VS
VChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgfQorfQorCitib29sIEltYWdlOTo6aXNSZW5kZXJh
YmxlRm9ybWF0KCkgY29uc3QKK3sgICAgCisgICAgcmV0dXJuIFRleHR1cmVTdG9yYWdlOTo6SXNU
ZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShnZXREM0RGb3JtYXQoKSk7Cit9CisKK0QzREZPUk1BVCBJ
bWFnZTk6OmdldEQzREZvcm1hdCgpIGNvbnN0Cit7CisgICAgLy8gdGhpcyBzaG91bGQgb25seSBo
YXBwZW4gaWYgdGhlIGltYWdlIGhhc24ndCBiZWVuIHJlZGVmaW5lZCBmaXJzdAorICAgIC8vIHdo
aWNoIHdvdWxkIGJlIGEgYnVnIGJ5IHRoZSBjYWxsZXIKKyAgICBBU1NFUlQobUQzREZvcm1hdCAh
PSBEM0RGTVRfVU5LTk9XTik7CisKKyAgICByZXR1cm4gbUQzREZvcm1hdDsKK30KKworSURpcmVj
dDNEU3VyZmFjZTkgKkltYWdlOTo6Z2V0U3VyZmFjZSgpCit7CisgICAgY3JlYXRlU3VyZmFjZSgp
OworCisgICAgcmV0dXJuIG1TdXJmYWNlOworfQorCit2b2lkIEltYWdlOTo6c2V0TWFuYWdlZFN1
cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsKQorewor
ICAgIFRleHR1cmVTdG9yYWdlOV8yRCAqc3RvcmFnZTkgPSBUZXh0dXJlU3RvcmFnZTlfMkQ6Om1h
a2VUZXh0dXJlU3RvcmFnZTlfMkQoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAg
IHNldE1hbmFnZWRTdXJmYWNlKHN0b3JhZ2U5LT5nZXRTdXJmYWNlTGV2ZWwobGV2ZWwsIGZhbHNl
KSk7Cit9CisKK3ZvaWQgSW1hZ2U5OjpzZXRNYW5hZ2VkU3VyZmFjZShUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2ZWwpCit7CisgICAgVGV4dHVy
ZVN0b3JhZ2U5X0N1YmUgKnN0b3JhZ2U5ID0gVGV4dHVyZVN0b3JhZ2U5X0N1YmU6Om1ha2VUZXh0
dXJlU3RvcmFnZTlfQ3ViZShzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CisgICAgc2V0
TWFuYWdlZFN1cmZhY2Uoc3RvcmFnZTktPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsLCBmYWxzZSkpOworfQorCit2b2lkIEltYWdl
OTo6c2V0TWFuYWdlZFN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UpCit7CisgICAg
RDNEU1VSRkFDRV9ERVNDIGRlc2M7CisgICAgc3VyZmFjZS0+R2V0RGVzYygmZGVzYyk7CisgICAg
QVNTRVJUKGRlc2MuUG9vbCA9PSBEM0RQT09MX01BTkFHRUQpOworCisgICAgaWYgKChHTHNpemVp
KWRlc2MuV2lkdGggPT0gbVdpZHRoICYmIChHTHNpemVpKWRlc2MuSGVpZ2h0ID09IG1IZWlnaHQp
CisgICAgeworICAgICAgICBpZiAobVN1cmZhY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNv
cHlMb2NrYWJsZVN1cmZhY2VzKHN1cmZhY2UsIG1TdXJmYWNlKTsKKyAgICAgICAgICAgIG1TdXJm
YWNlLT5SZWxlYXNlKCk7CisgICAgICAgIH0KKworICAgICAgICBtU3VyZmFjZSA9IHN1cmZhY2U7
CisgICAgICAgIG1EM0RQb29sID0gZGVzYy5Qb29sOworICAgIH0KK30KKworYm9vbCBJbWFnZTk6
OnVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxl
dmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCkKK3sKKyAgICBBU1NFUlQoZ2V0U3VyZmFjZSgpICE9IE5VTEwpOworICAgIFRleHR1
cmVTdG9yYWdlOV8yRCAqc3RvcmFnZTkgPSBUZXh0dXJlU3RvcmFnZTlfMkQ6Om1ha2VUZXh0dXJl
U3RvcmFnZTlfMkQoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAgIHJldHVybiB1
cGRhdGVTdXJmYWNlKHN0b3JhZ2U5LT5nZXRTdXJmYWNlTGV2ZWwobGV2ZWwsIHRydWUpLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKK30KKworYm9vbCBJbWFnZTk6OnVwZGF0ZVN1
cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCkKK3sKKyAgICBBU1NFUlQoZ2V0U3VyZmFjZSgpICE9IE5VTEwpOworICAgIFRl
eHR1cmVTdG9yYWdlOV9DdWJlICpzdG9yYWdlOSA9IFRleHR1cmVTdG9yYWdlOV9DdWJlOjptYWtl
VGV4dHVyZVN0b3JhZ2U5X0N1YmUoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAg
IHJldHVybiB1cGRhdGVTdXJmYWNlKHN0b3JhZ2U5LT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCwgdHJ1ZSksIHhvZmZzZXQsIHlv
ZmZzZXQsIHdpZHRoLCBoZWlnaHQpOworfQorCitib29sIEltYWdlOTo6dXBkYXRlU3VyZmFjZShJ
RGlyZWN0M0RTdXJmYWNlOSAqZGVzdFN1cmZhY2UsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIGlmICghZGVzdFN1cmZh
Y2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzb3Vy
Y2VTdXJmYWNlID0gZ2V0U3VyZmFjZSgpOworCisgICAgaWYgKHNvdXJjZVN1cmZhY2UgJiYgc291
cmNlU3VyZmFjZSAhPSBkZXN0U3VyZmFjZSkKKyAgICB7CisgICAgICAgIFJFQ1QgcmVjdDsKKyAg
ICAgICAgcmVjdC5sZWZ0ID0geG9mZnNldDsKKyAgICAgICAgcmVjdC50b3AgPSB5b2Zmc2V0Owor
ICAgICAgICByZWN0LnJpZ2h0ID0geG9mZnNldCArIHdpZHRoOworICAgICAgICByZWN0LmJvdHRv
bSA9IHlvZmZzZXQgKyBoZWlnaHQ7CisKKyAgICAgICAgUE9JTlQgcG9pbnQgPSB7cmVjdC5sZWZ0
LCByZWN0LnRvcH07CisKKyAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRl
cmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICBpZiAobUQzRFBvb2wgPT0gRDNEUE9PTF9NQU5B
R0VEKQorICAgICAgICB7CisgICAgICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKKyAgICAg
ICAgICAgIHNvdXJjZVN1cmZhY2UtPkdldERlc2MoJmRlc2MpOworCisgICAgICAgICAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqc3VyZiA9IDA7CisgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRl
dmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0
LCBkZXNjLkZvcm1hdCwgRDNEUE9PTF9TWVNURU1NRU0sICZzdXJmLCBOVUxMKTsKKworICAgICAg
ICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGNvcHlMb2NrYWJsZVN1cmZhY2VzKHN1cmYsIHNvdXJjZVN1cmZhY2UpOworICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IGRldmljZS0+VXBkYXRlU3VyZmFjZShzdXJmLCAmcmVjdCwgZGVzdFN1
cmZhY2UsICZwb2ludCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKKyAgICAgICAgICAgICAgICBzdXJmLT5SZWxlYXNlKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBVcGRhdGVTdXJm
YWNlOiBzb3VyY2UgbXVzdCBiZSBTWVNURU1NRU0sIGRlc3QgbXVzdCBiZSBERUZBVUxUIHBvb2xz
IAorICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPlVwZGF0ZVN1cmZhY2Uoc291
cmNlU3VyZmFjZSwgJnJlY3QsIGRlc3RTdXJmYWNlLCAmcG9pbnQpOworICAgICAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGRlc3RTdXJm
YWNlLT5SZWxlYXNlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIFN0b3JlIHRoZSBwaXhl
bCByZWN0YW5nbGUgZGVzaWduYXRlZCBieSB4b2Zmc2V0LHlvZmZzZXQsd2lkdGgsaGVpZ2h0IHdp
dGggcGl4ZWxzIHN0b3JlZCBhcyBmb3JtYXQvdHlwZSBhdCBpbnB1dAorLy8gaW50byB0aGUgdGFy
Z2V0IHBpeGVsIHJlY3RhbmdsZS4KK3ZvaWQgSW1hZ2U5Ojpsb2FkRGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAg
ICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0KQor
eworICAgIFJFQ1QgbG9ja1JlY3QgPQorICAgIHsKKyAgICAgICAgeG9mZnNldCwgeW9mZnNldCwK
KyAgICAgICAgeG9mZnNldCArIHdpZHRoLCB5b2Zmc2V0ICsgaGVpZ2h0CisgICAgfTsKKworICAg
IEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGxvY2soJmxvY2tl
ZCwgJmxvY2tSZWN0KTsKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisKKyAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSBnbDo6Q29tcHV0ZVBp
dGNoKHdpZHRoLCBtSW50ZXJuYWxGb3JtYXQsIHVucGFja0FsaWdubWVudCk7CisKKyAgICBzd2l0
Y2ggKG1JbnRlcm5hbEZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEdMX0FMUEhBOF9FWFQ6Cisg
ICAgICAgIGlmIChnbDo6c3VwcG9ydHNTU0UyKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxv
YWRBbHBoYURhdGFUb0JHUkFTU0UyKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBs
b2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICBsb2FkQWxwaGFEYXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRThfRVhUOgorICAgICAgICBs
b2FkTHVtaW5hbmNlRGF0YVRvTmF0aXZlT3JCR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cywgZ2V0RDNERm9ybWF0KCkgPT0gRDNE
Rk1UX0w4KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0FMUEhBMzJGX0VYVDoKKyAg
ICAgICAgbG9hZEFscGhhRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9MVU1JTkFOQ0UzMkZfRVhUOgorICAgICAgICBsb2FkTHVtaW5hbmNlRmxvYXRE
YXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gs
IGxvY2tlZC5wQml0cyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9BTFBIQTE2Rl9F
WFQ6CisgICAgICAgIGxvYWRBbHBoYUhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6CisgICAgICAgIGxvYWRMdW1p
bmFuY2VIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0
LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQ6CisgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYURh
dGFUb05hdGl2ZU9yQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2Vk
LlBpdGNoLCBsb2NrZWQucEJpdHMsIGdldEQzREZvcm1hdCgpID09IEQzREZNVF9BOEw4KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQ6CisgICAg
ICAgIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOworICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVDoKKyAgICAgICAgbG9hZEx1
bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNo
LCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOworICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfUkdCOF9PRVM6CisgICAgICAgIGxvYWRSR0JVQnl0ZURhdGFUb0JHUlgod2lk
dGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRz
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JHQjU2NToKKyAgICAgICAgbG9hZFJH
QjU2NURhdGFUb0JHUkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5Q
aXRjaCwgbG9ja2VkLnBCaXRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JHQkE4
X09FUzoKKyAgICAgICAgaWYgKGdsOjpzdXBwb3J0c1NTRTIoKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgbG9hZFJHQkFVQnl0ZURhdGFUb0JHUkFTU0UyKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBsb2FkUkdCQVVCeXRlRGF0YVRvQkdSQSh3
aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJp
dHMpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9SR0JBNDoKKyAg
ICAgICAgbG9hZFJHQkE0NDQ0RGF0YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOworICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfUkdCNV9BMToKKyAgICAgICAgbG9hZFJHQkE1NTUxRGF0YVRvQkdSQSh3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkdSQThfRVhUOgorICAgICAgICBsb2FkQkdS
QURhdGFUb0JHUkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRj
aCwgbG9ja2VkLnBCaXRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAvLyBmbG9hdCB0ZXh0dXJl
cyBhcmUgY29udmVydGVkIHRvIFJHQkEsIG5vdCBCR1JBLCBhcyB0aGV5J3JlIHN0b3JlZCB0aGF0
IHdheSBpbiBEM0QKKyAgICAgIGNhc2UgR0xfUkdCMzJGX0VYVDoKKyAgICAgICAgbG9hZFJHQkZs
b2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBp
dGNoLCBsb2NrZWQucEJpdHMpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUkdCMTZG
X0VYVDoKKyAgICAgICAgbG9hZFJHQkhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX1JHQkEzMkZfRVhUOgorICAgICAgICBsb2FkUkdCQUZsb2F0
RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNo
LCBsb2NrZWQucEJpdHMpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUkdCQTE2Rl9F
WFQ6CisgICAgICAgIGxvYWRSR0JBSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBp
bnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOworICAgICAgICBi
cmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IAorICAgIH0KKworICAgIHVubG9j
aygpOworfQorCit2b2lkIEltYWdlOTo6bG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dCkKK3sKKyAgICBBU1NFUlQo
eG9mZnNldCAlIDQgPT0gMCk7CisgICAgQVNTRVJUKHlvZmZzZXQgJSA0ID09IDApOworCisgICAg
UkVDVCBsb2NrUmVjdCA9IHsKKyAgICAgICAgeG9mZnNldCwgeW9mZnNldCwKKyAgICAgICAgeG9m
ZnNldCArIHdpZHRoLCB5b2Zmc2V0ICsgaGVpZ2h0CisgICAgfTsKKworICAgIEQzRExPQ0tFRF9S
RUNUIGxvY2tlZDsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGxvY2soJmxvY2tlZCwgJmxvY2tSZWN0
KTsKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgR0xzaXplaSBpbnB1dFNpemUgPSBnbDo6Q29tcHV0ZUNvbXByZXNzZWRTaXplKHdp
ZHRoLCBoZWlnaHQsIG1JbnRlcm5hbEZvcm1hdCk7CisgICAgR0xzaXplaSBpbnB1dFBpdGNoID0g
Z2w6OkNvbXB1dGVDb21wcmVzc2VkUGl0Y2god2lkdGgsIG1JbnRlcm5hbEZvcm1hdCk7CisgICAg
aW50IHJvd3MgPSBpbnB1dFNpemUgLyBpbnB1dFBpdGNoOworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgcm93czsgKytpKQorICAgIHsKKyAgICAgICAgbWVtY3B5KCh2b2lkKikoKEJZVEUqKWxvY2tl
ZC5wQml0cyArIGkgKiBsb2NrZWQuUGl0Y2gpLCAodm9pZCopKChCWVRFKilpbnB1dCArIGkgKiBp
bnB1dFBpdGNoKSwgaW5wdXRQaXRjaCk7CisgICAgfQorCisgICAgdW5sb2NrKCk7Cit9CisKKy8v
IFRoaXMgaW1wbGVtZW50cyBnbENvcHlUZXhbU3ViXUltYWdlMkQgZm9yIG5vbi1yZW5kZXJhYmxl
IGludGVybmFsIHRleHR1cmUgZm9ybWF0cyBhbmQgaW5jb21wbGV0ZSB0ZXh0dXJlcwordm9pZCBJ
bWFnZTk6OmNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAqc291cmNl
KQoreworICAgIFJlbmRlclRhcmdldDkgKnJlbmRlclRhcmdldCA9IE5VTEw7CisgICAgSURpcmVj
dDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOworICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9y
YnVmZmVyID0gc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigwKTsKKworICAgIGlmIChjb2xvcmJ1ZmZl
cikKKyAgICB7CisgICAgICAgIHJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDk6Om1ha2VSZW5k
ZXJUYXJnZXQ5KGNvbG9yYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSk7CisgICAgfQorICAgIAor
ICAgIGlmIChyZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBzdXJmYWNlID0gcmVuZGVyVGFy
Z2V0LT5nZXRTdXJmYWNlKCk7CisgICAgfQorCisgICAgaWYgKCFzdXJmYWNlKQorICAgIHsKKyAg
ICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQuIik7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorCisgICAgSURp
cmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXREYXRhID0gTlVMTDsKKyAgICBEM0RTVVJGQUNF
X0RFU0MgZGVzY3JpcHRpb247CisgICAgc3VyZmFjZS0+R2V0RGVzYygmZGVzY3JpcHRpb24pOwor
ICAgIAorICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVPZmZzY3JlZW5QbGFpblN1
cmZhY2UoZGVzY3JpcHRpb24uV2lkdGgsIGRlc2NyaXB0aW9uLkhlaWdodCwgZGVzY3JpcHRpb24u
Rm9ybWF0LCBEM0RQT09MX1NZU1RFTU1FTSwgJnJlbmRlclRhcmdldERhdGEsIE5VTEwpOworCisg
ICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJDb3VsZCBub3QgY3Jl
YXRlIG1hdGNoaW5nIGRlc3RpbmF0aW9uIHN1cmZhY2UuIik7CisgICAgICAgIHN1cmZhY2UtPlJl
bGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9CisKKyAgICByZXN1bHQgPSBkZXZpY2UtPkdldFJlbmRlclRhcmdldERhdGEoc3VyZmFjZSwg
cmVuZGVyVGFyZ2V0RGF0YSk7CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAg
ICAgICBFUlIoIkdldFJlbmRlclRhcmdldERhdGEgdW5leHBlY3RlZGx5IGZhaWxlZC4iKTsKKyAg
ICAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgpOworICAgICAgICBzdXJmYWNlLT5SZWxl
YXNlKCk7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAg
fQorCisgICAgUkVDVCBzb3VyY2VSZWN0ID0ge3gsIHksIHggKyB3aWR0aCwgeSArIGhlaWdodH07
CisgICAgUkVDVCBkZXN0UmVjdCA9IHt4b2Zmc2V0LCB5b2Zmc2V0LCB4b2Zmc2V0ICsgd2lkdGgs
IHlvZmZzZXQgKyBoZWlnaHR9OworCisgICAgRDNETE9DS0VEX1JFQ1Qgc291cmNlTG9jayA9IHsw
fTsKKyAgICByZXN1bHQgPSByZW5kZXJUYXJnZXREYXRhLT5Mb2NrUmVjdCgmc291cmNlTG9jaywg
JnNvdXJjZVJlY3QsIDApOworCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAg
ICAgRVJSKCJGYWlsZWQgdG8gbG9jayB0aGUgc291cmNlIHN1cmZhY2UgKHJlY3RhbmdsZSBtaWdo
dCBiZSBpbnZhbGlkKS4iKTsKKyAgICAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgpOwor
ICAgICAgICBzdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgfQorCisgICAgRDNETE9DS0VEX1JFQ1QgZGVzdExvY2sgPSB7
MH07CisgICAgcmVzdWx0ID0gbG9jaygmZGVzdExvY2ssICZkZXN0UmVjdCk7CisgICAgCisgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gbG9jayB0
aGUgZGVzdGluYXRpb24gc3VyZmFjZSAocmVjdGFuZ2xlIG1pZ2h0IGJlIGludmFsaWQpLiIpOwor
ICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5VbmxvY2tSZWN0KCk7CisgICAgICAgIHJlbmRlclRh
cmdldERhdGEtPlJlbGVhc2UoKTsKKyAgICAgICAgc3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KKworICAgIGlmIChk
ZXN0TG9jay5wQml0cyAmJiBzb3VyY2VMb2NrLnBCaXRzKQorICAgIHsKKyAgICAgICAgdW5zaWdu
ZWQgY2hhciAqc291cmNlID0gKHVuc2lnbmVkIGNoYXIqKXNvdXJjZUxvY2sucEJpdHM7CisgICAg
ICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSAodW5zaWduZWQgY2hhciopZGVzdExvY2sucEJpdHM7
CisKKyAgICAgICAgc3dpdGNoIChkZXNjcmlwdGlvbi5Gb3JtYXQpCisgICAgICAgIHsKKyAgICAg
ICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKKyAgICAgICAgICBjYXNlIEQzREZNVF9BOFI4RzhC
ODoKKyAgICAgICAgICAgIHN3aXRjaChnZXREM0RGb3JtYXQoKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6CisgICAgICAgICAgICAgIGNhc2UgRDNE
Rk1UX0E4UjhHOEI4OgorICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7
IHkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1lbWNweShkZXN0
LCBzb3VyY2UsIDQgKiB3aWR0aCk7CisKKyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNv
dXJjZUxvY2suUGl0Y2g7CisgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0
Y2g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEQzREZNVF9MODoKKyAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwg
aGVpZ2h0OyB5KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmb3Io
aW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFt4XSA9IHNvdXJjZVt4ICogNCArIDJdOworICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2su
UGl0Y2g7CisgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEQzREZNVF9BOEw4OgorICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7
IHkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9
IDA7IHggPCB3aWR0aDsgeCsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBkZXN0W3ggKiAyICsgMF0gPSBzb3VyY2VbeCAqIDQgKyAyXTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RbeCAqIDIgKyAxXSA9IHNvdXJjZVt4ICogNCArIDNdOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJj
ZUxvY2suUGl0Y2g7CisgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6CisgICAg
ICAgICAgICBzd2l0Y2goZ2V0RDNERm9ybWF0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgorICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7
IHkgPCBoZWlnaHQ7IHkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2IgPSAoKHVuc2lnbmVkIHNo
b3J0Kilzb3VyY2UpW3hdOworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBy
ZWQgPSAocmdiICYgMHhGODAwKSA+PiA4OworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgY2hhciBncmVlbiA9IChyZ2IgJiAweDA3RTApID4+IDM7CisgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBjaGFyIGJsdWUgPSAocmdiICYgMHgwMDFGKSA8PCAzOworICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdFt4ICsgMF0gPSBibHVlIHwgKGJsdWUgPj4gNSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0W3ggKyAxXSA9IGdyZWVuIHwgKGdyZWVuID4+IDYpOworICAg
ICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICsgMl0gPSByZWQgfCAocmVkID4+IDUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICsgM10gPSAweEZGOworICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7
CisgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEQzREZN
VF9MODoKKyAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwg
d2lkdGg7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgY2hhciByZWQgPSBzb3VyY2VbeCAqIDIgKyAxXSAmIDB4Rjg7CisgICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0W3hdID0gcmVkIHwgKHJlZCA+PiA1KTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBp
dGNoOworICAgICAgICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6CisgICAgICAgICAg
ICBzd2l0Y2goZ2V0RDNERm9ybWF0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNh
c2UgRDNERk1UX1g4UjhHOEI4OgorICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBo
ZWlnaHQ7IHkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvcihp
bnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhcmdiID0gKCh1bnNpZ25lZCBzaG9ydCop
c291cmNlKVt4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVkID0g
KGFyZ2IgJiAweDdDMDApID4+IDc7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBj
aGFyIGdyZWVuID0gKGFyZ2IgJiAweDAzRTApID4+IDI7CisgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBjaGFyIGJsdWUgPSAoYXJnYiAmIDB4MDAxRikgPDwgMzsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3RbeCArIDBdID0gYmx1ZSB8IChibHVlID4+IDUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdFt4ICsgMV0gPSBncmVlbiB8IChncmVlbiA+PiA1KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc3RbeCArIDJdID0gcmVkIHwgKHJlZCA+PiA1KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc3RbeCArIDNdID0gMHhGRjsKKyAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOwor
ICAgICAgICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRf
QThSOEc4Qjg6CisgICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsr
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsg
eCA8IHdpZHRoOyB4KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIHNob3J0IGFyZ2IgPSAoKHVuc2lnbmVkIHNob3J0Kilzb3VyY2UpW3hd
OworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZWQgPSAoYXJnYiAmIDB4
N0MwMCkgPj4gNzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZ3JlZW4g
PSAoYXJnYiAmIDB4MDNFMCkgPj4gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIgYmx1ZSA9IChhcmdiICYgMHgwMDFGKSA8PCAzOworICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgY2hhciBhbHBoYSA9IChzaWduZWQgc2hvcnQpYXJnYiA+PiAxNTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc3RbeCArIDBdID0gYmx1ZSB8IChibHVlID4+IDUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICsgMV0gPSBncmVlbiB8IChncmVlbiA+PiA1KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCArIDJdID0gcmVkIHwgKHJlZCA+PiA1KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCArIDNdID0gYWxwaGE7CisgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5Q
aXRjaDsKKyAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
RDNERk1UX0w4OgorICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkr
KykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7
IHggPCB3aWR0aDsgeCsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBjaGFyIHJlZCA9IHNvdXJjZVt4ICogMiArIDFdICYgMHg3QzsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeF0gPSAocmVkIDw8IDEpIHwgKHJlZCA+PiA0KTsK
KyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBz
b3VyY2VMb2NrLlBpdGNoOworICAgICAgICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBp
dGNoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBEM0RGTVRfQThMODoKKyAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5
IDwgaGVpZ2h0OyB5KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBm
b3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZWQgPSBzb3VyY2VbeCAqIDIgKyAx
XSAmIDB4N0M7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKiAyICsgMF0gPSAocmVk
IDw8IDEpIHwgKHJlZCA+PiA0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCAqIDIg
KyAxXSA9IChzaWduZWQgY2hhcilzb3VyY2VbeCAqIDIgKyAxXSA+PiA3OworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0
Y2g7CisgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVubG9jaygpOworICAgIHJlbmRlclRhcmdldERh
dGEtPlVubG9ja1JlY3QoKTsKKworICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsKKyAg
ICBzdXJmYWNlLT5SZWxlYXNlKCk7CisKKyAgICBtRGlydHkgPSB0cnVlOworfQorCit9ClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ltYWdlOS5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ltYWdlOS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjJmYmJjYTMxMjQzZDJhYzQ3ZDU3NDhkNWExYzdmYWY3ZDVjYTgyMDYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
SW1hZ2U5LmgKQEAgLTAsMCArMSw3OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gSW1hZ2U5
Lmg6IERlZmluZXMgdGhlIHJ4OjpJbWFnZTkgY2xhc3MsIHdoaWNoIGFjdHMgYXMgdGhlIGludGVy
ZmFjZSB0bworLy8gdGhlIGFjdHVhbCB1bmRlcmx5aW5nIHN1cmZhY2VzIG9mIGEgVGV4dHVyZS4K
KworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfSU1BR0U5X0hfCisjZGVmaW5lIExJQkdMRVNW
Ml9SRU5ERVJFUl9JTUFHRTlfSF8KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbWFn
ZS5oIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCituYW1lc3BhY2UgZ2wKK3sKK2NsYXNz
IEZyYW1lYnVmZmVyOworfQorCituYW1lc3BhY2UgcngKK3sKK2NsYXNzIFJlbmRlcmVyOworY2xh
c3MgUmVuZGVyZXI5OworY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRDsKK2NsYXNzIFRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTsKKworY2xhc3MgSW1hZ2U5IDogcHVibGljIEltYWdl
Cit7CisgIHB1YmxpYzoKKyAgICBJbWFnZTkoKTsKKyAgICB+SW1hZ2U5KCk7CisKKyAgICBzdGF0
aWMgSW1hZ2U5ICptYWtlSW1hZ2U5KEltYWdlICppbWcpOworCisgICAgc3RhdGljIHZvaWQgZ2Vu
ZXJhdGVNaXBtYXAoSW1hZ2U5ICpkZXN0LCBJbWFnZTkgKnNvdXJjZSk7CisgICAgc3RhdGljIHZv
aWQgZ2VuZXJhdGVNaXAoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJmYWNlLCBJRGlyZWN0M0RT
dXJmYWNlOSAqc291cmNlU3VyZmFjZSk7CisgICAgc3RhdGljIHZvaWQgY29weUxvY2thYmxlU3Vy
ZmFjZXMoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2Up
OworCisgICAgdmlydHVhbCBib29sIHJlZGVmaW5lKFJlbmRlcmVyICpyZW5kZXJlciwgR0xpbnQg
aW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBib29sIGZvcmNl
UmVsZWFzZSk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJhYmxlRm9ybWF0KCkgY29uc3Q7
CisgICAgRDNERk9STUFUIGdldEQzREZvcm1hdCgpIGNvbnN0OworCisgICAgdmlydHVhbCBib29s
IGlzRGlydHkoKSBjb25zdCB7cmV0dXJuIG1TdXJmYWNlICYmIG1EaXJ0eTt9CisgICAgSURpcmVj
dDNEU3VyZmFjZTkgKmdldFN1cmZhY2UoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRNYW5hZ2Vk
U3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwpOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRNYW5hZ2VkU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2ZWwpOworICAgIHZpcnR1YWwgYm9vbCB1
cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIGludCBsZXZl
bCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpOworICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgaW50IGZhY2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCisgICAgdmly
dHVhbCB2b2lkIGxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxp
Z25tZW50LCBjb25zdCB2b2lkICppbnB1dCk7CisgICAgdmlydHVhbCB2b2lkIGxvYWRDb21wcmVz
c2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZv
aWQgKmlucHV0KTsKKworICAgIHZpcnR1YWwgdm9pZCBjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oSW1hZ2U5KTsKKworICAgIHZvaWQgY3JlYXRlU3VyZmFjZSgpOworICAg
IHZvaWQgc2V0TWFuYWdlZFN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UpOworICAg
IGJvb2wgdXBkYXRlU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCisgICAg
SFJFU1VMVCBsb2NrKEQzRExPQ0tFRF9SRUNUICpsb2NrZWRSZWN0LCBjb25zdCBSRUNUICpyZWN0
KTsKKyAgICB2b2lkIHVubG9jaygpOworICAgIAorICAgIFJlbmRlcmVyOSAqbVJlbmRlcmVyOwor
CisgICAgRDNEUE9PTCBtRDNEUG9vbDsgICAvLyBjYW4gb25seSBiZSBEM0RQT09MX1NZU1RFTU1F
TSBvciBEM0RQT09MX01BTkFHRUQgc2luY2UgaXQgbmVlZHMgdG8gYmUgbG9ja2FibGUuCisgICAg
RDNERk9STUFUIG1EM0RGb3JtYXQ7CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVN1cmZhY2U7
Cit9OworfQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfUkVOREVSRVJfSU1BR0U5X0hfCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDkvSW5kZXhCdWZmZXI5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9JbmRleEJ1ZmZlcjkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdjYjVkMTNhMThi
NzQ4MDBjMGNhNDNmNzhiZDgxNWU5NDk5OWQ0MWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW5kZXhCdWZmZXI5
LmNwcApAQCAtMCwwICsxLDIwNyBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisvLyBJbmRleGZmZXI5LmNwcDogRGVmaW5lcyB0aGUgRDNEOSBJbmRleEJ1
ZmZlciBpbXBsZW1lbnRhdGlvbi4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L0luZGV4QnVmZmVyOS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRl
cmVyOS5oIgorCituYW1lc3BhY2UgcngKK3sKKworSW5kZXhCdWZmZXI5OjpJbmRleEJ1ZmZlcjko
UmVuZGVyZXI5ICpjb25zdCByZW5kZXJlcikgOiBtUmVuZGVyZXIocmVuZGVyZXIpCit7CisgICAg
bUluZGV4QnVmZmVyID0gTlVMTDsKKyAgICBtQnVmZmVyU2l6ZSA9IDA7CisgICAgbUluZGV4VHlw
ZSA9IDA7CisgICAgbUR5bmFtaWMgPSBmYWxzZTsKK30KKworSW5kZXhCdWZmZXI5Ojp+SW5kZXhC
dWZmZXI5KCkKK3sKKyAgICBpZiAobUluZGV4QnVmZmVyKQorICAgIHsKKyAgICAgICAgbUluZGV4
QnVmZmVyLT5SZWxlYXNlKCk7CisgICAgICAgIG1JbmRleEJ1ZmZlciA9IE5VTEw7CisgICAgfQor
fQorCitib29sIEluZGV4QnVmZmVyOTo6aW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgYnVmZmVyU2l6
ZSwgR0xlbnVtIGluZGV4VHlwZSwgYm9vbCBkeW5hbWljKQoreworICAgIGlmIChtSW5kZXhCdWZm
ZXIpCisgICAgeworICAgICAgICBtSW5kZXhCdWZmZXItPlJlbGVhc2UoKTsKKyAgICAgICAgbUlu
ZGV4QnVmZmVyID0gTlVMTDsKKyAgICB9CisKKyAgICB1cGRhdGVTZXJpYWwoKTsKKworICAgIGlm
IChidWZmZXJTaXplID4gMCkKKyAgICB7CisgICAgICAgIEQzREZPUk1BVCBmb3JtYXQ7CisgICAg
ICAgIGlmIChpbmRleFR5cGUgPT0gR0xfVU5TSUdORURfU0hPUlQgfHwgaW5kZXhUeXBlID09IEdM
X1VOU0lHTkVEX0JZVEUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvcm1hdCA9IEQzREZNVF9J
TkRFWDE2OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGluZGV4VHlwZSA9PSBHTF9VTlNJ
R05FRF9JTlQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtUmVuZGVyZXItPmdldDMyQml0
SW5kZXhTdXBwb3J0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9ybWF0ID0g
RDNERk1UX0lOREVYMzI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgRVJSKCJBdHRlbXB0ZWQgdG8gY3JlYXRlIGEgMzItYml0
IGluZGV4IGJ1ZmZlciBidXQgcmVuZGVyZXIgZG9lcyBub3Qgc3VwcG9ydCAzMi1iaXQgaW5kaWNl
cy4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkludmFsaWQg
aW5kZXggdHlwZSAldS4iLCBpbmRleFR5cGUpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgRFdPUkQgdXNhZ2VGbGFncyA9IEQzRFVTQUdFX1dSSVRFT05M
WTsKKyAgICAgICAgaWYgKGR5bmFtaWMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVzYWdlRmxh
Z3MgfD0gRDNEVVNBR0VfRFlOQU1JQzsKKyAgICAgICAgfQorCisgICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gbVJlbmRlcmVyLT5jcmVhdGVJbmRleEJ1ZmZlcihidWZmZXJTaXplLCB1c2FnZUZsYWdz
LCBmb3JtYXQsICZtSW5kZXhCdWZmZXIpOworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIGNyZWF0ZSBhbiBpbmRleCBidWZm
ZXIgb2Ygc2l6ZSAldSwgcmVzdWx0OiAweCUwOHguIiwgbUJ1ZmZlclNpemUsIHJlc3VsdCk7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtQnVmZmVy
U2l6ZSA9IGJ1ZmZlclNpemU7CisgICAgbUluZGV4VHlwZSA9IGluZGV4VHlwZTsKKyAgICBtRHlu
YW1pYyA9IGR5bmFtaWM7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworSW5kZXhCdWZmZXI5ICpJ
bmRleEJ1ZmZlcjk6Om1ha2VJbmRleEJ1ZmZlcjkoSW5kZXhCdWZmZXIgKmluZGV4QnVmZmVyKQor
eworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKEluZGV4QnVmZmVyOSosIGluZGV4QnVmZmVy
KSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEluZGV4QnVmZmVyOSo+KGluZGV4QnVmZmVyKTsK
K30KKworYm9vbCBJbmRleEJ1ZmZlcjk6Om1hcEJ1ZmZlcih1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1
bnNpZ25lZCBpbnQgc2l6ZSwgdm9pZCoqIG91dE1hcHBlZE1lbW9yeSkKK3sKKyAgICBpZiAobUlu
ZGV4QnVmZmVyKQorICAgIHsKKyAgICAgICAgRFdPUkQgbG9ja0ZsYWdzID0gbUR5bmFtaWMgPyBE
M0RMT0NLX05PT1ZFUldSSVRFIDogMDsKKworICAgICAgICB2b2lkICptYXBQdHIgPSBOVUxMOwor
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1JbmRleEJ1ZmZlci0+TG9jayhvZmZzZXQsIHNpemUs
ICZtYXBQdHIsIGxvY2tGbGFncyk7CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAg
ICAgeworICAgICAgICAgICAgRVJSKCJJbmRleCBidWZmZXIgbG9jayBmYWlsZWQgd2l0aCBlcnJv
ciAweCUwOHgiLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisKKyAgICAgICAgKm91dE1hcHBlZE1lbW9yeSA9IG1hcFB0cjsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEVSUigiSW5kZXggYnVmZmVyIG5v
dCBpbml0aWFsaXplZC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9v
bCBJbmRleEJ1ZmZlcjk6OnVubWFwQnVmZmVyKCkKK3sKKyAgICBpZiAobUluZGV4QnVmZmVyKQor
ICAgIHsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtSW5kZXhCdWZmZXItPlVubG9jaygpOwor
ICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigi
SW5kZXggYnVmZmVyIHVubG9jayBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgiLCByZXN1bHQpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEVSUigiSW5kZXggYnVmZmVyIG5v
dCBpbml0aWFsaXplZC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworR0xl
bnVtIEluZGV4QnVmZmVyOTo6Z2V0SW5kZXhUeXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUlu
ZGV4VHlwZTsKK30KKwordW5zaWduZWQgaW50IEluZGV4QnVmZmVyOTo6Z2V0QnVmZmVyU2l6ZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1CdWZmZXJTaXplOworfQorCitib29sIEluZGV4QnVmZmVy
OTo6c2V0U2l6ZSh1bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSwgR0xlbnVtIGluZGV4VHlwZSkKK3sK
KyAgICBpZiAoYnVmZmVyU2l6ZSA+IG1CdWZmZXJTaXplIHx8IGluZGV4VHlwZSAhPSBtSW5kZXhU
eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluaXRpYWxpemUoYnVmZmVyU2l6ZSwgaW5kZXhU
eXBlLCBtRHluYW1pYyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KK30KKworYm9vbCBJbmRleEJ1ZmZlcjk6OmRpc2NhcmQoKQoreworICAgIGlm
IChtSW5kZXhCdWZmZXIpCisgICAgeworICAgICAgICB2b2lkICpkdW1teTsKKyAgICAgICAgSFJF
U1VMVCByZXN1bHQ7CisKKyAgICAgICAgcmVzdWx0ID0gbUluZGV4QnVmZmVyLT5Mb2NrKDAsIDEs
ICZkdW1teSwgRDNETE9DS19ESVNDQVJEKTsKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQor
ICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkRpc2NhcmQgbG9jayBmYWlsZWQgd2l0aCBlcnJv
ciAweCUwOHgiLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisKKyAgICAgICAgcmVzdWx0ID0gbUluZGV4QnVmZmVyLT5VbmxvY2soKTsKKyAgICAgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkRpc2NhcmQgdW5s
b2NrIGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgRVJSKCJJbmRleCBidWZmZXIgbm90IGluaXRpYWxpemVkLiIp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitEM0RGT1JNQVQgSW5kZXhCdWZm
ZXI5OjpnZXRJbmRleEZvcm1hdCgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtSW5kZXhUeXBlKQor
ICAgIHsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURTogICAgcmV0dXJuIEQzREZNVF9JTkRF
WDE2OworICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDogICByZXR1cm4gRDNERk1UX0lOREVY
MTY7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDogICAgIHJldHVybiBEM0RGTVRfSU5ERVgz
MjsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgcmV0dXJuIEQzREZNVF9VTktOT1dO
OworICAgIH0KK30KKworSURpcmVjdDNESW5kZXhCdWZmZXI5ICogSW5kZXhCdWZmZXI5OjpnZXRC
dWZmZXIoKSBjb25zdAoreworICAgIHJldHVybiBtSW5kZXhCdWZmZXI7Cit9CisKK30KXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW5kZXhCdWZmZXI5LmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW5kZXhCdWZmZXI5LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNjgwMTg2NzUzMjQ1NTczYjM3YTg4ZDlhNWRkYWY1YzQwNzRlMGUyNwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9JbmRleEJ1ZmZlcjkuaApAQCAtMCwwICsxLDUzIEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisvLyBJbmRleGZmZXI5Lmg6IERlZmluZXMgdGhlIEQzRDkgSW5kZXhCdWZmZXIgaW1w
bGVtZW50YXRpb24uCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0lOREVYQlVGRkVSOV9I
XworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfSU5ERVhCVUZGRVI5X0hfCisKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhCdWZmZXIuaCIKKworbmFtZXNwYWNlIHJ4Cit7Citj
bGFzcyBSZW5kZXJlcjk7CisKK2NsYXNzIEluZGV4QnVmZmVyOSA6IHB1YmxpYyBJbmRleEJ1ZmZl
cgoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgSW5kZXhCdWZmZXI5KFJlbmRlcmVyOSAqY29u
c3QgcmVuZGVyZXIpOworICAgIHZpcnR1YWwgfkluZGV4QnVmZmVyOSgpOworCisgICAgdmlydHVh
bCBib29sIGluaXRpYWxpemUodW5zaWduZWQgaW50IGJ1ZmZlclNpemUsIEdMZW51bSBpbmRleFR5
cGUsIGJvb2wgZHluYW1pYyk7CisKKyAgICBzdGF0aWMgSW5kZXhCdWZmZXI5ICptYWtlSW5kZXhC
dWZmZXI5KEluZGV4QnVmZmVyICppbmRleEJ1ZmZlcik7CisKKyAgICB2aXJ0dWFsIGJvb2wgbWFw
QnVmZmVyKHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBzaXplLCB2b2lkKiogb3V0
TWFwcGVkTWVtb3J5KTsKKyAgICB2aXJ0dWFsIGJvb2wgdW5tYXBCdWZmZXIoKTsKKworICAgIHZp
cnR1YWwgR0xlbnVtIGdldEluZGV4VHlwZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQg
aW50IGdldEJ1ZmZlclNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0U2l6ZSh1bnNp
Z25lZCBpbnQgYnVmZmVyU2l6ZSwgR0xlbnVtIGluZGV4VHlwZSk7CisKKyAgICB2aXJ0dWFsIGJv
b2wgZGlzY2FyZCgpOworCisgICAgRDNERk9STUFUIGdldEluZGV4Rm9ybWF0KCkgY29uc3Q7Cisg
ICAgSURpcmVjdDNESW5kZXhCdWZmZXI5ICpnZXRCdWZmZXIoKSBjb25zdDsKKworICBwcml2YXRl
OgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihJbmRleEJ1ZmZlcjkpOworCisgICAgcng6
OlJlbmRlcmVyOSAqY29uc3QgbVJlbmRlcmVyOworCisgICAgSURpcmVjdDNESW5kZXhCdWZmZXI5
ICptSW5kZXhCdWZmZXI7CisgICAgdW5zaWduZWQgaW50IG1CdWZmZXJTaXplOworICAgIEdMZW51
bSBtSW5kZXhUeXBlOworICAgIGJvb2wgbUR5bmFtaWM7Cit9OworCit9CisKKyNlbmRpZiAvLyBM
SUJHTEVTVjJfUkVOREVSRVJfSU5ERVhCVUZGRVI5X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUXVlcnk5LmNwcCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9RdWVyeTku
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjcyNzgxY2JjMzlkMjVkMTRmNDMyMmRhMzUzMDc0OTUyMWUxYzg0N2IK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDkvUXVlcnk5LmNwcApAQCAtMCwwICsxLDEyNSBAQAorI2luY2x1ZGUgInBy
ZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUXVlcnk5LmNwcDogRGVmaW5lcyB0aGUg
cng6OlF1ZXJ5OSBjbGFzcyB3aGljaCBpbXBsZW1lbnRzIHJ4OjpRdWVyeUltcGwuCisKKworI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1F1ZXJ5OS5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9tYWluLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5
X3V0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5Lmgi
CisKK25hbWVzcGFjZSByeAoreworCitRdWVyeTk6OlF1ZXJ5OShyeDo6UmVuZGVyZXI5ICpyZW5k
ZXJlciwgR0xlbnVtIHR5cGUpIDogUXVlcnlJbXBsKHR5cGUpCit7CisgICAgbVJlbmRlcmVyID0g
cmVuZGVyZXI7CisgICAgbVF1ZXJ5ID0gTlVMTDsKK30KKworUXVlcnk5Ojp+UXVlcnk5KCkKK3sK
KyAgICBpZiAobVF1ZXJ5KQorICAgIHsKKyAgICAgICAgbVF1ZXJ5LT5SZWxlYXNlKCk7CisgICAg
ICAgIG1RdWVyeSA9IE5VTEw7CisgICAgfQorfQorCit2b2lkIFF1ZXJ5OTo6YmVnaW4oKQorewor
ICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIGlmIChGQUlMRUQobVJlbmRl
cmVyLT5nZXREZXZpY2UoKS0+Q3JlYXRlUXVlcnkoRDNEUVVFUllUWVBFX09DQ0xVU0lPTiwgJm1R
dWVyeSkpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgICAgICB9CisgICAgfQorCisgICAgSFJFU1VMVCByZXN1bHQgPSBtUXVl
cnktPklzc3VlKEQzRElTU1VFX0JFR0lOKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkp
OworfQorCit2b2lkIFF1ZXJ5OTo6ZW5kKCkKK3sKKyAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCisg
ICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICB9CisKKyAgICBIUkVTVUxUIHJlc3VsdCA9IG1RdWVyeS0+SXNzdWUoRDNESVNTVUVfRU5EKTsK
KyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgbVN0YXR1cyA9IEdMX0ZBTFNF
OworICAgIG1SZXN1bHQgPSBHTF9GQUxTRTsKK30KKworR0x1aW50IFF1ZXJ5OTo6Z2V0UmVzdWx0
KCkKK3sKKyAgICBpZiAobVF1ZXJ5ICE9IE5VTEwpCisgICAgeworICAgICAgICB3aGlsZSAoIXRl
c3RRdWVyeSgpKQorICAgICAgICB7CisgICAgICAgICAgICBTbGVlcCgwKTsKKyAgICAgICAgICAg
IC8vIGV4cGxpY2l0bHkgY2hlY2sgZm9yIGRldmljZSBsb3NzCisgICAgICAgICAgICAvLyBzb21l
IGRyaXZlcnMgc2VlbSB0byByZXR1cm4gU19GQUxTRSBldmVuIGlmIHRoZSBkZXZpY2UgaXMgbG9z
dAorICAgICAgICAgICAgLy8gaW5zdGVhZCBvZiBEM0RFUlJfREVWSUNFTE9TVCBsaWtlIHRoZXkg
c2hvdWxkCisgICAgICAgICAgICBpZiAobVJlbmRlcmVyLT50ZXN0RGV2aWNlTG9zdCh0cnVlKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlksIDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIG1SZXN1bHQ7Cit9CisKK0dMYm9vbGVhbiBRdWVyeTk6OmlzUmVzdWx0QXZhaWxhYmxlKCkK
K3sKKyAgICBpZiAobVF1ZXJ5ICE9IE5VTEwpCisgICAgeworICAgICAgICB0ZXN0UXVlcnkoKTsK
KyAgICB9CisKKyAgICByZXR1cm4gbVN0YXR1czsKK30KKworR0xib29sZWFuIFF1ZXJ5OTo6dGVz
dFF1ZXJ5KCkKK3sKKyAgICBpZiAobVF1ZXJ5ICE9IE5VTEwgJiYgbVN0YXR1cyAhPSBHTF9UUlVF
KQorICAgIHsKKyAgICAgICAgRFdPUkQgbnVtUGl4ZWxzID0gMDsKKworICAgICAgICBIUkVTVUxU
IGhyZXMgPSBtUXVlcnktPkdldERhdGEoJm51bVBpeGVscywgc2l6ZW9mKERXT1JEKSwgRDNER0VU
REFUQV9GTFVTSCk7CisgICAgICAgIGlmIChocmVzID09IFNfT0spCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1TdGF0dXMgPSAgR0xfVFJVRTsKKworICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBl
KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFT
U0VEX0VYVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VS
VkFUSVZFX0VYVDoKKyAgICAgICAgICAgICAgICBtUmVzdWx0ID0gKG51bVBpeGVscyA+IDApID8g
R0xfVFJVRSA6IEdMX0ZBTFNFOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZDNkOTo6aXNEZXZpY2VMb3N0RXJyb3IoaHJl
cykpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1SZW5kZXJlci0+bm90aWZ5RGV2aWNlTG9zdCgp
OworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9UUlVF
KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtU3RhdHVzOworICAgIH0KKworICAgIHJl
dHVybiBHTF9UUlVFOyAvLyBwcmV2ZW50IGJsb2NraW5nIHdoZW4gcXVlcnkgaXMgbnVsbAorfQor
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvUXVlcnk5LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvUXVlcnk5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDdlZWY4OTMzNmVmOGMzNDRh
YTUxNjdiNGY0MDIxYjEwNDFjMDcwYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9RdWVyeTkuaApAQCAtMCwwICsx
LDQwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUXVlcnk5Lmg6IERlZmluZXMgdGhlIHJ4OjpRdWVy
eTkgY2xhc3Mgd2hpY2ggaW1wbGVtZW50cyByeDo6UXVlcnlJbXBsLgorCisjaWZuZGVmIExJQkdM
RVNWMl9SRU5ERVJFUl9RVUVSWTlfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1FVRVJZ
OV9IXworCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1F1ZXJ5SW1wbC5oIgorCituYW1l
c3BhY2UgcngKK3sKK2NsYXNzIFJlbmRlcmVyOTsKKworY2xhc3MgUXVlcnk5IDogcHVibGljIFF1
ZXJ5SW1wbAoreworICBwdWJsaWM6CisgICAgUXVlcnk5KHJ4OjpSZW5kZXJlcjkgKnJlbmRlcmVy
LCBHTGVudW0gdHlwZSk7CisgICAgdmlydHVhbCB+UXVlcnk5KCk7CisKKyAgICB2b2lkIGJlZ2lu
KCk7CisgICAgdm9pZCBlbmQoKTsKKyAgICBHTHVpbnQgZ2V0UmVzdWx0KCk7CisgICAgR0xib29s
ZWFuIGlzUmVzdWx0QXZhaWxhYmxlKCk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oUXVlcnk5KTsKKworICAgIEdMYm9vbGVhbiB0ZXN0UXVlcnkoKTsKKworICAg
IHJ4OjpSZW5kZXJlcjkgKm1SZW5kZXJlcjsKKyAgICBJRGlyZWN0M0RRdWVyeTkgKm1RdWVyeTsK
K307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9RVUVSWTlfSF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
OS9SZW5kZXJUYXJnZXQ5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9SZW5kZXJUYXJnZXQ5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOTA0MzFkYjk5
ODczOTBjNTAxMmNiZmY2MTMwZjhhODkyMzgxNmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlclRhcmdl
dDkuY3BwCkBAIC0wLDAgKzEsMTEzIEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisvLyBSZW5kZXJUYXJnZXQ5LmNwcDogSW1wbGVtZW50cyBhIEQzRDktc3BlY2lm
aWMgd3JhcHBlciBmb3IgSURpcmVjdDNEU3VyZmFjZTkKKy8vIHBvaW50ZXJzIHJldGFpbmVkIGJ5
IHJlbmRlcmJ1ZmZlcnMuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5k
ZXJUYXJnZXQ5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5
LmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5kZXJlcjlfdXRpbHMu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgorCituYW1lc3BhY2UgcngKK3sKKworUmVu
ZGVyVGFyZ2V0OTo6UmVuZGVyVGFyZ2V0OShSZW5kZXJlciAqcmVuZGVyZXIsIElEaXJlY3QzRFN1
cmZhY2U5ICpzdXJmYWNlKQoreworICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyOTo6bWFrZVJlbmRl
cmVyOShyZW5kZXJlcik7CisgICAgbVJlbmRlclRhcmdldCA9IHN1cmZhY2U7CisKKyAgICBpZiAo
bVJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlv
bjsKKyAgICAgICAgbVJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzY3JpcHRpb24pOworCisgICAg
ICAgIG1XaWR0aCA9IGRlc2NyaXB0aW9uLldpZHRoOworICAgICAgICBtSGVpZ2h0ID0gZGVzY3Jp
cHRpb24uSGVpZ2h0OworICAgICAgICAKKyAgICAgICAgbUludGVybmFsRm9ybWF0ID0gZDNkOV9n
bDo6R2V0RXF1aXZhbGVudEZvcm1hdChkZXNjcmlwdGlvbi5Gb3JtYXQpOworICAgICAgICBtQWN0
dWFsRm9ybWF0ID0gZDNkOV9nbDo6R2V0RXF1aXZhbGVudEZvcm1hdChkZXNjcmlwdGlvbi5Gb3Jt
YXQpOworICAgICAgICBtU2FtcGxlcyA9IGQzZDlfZ2w6OkdldFNhbXBsZXNGcm9tTXVsdGlzYW1w
bGVUeXBlKGRlc2NyaXB0aW9uLk11bHRpU2FtcGxlVHlwZSk7CisgICAgfQorfQorCitSZW5kZXJU
YXJnZXQ5OjpSZW5kZXJUYXJnZXQ5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcykKK3sKKyAgICBt
UmVuZGVyZXIgPSBSZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjkocmVuZGVyZXIpOworICAgIG1SZW5k
ZXJUYXJnZXQgPSBOVUxMOworCisgICAgRDNERk9STUFUIHJlcXVlc3RlZEZvcm1hdCA9IGdsX2Qz
ZDk6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoZm9ybWF0KTsKKyAgICBpbnQgc3VwcG9ydGVk
U2FtcGxlcyA9IG1SZW5kZXJlci0+Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMocmVxdWVzdGVk
Rm9ybWF0LCBzYW1wbGVzKTsKKworICAgIGlmIChzdXBwb3J0ZWRTYW1wbGVzID09IC0xKQorICAg
IHsKKyAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBIUkVTVUxUIHJlc3VsdCA9IEQzREVSUl9JTlZBTElEQ0FMTDsKKyAg
ICAKKyAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApCisgICAgeworICAgICAgICBpZiAo
cmVxdWVzdGVkRm9ybWF0ID09IEQzREZNVF9EMjRTOCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmVzdWx0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKS0+Q3JlYXRlRGVwdGhTdGVuY2lsU3VyZmFj
ZSh3aWR0aCwgaGVpZ2h0LCByZXF1ZXN0ZWRGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6
OkdldE11bHRpc2FtcGxlVHlwZUZyb21TYW1wbGVzKHN1cHBvcnRlZFNhbXBsZXMpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLCBGQUxTRSwgJm1SZW5kZXJUYXJnZXQsIE5VTEwpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0ID0gbVJlbmRlcmVyLT5nZXRE
ZXZpY2UoKS0+Q3JlYXRlUmVuZGVyVGFyZ2V0KHdpZHRoLCBoZWlnaHQsIHJlcXVlc3RlZEZvcm1h
dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2xfZDNkOTo6R2V0TXVsdGlzYW1wbGVUeXBlRnJvbVNhbXBsZXMoc3VwcG9y
dGVkU2FtcGxlcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgRkFMU0UsICZtUmVuZGVyVGFyZ2V0LCBOVUxMKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkg
fHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICB9CisKKyAgICBtV2lk
dGggPSB3aWR0aDsKKyAgICBtSGVpZ2h0ID0gaGVpZ2h0OworICAgIG1JbnRlcm5hbEZvcm1hdCA9
IGZvcm1hdDsKKyAgICBtU2FtcGxlcyA9IHN1cHBvcnRlZFNhbXBsZXM7CisgICAgbUFjdHVhbEZv
cm1hdCA9IGQzZDlfZ2w6OkdldEVxdWl2YWxlbnRGb3JtYXQocmVxdWVzdGVkRm9ybWF0KTsKK30K
KworUmVuZGVyVGFyZ2V0OTo6flJlbmRlclRhcmdldDkoKQoreworICAgIGlmIChtUmVuZGVyVGFy
Z2V0KQorICAgIHsKKyAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworICAgIH0KK30K
KworUmVuZGVyVGFyZ2V0OSAqUmVuZGVyVGFyZ2V0OTo6bWFrZVJlbmRlclRhcmdldDkoUmVuZGVy
VGFyZ2V0ICp0YXJnZXQpCit7CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUocng6OlJlbmRl
clRhcmdldDkqLCB0YXJnZXQpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8cng6OlJlbmRlclRh
cmdldDkqPih0YXJnZXQpOworfQorCitJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyVGFyZ2V0OTo6
Z2V0U3VyZmFjZSgpCit7CisgICAgLy8gQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciByZWxlYXNp
bmcgdGhlIHJldHVybmVkIHN1cmZhY2UgcmVmZXJlbmNlLgorICAgIGlmIChtUmVuZGVyVGFyZ2V0
KQorICAgIHsKKyAgICAgICAgbVJlbmRlclRhcmdldC0+QWRkUmVmKCk7CisgICAgfQorCisgICAg
cmV0dXJuIG1SZW5kZXJUYXJnZXQ7Cit9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlclRhcmdldDkuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYWY4YWQx
YzZkMmQ2MjQyOTQwMGZlMzNjYjhjZGRlNzFmN2QzMjVlCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlclRh
cmdldDkuaApAQCAtMCwwICsxLDQwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUmVuZGVyVGFyZ2V0
OS5oOiBEZWZpbmVzIGEgRDNEOS1zcGVjaWZpYyB3cmFwcGVyIGZvciBJRGlyZWN0M0RTdXJmYWNl
OSBwb2ludGVycworLy8gcmV0YWluZWQgYnkgUmVuZGVyYnVmZmVycy4KKworI2lmbmRlZiBMSUJH
TEVTVjJfUkVOREVSRVJfUkVOREVSVEFSR0VUOV9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVS
RVJfUkVOREVSVEFSR0VUOV9IXworCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRl
clRhcmdldC5oIgorCituYW1lc3BhY2UgcngKK3sKK2NsYXNzIFJlbmRlcmVyOworY2xhc3MgUmVu
ZGVyZXI5OworCitjbGFzcyBSZW5kZXJUYXJnZXQ5IDogcHVibGljIFJlbmRlclRhcmdldAorewor
ICBwdWJsaWM6CisgICAgUmVuZGVyVGFyZ2V0OShSZW5kZXJlciAqcmVuZGVyZXIsIElEaXJlY3Qz
RFN1cmZhY2U5ICpzdXJmYWNlKTsKKyAgICBSZW5kZXJUYXJnZXQ5KFJlbmRlcmVyICpyZW5kZXJl
ciwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkg
c2FtcGxlcyk7CisgICAgdmlydHVhbCB+UmVuZGVyVGFyZ2V0OSgpOworCisgICAgc3RhdGljIFJl
bmRlclRhcmdldDkgKm1ha2VSZW5kZXJUYXJnZXQ5KFJlbmRlclRhcmdldCAqcmVuZGVyVGFyZ2V0
KTsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0U3VyZmFjZSgpOworCisgIHByaXZhdGU6Cisg
ICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlclRhcmdldDkpOworCisgICAgSURpcmVj
dDNEU3VyZmFjZTkgKm1SZW5kZXJUYXJnZXQ7CisKKyAgICBSZW5kZXJlcjkgKm1SZW5kZXJlcjsK
K307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJUQVJHRVQ5X0hf
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvUmVuZGVyZXI5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk3YTEwZDY0YmY3
NjY2MDFjOGM4YjNkMDE5OTQyZTI3MzNiYzI4OTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmNw
cApAQCAtMCwwICsxLDMyODcgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworLy8gUmVuZGVyZXI5LmNwcDogSW1wbGVtZW50cyBhIGJhY2stZW5kIHNwZWNp
ZmljIGNsYXNzIGZvciB0aGUgRDNEOSByZW5kZXJlci4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9t
YWluLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9UZXh0dXJlLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFt
QmluYXJ5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0luZGV4RGF0YU1hbmFnZXIu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5kZXJlcjlfdXRpbHMuaCIKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9TaGFkZXJFeGVjdXRhYmxlOS5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1N3YXBDaGFpbjkuaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9UZXh0dXJlU3RvcmFnZTkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9JbWFnZTkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNk
OS9CbGl0LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0
OS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleEJ1ZmZlcjkuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbmRleEJ1ZmZlcjkuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CdWZmZXJTdG9yYWdlOS5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1F1ZXJ5OS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L0ZlbmNlOS5oIgorCisjaW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIKKwor
I2luY2x1ZGUgInRoaXJkX3BhcnR5L3RyYWNlX2V2ZW50L3RyYWNlX2V2ZW50LmgiCisKKy8vIENh
biBhbHNvIGJlIGVuYWJsZWQgYnkgZGVmaW5pbmcgRk9SQ0VfUkVGX1JBU1QgaW4gdGhlIHByb2pl
Y3QncyBwcmVkZWZpbmVkIG1hY3JvcworI2RlZmluZSBSRUZfUkFTVCAwCisKKy8vIFRoZSAiRGVi
dWcgVGhpcyBQaXhlbC4uLiIgZmVhdHVyZSBpbiBQSVggb2Z0ZW4gZmFpbHMgd2hlbiB1c2luZyB0
aGUKKy8vIEQzRDlFeCBpbnRlcmZhY2VzLiAgSW4gb3JkZXIgdG8gZ2V0IGRlYnVnIHBpeGVsIHRv
IHdvcmsgb24gYSBWaXN0YS9XaW4gNworLy8gbWFjaGluZSwgZGVmaW5lICJBTkdMRV9FTkFCTEVf
RDNEOUVYPTAiIGluIHlvdXIgcHJvamVjdCBmaWxlLgorI2lmICFkZWZpbmVkKEFOR0xFX0VOQUJM
RV9EM0Q5RVgpCisvLyBFbmFibGVzIHVzZSBvZiB0aGUgSURpcmVjdDNEOUV4IGludGVyZmFjZSwg
d2hlbiBhdmFpbGFibGUKKyNkZWZpbmUgQU5HTEVfRU5BQkxFX0QzRDlFWCAxCisjZW5kaWYgLy8g
IWRlZmluZWQoQU5HTEVfRU5BQkxFX0QzRDlFWCkKKworbmFtZXNwYWNlIHJ4Cit7CitzdGF0aWMg
Y29uc3QgRDNERk9STUFUIFJlbmRlclRhcmdldEZvcm1hdHNbXSA9CisgICAgeworICAgICAgICBE
M0RGTVRfQTFSNUc1QjUsCisgICAgLy8gIEQzREZNVF9BMlIxMEcxMEIxMCwgICAvLyBUaGUgY29s
b3JfcmFtcCBjb25mb3JtYW5jZSB0ZXN0IHVzZXMgUmVhZFBpeGVscyB3aXRoIFVOU0lHTkVEX0JZ
VEUgY2F1c2luZyBpdCB0byB0aGluayB0aGF0IHJlbmRlcmluZyBza2lwcGVkIGEgY29sb3VyIHZh
bHVlLgorICAgICAgICBEM0RGTVRfQThSOEc4QjgsCisgICAgICAgIEQzREZNVF9SNUc2QjUsCisg
ICAgLy8gIEQzREZNVF9YMVI1RzVCNSwgICAgICAvLyBIYXMgbm8gY29tcGF0aWJsZSBPcGVuR0wg
RVMgcmVuZGVyYnVmZmVyIGZvcm1hdAorICAgICAgICBEM0RGTVRfWDhSOEc4QjgKKyAgICB9Owor
CitzdGF0aWMgY29uc3QgRDNERk9STUFUIERlcHRoU3RlbmNpbEZvcm1hdHNbXSA9CisgICAgewor
ICAgICAgICBEM0RGTVRfVU5LTk9XTiwKKyAgICAvLyAgRDNERk1UX0QxNl9MT0NLQUJMRSwKKyAg
ICAgICAgRDNERk1UX0QzMiwKKyAgICAvLyAgRDNERk1UX0QxNVMxLAorICAgICAgICBEM0RGTVRf
RDI0UzgsCisgICAgICAgIEQzREZNVF9EMjRYOCwKKyAgICAvLyAgRDNERk1UX0QyNFg0UzQsCisg
ICAgICAgIEQzREZNVF9EMTYsCisgICAgLy8gIEQzREZNVF9EMzJGX0xPQ0tBQkxFLAorICAgIC8v
ICBEM0RGTVRfRDI0RlM4CisgICAgfTsKKworZW51bQoreworICAgIE1BWF9WRVJURVhfQ09OU1RB
TlRfVkVDVE9SU19EM0Q5ID0gMjU2LAorICAgIE1BWF9QSVhFTF9DT05TVEFOVF9WRUNUT1JTX1NN
MiA9IDMyLAorICAgIE1BWF9QSVhFTF9DT05TVEFOVF9WRUNUT1JTX1NNMyA9IDIyNCwKKyAgICBN
QVhfVkFSWUlOR19WRUNUT1JTX1NNMiA9IDgsCisgICAgTUFYX1ZBUllJTkdfVkVDVE9SU19TTTMg
PSAxMCwKKworICAgIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl9TTTMgPSA0Cit9OworCitS
ZW5kZXJlcjk6OlJlbmRlcmVyOShlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIEhEQyBoRGMsIGJvb2wg
c29mdHdhcmVEZXZpY2UpIDogUmVuZGVyZXIoZGlzcGxheSksIG1EYyhoRGMpLCBtU29mdHdhcmVE
ZXZpY2Uoc29mdHdhcmVEZXZpY2UpCit7CisgICAgbUQzZDlNb2R1bGUgPSBOVUxMOworCisgICAg
bUQzZDkgPSBOVUxMOworICAgIG1EM2Q5RXggPSBOVUxMOworICAgIG1EZXZpY2UgPSBOVUxMOwor
ICAgIG1EZXZpY2VFeCA9IE5VTEw7CisgICAgbURldmljZVdpbmRvdyA9IE5VTEw7CisgICAgbUJs
aXQgPSBOVUxMOworCisgICAgbUFkYXB0ZXIgPSBEM0RBREFQVEVSX0RFRkFVTFQ7CisKKyAgICAj
aWYgUkVGX1JBU1QgPT0gMSB8fCBkZWZpbmVkKEZPUkNFX1JFRl9SQVNUKQorICAgICAgICBtRGV2
aWNlVHlwZSA9IEQzRERFVlRZUEVfUkVGOworICAgICNlbHNlCisgICAgICAgIG1EZXZpY2VUeXBl
ID0gRDNEREVWVFlQRV9IQUw7CisgICAgI2VuZGlmCisKKyAgICBtRGV2aWNlTG9zdCA9IGZhbHNl
OworCisgICAgbU1heFN1cHBvcnRlZFNhbXBsZXMgPSAwOworCisgICAgbU1hc2tlZENsZWFyU2F2
ZWRTdGF0ZSA9IE5VTEw7CisKKyAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBOVUxMOworICAgIG1J
bmRleERhdGFNYW5hZ2VyID0gTlVMTDsKKyAgICBtTGluZUxvb3BJQiA9IE5VTEw7CisKKyAgICBt
TWF4TnVsbENvbG9yYnVmZmVyTFJVID0gMDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9O
VUxMX0NPTE9SQlVGRkVSX0NBQ0hFX0VOVFJJRVM7IGkrKykKKyAgICB7CisgICAgICAgIG1OdWxs
Q29sb3JidWZmZXJDYWNoZVtpXS5scnVDb3VudCA9IDA7CisgICAgICAgIG1OdWxsQ29sb3JidWZm
ZXJDYWNoZVtpXS53aWR0aCA9IDA7CisgICAgICAgIG1OdWxsQ29sb3JidWZmZXJDYWNoZVtpXS5o
ZWlnaHQgPSAwOworICAgICAgICBtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0uYnVmZmVyID0gTlVM
TDsKKyAgICB9Cit9CisKK1JlbmRlcmVyOTo6flJlbmRlcmVyOSgpCit7CisgICAgaWYgKG1EZXZp
Y2UpCisgICAgeworICAgICAgICAvLyBJZiB0aGUgZGV2aWNlIGlzIGxvc3QsIHJlc2V0IGl0IGZp
cnN0IHRvIHByZXZlbnQgbGVhdmluZyB0aGUgZHJpdmVyIGluIGFuIHVuc3RhYmxlIHN0YXRlCisg
ICAgICAgIGlmICh0ZXN0RGV2aWNlTG9zdChmYWxzZSkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJlc2V0RGV2aWNlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBkZWluaXRpYWxpemUoKTsK
K30KKwordm9pZCBSZW5kZXJlcjk6OmRlaW5pdGlhbGl6ZSgpCit7CisgICAgcmVsZWFzZURldmlj
ZVJlc291cmNlcygpOworCisgICAgU2FmZVJlbGVhc2UobURldmljZSk7CisgICAgU2FmZVJlbGVh
c2UobURldmljZUV4KTsKKyAgICBTYWZlUmVsZWFzZShtRDNkOSk7CisgICAgU2FmZVJlbGVhc2Uo
bUQzZDlFeCk7CisKKyAgICBpZiAobURldmljZVdpbmRvdykKKyAgICB7CisgICAgICAgIERlc3Ry
b3lXaW5kb3cobURldmljZVdpbmRvdyk7CisgICAgICAgIG1EZXZpY2VXaW5kb3cgPSBOVUxMOwor
ICAgIH0KKworICAgIGlmIChtRDNkOU1vZHVsZSkKKyAgICB7CisgICAgICAgIG1EM2Q5TW9kdWxl
ID0gTlVMTDsKKyAgICB9CisKKyAgICB3aGlsZSAoIW1NdWx0aVNhbXBsZVN1cHBvcnQuZW1wdHko
KSkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBbXSBtTXVsdGlTYW1wbGVTdXBwb3J0LmJlZ2luKCkt
PnNlY29uZDsKKyAgICAgICAgbU11bHRpU2FtcGxlU3VwcG9ydC5lcmFzZShtTXVsdGlTYW1wbGVT
dXBwb3J0LmJlZ2luKCkpOworICAgIH0KK30KKworUmVuZGVyZXI5ICpSZW5kZXJlcjk6Om1ha2VS
ZW5kZXJlcjkoUmVuZGVyZXIgKnJlbmRlcmVyKQoreworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19U
WVBFKHJ4OjpSZW5kZXJlcjkqLCByZW5kZXJlcikpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxy
eDo6UmVuZGVyZXI5Kj4ocmVuZGVyZXIpOworfQorCitFR0xpbnQgUmVuZGVyZXI5Ojppbml0aWFs
aXplKCkKK3sKKyAgICBpZiAoIWluaXRpYWxpemVDb21waWxlcigpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7CisgICAgfQorCisgICAgaWYgKG1Tb2Z0d2FyZURl
dmljZSkKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgIkdldE1vZHVsZUhhbmRs
ZV9zd2lmdHNoYWRlciIpOworICAgICAgICBtRDNkOU1vZHVsZSA9IEdldE1vZHVsZUhhbmRsZShU
RVhUKCJzd2lmdHNoYWRlcl9kM2Q5LmRsbCIpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiR2V0TW9kdWxlSGFuZGxlX2QzZDkiKTsKKyAgICAg
ICAgbUQzZDlNb2R1bGUgPSBHZXRNb2R1bGVIYW5kbGUoVEVYVCgiZDNkOS5kbGwiKSk7CisgICAg
fQorCisgICAgaWYgKG1EM2Q5TW9kdWxlID09IE5VTEwpCisgICAgeworICAgICAgICBFUlIoIk5v
IEQzRDkgbW9kdWxlIGZvdW5kIC0gYWJvcnRpbmchXG4iKTsKKyAgICAgICAgcmV0dXJuIEVHTF9O
T1RfSU5JVElBTElaRUQ7CisgICAgfQorCisgICAgdHlwZWRlZiBIUkVTVUxUIChXSU5BUEkgKkRp
cmVjdDNEQ3JlYXRlOUV4RnVuYykoVUlOVCwgSURpcmVjdDNEOUV4KiopOworICAgIERpcmVjdDNE
Q3JlYXRlOUV4RnVuYyBEaXJlY3QzRENyZWF0ZTlFeFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8RGly
ZWN0M0RDcmVhdGU5RXhGdW5jPihHZXRQcm9jQWRkcmVzcyhtRDNkOU1vZHVsZSwgIkRpcmVjdDNE
Q3JlYXRlOUV4IikpOworCisgICAgLy8gVXNlIERpcmVjdDNEOUV4IGlmIGF2YWlsYWJsZS4gQW1v
bmcgb3RoZXIgdGhpbmdzLCB0aGlzIHZlcnNpb24gaXMgbGVzcworICAgIC8vIGluY2xpbmVkIHRv
IHJlcG9ydCBhIGxvc3QgY29udGV4dCwgZm9yIGV4YW1wbGUgd2hlbiB0aGUgdXNlciBzd2l0Y2hl
cworICAgIC8vIGRlc2t0b3AuIERpcmVjdDNEOUV4IGlzIGF2YWlsYWJsZSBpbiBXaW5kb3dzIFZp
c3RhIGFuZCBsYXRlciBpZiBzdWl0YWJsZSBkcml2ZXJzIGFyZSBhdmFpbGFibGUuCisgICAgaWYg
KEFOR0xFX0VOQUJMRV9EM0Q5RVggJiYgRGlyZWN0M0RDcmVhdGU5RXhQdHIgJiYgU1VDQ0VFREVE
KERpcmVjdDNEQ3JlYXRlOUV4UHRyKEQzRF9TREtfVkVSU0lPTiwgJm1EM2Q5RXgpKSkKKyAgICB7
CisgICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgIkQzZDlFeF9RdWVyeUludGVyZmFjZSIpOwor
ICAgICAgICBBU1NFUlQobUQzZDlFeCk7CisgICAgICAgIG1EM2Q5RXgtPlF1ZXJ5SW50ZXJmYWNl
KElJRF9JRGlyZWN0M0Q5LCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1EM2Q5KSk7CisgICAg
ICAgIEFTU0VSVChtRDNkOSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFRSQUNF
X0VWRU5UMCgiZ3B1IiwgIkRpcmVjdDNEQ3JlYXRlOSIpOworICAgICAgICBtRDNkOSA9IERpcmVj
dDNEQ3JlYXRlOShEM0RfU0RLX1ZFUlNJT04pOworICAgIH0KKworICAgIGlmICghbUQzZDkpCisg
ICAgeworICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgRDNEOSBkZXZpY2UgLSBhYm9ydGlu
ZyFcbiIpOworICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsKKyAgICB9CisKKyAg
ICBpZiAobURjICE9IE5VTEwpCisgICAgeworICAgIC8vICBVTklNUExFTUVOVEVEKCk7ICAgLy8g
RklYTUU6IERldGVybWluZSB3aGljaCBhZGFwdGVyIGluZGV4IHRoZSBkZXZpY2UgY29udGV4dCBj
b3JyZXNwb25kcyB0bworICAgIH0KKworICAgIEhSRVNVTFQgcmVzdWx0OworCisgICAgLy8gR2l2
ZSB1cCBvbiBnZXR0aW5nIGRldmljZSBjYXBzIGFmdGVyIGFib3V0IG9uZSBzZWNvbmQuCisgICAg
eworICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJHZXREZXZpY2VDYXBzIik7CisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgMTA7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVz
dWx0ID0gbUQzZDktPkdldERldmljZUNhcHMobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCAmbURldmlj
ZUNhcHMpOworICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSBpZiAocmVzdWx0ID09IEQzREVSUl9OT1RBVkFJTEFCTEUpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgU2xlZXAoMTAwKTsgICAvLyBHaXZlIHRoZSBkcml2ZXIgc29tZSB0aW1lIHRv
IGluaXRpYWxpemUvcmVjb3ZlcgorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAo
RkFJTEVEKHJlc3VsdCkpICAgLy8gRDNERVJSX09VVE9GVklERU9NRU1PUlksIEVfT1VUT0ZNRU1P
UlksIEQzREVSUl9JTlZBTElEREVWSUNFLCBvciBhbm90aGVyIGVycm9yIHdlIGNhbid0IHJlY292
ZXIgZnJvbQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEVSUigiZmFpbGVkIHRvIGdl
dCBkZXZpY2UgY2FwcyAoMHgleClcbiIsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IEVHTF9OT1RfSU5JVElBTElaRUQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAobURldmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJzaW9uIDwgRDNEUFNfVkVSU0lPTigy
LCAwKSkKKyAgICB7CisgICAgICAgIEVSUigiUmVuZGVyZXIgZG9lcyBub3Qgc3VwcG9ydCBQUyAy
LjAuIGFib3J0aW5nIVxuIik7CisgICAgICAgIHJldHVybiBFR0xfTk9UX0lOSVRJQUxJWkVEOwor
ICAgIH0KKworICAgIC8vIFdoZW4gRGlyZWN0WDkgaXMgcnVubmluZyB3aXRoIGFuIG9sZGVyIERp
cmVjdFg4IGRyaXZlciwgYSBTdHJldGNoUmVjdCBmcm9tIGEgcmVndWxhciB0ZXh0dXJlIHRvIGEg
cmVuZGVyIHRhcmdldCB0ZXh0dXJlIGlzIG5vdCBzdXBwb3J0ZWQuCisgICAgLy8gVGhpcyBpcyBy
ZXF1aXJlZCBieSBUZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRlclRhcmdldC4KKyAgICBpZiAoKG1E
ZXZpY2VDYXBzLkRldkNhcHMyICYgRDNEREVWQ0FQUzJfQ0FOX1NUUkVUQ0hSRUNUX0ZST01fVEVY
VFVSRVMpID09IDApCisgICAgeworICAgICAgICBFUlIoIlJlbmRlcmVyIGRvZXMgbm90IHN1cHBv
cnQgc3RyZXRjdHJlY3QgZnJvbSB0ZXh0dXJlcyFcbiIpOworICAgICAgICByZXR1cm4gRUdMX05P
VF9JTklUSUFMSVpFRDsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1
IiwgIkdldEFkYXB0ZXJJZGVudGlmaWVyIik7CisgICAgICAgIG1EM2Q5LT5HZXRBZGFwdGVySWRl
bnRpZmllcihtQWRhcHRlciwgMCwgJm1BZGFwdGVySWRlbnRpZmllcik7CisgICAgfQorCisgICAg
Ly8gQVRJIGNhcmRzIG9uIFhQIGhhdmUgcHJvYmxlbXMgd2l0aCBub24tcG93ZXItb2YtdHdvIHRl
eHR1cmVzLgorICAgIG1TdXBwb3J0c05vblBvd2VyMlRleHR1cmVzID0gIShtRGV2aWNlQ2Fwcy5U
ZXh0dXJlQ2FwcyAmIEQzRFBURVhUVVJFQ0FQU19QT1cyKSAmJgorICAgICAgICAhKG1EZXZpY2VD
YXBzLlRleHR1cmVDYXBzICYgRDNEUFRFWFRVUkVDQVBTX0NVQkVNQVBfUE9XMikgJiYKKyAgICAg
ICAgIShtRGV2aWNlQ2Fwcy5UZXh0dXJlQ2FwcyAmIEQzRFBURVhUVVJFQ0FQU19OT05QT1cyQ09O
RElUSU9OQUwpICYmCisgICAgICAgICEoZ2V0Q29tcGFyYWJsZU9TVmVyc2lvbigpIDwgdmVyc2lv
bldpbmRvd3NWaXN0YSAmJiBtQWRhcHRlcklkZW50aWZpZXIuVmVuZG9ySWQgPT0gVkVORE9SX0lE
X0FNRCk7CisKKyAgICAvLyBNdXN0IHN1cHBvcnQgYSBtaW5pbXVtIG9mIDI6MSBhbmlzb3Ryb3B5
IGZvciBtYXggYW5pc290cm9weSB0byBiZSBjb25zaWRlcmVkIHN1cHBvcnRlZCwgcGVyIHRoZSBz
cGVjCisgICAgbVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHkgPSAoKG1EZXZpY2VDYXBz
LlJhc3RlckNhcHMgJiBEM0RQUkFTVEVSQ0FQU19BTklTT1RST1BZKSAmJiAobURldmljZUNhcHMu
TWF4QW5pc290cm9weSA+PSAyKSk7CisKKyAgICBtTWluU3dhcEludGVydmFsID0gNDsKKyAgICBt
TWF4U3dhcEludGVydmFsID0gMDsKKworICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25J
bnRlcnZhbHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX0lNTUVESUFURSkKKyAgICB7CisgICAgICAg
IG1NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dhcEludGVydmFsLCAwKTsKKyAgICAg
ICAgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2YWwsIDApOworICAg
IH0KKyAgICBpZiAobURldmljZUNhcHMuUHJlc2VudGF0aW9uSW50ZXJ2YWxzICYgRDNEUFJFU0VO
VF9JTlRFUlZBTF9PTkUpCisgICAgeworICAgICAgICBtTWluU3dhcEludGVydmFsID0gc3RkOjpt
aW4obU1pblN3YXBJbnRlcnZhbCwgMSk7CisgICAgICAgIG1NYXhTd2FwSW50ZXJ2YWwgPSBzdGQ6
Om1heChtTWF4U3dhcEludGVydmFsLCAxKTsKKyAgICB9CisgICAgaWYgKG1EZXZpY2VDYXBzLlBy
ZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfVFdPKQorICAgIHsKKyAg
ICAgICAgbU1pblN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDIpOwor
ICAgICAgICBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgMik7
CisgICAgfQorICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQ
UkVTRU5UX0lOVEVSVkFMX1RIUkVFKQorICAgIHsKKyAgICAgICAgbU1pblN3YXBJbnRlcnZhbCA9
IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDMpOworICAgICAgICBtTWF4U3dhcEludGVydmFs
ID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgMyk7CisgICAgfQorICAgIGlmIChtRGV2aWNl
Q2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX0ZPVVIpCisg
ICAgeworICAgICAgICBtTWluU3dhcEludGVydmFsID0gc3RkOjptaW4obU1pblN3YXBJbnRlcnZh
bCwgNCk7CisgICAgICAgIG1NYXhTd2FwSW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4U3dhcEludGVy
dmFsLCA0KTsKKyAgICB9CisKKyAgICBpbnQgbWF4ID0gMDsKKyAgICB7CisgICAgICAgIFRSQUNF
X0VWRU5UMCgiZ3B1IiwgImdldE11bHRpU2FtcGxlU3VwcG9ydCIpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShSZW5kZXJUYXJnZXRGb3JtYXRzKTsgKytp
KQorICAgICAgICB7CisgICAgICAgICAgICBib29sICptdWx0aXNhbXBsZUFycmF5ID0gbmV3IGJv
b2xbRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUyArIDFdOworICAgICAgICAgICAgZ2V0TXVsdGlT
YW1wbGVTdXBwb3J0KFJlbmRlclRhcmdldEZvcm1hdHNbaV0sIG11bHRpc2FtcGxlQXJyYXkpOwor
ICAgICAgICAgICAgbU11bHRpU2FtcGxlU3VwcG9ydFtSZW5kZXJUYXJnZXRGb3JtYXRzW2ldXSA9
IG11bHRpc2FtcGxlQXJyYXk7CisKKyAgICAgICAgICAgIGZvciAoaW50IGogPSBEM0RNVUxUSVNB
TVBMRV8xNl9TQU1QTEVTOyBqID49IDA7IC0taikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBpZiAobXVsdGlzYW1wbGVBcnJheVtqXSAmJiBqICE9IEQzRE1VTFRJU0FNUExFX05PTk1B
U0tBQkxFICYmIGogPiBtYXgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBtYXggPSBqOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiZ2V0TXVsdGlTYW1w
bGVTdXBwb3J0MiIpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5
U2l6ZShEZXB0aFN0ZW5jaWxGb3JtYXRzKTsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoRGVwdGhTdGVuY2lsRm9ybWF0c1tpXSA9PSBEM0RGTVRfVU5LTk9XTikKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgYm9vbCAqbXVsdGlzYW1wbGVBcnJheSA9IG5l
dyBib29sW0QzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVMgKyAxXTsKKyAgICAgICAgICAgIGdldE11
bHRpU2FtcGxlU3VwcG9ydChEZXB0aFN0ZW5jaWxGb3JtYXRzW2ldLCBtdWx0aXNhbXBsZUFycmF5
KTsKKyAgICAgICAgICAgIG1NdWx0aVNhbXBsZVN1cHBvcnRbRGVwdGhTdGVuY2lsRm9ybWF0c1tp
XV0gPSBtdWx0aXNhbXBsZUFycmF5OworCisgICAgICAgICAgICBmb3IgKGludCBqID0gRDNETVVM
VElTQU1QTEVfMTZfU0FNUExFUzsgaiA+PSAwOyAtLWopCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaWYgKG11bHRpc2FtcGxlQXJyYXlbal0gJiYgaiAhPSBEM0RNVUxUSVNBTVBMRV9O
T05NQVNLQUJMRSAmJiBqID4gbWF4KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgbWF4ID0gajsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9IG1heDsKKworICAgIHN0YXRp
YyBjb25zdCBUQ0hBUiB3aW5kb3dOYW1lW10gPSBURVhUKCJBbmdsZUhpZGRlbldpbmRvdyIpOwor
ICAgIHN0YXRpYyBjb25zdCBUQ0hBUiBjbGFzc05hbWVbXSA9IFRFWFQoIlNUQVRJQyIpOworCisg
ICAgeworICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJDcmVhdGVXaW5kb3dFeCIpOworICAg
ICAgICBtRGV2aWNlV2luZG93ID0gQ3JlYXRlV2luZG93RXgoV1NfRVhfTk9BQ1RJVkFURSwgY2xh
c3NOYW1lLCB3aW5kb3dOYW1lLCBXU19ESVNBQkxFRCB8IFdTX1BPUFVQLCAwLCAwLCAxLCAxLCBI
V05EX01FU1NBR0UsIE5VTEwsIEdldE1vZHVsZUhhbmRsZShOVUxMKSwgTlVMTCk7CisgICAgfQor
CisgICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbWV0ZXJzID0gZ2V0RGVmYXVs
dFByZXNlbnRQYXJhbWV0ZXJzKCk7CisgICAgRFdPUkQgYmVoYXZpb3JGbGFncyA9IEQzRENSRUFU
RV9GUFVfUFJFU0VSVkUgfCBEM0RDUkVBVEVfTk9XSU5ET1dDSEFOR0VTOworCisgICAgeworICAg
ICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJEM2Q5X0NyZWF0ZURldmljZSIpOworICAgICAgICBy
ZXN1bHQgPSBtRDNkOS0+Q3JlYXRlRGV2aWNlKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgbURldmlj
ZVdpbmRvdywgYmVoYXZpb3JGbGFncyB8IEQzRENSRUFURV9IQVJEV0FSRV9WRVJURVhQUk9DRVNT
SU5HIHwgRDNEQ1JFQVRFX1BVUkVERVZJQ0UsICZwcmVzZW50UGFyYW1ldGVycywgJm1EZXZpY2Up
OworICAgIH0KKyAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJl
c3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTE9TVCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBFR0xfQkFEX0FMTE9DOworICAgIH0KKworICAgIGlmIChGQUlM
RUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgIkQzZDlfQ3Jl
YXRlRGV2aWNlMiIpOworICAgICAgICByZXN1bHQgPSBtRDNkOS0+Q3JlYXRlRGV2aWNlKG1BZGFw
dGVyLCBtRGV2aWNlVHlwZSwgbURldmljZVdpbmRvdywgYmVoYXZpb3JGbGFncyB8IEQzRENSRUFU
RV9TT0ZUV0FSRV9WRVJURVhQUk9DRVNTSU5HLCAmcHJlc2VudFBhcmFtZXRlcnMsICZtRGV2aWNl
KTsKKworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVf
T1VUT0ZNRU1PUlkgfHwgcmVzdWx0ID09IEQzREVSUl9OT1RBVkFJTEFCTEUgfHwgcmVzdWx0ID09
IEQzREVSUl9ERVZJQ0VMT1NUKTsKKyAgICAgICAgICAgIHJldHVybiBFR0xfQkFEX0FMTE9DOwor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1EM2Q5RXgpCisgICAgeworICAgICAgICBUUkFD
RV9FVkVOVDAoImdwdSIsICJtRGV2aWNlX1F1ZXJ5SW50ZXJmYWNlIik7CisgICAgICAgIHJlc3Vs
dCA9IG1EZXZpY2UtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JRGlyZWN0M0REZXZpY2U5RXgsICh2b2lk
KiopICZtRGV2aWNlRXgpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAg
IH0KKworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiU2hhZGVyQ2FjaGUgaW5p
dGlhbGl6ZSIpOworICAgICAgICBtVmVydGV4U2hhZGVyQ2FjaGUuaW5pdGlhbGl6ZShtRGV2aWNl
KTsKKyAgICAgICAgbVBpeGVsU2hhZGVyQ2FjaGUuaW5pdGlhbGl6ZShtRGV2aWNlKTsKKyAgICB9
CisKKyAgICAvLyBDaGVjayBvY2NsdXNpb24gcXVlcnkgc3VwcG9ydAorICAgIElEaXJlY3QzRFF1
ZXJ5OSAqb2NjbHVzaW9uUXVlcnkgPSBOVUxMOworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQw
KCJncHUiLCAiZGV2aWNlX0NyZWF0ZVF1ZXJ5Iik7CisgICAgICAgIGlmIChTVUNDRUVERUQobURl
dmljZS0+Q3JlYXRlUXVlcnkoRDNEUVVFUllUWVBFX09DQ0xVU0lPTiwgJm9jY2x1c2lvblF1ZXJ5
KSkgJiYgb2NjbHVzaW9uUXVlcnkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG9jY2x1c2lvblF1
ZXJ5LT5SZWxlYXNlKCk7CisgICAgICAgICAgICBtT2NjbHVzaW9uUXVlcnlTdXBwb3J0ID0gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1PY2Ns
dXNpb25RdWVyeVN1cHBvcnQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIENo
ZWNrIGV2ZW50IHF1ZXJ5IHN1cHBvcnQKKyAgICBJRGlyZWN0M0RRdWVyeTkgKmV2ZW50UXVlcnkg
PSBOVUxMOworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiZGV2aWNlX0NyZWF0
ZVF1ZXJ5MiIpOworICAgICAgICBpZiAoU1VDQ0VFREVEKG1EZXZpY2UtPkNyZWF0ZVF1ZXJ5KEQz
RFFVRVJZVFlQRV9FVkVOVCwgJmV2ZW50UXVlcnkpKSAmJiBldmVudFF1ZXJ5KQorICAgICAgICB7
CisgICAgICAgICAgICBldmVudFF1ZXJ5LT5SZWxlYXNlKCk7CisgICAgICAgICAgICBtRXZlbnRR
dWVyeVN1cHBvcnQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor
ICAgICAgICAgICAgbUV2ZW50UXVlcnlTdXBwb3J0ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7CisgICAgbUQzZDktPkdl
dEFkYXB0ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnREaXNwbGF5TW9kZSk7CisKKyAg
ICAvLyBDaGVjayB2ZXJ0ZXggdGV4dHVyZSBzdXBwb3J0CisgICAgLy8gT25seSBEaXJlY3QzRCAx
MCByZWFkeSBkZXZpY2VzIHN1cHBvcnQgYWxsIHRoZSBuZWNlc3NhcnkgdmVydGV4IHRleHR1cmUg
Zm9ybWF0cy4KKyAgICAvLyBXZSB0ZXN0IHRoaXMgdXNpbmcgRDNEOSBieSBjaGVja2luZyBzdXBw
b3J0IGZvciB0aGUgUjE2RiBmb3JtYXQuCisgICAgbVZlcnRleFRleHR1cmVTdXBwb3J0ID0gbURl
dmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJzaW9uID49IEQzRFBTX1ZFUlNJT04oMywgMCkgJiYKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9y
bWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEQzRFVTQUdFX1FVRVJZX1ZFUlRFWFRFWFRVUkUsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZN
VF9SMTZGKSk7CisKKyAgICAvLyBDaGVjayBkZXB0aCB0ZXh0dXJlIHN1cHBvcnQKKyAgICAvLyB3
ZSB1c2UgSU5UWiBmb3IgZGVwdGggdGV4dHVyZXMgaW4gRGlyZWN0M0Q5CisgICAgLy8gd2UgYWxz
byB3YW50IE5VTEwgdGV4dHVyZSBzdXBwb3J0IHRvIGVuc3VyZSB0aGUgd2UgY2FuIG1ha2UgZGVw
dGgtb25seSBGQk9zCisgICAgLy8gc2VlIGh0dHA6Ly9hcmFzLXAuaW5mby90ZXh0cy9EM0Q5R1BV
SGFja3MuaHRtbAorICAgIG1EZXB0aFRleHR1cmVTdXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5D
aGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9k
ZS5Gb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEQzRFVTQUdFX0RFUFRIU1RFTkNJTCwgRDNEUlRZUEVfVEVYVFVSRSwg
RDNERk1UX0lOVFopKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1E
M2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNw
bGF5TW9kZS5Gb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgRDNEUlRZUEVfU1VS
RkFDRSwgRDNERk1UX05VTEwpKTsKKworICAgIC8vIENoZWNrIDMyIGJpdCBmbG9hdGluZyBwb2lu
dCB0ZXh0dXJlIHN1cHBvcnQKKyAgICBtRmxvYXQzMkZpbHRlclN1cHBvcnQgPSBTVUNDRUVERUQo
bUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERp
c3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUVVFUllfRklMVEVSLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZUEVf
VEVYVFVSRSwgRDNERk1UX0EzMkIzMkczMlIzMkYpKSAmJgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZp
Y2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9RVUVSWV9GSUxURVIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBEM0RSVFlQRV9DVUJFVEVYVFVSRSwgRDNERk1UX0EzMkIzMkczMlIzMkYpKTsKKwor
ICAgIG1GbG9hdDMyUmVuZGVyU3VwcG9ydCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VG
b3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBE
M0RVU0FHRV9SRU5ERVJUQVJHRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfQTMy
QjMyRzMyUjMyRikpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1E
M2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNw
bGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX0NV
QkVURVhUVVJFLCBEM0RGTVRfQTMyQjMyRzMyUjMyRikpOworCisgICAgaWYgKCFtRmxvYXQzMkZp
bHRlclN1cHBvcnQgJiYgIW1GbG9hdDMyUmVuZGVyU3VwcG9ydCkKKyAgICB7CisgICAgICAgIG1G
bG9hdDMyVGV4dHVyZVN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0
KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0EzMkIzMkczMlIzMkYpKSAmJgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0Rldmlj
ZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQs
IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEQzRFJUWVBFX0NVQkVURVhUVVJFLCBEM0RGTVRfQTMyQjMyRzMyUjMy
RikpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRmxvYXQzMlRleHR1cmVTdXBw
b3J0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBDaGVjayAxNiBiaXQgZmxvYXRpbmcgcG9pbnQg
dGV4dHVyZSBzdXBwb3J0CisgICAgbUZsb2F0MTZGaWx0ZXJTdXBwb3J0ID0gU1VDQ0VFREVEKG1E
M2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNw
bGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1FVRVJZX0ZJTFRFUiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX1RF
WFRVUkUsIEQzREZNVF9BMTZCMTZHMTZSMTZGKSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNl
VHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUVVFUllfRklMVEVSLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRDNEUlRZUEVfQ1VCRVRFWFRVUkUsIEQzREZNVF9BMTZCMTZHMTZSMTZGKSk7CisKKyAg
ICBtRmxvYXQxNlJlbmRlclN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9y
bWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNE
VVNBR0VfUkVOREVSVEFSR0VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0ExNkIx
NkcxNlIxNkYpKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNk
OS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxh
eU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9DVUJF
VEVYVFVSRSwgRDNERk1UX0ExNkIxNkcxNlIxNkYpKTsKKworICAgIGlmICghbUZsb2F0MTZGaWx0
ZXJTdXBwb3J0ICYmICFtRmxvYXQxNlJlbmRlclN1cHBvcnQpCisgICAgeworICAgICAgICBtRmxv
YXQxNlRleHR1cmVTdXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdCht
QWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9BMTZCMTZHMTZSMTZGKSkgJiYKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VG
b3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBEM0RSVFlQRV9DVUJFVEVYVFVSRSwgRDNERk1UX0ExNkIxNkcxNlIxNkYp
KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbUZsb2F0MTZUZXh0dXJlU3VwcG9y
dCA9IHRydWU7CisgICAgfQorCisgICAgLy8gQ2hlY2sgRFhUIHRleHR1cmUgc3VwcG9ydAorICAg
IG1EWFQxVGV4dHVyZVN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0
KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwgRDNE
UlRZUEVfVEVYVFVSRSwgRDNERk1UX0RYVDEpKTsKKyAgICBtRFhUM1RleHR1cmVTdXBwb3J0ID0g
U1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUs
IGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9E
WFQzKSk7CisgICAgbURYVDVUZXh0dXJlU3VwcG9ydCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tE
ZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9y
bWF0LCAwLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfRFhUNSkpOworCisgICAgLy8gQ2hlY2sg
bHVtaW5hbmNlW2FscGhhXSB0ZXh0dXJlIHN1cHBvcnQKKyAgICBtTHVtaW5hbmNlVGV4dHVyZVN1
cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2
aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwg
RDNERk1UX0w4KSk7CisgICAgbUx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQgPSBTVUNDRUVE
RUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVu
dERpc3BsYXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0E4TDgpKTsK
KworICAgIGluaXRpYWxpemVEZXZpY2UoKTsKKworICAgIHJldHVybiBFR0xfU1VDQ0VTUzsKK30K
KworLy8gZG8gYW55IG9uZS10aW1lIGRldmljZSBpbml0aWFsaXphdGlvbgorLy8gTk9URTogdGhp
cyBpcyBhbHNvIG5lZWRlZCBhZnRlciBhIGRldmljZSBsb3N0L3Jlc2V0CisvLyB0byByZXNldCB0
aGUgc2NlbmUgc3RhdHVzIGFuZCBlbnN1cmUgdGhlIGRlZmF1bHQgc3RhdGVzIGFyZSByZXNldC4K
K3ZvaWQgUmVuZGVyZXI5Ojppbml0aWFsaXplRGV2aWNlKCkKK3sKKyAgICAvLyBQZXJtYW5lbnQg
bm9uLWRlZmF1bHQgc3RhdGVzCisgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfUE9J
TlRTUFJJVEVFTkFCTEUsIFRSVUUpOworICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X0xBU1RQSVhFTCwgRkFMU0UpOworCisgICAgaWYgKG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVyVmVy
c2lvbiA+PSBEM0RQU19WRVJTSU9OKDMsIDApKQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfUE9JTlRTSVpFX01BWCwgKERXT1JEJiltRGV2aWNlQ2Fwcy5NYXhQ
b2ludFNpemUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19QT0lOVFNJWkVfTUFYLCAweDNGODAwMDAwKTsgICAvLyAxLjBmCisg
ICAgfQorCisgICAgbWFya0FsbFN0YXRlRGlydHkoKTsKKworICAgIG1TY2VuZVN0YXJ0ZWQgPSBm
YWxzZTsKKworICAgIEFTU0VSVCghbUJsaXQgJiYgIW1WZXJ0ZXhEYXRhTWFuYWdlciAmJiAhbUlu
ZGV4RGF0YU1hbmFnZXIpOworICAgIG1CbGl0ID0gbmV3IEJsaXQodGhpcyk7CisgICAgbVZlcnRl
eERhdGFNYW5hZ2VyID0gbmV3IHJ4OjpWZXJ0ZXhEYXRhTWFuYWdlcih0aGlzKTsKKyAgICBtSW5k
ZXhEYXRhTWFuYWdlciA9IG5ldyByeDo6SW5kZXhEYXRhTWFuYWdlcih0aGlzKTsKK30KKworRDNE
UFJFU0VOVF9QQVJBTUVURVJTIFJlbmRlcmVyOTo6Z2V0RGVmYXVsdFByZXNlbnRQYXJhbWV0ZXJz
KCkKK3sKKyAgICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRlcnMgPSB7MH07
CisKKyAgICAvLyBUaGUgZGVmYXVsdCBzd2FwIGNoYWluIGlzIG5ldmVyIGFjdHVhbGx5IHVzZWQu
IFN1cmZhY2Ugd2lsbCBjcmVhdGUgYSBuZXcgc3dhcCBjaGFpbiB3aXRoIHRoZSBwcm9wZXIgcGFy
YW1ldGVycy4KKyAgICBwcmVzZW50UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVuY2lsRm9ybWF0ID0g
RDNERk1UX1VOS05PV047CisgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckNvdW50ID0g
MTsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyRm9ybWF0ID0gRDNERk1UX1VOS05P
V047CisgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoID0gMTsKKyAgICBwcmVz
ZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0ID0gMTsKKyAgICBwcmVzZW50UGFyYW1ldGVy
cy5FbmFibGVBdXRvRGVwdGhTdGVuY2lsID0gRkFMU0U7CisgICAgcHJlc2VudFBhcmFtZXRlcnMu
RmxhZ3MgPSAwOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLmhEZXZpY2VXaW5kb3cgPSBtRGV2aWNl
V2luZG93OworICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVhbGl0eSA9IDA7Cisg
ICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVUeXBlID0gRDNETVVMVElTQU1QTEVfTk9O
RTsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5QcmVzZW50YXRpb25JbnRlcnZhbCA9IEQzRFBSRVNF
TlRfSU5URVJWQUxfREVGQVVMVDsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5Td2FwRWZmZWN0ID0g
RDNEU1dBUEVGRkVDVF9ESVNDQVJEOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLldpbmRvd2VkID0g
VFJVRTsKKworICAgIHJldHVybiBwcmVzZW50UGFyYW1ldGVyczsKK30KKworaW50IFJlbmRlcmVy
OTo6Z2VuZXJhdGVDb25maWdzKENvbmZpZ0Rlc2MgKipjb25maWdEZXNjTGlzdCkKK3sKKyAgICBE
M0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7CisgICAgbUQzZDktPkdldEFkYXB0ZXJE
aXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnREaXNwbGF5TW9kZSk7CisKKyAgICB1bnNpZ25l
ZCBpbnQgbnVtUmVuZGVyRm9ybWF0cyA9IEFycmF5U2l6ZShSZW5kZXJUYXJnZXRGb3JtYXRzKTsK
KyAgICB1bnNpZ25lZCBpbnQgbnVtRGVwdGhGb3JtYXRzID0gQXJyYXlTaXplKERlcHRoU3RlbmNp
bEZvcm1hdHMpOworICAgICgqY29uZmlnRGVzY0xpc3QpID0gbmV3IENvbmZpZ0Rlc2NbbnVtUmVu
ZGVyRm9ybWF0cyAqIG51bURlcHRoRm9ybWF0c107CisgICAgaW50IG51bUNvbmZpZ3MgPSAwOwor
CisgICAgZm9yICh1bnNpZ25lZCBpbnQgZm9ybWF0SW5kZXggPSAwOyBmb3JtYXRJbmRleCA8IG51
bVJlbmRlckZvcm1hdHM7IGZvcm1hdEluZGV4KyspCisgICAgeworICAgICAgICBEM0RGT1JNQVQg
cmVuZGVyVGFyZ2V0Rm9ybWF0ID0gUmVuZGVyVGFyZ2V0Rm9ybWF0c1tmb3JtYXRJbmRleF07CisK
KyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0
ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9SRU5E
RVJUQVJHRVQsIEQzRFJUWVBFX1NVUkZBQ0UsIHJlbmRlclRhcmdldEZvcm1hdCk7CisKKyAgICAg
ICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBkZXB0aFN0ZW5jaWxJbmRleCA9IDA7IGRlcHRoU3RlbmNpbEluZGV4IDwgbnVt
RGVwdGhGb3JtYXRzOyBkZXB0aFN0ZW5jaWxJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIEQzREZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXQgPSBEZXB0aFN0ZW5jaWxGb3Jt
YXRzW2RlcHRoU3RlbmNpbEluZGV4XTsKKyAgICAgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IEQzRF9PSzsKKworICAgICAgICAgICAgICAgIGlmKGRlcHRoU3RlbmNpbEZvcm1hdCAhPSBEM0RG
TVRfVU5LTk9XTikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJl
bnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX0RFUFRIU1RFTkNJTCwgRDNEUlRZUEVfU1VS
RkFDRSwgZGVwdGhTdGVuY2lsRm9ybWF0KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBpZihkZXB0aFN0ZW5jaWxGb3JtYXQgIT0gRDNERk1UX1VOS05PV04pCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1E
M2Q5LT5DaGVja0RlcHRoU3RlbmNpbE1hdGNoKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVu
dERpc3BsYXlNb2RlLkZvcm1hdCwgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBkZXB0aFN0ZW5jaWxGb3Jt
YXQpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKFNV
Q0NFRURFRChyZXN1bHQpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBDb25maWdEZXNjIG5ld0NvbmZpZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5l
d0NvbmZpZy5yZW5kZXJUYXJnZXRGb3JtYXQgPSBkM2Q5X2dsOjpDb252ZXJ0QmFja0J1ZmZlckZv
cm1hdChyZW5kZXJUYXJnZXRGb3JtYXQpOworICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29u
ZmlnLmRlcHRoU3RlbmNpbEZvcm1hdCA9IGQzZDlfZ2w6OkNvbnZlcnREZXB0aFN0ZW5jaWxGb3Jt
YXQoZGVwdGhTdGVuY2lsRm9ybWF0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZp
Zy5tdWx0aVNhbXBsZSA9IDA7IC8vIEZJWE1FOiBlbnVtZXJhdGUgbXVsdGktc2FtcGxpbmcKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5mYXN0Q29uZmlnID0gKGN1cnJlbnREaXNw
bGF5TW9kZS5Gb3JtYXQgPT0gcmVuZGVyVGFyZ2V0Rm9ybWF0KTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgKCpjb25maWdEZXNjTGlzdClbbnVtQ29uZmlncysrXSA9IG5ld0NvbmZpZzsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBudW1Db25maWdzOworfQorCit2b2lkIFJlbmRl
cmVyOTo6ZGVsZXRlQ29uZmlncyhDb25maWdEZXNjICpjb25maWdEZXNjTGlzdCkKK3sKKyAgICBk
ZWxldGUgW10gKGNvbmZpZ0Rlc2NMaXN0KTsKK30KKwordm9pZCBSZW5kZXJlcjk6OnN0YXJ0U2Nl
bmUoKQoreworICAgIGlmICghbVNjZW5lU3RhcnRlZCkKKyAgICB7CisgICAgICAgIGxvbmcgcmVz
dWx0ID0gbURldmljZS0+QmVnaW5TY2VuZSgpOworICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3Vs
dCkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgZGVmZW5zaXZlIGNoZWNraW5nIGFnYWluc3Qg
dGhlIGRldmljZSBiZWluZworICAgICAgICAgICAgLy8gbG9zdCBhdCB1bmV4cGVjdGVkIHRpbWVz
LgorICAgICAgICAgICAgbVNjZW5lU3RhcnRlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK3ZvaWQgUmVuZGVyZXI5OjplbmRTY2VuZSgpCit7CisgICAgaWYgKG1TY2VuZVN0YXJ0ZWQp
CisgICAgeworICAgICAgICAvLyBFbmRTY2VuZSBjYW4gZmFpbCBpZiB0aGUgZGV2aWNlIHdhcyBs
b3N0LCBmb3IgZXhhbXBsZSBkdWUKKyAgICAgICAgLy8gdG8gYSBURFIgZHVyaW5nIGEgZHJhdyBj
YWxsLgorICAgICAgICBtRGV2aWNlLT5FbmRTY2VuZSgpOworICAgICAgICBtU2NlbmVTdGFydGVk
ID0gZmFsc2U7CisgICAgfQorfQorCit2b2lkIFJlbmRlcmVyOTo6c3luYyhib29sIGJsb2NrKQor
eworICAgIEhSRVNVTFQgcmVzdWx0OworCisgICAgSURpcmVjdDNEUXVlcnk5KiBxdWVyeSA9IGFs
bG9jYXRlRXZlbnRRdWVyeSgpOworICAgIGlmICghcXVlcnkpCisgICAgeworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgcmVzdWx0ID0gcXVlcnktPklzc3VlKEQzRElTU1VFX0VORCk7Cisg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIGRvCisgICAgeworICAgICAgICBy
ZXN1bHQgPSBxdWVyeS0+R2V0RGF0YShOVUxMLCAwLCBEM0RHRVREQVRBX0ZMVVNIKTsKKworICAg
ICAgICBpZihibG9jayAmJiByZXN1bHQgPT0gU19GQUxTRSkKKyAgICAgICAgeworICAgICAgICAg
ICAgLy8gS2VlcCBwb2xsaW5nLCBidXQgYWxsb3cgb3RoZXIgdGhyZWFkcyB0byBkbyBzb21ldGhp
bmcgdXNlZnVsIGZpcnN0CisgICAgICAgICAgICBTbGVlcCgwKTsKKyAgICAgICAgICAgIC8vIGV4
cGxpY2l0bHkgY2hlY2sgZm9yIGRldmljZSBsb3NzCisgICAgICAgICAgICAvLyBzb21lIGRyaXZl
cnMgc2VlbSB0byByZXR1cm4gU19GQUxTRSBldmVuIGlmIHRoZSBkZXZpY2UgaXMgbG9zdAorICAg
ICAgICAgICAgLy8gaW5zdGVhZCBvZiBEM0RFUlJfREVWSUNFTE9TVCBsaWtlIHRoZXkgc2hvdWxk
CisgICAgICAgICAgICBpZiAodGVzdERldmljZUxvc3QoZmFsc2UpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IEQzREVSUl9ERVZJQ0VMT1NUOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIHdoaWxlKGJsb2NrICYmIHJlc3VsdCA9PSBTX0ZBTFNF
KTsKKworICAgIGZyZWVFdmVudFF1ZXJ5KHF1ZXJ5KTsKKworICAgIGlmIChkM2Q5Ojppc0Rldmlj
ZUxvc3RFcnJvcihyZXN1bHQpKQorICAgIHsKKyAgICAgICAgbm90aWZ5RGV2aWNlTG9zdCgpOwor
ICAgIH0KK30KKworU3dhcENoYWluICpSZW5kZXJlcjk6OmNyZWF0ZVN3YXBDaGFpbihIV05EIHdp
bmRvdywgSEFORExFIHNoYXJlSGFuZGxlLCBHTGVudW0gYmFja0J1ZmZlckZvcm1hdCwgR0xlbnVt
IGRlcHRoQnVmZmVyRm9ybWF0KQoreworICAgIHJldHVybiBuZXcgcng6OlN3YXBDaGFpbjkodGhp
cywgd2luZG93LCBzaGFyZUhhbmRsZSwgYmFja0J1ZmZlckZvcm1hdCwgZGVwdGhCdWZmZXJGb3Jt
YXQpOworfQorCitJRGlyZWN0M0RRdWVyeTkqIFJlbmRlcmVyOTo6YWxsb2NhdGVFdmVudFF1ZXJ5
KCkKK3sKKyAgICBJRGlyZWN0M0RRdWVyeTkgKnF1ZXJ5ID0gTlVMTDsKKworICAgIGlmIChtRXZl
bnRRdWVyeVBvb2wuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURl
dmljZS0+Q3JlYXRlUXVlcnkoRDNEUVVFUllUWVBFX0VWRU5ULCAmcXVlcnkpOworICAgICAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICBxdWVyeSA9IG1FdmVudFF1ZXJ5UG9vbC5iYWNrKCk7CisgICAgICAgIG1FdmVudFF1ZXJ5UG9v
bC5wb3BfYmFjaygpOworICAgIH0KKworICAgIHJldHVybiBxdWVyeTsKK30KKwordm9pZCBSZW5k
ZXJlcjk6OmZyZWVFdmVudFF1ZXJ5KElEaXJlY3QzRFF1ZXJ5OSogcXVlcnkpCit7CisgICAgaWYg
KG1FdmVudFF1ZXJ5UG9vbC5zaXplKCkgPiAxMDAwKQorICAgIHsKKyAgICAgICAgcXVlcnktPlJl
bGVhc2UoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbUV2ZW50UXVlcnlQb29s
LnB1c2hfYmFjayhxdWVyeSk7CisgICAgfQorfQorCitJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICpS
ZW5kZXJlcjk6OmNyZWF0ZVZlcnRleFNoYWRlcihjb25zdCBEV09SRCAqZnVuY3Rpb24sIHNpemVf
dCBsZW5ndGgpCit7CisgICAgcmV0dXJuIG1WZXJ0ZXhTaGFkZXJDYWNoZS5jcmVhdGUoZnVuY3Rp
b24sIGxlbmd0aCk7Cit9CisKK0lEaXJlY3QzRFBpeGVsU2hhZGVyOSAqUmVuZGVyZXI5OjpjcmVh
dGVQaXhlbFNoYWRlcihjb25zdCBEV09SRCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgpCit7Cisg
ICAgcmV0dXJuIG1QaXhlbFNoYWRlckNhY2hlLmNyZWF0ZShmdW5jdGlvbiwgbGVuZ3RoKTsKK30K
KworSFJFU1VMVCBSZW5kZXJlcjk6OmNyZWF0ZVZlcnRleEJ1ZmZlcihVSU5UIExlbmd0aCwgRFdP
UkQgVXNhZ2UsIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKipwcFZlcnRleEJ1ZmZlcikKK3sKKyAg
ICBEM0RQT09MIFBvb2wgPSBnZXRCdWZmZXJQb29sKFVzYWdlKTsKKyAgICByZXR1cm4gbURldmlj
ZS0+Q3JlYXRlVmVydGV4QnVmZmVyKExlbmd0aCwgVXNhZ2UsIDAsIFBvb2wsIHBwVmVydGV4QnVm
ZmVyLCBOVUxMKTsKK30KKworVmVydGV4QnVmZmVyICpSZW5kZXJlcjk6OmNyZWF0ZVZlcnRleEJ1
ZmZlcigpCit7CisgICAgcmV0dXJuIG5ldyBWZXJ0ZXhCdWZmZXI5KHRoaXMpOworfQorCitIUkVT
VUxUIFJlbmRlcmVyOTo6Y3JlYXRlSW5kZXhCdWZmZXIoVUlOVCBMZW5ndGgsIERXT1JEIFVzYWdl
LCBEM0RGT1JNQVQgRm9ybWF0LCBJRGlyZWN0M0RJbmRleEJ1ZmZlcjkgKipwcEluZGV4QnVmZmVy
KQoreworICAgIEQzRFBPT0wgUG9vbCA9IGdldEJ1ZmZlclBvb2woVXNhZ2UpOworICAgIHJldHVy
biBtRGV2aWNlLT5DcmVhdGVJbmRleEJ1ZmZlcihMZW5ndGgsIFVzYWdlLCBGb3JtYXQsIFBvb2ws
IHBwSW5kZXhCdWZmZXIsIE5VTEwpOworfQorCitJbmRleEJ1ZmZlciAqUmVuZGVyZXI5OjpjcmVh
dGVJbmRleEJ1ZmZlcigpCit7CisgICAgcmV0dXJuIG5ldyBJbmRleEJ1ZmZlcjkodGhpcyk7Cit9
CisKK0J1ZmZlclN0b3JhZ2UgKlJlbmRlcmVyOTo6Y3JlYXRlQnVmZmVyU3RvcmFnZSgpCit7Cisg
ICAgcmV0dXJuIG5ldyBCdWZmZXJTdG9yYWdlOSgpOworfQorCitRdWVyeUltcGwgKlJlbmRlcmVy
OTo6Y3JlYXRlUXVlcnkoR0xlbnVtIHR5cGUpCit7CisgICAgcmV0dXJuIG5ldyBRdWVyeTkodGhp
cywgdHlwZSk7Cit9CisKK0ZlbmNlSW1wbCAqUmVuZGVyZXI5OjpjcmVhdGVGZW5jZSgpCit7Cisg
ICAgcmV0dXJuIG5ldyBGZW5jZTkodGhpcyk7Cit9CisKK3ZvaWQgUmVuZGVyZXI5OjpzZXRTYW1w
bGVyU3RhdGUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRleCwgY29uc3QgZ2w6OlNhbXBs
ZXJTdGF0ZSAmc2FtcGxlclN0YXRlKQoreworICAgIGJvb2wgKmZvcmNlU2V0U2FtcGxlcnMgPSAo
dHlwZSA9PSBnbDo6U0FNUExFUl9QSVhFTCkgPyBtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0ZXMg
OiBtRm9yY2VTZXRWZXJ0ZXhTYW1wbGVyU3RhdGVzOworICAgIGdsOjpTYW1wbGVyU3RhdGUgKmFw
cGxpZWRTYW1wbGVycyA9ICh0eXBlID09IGdsOjpTQU1QTEVSX1BJWEVMKSA/IG1DdXJQaXhlbFNh
bXBsZXJTdGF0ZXM6IG1DdXJWZXJ0ZXhTYW1wbGVyU3RhdGVzOworCisgICAgaWYgKGZvcmNlU2V0
U2FtcGxlcnNbaW5kZXhdIHx8IG1lbWNtcCgmc2FtcGxlclN0YXRlLCAmYXBwbGllZFNhbXBsZXJz
W2luZGV4XSwgc2l6ZW9mKGdsOjpTYW1wbGVyU3RhdGUpKSAhPSAwKQorICAgIHsKKyAgICAgICAg
aW50IGQzZFNhbXBsZXJPZmZzZXQgPSAodHlwZSA9PSBnbDo6U0FNUExFUl9QSVhFTCkgPyAwIDog
RDNEVkVSVEVYVEVYVFVSRVNBTVBMRVIwOworICAgICAgICBpbnQgZDNkU2FtcGxlciA9IGluZGV4
ICsgZDNkU2FtcGxlck9mZnNldDsKKworICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUo
ZDNkU2FtcGxlciwgRDNEU0FNUF9BRERSRVNTVSwgZ2xfZDNkOTo6Q29udmVydFRleHR1cmVXcmFw
KHNhbXBsZXJTdGF0ZS53cmFwUykpOworICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUo
ZDNkU2FtcGxlciwgRDNEU0FNUF9BRERSRVNTViwgZ2xfZDNkOTo6Q29udmVydFRleHR1cmVXcmFw
KHNhbXBsZXJTdGF0ZS53cmFwVCkpOworCisgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0
ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01BR0ZJTFRFUiwgZ2xfZDNkOTo6Q29udmVydE1hZ0ZpbHRl
cihzYW1wbGVyU3RhdGUubWFnRmlsdGVyLCBzYW1wbGVyU3RhdGUubWF4QW5pc290cm9weSkpOwor
ICAgICAgICBEM0RURVhUVVJFRklMVEVSVFlQRSBkM2RNaW5GaWx0ZXIsIGQzZE1pcEZpbHRlcjsK
KyAgICAgICAgZ2xfZDNkOTo6Q29udmVydE1pbkZpbHRlcihzYW1wbGVyU3RhdGUubWluRmlsdGVy
LCAmZDNkTWluRmlsdGVyLCAmZDNkTWlwRmlsdGVyLCBzYW1wbGVyU3RhdGUubWF4QW5pc290cm9w
eSk7CisgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1Q
X01JTkZJTFRFUiwgZDNkTWluRmlsdGVyKTsKKyAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0
YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUlQRklMVEVSLCBkM2RNaXBGaWx0ZXIpOworICAgICAg
ICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9NQVhNSVBMRVZF
TCwgc2FtcGxlclN0YXRlLmxvZE9mZnNldCk7CisgICAgICAgIGlmIChtU3VwcG9ydHNUZXh0dXJl
RmlsdGVyQW5pc290cm9weSkKKyAgICAgICAgeworICAgICAgICAgICAgbURldmljZS0+U2V0U2Ft
cGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUFYQU5JU09UUk9QWSwgKERXT1JEKXNhbXBs
ZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvcmNlU2V0
U2FtcGxlcnNbaW5kZXhdID0gZmFsc2U7CisgICAgYXBwbGllZFNhbXBsZXJzW2luZGV4XSA9IHNh
bXBsZXJTdGF0ZTsKK30KKwordm9pZCBSZW5kZXJlcjk6OnNldFRleHR1cmUoZ2w6OlNhbXBsZXJU
eXBlIHR5cGUsIGludCBpbmRleCwgZ2w6OlRleHR1cmUgKnRleHR1cmUpCit7CisgICAgaW50IGQz
ZFNhbXBsZXJPZmZzZXQgPSAodHlwZSA9PSBnbDo6U0FNUExFUl9QSVhFTCkgPyAwIDogRDNEVkVS
VEVYVEVYVFVSRVNBTVBMRVIwOworICAgIGludCBkM2RTYW1wbGVyID0gaW5kZXggKyBkM2RTYW1w
bGVyT2Zmc2V0OworICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZDNkVGV4dHVyZSA9IE5VTEw7
CisgICAgdW5zaWduZWQgaW50IHNlcmlhbCA9IDA7CisgICAgYm9vbCBmb3JjZVNldFRleHR1cmUg
PSBmYWxzZTsKKworICAgIHVuc2lnbmVkIGludCAqYXBwbGllZFNlcmlhbHMgPSAodHlwZSA9PSBn
bDo6U0FNUExFUl9QSVhFTCkgPyBtQ3VyUGl4ZWxUZXh0dXJlU2VyaWFscyA6IG1DdXJWZXJ0ZXhU
ZXh0dXJlU2VyaWFsczsKKworICAgIGlmICh0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgVGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UgKnRleFN0b3JhZ2UgPSB0ZXh0dXJlLT5nZXROYXRpdmVUZXh0dXJl
KCk7CisgICAgICAgIGlmICh0ZXhTdG9yYWdlKQorICAgICAgICB7CisgICAgICAgICAgICBUZXh0
dXJlU3RvcmFnZTkgKnN0b3JhZ2U5ID0gVGV4dHVyZVN0b3JhZ2U5OjptYWtlVGV4dHVyZVN0b3Jh
Z2U5KHRleFN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICAgICAgICAgIGQzZFRl
eHR1cmUgPSBzdG9yYWdlOS0+Z2V0QmFzZVRleHR1cmUoKTsKKyAgICAgICAgfQorICAgICAgICAv
LyBJZiB3ZSBnZXQgTlVMTCBiYWNrIGZyb20gZ2V0QmFzZVRleHR1cmUgaGVyZSwgc29tZXRoaW5n
IHdlbnQgd3JvbmcKKyAgICAgICAgLy8gaW4gdGhlIHRleHR1cmUgY2xhc3MgYW5kIHdlJ3JlIHVu
ZXhwZWN0ZWRseSBtaXNzaW5nIHRoZSBkM2QgdGV4dHVyZQorICAgICAgICBBU1NFUlQoZDNkVGV4
dHVyZSAhPSBOVUxMKTsKKworICAgICAgICBzZXJpYWwgPSB0ZXh0dXJlLT5nZXRUZXh0dXJlU2Vy
aWFsKCk7CisgICAgICAgIGZvcmNlU2V0VGV4dHVyZSA9IHRleHR1cmUtPmhhc0RpcnR5SW1hZ2Vz
KCk7CisgICAgfQorCisgICAgaWYgKGZvcmNlU2V0VGV4dHVyZSB8fCBhcHBsaWVkU2VyaWFsc1tp
bmRleF0gIT0gc2VyaWFsKQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZShkM2RT
YW1wbGVyLCBkM2RUZXh0dXJlKTsKKyAgICB9CisKKyAgICBhcHBsaWVkU2VyaWFsc1tpbmRleF0g
PSBzZXJpYWw7Cit9CisKK3ZvaWQgUmVuZGVyZXI5OjpzZXRSYXN0ZXJpemVyU3RhdGUoY29uc3Qg
Z2w6OlJhc3Rlcml6ZXJTdGF0ZSAmcmFzdGVyU3RhdGUpCit7CisgICAgYm9vbCByYXN0ZXJTdGF0
ZUNoYW5nZWQgPSBtRm9yY2VTZXRSYXN0ZXJTdGF0ZSB8fCBtZW1jbXAoJnJhc3RlclN0YXRlLCAm
bUN1clJhc3RlclN0YXRlLCBzaXplb2YoZ2w6OlJhc3Rlcml6ZXJTdGF0ZSkpICE9IDA7CisKKyAg
ICBpZiAocmFzdGVyU3RhdGVDaGFuZ2VkKQorICAgIHsKKyAgICAgICAgLy8gU2V0IHRoZSBjdWxs
IG1vZGUKKyAgICAgICAgaWYgKHJhc3RlclN0YXRlLmN1bGxGYWNlKQorICAgICAgICB7CisgICAg
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgZ2xfZDNkOTo6
Q29udmVydEN1bGxNb2RlKHJhc3RlclN0YXRlLmN1bGxNb2RlLCByYXN0ZXJTdGF0ZS5mcm9udEZh
Y2UpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHJhc3RlclN0YXRlLnBvbHlnb25PZmZzZXRGaWxsKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAobUN1ckRlcHRoU2l6ZSA+IDApCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0xPUEVTQ0FM
RURFUFRIQklBUywgKihEV09SRCopJnJhc3RlclN0YXRlLnBvbHlnb25PZmZzZXRGYWN0b3IpOwor
CisgICAgICAgICAgICAgICAgZmxvYXQgZGVwdGhCaWFzID0gbGRleHAocmFzdGVyU3RhdGUucG9s
eWdvbk9mZnNldFVuaXRzLCAtc3RhdGljX2Nhc3Q8aW50PihtQ3VyRGVwdGhTaXplKSk7CisgICAg
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVQVEhCSUFTLCAqKERX
T1JEKikmZGVwdGhCaWFzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NM
T1BFU0NBTEVERVBUSEJJQVMsIDApOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfREVQVEhCSUFTLCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIG1DdXJSYXN0ZXJT
dGF0ZSA9IHJhc3RlclN0YXRlOworICAgIH0KKworICAgIG1Gb3JjZVNldFJhc3RlclN0YXRlID0g
ZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyZXI5OjpzZXRCbGVuZFN0YXRlKGdsOjpGcmFtZWJ1ZmZl
ciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRlLCBjb25zdCBn
bDo6Q29sb3IgJmJsZW5kQ29sb3IsIHVuc2lnbmVkIGludCBzYW1wbGVNYXNrKQoreworICAgIGJv
b2wgYmxlbmRTdGF0ZUNoYW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0YXRlIHx8IG1lbWNtcCgmYmxl
bmRTdGF0ZSwgJm1DdXJCbGVuZFN0YXRlLCBzaXplb2YoZ2w6OkJsZW5kU3RhdGUpKSAhPSAwOwor
ICAgIGJvb2wgYmxlbmRDb2xvckNoYW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0YXRlIHx8IG1lbWNt
cCgmYmxlbmRDb2xvciwgJm1DdXJCbGVuZENvbG9yLCBzaXplb2YoZ2w6OkNvbG9yKSkgIT0gMDsK
KyAgICBib29sIHNhbXBsZU1hc2tDaGFuZ2VkID0gbUZvcmNlU2V0QmxlbmRTdGF0ZSB8fCBzYW1w
bGVNYXNrICE9IG1DdXJTYW1wbGVNYXNrOworCisgICAgaWYgKGJsZW5kU3RhdGVDaGFuZ2VkIHx8
IGJsZW5kQ29sb3JDaGFuZ2VkKQorICAgIHsKKyAgICAgICAgaWYgKGJsZW5kU3RhdGUuYmxlbmQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FM
UEhBQkxFTkRFTkFCTEUsIFRSVUUpOworCisgICAgICAgICAgICBpZiAoYmxlbmRTdGF0ZS5zb3Vy
Y2VCbGVuZFJHQiAhPSBHTF9DT05TVEFOVF9BTFBIQSAmJiBibGVuZFN0YXRlLnNvdXJjZUJsZW5k
UkdCICE9IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSAmJgorICAgICAgICAgICAgICAgIGJs
ZW5kU3RhdGUuZGVzdEJsZW5kUkdCICE9IEdMX0NPTlNUQU5UX0FMUEhBICYmIGJsZW5kU3RhdGUu
ZGVzdEJsZW5kUkdCICE9IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVOREZB
Q1RPUiwgZ2xfZDNkOTo6Q29udmVydENvbG9yKGJsZW5kQ29sb3IpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVOREZBQ1RPUiwgRDNEQ09MT1JfUkdCQShnbDo6dW5v
cm08OD4oYmxlbmRDb2xvci5hbHBoYSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGJs
ZW5kQ29sb3IuYWxwaGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4PihibGVuZENvbG9y
LmFscGhhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oYmxlbmRDb2xvci5hbHBoYSkp
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfU1JDQkxFTkQsIGdsX2QzZDk6OkNvbnZlcnRCbGVuZEZ1bmMoYmxlbmRTdGF0ZS5zb3Vy
Y2VCbGVuZFJHQikpOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
REVTVEJMRU5ELCBnbF9kM2Q5OjpDb252ZXJ0QmxlbmRGdW5jKGJsZW5kU3RhdGUuZGVzdEJsZW5k
UkdCKSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVORE9Q
LCBnbF9kM2Q5OjpDb252ZXJ0QmxlbmRPcChibGVuZFN0YXRlLmJsZW5kRXF1YXRpb25SR0IpKTsK
KworICAgICAgICAgICAgaWYgKGJsZW5kU3RhdGUuc291cmNlQmxlbmRSR0IgIT0gYmxlbmRTdGF0
ZS5zb3VyY2VCbGVuZEFscGhhIHx8CisgICAgICAgICAgICAgICAgYmxlbmRTdGF0ZS5kZXN0Qmxl
bmRSR0IgIT0gYmxlbmRTdGF0ZS5kZXN0QmxlbmRBbHBoYSB8fAorICAgICAgICAgICAgICAgIGJs
ZW5kU3RhdGUuYmxlbmRFcXVhdGlvblJHQiAhPSBibGVuZFN0YXRlLmJsZW5kRXF1YXRpb25BbHBo
YSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOworCisgICAgICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JDQkxFTkRBTFBIQSwgZ2xfZDNkOTo6
Q29udmVydEJsZW5kRnVuYyhibGVuZFN0YXRlLnNvdXJjZUJsZW5kQWxwaGEpKTsKKyAgICAgICAg
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ERVNUQkxFTkRBTFBIQSwgZ2xf
ZDNkOTo6Q29udmVydEJsZW5kRnVuYyhibGVuZFN0YXRlLmRlc3RCbGVuZEFscGhhKSk7CisgICAg
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRPUEFMUEhBLCBn
bF9kM2Q5OjpDb252ZXJ0QmxlbmRPcChibGVuZFN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSkpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NFUEFSQVRFQUxQSEFCTEVOREVO
QUJMRSwgRkFMU0UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFC
TEVOREVOQUJMRSwgRkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGJsZW5kU3RhdGUu
c2FtcGxlQWxwaGFUb0NvdmVyYWdlKQorICAgICAgICB7CisgICAgICAgICAgICBGSVhNRSgiU2Ft
cGxlIGFscGhhIHRvIGNvdmVyYWdlIGlzIHVuaW1wbGVtZW50ZWQuIik7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBTZXQgdGhlIGNvbG9yIG1hc2sKKyAgICAgICAgYm9vbCB6ZXJvQ29sb3JNYXNr
QWxsb3dlZCA9IGdldEFkYXB0ZXJWZW5kb3IoKSAhPSBWRU5ET1JfSURfQU1EOworICAgICAgICAv
LyBBcHBhcmVudGx5IHNvbWUgQVRJIGNhcmRzIGhhdmUgYSBidWcgd2hlcmUgYSBkcmF3IHdpdGgg
YSB6ZXJvIGNvbG9yCisgICAgICAgIC8vIHdyaXRlIG1hc2sgY2FuIGNhdXNlIGxhdGVyIGRyYXdz
IHRvIGhhdmUgaW5jb3JyZWN0IHJlc3VsdHMuIEluc3RlYWQsCisgICAgICAgIC8vIHNldCBhIG5v
bnplcm8gY29sb3Igd3JpdGUgbWFzayBidXQgbW9kaWZ5IHRoZSBibGVuZCBzdGF0ZSBzbyB0aGF0
IG5vCisgICAgICAgIC8vIGRyYXdpbmcgaXMgZG9uZS4KKyAgICAgICAgLy8gaHR0cDovL2NvZGUu
Z29vZ2xlLmNvbS9wL2FuZ2xlcHJvamVjdC9pc3N1ZXMvZGV0YWlsP2lkPTE2OQorCisgICAgICAg
IERXT1JEIGNvbG9yTWFzayA9IGdsX2QzZDk6OkNvbnZlcnRDb2xvck1hc2soYmxlbmRTdGF0ZS5j
b2xvck1hc2tSZWQsIGJsZW5kU3RhdGUuY29sb3JNYXNrR3JlZW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRTdGF0ZS5jb2xvck1hc2tC
bHVlLCBibGVuZFN0YXRlLmNvbG9yTWFza0FscGhhKTsKKyAgICAgICAgaWYgKGNvbG9yTWFzayA9
PSAwICYmICF6ZXJvQ29sb3JNYXNrQWxsb3dlZCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8g
RW5hYmxlIGdyZWVuIGNoYW5uZWwsIGJ1dCBzZXQgYmxlbmRpbmcgc28gbm90aGluZyB3aWxsIGJl
IGRyYXduLgorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JX
UklURUVOQUJMRSwgRDNEQ09MT1JXUklURUVOQUJMRV9HUkVFTik7CisgICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsKKworICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JDQkxFTkQsIEQzREJMRU5E
X1pFUk8pOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVTVEJM
RU5ELCBEM0RCTEVORF9PTkUpOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfQkxFTkRPUCwgRDNEQkxFTkRPUF9BREQpOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09M
T1JXUklURUVOQUJMRSwgY29sb3JNYXNrKTsKKyAgICAgICAgfQorCisgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX0RJVEhFUkVOQUJMRSwgYmxlbmRTdGF0ZS5kaXRoZXIgPyBU
UlVFIDogRkFMU0UpOworCisgICAgICAgIG1DdXJCbGVuZFN0YXRlID0gYmxlbmRTdGF0ZTsKKyAg
ICAgICAgbUN1ckJsZW5kQ29sb3IgPSBibGVuZENvbG9yOworICAgIH0KKworICAgIGlmIChzYW1w
bGVNYXNrQ2hhbmdlZCkKKyAgICB7CisgICAgICAgIC8vIFNldCB0aGUgbXVsdGlzYW1wbGUgbWFz
aworICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRUFOVElB
TElBUywgVFJVRSk7CisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJ
U0FNUExFTUFTSywgc3RhdGljX2Nhc3Q8RFdPUkQ+KHNhbXBsZU1hc2spKTsKKworICAgICAgICBt
Q3VyU2FtcGxlTWFzayA9IHNhbXBsZU1hc2s7CisgICAgfQorCisgICAgbUZvcmNlU2V0QmxlbmRT
dGF0ZSA9IGZhbHNlOworfQorCit2b2lkIFJlbmRlcmVyOTo6c2V0RGVwdGhTdGVuY2lsU3RhdGUo
Y29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZkZXB0aFN0ZW5jaWxTdGF0ZSwgaW50IHN0ZW5j
aWxSZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0ZW5jaWxC
YWNrUmVmLCBib29sIGZyb250RmFjZUNDVykKK3sKKyAgICBib29sIGRlcHRoU3RlbmNpbFN0YXRl
Q2hhbmdlZCA9IG1Gb3JjZVNldERlcHRoU3RlbmNpbFN0YXRlIHx8CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtZW1jbXAoJmRlcHRoU3RlbmNpbFN0YXRlLCAmbUN1ckRlcHRo
U3RlbmNpbFN0YXRlLCBzaXplb2YoZ2w6OkRlcHRoU3RlbmNpbFN0YXRlKSkgIT0gMDsKKyAgICBi
b29sIHN0ZW5jaWxSZWZDaGFuZ2VkID0gbUZvcmNlU2V0RGVwdGhTdGVuY2lsU3RhdGUgfHwgc3Rl
bmNpbFJlZiAhPSBtQ3VyU3RlbmNpbFJlZiB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGVuY2lsQmFja1JlZiAhPSBtQ3VyU3RlbmNpbEJhY2tSZWY7CisgICAgYm9vbCBmcm9udEZh
Y2VDQ1dDaGFuZ2VkID0gbUZvcmNlU2V0RGVwdGhTdGVuY2lsU3RhdGUgfHwgZnJvbnRGYWNlQ0NX
ICE9IG1DdXJGcm9udEZhY2VDQ1c7CisKKyAgICBpZiAoZGVwdGhTdGVuY2lsU3RhdGVDaGFuZ2Vk
KQorICAgIHsKKyAgICAgICAgaWYgKGRlcHRoU3RlbmNpbFN0YXRlLmRlcHRoVGVzdCkKKyAgICAg
ICAgeworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwg
RDNEWkJfVFJVRSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19a
RlVOQywgZ2xfZDNkOTo6Q29udmVydENvbXBhcmlzb24oZGVwdGhTdGVuY2lsU3RhdGUuZGVwdGhG
dW5jKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBEM0RaQl9GQUxTRSk7CisgICAg
ICAgIH0KKworICAgICAgICBtQ3VyRGVwdGhTdGVuY2lsU3RhdGUgPSBkZXB0aFN0ZW5jaWxTdGF0
ZTsKKyAgICB9CisKKyAgICBpZiAoZGVwdGhTdGVuY2lsU3RhdGVDaGFuZ2VkIHx8IHN0ZW5jaWxS
ZWZDaGFuZ2VkIHx8IGZyb250RmFjZUNDV0NoYW5nZWQpCisgICAgeworICAgICAgICBpZiAoZGVw
dGhTdGVuY2lsU3RhdGUuc3RlbmNpbFRlc3QgJiYgbUN1clN0ZW5jaWxTaXplID4gMCkKKyAgICAg
ICAgeworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVO
QUJMRSwgVFJVRSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19U
V09TSURFRFNURU5DSUxNT0RFLCBUUlVFKTsKKworICAgICAgICAgICAgLy8gRklYTUU6IFVuc3Vw
cG9ydGVkIGJ5IEQzRDkKKyAgICAgICAgICAgIGNvbnN0IEQzRFJFTkRFUlNUQVRFVFlQRSBEM0RS
U19DQ1dfU1RFTkNJTFJFRiA9IEQzRFJTX1NURU5DSUxSRUY7CisgICAgICAgICAgICBjb25zdCBE
M0RSRU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxNQVNLID0gRDNEUlNfU1RFTkNJTE1B
U0s7CisgICAgICAgICAgICBjb25zdCBEM0RSRU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NXX1NURU5D
SUxXUklURU1BU0sgPSBEM0RSU19TVEVOQ0lMV1JJVEVNQVNLOworICAgICAgICAgICAgaWYgKGRl
cHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sgIT0gZGVwdGhTdGVuY2lsU3RhdGUuc3Rl
bmNpbEJhY2tXcml0ZW1hc2sgfHwKKyAgICAgICAgICAgICAgICBzdGVuY2lsUmVmICE9IHN0ZW5j
aWxCYWNrUmVmIHx8CisgICAgICAgICAgICAgICAgZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbE1h
c2sgIT0gZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbEJhY2tNYXNrKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIEVSUigiU2VwYXJhdGUgZnJvbnQvYmFjayBzdGVuY2lsIHdyaXRlbWFz
a3MsIHJlZmVyZW5jZSB2YWx1ZXMsIG9yIHN0ZW5jaWwgbWFzayB2YWx1ZXMgYXJlIGludmFsaWQg
dW5kZXIgV2ViR0wuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGdldCB0aGUg
bWF4aW11bSBzaXplIG9mIHRoZSBzdGVuY2lsIHJlZgorICAgICAgICAgICAgdW5zaWduZWQgaW50
IG1heFN0ZW5jaWwgPSAoMSA8PCBtQ3VyU3RlbmNpbFNpemUpIC0gMTsKKworICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoZnJvbnRGYWNlQ0NXID8gRDNEUlNfU1RFTkNJTFdSSVRF
TUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMV1JJVEVNQVNLLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbFdyaXRlbWFzayk7CisgICAg
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShmcm9udEZhY2VDQ1cgPyBEM0RSU19TVEVO
Q0lMRlVOQyA6IEQzRFJTX0NDV19TVEVOQ0lMRlVOQywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRDb21wYXJpc29uKGRlcHRoU3RlbmNpbFN0YXRl
LnN0ZW5jaWxGdW5jKSk7CisKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGZy
b250RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxSRUYgOiBEM0RSU19DQ1dfU1RFTkNJTFJFRiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGVuY2lsUmVmIDwgKGludCltYXhT
dGVuY2lsKSA/IHN0ZW5jaWxSZWYgOiBtYXhTdGVuY2lsKTsKKyAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKGZyb250RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxNQVNLIDogRDNEUlNf
Q0NXX1NURU5DSUxNQVNLLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVw
dGhTdGVuY2lsU3RhdGUuc3RlbmNpbE1hc2spOworCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShmcm9udEZhY2VDQ1cgPyBEM0RSU19TVEVOQ0lMRkFJTCA6IEQzRFJTX0NDV19T
VEVOQ0lMRkFJTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6
OkNvbnZlcnRTdGVuY2lsT3AoZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbEZhaWwpKTsKKyAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGZyb250RmFjZUNDVyA/IEQzRFJTX1NURU5D
SUxaRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMWkZBSUwsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnbF9kM2Q5OjpDb252ZXJ0U3RlbmNpbE9wKGRlcHRoU3RlbmNpbFN0YXRl
LnN0ZW5jaWxQYXNzRGVwdGhGYWlsKSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShmcm9udEZhY2VDQ1cgPyBEM0RSU19TVEVOQ0lMUEFTUyA6IEQzRFJTX0NDV19TVEVOQ0lM
UEFTUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZl
cnRTdGVuY2lsT3AoZGVwdGhTdGVuY2lsU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MpKTsKKwor
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoIWZyb250RmFjZUNDVyA/IEQzRFJT
X1NURU5DSUxXUklURU1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTFdSSVRFTUFTSywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxCYWNr
V3JpdGVtYXNrKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKCFmcm9udEZh
Y2VDQ1cgPyBEM0RSU19TVEVOQ0lMRlVOQyA6IEQzRFJTX0NDV19TVEVOQ0lMRlVOQywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRDb21wYXJpc29u
KGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxCYWNrRnVuYykpOworCisgICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZSghZnJvbnRGYWNlQ0NXID8gRDNEUlNfU1RFTkNJTFJFRiA6IEQz
RFJTX0NDV19TVEVOQ0lMUkVGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHN0ZW5jaWxCYWNrUmVmIDwgKGludCltYXhTdGVuY2lsKSA/IHN0ZW5jaWxCYWNrUmVmIDogbWF4
U3RlbmNpbCk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZSghZnJvbnRGYWNl
Q0NXID8gRDNEUlNfU1RFTkNJTE1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTE1BU0ssCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsQmFj
a01hc2spOworCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZSghZnJvbnRGYWNl
Q0NXID8gRDNEUlNfU1RFTkNJTEZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTEZBSUwsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9kM2Q5OjpDb252ZXJ0U3RlbmNpbE9wKGRl
cHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxCYWNrRmFpbCkpOworICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoIWZyb250RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxaRkFJTCA6IEQzRFJT
X0NDV19TVEVOQ0lMWkZBSUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bF9kM2Q5OjpDb252ZXJ0U3RlbmNpbE9wKGRlcHRoU3RlbmNpbFN0YXRlLnN0ZW5jaWxCYWNrUGFz
c0RlcHRoRmFpbCkpOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoIWZyb250
RmFjZUNDVyA/IEQzRFJTX1NURU5DSUxQQVNTIDogRDNEUlNfQ0NXX1NURU5DSUxQQVNTLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6Q29udmVydFN0ZW5jaWxP
cChkZXB0aFN0ZW5jaWxTdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MpKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pXUklURUVOQUJMRSwgZGVwdGhTdGVuY2ls
U3RhdGUuZGVwdGhNYXNrID8gVFJVRSA6IEZBTFNFKTsKKworICAgICAgICBtQ3VyU3RlbmNpbFJl
ZiA9IHN0ZW5jaWxSZWY7CisgICAgICAgIG1DdXJTdGVuY2lsQmFja1JlZiA9IHN0ZW5jaWxCYWNr
UmVmOworICAgICAgICBtQ3VyRnJvbnRGYWNlQ0NXID0gZnJvbnRGYWNlQ0NXOworICAgIH0KKwor
ICAgIG1Gb3JjZVNldERlcHRoU3RlbmNpbFN0YXRlID0gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVy
ZXI5OjpzZXRTY2lzc29yUmVjdGFuZ2xlKGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNjaXNzb3IsIGJv
b2wgZW5hYmxlZCkKK3sKKyAgICBib29sIHNjaXNzb3JDaGFuZ2VkID0gbUZvcmNlU2V0U2Npc3Nv
ciB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1jbXAoJnNjaXNzb3IsICZtQ3VyU2Np
c3Nvciwgc2l6ZW9mKGdsOjpSZWN0YW5nbGUpKSAhPSAwIHx8CisgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVuYWJsZWQgIT0gbVNjaXNzb3JFbmFibGVkOworCisgICAgaWYgKHNjaXNzb3JDaGFu
Z2VkKQorICAgIHsKKyAgICAgICAgaWYgKGVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IFJFQ1QgcmVjdDsKKyAgICAgICAgICAgIHJlY3QubGVmdCA9IGdsOjpjbGFtcChzY2lzc29yLngs
IDAsIHN0YXRpY19jYXN0PGludD4obVJlbmRlclRhcmdldERlc2Mud2lkdGgpKTsKKyAgICAgICAg
ICAgIHJlY3QudG9wID0gZ2w6OmNsYW1wKHNjaXNzb3IueSwgMCwgc3RhdGljX2Nhc3Q8aW50Piht
UmVuZGVyVGFyZ2V0RGVzYy5oZWlnaHQpKTsKKyAgICAgICAgICAgIHJlY3QucmlnaHQgPSBnbDo6
Y2xhbXAoc2Npc3Nvci54ICsgc2Npc3Nvci53aWR0aCwgMCwgc3RhdGljX2Nhc3Q8aW50PihtUmVu
ZGVyVGFyZ2V0RGVzYy53aWR0aCkpOworICAgICAgICAgICAgcmVjdC5ib3R0b20gPSBnbDo6Y2xh
bXAoc2Npc3Nvci55ICsgc2Npc3Nvci5oZWlnaHQsIDAsIHN0YXRpY19jYXN0PGludD4obVJlbmRl
clRhcmdldERlc2MuaGVpZ2h0KSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRTY2lzc29yUmVj
dCgmcmVjdCk7CisgICAgICAgIH0KKworICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19TQ0lTU09SVEVTVEVOQUJMRSwgZW5hYmxlZCA/IFRSVUUgOiBGQUxTRSk7CisKKyAgICAg
ICAgbVNjaXNzb3JFbmFibGVkID0gZW5hYmxlZDsKKyAgICAgICAgbUN1clNjaXNzb3IgPSBzY2lz
c29yOworICAgIH0KKworICAgIG1Gb3JjZVNldFNjaXNzb3IgPSBmYWxzZTsKK30KKworYm9vbCBS
ZW5kZXJlcjk6OnNldFZpZXdwb3J0KGNvbnN0IGdsOjpSZWN0YW5nbGUgJnZpZXdwb3J0LCBmbG9h
dCB6TmVhciwgZmxvYXQgekZhciwgR0xlbnVtIGRyYXdNb2RlLCBHTGVudW0gZnJvbnRGYWNlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaWdub3JlVmlld3BvcnQpCit7CisgICAg
Z2w6OlJlY3RhbmdsZSBhY3R1YWxWaWV3cG9ydCA9IHZpZXdwb3J0OworICAgIGZsb2F0IGFjdHVh
bFpOZWFyID0gZ2w6OmNsYW1wMDEoek5lYXIpOworICAgIGZsb2F0IGFjdHVhbFpGYXIgPSBnbDo6
Y2xhbXAwMSh6RmFyKTsKKyAgICBpZiAoaWdub3JlVmlld3BvcnQpCisgICAgeworICAgICAgICBh
Y3R1YWxWaWV3cG9ydC54ID0gMDsKKyAgICAgICAgYWN0dWFsVmlld3BvcnQueSA9IDA7CisgICAg
ICAgIGFjdHVhbFZpZXdwb3J0LndpZHRoID0gbVJlbmRlclRhcmdldERlc2Mud2lkdGg7CisgICAg
ICAgIGFjdHVhbFZpZXdwb3J0LmhlaWdodCA9IG1SZW5kZXJUYXJnZXREZXNjLmhlaWdodDsKKyAg
ICAgICAgYWN0dWFsWk5lYXIgPSAwLjBmOworICAgICAgICBhY3R1YWxaRmFyID0gMS4wZjsKKyAg
ICB9CisKKyAgICBEM0RWSUVXUE9SVDkgZHhWaWV3cG9ydDsKKyAgICBkeFZpZXdwb3J0LlggPSBn
bDo6Y2xhbXAoYWN0dWFsVmlld3BvcnQueCwgMCwgc3RhdGljX2Nhc3Q8aW50PihtUmVuZGVyVGFy
Z2V0RGVzYy53aWR0aCkpOworICAgIGR4Vmlld3BvcnQuWSA9IGdsOjpjbGFtcChhY3R1YWxWaWV3
cG9ydC55LCAwLCBzdGF0aWNfY2FzdDxpbnQ+KG1SZW5kZXJUYXJnZXREZXNjLmhlaWdodCkpOwor
ICAgIGR4Vmlld3BvcnQuV2lkdGggPSBnbDo6Y2xhbXAoYWN0dWFsVmlld3BvcnQud2lkdGgsIDAs
IHN0YXRpY19jYXN0PGludD4obVJlbmRlclRhcmdldERlc2Mud2lkdGgpIC0gc3RhdGljX2Nhc3Q8
aW50PihkeFZpZXdwb3J0LlgpKTsKKyAgICBkeFZpZXdwb3J0LkhlaWdodCA9IGdsOjpjbGFtcChh
Y3R1YWxWaWV3cG9ydC5oZWlnaHQsIDAsIHN0YXRpY19jYXN0PGludD4obVJlbmRlclRhcmdldERl
c2MuaGVpZ2h0KSAtIHN0YXRpY19jYXN0PGludD4oZHhWaWV3cG9ydC5ZKSk7CisgICAgZHhWaWV3
cG9ydC5NaW5aID0gYWN0dWFsWk5lYXI7CisgICAgZHhWaWV3cG9ydC5NYXhaID0gYWN0dWFsWkZh
cjsKKworICAgIGlmIChkeFZpZXdwb3J0LldpZHRoIDw9IDAgfHwgZHhWaWV3cG9ydC5IZWlnaHQg
PD0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBOb3RoaW5nIHRvIHJlbmRl
cgorICAgIH0KKworICAgIGZsb2F0IGRlcHRoRnJvbnQgPSAhZ2w6OklzVHJpYW5nbGVNb2RlKGRy
YXdNb2RlKSA/IDAuMGYgOiAoZnJvbnRGYWNlID09IEdMX0NDVyA/IDEuMGYgOiAtMS4wZik7CisK
KyAgICBib29sIHZpZXdwb3J0Q2hhbmdlZCA9IG1Gb3JjZVNldFZpZXdwb3J0IHx8IG1lbWNtcCgm
YWN0dWFsVmlld3BvcnQsICZtQ3VyVmlld3BvcnQsIHNpemVvZihnbDo6UmVjdGFuZ2xlKSkgIT0g
MCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsWk5lYXIgIT0gbUN1ck5lYXIg
fHwgYWN0dWFsWkZhciAhPSBtQ3VyRmFyIHx8IG1DdXJEZXB0aEZyb250ICE9IGRlcHRoRnJvbnQ7
CisgICAgaWYgKHZpZXdwb3J0Q2hhbmdlZCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFZp
ZXdwb3J0KCZkeFZpZXdwb3J0KTsKKworICAgICAgICBtQ3VyVmlld3BvcnQgPSBhY3R1YWxWaWV3
cG9ydDsKKyAgICAgICAgbUN1ck5lYXIgPSBhY3R1YWxaTmVhcjsKKyAgICAgICAgbUN1ckZhciA9
IGFjdHVhbFpGYXI7CisgICAgICAgIG1DdXJEZXB0aEZyb250ID0gZGVwdGhGcm9udDsKKworICAg
ICAgICBkeF9WZXJ0ZXhDb25zdGFudHMgdmMgPSB7MH07CisgICAgICAgIGR4X1BpeGVsQ29uc3Rh
bnRzIHBjID0gezB9OworCisgICAgICAgIHZjLnZpZXdBZGp1c3RbMF0gPSAoZmxvYXQpKChhY3R1
YWxWaWV3cG9ydC53aWR0aCAtIChpbnQpZHhWaWV3cG9ydC5XaWR0aCkgKyAyICogKGFjdHVhbFZp
ZXdwb3J0LnggLSAoaW50KWR4Vmlld3BvcnQuWCkgLSAxKSAvIGR4Vmlld3BvcnQuV2lkdGg7Cisg
ICAgICAgIHZjLnZpZXdBZGp1c3RbMV0gPSAoZmxvYXQpKChhY3R1YWxWaWV3cG9ydC5oZWlnaHQg
LSAoaW50KWR4Vmlld3BvcnQuSGVpZ2h0KSArIDIgKiAoYWN0dWFsVmlld3BvcnQueSAtIChpbnQp
ZHhWaWV3cG9ydC5ZKSAtIDEpIC8gZHhWaWV3cG9ydC5IZWlnaHQ7CisgICAgICAgIHZjLnZpZXdB
ZGp1c3RbMl0gPSAoZmxvYXQpYWN0dWFsVmlld3BvcnQud2lkdGggLyBkeFZpZXdwb3J0LldpZHRo
OworICAgICAgICB2Yy52aWV3QWRqdXN0WzNdID0gKGZsb2F0KWFjdHVhbFZpZXdwb3J0LmhlaWdo
dCAvIGR4Vmlld3BvcnQuSGVpZ2h0OworCisgICAgICAgIHBjLnZpZXdDb29yZHNbMF0gPSBhY3R1
YWxWaWV3cG9ydC53aWR0aCAgKiAwLjVmOworICAgICAgICBwYy52aWV3Q29vcmRzWzFdID0gYWN0
dWFsVmlld3BvcnQuaGVpZ2h0ICogMC41ZjsKKyAgICAgICAgcGMudmlld0Nvb3Jkc1syXSA9IGFj
dHVhbFZpZXdwb3J0LnggKyAoYWN0dWFsVmlld3BvcnQud2lkdGggICogMC41Zik7CisgICAgICAg
IHBjLnZpZXdDb29yZHNbM10gPSBhY3R1YWxWaWV3cG9ydC55ICsgKGFjdHVhbFZpZXdwb3J0Lmhl
aWdodCAqIDAuNWYpOworCisgICAgICAgIHBjLmRlcHRoRnJvbnRbMF0gPSAoYWN0dWFsWkZhciAt
IGFjdHVhbFpOZWFyKSAqIDAuNWY7CisgICAgICAgIHBjLmRlcHRoRnJvbnRbMV0gPSAoYWN0dWFs
Wk5lYXIgKyBhY3R1YWxaRmFyKSAqIDAuNWY7CisgICAgICAgIHBjLmRlcHRoRnJvbnRbMl0gPSBk
ZXB0aEZyb250OworCisgICAgICAgIHZjLmRlcHRoUmFuZ2VbMF0gPSBhY3R1YWxaTmVhcjsKKyAg
ICAgICAgdmMuZGVwdGhSYW5nZVsxXSA9IGFjdHVhbFpGYXI7CisgICAgICAgIHZjLmRlcHRoUmFu
Z2VbMl0gPSBhY3R1YWxaRmFyIC0gYWN0dWFsWk5lYXI7CisKKyAgICAgICAgcGMuZGVwdGhSYW5n
ZVswXSA9IGFjdHVhbFpOZWFyOworICAgICAgICBwYy5kZXB0aFJhbmdlWzFdID0gYWN0dWFsWkZh
cjsKKyAgICAgICAgcGMuZGVwdGhSYW5nZVsyXSA9IGFjdHVhbFpGYXIgLSBhY3R1YWxaTmVhcjsK
KworICAgICAgICBpZiAobWVtY21wKCZ2YywgJm1WZXJ0ZXhDb25zdGFudHMsIHNpemVvZihkeF9W
ZXJ0ZXhDb25zdGFudHMpKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBtVmVydGV4Q29u
c3RhbnRzID0gdmM7CisgICAgICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gdHJ1ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChtZW1jbXAoJnBjLCAmbVBpeGVsQ29uc3RhbnRzLCBzaXplb2Yo
ZHhfUGl4ZWxDb25zdGFudHMpKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBtUGl4ZWxD
b25zdGFudHMgPSBwYzsKKyAgICAgICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOworICAg
ICAgICB9CisgICAgfQorCisgICAgbUZvcmNlU2V0Vmlld3BvcnQgPSBmYWxzZTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBSZW5kZXJlcjk6OmFwcGx5UHJpbWl0aXZlVHlwZShHTGVudW0g
bW9kZSwgR0xzaXplaSBjb3VudCkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpCisgICAgeworICAgICAg
Y2FzZSBHTF9QT0lOVFM6CisgICAgICAgIG1QcmltaXRpdmVUeXBlID0gRDNEUFRfUE9JTlRMSVNU
OworICAgICAgICBtUHJpbWl0aXZlQ291bnQgPSBjb3VudDsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX0xJTkVTOgorICAgICAgICBtUHJpbWl0aXZlVHlwZSA9IEQzRFBUX0xJTkVMSVNU
OworICAgICAgICBtUHJpbWl0aXZlQ291bnQgPSBjb3VudCAvIDI7CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9MSU5FX0xPT1A6CisgICAgICAgIG1QcmltaXRpdmVUeXBlID0gRDNEUFRf
TElORVNUUklQOworICAgICAgICBtUHJpbWl0aXZlQ291bnQgPSBjb3VudCAtIDE7ICAgLy8gRDNE
IGRvZXNuJ3Qgc3VwcG9ydCBsaW5lIGxvb3BzLCBzbyB3ZSBkcmF3IHRoZSBsYXN0IGxpbmUgc2Vw
YXJhdGVseQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTElORV9TVFJJUDoKKyAgICAg
ICAgbVByaW1pdGl2ZVR5cGUgPSBEM0RQVF9MSU5FU1RSSVA7CisgICAgICAgIG1QcmltaXRpdmVD
b3VudCA9IGNvdW50IC0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RSSUFOR0xF
UzoKKyAgICAgICAgbVByaW1pdGl2ZVR5cGUgPSBEM0RQVF9UUklBTkdMRUxJU1Q7CisgICAgICAg
IG1QcmltaXRpdmVDb3VudCA9IGNvdW50IC8gMzsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX1RSSUFOR0xFX1NUUklQOgorICAgICAgICBtUHJpbWl0aXZlVHlwZSA9IEQzRFBUX1RSSUFO
R0xFU1RSSVA7CisgICAgICAgIG1QcmltaXRpdmVDb3VudCA9IGNvdW50IC0gMjsKKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX1RSSUFOR0xFX0ZBTjoKKyAgICAgICAgbVByaW1pdGl2ZVR5
cGUgPSBEM0RQVF9UUklBTkdMRUZBTjsKKyAgICAgICAgbVByaW1pdGl2ZUNvdW50ID0gY291bnQg
LSAyOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCBmYWxzZSk7CisgICAgfQorCisgICAgcmV0dXJuIG1Qcmlt
aXRpdmVDb3VudCA+IDA7Cit9CisKKworZ2w6OlJlbmRlcmJ1ZmZlciAqUmVuZGVyZXI5OjpnZXRO
dWxsQ29sb3JidWZmZXIoZ2w6OlJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIpCit7CisgICAgaWYg
KCFkZXB0aGJ1ZmZlcikKKyAgICB7CisgICAgICAgIEVSUigiVW5leHBlY3RlZCBudWxsIGRlcHRo
YnVmZmVyIGZvciBkZXB0aC1vbmx5IEZCTy4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg
fQorCisgICAgR0xzaXplaSB3aWR0aCAgPSBkZXB0aGJ1ZmZlci0+Z2V0V2lkdGgoKTsKKyAgICBH
THNpemVpIGhlaWdodCA9IGRlcHRoYnVmZmVyLT5nZXRIZWlnaHQoKTsKKworICAgIC8vIHNlYXJj
aCBjYWNoZWQgbnVsbGNvbG9yYnVmZmVycworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX05V
TExfQ09MT1JCVUZGRVJfQ0FDSEVfRU5UUklFUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1O
dWxsQ29sb3JidWZmZXJDYWNoZVtpXS5idWZmZXIgIT0gTlVMTCAmJgorICAgICAgICAgICAgbU51
bGxDb2xvcmJ1ZmZlckNhY2hlW2ldLndpZHRoID09IHdpZHRoICYmCisgICAgICAgICAgICBtTnVs
bENvbG9yYnVmZmVyQ2FjaGVbaV0uaGVpZ2h0ID09IGhlaWdodCkKKyAgICAgICAgeworICAgICAg
ICAgICAgbU51bGxDb2xvcmJ1ZmZlckNhY2hlW2ldLmxydUNvdW50ID0gKyttTWF4TnVsbENvbG9y
YnVmZmVyTFJVOworICAgICAgICAgICAgcmV0dXJuIG1OdWxsQ29sb3JidWZmZXJDYWNoZVtpXS5i
dWZmZXI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBnbDo6UmVuZGVyYnVmZmVyICpudWxsYnVm
ZmVyID0gbmV3IGdsOjpSZW5kZXJidWZmZXIodGhpcywgMCwgbmV3IGdsOjpDb2xvcmJ1ZmZlcih0
aGlzLCB3aWR0aCwgaGVpZ2h0LCBHTF9OT05FLCAwKSk7CisKKyAgICAvLyBhZGQgbnVsbGJ1ZmZl
ciB0byB0aGUgY2FjaGUKKyAgICBOdWxsQ29sb3JidWZmZXJDYWNoZUVudHJ5ICpvbGRlc3QgPSAm
bU51bGxDb2xvcmJ1ZmZlckNhY2hlWzBdOworICAgIGZvciAoaW50IGkgPSAxOyBpIDwgTlVNX05V
TExfQ09MT1JCVUZGRVJfQ0FDSEVfRU5UUklFUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1O
dWxsQ29sb3JidWZmZXJDYWNoZVtpXS5scnVDb3VudCA8IG9sZGVzdC0+bHJ1Q291bnQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG9sZGVzdCA9ICZtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV07Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBkZWxldGUgb2xkZXN0LT5idWZmZXI7CisgICAgb2xkZXN0
LT5idWZmZXIgPSBudWxsYnVmZmVyOworICAgIG9sZGVzdC0+bHJ1Q291bnQgPSArK21NYXhOdWxs
Q29sb3JidWZmZXJMUlU7CisgICAgb2xkZXN0LT53aWR0aCA9IHdpZHRoOworICAgIG9sZGVzdC0+
aGVpZ2h0ID0gaGVpZ2h0OworCisgICAgcmV0dXJuIG51bGxidWZmZXI7Cit9CisKK2Jvb2wgUmVu
ZGVyZXI5OjphcHBseVJlbmRlclRhcmdldChnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyKQor
eworICAgIC8vIGlmIHRoZXJlIGlzIG5vIGNvbG9yIGF0dGFjaG1lbnQgd2UgbXVzdCBzeW50aGVz
aXplIGEgTlVMTCBjb2xvcmF0dGFjaG1lbnQKKyAgICAvLyB0byBrZWVwIHRoZSBEM0QgcnVudGlt
ZSBoYXBweS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgcG9zc2libGUgaWYgZGVwdGggdGV4dHVyaW5n
LgorICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9IE5VTEw7CisgICAg
aWYgKGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoMCkgIT0gR0xfTk9ORSkKKyAgICB7
CisgICAgICAgIHJlbmRlcmJ1ZmZlck9iamVjdCA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZl
cigwKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmVuZGVyYnVmZmVyT2JqZWN0
ID0gZ2V0TnVsbENvbG9yYnVmZmVyKGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpKTsKKyAg
ICB9CisgICAgaWYgKCFyZW5kZXJidWZmZXJPYmplY3QpCisgICAgeworICAgICAgICBFUlIoInVu
YWJsZSB0byBsb2NhdGUgcmVuZGVyYnVmZmVyIGZvciBGQk8uIik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBib29sIHJlbmRlclRhcmdldENoYW5nZWQgPSBmYWxzZTsKKyAg
ICB1bnNpZ25lZCBpbnQgcmVuZGVyVGFyZ2V0U2VyaWFsID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5n
ZXRTZXJpYWwoKTsKKyAgICBpZiAocmVuZGVyVGFyZ2V0U2VyaWFsICE9IG1BcHBsaWVkUmVuZGVy
VGFyZ2V0U2VyaWFsKQorICAgIHsKKyAgICAgICAgLy8gQXBwbHkgdGhlIHJlbmRlciB0YXJnZXQg
b24gdGhlIGRldmljZQorICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0U3Vy
ZmFjZSA9IE5VTEw7CisKKyAgICAgICAgUmVuZGVyVGFyZ2V0ICpyZW5kZXJUYXJnZXQgPSByZW5k
ZXJidWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdldCgpOworICAgICAgICBpZiAocmVuZGVyVGFy
Z2V0KQorICAgICAgICB7CisgICAgICAgICAgICByZW5kZXJUYXJnZXRTdXJmYWNlID0gUmVuZGVy
VGFyZ2V0OTo6bWFrZVJlbmRlclRhcmdldDkocmVuZGVyVGFyZ2V0KS0+Z2V0U3VyZmFjZSgpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCFyZW5kZXJUYXJnZXRTdXJmYWNlKQorICAgICAgICB7
CisgICAgICAgICAgICBFUlIoInJlbmRlciB0YXJnZXQgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVs
bC4iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBDb250ZXh0IG11c3QgYmUgbG9z
dAorICAgICAgICB9CisKKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIHJlbmRl
clRhcmdldFN1cmZhY2UpOworICAgICAgICByZW5kZXJUYXJnZXRTdXJmYWNlLT5SZWxlYXNlKCk7
CisKKyAgICAgICAgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwgPSByZW5kZXJUYXJnZXRTZXJp
YWw7CisgICAgICAgIHJlbmRlclRhcmdldENoYW5nZWQgPSB0cnVlOworICAgIH0KKworICAgIGds
OjpSZW5kZXJidWZmZXIgKmRlcHRoU3RlbmNpbCA9IE5VTEw7CisgICAgdW5zaWduZWQgaW50IGRl
cHRoYnVmZmVyU2VyaWFsID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbGJ1ZmZlclNlcmlh
bCA9IDA7CisgICAgaWYgKGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlclR5cGUoKSAhPSBHTF9O
T05FKQorICAgIHsKKyAgICAgICAgZGVwdGhTdGVuY2lsID0gZnJhbWVidWZmZXItPmdldERlcHRo
YnVmZmVyKCk7CisgICAgICAgIGlmICghZGVwdGhTdGVuY2lsKQorICAgICAgICB7CisgICAgICAg
ICAgICBFUlIoIkRlcHRoIHN0ZW5jaWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGRlcHRoYnVmZmVy
U2VyaWFsID0gZGVwdGhTdGVuY2lsLT5nZXRTZXJpYWwoKTsKKyAgICB9CisgICAgZWxzZSBpZiAo
ZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKKyAgICB7Cisg
ICAgICAgIGRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCk7Cisg
ICAgICAgIGlmICghZGVwdGhTdGVuY2lsKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkRl
cHRoIHN0ZW5jaWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHN0ZW5jaWxidWZmZXJTZXJpYWwgPSBk
ZXB0aFN0ZW5jaWwtPmdldFNlcmlhbCgpOworICAgIH0KKworICAgIGlmIChkZXB0aGJ1ZmZlclNl
cmlhbCAhPSBtQXBwbGllZERlcHRoYnVmZmVyU2VyaWFsIHx8CisgICAgICAgIHN0ZW5jaWxidWZm
ZXJTZXJpYWwgIT0gbUFwcGxpZWRTdGVuY2lsYnVmZmVyU2VyaWFsIHx8CisgICAgICAgICFtRGVw
dGhTdGVuY2lsSW5pdGlhbGl6ZWQpCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgZGVwdGhT
aXplID0gMDsKKyAgICAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxTaXplID0gMDsKKworICAgICAg
ICAvLyBBcHBseSB0aGUgZGVwdGggc3RlbmNpbCBvbiB0aGUgZGV2aWNlCisgICAgICAgIGlmIChk
ZXB0aFN0ZW5jaWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpk
ZXB0aFN0ZW5jaWxTdXJmYWNlID0gTlVMTDsKKyAgICAgICAgICAgIFJlbmRlclRhcmdldCAqZGVw
dGhTdGVuY2lsUmVuZGVyVGFyZ2V0ID0gZGVwdGhTdGVuY2lsLT5nZXREZXB0aFN0ZW5jaWwoKTsK
KworICAgICAgICAgICAgaWYgKGRlcHRoU3RlbmNpbFJlbmRlclRhcmdldCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBkZXB0aFN0ZW5jaWxTdXJmYWNlID0gUmVuZGVyVGFyZ2V0OTo6
bWFrZVJlbmRlclRhcmdldDkoZGVwdGhTdGVuY2lsUmVuZGVyVGFyZ2V0KS0+Z2V0U3VyZmFjZSgp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWRlcHRoU3RlbmNpbFN1cmZhY2Up
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRVJSKCJkZXB0aCBzdGVuY2lsIHBvaW50
ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAg
IC8vIENvbnRleHQgbXVzdCBiZSBsb3N0CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1E
ZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UoZGVwdGhTdGVuY2lsU3VyZmFjZSk7CisgICAg
ICAgICAgICBkZXB0aFN0ZW5jaWxTdXJmYWNlLT5SZWxlYXNlKCk7CisKKyAgICAgICAgICAgIGRl
cHRoU2l6ZSA9IGRlcHRoU3RlbmNpbC0+Z2V0RGVwdGhTaXplKCk7CisgICAgICAgICAgICBzdGVu
Y2lsU2l6ZSA9IGRlcHRoU3RlbmNpbC0+Z2V0U3RlbmNpbFNpemUoKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldERlcHRoU3RlbmNp
bFN1cmZhY2UoTlVMTCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1EZXB0aFN0ZW5jaWxJ
bml0aWFsaXplZCB8fCBkZXB0aFNpemUgIT0gbUN1ckRlcHRoU2l6ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgbUN1ckRlcHRoU2l6ZSA9IGRlcHRoU2l6ZTsKKyAgICAgICAgICAgIG1Gb3JjZVNl
dFJhc3RlclN0YXRlID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbURlcHRoU3Rl
bmNpbEluaXRpYWxpemVkIHx8IHN0ZW5jaWxTaXplICE9IG1DdXJTdGVuY2lsU2l6ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgbUN1clN0ZW5jaWxTaXplID0gc3RlbmNpbFNpemU7CisgICAgICAg
ICAgICBtRm9yY2VTZXREZXB0aFN0ZW5jaWxTdGF0ZSA9IHRydWU7CisgICAgICAgIH0KKworICAg
ICAgICBtQXBwbGllZERlcHRoYnVmZmVyU2VyaWFsID0gZGVwdGhidWZmZXJTZXJpYWw7CisgICAg
ICAgIG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCA9IHN0ZW5jaWxidWZmZXJTZXJpYWw7Cisg
ICAgICAgIG1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCA9IHRydWU7CisgICAgfQorCisgICAgaWYg
KHJlbmRlclRhcmdldENoYW5nZWQgfHwgIW1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQpCisg
ICAgeworICAgICAgICBtRm9yY2VTZXRTY2lzc29yID0gdHJ1ZTsKKyAgICAgICAgbUZvcmNlU2V0
Vmlld3BvcnQgPSB0cnVlOworCisgICAgICAgIG1SZW5kZXJUYXJnZXREZXNjLndpZHRoID0gcmVu
ZGVyYnVmZmVyT2JqZWN0LT5nZXRXaWR0aCgpOworICAgICAgICBtUmVuZGVyVGFyZ2V0RGVzYy5o
ZWlnaHQgPSByZW5kZXJidWZmZXJPYmplY3QtPmdldEhlaWdodCgpOworICAgICAgICBtUmVuZGVy
VGFyZ2V0RGVzYy5mb3JtYXQgPSByZW5kZXJidWZmZXJPYmplY3QtPmdldEFjdHVhbEZvcm1hdCgp
OworICAgICAgICBtUmVuZGVyVGFyZ2V0RGVzY0luaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworR0xlbnVtIFJlbmRlcmVyOTo6YXBwbHlWZXJ0ZXhCdWZm
ZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGdsOjpWZXJ0ZXhBdHRyaWJ1dGUg
dmVydGV4QXR0cmlidXRlc1tdLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBp
bnN0YW5jZXMpCit7CisgICAgVHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW2dsOjpNQVhf
VkVSVEVYX0FUVFJJQlNdOworICAgIEdMZW51bSBlcnIgPSBtVmVydGV4RGF0YU1hbmFnZXItPnBy
ZXBhcmVWZXJ0ZXhEYXRhKHZlcnRleEF0dHJpYnV0ZXMsIHByb2dyYW1CaW5hcnksIGZpcnN0LCBj
b3VudCwgYXR0cmlidXRlcywgaW5zdGFuY2VzKTsKKyAgICBpZiAoZXJyICE9IEdMX05PX0VSUk9S
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG1W
ZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmFwcGx5RGVjbGFyYXRpb24obURldmljZSwgYXR0cmlidXRl
cywgcHJvZ3JhbUJpbmFyeSwgaW5zdGFuY2VzLCAmbVJlcGVhdERyYXcpOworfQorCisvLyBBcHBs
aWVzIHRoZSBpbmRpY2VzIGFuZCBlbGVtZW50IGFycmF5IGJpbmRpbmdzIHRvIHRoZSBEaXJlY3Qz
RCA5IGRldmljZQorR0xlbnVtIFJlbmRlcmVyOTo6YXBwbHlJbmRleEJ1ZmZlcihjb25zdCBHTHZv
aWQgKmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgR0xzaXplaSBjb3Vu
dCwgR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleElu
Zm8pCit7CisgICAgR0xlbnVtIGVyciA9IG1JbmRleERhdGFNYW5hZ2VyLT5wcmVwYXJlSW5kZXhE
YXRhKHR5cGUsIGNvdW50LCBlbGVtZW50QXJyYXlCdWZmZXIsIGluZGljZXMsIGluZGV4SW5mbyk7
CisKKyAgICBpZiAoZXJyID09IEdMX05PX0VSUk9SKQorICAgIHsKKyAgICAgICAgLy8gRGlyZWN0
bHkgYmluZGluZyB0aGUgc3RvcmFnZSBidWZmZXIgaXMgbm90IHN1cHBvcnRlZCBmb3IgZDNkOQor
ICAgICAgICBBU1NFUlQoaW5kZXhJbmZvLT5zdG9yYWdlID09IE5VTEwpOworCisgICAgICAgIGlm
IChpbmRleEluZm8tPnNlcmlhbCAhPSBtQXBwbGllZElCU2VyaWFsKQorICAgICAgICB7CisgICAg
ICAgICAgICBJbmRleEJ1ZmZlcjkqIGluZGV4QnVmZmVyID0gSW5kZXhCdWZmZXI5OjptYWtlSW5k
ZXhCdWZmZXI5KGluZGV4SW5mby0+aW5kZXhCdWZmZXIpOworCisgICAgICAgICAgICBtRGV2aWNl
LT5TZXRJbmRpY2VzKGluZGV4QnVmZmVyLT5nZXRCdWZmZXIoKSk7CisgICAgICAgICAgICBtQXBw
bGllZElCU2VyaWFsID0gaW5kZXhJbmZvLT5zZXJpYWw7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gZXJyOworfQorCit2b2lkIFJlbmRlcmVyOTo6ZHJhd0FycmF5cyhHTGVudW0gbW9k
ZSwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpCit7CisgICAgc3RhcnRTY2VuZSgp
OworICAgICAgICAKKyAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCisgICAgeworICAgICAg
ICBkcmF3TGluZUxvb3AoY291bnQsIEdMX05PTkUsIE5VTEwsIDAsIE5VTEwpOworICAgIH0KKyAg
ICBlbHNlIGlmIChpbnN0YW5jZXMgPiAwKQorICAgIHsKKyAgICAgICAgU3RhdGljSW5kZXhCdWZm
ZXJJbnRlcmZhY2UgKmNvdW50aW5nSUIgPSBtSW5kZXhEYXRhTWFuYWdlci0+Z2V0Q291bnRpbmdJ
bmRpY2VzKGNvdW50KTsKKyAgICAgICAgaWYgKGNvdW50aW5nSUIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9IGNvdW50aW5nSUItPmdldFNlcmlhbCgpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEluZGV4QnVmZmVyOSAqaW5kZXhCdWZmZXIg
PSBJbmRleEJ1ZmZlcjk6Om1ha2VJbmRleEJ1ZmZlcjkoY291bnRpbmdJQi0+Z2V0SW5kZXhCdWZm
ZXIoKSk7CisKKyAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRJbmRpY2VzKGluZGV4QnVmZmVy
LT5nZXRCdWZmZXIoKSk7CisgICAgICAgICAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IGNvdW50
aW5nSUItPmdldFNlcmlhbCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG1SZXBlYXREcmF3OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgbURldmljZS0+RHJhd0luZGV4ZWRQcmltaXRpdmUobVByaW1pdGl2ZVR5cGUsIDAsIDAs
IGNvdW50LCAwLCBtUHJpbWl0aXZlQ291bnQpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRl
IGEgY291bnRpbmcgaW5kZXggYnVmZmVyIGZvciBnbERyYXdBcnJheXNJbnN0YW5jZWQuIik7Cisg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9
CisgICAgfQorICAgIGVsc2UgICAvLyBSZWd1bGFyIGNhc2UKKyAgICB7CisgICAgICAgIG1EZXZp
Y2UtPkRyYXdQcmltaXRpdmUobVByaW1pdGl2ZVR5cGUsIDAsIG1QcmltaXRpdmVDb3VudCk7Cisg
ICAgfQorfQorCit2b2lkIFJlbmRlcmVyOTo6ZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNp
emVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVy
ICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5m
bywgR0xzaXplaSAvKmluc3RhbmNlcyovKQoreworICAgIHN0YXJ0U2NlbmUoKTsKKworICAgIGlm
IChtb2RlID09IEdMX1BPSU5UUykKKyAgICB7CisgICAgICAgIGRyYXdJbmRleGVkUG9pbnRzKGNv
dW50LCB0eXBlLCBpbmRpY2VzLCBpbmRleEluZm8ubWluSW5kZXgsIGVsZW1lbnRBcnJheUJ1ZmZl
cik7CisgICAgfQorICAgIGVsc2UgaWYgKG1vZGUgPT0gR0xfTElORV9MT09QKQorICAgIHsKKyAg
ICAgICAgZHJhd0xpbmVMb29wKGNvdW50LCB0eXBlLCBpbmRpY2VzLCBpbmRleEluZm8ubWluSW5k
ZXgsIGVsZW1lbnRBcnJheUJ1ZmZlcik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbVJlcGVhdERyYXc7IGkrKykKKyAgICAgICAgeworICAgICAg
ICAgICAgR0xzaXplaSB2ZXJ0ZXhDb3VudCA9IGluZGV4SW5mby5tYXhJbmRleCAtIGluZGV4SW5m
by5taW5JbmRleCArIDE7CisgICAgICAgICAgICBtRGV2aWNlLT5EcmF3SW5kZXhlZFByaW1pdGl2
ZShtUHJpbWl0aXZlVHlwZSwgLShJTlQpaW5kZXhJbmZvLm1pbkluZGV4LCBpbmRleEluZm8ubWlu
SW5kZXgsIHZlcnRleENvdW50LCBpbmRleEluZm8uc3RhcnRJbmRleCwgbVByaW1pdGl2ZUNvdW50
KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBSZW5kZXJlcjk6OmRyYXdMaW5lTG9vcChH
THNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBpbnQgbWlu
SW5kZXgsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlcikKK3sKKyAgICAvLyBHZXQgdGhl
IHJhdyBpbmRpY2VzIGZvciBhbiBpbmRleGVkIGRyYXcKKyAgICBpZiAodHlwZSAhPSBHTF9OT05F
ICYmIGVsZW1lbnRBcnJheUJ1ZmZlcikKKyAgICB7CisgICAgICAgIGdsOjpCdWZmZXIgKmluZGV4
QnVmZmVyID0gZWxlbWVudEFycmF5QnVmZmVyOworICAgICAgICBCdWZmZXJTdG9yYWdlICpzdG9y
YWdlID0gaW5kZXhCdWZmZXItPmdldFN0b3JhZ2UoKTsKKyAgICAgICAgaW50cHRyX3Qgb2Zmc2V0
ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5kaWNlcyk7CisgICAgICAgIGluZGljZXMg
PSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSArIG9mZnNl
dDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBpbnQgc3RhcnRJbmRleCA9IDA7CisKKyAgICBpZiAo
Z2V0MzJCaXRJbmRleFN1cHBvcnQoKSkKKyAgICB7CisgICAgICAgIGlmICghbUxpbmVMb29wSUIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1MaW5lTG9vcElCID0gbmV3IFN0cmVhbWluZ0luZGV4
QnVmZmVySW50ZXJmYWNlKHRoaXMpOworICAgICAgICAgICAgaWYgKCFtTGluZUxvb3BJQi0+cmVz
ZXJ2ZUJ1ZmZlclNwYWNlKElOSVRJQUxfSU5ERVhfQlVGRkVSX1NJWkUsIEdMX1VOU0lHTkVEX0lO
VCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGVsZXRlIG1MaW5lTG9vcElCOwor
ICAgICAgICAgICAgICAgIG1MaW5lTG9vcElCID0gTlVMTDsKKworICAgICAgICAgICAgICAgIEVS
UigiQ291bGQgbm90IGNyZWF0ZSBhIDMyLWJpdCBsb29waW5nIGluZGV4IGJ1ZmZlciBmb3IgR0xf
TElORV9MT09QLiIpOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgaW50Pihjb3VudCkgKyAxID4gKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5z
aWduZWQgaW50Pjo6bWF4KCkgLyBzaXplb2YodW5zaWduZWQgaW50KSkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBhIDMyLWJpdCBsb29waW5nIGluZGV4IGJ1
ZmZlciBmb3IgR0xfTElORV9MT09QLCB0b28gbWFueSBpbmRpY2VzIHJlcXVpcmVkLiIpOworICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIENoZWNrZWQgYnkgUmVuZGVyZXI5OjphcHBseVByaW1pdGl2ZVR5cGUKKyAg
ICAgICAgQVNTRVJUKGNvdW50ID49IDApOworCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBz
cGFjZU5lZWRlZCA9IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGNvdW50KSArIDEpICogc2l6
ZW9mKHVuc2lnbmVkIGludCk7CisgICAgICAgIGlmICghbUxpbmVMb29wSUItPnJlc2VydmVCdWZm
ZXJTcGFjZShzcGFjZU5lZWRlZCwgR0xfVU5TSUdORURfSU5UKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgRVJSKCJDb3VsZCBub3QgcmVzZXJ2ZSBlbm91Z2ggc3BhY2UgaW4gbG9vcGluZyBpbmRl
eCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkKiBtYXBwZWRN
ZW1vcnkgPSBOVUxMOworICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMDsKKyAgICAgICAg
aWYgKCFtTGluZUxvb3BJQi0+bWFwQnVmZmVyKHNwYWNlTmVlZGVkLCAmbWFwcGVkTWVtb3J5LCAm
b2Zmc2V0KSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgbWFwIGluZGV4
IGJ1ZmZlciBmb3IgR0xfTElORV9MT09QLiIpOworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXJ0SW5kZXggPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KG9mZnNldCkgLyA0OworICAgICAgICB1bnNpZ25lZCBp
bnQgKmRhdGEgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KG1hcHBlZE1lbW9yeSk7
CisKKyAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9O
T05FOiAgIC8vIE5vbi1pbmRleGVkIGRyYXcKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkYXRhW2ldID0g
aTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRhdGFbY291bnRdID0gMDsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpW2ld
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxj
b25zdCBHTHVieXRlKj4oaW5kaWNlcylbMF07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBz
dGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpW2ldOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGlu
ZGljZXMpWzBdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05F
RF9JTlQ6CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdM
dWludCo+KGluZGljZXMpW2ldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGF0YVtjb3Vu
dF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVswXTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoIW1MaW5lTG9vcElCLT51bm1hcEJ1ZmZlcigpKQorICAgICAgICB7CisgICAg
ICAgICAgICBFUlIoIkNvdWxkIG5vdCB1bm1hcCBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9P
UC4iKTsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKCFtTGluZUxvb3BJ
QikKKyAgICAgICAgeworICAgICAgICAgICAgbUxpbmVMb29wSUIgPSBuZXcgU3RyZWFtaW5nSW5k
ZXhCdWZmZXJJbnRlcmZhY2UodGhpcyk7CisgICAgICAgICAgICBpZiAoIW1MaW5lTG9vcElCLT5y
ZXNlcnZlQnVmZmVyU3BhY2UoSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwgR0xfVU5TSUdORURf
U0hPUlQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBtTGluZUxvb3BJ
QjsKKyAgICAgICAgICAgICAgICBtTGluZUxvb3BJQiA9IE5VTEw7CisKKyAgICAgICAgICAgICAg
ICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSAxNi1iaXQgbG9vcGluZyBpbmRleCBidWZmZXIgZm9y
IEdMX0xJTkVfTE9PUC4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQ2hl
Y2tlZCBieSBSZW5kZXJlcjk6OmFwcGx5UHJpbWl0aXZlVHlwZQorICAgICAgICBBU1NFUlQoY291
bnQgPj0gMCk7CisKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oY291bnQp
ICsgMSA+IChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0Pjo6bWF4KCkgLyBzaXpl
b2YodW5zaWduZWQgc2hvcnQpKSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJDb3VsZCBu
b3QgY3JlYXRlIGEgMTYtYml0IGxvb3BpbmcgaW5kZXggYnVmZmVyIGZvciBHTF9MSU5FX0xPT1As
IHRvbyBtYW55IGluZGljZXMgcmVxdWlyZWQuIik7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IHNwYWNlTmVlZGVkID0gKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oY291bnQpICsg
MSkgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpOworICAgICAgICBpZiAoIW1MaW5lTG9vcElCLT5y
ZXNlcnZlQnVmZmVyU3BhY2Uoc3BhY2VOZWVkZWQsIEdMX1VOU0lHTkVEX1NIT1JUKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgcmVzZXJ2ZSBlbm91Z2ggc3BhY2UgaW4g
bG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKKyAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKworICAgICAgICB2
b2lkKiBtYXBwZWRNZW1vcnkgPSBOVUxMOworICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0Owor
ICAgICAgICBpZiAobUxpbmVMb29wSUItPm1hcEJ1ZmZlcihzcGFjZU5lZWRlZCwgJm1hcHBlZE1l
bW9yeSwgJm9mZnNldCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiQ291bGQgbm90IG1h
cCBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKKyAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKworICAgICAgICBzdGFydElu
ZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihvZmZzZXQpIC8gMjsKKyAgICAgICAgdW5z
aWduZWQgc2hvcnQgKmRhdGEgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4obWFw
cGVkTWVtb3J5KTsKKworICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgIHsKKyAgICAgICAg
ICBjYXNlIEdMX05PTkU6ICAgLy8gTm9uLWluZGV4ZWQgZHJhdworICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGRhdGFbaV0gPSBpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGF0YVtjb3VudF0gPSAw
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgor
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4o
aW5kaWNlcylbaV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkYXRhW2NvdW50XSA9IHN0
YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKVswXTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6CisgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNlcylbaV07CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNvbnN0IEdM
dXNob3J0Kj4oaW5kaWNlcylbMF07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nh
c3Q8Y29uc3QgR0x1aW50Kj4oaW5kaWNlcylbaV07CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMpWzBdOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICghbUxpbmVMb29wSUItPnVubWFwQnVmZmVyKCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEVSUigiQ291bGQgbm90IHVubWFwIGluZGV4IGJ1ZmZlciBmb3Ig
R0xfTElORV9MT09QLiIpOworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9
IG1MaW5lTG9vcElCLT5nZXRTZXJpYWwoKSkKKyAgICB7CisgICAgICAgIEluZGV4QnVmZmVyOSAq
aW5kZXhCdWZmZXIgPSBJbmRleEJ1ZmZlcjk6Om1ha2VJbmRleEJ1ZmZlcjkobUxpbmVMb29wSUIt
PmdldEluZGV4QnVmZmVyKCkpOworCisgICAgICAgIG1EZXZpY2UtPlNldEluZGljZXMoaW5kZXhC
dWZmZXItPmdldEJ1ZmZlcigpKTsKKyAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IG1MaW5lTG9v
cElCLT5nZXRTZXJpYWwoKTsKKyAgICB9CisKKyAgICBtRGV2aWNlLT5EcmF3SW5kZXhlZFByaW1p
dGl2ZShEM0RQVF9MSU5FU1RSSVAsIC1taW5JbmRleCwgbWluSW5kZXgsIGNvdW50LCBzdGFydElu
ZGV4LCBjb3VudCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIHZvaWQgZHJh
d1BvaW50cyhJRGlyZWN0M0REZXZpY2U5KiBkZXZpY2UsIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
dm9pZCAqaW5kaWNlcywgaW50IG1pbkluZGV4KQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBpbmRleFZhbHVlID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgaW50PihzdGF0aWNfY2FzdDxjb25zdCBUKj4oaW5kaWNlcylbaV0p
IC0gbWluSW5kZXg7CisgICAgICAgIGRldmljZS0+RHJhd1ByaW1pdGl2ZShEM0RQVF9QT0lOVExJ
U1QsIGluZGV4VmFsdWUsIDEpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJlcjk6OmRyYXdJbmRl
eGVkUG9pbnRzKEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGlj
ZXMsIGludCBtaW5JbmRleCwgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyKQoreworICAg
IC8vIERyYXdpbmcgaW5kZXggcG9pbnQgbGlzdHMgaXMgdW5zdXBwb3J0ZWQgaW4gZDNkOSwgZmFs
bCBiYWNrIHRvIGEgcmVndWxhciBEcmF3UHJpbWl0aXZlIGNhbGwKKyAgICAvLyBmb3IgZWFjaCBp
bmRpdmlkdWFsIHBvaW50LiBUaGlzIGNhbGwgaXMgbm90IGV4cGVjdGVkIHRvIGhhcHBlbiBvZnRl
bi4KKworICAgIGlmIChlbGVtZW50QXJyYXlCdWZmZXIpCisgICAgeworICAgICAgICBCdWZmZXJT
dG9yYWdlICpzdG9yYWdlID0gZWxlbWVudEFycmF5QnVmZmVyLT5nZXRTdG9yYWdlKCk7CisgICAg
ICAgIGludHB0cl90IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZGljZXMp
OworICAgICAgICBpbmRpY2VzID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KHN0b3JhZ2Ut
PmdldERhdGEoKSkgKyBvZmZzZXQ7CisgICAgfQorCisgICAgc3dpdGNoICh0eXBlKQorICAgIHsK
KyAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOiAgZHJhd1BvaW50czxHTHVieXRlPihtRGV2
aWNlLCBjb3VudCwgaW5kaWNlcywgbWluSW5kZXgpOyAgYnJlYWs7CisgICAgICAgIGNhc2UgR0xf
VU5TSUdORURfU0hPUlQ6IGRyYXdQb2ludHM8R0x1c2hvcnQ+KG1EZXZpY2UsIGNvdW50LCBpbmRp
Y2VzLCBtaW5JbmRleCk7IGJyZWFrOworICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDogICBk
cmF3UG9pbnRzPEdMdWludD4obURldmljZSwgY291bnQsIGluZGljZXMsIG1pbkluZGV4KTsgICBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9Cit9CisKK3ZvaWQg
UmVuZGVyZXI5OjphcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkp
Cit7CisgICAgdW5zaWduZWQgaW50IHByb2dyYW1CaW5hcnlTZXJpYWwgPSBwcm9ncmFtQmluYXJ5
LT5nZXRTZXJpYWwoKTsKKyAgICBpZiAocHJvZ3JhbUJpbmFyeVNlcmlhbCAhPSBtQXBwbGllZFBy
b2dyYW1CaW5hcnlTZXJpYWwpCisgICAgeworICAgICAgICBTaGFkZXJFeGVjdXRhYmxlICp2ZXJ0
ZXhFeGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlKCk7CisgICAgICAgIFNo
YWRlckV4ZWN1dGFibGUgKnBpeGVsRXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxFeGVjdXRh
YmxlKCk7CisKKyAgICAgICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqdmVydGV4U2hhZGVyID0g
TlVMTDsKKyAgICAgICAgaWYgKHZlcnRleEV4ZSkgdmVydGV4U2hhZGVyID0gU2hhZGVyRXhlY3V0
YWJsZTk6Om1ha2VTaGFkZXJFeGVjdXRhYmxlOSh2ZXJ0ZXhFeGUpLT5nZXRWZXJ0ZXhTaGFkZXIo
KTsKKworICAgICAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKnBpeGVsU2hhZGVyID0gTlVMTDsK
KyAgICAgICAgaWYgKHBpeGVsRXhlKSBwaXhlbFNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGU5Ojpt
YWtlU2hhZGVyRXhlY3V0YWJsZTkocGl4ZWxFeGUpLT5nZXRQaXhlbFNoYWRlcigpOworCisgICAg
ICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyKHBpeGVsU2hhZGVyKTsKKyAgICAgICAgbURldmlj
ZS0+U2V0VmVydGV4U2hhZGVyKHZlcnRleFNoYWRlcik7CisgICAgICAgIHByb2dyYW1CaW5hcnkt
PmRpcnR5QWxsVW5pZm9ybXMoKTsKKyAgICAgICAgbUR4VW5pZm9ybXNEaXJ0eSA9IHRydWU7CisK
KyAgICAgICAgbUFwcGxpZWRQcm9ncmFtQmluYXJ5U2VyaWFsID0gcHJvZ3JhbUJpbmFyeVNlcmlh
bDsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyZXI5OjphcHBseVVuaWZvcm1zKGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBnbDo6VW5pZm9ybUFycmF5ICp1bmlmb3JtQXJyYXkpCit7
CisgICAgZm9yIChzdGQ6OnZlY3RvcjxnbDo6VW5pZm9ybSo+Ojpjb25zdF9pdGVyYXRvciB1YiA9
IHVuaWZvcm1BcnJheS0+YmVnaW4oKSwgdWUgPSB1bmlmb3JtQXJyYXktPmVuZCgpOyB1YiAhPSB1
ZTsgKyt1YikKKyAgICB7CisgICAgICAgIGdsOjpVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gKnVi
OworCisgICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5kaXJ0eSkKKyAgICAgICAgeworICAgICAg
ICAgICAgR0xmbG9hdCAqZiA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhOworICAgICAg
ICAgICAgR0xpbnQgKmkgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGE7CisKKyAgICAgICAg
ICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgorICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRVJf
Q1VCRToKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CT09M
OgorICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMjoKKyAgICAgICAgICAgICAgY2FzZSBH
TF9CT09MX1ZFQzM6CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OgorICAgICAgICAg
ICAgICAgIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBpKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9WRUMyOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6CisgICAg
ICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9B
VF9NQVQyOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6CisgICAgICAgICAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUNDoKKyAgICAgICAgICAgICAgICBhcHBseVVuaWZvcm1uZnYodGFy
Z2V0VW5pZm9ybSwgZik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfSU5UOgorICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMyOgorICAgICAgICAgICAg
ICBjYXNlIEdMX0lOVF9WRUMzOgorICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUM0OgorICAg
ICAgICAgICAgICAgIGFwcGx5VW5pZm9ybW5pdih0YXJnZXRVbmlmb3JtLCBpKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBV
TlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0YXJnZXRVbmlmb3Jt
LT5kaXJ0eSA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRHJpdmVyIHVuaWZv
cm1zCisgICAgaWYgKG1EeFVuaWZvcm1zRGlydHkpCisgICAgeworICAgICAgICBtRGV2aWNlLT5T
ZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYoMCwgKGZsb2F0KikmbVZlcnRleENvbnN0YW50cywgc2l6
ZW9mKGR4X1ZlcnRleENvbnN0YW50cykgLyBzaXplb2YoZmxvYXRbNF0pKTsKKyAgICAgICAgbURl
dmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYoMCwgKGZsb2F0KikmbVBpeGVsQ29uc3RhbnRz
LCBzaXplb2YoZHhfUGl4ZWxDb25zdGFudHMpIC8gc2l6ZW9mKGZsb2F0WzRdKSk7CisgICAgICAg
IG1EeFVuaWZvcm1zRGlydHkgPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyZXI5Ojph
cHBseVVuaWZvcm1uZnYoZ2w6OlVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMZmxvYXQg
KnYpCit7CisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleCA+PSAwKQorICAg
IHsKKyAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9y
bS0+cHNSZWdpc3RlckluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT5yZWdpc3RlckNvdW50KTsKKyAg
ICB9CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnNSZWdpc3RlckluZGV4ID49IDApCisgICAg
eworICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9y
bS0+dnNSZWdpc3RlckluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT5yZWdpc3RlckNvdW50KTsKKyAg
ICB9Cit9CisKK3ZvaWQgUmVuZGVyZXI5OjphcHBseVVuaWZvcm1uaXYoZ2w6OlVuaWZvcm0gKnRh
cmdldFVuaWZvcm0sIGNvbnN0IEdMaW50ICp2KQoreworICAgIEFTU0VSVCh0YXJnZXRVbmlmb3Jt
LT5yZWdpc3RlckNvdW50IDw9IE1BWF9WRVJURVhfQ09OU1RBTlRfVkVDVE9SU19EM0Q5KTsKKyAg
ICBHTGZsb2F0IHZlY3RvcltNQVhfVkVSVEVYX0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOV1bNF07CisK
KyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHRhcmdldFVuaWZvcm0tPnJlZ2lzdGVy
Q291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHZlY3RvcltpXVswXSA9IChHTGZsb2F0KXZbNCAq
IGkgKyAwXTsKKyAgICAgICAgdmVjdG9yW2ldWzFdID0gKEdMZmxvYXQpdls0ICogaSArIDFdOwor
ICAgICAgICB2ZWN0b3JbaV1bMl0gPSAoR0xmbG9hdCl2WzQgKiBpICsgMl07CisgICAgICAgIHZl
Y3RvcltpXVszXSA9IChHTGZsb2F0KXZbNCAqIGkgKyAzXTsKKyAgICB9CisKKyAgICBhcHBseVVu
aWZvcm1uZnYodGFyZ2V0VW5pZm9ybSwgKEdMZmxvYXQqKXZlY3Rvcik7Cit9CisKK3ZvaWQgUmVu
ZGVyZXI5OjphcHBseVVuaWZvcm1uYnYoZ2w6OlVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0
IEdMaW50ICp2KQoreworICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT5yZWdpc3RlckNvdW50IDw9
IE1BWF9WRVJURVhfQ09OU1RBTlRfVkVDVE9SU19EM0Q5KTsKKyAgICBHTGZsb2F0IHZlY3RvcltN
QVhfVkVSVEVYX0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOV1bNF07CisKKyAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IHRhcmdldFVuaWZvcm0tPnJlZ2lzdGVyQ291bnQ7IGkrKykKKyAgICB7
CisgICAgICAgIHZlY3RvcltpXVswXSA9ICh2WzQgKiBpICsgMF0gPT0gR0xfRkFMU0UpID8gMC4w
ZiA6IDEuMGY7CisgICAgICAgIHZlY3RvcltpXVsxXSA9ICh2WzQgKiBpICsgMV0gPT0gR0xfRkFM
U0UpID8gMC4wZiA6IDEuMGY7CisgICAgICAgIHZlY3RvcltpXVsyXSA9ICh2WzQgKiBpICsgMl0g
PT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7CisgICAgICAgIHZlY3RvcltpXVszXSA9ICh2WzQg
KiBpICsgM10gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7CisgICAgfQorCisgICAgYXBwbHlV
bmlmb3JtbmZ2KHRhcmdldFVuaWZvcm0sIChHTGZsb2F0Kil2ZWN0b3IpOworfQorCit2b2lkIFJl
bmRlcmVyOTo6Y2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyYW1ldGVycyAmY2xlYXJQYXJhbXMsIGds
OjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpCit7CisgICAgRDNEQ09MT1IgY29sb3IgPSBEM0RD
T0xPUl9BUkdCKGdsOjp1bm9ybTw4PihjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUuYWxwaGEp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oY2xlYXJQ
YXJhbXMuY29sb3JDbGVhclZhbHVlLnJlZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsOjp1bm9ybTw4PihjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUuZ3JlZW4pLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oY2xlYXJQYXJh
bXMuY29sb3JDbGVhclZhbHVlLmJsdWUpKTsKKyAgICBmbG9hdCBkZXB0aCA9IGdsOjpjbGFtcDAx
KGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSk7CisgICAgaW50IHN0ZW5jaWwgPSBjbGVhclBh
cmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSAmIDB4MDAwMDAwRkY7CisKKyAgICB1bnNpZ25lZCBpbnQg
c3RlbmNpbFVubWFza2VkID0gMHgwOworICAgIGlmICgoY2xlYXJQYXJhbXMubWFzayAmIEdMX1NU
RU5DSUxfQlVGRkVSX0JJVCkgJiYgZnJhbWVCdWZmZXItPmhhc1N0ZW5jaWwoKSkKKyAgICB7Cisg
ICAgICAgIHVuc2lnbmVkIGludCBzdGVuY2lsU2l6ZSA9IGdsOjpHZXRTdGVuY2lsU2l6ZShmcmFt
ZUJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXRBY3R1YWxGb3JtYXQoKSk7CisgICAgICAg
IHN0ZW5jaWxVbm1hc2tlZCA9ICgweDEgPDwgc3RlbmNpbFNpemUpIC0gMTsKKyAgICB9CisKKyAg
ICBib29sIGFscGhhVW5tYXNrZWQgPSAoZ2w6OkdldEFscGhhU2l6ZShtUmVuZGVyVGFyZ2V0RGVz
Yy5mb3JtYXQpID09IDApIHx8IGNsZWFyUGFyYW1zLmNvbG9yTWFza0FscGhhOworCisgICAgY29u
c3QgYm9vbCBuZWVkTWFza2VkU3RlbmNpbENsZWFyID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9T
VEVOQ0lMX0JVRkZFUl9CSVQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGNsZWFyUGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2sgJiBzdGVuY2lsVW5tYXNrZWQpICE9
IHN0ZW5jaWxVbm1hc2tlZDsKKyAgICBjb25zdCBib29sIG5lZWRNYXNrZWRDb2xvckNsZWFyID0g
KGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSAmJgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAhKGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCAmJiBj
bGVhclBhcmFtcy5jb2xvck1hc2tHcmVlbiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0JsdWUgJiYgYWxwaGFVbm1hc2tlZCk7
CisKKyAgICBpZiAobmVlZE1hc2tlZENvbG9yQ2xlYXIgfHwgbmVlZE1hc2tlZFN0ZW5jaWxDbGVh
cikKKyAgICB7CisgICAgICAgIC8vIFN0YXRlIHdoaWNoIGlzIGFsdGVyZWQgaW4gYWxsIHBhdGhz
IGZyb20gdGhpcyBwb2ludCB0byB0aGUgY2xlYXIgY2FsbCBpcyBzYXZlZC4KKyAgICAgICAgLy8g
U3RhdGUgd2hpY2ggaXMgYWx0ZXJlZCBpbiBvbmx5IHNvbWUgcGF0aHMgd2lsbCBiZSBmbGFnZ2Vk
IGRpcnR5IGluIHRoZSBjYXNlIHRoYXQKKyAgICAgICAgLy8gIHRoYXQgcGF0aCBpcyB0YWtlbi4K
KyAgICAgICAgSFJFU1VMVCBocjsKKyAgICAgICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUg
PT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgaHIgPSBtRGV2aWNlLT5CZWdpblN0YXRl
QmxvY2soKTsKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVS
Ul9PVVRPRlZJREVPTUVNT1JZIHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOworCisgICAgICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIEZBTFNFKTsKKyAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pGVU5DLCBEM0RDTVBfQUxX
QVlTKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUs
IEZBTFNFKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExN
T0RFLCBEM0RDVUxMX05PTkUpOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfRklMTE1PREUsIEQzREZJTExfU09MSUQpOworICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFURVNURU5BQkxFLCBGQUxTRSk7CisgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7Cisg
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUs
IDApOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklU
RUVOQUJMRSwgMCk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19T
VEVOQ0lMRU5BQkxFLCBGQUxTRSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRl
cihOVUxMKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlcihOVUxMKTsKKyAg
ICAgICAgICAgIG1EZXZpY2UtPlNldEZWRihEM0RGVkZfWFlaUkhXIHwgRDNERlZGX0RJRkZVU0Up
OworICAgICAgICAgICAgbURldmljZS0+U2V0U3RyZWFtU291cmNlKDAsIE5VTEwsIDAsIDApOwor
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJM
RU5ERU5BQkxFLCBUUlVFKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0
YXRlKDAsIEQzRFRTU19DT0xPUk9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7CisgICAgICAgICAgICBt
RGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JBUkcxLCBEM0RUQV9U
RkFDVE9SKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQz
RFRTU19BTFBIQU9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7CisgICAgICAgICAgICBtRGV2aWNlLT5T
ZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQUxQSEFBUkcxLCBEM0RUQV9URkFDVE9SKTsK
KyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1RFWFRVUkVGQUNUT1Is
IGNvbG9yKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJ
U0FNUExFTUFTSywgMHhGRkZGRkZGRik7CisKKyAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkg
PCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgbURldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpLCAxKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaHIgPSBtRGV2aWNlLT5FbmRTdGF0ZUJsb2NrKCZtTWFza2VkQ2xlYXJT
YXZlZFN0YXRlKTsKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQz
REVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICB9
CisKKyAgICAgICAgQVNTRVJUKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgIT0gTlVMTCk7CisKKyAg
ICAgICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgIT0gTlVMTCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaHIgPSBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlLT5DYXB0dXJlKCk7CisgICAgICAg
ICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisgICAgICAgIH0KKworICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkZVTkMsIEQzRENNUF9BTFdBWVMpOworICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBGQUxTRSk7CisgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOwor
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9T
T0xJRCk7CisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVO
QUJMRSwgRkFMU0UpOworICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBI
QUJMRU5ERU5BQkxFLCBGQUxTRSk7CisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX0NMSVBQTEFORUVOQUJMRSwgMCk7CisKKyAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sg
JiBHTF9DT0xPUl9CVUZGRVJfQklUKQorICAgICAgICB7CisgICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6Q29udmVydENvbG9yTWFzayhjbGVhclBhcmFtcy5j
b2xvck1hc2tSZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0dyZWVuLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVh
clBhcmFtcy5jb2xvck1hc2tCbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tBbHBoYSkp
OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgMCk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoc3RlbmNpbFVubWFza2VkICE9IDB4MCAmJiAoY2xlYXJQYXJhbXMubWFz
ayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIFRSVUUpOworICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfVFdPU0lERURTVEVOQ0lMTU9ERSwgRkFM
U0UpOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEZV
TkMsIEQzRENNUF9BTFdBWVMpOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfU1RFTkNJTFJFRiwgc3RlbmNpbCk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19TVEVOQ0lMV1JJVEVNQVNLLCBjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVN
YXNrKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxG
QUlMLCBEM0RTVEVOQ0lMT1BfUkVQTEFDRSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19TVEVOQ0lMWkZBSUwsIEQzRFNURU5DSUxPUF9SRVBMQUNFKTsKKyAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxQQVNTLCBEM0RTVEVO
Q0lMT1BfUkVQTEFDRSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBGQUxT
RSk7CisgICAgICAgIH0KKworICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsK
KyAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOworICAgICAgICBtRGV2aWNl
LT5TZXRGVkYoRDNERlZGX1hZWlJIVyk7CisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX1NFUEFSQVRFQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7CisgICAgICAgIG1EZXZpY2Ut
PlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUk9QLCBEM0RUT1BfU0VMRUNUQVJH
MSk7CisgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xP
UkFSRzEsIEQzRFRBX1RGQUNUT1IpOworICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VT
dGF0ZSgwLCBEM0RUU1NfQUxQSEFPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOworICAgICAgICBtRGV2
aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQUxQSEFBUkcxLCBEM0RUQV9URkFD
VE9SKTsKKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfVEVYVFVSRUZBQ1RP
UiwgY29sb3IpOworICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNB
TVBMRU1BU0ssIDB4RkZGRkZGRkYpOworCisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBnbDo6
TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFN0cmVhbVNvdXJjZUZyZXEoaSwgMSk7CisgICAgICAgIH0KKworICAgICAgICBmbG9hdCBx
dWFkWzRdWzRdOyAgIC8vIEEgcXVhZHJpbGF0ZXJhbCBjb3ZlcmluZyB0aGUgdGFyZ2V0LCBhbGln
bmVkIHRvIG1hdGNoIHRoZSBlZGdlcworICAgICAgICBxdWFkWzBdWzBdID0gLTAuNWY7CisgICAg
ICAgIHF1YWRbMF1bMV0gPSBtUmVuZGVyVGFyZ2V0RGVzYy5oZWlnaHQgLSAwLjVmOworICAgICAg
ICBxdWFkWzBdWzJdID0gMC4wZjsKKyAgICAgICAgcXVhZFswXVszXSA9IDEuMGY7CisKKyAgICAg
ICAgcXVhZFsxXVswXSA9IG1SZW5kZXJUYXJnZXREZXNjLndpZHRoIC0gMC41ZjsKKyAgICAgICAg
cXVhZFsxXVsxXSA9IG1SZW5kZXJUYXJnZXREZXNjLmhlaWdodCAtIDAuNWY7CisgICAgICAgIHF1
YWRbMV1bMl0gPSAwLjBmOworICAgICAgICBxdWFkWzFdWzNdID0gMS4wZjsKKworICAgICAgICBx
dWFkWzJdWzBdID0gLTAuNWY7CisgICAgICAgIHF1YWRbMl1bMV0gPSAtMC41ZjsKKyAgICAgICAg
cXVhZFsyXVsyXSA9IDAuMGY7CisgICAgICAgIHF1YWRbMl1bM10gPSAxLjBmOworCisgICAgICAg
IHF1YWRbM11bMF0gPSBtUmVuZGVyVGFyZ2V0RGVzYy53aWR0aCAtIDAuNWY7CisgICAgICAgIHF1
YWRbM11bMV0gPSAtMC41ZjsKKyAgICAgICAgcXVhZFszXVsyXSA9IDAuMGY7CisgICAgICAgIHF1
YWRbM11bM10gPSAxLjBmOworCisgICAgICAgIHN0YXJ0U2NlbmUoKTsKKyAgICAgICAgbURldmlj
ZS0+RHJhd1ByaW1pdGl2ZVVQKEQzRFBUX1RSSUFOR0xFU1RSSVAsIDIsIHF1YWQsIHNpemVvZihm
bG9hdFs0XSkpOworCisgICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfREVQVEhfQlVG
RkVSX0JJVCkKKyAgICAgICAgeworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfWkVOQUJMRSwgVFJVRSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19aV1JJVEVFTkFCTEUsIFRSVUUpOworICAgICAgICAgICAgbURldmljZS0+Q2xlYXIo
MCwgTlVMTCwgRDNEQ0xFQVJfWkJVRkZFUiwgY29sb3IsIGRlcHRoLCBzdGVuY2lsKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlICE9IE5VTEwpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1NYXNrZWRDbGVhclNhdmVkU3RhdGUtPkFwcGx5KCk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoY2xlYXJQYXJhbXMubWFzaykKKyAgICB7CisgICAg
ICAgIERXT1JEIGR4Q2xlYXJGbGFncyA9IDA7CisgICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNr
ICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkKKyAgICAgICAgeworICAgICAgICAgICAgZHhDbGVhckZs
YWdzIHw9IEQzRENMRUFSX1RBUkdFVDsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2xlYXJQYXJh
bXMubWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGR4
Q2xlYXJGbGFncyB8PSBEM0RDTEVBUl9aQlVGRkVSOworICAgICAgICB9CisgICAgICAgIGlmIChj
bGVhclBhcmFtcy5tYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKQorICAgICAgICB7CisgICAg
ICAgICAgICBkeENsZWFyRmxhZ3MgfD0gRDNEQ0xFQVJfU1RFTkNJTDsKKyAgICAgICAgfQorCisg
ICAgICAgIG1EZXZpY2UtPkNsZWFyKDAsIE5VTEwsIGR4Q2xlYXJGbGFncywgY29sb3IsIGRlcHRo
LCBzdGVuY2lsKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyZXI5OjptYXJrQWxsU3RhdGVEaXJ0
eSgpCit7CisgICAgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwgPSAwOworICAgIG1BcHBsaWVk
RGVwdGhidWZmZXJTZXJpYWwgPSAwOworICAgIG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCA9
IDA7CisgICAgbURlcHRoU3RlbmNpbEluaXRpYWxpemVkID0gZmFsc2U7CisgICAgbVJlbmRlclRh
cmdldERlc2NJbml0aWFsaXplZCA9IGZhbHNlOworCisgICAgbUZvcmNlU2V0RGVwdGhTdGVuY2ls
U3RhdGUgPSB0cnVlOworICAgIG1Gb3JjZVNldFJhc3RlclN0YXRlID0gdHJ1ZTsKKyAgICBtRm9y
Y2VTZXRTY2lzc29yID0gdHJ1ZTsKKyAgICBtRm9yY2VTZXRWaWV3cG9ydCA9IHRydWU7CisgICAg
bUZvcmNlU2V0QmxlbmRTdGF0ZSA9IHRydWU7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM7
IGkrKykKKyAgICB7CisgICAgICAgIG1Gb3JjZVNldFZlcnRleFNhbXBsZXJTdGF0ZXNbaV0gPSB0
cnVlOworICAgICAgICBtQ3VyVmVydGV4VGV4dHVyZVNlcmlhbHNbaV0gPSAwOworICAgIH0KKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklU
UzsgaSsrKQorICAgIHsKKyAgICAgICAgbUZvcmNlU2V0UGl4ZWxTYW1wbGVyU3RhdGVzW2ldID0g
dHJ1ZTsKKyAgICAgICAgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbaV0gPSAwOworICAgIH0KKwor
ICAgIG1BcHBsaWVkSUJTZXJpYWwgPSAwOworICAgIG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlh
bCA9IDA7CisgICAgbUR4VW5pZm9ybXNEaXJ0eSA9IHRydWU7CisKKyAgICBtVmVydGV4RGVjbGFy
YXRpb25DYWNoZS5tYXJrU3RhdGVEaXJ0eSgpOworfQorCit2b2lkIFJlbmRlcmVyOTo6cmVsZWFz
ZURldmljZVJlc291cmNlcygpCit7CisgICAgd2hpbGUgKCFtRXZlbnRRdWVyeVBvb2wuZW1wdHko
KSkKKyAgICB7CisgICAgICAgIG1FdmVudFF1ZXJ5UG9vbC5iYWNrKCktPlJlbGVhc2UoKTsKKyAg
ICAgICAgbUV2ZW50UXVlcnlQb29sLnBvcF9iYWNrKCk7CisgICAgfQorCisgICAgU2FmZVJlbGVh
c2UobU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSk7CisKKyAgICBtVmVydGV4U2hhZGVyQ2FjaGUuY2xl
YXIoKTsKKyAgICBtUGl4ZWxTaGFkZXJDYWNoZS5jbGVhcigpOworCisgICAgU2FmZURlbGV0ZSht
QmxpdCk7CisgICAgU2FmZURlbGV0ZShtVmVydGV4RGF0YU1hbmFnZXIpOworICAgIFNhZmVEZWxl
dGUobUluZGV4RGF0YU1hbmFnZXIpOworICAgIFNhZmVEZWxldGUobUxpbmVMb29wSUIpOworCisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fTlVMTF9DT0xPUkJVRkZFUl9DQUNIRV9FTlRSSUVT
OyBpKyspCisgICAgeworICAgICAgICBTYWZlRGVsZXRlKG1OdWxsQ29sb3JidWZmZXJDYWNoZVtp
XS5idWZmZXIpOworICAgIH0KKworfQorCisKK3ZvaWQgUmVuZGVyZXI5Ojpub3RpZnlEZXZpY2VM
b3N0KCkKK3sKKyAgICBtRGV2aWNlTG9zdCA9IHRydWU7CisgICAgbURpc3BsYXktPm5vdGlmeURl
dmljZUxvc3QoKTsKK30KKworYm9vbCBSZW5kZXJlcjk6OmlzRGV2aWNlTG9zdCgpCit7CisgICAg
cmV0dXJuIG1EZXZpY2VMb3N0OworfQorCisvLyBzZXQgbm90aWZ5IHRvIHRydWUgdG8gYnJvYWRj
YXN0IGEgbWVzc2FnZSB0byBhbGwgY29udGV4dHMgb2YgdGhlIGRldmljZSBsb3NzCitib29sIFJl
bmRlcmVyOTo6dGVzdERldmljZUxvc3QoYm9vbCBub3RpZnkpCit7CisgICAgSFJFU1VMVCBzdGF0
dXMgPSBnZXREZXZpY2VTdGF0dXNDb2RlKCk7CisgICAgYm9vbCBpc0xvc3QgPSBGQUlMRUQoc3Rh
dHVzKTsKKworICAgIGlmIChpc0xvc3QpCisgICAgeworICAgICAgICAvLyBlbnN1cmUgd2Ugbm90
ZSB0aGUgZGV2aWNlIGxvc3MgLS0KKyAgICAgICAgLy8gd2UnbGwgcHJvYmFibHkgZ2V0IHRoaXMg
ZG9uZSBhZ2FpbiBieSBub3RpZnlEZXZpY2VMb3N0CisgICAgICAgIC8vIGJ1dCBiZXN0IHRvIHJl
bWVtYmVyIGl0IQorICAgICAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byBjbGVhciB0
aGUgZGV2aWNlIGxvc3Mgc3RhdHVzIGhlcmUKKyAgICAgICAgLy8gLS0gdGhpcyBuZWVkcyB0byBi
ZSBkb25lIGJ5IHJlc2V0RGV2aWNlCisgICAgICAgIG1EZXZpY2VMb3N0ID0gdHJ1ZTsKKyAgICAg
ICAgaWYgKG5vdGlmeSkKKyAgICAgICAgeworICAgICAgICAgICAgbm90aWZ5RGV2aWNlTG9zdCgp
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGlzTG9zdDsKK30KKworSFJFU1VMVCBS
ZW5kZXJlcjk6OmdldERldmljZVN0YXR1c0NvZGUoKQoreworICAgIEhSRVNVTFQgc3RhdHVzID0g
RDNEX09LOworCisgICAgaWYgKG1EZXZpY2VFeCkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IG1E
ZXZpY2VFeC0+Q2hlY2tEZXZpY2VTdGF0ZShOVUxMKTsKKyAgICB9CisgICAgZWxzZSBpZiAobURl
dmljZSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IG1EZXZpY2UtPlRlc3RDb29wZXJhdGl2ZUxl
dmVsKCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworYm9vbCBSZW5kZXJlcjk6
OnRlc3REZXZpY2VSZXNldHRhYmxlKCkKK3sKKyAgICAvLyBPbiBEM0Q5RXgsIERFVklDRUxPU1Qg
cmVwcmVzZW50cyBhIGh1bmcgZGV2aWNlIHRoYXQgbmVlZHMgdG8gYmUgcmVzdGFydGVkCisgICAg
Ly8gREVWSUNFUkVNT1ZFRCBpbmRpY2F0ZXMgdGhlIGRldmljZSBoYXMgYmVlbiBzdG9wcGVkIGFu
ZCBtdXN0IGJlIHJlY3JlYXRlZAorICAgIHN3aXRjaCAoZ2V0RGV2aWNlU3RhdHVzQ29kZSgpKQor
ICAgIHsKKyAgICAgIGNhc2UgRDNERVJSX0RFVklDRU5PVFJFU0VUOgorICAgICAgY2FzZSBEM0RF
UlJfREVWSUNFSFVORzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICBjYXNlIEQzREVSUl9E
RVZJQ0VMT1NUOgorICAgICAgICByZXR1cm4gKG1EZXZpY2VFeCAhPSBOVUxMKTsKKyAgICAgIGNh
c2UgRDNERVJSX0RFVklDRVJFTU9WRUQ6CisgICAgICAgIEFTU0VSVChtRGV2aWNlRXggIT0gTlVM
TCk7CisgICAgICAgIHJldHVybiBpc1JlbW92ZWREZXZpY2VSZXNldHRhYmxlKCk7CisgICAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFJlbmRlcmVy
OTo6cmVzZXREZXZpY2UoKQoreworICAgIHJlbGVhc2VEZXZpY2VSZXNvdXJjZXMoKTsKKworICAg
IEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50UGFyYW1ldGVycyA9IGdldERlZmF1bHRQcmVz
ZW50UGFyYW1ldGVycygpOworCisgICAgSFJFU1VMVCByZXN1bHQgPSBEM0RfT0s7CisgICAgYm9v
bCBsb3N0ID0gdGVzdERldmljZUxvc3QoZmFsc2UpOworICAgIGJvb2wgcmVtb3ZlZERldmljZSA9
IChnZXREZXZpY2VTdGF0dXNDb2RlKCkgPT0gRDNERVJSX0RFVklDRVJFTU9WRUQpOworCisgICAg
Ly8gRGV2aWNlIFJlbW92ZWQgaXMgYSBmZWF0dXJlIHdoaWNoIGlzIG9ubHkgcHJlc2VudCB3aXRo
IEQzRDlFeAorICAgIEFTU0VSVChtRGV2aWNlRXggIT0gTlVMTCB8fCAhcmVtb3ZlZERldmljZSk7
CisKKyAgICBmb3IgKGludCBhdHRlbXB0cyA9IDM7IGxvc3QgJiYgYXR0ZW1wdHMgPiAwOyBhdHRl
bXB0cy0tKQorICAgIHsKKyAgICAgICAgaWYgKHJlbW92ZWREZXZpY2UpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIC8vIERldmljZSByZW1vdmVkLCB3aGljaCBtYXkgdHJpZ2dlciBvbiBkcml2ZXIg
cmVpbnN0YWxsYXRpb24sCisgICAgICAgICAgICAvLyBtYXkgY2F1c2UgYSBsb25nZXIgd2FpdCBv
dGhlciByZXNldCBhdHRlbXB0cyBiZWZvcmUgdGhlCisgICAgICAgICAgICAvLyBzeXN0ZW0gaXMg
cmVhZHkgdG8gaGFuZGxlIGNyZWF0aW5nIGEgbmV3IGRldmljZS4KKyAgICAgICAgICAgIFNsZWVw
KDgwMCk7CisgICAgICAgICAgICBsb3N0ID0gIXJlc2V0UmVtb3ZlZERldmljZSgpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKG1EZXZpY2VFeCkKKyAgICAgICAgeworICAgICAgICAgICAg
U2xlZXAoNTAwKTsgICAvLyBHaXZlIHRoZSBncmFwaGljcyBkcml2ZXIgc29tZSBDUFUgdGltZQor
ICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZUV4LT5SZXNldEV4KCZwcmVzZW50UGFyYW1ldGVy
cywgTlVMTCk7CisgICAgICAgICAgICBsb3N0ID0gdGVzdERldmljZUxvc3QoZmFsc2UpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0ID0gbURl
dmljZS0+VGVzdENvb3BlcmF0aXZlTGV2ZWwoKTsKKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQg
PT0gRDNERVJSX0RFVklDRUxPU1QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU2xl
ZXAoMTAwKTsgICAvLyBHaXZlIHRoZSBncmFwaGljcyBkcml2ZXIgc29tZSBDUFUgdGltZQorICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPlRlc3RDb29wZXJhdGl2ZUxldmVsKCk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX0RFVklDRU5P
VFJFU0VUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2Ut
PlJlc2V0KCZwcmVzZW50UGFyYW1ldGVycyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBs
b3N0ID0gdGVzdERldmljZUxvc3QoZmFsc2UpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJSZXNldC9SZXNldEV4IGZhaWxl
ZCBtdWx0aXBsZSB0aW1lczogMHglMDhYIiwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGlmIChyZW1vdmVkRGV2aWNlICYmIGxvc3QpCisgICAgeworICAgICAg
ICBFUlIoIkRldmljZSBsb3N0IHJlc2V0IGZhaWxlZCBtdWx0aXBsZSB0aW1lcyIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gSWYgdGhlIGRldmljZSB3YXMgcmVtb3Zl
ZCwgd2UgYWxyZWFkeSBmaW5pc2hlZCByZS1pbml0aWFsaXphdGlvbiBpbiByZXNldFJlbW92ZWRE
ZXZpY2UKKyAgICBpZiAoIXJlbW92ZWREZXZpY2UpCisgICAgeworICAgICAgICAvLyByZXNldCBk
ZXZpY2UgZGVmYXVsdHMKKyAgICAgICAgaW5pdGlhbGl6ZURldmljZSgpOworICAgIH0KKworICAg
IG1EZXZpY2VMb3N0ID0gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW5k
ZXJlcjk6OmlzUmVtb3ZlZERldmljZVJlc2V0dGFibGUoKSBjb25zdAoreworICAgIGJvb2wgc3Vj
Y2VzcyA9IGZhbHNlOworCisjaWZkZWYgQU5HTEVfRU5BQkxFX0QzRDlFWAorICAgIElEaXJlY3Qz
RDlFeCAqZDNkOUV4ID0gTlVMTDsKKyAgICB0eXBlZGVmIEhSRVNVTFQgKFdJTkFQSSAqRGlyZWN0
M0RDcmVhdGU5RXhGdW5jKShVSU5ULCBJRGlyZWN0M0Q5RXgqKik7CisgICAgRGlyZWN0M0RDcmVh
dGU5RXhGdW5jIERpcmVjdDNEQ3JlYXRlOUV4UHRyID0gcmVpbnRlcnByZXRfY2FzdDxEaXJlY3Qz
RENyZWF0ZTlFeEZ1bmM+KEdldFByb2NBZGRyZXNzKG1EM2Q5TW9kdWxlLCAiRGlyZWN0M0RDcmVh
dGU5RXgiKSk7CisKKyAgICBpZiAoRGlyZWN0M0RDcmVhdGU5RXhQdHIgJiYgU1VDQ0VFREVEKERp
cmVjdDNEQ3JlYXRlOUV4UHRyKEQzRF9TREtfVkVSU0lPTiwgJmQzZDlFeCkpKQorICAgIHsKKyAg
ICAgICAgRDNEQ0FQUzkgZGV2aWNlQ2FwczsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkM2Q5
RXgtPkdldERldmljZUNhcHMobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCAmZGV2aWNlQ2Fwcyk7Cisg
ICAgICAgIHN1Y2Nlc3MgPSBTVUNDRUVERUQocmVzdWx0KTsKKyAgICB9CisKKyAgICBTYWZlUmVs
ZWFzZShkM2Q5RXgpOworI2Vsc2UKKyAgICBBU1NFUlQoVU5SRUFDSEFCTEUoKSk7CisjZW5kaWYK
KworICAgIHJldHVybiBzdWNjZXNzOworfQorCitib29sIFJlbmRlcmVyOTo6cmVzZXRSZW1vdmVk
RGV2aWNlKCkKK3sKKyAgICAvLyBGcm9tIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMv
bGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvYmIxNzI1NTQodj12cy44NSkuYXNweDoKKyAgICAvLyBU
aGUgaGFyZHdhcmUgYWRhcHRlciBoYXMgYmVlbiByZW1vdmVkLiBBcHBsaWNhdGlvbiBtdXN0IGRl
c3Ryb3kgdGhlIGRldmljZSwgZG8gZW51bWVyYXRpb24gb2YKKyAgICAvLyBhZGFwdGVycyBhbmQg
Y3JlYXRlIGFub3RoZXIgRGlyZWN0M0QgZGV2aWNlLiBJZiBhcHBsaWNhdGlvbiBjb250aW51ZXMg
cmVuZGVyaW5nIHdpdGhvdXQKKyAgICAvLyBjYWxsaW5nIFJlc2V0LCB0aGUgcmVuZGVyaW5nIGNh
bGxzIHdpbGwgc3VjY2VlZC4gQXBwbGllcyB0byBEaXJlY3QzRCA5RXggb25seS4KKyAgICBkZWlu
aXRpYWxpemUoKTsKKyAgICByZXR1cm4gKGluaXRpYWxpemUoKSA9PSBFR0xfU1VDQ0VTUyk7Cit9
CisKK0RXT1JEIFJlbmRlcmVyOTo6Z2V0QWRhcHRlclZlbmRvcigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1BZGFwdGVySWRlbnRpZmllci5WZW5kb3JJZDsKK30KKworc3RkOjpzdHJpbmcgUmVuZGVy
ZXI5OjpnZXRSZW5kZXJlckRlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICBzdGQ6Om9zdHJpbmdz
dHJlYW0gcmVuZGVyZXJTdHJpbmc7CisKKyAgICByZW5kZXJlclN0cmluZyA8PCBtQWRhcHRlcklk
ZW50aWZpZXIuRGVzY3JpcHRpb247CisgICAgaWYgKGdldFNoYXJlSGFuZGxlU3VwcG9ydCgpKQor
ICAgIHsKKyAgICAgICAgcmVuZGVyZXJTdHJpbmcgPDwgIiBEaXJlY3QzRDlFeCI7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJlbmRlcmVyU3RyaW5nIDw8ICIgRGlyZWN0M0Q5IjsK
KyAgICB9CisKKyAgICByZW5kZXJlclN0cmluZyA8PCAiIHZzXyIgPDwgRDNEU0hBREVSX1ZFUlNJ
T05fTUFKT1IobURldmljZUNhcHMuVmVydGV4U2hhZGVyVmVyc2lvbikgPDwgIl8iIDw8IEQzRFNI
QURFUl9WRVJTSU9OX01JTk9SKG1EZXZpY2VDYXBzLlZlcnRleFNoYWRlclZlcnNpb24pOworICAg
IHJlbmRlcmVyU3RyaW5nIDw8ICIgcHNfIiA8PCBEM0RTSEFERVJfVkVSU0lPTl9NQUpPUihtRGV2
aWNlQ2Fwcy5QaXhlbFNoYWRlclZlcnNpb24pIDw8ICJfIiA8PCBEM0RTSEFERVJfVkVSU0lPTl9N
SU5PUihtRGV2aWNlQ2Fwcy5QaXhlbFNoYWRlclZlcnNpb24pOworCisgICAgcmV0dXJuIHJlbmRl
cmVyU3RyaW5nLnN0cigpOworfQorCitHVUlEIFJlbmRlcmVyOTo6Z2V0QWRhcHRlcklkZW50aWZp
ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtQWRhcHRlcklkZW50aWZpZXIuRGV2aWNlSWRlbnRp
ZmllcjsKK30KKwordm9pZCBSZW5kZXJlcjk6OmdldE11bHRpU2FtcGxlU3VwcG9ydChEM0RGT1JN
QVQgZm9ybWF0LCBib29sICptdWx0aVNhbXBsZUFycmF5KQoreworICAgIGZvciAoaW50IG11bHRp
U2FtcGxlSW5kZXggPSAwOyBtdWx0aVNhbXBsZUluZGV4IDw9IEQzRE1VTFRJU0FNUExFXzE2X1NB
TVBMRVM7IG11bHRpU2FtcGxlSW5kZXgrKykKKyAgICB7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gbUQzZDktPkNoZWNrRGV2aWNlTXVsdGlTYW1wbGVUeXBlKG1BZGFwdGVyLCBtRGV2aWNlVHlw
ZSwgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUUlVFLCAoRDNETVVMVElTQU1QTEVfVFlQRSltdWx0aVNhbXBsZUluZGV4
LCBOVUxMKTsKKworICAgICAgICBtdWx0aVNhbXBsZUFycmF5W211bHRpU2FtcGxlSW5kZXhdID0g
U1VDQ0VFREVEKHJlc3VsdCk7CisgICAgfQorfQorCitib29sIFJlbmRlcmVyOTo6Z2V0QkdSQVRl
eHR1cmVTdXBwb3J0KCkgY29uc3QKK3sKKyAgICAvLyBEaXJlY3RYIDkgYWx3YXlzIHN1cHBvcnRz
IEJHUkEKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldERYVDFUZXh0
dXJlU3VwcG9ydCgpCit7CisgICAgcmV0dXJuIG1EWFQxVGV4dHVyZVN1cHBvcnQ7Cit9CisKK2Jv
b2wgUmVuZGVyZXI5OjpnZXREWFQzVGV4dHVyZVN1cHBvcnQoKQoreworICAgIHJldHVybiBtRFhU
M1RleHR1cmVTdXBwb3J0OworfQorCitib29sIFJlbmRlcmVyOTo6Z2V0RFhUNVRleHR1cmVTdXBw
b3J0KCkKK3sKKyAgICByZXR1cm4gbURYVDVUZXh0dXJlU3VwcG9ydDsKK30KKworYm9vbCBSZW5k
ZXJlcjk6OmdldERlcHRoVGV4dHVyZVN1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiBtRGVw
dGhUZXh0dXJlU3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldEZsb2F0MzJUZXh0dXJl
U3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpCit7CisgICAgKmZpbHRl
cmluZyA9IG1GbG9hdDMyRmlsdGVyU3VwcG9ydDsKKyAgICAqcmVuZGVyYWJsZSA9IG1GbG9hdDMy
UmVuZGVyU3VwcG9ydDsKKyAgICByZXR1cm4gbUZsb2F0MzJUZXh0dXJlU3VwcG9ydDsKK30KKwor
Ym9vbCBSZW5kZXJlcjk6OmdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcs
IGJvb2wgKnJlbmRlcmFibGUpCit7CisgICAgKmZpbHRlcmluZyA9IG1GbG9hdDE2RmlsdGVyU3Vw
cG9ydDsKKyAgICAqcmVuZGVyYWJsZSA9IG1GbG9hdDE2UmVuZGVyU3VwcG9ydDsKKyAgICByZXR1
cm4gbUZsb2F0MTZUZXh0dXJlU3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldEx1bWlu
YW5jZVRleHR1cmVTdXBwb3J0KCkKK3sKKyAgICByZXR1cm4gbUx1bWluYW5jZVRleHR1cmVTdXBw
b3J0OworfQorCitib29sIFJlbmRlcmVyOTo6Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9y
dCgpCit7CisgICAgcmV0dXJuIG1MdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0OworfQorCiti
b29sIFJlbmRlcmVyOTo6Z2V0VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHk7Cit9CisKK2Zs
b2F0IFJlbmRlcmVyOTo6Z2V0VGV4dHVyZU1heEFuaXNvdHJvcHkoKSBjb25zdAoreworICAgIGlm
IChtU3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSkKKyAgICB7CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxmbG9hdD4obURldmljZUNhcHMuTWF4QW5pc290cm9weSk7CisgICAgfQor
ICAgIHJldHVybiAxLjBmOworfQorCitib29sIFJlbmRlcmVyOTo6Z2V0RXZlbnRRdWVyeVN1cHBv
cnQoKQoreworICAgIHJldHVybiBtRXZlbnRRdWVyeVN1cHBvcnQ7Cit9CisKK3Vuc2lnbmVkIGlu
dCBSZW5kZXJlcjk6OmdldE1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3QKK3sKKyAg
ICBNRVRBX0FTU0VSVChNQVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZfU00zIDw9IGdsOjpJTVBM
RU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMpOworICAgIHJldHVybiBt
VmVydGV4VGV4dHVyZVN1cHBvcnQgPyBNQVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZfU00zIDog
MDsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyOTo6Z2V0TWF4Q29tYmluZWRUZXh0dXJlSW1h
Z2VVbml0cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklU
UyArIGdldE1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCk7Cit9CisKK3Vuc2lnbmVkIGludCBS
ZW5kZXJlcjk6OmdldFJlc2VydmVkVmVydGV4VW5pZm9ybVZlY3RvcnMoKSBjb25zdAoreworICAg
IHJldHVybiAyOyAgIC8vIGR4X1ZpZXdBZGp1c3QgYW5kIGR4X0RlcHRoUmFuZ2UuCit9CisKK3Vu
c2lnbmVkIGludCBSZW5kZXJlcjk6OmdldFJlc2VydmVkRnJhZ21lbnRVbmlmb3JtVmVjdG9ycygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIDM7ICAgLy8gZHhfVmlld0Nvb3JkcywgZHhfRGVwdGhGcm9u
dCBhbmQgZHhfRGVwdGhSYW5nZS4KK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyOTo6Z2V0TWF4
VmVydGV4VW5pZm9ybVZlY3RvcnMoKSBjb25zdAoreworICAgIHJldHVybiBNQVhfVkVSVEVYX0NP
TlNUQU5UX1ZFQ1RPUlNfRDNEOSAtIGdldFJlc2VydmVkVmVydGV4VW5pZm9ybVZlY3RvcnMoKTsK
K30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyOTo6Z2V0TWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9y
cygpIGNvbnN0Cit7CisgICAgY29uc3QgaW50IG1heFBpeGVsQ29uc3RhbnRWZWN0b3JzID0gKGdl
dE1ham9yU2hhZGVyTW9kZWwoKSA+PSAzKSA/IE1BWF9QSVhFTF9DT05TVEFOVF9WRUNUT1JTX1NN
MyA6IE1BWF9QSVhFTF9DT05TVEFOVF9WRUNUT1JTX1NNMjsKKworICAgIHJldHVybiBtYXhQaXhl
bENvbnN0YW50VmVjdG9ycyAtIGdldFJlc2VydmVkRnJhZ21lbnRVbmlmb3JtVmVjdG9ycygpOwor
fQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRNYXhWYXJ5aW5nVmVjdG9ycygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIChnZXRNYWpvclNoYWRlck1vZGVsKCkgPj0gMykgPyBNQVhfVkFSWUlO
R19WRUNUT1JTX1NNMyA6IE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00yOworfQorCitib29sIFJlbmRl
cmVyOTo6Z2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiBt
U3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlczsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldE9jY2x1
c2lvblF1ZXJ5U3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1PY2NsdXNpb25RdWVyeVN1
cHBvcnQ7Cit9CisKK2Jvb2wgUmVuZGVyZXI5OjpnZXRJbnN0YW5jaW5nU3VwcG9ydCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVyVmVyc2lvbiA+PSBEM0RQU19W
RVJTSU9OKDMsIDApOworfQorCitib29sIFJlbmRlcmVyOTo6Z2V0U2hhcmVIYW5kbGVTdXBwb3J0
KCkgY29uc3QKK3sKKyAgICAvLyBQSVggZG9lc24ndCBzZWVtIHRvIHN1cHBvcnQgdXNpbmcgc2hh
cmUgaGFuZGxlcywgc28gZGlzYWJsZSB0aGVtLgorICAgIHJldHVybiAobUQzZDlFeCAhPSBOVUxM
KSAmJiAhZ2w6OnBlcmZBY3RpdmUoKTsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldERlcml2YXRp
dmVJbnN0cnVjdGlvblN1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiAobURldmljZUNhcHMu
UFMyMENhcHMuQ2FwcyAmIEQzRFBTMjBDQVBTX0dSQURJRU5USU5TVFJVQ1RJT05TKSAhPSAwOwor
fQorCitib29sIFJlbmRlcmVyOTo6Z2V0UG9zdFN1YkJ1ZmZlclN1cHBvcnQoKSBjb25zdAorewor
ICAgIHJldHVybiB0cnVlOworfQorCitpbnQgUmVuZGVyZXI5OjpnZXRNYWpvclNoYWRlck1vZGVs
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gRDNEU0hBREVSX1ZFUlNJT05fTUFKT1IobURldmljZUNh
cHMuUGl4ZWxTaGFkZXJWZXJzaW9uKTsKK30KKworZmxvYXQgUmVuZGVyZXI5OjpnZXRNYXhQb2lu
dFNpemUoKSBjb25zdAoreworICAgIC8vIFBvaW50IHNpemUgY2xhbXBlZCBhdCAxLjBmIGZvciBT
TTIKKyAgICByZXR1cm4gZ2V0TWFqb3JTaGFkZXJNb2RlbCgpID09IDMgPyBtRGV2aWNlQ2Fwcy5N
YXhQb2ludFNpemUgOiAxLjBmOworfQorCitpbnQgUmVuZGVyZXI5OjpnZXRNYXhWaWV3cG9ydERp
bWVuc2lvbigpIGNvbnN0Cit7CisgICAgaW50IG1heFRleHR1cmVEaW1lbnNpb24gPSBzdGQ6Om1p
bihzdGQ6Om1pbihnZXRNYXhUZXh0dXJlV2lkdGgoKSwgZ2V0TWF4VGV4dHVyZUhlaWdodCgpKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpZ2w6OklNUExFTUVO
VEFUSU9OX01BWF9URVhUVVJFX1NJWkUpOworICAgIHJldHVybiBtYXhUZXh0dXJlRGltZW5zaW9u
OworfQorCitpbnQgUmVuZGVyZXI5OjpnZXRNYXhUZXh0dXJlV2lkdGgoKSBjb25zdAoreworICAg
IHJldHVybiAoaW50KW1EZXZpY2VDYXBzLk1heFRleHR1cmVXaWR0aDsKK30KKworaW50IFJlbmRl
cmVyOTo6Z2V0TWF4VGV4dHVyZUhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIChpbnQpbURl
dmljZUNhcHMuTWF4VGV4dHVyZUhlaWdodDsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldDMyQml0
SW5kZXhTdXBwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbURldmljZUNhcHMuTWF4VmVydGV4
SW5kZXggPj0gKDEgPDwgMTYpOworfQorCitEV09SRCBSZW5kZXJlcjk6OmdldENhcHNEZWNsVHlw
ZXMoKSBjb25zdAoreworICAgIHJldHVybiBtRGV2aWNlQ2Fwcy5EZWNsVHlwZXM7Cit9CisKK2lu
dCBSZW5kZXJlcjk6OmdldE1pblN3YXBJbnRlcnZhbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1N
aW5Td2FwSW50ZXJ2YWw7Cit9CisKK2ludCBSZW5kZXJlcjk6OmdldE1heFN3YXBJbnRlcnZhbCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1NYXhTd2FwSW50ZXJ2YWw7Cit9CisKK2ludCBSZW5kZXJl
cjk6OmdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSBjb25zdAoreworICAgIHJldHVybiBtTWF4U3Vw
cG9ydGVkU2FtcGxlczsKK30KKworaW50IFJlbmRlcmVyOTo6Z2V0TmVhcmVzdFN1cHBvcnRlZFNh
bXBsZXMoRDNERk9STUFUIGZvcm1hdCwgaW50IHJlcXVlc3RlZCkgY29uc3QKK3sKKyAgICBpZiAo
cmVxdWVzdGVkID09IDApCisgICAgeworICAgICAgICByZXR1cm4gcmVxdWVzdGVkOworICAgIH0K
KworICAgIHN0ZDo6bWFwPEQzREZPUk1BVCwgYm9vbCAqPjo6Y29uc3RfaXRlcmF0b3IgaXRyID0g
bU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7CisgICAgaWYgKGl0ciA9PSBtTXVsdGlT
YW1wbGVTdXBwb3J0LmVuZCgpKQorICAgIHsKKyAgICAgICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRf
VU5LTk9XTikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gLTE7CisgICAg
fQorCisgICAgZm9yIChpbnQgaSA9IHJlcXVlc3RlZDsgaSA8PSBEM0RNVUxUSVNBTVBMRV8xNl9T
QU1QTEVTOyArK2kpCisgICAgeworICAgICAgICBpZiAoaXRyLT5zZWNvbmRbaV0gJiYgaSAhPSBE
M0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK3Vuc2lnbmVkIGlu
dCBSZW5kZXJlcjk6OmdldE1heFJlbmRlclRhcmdldHMoKSBjb25zdAoreworICAgIC8vIHdlIGRv
IG5vdCBzdXBwb3J0IE1SVCBpbiBkM2Q5CisgICAgcmV0dXJuIDE7Cit9CisKK0QzREZPUk1BVCBS
ZW5kZXJlcjk6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoR0xpbnQgaW50ZXJuYWxmb3Jt
YXQpCit7CisgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEdM
X0RFUFRIX0NPTVBPTkVOVDE2OgorICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVM6
CisgICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgorICAgICAgICByZXR1cm4gRDNE
Rk1UX0lOVFo7CisgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Cisg
ICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgorICAgICAgICByZXR1
cm4gRDNERk1UX0RYVDE7CisgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNf
QU5HTEU6CisgICAgICAgIHJldHVybiBEM0RGTVRfRFhUMzsKKyAgICAgIGNhc2UgR0xfQ09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKKyAgICAgICAgcmV0dXJuIEQzREZNVF9EWFQ1Owor
ICAgICAgY2FzZSBHTF9SR0JBMzJGX0VYVDoKKyAgICAgIGNhc2UgR0xfUkdCMzJGX0VYVDoKKyAg
ICAgIGNhc2UgR0xfQUxQSEEzMkZfRVhUOgorICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UzMkZfRVhU
OgorICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhUOgorICAgICAgICByZXR1cm4g
RDNERk1UX0EzMkIzMkczMlIzMkY7CisgICAgICBjYXNlIEdMX1JHQkExNkZfRVhUOgorICAgICAg
Y2FzZSBHTF9SR0IxNkZfRVhUOgorICAgICAgY2FzZSBHTF9BTFBIQTE2Rl9FWFQ6CisgICAgICBj
YXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2
Rl9FWFQ6CisgICAgICAgIHJldHVybiBEM0RGTVRfQTE2QjE2RzE2UjE2RjsKKyAgICAgIGNhc2Ug
R0xfTFVNSU5BTkNFOF9FWFQ6CisgICAgICAgIGlmIChnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9y
dCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRDNERk1UX0w4OworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQ6Cisg
ICAgICAgIGlmIChnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBEM0RGTVRfQThMODsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfUkdCOF9PRVM6CisgICAgICBjYXNlIEdMX1JHQjU2NToKKyAgICAg
ICAgcmV0dXJuIEQzREZNVF9YOFI4RzhCODsKKyAgICB9CisKKyAgICByZXR1cm4gRDNERk1UX0E4
UjhHOEI4OworfQorCitib29sIFJlbmRlcmVyOTo6Y29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlMkQgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnNvdXJj
ZSkKK3sKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworCisgICAgaWYgKHNvdXJjZSAmJiBkZXN0
KQorICAgIHsKKyAgICAgICAgVGV4dHVyZVN0b3JhZ2U5XzJEICpzb3VyY2U5ID0gVGV4dHVyZVN0
b3JhZ2U5XzJEOjptYWtlVGV4dHVyZVN0b3JhZ2U5XzJEKHNvdXJjZS0+Z2V0U3RvcmFnZUluc3Rh
bmNlKCkpOworICAgICAgICBUZXh0dXJlU3RvcmFnZTlfMkQgKmRlc3Q5ID0gVGV4dHVyZVN0b3Jh
Z2U5XzJEOjptYWtlVGV4dHVyZVN0b3JhZ2U5XzJEKGRlc3QtPmdldFN0b3JhZ2VJbnN0YW5jZSgp
KTsKKworICAgICAgICBpbnQgbGV2ZWxzID0gc291cmNlOS0+bGV2ZWxDb3VudCgpOworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGxldmVsczsgKytpKQorICAgICAgICB7CisgICAgICAgICAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqc3JjU3VyZiA9IHNvdXJjZTktPmdldFN1cmZhY2VMZXZlbChp
LCBmYWxzZSk7CisgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZHN0U3VyZiA9IGRlc3Q5
LT5nZXRTdXJmYWNlTGV2ZWwoaSwgZmFsc2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICBy
ZXN1bHQgPSBjb3B5VG9SZW5kZXJUYXJnZXQoZHN0U3VyZiwgc3JjU3VyZiwgc291cmNlOS0+aXNN
YW5hZ2VkKCkpOworCisgICAgICAgICAgICBpZiAoc3JjU3VyZikgc3JjU3VyZi0+UmVsZWFzZSgp
OworICAgICAgICAgICAgaWYgKGRzdFN1cmYpIGRzdFN1cmYtPlJlbGVhc2UoKTsKKworICAgICAg
ICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBSZW5kZXJlcjk6OmNv
cHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKmRlc3QsIFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc291cmNlKQoreworICAgIGJvb2wgcmVzdWx0ID0gZmFs
c2U7CisKKyAgICBpZiAoc291cmNlICYmIGRlc3QpCisgICAgeworICAgICAgICBUZXh0dXJlU3Rv
cmFnZTlfQ3ViZSAqc291cmNlOSA9IFRleHR1cmVTdG9yYWdlOV9DdWJlOjptYWtlVGV4dHVyZVN0
b3JhZ2U5X0N1YmUoc291cmNlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CisgICAgICAgIFRleHR1
cmVTdG9yYWdlOV9DdWJlICpkZXN0OSA9IFRleHR1cmVTdG9yYWdlOV9DdWJlOjptYWtlVGV4dHVy
ZVN0b3JhZ2U5X0N1YmUoZGVzdC0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAgICAgICBpbnQg
bGV2ZWxzID0gc291cmNlOS0+bGV2ZWxDb3VudCgpOworICAgICAgICBmb3IgKGludCBmID0gMDsg
ZiA8IDY7IGYrKykKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBs
ZXZlbHM7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqc3JjU3VyZiA9IHNvdXJjZTktPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWCArIGYsIGksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqZHN0U3VyZiA9IGRlc3Q5LT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmLCBpLCB0cnVlKTsKKworICAgICAgICAgICAgICAgIHJl
c3VsdCA9IGNvcHlUb1JlbmRlclRhcmdldChkc3RTdXJmLCBzcmNTdXJmLCBzb3VyY2U5LT5pc01h
bmFnZWQoKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoc3JjU3VyZikgc3JjU3VyZi0+UmVsZWFz
ZSgpOworICAgICAgICAgICAgICAgIGlmIChkc3RTdXJmKSBkc3RTdXJmLT5SZWxlYXNlKCk7CisK
KyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworRDNEUE9PTCBSZW5kZXJlcjk6OmdldEJ1ZmZlclBvb2woRFdPUkQgdXNhZ2Up
IGNvbnN0Cit7CisgICAgaWYgKG1EM2Q5RXggIT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVy
biBEM0RQT09MX0RFRkFVTFQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmICgh
KHVzYWdlICYgRDNEVVNBR0VfRFlOQU1JQykpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBEM0RQT09MX01BTkFHRUQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gRDNEUE9P
TF9ERUZBVUxUOworfQorCitib29sIFJlbmRlcmVyOTo6Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmZl
ciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBk
ZXN0Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBHTGludCBsZXZl
bCkKK3sKKyAgICBSRUNUIHJlY3Q7CisgICAgcmVjdC5sZWZ0ID0gc291cmNlUmVjdC54OworICAg
IHJlY3QudG9wID0gc291cmNlUmVjdC55OworICAgIHJlY3QucmlnaHQgPSBzb3VyY2VSZWN0Lngg
KyBzb3VyY2VSZWN0LndpZHRoOworICAgIHJlY3QuYm90dG9tID0gc291cmNlUmVjdC55ICsgc291
cmNlUmVjdC5oZWlnaHQ7CisKKyAgICByZXR1cm4gbUJsaXQtPmNvcHkoZnJhbWVidWZmZXIsIHJl
Y3QsIGRlc3RGb3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQsIHN0b3JhZ2UsIGxldmVsKTsKK30KKwor
Ym9vbCBSZW5kZXJlcjk6OmNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBj
b25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCkKK3sKKyAgICBSRUNUIHJlY3Q7CisgICAgcmVjdC5sZWZ0ID0gc291cmNlUmVjdC54OworICAg
IHJlY3QudG9wID0gc291cmNlUmVjdC55OworICAgIHJlY3QucmlnaHQgPSBzb3VyY2VSZWN0Lngg
KyBzb3VyY2VSZWN0LndpZHRoOworICAgIHJlY3QuYm90dG9tID0gc291cmNlUmVjdC55ICsgc291
cmNlUmVjdC5oZWlnaHQ7CisKKyAgICByZXR1cm4gbUJsaXQtPmNvcHkoZnJhbWVidWZmZXIsIHJl
Y3QsIGRlc3RGb3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQsIHN0b3JhZ2UsIHRhcmdldCwgbGV2ZWwp
OworfQorCitib29sIFJlbmRlcmVyOTo6YmxpdFJlY3QoZ2w6OkZyYW1lYnVmZmVyICpyZWFkRnJh
bWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRSZWN0LCBnbDo6RnJhbWVidWZmZXIg
KmRyYXdGcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0LCBib29sIGJsaXREZXB0aFN0
ZW5jaWwpCit7CisgICAgZW5kU2NlbmUoKTsKKworICAgIGlmIChibGl0UmVuZGVyVGFyZ2V0KQor
ICAgIHsKKyAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVhZEJ1ZmZlciA9IHJlYWRGcmFtZWJ1
ZmZlci0+Z2V0Q29sb3JidWZmZXIoMCk7CisgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmRyYXdC
dWZmZXIgPSBkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKDApOworICAgICAgICBSZW5k
ZXJUYXJnZXQ5ICpyZWFkUmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICAgICAgUmVuZGVyVGFyZ2V0
OSAqZHJhd1JlbmRlclRhcmdldCA9IE5VTEw7CisgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5KiBy
ZWFkU3VyZmFjZSA9IE5VTEw7CisgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5KiBkcmF3U3VyZmFj
ZSA9IE5VTEw7CisKKyAgICAgICAgaWYgKHJlYWRCdWZmZXIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJlYWRSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShy
ZWFkQnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRy
YXdCdWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRyYXdSZW5kZXJUYXJnZXQgPSBSZW5k
ZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShkcmF3QnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQo
KSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVhZFJlbmRlclRhcmdldCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmVhZFN1cmZhY2UgPSByZWFkUmVuZGVyVGFyZ2V0LT5nZXRTdXJmYWNl
KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRyYXdSZW5kZXJUYXJnZXQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGRyYXdTdXJmYWNlID0gZHJhd1JlbmRlclRhcmdldC0+Z2V0U3VyZmFjZSgp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFyZWFkU3VyZmFjZSB8fCAhZHJhd1N1cmZhY2Up
CisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5k
ZXIgdGFyZ2V0LiIpOworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBSRUNUIHNyY1JlY3Q7CisgICAgICAg
IHNyY1JlY3QubGVmdCA9IHJlYWRSZWN0Lng7CisgICAgICAgIHNyY1JlY3QucmlnaHQgPSByZWFk
UmVjdC54ICsgcmVhZFJlY3Qud2lkdGg7CisgICAgICAgIHNyY1JlY3QudG9wID0gcmVhZFJlY3Qu
eTsKKyAgICAgICAgc3JjUmVjdC5ib3R0b20gPSByZWFkUmVjdC55ICsgcmVhZFJlY3QuaGVpZ2h0
OworCisgICAgICAgIFJFQ1QgZHN0UmVjdDsKKyAgICAgICAgZHN0UmVjdC5sZWZ0ID0gZHJhd1Jl
Y3QueDsKKyAgICAgICAgZHN0UmVjdC5yaWdodCA9IGRyYXdSZWN0LnggKyBkcmF3UmVjdC53aWR0
aDsKKyAgICAgICAgZHN0UmVjdC50b3AgPSBkcmF3UmVjdC55OworICAgICAgICBkc3RSZWN0LmJv
dHRvbSA9IGRyYXdSZWN0LnkgKyBkcmF3UmVjdC5oZWlnaHQ7CisKKyAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBtRGV2aWNlLT5TdHJldGNoUmVjdChyZWFkU3VyZmFjZSwgJnNyY1JlY3QsIGRyYXdT
dXJmYWNlLCAmZHN0UmVjdCwgRDNEVEVYRl9OT05FKTsKKworICAgICAgICByZWFkU3VyZmFjZS0+
UmVsZWFzZSgpOworICAgICAgICBkcmF3U3VyZmFjZS0+UmVsZWFzZSgpOworCisgICAgICAgIGlm
IChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJCbGl0RnJhbWVi
dWZmZXJBTkdMRSBmYWlsZWQ6IFN0cmV0Y2hSZWN0IHJldHVybmVkICV4LiIsIHJlc3VsdCk7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYmxp
dERlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlYWRCdWZm
ZXIgPSByZWFkRnJhbWVidWZmZXItPmdldERlcHRoT3JTdGVuY2lsYnVmZmVyKCk7CisgICAgICAg
IGdsOjpSZW5kZXJidWZmZXIgKmRyYXdCdWZmZXIgPSBkcmF3RnJhbWVidWZmZXItPmdldERlcHRo
T3JTdGVuY2lsYnVmZmVyKCk7CisgICAgICAgIFJlbmRlclRhcmdldDkgKnJlYWREZXB0aFN0ZW5j
aWwgPSBOVUxMOworICAgICAgICBSZW5kZXJUYXJnZXQ5ICpkcmF3RGVwdGhTdGVuY2lsID0gTlVM
TDsKKyAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkqIHJlYWRTdXJmYWNlID0gTlVMTDsKKyAgICAg
ICAgSURpcmVjdDNEU3VyZmFjZTkqIGRyYXdTdXJmYWNlID0gTlVMTDsKKworICAgICAgICBpZiAo
cmVhZEJ1ZmZlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmVhZERlcHRoU3RlbmNpbCA9IFJl
bmRlclRhcmdldDk6Om1ha2VSZW5kZXJUYXJnZXQ5KHJlYWRCdWZmZXItPmdldERlcHRoU3RlbmNp
bCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZHJhd0J1ZmZlcikKKyAgICAgICAgeworICAg
ICAgICAgICAgZHJhd0RlcHRoU3RlbmNpbCA9IFJlbmRlclRhcmdldDk6Om1ha2VSZW5kZXJUYXJn
ZXQ5KGRyYXdCdWZmZXItPmdldERlcHRoU3RlbmNpbCgpKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChyZWFkRGVwdGhTdGVuY2lsKQorICAgICAgICB7CisgICAgICAgICAgICByZWFkU3VyZmFj
ZSA9IHJlYWREZXB0aFN0ZW5jaWwtPmdldFN1cmZhY2UoKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoZHJhd0RlcHRoU3RlbmNpbCkKKyAgICAgICAgeworICAgICAgICAgICAgZHJhd1N1cmZhY2Ug
PSBkcmF3RGVwdGhTdGVuY2lsLT5nZXRTdXJmYWNlKCk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIXJlYWRTdXJmYWNlIHx8ICFkcmF3U3VyZmFjZSkKKyAgICAgICAgeworICAgICAgICAgICAg
RVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQuIik7CisgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICAgICAgfQor
CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+U3RyZXRjaFJlY3QocmVhZFN1cmZh
Y2UsIE5VTEwsIGRyYXdTdXJmYWNlLCBOVUxMLCBEM0RURVhGX05PTkUpOworCisgICAgICAgIHJl
YWRTdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIGRyYXdTdXJmYWNlLT5SZWxlYXNlKCk7CisK
KyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIo
IkJsaXRGcmFtZWJ1ZmZlckFOR0xFIGZhaWxlZDogU3RyZXRjaFJlY3QgcmV0dXJuZWQgJXguIiwg
cmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFJlbmRlcmVyOTo6cmVhZFBpeGVscyhnbDo6RnJh
bWVidWZmZXIgKmZyYW1lYnVmZmVyLCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xzaXplaSBvdXRwdXRQaXRjaCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09y
ZGVyLCBHTGludCBwYWNrQWxpZ25tZW50LCB2b2lkKiBwaXhlbHMpCit7CisgICAgUmVuZGVyVGFy
Z2V0OSAqcmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFj
ZSA9IE5VTEw7CisgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBmcmFtZWJ1ZmZl
ci0+Z2V0Q29sb3JidWZmZXIoMCk7CisKKyAgICBpZiAoY29sb3JidWZmZXIpCisgICAgeworICAg
ICAgICByZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShjb2xv
cmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOworICAgIH0KKyAgICAKKyAgICBpZiAocmVuZGVy
VGFyZ2V0KQorICAgIHsKKyAgICAgICAgc3VyZmFjZSA9IHJlbmRlclRhcmdldC0+Z2V0U3VyZmFj
ZSgpOworICAgIH0KKworICAgIGlmICghc3VyZmFjZSkKKyAgICB7CisgICAgICAgIC8vIGNvbnRl
eHQgbXVzdCBiZSBsb3N0CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBEM0RTVVJGQUNF
X0RFU0MgZGVzYzsKKyAgICBzdXJmYWNlLT5HZXREZXNjKCZkZXNjKTsKKworICAgIGlmIChkZXNj
Lk11bHRpU2FtcGxlVHlwZSAhPSBEM0RNVUxUSVNBTVBMRV9OT05FKQorICAgIHsKKyAgICAgICAg
VU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FOiBSZXF1aXJlcyByZXNvbHZlIHVzaW5nIFN0cmV0
Y2hSZWN0IGludG8gbm9uLW11bHRpc2FtcGxlZCByZW5kZXIgdGFyZ2V0CisgICAgICAgIHN1cmZh
Y2UtPlJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICB9CisKKyAgICBIUkVTVUxUIHJlc3VsdDsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAq
c3lzdGVtU3VyZmFjZSA9IE5VTEw7CisgICAgYm9vbCBkaXJlY3RUb1BpeGVscyA9ICFwYWNrUmV2
ZXJzZVJvd09yZGVyICYmIHBhY2tBbGlnbm1lbnQgPD0gNCAmJiBnZXRTaGFyZUhhbmRsZVN1cHBv
cnQoKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICB4ID09IDAgJiYgeSA9PSAwICYmIFVJ
TlQod2lkdGgpID09IGRlc2MuV2lkdGggJiYgVUlOVChoZWlnaHQpID09IGRlc2MuSGVpZ2h0ICYm
CisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MuRm9ybWF0ID09IEQzREZNVF9BOFI4RzhC
OCAmJiBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFOwor
ICAgIGlmIChkaXJlY3RUb1BpeGVscykKKyAgICB7CisgICAgICAgIC8vIFVzZSB0aGUgcGl4ZWxz
IHB0ciBhcyBhIHNoYXJlZCBoYW5kbGUgdG8gd3JpdGUgZGlyZWN0bHkgaW50byBjbGllbnQncyBt
ZW1vcnkKKyAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJm
YWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBkZXNjLkZvcm1hdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFBPT0xfU1lTVEVNTUVN
LCAmc3lzdGVtU3VyZmFjZSwgJnBpeGVscyk7CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
KyAgICAgICAgeworICAgICAgICAgICAgLy8gVHJ5IGFnYWluIHdpdGhvdXQgdGhlIHNoYXJlZCBo
YW5kbGUKKyAgICAgICAgICAgIGRpcmVjdFRvUGl4ZWxzID0gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAoIWRpcmVjdFRvUGl4ZWxzKQorICAgIHsKKyAgICAgICAgcmVzdWx0ID0g
bURldmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVp
Z2h0LCBkZXNjLkZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEQzRFBPT0xfU1lTVEVNTUVNLCAmc3lzdGVtU3VyZmFjZSwgTlVMTCk7
CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRP
Rk1FTU9SWSk7CisgICAgICAgICAgICBzdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmVzdWx0ID0gbURldmljZS0+R2V0UmVuZGVyVGFyZ2V0RGF0YShzdXJmYWNlLCBzeXN0ZW1T
dXJmYWNlKTsKKyAgICBzdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgc3VyZmFjZSA9IE5VTEw7CisK
KyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBzeXN0ZW1TdXJmYWNlLT5S
ZWxlYXNlKCk7CisKKyAgICAgICAgLy8gSXQgdHVybnMgb3V0IHRoYXQgRDNEIHdpbGwgc29tZXRp
bWVzIHByb2R1Y2UgbW9yZSBlcnJvcgorICAgICAgICAvLyBjb2RlcyB0aGFuIHRob3NlIGRvY3Vt
ZW50ZWQuCisgICAgICAgIGlmIChkM2Q5Ojppc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQorICAg
ICAgICB7CisgICAgICAgICAgICBub3RpZnlEZXZpY2VMb3N0KCk7CisgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgfQorCisgICAgaWYgKGRpcmVjdFRvUGl4ZWxzKQorICAgIHsK
KyAgICAgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgUkVDVCByZWN0OworICAgIHJlY3QubGVmdCA9IGdsOjpjbGFtcCh4LCAwTCwgc3Rh
dGljX2Nhc3Q8TE9ORz4oZGVzYy5XaWR0aCkpOworICAgIHJlY3QudG9wID0gZ2w6OmNsYW1wKHks
IDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNjLkhlaWdodCkpOworICAgIHJlY3QucmlnaHQgPSBn
bDo6Y2xhbXAoeCArIHdpZHRoLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVzYy5XaWR0aCkpOwor
ICAgIHJlY3QuYm90dG9tID0gZ2w6OmNsYW1wKHkgKyBoZWlnaHQsIDBMLCBzdGF0aWNfY2FzdDxM
T05HPihkZXNjLkhlaWdodCkpOworCisgICAgRDNETE9DS0VEX1JFQ1QgbG9jazsKKyAgICByZXN1
bHQgPSBzeXN0ZW1TdXJmYWNlLT5Mb2NrUmVjdCgmbG9jaywgJnJlY3QsIEQzRExPQ0tfUkVBRE9O
TFkpOworCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOworCisgICAgICAgIHJldHVy
bjsgICAvLyBObyBzZW5zaWJsZSBlcnJvciB0byBnZW5lcmF0ZQorICAgIH0KKworICAgIHVuc2ln
bmVkIGNoYXIgKmRlc3QgPSAodW5zaWduZWQgY2hhciopcGl4ZWxzOworICAgIHVuc2lnbmVkIHNo
b3J0ICpkZXN0MTYgPSAodW5zaWduZWQgc2hvcnQqKXBpeGVsczsKKworICAgIHVuc2lnbmVkIGNo
YXIgKnNvdXJjZTsKKyAgICBpbnQgaW5wdXRQaXRjaDsKKyAgICBpZiAocGFja1JldmVyc2VSb3dP
cmRlcikKKyAgICB7CisgICAgICAgIHNvdXJjZSA9ICgodW5zaWduZWQgY2hhciopbG9jay5wQml0
cykgKyBsb2NrLlBpdGNoICogKHJlY3QuYm90dG9tIC0gcmVjdC50b3AgLSAxKTsKKyAgICAgICAg
aW5wdXRQaXRjaCA9IC1sb2NrLlBpdGNoOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICBzb3VyY2UgPSAodW5zaWduZWQgY2hhciopbG9jay5wQml0czsKKyAgICAgICAgaW5wdXRQaXRj
aCA9IGxvY2suUGl0Y2g7CisgICAgfQorCisgICAgdW5zaWduZWQgaW50IGZhc3RQaXhlbFNpemUg
PSAwOworCisgICAgaWYgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BOFI4RzhCOCAmJgorICAgICAg
ICBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYKKyAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9C
WVRFKQorICAgIHsKKyAgICAgICAgZmFzdFBpeGVsU2l6ZSA9IDQ7CisgICAgfQorICAgIGVsc2Ug
aWYgKChkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQTRSNEc0QjQgJiYKKyAgICAgICAgICAgICBmb3Jt
YXQgPT0gR0xfQkdSQV9FWFQgJiYKKyAgICAgICAgICAgICB0eXBlID09IEdMX1VOU0lHTkVEX1NI
T1JUXzRfNF80XzRfUkVWX0VYVCkgfHwKKyAgICAgICAgICAgICAoZGVzYy5Gb3JtYXQgPT0gRDNE
Rk1UX0ExUjVHNUI1ICYmCisgICAgICAgICAgICAgZm9ybWF0ID09IEdMX0JHUkFfRVhUICYmCisg
ICAgICAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQpKQor
ICAgIHsKKyAgICAgICAgZmFzdFBpeGVsU2l6ZSA9IDI7CisgICAgfQorICAgIGVsc2UgaWYgKGRl
c2MuRm9ybWF0ID09IEQzREZNVF9BMTZCMTZHMTZSMTZGICYmCisgICAgICAgICAgICAgZm9ybWF0
ID09IEdMX1JHQkEgJiYKKyAgICAgICAgICAgICB0eXBlID09IEdMX0hBTEZfRkxPQVRfT0VTKQor
ICAgIHsKKyAgICAgICAgZmFzdFBpeGVsU2l6ZSA9IDg7CisgICAgfQorICAgIGVsc2UgaWYgKGRl
c2MuRm9ybWF0ID09IEQzREZNVF9BMzJCMzJHMzJSMzJGICYmCisgICAgICAgICAgICAgZm9ybWF0
ID09IEdMX1JHQkEgJiYKKyAgICAgICAgICAgICB0eXBlID09IEdMX0ZMT0FUKQorICAgIHsKKyAg
ICAgICAgZmFzdFBpeGVsU2l6ZSA9IDE2OworICAgIH0KKworICAgIGZvciAoaW50IGogPSAwOyBq
IDwgcmVjdC5ib3R0b20gLSByZWN0LnRvcDsgaisrKQorICAgIHsKKyAgICAgICAgaWYgKGZhc3RQ
aXhlbFNpemUgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRmFzdCBwYXRoIGZvciBm
b3JtYXRzIHdoaWNoIHJlcXVpcmUgbm8gdHJhbnNsYXRpb246CisgICAgICAgICAgICAvLyBEM0RG
TVRfQThSOEc4QjggdG8gQkdSQS9VTlNJR05FRF9CWVRFCisgICAgICAgICAgICAvLyBEM0RGTVRf
QTRSNEc0QjQgdG8gQkdSQS9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQKKyAgICAgICAg
ICAgIC8vIEQzREZNVF9BMVI1RzVCNSB0byBCR1JBL1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVW
X0VYVAorICAgICAgICAgICAgLy8gRDNERk1UX0ExNkIxNkcxNlIxNkYgdG8gUkdCQS9IQUxGX0ZM
T0FUX09FUworICAgICAgICAgICAgLy8gRDNERk1UX0EzMkIzMkczMlIzMkYgdG8gUkdCQS9GTE9B
VAorICAgICAgICAgICAgLy8gCisgICAgICAgICAgICAvLyBOb3RlIHRoYXQgYnVmZmVycyB3aXRo
IG5vIGFscGhhIGdvIHRocm91Z2ggdGhlIHNsb3cgcGF0aCBiZWxvdy4KKyAgICAgICAgICAgIG1l
bWNweShkZXN0ICsgaiAqIG91dHB1dFBpdGNoLAorICAgICAgICAgICAgICAgICAgIHNvdXJjZSAr
IGogKiBpbnB1dFBpdGNoLAorICAgICAgICAgICAgICAgICAgIChyZWN0LnJpZ2h0IC0gcmVjdC5s
ZWZ0KSAqIGZhc3RQaXhlbFNpemUpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSBpZiAoZGVzYy5Gb3JtYXQgPT0gRDNERk1UX0E4UjhHOEI4ICYmCisgICAg
ICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9SR0JBICYmCisgICAgICAgICAgICAgICAgIHR5cGUg
PT0gR0xfVU5TSUdORURfQllURSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRmFzdCBwYXRo
IGZvciBzd2FwcGluZyByZWQgd2l0aCBibHVlCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHJlY3QucmlnaHQgLSByZWN0LmxlZnQ7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAq
IGkgKyBqICogaW5wdXRQaXRjaCk7CisgICAgICAgICAgICAgICAgKih1bnNpZ25lZCBpbnQqKShk
ZXN0ICsgNCAqIGkgKyBqICogb3V0cHV0UGl0Y2gpID0KKyAgICAgICAgICAgICAgICAgICAgKGFy
Z2IgJiAweEZGMDBGRjAwKSB8ICAgICAgIC8vIEtlZXAgYWxwaGEgYW5kIGdyZWVuCisgICAgICAg
ICAgICAgICAgICAgIChhcmdiICYgMHgwMEZGMDAwMCkgPj4gMTYgfCAvLyBNb3ZlIHJlZCB0byBi
bHVlCisgICAgICAgICAgICAgICAgICAgIChhcmdiICYgMHgwMDAwMDBGRikgPDwgMTY7ICAvLyBN
b3ZlIGJsdWUgdG8gcmVkCisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdC5yaWdodCAtIHJlY3Qu
bGVmdDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBmbG9hdCByOworICAgICAgICAgICAg
ZmxvYXQgZzsKKyAgICAgICAgICAgIGZsb2F0IGI7CisgICAgICAgICAgICBmbG9hdCBhOworCisg
ICAgICAgICAgICBzd2l0Y2ggKGRlc2MuRm9ybWF0KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICBjYXNlIEQzREZNVF9SNUc2QjU6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2IgPSAqKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsg
MiAqIGkgKyBqICogaW5wdXRQaXRjaCk7CisKKyAgICAgICAgICAgICAgICAgICAgYSA9IDEuMGY7
CisgICAgICAgICAgICAgICAgICAgIGIgPSAocmdiICYgMHgwMDFGKSAqICgxLjBmIC8gMHgwMDFG
KTsKKyAgICAgICAgICAgICAgICAgICAgZyA9IChyZ2IgJiAweDA3RTApICogKDEuMGYgLyAweDA3
RTApOworICAgICAgICAgICAgICAgICAgICByID0gKHJnYiAmIDB4RjgwMCkgKiAoMS4wZiAvIDB4
RjgwMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGFyZ2IgPSAqKHVuc2lnbmVkIHNob3J0Kikoc291
cmNlICsgMiAqIGkgKyBqICogaW5wdXRQaXRjaCk7CisKKyAgICAgICAgICAgICAgICAgICAgYSA9
IChhcmdiICYgMHg4MDAwKSA/IDEuMGYgOiAwLjBmOworICAgICAgICAgICAgICAgICAgICBiID0g
KGFyZ2IgJiAweDAwMUYpICogKDEuMGYgLyAweDAwMUYpOworICAgICAgICAgICAgICAgICAgICBn
ID0gKGFyZ2IgJiAweDAzRTApICogKDEuMGYgLyAweDAzRTApOworICAgICAgICAgICAgICAgICAg
ICByID0gKGFyZ2IgJiAweDdDMDApICogKDEuMGYgLyAweDdDMDApOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQThS
OEc4Qjg6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRj
aCk7CisKKyAgICAgICAgICAgICAgICAgICAgYSA9IChhcmdiICYgMHhGRjAwMDAwMCkgKiAoMS4w
ZiAvIDB4RkYwMDAwMDApOworICAgICAgICAgICAgICAgICAgICBiID0gKGFyZ2IgJiAweDAwMDAw
MEZGKSAqICgxLjBmIC8gMHgwMDAwMDBGRik7CisgICAgICAgICAgICAgICAgICAgIGcgPSAoYXJn
YiAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAweDAwMDBGRjAwKTsKKyAgICAgICAgICAgICAgICAg
ICAgciA9IChhcmdiICYgMHgwMEZGMDAwMCkgKiAoMS4wZiAvIDB4MDBGRjAwMDApOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBE
M0RGTVRfWDhSOEc4Qjg6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgeHJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICog
aW5wdXRQaXRjaCk7CisKKyAgICAgICAgICAgICAgICAgICAgYSA9IDEuMGY7CisgICAgICAgICAg
ICAgICAgICAgIGIgPSAoeHJnYiAmIDB4MDAwMDAwRkYpICogKDEuMGYgLyAweDAwMDAwMEZGKTsK
KyAgICAgICAgICAgICAgICAgICAgZyA9ICh4cmdiICYgMHgwMDAwRkYwMCkgKiAoMS4wZiAvIDB4
MDAwMEZGMDApOworICAgICAgICAgICAgICAgICAgICByID0gKHhyZ2IgJiAweDAwRkYwMDAwKSAq
ICgxLjBmIC8gMHgwMEZGMDAwMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMlIxMEcxMEIxMDoKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdiID0gKih1bnNp
Z25lZCBpbnQqKShzb3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBpdGNoKTsKKworICAgICAgICAg
ICAgICAgICAgICBhID0gKGFyZ2IgJiAweEMwMDAwMDAwKSAqICgxLjBmIC8gMHhDMDAwMDAwMCk7
CisgICAgICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAwMDAzRkYpICogKDEuMGYgLyAw
eDAwMDAwM0ZGKTsKKyAgICAgICAgICAgICAgICAgICAgZyA9IChhcmdiICYgMHgwMDBGRkMwMCkg
KiAoMS4wZiAvIDB4MDAwRkZDMDApOworICAgICAgICAgICAgICAgICAgICByID0gKGFyZ2IgJiAw
eDNGRjAwMDAwKSAqICgxLjBmIC8gMHgzRkYwMDAwMCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJS
MzJGOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gZmxvYXQgZm9y
bWF0cyBpbiBEM0QgYXJlIHN0b3JlZCByZ2JhLCByYXRoZXIgdGhhbiB0aGUgb3RoZXIgd2F5IHJv
dW5kCisgICAgICAgICAgICAgICAgICAgIHIgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSAr
IGogKiBpbnB1dFBpdGNoKSArIDApOworICAgICAgICAgICAgICAgICAgICBnID0gKigoZmxvYXQq
KShzb3VyY2UgKyAxNiAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAxKTsKKyAgICAgICAgICAgICAg
ICAgICAgYiA9ICooKGZsb2F0Kikoc291cmNlICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gpICsg
Mik7CisgICAgICAgICAgICAgICAgICAgIGEgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSAr
IGogKiBpbnB1dFBpdGNoKSArIDMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0IGZvcm1hdHMgaW4gRDNE
IGFyZSBzdG9yZWQgcmdiYSwgcmF0aGVyIHRoYW4gdGhlIG90aGVyIHdheSByb3VuZAorICAgICAg
ICAgICAgICAgICAgICByID0gZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKigodW5zaWduZWQgc2hvcnQq
KShzb3VyY2UgKyA4ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDApKTsKKyAgICAgICAgICAgICAg
ICAgICAgZyA9IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCooKHVuc2lnbmVkIHNob3J0Kikoc291cmNl
ICsgOCAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAxKSk7CisgICAgICAgICAgICAgICAgICAgIGIg
PSBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKCh1bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDggKiBp
ICsgaiAqIGlucHV0UGl0Y2gpICsgMikpOworICAgICAgICAgICAgICAgICAgICBhID0gZ2w6OmZs
b2F0MTZUb0Zsb2F0MzIoKigodW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyA4ICogaSArIGogKiBp
bnB1dFBpdGNoKSArIDMpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5JTVBMRU1FTlRF
RCgpOyAgIC8vIEZJWE1FCisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAoZm9y
bWF0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAg
ICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICog
aSArIGogKiBvdXRwdXRQaXRjaCArIDBdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIHIgKyAwLjVm
KTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDFd
ID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGcgKyAwLjVmKTsKKyAgICAgICAgICAgICAgICAgICAg
ZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDJdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAq
IGIgKyAwLjVmKTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQ
aXRjaCArIDNdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGEgKyAwLjVmKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9CR1JBX0VYVDoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgor
ICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMF0gPSAo
dW5zaWduZWQgY2hhcikoMjU1ICogYiArIDAuNWYpOworICAgICAgICAgICAgICAgICAgICBkZXN0
WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMV0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogZyAr
IDAuNWYpOworICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNo
ICsgMl0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogciArIDAuNWYpOworICAgICAgICAgICAgICAg
ICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgM10gPSAodW5zaWduZWQgY2hhciko
MjU1ICogYSArIDAuNWYpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhUOgorICAgICAgICAg
ICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIGRlc2t0b3AgR0wgc3BlYyBpbiB0aGUgIlRy
YW5zZmVyIG9mIFBpeGVsIFJlY3RhbmdsZXMiIHNlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAg
Ly8gdGhpcyB0eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAv
LyAgIDE1ICAgMTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUg
ICAgNCAgICAzICAgIDIgICAgMSAgICAwCisgICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAvLyB8ICAgICAgIDR0aCAgICAg
ICAgIHwgICAgICAgIDNyZCAgICAgICAgIHwgICAgICAgIDJuZCAgICAgICAgfCAgIDFzdCBjb21w
b25lbnQgICB8CisgICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorICAgICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgY2FzZSBvZiBCR1JBX0VYVCwgQiBpcyB0
aGUgZmlyc3QgY29tcG9uZW50LCBHIHRoZSBzZWNvbmQsIGFuZCBzbyBmb3J0aC4KKyAgICAgICAg
ICAgICAgICAgICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQg
c2hvcnQpXSA9CisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAq
IGEgKyAwLjVmKSA8PCAxMil8CisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNo
b3J0KSgxNSAqIHIgKyAwLjVmKSA8PCA4KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAoKHVu
c2lnbmVkIHNob3J0KSgxNSAqIGcgKyAwLjVmKSA8PCA0KSB8CisgICAgICAgICAgICAgICAgICAg
ICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIGIgKyAwLjVmKSA8PCAwKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JU
XzFfNV81XzVfUkVWX0VYVDoKKyAgICAgICAgICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRo
ZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhlICJUcmFuc2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBz
ZWN0aW9uCisgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgdHlwZSBpcyBwYWNrZWQgYXMgZm9s
bG93czoKKyAgICAgICAgICAgICAgICAgICAgLy8gICAxNSAgIDE0ICAgMTMgICAxMiAgIDExICAg
MTAgICAgOSAgICA4ICAgIDcgICAgNiAgICA1ICAgIDQgICAgMyAgICAyICAgIDEgICAgMAorICAg
ICAgICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAg
ICAgICAgICAgLy8gfCA0dGggfCAgICAgICAgICAzcmQgICAgICAgICAgIHwgICAgICAgICAgIDJu
ZCAgICAgICAgICB8ICAgICAgMXN0IGNvbXBvbmVudCAgICAgfAorICAgICAgICAgICAgICAgICAg
ICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgLy8gaW4g
dGhlIGNhc2Ugb2YgQkdSQV9FWFQsIEIgaXMgdGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vj
b25kLCBhbmQgc28gZm9ydGguCisgICAgICAgICAgICAgICAgICAgIGRlc3QxNltpICsgaiAqIG91
dHB1dFBpdGNoIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KV0gPQorICAgICAgICAgICAgICAgICAg
ICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoICAgICBhICsgMC41ZikgPDwgMTUpIHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogciArIDAuNWYpIDw8IDEwKSB8
CisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIGcgKyAwLjVm
KSA8PCA1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAq
IGIgKyAwLjVmKSA8PCAwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9SR0I6CisgICAgICAgICAg
ICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgICAgICAgICAgICAgICAgIGRlc3Qx
NltpICsgaiAqIG91dHB1dFBpdGNoIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KV0gPSAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogYiArIDAuNWYpIDw8IDAp
IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDYzICogZyArIDAu
NWYpIDw8IDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMx
ICogciArIDAuNWYpIDw8IDExKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgICAgICAgICAgIGRl
c3RbMyAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAwXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBy
ICsgMC41Zik7CisgICAgICAgICAgICAgICAgICAgIGRlc3RbMyAqIGkgKyBqICogb3V0cHV0UGl0
Y2ggKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBnICsgMC41Zik7CisgICAgICAgICAgICAg
ICAgICAgIGRlc3RbMyAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAyXSA9ICh1bnNpZ25lZCBjaGFy
KSgyNTUgKiBiICsgMC41Zik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzeXN0ZW1TdXJmYWNlLT5V
bmxvY2tSZWN0KCk7CisKKyAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7Cit9CisKK1JlbmRl
clRhcmdldCAqUmVuZGVyZXI5OjpjcmVhdGVSZW5kZXJUYXJnZXQoU3dhcENoYWluICpzd2FwQ2hh
aW4sIGJvb2wgZGVwdGgpCit7CisgICAgU3dhcENoYWluOSAqc3dhcENoYWluOSA9IFN3YXBDaGFp
bjk6Om1ha2VTd2FwQ2hhaW45KHN3YXBDaGFpbik7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1
cmZhY2UgPSBOVUxMOworICAgIGlmIChkZXB0aCkKKyAgICB7CisgICAgICAgIHN1cmZhY2UgPSBz
d2FwQ2hhaW45LT5nZXREZXB0aFN0ZW5jaWwoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgc3VyZmFjZSA9IHN3YXBDaGFpbjktPmdldFJlbmRlclRhcmdldCgpOworICAgIH0KKwor
ICAgIFJlbmRlclRhcmdldDkgKnJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQ5KHRoaXMs
IHN1cmZhY2UpOworCisgICAgcmV0dXJuIHJlbmRlclRhcmdldDsKK30KKworUmVuZGVyVGFyZ2V0
ICpSZW5kZXJlcjk6OmNyZWF0ZVJlbmRlclRhcmdldChpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcywgYm9vbCBkZXB0aCkKK3sKKyAgICBSZW5kZXJU
YXJnZXQ5ICpyZW5kZXJUYXJnZXQgPSBuZXcgUmVuZGVyVGFyZ2V0OSh0aGlzLCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIHNhbXBsZXMpOworICAgIHJldHVybiByZW5kZXJUYXJnZXQ7Cit9CisKK1No
YWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyOTo6bG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVu
Y3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUpCit7CisgICAgU2hhZGVy
RXhlY3V0YWJsZTkgKmV4ZWN1dGFibGUgPSBOVUxMOworCisgICAgc3dpdGNoICh0eXBlKQorICAg
IHsKKyAgICAgIGNhc2Ugcng6OlNIQURFUl9WRVJURVg6CisgICAgICAgIHsKKyAgICAgICAgICAg
IElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKnZzaGFkZXIgPSBjcmVhdGVWZXJ0ZXhTaGFkZXIoKERX
T1JEKilmdW5jdGlvbiwgbGVuZ3RoKTsKKyAgICAgICAgICAgIGlmICh2c2hhZGVyKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBuZXcgU2hhZGVyRXhlY3V0YWJs
ZTkoZnVuY3Rpb24sIGxlbmd0aCwgdnNoYWRlcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIHJ4OjpTSEFERVJfUElYRUw6CisgICAgICAgIHsK
KyAgICAgICAgICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqcHNoYWRlciA9IGNyZWF0ZVBpeGVs
U2hhZGVyKChEV09SRCopZnVuY3Rpb24sIGxlbmd0aCk7CisgICAgICAgICAgICBpZiAocHNoYWRl
cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3IFNoYWRl
ckV4ZWN1dGFibGU5KGZ1bmN0aW9uLCBsZW5ndGgsIHBzaGFkZXIpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGV4ZWN1dGFibGU7
Cit9CisKK1NoYWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyOTo6Y29tcGlsZVRvRXhlY3V0YWJsZShn
bDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqc2hhZGVySExTTCwgcng6OlNoYWRlclR5
cGUgdHlwZSwgRDNEV29ya2Fyb3VuZFR5cGUgd29ya2Fyb3VuZCkKK3sKKyAgICBjb25zdCBjaGFy
ICpwcm9maWxlID0gTlVMTDsKKworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNl
IHJ4OjpTSEFERVJfVkVSVEVYOgorICAgICAgICBwcm9maWxlID0gZ2V0TWFqb3JTaGFkZXJNb2Rl
bCgpID49IDMgPyAidnNfM18wIiA6ICJ2c18yXzAiOworICAgICAgICBicmVhazsKKyAgICAgIGNh
c2Ugcng6OlNIQURFUl9QSVhFTDoKKyAgICAgICAgcHJvZmlsZSA9IGdldE1ham9yU2hhZGVyTW9k
ZWwoKSA+PSAzID8gInBzXzNfMCIgOiAicHNfMl8wIjsKKyAgICAgICAgYnJlYWs7CisgICAgICBk
ZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAg
ICB9CisKKyAgICAvLyBBTkdMRSBpc3N1ZSA0ODY6CisgICAgLy8gV29yay1hcm91bmQgYSBEM0Q5
IGNvbXBpbGVyIGJ1ZyB0aGF0IHByZXNlbnRzIGl0c2VsZiB3aGVuIHVzaW5nIGNvbmRpdGlvbmFs
IGRpc2NhcmQsIGJ5IGRpc2FibGluZyBvcHRpbWl6YXRpb24KKyAgICBVSU5UIG9wdGltaXphdGlv
bkZsYWdzID0gKHdvcmthcm91bmQgPT0gQU5HTEVfRDNEX1dPUktBUk9VTkRfU00zX09QVElNSVpF
UiA/IEQzRENPTVBJTEVfU0tJUF9PUFRJTUlaQVRJT04gOiBBTkdMRV9DT01QSUxFX09QVElNSVpB
VElPTl9MRVZFTCk7CisKKyAgICBJRDNEQmxvYiAqYmluYXJ5ID0gKElEM0RCbG9iKiljb21waWxl
VG9CaW5hcnkoaW5mb0xvZywgc2hhZGVySExTTCwgcHJvZmlsZSwgb3B0aW1pemF0aW9uRmxhZ3Ms
IHRydWUpOworICAgIGlmICghYmluYXJ5KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFNo
YWRlckV4ZWN1dGFibGUgKmV4ZWN1dGFibGUgPSBsb2FkRXhlY3V0YWJsZShiaW5hcnktPkdldEJ1
ZmZlclBvaW50ZXIoKSwgYmluYXJ5LT5HZXRCdWZmZXJTaXplKCksIHR5cGUpOworICAgIGJpbmFy
eS0+UmVsZWFzZSgpOworCisgICAgcmV0dXJuIGV4ZWN1dGFibGU7Cit9CisKK2Jvb2wgUmVuZGVy
ZXI5Ojpib3hGaWx0ZXIoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgSURpcmVjdDNEU3VyZmFj
ZTkgKmRlc3QpCit7CisgICAgcmV0dXJuIG1CbGl0LT5ib3hGaWx0ZXIoc291cmNlLCBkZXN0KTsK
K30KKworRDNEUE9PTCBSZW5kZXJlcjk6OmdldFRleHR1cmVQb29sKERXT1JEIHVzYWdlKSBjb25z
dAoreworICAgIGlmIChtRDNkOUV4ICE9IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4gRDNE
UE9PTF9ERUZBVUxUOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoISh1c2Fn
ZSAmIChEM0RVU0FHRV9ERVBUSFNURU5DSUwgfCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQpKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEQzRFBPT0xfTUFOQUdFRDsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiBEM0RQT09MX0RFRkFVTFQ7Cit9CisKK2Jvb2wgUmVuZGVyZXI5
Ojpjb3B5VG9SZW5kZXJUYXJnZXQoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIElEaXJlY3QzRFN1
cmZhY2U5ICpzb3VyY2UsIGJvb2wgZnJvbU1hbmFnZWQpCit7CisgICAgaWYgKHNvdXJjZSAmJiBk
ZXN0KQorICAgIHsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBEM0RFUlJfT1VUT0ZWSURFT01F
TU9SWTsKKworICAgICAgICBpZiAoZnJvbU1hbmFnZWQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IEQzRFNVUkZBQ0VfREVTQyBkZXNjOworICAgICAgICAgICAgc291cmNlLT5HZXREZXNjKCZkZXNj
KTsKKworICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmYgPSAwOworICAgICAgICAg
ICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRlc2MuV2lk
dGgsIGRlc2MuSGVpZ2h0LCBkZXNjLkZvcm1hdCwgRDNEUE9PTF9TWVNURU1NRU0sICZzdXJmLCBO
VUxMKTsKKworICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIEltYWdlOTo6Y29weUxvY2thYmxlU3VyZmFjZXMoc3VyZiwgc291
cmNlKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5VcGRhdGVTdXJmYWNlKHN1
cmYsIE5VTEwsIGRlc3QsIE5VTEwpOworICAgICAgICAgICAgICAgIHN1cmYtPlJlbGVhc2UoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGVuZFNjZW5lKCk7CisgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5TdHJldGNo
UmVjdChzb3VyY2UsIE5VTEwsIGRlc3QsIE5VTEwsIEQzRFRFWEZfTk9ORSk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0ltYWdlICpSZW5kZXJlcjk6OmNyZWF0ZUltYWdlKCkK
K3sKKyAgICByZXR1cm4gbmV3IEltYWdlOSgpOworfQorCit2b2lkIFJlbmRlcmVyOTo6Z2VuZXJh
dGVNaXBtYXAoSW1hZ2UgKmRlc3QsIEltYWdlICpzcmMpCit7CisgICAgSW1hZ2U5ICpzcmM5ID0g
SW1hZ2U5OjptYWtlSW1hZ2U5KHNyYyk7CisgICAgSW1hZ2U5ICpkc3Q5ID0gSW1hZ2U5OjptYWtl
SW1hZ2U5KGRlc3QpOworICAgIEltYWdlOTo6Z2VuZXJhdGVNaXBtYXAoZHN0OSwgc3JjOSk7Cit9
CisKK1RleHR1cmVTdG9yYWdlICpSZW5kZXJlcjk6OmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoU3dh
cENoYWluICpzd2FwQ2hhaW4pCit7CisgICAgU3dhcENoYWluOSAqc3dhcENoYWluOSA9IFN3YXBD
aGFpbjk6Om1ha2VTd2FwQ2hhaW45KHN3YXBDaGFpbik7CisgICAgcmV0dXJuIG5ldyBUZXh0dXJl
U3RvcmFnZTlfMkQodGhpcywgc3dhcENoYWluOSk7Cit9CisKK1RleHR1cmVTdG9yYWdlICpSZW5k
ZXJlcjk6OmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywgR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlOV8yRCh0
aGlzLCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlLCB3aWR0
aCwgaGVpZ2h0KTsKK30KKworVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyOTo6Y3JlYXRlVGV4dHVy
ZVN0b3JhZ2VDdWJlKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVz
YWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpCit7CisgICAgcmV0dXJuIG5ldyBU
ZXh0dXJlU3RvcmFnZTlfQ3ViZSh0aGlzLCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB1c2FnZSwg
Zm9yY2VSZW5kZXJhYmxlLCBzaXplKTsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldExVSUQoTFVJ
RCAqYWRhcHRlckx1aWQpIGNvbnN0Cit7CisgICAgYWRhcHRlckx1aWQtPkhpZ2hQYXJ0ID0gMDsK
KyAgICBhZGFwdGVyTHVpZC0+TG93UGFydCA9IDA7CisKKyAgICBpZiAobUQzZDlFeCkKKyAgICB7
CisgICAgICAgIG1EM2Q5RXgtPkdldEFkYXB0ZXJMVUlEKG1BZGFwdGVyLCBhZGFwdGVyTHVpZCk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L1JlbmRlcmVyOS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0ZmQyYmRkODRhZWY4
NGQzMmRmMWFmNzI1NGVkMjc5MzU5NTg3NDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmgKQEAg
LTAsMCArMSwzNTYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFJlbmRlcmVyOS5oOiBEZWZp
bmVzIGEgYmFjay1lbmQgc3BlY2lmaWMgY2xhc3MgZm9yIHRoZSBEM0Q5IHJlbmRlcmVyLgorCisj
aWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjlfSF8KKyNkZWZpbmUgTElCR0xFU1Yy
X1JFTkRFUkVSX1JFTkRFUkVSOV9IXworCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvU2hhZGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9W
ZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1Jl
bmRlcmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldC5oIgor
CituYW1lc3BhY2UgZ2wKK3sKK2NsYXNzIFJlbmRlcmJ1ZmZlcjsKK30KKworbmFtZXNwYWNlIHJ4
Cit7CitjbGFzcyBWZXJ0ZXhEYXRhTWFuYWdlcjsKK2NsYXNzIEluZGV4RGF0YU1hbmFnZXI7Citj
bGFzcyBTdHJlYW1pbmdJbmRleEJ1ZmZlckludGVyZmFjZTsKK3N0cnVjdCBUcmFuc2xhdGVkQXR0
cmlidXRlOworCitjbGFzcyBSZW5kZXJlcjkgOiBwdWJsaWMgUmVuZGVyZXIKK3sKKyAgcHVibGlj
OgorICAgIFJlbmRlcmVyOShlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIEhEQyBoRGMsIGJvb2wgc29m
dHdhcmVEZXZpY2UpOworICAgIHZpcnR1YWwgflJlbmRlcmVyOSgpOworCisgICAgc3RhdGljIFJl
bmRlcmVyOSAqbWFrZVJlbmRlcmVyOShSZW5kZXJlciAqcmVuZGVyZXIpOworCisgICAgdmlydHVh
bCBFR0xpbnQgaW5pdGlhbGl6ZSgpOworICAgIHZpcnR1YWwgYm9vbCByZXNldERldmljZSgpOwor
CisgICAgdmlydHVhbCBpbnQgZ2VuZXJhdGVDb25maWdzKENvbmZpZ0Rlc2MgKipjb25maWdEZXNj
TGlzdCk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUNvbmZpZ3MoQ29uZmlnRGVzYyAqY29uZmln
RGVzY0xpc3QpOworCisgICAgdm9pZCBzdGFydFNjZW5lKCk7CisgICAgdm9pZCBlbmRTY2VuZSgp
OworCisgICAgdmlydHVhbCB2b2lkIHN5bmMoYm9vbCBibG9jayk7CisKKyAgICB2aXJ0dWFsIFN3
YXBDaGFpbiAqY3JlYXRlU3dhcENoYWluKEhXTkQgd2luZG93LCBIQU5ETEUgc2hhcmVIYW5kbGUs
IEdMZW51bSBiYWNrQnVmZmVyRm9ybWF0LCBHTGVudW0gZGVwdGhCdWZmZXJGb3JtYXQpOworCisg
ICAgSURpcmVjdDNEUXVlcnk5KiBhbGxvY2F0ZUV2ZW50UXVlcnkoKTsKKyAgICB2b2lkIGZyZWVF
dmVudFF1ZXJ5KElEaXJlY3QzRFF1ZXJ5OSogcXVlcnkpOworCisgICAgLy8gcmVzb3VyY2UgY3Jl
YXRpb24KKyAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICpjcmVhdGVWZXJ0ZXhTaGFkZXIoY29u
c3QgRFdPUkQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoKTsKKyAgICBJRGlyZWN0M0RQaXhlbFNo
YWRlcjkgKmNyZWF0ZVBpeGVsU2hhZGVyKGNvbnN0IERXT1JEICpmdW5jdGlvbiwgc2l6ZV90IGxl
bmd0aCk7CisgICAgSFJFU1VMVCBjcmVhdGVWZXJ0ZXhCdWZmZXIoVUlOVCBMZW5ndGgsIERXT1JE
IFVzYWdlLCBJRGlyZWN0M0RWZXJ0ZXhCdWZmZXI5ICoqcHBWZXJ0ZXhCdWZmZXIpOworICAgIEhS
RVNVTFQgY3JlYXRlSW5kZXhCdWZmZXIoVUlOVCBMZW5ndGgsIERXT1JEIFVzYWdlLCBEM0RGT1JN
QVQgRm9ybWF0LCBJRGlyZWN0M0RJbmRleEJ1ZmZlcjkgKipwcEluZGV4QnVmZmVyKTsKKyNpZiAw
CisgICAgdm9pZCAqY3JlYXRlVGV4dHVyZTJEKCk7CisgICAgdm9pZCAqY3JlYXRlVGV4dHVyZUN1
YmUoKTsKKyAgICB2b2lkICpjcmVhdGVRdWVyeSgpOworICAgIHZvaWQgKmNyZWF0ZUluZGV4QnVm
ZmVyKCk7CisgICAgdm9pZCAqY3JlYXRlVmVydGV4YnVmZmVyKCk7CisKKyAgICAvLyBzdGF0ZSBz
ZXR1cAorICAgIHZvaWQgYXBwbHlTaGFkZXJzKCk7CisgICAgdm9pZCBhcHBseUNvbnN0YW50cygp
OworI2VuZGlmCisgICAgdmlydHVhbCB2b2lkIHNldFNhbXBsZXJTdGF0ZShnbDo6U2FtcGxlclR5
cGUgdHlwZSwgaW50IGluZGV4LCBjb25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVyKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0VGV4dHVyZShnbDo6U2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4
LCBnbDo6VGV4dHVyZSAqdGV4dHVyZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmFzdGVyaXpl
clN0YXRlKGNvbnN0IGdsOjpSYXN0ZXJpemVyU3RhdGUgJnJhc3RlclN0YXRlKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25z
dCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNvbG9yICZibGVuZENvbG9y
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVNYXNr
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RGVwdGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6OkRlcHRo
U3RlbmNpbFN0YXRlICZkZXB0aFN0ZW5jaWxTdGF0ZSwgaW50IHN0ZW5jaWxSZWYsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGVuY2lsQmFja1JlZiwgYm9vbCBm
cm9udEZhY2VDQ1cpOworCisgICAgdmlydHVhbCB2b2lkIHNldFNjaXNzb3JSZWN0YW5nbGUoY29u
c3QgZ2w6OlJlY3RhbmdsZSAmc2Npc3NvciwgYm9vbCBlbmFibGVkKTsKKyAgICB2aXJ0dWFsIGJv
b2wgc2V0Vmlld3BvcnQoY29uc3QgZ2w6OlJlY3RhbmdsZSAmdmlld3BvcnQsIGZsb2F0IHpOZWFy
LCBmbG9hdCB6RmFyLCBHTGVudW0gZHJhd01vZGUsIEdMZW51bSBmcm9udEZhY2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaWdub3JlVmlld3BvcnQpOworCisgICAgdmlydHVh
bCBib29sIGFwcGx5UmVuZGVyVGFyZ2V0KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpOwor
ICAgIHZpcnR1YWwgdm9pZCBhcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1C
aW5hcnkpOworICAgIHZpcnR1YWwgdm9pZCBhcHBseVVuaWZvcm1zKGdsOjpQcm9ncmFtQmluYXJ5
ICpwcm9ncmFtQmluYXJ5LCBnbDo6VW5pZm9ybUFycmF5ICp1bmlmb3JtQXJyYXkpOworICAgIHZp
cnR1YWwgYm9vbCBhcHBseVByaW1pdGl2ZVR5cGUoR0xlbnVtIHByaW1pdGl2ZVR5cGUsIEdMc2l6
ZWkgZWxlbWVudENvdW50KTsKKyAgICB2aXJ0dWFsIEdMZW51bSBhcHBseVZlcnRleEJ1ZmZlcihn
bDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0
ZXhBdHRyaWJ1dGVzW10sIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3Rh
bmNlcyk7CisgICAgdmlydHVhbCBHTGVudW0gYXBwbHlJbmRleEJ1ZmZlcihjb25zdCBHTHZvaWQg
KmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgR0xzaXplaSBjb3VudCwg
R0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8p
OworCisgICAgdmlydHVhbCB2b2lkIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291
bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsZW1lbnRzKEdM
ZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRp
Y2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRl
eERhdGEgJmluZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMpOworCisgICAgdmlydHVhbCB2b2lk
IGNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBnbDo6RnJhbWVi
dWZmZXIgKmZyYW1lQnVmZmVyKTsKKworICAgIHZpcnR1YWwgdm9pZCBtYXJrQWxsU3RhdGVEaXJ0
eSgpOworCisgICAgLy8gbG9zdCBkZXZpY2UKKyAgICB2b2lkIG5vdGlmeURldmljZUxvc3QoKTsK
KyAgICB2aXJ0dWFsIGJvb2wgaXNEZXZpY2VMb3N0KCk7CisgICAgdmlydHVhbCBib29sIHRlc3RE
ZXZpY2VMb3N0KGJvb2wgbm90aWZ5KTsKKyAgICB2aXJ0dWFsIGJvb2wgdGVzdERldmljZVJlc2V0
dGFibGUoKTsKKworICAgIC8vIFJlbmRlcmVyIGNhcGFiaWxpdGllcworICAgIElEaXJlY3QzRERl
dmljZTkgKmdldERldmljZSgpIHsgcmV0dXJuIG1EZXZpY2U7IH0KKyAgICB2aXJ0dWFsIERXT1JE
IGdldEFkYXB0ZXJWZW5kb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIGdldFJl
bmRlcmVyRGVzY3JpcHRpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdVSUQgZ2V0QWRhcHRlcklk
ZW50aWZpZXIoKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBnZXRCR1JBVGV4dHVyZVN1cHBv
cnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUMVRleHR1cmVTdXBwb3J0KCk7Cisg
ICAgdmlydHVhbCBib29sIGdldERYVDNUZXh0dXJlU3VwcG9ydCgpOworICAgIHZpcnR1YWwgYm9v
bCBnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RXZlbnRRdWVy
eVN1cHBvcnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJv
b2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSk7CisgICAgdmlydHVhbCBib29sIGdldEZs
b2F0MTZUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpOwor
ICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpOworICAgIHZpcnR1
YWwgYm9vbCBnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCk7CisgICAgdmlydHVhbCB1
bnNpZ25lZCBpbnQgZ2V0TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgY29u
c3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVzZXJ2ZWRWZXJ0ZXhVbmlmb3JtVmVj
dG9ycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlc2VydmVkRnJhZ21l
bnRVbmlmb3JtVmVjdG9ycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1h
eFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQg
Z2V0TWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWdu
ZWQgaW50IGdldE1heFZhcnlpbmdWZWN0b3JzKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdl
dE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldERl
cHRoVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T2NjbHVzaW9u
UXVlcnlTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEluc3RhbmNpbmdTdXBw
b3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5
U3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgZ2V0VGV4dHVyZU1heEFuaXNvdHJv
cHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0U2hhcmVIYW5kbGVTdXBwb3J0KCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIGdldERlcml2YXRpdmVJbnN0cnVjdGlvblN1cHBvcnQoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0UG9zdFN1YkJ1ZmZlclN1cHBvcnQoKSBjb25zdDsK
KworICAgIHZpcnR1YWwgaW50IGdldE1ham9yU2hhZGVyTW9kZWwoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGZsb2F0IGdldE1heFBvaW50U2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldE1h
eFZpZXdwb3J0RGltZW5zaW9uKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVy
ZVdpZHRoKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZUhlaWdodCgpIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXQzMkJpdEluZGV4U3VwcG9ydCgpIGNvbnN0OworICAg
IERXT1JEIGdldENhcHNEZWNsVHlwZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBnZXRNaW5T
d2FwSW50ZXJ2YWwoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBnZXRNYXhTd2FwSW50ZXJ2YWwo
KSBjb25zdDsKKworICAgIHZpcnR1YWwgR0xzaXplaSBnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkg
Y29uc3Q7CisgICAgaW50IGdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKEQzREZPUk1BVCBmb3Jt
YXQsIGludCByZXF1ZXN0ZWQpIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgdW5zaWduZWQgaW50
IGdldE1heFJlbmRlclRhcmdldHMoKSBjb25zdDsKKworICAgIEQzREZPUk1BVCBDb252ZXJ0VGV4
dHVyZUludGVybmFsRm9ybWF0KEdMaW50IGludGVybmFsZm9ybWF0KTsKKworICAgIC8vIFBpeGVs
IG9wZXJhdGlvbnMKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlMkQgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnNvdXJj
ZSk7CisgICAgdmlydHVhbCBib29sIGNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZUN1YmUgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc291cmNlKTsK
KworICAgIHZpcnR1YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZl
ciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBHTGludCBsZXZlbCk7CisgICAgdmly
dHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBn
bDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpOwor
CisgICAgdmlydHVhbCBib29sIGJsaXRSZWN0KGdsOjpGcmFtZWJ1ZmZlciAqcmVhZFRhcmdldCwg
Y29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGdsOjpGcmFtZWJ1ZmZlciAqZHJhd1Rhcmdl
dCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0RGVwdGhTdGVuY2lsKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVhZFBpeGVscyhnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBHTGlu
dCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBvdXRw
dXRQaXRjaCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLCBHTGludCBwYWNrQWxpZ25tZW50LCB2
b2lkKiBwaXhlbHMpOworCisgICAgLy8gUmVuZGVyVGFyZ2V0IGNyZWF0aW9uCisgICAgdmlydHVh
bCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRlclRhcmdldChTd2FwQ2hhaW4gKnN3YXBDaGFpbiwg
Ym9vbCBkZXB0aCk7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRlclRhcmdl
dChpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcywg
Ym9vbCBkZXB0aCk7CisKKyAgICAvLyBTaGFkZXIgb3BlcmF0aW9ucworICAgIHZpcnR1YWwgU2hh
ZGVyRXhlY3V0YWJsZSAqbG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVf
dCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUpOworICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0
YWJsZSAqY29tcGlsZVRvRXhlY3V0YWJsZShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hh
ciAqc2hhZGVySExTTCwgcng6OlNoYWRlclR5cGUgdHlwZSwgRDNEV29ya2Fyb3VuZFR5cGUgd29y
a2Fyb3VuZCk7CisKKyAgICAvLyBJbWFnZSBvcGVyYXRpb25zCisgICAgdmlydHVhbCBJbWFnZSAq
Y3JlYXRlSW1hZ2UoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoSW1hZ2UgKmRl
c3QsIEltYWdlICpzb3VyY2UpOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRl
eHR1cmVTdG9yYWdlMkQoU3dhcENoYWluICpzd2FwQ2hhaW4pOworICAgIHZpcnR1YWwgVGV4dHVy
ZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywgR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRl
VGV4dHVyZVN0b3JhZ2VDdWJlKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xl
bnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpOworCisgICAgLy8gQnVm
ZmVyIGNyZWF0aW9uCisgICAgdmlydHVhbCBWZXJ0ZXhCdWZmZXIgKmNyZWF0ZVZlcnRleEJ1ZmZl
cigpOworICAgIHZpcnR1YWwgSW5kZXhCdWZmZXIgKmNyZWF0ZUluZGV4QnVmZmVyKCk7CisgICAg
dmlydHVhbCBCdWZmZXJTdG9yYWdlICpjcmVhdGVCdWZmZXJTdG9yYWdlKCk7CisKKyAgICAvLyBR
dWVyeSBhbmQgRmVuY2UgY3JlYXRpb24KKyAgICB2aXJ0dWFsIFF1ZXJ5SW1wbCAqY3JlYXRlUXVl
cnkoR0xlbnVtIHR5cGUpOworICAgIHZpcnR1YWwgRmVuY2VJbXBsICpjcmVhdGVGZW5jZSgpOwor
CisgICAgLy8gRDNEOS1yZW5kZXJlciBzcGVjaWZpYyBtZXRob2RzCisgICAgYm9vbCBib3hGaWx0
ZXIoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpOwor
CisgICAgRDNEUE9PTCBnZXRUZXh0dXJlUG9vbChEV09SRCB1c2FnZSkgY29uc3Q7CisKKyAgICB2
aXJ0dWFsIGJvb2wgZ2V0TFVJRChMVUlEICphZGFwdGVyTHVpZCkgY29uc3Q7CisKKyAgcHJpdmF0
ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyZXI5KTsKKworICAgIHZvaWQg
ZGVpbml0aWFsaXplKCk7CisKKyAgICB2b2lkIGFwcGx5VW5pZm9ybW5mdihnbDo6VW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgdm9pZCBhcHBseVVuaWZvcm1u
aXYoZ2w6OlVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMaW50ICp2KTsKKyAgICB2b2lk
IGFwcGx5VW5pZm9ybW5idihnbDo6VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xpbnQg
KnYpOworCisgICAgdm9pZCBkcmF3TGluZUxvb3AoR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUs
IGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgaW50IG1pbkluZGV4LCBnbDo6QnVmZmVyICplbGVtZW50
QXJyYXlCdWZmZXIpOworICAgIHZvaWQgZHJhd0luZGV4ZWRQb2ludHMoR0xzaXplaSBjb3VudCwg
R0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgaW50IG1pbkluZGV4LCBnbDo6QnVm
ZmVyICplbGVtZW50QXJyYXlCdWZmZXIpOworCisgICAgdm9pZCBnZXRNdWx0aVNhbXBsZVN1cHBv
cnQoRDNERk9STUFUIGZvcm1hdCwgYm9vbCAqbXVsdGlTYW1wbGVBcnJheSk7CisgICAgYm9vbCBj
b3B5VG9SZW5kZXJUYXJnZXQoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIElEaXJlY3QzRFN1cmZh
Y2U5ICpzb3VyY2UsIGJvb2wgZnJvbU1hbmFnZWQpOworICAgIGdsOjpSZW5kZXJidWZmZXIgKmdl
dE51bGxDb2xvcmJ1ZmZlcihnbDo6UmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlcik7CisKKyAgICBE
M0RQT09MIGdldEJ1ZmZlclBvb2woRFdPUkQgdXNhZ2UpIGNvbnN0OworCisgICAgSE1PRFVMRSBt
RDNkOU1vZHVsZTsKKyAgICBIREMgbURjOworCisgICAgdm9pZCBpbml0aWFsaXplRGV2aWNlKCk7
CisgICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIGdldERlZmF1bHRQcmVzZW50UGFyYW1ldGVycygp
OworICAgIHZvaWQgcmVsZWFzZURldmljZVJlc291cmNlcygpOworCisgICAgSFJFU1VMVCBnZXRE
ZXZpY2VTdGF0dXNDb2RlKCk7CisgICAgYm9vbCBpc1JlbW92ZWREZXZpY2VSZXNldHRhYmxlKCkg
Y29uc3Q7CisgICAgYm9vbCByZXNldFJlbW92ZWREZXZpY2UoKTsKKworICAgIFVJTlQgbUFkYXB0
ZXI7CisgICAgRDNEREVWVFlQRSBtRGV2aWNlVHlwZTsKKyAgICBib29sIG1Tb2Z0d2FyZURldmlj
ZTsgICAvLyBGSVhNRTogRGVwcmVjYXRlCisgICAgSURpcmVjdDNEOSAqbUQzZDk7ICAvLyBBbHdh
eXMgdmFsaWQgYWZ0ZXIgc3VjY2Vzc2Z1bCBpbml0aWFsaXphdGlvbi4KKyAgICBJRGlyZWN0M0Q5
RXggKm1EM2Q5RXg7ICAvLyBNaWdodCBiZSBudWxsIGlmIEQzRDlFeCBpcyBub3Qgc3VwcG9ydGVk
LgorICAgIElEaXJlY3QzRERldmljZTkgKm1EZXZpY2U7CisgICAgSURpcmVjdDNERGV2aWNlOUV4
ICptRGV2aWNlRXg7ICAvLyBNaWdodCBiZSBudWxsIGlmIEQzRDlFeCBpcyBub3Qgc3VwcG9ydGVk
LgorCisgICAgQmxpdCAqbUJsaXQ7CisKKyAgICBIV05EIG1EZXZpY2VXaW5kb3c7CisKKyAgICBi
b29sIG1EZXZpY2VMb3N0OworICAgIEQzRENBUFM5IG1EZXZpY2VDYXBzOworICAgIEQzREFEQVBU
RVJfSURFTlRJRklFUjkgbUFkYXB0ZXJJZGVudGlmaWVyOworCisgICAgRDNEUFJJTUlUSVZFVFlQ
RSBtUHJpbWl0aXZlVHlwZTsKKyAgICBpbnQgbVByaW1pdGl2ZUNvdW50OworICAgIEdMc2l6ZWkg
bVJlcGVhdERyYXc7CisKKyAgICBib29sIG1TY2VuZVN0YXJ0ZWQ7CisgICAgYm9vbCBtU3VwcG9y
dHNOb25Qb3dlcjJUZXh0dXJlczsKKyAgICBib29sIG1TdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlz
b3Ryb3B5OworICAgIGludCBtTWluU3dhcEludGVydmFsOworICAgIGludCBtTWF4U3dhcEludGVy
dmFsOworCisgICAgYm9vbCBtT2NjbHVzaW9uUXVlcnlTdXBwb3J0OworICAgIGJvb2wgbUV2ZW50
UXVlcnlTdXBwb3J0OworICAgIGJvb2wgbVZlcnRleFRleHR1cmVTdXBwb3J0OworCisgICAgYm9v
bCBtRGVwdGhUZXh0dXJlU3VwcG9ydDsKKworICAgIGJvb2wgbUZsb2F0MzJUZXh0dXJlU3VwcG9y
dDsKKyAgICBib29sIG1GbG9hdDMyRmlsdGVyU3VwcG9ydDsKKyAgICBib29sIG1GbG9hdDMyUmVu
ZGVyU3VwcG9ydDsKKworICAgIGJvb2wgbUZsb2F0MTZUZXh0dXJlU3VwcG9ydDsKKyAgICBib29s
IG1GbG9hdDE2RmlsdGVyU3VwcG9ydDsKKyAgICBib29sIG1GbG9hdDE2UmVuZGVyU3VwcG9ydDsK
KworICAgIGJvb2wgbURYVDFUZXh0dXJlU3VwcG9ydDsKKyAgICBib29sIG1EWFQzVGV4dHVyZVN1
cHBvcnQ7CisgICAgYm9vbCBtRFhUNVRleHR1cmVTdXBwb3J0OworCisgICAgYm9vbCBtTHVtaW5h
bmNlVGV4dHVyZVN1cHBvcnQ7CisgICAgYm9vbCBtTHVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9y
dDsKKworICAgIHN0ZDo6bWFwPEQzREZPUk1BVCwgYm9vbCAqPiBtTXVsdGlTYW1wbGVTdXBwb3J0
OworICAgIEdMc2l6ZWkgbU1heFN1cHBvcnRlZFNhbXBsZXM7CisKKyAgICAvLyBjdXJyZW50IHJl
bmRlciB0YXJnZXQgc3RhdGVzCisgICAgdW5zaWduZWQgaW50IG1BcHBsaWVkUmVuZGVyVGFyZ2V0
U2VyaWFsOworICAgIHVuc2lnbmVkIGludCBtQXBwbGllZERlcHRoYnVmZmVyU2VyaWFsOworICAg
IHVuc2lnbmVkIGludCBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWw7CisgICAgYm9vbCBtRGVw
dGhTdGVuY2lsSW5pdGlhbGl6ZWQ7CisgICAgYm9vbCBtUmVuZGVyVGFyZ2V0RGVzY0luaXRpYWxp
emVkOworICAgIHJ4OjpSZW5kZXJUYXJnZXQ6OkRlc2MgbVJlbmRlclRhcmdldERlc2M7CisgICAg
dW5zaWduZWQgaW50IG1DdXJTdGVuY2lsU2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgbUN1ckRlcHRo
U2l6ZTsKKworICAgIElEaXJlY3QzRFN0YXRlQmxvY2s5ICptTWFza2VkQ2xlYXJTYXZlZFN0YXRl
OworCisgICAgLy8gcHJldmlvdXNseSBzZXQgcmVuZGVyIHN0YXRlcworICAgIGJvb2wgbUZvcmNl
U2V0RGVwdGhTdGVuY2lsU3RhdGU7CisgICAgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlIG1DdXJEZXB0
aFN0ZW5jaWxTdGF0ZTsKKyAgICBpbnQgbUN1clN0ZW5jaWxSZWY7CisgICAgaW50IG1DdXJTdGVu
Y2lsQmFja1JlZjsKKyAgICBib29sIG1DdXJGcm9udEZhY2VDQ1c7CisKKyAgICBib29sIG1Gb3Jj
ZVNldFJhc3RlclN0YXRlOworICAgIGdsOjpSYXN0ZXJpemVyU3RhdGUgbUN1clJhc3RlclN0YXRl
OworCisgICAgYm9vbCBtRm9yY2VTZXRTY2lzc29yOworICAgIGdsOjpSZWN0YW5nbGUgbUN1clNj
aXNzb3I7CisgICAgYm9vbCBtU2Npc3NvckVuYWJsZWQ7CisKKyAgICBib29sIG1Gb3JjZVNldFZp
ZXdwb3J0OworICAgIGdsOjpSZWN0YW5nbGUgbUN1clZpZXdwb3J0OworICAgIGZsb2F0IG1DdXJO
ZWFyOworICAgIGZsb2F0IG1DdXJGYXI7CisgICAgZmxvYXQgbUN1ckRlcHRoRnJvbnQ7CisKKyAg
ICBib29sIG1Gb3JjZVNldEJsZW5kU3RhdGU7CisgICAgZ2w6OkJsZW5kU3RhdGUgbUN1ckJsZW5k
U3RhdGU7CisgICAgZ2w6OkNvbG9yIG1DdXJCbGVuZENvbG9yOworICAgIEdMdWludCBtQ3VyU2Ft
cGxlTWFzazsKKworICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIHNhbXBsZXIgc3RhdGVzCisgICAg
Ym9vbCBtRm9yY2VTZXRWZXJ0ZXhTYW1wbGVyU3RhdGVzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhf
VkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOworICAgIGdsOjpTYW1wbGVyU3RhdGUgbUN1clZl
cnRleFNhbXBsZXJTdGF0ZXNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVSRV9J
TUFHRV9VTklUU107CisKKyAgICBib29sIG1Gb3JjZVNldFBpeGVsU2FtcGxlclN0YXRlc1tnbDo6
TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOworICAgIGdsOjpTYW1wbGVyU3RhdGUgbUN1clBpeGVs
U2FtcGxlclN0YXRlc1tnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOworCisgICAgLy8gQ3Vy
cmVudGx5IGFwcGxpZWQgdGV4dHVyZXMKKyAgICB1bnNpZ25lZCBpbnQgbUN1clZlcnRleFRleHR1
cmVTZXJpYWxzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5J
VFNdOworICAgIHVuc2lnbmVkIGludCBtQ3VyUGl4ZWxUZXh0dXJlU2VyaWFsc1tnbDo6TUFYX1RF
WFRVUkVfSU1BR0VfVU5JVFNdOworCisgICAgdW5zaWduZWQgaW50IG1BcHBsaWVkSUJTZXJpYWw7
CisgICAgdW5zaWduZWQgaW50IG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbDsKKyAgICAKKyAg
ICByeDo6ZHhfVmVydGV4Q29uc3RhbnRzIG1WZXJ0ZXhDb25zdGFudHM7CisgICAgcng6OmR4X1Bp
eGVsQ29uc3RhbnRzIG1QaXhlbENvbnN0YW50czsKKyAgICBib29sIG1EeFVuaWZvcm1zRGlydHk7
CisKKyAgICAvLyBBIHBvb2wgb2YgZXZlbnQgcXVlcmllcyB0aGF0IGFyZSBjdXJyZW50bHkgdW51
c2VkLgorICAgIHN0ZDo6dmVjdG9yPElEaXJlY3QzRFF1ZXJ5OSo+IG1FdmVudFF1ZXJ5UG9vbDsK
KyAgICBWZXJ0ZXhTaGFkZXJDYWNoZSBtVmVydGV4U2hhZGVyQ2FjaGU7CisgICAgUGl4ZWxTaGFk
ZXJDYWNoZSBtUGl4ZWxTaGFkZXJDYWNoZTsKKworICAgIFZlcnRleERhdGFNYW5hZ2VyICptVmVy
dGV4RGF0YU1hbmFnZXI7CisgICAgVmVydGV4RGVjbGFyYXRpb25DYWNoZSBtVmVydGV4RGVjbGFy
YXRpb25DYWNoZTsKKworICAgIEluZGV4RGF0YU1hbmFnZXIgKm1JbmRleERhdGFNYW5hZ2VyOwor
ICAgIFN0cmVhbWluZ0luZGV4QnVmZmVySW50ZXJmYWNlICptTGluZUxvb3BJQjsKKworICAgIGVu
dW0geyBOVU1fTlVMTF9DT0xPUkJVRkZFUl9DQUNIRV9FTlRSSUVTID0gMTIgfTsKKyAgICBzdHJ1
Y3QgTnVsbENvbG9yYnVmZmVyQ2FjaGVFbnRyeQorICAgIHsKKyAgICAgICAgVUlOVCBscnVDb3Vu
dDsKKyAgICAgICAgaW50IHdpZHRoOworICAgICAgICBpbnQgaGVpZ2h0OworICAgICAgICBnbDo6
UmVuZGVyYnVmZmVyICpidWZmZXI7CisgICAgfSBtTnVsbENvbG9yYnVmZmVyQ2FjaGVbTlVNX05V
TExfQ09MT1JCVUZGRVJfQ0FDSEVfRU5UUklFU107CisgICAgVUlOVCBtTWF4TnVsbENvbG9yYnVm
ZmVyTFJVOworCit9OworCit9CisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUkVS
OV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L1NoYWRlckV4ZWN1dGFibGU5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9TaGFkZXJFeGVjdXRhYmxlOS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNWRlY2Y5NjY0ZGU3MDEwMGIyYWZlNTRkNTc0YWU5YzhhOGExZjIzMAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9TaGFkZXJFeGVjdXRhYmxlOS5jcHAKQEAgLTAsMCArMSw2MCBAQAorI2luY2x1ZGUg
InByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBTaGFkZXJFeGVjdXRhYmxl
OS5jcHA6IEltcGxlbWVudHMgYSBEM0Q5LXNwZWNpZmljIGNsYXNzIHRvIGNvbnRhaW4gc2hhZGVy
CisvLyBleGVjdXRhYmxlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuCisKKyNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9TaGFkZXJFeGVjdXRhYmxlOS5oIgorCisjaW5jbHVkZSAiY29t
bW9uL2RlYnVnLmgiCisKK25hbWVzcGFjZSByeAoreworCitTaGFkZXJFeGVjdXRhYmxlOTo6U2hh
ZGVyRXhlY3V0YWJsZTkoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIElEaXJl
Y3QzRFBpeGVsU2hhZGVyOSAqZXhlY3V0YWJsZSkKKyAgICA6IFNoYWRlckV4ZWN1dGFibGUoZnVu
Y3Rpb24sIGxlbmd0aCkKK3sKKyAgICBtUGl4ZWxFeGVjdXRhYmxlID0gZXhlY3V0YWJsZTsKKyAg
ICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7Cit9CisKK1NoYWRlckV4ZWN1dGFibGU5OjpTaGFk
ZXJFeGVjdXRhYmxlOShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSURpcmVj
dDNEVmVydGV4U2hhZGVyOSAqZXhlY3V0YWJsZSkKKyAgICA6IFNoYWRlckV4ZWN1dGFibGUoZnVu
Y3Rpb24sIGxlbmd0aCkKK3sKKyAgICBtVmVydGV4RXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7Cisg
ICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7Cit9CisKK1NoYWRlckV4ZWN1dGFibGU5Ojp+U2hh
ZGVyRXhlY3V0YWJsZTkoKQoreworICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSkKKyAgICB7Cisg
ICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlLT5SZWxlYXNlKCk7CisgICAgfQorICAgIGlmIChtUGl4
ZWxFeGVjdXRhYmxlKQorICAgIHsKKyAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFzZSgp
OworICAgIH0KK30KKworU2hhZGVyRXhlY3V0YWJsZTkgKlNoYWRlckV4ZWN1dGFibGU5OjptYWtl
U2hhZGVyRXhlY3V0YWJsZTkoU2hhZGVyRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSkKK3sKKyAgICBB
U1NFUlQoSEFTX0RZTkFNSUNfVFlQRShTaGFkZXJFeGVjdXRhYmxlOSosIGV4ZWN1dGFibGUpKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2hhZGVyRXhlY3V0YWJsZTkqPihleGVjdXRhYmxlKTsK
K30KKworSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqU2hhZGVyRXhlY3V0YWJsZTk6OmdldFZlcnRl
eFNoYWRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1WZXJ0ZXhFeGVjdXRhYmxlOworfQorCitJ
RGlyZWN0M0RQaXhlbFNoYWRlcjkgKlNoYWRlckV4ZWN1dGFibGU5OjpnZXRQaXhlbFNoYWRlcigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1QaXhlbEV4ZWN1dGFibGU7Cit9CisKK30KXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU2hhZGVyRXhlY3V0YWJsZTkuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9TaGFkZXJFeGVjdXRh
YmxlOS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmZhMWU2YzI4NDRhOThiYTQyNjhmMGRkZjJiNDk0YTM2ZDI3NmM1
YmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvU2hhZGVyRXhlY3V0YWJsZTkuaApAQCAtMCwwICsxLDM5IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisvLyBTaGFkZXJFeGVjdXRhYmxlOS5oOiBEZWZpbmVzIGEgRDNE
OS1zcGVjaWZpYyBjbGFzcyB0byBjb250YWluIHNoYWRlcgorLy8gZXhlY3V0YWJsZSBpbXBsZW1l
bnRhdGlvbiBkZXRhaWxzLgorCisjaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9TSEFERVJFWEVD
VVRBQkxFOV9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfU0hBREVSRVhFQ1VUQUJMRTlf
SF8KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlLmgiCisK
K25hbWVzcGFjZSByeAoreworCitjbGFzcyBTaGFkZXJFeGVjdXRhYmxlOSA6IHB1YmxpYyBTaGFk
ZXJFeGVjdXRhYmxlCit7CisgIHB1YmxpYzoKKyAgICBTaGFkZXJFeGVjdXRhYmxlOShjb25zdCB2
b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpleGVj
dXRhYmxlKTsKKyAgICBTaGFkZXJFeGVjdXRhYmxlOShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6
ZV90IGxlbmd0aCwgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqZXhlY3V0YWJsZSk7CisgICAgdmly
dHVhbCB+U2hhZGVyRXhlY3V0YWJsZTkoKTsKKworICAgIHN0YXRpYyBTaGFkZXJFeGVjdXRhYmxl
OSAqbWFrZVNoYWRlckV4ZWN1dGFibGU5KFNoYWRlckV4ZWN1dGFibGUgKmV4ZWN1dGFibGUpOwor
CisgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpnZXRQaXhlbFNoYWRlcigpIGNvbnN0OworICAg
IElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKmdldFZlcnRleFNoYWRlcigpIGNvbnN0OworCisgIHBy
aXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFNoYWRlckV4ZWN1dGFibGU5KTsK
KworICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqbVBpeGVsRXhlY3V0YWJsZTsKKyAgICBJRGly
ZWN0M0RWZXJ0ZXhTaGFkZXI5ICptVmVydGV4RXhlY3V0YWJsZTsKK307CisKK30KKworI2VuZGlm
IC8vIExJQkdMRVNWMl9SRU5ERVJFUl9TSEFERVJFWEVDVVRBQkxFOV9IXwpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9Td2FwQ2hhaW45LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9Td2FwQ2hhaW45LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5kZDg4OTVkMThkNmExZGY3ZGFlNWE0MDVhNTFlYzJkMmFkZjA3MDVhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L1N3YXBDaGFpbjkuY3BwCkBAIC0wLDAgKzEsNDQ1IEBACisjaW5jbHVkZSAicHJlY29tcGls
ZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFN3YXBDaGFpbjkuY3BwOiBJbXBsZW1lbnRz
IGEgYmFjay1lbmQgc3BlY2lmaWMgY2xhc3MgZm9yIHRoZSBEM0Q5IHN3YXAgY2hhaW4uCisKKyNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9Td2FwQ2hhaW45LmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmgiCisKK25hbWVzcGFjZSByeAoreworCitT
d2FwQ2hhaW45OjpTd2FwQ2hhaW45KFJlbmRlcmVyOSAqcmVuZGVyZXIsIEhXTkQgd2luZG93LCBI
QU5ETEUgc2hhcmVIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBiYWNrQnVm
ZmVyRm9ybWF0LCBHTGVudW0gZGVwdGhCdWZmZXJGb3JtYXQpCisgICAgOiBtUmVuZGVyZXIocmVu
ZGVyZXIpLCBTd2FwQ2hhaW4od2luZG93LCBzaGFyZUhhbmRsZSwgYmFja0J1ZmZlckZvcm1hdCwg
ZGVwdGhCdWZmZXJGb3JtYXQpCit7CisgICAgbVN3YXBDaGFpbiA9IE5VTEw7CisgICAgbUJhY2tC
dWZmZXIgPSBOVUxMOworICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOworICAgIG1SZW5kZXJUYXJn
ZXQgPSBOVUxMOworICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsKKyAgICBtV2lkdGggPSAt
MTsKKyAgICBtSGVpZ2h0ID0gLTE7CisgICAgbVN3YXBJbnRlcnZhbCA9IC0xOworfQorCitTd2Fw
Q2hhaW45Ojp+U3dhcENoYWluOSgpCit7CisgICAgcmVsZWFzZSgpOworfQorCit2b2lkIFN3YXBD
aGFpbjk6OnJlbGVhc2UoKQoreworICAgIGlmIChtU3dhcENoYWluKQorICAgIHsKKyAgICAgICAg
bVN3YXBDaGFpbi0+UmVsZWFzZSgpOworICAgICAgICBtU3dhcENoYWluID0gTlVMTDsKKyAgICB9
CisKKyAgICBpZiAobUJhY2tCdWZmZXIpCisgICAgeworICAgICAgICBtQmFja0J1ZmZlci0+UmVs
ZWFzZSgpOworICAgICAgICBtQmFja0J1ZmZlciA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKG1E
ZXB0aFN0ZW5jaWwpCisgICAgeworICAgICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7Cisg
ICAgICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOworICAgIH0KKworICAgIGlmIChtUmVuZGVyVGFy
Z2V0KQorICAgIHsKKyAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworICAgICAgICBt
UmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAobU9mZnNjcmVlblRleHR1cmUp
CisgICAgeworICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+UmVsZWFzZSgpOworICAgICAgICBt
T2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKG1XaW5kb3cpCisgICAg
ICAgIG1TaGFyZUhhbmRsZSA9IE5VTEw7Cit9CisKK3N0YXRpYyBEV09SRCBjb252ZXJ0SW50ZXJ2
YWwoRUdMaW50IGludGVydmFsKQoreworI2lmIEFOR0xFX0ZPUkNFX1ZTWU5DX09GRgorICAgIHJl
dHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX0lNTUVESUFURTsKKyNlbHNlCisgICAgc3dpdGNoKGlu
dGVydmFsKQorICAgIHsKKyAgICAgIGNhc2UgMDogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxf
SU1NRURJQVRFOworICAgICAgY2FzZSAxOiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9PTkU7
CisgICAgICBjYXNlIDI6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX1RXTzsKKyAgICAgIGNh
c2UgMzogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfVEhSRUU7CisgICAgICBjYXNlIDQ6IHJl
dHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX0ZPVVI7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOworICAgIH0KKworICAgIHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX0RFRkFVTFQ7Cisj
ZW5kaWYKK30KKworRUdMaW50IFN3YXBDaGFpbjk6OnJlc2l6ZShpbnQgYmFja2J1ZmZlcldpZHRo
LCBpbnQgYmFja2J1ZmZlckhlaWdodCkKK3sKKyAgICAvLyBEM0Q5IGRvZXMgbm90IHN1cHBvcnQg
cmVzaXppbmcgc3dhcCBjaGFpbnMgd2l0aG91dCByZWNyZWF0aW5nIHRoZW0KKyAgICByZXR1cm4g
cmVzZXQoYmFja2J1ZmZlcldpZHRoLCBiYWNrYnVmZmVySGVpZ2h0LCBtU3dhcEludGVydmFsKTsK
K30KKworRUdMaW50IFN3YXBDaGFpbjk6OnJlc2V0KGludCBiYWNrYnVmZmVyV2lkdGgsIGludCBi
YWNrYnVmZmVySGVpZ2h0LCBFR0xpbnQgc3dhcEludGVydmFsKQoreworICAgIElEaXJlY3QzRERl
dmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICBpZiAoZGV2aWNl
ID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4gRUdMX0JBRF9BQ0NFU1M7CisgICAgfQor
CisgICAgLy8gRXZpY3QgYWxsIG5vbi1yZW5kZXIgdGFyZ2V0IHRleHR1cmVzIHRvIHN5c3RlbSBt
ZW1vcnkgYW5kIHJlbGVhc2UgYWxsIHJlc291cmNlcworICAgIC8vIGJlZm9yZSByZWFsbG9jYXRp
bmcgdGhlbSB0byBmcmVlIHVwIGFzIG11Y2ggdmlkZW8gbWVtb3J5IGFzIHBvc3NpYmxlLgorICAg
IGRldmljZS0+RXZpY3RNYW5hZ2VkUmVzb3VyY2VzKCk7CisKKyAgICBIUkVTVUxUIHJlc3VsdDsK
KworICAgIC8vIFJlbGVhc2Ugc3BlY2lmaWMgcmVzb3VyY2VzIHRvIGZyZWUgdXAgbWVtb3J5IGZv
ciB0aGUgbmV3IHJlbmRlciB0YXJnZXQsIHdoaWxlIHRoZQorICAgIC8vIG9sZCByZW5kZXIgdGFy
Z2V0IHN0aWxsIGV4aXN0cyBmb3IgdGhlIHB1cnBvc2Ugb2YgcHJlc2VydmluZyBpdHMgY29udGVu
dHMuCisgICAgaWYgKG1Td2FwQ2hhaW4pCisgICAgeworICAgICAgICBtU3dhcENoYWluLT5SZWxl
YXNlKCk7CisgICAgICAgIG1Td2FwQ2hhaW4gPSBOVUxMOworICAgIH0KKworICAgIGlmIChtQmFj
a0J1ZmZlcikKKyAgICB7CisgICAgICAgIG1CYWNrQnVmZmVyLT5SZWxlYXNlKCk7CisgICAgICAg
IG1CYWNrQnVmZmVyID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAobU9mZnNjcmVlblRleHR1cmUp
CisgICAgeworICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+UmVsZWFzZSgpOworICAgICAgICBt
T2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKG1EZXB0aFN0ZW5jaWwp
CisgICAgeworICAgICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CisgICAgICAgIG1EZXB0
aFN0ZW5jaWwgPSBOVUxMOworICAgIH0KKworICAgIEhBTkRMRSAqcFNoYXJlSGFuZGxlID0gTlVM
TDsKKyAgICBpZiAoIW1XaW5kb3cgJiYgbVJlbmRlcmVyLT5nZXRTaGFyZUhhbmRsZVN1cHBvcnQo
KSkKKyAgICB7CisgICAgICAgIHBTaGFyZUhhbmRsZSA9ICZtU2hhcmVIYW5kbGU7CisgICAgfQor
CisgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKGJhY2tidWZmZXJXaWR0aCwgYmFj
a2J1ZmZlckhlaWdodCwgMSwgRDNEVVNBR0VfUkVOREVSVEFSR0VULAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbF9kM2Q5OjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1C
YWNrQnVmZmVyRm9ybWF0KSwgRDNEUE9PTF9ERUZBVUxULAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmbU9mZnNjcmVlblRleHR1cmUsIHBTaGFyZUhhbmRsZSk7CisgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG9m
ZnNjcmVlbiB0ZXh0dXJlOiAlMDhsWCIsIHJlc3VsdCk7CisgICAgICAgIHJlbGVhc2UoKTsKKwor
ICAgICAgICBpZiAoZDNkOTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIEVHTF9DT05URVhUX0xPU1Q7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRUdMX0JBRF9BTExPQzsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpvbGRSZW5kZXJUYXJnZXQgPSBt
UmVuZGVyVGFyZ2V0OworCisgICAgcmVzdWx0ID0gbU9mZnNjcmVlblRleHR1cmUtPkdldFN1cmZh
Y2VMZXZlbCgwLCAmbVJlbmRlclRhcmdldCk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKKworICAgIGlmIChvbGRSZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBSRUNUIHJlY3Qg
PQorICAgICAgICB7CisgICAgICAgICAgICAwLCAwLAorICAgICAgICAgICAgbVdpZHRoLCBtSGVp
Z2h0CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKHJlY3QucmlnaHQgPiBzdGF0aWNfY2FzdDxM
T05HPihiYWNrYnVmZmVyV2lkdGgpKQorICAgICAgICB7CisgICAgICAgICAgICByZWN0LnJpZ2h0
ID0gYmFja2J1ZmZlcldpZHRoOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJlY3QuYm90dG9t
ID4gc3RhdGljX2Nhc3Q8TE9ORz4oYmFja2J1ZmZlckhlaWdodCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJlY3QuYm90dG9tID0gYmFja2J1ZmZlckhlaWdodDsKKyAgICAgICAgfQorCisgICAg
ICAgIG1SZW5kZXJlci0+ZW5kU2NlbmUoKTsKKworICAgICAgICByZXN1bHQgPSBkZXZpY2UtPlN0
cmV0Y2hSZWN0KG9sZFJlbmRlclRhcmdldCwgJnJlY3QsIG1SZW5kZXJUYXJnZXQsICZyZWN0LCBE
M0RURVhGX05PTkUpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAg
ICAgIG9sZFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworICAgIH0KKworICAgIGlmIChtV2luZG93
KQorICAgIHsKKyAgICAgICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbWV0ZXJz
ID0gezB9OworICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVuY2lsRm9ybWF0
ID0gZ2xfZDNkOTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtRGVwdGhCdWZmZXJGb3JtYXQp
OworICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyQ291bnQgPSAxOworICAgICAg
ICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyRm9ybWF0ID0gZ2xfZDNkOTo6Q29udmVydFJl
bmRlcmJ1ZmZlckZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCk7CisgICAgICAgIHByZXNlbnRQYXJh
bWV0ZXJzLkVuYWJsZUF1dG9EZXB0aFN0ZW5jaWwgPSBGQUxTRTsKKyAgICAgICAgcHJlc2VudFBh
cmFtZXRlcnMuRmxhZ3MgPSAwOworICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5oRGV2aWNlV2lu
ZG93ID0gbVdpbmRvdzsKKyAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVRdWFs
aXR5ID0gMDsgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVW5pbXBsZW1lbnRlZAorICAgICAg
ICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVR5cGUgPSBEM0RNVUxUSVNBTVBMRV9OT05F
OyAgIC8vIEZJWE1FOiBVbmltcGxlbWVudGVkCisgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLlBy
ZXNlbnRhdGlvbkludGVydmFsID0gY29udmVydEludGVydmFsKHN3YXBJbnRlcnZhbCk7CisgICAg
ICAgIHByZXNlbnRQYXJhbWV0ZXJzLlN3YXBFZmZlY3QgPSBEM0RTV0FQRUZGRUNUX0RJU0NBUkQ7
CisgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLldpbmRvd2VkID0gVFJVRTsKKyAgICAgICAgcHJl
c2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoID0gYmFja2J1ZmZlcldpZHRoOworICAgICAg
ICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0ID0gYmFja2J1ZmZlckhlaWdodDsK
KworICAgICAgICAvLyBodHRwOi8vY3JidWcuY29tLzE0MDIzOQorICAgICAgICAvLyBodHRwOi8v
Y3JidWcuY29tLzE0MzQzNAorICAgICAgICAvLworICAgICAgICAvLyBTb21lIEFNRC9JbnRlbCBz
d2l0Y2hhYmxlIHN5c3RlbXMgLyBkcml2ZXJzIGFwcGVhciB0byByb3VuZCBzd2FwIGNoYWluIHN1
cmZhY2VzIHRvIGEgbXVsdGlwbGUgb2YgNjQgcGl4ZWxzIGluIHdpZHRoCisgICAgICAgIC8vIHdo
ZW4gdXNpbmcgdGhlIGludGVncmF0ZWQgSW50ZWwuIFRoaXMgcm91bmRzIHRoZSB3aWR0aCB1cCBy
YXRoZXIgdGhhbiBkb3duLgorICAgICAgICAvLworICAgICAgICAvLyBTb21lIG5vbi1zd2l0Y2hh
YmxlIEFNRCBHUFVzIC8gZHJpdmVycyBkbyBub3QgcmVzcGVjdCB0aGUgc291cmNlIHJlY3Rhbmds
ZSB0byBQcmVzZW50LiBUaGVyZWZvcmUsIHdoZW4gdGhlIHZlbmRvciBJRAorICAgICAgICAvLyBp
cyBub3QgSW50ZWwsIHRoZSBiYWNrIGJ1ZmZlciB3aWR0aCBtdXN0IGJlIGV4YWN0bHkgdGhlIHNh
bWUgd2lkdGggYXMgdGhlIHdpbmRvdyBvciBob3Jpem9udGFsIHNjYWxpbmcgd2lsbCBvY2N1ci4K
KyAgICAgICAgaWYgKG1SZW5kZXJlci0+Z2V0QWRhcHRlclZlbmRvcigpID09IFZFTkRPUl9JRF9J
TlRFTCkKKyAgICAgICAgeworICAgICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZl
cldpZHRoID0gKHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCArIDYzKSAvIDY0ICog
NjQ7CisgICAgICAgIH0KKworICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUFkZGl0aW9u
YWxTd2FwQ2hhaW4oJnByZXNlbnRQYXJhbWV0ZXJzLCAmbVN3YXBDaGFpbik7CisKKyAgICAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0
ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8
IHJlc3VsdCA9PSBEM0RFUlJfSU5WQUxJRENBTEwgfHwgcmVzdWx0ID09IEQzREVSUl9ERVZJQ0VM
T1NUKTsKKworICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGFkZGl0aW9uYWwgc3dh
cCBjaGFpbnMgb3Igb2Zmc2NyZWVuIHN1cmZhY2VzOiAlMDhsWCIsIHJlc3VsdCk7CisgICAgICAg
ICAgICByZWxlYXNlKCk7CisKKyAgICAgICAgICAgIGlmIChkM2Q5Ojppc0RldmljZUxvc3RFcnJv
cihyZXN1bHQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBFR0xfQ09O
VEVYVF9MT1NUOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBFR0xfQkFEX0FMTE9DOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0ID0gbVN3YXBDaGFpbi0+R2V0QmFja0J1ZmZlcigw
LCBEM0RCQUNLQlVGRkVSX1RZUEVfTU9OTywgJm1CYWNrQnVmZmVyKTsKKyAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgSW52YWxpZGF0ZVJlY3QobVdpbmRvdywgTlVM
TCwgRkFMU0UpOworICAgIH0KKworICAgIGlmIChtRGVwdGhCdWZmZXJGb3JtYXQgIT0gR0xfTk9O
RSkKKyAgICB7CisgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsU3Vy
ZmFjZShiYWNrYnVmZmVyV2lkdGgsIGJhY2tidWZmZXJIZWlnaHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9kM2Q5OjpDb252ZXJ0UmVuZGVy
YnVmZmVyRm9ybWF0KG1EZXB0aEJ1ZmZlckZvcm1hdCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RNVUxUSVNBTVBMRV9OT05FLCAwLCBGQUxT
RSwgJm1EZXB0aFN0ZW5jaWwsIE5VTEwpOworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0lO
VkFMSURDQUxMKTsKKworICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGRlcHRoc3Rl
bmNpbCBzdXJmYWNlIGZvciBuZXcgc3dhcCBjaGFpbjogMHglMDhYIiwgcmVzdWx0KTsKKyAgICAg
ICAgICAgIHJlbGVhc2UoKTsKKworICAgICAgICAgICAgaWYgKGQzZDk6OmlzRGV2aWNlTG9zdEVy
cm9yKHJlc3VsdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEVHTF9D
T05URVhUX0xPU1Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEVHTF9CQURfQUxMT0M7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtV2lkdGggPSBiYWNrYnVmZmVyV2lkdGg7CisgICAg
bUhlaWdodCA9IGJhY2tidWZmZXJIZWlnaHQ7CisgICAgbVN3YXBJbnRlcnZhbCA9IHN3YXBJbnRl
cnZhbDsKKworICAgIHJldHVybiBFR0xfU1VDQ0VTUzsKK30KKworLy8gcGFyYW1ldGVycyBzaG91
bGQgYmUgdmFsaWRhdGVkL2NsYW1wZWQgYnkgY2FsbGVyCitFR0xpbnQgU3dhcENoYWluOTo6c3dh
cFJlY3QoRUdMaW50IHgsIEVHTGludCB5LCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQpCit7
CisgICAgaWYgKCFtU3dhcENoYWluKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEVHTF9TVUNDRVNT
OworICAgIH0KKworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0
RGV2aWNlKCk7CisKKyAgICAvLyBEaXNhYmxlIGFsbCBwaXBlbGluZSBvcGVyYXRpb25zCisgICAg
ZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBEM0RaQl9GQUxTRSk7CisgICAg
ZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7Cisg
ICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsK
KyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNF
KTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05P
TkUpOworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFM
U0UpOworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAw
KTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIEQz
RENPTE9SV1JJVEVFTkFCTEVfQUxQSEEgfCBEM0RDT0xPUldSSVRFRU5BQkxFX0JMVUUgfCBEM0RD
T0xPUldSSVRFRU5BQkxFX0dSRUVOIHwgRDNEQ09MT1JXUklURUVOQUJMRV9SRUQpOworICAgIGRl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JHQldSSVRFRU5BQkxFLCBGQUxTRSk7CisgICAg
ZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSwgRkFMU0UpOwor
ICAgIGRldmljZS0+U2V0UGl4ZWxTaGFkZXIoTlVMTCk7CisgICAgZGV2aWNlLT5TZXRWZXJ0ZXhT
aGFkZXIoTlVMTCk7CisKKyAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBtQmFja0J1ZmZl
cik7CisgICAgZGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKE5VTEwpOworCisgICAgZGV2
aWNlLT5TZXRUZXh0dXJlKDAsIG1PZmZzY3JlZW5UZXh0dXJlKTsKKyAgICBkZXZpY2UtPlNldFRl
eHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUk9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7Cisg
ICAgZGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JBUkcxLCBEM0RU
QV9URVhUVVJFKTsKKyAgICBkZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDEsIEQzRFRTU19D
T0xPUk9QLCBEM0RUT1BfRElTQUJMRSk7CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwg
RDNEU0FNUF9NQUdGSUxURVIsIEQzRFRFWEZfUE9JTlQpOworICAgIGRldmljZS0+U2V0U2FtcGxl
clN0YXRlKDAsIEQzRFNBTVBfTUlORklMVEVSLCBEM0RURVhGX1BPSU5UKTsKKyAgICBkZXZpY2Ut
PlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX0FERFJFU1NVLCBEM0RUQUREUkVTU19DTEFNUCk7
CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9BRERSRVNTViwgRDNEVEFE
RFJFU1NfQ0xBTVApOworICAgIGRldmljZS0+U2V0RlZGKEQzREZWRl9YWVpSSFcgfCBEM0RGVkZf
VEVYMSk7CisKKyAgICBmb3IgKFVJTlQgc3RyZWFtSW5kZXggPSAwOyBzdHJlYW1JbmRleCA8IGds
OjpNQVhfVkVSVEVYX0FUVFJJQlM7IHN0cmVhbUluZGV4KyspCisgICAgeworICAgICAgICBkZXZp
Y2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoc3RyZWFtSW5kZXgsIDEpOworICAgIH0KKworICAgIEQz
RFZJRVdQT1JUOSB2aWV3cG9ydCA9IHswLCAwLCBtV2lkdGgsIG1IZWlnaHQsIDAuMGYsIDEuMGZ9
OworICAgIGRldmljZS0+U2V0Vmlld3BvcnQoJnZpZXdwb3J0KTsKKworICAgIGZsb2F0IHgxID0g
eCAtIDAuNWY7CisgICAgZmxvYXQgeTEgPSAobUhlaWdodCAtIHkgLSBoZWlnaHQpIC0gMC41ZjsK
KyAgICBmbG9hdCB4MiA9ICh4ICsgd2lkdGgpIC0gMC41ZjsKKyAgICBmbG9hdCB5MiA9IChtSGVp
Z2h0IC0geSkgLSAwLjVmOworCisgICAgZmxvYXQgdTEgPSB4IC8gZmxvYXQobVdpZHRoKTsKKyAg
ICBmbG9hdCB2MSA9IHkgLyBmbG9hdChtSGVpZ2h0KTsKKyAgICBmbG9hdCB1MiA9ICh4ICsgd2lk
dGgpIC8gZmxvYXQobVdpZHRoKTsKKyAgICBmbG9hdCB2MiA9ICh5ICsgaGVpZ2h0KSAvIGZsb2F0
KG1IZWlnaHQpOworCisgICAgZmxvYXQgcXVhZFs0XVs2XSA9IHt7eDEsIHkxLCAwLjBmLCAxLjBm
LCB1MSwgdjJ9LAorICAgICAgICAgICAgICAgICAgICAgICAge3gyLCB5MSwgMC4wZiwgMS4wZiwg
dTIsIHYyfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHt4MiwgeTIsIDAuMGYsIDEuMGYsIHUy
LCB2MX0sCisgICAgICAgICAgICAgICAgICAgICAgICB7eDEsIHkyLCAwLjBmLCAxLjBmLCB1MSwg
djF9fTsgICAvLyB4LCB5LCB6LCByaHcsIHUsIHYKKworICAgIG1SZW5kZXJlci0+c3RhcnRTY2Vu
ZSgpOworICAgIGRldmljZS0+RHJhd1ByaW1pdGl2ZVVQKEQzRFBUX1RSSUFOR0xFRkFOLCAyLCBx
dWFkLCA2ICogc2l6ZW9mKGZsb2F0KSk7CisgICAgbVJlbmRlcmVyLT5lbmRTY2VuZSgpOworCisg
ICAgZGV2aWNlLT5TZXRUZXh0dXJlKDAsIE5VTEwpOworCisgICAgUkVDVCByZWN0ID0KKyAgICB7
CisgICAgICAgIHgsIG1IZWlnaHQgLSB5IC0gaGVpZ2h0LAorICAgICAgICB4ICsgd2lkdGgsIG1I
ZWlnaHQgLSB5CisgICAgfTsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gbVN3YXBDaGFpbi0+UHJl
c2VudCgmcmVjdCwgJnJlY3QsIE5VTEwsIE5VTEwsIDApOworCisgICAgbVJlbmRlcmVyLT5tYXJr
QWxsU3RhdGVEaXJ0eSgpOworCisgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01F
TU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0RSSVZF
UklOVEVSTkFMRVJST1IpCisgICAgeworICAgICAgICByZXR1cm4gRUdMX0JBRF9BTExPQzsKKyAg
ICB9CisKKyAgICAvLyBodHRwOi8vY3JidWcuY29tLzMxMzIxMAorICAgIC8vIElmIG91ciBzd2Fw
IGZhaWxlZCwgdHJpZ2dlciBhIGRldmljZSBsb3N0IGV2ZW50LiBSZXNldHRpbmcgd2lsbCB3b3Jr
IGFyb3VuZCBhbiBBTUQtc3BlY2lmaWMKKyAgICAvLyBkZXZpY2UgcmVtb3ZlZCBidWcgd2l0aCBs
b3N0IGNvbnRleHRzIHdoZW4gcmVpbnN0YWxsaW5nIGRyaXZlcnMuCisgICAgaWYgKEZBSUxFRChy
ZXN1bHQpKQorICAgIHsKKyAgICAgICAgbVJlbmRlcmVyLT5ub3RpZnlEZXZpY2VMb3N0KCk7Cisg
ICAgICAgIHJldHVybiBFR0xfQ09OVEVYVF9MT1NUOworICAgIH0KKworICAgIHJldHVybiBFR0xf
U1VDQ0VTUzsKK30KKworLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2Fs
bGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJmYWNl
OSAqU3dhcENoYWluOTo6Z2V0UmVuZGVyVGFyZ2V0KCkKK3sKKyAgICBpZiAobVJlbmRlclRhcmdl
dCkKKyAgICB7CisgICAgICAgIG1SZW5kZXJUYXJnZXQtPkFkZFJlZigpOworICAgIH0KKworICAg
IHJldHVybiBtUmVuZGVyVGFyZ2V0OworfQorCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1
cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKK0lE
aXJlY3QzRFN1cmZhY2U5ICpTd2FwQ2hhaW45OjpnZXREZXB0aFN0ZW5jaWwoKQoreworICAgIGlm
IChtRGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgbURlcHRoU3RlbmNpbC0+QWRkUmVmKCk7
CisgICAgfQorCisgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7Cit9CisKKy8vIEluY3JlbWVudHMg
cmVmY291bnQgb24gdGV4dHVyZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJu
ZWQgdGV4dHVyZQorSURpcmVjdDNEVGV4dHVyZTkgKlN3YXBDaGFpbjk6OmdldE9mZnNjcmVlblRl
eHR1cmUoKQoreworICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkKKyAgICB7CisgICAgICAgIG1P
ZmZzY3JlZW5UZXh0dXJlLT5BZGRSZWYoKTsKKyAgICB9CisKKyAgICByZXR1cm4gbU9mZnNjcmVl
blRleHR1cmU7Cit9CisKK1N3YXBDaGFpbjkgKlN3YXBDaGFpbjk6Om1ha2VTd2FwQ2hhaW45KFN3
YXBDaGFpbiAqc3dhcENoYWluKQoreworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKHJ4OjpT
d2FwQ2hhaW45Kiwgc3dhcENoYWluKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHJ4OjpTd2Fw
Q2hhaW45Kj4oc3dhcENoYWluKTsKK30KKwordm9pZCBTd2FwQ2hhaW45OjpyZWNyZWF0ZSgpCit7
CisgICAgaWYgKCFtU3dhcENoYWluKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Cisg
ICAgaWYgKGRldmljZSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50UGFyYW1ldGVyczsKKyAgICBIUkVTVUxU
IHJlc3VsdCA9IG1Td2FwQ2hhaW4tPkdldFByZXNlbnRQYXJhbWV0ZXJzKCZwcmVzZW50UGFyYW1l
dGVycyk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIElEaXJlY3QzRFN3
YXBDaGFpbjkqIG5ld1N3YXBDaGFpbiA9IE5VTEw7CisgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVh
dGVBZGRpdGlvbmFsU3dhcENoYWluKCZwcmVzZW50UGFyYW1ldGVycywgJm5ld1N3YXBDaGFpbik7
CisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsKKyAgICBtU3dhcENoYWluID0gbmV3U3dhcENo
YWluOworCisgICAgbUJhY2tCdWZmZXItPlJlbGVhc2UoKTsKKyAgICByZXN1bHQgPSBtU3dhcENo
YWluLT5HZXRCYWNrQnVmZmVyKDAsIEQzREJBQ0tCVUZGRVJfVFlQRV9NT05PLCAmbUJhY2tCdWZm
ZXIpOworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Cit9CisKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9Td2Fw
Q2hhaW45LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDkvU3dhcENoYWluOS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE2YTYyYmQ4NmY2YTY1YjdkZDhiN2JkNDIy
MDc2NDE0ZjQ5MGQ0NWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU3dhcENoYWluOS5oCkBAIC0wLDAgKzEsNTUg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisvLyBTd2FwQ2hhaW45Lmg6IERlZmluZXMgYSBiYWNrLWVuZCBz
cGVjaWZpYyBjbGFzcyBmb3IgdGhlIEQzRDkgc3dhcCBjaGFpbi4KKworI2lmbmRlZiBMSUJHTEVT
VjJfUkVOREVSRVJfU1dBUENIQUlOOV9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfU1dB
UENIQUlOOV9IXworCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvU3dhcENoYWluLmgiCisKK25hbWVzcGFjZSByeAoreworY2xhc3Mg
UmVuZGVyZXI5OworCitjbGFzcyBTd2FwQ2hhaW45IDogcHVibGljIFN3YXBDaGFpbgoreworICBw
dWJsaWM6CisgICAgU3dhcENoYWluOShSZW5kZXJlcjkgKnJlbmRlcmVyLCBIV05EIHdpbmRvdywg
SEFORExFIHNoYXJlSGFuZGxlLAorICAgICAgICAgICAgICAgR0xlbnVtIGJhY2tCdWZmZXJGb3Jt
YXQsIEdMZW51bSBkZXB0aEJ1ZmZlckZvcm1hdCk7CisgICAgdmlydHVhbCB+U3dhcENoYWluOSgp
OworCisgICAgRUdMaW50IHJlc2l6ZShFR0xpbnQgYmFja2J1ZmZlcldpZHRoLCBFR0xpbnQgYmFj
a2J1ZmZlckhlaWdodCk7CisgICAgdmlydHVhbCBFR0xpbnQgcmVzZXQoRUdMaW50IGJhY2tidWZm
ZXJXaWR0aCwgRUdMaW50IGJhY2tidWZmZXJIZWlnaHQsIEVHTGludCBzd2FwSW50ZXJ2YWwpOwor
ICAgIHZpcnR1YWwgRUdMaW50IHN3YXBSZWN0KEVHTGludCB4LCBFR0xpbnQgeSwgRUdMaW50IHdp
ZHRoLCBFR0xpbnQgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjcmVhdGUoKTsKKworICAg
IHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldCgpOworICAgIHZpcnR1
YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNpbCgpOworICAgIHZpcnR1YWwgSURp
cmVjdDNEVGV4dHVyZTkgKmdldE9mZnNjcmVlblRleHR1cmUoKTsKKworICAgIHN0YXRpYyBTd2Fw
Q2hhaW45ICptYWtlU3dhcENoYWluOShTd2FwQ2hhaW4gKnN3YXBDaGFpbik7CisKKyAgcHJpdmF0
ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU3dhcENoYWluOSk7CisKKyAgICB2b2lk
IHJlbGVhc2UoKTsKKworICAgIFJlbmRlcmVyOSAqbVJlbmRlcmVyOworICAgIEVHTGludCBtSGVp
Z2h0OworICAgIEVHTGludCBtV2lkdGg7CisgICAgRUdMaW50IG1Td2FwSW50ZXJ2YWw7CisKKyAg
ICBJRGlyZWN0M0RTd2FwQ2hhaW45ICptU3dhcENoYWluOworICAgIElEaXJlY3QzRFN1cmZhY2U5
ICptQmFja0J1ZmZlcjsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVJlbmRlclRhcmdldDsKKyAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqbURlcHRoU3RlbmNpbDsKKyAgICBJRGlyZWN0M0RUZXh0dXJl
OSogbU9mZnNjcmVlblRleHR1cmU7Cit9OworCit9CisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRF
UkVSX1NXQVBDSEFJTjlfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9UZXh0dXJlU3RvcmFnZTkuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1RleHR1cmVTdG9yYWdl
OS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMjQ4NmE5YTViZjczNzZkY2IxZmZjZDQ4NWY2ZmY5MWY1ZjQxMzQ4
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9UZXh0dXJlU3RvcmFnZTkuY3BwCkBAIC0wLDAgKzEsMzI4IEBACisj
aW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUZXh0dXJlU3RvcmFn
ZTkuY3BwOiBJbXBsZW1lbnRzIHRoZSBhYnN0cmFjdCByeDo6VGV4dHVyZVN0b3JhZ2U5IGNsYXNz
IGFuZCBpdHMgY29uY3JldGUgZGVyaXZlZAorLy8gY2xhc3NlcyBUZXh0dXJlU3RvcmFnZTlfMkQg
YW5kIFRleHR1cmVTdG9yYWdlOV9DdWJlLCB3aGljaCBhY3QgYXMgdGhlIGludGVyZmFjZSB0byB0
aGUKKy8vIEQzRDkgdGV4dHVyZS4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5LmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvU3dhcENoYWluOS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L1JlbmRlclRhcmdldDkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9yZW5kZXJlcjlfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgor
CituYW1lc3BhY2UgcngKK3sKK1RleHR1cmVTdG9yYWdlOTo6VGV4dHVyZVN0b3JhZ2U5KFJlbmRl
cmVyICpyZW5kZXJlciwgRFdPUkQgdXNhZ2UpCisgICAgOiBtTG9kT2Zmc2V0KDApLAorICAgICAg
bVJlbmRlcmVyKFJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShyZW5kZXJlcikpLAorICAgICAgbUQz
RFVzYWdlKHVzYWdlKSwKKyAgICAgIG1EM0RQb29sKG1SZW5kZXJlci0+Z2V0VGV4dHVyZVBvb2wo
dXNhZ2UpKQoreworfQorCitUZXh0dXJlU3RvcmFnZTk6On5UZXh0dXJlU3RvcmFnZTkoKQorewor
fQorCitUZXh0dXJlU3RvcmFnZTkgKlRleHR1cmVTdG9yYWdlOTo6bWFrZVRleHR1cmVTdG9yYWdl
OShUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSkKK3sKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQ
RShUZXh0dXJlU3RvcmFnZTkqLCBzdG9yYWdlKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRl
eHR1cmVTdG9yYWdlOSo+KHN0b3JhZ2UpOworfQorCitEV09SRCBUZXh0dXJlU3RvcmFnZTk6Okdl
dFRleHR1cmVVc2FnZShEM0RGT1JNQVQgZDNkZm10LCBHTGVudW0gZ2x1c2FnZSwgYm9vbCBmb3Jj
ZVJlbmRlcmFibGUpCit7CisgICAgRFdPUkQgZDNkdXNhZ2UgPSAwOworCisgICAgaWYgKGQzZGZt
dCA9PSBEM0RGTVRfSU5UWikKKyAgICB7CisgICAgICAgIGQzZHVzYWdlIHw9IEQzRFVTQUdFX0RF
UFRIU1RFTkNJTDsKKyAgICB9CisgICAgZWxzZSBpZihmb3JjZVJlbmRlcmFibGUgfHwgKFRleHR1
cmVTdG9yYWdlOTo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShkM2RmbXQpICYmIChnbHVzYWdl
ID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpKSkKKyAgICB7CisgICAgICAgIGQz
ZHVzYWdlIHw9IEQzRFVTQUdFX1JFTkRFUlRBUkdFVDsKKyAgICB9CisgICAgcmV0dXJuIGQzZHVz
YWdlOworfQorCitib29sIFRleHR1cmVTdG9yYWdlOTo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJs
ZShEM0RGT1JNQVQgZm9ybWF0KQoreworICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lOVFopCisg
ICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgc3dpdGNoKGZvcm1hdCkKKyAg
ICB7CisgICAgICBjYXNlIEQzREZNVF9MODoKKyAgICAgIGNhc2UgRDNERk1UX0E4TDg6CisgICAg
ICBjYXNlIEQzREZNVF9EWFQxOgorICAgICAgY2FzZSBEM0RGTVRfRFhUMzoKKyAgICAgIGNhc2Ug
RDNERk1UX0RYVDU6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGNhc2UgRDNERk1UX0E4
UjhHOEI4OgorICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6CisgICAgICBjYXNlIEQzREZNVF9B
MTZCMTZHMTZSMTZGOgorICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
IH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUZXh0dXJlU3RvcmFnZTk6OmlzUmVu
ZGVyVGFyZ2V0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1EM0RVc2FnZSAmIChEM0RVU0FHRV9S
RU5ERVJUQVJHRVQgfCBEM0RVU0FHRV9ERVBUSFNURU5DSUwpKSAhPSAwOworfQorCitib29sIFRl
eHR1cmVTdG9yYWdlOTo6aXNNYW5hZ2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1EM0RQb29s
ID09IEQzRFBPT0xfTUFOQUdFRCk7Cit9CisKK0QzRFBPT0wgVGV4dHVyZVN0b3JhZ2U5OjpnZXRQ
b29sKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUQzRFBvb2w7Cit9CisKK0RXT1JEIFRleHR1cmVT
dG9yYWdlOTo6Z2V0VXNhZ2UoKSBjb25zdAoreworICAgIHJldHVybiBtRDNEVXNhZ2U7Cit9CisK
K2ludCBUZXh0dXJlU3RvcmFnZTk6OmdldExvZE9mZnNldCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1Mb2RPZmZzZXQ7Cit9CisKK2ludCBUZXh0dXJlU3RvcmFnZTk6OmxldmVsQ291bnQoKQorewor
ICAgIHJldHVybiBnZXRCYXNlVGV4dHVyZSgpID8gZ2V0QmFzZVRleHR1cmUoKS0+R2V0TGV2ZWxD
b3VudCgpIC0gZ2V0TG9kT2Zmc2V0KCkgOiAwOworfQorCitUZXh0dXJlU3RvcmFnZTlfMkQ6OlRl
eHR1cmVTdG9yYWdlOV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBDaGFpbjkgKnN3YXBjaGFp
bikgOiBUZXh0dXJlU3RvcmFnZTkocmVuZGVyZXIsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCkKK3sK
KyAgICBJRGlyZWN0M0RUZXh0dXJlOSAqc3VyZmFjZVRleHR1cmUgPSBzd2FwY2hhaW4tPmdldE9m
ZnNjcmVlblRleHR1cmUoKTsKKyAgICBtVGV4dHVyZSA9IHN1cmZhY2VUZXh0dXJlOworICAgIG1S
ZW5kZXJUYXJnZXQgPSBOVUxMOworCisgICAgaW5pdGlhbGl6ZVJlbmRlclRhcmdldCgpOworfQor
CitUZXh0dXJlU3RvcmFnZTlfMkQ6OlRleHR1cmVTdG9yYWdlOV8yRChSZW5kZXJlciAqcmVuZGVy
ZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29s
IGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCisgICAgOiBU
ZXh0dXJlU3RvcmFnZTkocmVuZGVyZXIsIEdldFRleHR1cmVVc2FnZShSZW5kZXJlcjk6Om1ha2VS
ZW5kZXJlcjkocmVuZGVyZXIpLT5Db252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGludGVybmFs
Zm9ybWF0KSwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSkpCit7CisgICAgbVRleHR1cmUgPSBOVUxM
OworICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOworICAgIC8vIGlmIHRoZSB3aWR0aCBvciBoZWln
aHQgaXMgbm90IHBvc2l0aXZlIHRoaXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0
ZSB0ZXh0dXJlCisgICAgLy8gd2UgaGFuZGxlIHRoYXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNk
IHRleHR1cmUgY3JlYXRpb24KKyAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApCisgICAg
eworICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmlj
ZSgpOworICAgICAgICBnbDo6TWFrZVZhbGlkU2l6ZShmYWxzZSwgZ2w6OklzQ29tcHJlc3NlZChp
bnRlcm5hbGZvcm1hdCksICZ3aWR0aCwgJmhlaWdodCwgJm1Mb2RPZmZzZXQpOworICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZSh3aWR0aCwgaGVpZ2h0LCBsZXZl
bHMgPyBsZXZlbHMgKyBtTG9kT2Zmc2V0IDogMCwgZ2V0VXNhZ2UoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJlbmRlcmVyLT5Db252ZXJ0VGV4dHVy
ZUludGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0KSwgZ2V0UG9vbCgpLCAmbVRleHR1cmUsIE5V
TEwpOworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0g
RV9PVVRPRk1FTU9SWSk7CisgICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbml0aWFsaXplUmVuZGVyVGFyZ2V0KCk7Cit9CisK
K1RleHR1cmVTdG9yYWdlOV8yRDo6flRleHR1cmVTdG9yYWdlOV8yRCgpCit7CisgICAgaWYgKG1U
ZXh0dXJlKQorICAgIHsKKyAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAg
ICBkZWxldGUgbVJlbmRlclRhcmdldDsKK30KKworVGV4dHVyZVN0b3JhZ2U5XzJEICpUZXh0dXJl
U3RvcmFnZTlfMkQ6Om1ha2VUZXh0dXJlU3RvcmFnZTlfMkQoVGV4dHVyZVN0b3JhZ2UgKnN0b3Jh
Z2UpCit7CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoVGV4dHVyZVN0b3JhZ2U5XzJEKiwg
c3RvcmFnZSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlU3RvcmFnZTlfMkQqPihz
dG9yYWdlKTsKK30KKworLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2Fs
bGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJmYWNl
OSAqVGV4dHVyZVN0b3JhZ2U5XzJEOjpnZXRTdXJmYWNlTGV2ZWwoaW50IGxldmVsLCBib29sIGRp
cnR5KQoreworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gTlVMTDsKKworICAgIGlm
IChtVGV4dHVyZSkKKyAgICB7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVRleHR1cmUtPkdl
dFN1cmZhY2VMZXZlbChsZXZlbCArIG1Mb2RPZmZzZXQsICZzdXJmYWNlKTsKKyAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICAvLyBXaXRoIG1hbmFnZWQgdGV4dHVy
ZXMgdGhlIGRyaXZlciBuZWVkcyB0byBiZSBpbmZvcm1lZCBvZiB1cGRhdGVzIHRvIHRoZSBsb3dl
ciBtaXBtYXAgbGV2ZWxzCisgICAgICAgIGlmIChsZXZlbCArIG1Mb2RPZmZzZXQgIT0gMCAmJiBp
c01hbmFnZWQoKSAmJiBkaXJ0eSkKKyAgICAgICAgeworICAgICAgICAgICAgbVRleHR1cmUtPkFk
ZERpcnR5UmVjdChOVUxMKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdXJmYWNl
OworfQorCitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlOV8yRDo6Z2V0UmVuZGVyVGFyZ2V0
KCkKK3sKKyAgICByZXR1cm4gbVJlbmRlclRhcmdldDsKK30KKwordm9pZCBUZXh0dXJlU3RvcmFn
ZTlfMkQ6OmdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCkKK3sKKyAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqdXBwZXIgPSBnZXRTdXJmYWNlTGV2ZWwobGV2ZWwgLSAxLCBmYWxzZSk7CisgICAgSURpcmVj
dDNEU3VyZmFjZTkgKmxvd2VyID0gZ2V0U3VyZmFjZUxldmVsKGxldmVsLCB0cnVlKTsKKworICAg
IGlmICh1cHBlciAhPSBOVUxMICYmIGxvd2VyICE9IE5VTEwpCisgICAgeworICAgICAgICBtUmVu
ZGVyZXItPmJveEZpbHRlcih1cHBlciwgbG93ZXIpOworICAgIH0KKworICAgIGlmICh1cHBlciAh
PSBOVUxMKSB1cHBlci0+UmVsZWFzZSgpOworICAgIGlmIChsb3dlciAhPSBOVUxMKSBsb3dlci0+
UmVsZWFzZSgpOworfQorCitJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmVTdG9yYWdlOV8y
RDo6Z2V0QmFzZVRleHR1cmUoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTsKK30KKwor
dm9pZCBUZXh0dXJlU3RvcmFnZTlfMkQ6OmluaXRpYWxpemVSZW5kZXJUYXJnZXQoKQoreworICAg
IEFTU0VSVChtUmVuZGVyVGFyZ2V0ID09IE5VTEwpOworCisgICAgaWYgKG1UZXh0dXJlICE9IE5V
TEwgJiYgaXNSZW5kZXJUYXJnZXQoKSkKKyAgICB7CisgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5
ICpzdXJmYWNlID0gZ2V0U3VyZmFjZUxldmVsKDAsIGZhbHNlKTsKKworICAgICAgICBtUmVuZGVy
VGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldDkobVJlbmRlcmVyLCBzdXJmYWNlKTsKKyAgICB9Cit9
CisKK1RleHR1cmVTdG9yYWdlOV9DdWJlOjpUZXh0dXJlU3RvcmFnZTlfQ3ViZShSZW5kZXJlciAq
cmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdl
LCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpCisgICAgOiBUZXh0dXJlU3RvcmFnZTko
cmVuZGVyZXIsIEdldFRleHR1cmVVc2FnZShSZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjkocmVuZGVy
ZXIpLT5Db252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0KSwgdXNhZ2Us
IGZvcmNlUmVuZGVyYWJsZSkpCit7CisgICAgbVRleHR1cmUgPSBOVUxMOworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgNjsgKytpKQorICAgIHsKKyAgICAgICAgbVJlbmRlclRhcmdldFtpXSA9IE5V
TEw7CisgICAgfQorCisgICAgLy8gaWYgdGhlIHNpemUgaXMgbm90IHBvc2l0aXZlIHRoaXMgc2hv
dWxkIGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJlCisgICAgLy8gd2UgaGFuZGxl
IHRoYXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRpb24KKyAgICBpZiAo
c2l6ZSA+IDApCisgICAgeworICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVu
ZGVyZXItPmdldERldmljZSgpOworICAgICAgICBpbnQgaGVpZ2h0ID0gc2l6ZTsKKyAgICAgICAg
Z2w6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIGdsOjpJc0NvbXByZXNzZWQoaW50ZXJuYWxmb3JtYXQp
LCAmc2l6ZSwgJmhlaWdodCwgJm1Mb2RPZmZzZXQpOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlQ3ViZVRleHR1cmUoc2l6ZSwgbGV2ZWxzID8gbGV2ZWxzICsgbUxvZE9m
ZnNldCA6IDAsIGdldFVzYWdlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtUmVuZGVyZXItPkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQo
aW50ZXJuYWxmb3JtYXQpLCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVMTCk7CisKKyAgICAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0
ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsK
KyAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGluaXRpYWxpemVSZW5kZXJUYXJnZXQoKTsKK30KKworVGV4dHVyZVN0b3JhZ2U5
X0N1YmU6On5UZXh0dXJlU3RvcmFnZTlfQ3ViZSgpCit7CisgICAgaWYgKG1UZXh0dXJlKQorICAg
IHsKKyAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IDY7ICsraSkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBtUmVuZGVyVGFyZ2V0W2ld
OworICAgIH0KK30KKworVGV4dHVyZVN0b3JhZ2U5X0N1YmUgKlRleHR1cmVTdG9yYWdlOV9DdWJl
OjptYWtlVGV4dHVyZVN0b3JhZ2U5X0N1YmUoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpCit7Cisg
ICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoVGV4dHVyZVN0b3JhZ2U5X0N1YmUqLCBzdG9yYWdl
KSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmVTdG9yYWdlOV9DdWJlKj4oc3RvcmFn
ZSk7Cit9CisKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBt
dXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQorSURpcmVjdDNEU3VyZmFjZTkgKlRl
eHR1cmVTdG9yYWdlOV9DdWJlOjpnZXRDdWJlTWFwU3VyZmFjZShHTGVudW0gZmFjZVRhcmdldCwg
aW50IGxldmVsLCBib29sIGRpcnR5KQoreworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNl
ID0gTlVMTDsKKworICAgIGlmIChtVGV4dHVyZSkKKyAgICB7CisgICAgICAgIEQzRENVQkVNQVBf
RkFDRVMgZmFjZSA9IGdsX2QzZDk6OkNvbnZlcnRDdWJlRmFjZShmYWNlVGFyZ2V0KTsKKyAgICAg
ICAgSFJFU1VMVCByZXN1bHQgPSBtVGV4dHVyZS0+R2V0Q3ViZU1hcFN1cmZhY2UoZmFjZSwgbGV2
ZWwgKyBtTG9kT2Zmc2V0LCAmc3VyZmFjZSk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CisKKyAgICAgICAgLy8gV2l0aCBtYW5hZ2VkIHRleHR1cmVzIHRoZSBkcml2ZXIgbmVl
ZHMgdG8gYmUgaW5mb3JtZWQgb2YgdXBkYXRlcyB0byB0aGUgbG93ZXIgbWlwbWFwIGxldmVscwor
ICAgICAgICBpZiAobGV2ZWwgIT0gMCAmJiBpc01hbmFnZWQoKSAmJiBkaXJ0eSkKKyAgICAgICAg
eworICAgICAgICAgICAgbVRleHR1cmUtPkFkZERpcnR5UmVjdChmYWNlLCBOVUxMKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiBzdXJmYWNlOworfQorCitSZW5kZXJUYXJnZXQgKlRl
eHR1cmVTdG9yYWdlOV9DdWJlOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQpCit7
CisgICAgcmV0dXJuIG1SZW5kZXJUYXJnZXRbZ2w6OlRleHR1cmVDdWJlTWFwOjpmYWNlSW5kZXgo
ZmFjZVRhcmdldCldOworfQorCit2b2lkIFRleHR1cmVTdG9yYWdlOV9DdWJlOjpnZW5lcmF0ZU1p
cG1hcChpbnQgZmFjZSwgaW50IGxldmVsKQoreworICAgIElEaXJlY3QzRFN1cmZhY2U5ICp1cHBl
ciA9IGdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZh
Y2UsIGxldmVsIC0gMSwgZmFsc2UpOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpsb3dlciA9IGdl
dEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxl
dmVsLCB0cnVlKTsKKworICAgIGlmICh1cHBlciAhPSBOVUxMICYmIGxvd2VyICE9IE5VTEwpCisg
ICAgeworICAgICAgICBtUmVuZGVyZXItPmJveEZpbHRlcih1cHBlciwgbG93ZXIpOworICAgIH0K
KworICAgIGlmICh1cHBlciAhPSBOVUxMKSB1cHBlci0+UmVsZWFzZSgpOworICAgIGlmIChsb3dl
ciAhPSBOVUxMKSBsb3dlci0+UmVsZWFzZSgpOworfQorCitJRGlyZWN0M0RCYXNlVGV4dHVyZTkg
KlRleHR1cmVTdG9yYWdlOV9DdWJlOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1UZXh0dXJlOworfQorCit2b2lkIFRleHR1cmVTdG9yYWdlOV9DdWJlOjppbml0aWFsaXpl
UmVuZGVyVGFyZ2V0KCkKK3sKKyAgICBpZiAobVRleHR1cmUgIT0gTlVMTCAmJiBpc1JlbmRlclRh
cmdldCgpKQorICAgIHsKKyAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxM
OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgKytpKQorICAgICAgICB7CisgICAg
ICAgICAgICBBU1NFUlQobVJlbmRlclRhcmdldFtpXSA9PSBOVUxMKTsKKworICAgICAgICAgICAg
c3VyZmFjZSA9IGdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WCArIGksIDAsIGZhbHNlKTsKKworICAgICAgICAgICAgbVJlbmRlclRhcmdldFtpXSA9IG5ldyBS
ZW5kZXJUYXJnZXQ5KG1SZW5kZXJlciwgc3VyZmFjZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5Lmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4
dHVyZVN0b3JhZ2U5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODZmNTUxYTEzMTVkYTQ1MzcxM2ZhMTk2ZDc3Mjhm
NzI1N2UyYmQ4NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9UZXh0dXJlU3RvcmFnZTkuaApAQCAtMCwwICsxLDEw
OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFRleHR1cmVTdG9yYWdlOS5oOiBEZWZpbmVzIHRoZSBh
YnN0cmFjdCByeDo6VGV4dHVyZVN0b3JhZ2U5IGNsYXNzIGFuZCBpdHMgY29uY3JldGUgZGVyaXZl
ZAorLy8gY2xhc3NlcyBUZXh0dXJlU3RvcmFnZTlfMkQgYW5kIFRleHR1cmVTdG9yYWdlOV9DdWJl
LCB3aGljaCBhY3QgYXMgdGhlIGludGVyZmFjZSB0byB0aGUKKy8vIEQzRDkgdGV4dHVyZS4KKwor
I2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfVEVYVFVSRVNUT1JBR0U5X0hfCisjZGVmaW5lIExJ
QkdMRVNWMl9SRU5ERVJFUl9URVhUVVJFU1RPUkFHRTlfSF8KKworI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZS5oIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgor
CituYW1lc3BhY2UgcngKK3sKK2NsYXNzIFJlbmRlcmVyOTsKK2NsYXNzIFN3YXBDaGFpbjk7Citj
bGFzcyBSZW5kZXJUYXJnZXQ7CitjbGFzcyBSZW5kZXJUYXJnZXQ5OworY2xhc3MgQmxpdDsKKwor
Y2xhc3MgVGV4dHVyZVN0b3JhZ2U5IDogcHVibGljIFRleHR1cmVTdG9yYWdlCit7CisgIHB1Ymxp
YzoKKyAgICBUZXh0dXJlU3RvcmFnZTkoUmVuZGVyZXIgKnJlbmRlcmVyLCBEV09SRCB1c2FnZSk7
CisgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2U5KCk7CisKKyAgICBzdGF0aWMgVGV4dHVyZVN0
b3JhZ2U5ICptYWtlVGV4dHVyZVN0b3JhZ2U5KFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKTsKKwor
ICAgIHN0YXRpYyBEV09SRCBHZXRUZXh0dXJlVXNhZ2UoRDNERk9STUFUIGQzZGZtdCwgR0xlbnVt
IGdsdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlKTsKKyAgICBzdGF0aWMgYm9vbCBJc1RleHR1
cmVGb3JtYXRSZW5kZXJhYmxlKEQzREZPUk1BVCBmb3JtYXQpOworCisgICAgRDNEUE9PTCBnZXRQ
b29sKCkgY29uc3Q7CisgICAgRFdPUkQgZ2V0VXNhZ2UoKSBjb25zdDsKKworICAgIHZpcnR1YWwg
SURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KCkgeyByZXR1cm4gTlVMTDsgfQor
ICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJn
ZXQpIHsgcmV0dXJuIE5VTEw7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50
IGxldmVsKSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGlu
dCBsZXZlbCkge307CisKKyAgICB2aXJ0dWFsIGludCBnZXRMb2RPZmZzZXQoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJUYXJnZXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNNYW5hZ2VkKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgbGV2ZWxDb3VudCgpOworCisgIHBy
b3RlY3RlZDoKKyAgICBpbnQgbUxvZE9mZnNldDsKKyAgICBSZW5kZXJlcjkgKm1SZW5kZXJlcjsK
KworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFn
ZTkpOworCisgICAgY29uc3QgRFdPUkQgbUQzRFVzYWdlOworICAgIGNvbnN0IEQzRFBPT0wgbUQz
RFBvb2w7Cit9OworCitjbGFzcyBUZXh0dXJlU3RvcmFnZTlfMkQgOiBwdWJsaWMgVGV4dHVyZVN0
b3JhZ2U5Cit7CisgIHB1YmxpYzoKKyAgICBUZXh0dXJlU3RvcmFnZTlfMkQoUmVuZGVyZXIgKnJl
bmRlcmVyLCBTd2FwQ2hhaW45ICpzd2FwY2hhaW4pOworICAgIFRleHR1cmVTdG9yYWdlOV8yRChS
ZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xl
bnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpOworICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlOV8yRCgpOworCisgICAgc3RhdGlj
IFRleHR1cmVTdG9yYWdlOV8yRCAqbWFrZVRleHR1cmVTdG9yYWdlOV8yRChUZXh0dXJlU3RvcmFn
ZSAqc3RvcmFnZSk7CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0U3VyZmFjZUxldmVsKGlu
dCBsZXZlbCwgYm9vbCBkaXJ0eSk7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRl
clRhcmdldCgpOworICAgIHZpcnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRCYXNlVGV4
dHVyZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwp
OworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9y
YWdlOV8yRCk7CisKKyAgICB2b2lkIGluaXRpYWxpemVSZW5kZXJUYXJnZXQoKTsKKworICAgIElE
aXJlY3QzRFRleHR1cmU5ICptVGV4dHVyZTsKKyAgICBSZW5kZXJUYXJnZXQ5ICptUmVuZGVyVGFy
Z2V0OworfTsKKworY2xhc3MgVGV4dHVyZVN0b3JhZ2U5X0N1YmUgOiBwdWJsaWMgVGV4dHVyZVN0
b3JhZ2U5Cit7CisgIHB1YmxpYzoKKyAgICBUZXh0dXJlU3RvcmFnZTlfQ3ViZShSZW5kZXJlciAq
cmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdl
LCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpOworICAgIHZpcnR1YWwgflRleHR1cmVT
dG9yYWdlOV9DdWJlKCk7CisKKyAgICBzdGF0aWMgVGV4dHVyZVN0b3JhZ2U5X0N1YmUgKm1ha2VU
ZXh0dXJlU3RvcmFnZTlfQ3ViZShUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSk7CisKKyAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqZ2V0Q3ViZU1hcFN1cmZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBs
ZXZlbCwgYm9vbCBkaXJ0eSk7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRh
cmdldChHTGVudW0gZmFjZVRhcmdldCk7CisgICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVy
ZTkgKmdldEJhc2VUZXh0dXJlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlw
bWFwKGludCBmYWNlLCBpbnQgbGV2ZWwpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlOV9DdWJlKTsKKworICAgIHZvaWQgaW5pdGlhbGl6
ZVJlbmRlclRhcmdldCgpOworCisgICAgSURpcmVjdDNEQ3ViZVRleHR1cmU5ICptVGV4dHVyZTsK
KyAgICBSZW5kZXJUYXJnZXQ5ICptUmVuZGVyVGFyZ2V0WzZdOworfTsKKworfQorCisjZW5kaWYg
Ly8gTElCR0xFU1YyX1JFTkRFUkVSX1RFWFRVUkVTVE9SQUdFOV9IXworCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4
QnVmZmVyOS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvVmVydGV4QnVmZmVyOS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTdmNWJjZDI1NmFjZWI3MjU3
NWFmZjlhMTk4Y2M5ZDBmN2QyNzYzMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmNwcApA
QCAtMCwwICsxLDUzMCBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisvLyBWZXJ0ZXhCdWZmZXI5LmNwcDogRGVmaW5lcyB0aGUgRDNEOSBWZXJ0ZXhCdWZm
ZXIgaW1wbGVtZW50YXRpb24uCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9W
ZXJ0ZXhCdWZmZXI5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvdmVydGV4
Y29udmVyc2lvbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdl
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIu
aCIKKworbmFtZXNwYWNlIHJ4Cit7CisKK2Jvb2wgVmVydGV4QnVmZmVyOTo6bVRyYW5zbGF0aW9u
c0luaXRpYWxpemVkID0gZmFsc2U7CitWZXJ0ZXhCdWZmZXI5OjpGb3JtYXRDb252ZXJ0ZXIgVmVy
dGV4QnVmZmVyOTo6bUZvcm1hdENvbnZlcnRlcnNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVNd
WzJdWzRdOworCitWZXJ0ZXhCdWZmZXI5OjpWZXJ0ZXhCdWZmZXI5KHJ4OjpSZW5kZXJlcjkgKmNv
bnN0IHJlbmRlcmVyKSA6IG1SZW5kZXJlcihyZW5kZXJlcikKK3sKKyAgICBtVmVydGV4QnVmZmVy
ID0gTlVMTDsKKyAgICBtQnVmZmVyU2l6ZSA9IDA7CisgICAgbUR5bmFtaWNVc2FnZSA9IGZhbHNl
OworCisgICAgaWYgKCFtVHJhbnNsYXRpb25zSW5pdGlhbGl6ZWQpCisgICAgeworICAgICAgICBp
bml0aWFsaXplVHJhbnNsYXRpb25zKHJlbmRlcmVyLT5nZXRDYXBzRGVjbFR5cGVzKCkpOworICAg
ICAgICBtVHJhbnNsYXRpb25zSW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIH0KK30KKworVmVydGV4
QnVmZmVyOTo6flZlcnRleEJ1ZmZlcjkoKQoreworICAgIGlmIChtVmVydGV4QnVmZmVyKQorICAg
IHsKKyAgICAgICAgbVZlcnRleEJ1ZmZlci0+UmVsZWFzZSgpOworICAgICAgICBtVmVydGV4QnVm
ZmVyID0gTlVMTDsKKyAgICB9Cit9CisKK2Jvb2wgVmVydGV4QnVmZmVyOTo6aW5pdGlhbGl6ZSh1
bnNpZ25lZCBpbnQgc2l6ZSwgYm9vbCBkeW5hbWljVXNhZ2UpCit7CisgICAgaWYgKG1WZXJ0ZXhC
dWZmZXIpCisgICAgeworICAgICAgICBtVmVydGV4QnVmZmVyLT5SZWxlYXNlKCk7CisgICAgICAg
IG1WZXJ0ZXhCdWZmZXIgPSBOVUxMOworICAgIH0KKworICAgIHVwZGF0ZVNlcmlhbCgpOworCisg
ICAgaWYgKHNpemUgPiAwKQorICAgIHsKKyAgICAgICAgRFdPUkQgZmxhZ3MgPSBEM0RVU0FHRV9X
UklURU9OTFk7CisgICAgICAgIGlmIChkeW5hbWljVXNhZ2UpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGZsYWdzIHw9IEQzRFVTQUdFX0RZTkFNSUM7CisgICAgICAgIH0KKworICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IG1SZW5kZXJlci0+Y3JlYXRlVmVydGV4QnVmZmVyKHNpemUsIGZsYWdzLCAm
bVZlcnRleEJ1ZmZlcik7CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7
CisgICAgICAgICAgICBFUlIoIk91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBhIHZlcnRleCBidWZm
ZXIgb2Ygc2l6ZSAlbHUuIiwgc2l6ZSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBtQnVmZmVyU2l6ZSA9IHNpemU7CisgICAgbUR5bmFtaWNVc2Fn
ZSA9IGR5bmFtaWNVc2FnZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworVmVydGV4QnVmZmVyOSAq
VmVydGV4QnVmZmVyOTo6bWFrZVZlcnRleEJ1ZmZlcjkoVmVydGV4QnVmZmVyICp2ZXJ0ZXhCdWZm
ZXIpCit7CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoVmVydGV4QnVmZmVyOSosIHZlcnRl
eEJ1ZmZlcikpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxWZXJ0ZXhCdWZmZXI5Kj4odmVydGV4
QnVmZmVyKTsKK30KKworYm9vbCBWZXJ0ZXhCdWZmZXI5OjpzdG9yZVZlcnRleEF0dHJpYnV0ZXMo
Y29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTGludCBzdGFydCwgR0xzaXplaSBj
b3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6
ZWkgaW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworICAgIGlmIChtVmVydGV4QnVm
ZmVyKQorICAgIHsKKyAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gYXR0cmliLm1Cb3VuZEJ1
ZmZlci5nZXQoKTsKKworICAgICAgICBpbnQgaW5wdXRTdHJpZGUgPSBhdHRyaWIuc3RyaWRlKCk7
CisgICAgICAgIGludCBlbGVtZW50U2l6ZSA9IGF0dHJpYi50eXBlU2l6ZSgpOworICAgICAgICBj
b25zdCBGb3JtYXRDb252ZXJ0ZXIgJmNvbnZlcnRlciA9IGZvcm1hdENvbnZlcnRlcihhdHRyaWIp
OworCisgICAgICAgIERXT1JEIGxvY2tGbGFncyA9IG1EeW5hbWljVXNhZ2UgPyBEM0RMT0NLX05P
T1ZFUldSSVRFIDogMDsKKworICAgICAgICB2b2lkICptYXBQdHIgPSBOVUxMOworCisgICAgICAg
IHVuc2lnbmVkIGludCBtYXBTaXplOworICAgICAgICBpZiAoIXNwYWNlUmVxdWlyZWQoYXR0cmli
LCBjb3VudCwgaW5zdGFuY2VzLCAmbWFwU2l6ZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVZlcnRl
eEJ1ZmZlci0+TG9jayhvZmZzZXQsIG1hcFNpemUsICZtYXBQdHIsIGxvY2tGbGFncyk7CisKKyAg
ICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkxv
Y2sgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IGNoYXIgKmlucHV0ID0gTlVMTDsK
KyAgICAgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAgeworICAgICAgICAgICAgQnVmZmVyU3RvcmFn
ZSAqc3RvcmFnZSA9IGJ1ZmZlci0+Z2V0U3RvcmFnZSgpOworICAgICAgICAgICAgaW5wdXQgPSBz
dGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSArIHN0YXRpY19jYXN0
PGludD4oYXR0cmliLm1PZmZzZXQpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYXR0cmliLm1Q
b2ludGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBhdHRy
aWIubURpdmlzb3IgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaW5wdXQgKz0gaW5wdXRT
dHJpZGUgKiBzdGFydDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb252ZXJ0ZXIuaWRlbnRp
dHkgJiYgaW5wdXRTdHJpZGUgPT0gZWxlbWVudFNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1lbWNweShtYXBQdHIsIGlucHV0LCBjb3VudCAqIGlucHV0U3RyaWRlKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnZlcnRlci5jb252ZXJ0QXJy
YXkoaW5wdXQsIGlucHV0U3RyaWRlLCBjb3VudCwgbWFwUHRyKTsKKyAgICAgICAgfQorCisgICAg
ICAgIG1WZXJ0ZXhCdWZmZXItPlVubG9jaygpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBFUlIoIlZlcnRleCBidWZmZXIgbm90IGluaXRp
YWxpemVkLiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFZlcnRl
eEJ1ZmZlcjk6OnN0b3JlUmF3RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6
ZSwgdW5zaWduZWQgaW50IG9mZnNldCkKK3sKKyAgICBpZiAobVZlcnRleEJ1ZmZlcikKKyAgICB7
CisgICAgICAgIERXT1JEIGxvY2tGbGFncyA9IG1EeW5hbWljVXNhZ2UgPyBEM0RMT0NLX05PT1ZF
UldSSVRFIDogMDsKKworICAgICAgICB2b2lkICptYXBQdHIgPSBOVUxMOworICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IG1WZXJ0ZXhCdWZmZXItPkxvY2sob2Zmc2V0LCBzaXplLCAmbWFwUHRyLCBs
b2NrRmxhZ3MpOworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAg
ICAgICAgICAgRVJSKCJMb2NrIGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHkobWFw
UHRyLCBkYXRhLCBzaXplKTsKKworICAgICAgICBtVmVydGV4QnVmZmVyLT5VbmxvY2soKTsKKwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgRVJS
KCJWZXJ0ZXggYnVmZmVyIG5vdCBpbml0aWFsaXplZC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKworYm9vbCBWZXJ0ZXhCdWZmZXI5OjpnZXRTcGFjZVJlcXVpcmVkKGNvbnN0
IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0
YW5jZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
ICpvdXRTcGFjZVJlcXVpcmVkKSBjb25zdAoreworICAgIHJldHVybiBzcGFjZVJlcXVpcmVkKGF0
dHJpYiwgY291bnQsIGluc3RhbmNlcywgb3V0U3BhY2VSZXF1aXJlZCk7Cit9CisKK2Jvb2wgVmVy
dGV4QnVmZmVyOTo6cmVxdWlyZXNDb252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUg
JmF0dHJpYikgY29uc3QKK3sKKyAgICByZXR1cm4gIWZvcm1hdENvbnZlcnRlcihhdHRyaWIpLmlk
ZW50aXR5OworfQorCit1bnNpZ25lZCBpbnQgVmVydGV4QnVmZmVyOTo6Z2V0VmVydGV4U2l6ZShj
b25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0Cit7CisgICAgdW5zaWduZWQg
aW50IHNwYWNlUmVxdWlyZWQ7CisgICAgcmV0dXJuIGdldFNwYWNlUmVxdWlyZWQoYXR0cmliLCAx
LCAwLCAmc3BhY2VSZXF1aXJlZCkgPyBzcGFjZVJlcXVpcmVkIDogMDsKK30KKworRDNEREVDTFRZ
UEUgVmVydGV4QnVmZmVyOTo6Z2V0RGVjbFR5cGUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAm
YXR0cmliKSBjb25zdAoreworICAgIHJldHVybiBmb3JtYXRDb252ZXJ0ZXIoYXR0cmliKS5kM2RE
ZWNsVHlwZTsKK30KKwordW5zaWduZWQgaW50IFZlcnRleEJ1ZmZlcjk6OmdldEJ1ZmZlclNpemUo
KSBjb25zdAoreworICAgIHJldHVybiBtQnVmZmVyU2l6ZTsKK30KKworYm9vbCBWZXJ0ZXhCdWZm
ZXI5OjpzZXRCdWZmZXJTaXplKHVuc2lnbmVkIGludCBzaXplKQoreworICAgIGlmIChzaXplID4g
bUJ1ZmZlclNpemUpCisgICAgeworICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZShzaXplLCBtRHlu
YW1pY1VzYWdlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorfQorCitib29sIFZlcnRleEJ1ZmZlcjk6OmRpc2NhcmQoKQoreworICAgIGlmICht
VmVydGV4QnVmZmVyKQorICAgIHsKKyAgICAgICAgdm9pZCAqZHVtbXk7CisgICAgICAgIEhSRVNV
TFQgcmVzdWx0OworCisgICAgICAgIHJlc3VsdCA9IG1WZXJ0ZXhCdWZmZXItPkxvY2soMCwgMSwg
JmR1bW15LCBEM0RMT0NLX0RJU0NBUkQpOworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiRGlzY2FyZCBsb2NrIGZhaWxlZCB3aXRoIGVycm9y
IDB4JTA4eCIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KworICAgICAgICByZXN1bHQgPSBtVmVydGV4QnVmZmVyLT5VbmxvY2soKTsKKyAgICAgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkRpc2NhcmQgdW5s
b2NrIGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgRVJSKCJWZXJ0ZXggYnVmZmVyIG5vdCBpbml0aWFsaXplZC4i
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworSURpcmVjdDNEVmVydGV4QnVm
ZmVyOSAqIFZlcnRleEJ1ZmZlcjk6OmdldEJ1ZmZlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1W
ZXJ0ZXhCdWZmZXI7Cit9CisKKy8vIE1hcHBpbmcgZnJvbSBPcGVuR0wtRVMgdmVydGV4IGF0dHJp
YiB0eXBlIHRvIEQzRCBkZWNsIHR5cGU6CisvLworLy8gQllURSAgICAgICAgICAgICAgICAgU0hP
UlQgKENhc3QpCisvLyBCWVRFLW5vcm0gICAgICAgICAgICBGTE9BVCAoTm9ybWFsaXplKSAoY2Fu
J3QgYmUgZXhhY3RseSByZXByZXNlbnRlZCBhcyBTSE9SVC1ub3JtKQorLy8gVU5TSUdORURfQllU
RSAgICAgICAgVUJZVEU0IChJZGVudGl0eSkgb3IgU0hPUlQgKENhc3QpCisvLyBVTlNJR05FRF9C
WVRFLW5vcm0gICBVQllURTROIChJZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1hbGl6ZSkKKy8vIFNI
T1JUICAgICAgICAgICAgICAgIFNIT1JUIChJZGVudGl0eSkKKy8vIFNIT1JULW5vcm0gICAgICAg
ICAgIFNIT1JULW5vcm0gKElkZW50aXR5KSBvciBGTE9BVCAoTm9ybWFsaXplKQorLy8gVU5TSUdO
RURfU0hPUlQgICAgICAgRkxPQVQgKENhc3QpCisvLyBVTlNJR05FRF9TSE9SVC1ub3JtICBVU0hP
UlQtbm9ybSAoSWRlbnRpdHkpIG9yIEZMT0FUIChOb3JtYWxpemUpCisvLyBGSVhFRCAobm90IGlu
IFdlYkdMKSBGTE9BVCAoRml4ZWRUb0Zsb2F0KQorLy8gRkxPQVQgICAgICAgICAgICAgICAgRkxP
QVQgKElkZW50aXR5KQorCisvLyBHTFRvQ1R5cGUgbWFwcyBmcm9tIEdMIHR5cGUgKGFzIEdMZW51
bSkgdG8gdGhlIEMgdHlwZWRlZi4KK3RlbXBsYXRlIDxHTGVudW0gR0xUeXBlPiBzdHJ1Y3QgR0xU
b0NUeXBlIHsgfTsKKwordGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9CWVRFPiAgICAg
ICAgICAgeyB0eXBlZGVmIEdMYnl0ZSB0eXBlOyAgICAgIH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
R0xUb0NUeXBlPEdMX1VOU0lHTkVEX0JZVEU+ICB7IHR5cGVkZWYgR0x1Ynl0ZSB0eXBlOyAgICAg
fTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfU0hPUlQ+ICAgICAgICAgIHsgdHlw
ZWRlZiBHTHNob3J0IHR5cGU7ICAgICB9OwordGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxH
TF9VTlNJR05FRF9TSE9SVD4geyB0eXBlZGVmIEdMdXNob3J0IHR5cGU7ICAgIH07Cit0ZW1wbGF0
ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX0ZJWEVEPiAgICAgICAgICB7IHR5cGVkZWYgR0x1aW50
IHR5cGU7ICAgICAgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfRkxPQVQ+ICAg
ICAgICAgIHsgdHlwZWRlZiBHTGZsb2F0IHR5cGU7ICAgICB9OworCisvLyBUaGlzIGRpZmZlcnMg
ZnJvbSBEM0RERUNMVFlQRSBpbiB0aGF0IGl0IGlzIHVuc2l6ZWQuIChTaXplIGV4cGFuc2lvbiBp
cyBhcHBsaWVkIGxhc3QuKQorZW51bSBEM0RWZXJ0ZXhUeXBlCit7CisgICAgRDNEVlRfRkxPQVQs
CisgICAgRDNEVlRfU0hPUlQsCisgICAgRDNEVlRfU0hPUlRfTk9STSwKKyAgICBEM0RWVF9VQllU
RSwKKyAgICBEM0RWVF9VQllURV9OT1JNLAorICAgIEQzRFZUX1VTSE9SVF9OT1JNCit9OworCisv
LyBEM0RUb0NUeXBlIG1hcHMgZnJvbSBEM0QgdmVydGV4IHR5cGUgKGFzIGVudW0gRDNEVmVydGV4
VHlwZSkgdG8gdGhlIGNvcnJlc3BvbmRpbmcgQyB0eXBlLgordGVtcGxhdGUgPHVuc2lnbmVkIGlu
dCBEM0RUeXBlPiBzdHJ1Y3QgRDNEVG9DVHlwZSB7IH07CisKK3RlbXBsYXRlIDw+IHN0cnVjdCBE
M0RUb0NUeXBlPEQzRFZUX0ZMT0FUPiB7IHR5cGVkZWYgZmxvYXQgdHlwZTsgfTsKK3RlbXBsYXRl
IDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1NIT1JUPiB7IHR5cGVkZWYgc2hvcnQgdHlwZTsg
fTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1NIT1JUX05PUk0+IHsgdHlw
ZWRlZiBzaG9ydCB0eXBlOyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRf
VUJZVEU+IHsgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHR5cGU7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1
Y3QgRDNEVG9DVHlwZTxEM0RWVF9VQllURV9OT1JNPiB7IHR5cGVkZWYgdW5zaWduZWQgY2hhciB0
eXBlOyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfVVNIT1JUX05PUk0+
IHsgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB0eXBlOyB9OworCisvLyBFbmNvZGUgdGhlIHR5cGUv
c2l6ZSBjb21iaW5hdGlvbnMgdGhhdCBEM0QgcGVybWl0cy4gRm9yIGVhY2ggdHlwZS9zaXplIGl0
IGV4cGFuZHMgdG8gYSB3aWRlbmVyIHRoYXQgd2lsbCBwcm92aWRlIHRoZSBhcHByb3ByaWF0ZSBm
aW5hbCBzaXplLgordGVtcGxhdGUgPHVuc2lnbmVkIGludCB0eXBlLCBpbnQgc2l6ZT4gc3RydWN0
IFdpZGVuUnVsZSB7IH07CisKK3RlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxE
M0RWVF9GTE9BVCwgc2l6ZT4gICAgICAgICAgOiBOb1dpZGVuPHNpemU+IHsgfTsKK3RlbXBsYXRl
IDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9TSE9SVCwgc2l6ZT4gICAgICAgICAg
OiBXaWRlblRvRXZlbjxzaXplPiB7IH07Cit0ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRl
blJ1bGU8RDNEVlRfU0hPUlRfTk9STSwgc2l6ZT4gICAgIDogV2lkZW5Ub0V2ZW48c2l6ZT4geyB9
OwordGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1VCWVRFLCBzaXpl
PiAgICAgICAgICA6IFdpZGVuVG9Gb3VyPHNpemU+IHsgfTsKK3RlbXBsYXRlIDxpbnQgc2l6ZT4g
c3RydWN0IFdpZGVuUnVsZTxEM0RWVF9VQllURV9OT1JNLCBzaXplPiAgICAgOiBXaWRlblRvRm91
cjxzaXplPiB7IH07Cit0ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRf
VVNIT1JUX05PUk0sIHNpemU+ICAgIDogV2lkZW5Ub0V2ZW48c2l6ZT4geyB9OworCisvLyBWZXJ0
ZXhUeXBlRmxhZ3MgZW5jb2RlcyB0aGUgRDNEQ0FQUzk6OkRlY2xUeXBlIGZsYWcgYW5kIHZlcnRl
eCBkZWNsYXJhdGlvbiBmbGFnIGZvciBlYWNoIEQzRCB2ZXJ0ZXggdHlwZSAmIHNpemUgY29tYmlu
YXRpb24uCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IGQzZHR5cGUsIGludCBzaXplPiBzdHJ1Y3Qg
VmVydGV4VHlwZUZsYWdzIHsgfTsKKwordGVtcGxhdGUgPHVuc2lnbmVkIGludCBfY2FwZmxhZywg
dW5zaWduZWQgaW50IF9kZWNsZmxhZz4KK3N0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXIKK3sK
KyAgICBlbnVtIHsgY2FwZmxhZyA9IF9jYXBmbGFnIH07CisgICAgZW51bSB7IGRlY2xmbGFnID0g
X2RlY2xmbGFnIH07Cit9OworCit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQz
RFZUX0ZMT0FULCAxPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9GTE9B
VDE+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfRkxPQVQs
IDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FUMj4geyB9Owor
dGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwgMz4gOiBWZXJ0
ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQzPiB7IH07Cit0ZW1wbGF0ZSA8
PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FULCA0PiA6IFZlcnRleFR5cGVGbGFn
c0hlbHBlcjwwLCBEM0RERUNMVFlQRV9GTE9BVDQ+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBW
ZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlQsIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAs
IEQzRERFQ0xUWVBFX1NIT1JUMj4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVG
bGFnczxEM0RWVF9TSE9SVCwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZ
UEVfU0hPUlQ0PiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZU
X1NIT1JUX05PUk0sIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19TSE9SVDJO
LCBEM0RERUNMVFlQRV9TSE9SVDJOPiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlw
ZUZsYWdzPEQzRFZUX1NIT1JUX05PUk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERU
Q0FQU19TSE9SVDROLCBEM0RERUNMVFlQRV9TSE9SVDROPiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1
Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1VCWVRFLCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBl
cjxEM0REVENBUFNfVUJZVEU0LCBEM0RERUNMVFlQRV9VQllURTQ+IHsgfTsKK3RlbXBsYXRlIDw+
IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVUJZVEVfTk9STSwgND4gOiBWZXJ0ZXhUeXBl
RmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VCWVRFNE4sIEQzRERFQ0xUWVBFX1VCWVRFNE4+IHsgfTsK
K3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVVNIT1JUX05PUk0sIDI+
IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VU0hPUlQyTiwgRDNEREVDTFRZUEVf
VVNIT1JUMk4+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRf
VVNIT1JUX05PUk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VU0hPUlQ0
TiwgRDNEREVDTFRZUEVfVVNIT1JUNE4+IHsgfTsKKworCisvLyBWZXJ0ZXhUeXBlTWFwcGluZyBt
YXBzIEdMIHR5cGUgJiBub3JtYWxpemVkIGZsYWcgdG8gcHJlZmVycmVkIGFuZCBmYWxsYmFjayBE
M0QgdmVydGV4IHR5cGVzIChhcyBEM0RWZXJ0ZXhUeXBlIGVudW1zKS4KK3RlbXBsYXRlIDxHTGVu
dW0gR0x0eXBlLCBib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZyB7IH07
CisKK3RlbXBsYXRlIDxEM0RWZXJ0ZXhUeXBlIFByZWZlcnJlZCwgRDNEVmVydGV4VHlwZSBGYWxs
YmFjayA9IFByZWZlcnJlZD4KK3N0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2UKK3sKKyAgICBl
bnVtIHsgcHJlZmVycmVkID0gUHJlZmVycmVkIH07CisgICAgZW51bSB7IGZhbGxiYWNrID0gRmFs
bGJhY2sgfTsKK307CisKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9C
WVRFLCBmYWxzZT4gICAgICAgICAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFz
ZTxEM0RWVF9TSE9SVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FzdAordGVtcGxh
dGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX0JZVEUsIHRydWU+ICAgICAgICAgICAg
ICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FUPiB7IH07ICAg
ICAgICAgICAgICAgICAgICAgICAvLyBOb3JtYWxpemUKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0
ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9CWVRFLCBmYWxzZT4gICAgICAgICAgICAgICA6IFZl
cnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9VQllURSwgRDNEVlRfRkxPQVQ+IHsgfTsgICAgICAg
ICAgLy8gSWRlbnRpdHksIENhc3QKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGlu
ZzxHTF9VTlNJR05FRF9CWVRFLCB0cnVlPiAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBw
aW5nQmFzZTxEM0RWVF9VQllURV9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAgICAgLy8gSWRlbnRp
dHksIE5vcm1hbGl6ZQordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1NI
T1JULCBmYWxzZT4gICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNl
PEQzRFZUX1NIT1JUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBJZGVudGl0eQordGVt
cGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1NIT1JULCB0cnVlPiAgICAgICAg
ICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1NIT1JUX05PUk0s
IEQzRFZUX0ZMT0FUPiB7IH07ICAgICAvLyBDYXN0LCBOb3JtYWxpemUKK3RlbXBsYXRlIDw+IHN0
cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9TSE9SVCwgZmFsc2U+ICAgICAgICAg
ICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAg
ICAgICAgICAgICAgLy8gQ2FzdAordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5n
PEdMX1VOU0lHTkVEX1NIT1JULCB0cnVlPiAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBp
bmdCYXNlPEQzRFZUX1VTSE9SVF9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAgICAvLyBDYXN0LCBO
b3JtYWxpemUKK3RlbXBsYXRlIDxib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFw
cGluZzxHTF9GSVhFRCwgbm9ybWFsaXplZD4gICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RW
VF9GTE9BVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gRml4ZWRUb0Zsb2F0Cit0ZW1w
bGF0ZSA8Ym9vbCBub3JtYWxpemVkPiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfRkxPQVQs
IG5vcm1hbGl6ZWQ+ICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxPQVQ+IHsgfTsg
ICAgICAgICAgICAgICAgICAgICAgIC8vIElkZW50aXR5CisKKworLy8gR2l2ZW4gYSBHTCB0eXBl
ICYgbm9ybSBmbGFnIGFuZCBhIEQzRCB0eXBlLCBDb252ZXJzaW9uUnVsZSBwcm92aWRlcyB0aGUg
dHlwZSBjb252ZXJzaW9uIHJ1bGUgKENhc3QsIE5vcm1hbGl6ZSwgSWRlbnRpdHksIEZpeGVkVG9G
bG9hdCkuCisvLyBUaGUgY29udmVyc2lvbiBydWxlcyB0aGVtc2VsdmVzIGFyZSBkZWZpbmVkIGlu
IHZlcnRleGNvbnZlcnNpb24uaC4KKworLy8gQWxtb3N0IGFsbCBjYXNlcyBhcmUgY292ZXJlZCBi
eSBDYXN0IChpbmNsdWRpbmcgdGhvc2UgdGhhdCBhcmUgYWN0dWFsbHkgSWRlbnRpdHkgc2luY2Ug
Q2FzdDxULFQ+IGtub3dzIGl0J3MgYW4gaWRlbnRpdHkgbWFwcGluZykuCit0ZW1wbGF0ZSA8R0xl
bnVtIGZyb21UeXBlLCBib29sIG5vcm1hbGl6ZWQsIHVuc2lnbmVkIGludCB0b1R5cGU+CitzdHJ1
Y3QgQ29udmVyc2lvblJ1bGUgOiBDYXN0PHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5
cGUsIHR5cGVuYW1lIEQzRFRvQ1R5cGU8dG9UeXBlPjo6dHlwZT4geyB9OworCisvLyBBbGwgY29u
dmVyc2lvbnMgZnJvbSBub3JtYWxpemVkIHR5cGVzIHRvIGZsb2F0IHVzZSB0aGUgTm9ybWFsaXpl
IG9wZXJhdG9yLgordGVtcGxhdGUgPEdMZW51bSBmcm9tVHlwZT4gc3RydWN0IENvbnZlcnNpb25S
dWxlPGZyb21UeXBlLCB0cnVlLCBEM0RWVF9GTE9BVD4gOiBOb3JtYWxpemU8dHlwZW5hbWUgR0xU
b0NUeXBlPGZyb21UeXBlPjo6dHlwZT4geyB9OworCisvLyBVc2UgYSBmdWxsIHNwZWNpYWxpemF0
aW9uIGZvciB0aGlzIHNvIHRoYXQgaXQgcHJlZmVyZW50aWFsbHkgbWF0Y2hlcyBhaGVhZCBvZiB0
aGUgZ2VuZXJpYyBub3JtYWxpemUtdG8tZmxvYXQgcnVsZXMuCit0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
Q29udmVyc2lvblJ1bGU8R0xfRklYRUQsIHRydWUsIEQzRFZUX0ZMT0FUPiAgOiBGaXhlZFRvRmxv
YXQ8R0xpbnQsIDE2PiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xf
RklYRUQsIGZhbHNlLCBEM0RWVF9GTE9BVD4gOiBGaXhlZFRvRmxvYXQ8R0xpbnQsIDE2PiB7IH07
CisKKy8vIEEgMi1zdGFnZSBjb25zdHJ1Y3Rpb24gaXMgdXNlZCBmb3IgRGVmYXVsdFZlcnRleFZh
bHVlcyBiZWNhdXNlIGZsb2F0IG11c3QgdXNlIFNpbXBsZURlZmF1bHRWYWx1ZXMgKGkuZS4gMC8x
KQorLy8gd2hldGhlciBpdCBpcyBub3JtYWxpemVkIG9yIG5vdC4KK3RlbXBsYXRlIDxjbGFzcyBU
LCBib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyIHsgfTsK
KwordGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyPFQs
IHRydWU+ICA6IE5vcm1hbGl6ZWREZWZhdWx0VmFsdWVzPFQ+IHsgfTsKK3RlbXBsYXRlIDxjbGFz
cyBUPiBzdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMjxULCBmYWxzZT4gOiBTaW1wbGVE
ZWZhdWx0VmFsdWVzPFQ+IHsgfTsKKworLy8gV29yayBvdXQgdGhlIGRlZmF1bHQgdmFsdWUgcnVs
ZSBmb3IgYSBEM0QgdHlwZSAoZXhwcmVzc2VkIGFzIHRoZSBDIHR5cGUpIGFuZAordGVtcGxhdGUg
PGNsYXNzIFQsIGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXMgOiBE
ZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyPFQsIG5vcm1hbGl6ZWQ+IHsgfTsKK3RlbXBsYXRlIDxi
b29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzPGZsb2F0LCBub3JtYWxp
emVkPiA6IFNpbXBsZURlZmF1bHRWYWx1ZXM8ZmxvYXQ+IHsgfTsKKworLy8gUG9saWN5IHJ1bGVz
IGZvciB1c2Ugd2l0aCBDb252ZXJ0ZXIsIHRvIGNob29zZSB3aGV0aGVyIHRvIHVzZSB0aGUgcHJl
ZmVycmVkIG9yIGZhbGxiYWNrIGNvbnZlcnNpb24uCisvLyBUaGUgZmFsbGJhY2sgY29udmVyc2lv
biBwcm9kdWNlcyBhbiBvdXRwdXQgdGhhdCBhbGwgRDNEOSBkZXZpY2VzIG11c3Qgc3VwcG9ydC4K
K3RlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgVXNlUHJlZmVycmVkIHsgZW51bSB7IHR5cGUgPSBU
OjpwcmVmZXJyZWQgfTsgfTsKK3RlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgVXNlRmFsbGJhY2sg
eyBlbnVtIHsgdHlwZSA9IFQ6OmZhbGxiYWNrIH07IH07CisKKy8vIENvbnZlcnRlciB0aWVzIGl0
IGFsbCB0b2dldGhlci4gR2l2ZW4gYW4gT3BlbkdMIHR5cGUvbm9ybS9zaXplIGFuZCBjaG9pY2Ug
b2YgcHJlZmVycmVkL2ZhbGxiYWNrIGNvbnZlcnNpb24sCisvLyBpdCBwcm92aWRlcyBhbGwgdGhl
IG1lbWJlcnMgb2YgdGhlIGFwcHJvcHJpYXRlIFZlcnRleERhdGFDb252ZXJ0ZXIsIHRoZSBEM0RD
QVBTOTo6RGVjbFR5cGVzIGZsYWcgaW4gY2FwIGZsYWcKKy8vIGFuZCB0aGUgRDNEREVDTFRZUEUg
bWVtYmVyIG5lZWRlZCBmb3IgdGhlIHZlcnRleCBkZWNsYXJhdGlvbiBpbiBkZWNsZmxhZy4KK3Rl
bXBsYXRlIDxHTGVudW0gZnJvbVR5cGUsIGJvb2wgbm9ybWFsaXplZCwgaW50IHNpemUsIHRlbXBs
YXRlIDxjbGFzcyBUPiBjbGFzcyBQcmVmZXJlbmNlUnVsZT4KK3N0cnVjdCBDb252ZXJ0ZXIKKyAg
ICA6IFZlcnRleERhdGFDb252ZXJ0ZXI8dHlwZW5hbWUgR0xUb0NUeXBlPGZyb21UeXBlPjo6dHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgV2lkZW5SdWxlPFByZWZlcmVuY2VSdWxlPCBW
ZXJ0ZXhUeXBlTWFwcGluZzxmcm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6dHlwZSwgc2l6ZT4sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnNpb25SdWxlPGZyb21UeXBlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVmZXJlbmNlUnVsZTwgVmVydGV4VHlw
ZU1hcHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6ZWQ+ID46OnR5cGU+LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICBEZWZhdWx0VmVydGV4VmFsdWVzPHR5cGVuYW1lIEQzRFRvQ1R5cGU8UHJlZmVy
ZW5jZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBl
Pjo6dHlwZSwgbm9ybWFsaXplZCA+ID4KK3sKK3ByaXZhdGU6CisgICAgZW51bSB7IGQzZHR5cGUg
PSBQcmVmZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6ZWQ+
ID46OnR5cGUgfTsKKyAgICBlbnVtIHsgZDNkc2l6ZSA9IFdpZGVuUnVsZTxkM2R0eXBlLCBzaXpl
Pjo6ZmluYWxXaWR0aCB9OworCitwdWJsaWM6CisgICAgZW51bSB7IGNhcGZsYWcgPSBWZXJ0ZXhU
eXBlRmxhZ3M8ZDNkdHlwZSwgZDNkc2l6ZT46OmNhcGZsYWcgfTsKKyAgICBlbnVtIHsgZGVjbGZs
YWcgPSBWZXJ0ZXhUeXBlRmxhZ3M8ZDNkdHlwZSwgZDNkc2l6ZT46OmRlY2xmbGFnIH07Cit9Owor
CisvLyBJbml0aWFsaXplIGEgVHJhbnNsYXRpb25JbmZvCisjZGVmaW5lIFRSQU5TTEFUSU9OKHR5
cGUsIG5vcm0sIHNpemUsIHByZWZlcnJlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIENvbnZlcnRlcjx0
eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQ+OjppZGVudGl0eSwgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQ+
OjpmaW5hbFNpemUsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIENvbnZlcnRl
cjx0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQ+Ojpjb252ZXJ0QXJyYXksICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgIHN0YXRpY19jYXN0PEQzRERFQ0xUWVBFPihDb252ZXJ0ZXI8
dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6ZGVjbGZsYWcpICBcCisgICAgfQorCisjZGVm
aW5lIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBub3JtLCBzaXplKSAgICBc
CisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBVc2VQcmVmZXJyZWQ+
OjpjYXBmbGFnLCBcCisgICAgICAgIFRSQU5TTEFUSU9OKHR5cGUsIG5vcm0sIHNpemUsIFVzZVBy
ZWZlcnJlZCksICAgICAgICBcCisgICAgICAgIFRSQU5TTEFUSU9OKHR5cGUsIG5vcm0sIHNpemUs
IFVzZUZhbGxiYWNrKSAgICAgICAgICBcCisgICAgfQorCisjZGVmaW5lIFRSQU5TTEFUSU9OU19G
T1JfVFlQRSh0eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
IHsgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAxKSwgVFJBTlNM
QVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAyKSwgVFJBTlNMQVRJT05fRk9S
X1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAzKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9S
TV9TSVpFKHR5cGUsIGZhbHNlLCA0KSB9LCBcCisgICAgICAgIHsgVFJBTlNMQVRJT05fRk9SX1RZ
UEVfTk9STV9TSVpFKHR5cGUsIHRydWUsIDEpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJ
WkUodHlwZSwgdHJ1ZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCB0
cnVlLCAzKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRydWUsIDQpIH0s
ICAgICBcCisgICAgfQorCisjZGVmaW5lIFRSQU5TTEFUSU9OU19GT1JfVFlQRV9OT19OT1JNKHR5
cGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgVFJBTlNMQVRJT05fRk9S
X1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAxKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9S
TV9TSVpFKHR5cGUsIGZhbHNlLCAyKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5
cGUsIGZhbHNlLCAzKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNl
LCA0KSB9LCBcCisgICAgICAgIHsgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUs
IGZhbHNlLCAxKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAy
KSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAzKSwgVFJBTlNM
QVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCA0KSB9LCBcCisgICAgfQorCitj
b25zdCBWZXJ0ZXhCdWZmZXI5OjpUcmFuc2xhdGlvbkRlc2NyaXB0aW9uIFZlcnRleEJ1ZmZlcjk6
Om1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFU11bMl1bNF0g
PSAvLyBbR0wgdHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXplZF1b
c2l6ZS0xXQoreworICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9CWVRFKSwKKyAgICBUUkFO
U0xBVElPTlNfRk9SX1RZUEUoR0xfVU5TSUdORURfQllURSksCisgICAgVFJBTlNMQVRJT05TX0ZP
Ul9UWVBFKEdMX1NIT1JUKSwKKyAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xfVU5TSUdORURf
U0hPUlQpLAorICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRV9OT19OT1JNKEdMX0ZJWEVEKSwKKyAg
ICBUUkFOU0xBVElPTlNfRk9SX1RZUEVfTk9fTk9STShHTF9GTE9BVCkKK307CisKK3ZvaWQgVmVy
dGV4QnVmZmVyOTo6aW5pdGlhbGl6ZVRyYW5zbGF0aW9ucyhEV09SRCBkZWNsVHlwZXMpCit7Cisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBF
UzsgaSsrKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCAyOyBq
KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGsgPSAwOyBrIDwg
NDsgaysrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChtUG9zc2libGVUcmFu
c2xhdGlvbnNbaV1bal1ba10uY2Fwc0ZsYWcgPT0gMCB8fCAoZGVjbFR5cGVzICYgbVBvc3NpYmxl
VHJhbnNsYXRpb25zW2ldW2pdW2tdLmNhcHNGbGFnKSAhPSAwKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgbUZvcm1hdENvbnZlcnRlcnNbaV1bal1ba10gPSBtUG9zc2li
bGVUcmFuc2xhdGlvbnNbaV1bal1ba10ucHJlZmVycmVkQ29udmVyc2lvbjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgbUZvcm1hdENvbnZlcnRlcnNbaV1bal1ba10gPSBtUG9zc2libGVUcmFuc2xh
dGlvbnNbaV1bal1ba10uZmFsbGJhY2tDb252ZXJzaW9uOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordW5zaWduZWQgaW50IFZlcnRleEJ1
ZmZlcjk6OnR5cGVJbmRleChHTGVudW0gdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAg
eworICAgICAgY2FzZSBHTF9CWVRFOiByZXR1cm4gMDsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURf
QllURTogcmV0dXJuIDE7CisgICAgICBjYXNlIEdMX1NIT1JUOiByZXR1cm4gMjsKKyAgICAgIGNh
c2UgR0xfVU5TSUdORURfU0hPUlQ6IHJldHVybiAzOworICAgICAgY2FzZSBHTF9GSVhFRDogcmV0
dXJuIDQ7CisgICAgICBjYXNlIEdMX0ZMT0FUOiByZXR1cm4gNTsKKworICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsgcmV0dXJuIDU7CisgICAgfQorfQorCitjb25zdCBWZXJ0ZXhCdWZmZXI5
OjpGb3JtYXRDb252ZXJ0ZXIgJlZlcnRleEJ1ZmZlcjk6OmZvcm1hdENvbnZlcnRlcihjb25zdCBn
bDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpCit7CisgICAgcmV0dXJuIG1Gb3JtYXRDb252
ZXJ0ZXJzW3R5cGVJbmRleChhdHRyaWJ1dGUubVR5cGUpXVthdHRyaWJ1dGUubU5vcm1hbGl6ZWRd
W2F0dHJpYnV0ZS5tU2l6ZSAtIDFdOworfQorCitib29sIFZlcnRleEJ1ZmZlcjk6OnNwYWNlUmVx
dWlyZWQoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBzdGQ6OnNpemVfdCBjb3Vu
dCwgR0xzaXplaSBpbnN0YW5jZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50ICpvdXRTcGFjZVJlcXVpcmVkKQoreworICAgIHVuc2lnbmVkIGludCBlbGVt
ZW50U2l6ZSA9IGZvcm1hdENvbnZlcnRlcihhdHRyaWIpLm91dHB1dEVsZW1lbnRTaXplOworCisg
ICAgaWYgKGF0dHJpYi5tQXJyYXlFbmFibGVkKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50
IGVsZW1lbnRDb3VudCA9IDA7CisgICAgICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBhdHRyaWIu
bURpdmlzb3IgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZWxlbWVudENvdW50ID0gY291
bnQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
c3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihpbnN0YW5jZXMpIDwgc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZCBpbnQ+OjptYXgoKSAtIChhdHRyaWIubURpdmlzb3IgLSAxKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAvLyBSb3VuZCB1cAorICAgICAgICAgICAgICAgIGVsZW1l
bnRDb3VudCA9IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGluc3RhbmNlcykgKyAoYXR0cmli
Lm1EaXZpc29yIC0gMSkpIC8gYXR0cmliLm1EaXZpc29yOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVsZW1lbnRDb3VudCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oaW5zdGFuY2VzKSAvIGF0dHJpYi5tRGl2aXNvcjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChlbGVtZW50U2l6ZSA8PSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpIC8gZWxlbWVudENvdW50KQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAob3V0U3BhY2VSZXF1aXJlZCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAqb3V0U3BhY2VSZXF1aXJlZCA9IGVsZW1lbnRTaXplICogZWxl
bWVudENvdW50OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IGVsZW1lbnRTaXplID0gNDsKKyAgICAgICAgaWYgKG91dFNwYWNlUmVxdWlyZWQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgICpvdXRTcGFjZVJlcXVpcmVkID0gZWxlbWVudFNpemUgKiA0
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L1ZlcnRleEJ1ZmZlcjkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmY4ODExN2JkYTI1MGVj
OTExNzA2N2I4YTY4YTg0NGQ2NDBlMzBiMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmgK
QEAgLTAsMCArMSw5MSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVmVydGV4QnVmZmVyOS5o
OiBEZWZpbmVzIHRoZSBEM0Q5IFZlcnRleEJ1ZmZlciBpbXBsZW1lbnRhdGlvbi4KKworI2lmbmRl
ZiBMSUJHTEVTVjJfUkVOREVSRVJfVkVSVEVYQlVGRkVSOV9IXworI2RlZmluZSBMSUJHTEVTVjJf
UkVOREVSRVJfVkVSVEVYQlVGRkVSOV9IXworCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L1ZlcnRleEJ1ZmZlci5oIgorCituYW1lc3BhY2UgcngKK3sKK2NsYXNzIFJlbmRlcmVyOTsKKwor
Y2xhc3MgVmVydGV4QnVmZmVyOSA6IHB1YmxpYyBWZXJ0ZXhCdWZmZXIKK3sKKyAgcHVibGljOgor
ICAgIGV4cGxpY2l0IFZlcnRleEJ1ZmZlcjkocng6OlJlbmRlcmVyOSAqY29uc3QgcmVuZGVyZXIp
OworICAgIHZpcnR1YWwgflZlcnRleEJ1ZmZlcjkoKTsKKworICAgIHZpcnR1YWwgYm9vbCBpbml0
aWFsaXplKHVuc2lnbmVkIGludCBzaXplLCBib29sIGR5bmFtaWNVc2FnZSk7CisKKyAgICBzdGF0
aWMgVmVydGV4QnVmZmVyOSAqbWFrZVZlcnRleEJ1ZmZlcjkoVmVydGV4QnVmZmVyICp2ZXJ0ZXhC
dWZmZXIpOworCisgICAgdmlydHVhbCBib29sIHN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBn
bDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBH
THNpemVpIGluc3RhbmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGludCBvZmZzZXQpOworICAgIHZpcnR1YWwgYm9vbCBzdG9yZVJhd0RhdGEoY29u
c3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBvZmZzZXQpOwor
CisgICAgdmlydHVhbCBib29sIGdldFNwYWNlUmVxdWlyZWQoY29uc3QgZ2w6OlZlcnRleEF0dHJp
YnV0ZSAmYXR0cmliLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgdW5zaWduZWQg
aW50ICpvdXRTcGFjZVJlcXVpcmVkKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCByZXF1aXJl
c0NvbnZlcnNpb24oY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdDsKKwor
ICAgIHVuc2lnbmVkIGludCBnZXRWZXJ0ZXhTaXplKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUg
JmF0dHJpYikgY29uc3Q7CisgICAgRDNEREVDTFRZUEUgZ2V0RGVjbFR5cGUoY29uc3QgZ2w6OlZl
cnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdDsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50
IGdldEJ1ZmZlclNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0QnVmZmVyU2l6ZSh1
bnNpZ25lZCBpbnQgc2l6ZSk7CisgICAgdmlydHVhbCBib29sIGRpc2NhcmQoKTsKKworICAgIElE
aXJlY3QzRFZlcnRleEJ1ZmZlcjkgKmdldEJ1ZmZlcigpIGNvbnN0OworCisgIHByaXZhdGU6Cisg
ICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFZlcnRleEJ1ZmZlcjkpOworCisgICAgcng6OlJl
bmRlcmVyOSAqY29uc3QgbVJlbmRlcmVyOworCisgICAgSURpcmVjdDNEVmVydGV4QnVmZmVyOSAq
bVZlcnRleEJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBpbnQgbUJ1ZmZlclNpemU7CisgICAgYm9vbCBt
RHluYW1pY1VzYWdlOworCisgICAgLy8gQXR0cmlidXRlIGZvcm1hdCBjb252ZXJzaW9uCisgICAg
ZW51bSB7IE5VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTID0gNiB9OworCisgICAgc3RydWN0IEZv
cm1hdENvbnZlcnRlcgorICAgIHsKKyAgICAgICAgYm9vbCBpZGVudGl0eTsKKyAgICAgICAgc3Rk
OjpzaXplX3Qgb3V0cHV0RWxlbWVudFNpemU7CisgICAgICAgIHZvaWQgKCpjb252ZXJ0QXJyYXkp
KGNvbnN0IHZvaWQgKmluLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90IG4sIHZvaWQg
Km91dCk7CisgICAgICAgIEQzRERFQ0xUWVBFIGQzZERlY2xUeXBlOworICAgIH07CisKKyAgICBz
dGF0aWMgYm9vbCBtVHJhbnNsYXRpb25zSW5pdGlhbGl6ZWQ7CisgICAgc3RhdGljIHZvaWQgaW5p
dGlhbGl6ZVRyYW5zbGF0aW9ucyhEV09SRCBkZWNsVHlwZXMpOworCisgICAgLy8gW0dMIHR5cGVz
IGFzIGVudW1lcmF0ZWQgYnkgdHlwZUluZGV4KCldW25vcm1hbGl6ZWRdW3NpemUgLSAxXQorICAg
IHN0YXRpYyBGb3JtYXRDb252ZXJ0ZXIgbUZvcm1hdENvbnZlcnRlcnNbTlVNX0dMX1ZFUlRFWF9B
VFRSSUJfVFlQRVNdWzJdWzRdOworCisgICAgc3RydWN0IFRyYW5zbGF0aW9uRGVzY3JpcHRpb24K
KyAgICB7CisgICAgICAgIERXT1JEIGNhcHNGbGFnOworICAgICAgICBGb3JtYXRDb252ZXJ0ZXIg
cHJlZmVycmVkQ29udmVyc2lvbjsKKyAgICAgICAgRm9ybWF0Q29udmVydGVyIGZhbGxiYWNrQ29u
dmVyc2lvbjsKKyAgICB9OworCisgICAgLy8gVGhpcyB0YWJsZSBpcyB1c2VkIHRvIGdlbmVyYXRl
IG1Gb3JtYXRDb252ZXJ0ZXJzLgorICAgIC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5
cGVJbmRleCgpXVtub3JtYWxpemVkXVtzaXplIC0gMV0KKyAgICBzdGF0aWMgY29uc3QgVHJhbnNs
YXRpb25EZXNjcmlwdGlvbiBtUG9zc2libGVUcmFuc2xhdGlvbnNbTlVNX0dMX1ZFUlRFWF9BVFRS
SUJfVFlQRVNdWzJdWzRdOworCisgICAgc3RhdGljIHVuc2lnbmVkIGludCB0eXBlSW5kZXgoR0xl
bnVtIHR5cGUpOworICAgIHN0YXRpYyBjb25zdCBGb3JtYXRDb252ZXJ0ZXIgJmZvcm1hdENvbnZl
cnRlcihjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpOworCisgICAgc3RhdGlj
IGJvb2wgc3BhY2VSZXF1aXJlZChjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIHN0
ZDo6c2l6ZV90IGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCAqb3V0U3BhY2VSZXF1aXJlZCk7Cit9OworCit9CisKKyNl
bmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfVkVSVEVYQlVGRkVSOV9IXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRl
eERlY2xhcmF0aW9uQ2FjaGUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleERlY2xhcmF0aW9uQ2FjaGUuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmU1YzhhMTQyMzIxMWY4MzU4NjkzZjlmNjk4MjQ2MzgxYmQyNDhlNmUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
VmVydGV4RGVjbGFyYXRpb25DYWNoZS5jcHAKQEAgLTAsMCArMSwyMTcgQEAKKyNpbmNsdWRlICJw
cmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFZlcnRleERlY2xhcmF0aW9uQ2FjaGUu
Y3BwOiBJbXBsZW1lbnRzIGEgaGVscGVyIGNsYXNzIHRvIGNvbnN0cnVjdCBhbmQgY2FjaGUgdmVy
dGV4IGRlY2xhcmF0aW9ucy4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5Lmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L2QzZDkvVmVydGV4RGVjbGFyYXRpb25DYWNoZS5oIgorCituYW1lc3BhY2UgcngKK3sKKworVmVy
dGV4RGVjbGFyYXRpb25DYWNoZTo6VmVydGV4RGVjbGFyYXRpb25DYWNoZSgpIDogbU1heExydSgw
KQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJ
RVM7IGkrKykKKyAgICB7CisgICAgICAgIG1WZXJ0ZXhEZWNsQ2FjaGVbaV0udmVydGV4RGVjbGFy
YXRpb24gPSBOVUxMOworICAgICAgICBtVmVydGV4RGVjbENhY2hlW2ldLmxydUNvdW50ID0gMDsK
KyAgICB9CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7
IGkrKykKKyAgICB7CisgICAgICAgIG1BcHBsaWVkVkJzW2ldLnNlcmlhbCA9IDA7CisgICAgfQor
CisgICAgbUxhc3RTZXRWRGVjbCA9IE5VTEw7CisgICAgbUluc3RhbmNpbmdFbmFibGVkID0gdHJ1
ZTsKK30KKworVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6flZlcnRleERlY2xhcmF0aW9uQ2FjaGUo
KQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJ
RVM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtVmVydGV4RGVjbENhY2hlW2ldLnZlcnRleERl
Y2xhcmF0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBtVmVydGV4RGVjbENhY2hlW2ldLnZl
cnRleERlY2xhcmF0aW9uLT5SZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0dMZW51
bSBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjphcHBseURlY2xhcmF0aW9uKElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSwgVHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW10sIGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBHTHNpemVpIGluc3RhbmNlcywgR0xzaXplaSAqcmVwZWF0
RHJhdykKK3sKKyAgICAqcmVwZWF0RHJhdyA9IDE7CisKKyAgICBpbnQgaW5kZXhlZEF0dHJpYnV0
ZSA9IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7CisgICAgaW50IGluc3RhbmNlZEF0dHJpYnV0ZSA9
IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7CisKKyAgICBpZiAoaW5zdGFuY2VzID4gMCkKKyAgICB7
CisgICAgICAgIC8vIEZpbmQgYW4gaW5kZXhlZCBhdHRyaWJ1dGUgdG8gYmUgbWFwcGVkIHRvIEQz
RCBzdHJlYW0gMAorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGdsOjpNQVhfVkVSVEVYX0FU
VFJJQlM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uYWN0
aXZlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChpbmRleGVkQXR0cmlidXRl
ID09IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMgJiYgYXR0cmlidXRlc1tpXS5kaXZpc29yID09IDAp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbmRleGVkQXR0cmlidXRl
ID0gaTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5zdGFu
Y2VkQXR0cmlidXRlID09IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMgJiYgYXR0cmlidXRlc1tpXS5k
aXZpc29yICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbnN0
YW5jZWRBdHRyaWJ1dGUgPSBpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAoaW5kZXhlZEF0dHJpYnV0ZSAhPSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTICYmIGluc3RhbmNl
ZEF0dHJpYnV0ZSAhPSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsgICAvLyBGb3VuZCBib3RoIGFuIGluZGV4ZWQgYW5kIGluc3RhbmNlZCBhdHRyaWJ1
dGUKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbmRleGVkQXR0cmli
dXRlID09IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBHTF9JTlZBTElEX09QRVJBVElPTjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEQzRFZF
UlRFWEVMRU1FTlQ5IGVsZW1lbnRzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlMgKyAxXTsKKyAgICBE
M0RWRVJURVhFTEVNRU5UOSAqZWxlbWVudCA9ICZlbGVtZW50c1swXTsKKworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgIHsKKyAgICAgICAg
aWYgKGF0dHJpYnV0ZXNbaV0uYWN0aXZlKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBEaXJl
Y3RseSBiaW5kaW5nIHRoZSBzdG9yYWdlIGJ1ZmZlciBpcyBub3Qgc3VwcG9ydGVkIGZvciBkM2Q5
CisgICAgICAgICAgICBBU1NFUlQoYXR0cmlidXRlc1tpXS5zdG9yYWdlID09IE5VTEwpOworCisg
ICAgICAgICAgICBpbnQgc3RyZWFtID0gaTsKKworICAgICAgICAgICAgaWYgKGluc3RhbmNlcyA+
IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gRHVlIHRvIGEgYnVnIG9uIEFU
SSBjYXJkcyB3ZSBjYW4ndCBlbmFibGUgaW5zdGFuY2luZyB3aGVuIG5vbmUgb2YgdGhlIGF0dHJp
YnV0ZXMgYXJlIGluc3RhbmNlZC4KKyAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2VkQXR0cmli
dXRlID09IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAqcmVwZWF0RHJhdyA9IGluc3RhbmNlczsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGkgPT0gaW5kZXhlZEF0dHJpYnV0ZSkKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtID0gMDsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpID09IDApCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9IGluZGV4ZWRBdHRyaWJ1dGU7
CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBVSU5UIGZyZXF1
ZW5jeSA9IDE7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAo
YXR0cmlidXRlc1tpXS5kaXZpc29yID09IDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZyZXF1ZW5jeSA9IEQzRFNUUkVBTVNPVVJDRV9JTkRFWEVEREFU
QSB8IGluc3RhbmNlczsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZy
ZXF1ZW5jeSA9IEQzRFNUUkVBTVNPVVJDRV9JTlNUQU5DRURBVEEgfCBhdHRyaWJ1dGVzW2ldLmRp
dmlzb3I7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShzdHJlYW0sIGZyZXF1
ZW5jeSk7CisgICAgICAgICAgICAgICAgICAgIG1JbnN0YW5jaW5nRW5hYmxlZCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBWZXJ0ZXhCdWZm
ZXI5ICp2ZXJ0ZXhCdWZmZXIgPSBWZXJ0ZXhCdWZmZXI5OjptYWtlVmVydGV4QnVmZmVyOShhdHRy
aWJ1dGVzW2ldLnZlcnRleEJ1ZmZlcik7CisKKyAgICAgICAgICAgIGlmIChtQXBwbGllZFZCc1tz
dHJlYW1dLnNlcmlhbCAhPSBhdHRyaWJ1dGVzW2ldLnNlcmlhbCB8fAorICAgICAgICAgICAgICAg
IG1BcHBsaWVkVkJzW3N0cmVhbV0uc3RyaWRlICE9IGF0dHJpYnV0ZXNbaV0uc3RyaWRlIHx8Cisg
ICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5vZmZzZXQgIT0gYXR0cmlidXRlc1tp
XS5vZmZzZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRTdHJl
YW1Tb3VyY2Uoc3RyZWFtLCB2ZXJ0ZXhCdWZmZXItPmdldEJ1ZmZlcigpLCBhdHRyaWJ1dGVzW2ld
Lm9mZnNldCwgYXR0cmlidXRlc1tpXS5zdHJpZGUpOworICAgICAgICAgICAgICAgIG1BcHBsaWVk
VkJzW3N0cmVhbV0uc2VyaWFsID0gYXR0cmlidXRlc1tpXS5zZXJpYWw7CisgICAgICAgICAgICAg
ICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5zdHJpZGUgPSBhdHRyaWJ1dGVzW2ldLnN0cmlkZTsKKyAg
ICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJlYW1dLm9mZnNldCA9IGF0dHJpYnV0ZXNbaV0u
b2Zmc2V0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbGVtZW50LT5TdHJlYW0gPSBz
dHJlYW07CisgICAgICAgICAgICBlbGVtZW50LT5PZmZzZXQgPSAwOworICAgICAgICAgICAgZWxl
bWVudC0+VHlwZSA9IGF0dHJpYnV0ZXNbaV0uYXR0cmlidXRlLT5tQXJyYXlFbmFibGVkID8gdmVy
dGV4QnVmZmVyLT5nZXREZWNsVHlwZSgqYXR0cmlidXRlc1tpXS5hdHRyaWJ1dGUpIDogRDNEREVD
TFRZUEVfRkxPQVQ0OworICAgICAgICAgICAgZWxlbWVudC0+TWV0aG9kID0gRDNEREVDTE1FVEhP
RF9ERUZBVUxUOworICAgICAgICAgICAgZWxlbWVudC0+VXNhZ2UgPSBEM0RERUNMVVNBR0VfVEVY
Q09PUkQ7CisgICAgICAgICAgICBlbGVtZW50LT5Vc2FnZUluZGV4ID0gcHJvZ3JhbUJpbmFyeS0+
Z2V0U2VtYW50aWNJbmRleChpKTsKKyAgICAgICAgICAgIGVsZW1lbnQrKzsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBpbnN0YW5jZWRBdHRyaWJ1dGUgPT0g
Z2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICB7CisgICAgICAgIGlmIChtSW5zdGFuY2luZ0Vu
YWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ2w6Ok1B
WF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRl
dmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpLCAxKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgbUluc3RhbmNpbmdFbmFibGVkID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBzdGF0aWMgY29uc3QgRDNEVkVSVEVYRUxFTUVOVDkgZW5kID0gRDNEREVDTF9FTkQoKTsKKyAg
ICAqKGVsZW1lbnQrKykgPSBlbmQ7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9WRVJU
RVhfREVDTF9DQUNIRV9FTlRSSUVTOyBpKyspCisgICAgeworICAgICAgICBWZXJ0ZXhEZWNsQ2Fj
aGVFbnRyeSAqZW50cnkgPSAmbVZlcnRleERlY2xDYWNoZVtpXTsKKyAgICAgICAgaWYgKG1lbWNt
cChlbnRyeS0+Y2FjaGVkRWxlbWVudHMsIGVsZW1lbnRzLCAoZWxlbWVudCAtIGVsZW1lbnRzKSAq
IHNpemVvZihEM0RWRVJURVhFTEVNRU5UOSkpID09IDAgJiYgZW50cnktPnZlcnRleERlY2xhcmF0
aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBlbnRyeS0+bHJ1Q291bnQgPSArK21NYXhMcnU7
CisgICAgICAgICAgICBpZihlbnRyeS0+dmVydGV4RGVjbGFyYXRpb24gIT0gbUxhc3RTZXRWRGVj
bCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFZlcnRleERlY2xh
cmF0aW9uKGVudHJ5LT52ZXJ0ZXhEZWNsYXJhdGlvbik7CisgICAgICAgICAgICAgICAgbUxhc3RT
ZXRWRGVjbCA9IGVudHJ5LT52ZXJ0ZXhEZWNsYXJhdGlvbjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgcmV0dXJuIEdMX05PX0VSUk9SOworICAgICAgICB9CisgICAgfQorCisgICAgVmVy
dGV4RGVjbENhY2hlRW50cnkgKmxhc3RDYWNoZSA9IG1WZXJ0ZXhEZWNsQ2FjaGU7CisKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IE5VTV9WRVJURVhfREVDTF9DQUNIRV9FTlRSSUVTOyBpKyspCisg
ICAgeworICAgICAgICBpZiAobVZlcnRleERlY2xDYWNoZVtpXS5scnVDb3VudCA8IGxhc3RDYWNo
ZS0+bHJ1Q291bnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxhc3RDYWNoZSA9ICZtVmVydGV4
RGVjbENhY2hlW2ldOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGxhc3RDYWNoZS0+dmVy
dGV4RGVjbGFyYXRpb24gIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGxhc3RDYWNoZS0+dmVydGV4
RGVjbGFyYXRpb24tPlJlbGVhc2UoKTsKKyAgICAgICAgbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJh
dGlvbiA9IE5VTEw7CisgICAgICAgIC8vIG1MYXN0U2V0VkRlY2wgaXMgc2V0IHRvIHRoZSByZXBs
YWNlbWVudCwgc28gd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeQorICAgICAgICAvLyBhYm91dCBpdC4K
KyAgICB9CisKKyAgICBtZW1jcHkobGFzdENhY2hlLT5jYWNoZWRFbGVtZW50cywgZWxlbWVudHMs
IChlbGVtZW50IC0gZWxlbWVudHMpICogc2l6ZW9mKEQzRFZFUlRFWEVMRU1FTlQ5KSk7CisgICAg
ZGV2aWNlLT5DcmVhdGVWZXJ0ZXhEZWNsYXJhdGlvbihlbGVtZW50cywgJmxhc3RDYWNoZS0+dmVy
dGV4RGVjbGFyYXRpb24pOworICAgIGRldmljZS0+U2V0VmVydGV4RGVjbGFyYXRpb24obGFzdENh
Y2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbik7CisgICAgbUxhc3RTZXRWRGVjbCA9IGxhc3RDYWNoZS0+
dmVydGV4RGVjbGFyYXRpb247CisgICAgbGFzdENhY2hlLT5scnVDb3VudCA9ICsrbU1heExydTsK
KworICAgIHJldHVybiBHTF9OT19FUlJPUjsKK30KKwordm9pZCBWZXJ0ZXhEZWNsYXJhdGlvbkNh
Y2hlOjptYXJrU3RhdGVEaXJ0eSgpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBnbDo6TUFY
X1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgeworICAgICAgICBtQXBwbGllZFZCc1tpXS5zZXJp
YWwgPSAwOworICAgIH0KKworICAgIG1MYXN0U2V0VkRlY2wgPSBOVUxMOworICAgIG1JbnN0YW5j
aW5nRW5hYmxlZCA9IHRydWU7ICAgLy8gRm9yY2VzIGl0IHRvIGJlIGRpc2FibGVkIHdoZW4gbm90
IHVzZWQKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleERlY2xhcmF0aW9uQ2FjaGUuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhEZWNsYXJh
dGlvbkNhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2ZjMDI0YTliYWI0OGIxOWMwNmFiOTc1NzBlOGI1ZDU0
ODcxMzE4NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmgKQEAgLTAsMCAr
MSw1OCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFZlcnRleERlY2xhcmF0aW9uQ2FjaGUuaDogRGVm
aW5lcyBhIGhlbHBlciBjbGFzcyB0byBjb25zdHJ1Y3QgYW5kIGNhY2hlIHZlcnRleCBkZWNsYXJh
dGlvbnMuCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX1ZFUlRFWERFQ0xBUkFUSU9OQ0FD
SEVfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1ZFUlRFWERFQ0xBUkFUSU9OQ0FDSEVf
SF8KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhEYXRhTWFuYWdlci5oIgor
CituYW1lc3BhY2UgZ2wKK3sKK2NsYXNzIFZlcnRleERhdGFNYW5hZ2VyOworfQorCituYW1lc3Bh
Y2UgcngKK3sKKworY2xhc3MgVmVydGV4RGVjbGFyYXRpb25DYWNoZQoreworICBwdWJsaWM6Cisg
ICAgVmVydGV4RGVjbGFyYXRpb25DYWNoZSgpOworICAgIH5WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hl
KCk7CisKKyAgICBHTGVudW0gYXBwbHlEZWNsYXJhdGlvbihJRGlyZWN0M0REZXZpY2U5ICpkZXZp
Y2UsIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0cmlidXRlc1tdLCBnbDo6UHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSwgR0xzaXplaSBpbnN0YW5jZXMsIEdMc2l6ZWkgKnJlcGVhdERyYXcpOwor
CisgICAgdm9pZCBtYXJrU3RhdGVEaXJ0eSgpOworCisgIHByaXZhdGU6CisgICAgVUlOVCBtTWF4
THJ1OworCisgICAgZW51bSB7IE5VTV9WRVJURVhfREVDTF9DQUNIRV9FTlRSSUVTID0gMzIgfTsK
KworICAgIHN0cnVjdCBWQkRhdGEKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBzZXJpYWw7
CisgICAgICAgIHVuc2lnbmVkIGludCBzdHJpZGU7CisgICAgICAgIHVuc2lnbmVkIGludCBvZmZz
ZXQ7CisgICAgfTsKKworICAgIFZCRGF0YSBtQXBwbGllZFZCc1tnbDo6TUFYX1ZFUlRFWF9BVFRS
SUJTXTsKKyAgICBJRGlyZWN0M0RWZXJ0ZXhEZWNsYXJhdGlvbjkgKm1MYXN0U2V0VkRlY2w7Cisg
ICAgYm9vbCBtSW5zdGFuY2luZ0VuYWJsZWQ7CisKKyAgICBzdHJ1Y3QgVmVydGV4RGVjbENhY2hl
RW50cnkKKyAgICB7CisgICAgICAgIEQzRFZFUlRFWEVMRU1FTlQ5IGNhY2hlZEVsZW1lbnRzW2ds
OjpNQVhfVkVSVEVYX0FUVFJJQlMgKyAxXTsKKyAgICAgICAgVUlOVCBscnVDb3VudDsKKyAgICAg
ICAgSURpcmVjdDNEVmVydGV4RGVjbGFyYXRpb245ICp2ZXJ0ZXhEZWNsYXJhdGlvbjsKKyAgICB9
IG1WZXJ0ZXhEZWNsQ2FjaGVbTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVNdOworfTsKKwor
fQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1ZFUlRFWERFQ0xBUkFUSU9OQ0FDSEVf
SF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9yZW5kZXJlcjlfdXRpbHMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYjdmMmZmYjFkOWEzY2MzZmRhY2RmNDM3YzM1YmU0ZDU4YzdhODIxNgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
OS9yZW5kZXJlcjlfdXRpbHMuY3BwCkBAIC0wLDAgKzEsNTAwIEBACisjaW5jbHVkZSAicHJlY29t
cGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIHJlbmRlcmVyOV91dGlscy5jcHA6IENv
bnZlcnNpb24gZnVuY3Rpb25zIGFuZCBvdGhlciB1dGlsaXR5IHJvdXRpbmVzCisvLyBzcGVjaWZp
YyB0byB0aGUgRDNEOSByZW5kZXJlci4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L3JlbmRlcmVyOV91dGlscy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgor
I2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisKKyNpbmNsdWRlICJjb21tb24vZGVidWcu
aCIKKworbmFtZXNwYWNlIGdsX2QzZDkKK3sKKworRDNEQ01QRlVOQyBDb252ZXJ0Q29tcGFyaXNv
bihHTGVudW0gY29tcGFyaXNvbikKK3sKKyAgICBEM0RDTVBGVU5DIGQzZENvbXAgPSBEM0RDTVBf
QUxXQVlTOworICAgIHN3aXRjaCAoY29tcGFyaXNvbikKKyAgICB7CisgICAgICBjYXNlIEdMX05F
VkVSOiAgICBkM2RDb21wID0gRDNEQ01QX05FVkVSOyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX0FMV0FZUzogICBkM2RDb21wID0gRDNEQ01QX0FMV0FZUzsgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX0xFU1M6ICAgICBkM2RDb21wID0gRDNEQ01QX0xFU1M7ICAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX0xFUVVBTDogICBkM2RDb21wID0gRDNEQ01QX0xFU1NFUVVBTDsgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX0VRVUFMOiAgICBkM2RDb21wID0gRDNEQ01QX0VRVUFMOyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0dSRUFURVI6ICBkM2RDb21wID0gRDNEQ01QX0dS
RUFURVI7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0dFUVVBTDogICBkM2RDb21wID0gRDNE
Q01QX0dSRUFURVJFUVVBTDsgYnJlYWs7CisgICAgICBjYXNlIEdMX05PVEVRVUFMOiBkM2RDb21w
ID0gRDNEQ01QX05PVEVRVUFMOyAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOworICAgIH0KKworICAgIHJldHVybiBkM2RDb21wOworfQorCitEM0RDT0xPUiBDb252ZXJ0
Q29sb3IoZ2w6OkNvbG9yIGNvbG9yKQoreworICAgIHJldHVybiBEM0RDT0xPUl9SR0JBKGdsOjp1
bm9ybTw4Pihjb2xvci5yZWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4
Pihjb2xvci5ncmVlbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNv
bG9yLmJsdWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4Pihjb2xvci5h
bHBoYSkpOworfQorCitEM0RCTEVORCBDb252ZXJ0QmxlbmRGdW5jKEdMZW51bSBibGVuZCkKK3sK
KyAgICBEM0RCTEVORCBkM2RCbGVuZCA9IEQzREJMRU5EX1pFUk87CisKKyAgICBzd2l0Y2ggKGJs
ZW5kKQorICAgIHsKKyAgICAgIGNhc2UgR0xfWkVSTzogICAgICAgICAgICAgICAgICAgICBkM2RC
bGVuZCA9IEQzREJMRU5EX1pFUk87ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05F
OiAgICAgICAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX09ORTsgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1JDX0NPTE9SOiAgICAgICAgICAgICAgICBkM2RCbGVu
ZCA9IEQzREJMRU5EX1NSQ0NPTE9SOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01J
TlVTX1NSQ19DT0xPUjogICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVlNSQ0NPTE9SOyAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfRFNUX0NPTE9SOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9
IEQzREJMRU5EX0RFU1RDT0xPUjsgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVT
X0RTVF9DT0xPUjogICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVkRFU1RDT0xPUjsgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfU1JDX0FMUEhBOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQz
REJMRU5EX1NSQ0FMUEhBOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NS
Q19BTFBIQTogICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVlNSQ0FMUEhBOyAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfRFNUX0FMUEhBOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJM
RU5EX0RFU1RBTFBIQTsgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9B
TFBIQTogICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVkRFU1RBTFBIQTsgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfQ09OU1RBTlRfQ09MT1I6ICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5E
X0JMRU5ERkFDVE9SOyAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5U
X0NPTE9SOiBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVkJMRU5ERkFDVE9SOyBicmVhazsKKyAgICAg
IGNhc2UgR0xfQ09OU1RBTlRfQUxQSEE6ICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0JM
RU5ERkFDVE9SOyAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0FM
UEhBOiBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVkJMRU5ERkFDVE9SOyBicmVhazsKKyAgICAgIGNh
c2UgR0xfU1JDX0FMUEhBX1NBVFVSQVRFOiAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX1NSQ0FM
UEhBU0FUOyAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQor
CisgICAgcmV0dXJuIGQzZEJsZW5kOworfQorCitEM0RCTEVORE9QIENvbnZlcnRCbGVuZE9wKEdM
ZW51bSBibGVuZE9wKQoreworICAgIEQzREJMRU5ET1AgZDNkQmxlbmRPcCA9IEQzREJMRU5ET1Bf
QUREOworCisgICAgc3dpdGNoIChibGVuZE9wKQorICAgIHsKKyAgICAgIGNhc2UgR0xfRlVOQ19B
REQ6ICAgICAgICAgICAgICBkM2RCbGVuZE9wID0gRDNEQkxFTkRPUF9BREQ7ICAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX0ZVTkNfU1VCVFJBQ1Q6ICAgICAgICAgZDNkQmxlbmRPcCA9IEQz
REJMRU5ET1BfU1VCVFJBQ1Q7ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GVU5DX1JFVkVSU0Vf
U1VCVFJBQ1Q6IGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX1JFVlNVQlRSQUNUOyBicmVhazsKKyAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIGQzZEJsZW5k
T3A7Cit9CisKK0QzRFNURU5DSUxPUCBDb252ZXJ0U3RlbmNpbE9wKEdMZW51bSBzdGVuY2lsT3Ap
Cit7CisgICAgRDNEU1RFTkNJTE9QIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9LRUVQOwor
CisgICAgc3dpdGNoIChzdGVuY2lsT3ApCisgICAgeworICAgICAgY2FzZSBHTF9aRVJPOiAgICAg
IGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9aRVJPOyAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfS0VFUDogICAgICBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfS0VFUDsgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX1JFUExBQ0U6ICAgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX1JF
UExBQ0U7IGJyZWFrOworICAgICAgY2FzZSBHTF9JTkNSOiAgICAgIGQzZFN0ZW5jaWxPcCA9IEQz
RFNURU5DSUxPUF9JTkNSU0FUOyBicmVhazsKKyAgICAgIGNhc2UgR0xfREVDUjogICAgICBkM2RT
dGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfREVDUlNBVDsgYnJlYWs7CisgICAgICBjYXNlIEdMX0lO
VkVSVDogICAgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0lOVkVSVDsgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9JTkNSX1dSQVA6IGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9JTkNSOyAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfREVDUl9XUkFQOiBkM2RTdGVuY2lsT3AgPSBEM0RTVEVO
Q0lMT1BfREVDUjsgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAg
IH0KKworICAgIHJldHVybiBkM2RTdGVuY2lsT3A7Cit9CisKK0QzRFRFWFRVUkVBRERSRVNTIENv
bnZlcnRUZXh0dXJlV3JhcChHTGVudW0gd3JhcCkKK3sKKyAgICBEM0RURVhUVVJFQUREUkVTUyBk
M2RXcmFwID0gRDNEVEFERFJFU1NfV1JBUDsKKworICAgIHN3aXRjaCAod3JhcCkKKyAgICB7Cisg
ICAgICBjYXNlIEdMX1JFUEVBVDogICAgICAgICAgICBkM2RXcmFwID0gRDNEVEFERFJFU1NfV1JB
UDsgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQ0xBTVBfVE9fRURHRTogICAgIGQzZFdyYXAgPSBE
M0RUQUREUkVTU19DTEFNUDsgIGJyZWFrOworICAgICAgY2FzZSBHTF9NSVJST1JFRF9SRVBFQVQ6
ICAgZDNkV3JhcCA9IEQzRFRBRERSRVNTX01JUlJPUjsgYnJlYWs7CisgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBkM2RXcmFwOworfQorCitEM0RDVUxM
IENvbnZlcnRDdWxsTW9kZShHTGVudW0gY3VsbEZhY2UsIEdMZW51bSBmcm9udEZhY2UpCit7Cisg
ICAgRDNEQ1VMTCBjdWxsID0gRDNEQ1VMTF9DQ1c7CisgICAgc3dpdGNoIChjdWxsRmFjZSkKKyAg
ICB7CisgICAgICBjYXNlIEdMX0ZST05UOgorICAgICAgICBjdWxsID0gKGZyb250RmFjZSA9PSBH
TF9DQ1cgPyBEM0RDVUxMX0NXIDogRDNEQ1VMTF9DQ1cpOworICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfQkFDSzoKKyAgICAgICAgY3VsbCA9IChmcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNE
Q1VMTF9DQ1cgOiBEM0RDVUxMX0NXKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZS
T05UX0FORF9CQUNLOgorICAgICAgICBjdWxsID0gRDNEQ1VMTF9OT05FOyAvLyBjdWxsaW5nIHdp
bGwgYmUgaGFuZGxlZCBkdXJpbmcgZHJhdworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIGN1bGw7Cit9CisKK0QzRENVQkVN
QVBfRkFDRVMgQ29udmVydEN1YmVGYWNlKEdMZW51bSBjdWJlRmFjZSkKK3sKKyAgICBEM0RDVUJF
TUFQX0ZBQ0VTIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfUE9TSVRJVkVfWDsKKworICAgIHN3aXRj
aCAoY3ViZUZhY2UpCisgICAgeworICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1g6CisgICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfUE9TSVRJVkVfWDsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAg
ICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9ORUdBVElWRV9YOworICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgICAgICBmYWNl
ID0gRDNEQ1VCRU1BUF9GQUNFX1BPU0lUSVZFX1k7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgICAgIGZhY2UgPSBEM0RDVUJF
TUFQX0ZBQ0VfTkVHQVRJVkVfWTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9Q
T1NJVElWRV9aOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9aOgorICAgICAgICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX05FR0FUSVZFX1o7
CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisK
KyAgICByZXR1cm4gZmFjZTsKK30KKworRFdPUkQgQ29udmVydENvbG9yTWFzayhib29sIHJlZCwg
Ym9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKQoreworICAgIHJldHVybiAocmVkICAg
PyBEM0RDT0xPUldSSVRFRU5BQkxFX1JFRCAgIDogMCkgfAorICAgICAgICAgICAoZ3JlZW4gPyBE
M0RDT0xPUldSSVRFRU5BQkxFX0dSRUVOIDogMCkgfAorICAgICAgICAgICAoYmx1ZSAgPyBEM0RD
T0xPUldSSVRFRU5BQkxFX0JMVUUgIDogMCkgfAorICAgICAgICAgICAoYWxwaGEgPyBEM0RDT0xP
UldSSVRFRU5BQkxFX0FMUEhBIDogMCk7Cit9CisKK0QzRFRFWFRVUkVGSUxURVJUWVBFIENvbnZl
cnRNYWdGaWx0ZXIoR0xlbnVtIG1hZ0ZpbHRlciwgZmxvYXQgbWF4QW5pc290cm9weSkKK3sKKyAg
ICBpZiAobWF4QW5pc290cm9weSA+IDEuMGYpCisgICAgeworICAgICAgICByZXR1cm4gRDNEVEVY
Rl9BTklTT1RST1BJQzsKKyAgICB9CisKKyAgICBEM0RURVhUVVJFRklMVEVSVFlQRSBkM2RNYWdG
aWx0ZXIgPSBEM0RURVhGX1BPSU5UOworICAgIHN3aXRjaCAobWFnRmlsdGVyKQorICAgIHsKKyAg
ICAgIGNhc2UgR0xfTkVBUkVTVDogZDNkTWFnRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsgIGJyZWFr
OworICAgICAgY2FzZSBHTF9MSU5FQVI6ICBkM2RNYWdGaWx0ZXIgPSBEM0RURVhGX0xJTkVBUjsg
YnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVy
biBkM2RNYWdGaWx0ZXI7Cit9CisKK3ZvaWQgQ29udmVydE1pbkZpbHRlcihHTGVudW0gbWluRmls
dGVyLCBEM0RURVhUVVJFRklMVEVSVFlQRSAqZDNkTWluRmlsdGVyLCBEM0RURVhUVVJFRklMVEVS
VFlQRSAqZDNkTWlwRmlsdGVyLCBmbG9hdCBtYXhBbmlzb3Ryb3B5KQoreworICAgIHN3aXRjaCAo
bWluRmlsdGVyKQorICAgIHsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVDoKKyAgICAgICAgKmQzZE1p
bkZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7CisgICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhG
X05PTkU7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MSU5FQVI6CisgICAgICAgICpk
M2RNaW5GaWx0ZXIgPSBEM0RURVhGX0xJTkVBUjsKKyAgICAgICAgKmQzZE1pcEZpbHRlciA9IEQz
RFRFWEZfTk9ORTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQ
X05FQVJFU1Q6CisgICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX1BPSU5UOworICAgICAg
ICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKKyAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX0xJTkVBUl9NSVBNQVBfTkVBUkVTVDoKKyAgICAgICAgKmQzZE1pbkZpbHRlciA9IEQz
RFRFWEZfTElORUFSOworICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjoKKyAgICAg
ICAgKmQzZE1pbkZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7CisgICAgICAgICpkM2RNaXBGaWx0ZXIg
PSBEM0RURVhGX0xJTkVBUjsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xJTkVBUl9N
SVBNQVBfTElORUFSOgorICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9MSU5FQVI7Cisg
ICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX0xJTkVBUjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBkZWZhdWx0OgorICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKKyAg
ICAgICAgKmQzZE1pcEZpbHRlciA9IEQzRFRFWEZfTk9ORTsKKyAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICB9CisKKyAgICBpZiAobWF4QW5pc290cm9weSA+IDEuMGYpCisgICAgeworICAgICAg
ICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9BTklTT1RST1BJQzsKKyAgICB9Cit9CisKK0QzREZP
Uk1BVCBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdMZW51bSBmb3JtYXQpCit7CisgICAgc3dp
dGNoIChmb3JtYXQpCisgICAgeworICAgICAgY2FzZSBHTF9OT05FOiAgICAgICAgICAgICAgICAg
cmV0dXJuIEQzREZNVF9OVUxMOworICAgICAgY2FzZSBHTF9SR0JBNDoKKyAgICAgIGNhc2UgR0xf
UkdCNV9BMToKKyAgICAgIGNhc2UgR0xfUkdCQThfT0VTOiAgICAgICAgICAgIHJldHVybiBEM0RG
TVRfQThSOEc4Qjg7CisgICAgICBjYXNlIEdMX1JHQjU2NTogICAgICAgICAgICAgICByZXR1cm4g
RDNERk1UX1I1RzZCNTsKKyAgICAgIGNhc2UgR0xfUkdCOF9PRVM6ICAgICAgICAgICAgIHJldHVy
biBEM0RGTVRfWDhSOEc4Qjg7CisgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgorICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVYODogICAgICAgCisgICAgICBjYXNlIEdMX0RFUFRIMjRf
U1RFTkNJTDhfT0VTOiByZXR1cm4gRDNERk1UX0QyNFM4OworICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKKyAgICB9Cit9CisKK0QzRE1V
TFRJU0FNUExFX1RZUEUgR2V0TXVsdGlzYW1wbGVUeXBlRnJvbVNhbXBsZXMoR0xzaXplaSBzYW1w
bGVzKQoreworICAgIGlmIChzYW1wbGVzIDw9IDEpCisgICAgICAgIHJldHVybiBEM0RNVUxUSVNB
TVBMRV9OT05FOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIChEM0RNVUxUSVNBTVBMRV9UWVBF
KXNhbXBsZXM7Cit9CisKK30KKworbmFtZXNwYWNlIGQzZDlfZ2wKK3sKKwordW5zaWduZWQgaW50
IEdldFN0ZW5jaWxTaXplKEQzREZPUk1BVCBzdGVuY2lsRm9ybWF0KQoreworICAgIGlmIChzdGVu
Y2lsRm9ybWF0ID09IEQzREZNVF9JTlRaKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDg7CisgICAg
fQorICAgIHN3aXRjaChzdGVuY2lsRm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRDNERk1UX0Qy
NEZTODoKKyAgICAgIGNhc2UgRDNERk1UX0QyNFM4OgorICAgICAgICByZXR1cm4gODsKKyAgICAg
IGNhc2UgRDNERk1UX0QyNFg0UzQ6CisgICAgICAgIHJldHVybiA0OworICAgICAgY2FzZSBEM0RG
TVRfRDE1UzE6CisgICAgICAgIHJldHVybiAxOworICAgICAgY2FzZSBEM0RGTVRfRDE2X0xPQ0tB
QkxFOgorICAgICAgY2FzZSBEM0RGTVRfRDMyOgorICAgICAgY2FzZSBEM0RGTVRfRDI0WDg6Cisg
ICAgICBjYXNlIEQzREZNVF9EMzJGX0xPQ0tBQkxFOgorICAgICAgY2FzZSBEM0RGTVRfRDE2Ogor
ICAgICAgICByZXR1cm4gMDsKKyAgICAvL2Nhc2UgRDNERk1UX0QzMl9MT0NLQUJMRTogIHJldHVy
biAwOyAgIC8vIERpcmVjdFggOUV4IG9ubHkKKyAgICAvL2Nhc2UgRDNERk1UX1M4X0xPQ0tBQkxF
OiAgIHJldHVybiA4OyAgIC8vIERpcmVjdFggOUV4IG9ubHkKKyAgICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KK30KKwordW5zaWduZWQgaW50IEdldEFscGhhU2l6ZShEM0RG
T1JNQVQgY29sb3JGb3JtYXQpCit7CisgICAgc3dpdGNoIChjb2xvckZvcm1hdCkKKyAgICB7Cisg
ICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgorICAgICAgICByZXR1cm4gMTY7CisgICAg
ICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgorICAgICAgICByZXR1cm4gMzI7CisgICAgICBj
YXNlIEQzREZNVF9BMlIxMEcxMEIxMDoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgICBjYXNlIEQz
REZNVF9BOFI4RzhCODoKKyAgICAgICAgcmV0dXJuIDg7CisgICAgICBjYXNlIEQzREZNVF9BMVI1
RzVCNToKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKKyAg
ICAgIGNhc2UgRDNERk1UX1I1RzZCNToKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK0dMc2l6ZWkgR2V0U2FtcGxlc0Zyb21N
dWx0aXNhbXBsZVR5cGUoRDNETVVMVElTQU1QTEVfVFlQRSB0eXBlKQoreworICAgIGlmICh0eXBl
ID09IEQzRE1VTFRJU0FNUExFX05PTk1BU0tBQkxFKQorICAgICAgICByZXR1cm4gMDsKKyAgICBl
bHNlCisgICAgICAgIHJldHVybiB0eXBlOworfQorCitib29sIElzRm9ybWF0Q2hhbm5lbEVxdWl2
YWxlbnQoRDNERk9STUFUIGQzZGZvcm1hdCwgR0xlbnVtIGZvcm1hdCkKK3sKKyAgICBzd2l0Y2gg
KGQzZGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEQzREZNVF9MODoKKyAgICAgICAgcmV0dXJu
IChmb3JtYXQgPT0gR0xfTFVNSU5BTkNFKTsKKyAgICAgIGNhc2UgRDNERk1UX0E4TDg6CisgICAg
ICAgIHJldHVybiAoZm9ybWF0ID09IEdMX0xVTUlOQU5DRV9BTFBIQSk7CisgICAgICBjYXNlIEQz
REZNVF9EWFQxOgorICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFf
UzNUQ19EWFQxX0VYVCB8fCBmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VY
VCk7CisgICAgICBjYXNlIEQzREZNVF9EWFQzOgorICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBH
TF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFKTsKKyAgICAgIGNhc2UgRDNERk1UX0RY
VDU6CisgICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RY
VDVfQU5HTEUpOworICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6CisgICAgICBjYXNlIEQzREZN
VF9BMTZCMTZHMTZSMTZGOgorICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKKyAgICAg
ICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfUkdCQSB8fCBmb3JtYXQgPT0gR0xfQkdSQV9FWFQpOwor
ICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6CisgICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdM
X1JHQik7CisgICAgICBkZWZhdWx0OgorICAgICAgICBpZiAoZDNkZm9ybWF0ID09IEQzREZNVF9J
TlRaICYmIGdsOjpJc0RlcHRoVGV4dHVyZShmb3JtYXQpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK0dMZW51bSBDb252ZXJ0QmFj
a0J1ZmZlckZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KQor
ICAgIHsKKyAgICAgIGNhc2UgRDNERk1UX0E0UjRHNEI0OiByZXR1cm4gR0xfUkdCQTQ7CisgICAg
ICBjYXNlIEQzREZNVF9BOFI4RzhCODogcmV0dXJuIEdMX1JHQkE4X09FUzsKKyAgICAgIGNhc2Ug
RDNERk1UX0ExUjVHNUI1OiByZXR1cm4gR0xfUkdCNV9BMTsKKyAgICAgIGNhc2UgRDNERk1UX1I1
RzZCNTogICByZXR1cm4gR0xfUkdCNTY1OworICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6IHJl
dHVybiBHTF9SR0I4X09FUzsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7
CisgICAgfQorCisgICAgcmV0dXJuIEdMX1JHQkE0OworfQorCitHTGVudW0gQ29udmVydERlcHRo
U3RlbmNpbEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KQoreworICAgIGlmIChmb3JtYXQgPT0gRDNE
Rk1UX0lOVFopCisgICAgeworICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7
CisgICAgfQorICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRDNERk1UX0Qx
NjoKKyAgICAgIGNhc2UgRDNERk1UX0QyNFg4OgorICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09N
UE9ORU5UMTY7CisgICAgICBjYXNlIEQzREZNVF9EMjRTODoKKyAgICAgICAgcmV0dXJuIEdMX0RF
UFRIMjRfU1RFTkNJTDhfT0VTOworICAgICAgY2FzZSBEM0RGTVRfVU5LTk9XTjoKKyAgICAgICAg
cmV0dXJuIEdMX05PTkU7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOwor
ICAgIH0KKworICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKK30KKworR0xlbnVt
IENvbnZlcnRSZW5kZXJUYXJnZXRGb3JtYXQoRDNERk9STUFUIGZvcm1hdCkKK3sKKyAgICBpZiAo
Zm9ybWF0ID09IEQzREZNVF9JTlRaKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRf
U1RFTkNJTDhfT0VTOworICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICB7Cisg
ICAgICBjYXNlIEQzREZNVF9BNFI0RzRCNDogcmV0dXJuIEdMX1JHQkE0OworICAgICAgY2FzZSBE
M0RGTVRfQThSOEc4Qjg6IHJldHVybiBHTF9SR0JBOF9PRVM7CisgICAgICBjYXNlIEQzREZNVF9B
MVI1RzVCNTogcmV0dXJuIEdMX1JHQjVfQTE7CisgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6ICAg
cmV0dXJuIEdMX1JHQjU2NTsKKyAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OiByZXR1cm4gR0xf
UkdCOF9PRVM7CisgICAgICBjYXNlIEQzREZNVF9EMTY6CisgICAgICBjYXNlIEQzREZNVF9EMjRY
ODoKKyAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2OworICAgICAgY2FzZSBEM0RG
TVRfRDI0Uzg6CisgICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKKyAgICAg
IGNhc2UgRDNERk1UX1VOS05PV046CisgICAgICAgIHJldHVybiBHTF9OT05FOworICAgICAgZGVm
YXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfUkdC
QTQ7Cit9CisKK0dMZW51bSBHZXRFcXVpdmFsZW50Rm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpCit7
CisgICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfSU5UWikKKyAgICAgICAgcmV0dXJuIEdMX0RFUFRI
MjRfU1RFTkNJTDhfT0VTOworICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX05VTEwpCisgICAgICAg
IHJldHVybiBHTF9OT05FOworCisgICAgc3dpdGNoIChmb3JtYXQpCisgICAgeworICAgICAgY2Fz
ZSBEM0RGTVRfQTRSNEc0QjQ6ICAgICAgICAgICAgIHJldHVybiBHTF9SR0JBNDsKKyAgICAgIGNh
c2UgRDNERk1UX0E4UjhHOEI4OiAgICAgICAgICAgICByZXR1cm4gR0xfUkdCQThfT0VTOworICAg
ICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6ICAgICAgICAgICAgIHJldHVybiBHTF9SR0I1X0ExOwor
ICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OiAgICAgICAgICAgICAgIHJldHVybiBHTF9SR0I1NjU7
CisgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODogICAgICAgICAgICAgcmV0dXJuIEdMX1JHQjhf
T0VTOworICAgICAgY2FzZSBEM0RGTVRfRDE2OiAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9E
RVBUSF9DT01QT05FTlQxNjsKKyAgICAgIGNhc2UgRDNERk1UX0QyNFM4OiAgICAgICAgICAgICAg
ICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7CisgICAgICBjYXNlIEQzREZNVF9VTktO
T1dOOiAgICAgICAgICAgICAgcmV0dXJuIEdMX05PTkU7CisgICAgICBjYXNlIEQzREZNVF9EWFQx
OiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhU
OworICAgICAgY2FzZSBEM0RGTVRfRFhUMzogICAgICAgICAgICAgICAgIHJldHVybiBHTF9DT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOworICAgICAgY2FzZSBEM0RGTVRfRFhUNTogICAg
ICAgICAgICAgICAgIHJldHVybiBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOwor
ICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjogICAgICAgIHJldHVybiBHTF9SR0JBMzJG
X0VYVDsKKyAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6ICAgICAgICByZXR1cm4gR0xf
UkdCQTE2Rl9FWFQ7CisgICAgICBjYXNlIEQzREZNVF9MODogICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdMX0xVTUlOQU5DRThfRVhUOworICAgICAgY2FzZSBEM0RGTVRfQThMODogICAgICAgICAg
ICAgICAgIHJldHVybiBHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQ7CisgICAgICBkZWZhdWx0OiAg
ICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIEdMX05PTkU7CisgICAg
fQorfQorCit9CisKK25hbWVzcGFjZSBkM2Q5Cit7CisKK2Jvb2wgSXNDb21wcmVzc2VkRm9ybWF0
KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KQoreworICAgIHN3aXRjaChzdXJmYWNlRm9ybWF0KQor
ICAgIHsKKyAgICAgIGNhc2UgRDNERk1UX0RYVDE6CisgICAgICBjYXNlIEQzREZNVF9EWFQyOgor
ICAgICAgY2FzZSBEM0RGTVRfRFhUMzoKKyAgICAgIGNhc2UgRDNERk1UX0RYVDQ6CisgICAgICBj
YXNlIEQzREZNVF9EWFQ1OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3NpemVfdCBDb21wdXRlUm93U2l6ZShE
M0RGT1JNQVQgZm9ybWF0LCB1bnNpZ25lZCBpbnQgd2lkdGgpCit7CisgICAgaWYgKGZvcm1hdCA9
PSBEM0RGTVRfSU5UWikKKyAgICB7CisgICAgICAgIHJldHVybiA0ICogd2lkdGg7CisgICAgfQor
ICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRDNERk1UX0w4OgorICAgICAg
ICAgIHJldHVybiAxICogd2lkdGg7CisgICAgICBjYXNlIEQzREZNVF9BOEw4OgorICAgICAgICAg
IHJldHVybiAyICogd2lkdGg7CisgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKKyAgICAgIGNh
c2UgRDNERk1UX0E4UjhHOEI4OgorICAgICAgICByZXR1cm4gNCAqIHdpZHRoOworICAgICAgY2Fz
ZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKKyAgICAgICAgcmV0dXJuIDggKiB3aWR0aDsKKyAgICAg
IGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6CisgICAgICAgIHJldHVybiAxNiAqIHdpZHRoOwor
ICAgICAgY2FzZSBEM0RGTVRfRFhUMToKKyAgICAgICAgcmV0dXJuIDggKiAoKHdpZHRoICsgMykg
LyA0KTsKKyAgICAgIGNhc2UgRDNERk1UX0RYVDM6CisgICAgICBjYXNlIEQzREZNVF9EWFQ1Ogor
ICAgICAgICByZXR1cm4gMTYgKiAoKHdpZHRoICsgMykgLyA0KTsKKyAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2Q5L3JlbmRlcmVyOV91dGlscy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmNmNk
ZjFlYTY1NjZmOTEwYTk2ZWUyNTExNGI3YzQ4ZWM4Mzk0NWUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVy
ZXI5X3V0aWxzLmgKQEAgLTAsMCArMSw3NCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gcmVu
ZGVyZXI5X3V0aWxzLmg6IENvbnZlcnNpb24gZnVuY3Rpb25zIGFuZCBvdGhlciB1dGlsaXR5IHJv
dXRpbmVzIAorLy8gc3BlY2lmaWMgdG8gdGhlIEQzRDkgcmVuZGVyZXIKKworI2lmbmRlZiBMSUJH
TEVTVjJfUkVOREVSRVJfUkVOREVSRVI5X1VUSUxTX0gKKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRF
UkVSX1JFTkRFUkVSOV9VVElMU19ICisKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgi
CisKK2NvbnN0IEQzREZPUk1BVCBEM0RGTVRfSU5UWiA9ICgoRDNERk9STUFUKShNQUtFRk9VUkND
KCdJJywnTicsJ1QnLCdaJykpKTsKK2NvbnN0IEQzREZPUk1BVCBEM0RGTVRfTlVMTCA9ICgoRDNE
Rk9STUFUKShNQUtFRk9VUkNDKCdOJywnVScsJ0wnLCdMJykpKTsKKworbmFtZXNwYWNlIGdsX2Qz
ZDkKK3sKKworRDNEQ01QRlVOQyBDb252ZXJ0Q29tcGFyaXNvbihHTGVudW0gY29tcGFyaXNvbik7
CitEM0RDT0xPUiBDb252ZXJ0Q29sb3IoZ2w6OkNvbG9yIGNvbG9yKTsKK0QzREJMRU5EIENvbnZl
cnRCbGVuZEZ1bmMoR0xlbnVtIGJsZW5kKTsKK0QzREJMRU5ET1AgQ29udmVydEJsZW5kT3AoR0xl
bnVtIGJsZW5kT3ApOworRDNEU1RFTkNJTE9QIENvbnZlcnRTdGVuY2lsT3AoR0xlbnVtIHN0ZW5j
aWxPcCk7CitEM0RURVhUVVJFQUREUkVTUyBDb252ZXJ0VGV4dHVyZVdyYXAoR0xlbnVtIHdyYXAp
OworRDNEQ1VMTCBDb252ZXJ0Q3VsbE1vZGUoR0xlbnVtIGN1bGxGYWNlLCBHTGVudW0gZnJvbnRG
YWNlKTsKK0QzRENVQkVNQVBfRkFDRVMgQ29udmVydEN1YmVGYWNlKEdMZW51bSBjdWJlRmFjZSk7
CitEV09SRCBDb252ZXJ0Q29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUs
IGJvb2wgYWxwaGEpOworRDNEVEVYVFVSRUZJTFRFUlRZUEUgQ29udmVydE1hZ0ZpbHRlcihHTGVu
dW0gbWFnRmlsdGVyLCBmbG9hdCBtYXhBbmlzb3Ryb3B5KTsKK3ZvaWQgQ29udmVydE1pbkZpbHRl
cihHTGVudW0gbWluRmlsdGVyLCBEM0RURVhUVVJFRklMVEVSVFlQRSAqZDNkTWluRmlsdGVyLCBE
M0RURVhUVVJFRklMVEVSVFlQRSAqZDNkTWlwRmlsdGVyLCBmbG9hdCBtYXhBbmlzb3Ryb3B5KTsK
K0QzREZPUk1BVCBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdMZW51bSBmb3JtYXQpOworRDNE
TVVMVElTQU1QTEVfVFlQRSBHZXRNdWx0aXNhbXBsZVR5cGVGcm9tU2FtcGxlcyhHTHNpemVpIHNh
bXBsZXMpOworCit9CisKK25hbWVzcGFjZSBkM2Q5X2dsCit7CisKK0dMdWludCBHZXRBbHBoYVNp
emUoRDNERk9STUFUIGNvbG9yRm9ybWF0KTsKK0dMdWludCBHZXRTdGVuY2lsU2l6ZShEM0RGT1JN
QVQgc3RlbmNpbEZvcm1hdCk7CisKK0dMc2l6ZWkgR2V0U2FtcGxlc0Zyb21NdWx0aXNhbXBsZVR5
cGUoRDNETVVMVElTQU1QTEVfVFlQRSB0eXBlKTsKKworYm9vbCBJc0Zvcm1hdENoYW5uZWxFcXVp
dmFsZW50KEQzREZPUk1BVCBkM2Rmb3JtYXQsIEdMZW51bSBmb3JtYXQpOworR0xlbnVtIENvbnZl
cnRCYWNrQnVmZmVyRm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpOworR0xlbnVtIENvbnZlcnREZXB0
aFN0ZW5jaWxGb3JtYXQoRDNERk9STUFUIGZvcm1hdCk7CitHTGVudW0gQ29udmVydFJlbmRlclRh
cmdldEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KTsKK0dMZW51bSBHZXRFcXVpdmFsZW50Rm9ybWF0
KEQzREZPUk1BVCBmb3JtYXQpOworCit9CisKK25hbWVzcGFjZSBkM2Q5Cit7Citib29sIElzQ29t
cHJlc3NlZEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KTsKK3NpemVfdCBDb21wdXRlUm93U2l6ZShE
M0RGT1JNQVQgZm9ybWF0LCB1bnNpZ25lZCBpbnQgd2lkdGgpOworCitpbmxpbmUgYm9vbCBpc0Rl
dmljZUxvc3RFcnJvcihIUkVTVUxUIGVycm9yQ29kZSkKK3sKKyAgICBzd2l0Y2ggKGVycm9yQ29k
ZSkKKyAgICB7CisgICAgICBjYXNlIEQzREVSUl9EUklWRVJJTlRFUk5BTEVSUk9SOgorICAgICAg
Y2FzZSBEM0RFUlJfREVWSUNFTE9TVDoKKyAgICAgIGNhc2UgRDNERVJSX0RFVklDRUhVTkc6Cisg
ICAgICBjYXNlIEQzREVSUl9ERVZJQ0VSRU1PVkVEOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK30KKworI2Vu
ZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjlfVVRJTFNfSApkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRl
cnMvQmxpdC5wcyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9zaGFkZXJzL0JsaXQucHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGNiM2JkMGU3NmJhOTJhMjhlNzc2
ODg4YzYyOTA0YzBjM2YwNWYzYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL0JsaXQucHMKQEAgLTAs
MCArMSwzOSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK3NhbXBsZXIyRCB0ZXggOiBzMDsKKwordW5pZm9y
bSBmbG9hdDQgbW9kZSA6IGMwOworCisvLyBQYXNzdGhyb3VnaCBQaXhlbCBTaGFkZXIKKy8vIE91
dHB1dHMgdGV4dHVyZSAwIHNhbXBsZWQgYXQgdGV4Y29vcmQgMC4KK2Zsb2F0NCBwYXNzdGhyb3Vn
aHBzKGZsb2F0NCB0ZXhjb29yZCA6IFRFWENPT1JEMCkgOiBDT0xPUgoreworCXJldHVybiB0ZXgy
RCh0ZXgsIHRleGNvb3JkLnh5KTsKK307CisKKy8vIEx1bWluYW5jZSBDb252ZXJzaW9uIFBpeGVs
IFNoYWRlcgorLy8gT3V0cHV0cyBzYW1wbGUodGV4MCwgdGMwKS5ycnJhLgorLy8gRm9yIExBIG91
dHB1dCAocGFzcyBBKSBzZXQgQzAuWCA9IDEsIEMwLlkgPSAwLgorLy8gRm9yIEwgb3V0cHV0IChB
ID0gMSkgc2V0IEMwLlggPSAwLCBDMC5ZID0gMS4KK2Zsb2F0NCBsdW1pbmFuY2VwcyhmbG9hdDQg
dGV4Y29vcmQgOiBURVhDT09SRDApIDogQ09MT1IKK3sKKwlmbG9hdDQgdG1wID0gdGV4MkQodGV4
LCB0ZXhjb29yZC54eSk7CisJdG1wLncgPSB0bXAudyAqIG1vZGUueCArIG1vZGUueTsKKwlyZXR1
cm4gdG1wLnh4eHc7Cit9OworCisvLyBSR0IvQSBDb21wb25lbnQgTWFzayBQaXhlbCBTaGFkZXIK
Ky8vIE91dHB1dHMgc2FtcGxlKHRleDAsIHRjMCkgd2l0aCBvcHRpb25zIHRvIGZvcmNlIFJHQiA9
IDAgYW5kL29yIEEgPSAxLgorLy8gVG8gZm9yY2UgUkdCID0gMCwgc2V0IEMwLlggPSAwLCBvdGhl
cndpc2UgQzAuWCA9IDEuCisvLyBUbyBmb3JjZSBBID0gMSwgc2V0IEMwLlogPSAwLCBDMC5XID0g
MSwgb3RoZXJ3aXNlIEMwLlogPSAxLCBDMC5XID0gMC4KK2Zsb2F0NCBjb21wb25lbnRtYXNrcHMo
ZmxvYXQ0IHRleGNvb3JkIDogVEVYQ09PUkQwKSA6IENPTE9SCit7CisJZmxvYXQ0IHRtcCA9IHRl
eDJEKHRleCwgdGV4Y29vcmQueHkpOworCXRtcC54eXogPSB0bXAueHl6ICogbW9kZS54OworCXRt
cC53ID0gdG1wLncgKiBtb2RlLnogKyBtb2RlLnc7CisJcmV0dXJuIHRtcDsKK307CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
c2hhZGVycy9CbGl0LnZzIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L3NoYWRlcnMvQmxpdC52cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYTM2OTgwYjkzNWI1MGZh
OWFlMGI2YjBmNGE1MGUzOTM5ZDBkNTExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvQmxpdC52cwpA
QCAtMCwwICsxLDQzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworc3RydWN0IFZTX09VVFBVVAoreworICAg
IGZsb2F0NCBwb3NpdGlvbiA6IFBPU0lUSU9OOworICAgIGZsb2F0NCB0ZXhjb29yZCA6IFRFWENP
T1JEMDsKK307CisKK3VuaWZvcm0gZmxvYXQ0IGhhbGZQaXhlbFNpemUgOiBjMDsKKworLy8gU3Rh
bmRhcmQgVmVydGV4IFNoYWRlcgorLy8gSW5wdXQgMCBpcyB0aGUgaG9tb2dlbm91cyBwb3NpdGlv
bi4KKy8vIE91dHB1dHMgdGhlIGhvbW9nZW5vdXMgcG9zaXRpb24gYXMtaXMuCisvLyBPdXRwdXRz
IGEgdGV4IGNvb3JkIHdpdGggKDAsMCkgaW4gdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSBz
Y3JlZW4gYW5kICgxLDEpIGluIHRoZSBib3R0b20gcmlnaHQuCisvLyBDMC5YIG11c3QgYmUgbmVn
YXRpdmUgaGFsZi1waXhlbCB3aWR0aCwgQzAuWSBtdXN0IGJlIGhhbGYtcGl4ZWwgaGVpZ2h0LiBD
MC5aVyBtdXN0IGJlIDAuCitWU19PVVRQVVQgc3RhbmRhcmR2cyhpbiBmbG9hdDQgcG9zaXRpb24g
OiBQT1NJVElPTikKK3sKKyAgICBWU19PVVRQVVQgT3V0OworCisgICAgT3V0LnBvc2l0aW9uID0g
cG9zaXRpb24gKyBoYWxmUGl4ZWxTaXplOworICAgIE91dC50ZXhjb29yZCA9IHBvc2l0aW9uICog
ZmxvYXQ0KDAuNSwgLTAuNSwgMS4wLCAxLjApICsgZmxvYXQ0KDAuNSwgMC41LCAwLCAwKTsKKwor
ICAgIHJldHVybiBPdXQ7Cit9OworCisvLyBGbGlwIFkgVmVydGV4IFNoYWRlcgorLy8gSW5wdXQg
MCBpcyB0aGUgaG9tb2dlbm91cyBwb3NpdGlvbi4KKy8vIE91dHB1dHMgdGhlIGhvbW9nZW5vdXMg
cG9zaXRpb24gYXMtaXMuCisvLyBPdXRwdXRzIGEgdGV4IGNvb3JkIHdpdGggKDAsMSkgaW4gdGhl
IHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSBzY3JlZW4gYW5kICgxLDApIGluIHRoZSBib3R0b20g
cmlnaHQuCisvLyBDMC5YWSBtdXN0IGJlIHRoZSBoYWxmLXBpeGVsIHdpZHRoIGFuZCBoZWlnaHQu
IEMwLlpXIG11c3QgYmUgMC4KK1ZTX09VVFBVVCBmbGlweXZzKGluIGZsb2F0NCBwb3NpdGlvbiA6
IFBPU0lUSU9OKQoreworICAgIFZTX09VVFBVVCBPdXQ7CisKKyAgICBPdXQucG9zaXRpb24gPSBw
b3NpdGlvbiArIGhhbGZQaXhlbFNpemU7CisgICAgT3V0LnRleGNvb3JkID0gcG9zaXRpb24gKiBm
bG9hdDQoMC41LCAwLjUsIDEuMCwgMS4wKSArIGZsb2F0NCgwLjUsIDAuNSwgMCwgMCk7CisKKyAg
ICByZXR1cm4gT3V0OworfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2NvbXBvbmVudG1hc2tw
cy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L3NoYWRlcnMvY29tcGlsZWQvY29tcG9uZW50bWFza3BzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGYyODQ3Yjhl
N2QzNWYxNTdjYTFhOGQyODE4M2M1ZWI3YzRkMjZlZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2Nv
bXBpbGVkL2NvbXBvbmVudG1hc2twcy5oCkBAIC0wLDAgKzEsNzkgQEAKKyNpZiAwDQorLy8NCisv
LyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjky
MDAuMTYzODQNCisvLw0KKy8vLw0KKy8vIFBhcmFtZXRlcnM6DQorLy8NCisvLyAgIGZsb2F0NCBt
b2RlOw0KKy8vICAgc2FtcGxlcjJEIHRleDsNCisvLw0KKy8vDQorLy8gUmVnaXN0ZXJzOg0KKy8v
DQorLy8gICBOYW1lICAgICAgICAgUmVnICAgU2l6ZQ0KKy8vICAgLS0tLS0tLS0tLS0tIC0tLS0t
IC0tLS0NCisvLyAgIG1vZGUgICAgICAgICBjMCAgICAgICAxDQorLy8gICB0ZXggICAgICAgICAg
czAgICAgICAgMQ0KKy8vDQorDQorICAgIHBzXzJfMA0KKyAgICBkY2wgdDAueHkNCisgICAgZGNs
XzJkIHMwDQorICAgIHRleGxkIHIwLCB0MCwgczANCisgICAgbXVsIHIxLnh5eiwgcjAsIGMwLngN
CisgICAgbWFkIHIxLncsIHIwLncsIGMwLnosIGMwLncNCisgICAgbW92IG9DMCwgcjENCisNCisv
LyBhcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCAzIGFy
aXRobWV0aWMpDQorI2VuZGlmDQorDQorY29uc3QgQllURSBnX3BzMjBfY29tcG9uZW50bWFza3Bz
W10gPQ0KK3sNCisgICAgICAwLCAgIDIsIDI1NSwgMjU1LCAyNTQsIDI1NSwgDQorICAgICA0NCwg
ICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIA0KKyAgICAgMjgsICAgMCwgICAwLCAgIDAsIDExOSwg
ICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTUsIDI1NSwgDQorICAgICAgMiwgICAw
LCAgIDAsICAgMCwgIDI4LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAw
LCANCisgICAgMTEyLCAgIDAsICAgMCwgICAwLCAgNjgsICAgMCwgDQorICAgICAgMCwgICAwLCAg
IDIsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICA3NiwgICAwLCAN
CisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICA5MiwgICAwLCAgIDAs
ICAgMCwgICAzLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCisg
ICAgIDk2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAxMDksIDEx
MSwgMTAwLCAxMDEsIA0KKyAgICAgIDAsIDE3MSwgMTcxLCAxNzEsICAgMSwgICAwLCANCisgICAg
ICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgMTE2LCAxMDEsIDEyMCwgICAwLCANCisgICAgICA0
LCAgIDAsICAxMiwgICAwLCAgIDEsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDEsICAgMCwgICAw
LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsIDExMiwgMTE1LCANCisgICAgIDk1LCAg
NTAsICA5NSwgIDQ4LCAgIDAsICA3NywgDQorICAgIDEwNSwgIDk5LCAxMTQsIDExMSwgMTE1LCAx
MTEsIA0KKyAgICAxMDIsIDExNiwgIDMyLCAgNDAsICA4MiwgIDQxLCANCisgICAgIDMyLCAgNzIs
ICA3NiwgIDgzLCAgNzYsICAzMiwgDQorICAgICA4MywgMTA0LCAgOTcsIDEwMCwgMTAxLCAxMTQs
IA0KKyAgICAgMzIsICA2NywgMTExLCAxMDksIDExMiwgMTA1LCANCisgICAgMTA4LCAxMDEsIDEx
NCwgIDMyLCAgNTcsICA0NiwgDQorICAgICA1MSwgIDQ4LCAgNDYsICA1NywgIDUwLCAgNDgsIA0K
KyAgICAgNDgsICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCANCisgICAgIDUyLCAgIDAsIDE3MSwg
MTcxLCAgMzEsICAgMCwgDQorICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAxMjgsIA0KKyAg
ICAgIDAsICAgMCwgICAzLCAxNzYsICAzMSwgICAwLCANCisgICAgICAwLCAgIDIsICAgMCwgICAw
LCAgIDAsIDE0NCwgDQorICAgICAgMCwgICA4LCAgMTUsIDE2MCwgIDY2LCAgIDAsIA0KKyAgICAg
IDAsICAgMywgICAwLCAgIDAsICAxNSwgMTI4LCANCisgICAgICAwLCAgIDAsIDIyOCwgMTc2LCAg
IDAsICAgOCwgDQorICAgIDIyOCwgMTYwLCAgIDUsICAgMCwgICAwLCAgIDMsIA0KKyAgICAgIDEs
ICAgMCwgICA3LCAxMjgsICAgMCwgICAwLCANCisgICAgMjI4LCAxMjgsICAgMCwgICAwLCAgIDAs
IDE2MCwgDQorICAgICAgNCwgICAwLCAgIDAsICAgNCwgICAxLCAgIDAsIA0KKyAgICAgIDgsIDEy
OCwgICAwLCAgIDAsIDI1NSwgMTI4LCANCisgICAgICAwLCAgIDAsIDE3MCwgMTYwLCAgIDAsICAg
MCwgDQorICAgIDI1NSwgMTYwLCAgIDEsICAgMCwgICAwLCAgIDIsIA0KKyAgICAgIDAsICAgOCwg
IDE1LCAxMjgsICAgMSwgICAwLCANCisgICAgMjI4LCAxMjgsIDI1NSwgMjU1LCAgIDAsICAgMA0K
K307DQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvZmxpcHl2cy5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvZmxp
cHl2cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjAyNTc2ZWQ2NzQyZjJlMmY1ZWYzZmIxNGFiMGQ4M2M2OTZiNTcz
ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9mbGlweXZzLmgKQEAgLTAsMCArMSw2
NyBAQAorI2lmIDANCisvLw0KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hh
ZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NA0KKy8vDQorLy8vDQorLy8gUGFyYW1ldGVyczoN
CisvLw0KKy8vICAgZmxvYXQ0IGhhbGZQaXhlbFNpemU7DQorLy8NCisvLw0KKy8vIFJlZ2lzdGVy
czoNCisvLw0KKy8vICAgTmFtZSAgICAgICAgICBSZWcgICBTaXplDQorLy8gICAtLS0tLS0tLS0t
LS0tIC0tLS0tIC0tLS0NCisvLyAgIGhhbGZQaXhlbFNpemUgYzAgICAgICAgMQ0KKy8vDQorDQor
ICAgIHZzXzJfMA0KKyAgICBkZWYgYzEsIDAuNSwgMSwgMCwgMA0KKyAgICBkY2xfcG9zaXRpb24g
djANCisgICAgYWRkIG9Qb3MsIHYwLCBjMA0KKyAgICBtYWQgb1QwLCB2MCwgYzEueHh5eSwgYzEu
eHh6eg0KKw0KKy8vIGFwcHJveGltYXRlbHkgMiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQorI2Vu
ZGlmDQorDQorY29uc3QgQllURSBnX3ZzMjBfZmxpcHl2c1tdID0NCit7DQorICAgICAgMCwgICAy
LCAyNTQsIDI1NSwgMjU0LCAyNTUsIA0KKyAgICAgMzYsICAgMCwgIDY3LCAgODQsICA2NSwgIDY2
LCANCisgICAgIDI4LCAgIDAsICAgMCwgICAwLCAgODcsICAgMCwgDQorICAgICAgMCwgICAwLCAg
IDAsICAgMiwgMjU0LCAyNTUsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICAyOCwgICAwLCAN
CisgICAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgDQorICAgICA4MCwgICAwLCAgIDAs
ICAgMCwgIDQ4LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCANCisg
ICAgICAxLCAgIDAsICAgMCwgICAwLCAgNjQsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIA0KKyAgICAxMDQsICA5NywgMTA4LCAxMDIsICA4MCwgMTA1LCANCisgICAg
MTIwLCAxMDEsIDEwOCwgIDgzLCAxMDUsIDEyMiwgDQorICAgIDEwMSwgICAwLCAxNzEsIDE3MSwg
ICAxLCAgIDAsIA0KKyAgICAgIDMsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCANCisgICAgICAx
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAxMTgsIDExNSwgIDk1
LCAgNTAsIA0KKyAgICAgOTUsICA0OCwgICAwLCAgNzcsIDEwNSwgIDk5LCANCisgICAgMTE0LCAx
MTEsIDExNSwgMTExLCAxMDIsIDExNiwgDQorICAgICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAg
NzIsIA0KKyAgICAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgMTA0LCANCisgICAgIDk3LCAxMDAs
IDEwMSwgMTE0LCAgMzIsICA2NywgDQorICAgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEs
IA0KKyAgICAxMTQsICAzMiwgIDU3LCAgNDYsICA1MSwgIDQ4LCANCisgICAgIDQ2LCAgNTcsICA1
MCwgIDQ4LCAgNDgsICA0NiwgDQorICAgICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCAgIDAsIA0K
KyAgICAxNzEsIDE3MSwgIDgxLCAgIDAsICAgMCwgICA1LCANCisgICAgICAxLCAgIDAsICAxNSwg
MTYwLCAgIDAsICAgMCwgDQorICAgICAgMCwgIDYzLCAgIDAsICAgMCwgMTI4LCAgNjMsIA0KKyAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsICAzMSwgICAw
LCAgIDAsICAgMiwgDQorICAgICAgMCwgICAwLCAgIDAsIDEyOCwgICAwLCAgIDAsIA0KKyAgICAg
MTUsIDE0NCwgICAyLCAgIDAsICAgMCwgICAzLCANCisgICAgICAwLCAgIDAsICAxNSwgMTkyLCAg
IDAsICAgMCwgDQorICAgIDIyOCwgMTQ0LCAgIDAsICAgMCwgMjI4LCAxNjAsIA0KKyAgICAgIDQs
ICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCANCisgICAgIDE1LCAyMjQsICAgMCwgICAwLCAyMjgs
IDE0NCwgDQorICAgICAgMSwgICAwLCAgODAsIDE2MCwgICAxLCAgIDAsIA0KKyAgICAxNjAsIDE2
MCwgMjU1LCAyNTUsICAgMCwgICAwDQorfTsNCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9sdW1p
bmFuY2Vwcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvbHVtaW5hbmNlcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMDMxM2Iw
ODYwZWNmZTAyNjc3ZGRiM2YwMDA5MTUxZjc4YTNiZmIyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMv
Y29tcGlsZWQvbHVtaW5hbmNlcHMuaApAQCAtMCwwICsxLDc5IEBACisjaWYgMA0KKy8vDQorLy8g
R2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAw
LjE2Mzg0DQorLy8NCisvLy8NCisvLyBQYXJhbWV0ZXJzOg0KKy8vDQorLy8gICBmbG9hdDQgbW9k
ZTsNCisvLyAgIHNhbXBsZXIyRCB0ZXg7DQorLy8NCisvLw0KKy8vIFJlZ2lzdGVyczoNCisvLw0K
Ky8vICAgTmFtZSAgICAgICAgIFJlZyAgIFNpemUNCisvLyAgIC0tLS0tLS0tLS0tLSAtLS0tLSAt
LS0tDQorLy8gICBtb2RlICAgICAgICAgYzAgICAgICAgMQ0KKy8vICAgdGV4ICAgICAgICAgIHMw
ICAgICAgIDENCisvLw0KKw0KKyAgICBwc18yXzANCisgICAgZGNsIHQwLnh5DQorICAgIGRjbF8y
ZCBzMA0KKyAgICB0ZXhsZCByMCwgdDAsIHMwDQorICAgIG1hZCByMS53LCByMC53LCBjMC54LCBj
MC55DQorICAgIG1vdiByMS54eXosIHIwLngNCisgICAgbW92IG9DMCwgcjENCisNCisvLyBhcHBy
b3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCAzIGFyaXRobWV0
aWMpDQorI2VuZGlmDQorDQorY29uc3QgQllURSBnX3BzMjBfbHVtaW5hbmNlcHNbXSA9DQorew0K
KyAgICAgIDAsICAgMiwgMjU1LCAyNTUsIDI1NCwgMjU1LCANCisgICAgIDQ0LCAgIDAsICA2Nywg
IDg0LCAgNjUsICA2NiwgDQorICAgICAyOCwgICAwLCAgIDAsICAgMCwgMTE5LCAgIDAsIA0KKyAg
ICAgIDAsICAgMCwgICAwLCAgIDIsIDI1NSwgMjU1LCANCisgICAgICAyLCAgIDAsICAgMCwgICAw
LCAgMjgsICAgMCwgDQorICAgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsIA0KKyAgICAx
MTIsICAgMCwgICAwLCAgIDAsICA2OCwgICAwLCANCisgICAgICAwLCAgIDAsICAgMiwgICAwLCAg
IDAsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDc2LCAgIDAsIA0KKyAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgIDkyLCAgIDAsICAgMCwgICAwLCAgIDMs
ICAgMCwgDQorICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgOTYsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCisgICAgICAwLCAgIDAsIDEwOSwgMTExLCAxMDAsIDEw
MSwgDQorICAgICAgMCwgMTcxLCAxNzEsIDE3MSwgICAxLCAgIDAsIA0KKyAgICAgIDMsICAgMCwg
ICAxLCAgIDAsICAgNCwgICAwLCANCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQorICAgICAgMCwgICAwLCAxMTYsIDEwMSwgMTIwLCAgIDAsIA0KKyAgICAgIDQsICAgMCwgIDEy
LCAgIDAsICAgMSwgICAwLCANCisgICAgICAxLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQor
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgMTEyLCAxMTUsIA0KKyAgICAgOTUsICA1MCwgIDk1LCAg
NDgsICAgMCwgIDc3LCANCisgICAgMTA1LCAgOTksIDExNCwgMTExLCAxMTUsIDExMSwgDQorICAg
IDEwMiwgMTE2LCAgMzIsICA0MCwgIDgyLCAgNDEsIA0KKyAgICAgMzIsICA3MiwgIDc2LCAgODMs
ICA3NiwgIDMyLCANCisgICAgIDgzLCAxMDQsICA5NywgMTAwLCAxMDEsIDExNCwgDQorICAgICAz
MiwgIDY3LCAxMTEsIDEwOSwgMTEyLCAxMDUsIA0KKyAgICAxMDgsIDEwMSwgMTE0LCAgMzIsICA1
NywgIDQ2LCANCisgICAgIDUxLCAgNDgsICA0NiwgIDU3LCAgNTAsICA0OCwgDQorICAgICA0OCwg
IDQ2LCAgNDksICA1NCwgIDUxLCAgNTYsIA0KKyAgICAgNTIsICAgMCwgMTcxLCAxNzEsICAzMSwg
ICAwLCANCisgICAgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIDEyOCwgDQorICAgICAgMCwgICAw
LCAgIDMsIDE3NiwgIDMxLCAgIDAsIA0KKyAgICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTQ0
LCANCisgICAgICAwLCAgIDgsICAxNSwgMTYwLCAgNjYsICAgMCwgDQorICAgICAgMCwgICAzLCAg
IDAsICAgMCwgIDE1LCAxMjgsIA0KKyAgICAgIDAsICAgMCwgMjI4LCAxNzYsICAgMCwgICA4LCAN
CisgICAgMjI4LCAxNjAsICAgNCwgICAwLCAgIDAsICAgNCwgDQorICAgICAgMSwgICAwLCAgIDgs
IDEyOCwgICAwLCAgIDAsIA0KKyAgICAyNTUsIDEyOCwgICAwLCAgIDAsICAgMCwgMTYwLCANCisg
ICAgICAwLCAgIDAsICA4NSwgMTYwLCAgIDEsICAgMCwgDQorICAgICAgMCwgICAyLCAgIDEsICAg
MCwgICA3LCAxMjgsIA0KKyAgICAgIDAsICAgMCwgICAwLCAxMjgsICAgMSwgICAwLCANCisgICAg
ICAwLCAgIDIsICAgMCwgICA4LCAgMTUsIDEyOCwgDQorICAgICAgMSwgICAwLCAyMjgsIDEyOCwg
MjU1LCAyNTUsIA0KKyAgICAgIDAsICAgMA0KK307DQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQv
cGFzc3Rocm91Z2hwcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hwcy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmMwYTJjN2Q0ODJiMzNiZTg2Njc0OTU0NzU1YTM5OTU4NWM4YWJlYTgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
c2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHBzLmgKQEAgLTAsMCArMSw2MiBAQAorI2lmIDAN
CisvLw0KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVy
IDkuMzAuOTIwMC4xNjM4NA0KKy8vDQorLy8vDQorLy8gUGFyYW1ldGVyczoNCisvLw0KKy8vICAg
c2FtcGxlcjJEIHRleDsNCisvLw0KKy8vDQorLy8gUmVnaXN0ZXJzOg0KKy8vDQorLy8gICBOYW1l
ICAgICAgICAgUmVnICAgU2l6ZQ0KKy8vICAgLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0NCisvLyAg
IHRleCAgICAgICAgICBzMCAgICAgICAxDQorLy8NCisNCisgICAgcHNfMl8wDQorICAgIGRjbCB0
MC54eQ0KKyAgICBkY2xfMmQgczANCisgICAgdGV4bGQgcjAsIHQwLCBzMA0KKyAgICBtb3Ygb0Mw
LCByMA0KKw0KKy8vIGFwcHJveGltYXRlbHkgMiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkICgxIHRl
eHR1cmUsIDEgYXJpdGhtZXRpYykNCisjZW5kaWYNCisNCitjb25zdCBCWVRFIGdfcHMyMF9wYXNz
dGhyb3VnaHBzW10gPQ0KK3sNCisgICAgICAwLCAgIDIsIDI1NSwgMjU1LCAyNTQsIDI1NSwgDQor
ICAgICAzMywgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIA0KKyAgICAgMjgsICAgMCwgICAwLCAg
IDAsICA3NSwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTUsIDI1NSwgDQorICAg
ICAgMSwgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDEs
ICAgMCwgICAwLCANCisgICAgIDY4LCAgIDAsICAgMCwgICAwLCAgNDgsICAgMCwgDQorICAgICAg
MCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICA1
MiwgICAwLCANCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgIDExNiwg
MTAxLCAxMjAsICAgMCwgICA0LCAgIDAsIA0KKyAgICAgMTIsICAgMCwgICAxLCAgIDAsICAgMSwg
ICAwLCANCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAw
LCAxMTIsIDExNSwgIDk1LCAgNTAsIA0KKyAgICAgOTUsICA0OCwgICAwLCAgNzcsIDEwNSwgIDk5
LCANCisgICAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgDQorICAgICAzMiwgIDQwLCAg
ODIsICA0MSwgIDMyLCAgNzIsIA0KKyAgICAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgMTA0LCAN
CisgICAgIDk3LCAxMDAsIDEwMSwgMTE0LCAgMzIsICA2NywgDQorICAgIDExMSwgMTA5LCAxMTIs
IDEwNSwgMTA4LCAxMDEsIA0KKyAgICAxMTQsICAzMiwgIDU3LCAgNDYsICA1MSwgIDQ4LCANCisg
ICAgIDQ2LCAgNTcsICA1MCwgIDQ4LCAgNDgsICA0NiwgDQorICAgICA0OSwgIDU0LCAgNTEsICA1
NiwgIDUyLCAgIDAsIA0KKyAgICAxNzEsIDE3MSwgIDMxLCAgIDAsICAgMCwgICAyLCANCisgICAg
ICAwLCAgIDAsICAgMCwgMTI4LCAgIDAsICAgMCwgDQorICAgICAgMywgMTc2LCAgMzEsICAgMCwg
ICAwLCAgIDIsIA0KKyAgICAgIDAsICAgMCwgICAwLCAxNDQsICAgMCwgICA4LCANCisgICAgIDE1
LCAxNjAsICA2NiwgICAwLCAgIDAsICAgMywgDQorICAgICAgMCwgICAwLCAgMTUsIDEyOCwgICAw
LCAgIDAsIA0KKyAgICAyMjgsIDE3NiwgICAwLCAgIDgsIDIyOCwgMTYwLCANCisgICAgICAxLCAg
IDAsICAgMCwgICAyLCAgIDAsICAgOCwgDQorICAgICAxNSwgMTI4LCAgIDAsICAgMCwgMjI4LCAx
MjgsIA0KKyAgICAyNTUsIDI1NSwgICAwLCAgIDANCit9Ow0KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBp
bGVkL3N0YW5kYXJkdnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3N0YW5kYXJkdnMuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4y
NmI4OTU5NWNiYjU1Y2MzMmMzYjgzNzNkNzgxMWMwOWYwYWY0OTYwCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3No
YWRlcnMvY29tcGlsZWQvc3RhbmRhcmR2cy5oCkBAIC0wLDAgKzEsNjcgQEAKKyNpZiAwDQorLy8N
CisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMw
LjkyMDAuMTYzODQNCisvLw0KKy8vLw0KKy8vIFBhcmFtZXRlcnM6DQorLy8NCisvLyAgIGZsb2F0
NCBoYWxmUGl4ZWxTaXplOw0KKy8vDQorLy8NCisvLyBSZWdpc3RlcnM6DQorLy8NCisvLyAgIE5h
bWUgICAgICAgICAgUmVnICAgU2l6ZQ0KKy8vICAgLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tDQor
Ly8gICBoYWxmUGl4ZWxTaXplIGMwICAgICAgIDENCisvLw0KKw0KKyAgICB2c18yXzANCisgICAg
ZGVmIGMxLCAwLjUsIC0wLjUsIDEsIDANCisgICAgZGNsX3Bvc2l0aW9uIHYwDQorICAgIGFkZCBv
UG9zLCB2MCwgYzANCisgICAgbWFkIG9UMCwgdjAsIGMxLnh5enosIGMxLnh4d3cNCisNCisvLyBh
cHByb3hpbWF0ZWx5IDIgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KKyNlbmRpZg0KKw0KK2NvbnN0
IEJZVEUgZ192czIwX3N0YW5kYXJkdnNbXSA9DQorew0KKyAgICAgIDAsICAgMiwgMjU0LCAyNTUs
IDI1NCwgMjU1LCANCisgICAgIDM2LCAgIDAsICA2NywgIDg0LCAgNjUsICA2NiwgDQorICAgICAy
OCwgICAwLCAgIDAsICAgMCwgIDg3LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDIsIDI1
NCwgMjU1LCANCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgMjgsICAgMCwgDQorICAgICAgMCwg
ICAwLCAgIDAsICAgMSwgICAwLCAgIDAsIA0KKyAgICAgODAsICAgMCwgICAwLCAgIDAsICA0OCwg
ICAwLCANCisgICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgDQorICAgICAgMSwgICAw
LCAgIDAsICAgMCwgIDY0LCAgIDAsIA0KKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCANCisgICAgMTA0LCAgOTcsIDEwOCwgMTAyLCAgODAsIDEwNSwgDQorICAgIDEyMCwgMTAxLCAx
MDgsICA4MywgMTA1LCAxMjIsIA0KKyAgICAxMDEsICAgMCwgMTcxLCAxNzEsICAgMSwgICAwLCAN
CisgICAgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgDQorICAgICAgMSwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsIA0KKyAgICAgIDAsICAgMCwgMTE4LCAxMTUsICA5NSwgIDUwLCANCisg
ICAgIDk1LCAgNDgsICAgMCwgIDc3LCAxMDUsICA5OSwgDQorICAgIDExNCwgMTExLCAxMTUsIDEx
MSwgMTAyLCAxMTYsIA0KKyAgICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCANCisgICAg
IDc2LCAgODMsICA3NiwgIDMyLCAgODMsIDEwNCwgDQorICAgICA5NywgMTAwLCAxMDEsIDExNCwg
IDMyLCAgNjcsIA0KKyAgICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCANCisgICAgMTE0
LCAgMzIsICA1NywgIDQ2LCAgNTEsICA0OCwgDQorICAgICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4
LCAgNDYsIA0KKyAgICAgNDksICA1NCwgIDUxLCAgNTYsICA1MiwgICAwLCANCisgICAgMTcxLCAx
NzEsICA4MSwgICAwLCAgIDAsICAgNSwgDQorICAgICAgMSwgICAwLCAgMTUsIDE2MCwgICAwLCAg
IDAsIA0KKyAgICAgIDAsICA2MywgICAwLCAgIDAsICAgMCwgMTkxLCANCisgICAgICAwLCAgIDAs
IDEyOCwgIDYzLCAgIDAsICAgMCwgDQorICAgICAgMCwgICAwLCAgMzEsICAgMCwgICAwLCAgIDIs
IA0KKyAgICAgIDAsICAgMCwgICAwLCAxMjgsICAgMCwgICAwLCANCisgICAgIDE1LCAxNDQsICAg
MiwgICAwLCAgIDAsICAgMywgDQorICAgICAgMCwgICAwLCAgMTUsIDE5MiwgICAwLCAgIDAsIA0K
KyAgICAyMjgsIDE0NCwgICAwLCAgIDAsIDIyOCwgMTYwLCANCisgICAgICA0LCAgIDAsICAgMCwg
ICA0LCAgIDAsICAgMCwgDQorICAgICAxNSwgMjI0LCAgIDAsICAgMCwgMjI4LCAxNDQsIA0KKyAg
ICAgIDEsICAgMCwgMTY0LCAxNjAsICAgMSwgICAwLCANCisgICAgMjQwLCAxNjAsIDI1NSwgMjU1
LCAgIDAsICAgMA0KK307DQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVycy5iYXQgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVy
cy9nZW5lcmF0ZV9zaGFkZXJzLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYTEyNTkxNDg5MzZlNjllZDZjMDNm
NGI5NzM1ZWMzODVjMjcyNjZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVy
cy5iYXQKQEAgLTAsMCArMSwxNCBAQAorQEVDSE8gT0ZGDQorUkVNDQorUkVNIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0K
K1JFTSBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlDQorUkVNIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQorUkVN
DQorDQorUEFUSCAlUEFUSCU7JVByb2dyYW1GaWxlcyh4ODYpJVxXaW5kb3dzIEtpdHNcOC4wXGJp
blx4ODY7JURYU0RLX0RJUiVcVXRpbGl0aWVzXGJpblx4ODYNCisNCitmeGMgL0Ugc3RhbmRhcmR2
cyAvVCB2c18yXzAgL0ZoIGNvbXBpbGVkL3N0YW5kYXJkdnMuaCBCbGl0LnZzDQorZnhjIC9FIGZs
aXB5dnMgL1QgdnNfMl8wIC9GaCBjb21waWxlZC9mbGlweXZzLmggQmxpdC52cw0KK2Z4YyAvRSBw
YXNzdGhyb3VnaHBzIC9UIHBzXzJfMCAvRmggY29tcGlsZWQvcGFzc3Rocm91Z2hwcy5oIEJsaXQu
cHMNCitmeGMgL0UgbHVtaW5hbmNlcHMgL1QgcHNfMl8wIC9GaCBjb21waWxlZC9sdW1pbmFuY2Vw
cy5oIEJsaXQucHMNCitmeGMgL0UgY29tcG9uZW50bWFza3BzIC9UIHBzXzJfMCAvRmggY29tcGls
ZWQvY29tcG9uZW50bWFza3BzLmggQmxpdC5wcw0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS92ZXJ0ZXhjb252ZXJzaW9uLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvdmVy
dGV4Y29udmVyc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU5MGI5ZDQ4YTM4NmZmYzE3MjU3MWRhNDRkOWJl
MjBkMTAyOTAxOWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvdmVydGV4Y29udmVyc2lvbi5oCkBAIC0wLDAgKzEs
MjAzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyB2ZXJ0ZXhjb252ZXJzaW9uLmg6IEEgbGli
cmFyeSBvZiB2ZXJ0ZXggY29udmVyc2lvbiBjbGFzc2VzIHRoYXQgY2FuIGJlIHVzZWQgdG8gYnVp
bGQKKy8vIHRoZSBGb3JtYXRDb252ZXJ0ZXIgb2JqZWN0cyB1c2VkIGJ5IHRoZSBidWZmZXIgY29u
dmVyc2lvbiBzeXN0ZW0uCisKKyNpZm5kZWYgTElCR0xFU1YyX1ZFUlRFWENPTlZFUlNJT05fSF8K
KyNkZWZpbmUgTElCR0xFU1YyX1ZFUlRFWENPTlZFUlNJT05fSF8KKworbmFtZXNwYWNlIHJ4Cit7
CisKKy8vIENvbnZlcnNpb24gdHlwZXM6CisvLyBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eTog
dHJ1ZSBpZiB0aGlzIGlzIGFuIGlkZW50aXR5IHRyYW5zZm9ybSwgZmFsc2Ugb3RoZXJ3aXNlCisv
LyBzdGF0aWMgVSBjb252ZXJ0KFQpOiBjb252ZXJ0IGEgc2luZ2xlIGVsZW1lbnQgZnJvbSB0aGUg
aW5wdXQgdHlwZSB0byB0aGUgb3V0cHV0IHR5cGUKKy8vIHR5cGVkZWYgLi4uIE91dHB1dFR5cGU6
IHRoZSB0eXBlIHByb2R1Y2VkIGJ5IHRoaXMgY29udmVyc2lvbgorCit0ZW1wbGF0ZSA8Y2xhc3Mg
VD4KK3N0cnVjdCBJZGVudGl0eQoreworICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0g
dHJ1ZTsKKworICAgIHR5cGVkZWYgVCBPdXRwdXRUeXBlOworCisgICAgc3RhdGljIFQgY29udmVy
dChUIHgpCisgICAgeworICAgICAgICByZXR1cm4geDsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8
Y2xhc3MgRnJvbVQsIGNsYXNzIFRvVD4KK3N0cnVjdCBDYXN0Cit7CisgICAgc3RhdGljIGNvbnN0
IGJvb2wgaWRlbnRpdHkgPSBmYWxzZTsKKworICAgIHR5cGVkZWYgVG9UIE91dHB1dFR5cGU7CisK
KyAgICBzdGF0aWMgVG9UIGNvbnZlcnQoRnJvbVQgeCkKKyAgICB7CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUb1Q+KHgpOworICAgIH0KK307CisKK3RlbXBsYXRlIDxjbGFzcyBUPgorc3Ry
dWN0IENhc3Q8VCwgVD4KK3sKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9IHRydWU7
CisKKyAgICB0eXBlZGVmIFQgT3V0cHV0VHlwZTsKKworICAgIHN0YXRpYyBUIGNvbnZlcnQoVCB4
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHgpOworICAgIH0KK307CisK
K3RlbXBsYXRlIDxjbGFzcyBUPgorc3RydWN0IE5vcm1hbGl6ZQoreworICAgIHN0YXRpYyBjb25z
dCBib29sIGlkZW50aXR5ID0gZmFsc2U7CisKKyAgICB0eXBlZGVmIGZsb2F0IE91dHB1dFR5cGU7
CisKKyAgICBzdGF0aWMgZmxvYXQgY29udmVydChUIHgpCisgICAgeworICAgICAgICB0eXBlZGVm
IHN0ZDo6bnVtZXJpY19saW1pdHM8VD4gTkw7CisgICAgICAgIGZsb2F0IGYgPSBzdGF0aWNfY2Fz
dDxmbG9hdD4oeCk7CisKKyAgICAgICAgaWYgKE5MOjppc19zaWduZWQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIC8vIGNvbnN0IGZsb2F0ID0+IFZDMjAwOCBjb21wdXRlcyBpdCBhdCBjb21waWxl
IHRpbWUKKyAgICAgICAgICAgIC8vIHN0YXRpYyBjb25zdCBmbG9hdCA9PiBWQzIwMDggY29tcHV0
ZXMgaXQgdGhlIGZpcnN0IHRpbWUgd2UgZ2V0IGhlcmUsIHN0b3JlcyBpdCB0byBtZW1vcnkgd2l0
aCBzdGF0aWMgZ3VhcmQgYW5kIGFsbCB0aGF0LgorICAgICAgICAgICAgY29uc3QgZmxvYXQgZGl2
aXNvciA9IDEuMGYvKDIqc3RhdGljX2Nhc3Q8ZmxvYXQ+KE5MOjptYXgoKSkrMSk7CisgICAgICAg
ICAgICByZXR1cm4gKDIqZisxKSpkaXZpc29yOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGYvTkw6Om1heCgpOworICAgICAgICB9CisgICAg
fQorfTsKKwordGVtcGxhdGUgPGNsYXNzIEZyb21UeXBlLCBzdGQ6OnNpemVfdCBTY2FsZUJpdHM+
CitzdHJ1Y3QgRml4ZWRUb0Zsb2F0Cit7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHkg
PSBmYWxzZTsKKworICAgIHR5cGVkZWYgZmxvYXQgT3V0cHV0VHlwZTsKKworICAgIHN0YXRpYyBm
bG9hdCBjb252ZXJ0KEZyb21UeXBlIHgpCisgICAgeworICAgICAgICBjb25zdCBmbG9hdCBkaXZp
c29yID0gMS4wZiAvIHN0YXRpY19jYXN0PGZsb2F0PihzdGF0aWNfY2FzdDxGcm9tVHlwZT4oMSkg
PDwgU2NhbGVCaXRzKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih4KSAqIGRp
dmlzb3I7CisgICAgfQorfTsKKworLy8gV2lkZW4gdHlwZXM6CisvLyBzdGF0aWMgY29uc3QgdW5z
aWduZWQgaW50IGluaXRpYWxXaWR0aDogbnVtYmVyIG9mIGNvbXBvbmVudHMgYmVmb3JlIGNvbnZl
cnNpb24KKy8vIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZmluYWxXaWR0aDogbnVtYmVyIG9m
IGNvbXBvbmVudHMgYWZ0ZXIgY29udmVyc2lvbgorCisvLyBGbG9hdCBpcyBzdXBwb3J0ZWQgYXQg
YW55IHNpemUuCit0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTj4KK3N0cnVjdCBOb1dpZGVuCit7Cisg
ICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IGluaXRpYWxXaWR0aCA9IE47CisgICAgc3RhdGlj
IGNvbnN0IHN0ZDo6c2l6ZV90IGZpbmFsV2lkdGggPSBOOworfTsKKworLy8gU0hPUlQsIG5vcm0t
U0hPUlQsIG5vcm0tVU5TSUdORURfU0hPUlQgYXJlIHN1cHBvcnRlZCBidXQgb25seSB3aXRoIDIg
b3IgNCBjb21wb25lbnRzCit0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTj4KK3N0cnVjdCBXaWRlblRv
RXZlbgoreworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBpbml0aWFsV2lkdGggPSBOOwor
ICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5hbFdpZHRoID0gTisoTiYxKTsKK307CisK
K3RlbXBsYXRlIDxzdGQ6OnNpemVfdCBOPgorc3RydWN0IFdpZGVuVG9Gb3VyCit7CisgICAgc3Rh
dGljIGNvbnN0IHN0ZDo6c2l6ZV90IGluaXRpYWxXaWR0aCA9IE47CisgICAgc3RhdGljIGNvbnN0
IHN0ZDo6c2l6ZV90IGZpbmFsV2lkdGggPSA0OworfTsKKworLy8gTW9zdCB0eXBlcyBoYXZlIDAg
YW5kIDEgdGhhdCBhcmUganVzdCB0aGF0LgordGVtcGxhdGUgPGNsYXNzIFQ+CitzdHJ1Y3QgU2lt
cGxlRGVmYXVsdFZhbHVlcworeworICAgIHN0YXRpYyBUIHplcm8oKSB7IHJldHVybiBzdGF0aWNf
Y2FzdDxUPigwKTsgfQorICAgIHN0YXRpYyBUIG9uZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFQ+
KDEpOyB9Cit9OworCisvLyBCdXQgbm9ybWFsaXNlZCB0eXBlcyBvbmx5IHN0b3JlIFswLDFdIG9y
IFstMSwxXSBzbyAxLjAgaXMgcmVwcmVzZW50ZWQgYnkgdGhlIG1heCB2YWx1ZS4KK3RlbXBsYXRl
IDxjbGFzcyBUPgorc3RydWN0IE5vcm1hbGl6ZWREZWZhdWx0VmFsdWVzCit7CisgICAgc3RhdGlj
IFQgemVybygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KDApOyB9CisgICAgc3RhdGljIFQgb25l
KCkgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCk7IH0KK307CisKKy8vIENv
bnZlcnRlcjoKKy8vIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5OiB0cnVlIGlmIHRoaXMgaXMg
YW4gaWRlbnRpdHkgdHJhbnNmb3JtICh3aXRoIG5vIHdpZGVuaW5nKQorLy8gc3RhdGljIGNvbnN0
IHN0ZDo6c2l6ZV90IGZpbmFsU2l6ZTogbnVtYmVyIG9mIGJ5dGVzIHBlciBvdXRwdXQgdmVydGV4
CisvLyBzdGF0aWMgdm9pZCBjb252ZXJ0QXJyYXkoY29uc3Qgdm9pZCAqaW4sIHN0ZDo6c2l6ZV90
IHN0cmlkZSwgc3RkOjpzaXplX3Qgbiwgdm9pZCAqb3V0KTogY29udmVydCBhbiBhcnJheSBvZiB2
ZXJ0aWNlcy4gSW5wdXQgbWF5IGJlIHN0cmlkZWQsIGJ1dCBvdXRwdXQgd2lsbCBiZSB1bnN0cmlk
ZWQuCisKK3RlbXBsYXRlIDxjbGFzcyBJblQsIGNsYXNzIFdpZGVuUnVsZSwgY2xhc3MgQ29udmVy
dGVyLCBjbGFzcyBEZWZhdWx0VmFsdWVSdWxlID0gU2ltcGxlRGVmYXVsdFZhbHVlczxJblQ+ID4K
K3N0cnVjdCBWZXJ0ZXhEYXRhQ29udmVydGVyCit7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDb252
ZXJ0ZXI6Ok91dHB1dFR5cGUgT3V0cHV0VHlwZTsKKyAgICB0eXBlZGVmIEluVCBJbnB1dFR5cGU7
CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9IChXaWRlblJ1bGU6OmluaXRpYWxX
aWR0aCA9PSBXaWRlblJ1bGU6OmZpbmFsV2lkdGgpICYmIENvbnZlcnRlcjo6aWRlbnRpdHk7Cisg
ICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IGZpbmFsU2l6ZSA9IFdpZGVuUnVsZTo6ZmluYWxX
aWR0aCAqIHNpemVvZihPdXRwdXRUeXBlKTsKKworICAgIHN0YXRpYyB2b2lkIGNvbnZlcnRBcnJh
eShjb25zdCBJbnB1dFR5cGUgKmluLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90IG4s
IE91dHB1dFR5cGUgKm91dCkKKyAgICB7CisgICAgICAgIGZvciAoc3RkOjpzaXplX3QgaSA9IDA7
IGkgPCBuOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IElucHV0VHlwZSAqZWlu
ID0gcG9pbnRlckFkZEJ5dGVzKGluLCBpICogc3RyaWRlKTsKKworICAgICAgICAgICAgY29weUNv
bXBvbmVudChvdXQsIGVpbiwgMCwgc3RhdGljX2Nhc3Q8T3V0cHV0VHlwZT4oRGVmYXVsdFZhbHVl
UnVsZTo6emVybygpKSk7CisgICAgICAgICAgICBjb3B5Q29tcG9uZW50KG91dCwgZWluLCAxLCBz
dGF0aWNfY2FzdDxPdXRwdXRUeXBlPihEZWZhdWx0VmFsdWVSdWxlOjp6ZXJvKCkpKTsKKyAgICAg
ICAgICAgIGNvcHlDb21wb25lbnQob3V0LCBlaW4sIDIsIHN0YXRpY19jYXN0PE91dHB1dFR5cGU+
KERlZmF1bHRWYWx1ZVJ1bGU6Onplcm8oKSkpOworICAgICAgICAgICAgY29weUNvbXBvbmVudChv
dXQsIGVpbiwgMywgc3RhdGljX2Nhc3Q8T3V0cHV0VHlwZT4oRGVmYXVsdFZhbHVlUnVsZTo6b25l
KCkpKTsKKworICAgICAgICAgICAgb3V0ICs9IFdpZGVuUnVsZTo6ZmluYWxXaWR0aDsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGNvbnZlcnRBcnJheShjb25zdCB2b2lkICpp
biwgc3RkOjpzaXplX3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBuLCB2b2lkICpvdXQpCisgICAgewor
ICAgICAgICByZXR1cm4gY29udmVydEFycmF5KHN0YXRpY19jYXN0PGNvbnN0IElucHV0VHlwZSo+
KGluKSwgc3RyaWRlLCBuLCBzdGF0aWNfY2FzdDxPdXRwdXRUeXBlKj4ob3V0KSk7CisgICAgfQor
CisgIHByaXZhdGU6CisgICAgLy8gQWR2YW5jZSB0aGUgZ2l2ZW4gcG9pbnRlciBieSBhIG51bWJl
ciBvZiBieXRlcyAobm90IHBvaW50ZWQtdG8gZWxlbWVudHMpLgorICAgIHRlbXBsYXRlIDxjbGFz
cyBUPgorICAgIHN0YXRpYyBUICpwb2ludGVyQWRkQnl0ZXMoVCAqYmFzZVB0ciwgc3RkOjpzaXpl
X3QgbnVtQnl0ZXMpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUICo+
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihiYXNlUHRyKSArIG51bUJ5dGVzKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgdm9pZCBjb3B5Q29tcG9uZW50KE91dHB1dFR5cGUgKm91dCwgY29uc3Qg
SW5wdXRUeXBlICppbiwgc3RkOjpzaXplX3QgZWxlbWVudGluZGV4LCBPdXRwdXRUeXBlIGRlZmF1
bHR2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChXaWRlblJ1bGU6OmZpbmFsV2lkdGggPiBlbGVt
ZW50aW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChXaWRlblJ1bGU6OmluaXRpYWxX
aWR0aCA+IGVsZW1lbnRpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRb
ZWxlbWVudGluZGV4XSA9IENvbnZlcnRlcjo6Y29udmVydChpbltlbGVtZW50aW5kZXhdKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBvdXRbZWxlbWVudGluZGV4XSA9IGRlZmF1bHR2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KK307CisKK30KKworI2VuZGlmICAgLy8gTElCR0xFU1YyX1ZFUlRFWENP
TlZFUlNJT05fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvcmVuZGVyZXIxMV91dGlscy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3JlbmRlcmVyMTFfdXRpbHMuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzgwMGRhMjU4Y2U1OTM5NzM1NDc4ZDVlYTg3ZmQxMzdj
YjhhMDgxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXIxMV91
dGlscy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2ODggKzAsMCBAQAotI2luY2x1ZGUgInByZWNv
bXBpbGVkLmgiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gcmVuZGVyZXIxMV91dGlscy5jcHA6IENvbnZl
cnNpb24gZnVuY3Rpb25zIGFuZCBvdGhlciB1dGlsaXR5IHJvdXRpbmVzCi0vLyBzcGVjaWZpYyB0
byB0aGUgRDNEMTEgcmVuZGVyZXIuCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvcmVu
ZGVyZXIxMV91dGlscy5oIgotCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0KLW5hbWVzcGFj
ZSBnbF9kM2QxMQotewotCi1EM0QxMV9CTEVORCBDb252ZXJ0QmxlbmRGdW5jKEdMZW51bSBnbEJs
ZW5kLCBib29sIGlzQWxwaGEpCi17Ci0gICAgRDNEMTFfQkxFTkQgZDNkQmxlbmQgPSBEM0QxMV9C
TEVORF9aRVJPOwotCi0gICAgc3dpdGNoIChnbEJsZW5kKQotICAgIHsKLSAgICAgIGNhc2UgR0xf
WkVSTzogICAgICAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzRDExX0JMRU5EX1pFUk87ICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9PTkU6ICAgICAgICAgICAgICAgICAg
ICAgIGQzZEJsZW5kID0gRDNEMTFfQkxFTkRfT05FOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX1NSQ19DT0xPUjogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSAoaXNBbHBo
YSA/IEQzRDExX0JMRU5EX1NSQ19BTFBIQSA6IEQzRDExX0JMRU5EX1NSQ19DT0xPUik7ICAgICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19DT0xPUjogICAgICBkM2RC
bGVuZCA9IChpc0FscGhhID8gRDNEMTFfQkxFTkRfSU5WX1NSQ19BTFBIQSA6IEQzRDExX0JMRU5E
X0lOVl9TUkNfQ09MT1IpOyAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9EU1RfQ09MT1I6ICAgICAg
ICAgICAgICAgIGQzZEJsZW5kID0gKGlzQWxwaGEgPyBEM0QxMV9CTEVORF9ERVNUX0FMUEhBIDog
RDNEMTFfQkxFTkRfREVTVF9DT0xPUik7ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX09O
RV9NSU5VU19EU1RfQ09MT1I6ICAgICAgZDNkQmxlbmQgPSAoaXNBbHBoYSA/IEQzRDExX0JMRU5E
X0lOVl9ERVNUX0FMUEhBIDogRDNEMTFfQkxFTkRfSU5WX0RFU1RfQ09MT1IpOyBicmVhazsKLSAg
ICAgIGNhc2UgR0xfU1JDX0FMUEhBOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzRDExX0JM
RU5EX1NSQ19BTFBIQTsgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9PTkVfTUlOVVNf
U1JDX0FMUEhBOiAgICAgIGQzZEJsZW5kID0gRDNEMTFfQkxFTkRfSU5WX1NSQ19BTFBIQTsgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RTVF9BTFBIQTogICAgICAgICAgICAgICAgZDNkQmxl
bmQgPSBEM0QxMV9CTEVORF9ERVNUX0FMUEhBOyAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfT05FX01JTlVTX0RTVF9BTFBIQTogICAgICBkM2RCbGVuZCA9IEQzRDExX0JMRU5EX0lOVl9E
RVNUX0FMUEhBOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DT05TVEFOVF9DT0xPUjogICAg
ICAgICAgIGQzZEJsZW5kID0gRDNEMTFfQkxFTkRfQkxFTkRfRkFDVE9SOyAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUjogZDNkQmxlbmQgPSBEM0Qx
MV9CTEVORF9JTlZfQkxFTkRfRkFDVE9SOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ09OU1RB
TlRfQUxQSEE6ICAgICAgICAgICBkM2RCbGVuZCA9IEQzRDExX0JMRU5EX0JMRU5EX0ZBQ1RPUjsg
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEE6IGQz
ZEJsZW5kID0gRDNEMTFfQkxFTkRfSU5WX0JMRU5EX0ZBQ1RPUjsgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX1NSQ19BTFBIQV9TQVRVUkFURTogICAgICAgZDNkQmxlbmQgPSBEM0QxMV9CTEVORF9T
UkNfQUxQSEFfU0FUOyAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIGQzZEJsZW5kOwotfQotCi1EM0QxMV9CTEVORF9PUCBDb252
ZXJ0QmxlbmRPcChHTGVudW0gZ2xCbGVuZE9wKQotewotICAgIEQzRDExX0JMRU5EX09QIGQzZEJs
ZW5kT3AgPSBEM0QxMV9CTEVORF9PUF9BREQ7Ci0KLSAgICBzd2l0Y2ggKGdsQmxlbmRPcCkKLSAg
ICB7Ci0gICAgICBjYXNlIEdMX0ZVTkNfQUREOiAgICAgICAgICAgICAgZDNkQmxlbmRPcCA9IEQz
RDExX0JMRU5EX09QX0FERDsgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GVU5DX1NV
QlRSQUNUOiAgICAgICAgIGQzZEJsZW5kT3AgPSBEM0QxMV9CTEVORF9PUF9TVUJUUkFDVDsgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUOiBkM2RCbGVuZE9w
ID0gRDNEMTFfQkxFTkRfT1BfUkVWX1NVQlRSQUNUOyAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBkM2RCbGVuZE9wOwotfQotCi1VSU5U
OCBDb252ZXJ0Q29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wg
YWxwaGEpCi17Ci0gICAgVUlOVDggbWFzayA9IDA7Ci0gICAgaWYgKHJlZCkKLSAgICB7Ci0gICAg
ICAgIG1hc2sgfD0gRDNEMTFfQ09MT1JfV1JJVEVfRU5BQkxFX1JFRDsKLSAgICB9Ci0gICAgaWYg
KGdyZWVuKQotICAgIHsKLSAgICAgICAgbWFzayB8PSBEM0QxMV9DT0xPUl9XUklURV9FTkFCTEVf
R1JFRU47Ci0gICAgfQotICAgIGlmIChibHVlKQotICAgIHsKLSAgICAgICAgbWFzayB8PSBEM0Qx
MV9DT0xPUl9XUklURV9FTkFCTEVfQkxVRTsKLSAgICB9Ci0gICAgaWYgKGFscGhhKQotICAgIHsK
LSAgICAgICAgbWFzayB8PSBEM0QxMV9DT0xPUl9XUklURV9FTkFCTEVfQUxQSEE7Ci0gICAgfQot
ICAgIHJldHVybiBtYXNrOwotfQotCi1EM0QxMV9DVUxMX01PREUgQ29udmVydEN1bGxNb2RlKGJv
b2wgY3VsbEVuYWJsZWQsIEdMZW51bSBjdWxsTW9kZSkKLXsKLSAgICBEM0QxMV9DVUxMX01PREUg
Y3VsbCA9IEQzRDExX0NVTExfTk9ORTsKLQotICAgIGlmIChjdWxsRW5hYmxlZCkKLSAgICB7Ci0g
ICAgICAgIHN3aXRjaCAoY3VsbE1vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZS
T05UOiAgICAgICAgICAgIGN1bGwgPSBEM0QxMV9DVUxMX0ZST05UOyAgICBicmVhazsKLSAgICAg
ICAgICBjYXNlIEdMX0JBQ0s6ICAgICAgICAgICAgIGN1bGwgPSBEM0QxMV9DVUxMX0JBQ0s7ICAg
ICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZST05UX0FORF9CQUNLOiAgIGN1bGwgPSBEM0Qx
MV9DVUxMX05PTkU7ICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGN1bGwgPSBEM0Qx
MV9DVUxMX05PTkU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGN1bGw7Ci19Ci0KLUQzRDExX0NPTVBB
UklTT05fRlVOQyBDb252ZXJ0Q29tcGFyaXNvbihHTGVudW0gY29tcGFyaXNvbikKLXsKLSAgICBE
M0QxMV9DT01QQVJJU09OX0ZVTkMgZDNkQ29tcCA9IEQzRDExX0NPTVBBUklTT05fTkVWRVI7Ci0g
ICAgc3dpdGNoIChjb21wYXJpc29uKQotICAgIHsKLSAgICAgIGNhc2UgR0xfTkVWRVI6ICAgIGQz
ZENvbXAgPSBEM0QxMV9DT01QQVJJU09OX05FVkVSOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0FMV0FZUzogICBkM2RDb21wID0gRDNEMTFfQ09NUEFSSVNPTl9BTFdBWVM7ICAgICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MRVNTOiAgICAgZDNkQ29tcCA9IEQzRDExX0NPTVBB
UklTT05fTEVTUzsgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTEVRVUFMOiAgIGQz
ZENvbXAgPSBEM0QxMV9DT01QQVJJU09OX0xFU1NfRVFVQUw7ICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0VRVUFMOiAgICBkM2RDb21wID0gRDNEMTFfQ09NUEFSSVNPTl9FUVVBTDsgICAgICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9HUkVBVEVSOiAgZDNkQ29tcCA9IEQzRDExX0NPTVBB
UklTT05fR1JFQVRFUjsgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfR0VRVUFMOiAgIGQz
ZENvbXAgPSBEM0QxMV9DT01QQVJJU09OX0dSRUFURVJfRVFVQUw7ICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX05PVEVRVUFMOiBkM2RDb21wID0gRDNEMTFfQ09NUEFSSVNPTl9OT1RfRVFVQUw7ICAg
ICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gZDNkQ29tcDsKLX0KLQotRDNEMTFfREVQVEhfV1JJVEVfTUFTSyBDb252ZXJ0RGVwdGhN
YXNrKGJvb2wgZGVwdGhXcml0ZUVuYWJsZWQpCi17Ci0gICAgcmV0dXJuIGRlcHRoV3JpdGVFbmFi
bGVkID8gRDNEMTFfREVQVEhfV1JJVEVfTUFTS19BTEwgOiBEM0QxMV9ERVBUSF9XUklURV9NQVNL
X1pFUk87Ci19Ci0KLVVJTlQ4IENvbnZlcnRTdGVuY2lsTWFzayhHTHVpbnQgc3RlbmNpbG1hc2sp
Ci17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFVJTlQ4PihzdGVuY2lsbWFzayk7Ci19Ci0KLUQz
RDExX1NURU5DSUxfT1AgQ29udmVydFN0ZW5jaWxPcChHTGVudW0gc3RlbmNpbE9wKQotewotICAg
IEQzRDExX1NURU5DSUxfT1AgZDNkU3RlbmNpbE9wID0gRDNEMTFfU1RFTkNJTF9PUF9LRUVQOwot
Ci0gICAgc3dpdGNoIChzdGVuY2lsT3ApCi0gICAgewotICAgICAgY2FzZSBHTF9aRVJPOiAgICAg
IGQzZFN0ZW5jaWxPcCA9IEQzRDExX1NURU5DSUxfT1BfWkVSTzsgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfS0VFUDogICAgICBkM2RTdGVuY2lsT3AgPSBEM0QxMV9TVEVOQ0lMX09QX0tFRVA7
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JFUExBQ0U6ICAgZDNkU3RlbmNpbE9wID0gRDNE
MTFfU1RFTkNJTF9PUF9SRVBMQUNFOyAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9JTkNSOiAgICAg
IGQzZFN0ZW5jaWxPcCA9IEQzRDExX1NURU5DSUxfT1BfSU5DUl9TQVQ7ICBicmVhazsKLSAgICAg
IGNhc2UgR0xfREVDUjogICAgICBkM2RTdGVuY2lsT3AgPSBEM0QxMV9TVEVOQ0lMX09QX0RFQ1Jf
U0FUOyAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0lOVkVSVDogICAgZDNkU3RlbmNpbE9wID0gRDNE
MTFfU1RFTkNJTF9PUF9JTlZFUlQ7ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9JTkNSX1dSQVA6
IGQzZFN0ZW5jaWxPcCA9IEQzRDExX1NURU5DSUxfT1BfSU5DUjsgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfREVDUl9XUkFQOiBkM2RTdGVuY2lsT3AgPSBEM0QxMV9TVEVOQ0lMX09QX0RFQ1I7
ICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAg
IHJldHVybiBkM2RTdGVuY2lsT3A7Ci19Ci0KLUQzRDExX0ZJTFRFUiBDb252ZXJ0RmlsdGVyKEdM
ZW51bSBtaW5GaWx0ZXIsIEdMZW51bSBtYWdGaWx0ZXIsIGZsb2F0IG1heEFuaXNvdHJvcHkpCi17
Ci0gICAgaWYgKG1heEFuaXNvdHJvcHkgPiAxLjBmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEQz
RDExX0VOQ09ERV9BTklTT1RST1BJQ19GSUxURVIoZmFsc2UpOwotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgICBEM0QxMV9GSUxURVJfVFlQRSBkeE1pbiA9IEQzRDExX0ZJTFRFUl9UWVBF
X1BPSU5UOwotICAgICAgICBEM0QxMV9GSUxURVJfVFlQRSBkeE1pcCA9IEQzRDExX0ZJTFRFUl9U
WVBFX1BPSU5UOwotICAgICAgICBzd2l0Y2ggKG1pbkZpbHRlcikKLSAgICAgICAgewotICAgICAg
ICAgIGNhc2UgR0xfTkVBUkVTVDogICAgICAgICAgICAgICAgZHhNaW4gPSBEM0QxMV9GSUxURVJf
VFlQRV9QT0lOVDsgIGR4TWlwID0gRDNEMTFfRklMVEVSX1RZUEVfUE9JTlQ7ICBicmVhazsKLSAg
ICAgICAgICBjYXNlIEdMX0xJTkVBUjogICAgICAgICAgICAgICAgIGR4TWluID0gRDNEMTFfRklM
VEVSX1RZUEVfTElORUFSOyBkeE1pcCA9IEQzRDExX0ZJTFRFUl9UWVBFX1BPSU5UOyAgYnJlYWs7
Ci0gICAgICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOiBkeE1pbiA9IEQzRDEx
X0ZJTFRFUl9UWVBFX1BPSU5UOyAgZHhNaXAgPSBEM0QxMV9GSUxURVJfVFlQRV9QT0lOVDsgIGJy
ZWFrOwotICAgICAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOiAgZHhNaW4gPSBE
M0QxMV9GSUxURVJfVFlQRV9MSU5FQVI7IGR4TWlwID0gRDNEMTFfRklMVEVSX1RZUEVfUE9JTlQ7
ICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjogIGR4TWlu
ID0gRDNEMTFfRklMVEVSX1RZUEVfUE9JTlQ7ICBkeE1pcCA9IEQzRDExX0ZJTFRFUl9UWVBFX0xJ
TkVBUjsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUjogICBk
eE1pbiA9IEQzRDExX0ZJTFRFUl9UWVBFX0xJTkVBUjsgZHhNaXAgPSBEM0QxMV9GSUxURVJfVFlQ
RV9MSU5FQVI7IGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEQzRDExX0ZJTFRFUl9UWVBF
IGR4TWFnID0gRDNEMTFfRklMVEVSX1RZUEVfUE9JTlQ7Ci0gICAgICAgIHN3aXRjaCAobWFnRmls
dGVyKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9ORUFSRVNUOiBkeE1hZyA9IEQzRDEx
X0ZJTFRFUl9UWVBFX1BPSU5UOyAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9MSU5FQVI6ICBk
eE1hZyA9IEQzRDExX0ZJTFRFUl9UWVBFX0xJTkVBUjsgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVs
dDogICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIEQz
RDExX0VOQ09ERV9CQVNJQ19GSUxURVIoZHhNaW4sIGR4TWFnLCBkeE1pcCwgZmFsc2UpOwotICAg
IH0KLX0KLQotRDNEMTFfVEVYVFVSRV9BRERSRVNTX01PREUgQ29udmVydFRleHR1cmVXcmFwKEdM
ZW51bSB3cmFwKQotewotICAgIHN3aXRjaCAod3JhcCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1JF
UEVBVDogICAgICAgICAgcmV0dXJuIEQzRDExX1RFWFRVUkVfQUREUkVTU19XUkFQOwotICAgICAg
Y2FzZSBHTF9DTEFNUF9UT19FREdFOiAgIHJldHVybiBEM0QxMV9URVhUVVJFX0FERFJFU1NfQ0xB
TVA7Ci0gICAgICBjYXNlIEdMX01JUlJPUkVEX1JFUEVBVDogcmV0dXJuIEQzRDExX1RFWFRVUkVf
QUREUkVTU19NSVJST1I7Ci0gICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gRDNEMTFfVEVYVFVSRV9BRERSRVNTX1dSQVA7Ci19
Ci0KLUZMT0FUIENvbnZlcnRNaW5MT0QoR0xlbnVtIG1pbkZpbHRlciwgdW5zaWduZWQgaW50IGxv
ZE9mZnNldCkKLXsKLSAgICByZXR1cm4gKG1pbkZpbHRlciA9PSBHTF9ORUFSRVNUIHx8IG1pbkZp
bHRlciA9PSBHTF9MSU5FQVIpID8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGxvZE9mZnNldCkgOiAtRkxU
X01BWDsKLX0KLQotRkxPQVQgQ29udmVydE1heExPRChHTGVudW0gbWluRmlsdGVyLCB1bnNpZ25l
ZCBpbnQgbG9kT2Zmc2V0KQotewotICAgIHJldHVybiAobWluRmlsdGVyID09IEdMX05FQVJFU1Qg
fHwgbWluRmlsdGVyID09IEdMX0xJTkVBUikgPyBzdGF0aWNfY2FzdDxmbG9hdD4obG9kT2Zmc2V0
KSA6IEZMVF9NQVg7Ci19Ci0KLX0KLQotbmFtZXNwYWNlIGQzZDExX2dsCi17Ci0KLUdMZW51bSBD
b252ZXJ0QmFja0J1ZmZlckZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNo
IChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STTog
cmV0dXJuIEdMX1JHQkE4X09FUzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5P
Uk06IHJldHVybiBHTF9CR1JBOF9FWFQ7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNI
QUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Ci19Ci0KLUdMZW51bSBD
b252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAgICBzd2l0
Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1VOS05PV046IHJldHVy
biBHTF9OT05FOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZfVU5PUk06IHJldHVybiBHTF9E
RVBUSF9DT01QT05FTlQxNjsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJ
TlQ6IHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLSAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJ
TDhfT0VTOwotfQotCi1HTGVudW0gQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChEWEdJX0ZPUk1B
VCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9COEc4UjhBOF9VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0JHUkE4X0VYVDsKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk06Ci0gICAgICAgIHJldHVybiBHTF9S
R0JBOF9PRVM7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9STToKLSAgICAgICAgcmV0
dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2OwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRfVU5P
Uk1fUzhfVUlOVDoKLSAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
R0xfUkdCQThfT0VTOwotfQotCi1HTGVudW0gQ29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChE
WEdJX0ZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX1JHQkE4
X09FUzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQThfVU5PUk06Ci0gICAgICAgIHJldHVybiBH
TF9BTFBIQThfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk06Ci0gICAgICAg
IHJldHVybiBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDsKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkMyX1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUM19BTkdMRTsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNOgotICAgICAg
ICByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRTsKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUOgotICAgICAgICByZXR1cm4gR0xfUkdCQTMy
Rl9FWFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVDoKLSAgICAgICAg
cmV0dXJuIEdMX1JHQjMyRl9FWFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkEx
Nl9GTE9BVDoKLSAgICAgICAgcmV0dXJuIEdMX1JHQkExNkZfRVhUOwotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9COEc4UjhBOF9VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0JHUkE4X0VYVDsKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVU5PUk06Ci0gICAgICAgIHJldHVybiBHTF9SOF9FWFQ7
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfVU5PUk06Ci0gICAgICAgIHJldHVybiBHTF9S
RzhfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfRkxPQVQ6Ci0gICAgICAgIHJldHVy
biBHTF9SMTZGX0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X0ZMT0FUOgotICAg
ICAgICByZXR1cm4gR0xfUkcxNkZfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZfVU5P
Uk06Ci0gICAgICAgIHJldHVybiBHTF9ERVBUSF9DT01QT05FTlQxNjsKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ6Ci0gICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NU
RU5DSUw4X09FUzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfVU5LTk9XTjoKLSAgICAgICAgcmV0
dXJuIEdMX05PTkU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAg
IH0KLQotICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Ci19Ci0KLX0KLQotbmFtZXNwYWNlIGdsX2Qz
ZDExCi17Ci0KLURYR0lfRk9STUFUIENvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoR0xlbnVtIGZv
cm1hdCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1JHQkE0
OgotICAgICAgY2FzZSBHTF9SR0I1X0ExOgotICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6Ci0gICAg
ICBjYXNlIEdMX1JHQjU2NToKLSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6Ci0gICAgICAgIHJldHVy
biBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STTsKLSAgICAgIGNhc2UgR0xfQkdSQThfRVhUOgot
ICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk07Ci0gICAgICBjYXNlIEdM
X0RFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfRDE2X1VOT1JN
OwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVYODoKLSAgICAgIGNhc2UgR0xfREVQVEgyNF9T
VEVOQ0lMOF9PRVM6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlO
VDsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOwotfQotCi1EWEdJX0ZPUk1BVCBDb252
ZXJ0VGV4dHVyZUZvcm1hdChHTGVudW0gaW50ZXJuYWxmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChp
bnRlcm5hbGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1JHQjU2NToKLSAgICAgIGNhc2Ug
R0xfUkdCQTQ6Ci0gICAgICBjYXNlIEdMX1JHQjVfQTE6Ci0gICAgICBjYXNlIEdMX1JHQjhfT0VT
OgotICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRThfRVhU
OgotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQ6Ci0gICAgICAgIHJldHVybiBE
WEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STTsKLSAgICAgIGNhc2UgR0xfQUxQSEE4X0VYVDoKLSAg
ICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0E4X1VOT1JNOwotICAgICAgY2FzZSBHTF9DT01QUkVT
U0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNU
Q19EWFQxX0VYVDoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0JDMV9VTk9STTsKLSAgICAg
IGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKLSAgICAgICAgcmV0dXJu
IERYR0lfRk9STUFUX0JDMl9VTk9STTsKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUNV9BTkdMRToKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0JDM19VTk9STTsKLSAg
ICAgIGNhc2UgR0xfUkdCQTMyRl9FWFQ6Ci0gICAgICBjYXNlIEdMX0FMUEhBMzJGX0VYVDoKLSAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVDoKLSAgICAgICAgcmV0dXJuIERYR0lf
Rk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDsKLSAgICAgIGNhc2UgR0xfUkdCMzJGX0VYVDoKLSAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFMzJGX0VYVDoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFU
X1IzMkczMkIzMkEzMl9GTE9BVDsKLSAgICAgIGNhc2UgR0xfUkdCQTE2Rl9FWFQ6Ci0gICAgICBj
YXNlIEdMX0FMUEhBMTZGX0VYVDoKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VY
VDoKLSAgICAgIGNhc2UgR0xfUkdCMTZGX0VYVDoKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZG
X0VYVDoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9BVDsKLSAg
ICAgIGNhc2UgR0xfQkdSQThfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfQjhHOFI4
QThfVU5PUk07Ci0gICAgICBjYXNlIEdMX1I4X0VYVDoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9S
TUFUX1I4X1VOT1JNOwotICAgICAgY2FzZSBHTF9SRzhfRVhUOgotICAgICAgICByZXR1cm4gRFhH
SV9GT1JNQVRfUjhHOF9VTk9STTsKLSAgICAgIGNhc2UgR0xfUjE2Rl9FWFQ6Ci0gICAgICAgIHJl
dHVybiBEWEdJX0ZPUk1BVF9SMTZfRkxPQVQ7Ci0gICAgICBjYXNlIEdMX1JHMTZGX0VYVDoKLSAg
ICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1IxNkcxNl9GTE9BVDsKLSAgICAgIGNhc2UgR0xfREVQ
VEhfQ09NUE9ORU5UMTY6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9EMTZfVU5PUk07Ci0g
ICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUzoKLSAgICAgIGNhc2UgR0xfREVQVEgy
NF9TVEVOQ0lMOF9PRVM6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhf
VUlOVDsKLSAgICAgIGNhc2UgR0xfTk9ORToKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1VO
S05PV047Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQot
ICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STTsKLX0KLQotfQotCi1uYW1lc3Bh
Y2UgZDNkMTEKLXsKLQotdm9pZCBTZXRQb3NpdGlvblRleENvb3JkVmVydGV4KFBvc2l0aW9uVGV4
Q29vcmRWZXJ0ZXgqIHZlcnRleCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgdSwgZmxvYXQgdikK
LXsKLSAgICB2ZXJ0ZXgtPnggPSB4OwotICAgIHZlcnRleC0+eSA9IHk7Ci0gICAgdmVydGV4LT51
ID0gdTsKLSAgICB2ZXJ0ZXgtPnYgPSB2OwotfQotCi12b2lkIFNldFBvc2l0aW9uRGVwdGhDb2xv
clZlcnRleChQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgqIHZlcnRleCwgZmxvYXQgeCwgZmxvYXQg
eSwgZmxvYXQgeiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpD
b2xvciAmY29sb3IpCi17Ci0gICAgdmVydGV4LT54ID0geDsKLSAgICB2ZXJ0ZXgtPnkgPSB5Owot
ICAgIHZlcnRleC0+eiA9IHo7Ci0gICAgdmVydGV4LT5yID0gY29sb3IucmVkOwotICAgIHZlcnRl
eC0+ZyA9IGNvbG9yLmdyZWVuOwotICAgIHZlcnRleC0+YiA9IGNvbG9yLmJsdWU7Ci0gICAgdmVy
dGV4LT5hID0gY29sb3IuYWxwaGE7Ci19Ci0KLXNpemVfdCBDb21wdXRlUGl4ZWxTaXplQml0cyhE
WEdJX0ZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMV9VTk9STToKLSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfQThfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1NJTlQ6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9SOF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVUlOVDoKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfUjhfVU5PUk06Ci0gICAgICAgIHJldHVybiA4OwotCi0gICAgICBjYXNl
IERYR0lfRk9STUFUX0I1RzVSNUExX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CNUc2
UjVfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9STToKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjE2X0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfU0lOVDoK
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9SMTZfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNl9VSU5UOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMTZfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4Rzhf
U0lOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9TTk9STToKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfUjhHOF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9VSU5U
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNOgotICAgICAgICByZXR1cm4gMTY7
Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4WDhfVFlQRUxFU1M6Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX0I4RzhSOFg4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4
UjhYOF9VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlO
VDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9EMzJfRkxPQVRfUzhYMjRfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRzhSOF9H
OEI4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTBHMTBCMTBfWFJfQklBU19BMl9V
Tk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjEwRzEwQjEwQTJfVFlQRUxFU1M6Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX1IxMEcxMEIxMEEyX1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1IxMEcxMEIxMEEyX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTFHMTFCMTBf
RkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9GTE9BVDoKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjE2RzE2X1NJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9T
Tk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X1RZUEVMRVNTOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9SMTZHMTZfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2
X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMjRfVU5PUk1fWDhfVFlQRUxFU1M6Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX1IyNEc4X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SMzJfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMl9GTE9BVF9YOFgyNF9U
WVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyX1NJTlQ6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX1IzMl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyX1VJTlQ6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfQjhHOF9VTk9STToKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfUjhHOEI4QThfU0lOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThf
U05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1RZUEVMRVNTOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
OEc4QjhBOF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk1fU1JH
QjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVFlQRUxFU1M6Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4
UjhBOF9VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOUc5QjlFNV9TSEFSRURF
WFA6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1gyNF9UWVBFTEVTU19HOF9VSU5UOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9YMzJfVFlQRUxFU1NfRzhYMjRfVUlOVDoKLSAgICAgICAgcmV0dXJu
IDMyOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9BVDoKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1NJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1IxNkcxNkIxNkExNl9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2
QTE2X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfVUlOVDoK
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1VOT1JNOgotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMl9T
SU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJfVFlQRUxFU1M6Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX1IzMkczMl9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHOFgy
NF9UWVBFTEVTUzoKLSAgICAgICAgcmV0dXJuIDY0OwotCi0gICAgICBjYXNlIERYR0lfRk9STUFU
X1IzMkczMkIzMl9GTE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX1NJTlQ6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9UWVBFTEVTUzoKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjMyRzMyQjMyX1VJTlQ6Ci0gICAgICAgIHJldHVybiA5NjsKLQotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1IzMkczMkIzMkEzMl9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJB
MzJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9VSU5UOgot
ICAgICAgICByZXR1cm4gMTI4OwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9UWVBFTEVT
UzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzFfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1NOT1JNOgot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0JDNF9VTk9STToKLSAgICAgICAgcmV0dXJuIDQ7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkMyX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk06Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9CQzNfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STToKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0JDNV9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1RZUEVMRVNTOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9CQzVfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhf
U0YxNjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9UWVBFTEVTUzoKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkM2SF9VRjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVFlQRUxF
U1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9STToKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfQkM3X1VOT1JNX1NSR0I6Ci0gICAgICAgIHJldHVybiA4OwotCi0gICAgICBkZWZhdWx0
OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLXNpemVfdCBDb21wdXRlQmxvY2tTaXpl
Qml0cyhEWEdJX0ZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0JDMV9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNX1NSR0I6Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
QkM0X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVU5PUk06Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0JDMl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMy
X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk1fU1JHQjoKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfQkMzX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNf
VU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STV9TUkdCOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzVfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9UWVBF
TEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1VOT1JNOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9CQzZIX1NGMTY6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVFlQRUxFU1M6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVUYxNjoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkM3X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk06Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9STV9TUkdCOgotICAgICAgICByZXR1cm4gQ29tcHV0
ZVBpeGVsU2l6ZUJpdHMoZm9ybWF0KSAqIDE2OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5S
RUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1ib29sIElzQ29tcHJl
c3NlZChEWEdJX0ZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0JDMV9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNX1NSR0I6Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
QkM0X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVU5PUk06Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0JDMl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMy
X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk1fU1JHQjoKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfQkMzX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNf
VU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STV9TUkdCOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzVfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9UWVBF
TEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1VOT1JNOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9CQzZIX1NGMTY6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVFlQRUxFU1M6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVUYxNjoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkM3X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk06Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9STV9TUkdCOgotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfVU5LTk9XTjoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLX0KLQotdW5zaWduZWQgaW50IEdldFRleHR1cmVGb3JtYXREaW1lbnNpb25B
bGlnbm1lbnQoRFhHSV9GT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAg
IHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9CQzFfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9STV9TUkdC
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0JDNF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1VOT1JNOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0JDMl9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNX1NSR0I6Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX0JDM19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
QkMzX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk1fU1JHQjoKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkM1X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVf
VFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9VTk9STToKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkM2SF9TRjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1RZUEVM
RVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1VGMTY6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDN19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1VOT1JNOgot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk1fU1JHQjoKLSAgICAgICAgcmV0dXJuIDQ7
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1VOS05PV046Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7
Ci0gICAgICAgIHJldHVybiAxOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDE7Ci0g
ICAgfQotfQotCi1ib29sIElzRGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkK
LXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0Qz
Ml9GTE9BVF9TOFgyNF9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVQ6Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9EMTZfVU5PUk06Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotRFhHSV9GT1JNQVQgR2V0RGVwdGhU
ZXh0dXJlRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkK
LSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QzMl9GTE9BVF9TOFgyNF9VSU5UOiByZXR1
cm4gRFhHSV9GT1JNQVRfUjMyRzhYMjRfVFlQRUxFU1M7Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0QzMl9GTE9BVDogICAgICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjMyX1RZUEVMRVNTOwot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDogICAgcmV0dXJuIERYR0lf
Rk9STUFUX1IyNEc4X1RZUEVMRVNTOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZfVU5PUk06
ICAgICAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1IxNl9UWVBFTEVTUzsKLSAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgICAgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9VTktO
T1dOOwotICAgIH0KLX0KLQotRFhHSV9GT1JNQVQgR2V0RGVwdGhTaGFkZXJSZXNvdXJjZUZvcm1h
dChEWEdJX0ZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVRfUzhYMjRfVUlOVDogcmV0dXJuIERYR0lfRk9S
TUFUX1IzMl9GTE9BVF9YOFgyNF9UWVBFTEVTUzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDMy
X0ZMT0FUOiAgICAgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMzJfVUlOVDsKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ6ICAgIHJldHVybiBEWEdJX0ZPUk1BVF9S
MjRfVU5PUk1fWDhfVFlQRUxFU1M7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9STTog
ICAgICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjE2X1VOT1JNOwotICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsgICAgICAgICAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1VOS05PV047
Ci0gICAgfQotfQotCi1IUkVTVUxUIFNldERlYnVnTmFtZShJRDNEMTFEZXZpY2VDaGlsZCAqcmVz
b3VyY2UsIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0jaWYgZGVmaW5lZChfREVCVUcpCi0gICAgcmV0
dXJuIHJlc291cmNlLT5TZXRQcml2YXRlRGF0YShXS1BESURfRDNERGVidWdPYmplY3ROYW1lLCBz
dHJsZW4obmFtZSksIG5hbWUpOwotI2Vsc2UKLSAgICByZXR1cm4gU19PSzsKLSNlbmRpZgotfQot
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL3JlbmRlcmVyMTFfdXRpbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXIxMV91dGlscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAxYmM0OGMxYTEzNWE1ZDg4YTg5YmQ1Njg1NjlmZDZlOWRkNjc3M2VlLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvcmVuZGVyZXIxMV91dGlscy5oCisrKyAv
ZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIHJlbmRlcmVyMTFf
dXRpbHMuaDogQ29udmVyc2lvbiBmdW5jdGlvbnMgYW5kIG90aGVyIHV0aWxpdHkgcm91dGluZXMK
LS8vIHNwZWNpZmljIHRvIHRoZSBEM0QxMSByZW5kZXJlci4KLQotI2lmbmRlZiBMSUJHTEVTVjJf
UkVOREVSRVJfUkVOREVSRVIxMV9VVElMU19ICi0jZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9S
RU5ERVJFUjExX1VUSUxTX0gKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgiCi0K
LW5hbWVzcGFjZSBnbF9kM2QxMQotewotCi1EM0QxMV9CTEVORCBDb252ZXJ0QmxlbmRGdW5jKEdM
ZW51bSBnbEJsZW5kLCBib29sIGlzQWxwaGEpOwotRDNEMTFfQkxFTkRfT1AgQ29udmVydEJsZW5k
T3AoR0xlbnVtIGdsQmxlbmRPcCk7Ci1VSU5UOCBDb252ZXJ0Q29sb3JNYXNrKGJvb2wgbWFza1Jl
ZCwgYm9vbCBtYXNrR3JlZW4sIGJvb2wgbWFza0JsdWUsIGJvb2wgbWFza0FscGhhKTsKLQotRDNE
MTFfQ1VMTF9NT0RFIENvbnZlcnRDdWxsTW9kZShib29sIGN1bGxFbmFibGVkLCBHTGVudW0gY3Vs
bE1vZGUpOwotCi1EM0QxMV9DT01QQVJJU09OX0ZVTkMgQ29udmVydENvbXBhcmlzb24oR0xlbnVt
IGNvbXBhcmlzb24pOwotRDNEMTFfREVQVEhfV1JJVEVfTUFTSyBDb252ZXJ0RGVwdGhNYXNrKGJv
b2wgZGVwdGhXcml0ZUVuYWJsZWQpOwotVUlOVDggQ29udmVydFN0ZW5jaWxNYXNrKEdMdWludCBz
dGVuY2lsbWFzayk7Ci1EM0QxMV9TVEVOQ0lMX09QIENvbnZlcnRTdGVuY2lsT3AoR0xlbnVtIHN0
ZW5jaWxPcCk7Ci0KLUQzRDExX0ZJTFRFUiBDb252ZXJ0RmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIs
IEdMZW51bSBtYWdGaWx0ZXIsIGZsb2F0IG1heEFuaXNvdHJvcHkpOwotRDNEMTFfVEVYVFVSRV9B
RERSRVNTX01PREUgQ29udmVydFRleHR1cmVXcmFwKEdMZW51bSB3cmFwKTsKLUZMT0FUIENvbnZl
cnRNaW5MT0QoR0xlbnVtIG1pbkZpbHRlciwgdW5zaWduZWQgaW50IGxvZE9mZnNldCk7Ci1GTE9B
VCBDb252ZXJ0TWF4TE9EKEdMZW51bSBtaW5GaWx0ZXIsIHVuc2lnbmVkIGludCBsb2RPZmZzZXQp
OwotCi1EWEdJX0ZPUk1BVCBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdMZW51bSBmb3JtYXQp
OwotRFhHSV9GT1JNQVQgQ29udmVydFRleHR1cmVGb3JtYXQoR0xlbnVtIGZvcm1hdCk7Ci19Ci0K
LW5hbWVzcGFjZSBkM2QxMV9nbAotewotCi1HTGVudW0gQ29udmVydEJhY2tCdWZmZXJGb3JtYXQo
RFhHSV9GT1JNQVQgZm9ybWF0KTsKLUdMZW51bSBDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KERY
R0lfRk9STUFUIGZvcm1hdCk7Ci1HTGVudW0gQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChEWEdJ
X0ZPUk1BVCBmb3JtYXQpOwotR0xlbnVtIENvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoRFhH
SV9GT1JNQVQgZm9ybWF0KTsKLQotfQotCi1uYW1lc3BhY2UgZDNkMTEKLXsKLQotc3RydWN0IFBv
c2l0aW9uVGV4Q29vcmRWZXJ0ZXgKLXsKLSAgICBmbG9hdCB4LCB5OwotICAgIGZsb2F0IHUsIHY7
Ci19Owotdm9pZCBTZXRQb3NpdGlvblRleENvb3JkVmVydGV4KFBvc2l0aW9uVGV4Q29vcmRWZXJ0
ZXgqIHZlcnRleCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgdSwgZmxvYXQgdik7Ci0KLXN0cnVj
dCBQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgKLXsKLSAgICBmbG9hdCB4LCB5LCB6OwotICAgIGZs
b2F0IHIsIGcsIGIsIGE7Ci19Owotdm9pZCBTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgoUG9z
aXRpb25EZXB0aENvbG9yVmVydGV4KiB2ZXJ0ZXgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHos
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6Q29sb3IgJmNvbG9y
KTsKLQotc2l6ZV90IENvbXB1dGVQaXhlbFNpemVCaXRzKERYR0lfRk9STUFUIGZvcm1hdCk7Ci1z
aXplX3QgQ29tcHV0ZUJsb2NrU2l6ZUJpdHMoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLQotYm9vbCBJ
c0NvbXByZXNzZWQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLXVuc2lnbmVkIGludCBHZXRUZXh0dXJl
Rm9ybWF0RGltZW5zaW9uQWxpZ25tZW50KERYR0lfRk9STUFUIGZvcm1hdCk7Ci0KLWJvb2wgSXNE
ZXB0aFN0ZW5jaWxGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLURYR0lfRk9STUFUIEdldERl
cHRoVGV4dHVyZUZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpOwotRFhHSV9GT1JNQVQgR2V0RGVw
dGhTaGFkZXJSZXNvdXJjZUZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpOwotCi1IUkVTVUxUIFNl
dERlYnVnTmFtZShJRDNEMTFEZXZpY2VDaGlsZCAqcmVzb3VyY2UsIGNvbnN0IGNoYXIgKm5hbWUp
OwotCi1pbmxpbmUgYm9vbCBpc0RldmljZUxvc3RFcnJvcihIUkVTVUxUIGVycm9yQ29kZSkKLXsK
LSAgICBzd2l0Y2ggKGVycm9yQ29kZSkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRVJST1JfREVW
SUNFX0hVTkc6Ci0gICAgICBjYXNlIERYR0lfRVJST1JfREVWSUNFX1JFTU9WRUQ6Ci0gICAgICBj
YXNlIERYR0lfRVJST1JfREVWSUNFX1JFU0VUOgotICAgICAgY2FzZSBEWEdJX0VSUk9SX0RSSVZF
Ul9JTlRFUk5BTF9FUlJPUjoKLSAgICAgIGNhc2UgRFhHSV9FUlJPUl9OT1RfQ1VSUkVOVExZX0FW
QUlMQUJMRToKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVS
RVJfUkVOREVSRVIxMV9VVElMU19ICmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3JlbmRlcmVyOV91dGlscy5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3JlbmRlcmVyOV91dGlscy5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhNzVkNDY1ZTNjZjgwNWY4NjhhYjZjZTI3
OTM4MGRlMmU5YjFhYjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9yZW5k
ZXJlcjlfdXRpbHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTAwICswLDAgQEAKLSNpbmNsdWRl
ICJwcmVjb21waWxlZC5oIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gcmVuZGVyZXI5X3V0aWxz
LmNwcDogQ29udmVyc2lvbiBmdW5jdGlvbnMgYW5kIG90aGVyIHV0aWxpdHkgcm91dGluZXMKLS8v
IHNwZWNpZmljIHRvIHRoZSBEM0Q5IHJlbmRlcmVyLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL3JlbmRlcmVyOV91dGlscy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCi0KLSNpbmNsdWRlICJjb21tb24vZGVi
dWcuaCIKLQotbmFtZXNwYWNlIGdsX2QzZDkKLXsKLQotRDNEQ01QRlVOQyBDb252ZXJ0Q29tcGFy
aXNvbihHTGVudW0gY29tcGFyaXNvbikKLXsKLSAgICBEM0RDTVBGVU5DIGQzZENvbXAgPSBEM0RD
TVBfQUxXQVlTOwotICAgIHN3aXRjaCAoY29tcGFyaXNvbikKLSAgICB7Ci0gICAgICBjYXNlIEdM
X05FVkVSOiAgICBkM2RDb21wID0gRDNEQ01QX05FVkVSOyAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0FMV0FZUzogICBkM2RDb21wID0gRDNEQ01QX0FMV0FZUzsgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0xFU1M6ICAgICBkM2RDb21wID0gRDNEQ01QX0xFU1M7ICAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX0xFUVVBTDogICBkM2RDb21wID0gRDNEQ01QX0xFU1NFUVVBTDsg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0VRVUFMOiAgICBkM2RDb21wID0gRDNEQ01QX0VRVUFM
OyAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0dSRUFURVI6ICBkM2RDb21wID0gRDNEQ01Q
X0dSRUFURVI7ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0dFUVVBTDogICBkM2RDb21wID0g
RDNEQ01QX0dSRUFURVJFUVVBTDsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX05PVEVRVUFMOiBkM2RD
b21wID0gRDNEQ01QX05PVEVRVUFMOyAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBkM2RDb21wOwotfQotCi1EM0RDT0xPUiBDb252
ZXJ0Q29sb3IoZ2w6OkNvbG9yIGNvbG9yKQotewotICAgIHJldHVybiBEM0RDT0xPUl9SR0JBKGds
Ojp1bm9ybTw4Pihjb2xvci5yZWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9y
bTw4Pihjb2xvci5ncmVlbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+
KGNvbG9yLmJsdWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4Pihjb2xv
ci5hbHBoYSkpOwotfQotCi1EM0RCTEVORCBDb252ZXJ0QmxlbmRGdW5jKEdMZW51bSBibGVuZCkK
LXsKLSAgICBEM0RCTEVORCBkM2RCbGVuZCA9IEQzREJMRU5EX1pFUk87Ci0KLSAgICBzd2l0Y2gg
KGJsZW5kKQotICAgIHsKLSAgICAgIGNhc2UgR0xfWkVSTzogICAgICAgICAgICAgICAgICAgICBk
M2RCbGVuZCA9IEQzREJMRU5EX1pFUk87ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
T05FOiAgICAgICAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX09ORTsgICAgICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1JDX0NPTE9SOiAgICAgICAgICAgICAgICBkM2RC
bGVuZCA9IEQzREJMRU5EX1NSQ0NPTE9SOyAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfT05F
X01JTlVTX1NSQ19DT0xPUjogICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVlNSQ0NPTE9SOyAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfRFNUX0NPTE9SOiAgICAgICAgICAgICAgICBkM2RCbGVu
ZCA9IEQzREJMRU5EX0RFU1RDT0xPUjsgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfT05FX01J
TlVTX0RTVF9DT0xPUjogICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVkRFU1RDT0xPUjsgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfU1JDX0FMUEhBOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9
IEQzREJMRU5EX1NSQ0FMUEhBOyAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfT05FX01JTlVT
X1NSQ19BTFBIQTogICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVlNSQ0FMUEhBOyAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfRFNUX0FMUEhBOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQz
REJMRU5EX0RFU1RBTFBIQTsgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RT
VF9BTFBIQTogICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVkRFU1RBTFBIQTsgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfQ09OU1RBTlRfQ09MT1I6ICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJM
RU5EX0JMRU5ERkFDVE9SOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNU
QU5UX0NPTE9SOiBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVkJMRU5ERkFDVE9SOyBicmVhazsKLSAg
ICAgIGNhc2UgR0xfQ09OU1RBTlRfQUxQSEE6ICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5E
X0JMRU5ERkFDVE9SOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5U
X0FMUEhBOiBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVkJMRU5ERkFDVE9SOyBicmVhazsKLSAgICAg
IGNhc2UgR0xfU1JDX0FMUEhBX1NBVFVSQVRFOiAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX1NS
Q0FMUEhBU0FUOyAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIGQzZEJsZW5kOwotfQotCi1EM0RCTEVORE9QIENvbnZlcnRCbGVuZE9w
KEdMZW51bSBibGVuZE9wKQotewotICAgIEQzREJMRU5ET1AgZDNkQmxlbmRPcCA9IEQzREJMRU5E
T1BfQUREOwotCi0gICAgc3dpdGNoIChibGVuZE9wKQotICAgIHsKLSAgICAgIGNhc2UgR0xfRlVO
Q19BREQ6ICAgICAgICAgICAgICBkM2RCbGVuZE9wID0gRDNEQkxFTkRPUF9BREQ7ICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZVTkNfU1VCVFJBQ1Q6ICAgICAgICAgZDNkQmxlbmRPcCA9
IEQzREJMRU5ET1BfU1VCVFJBQ1Q7ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GVU5DX1JFVkVS
U0VfU1VCVFJBQ1Q6IGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX1JFVlNVQlRSQUNUOyBicmVhazsK
LSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGQzZEJs
ZW5kT3A7Ci19Ci0KLUQzRFNURU5DSUxPUCBDb252ZXJ0U3RlbmNpbE9wKEdMZW51bSBzdGVuY2ls
T3ApCi17Ci0gICAgRDNEU1RFTkNJTE9QIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9LRUVQ
OwotCi0gICAgc3dpdGNoIChzdGVuY2lsT3ApCi0gICAgewotICAgICAgY2FzZSBHTF9aRVJPOiAg
ICAgIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9aRVJPOyAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfS0VFUDogICAgICBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfS0VFUDsgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX1JFUExBQ0U6ICAgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9Q
X1JFUExBQ0U7IGJyZWFrOwotICAgICAgY2FzZSBHTF9JTkNSOiAgICAgIGQzZFN0ZW5jaWxPcCA9
IEQzRFNURU5DSUxPUF9JTkNSU0FUOyBicmVhazsKLSAgICAgIGNhc2UgR0xfREVDUjogICAgICBk
M2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfREVDUlNBVDsgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X0lOVkVSVDogICAgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0lOVkVSVDsgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9JTkNSX1dSQVA6IGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9JTkNS
OyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfREVDUl9XUkFQOiBkM2RTdGVuY2lsT3AgPSBEM0RT
VEVOQ0lMT1BfREVDUjsgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwot
ICAgIH0KLQotICAgIHJldHVybiBkM2RTdGVuY2lsT3A7Ci19Ci0KLUQzRFRFWFRVUkVBRERSRVNT
IENvbnZlcnRUZXh0dXJlV3JhcChHTGVudW0gd3JhcCkKLXsKLSAgICBEM0RURVhUVVJFQUREUkVT
UyBkM2RXcmFwID0gRDNEVEFERFJFU1NfV1JBUDsKLQotICAgIHN3aXRjaCAod3JhcCkKLSAgICB7
Ci0gICAgICBjYXNlIEdMX1JFUEVBVDogICAgICAgICAgICBkM2RXcmFwID0gRDNEVEFERFJFU1Nf
V1JBUDsgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ0xBTVBfVE9fRURHRTogICAgIGQzZFdyYXAg
PSBEM0RUQUREUkVTU19DTEFNUDsgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NSVJST1JFRF9SRVBF
QVQ6ICAgZDNkV3JhcCA9IEQzRFRBRERSRVNTX01JUlJPUjsgYnJlYWs7Ci0gICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBkM2RXcmFwOwotfQotCi1EM0RD
VUxMIENvbnZlcnRDdWxsTW9kZShHTGVudW0gY3VsbEZhY2UsIEdMZW51bSBmcm9udEZhY2UpCi17
Ci0gICAgRDNEQ1VMTCBjdWxsID0gRDNEQ1VMTF9DQ1c7Ci0gICAgc3dpdGNoIChjdWxsRmFjZSkK
LSAgICB7Ci0gICAgICBjYXNlIEdMX0ZST05UOgotICAgICAgICBjdWxsID0gKGZyb250RmFjZSA9
PSBHTF9DQ1cgPyBEM0RDVUxMX0NXIDogRDNEQ1VMTF9DQ1cpOwotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfQkFDSzoKLSAgICAgICAgY3VsbCA9IChmcm9udEZhY2UgPT0gR0xfQ0NXID8g
RDNEQ1VMTF9DQ1cgOiBEM0RDVUxMX0NXKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X0ZST05UX0FORF9CQUNLOgotICAgICAgICBjdWxsID0gRDNEQ1VMTF9OT05FOyAvLyBjdWxsaW5n
IHdpbGwgYmUgaGFuZGxlZCBkdXJpbmcgZHJhdwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGN1bGw7Ci19Ci0KLUQzRENV
QkVNQVBfRkFDRVMgQ29udmVydEN1YmVGYWNlKEdMZW51bSBjdWJlRmFjZSkKLXsKLSAgICBEM0RD
VUJFTUFQX0ZBQ0VTIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfUE9TSVRJVkVfWDsKLQotICAgIHN3
aXRjaCAoY3ViZUZhY2UpCi0gICAgewotICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1g6Ci0gICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfUE9TSVRJVkVfWDsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoK
LSAgICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9ORUdBVElWRV9YOwotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgICAgICBm
YWNlID0gRDNEQ1VCRU1BUF9GQUNFX1BPU0lUSVZFX1k7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAgIGZhY2UgPSBEM0RD
VUJFTUFQX0ZBQ0VfTkVHQVRJVkVfWTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFD
RV9QT1NJVElWRV9aOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9aOgotICAgICAgICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX05FR0FUSVZF
X1o7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gZmFjZTsKLX0KLQotRFdPUkQgQ29udmVydENvbG9yTWFzayhib29sIHJl
ZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKQotewotICAgIHJldHVybiAocmVk
ICAgPyBEM0RDT0xPUldSSVRFRU5BQkxFX1JFRCAgIDogMCkgfAotICAgICAgICAgICAoZ3JlZW4g
PyBEM0RDT0xPUldSSVRFRU5BQkxFX0dSRUVOIDogMCkgfAotICAgICAgICAgICAoYmx1ZSAgPyBE
M0RDT0xPUldSSVRFRU5BQkxFX0JMVUUgIDogMCkgfAotICAgICAgICAgICAoYWxwaGEgPyBEM0RD
T0xPUldSSVRFRU5BQkxFX0FMUEhBIDogMCk7Ci19Ci0KLUQzRFRFWFRVUkVGSUxURVJUWVBFIENv
bnZlcnRNYWdGaWx0ZXIoR0xlbnVtIG1hZ0ZpbHRlciwgZmxvYXQgbWF4QW5pc290cm9weSkKLXsK
LSAgICBpZiAobWF4QW5pc290cm9weSA+IDEuMGYpCi0gICAgewotICAgICAgICByZXR1cm4gRDNE
VEVYRl9BTklTT1RST1BJQzsKLSAgICB9Ci0KLSAgICBEM0RURVhUVVJFRklMVEVSVFlQRSBkM2RN
YWdGaWx0ZXIgPSBEM0RURVhGX1BPSU5UOwotICAgIHN3aXRjaCAobWFnRmlsdGVyKQotICAgIHsK
LSAgICAgIGNhc2UgR0xfTkVBUkVTVDogZDNkTWFnRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9MSU5FQVI6ICBkM2RNYWdGaWx0ZXIgPSBEM0RURVhGX0xJTkVB
UjsgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJl
dHVybiBkM2RNYWdGaWx0ZXI7Ci19Ci0KLXZvaWQgQ29udmVydE1pbkZpbHRlcihHTGVudW0gbWlu
RmlsdGVyLCBEM0RURVhUVVJFRklMVEVSVFlQRSAqZDNkTWluRmlsdGVyLCBEM0RURVhUVVJFRklM
VEVSVFlQRSAqZDNkTWlwRmlsdGVyLCBmbG9hdCBtYXhBbmlzb3Ryb3B5KQotewotICAgIHN3aXRj
aCAobWluRmlsdGVyKQotICAgIHsKLSAgICAgIGNhc2UgR0xfTkVBUkVTVDoKLSAgICAgICAgKmQz
ZE1pbkZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7Ci0gICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RU
RVhGX05PTkU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MSU5FQVI6Ci0gICAgICAg
ICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX0xJTkVBUjsKLSAgICAgICAgKmQzZE1pcEZpbHRlciA9
IEQzRFRFWEZfTk9ORTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQ
TUFQX05FQVJFU1Q6Ci0gICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX1BPSU5UOwotICAg
ICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTkVBUkVTVDoKLSAgICAgICAgKmQzZE1pbkZpbHRlciA9
IEQzRFRFWEZfTElORUFSOwotICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjoKLSAg
ICAgICAgKmQzZE1pbkZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7Ci0gICAgICAgICpkM2RNaXBGaWx0
ZXIgPSBEM0RURVhGX0xJTkVBUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xJTkVB
Ul9NSVBNQVBfTElORUFSOgotICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9MSU5FQVI7
Ci0gICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX0xJTkVBUjsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBkZWZhdWx0OgotICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsK
LSAgICAgICAgKmQzZE1pcEZpbHRlciA9IEQzRFRFWEZfTk9ORTsKLSAgICAgICAgVU5SRUFDSEFC
TEUoKTsKLSAgICB9Ci0KLSAgICBpZiAobWF4QW5pc290cm9weSA+IDEuMGYpCi0gICAgewotICAg
ICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9BTklTT1RST1BJQzsKLSAgICB9Ci19Ci0KLUQz
REZPUk1BVCBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdMZW51bSBmb3JtYXQpCi17Ci0gICAg
c3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBHTF9OT05FOiAgICAgICAgICAgICAg
ICAgcmV0dXJuIEQzREZNVF9OVUxMOwotICAgICAgY2FzZSBHTF9SR0JBNDoKLSAgICAgIGNhc2Ug
R0xfUkdCNV9BMToKLSAgICAgIGNhc2UgR0xfUkdCQThfT0VTOiAgICAgICAgICAgIHJldHVybiBE
M0RGTVRfQThSOEc4Qjg7Ci0gICAgICBjYXNlIEdMX1JHQjU2NTogICAgICAgICAgICAgICByZXR1
cm4gRDNERk1UX1I1RzZCNTsKLSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6ICAgICAgICAgICAgIHJl
dHVybiBEM0RGTVRfWDhSOEc4Qjg7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2Ogot
ICAgICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVYODogICAgICAgCi0gICAgICBjYXNlIEdMX0RFUFRI
MjRfU1RFTkNJTDhfT0VTOiByZXR1cm4gRDNERk1UX0QyNFM4OwotICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKLSAgICB9Ci19Ci0KLUQz
RE1VTFRJU0FNUExFX1RZUEUgR2V0TXVsdGlzYW1wbGVUeXBlRnJvbVNhbXBsZXMoR0xzaXplaSBz
YW1wbGVzKQotewotICAgIGlmIChzYW1wbGVzIDw9IDEpCi0gICAgICAgIHJldHVybiBEM0RNVUxU
SVNBTVBMRV9OT05FOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIChEM0RNVUxUSVNBTVBMRV9U
WVBFKXNhbXBsZXM7Ci19Ci0KLX0KLQotbmFtZXNwYWNlIGQzZDlfZ2wKLXsKLQotdW5zaWduZWQg
aW50IEdldFN0ZW5jaWxTaXplKEQzREZPUk1BVCBzdGVuY2lsRm9ybWF0KQotewotICAgIGlmIChz
dGVuY2lsRm9ybWF0ID09IEQzREZNVF9JTlRaKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDg7Ci0g
ICAgfQotICAgIHN3aXRjaChzdGVuY2lsRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1U
X0QyNEZTODoKLSAgICAgIGNhc2UgRDNERk1UX0QyNFM4OgotICAgICAgICByZXR1cm4gODsKLSAg
ICAgIGNhc2UgRDNERk1UX0QyNFg0UzQ6Ci0gICAgICAgIHJldHVybiA0OwotICAgICAgY2FzZSBE
M0RGTVRfRDE1UzE6Ci0gICAgICAgIHJldHVybiAxOwotICAgICAgY2FzZSBEM0RGTVRfRDE2X0xP
Q0tBQkxFOgotICAgICAgY2FzZSBEM0RGTVRfRDMyOgotICAgICAgY2FzZSBEM0RGTVRfRDI0WDg6
Ci0gICAgICBjYXNlIEQzREZNVF9EMzJGX0xPQ0tBQkxFOgotICAgICAgY2FzZSBEM0RGTVRfRDE2
OgotICAgICAgICByZXR1cm4gMDsKLSAgICAvL2Nhc2UgRDNERk1UX0QzMl9MT0NLQUJMRTogIHJl
dHVybiAwOyAgIC8vIERpcmVjdFggOUV4IG9ubHkKLSAgICAvL2Nhc2UgRDNERk1UX1M4X0xPQ0tB
QkxFOiAgIHJldHVybiA4OyAgIC8vIERpcmVjdFggOUV4IG9ubHkKLSAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotdW5zaWduZWQgaW50IEdldEFscGhhU2l6ZShE
M0RGT1JNQVQgY29sb3JGb3JtYXQpCi17Ci0gICAgc3dpdGNoIChjb2xvckZvcm1hdCkKLSAgICB7
Ci0gICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgotICAgICAgICByZXR1cm4gMTY7Ci0g
ICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgotICAgICAgICByZXR1cm4gMzI7Ci0gICAg
ICBjYXNlIEQzREZNVF9BMlIxMEcxMEIxMDoKLSAgICAgICAgcmV0dXJuIDI7Ci0gICAgICBjYXNl
IEQzREZNVF9BOFI4RzhCODoKLSAgICAgICAgcmV0dXJuIDg7Ci0gICAgICBjYXNlIEQzREZNVF9B
MVI1RzVCNToKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoK
LSAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgICBkZWZh
dWx0OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLUdMc2l6ZWkgR2V0U2FtcGxlc0Zy
b21NdWx0aXNhbXBsZVR5cGUoRDNETVVMVElTQU1QTEVfVFlQRSB0eXBlKQotewotICAgIGlmICh0
eXBlID09IEQzRE1VTFRJU0FNUExFX05PTk1BU0tBQkxFKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICBlbHNlCi0gICAgICAgIHJldHVybiB0eXBlOwotfQotCi1ib29sIElzRm9ybWF0Q2hhbm5lbEVx
dWl2YWxlbnQoRDNERk9STUFUIGQzZGZvcm1hdCwgR0xlbnVtIGZvcm1hdCkKLXsKLSAgICBzd2l0
Y2ggKGQzZGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9MODoKLSAgICAgICAgcmV0
dXJuIChmb3JtYXQgPT0gR0xfTFVNSU5BTkNFKTsKLSAgICAgIGNhc2UgRDNERk1UX0E4TDg6Ci0g
ICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX0xVTUlOQU5DRV9BTFBIQSk7Ci0gICAgICBjYXNl
IEQzREZNVF9EWFQxOgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQxX0VYVCB8fCBmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQx
X0VYVCk7Ci0gICAgICBjYXNlIEQzREZNVF9EWFQzOgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9
PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFKTsKLSAgICAgIGNhc2UgRDNERk1U
X0RYVDU6Ci0gICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RD
X0RYVDVfQU5HTEUpOwotICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Ci0gICAgICBjYXNlIEQz
REZNVF9BMTZCMTZHMTZSMTZGOgotICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKLSAg
ICAgICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfUkdCQSB8fCBmb3JtYXQgPT0gR0xfQkdSQV9FWFQp
OwotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICAgIHJldHVybiAoZm9ybWF0ID09
IEdMX1JHQik7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBpZiAoZDNkZm9ybWF0ID09IEQzREZN
VF9JTlRaICYmIGdsOjpJc0RlcHRoVGV4dHVyZShmb3JtYXQpKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLUdMZW51bSBDb252ZXJ0
QmFja0J1ZmZlckZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0
KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0E0UjRHNEI0OiByZXR1cm4gR0xfUkdCQTQ7Ci0g
ICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODogcmV0dXJuIEdMX1JHQkE4X09FUzsKLSAgICAgIGNh
c2UgRDNERk1UX0ExUjVHNUI1OiByZXR1cm4gR0xfUkdCNV9BMTsKLSAgICAgIGNhc2UgRDNERk1U
X1I1RzZCNTogICByZXR1cm4gR0xfUkdCNTY1OwotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6
IHJldHVybiBHTF9SR0I4X09FUzsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxF
KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX1JHQkE0OwotfQotCi1HTGVudW0gQ29udmVydERl
cHRoU3RlbmNpbEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KQotewotICAgIGlmIChmb3JtYXQgPT0g
RDNERk1UX0lOVFopCi0gICAgewotICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9P
RVM7Ci0gICAgfQotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1U
X0QxNjoKLSAgICAgIGNhc2UgRDNERk1UX0QyNFg4OgotICAgICAgICByZXR1cm4gR0xfREVQVEhf
Q09NUE9ORU5UMTY7Ci0gICAgICBjYXNlIEQzREZNVF9EMjRTODoKLSAgICAgICAgcmV0dXJuIEdM
X0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotICAgICAgY2FzZSBEM0RGTVRfVU5LTk9XTjoKLSAgICAg
ICAgcmV0dXJuIEdMX05PTkU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgp
OwotICAgIH0KLQotICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLX0KLQotR0xl
bnVtIENvbnZlcnRSZW5kZXJUYXJnZXRGb3JtYXQoRDNERk9STUFUIGZvcm1hdCkKLXsKLSAgICBp
ZiAoZm9ybWF0ID09IEQzREZNVF9JTlRaKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX0RFUFRI
MjRfU1RFTkNJTDhfT0VTOwotICAgIH0KLSAgICAKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7
Ci0gICAgICBjYXNlIEQzREZNVF9BNFI0RzRCNDogcmV0dXJuIEdMX1JHQkE0OwotICAgICAgY2Fz
ZSBEM0RGTVRfQThSOEc4Qjg6IHJldHVybiBHTF9SR0JBOF9PRVM7Ci0gICAgICBjYXNlIEQzREZN
VF9BMVI1RzVCNTogcmV0dXJuIEdMX1JHQjVfQTE7Ci0gICAgICBjYXNlIEQzREZNVF9SNUc2QjU6
ICAgcmV0dXJuIEdMX1JHQjU2NTsKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OiByZXR1cm4g
R0xfUkdCOF9PRVM7Ci0gICAgICBjYXNlIEQzREZNVF9EMTY6Ci0gICAgICBjYXNlIEQzREZNVF9E
MjRYODoKLSAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2OwotICAgICAgY2FzZSBE
M0RGTVRfRDI0Uzg6Ci0gICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLSAg
ICAgIGNhc2UgRDNERk1UX1VOS05PV046Ci0gICAgICAgIHJldHVybiBHTF9OT05FOwotICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gR0xf
UkdCQTQ7Ci19Ci0KLUdMZW51bSBHZXRFcXVpdmFsZW50Rm9ybWF0KEQzREZPUk1BVCBmb3JtYXQp
Ci17Ci0gICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfSU5UWikKLSAgICAgICAgcmV0dXJuIEdMX0RF
UFRIMjRfU1RFTkNJTDhfT0VTOwotICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX05VTEwpCi0gICAg
ICAgIHJldHVybiBHTF9OT05FOwotCi0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAg
Y2FzZSBEM0RGTVRfQTRSNEc0QjQ6ICAgICAgICAgICAgIHJldHVybiBHTF9SR0JBNDsKLSAgICAg
IGNhc2UgRDNERk1UX0E4UjhHOEI4OiAgICAgICAgICAgICByZXR1cm4gR0xfUkdCQThfT0VTOwot
ICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6ICAgICAgICAgICAgIHJldHVybiBHTF9SR0I1X0Ex
OwotICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OiAgICAgICAgICAgICAgIHJldHVybiBHTF9SR0I1
NjU7Ci0gICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODogICAgICAgICAgICAgcmV0dXJuIEdMX1JH
QjhfT0VTOwotICAgICAgY2FzZSBEM0RGTVRfRDE2OiAgICAgICAgICAgICAgICAgIHJldHVybiBH
TF9ERVBUSF9DT01QT05FTlQxNjsKLSAgICAgIGNhc2UgRDNERk1UX0QyNFM4OiAgICAgICAgICAg
ICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgICBjYXNlIEQzREZNVF9V
TktOT1dOOiAgICAgICAgICAgICAgcmV0dXJuIEdMX05PTkU7Ci0gICAgICBjYXNlIEQzREZNVF9E
WFQxOiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFf
RVhUOwotICAgICAgY2FzZSBEM0RGTVRfRFhUMzogICAgICAgICAgICAgICAgIHJldHVybiBHTF9D
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOwotICAgICAgY2FzZSBEM0RGTVRfRFhUNTog
ICAgICAgICAgICAgICAgIHJldHVybiBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xF
OwotICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjogICAgICAgIHJldHVybiBHTF9SR0JB
MzJGX0VYVDsKLSAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6ICAgICAgICByZXR1cm4g
R0xfUkdCQTE2Rl9FWFQ7Ci0gICAgICBjYXNlIEQzREZNVF9MODogICAgICAgICAgICAgICAgICAg
cmV0dXJuIEdMX0xVTUlOQU5DRThfRVhUOwotICAgICAgY2FzZSBEM0RGTVRfQThMODogICAgICAg
ICAgICAgICAgIHJldHVybiBHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQ7Ci0gICAgICBkZWZhdWx0
OiAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIEdMX05PTkU7Ci0g
ICAgfQotfQotCi19Ci0KLW5hbWVzcGFjZSBkM2Q5Ci17Ci0KLWJvb2wgSXNDb21wcmVzc2VkRm9y
bWF0KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KQotewotICAgIHN3aXRjaChzdXJmYWNlRm9ybWF0
KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0RYVDE6Ci0gICAgICBjYXNlIEQzREZNVF9EWFQy
OgotICAgICAgY2FzZSBEM0RGTVRfRFhUMzoKLSAgICAgIGNhc2UgRDNERk1UX0RYVDQ6Ci0gICAg
ICBjYXNlIEQzREZNVF9EWFQ1OgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLXNpemVfdCBDb21wdXRlUm93U2l6
ZShEM0RGT1JNQVQgZm9ybWF0LCB1bnNpZ25lZCBpbnQgd2lkdGgpCi17Ci0gICAgaWYgKGZvcm1h
dCA9PSBEM0RGTVRfSU5UWikKLSAgICB7Ci0gICAgICAgIHJldHVybiA0ICogd2lkdGg7Ci0gICAg
fQotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0w4OgotICAg
ICAgICAgIHJldHVybiAxICogd2lkdGg7Ci0gICAgICBjYXNlIEQzREZNVF9BOEw4OgotICAgICAg
ICAgIHJldHVybiAyICogd2lkdGg7Ci0gICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAgICAg
IGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgICByZXR1cm4gNCAqIHdpZHRoOwotICAgICAg
Y2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKLSAgICAgICAgcmV0dXJuIDggKiB3aWR0aDsKLSAg
ICAgIGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6Ci0gICAgICAgIHJldHVybiAxNiAqIHdpZHRo
OwotICAgICAgY2FzZSBEM0RGTVRfRFhUMToKLSAgICAgICAgcmV0dXJuIDggKiAoKHdpZHRoICsg
MykgLyA0KTsKLSAgICAgIGNhc2UgRDNERk1UX0RYVDM6Ci0gICAgICBjYXNlIEQzREZNVF9EWFQ1
OgotICAgICAgICByZXR1cm4gMTYgKiAoKHdpZHRoICsgMykgLyA0KTsKLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9yZW5kZXJlcjlfdXRpbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvcmVuZGVyZXI5X3V0aWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGJmNmNkZjFlYTY1NjZmOTEwYTk2ZWUyNTExNGI3YzQ4ZWM4Mzk0NWUuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9yZW5kZXJlcjlfdXRpbHMuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDc0ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIHJlbmRlcmVyOV91
dGlscy5oOiBDb252ZXJzaW9uIGZ1bmN0aW9ucyBhbmQgb3RoZXIgdXRpbGl0eSByb3V0aW5lcyAK
LS8vIHNwZWNpZmljIHRvIHRoZSBEM0Q5IHJlbmRlcmVyCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JF
TkRFUkVSX1JFTkRFUkVSOV9VVElMU19ICi0jZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5E
RVJFUjlfVVRJTFNfSAotCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgotCi1jb25z
dCBEM0RGT1JNQVQgRDNERk1UX0lOVFogPSAoKEQzREZPUk1BVCkoTUFLRUZPVVJDQygnSScsJ04n
LCdUJywnWicpKSk7Ci1jb25zdCBEM0RGT1JNQVQgRDNERk1UX05VTEwgPSAoKEQzREZPUk1BVCko
TUFLRUZPVVJDQygnTicsJ1UnLCdMJywnTCcpKSk7Ci0KLW5hbWVzcGFjZSBnbF9kM2Q5Ci17Ci0K
LUQzRENNUEZVTkMgQ29udmVydENvbXBhcmlzb24oR0xlbnVtIGNvbXBhcmlzb24pOwotRDNEQ09M
T1IgQ29udmVydENvbG9yKGdsOjpDb2xvciBjb2xvcik7Ci1EM0RCTEVORCBDb252ZXJ0QmxlbmRG
dW5jKEdMZW51bSBibGVuZCk7Ci1EM0RCTEVORE9QIENvbnZlcnRCbGVuZE9wKEdMZW51bSBibGVu
ZE9wKTsKLUQzRFNURU5DSUxPUCBDb252ZXJ0U3RlbmNpbE9wKEdMZW51bSBzdGVuY2lsT3ApOwot
RDNEVEVYVFVSRUFERFJFU1MgQ29udmVydFRleHR1cmVXcmFwKEdMZW51bSB3cmFwKTsKLUQzRENV
TEwgQ29udmVydEN1bGxNb2RlKEdMZW51bSBjdWxsRmFjZSwgR0xlbnVtIGZyb250RmFjZSk7Ci1E
M0RDVUJFTUFQX0ZBQ0VTIENvbnZlcnRDdWJlRmFjZShHTGVudW0gY3ViZUZhY2UpOwotRFdPUkQg
Q29udmVydENvbG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFs
cGhhKTsKLUQzRFRFWFRVUkVGSUxURVJUWVBFIENvbnZlcnRNYWdGaWx0ZXIoR0xlbnVtIG1hZ0Zp
bHRlciwgZmxvYXQgbWF4QW5pc290cm9weSk7Ci12b2lkIENvbnZlcnRNaW5GaWx0ZXIoR0xlbnVt
IG1pbkZpbHRlciwgRDNEVEVYVFVSRUZJTFRFUlRZUEUgKmQzZE1pbkZpbHRlciwgRDNEVEVYVFVS
RUZJTFRFUlRZUEUgKmQzZE1pcEZpbHRlciwgZmxvYXQgbWF4QW5pc290cm9weSk7Ci1EM0RGT1JN
QVQgQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChHTGVudW0gZm9ybWF0KTsKLUQzRE1VTFRJU0FN
UExFX1RZUEUgR2V0TXVsdGlzYW1wbGVUeXBlRnJvbVNhbXBsZXMoR0xzaXplaSBzYW1wbGVzKTsK
LQotfQotCi1uYW1lc3BhY2UgZDNkOV9nbAotewotCi1HTHVpbnQgR2V0QWxwaGFTaXplKEQzREZP
Uk1BVCBjb2xvckZvcm1hdCk7Ci1HTHVpbnQgR2V0U3RlbmNpbFNpemUoRDNERk9STUFUIHN0ZW5j
aWxGb3JtYXQpOwotCi1HTHNpemVpIEdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKEQzRE1V
TFRJU0FNUExFX1RZUEUgdHlwZSk7Ci0KLWJvb2wgSXNGb3JtYXRDaGFubmVsRXF1aXZhbGVudChE
M0RGT1JNQVQgZDNkZm9ybWF0LCBHTGVudW0gZm9ybWF0KTsKLUdMZW51bSBDb252ZXJ0QmFja0J1
ZmZlckZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KTsKLUdMZW51bSBDb252ZXJ0RGVwdGhTdGVuY2ls
Rm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpOwotR0xlbnVtIENvbnZlcnRSZW5kZXJUYXJnZXRGb3Jt
YXQoRDNERk9STUFUIGZvcm1hdCk7Ci1HTGVudW0gR2V0RXF1aXZhbGVudEZvcm1hdChEM0RGT1JN
QVQgZm9ybWF0KTsKLQotfQotCi1uYW1lc3BhY2UgZDNkOQotewotYm9vbCBJc0NvbXByZXNzZWRG
b3JtYXQoRDNERk9STUFUIGZvcm1hdCk7Ci1zaXplX3QgQ29tcHV0ZVJvd1NpemUoRDNERk9STUFU
IGZvcm1hdCwgdW5zaWduZWQgaW50IHdpZHRoKTsKLQotaW5saW5lIGJvb2wgaXNEZXZpY2VMb3N0
RXJyb3IoSFJFU1VMVCBlcnJvckNvZGUpCi17Ci0gICAgc3dpdGNoIChlcnJvckNvZGUpCi0gICAg
ewotICAgICAgY2FzZSBEM0RFUlJfRFJJVkVSSU5URVJOQUxFUlJPUjoKLSAgICAgIGNhc2UgRDNE
RVJSX0RFVklDRUxPU1Q6Ci0gICAgICBjYXNlIEQzREVSUl9ERVZJQ0VIVU5HOgotICAgICAgY2Fz
ZSBEM0RFUlJfREVWSUNFUkVNT1ZFRDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZh
dWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi19Ci0KLSNlbmRpZiAvLyBM
SUJHTEVTVjJfUkVOREVSRVJfUkVOREVSRVI5X1VUSUxTX0gKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9CbGl0LnBzIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL0Js
aXQucHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjYjNiZDBlNzZiYTkyYTI4ZTc3
Njg4OGM2MjkwNGMwYzNmMDVmM2MuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9zaGFkZXJzL0JsaXQucHMKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vLwotLy8g
Q29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgotLy8KLQotc2FtcGxlcjJEIHRleCA6IHMwOwotCi11bmlmb3JtIGZsb2F0NCBtb2RlIDogYzA7
Ci0KLS8vIFBhc3N0aHJvdWdoIFBpeGVsIFNoYWRlcgotLy8gT3V0cHV0cyB0ZXh0dXJlIDAgc2Ft
cGxlZCBhdCB0ZXhjb29yZCAwLgotZmxvYXQ0IHBhc3N0aHJvdWdocHMoZmxvYXQ0IHRleGNvb3Jk
IDogVEVYQ09PUkQwKSA6IENPTE9SCi17Ci0JcmV0dXJuIHRleDJEKHRleCwgdGV4Y29vcmQueHkp
OwotfTsKLQotLy8gTHVtaW5hbmNlIENvbnZlcnNpb24gUGl4ZWwgU2hhZGVyCi0vLyBPdXRwdXRz
IHNhbXBsZSh0ZXgwLCB0YzApLnJycmEuCi0vLyBGb3IgTEEgb3V0cHV0IChwYXNzIEEpIHNldCBD
MC5YID0gMSwgQzAuWSA9IDAuCi0vLyBGb3IgTCBvdXRwdXQgKEEgPSAxKSBzZXQgQzAuWCA9IDAs
IEMwLlkgPSAxLgotZmxvYXQ0IGx1bWluYW5jZXBzKGZsb2F0NCB0ZXhjb29yZCA6IFRFWENPT1JE
MCkgOiBDT0xPUgotewotCWZsb2F0NCB0bXAgPSB0ZXgyRCh0ZXgsIHRleGNvb3JkLnh5KTsKLQl0
bXAudyA9IHRtcC53ICogbW9kZS54ICsgbW9kZS55OwotCXJldHVybiB0bXAueHh4dzsKLX07Ci0K
LS8vIFJHQi9BIENvbXBvbmVudCBNYXNrIFBpeGVsIFNoYWRlcgotLy8gT3V0cHV0cyBzYW1wbGUo
dGV4MCwgdGMwKSB3aXRoIG9wdGlvbnMgdG8gZm9yY2UgUkdCID0gMCBhbmQvb3IgQSA9IDEuCi0v
LyBUbyBmb3JjZSBSR0IgPSAwLCBzZXQgQzAuWCA9IDAsIG90aGVyd2lzZSBDMC5YID0gMS4KLS8v
IFRvIGZvcmNlIEEgPSAxLCBzZXQgQzAuWiA9IDAsIEMwLlcgPSAxLCBvdGhlcndpc2UgQzAuWiA9
IDEsIEMwLlcgPSAwLgotZmxvYXQ0IGNvbXBvbmVudG1hc2twcyhmbG9hdDQgdGV4Y29vcmQgOiBU
RVhDT09SRDApIDogQ09MT1IKLXsKLQlmbG9hdDQgdG1wID0gdGV4MkQodGV4LCB0ZXhjb29yZC54
eSk7Ci0JdG1wLnh5eiA9IHRtcC54eXogKiBtb2RlLng7Ci0JdG1wLncgPSB0bXAudyAqIG1vZGUu
eiArIG1vZGUudzsKLQlyZXR1cm4gdG1wOwotfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9CbGl0LnZzIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL0JsaXQudnMK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhMzY5ODBiOTM1YjUwZmE5YWUwYjZiMGY0
YTUwZTM5MzlkMGQ1MTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFk
ZXJzL0JsaXQudnMKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LQotc3RydWN0IFZTX09VVFBVVAotewotICAgIGZsb2F0NCBwb3NpdGlvbiA6IFBPU0lUSU9OOwot
ICAgIGZsb2F0NCB0ZXhjb29yZCA6IFRFWENPT1JEMDsKLX07Ci0KLXVuaWZvcm0gZmxvYXQ0IGhh
bGZQaXhlbFNpemUgOiBjMDsKLQotLy8gU3RhbmRhcmQgVmVydGV4IFNoYWRlcgotLy8gSW5wdXQg
MCBpcyB0aGUgaG9tb2dlbm91cyBwb3NpdGlvbi4KLS8vIE91dHB1dHMgdGhlIGhvbW9nZW5vdXMg
cG9zaXRpb24gYXMtaXMuCi0vLyBPdXRwdXRzIGEgdGV4IGNvb3JkIHdpdGggKDAsMCkgaW4gdGhl
IHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSBzY3JlZW4gYW5kICgxLDEpIGluIHRoZSBib3R0b20g
cmlnaHQuCi0vLyBDMC5YIG11c3QgYmUgbmVnYXRpdmUgaGFsZi1waXhlbCB3aWR0aCwgQzAuWSBt
dXN0IGJlIGhhbGYtcGl4ZWwgaGVpZ2h0LiBDMC5aVyBtdXN0IGJlIDAuCi1WU19PVVRQVVQgc3Rh
bmRhcmR2cyhpbiBmbG9hdDQgcG9zaXRpb24gOiBQT1NJVElPTikKLXsKLSAgICBWU19PVVRQVVQg
T3V0OwotCi0gICAgT3V0LnBvc2l0aW9uID0gcG9zaXRpb24gKyBoYWxmUGl4ZWxTaXplOwotICAg
IE91dC50ZXhjb29yZCA9IHBvc2l0aW9uICogZmxvYXQ0KDAuNSwgLTAuNSwgMS4wLCAxLjApICsg
ZmxvYXQ0KDAuNSwgMC41LCAwLCAwKTsKLQotICAgIHJldHVybiBPdXQ7Ci19OwotCi0vLyBGbGlw
IFkgVmVydGV4IFNoYWRlcgotLy8gSW5wdXQgMCBpcyB0aGUgaG9tb2dlbm91cyBwb3NpdGlvbi4K
LS8vIE91dHB1dHMgdGhlIGhvbW9nZW5vdXMgcG9zaXRpb24gYXMtaXMuCi0vLyBPdXRwdXRzIGEg
dGV4IGNvb3JkIHdpdGggKDAsMSkgaW4gdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSBzY3Jl
ZW4gYW5kICgxLDApIGluIHRoZSBib3R0b20gcmlnaHQuCi0vLyBDMC5YWSBtdXN0IGJlIHRoZSBo
YWxmLXBpeGVsIHdpZHRoIGFuZCBoZWlnaHQuIEMwLlpXIG11c3QgYmUgMC4KLVZTX09VVFBVVCBm
bGlweXZzKGluIGZsb2F0NCBwb3NpdGlvbiA6IFBPU0lUSU9OKQotewotICAgIFZTX09VVFBVVCBP
dXQ7Ci0KLSAgICBPdXQucG9zaXRpb24gPSBwb3NpdGlvbiArIGhhbGZQaXhlbFNpemU7Ci0gICAg
T3V0LnRleGNvb3JkID0gcG9zaXRpb24gKiBmbG9hdDQoMC41LCAwLjUsIDEuMCwgMS4wKSArIGZs
b2F0NCgwLjUsIDAuNSwgMCwgMCk7Ci0KLSAgICByZXR1cm4gT3V0OwotfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9D
bGVhcjExLmhsc2wgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL3NoYWRlcnMvQ2xlYXIxMS5obHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
NDJhYzY5OWI2NmEyMjM5YWRiZjUyNTFmYWFmM2IzZTRjM2ZlYzVmLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9DbGVhcjExLmhsc2wKKysrIC9kZXYvbnVsbApA
QCAtMSwzOCArMCwwIEBACi12b2lkIFZTX0NsZWFyKCBpbiBmbG9hdDMgIGluUG9zaXRpb24gOiAg
ICBQT1NJVElPTiwgIGluIGZsb2F0NCAgaW5Db2xvciA6IENPTE9SLAotICAgICAgICAgICAgICBv
dXQgZmxvYXQ0IG91dFBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIG91dCBmbG9hdDQgb3V0Q29sb3Ig
OiBDT0xPUikKLXsKLSAgICBvdXRQb3NpdGlvbiA9IGZsb2F0NChpblBvc2l0aW9uLCAxLjBmKTsK
LSAgICBvdXRDb2xvciA9IGluQ29sb3I7Ci19Ci0KLS8vIEFzc3VtZSB3ZSBhcmUgaW4gU000Kywg
d2hpY2ggaGFzIDggY29sb3Igb3V0cHV0cwotc3RydWN0IFBTX091dHB1dE11bHRpcGxlCi17Ci0J
ZmxvYXQ0IGNvbG9yMCA6IFNWX1RBUkdFVDA7Ci0JZmxvYXQ0IGNvbG9yMSA6IFNWX1RBUkdFVDE7
Ci0JZmxvYXQ0IGNvbG9yMiA6IFNWX1RBUkdFVDI7Ci0JZmxvYXQ0IGNvbG9yMyA6IFNWX1RBUkdF
VDM7Ci0JZmxvYXQ0IGNvbG9yNCA6IFNWX1RBUkdFVDQ7Ci0JZmxvYXQ0IGNvbG9yNSA6IFNWX1RB
UkdFVDU7Ci0JZmxvYXQ0IGNvbG9yNiA6IFNWX1RBUkdFVDY7Ci0JZmxvYXQ0IGNvbG9yNyA6IFNW
X1RBUkdFVDc7Ci19OwotCi1QU19PdXRwdXRNdWx0aXBsZSBQU19DbGVhck11bHRpcGxlKGluIGZs
b2F0NCBpblBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0NCBpbkNvbG9yIDogQ09MT1Ip
Ci17Ci0JUFNfT3V0cHV0TXVsdGlwbGUgb3V0Q29sb3I7Ci0Jb3V0Q29sb3IuY29sb3IwID0gaW5D
b2xvcjsKLQlvdXRDb2xvci5jb2xvcjEgPSBpbkNvbG9yOwotCW91dENvbG9yLmNvbG9yMiA9IGlu
Q29sb3I7Ci0Jb3V0Q29sb3IuY29sb3IzID0gaW5Db2xvcjsKLQlvdXRDb2xvci5jb2xvcjQgPSBp
bkNvbG9yOwotCW91dENvbG9yLmNvbG9yNSA9IGluQ29sb3I7Ci0Jb3V0Q29sb3IuY29sb3I2ID0g
aW5Db2xvcjsKLQlvdXRDb2xvci5jb2xvcjcgPSBpbkNvbG9yOwotCXJldHVybiBvdXRDb2xvcjsK
LX0KLQotZmxvYXQ0IFBTX0NsZWFyU2luZ2xlKGluIGZsb2F0NCBpblBvc2l0aW9uIDogU1ZfUG9z
aXRpb24sIGluIGZsb2F0NCBpbkNvbG9yIDogQ09MT1IpIDogU1ZfVGFyZ2V0MAotewotCXJldHVy
biBpbkNvbG9yOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL1Bhc3N0aHJvdWdoMTEuaGxzbCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9QYXNzdGhyb3VnaDEx
Lmhsc2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzYjc4MDFlZmMxZmVmNmUyMzkx
ODAwNjdkZDAyMzY5OTg1NWI5YTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9zaGFkZXJzL1Bhc3N0aHJvdWdoMTEuaGxzbAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAg
QEAKLVRleHR1cmUyRCBUZXh0dXJlIDogcmVnaXN0ZXIodDApOwotU2FtcGxlclN0YXRlIFNhbXBs
ZXIgOiByZWdpc3RlcihzMCk7Ci0KLXZvaWQgVlNfUGFzc3Rocm91Z2goIGluIGZsb2F0MiAgaW5Q
b3NpdGlvbiA6ICAgIFBPU0lUSU9OLCAgaW4gZmxvYXQyICBpblRleENvb3JkIDogVEVYQ09PUkQw
LAotICAgICAgICAgICAgICAgICAgICBvdXQgZmxvYXQ0IG91dFBvc2l0aW9uIDogU1ZfUE9TSVRJ
T04sIG91dCBmbG9hdDIgb3V0VGV4Q29vcmQgOiBURVhDT09SRDApCi17Ci0gICAgb3V0UG9zaXRp
b24gPSBmbG9hdDQoaW5Qb3NpdGlvbiwgMC4wZiwgMS4wZik7Ci0gICAgb3V0VGV4Q29vcmQgPSBp
blRleENvb3JkOwotfQotCi1mbG9hdDQgUFNfUGFzc3Rocm91Z2hSR0JBKGluIGZsb2F0NCBpblBv
c2l0aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6
IFNWX1RBUkdFVDAKLXsKLSAgICByZXR1cm4gVGV4dHVyZS5TYW1wbGUoU2FtcGxlciwgaW5UZXhD
b29yZCkucmdiYTsKLX0KLQotZmxvYXQ0IFBTX1Bhc3N0aHJvdWdoUkdCKGluIGZsb2F0NCBpblBv
c2l0aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6
IFNWX1RBUkdFVDAKLXsKLSAgICByZXR1cm4gZmxvYXQ0KFRleHR1cmUuU2FtcGxlKFNhbXBsZXIs
IGluVGV4Q29vcmQpLnJnYiwgMS4wZik7Ci19Ci0KLWZsb2F0NCBQU19QYXNzdGhyb3VnaEx1bShp
biBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6
IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCi17Ci0gICAgcmV0dXJuIGZsb2F0NChUZXh0dXJlLlNh
bXBsZShTYW1wbGVyLCBpblRleENvb3JkKS5ycnIsIDEuMGYpOwotfQotCi1mbG9hdDQgUFNfUGFz
c3Rocm91Z2hMdW1BbHBoYShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBm
bG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCi17Ci0gICAgcmV0dXJu
IFRleHR1cmUuU2FtcGxlKFNhbXBsZXIsIGluVGV4Q29vcmQpLnJycmE7Ci19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMv
Y29tcGlsZWQvY2xlYXIxMXZzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvY2xlYXIxMXZzLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDZiYzc0MzEyNmVkMDZjOGY2NzU4ZTEwZTVkMTc3MjAxNDk1Yzk2ZGIu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL2Ns
ZWFyMTF2cy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLSNpZiAwDQotLy8NCi0v
LyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjky
MDAuMTYzODQNCi0vLw0KLS8vDQotLy8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8N
Ci0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUg
IEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0t
LS0tLS0gLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0NCi0vLyBQT1NJVElPTiAgICAgICAgICAgICAg
ICAgMCAgIHh5eiAgICAgICAgIDAgICAgIE5PTkUgICBmbG9hdCAgIHh5eiANCi0vLyBDT0xPUiAg
ICAgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDEgICAgIE5PTkUgICBmbG9hdCAgIHh5
encNCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAg
ICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAt
LS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAg
ICAgMCAgICAgIFBPUyAgIGZsb2F0ICAgeHl6dw0KLS8vIENPTE9SICAgICAgICAgICAgICAgICAg
ICAwICAgeHl6dyAgICAgICAgMSAgICAgTk9ORSAgIGZsb2F0ICAgeHl6dw0KLS8vDQotdnNfNF8w
DQotZGNsX2lucHV0IHYwLnh5eg0KLWRjbF9pbnB1dCB2MS54eXp3DQotZGNsX291dHB1dF9zaXYg
bzAueHl6dywgcG9zaXRpb24NCi1kY2xfb3V0cHV0IG8xLnh5encNCi1tb3YgbzAueHl6LCB2MC54
eXp4DQotbW92IG8wLncsIGwoMS4wMDAwMDApDQotbW92IG8xLnh5encsIHYxLnh5encNCi1yZXQg
DQotLy8gQXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0N
Ci1jb25zdCBCWVRFIGdfVlNfQ2xlYXJbXSA9DQotew0KLSAgICAgNjgsICA4OCwgIDY2LCAgNjcs
ICA5NywgICA1LCANCi0gICAgIDEzLCAxNjMsIDE2MCwgMjU0LCAgOTUsIDEyNywgDQotICAgICAz
MCwgMTk0LCAxMjEsIDE0NCwgMjM2LCAxODUsIA0KLSAgICAgNTksICAyOSwgICAxLCAgIDAsICAg
MCwgICAwLCANCi0gICAgIDQ4LCAgIDIsICAgMCwgICAwLCAgIDUsICAgMCwgDQotICAgICAgMCwg
ICAwLCAgNTIsICAgMCwgICAwLCAgIDAsIA0KLSAgICAxNDAsICAgMCwgICAwLCAgIDAsIDIyMCwg
ICAwLCANCi0gICAgICAwLCAgIDAsICA0OCwgICAxLCAgIDAsICAgMCwgDQotICAgIDE4MCwgICAx
LCAgIDAsICAgMCwgIDgyLCAgNjgsIA0KLSAgICAgNjksICA3MCwgIDgwLCAgIDAsICAgMCwgICAw
LCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgMjgsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAN
Ci0gICAgMjU0LCAyNTUsICAgMCwgICAxLCAgIDAsICAgMCwgDQotICAgICAyOCwgICAwLCAgIDAs
ICAgMCwgIDc3LCAxMDUsIA0KLSAgICAgOTksIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCANCi0g
ICAgMTE2LCAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgDQotICAgICA3MiwgIDc2LCAgODMsICA3
NiwgIDMyLCAgODMsIA0KLSAgICAxMDQsICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCANCi0gICAg
IDY3LCAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgDQotICAgIDEwMSwgMTE0LCAgMzIsICA1Nywg
IDQ2LCAgNTEsIA0KLSAgICAgNDgsICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4LCANCi0gICAgIDQ2
LCAgNDksICA1NCwgIDUxLCAgNTYsICA1MiwgDQotICAgICAgMCwgMTcxLCAgNzMsICA4MywgIDcx
LCAgNzgsIA0KLSAgICAgNzIsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCANCi0gICAgICAwLCAg
IDAsICAgOCwgICAwLCAgIDAsICAgMCwgDQotICAgICA1NiwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAzLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDcsICAgNywgICAwLCAgIDAs
IA0KLSAgICAgNjUsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgIDE1LCAgMTUsICAgMCwgICAwLCANCi0gICAgIDgwLCAgNzksICA4Mywg
IDczLCAgODQsICA3MywgDQotICAgICA3OSwgIDc4LCAgIDAsICA2NywgIDc5LCAgNzYsIA0KLSAg
ICAgNzksICA4MiwgICAwLCAxNzEsICA3OSwgIDgzLCANCi0gICAgIDcxLCAgNzgsICA3NiwgICAw
LCAgIDAsICAgMCwgDQotICAgICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsIA0KLSAgICAg
IDAsICAgMCwgIDU2LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDEsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAxNSwgICAwLCANCi0gICAgICAwLCAgIDAsICA2OCwgICAwLCAgIDAs
ICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgICAzLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgMTUsICAg
MCwgDQotICAgICAgMCwgICAwLCAgODMsICA4NiwgIDk1LCAgODAsIA0KLSAgICAgNzksICA4Mywg
IDczLCAgODQsICA3MywgIDc5LCANCi0gICAgIDc4LCAgIDAsICA2NywgIDc5LCAgNzYsICA3OSwg
DQotICAgICA4MiwgICAwLCAxNzEsIDE3MSwgIDgzLCAgNzIsIA0KLSAgICAgNjgsICA4MiwgMTI0
LCAgIDAsICAgMCwgICAwLCANCi0gICAgIDY0LCAgIDAsICAgMSwgICAwLCAgMzEsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgOTUsICAgMCwgICAwLCAgIDMsIA0KLSAgICAxMTQsICAxNiwgIDE2LCAg
IDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICA5NSwgICAwLCAgIDAsICAgMywgDQotICAg
IDI0MiwgIDE2LCAgMTYsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgMTAzLCAgIDAs
ICAgMCwgICA0LCANCi0gICAgMjQyLCAgMzIsICAxNiwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAxMDEsICAgMCwgICAwLCAgIDMsIDI0
MiwgIDMyLCANCi0gICAgIDE2LCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQotICAgICA1NCwg
ICAwLCAgIDAsICAgNSwgMTE0LCAgMzIsIA0KLSAgICAgMTYsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCANCi0gICAgIDcwLCAgMTgsICAxNiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAw
LCAgNTQsICAgMCwgICAwLCAgIDUsIA0KLSAgICAxMzAsICAzMiwgIDE2LCAgIDAsICAgMCwgICAw
LCANCi0gICAgICAwLCAgIDAsICAgMSwgIDY0LCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAx
MjgsICA2MywgIDU0LCAgIDAsIA0KLSAgICAgIDAsICAgNSwgMjQyLCAgMzIsICAxNiwgICAwLCAN
Ci0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgNzAsICAzMCwgDQotICAgICAxNiwgICAwLCAgIDEs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAgNjIsICAgMCwgICAwLCAgIDEsICA4MywgIDg0LCANCi0g
ICAgIDY1LCAgODQsIDExNiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgNCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAg
ICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAg
ICAgIDAsICAgMA0KLX07DQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL2NsZWFybXVsdGlwbGUxMXBzLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMv
Y29tcGlsZWQvY2xlYXJtdWx0aXBsZTExcHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZTRiNDQ1YWMzZjZhNzFlNGM1ZTIxYWRjNGJhZTlhZmRiOTI4MzllNi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJtdWx0aXBsZTEx
cHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi0jaWYgMA0KLS8vDQotLy8gR2Vu
ZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2
Mzg0DQotLy8NCi0vLw0KLS8vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8g
TmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlICBGb3Jt
YXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0t
IC0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAg
ICB4eXp3ICAgICAgICAwICAgICAgUE9TICAgZmxvYXQgICAgICAgDQotLy8gQ09MT1IgICAgICAg
ICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAxICAgICBOT05FICAgZmxvYXQgICB4eXp3DQot
Ly8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAg
ICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAgIFVzZWQNCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0t
LSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAg
ICBUQVJHRVQgICBmbG9hdCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMSAg
IHh5encgICAgICAgIDEgICBUQVJHRVQgICBmbG9hdCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAg
ICAgICAgICAgICAgMiAgIHh5encgICAgICAgIDIgICBUQVJHRVQgICBmbG9hdCAgIHh5encNCi0v
LyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMyAgIHh5encgICAgICAgIDMgICBUQVJHRVQgICBm
bG9hdCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgNCAgIHh5encgICAgICAg
IDQgICBUQVJHRVQgICBmbG9hdCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAg
NSAgIHh5encgICAgICAgIDUgICBUQVJHRVQgICBmbG9hdCAgIHh5encNCi0vLyBTVl9UQVJHRVQg
ICAgICAgICAgICAgICAgNiAgIHh5encgICAgICAgIDYgICBUQVJHRVQgICBmbG9hdCAgIHh5encN
Ci0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgNyAgIHh5encgICAgICAgIDcgICBUQVJHRVQg
ICBmbG9hdCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHl6
dw0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF9vdXRwdXQgbzEueHl6dw0KLWRjbF9vdXRwdXQg
bzIueHl6dw0KLWRjbF9vdXRwdXQgbzMueHl6dw0KLWRjbF9vdXRwdXQgbzQueHl6dw0KLWRjbF9v
dXRwdXQgbzUueHl6dw0KLWRjbF9vdXRwdXQgbzYueHl6dw0KLWRjbF9vdXRwdXQgbzcueHl6dw0K
LW1vdiBvMC54eXp3LCB2MS54eXp3DQotbW92IG8xLnh5encsIHYxLnh5encNCi1tb3YgbzIueHl6
dywgdjEueHl6dw0KLW1vdiBvMy54eXp3LCB2MS54eXp3DQotbW92IG80Lnh5encsIHYxLnh5encN
Ci1tb3YgbzUueHl6dywgdjEueHl6dw0KLW1vdiBvNi54eXp3LCB2MS54eXp3DQotbW92IG83Lnh5
encsIHYxLnh5encNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA5IGluc3RydWN0aW9uIHNsb3Rz
IHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfQ2xlYXJNdWx0aXBsZVtdID0NCi17
DQotICAgICA2OCwgIDg4LCAgNjYsICA2NywgIDkyLCAgNTQsIA0KLSAgICAxMjAsIDEwNSwgMTY2
LCAxOTYsIDEzMiwgMTU4LCANCi0gICAgMjA5LCAgMzMsIDE4NSwgMTIyLCAgIDgsIDE4OSwgDQot
ICAgIDE0NSwgMTE0LCAgIDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgODgsICAgMywgICAwLCAg
IDAsICAgNSwgICAwLCANCi0gICAgICAwLCAgIDAsICA1MiwgICAwLCAgIDAsICAgMCwgDQotICAg
IDE0MCwgICAwLCAgIDAsICAgMCwgMjI0LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgMTg4LCAgIDEs
ICAgMCwgICAwLCANCi0gICAgMjIwLCAgIDIsICAgMCwgICAwLCAgODIsICA2OCwgDQotICAgICA2
OSwgIDcwLCAgODAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAyOCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDQsIA0KLSAgICAyNTUsIDI1NSwgICAwLCAgIDEsICAgMCwg
ICAwLCANCi0gICAgIDI4LCAgIDAsICAgMCwgICAwLCAgNzcsIDEwNSwgDQotICAgICA5OSwgMTE0
LCAxMTEsIDExNSwgMTExLCAxMDIsIA0KLSAgICAxMTYsICAzMiwgIDQwLCAgODIsICA0MSwgIDMy
LCANCi0gICAgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgDQotICAgIDEwNCwgIDk3LCAx
MDAsIDEwMSwgMTE0LCAgMzIsIA0KLSAgICAgNjcsIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAN
Ci0gICAgMTAxLCAxMTQsICAzMiwgIDU3LCAgNDYsICA1MSwgDQotICAgICA0OCwgIDQ2LCAgNTcs
ICA1MCwgIDQ4LCAgNDgsIA0KLSAgICAgNDYsICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCANCi0g
ICAgICAwLCAxNzEsICA3MywgIDgzLCAgNzEsICA3OCwgDQotICAgICA3NiwgICAwLCAgIDAsICAg
MCwgICAyLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCANCi0gICAg
IDU2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDEsICAgMCwg
ICAwLCAgIDAsIA0KLSAgICAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAw
LCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQotICAgICA2OCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAzLCAg
IDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQotICAgICAgMCwgICAwLCAgMTUsICAxNSwgICAwLCAg
IDAsIA0KLSAgICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCANCi0gICAgIDczLCAgODQs
ICA3MywgIDc5LCAgNzgsICAgMCwgDQotICAgICA2NywgIDc5LCAgNzYsICA3OSwgIDgyLCAgIDAs
IA0KLSAgICAxNzEsIDE3MSwgIDc5LCAgODMsICA3MSwgIDc4LCANCi0gICAgMjEyLCAgIDAsICAg
MCwgICAwLCAgIDgsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsIA0K
LSAgICAyMDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQotICAgICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgIDE1LCAgIDAsICAgMCwgICAwLCANCi0gICAgMjAwLCAgIDAsICAgMCwgICAw
LCAgIDEsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
IDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICAxNSwgICAwLCAg
IDAsICAgMCwgDQotICAgIDIwMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDIs
ICAgMCwgDQotICAgICAgMCwgICAwLCAgMTUsICAgMCwgICAwLCAgIDAsIA0KLSAgICAyMDAsICAg
MCwgICAwLCAgIDAsICAgMywgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQotICAgICAgMywgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
IDE1LCAgIDAsICAgMCwgICAwLCANCi0gICAgMjAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwg
DQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDMsICAgMCwgICAw
LCAgIDAsICAgNCwgICAwLCANCi0gICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQot
ICAgIDIwMCwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCi0gICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgMTUsICAgMCwgICAwLCAgIDAsIA0KLSAgICAyMDAsICAgMCwgICAwLCAgIDAs
ICAgNiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MywgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDE1LCAgIDAsICAg
MCwgICAwLCANCi0gICAgMjAwLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMCwgDQotICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDMsICAgMCwgICAwLCAgIDAsICAgNywg
ICAwLCANCi0gICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQotICAgICA4MywgIDg2
LCAgOTUsICA4NCwgIDY1LCAgODIsIA0KLSAgICAgNzEsICA2OSwgIDg0LCAgIDAsIDE3MSwgMTcx
LCANCi0gICAgIDgzLCAgNzIsICA2OCwgIDgyLCAgMjQsICAgMSwgDQotICAgICAgMCwgICAwLCAg
NjQsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgNzAsICAgMCwgICAwLCAgIDAsICA5OCwgIDE2LCAN
Ci0gICAgICAwLCAgIDMsIDI0MiwgIDE2LCAgMTYsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAs
ICAgMCwgMTAxLCAgIDAsIA0KLSAgICAgIDAsICAgMywgMjQyLCAgMzIsICAxNiwgICAwLCANCi0g
ICAgICAwLCAgIDAsICAgMCwgICAwLCAxMDEsICAgMCwgDQotICAgICAgMCwgICAzLCAyNDIsICAz
MiwgIDE2LCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsIDEwMSwgICAwLCANCi0gICAg
ICAwLCAgIDMsIDI0MiwgIDMyLCAgMTYsICAgMCwgDQotICAgICAgMiwgICAwLCAgIDAsICAgMCwg
MTAxLCAgIDAsIA0KLSAgICAgIDAsICAgMywgMjQyLCAgMzIsICAxNiwgICAwLCANCi0gICAgICAz
LCAgIDAsICAgMCwgICAwLCAxMDEsICAgMCwgDQotICAgICAgMCwgICAzLCAyNDIsICAzMiwgIDE2
LCAgIDAsIA0KLSAgICAgIDQsICAgMCwgICAwLCAgIDAsIDEwMSwgICAwLCANCi0gICAgICAwLCAg
IDMsIDI0MiwgIDMyLCAgMTYsICAgMCwgDQotICAgICAgNSwgICAwLCAgIDAsICAgMCwgMTAxLCAg
IDAsIA0KLSAgICAgIDAsICAgMywgMjQyLCAgMzIsICAxNiwgICAwLCANCi0gICAgICA2LCAgIDAs
ICAgMCwgICAwLCAxMDEsICAgMCwgDQotICAgICAgMCwgICAzLCAyNDIsICAzMiwgIDE2LCAgIDAs
IA0KLSAgICAgIDcsICAgMCwgICAwLCAgIDAsICA1NCwgICAwLCANCi0gICAgICAwLCAgIDUsIDI0
MiwgIDMyLCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDcwLCAgMzAsIA0K
LSAgICAgMTYsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAgIDU0LCAgIDAsICAgMCwg
ICA1LCAyNDIsICAzMiwgDQotICAgICAxNiwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KLSAg
ICAgNzAsICAzMCwgIDE2LCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICA1NCwgICAw
LCAgIDAsICAgNSwgDQotICAgIDI0MiwgIDMyLCAgMTYsICAgMCwgICAyLCAgIDAsIA0KLSAgICAg
IDAsICAgMCwgIDcwLCAgMzAsICAxNiwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAg
NTQsICAgMCwgDQotICAgICAgMCwgICA1LCAyNDIsICAzMiwgIDE2LCAgIDAsIA0KLSAgICAgIDMs
ICAgMCwgICAwLCAgIDAsICA3MCwgIDMwLCANCi0gICAgIDE2LCAgIDAsICAgMSwgICAwLCAgIDAs
ICAgMCwgDQotICAgICA1NCwgICAwLCAgIDAsICAgNSwgMjQyLCAgMzIsIA0KLSAgICAgMTYsICAg
MCwgICA0LCAgIDAsICAgMCwgICAwLCANCi0gICAgIDcwLCAgMzAsICAxNiwgICAwLCAgIDEsICAg
MCwgDQotICAgICAgMCwgICAwLCAgNTQsICAgMCwgICAwLCAgIDUsIA0KLSAgICAyNDIsICAzMiwg
IDE2LCAgIDAsICAgNSwgICAwLCANCi0gICAgICAwLCAgIDAsICA3MCwgIDMwLCAgMTYsICAgMCwg
DQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDU0LCAgIDAsIA0KLSAgICAgIDAsICAgNSwgMjQy
LCAgMzIsICAxNiwgICAwLCANCi0gICAgICA2LCAgIDAsICAgMCwgICAwLCAgNzAsICAzMCwgDQot
ICAgICAxNiwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgNTQsICAgMCwgICAwLCAg
IDUsIDI0MiwgIDMyLCANCi0gICAgIDE2LCAgIDAsICAgNywgICAwLCAgIDAsICAgMCwgDQotICAg
ICA3MCwgIDMwLCAgMTYsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDYyLCAgIDAs
ICAgMCwgICAxLCANCi0gICAgIDgzLCAgODQsICA2NSwgIDg0LCAxMTYsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDksICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgOSwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDksICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0g
ICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDANCi19Ow0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21w
aWxlZC9jbGVhcnNpbmdsZTExcHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9jbGVhcnNpbmdsZTExcHMuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdjYjA4N2M3NTA1MjYyYzgwN2IzZjRhNTE3MWExZDgw
ZTYyMWY1ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29t
cGlsZWQvY2xlYXJzaW5nbGUxMXBzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAot
I2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENv
bXBpbGVyIDkuMzAuOTIwMC4xNjM4NA0KLS8vDQotLy8NCi0vLy8NCi0vLw0KLS8vIElucHV0IHNp
Z25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdp
c3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0t
LS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1Bvc2l0
aW9uICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgIGZsb2F0ICAgICAg
IA0KLS8vIENPTE9SICAgICAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMSAgICAgTk9O
RSAgIGZsb2F0ICAgeHl6dw0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQot
Ly8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlICBG
b3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0t
LS0tIC0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tDQotLy8gU1ZfVGFyZ2V0ICAgICAgICAgICAgICAg
IDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180XzAN
Ci1kY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5encNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1tb3Yg
bzAueHl6dywgdjEueHl6dw0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDIgaW5zdHJ1Y3Rpb24g
c2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19DbGVhclNpbmdsZVtdID0N
Ci17DQotICAgICA2OCwgIDg4LCAgNjYsICA2NywgIDEzLCAxNTIsIA0KLSAgICAgMzIsICA0OSwg
MjIyLCAyMzYsICA5MiwgIDIwLCANCi0gICAgMTg4LCAgNzEsICA4OCwgIDQ2LCAxNjMsIDI0MSwg
DQotICAgIDE4OCwgMjM4LCAgIDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAyMDgsICAgMSwgICAw
LCAgIDAsICAgNSwgICAwLCANCi0gICAgICAwLCAgIDAsICA1MiwgICAwLCAgIDAsICAgMCwgDQot
ICAgIDE0MCwgICAwLCAgIDAsICAgMCwgMjI0LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDIwLCAg
IDEsICAgMCwgICAwLCANCi0gICAgIDg0LCAgIDEsICAgMCwgICAwLCAgODIsICA2OCwgDQotICAg
ICA2OSwgIDcwLCAgODAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAy
OCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsIA0KLSAgICAyNTUsIDI1NSwgICAwLCAgIDEsICAg
MCwgICAwLCANCi0gICAgIDI4LCAgIDAsICAgMCwgICAwLCAgNzcsIDEwNSwgDQotICAgICA5OSwg
MTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIA0KLSAgICAxMTYsICAzMiwgIDQwLCAgODIsICA0MSwg
IDMyLCANCi0gICAgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgDQotICAgIDEwNCwgIDk3
LCAxMDAsIDEwMSwgMTE0LCAgMzIsIA0KLSAgICAgNjcsIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4
LCANCi0gICAgMTAxLCAxMTQsICAzMiwgIDU3LCAgNDYsICA1MSwgDQotICAgICA0OCwgIDQ2LCAg
NTcsICA1MCwgIDQ4LCAgNDgsIA0KLSAgICAgNDYsICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCAN
Ci0gICAgICAwLCAxNzEsICA3MywgIDgzLCAgNzEsICA3OCwgDQotICAgICA3NiwgICAwLCAgIDAs
ICAgMCwgICAyLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCANCi0g
ICAgIDU2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDEsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAg
ICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQotICAgICA2OCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAz
LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQotICAgICAgMCwgICAwLCAgMTUsICAxNSwgICAw
LCAgIDAsIA0KLSAgICAgODMsICA4NiwgIDk1LCAgODAsIDExMSwgMTE1LCANCi0gICAgMTA1LCAx
MTYsIDEwNSwgMTExLCAxMTAsICAgMCwgDQotICAgICA2NywgIDc5LCAgNzYsICA3OSwgIDgyLCAg
IDAsIA0KLSAgICAxNzEsIDE3MSwgIDc5LCAgODMsICA3MSwgIDc4LCANCi0gICAgIDQ0LCAgIDAs
ICAgMCwgICAwLCAgIDEsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAs
IA0KLSAgICAgMzIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgIDE1LCAgIDAsICAgMCwgICAwLCANCi0gICAgIDgzLCAgODYsICA5NSwg
IDg0LCAgOTcsIDExNCwgDQotICAgIDEwMywgMTAxLCAxMTYsICAgMCwgMTcxLCAxNzEsIA0KLSAg
ICAgODMsICA3MiwgIDY4LCAgODIsICA1NiwgICAwLCANCi0gICAgICAwLCAgIDAsICA2NCwgICAw
LCAgIDAsICAgMCwgDQotICAgICAxNCwgICAwLCAgIDAsICAgMCwgIDk4LCAgMTYsIA0KLSAgICAg
IDAsICAgMywgMjQyLCAgMTYsICAxNiwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAx
MDEsICAgMCwgDQotICAgICAgMCwgICAzLCAyNDIsICAzMiwgIDE2LCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICA1NCwgICAwLCANCi0gICAgICAwLCAgIDUsIDI0MiwgIDMyLCAgMTYs
ICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDcwLCAgMzAsIA0KLSAgICAgMTYsICAg
MCwgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAgIDYyLCAgIDAsICAgMCwgICAxLCAgODMsICA4
NCwgDQotICAgICA2NSwgIDg0LCAxMTYsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDIsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCANCi0gICAgICAwLCAgIDANCi19Ow0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9jb21wb25lbnRtYXNr
cHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hh
ZGVycy9jb21waWxlZC9jb21wb25lbnRtYXNrcHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggOGYyODQ3YjhlN2QzNWYxNTdjYTFhOGQyODE4M2M1ZWI3YzRkMjZlZS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvY29tcG9uZW50bWFz
a3BzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0jaWYgMA0KLS8vDQotLy8gR2Vu
ZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2
Mzg0DQotLy8NCi0vLy8NCi0vLyBQYXJhbWV0ZXJzOg0KLS8vDQotLy8gICBmbG9hdDQgbW9kZTsN
Ci0vLyAgIHNhbXBsZXIyRCB0ZXg7DQotLy8NCi0vLw0KLS8vIFJlZ2lzdGVyczoNCi0vLw0KLS8v
ICAgTmFtZSAgICAgICAgIFJlZyAgIFNpemUNCi0vLyAgIC0tLS0tLS0tLS0tLSAtLS0tLSAtLS0t
DQotLy8gICBtb2RlICAgICAgICAgYzAgICAgICAgMQ0KLS8vICAgdGV4ICAgICAgICAgIHMwICAg
ICAgIDENCi0vLw0KLQ0KLSAgICBwc18yXzANCi0gICAgZGNsIHQwLnh5DQotICAgIGRjbF8yZCBz
MA0KLSAgICB0ZXhsZCByMCwgdDAsIHMwDQotICAgIG11bCByMS54eXosIHIwLCBjMC54DQotICAg
IG1hZCByMS53LCByMC53LCBjMC56LCBjMC53DQotICAgIG1vdiBvQzAsIHIxDQotDQotLy8gYXBw
cm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVyZSwgMyBhcml0aG1l
dGljKQ0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19wczIwX2NvbXBvbmVudG1hc2twc1tdID0N
Ci17DQotICAgICAgMCwgICAyLCAyNTUsIDI1NSwgMjU0LCAyNTUsIA0KLSAgICAgNDQsICAgMCwg
IDY3LCAgODQsICA2NSwgIDY2LCANCi0gICAgIDI4LCAgIDAsICAgMCwgICAwLCAxMTksICAgMCwg
DQotICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU1LCAyNTUsIA0KLSAgICAgIDIsICAgMCwgICAw
LCAgIDAsICAyOCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgDQot
ICAgIDExMiwgICAwLCAgIDAsICAgMCwgIDY4LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAyLCAg
IDAsICAgMCwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgNzYsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgOTIsICAgMCwgICAwLCAgIDAs
ICAgMywgICAwLCANCi0gICAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQotICAgICA5
NiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgMTA5LCAxMTEsIDEw
MCwgMTAxLCANCi0gICAgICAwLCAxNzEsIDE3MSwgMTcxLCAgIDEsICAgMCwgDQotICAgICAgMywg
ICAwLCAgIDEsICAgMCwgICA0LCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCANCi0gICAgICAwLCAgIDAsIDExNiwgMTAxLCAxMjAsICAgMCwgDQotICAgICAgNCwgICAw
LCAgMTIsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAxLCAgIDAsICAgMCwgICAw
LCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAxMTIsIDExNSwgDQotICAgICA5NSwgIDUwLCAg
OTUsICA0OCwgICAwLCAgNzcsIA0KLSAgICAxMDUsICA5OSwgMTE0LCAxMTEsIDExNSwgMTExLCAN
Ci0gICAgMTAyLCAxMTYsICAzMiwgIDQwLCAgODIsICA0MSwgDQotICAgICAzMiwgIDcyLCAgNzYs
ICA4MywgIDc2LCAgMzIsIA0KLSAgICAgODMsIDEwNCwgIDk3LCAxMDAsIDEwMSwgMTE0LCANCi0g
ICAgIDMyLCAgNjcsIDExMSwgMTA5LCAxMTIsIDEwNSwgDQotICAgIDEwOCwgMTAxLCAxMTQsICAz
MiwgIDU3LCAgNDYsIA0KLSAgICAgNTEsICA0OCwgIDQ2LCAgNTcsICA1MCwgIDQ4LCANCi0gICAg
IDQ4LCAgNDYsICA0OSwgIDU0LCAgNTEsICA1NiwgDQotICAgICA1MiwgICAwLCAxNzEsIDE3MSwg
IDMxLCAgIDAsIA0KLSAgICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTI4LCANCi0gICAgICAw
LCAgIDAsICAgMywgMTc2LCAgMzEsICAgMCwgDQotICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAw
LCAxNDQsIA0KLSAgICAgIDAsICAgOCwgIDE1LCAxNjAsICA2NiwgICAwLCANCi0gICAgICAwLCAg
IDMsICAgMCwgICAwLCAgMTUsIDEyOCwgDQotICAgICAgMCwgICAwLCAyMjgsIDE3NiwgICAwLCAg
IDgsIA0KLSAgICAyMjgsIDE2MCwgICA1LCAgIDAsICAgMCwgICAzLCANCi0gICAgICAxLCAgIDAs
ICAgNywgMTI4LCAgIDAsICAgMCwgDQotICAgIDIyOCwgMTI4LCAgIDAsICAgMCwgICAwLCAxNjAs
IA0KLSAgICAgIDQsICAgMCwgICAwLCAgIDQsICAgMSwgICAwLCANCi0gICAgICA4LCAxMjgsICAg
MCwgICAwLCAyNTUsIDEyOCwgDQotICAgICAgMCwgICAwLCAxNzAsIDE2MCwgICAwLCAgIDAsIA0K
LSAgICAyNTUsIDE2MCwgICAxLCAgIDAsICAgMCwgICAyLCANCi0gICAgICAwLCAgIDgsICAxNSwg
MTI4LCAgIDEsICAgMCwgDQotICAgIDIyOCwgMTI4LCAyNTUsIDI1NSwgICAwLCAgIDANCi19Ow0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvc2hhZGVycy9jb21waWxlZC9mbGlweXZzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvZmxpcHl2cy5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjU3NmVkNjc0MmYyZTJmNWVmM2ZiMTRhYjBkODNjNjk2
YjU3M2QyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21w
aWxlZC9mbGlweXZzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0jaWYgMA0KLS8v
DQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4z
MC45MjAwLjE2Mzg0DQotLy8NCi0vLy8NCi0vLyBQYXJhbWV0ZXJzOg0KLS8vDQotLy8gICBmbG9h
dDQgaGFsZlBpeGVsU2l6ZTsNCi0vLw0KLS8vDQotLy8gUmVnaXN0ZXJzOg0KLS8vDQotLy8gICBO
YW1lICAgICAgICAgIFJlZyAgIFNpemUNCi0vLyAgIC0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQ0K
LS8vICAgaGFsZlBpeGVsU2l6ZSBjMCAgICAgICAxDQotLy8NCi0NCi0gICAgdnNfMl8wDQotICAg
IGRlZiBjMSwgMC41LCAxLCAwLCAwDQotICAgIGRjbF9wb3NpdGlvbiB2MA0KLSAgICBhZGQgb1Bv
cywgdjAsIGMwDQotICAgIG1hZCBvVDAsIHYwLCBjMS54eHl5LCBjMS54eHp6DQotDQotLy8gYXBw
cm94aW1hdGVseSAyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBC
WVRFIGdfdnMyMF9mbGlweXZzW10gPQ0KLXsNCi0gICAgICAwLCAgIDIsIDI1NCwgMjU1LCAyNTQs
IDI1NSwgDQotICAgICAzNiwgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIA0KLSAgICAgMjgsICAg
MCwgICAwLCAgIDAsICA4NywgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTQsIDI1
NSwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
ICAwLCAgIDEsICAgMCwgICAwLCANCi0gICAgIDgwLCAgIDAsICAgMCwgICAwLCAgNDgsICAgMCwg
DQotICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAw
LCAgIDAsICA2NCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQot
ICAgIDEwNCwgIDk3LCAxMDgsIDEwMiwgIDgwLCAxMDUsIA0KLSAgICAxMjAsIDEwMSwgMTA4LCAg
ODMsIDEwNSwgMTIyLCANCi0gICAgMTAxLCAgIDAsIDE3MSwgMTcxLCAgIDEsICAgMCwgDQotICAg
ICAgMywgICAwLCAgIDEsICAgMCwgICA0LCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsIDExOCwgMTE1LCAgOTUsICA1MCwgDQotICAgICA5
NSwgIDQ4LCAgIDAsICA3NywgMTA1LCAgOTksIA0KLSAgICAxMTQsIDExMSwgMTE1LCAxMTEsIDEw
MiwgMTE2LCANCi0gICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgDQotICAgICA3Niwg
IDgzLCAgNzYsICAzMiwgIDgzLCAxMDQsIA0KLSAgICAgOTcsIDEwMCwgMTAxLCAxMTQsICAzMiwg
IDY3LCANCi0gICAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgDQotICAgIDExNCwgIDMy
LCAgNTcsICA0NiwgIDUxLCAgNDgsIA0KLSAgICAgNDYsICA1NywgIDUwLCAgNDgsICA0OCwgIDQ2
LCANCi0gICAgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAgMCwgDQotICAgIDE3MSwgMTcxLCAg
ODEsICAgMCwgICAwLCAgIDUsIA0KLSAgICAgIDEsICAgMCwgIDE1LCAxNjAsICAgMCwgICAwLCAN
Ci0gICAgICAwLCAgNjMsICAgMCwgICAwLCAxMjgsICA2MywgDQotICAgICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDMxLCAgIDAsICAgMCwgICAyLCANCi0g
ICAgICAwLCAgIDAsICAgMCwgMTI4LCAgIDAsICAgMCwgDQotICAgICAxNSwgMTQ0LCAgIDIsICAg
MCwgICAwLCAgIDMsIA0KLSAgICAgIDAsICAgMCwgIDE1LCAxOTIsICAgMCwgICAwLCANCi0gICAg
MjI4LCAxNDQsICAgMCwgICAwLCAyMjgsIDE2MCwgDQotICAgICAgNCwgICAwLCAgIDAsICAgNCwg
ICAwLCAgIDAsIA0KLSAgICAgMTUsIDIyNCwgICAwLCAgIDAsIDIyOCwgMTQ0LCANCi0gICAgICAx
LCAgIDAsICA4MCwgMTYwLCAgIDEsICAgMCwgDQotICAgIDE2MCwgMTYwLCAyNTUsIDI1NSwgICAw
LCAgIDANCi19Ow0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9sdW1pbmFuY2Vwcy5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL2x1
bWluYW5jZXBzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwMzEzYjA4NjBlY2Zl
MDI2NzdkZGIzZjAwMDkxNTFmNzhhM2JmYjIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL2x1bWluYW5jZXBzLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw3OSArMCwwIEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikg
SExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0DQotLy8NCi0vLy8NCi0vLyBQYXJh
bWV0ZXJzOg0KLS8vDQotLy8gICBmbG9hdDQgbW9kZTsNCi0vLyAgIHNhbXBsZXIyRCB0ZXg7DQot
Ly8NCi0vLw0KLS8vIFJlZ2lzdGVyczoNCi0vLw0KLS8vICAgTmFtZSAgICAgICAgIFJlZyAgIFNp
emUNCi0vLyAgIC0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tDQotLy8gICBtb2RlICAgICAgICAgYzAg
ICAgICAgMQ0KLS8vICAgdGV4ICAgICAgICAgIHMwICAgICAgIDENCi0vLw0KLQ0KLSAgICBwc18y
XzANCi0gICAgZGNsIHQwLnh5DQotICAgIGRjbF8yZCBzMA0KLSAgICB0ZXhsZCByMCwgdDAsIHMw
DQotICAgIG1hZCByMS53LCByMC53LCBjMC54LCBjMC55DQotICAgIG1vdiByMS54eXosIHIwLngN
Ci0gICAgbW92IG9DMCwgcjENCi0NCi0vLyBhcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xv
dHMgdXNlZCAoMSB0ZXh0dXJlLCAzIGFyaXRobWV0aWMpDQotI2VuZGlmDQotDQotY29uc3QgQllU
RSBnX3BzMjBfbHVtaW5hbmNlcHNbXSA9DQotew0KLSAgICAgIDAsICAgMiwgMjU1LCAyNTUsIDI1
NCwgMjU1LCANCi0gICAgIDQ0LCAgIDAsICA2NywgIDg0LCAgNjUsICA2NiwgDQotICAgICAyOCwg
ICAwLCAgIDAsICAgMCwgMTE5LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDIsIDI1NSwg
MjU1LCANCi0gICAgICAyLCAgIDAsICAgMCwgICAwLCAgMjgsICAgMCwgDQotICAgICAgMCwgICAw
LCAgIDAsICAgMSwgICAwLCAgIDAsIA0KLSAgICAxMTIsICAgMCwgICAwLCAgIDAsICA2OCwgICAw
LCANCi0gICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMSwgICAwLCAg
IDAsICAgMCwgIDc2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgIDkyLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDEs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAgOTYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0g
ICAgICAwLCAgIDAsIDEwOSwgMTExLCAxMDAsIDEwMSwgDQotICAgICAgMCwgMTcxLCAxNzEsIDE3
MSwgICAxLCAgIDAsIA0KLSAgICAgIDMsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCANCi0gICAg
ICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAxMTYsIDEwMSwg
MTIwLCAgIDAsIA0KLSAgICAgIDQsICAgMCwgIDEyLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAx
LCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgMTEy
LCAxMTUsIA0KLSAgICAgOTUsICA1MCwgIDk1LCAgNDgsICAgMCwgIDc3LCANCi0gICAgMTA1LCAg
OTksIDExNCwgMTExLCAxMTUsIDExMSwgDQotICAgIDEwMiwgMTE2LCAgMzIsICA0MCwgIDgyLCAg
NDEsIA0KLSAgICAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCANCi0gICAgIDgzLCAxMDQs
ICA5NywgMTAwLCAxMDEsIDExNCwgDQotICAgICAzMiwgIDY3LCAxMTEsIDEwOSwgMTEyLCAxMDUs
IA0KLSAgICAxMDgsIDEwMSwgMTE0LCAgMzIsICA1NywgIDQ2LCANCi0gICAgIDUxLCAgNDgsICA0
NiwgIDU3LCAgNTAsICA0OCwgDQotICAgICA0OCwgIDQ2LCAgNDksICA1NCwgIDUxLCAgNTYsIA0K
LSAgICAgNTIsICAgMCwgMTcxLCAxNzEsICAzMSwgICAwLCANCi0gICAgICAwLCAgIDIsICAgMCwg
ICAwLCAgIDAsIDEyOCwgDQotICAgICAgMCwgICAwLCAgIDMsIDE3NiwgIDMxLCAgIDAsIA0KLSAg
ICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTQ0LCANCi0gICAgICAwLCAgIDgsICAxNSwgMTYw
LCAgNjYsICAgMCwgDQotICAgICAgMCwgICAzLCAgIDAsICAgMCwgIDE1LCAxMjgsIA0KLSAgICAg
IDAsICAgMCwgMjI4LCAxNzYsICAgMCwgICA4LCANCi0gICAgMjI4LCAxNjAsICAgNCwgICAwLCAg
IDAsICAgNCwgDQotICAgICAgMSwgICAwLCAgIDgsIDEyOCwgICAwLCAgIDAsIA0KLSAgICAyNTUs
IDEyOCwgICAwLCAgIDAsICAgMCwgMTYwLCANCi0gICAgICAwLCAgIDAsICA4NSwgMTYwLCAgIDEs
ICAgMCwgDQotICAgICAgMCwgICAyLCAgIDEsICAgMCwgICA3LCAxMjgsIA0KLSAgICAgIDAsICAg
MCwgICAwLCAxMjgsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDIsICAgMCwgICA4LCAgMTUsIDEy
OCwgDQotICAgICAgMSwgICAwLCAyMjgsIDEyOCwgMjU1LCAyNTUsIA0KLSAgICAgIDAsICAgMA0K
LX07DQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdoMTF2cy5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0
aHJvdWdoMTF2cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM5NTIxNmU5OTIw
ZmNjYTAzMmIxZWFjODUzZTg1YWI4YjFiNjYwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaDExdnMuaAorKysgL2Rldi9udWxs
CkBAIC0xLDEzNCArMCwwIEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29m
dCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0DQotLy8NCi0vLw0KLS8v
Lw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAg
ICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlICBGb3JtYXQgICBVc2VkDQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0g
LS0tLS0tDQotLy8gUE9TSVRJT04gICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAwICAg
ICBOT05FICAgZmxvYXQgICB4eSAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4
eSAgICAgICAgICAxICAgICBOT05FICAgZmxvYXQgICB4eSAgDQotLy8NCi0vLw0KLS8vIE91dHB1
dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sg
UmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0NCi0vLyBTVl9Q
T1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgICBmbG9hdCAg
IHh5encNCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAg
IE5PTkUgICBmbG9hdCAgIHh5ICANCi0vLw0KLXZzXzRfMA0KLWRjbF9pbnB1dCB2MC54eQ0KLWRj
bF9pbnB1dCB2MS54eQ0KLWRjbF9vdXRwdXRfc2l2IG8wLnh5encsIHBvc2l0aW9uDQotZGNsX291
dHB1dCBvMS54eQ0KLW1vdiBvMC54eSwgdjAueHl4eA0KLW1vdiBvMC56dywgbCgwLDAsMCwxLjAw
MDAwMCkNCi1tb3YgbzEueHksIHYxLnh5eHgNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA0IGlu
c3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfVlNfUGFzc3Ro
cm91Z2hbXSA9DQotew0KLSAgICAgNjgsICA4OCwgIDY2LCAgNjcsIDE5NywgMjE0LCANCi0gICAg
MTg0LCAgODUsIDI0MCwgIDk0LCAgNzEsICA0OCwgDQotICAgIDE2NSwgIDM0LCAxNDIsIDIzMywg
ICAwLCAxMzUsIA0KLSAgICAxOTMsIDE3OCwgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAgIDY4
LCAgIDIsICAgMCwgICAwLCAgIDUsICAgMCwgDQotICAgICAgMCwgICAwLCAgNTIsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAxNDAsICAgMCwgICAwLCAgIDAsIDIyNCwgICAwLCANCi0gICAgICAwLCAg
IDAsICA1NiwgICAxLCAgIDAsICAgMCwgDQotICAgIDIwMCwgICAxLCAgIDAsICAgMCwgIDgyLCAg
NjgsIA0KLSAgICAgNjksICA3MCwgIDgwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KLSAgICAgMjgsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCANCi0gICAgMjU0LCAyNTUsICAg
MCwgICAxLCAgIDAsICAgMCwgDQotICAgICAyOCwgICAwLCAgIDAsICAgMCwgIDc3LCAxMDUsIA0K
LSAgICAgOTksIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCANCi0gICAgMTE2LCAgMzIsICA0MCwg
IDgyLCAgNDEsICAzMiwgDQotICAgICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsIA0KLSAg
ICAxMDQsICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCANCi0gICAgIDY3LCAxMTEsIDEwOSwgMTEy
LCAxMDUsIDEwOCwgDQotICAgIDEwMSwgMTE0LCAgMzIsICA1NywgIDQ2LCAgNTEsIA0KLSAgICAg
NDgsICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4LCANCi0gICAgIDQ2LCAgNDksICA1NCwgIDUxLCAg
NTYsICA1MiwgDQotICAgICAgMCwgMTcxLCAgNzMsICA4MywgIDcxLCAgNzgsIA0KLSAgICAgNzYs
ICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAs
ICAgMCwgDQotICAgICA1NiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQotICAgICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsIA0KLSAgICAgNjUsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAz
LCAgIDMsICAgMCwgICAwLCANCi0gICAgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgDQot
ICAgICA3OSwgIDc4LCAgIDAsICA4NCwgIDY5LCAgODgsIA0KLSAgICAgNjcsICA3OSwgIDc5LCAg
ODIsICA2OCwgICAwLCANCi0gICAgMTcxLCAxNzEsICA3OSwgIDgzLCAgNzEsICA3OCwgDQotICAg
ICA4MCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICA4LCAgIDAs
ICAgMCwgICAwLCANCi0gICAgIDU2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDMsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCi0gICAgICAwLCAgIDAsICAxNSwgICAwLCAgIDAsICAgMCwgDQotICAgICA2OCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCANCi0gICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgDQotICAgICAgMCwgICAw
LCAgIDMsICAxMiwgICAwLCAgIDAsIA0KLSAgICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgz
LCANCi0gICAgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAgMCwgDQotICAgICA4NCwgIDY5LCAg
ODgsICA2NywgIDc5LCAgNzksIA0KLSAgICAgODIsICA2OCwgICAwLCAxNzEsIDE3MSwgMTcxLCAN
Ci0gICAgIDgzLCAgNzIsICA2OCwgIDgyLCAxMzYsICAgMCwgDQotICAgICAgMCwgICAwLCAgNjQs
ICAgMCwgICAxLCAgIDAsIA0KLSAgICAgMzQsICAgMCwgICAwLCAgIDAsICA5NSwgICAwLCANCi0g
ICAgICAwLCAgIDMsICA1MCwgIDE2LCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAg
MCwgIDk1LCAgIDAsIA0KLSAgICAgIDAsICAgMywgIDUwLCAgMTYsICAxNiwgICAwLCANCi0gICAg
ICAxLCAgIDAsICAgMCwgICAwLCAxMDMsICAgMCwgDQotICAgICAgMCwgICA0LCAyNDIsICAzMiwg
IDE2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAw
LCAgIDAsIDEwMSwgICAwLCAgIDAsICAgMywgDQotICAgICA1MCwgIDMyLCAgMTYsICAgMCwgICAx
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDU0LCAgIDAsICAgMCwgICA1LCANCi0gICAgIDUwLCAg
MzIsICAxNiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgNzAsICAxNiwgIDE2LCAg
IDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICA1NCwgICAwLCANCi0gICAgICAwLCAgIDgs
IDE5NCwgIDMyLCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgNjQs
IA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgMTI4LCAgNjMsIA0K
LSAgICAgNTQsICAgMCwgICAwLCAgIDUsICA1MCwgIDMyLCANCi0gICAgIDE2LCAgIDAsICAgMSwg
ICAwLCAgIDAsICAgMCwgDQotICAgICA3MCwgIDE2LCAgMTYsICAgMCwgICAxLCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgIDYyLCAgIDAsICAgMCwgICAxLCANCi0gICAgIDgzLCAgODQsICA2NSwgIDg0
LCAxMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgNCwgICAwLCAg
IDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDQsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAN
Ci19Ow0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaGx1bTExcHMuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9w
YXNzdGhyb3VnaGx1bTExcHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YwN2I0
YTNjYmQ4OTY1ZDE4Y2I0OGQwMThlNDEyZDg0MjQyMDg5NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hsdW0xMXBzLmgKKysr
IC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBi
eSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NA0KLS8v
DQotLy8NCi0vLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBF
bGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0t
LS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0K
LS8vIFRleHR1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAg
ICAgICAgMmQgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVy
ZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBT
eXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0t
LS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAg
ICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgIGZsb2F0ICAgICAgIA0KLS8v
IFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgIGZs
b2F0ICAgeHkgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFt
ZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlICBGb3JtYXQg
ICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0t
LS0tLS0tIC0tLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4
eXp3ICAgICAgICAwICAgVEFSR0VUICAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xf
c2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQs
ZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQ0KLWRjbF9v
dXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQw
Lnh5encsIHMwDQotbW92IG8wLnh5eiwgcjAueHh4eA0KLW1vdiBvMC53LCBsKDEuMDAwMDAwKQ0K
LXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRp
Zg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaEx1bVtdID0NCi17DQotICAgICA2OCwg
IDg4LCAgNjYsICA2NywgMjQ0LCAgIDksIA0KLSAgICAyMTMsIDE0NywgIDE5LCAyNDksICA3MCwg
MTExLCANCi0gICAgMTU3LCAgOTIsIDI0MywgMTYwLCAgNDAsIDE0NCwgDQotICAgIDIzOCwgMjIx
LCAgIDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAxMjgsICAgMiwgICAwLCAgIDAsICAgNSwgICAw
LCANCi0gICAgICAwLCAgIDAsICA1MiwgICAwLCAgIDAsICAgMCwgDQotICAgIDIyMCwgICAwLCAg
IDAsICAgMCwgIDUyLCAgIDEsIA0KLSAgICAgIDAsICAgMCwgMTA0LCAgIDEsICAgMCwgICAwLCAN
Ci0gICAgICA0LCAgIDIsICAgMCwgICAwLCAgODIsICA2OCwgDQotICAgICA2OSwgIDcwLCAxNjAs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0g
ICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgDQotICAgICAyOCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDQsIA0KLSAgICAyNTUsIDI1NSwgICAwLCAgIDEsICAgMCwgICAwLCANCi0gICAg
MTA4LCAgIDAsICAgMCwgICAwLCAgOTIsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDMsICAgMCwg
ICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAx
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAgMTAwLCAg
IDAsICAgMCwgICAwLCAgIDIsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAg
IDAsIA0KLSAgICAgIDQsICAgMCwgICAwLCAgIDAsIDI1NSwgMjU1LCANCi0gICAgMjU1LCAyNTUs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDEzLCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgIDgzLCAgOTcsIDEwOSwgMTEyLCANCi0gICAgMTA4LCAxMDEsIDEx
NCwgICAwLCAgODQsIDEwMSwgDQotICAgIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCAgIDAsIA0K
LSAgICAgNzcsIDEwNSwgIDk5LCAxMTQsIDExMSwgMTE1LCANCi0gICAgMTExLCAxMDIsIDExNiwg
IDMyLCAgNDAsICA4MiwgDQotICAgICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsIA0KLSAg
ICAgMzIsICA4MywgMTA0LCAgOTcsIDEwMCwgMTAxLCANCi0gICAgMTE0LCAgMzIsICA2NywgMTEx
LCAxMDksIDExMiwgDQotICAgIDEwNSwgMTA4LCAxMDEsIDExNCwgIDMyLCAgNTcsIA0KLSAgICAg
NDYsICA1MSwgIDQ4LCAgNDYsICA1NywgIDUwLCANCi0gICAgIDQ4LCAgNDgsICA0NiwgIDQ5LCAg
NTQsICA1MSwgDQotICAgICA1NiwgIDUyLCAgIDAsIDE3MSwgIDczLCAgODMsIA0KLSAgICAgNzEs
ICA3OCwgIDgwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAyLCAgIDAsICAgMCwgICAwLCAgIDgs
ICAgMCwgDQotICAgICAgMCwgICAwLCAgNTYsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAg
MCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDE1LCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
IDY4LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAw
LCAgIDAsICAgMywgICAzLCANCi0gICAgICAwLCAgIDAsICA4MywgIDg2LCAgOTUsICA4MCwgDQot
ICAgICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksIA0KLSAgICAgNzgsICAgMCwgIDg0LCAg
NjksICA4OCwgIDY3LCANCi0gICAgIDc5LCAgNzksICA4MiwgIDY4LCAgIDAsIDE3MSwgDQotICAg
IDE3MSwgMTcxLCAgNzksICA4MywgIDcxLCAgNzgsIA0KLSAgICAgNDQsICAgMCwgICAwLCAgIDAs
ICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgDQotICAgICAz
MiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCi0gICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwg
ICAwLCAgMTUsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwg
IDgyLCANCi0gICAgIDcxLCAgNjksICA4NCwgICAwLCAxNzEsIDE3MSwgDQotICAgICA4MywgIDcy
LCAgNjgsICA4MiwgMTQ4LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDY0LCAgIDAsICAgMCwgICAw
LCANCi0gICAgIDM3LCAgIDAsICAgMCwgICAwLCAgOTAsICAgMCwgDQotICAgICAgMCwgICAzLCAg
IDAsICA5NiwgIDE2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICA4OCwgIDI0LCAN
Ci0gICAgICAwLCAgIDQsICAgMCwgMTEyLCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAs
ICAgMCwgIDg1LCAgODUsIA0KLSAgICAgIDAsICAgMCwgIDk4LCAgMTYsICAgMCwgICAzLCANCi0g
ICAgIDUwLCAgMTYsICAxNiwgICAwLCAgIDEsICAgMCwgDQotICAgICAgMCwgICAwLCAxMDEsICAg
MCwgICAwLCAgIDMsIA0KLSAgICAyNDIsICAzMiwgIDE2LCAgIDAsICAgMCwgICAwLCANCi0gICAg
ICAwLCAgIDAsIDEwNCwgICAwLCAgIDAsICAgMiwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwg
IDY5LCAgIDAsIA0KLSAgICAgIDAsICAgOSwgMjQyLCAgIDAsICAxNiwgICAwLCANCi0gICAgICAw
LCAgIDAsICAgMCwgICAwLCAgNzAsICAxNiwgDQotICAgICAxNiwgICAwLCAgIDEsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAgNzAsIDEyNiwgIDE2LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAg
IDAsICAgMCwgIDk2LCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDU0LCAg
IDAsIA0KLSAgICAgIDAsICAgNSwgMTE0LCAgMzIsICAxNiwgICAwLCANCi0gICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDYsICAgMCwgDQotICAgICAxNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KLSAgICAgNTQsICAgMCwgICAwLCAgIDUsIDEzMCwgIDMyLCANCi0gICAgIDE2LCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMSwgIDY0LCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
LSAgICAxMjgsICA2MywgIDYyLCAgIDAsICAgMCwgICAxLCANCi0gICAgIDgzLCAgODQsICA2NSwg
IDg0LCAxMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsIA0KLSAg
ICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMiwgICAw
LCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDMsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAg
IDANCi19Ow0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaGx1bWFscGhhMTFwcy5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2Nv
bXBpbGVkL3Bhc3N0aHJvdWdobHVtYWxwaGExMXBzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGI1NWQ2MGViM2IyMjZkZDBlN2RhZTQ4YmVkNTU0NDdhOThmYjEzNDEuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdo
bHVtYWxwaGExMXBzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotI2lmIDANCi0v
Lw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDku
MzAuOTIwMC4xNjM4NA0KLS8vDQotLy8NCi0vLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0v
Lw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQg
ICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNh
bXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAg
TkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlICBmbG9hdDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0K
LS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4
ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0tLQ0K
LS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAg
IGZsb2F0ICAgICAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAg
ICAgMSAgICAgTk9ORSAgIGZsb2F0ICAgeHkgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0
dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVy
IFN5c1ZhbHVlICBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0g
LS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAg
ICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgZmxvYXQgICB4eXp3DQot
Ly8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNl
X3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxp
bmVhciB2MS54eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotc2FtcGxlIHIw
Lnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwDQotbW92IG8wLnh5encsIHIwLnh4eHcNCi1yZXQg
DQotLy8gQXBwcm94aW1hdGVseSAzIGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0N
Ci1jb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hMdW1BbHBoYVtdID0NCi17DQotICAgICA2OCwg
IDg4LCAgNjYsICA2NywgMTg1LCAgMTQsIA0KLSAgICAgODQsIDIyMywgMTkyLCAgNDIsICAxNiwg
MTMzLCANCi0gICAgIDQ2LCAxMDAsICA5NSwgMjIxLCAxODMsICA5NywgDQotICAgIDE5MiwgIDIz
LCAgIDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAxMDgsICAgMiwgICAwLCAgIDAsICAgNSwgICAw
LCANCi0gICAgICAwLCAgIDAsICA1MiwgICAwLCAgIDAsICAgMCwgDQotICAgIDIyMCwgICAwLCAg
IDAsICAgMCwgIDUyLCAgIDEsIA0KLSAgICAgIDAsICAgMCwgMTA0LCAgIDEsICAgMCwgICAwLCAN
Ci0gICAgMjQwLCAgIDEsICAgMCwgICAwLCAgODIsICA2OCwgDQotICAgICA2OSwgIDcwLCAxNjAs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0g
ICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgDQotICAgICAyOCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDQsIA0KLSAgICAyNTUsIDI1NSwgICAwLCAgIDEsICAgMCwgICAwLCANCi0gICAg
MTA4LCAgIDAsICAgMCwgICAwLCAgOTIsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDMsICAgMCwg
ICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAx
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCi0gICAgMTAwLCAg
IDAsICAgMCwgICAwLCAgIDIsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAg
IDAsIA0KLSAgICAgIDQsICAgMCwgICAwLCAgIDAsIDI1NSwgMjU1LCANCi0gICAgMjU1LCAyNTUs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDEzLCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgIDgzLCAgOTcsIDEwOSwgMTEyLCANCi0gICAgMTA4LCAxMDEsIDEx
NCwgICAwLCAgODQsIDEwMSwgDQotICAgIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCAgIDAsIA0K
LSAgICAgNzcsIDEwNSwgIDk5LCAxMTQsIDExMSwgMTE1LCANCi0gICAgMTExLCAxMDIsIDExNiwg
IDMyLCAgNDAsICA4MiwgDQotICAgICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsIA0KLSAg
ICAgMzIsICA4MywgMTA0LCAgOTcsIDEwMCwgMTAxLCANCi0gICAgMTE0LCAgMzIsICA2NywgMTEx
LCAxMDksIDExMiwgDQotICAgIDEwNSwgMTA4LCAxMDEsIDExNCwgIDMyLCAgNTcsIA0KLSAgICAg
NDYsICA1MSwgIDQ4LCAgNDYsICA1NywgIDUwLCANCi0gICAgIDQ4LCAgNDgsICA0NiwgIDQ5LCAg
NTQsICA1MSwgDQotICAgICA1NiwgIDUyLCAgIDAsIDE3MSwgIDczLCAgODMsIA0KLSAgICAgNzEs
ICA3OCwgIDgwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAyLCAgIDAsICAgMCwgICAwLCAgIDgs
ICAgMCwgDQotICAgICAgMCwgICAwLCAgNTYsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAg
MCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDE1LCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
IDY4LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAw
LCAgIDAsICAgMywgICAzLCANCi0gICAgICAwLCAgIDAsICA4MywgIDg2LCAgOTUsICA4MCwgDQot
ICAgICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksIA0KLSAgICAgNzgsICAgMCwgIDg0LCAg
NjksICA4OCwgIDY3LCANCi0gICAgIDc5LCAgNzksICA4MiwgIDY4LCAgIDAsIDE3MSwgDQotICAg
IDE3MSwgMTcxLCAgNzksICA4MywgIDcxLCAgNzgsIA0KLSAgICAgNDQsICAgMCwgICAwLCAgIDAs
ICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgDQotICAgICAz
MiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCi0gICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwg
ICAwLCAgMTUsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwg
IDgyLCANCi0gICAgIDcxLCAgNjksICA4NCwgICAwLCAxNzEsIDE3MSwgDQotICAgICA4MywgIDcy
LCAgNjgsICA4MiwgMTI4LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDY0LCAgIDAsICAgMCwgICAw
LCANCi0gICAgIDMyLCAgIDAsICAgMCwgICAwLCAgOTAsICAgMCwgDQotICAgICAgMCwgICAzLCAg
IDAsICA5NiwgIDE2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICA4OCwgIDI0LCAN
Ci0gICAgICAwLCAgIDQsICAgMCwgMTEyLCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAs
ICAgMCwgIDg1LCAgODUsIA0KLSAgICAgIDAsICAgMCwgIDk4LCAgMTYsICAgMCwgICAzLCANCi0g
ICAgIDUwLCAgMTYsICAxNiwgICAwLCAgIDEsICAgMCwgDQotICAgICAgMCwgICAwLCAxMDEsICAg
MCwgICAwLCAgIDMsIA0KLSAgICAyNDIsICAzMiwgIDE2LCAgIDAsICAgMCwgICAwLCANCi0gICAg
ICAwLCAgIDAsIDEwNCwgICAwLCAgIDAsICAgMiwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwg
IDY5LCAgIDAsIA0KLSAgICAgIDAsICAgOSwgMjQyLCAgIDAsICAxNiwgICAwLCANCi0gICAgICAw
LCAgIDAsICAgMCwgICAwLCAgNzAsICAxNiwgDQotICAgICAxNiwgICAwLCAgIDEsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAgNzAsIDEyNiwgIDE2LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAg
IDAsICAgMCwgIDk2LCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDU0LCAg
IDAsIA0KLSAgICAgIDAsICAgNSwgMjQyLCAgMzIsICAxNiwgICAwLCANCi0gICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDYsICAxMiwgDQotICAgICAxNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KLSAgICAgNjIsICAgMCwgICAwLCAgIDEsICA4MywgIDg0LCANCi0gICAgIDY1LCAgODQsIDEx
NiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAyLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMA0KLX07
DQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3Vn
aHBzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwYTJjN2Q0ODJiMzNiZTg2Njc0
OTU0NzU1YTM5OTU4NWM4YWJlYTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDYy
ICswLDAgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNM
IFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQNCi0vLw0KLS8vLw0KLS8vIFBhcmFtZXRl
cnM6DQotLy8NCi0vLyAgIHNhbXBsZXIyRCB0ZXg7DQotLy8NCi0vLw0KLS8vIFJlZ2lzdGVyczoN
Ci0vLw0KLS8vICAgTmFtZSAgICAgICAgIFJlZyAgIFNpemUNCi0vLyAgIC0tLS0tLS0tLS0tLSAt
LS0tLSAtLS0tDQotLy8gICB0ZXggICAgICAgICAgczAgICAgICAgMQ0KLS8vDQotDQotICAgIHBz
XzJfMA0KLSAgICBkY2wgdDAueHkNCi0gICAgZGNsXzJkIHMwDQotICAgIHRleGxkIHIwLCB0MCwg
czANCi0gICAgbW92IG9DMCwgcjANCi0NCi0vLyBhcHByb3hpbWF0ZWx5IDIgaW5zdHJ1Y3Rpb24g
c2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCAxIGFyaXRobWV0aWMpDQotI2VuZGlmDQotDQotY29uc3Qg
QllURSBnX3BzMjBfcGFzc3Rocm91Z2hwc1tdID0NCi17DQotICAgICAgMCwgICAyLCAyNTUsIDI1
NSwgMjU0LCAyNTUsIA0KLSAgICAgMzMsICAgMCwgIDY3LCAgODQsICA2NSwgIDY2LCANCi0gICAg
IDI4LCAgIDAsICAgMCwgICAwLCAgNzUsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMiwg
MjU1LCAyNTUsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAyOCwgICAwLCANCi0gICAgICAw
LCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgDQotICAgICA2OCwgICAwLCAgIDAsICAgMCwgIDQ4
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAxLCAg
IDAsICAgMCwgICAwLCAgNTIsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIA0KLSAgICAxMTYsIDEwMSwgMTIwLCAgIDAsICAgNCwgICAwLCANCi0gICAgIDEyLCAgIDAs
ICAgMSwgICAwLCAgIDEsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgMTEyLCAxMTUsICA5NSwgIDUwLCANCi0gICAgIDk1LCAgNDgsICAg
MCwgIDc3LCAxMDUsICA5OSwgDQotICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIA0K
LSAgICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCANCi0gICAgIDc2LCAgODMsICA3Niwg
IDMyLCAgODMsIDEwNCwgDQotICAgICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCAgNjcsIA0KLSAg
ICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCANCi0gICAgMTE0LCAgMzIsICA1NywgIDQ2
LCAgNTEsICA0OCwgDQotICAgICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4LCAgNDYsIA0KLSAgICAg
NDksICA1NCwgIDUxLCAgNTYsICA1MiwgICAwLCANCi0gICAgMTcxLCAxNzEsICAzMSwgICAwLCAg
IDAsICAgMiwgDQotICAgICAgMCwgICAwLCAgIDAsIDEyOCwgICAwLCAgIDAsIA0KLSAgICAgIDMs
IDE3NiwgIDMxLCAgIDAsICAgMCwgICAyLCANCi0gICAgICAwLCAgIDAsICAgMCwgMTQ0LCAgIDAs
ICAgOCwgDQotICAgICAxNSwgMTYwLCAgNjYsICAgMCwgICAwLCAgIDMsIA0KLSAgICAgIDAsICAg
MCwgIDE1LCAxMjgsICAgMCwgICAwLCANCi0gICAgMjI4LCAxNzYsICAgMCwgICA4LCAyMjgsIDE2
MCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDgsIA0KLSAgICAgMTUsIDEyOCwg
ICAwLCAgIDAsIDIyOCwgMTI4LCANCi0gICAgMjU1LCAyNTUsICAgMCwgICAwDQotfTsNCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3No
YWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2IxMXBzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hy
Z2IxMXBzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NmNiY2Y2YjgyY2ZkOTY1
ODYwMThkZTE5OTc5OTczODYxODc3MzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiMTFwcy5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTUyICswLDAgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0
IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQNCi0vLw0KLS8vDQotLy8v
DQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0v
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0t
LS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJl
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDJkICAg
IDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0v
LyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZv
cm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0t
LS0gLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAg
MCAgIHh5encgICAgICAgIDAgICAgICBQT1MgICBmbG9hdCAgICAgICANCi0vLyBURVhDT09SRCAg
ICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgICBmbG9hdCAgIHh5ICAN
Ci0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAg
ICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KLS8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0t
LS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAg
MCAgIFRBUkdFVCAgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAs
IG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0
LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkNCi1kY2xfb3V0cHV0IG8wLnh5
encNCi1kY2xfdGVtcHMgMQ0KLXNhbXBsZSByMC54eXp3LCB2MS54eXh4LCB0MC54eXp3LCBzMA0K
LW1vdiBvMC54eXosIHIwLnh5engNCi1tb3YgbzAudywgbCgxLjAwMDAwMCkNCi1yZXQgDQotLy8g
QXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25z
dCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSR0JbXSA9DQotew0KLSAgICAgNjgsICA4OCwgIDY2LCAg
NjcsIDEyNSwgMTg2LCANCi0gICAgMjUwLCAyNDIsIDExMywgMjU1LCAgNTksIDIzOSwgDQotICAg
IDExOSwgMTU4LCAyMzcsICA3OCwgMjIwLCAgNDMsIA0KLSAgICAxNjAsICA0NiwgICAxLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgMTI4LCAgIDIsICAgMCwgICAwLCAgIDUsICAgMCwgDQotICAgICAg
MCwgICAwLCAgNTIsICAgMCwgICAwLCAgIDAsIA0KLSAgICAyMjAsICAgMCwgICAwLCAgIDAsICA1
MiwgICAxLCANCi0gICAgICAwLCAgIDAsIDEwNCwgICAxLCAgIDAsICAgMCwgDQotICAgICAgNCwg
ICAyLCAgIDAsICAgMCwgIDgyLCAgNjgsIA0KLSAgICAgNjksICA3MCwgMTYwLCAgIDAsICAgMCwg
ICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAw
LCAgIDIsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgMjgsICAgMCwgICAwLCAgIDAsICAgMCwgICA0
LCANCi0gICAgMjU1LCAyNTUsICAgMCwgICAxLCAgIDAsICAgMCwgDQotICAgIDEwOCwgICAwLCAg
IDAsICAgMCwgIDkyLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCi0g
ICAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQotICAgIDEwMCwgICAwLCAgIDAsICAg
MCwgICAyLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCANCi0gICAg
ICA0LCAgIDAsICAgMCwgICAwLCAyNTUsIDI1NSwgDQotICAgIDI1NSwgMjU1LCAgIDAsICAgMCwg
ICAwLCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAxMywgICAwLCANCi0gICAgICAw
LCAgIDAsICA4MywgIDk3LCAxMDksIDExMiwgDQotICAgIDEwOCwgMTAxLCAxMTQsICAgMCwgIDg0
LCAxMDEsIA0KLSAgICAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgICAwLCANCi0gICAgIDc3LCAx
MDUsICA5OSwgMTE0LCAxMTEsIDExNSwgDQotICAgIDExMSwgMTAyLCAxMTYsICAzMiwgIDQwLCAg
ODIsIA0KLSAgICAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCANCi0gICAgIDMyLCAgODMs
IDEwNCwgIDk3LCAxMDAsIDEwMSwgDQotICAgIDExNCwgIDMyLCAgNjcsIDExMSwgMTA5LCAxMTIs
IA0KLSAgICAxMDUsIDEwOCwgMTAxLCAxMTQsICAzMiwgIDU3LCANCi0gICAgIDQ2LCAgNTEsICA0
OCwgIDQ2LCAgNTcsICA1MCwgDQotICAgICA0OCwgIDQ4LCAgNDYsICA0OSwgIDU0LCAgNTEsIA0K
LSAgICAgNTYsICA1MiwgICAwLCAxNzEsICA3MywgIDgzLCANCi0gICAgIDcxLCAgNzgsICA4MCwg
ICAwLCAgIDAsICAgMCwgDQotICAgICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgIDU2LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDEsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAxNSwgICAwLCANCi0gICAgICAwLCAgIDAsICA2OCwgICAwLCAg
IDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDMs
ICAgMywgDQotICAgICAgMCwgICAwLCAgODMsICA4NiwgIDk1LCAgODAsIA0KLSAgICAgNzksICA4
MywgIDczLCAgODQsICA3MywgIDc5LCANCi0gICAgIDc4LCAgIDAsICA4NCwgIDY5LCAgODgsICA2
NywgDQotICAgICA3OSwgIDc5LCAgODIsICA2OCwgICAwLCAxNzEsIA0KLSAgICAxNzEsIDE3MSwg
IDc5LCAgODMsICA3MSwgIDc4LCANCi0gICAgIDQ0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwg
DQotICAgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgMzIsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQot
ICAgICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDE1LCAg
IDAsICAgMCwgICAwLCANCi0gICAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgDQotICAg
ICA3MSwgIDY5LCAgODQsICAgMCwgMTcxLCAxNzEsIA0KLSAgICAgODMsICA3MiwgIDY4LCAgODIs
IDE0OCwgICAwLCANCi0gICAgICAwLCAgIDAsICA2NCwgICAwLCAgIDAsICAgMCwgDQotICAgICAz
NywgICAwLCAgIDAsICAgMCwgIDkwLCAgIDAsIA0KLSAgICAgIDAsICAgMywgICAwLCAgOTYsICAx
NiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgODgsICAyNCwgDQotICAgICAgMCwg
ICA0LCAgIDAsIDExMiwgIDE2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICA4NSwg
IDg1LCANCi0gICAgICAwLCAgIDAsICA5OCwgIDE2LCAgIDAsICAgMywgDQotICAgICA1MCwgIDE2
LCAgMTYsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgMTAxLCAgIDAsICAgMCwgICAz
LCANCi0gICAgMjQyLCAgMzIsICAxNiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAx
MDQsICAgMCwgICAwLCAgIDIsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICA2OSwgICAwLCAN
Ci0gICAgICAwLCAgIDksIDI0MiwgICAwLCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAs
ICAgMCwgIDcwLCAgMTYsIA0KLSAgICAgMTYsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCANCi0g
ICAgIDcwLCAxMjYsICAxNiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICA5
NiwgIDE2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICA1NCwgICAwLCANCi0gICAg
ICAwLCAgIDUsIDExNCwgIDMyLCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwg
IDcwLCAgIDIsIA0KLSAgICAgMTYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgIDU0
LCAgIDAsICAgMCwgICA1LCAxMzAsICAzMiwgDQotICAgICAxNiwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIA0KLSAgICAgIDEsICA2NCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgMTI4LCAg
NjMsICA2MiwgICAwLCAgIDAsICAgMSwgDQotICAgICA4MywgIDg0LCAgNjUsICA4NCwgMTE2LCAg
IDAsIA0KLSAgICAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAxLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAzLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwDQotfTsNCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhMTFwcy5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJv
dWdocmdiYTExcHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdkMmEyNWFiYTA5
NmMzZmFhMzdkZjIxZWI1M2M5ODQzOGQwNGJhMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhMTFwcy5oCisrKyAvZGV2
L251bGwKQEAgLTEsMTQxICswLDAgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWlj
cm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQNCi0vLw0KLS8v
DQotLy8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVu
dHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0t
IC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBU
ZXh0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAg
IDJkICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQot
Ly8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFs
dWUgIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0g
LS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAg
ICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgICBmbG9hdCAgICAgICANCi0vLyBURVhD
T09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgICBmbG9hdCAg
IHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAg
ICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNl
ZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0t
LSAtLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAg
ICAgICAgMCAgIFRBUkdFVCAgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBs
ZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0
LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkNCi1kY2xfb3V0cHV0
IG8wLnh5encNCi1zYW1wbGUgbzAueHl6dywgdjEueHl4eCwgdDAueHl6dywgczANCi1yZXQgDQot
Ly8gQXBwcm94aW1hdGVseSAyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1j
b25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSR0JBW10gPQ0KLXsNCi0gICAgIDY4LCAgODgsICA2
NiwgIDY3LCAxNTEsIDE1MiwgDQotICAgICAgOCwgMTAyLCAxNzQsIDEzNSwgIDc2LCAgNTcsIA0K
LSAgICAxMDAsIDE0NiwgIDU5LCAgNzQsIDIwNSwgIDM1LCANCi0gICAgMjA2LCAgMjEsICAgMSwg
ICAwLCAgIDAsICAgMCwgDQotICAgICA4MCwgICAyLCAgIDAsICAgMCwgICA1LCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgIDUyLCAgIDAsICAgMCwgICAwLCANCi0gICAgMjIwLCAgIDAsICAgMCwgICAw
LCAgNTIsICAgMSwgDQotICAgICAgMCwgICAwLCAxMDQsICAgMSwgICAwLCAgIDAsIA0KLSAgICAy
MTIsICAgMSwgICAwLCAgIDAsICA4MiwgIDY4LCANCi0gICAgIDY5LCAgNzAsIDE2MCwgICAwLCAg
IDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCANCi0gICAgIDI4LCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgNCwgDQotICAgIDI1NSwgMjU1LCAgIDAsICAgMSwgICAwLCAgIDAsIA0KLSAgICAxMDgsICAg
MCwgICAwLCAgIDAsICA5MiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAg
MCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwg
DQotICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAxMDAsICAgMCwgICAw
LCAgIDAsICAgMiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgDQot
ICAgICAgNCwgICAwLCAgIDAsICAgMCwgMjU1LCAyNTUsIA0KLSAgICAyNTUsIDI1NSwgICAwLCAg
IDAsICAgMCwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgMTMsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgODMsICA5NywgMTA5LCAxMTIsIA0KLSAgICAxMDgsIDEwMSwgMTE0LCAgIDAs
ICA4NCwgMTAxLCANCi0gICAgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsICAgMCwgDQotICAgICA3
NywgMTA1LCAgOTksIDExNCwgMTExLCAxMTUsIA0KLSAgICAxMTEsIDEwMiwgMTE2LCAgMzIsICA0
MCwgIDgyLCANCi0gICAgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgDQotICAgICAzMiwg
IDgzLCAxMDQsICA5NywgMTAwLCAxMDEsIA0KLSAgICAxMTQsICAzMiwgIDY3LCAxMTEsIDEwOSwg
MTEyLCANCi0gICAgMTA1LCAxMDgsIDEwMSwgMTE0LCAgMzIsICA1NywgDQotICAgICA0NiwgIDUx
LCAgNDgsICA0NiwgIDU3LCAgNTAsIA0KLSAgICAgNDgsICA0OCwgIDQ2LCAgNDksICA1NCwgIDUx
LCANCi0gICAgIDU2LCAgNTIsICAgMCwgMTcxLCAgNzMsICA4MywgDQotICAgICA3MSwgIDc4LCAg
ODAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDIsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAN
Ci0gICAgICAwLCAgIDAsICA1NiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAs
ICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCANCi0g
ICAgICAwLCAgIDAsICAgMCwgICAwLCAgMTUsICAgMCwgDQotICAgICAgMCwgICAwLCAgNjgsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAg
ICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwg
ICAzLCAgIDMsIA0KLSAgICAgIDAsICAgMCwgIDgzLCAgODYsICA5NSwgIDgwLCANCi0gICAgIDc5
LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgDQotICAgICA3OCwgICAwLCAgODQsICA2OSwgIDg4
LCAgNjcsIA0KLSAgICAgNzksICA3OSwgIDgyLCAgNjgsICAgMCwgMTcxLCANCi0gICAgMTcxLCAx
NzEsICA3OSwgIDgzLCAgNzEsICA3OCwgDQotICAgICA0NCwgICAwLCAgIDAsICAgMCwgICAxLCAg
IDAsIA0KLSAgICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCANCi0gICAgIDMyLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KLSAgICAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAx
NSwgICAwLCAgIDAsICAgMCwgDQotICAgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsIA0K
LSAgICAgNzEsICA2OSwgIDg0LCAgIDAsIDE3MSwgMTcxLCANCi0gICAgIDgzLCAgNzIsICA2OCwg
IDgyLCAxMDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgNjQsICAgMCwgICAwLCAgIDAsIA0KLSAg
ICAgMjUsICAgMCwgICAwLCAgIDAsICA5MCwgICAwLCANCi0gICAgICAwLCAgIDMsICAgMCwgIDk2
LCAgMTYsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDg4LCAgMjQsIA0KLSAgICAg
IDAsICAgNCwgICAwLCAxMTIsICAxNiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAg
ODUsICA4NSwgDQotICAgICAgMCwgICAwLCAgOTgsICAxNiwgICAwLCAgIDMsIA0KLSAgICAgNTAs
ICAxNiwgIDE2LCAgIDAsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDAsIDEwMSwgICAwLCAgIDAs
ICAgMywgDQotICAgIDI0MiwgIDMyLCAgMTYsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgIDY5LCAgIDAsICAgMCwgICA5LCANCi0gICAgMjQyLCAgMzIsICAxNiwgICAwLCAgIDAsICAg
MCwgDQotICAgICAgMCwgICAwLCAgNzAsICAxNiwgIDE2LCAgIDAsIA0KLSAgICAgIDEsICAgMCwg
ICAwLCAgIDAsICA3MCwgMTI2LCANCi0gICAgIDE2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMCwgIDk2LCAgMTYsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDYy
LCAgIDAsICAgMCwgICAxLCANCi0gICAgIDgzLCAgODQsICA2NSwgIDg0LCAxMTYsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDANCi19Ow0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVy
cy9jb21waWxlZC9zdGFuZGFyZHZzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL3NoYWRlcnMvY29tcGlsZWQvc3RhbmRhcmR2cy5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAyNmI4OTU5NWNiYjU1Y2MzMmMzYjgzNzNkNzgxMWMwOWYwYWY0
OTYwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9jb21waWxl
ZC9zdGFuZGFyZHZzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0jaWYgMA0KLS8v
DQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4z
MC45MjAwLjE2Mzg0DQotLy8NCi0vLy8NCi0vLyBQYXJhbWV0ZXJzOg0KLS8vDQotLy8gICBmbG9h
dDQgaGFsZlBpeGVsU2l6ZTsNCi0vLw0KLS8vDQotLy8gUmVnaXN0ZXJzOg0KLS8vDQotLy8gICBO
YW1lICAgICAgICAgIFJlZyAgIFNpemUNCi0vLyAgIC0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQ0K
LS8vICAgaGFsZlBpeGVsU2l6ZSBjMCAgICAgICAxDQotLy8NCi0NCi0gICAgdnNfMl8wDQotICAg
IGRlZiBjMSwgMC41LCAtMC41LCAxLCAwDQotICAgIGRjbF9wb3NpdGlvbiB2MA0KLSAgICBhZGQg
b1BvcywgdjAsIGMwDQotICAgIG1hZCBvVDAsIHYwLCBjMS54eXp6LCBjMS54eHd3DQotDQotLy8g
YXBwcm94aW1hdGVseSAyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25z
dCBCWVRFIGdfdnMyMF9zdGFuZGFyZHZzW10gPQ0KLXsNCi0gICAgICAwLCAgIDIsIDI1NCwgMjU1
LCAyNTQsIDI1NSwgDQotICAgICAzNiwgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIA0KLSAgICAg
MjgsICAgMCwgICAwLCAgIDAsICA4NywgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAyLCAy
NTQsIDI1NSwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCANCi0gICAgIDgwLCAgIDAsICAgMCwgICAwLCAgNDgs
ICAgMCwgDQotICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDEsICAg
MCwgICAwLCAgIDAsICA2NCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQotICAgIDEwNCwgIDk3LCAxMDgsIDEwMiwgIDgwLCAxMDUsIA0KLSAgICAxMjAsIDEwMSwg
MTA4LCAgODMsIDEwNSwgMTIyLCANCi0gICAgMTAxLCAgIDAsIDE3MSwgMTcxLCAgIDEsICAgMCwg
DQotICAgICAgMywgICAwLCAgIDEsICAgMCwgICA0LCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsIDExOCwgMTE1LCAgOTUsICA1MCwgDQot
ICAgICA5NSwgIDQ4LCAgIDAsICA3NywgMTA1LCAgOTksIA0KLSAgICAxMTQsIDExMSwgMTE1LCAx
MTEsIDEwMiwgMTE2LCANCi0gICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgDQotICAg
ICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAxMDQsIA0KLSAgICAgOTcsIDEwMCwgMTAxLCAxMTQs
ICAzMiwgIDY3LCANCi0gICAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgDQotICAgIDEx
NCwgIDMyLCAgNTcsICA0NiwgIDUxLCAgNDgsIA0KLSAgICAgNDYsICA1NywgIDUwLCAgNDgsICA0
OCwgIDQ2LCANCi0gICAgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAgMCwgDQotICAgIDE3MSwg
MTcxLCAgODEsICAgMCwgICAwLCAgIDUsIA0KLSAgICAgIDEsICAgMCwgIDE1LCAxNjAsICAgMCwg
ICAwLCANCi0gICAgICAwLCAgNjMsICAgMCwgICAwLCAgIDAsIDE5MSwgDQotICAgICAgMCwgICAw
LCAxMjgsICA2MywgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgIDMxLCAgIDAsICAgMCwgICAy
LCANCi0gICAgICAwLCAgIDAsICAgMCwgMTI4LCAgIDAsICAgMCwgDQotICAgICAxNSwgMTQ0LCAg
IDIsICAgMCwgICAwLCAgIDMsIA0KLSAgICAgIDAsICAgMCwgIDE1LCAxOTIsICAgMCwgICAwLCAN
Ci0gICAgMjI4LCAxNDQsICAgMCwgICAwLCAyMjgsIDE2MCwgDQotICAgICAgNCwgICAwLCAgIDAs
ICAgNCwgICAwLCAgIDAsIA0KLSAgICAgMTUsIDIyNCwgICAwLCAgIDAsIDIyOCwgMTQ0LCANCi0g
ICAgICAxLCAgIDAsIDE2NCwgMTYwLCAgIDEsICAgMCwgDQotICAgIDI0MCwgMTYwLCAyNTUsIDI1
NSwgICAwLCAgIDANCi19Ow0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9nZW5lcmF0ZV9zaGFkZXJzLmJhdCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvc2hhZGVycy9nZW5lcmF0
ZV9zaGFkZXJzLmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFlMjk4ZTgzZjQz
MDMwMmY2NWFhMzM2MjQxNWE3MDNiMGVmYjkzMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVycy5iYXQKKysrIC9kZXYvbnVsbApAQCAt
MSwyNCArMCwwIEBACi1ARUNITyBPRkYNCi1SRU0NCi1SRU0gQ29weXJpZ2h0IChjKSAyMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotUkVNIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUNCi1SRU0gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi1SRU0NCi0NCi1QQVRI
ICVQQVRIJTslUHJvZ3JhbUZpbGVzKHg4NiklXFdpbmRvd3MgS2l0c1w4LjBcYmluXHg4NjslRFhT
REtfRElSJVxVdGlsaXRpZXNcYmluXHg4Ng0KLQ0KLWZ4YyAvRSBzdGFuZGFyZHZzIC9UIHZzXzJf
MCAvRmggY29tcGlsZWQvc3RhbmRhcmR2cy5oIEJsaXQudnMNCi1meGMgL0UgZmxpcHl2cyAvVCB2
c18yXzAgL0ZoIGNvbXBpbGVkL2ZsaXB5dnMuaCBCbGl0LnZzDQotZnhjIC9FIHBhc3N0aHJvdWdo
cHMgL1QgcHNfMl8wIC9GaCBjb21waWxlZC9wYXNzdGhyb3VnaHBzLmggQmxpdC5wcw0KLWZ4YyAv
RSBsdW1pbmFuY2VwcyAvVCBwc18yXzAgL0ZoIGNvbXBpbGVkL2x1bWluYW5jZXBzLmggQmxpdC5w
cw0KLWZ4YyAvRSBjb21wb25lbnRtYXNrcHMgL1QgcHNfMl8wIC9GaCBjb21waWxlZC9jb21wb25l
bnRtYXNrcHMuaCBCbGl0LnBzDQotDQotZnhjIC9FIFZTX1Bhc3N0aHJvdWdoIC9UIHZzXzRfMCAv
RmggY29tcGlsZWQvcGFzc3Rocm91Z2gxMXZzLmggUGFzc3Rocm91Z2gxMS5obHNsDQotZnhjIC9F
IFBTX1Bhc3N0aHJvdWdoUkdCQSAvVCBwc180XzAgL0ZoIGNvbXBpbGVkL3Bhc3N0aHJvdWdocmdi
YTExcHMuaCBQYXNzdGhyb3VnaDExLmhsc2wNCi1meGMgL0UgUFNfUGFzc3Rocm91Z2hSR0IgL1Qg
cHNfNF8wIC9GaCBjb21waWxlZC9wYXNzdGhyb3VnaHJnYjExcHMuaCBQYXNzdGhyb3VnaDExLmhs
c2wNCi1meGMgL0UgUFNfUGFzc3Rocm91Z2hMdW0gL1QgcHNfNF8wIC9GaCBjb21waWxlZC9wYXNz
dGhyb3VnaGx1bTExcHMuaCBQYXNzdGhyb3VnaDExLmhsc2wNCi1meGMgL0UgUFNfUGFzc3Rocm91
Z2hMdW1BbHBoYSAvVCBwc180XzAgL0ZoIGNvbXBpbGVkL3Bhc3N0aHJvdWdobHVtYWxwaGExMXBz
LmggUGFzc3Rocm91Z2gxMS5obHNsDQotDQotZnhjIC9FIFZTX0NsZWFyIC9UIHZzXzRfMCAvRmgg
Y29tcGlsZWQvY2xlYXIxMXZzLmggQ2xlYXIxMS5obHNsDQotZnhjIC9FIFBTX0NsZWFyU2luZ2xl
IC9UIHBzXzRfMCAvRmggY29tcGlsZWQvY2xlYXJzaW5nbGUxMXBzLmggQ2xlYXIxMS5obHNsDQot
ZnhjIC9FIFBTX0NsZWFyTXVsdGlwbGUgL1QgcHNfNF8wIC9GaCBjb21waWxlZC9jbGVhcm11bHRp
cGxlMTFwcy5oIENsZWFyMTEuaGxzbA0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvdmVydGV4Y29udmVyc2lvbi5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci92ZXJ0ZXhjb252ZXJzaW9uLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5MGI5ZDQ4YTM4NmZmYzE3MjU3MWRhNDRk
OWJlMjBkMTAyOTAxOWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci92ZXJ0
ZXhjb252ZXJzaW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMDMgKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLQotLy8gdmVydGV4Y29udmVyc2lvbi5oOiBBIGxpYnJhcnkgb2YgdmVydGV4IGNv
bnZlcnNpb24gY2xhc3NlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGJ1aWxkCi0vLyB0aGUgRm9ybWF0
Q29udmVydGVyIG9iamVjdHMgdXNlZCBieSB0aGUgYnVmZmVyIGNvbnZlcnNpb24gc3lzdGVtLgot
Ci0jaWZuZGVmIExJQkdMRVNWMl9WRVJURVhDT05WRVJTSU9OX0hfCi0jZGVmaW5lIExJQkdMRVNW
Ml9WRVJURVhDT05WRVJTSU9OX0hfCi0KLW5hbWVzcGFjZSByeAotewotCi0vLyBDb252ZXJzaW9u
IHR5cGVzOgotLy8gc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHk6IHRydWUgaWYgdGhpcyBpcyBh
biBpZGVudGl0eSB0cmFuc2Zvcm0sIGZhbHNlIG90aGVyd2lzZQotLy8gc3RhdGljIFUgY29udmVy
dChUKTogY29udmVydCBhIHNpbmdsZSBlbGVtZW50IGZyb20gdGhlIGlucHV0IHR5cGUgdG8gdGhl
IG91dHB1dCB0eXBlCi0vLyB0eXBlZGVmIC4uLiBPdXRwdXRUeXBlOiB0aGUgdHlwZSBwcm9kdWNl
ZCBieSB0aGlzIGNvbnZlcnNpb24KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgSWRlbnRp
dHkKLXsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9IHRydWU7Ci0KLSAgICB0eXBl
ZGVmIFQgT3V0cHV0VHlwZTsKLQotICAgIHN0YXRpYyBUIGNvbnZlcnQoVCB4KQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHg7Ci0gICAgfQotfTsKLQotdGVtcGxhdGUgPGNsYXNzIEZyb21ULCBjbGFz
cyBUb1Q+Ci1zdHJ1Y3QgQ2FzdAotewotICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0g
ZmFsc2U7Ci0KLSAgICB0eXBlZGVmIFRvVCBPdXRwdXRUeXBlOwotCi0gICAgc3RhdGljIFRvVCBj
b252ZXJ0KEZyb21UIHgpCi0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VG9UPih4
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBDYXN0PFQsIFQ+Ci17
Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHkgPSB0cnVlOwotCi0gICAgdHlwZWRlZiBU
IE91dHB1dFR5cGU7Ci0KLSAgICBzdGF0aWMgVCBjb252ZXJ0KFQgeCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxUPih4KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3Mg
VD4KLXN0cnVjdCBOb3JtYWxpemUKLXsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9
IGZhbHNlOwotCi0gICAgdHlwZWRlZiBmbG9hdCBPdXRwdXRUeXBlOwotCi0gICAgc3RhdGljIGZs
b2F0IGNvbnZlcnQoVCB4KQotICAgIHsKLSAgICAgICAgdHlwZWRlZiBzdGQ6Om51bWVyaWNfbGlt
aXRzPFQ+IE5MOwotICAgICAgICBmbG9hdCBmID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHgpOwotCi0g
ICAgICAgIGlmIChOTDo6aXNfc2lnbmVkKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBjb25z
dCBmbG9hdCA9PiBWQzIwMDggY29tcHV0ZXMgaXQgYXQgY29tcGlsZSB0aW1lCi0gICAgICAgICAg
ICAvLyBzdGF0aWMgY29uc3QgZmxvYXQgPT4gVkMyMDA4IGNvbXB1dGVzIGl0IHRoZSBmaXJzdCB0
aW1lIHdlIGdldCBoZXJlLCBzdG9yZXMgaXQgdG8gbWVtb3J5IHdpdGggc3RhdGljIGd1YXJkIGFu
ZCBhbGwgdGhhdC4KLSAgICAgICAgICAgIGNvbnN0IGZsb2F0IGRpdmlzb3IgPSAxLjBmLygyKnN0
YXRpY19jYXN0PGZsb2F0PihOTDo6bWF4KCkpKzEpOwotICAgICAgICAgICAgcmV0dXJuICgyKmYr
MSkqZGl2aXNvcjsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBmL05MOjptYXgoKTsKLSAgICAgICAgfQotICAgIH0KLX07Ci0KLXRlbXBsYXRl
IDxjbGFzcyBGcm9tVHlwZSwgc3RkOjpzaXplX3QgU2NhbGVCaXRzPgotc3RydWN0IEZpeGVkVG9G
bG9hdAotewotICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0gZmFsc2U7Ci0KLSAgICB0
eXBlZGVmIGZsb2F0IE91dHB1dFR5cGU7Ci0KLSAgICBzdGF0aWMgZmxvYXQgY29udmVydChGcm9t
VHlwZSB4KQotICAgIHsKLSAgICAgICAgY29uc3QgZmxvYXQgZGl2aXNvciA9IDEuMGYgLyBzdGF0
aWNfY2FzdDxmbG9hdD4oc3RhdGljX2Nhc3Q8RnJvbVR5cGU+KDEpIDw8IFNjYWxlQml0cyk7Ci0g
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oeCkgKiBkaXZpc29yOwotICAgIH0KLX07
Ci0KLS8vIFdpZGVuIHR5cGVzOgotLy8gc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpbml0aWFs
V2lkdGg6IG51bWJlciBvZiBjb21wb25lbnRzIGJlZm9yZSBjb252ZXJzaW9uCi0vLyBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgaW50IGZpbmFsV2lkdGg6IG51bWJlciBvZiBjb21wb25lbnRzIGFmdGVy
IGNvbnZlcnNpb24KLQotLy8gRmxvYXQgaXMgc3VwcG9ydGVkIGF0IGFueSBzaXplLgotdGVtcGxh
dGUgPHN0ZDo6c2l6ZV90IE4+Ci1zdHJ1Y3QgTm9XaWRlbgotewotICAgIHN0YXRpYyBjb25zdCBz
dGQ6OnNpemVfdCBpbml0aWFsV2lkdGggPSBOOwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVf
dCBmaW5hbFdpZHRoID0gTjsKLX07Ci0KLS8vIFNIT1JULCBub3JtLVNIT1JULCBub3JtLVVOU0lH
TkVEX1NIT1JUIGFyZSBzdXBwb3J0ZWQgYnV0IG9ubHkgd2l0aCAyIG9yIDQgY29tcG9uZW50cwot
dGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+Ci1zdHJ1Y3QgV2lkZW5Ub0V2ZW4KLXsKLSAgICBzdGF0
aWMgY29uc3Qgc3RkOjpzaXplX3QgaW5pdGlhbFdpZHRoID0gTjsKLSAgICBzdGF0aWMgY29uc3Qg
c3RkOjpzaXplX3QgZmluYWxXaWR0aCA9IE4rKE4mMSk7Ci19OwotCi10ZW1wbGF0ZSA8c3RkOjpz
aXplX3QgTj4KLXN0cnVjdCBXaWRlblRvRm91cgotewotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNp
emVfdCBpbml0aWFsV2lkdGggPSBOOwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5h
bFdpZHRoID0gNDsKLX07Ci0KLS8vIE1vc3QgdHlwZXMgaGF2ZSAwIGFuZCAxIHRoYXQgYXJlIGp1
c3QgdGhhdC4KLXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IFNpbXBsZURlZmF1bHRWYWx1ZXMK
LXsKLSAgICBzdGF0aWMgVCB6ZXJvKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oMCk7IH0KLSAg
ICBzdGF0aWMgVCBvbmUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxUPigxKTsgfQotfTsKLQotLy8g
QnV0IG5vcm1hbGlzZWQgdHlwZXMgb25seSBzdG9yZSBbMCwxXSBvciBbLTEsMV0gc28gMS4wIGlz
IHJlcHJlc2VudGVkIGJ5IHRoZSBtYXggdmFsdWUuCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVj
dCBOb3JtYWxpemVkRGVmYXVsdFZhbHVlcwotewotICAgIHN0YXRpYyBUIHplcm8oKSB7IHJldHVy
biBzdGF0aWNfY2FzdDxUPigwKTsgfQotICAgIHN0YXRpYyBUIG9uZSgpIHsgcmV0dXJuIHN0ZDo6
bnVtZXJpY19saW1pdHM8VD46Om1heCgpOyB9Ci19OwotCi0vLyBDb252ZXJ0ZXI6Ci0vLyBzdGF0
aWMgY29uc3QgYm9vbCBpZGVudGl0eTogdHJ1ZSBpZiB0aGlzIGlzIGFuIGlkZW50aXR5IHRyYW5z
Zm9ybSAod2l0aCBubyB3aWRlbmluZykKLS8vIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5h
bFNpemU6IG51bWJlciBvZiBieXRlcyBwZXIgb3V0cHV0IHZlcnRleAotLy8gc3RhdGljIHZvaWQg
Y29udmVydEFycmF5KGNvbnN0IHZvaWQgKmluLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6
ZV90IG4sIHZvaWQgKm91dCk6IGNvbnZlcnQgYW4gYXJyYXkgb2YgdmVydGljZXMuIElucHV0IG1h
eSBiZSBzdHJpZGVkLCBidXQgb3V0cHV0IHdpbGwgYmUgdW5zdHJpZGVkLgotCi10ZW1wbGF0ZSA8
Y2xhc3MgSW5ULCBjbGFzcyBXaWRlblJ1bGUsIGNsYXNzIENvbnZlcnRlciwgY2xhc3MgRGVmYXVs
dFZhbHVlUnVsZSA9IFNpbXBsZURlZmF1bHRWYWx1ZXM8SW5UPiA+Ci1zdHJ1Y3QgVmVydGV4RGF0
YUNvbnZlcnRlcgotewotICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udmVydGVyOjpPdXRwdXRUeXBl
IE91dHB1dFR5cGU7Ci0gICAgdHlwZWRlZiBJblQgSW5wdXRUeXBlOwotCi0gICAgc3RhdGljIGNv
bnN0IGJvb2wgaWRlbnRpdHkgPSAoV2lkZW5SdWxlOjppbml0aWFsV2lkdGggPT0gV2lkZW5SdWxl
OjpmaW5hbFdpZHRoKSAmJiBDb252ZXJ0ZXI6OmlkZW50aXR5OwotICAgIHN0YXRpYyBjb25zdCBz
dGQ6OnNpemVfdCBmaW5hbFNpemUgPSBXaWRlblJ1bGU6OmZpbmFsV2lkdGggKiBzaXplb2YoT3V0
cHV0VHlwZSk7Ci0KLSAgICBzdGF0aWMgdm9pZCBjb252ZXJ0QXJyYXkoY29uc3QgSW5wdXRUeXBl
ICppbiwgc3RkOjpzaXplX3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBuLCBPdXRwdXRUeXBlICpvdXQp
Ci0gICAgewotICAgICAgICBmb3IgKHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwgbjsgaSsrKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBjb25zdCBJbnB1dFR5cGUgKmVpbiA9IHBvaW50ZXJBZGRCeXRl
cyhpbiwgaSAqIHN0cmlkZSk7Ci0KLSAgICAgICAgICAgIGNvcHlDb21wb25lbnQob3V0LCBlaW4s
IDAsIHN0YXRpY19jYXN0PE91dHB1dFR5cGU+KERlZmF1bHRWYWx1ZVJ1bGU6Onplcm8oKSkpOwot
ICAgICAgICAgICAgY29weUNvbXBvbmVudChvdXQsIGVpbiwgMSwgc3RhdGljX2Nhc3Q8T3V0cHV0
VHlwZT4oRGVmYXVsdFZhbHVlUnVsZTo6emVybygpKSk7Ci0gICAgICAgICAgICBjb3B5Q29tcG9u
ZW50KG91dCwgZWluLCAyLCBzdGF0aWNfY2FzdDxPdXRwdXRUeXBlPihEZWZhdWx0VmFsdWVSdWxl
Ojp6ZXJvKCkpKTsKLSAgICAgICAgICAgIGNvcHlDb21wb25lbnQob3V0LCBlaW4sIDMsIHN0YXRp
Y19jYXN0PE91dHB1dFR5cGU+KERlZmF1bHRWYWx1ZVJ1bGU6Om9uZSgpKSk7Ci0KLSAgICAgICAg
ICAgIG91dCArPSBXaWRlblJ1bGU6OmZpbmFsV2lkdGg7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBzdGF0aWMgdm9pZCBjb252ZXJ0QXJyYXkoY29uc3Qgdm9pZCAqaW4sIHN0ZDo6c2l6ZV90IHN0
cmlkZSwgc3RkOjpzaXplX3Qgbiwgdm9pZCAqb3V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNv
bnZlcnRBcnJheShzdGF0aWNfY2FzdDxjb25zdCBJbnB1dFR5cGUqPihpbiksIHN0cmlkZSwgbiwg
c3RhdGljX2Nhc3Q8T3V0cHV0VHlwZSo+KG91dCkpOwotICAgIH0KLQotICBwcml2YXRlOgotICAg
IC8vIEFkdmFuY2UgdGhlIGdpdmVuIHBvaW50ZXIgYnkgYSBudW1iZXIgb2YgYnl0ZXMgKG5vdCBw
b2ludGVkLXRvIGVsZW1lbnRzKS4KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgICBzdGF0aWMg
VCAqcG9pbnRlckFkZEJ5dGVzKFQgKmJhc2VQdHIsIHN0ZDo6c2l6ZV90IG51bUJ5dGVzKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCAqPihyZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4oYmFzZVB0cikgKyBudW1CeXRlcyk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZv
aWQgY29weUNvbXBvbmVudChPdXRwdXRUeXBlICpvdXQsIGNvbnN0IElucHV0VHlwZSAqaW4sIHN0
ZDo6c2l6ZV90IGVsZW1lbnRpbmRleCwgT3V0cHV0VHlwZSBkZWZhdWx0dmFsdWUpCi0gICAgewot
ICAgICAgICBpZiAoV2lkZW5SdWxlOjpmaW5hbFdpZHRoID4gZWxlbWVudGluZGV4KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAoV2lkZW5SdWxlOjppbml0aWFsV2lkdGggPiBlbGVtZW50aW5k
ZXgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0W2VsZW1lbnRpbmRleF0gPSBD
b252ZXJ0ZXI6OmNvbnZlcnQoaW5bZWxlbWVudGluZGV4XSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0W2VsZW1lbnRp
bmRleF0gPSBkZWZhdWx0dmFsdWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19
OwotCi19Ci0KLSNlbmRpZiAgIC8vIExJQkdMRVNWMl9WRVJURVhDT05WRVJTSU9OX0hfCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvY29tcGlsZXIv
QXJyYXlCb3VuZHNDbGFtcGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRf
cGFydHkvY29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmgKaW5kZXggMGQ0ZTFhMzc0Y2E4MTgy
MjIxMjhiYWFkYzk4N2I1ZDhkMjAxYTg0My4uZjcyNWY1NWI1NzRiZDZhZDg4YjQwZWVkN2Y5NGI1
OGRmMjMyNTZlYyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3RoaXJk
X3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0eS9jb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIuaApA
QCAtMjgsOCArMjgsOCBAQAogCiAjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCiAKLSNp
bmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVk
aWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgogCiBjbGFzcyBBcnJheUJv
dW5kc0NsYW1wZXIgewogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL3RoaXJkX3BhcnR5L211cm11cmhhc2gvTXVybXVySGFzaDMuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L211cm11cmhhc2gvTXVybXVySGFzaDMuY3Bw
CmluZGV4IGYxMWZiMjMzMmYxZjE1MDkyM2ZiMGM0ZmI2NTFkZTc5MTNlODc4MjYuLmRkODYyOTI2
NDllYzUyZDg0YWU0NzJhMWJlN2NlYWNhNTUyODBhNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0eS9tdXJtdXJoYXNoL011cm11ckhhc2gzLmNwcAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvbXVybXVyaGFzaC9N
dXJtdXJIYXNoMy5jcHAKQEAgLTE2LDIwICsxNiwyMCBAQAogCiAjaWYgZGVmaW5lZChfTVNDX1ZF
UikKIAotI2RlZmluZSBGT1JDRV9JTkxJTkUgICAgX19mb3JjZWlubGluZQorI2RlZmluZSBGT1JD
RV9JTkxJTkUJX19mb3JjZWlubGluZQogCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAKLSNkZWZpbmUg
Uk9UTDMyKHgseSkgICAgX3JvdGwoeCx5KQotI2RlZmluZSBST1RMNjQoeCx5KSAgICBfcm90bDY0
KHgseSkKKyNkZWZpbmUgUk9UTDMyKHgseSkJX3JvdGwoeCx5KQorI2RlZmluZSBST1RMNjQoeCx5
KQlfcm90bDY0KHgseSkKIAogI2RlZmluZSBCSUdfQ09OU1RBTlQoeCkgKHgpCiAKIC8vIE90aGVy
IGNvbXBpbGVycwogCi0jZWxzZSAgICAvLyBkZWZpbmVkKF9NU0NfVkVSKQorI2Vsc2UJLy8gZGVm
aW5lZChfTVNDX1ZFUikKIAotI2RlZmluZSAgICBGT1JDRV9JTkxJTkUgX19hdHRyaWJ1dGVfXygo
YWx3YXlzX2lubGluZSkpCisjZGVmaW5lCUZPUkNFX0lOTElORSBfX2F0dHJpYnV0ZV9fKChhbHdh
eXNfaW5saW5lKSkKIAogaW5saW5lIHVpbnQzMl90IHJvdGwzMiAoIHVpbnQzMl90IHgsIGludDhf
dCByICkKIHsKQEAgLTQxLDggKzQxLDggQEAgaW5saW5lIHVpbnQ2NF90IHJvdGw2NCAoIHVpbnQ2
NF90IHgsIGludDhfdCByICkKICAgcmV0dXJuICh4IDw8IHIpIHwgKHggPj4gKDY0IC0gcikpOwog
fQogCi0jZGVmaW5lICAgIFJPVEwzMih4LHkpICAgIHJvdGwzMih4LHkpCi0jZGVmaW5lIFJPVEw2
NCh4LHkpICAgIHJvdGw2NCh4LHkpCisjZGVmaW5lCVJPVEwzMih4LHkpCXJvdGwzMih4LHkpCisj
ZGVmaW5lIFJPVEw2NCh4LHkpCXJvdGw2NCh4LHkpCiAKICNkZWZpbmUgQklHX0NPTlNUQU5UKHgp
ICh4IyNMTFUpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGly
ZF9wYXJ0eS9tdXJtdXJoYXNoL011cm11ckhhc2gzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvdGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJtdXJIYXNoMy5oCmluZGV4IDc1Y2Q0YmE1
ODE1NGE5NWI3ZjE0YWE4NWE2ZTMyMmRkMmY1NGQzMzQuLmMwOGY0ZjI1ODUyYzA3NmUzNzMxOGMy
YTkzMzU3NjE2YjViOTRiMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy90aGlyZF9wYXJ0eS9tdXJtdXJoYXNoL011cm11ckhhc2gzLmgKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L211cm11cmhhc2gvTXVybXVySGFzaDMuaApAQCAt
MTgsNyArMTgsNyBAQCB0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgdWludDY0X3Q7CiAKIC8vIE90
aGVyIGNvbXBpbGVycwogCi0jZWxzZSAgICAvLyBkZWZpbmVkKF9NU0NfVkVSKQorI2Vsc2UJLy8g
ZGVmaW5lZChfTVNDX1ZFUikKIAogI2luY2x1ZGUgPHN0ZGludC5oPgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDE3ZjEzNDExZDcyNjQxOGFiZDRkNzg3MmRiOGZlMjA3Yzc3MDdlMmQuLmQwYmUw
MDJjYTE1YzY5NDJhOGE1NTMyYzFjNTkyOWY2OTM4OTg2YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CkBAIC0yODQ3LDU1ICsyODQ3LDU2IEBAIGlmIChXVEZfVVNFXzNEX0dSQVBISUNTKQogICAgIGVu
ZGlmICgpCiAKICAgICBsaXN0KEFQUEVORCBBTkdMRVN1cHBvcnRfU09VUkNFUwotICAgICAgICAk
e0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vZ2xzbGFuZy5jcHAKLSAgICAgICAgJHtERVJJ
VkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L2dsc2xhbmdfdGFiLmNwcAotCi0gICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5j
cHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW4u
Y3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxl
ci5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVj
dENhbGxEZXB0aC5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL0RldGVjdERpc2NvbnRpbnVpdHkuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FO
R0xFL3NyYy9jb21waWxlci9EaWFnbm9zdGljcy5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuY3BwCi0gICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9Gb3JMb29wVW5yb2xsLmNwcAotICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvSW5mb1NpbmsuY3BwCi0gICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcAot
ICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURs
bC5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRp
YWxpemVHTFBvc2l0aW9uLmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybVRyYXZlcnNlLmNwcAotICAgICAgICAke1RI
SVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvSW50ZXJtZWRpYXRlLmNwcAotICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFt
ZXMuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9PdXRw
dXRFU1NMLmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
T3V0cHV0R0xTTC5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL091dHB1dEdMU0xCYXNlLmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL1BhcnNlQ29udGV4dC5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmNwcAotICAgICAgICAke1RI
SVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5jcHAKLSAgICAgICAg
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1NlYXJjaFN5bWJvbC5jcHAKLSAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3Bw
Ci0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJs
ZS5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5z
bGF0b3JFU1NMLmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvVHJhbnNsYXRvckdMU0wuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5jcHAKLSAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAK
LSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1VuaWZvcm0uY3Bw
Ci0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9WYWxpZGF0ZUxp
bWl0YXRpb25zLmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvVmFyaWFibGVJbmZvLmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvVmFyaWFibGVQYWNrZXIuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FO
R0xFL3NyYy9jb21waWxlci9WZXJzaW9uR0xTTC5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVnLmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElS
fS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtT3V0LmNwcAotICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcGFyc2VDb25zdC5jcHAKLSAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3V0aWwuY3BwCi0KLSAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAK
LSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0Rl
cGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwCi0gICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZS5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCisgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvZGVHZW4uY3Bw
CisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L0NvbXBpbGVyLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9EZXRlY3RDYWxsRGVwdGguY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RldGVjdERpc2NvbnRpbnVpdHkuY3Bw
CisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L0RpYWdub3N0aWNzLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmNwcAorICAgICAgICAke1RISVJEUEFS
VFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Gb3JMb29wVW5yb2xsLmNwcAor
ICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9J
bmZvU2luay5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvSW5pdGlhbGl6ZS5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZURsbC5jcHAKKyAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVBh
cnNlQ29udGV4dC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVZhcmlhYmxlcy5jcHAKKyAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtZWRpYXRlLmNwcAor
ICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9J
bnRlcm1UcmF2ZXJzZS5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtZWRpYXRlLmNwcAorICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5j
cHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvT3V0cHV0RVNTTC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuY3BwCisgICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1
dEhMU0wuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUG9vbEFsbG9jLmNwcAorICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9RdWFsaWZpZXJBbGl2ZS5j
cHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvUmVtb3ZlVHJlZS5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvUmV3cml0ZUVsc2VCbG9ja3MuY3BwCisgICAgICAgICR7VEhJUkRQ
QVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1NlYXJjaFN5bWJvbC5jcHAK
KyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
U2hhZGVyTGFuZy5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JFU1NMLmNwcAorICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yR0xTTC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvckhMU0wuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1VuZm9sZFNob3J0Q2lyY3VpdC5jcHAKKyAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5m
b2xkU2hvcnRDaXJjdWl0QVNULmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmNwcAorICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNw
cAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9WYXJpYWJsZUluZm8uY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlUGFja2VyLmNwcAorICAgICAgICAke1RISVJEUEFS
VFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WZXJzaW9uR0xTTC5jcHAKKyAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvY29t
cGlsZXJkZWJ1Zy5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ19sZXguY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmNwcAorICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1PdXQu
Y3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL3BhcnNlQ29uc3QuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL3V0aWwuY3BwCisKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNw
cAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcAorICAgICAgICAke1RISVJEUEFS
VFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5
R3JhcGhPdXRwdXQuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcAogCiAg
ICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
RGlhZ25vc3RpY3NCYXNlLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcApAQCAtMjkwOSwx
OSArMjkxMCwxOSBAQCBpZiAoV1RGX1VTRV8zRF9HUkFQSElDUykKICAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbi5jcHAKICAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tl
bml6ZXIuY3BwCiAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcAotICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAKKyAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5n
L1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcAogCiAgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy90aGlyZF9wYXJ0eS9jb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIuY3Bw
CiAgICAgKQogCiAgICAgaWYgKFdJTjMyKQogICAgICAgICBsaXN0KEFQUEVORCBBTkdMRVN1cHBv
cnRfU09VUkNFUwotICAgICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL29zc291cmNlX3dpbi5jcHAKKyAgICAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL29zc291cmNlX3dpbi5jcHAKICAgICAgICAgKQogICAg
IGVsc2UgKCkKICAgICAgICAgbGlzdChBUFBFTkQgQU5HTEVTdXBwb3J0X1NPVVJDRVMKLSAgICAg
ICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9vc3NvdXJjZV9wb3Np
eC5jcHAKKyAgICAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL29zc291cmNlX3Bvc2l4LmNwcAogICAgICAgICApCiAgICAgZW5kaWYgKCkKIApA
QCAtMjk4OSwyMiArMjk5MCw2IEBAIHNldChJRExfQVRUUklCVVRFU19GSUxFICR7V0VCQ09SRV9E
SVJ9L2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQpCiAKIFdFQktJVF9JTkNMVURF
X0NPTkZJR19GSUxFU19JRl9FWElTVFMoKQogCi0jIEFOR0xFIHRva2VuaXplciAmIHBhcnNlcgot
YWRkX2N1c3RvbV9jb21tYW5kKAotICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19XRUJDT1JF
X0RJUn0vZ2xzbGFuZy5jcHAKLSAgICBNQUlOX0RFUEVOREVOQ1kgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubAotICAgIENPTU1BTkQgJHtGTEVYX0VYRUNVVEFC
TEV9IC0tbm9saW5lIC0tbm91bmlzdGQgLS1vdXRmaWxlPWdsc2xhbmcuY3BwICR7VEhJUkRQQVJU
WV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmwKLSAgICBXT1JLSU5HX0RJUkVDVE9S
WSAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0KLSAgICBWRVJCQVRJTSkKLQotYWRkX2N1
c3RvbV9jb21tYW5kKAotICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0v
Z2xzbGFuZ190YWIuY3BwICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9nbHNsYW5nX3Rh
Yi5oCi0gICAgTUFJTl9ERVBFTkRFTkNZICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci9nbHNsYW5nLnkKLSAgICBDT01NQU5EICR7QklTT05fRVhFQ1VUQUJMRX0gLS1uby1saW5l
cyAtLWRlZmluZXM9Z2xzbGFuZ190YWIuaCAtLXNrZWxldG9uPXlhY2MuYyAtLW91dHB1dD1nbHNs
YW5nX3RhYi5jcHAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcu
eQotICAgIFdPUktJTkdfRElSRUNUT1JZICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfQot
ICAgIFZFUkJBVElNKQotCi0KICMgR2VuZXJhdGUgSW5zcGVjdG9yV2ViLmpzb24KIGFkZF9jdXN0
b21fY29tbWFuZCgKICAgICBPVVRQVVQgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0lu
c3BlY3RvcldlYi5qc29uCkBAIC0zMjg1LDQgKzMyNzAsNCBAQCBlbmRpZiAoKQogaWYgKFNIQVJF
RF9DT1JFKQogICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhXZWJDb3JlIFBST1BFUlRJRVMgVkVS
U0lPTiAke1BST0pFQ1RfVkVSU0lPTn0gU09WRVJTSU9OICR7UFJPSkVDVF9WRVJTSU9OX01BSk9S
fSkKICAgICBpbnN0YWxsKFRBUkdFVFMgV2ViQ29yZSBERVNUSU5BVElPTiAiJHtMSUJfSU5TVEFM
TF9ESVJ9IikKLWVuZGlmICgpCitlbmRpZiAoKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUuYW0KaW5kZXggMDRjYWFlZjA1YjQyZWQ1ODhlODc3ZjI3MThmMDEyNWJh
MWYzZjRiMy4uOGVkMWNjMzg5YTc0OWQ3OTU0ZDg5NDJmOTExNmMxZTAwYmI5ODAwOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0KQEAgLTM5MCwxNCArMzkwLDYgQEAgYXVkaW9fREFUQSA9ICQoV2ViQ29y
ZSkvcGxhdGZvcm0vYXVkaW8vcmVzb3VyY2VzL0NvbXBvc2l0ZS53YXYKIGRpc3RfYXVkaW9fREFU
QSA9ICQoYXVkaW9fREFUQSkKIGVuZGlmICAjIEVORCBFTkFCTEVfV0VCX0FVRElPCiAKLSMgQU5H
TEUgdG9rZW5pemVyICYgcGFyc2VyCi1EZXJpdmVkU291cmNlcy9BTkdMRS9nbHNsYW5nLmNwcDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubCBEZXJpdmVkU291
cmNlcy9BTkdMRS9nbHNsYW5nX3RhYi5jcHAKLQkkKEFNX1ZfR0VOKSQoRkxFWCkgLS1ub2xpbmUg
LS1ub3VuaXN0ZCAtLW91dGZpbGU9IiRAIiAiJDwiCi0KLURlcml2ZWRTb3VyY2VzL0FOR0xFL2ds
c2xhbmdfdGFiLmNwcDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xh
bmcueQotCSQoQU1fVl9HRU4pJChCSVNPTikgLS1uby1saW5lcyAtLWRlZmluZXM9IkRlcml2ZWRT
b3VyY2VzL0FOR0xFL2dsc2xhbmdfdGFiLmgiIC0tc2tlbGV0b249eWFjYy5jIC0tb3V0cHV0PSIk
QCIgJDwKLURlcml2ZWRTb3VyY2VzL0FOR0xFL2dsc2xhbmdfdGFiLmg6IERlcml2ZWRTb3VyY2Vz
L0FOR0xFL2dsc2xhbmdfdGFiLmNwcAotCiBJRExfUEFUSCA6PSBcCiAgICAgJChXZWJDb3JlKS9N
b2R1bGVzL2JhdHRlcnkgXAogICAgICQoV2ViQ29yZSkvTW9kdWxlcy9nYW1lcGFkIFwKQEAgLTY2
NCw4ICs2NTYsNiBAQCBFWFRSQV9ESVNUICs9IFwKIAkkKHdpbGRjYXJkICQoc3JjZGlyKS9Tb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzLyouaWRsKSBcCiAJJCh3aWxkY2FyZCAkKHNyY2RpcikvU291cmNl
L1dlYkNvcmUveG1sLyouaWRsKSBcCiAJJCh3aWxkY2FyZCAkKHNyY2RpcikvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL3Byb3RvY29sLyouanNvbikgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9nbHNsYW5nLmwgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9nbHNsYW5nLnkgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckdPYmplY3QucG0gXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvckpTLnBtIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3IucG0gXAo=
</data>
<flag name="review"
          id="249114"
          type_id="1"
          status="+"
          setter="bfulgham"
    />
          </attachment>
      

    </bug>

</bugzilla>